diff --git a/org.eclipse.wb.core.databinding.xml/src/org/eclipse/wb/internal/core/databinding/xml/Activator.java b/org.eclipse.wb.core.databinding.xml/src/org/eclipse/wb/internal/core/databinding/xml/Activator.java
index ba36501bf..1ea6122f9 100644
--- a/org.eclipse.wb.core.databinding.xml/src/org/eclipse/wb/internal/core/databinding/xml/Activator.java
+++ b/org.eclipse.wb.core.databinding.xml/src/org/eclipse/wb/internal/core/databinding/xml/Activator.java
@@ -34,96 +34,96 @@
  * @author lobas_av
  */
 public final class Activator extends AbstractUIPlugin {
-  public static final String PLUGIN_ID = "org.eclipse.wb.core.databinding.xml";
-  private static Activator m_plugin;
+	public static final String PLUGIN_ID = "org.eclipse.wb.core.databinding.xml";
+	private static Activator m_plugin;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Life cycle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void stop(BundleContext context) throws Exception {
-    m_plugin = null;
-    super.stop(context);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Life cycle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void stop(BundleContext context) throws Exception {
+		m_plugin = null;
+		super.stop(context);
+	}
 
-  @Override
-  public void start(BundleContext context) throws Exception {
-    super.start(context);
-    m_plugin = this;
-  }
+	@Override
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+		m_plugin = this;
+	}
 
-  public static Activator getDefault() {
-    return m_plugin;
-  }
+	public static Activator getDefault() {
+		return m_plugin;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link InputStream} for file from plugin directory.
-   */
-  public static InputStream getFile(final String path) {
-    return ExecutionUtils.runObject(new RunnableObjectEx<InputStream>() {
-      @Override
-      public InputStream runObject() throws Exception {
-        return m_plugin.getBundle().getEntry(path).openStream();
-      }
-    }, "Unable to open plugin file %s", path);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link InputStream} for file from plugin directory.
+	 */
+	public static InputStream getFile(final String path) {
+		return ExecutionUtils.runObject(new RunnableObjectEx<InputStream>() {
+			@Override
+			public InputStream runObject() throws Exception {
+				return m_plugin.getBundle().getEntry(path).openStream();
+			}
+		}, "Unable to open plugin file %s", path);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Caches
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final Map<String, Image> m_nameToIconMap = Maps.newHashMap();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Caches
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final Map<String, Image> m_nameToIconMap = Maps.newHashMap();
 
-  /**
-   * Get image from "icons" directory.
-   */
-  public static Image getImage(String name) {
-    Image image = m_nameToIconMap.get(name);
-    if (image == null) {
-      // prepare path
-      String path;
-      if (name.startsWith("/")) {
-        path = name;
-      } else {
-        path = "icons/" + name;
-      }
-      //
-      InputStream is = getFile(path);
-      try {
-        image = new Image(Display.getCurrent(), is);
-        m_nameToIconMap.put(name, image);
-      } finally {
-        IOUtils.closeQuietly(is);
-      }
-    }
-    return image;
-  }
+	/**
+	 * Get image from "icons" directory.
+	 */
+	public static Image getImage(String name) {
+		Image image = m_nameToIconMap.get(name);
+		if (image == null) {
+			// prepare path
+			String path;
+			if (name.startsWith("/")) {
+				path = name;
+			} else {
+				path = "icons/" + name;
+			}
+			//
+			InputStream is = getFile(path);
+			try {
+				image = new Image(Display.getCurrent(), is);
+				m_nameToIconMap.put(name, image);
+			} finally {
+				IOUtils.closeQuietly(is);
+			}
+		}
+		return image;
+	}
 
-  /**
-   * Get image descriptor from "icons" directory.
-   */
-  public static ImageDescriptor getImageDescriptor(String name) {
-    URL url = m_plugin.getBundle().getEntry("icons/" + name);
-    return ImageDescriptor.createFromURL(url);
-  }
+	/**
+	 * Get image descriptor from "icons" directory.
+	 */
+	public static ImageDescriptor getImageDescriptor(String name) {
+		URL url = m_plugin.getBundle().getEntry("icons/" + name);
+		return ImageDescriptor.createFromURL(url);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Preferences
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Returns preference store for DB plugin.
-   */
-  public static IPreferenceStore getStore() {
-    return m_plugin.getPreferenceStore();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Preferences
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Returns preference store for DB plugin.
+	 */
+	public static IPreferenceStore getStore() {
+		return m_plugin.getPreferenceStore();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding.xml/src/org/eclipse/wb/internal/core/databinding/xml/Messages.java b/org.eclipse.wb.core.databinding.xml/src/org/eclipse/wb/internal/core/databinding/xml/Messages.java
index 1933a2cb8..28b7733ec 100644
--- a/org.eclipse.wb.core.databinding.xml/src/org/eclipse/wb/internal/core/databinding/xml/Messages.java
+++ b/org.eclipse.wb.core.databinding.xml/src/org/eclipse/wb/internal/core/databinding/xml/Messages.java
@@ -3,14 +3,14 @@
 import org.eclipse.osgi.util.NLS;
 
 public class Messages extends NLS {
-  private static final String BUNDLE_NAME = "org.eclipse.wb.internal.core.databinding.xml.messages"; //$NON-NLS-1$
-  public static String BindingXmlPage_errorMessage;
-  public static String BindingXmlPage_name;
-  static {
-    // initialize resource bundle
-    NLS.initializeMessages(BUNDLE_NAME, Messages.class);
-  }
+	private static final String BUNDLE_NAME = "org.eclipse.wb.internal.core.databinding.xml.messages"; //$NON-NLS-1$
+	public static String BindingXmlPage_errorMessage;
+	public static String BindingXmlPage_name;
+	static {
+		// initialize resource bundle
+		NLS.initializeMessages(BUNDLE_NAME, Messages.class);
+	}
 
-  private Messages() {
-  }
+	private Messages() {
+	}
 }
diff --git a/org.eclipse.wb.core.databinding.xml/src/org/eclipse/wb/internal/core/databinding/xml/model/IDatabindingFactory.java b/org.eclipse.wb.core.databinding.xml/src/org/eclipse/wb/internal/core/databinding/xml/model/IDatabindingFactory.java
index ef5f7277f..b77f0fe6d 100644
--- a/org.eclipse.wb.core.databinding.xml/src/org/eclipse/wb/internal/core/databinding/xml/model/IDatabindingFactory.java
+++ b/org.eclipse.wb.core.databinding.xml/src/org/eclipse/wb/internal/core/databinding/xml/model/IDatabindingFactory.java
@@ -24,14 +24,14 @@
  * @coverage bindings.xml.model
  */
 public interface IDatabindingFactory {
-  /**
-   * @return {@link IDatabindingsProvider} for given root {@link XmlObjectInfo} or <code>null</code>
-   *         if operation for given root not supported.
-   */
-  IDatabindingsProvider createProvider(XmlObjectInfo xmlObjectRoot) throws Exception;
+	/**
+	 * @return {@link IDatabindingsProvider} for given root {@link XmlObjectInfo} or <code>null</code>
+	 *         if operation for given root not supported.
+	 */
+	IDatabindingsProvider createProvider(XmlObjectInfo xmlObjectRoot) throws Exception;
 
-  /**
-   * @return {@link AbstractUIPlugin} host for this factory.
-   */
-  AbstractUIPlugin getPlugin();
+	/**
+	 * @return {@link AbstractUIPlugin} host for this factory.
+	 */
+	AbstractUIPlugin getPlugin();
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding.xml/src/org/eclipse/wb/internal/core/databinding/xml/model/SynchronizeManager.java b/org.eclipse.wb.core.databinding.xml/src/org/eclipse/wb/internal/core/databinding/xml/model/SynchronizeManager.java
index 80acccf6a..fc97b8dc6 100644
--- a/org.eclipse.wb.core.databinding.xml/src/org/eclipse/wb/internal/core/databinding/xml/model/SynchronizeManager.java
+++ b/org.eclipse.wb.core.databinding.xml/src/org/eclipse/wb/internal/core/databinding/xml/model/SynchronizeManager.java
@@ -25,50 +25,50 @@
  * @coverage bindings.xml.model
  */
 public final class SynchronizeManager {
-  private final IDatabindingsProvider m_provider;
+	private final IDatabindingsProvider m_provider;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SynchronizeManager(IDatabindingsProvider provider, XmlObjectInfo xmlObjectRoot) {
-    m_provider = provider;
-    xmlObjectRoot.addBroadcastListener(new ObjectInfoDelete() {
-      @Override
-      public void after(ObjectInfo parent, ObjectInfo child) throws Exception {
-        synchronizeObserves();
-      }
-    });
-    xmlObjectRoot.addBroadcastListener(new XmlObjectAdd() {
-      @Override
-      public void after(ObjectInfo parent, final XmlObjectInfo child) throws Exception {
-        child.addBroadcastListener(new XmlObjectSetObjectAfter() {
-          @Override
-          public void invoke(XmlObjectInfo target, Object o) throws Exception {
-            if (child == target) {
-              target.removeBroadcastListener(this);
-              synchronizeObserves();
-            }
-          }
-        });
-      }
-    });
-    xmlObjectRoot.addBroadcastListener(new XmlObjectMove() {
-      @Override
-      public void after(XmlObjectInfo child, ObjectInfo oldParent, ObjectInfo newParent)
-          throws Exception {
-        synchronizeObserves();
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SynchronizeManager(IDatabindingsProvider provider, XmlObjectInfo xmlObjectRoot) {
+		m_provider = provider;
+		xmlObjectRoot.addBroadcastListener(new ObjectInfoDelete() {
+			@Override
+			public void after(ObjectInfo parent, ObjectInfo child) throws Exception {
+				synchronizeObserves();
+			}
+		});
+		xmlObjectRoot.addBroadcastListener(new XmlObjectAdd() {
+			@Override
+			public void after(ObjectInfo parent, final XmlObjectInfo child) throws Exception {
+				child.addBroadcastListener(new XmlObjectSetObjectAfter() {
+					@Override
+					public void invoke(XmlObjectInfo target, Object o) throws Exception {
+						if (child == target) {
+							target.removeBroadcastListener(this);
+							synchronizeObserves();
+						}
+					}
+				});
+			}
+		});
+		xmlObjectRoot.addBroadcastListener(new XmlObjectMove() {
+			@Override
+			public void after(XmlObjectInfo child, ObjectInfo oldParent, ObjectInfo newParent)
+					throws Exception {
+				synchronizeObserves();
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Handle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void synchronizeObserves() throws Exception {
-    m_provider.synchronizeObserves();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Handle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void synchronizeObserves() throws Exception {
+		m_provider.synchronizeObserves();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding.xml/src/org/eclipse/wb/internal/core/databinding/xml/parser/DatabindingRootProcessor.java b/org.eclipse.wb.core.databinding.xml/src/org/eclipse/wb/internal/core/databinding/xml/parser/DatabindingRootProcessor.java
index 56a7c8c1d..aff1e4e31 100644
--- a/org.eclipse.wb.core.databinding.xml/src/org/eclipse/wb/internal/core/databinding/xml/parser/DatabindingRootProcessor.java
+++ b/org.eclipse.wb.core.databinding.xml/src/org/eclipse/wb/internal/core/databinding/xml/parser/DatabindingRootProcessor.java
@@ -32,42 +32,42 @@
  * @coverage bindings.xml.parser
  */
 public final class DatabindingRootProcessor implements IRootProcessor {
-  public static final IRootProcessor INSTANCE = new DatabindingRootProcessor();
-  public static final Map<IDocument, ParseState> STATES = Maps.newHashMap();
-  private List<IDatabindingFactory> m_factories;
+	public static final IRootProcessor INSTANCE = new DatabindingRootProcessor();
+	public static final Map<IDocument, ParseState> STATES = Maps.newHashMap();
+	private List<IDatabindingFactory> m_factories;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IRootProcessor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void process(final XmlObjectInfo root) throws Exception {
-    // prepare factories
-    if (m_factories == null) {
-      m_factories =
-          ExternalFactoriesHelper.getElementsInstances(
-              IDatabindingFactory.class,
-              "org.eclipse.wb.core.databinding.xml.databindingFactories",
-              "factory");
-    }
-    // handle providers
-    for (IDatabindingFactory factory : m_factories) {
-      IDatabindingsProvider databindingsProvider = factory.createProvider(root);
-      if (databindingsProvider != null) {
-        // store current provider
-        STATES.put(
-            root.getContext().getDocument(),
-            new ParseState(databindingsProvider, factory.getPlugin()));
-        // add remove listener
-        root.addBroadcastListener(new ObjectEventListener() {
-          @Override
-          public void dispose() throws Exception {
-            STATES.remove(root.getContext().getDocument());
-          }
-        });
-        return;
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IRootProcessor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void process(final XmlObjectInfo root) throws Exception {
+		// prepare factories
+		if (m_factories == null) {
+			m_factories =
+					ExternalFactoriesHelper.getElementsInstances(
+							IDatabindingFactory.class,
+							"org.eclipse.wb.core.databinding.xml.databindingFactories",
+							"factory");
+		}
+		// handle providers
+		for (IDatabindingFactory factory : m_factories) {
+			IDatabindingsProvider databindingsProvider = factory.createProvider(root);
+			if (databindingsProvider != null) {
+				// store current provider
+				STATES.put(
+						root.getContext().getDocument(),
+						new ParseState(databindingsProvider, factory.getPlugin()));
+				// add remove listener
+				root.addBroadcastListener(new ObjectEventListener() {
+					@Override
+					public void dispose() throws Exception {
+						STATES.remove(root.getContext().getDocument());
+					}
+				});
+				return;
+			}
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding.xml/src/org/eclipse/wb/internal/core/databinding/xml/ui/AbstracXmlObjectPropertiesManager.java b/org.eclipse.wb.core.databinding.xml/src/org/eclipse/wb/internal/core/databinding/xml/ui/AbstracXmlObjectPropertiesManager.java
index 2c8f2a3a2..468f42861 100644
--- a/org.eclipse.wb.core.databinding.xml/src/org/eclipse/wb/internal/core/databinding/xml/ui/AbstracXmlObjectPropertiesManager.java
+++ b/org.eclipse.wb.core.databinding.xml/src/org/eclipse/wb/internal/core/databinding/xml/ui/AbstracXmlObjectPropertiesManager.java
@@ -21,21 +21,21 @@
  * @author lobas_av
  */
 public abstract class AbstracXmlObjectPropertiesManager
-    extends
-      org.eclipse.wb.internal.core.databinding.ui.property.AbstractJavaInfoPropertiesManager {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstracXmlObjectPropertiesManager(IDatabindingsProvider provider,
-      XmlObjectInfo xmlObjectRoot) {
-    super(provider);
-    xmlObjectRoot.addBroadcastListener(new XmlObjectAddProperties() {
-      @Override
-      public void invoke(XmlObjectInfo object, List<Property> properties) throws Exception {
-        addBindingsProperty(object, properties);
-      }
-    });
-  }
+extends
+org.eclipse.wb.internal.core.databinding.ui.property.AbstractJavaInfoPropertiesManager {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstracXmlObjectPropertiesManager(IDatabindingsProvider provider,
+			XmlObjectInfo xmlObjectRoot) {
+		super(provider);
+		xmlObjectRoot.addBroadcastListener(new XmlObjectAddProperties() {
+			@Override
+			public void invoke(XmlObjectInfo object, List<Property> properties) throws Exception {
+				addBindingsProperty(object, properties);
+			}
+		});
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding.xml/src/org/eclipse/wb/internal/core/databinding/xml/ui/BindingXmlPage.java b/org.eclipse.wb.core.databinding.xml/src/org/eclipse/wb/internal/core/databinding/xml/ui/BindingXmlPage.java
index a2494292b..4de88c465 100644
--- a/org.eclipse.wb.core.databinding.xml/src/org/eclipse/wb/internal/core/databinding/xml/ui/BindingXmlPage.java
+++ b/org.eclipse.wb.core.databinding.xml/src/org/eclipse/wb/internal/core/databinding/xml/ui/BindingXmlPage.java
@@ -41,135 +41,135 @@
  * @coverage bindings.xml.ui
  */
 public final class BindingXmlPage extends XmlEditorPage {
-  private Composite m_composite;
-  private EditComposite m_editComposite;
-  private CLabel m_errorLabel;
-  private IDatabindingsProvider m_databindingsProvider;
+	private Composite m_composite;
+	private EditComposite m_editComposite;
+	private CLabel m_errorLabel;
+	private IDatabindingsProvider m_databindingsProvider;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Creation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static void addPage(List<IXmlEditorPage> pages) {
-    // check that binding page is already added
-    for (IXmlEditorPage page : pages) {
-      if (page instanceof BindingXmlPage) {
-        return;
-      }
-    }
-    // add new binding page
-    pages.add(new BindingXmlPage());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Creation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static void addPage(List<IXmlEditorPage> pages) {
+		// check that binding page is already added
+		for (IXmlEditorPage page : pages) {
+			if (page instanceof BindingXmlPage) {
+				return;
+			}
+		}
+		// add new binding page
+		pages.add(new BindingXmlPage());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Life cycle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void dispose() {
-    // remove information about this editor
-    DatabindingRootProcessor.STATES.remove(m_editor.getDocument());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Life cycle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void dispose() {
+		// remove information about this editor
+		DatabindingRootProcessor.STATES.remove(m_editor.getDocument());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Activation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void setActive(boolean active) {
-    UndoManager undoManager = m_editor.getDesignPage().getUndoManager();
-    if (active) {
-      undoManager.activate();
-      handleUpdatePage();
-    } else {
-      undoManager.deactivate();
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Activation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void setActive(boolean active) {
+		UndoManager undoManager = m_editor.getDesignPage().getUndoManager();
+		if (active) {
+			undoManager.activate();
+			handleUpdatePage();
+		} else {
+			undoManager.deactivate();
+		}
+	}
 
-  private void handleUpdatePage() {
-    // check state
-    if (m_editor.getDesignPage().getDesignerState() != DesignerState.Successful) {
-      if (m_editComposite != null) {
-        m_editComposite.dispose();
-        m_editComposite = null;
-      }
-      if (m_errorLabel != null) {
-        m_errorLabel.dispose();
-      }
-      //
-      m_errorLabel = new CLabel(m_composite, SWT.NONE);
-      m_errorLabel.setText(Messages.BindingXmlPage_errorMessage);
-      m_errorLabel.setImage(org.eclipse.wb.internal.core.databinding.Activator.getImage("errors.gif"));
-      GridDataFactory.create(m_errorLabel).fillH().grabH();
-      //
-      m_databindingsProvider = null;
-      m_composite.layout();
-      return;
-    }
-    // prepare old selection
-    EditSelection selection = m_editComposite == null ? null : m_editComposite.getEditSelection();
-    // prepare state
-    ParseState state = DatabindingRootProcessor.STATES.get(m_editor.getDocument());
-    Assert.isNotNull(state);
-    boolean isNew = m_databindingsProvider != state.databindingsProvider;
-    //
-    if (isNew) {
-      // clear old composite
-      if (m_editComposite != null) {
-        m_editComposite.dispose();
-      }
-      if (m_errorLabel != null) {
-        m_errorLabel.dispose();
-        m_errorLabel = null;
-      }
-      //
-      m_databindingsProvider = state.databindingsProvider;
-      IDialogSettings settings =
-          UiUtils.getSettings(
-              state.plugin.getDialogSettings(),
-              m_databindingsProvider.getClass().getName());
-      // create new composite
-      m_editComposite =
-          new EditComposite(m_composite, SWT.NONE, state.plugin, m_databindingsProvider, settings);
-      GridDataFactory.create(m_editComposite).fill().grab();
-      m_composite.layout();
-    }
-    // set input
-    m_editComposite.setInput(!isNew, selection);
-  }
+	private void handleUpdatePage() {
+		// check state
+		if (m_editor.getDesignPage().getDesignerState() != DesignerState.Successful) {
+			if (m_editComposite != null) {
+				m_editComposite.dispose();
+				m_editComposite = null;
+			}
+			if (m_errorLabel != null) {
+				m_errorLabel.dispose();
+			}
+			//
+			m_errorLabel = new CLabel(m_composite, SWT.NONE);
+			m_errorLabel.setText(Messages.BindingXmlPage_errorMessage);
+			m_errorLabel.setImage(org.eclipse.wb.internal.core.databinding.Activator.getImage("errors.gif"));
+			GridDataFactory.create(m_errorLabel).fillH().grabH();
+			//
+			m_databindingsProvider = null;
+			m_composite.layout();
+			return;
+		}
+		// prepare old selection
+		EditSelection selection = m_editComposite == null ? null : m_editComposite.getEditSelection();
+		// prepare state
+		ParseState state = DatabindingRootProcessor.STATES.get(m_editor.getDocument());
+		Assert.isNotNull(state);
+		boolean isNew = m_databindingsProvider != state.databindingsProvider;
+		//
+		if (isNew) {
+			// clear old composite
+			if (m_editComposite != null) {
+				m_editComposite.dispose();
+			}
+			if (m_errorLabel != null) {
+				m_errorLabel.dispose();
+				m_errorLabel = null;
+			}
+			//
+			m_databindingsProvider = state.databindingsProvider;
+			IDialogSettings settings =
+					UiUtils.getSettings(
+							state.plugin.getDialogSettings(),
+							m_databindingsProvider.getClass().getName());
+			// create new composite
+			m_editComposite =
+					new EditComposite(m_composite, SWT.NONE, state.plugin, m_databindingsProvider, settings);
+			GridDataFactory.create(m_editComposite).fill().grab();
+			m_composite.layout();
+		}
+		// set input
+		m_editComposite.setInput(!isNew, selection);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Control createControl(Composite parent) {
-    m_composite = new Composite(parent, SWT.NONE);
-    GridLayoutFactory.create(m_composite).noMargins().noSpacing();
-    return m_composite;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Control createControl(Composite parent) {
+		m_composite = new Composite(parent, SWT.NONE);
+		GridLayoutFactory.create(m_composite).noMargins().noSpacing();
+		return m_composite;
+	}
 
-  @Override
-  public Control getControl() {
-    return m_composite;
-  }
+	@Override
+	public Control getControl() {
+		return m_composite;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getName() {
-    return Messages.BindingXmlPage_name;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getName() {
+		return Messages.BindingXmlPage_name;
+	}
 
-  @Override
-  public Image getImage() {
-    return org.eclipse.wb.internal.core.databinding.Activator.getImage("paperclip.png");
-  }
+	@Override
+	public Image getImage() {
+		return org.eclipse.wb.internal.core.databinding.Activator.getImage("paperclip.png");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/Activator.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/Activator.java
index 76515ca15..fdc8d86f4 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/Activator.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/Activator.java
@@ -34,104 +34,104 @@
  * @author lobas_av
  */
 public final class Activator extends AbstractUIPlugin {
-  public static final String PLUGIN_ID = "org.eclipse.wb.core.databinding";
-  private static Activator m_plugin;
+	public static final String PLUGIN_ID = "org.eclipse.wb.core.databinding";
+	private static Activator m_plugin;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public Activator() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public Activator() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Life cycle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void stop(BundleContext context) throws Exception {
-    m_plugin = null;
-    super.stop(context);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Life cycle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void stop(BundleContext context) throws Exception {
+		m_plugin = null;
+		super.stop(context);
+	}
 
-  @Override
-  public void start(BundleContext context) throws Exception {
-    super.start(context);
-    m_plugin = this;
-  }
+	@Override
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+		m_plugin = this;
+	}
 
-  public static Activator getDefault() {
-    return m_plugin;
-  }
+	public static Activator getDefault() {
+		return m_plugin;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link InputStream} for file from plugin directory.
-   */
-  public static InputStream getFile(final String path) {
-    return ExecutionUtils.runObject(new RunnableObjectEx<InputStream>() {
-      @Override
-      public InputStream runObject() throws Exception {
-        return m_plugin.getBundle().getEntry(path).openStream();
-      }
-    }, "Unable to open plugin file %s", path);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link InputStream} for file from plugin directory.
+	 */
+	public static InputStream getFile(final String path) {
+		return ExecutionUtils.runObject(new RunnableObjectEx<InputStream>() {
+			@Override
+			public InputStream runObject() throws Exception {
+				return m_plugin.getBundle().getEntry(path).openStream();
+			}
+		}, "Unable to open plugin file %s", path);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Caches
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final Map<String, Image> m_nameToIconMap = Maps.newHashMap();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Caches
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final Map<String, Image> m_nameToIconMap = Maps.newHashMap();
 
-  /**
-   * Get image from "icons" directory.
-   */
-  public static Image getImage(String name) {
-    Image image = m_nameToIconMap.get(name);
-    if (image == null) {
-      // prepare path
-      String path;
-      if (name.startsWith("/")) {
-        path = name;
-      } else {
-        path = "icons/" + name;
-      }
-      //
-      InputStream is = getFile(path);
-      try {
-        image = new Image(Display.getCurrent(), is);
-        m_nameToIconMap.put(name, image);
-      } finally {
-        IOUtils.closeQuietly(is);
-      }
-    }
-    return image;
-  }
+	/**
+	 * Get image from "icons" directory.
+	 */
+	public static Image getImage(String name) {
+		Image image = m_nameToIconMap.get(name);
+		if (image == null) {
+			// prepare path
+			String path;
+			if (name.startsWith("/")) {
+				path = name;
+			} else {
+				path = "icons/" + name;
+			}
+			//
+			InputStream is = getFile(path);
+			try {
+				image = new Image(Display.getCurrent(), is);
+				m_nameToIconMap.put(name, image);
+			} finally {
+				IOUtils.closeQuietly(is);
+			}
+		}
+		return image;
+	}
 
-  /**
-   * Get image descriptor from "icons" directory.
-   */
-  public static ImageDescriptor getImageDescriptor(String name) {
-    URL url = m_plugin.getBundle().getEntry("icons/" + name);
-    return ImageDescriptor.createFromURL(url);
-  }
+	/**
+	 * Get image descriptor from "icons" directory.
+	 */
+	public static ImageDescriptor getImageDescriptor(String name) {
+		URL url = m_plugin.getBundle().getEntry("icons/" + name);
+		return ImageDescriptor.createFromURL(url);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Preferences
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Returns preference store for DB plugin.
-   */
-  public static IPreferenceStore getStore() {
-    return m_plugin.getPreferenceStore();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Preferences
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Returns preference store for DB plugin.
+	 */
+	public static IPreferenceStore getStore() {
+		return m_plugin.getPreferenceStore();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/Messages.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/Messages.java
index b82090782..c05f3d4fd 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/Messages.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/Messages.java
@@ -3,79 +3,79 @@
 import org.eclipse.osgi.util.NLS;
 
 public class Messages extends NLS {
-  private static final String BUNDLE_NAME = "org.eclipse.wb.internal.core.databinding.messages"; //$NON-NLS-1$
-  public static String AbstractBindingsProperty_menuName;
-  public static String AbstractBindingsProperty_title;
-  public static String AutomaticDatabindingFirstPage_superClassLabel;
-  public static String AutomaticDatabindingSecondPage_beanClassErrorPrefix;
-  public static String AutomaticDatabindingSecondPage_beanClassLabel;
-  public static String AutomaticDatabindingSecondPage_beanClassMessage;
-  public static String AutomaticDatabindingSecondPage_filterToolTip;
-  public static String AutomaticDatabindingSecondPage_propertiesErrorMessage;
-  public static String AutomaticDatabindingSecondPage_propertiesLabel;
-  public static String BindDialog_titleCreate;
-  public static String BindDialog_titleEdit;
-  public static String BindingContentProvider_assignButton;
-  public static String BindingContentProvider_binding;
-  public static String BindingContentProvider_bindingDots;
-  public static String BindingContentProvider_validateEmptyFieldName;
-  public static String BindingContentProvider_validateExistingFieldName;
-  public static String BindingDesignPage_erorrMessage;
-  public static String BindingDesignPage_name;
-  public static String BindingElementsComposite_boundProperties;
-  public static String BindingElementsComposite_deleteAction;
-  public static String BindingElementsComposite_deleteAllAction;
-  public static String BindingElementsComposite_deleteAllItem;
-  public static String BindingElementsComposite_deleteAllMessage;
-  public static String BindingElementsComposite_deleteAllTitle;
-  public static String BindingElementsComposite_deleteItem;
-  public static String BindingElementsComposite_deleteMessage;
-  public static String BindingElementsComposite_deleteTitle;
-  public static String BindingElementsComposite_editAction;
-  public static String BindingElementsComposite_editItem;
-  public static String BindingElementsComposite_gotoDefinitionAction;
-  public static String BindingElementsComposite_gotoDefinitionItem;
-  public static String BindingElementsComposite_moveDownAction;
-  public static String BindingElementsComposite_moveDownItem;
-  public static String BindingElementsComposite_moveUpAction;
-  public static String BindingElementsComposite_moveUpItem;
-  public static String BindingElementsComposite_reparseItem;
-  public static String BindWizard_title;
-  public static String ChooseClassAndPropertiesUiContentProvider_deselectAllButton;
-  public static String ChooseClassAndPropertiesUiContentProvider_downButton;
-  public static String ChooseClassAndPropertiesUiContentProvider_selectAllButton;
-  public static String ChooseClassAndPropertiesUiContentProvider_upButton;
-  public static String ChooseClassConfiguration_validateEmptyClass;
-  public static String ChooseClassConfiguration_validateMessagePrefix;
-  public static String ChooseClassUiContentProvider_validateAbstract;
-  public static String ChooseClassUiContentProvider_validateNotExist;
-  public static String ChooseClassUiContentProvider_validateNotPublic;
-  public static String ChooseClassUiContentProvider_validatePublicConstructor;
-  public static String DefaultAutomaticDatabindingProvider_editorLabel;
-  public static String DefaultAutomaticDatabindingProvider_propertyColumn;
-  public static String DefaultAutomaticDatabindingProvider_strategyLabel;
-  public static String DefaultAutomaticDatabindingProvider_validateNoStrategyForProperty;
-  public static String DefaultAutomaticDatabindingProvider_validateNoWidgetForProperty;
-  public static String DefaultAutomaticDatabindingProvider_widgetColumn;
-  public static String ObserveElementsComposite_bindToolTip;
-  public static String ObserveElementsComposite_clearAction;
-  public static String ObserveElementsComposite_filterText;
-  public static String ObserveElementsComposite_propertiesFilterToolTip;
-  public static String ObserveElementsComposite_propertiesLabel;
-  public static String ObserveElementsWizardPage_message;
-  public static String ObserveElementsWizardPage_modelLabel;
-  public static String ObserveElementsWizardPage_targetLabel;
-  public static String ObserveElementsWizardPage_title;
-  public static String TabContainerUiContentProvider_addButton;
-  public static String TabContainerUiContentProvider_addItem;
-  public static String TabContainerUiContentProvider_removeButton;
-  public static String UiUtils_openTypeMessage;
-  public static String UiUtils_openTypeTitle;
-  static {
-    // initialize resource bundle
-    NLS.initializeMessages(BUNDLE_NAME, Messages.class);
-  }
+	private static final String BUNDLE_NAME = "org.eclipse.wb.internal.core.databinding.messages"; //$NON-NLS-1$
+	public static String AbstractBindingsProperty_menuName;
+	public static String AbstractBindingsProperty_title;
+	public static String AutomaticDatabindingFirstPage_superClassLabel;
+	public static String AutomaticDatabindingSecondPage_beanClassErrorPrefix;
+	public static String AutomaticDatabindingSecondPage_beanClassLabel;
+	public static String AutomaticDatabindingSecondPage_beanClassMessage;
+	public static String AutomaticDatabindingSecondPage_filterToolTip;
+	public static String AutomaticDatabindingSecondPage_propertiesErrorMessage;
+	public static String AutomaticDatabindingSecondPage_propertiesLabel;
+	public static String BindDialog_titleCreate;
+	public static String BindDialog_titleEdit;
+	public static String BindingContentProvider_assignButton;
+	public static String BindingContentProvider_binding;
+	public static String BindingContentProvider_bindingDots;
+	public static String BindingContentProvider_validateEmptyFieldName;
+	public static String BindingContentProvider_validateExistingFieldName;
+	public static String BindingDesignPage_erorrMessage;
+	public static String BindingDesignPage_name;
+	public static String BindingElementsComposite_boundProperties;
+	public static String BindingElementsComposite_deleteAction;
+	public static String BindingElementsComposite_deleteAllAction;
+	public static String BindingElementsComposite_deleteAllItem;
+	public static String BindingElementsComposite_deleteAllMessage;
+	public static String BindingElementsComposite_deleteAllTitle;
+	public static String BindingElementsComposite_deleteItem;
+	public static String BindingElementsComposite_deleteMessage;
+	public static String BindingElementsComposite_deleteTitle;
+	public static String BindingElementsComposite_editAction;
+	public static String BindingElementsComposite_editItem;
+	public static String BindingElementsComposite_gotoDefinitionAction;
+	public static String BindingElementsComposite_gotoDefinitionItem;
+	public static String BindingElementsComposite_moveDownAction;
+	public static String BindingElementsComposite_moveDownItem;
+	public static String BindingElementsComposite_moveUpAction;
+	public static String BindingElementsComposite_moveUpItem;
+	public static String BindingElementsComposite_reparseItem;
+	public static String BindWizard_title;
+	public static String ChooseClassAndPropertiesUiContentProvider_deselectAllButton;
+	public static String ChooseClassAndPropertiesUiContentProvider_downButton;
+	public static String ChooseClassAndPropertiesUiContentProvider_selectAllButton;
+	public static String ChooseClassAndPropertiesUiContentProvider_upButton;
+	public static String ChooseClassConfiguration_validateEmptyClass;
+	public static String ChooseClassConfiguration_validateMessagePrefix;
+	public static String ChooseClassUiContentProvider_validateAbstract;
+	public static String ChooseClassUiContentProvider_validateNotExist;
+	public static String ChooseClassUiContentProvider_validateNotPublic;
+	public static String ChooseClassUiContentProvider_validatePublicConstructor;
+	public static String DefaultAutomaticDatabindingProvider_editorLabel;
+	public static String DefaultAutomaticDatabindingProvider_propertyColumn;
+	public static String DefaultAutomaticDatabindingProvider_strategyLabel;
+	public static String DefaultAutomaticDatabindingProvider_validateNoStrategyForProperty;
+	public static String DefaultAutomaticDatabindingProvider_validateNoWidgetForProperty;
+	public static String DefaultAutomaticDatabindingProvider_widgetColumn;
+	public static String ObserveElementsComposite_bindToolTip;
+	public static String ObserveElementsComposite_clearAction;
+	public static String ObserveElementsComposite_filterText;
+	public static String ObserveElementsComposite_propertiesFilterToolTip;
+	public static String ObserveElementsComposite_propertiesLabel;
+	public static String ObserveElementsWizardPage_message;
+	public static String ObserveElementsWizardPage_modelLabel;
+	public static String ObserveElementsWizardPage_targetLabel;
+	public static String ObserveElementsWizardPage_title;
+	public static String TabContainerUiContentProvider_addButton;
+	public static String TabContainerUiContentProvider_addItem;
+	public static String TabContainerUiContentProvider_removeButton;
+	public static String UiUtils_openTypeMessage;
+	public static String UiUtils_openTypeTitle;
+	static {
+		// initialize resource bundle
+		NLS.initializeMessages(BUNDLE_NAME, Messages.class);
+	}
 
-  private Messages() {
-  }
+	private Messages() {
+	}
 }
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/AstObjectInfo.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/AstObjectInfo.java
index 7560449be..97f19850a 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/AstObjectInfo.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/AstObjectInfo.java
@@ -25,85 +25,85 @@
  * @coverage bindings.model
  */
 public abstract class AstObjectInfo {
-  private String m_variable;
+	private String m_variable;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Variable
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the name of variable to which this object is assigned first time or <code>null</code>
-   *         if there are no any variable.
-   */
-  public String getVariableIdentifier() throws Exception {
-    return m_variable;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Variable
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the name of variable to which this object is assigned first time or <code>null</code>
+	 *         if there are no any variable.
+	 */
+	public String getVariableIdentifier() throws Exception {
+		return m_variable;
+	}
 
-  /**
-   * Sets the name of variable of object.
-   */
-  public void setVariableIdentifier(String variable) {
-    m_variable = variable;
-  }
+	/**
+	 * Sets the name of variable of object.
+	 */
+	public void setVariableIdentifier(String variable) {
+		m_variable = variable;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parser
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Parse given {@link MethodInvocation} for this object (this object is expression for invocation)
-   * and create {@link AstObjectInfo} model otherwise return <code>null</code>.
-   */
-  public AstObjectInfo parseExpression(AstEditor editor,
-      String signature,
-      MethodInvocation invocation,
-      Expression[] arguments,
-      IModelResolver resolver,
-      IDatabindingsProvider provider) throws Exception {
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parser
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Parse given {@link MethodInvocation} for this object (this object is expression for invocation)
+	 * and create {@link AstObjectInfo} model otherwise return <code>null</code>.
+	 */
+	public AstObjectInfo parseExpression(AstEditor editor,
+			String signature,
+			MethodInvocation invocation,
+			Expression[] arguments,
+			IModelResolver resolver,
+			IDatabindingsProvider provider) throws Exception {
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the text for visual presentation of this object.
-   */
-  public String getPresentationText() throws Exception {
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the text for visual presentation of this object.
+	 */
+	public String getPresentationText() throws Exception {
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public boolean addSourceCodeSeparator() {
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public boolean addSourceCodeSeparator() {
+		return true;
+	}
 
-  /**
-   * Generate source code association with this object and add to <code>lines</code>.
-   */
-  public void addSourceCode(List<String> lines, CodeGenerationSupport generationSupport)
-      throws Exception {
-    throw new UnsupportedOperationException();
-  }
+	/**
+	 * Generate source code association with this object and add to <code>lines</code>.
+	 */
+	public void addSourceCode(List<String> lines, CodeGenerationSupport generationSupport)
+			throws Exception {
+		throw new UnsupportedOperationException();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Visiting
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Visits this {@link AstObjectInfo} using given {@link AstObjectInfoVisitor}. This method must be
-   * implemented in all subclasses that contains specific children.
-   */
-  public void accept(AstObjectInfoVisitor visitor) throws Exception {
-    visitor.visit(this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Visiting
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Visits this {@link AstObjectInfo} using given {@link AstObjectInfoVisitor}. This method must be
+	 * implemented in all subclasses that contains specific children.
+	 */
+	public void accept(AstObjectInfoVisitor visitor) throws Exception {
+		visitor.visit(this);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/AstObjectInfoVisitor.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/AstObjectInfoVisitor.java
index a89ca8111..633bfdcc3 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/AstObjectInfoVisitor.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/AstObjectInfoVisitor.java
@@ -17,8 +17,8 @@
  * @coverage bindings.model
  */
 public abstract class AstObjectInfoVisitor {
-  /**
-   * This method is invoked to visit given {@link AstObjectInfo}.
-   */
-  public abstract void visit(AstObjectInfo object) throws Exception;
+	/**
+	 * This method is invoked to visit given {@link AstObjectInfo}.
+	 */
+	public abstract void visit(AstObjectInfo object) throws Exception;
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/CodeGenerationSupport.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/CodeGenerationSupport.java
index d15892016..f237291d1 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/CodeGenerationSupport.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/CodeGenerationSupport.java
@@ -26,104 +26,104 @@
  * @coverage bindings.model
  */
 public class CodeGenerationSupport {
-  private final boolean m_useGenerics;
-  private final Set<String> m_variables = Sets.newHashSet();
-  private final Set<AstObjectInfo> m_models = Sets.newHashSet();
+	private final boolean m_useGenerics;
+	private final Set<String> m_variables = Sets.newHashSet();
+	private final Set<AstObjectInfo> m_models = Sets.newHashSet();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CodeGenerationSupport(boolean useGenerics) {
-    m_useGenerics = useGenerics;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CodeGenerationSupport(boolean useGenerics) {
+		m_useGenerics = useGenerics;
+	}
 
-  public CodeGenerationSupport(boolean useGenerics, AstObjectInfo rootModelObject) throws Exception {
-    m_useGenerics = useGenerics;
-    // store all exist variables
-    rootModelObject.accept(new AstObjectInfoVisitor() {
-      @Override
-      public void visit(AstObjectInfo object) throws Exception {
-        // store variable
-        String variable = object.getVariableIdentifier();
-        if (variable != null) {
-          m_variables.add(variable);
-        }
-      }
-    });
-  }
+	public CodeGenerationSupport(boolean useGenerics, AstObjectInfo rootModelObject) throws Exception {
+		m_useGenerics = useGenerics;
+		// store all exist variables
+		rootModelObject.accept(new AstObjectInfoVisitor() {
+			@Override
+			public void visit(AstObjectInfo object) throws Exception {
+				// store variable
+				String variable = object.getVariableIdentifier();
+				if (variable != null) {
+					m_variables.add(variable);
+				}
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return {@code true} if current project support Java 1.5 generic types.
-   */
-  public boolean useGenerics() {
-    return m_useGenerics;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return {@code true} if current project support Java 1.5 generic types.
+	 */
+	public boolean useGenerics() {
+		return m_useGenerics;
+	}
 
-  /**
-   * Add source code from given {@link AstObjectInfo} to <code>lines</code> over invoke
-   * {@link AstObjectInfo#addSourceCode(List, ICodeGenerationSupport)}. This method may be called
-   * several times for the same object, but the code is added only one time.
-   */
-  public void addSourceCode(AstObjectInfo modelObject, List<String> lines) throws Exception {
-    if (!m_models.contains(modelObject)) {
-      m_models.add(modelObject);
-      modelObject.addSourceCode(lines, this);
-      Assert.isNotNull(modelObject.getVariableIdentifier());
-    }
-  }
+	/**
+	 * Add source code from given {@link AstObjectInfo} to <code>lines</code> over invoke
+	 * {@link AstObjectInfo#addSourceCode(List, ICodeGenerationSupport)}. This method may be called
+	 * several times for the same object, but the code is added only one time.
+	 */
+	public void addSourceCode(AstObjectInfo modelObject, List<String> lines) throws Exception {
+		if (!m_models.contains(modelObject)) {
+			m_models.add(modelObject);
+			modelObject.addSourceCode(lines, this);
+			Assert.isNotNull(modelObject.getVariableIdentifier());
+		}
+	}
 
-  /**
-   * Add model.
-   */
-  public boolean addModel(AstObjectInfo modelObject) {
-    return m_models.add(modelObject);
-  }
+	/**
+	 * Add model.
+	 */
+	public boolean addModel(AstObjectInfo modelObject) {
+		return m_models.add(modelObject);
+	}
 
-  /**
-   * @return unique variable name consist of given parts <code>names</code>.
-   */
-  public String generateLocalName(String... names) throws Exception {
-    // create base name
-    String baseVariable = createName(names);
-    String variable = baseVariable;
-    int variableIndex = 1;
-    // ensure unique
-    while (m_variables.contains(variable)) {
-      variable = baseVariable + "_" + Integer.toString(variableIndex++);
-    }
-    m_variables.add(variable);
-    //
-    return variable;
-  }
+	/**
+	 * @return unique variable name consist of given parts <code>names</code>.
+	 */
+	public String generateLocalName(String... names) throws Exception {
+		// create base name
+		String baseVariable = createName(names);
+		String variable = baseVariable;
+		int variableIndex = 1;
+		// ensure unique
+		while (m_variables.contains(variable)) {
+			variable = baseVariable + "_" + Integer.toString(variableIndex++);
+		}
+		m_variables.add(variable);
+		//
+		return variable;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static String createName(String[] names) {
-    Assert.isTrue(names.length > 0);
-    for (int i = 0; i < names.length; i++) {
-      names[i] = convertName(names[i]);
-    }
-    return StringUtils.uncapitalize(StringUtils.join(names));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static String createName(String[] names) {
+		Assert.isTrue(names.length > 0);
+		for (int i = 0; i < names.length; i++) {
+			names[i] = convertName(names[i]);
+		}
+		return StringUtils.uncapitalize(StringUtils.join(names));
+	}
 
-  private static String convertName(String name) {
-    if (name.startsWith("m_")) {
-      name = name.substring(2);
-    }
-    name = StringUtils.remove(name, '.');
-    name = StringUtils.remove(name, '"');
-    name = StringUtils.remove(name, '(');
-    name = StringUtils.remove(name, ')');
-    return StringUtils.capitalize(name);
-  }
+	private static String convertName(String name) {
+		if (name.startsWith("m_")) {
+			name = name.substring(2);
+		}
+		name = StringUtils.remove(name, '.');
+		name = StringUtils.remove(name, '"');
+		name = StringUtils.remove(name, '(');
+		name = StringUtils.remove(name, ')');
+		return StringUtils.capitalize(name);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/ContainerAstObjectInfo.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/ContainerAstObjectInfo.java
index 71ffc2cee..a4c4d17b3 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/ContainerAstObjectInfo.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/ContainerAstObjectInfo.java
@@ -19,26 +19,26 @@
  * @coverage bindings.model
  */
 public final class ContainerAstObjectInfo extends AstObjectInfo {
-  private final List<? extends AstObjectInfo> m_objects;
+	private final List<? extends AstObjectInfo> m_objects;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ContainerAstObjectInfo(List<? extends AstObjectInfo> objects) {
-    m_objects = objects;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ContainerAstObjectInfo(List<? extends AstObjectInfo> objects) {
+		m_objects = objects;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Visiting
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void accept(AstObjectInfoVisitor visitor) throws Exception {
-    for (AstObjectInfo object : m_objects) {
-      object.accept(visitor);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Visiting
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void accept(AstObjectInfoVisitor visitor) throws Exception {
+		for (AstObjectInfo object : m_objects) {
+			object.accept(visitor);
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/IASTObjectInfo2.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/IASTObjectInfo2.java
index a88757fe2..795f570bf 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/IASTObjectInfo2.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/IASTObjectInfo2.java
@@ -18,11 +18,11 @@
  *
  */
 public interface IASTObjectInfo2 {
-  boolean isField();
+	boolean isField();
 
-  void setField();
+	void setField();
 
-  String getVariableIdentifier() throws Exception;
+	String getVariableIdentifier() throws Exception;
 
-  void setVariableIdentifier(JavaInfo javaInfoRoot, String variable, boolean field);
+	void setVariableIdentifier(JavaInfo javaInfoRoot, String variable, boolean field);
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/IBindingInfo.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/IBindingInfo.java
index 3aee7b4ba..e39aba59d 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/IBindingInfo.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/IBindingInfo.java
@@ -18,33 +18,33 @@
  * @coverage bindings.model
  */
 public interface IBindingInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Target
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return {@link IObserveInfo} the "target" model.
-   */
-  IObserveInfo getTarget();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Target
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return {@link IObserveInfo} the "target" model.
+	 */
+	IObserveInfo getTarget();
 
-  /**
-   * @return {@link IObserveInfo} the "target property" model.
-   */
-  IObserveInfo getTargetProperty();
+	/**
+	 * @return {@link IObserveInfo} the "target property" model.
+	 */
+	IObserveInfo getTargetProperty();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Model
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return {@link IObserveInfo} the "model" model.
-   */
-  IObserveInfo getModel();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Model
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return {@link IObserveInfo} the "model" model.
+	 */
+	IObserveInfo getModel();
 
-  /**
-   * @return {@link IObserveInfo} the "model property" model.
-   */
-  IObserveInfo getModelProperty();
+	/**
+	 * @return {@link IObserveInfo} the "model property" model.
+	 */
+	IObserveInfo getModelProperty();
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/IDatabindingFactory.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/IDatabindingFactory.java
index d118c4710..c6ce5f39f 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/IDatabindingFactory.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/IDatabindingFactory.java
@@ -23,14 +23,14 @@
  * @coverage bindings.model
  */
 public interface IDatabindingFactory {
-  /**
-   * @return {@link IDatabindingsProvider} for given root {@link JavaInfo} or <code>null</code> if
-   *         operation for given root not supported.
-   */
-  IDatabindingsProvider createProvider(JavaInfo javaInfoRoot) throws Exception;
+	/**
+	 * @return {@link IDatabindingsProvider} for given root {@link JavaInfo} or <code>null</code> if
+	 *         operation for given root not supported.
+	 */
+	IDatabindingsProvider createProvider(JavaInfo javaInfoRoot) throws Exception;
 
-  /**
-   * @return {@link AbstractUIPlugin} host for this factory.
-   */
-  AbstractUIPlugin getPlugin();
+	/**
+	 * @return {@link AbstractUIPlugin} host for this factory.
+	 */
+	AbstractUIPlugin getPlugin();
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/IDatabindingsProvider.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/IDatabindingsProvider.java
index 0e66b1a0f..77c06d482 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/IDatabindingsProvider.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/IDatabindingsProvider.java
@@ -32,155 +32,155 @@
  * @coverage bindings.model
  */
 public interface IDatabindingsProvider {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Bindings
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Configure binding {@link TableViewer}: add columns, set label provider and etc.
-   */
-  void configureBindingViewer(IDialogSettings settings, TableViewer viewer);
-
-  /**
-   * @return list of all {@link IBindingInfo} for current compilation unit.
-   */
-  List<IBindingInfo> getBindings();
-
-  /**
-   * @return text for visual presentation of given {@link IBindingInfo} object.
-   */
-  String getBindingPresentationText(IBindingInfo binding) throws Exception;
-
-  /**
-   * Show source code for given {@link IBindingInfo}.
-   */
-  void gotoDefinition(IBindingInfo binding);
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Types
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return list of all {@link ObserveType} for current Databindings API.
-   */
-  List<ObserveType> getTypes();
-
-  /**
-   * @return the start showing {@link ObserveType} page for "target".
-   */
-  ObserveType getTargetStartType();
-
-  /**
-   * @return the start showing {@link ObserveType} page for "model".
-   */
-  ObserveType getModelStartType();
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Observes
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * XXX
-   */
-  IBaseLabelProvider createPropertiesViewerLabelProvider(TreeViewer viewer);
-
-  /**
-   * @return list of all {@link PropertyFilter} for property based {@link IObserveInfo}.
-   */
-  List<PropertyFilter> getObservePropertyFilters();
-
-  /**
-   * @return list of all {@link IObserveInfo} with given {@link ObserveType} for current compilation
-   *         unit.
-   */
-  List<IObserveInfo> getObserves(ObserveType type);
-
-  /**
-   * Update all observes (fields, JavaInfo, etc.) maybe more elements is added or removed.
-   */
-  void synchronizeObserves() throws Exception;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  List<IUiContentProvider> getContentProviders(IBindingInfo binding, IPageListener listener)
-      throws Exception;
-
-  /**
-   * @return <code>true</code> if given set of objects "target" + "property" and "model" +
-   *         "property" accept union to binding otherwise <code>false</code>.
-   */
-  boolean validate(IObserveInfo target,
-      IObserveInfo targetProperty,
-      IObserveInfo model,
-      IObserveInfo modelProperty) throws Exception;
-
-  /**
-   * Create {@link IBindingInfo} for given set of objects "target" + "property" and "model" +
-   * "property".
-   */
-  IBindingInfo createBinding(IObserveInfo target,
-      IObserveInfo targetProperty,
-      IObserveInfo model,
-      IObserveInfo modelProperty) throws Exception;
-
-  /**
-   * Add new {@link IBindingInfo} object.
-   */
-  void addBinding(IBindingInfo binding);
-
-  /**
-   * Handle edit given {@link IBindingInfo} object.
-   */
-  void editBinding(IBindingInfo binding);
-
-  /**
-   * Delete given {@link IBindingInfo} object.
-   */
-  void deleteBinding(IBindingInfo binding);
-
-  /**
-   * Delete all bindings.
-   */
-  void deleteAllBindings();
-
-  /**
-   * XXX
-   */
-  void deleteBindings(JavaInfo javaInfo) throws Exception;
-
-  /**
-   * XXX
-   */
-  boolean canMoveBinding(IBindingInfo binding, int targetIndex, boolean upDown);
-
-  /**
-   * XXX
-   */
-  void moveBinding(IBindingInfo binding, int sourceIndex, int targetIndex, boolean upDown);
-
-  /**
-   * XXX
-   */
-  void setBindingPage(Object bindingPage);
-
-  /**
-   * XXX
-   */
-  void refreshDesigner();
-
-  /**
-   * XXX
-   */
-  void fillExternalBindingActions(ToolBar toolBar, Menu contextMenu);
-
-  /**
-   * XXX
-   */
-  void saveEdit();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Bindings
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Configure binding {@link TableViewer}: add columns, set label provider and etc.
+	 */
+	void configureBindingViewer(IDialogSettings settings, TableViewer viewer);
+
+	/**
+	 * @return list of all {@link IBindingInfo} for current compilation unit.
+	 */
+	List<IBindingInfo> getBindings();
+
+	/**
+	 * @return text for visual presentation of given {@link IBindingInfo} object.
+	 */
+	String getBindingPresentationText(IBindingInfo binding) throws Exception;
+
+	/**
+	 * Show source code for given {@link IBindingInfo}.
+	 */
+	void gotoDefinition(IBindingInfo binding);
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Types
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return list of all {@link ObserveType} for current Databindings API.
+	 */
+	List<ObserveType> getTypes();
+
+	/**
+	 * @return the start showing {@link ObserveType} page for "target".
+	 */
+	ObserveType getTargetStartType();
+
+	/**
+	 * @return the start showing {@link ObserveType} page for "model".
+	 */
+	ObserveType getModelStartType();
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Observes
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * XXX
+	 */
+	IBaseLabelProvider createPropertiesViewerLabelProvider(TreeViewer viewer);
+
+	/**
+	 * @return list of all {@link PropertyFilter} for property based {@link IObserveInfo}.
+	 */
+	List<PropertyFilter> getObservePropertyFilters();
+
+	/**
+	 * @return list of all {@link IObserveInfo} with given {@link ObserveType} for current compilation
+	 *         unit.
+	 */
+	List<IObserveInfo> getObserves(ObserveType type);
+
+	/**
+	 * Update all observes (fields, JavaInfo, etc.) maybe more elements is added or removed.
+	 */
+	void synchronizeObserves() throws Exception;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	List<IUiContentProvider> getContentProviders(IBindingInfo binding, IPageListener listener)
+			throws Exception;
+
+	/**
+	 * @return <code>true</code> if given set of objects "target" + "property" and "model" +
+	 *         "property" accept union to binding otherwise <code>false</code>.
+	 */
+	boolean validate(IObserveInfo target,
+			IObserveInfo targetProperty,
+			IObserveInfo model,
+			IObserveInfo modelProperty) throws Exception;
+
+	/**
+	 * Create {@link IBindingInfo} for given set of objects "target" + "property" and "model" +
+	 * "property".
+	 */
+	IBindingInfo createBinding(IObserveInfo target,
+			IObserveInfo targetProperty,
+			IObserveInfo model,
+			IObserveInfo modelProperty) throws Exception;
+
+	/**
+	 * Add new {@link IBindingInfo} object.
+	 */
+	void addBinding(IBindingInfo binding);
+
+	/**
+	 * Handle edit given {@link IBindingInfo} object.
+	 */
+	void editBinding(IBindingInfo binding);
+
+	/**
+	 * Delete given {@link IBindingInfo} object.
+	 */
+	void deleteBinding(IBindingInfo binding);
+
+	/**
+	 * Delete all bindings.
+	 */
+	void deleteAllBindings();
+
+	/**
+	 * XXX
+	 */
+	void deleteBindings(JavaInfo javaInfo) throws Exception;
+
+	/**
+	 * XXX
+	 */
+	boolean canMoveBinding(IBindingInfo binding, int targetIndex, boolean upDown);
+
+	/**
+	 * XXX
+	 */
+	void moveBinding(IBindingInfo binding, int sourceIndex, int targetIndex, boolean upDown);
+
+	/**
+	 * XXX
+	 */
+	void setBindingPage(Object bindingPage);
+
+	/**
+	 * XXX
+	 */
+	void refreshDesigner();
+
+	/**
+	 * XXX
+	 */
+	void fillExternalBindingActions(ToolBar toolBar, Menu contextMenu);
+
+	/**
+	 * XXX
+	 */
+	void saveEdit();
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/IObserveDecoration.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/IObserveDecoration.java
index 3f449e027..f633617b1 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/IObserveDecoration.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/IObserveDecoration.java
@@ -19,8 +19,8 @@
  * @coverage bindings.model
  */
 public interface IObserveDecoration {
-  /**
-   * @return {@link IObserveDecorator} for visual decorate this object.
-   */
-  IObserveDecorator getDecorator();
+	/**
+	 * @return {@link IObserveDecorator} for visual decorate this object.
+	 */
+	IObserveDecorator getDecorator();
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/IObserveInfo.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/IObserveInfo.java
index 12b864914..d93fb8eb3 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/IObserveInfo.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/IObserveInfo.java
@@ -21,54 +21,54 @@
  * @coverage bindings.model
  */
 public interface IObserveInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Type
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return {@link ObserveType} for this observe.
-   */
-  ObserveType getType();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Type
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return {@link ObserveType} for this observe.
+	 */
+	ObserveType getType();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Hierarchy
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the parent of this object.
-   */
-  IObserveInfo getParent();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Hierarchy
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the parent of this object.
+	 */
+	IObserveInfo getParent();
 
-  /**
-   * @return list of {@link IObserveInfo} children with given {@link ChildrenContext}.
-   */
-  List<IObserveInfo> getChildren(ChildrenContext context);
+	/**
+	 * @return list of {@link IObserveInfo} children with given {@link ChildrenContext}.
+	 */
+	List<IObserveInfo> getChildren(ChildrenContext context);
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return {@link IObservePresentation} for visual presentation of this object.
-   */
-  IObservePresentation getPresentation();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return {@link IObservePresentation} for visual presentation of this object.
+	 */
+	IObservePresentation getPresentation();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Context
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  enum ChildrenContext {
-    /**
-     * All "object" children.
-     */
-    ChildrenForMasterTable,
-    /**
-     * All children properties.
-     */
-    ChildrenForPropertiesTable
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Context
+	//
+	////////////////////////////////////////////////////////////////////////////
+	enum ChildrenContext {
+		/**
+		 * All "object" children.
+		 */
+		ChildrenForMasterTable,
+		/**
+		 * All children properties.
+		 */
+		ChildrenForPropertiesTable
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/IObservePresentation.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/IObservePresentation.java
index 2cd29ab63..779f7c8d1 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/IObservePresentation.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/IObservePresentation.java
@@ -19,18 +19,18 @@
  * @coverage bindings.model
  */
 public interface IObservePresentation {
-  /**
-   * @return the text to display for user.
-   */
-  String getText() throws Exception;
+	/**
+	 * @return the text to display for user.
+	 */
+	String getText() throws Exception;
 
-  /**
-   * @return the text to display for user.
-   */
-  String getTextForBinding() throws Exception;
+	/**
+	 * @return the text to display for user.
+	 */
+	String getTextForBinding() throws Exception;
 
-  /**
-   * @return the image to display for user.
-   */
-  Image getImage() throws Exception;
+	/**
+	 * @return the image to display for user.
+	 */
+	Image getImage() throws Exception;
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/ISynchronizeProcessor.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/ISynchronizeProcessor.java
index 8d95f87e6..f46176cb3 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/ISynchronizeProcessor.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/ISynchronizeProcessor.java
@@ -18,33 +18,33 @@
  *
  */
 public interface ISynchronizeProcessor<T, V> {
-  /**
-   * @return {@code true} if processor will work with given {@code object}.
-   */
-  boolean handleObject(V object);
+	/**
+	 * @return {@code true} if processor will work with given {@code object}.
+	 */
+	boolean handleObject(V object);
 
-  /**
-   * @return key object for given {@code object}.
-   */
-  T getKeyObject(V object);
+	/**
+	 * @return key object for given {@code object}.
+	 */
+	T getKeyObject(V object);
 
-  /**
-   * Check equal for given keys.
-   */
-  boolean equals(T key0, T key1);
+	/**
+	 * Check equal for given keys.
+	 */
+	boolean equals(T key0, T key1);
 
-  /**
-   * XXX
-   */
-  V findObject(Map<T, V> keyObjectToObject, T key) throws Exception;
+	/**
+	 * XXX
+	 */
+	V findObject(Map<T, V> keyObjectToObject, T key) throws Exception;
 
-  /**
-   * Create new object for given key.
-   */
-  V createObject(T keyObject) throws Exception;
+	/**
+	 * Create new object for given key.
+	 */
+	V createObject(T keyObject) throws Exception;
 
-  /**
-   * Update old {@link BeanBindableInfo} object.
-   */
-  void update(V object) throws Exception;
+	/**
+	 * Update old {@link BeanBindableInfo} object.
+	 */
+	void update(V object) throws Exception;
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/JavaInfoDeleteManager.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/JavaInfoDeleteManager.java
index 16b330900..bb1a8fd0a 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/JavaInfoDeleteManager.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/JavaInfoDeleteManager.java
@@ -26,69 +26,69 @@
  * @coverage bindings.model
  */
 public abstract class JavaInfoDeleteManager {
-  protected final IDatabindingsProvider m_provider;
+	protected final IDatabindingsProvider m_provider;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public JavaInfoDeleteManager(IDatabindingsProvider provider, ObjectInfo objectInfoRoot) {
-    m_provider = provider;
-    objectInfoRoot.addBroadcastListener(new ObjectInfoDelete() {
-      @Override
-      public void before(ObjectInfo parent, ObjectInfo child) throws Exception {
-        deleteJavaInfo(child);
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public JavaInfoDeleteManager(IDatabindingsProvider provider, ObjectInfo objectInfoRoot) {
+		m_provider = provider;
+		objectInfoRoot.addBroadcastListener(new ObjectInfoDelete() {
+			@Override
+			public void before(ObjectInfo parent, ObjectInfo child) throws Exception {
+				deleteJavaInfo(child);
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Handle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public final void deleteJavaInfo(ObjectInfo javaInfo) throws Exception {
-    List<IBindingInfo> deleteList = Lists.newArrayList();
-    List<IBindingInfo> bindings = m_provider.getBindings();
-    //
-    if (!m_provider.getBindings().isEmpty() && accept(javaInfo)) {
-      String reference = getReference(javaInfo);
-      //
-      if (reference != null) {
-        for (IBindingInfo binding : Lists.newArrayList(bindings)) {
-          if (equals(javaInfo, reference, binding.getTarget())
-              || equals(javaInfo, reference, binding.getModel())) {
-            deleteList.add(binding);
-            deleteBinding(binding, bindings);
-          }
-        }
-      }
-    }
-    // commit
-    if (!deleteList.isEmpty()) {
-      bindings.removeAll(deleteList);
-      m_provider.saveEdit();
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Handle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public final void deleteJavaInfo(ObjectInfo javaInfo) throws Exception {
+		List<IBindingInfo> deleteList = Lists.newArrayList();
+		List<IBindingInfo> bindings = m_provider.getBindings();
+		//
+		if (!m_provider.getBindings().isEmpty() && accept(javaInfo)) {
+			String reference = getReference(javaInfo);
+			//
+			if (reference != null) {
+				for (IBindingInfo binding : Lists.newArrayList(bindings)) {
+					if (equals(javaInfo, reference, binding.getTarget())
+							|| equals(javaInfo, reference, binding.getModel())) {
+						deleteList.add(binding);
+						deleteBinding(binding, bindings);
+					}
+				}
+			}
+		}
+		// commit
+		if (!deleteList.isEmpty()) {
+			bindings.removeAll(deleteList);
+			m_provider.saveEdit();
+		}
+	}
 
-  protected abstract void deleteBinding(IBindingInfo binding, List<IBindingInfo> bindings)
-      throws Exception;
+	protected abstract void deleteBinding(IBindingInfo binding, List<IBindingInfo> bindings)
+			throws Exception;
 
-  /**
-   * @return <code>true</code> if given {@link JavaInfo} can work with bindings.
-   */
-  protected abstract boolean accept(ObjectInfo javaInfo) throws Exception;
+	/**
+	 * @return <code>true</code> if given {@link JavaInfo} can work with bindings.
+	 */
+	protected abstract boolean accept(ObjectInfo javaInfo) throws Exception;
 
-  /**
-   * @return {@link String} reference that represented given {@link JavaInfo}.
-   */
-  protected abstract String getReference(ObjectInfo javaInfo) throws Exception;
+	/**
+	 * @return {@link String} reference that represented given {@link JavaInfo}.
+	 */
+	protected abstract String getReference(ObjectInfo javaInfo) throws Exception;
 
-  /**
-   * @return <code>true</code> if given {@link JavaInfo} equal with given {@link IObserveInfo}.
-   */
-  protected abstract boolean equals(ObjectInfo javaInfo,
-      String javaInfoReference,
-      IObserveInfo iobserve) throws Exception;
+	/**
+	 * @return <code>true</code> if given {@link JavaInfo} equal with given {@link IObserveInfo}.
+	 */
+	protected abstract boolean equals(ObjectInfo javaInfo,
+			String javaInfoReference,
+			IObserveInfo iobserve) throws Exception;
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/ObserveComparator.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/ObserveComparator.java
index 7d974188d..69cb7c54b 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/ObserveComparator.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/ObserveComparator.java
@@ -22,22 +22,22 @@
  * @coverage bindings.model
  */
 public final class ObserveComparator implements Comparator<IObserveInfo> {
-  public static final Comparator<IObserveInfo> INSTANCE = new ObserveComparator();
+	public static final Comparator<IObserveInfo> INSTANCE = new ObserveComparator();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Comparator
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public int compare(final IObserveInfo observe1, final IObserveInfo observe2) {
-    return ExecutionUtils.runObjectLog(new RunnableObjectEx<Integer>() {
-      @Override
-      public Integer runObject() throws Exception {
-        String text1 = observe1.getPresentation().getText();
-        String text2 = observe2.getPresentation().getText();
-        return text1.compareTo(text2);
-      }
-    }, 0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Comparator
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public int compare(final IObserveInfo observe1, final IObserveInfo observe2) {
+		return ExecutionUtils.runObjectLog(new RunnableObjectEx<Integer>() {
+			@Override
+			public Integer runObject() throws Exception {
+				String text1 = observe1.getPresentation().getText();
+				String text2 = observe2.getPresentation().getText();
+				return text1.compareTo(text2);
+			}
+		}, 0);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/ObserveTypeContainer.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/ObserveTypeContainer.java
index 071027b83..34f32d573 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/ObserveTypeContainer.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/ObserveTypeContainer.java
@@ -28,114 +28,114 @@
  * @coverage bindings.model
  */
 public abstract class ObserveTypeContainer implements ISubParser {
-  private final ObserveType m_observeType;
-  private final boolean m_isTarget;
-  private final boolean m_isModel;
+	private final ObserveType m_observeType;
+	private final boolean m_isTarget;
+	private final boolean m_isModel;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ObserveTypeContainer(ObserveType observeType, boolean isTarget, boolean isModel) {
-    m_observeType = observeType;
-    m_isTarget = isTarget;
-    m_isModel = isModel;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ObserveTypeContainer(ObserveType observeType, boolean isTarget, boolean isModel) {
+		m_observeType = observeType;
+		m_isTarget = isTarget;
+		m_isModel = isModel;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Initialize
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void initialize(IDatabindingsProvider provider) throws Exception {
-    // No actions necessary
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Initialize
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void initialize(IDatabindingsProvider provider) throws Exception {
+		// No actions necessary
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Accept
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if this container can work with given {@link JavaInfo}.
-   */
-  public boolean accept(JavaInfo javaInfoRoot) {
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Accept
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if this container can work with given {@link JavaInfo}.
+	 */
+	public boolean accept(JavaInfo javaInfoRoot) {
+		return true;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ObserveType
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return {@link ObserveType} association with this container.
-   */
-  public final ObserveType getObserveType() {
-    return m_observeType;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ObserveType
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return {@link ObserveType} association with this container.
+	 */
+	public final ObserveType getObserveType() {
+		return m_observeType;
+	}
 
-  /**
-   * @return <code>true</code> if page for hosted {@link ObserveType} is started on "target" mode.
-   */
-  public final boolean isTargetStartType() {
-    return m_isTarget;
-  }
+	/**
+	 * @return <code>true</code> if page for hosted {@link ObserveType} is started on "target" mode.
+	 */
+	public final boolean isTargetStartType() {
+		return m_isTarget;
+	}
 
-  /**
-   * @return <code>true</code> if page for hosted {@link ObserveType} is started on "model" mode.
-   */
-  public final boolean isModelStartType() {
-    return m_isModel;
-  }
+	/**
+	 * @return <code>true</code> if page for hosted {@link ObserveType} is started on "model" mode.
+	 */
+	public final boolean isModelStartType() {
+		return m_isModel;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parse
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Parse current compilation unit for create {@link IObserveInfo}'s.
-   */
-  public abstract void createObservables(JavaInfo root,
-      IModelResolver resolver,
-      AstEditor editor,
-      TypeDeclaration rootNode) throws Exception;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parse
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Parse current compilation unit for create {@link IObserveInfo}'s.
+	 */
+	public abstract void createObservables(JavaInfo root,
+			IModelResolver resolver,
+			AstEditor editor,
+			TypeDeclaration rootNode) throws Exception;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IObserveInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return all {@link IObserveInfo}'s with hosted {@link ObserveType} contains into current
-   *         compilation unit.
-   */
-  public abstract List<IObserveInfo> getObservables();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IObserveInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return all {@link IObserveInfo}'s with hosted {@link ObserveType} contains into current
+	 *         compilation unit.
+	 */
+	public abstract List<IObserveInfo> getObservables();
 
-  /**
-   * Update all observes (fields, JavaInfo, etc.) maybe more elements is added or removed.
-   */
-  public abstract void synchronizeObserves(JavaInfo root, AstEditor editor, TypeDeclaration rootNode)
-      throws Exception;
+	/**
+	 * Update all observes (fields, JavaInfo, etc.) maybe more elements is added or removed.
+	 */
+	public abstract void synchronizeObserves(JavaInfo root, AstEditor editor, TypeDeclaration rootNode)
+			throws Exception;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Classpath
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Configure given {@link IJavaProject} classpath and copy to project support classes or
-   * libraries.
-   */
-  public boolean ensureDBLibraries(IJavaProject javaProject) throws Exception {
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Classpath
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Configure given {@link IJavaProject} classpath and copy to project support classes or
+	 * libraries.
+	 */
+	public boolean ensureDBLibraries(IJavaProject javaProject) throws Exception {
+		return false;
+	}
 
-  /**
-   * Copy to {@link IJavaProject} internal helper classes.
-   */
-  public void ensureDesignerResources(IJavaProject javaProject) throws Exception {
-  }
+	/**
+	 * Copy to {@link IJavaProject} internal helper classes.
+	 */
+	public void ensureDesignerResources(IJavaProject javaProject) throws Exception {
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/SynchronizeManager.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/SynchronizeManager.java
index a4d839d16..04593c341 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/SynchronizeManager.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/SynchronizeManager.java
@@ -35,169 +35,169 @@
  * @coverage bindings.model
  */
 public final class SynchronizeManager {
-  private final IDatabindingsProvider m_provider;
+	private final IDatabindingsProvider m_provider;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SynchronizeManager(IDatabindingsProvider provider, JavaInfo javaInfoRoot) {
-    m_provider = provider;
-    javaInfoRoot.addBroadcastListener(new ObjectInfoDelete() {
-      @Override
-      public void after(ObjectInfo parent, ObjectInfo child) throws Exception {
-        synchronizeObserves();
-      }
-    });
-    javaInfoRoot.addBroadcastListener(new JavaEventListener() {
-      @Override
-      public void addAfter(JavaInfo parent, JavaInfo child) throws Exception {
-        if (EditorState.get(child.getEditor()).isLiveComponent()) {
-          return;
-        }
-        handleCreate(child);
-      }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SynchronizeManager(IDatabindingsProvider provider, JavaInfo javaInfoRoot) {
+		m_provider = provider;
+		javaInfoRoot.addBroadcastListener(new ObjectInfoDelete() {
+			@Override
+			public void after(ObjectInfo parent, ObjectInfo child) throws Exception {
+				synchronizeObserves();
+			}
+		});
+		javaInfoRoot.addBroadcastListener(new JavaEventListener() {
+			@Override
+			public void addAfter(JavaInfo parent, JavaInfo child) throws Exception {
+				if (EditorState.get(child.getEditor()).isLiveComponent()) {
+					return;
+				}
+				handleCreate(child);
+			}
 
-      @Override
-      public void moveAfter(JavaInfo child, ObjectInfo oldParent, JavaInfo newParent)
-          throws Exception {
-        synchronizeObserves();
-      }
+			@Override
+			public void moveAfter(JavaInfo child, ObjectInfo oldParent, JavaInfo newParent)
+					throws Exception {
+				synchronizeObserves();
+			}
 
-      @Override
-      public void replaceChildBefore(JavaInfo parent, JavaInfo oldChild, JavaInfo newChild)
-          throws Exception {
-        m_provider.deleteBindings(oldChild);
-      }
+			@Override
+			public void replaceChildBefore(JavaInfo parent, JavaInfo oldChild, JavaInfo newChild)
+					throws Exception {
+				m_provider.deleteBindings(oldChild);
+			}
 
-      @Override
-      public void replaceChildAfter(JavaInfo parent, JavaInfo oldChild, JavaInfo newChild)
-          throws Exception {
-        handleCreate(newChild);
-      }
+			@Override
+			public void replaceChildAfter(JavaInfo parent, JavaInfo oldChild, JavaInfo newChild)
+					throws Exception {
+				handleCreate(newChild);
+			}
 
-      private void handleCreate(final JavaInfo javaInfo) {
-        // all JavaInfo children (include exposed) done after sets Object to JavaInfo
-        javaInfo.addBroadcastListener(new JavaInfoSetObjectAfter() {
-          @Override
-          public void invoke(JavaInfo target, Object o) throws Exception {
-            if (javaInfo == target) {
-              target.removeBroadcastListener(this);
-              synchronizeObserves();
-            }
-          }
-        });
-      }
-    });
-    javaInfoRoot.addBroadcastListener(new JavaInfoSetVariable() {
-      @Override
-      public void invoke(JavaInfo javaInfo, VariableSupport oldVariable, VariableSupport newVariable)
-          throws Exception {
-        if (oldVariable != null) {
-          if (isField(oldVariable) ^ isField(newVariable)) {
-            synchronizeObserves();
-          }
-        }
-      }
+			private void handleCreate(final JavaInfo javaInfo) {
+				// all JavaInfo children (include exposed) done after sets Object to JavaInfo
+				javaInfo.addBroadcastListener(new JavaInfoSetObjectAfter() {
+					@Override
+					public void invoke(JavaInfo target, Object o) throws Exception {
+						if (javaInfo == target) {
+							target.removeBroadcastListener(this);
+							synchronizeObserves();
+						}
+					}
+				});
+			}
+		});
+		javaInfoRoot.addBroadcastListener(new JavaInfoSetVariable() {
+			@Override
+			public void invoke(JavaInfo javaInfo, VariableSupport oldVariable, VariableSupport newVariable)
+					throws Exception {
+				if (oldVariable != null) {
+					if (isField(oldVariable) ^ isField(newVariable)) {
+						synchronizeObserves();
+					}
+				}
+			}
 
-      private boolean isField(VariableSupport variable) {
-        return variable instanceof FieldVariableSupport;
-      }
-    });
-  }
+			private boolean isField(VariableSupport variable) {
+				return variable instanceof FieldVariableSupport;
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Handle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void synchronizeObserves() throws Exception {
-    m_provider.synchronizeObserves();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Handle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void synchronizeObserves() throws Exception {
+		m_provider.synchronizeObserves();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * XXX
-   */
-  public static <T, V> void synchronizeObjects(List<V> objects,
-      List<T> newKeyObjects,
-      ISynchronizeProcessor<T, V> processor) throws Exception {
-    // prepare map[key, object]
-    int beanCount = 0;
-    Map<T, V> keyObjectToObject = Maps.newHashMap();
-    for (V object : objects) {
-      if (processor.handleObject(object)) {
-        keyObjectToObject.put(processor.getKeyObject(object), object);
-        beanCount++;
-      }
-    }
-    //
-    int keyCount = newKeyObjects.size();
-    int index = 0;
-    for (; index < keyCount; index++) {
-      T keyObject = newKeyObjects.get(index);
-      // quick check over index
-      if (index < beanCount) {
-        V object = objects.get(index);
-        if (processor.equals(processor.getKeyObject(object), keyObject)) {
-          processor.update(object);
-          continue;
-        }
-      }
-      //
-      V object = keyObjectToObject.get(keyObject);
-      if (object == null) {
-        object = processor.findObject(keyObjectToObject, keyObject);
-      }
-      if (object == null) {
-        object = processor.createObject(keyObject);
-        if (object == null) {
-          newKeyObjects.remove(index--);
-          keyCount--;
-        } else {
-          objects.add(index, object);
-        }
-      } else {
-        // reorder child
-        objects.remove(object);
-        objects.add(index, object);
-        processor.update(object);
-      }
-    }
-    // remove old child
-    for (int i = index; i < beanCount; i++) {
-      objects.remove(index);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * XXX
+	 */
+	public static <T, V> void synchronizeObjects(List<V> objects,
+			List<T> newKeyObjects,
+			ISynchronizeProcessor<T, V> processor) throws Exception {
+		// prepare map[key, object]
+		int beanCount = 0;
+		Map<T, V> keyObjectToObject = Maps.newHashMap();
+		for (V object : objects) {
+			if (processor.handleObject(object)) {
+				keyObjectToObject.put(processor.getKeyObject(object), object);
+				beanCount++;
+			}
+		}
+		//
+		int keyCount = newKeyObjects.size();
+		int index = 0;
+		for (; index < keyCount; index++) {
+			T keyObject = newKeyObjects.get(index);
+			// quick check over index
+			if (index < beanCount) {
+				V object = objects.get(index);
+				if (processor.equals(processor.getKeyObject(object), keyObject)) {
+					processor.update(object);
+					continue;
+				}
+			}
+			//
+			V object = keyObjectToObject.get(keyObject);
+			if (object == null) {
+				object = processor.findObject(keyObjectToObject, keyObject);
+			}
+			if (object == null) {
+				object = processor.createObject(keyObject);
+				if (object == null) {
+					newKeyObjects.remove(index--);
+					keyCount--;
+				} else {
+					objects.add(index, object);
+				}
+			} else {
+				// reorder child
+				objects.remove(object);
+				objects.add(index, object);
+				processor.update(object);
+			}
+		}
+		// remove old child
+		for (int i = index; i < beanCount; i++) {
+			objects.remove(index);
+		}
+	}
 
-  /**
-   * @return the {@link List<T extends ObjectInfo>} children for processing.
-   */
-  @SuppressWarnings("unchecked")
-  public static <T extends ObjectInfo> List<T> getChildren(ObjectInfo objectInfo, Class<T> clazz)
-      throws Exception {
-    List<T> childrenInfos = Lists.newArrayList();
-    for (ObjectInfo childObjectInfo : objectInfo.getChildren()) {
-      boolean[] visible = new boolean[]{childObjectInfo.getPresentation().isVisible()};
-      objectInfo.getBroadcast(ObjectInfoChildTree.class).invoke(childObjectInfo, visible);
-      if (visible[0]) {
-        if (childObjectInfo instanceof CollectorObjectInfo) {
-          CollectorObjectInfo collectorObjectInfo = (CollectorObjectInfo) childObjectInfo;
-          for (ObjectInfo itemObjectInfo : collectorObjectInfo.getItems()) {
-            if (clazz.isAssignableFrom(itemObjectInfo.getClass())) {
-              childrenInfos.add((T) itemObjectInfo);
-            }
-          }
-        } else if (clazz.isAssignableFrom(childObjectInfo.getClass())) {
-          childrenInfos.add((T) childObjectInfo);
-        }
-      }
-    }
-    return childrenInfos;
-  }
+	/**
+	 * @return the {@link List<T extends ObjectInfo>} children for processing.
+	 */
+	@SuppressWarnings("unchecked")
+	public static <T extends ObjectInfo> List<T> getChildren(ObjectInfo objectInfo, Class<T> clazz)
+			throws Exception {
+		List<T> childrenInfos = Lists.newArrayList();
+		for (ObjectInfo childObjectInfo : objectInfo.getChildren()) {
+			boolean[] visible = new boolean[]{childObjectInfo.getPresentation().isVisible()};
+			objectInfo.getBroadcast(ObjectInfoChildTree.class).invoke(childObjectInfo, visible);
+			if (visible[0]) {
+				if (childObjectInfo instanceof CollectorObjectInfo) {
+					CollectorObjectInfo collectorObjectInfo = (CollectorObjectInfo) childObjectInfo;
+					for (ObjectInfo itemObjectInfo : collectorObjectInfo.getItems()) {
+						if (clazz.isAssignableFrom(itemObjectInfo.getClass())) {
+							childrenInfos.add((T) itemObjectInfo);
+						}
+					}
+				} else if (clazz.isAssignableFrom(childObjectInfo.getClass())) {
+					childrenInfos.add((T) childObjectInfo);
+				}
+			}
+		}
+		return childrenInfos;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/presentation/IObservePresentationDecorator.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/presentation/IObservePresentationDecorator.java
index 856fd33f4..02d1fc1ab 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/presentation/IObservePresentationDecorator.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/presentation/IObservePresentationDecorator.java
@@ -17,8 +17,8 @@
  * @coverage bindings.model
  */
 public interface IObservePresentationDecorator {
-  /**
-   * Enable or disable decorate this presentation.
-   */
-  void setBindingDecorator(int corner) throws Exception;
+	/**
+	 * Enable or disable decorate this presentation.
+	 */
+	void setBindingDecorator(int corner) throws Exception;
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/presentation/JavaInfoDecorator.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/presentation/JavaInfoDecorator.java
index f9670b76f..cb9487a0d 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/presentation/JavaInfoDecorator.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/presentation/JavaInfoDecorator.java
@@ -30,60 +30,60 @@
  * @coverage bindings.model
  */
 public abstract class JavaInfoDecorator {
-  public static final Image IMAGE = Activator.getImage("decorator.gif");
-  private final IDatabindingsProvider m_provider;
+	public static final Image IMAGE = Activator.getImage("decorator.gif");
+	private final IDatabindingsProvider m_provider;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public JavaInfoDecorator(IDatabindingsProvider provider, ObjectInfo objectInfoRoot) {
-    m_provider = provider;
-    objectInfoRoot.addBroadcastListener(new ObjectInfoPresentationDecorateIcon() {
-      @Override
-      public void invoke(ObjectInfo object, Image[] icon) throws Exception {
-        if (hasDecorate(object)) {
-          icon[0] = SwtResourceManager.decorateImage(icon[0], IMAGE, SwtResourceManager.TOP_RIGHT);
-        }
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public JavaInfoDecorator(IDatabindingsProvider provider, ObjectInfo objectInfoRoot) {
+		m_provider = provider;
+		objectInfoRoot.addBroadcastListener(new ObjectInfoPresentationDecorateIcon() {
+			@Override
+			public void invoke(ObjectInfo object, Image[] icon) throws Exception {
+				if (hasDecorate(object)) {
+					icon[0] = SwtResourceManager.decorateImage(icon[0], IMAGE, SwtResourceManager.TOP_RIGHT);
+				}
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Handle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private boolean hasDecorate(ObjectInfo object) throws Exception {
-    if (!m_provider.getBindings().isEmpty() && accept(object)) {
-      String objectReference = getReference(object);
-      if (objectReference != null) {
-        for (Iterator<IBindingInfo> I = m_provider.getBindings().iterator(); I.hasNext();) {
-          IBindingInfo binding = I.next();
-          if (equals(object, objectReference, binding.getTarget())
-              || equals(object, objectReference, binding.getModel())) {
-            return true;
-          }
-        }
-      }
-    }
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Handle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private boolean hasDecorate(ObjectInfo object) throws Exception {
+		if (!m_provider.getBindings().isEmpty() && accept(object)) {
+			String objectReference = getReference(object);
+			if (objectReference != null) {
+				for (Iterator<IBindingInfo> I = m_provider.getBindings().iterator(); I.hasNext();) {
+					IBindingInfo binding = I.next();
+					if (equals(object, objectReference, binding.getTarget())
+							|| equals(object, objectReference, binding.getModel())) {
+						return true;
+					}
+				}
+			}
+		}
+		return false;
+	}
 
-  /**
-   * @return <code>true</code> if given {@link ObjectInfo} can work with bindings.
-   */
-  protected abstract boolean accept(ObjectInfo object) throws Exception;
+	/**
+	 * @return <code>true</code> if given {@link ObjectInfo} can work with bindings.
+	 */
+	protected abstract boolean accept(ObjectInfo object) throws Exception;
 
-  /**
-   * @return {@link String} reference that represented given {@link ObjectInfo}.
-   */
-  protected abstract String getReference(ObjectInfo object) throws Exception;
+	/**
+	 * @return {@link String} reference that represented given {@link ObjectInfo}.
+	 */
+	protected abstract String getReference(ObjectInfo object) throws Exception;
 
-  /**
-   * @return <code>true</code> if given {@link ObjectInfo} equal with given {@link IObserveInfo}.
-   */
-  protected abstract boolean equals(ObjectInfo object, String objectReference, IObserveInfo iobserve)
-      throws Exception;
+	/**
+	 * @return <code>true</code> if given {@link ObjectInfo} equal with given {@link IObserveInfo}.
+	 */
+	protected abstract boolean equals(ObjectInfo object, String objectReference, IObserveInfo iobserve)
+			throws Exception;
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/presentation/JavaInfoObservePresentation.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/presentation/JavaInfoObservePresentation.java
index d01c9ddfe..500677d30 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/presentation/JavaInfoObservePresentation.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/presentation/JavaInfoObservePresentation.java
@@ -24,43 +24,43 @@
  * @coverage bindings.model
  */
 public class JavaInfoObservePresentation implements IObservePresentation {
-  protected ObjectInfo m_javaInfo;
+	protected ObjectInfo m_javaInfo;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public JavaInfoObservePresentation(ObjectInfo javaInfo) {
-    m_javaInfo = javaInfo;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public JavaInfoObservePresentation(ObjectInfo javaInfo) {
+		m_javaInfo = javaInfo;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void setJavaInfo(ObjectInfo javaInfo) {
-    m_javaInfo = javaInfo;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void setJavaInfo(ObjectInfo javaInfo) {
+		m_javaInfo = javaInfo;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IObservePresentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getText() throws Exception {
-    return ObjectsLabelProvider.INSTANCE.getText(m_javaInfo);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IObservePresentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getText() throws Exception {
+		return ObjectsLabelProvider.INSTANCE.getText(m_javaInfo);
+	}
 
-  @Override
-  public String getTextForBinding() throws Exception {
-    return m_javaInfo.getPresentation().getText();
-  }
+	@Override
+	public String getTextForBinding() throws Exception {
+		return m_javaInfo.getPresentation().getText();
+	}
 
-  @Override
-  public Image getImage() throws Exception {
-    return ObjectsLabelProvider.INSTANCE.getImage(m_javaInfo);
-  }
+	@Override
+	public Image getImage() throws Exception {
+		return ObjectsLabelProvider.INSTANCE.getImage(m_javaInfo);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/presentation/ObservePresentation.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/presentation/ObservePresentation.java
index c9e59e333..4f0715699 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/presentation/ObservePresentation.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/presentation/ObservePresentation.java
@@ -22,40 +22,40 @@
  * @coverage bindings.model
  */
 public abstract class ObservePresentation
-    implements
-      IObservePresentation,
-      IObservePresentationDecorator {
-  private Image m_decorateImage;
+implements
+IObservePresentation,
+IObservePresentationDecorator {
+	private Image m_decorateImage;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IObservePresentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final Image getImage() throws Exception {
-    return m_decorateImage == null ? getInternalImage() : m_decorateImage;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IObservePresentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final Image getImage() throws Exception {
+		return m_decorateImage == null ? getInternalImage() : m_decorateImage;
+	}
 
-  /**
-   * @return {@link Image} for displaying and decorate.
-   */
-  protected abstract Image getInternalImage() throws Exception;
+	/**
+	 * @return {@link Image} for displaying and decorate.
+	 */
+	protected abstract Image getInternalImage() throws Exception;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IObservePresentationDecorator
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final void setBindingDecorator(int corner) throws Exception {
-    if (corner != 0) {
-      Image image = getInternalImage();
-      if (image != null) {
-        m_decorateImage = SwtResourceManager.decorateImage(image, JavaInfoDecorator.IMAGE, corner);
-      }
-    } else {
-      m_decorateImage = null;
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IObservePresentationDecorator
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final void setBindingDecorator(int corner) throws Exception {
+		if (corner != 0) {
+			Image image = getInternalImage();
+			if (image != null) {
+				m_decorateImage = SwtResourceManager.decorateImage(image, JavaInfoDecorator.IMAGE, corner);
+			}
+		} else {
+			m_decorateImage = null;
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/presentation/SimpleObservePresentation.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/presentation/SimpleObservePresentation.java
index 46e88fb37..86073a6e8 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/presentation/SimpleObservePresentation.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/presentation/SimpleObservePresentation.java
@@ -18,47 +18,47 @@
  *
  */
 public class SimpleObservePresentation extends ObservePresentation {
-  private final String m_text;
-  private final String m_textForBinding;
-  private final Image m_image;
+	private final String m_text;
+	private final String m_textForBinding;
+	private final Image m_image;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SimpleObservePresentation(String text, Image image) {
-    this(text, text, image);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SimpleObservePresentation(String text, Image image) {
+		this(text, text, image);
+	}
 
-  public SimpleObservePresentation(String text, String textForBinding, Image image) {
-    m_text = text;
-    m_textForBinding = textForBinding;
-    m_image = image;
-  }
+	public SimpleObservePresentation(String text, String textForBinding, Image image) {
+		m_text = text;
+		m_textForBinding = textForBinding;
+		m_image = image;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ObservePresentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Image getInternalImage() throws Exception {
-    return m_image;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ObservePresentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Image getInternalImage() throws Exception {
+		return m_image;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IObservePresentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getText() throws Exception {
-    return m_text;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IObservePresentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getText() throws Exception {
+		return m_text;
+	}
 
-  @Override
-  public String getTextForBinding() throws Exception {
-    return m_textForBinding;
-  }
+	@Override
+	public String getTextForBinding() throws Exception {
+		return m_textForBinding;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/reference/CompoundReferenceProvider.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/reference/CompoundReferenceProvider.java
index cef92e2ad..4dd0c337e 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/reference/CompoundReferenceProvider.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/reference/CompoundReferenceProvider.java
@@ -18,26 +18,26 @@
  * @coverage bindings.model
  */
 public final class CompoundReferenceProvider implements IReferenceProvider {
-  private final IReferenceProvider m_leftReferenceProvider;
-  private final String m_rightReference;
+	private final IReferenceProvider m_leftReferenceProvider;
+	private final String m_rightReference;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CompoundReferenceProvider(IReferenceProvider leftReferenceProvider, String rightReference) {
-    m_leftReferenceProvider = leftReferenceProvider;
-    m_rightReference = rightReference;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CompoundReferenceProvider(IReferenceProvider leftReferenceProvider, String rightReference) {
+		m_leftReferenceProvider = leftReferenceProvider;
+		m_rightReference = rightReference;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IReferenceProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getReference() throws Exception {
-    return m_leftReferenceProvider.getReference() + m_rightReference;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IReferenceProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getReference() throws Exception {
+		return m_leftReferenceProvider.getReference() + m_rightReference;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/reference/FragmentReferenceProvider.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/reference/FragmentReferenceProvider.java
index e804e857d..f89104661 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/reference/FragmentReferenceProvider.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/reference/FragmentReferenceProvider.java
@@ -19,47 +19,47 @@
  * @coverage bindings.model
  */
 public final class FragmentReferenceProvider implements IReferenceProvider {
-  private VariableDeclarationFragment m_fragment;
-  private IReferenceProvider m_provider;
+	private VariableDeclarationFragment m_fragment;
+	private IReferenceProvider m_provider;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FragmentReferenceProvider(VariableDeclarationFragment fragment) {
-    setFragment(fragment);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FragmentReferenceProvider(VariableDeclarationFragment fragment) {
+		setFragment(fragment);
+	}
 
-  public FragmentReferenceProvider(IReferenceProvider provider) {
-    m_provider = provider;
-  }
+	public FragmentReferenceProvider(IReferenceProvider provider) {
+		m_provider = provider;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public IReferenceProvider getProvider() {
-    return m_provider;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public IReferenceProvider getProvider() {
+		return m_provider;
+	}
 
-  public VariableDeclarationFragment getFragment() {
-    return m_fragment;
-  }
+	public VariableDeclarationFragment getFragment() {
+		return m_fragment;
+	}
 
-  public void setFragment(VariableDeclarationFragment fragment) {
-    m_fragment = fragment;
-    m_provider = null;
-  }
+	public void setFragment(VariableDeclarationFragment fragment) {
+		m_fragment = fragment;
+		m_provider = null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IReferenceProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getReference() throws Exception {
-    return m_provider == null ? m_fragment.getName().getIdentifier() : m_provider.getReference();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IReferenceProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getReference() throws Exception {
+		return m_provider == null ? m_fragment.getName().getIdentifier() : m_provider.getReference();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/reference/IReferenceProvider.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/reference/IReferenceProvider.java
index 0c81005fe..514b4c245 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/reference/IReferenceProvider.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/reference/IReferenceProvider.java
@@ -18,8 +18,8 @@
  * @coverage bindings.model
  */
 public interface IReferenceProvider {
-  /**
-   * @return string reference on hosted object.
-   */
-  String getReference() throws Exception;
+	/**
+	 * @return string reference on hosted object.
+	 */
+	String getReference() throws Exception;
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/reference/StringReferenceProvider.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/reference/StringReferenceProvider.java
index d174d84ec..8da78057b 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/reference/StringReferenceProvider.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/model/reference/StringReferenceProvider.java
@@ -17,25 +17,25 @@
  * @coverage bindings.model
  */
 public final class StringReferenceProvider implements IReferenceProvider {
-  public static final IReferenceProvider EMPTY = new StringReferenceProvider("");
-  private final String m_reference;
+	public static final IReferenceProvider EMPTY = new StringReferenceProvider("");
+	private final String m_reference;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public StringReferenceProvider(String reference) {
-    m_reference = reference;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public StringReferenceProvider(String reference) {
+		m_reference = reference;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IReferenceProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getReference() throws Exception {
-    return m_reference;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IReferenceProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getReference() throws Exception {
+		return m_reference;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/parser/AbstractParser.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/parser/AbstractParser.java
index d80906a00..d65bfd54e 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/parser/AbstractParser.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/parser/AbstractParser.java
@@ -36,183 +36,183 @@
  *
  */
 public abstract class AbstractParser implements IModelResolver {
-  protected final AstEditor m_editor;
-  protected final IDatabindingsProvider m_provider;
-  protected final List<ISubParser> m_subParsers = Lists.newArrayList();
-  protected final List<IModelSupport> m_modelSupports = Lists.newArrayList();
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractParser(AstEditor editor, IDatabindingsProvider provider) {
-    m_editor = editor;
-    m_provider = provider;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parser
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected final void parseMethod(MethodDeclaration method) {
-    method.accept(new ASTVisitor() {
-      @Override
-      public void endVisit(ClassInstanceCreation creation) {
-        try {
-          // prepare signature
-          String signature = CoreUtils.getCreationSignature(creation);
-          // prepare arguments
-          Expression[] arguments = CoreUtils.getExpressionArray(DomGenerics.arguments(creation));
-          if (failExpressions(arguments)) {
-            return;
-          }
-          // ask each parser, maybe this creation is ASTObjectInfo creation
-          for (ISubParser subParser : m_subParsers) {
-            AstObjectInfo model =
-                subParser.parseExpression(
-                    m_editor,
-                    signature,
-                    creation,
-                    arguments,
-                    AbstractParser.this,
-                    m_provider);
-            //
-            if (model != null) {
-              addModel(model, creation);
-              return;
-            }
-          }
-        } catch (Throwable e) {
-          ReflectionUtils.propagate(e);
-        }
-      }
-
-      @Override
-      public void endVisit(MethodInvocation invocation) {
-        try {
-          // prepare signature
-          String signature = CoreUtils.getMethodSignature(invocation);
-          if (signature == null) {
-            return;
-          }
-          // prepare arguments
-          Expression[] arguments = CoreUtils.getExpressionArray(DomGenerics.arguments(invocation));
-          if (failExpressions(arguments)) {
-            return;
-          }
-          // prepare invocation expression
-          Expression expression = invocation.getExpression();
-          if (expression != null) {
-            AstObjectInfo model = getModel(expression);
-            // ask expression model, maybe this invocation is ASTObjectInfo creation
-            if (model != null) {
-              model =
-                  model.parseExpression(
-                      m_editor,
-                      signature,
-                      invocation,
-                      arguments,
-                      AbstractParser.this,
-                      m_provider);
-              //
-              if (model != null) {
-                addModel(model, invocation);
-                return;
-              }
-            }
-          }
-          // ask each parser, maybe this invocation is ASTObjectInfo creation
-          for (ISubParser subParser : m_subParsers) {
-            AstObjectInfo model =
-                subParser.parseExpression(
-                    m_editor,
-                    signature,
-                    invocation,
-                    arguments,
-                    AbstractParser.this);
-            //
-            if (model != null) {
-              addModel(model, invocation);
-              return;
-            }
-          }
-        } catch (Throwable e) {
-          ReflectionUtils.propagate(e);
-        }
-      }
-    });
-  }
-
-  private boolean failExpressions(Expression[] arguments) throws Exception {
-    for (Expression argument : arguments) {
-      if (AstNodeUtils.getTypeBinding(argument) == null) {
-        addError(m_editor, "Expression with errors: '" + argument + "'", new Throwable());
-        return true;
-      }
-    }
-    return false;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IModelResolver
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void addModel(AstObjectInfo model, Expression creation) throws Exception {
-    addModelSupport(new AstModelSupport(model, creation));
-  }
-
-  @Override
-  public AstObjectInfo getModel(Expression expression) throws Exception {
-    IModelSupport modelSupport = getModelSupport(expression);
-    return modelSupport == null ? null : modelSupport.getModel();
-  }
-
-  @Override
-  public AstObjectInfo getModel(Expression expression, IModelResolverFilter filter)
-      throws Exception {
-    for (IModelSupport modelSupport : m_modelSupports) {
-      if (modelSupport.isRepresentedBy(expression) && filter.accept(modelSupport)) {
-        return modelSupport.getModel();
-      }
-    }
-    return null;
-  }
-
-  @Override
-  public void addModelSupport(IModelSupport modelSupport) {
-    m_modelSupports.add(modelSupport);
-  }
-
-  @Override
-  public IModelSupport getModelSupport(Expression expression) throws Exception {
-    Expression actualExpression = AstNodeUtils.getActualVariableExpression(expression);
-    IModelSupport modelSupport = getModelSupport0(actualExpression);
-    if (modelSupport == null && actualExpression != expression) {
-      modelSupport = getModelSupport0(expression);
-    }
-    return modelSupport;
-  }
-
-  private IModelSupport getModelSupport0(Expression expression) throws Exception {
-    for (IModelSupport modelSupport : m_modelSupports) {
-      if (modelSupport.isRepresentedBy(expression)) {
-        return modelSupport;
-      }
-    }
-    return null;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Errors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static void addError(AstEditor editor, String message, Throwable exception) {
-    EditorState state = EditorState.get(editor);
-    state.addWarning(new EditorWarning(message, exception));
-  }
+	protected final AstEditor m_editor;
+	protected final IDatabindingsProvider m_provider;
+	protected final List<ISubParser> m_subParsers = Lists.newArrayList();
+	protected final List<IModelSupport> m_modelSupports = Lists.newArrayList();
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractParser(AstEditor editor, IDatabindingsProvider provider) {
+		m_editor = editor;
+		m_provider = provider;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parser
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected final void parseMethod(MethodDeclaration method) {
+		method.accept(new ASTVisitor() {
+			@Override
+			public void endVisit(ClassInstanceCreation creation) {
+				try {
+					// prepare signature
+					String signature = CoreUtils.getCreationSignature(creation);
+					// prepare arguments
+					Expression[] arguments = CoreUtils.getExpressionArray(DomGenerics.arguments(creation));
+					if (failExpressions(arguments)) {
+						return;
+					}
+					// ask each parser, maybe this creation is ASTObjectInfo creation
+					for (ISubParser subParser : m_subParsers) {
+						AstObjectInfo model =
+								subParser.parseExpression(
+										m_editor,
+										signature,
+										creation,
+										arguments,
+										AbstractParser.this,
+										m_provider);
+						//
+						if (model != null) {
+							addModel(model, creation);
+							return;
+						}
+					}
+				} catch (Throwable e) {
+					ReflectionUtils.propagate(e);
+				}
+			}
+
+			@Override
+			public void endVisit(MethodInvocation invocation) {
+				try {
+					// prepare signature
+					String signature = CoreUtils.getMethodSignature(invocation);
+					if (signature == null) {
+						return;
+					}
+					// prepare arguments
+					Expression[] arguments = CoreUtils.getExpressionArray(DomGenerics.arguments(invocation));
+					if (failExpressions(arguments)) {
+						return;
+					}
+					// prepare invocation expression
+					Expression expression = invocation.getExpression();
+					if (expression != null) {
+						AstObjectInfo model = getModel(expression);
+						// ask expression model, maybe this invocation is ASTObjectInfo creation
+						if (model != null) {
+							model =
+									model.parseExpression(
+											m_editor,
+											signature,
+											invocation,
+											arguments,
+											AbstractParser.this,
+											m_provider);
+							//
+							if (model != null) {
+								addModel(model, invocation);
+								return;
+							}
+						}
+					}
+					// ask each parser, maybe this invocation is ASTObjectInfo creation
+					for (ISubParser subParser : m_subParsers) {
+						AstObjectInfo model =
+								subParser.parseExpression(
+										m_editor,
+										signature,
+										invocation,
+										arguments,
+										AbstractParser.this);
+						//
+						if (model != null) {
+							addModel(model, invocation);
+							return;
+						}
+					}
+				} catch (Throwable e) {
+					ReflectionUtils.propagate(e);
+				}
+			}
+		});
+	}
+
+	private boolean failExpressions(Expression[] arguments) throws Exception {
+		for (Expression argument : arguments) {
+			if (AstNodeUtils.getTypeBinding(argument) == null) {
+				addError(m_editor, "Expression with errors: '" + argument + "'", new Throwable());
+				return true;
+			}
+		}
+		return false;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IModelResolver
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void addModel(AstObjectInfo model, Expression creation) throws Exception {
+		addModelSupport(new AstModelSupport(model, creation));
+	}
+
+	@Override
+	public AstObjectInfo getModel(Expression expression) throws Exception {
+		IModelSupport modelSupport = getModelSupport(expression);
+		return modelSupport == null ? null : modelSupport.getModel();
+	}
+
+	@Override
+	public AstObjectInfo getModel(Expression expression, IModelResolverFilter filter)
+			throws Exception {
+		for (IModelSupport modelSupport : m_modelSupports) {
+			if (modelSupport.isRepresentedBy(expression) && filter.accept(modelSupport)) {
+				return modelSupport.getModel();
+			}
+		}
+		return null;
+	}
+
+	@Override
+	public void addModelSupport(IModelSupport modelSupport) {
+		m_modelSupports.add(modelSupport);
+	}
+
+	@Override
+	public IModelSupport getModelSupport(Expression expression) throws Exception {
+		Expression actualExpression = AstNodeUtils.getActualVariableExpression(expression);
+		IModelSupport modelSupport = getModelSupport0(actualExpression);
+		if (modelSupport == null && actualExpression != expression) {
+			modelSupport = getModelSupport0(expression);
+		}
+		return modelSupport;
+	}
+
+	private IModelSupport getModelSupport0(Expression expression) throws Exception {
+		for (IModelSupport modelSupport : m_modelSupports) {
+			if (modelSupport.isRepresentedBy(expression)) {
+				return modelSupport;
+			}
+		}
+		return null;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Errors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static void addError(AstEditor editor, String message, Throwable exception) {
+		EditorState state = EditorState.get(editor);
+		state.addWarning(new EditorWarning(message, exception));
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/parser/AstModelSupport.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/parser/AstModelSupport.java
index 01c79a6e6..5266840b9 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/parser/AstModelSupport.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/parser/AstModelSupport.java
@@ -30,95 +30,95 @@
  * @coverage bindings.parser
  */
 public class AstModelSupport implements IModelSupport {
-  private static final String REFERENCE_VALUE_KEY = "Reference value for this Expression";
-  private final AstObjectInfo m_model;
-  private Expression m_expression;
-  private String m_nameReference;
+	private static final String REFERENCE_VALUE_KEY = "Reference value for this Expression";
+	private final AstObjectInfo m_model;
+	private Expression m_expression;
+	private String m_nameReference;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected AstModelSupport(AstObjectInfo model) {
-    m_model = model;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected AstModelSupport(AstObjectInfo model) {
+		m_model = model;
+	}
 
-  public AstModelSupport(AstObjectInfo model, Expression creation) {
-    m_model = model;
-    m_expression = creation;
-    calculateNameReference(m_expression);
-  }
+	public AstModelSupport(AstObjectInfo model, Expression creation) {
+		m_model = model;
+		m_expression = creation;
+		calculateNameReference(m_expression);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected final void calculateNameReference(Expression expression) {
-    if (m_nameReference == null) {
-      // prepare parent
-      ASTNode parent = expression.getParent();
-      // handle variables and assignments
-      if (parent instanceof VariableDeclarationFragment) {
-        VariableDeclarationFragment fragment = (VariableDeclarationFragment) parent;
-        m_nameReference = fragment.getName().getIdentifier();
-      } else if (parent instanceof Assignment) {
-        Assignment assignment = (Assignment) parent;
-        m_nameReference = CoreUtils.getNodeReference(assignment.getLeftHandSide());
-        //
-        if (m_nameReference != null && m_model instanceof IASTObjectInfo2) {
-          TypeDeclaration typeDeclaration = AstNodeUtils.getEnclosingTypeTop(expression);
-          VariableDeclarationFragment fragment =
-              AstNodeUtils.getFieldFragmentByName(typeDeclaration, m_nameReference);
-          if (fragment != null) {
-            IASTObjectInfo2 model = (IASTObjectInfo2) m_model;
-            model.setField();
-          }
-        }
-      }
-      // configure model variable
-      if (m_nameReference != null) {
-        m_model.setVariableIdentifier(m_nameReference);
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected final void calculateNameReference(Expression expression) {
+		if (m_nameReference == null) {
+			// prepare parent
+			ASTNode parent = expression.getParent();
+			// handle variables and assignments
+			if (parent instanceof VariableDeclarationFragment) {
+				VariableDeclarationFragment fragment = (VariableDeclarationFragment) parent;
+				m_nameReference = fragment.getName().getIdentifier();
+			} else if (parent instanceof Assignment) {
+				Assignment assignment = (Assignment) parent;
+				m_nameReference = CoreUtils.getNodeReference(assignment.getLeftHandSide());
+				//
+				if (m_nameReference != null && m_model instanceof IASTObjectInfo2) {
+					TypeDeclaration typeDeclaration = AstNodeUtils.getEnclosingTypeTop(expression);
+					VariableDeclarationFragment fragment =
+							AstNodeUtils.getFieldFragmentByName(typeDeclaration, m_nameReference);
+					if (fragment != null) {
+						IASTObjectInfo2 model = (IASTObjectInfo2) m_model;
+						model.setField();
+					}
+				}
+			}
+			// configure model variable
+			if (m_nameReference != null) {
+				m_model.setVariableIdentifier(m_nameReference);
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IModelSupport
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final AstObjectInfo getModel() {
-    return m_model;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IModelSupport
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final AstObjectInfo getModel() {
+		return m_model;
+	}
 
-  @Override
-  public boolean isRepresentedBy(Expression expression) throws Exception {
-    // check object references
-    if (m_expression == expression) {
-      return true;
-    }
-    // check code references
-    return isRepresentedOverReference(expression);
-  }
+	@Override
+	public boolean isRepresentedBy(Expression expression) throws Exception {
+		// check object references
+		if (m_expression == expression) {
+			return true;
+		}
+		// check code references
+		return isRepresentedOverReference(expression);
+	}
 
-  protected final boolean isRepresentedOverReference(Expression expression) throws Exception {
-    if (m_nameReference != null) {
-      // prepare cached value
-      String nameReference = (String) expression.getProperty(REFERENCE_VALUE_KEY);
-      if (nameReference != null) {
-        return m_nameReference.equals(nameReference);
-      }
-      // check variable references
-      if (AstNodeUtils.isVariable(expression)) {
-        nameReference = CoreUtils.getNodeReference(expression);
-        expression.setProperty(REFERENCE_VALUE_KEY, nameReference);
-        //
-        return m_nameReference.equals(nameReference);
-      }
-    }
-    return false;
-  }
+	protected final boolean isRepresentedOverReference(Expression expression) throws Exception {
+		if (m_nameReference != null) {
+			// prepare cached value
+			String nameReference = (String) expression.getProperty(REFERENCE_VALUE_KEY);
+			if (nameReference != null) {
+				return m_nameReference.equals(nameReference);
+			}
+			// check variable references
+			if (AstNodeUtils.isVariable(expression)) {
+				nameReference = CoreUtils.getNodeReference(expression);
+				expression.setProperty(REFERENCE_VALUE_KEY, nameReference);
+				//
+				return m_nameReference.equals(nameReference);
+			}
+		}
+		return false;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/parser/DatabindingRootProcessor.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/parser/DatabindingRootProcessor.java
index 9d2143229..13ad2d7e4 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/parser/DatabindingRootProcessor.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/parser/DatabindingRootProcessor.java
@@ -32,45 +32,45 @@
  * @coverage bindings.parser
  */
 public class DatabindingRootProcessor implements IRootProcessor {
-  public static final IRootProcessor INSTANCE = new DatabindingRootProcessor();
-  public static final Map<ICompilationUnit, ParseState> STATES = Maps.newHashMap();
-  private List<IDatabindingFactory> m_factories;
+	public static final IRootProcessor INSTANCE = new DatabindingRootProcessor();
+	public static final Map<ICompilationUnit, ParseState> STATES = Maps.newHashMap();
+	private List<IDatabindingFactory> m_factories;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IRootProcessor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void process(final JavaInfo root, List<JavaInfo> components) throws Exception {
-    if (EditorState.get(root.getEditor()).isLiveComponent()) {
-      return;
-    }
-    // prepare factories
-    if (m_factories == null) {
-      m_factories =
-          ExternalFactoriesHelper.getElementsInstances(
-              IDatabindingFactory.class,
-              "org.eclipse.wb.core.databinding.databindingFactories",
-              "factory");
-    }
-    // handle providers
-    for (IDatabindingFactory factory : m_factories) {
-      IDatabindingsProvider databindingsProvider = factory.createProvider(root);
-      if (databindingsProvider != null) {
-        // store current provider
-        STATES.put(
-            root.getEditor().getModelUnit(),
-            new ParseState(databindingsProvider, factory.getPlugin()));
-        // add remove listener
-        root.addBroadcastListener(new ObjectEventListener() {
-          @Override
-          public void dispose() throws Exception {
-            STATES.remove(root.getEditor().getModelUnit());
-          }
-        });
-        return;
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IRootProcessor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void process(final JavaInfo root, List<JavaInfo> components) throws Exception {
+		if (EditorState.get(root.getEditor()).isLiveComponent()) {
+			return;
+		}
+		// prepare factories
+		if (m_factories == null) {
+			m_factories =
+					ExternalFactoriesHelper.getElementsInstances(
+							IDatabindingFactory.class,
+							"org.eclipse.wb.core.databinding.databindingFactories",
+							"factory");
+		}
+		// handle providers
+		for (IDatabindingFactory factory : m_factories) {
+			IDatabindingsProvider databindingsProvider = factory.createProvider(root);
+			if (databindingsProvider != null) {
+				// store current provider
+				STATES.put(
+						root.getEditor().getModelUnit(),
+						new ParseState(databindingsProvider, factory.getPlugin()));
+				// add remove listener
+				root.addBroadcastListener(new ObjectEventListener() {
+					@Override
+					public void dispose() throws Exception {
+						STATES.remove(root.getEditor().getModelUnit());
+					}
+				});
+				return;
+			}
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/parser/IModelResolver.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/parser/IModelResolver.java
index efb990157..ad5909dd0 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/parser/IModelResolver.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/parser/IModelResolver.java
@@ -21,30 +21,30 @@
  * @coverage bindings.parser
  */
 public interface IModelResolver {
-  /**
-   * Add default {@link AstObjectInfo} model resolver for given {@link Expression}.
-   */
-  void addModel(AstObjectInfo model, Expression creation) throws Exception;
+	/**
+	 * Add default {@link AstObjectInfo} model resolver for given {@link Expression}.
+	 */
+	void addModel(AstObjectInfo model, Expression creation) throws Exception;
 
-  /**
-   * @return {@link AstObjectInfo} for given {@link Expression} or <code>null</code> if given
-   *         {@link Expression} does not represent {@link AstObjectInfo}.
-   */
-  AstObjectInfo getModel(Expression expression) throws Exception;
+	/**
+	 * @return {@link AstObjectInfo} for given {@link Expression} or <code>null</code> if given
+	 *         {@link Expression} does not represent {@link AstObjectInfo}.
+	 */
+	AstObjectInfo getModel(Expression expression) throws Exception;
 
-  /**
-   * XXX
-   */
-  AstObjectInfo getModel(Expression expression, IModelResolverFilter filter) throws Exception;
+	/**
+	 * XXX
+	 */
+	AstObjectInfo getModel(Expression expression, IModelResolverFilter filter) throws Exception;
 
-  /**
-   * Add {@link IModelSupport} special {@link AstObjectInfo} model resolver.
-   */
-  void addModelSupport(IModelSupport modelSupport);
+	/**
+	 * Add {@link IModelSupport} special {@link AstObjectInfo} model resolver.
+	 */
+	void addModelSupport(IModelSupport modelSupport);
 
-  /**
-   * @return {@link IModelSupport} for given {@link Expression} or <code>null</code> if given
-   *         {@link Expression} does not represent {@link IModelSupport}.
-   */
-  IModelSupport getModelSupport(Expression expression) throws Exception;
+	/**
+	 * @return {@link IModelSupport} for given {@link Expression} or <code>null</code> if given
+	 *         {@link Expression} does not represent {@link IModelSupport}.
+	 */
+	IModelSupport getModelSupport(Expression expression) throws Exception;
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/parser/IModelResolverFilter.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/parser/IModelResolverFilter.java
index b48c517b8..72fe67ff0 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/parser/IModelResolverFilter.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/parser/IModelResolverFilter.java
@@ -17,8 +17,8 @@
  * @coverage bindings.parser
  */
 public interface IModelResolverFilter {
-  /**
-   * XXX
-   */
-  boolean accept(IModelSupport modelSupport) throws Exception;
+	/**
+	 * XXX
+	 */
+	boolean accept(IModelSupport modelSupport) throws Exception;
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/parser/IModelSupport.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/parser/IModelSupport.java
index adf5eb057..51e45fe75 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/parser/IModelSupport.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/parser/IModelSupport.java
@@ -21,13 +21,13 @@
  * @coverage bindings.parser
  */
 public interface IModelSupport {
-  /**
-   * @return {@link AstObjectInfo} host model.
-   */
-  AstObjectInfo getModel();
+	/**
+	 * @return {@link AstObjectInfo} host model.
+	 */
+	AstObjectInfo getModel();
 
-  /**
-   * @return <code>true</code> if given {@link Expression} represented host model.
-   */
-  boolean isRepresentedBy(Expression expression) throws Exception;
+	/**
+	 * @return <code>true</code> if given {@link Expression} represented host model.
+	 */
+	boolean isRepresentedBy(Expression expression) throws Exception;
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/parser/ISubParser.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/parser/ISubParser.java
index da8806d67..638c1b896 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/parser/ISubParser.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/parser/ISubParser.java
@@ -26,26 +26,26 @@
  * @coverage bindings.parser
  */
 public interface ISubParser {
-  /**
-   * Informs {@link ISubParser} about {@link ClassInstanceCreation}.
-   *
-   * @return {@link AstObjectInfo} model corresponding to given {@link ClassInstanceCreation}.
-   */
-  AstObjectInfo parseExpression(AstEditor editor,
-      String signature,
-      ClassInstanceCreation creation,
-      Expression[] arguments,
-      IModelResolver resolver,
-      IDatabindingsProvider provider) throws Exception;
+	/**
+	 * Informs {@link ISubParser} about {@link ClassInstanceCreation}.
+	 *
+	 * @return {@link AstObjectInfo} model corresponding to given {@link ClassInstanceCreation}.
+	 */
+	AstObjectInfo parseExpression(AstEditor editor,
+			String signature,
+			ClassInstanceCreation creation,
+			Expression[] arguments,
+			IModelResolver resolver,
+			IDatabindingsProvider provider) throws Exception;
 
-  /**
-   * Informs {@link ISubParser} about {@link MethodInvocation}.
-   *
-   * @return {@link AstObjectInfo} model corresponding to given {@link MethodInvocation}.
-   */
-  AstObjectInfo parseExpression(AstEditor editor,
-      String signature,
-      MethodInvocation invocation,
-      Expression[] arguments,
-      IModelResolver resolver) throws Exception;
+	/**
+	 * Informs {@link ISubParser} about {@link MethodInvocation}.
+	 *
+	 * @return {@link AstObjectInfo} model corresponding to given {@link MethodInvocation}.
+	 */
+	AstObjectInfo parseExpression(AstEditor editor,
+			String signature,
+			MethodInvocation invocation,
+			Expression[] arguments,
+			IModelResolver resolver) throws Exception;
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/parser/ParseFactoryNoModelDatabindings.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/parser/ParseFactoryNoModelDatabindings.java
index fdd706cee..fee4e0104 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/parser/ParseFactoryNoModelDatabindings.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/parser/ParseFactoryNoModelDatabindings.java
@@ -23,17 +23,17 @@
  * @coverage bindings.parser
  */
 public final class ParseFactoryNoModelDatabindings extends ParseFactoryNoModel {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ParseFactory_noModel
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean noModel(ASTNode node) {
-    MethodDeclaration enclosingMethod = AstNodeUtils.getEnclosingMethod(node);
-    if (enclosingMethod != null) {
-      return "initDataBindings".equals(enclosingMethod.getName().toString());
-    }
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ParseFactory_noModel
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean noModel(ASTNode node) {
+		MethodDeclaration enclosingMethod = AstNodeUtils.getEnclosingMethod(node);
+		if (enclosingMethod != null) {
+			return "initDataBindings".equals(enclosingMethod.getName().toString());
+		}
+		return false;
+	}
 }
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/parser/ParseState.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/parser/ParseState.java
index b655c75bf..6bef3ca21 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/parser/ParseState.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/parser/ParseState.java
@@ -21,16 +21,16 @@
  * @coverage bindings.parser
  */
 public final class ParseState {
-  public final IDatabindingsProvider databindingsProvider;
-  public final AbstractUIPlugin plugin;
+	public final IDatabindingsProvider databindingsProvider;
+	public final AbstractUIPlugin plugin;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ParseState(IDatabindingsProvider databindingsProvider, AbstractUIPlugin plugin) {
-    this.databindingsProvider = databindingsProvider;
-    this.plugin = plugin;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ParseState(IDatabindingsProvider databindingsProvider, AbstractUIPlugin plugin) {
+		this.databindingsProvider = databindingsProvider;
+		this.plugin = plugin;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/BindDialog.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/BindDialog.java
index 71638ad4e..3c3829ef9 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/BindDialog.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/BindDialog.java
@@ -45,137 +45,137 @@
  * @coverage bindings.ui
  */
 public final class BindDialog extends ResizableTitleAreaDialog implements IPageListener {
-  private final IDatabindingsProvider m_databindingsProvider;
-  private final IBindingInfo m_binding;
-  private final boolean m_canCreate;
-  private final boolean m_autoFinish;
-  private UiContentProviderComposite m_providerComposite;
+	private final IDatabindingsProvider m_databindingsProvider;
+	private final IBindingInfo m_binding;
+	private final boolean m_canCreate;
+	private final boolean m_autoFinish;
+	private UiContentProviderComposite m_providerComposite;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public BindDialog(Shell parentShell,
-      AbstractUIPlugin plugin,
-      IDatabindingsProvider databindingsProvider,
-      IBindingInfo binding,
-      boolean canCreate,
-      boolean autoFinish) {
-    super(parentShell, plugin);
-    m_databindingsProvider = databindingsProvider;
-    m_binding = binding;
-    m_canCreate = canCreate;
-    m_autoFinish = autoFinish;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public BindDialog(Shell parentShell,
+			AbstractUIPlugin plugin,
+			IDatabindingsProvider databindingsProvider,
+			IBindingInfo binding,
+			boolean canCreate,
+			boolean autoFinish) {
+		super(parentShell, plugin);
+		m_databindingsProvider = databindingsProvider;
+		m_binding = binding;
+		m_canCreate = canCreate;
+		m_autoFinish = autoFinish;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Control createDialogArea(Composite parent) {
-    // dialog area
-    final ScrolledComposite container =
-        new ScrolledComposite((Composite) super.createDialogArea(parent), SWT.BORDER | SWT.V_SCROLL);
-    container.setExpandHorizontal(true);
-    //
-    List<IUiContentProvider> providers =
-        ExecutionUtils.runObjectLog(new RunnableObjectEx<List<IUiContentProvider>>() {
-          @Override
-          public List<IUiContentProvider> runObject() throws Exception {
-            return m_databindingsProvider.getContentProviders(m_binding, BindDialog.this);
-          }
-        }, Collections.<IUiContentProvider>emptyList());
-    m_providerComposite = new UiContentProviderComposite(this, providers, container, SWT.NONE);
-    container.setContent(m_providerComposite);
-    container.addControlListener(new ControlAdapter() {
-      @Override
-      public void controlResized(ControlEvent e) {
-        Rectangle bounds = container.getClientArea();
-        Point size = m_providerComposite.computeSize(bounds.width, SWT.DEFAULT);
-        m_providerComposite.setBounds(bounds.x, bounds.y, size.x, size.y);
-      }
-    });
-    GridDataFactory.create(container).fill().grab();
-    //
-    return container;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Control createDialogArea(Composite parent) {
+		// dialog area
+		final ScrolledComposite container =
+				new ScrolledComposite((Composite) super.createDialogArea(parent), SWT.BORDER | SWT.V_SCROLL);
+		container.setExpandHorizontal(true);
+		//
+		List<IUiContentProvider> providers =
+				ExecutionUtils.runObjectLog(new RunnableObjectEx<List<IUiContentProvider>>() {
+					@Override
+					public List<IUiContentProvider> runObject() throws Exception {
+						return m_databindingsProvider.getContentProviders(m_binding, BindDialog.this);
+					}
+				}, Collections.<IUiContentProvider>emptyList());
+		m_providerComposite = new UiContentProviderComposite(this, providers, container, SWT.NONE);
+		container.setContent(m_providerComposite);
+		container.addControlListener(new ControlAdapter() {
+			@Override
+			public void controlResized(ControlEvent e) {
+				Rectangle bounds = container.getClientArea();
+				Point size = m_providerComposite.computeSize(bounds.width, SWT.DEFAULT);
+				m_providerComposite.setBounds(bounds.x, bounds.y, size.x, size.y);
+			}
+		});
+		GridDataFactory.create(container).fill().grab();
+		//
+		return container;
+	}
 
-  @Override
-  protected void createButtonsForButtonBar(Composite parent) {
-    super.createButtonsForButtonBar(parent);
-    // initial state
-    ExecutionUtils.runLog(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        m_providerComposite.performInitialize();
-      }
-    });
-  }
+	@Override
+	protected void createButtonsForButtonBar(Composite parent) {
+		super.createButtonsForButtonBar(parent);
+		// initial state
+		ExecutionUtils.runLog(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				m_providerComposite.performInitialize();
+			}
+		});
+	}
 
-  @Override
-  protected void configureShell(Shell newShell) {
-    // set title
-    if (m_canCreate) {
-      newShell.setText(Messages.BindDialog_titleCreate);
-    } else {
-      newShell.setText(Messages.BindDialog_titleEdit);
-    }
-    super.configureShell(newShell);
-  }
+	@Override
+	protected void configureShell(Shell newShell) {
+		// set title
+		if (m_canCreate) {
+			newShell.setText(Messages.BindDialog_titleCreate);
+		} else {
+			newShell.setText(Messages.BindDialog_titleEdit);
+		}
+		super.configureShell(newShell);
+	}
 
-  @Override
-  protected void okPressed() {
-    // handle finish
-    ExecutionUtils.runLog(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        m_providerComposite.performFinish();
-      }
-    });
-    super.okPressed();
-  }
+	@Override
+	protected void okPressed() {
+		// handle finish
+		ExecutionUtils.runLog(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				m_providerComposite.performFinish();
+			}
+		});
+		super.okPressed();
+	}
 
-  @Override
-  public int open() {
-    // prepare Shell
-    if (getShell() == null) {
-      create();
-    }
-    //
-    constrainShellSize();
-    // handle auto finish
-    if (m_autoFinish && getButton(IDialogConstants.OK_ID).getEnabled()) {
-      okPressed();
-    }
-    Shell shell = getShell();
-    //
-    if (shell != null && !shell.isDisposed()) {
-      // open the window
-      shell.open();
-      Display display = shell.getDisplay();
-      while (!shell.isDisposed()) {
-        if (!display.readAndDispatch()) {
-          display.sleep();
-        }
-      }
-      if (!display.isDisposed()) {
-        display.update();
-      }
-    }
-    // result code
-    return getReturnCode();
-  }
+	@Override
+	public int open() {
+		// prepare Shell
+		if (getShell() == null) {
+			create();
+		}
+		//
+		constrainShellSize();
+		// handle auto finish
+		if (m_autoFinish && getButton(IDialogConstants.OK_ID).getEnabled()) {
+			okPressed();
+		}
+		Shell shell = getShell();
+		//
+		if (shell != null && !shell.isDisposed()) {
+			// open the window
+			shell.open();
+			Display display = shell.getDisplay();
+			while (!shell.isDisposed()) {
+				if (!display.readAndDispatch()) {
+					display.sleep();
+				}
+			}
+			if (!display.isDisposed()) {
+				display.update();
+			}
+		}
+		// result code
+		return getReturnCode();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IPageListener
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void setPageComplete(boolean complete) {
-    getButton(IDialogConstants.OK_ID).setEnabled(complete);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IPageListener
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void setPageComplete(boolean complete) {
+		getButton(IDialogConstants.OK_ID).setEnabled(complete);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/BindWizard.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/BindWizard.java
index 92e982680..6bb8c6429 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/BindWizard.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/BindWizard.java
@@ -25,46 +25,46 @@
  * @coverage bindings.ui
  */
 public class BindWizard extends Wizard {
-  private final Context m_context;
-  private final ObserveElementsWizardPage m_firstPage;
-  private final BindWizardPage m_secondPage;
+	private final Context m_context;
+	private final ObserveElementsWizardPage m_firstPage;
+	private final BindWizardPage m_secondPage;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public BindWizard(Context context, IObserveInfo observeProperty) {
-    m_context = context;
-    m_firstPage = new ObserveElementsWizardPage(context, observeProperty);
-    m_secondPage = new BindWizardPage(context, m_firstPage);
-    setWindowTitle(Messages.BindWizard_title);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public BindWizard(Context context, IObserveInfo observeProperty) {
+		m_context = context;
+		m_firstPage = new ObserveElementsWizardPage(context, observeProperty);
+		m_secondPage = new BindWizardPage(context, m_firstPage);
+		setWindowTitle(Messages.BindWizard_title);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Pages
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void addPages() {
-    addPage(m_firstPage);
-    addPage(m_secondPage);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Pages
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void addPages() {
+		addPage(m_firstPage);
+		addPage(m_secondPage);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Wizard
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean performFinish() {
-    return ExecutionUtils.runObjectLog(new RunnableObjectEx<Boolean>() {
-      @Override
-      public Boolean runObject() throws Exception {
-        m_context.provider.addBinding(m_secondPage.performFinish());
-        return true;
-      }
-    }, true);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Wizard
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean performFinish() {
+		return ExecutionUtils.runObjectLog(new RunnableObjectEx<Boolean>() {
+			@Override
+			public Boolean runObject() throws Exception {
+				m_context.provider.addBinding(m_secondPage.performFinish());
+				return true;
+			}
+		}, true);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/BindWizardPage.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/BindWizardPage.java
index a5da9c242..c127dd1fd 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/BindWizardPage.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/BindWizardPage.java
@@ -36,93 +36,93 @@
  * @coverage bindings.ui
  */
 public class BindWizardPage extends WizardPage implements IPageListener {
-  private final Context m_context;
-  private final ObserveElementsWizardPage m_firstPage;
-  private Composite m_composite;
-  private UiContentProviderComposite m_providerComposite;
-  private IBindingInfo m_binding;
+	private final Context m_context;
+	private final ObserveElementsWizardPage m_firstPage;
+	private Composite m_composite;
+	private UiContentProviderComposite m_providerComposite;
+	private IBindingInfo m_binding;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public BindWizardPage(Context context, ObserveElementsWizardPage firstPage) {
-    super("second");
-    m_context = context;
-    m_firstPage = firstPage;
-    m_firstPage.setSecondPage(this);
-    setPageComplete(false);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public BindWizardPage(Context context, ObserveElementsWizardPage firstPage) {
+		super("second");
+		m_context = context;
+		m_firstPage = firstPage;
+		m_firstPage.setSecondPage(this);
+		setPageComplete(false);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IPageListener
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void setTitleImage(Image image) {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IPageListener
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void setTitleImage(Image image) {
+	}
 
-  @Override
-  public void setPageComplete(boolean complete) {
-    super.setPageComplete(complete);
-    IWizardContainer container = getContainer();
-    if (container != null) {
-      container.updateButtons();
-    }
-  }
+	@Override
+	public void setPageComplete(boolean complete) {
+		super.setPageComplete(complete);
+		IWizardContainer container = getContainer();
+		if (container != null) {
+			container.updateButtons();
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public IBindingInfo performFinish() throws Exception {
-    m_providerComposite.performFinish();
-    return m_binding;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public IBindingInfo performFinish() throws Exception {
+		m_providerComposite.performFinish();
+		return m_binding;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // WizardPage
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void createControl(Composite parent) {
-    m_composite = new Composite(parent, SWT.NONE);
-    m_composite.setLayout(new FillLayout());
-    setControl(m_composite);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// WizardPage
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void createControl(Composite parent) {
+		m_composite = new Composite(parent, SWT.NONE);
+		m_composite.setLayout(new FillLayout());
+		setControl(m_composite);
+	}
 
-  public void calculateFinish() {
-    if (m_providerComposite != null) {
-      m_providerComposite.dispose();
-      m_providerComposite = null;
-    }
-    List<IUiContentProvider> providers =
-        ExecutionUtils.runObjectLog(new RunnableObjectEx<List<IUiContentProvider>>() {
-          @Override
-          public List<IUiContentProvider> runObject() throws Exception {
-            m_binding = m_firstPage.getBinding();
-            return m_context.provider.getContentProviders(m_binding, BindWizardPage.this);
-          }
-        }, Collections.<IUiContentProvider>emptyList());
-    m_providerComposite = new UiContentProviderComposite(this, providers, m_composite, SWT.NONE);
-    // initial state
-    ExecutionUtils.runLog(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        m_providerComposite.performInitialize();
-      }
-    });
-  }
+	public void calculateFinish() {
+		if (m_providerComposite != null) {
+			m_providerComposite.dispose();
+			m_providerComposite = null;
+		}
+		List<IUiContentProvider> providers =
+				ExecutionUtils.runObjectLog(new RunnableObjectEx<List<IUiContentProvider>>() {
+					@Override
+					public List<IUiContentProvider> runObject() throws Exception {
+						m_binding = m_firstPage.getBinding();
+						return m_context.provider.getContentProviders(m_binding, BindWizardPage.this);
+					}
+				}, Collections.<IUiContentProvider>emptyList());
+		m_providerComposite = new UiContentProviderComposite(this, providers, m_composite, SWT.NONE);
+		// initial state
+		ExecutionUtils.runLog(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				m_providerComposite.performInitialize();
+			}
+		});
+	}
 
-  @Override
-  public void setVisible(boolean visible) {
-    if (visible) {
-      m_composite.layout();
-    }
-    super.setVisible(visible);
-  }
+	@Override
+	public void setVisible(boolean visible) {
+		if (visible) {
+			m_composite.layout();
+		}
+		super.setVisible(visible);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/BindingDesignPage.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/BindingDesignPage.java
index 0afeb9524..78f0f75bd 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/BindingDesignPage.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/BindingDesignPage.java
@@ -44,177 +44,177 @@
  * @coverage bindings.ui
  */
 public class BindingDesignPage implements IEditorPage {
-  private IDesignerEditor m_designerEditor;
-  private IDesignPage m_designPage;
-  private Composite m_composite;
-  private EditComposite m_editComposite;
-  private CLabel m_errorLabel;
-  private IDatabindingsProvider m_databindingsProvider;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Creation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static void addPage(List<IEditorPage> pages) {
-    for (IEditorPage page : pages) {
-      if (page instanceof BindingDesignPage) {
-        return;
-      }
-    }
-    pages.add(new BindingDesignPage());
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Life cycle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void initialize(IDesignerEditor designerEditor) {
-    m_designerEditor = designerEditor;
-    m_designPage = m_designerEditor.getMultiMode().getDesignPage();
-  }
-
-  @Override
-  public void dispose() {
-    // remove information about this editor
-    DatabindingRootProcessor.STATES.remove(m_designerEditor.getCompilationUnit());
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Activation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final DesignerEditorListener m_designPageListener = new DesignerEditorListener() {
-    @Override
-    public void reparsed() {
-      handleUpdatePage();
-    }
-  };
-
-  @Override
-  public void handleActiveState(boolean activate) {
-    if (activate) {
-      m_designPage.setSourceModelSynchronizationEnabled(true);
-      m_designerEditor.addDesignPageListener(m_designPageListener);
-      handleUpdatePage();
-    } else {
-      m_designerEditor.removeDesignPageListener(m_designPageListener);
-      m_designPage.setSourceModelSynchronizationEnabled(false);
-    }
-  }
-
-  private void handleUpdatePage() {
-    // check state
-    if (m_designPage.getDesignerState() != DesignerState.Successful) {
-      if (m_editComposite != null) {
-        m_editComposite.dispose();
-        m_editComposite = null;
-      }
-      if (m_errorLabel != null) {
-        m_errorLabel.dispose();
-      }
-      //
-      m_errorLabel = new CLabel(m_composite, SWT.NONE);
-      m_errorLabel.setText(Messages.BindingDesignPage_erorrMessage);
-      m_errorLabel.setImage(Activator.getImage("errors.gif"));
-      GridDataFactory.create(m_errorLabel).fillH().grabH();
-      //
-      m_databindingsProvider = null;
-      m_composite.layout();
-      return;
-    }
-    // prepare old selection
-    EditSelection selection = m_editComposite == null ? null : m_editComposite.getEditSelection();
-    // prepare state
-    ParseState state = DatabindingRootProcessor.STATES.get(m_designerEditor.getCompilationUnit());
-    Assert.isNotNull(state);
-    boolean isNew = m_databindingsProvider != state.databindingsProvider;
-    //
-    if (isNew) {
-      // clear old composite
-      if (m_editComposite != null) {
-        m_editComposite.dispose();
-      }
-      if (m_errorLabel != null) {
-        m_errorLabel.dispose();
-        m_errorLabel = null;
-      }
-      //
-      m_databindingsProvider = state.databindingsProvider;
-      m_databindingsProvider.setBindingPage(this);
-      IDialogSettings settings =
-          UiUtils.getSettings(
-              state.plugin.getDialogSettings(),
-              m_databindingsProvider.getClass().getName());
-      // create new composite
-      m_editComposite =
-          new EditComposite(m_composite, SWT.NONE, state.plugin, m_databindingsProvider, settings);
-      GridDataFactory.create(m_editComposite).fill().grab();
-      m_composite.layout();
-    }
-    // set input
-    m_editComposite.setInput(!isNew, selection);
-  }
-
-  private void handleReparse() {
-    m_designPage.refreshGEF();
-    handleUpdatePage();
-  }
-
-  public static void handleReparse(final BindingDesignPage bindingPage, JavaInfo javaInfoRoot) {
-    if (EnvironmentUtils.isTestingTime()) {
-      return;
-    }
-    javaInfoRoot.addBroadcastListener(new ObjectEventListener() {
-      @Override
-      public void refreshed2() throws Exception {
-        if (bindingPage == null) {
-          IDesignerEditor editor = (IDesignerEditor) DesignerPlugin.getActiveEditor();
-          editor.getMultiMode().getDesignPage().refreshGEF();
-        } else {
-          bindingPage.handleReparse();
-        }
-      }
-    });
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Control createControl(Composite parent) {
-    m_composite = new Composite(parent, SWT.NONE);
-    GridLayoutFactory.create(m_composite).noMargins().noSpacing();
-    return m_composite;
-  }
-
-  @Override
-  public Control getControl() {
-    return m_composite;
-  }
-
-  @Override
-  public void setFocus() {
-    m_composite.setFocus();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getName() {
-    return Messages.BindingDesignPage_name;
-  }
-
-  @Override
-  public Image getImage() {
-    return Activator.getImage("paperclip.png");
-  }
+	private IDesignerEditor m_designerEditor;
+	private IDesignPage m_designPage;
+	private Composite m_composite;
+	private EditComposite m_editComposite;
+	private CLabel m_errorLabel;
+	private IDatabindingsProvider m_databindingsProvider;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Creation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static void addPage(List<IEditorPage> pages) {
+		for (IEditorPage page : pages) {
+			if (page instanceof BindingDesignPage) {
+				return;
+			}
+		}
+		pages.add(new BindingDesignPage());
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Life cycle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void initialize(IDesignerEditor designerEditor) {
+		m_designerEditor = designerEditor;
+		m_designPage = m_designerEditor.getMultiMode().getDesignPage();
+	}
+
+	@Override
+	public void dispose() {
+		// remove information about this editor
+		DatabindingRootProcessor.STATES.remove(m_designerEditor.getCompilationUnit());
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Activation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final DesignerEditorListener m_designPageListener = new DesignerEditorListener() {
+		@Override
+		public void reparsed() {
+			handleUpdatePage();
+		}
+	};
+
+	@Override
+	public void handleActiveState(boolean activate) {
+		if (activate) {
+			m_designPage.setSourceModelSynchronizationEnabled(true);
+			m_designerEditor.addDesignPageListener(m_designPageListener);
+			handleUpdatePage();
+		} else {
+			m_designerEditor.removeDesignPageListener(m_designPageListener);
+			m_designPage.setSourceModelSynchronizationEnabled(false);
+		}
+	}
+
+	private void handleUpdatePage() {
+		// check state
+		if (m_designPage.getDesignerState() != DesignerState.Successful) {
+			if (m_editComposite != null) {
+				m_editComposite.dispose();
+				m_editComposite = null;
+			}
+			if (m_errorLabel != null) {
+				m_errorLabel.dispose();
+			}
+			//
+			m_errorLabel = new CLabel(m_composite, SWT.NONE);
+			m_errorLabel.setText(Messages.BindingDesignPage_erorrMessage);
+			m_errorLabel.setImage(Activator.getImage("errors.gif"));
+			GridDataFactory.create(m_errorLabel).fillH().grabH();
+			//
+			m_databindingsProvider = null;
+			m_composite.layout();
+			return;
+		}
+		// prepare old selection
+		EditSelection selection = m_editComposite == null ? null : m_editComposite.getEditSelection();
+		// prepare state
+		ParseState state = DatabindingRootProcessor.STATES.get(m_designerEditor.getCompilationUnit());
+		Assert.isNotNull(state);
+		boolean isNew = m_databindingsProvider != state.databindingsProvider;
+		//
+		if (isNew) {
+			// clear old composite
+			if (m_editComposite != null) {
+				m_editComposite.dispose();
+			}
+			if (m_errorLabel != null) {
+				m_errorLabel.dispose();
+				m_errorLabel = null;
+			}
+			//
+			m_databindingsProvider = state.databindingsProvider;
+			m_databindingsProvider.setBindingPage(this);
+			IDialogSettings settings =
+					UiUtils.getSettings(
+							state.plugin.getDialogSettings(),
+							m_databindingsProvider.getClass().getName());
+			// create new composite
+			m_editComposite =
+					new EditComposite(m_composite, SWT.NONE, state.plugin, m_databindingsProvider, settings);
+			GridDataFactory.create(m_editComposite).fill().grab();
+			m_composite.layout();
+		}
+		// set input
+		m_editComposite.setInput(!isNew, selection);
+	}
+
+	private void handleReparse() {
+		m_designPage.refreshGEF();
+		handleUpdatePage();
+	}
+
+	public static void handleReparse(final BindingDesignPage bindingPage, JavaInfo javaInfoRoot) {
+		if (EnvironmentUtils.isTestingTime()) {
+			return;
+		}
+		javaInfoRoot.addBroadcastListener(new ObjectEventListener() {
+			@Override
+			public void refreshed2() throws Exception {
+				if (bindingPage == null) {
+					IDesignerEditor editor = (IDesignerEditor) DesignerPlugin.getActiveEditor();
+					editor.getMultiMode().getDesignPage().refreshGEF();
+				} else {
+					bindingPage.handleReparse();
+				}
+			}
+		});
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Control createControl(Composite parent) {
+		m_composite = new Composite(parent, SWT.NONE);
+		GridLayoutFactory.create(m_composite).noMargins().noSpacing();
+		return m_composite;
+	}
+
+	@Override
+	public Control getControl() {
+		return m_composite;
+	}
+
+	@Override
+	public void setFocus() {
+		m_composite.setFocus();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getName() {
+		return Messages.BindingDesignPage_name;
+	}
+
+	@Override
+	public Image getImage() {
+		return Activator.getImage("paperclip.png");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/BindingElementsComposite.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/BindingElementsComposite.java
index fcdbc5691..0be5412be 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/BindingElementsComposite.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/BindingElementsComposite.java
@@ -67,460 +67,460 @@
  * @coverage bindings.ui
  */
 public final class BindingElementsComposite extends Composite {
-  private final IDatabindingsProvider m_databindingsProvider;
-  private final TableViewer m_bindingViewer;
-  private final ToolItem m_editAction;
-  private final ToolItem m_deleteAction;
-  private final ToolItem m_deleteAllAction;
-  private final ToolItem m_upAction;
-  private final ToolItem m_downAction;
-  private final ToolItem m_gotoDefinitionAction;
-  private final MenuItem m_editActionMenu;
-  private final MenuItem m_deleteActionMenu;
-  private final MenuItem m_deleteAllActionMenu;
-  private final MenuItem m_upActionMenu;
-  private final MenuItem m_downActionMenu;
-  private final MenuItem m_gotoDefinitionActionMenu;
-  private final SelectionListener m_deleteBindingListener = new SelectionAdapter() {
-    @Override
-    public void widgetSelected(SelectionEvent e) {
-      deleteBindind();
-    }
-  };
-  private final SelectionListener m_deleteAllBindingsListener = new SelectionAdapter() {
-    @Override
-    public void widgetSelected(SelectionEvent e) {
-      deleteAllBindinds();
-    }
-  };
-  private final SelectionListener m_moveUpListener = new SelectionAdapter() {
-    @Override
-    public void widgetSelected(SelectionEvent e) {
-      moveBinding(true);
-    }
-  };
-  private final SelectionListener m_moveDownListener = new SelectionAdapter() {
-    @Override
-    public void widgetSelected(SelectionEvent e) {
-      moveBinding(false);
-    }
-  };
-  private final SelectionListener m_gotoDefinitionListener = new SelectionAdapter() {
-    @Override
-    public void widgetSelected(SelectionEvent e) {
-      gotoDefinition();
-    }
-  };
-  private boolean m_skipSelectionEvent;
-  private IBindingSelectionListener m_listener;
-  private SelectionListener m_editBindingListener;
+	private final IDatabindingsProvider m_databindingsProvider;
+	private final TableViewer m_bindingViewer;
+	private final ToolItem m_editAction;
+	private final ToolItem m_deleteAction;
+	private final ToolItem m_deleteAllAction;
+	private final ToolItem m_upAction;
+	private final ToolItem m_downAction;
+	private final ToolItem m_gotoDefinitionAction;
+	private final MenuItem m_editActionMenu;
+	private final MenuItem m_deleteActionMenu;
+	private final MenuItem m_deleteAllActionMenu;
+	private final MenuItem m_upActionMenu;
+	private final MenuItem m_downActionMenu;
+	private final MenuItem m_gotoDefinitionActionMenu;
+	private final SelectionListener m_deleteBindingListener = new SelectionAdapter() {
+		@Override
+		public void widgetSelected(SelectionEvent e) {
+			deleteBindind();
+		}
+	};
+	private final SelectionListener m_deleteAllBindingsListener = new SelectionAdapter() {
+		@Override
+		public void widgetSelected(SelectionEvent e) {
+			deleteAllBindinds();
+		}
+	};
+	private final SelectionListener m_moveUpListener = new SelectionAdapter() {
+		@Override
+		public void widgetSelected(SelectionEvent e) {
+			moveBinding(true);
+		}
+	};
+	private final SelectionListener m_moveDownListener = new SelectionAdapter() {
+		@Override
+		public void widgetSelected(SelectionEvent e) {
+			moveBinding(false);
+		}
+	};
+	private final SelectionListener m_gotoDefinitionListener = new SelectionAdapter() {
+		@Override
+		public void widgetSelected(SelectionEvent e) {
+			gotoDefinition();
+		}
+	};
+	private boolean m_skipSelectionEvent;
+	private IBindingSelectionListener m_listener;
+	private SelectionListener m_editBindingListener;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public BindingElementsComposite(Composite parent,
-      int style,
-      IDatabindingsProvider databindingsProvider,
-      IDialogSettings settings) {
-    super(parent, style);
-    m_databindingsProvider = databindingsProvider;
-    // configure container
-    GridLayoutFactory.create(this).columns(2);
-    // title
-    Label titleLabel = new Label(this, SWT.NONE);
-    titleLabel.setText(Messages.BindingElementsComposite_boundProperties);
-    GridDataFactory.create(titleLabel).fillH().grabH();
-    // buttons
-    ToolBar toolBar = new ToolBar(this, SWT.FLAT);
-    GridDataFactory.create(toolBar).alignHR().grabH();
-    // viewer for bindings
-    m_bindingViewer =
-        new TableViewer(this, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION);
-    GridDataFactory.create(m_bindingViewer.getControl()).fill().grab().spanH(2);
-    TableFactory.modify(m_bindingViewer).standard();
-    m_bindingViewer.setContentProvider(new ArrayContentProvider());
-    m_databindingsProvider.configureBindingViewer(settings, m_bindingViewer);
-    // viewer events
-    m_bindingViewer.addPostSelectionChangedListener(new ISelectionChangedListener() {
-      @Override
-      public void selectionChanged(SelectionChangedEvent event) {
-        IStructuredSelection selection = (IStructuredSelection) event.getSelection();
-        handleBindingSelection(selection);
-      }
-    });
-    m_bindingViewer.addDoubleClickListener(new IDoubleClickListener() {
-      @Override
-      public void doubleClick(DoubleClickEvent event) {
-        if (m_editBindingListener != null && !UiUtils.isEmpty(m_bindingViewer.getSelection())) {
-          m_editBindingListener.widgetSelected(null);
-        }
-      }
-    });
-    m_bindingViewer.getControl().addListener(SWT.KeyDown, new Listener() {
-      @Override
-      public void handleEvent(Event event) {
-        if (event.character == SWT.DEL && !UiUtils.isEmpty(m_bindingViewer.getSelection())) {
-          deleteBindind();
-        }
-      }
-    });
-    setupDragAndDrop();
-    // create context menu
-    Table bindingTable = m_bindingViewer.getTable();
-    Menu contextMenu = new Menu(bindingTable);
-    bindingTable.setMenu(contextMenu);
-    // edit
-    m_editActionMenu = new MenuItem(contextMenu, SWT.NONE);
-    m_editActionMenu.setText(Messages.BindingElementsComposite_editAction);
-    m_editActionMenu.setImage(Activator.getImage("link_edit_action.png"));
-    m_editActionMenu.setEnabled(false);
-    // separator
-    new MenuItem(contextMenu, SWT.SEPARATOR);
-    // delete
-    m_deleteActionMenu = new MenuItem(contextMenu, SWT.NONE);
-    m_deleteActionMenu.setText(Messages.BindingElementsComposite_deleteAction);
-    m_deleteActionMenu.setImage(Activator.getImage("link_delete_action.png"));
-    m_deleteActionMenu.setEnabled(false);
-    m_deleteActionMenu.addSelectionListener(m_deleteBindingListener);
-    // delete all
-    m_deleteAllActionMenu = new MenuItem(contextMenu, SWT.NONE);
-    m_deleteAllActionMenu.setText(Messages.BindingElementsComposite_deleteAllAction);
-    m_deleteAllActionMenu.setImage(Activator.getImage("link_delete_all_action.png"));
-    m_deleteAllActionMenu.setEnabled(false);
-    m_deleteAllActionMenu.addSelectionListener(m_deleteAllBindingsListener);
-    // separator
-    new MenuItem(contextMenu, SWT.SEPARATOR);
-    // move up
-    m_upActionMenu = new MenuItem(contextMenu, SWT.NONE);
-    m_upActionMenu.setText(Messages.BindingElementsComposite_moveUpAction);
-    m_upActionMenu.setImage(Activator.getImage("up.png"));
-    m_upActionMenu.setEnabled(false);
-    m_upActionMenu.addSelectionListener(m_moveUpListener);
-    // move down
-    m_downActionMenu = new MenuItem(contextMenu, SWT.NONE);
-    m_downActionMenu.setText(Messages.BindingElementsComposite_moveDownAction);
-    m_downActionMenu.setImage(Activator.getImage("down.png"));
-    m_downActionMenu.setEnabled(false);
-    m_downActionMenu.addSelectionListener(m_moveDownListener);
-    // separator
-    new MenuItem(contextMenu, SWT.SEPARATOR);
-    // goto definition
-    m_gotoDefinitionActionMenu = new MenuItem(contextMenu, SWT.NONE);
-    m_gotoDefinitionActionMenu.setText(Messages.BindingElementsComposite_gotoDefinitionAction);
-    m_gotoDefinitionActionMenu.setImage(Activator.getImage("goto_definition.gif"));
-    m_gotoDefinitionActionMenu.setEnabled(false);
-    m_gotoDefinitionActionMenu.addSelectionListener(m_gotoDefinitionListener);
-    // refresh
-    ToolItem refreshItem = new ToolItem(toolBar, SWT.NONE);
-    refreshItem.setToolTipText(Messages.BindingElementsComposite_reparseItem);
-    refreshItem.setImage(DesignerPlugin.getImage("editor_refresh.png"));
-    refreshItem.addSelectionListener(new SelectionAdapter() {
-      @Override
-      public void widgetSelected(SelectionEvent e) {
-        IEditorPart editor =
-            DesignerPlugin.getActiveWorkbenchWindow().getActivePage().getActiveEditor();
-        if (editor instanceof IDesignerEditor) {
-          IDesignerEditor designerEditor = (IDesignerEditor) editor;
-          IDesignPage designPage = designerEditor.getMultiMode().getDesignPage();
-          designPage.refreshGEF();
-        } else if (m_databindingsProvider != null) {
-          m_databindingsProvider.refreshDesigner();
-        }
-      }
-    });
-    //
-    new ToolItem(toolBar, SWT.SEPARATOR);
-    // edit
-    m_editAction = new ToolItem(toolBar, SWT.NONE);
-    m_editAction.setToolTipText(Messages.BindingElementsComposite_editItem);
-    m_editAction.setImage(Activator.getImage("link_edit_action.png"));
-    m_editAction.setEnabled(false);
-    //
-    new ToolItem(toolBar, SWT.SEPARATOR);
-    // delete
-    m_deleteAction = new ToolItem(toolBar, SWT.NONE);
-    m_deleteAction.setToolTipText(Messages.BindingElementsComposite_deleteItem);
-    m_deleteAction.setImage(Activator.getImage("link_delete_action.png"));
-    m_deleteAction.setEnabled(false);
-    m_deleteAction.addSelectionListener(m_deleteBindingListener);
-    // delete all
-    m_deleteAllAction = new ToolItem(toolBar, SWT.NONE);
-    m_deleteAllAction.setToolTipText(Messages.BindingElementsComposite_deleteAllItem);
-    m_deleteAllAction.setImage(Activator.getImage("link_delete_all_action.png"));
-    m_deleteAllAction.setEnabled(false);
-    m_deleteAllAction.addSelectionListener(m_deleteAllBindingsListener);
-    // separator
-    new ToolItem(toolBar, SWT.SEPARATOR);
-    // move up
-    m_upAction = new ToolItem(toolBar, SWT.NONE);
-    m_upAction.setToolTipText(Messages.BindingElementsComposite_moveUpItem);
-    m_upAction.setImage(Activator.getImage("up.png"));
-    m_upAction.setEnabled(false);
-    m_upAction.addSelectionListener(m_moveUpListener);
-    // move down
-    m_downAction = new ToolItem(toolBar, SWT.NONE);
-    m_downAction.setToolTipText(Messages.BindingElementsComposite_moveDownItem);
-    m_downAction.setImage(Activator.getImage("down.png"));
-    m_downAction.setEnabled(false);
-    m_downAction.addSelectionListener(m_moveDownListener);
-    // separator
-    new ToolItem(toolBar, SWT.SEPARATOR);
-    // goto definition
-    m_gotoDefinitionAction = new ToolItem(toolBar, SWT.NONE);
-    m_gotoDefinitionAction.setToolTipText(Messages.BindingElementsComposite_gotoDefinitionItem);
-    m_gotoDefinitionAction.setImage(Activator.getImage("goto_definition.gif"));
-    m_gotoDefinitionAction.setEnabled(false);
-    m_gotoDefinitionAction.addSelectionListener(m_gotoDefinitionListener);
-    // external actions
-    m_databindingsProvider.fillExternalBindingActions(toolBar, contextMenu);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public BindingElementsComposite(Composite parent,
+			int style,
+			IDatabindingsProvider databindingsProvider,
+			IDialogSettings settings) {
+		super(parent, style);
+		m_databindingsProvider = databindingsProvider;
+		// configure container
+		GridLayoutFactory.create(this).columns(2);
+		// title
+		Label titleLabel = new Label(this, SWT.NONE);
+		titleLabel.setText(Messages.BindingElementsComposite_boundProperties);
+		GridDataFactory.create(titleLabel).fillH().grabH();
+		// buttons
+		ToolBar toolBar = new ToolBar(this, SWT.FLAT);
+		GridDataFactory.create(toolBar).alignHR().grabH();
+		// viewer for bindings
+		m_bindingViewer =
+				new TableViewer(this, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION);
+		GridDataFactory.create(m_bindingViewer.getControl()).fill().grab().spanH(2);
+		TableFactory.modify(m_bindingViewer).standard();
+		m_bindingViewer.setContentProvider(new ArrayContentProvider());
+		m_databindingsProvider.configureBindingViewer(settings, m_bindingViewer);
+		// viewer events
+		m_bindingViewer.addPostSelectionChangedListener(new ISelectionChangedListener() {
+			@Override
+			public void selectionChanged(SelectionChangedEvent event) {
+				IStructuredSelection selection = (IStructuredSelection) event.getSelection();
+				handleBindingSelection(selection);
+			}
+		});
+		m_bindingViewer.addDoubleClickListener(new IDoubleClickListener() {
+			@Override
+			public void doubleClick(DoubleClickEvent event) {
+				if (m_editBindingListener != null && !UiUtils.isEmpty(m_bindingViewer.getSelection())) {
+					m_editBindingListener.widgetSelected(null);
+				}
+			}
+		});
+		m_bindingViewer.getControl().addListener(SWT.KeyDown, new Listener() {
+			@Override
+			public void handleEvent(Event event) {
+				if (event.character == SWT.DEL && !UiUtils.isEmpty(m_bindingViewer.getSelection())) {
+					deleteBindind();
+				}
+			}
+		});
+		setupDragAndDrop();
+		// create context menu
+		Table bindingTable = m_bindingViewer.getTable();
+		Menu contextMenu = new Menu(bindingTable);
+		bindingTable.setMenu(contextMenu);
+		// edit
+		m_editActionMenu = new MenuItem(contextMenu, SWT.NONE);
+		m_editActionMenu.setText(Messages.BindingElementsComposite_editAction);
+		m_editActionMenu.setImage(Activator.getImage("link_edit_action.png"));
+		m_editActionMenu.setEnabled(false);
+		// separator
+		new MenuItem(contextMenu, SWT.SEPARATOR);
+		// delete
+		m_deleteActionMenu = new MenuItem(contextMenu, SWT.NONE);
+		m_deleteActionMenu.setText(Messages.BindingElementsComposite_deleteAction);
+		m_deleteActionMenu.setImage(Activator.getImage("link_delete_action.png"));
+		m_deleteActionMenu.setEnabled(false);
+		m_deleteActionMenu.addSelectionListener(m_deleteBindingListener);
+		// delete all
+		m_deleteAllActionMenu = new MenuItem(contextMenu, SWT.NONE);
+		m_deleteAllActionMenu.setText(Messages.BindingElementsComposite_deleteAllAction);
+		m_deleteAllActionMenu.setImage(Activator.getImage("link_delete_all_action.png"));
+		m_deleteAllActionMenu.setEnabled(false);
+		m_deleteAllActionMenu.addSelectionListener(m_deleteAllBindingsListener);
+		// separator
+		new MenuItem(contextMenu, SWT.SEPARATOR);
+		// move up
+		m_upActionMenu = new MenuItem(contextMenu, SWT.NONE);
+		m_upActionMenu.setText(Messages.BindingElementsComposite_moveUpAction);
+		m_upActionMenu.setImage(Activator.getImage("up.png"));
+		m_upActionMenu.setEnabled(false);
+		m_upActionMenu.addSelectionListener(m_moveUpListener);
+		// move down
+		m_downActionMenu = new MenuItem(contextMenu, SWT.NONE);
+		m_downActionMenu.setText(Messages.BindingElementsComposite_moveDownAction);
+		m_downActionMenu.setImage(Activator.getImage("down.png"));
+		m_downActionMenu.setEnabled(false);
+		m_downActionMenu.addSelectionListener(m_moveDownListener);
+		// separator
+		new MenuItem(contextMenu, SWT.SEPARATOR);
+		// goto definition
+		m_gotoDefinitionActionMenu = new MenuItem(contextMenu, SWT.NONE);
+		m_gotoDefinitionActionMenu.setText(Messages.BindingElementsComposite_gotoDefinitionAction);
+		m_gotoDefinitionActionMenu.setImage(Activator.getImage("goto_definition.gif"));
+		m_gotoDefinitionActionMenu.setEnabled(false);
+		m_gotoDefinitionActionMenu.addSelectionListener(m_gotoDefinitionListener);
+		// refresh
+		ToolItem refreshItem = new ToolItem(toolBar, SWT.NONE);
+		refreshItem.setToolTipText(Messages.BindingElementsComposite_reparseItem);
+		refreshItem.setImage(DesignerPlugin.getImage("editor_refresh.png"));
+		refreshItem.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				IEditorPart editor =
+						DesignerPlugin.getActiveWorkbenchWindow().getActivePage().getActiveEditor();
+				if (editor instanceof IDesignerEditor) {
+					IDesignerEditor designerEditor = (IDesignerEditor) editor;
+					IDesignPage designPage = designerEditor.getMultiMode().getDesignPage();
+					designPage.refreshGEF();
+				} else if (m_databindingsProvider != null) {
+					m_databindingsProvider.refreshDesigner();
+				}
+			}
+		});
+		//
+		new ToolItem(toolBar, SWT.SEPARATOR);
+		// edit
+		m_editAction = new ToolItem(toolBar, SWT.NONE);
+		m_editAction.setToolTipText(Messages.BindingElementsComposite_editItem);
+		m_editAction.setImage(Activator.getImage("link_edit_action.png"));
+		m_editAction.setEnabled(false);
+		//
+		new ToolItem(toolBar, SWT.SEPARATOR);
+		// delete
+		m_deleteAction = new ToolItem(toolBar, SWT.NONE);
+		m_deleteAction.setToolTipText(Messages.BindingElementsComposite_deleteItem);
+		m_deleteAction.setImage(Activator.getImage("link_delete_action.png"));
+		m_deleteAction.setEnabled(false);
+		m_deleteAction.addSelectionListener(m_deleteBindingListener);
+		// delete all
+		m_deleteAllAction = new ToolItem(toolBar, SWT.NONE);
+		m_deleteAllAction.setToolTipText(Messages.BindingElementsComposite_deleteAllItem);
+		m_deleteAllAction.setImage(Activator.getImage("link_delete_all_action.png"));
+		m_deleteAllAction.setEnabled(false);
+		m_deleteAllAction.addSelectionListener(m_deleteAllBindingsListener);
+		// separator
+		new ToolItem(toolBar, SWT.SEPARATOR);
+		// move up
+		m_upAction = new ToolItem(toolBar, SWT.NONE);
+		m_upAction.setToolTipText(Messages.BindingElementsComposite_moveUpItem);
+		m_upAction.setImage(Activator.getImage("up.png"));
+		m_upAction.setEnabled(false);
+		m_upAction.addSelectionListener(m_moveUpListener);
+		// move down
+		m_downAction = new ToolItem(toolBar, SWT.NONE);
+		m_downAction.setToolTipText(Messages.BindingElementsComposite_moveDownItem);
+		m_downAction.setImage(Activator.getImage("down.png"));
+		m_downAction.setEnabled(false);
+		m_downAction.addSelectionListener(m_moveDownListener);
+		// separator
+		new ToolItem(toolBar, SWT.SEPARATOR);
+		// goto definition
+		m_gotoDefinitionAction = new ToolItem(toolBar, SWT.NONE);
+		m_gotoDefinitionAction.setToolTipText(Messages.BindingElementsComposite_gotoDefinitionItem);
+		m_gotoDefinitionAction.setImage(Activator.getImage("goto_definition.gif"));
+		m_gotoDefinitionAction.setEnabled(false);
+		m_gotoDefinitionAction.addSelectionListener(m_gotoDefinitionListener);
+		// external actions
+		m_databindingsProvider.fillExternalBindingActions(toolBar, contextMenu);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Drag and drop
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void setupDragAndDrop() {
-    Transfer[] transfers = new Transfer[]{TreeTransfer.INSTANCE};
-    final IBindingInfo[] binding = new IBindingInfo[1];
-    m_bindingViewer.addDragSupport(DND.DROP_MOVE, transfers, new DragSourceAdapter() {
-      @Override
-      public void dragStart(DragSourceEvent event) {
-        List<IBindingInfo> bindings = m_databindingsProvider.getBindings();
-        event.doit = bindings.size() > 1;
-        binding[0] = getSelectionBinding();
-      }
-    });
-    ViewerDropAdapter adapter = new ViewerDropAdapter(m_bindingViewer) {
-      @Override
-      protected int determineLocation(DropTargetEvent event) {
-        int location = super.determineLocation(event);
-        if (location == LOCATION_BEFORE || location == LOCATION_AFTER) {
-          location = LOCATION_ON;
-        }
-        return location;
-      }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Drag and drop
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void setupDragAndDrop() {
+		Transfer[] transfers = new Transfer[]{TreeTransfer.INSTANCE};
+		final IBindingInfo[] binding = new IBindingInfo[1];
+		m_bindingViewer.addDragSupport(DND.DROP_MOVE, transfers, new DragSourceAdapter() {
+			@Override
+			public void dragStart(DragSourceEvent event) {
+				List<IBindingInfo> bindings = m_databindingsProvider.getBindings();
+				event.doit = bindings.size() > 1;
+				binding[0] = getSelectionBinding();
+			}
+		});
+		ViewerDropAdapter adapter = new ViewerDropAdapter(m_bindingViewer) {
+			@Override
+			protected int determineLocation(DropTargetEvent event) {
+				int location = super.determineLocation(event);
+				if (location == LOCATION_BEFORE || location == LOCATION_AFTER) {
+					location = LOCATION_ON;
+				}
+				return location;
+			}
 
-      @Override
-      public boolean validateDrop(Object target, int operation, TransferData transferType) {
-        if (binding[0] != target && target != null) {
-          List<IBindingInfo> bindings = m_databindingsProvider.getBindings();
-          return m_databindingsProvider.canMoveBinding(binding[0], bindings.indexOf(target), false);
-        }
-        return false;
-      }
+			@Override
+			public boolean validateDrop(Object target, int operation, TransferData transferType) {
+				if (binding[0] != target && target != null) {
+					List<IBindingInfo> bindings = m_databindingsProvider.getBindings();
+					return m_databindingsProvider.canMoveBinding(binding[0], bindings.indexOf(target), false);
+				}
+				return false;
+			}
 
-      @Override
-      public boolean performDrop(Object data) {
-        List<IBindingInfo> bindings = m_databindingsProvider.getBindings();
-        int sourceIndex = bindings.indexOf(binding[0]);
-        int targetIndex = bindings.indexOf(getCurrentTarget());
-        //
-        m_databindingsProvider.moveBinding(binding[0], sourceIndex, targetIndex, false);
-        //
-        m_bindingViewer.refresh();
-        handleBindingSelection((IStructuredSelection) m_bindingViewer.getSelection());
-        //
-        return true;
-      }
-    };
-    adapter.setFeedbackEnabled(true);
-    m_bindingViewer.addDropSupport(DND.DROP_MOVE | DND.DROP_DEFAULT, transfers, adapter);
-  }
+			@Override
+			public boolean performDrop(Object data) {
+				List<IBindingInfo> bindings = m_databindingsProvider.getBindings();
+				int sourceIndex = bindings.indexOf(binding[0]);
+				int targetIndex = bindings.indexOf(getCurrentTarget());
+				//
+				m_databindingsProvider.moveBinding(binding[0], sourceIndex, targetIndex, false);
+				//
+				m_bindingViewer.refresh();
+				handleBindingSelection((IStructuredSelection) m_bindingViewer.getSelection());
+				//
+				return true;
+			}
+		};
+		adapter.setFeedbackEnabled(true);
+		m_bindingViewer.addDropSupport(DND.DROP_MOVE | DND.DROP_DEFAULT, transfers, adapter);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets new content to this container if <code>refresh</code> is <code>false</code> or update
-   * existing content.
-   */
-  public void setInput(boolean refresh) {
-    List<IBindingInfo> bindings = m_databindingsProvider.getBindings();
-    if (refresh) {
-      m_bindingViewer.refresh();
-    } else {
-      m_bindingViewer.setInput(bindings);
-    }
-    setDeleteAllActionEnabled(!bindings.isEmpty());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets new content to this container if <code>refresh</code> is <code>false</code> or update
+	 * existing content.
+	 */
+	public void setInput(boolean refresh) {
+		List<IBindingInfo> bindings = m_databindingsProvider.getBindings();
+		if (refresh) {
+			m_bindingViewer.refresh();
+		} else {
+			m_bindingViewer.setInput(bindings);
+		}
+		setDeleteAllActionEnabled(!bindings.isEmpty());
+	}
 
-  public TableViewer getViewer() {
-    return m_bindingViewer;
-  }
+	public TableViewer getViewer() {
+		return m_bindingViewer;
+	}
 
-  public void setEditBindingListener(SelectionListener listener) {
-    m_editBindingListener = listener;
-    m_editAction.addSelectionListener(listener);
-    m_editActionMenu.addSelectionListener(listener);
-  }
+	public void setEditBindingListener(SelectionListener listener) {
+		m_editBindingListener = listener;
+		m_editAction.addSelectionListener(listener);
+		m_editActionMenu.addSelectionListener(listener);
+	}
 
-  public void setDeleteAllActionEnabled(boolean enabled) {
-    m_deleteAllAction.setEnabled(enabled);
-    m_deleteAllActionMenu.setEnabled(enabled);
-  }
+	public void setDeleteAllActionEnabled(boolean enabled) {
+		m_deleteAllAction.setEnabled(enabled);
+		m_deleteAllActionMenu.setEnabled(enabled);
+	}
 
-  public IBindingInfo getSelectionBinding() {
-    IStructuredSelection selection = (IStructuredSelection) m_bindingViewer.getSelection();
-    return UiUtils.isEmpty(selection) ? null : (IBindingInfo) selection.getFirstElement();
-  }
+	public IBindingInfo getSelectionBinding() {
+		IStructuredSelection selection = (IStructuredSelection) m_bindingViewer.getSelection();
+		return UiUtils.isEmpty(selection) ? null : (IBindingInfo) selection.getFirstElement();
+	}
 
-  public void setBindingSelectionListener(IBindingSelectionListener listener) {
-    m_listener = listener;
-  }
+	public void setBindingSelectionListener(IBindingSelectionListener listener) {
+		m_listener = listener;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Events
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected void handleBindingSelection(IStructuredSelection selection) {
-    // handle recursion
-    if (m_skipSelectionEvent) {
-      return;
-    }
-    m_skipSelectionEvent = true;
-    //
-    try {
-      // configure actions
-      boolean enabled = !UiUtils.isEmpty(selection);
-      m_editAction.setEnabled(enabled);
-      m_editActionMenu.setEnabled(enabled);
-      m_deleteAction.setEnabled(enabled);
-      m_deleteActionMenu.setEnabled(enabled);
-      //
-      IBindingInfo binding = enabled ? (IBindingInfo) selection.getFirstElement() : null;
-      //
-      boolean moveUpEnabled = false;
-      boolean moveDownEnabled = false;
-      if (enabled) {
-        List<IBindingInfo> bindings = m_databindingsProvider.getBindings();
-        int size = bindings.size();
-        if (size > 1) {
-          int index = bindings.indexOf(binding);
-          if (index > 0) {
-            moveUpEnabled = m_databindingsProvider.canMoveBinding(binding, index - 1, true);
-          }
-          if (index < size - 1) {
-            moveDownEnabled = m_databindingsProvider.canMoveBinding(binding, index + 1, true);
-          }
-        }
-      }
-      //
-      m_upAction.setEnabled(moveUpEnabled);
-      m_upActionMenu.setEnabled(moveUpEnabled);
-      //
-      m_downAction.setEnabled(moveDownEnabled);
-      m_downActionMenu.setEnabled(moveDownEnabled);
-      //
-      m_gotoDefinitionAction.setEnabled(enabled);
-      m_gotoDefinitionActionMenu.setEnabled(enabled);
-      // handle selection
-      if (enabled && m_listener != null) {
-        m_listener.selectionChanged(binding);
-      }
-      // return focus to bounded table
-      m_bindingViewer.getTable().setFocus();
-    } finally {
-      m_skipSelectionEvent = false;
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Events
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected void handleBindingSelection(IStructuredSelection selection) {
+		// handle recursion
+		if (m_skipSelectionEvent) {
+			return;
+		}
+		m_skipSelectionEvent = true;
+		//
+		try {
+			// configure actions
+			boolean enabled = !UiUtils.isEmpty(selection);
+			m_editAction.setEnabled(enabled);
+			m_editActionMenu.setEnabled(enabled);
+			m_deleteAction.setEnabled(enabled);
+			m_deleteActionMenu.setEnabled(enabled);
+			//
+			IBindingInfo binding = enabled ? (IBindingInfo) selection.getFirstElement() : null;
+			//
+			boolean moveUpEnabled = false;
+			boolean moveDownEnabled = false;
+			if (enabled) {
+				List<IBindingInfo> bindings = m_databindingsProvider.getBindings();
+				int size = bindings.size();
+				if (size > 1) {
+					int index = bindings.indexOf(binding);
+					if (index > 0) {
+						moveUpEnabled = m_databindingsProvider.canMoveBinding(binding, index - 1, true);
+					}
+					if (index < size - 1) {
+						moveDownEnabled = m_databindingsProvider.canMoveBinding(binding, index + 1, true);
+					}
+				}
+			}
+			//
+			m_upAction.setEnabled(moveUpEnabled);
+			m_upActionMenu.setEnabled(moveUpEnabled);
+			//
+			m_downAction.setEnabled(moveDownEnabled);
+			m_downActionMenu.setEnabled(moveDownEnabled);
+			//
+			m_gotoDefinitionAction.setEnabled(enabled);
+			m_gotoDefinitionActionMenu.setEnabled(enabled);
+			// handle selection
+			if (enabled && m_listener != null) {
+				m_listener.selectionChanged(binding);
+			}
+			// return focus to bounded table
+			m_bindingViewer.getTable().setFocus();
+		} finally {
+			m_skipSelectionEvent = false;
+		}
+	}
 
-  protected void deleteBindind() {
-    // prepare selection
-    IBindingInfo binding = getSelectionBinding();
-    // open confirm
-    boolean canDelete = canDeleteBinding(m_databindingsProvider, binding, getShell());
-    // handle delete
-    if (canDelete) {
-      // delete
-      List<IBindingInfo> bindings = m_databindingsProvider.getBindings();
-      int index = bindings.indexOf(binding);
-      m_databindingsProvider.deleteBinding(binding);
-      if (!isDisposed()) {
-        m_bindingViewer.refresh();
-        // invoke events
-        if (m_listener != null) {
-          m_listener.selectionChanged(null);
-        }
-        // update selection
-        if (index == bindings.size()) {
-          index--;
-        }
-        if (index != -1) {
-          m_bindingViewer.setSelection(new StructuredSelection(bindings.get(index)), true);
-        }
-      }
-    }
-  }
+	protected void deleteBindind() {
+		// prepare selection
+		IBindingInfo binding = getSelectionBinding();
+		// open confirm
+		boolean canDelete = canDeleteBinding(m_databindingsProvider, binding, getShell());
+		// handle delete
+		if (canDelete) {
+			// delete
+			List<IBindingInfo> bindings = m_databindingsProvider.getBindings();
+			int index = bindings.indexOf(binding);
+			m_databindingsProvider.deleteBinding(binding);
+			if (!isDisposed()) {
+				m_bindingViewer.refresh();
+				// invoke events
+				if (m_listener != null) {
+					m_listener.selectionChanged(null);
+				}
+				// update selection
+				if (index == bindings.size()) {
+					index--;
+				}
+				if (index != -1) {
+					m_bindingViewer.setSelection(new StructuredSelection(bindings.get(index)), true);
+				}
+			}
+		}
+	}
 
-  public static boolean canDeleteBinding(final IDatabindingsProvider databindingsProvider,
-      final IBindingInfo binding,
-      Shell shell) {
-    // prepare message
-    String message = ExecutionUtils.runObjectLog(new RunnableObjectEx<String>() {
-      @Override
-      public String runObject() throws Exception {
-        String message = databindingsProvider.getBindingPresentationText(binding);
-        if (message == null) {
-          message =
-              "Binding["
-                  + UiUtils.getPresentationText(binding.getTarget(), binding.getTargetProperty())
-                  + " : "
-                  + UiUtils.getPresentationText(binding.getModel(), binding.getModelProperty())
-                  + "]";
-        }
-        return message;
-      }
-    },
-        "<exception, see log>");
-    // open confirm
-    boolean canDelete =
-        MessageDialog.openConfirm(
-            shell,
-            Messages.BindingElementsComposite_deleteTitle,
-            MessageFormat.format(Messages.BindingElementsComposite_deleteMessage, message));
-    return canDelete;
-  }
+	public static boolean canDeleteBinding(final IDatabindingsProvider databindingsProvider,
+			final IBindingInfo binding,
+			Shell shell) {
+		// prepare message
+		String message = ExecutionUtils.runObjectLog(new RunnableObjectEx<String>() {
+			@Override
+			public String runObject() throws Exception {
+				String message = databindingsProvider.getBindingPresentationText(binding);
+				if (message == null) {
+					message =
+							"Binding["
+									+ UiUtils.getPresentationText(binding.getTarget(), binding.getTargetProperty())
+									+ " : "
+									+ UiUtils.getPresentationText(binding.getModel(), binding.getModelProperty())
+									+ "]";
+				}
+				return message;
+			}
+		},
+				"<exception, see log>");
+		// open confirm
+		boolean canDelete =
+				MessageDialog.openConfirm(
+						shell,
+						Messages.BindingElementsComposite_deleteTitle,
+						MessageFormat.format(Messages.BindingElementsComposite_deleteMessage, message));
+		return canDelete;
+	}
 
-  protected void deleteAllBindinds() {
-    // open confirm
-    boolean canDelete =
-        MessageDialog.openConfirm(
-            getShell(),
-            Messages.BindingElementsComposite_deleteAllTitle,
-            Messages.BindingElementsComposite_deleteAllMessage);
-    // handle delete
-    if (canDelete) {
-      // delete
-      m_databindingsProvider.deleteAllBindings();
-      m_bindingViewer.refresh();
-      // invoke events
-      if (m_listener != null) {
-        m_listener.selectionChanged(null);
-      }
-      // update buttons
-      setDeleteAllActionEnabled(false);
-    }
-  }
+	protected void deleteAllBindinds() {
+		// open confirm
+		boolean canDelete =
+				MessageDialog.openConfirm(
+						getShell(),
+						Messages.BindingElementsComposite_deleteAllTitle,
+						Messages.BindingElementsComposite_deleteAllMessage);
+		// handle delete
+		if (canDelete) {
+			// delete
+			m_databindingsProvider.deleteAllBindings();
+			m_bindingViewer.refresh();
+			// invoke events
+			if (m_listener != null) {
+				m_listener.selectionChanged(null);
+			}
+			// update buttons
+			setDeleteAllActionEnabled(false);
+		}
+	}
 
-  private void moveBinding(boolean up) {
-    List<IBindingInfo> bindings = m_databindingsProvider.getBindings();
-    IBindingInfo binding = getSelectionBinding();
-    int sourceIndex = bindings.indexOf(binding);
-    int targetIndex = sourceIndex + (up ? -1 : 1);
-    //
-    m_databindingsProvider.moveBinding(binding, sourceIndex, targetIndex, true);
-    //
-    m_bindingViewer.refresh();
-    handleBindingSelection((IStructuredSelection) m_bindingViewer.getSelection());
-  }
+	private void moveBinding(boolean up) {
+		List<IBindingInfo> bindings = m_databindingsProvider.getBindings();
+		IBindingInfo binding = getSelectionBinding();
+		int sourceIndex = bindings.indexOf(binding);
+		int targetIndex = sourceIndex + (up ? -1 : 1);
+		//
+		m_databindingsProvider.moveBinding(binding, sourceIndex, targetIndex, true);
+		//
+		m_bindingViewer.refresh();
+		handleBindingSelection((IStructuredSelection) m_bindingViewer.getSelection());
+	}
 
-  private void gotoDefinition() {
-    m_databindingsProvider.gotoDefinition(getSelectionBinding());
-  }
+	private void gotoDefinition() {
+		m_databindingsProvider.gotoDefinition(getSelectionBinding());
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/EditComposite.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/EditComposite.java
index ddc91a691..74310d30c 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/EditComposite.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/EditComposite.java
@@ -40,369 +40,369 @@
  * @coverage bindings.ui
  */
 public class EditComposite extends Composite {
-  private static final String MAIN_SASH_KEY = "Main_Sash";
-  private static final String OBSERVES_SASH_KEY = "Observes_Sash";
-  private final AbstractUIPlugin m_plugin;
-  private final IDatabindingsProvider m_databindingsProvider;
-  private final IDialogSettings m_settings;
-  private final SashForm m_mainSashForm;
-  private final SashForm m_observeSashForm;
-  private final BindingElementsComposite m_bindingComposite;
-  private final ObserveElementsComposite m_targetObserveComposite;
-  private final ObserveElementsComposite m_modelObserveComposite;
-  private final EditSelection m_selection = new EditSelection();
+	private static final String MAIN_SASH_KEY = "Main_Sash";
+	private static final String OBSERVES_SASH_KEY = "Observes_Sash";
+	private final AbstractUIPlugin m_plugin;
+	private final IDatabindingsProvider m_databindingsProvider;
+	private final IDialogSettings m_settings;
+	private final SashForm m_mainSashForm;
+	private final SashForm m_observeSashForm;
+	private final BindingElementsComposite m_bindingComposite;
+	private final ObserveElementsComposite m_targetObserveComposite;
+	private final ObserveElementsComposite m_modelObserveComposite;
+	private final EditSelection m_selection = new EditSelection();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public EditComposite(Composite parent,
-      int style,
-      AbstractUIPlugin plugin,
-      IDatabindingsProvider databindingsProvider,
-      IDialogSettings settings) {
-    super(parent, style);
-    m_plugin = plugin;
-    m_databindingsProvider = databindingsProvider;
-    m_settings = settings;
-    //
-    setLayout(new FillLayout());
-    //
-    m_mainSashForm = new SashForm(this, SWT.VERTICAL);
-    // bindings
-    m_bindingComposite =
-        new BindingElementsComposite(m_mainSashForm, SWT.NONE, m_databindingsProvider, m_settings);
-    //
-    m_observeSashForm = new SashForm(m_mainSashForm, SWT.HORIZONTAL);
-    // target observes
-    m_targetObserveComposite =
-        new ObserveElementsComposite(m_observeSashForm,
-            SWT.NONE,
-            "Target",
-            m_databindingsProvider,
-            true);
-    // model observes
-    m_modelObserveComposite =
-        new ObserveElementsComposite(m_observeSashForm,
-            SWT.NONE,
-            "Model",
-            m_databindingsProvider,
-            true);
-    // configure target-model-bindings links
-    new SelectionSynchronizer();
-    m_bindingComposite.setEditBindingListener(new SelectionAdapter() {
-      @Override
-      public void widgetSelected(SelectionEvent e) {
-        editBinding();
-      }
-    });
-    m_targetObserveComposite.getBindAction().addSelectionListener(m_createBindingListener);
-    m_modelObserveComposite.getBindAction().addSelectionListener(m_createBindingListener);
-    new ExpandedListener(m_targetObserveComposite) {
-      @Override
-      protected void handle() {
-        m_selection.setTarget(m_databindingsProvider, m_targetObserveComposite);
-      }
-    };
-    new ExpandedListener(m_modelObserveComposite) {
-      @Override
-      protected void handle() {
-        m_selection.setModel(m_databindingsProvider, m_modelObserveComposite);
-      }
-    };
-    // configure sashe's
-    UiUtils.loadSashWeights(m_mainSashForm, m_settings, MAIN_SASH_KEY, new int[]{1, 3});
-    UiUtils.loadSashWeights(m_observeSashForm, m_settings, OBSERVES_SASH_KEY, new int[]{1, 1});
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public EditComposite(Composite parent,
+			int style,
+			AbstractUIPlugin plugin,
+			IDatabindingsProvider databindingsProvider,
+			IDialogSettings settings) {
+		super(parent, style);
+		m_plugin = plugin;
+		m_databindingsProvider = databindingsProvider;
+		m_settings = settings;
+		//
+		setLayout(new FillLayout());
+		//
+		m_mainSashForm = new SashForm(this, SWT.VERTICAL);
+		// bindings
+		m_bindingComposite =
+				new BindingElementsComposite(m_mainSashForm, SWT.NONE, m_databindingsProvider, m_settings);
+		//
+		m_observeSashForm = new SashForm(m_mainSashForm, SWT.HORIZONTAL);
+		// target observes
+		m_targetObserveComposite =
+				new ObserveElementsComposite(m_observeSashForm,
+						SWT.NONE,
+						"Target",
+						m_databindingsProvider,
+						true);
+		// model observes
+		m_modelObserveComposite =
+				new ObserveElementsComposite(m_observeSashForm,
+						SWT.NONE,
+						"Model",
+						m_databindingsProvider,
+						true);
+		// configure target-model-bindings links
+		new SelectionSynchronizer();
+		m_bindingComposite.setEditBindingListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				editBinding();
+			}
+		});
+		m_targetObserveComposite.getBindAction().addSelectionListener(m_createBindingListener);
+		m_modelObserveComposite.getBindAction().addSelectionListener(m_createBindingListener);
+		new ExpandedListener(m_targetObserveComposite) {
+			@Override
+			protected void handle() {
+				m_selection.setTarget(m_databindingsProvider, m_targetObserveComposite);
+			}
+		};
+		new ExpandedListener(m_modelObserveComposite) {
+			@Override
+			protected void handle() {
+				m_selection.setModel(m_databindingsProvider, m_modelObserveComposite);
+			}
+		};
+		// configure sashe's
+		UiUtils.loadSashWeights(m_mainSashForm, m_settings, MAIN_SASH_KEY, new int[]{1, 3});
+		UiUtils.loadSashWeights(m_observeSashForm, m_settings, OBSERVES_SASH_KEY, new int[]{1, 1});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets new content to this container if <code>refresh</code> is <code>false</code> or update
-   * existing content.
-   */
-  public void setInput(boolean refresh, EditSelection selection) {
-    m_bindingComposite.setInput(refresh);
-    if (refresh) {
-      m_targetObserveComposite.refresh();
-      m_modelObserveComposite.refresh();
-    } else if (selection == null
-        || !selection.setSelection(
-            m_databindingsProvider,
-            m_bindingComposite,
-            m_targetObserveComposite,
-            m_modelObserveComposite)) {
-      m_targetObserveComposite.showPage(m_databindingsProvider.getTargetStartType());
-      m_modelObserveComposite.showPage(m_databindingsProvider.getModelStartType());
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets new content to this container if <code>refresh</code> is <code>false</code> or update
+	 * existing content.
+	 */
+	public void setInput(boolean refresh, EditSelection selection) {
+		m_bindingComposite.setInput(refresh);
+		if (refresh) {
+			m_targetObserveComposite.refresh();
+			m_modelObserveComposite.refresh();
+		} else if (selection == null
+				|| !selection.setSelection(
+						m_databindingsProvider,
+						m_bindingComposite,
+						m_targetObserveComposite,
+						m_modelObserveComposite)) {
+			m_targetObserveComposite.showPage(m_databindingsProvider.getTargetStartType());
+			m_modelObserveComposite.showPage(m_databindingsProvider.getModelStartType());
+		}
+	}
 
-  public EditSelection getEditSelection() {
-    return m_selection;
-  }
+	public EditSelection getEditSelection() {
+		return m_selection;
+	}
 
-  public void performFinish() {
-    // save sash weights
-    UiUtils.saveSashWeights(m_mainSashForm, m_settings, MAIN_SASH_KEY);
-    UiUtils.saveSashWeights(m_observeSashForm, m_settings, OBSERVES_SASH_KEY);
-  }
+	public void performFinish() {
+		// save sash weights
+		UiUtils.saveSashWeights(m_mainSashForm, m_settings, MAIN_SASH_KEY);
+		UiUtils.saveSashWeights(m_observeSashForm, m_settings, OBSERVES_SASH_KEY);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final SelectionListener m_createBindingListener = new SelectionAdapter() {
-    @Override
-    public void widgetSelected(SelectionEvent e) {
-      createBinding();
-    }
-  };
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final SelectionListener m_createBindingListener = new SelectionAdapter() {
+		@Override
+		public void widgetSelected(SelectionEvent e) {
+			createBinding();
+		}
+	};
 
-  protected final void createBinding() {
-    try {
-      // check auto binding
-      boolean isCtrlPressed = DesignerPlugin.isCtrlPressed();
-      if (isCtrlPressed) {
-        getShell().getDisplay().beep();
-      }
-      // prepare target
-      IObserveInfo target = m_targetObserveComposite.getMasterObserve();
-      IObserveInfo targetProperty = m_targetObserveComposite.getPropertyObserve();
-      // prepare model
-      IObserveInfo model = m_modelObserveComposite.getMasterObserve();
-      IObserveInfo modelProperty = m_modelObserveComposite.getPropertyObserve();
-      // create binding
-      IBindingInfo binding =
-          m_databindingsProvider.createBinding(target, targetProperty, model, modelProperty);
-      // show edit dialog
-      BindDialog dialog =
-          new BindDialog(getShell(), m_plugin, m_databindingsProvider, binding, true, isCtrlPressed);
-      // handle done
-      if (dialog.open() == Window.OK) {
-        m_databindingsProvider.addBinding(binding);
-        if (!isDisposed()) {
-          m_targetObserveComposite.refresh();
-          m_modelObserveComposite.refresh();
-          m_bindingComposite.getViewer().refresh();
-          m_bindingComposite.getViewer().setSelection(new StructuredSelection(binding), true);
-          m_bindingComposite.setDeleteAllActionEnabled(true);
-        }
-      }
-    } catch (Throwable e) {
-      DesignerPlugin.log(e);
-    }
-  }
+	protected final void createBinding() {
+		try {
+			// check auto binding
+			boolean isCtrlPressed = DesignerPlugin.isCtrlPressed();
+			if (isCtrlPressed) {
+				getShell().getDisplay().beep();
+			}
+			// prepare target
+			IObserveInfo target = m_targetObserveComposite.getMasterObserve();
+			IObserveInfo targetProperty = m_targetObserveComposite.getPropertyObserve();
+			// prepare model
+			IObserveInfo model = m_modelObserveComposite.getMasterObserve();
+			IObserveInfo modelProperty = m_modelObserveComposite.getPropertyObserve();
+			// create binding
+			IBindingInfo binding =
+					m_databindingsProvider.createBinding(target, targetProperty, model, modelProperty);
+			// show edit dialog
+			BindDialog dialog =
+					new BindDialog(getShell(), m_plugin, m_databindingsProvider, binding, true, isCtrlPressed);
+			// handle done
+			if (dialog.open() == Window.OK) {
+				m_databindingsProvider.addBinding(binding);
+				if (!isDisposed()) {
+					m_targetObserveComposite.refresh();
+					m_modelObserveComposite.refresh();
+					m_bindingComposite.getViewer().refresh();
+					m_bindingComposite.getViewer().setSelection(new StructuredSelection(binding), true);
+					m_bindingComposite.setDeleteAllActionEnabled(true);
+				}
+			}
+		} catch (Throwable e) {
+			DesignerPlugin.log(e);
+		}
+	}
 
-  protected final void editBinding() {
-    // prepare binding
-    IBindingInfo binding = m_bindingComposite.getSelectionBinding();
-    // show edit dialog
-    BindDialog dialog =
-        new BindDialog(getShell(), m_plugin, m_databindingsProvider, binding, false, false);
-    // handle done
-    if (dialog.open() == Window.OK) {
-      m_databindingsProvider.editBinding(binding);
-      if (!isDisposed()) {
-        m_targetObserveComposite.refresh();
-        m_modelObserveComposite.refresh();
-        m_bindingComposite.getViewer().refresh();
-      }
-    }
-  }
+	protected final void editBinding() {
+		// prepare binding
+		IBindingInfo binding = m_bindingComposite.getSelectionBinding();
+		// show edit dialog
+		BindDialog dialog =
+				new BindDialog(getShell(), m_plugin, m_databindingsProvider, binding, false, false);
+		// handle done
+		if (dialog.open() == Window.OK) {
+			m_databindingsProvider.editBinding(binding);
+			if (!isDisposed()) {
+				m_targetObserveComposite.refresh();
+				m_modelObserveComposite.refresh();
+				m_bindingComposite.getViewer().refresh();
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Selection
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private class SelectionSynchronizer {
-    private final IBindingSelectionListener m_bindingListener = new IBindingSelectionListener() {
-      @Override
-      public void selectionChanged(IBindingInfo binding) {
-        try {
-          setObserveListener(false);
-          handleBindingSelection(binding);
-        } finally {
-          setObserveListener(true);
-        }
-      }
-    };
-    private final ISelectionChangedListener m_observeListener = new ISelectionChangedListener() {
-      boolean m_skipEvent;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Selection
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private class SelectionSynchronizer {
+		private final IBindingSelectionListener m_bindingListener = new IBindingSelectionListener() {
+			@Override
+			public void selectionChanged(IBindingInfo binding) {
+				try {
+					setObserveListener(false);
+					handleBindingSelection(binding);
+				} finally {
+					setObserveListener(true);
+				}
+			}
+		};
+		private final ISelectionChangedListener m_observeListener = new ISelectionChangedListener() {
+			boolean m_skipEvent;
 
-      @Override
-      public void selectionChanged(SelectionChangedEvent event) {
-        // check self-invoke
-        if (m_skipEvent) {
-          return;
-        }
-        m_skipEvent = true;
-        //
-        try {
-          setBindingListener(false);
-          handleObserveSelection();
-        } finally {
-          m_skipEvent = false;
-          setBindingListener(true);
-        }
-      }
-    };
+			@Override
+			public void selectionChanged(SelectionChangedEvent event) {
+				// check self-invoke
+				if (m_skipEvent) {
+					return;
+				}
+				m_skipEvent = true;
+				//
+				try {
+					setBindingListener(false);
+					handleObserveSelection();
+				} finally {
+					m_skipEvent = false;
+					setBindingListener(true);
+				}
+			}
+		};
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public SelectionSynchronizer() {
-      setBindingListener(true);
-      setObserveListener(true);
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public SelectionSynchronizer() {
+			setBindingListener(true);
+			setObserveListener(true);
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Handle
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    private void setBindingListener(boolean add) {
-      m_bindingComposite.setBindingSelectionListener(add ? m_bindingListener : null);
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Handle
+		//
+		////////////////////////////////////////////////////////////////////////////
+		private void setBindingListener(boolean add) {
+			m_bindingComposite.setBindingSelectionListener(add ? m_bindingListener : null);
+		}
 
-    private void setObserveListener(boolean add) {
-      if (add) {
-        m_targetObserveComposite.getMasterViewer().addPostSelectionChangedListener(
-            m_observeListener);
-        m_targetObserveComposite.getPropertiesViewer().addPostSelectionChangedListener(
-            m_observeListener);
-        m_modelObserveComposite.getMasterViewer().addPostSelectionChangedListener(m_observeListener);
-        m_modelObserveComposite.getPropertiesViewer().addPostSelectionChangedListener(
-            m_observeListener);
-      } else {
-        m_targetObserveComposite.getMasterViewer().removePostSelectionChangedListener(
-            m_observeListener);
-        m_targetObserveComposite.getPropertiesViewer().removePostSelectionChangedListener(
-            m_observeListener);
-        m_modelObserveComposite.getMasterViewer().removePostSelectionChangedListener(
-            m_observeListener);
-        m_modelObserveComposite.getPropertiesViewer().removePostSelectionChangedListener(
-            m_observeListener);
-      }
-    }
+		private void setObserveListener(boolean add) {
+			if (add) {
+				m_targetObserveComposite.getMasterViewer().addPostSelectionChangedListener(
+						m_observeListener);
+				m_targetObserveComposite.getPropertiesViewer().addPostSelectionChangedListener(
+						m_observeListener);
+				m_modelObserveComposite.getMasterViewer().addPostSelectionChangedListener(m_observeListener);
+				m_modelObserveComposite.getPropertiesViewer().addPostSelectionChangedListener(
+						m_observeListener);
+			} else {
+				m_targetObserveComposite.getMasterViewer().removePostSelectionChangedListener(
+						m_observeListener);
+				m_targetObserveComposite.getPropertiesViewer().removePostSelectionChangedListener(
+						m_observeListener);
+				m_modelObserveComposite.getMasterViewer().removePostSelectionChangedListener(
+						m_observeListener);
+				m_modelObserveComposite.getPropertiesViewer().removePostSelectionChangedListener(
+						m_observeListener);
+			}
+		}
 
-    protected final void handleBindingSelection(IBindingInfo binding) {
-      if (binding == null) {
-        m_selection.clearBinding();
-        // refresh all
-        m_targetObserveComposite.refresh();
-        m_modelObserveComposite.refresh();
-      } else {
-        m_selection.setBinding(m_databindingsProvider, binding);
-        // refresh target
-        m_targetObserveComposite.setSelection(binding.getTarget(), binding.getTargetProperty());
-        // refresh model
-        m_modelObserveComposite.setSelection(binding.getModel(), binding.getModelProperty());
-      }
-    }
+		protected final void handleBindingSelection(IBindingInfo binding) {
+			if (binding == null) {
+				m_selection.clearBinding();
+				// refresh all
+				m_targetObserveComposite.refresh();
+				m_modelObserveComposite.refresh();
+			} else {
+				m_selection.setBinding(m_databindingsProvider, binding);
+				// refresh target
+				m_targetObserveComposite.setSelection(binding.getTarget(), binding.getTargetProperty());
+				// refresh model
+				m_modelObserveComposite.setSelection(binding.getModel(), binding.getModelProperty());
+			}
+		}
 
-    protected final void handleObserveSelection() {
-      // store selection
-      m_selection.clearBinding();
-      m_selection.setTarget(m_databindingsProvider, m_targetObserveComposite);
-      m_selection.setModel(m_databindingsProvider, m_modelObserveComposite);
-      // prepare target selection
-      IStructuredSelection targetSelection = getSelection(m_targetObserveComposite, true);
-      IStructuredSelection targetPropertySelection = getSelection(m_targetObserveComposite, false);
-      // prepare model selection
-      IStructuredSelection modelSelection = getSelection(m_modelObserveComposite, true);
-      IStructuredSelection modelPropertySelection = getSelection(m_modelObserveComposite, false);
-      // check selection
-      if (UiUtils.isEmpty(targetSelection)
-          || UiUtils.isEmpty(targetPropertySelection)
-          || UiUtils.isEmpty(modelSelection)
-          || UiUtils.isEmpty(modelPropertySelection)) {
-        setActionsEnabled(false);
-      } else {
-        // prepare target
-        IObserveInfo target = (IObserveInfo) targetSelection.getFirstElement();
-        IObserveInfo targetProperty = (IObserveInfo) targetPropertySelection.getFirstElement();
-        // prepare model
-        IObserveInfo model = (IObserveInfo) modelSelection.getFirstElement();
-        IObserveInfo modelProperty = (IObserveInfo) modelPropertySelection.getFirstElement();
-        // find represented observe
-        for (IBindingInfo binding : m_databindingsProvider.getBindings()) {
-          if (target == binding.getTarget()
-              && targetProperty == binding.getTargetProperty()
-              && model == binding.getModel()
-              && modelProperty == binding.getModelProperty()) {
-            StructuredSelection selection = new StructuredSelection(binding);
-            if (!selection.equals(m_bindingComposite.getViewer().getSelection())) {
-              m_bindingComposite.getViewer().setSelection(selection, true);
-            }
-            setActionsEnabled(false);
-            m_selection.setBinding(m_databindingsProvider, binding);
-            return;
-          }
-        }
-        // validate target and model
-        try {
-          setActionsEnabled(m_databindingsProvider.validate(
-              target,
-              targetProperty,
-              model,
-              modelProperty));
-        } catch (Throwable e) {
-          DesignerPlugin.log(e);
-        }
-      }
-    }
+		protected final void handleObserveSelection() {
+			// store selection
+			m_selection.clearBinding();
+			m_selection.setTarget(m_databindingsProvider, m_targetObserveComposite);
+			m_selection.setModel(m_databindingsProvider, m_modelObserveComposite);
+			// prepare target selection
+			IStructuredSelection targetSelection = getSelection(m_targetObserveComposite, true);
+			IStructuredSelection targetPropertySelection = getSelection(m_targetObserveComposite, false);
+			// prepare model selection
+			IStructuredSelection modelSelection = getSelection(m_modelObserveComposite, true);
+			IStructuredSelection modelPropertySelection = getSelection(m_modelObserveComposite, false);
+			// check selection
+			if (UiUtils.isEmpty(targetSelection)
+					|| UiUtils.isEmpty(targetPropertySelection)
+					|| UiUtils.isEmpty(modelSelection)
+					|| UiUtils.isEmpty(modelPropertySelection)) {
+				setActionsEnabled(false);
+			} else {
+				// prepare target
+				IObserveInfo target = (IObserveInfo) targetSelection.getFirstElement();
+				IObserveInfo targetProperty = (IObserveInfo) targetPropertySelection.getFirstElement();
+				// prepare model
+				IObserveInfo model = (IObserveInfo) modelSelection.getFirstElement();
+				IObserveInfo modelProperty = (IObserveInfo) modelPropertySelection.getFirstElement();
+				// find represented observe
+				for (IBindingInfo binding : m_databindingsProvider.getBindings()) {
+					if (target == binding.getTarget()
+							&& targetProperty == binding.getTargetProperty()
+							&& model == binding.getModel()
+							&& modelProperty == binding.getModelProperty()) {
+						StructuredSelection selection = new StructuredSelection(binding);
+						if (!selection.equals(m_bindingComposite.getViewer().getSelection())) {
+							m_bindingComposite.getViewer().setSelection(selection, true);
+						}
+						setActionsEnabled(false);
+						m_selection.setBinding(m_databindingsProvider, binding);
+						return;
+					}
+				}
+				// validate target and model
+				try {
+					setActionsEnabled(m_databindingsProvider.validate(
+							target,
+							targetProperty,
+							model,
+							modelProperty));
+				} catch (Throwable e) {
+					DesignerPlugin.log(e);
+				}
+			}
+		}
 
-    private void setActionsEnabled(boolean enabled) {
-      m_targetObserveComposite.getBindAction().setEnabled(enabled);
-      m_modelObserveComposite.getBindAction().setEnabled(enabled);
-    }
-  }
-  private static abstract class ExpandedListener implements ITreeViewerListener {
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public ExpandedListener(ObserveElementsComposite observeElementsComposite) {
-      observeElementsComposite.getMasterViewer().addTreeListener(this);
-      observeElementsComposite.getPropertiesViewer().addTreeListener(this);
-    }
+		private void setActionsEnabled(boolean enabled) {
+			m_targetObserveComposite.getBindAction().setEnabled(enabled);
+			m_modelObserveComposite.getBindAction().setEnabled(enabled);
+		}
+	}
+	private static abstract class ExpandedListener implements ITreeViewerListener {
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public ExpandedListener(ObserveElementsComposite observeElementsComposite) {
+			observeElementsComposite.getMasterViewer().addTreeListener(this);
+			observeElementsComposite.getPropertiesViewer().addTreeListener(this);
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // TreeListener
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public void treeCollapsed(TreeExpansionEvent event) {
-      handle();
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// TreeListener
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public void treeCollapsed(TreeExpansionEvent event) {
+			handle();
+		}
 
-    @Override
-    public void treeExpanded(TreeExpansionEvent event) {
-      handle();
-    }
+		@Override
+		public void treeExpanded(TreeExpansionEvent event) {
+			handle();
+		}
 
-    protected abstract void handle();
-  }
+		protected abstract void handle();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  static IStructuredSelection getSelection(ObserveElementsComposite observeComposite,
-      boolean forMaster) {
-    Viewer viewer =
-        forMaster ? observeComposite.getMasterViewer() : observeComposite.getPropertiesViewer();
-    return (IStructuredSelection) viewer.getSelection();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	static IStructuredSelection getSelection(ObserveElementsComposite observeComposite,
+			boolean forMaster) {
+		Viewer viewer =
+				forMaster ? observeComposite.getMasterViewer() : observeComposite.getPropertiesViewer();
+		return (IStructuredSelection) viewer.getSelection();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/IBindingSelectionListener.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/IBindingSelectionListener.java
index 0eb3b7708..95280ac14 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/IBindingSelectionListener.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/IBindingSelectionListener.java
@@ -19,8 +19,8 @@
  * @coverage bindings.ui
  */
 interface IBindingSelectionListener {
-  /**
-   * Notifies that the selection has changed.
-   */
-  void selectionChanged(IBindingInfo binding);
+	/**
+	 * Notifies that the selection has changed.
+	 */
+	void selectionChanged(IBindingInfo binding);
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/ObserveElementsComposite.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/ObserveElementsComposite.java
index cb4f6ddf0..a5077de21 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/ObserveElementsComposite.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/ObserveElementsComposite.java
@@ -66,498 +66,498 @@
  * @coverage bindings.ui
  */
 final class ObserveElementsComposite extends SashForm {
-  private final IDatabindingsProvider m_databindingsProvider;
-  private final String m_title;
-  private final Label m_titleLabel;
-  private final Text m_filterText;
-  private final ToolItem m_clearFilterAction;
-  private final TreeViewer m_masterViewer;
-  private boolean m_enabledFilter;
-  private final ObserveFilter m_filter = new ObserveFilter();
-  private final ToolItem m_propertiesFilterAction;
-  private final ToolItem m_bindAction;
-  private final TreeViewer m_propertiesViewer;
-  private final Menu m_propertiesFilterMenu;
-  private final PropertiesFilter m_propertiesFilter = new PropertiesFilter();
-  private final List<ToolItem> m_typeActions = Lists.newArrayList();
-  private final SelectionListener m_changeTypeListener = new SelectionAdapter() {
-    @Override
-    public void widgetSelected(SelectionEvent e) {
-      // prepare action
-      ToolItem action = (ToolItem) e.widget;
-      // handle select
-      if (action.getSelection()) {
-        ObserveType type = (ObserveType) action.getData();
-        if (type != m_currentType) {
-          showPage(type, false);
-        }
-      }
-    }
-  };
-  private final Map<ObserveType, ISelection[]> m_typeToSelection = Maps.newHashMap();
-  private final Map<ObserveType, Object[][]> m_typeToExpanded = Maps.newHashMap();
-  private ObserveType m_currentType;
+	private final IDatabindingsProvider m_databindingsProvider;
+	private final String m_title;
+	private final Label m_titleLabel;
+	private final Text m_filterText;
+	private final ToolItem m_clearFilterAction;
+	private final TreeViewer m_masterViewer;
+	private boolean m_enabledFilter;
+	private final ObserveFilter m_filter = new ObserveFilter();
+	private final ToolItem m_propertiesFilterAction;
+	private final ToolItem m_bindAction;
+	private final TreeViewer m_propertiesViewer;
+	private final Menu m_propertiesFilterMenu;
+	private final PropertiesFilter m_propertiesFilter = new PropertiesFilter();
+	private final List<ToolItem> m_typeActions = Lists.newArrayList();
+	private final SelectionListener m_changeTypeListener = new SelectionAdapter() {
+		@Override
+		public void widgetSelected(SelectionEvent e) {
+			// prepare action
+			ToolItem action = (ToolItem) e.widget;
+			// handle select
+			if (action.getSelection()) {
+				ObserveType type = (ObserveType) action.getData();
+				if (type != m_currentType) {
+					showPage(type, false);
+				}
+			}
+		}
+	};
+	private final Map<ObserveType, ISelection[]> m_typeToSelection = Maps.newHashMap();
+	private final Map<ObserveType, Object[][]> m_typeToExpanded = Maps.newHashMap();
+	private ObserveType m_currentType;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ObserveElementsComposite(Composite parent,
-      int style,
-      String title,
-      IDatabindingsProvider databindingsProvider,
-      boolean addBindAction) {
-    super(parent, style | SWT.VERTICAL);
-    m_title = title;
-    m_databindingsProvider = databindingsProvider;
-    // master composite
-    Composite masterComposite = new Composite(this, SWT.NONE);
-    GridLayoutFactory.create(masterComposite).columns(2);
-    //
-    m_titleLabel = new Label(masterComposite, SWT.NONE);
-    GridDataFactory.create(m_titleLabel).fillH().grabH().spanH(2);
-    m_titleLabel.setText(title);
-    //
-    m_filterText = new Text(masterComposite, SWT.BORDER | SWT.SINGLE | SWT.SEARCH);
-    GridDataFactory.create(m_filterText).fillH().grabH();
-    m_filterText.setText(Messages.ObserveElementsComposite_filterText);
-    m_filterText.addListener(SWT.FocusIn, new Listener() {
-      @Override
-      public void handleEvent(Event event) {
-        m_filterText.selectAll();
-      }
-    });
-    m_filterText.addModifyListener(new ModifyListener() {
-      @Override
-      public void modifyText(ModifyEvent e) {
-        String filterText = m_filterText.getText();
-        if (m_enabledFilter) {
-          if (filterText.length() == 0) {
-            // disabled filter
-            m_enabledFilter = false;
-            resetFilter();
-            m_clearFilterAction.setEnabled(false);
-          } else {
-            // update filter value
-            refreshFilter(filterText, false);
-          }
-        } else {
-          // enabled
-          m_enabledFilter = true;
-          refreshFilter(filterText, true);
-          m_clearFilterAction.setEnabled(true);
-        }
-        // expand all elements
-        m_masterViewer.expandAll();
-      }
-    });
-    //
-    ToolBar toolbar = new ToolBar(masterComposite, SWT.NONE);
-    // clear filter action
-    m_clearFilterAction = new ToolItem(toolbar, SWT.NONE);
-    m_clearFilterAction.setImage(Activator.getImage("clear_filter.gif"));
-    m_clearFilterAction.setToolTipText(Messages.ObserveElementsComposite_clearAction);
-    m_clearFilterAction.setEnabled(false);
-    m_clearFilterAction.addSelectionListener(new SelectionAdapter() {
-      @Override
-      public void widgetSelected(SelectionEvent e) {
-        m_filterText.setText("");
-      }
-    });
-    // separator
-    new ToolItem(toolbar, SWT.SEPARATOR);
-    // type actions
-    for (ObserveType observeType : databindingsProvider.getTypes()) {
-      ToolItem action = new ToolItem(toolbar, SWT.RADIO);
-      action.setImage(observeType.getImage());
-      action.setToolTipText(observeType.getName());
-      action.setData(observeType);
-      action.addSelectionListener(m_changeTypeListener);
-      m_typeActions.add(action);
-    }
-    // master viewer
-    m_masterViewer = new TreeViewer(masterComposite, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL);
-    GridDataFactory.create(m_masterViewer.getControl()).fill().grab().spanH(2);
-    m_masterViewer.setContentProvider(new ObserveTreeContentProvider(IObserveInfo.ChildrenContext.ChildrenForMasterTable));
-    m_masterViewer.setLabelProvider(new ObserveLabelProvider());
-    m_masterViewer.addPostSelectionChangedListener(new ISelectionChangedListener() {
-      @Override
-      public void selectionChanged(SelectionChangedEvent event) {
-        updatePageTitle();
-        IStructuredSelection selection = (IStructuredSelection) event.getSelection();
-        if (UiUtils.isEmpty(selection)) {
-          m_propertiesViewer.setInput(Collections.EMPTY_LIST);
-        } else {
-          m_propertiesViewer.setInput(selection.getFirstElement());
-        }
-      }
-    });
-    // properties composite
-    Composite propertiesComposite = new Composite(this, SWT.NONE);
-    GridLayoutFactory.create(propertiesComposite).columns(2);
-    //
-    Label propertiesLabel = new Label(propertiesComposite, SWT.NONE);
-    GridDataFactory.create(propertiesLabel).fillH().grabH();
-    propertiesLabel.setText(Messages.ObserveElementsComposite_propertiesLabel);
-    //
-    ToolBar propertiesToolbar = new ToolBar(propertiesComposite, SWT.FLAT);
-    GridDataFactory.create(propertiesToolbar).alignHR().grabH();
-    //
-    m_propertiesFilterAction = new ToolItem(propertiesToolbar, SWT.DROP_DOWN);
-    m_propertiesFilterAction.setImage(Activator.getImage("filter_action.gif"));
-    m_propertiesFilterAction.setToolTipText(Messages.ObserveElementsComposite_propertiesFilterToolTip);
-    //
-    m_propertiesFilterMenu = new Menu(propertiesToolbar);
-    m_propertiesFilterAction.addSelectionListener(new SelectionAdapter() {
-      @Override
-      public void widgetSelected(SelectionEvent e) {
-        // prepare menu bounds
-        Rectangle bounds = m_propertiesFilterAction.getBounds();
-        Point location =
-            m_propertiesFilterAction.getParent().toDisplay(
-                new Point(bounds.x, bounds.y + bounds.height));
-        m_propertiesFilterMenu.setLocation(location.x, location.y);
-        // show context menu
-        m_propertiesFilterMenu.setVisible(true);
-      }
-    });
-    //
-    if (addBindAction) {
-      new ToolItem(propertiesToolbar, SWT.SEPARATOR);
-      //
-      m_bindAction = new ToolItem(propertiesToolbar, SWT.NONE);
-      m_bindAction.setImage(Activator.getImage("link_add_action.png"));
-      m_bindAction.setToolTipText(Messages.ObserveElementsComposite_bindToolTip);
-      m_bindAction.setEnabled(false);
-    } else {
-      m_bindAction = null;
-    }
-    //
-    m_propertiesViewer =
-        new TreeViewer(propertiesComposite, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL);
-    GridDataFactory.create(m_propertiesViewer.getControl()).fill().grab().spanH(2);
-    m_propertiesViewer.setContentProvider(new ObserveTreeContentProvider(IObserveInfo.ChildrenContext.ChildrenForPropertiesTable));
-    //
-    IBaseLabelProvider propertiesLabelProvider =
-        m_databindingsProvider.createPropertiesViewerLabelProvider(m_propertiesViewer);
-    m_propertiesViewer.setLabelProvider(propertiesLabelProvider == null
-        ? new ObserveLabelProvider()
-        : propertiesLabelProvider);
-    //
-    m_propertiesViewer.addPostSelectionChangedListener(new ISelectionChangedListener() {
-      @Override
-      public void selectionChanged(SelectionChangedEvent event) {
-        updatePageTitle();
-      }
-    });
-    //
-    fillPropertiesFilters();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ObserveElementsComposite(Composite parent,
+			int style,
+			String title,
+			IDatabindingsProvider databindingsProvider,
+			boolean addBindAction) {
+		super(parent, style | SWT.VERTICAL);
+		m_title = title;
+		m_databindingsProvider = databindingsProvider;
+		// master composite
+		Composite masterComposite = new Composite(this, SWT.NONE);
+		GridLayoutFactory.create(masterComposite).columns(2);
+		//
+		m_titleLabel = new Label(masterComposite, SWT.NONE);
+		GridDataFactory.create(m_titleLabel).fillH().grabH().spanH(2);
+		m_titleLabel.setText(title);
+		//
+		m_filterText = new Text(masterComposite, SWT.BORDER | SWT.SINGLE | SWT.SEARCH);
+		GridDataFactory.create(m_filterText).fillH().grabH();
+		m_filterText.setText(Messages.ObserveElementsComposite_filterText);
+		m_filterText.addListener(SWT.FocusIn, new Listener() {
+			@Override
+			public void handleEvent(Event event) {
+				m_filterText.selectAll();
+			}
+		});
+		m_filterText.addModifyListener(new ModifyListener() {
+			@Override
+			public void modifyText(ModifyEvent e) {
+				String filterText = m_filterText.getText();
+				if (m_enabledFilter) {
+					if (filterText.length() == 0) {
+						// disabled filter
+						m_enabledFilter = false;
+						resetFilter();
+						m_clearFilterAction.setEnabled(false);
+					} else {
+						// update filter value
+						refreshFilter(filterText, false);
+					}
+				} else {
+					// enabled
+					m_enabledFilter = true;
+					refreshFilter(filterText, true);
+					m_clearFilterAction.setEnabled(true);
+				}
+				// expand all elements
+				m_masterViewer.expandAll();
+			}
+		});
+		//
+		ToolBar toolbar = new ToolBar(masterComposite, SWT.NONE);
+		// clear filter action
+		m_clearFilterAction = new ToolItem(toolbar, SWT.NONE);
+		m_clearFilterAction.setImage(Activator.getImage("clear_filter.gif"));
+		m_clearFilterAction.setToolTipText(Messages.ObserveElementsComposite_clearAction);
+		m_clearFilterAction.setEnabled(false);
+		m_clearFilterAction.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				m_filterText.setText("");
+			}
+		});
+		// separator
+		new ToolItem(toolbar, SWT.SEPARATOR);
+		// type actions
+		for (ObserveType observeType : databindingsProvider.getTypes()) {
+			ToolItem action = new ToolItem(toolbar, SWT.RADIO);
+			action.setImage(observeType.getImage());
+			action.setToolTipText(observeType.getName());
+			action.setData(observeType);
+			action.addSelectionListener(m_changeTypeListener);
+			m_typeActions.add(action);
+		}
+		// master viewer
+		m_masterViewer = new TreeViewer(masterComposite, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL);
+		GridDataFactory.create(m_masterViewer.getControl()).fill().grab().spanH(2);
+		m_masterViewer.setContentProvider(new ObserveTreeContentProvider(IObserveInfo.ChildrenContext.ChildrenForMasterTable));
+		m_masterViewer.setLabelProvider(new ObserveLabelProvider());
+		m_masterViewer.addPostSelectionChangedListener(new ISelectionChangedListener() {
+			@Override
+			public void selectionChanged(SelectionChangedEvent event) {
+				updatePageTitle();
+				IStructuredSelection selection = (IStructuredSelection) event.getSelection();
+				if (UiUtils.isEmpty(selection)) {
+					m_propertiesViewer.setInput(Collections.EMPTY_LIST);
+				} else {
+					m_propertiesViewer.setInput(selection.getFirstElement());
+				}
+			}
+		});
+		// properties composite
+		Composite propertiesComposite = new Composite(this, SWT.NONE);
+		GridLayoutFactory.create(propertiesComposite).columns(2);
+		//
+		Label propertiesLabel = new Label(propertiesComposite, SWT.NONE);
+		GridDataFactory.create(propertiesLabel).fillH().grabH();
+		propertiesLabel.setText(Messages.ObserveElementsComposite_propertiesLabel);
+		//
+		ToolBar propertiesToolbar = new ToolBar(propertiesComposite, SWT.FLAT);
+		GridDataFactory.create(propertiesToolbar).alignHR().grabH();
+		//
+		m_propertiesFilterAction = new ToolItem(propertiesToolbar, SWT.DROP_DOWN);
+		m_propertiesFilterAction.setImage(Activator.getImage("filter_action.gif"));
+		m_propertiesFilterAction.setToolTipText(Messages.ObserveElementsComposite_propertiesFilterToolTip);
+		//
+		m_propertiesFilterMenu = new Menu(propertiesToolbar);
+		m_propertiesFilterAction.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				// prepare menu bounds
+				Rectangle bounds = m_propertiesFilterAction.getBounds();
+				Point location =
+						m_propertiesFilterAction.getParent().toDisplay(
+								new Point(bounds.x, bounds.y + bounds.height));
+				m_propertiesFilterMenu.setLocation(location.x, location.y);
+				// show context menu
+				m_propertiesFilterMenu.setVisible(true);
+			}
+		});
+		//
+		if (addBindAction) {
+			new ToolItem(propertiesToolbar, SWT.SEPARATOR);
+			//
+			m_bindAction = new ToolItem(propertiesToolbar, SWT.NONE);
+			m_bindAction.setImage(Activator.getImage("link_add_action.png"));
+			m_bindAction.setToolTipText(Messages.ObserveElementsComposite_bindToolTip);
+			m_bindAction.setEnabled(false);
+		} else {
+			m_bindAction = null;
+		}
+		//
+		m_propertiesViewer =
+				new TreeViewer(propertiesComposite, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL);
+		GridDataFactory.create(m_propertiesViewer.getControl()).fill().grab().spanH(2);
+		m_propertiesViewer.setContentProvider(new ObserveTreeContentProvider(IObserveInfo.ChildrenContext.ChildrenForPropertiesTable));
+		//
+		IBaseLabelProvider propertiesLabelProvider =
+				m_databindingsProvider.createPropertiesViewerLabelProvider(m_propertiesViewer);
+		m_propertiesViewer.setLabelProvider(propertiesLabelProvider == null
+				? new ObserveLabelProvider()
+						: propertiesLabelProvider);
+		//
+		m_propertiesViewer.addPostSelectionChangedListener(new ISelectionChangedListener() {
+			@Override
+			public void selectionChanged(SelectionChangedEvent event) {
+				updatePageTitle();
+			}
+		});
+		//
+		fillPropertiesFilters();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Page
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Show page with give {@link ObserveType}.
-   */
-  public void showPage(ObserveType type) {
-    showPage(type, true);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Page
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Show page with give {@link ObserveType}.
+	 */
+	public void showPage(ObserveType type) {
+		showPage(type, true);
+	}
 
-  private void showPage(ObserveType type, boolean setActionSelection) {
-    // check store current type
-    if (m_currentType != null && m_currentType != type) {
-      storeSelection(
-          m_currentType,
-          m_masterViewer.getSelection(),
-          m_propertiesViewer.getSelection());
-      storeExpanded(
-          m_currentType,
-          m_masterViewer.getExpandedElements(),
-          m_propertiesViewer.getExpandedElements());
-    }
-    // calculate update type
-    boolean setInput = m_currentType != type;
-    // store new type
-    m_currentType = type;
-    // update actions
-    if (setActionSelection) {
-      for (ToolItem action : m_typeActions) {
-        action.setSelection(action.getData() == m_currentType);
-      }
-    }
-    // sets new title and inputs
-    if (setInput) {
-      updatePageTitle();
-      m_masterViewer.setInput(m_databindingsProvider.getObserves(m_currentType));
-      m_propertiesViewer.setInput(Collections.EMPTY_LIST);
-    }
-    // restore expanded
-    Object[][] expandeds = m_typeToExpanded.get(m_currentType);
-    if (expandeds == null || m_enabledFilter) {
-      if (m_enabledFilter || m_currentType.getExpandedStrategy() == ExpandedStrategy.ExpandedAll) {
-        m_masterViewer.expandAll();
-      }
-    } else {
-      if (!m_enabledFilter) {
-        m_masterViewer.setExpandedElements(expandeds[0]);
-      }
-      m_propertiesViewer.setExpandedElements(expandeds[1]);
-    }
-    // restore selection
-    ISelection[] selections = m_typeToSelection.get(m_currentType);
-    if (selections != null) {
-      m_masterViewer.setSelection(selections[0], true);
-      m_propertiesViewer.setSelection(selections[1], true);
-    }
-  }
+	private void showPage(ObserveType type, boolean setActionSelection) {
+		// check store current type
+		if (m_currentType != null && m_currentType != type) {
+			storeSelection(
+					m_currentType,
+					m_masterViewer.getSelection(),
+					m_propertiesViewer.getSelection());
+			storeExpanded(
+					m_currentType,
+					m_masterViewer.getExpandedElements(),
+					m_propertiesViewer.getExpandedElements());
+		}
+		// calculate update type
+		boolean setInput = m_currentType != type;
+		// store new type
+		m_currentType = type;
+		// update actions
+		if (setActionSelection) {
+			for (ToolItem action : m_typeActions) {
+				action.setSelection(action.getData() == m_currentType);
+			}
+		}
+		// sets new title and inputs
+		if (setInput) {
+			updatePageTitle();
+			m_masterViewer.setInput(m_databindingsProvider.getObserves(m_currentType));
+			m_propertiesViewer.setInput(Collections.EMPTY_LIST);
+		}
+		// restore expanded
+		Object[][] expandeds = m_typeToExpanded.get(m_currentType);
+		if (expandeds == null || m_enabledFilter) {
+			if (m_enabledFilter || m_currentType.getExpandedStrategy() == ExpandedStrategy.ExpandedAll) {
+				m_masterViewer.expandAll();
+			}
+		} else {
+			if (!m_enabledFilter) {
+				m_masterViewer.setExpandedElements(expandeds[0]);
+			}
+			m_propertiesViewer.setExpandedElements(expandeds[1]);
+		}
+		// restore selection
+		ISelection[] selections = m_typeToSelection.get(m_currentType);
+		if (selections != null) {
+			m_masterViewer.setSelection(selections[0], true);
+			m_propertiesViewer.setSelection(selections[1], true);
+		}
+	}
 
-  private void updatePageTitle() {
-    StringBuffer buffer = new StringBuffer();
-    appendObserves(m_masterViewer, buffer);
-    appendObserves(m_propertiesViewer, buffer);
-    if (buffer.length() == 0) {
-      buffer.append("<empty>");
-    }
-    m_titleLabel.setText(m_title + " (" + m_currentType.getName() + "): " + buffer.toString());
-  }
+	private void updatePageTitle() {
+		StringBuffer buffer = new StringBuffer();
+		appendObserves(m_masterViewer, buffer);
+		appendObserves(m_propertiesViewer, buffer);
+		if (buffer.length() == 0) {
+			buffer.append("<empty>");
+		}
+		m_titleLabel.setText(m_title + " (" + m_currentType.getName() + "): " + buffer.toString());
+	}
 
-  private static void appendObserves(Viewer viewer, StringBuffer commonBuffer) {
-    IStructuredSelection selection = UiUtils.getSelection(viewer);
-    if (!UiUtils.isEmpty(selection)) {
-      StringBuffer buffer = new StringBuffer();
-      final IObserveInfo[] observe = {(IObserveInfo) selection.getFirstElement()};
-      while (true) {
-        buffer.insert(0, ExecutionUtils.runObjectLog(new RunnableObjectEx<String>() {
-          @Override
-          public String runObject() throws Exception {
-            return observe[0].getPresentation().getTextForBinding();
-          }
-        }, "<error>"));
-        observe[0] = observe[0].getParent();
-        if (observe[0] == null) {
-          break;
-        }
-        buffer.insert(0, ".");
-      }
-      if (commonBuffer.length() > 0 && buffer.length() > 0) {
-        commonBuffer.append(".");
-      }
-      commonBuffer.append(buffer);
-    }
-  }
+	private static void appendObserves(Viewer viewer, StringBuffer commonBuffer) {
+		IStructuredSelection selection = UiUtils.getSelection(viewer);
+		if (!UiUtils.isEmpty(selection)) {
+			StringBuffer buffer = new StringBuffer();
+			final IObserveInfo[] observe = {(IObserveInfo) selection.getFirstElement()};
+			while (true) {
+				buffer.insert(0, ExecutionUtils.runObjectLog(new RunnableObjectEx<String>() {
+					@Override
+					public String runObject() throws Exception {
+						return observe[0].getPresentation().getTextForBinding();
+					}
+				}, "<error>"));
+				observe[0] = observe[0].getParent();
+				if (observe[0] == null) {
+					break;
+				}
+				buffer.insert(0, ".");
+			}
+			if (commonBuffer.length() > 0 && buffer.length() > 0) {
+				commonBuffer.append(".");
+			}
+			commonBuffer.append(buffer);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Selection
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void setSelection(IObserveInfo observeObject, IObserveInfo observeProperty) {
-    ObserveType type = observeObject.getType();
-    ISelection masterSelection = new StructuredSelection(observeObject);
-    ISelection propertiesSelection = new StructuredSelection(observeProperty);
-    if (type == m_currentType
-        && masterSelection.equals(m_masterViewer.getSelection())
-        && propertiesSelection.equals(m_propertiesViewer.getSelection())) {
-      return;
-    }
-    //
-    storeSelection(type, masterSelection, propertiesSelection);
-    showPage(type);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Selection
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void setSelection(IObserveInfo observeObject, IObserveInfo observeProperty) {
+		ObserveType type = observeObject.getType();
+		ISelection masterSelection = new StructuredSelection(observeObject);
+		ISelection propertiesSelection = new StructuredSelection(observeProperty);
+		if (type == m_currentType
+				&& masterSelection.equals(m_masterViewer.getSelection())
+				&& propertiesSelection.equals(m_propertiesViewer.getSelection())) {
+			return;
+		}
+		//
+		storeSelection(type, masterSelection, propertiesSelection);
+		showPage(type);
+	}
 
-  private void storeSelection(ObserveType type,
-      ISelection masterSelection,
-      ISelection propertiesSelection) {
-    // prepare cached value
-    ISelection[] selections = m_typeToSelection.get(type);
-    // check create
-    if (selections == null) {
-      selections = new ISelection[2];
-      m_typeToSelection.put(type, selections);
-    }
-    // update values
-    selections[0] = masterSelection;
-    selections[1] = propertiesSelection;
-  }
+	private void storeSelection(ObserveType type,
+			ISelection masterSelection,
+			ISelection propertiesSelection) {
+		// prepare cached value
+		ISelection[] selections = m_typeToSelection.get(type);
+		// check create
+		if (selections == null) {
+			selections = new ISelection[2];
+			m_typeToSelection.put(type, selections);
+		}
+		// update values
+		selections[0] = masterSelection;
+		selections[1] = propertiesSelection;
+	}
 
-  private void storeExpanded(ObserveType type,
-      Object[] masterExpandedObjects,
-      Object[] propertiesExpandedObjects) {
-    // prepare cached value
-    Object[][] expandeds = m_typeToExpanded.get(type);
-    // check create
-    if (expandeds == null) {
-      expandeds = new Object[2][];
-      m_typeToExpanded.put(type, expandeds);
-    }
-    // update values
-    expandeds[0] = masterExpandedObjects;
-    expandeds[1] = propertiesExpandedObjects;
-  }
+	private void storeExpanded(ObserveType type,
+			Object[] masterExpandedObjects,
+			Object[] propertiesExpandedObjects) {
+		// prepare cached value
+		Object[][] expandeds = m_typeToExpanded.get(type);
+		// check create
+		if (expandeds == null) {
+			expandeds = new Object[2][];
+			m_typeToExpanded.put(type, expandeds);
+		}
+		// update values
+		expandeds[0] = masterExpandedObjects;
+		expandeds[1] = propertiesExpandedObjects;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ToolItem getBindAction() {
-    return m_bindAction;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ToolItem getBindAction() {
+		return m_bindAction;
+	}
 
-  public TreeViewer getMasterViewer() {
-    return m_masterViewer;
-  }
+	public TreeViewer getMasterViewer() {
+		return m_masterViewer;
+	}
 
-  public TreeViewer getPropertiesViewer() {
-    return m_propertiesViewer;
-  }
+	public TreeViewer getPropertiesViewer() {
+		return m_propertiesViewer;
+	}
 
-  public IObserveInfo getMasterObserve() {
-    IStructuredSelection selection = (IStructuredSelection) m_masterViewer.getSelection();
-    return UiUtils.isEmpty(selection) ? null : (IObserveInfo) selection.getFirstElement();
-  }
+	public IObserveInfo getMasterObserve() {
+		IStructuredSelection selection = (IStructuredSelection) m_masterViewer.getSelection();
+		return UiUtils.isEmpty(selection) ? null : (IObserveInfo) selection.getFirstElement();
+	}
 
-  public IObserveInfo getPropertyObserve() {
-    IStructuredSelection selection = (IStructuredSelection) m_propertiesViewer.getSelection();
-    return UiUtils.isEmpty(selection) ? null : (IObserveInfo) selection.getFirstElement();
-  }
+	public IObserveInfo getPropertyObserve() {
+		IStructuredSelection selection = (IStructuredSelection) m_propertiesViewer.getSelection();
+		return UiUtils.isEmpty(selection) ? null : (IObserveInfo) selection.getFirstElement();
+	}
 
-  public ObserveType getCurrentType() {
-    return m_currentType;
-  }
+	public ObserveType getCurrentType() {
+		return m_currentType;
+	}
 
-  public void refresh() {
-    m_masterViewer.refresh();
-    m_propertiesViewer.refresh();
-  }
+	public void refresh() {
+		m_masterViewer.refresh();
+		m_propertiesViewer.refresh();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Filter
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected final void resetFilter() {
-    try {
-      m_masterViewer.getControl().setRedraw(false);
-      m_masterViewer.resetFilters();
-    } finally {
-      m_masterViewer.getControl().setRedraw(true);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Filter
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected final void resetFilter() {
+		try {
+			m_masterViewer.getControl().setRedraw(false);
+			m_masterViewer.resetFilters();
+		} finally {
+			m_masterViewer.getControl().setRedraw(true);
+		}
+	}
 
-  protected final void refreshFilter(String filterText, boolean addFilter) {
-    try {
-      m_masterViewer.getControl().setRedraw(false);
-      m_filter.setPattern(filterText);
-      //
-      if (addFilter) {
-        m_masterViewer.addFilter(m_filter);
-      } else {
-        m_masterViewer.refresh();
-      }
-    } finally {
-      m_masterViewer.getControl().setRedraw(true);
-    }
-  }
+	protected final void refreshFilter(String filterText, boolean addFilter) {
+		try {
+			m_masterViewer.getControl().setRedraw(false);
+			m_filter.setPattern(filterText);
+			//
+			if (addFilter) {
+				m_masterViewer.addFilter(m_filter);
+			} else {
+				m_masterViewer.refresh();
+			}
+		} finally {
+			m_masterViewer.getControl().setRedraw(true);
+		}
+	}
 
-  private static class ObserveFilter extends ViewerFilter {
-    private final SearchPattern m_matcher = new SearchPattern();
+	private static class ObserveFilter extends ViewerFilter {
+		private final SearchPattern m_matcher = new SearchPattern();
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Access
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public void setPattern(String pattern) {
-      m_matcher.setPattern(pattern);
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Access
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public void setPattern(String pattern) {
+			m_matcher.setPattern(pattern);
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // ViewerFilter
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public boolean select(Viewer viewer, Object parent, Object element) {
-      final IObserveInfo observe = (IObserveInfo) element;
-      for (IObserveInfo child : observe.getChildren(IObserveInfo.ChildrenContext.ChildrenForMasterTable)) {
-        if (select(viewer, element, child)) {
-          return true;
-        }
-      }
-      return ExecutionUtils.runObjectLog(new RunnableObjectEx<Boolean>() {
-        @Override
-        public Boolean runObject() throws Exception {
-          return m_matcher.matches(observe.getPresentation().getText());
-        }
-      }, Boolean.FALSE);
-    }
-  }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// ViewerFilter
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public boolean select(Viewer viewer, Object parent, Object element) {
+			final IObserveInfo observe = (IObserveInfo) element;
+			for (IObserveInfo child : observe.getChildren(IObserveInfo.ChildrenContext.ChildrenForMasterTable)) {
+				if (select(viewer, element, child)) {
+					return true;
+				}
+			}
+			return ExecutionUtils.runObjectLog(new RunnableObjectEx<Boolean>() {
+				@Override
+				public Boolean runObject() throws Exception {
+					return m_matcher.matches(observe.getPresentation().getText());
+				}
+			}, Boolean.FALSE);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Properties Filter
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void fillPropertiesFilters() {
-    SelectionListener listener = new SelectionAdapter() {
-      @Override
-      public void widgetSelected(SelectionEvent e) {
-        // prepare menu item
-        MenuItem item = (MenuItem) e.widget;
-        // handle change selection
-        if (item.getSelection()) {
-          PropertyFilter filter = (PropertyFilter) item.getData();
-          m_propertiesFilter.setCurrentFilter(filter);
-          m_propertiesViewer.refresh();
-        }
-      }
-    };
-    // prepare filters
-    List<PropertyFilter> filters = m_databindingsProvider.getObservePropertyFilters();
-    // fill menu
-    for (PropertyFilter filter : filters) {
-      MenuItem item = new MenuItem(m_propertiesFilterMenu, SWT.RADIO);
-      item.setText(filter.getName());
-      item.setImage(filter.getImage());
-      item.setData(filter);
-      item.addSelectionListener(listener);
-    }
-    // set viewer filter
-    if (!filters.isEmpty()) {
-      m_propertiesFilter.setCurrentFilter(filters.get(0));
-      m_propertiesViewer.addFilter(m_propertiesFilter);
-      m_propertiesFilterMenu.getItem(0).setSelection(true);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Properties Filter
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void fillPropertiesFilters() {
+		SelectionListener listener = new SelectionAdapter() {
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				// prepare menu item
+				MenuItem item = (MenuItem) e.widget;
+				// handle change selection
+				if (item.getSelection()) {
+					PropertyFilter filter = (PropertyFilter) item.getData();
+					m_propertiesFilter.setCurrentFilter(filter);
+					m_propertiesViewer.refresh();
+				}
+			}
+		};
+		// prepare filters
+		List<PropertyFilter> filters = m_databindingsProvider.getObservePropertyFilters();
+		// fill menu
+		for (PropertyFilter filter : filters) {
+			MenuItem item = new MenuItem(m_propertiesFilterMenu, SWT.RADIO);
+			item.setText(filter.getName());
+			item.setImage(filter.getImage());
+			item.setData(filter);
+			item.addSelectionListener(listener);
+		}
+		// set viewer filter
+		if (!filters.isEmpty()) {
+			m_propertiesFilter.setCurrentFilter(filters.get(0));
+			m_propertiesViewer.addFilter(m_propertiesFilter);
+			m_propertiesFilterMenu.getItem(0).setSelection(true);
+		}
+	}
 
-  private static class PropertiesFilter extends ViewerFilter {
-    private PropertyFilter m_currentFilter;
+	private static class PropertiesFilter extends ViewerFilter {
+		private PropertyFilter m_currentFilter;
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Access
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public void setCurrentFilter(PropertyFilter currentFilter) {
-      m_currentFilter = currentFilter;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Access
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public void setCurrentFilter(PropertyFilter currentFilter) {
+			m_currentFilter = currentFilter;
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // ViewerFilter
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public boolean select(Viewer viewer, Object parentElement, Object element) {
-      if (m_currentFilter != null) {
-        return m_currentFilter.select(viewer, (IObserveInfo) element);
-      }
-      return true;
-    }
-  }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// ViewerFilter
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public boolean select(Viewer viewer, Object parentElement, Object element) {
+			if (m_currentFilter != null) {
+				return m_currentFilter.select(viewer, (IObserveInfo) element);
+			}
+			return true;
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/ObserveElementsWizardPage.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/ObserveElementsWizardPage.java
index e33509edc..f64d6b751 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/ObserveElementsWizardPage.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/ObserveElementsWizardPage.java
@@ -35,139 +35,139 @@
  * @coverage bindings.ui
  */
 public class ObserveElementsWizardPage extends WizardPage {
-  private final Context m_context;
-  private final IObserveInfo m_observeProperty;
-  private ObserveElementsComposite m_composite;
-  private BindWizardPage m_secondPage;
+	private final Context m_context;
+	private final IObserveInfo m_observeProperty;
+	private ObserveElementsComposite m_composite;
+	private BindWizardPage m_secondPage;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ObserveElementsWizardPage(Context context, IObserveInfo observeProperty) {
-    super("first");
-    m_context = context;
-    m_observeProperty = observeProperty;
-    setTitle(Messages.ObserveElementsWizardPage_title);
-    setMessage(Messages.ObserveElementsWizardPage_message);
-    setPageComplete(false);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ObserveElementsWizardPage(Context context, IObserveInfo observeProperty) {
+		super("first");
+		m_context = context;
+		m_observeProperty = observeProperty;
+		setTitle(Messages.ObserveElementsWizardPage_title);
+		setMessage(Messages.ObserveElementsWizardPage_message);
+		setPageComplete(false);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void setSecondPage(BindWizardPage page) {
-    m_secondPage = page;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void setSecondPage(BindWizardPage page) {
+		m_secondPage = page;
+	}
 
-  public IBindingInfo getBinding() throws Exception {
-    IStructuredSelection modelSelection = EditComposite.getSelection(m_composite, true);
-    IStructuredSelection modelPropertySelection = EditComposite.getSelection(m_composite, false);
-    // prepare model
-    IObserveInfo model = (IObserveInfo) modelSelection.getFirstElement();
-    IObserveInfo modelProperty = (IObserveInfo) modelPropertySelection.getFirstElement();
-    //
-    return m_context.provider.createBinding(
-        m_context.observeObject,
-        m_observeProperty,
-        model,
-        modelProperty);
-  }
+	public IBindingInfo getBinding() throws Exception {
+		IStructuredSelection modelSelection = EditComposite.getSelection(m_composite, true);
+		IStructuredSelection modelPropertySelection = EditComposite.getSelection(m_composite, false);
+		// prepare model
+		IObserveInfo model = (IObserveInfo) modelSelection.getFirstElement();
+		IObserveInfo modelProperty = (IObserveInfo) modelPropertySelection.getFirstElement();
+		//
+		return m_context.provider.createBinding(
+				m_context.observeObject,
+				m_observeProperty,
+				model,
+				modelProperty);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // WizardPage
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void createControl(Composite parent) {
-    Composite container = new Composite(parent, SWT.NONE);
-    GridLayoutFactory.create(container).noMargins().noSpacing();
-    //
-    Composite titleComposite = new Composite(container, SWT.NONE);
-    GridLayoutFactory.create(titleComposite).columns(2);
-    GridDataFactory.create(titleComposite).fillH().grabH();
-    // create title label
-    Label titleLable = new Label(titleComposite, SWT.NONE);
-    titleLable.setText(Messages.ObserveElementsWizardPage_targetLabel);
-    // create value bold label
-    Label valueLabel = new Label(titleComposite, SWT.NONE);
-    GridDataFactory.create(valueLabel).fillH().grabH();
-    UiUtils.setBoldFont(valueLabel);
-    valueLabel.setText(ExecutionUtils.runObjectLog(new RunnableObjectEx<String>() {
-      @Override
-      public String runObject() throws Exception {
-        String text = m_context.observeObject.getPresentation().getTextForBinding();
-        String propertyText = m_observeProperty.getPresentation().getTextForBinding();
-        if (propertyText.length() > 0) {
-          text += "." + propertyText;
-        }
-        return text;
-      }
-    }, "<exception, see log>"));
-    //
-    ISelectionChangedListener listener = new ISelectionChangedListener() {
-      @Override
-      public void selectionChanged(SelectionChangedEvent event) {
-        handleObserveSelection();
-      }
-    };
-    //
-    m_composite =
-        new ObserveElementsComposite(container,
-            SWT.NONE,
-            Messages.ObserveElementsWizardPage_modelLabel,
-            m_context.provider,
-            false);
-    GridDataFactory.create(m_composite).fill().grab();
-    m_composite.showPage(m_context.provider.getModelStartType());
-    m_composite.getMasterViewer().addPostSelectionChangedListener(listener);
-    m_composite.getPropertiesViewer().addPostSelectionChangedListener(listener);
-    //
-    setControl(container);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// WizardPage
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void createControl(Composite parent) {
+		Composite container = new Composite(parent, SWT.NONE);
+		GridLayoutFactory.create(container).noMargins().noSpacing();
+		//
+		Composite titleComposite = new Composite(container, SWT.NONE);
+		GridLayoutFactory.create(titleComposite).columns(2);
+		GridDataFactory.create(titleComposite).fillH().grabH();
+		// create title label
+		Label titleLable = new Label(titleComposite, SWT.NONE);
+		titleLable.setText(Messages.ObserveElementsWizardPage_targetLabel);
+		// create value bold label
+		Label valueLabel = new Label(titleComposite, SWT.NONE);
+		GridDataFactory.create(valueLabel).fillH().grabH();
+		UiUtils.setBoldFont(valueLabel);
+		valueLabel.setText(ExecutionUtils.runObjectLog(new RunnableObjectEx<String>() {
+			@Override
+			public String runObject() throws Exception {
+				String text = m_context.observeObject.getPresentation().getTextForBinding();
+				String propertyText = m_observeProperty.getPresentation().getTextForBinding();
+				if (propertyText.length() > 0) {
+					text += "." + propertyText;
+				}
+				return text;
+			}
+		}, "<exception, see log>"));
+		//
+		ISelectionChangedListener listener = new ISelectionChangedListener() {
+			@Override
+			public void selectionChanged(SelectionChangedEvent event) {
+				handleObserveSelection();
+			}
+		};
+		//
+		m_composite =
+				new ObserveElementsComposite(container,
+						SWT.NONE,
+						Messages.ObserveElementsWizardPage_modelLabel,
+						m_context.provider,
+						false);
+		GridDataFactory.create(m_composite).fill().grab();
+		m_composite.showPage(m_context.provider.getModelStartType());
+		m_composite.getMasterViewer().addPostSelectionChangedListener(listener);
+		m_composite.getPropertiesViewer().addPostSelectionChangedListener(listener);
+		//
+		setControl(container);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Handle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void handleObserveSelection() {
-    IStructuredSelection modelSelection = EditComposite.getSelection(m_composite, true);
-    IStructuredSelection modelPropertySelection = EditComposite.getSelection(m_composite, false);
-    //
-    if (UiUtils.isEmpty(modelSelection) || UiUtils.isEmpty(modelPropertySelection)) {
-      setPageComplete(false);
-    } else {
-      // prepare model
-      IObserveInfo model = (IObserveInfo) modelSelection.getFirstElement();
-      IObserveInfo modelProperty = (IObserveInfo) modelPropertySelection.getFirstElement();
-      // find represented observe
-      for (IBindingInfo binding : m_context.provider.getBindings()) {
-        if (m_context.observeObject == binding.getTarget()
-            && m_observeProperty == binding.getTargetProperty()
-            && model == binding.getModel()
-            && modelProperty == binding.getModelProperty()) {
-          setPageComplete(false);
-          return;
-        }
-      }
-      // validate target and model
-      try {
-        setPageComplete(m_context.provider.validate(
-            m_context.observeObject,
-            m_observeProperty,
-            model,
-            modelProperty));
-        if (isPageComplete()) {
-          m_secondPage.calculateFinish();
-        }
-      } catch (Throwable e) {
-        DesignerPlugin.log(e);
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Handle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void handleObserveSelection() {
+		IStructuredSelection modelSelection = EditComposite.getSelection(m_composite, true);
+		IStructuredSelection modelPropertySelection = EditComposite.getSelection(m_composite, false);
+		//
+		if (UiUtils.isEmpty(modelSelection) || UiUtils.isEmpty(modelPropertySelection)) {
+			setPageComplete(false);
+		} else {
+			// prepare model
+			IObserveInfo model = (IObserveInfo) modelSelection.getFirstElement();
+			IObserveInfo modelProperty = (IObserveInfo) modelPropertySelection.getFirstElement();
+			// find represented observe
+			for (IBindingInfo binding : m_context.provider.getBindings()) {
+				if (m_context.observeObject == binding.getTarget()
+						&& m_observeProperty == binding.getTargetProperty()
+						&& model == binding.getModel()
+						&& modelProperty == binding.getModelProperty()) {
+					setPageComplete(false);
+					return;
+				}
+			}
+			// validate target and model
+			try {
+				setPageComplete(m_context.provider.validate(
+						m_context.observeObject,
+						m_observeProperty,
+						model,
+						modelProperty));
+				if (isPageComplete()) {
+					m_secondPage.calculateFinish();
+				}
+			} catch (Throwable e) {
+				DesignerPlugin.log(e);
+			}
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/ObserveType.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/ObserveType.java
index 6955abb46..8d5958aa9 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/ObserveType.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/ObserveType.java
@@ -25,80 +25,80 @@
  * @coverage bindings.ui
  */
 public final class ObserveType {
-  /**
-   * Java Beans type.
-   */
-  public static final ObserveType BEANS = new ObserveType("Beans",
-      Activator.getImage("Beans_ObserveType.gif"));
-  /**
-   * UI widgets type.
-   */
-  public static final ObserveType WIDGETS = new ObserveType("Widgets",
-      Activator.getImage("Widgets_ObserveType.gif"),
-      ExpandedStrategy.ExpandedAll);
-  //
-  public static final List<ObserveType> TYPES = Lists.newArrayList(
-      ObserveType.WIDGETS,
-      ObserveType.BEANS);
-  //
-  private final String m_name;
-  private final Image m_image;
-  private final ExpandedStrategy m_strategy;
+	/**
+	 * Java Beans type.
+	 */
+	public static final ObserveType BEANS = new ObserveType("Beans",
+			Activator.getImage("Beans_ObserveType.gif"));
+	/**
+	 * UI widgets type.
+	 */
+	public static final ObserveType WIDGETS = new ObserveType("Widgets",
+			Activator.getImage("Widgets_ObserveType.gif"),
+			ExpandedStrategy.ExpandedAll);
+	//
+	public static final List<ObserveType> TYPES = Lists.newArrayList(
+			ObserveType.WIDGETS,
+			ObserveType.BEANS);
+	//
+	private final String m_name;
+	private final Image m_image;
+	private final ExpandedStrategy m_strategy;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ObserveType(String name, Image image) {
-    this(name, image, ExpandedStrategy.None);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ObserveType(String name, Image image) {
+		this(name, image, ExpandedStrategy.None);
+	}
 
-  public ObserveType(String name, Image image, ExpandedStrategy strategy) {
-    m_name = name;
-    m_image = image;
-    m_strategy = strategy;
-  }
+	public ObserveType(String name, Image image, ExpandedStrategy strategy) {
+		m_name = name;
+		m_image = image;
+		m_strategy = strategy;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the name to display for user.
-   */
-  public String getName() {
-    return m_name;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the name to display for user.
+	 */
+	public String getName() {
+		return m_name;
+	}
 
-  /**
-   * @return the image to display for user.
-   */
-  public Image getImage() {
-    return m_image;
-  }
+	/**
+	 * @return the image to display for user.
+	 */
+	public Image getImage() {
+		return m_image;
+	}
 
-  public ExpandedStrategy getExpandedStrategy() {
-    return m_strategy;
-  }
+	public ExpandedStrategy getExpandedStrategy() {
+		return m_strategy;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    return m_name;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		return m_name;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ExpandedStrategy
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static enum ExpandedStrategy {
-    None, ExpandedAll
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ExpandedStrategy
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static enum ExpandedStrategy {
+		None, ExpandedAll
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/SimpleBindDialog.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/SimpleBindDialog.java
index 3580217a1..53f603a11 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/SimpleBindDialog.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/SimpleBindDialog.java
@@ -34,91 +34,91 @@
  * @coverage bindings.ui
  */
 public final class SimpleBindDialog extends ResizableTitleAreaDialog implements IPageListener {
-  private final List<IUiContentProvider> m_providers;
-  private final String m_dialogTitle;
-  private UiContentProviderComposite m_providerComposite;
-  private final String m_title;
-  private final String m_message;
+	private final List<IUiContentProvider> m_providers;
+	private final String m_dialogTitle;
+	private UiContentProviderComposite m_providerComposite;
+	private final String m_title;
+	private final String m_message;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SimpleBindDialog(Shell parentShell,
-      AbstractUIPlugin plugin,
-      List<IUiContentProvider> providers,
-      String dialogTitle,
-      String title,
-      String message) {
-    super(parentShell, plugin);
-    m_providers = providers;
-    m_dialogTitle = dialogTitle;
-    m_title = title;
-    m_message = message;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SimpleBindDialog(Shell parentShell,
+			AbstractUIPlugin plugin,
+			List<IUiContentProvider> providers,
+			String dialogTitle,
+			String title,
+			String message) {
+		super(parentShell, plugin);
+		m_providers = providers;
+		m_dialogTitle = dialogTitle;
+		m_title = title;
+		m_message = message;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Control createDialogArea(Composite parent) {
-    // dialog area
-    Composite container = (Composite) super.createDialogArea(parent);
-    //
-    m_providerComposite = new UiContentProviderComposite(this, m_providers, container, SWT.NONE);
-    GridDataFactory.create(m_providerComposite).fill().grab();
-    //
-    if (m_title != null) {
-      setTitle(m_title);
-    }
-    if (m_message != null) {
-      setMessage(m_message);
-    }
-    //
-    return container;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Control createDialogArea(Composite parent) {
+		// dialog area
+		Composite container = (Composite) super.createDialogArea(parent);
+		//
+		m_providerComposite = new UiContentProviderComposite(this, m_providers, container, SWT.NONE);
+		GridDataFactory.create(m_providerComposite).fill().grab();
+		//
+		if (m_title != null) {
+			setTitle(m_title);
+		}
+		if (m_message != null) {
+			setMessage(m_message);
+		}
+		//
+		return container;
+	}
 
-  @Override
-  protected void createButtonsForButtonBar(Composite parent) {
-    super.createButtonsForButtonBar(parent);
-    // initial state
-    ExecutionUtils.runLog(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        m_providerComposite.performInitialize();
-      }
-    });
-  }
+	@Override
+	protected void createButtonsForButtonBar(Composite parent) {
+		super.createButtonsForButtonBar(parent);
+		// initial state
+		ExecutionUtils.runLog(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				m_providerComposite.performInitialize();
+			}
+		});
+	}
 
-  @Override
-  protected void configureShell(Shell newShell) {
-    // set title
-    newShell.setText(m_dialogTitle);
-    super.configureShell(newShell);
-  }
+	@Override
+	protected void configureShell(Shell newShell) {
+		// set title
+		newShell.setText(m_dialogTitle);
+		super.configureShell(newShell);
+	}
 
-  @Override
-  protected void okPressed() {
-    // handle finish
-    ExecutionUtils.runLog(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        m_providerComposite.performFinish();
-      }
-    });
-    super.okPressed();
-  }
+	@Override
+	protected void okPressed() {
+		// handle finish
+		ExecutionUtils.runLog(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				m_providerComposite.performFinish();
+			}
+		});
+		super.okPressed();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IPageListener
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void setPageComplete(boolean complete) {
-    getButton(IDialogConstants.OK_ID).setEnabled(complete);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IPageListener
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void setPageComplete(boolean complete) {
+		getButton(IDialogConstants.OK_ID).setEnabled(complete);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/UiUtils.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/UiUtils.java
index c7623f175..986d4c600 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/UiUtils.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/UiUtils.java
@@ -47,259 +47,259 @@
  * @coverage bindings.ui
  */
 public final class UiUtils {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Table
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Create table column that load/tracking/save it's width.
-   */
-  public static TableColumn createSmartColumn(Table table,
-      final IDialogSettings settings,
-      final String key,
-      int defautWidth) {
-    // create column
-    final TableColumn column = new TableColumn(table, SWT.NONE);
-    // restore width
-    try {
-      // load width
-      int width = settings.getInt(key);
-      if (width == 0) {
-        width = defautWidth;
-      }
-      // set width
-      column.setWidth(width);
-    } catch (Throwable e) {
-      // set default width
-      column.setWidth(defautWidth);
-      settings.put(key, defautWidth);
-    }
-    // handle resize
-    column.addListener(SWT.Resize, new Listener() {
-      @Override
-      public void handleEvent(Event event) {
-        settings.put(key, column.getWidth());
-      }
-    });
-    //
-    return column;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Table
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Create table column that load/tracking/save it's width.
+	 */
+	public static TableColumn createSmartColumn(Table table,
+			final IDialogSettings settings,
+			final String key,
+			int defautWidth) {
+		// create column
+		final TableColumn column = new TableColumn(table, SWT.NONE);
+		// restore width
+		try {
+			// load width
+			int width = settings.getInt(key);
+			if (width == 0) {
+				width = defautWidth;
+			}
+			// set width
+			column.setWidth(width);
+		} catch (Throwable e) {
+			// set default width
+			column.setWidth(defautWidth);
+			settings.put(key, defautWidth);
+		}
+		// handle resize
+		column.addListener(SWT.Resize, new Listener() {
+			@Override
+			public void handleEvent(Event event) {
+				settings.put(key, column.getWidth());
+			}
+		});
+		//
+		return column;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // SashForm
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets weights for sash from dialog settings.
-   */
-  public static void loadSashWeights(SashForm sash,
-      IDialogSettings settings,
-      String key,
-      int[] defaultWeights) {
-    try {
-      // load values
-      int x = settings.getInt(key + ".x");
-      int y = settings.getInt(key + ".y");
-      // set values
-      sash.setWeights(new int[]{x, y});
-    } catch (Throwable e) {
-      // use default values
-      sash.setWeights(defaultWeights);
-      // save default values
-      Assert.isLegal(defaultWeights.length == 2);
-      settings.put(key + ".x", defaultWeights[0]);
-      settings.put(key + ".y", defaultWeights[1]);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// SashForm
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets weights for sash from dialog settings.
+	 */
+	public static void loadSashWeights(SashForm sash,
+			IDialogSettings settings,
+			String key,
+			int[] defaultWeights) {
+		try {
+			// load values
+			int x = settings.getInt(key + ".x");
+			int y = settings.getInt(key + ".y");
+			// set values
+			sash.setWeights(new int[]{x, y});
+		} catch (Throwable e) {
+			// use default values
+			sash.setWeights(defaultWeights);
+			// save default values
+			Assert.isLegal(defaultWeights.length == 2);
+			settings.put(key + ".x", defaultWeights[0]);
+			settings.put(key + ".y", defaultWeights[1]);
+		}
+	}
 
-  /**
-   * Put sash weights to dialog settings.
-   */
-  public static void saveSashWeights(SashForm sash, IDialogSettings settings, String key) {
-    int[] weights = sash.getWeights();
-    Assert.isLegal(weights.length == 2);
-    settings.put(key + ".x", weights[0]);
-    settings.put(key + ".y", weights[1]);
-  }
+	/**
+	 * Put sash weights to dialog settings.
+	 */
+	public static void saveSashWeights(SashForm sash, IDialogSettings settings, String key) {
+		int[] weights = sash.getWeights();
+		Assert.isLegal(weights.length == 2);
+		settings.put(key + ".x", weights[0]);
+		settings.put(key + ".y", weights[1]);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Label
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets to label bold version of it font.
-   */
-  public static void setBoldFont(Label label) {
-    label.setFont(SwtResourceManager.getBoldFont(label.getFont()));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Label
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets to label bold version of it font.
+	 */
+	public static void setBoldFont(Label label) {
+		label.setFont(SwtResourceManager.getBoldFont(label.getFont()));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Dialog
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Returns the section with the given name in given dialog settings.
-   */
-  public static IDialogSettings getSettings(IDialogSettings mainSettings, String sectionName) {
-    IDialogSettings settings = mainSettings.getSection(sectionName);
-    return settings == null ? mainSettings.addNewSection(sectionName) : settings;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Dialog
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Returns the section with the given name in given dialog settings.
+	 */
+	public static IDialogSettings getSettings(IDialogSettings mainSettings, String sectionName) {
+		IDialogSettings settings = mainSettings.getSection(sectionName);
+		return settings == null ? mainSettings.addNewSection(sectionName) : settings;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Viewer
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Returns whether this selection is empty.
-   */
-  public static boolean isEmpty(ISelection selection) {
-    return selection == null || selection.isEmpty();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Viewer
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Returns whether this selection is empty.
+	 */
+	public static boolean isEmpty(ISelection selection) {
+		return selection == null || selection.isEmpty();
+	}
 
-  public static IStructuredSelection getSelection(Viewer viewer) {
-    return (IStructuredSelection) viewer.getSelection();
-  }
+	public static IStructuredSelection getSelection(Viewer viewer) {
+		return (IStructuredSelection) viewer.getSelection();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Dialogs
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Open {@link SelectionDialog} for choose type.
-   */
-  public static String chooseType(Shell shell, IJavaProject project, String baseClassName, int style)
-      throws Exception {
-    // prepare scope
-    IJavaSearchScope scope = null;
-    if (project != null && baseClassName != null) {
-      IType classType = project.findType(baseClassName);
-      if (classType != null) {
-        scope = SearchEngine.createHierarchyScope(classType);
-      }
-    }
-    // open dialog
-    return chooseType(shell, scope, style);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Dialogs
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Open {@link SelectionDialog} for choose type.
+	 */
+	public static String chooseType(Shell shell, IJavaProject project, String baseClassName, int style)
+			throws Exception {
+		// prepare scope
+		IJavaSearchScope scope = null;
+		if (project != null && baseClassName != null) {
+			IType classType = project.findType(baseClassName);
+			if (classType != null) {
+				scope = SearchEngine.createHierarchyScope(classType);
+			}
+		}
+		// open dialog
+		return chooseType(shell, scope, style);
+	}
 
-  /**
-   * Open {@link SelectionDialog} for choose type.
-   */
-  public static String chooseType(Shell shell,
-      IJavaProject project,
-      String[] baseClassNames,
-      int style) throws Exception {
-    // prepare scope
-    IJavaSearchScope scope = null;
-    if (project != null && !ArrayUtils.isEmpty(baseClassNames)) {
-      IJavaSearchScope[] scopes = new IJavaSearchScope[baseClassNames.length];
-      for (int i = 0; i < scopes.length; i++) {
-        IType classType = project.findType(baseClassNames[i]);
-        if (classType != null) {
-          scopes[i] = SearchEngine.createHierarchyScope(classType);
-        }
-      }
-      scope = scopes.length == 1 ? scopes[0] : new MultiHierarchyScope(scopes);
-    }
-    // open dialog
-    return chooseType(shell, scope, style);
-  }
+	/**
+	 * Open {@link SelectionDialog} for choose type.
+	 */
+	public static String chooseType(Shell shell,
+			IJavaProject project,
+			String[] baseClassNames,
+			int style) throws Exception {
+		// prepare scope
+		IJavaSearchScope scope = null;
+		if (project != null && !ArrayUtils.isEmpty(baseClassNames)) {
+			IJavaSearchScope[] scopes = new IJavaSearchScope[baseClassNames.length];
+			for (int i = 0; i < scopes.length; i++) {
+				IType classType = project.findType(baseClassNames[i]);
+				if (classType != null) {
+					scopes[i] = SearchEngine.createHierarchyScope(classType);
+				}
+			}
+			scope = scopes.length == 1 ? scopes[0] : new MultiHierarchyScope(scopes);
+		}
+		// open dialog
+		return chooseType(shell, scope, style);
+	}
 
-  public static String chooseType(Shell shell, IJavaSearchScope scope, int style) throws Exception {
-    // prepare dialog
-    ProgressMonitorDialog context = new ProgressMonitorDialog(shell);
-    SelectionDialog dialog = JavaUI.createTypeDialog(shell, context, scope, style, false);
-    dialog.setTitle(Messages.UiUtils_openTypeTitle);
-    dialog.setMessage(Messages.UiUtils_openTypeMessage);
-    // open dialog
-    if (dialog.open() == Window.OK) {
-      IType type = (IType) dialog.getResult()[0];
-      return type.getFullyQualifiedName().replace('$', '.');
-    }
-    return null;
-  }
+	public static String chooseType(Shell shell, IJavaSearchScope scope, int style) throws Exception {
+		// prepare dialog
+		ProgressMonitorDialog context = new ProgressMonitorDialog(shell);
+		SelectionDialog dialog = JavaUI.createTypeDialog(shell, context, scope, style, false);
+		dialog.setTitle(Messages.UiUtils_openTypeTitle);
+		dialog.setMessage(Messages.UiUtils_openTypeMessage);
+		// open dialog
+		if (dialog.open() == Window.OK) {
+			IType type = (IType) dialog.getResult()[0];
+			return type.getFullyQualifiedName().replace('$', '.');
+		}
+		return null;
+	}
 
-  private static class MultiHierarchyScope implements IJavaSearchScope {
-    private final IJavaSearchScope[] m_scopes;
+	private static class MultiHierarchyScope implements IJavaSearchScope {
+		private final IJavaSearchScope[] m_scopes;
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public MultiHierarchyScope(IJavaSearchScope[] scopes) {
-      m_scopes = scopes;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public MultiHierarchyScope(IJavaSearchScope[] scopes) {
+			m_scopes = scopes;
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // IJavaSearchScope
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public boolean encloses(String resourcePath) {
-      for (IJavaSearchScope scope : m_scopes) {
-        if (scope != null && scope.encloses(resourcePath)) {
-          return true;
-        }
-      }
-      return false;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// IJavaSearchScope
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public boolean encloses(String resourcePath) {
+			for (IJavaSearchScope scope : m_scopes) {
+				if (scope != null && scope.encloses(resourcePath)) {
+					return true;
+				}
+			}
+			return false;
+		}
 
-    @Override
-    public boolean encloses(IJavaElement element) {
-      for (IJavaSearchScope scope : m_scopes) {
-        if (scope != null && scope.encloses(element)) {
-          return true;
-        }
-      }
-      return false;
-    }
+		@Override
+		public boolean encloses(IJavaElement element) {
+			for (IJavaSearchScope scope : m_scopes) {
+				if (scope != null && scope.encloses(element)) {
+					return true;
+				}
+			}
+			return false;
+		}
 
-    @Override
-    public IPath[] enclosingProjectsAndJars() {
-      for (IJavaSearchScope scope : m_scopes) {
-        if (scope != null) {
-          return scope.enclosingProjectsAndJars();
-        }
-      }
-      return null;
-    }
+		@Override
+		public IPath[] enclosingProjectsAndJars() {
+			for (IJavaSearchScope scope : m_scopes) {
+				if (scope != null) {
+					return scope.enclosingProjectsAndJars();
+				}
+			}
+			return null;
+		}
 
-    @Override
-    public boolean includesBinaries() {
-      return true;
-    }
+		@Override
+		public boolean includesBinaries() {
+			return true;
+		}
 
-    @Override
-    public boolean includesClasspaths() {
-      return true;
-    }
+		@Override
+		public boolean includesClasspaths() {
+			return true;
+		}
 
-    @Override
-    public void setIncludesBinaries(boolean includesBinaries) {
-    }
+		@Override
+		public void setIncludesBinaries(boolean includesBinaries) {
+		}
 
-    @Override
-    public void setIncludesClasspaths(boolean includesClasspaths) {
-    }
-  }
+		@Override
+		public void setIncludesClasspaths(boolean includesClasspaths) {
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IObserve
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static String getPresentationText(IObserveInfo object, IObserveInfo property)
-      throws Exception {
-    String objectPresentation = object.getPresentation().getTextForBinding();
-    String propertyPresentation = property.getPresentation().getTextForBinding();
-    String separator = propertyPresentation.length() == 0 ? "" : ".";
-    return objectPresentation + separator + propertyPresentation;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IObserve
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static String getPresentationText(IObserveInfo object, IObserveInfo property)
+			throws Exception {
+		String objectPresentation = object.getPresentation().getTextForBinding();
+		String propertyPresentation = property.getPresentation().getTextForBinding();
+		String separator = propertyPresentation.length() == 0 ? "" : ".";
+		return objectPresentation + separator + propertyPresentation;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/decorate/BoldItalicObserveDecorator.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/decorate/BoldItalicObserveDecorator.java
index 3cfb3d6bd..cb75fa0d1 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/decorate/BoldItalicObserveDecorator.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/decorate/BoldItalicObserveDecorator.java
@@ -19,13 +19,13 @@
  * @coverage bindings.ui
  */
 public class BoldItalicObserveDecorator extends ObserveDecorator {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IObserveDecorator
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Font getFont(Font baseItalicFont, Font baseBoldFont, Font baseBoldItalicFont) {
-    return baseBoldItalicFont;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IObserveDecorator
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Font getFont(Font baseItalicFont, Font baseBoldFont, Font baseBoldItalicFont) {
+		return baseBoldItalicFont;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/decorate/BoldObserveDecorator.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/decorate/BoldObserveDecorator.java
index 5ed0260a3..3640802e7 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/decorate/BoldObserveDecorator.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/decorate/BoldObserveDecorator.java
@@ -19,13 +19,13 @@
  * @coverage bindings.ui
  */
 public class BoldObserveDecorator extends ObserveDecorator {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IObserveDecorator
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Font getFont(Font baseItalicFont, Font baseBoldFont, Font baseBoldItalicFont) {
-    return baseBoldFont;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IObserveDecorator
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Font getFont(Font baseItalicFont, Font baseBoldFont, Font baseBoldItalicFont) {
+		return baseBoldFont;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/decorate/GrayColorObserveDecorator.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/decorate/GrayColorObserveDecorator.java
index 84adc3d25..7cd0d104d 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/decorate/GrayColorObserveDecorator.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/decorate/GrayColorObserveDecorator.java
@@ -21,13 +21,13 @@
  * @coverage bindings.ui
  */
 public class GrayColorObserveDecorator extends ObserveDecorator {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IObserveDecorator
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Color getForeground() {
-    return IColorConstants.gray;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IObserveDecorator
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Color getForeground() {
+		return IColorConstants.gray;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/decorate/IObserveDecorator.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/decorate/IObserveDecorator.java
index 16cfcd755..d7cdf026a 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/decorate/IObserveDecorator.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/decorate/IObserveDecorator.java
@@ -22,24 +22,24 @@
  * @coverage bindings.ui
  */
 public interface IObserveDecorator {
-  IObserveDecorator DEFAULT = new ObserveDecorator();
-  IObserveDecorator ITALIC = new ItalicObserveDecorator();
-  IObserveDecorator BOLD = new BoldObserveDecorator();
-  IObserveDecorator BOLD_ITALIC = new BoldItalicObserveDecorator();
-  IObserveDecorator HIDDEN = new GrayColorObserveDecorator();
+	IObserveDecorator DEFAULT = new ObserveDecorator();
+	IObserveDecorator ITALIC = new ItalicObserveDecorator();
+	IObserveDecorator BOLD = new BoldObserveDecorator();
+	IObserveDecorator BOLD_ITALIC = new BoldItalicObserveDecorator();
+	IObserveDecorator HIDDEN = new GrayColorObserveDecorator();
 
-  /**
-   * @return the foreground Color for decorate host {@link IObserveInfo} or <code>null</code>.
-   */
-  Color getForeground();
+	/**
+	 * @return the foreground Color for decorate host {@link IObserveInfo} or <code>null</code>.
+	 */
+	Color getForeground();
 
-  /**
-   * @return the background Color for decorate host {@link IObserveInfo} or <code>null</code>.
-   */
-  Color getBackground();
+	/**
+	 * @return the background Color for decorate host {@link IObserveInfo} or <code>null</code>.
+	 */
+	Color getBackground();
 
-  /**
-   * @return the Font for decorate host {@link IObserveInfo} or <code>null</code>.
-   */
-  Font getFont(Font baseItalicFont, Font baseBoldFont, Font baseBoldItalicFont);
+	/**
+	 * @return the Font for decorate host {@link IObserveInfo} or <code>null</code>.
+	 */
+	Font getFont(Font baseItalicFont, Font baseBoldFont, Font baseBoldItalicFont);
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/decorate/ItalicObserveDecorator.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/decorate/ItalicObserveDecorator.java
index f4d08b178..fcea36041 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/decorate/ItalicObserveDecorator.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/decorate/ItalicObserveDecorator.java
@@ -19,13 +19,13 @@
  * @coverage bindings.ui
  */
 public class ItalicObserveDecorator extends ObserveDecorator {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IObserveDecorator
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Font getFont(Font baseItalicFont, Font baseBoldFont, Font baseBoldItalicFont) {
-    return baseItalicFont;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IObserveDecorator
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Font getFont(Font baseItalicFont, Font baseBoldFont, Font baseBoldItalicFont) {
+		return baseItalicFont;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/decorate/ObserveDecorator.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/decorate/ObserveDecorator.java
index 373b40ca1..f4c3fd0a4 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/decorate/ObserveDecorator.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/decorate/ObserveDecorator.java
@@ -20,23 +20,23 @@
  * @coverage bindings.ui
  */
 public class ObserveDecorator implements IObserveDecorator {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IObserveDecorator
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Color getForeground() {
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IObserveDecorator
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Color getForeground() {
+		return null;
+	}
 
-  @Override
-  public Color getBackground() {
-    return null;
-  }
+	@Override
+	public Color getBackground() {
+		return null;
+	}
 
-  @Override
-  public Font getFont(Font baseItalicFont, Font baseBoldFont, Font baseBoldItalicFont) {
-    return null;
-  }
+	@Override
+	public Font getFont(Font baseItalicFont, Font baseBoldFont, Font baseBoldItalicFont) {
+		return null;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/DialogFieldUiContentProvider.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/DialogFieldUiContentProvider.java
index fac077d3b..506dfb369 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/DialogFieldUiContentProvider.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/DialogFieldUiContentProvider.java
@@ -28,85 +28,85 @@
  * @coverage bindings.ui
  */
 public abstract class DialogFieldUiContentProvider implements IUiContentProvider {
-  private Shell m_shell;
-  private ICompleteListener m_listener;
-  private String m_errorMessage;
+	private Shell m_shell;
+	private ICompleteListener m_listener;
+	private String m_errorMessage;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Complete
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final void setCompleteListener(ICompleteListener listener) {
-    m_listener = listener;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Complete
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final void setCompleteListener(ICompleteListener listener) {
+		m_listener = listener;
+	}
 
-  @Override
-  public final String getErrorMessage() {
-    return m_errorMessage;
-  }
+	@Override
+	public final String getErrorMessage() {
+		return m_errorMessage;
+	}
 
-  protected final ICompleteListener getListener() {
-    return m_listener;
-  }
+	protected final ICompleteListener getListener() {
+		return m_listener;
+	}
 
-  /**
-   * Sets or clears the error message for this provider.
-   */
-  protected final void setErrorMessage(String message) {
-    m_errorMessage = message;
-    if (m_listener != null) {
-      m_listener.calculateFinish();
-    }
-  }
+	/**
+	 * Sets or clears the error message for this provider.
+	 */
+	protected final void setErrorMessage(String message) {
+		m_errorMessage = message;
+		if (m_listener != null) {
+			m_listener.calculateFinish();
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final int getNumberOfControls() {
-    return getDialogField().getNumberOfControls();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final int getNumberOfControls() {
+		return getDialogField().getNumberOfControls();
+	}
 
-  @Override
-  public void createContent(Composite parent, int columns) {
-    getDialogField().doFillIntoGrid(parent, columns);
-    m_shell = parent.getShell();
-  }
+	@Override
+	public void createContent(Composite parent, int columns) {
+		getDialogField().doFillIntoGrid(parent, columns);
+		m_shell = parent.getShell();
+	}
 
-  /**
-   * Helper method for access to {@link Shell}.
-   */
-  protected final Shell getShell() {
-    return m_shell;
-  }
+	/**
+	 * Helper method for access to {@link Shell}.
+	 */
+	protected final Shell getShell() {
+		return m_shell;
+	}
 
-  /**
-   * @return {@link DialogField} that represented GUI object for this provider.
-   */
-  public abstract DialogField getDialogField();
+	/**
+	 * @return {@link DialogField} that represented GUI object for this provider.
+	 */
+	public abstract DialogField getDialogField();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ClassLoader
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Helper method for load classes over editor class loader.
-   */
-  protected Class<?> loadClass(String className) throws ClassNotFoundException {
-    return CoreUtils.load(JavaInfoUtils.getClassLoader(EditorState.getActiveJavaInfo()), className);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ClassLoader
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Helper method for load classes over editor class loader.
+	 */
+	protected Class<?> loadClass(String className) throws ClassNotFoundException {
+		return CoreUtils.load(JavaInfoUtils.getClassLoader(EditorState.getActiveJavaInfo()), className);
+	}
 
-  /**
-   * Helper method for access to current (enclosing project for editing compilation unit)
-   * {@link IJavaProject}.
-   */
-  protected IJavaProject getJavaProject() {
-    AstEditor editor = EditorState.getActiveJavaInfo().getEditor();
-    return editor.getJavaProject();
-  }
+	/**
+	 * Helper method for access to current (enclosing project for editing compilation unit)
+	 * {@link IJavaProject}.
+	 */
+	protected IJavaProject getJavaProject() {
+		AstEditor editor = EditorState.getActiveJavaInfo().getEditor();
+		return editor.getJavaProject();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/EmptyPageListener.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/EmptyPageListener.java
index 053c11af8..7f8aa3f10 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/EmptyPageListener.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/EmptyPageListener.java
@@ -19,30 +19,30 @@
  * @coverage bindings.ui
  */
 public class EmptyPageListener implements IPageListener {
-  public static final IPageListener INSTANCE = new EmptyPageListener();
+	public static final IPageListener INSTANCE = new EmptyPageListener();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IPageListener
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void setErrorMessage(String newMessage) {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IPageListener
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void setErrorMessage(String newMessage) {
+	}
 
-  @Override
-  public void setMessage(String newMessage) {
-  }
+	@Override
+	public void setMessage(String newMessage) {
+	}
 
-  @Override
-  public void setPageComplete(boolean complete) {
-  }
+	@Override
+	public void setPageComplete(boolean complete) {
+	}
 
-  @Override
-  public void setTitle(String title) {
-  }
+	@Override
+	public void setTitle(String title) {
+	}
 
-  @Override
-  public void setTitleImage(Image image) {
-  }
+	@Override
+	public void setTitleImage(Image image) {
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/ICompleteListener.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/ICompleteListener.java
index 8c286765f..321c190e8 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/ICompleteListener.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/ICompleteListener.java
@@ -17,8 +17,8 @@
  * @coverage bindings.ui
  */
 public interface ICompleteListener {
-  /**
-   * Notify for recalculate finish state.
-   */
-  void calculateFinish();
+	/**
+	 * Notify for recalculate finish state.
+	 */
+	void calculateFinish();
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/IPageListener.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/IPageListener.java
index 10fcb3384..433e159d1 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/IPageListener.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/IPageListener.java
@@ -24,28 +24,28 @@
  * @coverage bindings.ui
  */
 public interface IPageListener {
-  /**
-   * Sets this dialog/wizard page's title.
-   */
-  void setTitle(String title);
+	/**
+	 * Sets this dialog/wizard page's title.
+	 */
+	void setTitle(String title);
 
-  /**
-   * Sets this dialog/wizard page's {@link Image}.
-   */
-  void setTitleImage(Image image);
+	/**
+	 * Sets this dialog/wizard page's {@link Image}.
+	 */
+	void setTitleImage(Image image);
 
-  /**
-   * Sets or clears the message for this page.
-   */
-  void setMessage(String newMessage);
+	/**
+	 * Sets or clears the message for this page.
+	 */
+	void setMessage(String newMessage);
 
-  /**
-   * Sets or clears the error message for this page.
-   */
-  void setErrorMessage(String newMessage);
+	/**
+	 * Sets or clears the error message for this page.
+	 */
+	void setErrorMessage(String newMessage);
 
-  /**
-   * Sets whether this page is complete.
-   */
-  void setPageComplete(boolean complete);
+	/**
+	 * Sets whether this page is complete.
+	 */
+	void setPageComplete(boolean complete);
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/IUiContentProvider.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/IUiContentProvider.java
index e7194e9a6..6211df155 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/IUiContentProvider.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/IUiContentProvider.java
@@ -19,49 +19,49 @@
  * @coverage bindings.ui
  */
 public interface IUiContentProvider {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Complete
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets listener for notification of calculate state.
-   */
-  void setCompleteListener(ICompleteListener listener);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Complete
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets listener for notification of calculate state.
+	 */
+	void setCompleteListener(ICompleteListener listener);
 
-  /**
-   * @return current error state message or <code>null</code>.
-   */
-  String getErrorMessage();
+	/**
+	 * @return current error state message or <code>null</code>.
+	 */
+	String getErrorMessage();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the number of columns of the content provider.
-   */
-  int getNumberOfControls();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the number of columns of the content provider.
+	 */
+	int getNumberOfControls();
 
-  /**
-   * Creates all controls of the content provider and fills it to a composite. The composite is
-   * assumed to have <code>GridLayout</code> as layout.
-   */
-  void createContent(Composite parent, int columns);
+	/**
+	 * Creates all controls of the content provider and fills it to a composite. The composite is
+	 * assumed to have <code>GridLayout</code> as layout.
+	 */
+	void createContent(Composite parent, int columns);
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Update
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Invoke for initialize all controls of the content provider from edit object.
-   */
-  void updateFromObject() throws Exception;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Update
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Invoke for initialize all controls of the content provider from edit object.
+	 */
+	void updateFromObject() throws Exception;
 
-  /**
-   * Invoke for save changes of edit object.
-   */
-  void saveToObject() throws Exception;
+	/**
+	 * Invoke for save changes of edit object.
+	 */
+	void saveToObject() throws Exception;
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/PageListenerWrapper.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/PageListenerWrapper.java
index e10a020da..c516ff0e8 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/PageListenerWrapper.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/PageListenerWrapper.java
@@ -19,67 +19,67 @@
  * @coverage bindings.ui
  */
 public final class PageListenerWrapper implements IPageListener {
-  private final IPageListener m_pageListener;
-  private final ICompleteListener m_completeListener;
-  private String m_message;
-  private String m_errorMessage;
+	private final IPageListener m_pageListener;
+	private final ICompleteListener m_completeListener;
+	private String m_message;
+	private String m_errorMessage;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public PageListenerWrapper(IPageListener pageListener, ICompleteListener completeListener) {
-    m_pageListener = pageListener;
-    m_completeListener = completeListener;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public PageListenerWrapper(IPageListener pageListener, ICompleteListener completeListener) {
+		m_pageListener = pageListener;
+		m_completeListener = completeListener;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IPageListener
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void setTitle(String title) {
-    m_pageListener.setTitle(title);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IPageListener
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void setTitle(String title) {
+		m_pageListener.setTitle(title);
+	}
 
-  @Override
-  public void setTitleImage(Image image) {
-    m_pageListener.setTitleImage(image);
-  }
+	@Override
+	public void setTitleImage(Image image) {
+		m_pageListener.setTitleImage(image);
+	}
 
-  @Override
-  public void setMessage(String newMessage) {
-    m_message = newMessage;
-  }
+	@Override
+	public void setMessage(String newMessage) {
+		m_message = newMessage;
+	}
 
-  @Override
-  public void setErrorMessage(String newMessage) {
-    m_errorMessage = newMessage;
-  }
+	@Override
+	public void setErrorMessage(String newMessage) {
+		m_errorMessage = newMessage;
+	}
 
-  @Override
-  public void setPageComplete(boolean complete) {
-    m_completeListener.calculateFinish();
-  }
+	@Override
+	public void setPageComplete(boolean complete) {
+		m_completeListener.calculateFinish();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return current state message or <code>null</code>.
-   */
-  public String getMessage() {
-    return m_message;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return current state message or <code>null</code>.
+	 */
+	public String getMessage() {
+		return m_message;
+	}
 
-  /**
-   * @return current error state message or <code>null</code>.
-   */
-  public String getErrorMessage() {
-    return m_errorMessage;
-  }
+	/**
+	 * @return current error state message or <code>null</code>.
+	 */
+	public String getErrorMessage() {
+		return m_errorMessage;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/UiContentProviderAdapter.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/UiContentProviderAdapter.java
index b9f98a8a8..86d066219 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/UiContentProviderAdapter.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/UiContentProviderAdapter.java
@@ -18,30 +18,30 @@
  * @coverage bindings.ui
  */
 public abstract class UiContentProviderAdapter implements IUiContentProvider {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Complete
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void setCompleteListener(ICompleteListener listener) {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Complete
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void setCompleteListener(ICompleteListener listener) {
+	}
 
-  @Override
-  public String getErrorMessage() {
-    return null;
-  }
+	@Override
+	public String getErrorMessage() {
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Update
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void updateFromObject() throws Exception {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Update
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void updateFromObject() throws Exception {
+	}
 
-  @Override
-  public void saveToObject() throws Exception {
-  }
+	@Override
+	public void saveToObject() throws Exception {
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/UiContentProviderComposite.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/UiContentProviderComposite.java
index b0519008b..1da518879 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/UiContentProviderComposite.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/UiContentProviderComposite.java
@@ -23,73 +23,73 @@
  * @coverage bindings.ui
  */
 public class UiContentProviderComposite extends Composite implements ICompleteListener {
-  private final IPageListener m_listener;
-  private final List<IUiContentProvider> m_providers;
+	private final IPageListener m_listener;
+	private final List<IUiContentProvider> m_providers;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public UiContentProviderComposite(IPageListener listener,
-      List<IUiContentProvider> providers,
-      Composite parent,
-      int style) {
-    super(parent, style);
-    m_listener = listener;
-    m_providers = providers;
-    // calculate columns
-    int columns = 0;
-    for (IUiContentProvider provider : m_providers) {
-      columns = Math.max(columns, provider.getNumberOfControls());
-    }
-    // create controls and fill composite
-    GridLayoutFactory.create(this).columns(columns);
-    for (IUiContentProvider provider : m_providers) {
-      provider.setCompleteListener(this);
-      provider.createContent(this, columns);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public UiContentProviderComposite(IPageListener listener,
+			List<IUiContentProvider> providers,
+			Composite parent,
+			int style) {
+		super(parent, style);
+		m_listener = listener;
+		m_providers = providers;
+		// calculate columns
+		int columns = 0;
+		for (IUiContentProvider provider : m_providers) {
+			columns = Math.max(columns, provider.getNumberOfControls());
+		}
+		// create controls and fill composite
+		GridLayoutFactory.create(this).columns(columns);
+		for (IUiContentProvider provider : m_providers) {
+			provider.setCompleteListener(this);
+			provider.createContent(this, columns);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ICompleteListener
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void calculateFinish() {
-    for (IUiContentProvider provider : m_providers) {
-      String errorMessage = provider.getErrorMessage();
-      // handle provider error
-      if (errorMessage != null) {
-        m_listener.setErrorMessage(errorMessage);
-        m_listener.setPageComplete(false);
-        return;
-      }
-    }
-    // no errors
-    m_listener.setErrorMessage(null);
-    m_listener.setPageComplete(true);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ICompleteListener
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void calculateFinish() {
+		for (IUiContentProvider provider : m_providers) {
+			String errorMessage = provider.getErrorMessage();
+			// handle provider error
+			if (errorMessage != null) {
+				m_listener.setErrorMessage(errorMessage);
+				m_listener.setPageComplete(false);
+				return;
+			}
+		}
+		// no errors
+		m_listener.setErrorMessage(null);
+		m_listener.setPageComplete(true);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Initialize/Finish
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void performInitialize() throws Exception {
-    for (IUiContentProvider provider : m_providers) {
-      provider.updateFromObject();
-    }
-    calculateFinish();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Initialize/Finish
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void performInitialize() throws Exception {
+		for (IUiContentProvider provider : m_providers) {
+			provider.updateFromObject();
+		}
+		calculateFinish();
+	}
 
-  /**
-   * Invoke for save changes for all content providers.
-   */
-  public void performFinish() throws Exception {
-    for (IUiContentProvider provider : m_providers) {
-      provider.saveToObject();
-    }
-  }
+	/**
+	 * Invoke for save changes for all content providers.
+	 */
+	public void performFinish() throws Exception {
+		for (IUiContentProvider provider : m_providers) {
+			provider.saveToObject();
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/contentproviders/BindingContentProvider.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/contentproviders/BindingContentProvider.java
index b561eb9a2..e7490a445 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/contentproviders/BindingContentProvider.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/contentproviders/BindingContentProvider.java
@@ -48,158 +48,158 @@
  * @coverage bindings.ui
  */
 public final class BindingContentProvider implements IUiContentProvider {
-  private final Set<String> m_fields = Sets.newHashSet();
-  private final IASTObjectInfo2 m_binding;
-  private final JavaInfo m_javaInfoRoot;
-  private ExpandableComposite m_expandableComposite;
-  private Button m_assignButton;
-  private Text m_fieldNameText;
-  private String m_fieldName;
-  private ICompleteListener m_listener;
-  private String m_errorMessage;
+	private final Set<String> m_fields = Sets.newHashSet();
+	private final IASTObjectInfo2 m_binding;
+	private final JavaInfo m_javaInfoRoot;
+	private ExpandableComposite m_expandableComposite;
+	private Button m_assignButton;
+	private Text m_fieldNameText;
+	private String m_fieldName;
+	private ICompleteListener m_listener;
+	private String m_errorMessage;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public BindingContentProvider(IASTObjectInfo2 binding, JavaInfo javaInfoRoot) {
-    m_binding = binding;
-    m_javaInfoRoot = javaInfoRoot;
-    TypeDeclaration rootNode = JavaInfoUtils.getTypeDeclaration(m_javaInfoRoot);
-    for (FieldDeclaration field : rootNode.getFields()) {
-      for (VariableDeclarationFragment fragment : DomGenerics.fragments(field)) {
-        m_fields.add(fragment.getName().getIdentifier());
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public BindingContentProvider(IASTObjectInfo2 binding, JavaInfo javaInfoRoot) {
+		m_binding = binding;
+		m_javaInfoRoot = javaInfoRoot;
+		TypeDeclaration rootNode = JavaInfoUtils.getTypeDeclaration(m_javaInfoRoot);
+		for (FieldDeclaration field : rootNode.getFields()) {
+			for (VariableDeclarationFragment fragment : DomGenerics.fragments(field)) {
+				m_fields.add(fragment.getName().getIdentifier());
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Complete
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void setCompleteListener(ICompleteListener listener) {
-    m_listener = listener;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Complete
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void setCompleteListener(ICompleteListener listener) {
+		m_listener = listener;
+	}
 
-  @Override
-  public String getErrorMessage() {
-    return m_errorMessage;
-  }
+	@Override
+	public String getErrorMessage() {
+		return m_errorMessage;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public int getNumberOfControls() {
-    return 1;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public int getNumberOfControls() {
+		return 1;
+	}
 
-  @Override
-  public void createContent(final Composite parent, int columns) {
-    // expand composite
-    m_expandableComposite = new ExpandableComposite(parent, SWT.NONE);
-    m_expandableComposite.setText(Messages.BindingContentProvider_binding);
-    m_expandableComposite.setExpanded(true);
-    GridDataFactory.create(m_expandableComposite).fillH().grabH().spanH(columns);
-    m_expandableComposite.addExpansionListener(new IExpansionListener() {
-      @Override
-      public void expansionStateChanging(ExpansionEvent e) {
-        if (m_expandableComposite.isExpanded()) {
-          m_expandableComposite.setText(Messages.BindingContentProvider_bindingDots);
-        } else {
-          m_expandableComposite.setText(Messages.BindingContentProvider_binding);
-        }
-      }
+	@Override
+	public void createContent(final Composite parent, int columns) {
+		// expand composite
+		m_expandableComposite = new ExpandableComposite(parent, SWT.NONE);
+		m_expandableComposite.setText(Messages.BindingContentProvider_binding);
+		m_expandableComposite.setExpanded(true);
+		GridDataFactory.create(m_expandableComposite).fillH().grabH().spanH(columns);
+		m_expandableComposite.addExpansionListener(new IExpansionListener() {
+			@Override
+			public void expansionStateChanging(ExpansionEvent e) {
+				if (m_expandableComposite.isExpanded()) {
+					m_expandableComposite.setText(Messages.BindingContentProvider_bindingDots);
+				} else {
+					m_expandableComposite.setText(Messages.BindingContentProvider_binding);
+				}
+			}
 
-      @Override
-      public void expansionStateChanged(ExpansionEvent e) {
-        parent.layout();
-      }
-    });
-    // client composite
-    Composite clientComposite = new Composite(m_expandableComposite, SWT.NONE);
-    GridLayoutFactory.create(clientComposite).columns(2).noMargins();
-    m_expandableComposite.setClient(clientComposite);
-    // field editor
-    m_assignButton = new Button(clientComposite, SWT.CHECK);
-    m_assignButton.setText(Messages.BindingContentProvider_assignButton);
-    //
-    m_fieldNameText = new Text(clientComposite, SWT.SINGLE | SWT.BORDER);
-    GridDataFactory.create(m_fieldNameText).fillH().grabH();
-    m_fieldNameText.setEnabled(false);
-    //
-    m_fieldNameText.addModifyListener(new ModifyListener() {
-      @Override
-      public void modifyText(ModifyEvent e) {
-        calculateAssignComplete();
-      }
-    });
-    m_assignButton.addSelectionListener(new SelectionAdapter() {
-      @Override
-      public void widgetSelected(SelectionEvent e) {
-        m_fieldNameText.setEnabled(m_assignButton.getSelection());
-        if (m_assignButton.getSelection()) {
-          m_fieldNameText.setFocus();
-        }
-        calculateAssignComplete();
-      }
-    });
-  }
+			@Override
+			public void expansionStateChanged(ExpansionEvent e) {
+				parent.layout();
+			}
+		});
+		// client composite
+		Composite clientComposite = new Composite(m_expandableComposite, SWT.NONE);
+		GridLayoutFactory.create(clientComposite).columns(2).noMargins();
+		m_expandableComposite.setClient(clientComposite);
+		// field editor
+		m_assignButton = new Button(clientComposite, SWT.CHECK);
+		m_assignButton.setText(Messages.BindingContentProvider_assignButton);
+		//
+		m_fieldNameText = new Text(clientComposite, SWT.SINGLE | SWT.BORDER);
+		GridDataFactory.create(m_fieldNameText).fillH().grabH();
+		m_fieldNameText.setEnabled(false);
+		//
+		m_fieldNameText.addModifyListener(new ModifyListener() {
+			@Override
+			public void modifyText(ModifyEvent e) {
+				calculateAssignComplete();
+			}
+		});
+		m_assignButton.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				m_fieldNameText.setEnabled(m_assignButton.getSelection());
+				if (m_assignButton.getSelection()) {
+					m_fieldNameText.setFocus();
+				}
+				calculateAssignComplete();
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Handle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void calculateAssignComplete() {
-    if (m_assignButton.getSelection()) {
-      String fieldName = m_fieldNameText.getText();
-      // check field
-      if (fieldName.length() == 0) {
-        m_errorMessage = Messages.BindingContentProvider_validateEmptyFieldName;
-      } else if (fieldName.equals(m_fieldName) || !m_fields.contains(fieldName)) {
-        IStatus status = JavaConventions.validateIdentifier(fieldName, null, null);
-        // check status
-        if (status.matches(IStatus.ERROR)) {
-          m_errorMessage = status.getMessage();
-        } else {
-          m_errorMessage = null;
-        }
-      } else {
-        m_errorMessage = Messages.BindingContentProvider_validateExistingFieldName;
-      }
-    } else {
-      m_errorMessage = null;
-    }
-    m_listener.calculateFinish();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Handle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void calculateAssignComplete() {
+		if (m_assignButton.getSelection()) {
+			String fieldName = m_fieldNameText.getText();
+			// check field
+			if (fieldName.length() == 0) {
+				m_errorMessage = Messages.BindingContentProvider_validateEmptyFieldName;
+			} else if (fieldName.equals(m_fieldName) || !m_fields.contains(fieldName)) {
+				IStatus status = JavaConventions.validateIdentifier(fieldName, null, null);
+				// check status
+				if (status.matches(IStatus.ERROR)) {
+					m_errorMessage = status.getMessage();
+				} else {
+					m_errorMessage = null;
+				}
+			} else {
+				m_errorMessage = Messages.BindingContentProvider_validateExistingFieldName;
+			}
+		} else {
+			m_errorMessage = null;
+		}
+		m_listener.calculateFinish();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Update
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void updateFromObject() throws Exception {
-    m_fieldName = m_binding.getVariableIdentifier();
-    if (m_binding.isField()) {
-      m_expandableComposite.setExpanded(true);
-      m_expandableComposite.setText(Messages.BindingContentProvider_binding);
-      m_assignButton.setSelection(true);
-      m_fieldNameText.setText(m_fieldName);
-      m_fieldNameText.setEnabled(true);
-    }
-    calculateAssignComplete();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Update
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void updateFromObject() throws Exception {
+		m_fieldName = m_binding.getVariableIdentifier();
+		if (m_binding.isField()) {
+			m_expandableComposite.setExpanded(true);
+			m_expandableComposite.setText(Messages.BindingContentProvider_binding);
+			m_assignButton.setSelection(true);
+			m_fieldNameText.setText(m_fieldName);
+			m_fieldNameText.setEnabled(true);
+		}
+		calculateAssignComplete();
+	}
 
-  @Override
-  public void saveToObject() throws Exception {
-    boolean field = m_assignButton.getSelection();
-    m_binding.setVariableIdentifier(m_javaInfoRoot, field ? m_fieldNameText.getText() : null, field);
-  }
+	@Override
+	public void saveToObject() throws Exception {
+		boolean field = m_assignButton.getSelection();
+		m_binding.setVariableIdentifier(m_javaInfoRoot, field ? m_fieldNameText.getText() : null, field);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/contentproviders/CheckboxTableViewerWrapper.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/contentproviders/CheckboxTableViewerWrapper.java
index 3769b107e..d742c09a1 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/contentproviders/CheckboxTableViewerWrapper.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/contentproviders/CheckboxTableViewerWrapper.java
@@ -21,44 +21,44 @@
  * @coverage bindings.ui
  */
 public final class CheckboxTableViewerWrapper implements ICheckboxViewerWrapper {
-  private final CheckboxTableViewer m_viewer;
+	private final CheckboxTableViewer m_viewer;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CheckboxTableViewerWrapper(CheckboxTableViewer viewer) {
-    m_viewer = viewer;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CheckboxTableViewerWrapper(CheckboxTableViewer viewer) {
+		m_viewer = viewer;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ICheckboxViewerWrapper
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public StructuredViewer getViewer() {
-    return m_viewer;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ICheckboxViewerWrapper
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public StructuredViewer getViewer() {
+		return m_viewer;
+	}
 
-  @Override
-  public ICheckable getCheckable() {
-    return m_viewer;
-  }
+	@Override
+	public ICheckable getCheckable() {
+		return m_viewer;
+	}
 
-  @Override
-  public Object[] getCheckedElements() {
-    return m_viewer.getCheckedElements();
-  }
+	@Override
+	public Object[] getCheckedElements() {
+		return m_viewer.getCheckedElements();
+	}
 
-  @Override
-  public void setCheckedElements(Object[] elements) {
-    m_viewer.setCheckedElements(elements);
-  }
+	@Override
+	public void setCheckedElements(Object[] elements) {
+		m_viewer.setCheckedElements(elements);
+	}
 
-  @Override
-  public void setAllChecked(boolean state) {
-    m_viewer.setAllChecked(state);
-  }
+	@Override
+	public void setAllChecked(boolean state) {
+		m_viewer.setAllChecked(state);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/contentproviders/CheckboxTreeViewerWrapper.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/contentproviders/CheckboxTreeViewerWrapper.java
index ff774136a..121ad5eea 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/contentproviders/CheckboxTreeViewerWrapper.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/contentproviders/CheckboxTreeViewerWrapper.java
@@ -21,44 +21,44 @@
  * @coverage bindings.ui
  */
 public class CheckboxTreeViewerWrapper implements ICheckboxViewerWrapper {
-  private final CheckboxTreeViewer m_viewer;
+	private final CheckboxTreeViewer m_viewer;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CheckboxTreeViewerWrapper(CheckboxTreeViewer viewer) {
-    m_viewer = viewer;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CheckboxTreeViewerWrapper(CheckboxTreeViewer viewer) {
+		m_viewer = viewer;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ICheckboxViewerWrapper
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public StructuredViewer getViewer() {
-    return m_viewer;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ICheckboxViewerWrapper
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public StructuredViewer getViewer() {
+		return m_viewer;
+	}
 
-  @Override
-  public ICheckable getCheckable() {
-    return m_viewer;
-  }
+	@Override
+	public ICheckable getCheckable() {
+		return m_viewer;
+	}
 
-  @Override
-  public Object[] getCheckedElements() {
-    return m_viewer.getCheckedElements();
-  }
+	@Override
+	public Object[] getCheckedElements() {
+		return m_viewer.getCheckedElements();
+	}
 
-  @Override
-  public void setCheckedElements(Object[] elements) {
-    m_viewer.setCheckedElements(elements);
-  }
+	@Override
+	public void setCheckedElements(Object[] elements) {
+		m_viewer.setCheckedElements(elements);
+	}
 
-  @Override
-  public void setAllChecked(boolean state) {
-    m_viewer.setAllChecked(state);
-  }
+	@Override
+	public void setAllChecked(boolean state) {
+		m_viewer.setAllChecked(state);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/contentproviders/ChooseClassAndPropertiesConfiguration.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/contentproviders/ChooseClassAndPropertiesConfiguration.java
index 2a8ea5487..67f383248 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/contentproviders/ChooseClassAndPropertiesConfiguration.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/contentproviders/ChooseClassAndPropertiesConfiguration.java
@@ -25,207 +25,207 @@
  * @coverage bindings.ui
  */
 public class ChooseClassAndPropertiesConfiguration extends ChooseClassConfiguration {
-  private String m_propertiesLabel;
-  private boolean m_propertiesMultiChecked;
-  private boolean m_showSelectionButtons = true;
-  private boolean m_reorderMode;
-  private IBaseLabelProvider m_propertiesLabelProvider;
-  private LoadedPropertiesCheckedStrategy m_loadedPropertiesCheckedStrategy =
-      LoadedPropertiesCheckedStrategy.First;
-  private String m_propertiesErrorMessage;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ChooseClassAndPropertiesConfiguration() {
-  }
-
-  public ChooseClassAndPropertiesConfiguration(ChooseClassAndPropertiesConfiguration configuration) {
-    super(configuration);
-    m_propertiesLabel = configuration.m_propertiesLabel;
-    m_propertiesMultiChecked = configuration.m_propertiesMultiChecked;
-    m_reorderMode = configuration.m_reorderMode;
-    m_propertiesLabelProvider = configuration.m_propertiesLabelProvider;
-    m_loadedPropertiesCheckedStrategy = configuration.m_loadedPropertiesCheckedStrategy;
-    m_propertiesErrorMessage = configuration.m_propertiesErrorMessage;
-    m_propertiesFilters.addAll(configuration.m_propertiesFilters);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Properties style settings
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the label for properties viewer.
-   */
-  public final String getPropertiesLabel() {
-    return m_propertiesLabel;
-  }
-
-  /**
-   * Sets the label for properties viewer.
-   */
-  public final void setPropertiesLabel(String propertiesLabel) {
-    m_propertiesLabel = propertiesLabel;
-  }
-
-  /**
-   * @return on/off state for single or multi checked properties. Default value is
-   *         <code>false</code>.
-   */
-  public final boolean isPropertiesMultiChecked() {
-    return m_propertiesMultiChecked;
-  }
-
-  /**
-   * Sets on/off state for single or multi checked properties.
-   */
-  public final void setPropertiesMultiChecked(boolean multiChecked) {
-    m_propertiesMultiChecked = multiChecked;
-  }
-
-  /**
-   * @return on/off state for reorder properties.
-   */
-  public final boolean isReorderMode() {
-    return m_reorderMode;
-  }
-
-  /**
-   * Sets on/off state for reorder properties over DND and "up/down" buttons. If sets
-   * <code>false</code> DND and "up/down" buttons don't install.
-   */
-  public final void setReorderMode(boolean reorderMode) {
-    m_reorderMode = reorderMode;
-  }
-
-  /**
-   * @return on/off state for "Select All" and "Deselect All" buttons.
-   */
-  public boolean isShowSelectionButtons() {
-    return m_showSelectionButtons;
-  }
-
-  /**
-   * Sets on/off state for "Select All" and "Deselect All" buttons.
-   */
-  public void setShowSelectionButtons(boolean showSelectionButtons) {
-    m_showSelectionButtons = showSelectionButtons;
-  }
-
-  /**
-   * @return {@link IBaseLabelProvider} for properties viewer.
-   */
-  public final IBaseLabelProvider getPropertiesLabelProvider() {
-    return m_propertiesLabelProvider;
-  }
-
-  /**
-   * Sets {@link IBaseLabelProvider} for properties viewer.
-   */
-  public final void setPropertiesLabelProvider(IBaseLabelProvider labelProvider) {
-    m_propertiesLabelProvider = labelProvider;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // CheckedStrategy settings
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return {@link LoadedPropertiesCheckedStrategy} strategy for checked properties after loading
-   *         class and properties.
-   */
-  public LoadedPropertiesCheckedStrategy getLoadedPropertiesCheckedStrategy() {
-    return m_loadedPropertiesCheckedStrategy;
-  }
-
-  /**
-   * Sets {@link LoadedPropertiesCheckedStrategy} strategy for checked properties after loading
-   * class and properties.
-   */
-  public void setLoadedPropertiesCheckedStrategy(LoadedPropertiesCheckedStrategy checkedStrategy) {
-    m_loadedPropertiesCheckedStrategy = checkedStrategy;
-  }
-
-  public static enum LoadedPropertiesCheckedStrategy {
-    /**
-     * Sets empty checked elements.
-     */
-    None,
-    /**
-     * Checked first element.
-     */
-    First,
-    /**
-     * Checked last element.
-     */
-    Last,
-    /**
-     * Checked all elements.
-     */
-    All
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Properties filter settings
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final List<IPropertiesFilter> m_propertiesFilters = Lists.newArrayList();
-
-  /**
-   * Add properties filter.
-   */
-  public final void addPropertiesFilter(IPropertiesFilter propertiesFilter) {
-    m_propertiesFilters.add(propertiesFilter);
-  }
-
-  /**
-   * Remove properties filter.
-   */
-  public final void removePropertiesFilter(IPropertiesFilter propertiesFilter) {
-    m_propertiesFilters.remove(propertiesFilter);
-  }
-
-  /**
-   * Filter given properties (f.e. include only collection properties). Use
-   * {@link #setPropertiesFilter(IPropertiesFilter)} for set filter or override this method.
-   */
-  public List<PropertyAdapter> filterProperties(Class<?> choosenClass,
-      List<PropertyAdapter> properties) throws Exception {
-    if (!m_propertiesFilters.isEmpty()) {
-      for (IPropertiesFilter filter : m_propertiesFilters) {
-        properties = filter.filterProperties(choosenClass, properties);
-      }
-    }
-    return properties;
-  }
-
-  public static interface IPropertiesFilter {
-    List<PropertyAdapter> filterProperties(Class<?> choosenClass, List<PropertyAdapter> properties)
-        throws Exception;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Error settings
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the error message if properties not checked.
-   */
-  public final String getPropertiesErrorMessage() {
-    return m_propertiesErrorMessage;
-  }
-
-  /**
-   * Sets the error message if properties not checked.
-   */
-  public final void setPropertiesErrorMessage(String errorMessage) {
-    m_propertiesErrorMessage = errorMessage;
-  }
+	private String m_propertiesLabel;
+	private boolean m_propertiesMultiChecked;
+	private boolean m_showSelectionButtons = true;
+	private boolean m_reorderMode;
+	private IBaseLabelProvider m_propertiesLabelProvider;
+	private LoadedPropertiesCheckedStrategy m_loadedPropertiesCheckedStrategy =
+			LoadedPropertiesCheckedStrategy.First;
+	private String m_propertiesErrorMessage;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ChooseClassAndPropertiesConfiguration() {
+	}
+
+	public ChooseClassAndPropertiesConfiguration(ChooseClassAndPropertiesConfiguration configuration) {
+		super(configuration);
+		m_propertiesLabel = configuration.m_propertiesLabel;
+		m_propertiesMultiChecked = configuration.m_propertiesMultiChecked;
+		m_reorderMode = configuration.m_reorderMode;
+		m_propertiesLabelProvider = configuration.m_propertiesLabelProvider;
+		m_loadedPropertiesCheckedStrategy = configuration.m_loadedPropertiesCheckedStrategy;
+		m_propertiesErrorMessage = configuration.m_propertiesErrorMessage;
+		m_propertiesFilters.addAll(configuration.m_propertiesFilters);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Properties style settings
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the label for properties viewer.
+	 */
+	public final String getPropertiesLabel() {
+		return m_propertiesLabel;
+	}
+
+	/**
+	 * Sets the label for properties viewer.
+	 */
+	public final void setPropertiesLabel(String propertiesLabel) {
+		m_propertiesLabel = propertiesLabel;
+	}
+
+	/**
+	 * @return on/off state for single or multi checked properties. Default value is
+	 *         <code>false</code>.
+	 */
+	public final boolean isPropertiesMultiChecked() {
+		return m_propertiesMultiChecked;
+	}
+
+	/**
+	 * Sets on/off state for single or multi checked properties.
+	 */
+	public final void setPropertiesMultiChecked(boolean multiChecked) {
+		m_propertiesMultiChecked = multiChecked;
+	}
+
+	/**
+	 * @return on/off state for reorder properties.
+	 */
+	public final boolean isReorderMode() {
+		return m_reorderMode;
+	}
+
+	/**
+	 * Sets on/off state for reorder properties over DND and "up/down" buttons. If sets
+	 * <code>false</code> DND and "up/down" buttons don't install.
+	 */
+	public final void setReorderMode(boolean reorderMode) {
+		m_reorderMode = reorderMode;
+	}
+
+	/**
+	 * @return on/off state for "Select All" and "Deselect All" buttons.
+	 */
+	public boolean isShowSelectionButtons() {
+		return m_showSelectionButtons;
+	}
+
+	/**
+	 * Sets on/off state for "Select All" and "Deselect All" buttons.
+	 */
+	public void setShowSelectionButtons(boolean showSelectionButtons) {
+		m_showSelectionButtons = showSelectionButtons;
+	}
+
+	/**
+	 * @return {@link IBaseLabelProvider} for properties viewer.
+	 */
+	public final IBaseLabelProvider getPropertiesLabelProvider() {
+		return m_propertiesLabelProvider;
+	}
+
+	/**
+	 * Sets {@link IBaseLabelProvider} for properties viewer.
+	 */
+	public final void setPropertiesLabelProvider(IBaseLabelProvider labelProvider) {
+		m_propertiesLabelProvider = labelProvider;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// CheckedStrategy settings
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return {@link LoadedPropertiesCheckedStrategy} strategy for checked properties after loading
+	 *         class and properties.
+	 */
+	public LoadedPropertiesCheckedStrategy getLoadedPropertiesCheckedStrategy() {
+		return m_loadedPropertiesCheckedStrategy;
+	}
+
+	/**
+	 * Sets {@link LoadedPropertiesCheckedStrategy} strategy for checked properties after loading
+	 * class and properties.
+	 */
+	public void setLoadedPropertiesCheckedStrategy(LoadedPropertiesCheckedStrategy checkedStrategy) {
+		m_loadedPropertiesCheckedStrategy = checkedStrategy;
+	}
+
+	public static enum LoadedPropertiesCheckedStrategy {
+		/**
+		 * Sets empty checked elements.
+		 */
+		None,
+		/**
+		 * Checked first element.
+		 */
+		First,
+		/**
+		 * Checked last element.
+		 */
+		Last,
+		/**
+		 * Checked all elements.
+		 */
+		All
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Properties filter settings
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final List<IPropertiesFilter> m_propertiesFilters = Lists.newArrayList();
+
+	/**
+	 * Add properties filter.
+	 */
+	public final void addPropertiesFilter(IPropertiesFilter propertiesFilter) {
+		m_propertiesFilters.add(propertiesFilter);
+	}
+
+	/**
+	 * Remove properties filter.
+	 */
+	public final void removePropertiesFilter(IPropertiesFilter propertiesFilter) {
+		m_propertiesFilters.remove(propertiesFilter);
+	}
+
+	/**
+	 * Filter given properties (f.e. include only collection properties). Use
+	 * {@link #setPropertiesFilter(IPropertiesFilter)} for set filter or override this method.
+	 */
+	public List<PropertyAdapter> filterProperties(Class<?> choosenClass,
+			List<PropertyAdapter> properties) throws Exception {
+		if (!m_propertiesFilters.isEmpty()) {
+			for (IPropertiesFilter filter : m_propertiesFilters) {
+				properties = filter.filterProperties(choosenClass, properties);
+			}
+		}
+		return properties;
+	}
+
+	public static interface IPropertiesFilter {
+		List<PropertyAdapter> filterProperties(Class<?> choosenClass, List<PropertyAdapter> properties)
+				throws Exception;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Error settings
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the error message if properties not checked.
+	 */
+	public final String getPropertiesErrorMessage() {
+		return m_propertiesErrorMessage;
+	}
+
+	/**
+	 * Sets the error message if properties not checked.
+	 */
+	public final void setPropertiesErrorMessage(String errorMessage) {
+		m_propertiesErrorMessage = errorMessage;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/contentproviders/ChooseClassAndPropertiesRouter.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/contentproviders/ChooseClassAndPropertiesRouter.java
index b2c6fbabe..48ebcd464 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/contentproviders/ChooseClassAndPropertiesRouter.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/contentproviders/ChooseClassAndPropertiesRouter.java
@@ -24,61 +24,61 @@
  * @coverage bindings.ui
  */
 public final class ChooseClassAndPropertiesRouter {
-  private final ChooseClassAndPropertiesUiContentProvider m_source;
-  private final ChooseClassUiContentProvider m_target;
+	private final ChooseClassAndPropertiesUiContentProvider m_source;
+	private final ChooseClassUiContentProvider m_target;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ChooseClassAndPropertiesRouter(ChooseClassAndPropertiesUiContentProvider source,
-      ChooseClassUiContentProvider target) {
-    m_source = source;
-    m_target = target;
-    source.setRouter(this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ChooseClassAndPropertiesRouter(ChooseClassAndPropertiesUiContentProvider source,
+			ChooseClassUiContentProvider target) {
+		m_source = source;
+		m_target = target;
+		source.setRouter(this);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Internal
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  void handle() {
-    // prepare checked properties
-    List<PropertyAdapter> properties = m_source.getChoosenProperties0();
-    // reset target checked properties
-    if (m_target instanceof ChooseClassAndPropertiesUiContentProvider) {
-      ChooseClassAndPropertiesUiContentProvider target =
-          (ChooseClassAndPropertiesUiContentProvider) m_target;
-      target.getPropertiesViewer().setAllChecked(false);
-    }
-    // handle properties
-    if (properties.isEmpty()) {
-      // properties is empty
-      setClearValue(false);
-    } else {
-      // prepare property type
-      Class<?> elementType = properties.get(0).getType();
-      // check type
-      if (elementType.isPrimitive() || elementType.isArray()) {
-        // skip arrays and primitive type
-        setClearValue(false);
-      } else if (Collection.class.isAssignableFrom(elementType)) {
-        // if type is collection configure target to choose element type
-        setClearValue(true);
-        ComboDialogField combo = (ComboDialogField) m_target.getDialogField();
-        combo.removeItem("");
-      } else {
-        // redirect value
-        m_target.getDialogField().setEnabled(false);
-        m_target.setClassName(elementType.getName());
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Internal
+	//
+	////////////////////////////////////////////////////////////////////////////
+	void handle() {
+		// prepare checked properties
+		List<PropertyAdapter> properties = m_source.getChoosenProperties0();
+		// reset target checked properties
+		if (m_target instanceof ChooseClassAndPropertiesUiContentProvider) {
+			ChooseClassAndPropertiesUiContentProvider target =
+					(ChooseClassAndPropertiesUiContentProvider) m_target;
+			target.getPropertiesViewer().setAllChecked(false);
+		}
+		// handle properties
+		if (properties.isEmpty()) {
+			// properties is empty
+			setClearValue(false);
+		} else {
+			// prepare property type
+			Class<?> elementType = properties.get(0).getType();
+			// check type
+			if (elementType.isPrimitive() || elementType.isArray()) {
+				// skip arrays and primitive type
+				setClearValue(false);
+			} else if (Collection.class.isAssignableFrom(elementType)) {
+				// if type is collection configure target to choose element type
+				setClearValue(true);
+				ComboDialogField combo = (ComboDialogField) m_target.getDialogField();
+				combo.removeItem("");
+			} else {
+				// redirect value
+				m_target.getDialogField().setEnabled(false);
+				m_target.setClassName(elementType.getName());
+			}
+		}
+	}
 
-  private void setClearValue(boolean enabled) {
-    m_target.getDialogField().setEnabled(enabled);
-    m_target.setClearClassName();
-  }
+	private void setClearValue(boolean enabled) {
+		m_target.getDialogField().setEnabled(enabled);
+		m_target.setClearClassName();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/contentproviders/ChooseClassAndPropertiesSupportListener.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/contentproviders/ChooseClassAndPropertiesSupportListener.java
index e5c830689..1b975b81c 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/contentproviders/ChooseClassAndPropertiesSupportListener.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/contentproviders/ChooseClassAndPropertiesSupportListener.java
@@ -17,8 +17,8 @@
  * @coverage bindings.ui
  */
 public interface ChooseClassAndPropertiesSupportListener {
-  /**
-   * The content provider has finish load properties.
-   */
-  void loadProperties(boolean successful);
+	/**
+	 * The content provider has finish load properties.
+	 */
+	void loadProperties(boolean successful);
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/contentproviders/ChooseClassAndPropertiesUiContentProvider.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/contentproviders/ChooseClassAndPropertiesUiContentProvider.java
index bbce25906..0c7a62379 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/contentproviders/ChooseClassAndPropertiesUiContentProvider.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/contentproviders/ChooseClassAndPropertiesUiContentProvider.java
@@ -340,7 +340,7 @@ protected void calculateFinish() {
 							break;
 						case Last:
 							m_propertiesViewer
-									.setCheckedElements(new Object[] { m_properties.get(m_properties.size() - 1) });
+							.setCheckedElements(new Object[] { m_properties.get(m_properties.size() - 1) });
 							break;
 						case All:
 							m_propertiesViewer.setCheckedElements(m_properties.toArray());
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/contentproviders/ChooseClassConfiguration.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/contentproviders/ChooseClassConfiguration.java
index bcb8577ee..1035a6cf4 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/contentproviders/ChooseClassConfiguration.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/contentproviders/ChooseClassConfiguration.java
@@ -27,282 +27,282 @@
  * @coverage bindings.ui
  */
 public class ChooseClassConfiguration {
-  private String m_dialogFieldLabel;
-  private boolean m_dialogFieldEnabled = true;
-  private boolean m_useClearButton;
-  private String m_valuesScope;
-  private String m_clearValue;
-  private String[] m_defaultValues;
-  private String m_targetClassName;
-  private String m_retargetClassName;
-  private String[] m_baseClassNames;
-  private boolean m_chooseInterfaces;
-  private final List<String> m_defaultStarts = Lists.newArrayList();
-  private Class<?>[][] m_constructorParameters;
-  private String m_emptyClassErrorMessage = Messages.ChooseClassConfiguration_validateEmptyClass;
-  private String m_errorMessagePrefix = Messages.ChooseClassConfiguration_validateMessagePrefix;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ChooseClassConfiguration() {
-  }
-
-  public ChooseClassConfiguration(ChooseClassConfiguration configuration) {
-    m_dialogFieldLabel = configuration.m_dialogFieldLabel;
-    m_dialogFieldEnabled = configuration.m_dialogFieldEnabled;
-    m_useClearButton = configuration.m_useClearButton;
-    m_valuesScope = configuration.m_valuesScope;
-    m_clearValue = configuration.m_clearValue;
-    m_defaultValues = configuration.m_defaultValues;
-    m_targetClassName = configuration.m_targetClassName;
-    m_retargetClassName = configuration.m_retargetClassName;
-    m_baseClassNames = configuration.m_baseClassNames;
-    m_chooseInterfaces = configuration.m_chooseInterfaces;
-    m_defaultStarts.addAll(configuration.m_defaultStarts);
-    m_constructorParameters = configuration.m_constructorParameters;
-    m_emptyClassErrorMessage = configuration.m_emptyClassErrorMessage;
-    m_errorMessagePrefix = configuration.m_errorMessagePrefix;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // DialogField settings
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the label for dialog field.
-   */
-  public final String getDialogFieldLabel() {
-    return m_dialogFieldLabel;
-  }
-
-  /**
-   * Sets the label for dialog field.
-   */
-  public final void setDialogFieldLabel(String dialogFieldLabel) {
-    m_dialogFieldLabel = dialogFieldLabel;
-  }
-
-  /**
-   * @return the enable state of the dialog field.
-   */
-  public boolean isDialogFieldEnabled() {
-    return m_dialogFieldEnabled;
-  }
-
-  /**
-   * Sets the enable state of the dialog field.
-   */
-  public void setDialogFieldEnabled(boolean dialogFieldEnabled) {
-    m_dialogFieldEnabled = dialogFieldEnabled;
-  }
-
-  /**
-   * @return the state of use "clear" button.
-   */
-  public final boolean isUseClearButton() {
-    return m_useClearButton;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Value settings
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the value scope name, maybe not set.
-   */
-  public final String getValuesScope() {
-    return m_valuesScope;
-  }
-
-  /**
-   * Sets the value scope name.
-   */
-  public final void setValueScope(String valuesScope) {
-    m_valuesScope = valuesScope;
-  }
-
-  /**
-   * @return the clear value.
-   */
-  public final String getClearValue() {
-    return m_clearValue;
-  }
-
-  /**
-   * Sets clear value. Clear value sets to provider if press "clear" button.
-   */
-  public final void setClearValue(String clearValue) {
-    m_useClearButton = !StringUtils.isEmpty(clearValue);
-    m_clearValue = clearValue;
-  }
-
-  /**
-   * @return the default values.
-   */
-  public final String[] getDefaultValues() {
-    return m_defaultValues;
-  }
-
-  /**
-   * Sets the default values. Default values adds at the beginning of combo items and if selected
-   * not checked load class.
-   */
-  public final void setDefaultValues(String[] defaultValues) {
-    m_defaultValues = defaultValues;
-  }
-
-  /**
-   * check apply redirect rule.
-   */
-  public final String getRetargetClassName(String className) {
-    if (className.equals(m_targetClassName)) {
-      return m_retargetClassName;
-    }
-    return className;
-  }
-
-  /**
-   * Sets redirect rule: replace <code>targetClassName</code> value to
-   * <code>retargetClassName</code> value.
-   */
-  public final void setRetargetClassName(String targetClassName, String retargetClassName) {
-    m_targetClassName = targetClassName;
-    m_retargetClassName = retargetClassName;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Class settings
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the base class name.
-   */
-  public final String[] getBaseClassNames() {
-    return m_baseClassNames;
-  }
-
-  /**
-   * Sets base class name for choose type dialog.
-   */
-  public final void setBaseClassName(String baseClassName) {
-    setBaseClassNames(baseClassName);
-  }
-
-  /**
-   * Sets base class name for choose type dialog.
-   */
-  public final void setBaseClassNames(String... baseClassNames) {
-    m_baseClassNames = baseClassNames;
-  }
-
-  /**
-   * @return the styles for choose type dialog.
-   */
-  public final int getOpenTypeStyle() {
-    return m_chooseInterfaces
-        ? IJavaElementSearchConstants.CONSIDER_CLASSES_AND_INTERFACES
-        : IJavaElementSearchConstants.CONSIDER_CLASSES;
-  }
-
-  /**
-   * @return on/off state for choose interfaces. Default value is <code>false</code>.
-   */
-  public boolean isChooseInterfaces() {
-    return m_chooseInterfaces;
-  }
-
-  /**
-   * Sets on/off state for choose interfaces.
-   */
-  public final void setChooseInterfaces(boolean chooseInterfaces) {
-    m_chooseInterfaces = chooseInterfaces;
-  }
-
-  /**
-   * @return the parameters for required class constructor.
-   */
-  public final Class<?>[][] getConstructorsParameters() {
-    return m_constructorParameters;
-  }
-
-  /**
-   * Sets the parameters for required class constructor.
-   */
-  public final void setConstructorParameters(Class<?>[] constructorParameters) {
-    setConstructorsParameters(constructorParameters);
-  }
-
-  /**
-   * Sets the parameters for required class constructors.
-   */
-  public final void setConstructorsParameters(Class<?>[]... constructorParameters) {
-    m_constructorParameters = constructorParameters;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Default value settings
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Check if given string starts with one of more prefix.
-   */
-  public final boolean isDefaultString(String testString) {
-    for (String defaultString : m_defaultStarts) {
-      if (testString.startsWith(defaultString)) {
-        return true;
-      }
-    }
-    return false;
-  }
-
-  /**
-   * Add default prefix. If class name starts with given string then class name is default.
-   */
-  public final void addDefaultStart(String defaultStart) {
-    m_defaultStarts.add(defaultStart);
-  }
-
-  public final void clearDefaultStrings() {
-    m_defaultStarts.clear();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Error settings
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the error message if chosen empty class name.
-   */
-  public final String getEmptyClassErrorMessage() {
-    return m_emptyClassErrorMessage;
-  }
-
-  /**
-   * Sets the error message if chosen empty class name.
-   */
-  public final void setEmptyClassErrorMessage(String errorMessage) {
-    m_emptyClassErrorMessage = errorMessage;
-  }
-
-  /**
-   * @return the error message prefix for error states.
-   */
-  public final String getErrorMessagePrefix() {
-    return m_errorMessagePrefix;
-  }
-
-  /**
-   * Sets the error message prefix for error states (%AAA% not exist, %AAA% is abstract, etc.).
-   */
-  public final void setErrorMessagePrefix(String errorMessagePrefix) {
-    m_errorMessagePrefix = errorMessagePrefix;
-  }
+	private String m_dialogFieldLabel;
+	private boolean m_dialogFieldEnabled = true;
+	private boolean m_useClearButton;
+	private String m_valuesScope;
+	private String m_clearValue;
+	private String[] m_defaultValues;
+	private String m_targetClassName;
+	private String m_retargetClassName;
+	private String[] m_baseClassNames;
+	private boolean m_chooseInterfaces;
+	private final List<String> m_defaultStarts = Lists.newArrayList();
+	private Class<?>[][] m_constructorParameters;
+	private String m_emptyClassErrorMessage = Messages.ChooseClassConfiguration_validateEmptyClass;
+	private String m_errorMessagePrefix = Messages.ChooseClassConfiguration_validateMessagePrefix;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ChooseClassConfiguration() {
+	}
+
+	public ChooseClassConfiguration(ChooseClassConfiguration configuration) {
+		m_dialogFieldLabel = configuration.m_dialogFieldLabel;
+		m_dialogFieldEnabled = configuration.m_dialogFieldEnabled;
+		m_useClearButton = configuration.m_useClearButton;
+		m_valuesScope = configuration.m_valuesScope;
+		m_clearValue = configuration.m_clearValue;
+		m_defaultValues = configuration.m_defaultValues;
+		m_targetClassName = configuration.m_targetClassName;
+		m_retargetClassName = configuration.m_retargetClassName;
+		m_baseClassNames = configuration.m_baseClassNames;
+		m_chooseInterfaces = configuration.m_chooseInterfaces;
+		m_defaultStarts.addAll(configuration.m_defaultStarts);
+		m_constructorParameters = configuration.m_constructorParameters;
+		m_emptyClassErrorMessage = configuration.m_emptyClassErrorMessage;
+		m_errorMessagePrefix = configuration.m_errorMessagePrefix;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// DialogField settings
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the label for dialog field.
+	 */
+	public final String getDialogFieldLabel() {
+		return m_dialogFieldLabel;
+	}
+
+	/**
+	 * Sets the label for dialog field.
+	 */
+	public final void setDialogFieldLabel(String dialogFieldLabel) {
+		m_dialogFieldLabel = dialogFieldLabel;
+	}
+
+	/**
+	 * @return the enable state of the dialog field.
+	 */
+	public boolean isDialogFieldEnabled() {
+		return m_dialogFieldEnabled;
+	}
+
+	/**
+	 * Sets the enable state of the dialog field.
+	 */
+	public void setDialogFieldEnabled(boolean dialogFieldEnabled) {
+		m_dialogFieldEnabled = dialogFieldEnabled;
+	}
+
+	/**
+	 * @return the state of use "clear" button.
+	 */
+	public final boolean isUseClearButton() {
+		return m_useClearButton;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Value settings
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the value scope name, maybe not set.
+	 */
+	public final String getValuesScope() {
+		return m_valuesScope;
+	}
+
+	/**
+	 * Sets the value scope name.
+	 */
+	public final void setValueScope(String valuesScope) {
+		m_valuesScope = valuesScope;
+	}
+
+	/**
+	 * @return the clear value.
+	 */
+	public final String getClearValue() {
+		return m_clearValue;
+	}
+
+	/**
+	 * Sets clear value. Clear value sets to provider if press "clear" button.
+	 */
+	public final void setClearValue(String clearValue) {
+		m_useClearButton = !StringUtils.isEmpty(clearValue);
+		m_clearValue = clearValue;
+	}
+
+	/**
+	 * @return the default values.
+	 */
+	public final String[] getDefaultValues() {
+		return m_defaultValues;
+	}
+
+	/**
+	 * Sets the default values. Default values adds at the beginning of combo items and if selected
+	 * not checked load class.
+	 */
+	public final void setDefaultValues(String[] defaultValues) {
+		m_defaultValues = defaultValues;
+	}
+
+	/**
+	 * check apply redirect rule.
+	 */
+	public final String getRetargetClassName(String className) {
+		if (className.equals(m_targetClassName)) {
+			return m_retargetClassName;
+		}
+		return className;
+	}
+
+	/**
+	 * Sets redirect rule: replace <code>targetClassName</code> value to
+	 * <code>retargetClassName</code> value.
+	 */
+	public final void setRetargetClassName(String targetClassName, String retargetClassName) {
+		m_targetClassName = targetClassName;
+		m_retargetClassName = retargetClassName;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Class settings
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the base class name.
+	 */
+	public final String[] getBaseClassNames() {
+		return m_baseClassNames;
+	}
+
+	/**
+	 * Sets base class name for choose type dialog.
+	 */
+	public final void setBaseClassName(String baseClassName) {
+		setBaseClassNames(baseClassName);
+	}
+
+	/**
+	 * Sets base class name for choose type dialog.
+	 */
+	public final void setBaseClassNames(String... baseClassNames) {
+		m_baseClassNames = baseClassNames;
+	}
+
+	/**
+	 * @return the styles for choose type dialog.
+	 */
+	public final int getOpenTypeStyle() {
+		return m_chooseInterfaces
+				? IJavaElementSearchConstants.CONSIDER_CLASSES_AND_INTERFACES
+						: IJavaElementSearchConstants.CONSIDER_CLASSES;
+	}
+
+	/**
+	 * @return on/off state for choose interfaces. Default value is <code>false</code>.
+	 */
+	public boolean isChooseInterfaces() {
+		return m_chooseInterfaces;
+	}
+
+	/**
+	 * Sets on/off state for choose interfaces.
+	 */
+	public final void setChooseInterfaces(boolean chooseInterfaces) {
+		m_chooseInterfaces = chooseInterfaces;
+	}
+
+	/**
+	 * @return the parameters for required class constructor.
+	 */
+	public final Class<?>[][] getConstructorsParameters() {
+		return m_constructorParameters;
+	}
+
+	/**
+	 * Sets the parameters for required class constructor.
+	 */
+	public final void setConstructorParameters(Class<?>[] constructorParameters) {
+		setConstructorsParameters(constructorParameters);
+	}
+
+	/**
+	 * Sets the parameters for required class constructors.
+	 */
+	public final void setConstructorsParameters(Class<?>[]... constructorParameters) {
+		m_constructorParameters = constructorParameters;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Default value settings
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Check if given string starts with one of more prefix.
+	 */
+	public final boolean isDefaultString(String testString) {
+		for (String defaultString : m_defaultStarts) {
+			if (testString.startsWith(defaultString)) {
+				return true;
+			}
+		}
+		return false;
+	}
+
+	/**
+	 * Add default prefix. If class name starts with given string then class name is default.
+	 */
+	public final void addDefaultStart(String defaultStart) {
+		m_defaultStarts.add(defaultStart);
+	}
+
+	public final void clearDefaultStrings() {
+		m_defaultStarts.clear();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Error settings
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the error message if chosen empty class name.
+	 */
+	public final String getEmptyClassErrorMessage() {
+		return m_emptyClassErrorMessage;
+	}
+
+	/**
+	 * Sets the error message if chosen empty class name.
+	 */
+	public final void setEmptyClassErrorMessage(String errorMessage) {
+		m_emptyClassErrorMessage = errorMessage;
+	}
+
+	/**
+	 * @return the error message prefix for error states.
+	 */
+	public final String getErrorMessagePrefix() {
+		return m_errorMessagePrefix;
+	}
+
+	/**
+	 * Sets the error message prefix for error states (%AAA% not exist, %AAA% is abstract, etc.).
+	 */
+	public final void setErrorMessagePrefix(String errorMessagePrefix) {
+		m_errorMessagePrefix = errorMessagePrefix;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/contentproviders/ChooseClassRouter.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/contentproviders/ChooseClassRouter.java
index 0ee04975e..416a6a651 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/contentproviders/ChooseClassRouter.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/contentproviders/ChooseClassRouter.java
@@ -18,24 +18,24 @@
  * @coverage bindings.ui
  */
 public class ChooseClassRouter {
-  private final Runnable m_listener;
+	private final Runnable m_listener;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ChooseClassRouter(ChooseClassUiContentProvider source, Runnable listener) {
-    m_listener = listener;
-    source.setRouter(this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ChooseClassRouter(ChooseClassUiContentProvider source, Runnable listener) {
+		m_listener = listener;
+		source.setRouter(this);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Internal
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  void handle() {
-    m_listener.run();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Internal
+	//
+	////////////////////////////////////////////////////////////////////////////
+	void handle() {
+		m_listener.run();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/contentproviders/ChooseClassUiContentProvider.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/contentproviders/ChooseClassUiContentProvider.java
index 1e89ab156..f5b584490 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/contentproviders/ChooseClassUiContentProvider.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/contentproviders/ChooseClassUiContentProvider.java
@@ -40,317 +40,317 @@
  * @coverage bindings.ui
  */
 public abstract class ChooseClassUiContentProvider extends DialogFieldUiContentProvider {
-  private static final Map<String, List<String>> SCOPES = Maps.newHashMap();
-  private final List<String> m_classes;
-  private final ChooseClassConfiguration m_configuration;
-  private final ComboButtonsDialogField m_dialogField;
-  private boolean m_checkClasses = true;
-  private ChooseClassRouter m_router;
+	private static final Map<String, List<String>> SCOPES = Maps.newHashMap();
+	private final List<String> m_classes;
+	private final ChooseClassConfiguration m_configuration;
+	private final ComboButtonsDialogField m_dialogField;
+	private boolean m_checkClasses = true;
+	private ChooseClassRouter m_router;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ChooseClassUiContentProvider(ChooseClassConfiguration configuration) {
-    m_configuration = configuration;
-    // prepare value scope
-    String valuesScope = m_configuration.getValuesScope();
-    if (valuesScope == null) {
-      m_classes = Lists.newArrayList();
-    } else {
-      List<String> classes = SCOPES.get(valuesScope);
-      if (classes == null) {
-        classes = Lists.newArrayList();
-        SCOPES.put(valuesScope, classes);
-      }
-      m_classes = classes;
-    }
-    // create dialog field
-    m_dialogField =
-        new ComboButtonsDialogField(m_browseAdapter,
-            m_clearAdapter,
-            SWT.BORDER | SWT.READ_ONLY,
-            m_configuration.isUseClearButton());
-    // configure dialog field
-    String dialogFieldLabel = m_configuration.getDialogFieldLabel();
-    if (dialogFieldLabel != null) {
-      m_dialogField.setLabelText(dialogFieldLabel);
-    }
-    //
-    m_dialogField.setEnabled(m_configuration.isDialogFieldEnabled());
-    // prepare combo items
-    if (m_configuration.isUseClearButton()) {
-      addClassToCombo(m_configuration.getClearValue());
-    }
-    //
-    String[] defaultValues = m_configuration.getDefaultValues();
-    if (!ArrayUtils.isEmpty(defaultValues)) {
-      for (int i = 0; i < defaultValues.length; i++) {
-        addClassToCombo(defaultValues[i]);
-      }
-    }
-    //
-    m_dialogField.addItems(m_classes);
-    m_dialogField.setDialogFieldListener(m_fieldChangeListener);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ChooseClassUiContentProvider(ChooseClassConfiguration configuration) {
+		m_configuration = configuration;
+		// prepare value scope
+		String valuesScope = m_configuration.getValuesScope();
+		if (valuesScope == null) {
+			m_classes = Lists.newArrayList();
+		} else {
+			List<String> classes = SCOPES.get(valuesScope);
+			if (classes == null) {
+				classes = Lists.newArrayList();
+				SCOPES.put(valuesScope, classes);
+			}
+			m_classes = classes;
+		}
+		// create dialog field
+		m_dialogField =
+				new ComboButtonsDialogField(m_browseAdapter,
+						m_clearAdapter,
+						SWT.BORDER | SWT.READ_ONLY,
+						m_configuration.isUseClearButton());
+		// configure dialog field
+		String dialogFieldLabel = m_configuration.getDialogFieldLabel();
+		if (dialogFieldLabel != null) {
+			m_dialogField.setLabelText(dialogFieldLabel);
+		}
+		//
+		m_dialogField.setEnabled(m_configuration.isDialogFieldEnabled());
+		// prepare combo items
+		if (m_configuration.isUseClearButton()) {
+			addClassToCombo(m_configuration.getClearValue());
+		}
+		//
+		String[] defaultValues = m_configuration.getDefaultValues();
+		if (!ArrayUtils.isEmpty(defaultValues)) {
+			for (int i = 0; i < defaultValues.length; i++) {
+				addClassToCombo(defaultValues[i]);
+			}
+		}
+		//
+		m_dialogField.addItems(m_classes);
+		m_dialogField.setDialogFieldListener(m_fieldChangeListener);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  final void setRouter(ChooseClassRouter router) {
-    m_router = router;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	final void setRouter(ChooseClassRouter router) {
+		m_router = router;
+	}
 
-  public final ChooseClassConfiguration getConfiguration() {
-    return m_configuration;
-  }
+	public final ChooseClassConfiguration getConfiguration() {
+		return m_configuration;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AbstractUIContentProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public DialogField getDialogField() {
-    return m_dialogField;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AbstractUIContentProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public DialogField getDialogField() {
+		return m_dialogField;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Handling
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Change selection item on combo.
-   */
-  private final IDialogFieldListener m_fieldChangeListener = new IDialogFieldListener() {
-    @Override
-    public void dialogFieldChanged(DialogField field) {
-      calculateFinish();
-    }
-  };
-  /**
-   * Press "browse" button.
-   */
-  private final IStringButtonAdapter m_browseAdapter = new IStringButtonAdapter() {
-    @Override
-    public void changeControlPressed(DialogField field) {
-      handleChooseBrowse();
-    }
-  };
-  /**
-   * Press "clear" button.
-   */
-  private final IStringButtonAdapter m_clearAdapter = new IStringButtonAdapter() {
-    @Override
-    public void changeControlPressed(DialogField field) {
-      m_dialogField.selectItem(m_configuration.getClearValue());
-    }
-  };
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Handling
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Change selection item on combo.
+	 */
+	private final IDialogFieldListener m_fieldChangeListener = new IDialogFieldListener() {
+		@Override
+		public void dialogFieldChanged(DialogField field) {
+			calculateFinish();
+		}
+	};
+	/**
+	 * Press "browse" button.
+	 */
+	private final IStringButtonAdapter m_browseAdapter = new IStringButtonAdapter() {
+		@Override
+		public void changeControlPressed(DialogField field) {
+			handleChooseBrowse();
+		}
+	};
+	/**
+	 * Press "clear" button.
+	 */
+	private final IStringButtonAdapter m_clearAdapter = new IStringButtonAdapter() {
+		@Override
+		public void changeControlPressed(DialogField field) {
+			m_dialogField.selectItem(m_configuration.getClearValue());
+		}
+	};
 
-  private void handleChooseBrowse() {
-    try {
-      String className =
-          UiUtils.chooseType(
-              getShell(),
-              getJavaProject(),
-              m_configuration.getBaseClassNames(),
-              m_configuration.getOpenTypeStyle());
-      if (className != null) {
-        setClassName(className);
-      }
-    } catch (Throwable e) {
-      DesignerPlugin.log(e);
-    }
-  }
+	private void handleChooseBrowse() {
+		try {
+			String className =
+					UiUtils.chooseType(
+							getShell(),
+							getJavaProject(),
+							m_configuration.getBaseClassNames(),
+							m_configuration.getOpenTypeStyle());
+			if (className != null) {
+				setClassName(className);
+			}
+		} catch (Throwable e) {
+			DesignerPlugin.log(e);
+		}
+	}
 
-  /**
-   * This method calculate state and sets or clear error message. Subclasses maybe override this
-   * method for observe special states.
-   */
-  protected void calculateFinish() {
-    String className = getClassName();
-    // route events
-    if (m_router != null) {
-      m_router.handle();
-    }
-    // check state
-    if (className.length() == 0) {
-      // empty class
-      setErrorMessage(m_configuration.getEmptyClassErrorMessage());
-    } else {
-      // check clear of default value (maybe not class)
-      if (m_configuration.isDefaultString(className)
-          || className.equals(m_configuration.getClearValue())
-          || ArrayUtils.indexOf(m_configuration.getDefaultValues(), className) != -1) {
-        setErrorMessage(null);
-        return;
-      }
-      // check load class
-      Class<?>[][] constructorsParameters = m_configuration.getConstructorsParameters();
-      String errorMessagePrefix = m_configuration.getErrorMessagePrefix();
-      //
-      boolean noConstructor = false;
-      try {
-        Class<?> testClass = loadClass(className);
-        // check permissions
-        int modifiers = testClass.getModifiers();
-        if (!Modifier.isPublic(modifiers)) {
-          setErrorMessage(errorMessagePrefix
-              + Messages.ChooseClassUiContentProvider_validateNotPublic);
-          return;
-        }
-        if (!m_configuration.isChooseInterfaces() && Modifier.isAbstract(modifiers)) {
-          setErrorMessage(errorMessagePrefix
-              + Messages.ChooseClassUiContentProvider_validateAbstract);
-          return;
-        }
-        // check constructor
-        if (m_checkClasses) {
-          m_checkClasses = false;
-          if (constructorsParameters != null) {
-            for (int i = 0; i < constructorsParameters.length; i++) {
-              Class<?>[] constructorParameters = constructorsParameters[i];
-              for (int j = 0; j < constructorParameters.length; j++) {
-                Class<?> constructorParameterClass = constructorParameters[j];
-                if (constructorParameterClass.isArray()) {
-                  String parameterClassName =
-                      constructorParameterClass.getComponentType().getName();
-                  if (parameterClassName.startsWith("org.eclipse")) {
-                    constructorParameters[j] =
-                        Array.newInstance(loadClass(parameterClassName), new int[1]).getClass();
-                  }
-                } else {
-                  String parameterClassName = constructorParameterClass.getName();
-                  if (parameterClassName.startsWith("org.eclipse")) {
-                    constructorParameters[j] = loadClass(parameterClassName);
-                  }
-                }
-              }
-            }
-          }
-        }
-        if (constructorsParameters != null) {
-          noConstructor = true;
-          for (int i = 0; i < constructorsParameters.length; i++) {
-            try {
-              testClass.getConstructor(constructorsParameters[i]);
-              noConstructor = false;
-              break;
-            } catch (SecurityException e) {
-            } catch (NoSuchMethodException e) {
-            }
-          }
-        }
-      } catch (ClassNotFoundException e) {
-        setErrorMessage(errorMessagePrefix + Messages.ChooseClassUiContentProvider_validateNotExist);
-        return;
-      }
-      // prepare error message for constructor
-      if (noConstructor) {
-        StringBuffer parameters = new StringBuffer(errorMessagePrefix);
-        parameters.append(Messages.ChooseClassUiContentProvider_validatePublicConstructor);
-        for (int i = 0; i < constructorsParameters.length; i++) {
-          Class<?>[] constructorParameters = constructorsParameters[i];
-          if (i > 0) {
-            parameters.append(" ");
-          }
-          parameters.append(ClassUtils.getShortClassName(className));
-          parameters.append("(");
-          for (int j = 0; j < constructorParameters.length; j++) {
-            if (j > 0) {
-              parameters.append(", ");
-            }
-            parameters.append(ClassUtils.getShortClassName(constructorParameters[j]));
-          }
-          parameters.append(")");
-        }
-        parameters.append(".");
-        setErrorMessage(parameters.toString());
-      } else {
-        setErrorMessage(null);
-      }
-    }
-  }
+	/**
+	 * This method calculate state and sets or clear error message. Subclasses maybe override this
+	 * method for observe special states.
+	 */
+	protected void calculateFinish() {
+		String className = getClassName();
+		// route events
+		if (m_router != null) {
+			m_router.handle();
+		}
+		// check state
+		if (className.length() == 0) {
+			// empty class
+			setErrorMessage(m_configuration.getEmptyClassErrorMessage());
+		} else {
+			// check clear of default value (maybe not class)
+			if (m_configuration.isDefaultString(className)
+					|| className.equals(m_configuration.getClearValue())
+					|| ArrayUtils.indexOf(m_configuration.getDefaultValues(), className) != -1) {
+				setErrorMessage(null);
+				return;
+			}
+			// check load class
+			Class<?>[][] constructorsParameters = m_configuration.getConstructorsParameters();
+			String errorMessagePrefix = m_configuration.getErrorMessagePrefix();
+			//
+			boolean noConstructor = false;
+			try {
+				Class<?> testClass = loadClass(className);
+				// check permissions
+				int modifiers = testClass.getModifiers();
+				if (!Modifier.isPublic(modifiers)) {
+					setErrorMessage(errorMessagePrefix
+							+ Messages.ChooseClassUiContentProvider_validateNotPublic);
+					return;
+				}
+				if (!m_configuration.isChooseInterfaces() && Modifier.isAbstract(modifiers)) {
+					setErrorMessage(errorMessagePrefix
+							+ Messages.ChooseClassUiContentProvider_validateAbstract);
+					return;
+				}
+				// check constructor
+				if (m_checkClasses) {
+					m_checkClasses = false;
+					if (constructorsParameters != null) {
+						for (int i = 0; i < constructorsParameters.length; i++) {
+							Class<?>[] constructorParameters = constructorsParameters[i];
+							for (int j = 0; j < constructorParameters.length; j++) {
+								Class<?> constructorParameterClass = constructorParameters[j];
+								if (constructorParameterClass.isArray()) {
+									String parameterClassName =
+											constructorParameterClass.getComponentType().getName();
+									if (parameterClassName.startsWith("org.eclipse")) {
+										constructorParameters[j] =
+												Array.newInstance(loadClass(parameterClassName), new int[1]).getClass();
+									}
+								} else {
+									String parameterClassName = constructorParameterClass.getName();
+									if (parameterClassName.startsWith("org.eclipse")) {
+										constructorParameters[j] = loadClass(parameterClassName);
+									}
+								}
+							}
+						}
+					}
+				}
+				if (constructorsParameters != null) {
+					noConstructor = true;
+					for (int i = 0; i < constructorsParameters.length; i++) {
+						try {
+							testClass.getConstructor(constructorsParameters[i]);
+							noConstructor = false;
+							break;
+						} catch (SecurityException e) {
+						} catch (NoSuchMethodException e) {
+						}
+					}
+				}
+			} catch (ClassNotFoundException e) {
+				setErrorMessage(errorMessagePrefix + Messages.ChooseClassUiContentProvider_validateNotExist);
+				return;
+			}
+			// prepare error message for constructor
+			if (noConstructor) {
+				StringBuffer parameters = new StringBuffer(errorMessagePrefix);
+				parameters.append(Messages.ChooseClassUiContentProvider_validatePublicConstructor);
+				for (int i = 0; i < constructorsParameters.length; i++) {
+					Class<?>[] constructorParameters = constructorsParameters[i];
+					if (i > 0) {
+						parameters.append(" ");
+					}
+					parameters.append(ClassUtils.getShortClassName(className));
+					parameters.append("(");
+					for (int j = 0; j < constructorParameters.length; j++) {
+						if (j > 0) {
+							parameters.append(", ");
+						}
+						parameters.append(ClassUtils.getShortClassName(constructorParameters[j]));
+					}
+					parameters.append(")");
+				}
+				parameters.append(".");
+				setErrorMessage(parameters.toString());
+			} else {
+				setErrorMessage(null);
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Value
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void addClassToCombo(String className) {
-    if (m_classes.indexOf(className) == -1) {
-      m_dialogField.addItem(className);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Value
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void addClassToCombo(String className) {
+		if (m_classes.indexOf(className) == -1) {
+			m_dialogField.addItem(className);
+		}
+	}
 
-  /**
-   * Helper method that load and returned current chosen class.
-   */
-  public Class<?> getChoosenClass() throws Exception {
-    return loadClass(getClassName());
-  }
+	/**
+	 * Helper method that load and returned current chosen class.
+	 */
+	public Class<?> getChoosenClass() throws Exception {
+		return loadClass(getClassName());
+	}
 
-  /**
-   * @return the current chosen class name.
-   */
-  public final String getClassName() {
-    return m_dialogField.getText();
-  }
+	/**
+	 * @return the current chosen class name.
+	 */
+	public final String getClassName() {
+		return m_dialogField.getText();
+	}
 
-  /**
-   * Clear current chosen class name and sets to combo empty item.
-   */
-  protected final void setClearClassName() {
-    String className = "";
-    int index = m_dialogField.getListItems().indexOf(className);
-    if (index == -1) {
-      m_dialogField.setDialogFieldListener(null);
-      m_dialogField.addItem(className);
-      m_dialogField.setDialogFieldListener(m_fieldChangeListener);
-      m_dialogField.selectItem(className);
-    } else {
-      m_dialogField.selectItem(index);
-    }
-  }
+	/**
+	 * Clear current chosen class name and sets to combo empty item.
+	 */
+	protected final void setClearClassName() {
+		String className = "";
+		int index = m_dialogField.getListItems().indexOf(className);
+		if (index == -1) {
+			m_dialogField.setDialogFieldListener(null);
+			m_dialogField.addItem(className);
+			m_dialogField.setDialogFieldListener(m_fieldChangeListener);
+			m_dialogField.selectItem(className);
+		} else {
+			m_dialogField.selectItem(index);
+		}
+	}
 
-  /**
-   * Sets current chosen class name.
-   */
-  public final void setClassName(String className) {
-    // prepare class name
-    className = m_configuration.getRetargetClassName(className);
-    // check clear or default value (don't add to classes scope)
-    if (m_configuration.isDefaultString(className)) {
-      int index = m_dialogField.getListItems().indexOf(className);
-      if (index == -1) {
-        m_dialogField.setDialogFieldListener(null);
-        m_dialogField.addItem(className);
-        m_dialogField.setDialogFieldListener(m_fieldChangeListener);
-        m_dialogField.selectItem(className);
-      } else {
-        m_dialogField.selectItem(index);
-      }
-      return;
-    }
-    if (className.equals(m_configuration.getClearValue())
-        || ArrayUtils.indexOf(m_configuration.getDefaultValues(), className) != -1) {
-      m_dialogField.selectItem(className);
-      return;
-    }
-    // select or add class name to combo and classes scope
-    int index = m_dialogField.getListItems().indexOf(className);
-    if (index == -1) {
-      m_classes.add(className);
-      m_dialogField.setDialogFieldListener(null);
-      m_dialogField.addItem(className);
-      m_dialogField.setDialogFieldListener(m_fieldChangeListener);
-      m_dialogField.selectItem(className);
-    } else {
-      m_dialogField.selectItem(index);
-    }
-  }
+	/**
+	 * Sets current chosen class name.
+	 */
+	public final void setClassName(String className) {
+		// prepare class name
+		className = m_configuration.getRetargetClassName(className);
+		// check clear or default value (don't add to classes scope)
+		if (m_configuration.isDefaultString(className)) {
+			int index = m_dialogField.getListItems().indexOf(className);
+			if (index == -1) {
+				m_dialogField.setDialogFieldListener(null);
+				m_dialogField.addItem(className);
+				m_dialogField.setDialogFieldListener(m_fieldChangeListener);
+				m_dialogField.selectItem(className);
+			} else {
+				m_dialogField.selectItem(index);
+			}
+			return;
+		}
+		if (className.equals(m_configuration.getClearValue())
+				|| ArrayUtils.indexOf(m_configuration.getDefaultValues(), className) != -1) {
+			m_dialogField.selectItem(className);
+			return;
+		}
+		// select or add class name to combo and classes scope
+		int index = m_dialogField.getListItems().indexOf(className);
+		if (index == -1) {
+			m_classes.add(className);
+			m_dialogField.setDialogFieldListener(null);
+			m_dialogField.addItem(className);
+			m_dialogField.setDialogFieldListener(m_fieldChangeListener);
+			m_dialogField.selectItem(className);
+		} else {
+			m_dialogField.selectItem(index);
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/contentproviders/ICheckboxViewerWrapper.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/contentproviders/ICheckboxViewerWrapper.java
index 23cdcf9fd..b25a7306e 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/contentproviders/ICheckboxViewerWrapper.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/contentproviders/ICheckboxViewerWrapper.java
@@ -20,28 +20,28 @@
  * @coverage bindings.ui
  */
 public interface ICheckboxViewerWrapper {
-  /**
-   * @return wrapped viewer.
-   */
-  StructuredViewer getViewer();
+	/**
+	 * @return wrapped viewer.
+	 */
+	StructuredViewer getViewer();
 
-  /**
-   * @return {@link ICheckable} presentation of wrapped viewer.
-   */
-  ICheckable getCheckable();
+	/**
+	 * @return {@link ICheckable} presentation of wrapped viewer.
+	 */
+	ICheckable getCheckable();
 
-  /**
-   * @return the array of checked elements.
-   */
-  Object[] getCheckedElements();
+	/**
+	 * @return the array of checked elements.
+	 */
+	Object[] getCheckedElements();
 
-  /**
-   * Sets which nodes are checked in this viewer.
-   */
-  void setCheckedElements(Object[] elements);
+	/**
+	 * Sets which nodes are checked in this viewer.
+	 */
+	void setCheckedElements(Object[] elements);
 
-  /**
-   * Sets to the given value the checked state for all elements in this viewer.
-   */
-  void setAllChecked(boolean state);
+	/**
+	 * Sets to the given value the checked state for all elements in this viewer.
+	 */
+	void setAllChecked(boolean state);
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/contentproviders/LabelUiContentProvider.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/contentproviders/LabelUiContentProvider.java
index 114c2a042..004d8844e 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/contentproviders/LabelUiContentProvider.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/contentproviders/LabelUiContentProvider.java
@@ -28,38 +28,38 @@
  * @coverage bindings.ui
  */
 public final class LabelUiContentProvider extends UiContentProviderAdapter {
-  private final String m_title;
-  private final String m_value;
+	private final String m_title;
+	private final String m_value;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public LabelUiContentProvider(String title, String value) {
-    m_title = title;
-    m_value = value;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public LabelUiContentProvider(String title, String value) {
+		m_title = title;
+		m_value = value;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public int getNumberOfControls() {
-    return 2;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public int getNumberOfControls() {
+		return 2;
+	}
 
-  @Override
-  public void createContent(Composite parent, int columns) {
-    // create title label
-    Label titleLable = new Label(parent, SWT.NONE);
-    titleLable.setText(m_title);
-    // create value bold label
-    Label valueLabel = new Label(parent, SWT.NONE);
-    GridDataFactory.create(valueLabel).fillH().grabH().spanH(columns - 1);
-    UiUtils.setBoldFont(valueLabel);
-    valueLabel.setText(m_value);
-  }
+	@Override
+	public void createContent(Composite parent, int columns) {
+		// create title label
+		Label titleLable = new Label(parent, SWT.NONE);
+		titleLable.setText(m_title);
+		// create value bold label
+		Label valueLabel = new Label(parent, SWT.NONE);
+		GridDataFactory.create(valueLabel).fillH().grabH().spanH(columns - 1);
+		UiUtils.setBoldFont(valueLabel);
+		valueLabel.setText(m_value);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/contentproviders/MultiTargetRunnable.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/contentproviders/MultiTargetRunnable.java
index 8bb7a0cd0..0cefae8a4 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/contentproviders/MultiTargetRunnable.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/contentproviders/MultiTargetRunnable.java
@@ -20,52 +20,52 @@
  *
  */
 public class MultiTargetRunnable implements Runnable {
-  private final ChooseClassUiContentProvider m_source;
-  private final List<ChooseClassUiContentProvider> m_targets = Lists.newArrayList();
+	private final ChooseClassUiContentProvider m_source;
+	private final List<ChooseClassUiContentProvider> m_targets = Lists.newArrayList();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public MultiTargetRunnable(ChooseClassUiContentProvider source) {
-    m_source = source;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public MultiTargetRunnable(ChooseClassUiContentProvider source) {
+		m_source = source;
+	}
 
-  public MultiTargetRunnable(ChooseClassUiContentProvider source,
-      ChooseClassUiContentProvider[] targets) {
-    this(source);
-    for (ChooseClassUiContentProvider target : targets) {
-      addTarget(target, false);
-    }
-  }
+	public MultiTargetRunnable(ChooseClassUiContentProvider source,
+			ChooseClassUiContentProvider[] targets) {
+		this(source);
+		for (ChooseClassUiContentProvider target : targets) {
+			addTarget(target, false);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void addTarget(ChooseClassUiContentProvider target, boolean update) {
-    m_targets.add(target);
-    target.getDialogField().setEnabled(false);
-    if (update) {
-      target.setClassName(m_source.getClassName());
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void addTarget(ChooseClassUiContentProvider target, boolean update) {
+		m_targets.add(target);
+		target.getDialogField().setEnabled(false);
+		if (update) {
+			target.setClassName(m_source.getClassName());
+		}
+	}
 
-  public void removeTarget(ChooseClassUiContentProvider target) {
-    m_targets.remove(target);
-  }
+	public void removeTarget(ChooseClassUiContentProvider target) {
+		m_targets.remove(target);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Runnable
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void run() {
-    for (ChooseClassUiContentProvider target : m_targets) {
-      target.setClassName(m_source.getClassName());
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Runnable
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void run() {
+		for (ChooseClassUiContentProvider target : m_targets) {
+			target.setClassName(m_source.getClassName());
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/contentproviders/PropertyAdapter.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/contentproviders/PropertyAdapter.java
index 3627436eb..cfb428bee 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/contentproviders/PropertyAdapter.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/contentproviders/PropertyAdapter.java
@@ -19,64 +19,64 @@
  * @coverage bindings.ui
  */
 public class PropertyAdapter {
-  protected final String m_name;
-  protected final Class<?> m_type;
+	protected final String m_name;
+	protected final Class<?> m_type;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public PropertyAdapter(String name, Class<?> type) {
-    m_name = name;
-    m_type = type == null ? Object.class : type;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public PropertyAdapter(String name, Class<?> type) {
+		m_name = name;
+		m_type = type == null ? Object.class : type;
+	}
 
-  public PropertyAdapter(PropertyDescriptor descriptor) {
-    this(descriptor.getName(), descriptor.getPropertyType());
-  }
+	public PropertyAdapter(PropertyDescriptor descriptor) {
+		this(descriptor.getName(), descriptor.getPropertyType());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the property name.
-   */
-  public String getName() {
-    return m_name;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the property name.
+	 */
+	public String getName() {
+		return m_name;
+	}
 
-  /**
-   * @return the property {@link Class} type.
-   */
-  public Class<?> getType() {
-    return m_type;
-  }
+	/**
+	 * @return the property {@link Class} type.
+	 */
+	public Class<?> getType() {
+		return m_type;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public int hashCode() {
-    return m_name.hashCode() ^ m_type.hashCode();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public int hashCode() {
+		return m_name.hashCode() ^ m_type.hashCode();
+	}
 
-  @Override
-  public boolean equals(Object object) {
-    // self check
-    if (object == this) {
-      return true;
-    }
-    // compare with other adapter
-    if (object instanceof PropertyAdapter) {
-      PropertyAdapter adapter = (PropertyAdapter) object;
-      return m_name.equals(adapter.m_name) && m_type == adapter.m_type;
-    }
-    // default
-    return false;
-  }
+	@Override
+	public boolean equals(Object object) {
+		// self check
+		if (object == this) {
+			return true;
+		}
+		// compare with other adapter
+		if (object instanceof PropertyAdapter) {
+			PropertyAdapter adapter = (PropertyAdapter) object;
+			return m_name.equals(adapter.m_name) && m_type == adapter.m_type;
+		}
+		// default
+		return false;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/contentproviders/SeparatorUiContentProvider.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/contentproviders/SeparatorUiContentProvider.java
index 0edc70d00..b138cf1ee 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/contentproviders/SeparatorUiContentProvider.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/contentproviders/SeparatorUiContentProvider.java
@@ -24,19 +24,19 @@
  * @coverage bindings.ui
  */
 public final class SeparatorUiContentProvider extends UiContentProviderAdapter {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public int getNumberOfControls() {
-    return 1;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public int getNumberOfControls() {
+		return 1;
+	}
 
-  @Override
-  public void createContent(Composite parent, int columns) {
-    Label separator = new Label(parent, SWT.SEPARATOR | SWT.HORIZONTAL);
-    GridDataFactory.create(separator).fillH().grabH().spanH(columns);
-  }
+	@Override
+	public void createContent(Composite parent, int columns) {
+		Label separator = new Label(parent, SWT.SEPARATOR | SWT.HORIZONTAL);
+		GridDataFactory.create(separator).fillH().grabH().spanH(columns);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/contentproviders/TabContainerConfiguration.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/contentproviders/TabContainerConfiguration.java
index 3956a127c..16b26df50 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/contentproviders/TabContainerConfiguration.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/contentproviders/TabContainerConfiguration.java
@@ -17,73 +17,73 @@
  * @coverage bindings.ui
  */
 public class TabContainerConfiguration {
-  private boolean m_useAddButton;
-  private boolean m_useMultiAddButton;
-  private boolean m_useRemoveButton;
-  private boolean m_useUpDownButtons;
+	private boolean m_useAddButton;
+	private boolean m_useMultiAddButton;
+	private boolean m_useRemoveButton;
+	private boolean m_useUpDownButtons;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Buttons
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public boolean isUseAddButton() {
-    return m_useAddButton;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Buttons
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public boolean isUseAddButton() {
+		return m_useAddButton;
+	}
 
-  public void setUseAddButton(boolean value) {
-    m_useAddButton = value;
-  }
+	public void setUseAddButton(boolean value) {
+		m_useAddButton = value;
+	}
 
-  public boolean isUseMultiAddButton() {
-    return m_useMultiAddButton;
-  }
+	public boolean isUseMultiAddButton() {
+		return m_useMultiAddButton;
+	}
 
-  public void setUseMultiAddButton(boolean value) {
-    m_useMultiAddButton = value;
-  }
+	public void setUseMultiAddButton(boolean value) {
+		m_useMultiAddButton = value;
+	}
 
-  public boolean isUseRemoveButton() {
-    return m_useRemoveButton;
-  }
+	public boolean isUseRemoveButton() {
+		return m_useRemoveButton;
+	}
 
-  public void setUseRemoveButton(boolean value) {
-    m_useRemoveButton = value;
-  }
+	public void setUseRemoveButton(boolean value) {
+		m_useRemoveButton = value;
+	}
 
-  public boolean isUseUpDownButtons() {
-    return m_useUpDownButtons;
-  }
+	public boolean isUseUpDownButtons() {
+		return m_useUpDownButtons;
+	}
 
-  public void setUseUpDownButtons(boolean value) {
-    m_useUpDownButtons = value;
-  }
+	public void setUseUpDownButtons(boolean value) {
+		m_useUpDownButtons = value;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // EmptyPage
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private boolean m_createEmptyPage;
-  private String m_emptyPageTitle;
-  private String m_emptyPageMessage;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// EmptyPage
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private boolean m_createEmptyPage;
+	private String m_emptyPageTitle;
+	private String m_emptyPageMessage;
 
-  //
-  public boolean isCreateEmptyPage() {
-    return m_createEmptyPage;
-  }
+	//
+	public boolean isCreateEmptyPage() {
+		return m_createEmptyPage;
+	}
 
-  public String getEmptyPageTitle() {
-    return m_emptyPageTitle;
-  }
+	public String getEmptyPageTitle() {
+		return m_emptyPageTitle;
+	}
 
-  public String getEmptyPageMessage() {
-    return m_emptyPageMessage;
-  }
+	public String getEmptyPageMessage() {
+		return m_emptyPageMessage;
+	}
 
-  public void setCreateEmptyPage(String title, String message) {
-    m_createEmptyPage = true;
-    m_emptyPageTitle = title;
-    m_emptyPageMessage = message;
-  }
+	public void setCreateEmptyPage(String title, String message) {
+		m_createEmptyPage = true;
+		m_emptyPageTitle = title;
+		m_emptyPageMessage = message;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/contentproviders/TabContainerUiContentProvider.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/contentproviders/TabContainerUiContentProvider.java
index e55dd3c42..e4df3ca48 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/contentproviders/TabContainerUiContentProvider.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/contentproviders/TabContainerUiContentProvider.java
@@ -45,403 +45,403 @@
  * @coverage bindings.ui
  */
 public abstract class TabContainerUiContentProvider implements IUiContentProvider {
-  private final TabContainerConfiguration m_configuration;
-  protected ICompleteListener m_listener;
-  private CTabFolder m_folder;
-  private ToolItem m_removeButton;
-  private ToolItem m_upButton;
-  private ToolItem m_downButton;
-  private boolean m_showEmptyPage;
+	private final TabContainerConfiguration m_configuration;
+	protected ICompleteListener m_listener;
+	private CTabFolder m_folder;
+	private ToolItem m_removeButton;
+	private ToolItem m_upButton;
+	private ToolItem m_downButton;
+	private boolean m_showEmptyPage;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public TabContainerUiContentProvider(TabContainerConfiguration configuration) {
-    m_configuration = configuration;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public TabContainerUiContentProvider(TabContainerConfiguration configuration) {
+		m_configuration = configuration;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Complete
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void setCompleteListener(ICompleteListener listener) {
-    m_listener = listener;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Complete
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void setCompleteListener(ICompleteListener listener) {
+		m_listener = listener;
+	}
 
-  @Override
-  public String getErrorMessage() {
-    // no errors
-    if (m_showEmptyPage) {
-      return null;
-    }
-    // find first with error
-    int count = m_folder.getItemCount();
-    for (int i = 0; i < count; i++) {
-      IUiContentProvider contentProvider = (IUiContentProvider) m_folder.getItem(i).getData();
-      String errorMessage = contentProvider.getErrorMessage();
-      if (errorMessage != null) {
-        return errorMessage;
-      }
-    }
-    return null;
-  }
+	@Override
+	public String getErrorMessage() {
+		// no errors
+		if (m_showEmptyPage) {
+			return null;
+		}
+		// find first with error
+		int count = m_folder.getItemCount();
+		for (int i = 0; i < count; i++) {
+			IUiContentProvider contentProvider = (IUiContentProvider) m_folder.getItem(i).getData();
+			String errorMessage = contentProvider.getErrorMessage();
+			if (errorMessage != null) {
+				return errorMessage;
+			}
+		}
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public int getNumberOfControls() {
-    return 1;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public int getNumberOfControls() {
+		return 1;
+	}
 
-  @Override
-  public void createContent(Composite parent, int columns) {
-    // create folder
-    m_folder = new CTabFolder(parent, SWT.BORDER);
-    GridDataFactory.create(m_folder).fill().grab().spanH(columns);
-    m_folder.setUnselectedCloseVisible(false);
-    // folder events
-    m_folder.addSelectionListener(new SelectionAdapter() {
-      @Override
-      public void widgetSelected(SelectionEvent e) {
-        calculateButtonsState();
-      }
-    });
-    m_folder.addCTabFolder2Listener(new CTabFolder2Adapter() {
-      @Override
-      public void close(CTabFolderEvent event) {
-        deletePage((CTabItem) event.item);
-      }
-    });
-    // configure
-    if (m_configuration.isUseAddButton()
-        || m_configuration.isUseMultiAddButton()
-        || m_configuration.isUseRemoveButton()
-        || m_configuration.isUseUpDownButtons()) {
-      Composite buttonsComposite = new Composite(m_folder, SWT.NONE);
-      GridLayoutFactory.create(buttonsComposite).noMargins();
-      //
-      ToolBar buttonsBar = new ToolBar(buttonsComposite, SWT.FLAT | SWT.RIGHT);
-      GridDataFactory.create(buttonsBar).fillH().grabH();
-      // add
-      if (m_configuration.isUseAddButton()) {
-        ToolItem addButton = new ToolItem(buttonsBar, SWT.NONE);
-        addButton.setText(Messages.TabContainerUiContentProvider_addButton);
-        addButton.addSelectionListener(new SelectionAdapter() {
-          @Override
-          public void widgetSelected(SelectionEvent event) {
-            addPage();
-          }
-        });
-      }
-      // multi add
-      if (m_configuration.isUseMultiAddButton()) {
-        final ToolItem addButton = new ToolItem(buttonsBar, SWT.DROP_DOWN);
-        addButton.setText(Messages.TabContainerUiContentProvider_addItem);
-        //
-        final MenuManager menuManager = new MenuManager();
-        menuManager.createContextMenu(buttonsBar);
-        //
-        addButton.addSelectionListener(new SelectionAdapter() {
-          @Override
-          public void widgetSelected(SelectionEvent event) {
-            menuManager.removeAll();
-            //
-            int insertIndex = m_folder.getSelectionIndex();
-            if (insertIndex != -1) {
-              insertIndex++;
-            }
-            try {
-              chooseAddPage(menuManager, insertIndex);
-            } catch (Throwable e) {
-              DesignerPlugin.log(e);
-            }
-            //
-            menuManager.update(true);
-            //
-            Rectangle bounds = addButton.getBounds();
-            Point location =
-                addButton.getParent().toDisplay(new Point(bounds.x, bounds.y + bounds.height));
-            menuManager.getMenu().setLocation(location.x, location.y);
-            // show context menu
-            menuManager.getMenu().setVisible(true);
-          }
-        });
-      }
-      // remove
-      if (m_configuration.isUseRemoveButton()) {
-        m_removeButton = new ToolItem(buttonsBar, SWT.NONE);
-        m_removeButton.setText(Messages.TabContainerUiContentProvider_removeButton);
-        m_removeButton.setEnabled(false);
-        m_removeButton.addSelectionListener(new SelectionAdapter() {
-          @Override
-          public void widgetSelected(SelectionEvent e) {
-            int index = m_folder.getSelectionIndex();
-            if (index != -1) {
-              deletePage(m_folder.getItem(index));
-            }
-          }
-        });
-      }
-      // up/down
-      if (m_configuration.isUseUpDownButtons()) {
-        new ToolItem(buttonsBar, SWT.SEPARATOR);
-        // up
-        m_upButton = new ToolItem(buttonsBar, SWT.NONE);
-        m_upButton.setText("<<");
-        m_upButton.setEnabled(false);
-        m_upButton.addSelectionListener(new SelectionAdapter() {
-          @Override
-          public void widgetSelected(SelectionEvent e) {
-            movePage(-1);
-          }
-        });
-        // down
-        m_downButton = new ToolItem(buttonsBar, SWT.NONE);
-        m_downButton.setText(">>");
-        m_downButton.setEnabled(false);
-        m_downButton.addSelectionListener(new SelectionAdapter() {
-          @Override
-          public void widgetSelected(SelectionEvent e) {
-            movePage(1);
-          }
-        });
-      }
-      //
-      m_folder.setTopRight(buttonsComposite);
-    }
-  }
+	@Override
+	public void createContent(Composite parent, int columns) {
+		// create folder
+		m_folder = new CTabFolder(parent, SWT.BORDER);
+		GridDataFactory.create(m_folder).fill().grab().spanH(columns);
+		m_folder.setUnselectedCloseVisible(false);
+		// folder events
+		m_folder.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				calculateButtonsState();
+			}
+		});
+		m_folder.addCTabFolder2Listener(new CTabFolder2Adapter() {
+			@Override
+			public void close(CTabFolderEvent event) {
+				deletePage((CTabItem) event.item);
+			}
+		});
+		// configure
+		if (m_configuration.isUseAddButton()
+				|| m_configuration.isUseMultiAddButton()
+				|| m_configuration.isUseRemoveButton()
+				|| m_configuration.isUseUpDownButtons()) {
+			Composite buttonsComposite = new Composite(m_folder, SWT.NONE);
+			GridLayoutFactory.create(buttonsComposite).noMargins();
+			//
+			ToolBar buttonsBar = new ToolBar(buttonsComposite, SWT.FLAT | SWT.RIGHT);
+			GridDataFactory.create(buttonsBar).fillH().grabH();
+			// add
+			if (m_configuration.isUseAddButton()) {
+				ToolItem addButton = new ToolItem(buttonsBar, SWT.NONE);
+				addButton.setText(Messages.TabContainerUiContentProvider_addButton);
+				addButton.addSelectionListener(new SelectionAdapter() {
+					@Override
+					public void widgetSelected(SelectionEvent event) {
+						addPage();
+					}
+				});
+			}
+			// multi add
+			if (m_configuration.isUseMultiAddButton()) {
+				final ToolItem addButton = new ToolItem(buttonsBar, SWT.DROP_DOWN);
+				addButton.setText(Messages.TabContainerUiContentProvider_addItem);
+				//
+				final MenuManager menuManager = new MenuManager();
+				menuManager.createContextMenu(buttonsBar);
+				//
+				addButton.addSelectionListener(new SelectionAdapter() {
+					@Override
+					public void widgetSelected(SelectionEvent event) {
+						menuManager.removeAll();
+						//
+						int insertIndex = m_folder.getSelectionIndex();
+						if (insertIndex != -1) {
+							insertIndex++;
+						}
+						try {
+							chooseAddPage(menuManager, insertIndex);
+						} catch (Throwable e) {
+							DesignerPlugin.log(e);
+						}
+						//
+						menuManager.update(true);
+						//
+						Rectangle bounds = addButton.getBounds();
+						Point location =
+								addButton.getParent().toDisplay(new Point(bounds.x, bounds.y + bounds.height));
+						menuManager.getMenu().setLocation(location.x, location.y);
+						// show context menu
+						menuManager.getMenu().setVisible(true);
+					}
+				});
+			}
+			// remove
+			if (m_configuration.isUseRemoveButton()) {
+				m_removeButton = new ToolItem(buttonsBar, SWT.NONE);
+				m_removeButton.setText(Messages.TabContainerUiContentProvider_removeButton);
+				m_removeButton.setEnabled(false);
+				m_removeButton.addSelectionListener(new SelectionAdapter() {
+					@Override
+					public void widgetSelected(SelectionEvent e) {
+						int index = m_folder.getSelectionIndex();
+						if (index != -1) {
+							deletePage(m_folder.getItem(index));
+						}
+					}
+				});
+			}
+			// up/down
+			if (m_configuration.isUseUpDownButtons()) {
+				new ToolItem(buttonsBar, SWT.SEPARATOR);
+				// up
+				m_upButton = new ToolItem(buttonsBar, SWT.NONE);
+				m_upButton.setText("<<");
+				m_upButton.setEnabled(false);
+				m_upButton.addSelectionListener(new SelectionAdapter() {
+					@Override
+					public void widgetSelected(SelectionEvent e) {
+						movePage(-1);
+					}
+				});
+				// down
+				m_downButton = new ToolItem(buttonsBar, SWT.NONE);
+				m_downButton.setText(">>");
+				m_downButton.setEnabled(false);
+				m_downButton.addSelectionListener(new SelectionAdapter() {
+					@Override
+					public void widgetSelected(SelectionEvent e) {
+						movePage(1);
+					}
+				});
+			}
+			//
+			m_folder.setTopRight(buttonsComposite);
+		}
+	}
 
-  private void calculateButtonsState() {
-    int itemCount = m_folder.getItemCount();
-    int selectionIndex = m_folder.getSelectionIndex();
-    if (selectionIndex == -1 || itemCount == 1 && m_showEmptyPage) {
-      if (m_removeButton != null) {
-        m_removeButton.setEnabled(false);
-      }
-      if (m_upButton != null) {
-        m_upButton.setEnabled(false);
-        m_downButton.setEnabled(false);
-      }
-      return;
-    }
-    if (m_removeButton != null) {
-      m_removeButton.setEnabled(true);
-    }
-    if (m_upButton != null) {
-      m_upButton.setEnabled(selectionIndex > 0);
-      m_downButton.setEnabled(selectionIndex < itemCount - 1);
-    }
-  }
+	private void calculateButtonsState() {
+		int itemCount = m_folder.getItemCount();
+		int selectionIndex = m_folder.getSelectionIndex();
+		if (selectionIndex == -1 || itemCount == 1 && m_showEmptyPage) {
+			if (m_removeButton != null) {
+				m_removeButton.setEnabled(false);
+			}
+			if (m_upButton != null) {
+				m_upButton.setEnabled(false);
+				m_downButton.setEnabled(false);
+			}
+			return;
+		}
+		if (m_removeButton != null) {
+			m_removeButton.setEnabled(true);
+		}
+		if (m_upButton != null) {
+			m_upButton.setEnabled(selectionIndex > 0);
+			m_downButton.setEnabled(selectionIndex < itemCount - 1);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Add
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected void chooseAddPage(MenuManager menuManager, int insertIndex) throws Exception {
-    throw new UnsupportedOperationException();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Add
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected void chooseAddPage(MenuManager menuManager, int insertIndex) throws Exception {
+		throw new UnsupportedOperationException();
+	}
 
-  private void addPage() {
-    try {
-      int insertIndex = m_folder.getSelectionIndex();
-      if (insertIndex != -1) {
-        insertIndex++;
-      }
-      createPage(insertIndex, createNewPageContentProvider(), true);
-      configure();
-      m_listener.calculateFinish();
-    } catch (Throwable e) {
-      DesignerPlugin.log(e);
-    }
-  }
+	private void addPage() {
+		try {
+			int insertIndex = m_folder.getSelectionIndex();
+			if (insertIndex != -1) {
+				insertIndex++;
+			}
+			createPage(insertIndex, createNewPageContentProvider(), true);
+			configure();
+			m_listener.calculateFinish();
+		} catch (Throwable e) {
+			DesignerPlugin.log(e);
+		}
+	}
 
-  protected final void createPage(int insertIndex,
-      IUiContentProvider contentProvider,
-      boolean selection) throws Exception {
-    int itemCount = m_folder.getItemCount();
-    insertIndex = insertIndex == -1 ? itemCount : insertIndex;
-    if (itemCount == 1 && m_showEmptyPage) {
-      deleteTabItem(m_folder.getItem(0));
-      m_showEmptyPage = false;
-      insertIndex = 0;
-    }
-    //
-    Composite pageComposite = new Composite(m_folder, SWT.NONE);
-    GridLayoutFactory.create(pageComposite).columns(contentProvider.getNumberOfControls()).margins(
-        3);
-    contentProvider.createContent(pageComposite, contentProvider.getNumberOfControls());
-    //
-    CTabItem tabItem = new CTabItem(m_folder, SWT.CLOSE, insertIndex);
-    tabItem.setControl(pageComposite);
-    tabItem.setData(contentProvider);
-    //
-    contentProvider.setCompleteListener(m_listener);
-    contentProvider.updateFromObject();
-    //
-    if (selection) {
-      m_folder.setSelection(tabItem);
-      calculateButtonsState();
-    }
-  }
+	protected final void createPage(int insertIndex,
+			IUiContentProvider contentProvider,
+			boolean selection) throws Exception {
+		int itemCount = m_folder.getItemCount();
+		insertIndex = insertIndex == -1 ? itemCount : insertIndex;
+		if (itemCount == 1 && m_showEmptyPage) {
+			deleteTabItem(m_folder.getItem(0));
+			m_showEmptyPage = false;
+			insertIndex = 0;
+		}
+		//
+		Composite pageComposite = new Composite(m_folder, SWT.NONE);
+		GridLayoutFactory.create(pageComposite).columns(contentProvider.getNumberOfControls()).margins(
+				3);
+		contentProvider.createContent(pageComposite, contentProvider.getNumberOfControls());
+		//
+		CTabItem tabItem = new CTabItem(m_folder, SWT.CLOSE, insertIndex);
+		tabItem.setControl(pageComposite);
+		tabItem.setData(contentProvider);
+		//
+		contentProvider.setCompleteListener(m_listener);
+		contentProvider.updateFromObject();
+		//
+		if (selection) {
+			m_folder.setSelection(tabItem);
+			calculateButtonsState();
+		}
+	}
 
-  protected final void configure() {
-    int count = m_folder.getItemCount();
-    for (int i = 0; i < count; i++) {
-      CTabItem tabItem = m_folder.getItem(i);
-      IUiContentProvider contentProvider = (IUiContentProvider) tabItem.getData();
-      configute(tabItem, i, contentProvider);
-    }
-  }
+	protected final void configure() {
+		int count = m_folder.getItemCount();
+		for (int i = 0; i < count; i++) {
+			CTabItem tabItem = m_folder.getItem(i);
+			IUiContentProvider contentProvider = (IUiContentProvider) tabItem.getData();
+			configute(tabItem, i, contentProvider);
+		}
+	}
 
-  /**
-   * Create new {@link IUiContentProvider} editor.
-   */
-  protected abstract IUiContentProvider createNewPageContentProvider() throws Exception;
+	/**
+	 * Create new {@link IUiContentProvider} editor.
+	 */
+	protected abstract IUiContentProvider createNewPageContentProvider() throws Exception;
 
-  /**
-   * Configure {@link CTabItem} for given {@link IUiContentProvider} after create, update, delete or
-   * reorder.
-   */
-  protected abstract void configute(CTabItem tabItem, int index, IUiContentProvider provider);
+	/**
+	 * Configure {@link CTabItem} for given {@link IUiContentProvider} after create, update, delete or
+	 * reorder.
+	 */
+	protected abstract void configute(CTabItem tabItem, int index, IUiContentProvider provider);
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Remove
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void deletePage(CTabItem item) {
-    try {
-      postDelete((IUiContentProvider) item.getData());
-      deleteTabItem(item);
-      postDelete();
-    } catch (Throwable e) {
-      DesignerPlugin.log(e);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Remove
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void deletePage(CTabItem item) {
+		try {
+			postDelete((IUiContentProvider) item.getData());
+			deleteTabItem(item);
+			postDelete();
+		} catch (Throwable e) {
+			DesignerPlugin.log(e);
+		}
+	}
 
-  protected final void deleteTabItem(CTabItem tabItem) {
-    Control control = tabItem.getControl();
-    tabItem.dispose();
-    control.dispose();
-  }
+	protected final void deleteTabItem(CTabItem tabItem) {
+		Control control = tabItem.getControl();
+		tabItem.dispose();
+		control.dispose();
+	}
 
-  protected void postDelete(IUiContentProvider provider) throws Exception {
-  }
+	protected void postDelete(IUiContentProvider provider) throws Exception {
+	}
 
-  protected void postDelete() throws Exception {
-    if (m_folder.getItemCount() == 0 && m_configuration.isCreateEmptyPage()) {
-      createEmptyPage();
-    } else {
-      configure();
-    }
-    m_listener.calculateFinish();
-  }
+	protected void postDelete() throws Exception {
+		if (m_folder.getItemCount() == 0 && m_configuration.isCreateEmptyPage()) {
+			createEmptyPage();
+		} else {
+			configure();
+		}
+		m_listener.calculateFinish();
+	}
 
-  private void createEmptyPage() {
-    m_showEmptyPage = true;
-    Label messageLabel = new Label(m_folder, SWT.WRAP);
-    messageLabel.setText(m_configuration.getEmptyPageMessage());
-    CTabFactory.item(m_folder).control(messageLabel).name(m_configuration.getEmptyPageTitle());
-    m_folder.setSelection(0);
-    calculateButtonsState();
-  }
+	private void createEmptyPage() {
+		m_showEmptyPage = true;
+		Label messageLabel = new Label(m_folder, SWT.WRAP);
+		messageLabel.setText(m_configuration.getEmptyPageMessage());
+		CTabFactory.item(m_folder).control(messageLabel).name(m_configuration.getEmptyPageTitle());
+		m_folder.setSelection(0);
+		calculateButtonsState();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Move
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void movePage(int delta) {
-    int index = m_folder.getSelectionIndex();
-    if (index == -1) {
-      return;
-    }
-    //
-    CTabItem tabItem = m_folder.getItem(index);
-    Control tabControl = tabItem.getControl();
-    String tabName = tabItem.getText();
-    Object tabData = tabItem.getData();
-    //
-    tabItem.dispose();
-    //
-    tabItem = new CTabItem(m_folder, SWT.CLOSE, index + delta);
-    tabItem.setControl(tabControl);
-    tabItem.setText(tabName);
-    tabItem.setData(tabData);
-    //
-    configure();
-    //
-    m_folder.setSelection(tabItem);
-    calculateButtonsState();
-    m_listener.calculateFinish();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Move
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void movePage(int delta) {
+		int index = m_folder.getSelectionIndex();
+		if (index == -1) {
+			return;
+		}
+		//
+		CTabItem tabItem = m_folder.getItem(index);
+		Control tabControl = tabItem.getControl();
+		String tabName = tabItem.getText();
+		Object tabData = tabItem.getData();
+		//
+		tabItem.dispose();
+		//
+		tabItem = new CTabItem(m_folder, SWT.CLOSE, index + delta);
+		tabItem.setControl(tabControl);
+		tabItem.setText(tabName);
+		tabItem.setData(tabData);
+		//
+		configure();
+		//
+		m_folder.setSelection(tabItem);
+		calculateButtonsState();
+		m_listener.calculateFinish();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Update
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected final void updateFromObject(List<IUiContentProvider> providers) throws Exception {
-    if (providers.isEmpty() && m_configuration.isCreateEmptyPage()) {
-      createEmptyPage();
-    } else {
-      boolean selection = true;
-      for (IUiContentProvider contentProvider : providers) {
-        createPage(-1, contentProvider, selection);
-        selection = false;
-      }
-      configure();
-    }
-    m_listener.calculateFinish();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Update
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected final void updateFromObject(List<IUiContentProvider> providers) throws Exception {
+		if (providers.isEmpty() && m_configuration.isCreateEmptyPage()) {
+			createEmptyPage();
+		} else {
+			boolean selection = true;
+			for (IUiContentProvider contentProvider : providers) {
+				createPage(-1, contentProvider, selection);
+				selection = false;
+			}
+			configure();
+		}
+		m_listener.calculateFinish();
+	}
 
-  @Override
-  public void saveToObject() throws Exception {
-    List<IUiContentProvider> providers = Lists.newArrayList();
-    if (!m_showEmptyPage) {
-      int count = m_folder.getItemCount();
-      for (int i = 0; i < count; i++) {
-        IUiContentProvider provider = (IUiContentProvider) m_folder.getItem(i).getData();
-        providers.add(provider);
-        provider.saveToObject();
-      }
-    }
-    saveToObject(providers);
-  }
+	@Override
+	public void saveToObject() throws Exception {
+		List<IUiContentProvider> providers = Lists.newArrayList();
+		if (!m_showEmptyPage) {
+			int count = m_folder.getItemCount();
+			for (int i = 0; i < count; i++) {
+				IUiContentProvider provider = (IUiContentProvider) m_folder.getItem(i).getData();
+				providers.add(provider);
+				provider.saveToObject();
+			}
+		}
+		saveToObject(providers);
+	}
 
-  protected final CTabItem providerToItem(IUiContentProvider provider) {
-    int count = m_folder.getItemCount();
-    for (int i = 0; i < count; i++) {
-      CTabItem item = m_folder.getItem(i);
-      if (provider == item.getData()) {
-        return item;
-      }
-    }
-    return null;
-  }
+	protected final CTabItem providerToItem(IUiContentProvider provider) {
+		int count = m_folder.getItemCount();
+		for (int i = 0; i < count; i++) {
+			CTabItem item = m_folder.getItem(i);
+			if (provider == item.getData()) {
+				return item;
+			}
+		}
+		return null;
+	}
 
-  protected final List<IUiContentProvider> getProviders() {
-    List<IUiContentProvider> providers = Lists.newArrayList();
-    if (!m_showEmptyPage) {
-      int count = m_folder.getItemCount();
-      for (int i = 0; i < count; i++) {
-        IUiContentProvider provider = (IUiContentProvider) m_folder.getItem(i).getData();
-        providers.add(provider);
-      }
-    }
-    return providers;
-  }
+	protected final List<IUiContentProvider> getProviders() {
+		List<IUiContentProvider> providers = Lists.newArrayList();
+		if (!m_showEmptyPage) {
+			int count = m_folder.getItemCount();
+			for (int i = 0; i < count; i++) {
+				IUiContentProvider provider = (IUiContentProvider) m_folder.getItem(i).getData();
+				providers.add(provider);
+			}
+		}
+		return providers;
+	}
 
-  /**
-   * Invoke for save changes of edit objects.
-   */
-  protected abstract void saveToObject(List<IUiContentProvider> providers) throws Exception;
+	/**
+	 * Invoke for save changes of edit objects.
+	 */
+	protected abstract void saveToObject(List<IUiContentProvider> providers) throws Exception;
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/contentproviders/TreeTransfer.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/contentproviders/TreeTransfer.java
index fdc3d69f8..0b76dece0 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/contentproviders/TreeTransfer.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/contentproviders/TreeTransfer.java
@@ -22,36 +22,36 @@
  * @coverage bindings.ui
  */
 final class TreeTransfer extends ByteArrayTransfer {
-  public static final TreeTransfer INSTANCE = new TreeTransfer();
-  private static final String TYPE_NAME = "Tree content provider bindings tranfser";
-  private static final int TYPE_ID = registerType(TYPE_NAME);
+	public static final TreeTransfer INSTANCE = new TreeTransfer();
+	private static final String TYPE_NAME = "Tree content provider bindings tranfser";
+	private static final int TYPE_ID = registerType(TYPE_NAME);
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Transfer
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected int[] getTypeIds() {
-    return new int[]{TYPE_ID};
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Transfer
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected int[] getTypeIds() {
+		return new int[]{TYPE_ID};
+	}
 
-  @Override
-  protected String[] getTypeNames() {
-    return new String[]{TYPE_NAME};
-  }
+	@Override
+	protected String[] getTypeNames() {
+		return new String[]{TYPE_NAME};
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ByteArrayTransfer
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void javaToNative(Object object, TransferData transferData) {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ByteArrayTransfer
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void javaToNative(Object object, TransferData transferData) {
+	}
 
-  @Override
-  protected Object nativeToJava(TransferData transferData) {
-    return ArrayUtils.EMPTY_BYTE_ARRAY;
-  }
+	@Override
+	protected Object nativeToJava(TransferData transferData) {
+		return ArrayUtils.EMPTY_BYTE_ARRAY;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/contentproviders/UIContentContainer.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/contentproviders/UIContentContainer.java
index c21cc20b7..efadfa342 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/contentproviders/UIContentContainer.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/contentproviders/UIContentContainer.java
@@ -26,93 +26,93 @@
  * @coverage bindings.ui
  */
 public abstract class UIContentContainer<T> implements IUiContentProvider {
-  protected final T m_binding;
-  private final String m_errorPrefix;
-  protected final List<IUiContentProvider> m_providers = Lists.newArrayList();
+	protected final T m_binding;
+	private final String m_errorPrefix;
+	protected final List<IUiContentProvider> m_providers = Lists.newArrayList();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public UIContentContainer(T binding, String errorPrefix) {
-    m_binding = binding;
-    m_errorPrefix = errorPrefix;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public UIContentContainer(T binding, String errorPrefix) {
+		m_binding = binding;
+		m_errorPrefix = errorPrefix;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public T getBinding() {
-    return m_binding;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public T getBinding() {
+		return m_binding;
+	}
 
-  public List<IUiContentProvider> getProviders() {
-    return m_providers;
-  }
+	public List<IUiContentProvider> getProviders() {
+		return m_providers;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Complete
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void setCompleteListener(ICompleteListener listener) {
-    for (IUiContentProvider provider : m_providers) {
-      provider.setCompleteListener(listener);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Complete
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void setCompleteListener(ICompleteListener listener) {
+		for (IUiContentProvider provider : m_providers) {
+			provider.setCompleteListener(listener);
+		}
+	}
 
-  @Override
-  public String getErrorMessage() {
-    for (IUiContentProvider provider : m_providers) {
-      String errorMessage = provider.getErrorMessage();
-      if (errorMessage != null) {
-        return m_errorPrefix + errorMessage;
-      }
-    }
-    return null;
-  }
+	@Override
+	public String getErrorMessage() {
+		for (IUiContentProvider provider : m_providers) {
+			String errorMessage = provider.getErrorMessage();
+			if (errorMessage != null) {
+				return m_errorPrefix + errorMessage;
+			}
+		}
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public int getNumberOfControls() {
-    int columns = 0;
-    for (IUiContentProvider provider : m_providers) {
-      columns = Math.max(columns, provider.getNumberOfControls());
-    }
-    return columns;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public int getNumberOfControls() {
+		int columns = 0;
+		for (IUiContentProvider provider : m_providers) {
+			columns = Math.max(columns, provider.getNumberOfControls());
+		}
+		return columns;
+	}
 
-  @Override
-  public void createContent(Composite parent, int columns) {
-    for (IUiContentProvider provider : m_providers) {
-      provider.createContent(parent, columns);
-    }
-  }
+	@Override
+	public void createContent(Composite parent, int columns) {
+		for (IUiContentProvider provider : m_providers) {
+			provider.createContent(parent, columns);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Update
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void updateFromObject() throws Exception {
-    for (IUiContentProvider provider : m_providers) {
-      provider.updateFromObject();
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Update
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void updateFromObject() throws Exception {
+		for (IUiContentProvider provider : m_providers) {
+			provider.updateFromObject();
+		}
+	}
 
-  @Override
-  public void saveToObject() throws Exception {
-    for (IUiContentProvider provider : m_providers) {
-      provider.saveToObject();
-    }
-  }
+	@Override
+	public void saveToObject() throws Exception {
+		for (IUiContentProvider provider : m_providers) {
+			provider.saveToObject();
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/dialogfields/ComboButtonsDialogField.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/dialogfields/ComboButtonsDialogField.java
index 51277cbaf..7a4e8cc87 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/dialogfields/ComboButtonsDialogField.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/editor/dialogfields/ComboButtonsDialogField.java
@@ -32,102 +32,102 @@
  * @coverage bindings.ui
  */
 public class ComboButtonsDialogField extends ComboButtonDialogField {
-  private static final Image CLEAR_IMAGE = Activator.getImage("clear.gif");
-  private final IStringButtonAdapter m_clearAdapter;
-  private final boolean m_useClearButton;
-  private Button m_clearButton;
+	private static final Image CLEAR_IMAGE = Activator.getImage("clear.gif");
+	private final IStringButtonAdapter m_clearAdapter;
+	private final boolean m_useClearButton;
+	private Button m_clearButton;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ComboButtonsDialogField(IStringButtonAdapter browseAdapter,
-      IStringButtonAdapter clearAdapter,
-      int comboFlags,
-      boolean useClearButton) {
-    super(browseAdapter, comboFlags);
-    m_clearAdapter = clearAdapter;
-    m_useClearButton = useClearButton;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ComboButtonsDialogField(IStringButtonAdapter browseAdapter,
+			IStringButtonAdapter clearAdapter,
+			int comboFlags,
+			boolean useClearButton) {
+		super(browseAdapter, comboFlags);
+		m_clearAdapter = clearAdapter;
+		m_useClearButton = useClearButton;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Layout helpers
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Control[] doFillIntoGrid(Composite parent, int columns) {
-    assertEnoughColumns(columns);
-    // label
-    Label label = getLabelControl(parent);
-    label.setLayoutData(gridDataForLabel(1));
-    // combo
-    Combo combo = getComboControl(parent);
-    int needColumns = getNumberOfControls();
-    GridDataFactory.create(combo).fillH().grabH().spanH(columns - needColumns + 1);
-    // buttons
-    Button browseButton = getChangeControl(parent);
-    Button clearButton = m_useClearButton ? getClearControl(parent) : null;
-    // result controls
-    return m_useClearButton
-        ? new Control[]{label, combo, browseButton, clearButton}
-        : new Control[]{label, combo, browseButton};
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Layout helpers
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Control[] doFillIntoGrid(Composite parent, int columns) {
+		assertEnoughColumns(columns);
+		// label
+		Label label = getLabelControl(parent);
+		label.setLayoutData(gridDataForLabel(1));
+		// combo
+		Combo combo = getComboControl(parent);
+		int needColumns = getNumberOfControls();
+		GridDataFactory.create(combo).fillH().grabH().spanH(columns - needColumns + 1);
+		// buttons
+		Button browseButton = getChangeControl(parent);
+		Button clearButton = m_useClearButton ? getClearControl(parent) : null;
+		// result controls
+		return m_useClearButton
+				? new Control[]{label, combo, browseButton, clearButton}
+		: new Control[]{label, combo, browseButton};
+	}
 
-  @Override
-  public int getNumberOfControls() {
-    return m_useClearButton ? 4 : 3;
-  }
+	@Override
+	public int getNumberOfControls() {
+		return m_useClearButton ? 4 : 3;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // UI creation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public Button getClearControl(Composite parent) {
-    if (m_clearButton == null) {
-      assertCompositeNotNull(parent);
-      // create button
-      m_clearButton = new Button(parent, SWT.PUSH);
-      m_clearButton.setFont(parent.getFont());
-      m_clearButton.setImage(CLEAR_IMAGE);
-      m_clearButton.setEnabled(isEnabled());
-      // configure listener
-      m_clearButton.addSelectionListener(new SelectionListener() {
-        @Override
-        public void widgetDefaultSelected(SelectionEvent e) {
-          changeClearPressed();
-        }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// UI creation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public Button getClearControl(Composite parent) {
+		if (m_clearButton == null) {
+			assertCompositeNotNull(parent);
+			// create button
+			m_clearButton = new Button(parent, SWT.PUSH);
+			m_clearButton.setFont(parent.getFont());
+			m_clearButton.setImage(CLEAR_IMAGE);
+			m_clearButton.setEnabled(isEnabled());
+			// configure listener
+			m_clearButton.addSelectionListener(new SelectionListener() {
+				@Override
+				public void widgetDefaultSelected(SelectionEvent e) {
+					changeClearPressed();
+				}
 
-        @Override
-        public void widgetSelected(SelectionEvent e) {
-          changeClearPressed();
-        }
-      });
-    }
-    return m_clearButton;
-  }
+				@Override
+				public void widgetSelected(SelectionEvent e) {
+					changeClearPressed();
+				}
+			});
+		}
+		return m_clearButton;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Enable / disable management
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void updateEnableState() {
-    super.updateEnableState();
-    if (isOkToUse(m_clearButton)) {
-      m_clearButton.setEnabled(isEnabled());
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Enable / disable management
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void updateEnableState() {
+		super.updateEnableState();
+		if (isOkToUse(m_clearButton)) {
+			m_clearButton.setEnabled(isEnabled());
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Adapter communication
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void changeClearPressed() {
-    m_clearAdapter.changeControlPressed(this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Adapter communication
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void changeClearPressed() {
+		m_clearAdapter.changeControlPressed(this);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/filter/AllPropertiesFilter.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/filter/AllPropertiesFilter.java
index 640f4ec4b..e42350c23 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/filter/AllPropertiesFilter.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/filter/AllPropertiesFilter.java
@@ -22,22 +22,22 @@
  * @coverage bindings.ui
  */
 public final class AllPropertiesFilter extends PropertyFilter {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AllPropertiesFilter(String name, Image image) {
-    super(name, image);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AllPropertiesFilter(String name, Image image) {
+		super(name, image);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // PropertyFilter
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean select(Viewer viewer, IObserveInfo propertyObserve) {
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// PropertyFilter
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean select(Viewer viewer, IObserveInfo propertyObserve) {
+		return true;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/filter/PropertyFilter.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/filter/PropertyFilter.java
index 25651191b..b128034c7 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/filter/PropertyFilter.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/filter/PropertyFilter.java
@@ -22,45 +22,45 @@
  * @coverage bindings.ui
  */
 public abstract class PropertyFilter {
-  private final String m_name;
-  private final Image m_image;
+	private final String m_name;
+	private final Image m_image;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public PropertyFilter(String name, Image image) {
-    m_name = name;
-    m_image = image;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public PropertyFilter(String name, Image image) {
+		m_name = name;
+		m_image = image;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the name to display for user.
-   */
-  public final String getName() {
-    return m_name;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the name to display for user.
+	 */
+	public final String getName() {
+		return m_name;
+	}
 
-  /**
-   * @return the image to display for user.
-   */
-  public final Image getImage() {
-    return m_image;
-  }
+	/**
+	 * @return the image to display for user.
+	 */
+	public final Image getImage() {
+		return m_image;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Filter
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Returns whether the given {@link IObserveInfo} element makes it through this filter.
-   */
-  public abstract boolean select(Viewer viewer, IObserveInfo propertyObserve);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Filter
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Returns whether the given {@link IObserveInfo} element makes it through this filter.
+	 */
+	public abstract boolean select(Viewer viewer, IObserveInfo propertyObserve);
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/filter/TypesPropertyFilter.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/filter/TypesPropertyFilter.java
index 5eefbdbe0..4fbbfcd0c 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/filter/TypesPropertyFilter.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/filter/TypesPropertyFilter.java
@@ -23,24 +23,24 @@
  * @coverage bindings.ui
  */
 public abstract class TypesPropertyFilter extends PropertyFilter {
-  private final Class<?>[] m_types;
+	private final Class<?>[] m_types;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public TypesPropertyFilter(String name, Image image, Class<?>... types) {
-    super(name, image);
-    m_types = types;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public TypesPropertyFilter(String name, Image image, Class<?>... types) {
+		super(name, image);
+		m_types = types;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Filter
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected final boolean select(Class<?> type) {
-    return ArrayUtils.contains(m_types, type);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Filter
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected final boolean select(Class<?> type) {
+		return ArrayUtils.contains(m_types, type);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/property/AbstractBindingProperty.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/property/AbstractBindingProperty.java
index 59cf287fb..e38223e17 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/property/AbstractBindingProperty.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/property/AbstractBindingProperty.java
@@ -25,86 +25,86 @@
  * @coverage bindings.ui.properties
  */
 public abstract class AbstractBindingProperty extends AbstractProperty {
-  protected IBindingInfo m_binding;
-  protected boolean m_isTarget;
+	protected IBindingInfo m_binding;
+	protected boolean m_isTarget;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractBindingProperty(Context context) {
-    super(BindingPropertyEditor.EDITOR, context);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractBindingProperty(Context context) {
+		super(BindingPropertyEditor.EDITOR, context);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public final IBindingInfo getBinding() {
-    return m_binding;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public final IBindingInfo getBinding() {
+		return m_binding;
+	}
 
-  public final void setBinding(IBindingInfo binding, boolean isTarget) {
-    m_binding = binding;
-    m_isTarget = isTarget;
-  }
+	public final void setBinding(IBindingInfo binding, boolean isTarget) {
+		m_binding = binding;
+		m_isTarget = isTarget;
+	}
 
-  /**
-   * @return the text for displaying value of this property.
-   */
-  public abstract String getText() throws Exception;
+	/**
+	 * @return the text for displaying value of this property.
+	 */
+	public abstract String getText() throws Exception;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public final void editBinding() throws Exception {
-    editBinding(m_context, m_binding);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public final void editBinding() throws Exception {
+		editBinding(m_context, m_binding);
+	}
 
-  public static void editBinding(Context context, IBindingInfo binding) throws Exception {
-    BindDialog dialog =
-        new BindDialog(DesignerPlugin.getShell(),
-            context.plugin,
-            context.provider,
-            binding,
-            false,
-            false);
-    if (dialog.open() == Window.OK) {
-      context.provider.editBinding(binding);
-    }
-  }
+	public static void editBinding(Context context, IBindingInfo binding) throws Exception {
+		BindDialog dialog =
+				new BindDialog(DesignerPlugin.getShell(),
+						context.plugin,
+						context.provider,
+						binding,
+						false,
+						false);
+		if (dialog.open() == Window.OK) {
+			context.provider.editBinding(binding);
+		}
+	}
 
-  @Override
-  public final void setValue(Object value) throws Exception {
-    Assert.isTrue(value == UNKNOWN_VALUE);
-    deleteBinding(m_context, m_binding);
-  }
+	@Override
+	public final void setValue(Object value) throws Exception {
+		Assert.isTrue(value == UNKNOWN_VALUE);
+		deleteBinding(m_context, m_binding);
+	}
 
-  public static void deleteBinding(Context context, IBindingInfo binding) throws Exception {
-    if (BindingElementsComposite.canDeleteBinding(
-        context.provider,
-        binding,
-        DesignerPlugin.getShell())) {
-      context.provider.deleteBinding(binding);
-    }
-  }
+	public static void deleteBinding(Context context, IBindingInfo binding) throws Exception {
+		if (BindingElementsComposite.canDeleteBinding(
+				context.provider,
+				binding,
+				DesignerPlugin.getShell())) {
+			context.provider.deleteBinding(binding);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Property
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final String getTitle() {
-    return "";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Property
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final String getTitle() {
+		return "";
+	}
 
-  @Override
-  public final boolean isModified() throws Exception {
-    return true;
-  }
+	@Override
+	public final boolean isModified() throws Exception {
+		return true;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/property/AbstractBindingsProperty.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/property/AbstractBindingsProperty.java
index 6f4bded79..f2ea27d81 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/property/AbstractBindingsProperty.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/property/AbstractBindingsProperty.java
@@ -32,106 +32,106 @@
  * @coverage bindings.ui.properties
  */
 public abstract class AbstractBindingsProperty extends AbstractProperty {
-  private Property[] m_properties;
+	private Property[] m_properties;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractBindingsProperty(Context context) {
-    super(BindingsPropertyEditor.EDITOR, context);
-    setCategory(PropertyCategory.system(7));
-    m_context.objectInfo.addBroadcastListener(new ObjectEventListener() {
-      @Override
-      public void addContextMenu(List<? extends ObjectInfo> objects,
-          ObjectInfo object,
-          IMenuManager manager) throws Exception {
-        if (m_context.objectInfo == object) {
-          contributeActions(manager);
-        }
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractBindingsProperty(Context context) {
+		super(BindingsPropertyEditor.EDITOR, context);
+		setCategory(PropertyCategory.system(7));
+		m_context.objectInfo.addBroadcastListener(new ObjectEventListener() {
+			@Override
+			public void addContextMenu(List<? extends ObjectInfo> objects,
+					ObjectInfo object,
+					IMenuManager manager) throws Exception {
+				if (m_context.objectInfo == object) {
+					contributeActions(manager);
+				}
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public final Property[] getProperties() throws Exception {
-    if (m_properties == null) {
-      m_properties = createProperties();
-    }
-    return m_properties;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public final Property[] getProperties() throws Exception {
+		if (m_properties == null) {
+			m_properties = createProperties();
+		}
+		return m_properties;
+	}
 
-  /**
-   * @return the array with sub properties.
-   */
-  protected abstract Property[] createProperties() throws Exception;
+	/**
+	 * @return the array with sub properties.
+	 */
+	protected abstract Property[] createProperties() throws Exception;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Property
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final String getTitle() {
-    return Messages.AbstractBindingsProperty_title;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Property
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final String getTitle() {
+		return Messages.AbstractBindingsProperty_title;
+	}
 
-  @Override
-  public final boolean isModified() throws Exception {
-    for (Property property : getProperties()) {
-      if (property.isModified()) {
-        return true;
-      }
-    }
-    return false;
-  }
+	@Override
+	public final boolean isModified() throws Exception {
+		for (Property property : getProperties()) {
+			if (property.isModified()) {
+				return true;
+			}
+		}
+		return false;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Menu
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void contributeActions(IMenuManager manager) throws Exception {
-    IMenuManager menu = new MenuManager(Messages.AbstractBindingsProperty_menuName);
-    // fill bindings
-    for (IBindingInfo binding : m_context.provider.getBindings()) {
-      if (checkEquals(binding.getTarget())) {
-        addBindingAction(menu, binding, binding.getTargetProperty(), true);
-      } else if (checkEquals(binding.getModel())) {
-        addBindingAction(menu, binding, binding.getModelProperty(), false);
-      }
-    }
-    // separator
-    menu.add(new Separator());
-    // fill properties
-    for (Property property : getProperties()) {
-      if (property instanceof AbstractObserveProperty) {
-        AbstractObserveProperty observeProperty = (AbstractObserveProperty) property;
-        menu.add(new ObserveAction(m_context.objectInfo, observeProperty));
-      } else if (property instanceof SingleObserveBindingProperty) {
-        SingleObserveBindingProperty observeProperty = (SingleObserveBindingProperty) property;
-        menu.add(new SingleObserveBindingAction(m_context.objectInfo, observeProperty));
-      }
-    }
-    // add menu
-    manager.appendToGroup(IContextMenuConstants.GROUP_LAYOUT, menu);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Menu
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void contributeActions(IMenuManager manager) throws Exception {
+		IMenuManager menu = new MenuManager(Messages.AbstractBindingsProperty_menuName);
+		// fill bindings
+		for (IBindingInfo binding : m_context.provider.getBindings()) {
+			if (checkEquals(binding.getTarget())) {
+				addBindingAction(menu, binding, binding.getTargetProperty(), true);
+			} else if (checkEquals(binding.getModel())) {
+				addBindingAction(menu, binding, binding.getModelProperty(), false);
+			}
+		}
+		// separator
+		menu.add(new Separator());
+		// fill properties
+		for (Property property : getProperties()) {
+			if (property instanceof AbstractObserveProperty) {
+				AbstractObserveProperty observeProperty = (AbstractObserveProperty) property;
+				menu.add(new ObserveAction(m_context.objectInfo, observeProperty));
+			} else if (property instanceof SingleObserveBindingProperty) {
+				SingleObserveBindingProperty observeProperty = (SingleObserveBindingProperty) property;
+				menu.add(new SingleObserveBindingAction(m_context.objectInfo, observeProperty));
+			}
+		}
+		// add menu
+		manager.appendToGroup(IContextMenuConstants.GROUP_LAYOUT, menu);
+	}
 
-  /**
-   * @return <code>true</code> if given {@link IObserveInfo} represented property info.
-   */
-  protected abstract boolean checkEquals(IObserveInfo observe) throws Exception;
+	/**
+	 * @return <code>true</code> if given {@link IObserveInfo} represented property info.
+	 */
+	protected abstract boolean checkEquals(IObserveInfo observe) throws Exception;
 
-  /**
-   * Add menu action for given binding.
-   */
-  protected abstract void addBindingAction(IMenuManager menu,
-      IBindingInfo binding,
-      IObserveInfo observeProperty,
-      boolean isTarget) throws Exception;
+	/**
+	 * Add menu action for given binding.
+	 */
+	protected abstract void addBindingAction(IMenuManager menu,
+			IBindingInfo binding,
+			IObserveInfo observeProperty,
+			boolean isTarget) throws Exception;
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/property/AbstractJavaInfoPropertiesManager.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/property/AbstractJavaInfoPropertiesManager.java
index df13296cb..2f64dae2c 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/property/AbstractJavaInfoPropertiesManager.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/property/AbstractJavaInfoPropertiesManager.java
@@ -23,55 +23,55 @@
  * @coverage bindings.ui.properties
  */
 public abstract class AbstractJavaInfoPropertiesManager {
-  private static final String BINDINGS_KEY =
-      "Bindings-Property-853b7e9d-af65-4702-b9e4-de524cd066ca";
-  protected final IDatabindingsProvider m_provider;
+	private static final String BINDINGS_KEY =
+			"Bindings-Property-853b7e9d-af65-4702-b9e4-de524cd066ca";
+	protected final IDatabindingsProvider m_provider;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected AbstractJavaInfoPropertiesManager(IDatabindingsProvider provider) {
-    m_provider = provider;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected AbstractJavaInfoPropertiesManager(IDatabindingsProvider provider) {
+		m_provider = provider;
+	}
 
-  public AbstractJavaInfoPropertiesManager(IDatabindingsProvider provider, JavaInfo javaInfoRoot) {
-    m_provider = provider;
-    javaInfoRoot.addBroadcastListener(new JavaInfoAddProperties() {
-      @Override
-      public void invoke(JavaInfo javaInfo, List<Property> properties) throws Exception {
-        addBindingsProperty(javaInfo, properties);
-      }
-    });
-  }
+	public AbstractJavaInfoPropertiesManager(IDatabindingsProvider provider, JavaInfo javaInfoRoot) {
+		m_provider = provider;
+		javaInfoRoot.addBroadcastListener(new JavaInfoAddProperties() {
+			@Override
+			public void invoke(JavaInfo javaInfo, List<Property> properties) throws Exception {
+				addBindingsProperty(javaInfo, properties);
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Handle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected final void addBindingsProperty(ObjectInfo objectInfo, List<Property> properties)
-      throws Exception {
-    if (isCreateProperty(objectInfo)) {
-      AbstractBindingsProperty bindingsProperty =
-          (AbstractBindingsProperty) objectInfo.getArbitraryValue(BINDINGS_KEY);
-      if (bindingsProperty == null) {
-        bindingsProperty = createProperty(objectInfo);
-        objectInfo.putArbitraryValue(BINDINGS_KEY, bindingsProperty);
-      }
-      properties.add(bindingsProperty);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Handle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected final void addBindingsProperty(ObjectInfo objectInfo, List<Property> properties)
+			throws Exception {
+		if (isCreateProperty(objectInfo)) {
+			AbstractBindingsProperty bindingsProperty =
+					(AbstractBindingsProperty) objectInfo.getArbitraryValue(BINDINGS_KEY);
+			if (bindingsProperty == null) {
+				bindingsProperty = createProperty(objectInfo);
+				objectInfo.putArbitraryValue(BINDINGS_KEY, bindingsProperty);
+			}
+			properties.add(bindingsProperty);
+		}
+	}
 
-  /**
-   * @return <code>true</code> if for given {@link ObjectInfo} need create properties.
-   */
-  protected abstract boolean isCreateProperty(ObjectInfo objectInfo) throws Exception;
+	/**
+	 * @return <code>true</code> if for given {@link ObjectInfo} need create properties.
+	 */
+	protected abstract boolean isCreateProperty(ObjectInfo objectInfo) throws Exception;
 
-  /**
-   * Create {@link AbstractBindingsProperty} for given {@link ObjectInfo}.
-   */
-  protected abstract AbstractBindingsProperty createProperty(ObjectInfo objectInfo)
-      throws Exception;
+	/**
+	 * Create {@link AbstractBindingsProperty} for given {@link ObjectInfo}.
+	 */
+	protected abstract AbstractBindingsProperty createProperty(ObjectInfo objectInfo)
+			throws Exception;
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/property/AbstractObserveProperty.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/property/AbstractObserveProperty.java
index 4e7ffc3aa..7c23b6fb1 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/property/AbstractObserveProperty.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/property/AbstractObserveProperty.java
@@ -28,74 +28,74 @@
  * @coverage bindings.ui.properties
  */
 public abstract class AbstractObserveProperty extends AbstractProperty {
-  protected final IObserveInfo m_observeProperty;
-  protected final List<AbstractBindingProperty> m_bindingProperties = Lists.newArrayList();
-  private final String m_title;
+	protected final IObserveInfo m_observeProperty;
+	protected final List<AbstractBindingProperty> m_bindingProperties = Lists.newArrayList();
+	private final String m_title;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractObserveProperty(Context context, IObserveInfo observeProperty) throws Exception {
-    super(ObservePropertyEditor.EDITOR, context);
-    m_observeProperty = observeProperty;
-    m_title = m_observeProperty.getPresentation().getText();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractObserveProperty(Context context, IObserveInfo observeProperty) throws Exception {
+		super(ObservePropertyEditor.EDITOR, context);
+		m_observeProperty = observeProperty;
+		m_title = m_observeProperty.getPresentation().getText();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public final IObserveInfo getObserveProperty() {
-    return m_observeProperty;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public final IObserveInfo getObserveProperty() {
+		return m_observeProperty;
+	}
 
-  public final List<AbstractBindingProperty> getBindingProperties() {
-    return m_bindingProperties;
-  }
+	public final List<AbstractBindingProperty> getBindingProperties() {
+		return m_bindingProperties;
+	}
 
-  /**
-   * Add all binding to given {@code bindings} for this observe.
-   */
-  public abstract void getBindings(List<IBindingInfo> bindings, List<Boolean> isTargets)
-      throws Exception;
+	/**
+	 * Add all binding to given {@code bindings} for this observe.
+	 */
+	public abstract void getBindings(List<IBindingInfo> bindings, List<Boolean> isTargets)
+			throws Exception;
 
-  /**
-   * @return {@link AbstractBindingProperty} new binding property for this observe.
-   */
-  public abstract AbstractBindingProperty createBindingProperty() throws Exception;
+	/**
+	 * @return {@link AbstractBindingProperty} new binding property for this observe.
+	 */
+	public abstract AbstractBindingProperty createBindingProperty() throws Exception;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Operation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void createBinding() throws Exception {
-    createBinding(m_context, m_observeProperty);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Operation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void createBinding() throws Exception {
+		createBinding(m_context, m_observeProperty);
+	}
 
-  public static final void createBinding(Context context, IObserveInfo observeProperty)
-      throws Exception {
-    BindWizard wizard = new BindWizard(context, observeProperty);
-    WizardDialog dialog = new WizardDialog(DesignerPlugin.getShell(), wizard);
-    dialog.open();
-  }
+	public static final void createBinding(Context context, IObserveInfo observeProperty)
+			throws Exception {
+		BindWizard wizard = new BindWizard(context, observeProperty);
+		WizardDialog dialog = new WizardDialog(DesignerPlugin.getShell(), wizard);
+		dialog.open();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Property
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final String getTitle() {
-    return m_title;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Property
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final String getTitle() {
+		return m_title;
+	}
 
-  @Override
-  public final boolean isModified() throws Exception {
-    ObservePropertyEditor.EDITOR.updateProperties(this);
-    return !m_bindingProperties.isEmpty();
-  }
+	@Override
+	public final boolean isModified() throws Exception {
+		ObservePropertyEditor.EDITOR.updateProperties(this);
+		return !m_bindingProperties.isEmpty();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/property/AbstractProperty.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/property/AbstractProperty.java
index 525037ac1..2e54d1d25 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/property/AbstractProperty.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/property/AbstractProperty.java
@@ -20,29 +20,29 @@
  * @coverage bindings.ui.properties
  */
 public abstract class AbstractProperty extends Property {
-  protected final Context m_context;
+	protected final Context m_context;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractProperty(PropertyEditor editor, Context context) {
-    super(editor);
-    m_context = context;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractProperty(PropertyEditor editor, Context context) {
+		super(editor);
+		m_context = context;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Property
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final Object getValue() throws Exception {
-    return UNKNOWN_VALUE;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Property
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final Object getValue() throws Exception {
+		return UNKNOWN_VALUE;
+	}
 
-  @Override
-  public void setValue(Object value) throws Exception {
-  }
+	@Override
+	public void setValue(Object value) throws Exception {
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/property/BindingAction.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/property/BindingAction.java
index 984c0a950..6463d8489 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/property/BindingAction.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/property/BindingAction.java
@@ -20,27 +20,27 @@
  * @coverage bindings.ui.properties
  */
 public class BindingAction extends ObjectInfoAction {
-  private final Context m_context;
-  private final IBindingInfo m_binding;
+	private final Context m_context;
+	private final IBindingInfo m_binding;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public BindingAction(Context context, IBindingInfo binding) {
-    super(context.objectInfo);
-    m_context = context;
-    m_binding = binding;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public BindingAction(Context context, IBindingInfo binding) {
+		super(context.objectInfo);
+		m_context = context;
+		m_binding = binding;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ObjectInfoAction
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void runEx() throws Exception {
-    AbstractBindingProperty.editBinding(m_context, m_binding);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ObjectInfoAction
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void runEx() throws Exception {
+		AbstractBindingProperty.editBinding(m_context, m_binding);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/property/BindingPropertyEditor.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/property/BindingPropertyEditor.java
index 8edb47a23..f65cde8f4 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/property/BindingPropertyEditor.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/property/BindingPropertyEditor.java
@@ -20,27 +20,27 @@
  * @coverage bindings.ui.properties
  */
 public final class BindingPropertyEditor extends TextDialogPropertyEditor {
-  public static final BindingPropertyEditor EDITOR = new BindingPropertyEditor();
+	public static final BindingPropertyEditor EDITOR = new BindingPropertyEditor();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // TextDisplayPropertyEditor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getText(Property property) throws Exception {
-    AbstractBindingProperty bindingProperty = (AbstractBindingProperty) property;
-    return bindingProperty.getText();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// TextDisplayPropertyEditor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getText(Property property) throws Exception {
+		AbstractBindingProperty bindingProperty = (AbstractBindingProperty) property;
+		return bindingProperty.getText();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // TextDialogPropertyEditor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void openDialog(Property property) throws Exception {
-    AbstractBindingProperty bindingProperty = (AbstractBindingProperty) property;
-    bindingProperty.editBinding();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// TextDialogPropertyEditor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void openDialog(Property property) throws Exception {
+		AbstractBindingProperty bindingProperty = (AbstractBindingProperty) property;
+		bindingProperty.editBinding();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/property/BindingsPropertyEditor.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/property/BindingsPropertyEditor.java
index ab5344ceb..c0ab6655a 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/property/BindingsPropertyEditor.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/property/BindingsPropertyEditor.java
@@ -21,38 +21,38 @@
  * @coverage bindings.ui.properties
  */
 public final class BindingsPropertyEditor extends TextDisplayPropertyEditor
-    implements
-      IComplexPropertyEditor {
-  public static final BindingsPropertyEditor EDITOR = new BindingsPropertyEditor();
+implements
+IComplexPropertyEditor {
+	public static final BindingsPropertyEditor EDITOR = new BindingsPropertyEditor();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IComplexPropertyEditor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Property[] getProperties(Property property) throws Exception {
-    AbstractBindingsProperty bindingsProperty = (AbstractBindingsProperty) property;
-    return bindingsProperty.getProperties();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IComplexPropertyEditor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Property[] getProperties(Property property) throws Exception {
+		AbstractBindingsProperty bindingsProperty = (AbstractBindingsProperty) property;
+		return bindingsProperty.getProperties();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // TextDisplayPropertyEditor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getText(Property property) throws Exception {
-    StringBuffer text = new StringBuffer("[");
-    for (Property subProperty : getProperties(property)) {
-      if (subProperty.isModified()) {
-        if (text.length() > 1) {
-          text.append(", ");
-        }
-        text.append(subProperty.getTitle());
-      }
-    }
-    text.append("]");
-    return text.toString();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// TextDisplayPropertyEditor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getText(Property property) throws Exception {
+		StringBuffer text = new StringBuffer("[");
+		for (Property subProperty : getProperties(property)) {
+			if (subProperty.isModified()) {
+				if (text.length() > 1) {
+					text.append(", ");
+				}
+				text.append(subProperty.getTitle());
+			}
+		}
+		text.append("]");
+		return text.toString();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/property/Context.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/property/Context.java
index 035990a36..b42a491a0 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/property/Context.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/property/Context.java
@@ -22,28 +22,28 @@
  * @coverage bindings.ui.properties
  */
 public final class Context {
-  public final AbstractUIPlugin plugin;
-  public final IDatabindingsProvider provider;
-  public final ObjectInfo objectInfo;
-  public IObserveInfo observeObject;
+	public final AbstractUIPlugin plugin;
+	public final IDatabindingsProvider provider;
+	public final ObjectInfo objectInfo;
+	public IObserveInfo observeObject;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public Context(AbstractUIPlugin plugin, IDatabindingsProvider provider, ObjectInfo objectInfo) {
-    this.plugin = plugin;
-    this.provider = provider;
-    this.objectInfo = objectInfo;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public Context(AbstractUIPlugin plugin, IDatabindingsProvider provider, ObjectInfo objectInfo) {
+		this.plugin = plugin;
+		this.provider = provider;
+		this.objectInfo = objectInfo;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public JavaInfo javaInfo() {
-    return (JavaInfo) objectInfo;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public JavaInfo javaInfo() {
+		return (JavaInfo) objectInfo;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/property/ObserveAction.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/property/ObserveAction.java
index 28e9c0064..5d57916b0 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/property/ObserveAction.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/property/ObserveAction.java
@@ -21,29 +21,29 @@
  * @coverage bindings.ui.properties
  */
 public class ObserveAction extends ObjectInfoAction {
-  private final AbstractObserveProperty m_property;
+	private final AbstractObserveProperty m_property;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ObserveAction(ObjectInfo object, AbstractObserveProperty property) throws Exception {
-    super(object);
-    m_property = property;
-    //
-    IObservePresentation presentation = m_property.getObserveProperty().getPresentation();
-    setText(presentation.getText());
-    setIcon(presentation.getImage());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ObserveAction(ObjectInfo object, AbstractObserveProperty property) throws Exception {
+		super(object);
+		m_property = property;
+		//
+		IObservePresentation presentation = m_property.getObserveProperty().getPresentation();
+		setText(presentation.getText());
+		setIcon(presentation.getImage());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ObjectInfoAction
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void runEx() throws Exception {
-    m_property.createBinding();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ObjectInfoAction
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void runEx() throws Exception {
+		m_property.createBinding();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/property/ObservePropertyEditor.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/property/ObservePropertyEditor.java
index 980835e60..a9a1aaa98 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/property/ObservePropertyEditor.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/property/ObservePropertyEditor.java
@@ -26,80 +26,80 @@
  * @coverage bindings.ui.properties
  */
 public final class ObservePropertyEditor extends TextDialogPropertyEditor
-    implements
-      IComplexPropertyEditor {
-  public static final ObservePropertyEditor EDITOR = new ObservePropertyEditor();
+implements
+IComplexPropertyEditor {
+	public static final ObservePropertyEditor EDITOR = new ObservePropertyEditor();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IComplexPropertyEditor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public List<AbstractBindingProperty> updateProperties(Property property) throws Exception {
-    AbstractObserveProperty observeProperty = (AbstractObserveProperty) property;
-    List<AbstractBindingProperty> bindingProperties = observeProperty.getBindingProperties();
-    //
-    List<IBindingInfo> bindings = Lists.newArrayList();
-    List<Boolean> isTargets = Lists.newArrayList();
-    observeProperty.getBindings(bindings, isTargets);
-    //
-    int oldSize = bindingProperties.size();
-    int newSize = bindings.size();
-    int size = Math.min(oldSize, newSize);
-    //
-    for (int i = 0; i < size; i++) {
-      bindingProperties.get(i).setBinding(bindings.get(i), isTargets.get(i));
-    }
-    if (oldSize > newSize) {
-      for (int i = newSize; i < oldSize; i++) {
-        bindingProperties.remove(newSize);
-      }
-    } else if (oldSize < newSize) {
-      for (int i = oldSize; i < newSize; i++) {
-        AbstractBindingProperty bindingProperty = observeProperty.createBindingProperty();
-        bindingProperty.setBinding(bindings.get(i), isTargets.get(i));
-        bindingProperties.add(bindingProperty);
-      }
-    }
-    //
-    return bindingProperties;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IComplexPropertyEditor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public List<AbstractBindingProperty> updateProperties(Property property) throws Exception {
+		AbstractObserveProperty observeProperty = (AbstractObserveProperty) property;
+		List<AbstractBindingProperty> bindingProperties = observeProperty.getBindingProperties();
+		//
+		List<IBindingInfo> bindings = Lists.newArrayList();
+		List<Boolean> isTargets = Lists.newArrayList();
+		observeProperty.getBindings(bindings, isTargets);
+		//
+		int oldSize = bindingProperties.size();
+		int newSize = bindings.size();
+		int size = Math.min(oldSize, newSize);
+		//
+		for (int i = 0; i < size; i++) {
+			bindingProperties.get(i).setBinding(bindings.get(i), isTargets.get(i));
+		}
+		if (oldSize > newSize) {
+			for (int i = newSize; i < oldSize; i++) {
+				bindingProperties.remove(newSize);
+			}
+		} else if (oldSize < newSize) {
+			for (int i = oldSize; i < newSize; i++) {
+				AbstractBindingProperty bindingProperty = observeProperty.createBindingProperty();
+				bindingProperty.setBinding(bindings.get(i), isTargets.get(i));
+				bindingProperties.add(bindingProperty);
+			}
+		}
+		//
+		return bindingProperties;
+	}
 
-  @Override
-  public Property[] getProperties(Property property) throws Exception {
-    List<AbstractBindingProperty> properties = updateProperties(property);
-    return properties.toArray(new Property[properties.size()]);
-  }
+	@Override
+	public Property[] getProperties(Property property) throws Exception {
+		List<AbstractBindingProperty> properties = updateProperties(property);
+		return properties.toArray(new Property[properties.size()]);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // TextDisplayPropertyEditor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getText(Property property) throws Exception {
-    StringBuffer text = new StringBuffer();
-    for (AbstractBindingProperty bindingProperty : updateProperties(property)) {
-      if (text.length() > 0) {
-        text.append(", ");
-      }
-      text.append(bindingProperty.getText());
-    }
-    if (text.length() > 0) {
-      text.insert(0, "[");
-      text.append("]");
-    }
-    return text.toString();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// TextDisplayPropertyEditor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getText(Property property) throws Exception {
+		StringBuffer text = new StringBuffer();
+		for (AbstractBindingProperty bindingProperty : updateProperties(property)) {
+			if (text.length() > 0) {
+				text.append(", ");
+			}
+			text.append(bindingProperty.getText());
+		}
+		if (text.length() > 0) {
+			text.insert(0, "[");
+			text.append("]");
+		}
+		return text.toString();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // TextDialogPropertyEditor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void openDialog(Property property) throws Exception {
-    AbstractObserveProperty observeProperty = (AbstractObserveProperty) property;
-    observeProperty.createBinding();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// TextDialogPropertyEditor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void openDialog(Property property) throws Exception {
+		AbstractObserveProperty observeProperty = (AbstractObserveProperty) property;
+		observeProperty.createBinding();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/property/SingleObserveBindingAction.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/property/SingleObserveBindingAction.java
index 01dd06576..6c1d4c174 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/property/SingleObserveBindingAction.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/property/SingleObserveBindingAction.java
@@ -21,30 +21,30 @@
  * @coverage bindings.ui.properties
  */
 public class SingleObserveBindingAction extends ObjectInfoAction {
-  private final SingleObserveBindingProperty m_property;
+	private final SingleObserveBindingProperty m_property;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SingleObserveBindingAction(ObjectInfo object, SingleObserveBindingProperty property)
-      throws Exception {
-    super(object);
-    m_property = property;
-    //
-    IObservePresentation presentation = m_property.getObserveProperty().getPresentation();
-    setText(presentation.getText());
-    setIcon(presentation.getImage());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SingleObserveBindingAction(ObjectInfo object, SingleObserveBindingProperty property)
+			throws Exception {
+		super(object);
+		m_property = property;
+		//
+		IObservePresentation presentation = m_property.getObserveProperty().getPresentation();
+		setText(presentation.getText());
+		setIcon(presentation.getImage());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ObjectInfoAction
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void runEx() throws Exception {
-    m_property.editBinding();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ObjectInfoAction
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void runEx() throws Exception {
+		m_property.editBinding();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/property/SingleObserveBindingProperty.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/property/SingleObserveBindingProperty.java
index 28e0f6aeb..61fadb252 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/property/SingleObserveBindingProperty.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/property/SingleObserveBindingProperty.java
@@ -23,83 +23,83 @@
  * @coverage bindings.ui.properties
  */
 public abstract class SingleObserveBindingProperty extends AbstractProperty {
-  private static final TextDialogPropertyEditor EDITOR = new TextDialogPropertyEditor() {
-    @Override
-    protected String getText(Property property) throws Exception {
-      SingleObserveBindingProperty observeProperty = (SingleObserveBindingProperty) property;
-      return observeProperty.getText();
-    }
+	private static final TextDialogPropertyEditor EDITOR = new TextDialogPropertyEditor() {
+		@Override
+		protected String getText(Property property) throws Exception {
+			SingleObserveBindingProperty observeProperty = (SingleObserveBindingProperty) property;
+			return observeProperty.getText();
+		}
 
-    @Override
-    protected void openDialog(Property property) throws Exception {
-      SingleObserveBindingProperty observeProperty = (SingleObserveBindingProperty) property;
-      observeProperty.editBinding();
-    }
-  };
-  protected final IObserveInfo m_observeProperty;
-  private final String m_title;
+		@Override
+		protected void openDialog(Property property) throws Exception {
+			SingleObserveBindingProperty observeProperty = (SingleObserveBindingProperty) property;
+			observeProperty.editBinding();
+		}
+	};
+	protected final IObserveInfo m_observeProperty;
+	private final String m_title;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SingleObserveBindingProperty(Context context, IObserveInfo observeProperty)
-      throws Exception {
-    super(EDITOR, context);
-    m_observeProperty = observeProperty;
-    m_title = m_observeProperty.getPresentation().getText();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SingleObserveBindingProperty(Context context, IObserveInfo observeProperty)
+			throws Exception {
+		super(EDITOR, context);
+		m_observeProperty = observeProperty;
+		m_title = m_observeProperty.getPresentation().getText();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public final IObserveInfo getObserveProperty() {
-    return m_observeProperty;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public final IObserveInfo getObserveProperty() {
+		return m_observeProperty;
+	}
 
-  public final void editBinding() throws Exception {
-    IBindingInfo binding = getBinding();
-    if (binding == null) {
-      AbstractObserveProperty.createBinding(m_context, m_observeProperty);
-    } else {
-      AbstractBindingProperty.editBinding(m_context, binding);
-    }
-  }
+	public final void editBinding() throws Exception {
+		IBindingInfo binding = getBinding();
+		if (binding == null) {
+			AbstractObserveProperty.createBinding(m_context, m_observeProperty);
+		} else {
+			AbstractBindingProperty.editBinding(m_context, binding);
+		}
+	}
 
-  /**
-   * @return {@link IBindingInfo} for this property.
-   */
-  protected abstract IBindingInfo getBinding() throws Exception;
+	/**
+	 * @return {@link IBindingInfo} for this property.
+	 */
+	protected abstract IBindingInfo getBinding() throws Exception;
 
-  /**
-   * @return the text for displaying value of this property.
-   */
-  protected abstract String getText() throws Exception;
+	/**
+	 * @return the text for displaying value of this property.
+	 */
+	protected abstract String getText() throws Exception;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Property
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final String getTitle() {
-    return m_title;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Property
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final String getTitle() {
+		return m_title;
+	}
 
-  @Override
-  public final boolean isModified() throws Exception {
-    return getBinding() != null;
-  }
+	@Override
+	public final boolean isModified() throws Exception {
+		return getBinding() != null;
+	}
 
-  @Override
-  public final void setValue(Object value) throws Exception {
-    Assert.isTrue(value == UNKNOWN_VALUE);
-    IBindingInfo binding = getBinding();
-    if (binding != null) {
-      AbstractBindingProperty.deleteBinding(m_context, binding);
-    }
-  }
+	@Override
+	public final void setValue(Object value) throws Exception {
+		Assert.isTrue(value == UNKNOWN_VALUE);
+		IBindingInfo binding = getBinding();
+		if (binding != null) {
+			AbstractBindingProperty.deleteBinding(m_context, binding);
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/providers/ObjectsTreeContentProvider.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/providers/ObjectsTreeContentProvider.java
index 89abf9ac8..18afc137b 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/providers/ObjectsTreeContentProvider.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/providers/ObjectsTreeContentProvider.java
@@ -29,94 +29,94 @@
  * @coverage bindings.ui
  */
 public class ObjectsTreeContentProvider implements ITreeContentProvider {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Input
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Object[] getElements(Object input) {
-    // case collection
-    if (input instanceof Collection<?>) {
-      Collection<?> inputCollection = (Collection<?>) input;
-      return inputCollection.toArray();
-    }
-    // case array
-    if (input instanceof Object[]) {
-      return (Object[]) input;
-    }
-    // case direct object
-    if (input instanceof ObjectInfo) {
-      return getChildren(input);
-    }
-    // no input
-    return ArrayUtils.EMPTY_OBJECT_ARRAY;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Input
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Object[] getElements(Object input) {
+		// case collection
+		if (input instanceof Collection<?>) {
+			Collection<?> inputCollection = (Collection<?>) input;
+			return inputCollection.toArray();
+		}
+		// case array
+		if (input instanceof Object[]) {
+			return (Object[]) input;
+		}
+		// case direct object
+		if (input instanceof ObjectInfo) {
+			return getChildren(input);
+		}
+		// no input
+		return ArrayUtils.EMPTY_OBJECT_ARRAY;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parent/Children
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Object getParent(Object element) {
-    if (element instanceof ObjectInfo) {
-      ObjectInfo info = (ObjectInfo) element;
-      return info.getParent();
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parent/Children
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Object getParent(Object element) {
+		if (element instanceof ObjectInfo) {
+			ObjectInfo info = (ObjectInfo) element;
+			return info.getParent();
+		}
+		return null;
+	}
 
-  @Override
-  public boolean hasChildren(Object element) {
-    if (element instanceof ObjectInfo) {
-      // prepare info
-      ObjectInfo info = (ObjectInfo) element;
-      // prepare presentation
-      final IObjectPresentation presentation = info.getPresentation();
-      if (presentation != null) {
-        // check children
-        return ExecutionUtils.runObjectLog(new RunnableObjectEx<Boolean>() {
-          @Override
-          public Boolean runObject() throws Exception {
-            return presentation.isVisible() && !presentation.getChildrenTree().isEmpty();
-          }
-        }, false);
-      }
-    }
-    return false;
-  }
+	@Override
+	public boolean hasChildren(Object element) {
+		if (element instanceof ObjectInfo) {
+			// prepare info
+			ObjectInfo info = (ObjectInfo) element;
+			// prepare presentation
+			final IObjectPresentation presentation = info.getPresentation();
+			if (presentation != null) {
+				// check children
+				return ExecutionUtils.runObjectLog(new RunnableObjectEx<Boolean>() {
+					@Override
+					public Boolean runObject() throws Exception {
+						return presentation.isVisible() && !presentation.getChildrenTree().isEmpty();
+					}
+				}, false);
+			}
+		}
+		return false;
+	}
 
-  @Override
-  public Object[] getChildren(Object element) {
-    if (element instanceof ObjectInfo) {
-      // prepare info
-      ObjectInfo info = (ObjectInfo) element;
-      // prepare presentation
-      final IObjectPresentation presentation = info.getPresentation();
-      if (presentation != null) {
-        // get children
-        return ExecutionUtils.runObjectLog(new RunnableObjectEx<Object[]>() {
-          @Override
-          public Object[] runObject() throws Exception {
-            return presentation.getChildrenTree().toArray();
-          }
-        }, ArrayUtils.EMPTY_OBJECT_ARRAY);
-      }
-    }
-    return ArrayUtils.EMPTY_OBJECT_ARRAY;
-  }
+	@Override
+	public Object[] getChildren(Object element) {
+		if (element instanceof ObjectInfo) {
+			// prepare info
+			ObjectInfo info = (ObjectInfo) element;
+			// prepare presentation
+			final IObjectPresentation presentation = info.getPresentation();
+			if (presentation != null) {
+				// get children
+				return ExecutionUtils.runObjectLog(new RunnableObjectEx<Object[]>() {
+					@Override
+					public Object[] runObject() throws Exception {
+						return presentation.getChildrenTree().toArray();
+					}
+				}, ArrayUtils.EMPTY_OBJECT_ARRAY);
+			}
+		}
+		return ArrayUtils.EMPTY_OBJECT_ARRAY;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Life cycle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void dispose() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Life cycle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void dispose() {
+	}
 
-  @Override
-  public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
-  }
+	@Override
+	public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/providers/ObserveDecoratingLabelProvider.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/providers/ObserveDecoratingLabelProvider.java
index 7c19f6b02..60c9b7c52 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/providers/ObserveDecoratingLabelProvider.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/providers/ObserveDecoratingLabelProvider.java
@@ -29,65 +29,65 @@
  * @coverage bindings.ui
  */
 public final class ObserveDecoratingLabelProvider extends ObserveLabelProvider
-    implements
-      IColorProvider,
-      IFontProvider {
-  private final Font m_italicFont;
-  private final Font m_boldFont;
-  private final Font m_boldItalicFont;
+implements
+IColorProvider,
+IFontProvider {
+	private final Font m_italicFont;
+	private final Font m_boldFont;
+	private final Font m_boldItalicFont;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ObserveDecoratingLabelProvider(StructuredViewer viewer) {
-    Font baseFont = viewer.getControl().getFont();
-    m_boldFont = DrawUtils.getBoldFont(baseFont);
-    m_italicFont = DrawUtils.getItalicFont(baseFont);
-    m_boldItalicFont = DrawUtils.getBoldItalicFont(baseFont);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ObserveDecoratingLabelProvider(StructuredViewer viewer) {
+		Font baseFont = viewer.getControl().getFont();
+		m_boldFont = DrawUtils.getBoldFont(baseFont);
+		m_italicFont = DrawUtils.getItalicFont(baseFont);
+		m_boldItalicFont = DrawUtils.getBoldItalicFont(baseFont);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void dispose() {
-    super.dispose();
-    m_italicFont.dispose();
-    m_boldFont.dispose();
-    m_boldItalicFont.dispose();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void dispose() {
+		super.dispose();
+		m_italicFont.dispose();
+		m_boldFont.dispose();
+		m_boldItalicFont.dispose();
+	}
 
-  private static IObserveDecorator getDecorator(Object element) {
-    IObserveDecoration observe = (IObserveDecoration) element;
-    return observe.getDecorator();
-  }
+	private static IObserveDecorator getDecorator(Object element) {
+		IObserveDecoration observe = (IObserveDecoration) element;
+		return observe.getDecorator();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IColorDecorator
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Color getBackground(Object element) {
-    return getDecorator(element).getBackground();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IColorDecorator
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Color getBackground(Object element) {
+		return getDecorator(element).getBackground();
+	}
 
-  @Override
-  public Color getForeground(Object element) {
-    return getDecorator(element).getForeground();
-  }
+	@Override
+	public Color getForeground(Object element) {
+		return getDecorator(element).getForeground();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IFontDecorator
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Font getFont(Object element) {
-    return getDecorator(element).getFont(m_italicFont, m_boldFont, m_boldItalicFont);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IFontDecorator
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Font getFont(Object element) {
+		return getDecorator(element).getFont(m_italicFont, m_boldFont, m_boldItalicFont);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/providers/ObserveLabelProvider.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/providers/ObserveLabelProvider.java
index 732ebfc5e..4c8d02c9c 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/providers/ObserveLabelProvider.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/providers/ObserveLabelProvider.java
@@ -25,38 +25,38 @@
  * @coverage bindings.ui
  */
 public class ObserveLabelProvider extends LabelProvider {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static IObservePresentation getPresentation(Object element) {
-    IObserveInfo observe = (IObserveInfo) element;
-    return observe.getPresentation();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static IObservePresentation getPresentation(Object element) {
+		IObserveInfo observe = (IObserveInfo) element;
+		return observe.getPresentation();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // LabelProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getText(final Object element) {
-    return ExecutionUtils.runObjectLog(new RunnableObjectEx<String>() {
-      @Override
-      public String runObject() throws Exception {
-        return getPresentation(element).getText();
-      }
-    }, "<exception, see log>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// LabelProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getText(final Object element) {
+		return ExecutionUtils.runObjectLog(new RunnableObjectEx<String>() {
+			@Override
+			public String runObject() throws Exception {
+				return getPresentation(element).getText();
+			}
+		}, "<exception, see log>");
+	}
 
-  @Override
-  public Image getImage(final Object element) {
-    return ExecutionUtils.runObjectLog(new RunnableObjectEx<Image>() {
-      @Override
-      public Image runObject() throws Exception {
-        return getPresentation(element).getImage();
-      }
-    }, null);
-  }
+	@Override
+	public Image getImage(final Object element) {
+		return ExecutionUtils.runObjectLog(new RunnableObjectEx<Image>() {
+			@Override
+			public Image runObject() throws Exception {
+				return getPresentation(element).getImage();
+			}
+		}, null);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/providers/ObserveTreeContentProvider.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/providers/ObserveTreeContentProvider.java
index 789489ff4..d1ac25c90 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/providers/ObserveTreeContentProvider.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/ui/providers/ObserveTreeContentProvider.java
@@ -27,74 +27,74 @@
  * @coverage bindings.ui
  */
 public class ObserveTreeContentProvider implements ITreeContentProvider {
-  private final ChildrenContext m_context;
+	private final ChildrenContext m_context;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ObserveTreeContentProvider(ChildrenContext context) {
-    m_context = context;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ObserveTreeContentProvider(ChildrenContext context) {
+		m_context = context;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Input
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Object[] getElements(Object input) {
-    // case array
-    if (input instanceof Object[]) {
-      return (Object[]) input;
-    }
-    // case collection
-    if (input instanceof List<?>) {
-      List<?> listInput = (List<?>) input;
-      return listInput.toArray();
-    }
-    // case direct object
-    if (input instanceof IObserveInfo) {
-      return getChildren(input);
-    }
-    // no input
-    return ArrayUtils.EMPTY_OBJECT_ARRAY;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Input
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Object[] getElements(Object input) {
+		// case array
+		if (input instanceof Object[]) {
+			return (Object[]) input;
+		}
+		// case collection
+		if (input instanceof List<?>) {
+			List<?> listInput = (List<?>) input;
+			return listInput.toArray();
+		}
+		// case direct object
+		if (input instanceof IObserveInfo) {
+			return getChildren(input);
+		}
+		// no input
+		return ArrayUtils.EMPTY_OBJECT_ARRAY;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parent/Children
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean hasChildren(Object element) {
-    IObserveInfo observe = (IObserveInfo) element;
-    return !observe.getChildren(m_context).isEmpty();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parent/Children
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean hasChildren(Object element) {
+		IObserveInfo observe = (IObserveInfo) element;
+		return !observe.getChildren(m_context).isEmpty();
+	}
 
-  @Override
-  public Object[] getChildren(Object element) {
-    IObserveInfo observe = (IObserveInfo) element;
-    return observe.getChildren(m_context).toArray();
-  }
+	@Override
+	public Object[] getChildren(Object element) {
+		IObserveInfo observe = (IObserveInfo) element;
+		return observe.getChildren(m_context).toArray();
+	}
 
-  @Override
-  public Object getParent(Object element) {
-    IObserveInfo observe = (IObserveInfo) element;
-    return observe.getParent();
-  }
+	@Override
+	public Object getParent(Object element) {
+		IObserveInfo observe = (IObserveInfo) element;
+		return observe.getParent();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ITreeContentProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void dispose() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ITreeContentProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void dispose() {
+	}
 
-  @Override
-  public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
-  }
+	@Override
+	public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/utils/CoreUtils.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/utils/CoreUtils.java
index b1c2f721a..f29e10a2d 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/utils/CoreUtils.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/utils/CoreUtils.java
@@ -55,397 +55,397 @@
  * @coverage bindings.utils
  */
 public final class CoreUtils {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Collections
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Helper method for cast any {@link List} to generic list.
-   */
-  @SuppressWarnings("unchecked")
-  public static <T> List<T> cast(List<?> list) {
-    return (List<T>) list;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Collections
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Helper method for cast any {@link List} to generic list.
+	 */
+	@SuppressWarnings("unchecked")
+	public static <T> List<T> cast(List<?> list) {
+		return (List<T>) list;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AST evaluation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Helper method for evaluate {@link Expression}.
-   */
-  @SuppressWarnings("unchecked")
-  public static <T> T evaluate(Class<T> objectType, AstEditor editor, Expression expression)
-      throws Exception {
-    Object object = evaluateObject(editor, expression);
-    if (object != null) {
-      Assert.instanceOf(objectType, object);
-    }
-    return (T) object;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AST evaluation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Helper method for evaluate {@link Expression}.
+	 */
+	@SuppressWarnings("unchecked")
+	public static <T> T evaluate(Class<T> objectType, AstEditor editor, Expression expression)
+			throws Exception {
+		Object object = evaluateObject(editor, expression);
+		if (object != null) {
+			Assert.instanceOf(objectType, object);
+		}
+		return (T) object;
+	}
 
-  public static <T> T evaluate(Class<T> objectType,
-      AstEditor editor,
-      Expression[] expressions,
-      int index) throws Exception {
-    return index == -1 ? null : evaluate(objectType, editor, expressions[index]);
-  }
+	public static <T> T evaluate(Class<T> objectType,
+			AstEditor editor,
+			Expression[] expressions,
+			int index) throws Exception {
+		return index == -1 ? null : evaluate(objectType, editor, expressions[index]);
+	}
 
-  /**
-   * Helper method for evaluate {@link Expression}.
-   */
-  public static Object evaluateObject(AstEditor editor, Expression expression) throws Exception {
-    EditorState state = EditorState.get(editor);
-    EvaluationContext context =
-        new EvaluationContext(state.getEditorLoader(), state.getFlowDescription());
-    return AstEvaluationEngine.evaluate(context, expression);
-  }
+	/**
+	 * Helper method for evaluate {@link Expression}.
+	 */
+	public static Object evaluateObject(AstEditor editor, Expression expression) throws Exception {
+		EditorState state = EditorState.get(editor);
+		EvaluationContext context =
+				new EvaluationContext(state.getEditorLoader(), state.getFlowDescription());
+		return AstEvaluationEngine.evaluate(context, expression);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AST
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return string reference for {@link ASTNode}.
-   */
-  public static String getNodeReference(ASTNode node) {
-    // simple and qualified names
-    if (node instanceof QualifiedName) {
-      QualifiedName name = (QualifiedName) node;
-      return AstNodeUtils.getFullyQualifiedName(name.getQualifier(), false)
-          + "."
-          + name.getName().getIdentifier();
-    }
-    if (node instanceof SimpleName) {
-      SimpleName name = (SimpleName) node;
-      return name.getIdentifier();
-    }
-    // method invocation
-    if (node instanceof MethodInvocation) {
-      // method reference
-      MethodInvocation invocation = (MethodInvocation) node;
-      String reference = invocation.getName().getIdentifier() + "()";
-      // invocation expression reference
-      Expression expression = invocation.getExpression();
-      if (expression != null) {
-        reference = getNodeReference(expression) + "." + reference;
-      }
-      //
-      return reference;
-    }
-    // field
-    if (node instanceof FieldAccess) {
-      // field name reference
-      FieldAccess fieldAccess = (FieldAccess) node;
-      String reference = fieldAccess.getName().getIdentifier();
-      // field expression reference
-      Expression expression = fieldAccess.getExpression();
-      // skip "this" reference that we use all bean fields without "this" prefix.
-      if (expression instanceof ThisExpression) {
-        return reference;
-      }
-      return getNodeReference(expression) + "." + reference;
-    }
-    // this
-    if (node instanceof ThisExpression) {
-      // this reference
-      ThisExpression thisExpression = (ThisExpression) node;
-      String reference = "this";
-      // this qualifier reference
-      Name qualifier = thisExpression.getQualifier();
-      if (qualifier != null) {
-        reference = qualifier.getFullyQualifiedName() + ".this";
-      }
-      //
-      return reference;
-    }
-    // CIC
-    if (node instanceof ClassInstanceCreation) {
-      ClassInstanceCreation creation = (ClassInstanceCreation) node;
-      return "new "
-          + AstNodeUtils.getFullyQualifiedName(creation, false)
-          + "("
-          + creation.arguments().size()
-          + ")";
-    }
-    // unknown
-    Assert.fail("Unknown reference: " + node);
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AST
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return string reference for {@link ASTNode}.
+	 */
+	public static String getNodeReference(ASTNode node) {
+		// simple and qualified names
+		if (node instanceof QualifiedName) {
+			QualifiedName name = (QualifiedName) node;
+			return AstNodeUtils.getFullyQualifiedName(name.getQualifier(), false)
+					+ "."
+					+ name.getName().getIdentifier();
+		}
+		if (node instanceof SimpleName) {
+			SimpleName name = (SimpleName) node;
+			return name.getIdentifier();
+		}
+		// method invocation
+		if (node instanceof MethodInvocation) {
+			// method reference
+			MethodInvocation invocation = (MethodInvocation) node;
+			String reference = invocation.getName().getIdentifier() + "()";
+			// invocation expression reference
+			Expression expression = invocation.getExpression();
+			if (expression != null) {
+				reference = getNodeReference(expression) + "." + reference;
+			}
+			//
+			return reference;
+		}
+		// field
+		if (node instanceof FieldAccess) {
+			// field name reference
+			FieldAccess fieldAccess = (FieldAccess) node;
+			String reference = fieldAccess.getName().getIdentifier();
+			// field expression reference
+			Expression expression = fieldAccess.getExpression();
+			// skip "this" reference that we use all bean fields without "this" prefix.
+			if (expression instanceof ThisExpression) {
+				return reference;
+			}
+			return getNodeReference(expression) + "." + reference;
+		}
+		// this
+		if (node instanceof ThisExpression) {
+			// this reference
+			ThisExpression thisExpression = (ThisExpression) node;
+			String reference = "this";
+			// this qualifier reference
+			Name qualifier = thisExpression.getQualifier();
+			if (qualifier != null) {
+				reference = qualifier.getFullyQualifiedName() + ".this";
+			}
+			//
+			return reference;
+		}
+		// CIC
+		if (node instanceof ClassInstanceCreation) {
+			ClassInstanceCreation creation = (ClassInstanceCreation) node;
+			return "new "
+			+ AstNodeUtils.getFullyQualifiedName(creation, false)
+			+ "("
+			+ creation.arguments().size()
+			+ ")";
+		}
+		// unknown
+		Assert.fail("Unknown reference: " + node);
+		return null;
+	}
 
-  /**
-   * Work like {@link #getNodeReference(ASTNode)} but without assert unknown reference.
-   */
-  public static String getSafeNodeReference(ASTNode node) {
-    if (node instanceof Name
-        || node instanceof MethodInvocation
-        || node instanceof FieldAccess
-        || node instanceof ThisExpression
-        || node instanceof ClassInstanceCreation) {
-      return getNodeReference(node);
-    }
-    return null;
-  }
+	/**
+	 * Work like {@link #getNodeReference(ASTNode)} but without assert unknown reference.
+	 */
+	public static String getSafeNodeReference(ASTNode node) {
+		if (node instanceof Name
+				|| node instanceof MethodInvocation
+				|| node instanceof FieldAccess
+				|| node instanceof ThisExpression
+				|| node instanceof ClassInstanceCreation) {
+			return getNodeReference(node);
+		}
+		return null;
+	}
 
-  private static final String TYPE_PROPERTY = "49100913-2275-4e82-8382-c1ef7d8d62b8";
+	private static final String TYPE_PROPERTY = "49100913-2275-4e82-8382-c1ef7d8d62b8";
 
-  /**
-   * XXX
-   *
-   * @param rootNode
-   * @param methodName
-   * @return
-   * @throws Exception
-   */
-  public static List<VariableDeclarationFragment> getLocalFragments(TypeDeclaration rootNode,
-      String methodName) throws Exception {
-    final List<VariableDeclarationFragment> fragments = Lists.newArrayList();
-    MethodDeclaration initDataBindings =
-        AstNodeUtils.getMethodBySignature(rootNode, methodName + "()");
-    if (initDataBindings != null) {
-      initDataBindings.accept(new ASTVisitor() {
-        @Override
-        public void endVisit(VariableDeclarationFragment fragment) {
-          IVariableBinding variableBinding = AstNodeUtils.getVariableBinding(fragment);
-          ITypeBinding binding = variableBinding == null ? null : variableBinding.getType();
-          if (isIncludeTypeBinding(binding)) {
-            fragment.setProperty(TYPE_PROPERTY, binding);
-            fragments.add(fragment);
-          }
-        }
-      });
-    }
-    return fragments;
-  }
+	/**
+	 * XXX
+	 *
+	 * @param rootNode
+	 * @param methodName
+	 * @return
+	 * @throws Exception
+	 */
+	public static List<VariableDeclarationFragment> getLocalFragments(TypeDeclaration rootNode,
+			String methodName) throws Exception {
+		final List<VariableDeclarationFragment> fragments = Lists.newArrayList();
+		MethodDeclaration initDataBindings =
+				AstNodeUtils.getMethodBySignature(rootNode, methodName + "()");
+		if (initDataBindings != null) {
+			initDataBindings.accept(new ASTVisitor() {
+				@Override
+				public void endVisit(VariableDeclarationFragment fragment) {
+					IVariableBinding variableBinding = AstNodeUtils.getVariableBinding(fragment);
+					ITypeBinding binding = variableBinding == null ? null : variableBinding.getType();
+					if (isIncludeTypeBinding(binding)) {
+						fragment.setProperty(TYPE_PROPERTY, binding);
+						fragments.add(fragment);
+					}
+				}
+			});
+		}
+		return fragments;
+	}
 
-  /**
-   * @return all {@link VariableDeclarationFragment} for compilation unit fields.
-   */
-  public static List<VariableDeclarationFragment> getFieldFragments(TypeDeclaration rootNode)
-      throws Exception {
-    List<VariableDeclarationFragment> fragments = Lists.newArrayList();
-    //
-    for (FieldDeclaration fieldDeclaration : rootNode.getFields()) {
-      Type type = fieldDeclaration.getType();
-      if (type == null || AstNodeUtils.getTypeBinding(type) == null) {
-        continue;
-      }
-      //
-      for (VariableDeclarationFragment fragment : DomGenerics.fragments(fieldDeclaration)) {
-        // ignore primitives and arrays
-        if (isIncludeType(type)) {
-          fragment.setProperty(TYPE_PROPERTY, type);
-          fragments.add(fragment);
-        }
-      }
-    }
-    // sort fragments by position
-    Collections.sort(fragments, new Comparator<VariableDeclarationFragment>() {
-      @Override
-      public int compare(VariableDeclarationFragment fragment1,
-          VariableDeclarationFragment fragment2) {
-        return fragment1.getStartPosition() - fragment2.getStartPosition();
-      }
-    });
-    return fragments;
-  }
+	/**
+	 * @return all {@link VariableDeclarationFragment} for compilation unit fields.
+	 */
+	public static List<VariableDeclarationFragment> getFieldFragments(TypeDeclaration rootNode)
+			throws Exception {
+		List<VariableDeclarationFragment> fragments = Lists.newArrayList();
+		//
+		for (FieldDeclaration fieldDeclaration : rootNode.getFields()) {
+			Type type = fieldDeclaration.getType();
+			if (type == null || AstNodeUtils.getTypeBinding(type) == null) {
+				continue;
+			}
+			//
+			for (VariableDeclarationFragment fragment : DomGenerics.fragments(fieldDeclaration)) {
+				// ignore primitives and arrays
+				if (isIncludeType(type)) {
+					fragment.setProperty(TYPE_PROPERTY, type);
+					fragments.add(fragment);
+				}
+			}
+		}
+		// sort fragments by position
+		Collections.sort(fragments, new Comparator<VariableDeclarationFragment>() {
+			@Override
+			public int compare(VariableDeclarationFragment fragment1,
+					VariableDeclarationFragment fragment2) {
+				return fragment1.getStartPosition() - fragment2.getStartPosition();
+			}
+		});
+		return fragments;
+	}
 
-  /**
-   * XXX
-   *
-   * @param <T>
-   * @param fragment
-   * @param clearProperty
-   * @return
-   */
-  @SuppressWarnings("unchecked")
-  public static <T> T getType(VariableDeclarationFragment fragment, boolean clearProperty) {
-    T type = (T) fragment.getProperty(TYPE_PROPERTY);
-    Assert.isNotNull(type);
-    if (clearProperty) {
-      fragment.setProperty(TYPE_PROPERTY, null);
-    }
-    return type;
-  }
+	/**
+	 * XXX
+	 *
+	 * @param <T>
+	 * @param fragment
+	 * @param clearProperty
+	 * @return
+	 */
+	@SuppressWarnings("unchecked")
+	public static <T> T getType(VariableDeclarationFragment fragment, boolean clearProperty) {
+		T type = (T) fragment.getProperty(TYPE_PROPERTY);
+		Assert.isNotNull(type);
+		if (clearProperty) {
+			fragment.setProperty(TYPE_PROPERTY, null);
+		}
+		return type;
+	}
 
-  /**
-   * XXX
-   *
-   * @param type
-   * @return
-   */
-  public static boolean isIncludeType(Type type) {
-    return !type.isPrimitiveType() && !type.isArrayType();
-  }
+	/**
+	 * XXX
+	 *
+	 * @param type
+	 * @return
+	 */
+	public static boolean isIncludeType(Type type) {
+		return !type.isPrimitiveType() && !type.isArrayType();
+	}
 
-  /**
-   * XXX
-   *
-   * @param binding
-   * @return
-   */
-  public static boolean isIncludeTypeBinding(ITypeBinding binding) {
-    return binding != null && !binding.isPrimitive() && !binding.isArray();
-  }
+	/**
+	 * XXX
+	 *
+	 * @param binding
+	 * @return
+	 */
+	public static boolean isIncludeTypeBinding(ITypeBinding binding) {
+		return binding != null && !binding.isPrimitive() && !binding.isArray();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Signature
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return full method signature: (class signature).(method signature)
-   */
-  public static String getMethodSignature(MethodInvocation invocation) {
-    IMethodBinding methodBinding = AstNodeUtils.getMethodBinding(invocation);
-    if (methodBinding == null) {
-      return null;
-    }
-    ITypeBinding invocationType = methodBinding.getDeclaringClass();
-    return AstNodeUtils.getFullyQualifiedName(invocationType, false)
-        + "."
-        + AstNodeUtils.getMethodSignature(invocation);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Signature
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return full method signature: (class signature).(method signature)
+	 */
+	public static String getMethodSignature(MethodInvocation invocation) {
+		IMethodBinding methodBinding = AstNodeUtils.getMethodBinding(invocation);
+		if (methodBinding == null) {
+			return null;
+		}
+		ITypeBinding invocationType = methodBinding.getDeclaringClass();
+		return AstNodeUtils.getFullyQualifiedName(invocationType, false)
+				+ "."
+				+ AstNodeUtils.getMethodSignature(invocation);
+	}
 
-  /**
-   * @return full creation signature: (class signature).(constructor signature)
-   */
-  public static String getCreationSignature(ClassInstanceCreation creation) {
-    return AstNodeUtils.getFullyQualifiedName(creation, false)
-        + "."
-        + AstNodeUtils.getCreationSignature(creation);
-  }
+	/**
+	 * @return full creation signature: (class signature).(constructor signature)
+	 */
+	public static String getCreationSignature(ClassInstanceCreation creation) {
+		return AstNodeUtils.getFullyQualifiedName(creation, false)
+				+ "."
+				+ AstNodeUtils.getCreationSignature(creation);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Generics
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the array of {@link Expression}'s for given list of them.
-   */
-  public static Expression[] getExpressionArray(List<Expression> expressionList) {
-    return expressionList.toArray(new Expression[expressionList.size()]);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Generics
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the array of {@link Expression}'s for given list of them.
+	 */
+	public static Expression[] getExpressionArray(List<Expression> expressionList) {
+		return expressionList.toArray(new Expression[expressionList.size()]);
+	}
 
-  public static boolean useGenerics(IJavaProject javaProject) {
-    try {
-      String versionValue = javaProject.getOption(JavaCore.COMPILER_SOURCE, true);
-      Version version = new Version(versionValue);
-      return version.getMinor() >= 5;
-    } catch (Throwable e) {
-    }
-    return false;
-  }
+	public static boolean useGenerics(IJavaProject javaProject) {
+		try {
+			String versionValue = javaProject.getOption(JavaCore.COMPILER_SOURCE, true);
+			Version version = new Version(versionValue);
+			return version.getMinor() >= 5;
+		} catch (Throwable e) {
+		}
+		return false;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // String
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * If <code>string</code> is <code>null</code> returned <code>defaultString</code> otherwise
-   * returned <code>prefix + string + prefix</code>.
-   */
-  public static String getDefaultString(String string, String prefix, String defaultString) {
-    if (string == null) {
-      return defaultString;
-    }
-    return prefix + string + prefix;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// String
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * If <code>string</code> is <code>null</code> returned <code>defaultString</code> otherwise
+	 * returned <code>prefix + string + prefix</code>.
+	 */
+	public static String getDefaultString(String string, String prefix, String defaultString) {
+		if (string == null) {
+			return defaultString;
+		}
+		return prefix + string + prefix;
+	}
 
-  /**
-   * Joins the elements of the provided array into a single String containing the provided list of
-   * elements.
-   */
-  public static String joinStrings(String delimeter, String... strings) {
-    StringBuffer buffer = new StringBuffer();
-    for (String string : strings) {
-      if (string != null) {
-        if (buffer.length() > 0) {
-          buffer.append(delimeter);
-        }
-        buffer.append(string);
-      }
-    }
-    return buffer.toString();
-  }
+	/**
+	 * Joins the elements of the provided array into a single String containing the provided list of
+	 * elements.
+	 */
+	public static String joinStrings(String delimeter, String... strings) {
+		StringBuffer buffer = new StringBuffer();
+		for (String string : strings) {
+			if (string != null) {
+				if (buffer.length() > 0) {
+					buffer.append(delimeter);
+				}
+				buffer.append(string);
+			}
+		}
+		return buffer.toString();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Class
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static ClassLoader classLoader(JavaInfo javaInfo) {
-    return EditorState.get(javaInfo.getEditor()).getEditorLoader();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Class
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static ClassLoader classLoader(JavaInfo javaInfo) {
+		return EditorState.get(javaInfo.getEditor()).getEditorLoader();
+	}
 
-  /**
-   * Load class with given <code>className</code> over given <code>classLoader</code> and suppress
-   * {@link ClassNotFoundException}.
-   */
-  public static Class<?> loadClass(ClassLoader classLoader, String className) {
-    try {
-      return load(classLoader, className);
-    } catch (ClassNotFoundException e) {
-      return null;
-    }
-  }
+	/**
+	 * Load class with given <code>className</code> over given <code>classLoader</code> and suppress
+	 * {@link ClassNotFoundException}.
+	 */
+	public static Class<?> loadClass(ClassLoader classLoader, String className) {
+		try {
+			return load(classLoader, className);
+		} catch (ClassNotFoundException e) {
+			return null;
+		}
+	}
 
-  /**
-   * Load class with given <code>className</code> over given <code>classLoader</code>. Support load
-   * inner classes over Java class name (auto replace last "." to "$").
-   */
-  public static Class<?> load(ClassLoader classLoader, String className)
-      throws ClassNotFoundException {
-    try {
-      return classLoader.loadClass(className);
-    } catch (ClassNotFoundException e) {
-      int index = className.lastIndexOf('.');
-      if (index > 0) {
-        try {
-          return classLoader.loadClass(className.substring(0, index)
-              + "$"
-              + className.substring(index + 1));
-        } catch (Throwable t) {
-        }
-      }
-      throw e;
-    }
-  }
+	/**
+	 * Load class with given <code>className</code> over given <code>classLoader</code>. Support load
+	 * inner classes over Java class name (auto replace last "." to "$").
+	 */
+	public static Class<?> load(ClassLoader classLoader, String className)
+			throws ClassNotFoundException {
+		try {
+			return classLoader.loadClass(className);
+		} catch (ClassNotFoundException e) {
+			int index = className.lastIndexOf('.');
+			if (index > 0) {
+				try {
+					return classLoader.loadClass(className.substring(0, index)
+							+ "$"
+							+ className.substring(index + 1));
+				} catch (Throwable t) {
+				}
+			}
+			throw e;
+		}
+	}
 
-  /**
-   * @return invoke {@link Class#isAssignableFrom(Class)} if given <code>base</code> is't
-   *         <code>null</code> otherwise <code>false</code>.
-   */
-  public static boolean isAssignableFrom(Class<?> baseClass, Class<?> testClass) {
-    return baseClass != null && baseClass.isAssignableFrom(testClass);
-  }
+	/**
+	 * @return invoke {@link Class#isAssignableFrom(Class)} if given <code>base</code> is't
+	 *         <code>null</code> otherwise <code>false</code>.
+	 */
+	public static boolean isAssignableFrom(Class<?> baseClass, Class<?> testClass) {
+		return baseClass != null && baseClass.isAssignableFrom(testClass);
+	}
 
-  /**
-   * Load given <code>baseClass</code> and invoke {@link Class#isAssignableFrom(Class)} for given
-   * <code>testClass</code>.
-   */
-  public static boolean isAssignableFrom(ClassLoader classLoader,
-      String baseClass,
-      Class<?> testClass) {
-    return isAssignableFrom(loadClass(classLoader, baseClass), testClass);
-  }
+	/**
+	 * Load given <code>baseClass</code> and invoke {@link Class#isAssignableFrom(Class)} for given
+	 * <code>testClass</code>.
+	 */
+	public static boolean isAssignableFrom(ClassLoader classLoader,
+			String baseClass,
+			Class<?> testClass) {
+		return isAssignableFrom(loadClass(classLoader, baseClass), testClass);
+	}
 
-  /**
-   * @return {@link Class} {@code testClass} if it not {@code null} otherwise {@code defaultClass}.
-   */
-  public static Class<?> getClass(Class<?> testClass, Class<?> defaultClass) {
-    return testClass == null ? defaultClass : testClass;
-  }
+	/**
+	 * @return {@link Class} {@code testClass} if it not {@code null} otherwise {@code defaultClass}.
+	 */
+	public static Class<?> getClass(Class<?> testClass, Class<?> defaultClass) {
+		return testClass == null ? defaultClass : testClass;
+	}
 
-  /**
-   * @return the name of given {@link Class}. For inner classes do replace "$" to "."
-   */
-  public static String getClassName(Class<?> clazz) {
-    return clazz.getName().replace('$', '.');
-  }
+	/**
+	 * @return the name of given {@link Class}. For inner classes do replace "$" to "."
+	 */
+	public static String getClassName(Class<?> clazz) {
+		return clazz.getName().replace('$', '.');
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/wizards/autobindings/AbstractDescriptor.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/wizards/autobindings/AbstractDescriptor.java
index 74c6a0153..4ccfc9f11 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/wizards/autobindings/AbstractDescriptor.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/wizards/autobindings/AbstractDescriptor.java
@@ -23,94 +23,94 @@
  * @coverage bindings.wizard.auto
  */
 public abstract class AbstractDescriptor {
-  private final List<String> m_names = Lists.newArrayList();
-  private final List<Image> m_images = Lists.newArrayList();
-  private String m_name;
-  private Image m_image;
-  private boolean m_default;
+	private final List<String> m_names = Lists.newArrayList();
+	private final List<Image> m_images = Lists.newArrayList();
+	private String m_name;
+	private Image m_image;
+	private boolean m_default;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the name with given index to display for user.
-   */
-  public String getName(int index) {
-    return m_names.get(index);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the name with given index to display for user.
+	 */
+	public String getName(int index) {
+		return m_names.get(index);
+	}
 
-  /**
-   * Add the name to display for user.
-   */
-  public void addName(String name) {
-    m_names.add(name);
-  }
+	/**
+	 * Add the name to display for user.
+	 */
+	public void addName(String name) {
+		m_names.add(name);
+	}
 
-  /**
-   * @return the name to display for user.
-   */
-  public String getName() {
-    return m_name;
-  }
+	/**
+	 * @return the name to display for user.
+	 */
+	public String getName() {
+		return m_name;
+	}
 
-  /**
-   * Sets the name to display for user.
-   */
-  public void setName(String name) {
-    m_name = name;
-  }
+	/**
+	 * Sets the name to display for user.
+	 */
+	public void setName(String name) {
+		m_name = name;
+	}
 
-  /**
-   * @return the image with given index to display for user.
-   */
-  public Image getImage(int index) {
-    return m_images.get(index);
-  }
+	/**
+	 * @return the image with given index to display for user.
+	 */
+	public Image getImage(int index) {
+		return m_images.get(index);
+	}
 
-  /**
-   * Add the image to display for user.
-   */
-  public void addImage(Image image) {
-    m_images.add(image);
-  }
+	/**
+	 * Add the image to display for user.
+	 */
+	public void addImage(Image image) {
+		m_images.add(image);
+	}
 
-  /**
-   * @return the image to display for user.
-   */
-  public Image getImage() {
-    return m_image;
-  }
+	/**
+	 * @return the image to display for user.
+	 */
+	public Image getImage() {
+		return m_image;
+	}
 
-  /**
-   * Sets the image to display for user.
-   */
-  public void setImage(Image image) {
-    m_image = image;
-  }
+	/**
+	 * Sets the image to display for user.
+	 */
+	public void setImage(Image image) {
+		m_image = image;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Default
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if this descriptor is default.
-   */
-  public boolean isDefault() {
-    return m_default;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Default
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if this descriptor is default.
+	 */
+	public boolean isDefault() {
+		return m_default;
+	}
 
-  /**
-   * Sets default state.
-   */
-  public void setDefault() {
-    m_default = true;
-  }
+	/**
+	 * Sets default state.
+	 */
+	public void setDefault() {
+		m_default = true;
+	}
 
-  /**
-   * @return <code>true</code> if this descriptor is default for given object.
-   */
-  public abstract boolean isDefault(Object property);
+	/**
+	 * @return <code>true</code> if this descriptor is default for given object.
+	 */
+	public abstract boolean isDefault(Object property);
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/wizards/autobindings/AutomaticDatabindingFirstPage.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/wizards/autobindings/AutomaticDatabindingFirstPage.java
index f17bc272d..898400b81 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/wizards/autobindings/AutomaticDatabindingFirstPage.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/wizards/autobindings/AutomaticDatabindingFirstPage.java
@@ -38,96 +38,96 @@
  * @coverage bindings.wizard.auto
  */
 public abstract class AutomaticDatabindingFirstPage extends TemplateDesignWizardPage {
-  private final IAutomaticDatabindingProvider m_databindingProvider;
-  private final String m_initialBeanClassName;
+	private final IAutomaticDatabindingProvider m_databindingProvider;
+	private final String m_initialBeanClassName;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AutomaticDatabindingFirstPage(IAutomaticDatabindingProvider databindingProvider,
-      String initialBeanClassName) {
-    m_databindingProvider = databindingProvider;
-    m_initialBeanClassName =
-        initialBeanClassName == null ? null : ClassUtils.getShortClassName(initialBeanClassName);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AutomaticDatabindingFirstPage(IAutomaticDatabindingProvider databindingProvider,
+			String initialBeanClassName) {
+		m_databindingProvider = databindingProvider;
+		m_initialBeanClassName =
+				initialBeanClassName == null ? null : ClassUtils.getShortClassName(initialBeanClassName);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Initialize
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void initTypePage(IJavaElement elem) {
-    super.initTypePage(elem);
-    setSuperClass(m_databindingProvider.getInitialSuperClass(), false);
-    // handle initial wizard selection
-    if (m_initialBeanClassName != null) {
-      setTypeName(getInitialTypeNameWithSuperClass(), true);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Initialize
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void initTypePage(IJavaElement elem) {
+		super.initTypePage(elem);
+		setSuperClass(m_databindingProvider.getInitialSuperClass(), false);
+		// handle initial wizard selection
+		if (m_initialBeanClassName != null) {
+			setTypeName(getInitialTypeNameWithSuperClass(), true);
+		}
+	}
 
-  private String getInitialTypeNameWithSuperClass() {
-    return m_initialBeanClassName + ClassUtils.getShortClassName(getSuperClass());
-  }
+	private String getInitialTypeNameWithSuperClass() {
+		return m_initialBeanClassName + ClassUtils.getShortClassName(getSuperClass());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createLocalControls(Composite parent, int columns) {
-    // prepare super classes
-    final String[] superClasses = m_databindingProvider.getSuperClasses();
-    int current = ArrayUtils.indexOf(superClasses, m_databindingProvider.getInitialSuperClass());
-    // create dialog field
-    final SelectionButtonDialogFieldGroup fieldsGroup =
-        new SelectionButtonDialogFieldGroup(SWT.RADIO, superClasses, 1);
-    fieldsGroup.setLabelText(Messages.AutomaticDatabindingFirstPage_superClassLabel);
-    fieldsGroup.setSelection(current, true);
-    fieldsGroup.doFillIntoGrid(parent, columns);
-    // handle change super class
-    fieldsGroup.setDialogFieldListener(new IDialogFieldListener() {
-      @Override
-      public void dialogFieldChanged(DialogField field) {
-        int[] selection = fieldsGroup.getSelection();
-        if (selection.length == 1) {
-          String superClass = superClasses[selection[0]];
-          // handle initial wizard selection
-          if (m_initialBeanClassName != null) {
-            if (getTypeName().equals(getInitialTypeNameWithSuperClass())) {
-              setTypeName(m_initialBeanClassName + ClassUtils.getShortClassName(superClass), true);
-            }
-          }
-          //
-          setSuperClass(superClass, false);
-        }
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createLocalControls(Composite parent, int columns) {
+		// prepare super classes
+		final String[] superClasses = m_databindingProvider.getSuperClasses();
+		int current = ArrayUtils.indexOf(superClasses, m_databindingProvider.getInitialSuperClass());
+		// create dialog field
+		final SelectionButtonDialogFieldGroup fieldsGroup =
+				new SelectionButtonDialogFieldGroup(SWT.RADIO, superClasses, 1);
+		fieldsGroup.setLabelText(Messages.AutomaticDatabindingFirstPage_superClassLabel);
+		fieldsGroup.setSelection(current, true);
+		fieldsGroup.doFillIntoGrid(parent, columns);
+		// handle change super class
+		fieldsGroup.setDialogFieldListener(new IDialogFieldListener() {
+			@Override
+			public void dialogFieldChanged(DialogField field) {
+				int[] selection = fieldsGroup.getSelection();
+				if (selection.length == 1) {
+					String superClass = superClasses[selection[0]];
+					// handle initial wizard selection
+					if (m_initialBeanClassName != null) {
+						if (getTypeName().equals(getInitialTypeNameWithSuperClass())) {
+							setTypeName(m_initialBeanClassName + ClassUtils.getShortClassName(superClass), true);
+						}
+					}
+					//
+					setSuperClass(superClass, false);
+				}
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Finish
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createTypeMembers(IType newType, ImportsManager imports, IProgressMonitor monitor)
-      throws CoreException {
-    // prepare template content
-    InputStream stream = m_databindingProvider.getTemplateFile(newType.getSuperclassName());
-    try {
-      // generate auto binding code
-      String code = IOUtils.toString(stream);
-      code = m_databindingProvider.performSubstitutions(code, imports);
-      // create type
-      fillTypeFromTemplate(newType, imports, monitor, new ByteArrayInputStream(code.getBytes()));
-    } catch (Throwable e) {
-      throw new CoreException(DesignerPlugin.createStatus("Error load template file", e));
-    } finally {
-      IOUtils.closeQuietly(stream);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Finish
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createTypeMembers(IType newType, ImportsManager imports, IProgressMonitor monitor)
+			throws CoreException {
+		// prepare template content
+		InputStream stream = m_databindingProvider.getTemplateFile(newType.getSuperclassName());
+		try {
+			// generate auto binding code
+			String code = IOUtils.toString(stream);
+			code = m_databindingProvider.performSubstitutions(code, imports);
+			// create type
+			fillTypeFromTemplate(newType, imports, monitor, new ByteArrayInputStream(code.getBytes()));
+		} catch (Throwable e) {
+			throw new CoreException(DesignerPlugin.createStatus("Error load template file", e));
+		} finally {
+			IOUtils.closeQuietly(stream);
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/wizards/autobindings/AutomaticDatabindingSecondPage.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/wizards/autobindings/AutomaticDatabindingSecondPage.java
index 06bf6a82a..d1bf4dc29 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/wizards/autobindings/AutomaticDatabindingSecondPage.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/wizards/autobindings/AutomaticDatabindingSecondPage.java
@@ -44,189 +44,189 @@
  * @coverage bindings.wizard.auto
  */
 public final class AutomaticDatabindingSecondPage extends WizardPage implements ICompleteListener {
-  private final AutomaticDatabindingFirstPage m_firstPage;
-  private final IAutomaticDatabindingProvider m_databindingProvider;
-  private final String m_initialBeanClassName;
-  private ChooseClassAndPropertiesUiContentProvider m_chooseClassAndPropertiesProvider;
-  private ToolItem m_propertiesFilterButton;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AutomaticDatabindingSecondPage(AutomaticDatabindingFirstPage firstPage,
-      IAutomaticDatabindingProvider databindingProvider,
-      String initialBeanClassName) {
-    super("");
-    m_firstPage = firstPage;
-    m_databindingProvider = databindingProvider;
-    m_initialBeanClassName = initialBeanClassName;
-    setPageComplete(false);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void createControl(Composite parent) {
-    // prepare page
-    int columns = 4;
-    Composite pageComposite = new Composite(parent, SWT.NONE);
-    GridLayoutFactory.create(pageComposite).columns(columns);
-    setControl(pageComposite);
-    // choose class and properties
-    m_chooseClassAndPropertiesProvider =
-        new ChooseClassAndPropertiesUiContentProvider(createConfiguration()) {
-          @Override
-          protected void super_createContent(Composite parent, int columns) {
-            super.super_createContent(parent, columns - 1);
-            // filter ToolBar
-            ToolBar toolBar = new ToolBar(parent, SWT.NONE);
-            // properties filter
-            m_propertiesFilterButton = new ToolItem(toolBar, SWT.CHECK);
-            m_propertiesFilterButton.setImage(Activator.getImage("filter_action.gif"));
-            m_propertiesFilterButton.setToolTipText(Messages.AutomaticDatabindingSecondPage_filterToolTip);
-            m_propertiesFilterButton.setSelection(m_databindingProvider.getPropertiesViewerFilterInitState());
-            m_propertiesFilterButton.setEnabled(false);
-            m_propertiesFilterButton.addSelectionListener(new SelectionAdapter() {
-              @Override
-              public void widgetSelected(SelectionEvent e) {
-                handlePropertiesFilter(m_propertiesFilterButton.getSelection());
-              }
-            });
-          }
-
-          @Override
-          protected List<PropertyAdapter> getProperties(Class<?> choosenClass) throws Exception {
-            return m_databindingProvider.getProperties(choosenClass);
-          }
-
-          @Override
-          public void updateFromObject() throws Exception {
-            // handle initial wizard selection
-            if (m_initialBeanClassName != null && m_firstPage.getJavaProject() != null) {
-              m_databindingProvider.setCurrentWizardData(
-                  m_firstPage,
-                  AutomaticDatabindingSecondPage.this);
-              setClassNameAndProperty(m_initialBeanClassName, null, true);
-            }
-          }
-
-          @Override
-          protected void saveToObject(Class<?> choosenClass, List<PropertyAdapter> choosenProperties)
-              throws Exception {
-          }
-
-          @Override
-          protected Class<?> loadClass(String className) throws ClassNotFoundException {
-            return m_databindingProvider.loadClass(className);
-          }
-
-          @Override
-          protected IJavaProject getJavaProject() {
-            return m_firstPage.getJavaProject();
-          }
-        };
-    m_chooseClassAndPropertiesProvider.createContent(pageComposite, columns);
-    m_chooseClassAndPropertiesProvider.setCompleteListener(this);
-    getPropertiesViewer().getCheckable().addCheckStateListener(new ICheckStateListener() {
-      @Override
-      public void checkStateChanged(CheckStateChangedEvent event) {
-        m_databindingProvider.handlePropertyChecked(
-            (PropertyAdapter) event.getElement(),
-            event.getChecked());
-        calculateFinish();
-      }
-    });
-    m_chooseClassAndPropertiesProvider.setSupportListener(new ChooseClassAndPropertiesSupportListener() {
-      @Override
-      public void loadProperties(boolean successful) {
-        m_propertiesFilterButton.setEnabled(successful);
-        if (successful) {
-          for (Object element : getPropertiesViewer().getCheckedElements()) {
-            m_databindingProvider.handlePropertyChecked((PropertyAdapter) element, true);
-          }
-        }
-      }
-    });
-    m_databindingProvider.configurePropertiesViewer((CheckboxTableViewer) getPropertiesViewer().getViewer());
-    // widgets
-    Composite widgetComposite = new Composite(pageComposite, SWT.NONE);
-    GridDataFactory.create(widgetComposite).fill().grab().spanH(columns);
-    m_databindingProvider.fillWidgetComposite(widgetComposite);
-    // sets initial values
-    ExecutionUtils.runLog(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        m_chooseClassAndPropertiesProvider.updateFromObject();
-      }
-    });
-    // enable properties filter
-    handlePropertiesFilter(m_databindingProvider.getPropertiesViewerFilterInitState());
-  }
-
-  private ChooseClassAndPropertiesConfiguration createConfiguration() {
-    ChooseClassAndPropertiesConfiguration configuration =
-        new ChooseClassAndPropertiesConfiguration();
-    configuration.setDialogFieldLabel(Messages.AutomaticDatabindingSecondPage_beanClassLabel);
-    configuration.setChooseInterfaces(true);
-    configuration.setEmptyClassErrorMessage(Messages.AutomaticDatabindingSecondPage_beanClassMessage);
-    configuration.setErrorMessagePrefix(Messages.AutomaticDatabindingSecondPage_beanClassErrorPrefix);
-    configuration.setPropertiesLabel(Messages.AutomaticDatabindingSecondPage_propertiesLabel);
-    configuration.setPropertiesMultiChecked(true);
-    configuration.setReorderMode(true);
-    configuration.setLoadedPropertiesCheckedStrategy(ChooseClassAndPropertiesConfiguration.LoadedPropertiesCheckedStrategy.All);
-    configuration.setPropertiesErrorMessage(Messages.AutomaticDatabindingSecondPage_propertiesErrorMessage);
-    m_databindingProvider.configure(configuration);
-    return configuration;
-  }
-
-  private ICheckboxViewerWrapper getPropertiesViewer() {
-    return m_chooseClassAndPropertiesProvider.getPropertiesViewer();
-  }
-
-  @Override
-  public final void setVisible(boolean visible) {
-    if (visible) {
-      m_databindingProvider.setCurrentWizardData(m_firstPage, this);
-      calculateFinish();
-    }
-    super.setVisible(visible);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Handling
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void handlePropertiesFilter(boolean enabled) {
-    if (enabled) {
-      // enable filter
-      getPropertiesViewer().getViewer().addFilter(m_databindingProvider.getPropertiesViewerFilter());
-    } else {
-      // disable filter
-      getPropertiesViewer().getViewer().resetFilters();
-    }
-    calculateFinish();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ICompleteListener
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void calculateFinish() {
-    // calculate state
-    String errorMessage = m_chooseClassAndPropertiesProvider.getErrorMessage();
-    if (errorMessage == null) {
-      errorMessage = m_databindingProvider.calculateFinish();
-    }
-    // set state
-    setErrorMessage(errorMessage);
-    setPageComplete(errorMessage == null);
-  }
+	private final AutomaticDatabindingFirstPage m_firstPage;
+	private final IAutomaticDatabindingProvider m_databindingProvider;
+	private final String m_initialBeanClassName;
+	private ChooseClassAndPropertiesUiContentProvider m_chooseClassAndPropertiesProvider;
+	private ToolItem m_propertiesFilterButton;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AutomaticDatabindingSecondPage(AutomaticDatabindingFirstPage firstPage,
+			IAutomaticDatabindingProvider databindingProvider,
+			String initialBeanClassName) {
+		super("");
+		m_firstPage = firstPage;
+		m_databindingProvider = databindingProvider;
+		m_initialBeanClassName = initialBeanClassName;
+		setPageComplete(false);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void createControl(Composite parent) {
+		// prepare page
+		int columns = 4;
+		Composite pageComposite = new Composite(parent, SWT.NONE);
+		GridLayoutFactory.create(pageComposite).columns(columns);
+		setControl(pageComposite);
+		// choose class and properties
+		m_chooseClassAndPropertiesProvider =
+				new ChooseClassAndPropertiesUiContentProvider(createConfiguration()) {
+			@Override
+			protected void super_createContent(Composite parent, int columns) {
+				super.super_createContent(parent, columns - 1);
+				// filter ToolBar
+				ToolBar toolBar = new ToolBar(parent, SWT.NONE);
+				// properties filter
+				m_propertiesFilterButton = new ToolItem(toolBar, SWT.CHECK);
+				m_propertiesFilterButton.setImage(Activator.getImage("filter_action.gif"));
+				m_propertiesFilterButton.setToolTipText(Messages.AutomaticDatabindingSecondPage_filterToolTip);
+				m_propertiesFilterButton.setSelection(m_databindingProvider.getPropertiesViewerFilterInitState());
+				m_propertiesFilterButton.setEnabled(false);
+				m_propertiesFilterButton.addSelectionListener(new SelectionAdapter() {
+					@Override
+					public void widgetSelected(SelectionEvent e) {
+						handlePropertiesFilter(m_propertiesFilterButton.getSelection());
+					}
+				});
+			}
+
+			@Override
+			protected List<PropertyAdapter> getProperties(Class<?> choosenClass) throws Exception {
+				return m_databindingProvider.getProperties(choosenClass);
+			}
+
+			@Override
+			public void updateFromObject() throws Exception {
+				// handle initial wizard selection
+				if (m_initialBeanClassName != null && m_firstPage.getJavaProject() != null) {
+					m_databindingProvider.setCurrentWizardData(
+							m_firstPage,
+							AutomaticDatabindingSecondPage.this);
+					setClassNameAndProperty(m_initialBeanClassName, null, true);
+				}
+			}
+
+			@Override
+			protected void saveToObject(Class<?> choosenClass, List<PropertyAdapter> choosenProperties)
+					throws Exception {
+			}
+
+			@Override
+			protected Class<?> loadClass(String className) throws ClassNotFoundException {
+				return m_databindingProvider.loadClass(className);
+			}
+
+			@Override
+			protected IJavaProject getJavaProject() {
+				return m_firstPage.getJavaProject();
+			}
+		};
+		m_chooseClassAndPropertiesProvider.createContent(pageComposite, columns);
+		m_chooseClassAndPropertiesProvider.setCompleteListener(this);
+		getPropertiesViewer().getCheckable().addCheckStateListener(new ICheckStateListener() {
+			@Override
+			public void checkStateChanged(CheckStateChangedEvent event) {
+				m_databindingProvider.handlePropertyChecked(
+						(PropertyAdapter) event.getElement(),
+						event.getChecked());
+				calculateFinish();
+			}
+		});
+		m_chooseClassAndPropertiesProvider.setSupportListener(new ChooseClassAndPropertiesSupportListener() {
+			@Override
+			public void loadProperties(boolean successful) {
+				m_propertiesFilterButton.setEnabled(successful);
+				if (successful) {
+					for (Object element : getPropertiesViewer().getCheckedElements()) {
+						m_databindingProvider.handlePropertyChecked((PropertyAdapter) element, true);
+					}
+				}
+			}
+		});
+		m_databindingProvider.configurePropertiesViewer((CheckboxTableViewer) getPropertiesViewer().getViewer());
+		// widgets
+		Composite widgetComposite = new Composite(pageComposite, SWT.NONE);
+		GridDataFactory.create(widgetComposite).fill().grab().spanH(columns);
+		m_databindingProvider.fillWidgetComposite(widgetComposite);
+		// sets initial values
+		ExecutionUtils.runLog(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				m_chooseClassAndPropertiesProvider.updateFromObject();
+			}
+		});
+		// enable properties filter
+		handlePropertiesFilter(m_databindingProvider.getPropertiesViewerFilterInitState());
+	}
+
+	private ChooseClassAndPropertiesConfiguration createConfiguration() {
+		ChooseClassAndPropertiesConfiguration configuration =
+				new ChooseClassAndPropertiesConfiguration();
+		configuration.setDialogFieldLabel(Messages.AutomaticDatabindingSecondPage_beanClassLabel);
+		configuration.setChooseInterfaces(true);
+		configuration.setEmptyClassErrorMessage(Messages.AutomaticDatabindingSecondPage_beanClassMessage);
+		configuration.setErrorMessagePrefix(Messages.AutomaticDatabindingSecondPage_beanClassErrorPrefix);
+		configuration.setPropertiesLabel(Messages.AutomaticDatabindingSecondPage_propertiesLabel);
+		configuration.setPropertiesMultiChecked(true);
+		configuration.setReorderMode(true);
+		configuration.setLoadedPropertiesCheckedStrategy(ChooseClassAndPropertiesConfiguration.LoadedPropertiesCheckedStrategy.All);
+		configuration.setPropertiesErrorMessage(Messages.AutomaticDatabindingSecondPage_propertiesErrorMessage);
+		m_databindingProvider.configure(configuration);
+		return configuration;
+	}
+
+	private ICheckboxViewerWrapper getPropertiesViewer() {
+		return m_chooseClassAndPropertiesProvider.getPropertiesViewer();
+	}
+
+	@Override
+	public final void setVisible(boolean visible) {
+		if (visible) {
+			m_databindingProvider.setCurrentWizardData(m_firstPage, this);
+			calculateFinish();
+		}
+		super.setVisible(visible);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Handling
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void handlePropertiesFilter(boolean enabled) {
+		if (enabled) {
+			// enable filter
+			getPropertiesViewer().getViewer().addFilter(m_databindingProvider.getPropertiesViewerFilter());
+		} else {
+			// disable filter
+			getPropertiesViewer().getViewer().resetFilters();
+		}
+		calculateFinish();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ICompleteListener
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void calculateFinish() {
+		// calculate state
+		String errorMessage = m_chooseClassAndPropertiesProvider.getErrorMessage();
+		if (errorMessage == null) {
+			errorMessage = m_databindingProvider.calculateFinish();
+		}
+		// set state
+		setErrorMessage(errorMessage);
+		setPageComplete(errorMessage == null);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/wizards/autobindings/AutomaticDatabindingWizard.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/wizards/autobindings/AutomaticDatabindingWizard.java
index 76008ef98..63e230da4 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/wizards/autobindings/AutomaticDatabindingWizard.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/wizards/autobindings/AutomaticDatabindingWizard.java
@@ -30,59 +30,59 @@
  * @coverage bindings.wizard.auto
  */
 public abstract class AutomaticDatabindingWizard extends AbstractDesignWizard {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Pages
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public abstract void addPages();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Pages
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public abstract void addPages();
 
-  @Override
-  protected final AbstractDesignWizardPage createMainPage() {
-    return null;
-  }
+	@Override
+	protected final AbstractDesignWizardPage createMainPage() {
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the fully qualified name of class if given {@link IStructuredSelection} contains .java
-   *         file.
-   */
-  protected static String getSelectionBeanClass(IStructuredSelection selection) {
-    try {
-      // check no selection
-      if (UiUtils.isEmpty(selection)) {
-        return null;
-      }
-      // prepare selection object
-      Object object = selection.getFirstElement();
-      // check java selection
-      if (object instanceof IJavaElement) {
-        IJavaElement element = (IJavaElement) object;
-        // find compilation unit
-        while (element != null) {
-          if (element instanceof ICompilationUnit) {
-            ICompilationUnit compilationUnit = (ICompilationUnit) element;
-            IType[] types = compilationUnit.getTypes();
-            // find main type
-            if (!ArrayUtils.isEmpty(types)) {
-              return StringUtils.defaultIfEmpty(types[0].getFullyQualifiedName(), null);
-            }
-            // wrong selection
-            return null;
-          }
-          // lookup to parent
-          element = element.getParent();
-        }
-      }
-    } catch (Throwable e) {
-      DesignerPlugin.log(e);
-    }
-    // wrong selection
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the fully qualified name of class if given {@link IStructuredSelection} contains .java
+	 *         file.
+	 */
+	protected static String getSelectionBeanClass(IStructuredSelection selection) {
+		try {
+			// check no selection
+			if (UiUtils.isEmpty(selection)) {
+				return null;
+			}
+			// prepare selection object
+			Object object = selection.getFirstElement();
+			// check java selection
+			if (object instanceof IJavaElement) {
+				IJavaElement element = (IJavaElement) object;
+				// find compilation unit
+				while (element != null) {
+					if (element instanceof ICompilationUnit) {
+						ICompilationUnit compilationUnit = (ICompilationUnit) element;
+						IType[] types = compilationUnit.getTypes();
+						// find main type
+						if (!ArrayUtils.isEmpty(types)) {
+							return StringUtils.defaultIfEmpty(types[0].getFullyQualifiedName(), null);
+						}
+						// wrong selection
+						return null;
+					}
+					// lookup to parent
+					element = element.getParent();
+				}
+			}
+		} catch (Throwable e) {
+			DesignerPlugin.log(e);
+		}
+		// wrong selection
+		return null;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/wizards/autobindings/DefaultAutomaticDatabindingProvider.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/wizards/autobindings/DefaultAutomaticDatabindingProvider.java
index 968ad9d53..9fbddde6e 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/wizards/autobindings/DefaultAutomaticDatabindingProvider.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/wizards/autobindings/DefaultAutomaticDatabindingProvider.java
@@ -53,308 +53,308 @@
  * @coverage bindings.wizard.auto
  */
 public abstract class DefaultAutomaticDatabindingProvider implements IAutomaticDatabindingProvider {
-  private final DescriptorContainer m_widgetContainer;
-  private final DescriptorContainer m_strategyContainer;
-  protected final Map<PropertyAdapter, AbstractDescriptor[]> m_propertyToEditor = Maps.newHashMap();
-  protected final Map<IJavaProject, ClassLoader> m_classLoaders = Maps.newHashMap();
-  protected ClassLoader m_classLoader;
-  protected Class<?> m_beanClass;
-  protected IJavaProject m_javaProject;
-  protected ICompleteListener m_pageListener;
+	private final DescriptorContainer m_widgetContainer;
+	private final DescriptorContainer m_strategyContainer;
+	protected final Map<PropertyAdapter, AbstractDescriptor[]> m_propertyToEditor = Maps.newHashMap();
+	protected final Map<IJavaProject, ClassLoader> m_classLoaders = Maps.newHashMap();
+	protected ClassLoader m_classLoader;
+	protected Class<?> m_beanClass;
+	protected IJavaProject m_javaProject;
+	protected ICompleteListener m_pageListener;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DefaultAutomaticDatabindingProvider(DescriptorContainer widgetContainer,
-      DescriptorContainer strategyContainer) {
-    m_widgetContainer = widgetContainer;
-    m_strategyContainer = strategyContainer;
-    m_propertiesFilter = new PropertiesFilter(m_widgetContainer);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DefaultAutomaticDatabindingProvider(DescriptorContainer widgetContainer,
+			DescriptorContainer strategyContainer) {
+		m_widgetContainer = widgetContainer;
+		m_strategyContainer = strategyContainer;
+		m_propertiesFilter = new PropertiesFilter(m_widgetContainer);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // WizardPage
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void setCurrentWizardData(AutomaticDatabindingFirstPage firstPage,
-      ICompleteListener pageListener) {
-    m_javaProject = firstPage.getJavaProject();
-    m_pageListener = pageListener;
-    try {
-      // prepare class loader
-      m_classLoader = m_classLoaders.get(m_javaProject);
-      // check create new class loader
-      if (m_classLoader == null) {
-        m_classLoader = ProjectClassLoader.create(null, m_javaProject);
-        m_classLoaders.put(m_javaProject, m_classLoader);
-      }
-    } catch (Throwable e) {
-      DesignerPlugin.log(e);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// WizardPage
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void setCurrentWizardData(AutomaticDatabindingFirstPage firstPage,
+			ICompleteListener pageListener) {
+		m_javaProject = firstPage.getJavaProject();
+		m_pageListener = pageListener;
+		try {
+			// prepare class loader
+			m_classLoader = m_classLoaders.get(m_javaProject);
+			// check create new class loader
+			if (m_classLoader == null) {
+				m_classLoader = ProjectClassLoader.create(null, m_javaProject);
+				m_classLoaders.put(m_javaProject, m_classLoader);
+			}
+		} catch (Throwable e) {
+			DesignerPlugin.log(e);
+		}
+	}
 
-  @Override
-  public Class<?> loadClass(String className) throws ClassNotFoundException {
-    return CoreUtils.load(m_classLoader, className);
-  }
+	@Override
+	public Class<?> loadClass(String className) throws ClassNotFoundException {
+		return CoreUtils.load(m_classLoader, className);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Properties
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public List<PropertyAdapter> getProperties(Class<?> choosenClass) throws Exception {
-    m_beanClass = choosenClass;
-    m_propertyToEditor.clear();
-    setWidgetCompositeEnabled(false);
-    return getProperties0(m_beanClass);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Properties
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public List<PropertyAdapter> getProperties(Class<?> choosenClass) throws Exception {
+		m_beanClass = choosenClass;
+		m_propertyToEditor.clear();
+		setWidgetCompositeEnabled(false);
+		return getProperties0(m_beanClass);
+	}
 
-  protected abstract List<PropertyAdapter> getProperties0(Class<?> choosenClass) throws Exception;
+	protected abstract List<PropertyAdapter> getProperties0(Class<?> choosenClass) throws Exception;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected final ViewerFilter m_propertiesFilter;
-  protected CheckboxTableViewer m_propertiesViewer;
-  protected Composite m_widgetComposite;
-  protected Label m_editorLabel;
-  protected Label m_strategyLabel;
-  protected CheckboxTableViewer m_editorsViewer;
-  protected CheckboxTableViewer m_strategiesViewer;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected final ViewerFilter m_propertiesFilter;
+	protected CheckboxTableViewer m_propertiesViewer;
+	protected Composite m_widgetComposite;
+	protected Label m_editorLabel;
+	protected Label m_strategyLabel;
+	protected CheckboxTableViewer m_editorsViewer;
+	protected CheckboxTableViewer m_strategiesViewer;
 
-  @Override
-  public void configurePropertiesViewer(CheckboxTableViewer viewer) {
-    m_propertiesViewer = viewer;
-    m_propertiesViewer.addPostSelectionChangedListener(new ISelectionChangedListener() {
-      @Override
-      public void selectionChanged(SelectionChangedEvent event) {
-        handlePropertySelection();
-      }
-    });
-  }
+	@Override
+	public void configurePropertiesViewer(CheckboxTableViewer viewer) {
+		m_propertiesViewer = viewer;
+		m_propertiesViewer.addPostSelectionChangedListener(new ISelectionChangedListener() {
+			@Override
+			public void selectionChanged(SelectionChangedEvent event) {
+				handlePropertySelection();
+			}
+		});
+	}
 
-  @Override
-  public ViewerFilter getPropertiesViewerFilter() {
-    return m_propertiesFilter;
-  }
+	@Override
+	public ViewerFilter getPropertiesViewerFilter() {
+		return m_propertiesFilter;
+	}
 
-  @Override
-  public boolean getPropertiesViewerFilterInitState() {
-    return true;
-  }
+	@Override
+	public boolean getPropertiesViewerFilterInitState() {
+		return true;
+	}
 
-  @Override
-  public void fillWidgetComposite(Composite widgetComposite) {
-    // configure widget composite
-    m_widgetComposite = widgetComposite;
-    GridLayoutFactory.create(widgetComposite).columns(m_strategyContainer == null ? 1 : 2).noMargins();
-    // editor title
-    m_editorLabel = new Label(widgetComposite, SWT.NONE);
-    m_editorLabel.setText(Messages.DefaultAutomaticDatabindingProvider_editorLabel);
-    // strategy title
-    if (m_strategyContainer != null) {
-      m_strategyLabel = new Label(widgetComposite, SWT.NONE);
-      m_strategyLabel.setText(Messages.DefaultAutomaticDatabindingProvider_strategyLabel);
-    }
-    // editor viewer
-    m_editorsViewer =
-        CheckboxTableViewer.newCheckList(widgetComposite, SWT.BORDER
-            | SWT.FULL_SELECTION
-            | SWT.H_SCROLL
-            | SWT.V_SCROLL);
-    // create columns
-    GridDataFactory.create(m_editorsViewer.getControl()).hintVC(20).fill().grabH();
-    TableFactory.modify(m_editorsViewer).standard().newColumn().width(170).text(
-        Messages.DefaultAutomaticDatabindingProvider_widgetColumn);
-    TableFactory.modify(m_editorsViewer).standard().newColumn().width(150).text(
-        Messages.DefaultAutomaticDatabindingProvider_propertyColumn);
-    // configure viewer
-    m_editorsViewer.setContentProvider(new ArrayContentProvider());
-    m_editorsViewer.setLabelProvider(new DescriptorTableLabelProvider());
-    m_editorsViewer.setInput(m_widgetContainer.getDescriptors());
-    new SingleCheckSelectionListener(m_editorsViewer, 0);
-    // strategy viewer
-    if (m_strategyContainer != null) {
-      m_strategiesViewer =
-          CheckboxTableViewer.newCheckList(widgetComposite, SWT.BORDER
-              | SWT.FULL_SELECTION
-              | SWT.H_SCROLL
-              | SWT.V_SCROLL);
-      GridDataFactory.create(m_strategiesViewer.getControl()).fill().grab();
-      m_strategiesViewer.setContentProvider(new ArrayContentProvider());
-      m_strategiesViewer.setLabelProvider(new DescriptorLabelProvider());
-      m_strategiesViewer.setInput(m_strategyContainer.getDescriptors());
-      new SingleCheckSelectionListener(m_strategiesViewer, 1);
-    }
-    //
-    setWidgetCompositeEnabled(false);
-  }
+	@Override
+	public void fillWidgetComposite(Composite widgetComposite) {
+		// configure widget composite
+		m_widgetComposite = widgetComposite;
+		GridLayoutFactory.create(widgetComposite).columns(m_strategyContainer == null ? 1 : 2).noMargins();
+		// editor title
+		m_editorLabel = new Label(widgetComposite, SWT.NONE);
+		m_editorLabel.setText(Messages.DefaultAutomaticDatabindingProvider_editorLabel);
+		// strategy title
+		if (m_strategyContainer != null) {
+			m_strategyLabel = new Label(widgetComposite, SWT.NONE);
+			m_strategyLabel.setText(Messages.DefaultAutomaticDatabindingProvider_strategyLabel);
+		}
+		// editor viewer
+		m_editorsViewer =
+				CheckboxTableViewer.newCheckList(widgetComposite, SWT.BORDER
+						| SWT.FULL_SELECTION
+						| SWT.H_SCROLL
+						| SWT.V_SCROLL);
+		// create columns
+		GridDataFactory.create(m_editorsViewer.getControl()).hintVC(20).fill().grabH();
+		TableFactory.modify(m_editorsViewer).standard().newColumn().width(170).text(
+				Messages.DefaultAutomaticDatabindingProvider_widgetColumn);
+		TableFactory.modify(m_editorsViewer).standard().newColumn().width(150).text(
+				Messages.DefaultAutomaticDatabindingProvider_propertyColumn);
+		// configure viewer
+		m_editorsViewer.setContentProvider(new ArrayContentProvider());
+		m_editorsViewer.setLabelProvider(new DescriptorTableLabelProvider());
+		m_editorsViewer.setInput(m_widgetContainer.getDescriptors());
+		new SingleCheckSelectionListener(m_editorsViewer, 0);
+		// strategy viewer
+		if (m_strategyContainer != null) {
+			m_strategiesViewer =
+					CheckboxTableViewer.newCheckList(widgetComposite, SWT.BORDER
+							| SWT.FULL_SELECTION
+							| SWT.H_SCROLL
+							| SWT.V_SCROLL);
+			GridDataFactory.create(m_strategiesViewer.getControl()).fill().grab();
+			m_strategiesViewer.setContentProvider(new ArrayContentProvider());
+			m_strategiesViewer.setLabelProvider(new DescriptorLabelProvider());
+			m_strategiesViewer.setInput(m_strategyContainer.getDescriptors());
+			new SingleCheckSelectionListener(m_strategiesViewer, 1);
+		}
+		//
+		setWidgetCompositeEnabled(false);
+	}
 
-  private void setWidgetCompositeEnabled(boolean enabled) {
-    // viewers state
-    if (!enabled) {
-      m_editorsViewer.setCheckedElements(ArrayUtils.EMPTY_OBJECT_ARRAY);
-      if (m_strategiesViewer != null) {
-        m_strategiesViewer.setCheckedElements(ArrayUtils.EMPTY_OBJECT_ARRAY);
-      }
-    }
-    // buttons state
-    m_editorLabel.setEnabled(enabled);
-    m_editorsViewer.getControl().setEnabled(enabled);
-    if (m_strategiesViewer != null) {
-      m_strategyLabel.setEnabled(enabled);
-      m_strategiesViewer.getControl().setEnabled(enabled);
-    }
-    m_widgetComposite.setEnabled(enabled);
-  }
+	private void setWidgetCompositeEnabled(boolean enabled) {
+		// viewers state
+		if (!enabled) {
+			m_editorsViewer.setCheckedElements(ArrayUtils.EMPTY_OBJECT_ARRAY);
+			if (m_strategiesViewer != null) {
+				m_strategiesViewer.setCheckedElements(ArrayUtils.EMPTY_OBJECT_ARRAY);
+			}
+		}
+		// buttons state
+		m_editorLabel.setEnabled(enabled);
+		m_editorsViewer.getControl().setEnabled(enabled);
+		if (m_strategiesViewer != null) {
+			m_strategyLabel.setEnabled(enabled);
+			m_strategiesViewer.getControl().setEnabled(enabled);
+		}
+		m_widgetComposite.setEnabled(enabled);
+	}
 
-  @Override
-  public void handlePropertyChecked(PropertyAdapter property, boolean checked) {
-    if (checked) {
-      AbstractDescriptor[] editorData = m_propertyToEditor.get(property);
-      if (editorData == null) {
-        editorData =
-            new AbstractDescriptor[]{
-                m_widgetContainer.getDefaultDescriptor(property, true),
-                m_strategyContainer == null ? null : m_strategyContainer.getDefaultDescriptor(
-                    property,
-                    true)};
-        m_propertyToEditor.put(property, editorData);
-      }
-    }
-  }
+	@Override
+	public void handlePropertyChecked(PropertyAdapter property, boolean checked) {
+		if (checked) {
+			AbstractDescriptor[] editorData = m_propertyToEditor.get(property);
+			if (editorData == null) {
+				editorData =
+						new AbstractDescriptor[]{
+								m_widgetContainer.getDefaultDescriptor(property, true),
+								m_strategyContainer == null ? null : m_strategyContainer.getDefaultDescriptor(
+										property,
+										true)};
+				m_propertyToEditor.put(property, editorData);
+			}
+		}
+	}
 
-  protected void handlePropertySelection() {
-    IStructuredSelection selection = UiUtils.getSelection(m_propertiesViewer);
-    boolean enabled =
-        !UiUtils.isEmpty(selection) && m_propertiesViewer.getChecked(selection.getFirstElement());
-    setWidgetCompositeEnabled(enabled);
-    //
-    if (enabled) {
-      AbstractDescriptor[] editorData = m_propertyToEditor.get(selection.getFirstElement());
-      m_editorsViewer.setCheckedElements(new Object[]{editorData[0]});
-      m_editorsViewer.setSelection(new StructuredSelection(editorData[0]), true);
-      if (m_strategiesViewer != null) {
-        m_strategiesViewer.setCheckedElements(new Object[]{editorData[1]});
-        m_strategiesViewer.setSelection(new StructuredSelection(editorData[1]), true);
-      }
-    }
-  }
+	protected void handlePropertySelection() {
+		IStructuredSelection selection = UiUtils.getSelection(m_propertiesViewer);
+		boolean enabled =
+				!UiUtils.isEmpty(selection) && m_propertiesViewer.getChecked(selection.getFirstElement());
+		setWidgetCompositeEnabled(enabled);
+		//
+		if (enabled) {
+			AbstractDescriptor[] editorData = m_propertyToEditor.get(selection.getFirstElement());
+			m_editorsViewer.setCheckedElements(new Object[]{editorData[0]});
+			m_editorsViewer.setSelection(new StructuredSelection(editorData[0]), true);
+			if (m_strategiesViewer != null) {
+				m_strategiesViewer.setCheckedElements(new Object[]{editorData[1]});
+				m_strategiesViewer.setSelection(new StructuredSelection(editorData[1]), true);
+			}
+		}
+	}
 
-  protected void handleChangeEditor(AbstractDescriptor newValue, int index) {
-    // prepare selection
-    IStructuredSelection selection = UiUtils.getSelection(m_propertiesViewer);
-    AbstractDescriptor[] editorData = m_propertyToEditor.get(selection.getFirstElement());
-    // sets new value
-    editorData[index] = newValue;
-    // update viewer
-    m_pageListener.calculateFinish();
-  }
+	protected void handleChangeEditor(AbstractDescriptor newValue, int index) {
+		// prepare selection
+		IStructuredSelection selection = UiUtils.getSelection(m_propertiesViewer);
+		AbstractDescriptor[] editorData = m_propertyToEditor.get(selection.getFirstElement());
+		// sets new value
+		editorData[index] = newValue;
+		// update viewer
+		m_pageListener.calculateFinish();
+	}
 
-  @Override
-  public String calculateFinish() {
-    Object[] elements = m_propertiesViewer.getCheckedElements();
-    //
-    for (Object element : elements) {
-      PropertyAdapter property = (PropertyAdapter) element;
-      Object[] editorData = m_propertyToEditor.get(property);
-      //
-      if (editorData[0] == null) {
-        return MessageFormat.format(
-            Messages.DefaultAutomaticDatabindingProvider_validateNoWidgetForProperty,
-            property.getName());
-      }
-      if (m_strategyContainer != null && editorData[1] == null) {
-        return MessageFormat.format(
-            Messages.DefaultAutomaticDatabindingProvider_validateNoStrategyForProperty,
-            property.getName());
-      }
-    }
-    return null;
-  }
+	@Override
+	public String calculateFinish() {
+		Object[] elements = m_propertiesViewer.getCheckedElements();
+		//
+		for (Object element : elements) {
+			PropertyAdapter property = (PropertyAdapter) element;
+			Object[] editorData = m_propertyToEditor.get(property);
+			//
+			if (editorData[0] == null) {
+				return MessageFormat.format(
+						Messages.DefaultAutomaticDatabindingProvider_validateNoWidgetForProperty,
+						property.getName());
+			}
+			if (m_strategyContainer != null && editorData[1] == null) {
+				return MessageFormat.format(
+						Messages.DefaultAutomaticDatabindingProvider_validateNoStrategyForProperty,
+						property.getName());
+			}
+		}
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Single checked listener
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private class SingleCheckSelectionListener implements ICheckStateListener {
-    private final CheckboxTableViewer m_viewer;
-    private final int m_index;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Single checked listener
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private class SingleCheckSelectionListener implements ICheckStateListener {
+		private final CheckboxTableViewer m_viewer;
+		private final int m_index;
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public SingleCheckSelectionListener(CheckboxTableViewer viewer, int index) {
-      m_viewer = viewer;
-      m_index = index;
-      m_viewer.addCheckStateListener(this);
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public SingleCheckSelectionListener(CheckboxTableViewer viewer, int index) {
+			m_viewer = viewer;
+			m_index = index;
+			m_viewer.addCheckStateListener(this);
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // ICheckStateListener
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public void checkStateChanged(CheckStateChangedEvent event) {
-      if (event.getChecked()) {
-        Object selection = event.getElement();
-        Object[] elements = m_viewer.getCheckedElements();
-        // unchecked other elements
-        for (int i = 0; i < elements.length; i++) {
-          Object element = elements[i];
-          if (element != selection) {
-            m_viewer.setChecked(element, false);
-          }
-        }
-      }
-      // sets new value
-      AbstractDescriptor descriptor = (AbstractDescriptor) event.getElement();
-      handleChangeEditor(event.getChecked() ? descriptor : null, m_index);
-    }
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // LabelProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static class DescriptorLabelProvider extends LabelProvider {
-    @Override
-    public String getText(Object element) {
-      AbstractDescriptor descriptor = (AbstractDescriptor) element;
-      return descriptor.getName();
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// ICheckStateListener
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public void checkStateChanged(CheckStateChangedEvent event) {
+			if (event.getChecked()) {
+				Object selection = event.getElement();
+				Object[] elements = m_viewer.getCheckedElements();
+				// unchecked other elements
+				for (int i = 0; i < elements.length; i++) {
+					Object element = elements[i];
+					if (element != selection) {
+						m_viewer.setChecked(element, false);
+					}
+				}
+			}
+			// sets new value
+			AbstractDescriptor descriptor = (AbstractDescriptor) event.getElement();
+			handleChangeEditor(event.getChecked() ? descriptor : null, m_index);
+		}
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// LabelProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static class DescriptorLabelProvider extends LabelProvider {
+		@Override
+		public String getText(Object element) {
+			AbstractDescriptor descriptor = (AbstractDescriptor) element;
+			return descriptor.getName();
+		}
 
-    @Override
-    public Image getImage(Object element) {
-      AbstractDescriptor descriptor = (AbstractDescriptor) element;
-      return descriptor.getImage();
-    }
-  }
-  private static class DescriptorTableLabelProvider extends LabelProvider
-      implements
-        ITableLabelProvider {
-    @Override
-    public String getColumnText(Object element, int columnIndex) {
-      AbstractDescriptor descriptor = (AbstractDescriptor) element;
-      return descriptor.getName(columnIndex);
-    }
+		@Override
+		public Image getImage(Object element) {
+			AbstractDescriptor descriptor = (AbstractDescriptor) element;
+			return descriptor.getImage();
+		}
+	}
+	private static class DescriptorTableLabelProvider extends LabelProvider
+	implements
+	ITableLabelProvider {
+		@Override
+		public String getColumnText(Object element, int columnIndex) {
+			AbstractDescriptor descriptor = (AbstractDescriptor) element;
+			return descriptor.getName(columnIndex);
+		}
 
-    @Override
-    public Image getColumnImage(Object element, int columnIndex) {
-      AbstractDescriptor descriptor = (AbstractDescriptor) element;
-      return descriptor.getImage(columnIndex);
-    }
-  }
+		@Override
+		public Image getColumnImage(Object element, int columnIndex) {
+			AbstractDescriptor descriptor = (AbstractDescriptor) element;
+			return descriptor.getImage(columnIndex);
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/wizards/autobindings/DescriptorContainer.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/wizards/autobindings/DescriptorContainer.java
index 406785692..3ef0c5a21 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/wizards/autobindings/DescriptorContainer.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/wizards/autobindings/DescriptorContainer.java
@@ -35,132 +35,132 @@
  * @coverage bindings.wizard.auto
  */
 public final class DescriptorContainer {
-  private final List<AbstractDescriptor> m_descriptors = Lists.newArrayList();
-  private final List<AbstractDescriptor> m_defaults = Lists.newArrayList();
+	private final List<AbstractDescriptor> m_descriptors = Lists.newArrayList();
+	private final List<AbstractDescriptor> m_defaults = Lists.newArrayList();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return {@link List} with all descriptors.
-   */
-  public List<AbstractDescriptor> getDescriptors() {
-    return m_descriptors;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return {@link List} with all descriptors.
+	 */
+	public List<AbstractDescriptor> getDescriptors() {
+		return m_descriptors;
+	}
 
-  /**
-   * @return default {@link AbstractDescriptor} for given object.
-   */
-  public AbstractDescriptor getDefaultDescriptor(Object propertyDescriptor, boolean ensure) {
-    if (m_defaults.size() == 1) {
-      return m_defaults.get(0);
-    }
-    //
-    for (AbstractDescriptor descriptor : m_defaults) {
-      if (descriptor.isDefault(propertyDescriptor)) {
-        return descriptor;
-      }
-    }
-    //
-    if (ensure) {
-      if (!m_defaults.isEmpty()) {
-        return m_defaults.get(0);
-      }
-      if (!m_descriptors.isEmpty()) {
-        return m_descriptors.get(0);
-      }
-    }
-    //
-    return null;
-  }
+	/**
+	 * @return default {@link AbstractDescriptor} for given object.
+	 */
+	public AbstractDescriptor getDefaultDescriptor(Object propertyDescriptor, boolean ensure) {
+		if (m_defaults.size() == 1) {
+			return m_defaults.get(0);
+		}
+		//
+		for (AbstractDescriptor descriptor : m_defaults) {
+			if (descriptor.isDefault(propertyDescriptor)) {
+				return descriptor;
+			}
+		}
+		//
+		if (ensure) {
+			if (!m_defaults.isEmpty()) {
+				return m_defaults.get(0);
+			}
+			if (!m_descriptors.isEmpty()) {
+				return m_descriptors.get(0);
+			}
+		}
+		//
+		return null;
+	}
 
-  private void addDescriptor(AbstractDescriptor descriptor) {
-    m_descriptors.add(descriptor);
-    if (descriptor.isDefault()) {
-      m_defaults.add(descriptor);
-    }
-  }
+	private void addDescriptor(AbstractDescriptor descriptor) {
+		m_descriptors.add(descriptor);
+		if (descriptor.isDefault()) {
+			m_defaults.add(descriptor);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parser
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Parse descriptors XML file.
-   *
-   * @return {@link Map} with all descriptors.
-   */
-  public static Map<String, DescriptorContainer> parseDescriptors(InputStream stream,
-      final ClassLoader classLoader,
-      final IImageLoader imageLoader) throws Exception {
-    final Map<String, DescriptorContainer> containers = Maps.newHashMap();
-    //
-    SAXParser parser = SAXParserFactory.newInstance().newSAXParser();
-    parser.parse(stream, new DefaultHandler() {
-      private DescriptorContainer m_container;
-      private AbstractDescriptor m_descriptor;
-      private Class<?> m_descriptorClass;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parser
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Parse descriptors XML file.
+	 *
+	 * @return {@link Map} with all descriptors.
+	 */
+	public static Map<String, DescriptorContainer> parseDescriptors(InputStream stream,
+			final ClassLoader classLoader,
+			final IImageLoader imageLoader) throws Exception {
+		final Map<String, DescriptorContainer> containers = Maps.newHashMap();
+		//
+		SAXParser parser = SAXParserFactory.newInstance().newSAXParser();
+		parser.parse(stream, new DefaultHandler() {
+			private DescriptorContainer m_container;
+			private AbstractDescriptor m_descriptor;
+			private Class<?> m_descriptorClass;
 
-      //
-      @Override
-      public void startElement(String uri, String localName, String name, Attributes attributes)
-          throws SAXException {
-        try {
-          if ("descriptors".equals(name)) {
-            // create container
-            m_container = new DescriptorContainer();
-            containers.put(attributes.getValue("name"), m_container);
-            m_descriptorClass = classLoader.loadClass(attributes.getValue("class"));
-          } else if ("descriptor".equals(name)) {
-            // create descriptor
-            m_descriptor = (AbstractDescriptor) m_descriptorClass.newInstance();
-          } else if (m_descriptor != null) {
-            // fill attributes
-            if (attributes.getLength() == 0) {
-              // method without parameters
-              ReflectionUtils.invokeMethod(m_descriptor, name + "()", ArrayUtils.EMPTY_OBJECT_ARRAY);
-            } else {
-              if (name.endsWith("Image")) {
-                // special support for images
-                try {
-                  ReflectionUtils.invokeMethod(
-                      m_descriptor,
-                      name + "(org.eclipse.swt.graphics.Image)",
-                      new Object[]{imageLoader.getImage(attributes.getValue("value"))});
-                } catch (Throwable e) {
-                  DesignerPlugin.log(
-                      "DescriptorContainer: error load image " + attributes.getValue("value"),
-                      e);
-                }
-              } else {
-                // method with single String parameter
-                ReflectionUtils.invokeMethod(
-                    m_descriptor,
-                    name + "(java.lang.String)",
-                    new Object[]{attributes.getValue("value")});
-              }
-            }
-          }
-        } catch (Exception e) {
-          throw new SAXException("startElement", e);
-        }
-      }
+			//
+			@Override
+			public void startElement(String uri, String localName, String name, Attributes attributes)
+					throws SAXException {
+				try {
+					if ("descriptors".equals(name)) {
+						// create container
+						m_container = new DescriptorContainer();
+						containers.put(attributes.getValue("name"), m_container);
+						m_descriptorClass = classLoader.loadClass(attributes.getValue("class"));
+					} else if ("descriptor".equals(name)) {
+						// create descriptor
+						m_descriptor = (AbstractDescriptor) m_descriptorClass.newInstance();
+					} else if (m_descriptor != null) {
+						// fill attributes
+						if (attributes.getLength() == 0) {
+							// method without parameters
+							ReflectionUtils.invokeMethod(m_descriptor, name + "()", ArrayUtils.EMPTY_OBJECT_ARRAY);
+						} else {
+							if (name.endsWith("Image")) {
+								// special support for images
+								try {
+									ReflectionUtils.invokeMethod(
+											m_descriptor,
+											name + "(org.eclipse.swt.graphics.Image)",
+											new Object[]{imageLoader.getImage(attributes.getValue("value"))});
+								} catch (Throwable e) {
+									DesignerPlugin.log(
+											"DescriptorContainer: error load image " + attributes.getValue("value"),
+											e);
+								}
+							} else {
+								// method with single String parameter
+								ReflectionUtils.invokeMethod(
+										m_descriptor,
+										name + "(java.lang.String)",
+										new Object[]{attributes.getValue("value")});
+							}
+						}
+					}
+				} catch (Exception e) {
+					throw new SAXException("startElement", e);
+				}
+			}
 
-      @Override
-      public void endElement(String uri, String localName, String name) throws SAXException {
-        // clear state
-        if ("descriptors".equals(name)) {
-          m_container = null;
-        } else if ("descriptor".equals(name)) {
-          m_container.addDescriptor(m_descriptor);
-          m_descriptor = null;
-        }
-      }
-    });
-    //
-    return containers;
-  }
+			@Override
+			public void endElement(String uri, String localName, String name) throws SAXException {
+				// clear state
+				if ("descriptors".equals(name)) {
+					m_container = null;
+				} else if ("descriptor".equals(name)) {
+					m_container.addDescriptor(m_descriptor);
+					m_descriptor = null;
+				}
+			}
+		});
+		//
+		return containers;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/wizards/autobindings/IAutomaticDatabindingProvider.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/wizards/autobindings/IAutomaticDatabindingProvider.java
index 0de93e61b..816e207a4 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/wizards/autobindings/IAutomaticDatabindingProvider.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/wizards/autobindings/IAutomaticDatabindingProvider.java
@@ -29,98 +29,98 @@
  * @coverage bindings.wizard.auto
  */
 public interface IAutomaticDatabindingProvider {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // SuperClass
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return all super classes for new type.
-   */
-  String[] getSuperClasses();
-
-  /**
-   * @return super classes for initial checked.
-   */
-  String getInitialSuperClass();
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Finish
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return {@link InputStream} with template for given super class.
-   */
-  InputStream getTemplateFile(String superClassName);
-
-  /**
-   * Generate code.
-   *
-   * @return the source code with replace template patterns on life values.
-   */
-  String performSubstitutions(String code, ImportsManager imports) throws Exception;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Wizard Page
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets initial wizard page objects.
-   */
-  void setCurrentWizardData(AutomaticDatabindingFirstPage firstPage, ICompleteListener pageListener);
-
-  /**
-   * Load class with given name. This operation is toolkit dependents and not exist universal way.
-   */
-  Class<?> loadClass(String className) throws ClassNotFoundException;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Configure properties {@link CheckboxTableViewer}: add columns, set label provider and etc.
-   */
-  void configurePropertiesViewer(CheckboxTableViewer viewer);
-
-  /**
-   * Add additional settings (value scope, label provider and etc.) to
-   * {@link ChooseClassAndPropertiesConfiguration}.
-   */
-  void configure(ChooseClassAndPropertiesConfiguration configuration);
-
-  /**
-   * Create bindings API depended widgets.
-   */
-  void fillWidgetComposite(Composite widgetComposite);
-
-  /**
-   * Handle add/remove property.
-   */
-  void handlePropertyChecked(PropertyAdapter property, boolean checked);
-
-  /**
-   * Initial state for hide/show properties filter.
-   */
-  boolean getPropertiesViewerFilterInitState();
-
-  /**
-   * @return {@link ViewerFilter} for hide/show the properties which can't be bound.
-   */
-  ViewerFilter getPropertiesViewerFilter();
-
-  /**
-   * @return list with properties for given class.
-   */
-  List<PropertyAdapter> getProperties(Class<?> choosenClass) throws Exception;
-
-  /**
-   * Calculate finish state.
-   *
-   * @return the error message or <code>null</code> otherwise.
-   */
-  String calculateFinish();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// SuperClass
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return all super classes for new type.
+	 */
+	String[] getSuperClasses();
+
+	/**
+	 * @return super classes for initial checked.
+	 */
+	String getInitialSuperClass();
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Finish
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return {@link InputStream} with template for given super class.
+	 */
+	InputStream getTemplateFile(String superClassName);
+
+	/**
+	 * Generate code.
+	 *
+	 * @return the source code with replace template patterns on life values.
+	 */
+	String performSubstitutions(String code, ImportsManager imports) throws Exception;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Wizard Page
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets initial wizard page objects.
+	 */
+	void setCurrentWizardData(AutomaticDatabindingFirstPage firstPage, ICompleteListener pageListener);
+
+	/**
+	 * Load class with given name. This operation is toolkit dependents and not exist universal way.
+	 */
+	Class<?> loadClass(String className) throws ClassNotFoundException;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Configure properties {@link CheckboxTableViewer}: add columns, set label provider and etc.
+	 */
+	void configurePropertiesViewer(CheckboxTableViewer viewer);
+
+	/**
+	 * Add additional settings (value scope, label provider and etc.) to
+	 * {@link ChooseClassAndPropertiesConfiguration}.
+	 */
+	void configure(ChooseClassAndPropertiesConfiguration configuration);
+
+	/**
+	 * Create bindings API depended widgets.
+	 */
+	void fillWidgetComposite(Composite widgetComposite);
+
+	/**
+	 * Handle add/remove property.
+	 */
+	void handlePropertyChecked(PropertyAdapter property, boolean checked);
+
+	/**
+	 * Initial state for hide/show properties filter.
+	 */
+	boolean getPropertiesViewerFilterInitState();
+
+	/**
+	 * @return {@link ViewerFilter} for hide/show the properties which can't be bound.
+	 */
+	ViewerFilter getPropertiesViewerFilter();
+
+	/**
+	 * @return list with properties for given class.
+	 */
+	List<PropertyAdapter> getProperties(Class<?> choosenClass) throws Exception;
+
+	/**
+	 * Calculate finish state.
+	 *
+	 * @return the error message or <code>null</code> otherwise.
+	 */
+	String calculateFinish();
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/wizards/autobindings/IImageLoader.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/wizards/autobindings/IImageLoader.java
index 060bb46fa..36555f404 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/wizards/autobindings/IImageLoader.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/wizards/autobindings/IImageLoader.java
@@ -19,8 +19,8 @@
  * @coverage bindings.wizard.auto
  */
 public interface IImageLoader {
-  /**
-   * Load {@link Image} with given name.
-   */
-  Image getImage(String name);
+	/**
+	 * Load {@link Image} with given name.
+	 */
+	Image getImage(String name);
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/wizards/autobindings/PropertiesFilter.java b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/wizards/autobindings/PropertiesFilter.java
index c76e2e6eb..429546e13 100644
--- a/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/wizards/autobindings/PropertiesFilter.java
+++ b/org.eclipse.wb.core.databinding/src/org/eclipse/wb/internal/core/databinding/wizards/autobindings/PropertiesFilter.java
@@ -20,24 +20,24 @@
  * @coverage bindings.wizard.auto
  */
 public final class PropertiesFilter extends ViewerFilter {
-  private final DescriptorContainer m_widgetContainer;
+	private final DescriptorContainer m_widgetContainer;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public PropertiesFilter(DescriptorContainer widgetContainer) {
-    m_widgetContainer = widgetContainer;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public PropertiesFilter(DescriptorContainer widgetContainer) {
+		m_widgetContainer = widgetContainer;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ViewerFilter
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean select(Viewer viewer, Object parentElement, Object element) {
-    return m_widgetContainer.getDefaultDescriptor(element, false) != null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ViewerFilter
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean select(Viewer viewer, Object parentElement, Object element) {
+		return m_widgetContainer.getDefaultDescriptor(element, false) != null;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/IDesignPage.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/IDesignPage.java
index c5c218bf5..bc7f04d9e 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/IDesignPage.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/IDesignPage.java
@@ -19,18 +19,18 @@
  * @coverage core.editor
  */
 public interface IDesignPage extends IEditorPage {
-  /**
-   * Specifies if synchronization of source code and model should be active or not.
-   */
-  void setSourceModelSynchronizationEnabled(boolean active);
+	/**
+	 * Specifies if synchronization of source code and model should be active or not.
+	 */
+	void setSourceModelSynchronizationEnabled(boolean active);
 
-  /**
-   * @return the {@link DesignerState} of parsing.
-   */
-  DesignerState getDesignerState();
+	/**
+	 * @return the {@link DesignerState} of parsing.
+	 */
+	DesignerState getDesignerState();
 
-  /**
-   * Parses {@link ICompilationUnit} and displays it in GEF.
-   */
-  void refreshGEF();
+	/**
+	 * Parses {@link ICompilationUnit} and displays it in GEF.
+	 */
+	void refreshGEF();
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/IDesignerEditor.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/IDesignerEditor.java
index 8af001634..24d5c7dd4 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/IDesignerEditor.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/IDesignerEditor.java
@@ -22,35 +22,35 @@
  * @coverage core.editor
  */
 public interface IDesignerEditor extends IDesignCompositeProvider {
-  String ID = "org.eclipse.wb.core.guiEditor";
+	String ID = "org.eclipse.wb.core.guiEditor";
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link IMultiMode}.
-   */
-  IMultiMode getMultiMode();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link IMultiMode}.
+	 */
+	IMultiMode getMultiMode();
 
-  /**
-   * @return the {@link ICompilationUnit} opened in this editor.
-   */
-  ICompilationUnit getCompilationUnit();
+	/**
+	 * @return the {@link ICompilationUnit} opened in this editor.
+	 */
+	ICompilationUnit getCompilationUnit();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Listeners
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds {@link DesignerEditorListener} for this editor.
-   */
-  void addDesignPageListener(DesignerEditorListener listener);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Listeners
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds {@link DesignerEditorListener} for this editor.
+	 */
+	void addDesignPageListener(DesignerEditorListener listener);
 
-  /**
-   * Removes {@link DesignerEditorListener} for this editor.
-   */
-  void removeDesignPageListener(DesignerEditorListener listener);
+	/**
+	 * Removes {@link DesignerEditorListener} for this editor.
+	 */
+	void removeDesignPageListener(DesignerEditorListener listener);
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/IEditorPage.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/IEditorPage.java
index a694c92e9..f9d839da3 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/IEditorPage.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/IEditorPage.java
@@ -21,63 +21,63 @@
  * @coverage core.editor
  */
 public interface IEditorPage {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Life cycle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Initialize this page for given {@link IDesignerEditor} editor.
-   */
-  void initialize(IDesignerEditor designerEditor);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Life cycle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Initialize this page for given {@link IDesignerEditor} editor.
+	 */
+	void initialize(IDesignerEditor designerEditor);
 
-  /**
-   * Disposes this page.
-   */
-  void dispose();
+	/**
+	 * Disposes this page.
+	 */
+	void dispose();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Activation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Handles activation/deactivation this page.
-   */
-  void handleActiveState(boolean activate);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Activation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Handles activation/deactivation this page.
+	 */
+	void handleActiveState(boolean activate);
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Creates the SWT control(s) for this page.
-   */
-  Control createControl(Composite parent);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Creates the SWT control(s) for this page.
+	 */
+	Control createControl(Composite parent);
 
-  /**
-   * @return the SWT {@link Control} of this page.
-   */
-  Control getControl();
+	/**
+	 * @return the SWT {@link Control} of this page.
+	 */
+	Control getControl();
 
-  /**
-   * Asks this page to take focus.
-   */
-  void setFocus();
+	/**
+	 * Asks this page to take focus.
+	 */
+	void setFocus();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the display name for this page.
-   */
-  String getName();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the display name for this page.
+	 */
+	String getName();
 
-  /**
-   * @return the display {@link Image} image for this page.
-   */
-  Image getImage();
+	/**
+	 * @return the display {@link Image} image for this page.
+	 */
+	Image getImage();
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/IEditorPageFactory.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/IEditorPageFactory.java
index 0fd9819a4..08b082d86 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/IEditorPageFactory.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/IEditorPageFactory.java
@@ -20,8 +20,8 @@
  * @coverage core.editor
  */
 public interface IEditorPageFactory {
-  /**
-   * Create {@link IEditorPage} pages for given {@link IDesignerEditor} editor.
-   */
-  void createPages(IDesignerEditor editor, List<IEditorPage> pages);
+	/**
+	 * Create {@link IEditorPage} pages for given {@link IDesignerEditor} editor.
+	 */
+	void createPages(IDesignerEditor editor, List<IEditorPage> pages);
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/IMultiMode.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/IMultiMode.java
index 91fbc4be5..51ece3b17 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/IMultiMode.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/IMultiMode.java
@@ -19,23 +19,23 @@
  * @coverage core.editor
  */
 public interface IMultiMode {
-  /**
-   * @return the {@link IDesignPage}.
-   */
-  IDesignPage getDesignPage();
+	/**
+	 * @return the {@link IDesignPage}.
+	 */
+	IDesignPage getDesignPage();
 
-  /**
-   * Activates "Source" page of editor.
-   */
-  void showSource();
+	/**
+	 * Activates "Source" page of editor.
+	 */
+	void showSource();
 
-  /**
-   * Activates "Design" page of editor.
-   */
-  void showDesign();
+	/**
+	 * Activates "Design" page of editor.
+	 */
+	void showDesign();
 
-  /**
-   * Switches between "Source" and "Design" pages.
-   */
-  void switchSourceDesign();
+	/**
+	 * Switches between "Source" and "Design" pages.
+	 */
+	void switchSourceDesign();
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/palette/PaletteEventListener.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/palette/PaletteEventListener.java
index 2343e910b..6e29f35b9 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/palette/PaletteEventListener.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/palette/PaletteEventListener.java
@@ -22,35 +22,35 @@
  * @coverage core.editor.palette.ui
  */
 public abstract class PaletteEventListener {
-  /**
-   * Listener can update list of {@link CategoryInfo}'s.
-   */
-  public void categories(List<CategoryInfo> categories) throws Exception {
-  }
+	/**
+	 * Listener can update list of {@link CategoryInfo}'s.
+	 */
+	public void categories(List<CategoryInfo> categories) throws Exception {
+	}
 
-  /**
-   * Listener can update list of {@link CategoryInfo}'s.<br>
-   * This method is invoked after {@link #categories(List)}. Sometimes one method is not enough, for
-   * example there may be two listeners, both add categories, order of these listeners is not known,
-   * but one of them knows, that it wants to place its categories after others.
-   */
-  public void categories2(List<CategoryInfo> categories) throws Exception {
-  }
+	/**
+	 * Listener can update list of {@link CategoryInfo}'s.<br>
+	 * This method is invoked after {@link #categories(List)}. Sometimes one method is not enough, for
+	 * example there may be two listeners, both add categories, order of these listeners is not known,
+	 * but one of them knows, that it wants to place its categories after others.
+	 */
+	public void categories2(List<CategoryInfo> categories) throws Exception {
+	}
 
-  /**
-   * Listener can update list of {@link EntryInfo}'s.<br>
-   * This event is useful, if you want to add new {@link EntryInfo}'s into existing
-   * {@link CategoryInfo}'s. If to want to add new {@link CategoryInfo} with {@link EntryInfo}'s, it
-   * is better to use {@link #categories(List)}.
-   */
-  public void entries(CategoryInfo category, List<EntryInfo> entries) throws Exception {
-  }
+	/**
+	 * Listener can update list of {@link EntryInfo}'s.<br>
+	 * This event is useful, if you want to add new {@link EntryInfo}'s into existing
+	 * {@link CategoryInfo}'s. If to want to add new {@link CategoryInfo} with {@link EntryInfo}'s, it
+	 * is better to use {@link #categories(List)}.
+	 */
+	public void entries(CategoryInfo category, List<EntryInfo> entries) throws Exception {
+	}
 
-  /**
-   * @param canEdit
-   *          the single element array that specifies if palette can be edited, subscriber may set
-   *          it to <code>false</code>.
-   */
-  public void canEdit(boolean[] canEdit) {
-  }
+	/**
+	 * @param canEdit
+	 *          the single element array that specifies if palette can be edited, subscriber may set
+	 *          it to <code>false</code>.
+	 */
+	public void canEdit(boolean[] canEdit) {
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/palette/model/AbstractElementInfo.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/palette/model/AbstractElementInfo.java
index 1e296f47b..70d9a538c 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/palette/model/AbstractElementInfo.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/palette/model/AbstractElementInfo.java
@@ -20,147 +20,147 @@
  * @coverage core.editor.palette
  */
 public abstract class AbstractElementInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final int hashCode() {
-    return m_id.hashCode();
-  }
-
-  @Override
-  public final boolean equals(Object obj) {
-    if (obj == this) {
-      return true;
-    }
-    if (obj instanceof AbstractElementInfo) {
-      AbstractElementInfo element = (AbstractElementInfo) obj;
-      return m_id.equals(element.m_id);
-    }
-    return false;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Id
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private String m_id;
-
-  /**
-   * Sets the id of this element, can be used only one time.
-   */
-  public final void setId(String id) {
-    Assert.isNull(m_id);
-    Assert.isNotNull(id);
-    m_id = id;
-  }
-
-  /**
-   * @return the id of this element.
-   */
-  public final String getId() {
-    return m_id;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Visible
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private boolean m_visible = true;
-
-  /**
-   * @return <code>true</code> if this element is visible.
-   */
-  public final boolean isVisible() {
-    return m_visible;
-  }
-
-  /**
-   * Sets visibility flag.
-   */
-  public final void setVisible(boolean visible) {
-    m_visible = visible;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Name
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private String m_name;
-
-  /**
-   * @return the name of this element.
-   */
-  public final String getName() {
-    if (m_name == null) {
-      return getNameDefault();
-    }
-    return m_name;
-  }
-
-  /**
-   * @return the "raw" name, without default.
-   */
-  protected String getNameRaw() {
-    return m_name;
-  }
-
-  /**
-   * @return the default name, instead of <code>null</code>.
-   */
-  protected String getNameDefault() {
-    return "(unknown)";
-  }
-
-  /**
-   * Sets the name of this element.
-   */
-  public final void setName(String name) {
-    m_name = name;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Description
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private String m_description;
-
-  /**
-   * @return the description of this element.
-   */
-  public final String getDescription() {
-    return m_description;
-  }
-
-  /**
-   * Sets the description of this element.
-   */
-  public final void setDescription(String description) {
-    m_description = description;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if given {@link AttributesProvider} has attribute with value "true",
-   *         or return <code>defaultValue</code> if there are no such attribute.
-   */
-  protected static boolean getBoolean(AttributesProvider attributes,
-      String attribute,
-      boolean defaultValue) {
-    String text = attributes.getAttribute(attribute);
-    if (text != null) {
-      return "true".equals(text);
-    }
-    return defaultValue;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final int hashCode() {
+		return m_id.hashCode();
+	}
+
+	@Override
+	public final boolean equals(Object obj) {
+		if (obj == this) {
+			return true;
+		}
+		if (obj instanceof AbstractElementInfo) {
+			AbstractElementInfo element = (AbstractElementInfo) obj;
+			return m_id.equals(element.m_id);
+		}
+		return false;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Id
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private String m_id;
+
+	/**
+	 * Sets the id of this element, can be used only one time.
+	 */
+	public final void setId(String id) {
+		Assert.isNull(m_id);
+		Assert.isNotNull(id);
+		m_id = id;
+	}
+
+	/**
+	 * @return the id of this element.
+	 */
+	public final String getId() {
+		return m_id;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Visible
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private boolean m_visible = true;
+
+	/**
+	 * @return <code>true</code> if this element is visible.
+	 */
+	public final boolean isVisible() {
+		return m_visible;
+	}
+
+	/**
+	 * Sets visibility flag.
+	 */
+	public final void setVisible(boolean visible) {
+		m_visible = visible;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Name
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private String m_name;
+
+	/**
+	 * @return the name of this element.
+	 */
+	public final String getName() {
+		if (m_name == null) {
+			return getNameDefault();
+		}
+		return m_name;
+	}
+
+	/**
+	 * @return the "raw" name, without default.
+	 */
+	protected String getNameRaw() {
+		return m_name;
+	}
+
+	/**
+	 * @return the default name, instead of <code>null</code>.
+	 */
+	protected String getNameDefault() {
+		return "(unknown)";
+	}
+
+	/**
+	 * Sets the name of this element.
+	 */
+	public final void setName(String name) {
+		m_name = name;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Description
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private String m_description;
+
+	/**
+	 * @return the description of this element.
+	 */
+	public final String getDescription() {
+		return m_description;
+	}
+
+	/**
+	 * Sets the description of this element.
+	 */
+	public final void setDescription(String description) {
+		m_description = description;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if given {@link AttributesProvider} has attribute with value "true",
+	 *         or return <code>defaultValue</code> if there are no such attribute.
+	 */
+	protected static boolean getBoolean(AttributesProvider attributes,
+			String attribute,
+			boolean defaultValue) {
+		String text = attributes.getAttribute(attribute);
+		if (text != null) {
+			return "true".equals(text);
+		}
+		return defaultValue;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/palette/model/CategoryInfo.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/palette/model/CategoryInfo.java
index b988c20a9..3ff8efa7c 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/palette/model/CategoryInfo.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/palette/model/CategoryInfo.java
@@ -24,119 +24,119 @@
  * @coverage core.editor.palette
  */
 public final class CategoryInfo extends AbstractElementInfo {
-  private final List<EntryInfo> m_entries = Lists.newArrayList();
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CategoryInfo() {
-  }
-
-  public CategoryInfo(String id) {
-    setId(id);
-  }
-
-  public CategoryInfo(AttributesProvider attributes) {
-    // id
-    {
-      String id = attributes.getAttribute("id");
-      Assert.isNotNull(id);
-      setId(id);
-    }
-    // name
-    {
-      String name = attributes.getAttribute("name");
-      Assert.isNotNull(name);
-      setName(name);
-    }
-    // description
-    setDescription(attributes.getAttribute("description"));
-    // state
-    setVisible(getBoolean(attributes, "visible", true));
-    setOpen(getBoolean(attributes, "open", true));
-    m_optional = getBoolean(attributes, "optional", false);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    return "Category(id='" + getId() + "', name='" + getName() + "', entries=" + m_entries + ")";
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Entries
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link List} of {@link EntryInfo}.
-   */
-  public List<EntryInfo> getEntries() {
-    return m_entries;
-  }
-
-  /**
-   * Adds given {@link EntryInfo}.
-   */
-  public void addEntry(EntryInfo entry) {
-    addEntry(m_entries.size(), entry);
-  }
-
-  /**
-   * Adds given {@link EntryInfo}.
-   */
-  public void addEntry(int index, EntryInfo entry) {
-    m_entries.add(index, entry);
-    entry.setCategory(this);
-  }
-
-  /**
-   * Removes given {@link EntryInfo}.
-   */
-  public void removeEntry(EntryInfo entry) {
-    m_entries.remove(entry);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Open
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private boolean m_open;
-
-  /**
-   * @return <code>true</code> if this category in open.
-   */
-  public boolean isOpen() {
-    return m_open;
-  }
-
-  /**
-   * Sets flag if this category in open.
-   */
-  public void setOpen(boolean open) {
-    m_open = open;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Optional
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private boolean m_optional;
-
-  /**
-   * @return <code>true</code> if this category is optional, i.e. for some additional set of
-   *         components and should be hidden is these components are not available. Currently we
-   *         check this by checking that category is empty.
-   */
-  public boolean isOptional() {
-    return m_optional;
-  }
+	private final List<EntryInfo> m_entries = Lists.newArrayList();
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CategoryInfo() {
+	}
+
+	public CategoryInfo(String id) {
+		setId(id);
+	}
+
+	public CategoryInfo(AttributesProvider attributes) {
+		// id
+		{
+			String id = attributes.getAttribute("id");
+			Assert.isNotNull(id);
+			setId(id);
+		}
+		// name
+		{
+			String name = attributes.getAttribute("name");
+			Assert.isNotNull(name);
+			setName(name);
+		}
+		// description
+		setDescription(attributes.getAttribute("description"));
+		// state
+		setVisible(getBoolean(attributes, "visible", true));
+		setOpen(getBoolean(attributes, "open", true));
+		m_optional = getBoolean(attributes, "optional", false);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		return "Category(id='" + getId() + "', name='" + getName() + "', entries=" + m_entries + ")";
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Entries
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link List} of {@link EntryInfo}.
+	 */
+	public List<EntryInfo> getEntries() {
+		return m_entries;
+	}
+
+	/**
+	 * Adds given {@link EntryInfo}.
+	 */
+	public void addEntry(EntryInfo entry) {
+		addEntry(m_entries.size(), entry);
+	}
+
+	/**
+	 * Adds given {@link EntryInfo}.
+	 */
+	public void addEntry(int index, EntryInfo entry) {
+		m_entries.add(index, entry);
+		entry.setCategory(this);
+	}
+
+	/**
+	 * Removes given {@link EntryInfo}.
+	 */
+	public void removeEntry(EntryInfo entry) {
+		m_entries.remove(entry);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Open
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private boolean m_open;
+
+	/**
+	 * @return <code>true</code> if this category in open.
+	 */
+	public boolean isOpen() {
+		return m_open;
+	}
+
+	/**
+	 * Sets flag if this category in open.
+	 */
+	public void setOpen(boolean open) {
+		m_open = open;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Optional
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private boolean m_optional;
+
+	/**
+	 * @return <code>true</code> if this category is optional, i.e. for some additional set of
+	 *         components and should be hidden is these components are not available. Currently we
+	 *         check this by checking that category is empty.
+	 */
+	public boolean isOptional() {
+		return m_optional;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/palette/model/EntryInfo.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/palette/model/EntryInfo.java
index c4a3b1877..a483c6679 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/palette/model/EntryInfo.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/palette/model/EntryInfo.java
@@ -25,90 +25,90 @@
  * @coverage core.editor.palette
  */
 public abstract class EntryInfo extends AbstractElementInfo {
-  protected IEditPartViewer m_editPartViewer;
-  protected JavaInfo m_rootJavaInfo;
-  protected AstEditor m_editor;
-  protected IJavaProject m_javaProject;
-  protected EditorState m_state;
+	protected IEditPartViewer m_editPartViewer;
+	protected JavaInfo m_rootJavaInfo;
+	protected AstEditor m_editor;
+	protected IJavaProject m_javaProject;
+	protected EditorState m_state;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Life cycle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Initializes this {@link EntryInfo}, prepares it for future calls of methods.
-   *
-   * @return <code>true</code> if this {@link EntryInfo} is successfully activated.
-   */
-  public boolean initialize(IEditPartViewer editPartViewer, JavaInfo rootJavaInfo) {
-    m_editPartViewer = editPartViewer;
-    m_rootJavaInfo = rootJavaInfo;
-    m_editor = m_rootJavaInfo.getEditor();
-    m_javaProject = m_editor.getJavaProject();
-    m_state = EditorState.get(m_editor);
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Life cycle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Initializes this {@link EntryInfo}, prepares it for future calls of methods.
+	 *
+	 * @return <code>true</code> if this {@link EntryInfo} is successfully activated.
+	 */
+	public boolean initialize(IEditPartViewer editPartViewer, JavaInfo rootJavaInfo) {
+		m_editPartViewer = editPartViewer;
+		m_rootJavaInfo = rootJavaInfo;
+		m_editor = m_rootJavaInfo.getEditor();
+		m_javaProject = m_editor.getJavaProject();
+		m_state = EditorState.get(m_editor);
+		return true;
+	}
 
-  /**
-   * Sometimes we want to show entry, but don't allow to select it.
-   *
-   * @return <code>true</code> if this {@link EntryInfo} is enabled.
-   */
-  public boolean isEnabled() {
-    return true;
-  }
+	/**
+	 * Sometimes we want to show entry, but don't allow to select it.
+	 *
+	 * @return <code>true</code> if this {@link EntryInfo} is enabled.
+	 */
+	public boolean isEnabled() {
+		return true;
+	}
 
-  /**
-   * @return the icon for visual.
-   */
-  public abstract Image getIcon();
+	/**
+	 * @return the icon for visual.
+	 */
+	public abstract Image getIcon();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Activation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Performs operation when user selects this entry on palette.
-   *
-   * @param reload
-   *          is <code>true</code> if entry should be automatically reloaded after successful using.
-   *
-   * @return <code>true</code> if entry was successfully activated.
-   */
-  public abstract boolean activate(boolean reload);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Activation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Performs operation when user selects this entry on palette.
+	 *
+	 * @param reload
+	 *          is <code>true</code> if entry should be automatically reloaded after successful using.
+	 *
+	 * @return <code>true</code> if entry was successfully activated.
+	 */
+	public abstract boolean activate(boolean reload);
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link IPaletteSite} for palette of this entry.
-   */
-  protected final IPaletteSite getSite() {
-    return IPaletteSite.Helper.getSite(m_rootJavaInfo);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link IPaletteSite} for palette of this entry.
+	 */
+	protected final IPaletteSite getSite() {
+		return IPaletteSite.Helper.getSite(m_rootJavaInfo);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Category
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private CategoryInfo m_category;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Category
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private CategoryInfo m_category;
 
-  /**
-   * @return the parent {@link CategoryInfo}.
-   */
-  public CategoryInfo getCategory() {
-    return m_category;
-  }
+	/**
+	 * @return the parent {@link CategoryInfo}.
+	 */
+	public CategoryInfo getCategory() {
+		return m_category;
+	}
 
-  /**
-   * Sets the parent {@link CategoryInfo}.
-   */
-  void setCategory(CategoryInfo category) {
-    m_category = category;
-  }
+	/**
+	 * Sets the parent {@link CategoryInfo}.
+	 */
+	void setCategory(CategoryInfo category) {
+		m_category = category;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/palette/model/IPaletteSite.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/palette/model/IPaletteSite.java
index e26de028c..5d87328fd 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/palette/model/IPaletteSite.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/palette/model/IPaletteSite.java
@@ -22,77 +22,77 @@
  * @coverage core.editor.palette
  */
 public interface IPaletteSite {
-  /**
-   * @return the {@link Shell} that contains palette widget.
-   */
-  Shell getShell();
+	/**
+	 * @return the {@link Shell} that contains palette widget.
+	 */
+	Shell getShell();
 
-  /**
-   * @return the {@link PaletteInfo} displayed currently in this {@link IPaletteSite}.
-   */
-  PaletteInfo getPalette();
+	/**
+	 * @return the {@link PaletteInfo} displayed currently in this {@link IPaletteSite}.
+	 */
+	PaletteInfo getPalette();
 
-  /**
-   * Adds some external palette {@link Command}.
-   */
-  void addCommand(Command command);
+	/**
+	 * Adds some external palette {@link Command}.
+	 */
+	void addCommand(Command command);
 
-  /**
-   * Opens palette editing dialog.<br>
-   * Note, that after this method {@link #getPalette()} may return different instance of
-   * {@link PaletteInfo} .
-   */
-  void editPalette();
+	/**
+	 * Opens palette editing dialog.<br>
+	 * Note, that after this method {@link #getPalette()} may return different instance of
+	 * {@link PaletteInfo} .
+	 */
+	void editPalette();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Helper
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Helper for accessing {@link IPaletteSite}.
-   *
-   * @author scheglov_ke
-   */
-  public static class Helper {
-    private static final String KEY = "key_IPaletteContainer";
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Helper
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Helper for accessing {@link IPaletteSite}.
+	 *
+	 * @author scheglov_ke
+	 */
+	public static class Helper {
+		private static final String KEY = "key_IPaletteContainer";
 
-    /**
-     * @return {@link IPaletteSite} for given {@link ObjectInfo}.
-     */
-    public static IPaletteSite getSite(ObjectInfo objectInfo) {
-      return (IPaletteSite) objectInfo.getRoot().getArbitraryValue(KEY);
-    }
+		/**
+		 * @return {@link IPaletteSite} for given {@link ObjectInfo}.
+		 */
+		public static IPaletteSite getSite(ObjectInfo objectInfo) {
+			return (IPaletteSite) objectInfo.getRoot().getArbitraryValue(KEY);
+		}
 
-    /**
-     * Sets the {@link IPaletteSite} for given {@link ObjectInfo}.
-     */
-    public static void setSite(ObjectInfo objectInfo, IPaletteSite site) {
-      objectInfo.getRoot().putArbitraryValue(KEY, site);
-    }
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Empty implementation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static class Empty implements IPaletteSite {
-    @Override
-    public void addCommand(Command command) {
-    }
+		/**
+		 * Sets the {@link IPaletteSite} for given {@link ObjectInfo}.
+		 */
+		public static void setSite(ObjectInfo objectInfo, IPaletteSite site) {
+			objectInfo.getRoot().putArbitraryValue(KEY, site);
+		}
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Empty implementation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static class Empty implements IPaletteSite {
+		@Override
+		public void addCommand(Command command) {
+		}
 
-    @Override
-    public void editPalette() {
-    }
+		@Override
+		public void editPalette() {
+		}
 
-    @Override
-    public PaletteInfo getPalette() {
-      return null;
-    }
+		@Override
+		public PaletteInfo getPalette() {
+			return null;
+		}
 
-    @Override
-    public Shell getShell() {
-      return null;
-    }
-  }
+		@Override
+		public Shell getShell() {
+			return null;
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/palette/model/PaletteInfo.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/palette/model/PaletteInfo.java
index 4d9e1ebf4..bb94e14de 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/palette/model/PaletteInfo.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/palette/model/PaletteInfo.java
@@ -25,92 +25,92 @@
  * @coverage core.editor.palette
  */
 public final class PaletteInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    return StringUtils.join(m_categories.iterator(), ",\n\t");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		return StringUtils.join(m_categories.iterator(), ",\n\t");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Categories
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final List<CategoryInfo> m_categories = Lists.newArrayList();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Categories
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final List<CategoryInfo> m_categories = Lists.newArrayList();
 
-  /**
-   * @return the {@link List} of {@link CategoryInfo}.
-   */
-  public List<CategoryInfo> getCategories() {
-    return m_categories;
-  }
+	/**
+	 * @return the {@link List} of {@link CategoryInfo}.
+	 */
+	public List<CategoryInfo> getCategories() {
+		return m_categories;
+	}
 
-  /**
-   * Adds new {@link CategoryInfo}.
-   */
-  public void addCategory(CategoryInfo category) {
-    Assert.isLegal(
-        !m_categories.contains(category),
-        "Duplicate category with id = " + category.getId());
-    m_categories.add(category);
-  }
+	/**
+	 * Adds new {@link CategoryInfo}.
+	 */
+	public void addCategory(CategoryInfo category) {
+		Assert.isLegal(
+				!m_categories.contains(category),
+				"Duplicate category with id = " + category.getId());
+		m_categories.add(category);
+	}
 
-  public void moveCategory(String id, String nextId) {
-    // don't move before itself, this is no-op
-    if (id.equals(nextId)) {
-      return;
-    }
-    // prepare category to move
-    CategoryInfo category = getCategory(id);
-    if (category == null) {
-      return;
-    }
-    // remove source
-    m_categories.remove(category);
-    // add to new location
-    CategoryInfo nextCategory = getCategory(nextId);
-    if (nextCategory != null) {
-      int index = m_categories.indexOf(nextCategory);
-      m_categories.add(index, category);
-    } else {
-      m_categories.add(category);
-    }
-  }
+	public void moveCategory(String id, String nextId) {
+		// don't move before itself, this is no-op
+		if (id.equals(nextId)) {
+			return;
+		}
+		// prepare category to move
+		CategoryInfo category = getCategory(id);
+		if (category == null) {
+			return;
+		}
+		// remove source
+		m_categories.remove(category);
+		// add to new location
+		CategoryInfo nextCategory = getCategory(nextId);
+		if (nextCategory != null) {
+			int index = m_categories.indexOf(nextCategory);
+			m_categories.add(index, category);
+		} else {
+			m_categories.add(category);
+		}
+	}
 
-  /**
-   * @return the {@link CategoryInfo} with given id.
-   */
-  public CategoryInfo getCategory(String id) {
-    for (CategoryInfo category : m_categories) {
-      if (category.getId().equals(id)) {
-        return category;
-      }
-    }
-    // not found
-    return null;
-  }
+	/**
+	 * @return the {@link CategoryInfo} with given id.
+	 */
+	public CategoryInfo getCategory(String id) {
+		for (CategoryInfo category : m_categories) {
+			if (category.getId().equals(id)) {
+				return category;
+			}
+		}
+		// not found
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link EntryInfo} with given <code>id</code> or <code>null</code> if not found.
-   */
-  public EntryInfo getEntry(String id) {
-    for (CategoryInfo category : m_categories) {
-      for (EntryInfo entry : category.getEntries()) {
-        if (entry.getId().equals(id)) {
-          return entry;
-        }
-      }
-    }
-    // not found
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link EntryInfo} with given <code>id</code> or <code>null</code> if not found.
+	 */
+	public EntryInfo getEntry(String id) {
+		for (CategoryInfo category : m_categories) {
+			for (EntryInfo entry : category.getEntries()) {
+				if (entry.getId().equals(id)) {
+					return entry;
+				}
+			}
+		}
+		// not found
+		return null;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/palette/model/entry/ChooseComponentEntryInfo.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/palette/model/entry/ChooseComponentEntryInfo.java
index 71586c7f8..203e9daed 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/palette/model/entry/ChooseComponentEntryInfo.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/palette/model/entry/ChooseComponentEntryInfo.java
@@ -40,109 +40,109 @@
  * @coverage core.editor.palette
  */
 public final class ChooseComponentEntryInfo extends ToolEntryInfo {
-  private static final Image ICON = DesignerPlugin.getImage("palette/ChooseComponent.gif");
+	private static final Image ICON = DesignerPlugin.getImage("palette/ChooseComponent.gif");
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ChooseComponentEntryInfo() {
-    setName(Messages.ChooseComponentEntryInfo_name);
-    setDescription(Messages.ChooseComponentEntryInfo_description);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ChooseComponentEntryInfo() {
+		setName(Messages.ChooseComponentEntryInfo_name);
+		setDescription(Messages.ChooseComponentEntryInfo_description);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // EntryInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Image getIcon() {
-    return ICON;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// EntryInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Image getIcon() {
+		return ICON;
+	}
 
-  @Override
-  public Tool createTool() throws Exception {
-    Shell parentShell = IPaletteSite.Helper.getSite(m_rootJavaInfo).getShell();
-    String componentClassName = JdtUiUtils.selectTypeName(parentShell, m_javaProject);
-    if (componentClassName != null) {
-      ComponentEntryInfo componentEntry = new ComponentEntryInfo();
-      // configure component entry
-      {
-        componentEntry.setId("custom_" + System.currentTimeMillis());
-        componentEntry.setName(CodeUtils.getShortClass(componentClassName));
-        componentEntry.setDescription(MessageFormat.format(
-            Messages.ChooseComponentEntryInfo_newComponentDescription,
-            componentClassName));
-        componentEntry.setComponentClassName(componentClassName);
-      }
-      // always add
-      addChosenComponent(componentEntry);
-      // try to initialize
-      if (componentEntry.initialize(m_editPartViewer, m_rootJavaInfo)) {
-        return componentEntry.createTool();
-      } else {
-        boolean shouldReparse =
-            MessageDialog.openQuestion(
-                DesignerPlugin.getShell(),
-                Messages.ChooseComponentEntryInfo_unableToLoadTest,
-                MessageFormat.format(
-                    Messages.ChooseComponentEntryInfo_unableToLoadMessage,
-                    componentClassName));
-        if (shouldReparse) {
-          IDesignPageSite.Helper.getSite(m_rootJavaInfo).reparse();
-        }
-      }
-    }
-    return null;
-  }
+	@Override
+	public Tool createTool() throws Exception {
+		Shell parentShell = IPaletteSite.Helper.getSite(m_rootJavaInfo).getShell();
+		String componentClassName = JdtUiUtils.selectTypeName(parentShell, m_javaProject);
+		if (componentClassName != null) {
+			ComponentEntryInfo componentEntry = new ComponentEntryInfo();
+			// configure component entry
+			{
+				componentEntry.setId("custom_" + System.currentTimeMillis());
+				componentEntry.setName(CodeUtils.getShortClass(componentClassName));
+				componentEntry.setDescription(MessageFormat.format(
+						Messages.ChooseComponentEntryInfo_newComponentDescription,
+						componentClassName));
+				componentEntry.setComponentClassName(componentClassName);
+			}
+			// always add
+			addChosenComponent(componentEntry);
+			// try to initialize
+			if (componentEntry.initialize(m_editPartViewer, m_rootJavaInfo)) {
+				return componentEntry.createTool();
+			} else {
+				boolean shouldReparse =
+						MessageDialog.openQuestion(
+								DesignerPlugin.getShell(),
+								Messages.ChooseComponentEntryInfo_unableToLoadTest,
+								MessageFormat.format(
+										Messages.ChooseComponentEntryInfo_unableToLoadMessage,
+										componentClassName));
+				if (shouldReparse) {
+					IDesignPageSite.Helper.getSite(m_rootJavaInfo).reparse();
+				}
+			}
+		}
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds chosen {@link ComponentEntryInfo} to the palette.
-   */
-  private void addChosenComponent(ComponentEntryInfo entry) {
-    if (DesignerPlugin.getPreferences().getBoolean(IPreferenceConstants.P_COMMON_PALETTE_ADD_CHOSEN)) {
-      CategoryInfo category = getCustomCategory();
-      Command command =
-          new ComponentAddCommand(entry.getId(),
-              entry.getName(),
-              entry.getDescription(),
-              true,
-              entry.getClassName(),
-              category);
-      getSite().addCommand(command);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds chosen {@link ComponentEntryInfo} to the palette.
+	 */
+	private void addChosenComponent(ComponentEntryInfo entry) {
+		if (DesignerPlugin.getPreferences().getBoolean(IPreferenceConstants.P_COMMON_PALETTE_ADD_CHOSEN)) {
+			CategoryInfo category = getCustomCategory();
+			Command command =
+					new ComponentAddCommand(entry.getId(),
+							entry.getName(),
+							entry.getDescription(),
+							true,
+							entry.getClassName(),
+							category);
+			getSite().addCommand(command);
+		}
+	}
 
-  /**
-   * @return the {@link CategoryInfo} with name "Custom", existing one, or newly added.
-   */
-  private CategoryInfo getCustomCategory() {
-    PaletteInfo palette = getSite().getPalette();
-    // try to find "Custom" category
-    List<CategoryInfo> categories = palette.getCategories();
-    for (CategoryInfo category : categories) {
-      if ("Custom".equals(category.getName())) {
-        return category;
-      }
-    }
-    // no "Custom" category, add it
-    {
-      getSite().addCommand(
-          new CategoryAddCommand("category_" + System.currentTimeMillis(),
-              "Custom",
-              Messages.ChooseComponentEntryInfo_customCategoryDescription,
-              true,
-              true,
-              null));
-    }
-    // now, after command, we should be able to find "Custom"
-    return getCustomCategory();
-  }
+	/**
+	 * @return the {@link CategoryInfo} with name "Custom", existing one, or newly added.
+	 */
+	private CategoryInfo getCustomCategory() {
+		PaletteInfo palette = getSite().getPalette();
+		// try to find "Custom" category
+		List<CategoryInfo> categories = palette.getCategories();
+		for (CategoryInfo category : categories) {
+			if ("Custom".equals(category.getName())) {
+				return category;
+			}
+		}
+		// no "Custom" category, add it
+		{
+			getSite().addCommand(
+					new CategoryAddCommand("category_" + System.currentTimeMillis(),
+							"Custom",
+							Messages.ChooseComponentEntryInfo_customCategoryDescription,
+							true,
+							true,
+							null));
+		}
+		// now, after command, we should be able to find "Custom"
+		return getCustomCategory();
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/palette/model/entry/ComponentEntryInfo.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/palette/model/entry/ComponentEntryInfo.java
index c5ba1c2a8..e4c0c8080 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/palette/model/entry/ComponentEntryInfo.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/palette/model/entry/ComponentEntryInfo.java
@@ -69,396 +69,396 @@
  * @coverage core.editor.palette
  */
 public final class ComponentEntryInfo extends ToolEntryInfo {
-  public static final String KEY_SIMULATE_PRESENTATION = "ComponentEntryInfo.simulatePresentation";
-  public static final Image DEFAULT_ICON = DesignerPlugin.getImage("palette/Object.png");
-  private String m_className;
-  private String m_creationId;
-  private String m_enabledScript;
-  private Image m_icon;
+	public static final String KEY_SIMULATE_PRESENTATION = "ComponentEntryInfo.simulatePresentation";
+	public static final Image DEFAULT_ICON = DesignerPlugin.getImage("palette/Object.png");
+	private String m_className;
+	private String m_creationId;
+	private String m_enabledScript;
+	private Image m_icon;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ComponentEntryInfo() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ComponentEntryInfo() {
+	}
 
-  public ComponentEntryInfo(CategoryInfo categoryInfo, IConfigurationElement element)
-      throws Exception {
-    this(categoryInfo, AttributesProviders.get(element));
-    m_icon = ExternalFactoriesHelper.getImage(element, "icon");
-    addLibraries(element);
-  }
+	public ComponentEntryInfo(CategoryInfo categoryInfo, IConfigurationElement element)
+			throws Exception {
+		this(categoryInfo, AttributesProviders.get(element));
+		m_icon = ExternalFactoriesHelper.getImage(element, "icon");
+		addLibraries(element);
+	}
 
-  public ComponentEntryInfo(CategoryInfo categoryInfo, AttributesProvider attributes) {
-    // class
-    {
-      m_className = attributes.getAttribute("class");
-      Assert.isNotNull(m_className, "Component must have 'class' attribute.");
-    }
-    // creationId
-    {
-      m_creationId = attributes.getAttribute("creationId");
-    }
-    // id
-    {
-      String id = attributes.getAttribute("id");
-      if (id == null) {
-        id = categoryInfo.getId() + " " + m_className;
-        if (m_creationId != null) {
-          id += " " + m_creationId;
-        }
-      }
-      setId(id);
-    }
-    // other
-    setName(attributes.getAttribute("name"));
-    setDescription(attributes.getAttribute("description"));
-    setVisible(getBoolean(attributes, "visible", true));
-    m_enabledScript = attributes.getAttribute("enabled");
-  }
+	public ComponentEntryInfo(CategoryInfo categoryInfo, AttributesProvider attributes) {
+		// class
+		{
+			m_className = attributes.getAttribute("class");
+			Assert.isNotNull(m_className, "Component must have 'class' attribute.");
+		}
+		// creationId
+		{
+			m_creationId = attributes.getAttribute("creationId");
+		}
+		// id
+		{
+			String id = attributes.getAttribute("id");
+			if (id == null) {
+				id = categoryInfo.getId() + " " + m_className;
+				if (m_creationId != null) {
+					id += " " + m_creationId;
+				}
+			}
+			setId(id);
+		}
+		// other
+		setName(attributes.getAttribute("name"));
+		setDescription(attributes.getAttribute("description"));
+		setVisible(getBoolean(attributes, "visible", true));
+		m_enabledScript = attributes.getAttribute("enabled");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    return "Component(class='" + m_className + "')";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		return "Component(class='" + m_className + "')";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Creation id
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the "id" for {@link ConstructorCreationSupport}, may be <code>null</code>.
-   */
-  public String getCreationId() {
-    return m_creationId;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Creation id
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the "id" for {@link ConstructorCreationSupport}, may be <code>null</code>.
+	 */
+	public String getCreationId() {
+		return m_creationId;
+	}
 
-  /**
-   * Sets the "id" for {@link ConstructorCreationSupport}, may be <code>null</code>.
-   */
-  public void setCreationId(String creationId) {
-    m_creationId = creationId;
-  }
+	/**
+	 * Sets the "id" for {@link ConstructorCreationSupport}, may be <code>null</code>.
+	 */
+	public void setCreationId(String creationId) {
+		m_creationId = creationId;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Component class name
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the name of component class.
-   */
-  public String getClassName() {
-    return m_className;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Component class name
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the name of component class.
+	 */
+	public String getClassName() {
+		return m_className;
+	}
 
-  /**
-   * Sets the name of component class.
-   */
-  public void setComponentClassName(String componentClassName) {
-    m_className = componentClassName;
-  }
+	/**
+	 * Sets the name of component class.
+	 */
+	public void setComponentClassName(String componentClassName) {
+		m_className = componentClassName;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Libraries
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final List<LibraryInfo> m_libraries = Lists.newArrayList();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Libraries
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final List<LibraryInfo> m_libraries = Lists.newArrayList();
 
-  /**
-   * Adds new {@link LibraryInfo} to ensure.
-   */
-  private void addLibraries(IConfigurationElement componentElement) {
-    for (IConfigurationElement libraryElement : componentElement.getChildren("library")) {
-      m_libraries.add(new LibraryInfo(libraryElement));
-    }
-  }
+	/**
+	 * Adds new {@link LibraryInfo} to ensure.
+	 */
+	private void addLibraries(IConfigurationElement componentElement) {
+		for (IConfigurationElement libraryElement : componentElement.getChildren("library")) {
+			m_libraries.add(new LibraryInfo(libraryElement));
+		}
+	}
 
-  /**
-   * Ensures all {@link LibraryInfo}'s.
-   */
-  private void ensureLibraries() throws Exception {
-    for (LibraryInfo library : m_libraries) {
-      library.ensure(m_javaProject);
-    }
-  }
+	/**
+	 * Ensures all {@link LibraryInfo}'s.
+	 */
+	private void ensureLibraries() throws Exception {
+		for (LibraryInfo library : m_libraries) {
+			library.ensure(m_javaProject);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Name
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getNameDefault() {
-    return m_className;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Name
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getNameDefault() {
+		return m_className;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // EntryInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Class<?> m_class;
-  private ComponentPresentation m_presentation;
-  private ComponentDescription m_description;
-  private CreationDescription m_creation;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// EntryInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Class<?> m_class;
+	private ComponentPresentation m_presentation;
+	private ComponentDescription m_description;
+	private CreationDescription m_creation;
 
-  @Override
-  public boolean initialize(IEditPartViewer editPartViewer, JavaInfo rootJavaInfo) {
-    super.initialize(editPartViewer, rootJavaInfo);
-    // prepare presentation
-    if (!preparePresentation()) {
-      return false;
-    }
-    // updates
-    {
-      // update entry icon
-      if (m_icon == null) {
-        m_icon = m_presentation.getIcon();
-      }
-      // update entry name
-      if (getNameRaw() == null) {
-        setName(m_presentation.getName());
-      }
-      // update entry description text
-      {
-        String description = getDescription();
-        if (StringUtils.isEmpty(description) || m_className.equals(description)) {
-          setDescription(m_presentation.getDescription());
-        }
-      }
-    }
-    // OK, initialized
-    return true;
-  }
+	@Override
+	public boolean initialize(IEditPartViewer editPartViewer, JavaInfo rootJavaInfo) {
+		super.initialize(editPartViewer, rootJavaInfo);
+		// prepare presentation
+		if (!preparePresentation()) {
+			return false;
+		}
+		// updates
+		{
+			// update entry icon
+			if (m_icon == null) {
+				m_icon = m_presentation.getIcon();
+			}
+			// update entry name
+			if (getNameRaw() == null) {
+				setName(m_presentation.getName());
+			}
+			// update entry description text
+			{
+				String description = getDescription();
+				if (StringUtils.isEmpty(description) || m_className.equals(description)) {
+					setDescription(m_presentation.getDescription());
+				}
+			}
+		}
+		// OK, initialized
+		return true;
+	}
 
-  /**
-   * Prepares {@link #m_presentation}.
-   */
-  private boolean preparePresentation() {
-    if (m_rootJavaInfo.getArbitraryValue(KEY_SIMULATE_PRESENTATION) != null) {
-      m_presentation =
-          new ComponentPresentation("key", "toolkitId", m_className, m_className, (Image) null);
-      return true;
-    }
-    // check if Class exists (may be optimized by loading only "witness Class")
-    if (!hasClass()) {
-      return false;
-    }
-    try {
-      m_presentation =
-          ComponentPresentationHelper.getPresentation(m_editor, m_className, m_creationId);
-      if (m_presentation == null) {
-        String message =
-            MessageFormat.format("Palette: no presentation for component {0}", m_className);
-        m_state.addWarning(new EditorWarning(message));
-        return false;
-      }
-    } catch (Throwable e) {
-      String message = MessageFormat.format("Palette: can not load component {0}", m_className);
-      m_state.addWarning(new EditorWarning(message, e));
-      return false;
-    }
-    // done
-    return true;
-  }
+	/**
+	 * Prepares {@link #m_presentation}.
+	 */
+	private boolean preparePresentation() {
+		if (m_rootJavaInfo.getArbitraryValue(KEY_SIMULATE_PRESENTATION) != null) {
+			m_presentation =
+					new ComponentPresentation("key", "toolkitId", m_className, m_className, (Image) null);
+			return true;
+		}
+		// check if Class exists (may be optimized by loading only "witness Class")
+		if (!hasClass()) {
+			return false;
+		}
+		try {
+			m_presentation =
+					ComponentPresentationHelper.getPresentation(m_editor, m_className, m_creationId);
+			if (m_presentation == null) {
+				String message =
+						MessageFormat.format("Palette: no presentation for component {0}", m_className);
+				m_state.addWarning(new EditorWarning(message));
+				return false;
+			}
+		} catch (Throwable e) {
+			String message = MessageFormat.format("Palette: can not load component {0}", m_className);
+			m_state.addWarning(new EditorWarning(message, e));
+			return false;
+		}
+		// done
+		return true;
+	}
 
-  private boolean ensureDescriptions() {
-    if (m_creation == null) {
-      try {
-        m_class = m_state.getEditorLoader().loadClass(m_className);
-        m_description = ComponentDescriptionHelper.getDescription(m_editor, m_class);
-        m_creation = m_description.getCreation(m_creationId);
-      } catch (Throwable e) {
-        String message = MessageFormat.format("Palette: can not load component {0}", m_className);
-        m_state.addWarning(new EditorWarning(message, e));
-        return false;
-      }
-    }
-    // OK, can activate
-    return true;
-  }
+	private boolean ensureDescriptions() {
+		if (m_creation == null) {
+			try {
+				m_class = m_state.getEditorLoader().loadClass(m_className);
+				m_description = ComponentDescriptionHelper.getDescription(m_editor, m_class);
+				m_creation = m_description.getCreation(m_creationId);
+			} catch (Throwable e) {
+				String message = MessageFormat.format("Palette: can not load component {0}", m_className);
+				m_state.addWarning(new EditorWarning(message, e));
+				return false;
+			}
+		}
+		// OK, can activate
+		return true;
+	}
 
-  @Override
-  public boolean isEnabled() {
-    // try "enabled"
-    if (m_enabledScript != null) {
-      boolean enabled = ExecutionUtils.runObjectIgnore(new RunnableObjectEx<Boolean>() {
-        @Override
-        public Boolean runObject() throws Exception {
-          ClassLoader classLoader = JavaInfoUtils.getClassLoader(m_rootJavaInfo);
-          return (Boolean) ScriptUtils.evaluate(classLoader, m_enabledScript);
-        }
-      }, false);
-      if (!enabled) {
-        return false;
-      }
-    }
-    // OK
-    return true;
-  }
+	@Override
+	public boolean isEnabled() {
+		// try "enabled"
+		if (m_enabledScript != null) {
+			boolean enabled = ExecutionUtils.runObjectIgnore(new RunnableObjectEx<Boolean>() {
+				@Override
+				public Boolean runObject() throws Exception {
+					ClassLoader classLoader = JavaInfoUtils.getClassLoader(m_rootJavaInfo);
+					return (Boolean) ScriptUtils.evaluate(classLoader, m_enabledScript);
+				}
+			}, false);
+			if (!enabled) {
+				return false;
+			}
+		}
+		// OK
+		return true;
+	}
 
-  @Override
-  public Image getIcon() {
-    if (m_icon == null) {
-      return DEFAULT_ICON;
-    }
-    return m_icon;
-  }
+	@Override
+	public Image getIcon() {
+		if (m_icon == null) {
+			return DEFAULT_ICON;
+		}
+		return m_icon;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static Map<ClassLoader, Set<String>> m_contextHasClasses =
-      new WeakHashMap<ClassLoader, Set<String>>();
-  private static Map<ClassLoader, Set<String>> m_contextNoClasses =
-      new WeakHashMap<ClassLoader, Set<String>>();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static Map<ClassLoader, Set<String>> m_contextHasClasses =
+			new WeakHashMap<ClassLoader, Set<String>>();
+	private static Map<ClassLoader, Set<String>> m_contextNoClasses =
+			new WeakHashMap<ClassLoader, Set<String>>();
 
-  /**
-   * @return <code>true</code> if {@link #m_className} most probably exists in {@link ClassLoader}.
-   */
-  private boolean hasClass() {
-    // try to optimize
-    List<IConfigurationElement> elements =
-        ExternalFactoriesHelper.getElements(
-            "org.eclipse.wb.core.paletteComponentExists",
-            "component");
-    for (IConfigurationElement element : elements) {
-      String pkg = element.getAttribute("package");
-      if (pkg != null && m_className.startsWith(pkg)) {
-        // witness
-        {
-          String witnessClassName = element.getAttribute("witness");
-          if (witnessClassName != null) {
-            return hasClass0(witnessClassName);
-          }
-        }
-        // hasType
-        if (element.getAttribute("hasType") != null) {
-          return ProjectUtils.hasType(m_javaProject, m_className);
-        }
-        // always
-        if (element.getAttribute("always") != null) {
-          return true;
-        }
-      }
-    }
-    // check Class directly
-    return hasClass0(m_className);
-  }
+	/**
+	 * @return <code>true</code> if {@link #m_className} most probably exists in {@link ClassLoader}.
+	 */
+	private boolean hasClass() {
+		// try to optimize
+		List<IConfigurationElement> elements =
+				ExternalFactoriesHelper.getElements(
+						"org.eclipse.wb.core.paletteComponentExists",
+						"component");
+		for (IConfigurationElement element : elements) {
+			String pkg = element.getAttribute("package");
+			if (pkg != null && m_className.startsWith(pkg)) {
+				// witness
+				{
+					String witnessClassName = element.getAttribute("witness");
+					if (witnessClassName != null) {
+						return hasClass0(witnessClassName);
+					}
+				}
+				// hasType
+				if (element.getAttribute("hasType") != null) {
+					return ProjectUtils.hasType(m_javaProject, m_className);
+				}
+				// always
+				if (element.getAttribute("always") != null) {
+					return true;
+				}
+			}
+		}
+		// check Class directly
+		return hasClass0(m_className);
+	}
 
-  /**
-   * @return <code>true</code> if {@link Class} with given name exists in {@link ClassLoader}.
-   */
-  private boolean hasClass0(String className) {
-    ClassLoader classLoader = m_state.getEditorLoader();
-    // prepare "has" cache
-    Set<String> hasClasses;
-    {
-      hasClasses = m_contextHasClasses.get(classLoader);
-      if (hasClasses == null) {
-        hasClasses = Sets.newHashSet();
-        m_contextHasClasses.put(classLoader, hasClasses);
-      }
-    }
-    // may be we already know that there is such Class
-    if (hasClasses.contains(className)) {
-      return true;
-    }
-    // prepare "no" cache
-    Set<String> noClasses;
-    {
-      noClasses = m_contextNoClasses.get(classLoader);
-      if (noClasses == null) {
-        noClasses = Sets.newHashSet();
-        m_contextNoClasses.put(classLoader, noClasses);
-      }
-    }
-    // may be we already know that there are no such Class
-    if (noClasses.contains(className)) {
-      return false;
-    }
-    // ask ClassLoader
-    try {
-      classLoader.loadClass(className);
-      hasClasses.add(className);
-      return true;
-    } catch (ClassNotFoundException e) {
-    }
-    // remember that there are no such Class
-    noClasses.add(className);
-    return false;
-  }
+	/**
+	 * @return <code>true</code> if {@link Class} with given name exists in {@link ClassLoader}.
+	 */
+	private boolean hasClass0(String className) {
+		ClassLoader classLoader = m_state.getEditorLoader();
+		// prepare "has" cache
+		Set<String> hasClasses;
+		{
+			hasClasses = m_contextHasClasses.get(classLoader);
+			if (hasClasses == null) {
+				hasClasses = Sets.newHashSet();
+				m_contextHasClasses.put(classLoader, hasClasses);
+			}
+		}
+		// may be we already know that there is such Class
+		if (hasClasses.contains(className)) {
+			return true;
+		}
+		// prepare "no" cache
+		Set<String> noClasses;
+		{
+			noClasses = m_contextNoClasses.get(classLoader);
+			if (noClasses == null) {
+				noClasses = Sets.newHashSet();
+				m_contextNoClasses.put(classLoader, noClasses);
+			}
+		}
+		// may be we already know that there are no such Class
+		if (noClasses.contains(className)) {
+			return false;
+		}
+		// ask ClassLoader
+		try {
+			classLoader.loadClass(className);
+			hasClasses.add(className);
+			return true;
+		} catch (ClassNotFoundException e) {
+		}
+		// remember that there are no such Class
+		noClasses.add(className);
+		return false;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ToolEntryInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Tool createTool() throws Exception {
-    if (!ensureDescriptions()) {
-      return null;
-    }
-    if (ReflectionUtils.isAbstract(m_class) && !m_creation.hasTrueTag("createAnonymous")) {
-      Shell parentShell = IPaletteSite.Helper.getSite(m_rootJavaInfo).getShell();
-      UiUtils.openError(
-          parentShell,
-          Messages.ComponentEntryInfo_abstractTitle,
-          Messages.ComponentEntryInfo_abstractMessage);
-      return null;
-    }
-    // prepare generics
-    final Map<String, String> genericArguments = getTypeArguments();
-    if (genericArguments == null) {
-      return null;
-    }
-    // prepare factory
-    ICreationFactory factory = new ICreationFactory() {
-      private JavaInfo m_javaInfo;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ToolEntryInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Tool createTool() throws Exception {
+		if (!ensureDescriptions()) {
+			return null;
+		}
+		if (ReflectionUtils.isAbstract(m_class) && !m_creation.hasTrueTag("createAnonymous")) {
+			Shell parentShell = IPaletteSite.Helper.getSite(m_rootJavaInfo).getShell();
+			UiUtils.openError(
+					parentShell,
+					Messages.ComponentEntryInfo_abstractTitle,
+					Messages.ComponentEntryInfo_abstractMessage);
+			return null;
+		}
+		// prepare generics
+		final Map<String, String> genericArguments = getTypeArguments();
+		if (genericArguments == null) {
+			return null;
+		}
+		// prepare factory
+		ICreationFactory factory = new ICreationFactory() {
+			private JavaInfo m_javaInfo;
 
-      @Override
-      public void activate() throws Exception {
-        CreationSupport creationSupport = new ConstructorCreationSupport(m_creationId, true);
-        m_javaInfo = JavaInfoUtils.createJavaInfo(m_editor, m_description, creationSupport);
-        m_javaInfo.putTemplateArguments(genericArguments);
-        m_javaInfo = JavaInfoUtils.getWrapped(m_javaInfo);
-        m_javaInfo.putArbitraryValue(JavaInfo.FLAG_MANUAL_COMPONENT, Boolean.TRUE);
-      }
+			@Override
+			public void activate() throws Exception {
+				CreationSupport creationSupport = new ConstructorCreationSupport(m_creationId, true);
+				m_javaInfo = JavaInfoUtils.createJavaInfo(m_editor, m_description, creationSupport);
+				m_javaInfo.putTemplateArguments(genericArguments);
+				m_javaInfo = JavaInfoUtils.getWrapped(m_javaInfo);
+				m_javaInfo.putArbitraryValue(JavaInfo.FLAG_MANUAL_COMPONENT, Boolean.TRUE);
+			}
 
-      @Override
-      public Object getNewObject() {
-        return m_javaInfo;
-      }
-    };
-    // return tool
-    ensureLibraries();
-    return new CreationTool(factory);
-  }
+			@Override
+			public Object getNewObject() {
+				return m_javaInfo;
+			}
+		};
+		// return tool
+		ensureLibraries();
+		return new CreationTool(factory);
+	}
 
-  private Map<String, String> getTypeArguments() throws JavaModelException {
-    Map<String, TypeParameterDescription> typeParameters = m_creation.getTypeParameters();
-    if (typeParameters.isEmpty()) {
-      return ImmutableMap.of();
-    }
-    // open dialog
-    TypeParametersDialog dialog =
-        new TypeParametersDialog(DesignerPlugin.getShell(), m_javaProject, typeParameters);
-    if (dialog.open() == Window.OK) {
-      return dialog.getArguments();
-    } else {
-      return null;
-    }
-  }
+	private Map<String, String> getTypeArguments() throws JavaModelException {
+		Map<String, TypeParameterDescription> typeParameters = m_creation.getTypeParameters();
+		if (typeParameters.isEmpty()) {
+			return ImmutableMap.of();
+		}
+		// open dialog
+		TypeParametersDialog dialog =
+				new TypeParametersDialog(DesignerPlugin.getShell(), m_javaProject, typeParameters);
+		if (dialog.open() == Window.OK) {
+			return dialog.getArguments();
+		} else {
+			return null;
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/palette/model/entry/MarqueeSelectionToolEntryInfo.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/palette/model/entry/MarqueeSelectionToolEntryInfo.java
index 491aadb31..310070c04 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/palette/model/entry/MarqueeSelectionToolEntryInfo.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/palette/model/entry/MarqueeSelectionToolEntryInfo.java
@@ -25,30 +25,30 @@
  * @coverage core.editor.palette
  */
 public final class MarqueeSelectionToolEntryInfo extends ToolEntryInfo {
-  private static final Image ICON = DesignerPlugin.getImage("palette/MarqueeSelectionTool.png");
-  private final MarqueeSelectionTool m_marqueeSelectionTool = new MarqueeSelectionTool();
+	private static final Image ICON = DesignerPlugin.getImage("palette/MarqueeSelectionTool.png");
+	private final MarqueeSelectionTool m_marqueeSelectionTool = new MarqueeSelectionTool();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public MarqueeSelectionToolEntryInfo() {
-    setName(Messages.MarqueeSelectionToolEntryInfo_name);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public MarqueeSelectionToolEntryInfo() {
+		setName(Messages.MarqueeSelectionToolEntryInfo_name);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // EntryInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Image getIcon() {
-    return ICON;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// EntryInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Image getIcon() {
+		return ICON;
+	}
 
-  @Override
-  public Tool createTool() throws Exception {
-    return m_marqueeSelectionTool;
-  }
+	@Override
+	public Tool createTool() throws Exception {
+		return m_marqueeSelectionTool;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/palette/model/entry/SelectionToolEntryInfo.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/palette/model/entry/SelectionToolEntryInfo.java
index 3181d2428..c260377ae 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/palette/model/entry/SelectionToolEntryInfo.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/palette/model/entry/SelectionToolEntryInfo.java
@@ -26,30 +26,30 @@
  * @coverage core.editor.palette
  */
 public class SelectionToolEntryInfo extends ToolEntryInfo implements IDefaultEntryInfo {
-  private static final Image ICON = DesignerPlugin.getImage("palette/SelectionTool.gif");
-  private final SelectionTool m_selectionTool = new SelectionTool();
+	private static final Image ICON = DesignerPlugin.getImage("palette/SelectionTool.gif");
+	private final SelectionTool m_selectionTool = new SelectionTool();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SelectionToolEntryInfo() {
-    setName(Messages.SelectionToolEntryInfo_name);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SelectionToolEntryInfo() {
+		setName(Messages.SelectionToolEntryInfo_name);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // EntryInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Image getIcon() {
-    return ICON;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// EntryInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Image getIcon() {
+		return ICON;
+	}
 
-  @Override
-  public Tool createTool() throws Exception {
-    return m_selectionTool;
-  }
+	@Override
+	public Tool createTool() throws Exception {
+		return m_selectionTool;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/palette/model/entry/TabOrderToolEntryInfo.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/palette/model/entry/TabOrderToolEntryInfo.java
index 85b2102ac..c93632844 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/palette/model/entry/TabOrderToolEntryInfo.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/palette/model/entry/TabOrderToolEntryInfo.java
@@ -28,37 +28,37 @@
  * @coverage core.editor.palette
  */
 public final class TabOrderToolEntryInfo extends ToolEntryInfo {
-  private static final Image ICON = DesignerPlugin.getImage("palette/tab_order.gif");
+	private static final Image ICON = DesignerPlugin.getImage("palette/tab_order.gif");
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public TabOrderToolEntryInfo() {
-    setName(Messages.TabOrderToolEntryInfo_name);
-    setDescription(Messages.TabOrderToolEntryInfo_description);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public TabOrderToolEntryInfo() {
+		setName(Messages.TabOrderToolEntryInfo_name);
+		setDescription(Messages.TabOrderToolEntryInfo_description);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // EntryInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Tool createTool() throws Exception {
-    List<EditPart> selectedParts = m_editPartViewer.getSelectedEditParts();
-    if (selectedParts.size() == 1) {
-      EditPart editPart = selectedParts.get(0);
-      if (TabOrderTool.hasContainerRole(editPart)) {
-        return new TabOrderTool(editPart);
-      }
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// EntryInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Tool createTool() throws Exception {
+		List<EditPart> selectedParts = m_editPartViewer.getSelectedEditParts();
+		if (selectedParts.size() == 1) {
+			EditPart editPart = selectedParts.get(0);
+			if (TabOrderTool.hasContainerRole(editPart)) {
+				return new TabOrderTool(editPart);
+			}
+		}
+		return null;
+	}
 
-  @Override
-  public Image getIcon() {
-    return ICON;
-  }
+	@Override
+	public Image getIcon() {
+		return ICON;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/palette/model/entry/ToolEntryInfo.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/palette/model/entry/ToolEntryInfo.java
index 4d420ac40..af7097116 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/palette/model/entry/ToolEntryInfo.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/palette/model/entry/ToolEntryInfo.java
@@ -23,35 +23,35 @@
  * @coverage core.editor.palette
  */
 public abstract class ToolEntryInfo extends EntryInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // EntryInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final boolean activate(final boolean reload) {
-    return ExecutionUtils.runObjectLog(new RunnableObjectEx<Boolean>() {
-      @Override
-      public Boolean runObject() throws Exception {
-        // prepare tool
-        Tool tool;
-        {
-          tool = createTool();
-          if (tool == null) {
-            return false;
-          }
-          tool.setUnloadWhenFinished(!reload);
-        }
-        // OK
-        m_editPartViewer.getEditDomain().setActiveTool(tool);
-        return true;
-      }
-    }, false);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// EntryInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final boolean activate(final boolean reload) {
+		return ExecutionUtils.runObjectLog(new RunnableObjectEx<Boolean>() {
+			@Override
+			public Boolean runObject() throws Exception {
+				// prepare tool
+				Tool tool;
+				{
+					tool = createTool();
+					if (tool == null) {
+						return false;
+					}
+					tool.setUnloadWhenFinished(!reload);
+				}
+				// OK
+				m_editPartViewer.getEditDomain().setActiveTool(tool);
+				return true;
+			}
+		}, false);
+	}
 
-  /**
-   * @return the {@link Tool} that should be set on activation, or <code>null</code> if no
-   *         {@link Tool} can be activated.
-   */
-  public abstract Tool createTool() throws Exception;
+	/**
+	 * @return the {@link Tool} that should be set on activation, or <code>null</code> if no
+	 *         {@link Tool} can be activated.
+	 */
+	public abstract Tool createTool() throws Exception;
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/eval/AstEvaluationEngine.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/eval/AstEvaluationEngine.java
index 41f8ae98a..e48a04aea 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/eval/AstEvaluationEngine.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/eval/AstEvaluationEngine.java
@@ -38,136 +38,136 @@
  * @coverage core.evaluation
  */
 public final class AstEvaluationEngine {
-  /**
-   * The value that means that {@link AstEvaluationEngine} can not evaluate given expression.
-   */
-  public static final Object UNKNOWN = new Object();
+	/**
+	 * The value that means that {@link AstEvaluationEngine} can not evaluate given expression.
+	 */
+	public static final Object UNKNOWN = new Object();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return value of given {@link Expression}.
-   * @throws DesignerException
-   *           if given expression can not be evaluated.
-   */
-  public static Object evaluate(final EvaluationContext context, final Expression expression)
-      throws Exception {
-    try {
-      return evaluate0(context, expression);
-    } catch (final Throwable e) {
-      Object result = ExecutionUtils.runObjectLog(new RunnableObjectEx<Object>() {
-        @Override
-        public Object runObject() throws Exception {
-          return context.evaluationFailed(expression, e);
-        }
-      }, UNKNOWN);
-      if (result != UNKNOWN) {
-        return result;
-      }
-      throw new Error(context.getSource(expression), e);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return value of given {@link Expression}.
+	 * @throws DesignerException
+	 *           if given expression can not be evaluated.
+	 */
+	public static Object evaluate(final EvaluationContext context, final Expression expression)
+			throws Exception {
+		try {
+			return evaluate0(context, expression);
+		} catch (final Throwable e) {
+			Object result = ExecutionUtils.runObjectLog(new RunnableObjectEx<Object>() {
+				@Override
+				public Object runObject() throws Exception {
+					return context.evaluationFailed(expression, e);
+				}
+			}, UNKNOWN);
+			if (result != UNKNOWN) {
+				return result;
+			}
+			throw new Error(context.getSource(expression), e);
+		}
+	}
 
-  /**
-   * Evaluates given {@link ClassInstanceCreation} directly, without asking other possible
-   * registered {@link IExpressionEvaluator}.
-   */
-  public static Object createClassInstanceCreationDirectly(EvaluationContext context,
-      ClassInstanceCreation creation) throws Exception {
-    ITypeBinding typeBinding = AstNodeUtils.getTypeBinding(creation);
-    String typeQualifiedName = AstNodeUtils.getFullyQualifiedName(typeBinding, true);
-    return new InvocationEvaluator().evaluate(context, creation, typeBinding, typeQualifiedName);
-  }
+	/**
+	 * Evaluates given {@link ClassInstanceCreation} directly, without asking other possible
+	 * registered {@link IExpressionEvaluator}.
+	 */
+	public static Object createClassInstanceCreationDirectly(EvaluationContext context,
+			ClassInstanceCreation creation) throws Exception {
+		ITypeBinding typeBinding = AstNodeUtils.getTypeBinding(creation);
+		String typeQualifiedName = AstNodeUtils.getFullyQualifiedName(typeBinding, true);
+		return new InvocationEvaluator().evaluate(context, creation, typeBinding, typeQualifiedName);
+	}
 
-  /**
-   * @param methodBinding
-   *          the {@link IMethodBinding} of constructor.
-   *
-   * @return the instance of anonymous {@link ClassInstanceCreation}, intercepting methods using
-   *         a default implementation.
-   * @see DefaultMethodInterceptor
-   */
-  public static Object createAnonymousInstance(EvaluationContext context,
-      IMethodBinding methodBinding,
-      Object[] argumentValues) throws Exception {
-    return InvocationEvaluator.createAnonymousInstance(
-        context,
-        methodBinding,
-        argumentValues);
-  }
+	/**
+	 * @param methodBinding
+	 *          the {@link IMethodBinding} of constructor.
+	 *
+	 * @return the instance of anonymous {@link ClassInstanceCreation}, intercepting methods using
+	 *         a default implementation.
+	 * @see DefaultMethodInterceptor
+	 */
+	public static Object createAnonymousInstance(EvaluationContext context,
+			IMethodBinding methodBinding,
+			Object[] argumentValues) throws Exception {
+		return InvocationEvaluator.createAnonymousInstance(
+				context,
+				methodBinding,
+				argumentValues);
+	}
 
-  /**
-   * @return stack trace for exception in user code.
-   */
-  public static String getUserStackTrace(Throwable e) {
-    e = DesignerExceptionUtils.getRootCause(e);
-    String stackTrace = ExceptionUtils.getStackTrace(e);
-    stackTrace = StringUtils.substringBefore(stackTrace, "at org.eclipse.wb.");
-    stackTrace = StringUtils.substringBefore(stackTrace, "at sun.reflect.");
-    stackTrace = StringUtils.stripEnd(stackTrace, null);
-    return stackTrace;
-  }
+	/**
+	 * @return stack trace for exception in user code.
+	 */
+	public static String getUserStackTrace(Throwable e) {
+		e = DesignerExceptionUtils.getRootCause(e);
+		String stackTrace = ExceptionUtils.getStackTrace(e);
+		stackTrace = StringUtils.substringBefore(stackTrace, "at org.eclipse.wb.");
+		stackTrace = StringUtils.substringBefore(stackTrace, "at sun.reflect.");
+		stackTrace = StringUtils.stripEnd(stackTrace, null);
+		return stackTrace;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Implementation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static Object evaluate0(EvaluationContext context, Expression expression)
-      throws Exception {
-    // try to evaluate "pure" expression
-    {
-      Object value = context.evaluate(expression);
-      if (value != UNKNOWN) {
-        context.evaluationSuccessful(expression, value);
-        return value;
-      }
-    }
-    // simple expression
-    if (expression instanceof NullLiteral) {
-      context.evaluationSuccessful(expression, null);
-      return null;
-    }
-    if (expression instanceof ParenthesizedExpression) {
-      ParenthesizedExpression parenthesizedExpression = (ParenthesizedExpression) expression;
-      Object value = evaluate(context, parenthesizedExpression.getExpression());
-      context.evaluationSuccessful(expression, value);
-      return value;
-    }
-    // use expression evaluators
-    {
-      // prepare type binding/name
-      ITypeBinding typeBinding = AstNodeUtils.getTypeBinding(expression);
-      String typeQualifiedName = AstNodeUtils.getFullyQualifiedName(typeBinding, false);
-      // temporary evaluators
-      for (IExpressionEvaluator evaluator : context.getEvaluators()) {
-        Object value = evaluator.evaluate(context, expression, typeBinding, typeQualifiedName);
-        if (value != UNKNOWN) {
-          context.evaluationSuccessful(expression, value);
-          return value;
-        }
-      }
-      // external evaluators
-      {
-        List<IExpressionEvaluator> evaluators =
-            ExternalFactoriesHelper.getElementsInstances(
-                IExpressionEvaluator.class,
-                "org.eclipse.wb.core.expressionEvaluators",
-                "evaluator");
-        for (IExpressionEvaluator evaluator : evaluators) {
-          Object value = evaluator.evaluate(context, expression, typeBinding, typeQualifiedName);
-          if (value != UNKNOWN) {
-            context.evaluationSuccessful(expression, value);
-            return value;
-          }
-        }
-      }
-    }
-    // unknown expression
-    throw new DesignerException(ICoreExceptionConstants.EVAL_UNKNOWN_EXPRESSION_TYPE,
-        context.getSource(expression));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Implementation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static Object evaluate0(EvaluationContext context, Expression expression)
+			throws Exception {
+		// try to evaluate "pure" expression
+		{
+			Object value = context.evaluate(expression);
+			if (value != UNKNOWN) {
+				context.evaluationSuccessful(expression, value);
+				return value;
+			}
+		}
+		// simple expression
+		if (expression instanceof NullLiteral) {
+			context.evaluationSuccessful(expression, null);
+			return null;
+		}
+		if (expression instanceof ParenthesizedExpression) {
+			ParenthesizedExpression parenthesizedExpression = (ParenthesizedExpression) expression;
+			Object value = evaluate(context, parenthesizedExpression.getExpression());
+			context.evaluationSuccessful(expression, value);
+			return value;
+		}
+		// use expression evaluators
+		{
+			// prepare type binding/name
+			ITypeBinding typeBinding = AstNodeUtils.getTypeBinding(expression);
+			String typeQualifiedName = AstNodeUtils.getFullyQualifiedName(typeBinding, false);
+			// temporary evaluators
+			for (IExpressionEvaluator evaluator : context.getEvaluators()) {
+				Object value = evaluator.evaluate(context, expression, typeBinding, typeQualifiedName);
+				if (value != UNKNOWN) {
+					context.evaluationSuccessful(expression, value);
+					return value;
+				}
+			}
+			// external evaluators
+			{
+				List<IExpressionEvaluator> evaluators =
+						ExternalFactoriesHelper.getElementsInstances(
+								IExpressionEvaluator.class,
+								"org.eclipse.wb.core.expressionEvaluators",
+								"evaluator");
+				for (IExpressionEvaluator evaluator : evaluators) {
+					Object value = evaluator.evaluate(context, expression, typeBinding, typeQualifiedName);
+					if (value != UNKNOWN) {
+						context.evaluationSuccessful(expression, value);
+						return value;
+					}
+				}
+			}
+		}
+		// unknown expression
+		throw new DesignerException(ICoreExceptionConstants.EVAL_UNKNOWN_EXPRESSION_TYPE,
+				context.getSource(expression));
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/eval/DefaultMethodInterceptor.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/eval/DefaultMethodInterceptor.java
index 8cad46b70..3602ba7c6 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/eval/DefaultMethodInterceptor.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/eval/DefaultMethodInterceptor.java
@@ -20,10 +20,10 @@
  * @coverage core.evaluation
  */
 public class DefaultMethodInterceptor implements InvocationHandler {
-  public static final InvocationHandlerAdapter INSTANCE = InvocationHandlerAdapter.of(new DefaultMethodInterceptor());
+	public static final InvocationHandlerAdapter INSTANCE = InvocationHandlerAdapter.of(new DefaultMethodInterceptor());
 
-  @Override
-  public Object invoke(Object obj, Method method, Object[] args) throws Throwable {
-      return ReflectionUtils.getDefaultValue(method.getReturnType());
-  }
+	@Override
+	public Object invoke(Object obj, Method method, Object[] args) throws Throwable {
+		return ReflectionUtils.getDefaultValue(method.getReturnType());
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/eval/EvaluationContext.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/eval/EvaluationContext.java
index 3c98f8777..166c62043 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/eval/EvaluationContext.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/eval/EvaluationContext.java
@@ -33,156 +33,156 @@
  * @coverage core.evaluation
  */
 public class EvaluationContext {
-  private final ClassLoader m_classLoader;
-  private final ExecutionFlowDescription m_flowDescription;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public EvaluationContext(ClassLoader classLoader, ExecutionFlowDescription flowDescription) {
-    Assert.isNotNull(classLoader);
-    Assert.isNotNull(flowDescription);
-    m_classLoader = classLoader;
-    m_flowDescription = flowDescription;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link ClassLoader} that should be used for acessing classes during evaluation.
-   */
-  public ClassLoader getClassLoader() {
-    return m_classLoader;
-  }
-
-  /**
-   * @return the {@link ExecutionFlowDescription} for evaluation.
-   */
-  public final ExecutionFlowDescription getFlowDescription() {
-    return m_flowDescription;
-  }
-
-  /**
-   * @return the source of given {@link ASTNode}.
-   */
-  public String getSource(ASTNode node) {
-    return node.toString();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Additional evaluators
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final List<IExpressionEvaluator> m_evaluators = Lists.newArrayList();
-
-  /**
-   * @return the list of additional {@link IExpressionEvaluator}'s, that should be temporary added.
-   */
-  public final List<IExpressionEvaluator> getEvaluators() {
-    return m_evaluators;
-  }
-
-  /**
-   * Adds given {@link IExpressionEvaluator}.
-   */
-  public final void addEvaluator(IExpressionEvaluator evaluator) {
-    m_evaluators.add(evaluator);
-  }
-
-  /**
-   * Removes given {@link IExpressionEvaluator}.
-   */
-  public final void removeEvaluator(IExpressionEvaluator evaluator) {
-    m_evaluators.remove(evaluator);
-  }
-
-  /**
-   * Allows "pure" {@link Expression} evaluation, without any previous type binding, etc preparing.
-   * We need this for example to support "null/this" expression in {@link MethodInvocation}.
-   */
-  public Object evaluate(Expression expression) throws Exception {
-    return AstEvaluationEngine.UNKNOWN;
-  }
-
-  /**
-   * This method is invoked when we need to evaluate {@link SingleVariableDeclaration}, i.e.
-   * parameter of some {@link MethodDeclaration}, however we can not find single invocation of this
-   * method.
-   *
-   * @return the evaluated value
-   * @throws Exception
-   *           if parameter can not be evaluated
-   */
-  public Object evaluateUnknownParameter(MethodDeclaration methodDeclaration,
-      SingleVariableDeclaration parameter) throws Exception {
-    throw new DesignerException(ICoreExceptionConstants.EVAL_NO_METHOD_INVOCATION,
-        getSource(methodDeclaration),
-        getSource(parameter));
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Events
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * This method is invoked for each {@link Expression} requested for evaluation.
-   */
-  public void evaluationRequested(Expression expression) throws Exception {
-  }
-
-  /**
-   * This method is invoked for each successfully evaluated {@link Expression}.
-   */
-  public void evaluationSuccessful(Expression expression, Object value) throws Exception {
-  }
-
-  /**
-   * This method is invoked when evaluation of {@link Expression} was failed.
-   *
-   * @return the value to use instead of failed, or {@link AstEvaluationEngine#UNKNOWN} if exception
-   *         should be thrown.
-   */
-  public Object evaluationFailed(Expression expression, Throwable e) throws Exception {
-    return AstEvaluationEngine.UNKNOWN;
-  }
-
-  /**
-   * This method is used to log "ignored" exceptions.
-   */
-  public void addException(ASTNode node, Throwable e) {
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Arbitrary values map
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Map<Object, Object> m_arbitraryMap;
-
-  /**
-   * Associates the given value with the given key.
-   */
-  public final void putArbitraryValue(Object key, Object value) {
-    if (m_arbitraryMap == null) {
-      m_arbitraryMap = Maps.newHashMap();
-    }
-    m_arbitraryMap.put(key, value);
-  }
-
-  /**
-   * @return the value to which the given key is mapped, or <code>null</code>.
-   */
-  public final Object getArbitraryValue(Object key) {
-    if (m_arbitraryMap != null) {
-      return m_arbitraryMap.get(key);
-    }
-    return null;
-  }
+	private final ClassLoader m_classLoader;
+	private final ExecutionFlowDescription m_flowDescription;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public EvaluationContext(ClassLoader classLoader, ExecutionFlowDescription flowDescription) {
+		Assert.isNotNull(classLoader);
+		Assert.isNotNull(flowDescription);
+		m_classLoader = classLoader;
+		m_flowDescription = flowDescription;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link ClassLoader} that should be used for acessing classes during evaluation.
+	 */
+	public ClassLoader getClassLoader() {
+		return m_classLoader;
+	}
+
+	/**
+	 * @return the {@link ExecutionFlowDescription} for evaluation.
+	 */
+	public final ExecutionFlowDescription getFlowDescription() {
+		return m_flowDescription;
+	}
+
+	/**
+	 * @return the source of given {@link ASTNode}.
+	 */
+	public String getSource(ASTNode node) {
+		return node.toString();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Additional evaluators
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final List<IExpressionEvaluator> m_evaluators = Lists.newArrayList();
+
+	/**
+	 * @return the list of additional {@link IExpressionEvaluator}'s, that should be temporary added.
+	 */
+	public final List<IExpressionEvaluator> getEvaluators() {
+		return m_evaluators;
+	}
+
+	/**
+	 * Adds given {@link IExpressionEvaluator}.
+	 */
+	public final void addEvaluator(IExpressionEvaluator evaluator) {
+		m_evaluators.add(evaluator);
+	}
+
+	/**
+	 * Removes given {@link IExpressionEvaluator}.
+	 */
+	public final void removeEvaluator(IExpressionEvaluator evaluator) {
+		m_evaluators.remove(evaluator);
+	}
+
+	/**
+	 * Allows "pure" {@link Expression} evaluation, without any previous type binding, etc preparing.
+	 * We need this for example to support "null/this" expression in {@link MethodInvocation}.
+	 */
+	public Object evaluate(Expression expression) throws Exception {
+		return AstEvaluationEngine.UNKNOWN;
+	}
+
+	/**
+	 * This method is invoked when we need to evaluate {@link SingleVariableDeclaration}, i.e.
+	 * parameter of some {@link MethodDeclaration}, however we can not find single invocation of this
+	 * method.
+	 *
+	 * @return the evaluated value
+	 * @throws Exception
+	 *           if parameter can not be evaluated
+	 */
+	public Object evaluateUnknownParameter(MethodDeclaration methodDeclaration,
+			SingleVariableDeclaration parameter) throws Exception {
+		throw new DesignerException(ICoreExceptionConstants.EVAL_NO_METHOD_INVOCATION,
+				getSource(methodDeclaration),
+				getSource(parameter));
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Events
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * This method is invoked for each {@link Expression} requested for evaluation.
+	 */
+	public void evaluationRequested(Expression expression) throws Exception {
+	}
+
+	/**
+	 * This method is invoked for each successfully evaluated {@link Expression}.
+	 */
+	public void evaluationSuccessful(Expression expression, Object value) throws Exception {
+	}
+
+	/**
+	 * This method is invoked when evaluation of {@link Expression} was failed.
+	 *
+	 * @return the value to use instead of failed, or {@link AstEvaluationEngine#UNKNOWN} if exception
+	 *         should be thrown.
+	 */
+	public Object evaluationFailed(Expression expression, Throwable e) throws Exception {
+		return AstEvaluationEngine.UNKNOWN;
+	}
+
+	/**
+	 * This method is used to log "ignored" exceptions.
+	 */
+	public void addException(ASTNode node, Throwable e) {
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Arbitrary values map
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Map<Object, Object> m_arbitraryMap;
+
+	/**
+	 * Associates the given value with the given key.
+	 */
+	public final void putArbitraryValue(Object key, Object value) {
+		if (m_arbitraryMap == null) {
+			m_arbitraryMap = Maps.newHashMap();
+		}
+		m_arbitraryMap.put(key, value);
+	}
+
+	/**
+	 * @return the value to which the given key is mapped, or <code>null</code>.
+	 */
+	public final Object getArbitraryValue(Object key) {
+		if (m_arbitraryMap != null) {
+			return m_arbitraryMap.get(key);
+		}
+		return null;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/eval/ExecutionFlowDescription.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/eval/ExecutionFlowDescription.java
index 661b4bf3a..ee6277ac7 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/eval/ExecutionFlowDescription.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/eval/ExecutionFlowDescription.java
@@ -34,218 +34,218 @@
  * @coverage core.evaluation
  */
 public final class ExecutionFlowDescription {
-  private final List<MethodDeclaration> m_startMethods;
-  private final Map<ASTNode, List<MethodDeclaration>> m_binaryFlowMethodsAfter = Maps.newHashMap();
-  private final Map<ASTNode, List<MethodDeclaration>> m_binaryFlowMethodsBefore = Maps.newHashMap();
-  private boolean m_binaryFlowLocked;
-  private final LinkedList<Statement> m_traceStatements = Lists.newLinkedList();
-  private int m_modificationCount;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ExecutionFlowDescription(MethodDeclaration... startMethods) {
-    this(Lists.newArrayList(startMethods));
-  }
-
-  public ExecutionFlowDescription(List<MethodDeclaration> startMethods) {
-    m_startMethods = startMethods;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public int modificationCount() {
-    return m_modificationCount;
-  }
-
-  /**
-   * @return the {@link MethodDeclaration}'s that should be used as entry points for visiting.
-   */
-  public List<MethodDeclaration> getStartMethods() {
-    AstNodeUtils.removeDanglingNodes(m_startMethods);
-    return m_startMethods;
-  }
-
-  /**
-   * Adds new {@link MethodDeclaration} into {@link #getStartMethods()}.
-   */
-  public void addStartMethod(MethodDeclaration method) {
-    m_modificationCount++;
-    m_startMethods.add(method);
-  }
-
-  /**
-   * @return <code>true</code> if execution flow starts in static method.
-   */
-  public boolean isStatic() {
-    return AstNodeUtils.isStatic(getFirstMethod());
-  }
-
-  /**
-   * @return the {@link TypeDeclaration} of this execution flow.
-   */
-  public TypeDeclaration geTypeDeclaration() {
-    return AstNodeUtils.getEnclosingType(getFirstMethod());
-  }
-
-  /**
-   * @return the {@link CompilationUnit} of this execution flow.
-   */
-  public CompilationUnit getCompilationUnit() {
-    return (CompilationUnit) getFirstMethod().getRoot();
-  }
-
-  /**
-   * @return the {@link AST} of this {@link ExecutionFlowDescription}.
-   */
-  public AST getAST() {
-    return getFirstMethod().getAST();
-  }
-
-  /**
-   * @return the first start {@link MethodDeclaration}, just to access top-level {@link ASTNode}'s.
-   */
-  private MethodDeclaration getFirstMethod() {
-    return m_startMethods.get(0);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Trace
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link List} of {@link Statement}'s that form execution stack trace.
-   */
-  public List<Statement> getTraceStatements() {
-    return m_traceStatements;
-  }
-
-  /**
-   * @return the {@link Statement} that is visiting now.
-   */
-  private Statement getCurrentStatement() {
-    Assert.isTrue(!m_traceStatements.isEmpty(), "Statements trace is empty!");
-    return m_traceStatements.getFirst();
-  }
-
-  /**
-   * Informs that given {@link Statement} is going to be visited, so that any binary flow
-   * {@link MethodDeclaration} should be associated with it.
-   */
-  public void enterStatement(Statement statement) {
-    m_traceStatements.addFirst(statement);
-  }
-
-  /**
-   * Informs that given {@link Statement} was visited, so previous {@link Statement} from stack
-   * should be used as current.
-   */
-  public void leaveStatement(Statement statement) {
-    Assert.isTrue(!m_traceStatements.isEmpty(), "Statements trace is empty!");
-    Statement lastStatement = m_traceStatements.removeFirst();
-    Assert.isTrue(
-        lastStatement == statement,
-        "Execution flow problem. %s expected, but %s found.",
-        statement,
-        lastStatement);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Binary flow
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if binary flow was already analyzed, so it should not be attempted to
-   *         analyze again.
-   */
-  public boolean isBinaryFlowLocked() {
-    return m_binaryFlowLocked;
-  }
-
-  /**
-   * States that binary flow was analyzed, so should not be changed anymore.<br>
-   * Usually we lock binary flow after parsing, because we know that we already visited all
-   * {@link ASTNode} 's that should be visited, so no need to loose time on further analysis.
-   */
-  public void lockBinaryFlow() {
-    m_binaryFlowLocked = true;
-  }
-
-  /**
-   * States that given {@link MethodDeclaration} should be executed before current {@link Statement}
-   * .
-   */
-  public void addBinaryFlowMethodBefore(MethodDeclaration methodDeclaration) {
-    m_modificationCount++;
-    Statement currentStatement = getCurrentStatement();
-    addBinaryFlowMethodBefore(currentStatement, methodDeclaration);
-  }
-
-  public void addBinaryFlowMethodBefore(Statement currentStatement,
-      MethodDeclaration methodDeclaration) {
-    m_modificationCount++;
-    List<MethodDeclaration> methods = m_binaryFlowMethodsBefore.get(currentStatement);
-    if (methods == null) {
-      methods = Lists.newArrayList();
-      m_binaryFlowMethodsBefore.put(currentStatement, methods);
-    }
-    // appends new method
-    if (!methods.contains(methodDeclaration)) {
-      methods.add(methodDeclaration);
-    }
-  }
-
-  /**
-   * States that given {@link MethodDeclaration} was visited from binary execution flow during
-   * executing current {@link Statement}. So, this {@link MethodDeclaration} should be executed
-   * (later) after current {@link Statement}.
-   */
-  public void addBinaryFlowMethodAfter(MethodDeclaration methodDeclaration) {
-    m_modificationCount++;
-    Statement currentStatement = getCurrentStatement();
-    List<MethodDeclaration> methods = m_binaryFlowMethodsAfter.get(currentStatement);
-    if (methods == null) {
-      methods = Lists.newArrayList();
-      m_binaryFlowMethodsAfter.put(currentStatement, methods);
-    }
-    // appends new method
-    if (!methods.contains(methodDeclaration)) {
-      methods.add(methodDeclaration);
-    }
-  }
-
-  public void addBinaryFlowMethodAfter(Statement currentStatement,
-      MethodDeclaration methodDeclaration) {
-    m_modificationCount++;
-    List<MethodDeclaration> methods = m_binaryFlowMethodsAfter.get(currentStatement);
-    if (methods == null) {
-      methods = Lists.newArrayList();
-      m_binaryFlowMethodsAfter.put(currentStatement, methods);
-    }
-    // appends new method
-    if (!methods.contains(methodDeclaration)) {
-      methods.add(methodDeclaration);
-    }
-  }
-
-  /**
-   * @return {@link MethodDeclaration}'s that should be visited before given {@link Statement}.
-   */
-  public List<MethodDeclaration> getBinaryFlowMethodsBefore(Statement statement) {
-    return m_binaryFlowMethodsBefore.get(statement);
-  }
-
-  /**
-   * @return {@link MethodDeclaration}'s that should be visited after given {@link Statement}.
-   */
-  public List<MethodDeclaration> getBinaryFlowMethodsAfter(Statement statement) {
-    return m_binaryFlowMethodsAfter.get(statement);
-  }
+	private final List<MethodDeclaration> m_startMethods;
+	private final Map<ASTNode, List<MethodDeclaration>> m_binaryFlowMethodsAfter = Maps.newHashMap();
+	private final Map<ASTNode, List<MethodDeclaration>> m_binaryFlowMethodsBefore = Maps.newHashMap();
+	private boolean m_binaryFlowLocked;
+	private final LinkedList<Statement> m_traceStatements = Lists.newLinkedList();
+	private int m_modificationCount;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ExecutionFlowDescription(MethodDeclaration... startMethods) {
+		this(Lists.newArrayList(startMethods));
+	}
+
+	public ExecutionFlowDescription(List<MethodDeclaration> startMethods) {
+		m_startMethods = startMethods;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public int modificationCount() {
+		return m_modificationCount;
+	}
+
+	/**
+	 * @return the {@link MethodDeclaration}'s that should be used as entry points for visiting.
+	 */
+	public List<MethodDeclaration> getStartMethods() {
+		AstNodeUtils.removeDanglingNodes(m_startMethods);
+		return m_startMethods;
+	}
+
+	/**
+	 * Adds new {@link MethodDeclaration} into {@link #getStartMethods()}.
+	 */
+	public void addStartMethod(MethodDeclaration method) {
+		m_modificationCount++;
+		m_startMethods.add(method);
+	}
+
+	/**
+	 * @return <code>true</code> if execution flow starts in static method.
+	 */
+	public boolean isStatic() {
+		return AstNodeUtils.isStatic(getFirstMethod());
+	}
+
+	/**
+	 * @return the {@link TypeDeclaration} of this execution flow.
+	 */
+	public TypeDeclaration geTypeDeclaration() {
+		return AstNodeUtils.getEnclosingType(getFirstMethod());
+	}
+
+	/**
+	 * @return the {@link CompilationUnit} of this execution flow.
+	 */
+	public CompilationUnit getCompilationUnit() {
+		return (CompilationUnit) getFirstMethod().getRoot();
+	}
+
+	/**
+	 * @return the {@link AST} of this {@link ExecutionFlowDescription}.
+	 */
+	public AST getAST() {
+		return getFirstMethod().getAST();
+	}
+
+	/**
+	 * @return the first start {@link MethodDeclaration}, just to access top-level {@link ASTNode}'s.
+	 */
+	private MethodDeclaration getFirstMethod() {
+		return m_startMethods.get(0);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Trace
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link List} of {@link Statement}'s that form execution stack trace.
+	 */
+	public List<Statement> getTraceStatements() {
+		return m_traceStatements;
+	}
+
+	/**
+	 * @return the {@link Statement} that is visiting now.
+	 */
+	private Statement getCurrentStatement() {
+		Assert.isTrue(!m_traceStatements.isEmpty(), "Statements trace is empty!");
+		return m_traceStatements.getFirst();
+	}
+
+	/**
+	 * Informs that given {@link Statement} is going to be visited, so that any binary flow
+	 * {@link MethodDeclaration} should be associated with it.
+	 */
+	public void enterStatement(Statement statement) {
+		m_traceStatements.addFirst(statement);
+	}
+
+	/**
+	 * Informs that given {@link Statement} was visited, so previous {@link Statement} from stack
+	 * should be used as current.
+	 */
+	public void leaveStatement(Statement statement) {
+		Assert.isTrue(!m_traceStatements.isEmpty(), "Statements trace is empty!");
+		Statement lastStatement = m_traceStatements.removeFirst();
+		Assert.isTrue(
+				lastStatement == statement,
+				"Execution flow problem. %s expected, but %s found.",
+				statement,
+				lastStatement);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Binary flow
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if binary flow was already analyzed, so it should not be attempted to
+	 *         analyze again.
+	 */
+	public boolean isBinaryFlowLocked() {
+		return m_binaryFlowLocked;
+	}
+
+	/**
+	 * States that binary flow was analyzed, so should not be changed anymore.<br>
+	 * Usually we lock binary flow after parsing, because we know that we already visited all
+	 * {@link ASTNode} 's that should be visited, so no need to loose time on further analysis.
+	 */
+	public void lockBinaryFlow() {
+		m_binaryFlowLocked = true;
+	}
+
+	/**
+	 * States that given {@link MethodDeclaration} should be executed before current {@link Statement}
+	 * .
+	 */
+	public void addBinaryFlowMethodBefore(MethodDeclaration methodDeclaration) {
+		m_modificationCount++;
+		Statement currentStatement = getCurrentStatement();
+		addBinaryFlowMethodBefore(currentStatement, methodDeclaration);
+	}
+
+	public void addBinaryFlowMethodBefore(Statement currentStatement,
+			MethodDeclaration methodDeclaration) {
+		m_modificationCount++;
+		List<MethodDeclaration> methods = m_binaryFlowMethodsBefore.get(currentStatement);
+		if (methods == null) {
+			methods = Lists.newArrayList();
+			m_binaryFlowMethodsBefore.put(currentStatement, methods);
+		}
+		// appends new method
+		if (!methods.contains(methodDeclaration)) {
+			methods.add(methodDeclaration);
+		}
+	}
+
+	/**
+	 * States that given {@link MethodDeclaration} was visited from binary execution flow during
+	 * executing current {@link Statement}. So, this {@link MethodDeclaration} should be executed
+	 * (later) after current {@link Statement}.
+	 */
+	public void addBinaryFlowMethodAfter(MethodDeclaration methodDeclaration) {
+		m_modificationCount++;
+		Statement currentStatement = getCurrentStatement();
+		List<MethodDeclaration> methods = m_binaryFlowMethodsAfter.get(currentStatement);
+		if (methods == null) {
+			methods = Lists.newArrayList();
+			m_binaryFlowMethodsAfter.put(currentStatement, methods);
+		}
+		// appends new method
+		if (!methods.contains(methodDeclaration)) {
+			methods.add(methodDeclaration);
+		}
+	}
+
+	public void addBinaryFlowMethodAfter(Statement currentStatement,
+			MethodDeclaration methodDeclaration) {
+		m_modificationCount++;
+		List<MethodDeclaration> methods = m_binaryFlowMethodsAfter.get(currentStatement);
+		if (methods == null) {
+			methods = Lists.newArrayList();
+			m_binaryFlowMethodsAfter.put(currentStatement, methods);
+		}
+		// appends new method
+		if (!methods.contains(methodDeclaration)) {
+			methods.add(methodDeclaration);
+		}
+	}
+
+	/**
+	 * @return {@link MethodDeclaration}'s that should be visited before given {@link Statement}.
+	 */
+	public List<MethodDeclaration> getBinaryFlowMethodsBefore(Statement statement) {
+		return m_binaryFlowMethodsBefore.get(statement);
+	}
+
+	/**
+	 * @return {@link MethodDeclaration}'s that should be visited after given {@link Statement}.
+	 */
+	public List<MethodDeclaration> getBinaryFlowMethodsAfter(Statement statement) {
+		return m_binaryFlowMethodsAfter.get(statement);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/eval/ExecutionFlowUtils.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/eval/ExecutionFlowUtils.java
index f169ed0ee..0a7887162 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/eval/ExecutionFlowUtils.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/eval/ExecutionFlowUtils.java
@@ -99,1252 +99,1252 @@
  * @coverage core.evaluation
  */
 public final class ExecutionFlowUtils {
-  static final String KEY_FRAME_INVOCATION = "ExecutionFlowUtils.frameInvocation";
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private ExecutionFlowUtils() {
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ExecutionFlowFrameVisitor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * The extension of {@link ASTVisitor} for visiting {@link TypeDeclaration},
-   * {@link MethodDeclaration} and {@link Block}, i.e. AST nodes that form frames.
-   *
-   * @author scheglov_ke
-   */
-  public static class ExecutionFlowFrameVisitor extends ASTVisitor {
-    public Statement m_currentStatement;
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Limitations
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public boolean visit(AnonymousClassDeclaration node) {
-      return shouldVisitAnonymousClassDeclaration(node);
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Frames
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    /**
-     * Enter into frame.<br>
-     * Frame is {@link TypeDeclaration}, {@link MethodDeclaration} or {@link Block}.
-     *
-     * @return <code>true</code> if we should enter into given frame.
-     */
-    public boolean enterFrame(ASTNode node) {
-      return true;
-    }
-
-    /**
-     * Leaves frame entered by {@link #enterFrame(ASTNode)}.
-     */
-    public void leaveFrame(ASTNode node) {
-    }
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Visiting context
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Global, "visiting level" context.
-   */
-  public static class VisitingContext {
-    boolean classInitialized;
-    boolean instanceInitialized;
-    boolean useBinaryFlow;
-    final Set<MethodDeclaration> visitedMethods = Sets.newHashSet();
-
-    public VisitingContext(boolean useBinaryFlow) {
-      this.useBinaryFlow = useBinaryFlow;
-    }
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Visiting
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final String WBP_PARSER_CONSTRUCTOR = "@wbp.parser.constructor";
-
-  /**
-   * Tracks execution flow along given {@link ExecutionFlowDescription}.
-   *
-   * @param flowDescription
-   *          the {@link ExecutionFlowDescription} with starting methods and binary flow
-   *          information.
-   * @param useBinaryFlow
-   *          is <code>true</code> if we should use binary flow information from
-   *          {@link ExecutionFlowDescription}.
-   * @param visitor
-   *          the {@link ExecutionFlowFrameVisitor} to inform about tracking execution flow.
-   */
-  public static void visit(VisitingContext context,
-      ExecutionFlowDescription flowDescription,
-      ExecutionFlowFrameVisitor visitor) {
-    visit(context, flowDescription, visitor, flowDescription.getStartMethods());
-  }
-
-  /**
-   * Visit nodes starting from given methods.
-   *
-   * @param flowDescription
-   *          the {@link ExecutionFlowDescription} with starting methods and binary flow
-   *          information.
-   * @param useBinaryFlow
-   *          is <code>true</code> if we should use binary flow information from
-   *          {@link ExecutionFlowDescription}.
-   * @param visitor
-   *          the {@link ExecutionFlowFrameVisitor} to inform about tracking execution flow.
-   */
-  public static void visit(VisitingContext context,
-      ExecutionFlowDescription flowDescription,
-      ExecutionFlowFrameVisitor visitor,
-      List<MethodDeclaration> methodsToVisit) {
-    TypeDeclaration typeDeclaration = AstNodeUtils.getParentType(methodsToVisit.get(0));
-    if (!context.instanceInitialized) {
-      visitor.enterFrame(typeDeclaration);
-    }
-    for (MethodDeclaration method : methodsToVisit) {
-      // before any method (static or instance), visit class initialization code
-      if (!context.classInitialized) {
-        visitFields(visitor, typeDeclaration, true);
-        visitInitializers(context, flowDescription, visitor, typeDeclaration, true);
-        context.classInitialized = true;
-      }
-      // before any instance method, visit instance initialization code
-      if (!context.instanceInitialized && !isStatic(method)) {
-        visitFields(visitor, typeDeclaration, false);
-        visitInitializers(context, flowDescription, visitor, typeDeclaration, false);
-        context.instanceInitialized = true;
-      }
-      // OK, visit current method
-      visit(context, flowDescription, visitor, method);
-    }
-  }
-
-  /**
-   * Visits single {@link MethodDeclaration}.
-   */
-  private static void visit(VisitingContext context,
-      ExecutionFlowDescription flowDescription,
-      ExecutionFlowFrameVisitor visitor,
-      MethodDeclaration method) {
-    if (visitor.enterFrame(method)) {
-      // parameters
-      for (SingleVariableDeclaration parameter : DomGenerics.parameters(method)) {
-        parameter.accept(visitor);
-      }
-      // body
-      Block body = method.getBody();
-      if (body != null) {
-        visitStatement(context, flowDescription, body, visitor);
-      }
-      // leave method
-      visitor.leaveFrame(method);
-    }
-  }
-
-  /**
-   * Visits static or instance {@link FieldDeclaration}'s.
-   */
-  private static void visitFields(ExecutionFlowFrameVisitor visitor,
-      TypeDeclaration typeDeclaration,
-      boolean onlyStatic) {
-    FieldDeclaration[] fields = typeDeclaration.getFields();
-    for (FieldDeclaration fieldDeclaration : fields) {
-      boolean isStatic = isStatic(fieldDeclaration);
-      if (onlyStatic && isStatic) {
-        fieldDeclaration.accept(visitor);
-      }
-      if (!onlyStatic && !isStatic) {
-        fieldDeclaration.accept(visitor);
-      }
-    }
-  }
-
-  /**
-   * Visits static or instance {@link Initializer}'s.
-   */
-  private static void visitInitializers(VisitingContext context,
-      ExecutionFlowDescription flowDescription,
-      ExecutionFlowFrameVisitor visitor,
-      TypeDeclaration typeDeclaration,
-      boolean onlyStatic) {
-    List<BodyDeclaration> bodyDeclarations = DomGenerics.bodyDeclarations(typeDeclaration);
-    for (BodyDeclaration bodyDeclaration : bodyDeclarations) {
-      boolean isStatic = isStatic(bodyDeclaration);
-      if (bodyDeclaration instanceof Initializer && context != null) {
-        Initializer initializer = (Initializer) bodyDeclaration;
-        if (onlyStatic && isStatic) {
-          visitStatement(context, flowDescription, initializer.getBody(), visitor);
-        }
-        if (!onlyStatic && !isStatic) {
-          visitStatement(context, flowDescription, initializer.getBody(), visitor);
-        }
-      }
-    }
-  }
-
-  /**
-   * Visit {@link ASTNode}'s "unconditionally accessible" starting from given {@link Statement}.
-   */
-  private static void visitStatement(VisitingContext context,
-      ExecutionFlowDescription flowDescription,
-      Statement statement,
-      ExecutionFlowFrameVisitor visitor) {
-    // check if we already visited MethodDeclaration
-    if (statement.getLocationInParent() == MethodDeclaration.BODY_PROPERTY) {
-      MethodDeclaration methodDeclaration = (MethodDeclaration) statement.getParent();
-      if (context.visitedMethods.contains(methodDeclaration)) {
-        return;
-      }
-      context.visitedMethods.add(methodDeclaration);
-    }
-    // visit "binary flow" methods that should be visited BEFORE current Statement
-    visitBinaryFlowMethods(true, context, flowDescription, statement, visitor);
-    // visit current Statement
-    flowDescription.enterStatement(statement);
-    try {
-      visitStatement0(context, flowDescription, statement, visitor);
-    } finally {
-      flowDescription.leaveStatement(statement);
-    }
-    // visit "binary flow" methods that should be visited AFTER current Statement
-    visitBinaryFlowMethods(false, context, flowDescription, statement, visitor);
-  }
-
-  /**
-   * Visit {@link ASTNode}'s "unconditionally accessible" starting from given {@link Statement}.
-   */
-  private static void visitStatement0(VisitingContext context,
-      ExecutionFlowDescription flowDescription,
-      Statement statement,
-      ExecutionFlowFrameVisitor visitor) {
-    visitor.m_currentStatement = statement;
-    if (statement instanceof Block) {
-      Block block = (Block) statement;
-      if (visitor.enterFrame(block)) {
-        //
-        for (Statement childStatement : DomGenerics.statements(block)) {
-          visitStatement(context, flowDescription, childStatement, visitor);
-        }
-        //
-        visitor.leaveFrame(block);
-      }
-    } else if (statement instanceof TryStatement) {
-      TryStatement tryStatement = (TryStatement) statement;
-      visitStatement(context, flowDescription, tryStatement.getBody(), visitor);
-    } else if (statement instanceof IfStatement) {
-      IfStatement ifStatement = (IfStatement) statement;
-      if (shouldVisit_IfStatement_Then(ifStatement)) {
-        visitStatement(context, flowDescription, ifStatement.getThenStatement(), visitor);
-      } else if (ifStatement.getElseStatement() != null
-          && shouldVisit_IfStatement_Else(ifStatement)) {
-        visitStatement(context, flowDescription, ifStatement.getElseStatement(), visitor);
-      }
-    } else if (shouldVisitStatement(statement)) {
-      ASTVisitor complexVisitor = getInterceptingVisitor(context, flowDescription, visitor);
-      statement.accept(complexVisitor);
-    }
-  }
-
-  /**
-   * Local storage for the enhanced {@link ASTVisitor} class. Classes are loaded
-   * with the {@link ExecutionFlowUtils} class-loader, meaning there should only
-   * exists a single instance of this class at a time. All instances are should be
-   * created from this class. We have to avoid creating a separate class for each
-   * enhanced visitor, as the {@link ClassLoader} is never discarded and thus, the
-   * classes stay in memory indefinitely. If left unchecked, this may lead to an
-   * {@link OutOfMemoryError}.
-   */
-  private static final TypeCache<TypeCache.SimpleKey> PROXY_CACHE = new TypeCache.WithInlineExpunction<>(
-      TypeCache.Sort.WEAK);
-
-  private static ASTVisitor getInterceptingVisitor(final VisitingContext context,
-      final ExecutionFlowDescription flowDescription, final ExecutionFlowFrameVisitor visitor) {
-
-    DynamicType.Builder<VisitorStub> builder = new ByteBuddy() //
-        .subclass(VisitorStub.class) //
-        .method(ElementMatchers.any()) //
-        .intercept(InvocationHandlerAdapter.of(new ExecutionFlowHandler()));
-
-    ClassLoader proxyClassLoader = ExecutionFlowUtils.class.getClassLoader();
-    TypeCache.SimpleKey proxyKey = new TypeCache.SimpleKey(VisitorStub.class);
-
-    try {
-      return (ASTVisitor) PROXY_CACHE
-          .findOrInsert(proxyClassLoader, proxyKey, () -> builder.make().load(proxyClassLoader).getLoaded())
-          .getConstructor(VisitingContext.class, ExecutionFlowDescription.class, ExecutionFlowFrameVisitor.class)
-          .newInstance(context, flowDescription, visitor);
-    } catch (ReflectiveOperationException e) {
-      throw new DesignerException(ICoreExceptionConstants.EVAL_BYTEBUDDY, e);
-    }
-  }
-
-  /**
-   * In general we should not visit anonymous classes, they are usually event handlers. However
-   * there are special cases, such as <code>EventQueue.invokeLater(Runnable)</code> in Swing.
-   */
-  private static boolean shouldVisitAnonymousClassDeclaration(final AnonymousClassDeclaration anonymous) {
-    return ExecutionUtils.runObjectLog(new RunnableObjectEx<Boolean>() {
-      @Override
-      public Boolean runObject() throws Exception {
-        for (ExecutionFlowProvider provider : getExecutionFlowProviders()) {
-          if (provider.shouldVisit(anonymous)) {
-            return true;
-          }
-        }
-        return false;
-      }
-    }, false);
-  }
-
-  /**
-   * @return all {@link ExecutionFlowProvider}'s.
-   */
-  private static List<ExecutionFlowProvider> getExecutionFlowProviders() {
-    return ExternalFactoriesHelper.getElementsInstances(
-        ExecutionFlowProvider.class,
-        "org.eclipse.wb.core.java.executionFlowProviders",
-        "provider");
-  }
-
-  /**
-   * Visits {@link MethodDeclaration} that should be visited as part of binary execution flow for
-   * given {@link Statement}.
-   *
-   * @param beforeStatement
-   *          is <code>true</code> if we should visit {@link MethodDeclaration}'s executed before
-   *          {@link Statement}, and <code>false</code>, if {@link MethodDeclaration}'s are visited
-   *          after (in reality - during) executing given {@link Statement}. Currently
-   *          <code>true</code> is used only for {@link MethodDeclaration}'s executed during
-   *          {@link SuperConstructorInvocation}.
-   */
-  private static void visitBinaryFlowMethods(boolean beforeStatement,
-      VisitingContext context,
-      ExecutionFlowDescription flowDescription,
-      Statement statement,
-      ExecutionFlowFrameVisitor visitor) {
-    if (context.useBinaryFlow) {
-      List<MethodDeclaration> binaryFlowMethods =
-          beforeStatement
-              ? flowDescription.getBinaryFlowMethodsBefore(statement)
-              : flowDescription.getBinaryFlowMethodsAfter(statement);
-      if (binaryFlowMethods != null) {
-        for (MethodDeclaration method : binaryFlowMethods) {
-          visit(context, flowDescription, visitor, method);
-        }
-      }
-    }
-  }
-
-  /**
-   * @return <code>true</code> if given {@link Statement} should be visited.
-   */
-  private static boolean shouldVisitStatement(Statement statement) {
-    // usual statements
-    if (statement instanceof ExpressionStatement
-        || statement instanceof VariableDeclarationStatement
-        || statement instanceof ConstructorInvocation
-        || statement instanceof SuperConstructorInvocation
-        || statement instanceof ReturnStatement) {
-      return true;
-    }
-    // not supported statement
-    return false;
-  }
-
-  /**
-   * @return <code>true</code> if given "then" statement of {@link IfStatement} should be visited.
-   */
-  private static boolean shouldVisit_IfStatement_Then(IfStatement ifStatement) {
-    Expression expression = ifStatement.getExpression();
-    // if (true) {}
-    if (expression instanceof BooleanLiteral) {
-      BooleanLiteral literal = (BooleanLiteral) expression;
-      return literal.booleanValue();
-    }
-    // if (Beans.isDesignTime()) {}
-    if (AstNodeUtils.isMethodInvocation(expression, "isDesignTime()")) {
-      return true;
-    }
-    // special case: lazy creation
-    {
-      Block block = (Block) ifStatement.getParent();
-      if (block.getParent() instanceof MethodDeclaration) {
-        MethodDeclaration method = (MethodDeclaration) block.getParent();
-        if (LazyVariableSupportUtils.getInformation(method) != null) {
-          return true;
-        }
-      }
-    }
-    // no
-    return false;
-  }
-
-  /**
-   * @return <code>true</code> if given "else" statement of {@link IfStatement} should be visited.
-   */
-  private static boolean shouldVisit_IfStatement_Else(IfStatement ifStatement) {
-    Expression expression = ifStatement.getExpression();
-    // if (false) {}
-    if (expression instanceof BooleanLiteral) {
-      BooleanLiteral literal = (BooleanLiteral) expression;
-      return !literal.booleanValue();
-    }
-    // if (!Beans.isDesignTime()) {}
-    if (expression instanceof PrefixExpression) {
-      PrefixExpression prefixExpression = (PrefixExpression) expression;
-      if (prefixExpression.getOperator() == PrefixExpression.Operator.NOT
-          && AstNodeUtils.isMethodInvocation(prefixExpression.getOperand(), "isDesignTime()")) {
-        return true;
-      }
-    }
-    // no
-    return false;
-  }
-
-  /**
-   * @return single constructor that should be used by Designer. This constructor should be single
-   *         or marked with {@link #WBP_PARSER_CONSTRUCTOR} comment. If multiple constructors found
-   *         and none is marked, then exception will be thrown.
-   */
-  public static MethodDeclaration getExecutionFlowConstructor(TypeDeclaration typeDeclaration) {
-    // build list of constructors
-    List<MethodDeclaration> constructors = Lists.newArrayList();
-    for (MethodDeclaration methodDeclaration : typeDeclaration.getMethods()) {
-      if (methodDeclaration.isConstructor()) {
-        constructors.add(methodDeclaration);
-      }
-    }
-    // no constructors
-    if (constructors.isEmpty()) {
-      return null;
-    }
-    // check for good case - single constructor
-    if (constructors.size() == 1) {
-      return constructors.get(0);
-    }
-    // several constructors
-    for (MethodDeclaration constructor : constructors) {
-      if (hasJavaDocTag(constructor, WBP_PARSER_CONSTRUCTOR)) {
-        return constructor;
-      }
-    }
-    // try to find default constructor, use extensions
-    for (ExecutionFlowProvider provider : getExecutionFlowProviders()) {
-      MethodDeclaration constructor = provider.getDefaultConstructor(typeDeclaration);
-      if (constructor != null) {
-        return constructor;
-      }
-    }
-    // we can not select correct constructor
-    throw new MultipleConstructorsError();
-  }
-
-  /**
-   * @return the {@link MethodDeclaration} marked with @wbp.parse.entryPoint tag, may be
-   *         <code>null</code>.
-   */
-  public static MethodDeclaration getExecutionFlow_entryPoint(TypeDeclaration typeDeclaration) {
-    for (MethodDeclaration method : typeDeclaration.getMethods()) {
-      if (hasJavaDocTag(method, "@wbp.parser.entryPoint")) {
-        return method;
-      }
-    }
-    return null;
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Assignment
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final String KEY_LAST_VARIABLE_STAMP = "KEY_LAST_VARIABLE_STAMP";
-  private static final String KEY_DECLARATION = "KEY_DECLARATION";
-  private static final String KEY_REFERENCES = "KEY_REFERENCES";
-  private static final String KEY_ASSIGNMENTS = "KEY_ASSIGNMENTS";
-  private static final String KEY_LAST_ASSIGNMENT = "KEY_LAST_ASSIGNMENT";
-  private static final String KEY_LAST_DECLARATION_ASSIGNMENT = "KEY_LAST_DECLARATION_ASSIGNMENT";
-
-  /**
-   * @return <code>true</code> if given variable has cache stamp (there was related bug, so we test
-   *         for this now).
-   */
-  public static boolean hasVariableStamp(ASTNode variable) {
-    return variable.getProperty(KEY_LAST_VARIABLE_STAMP) != null;
-  }
-
-  /**
-   * @return the {@link VariableDeclaration} for given variable.
-   */
-  public static VariableDeclaration getDeclaration(ExecutionFlowDescription flowDescription,
-      ASTNode variable) {
-    if (EnvironmentUtils.isTestingTime()) {
-      Assert.isTrue(isVariable(variable));
-    }
-    return (VariableDeclaration) getVariableCachedValue(flowDescription, variable, KEY_DECLARATION);
-  }
-
-  /**
-   * @return the {@link List} of {@link Expression}'s that reference same variable as given.
-   */
-  public static List<Expression> getReferences(ExecutionFlowDescription flowDescription,
-      ASTNode variable) {
-    if (EnvironmentUtils.isTestingTime()) {
-      Assert.isTrue(isVariable(variable));
-    }
-    return getVariableCachedList_notNull(flowDescription, variable, KEY_REFERENCES);
-  }
-
-  /**
-   * @return the {@link List} of {@link Expression} where values are assignment to the given
-   *         variable.
-   */
-  public static List<Expression> getAssignments(ExecutionFlowDescription flowDescription,
-      ASTNode variable) {
-    if (EnvironmentUtils.isTestingTime()) {
-      Assert.isTrue(isVariable(variable));
-    }
-    return getVariableCachedList_notNull(flowDescription, variable, KEY_ASSIGNMENTS);
-  }
-
-  /**
-   * @return {@link Assignment} or {@link VariableDeclarationFragment} where value was assignment
-   *         for given variable; or <code>null</code> if no assignment found.
-   *
-   * @param flowDescription
-   *          the {@link ExecutionFlowDescription} from which we should start searching.
-   */
-  public static ASTNode getLastAssignment(ExecutionFlowDescription flowDescription, ASTNode variable) {
-    if (EnvironmentUtils.isTestingTime()) {
-      Assert.isTrue(isVariable(variable));
-    }
-    return (ASTNode) getVariableCachedValue(flowDescription, variable, KEY_LAST_ASSIGNMENT);
-  }
-
-  /**
-   * @return the {@link List} result from
-   *         {@link #getVariableCachedValue(ExecutionFlowDescription, ASTNode, String)}, ensures
-   *         that if no real {@link List}, empty {@link List} is returned.
-   */
-  @SuppressWarnings("unchecked")
-  private static <T> List<T> getVariableCachedList_notNull(ExecutionFlowDescription flowDescription,
-      ASTNode variable,
-      String key) {
-    List<T> result = (List<T>) getVariableCachedValue(flowDescription, variable, key);
-    if (result == null) {
-      return ImmutableList.of();
-    } else {
-      return result;
-    }
-  }
-
-  /**
-   * @return the final {@link Expression} for given one. This method will traverse
-   *         {@link SimpleName}'s until last assignment of "real" {@link Expression} will be found.
-   */
-  public static Expression getFinalExpression(ExecutionFlowDescription flowDescription,
-      Expression expression) {
-    // traverse assignments
-    while (expression instanceof SimpleName) {
-      ASTNode assignment = getLastAssignment(flowDescription, expression);
-      if (assignment instanceof Assignment) {
-        expression = ((Assignment) assignment).getRightHandSide();
-      } else if (assignment instanceof VariableDeclarationFragment) {
-        expression = ((VariableDeclarationFragment) assignment).getInitializer();
-      } else {
-        break;
-      }
-    }
-    // return final expression
-    return expression;
-  }
-
-  /**
-   * @return the cached value for given variable.
-   */
-  private static Object getVariableCachedValue(ExecutionFlowDescription flowDescription,
-      ASTNode variable,
-      String key) {
-    if (clearCachedValuesForDanglingNode(variable)) {
-      return null;
-    }
-    // check for cached value
-    {
-      Long lastStamp = (Long) variable.getProperty(KEY_LAST_VARIABLE_STAMP);
-      if (lastStamp != null && lastStamp.longValue() == variable.getAST().modificationCount()) {
-        return variable.getProperty(key);
-      }
-    }
-    // well, we don't have cached value, so prepare
-    prepareAssignmentInformation(flowDescription);
-    // return newly created result
-    return variable.getProperty(key);
-  }
-
-  /**
-   * When variable {@link ASTNode} is dangling, we will not able to visit it on execution flow, so
-   * have to clear cached information manually.
-   *
-   * @return <code>true</code> if node is dangling, so no need to visit execution flow.
-   */
-  private static boolean clearCachedValuesForDanglingNode(ASTNode variable) {
-    if (isDanglingNode(variable)) {
-      for (Field field : ExecutionFlowUtils.class.getDeclaredFields()) {
-        String fieldName = field.getName();
-        if (fieldName.startsWith("KEY_")) {
-          variable.setProperty(fieldName, null);
-        }
-      }
-      return true;
-    }
-    return false;
-  }
-
-  /**
-   * Tracks assignments on execution flow starting from given {@link ExecutionFlowDescription} and
-   * remember results in {@link ASTNode} properties.
-   */
-  private static void prepareAssignmentInformation(ExecutionFlowDescription flowDescription) {
-    final Long assignmentStamp = flowDescription.getAST().modificationCount();
-    // visit execution flow, find declarations/assignments for all variables
-    visit(new VisitingContext(true), flowDescription, new AbstractVariablesExecutionFlowVisitor(
-        true) {
-      @Override
-      public void endVisit(Assignment node) {
-        Expression leftSide = node.getLeftHandSide();
-        if (isVariable(leftSide)) {
-          Expression variable = leftSide;
-          executionFlowContext.addAssignment(variable, node);
-          executionFlowContext.storeAssignments(variable);
-        }
-      }
-
-      ////////////////////////////////////////////////////////////////////////////
-      //
-      // Generic ASTNode pre/post visiting
-      //
-      ////////////////////////////////////////////////////////////////////////////
-      @Override
-      public void postVisit(ASTNode node) {
-        // store assignment for variable usage
-        if (node instanceof Expression && isVariable(node)) {
-          Expression variable = (Expression) node;
-          variable.setProperty(KEY_LAST_VARIABLE_STAMP, assignmentStamp);
-          executionFlowContext.storeAssignments(variable);
-        }
-      }
-    });
-    // visit CompilationUnit, find references for all variables
-    flowDescription.getCompilationUnit().accept(new AbstractVariablesExecutionFlowVisitor(false) {
-      @Override
-      public boolean visit(AnonymousClassDeclaration node) {
-        return true;
-      }
-
-      @Override
-      public void preVisit(ASTNode node) {
-        super.preVisit(node);
-        if (isFrameNode(node)) {
-          enterFrame(node);
-          // visit all fields on enter TypeDeclaration
-          if (node instanceof TypeDeclaration) {
-            TypeDeclaration typeDeclaration = (TypeDeclaration) node;
-            visitFields(this, typeDeclaration, true);
-            visitFields(this, typeDeclaration, false);
-          }
-        }
-      }
-
-      @Override
-      public void postVisit(ASTNode node) {
-        super.postVisit(node);
-        if (isFrameNode(node)) {
-          leaveFrame(node);
-        }
-        if (node instanceof Expression) {
-          if (isVariable(node)) {
-            executionFlowContext.storeReferences((Expression) node);
-          }
-          // special support for "instanceOfTopType.field"
-          if (node instanceof QualifiedName) {
-            QualifiedName qualifiedName = (QualifiedName) node;
-            CompilationUnit unit = (CompilationUnit) qualifiedName.getRoot();
-            TypeDeclaration topType = (TypeDeclaration) unit.types().get(0);
-            if (qualifiedName.getQualifier().resolveTypeBinding() == topType.resolveBinding()) {
-              executionFlowContext.storeReferences(qualifiedName.getName());
-            }
-          }
-        }
-      }
-
-      private boolean isFrameNode(ASTNode node) {
-        return node instanceof TypeDeclaration
-            || node instanceof MethodDeclaration
-            || node instanceof Block;
-      }
-    });
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AbstractVariablesExecutionFlowVisitor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Abstract visitor that tracks frames and variables.
-   *
-   * @author scheglov_ke
-   */
-  private static abstract class AbstractVariablesExecutionFlowVisitor
-      extends
-        ExecutionFlowFrameVisitor {
-    protected final ExecutionFlowContext executionFlowContext;
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public AbstractVariablesExecutionFlowVisitor(boolean forExecutionFlow) {
-      executionFlowContext = new ExecutionFlowContext(forExecutionFlow);
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Frames tracking
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public boolean enterFrame(ASTNode node) {
-      executionFlowContext.enterFrame(node);
-      if (node instanceof MethodDeclaration) {
-        MethodDeclaration methodDeclaration = (MethodDeclaration) node;
-        for (SingleVariableDeclaration parameter : DomGenerics.parameters(methodDeclaration)) {
-          executionFlowContext.define(parameter);
-        }
-      }
-      return true;
-    }
-
-    @Override
-    public void leaveFrame(ASTNode node) {
-      executionFlowContext.leaveFrame();
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Variables tracking
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public void preVisit(ASTNode node) {
-      // "pre" visit because we should visit declaration before SimpleName
-      if (node instanceof VariableDeclaration) {
-        VariableDeclaration variableDeclaration = (VariableDeclaration) node;
-        executionFlowContext.define(variableDeclaration);
-      }
-    }
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Execution frames support
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Holder of information about execution - frames and variables.
-   *
-   * @author scheglov_ke
-   */
-  private static final class ExecutionFlowContext {
-    private final boolean m_forExecutionFlow;
-    private final LinkedList<ExecutionFlowFrame> m_stack = Lists.newLinkedList();
-    private ExecutionFlowFrame m_currentFrame;
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public ExecutionFlowContext(boolean forExecutionFlow) {
-      m_forExecutionFlow = forExecutionFlow;
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Frame operation
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    private MethodDeclaration getNewFrameMethod(ASTNode node) {
-      if (node instanceof MethodDeclaration) {
-        return (MethodDeclaration) node;
-      }
-      if (m_currentFrame != null) {
-        return m_currentFrame.getMethod();
-      }
-      return null;
-    }
-
-    /**
-     * Creates new frame, all subsequent variable declarations will go into this frame.
-     */
-    public void enterFrame(ASTNode node) {
-      m_currentFrame =
-          new ExecutionFlowFrame(getNewFrameMethod(node),
-              m_forExecutionFlow,
-              node instanceof TypeDeclaration);
-      m_stack.addFirst(m_currentFrame);
-    }
-
-    /**
-     * Removes current frame and all its variable declarations.
-     */
-    public void leaveFrame() {
-      Assert.isTrue(m_stack.removeFirst() == m_currentFrame);
-      m_currentFrame = m_stack.peek();
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Variables
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    /**
-     * Adds given variable as defined in current frame.
-     */
-    public void define(VariableDeclaration variableDeclaration) {
-      ExecutionFlowFrame frame = getFrameForDeclaration(variableDeclaration);
-      frame.define(variableDeclaration);
-    }
-
-    private ExecutionFlowFrame getFrameForDeclaration(VariableDeclaration variableDeclaration) {
-      // we may visit "type" frames too often (this is bad)
-      // so, declare fields in first "type" frame
-      if (variableDeclaration.getLocationInParent() == FieldDeclaration.FRAGMENTS_PROPERTY) {
-        for (int i = m_stack.size() - 1; i >= 0; i--) {
-          ExecutionFlowFrame frame = m_stack.get(i);
-          if (frame.m_forTypeDeclaration) {
-            return frame;
-          }
-        }
-      }
-      // local variables
-      return m_currentFrame;
-    }
-
-    /**
-     * Notifies that given variable was assigned value using given {@link Assignment}.
-     */
-    public void addAssignment(Expression variable, Assignment assignment) {
-      ExecutionFlowFrame definingFrame = getDefiningFrame(variable);
-      if (definingFrame != null) {
-        definingFrame.addAssignment(variable, assignment);
-      }
-    }
-
-    /**
-     * Stores declaration/assignments of given variable into properties.
-     */
-    public void storeAssignments(Expression node) {
-      ExecutionFlowFrame definingFrame = getDefiningFrame(node);
-      if (definingFrame != null) {
-        VariableDeclaration declaration = definingFrame.getDeclaration(node);
-        node.setProperty(KEY_DECLARATION, declaration);
-        node.setProperty(KEY_LAST_ASSIGNMENT, definingFrame.getLastAssignment(node));
-        node.setProperty(KEY_ASSIGNMENTS, definingFrame.getAssignments(node));
-      }
-    }
-
-    /**
-     * Stores references on given variable into properties.
-     */
-    public void storeReferences(Expression variable) {
-      ExecutionFlowFrame definingFrame = getDefiningFrame(variable);
-      if (definingFrame != null) {
-        variable.setProperty(KEY_REFERENCES, definingFrame.getReferences(variable));
-        // if no "real last assignment", i.e. we are in ASTNode disconnected from execution flow,
-        // use "last assignment" from declaration
-        if (variable.getProperty(KEY_LAST_ASSIGNMENT) == null) {
-          Assert.isTrue(!m_forExecutionFlow);
-          VariableDeclaration declaration = definingFrame.getDeclaration(variable);
-          variable.setProperty(
-              KEY_LAST_ASSIGNMENT,
-              declaration.getProperty(KEY_LAST_DECLARATION_ASSIGNMENT));
-        }
-      }
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Utils
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    private ExecutionFlowFrame getDefiningFrame(Expression variable) {
-      for (ExecutionFlowFrame frame : m_stack) {
-        if (frame.defines(variable)) {
-          return frame;
-        }
-      }
-      return null;
-    }
-  }
-  /**
-   * Holder of variables, declared in single frame: {@link TypeDeclaration},
-   * {@link MethodDeclaration} or {@link Block}.
-   *
-   * @author scheglov_ke
-   */
-  private static final class ExecutionFlowFrame {
-    private final MethodDeclaration m_method;
-    private final boolean m_forExecutionFlow;
-    private final boolean m_forTypeDeclaration;
-    private final Map<String, VariableDeclaration> m_variableToDeclaration = Maps.newHashMap();
-    private final Map<String, ASTNode> m_assignments = Maps.newHashMap();
-    private final Map<String, Expression> m_assignmentsVariables = Maps.newHashMap();
-    private final Map<String, ASTNode> m_variableToLastAssignment = Maps.newHashMap();
-    private final Map<String, List<ASTNode>> m_variableToAssignments = Maps.newHashMap();
-    private final Map<String, List<Expression>> m_variableToReferences = Maps.newHashMap();
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    /**
-     * @param forExecutionFlow
-     *          is <code>true</code> if this {@link ExecutionFlowFrame} is created as part of
-     *          visiting execution flow, so for example last assignment for
-     *          {@link VariableDeclaration} should be tracked. If <code>false</code>, then we just
-     *          visit {@link CompilationUnit} using {@link ASTVisitor}, and should not touch/corrupt
-     *          last assignment in {@link VariableDeclaration}.
-     * @param forTypeDeclaration
-     *          is <code>true</code> if this {@link ExecutionFlowFrame} is created for
-     *          {@link TypeDeclaration}.
-     */
-    public ExecutionFlowFrame(MethodDeclaration method,
-        boolean forExecutionFlow,
-        boolean forTypeDeclaration) {
-      m_method = method;
-      m_forExecutionFlow = forExecutionFlow;
-      m_forTypeDeclaration = forTypeDeclaration;
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Variables tracking
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    /**
-     * Checks that given variable is defined in this frame.
-     */
-    public boolean defines(Expression variable) {
-      if (variable instanceof FieldAccess && !m_forTypeDeclaration) {
-        return false;
-      }
-      return getDeclaration(variable) != null;
-    }
-
-    /**
-     * Adds new variable declared in this frame using given {@link VariableDeclaration}.
-     */
-    public void define(VariableDeclaration declaration) {
-      SimpleName variable = declaration.getName();
-      String variableName = variable.getIdentifier();
-      m_variableToDeclaration.put(variableName, declaration);
-      // in any case remember this node as assignment
-      addAssignment(variable, declaration);
-    }
-
-    /**
-     * Adds new assignment (or declaration) node for variable owned by this frame.
-     */
-    public void addAssignment(Expression variable, ASTNode node) {
-      String variableName = getVariableName(variable);
-      // add last assignment (can be just declaration)
-      m_variableToLastAssignment.put(variableName, node);
-      // add assignment (real, with initializer)
-      {
-        // prepare initializer
-        Expression initializer = null;
-        if (node instanceof VariableDeclaration) {
-          VariableDeclaration declaration = (VariableDeclaration) node;
-          initializer = declaration.getInitializer();
-        } else if (node instanceof Assignment) {
-          Assignment assignment = (Assignment) node;
-          initializer = assignment.getRightHandSide();
-        }
-        // add assignment to the list
-        if (initializer != null) {
-          getAssignments(variable).add(node);
-          getAssignments().put(variableName, node);
-          getAssignmentsVariables().put(variableName, variable);
-        }
-      }
-      // remember last assignment (on execution flow) for declaration
-      if (m_forExecutionFlow) {
-        VariableDeclaration declaration = m_variableToDeclaration.get(variableName);
-        declaration.setProperty(KEY_LAST_DECLARATION_ASSIGNMENT, node);
-      }
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Results access
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    /**
-     * @return the {@link MethodDeclaration} to which belongs this frame.
-     */
-    public MethodDeclaration getMethod() {
-      return m_method;
-    }
-
-    /**
-     * @return the {@link VariableDeclaration} for given variable or <code>null</code>.
-     */
-    public VariableDeclaration getDeclaration(Expression variable) {
-      String variableName = getVariableName(variable);
-      return m_variableToDeclaration.get(variableName);
-    }
-
-    /**
-     * @return the last assignment for given variable or <code>null</code>.
-     */
-    public ASTNode getLastAssignment(Expression variable) {
-      String variableName = getVariableName(variable);
-      return m_variableToLastAssignment.get(variableName);
-    }
-
-    /**
-     * @return the {@link List} of assignments for given variable.
-     */
-    public List<ASTNode> getAssignments(Expression variable) {
-      String variableName = getVariableName(variable);
-      List<ASTNode> assignments = m_variableToAssignments.get(variableName);
-      if (assignments == null) {
-        assignments = Lists.newArrayList();
-        m_variableToAssignments.put(variableName, assignments);
-      }
-      return assignments;
-    }
-
-    /**
-     * @return the {@link Map} of all assignments in this {@link ExecutionFlowFrame}.
-     */
-    public Map<String, ASTNode> getAssignments() {
-      return m_assignments;
-    }
-
-    /**
-     * @return the {@link Map} of all assignments in this {@link ExecutionFlowFrame}.
-     */
-    public Map<String, Expression> getAssignmentsVariables() {
-      return m_assignmentsVariables;
-    }
-
-    /**
-     * @return the {@link List} of {@link Expression}'s for same given variable.
-     */
-    public List<Expression> getReferences(Expression variable) {
-      // find list of references
-      List<Expression> references;
-      {
-        String variableName = getVariableName(variable);
-        references = m_variableToReferences.get(variableName);
-        if (references == null) {
-          references = Lists.newArrayList();
-          m_variableToReferences.put(variableName, references);
-        }
-      }
-      // add given reference
-      if (!references.contains(variable)) {
-        references.add(variable);
-      }
-      // return final list
-      return references;
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return {@link List} of invocations ( {@link ConstructorInvocation}, {@link MethodInvocation}
-   *         or {@link ClassInstanceCreation} ) of given method on execution flow.
-   */
-  public static List<ASTNode> getInvocations(ExecutionFlowDescription flowDescription,
-      MethodDeclaration methodDeclaration) {
-    final List<ASTNode> invocations = Lists.newArrayList();
-    // prepare required values
-    IMethodBinding requiredBinding = getMethodBinding(methodDeclaration);
-    if (requiredBinding == null) {
-      return invocations;
-    }
-    final String requiredType = getFullyQualifiedName(requiredBinding.getDeclaringClass(), false);
-    final String requiredSignature = getMethodSignature(methodDeclaration);
-    // visit execution flow
-    ExecutionFlowUtils.visit(
-        new VisitingContext(true),
-        flowDescription,
-        new ExecutionFlowFrameVisitor() {
-          @Override
-          public void endVisit(MethodInvocation node) {
-            IMethodBinding binding = getMethodBinding(node);
-            addInvocation(node, binding);
-          }
-
-          @Override
-          public void endVisit(ClassInstanceCreation node) {
-            IMethodBinding binding = getCreationBinding(node);
-            addInvocation(node, binding);
-          }
-
-          @Override
-          public void endVisit(ConstructorInvocation node) {
-            IMethodBinding binding = getBinding(node);
-            addInvocation(node, binding);
-          }
-
-          private void addInvocation(ASTNode invocation, IMethodBinding binding) {
-            if (binding != null) {
-              String signature = getMethodSignature(binding);
-              String type = getFullyQualifiedName(binding.getDeclaringClass(), false);
-              if (signature.equals(requiredSignature) && type.equals(requiredType)) {
-                invocations.add(invocation);
-              }
-            }
-          }
-        });
-    //
-    return invocations;
-  }
-
-  /**
-   * <p>
-   * Custom subclass of {@link ASTVisitor}, enhanced by {@link ByteBuddy}.
-   * </p>
-   * <p>
-   * This class only exists for convenience, in order to access the fields within
-   * an {@link ExecutionFlowHandler}. In principle, it is also possible to define
-   * those fields directly in {@link ByteBuddy}. However, then those fields have
-   * to both be set and read via reflection.
-   * </p>
-   *
-   * @see ExecutionFlowHandler
-   */
-  public static class VisitorStub extends ASTVisitor {
-    private final VisitingContext context;
-    private final ExecutionFlowDescription flowDescription;
-    private final ExecutionFlowFrameVisitor visitor;
-
-    public VisitorStub(VisitingContext context, ExecutionFlowDescription flowDescription,
-        ExecutionFlowFrameVisitor visitor) {
-      this.context = context;
-      this.flowDescription = flowDescription;
-      this.visitor = visitor;
-    }
-  }
-
-  /**
-   * <p>
-   * Custom invocation handler used by {@link ByteBuddy} on an enhanced
-   * {@link ASTVisitor}.
-   * </p>
-   * <p>
-   * All method invocations of the enhanced base class are delegated to the main
-   * visitor. This visitor is stored in an internal field of the enhanced object.
-   * Special code is executed for AST nodes of type
-   * {@link AnonymousClassDeclaration}, {@link ClassInstanceCreation},
-   * {@link MethodInvocation} and {@link ConstructorInvocation}.
-   * </p>
-   * <p>
-   * This handler may <b>only</b> be used for objects of type {@link VisitorStub}.
-   * </p>
-   *
-   * @see VisitorStub
-   */
-  private static class ExecutionFlowHandler implements InvocationHandler {
-    @Override
-    public Object invoke(Object obj, Method method, Object[] args) throws Throwable {
-      VisitorStub stub = (VisitorStub) obj;
-      // routing
-      Class<?>[] parameterTypes = method.getParameterTypes();
-      if (parameterTypes.length == 1) {
-        Class<?> parameterType = parameterTypes[0];
-        if (method.getName().equals("visit")) {
-          if (parameterType == AnonymousClassDeclaration.class) {
-            visit(stub, (AnonymousClassDeclaration) args[0]);
-          }
-        } else if (method.getName().equals("endVisit")) {
-          if (parameterType == ClassInstanceCreation.class) {
-            endVisit(stub, (ClassInstanceCreation) args[0]);
-          } else if (parameterType == MethodInvocation.class) {
-            endVisit(stub, (MethodInvocation) args[0]);
-          } else if (parameterType == ConstructorInvocation.class) {
-            endVisit(stub, (ConstructorInvocation) args[0]);
-          }
-        }
-      }
-      // use main visitor
-      try {
-        return method.invoke(stub.visitor, args);
-      } catch (InvocationTargetException e) {
-        throw e.getCause();
-      }
-    }
-
-    private boolean visit(VisitorStub stub, AnonymousClassDeclaration node) {
-      return shouldVisitAnonymousClassDeclaration(node);
-    }
-
-    private void endVisit(VisitorStub stub, ClassInstanceCreation node) {
-      // quick check
-      {
-        String identifier = stub.flowDescription.geTypeDeclaration().getName().getIdentifier();
-        if (!node.toString().contains(identifier)) {
-          return;
-        }
-      }
-      // check for local constructor
-      MethodDeclaration methodDeclaration = getLocalConstructorDeclaration(node);
-      if (methodDeclaration != null) {
-        // redirect execution flow to constructor
-        ExecutionFlowUtils.visit(stub.context, stub.flowDescription, stub.visitor, List.of(methodDeclaration));
-      }
-    }
-
-    private void endVisit(VisitorStub stub, MethodInvocation node) {
-      // check for local method invocation
-      MethodDeclaration methodDeclaration = getLocalMethodDeclaration(node);
-      if (methodDeclaration != null) {
-        methodDeclaration.setProperty(KEY_FRAME_INVOCATION, node);
-        // check for qualified local invocation, for example "appl.open()", so visit it
-        // as type
-        if (node.getExpression() != null && !(node.getExpression() instanceof ThisExpression)) {
-          ExecutionFlowUtils.visit(stub.context, stub.flowDescription, stub.visitor, List.of(methodDeclaration));
-        } else {
-          ExecutionFlowUtils.visit(stub.context, stub.flowDescription, stub.visitor, methodDeclaration);
-        }
-      }
-    }
-
-    private void endVisit(VisitorStub stub, ConstructorInvocation node) {
-      MethodDeclaration constructor = getConstructor(node);
-      constructor.setProperty(KEY_FRAME_INVOCATION, node);
-      ExecutionFlowUtils.visit(stub.context, stub.flowDescription, stub.visitor, List.of(constructor));
-    }
-  }
+	static final String KEY_FRAME_INVOCATION = "ExecutionFlowUtils.frameInvocation";
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private ExecutionFlowUtils() {
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ExecutionFlowFrameVisitor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * The extension of {@link ASTVisitor} for visiting {@link TypeDeclaration},
+	 * {@link MethodDeclaration} and {@link Block}, i.e. AST nodes that form frames.
+	 *
+	 * @author scheglov_ke
+	 */
+	public static class ExecutionFlowFrameVisitor extends ASTVisitor {
+		public Statement m_currentStatement;
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Limitations
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public boolean visit(AnonymousClassDeclaration node) {
+			return shouldVisitAnonymousClassDeclaration(node);
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Frames
+		//
+		////////////////////////////////////////////////////////////////////////////
+		/**
+		 * Enter into frame.<br>
+		 * Frame is {@link TypeDeclaration}, {@link MethodDeclaration} or {@link Block}.
+		 *
+		 * @return <code>true</code> if we should enter into given frame.
+		 */
+		public boolean enterFrame(ASTNode node) {
+			return true;
+		}
+
+		/**
+		 * Leaves frame entered by {@link #enterFrame(ASTNode)}.
+		 */
+		public void leaveFrame(ASTNode node) {
+		}
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Visiting context
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Global, "visiting level" context.
+	 */
+	public static class VisitingContext {
+		boolean classInitialized;
+		boolean instanceInitialized;
+		boolean useBinaryFlow;
+		final Set<MethodDeclaration> visitedMethods = Sets.newHashSet();
+
+		public VisitingContext(boolean useBinaryFlow) {
+			this.useBinaryFlow = useBinaryFlow;
+		}
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Visiting
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final String WBP_PARSER_CONSTRUCTOR = "@wbp.parser.constructor";
+
+	/**
+	 * Tracks execution flow along given {@link ExecutionFlowDescription}.
+	 *
+	 * @param flowDescription
+	 *          the {@link ExecutionFlowDescription} with starting methods and binary flow
+	 *          information.
+	 * @param useBinaryFlow
+	 *          is <code>true</code> if we should use binary flow information from
+	 *          {@link ExecutionFlowDescription}.
+	 * @param visitor
+	 *          the {@link ExecutionFlowFrameVisitor} to inform about tracking execution flow.
+	 */
+	public static void visit(VisitingContext context,
+			ExecutionFlowDescription flowDescription,
+			ExecutionFlowFrameVisitor visitor) {
+		visit(context, flowDescription, visitor, flowDescription.getStartMethods());
+	}
+
+	/**
+	 * Visit nodes starting from given methods.
+	 *
+	 * @param flowDescription
+	 *          the {@link ExecutionFlowDescription} with starting methods and binary flow
+	 *          information.
+	 * @param useBinaryFlow
+	 *          is <code>true</code> if we should use binary flow information from
+	 *          {@link ExecutionFlowDescription}.
+	 * @param visitor
+	 *          the {@link ExecutionFlowFrameVisitor} to inform about tracking execution flow.
+	 */
+	public static void visit(VisitingContext context,
+			ExecutionFlowDescription flowDescription,
+			ExecutionFlowFrameVisitor visitor,
+			List<MethodDeclaration> methodsToVisit) {
+		TypeDeclaration typeDeclaration = AstNodeUtils.getParentType(methodsToVisit.get(0));
+		if (!context.instanceInitialized) {
+			visitor.enterFrame(typeDeclaration);
+		}
+		for (MethodDeclaration method : methodsToVisit) {
+			// before any method (static or instance), visit class initialization code
+			if (!context.classInitialized) {
+				visitFields(visitor, typeDeclaration, true);
+				visitInitializers(context, flowDescription, visitor, typeDeclaration, true);
+				context.classInitialized = true;
+			}
+			// before any instance method, visit instance initialization code
+			if (!context.instanceInitialized && !isStatic(method)) {
+				visitFields(visitor, typeDeclaration, false);
+				visitInitializers(context, flowDescription, visitor, typeDeclaration, false);
+				context.instanceInitialized = true;
+			}
+			// OK, visit current method
+			visit(context, flowDescription, visitor, method);
+		}
+	}
+
+	/**
+	 * Visits single {@link MethodDeclaration}.
+	 */
+	private static void visit(VisitingContext context,
+			ExecutionFlowDescription flowDescription,
+			ExecutionFlowFrameVisitor visitor,
+			MethodDeclaration method) {
+		if (visitor.enterFrame(method)) {
+			// parameters
+			for (SingleVariableDeclaration parameter : DomGenerics.parameters(method)) {
+				parameter.accept(visitor);
+			}
+			// body
+			Block body = method.getBody();
+			if (body != null) {
+				visitStatement(context, flowDescription, body, visitor);
+			}
+			// leave method
+			visitor.leaveFrame(method);
+		}
+	}
+
+	/**
+	 * Visits static or instance {@link FieldDeclaration}'s.
+	 */
+	private static void visitFields(ExecutionFlowFrameVisitor visitor,
+			TypeDeclaration typeDeclaration,
+			boolean onlyStatic) {
+		FieldDeclaration[] fields = typeDeclaration.getFields();
+		for (FieldDeclaration fieldDeclaration : fields) {
+			boolean isStatic = isStatic(fieldDeclaration);
+			if (onlyStatic && isStatic) {
+				fieldDeclaration.accept(visitor);
+			}
+			if (!onlyStatic && !isStatic) {
+				fieldDeclaration.accept(visitor);
+			}
+		}
+	}
+
+	/**
+	 * Visits static or instance {@link Initializer}'s.
+	 */
+	private static void visitInitializers(VisitingContext context,
+			ExecutionFlowDescription flowDescription,
+			ExecutionFlowFrameVisitor visitor,
+			TypeDeclaration typeDeclaration,
+			boolean onlyStatic) {
+		List<BodyDeclaration> bodyDeclarations = DomGenerics.bodyDeclarations(typeDeclaration);
+		for (BodyDeclaration bodyDeclaration : bodyDeclarations) {
+			boolean isStatic = isStatic(bodyDeclaration);
+			if (bodyDeclaration instanceof Initializer && context != null) {
+				Initializer initializer = (Initializer) bodyDeclaration;
+				if (onlyStatic && isStatic) {
+					visitStatement(context, flowDescription, initializer.getBody(), visitor);
+				}
+				if (!onlyStatic && !isStatic) {
+					visitStatement(context, flowDescription, initializer.getBody(), visitor);
+				}
+			}
+		}
+	}
+
+	/**
+	 * Visit {@link ASTNode}'s "unconditionally accessible" starting from given {@link Statement}.
+	 */
+	private static void visitStatement(VisitingContext context,
+			ExecutionFlowDescription flowDescription,
+			Statement statement,
+			ExecutionFlowFrameVisitor visitor) {
+		// check if we already visited MethodDeclaration
+		if (statement.getLocationInParent() == MethodDeclaration.BODY_PROPERTY) {
+			MethodDeclaration methodDeclaration = (MethodDeclaration) statement.getParent();
+			if (context.visitedMethods.contains(methodDeclaration)) {
+				return;
+			}
+			context.visitedMethods.add(methodDeclaration);
+		}
+		// visit "binary flow" methods that should be visited BEFORE current Statement
+		visitBinaryFlowMethods(true, context, flowDescription, statement, visitor);
+		// visit current Statement
+		flowDescription.enterStatement(statement);
+		try {
+			visitStatement0(context, flowDescription, statement, visitor);
+		} finally {
+			flowDescription.leaveStatement(statement);
+		}
+		// visit "binary flow" methods that should be visited AFTER current Statement
+		visitBinaryFlowMethods(false, context, flowDescription, statement, visitor);
+	}
+
+	/**
+	 * Visit {@link ASTNode}'s "unconditionally accessible" starting from given {@link Statement}.
+	 */
+	private static void visitStatement0(VisitingContext context,
+			ExecutionFlowDescription flowDescription,
+			Statement statement,
+			ExecutionFlowFrameVisitor visitor) {
+		visitor.m_currentStatement = statement;
+		if (statement instanceof Block) {
+			Block block = (Block) statement;
+			if (visitor.enterFrame(block)) {
+				//
+				for (Statement childStatement : DomGenerics.statements(block)) {
+					visitStatement(context, flowDescription, childStatement, visitor);
+				}
+				//
+				visitor.leaveFrame(block);
+			}
+		} else if (statement instanceof TryStatement) {
+			TryStatement tryStatement = (TryStatement) statement;
+			visitStatement(context, flowDescription, tryStatement.getBody(), visitor);
+		} else if (statement instanceof IfStatement) {
+			IfStatement ifStatement = (IfStatement) statement;
+			if (shouldVisit_IfStatement_Then(ifStatement)) {
+				visitStatement(context, flowDescription, ifStatement.getThenStatement(), visitor);
+			} else if (ifStatement.getElseStatement() != null
+					&& shouldVisit_IfStatement_Else(ifStatement)) {
+				visitStatement(context, flowDescription, ifStatement.getElseStatement(), visitor);
+			}
+		} else if (shouldVisitStatement(statement)) {
+			ASTVisitor complexVisitor = getInterceptingVisitor(context, flowDescription, visitor);
+			statement.accept(complexVisitor);
+		}
+	}
+
+	/**
+	 * Local storage for the enhanced {@link ASTVisitor} class. Classes are loaded
+	 * with the {@link ExecutionFlowUtils} class-loader, meaning there should only
+	 * exists a single instance of this class at a time. All instances are should be
+	 * created from this class. We have to avoid creating a separate class for each
+	 * enhanced visitor, as the {@link ClassLoader} is never discarded and thus, the
+	 * classes stay in memory indefinitely. If left unchecked, this may lead to an
+	 * {@link OutOfMemoryError}.
+	 */
+	private static final TypeCache<TypeCache.SimpleKey> PROXY_CACHE = new TypeCache.WithInlineExpunction<>(
+			TypeCache.Sort.WEAK);
+
+	private static ASTVisitor getInterceptingVisitor(final VisitingContext context,
+			final ExecutionFlowDescription flowDescription, final ExecutionFlowFrameVisitor visitor) {
+
+		DynamicType.Builder<VisitorStub> builder = new ByteBuddy() //
+				.subclass(VisitorStub.class) //
+				.method(ElementMatchers.any()) //
+				.intercept(InvocationHandlerAdapter.of(new ExecutionFlowHandler()));
+
+		ClassLoader proxyClassLoader = ExecutionFlowUtils.class.getClassLoader();
+		TypeCache.SimpleKey proxyKey = new TypeCache.SimpleKey(VisitorStub.class);
+
+		try {
+			return (ASTVisitor) PROXY_CACHE
+					.findOrInsert(proxyClassLoader, proxyKey, () -> builder.make().load(proxyClassLoader).getLoaded())
+					.getConstructor(VisitingContext.class, ExecutionFlowDescription.class, ExecutionFlowFrameVisitor.class)
+					.newInstance(context, flowDescription, visitor);
+		} catch (ReflectiveOperationException e) {
+			throw new DesignerException(ICoreExceptionConstants.EVAL_BYTEBUDDY, e);
+		}
+	}
+
+	/**
+	 * In general we should not visit anonymous classes, they are usually event handlers. However
+	 * there are special cases, such as <code>EventQueue.invokeLater(Runnable)</code> in Swing.
+	 */
+	private static boolean shouldVisitAnonymousClassDeclaration(final AnonymousClassDeclaration anonymous) {
+		return ExecutionUtils.runObjectLog(new RunnableObjectEx<Boolean>() {
+			@Override
+			public Boolean runObject() throws Exception {
+				for (ExecutionFlowProvider provider : getExecutionFlowProviders()) {
+					if (provider.shouldVisit(anonymous)) {
+						return true;
+					}
+				}
+				return false;
+			}
+		}, false);
+	}
+
+	/**
+	 * @return all {@link ExecutionFlowProvider}'s.
+	 */
+	private static List<ExecutionFlowProvider> getExecutionFlowProviders() {
+		return ExternalFactoriesHelper.getElementsInstances(
+				ExecutionFlowProvider.class,
+				"org.eclipse.wb.core.java.executionFlowProviders",
+				"provider");
+	}
+
+	/**
+	 * Visits {@link MethodDeclaration} that should be visited as part of binary execution flow for
+	 * given {@link Statement}.
+	 *
+	 * @param beforeStatement
+	 *          is <code>true</code> if we should visit {@link MethodDeclaration}'s executed before
+	 *          {@link Statement}, and <code>false</code>, if {@link MethodDeclaration}'s are visited
+	 *          after (in reality - during) executing given {@link Statement}. Currently
+	 *          <code>true</code> is used only for {@link MethodDeclaration}'s executed during
+	 *          {@link SuperConstructorInvocation}.
+	 */
+	private static void visitBinaryFlowMethods(boolean beforeStatement,
+			VisitingContext context,
+			ExecutionFlowDescription flowDescription,
+			Statement statement,
+			ExecutionFlowFrameVisitor visitor) {
+		if (context.useBinaryFlow) {
+			List<MethodDeclaration> binaryFlowMethods =
+					beforeStatement
+					? flowDescription.getBinaryFlowMethodsBefore(statement)
+							: flowDescription.getBinaryFlowMethodsAfter(statement);
+			if (binaryFlowMethods != null) {
+				for (MethodDeclaration method : binaryFlowMethods) {
+					visit(context, flowDescription, visitor, method);
+				}
+			}
+		}
+	}
+
+	/**
+	 * @return <code>true</code> if given {@link Statement} should be visited.
+	 */
+	private static boolean shouldVisitStatement(Statement statement) {
+		// usual statements
+		if (statement instanceof ExpressionStatement
+				|| statement instanceof VariableDeclarationStatement
+				|| statement instanceof ConstructorInvocation
+				|| statement instanceof SuperConstructorInvocation
+				|| statement instanceof ReturnStatement) {
+			return true;
+		}
+		// not supported statement
+		return false;
+	}
+
+	/**
+	 * @return <code>true</code> if given "then" statement of {@link IfStatement} should be visited.
+	 */
+	private static boolean shouldVisit_IfStatement_Then(IfStatement ifStatement) {
+		Expression expression = ifStatement.getExpression();
+		// if (true) {}
+		if (expression instanceof BooleanLiteral) {
+			BooleanLiteral literal = (BooleanLiteral) expression;
+			return literal.booleanValue();
+		}
+		// if (Beans.isDesignTime()) {}
+		if (AstNodeUtils.isMethodInvocation(expression, "isDesignTime()")) {
+			return true;
+		}
+		// special case: lazy creation
+		{
+			Block block = (Block) ifStatement.getParent();
+			if (block.getParent() instanceof MethodDeclaration) {
+				MethodDeclaration method = (MethodDeclaration) block.getParent();
+				if (LazyVariableSupportUtils.getInformation(method) != null) {
+					return true;
+				}
+			}
+		}
+		// no
+		return false;
+	}
+
+	/**
+	 * @return <code>true</code> if given "else" statement of {@link IfStatement} should be visited.
+	 */
+	private static boolean shouldVisit_IfStatement_Else(IfStatement ifStatement) {
+		Expression expression = ifStatement.getExpression();
+		// if (false) {}
+		if (expression instanceof BooleanLiteral) {
+			BooleanLiteral literal = (BooleanLiteral) expression;
+			return !literal.booleanValue();
+		}
+		// if (!Beans.isDesignTime()) {}
+		if (expression instanceof PrefixExpression) {
+			PrefixExpression prefixExpression = (PrefixExpression) expression;
+			if (prefixExpression.getOperator() == PrefixExpression.Operator.NOT
+					&& AstNodeUtils.isMethodInvocation(prefixExpression.getOperand(), "isDesignTime()")) {
+				return true;
+			}
+		}
+		// no
+		return false;
+	}
+
+	/**
+	 * @return single constructor that should be used by Designer. This constructor should be single
+	 *         or marked with {@link #WBP_PARSER_CONSTRUCTOR} comment. If multiple constructors found
+	 *         and none is marked, then exception will be thrown.
+	 */
+	public static MethodDeclaration getExecutionFlowConstructor(TypeDeclaration typeDeclaration) {
+		// build list of constructors
+		List<MethodDeclaration> constructors = Lists.newArrayList();
+		for (MethodDeclaration methodDeclaration : typeDeclaration.getMethods()) {
+			if (methodDeclaration.isConstructor()) {
+				constructors.add(methodDeclaration);
+			}
+		}
+		// no constructors
+		if (constructors.isEmpty()) {
+			return null;
+		}
+		// check for good case - single constructor
+		if (constructors.size() == 1) {
+			return constructors.get(0);
+		}
+		// several constructors
+		for (MethodDeclaration constructor : constructors) {
+			if (hasJavaDocTag(constructor, WBP_PARSER_CONSTRUCTOR)) {
+				return constructor;
+			}
+		}
+		// try to find default constructor, use extensions
+		for (ExecutionFlowProvider provider : getExecutionFlowProviders()) {
+			MethodDeclaration constructor = provider.getDefaultConstructor(typeDeclaration);
+			if (constructor != null) {
+				return constructor;
+			}
+		}
+		// we can not select correct constructor
+		throw new MultipleConstructorsError();
+	}
+
+	/**
+	 * @return the {@link MethodDeclaration} marked with @wbp.parse.entryPoint tag, may be
+	 *         <code>null</code>.
+	 */
+	public static MethodDeclaration getExecutionFlow_entryPoint(TypeDeclaration typeDeclaration) {
+		for (MethodDeclaration method : typeDeclaration.getMethods()) {
+			if (hasJavaDocTag(method, "@wbp.parser.entryPoint")) {
+				return method;
+			}
+		}
+		return null;
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Assignment
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final String KEY_LAST_VARIABLE_STAMP = "KEY_LAST_VARIABLE_STAMP";
+	private static final String KEY_DECLARATION = "KEY_DECLARATION";
+	private static final String KEY_REFERENCES = "KEY_REFERENCES";
+	private static final String KEY_ASSIGNMENTS = "KEY_ASSIGNMENTS";
+	private static final String KEY_LAST_ASSIGNMENT = "KEY_LAST_ASSIGNMENT";
+	private static final String KEY_LAST_DECLARATION_ASSIGNMENT = "KEY_LAST_DECLARATION_ASSIGNMENT";
+
+	/**
+	 * @return <code>true</code> if given variable has cache stamp (there was related bug, so we test
+	 *         for this now).
+	 */
+	public static boolean hasVariableStamp(ASTNode variable) {
+		return variable.getProperty(KEY_LAST_VARIABLE_STAMP) != null;
+	}
+
+	/**
+	 * @return the {@link VariableDeclaration} for given variable.
+	 */
+	public static VariableDeclaration getDeclaration(ExecutionFlowDescription flowDescription,
+			ASTNode variable) {
+		if (EnvironmentUtils.isTestingTime()) {
+			Assert.isTrue(isVariable(variable));
+		}
+		return (VariableDeclaration) getVariableCachedValue(flowDescription, variable, KEY_DECLARATION);
+	}
+
+	/**
+	 * @return the {@link List} of {@link Expression}'s that reference same variable as given.
+	 */
+	public static List<Expression> getReferences(ExecutionFlowDescription flowDescription,
+			ASTNode variable) {
+		if (EnvironmentUtils.isTestingTime()) {
+			Assert.isTrue(isVariable(variable));
+		}
+		return getVariableCachedList_notNull(flowDescription, variable, KEY_REFERENCES);
+	}
+
+	/**
+	 * @return the {@link List} of {@link Expression} where values are assignment to the given
+	 *         variable.
+	 */
+	public static List<Expression> getAssignments(ExecutionFlowDescription flowDescription,
+			ASTNode variable) {
+		if (EnvironmentUtils.isTestingTime()) {
+			Assert.isTrue(isVariable(variable));
+		}
+		return getVariableCachedList_notNull(flowDescription, variable, KEY_ASSIGNMENTS);
+	}
+
+	/**
+	 * @return {@link Assignment} or {@link VariableDeclarationFragment} where value was assignment
+	 *         for given variable; or <code>null</code> if no assignment found.
+	 *
+	 * @param flowDescription
+	 *          the {@link ExecutionFlowDescription} from which we should start searching.
+	 */
+	public static ASTNode getLastAssignment(ExecutionFlowDescription flowDescription, ASTNode variable) {
+		if (EnvironmentUtils.isTestingTime()) {
+			Assert.isTrue(isVariable(variable));
+		}
+		return (ASTNode) getVariableCachedValue(flowDescription, variable, KEY_LAST_ASSIGNMENT);
+	}
+
+	/**
+	 * @return the {@link List} result from
+	 *         {@link #getVariableCachedValue(ExecutionFlowDescription, ASTNode, String)}, ensures
+	 *         that if no real {@link List}, empty {@link List} is returned.
+	 */
+	@SuppressWarnings("unchecked")
+	private static <T> List<T> getVariableCachedList_notNull(ExecutionFlowDescription flowDescription,
+			ASTNode variable,
+			String key) {
+		List<T> result = (List<T>) getVariableCachedValue(flowDescription, variable, key);
+		if (result == null) {
+			return ImmutableList.of();
+		} else {
+			return result;
+		}
+	}
+
+	/**
+	 * @return the final {@link Expression} for given one. This method will traverse
+	 *         {@link SimpleName}'s until last assignment of "real" {@link Expression} will be found.
+	 */
+	public static Expression getFinalExpression(ExecutionFlowDescription flowDescription,
+			Expression expression) {
+		// traverse assignments
+		while (expression instanceof SimpleName) {
+			ASTNode assignment = getLastAssignment(flowDescription, expression);
+			if (assignment instanceof Assignment) {
+				expression = ((Assignment) assignment).getRightHandSide();
+			} else if (assignment instanceof VariableDeclarationFragment) {
+				expression = ((VariableDeclarationFragment) assignment).getInitializer();
+			} else {
+				break;
+			}
+		}
+		// return final expression
+		return expression;
+	}
+
+	/**
+	 * @return the cached value for given variable.
+	 */
+	private static Object getVariableCachedValue(ExecutionFlowDescription flowDescription,
+			ASTNode variable,
+			String key) {
+		if (clearCachedValuesForDanglingNode(variable)) {
+			return null;
+		}
+		// check for cached value
+		{
+			Long lastStamp = (Long) variable.getProperty(KEY_LAST_VARIABLE_STAMP);
+			if (lastStamp != null && lastStamp.longValue() == variable.getAST().modificationCount()) {
+				return variable.getProperty(key);
+			}
+		}
+		// well, we don't have cached value, so prepare
+		prepareAssignmentInformation(flowDescription);
+		// return newly created result
+		return variable.getProperty(key);
+	}
+
+	/**
+	 * When variable {@link ASTNode} is dangling, we will not able to visit it on execution flow, so
+	 * have to clear cached information manually.
+	 *
+	 * @return <code>true</code> if node is dangling, so no need to visit execution flow.
+	 */
+	private static boolean clearCachedValuesForDanglingNode(ASTNode variable) {
+		if (isDanglingNode(variable)) {
+			for (Field field : ExecutionFlowUtils.class.getDeclaredFields()) {
+				String fieldName = field.getName();
+				if (fieldName.startsWith("KEY_")) {
+					variable.setProperty(fieldName, null);
+				}
+			}
+			return true;
+		}
+		return false;
+	}
+
+	/**
+	 * Tracks assignments on execution flow starting from given {@link ExecutionFlowDescription} and
+	 * remember results in {@link ASTNode} properties.
+	 */
+	private static void prepareAssignmentInformation(ExecutionFlowDescription flowDescription) {
+		final Long assignmentStamp = flowDescription.getAST().modificationCount();
+		// visit execution flow, find declarations/assignments for all variables
+		visit(new VisitingContext(true), flowDescription, new AbstractVariablesExecutionFlowVisitor(
+				true) {
+			@Override
+			public void endVisit(Assignment node) {
+				Expression leftSide = node.getLeftHandSide();
+				if (isVariable(leftSide)) {
+					Expression variable = leftSide;
+					executionFlowContext.addAssignment(variable, node);
+					executionFlowContext.storeAssignments(variable);
+				}
+			}
+
+			////////////////////////////////////////////////////////////////////////////
+			//
+			// Generic ASTNode pre/post visiting
+			//
+			////////////////////////////////////////////////////////////////////////////
+			@Override
+			public void postVisit(ASTNode node) {
+				// store assignment for variable usage
+				if (node instanceof Expression && isVariable(node)) {
+					Expression variable = (Expression) node;
+					variable.setProperty(KEY_LAST_VARIABLE_STAMP, assignmentStamp);
+					executionFlowContext.storeAssignments(variable);
+				}
+			}
+		});
+		// visit CompilationUnit, find references for all variables
+		flowDescription.getCompilationUnit().accept(new AbstractVariablesExecutionFlowVisitor(false) {
+			@Override
+			public boolean visit(AnonymousClassDeclaration node) {
+				return true;
+			}
+
+			@Override
+			public void preVisit(ASTNode node) {
+				super.preVisit(node);
+				if (isFrameNode(node)) {
+					enterFrame(node);
+					// visit all fields on enter TypeDeclaration
+					if (node instanceof TypeDeclaration) {
+						TypeDeclaration typeDeclaration = (TypeDeclaration) node;
+						visitFields(this, typeDeclaration, true);
+						visitFields(this, typeDeclaration, false);
+					}
+				}
+			}
+
+			@Override
+			public void postVisit(ASTNode node) {
+				super.postVisit(node);
+				if (isFrameNode(node)) {
+					leaveFrame(node);
+				}
+				if (node instanceof Expression) {
+					if (isVariable(node)) {
+						executionFlowContext.storeReferences((Expression) node);
+					}
+					// special support for "instanceOfTopType.field"
+					if (node instanceof QualifiedName) {
+						QualifiedName qualifiedName = (QualifiedName) node;
+						CompilationUnit unit = (CompilationUnit) qualifiedName.getRoot();
+						TypeDeclaration topType = (TypeDeclaration) unit.types().get(0);
+						if (qualifiedName.getQualifier().resolveTypeBinding() == topType.resolveBinding()) {
+							executionFlowContext.storeReferences(qualifiedName.getName());
+						}
+					}
+				}
+			}
+
+			private boolean isFrameNode(ASTNode node) {
+				return node instanceof TypeDeclaration
+						|| node instanceof MethodDeclaration
+						|| node instanceof Block;
+			}
+		});
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AbstractVariablesExecutionFlowVisitor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Abstract visitor that tracks frames and variables.
+	 *
+	 * @author scheglov_ke
+	 */
+	private static abstract class AbstractVariablesExecutionFlowVisitor
+	extends
+	ExecutionFlowFrameVisitor {
+		protected final ExecutionFlowContext executionFlowContext;
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public AbstractVariablesExecutionFlowVisitor(boolean forExecutionFlow) {
+			executionFlowContext = new ExecutionFlowContext(forExecutionFlow);
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Frames tracking
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public boolean enterFrame(ASTNode node) {
+			executionFlowContext.enterFrame(node);
+			if (node instanceof MethodDeclaration) {
+				MethodDeclaration methodDeclaration = (MethodDeclaration) node;
+				for (SingleVariableDeclaration parameter : DomGenerics.parameters(methodDeclaration)) {
+					executionFlowContext.define(parameter);
+				}
+			}
+			return true;
+		}
+
+		@Override
+		public void leaveFrame(ASTNode node) {
+			executionFlowContext.leaveFrame();
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Variables tracking
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public void preVisit(ASTNode node) {
+			// "pre" visit because we should visit declaration before SimpleName
+			if (node instanceof VariableDeclaration) {
+				VariableDeclaration variableDeclaration = (VariableDeclaration) node;
+				executionFlowContext.define(variableDeclaration);
+			}
+		}
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Execution frames support
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Holder of information about execution - frames and variables.
+	 *
+	 * @author scheglov_ke
+	 */
+	private static final class ExecutionFlowContext {
+		private final boolean m_forExecutionFlow;
+		private final LinkedList<ExecutionFlowFrame> m_stack = Lists.newLinkedList();
+		private ExecutionFlowFrame m_currentFrame;
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public ExecutionFlowContext(boolean forExecutionFlow) {
+			m_forExecutionFlow = forExecutionFlow;
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Frame operation
+		//
+		////////////////////////////////////////////////////////////////////////////
+		private MethodDeclaration getNewFrameMethod(ASTNode node) {
+			if (node instanceof MethodDeclaration) {
+				return (MethodDeclaration) node;
+			}
+			if (m_currentFrame != null) {
+				return m_currentFrame.getMethod();
+			}
+			return null;
+		}
+
+		/**
+		 * Creates new frame, all subsequent variable declarations will go into this frame.
+		 */
+		public void enterFrame(ASTNode node) {
+			m_currentFrame =
+					new ExecutionFlowFrame(getNewFrameMethod(node),
+							m_forExecutionFlow,
+							node instanceof TypeDeclaration);
+			m_stack.addFirst(m_currentFrame);
+		}
+
+		/**
+		 * Removes current frame and all its variable declarations.
+		 */
+		public void leaveFrame() {
+			Assert.isTrue(m_stack.removeFirst() == m_currentFrame);
+			m_currentFrame = m_stack.peek();
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Variables
+		//
+		////////////////////////////////////////////////////////////////////////////
+		/**
+		 * Adds given variable as defined in current frame.
+		 */
+		public void define(VariableDeclaration variableDeclaration) {
+			ExecutionFlowFrame frame = getFrameForDeclaration(variableDeclaration);
+			frame.define(variableDeclaration);
+		}
+
+		private ExecutionFlowFrame getFrameForDeclaration(VariableDeclaration variableDeclaration) {
+			// we may visit "type" frames too often (this is bad)
+			// so, declare fields in first "type" frame
+			if (variableDeclaration.getLocationInParent() == FieldDeclaration.FRAGMENTS_PROPERTY) {
+				for (int i = m_stack.size() - 1; i >= 0; i--) {
+					ExecutionFlowFrame frame = m_stack.get(i);
+					if (frame.m_forTypeDeclaration) {
+						return frame;
+					}
+				}
+			}
+			// local variables
+			return m_currentFrame;
+		}
+
+		/**
+		 * Notifies that given variable was assigned value using given {@link Assignment}.
+		 */
+		public void addAssignment(Expression variable, Assignment assignment) {
+			ExecutionFlowFrame definingFrame = getDefiningFrame(variable);
+			if (definingFrame != null) {
+				definingFrame.addAssignment(variable, assignment);
+			}
+		}
+
+		/**
+		 * Stores declaration/assignments of given variable into properties.
+		 */
+		public void storeAssignments(Expression node) {
+			ExecutionFlowFrame definingFrame = getDefiningFrame(node);
+			if (definingFrame != null) {
+				VariableDeclaration declaration = definingFrame.getDeclaration(node);
+				node.setProperty(KEY_DECLARATION, declaration);
+				node.setProperty(KEY_LAST_ASSIGNMENT, definingFrame.getLastAssignment(node));
+				node.setProperty(KEY_ASSIGNMENTS, definingFrame.getAssignments(node));
+			}
+		}
+
+		/**
+		 * Stores references on given variable into properties.
+		 */
+		public void storeReferences(Expression variable) {
+			ExecutionFlowFrame definingFrame = getDefiningFrame(variable);
+			if (definingFrame != null) {
+				variable.setProperty(KEY_REFERENCES, definingFrame.getReferences(variable));
+				// if no "real last assignment", i.e. we are in ASTNode disconnected from execution flow,
+				// use "last assignment" from declaration
+				if (variable.getProperty(KEY_LAST_ASSIGNMENT) == null) {
+					Assert.isTrue(!m_forExecutionFlow);
+					VariableDeclaration declaration = definingFrame.getDeclaration(variable);
+					variable.setProperty(
+							KEY_LAST_ASSIGNMENT,
+							declaration.getProperty(KEY_LAST_DECLARATION_ASSIGNMENT));
+				}
+			}
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Utils
+		//
+		////////////////////////////////////////////////////////////////////////////
+		private ExecutionFlowFrame getDefiningFrame(Expression variable) {
+			for (ExecutionFlowFrame frame : m_stack) {
+				if (frame.defines(variable)) {
+					return frame;
+				}
+			}
+			return null;
+		}
+	}
+	/**
+	 * Holder of variables, declared in single frame: {@link TypeDeclaration},
+	 * {@link MethodDeclaration} or {@link Block}.
+	 *
+	 * @author scheglov_ke
+	 */
+	private static final class ExecutionFlowFrame {
+		private final MethodDeclaration m_method;
+		private final boolean m_forExecutionFlow;
+		private final boolean m_forTypeDeclaration;
+		private final Map<String, VariableDeclaration> m_variableToDeclaration = Maps.newHashMap();
+		private final Map<String, ASTNode> m_assignments = Maps.newHashMap();
+		private final Map<String, Expression> m_assignmentsVariables = Maps.newHashMap();
+		private final Map<String, ASTNode> m_variableToLastAssignment = Maps.newHashMap();
+		private final Map<String, List<ASTNode>> m_variableToAssignments = Maps.newHashMap();
+		private final Map<String, List<Expression>> m_variableToReferences = Maps.newHashMap();
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		/**
+		 * @param forExecutionFlow
+		 *          is <code>true</code> if this {@link ExecutionFlowFrame} is created as part of
+		 *          visiting execution flow, so for example last assignment for
+		 *          {@link VariableDeclaration} should be tracked. If <code>false</code>, then we just
+		 *          visit {@link CompilationUnit} using {@link ASTVisitor}, and should not touch/corrupt
+		 *          last assignment in {@link VariableDeclaration}.
+		 * @param forTypeDeclaration
+		 *          is <code>true</code> if this {@link ExecutionFlowFrame} is created for
+		 *          {@link TypeDeclaration}.
+		 */
+		public ExecutionFlowFrame(MethodDeclaration method,
+				boolean forExecutionFlow,
+				boolean forTypeDeclaration) {
+			m_method = method;
+			m_forExecutionFlow = forExecutionFlow;
+			m_forTypeDeclaration = forTypeDeclaration;
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Variables tracking
+		//
+		////////////////////////////////////////////////////////////////////////////
+		/**
+		 * Checks that given variable is defined in this frame.
+		 */
+		public boolean defines(Expression variable) {
+			if (variable instanceof FieldAccess && !m_forTypeDeclaration) {
+				return false;
+			}
+			return getDeclaration(variable) != null;
+		}
+
+		/**
+		 * Adds new variable declared in this frame using given {@link VariableDeclaration}.
+		 */
+		public void define(VariableDeclaration declaration) {
+			SimpleName variable = declaration.getName();
+			String variableName = variable.getIdentifier();
+			m_variableToDeclaration.put(variableName, declaration);
+			// in any case remember this node as assignment
+			addAssignment(variable, declaration);
+		}
+
+		/**
+		 * Adds new assignment (or declaration) node for variable owned by this frame.
+		 */
+		public void addAssignment(Expression variable, ASTNode node) {
+			String variableName = getVariableName(variable);
+			// add last assignment (can be just declaration)
+			m_variableToLastAssignment.put(variableName, node);
+			// add assignment (real, with initializer)
+			{
+				// prepare initializer
+				Expression initializer = null;
+				if (node instanceof VariableDeclaration) {
+					VariableDeclaration declaration = (VariableDeclaration) node;
+					initializer = declaration.getInitializer();
+				} else if (node instanceof Assignment) {
+					Assignment assignment = (Assignment) node;
+					initializer = assignment.getRightHandSide();
+				}
+				// add assignment to the list
+				if (initializer != null) {
+					getAssignments(variable).add(node);
+					getAssignments().put(variableName, node);
+					getAssignmentsVariables().put(variableName, variable);
+				}
+			}
+			// remember last assignment (on execution flow) for declaration
+			if (m_forExecutionFlow) {
+				VariableDeclaration declaration = m_variableToDeclaration.get(variableName);
+				declaration.setProperty(KEY_LAST_DECLARATION_ASSIGNMENT, node);
+			}
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Results access
+		//
+		////////////////////////////////////////////////////////////////////////////
+		/**
+		 * @return the {@link MethodDeclaration} to which belongs this frame.
+		 */
+		public MethodDeclaration getMethod() {
+			return m_method;
+		}
+
+		/**
+		 * @return the {@link VariableDeclaration} for given variable or <code>null</code>.
+		 */
+		public VariableDeclaration getDeclaration(Expression variable) {
+			String variableName = getVariableName(variable);
+			return m_variableToDeclaration.get(variableName);
+		}
+
+		/**
+		 * @return the last assignment for given variable or <code>null</code>.
+		 */
+		public ASTNode getLastAssignment(Expression variable) {
+			String variableName = getVariableName(variable);
+			return m_variableToLastAssignment.get(variableName);
+		}
+
+		/**
+		 * @return the {@link List} of assignments for given variable.
+		 */
+		public List<ASTNode> getAssignments(Expression variable) {
+			String variableName = getVariableName(variable);
+			List<ASTNode> assignments = m_variableToAssignments.get(variableName);
+			if (assignments == null) {
+				assignments = Lists.newArrayList();
+				m_variableToAssignments.put(variableName, assignments);
+			}
+			return assignments;
+		}
+
+		/**
+		 * @return the {@link Map} of all assignments in this {@link ExecutionFlowFrame}.
+		 */
+		public Map<String, ASTNode> getAssignments() {
+			return m_assignments;
+		}
+
+		/**
+		 * @return the {@link Map} of all assignments in this {@link ExecutionFlowFrame}.
+		 */
+		public Map<String, Expression> getAssignmentsVariables() {
+			return m_assignmentsVariables;
+		}
+
+		/**
+		 * @return the {@link List} of {@link Expression}'s for same given variable.
+		 */
+		public List<Expression> getReferences(Expression variable) {
+			// find list of references
+			List<Expression> references;
+			{
+				String variableName = getVariableName(variable);
+				references = m_variableToReferences.get(variableName);
+				if (references == null) {
+					references = Lists.newArrayList();
+					m_variableToReferences.put(variableName, references);
+				}
+			}
+			// add given reference
+			if (!references.contains(variable)) {
+				references.add(variable);
+			}
+			// return final list
+			return references;
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return {@link List} of invocations ( {@link ConstructorInvocation}, {@link MethodInvocation}
+	 *         or {@link ClassInstanceCreation} ) of given method on execution flow.
+	 */
+	public static List<ASTNode> getInvocations(ExecutionFlowDescription flowDescription,
+			MethodDeclaration methodDeclaration) {
+		final List<ASTNode> invocations = Lists.newArrayList();
+		// prepare required values
+		IMethodBinding requiredBinding = getMethodBinding(methodDeclaration);
+		if (requiredBinding == null) {
+			return invocations;
+		}
+		final String requiredType = getFullyQualifiedName(requiredBinding.getDeclaringClass(), false);
+		final String requiredSignature = getMethodSignature(methodDeclaration);
+		// visit execution flow
+		ExecutionFlowUtils.visit(
+				new VisitingContext(true),
+				flowDescription,
+				new ExecutionFlowFrameVisitor() {
+					@Override
+					public void endVisit(MethodInvocation node) {
+						IMethodBinding binding = getMethodBinding(node);
+						addInvocation(node, binding);
+					}
+
+					@Override
+					public void endVisit(ClassInstanceCreation node) {
+						IMethodBinding binding = getCreationBinding(node);
+						addInvocation(node, binding);
+					}
+
+					@Override
+					public void endVisit(ConstructorInvocation node) {
+						IMethodBinding binding = getBinding(node);
+						addInvocation(node, binding);
+					}
+
+					private void addInvocation(ASTNode invocation, IMethodBinding binding) {
+						if (binding != null) {
+							String signature = getMethodSignature(binding);
+							String type = getFullyQualifiedName(binding.getDeclaringClass(), false);
+							if (signature.equals(requiredSignature) && type.equals(requiredType)) {
+								invocations.add(invocation);
+							}
+						}
+					}
+				});
+		//
+		return invocations;
+	}
+
+	/**
+	 * <p>
+	 * Custom subclass of {@link ASTVisitor}, enhanced by {@link ByteBuddy}.
+	 * </p>
+	 * <p>
+	 * This class only exists for convenience, in order to access the fields within
+	 * an {@link ExecutionFlowHandler}. In principle, it is also possible to define
+	 * those fields directly in {@link ByteBuddy}. However, then those fields have
+	 * to both be set and read via reflection.
+	 * </p>
+	 *
+	 * @see ExecutionFlowHandler
+	 */
+	public static class VisitorStub extends ASTVisitor {
+		private final VisitingContext context;
+		private final ExecutionFlowDescription flowDescription;
+		private final ExecutionFlowFrameVisitor visitor;
+
+		public VisitorStub(VisitingContext context, ExecutionFlowDescription flowDescription,
+				ExecutionFlowFrameVisitor visitor) {
+			this.context = context;
+			this.flowDescription = flowDescription;
+			this.visitor = visitor;
+		}
+	}
+
+	/**
+	 * <p>
+	 * Custom invocation handler used by {@link ByteBuddy} on an enhanced
+	 * {@link ASTVisitor}.
+	 * </p>
+	 * <p>
+	 * All method invocations of the enhanced base class are delegated to the main
+	 * visitor. This visitor is stored in an internal field of the enhanced object.
+	 * Special code is executed for AST nodes of type
+	 * {@link AnonymousClassDeclaration}, {@link ClassInstanceCreation},
+	 * {@link MethodInvocation} and {@link ConstructorInvocation}.
+	 * </p>
+	 * <p>
+	 * This handler may <b>only</b> be used for objects of type {@link VisitorStub}.
+	 * </p>
+	 *
+	 * @see VisitorStub
+	 */
+	private static class ExecutionFlowHandler implements InvocationHandler {
+		@Override
+		public Object invoke(Object obj, Method method, Object[] args) throws Throwable {
+			VisitorStub stub = (VisitorStub) obj;
+			// routing
+			Class<?>[] parameterTypes = method.getParameterTypes();
+			if (parameterTypes.length == 1) {
+				Class<?> parameterType = parameterTypes[0];
+				if (method.getName().equals("visit")) {
+					if (parameterType == AnonymousClassDeclaration.class) {
+						visit(stub, (AnonymousClassDeclaration) args[0]);
+					}
+				} else if (method.getName().equals("endVisit")) {
+					if (parameterType == ClassInstanceCreation.class) {
+						endVisit(stub, (ClassInstanceCreation) args[0]);
+					} else if (parameterType == MethodInvocation.class) {
+						endVisit(stub, (MethodInvocation) args[0]);
+					} else if (parameterType == ConstructorInvocation.class) {
+						endVisit(stub, (ConstructorInvocation) args[0]);
+					}
+				}
+			}
+			// use main visitor
+			try {
+				return method.invoke(stub.visitor, args);
+			} catch (InvocationTargetException e) {
+				throw e.getCause();
+			}
+		}
+
+		private boolean visit(VisitorStub stub, AnonymousClassDeclaration node) {
+			return shouldVisitAnonymousClassDeclaration(node);
+		}
+
+		private void endVisit(VisitorStub stub, ClassInstanceCreation node) {
+			// quick check
+			{
+				String identifier = stub.flowDescription.geTypeDeclaration().getName().getIdentifier();
+				if (!node.toString().contains(identifier)) {
+					return;
+				}
+			}
+			// check for local constructor
+			MethodDeclaration methodDeclaration = getLocalConstructorDeclaration(node);
+			if (methodDeclaration != null) {
+				// redirect execution flow to constructor
+				ExecutionFlowUtils.visit(stub.context, stub.flowDescription, stub.visitor, List.of(methodDeclaration));
+			}
+		}
+
+		private void endVisit(VisitorStub stub, MethodInvocation node) {
+			// check for local method invocation
+			MethodDeclaration methodDeclaration = getLocalMethodDeclaration(node);
+			if (methodDeclaration != null) {
+				methodDeclaration.setProperty(KEY_FRAME_INVOCATION, node);
+				// check for qualified local invocation, for example "appl.open()", so visit it
+				// as type
+				if (node.getExpression() != null && !(node.getExpression() instanceof ThisExpression)) {
+					ExecutionFlowUtils.visit(stub.context, stub.flowDescription, stub.visitor, List.of(methodDeclaration));
+				} else {
+					ExecutionFlowUtils.visit(stub.context, stub.flowDescription, stub.visitor, methodDeclaration);
+				}
+			}
+		}
+
+		private void endVisit(VisitorStub stub, ConstructorInvocation node) {
+			MethodDeclaration constructor = getConstructor(node);
+			constructor.setProperty(KEY_FRAME_INVOCATION, node);
+			ExecutionFlowUtils.visit(stub.context, stub.flowDescription, stub.visitor, List.of(constructor));
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/eval/ExecutionFlowUtils2.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/eval/ExecutionFlowUtils2.java
index 3642eec07..680269129 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/eval/ExecutionFlowUtils2.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/eval/ExecutionFlowUtils2.java
@@ -52,429 +52,429 @@
  * @coverage core.evaluation
  */
 public final class ExecutionFlowUtils2 {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private ExecutionFlowUtils2() {
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final String STAMP_AST = "ExecutionFlowUtils2.cache_stampAST";
-  private static final String STAMP_FLOW = "ExecutionFlowUtils2.cache_stampFlow";
-  private static final String KEY_VALUE = "ExecutionFlowUtils2.ExpressionValue";
-  private static final String KEY_VALUE_PREV = "ExecutionFlowUtils2.ExpressionValue.prev";
-  private static final String KEY_VALUE_PERMANENT = "ExecutionFlowUtils2.ExpressionValue.permanent";
-
-  /**
-   * Sets the {@link ExpressionValue}.
-   */
-  public static void setValue0(Expression expression, ExpressionValue value) {
-    expression.setProperty(KEY_VALUE, value);
-  }
-
-  /**
-   * @return the existing {@link ExpressionValue} without trying to calculate it.
-   */
-  public static ExpressionValue getValue0(Expression expression) {
-    ExpressionValue value = (ExpressionValue) expression.getProperty(KEY_VALUE);
-    if (value == null) {
-      value = (ExpressionValue) expression.getProperty(KEY_VALUE_PERMANENT);
-    }
-    return value;
-  }
-
-  /**
-   * Sets the permanent {@link ExpressionValue}.
-   */
-  public static void setPermanentValue0(Expression expression, ExpressionValue value) {
-    expression.setProperty(KEY_VALUE_PERMANENT, value);
-  }
-
-  /**
-   * @return the existing permanent {@link ExpressionValue} without trying to calculate it.
-   */
-  public static ExpressionValue getPermanentValue0(Expression expression) {
-    return (ExpressionValue) expression.getProperty(KEY_VALUE_PERMANENT);
-  }
-
-  /**
-   * @return ensures that {@link Expression} has permanent {@link ExpressionValue}, uses existing
-   *         value or creates new one.
-   */
-  public static ExpressionValue ensurePermanentValue(Expression expression) {
-    ExpressionValue value;
-    {
-      // usually there is already some ExpressionValue
-      value = (ExpressionValue) expression.getProperty(KEY_VALUE);
-      // if no, create new one
-      if (value == null) {
-        value = new ExpressionValue(expression);
-      }
-    }
-    // use this value as permanent
-    expression.setProperty(KEY_VALUE_PERMANENT, value);
-    // done
-    return value;
-  }
-
-  /**
-   * Clears permanent {@link ExpressionValue} associated with given {@link Expression}. Permanent
-   * value is used to associate model, so practically we remove reference on model.
-   */
-  public static void clearPermanentValue(Expression expression) {
-    ExpressionValue value = (ExpressionValue) expression.getProperty(KEY_VALUE_PERMANENT);
-    if (value != null) {
-      value.setModel(null);
-      expression.setProperty(KEY_VALUE_PERMANENT, null);
-    }
-  }
-
-  public static ExpressionValue getValue(ExecutionFlowDescription flowDescription,
-      Expression expression) {
-    ensureValues(flowDescription);
-    ExpressionValue value = (ExpressionValue) expression.getProperty(KEY_VALUE);
-    if (value == null) {
-      value = (ExpressionValue) expression.getProperty(KEY_VALUE_PERMANENT);
-    }
-    return value;
-  }
-
-  public static ExpressionValue getValuePrev(ExecutionFlowDescription flowDescription,
-      Expression expression) {
-    ensureValues(flowDescription);
-    return (ExpressionValue) expression.getProperty(KEY_VALUE_PREV);
-  }
-
-  public static void ensureValues(ExecutionFlowDescription flowDescription) {
-    ASTNode rootNode = flowDescription.getCompilationUnit();
-    long stampAST = rootNode.getAST().modificationCount();
-    long stampFlow = flowDescription.modificationCount();
-    Long cache_stampAST = (Long) rootNode.getProperty(STAMP_AST);
-    Long cache_stampFlow = (Long) rootNode.getProperty(STAMP_FLOW);
-    if (cache_stampAST == null
-        || cache_stampAST.longValue() != stampAST
-        || cache_stampFlow == null
-        || cache_stampFlow.longValue() != stampFlow) {
-      rootNode.setProperty(STAMP_AST, stampAST);
-      rootNode.setProperty(STAMP_FLOW, stampFlow);
-      trackValues(flowDescription, rootNode);
-    }
-  }
-
-  private static void trackValues(ExecutionFlowDescription flowDescription, ASTNode root) {
-    ValuesVisitor visitor = new ValuesVisitor();
-    ExecutionFlowUtils.visit(new VisitingContext(true), flowDescription, visitor);
-    visitor.whenLeave_type_visitRestMethods();
-  }
-
-  private static class ValuesVisitor extends ExecutionFlowFrameVisitor {
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Frame
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    private Frame m_frame;
-    private Frame m_typeFrame;
-    private boolean m_ignoreAssignments;
-    private final Set<MethodDeclaration> m_visitedMethods = Sets.newHashSet();
-
-    @Override
-    public boolean enterFrame(ASTNode node) {
-      m_frame = new Frame(node, m_frame);
-      defineMethodParameters(node);
-      if (node instanceof TypeDeclaration) {
-        m_typeFrame = m_frame;
-      }
-      return true;
-    }
-
-    @Override
-    public void leaveFrame(ASTNode node) {
-      m_frame = m_frame.getParent();
-      whenLeave_method_rememberVisited(node);
-    }
-
-    /**
-     * When leave {@link TypeDeclaration}, visit all {@link MethodDeclaration}s which were not
-     * visited yet, to use values assigned to fields.
-     */
-    void whenLeave_type_visitRestMethods() {
-      if (m_typeFrame != null) {
-        m_frame = m_typeFrame;
-        m_ignoreAssignments = true;
-        TypeDeclaration typeDeclaration = (TypeDeclaration) m_typeFrame.getNode();
-        for (MethodDeclaration method : typeDeclaration.getMethods()) {
-          if (!m_visitedMethods.contains(method)) {
-            method.accept(this);
-          }
-        }
-      }
-    }
-
-    /**
-     * Remember that {@link MethodDeclaration} was visited, to skip it in
-     * {@link #whenLeave_type_visitRestMethods(ASTNode)} later.
-     */
-    private void whenLeave_method_rememberVisited(ASTNode node) {
-      if (node instanceof MethodDeclaration) {
-        MethodDeclaration method = (MethodDeclaration) node;
-        m_visitedMethods.add(method);
-      }
-    }
-
-    private void defineMethodParameters(ASTNode node) {
-      // prepare declaration
-      if (!(node instanceof MethodDeclaration)) {
-        return;
-      }
-      MethodDeclaration declaration = (MethodDeclaration) node;
-      List<SingleVariableDeclaration> parameters = DomGenerics.parameters(declaration);
-      // prepare invocation
-      ASTNode invocation;
-      {
-        String key = ExecutionFlowUtils.KEY_FRAME_INVOCATION;
-        invocation = (ASTNode) declaration.getProperty(key);
-      }
-      // no invocation: value of parameter == its name
-      if (invocation == null) {
-        for (int i = 0; i < parameters.size(); i++) {
-          SingleVariableDeclaration parameter = parameters.get(i);
-          define(parameter, (Expression) null);
-        }
-        return;
-      }
-      // use argument as value for parameter
-      List<Expression> arguments = DomGenerics.arguments(invocation);
-      for (int i = 0; i < parameters.size(); i++) {
-        SingleVariableDeclaration parameter = parameters.get(i);
-        if (arguments.size() > i) {
-          Expression argument = arguments.get(i);
-          define(parameter, argument);
-        }
-      }
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Define
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public void endVisit(SimpleName node) {
-      String identifier = node.getIdentifier();
-      ExpressionValue value = m_frame.getValue(identifier);
-      if (value != null) {
-        node.setProperty(KEY_VALUE, value);
-      }
-    }
-
-    @Override
-    public void endVisit(FieldAccess node) {
-      if (node.getExpression() instanceof ThisExpression) {
-        SimpleName variable = node.getName();
-        String identifier = variable.getIdentifier();
-        ExpressionValue value = m_typeFrame.getValue(identifier);
-        if (value != null) {
-          node.setProperty(KEY_VALUE, value);
-        }
-      }
-    }
-
-    @Override
-    public void endVisit(ParenthesizedExpression node) {
-      Expression expression = node.getExpression();
-      ExpressionValue value = createValue(expression);
-      if (value != null) {
-        node.setProperty(KEY_VALUE, value);
-      }
-    }
-
-    @Override
-    public void endVisit(CastExpression node) {
-      Expression expression = node.getExpression();
-      ExpressionValue value = createValue(expression);
-      if (value != null) {
-        node.setProperty(KEY_VALUE, value);
-      }
-    }
-
-    @Override
-    public void endVisit(MethodInvocation node) {
-      MethodDeclaration method = AstNodeUtils.getLocalMethodDeclaration(node);
-      if (method != null) {
-        // may be "lazy"
-        {
-          LazyVariableInformation information = LazyVariableSupportUtils.getInformation(method);
-          if (information != null) {
-            Expression expression = information.getCreation();
-            ExpressionValue value = createValue(expression);
-            if (value != null) {
-              node.setProperty(KEY_VALUE, value);
-            }
-            return;
-          }
-        }
-        // may be "return value;"
-        boolean isLocalStaticFactory = AstNodeUtils.isStatic(method);
-        if (!isLocalStaticFactory) {
-          List<Statement> statements = DomGenerics.statements(method);
-          Statement lastStatement = GenericsUtils.getLastOrNull(statements);
-          if (lastStatement instanceof ReturnStatement) {
-            ReturnStatement returnStatement = (ReturnStatement) lastStatement;
-            Expression expression = returnStatement.getExpression();
-            if (expression != null) {
-              ExpressionValue value = createValue(expression);
-              node.setProperty(KEY_VALUE, value);
-            }
-          }
-        }
-      }
-    }
-
-    @Override
-    public void endVisit(VariableDeclarationFragment node) {
-      define(node, node.getInitializer());
-    }
-
-    @Override
-    public void endVisit(PostfixExpression node) {
-      Expression operand = node.getOperand();
-      if (operand instanceof SimpleName) {
-        SimpleName variable = (SimpleName) operand;
-        String identifier = variable.getIdentifier();
-        // remember previous value
-        variable.setProperty(KEY_VALUE_PREV, m_frame.getValue(identifier));
-        // set new value
-        ExpressionValue value = createValue(node);
-        m_frame.setValue(identifier, value);
-        variable.setProperty(KEY_VALUE, value);
-      }
-    }
-
-    @Override
-    public void endVisit(Assignment node) {
-      if (m_ignoreAssignments) {
-        return;
-      }
-      Expression leftSide = node.getLeftHandSide();
-      Expression rightSide = node.getRightHandSide();
-      if (leftSide instanceof SimpleName) {
-        SimpleName variable = (SimpleName) leftSide;
-        String identifier = variable.getIdentifier();
-        ExpressionValue value = createValue(rightSide);
-        m_frame.setValue(identifier, value);
-        variable.setProperty(KEY_VALUE, value);
-      }
-      if (leftSide instanceof FieldAccess) {
-        FieldAccess leftFieldAccess = (FieldAccess) leftSide;
-        if (leftFieldAccess.getExpression() instanceof ThisExpression) {
-          SimpleName variable = leftFieldAccess.getName();
-          ExpressionValue value = createValue(rightSide);
-          {
-            String identifier = variable.getIdentifier();
-            m_typeFrame.setValue(identifier, value);
-          }
-          leftFieldAccess.setProperty(KEY_VALUE, value);
-        }
-      }
-    }
-
-    private void define(VariableDeclaration node, Expression initializer) {
-      ExpressionValue value;
-      if (initializer != null) {
-        value = createValue(initializer);
-      } else {
-        value = createValue(node.getName());
-      }
-      // set value
-      SimpleName variable = node.getName();
-      variable.setProperty(KEY_VALUE, value);
-      // fill frame
-      String identifier = variable.getIdentifier();
-      m_frame.define(identifier, value);
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Utils
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    private ExpressionValue createValue(Expression expression) {
-      // get existing value
-      ExpressionValue value;
-      value = (ExpressionValue) expression.getProperty(KEY_VALUE);
-      if (value == null) {
-        value = (ExpressionValue) expression.getProperty(KEY_VALUE_PERMANENT);
-      }
-      // create new value
-      if (value == null) {
-        value = new ExpressionValue(expression);
-        expression.setProperty(KEY_VALUE, value);
-      }
-      // done
-      return value;
-    }
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Frame
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static class Frame {
-    private final ASTNode m_node;
-    private final Frame m_parent;
-    private final Map<String, ExpressionValue> m_variables = Maps.newHashMap();
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public Frame(ASTNode node, Frame parent) {
-      m_node = node;
-      m_parent = parent;
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Access
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public ASTNode getNode() {
-      return m_node;
-    }
-
-    public Frame getParent() {
-      return m_parent;
-    }
-
-    public void define(String name, ExpressionValue value) {
-      m_variables.put(name, value);
-    }
-
-    public void setValue(String name, ExpressionValue value) {
-      if (m_variables.containsKey(name)) {
-        m_variables.put(name, value);
-      } else if (m_parent != null) {
-        m_parent.setValue(name, value);
-      }
-    }
-
-    public ExpressionValue getValue(String name) {
-      ExpressionValue value = m_variables.get(name);
-      if (value != null) {
-        return value;
-      }
-      if (m_parent != null) {
-        return m_parent.getValue(name);
-      }
-      return null;
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private ExecutionFlowUtils2() {
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final String STAMP_AST = "ExecutionFlowUtils2.cache_stampAST";
+	private static final String STAMP_FLOW = "ExecutionFlowUtils2.cache_stampFlow";
+	private static final String KEY_VALUE = "ExecutionFlowUtils2.ExpressionValue";
+	private static final String KEY_VALUE_PREV = "ExecutionFlowUtils2.ExpressionValue.prev";
+	private static final String KEY_VALUE_PERMANENT = "ExecutionFlowUtils2.ExpressionValue.permanent";
+
+	/**
+	 * Sets the {@link ExpressionValue}.
+	 */
+	public static void setValue0(Expression expression, ExpressionValue value) {
+		expression.setProperty(KEY_VALUE, value);
+	}
+
+	/**
+	 * @return the existing {@link ExpressionValue} without trying to calculate it.
+	 */
+	public static ExpressionValue getValue0(Expression expression) {
+		ExpressionValue value = (ExpressionValue) expression.getProperty(KEY_VALUE);
+		if (value == null) {
+			value = (ExpressionValue) expression.getProperty(KEY_VALUE_PERMANENT);
+		}
+		return value;
+	}
+
+	/**
+	 * Sets the permanent {@link ExpressionValue}.
+	 */
+	public static void setPermanentValue0(Expression expression, ExpressionValue value) {
+		expression.setProperty(KEY_VALUE_PERMANENT, value);
+	}
+
+	/**
+	 * @return the existing permanent {@link ExpressionValue} without trying to calculate it.
+	 */
+	public static ExpressionValue getPermanentValue0(Expression expression) {
+		return (ExpressionValue) expression.getProperty(KEY_VALUE_PERMANENT);
+	}
+
+	/**
+	 * @return ensures that {@link Expression} has permanent {@link ExpressionValue}, uses existing
+	 *         value or creates new one.
+	 */
+	public static ExpressionValue ensurePermanentValue(Expression expression) {
+		ExpressionValue value;
+		{
+			// usually there is already some ExpressionValue
+			value = (ExpressionValue) expression.getProperty(KEY_VALUE);
+			// if no, create new one
+			if (value == null) {
+				value = new ExpressionValue(expression);
+			}
+		}
+		// use this value as permanent
+		expression.setProperty(KEY_VALUE_PERMANENT, value);
+		// done
+		return value;
+	}
+
+	/**
+	 * Clears permanent {@link ExpressionValue} associated with given {@link Expression}. Permanent
+	 * value is used to associate model, so practically we remove reference on model.
+	 */
+	public static void clearPermanentValue(Expression expression) {
+		ExpressionValue value = (ExpressionValue) expression.getProperty(KEY_VALUE_PERMANENT);
+		if (value != null) {
+			value.setModel(null);
+			expression.setProperty(KEY_VALUE_PERMANENT, null);
+		}
+	}
+
+	public static ExpressionValue getValue(ExecutionFlowDescription flowDescription,
+			Expression expression) {
+		ensureValues(flowDescription);
+		ExpressionValue value = (ExpressionValue) expression.getProperty(KEY_VALUE);
+		if (value == null) {
+			value = (ExpressionValue) expression.getProperty(KEY_VALUE_PERMANENT);
+		}
+		return value;
+	}
+
+	public static ExpressionValue getValuePrev(ExecutionFlowDescription flowDescription,
+			Expression expression) {
+		ensureValues(flowDescription);
+		return (ExpressionValue) expression.getProperty(KEY_VALUE_PREV);
+	}
+
+	public static void ensureValues(ExecutionFlowDescription flowDescription) {
+		ASTNode rootNode = flowDescription.getCompilationUnit();
+		long stampAST = rootNode.getAST().modificationCount();
+		long stampFlow = flowDescription.modificationCount();
+		Long cache_stampAST = (Long) rootNode.getProperty(STAMP_AST);
+		Long cache_stampFlow = (Long) rootNode.getProperty(STAMP_FLOW);
+		if (cache_stampAST == null
+				|| cache_stampAST.longValue() != stampAST
+				|| cache_stampFlow == null
+				|| cache_stampFlow.longValue() != stampFlow) {
+			rootNode.setProperty(STAMP_AST, stampAST);
+			rootNode.setProperty(STAMP_FLOW, stampFlow);
+			trackValues(flowDescription, rootNode);
+		}
+	}
+
+	private static void trackValues(ExecutionFlowDescription flowDescription, ASTNode root) {
+		ValuesVisitor visitor = new ValuesVisitor();
+		ExecutionFlowUtils.visit(new VisitingContext(true), flowDescription, visitor);
+		visitor.whenLeave_type_visitRestMethods();
+	}
+
+	private static class ValuesVisitor extends ExecutionFlowFrameVisitor {
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Frame
+		//
+		////////////////////////////////////////////////////////////////////////////
+		private Frame m_frame;
+		private Frame m_typeFrame;
+		private boolean m_ignoreAssignments;
+		private final Set<MethodDeclaration> m_visitedMethods = Sets.newHashSet();
+
+		@Override
+		public boolean enterFrame(ASTNode node) {
+			m_frame = new Frame(node, m_frame);
+			defineMethodParameters(node);
+			if (node instanceof TypeDeclaration) {
+				m_typeFrame = m_frame;
+			}
+			return true;
+		}
+
+		@Override
+		public void leaveFrame(ASTNode node) {
+			m_frame = m_frame.getParent();
+			whenLeave_method_rememberVisited(node);
+		}
+
+		/**
+		 * When leave {@link TypeDeclaration}, visit all {@link MethodDeclaration}s which were not
+		 * visited yet, to use values assigned to fields.
+		 */
+		void whenLeave_type_visitRestMethods() {
+			if (m_typeFrame != null) {
+				m_frame = m_typeFrame;
+				m_ignoreAssignments = true;
+				TypeDeclaration typeDeclaration = (TypeDeclaration) m_typeFrame.getNode();
+				for (MethodDeclaration method : typeDeclaration.getMethods()) {
+					if (!m_visitedMethods.contains(method)) {
+						method.accept(this);
+					}
+				}
+			}
+		}
+
+		/**
+		 * Remember that {@link MethodDeclaration} was visited, to skip it in
+		 * {@link #whenLeave_type_visitRestMethods(ASTNode)} later.
+		 */
+		private void whenLeave_method_rememberVisited(ASTNode node) {
+			if (node instanceof MethodDeclaration) {
+				MethodDeclaration method = (MethodDeclaration) node;
+				m_visitedMethods.add(method);
+			}
+		}
+
+		private void defineMethodParameters(ASTNode node) {
+			// prepare declaration
+			if (!(node instanceof MethodDeclaration)) {
+				return;
+			}
+			MethodDeclaration declaration = (MethodDeclaration) node;
+			List<SingleVariableDeclaration> parameters = DomGenerics.parameters(declaration);
+			// prepare invocation
+			ASTNode invocation;
+			{
+				String key = ExecutionFlowUtils.KEY_FRAME_INVOCATION;
+				invocation = (ASTNode) declaration.getProperty(key);
+			}
+			// no invocation: value of parameter == its name
+			if (invocation == null) {
+				for (int i = 0; i < parameters.size(); i++) {
+					SingleVariableDeclaration parameter = parameters.get(i);
+					define(parameter, (Expression) null);
+				}
+				return;
+			}
+			// use argument as value for parameter
+			List<Expression> arguments = DomGenerics.arguments(invocation);
+			for (int i = 0; i < parameters.size(); i++) {
+				SingleVariableDeclaration parameter = parameters.get(i);
+				if (arguments.size() > i) {
+					Expression argument = arguments.get(i);
+					define(parameter, argument);
+				}
+			}
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Define
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public void endVisit(SimpleName node) {
+			String identifier = node.getIdentifier();
+			ExpressionValue value = m_frame.getValue(identifier);
+			if (value != null) {
+				node.setProperty(KEY_VALUE, value);
+			}
+		}
+
+		@Override
+		public void endVisit(FieldAccess node) {
+			if (node.getExpression() instanceof ThisExpression) {
+				SimpleName variable = node.getName();
+				String identifier = variable.getIdentifier();
+				ExpressionValue value = m_typeFrame.getValue(identifier);
+				if (value != null) {
+					node.setProperty(KEY_VALUE, value);
+				}
+			}
+		}
+
+		@Override
+		public void endVisit(ParenthesizedExpression node) {
+			Expression expression = node.getExpression();
+			ExpressionValue value = createValue(expression);
+			if (value != null) {
+				node.setProperty(KEY_VALUE, value);
+			}
+		}
+
+		@Override
+		public void endVisit(CastExpression node) {
+			Expression expression = node.getExpression();
+			ExpressionValue value = createValue(expression);
+			if (value != null) {
+				node.setProperty(KEY_VALUE, value);
+			}
+		}
+
+		@Override
+		public void endVisit(MethodInvocation node) {
+			MethodDeclaration method = AstNodeUtils.getLocalMethodDeclaration(node);
+			if (method != null) {
+				// may be "lazy"
+				{
+					LazyVariableInformation information = LazyVariableSupportUtils.getInformation(method);
+					if (information != null) {
+						Expression expression = information.getCreation();
+						ExpressionValue value = createValue(expression);
+						if (value != null) {
+							node.setProperty(KEY_VALUE, value);
+						}
+						return;
+					}
+				}
+				// may be "return value;"
+				boolean isLocalStaticFactory = AstNodeUtils.isStatic(method);
+				if (!isLocalStaticFactory) {
+					List<Statement> statements = DomGenerics.statements(method);
+					Statement lastStatement = GenericsUtils.getLastOrNull(statements);
+					if (lastStatement instanceof ReturnStatement) {
+						ReturnStatement returnStatement = (ReturnStatement) lastStatement;
+						Expression expression = returnStatement.getExpression();
+						if (expression != null) {
+							ExpressionValue value = createValue(expression);
+							node.setProperty(KEY_VALUE, value);
+						}
+					}
+				}
+			}
+		}
+
+		@Override
+		public void endVisit(VariableDeclarationFragment node) {
+			define(node, node.getInitializer());
+		}
+
+		@Override
+		public void endVisit(PostfixExpression node) {
+			Expression operand = node.getOperand();
+			if (operand instanceof SimpleName) {
+				SimpleName variable = (SimpleName) operand;
+				String identifier = variable.getIdentifier();
+				// remember previous value
+				variable.setProperty(KEY_VALUE_PREV, m_frame.getValue(identifier));
+				// set new value
+				ExpressionValue value = createValue(node);
+				m_frame.setValue(identifier, value);
+				variable.setProperty(KEY_VALUE, value);
+			}
+		}
+
+		@Override
+		public void endVisit(Assignment node) {
+			if (m_ignoreAssignments) {
+				return;
+			}
+			Expression leftSide = node.getLeftHandSide();
+			Expression rightSide = node.getRightHandSide();
+			if (leftSide instanceof SimpleName) {
+				SimpleName variable = (SimpleName) leftSide;
+				String identifier = variable.getIdentifier();
+				ExpressionValue value = createValue(rightSide);
+				m_frame.setValue(identifier, value);
+				variable.setProperty(KEY_VALUE, value);
+			}
+			if (leftSide instanceof FieldAccess) {
+				FieldAccess leftFieldAccess = (FieldAccess) leftSide;
+				if (leftFieldAccess.getExpression() instanceof ThisExpression) {
+					SimpleName variable = leftFieldAccess.getName();
+					ExpressionValue value = createValue(rightSide);
+					{
+						String identifier = variable.getIdentifier();
+						m_typeFrame.setValue(identifier, value);
+					}
+					leftFieldAccess.setProperty(KEY_VALUE, value);
+				}
+			}
+		}
+
+		private void define(VariableDeclaration node, Expression initializer) {
+			ExpressionValue value;
+			if (initializer != null) {
+				value = createValue(initializer);
+			} else {
+				value = createValue(node.getName());
+			}
+			// set value
+			SimpleName variable = node.getName();
+			variable.setProperty(KEY_VALUE, value);
+			// fill frame
+			String identifier = variable.getIdentifier();
+			m_frame.define(identifier, value);
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Utils
+		//
+		////////////////////////////////////////////////////////////////////////////
+		private ExpressionValue createValue(Expression expression) {
+			// get existing value
+			ExpressionValue value;
+			value = (ExpressionValue) expression.getProperty(KEY_VALUE);
+			if (value == null) {
+				value = (ExpressionValue) expression.getProperty(KEY_VALUE_PERMANENT);
+			}
+			// create new value
+			if (value == null) {
+				value = new ExpressionValue(expression);
+				expression.setProperty(KEY_VALUE, value);
+			}
+			// done
+			return value;
+		}
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Frame
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static class Frame {
+		private final ASTNode m_node;
+		private final Frame m_parent;
+		private final Map<String, ExpressionValue> m_variables = Maps.newHashMap();
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public Frame(ASTNode node, Frame parent) {
+			m_node = node;
+			m_parent = parent;
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Access
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public ASTNode getNode() {
+			return m_node;
+		}
+
+		public Frame getParent() {
+			return m_parent;
+		}
+
+		public void define(String name, ExpressionValue value) {
+			m_variables.put(name, value);
+		}
+
+		public void setValue(String name, ExpressionValue value) {
+			if (m_variables.containsKey(name)) {
+				m_variables.put(name, value);
+			} else if (m_parent != null) {
+				m_parent.setValue(name, value);
+			}
+		}
+
+		public ExpressionValue getValue(String name) {
+			ExpressionValue value = m_variables.get(name);
+			if (value != null) {
+				return value;
+			}
+			if (m_parent != null) {
+				return m_parent.getValue(name);
+			}
+			return null;
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/eval/ExpressionValue.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/eval/ExpressionValue.java
index 4994a0d7d..c2970e10a 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/eval/ExpressionValue.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/eval/ExpressionValue.java
@@ -19,78 +19,78 @@
  * @coverage core.evaluation
  */
 public final class ExpressionValue {
-  private final Expression m_expression;
-  private Object m_model;
-  private Object m_object = AstEvaluationEngine.UNKNOWN;
+	private final Expression m_expression;
+	private Object m_model;
+	private Object m_object = AstEvaluationEngine.UNKNOWN;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ExpressionValue(Expression expression) {
-    m_expression = expression;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ExpressionValue(Expression expression) {
+		m_expression = expression;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    String s = "EV(";
-    if (m_expression != null) {
-      s += m_expression;
-    }
-    s += ")";
-    return s;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		String s = "EV(";
+		if (m_expression != null) {
+			s += m_expression;
+		}
+		s += ")";
+		return s;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Expression
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public boolean hasExpression() {
-    return m_expression != null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Expression
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public boolean hasExpression() {
+		return m_expression != null;
+	}
 
-  public Expression getExpression() {
-    return m_expression;
-  }
+	public Expression getExpression() {
+		return m_expression;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Model
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public boolean hasModel() {
-    return m_model != null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Model
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public boolean hasModel() {
+		return m_model != null;
+	}
 
-  public Object getModel() {
-    return m_model;
-  }
+	public Object getModel() {
+		return m_model;
+	}
 
-  public void setModel(Object object) {
-    m_model = object;
-  }
+	public void setModel(Object object) {
+		m_model = object;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public boolean hasObject() {
-    return m_object != AstEvaluationEngine.UNKNOWN;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public boolean hasObject() {
+		return m_object != AstEvaluationEngine.UNKNOWN;
+	}
 
-  public Object getObject() {
-    return m_object;
-  }
+	public Object getObject() {
+		return m_object;
+	}
 
-  public void setObject(Object object) {
-    m_object = object;
-  }
+	public void setObject(Object object) {
+		m_object = object;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/eval/IExpressionEvaluator.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/eval/IExpressionEvaluator.java
index 8c5032ebe..979ea4e77 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/eval/IExpressionEvaluator.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/eval/IExpressionEvaluator.java
@@ -23,11 +23,11 @@
  * @author scheglov_ke
  */
 public interface IExpressionEvaluator {
-  /**
-   * @return value of given {@link Expression} or {@link AstEvaluationEngine#UNKNOWN}.
-   */
-  Object evaluate(EvaluationContext context,
-      Expression expression,
-      ITypeBinding typeBinding,
-      String typeQualifiedName) throws Exception;
+	/**
+	 * @return value of given {@link Expression} or {@link AstEvaluationEngine#UNKNOWN}.
+	 */
+	Object evaluate(EvaluationContext context,
+			Expression expression,
+			ITypeBinding typeBinding,
+			String typeQualifiedName) throws Exception;
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/eval/InvocationEvaluatorInterceptor.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/eval/InvocationEvaluatorInterceptor.java
index b9259ac1d..20033f8e9 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/eval/InvocationEvaluatorInterceptor.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/eval/InvocationEvaluatorInterceptor.java
@@ -25,73 +25,73 @@
  * @coverage core.evaluation
  */
 public class InvocationEvaluatorInterceptor {
-  /**
-   * Evaluates {@link ClassInstanceCreation}.
-   *
-   * @return some value to use instead of real, or {@link AstEvaluationEngine#UNKNOWN} if
-   *         {@link ClassInstanceCreation} should be evaluated as is.
-   */
-  public Object evaluate(EvaluationContext context,
-      ClassInstanceCreation expression,
-      ITypeBinding typeBinding,
-      Class<?> clazz,
-      Constructor<?> actualConstructor,
-      Object[] arguments) throws Exception {
-    return AstEvaluationEngine.UNKNOWN;
-  }
+	/**
+	 * Evaluates {@link ClassInstanceCreation}.
+	 *
+	 * @return some value to use instead of real, or {@link AstEvaluationEngine#UNKNOWN} if
+	 *         {@link ClassInstanceCreation} should be evaluated as is.
+	 */
+	public Object evaluate(EvaluationContext context,
+			ClassInstanceCreation expression,
+			ITypeBinding typeBinding,
+			Class<?> clazz,
+			Constructor<?> actualConstructor,
+			Object[] arguments) throws Exception {
+		return AstEvaluationEngine.UNKNOWN;
+	}
 
-  /**
-   * Evaluates anonymous {@link ClassInstanceCreation}.
-   *
-   * @return some value to use instead of real, or {@link AstEvaluationEngine#UNKNOWN} if
-   *         {@link ClassInstanceCreation} should be evaluated as is.
-   */
-  public Object evaluateAnonymous(EvaluationContext context,
-      ClassInstanceCreation expression,
-      ITypeBinding typeBinding,
-      ITypeBinding typeBindingConcrete,
-      IMethodBinding methodBinding,
-      Object[] arguments) throws Exception {
-    return AstEvaluationEngine.UNKNOWN;
-  }
+	/**
+	 * Evaluates anonymous {@link ClassInstanceCreation}.
+	 *
+	 * @return some value to use instead of real, or {@link AstEvaluationEngine#UNKNOWN} if
+	 *         {@link ClassInstanceCreation} should be evaluated as is.
+	 */
+	public Object evaluateAnonymous(EvaluationContext context,
+			ClassInstanceCreation expression,
+			ITypeBinding typeBinding,
+			ITypeBinding typeBindingConcrete,
+			IMethodBinding methodBinding,
+			Object[] arguments) throws Exception {
+		return AstEvaluationEngine.UNKNOWN;
+	}
 
-  /**
-   * Evaluates {@link MethodInvocation}.
-   *
-   * @return some value to use instead of real, or {@link AstEvaluationEngine#UNKNOWN} if
-   *         {@link MethodInvocation} should be evaluated as is.
-   */
-  public Object evaluate(EvaluationContext context,
-      MethodInvocation invocation,
-      IMethodBinding methodBinding,
-      Class<?> clazz,
-      Method method,
-      Object[] argumentValues) {
-    return AstEvaluationEngine.UNKNOWN;
-  }
+	/**
+	 * Evaluates {@link MethodInvocation}.
+	 *
+	 * @return some value to use instead of real, or {@link AstEvaluationEngine#UNKNOWN} if
+	 *         {@link MethodInvocation} should be evaluated as is.
+	 */
+	public Object evaluate(EvaluationContext context,
+			MethodInvocation invocation,
+			IMethodBinding methodBinding,
+			Class<?> clazz,
+			Method method,
+			Object[] argumentValues) {
+		return AstEvaluationEngine.UNKNOWN;
+	}
 
-  /**
-   * Allows to return different {@link Method} to use.
-   * <p>
-   * For example in GWT subclasses of <code>JavaScriptObject</code> are rewritten by GWT hosted mode
-   * {@link ClassLoader} so that all their methods are moved into <code>ClassName$</code>. So, we
-   * can not find {@link Method} using normal way.
-   *
-   * @return the {@link Method} of {@link Class}, with required signature, or <code>null</code> if
-   *         default resolving should be used.
-   */
-  public Method resolveMethod(Class<?> clazz, String signature) throws Exception {
-    return null;
-  }
+	/**
+	 * Allows to return different {@link Method} to use.
+	 * <p>
+	 * For example in GWT subclasses of <code>JavaScriptObject</code> are rewritten by GWT hosted mode
+	 * {@link ClassLoader} so that all their methods are moved into <code>ClassName$</code>. So, we
+	 * can not find {@link Method} using normal way.
+	 *
+	 * @return the {@link Method} of {@link Class}, with required signature, or <code>null</code> if
+	 *         default resolving should be used.
+	 */
+	public Method resolveMethod(Class<?> clazz, String signature) throws Exception {
+		return null;
+	}
 
-  /**
-   * Sometimes we known that some pieces of code in Internet or samples are not compatible with
-   * WindowBuilder and we want to show specific exception/message for them.
-   *
-   * @return the {@link Throwable} to use instead of original one, or <code>null</code> if original
-   *         one should be used.
-   */
-  public Throwable rewriteException(Throwable e) {
-    return null;
-  }
+	/**
+	 * Sometimes we known that some pieces of code in Internet or samples are not compatible with
+	 * WindowBuilder and we want to show specific exception/message for them.
+	 *
+	 * @return the {@link Throwable} to use instead of original one, or <code>null</code> if original
+	 *         one should be used.
+	 */
+	public Throwable rewriteException(Throwable e) {
+		return null;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/gef/part/AbstractComponentEditPart.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/gef/part/AbstractComponentEditPart.java
index 9a59d5dd2..99efcacfe 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/gef/part/AbstractComponentEditPart.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/gef/part/AbstractComponentEditPart.java
@@ -49,234 +49,234 @@
  * @coverage core.gef
  */
 public abstract class AbstractComponentEditPart extends GraphicalEditPart {
-  public static final Point TOP_LOCATION = EnvironmentUtils.IS_MAC
-      ? new Point(20, 28)
-      : new Point(20, 20);
-  private final AbstractComponentInfo m_component;
+	public static final Point TOP_LOCATION = EnvironmentUtils.IS_MAC
+			? new Point(20, 28)
+					: new Point(20, 20);
+	private final AbstractComponentInfo m_component;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractComponentEditPart(AbstractComponentInfo component) {
-    m_component = component;
-    setModel(m_component);
-    listenFor_delayEvents();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractComponentEditPart(AbstractComponentInfo component) {
+		m_component = component;
+		setModel(m_component);
+		listenFor_delayEvents();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link AbstractComponentInfo} for this {@link AbstractComponentEditPart}.
-   */
-  public final AbstractComponentInfo getComponent() {
-    return m_component;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link AbstractComponentInfo} for this {@link AbstractComponentEditPart}.
+	 */
+	public final AbstractComponentInfo getComponent() {
+		return m_component;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Figure
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Figure createFigure() {
-    return new Figure() {
-      @Override
-      protected void paintClientArea(Graphics graphics) {
-        if (m_component.isRoot()) {
-          Image image = m_component.getImage();
-          graphics.drawImage(image, 0, 0);
-        }
-        drawCustomBorder(this, graphics);
-      }
-    };
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Figure
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Figure createFigure() {
+		return new Figure() {
+			@Override
+			protected void paintClientArea(Graphics graphics) {
+				if (m_component.isRoot()) {
+					Image image = m_component.getImage();
+					graphics.drawImage(image, 0, 0);
+				}
+				drawCustomBorder(this, graphics);
+			}
+		};
+	}
 
-  /**
-   * Draw custom "control specific" graphics objects for given {@link Figure}.
-   */
-  protected void drawCustomBorder(Figure figure, Graphics graphics) {
-  }
+	/**
+	 * Draw custom "control specific" graphics objects for given {@link Figure}.
+	 */
+	protected void drawCustomBorder(Figure figure, Graphics graphics) {
+	}
 
-  @Override
-  protected void refreshVisuals() {
-    Rectangle bounds = m_component.getBounds();
-    if (m_component.isRoot()) {
-      Point rootLocation = getRootLocation();
-      bounds = bounds.getCopy().setLocation(rootLocation);
-    }
-    // make it safe
-    if (bounds == null) {
-      bounds = new Rectangle(0, 0, 0, 0);
-    }
-    // set bounds
-    getFigure().setBounds(bounds);
-  }
+	@Override
+	protected void refreshVisuals() {
+		Rectangle bounds = m_component.getBounds();
+		if (m_component.isRoot()) {
+			Point rootLocation = getRootLocation();
+			bounds = bounds.getCopy().setLocation(rootLocation);
+		}
+		// make it safe
+		if (bounds == null) {
+			bounds = new Rectangle(0, 0, 0, 0);
+		}
+		// set bounds
+		getFigure().setBounds(bounds);
+	}
 
-  /**
-   * @return the location to use, if this {@link AbstractComponentInfo} is root.
-   */
-  protected Point getRootLocation() {
-    return TOP_LOCATION;
-  }
+	/**
+	 * @return the location to use, if this {@link AbstractComponentInfo} is root.
+	 */
+	protected Point getRootLocation() {
+		return TOP_LOCATION;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Policies
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createEditPolicies() {
-    if (m_component.isRoot()) {
-      installEditPolicy(EditPolicy.SELECTION_ROLE, new TopSelectionEditPolicy(m_component));
-    } else {
-      installEditPolicy(EditPolicy.SELECTION_ROLE, new NonResizableSelectionEditPolicy());
-    }
-    installEditPolicy(new OpenListenerEditPolicy(m_component));
-    OpenErrorLogEditPolicy.install(this);
-    refreshEditPolicies();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Policies
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createEditPolicies() {
+		if (m_component.isRoot()) {
+			installEditPolicy(EditPolicy.SELECTION_ROLE, new TopSelectionEditPolicy(m_component));
+		} else {
+			installEditPolicy(EditPolicy.SELECTION_ROLE, new NonResizableSelectionEditPolicy());
+		}
+		installEditPolicy(new OpenListenerEditPolicy(m_component));
+		OpenErrorLogEditPolicy.install(this);
+		refreshEditPolicies();
+	}
 
-  /**
-   * Installs {@link EditPolicy}'s after model refresh. For example we should install new
-   * {@link LayoutEditPolicy} if component has now new layout.
-   */
-  protected void refreshEditPolicies() {
-    OpenErrorLogEditPolicy.refresh(this);
-  }
+	/**
+	 * Installs {@link EditPolicy}'s after model refresh. For example we should install new
+	 * {@link LayoutEditPolicy} if component has now new layout.
+	 */
+	protected void refreshEditPolicies() {
+		OpenErrorLogEditPolicy.refresh(this);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Requests/Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public EditPart getTargetEditPart(Request request) {
-    // sometimes we want to redirect selection to parent
-    if (request instanceof SelectionRequest) {
-      if (JavaInfoUtils.hasTrueParameter(m_component, "GEF.clickToParent")) {
-        return getParent().getTargetEditPart(request);
-      }
-    }
-    return super.getTargetEditPart(request);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Requests/Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public EditPart getTargetEditPart(Request request) {
+		// sometimes we want to redirect selection to parent
+		if (request instanceof SelectionRequest) {
+			if (JavaInfoUtils.hasTrueParameter(m_component, "GEF.clickToParent")) {
+				return getParent().getTargetEditPart(request);
+			}
+		}
+		return super.getTargetEditPart(request);
+	}
 
-  @Override
-  public void performRequest(Request request) {
-    super.performRequest(request);
-    if (request instanceof DragPermissionRequest) {
-      DragPermissionRequest permissionRequest = (DragPermissionRequest) request;
-      permissionRequest.setMove(JavaInfoUtils.canMove(m_component));
-      permissionRequest.setReparent(JavaInfoUtils.canReparent(m_component));
-    }
-  }
+	@Override
+	public void performRequest(Request request) {
+		super.performRequest(request);
+		if (request instanceof DragPermissionRequest) {
+			DragPermissionRequest permissionRequest = (DragPermissionRequest) request;
+			permissionRequest.setMove(JavaInfoUtils.canMove(m_component));
+			permissionRequest.setReparent(JavaInfoUtils.canReparent(m_component));
+		}
+	}
 
-  @Override
-  public CompoundCommand createCompoundCommand() {
-    return new CompoundEditCommand(m_component);
-  }
+	@Override
+	public CompoundCommand createCompoundCommand() {
+		return new CompoundEditCommand(m_component);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void refresh() {
-    refreshEditPolicies();
-    super.refresh();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void refresh() {
+		refreshEditPolicies();
+		super.refresh();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Children
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected List<?> getModelChildren() {
-    return ExecutionUtils.runObjectLog(new RunnableObjectEx<List<?>>() {
-      @Override
-      public List<?> runObject() throws Exception {
-        return m_component.getPresentation().getChildrenGraphical();
-      }
-    }, Collections.emptyList());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Children
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected List<?> getModelChildren() {
+		return ExecutionUtils.runObjectLog(new RunnableObjectEx<List<?>>() {
+			@Override
+			public List<?> runObject() throws Exception {
+				return m_component.getPresentation().getChildrenGraphical();
+			}
+		}, Collections.emptyList());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Events
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Delays events that happen during model-driven messages loops.
-   */
-  private void listenFor_delayEvents() {
-    if (m_component.isRoot()) {
-      m_component.addBroadcastListener(new DisplayEventListener() {
-        private int m_level = 0;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Events
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Delays events that happen during model-driven messages loops.
+	 */
+	private void listenFor_delayEvents() {
+		if (m_component.isRoot()) {
+			m_component.addBroadcastListener(new DisplayEventListener() {
+				private int m_level = 0;
 
-        ////////////////////////////////////////////////////////////////////////////
-        //
-        // DisplayEventListener
-        //
-        ////////////////////////////////////////////////////////////////////////////
-        @Override
-        public void beforeMessagesLoop() {
-          if (isEnabled()) {
-            m_level++;
-            if (m_level == 1) {
-              delayEvents(true);
-            }
-          }
-        }
+				////////////////////////////////////////////////////////////////////////////
+				//
+				// DisplayEventListener
+				//
+				////////////////////////////////////////////////////////////////////////////
+				@Override
+				public void beforeMessagesLoop() {
+					if (isEnabled()) {
+						m_level++;
+						if (m_level == 1) {
+							delayEvents(true);
+						}
+					}
+				}
 
-        @Override
-        public void afterMessagesLoop() {
-          if (isEnabled()) {
-            m_level--;
-            if (m_level == 0) {
-              delayEvents(false);
-              runDelayedEvents();
-            }
-          }
-        }
+				@Override
+				public void afterMessagesLoop() {
+					if (isEnabled()) {
+						m_level--;
+						if (m_level == 0) {
+							delayEvents(false);
+							runDelayedEvents();
+						}
+					}
+				}
 
-        ////////////////////////////////////////////////////////////////////////////
-        //
-        // Utils
-        //
-        ////////////////////////////////////////////////////////////////////////////
-        private boolean isEnabled() {
-          if (!isActive()) {
-            return false;
-          }
-          if (getViewer().getControl().isDisposed()) {
-            return false;
-          }
-          return true;
-        }
+				////////////////////////////////////////////////////////////////////////////
+				//
+				// Utils
+				//
+				////////////////////////////////////////////////////////////////////////////
+				private boolean isEnabled() {
+					if (!isActive()) {
+						return false;
+					}
+					if (getViewer().getControl().isDisposed()) {
+						return false;
+					}
+					return true;
+				}
 
-        private void delayEvents(boolean delay) {
-          Control viewerControl = getViewer().getControl();
-          EventManager.delayEvents(viewerControl, delay);
-        }
+				private void delayEvents(boolean delay) {
+					Control viewerControl = getViewer().getControl();
+					EventManager.delayEvents(viewerControl, delay);
+				}
 
-        private void runDelayedEvents() {
-          ExecutionUtils.runLogLater(new RunnableEx() {
-            @Override
-            public void run() throws Exception {
-              if (isEnabled()) {
-                Control viewerControl = getViewer().getControl();
-                EventManager.runDelayedEvents(viewerControl);
-              }
-            }
-          });
-        }
-      });
-    }
-  }
+				private void runDelayedEvents() {
+					ExecutionUtils.runLogLater(new RunnableEx() {
+						@Override
+						public void run() throws Exception {
+							if (isEnabled()) {
+								Control viewerControl = getViewer().getControl();
+								EventManager.runDelayedEvents(viewerControl);
+							}
+						}
+					});
+				}
+			});
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/gef/policy/DirectTextPropertyEditPolicy.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/gef/policy/DirectTextPropertyEditPolicy.java
index 6753c5766..0d04b6e92 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/gef/policy/DirectTextPropertyEditPolicy.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/gef/policy/DirectTextPropertyEditPolicy.java
@@ -44,201 +44,201 @@
  * @coverage core.gef.policy
  */
 public final class DirectTextPropertyEditPolicy extends DirectTextEditPolicy {
-  public static final Object KEY = DirectTextPropertyEditPolicy.class;
+	public static final Object KEY = DirectTextPropertyEditPolicy.class;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Installation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * If given {@link AbstractComponentInfo} has path to the property in parameter
-   * <code>directEdit.property</code>, installs {@link DirectTextPropertyEditPolicy} for this
-   * property.
-   */
-  public static void install(AbstractComponentEditPart editPart) {
-    AbstractComponentInfo component = editPart.getComponent();
-    install(editPart, component);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Installation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * If given {@link AbstractComponentInfo} has path to the property in parameter
+	 * <code>directEdit.property</code>, installs {@link DirectTextPropertyEditPolicy} for this
+	 * property.
+	 */
+	public static void install(AbstractComponentEditPart editPart) {
+		AbstractComponentInfo component = editPart.getComponent();
+		install(editPart, component);
+	}
 
-  /**
-   * If given {@link AbstractComponentInfo} has path to the property in parameter
-   * <code>directEdit.property</code>, installs {@link DirectTextPropertyEditPolicy} for this
-   * property.
-   */
-  public static void install(final EditPart editPart, final AbstractComponentInfo component) {
-    ExecutionUtils.runLog(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        installEx(editPart, component);
-      }
-    });
-  }
+	/**
+	 * If given {@link AbstractComponentInfo} has path to the property in parameter
+	 * <code>directEdit.property</code>, installs {@link DirectTextPropertyEditPolicy} for this
+	 * property.
+	 */
+	public static void install(final EditPart editPart, final AbstractComponentInfo component) {
+		ExecutionUtils.runLog(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				installEx(editPart, component);
+			}
+		});
+	}
 
-  /**
-   * Implementation for {@link #install(EditPart, AbstractComponentInfo)}.
-   */
-  private static void installEx(EditPart editPart, AbstractComponentInfo component)
-      throws Exception {
-    // try to find property with "isText" tag
-    for (Property property : component.getProperties()) {
-      if (property instanceof GenericPropertyImpl) {
-        GenericPropertyImpl genericProperty = (GenericPropertyImpl) property;
-        GenericPropertyDescription description = genericProperty.getDescription();
-        if (genericProperty.getJavaInfo() == component
-            && description != null
-            && description.hasTrueTag("isText")) {
-          EditPolicy policy = new DirectTextPropertyEditPolicy(component, property);
-          editPart.installEditPolicy(KEY, policy);
-          return;
-        }
-      }
-    }
-    // try to find property using full path
-    {
-      String propertyPath = component.getDescription().getParameter("directEdit.property");
-      if (propertyPath != null) {
-        Property property = PropertyUtils.getByPath(component, propertyPath);
-        if (property != null) {
-          EditPolicy policy = new DirectTextPropertyEditPolicy(component, property);
-          editPart.installEditPolicy(policy);
-          return;
-        }
-      }
-    }
-  }
+	/**
+	 * Implementation for {@link #install(EditPart, AbstractComponentInfo)}.
+	 */
+	private static void installEx(EditPart editPart, AbstractComponentInfo component)
+			throws Exception {
+		// try to find property with "isText" tag
+		for (Property property : component.getProperties()) {
+			if (property instanceof GenericPropertyImpl) {
+				GenericPropertyImpl genericProperty = (GenericPropertyImpl) property;
+				GenericPropertyDescription description = genericProperty.getDescription();
+				if (genericProperty.getJavaInfo() == component
+						&& description != null
+						&& description.hasTrueTag("isText")) {
+					EditPolicy policy = new DirectTextPropertyEditPolicy(component, property);
+					editPart.installEditPolicy(KEY, policy);
+					return;
+				}
+			}
+		}
+		// try to find property using full path
+		{
+			String propertyPath = component.getDescription().getParameter("directEdit.property");
+			if (propertyPath != null) {
+				Property property = PropertyUtils.getByPath(component, propertyPath);
+				if (property != null) {
+					EditPolicy policy = new DirectTextPropertyEditPolicy(component, property);
+					editPart.installEditPolicy(policy);
+					return;
+				}
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance fields
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final AbstractComponentInfo m_component;
-  private final Property m_property;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance fields
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final AbstractComponentInfo m_component;
+	private final Property m_property;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DirectTextPropertyEditPolicy(AbstractComponentInfo component, Property property) {
-    m_component = component;
-    m_property = property;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DirectTextPropertyEditPolicy(AbstractComponentInfo component, Property property) {
+		m_component = component;
+		m_property = property;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getText() {
-    return ExecutionUtils.runObjectLog(new RunnableObjectEx<String>() {
-      @Override
-      public String runObject() throws Exception {
-        return (String) m_property.getValue();
-      }
-    }, StringUtils.EMPTY);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getText() {
+		return ExecutionUtils.runObjectLog(new RunnableObjectEx<String>() {
+			@Override
+			public String runObject() throws Exception {
+				return (String) m_property.getValue();
+			}
+		}, StringUtils.EMPTY);
+	}
 
-  @Override
-  protected void setText(final String text) {
-    ExecutionUtils.runLog(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        m_property.setValue(text);
-      }
-    });
-  }
+	@Override
+	protected void setText(final String text) {
+		ExecutionUtils.runLog(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				m_property.setValue(text);
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Location
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Point getTextWidgetLocation(Rectangle hostBounds, Dimension textSize) {
-    try {
-      // apply insets
-      {
-        String insetsString = JavaInfoUtils.getParameter(m_component, "directEdit.location.insets");
-        if (insetsString != null) {
-          String insetsElements[] = StringUtils.split(insetsString);
-          Assert.equals(4, insetsElements.length);
-          hostBounds.y += Integer.parseInt(insetsElements[0]);
-          hostBounds.x += Integer.parseInt(insetsElements[1]);
-          hostBounds.height -= Integer.parseInt(insetsElements[2]);
-          hostBounds.width -= Integer.parseInt(insetsElements[3]);
-        }
-      }
-      // prepare "x"
-      int x;
-      {
-        String horizontalAlignment =
-            JavaInfoUtils.getParameter(m_component, "directEdit.location.horizontalAlignment");
-        if (horizontalAlignment == null || "center".equals(horizontalAlignment)) {
-          x = hostBounds.getCenter().x - textSize.width / 2;
-        } else if ("left".equals(horizontalAlignment)) {
-          x = hostBounds.left();
-        } else {
-          throw new IllegalArgumentException(
-              "Unknown horizontal alignment: " + horizontalAlignment);
-        }
-      }
-      // prepare "y"
-      int y;
-      {
-        String verticalAlignment =
-            JavaInfoUtils.getParameter(m_component, "directEdit.location.verticalAlignment");
-        if (verticalAlignment == null || "center".equals(verticalAlignment)) {
-          y = hostBounds.getCenter().y - textSize.height / 2;
-        } else if ("top".equals(verticalAlignment)) {
-          y = hostBounds.top();
-        } else {
-          throw new IllegalArgumentException("Unknown vertical alignment: " + verticalAlignment);
-        }
-      }
-      // final location
-      return new Point(x, y);
-    } catch (Throwable e) {
-      throw new Error("Direct edit location for " + m_component, e);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Location
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Point getTextWidgetLocation(Rectangle hostBounds, Dimension textSize) {
+		try {
+			// apply insets
+			{
+				String insetsString = JavaInfoUtils.getParameter(m_component, "directEdit.location.insets");
+				if (insetsString != null) {
+					String insetsElements[] = StringUtils.split(insetsString);
+					Assert.equals(4, insetsElements.length);
+					hostBounds.y += Integer.parseInt(insetsElements[0]);
+					hostBounds.x += Integer.parseInt(insetsElements[1]);
+					hostBounds.height -= Integer.parseInt(insetsElements[2]);
+					hostBounds.width -= Integer.parseInt(insetsElements[3]);
+				}
+			}
+			// prepare "x"
+			int x;
+			{
+				String horizontalAlignment =
+						JavaInfoUtils.getParameter(m_component, "directEdit.location.horizontalAlignment");
+				if (horizontalAlignment == null || "center".equals(horizontalAlignment)) {
+					x = hostBounds.getCenter().x - textSize.width / 2;
+				} else if ("left".equals(horizontalAlignment)) {
+					x = hostBounds.left();
+				} else {
+					throw new IllegalArgumentException(
+							"Unknown horizontal alignment: " + horizontalAlignment);
+				}
+			}
+			// prepare "y"
+			int y;
+			{
+				String verticalAlignment =
+						JavaInfoUtils.getParameter(m_component, "directEdit.location.verticalAlignment");
+				if (verticalAlignment == null || "center".equals(verticalAlignment)) {
+					y = hostBounds.getCenter().y - textSize.height / 2;
+				} else if ("top".equals(verticalAlignment)) {
+					y = hostBounds.top();
+				} else {
+					throw new IllegalArgumentException("Unknown vertical alignment: " + verticalAlignment);
+				}
+			}
+			// final location
+			return new Point(x, y);
+		} catch (Throwable e) {
+			throw new Error("Direct edit location for " + m_component, e);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Activation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final String KEY_ALREADY_EDITED = "alreadyDirectEdited";
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Activation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final String KEY_ALREADY_EDITED = "alreadyDirectEdited";
 
-  @Override
-  public void activate() {
-    super.activate();
-    // try automatically activate direct edit
-    IPreferenceStore preferences = m_component.getDescription().getToolkit().getPreferences();
-    if (preferences.getBoolean(IPreferenceConstants.P_GENERAL_DIRECT_EDIT_AFTER_ADD)
-        && m_component.getArbitraryValue(JavaInfo.FLAG_MANUAL_COMPONENT) == Boolean.TRUE
-        && m_component.getArbitraryValue(KEY_ALREADY_EDITED) == null) {
-      m_component.putArbitraryValue(KEY_ALREADY_EDITED, Boolean.TRUE);
-      beginEdit();
-    }
-  }
+	@Override
+	public void activate() {
+		super.activate();
+		// try automatically activate direct edit
+		IPreferenceStore preferences = m_component.getDescription().getToolkit().getPreferences();
+		if (preferences.getBoolean(IPreferenceConstants.P_GENERAL_DIRECT_EDIT_AFTER_ADD)
+				&& m_component.getArbitraryValue(JavaInfo.FLAG_MANUAL_COMPONENT) == Boolean.TRUE
+				&& m_component.getArbitraryValue(KEY_ALREADY_EDITED) == null) {
+			m_component.putArbitraryValue(KEY_ALREADY_EDITED, Boolean.TRUE);
+			beginEdit();
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Request
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void performRequest(Request request) {
-    if (request instanceof KeyRequest) {
-      KeyRequest keyRequest = (KeyRequest) request;
-      if (keyRequest.isPressed() && (keyRequest.getCharacter() == ' ' || //
-          keyRequest.getKeyCode() == SWT.F2)) { //
-        beginEdit();
-      }
-    }
-    super.performRequest(request);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Request
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void performRequest(Request request) {
+		if (request instanceof KeyRequest) {
+			KeyRequest keyRequest = (KeyRequest) request;
+			if (keyRequest.isPressed() && (keyRequest.getCharacter() == ' ' || //
+					keyRequest.getKeyCode() == SWT.F2)) { //
+				beginEdit();
+			}
+		}
+		super.performRequest(request);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/gef/policy/TabOrderContainerEditPolicy.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/gef/policy/TabOrderContainerEditPolicy.java
index dd8a1e041..a01493beb 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/gef/policy/TabOrderContainerEditPolicy.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/gef/policy/TabOrderContainerEditPolicy.java
@@ -41,141 +41,141 @@
  * @coverage core.gef.policy
  */
 public final class TabOrderContainerEditPolicy extends GraphicalEditPolicy {
-  public static final Request TAB_ORDER_REQUEST = new Request("tab order");
-  public static final String TAB_CONTAINER_ROLE = "tab container role";
-  public static final String REQ_CONTAINER_TAB_ORDER = "container tab order";
-  private List<TextFeedback> m_indexFeedbacks;
+	public static final Request TAB_ORDER_REQUEST = new Request("tab order");
+	public static final String TAB_CONTAINER_ROLE = "tab container role";
+	public static final String REQ_CONTAINER_TAB_ORDER = "container tab order";
+	private List<TextFeedback> m_indexFeedbacks;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Request
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean understandsRequest(Request request) {
-    return request.getType() == REQ_CONTAINER_TAB_ORDER;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Request
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean understandsRequest(Request request) {
+		return request.getType() == REQ_CONTAINER_TAB_ORDER;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Feedback
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  //@edu.umd.cs.findbugs.annotations.SuppressWarnings(value = "BC_UNCONFIRMED_CAST")
-  public void showTargetFeedback(Request request) {
-    TabOrderContainerRequest containerRequest = (TabOrderContainerRequest) request;
-    //
-    if (containerRequest.getChildren() == null) {
-      try {
-        TabOrderInfo tabOrderInfo = getTabOrderValue();
-        containerRequest.setPossibleChildren(tabOrderInfo.getInfos());
-        containerRequest.setChildren(tabOrderInfo.getOrderedInfos());
-      } catch (Throwable e) {
-        DesignerPlugin.log(e);
-        return;
-      }
-    }
-    //
-    showChildrenIndexes(containerRequest.getChildren(), containerRequest.getSelectedChild());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Feedback
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	//@edu.umd.cs.findbugs.annotations.SuppressWarnings(value = "BC_UNCONFIRMED_CAST")
+	public void showTargetFeedback(Request request) {
+		TabOrderContainerRequest containerRequest = (TabOrderContainerRequest) request;
+		//
+		if (containerRequest.getChildren() == null) {
+			try {
+				TabOrderInfo tabOrderInfo = getTabOrderValue();
+				containerRequest.setPossibleChildren(tabOrderInfo.getInfos());
+				containerRequest.setChildren(tabOrderInfo.getOrderedInfos());
+			} catch (Throwable e) {
+				DesignerPlugin.log(e);
+				return;
+			}
+		}
+		//
+		showChildrenIndexes(containerRequest.getChildren(), containerRequest.getSelectedChild());
+	}
 
-  private void showChildrenIndexes(List<?> children, Object selectedChild) {
-    eraseChildrenIndexes();
-    m_indexFeedbacks = Lists.newArrayList();
-    Layer layer = getLayer(IEditPartViewer.CLICKABLE_LAYER);
-    IEditPartViewer viewer = getHost().getViewer();
-    for (int index = 0; index < children.size(); index++) {
-      Object child = children.get(index);
-      GraphicalEditPart part = (GraphicalEditPart) viewer.getEditPartByModel(child);
-      // prepare bounds for child in feedback layer
-      Figure figure = part.getFigure();
-      Point location = figure.getBounds().getLocation();
-      FigureUtils.translateFigureToFigure(figure, layer, location);
-      // add feedback with index
-      TextFeedback feedback = new TextFeedback(layer);
-      feedback.setText(Integer.toString(index));
-      feedback.add();
-      feedback.moveTopLeftCenter(location);
-      m_indexFeedbacks.add(feedback);
-      // register feedback with edit part, so we can click on number feedback as
-      // well as on EditPart's main figure
-      feedback.setData(part);
-      // set background
-      feedback.setBackground(IColorConstants.yellow);
-      if (child == selectedChild) {
-        feedback.setBackground(IColorConstants.lightGreen);
-      }
-    }
-  }
+	private void showChildrenIndexes(List<?> children, Object selectedChild) {
+		eraseChildrenIndexes();
+		m_indexFeedbacks = Lists.newArrayList();
+		Layer layer = getLayer(IEditPartViewer.CLICKABLE_LAYER);
+		IEditPartViewer viewer = getHost().getViewer();
+		for (int index = 0; index < children.size(); index++) {
+			Object child = children.get(index);
+			GraphicalEditPart part = (GraphicalEditPart) viewer.getEditPartByModel(child);
+			// prepare bounds for child in feedback layer
+			Figure figure = part.getFigure();
+			Point location = figure.getBounds().getLocation();
+			FigureUtils.translateFigureToFigure(figure, layer, location);
+			// add feedback with index
+			TextFeedback feedback = new TextFeedback(layer);
+			feedback.setText(Integer.toString(index));
+			feedback.add();
+			feedback.moveTopLeftCenter(location);
+			m_indexFeedbacks.add(feedback);
+			// register feedback with edit part, so we can click on number feedback as
+			// well as on EditPart's main figure
+			feedback.setData(part);
+			// set background
+			feedback.setBackground(IColorConstants.yellow);
+			if (child == selectedChild) {
+				feedback.setBackground(IColorConstants.lightGreen);
+			}
+		}
+	}
 
-  @Override
-  //@edu.umd.cs.findbugs.annotations.SuppressWarnings(value = "BC_UNCONFIRMED_CAST")
-  public void eraseTargetFeedback(Request request) {
-    eraseChildrenIndexes();
-    TabOrderContainerRequest containerRequest = (TabOrderContainerRequest) request;
-    TabOrderCommand command = new TabOrderCommand(getContainer(), containerRequest.getChildren());
-    containerRequest.setCommand(command);
-  }
+	@Override
+	//@edu.umd.cs.findbugs.annotations.SuppressWarnings(value = "BC_UNCONFIRMED_CAST")
+	public void eraseTargetFeedback(Request request) {
+		eraseChildrenIndexes();
+		TabOrderContainerRequest containerRequest = (TabOrderContainerRequest) request;
+		TabOrderCommand command = new TabOrderCommand(getContainer(), containerRequest.getChildren());
+		containerRequest.setCommand(command);
+	}
 
-  private void eraseChildrenIndexes() {
-    if (m_indexFeedbacks != null) {
-      for (TextFeedback feedback : m_indexFeedbacks) {
-        feedback.remove();
-      }
-      m_indexFeedbacks = null;
-    }
-  }
+	private void eraseChildrenIndexes() {
+		if (m_indexFeedbacks != null) {
+			for (TextFeedback feedback : m_indexFeedbacks) {
+				feedback.remove();
+			}
+			m_indexFeedbacks = null;
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private TabOrderInfo getTabOrderValue() throws Exception {
-    JavaInfo container = getContainer();
-    Property property = container.getPropertyByTitle("tab order");
-    return (TabOrderInfo) property.getValue();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private TabOrderInfo getTabOrderValue() throws Exception {
+		JavaInfo container = getContainer();
+		Property property = container.getPropertyByTitle("tab order");
+		return (TabOrderInfo) property.getValue();
+	}
 
-  private JavaInfo getContainer() {
-    return (JavaInfo) getHostModel();
-  }
+	private JavaInfo getContainer() {
+		return (JavaInfo) getHostModel();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Command
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static class TabOrderCommand extends EditCommand {
-    private final JavaInfo m_container;
-    private final List<AbstractComponentInfo> m_orderedInfos;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Command
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static class TabOrderCommand extends EditCommand {
+		private final JavaInfo m_container;
+		private final List<AbstractComponentInfo> m_orderedInfos;
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public TabOrderCommand(JavaInfo container, List<AbstractComponentInfo> orderedInfos) {
-      super(container);
-      m_container = container;
-      m_orderedInfos = orderedInfos;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public TabOrderCommand(JavaInfo container, List<AbstractComponentInfo> orderedInfos) {
+			super(container);
+			m_container = container;
+			m_orderedInfos = orderedInfos;
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // EditCommand
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    protected void executeEdit() throws Exception {
-      // prepare tab value
-      TabOrderInfo tabOrderInfo = new TabOrderInfo();
-      tabOrderInfo.getOrderedInfos().addAll(m_orderedInfos);
-      // prepare tab property
-      Property property = m_container.getPropertyByTitle("tab order");
-      // set new value
-      property.setValue(tabOrderInfo);
-    }
-  }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// EditCommand
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		protected void executeEdit() throws Exception {
+			// prepare tab value
+			TabOrderInfo tabOrderInfo = new TabOrderInfo();
+			tabOrderInfo.getOrderedInfos().addAll(m_orderedInfos);
+			// prepare tab property
+			Property property = m_container.getPropertyByTitle("tab order");
+			// set new value
+			property.setValue(tabOrderInfo);
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/gef/policy/layout/LayoutPolicyUtils2.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/gef/policy/layout/LayoutPolicyUtils2.java
index 1cd2140ce..0e37dd2e4 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/gef/policy/layout/LayoutPolicyUtils2.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/gef/policy/layout/LayoutPolicyUtils2.java
@@ -30,59 +30,59 @@
  * @coverage core.gef.policy
  */
 public class LayoutPolicyUtils2 {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Paste
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link Command} that performs generic {@link JavaInfo} paste operation.
-   */
-  public static <T extends JavaInfo> Command getPasteCommand(final JavaInfo existingHierarchyObject,
-      final PasteRequest request,
-      final Class<T> componentClass,
-      final IPasteProcessor<T> processor) {
-    @SuppressWarnings("unchecked")
-    final List<JavaInfoMemento> mementos = (List<JavaInfoMemento>) request.getMemento();
-    return ExecutionUtils.runObjectLog(new RunnableObjectEx<Command>() {
-      @Override
-      public Command runObject() throws Exception {
-        // prepare models
-        final List<JavaInfo> components;
-        {
-          components = Lists.newArrayList();
-          for (JavaInfoMemento memento : mementos) {
-            JavaInfo javaInfo = memento.create(existingHierarchyObject);
-            if (componentClass.isAssignableFrom(javaInfo.getClass())) {
-              components.add(javaInfo);
-            } else {
-              return null;
-            }
-          }
-          // set objects for selection
-          request.setObjects(components);
-        }
-        // create command
-        return new EditCommand(existingHierarchyObject) {
-          @Override
-          @SuppressWarnings("unchecked")
-          protected void executeEdit() throws Exception {
-            for (int i = 0; i < components.size(); i++) {
-              processor.process((T) components.get(i));
-              mementos.get(i).apply();
-            }
-          }
-        };
-      }
-    }, null);
-  }
-  /**
-   * Performs some concrete operation during {@link JavaInfo} pasting.
-   */
-  public interface IPasteProcessor<T extends JavaInfo> {
-    /**
-     * Performs some action for given {@link JavaInfo} (in most case - adds given component).
-     */
-    void process(T component) throws Exception;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Paste
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link Command} that performs generic {@link JavaInfo} paste operation.
+	 */
+	public static <T extends JavaInfo> Command getPasteCommand(final JavaInfo existingHierarchyObject,
+			final PasteRequest request,
+			final Class<T> componentClass,
+			final IPasteProcessor<T> processor) {
+		@SuppressWarnings("unchecked")
+		final List<JavaInfoMemento> mementos = (List<JavaInfoMemento>) request.getMemento();
+		return ExecutionUtils.runObjectLog(new RunnableObjectEx<Command>() {
+			@Override
+			public Command runObject() throws Exception {
+				// prepare models
+				final List<JavaInfo> components;
+				{
+					components = Lists.newArrayList();
+					for (JavaInfoMemento memento : mementos) {
+						JavaInfo javaInfo = memento.create(existingHierarchyObject);
+						if (componentClass.isAssignableFrom(javaInfo.getClass())) {
+							components.add(javaInfo);
+						} else {
+							return null;
+						}
+					}
+					// set objects for selection
+					request.setObjects(components);
+				}
+				// create command
+				return new EditCommand(existingHierarchyObject) {
+					@Override
+					@SuppressWarnings("unchecked")
+					protected void executeEdit() throws Exception {
+						for (int i = 0; i < components.size(); i++) {
+							processor.process((T) components.get(i));
+							mementos.get(i).apply();
+						}
+					}
+				};
+			}
+		}, null);
+	}
+	/**
+	 * Performs some concrete operation during {@link JavaInfo} pasting.
+	 */
+	public interface IPasteProcessor<T extends JavaInfo> {
+		/**
+		 * Performs some action for given {@link JavaInfo} (in most case - adds given component).
+		 */
+		void process(T component) throws Exception;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/gef/policy/selection/TopSelectionEditPolicy.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/gef/policy/selection/TopSelectionEditPolicy.java
index d8c70f483..e744ff195 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/gef/policy/selection/TopSelectionEditPolicy.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/gef/policy/selection/TopSelectionEditPolicy.java
@@ -39,134 +39,134 @@
  * @coverage core.gef.policy
  */
 public final class TopSelectionEditPolicy extends SelectionEditPolicy {
-  private static final String REQ_RESIZE = "resize";
-  private final IAbstractComponentInfo m_component;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public TopSelectionEditPolicy(IAbstractComponentInfo component) {
-    m_component = component;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Handles
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected List<Handle> createSelectionHandles() {
-    List<Handle> handles = Lists.newArrayList();
-    handles.add(new MoveHandle(getHost()));
-    handles.add(createResizeHandle(IPositionConstants.EAST));
-    handles.add(createResizeHandle(IPositionConstants.SOUTH_EAST));
-    handles.add(createResizeHandle(IPositionConstants.SOUTH));
-    return handles;
-  }
-
-  private Handle createResizeHandle(int direction) {
-    ResizeHandle handle = new ResizeHandle(getHost(), direction);
-    handle.setDragTrackerTool(new ResizeTracker(direction, REQ_RESIZE));
-    return handle;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Routing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean understandsRequest(Request request) {
-    return super.understandsRequest(request) || request.getType() == REQ_RESIZE;
-  }
-
-  @Override
-  //@edu.umd.cs.findbugs.annotations.SuppressWarnings(value = "BC_UNCONFIRMED_CAST")
-  public Command getCommand(Request request) {
-    return getResizeCommand((ChangeBoundsRequest) request);
-  }
-
-  @Override
-  //@edu.umd.cs.findbugs.annotations.SuppressWarnings(value = "BC_UNCONFIRMED_CAST")
-  public void showSourceFeedback(Request request) {
-    showResizeFeedback((ChangeBoundsRequest) request);
-  }
-
-  @Override
-  //@edu.umd.cs.findbugs.annotations.SuppressWarnings(value = "BC_UNCONFIRMED_CAST")
-  public void eraseSourceFeedback(Request request) {
-    eraseResizeFeedback((ChangeBoundsRequest) request);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Resize
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private TopResizeFigure m_resizeFeedback;
-
-  /**
-   * @return the {@link Command} for resize.
-   */
-  private Command getResizeCommand(ChangeBoundsRequest request) {
-    final Rectangle oldBounds = getHost().getFigure().getBounds();
-    final Rectangle newBounds = request.getTransformedRectangle(oldBounds);
-    sanitizeBounds(newBounds);
-    return new EditCommand(m_component) {
-      @Override
-      protected void executeEdit() throws Exception {
-        ITopBoundsSupport topBoundsSupport = m_component.getTopBoundsSupport();
-        topBoundsSupport.setSize(newBounds.width, newBounds.height);
-      }
-    };
-  }
-
-  /**
-   * Shows resize feedback.
-   */
-  protected void showResizeFeedback(ChangeBoundsRequest request) {
-    if (m_resizeFeedback == null) {
-      // create feedback
-      {
-        m_resizeFeedback = new TopResizeFigure();
-        addFeedback(m_resizeFeedback);
-      }
-    }
-    // update feedback
-    {
-      // prepare feedback bounds
-      Rectangle bounds;
-      {
-        Figure hostFigure = getHostFigure();
-        bounds = request.getTransformedRectangle(hostFigure.getBounds());
-        sanitizeBounds(bounds);
-        FigureUtils.translateFigureToAbsolute(hostFigure, bounds);
-      }
-      String sizeText =
-          "[" + Integer.toString(bounds.width) + " x " + Integer.toString(bounds.height) + "]";
-      m_resizeFeedback.setSizeText(sizeText);
-      // set bounds for feedback
-      m_resizeFeedback.setBounds(bounds);
-    }
-  }
-
-  /**
-   * Erases resize feedback.
-   */
-  private void eraseResizeFeedback(ChangeBoundsRequest request) {
-    if (m_resizeFeedback != null) {
-      removeFeedback(m_resizeFeedback);
-      m_resizeFeedback = null;
-    }
-  }
-
-  /**
-   * Ensure that given {@link Rectangle} has reasonable width/height.
-   */
-  private static void sanitizeBounds(Rectangle bounds) {
-    bounds.width = Math.max(bounds.width, 10);
-    bounds.height = Math.max(bounds.height, 10);
-  }
+	private static final String REQ_RESIZE = "resize";
+	private final IAbstractComponentInfo m_component;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public TopSelectionEditPolicy(IAbstractComponentInfo component) {
+		m_component = component;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Handles
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected List<Handle> createSelectionHandles() {
+		List<Handle> handles = Lists.newArrayList();
+		handles.add(new MoveHandle(getHost()));
+		handles.add(createResizeHandle(IPositionConstants.EAST));
+		handles.add(createResizeHandle(IPositionConstants.SOUTH_EAST));
+		handles.add(createResizeHandle(IPositionConstants.SOUTH));
+		return handles;
+	}
+
+	private Handle createResizeHandle(int direction) {
+		ResizeHandle handle = new ResizeHandle(getHost(), direction);
+		handle.setDragTrackerTool(new ResizeTracker(direction, REQ_RESIZE));
+		return handle;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Routing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean understandsRequest(Request request) {
+		return super.understandsRequest(request) || request.getType() == REQ_RESIZE;
+	}
+
+	@Override
+	//@edu.umd.cs.findbugs.annotations.SuppressWarnings(value = "BC_UNCONFIRMED_CAST")
+	public Command getCommand(Request request) {
+		return getResizeCommand((ChangeBoundsRequest) request);
+	}
+
+	@Override
+	//@edu.umd.cs.findbugs.annotations.SuppressWarnings(value = "BC_UNCONFIRMED_CAST")
+	public void showSourceFeedback(Request request) {
+		showResizeFeedback((ChangeBoundsRequest) request);
+	}
+
+	@Override
+	//@edu.umd.cs.findbugs.annotations.SuppressWarnings(value = "BC_UNCONFIRMED_CAST")
+	public void eraseSourceFeedback(Request request) {
+		eraseResizeFeedback((ChangeBoundsRequest) request);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Resize
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private TopResizeFigure m_resizeFeedback;
+
+	/**
+	 * @return the {@link Command} for resize.
+	 */
+	private Command getResizeCommand(ChangeBoundsRequest request) {
+		final Rectangle oldBounds = getHost().getFigure().getBounds();
+		final Rectangle newBounds = request.getTransformedRectangle(oldBounds);
+		sanitizeBounds(newBounds);
+		return new EditCommand(m_component) {
+			@Override
+			protected void executeEdit() throws Exception {
+				ITopBoundsSupport topBoundsSupport = m_component.getTopBoundsSupport();
+				topBoundsSupport.setSize(newBounds.width, newBounds.height);
+			}
+		};
+	}
+
+	/**
+	 * Shows resize feedback.
+	 */
+	protected void showResizeFeedback(ChangeBoundsRequest request) {
+		if (m_resizeFeedback == null) {
+			// create feedback
+			{
+				m_resizeFeedback = new TopResizeFigure();
+				addFeedback(m_resizeFeedback);
+			}
+		}
+		// update feedback
+		{
+			// prepare feedback bounds
+			Rectangle bounds;
+			{
+				Figure hostFigure = getHostFigure();
+				bounds = request.getTransformedRectangle(hostFigure.getBounds());
+				sanitizeBounds(bounds);
+				FigureUtils.translateFigureToAbsolute(hostFigure, bounds);
+			}
+			String sizeText =
+					"[" + Integer.toString(bounds.width) + " x " + Integer.toString(bounds.height) + "]";
+			m_resizeFeedback.setSizeText(sizeText);
+			// set bounds for feedback
+			m_resizeFeedback.setBounds(bounds);
+		}
+	}
+
+	/**
+	 * Erases resize feedback.
+	 */
+	private void eraseResizeFeedback(ChangeBoundsRequest request) {
+		if (m_resizeFeedback != null) {
+			removeFeedback(m_resizeFeedback);
+			m_resizeFeedback = null;
+		}
+	}
+
+	/**
+	 * Ensure that given {@link Rectangle} has reasonable width/height.
+	 */
+	private static void sanitizeBounds(Rectangle bounds) {
+		bounds.width = Math.max(bounds.width, 10);
+		bounds.height = Math.max(bounds.height, 10);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/gefTree/part/JavaEditPart.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/gefTree/part/JavaEditPart.java
index a0402f71f..744bfcc08 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/gefTree/part/JavaEditPart.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/gefTree/part/JavaEditPart.java
@@ -21,38 +21,38 @@
  * @coverage core.gefTree
  */
 public class JavaEditPart extends ObjectEditPart {
-  private final JavaInfo m_javaInfo;
+	private final JavaInfo m_javaInfo;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public JavaEditPart(JavaInfo javaInfo) {
-    super(javaInfo);
-    m_javaInfo = javaInfo;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public JavaEditPart(JavaInfo javaInfo) {
+		super(javaInfo);
+		m_javaInfo = javaInfo;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Policies
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createEditPolicies() {
-    super.createEditPolicies();
-    DoubleClickLayoutEditPolicy.install(this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Policies
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createEditPolicies() {
+		super.createEditPolicies();
+		DoubleClickLayoutEditPolicy.install(this);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link JavaInfo} model for this {@link JavaInfoEditPart}.
-   */
-  public final JavaInfo getJavaInfo() {
-    return m_javaInfo;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link JavaInfo} model for this {@link JavaInfoEditPart}.
+	 */
+	public final JavaInfo getJavaInfo() {
+		return m_javaInfo;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/AbstractComponentInfo.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/AbstractComponentInfo.java
index bd3a652e3..f4650a62d 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/AbstractComponentInfo.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/AbstractComponentInfo.java
@@ -31,256 +31,256 @@
  * @coverage core.model
  */
 public abstract class AbstractComponentInfo extends JavaInfo implements IAbstractComponentInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractComponentInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractComponentInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Bounds
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Rectangle m_bounds;
-  private Rectangle m_modelBounds;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Bounds
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Rectangle m_bounds;
+	private Rectangle m_modelBounds;
 
-  @Override
-  public final Rectangle getBounds() {
-    return m_bounds;
-  }
+	@Override
+	public final Rectangle getBounds() {
+		return m_bounds;
+	}
 
-  @Override
-  public final void setBounds(Rectangle bounds) {
-    m_bounds = bounds;
-  }
+	@Override
+	public final void setBounds(Rectangle bounds) {
+		m_bounds = bounds;
+	}
 
-  @Override
-  public final Rectangle getModelBounds() {
-    return m_modelBounds;
-  }
+	@Override
+	public final Rectangle getModelBounds() {
+		return m_modelBounds;
+	}
 
-  @Override
-  public final void setModelBounds(Rectangle bounds) {
-    m_modelBounds = bounds;
-    // set "shot" bounds
-    m_bounds = m_modelBounds.getCopy();
-    if (getParent() instanceof AbstractComponentInfo) {
-      AbstractComponentInfo parentComponent = (AbstractComponentInfo) getParent();
-      m_bounds.performTranslate(parentComponent.getClientAreaInsets());
-    }
-  }
+	@Override
+	public final void setModelBounds(Rectangle bounds) {
+		m_modelBounds = bounds;
+		// set "shot" bounds
+		m_bounds = m_modelBounds.getCopy();
+		if (getParent() instanceof AbstractComponentInfo) {
+			AbstractComponentInfo parentComponent = (AbstractComponentInfo) getParent();
+			m_bounds.performTranslate(parentComponent.getClientAreaInsets());
+		}
+	}
 
-  /**
-   * @return the absolute bounds, i.e. bounds relative to the top-left point of root component.
-   */
-  public final Rectangle getAbsoluteBounds() {
-    Rectangle bounds = getBounds().getCopy();
-    // make relative to screen
-    {
-      AbstractComponentInfo parent = (AbstractComponentInfo) getParent();
-      while (parent != null) {
-        bounds.performTranslate(parent.getBounds().getLocation());
-        parent = (AbstractComponentInfo) parent.getParent();
-      }
-    }
-    // make relative to root component
-    {
-      AbstractComponentInfo rootComponent = (AbstractComponentInfo) getRoot();
-      bounds.performTranslate(rootComponent.getBounds().getLocation().getNegated());
-    }
-    // OK, final result
-    return bounds;
-  }
+	/**
+	 * @return the absolute bounds, i.e. bounds relative to the top-left point of root component.
+	 */
+	public final Rectangle getAbsoluteBounds() {
+		Rectangle bounds = getBounds().getCopy();
+		// make relative to screen
+		{
+			AbstractComponentInfo parent = (AbstractComponentInfo) getParent();
+			while (parent != null) {
+				bounds.performTranslate(parent.getBounds().getLocation());
+				parent = (AbstractComponentInfo) parent.getParent();
+			}
+		}
+		// make relative to root component
+		{
+			AbstractComponentInfo rootComponent = (AbstractComponentInfo) getRoot();
+			bounds.performTranslate(rootComponent.getBounds().getLocation().getNegated());
+		}
+		// OK, final result
+		return bounds;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Preferred size
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Dimension m_preferredSize;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Preferred size
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Dimension m_preferredSize;
 
-  @Override
-  public final Dimension getPreferredSize() {
-    if (m_preferredSize == null) {
-      return getLivePreferredSize();
-    }
-    return m_preferredSize;
-  }
+	@Override
+	public final Dimension getPreferredSize() {
+		if (m_preferredSize == null) {
+			return getLivePreferredSize();
+		}
+		return m_preferredSize;
+	}
 
-  /**
-   * Sets preferred size of this component.
-   *
-   * This method should be used by subclasses during fetching visual information.
-   */
-  public final void setPreferredSize(Dimension preferredSize) {
-    m_preferredSize = preferredSize;
-  }
+	/**
+	 * Sets preferred size of this component.
+	 *
+	 * This method should be used by subclasses during fetching visual information.
+	 */
+	public final void setPreferredSize(Dimension preferredSize) {
+		m_preferredSize = preferredSize;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Baseline
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final int getBaseline() {
-    Object object = getObject();
-    if (object == null) {
-      return getLiveBaseline();
-    }
-    return BaselineSupportHelper.getBaseline(object);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Baseline
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final int getBaseline() {
+		Object object = getObject();
+		if (object == null) {
+			return getLiveBaseline();
+		}
+		return BaselineSupportHelper.getBaseline(object);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Insets
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Insets m_clientAreaInsets = IFigure.NO_INSETS;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Insets
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Insets m_clientAreaInsets = IFigure.NO_INSETS;
 
-  @Override
-  public final Insets getClientAreaInsets() {
-    return m_clientAreaInsets;
-  }
+	@Override
+	public final Insets getClientAreaInsets() {
+		return m_clientAreaInsets;
+	}
 
-  @Override
-  public final void setClientAreaInsets(Insets clientAreaInsets) {
-    m_clientAreaInsets = clientAreaInsets;
-  }
+	@Override
+	public final void setClientAreaInsets(Insets clientAreaInsets) {
+		m_clientAreaInsets = clientAreaInsets;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Right-to-left
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean isRTL() {
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Right-to-left
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean isRTL() {
+		return false;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Image
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Image m_image;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Image
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Image m_image;
 
-  @Override
-  public final Image getImage() {
-    if (m_image == null && getParent() == null) {
-      return getLiveImage();
-    }
-    return m_image;
-  }
+	@Override
+	public final Image getImage() {
+		if (m_image == null && getParent() == null) {
+			return getLiveImage();
+		}
+		return m_image;
+	}
 
-  /**
-   * Sets new image of this component.<br>
-   * This method should be used by subclasses during fetching visual information.
-   */
-  public final void setImage(Image image) {
-    m_image = image;
-  }
+	/**
+	 * Sets new image of this component.<br>
+	 * This method should be used by subclasses during fetching visual information.
+	 */
+	public final void setImage(Image image) {
+		m_image = image;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // "Live" support
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the image of this component that should be used during creation.
-   */
-  protected Image getLiveImage() {
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// "Live" support
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the image of this component that should be used during creation.
+	 */
+	protected Image getLiveImage() {
+		return null;
+	}
 
-  /**
-   * @return the preferred size of this component that should be used during creation.
-   */
-  protected Dimension getLivePreferredSize() {
-    Image liveImage = getLiveImage();
-    if (liveImage != null) {
-      return new Dimension(liveImage.getBounds().width, liveImage.getBounds().height);
-    }
-    return null;
-  }
+	/**
+	 * @return the preferred size of this component that should be used during creation.
+	 */
+	protected Dimension getLivePreferredSize() {
+		Image liveImage = getLiveImage();
+		if (liveImage != null) {
+			return new Dimension(liveImage.getBounds().width, liveImage.getBounds().height);
+		}
+		return null;
+	}
 
-  /**
-   * @return the baseline of this component that should be used during creation.
-   */
-  protected int getLiveBaseline() {
-    return -1;
-  }
+	/**
+	 * @return the baseline of this component that should be used during creation.
+	 */
+	protected int getLiveBaseline() {
+		return -1;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Delete
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void delete() throws Exception {
-    super.delete();
-    refresh_dispose();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Delete
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void delete() throws Exception {
+		super.delete();
+		refresh_dispose();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void refresh_dispose() throws Exception {
-    // dispose image
-    if (m_image != null) {
-      m_image.dispose();
-      m_image = null;
-    }
-    // call "super"
-    super.refresh_dispose();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void refresh_dispose() throws Exception {
+		// dispose image
+		if (m_image != null) {
+			m_image.dispose();
+			m_image = null;
+		}
+		// call "super"
+		super.refresh_dispose();
+	}
 
-  @Override
-  protected void refresh_afterCreate() throws Exception {
-    // call "super"
-    super.refresh_afterCreate();
-    // apply top bounds for root component
-    if (isRoot()) {
-      getTopBoundsSupport().apply();
-    }
-  }
+	@Override
+	protected void refresh_afterCreate() throws Exception {
+		// call "super"
+		super.refresh_afterCreate();
+		// apply top bounds for root component
+		if (isRoot()) {
+			getTopBoundsSupport().apply();
+		}
+	}
 
-  /**
-   * @return the visual object for this {@link AbstractComponentInfo}. In most cases this is same
-   *         object as {@link #getObject()}, but sometimes component is not visual itself, but has
-   *         visual presentation.
-   */
-  public Object getComponentObject() {
-    return getObject();
-  }
+	/**
+	 * @return the visual object for this {@link AbstractComponentInfo}. In most cases this is same
+	 *         object as {@link #getObject()}, but sometimes component is not visual itself, but has
+	 *         visual presentation.
+	 */
+	public Object getComponentObject() {
+		return getObject();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // TopBoundsSupport
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private TopBoundsSupport m_topBoundsSupport;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// TopBoundsSupport
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private TopBoundsSupport m_topBoundsSupport;
 
-  @Override
-  public final TopBoundsSupport getTopBoundsSupport() {
-    if (m_topBoundsSupport == null) {
-      m_topBoundsSupport = createTopBoundsSupport();
-    }
-    return m_topBoundsSupport;
-  }
+	@Override
+	public final TopBoundsSupport getTopBoundsSupport() {
+		if (m_topBoundsSupport == null) {
+			m_topBoundsSupport = createTopBoundsSupport();
+		}
+		return m_topBoundsSupport;
+	}
 
-  /**
-   * @return the new {@link TopBoundsSupport} instance for this component.
-   */
-  protected TopBoundsSupport createTopBoundsSupport() {
-    throw new NotImplementedException();
-  }
+	/**
+	 * @return the new {@link TopBoundsSupport} instance for this component.
+	 */
+	protected TopBoundsSupport createTopBoundsSupport() {
+		throw new NotImplementedException();
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/IJavaInfoInitializationParticipator.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/IJavaInfoInitializationParticipator.java
index 210979593..89efbb0e9 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/IJavaInfoInitializationParticipator.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/IJavaInfoInitializationParticipator.java
@@ -17,8 +17,8 @@
  * @coverage core.model
  */
 public interface IJavaInfoInitializationParticipator {
-  /**
-   * Participates in given {@link JavaInfo} initialization.
-   */
-  void process(JavaInfo javaInfo) throws Exception;
+	/**
+	 * Participates in given {@link JavaInfo} initialization.
+	 */
+	void process(JavaInfo javaInfo) throws Exception;
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/IRootProcessor.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/IRootProcessor.java
index 5b8a6a0fc..956b3b594 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/IRootProcessor.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/IRootProcessor.java
@@ -19,13 +19,13 @@
  * @coverage core.model
  */
 public interface IRootProcessor {
-  /**
-   * Last step before building tree {@link JavaInfo} complete.
-   *
-   * @param root
-   *          the {@link JavaInfo} that is root of build component hierarchy.
-   * @param components
-   *          all components, bound and not bound, that were created during parsing.
-   */
-  void process(JavaInfo root, List<JavaInfo> components) throws Exception;
+	/**
+	 * Last step before building tree {@link JavaInfo} complete.
+	 *
+	 * @param root
+	 *          the {@link JavaInfo} that is root of build component hierarchy.
+	 * @param components
+	 *          all components, bound and not bound, that were created during parsing.
+	 */
+	void process(JavaInfo root, List<JavaInfo> components) throws Exception;
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/IWrapper.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/IWrapper.java
index 1bbc20bba..be10c13f5 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/IWrapper.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/IWrapper.java
@@ -19,18 +19,18 @@
  * @coverage core.model
  */
 public interface IWrapper {
-  /**
-   * @return wrapper {@link JavaInfo}.
-   */
-  JavaInfo getWrapperInfo();
+	/**
+	 * @return wrapper {@link JavaInfo}.
+	 */
+	JavaInfo getWrapperInfo();
 
-  /**
-   * @return wrapped {@link JavaInfo}.
-   */
-  JavaInfo getWrappedInfo() throws Exception;
+	/**
+	 * @return wrapped {@link JavaInfo}.
+	 */
+	JavaInfo getWrappedInfo() throws Exception;
 
-  /**
-   * @return <code>true</code> if given {@link ASTNode} represents {@link #getWrappedInfo()}.
-   */
-  boolean isWrappedInfo(ASTNode node);
+	/**
+	 * @return <code>true</code> if given {@link ASTNode} represents {@link #getWrappedInfo()}.
+	 */
+	boolean isWrappedInfo(ASTNode node);
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/IWrapperInfo.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/IWrapperInfo.java
index eced815a7..2c311a7c0 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/IWrapperInfo.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/IWrapperInfo.java
@@ -20,9 +20,9 @@
  * @coverage core.model
  */
 public interface IWrapperInfo {
-  /**
-   * @return the {@link AbstractWrapper}.
-   * @see JavaInfoUtils#getWrapped(JavaInfo)
-   */
-  public IWrapper getWrapper();
+	/**
+	 * @return the {@link AbstractWrapper}.
+	 * @see JavaInfoUtils#getWrapped(JavaInfo)
+	 */
+	public IWrapper getWrapper();
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/JavaInfo.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/JavaInfo.java
index 6636c47a2..43dbe5da7 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/JavaInfo.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/JavaInfo.java
@@ -105,1237 +105,1237 @@
  * @coverage core.model
  */
 public class JavaInfo extends ObjectInfo implements HasSourcePosition {
-  private final JavaInfo m_this = this;
-  /**
-   * We mark components that user drops from palette with this flag to be able distinguish them from
-   * objects that created as consequence of user operation.
-   */
-  public static final String FLAG_MANUAL_COMPONENT = "manuallyCreatedComponent";
-  /**
-   * When we prepare "live image", we use start/commit/edit transaction, so {@link #saveEdit()}
-   * commits changes of source code into underlying {@link ICompilationUnit}, but these changes are
-   * just temporary, and we don't want to have them in UNDO history. So, when component is marked
-   * with this flag, we avoid committing changes.
-   */
-  public static final String FLAG_DONT_COMMIT_EDITOR = "don't commit ASTEditor source";
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance fields
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final ComponentDescription m_description;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public JavaInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    m_editor = editor;
-    m_description = description;
-    m_creationSupport = creationSupport;
-    // initialize
-    setBroadcastSupport(EditorState.get(m_editor).getBroadcast());
-    m_description.visit(this, AbstractDescription.STATE_USE);
-    scheduleSendingObjectReady();
-    m_creationSupport.setJavaInfo(this);
-    // properties
-    {
-      Class<?> componentClass = description.getComponentClass();
-      if (componentClass == null) {
-        m_componentClassProperty = null;
-        m_eventsProperty = null;
-      } else {
-        IJavaProject javaProject = editor.getJavaProject();
-        m_componentClassProperty = new ComponentClassProperty(javaProject, componentClass);
-        m_eventsProperty = new EventsProperty(this);
-      }
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    StringBuffer buffer = new StringBuffer();
-    // creation
-    buffer.append("{");
-    buffer.append(m_creationSupport.toString());
-    buffer.append("}");
-    // variable
-    if (m_variableSupport != null) {
-      buffer.append(" {");
-      buffer.append(m_variableSupport.toString());
-      buffer.append("}");
-    }
-    // nodes
-    appendNodes(buffer, getRelatedNodes());
-    // result
-    return buffer.toString();
-  }
-
-  /**
-   * Appends nodes for {@link #toString()}.
-   */
-  private void appendNodes(StringBuffer buffer, List<ASTNode> nodes) {
-    buffer.append(" {");
-    boolean first = true;
-    for (ASTNode node : nodes) {
-      // append separator
-      if (!first) {
-        buffer.append(" ");
-      }
-      first = false;
-      // prepare node for getting source
-      ASTNode sourceNode = getRelatedNodeForSource(node);
-      // append wrapped source of node
-      {
-        String source = getEditor().getSource(sourceNode);
-        // if anonymous class creation, cut body
-        if (sourceNode instanceof ClassInstanceCreation) {
-          ClassInstanceCreation creation = (ClassInstanceCreation) sourceNode;
-          if (creation.getAnonymousClassDeclaration() != null) {
-            source = StringUtils.substringBefore(source, "{").trim();
-          }
-        }
-        // do append
-        buffer.append("/");
-        buffer.append(source);
-        buffer.append("/");
-      }
-    }
-    buffer.append("}");
-  }
-
-  /**
-   * @return the {@link ASTNode} that should be used to display given related {@link ASTNode}.
-   */
-  public static ASTNode getRelatedNodeForSource(ASTNode node) {
-    ASTNode sourceNode = node;
-    // part of invocation
-    if (node.getLocationInParent() == MethodInvocation.EXPRESSION_PROPERTY) {
-      sourceNode = node.getParent();
-    }
-    if (node.getLocationInParent() == MethodInvocation.ARGUMENTS_PROPERTY) {
-      sourceNode = node.getParent();
-    }
-    if (node.getLocationInParent() == SuperConstructorInvocation.ARGUMENTS_PROPERTY) {
-      sourceNode = node.getParent();
-    }
-    if (node.getLocationInParent() == SuperMethodInvocation.ARGUMENTS_PROPERTY) {
-      sourceNode = node.getParent();
-    }
-    if (node.getLocationInParent() == ClassInstanceCreation.ARGUMENTS_PROPERTY) {
-      sourceNode = node.getParent();
-    }
-    // javaInfo.foo = something
-    if (node.getLocationInParent() == QualifiedName.QUALIFIER_PROPERTY) {
-      QualifiedName qualifiedName = (QualifiedName) node.getParent();
-      sourceNode = qualifiedName;
-      if (qualifiedName.getLocationInParent() == Assignment.LEFT_HAND_SIDE_PROPERTY) {
-        sourceNode = qualifiedName.getParent();
-      }
-    }
-    // done
-    return sourceNode;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final AstEditor m_editor;
-
-  /**
-   * @return the current {@link AstEditor}.
-   */
-  public final AstEditor getEditor() {
-    return m_editor;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Edit operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected final void saveEdit() throws Exception {
-    if (getArbitraryValue(FLAG_DONT_COMMIT_EDITOR) == null) {
-      m_editor.commitChanges();
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link ComponentDescription} of this object.
-   */
-  public final ComponentDescription getDescription() {
-    return m_description;
-  }
-
-  /**
-   * @return <code>true</code> if this object can be root. For example in SWT <code>Control</code>
-   *         can not be root, so we should explicitly set what can be root.
-   */
-  public boolean canBeRoot() {
-    return false;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Templates
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Map<String, String> m_templateArguments = null;
-
-  /**
-   * @return the {@link Map} of template arguments.
-   */
-  public Map<String, String> getTemplateArguments() {
-    return m_templateArguments != null
-        ? Collections.unmodifiableMap(m_templateArguments)
-        : m_templateArguments;
-  }
-
-  /**
-   * Associates the given value with the given template.
-   */
-  public void putTemplateArgument(String name, String value) {
-    if (m_templateArguments == null) {
-      m_templateArguments = Maps.newHashMap();
-    }
-    m_templateArguments.put(name, value);
-  }
-
-  /**
-   * Associates the given values with the given templates.
-   */
-  public void putTemplateArguments(Map<String, String> templateArguments) {
-    if (templateArguments != null && !templateArguments.isEmpty()) {
-      for (Entry<String, String> argument : templateArguments.entrySet()) {
-        putTemplateArgument(argument.getKey(), argument.getValue());
-      }
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Hierarchy
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the result of {@link #getParent()} casted to the {@link JavaInfo}.
-   */
-  public final JavaInfo getParentJava() {
-    return (JavaInfo) getParent();
-  }
-
-  /**
-   * @return the result of {@link #getRoot()} casted to the {@link JavaInfo}.
-   */
-  public final JavaInfo getRootJava() {
-    return (JavaInfo) getRoot();
-  }
-
-  /**
-   * @return the list of {@link JavaInfo} children.
-   */
-  public final List<JavaInfo> getChildrenJava() {
-    return getChildren(JavaInfo.class);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Association
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Association m_association;
-
-  /**
-   * @return the {@link Association} between this {@link JavaInfo} and its parent.
-   */
-  public Association getAssociation() {
-    return m_association;
-  }
-
-  /**
-   * Sets the {@link Association} between this {@link JavaInfo} and its parent.
-   *
-   * @param association
-   *          the {@link Association} instance, or <code>null</code> if existing {@link Association}
-   *          should be removed.
-   */
-  public void setAssociation(Association association) throws Exception {
-    getBroadcast(JavaInfoSetAssociationBefore.class).invoke(this, association);
-    m_association = association;
-    if (m_association != null) {
-      m_association.setJavaInfo(this);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Broadcasting
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link JavaEventListener} for hierarchy.
-   */
-  public final JavaEventListener getBroadcastJava() {
-    return ExecutionUtils.runObject(new RunnableObjectEx<JavaEventListener>() {
-      @Override
-      public JavaEventListener runObject() throws Exception {
-        return getBroadcast(JavaEventListener.class);
-      }
-    });
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Initializing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Is <code>true</code> if this {@link JavaInfo} already initialized. We check this flag in
-   * {@link #setObject(Object)} and do initialization if needed. This is required for newly created
-   * {@link JavaInfo
+	private final JavaInfo m_this = this;
+	/**
+	 * We mark components that user drops from palette with this flag to be able distinguish them from
+	 * objects that created as consequence of user operation.
+	 */
+	public static final String FLAG_MANUAL_COMPONENT = "manuallyCreatedComponent";
+	/**
+	 * When we prepare "live image", we use start/commit/edit transaction, so {@link #saveEdit()}
+	 * commits changes of source code into underlying {@link ICompilationUnit}, but these changes are
+	 * just temporary, and we don't want to have them in UNDO history. So, when component is marked
+	 * with this flag, we avoid committing changes.
+	 */
+	public static final String FLAG_DONT_COMMIT_EDITOR = "don't commit ASTEditor source";
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance fields
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final ComponentDescription m_description;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public JavaInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		m_editor = editor;
+		m_description = description;
+		m_creationSupport = creationSupport;
+		// initialize
+		setBroadcastSupport(EditorState.get(m_editor).getBroadcast());
+		m_description.visit(this, AbstractDescription.STATE_USE);
+		scheduleSendingObjectReady();
+		m_creationSupport.setJavaInfo(this);
+		// properties
+		{
+			Class<?> componentClass = description.getComponentClass();
+			if (componentClass == null) {
+				m_componentClassProperty = null;
+				m_eventsProperty = null;
+			} else {
+				IJavaProject javaProject = editor.getJavaProject();
+				m_componentClassProperty = new ComponentClassProperty(javaProject, componentClass);
+				m_eventsProperty = new EventsProperty(this);
+			}
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		StringBuffer buffer = new StringBuffer();
+		// creation
+		buffer.append("{");
+		buffer.append(m_creationSupport.toString());
+		buffer.append("}");
+		// variable
+		if (m_variableSupport != null) {
+			buffer.append(" {");
+			buffer.append(m_variableSupport.toString());
+			buffer.append("}");
+		}
+		// nodes
+		appendNodes(buffer, getRelatedNodes());
+		// result
+		return buffer.toString();
+	}
+
+	/**
+	 * Appends nodes for {@link #toString()}.
+	 */
+	private void appendNodes(StringBuffer buffer, List<ASTNode> nodes) {
+		buffer.append(" {");
+		boolean first = true;
+		for (ASTNode node : nodes) {
+			// append separator
+			if (!first) {
+				buffer.append(" ");
+			}
+			first = false;
+			// prepare node for getting source
+			ASTNode sourceNode = getRelatedNodeForSource(node);
+			// append wrapped source of node
+			{
+				String source = getEditor().getSource(sourceNode);
+				// if anonymous class creation, cut body
+				if (sourceNode instanceof ClassInstanceCreation) {
+					ClassInstanceCreation creation = (ClassInstanceCreation) sourceNode;
+					if (creation.getAnonymousClassDeclaration() != null) {
+						source = StringUtils.substringBefore(source, "{").trim();
+					}
+				}
+				// do append
+				buffer.append("/");
+				buffer.append(source);
+				buffer.append("/");
+			}
+		}
+		buffer.append("}");
+	}
+
+	/**
+	 * @return the {@link ASTNode} that should be used to display given related {@link ASTNode}.
+	 */
+	public static ASTNode getRelatedNodeForSource(ASTNode node) {
+		ASTNode sourceNode = node;
+		// part of invocation
+		if (node.getLocationInParent() == MethodInvocation.EXPRESSION_PROPERTY) {
+			sourceNode = node.getParent();
+		}
+		if (node.getLocationInParent() == MethodInvocation.ARGUMENTS_PROPERTY) {
+			sourceNode = node.getParent();
+		}
+		if (node.getLocationInParent() == SuperConstructorInvocation.ARGUMENTS_PROPERTY) {
+			sourceNode = node.getParent();
+		}
+		if (node.getLocationInParent() == SuperMethodInvocation.ARGUMENTS_PROPERTY) {
+			sourceNode = node.getParent();
+		}
+		if (node.getLocationInParent() == ClassInstanceCreation.ARGUMENTS_PROPERTY) {
+			sourceNode = node.getParent();
+		}
+		// javaInfo.foo = something
+		if (node.getLocationInParent() == QualifiedName.QUALIFIER_PROPERTY) {
+			QualifiedName qualifiedName = (QualifiedName) node.getParent();
+			sourceNode = qualifiedName;
+			if (qualifiedName.getLocationInParent() == Assignment.LEFT_HAND_SIDE_PROPERTY) {
+				sourceNode = qualifiedName.getParent();
+			}
+		}
+		// done
+		return sourceNode;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final AstEditor m_editor;
+
+	/**
+	 * @return the current {@link AstEditor}.
+	 */
+	public final AstEditor getEditor() {
+		return m_editor;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Edit operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected final void saveEdit() throws Exception {
+		if (getArbitraryValue(FLAG_DONT_COMMIT_EDITOR) == null) {
+			m_editor.commitChanges();
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link ComponentDescription} of this object.
+	 */
+	public final ComponentDescription getDescription() {
+		return m_description;
+	}
+
+	/**
+	 * @return <code>true</code> if this object can be root. For example in SWT <code>Control</code>
+	 *         can not be root, so we should explicitly set what can be root.
+	 */
+	public boolean canBeRoot() {
+		return false;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Templates
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Map<String, String> m_templateArguments = null;
+
+	/**
+	 * @return the {@link Map} of template arguments.
+	 */
+	public Map<String, String> getTemplateArguments() {
+		return m_templateArguments != null
+				? Collections.unmodifiableMap(m_templateArguments)
+						: m_templateArguments;
+	}
+
+	/**
+	 * Associates the given value with the given template.
+	 */
+	public void putTemplateArgument(String name, String value) {
+		if (m_templateArguments == null) {
+			m_templateArguments = Maps.newHashMap();
+		}
+		m_templateArguments.put(name, value);
+	}
+
+	/**
+	 * Associates the given values with the given templates.
+	 */
+	public void putTemplateArguments(Map<String, String> templateArguments) {
+		if (templateArguments != null && !templateArguments.isEmpty()) {
+			for (Entry<String, String> argument : templateArguments.entrySet()) {
+				putTemplateArgument(argument.getKey(), argument.getValue());
+			}
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Hierarchy
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the result of {@link #getParent()} casted to the {@link JavaInfo}.
+	 */
+	public final JavaInfo getParentJava() {
+		return (JavaInfo) getParent();
+	}
+
+	/**
+	 * @return the result of {@link #getRoot()} casted to the {@link JavaInfo}.
+	 */
+	public final JavaInfo getRootJava() {
+		return (JavaInfo) getRoot();
+	}
+
+	/**
+	 * @return the list of {@link JavaInfo} children.
+	 */
+	public final List<JavaInfo> getChildrenJava() {
+		return getChildren(JavaInfo.class);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Association
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Association m_association;
+
+	/**
+	 * @return the {@link Association} between this {@link JavaInfo} and its parent.
+	 */
+	public Association getAssociation() {
+		return m_association;
+	}
+
+	/**
+	 * Sets the {@link Association} between this {@link JavaInfo} and its parent.
+	 *
+	 * @param association
+	 *          the {@link Association} instance, or <code>null</code> if existing {@link Association}
+	 *          should be removed.
+	 */
+	public void setAssociation(Association association) throws Exception {
+		getBroadcast(JavaInfoSetAssociationBefore.class).invoke(this, association);
+		m_association = association;
+		if (m_association != null) {
+			m_association.setJavaInfo(this);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Broadcasting
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link JavaEventListener} for hierarchy.
+	 */
+	public final JavaEventListener getBroadcastJava() {
+		return ExecutionUtils.runObject(new RunnableObjectEx<JavaEventListener>() {
+			@Override
+			public JavaEventListener runObject() throws Exception {
+				return getBroadcast(JavaEventListener.class);
+			}
+		});
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Initializing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Is <code>true</code> if this {@link JavaInfo} already initialized. We check this flag in
+	 * {@link #setObject(Object)} and do initialization if needed. This is required for newly created
+	 * {@link JavaInfo
 	 * }'s.
-   */
-  private boolean m_initialized;
-
-  /**
-   * Initializes newly created {@link JavaInfo} (it should have "live" object). This is good place
-   * to create any exposed components, fetch default properties, etc. Note, that constructor is
-   * <i>bad</i> place for such things because in constructors we can not call virtual methods.
-   */
-  protected void initialize() throws Exception {
-    m_initialized = true;
-    if (m_object != null) {
-      createExposedChildren();
-    }
-    ImportantPropertiesDialog.scheduleImportantProperties(this);
-    // external participators
-    {
-      List<IJavaInfoInitializationParticipator> participators =
-          ExternalFactoriesHelper.getElementsInstances(
-              IJavaInfoInitializationParticipator.class,
-              "org.eclipse.wb.core.java.javaInfoInitializationParticipators",
-              "participator");
-      for (IJavaInfoInitializationParticipator participator : participators) {
-        participator.process(this);
-      }
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exposed children
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds any exposed components as direct or indirect children of this {@link JavaInfo}.
-   * <p>
-   * Note that this method may be called several times during parse
-   */
-  public void createExposedChildren() throws Exception {
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Events
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void scheduleSendingObjectReady() {
-    // clean "sent" flag when dispose hierarchy
-    addBroadcastListener(new ObjectEventListener() {
-      @Override
-      public void refreshDispose() throws Exception {
-        m_objectReady = false;
-      }
-    });
-    //
-    final String objectReadyScript = JavaInfoUtils.getParameter(this, "objectReadyValidator");
-    if (objectReadyScript != null) {
-      // schedule check any evaluations for determine when object is "ready"
-      addBroadcastListener(new EvaluationEventListener() {
-        @Override
-        public void evaluateAfter(EvaluationContext context, ASTNode node) throws Exception {
-          if (getObject() != null) {
-            processObjectReady();
-          }
-        }
-      });
-    } else {
-      // consider any new object as "ready"
-      addBroadcastListener(new JavaInfoSetObjectAfter() {
-        @Override
-        public void invoke(JavaInfo target, Object o) throws Exception {
-          if (target == m_this && !m_this.isDeleted()) {
-            processObjectReady();
-          }
-        }
-      });
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object-ready
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private boolean m_objectReady = false;
-
-  public final boolean isObjectReady() {
-    return m_objectReady;
-  }
-
-  /**
-   * Processing object-ready routine.
-   */
-  protected void processObjectReady() throws Exception {
-    if (m_objectReady) {
-      return;
-    }
-    // process
-    String objectReadyScript = JavaInfoUtils.getParameter(this, "objectReadyValidator");
-    if (StringUtils.isEmpty(objectReadyScript)) {
-      processObjectReadyInternal();
-    } else {
-      // use script to determine when object is "ready"
-      Boolean result = (Boolean) JavaInfoUtils.executeScript(m_this, objectReadyScript);
-      if (result != null && result.booleanValue()) {
-        processObjectReadyInternal();
-      }
-    }
-  }
-
-  protected final void processObjectReadyInternal() throws Exception {
-    m_objectReady = true;
-    m_description.visit(m_this, AbstractDescription.STATE_OBJECT_READY);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Properties
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private List<GenericPropertyImpl> m_descriptionBasedProperties;
-  private List<Property> m_configurableProperties;
-  private final ComponentClassProperty m_componentClassProperty;
-  private final EventsProperty m_eventsProperty;
-
-  @Override
-  protected List<Property> getPropertyList() throws Exception {
-    List<Property> properties = Lists.newArrayList();
-    // add description based properties
-    if (m_descriptionBasedProperties == null) {
-      m_descriptionBasedProperties = Lists.newArrayList();
-      for (GenericPropertyDescription description : getDescription().getProperties()) {
-        GenericPropertyImpl property = PropertyUtils2.createGenericPropertyImpl(this, description);
-        m_descriptionBasedProperties.add(property);
-      }
-    }
-    properties.addAll(m_descriptionBasedProperties);
-    // add configurable properties
-    addConfigurableProperties(properties);
-    // add events (only if there are events)
-    if (PropertyUtils.getChildren(m_eventsProperty).length != 0) {
-      properties.add(m_eventsProperty);
-    }
-    // add properties from creation and variable
-    m_creationSupport.addProperties(properties);
-    m_variableSupport.addProperties(properties);
-    m_association.addProperties(properties);
-    // add class property
-    if (m_componentClassProperty != null) {
-      properties.add(m_componentClassProperty);
-    }
-    // add hierarchy properties
-    getBroadcast(ObjectInfoAddProperties.class).invoke(this, properties);
-    getBroadcast(JavaInfoAddProperties.class).invoke(this, properties);
-    // remove GenericPropertyImpl's without accessors
-    for (Iterator<Property> I = properties.iterator(); I.hasNext();) {
-      Property property = I.next();
-      if (property instanceof GenericPropertyImpl) {
-        GenericPropertyImpl genericProperty = (GenericPropertyImpl) property;
-        if (genericProperty.getAccessors().isEmpty()) {
-          I.remove();
-        }
-      }
-    }
-    // return properties
-    return properties;
-  }
-
-  /**
-   * Adds properties for {@link ComponentDescription#getConfigurableProperties()}.
-   */
-  private void addConfigurableProperties(List<Property> properties) throws Exception {
-    if (m_configurableProperties == null) {
-      m_configurableProperties = Lists.newArrayList();
-      for (ConfigurablePropertyDescription description : getDescription().getConfigurableProperties()) {
-        String id = description.getId();
-        IConfigurablePropertyFactory factory = getConfigurablePropertyFactory(id);
-        Assert.isNotNull(factory, "Can not find IConfigurablePropertyFactory for %s.", id);
-        // add Property
-        {
-          Property property = factory.create(this, description);
-          Assert.isNotNull(property, "Property for for %s and %s was not created.", id, this);
-          m_configurableProperties.add(property);
-        }
-      }
-    }
-    properties.addAll(m_configurableProperties);
-  }
-
-  /**
-   * @return the {@link IConfigurablePropertyFactory} registered with given ID.
-   */
-  private static IConfigurablePropertyFactory getConfigurablePropertyFactory(String id) {
-    List<IConfigurationElement> factoryElements =
-        ExternalFactoriesHelper.getElements(
-            "org.eclipse.wb.core.configurablePropertyFactories",
-            "factory");
-    for (IConfigurationElement factofyElement : factoryElements) {
-      if (ExternalFactoriesHelper.getRequiredAttribute(factofyElement, "id").equals(id)) {
-        return ExternalFactoriesHelper.createExecutableExtension(factofyElement, "class");
-      }
-    }
-    return null;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Creation support
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private CreationSupport m_creationSupport;
-
-  /**
-   * Sets new {@link CreationSupport}.<br>
-   * This rare operation, for example we use it to "materialize" implicit layout.
-   */
-  public final void setCreationSupport(CreationSupport creationSupport) throws Exception {
-    m_creationSupport = creationSupport;
-    m_creationSupport.setJavaInfo(this);
-  }
-
-  /**
-   * @return the current {@link CreationSupport}.
-   */
-  public final CreationSupport getCreationSupport() {
-    return m_creationSupport;
-  }
-
-  /**
-   * Specifies that given {@link Expression} is creation of this {@link JavaInfo}.
-   */
-  public void bindToExpression(Expression expression) {
-    EditorState.get(m_editor).getJavaInfoResolver().bind(this, expression);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // HasSourcePosition
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public int getSourcePosition() {
-    return getCreationSupport().getNode().getStartPosition();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Variable support
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private VariableSupport m_variableSupport;
-
-  /**
-   * @return current {@link VariableSupport}. Can not return <code>null</code>.
-   */
-  public final VariableSupport getVariableSupport() {
-    return m_variableSupport;
-  }
-
-  /**
-   * Sets new {@link VariableSupport}.<br>
-   * Usually this is done during parsing or when existing {@link VariableSupport} morphed into new
-   * one.
-   */
-  public final void setVariableSupport(VariableSupport variableSupport) throws Exception {
-    VariableSupport oldVariable = m_variableSupport;
-    m_variableSupport = variableSupport;
-    getBroadcastSupport().getListener(JavaInfoSetVariable.class).invoke(
-        m_this,
-        oldVariable,
-        m_variableSupport);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final IObjectPresentation m_presentation = new DefaultJavaInfoPresentation(this);
-
-  @Override
-  public IObjectPresentation getPresentation() {
-    return m_presentation;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Related nodes
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * {@link ASTNode}s which are tightly related to this {@link JavaInfo}. Node is related if it
-   * represents reference of this {@link JavaInfo}, i.e. is creation or usage as part of
-   * {@link MethodInvocation} (as target expression or argument) or {@link Assignment}, etc.
-   */
-  private final List<ASTNode> m_nodes = Lists.newLinkedList();
-
-  /**
-   * Adds given related {@link ASTNode}.
-   */
-  public final void addRelatedNode(ASTNode node) {
-    if (node != null && !m_nodes.contains(node)) {
-      m_nodes.add(node);
-    }
-  }
-
-  /**
-   * Adds {@link ASTNode}'s that represent this {@link JavaInfo} in subtree of given {@link ASTNode}
-   * .
-   */
-  public final void addRelatedNodes(ASTNode start) {
-    start.accept(new ASTVisitor() {
-      @Override
-      public void postVisit(ASTNode node) {
-        // ignore "button" in "button = new JButton()"
-        if (node.getLocationInParent() == VariableDeclarationFragment.NAME_PROPERTY
-            || node.getLocationInParent() == Assignment.LEFT_HAND_SIDE_PROPERTY) {
-          return;
-        }
-        if (isRepresentedBy(node)) {
-          addRelatedNode(node);
-        }
-      }
-
-      @Override
-      public void endVisit(MethodInvocation node) {
-        // support for invocation for "this" component
-        if (node.getExpression() == null && isRepresentedBy(null)) {
-          addRelatedNode(node);
-        }
-      }
-    });
-  }
-
-  /**
-   * @return the {@link List} of tightly related {@link ASTNode}'s.
-   */
-  public final List<ASTNode> getRelatedNodes() {
-    AstNodeUtils.removeDanglingNodes(m_nodes);
-    return m_nodes;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Delete
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final boolean canDelete() {
-    // try "canDelete" script
-    {
-      boolean canDeleteBoolean = ExecutionUtils.runObjectIgnore(new RunnableObjectEx<Boolean>() {
-        @Override
-        public Boolean runObject() throws Exception {
-          Object canDeleteObject = JavaInfoUtils.executeScriptParameter(m_this, "canDelete");
-          if (canDeleteObject == null) {
-            return true;
-          }
-          if (canDeleteObject instanceof Boolean) {
-            return ((Boolean) canDeleteObject).booleanValue();
-          }
-          return false;
-        }
-      }, false);
-      if (!canDeleteBoolean) {
-        return false;
-      }
-    }
-    // check if creation support can delete
-    if (!m_creationSupport.canDelete()) {
-      return false;
-    }
-    // check if association with parent can be deleted
-    if (!m_association.canDelete()) {
-      return false;
-    }
-    // ask each child
-    putArbitraryValue(FLAG_DELETING, Boolean.TRUE);
-    try {
-      for (ObjectInfo child : getChildren()) {
-        if (!child.canDelete()) {
-          return false;
-        }
-      }
-    } finally {
-      removeArbitraryValue(FLAG_DELETING);
-    }
-    // yes, this JavaInfo can be deleted
-    return true;
-  }
-
-  @Override
-  public void delete() throws Exception {
-    final ObjectInfo parent = getParent();
-    ObjectInfo hierarchyObject = parent != null ? parent : this;
-    ExecutionUtils.run(hierarchyObject, new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        putArbitraryValue(FLAG_DELETING, Boolean.TRUE);
-        try {
-          // broadcast "before"
-          ObjectInfoDelete deleteBroadcast = getBroadcast(ObjectInfoDelete.class);
-          deleteBroadcast.before(parent, m_this);
-          // delete association
-          m_association.remove();
-          // delete creation/variable
-          VariableSupport variableSupport = m_variableSupport;
-          variableSupport.deleteBefore();
-          m_creationSupport.delete();
-          variableSupport.deleteAfter();
-          // broadcast "after"
-          deleteBroadcast.after(parent, m_this);
-        } finally {
-          removeArbitraryValue(FLAG_DELETING);
-        }
-      }
-    });
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // MethodInvocation utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link StatementTarget} to add new {@link MethodInvocation}, using
-   *         {@link MethodOrder}.
-   */
-  protected StatementTarget getMethodInvocationTarget(String newSignature) throws Exception {
-    // get target from order
-    {
-      MethodDescription newDescription = getDescription().getMethod(newSignature);
-      if (newDescription != null) {
-        return newDescription.getOrder().getTarget(this, newSignature);
-      }
-    }
-    // default target
-    return getDescription().getDefaultMethodOrder().getTarget(this, newSignature);
-  }
-
-  /**
-   * @param relatedNode
-   *          the {@link ASTNode} that represents this {@link JavaInfo}.
-   *
-   * @return the {@link MethodInvocation} of this {@link JavaInfo} where given related
-   *         {@link ASTNode} is expression of this {@link MethodInvocation}. May return
-   *         <code>null</code>, if given related node is not part of {@link MethodInvocation}.
-   */
-  public final MethodInvocation getMethodInvocation(ASTNode relatedNode) {
-    if (relatedNode.getLocationInParent() == MethodInvocation.EXPRESSION_PROPERTY) {
-      return (MethodInvocation) relatedNode.getParent();
-    } else if (relatedNode instanceof MethodInvocation
-        && ((MethodInvocation) relatedNode).getExpression() == null
-        && isRepresentedBy(null)) {
-      return (MethodInvocation) relatedNode;
-    }
-    // not a MethodInvocation part
-    return null;
-  }
-
-  /**
-   * @return the {@link List} of all {@link MethodInvocation} of this {@link JavaInfo}.
-   */
-  public final List<MethodInvocation> getMethodInvocations() {
-    List<MethodInvocation> invocations = Lists.newArrayList();
-    for (ASTNode node : getRelatedNodes()) {
-      MethodInvocation invocation = getMethodInvocation(node);
-      if (invocation != null) {
-        invocations.add(invocation);
-      }
-    }
-    return invocations;
-  }
-
-  /**
-   * @return the {@link List} of {@link MethodInvocation} of this {@link JavaInfo} with given
-   *         signature.
-   */
-  public final List<MethodInvocation> getMethodInvocations(String signature) {
-    List<MethodInvocation> invocations = Lists.newArrayList();
-    for (ASTNode node : getRelatedNodes()) {
-      // prepare invocation from related node
-      MethodInvocation invocation = getMethodInvocation(node);
-      // check invocation
-      if (invocation != null) {
-        String methodSignature = AstNodeUtils.getMethodSignature(invocation);
-        if (signature.equals(methodSignature) && isRepresentedBy(invocation.getExpression())) {
-          invocations.add(invocation);
-        }
-      }
-    }
-    //
-    return invocations;
-  }
-
-  /**
-   * @return the {@link MethodInvocation} of this {@link JavaInfo} with given signature.
-   */
-  public final MethodInvocation getMethodInvocation(String signature) {
-    List<MethodInvocation> invocations = getMethodInvocations(signature);
-    return GenericsUtils.getFirstOrNull(invocations);
-  }
-
-  /**
-   * Adds new {@link MethodInvocation} for this {@link JavaInfo}. In compare to
-   * {@link #addExpressionStatement(String)} it uses {@link MethodDescription}'s to find correct
-   * position for this method. For example for {@link javax.swing.JProgressBar} "setMaximum" should
-   * be before "setValue".
-   *
-   * @return the new added {@link MethodInvocation}.
-   *
-   * @param signature
-   *          the signature of method, to find correct position
-   * @param arguments
-   *          the comma separated arguments string
-   */
-  public final MethodInvocation addMethodInvocation(String signature, String arguments)
-      throws Exception {
-    StatementTarget target = getMethodInvocationTarget(signature);
-    return addMethodInvocation(target, signature, arguments);
-  }
-
-  /**
-   * Adds new {@link MethodInvocation} for this {@link JavaInfo} into given target.
-   *
-   * @return the new added {@link MethodInvocation}.
-   *
-   * @param target
-   *          the {@link StatementTarget} that specifies where to add {@link MethodInvocation}.
-   * @param signature
-   *          the signature of method, to find correct position
-   * @param arguments
-   *          the comma separated arguments string
-   */
-  public final MethodInvocation addMethodInvocation(StatementTarget target,
-      String signature,
-      String arguments) throws Exception {
-    // create invocation source
-    String invocationSource;
-    {
-      String methodName = StringUtils.substringBefore(signature, "(");
-      invocationSource = TemplateUtils.format("{0}.{1}({2})", this, methodName, arguments);
-    }
-    // add statement with invocation
-    return (MethodInvocation) addExpressionStatement(target, invocationSource);
-  }
-
-  /**
-   * Removes {@link MethodInvocation}'s of this {@link JavaInfo} with given signature.
-   */
-  public final void removeMethodInvocations(String signature) throws Exception {
-    List<MethodInvocation> invocations = getMethodInvocations(signature);
-    for (MethodInvocation invocation : invocations) {
-      m_editor.removeEnclosingStatement(invocation);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Expression utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return new added {@link Expression} for {@link ExpressionStatement} expression with given
-   *         {@link Expression} source.
-   */
-  public final Expression addExpressionStatement(String expressionSource) throws Exception {
-    StatementTarget target = m_variableSupport.getStatementTarget();
-    return addExpressionStatement(target, expressionSource);
-  }
-
-  /**
-   * @return new added {@link Expression} for {@link ExpressionStatement} expression with given
-   *         {@link Expression} source.
-   */
-  public final Expression addExpressionStatement(StatementTarget target, String expressionSource)
-      throws Exception {
-    expressionSource = TemplateUtils.resolve(target, expressionSource);
-    String statementSource = expressionSource + ";";
-    ExpressionStatement statement =
-        (ExpressionStatement) m_editor.addStatement(statementSource, target);
-    Expression expression = statement.getExpression();
-    addRelatedNodes(statement);
-    return expression;
-  }
-
-  /**
-   * See {@link AstEditor#replaceExpression(Expression, String)}. Performs also deferred
-   * {@link JavaInfo} references resolving.
-   */
-  public final Expression replaceExpression(Expression expression, String source) throws Exception {
-    Statement targetStatement = AstNodeUtils.getEnclosingStatement(expression);
-    StatementTarget target = new StatementTarget(targetStatement, true);
-    source = TemplateUtils.resolve(target, source);
-    return getEditor().replaceExpression(expression, source);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Field Assignment utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the all {@link Assignment}'s to fields, may be empty {@link List}.
-   */
-  public final List<Assignment> getFieldAssignments() {
-    List<Assignment> assignments = Lists.newArrayList();
-    for (ASTNode node : getRelatedNodes()) {
-      Expression fieldAccess = AstNodeUtils.getFieldAssignment(node);
-      if (fieldAccess != null) {
-        Assignment assignment = (Assignment) fieldAccess.getParent();
-        assignments.add(assignment);
-      }
-    }
-    return assignments;
-  }
-
-  /**
-   * @return the {@link Assignment}'s to field, may be empty {@link List}.
-   */
-  public final List<Assignment> getFieldAssignments(String fieldName) {
-    List<Assignment> assignments = Lists.newArrayList();
-    for (Assignment assignment : getFieldAssignments()) {
-      Expression fieldAccess = assignment.getLeftHandSide();
-      String fieldAccessName = AstNodeUtils.getFieldAccessName(fieldAccess).getIdentifier();
-      if (fieldName.equals(fieldAccessName)) {
-        assignments.add(assignment);
-      }
-    }
-    return assignments;
-  }
-
-  /**
-   * @return the {@link Assignment} to field, or <code>null</code> if not found.
-   */
-  public final Assignment getFieldAssignment(String fieldName) {
-    List<Assignment> assignments = getFieldAssignments(fieldName);
-    return GenericsUtils.getFirstOrNull(assignments);
-  }
-
-  /**
-   * Adds new {@link Assignment} to given field.
-   */
-  public final Assignment addFieldAssignment(String fieldName, String source) throws Exception {
-    String assignmentSource = TemplateUtils.format("{0}.{1} = {2}", this, fieldName, source);
-    return (Assignment) addExpressionStatement(assignmentSource);
-  }
-
-  /**
-   * Removes {@link Assignment}'s to given field on this {@link JavaInfo}.
-   */
-  public final void removeFieldAssignments(String fieldName) throws Exception {
-    List<Assignment> assignments = getFieldAssignments(fieldName);
-    for (Assignment assignment : assignments) {
-      if (!AstNodeUtils.isDanglingNode(assignment)) {
-        m_editor.removeEnclosingStatement(assignment);
-      }
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // isRepresentedBy
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> is given {@link ASTNode} represents this {@link JavaInfo}.
-   */
-  public boolean isRepresentedBy(ASTNode node) {
-    return getChildRepresentedBy(node) == this;
-  }
-
-  /**
-   * @return the {@link JavaInfo} that represents given {@link ASTNode}, or <code>null</code>.
-   */
-  public JavaInfo getChildRepresentedBy(ASTNode node) {
-    if (node == null || node instanceof Expression) {
-      JavaInfoResolver resolver = EditorState.get(m_editor).getJavaInfoResolver();
-      return resolver.getJavaInfo((Expression) node);
-    }
-    return null;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private JavaInfoEvaluationHelper m_evaluationHelper;
-
-  @Override
-  public void refresh_dispose() throws Exception {
-    // clean object reference
-    m_object = null;
-    // continue
-    super.refresh_dispose();
-  }
-
-  @Override
-  public void refresh_beforeCreate() throws Exception {
-    // mark active editor
-    if (isRoot()) {
-      GlobalStateJava.activate(this);
-    }
-    super.refresh_beforeCreate();
-  }
-
-  @Override
-  public void refresh_create() throws Exception {
-    ExecutionFlowDescription flowDescription = EditorState.get(m_editor).getFlowDescription();
-    // prepare editor state
-    final EditorState editorState;
-    {
-      editorState = EditorState.get(m_editor);
-      editorState.getBadRefreshNodes().clear();
-      editorState.setTmp_visitingContext(new VisitingContext(false));
-      editorState.getTmp_InterceptedMethods().clear();
-      editorState.setExecuting(true);
-    }
-    // visited ASTNode-s
-    final VisitedNodes visitedNodes = editorState.getVisitedNodes();
-    visitedNodes.clear();
-    // prepare visitor for evaluation
-    final EvaluationEventListener evaluationListener = getBroadcast(EvaluationEventListener.class);
-    m_evaluationHelper = null;
-    ExecutionFlowFrameVisitor visitor = new ExecutionFlowFrameVisitor() {
-      @Override
-      public void postVisit(ASTNode node) {
-        visitedNodes.add(node);
-        try {
-          JavaInfoEvaluationHelper evaluationHelper = getEvaluationHelper(this);
-          // send notifications and evaluate
-          if (shouldNotifyAboutEvaluate(node)) {
-            EvaluationContext context = getEvaluationHelper(this).getContext();
-            evaluationListener.evaluateBefore(context, node);
-          }
-          evaluationHelper.evaluate(node);
-          if (shouldNotifyAboutEvaluate(node)) {
-            EvaluationContext context = getEvaluationHelper(this).getContext();
-            evaluationListener.evaluateAfter(context, node);
-          }
-        } catch (Throwable e) {
-          // exception during JavaInfo evaluation is serious, so fail
-          if (node instanceof Expression && getChildRepresentedBy(node) != null) {
-            ReflectionUtils.propagate(e);
-          }
-          // some other exception, log and continue
-          editorState.getBadRefreshNodes().add(node, e);
-        }
-      }
-
-      private boolean shouldNotifyAboutEvaluate(ASTNode node) {
-        return node instanceof ClassInstanceCreation
-            || node instanceof MethodInvocation
-            || node instanceof Statement;
-      }
-
-      @Override
-      public boolean enterFrame(final ASTNode node) {
-        // send broadcast
-        ExecutionUtils.runRethrow(new RunnableEx() {
-          @Override
-          public void run() throws Exception {
-            editorState.getBroadcast().getListener(ExecutionFlowEnterFrame.class).invoke(node);
-          }
-        });
-        // MethodDeclaration
-        if (node instanceof MethodDeclaration) {
-          MethodDeclaration methodDeclaration = (MethodDeclaration) node;
-          // don't visit local factory methods
-          if (FactoryDescriptionHelper.isFactoryMethod(methodDeclaration)) {
-            return false;
-          }
-        }
-        return super.enterFrame(node);
-      }
-
-      @Override
-      public void leaveFrame(final ASTNode node) {
-        super.leaveFrame(node);
-        // send broadcast
-        ExecutionUtils.runRethrow(new RunnableEx() {
-          @Override
-          public void run() throws Exception {
-            editorState.getBroadcast().getListener(EvaluationEventListener.class).leaveFrame(node);
-          }
-        });
-      }
-    };
-    // evaluate "this"
-    if (!getCreationSupport().canBeEvaluated()) {
-      getEvaluationHelper(visitor).evaluateJavaInfoUsingCreationSupport(this);
-    }
-    // visit all AST nodes on execution flow and execute nodes related to components
-    ExecutionFlowUtils.visit(editorState.getTmp_visitingContext(), flowDescription, visitor);
-    editorState.setExecuting(false);
-    highlightVisitedNodes(visitedNodes);
-  }
-
-  private void highlightVisitedNodes(VisitedNodes visitedNodes) throws JavaModelException {
-    // don't call DesignPageSite methods
-    if (EnvironmentUtils.DEVELOPER_HOST && EnvironmentUtils.isTestingTime()) {
-      return;
-    }
-    // do highlight
-    DesignPageSite site = DesignPageSite.Helper.getSite(this);
-    if (site != null) {
-      AstEditor editor = getEditor();
-      String editorSource = editor.getSource();
-      String unitSource = editor.getModelUnit().getSource();
-      boolean isCommitted = editorSource.equals(unitSource);
-      if (isCommitted) {
-        // TODO(scheglov)
-//        site.highlightVisitedNodes(visitedNodes.getNodes());
-      }
-    }
-  }
-
-  private JavaInfoEvaluationHelper getEvaluationHelper(ExecutionFlowFrameVisitor visitor) {
-    if (m_evaluationHelper == null) {
-      m_evaluationHelper = new JavaInfoEvaluationHelper(m_editor, visitor) {
-        @Override
-        protected JavaInfo getRootJavaInfo() {
-          return m_this;
-        }
-
-        @Override
-        protected JavaInfo getJavaInfoRepresentedBy(Expression expression) {
-          return m_this.getChildRepresentedBy(expression);
-        }
-
-        @Override
-        protected void thisJavaInfoNodeProcessed(JavaInfo javaInfo, ASTNode node) throws Exception {
-        }
-      };
-    }
-    return m_evaluationHelper;
-  }
-
-  @Override
-  protected void refresh_afterCreate() throws Exception {
-    super.refresh_afterCreate();
-    if (!isPlaceholder()) {
-      JavaInfoUtils.executeScriptParameter(this, "refresh_afterCreate");
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Object m_object;
-
-  /**
-   * @return <code>true</code> if {@link #getObject()} has not actual object, but placeholder, so
-   *         not all methods may be invoked.
-   */
-  public final boolean isPlaceholder() {
-    return PlaceholderUtils.isPlaceholder(this);
-  }
-
-  /**
-   * @return the {@link Object} created for this {@link JavaInfo}.
-   */
-  public final Object getObject() {
-    return m_object;
-  }
-
-  /**
-   * Sets the {@link Object} created for this {@link JavaInfo}. We create these objects externally -
-   * in {@link JavaInfoEvaluationHelper} or in {@link CreationSupport}.
-   */
-  public void setObject(Object object) throws Exception {
-    {
-      Object[] objectRef = new Object[]{object};
-      getBroadcast(JavaInfosetObjectBefore.class).invoke(this, objectRef);
-      object = objectRef[0];
-    }
-    //
-    m_object = object;
-    if (!m_initialized) {
-      if (!isPlaceholder()) {
-        initialize();
-      }
-    }
-    //
-    getBroadcast(JavaInfoSetObjectAfter.class).invoke(this, object);
-  }
-
-  /**
-   * @return the {@link JavaInfo} with same object as given.
-   */
-  public final JavaInfo getChildByObject(final Object o) {
-    if (o == null) {
-      return null;
-    }
-    final JavaInfo result[] = new JavaInfo[1];
-    accept(new ObjectInfoVisitor() {
-      @Override
-      public boolean visit(ObjectInfo objectInfo) throws Exception {
-        if (result[0] == null && objectInfo instanceof JavaInfo) {
-          JavaInfo javaInfo = (JavaInfo) objectInfo;
-          if (javaInfo.getObject() == o) {
-            result[0] = javaInfo;
-          }
-        }
-        return result[0] == null;
-      }
-    });
-    return result[0];
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Evaluation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if given {@link MethodInvocation} should be evaluated. For example we
-   *         should evaluate <code>setXXX(value)</code> invocations, but not
-   *         <code>addXXXListener(anonymousClass)</code>. By default methods from description are
-   *         used.
-   */
-  public boolean shouldEvaluateInvocation(MethodInvocation invocation) {
-    IMethodBinding methodBinding = AstNodeUtils.getMethodBinding(invocation);
-    MethodDescription methodDescription = getDescription().getMethod(methodBinding);
-    return methodDescription != null && methodDescription.isExecutable();
-  }
+	 */
+	private boolean m_initialized;
+
+	/**
+	 * Initializes newly created {@link JavaInfo} (it should have "live" object). This is good place
+	 * to create any exposed components, fetch default properties, etc. Note, that constructor is
+	 * <i>bad</i> place for such things because in constructors we can not call virtual methods.
+	 */
+	protected void initialize() throws Exception {
+		m_initialized = true;
+		if (m_object != null) {
+			createExposedChildren();
+		}
+		ImportantPropertiesDialog.scheduleImportantProperties(this);
+		// external participators
+		{
+			List<IJavaInfoInitializationParticipator> participators =
+					ExternalFactoriesHelper.getElementsInstances(
+							IJavaInfoInitializationParticipator.class,
+							"org.eclipse.wb.core.java.javaInfoInitializationParticipators",
+							"participator");
+			for (IJavaInfoInitializationParticipator participator : participators) {
+				participator.process(this);
+			}
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exposed children
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds any exposed components as direct or indirect children of this {@link JavaInfo}.
+	 * <p>
+	 * Note that this method may be called several times during parse
+	 */
+	public void createExposedChildren() throws Exception {
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Events
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void scheduleSendingObjectReady() {
+		// clean "sent" flag when dispose hierarchy
+		addBroadcastListener(new ObjectEventListener() {
+			@Override
+			public void refreshDispose() throws Exception {
+				m_objectReady = false;
+			}
+		});
+		//
+		final String objectReadyScript = JavaInfoUtils.getParameter(this, "objectReadyValidator");
+		if (objectReadyScript != null) {
+			// schedule check any evaluations for determine when object is "ready"
+			addBroadcastListener(new EvaluationEventListener() {
+				@Override
+				public void evaluateAfter(EvaluationContext context, ASTNode node) throws Exception {
+					if (getObject() != null) {
+						processObjectReady();
+					}
+				}
+			});
+		} else {
+			// consider any new object as "ready"
+			addBroadcastListener(new JavaInfoSetObjectAfter() {
+				@Override
+				public void invoke(JavaInfo target, Object o) throws Exception {
+					if (target == m_this && !m_this.isDeleted()) {
+						processObjectReady();
+					}
+				}
+			});
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object-ready
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private boolean m_objectReady = false;
+
+	public final boolean isObjectReady() {
+		return m_objectReady;
+	}
+
+	/**
+	 * Processing object-ready routine.
+	 */
+	protected void processObjectReady() throws Exception {
+		if (m_objectReady) {
+			return;
+		}
+		// process
+		String objectReadyScript = JavaInfoUtils.getParameter(this, "objectReadyValidator");
+		if (StringUtils.isEmpty(objectReadyScript)) {
+			processObjectReadyInternal();
+		} else {
+			// use script to determine when object is "ready"
+			Boolean result = (Boolean) JavaInfoUtils.executeScript(m_this, objectReadyScript);
+			if (result != null && result.booleanValue()) {
+				processObjectReadyInternal();
+			}
+		}
+	}
+
+	protected final void processObjectReadyInternal() throws Exception {
+		m_objectReady = true;
+		m_description.visit(m_this, AbstractDescription.STATE_OBJECT_READY);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Properties
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private List<GenericPropertyImpl> m_descriptionBasedProperties;
+	private List<Property> m_configurableProperties;
+	private final ComponentClassProperty m_componentClassProperty;
+	private final EventsProperty m_eventsProperty;
+
+	@Override
+	protected List<Property> getPropertyList() throws Exception {
+		List<Property> properties = Lists.newArrayList();
+		// add description based properties
+		if (m_descriptionBasedProperties == null) {
+			m_descriptionBasedProperties = Lists.newArrayList();
+			for (GenericPropertyDescription description : getDescription().getProperties()) {
+				GenericPropertyImpl property = PropertyUtils2.createGenericPropertyImpl(this, description);
+				m_descriptionBasedProperties.add(property);
+			}
+		}
+		properties.addAll(m_descriptionBasedProperties);
+		// add configurable properties
+		addConfigurableProperties(properties);
+		// add events (only if there are events)
+		if (PropertyUtils.getChildren(m_eventsProperty).length != 0) {
+			properties.add(m_eventsProperty);
+		}
+		// add properties from creation and variable
+		m_creationSupport.addProperties(properties);
+		m_variableSupport.addProperties(properties);
+		m_association.addProperties(properties);
+		// add class property
+		if (m_componentClassProperty != null) {
+			properties.add(m_componentClassProperty);
+		}
+		// add hierarchy properties
+		getBroadcast(ObjectInfoAddProperties.class).invoke(this, properties);
+		getBroadcast(JavaInfoAddProperties.class).invoke(this, properties);
+		// remove GenericPropertyImpl's without accessors
+		for (Iterator<Property> I = properties.iterator(); I.hasNext();) {
+			Property property = I.next();
+			if (property instanceof GenericPropertyImpl) {
+				GenericPropertyImpl genericProperty = (GenericPropertyImpl) property;
+				if (genericProperty.getAccessors().isEmpty()) {
+					I.remove();
+				}
+			}
+		}
+		// return properties
+		return properties;
+	}
+
+	/**
+	 * Adds properties for {@link ComponentDescription#getConfigurableProperties()}.
+	 */
+	private void addConfigurableProperties(List<Property> properties) throws Exception {
+		if (m_configurableProperties == null) {
+			m_configurableProperties = Lists.newArrayList();
+			for (ConfigurablePropertyDescription description : getDescription().getConfigurableProperties()) {
+				String id = description.getId();
+				IConfigurablePropertyFactory factory = getConfigurablePropertyFactory(id);
+				Assert.isNotNull(factory, "Can not find IConfigurablePropertyFactory for %s.", id);
+				// add Property
+				{
+					Property property = factory.create(this, description);
+					Assert.isNotNull(property, "Property for for %s and %s was not created.", id, this);
+					m_configurableProperties.add(property);
+				}
+			}
+		}
+		properties.addAll(m_configurableProperties);
+	}
+
+	/**
+	 * @return the {@link IConfigurablePropertyFactory} registered with given ID.
+	 */
+	private static IConfigurablePropertyFactory getConfigurablePropertyFactory(String id) {
+		List<IConfigurationElement> factoryElements =
+				ExternalFactoriesHelper.getElements(
+						"org.eclipse.wb.core.configurablePropertyFactories",
+						"factory");
+		for (IConfigurationElement factofyElement : factoryElements) {
+			if (ExternalFactoriesHelper.getRequiredAttribute(factofyElement, "id").equals(id)) {
+				return ExternalFactoriesHelper.createExecutableExtension(factofyElement, "class");
+			}
+		}
+		return null;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Creation support
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private CreationSupport m_creationSupport;
+
+	/**
+	 * Sets new {@link CreationSupport}.<br>
+	 * This rare operation, for example we use it to "materialize" implicit layout.
+	 */
+	public final void setCreationSupport(CreationSupport creationSupport) throws Exception {
+		m_creationSupport = creationSupport;
+		m_creationSupport.setJavaInfo(this);
+	}
+
+	/**
+	 * @return the current {@link CreationSupport}.
+	 */
+	public final CreationSupport getCreationSupport() {
+		return m_creationSupport;
+	}
+
+	/**
+	 * Specifies that given {@link Expression} is creation of this {@link JavaInfo}.
+	 */
+	public void bindToExpression(Expression expression) {
+		EditorState.get(m_editor).getJavaInfoResolver().bind(this, expression);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// HasSourcePosition
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public int getSourcePosition() {
+		return getCreationSupport().getNode().getStartPosition();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Variable support
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private VariableSupport m_variableSupport;
+
+	/**
+	 * @return current {@link VariableSupport}. Can not return <code>null</code>.
+	 */
+	public final VariableSupport getVariableSupport() {
+		return m_variableSupport;
+	}
+
+	/**
+	 * Sets new {@link VariableSupport}.<br>
+	 * Usually this is done during parsing or when existing {@link VariableSupport} morphed into new
+	 * one.
+	 */
+	public final void setVariableSupport(VariableSupport variableSupport) throws Exception {
+		VariableSupport oldVariable = m_variableSupport;
+		m_variableSupport = variableSupport;
+		getBroadcastSupport().getListener(JavaInfoSetVariable.class).invoke(
+				m_this,
+				oldVariable,
+				m_variableSupport);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final IObjectPresentation m_presentation = new DefaultJavaInfoPresentation(this);
+
+	@Override
+	public IObjectPresentation getPresentation() {
+		return m_presentation;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Related nodes
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * {@link ASTNode}s which are tightly related to this {@link JavaInfo}. Node is related if it
+	 * represents reference of this {@link JavaInfo}, i.e. is creation or usage as part of
+	 * {@link MethodInvocation} (as target expression or argument) or {@link Assignment}, etc.
+	 */
+	private final List<ASTNode> m_nodes = Lists.newLinkedList();
+
+	/**
+	 * Adds given related {@link ASTNode}.
+	 */
+	public final void addRelatedNode(ASTNode node) {
+		if (node != null && !m_nodes.contains(node)) {
+			m_nodes.add(node);
+		}
+	}
+
+	/**
+	 * Adds {@link ASTNode}'s that represent this {@link JavaInfo} in subtree of given {@link ASTNode}
+	 * .
+	 */
+	public final void addRelatedNodes(ASTNode start) {
+		start.accept(new ASTVisitor() {
+			@Override
+			public void postVisit(ASTNode node) {
+				// ignore "button" in "button = new JButton()"
+				if (node.getLocationInParent() == VariableDeclarationFragment.NAME_PROPERTY
+						|| node.getLocationInParent() == Assignment.LEFT_HAND_SIDE_PROPERTY) {
+					return;
+				}
+				if (isRepresentedBy(node)) {
+					addRelatedNode(node);
+				}
+			}
+
+			@Override
+			public void endVisit(MethodInvocation node) {
+				// support for invocation for "this" component
+				if (node.getExpression() == null && isRepresentedBy(null)) {
+					addRelatedNode(node);
+				}
+			}
+		});
+	}
+
+	/**
+	 * @return the {@link List} of tightly related {@link ASTNode}'s.
+	 */
+	public final List<ASTNode> getRelatedNodes() {
+		AstNodeUtils.removeDanglingNodes(m_nodes);
+		return m_nodes;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Delete
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final boolean canDelete() {
+		// try "canDelete" script
+		{
+			boolean canDeleteBoolean = ExecutionUtils.runObjectIgnore(new RunnableObjectEx<Boolean>() {
+				@Override
+				public Boolean runObject() throws Exception {
+					Object canDeleteObject = JavaInfoUtils.executeScriptParameter(m_this, "canDelete");
+					if (canDeleteObject == null) {
+						return true;
+					}
+					if (canDeleteObject instanceof Boolean) {
+						return ((Boolean) canDeleteObject).booleanValue();
+					}
+					return false;
+				}
+			}, false);
+			if (!canDeleteBoolean) {
+				return false;
+			}
+		}
+		// check if creation support can delete
+		if (!m_creationSupport.canDelete()) {
+			return false;
+		}
+		// check if association with parent can be deleted
+		if (!m_association.canDelete()) {
+			return false;
+		}
+		// ask each child
+		putArbitraryValue(FLAG_DELETING, Boolean.TRUE);
+		try {
+			for (ObjectInfo child : getChildren()) {
+				if (!child.canDelete()) {
+					return false;
+				}
+			}
+		} finally {
+			removeArbitraryValue(FLAG_DELETING);
+		}
+		// yes, this JavaInfo can be deleted
+		return true;
+	}
+
+	@Override
+	public void delete() throws Exception {
+		final ObjectInfo parent = getParent();
+		ObjectInfo hierarchyObject = parent != null ? parent : this;
+		ExecutionUtils.run(hierarchyObject, new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				putArbitraryValue(FLAG_DELETING, Boolean.TRUE);
+				try {
+					// broadcast "before"
+					ObjectInfoDelete deleteBroadcast = getBroadcast(ObjectInfoDelete.class);
+					deleteBroadcast.before(parent, m_this);
+					// delete association
+					m_association.remove();
+					// delete creation/variable
+					VariableSupport variableSupport = m_variableSupport;
+					variableSupport.deleteBefore();
+					m_creationSupport.delete();
+					variableSupport.deleteAfter();
+					// broadcast "after"
+					deleteBroadcast.after(parent, m_this);
+				} finally {
+					removeArbitraryValue(FLAG_DELETING);
+				}
+			}
+		});
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// MethodInvocation utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link StatementTarget} to add new {@link MethodInvocation}, using
+	 *         {@link MethodOrder}.
+	 */
+	protected StatementTarget getMethodInvocationTarget(String newSignature) throws Exception {
+		// get target from order
+		{
+			MethodDescription newDescription = getDescription().getMethod(newSignature);
+			if (newDescription != null) {
+				return newDescription.getOrder().getTarget(this, newSignature);
+			}
+		}
+		// default target
+		return getDescription().getDefaultMethodOrder().getTarget(this, newSignature);
+	}
+
+	/**
+	 * @param relatedNode
+	 *          the {@link ASTNode} that represents this {@link JavaInfo}.
+	 *
+	 * @return the {@link MethodInvocation} of this {@link JavaInfo} where given related
+	 *         {@link ASTNode} is expression of this {@link MethodInvocation}. May return
+	 *         <code>null</code>, if given related node is not part of {@link MethodInvocation}.
+	 */
+	public final MethodInvocation getMethodInvocation(ASTNode relatedNode) {
+		if (relatedNode.getLocationInParent() == MethodInvocation.EXPRESSION_PROPERTY) {
+			return (MethodInvocation) relatedNode.getParent();
+		} else if (relatedNode instanceof MethodInvocation
+				&& ((MethodInvocation) relatedNode).getExpression() == null
+				&& isRepresentedBy(null)) {
+			return (MethodInvocation) relatedNode;
+		}
+		// not a MethodInvocation part
+		return null;
+	}
+
+	/**
+	 * @return the {@link List} of all {@link MethodInvocation} of this {@link JavaInfo}.
+	 */
+	public final List<MethodInvocation> getMethodInvocations() {
+		List<MethodInvocation> invocations = Lists.newArrayList();
+		for (ASTNode node : getRelatedNodes()) {
+			MethodInvocation invocation = getMethodInvocation(node);
+			if (invocation != null) {
+				invocations.add(invocation);
+			}
+		}
+		return invocations;
+	}
+
+	/**
+	 * @return the {@link List} of {@link MethodInvocation} of this {@link JavaInfo} with given
+	 *         signature.
+	 */
+	public final List<MethodInvocation> getMethodInvocations(String signature) {
+		List<MethodInvocation> invocations = Lists.newArrayList();
+		for (ASTNode node : getRelatedNodes()) {
+			// prepare invocation from related node
+			MethodInvocation invocation = getMethodInvocation(node);
+			// check invocation
+			if (invocation != null) {
+				String methodSignature = AstNodeUtils.getMethodSignature(invocation);
+				if (signature.equals(methodSignature) && isRepresentedBy(invocation.getExpression())) {
+					invocations.add(invocation);
+				}
+			}
+		}
+		//
+		return invocations;
+	}
+
+	/**
+	 * @return the {@link MethodInvocation} of this {@link JavaInfo} with given signature.
+	 */
+	public final MethodInvocation getMethodInvocation(String signature) {
+		List<MethodInvocation> invocations = getMethodInvocations(signature);
+		return GenericsUtils.getFirstOrNull(invocations);
+	}
+
+	/**
+	 * Adds new {@link MethodInvocation} for this {@link JavaInfo}. In compare to
+	 * {@link #addExpressionStatement(String)} it uses {@link MethodDescription}'s to find correct
+	 * position for this method. For example for {@link javax.swing.JProgressBar} "setMaximum" should
+	 * be before "setValue".
+	 *
+	 * @return the new added {@link MethodInvocation}.
+	 *
+	 * @param signature
+	 *          the signature of method, to find correct position
+	 * @param arguments
+	 *          the comma separated arguments string
+	 */
+	public final MethodInvocation addMethodInvocation(String signature, String arguments)
+			throws Exception {
+		StatementTarget target = getMethodInvocationTarget(signature);
+		return addMethodInvocation(target, signature, arguments);
+	}
+
+	/**
+	 * Adds new {@link MethodInvocation} for this {@link JavaInfo} into given target.
+	 *
+	 * @return the new added {@link MethodInvocation}.
+	 *
+	 * @param target
+	 *          the {@link StatementTarget} that specifies where to add {@link MethodInvocation}.
+	 * @param signature
+	 *          the signature of method, to find correct position
+	 * @param arguments
+	 *          the comma separated arguments string
+	 */
+	public final MethodInvocation addMethodInvocation(StatementTarget target,
+			String signature,
+			String arguments) throws Exception {
+		// create invocation source
+		String invocationSource;
+		{
+			String methodName = StringUtils.substringBefore(signature, "(");
+			invocationSource = TemplateUtils.format("{0}.{1}({2})", this, methodName, arguments);
+		}
+		// add statement with invocation
+		return (MethodInvocation) addExpressionStatement(target, invocationSource);
+	}
+
+	/**
+	 * Removes {@link MethodInvocation}'s of this {@link JavaInfo} with given signature.
+	 */
+	public final void removeMethodInvocations(String signature) throws Exception {
+		List<MethodInvocation> invocations = getMethodInvocations(signature);
+		for (MethodInvocation invocation : invocations) {
+			m_editor.removeEnclosingStatement(invocation);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Expression utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return new added {@link Expression} for {@link ExpressionStatement} expression with given
+	 *         {@link Expression} source.
+	 */
+	public final Expression addExpressionStatement(String expressionSource) throws Exception {
+		StatementTarget target = m_variableSupport.getStatementTarget();
+		return addExpressionStatement(target, expressionSource);
+	}
+
+	/**
+	 * @return new added {@link Expression} for {@link ExpressionStatement} expression with given
+	 *         {@link Expression} source.
+	 */
+	public final Expression addExpressionStatement(StatementTarget target, String expressionSource)
+			throws Exception {
+		expressionSource = TemplateUtils.resolve(target, expressionSource);
+		String statementSource = expressionSource + ";";
+		ExpressionStatement statement =
+				(ExpressionStatement) m_editor.addStatement(statementSource, target);
+		Expression expression = statement.getExpression();
+		addRelatedNodes(statement);
+		return expression;
+	}
+
+	/**
+	 * See {@link AstEditor#replaceExpression(Expression, String)}. Performs also deferred
+	 * {@link JavaInfo} references resolving.
+	 */
+	public final Expression replaceExpression(Expression expression, String source) throws Exception {
+		Statement targetStatement = AstNodeUtils.getEnclosingStatement(expression);
+		StatementTarget target = new StatementTarget(targetStatement, true);
+		source = TemplateUtils.resolve(target, source);
+		return getEditor().replaceExpression(expression, source);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Field Assignment utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the all {@link Assignment}'s to fields, may be empty {@link List}.
+	 */
+	public final List<Assignment> getFieldAssignments() {
+		List<Assignment> assignments = Lists.newArrayList();
+		for (ASTNode node : getRelatedNodes()) {
+			Expression fieldAccess = AstNodeUtils.getFieldAssignment(node);
+			if (fieldAccess != null) {
+				Assignment assignment = (Assignment) fieldAccess.getParent();
+				assignments.add(assignment);
+			}
+		}
+		return assignments;
+	}
+
+	/**
+	 * @return the {@link Assignment}'s to field, may be empty {@link List}.
+	 */
+	public final List<Assignment> getFieldAssignments(String fieldName) {
+		List<Assignment> assignments = Lists.newArrayList();
+		for (Assignment assignment : getFieldAssignments()) {
+			Expression fieldAccess = assignment.getLeftHandSide();
+			String fieldAccessName = AstNodeUtils.getFieldAccessName(fieldAccess).getIdentifier();
+			if (fieldName.equals(fieldAccessName)) {
+				assignments.add(assignment);
+			}
+		}
+		return assignments;
+	}
+
+	/**
+	 * @return the {@link Assignment} to field, or <code>null</code> if not found.
+	 */
+	public final Assignment getFieldAssignment(String fieldName) {
+		List<Assignment> assignments = getFieldAssignments(fieldName);
+		return GenericsUtils.getFirstOrNull(assignments);
+	}
+
+	/**
+	 * Adds new {@link Assignment} to given field.
+	 */
+	public final Assignment addFieldAssignment(String fieldName, String source) throws Exception {
+		String assignmentSource = TemplateUtils.format("{0}.{1} = {2}", this, fieldName, source);
+		return (Assignment) addExpressionStatement(assignmentSource);
+	}
+
+	/**
+	 * Removes {@link Assignment}'s to given field on this {@link JavaInfo}.
+	 */
+	public final void removeFieldAssignments(String fieldName) throws Exception {
+		List<Assignment> assignments = getFieldAssignments(fieldName);
+		for (Assignment assignment : assignments) {
+			if (!AstNodeUtils.isDanglingNode(assignment)) {
+				m_editor.removeEnclosingStatement(assignment);
+			}
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// isRepresentedBy
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> is given {@link ASTNode} represents this {@link JavaInfo}.
+	 */
+	public boolean isRepresentedBy(ASTNode node) {
+		return getChildRepresentedBy(node) == this;
+	}
+
+	/**
+	 * @return the {@link JavaInfo} that represents given {@link ASTNode}, or <code>null</code>.
+	 */
+	public JavaInfo getChildRepresentedBy(ASTNode node) {
+		if (node == null || node instanceof Expression) {
+			JavaInfoResolver resolver = EditorState.get(m_editor).getJavaInfoResolver();
+			return resolver.getJavaInfo((Expression) node);
+		}
+		return null;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private JavaInfoEvaluationHelper m_evaluationHelper;
+
+	@Override
+	public void refresh_dispose() throws Exception {
+		// clean object reference
+		m_object = null;
+		// continue
+		super.refresh_dispose();
+	}
+
+	@Override
+	public void refresh_beforeCreate() throws Exception {
+		// mark active editor
+		if (isRoot()) {
+			GlobalStateJava.activate(this);
+		}
+		super.refresh_beforeCreate();
+	}
+
+	@Override
+	public void refresh_create() throws Exception {
+		ExecutionFlowDescription flowDescription = EditorState.get(m_editor).getFlowDescription();
+		// prepare editor state
+		final EditorState editorState;
+		{
+			editorState = EditorState.get(m_editor);
+			editorState.getBadRefreshNodes().clear();
+			editorState.setTmp_visitingContext(new VisitingContext(false));
+			editorState.getTmp_InterceptedMethods().clear();
+			editorState.setExecuting(true);
+		}
+		// visited ASTNode-s
+		final VisitedNodes visitedNodes = editorState.getVisitedNodes();
+		visitedNodes.clear();
+		// prepare visitor for evaluation
+		final EvaluationEventListener evaluationListener = getBroadcast(EvaluationEventListener.class);
+		m_evaluationHelper = null;
+		ExecutionFlowFrameVisitor visitor = new ExecutionFlowFrameVisitor() {
+			@Override
+			public void postVisit(ASTNode node) {
+				visitedNodes.add(node);
+				try {
+					JavaInfoEvaluationHelper evaluationHelper = getEvaluationHelper(this);
+					// send notifications and evaluate
+					if (shouldNotifyAboutEvaluate(node)) {
+						EvaluationContext context = getEvaluationHelper(this).getContext();
+						evaluationListener.evaluateBefore(context, node);
+					}
+					evaluationHelper.evaluate(node);
+					if (shouldNotifyAboutEvaluate(node)) {
+						EvaluationContext context = getEvaluationHelper(this).getContext();
+						evaluationListener.evaluateAfter(context, node);
+					}
+				} catch (Throwable e) {
+					// exception during JavaInfo evaluation is serious, so fail
+					if (node instanceof Expression && getChildRepresentedBy(node) != null) {
+						ReflectionUtils.propagate(e);
+					}
+					// some other exception, log and continue
+					editorState.getBadRefreshNodes().add(node, e);
+				}
+			}
+
+			private boolean shouldNotifyAboutEvaluate(ASTNode node) {
+				return node instanceof ClassInstanceCreation
+						|| node instanceof MethodInvocation
+						|| node instanceof Statement;
+			}
+
+			@Override
+			public boolean enterFrame(final ASTNode node) {
+				// send broadcast
+				ExecutionUtils.runRethrow(new RunnableEx() {
+					@Override
+					public void run() throws Exception {
+						editorState.getBroadcast().getListener(ExecutionFlowEnterFrame.class).invoke(node);
+					}
+				});
+				// MethodDeclaration
+				if (node instanceof MethodDeclaration) {
+					MethodDeclaration methodDeclaration = (MethodDeclaration) node;
+					// don't visit local factory methods
+					if (FactoryDescriptionHelper.isFactoryMethod(methodDeclaration)) {
+						return false;
+					}
+				}
+				return super.enterFrame(node);
+			}
+
+			@Override
+			public void leaveFrame(final ASTNode node) {
+				super.leaveFrame(node);
+				// send broadcast
+				ExecutionUtils.runRethrow(new RunnableEx() {
+					@Override
+					public void run() throws Exception {
+						editorState.getBroadcast().getListener(EvaluationEventListener.class).leaveFrame(node);
+					}
+				});
+			}
+		};
+		// evaluate "this"
+		if (!getCreationSupport().canBeEvaluated()) {
+			getEvaluationHelper(visitor).evaluateJavaInfoUsingCreationSupport(this);
+		}
+		// visit all AST nodes on execution flow and execute nodes related to components
+		ExecutionFlowUtils.visit(editorState.getTmp_visitingContext(), flowDescription, visitor);
+		editorState.setExecuting(false);
+		highlightVisitedNodes(visitedNodes);
+	}
+
+	private void highlightVisitedNodes(VisitedNodes visitedNodes) throws JavaModelException {
+		// don't call DesignPageSite methods
+		if (EnvironmentUtils.DEVELOPER_HOST && EnvironmentUtils.isTestingTime()) {
+			return;
+		}
+		// do highlight
+		DesignPageSite site = DesignPageSite.Helper.getSite(this);
+		if (site != null) {
+			AstEditor editor = getEditor();
+			String editorSource = editor.getSource();
+			String unitSource = editor.getModelUnit().getSource();
+			boolean isCommitted = editorSource.equals(unitSource);
+			if (isCommitted) {
+				// TODO(scheglov)
+				//        site.highlightVisitedNodes(visitedNodes.getNodes());
+			}
+		}
+	}
+
+	private JavaInfoEvaluationHelper getEvaluationHelper(ExecutionFlowFrameVisitor visitor) {
+		if (m_evaluationHelper == null) {
+			m_evaluationHelper = new JavaInfoEvaluationHelper(m_editor, visitor) {
+				@Override
+				protected JavaInfo getRootJavaInfo() {
+					return m_this;
+				}
+
+				@Override
+				protected JavaInfo getJavaInfoRepresentedBy(Expression expression) {
+					return m_this.getChildRepresentedBy(expression);
+				}
+
+				@Override
+				protected void thisJavaInfoNodeProcessed(JavaInfo javaInfo, ASTNode node) throws Exception {
+				}
+			};
+		}
+		return m_evaluationHelper;
+	}
+
+	@Override
+	protected void refresh_afterCreate() throws Exception {
+		super.refresh_afterCreate();
+		if (!isPlaceholder()) {
+			JavaInfoUtils.executeScriptParameter(this, "refresh_afterCreate");
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Object m_object;
+
+	/**
+	 * @return <code>true</code> if {@link #getObject()} has not actual object, but placeholder, so
+	 *         not all methods may be invoked.
+	 */
+	public final boolean isPlaceholder() {
+		return PlaceholderUtils.isPlaceholder(this);
+	}
+
+	/**
+	 * @return the {@link Object} created for this {@link JavaInfo}.
+	 */
+	public final Object getObject() {
+		return m_object;
+	}
+
+	/**
+	 * Sets the {@link Object} created for this {@link JavaInfo}. We create these objects externally -
+	 * in {@link JavaInfoEvaluationHelper} or in {@link CreationSupport}.
+	 */
+	public void setObject(Object object) throws Exception {
+		{
+			Object[] objectRef = new Object[]{object};
+			getBroadcast(JavaInfosetObjectBefore.class).invoke(this, objectRef);
+			object = objectRef[0];
+		}
+		//
+		m_object = object;
+		if (!m_initialized) {
+			if (!isPlaceholder()) {
+				initialize();
+			}
+		}
+		//
+		getBroadcast(JavaInfoSetObjectAfter.class).invoke(this, object);
+	}
+
+	/**
+	 * @return the {@link JavaInfo} with same object as given.
+	 */
+	public final JavaInfo getChildByObject(final Object o) {
+		if (o == null) {
+			return null;
+		}
+		final JavaInfo result[] = new JavaInfo[1];
+		accept(new ObjectInfoVisitor() {
+			@Override
+			public boolean visit(ObjectInfo objectInfo) throws Exception {
+				if (result[0] == null && objectInfo instanceof JavaInfo) {
+					JavaInfo javaInfo = (JavaInfo) objectInfo;
+					if (javaInfo.getObject() == o) {
+						result[0] = javaInfo;
+					}
+				}
+				return result[0] == null;
+			}
+		});
+		return result[0];
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Evaluation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if given {@link MethodInvocation} should be evaluated. For example we
+	 *         should evaluate <code>setXXX(value)</code> invocations, but not
+	 *         <code>addXXXListener(anonymousClass)</code>. By default methods from description are
+	 *         used.
+	 */
+	public boolean shouldEvaluateInvocation(MethodInvocation invocation) {
+		IMethodBinding methodBinding = AstNodeUtils.getMethodBinding(invocation);
+		MethodDescription methodDescription = getDescription().getMethod(methodBinding);
+		return methodDescription != null && methodDescription.isExecutable();
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/WrapperByMethod.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/WrapperByMethod.java
index 471b7f243..9bab00bb9 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/WrapperByMethod.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/WrapperByMethod.java
@@ -37,136 +37,136 @@
  * @coverage core.model
  */
 public class WrapperByMethod extends AbstractWrapper {
-  protected Method m_method;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public WrapperByMethod(JavaInfo host, String methodName) {
-    super(host);
-    setControlMethodName(methodName);
-  }
-
-  public WrapperByMethod(JavaInfo host) {
-    this(host, JavaInfoUtils.getParameter(host, "Wrapper.method"));
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Prepares {@link #m_method} used to access {@link Control}.
-   */
-  public final void setControlMethodName(String methodName) {
-    Class<?> componentClass = m_wrapperInfo.getDescription().getComponentClass();
-    m_method = ReflectionUtils.getMethodBySignature(componentClass, methodName + "()");
-    Assert.isNotNull(m_method, "Viewer control access method \""
-        + methodName
-        + "\" not found for viewer class "
-        + ReflectionUtils.getFullyQualifiedName(componentClass, false));
-  }
-
-  /**
-   * @return the {@link Method} to use for accessing {@link Control}.
-   */
-  public Method getControlMethod() {
-    return m_method;
-  }
-
-  @Override
-  public Class<?> getWrappedType() {
-    return getControlMethod().getReturnType();
-  }
-
-  @Override
-  protected CreationSupport newWrappedCreationSupport() throws Exception {
-    return new WrapperMethodLiveCreationSupport(this);
-  }
-
-  @Override
-  public boolean isWrappedInfo(ASTNode node) {
-    if (node instanceof MethodInvocation) {
-      MethodInvocation invocation = (MethodInvocation) node;
-      return invocation.arguments().isEmpty()
-          && invocation.getName().getIdentifier().equals(m_method.getName())
-          && m_wrapperInfo.isRepresentedBy(invocation.getExpression());
-    }
-    return false;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parent/child utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Configures parent/child links for given {@link WrapperByMethod}, its parent and control.
-   */
-  public void configureWrapper(AbstractInvocationDescription methodDescription,
-      JavaInfo argumentInfos[]) throws Exception {
-    for (ParameterDescription parameter : methodDescription.getParameters()) {
-      JavaInfo parameterJavaInfo = argumentInfos[parameter.getIndex()];
-      if (parameter.isParent() && isParameterWithWrapped(parameter)) {
-        m_wrappedInfo = parameterJavaInfo;
-      }
-      configureParameter(parameter, parameterJavaInfo);
-    }
-  }
-
-  protected void configureParameter(ParameterDescription parameter, JavaInfo parameterJavaInfo)
-      throws Exception {
-    if (parameter.isParent() && !isParameterWithWrapped(parameter)) {
-      configureHierarchy(parameterJavaInfo);
-    }
-  }
-
-  private boolean isParameterWithWrapped(ParameterDescription parameter) {
-    return parameter.hasTrueTag("Wrapper.wrapped");
-  }
-
-  /**
-   * Configures parent/child links.
-   */
-  public void configureHierarchy(JavaInfo parent) throws Exception {
-    if (m_wrappedInfo == null) {
-      // create control info
-      m_wrappedInfo =
-          JavaInfoUtils.createJavaInfo(
-              m_wrapperInfo.getEditor(),
-              getWrappedType(),
-              newControlCreationSupport());
-      // tune control
-      m_wrappedInfo.setVariableSupport(newControlVariableSupport(m_wrappedInfo));
-      m_wrappedInfo.setAssociation(newControlAssociation());
-    }
-    // add control/viewer
-    configureHierarchy(parent, m_wrappedInfo);
-  }
-
-  protected CreationSupport newControlCreationSupport() {
-    return new WrapperMethodControlCreationSupport(this);
-  }
-
-  protected VariableSupport newControlVariableSupport(JavaInfo control) {
-    return new WrapperMethodControlVariableSupport(control, this);
-  }
-
-  protected Association newControlAssociation() {
-    return new WrappedObjectAssociation(this);
-  }
-
-  protected void configureHierarchy(JavaInfo parent, JavaInfo control) throws Exception {
-    softAddChild(parent, control);
-    softAddChild(control, m_wrapperInfo);
-  }
-
-  protected final static void softAddChild(ObjectInfo parent, ObjectInfo child) throws Exception {
-    if (!parent.getChildren().contains(child)) {
-      parent.addChild(child);
-    }
-  }
+	protected Method m_method;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public WrapperByMethod(JavaInfo host, String methodName) {
+		super(host);
+		setControlMethodName(methodName);
+	}
+
+	public WrapperByMethod(JavaInfo host) {
+		this(host, JavaInfoUtils.getParameter(host, "Wrapper.method"));
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Prepares {@link #m_method} used to access {@link Control}.
+	 */
+	public final void setControlMethodName(String methodName) {
+		Class<?> componentClass = m_wrapperInfo.getDescription().getComponentClass();
+		m_method = ReflectionUtils.getMethodBySignature(componentClass, methodName + "()");
+		Assert.isNotNull(m_method, "Viewer control access method \""
+				+ methodName
+				+ "\" not found for viewer class "
+				+ ReflectionUtils.getFullyQualifiedName(componentClass, false));
+	}
+
+	/**
+	 * @return the {@link Method} to use for accessing {@link Control}.
+	 */
+	public Method getControlMethod() {
+		return m_method;
+	}
+
+	@Override
+	public Class<?> getWrappedType() {
+		return getControlMethod().getReturnType();
+	}
+
+	@Override
+	protected CreationSupport newWrappedCreationSupport() throws Exception {
+		return new WrapperMethodLiveCreationSupport(this);
+	}
+
+	@Override
+	public boolean isWrappedInfo(ASTNode node) {
+		if (node instanceof MethodInvocation) {
+			MethodInvocation invocation = (MethodInvocation) node;
+			return invocation.arguments().isEmpty()
+					&& invocation.getName().getIdentifier().equals(m_method.getName())
+					&& m_wrapperInfo.isRepresentedBy(invocation.getExpression());
+		}
+		return false;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parent/child utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Configures parent/child links for given {@link WrapperByMethod}, its parent and control.
+	 */
+	public void configureWrapper(AbstractInvocationDescription methodDescription,
+			JavaInfo argumentInfos[]) throws Exception {
+		for (ParameterDescription parameter : methodDescription.getParameters()) {
+			JavaInfo parameterJavaInfo = argumentInfos[parameter.getIndex()];
+			if (parameter.isParent() && isParameterWithWrapped(parameter)) {
+				m_wrappedInfo = parameterJavaInfo;
+			}
+			configureParameter(parameter, parameterJavaInfo);
+		}
+	}
+
+	protected void configureParameter(ParameterDescription parameter, JavaInfo parameterJavaInfo)
+			throws Exception {
+		if (parameter.isParent() && !isParameterWithWrapped(parameter)) {
+			configureHierarchy(parameterJavaInfo);
+		}
+	}
+
+	private boolean isParameterWithWrapped(ParameterDescription parameter) {
+		return parameter.hasTrueTag("Wrapper.wrapped");
+	}
+
+	/**
+	 * Configures parent/child links.
+	 */
+	public void configureHierarchy(JavaInfo parent) throws Exception {
+		if (m_wrappedInfo == null) {
+			// create control info
+			m_wrappedInfo =
+					JavaInfoUtils.createJavaInfo(
+							m_wrapperInfo.getEditor(),
+							getWrappedType(),
+							newControlCreationSupport());
+			// tune control
+			m_wrappedInfo.setVariableSupport(newControlVariableSupport(m_wrappedInfo));
+			m_wrappedInfo.setAssociation(newControlAssociation());
+		}
+		// add control/viewer
+		configureHierarchy(parent, m_wrappedInfo);
+	}
+
+	protected CreationSupport newControlCreationSupport() {
+		return new WrapperMethodControlCreationSupport(this);
+	}
+
+	protected VariableSupport newControlVariableSupport(JavaInfo control) {
+		return new WrapperMethodControlVariableSupport(control, this);
+	}
+
+	protected Association newControlAssociation() {
+		return new WrappedObjectAssociation(this);
+	}
+
+	protected void configureHierarchy(JavaInfo parent, JavaInfo control) throws Exception {
+		softAddChild(parent, control);
+		softAddChild(control, m_wrapperInfo);
+	}
+
+	protected final static void softAddChild(ObjectInfo parent, ObjectInfo child) throws Exception {
+		if (!parent.getChildren().contains(child)) {
+			parent.addChild(child);
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/WrapperMethodInfo.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/WrapperMethodInfo.java
index 580d14b8b..eee6c2878 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/WrapperMethodInfo.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/WrapperMethodInfo.java
@@ -38,153 +38,153 @@
  * @coverage core.model
  */
 public class WrapperMethodInfo extends JavaInfo implements IWrapperInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public WrapperMethodInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public WrapperMethodInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Initialize
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void initialize() throws Exception {
-    super.initialize();
-    addBroadcastListener(new JavaEventListener() {
-      @Override
-      public void clipboardCopy(JavaInfo source, List<ClipboardCommand> commands) throws Exception {
-        // add command for pasting Viewer, if Viewer created around Control
-        if (source == getParent()
-            && !(source.getCreationSupport() instanceof WrapperMethodControlCreationSupport)) {
-          clipboardCopy_addCommands(commands);
-        }
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Initialize
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void initialize() throws Exception {
+		super.initialize();
+		addBroadcastListener(new JavaEventListener() {
+			@Override
+			public void clipboardCopy(JavaInfo source, List<ClipboardCommand> commands) throws Exception {
+				// add command for pasting Viewer, if Viewer created around Control
+				if (source == getParent()
+						&& !(source.getCreationSupport() instanceof WrapperMethodControlCreationSupport)) {
+					clipboardCopy_addCommands(commands);
+				}
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Clipboard
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  //@edu.umd.cs.findbugs.annotations.SuppressWarnings(value = "SE_BAD_FIELD")
-  private void clipboardCopy_addCommands(List<ClipboardCommand> commands) throws Exception {
-    final JavaInfoMemento wrapperMemento = JavaInfoMemento.createMemento(WrapperMethodInfo.this);
-    commands.add(new ClipboardCommand() {
-      private static final long serialVersionUID = 0L;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Clipboard
+	//
+	////////////////////////////////////////////////////////////////////////////
+	//@edu.umd.cs.findbugs.annotations.SuppressWarnings(value = "SE_BAD_FIELD")
+	private void clipboardCopy_addCommands(List<ClipboardCommand> commands) throws Exception {
+		final JavaInfoMemento wrapperMemento = JavaInfoMemento.createMemento(WrapperMethodInfo.this);
+		commands.add(new ClipboardCommand() {
+			private static final long serialVersionUID = 0L;
 
-      @Override
-      public void execute(JavaInfo javaInfo) throws Exception {
-        WrapperMethodInfo viewer = (WrapperMethodInfo) wrapperMemento.create(javaInfo);
-        JavaInfoUtils.add(
-            viewer,
-            new LocalUniqueVariableSupport(viewer),
-            PureFlatStatementGenerator.INSTANCE,
-            null,
-            javaInfo,
-            null);
-        wrapperMemento.apply();
-      }
-    });
-  }
+			@Override
+			public void execute(JavaInfo javaInfo) throws Exception {
+				WrapperMethodInfo viewer = (WrapperMethodInfo) wrapperMemento.create(javaInfo);
+				JavaInfoUtils.add(
+						viewer,
+						new LocalUniqueVariableSupport(viewer),
+						PureFlatStatementGenerator.INSTANCE,
+						null,
+						javaInfo,
+						null);
+				wrapperMemento.apply();
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Delete
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private boolean m_deleting = false;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Delete
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private boolean m_deleting = false;
 
-  @Override
-  public void delete() throws Exception {
-    if (!m_deleting) {
-      JavaInfo wrapped = getWrapper().getWrappedInfo();
-      if (!wrapped.isDeleting()) {
-        m_deleting = true;
-        try {
-          wrapped.delete();
-        } finally {
-          m_deleting = false;
-        }
-        return;
-      }
-    }
-    super.delete();
-  }
+	@Override
+	public void delete() throws Exception {
+		if (!m_deleting) {
+			JavaInfo wrapped = getWrapper().getWrappedInfo();
+			if (!wrapped.isDeleting()) {
+				m_deleting = true;
+				try {
+					wrapped.delete();
+				} finally {
+					m_deleting = false;
+				}
+				return;
+			}
+		}
+		super.delete();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IWrapperInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private WrapperByMethod m_wrapper;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IWrapperInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private WrapperByMethod m_wrapper;
 
-  @Override
-  public WrapperByMethod getWrapper() {
-    if (m_wrapper == null) {
-      m_wrapper = createWrapper();
-    }
-    return m_wrapper;
-  }
+	@Override
+	public WrapperByMethod getWrapper() {
+		if (m_wrapper == null) {
+			m_wrapper = createWrapper();
+		}
+		return m_wrapper;
+	}
 
-  protected WrapperByMethod createWrapper() {
-    return new WrapperByMethod(this);
-  }
+	protected WrapperByMethod createWrapper() {
+		return new WrapperByMethod(this);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Check for wrapper
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final ClassMap<Boolean> m_hasSpecialDescription = new ClassMap<Boolean>();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Check for wrapper
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final ClassMap<Boolean> m_hasSpecialDescription = new ClassMap<Boolean>();
 
-  /**
-   * @return <code>true</code> if given class is the wrapper class.
-   */
-  public static boolean isWrapper(AstEditor editor, Class<?> clazz) throws Exception {
-    EditorState state = EditorState.get(editor);
-    ILoadingContext context = EditorStateLoadingContext.get(state);
-    if (hasSpecialDescription(context, clazz)) {
-      ComponentDescription description = ComponentDescriptionHelper.getDescription(editor, clazz);
-      return WrapperMethodInfo.class.isAssignableFrom(description.getModelClass());
-    }
-    return false;
-  }
+	/**
+	 * @return <code>true</code> if given class is the wrapper class.
+	 */
+	public static boolean isWrapper(AstEditor editor, Class<?> clazz) throws Exception {
+		EditorState state = EditorState.get(editor);
+		ILoadingContext context = EditorStateLoadingContext.get(state);
+		if (hasSpecialDescription(context, clazz)) {
+			ComponentDescription description = ComponentDescriptionHelper.getDescription(editor, clazz);
+			return WrapperMethodInfo.class.isAssignableFrom(description.getModelClass());
+		}
+		return false;
+	}
 
-  private static boolean hasSpecialDescription(ILoadingContext context, Class<?> clazz)
-      throws Exception {
-    // stop on Object
-    if (clazz == Object.class) {
-      return false;
-    }
-    // interfaces not allowed
-    if (clazz.isInterface()) {
-      return false;
-    }
-    // get cached or new
-    Boolean result = m_hasSpecialDescription.get(clazz);
-    if (result == null) {
-      result = hasSpecialDescription0(context, clazz);
-      m_hasSpecialDescription.put(clazz, result);
-    }
-    // done
-    return result;
-  }
+	private static boolean hasSpecialDescription(ILoadingContext context, Class<?> clazz)
+			throws Exception {
+		// stop on Object
+		if (clazz == Object.class) {
+			return false;
+		}
+		// interfaces not allowed
+		if (clazz.isInterface()) {
+			return false;
+		}
+		// get cached or new
+		Boolean result = m_hasSpecialDescription.get(clazz);
+		if (result == null) {
+			result = hasSpecialDescription0(context, clazz);
+			m_hasSpecialDescription.put(clazz, result);
+		}
+		// done
+		return result;
+	}
 
-  private static boolean hasSpecialDescription0(ILoadingContext context, Class<?> clazz)
-      throws Exception {
-    boolean hasDescription = DescriptionHelper.hasComponentDescriptionResource(context, clazz);
-    if (hasDescription) {
-      return true;
-    } else {
-      return hasSpecialDescription(context, clazz.getSuperclass());
-    }
-  }
+	private static boolean hasSpecialDescription0(ILoadingContext context, Class<?> clazz)
+			throws Exception {
+		boolean hasDescription = DescriptionHelper.hasComponentDescriptionResource(context, clazz);
+		if (hasDescription) {
+			return true;
+		} else {
+			return hasSpecialDescription(context, clazz.getSuperclass());
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/ArrayAssociation.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/ArrayAssociation.java
index 6d9a29f60..3b00fac21 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/ArrayAssociation.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/ArrayAssociation.java
@@ -28,59 +28,59 @@
  * @coverage core.model.association
  */
 public final class ArrayAssociation extends Association {
-  private final ArrayCreation m_arrayCreation;
+	private final ArrayCreation m_arrayCreation;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ArrayAssociation(ArrayCreation arrayCreation) {
-    m_arrayCreation = arrayCreation;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ArrayAssociation(ArrayCreation arrayCreation) {
+		m_arrayCreation = arrayCreation;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the underlying {@link ArrayCreation}.
-   */
-  public ArrayCreation getCreation() {
-    return m_arrayCreation;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the underlying {@link ArrayCreation}.
+	 */
+	public ArrayCreation getCreation() {
+		return m_arrayCreation;
+	}
 
-  @Override
-  public Statement getStatement() {
-    return AstNodeUtils.getEnclosingStatement(m_arrayCreation);
-  }
+	@Override
+	public Statement getStatement() {
+		return AstNodeUtils.getEnclosingStatement(m_arrayCreation);
+	}
 
-  @Override
-  public String getSource() {
-    return m_editor.getSource(m_arrayCreation);
-  }
+	@Override
+	public String getSource() {
+		return m_editor.getSource(m_arrayCreation);
+	}
 
-  @Override
-  public boolean remove() throws Exception {
-    ArrayInitializer initializer = m_arrayCreation.getInitializer();
-    List<Expression> expressionsToRemove = Lists.newArrayList();
-    // locate items
-    {
-      @SuppressWarnings("unchecked")
-      List<Expression> expressions = initializer.expressions();
-      for (Expression expression : expressions) {
-        if (m_javaInfo.isRepresentedBy(expression)) {
-          expressionsToRemove.add(expression);
-        }
-      }
-    }
-    // remove items
-    for (Expression expression : expressionsToRemove) {
-      int elementIndex = initializer.expressions().indexOf(expression);
-      m_editor.removeArrayElement(initializer, elementIndex);
-    }
-    // yes, association removed
-    return super.remove();
-  }
+	@Override
+	public boolean remove() throws Exception {
+		ArrayInitializer initializer = m_arrayCreation.getInitializer();
+		List<Expression> expressionsToRemove = Lists.newArrayList();
+		// locate items
+		{
+			@SuppressWarnings("unchecked")
+			List<Expression> expressions = initializer.expressions();
+			for (Expression expression : expressions) {
+				if (m_javaInfo.isRepresentedBy(expression)) {
+					expressionsToRemove.add(expression);
+				}
+			}
+		}
+		// remove items
+		for (Expression expression : expressionsToRemove) {
+			int elementIndex = initializer.expressions().indexOf(expression);
+			m_editor.removeArrayElement(initializer, elementIndex);
+		}
+		// yes, association removed
+		return super.remove();
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/Association.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/Association.java
index 5956d61ab..04cae746c 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/Association.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/Association.java
@@ -77,118 +77,118 @@
  * @coverage core.model.association
  */
 public abstract class Association {
-  protected JavaInfo m_javaInfo;
-  protected AstEditor m_editor;
-  protected IJavaProject m_javaProject;
+	protected JavaInfo m_javaInfo;
+	protected AstEditor m_editor;
+	protected IJavaProject m_javaProject;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets the {@link JavaInfo} that is associated using this {@link Association}.<br>
-   * This method can be used only once and only for not-null {@link JavaInfo}.
-   */
-  public void setJavaInfo(JavaInfo javaInfo) throws Exception {
-    Assert.isNull(m_javaInfo);
-    Assert.isNotNull(javaInfo);
-    m_javaInfo = javaInfo;
-    m_editor = m_javaInfo.getEditor();
-    m_javaProject = m_editor.getJavaProject();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets the {@link JavaInfo} that is associated using this {@link Association}.<br>
+	 * This method can be used only once and only for not-null {@link JavaInfo}.
+	 */
+	public void setJavaInfo(JavaInfo javaInfo) throws Exception {
+		Assert.isNull(m_javaInfo);
+		Assert.isNotNull(javaInfo);
+		m_javaInfo = javaInfo;
+		m_editor = m_javaInfo.getEditor();
+		m_javaProject = m_editor.getJavaProject();
+	}
 
-  /**
-   * @return the {@link JavaInfo} for which this {@link Association} is installed.
-   */
-  public final JavaInfo getJavaInfo() {
-    return m_javaInfo;
-  }
+	/**
+	 * @return the {@link JavaInfo} for which this {@link Association} is installed.
+	 */
+	public final JavaInfo getJavaInfo() {
+		return m_javaInfo;
+	}
 
-  /**
-   * @return <code>true</code> if {@link #remove()} can be used, so this {@link JavaInfo} can be
-   *         deleted.
-   */
-  public boolean canDelete() {
-    return true;
-  }
+	/**
+	 * @return <code>true</code> if {@link #remove()} can be used, so this {@link JavaInfo} can be
+	 *         deleted.
+	 */
+	public boolean canDelete() {
+		return true;
+	}
 
-  /**
-   * @return the {@link Statement} that contains this {@link Association}, or <code>null</code> if
-   *         this {@link Association} is not established by any {@link Statement}.
-   */
-  public Statement getStatement() {
-    return null;
-  }
+	/**
+	 * @return the {@link Statement} that contains this {@link Association}, or <code>null</code> if
+	 *         this {@link Association} is not established by any {@link Statement}.
+	 */
+	public Statement getStatement() {
+		return null;
+	}
 
-  /**
-   * This method is used in tests to simplify checking of {@link Association}'s.
-   *
-   * @return the source code of this {@link Association}.
-   */
-  public String getSource() {
-    throw new NotImplementedException(getClass());
-  }
+	/**
+	 * This method is used in tests to simplify checking of {@link Association}'s.
+	 *
+	 * @return the source code of this {@link Association}.
+	 */
+	public String getSource() {
+		throw new NotImplementedException(getClass());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Properties
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Allows {@link Association} add zero or more {@link Property}'s, for example for method
-   * invocation we can add complex property with sub-property for each argument (except child
-   * argument).
-   */
-  public void addProperties(List<Property> properties) throws Exception {
-    // don't add any property by default
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Properties
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Allows {@link Association} add zero or more {@link Property}'s, for example for method
+	 * invocation we can add complex property with sub-property for each argument (except child
+	 * argument).
+	 */
+	public void addProperties(List<Property> properties) throws Exception {
+		// don't add any property by default
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Applies this {@link Association} into source code, for example generates
-   * {@link MethodInvocation}.
-   * <p>
-   * Not all {@link Association} implementations do something on this operation, for example in SWT
-   * component associated with its parent on creation, so no separate association required.
-   *
-   * @param javaInfo
-   *          the {@link JavaInfo} that should associated.
-   * @param target
-   *          the {@link StatementTarget} for association.
-   * @param leadingComments
-   *          the optional (can be <code>null</code>) array of lines that should be added before
-   *          first statement
-   */
-  public void add(JavaInfo javaInfo, StatementTarget target, String[] leadingComments)
-      throws Exception {
-    setInModelNoCompound(javaInfo);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Applies this {@link Association} into source code, for example generates
+	 * {@link MethodInvocation}.
+	 * <p>
+	 * Not all {@link Association} implementations do something on this operation, for example in SWT
+	 * component associated with its parent on creation, so no separate association required.
+	 *
+	 * @param javaInfo
+	 *          the {@link JavaInfo} that should associated.
+	 * @param target
+	 *          the {@link StatementTarget} for association.
+	 * @param leadingComments
+	 *          the optional (can be <code>null</code>) array of lines that should be added before
+	 *          first statement
+	 */
+	public void add(JavaInfo javaInfo, StatementTarget target, String[] leadingComments)
+			throws Exception {
+		setInModelNoCompound(javaInfo);
+	}
 
-  /**
-   * Moves this {@link Association} to specified {@link NodeTarget} during moving component inside
-   * of same container.
-   * <p>
-   * Not all {@link Association} implementations support this operation, for example in SWT
-   * component associated with its parent on creation, so association can not be moved separately.
-   * May be {@link LazyVariableSupport} is only user of this operation.
-   */
-  public void move(StatementTarget target) throws Exception {
-    throw new NotImplementedException(getClass());
-  }
+	/**
+	 * Moves this {@link Association} to specified {@link NodeTarget} during moving component inside
+	 * of same container.
+	 * <p>
+	 * Not all {@link Association} implementations support this operation, for example in SWT
+	 * component associated with its parent on creation, so association can not be moved separately.
+	 * May be {@link LazyVariableSupport} is only user of this operation.
+	 */
+	public void move(StatementTarget target) throws Exception {
+		throw new NotImplementedException(getClass());
+	}
 
-  /**
-   * Notifies this {@link Association} that {@link JavaInfo} was moved from one parent to other.
-   * {@link Association} should update source code to reflect fact of association with new parent,
-   * for example update reference on parent in constructor, or in invocation.
-   * <p>
-   * Sequence of operations during is following:
-   *
-   * <pre>
+	/**
+	 * Notifies this {@link Association} that {@link JavaInfo} was moved from one parent to other.
+	 * {@link Association} should update source code to reflect fact of association with new parent,
+	 * for example update reference on parent in constructor, or in invocation.
+	 * <p>
+	 * Sequence of operations during is following:
+	 *
+	 * <pre>
 	 * 	oldAssociation.remove();
 	 * 	if (oldAssociation.isStillActive()) {
 	 * 		oldAssociation.setParent(newParent);
@@ -196,77 +196,77 @@ public void move(StatementTarget target) throws Exception {
 	 * 		newAssociation.add(...);
 	 * 	}
 	 * </pre>
-   *
-   * @param parent
-   *          the new parent. We could use parent from {@link JavaInfo#getParentJava()}, but in SWT
-   *          Viewer's Control association is delegated to Viewer that is implemented as
-   *          <em>child</em> of Control, so we in this case we should use parent-parent.
-   */
-  public void setParent(JavaInfo parent) throws Exception {
-    throw new NotImplementedException(getClass());
-  }
+	 *
+	 * @param parent
+	 *          the new parent. We could use parent from {@link JavaInfo#getParentJava()}, but in SWT
+	 *          Viewer's Control association is delegated to Viewer that is implemented as
+	 *          <em>child</em> of Control, so we in this case we should use parent-parent.
+	 */
+	public void setParent(JavaInfo parent) throws Exception {
+		throw new NotImplementedException(getClass());
+	}
 
-  /**
-   * Deletes this {@link Association} from source code and from {@link JavaInfo#getAssociation()}.
-   * We do this when delete component or move it on new container.
-   * <p>
-   * Not all {@link Association}'s can be removed. For example {@link ConstructorParentAssociation}
-   * creates association on creation, so can not be removed (so {@link JavaInfo#getAssociation()}
-   * will still return it even after "remove"). During {@link JavaInfo} "move" we check that if
-   * {@link Association} is not removed, we ask it to move on new parent using
-   * {@link #setParent(JavaInfo)}.
-   *
-   * @return <code>true</code> if {@link Association} was really removed.
-   */
-  public boolean remove() throws Exception {
-    removeFromModelIfPrimary();
-    return true;
-  }
+	/**
+	 * Deletes this {@link Association} from source code and from {@link JavaInfo#getAssociation()}.
+	 * We do this when delete component or move it on new container.
+	 * <p>
+	 * Not all {@link Association}'s can be removed. For example {@link ConstructorParentAssociation}
+	 * creates association on creation, so can not be removed (so {@link JavaInfo#getAssociation()}
+	 * will still return it even after "remove"). During {@link JavaInfo} "move" we check that if
+	 * {@link Association} is not removed, we ask it to move on new parent using
+	 * {@link #setParent(JavaInfo)}.
+	 *
+	 * @return <code>true</code> if {@link Association} was really removed.
+	 */
+	public boolean remove() throws Exception {
+		removeFromModelIfPrimary();
+		return true;
+	}
 
-  /**
-   * This method is used during morphing to transform existing association for source component into
-   * association for target component. Here we create corresponding new instance of
-   * {@link Association} for new component.
-   *
-   * @throws NotImplementedException
-   *           if this {@link Association} does not supports morphing.
-   */
-  public Association getCopy() {
-    throw new NotImplementedException(getClass());
-  }
+	/**
+	 * This method is used during morphing to transform existing association for source component into
+	 * association for target component. Here we create corresponding new instance of
+	 * {@link Association} for new component.
+	 *
+	 * @throws NotImplementedException
+	 *           if this {@link Association} does not supports morphing.
+	 */
+	public Association getCopy() {
+		throw new NotImplementedException(getClass());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * If {@link JavaInfo} has no {@link CompoundAssociation}, then set this {@link Association}.
-   * <p>
-   * When we add new {@link Association} using
-   * {@link Association#add(JavaInfo, StatementTarget, String[])}, we may be first and only
-   * {@link Association}, but may be there is already existing {@link CompoundAssociation}.
-   */
-  protected final void setInModelNoCompound(JavaInfo javaInfo) throws Exception {
-    if (javaInfo.getAssociation() instanceof CompoundAssociation) {
-      setJavaInfo(javaInfo);
-    } else {
-      javaInfo.setAssociation(this);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * If {@link JavaInfo} has no {@link CompoundAssociation}, then set this {@link Association}.
+	 * <p>
+	 * When we add new {@link Association} using
+	 * {@link Association#add(JavaInfo, StatementTarget, String[])}, we may be first and only
+	 * {@link Association}, but may be there is already existing {@link CompoundAssociation}.
+	 */
+	protected final void setInModelNoCompound(JavaInfo javaInfo) throws Exception {
+		if (javaInfo.getAssociation() instanceof CompoundAssociation) {
+			setJavaInfo(javaInfo);
+		} else {
+			javaInfo.setAssociation(this);
+		}
+	}
 
-  /**
-   * This method can be used from {@link #remove()} to remove this {@link Association} from
-   * {@link JavaInfo#setAssociation(Association)} if this {@link Association} is "primary", i.e. if
-   * it is really used in our {@link JavaInfo}.
-   * <p>
-   * When {@link CompoundAssociation} is used, it is "primary", and its "sub-associations" are no
-   * "primary", so they can not clear association in {@link JavaInfo}. Only when
-   * {@link CompoundAssociation} becomes empty, we really clear association.
-   */
-  protected final void removeFromModelIfPrimary() throws Exception {
-    if (m_javaInfo.getAssociation() == this) {
-      m_javaInfo.setAssociation(null);
-    }
-  }
+	/**
+	 * This method can be used from {@link #remove()} to remove this {@link Association} from
+	 * {@link JavaInfo#setAssociation(Association)} if this {@link Association} is "primary", i.e. if
+	 * it is really used in our {@link JavaInfo}.
+	 * <p>
+	 * When {@link CompoundAssociation} is used, it is "primary", and its "sub-associations" are no
+	 * "primary", so they can not clear association in {@link JavaInfo}. Only when
+	 * {@link CompoundAssociation} becomes empty, we really clear association.
+	 */
+	protected final void removeFromModelIfPrimary() throws Exception {
+		if (m_javaInfo.getAssociation() == this) {
+			m_javaInfo.setAssociation(null);
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/AssociationObject.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/AssociationObject.java
index 022af7cdb..171077426 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/AssociationObject.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/AssociationObject.java
@@ -17,49 +17,49 @@
  * @coverage core.model.association
  */
 public final class AssociationObject {
-  private final Association m_association;
-  private final boolean m_required;
-  private final String m_title;
+	private final Association m_association;
+	private final boolean m_required;
+	private final String m_title;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AssociationObject(Association association, boolean required) {
-    this(null, association, required);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AssociationObject(Association association, boolean required) {
+		this(null, association, required);
+	}
 
-  public AssociationObject(String title, Association association, boolean required) {
-    m_association = association;
-    m_required = required;
-    m_title = title;
-  }
+	public AssociationObject(String title, Association association, boolean required) {
+		m_association = association;
+		m_required = required;
+		m_title = title;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    if (m_title != null) {
-      return m_title;
-    } else {
-      return m_association.toString();
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		if (m_title != null) {
+			return m_title;
+		} else {
+			return m_association.toString();
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public Association getAssociation() {
-    return m_association;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public Association getAssociation() {
+		return m_association;
+	}
 
-  public boolean isRequired() {
-    return m_required;
-  }
+	public boolean isRequired() {
+		return m_required;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/AssociationObjectFactories.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/AssociationObjectFactories.java
index 426405a2d..ec8ebbd37 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/AssociationObjectFactories.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/AssociationObjectFactories.java
@@ -17,31 +17,31 @@
  * @coverage core.model.association
  */
 public final class AssociationObjectFactories {
-  public static AssociationObjectFactory no() {
-    return new AssociationObjectFactory() {
-      @Override
-      public String toString() {
-        return "NO";
-      }
+	public static AssociationObjectFactory no() {
+		return new AssociationObjectFactory() {
+			@Override
+			public String toString() {
+				return "NO";
+			}
 
-      @Override
-      public AssociationObject create() {
-        return AssociationObjects.no();
-      }
-    };
-  }
+			@Override
+			public AssociationObject create() {
+				return AssociationObjects.no();
+			}
+		};
+	}
 
-  public static AssociationObjectFactory invocationChild(final String source, final boolean required) {
-    return new AssociationObjectFactory() {
-      @Override
-      public String toString() {
-        return source;
-      }
+	public static AssociationObjectFactory invocationChild(final String source, final boolean required) {
+		return new AssociationObjectFactory() {
+			@Override
+			public String toString() {
+				return source;
+			}
 
-      @Override
-      public AssociationObject create() {
-        return new AssociationObject(source, new InvocationChildAssociation(source), required);
-      }
-    };
-  }
+			@Override
+			public AssociationObject create() {
+				return new AssociationObject(source, new InvocationChildAssociation(source), required);
+			}
+		};
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/AssociationObjectFactory.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/AssociationObjectFactory.java
index c96255e83..84f38ae81 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/AssociationObjectFactory.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/AssociationObjectFactory.java
@@ -20,5 +20,5 @@
  * @coverage core.model.association
  */
 public interface AssociationObjectFactory {
-  AssociationObject create();
+	AssociationObject create();
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/AssociationObjects.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/AssociationObjects.java
index 26627c870..1aeb04128 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/AssociationObjects.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/AssociationObjects.java
@@ -19,37 +19,37 @@
  * @coverage core.model.association
  */
 public final class AssociationObjects {
-  public static AssociationObject no() {
-    return new AssociationObject("NO", null, false);
-  }
-
-  public static AssociationObject empty() {
-    return new AssociationObject("empty", new EmptyAssociation(), false);
-  }
-
-  public static AssociationObject nonVisual() {
-    return new AssociationObject("nonVisual", new NonVisualAssociation(), false);
-  }
-
-  public static AssociationObject constructorChild() {
-    return new AssociationObject("constructorChild", new ConstructorChildAssociation(), false);
-  }
-
-  public static AssociationObject factoryParent() {
-    return new AssociationObject("factoryParent", new FactoryParentAssociation(), false);
-  }
-
-  public static AssociationObject invocationVoid() {
-    return new AssociationObject("invocationVoid", new InvocationVoidAssociation(), false);
-  }
-
-  public static AssociationObject invocationChildNull() {
-    return new AssociationObject("invocationChildNull",
-        new InvocationChildAssociation((String) null),
-        false);
-  }
-
-  public static AssociationObject invocationChild(String source, boolean required) {
-    return new AssociationObject(source, new InvocationChildAssociation(source), required);
-  }
+	public static AssociationObject no() {
+		return new AssociationObject("NO", null, false);
+	}
+
+	public static AssociationObject empty() {
+		return new AssociationObject("empty", new EmptyAssociation(), false);
+	}
+
+	public static AssociationObject nonVisual() {
+		return new AssociationObject("nonVisual", new NonVisualAssociation(), false);
+	}
+
+	public static AssociationObject constructorChild() {
+		return new AssociationObject("constructorChild", new ConstructorChildAssociation(), false);
+	}
+
+	public static AssociationObject factoryParent() {
+		return new AssociationObject("factoryParent", new FactoryParentAssociation(), false);
+	}
+
+	public static AssociationObject invocationVoid() {
+		return new AssociationObject("invocationVoid", new InvocationVoidAssociation(), false);
+	}
+
+	public static AssociationObject invocationChildNull() {
+		return new AssociationObject("invocationChildNull",
+				new InvocationChildAssociation((String) null),
+				false);
+	}
+
+	public static AssociationObject invocationChild(String source, boolean required) {
+		return new AssociationObject(source, new InvocationChildAssociation(source), required);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/AssociationUtils.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/AssociationUtils.java
index ad600a8d7..149f63e46 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/AssociationUtils.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/AssociationUtils.java
@@ -35,106 +35,106 @@
  * @coverage core.model.association
  */
 public final class AssociationUtils {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private AssociationUtils() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private AssociationUtils() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets the new parent reference in {@link MethodInvocation} or {@link ClassInstanceCreation}
-   * arguments.
-   */
-  public static void updateParentAssociation(AbstractInvocationDescription description,
-      List<Expression> arguments,
-      JavaInfo newParent) throws Exception {
-    for (ParameterDescription parameter : description.getParameters()) {
-      if (parameter.isParent()) {
-        Expression argument = arguments.get(parameter.getIndex());
-        String replacement = TemplateUtils.getExpression(newParent);
-        newParent.replaceExpression(argument, replacement);
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets the new parent reference in {@link MethodInvocation} or {@link ClassInstanceCreation}
+	 * arguments.
+	 */
+	public static void updateParentAssociation(AbstractInvocationDescription description,
+			List<Expression> arguments,
+			JavaInfo newParent) throws Exception {
+		for (ParameterDescription parameter : description.getParameters()) {
+			if (parameter.isParent()) {
+				Expression argument = arguments.get(parameter.getIndex());
+				String replacement = TemplateUtils.getExpression(newParent);
+				newParent.replaceExpression(argument, replacement);
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Templates
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Returns the source with replaced templates. Following templates are supported:
-   *
-   * <ol>
-   * <li>%parent% - replaced with
-   * <code>parent.getVariableSupport().getReferenceExpression(target).</code></li>
-   * <li>%child% - replaced with
-   * <code>child.getVariableSupport().getReferenceExpression(target).</code></li>
-   * <li>%index% - replaced with next child number in parent.</li>
-   * </ol>
-   */
-  public static String replaceTemplates(JavaInfo child, String source, StatementTarget target)
-      throws Exception {
-    return replaceTemplates(child, source, new NodeTarget(target));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Templates
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Returns the source with replaced templates. Following templates are supported:
+	 *
+	 * <ol>
+	 * <li>%parent% - replaced with
+	 * <code>parent.getVariableSupport().getReferenceExpression(target).</code></li>
+	 * <li>%child% - replaced with
+	 * <code>child.getVariableSupport().getReferenceExpression(target).</code></li>
+	 * <li>%index% - replaced with next child number in parent.</li>
+	 * </ol>
+	 */
+	public static String replaceTemplates(JavaInfo child, String source, StatementTarget target)
+			throws Exception {
+		return replaceTemplates(child, source, new NodeTarget(target));
+	}
 
-  /**
-   * Returns the source with replaced templates. Following templates are supported:
-   *
-   * <ol>
-   * <li>%parent% - replaced with
-   * <code>parent.getVariableSupport().getReferenceExpression(target).</code></li>
-   * <li>%child% - replaced with
-   * <code>child.getVariableSupport().getReferenceExpression(target).</code></li>
-   * <li>%index% - replaced with next child number in parent.</li>
-   * </ol>
-   */
-  public static String replaceTemplates(JavaInfo child, String source, NodeTarget target)
-      throws Exception {
-    // send broadcast
-    {
-      String[] sourceArray = new String[]{source};
-      child.getBroadcastJava().associationTemplate(child, sourceArray);
-      source = sourceArray[0];
-    }
-    // replace parent expressions
-    {
-      if (source.contains("%parent%")) {
-        source =
-            StringUtils.replace(
-                source,
-                "%parent%",
-                TemplateUtils.getExpression(child.getParentJava()));
-      }
-    }
-    // replace child expressions
-    if (source.contains("%child%")) {
-      source = StringUtils.replace(source, "%child%", TemplateUtils.getExpression(child));
-    }
-    // replace index expressions
-    if (source.contains("%index%")) {
-      ObjectInfo parentInfo = child.getParent();
-      if (parentInfo != null) {
-        int index = parentInfo.getChildren(JavaInfo.class).size();
-        source = StringUtils.replace(source, "%index%", Integer.toString(index));
-      }
-    }
-    // replace other templates
-    Map<String, String> templateArguments = child.getTemplateArguments();
-    if (templateArguments != null) {
-      for (Entry<String, String> template : templateArguments.entrySet()) {
-        source = StringUtils.replace(source, "%" + template.getKey() + "%", template.getValue());
-      }
-    }
-    // OK, final result
-    source = TemplateUtils.resolve(target, source);
-    return source;
-  }
+	/**
+	 * Returns the source with replaced templates. Following templates are supported:
+	 *
+	 * <ol>
+	 * <li>%parent% - replaced with
+	 * <code>parent.getVariableSupport().getReferenceExpression(target).</code></li>
+	 * <li>%child% - replaced with
+	 * <code>child.getVariableSupport().getReferenceExpression(target).</code></li>
+	 * <li>%index% - replaced with next child number in parent.</li>
+	 * </ol>
+	 */
+	public static String replaceTemplates(JavaInfo child, String source, NodeTarget target)
+			throws Exception {
+		// send broadcast
+		{
+			String[] sourceArray = new String[]{source};
+			child.getBroadcastJava().associationTemplate(child, sourceArray);
+			source = sourceArray[0];
+		}
+		// replace parent expressions
+		{
+			if (source.contains("%parent%")) {
+				source =
+						StringUtils.replace(
+								source,
+								"%parent%",
+								TemplateUtils.getExpression(child.getParentJava()));
+			}
+		}
+		// replace child expressions
+		if (source.contains("%child%")) {
+			source = StringUtils.replace(source, "%child%", TemplateUtils.getExpression(child));
+		}
+		// replace index expressions
+		if (source.contains("%index%")) {
+			ObjectInfo parentInfo = child.getParent();
+			if (parentInfo != null) {
+				int index = parentInfo.getChildren(JavaInfo.class).size();
+				source = StringUtils.replace(source, "%index%", Integer.toString(index));
+			}
+		}
+		// replace other templates
+		Map<String, String> templateArguments = child.getTemplateArguments();
+		if (templateArguments != null) {
+			for (Entry<String, String> template : templateArguments.entrySet()) {
+				source = StringUtils.replace(source, "%" + template.getKey() + "%", template.getValue());
+			}
+		}
+		// OK, final result
+		source = TemplateUtils.resolve(target, source);
+		return source;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/CompoundAssociation.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/CompoundAssociation.java
index 02a5491ed..9936ee115 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/CompoundAssociation.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/CompoundAssociation.java
@@ -36,151 +36,151 @@
  * @coverage core.model.association
  */
 public final class CompoundAssociation extends Association {
-  private final List<Association> m_associations = Lists.newArrayList();
-  private final List<Association> m_newAssociations = Lists.newArrayList();
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CompoundAssociation(Association... associations) {
-    for (Association association : associations) {
-      Assert.isNotNull(association);
-      if (association instanceof CompoundAssociation) {
-        CompoundAssociation compoundAssociation = (CompoundAssociation) association;
-        m_associations.addAll(compoundAssociation.m_associations);
-      } else {
-        m_associations.add(association);
-      }
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Compound access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link Association} that form this {@link CompoundAssociation}.
-   */
-  public List<Association> getAssociations() {
-    return m_associations;
-  }
-
-  /**
-   * Adds new {@link Association}, to add when {@link #setParent(JavaInfo)} is used.
-   */
-  public void add(Association association) {
-    Assert.isNotNull(association);
-    m_newAssociations.add(association);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void setJavaInfo(JavaInfo javaInfo) throws Exception {
-    super.setJavaInfo(javaInfo);
-    // set JavaInfo for sub-associations
-    for (Association association : m_associations) {
-      // when CompoundAssociation is mutated from single Association, it may already have JavaInfo
-      if (association.getJavaInfo() != null) {
-        Assert.isTrue(association.getJavaInfo() == javaInfo);
-      } else {
-        association.setJavaInfo(javaInfo);
-      }
-    }
-  }
-
-  @Override
-  public boolean canDelete() {
-    for (Association association : m_associations) {
-      if (!association.canDelete()) {
-        return false;
-      }
-    }
-    return true;
-  }
-
-  @Override
-  public Statement getStatement() {
-    Assert.isTrue(!m_associations.isEmpty());
-    return m_associations.get(0).getStatement();
-  }
-
-  @Override
-  public String getSource() {
-    Assert.isTrue(!m_associations.isEmpty());
-    return m_associations.get(0).getSource();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void add(JavaInfo javaInfo, StatementTarget target, String[] leadingComments)
-      throws Exception {
-    // add individual associations
-    for (Association association : m_associations) {
-      association.add(javaInfo, target, leadingComments);
-      leadingComments = null;
-    }
-    // set association
-    setInModelNoCompound(javaInfo);
-  }
-
-  @Override
-  public boolean remove() throws Exception {
-    // exclude associations that are removed
-    for (Iterator<Association> I = m_associations.iterator(); I.hasNext();) {
-      Association association = I.next();
-      if (association.remove()) {
-        I.remove();
-      }
-    }
-    // compound is removed if all its children are removed
-    if (m_associations.isEmpty()) {
-      removeFromModelIfPrimary();
-      return true;
-    } else {
-      return false;
-    }
-  }
-
-  @Override
-  public void setParent(JavaInfo parent) throws Exception {
-    // update existing associations
-    for (Association association : m_associations) {
-      association.setParent(parent);
-    }
-    // add new associations
-    {
-      StatementTarget target = new StatementTarget(getStatement(), false);
-      for (Association association : m_newAssociations) {
-        association.add(m_javaInfo, target, null);
-        m_associations.add(association);
-      }
-      // new associations are accepted
-      m_newAssociations.clear();
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Morph
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Association getCopy() {
-    Association[] newAssociations = new Association[m_associations.size()];
-    for (int i = 0; i < m_associations.size(); ++i) {
-      newAssociations[i] = m_associations.get(i).getCopy();
-    }
-    return new CompoundAssociation(newAssociations);
-  }
+	private final List<Association> m_associations = Lists.newArrayList();
+	private final List<Association> m_newAssociations = Lists.newArrayList();
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CompoundAssociation(Association... associations) {
+		for (Association association : associations) {
+			Assert.isNotNull(association);
+			if (association instanceof CompoundAssociation) {
+				CompoundAssociation compoundAssociation = (CompoundAssociation) association;
+				m_associations.addAll(compoundAssociation.m_associations);
+			} else {
+				m_associations.add(association);
+			}
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Compound access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link Association} that form this {@link CompoundAssociation}.
+	 */
+	public List<Association> getAssociations() {
+		return m_associations;
+	}
+
+	/**
+	 * Adds new {@link Association}, to add when {@link #setParent(JavaInfo)} is used.
+	 */
+	public void add(Association association) {
+		Assert.isNotNull(association);
+		m_newAssociations.add(association);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void setJavaInfo(JavaInfo javaInfo) throws Exception {
+		super.setJavaInfo(javaInfo);
+		// set JavaInfo for sub-associations
+		for (Association association : m_associations) {
+			// when CompoundAssociation is mutated from single Association, it may already have JavaInfo
+			if (association.getJavaInfo() != null) {
+				Assert.isTrue(association.getJavaInfo() == javaInfo);
+			} else {
+				association.setJavaInfo(javaInfo);
+			}
+		}
+	}
+
+	@Override
+	public boolean canDelete() {
+		for (Association association : m_associations) {
+			if (!association.canDelete()) {
+				return false;
+			}
+		}
+		return true;
+	}
+
+	@Override
+	public Statement getStatement() {
+		Assert.isTrue(!m_associations.isEmpty());
+		return m_associations.get(0).getStatement();
+	}
+
+	@Override
+	public String getSource() {
+		Assert.isTrue(!m_associations.isEmpty());
+		return m_associations.get(0).getSource();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void add(JavaInfo javaInfo, StatementTarget target, String[] leadingComments)
+			throws Exception {
+		// add individual associations
+		for (Association association : m_associations) {
+			association.add(javaInfo, target, leadingComments);
+			leadingComments = null;
+		}
+		// set association
+		setInModelNoCompound(javaInfo);
+	}
+
+	@Override
+	public boolean remove() throws Exception {
+		// exclude associations that are removed
+		for (Iterator<Association> I = m_associations.iterator(); I.hasNext();) {
+			Association association = I.next();
+			if (association.remove()) {
+				I.remove();
+			}
+		}
+		// compound is removed if all its children are removed
+		if (m_associations.isEmpty()) {
+			removeFromModelIfPrimary();
+			return true;
+		} else {
+			return false;
+		}
+	}
+
+	@Override
+	public void setParent(JavaInfo parent) throws Exception {
+		// update existing associations
+		for (Association association : m_associations) {
+			association.setParent(parent);
+		}
+		// add new associations
+		{
+			StatementTarget target = new StatementTarget(getStatement(), false);
+			for (Association association : m_newAssociations) {
+				association.add(m_javaInfo, target, null);
+				m_associations.add(association);
+			}
+			// new associations are accepted
+			m_newAssociations.clear();
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Morph
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Association getCopy() {
+		Association[] newAssociations = new Association[m_associations.size()];
+		for (int i = 0; i < m_associations.size(); ++i) {
+			newAssociations[i] = m_associations.get(i).getCopy();
+		}
+		return new CompoundAssociation(newAssociations);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/ConstructorAssociation.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/ConstructorAssociation.java
index 83839997e..fe48644c2 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/ConstructorAssociation.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/ConstructorAssociation.java
@@ -22,31 +22,31 @@
  * @coverage core.model.association
  */
 public abstract class ConstructorAssociation extends Association {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  ConstructorAssociation() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	ConstructorAssociation() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the underlying {@link ClassInstanceCreation}.
-   */
-  public abstract ClassInstanceCreation getCreation();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the underlying {@link ClassInstanceCreation}.
+	 */
+	public abstract ClassInstanceCreation getCreation();
 
-  @Override
-  public final Statement getStatement() {
-    return AstNodeUtils.getEnclosingStatement(getCreation());
-  }
+	@Override
+	public final Statement getStatement() {
+		return AstNodeUtils.getEnclosingStatement(getCreation());
+	}
 
-  @Override
-  public final String getSource() {
-    return m_editor.getSource(getCreation());
-  }
+	@Override
+	public final String getSource() {
+		return m_editor.getSource(getCreation());
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/ConstructorChildAssociation.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/ConstructorChildAssociation.java
index 0ee70edfd..5c16a0c12 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/ConstructorChildAssociation.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/ConstructorChildAssociation.java
@@ -28,71 +28,71 @@
  * @coverage core.model.association
  */
 public final class ConstructorChildAssociation extends ConstructorAssociation {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public ClassInstanceCreation getCreation() {
-    return getConstructorCreationSupport().getCreation();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public ClassInstanceCreation getCreation() {
+		return getConstructorCreationSupport().getCreation();
+	}
 
-  /**
-   * @return the {@link ConstructorCreationSupport} for <em>parent</em> this {@link JavaInfo}.
-   */
-  private ConstructorCreationSupport getConstructorCreationSupport() {
-    return (ConstructorCreationSupport) m_javaInfo.getParentJava().getCreationSupport();
-  }
+	/**
+	 * @return the {@link ConstructorCreationSupport} for <em>parent</em> this {@link JavaInfo}.
+	 */
+	private ConstructorCreationSupport getConstructorCreationSupport() {
+		return (ConstructorCreationSupport) m_javaInfo.getParentJava().getCreationSupport();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean canDelete() {
-    // no need for check if we going to delete parent
-    if (m_javaInfo.getParentJava().isDeleting()) {
-      return true;
-    }
-    // prepare new binding - without this JavaInfo arguments
-    DesignerMethodBinding newBinding;
-    {
-      ConstructorCreationSupport creationSupport = getConstructorCreationSupport();
-      newBinding = m_editor.getBindingContext().get(creationSupport.getBinding());
-      List<Expression> arguments = DomGenerics.arguments(getCreation());
-      for (int i = arguments.size() - 1; i >= 0; i--) {
-        Expression argument = arguments.get(i);
-        if (m_javaInfo.isRepresentedBy(argument)) {
-          newBinding.removeParameterType(i);
-        }
-      }
-    }
-    // we can delete association only if there is alternative constructor, without child
-    return m_javaInfo.getParentJava().getDescription().getConstructor(newBinding) != null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean canDelete() {
+		// no need for check if we going to delete parent
+		if (m_javaInfo.getParentJava().isDeleting()) {
+			return true;
+		}
+		// prepare new binding - without this JavaInfo arguments
+		DesignerMethodBinding newBinding;
+		{
+			ConstructorCreationSupport creationSupport = getConstructorCreationSupport();
+			newBinding = m_editor.getBindingContext().get(creationSupport.getBinding());
+			List<Expression> arguments = DomGenerics.arguments(getCreation());
+			for (int i = arguments.size() - 1; i >= 0; i--) {
+				Expression argument = arguments.get(i);
+				if (m_javaInfo.isRepresentedBy(argument)) {
+					newBinding.removeParameterType(i);
+				}
+			}
+		}
+		// we can delete association only if there is alternative constructor, without child
+		return m_javaInfo.getParentJava().getDescription().getConstructor(newBinding) != null;
+	}
 
-  @Override
-  public boolean remove() throws Exception {
-    if (!m_javaInfo.getParentJava().isDeleting()) {
-      // update ClassInstanceCreation
-      ClassInstanceCreation creation;
-      {
-        ConstructorCreationSupport creationSupport = getConstructorCreationSupport();
-        creation = creationSupport.getCreation();
-        List<Expression> arguments = DomGenerics.arguments(creation);
-        for (int i = arguments.size() - 1; i >= 0; i--) {
-          Expression argument = arguments.get(i);
-          if (m_javaInfo.isRepresentedBy(argument)) {
-            m_javaInfo.getEditor().removeCreationArgument(creation, i);
-          }
-        }
-      }
-      // set new ConstructorCreationSupport for parent JavaInfo
-      m_javaInfo.getParentJava().setCreationSupport(new ConstructorCreationSupport(creation));
-    }
-    // remove association
-    return super.remove();
-  }
+	@Override
+	public boolean remove() throws Exception {
+		if (!m_javaInfo.getParentJava().isDeleting()) {
+			// update ClassInstanceCreation
+			ClassInstanceCreation creation;
+			{
+				ConstructorCreationSupport creationSupport = getConstructorCreationSupport();
+				creation = creationSupport.getCreation();
+				List<Expression> arguments = DomGenerics.arguments(creation);
+				for (int i = arguments.size() - 1; i >= 0; i--) {
+					Expression argument = arguments.get(i);
+					if (m_javaInfo.isRepresentedBy(argument)) {
+						m_javaInfo.getEditor().removeCreationArgument(creation, i);
+					}
+				}
+			}
+			// set new ConstructorCreationSupport for parent JavaInfo
+			m_javaInfo.getParentJava().setCreationSupport(new ConstructorCreationSupport(creation));
+		}
+		// remove association
+		return super.remove();
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/ConstructorParentAssociation.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/ConstructorParentAssociation.java
index 08ed85c9d..4694e1474 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/ConstructorParentAssociation.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/ConstructorParentAssociation.java
@@ -25,51 +25,51 @@
  * @coverage core.model.association
  */
 public final class ConstructorParentAssociation extends ConstructorAssociation {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public ClassInstanceCreation getCreation() {
-    return getConstructorCreationSupport().getCreation();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public ClassInstanceCreation getCreation() {
+		return getConstructorCreationSupport().getCreation();
+	}
 
-  /**
-   * @return the {@link ConstructorCreationSupport} for this {@link JavaInfo}.
-   */
-  private ConstructorCreationSupport getConstructorCreationSupport() {
-    return (ConstructorCreationSupport) m_javaInfo.getCreationSupport();
-  }
+	/**
+	 * @return the {@link ConstructorCreationSupport} for this {@link JavaInfo}.
+	 */
+	private ConstructorCreationSupport getConstructorCreationSupport() {
+		return (ConstructorCreationSupport) m_javaInfo.getCreationSupport();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void setParent(JavaInfo parent) throws Exception {
-    // prepare description
-    ConstructorDescription description = getConstructorCreationSupport().getDescription();
-    // update association
-    AssociationUtils.updateParentAssociation(
-        description,
-        DomGenerics.arguments(getCreation()),
-        parent);
-    // in general, replacement of constructor argument can cause binding (so constructor method) change,
-    // for example "new TreeItem(Tree,style)" -> "new TreeItem(TreeItem,style)",
-    // so replace binding to reflect such change
-    m_editor.replaceInvocationBinding(getCreation());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void setParent(JavaInfo parent) throws Exception {
+		// prepare description
+		ConstructorDescription description = getConstructorCreationSupport().getDescription();
+		// update association
+		AssociationUtils.updateParentAssociation(
+				description,
+				DomGenerics.arguments(getCreation()),
+				parent);
+		// in general, replacement of constructor argument can cause binding (so constructor method) change,
+		// for example "new TreeItem(Tree,style)" -> "new TreeItem(TreeItem,style)",
+		// so replace binding to reflect such change
+		m_editor.replaceInvocationBinding(getCreation());
+	}
 
-  @Override
-  public boolean remove() throws Exception {
-    // parent argument can not be removed from constructor, just do nothing
-    return false;
-  }
+	@Override
+	public boolean remove() throws Exception {
+		// parent argument can not be removed from constructor, just do nothing
+		return false;
+	}
 
-  @Override
-  public Association getCopy() {
-    return new ConstructorParentAssociation();
-  }
+	@Override
+	public Association getCopy() {
+		return new ConstructorParentAssociation();
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/EmptyAssociation.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/EmptyAssociation.java
index 621b3ff2a..4c3db1868 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/EmptyAssociation.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/EmptyAssociation.java
@@ -17,14 +17,14 @@
  * @coverage core.model.association
  */
 public final class EmptyAssociation extends Association {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean remove() throws Exception {
-    // no operation expected
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean remove() throws Exception {
+		// no operation expected
+		return false;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/FactoryParentAssociation.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/FactoryParentAssociation.java
index 06dc2aaad..5dc3d3878 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/FactoryParentAssociation.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/FactoryParentAssociation.java
@@ -30,64 +30,64 @@
  * @coverage core.model.association
  */
 public final class FactoryParentAssociation extends InvocationAssociation {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FactoryParentAssociation() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FactoryParentAssociation() {
+	}
 
-  public FactoryParentAssociation(MethodInvocation invocation) {
-    super(invocation);
-  }
+	public FactoryParentAssociation(MethodInvocation invocation) {
+		super(invocation);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void setJavaInfo(JavaInfo javaInfo) throws Exception {
-    super.setJavaInfo(javaInfo);
-    // get MethodInvocation from AbstractFactoryCreationSupport
-    {
-      AbstractFactoryCreationSupport creationSupport =
-          (AbstractFactoryCreationSupport) javaInfo.getCreationSupport();
-      m_invocation = creationSupport.getInvocation();
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void setJavaInfo(JavaInfo javaInfo) throws Exception {
+		super.setJavaInfo(javaInfo);
+		// get MethodInvocation from AbstractFactoryCreationSupport
+		{
+			AbstractFactoryCreationSupport creationSupport =
+					(AbstractFactoryCreationSupport) javaInfo.getCreationSupport();
+			m_invocation = creationSupport.getInvocation();
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void setParent(JavaInfo parent) throws Exception {
-    // prepare description
-    MethodDescription description;
-    {
-      AbstractFactoryCreationSupport creationSupport =
-          (AbstractFactoryCreationSupport) m_javaInfo.getCreationSupport();
-      description = creationSupport.getDescription();
-    }
-    // update association
-    AssociationUtils.updateParentAssociation(
-        description,
-        DomGenerics.arguments(m_invocation),
-        parent);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void setParent(JavaInfo parent) throws Exception {
+		// prepare description
+		MethodDescription description;
+		{
+			AbstractFactoryCreationSupport creationSupport =
+					(AbstractFactoryCreationSupport) m_javaInfo.getCreationSupport();
+			description = creationSupport.getDescription();
+		}
+		// update association
+		AssociationUtils.updateParentAssociation(
+				description,
+				DomGenerics.arguments(m_invocation),
+				parent);
+	}
 
-  @Override
-  public boolean remove() throws Exception {
-    // parent argument can not be removed from factory, just do nothing
-    return false;
-  }
+	@Override
+	public boolean remove() throws Exception {
+		// parent argument can not be removed from factory, just do nothing
+		return false;
+	}
 
-  @Override
-  public Association getCopy() {
-    // in MorphingSupport we use ConstructorCreationSupport
-    return new ConstructorParentAssociation();
-  }
+	@Override
+	public Association getCopy() {
+		// in MorphingSupport we use ConstructorCreationSupport
+		return new ConstructorParentAssociation();
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/ImplicitFactoryArgumentAssociation.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/ImplicitFactoryArgumentAssociation.java
index 71fce2c30..b1d55f211 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/ImplicitFactoryArgumentAssociation.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/ImplicitFactoryArgumentAssociation.java
@@ -30,71 +30,71 @@
  * @coverage core.model.association
  */
 public final class ImplicitFactoryArgumentAssociation extends InvocationAssociation {
-  private final JavaInfo m_factoryJavaInfo;
+	private final JavaInfo m_factoryJavaInfo;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @param factoryJavaInfo
-   *          the {@link JavaInfo} created by implicit factory, where this {@link JavaInfo} is
-   *          argument.
-   */
-  public ImplicitFactoryArgumentAssociation(MethodInvocation invocation, JavaInfo factoryJavaInfo) {
-    super(invocation);
-    m_factoryJavaInfo = factoryJavaInfo;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @param factoryJavaInfo
+	 *          the {@link JavaInfo} created by implicit factory, where this {@link JavaInfo} is
+	 *          argument.
+	 */
+	public ImplicitFactoryArgumentAssociation(MethodInvocation invocation, JavaInfo factoryJavaInfo) {
+		super(invocation);
+		m_factoryJavaInfo = factoryJavaInfo;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void setJavaInfo(final JavaInfo javaInfo) throws Exception {
-    super.setJavaInfo(javaInfo);
-    // argument of implicit factory can not be moved
-    javaInfo.addBroadcastListener(new JavaEventListener() {
-      @Override
-      public void canMove(JavaInfo _javaInfo, boolean[] forceMoveEnable, boolean[] forceMoveDisable)
-          throws Exception {
-        if (_javaInfo == javaInfo) {
-          forceMoveDisable[0] = true;
-        }
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void setJavaInfo(final JavaInfo javaInfo) throws Exception {
+		super.setJavaInfo(javaInfo);
+		// argument of implicit factory can not be moved
+		javaInfo.addBroadcastListener(new JavaEventListener() {
+			@Override
+			public void canMove(JavaInfo _javaInfo, boolean[] forceMoveEnable, boolean[] forceMoveDisable)
+					throws Exception {
+				if (_javaInfo == javaInfo) {
+					forceMoveDisable[0] = true;
+				}
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean remove() throws Exception {
-    // our JavaInfo is in delete/reparent process, so schedule delete m_factoryJavaInfo
-    m_factoryJavaInfo.getRootJava().addBroadcastListener(new ObjectInfoDelete() {
-      @Override
-      public void after(ObjectInfo parent, ObjectInfo child) throws Exception {
-        if (child == m_javaInfo) {
-          if (!m_factoryJavaInfo.isDeleting()) {
-            m_factoryJavaInfo.delete();
-          }
-        }
-      }
-    });
-    m_factoryJavaInfo.getRootJava().addBroadcastListener(new JavaEventListener() {
-      @Override
-      public void moveAfter(JavaInfo child, ObjectInfo oldParent, JavaInfo newParent)
-          throws Exception {
-        if (child == m_javaInfo) {
-          m_factoryJavaInfo.delete();
-        }
-      }
-    });
-    // continue with default implementation
-    return super.remove();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean remove() throws Exception {
+		// our JavaInfo is in delete/reparent process, so schedule delete m_factoryJavaInfo
+		m_factoryJavaInfo.getRootJava().addBroadcastListener(new ObjectInfoDelete() {
+			@Override
+			public void after(ObjectInfo parent, ObjectInfo child) throws Exception {
+				if (child == m_javaInfo) {
+					if (!m_factoryJavaInfo.isDeleting()) {
+						m_factoryJavaInfo.delete();
+					}
+				}
+			}
+		});
+		m_factoryJavaInfo.getRootJava().addBroadcastListener(new JavaEventListener() {
+			@Override
+			public void moveAfter(JavaInfo child, ObjectInfo oldParent, JavaInfo newParent)
+					throws Exception {
+				if (child == m_javaInfo) {
+					m_factoryJavaInfo.delete();
+				}
+			}
+		});
+		// continue with default implementation
+		return super.remove();
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/ImplicitObjectAssociation.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/ImplicitObjectAssociation.java
index 40cfbd7de..11498d8ac 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/ImplicitObjectAssociation.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/ImplicitObjectAssociation.java
@@ -28,37 +28,37 @@
  * @coverage core.model.association
  */
 public final class ImplicitObjectAssociation extends Association {
-  private final JavaInfo m_hostJavaInfo;
+	private final JavaInfo m_hostJavaInfo;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ImplicitObjectAssociation(JavaInfo hostJavaInfo) {
-    m_hostJavaInfo = hostJavaInfo;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ImplicitObjectAssociation(JavaInfo hostJavaInfo) {
+		m_hostJavaInfo = hostJavaInfo;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Statement getStatement() {
-    // implicit components are associated by the fact of creation, so use creation Statement
-    ASTNode creationNode = m_hostJavaInfo.getCreationSupport().getNode();
-    return AstNodeUtils.getEnclosingStatement(creationNode);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Statement getStatement() {
+		// implicit components are associated by the fact of creation, so use creation Statement
+		ASTNode creationNode = m_hostJavaInfo.getCreationSupport().getNode();
+		return AstNodeUtils.getEnclosingStatement(creationNode);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean remove() throws Exception {
-    // even after delete, implicit object stays associated with its parent
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean remove() throws Exception {
+		// even after delete, implicit object stays associated with its parent
+		return false;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/InvocationAssociation.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/InvocationAssociation.java
index a093bd058..8735db71a 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/InvocationAssociation.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/InvocationAssociation.java
@@ -23,39 +23,39 @@
  * @coverage core.model.association
  */
 public abstract class InvocationAssociation extends Association {
-  protected MethodInvocation m_invocation;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected InvocationAssociation() {
-  }
-
-  protected InvocationAssociation(MethodInvocation invocation) {
-    m_invocation = invocation;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the underlying {@link MethodInvocation}.
-   */
-  public final MethodInvocation getInvocation() {
-    return m_invocation;
-  }
-
-  @Override
-  public final Statement getStatement() {
-    return AstNodeUtils.getEnclosingStatement(m_invocation);
-  }
-
-  @Override
-  public final String getSource() {
-    return m_editor.getSource(m_invocation);
-  }
+	protected MethodInvocation m_invocation;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected InvocationAssociation() {
+	}
+
+	protected InvocationAssociation(MethodInvocation invocation) {
+		m_invocation = invocation;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the underlying {@link MethodInvocation}.
+	 */
+	public final MethodInvocation getInvocation() {
+		return m_invocation;
+	}
+
+	@Override
+	public final Statement getStatement() {
+		return AstNodeUtils.getEnclosingStatement(m_invocation);
+	}
+
+	@Override
+	public final String getSource() {
+		return m_editor.getSource(m_invocation);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/InvocationChildArrayAssociation.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/InvocationChildArrayAssociation.java
index 9314833d5..69b1d9b73 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/InvocationChildArrayAssociation.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/InvocationChildArrayAssociation.java
@@ -26,38 +26,38 @@
  * @coverage core.model.association
  */
 public final class InvocationChildArrayAssociation extends InvocationAssociation {
-  private final ArrayObjectInfo m_arrayInfo;
+	private final ArrayObjectInfo m_arrayInfo;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public InvocationChildArrayAssociation(MethodInvocation invocation, ArrayObjectInfo arrayInfo) {
-    super(invocation);
-    m_arrayInfo = arrayInfo;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public InvocationChildArrayAssociation(MethodInvocation invocation, ArrayObjectInfo arrayInfo) {
+		super(invocation);
+		m_arrayInfo = arrayInfo;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean remove() throws Exception {
-    int elementIndex = m_arrayInfo.getItems().indexOf(m_javaInfo);
-    Assert.isTrue(elementIndex >= 0);
-    ArrayInitializer initializer = m_arrayInfo.getCreation().getInitializer();
-    m_editor.removeArrayElement(initializer, elementIndex);
-    // check then empty
-    if (((List<?>) initializer.expressions()).isEmpty()) {
-      // if no items...
-      if (m_arrayInfo.isRemoveOnEmpty() && m_invocation.getParent() instanceof ExpressionStatement) {
-        // ... and single invocation then remove invocation
-        m_editor.removeEnclosingStatement(m_invocation);
-      }
-    }
-    // yes, association removed
-    return super.remove();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean remove() throws Exception {
+		int elementIndex = m_arrayInfo.getItems().indexOf(m_javaInfo);
+		Assert.isTrue(elementIndex >= 0);
+		ArrayInitializer initializer = m_arrayInfo.getCreation().getInitializer();
+		m_editor.removeArrayElement(initializer, elementIndex);
+		// check then empty
+		if (((List<?>) initializer.expressions()).isEmpty()) {
+			// if no items...
+			if (m_arrayInfo.isRemoveOnEmpty() && m_invocation.getParent() instanceof ExpressionStatement) {
+				// ... and single invocation then remove invocation
+				m_editor.removeEnclosingStatement(m_invocation);
+			}
+		}
+		// yes, association removed
+		return super.remove();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/InvocationChildAssociation.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/InvocationChildAssociation.java
index 3fb55d355..85509d2b1 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/InvocationChildAssociation.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/InvocationChildAssociation.java
@@ -52,196 +52,196 @@
  * @coverage core.model.association
  */
 public final class InvocationChildAssociation extends InvocationAssociation {
-  private String m_source;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public InvocationChildAssociation(String source) {
-    Assert.isTrue(
-        source == null || source.startsWith("%parent%."),
-        "Source should start with %%parent%%., but '%s' found.",
-        source);
-    m_source = source;
-  }
-
-  public InvocationChildAssociation(MethodInvocation invocation) {
-    super(invocation);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link MethodDescription} (from parent {@link JavaInfo}) used for this association.
-   */
-  public MethodDescription getDescription() {
-    String signature = AstNodeUtils.getMethodSignature(m_invocation);
-    return m_javaInfo.getParentJava().getDescription().getMethod(signature);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void add(JavaInfo javaInfo, StatementTarget target, String[] leadingComments)
-      throws Exception {
-    // initialize MethodInvocation instance
-    if (m_source != null) {
-      // add new statement
-      String source = AssociationUtils.replaceTemplates(javaInfo, m_source, target);
-      List<String> lines = GenericsUtils.asList(leadingComments, source + ";");
-      ExpressionStatement statement =
-          (ExpressionStatement) javaInfo.getEditor().addStatement(lines, target);
-      m_invocation = (MethodInvocation) statement.getExpression();
-    } else {
-      // we expect that JavaInfo has EmptyVariableSupport with argument in MethodInvocation
-      EmptyVariableSupport emptyVariableSupport =
-          (EmptyVariableSupport) javaInfo.getVariableSupport();
-      m_invocation = (MethodInvocation) emptyVariableSupport.getInitializer().getParent();
-    }
-    // add related nodes
-    AbstractInsideStatementGenerator.addRelatedNodes(javaInfo, m_invocation);
-    // set association
-    setInModelNoCompound(javaInfo);
-  }
-
-  @Override
-  public void move(StatementTarget target) throws Exception {
-    // may be move constraints (will move invocation too)
-    {
-      MethodDescription description = getDescription();
-      List<ParameterDescription> parameters = description.getParameters();
-      if (parameters.size() == 2
-          && parameters.get(0).isChild()
-          && parameters.get(0).isParent2()
-          && parameters.get(1).isChild2()) {
-        Expression constraintsExpression = DomGenerics.arguments(m_invocation).get(1);
-        JavaInfo constraints = m_javaInfo.getChildRepresentedBy(constraintsExpression);
-        if (constraints != null) {
-          constraints.getVariableSupport().ensureInstanceReadyAt(target);
-          return;
-        }
-      }
-    }
-    // no constraints, move single statement
-    {
-      Statement statement = getStatement();
-      m_editor.moveStatement(statement, target);
-    }
-  }
-
-  @Override
-  public boolean remove() throws Exception {
-    // ensure that "parent" is not created in Statement
-    {
-      ObjectInfo parent = m_javaInfo.getParent();
-      if (parent instanceof JavaInfo && !parent.isDeleting()) {
-        JavaInfoUtils.materializeVariable((JavaInfo) parent);
-      }
-    }
-    // remove Statement
-    m_editor.removeEnclosingStatement(m_invocation);
-    // continue
-    return super.remove();
-  }
-
-  @Override
-  public Association getCopy() {
-    return new InvocationChildAssociation(m_invocation);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Properties
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private String m_properties_oldSignature;
-  private ComplexProperty m_properties_oldProperty;
-
-  @Override
-  public void addProperties(List<Property> properties) throws Exception {
-    Property associationProperty = getAssociationProperty();
-    if (associationProperty != null) {
-      properties.add(associationProperty);
-    }
-  }
-
-  /**
-   * @return the new or existing "Association" {@link Property}, may be <code>null</code> if no
-   *         sub-properties.
-   */
-  private Property getAssociationProperty() throws Exception {
-    String signature = AstNodeUtils.getMethodSignature(m_invocation);
-    if (m_properties_oldSignature != null && m_properties_oldSignature.equals(signature)) {
-      // do nothing, use cached
-    } else {
-      List<Property> associationProperties = createAssociationSubProperties(signature);
-      if (!associationProperties.isEmpty()) {
-        m_properties_oldProperty = new ComplexProperty("Association", "(Association properties)");
-        m_properties_oldProperty.setCategory(PropertyCategory.system(4));
-        m_properties_oldProperty.setModified(true);
-        m_properties_oldProperty.setProperties(associationProperties);
-      } else {
-        m_properties_oldProperty = null;
-      }
-    }
-    // return cached
-    m_properties_oldSignature = signature;
-    return m_properties_oldProperty;
-  }
-
-  /**
-   * @return the new {@link Property}'s to edit arguments in association {@link MethodInvocation}.
-   */
-  private List<Property> createAssociationSubProperties(String signature) throws Exception {
-    // prepare description for association method
-    MethodDescription description;
-    {
-      ComponentDescription parentDescription = m_javaInfo.getParentJava().getDescription();
-      description = parentDescription.getMethod(signature);
-      ComponentDescriptionHelper.ensureInitialized(m_javaProject, description);
-    }
-    // add properties
-    List<Property> associationProperties = Lists.newArrayList();
-    for (ParameterDescription parameter : description.getParameters()) {
-      if (!parameter.isChild()) {
-        Property property = createAssociationSubProperty(parameter);
-        if (property != null) {
-          associationProperties.add(property);
-        }
-      }
-    }
-    return associationProperties;
-  }
-
-  /**
-   * @return the new {@link Property} to edit expression of given {@link ParameterDescription} in
-   *         association {@link MethodInvocation}.
-   */
-  private Property createAssociationSubProperty(ParameterDescription parameter) throws Exception {
-    int index = parameter.getIndex();
-    String name = parameter.getName();
-    String defaultSource = parameter.getDefaultSource();
-    // prepare Property elements
-    ExpressionAccessor accessor = new InvocationChildAssociationAccessor(index, defaultSource);
-    ExpressionConverter converter = parameter.getConverter();
-    PropertyEditor editor = parameter.getEditor();
-    if (editor == null) {
-      return null;
-    }
-    // create generic Property
-    return new GenericPropertyImpl(m_javaInfo,
-        name,
-        new ExpressionAccessor[]{accessor},
-        defaultSource,
-        converter,
-        editor);
-  }
+	private String m_source;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public InvocationChildAssociation(String source) {
+		Assert.isTrue(
+				source == null || source.startsWith("%parent%."),
+				"Source should start with %%parent%%., but '%s' found.",
+				source);
+		m_source = source;
+	}
+
+	public InvocationChildAssociation(MethodInvocation invocation) {
+		super(invocation);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link MethodDescription} (from parent {@link JavaInfo}) used for this association.
+	 */
+	public MethodDescription getDescription() {
+		String signature = AstNodeUtils.getMethodSignature(m_invocation);
+		return m_javaInfo.getParentJava().getDescription().getMethod(signature);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void add(JavaInfo javaInfo, StatementTarget target, String[] leadingComments)
+			throws Exception {
+		// initialize MethodInvocation instance
+		if (m_source != null) {
+			// add new statement
+			String source = AssociationUtils.replaceTemplates(javaInfo, m_source, target);
+			List<String> lines = GenericsUtils.asList(leadingComments, source + ";");
+			ExpressionStatement statement =
+					(ExpressionStatement) javaInfo.getEditor().addStatement(lines, target);
+			m_invocation = (MethodInvocation) statement.getExpression();
+		} else {
+			// we expect that JavaInfo has EmptyVariableSupport with argument in MethodInvocation
+			EmptyVariableSupport emptyVariableSupport =
+					(EmptyVariableSupport) javaInfo.getVariableSupport();
+			m_invocation = (MethodInvocation) emptyVariableSupport.getInitializer().getParent();
+		}
+		// add related nodes
+		AbstractInsideStatementGenerator.addRelatedNodes(javaInfo, m_invocation);
+		// set association
+		setInModelNoCompound(javaInfo);
+	}
+
+	@Override
+	public void move(StatementTarget target) throws Exception {
+		// may be move constraints (will move invocation too)
+		{
+			MethodDescription description = getDescription();
+			List<ParameterDescription> parameters = description.getParameters();
+			if (parameters.size() == 2
+					&& parameters.get(0).isChild()
+					&& parameters.get(0).isParent2()
+					&& parameters.get(1).isChild2()) {
+				Expression constraintsExpression = DomGenerics.arguments(m_invocation).get(1);
+				JavaInfo constraints = m_javaInfo.getChildRepresentedBy(constraintsExpression);
+				if (constraints != null) {
+					constraints.getVariableSupport().ensureInstanceReadyAt(target);
+					return;
+				}
+			}
+		}
+		// no constraints, move single statement
+		{
+			Statement statement = getStatement();
+			m_editor.moveStatement(statement, target);
+		}
+	}
+
+	@Override
+	public boolean remove() throws Exception {
+		// ensure that "parent" is not created in Statement
+		{
+			ObjectInfo parent = m_javaInfo.getParent();
+			if (parent instanceof JavaInfo && !parent.isDeleting()) {
+				JavaInfoUtils.materializeVariable((JavaInfo) parent);
+			}
+		}
+		// remove Statement
+		m_editor.removeEnclosingStatement(m_invocation);
+		// continue
+		return super.remove();
+	}
+
+	@Override
+	public Association getCopy() {
+		return new InvocationChildAssociation(m_invocation);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Properties
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private String m_properties_oldSignature;
+	private ComplexProperty m_properties_oldProperty;
+
+	@Override
+	public void addProperties(List<Property> properties) throws Exception {
+		Property associationProperty = getAssociationProperty();
+		if (associationProperty != null) {
+			properties.add(associationProperty);
+		}
+	}
+
+	/**
+	 * @return the new or existing "Association" {@link Property}, may be <code>null</code> if no
+	 *         sub-properties.
+	 */
+	private Property getAssociationProperty() throws Exception {
+		String signature = AstNodeUtils.getMethodSignature(m_invocation);
+		if (m_properties_oldSignature != null && m_properties_oldSignature.equals(signature)) {
+			// do nothing, use cached
+		} else {
+			List<Property> associationProperties = createAssociationSubProperties(signature);
+			if (!associationProperties.isEmpty()) {
+				m_properties_oldProperty = new ComplexProperty("Association", "(Association properties)");
+				m_properties_oldProperty.setCategory(PropertyCategory.system(4));
+				m_properties_oldProperty.setModified(true);
+				m_properties_oldProperty.setProperties(associationProperties);
+			} else {
+				m_properties_oldProperty = null;
+			}
+		}
+		// return cached
+		m_properties_oldSignature = signature;
+		return m_properties_oldProperty;
+	}
+
+	/**
+	 * @return the new {@link Property}'s to edit arguments in association {@link MethodInvocation}.
+	 */
+	private List<Property> createAssociationSubProperties(String signature) throws Exception {
+		// prepare description for association method
+		MethodDescription description;
+		{
+			ComponentDescription parentDescription = m_javaInfo.getParentJava().getDescription();
+			description = parentDescription.getMethod(signature);
+			ComponentDescriptionHelper.ensureInitialized(m_javaProject, description);
+		}
+		// add properties
+		List<Property> associationProperties = Lists.newArrayList();
+		for (ParameterDescription parameter : description.getParameters()) {
+			if (!parameter.isChild()) {
+				Property property = createAssociationSubProperty(parameter);
+				if (property != null) {
+					associationProperties.add(property);
+				}
+			}
+		}
+		return associationProperties;
+	}
+
+	/**
+	 * @return the new {@link Property} to edit expression of given {@link ParameterDescription} in
+	 *         association {@link MethodInvocation}.
+	 */
+	private Property createAssociationSubProperty(ParameterDescription parameter) throws Exception {
+		int index = parameter.getIndex();
+		String name = parameter.getName();
+		String defaultSource = parameter.getDefaultSource();
+		// prepare Property elements
+		ExpressionAccessor accessor = new InvocationChildAssociationAccessor(index, defaultSource);
+		ExpressionConverter converter = parameter.getConverter();
+		PropertyEditor editor = parameter.getEditor();
+		if (editor == null) {
+			return null;
+		}
+		// create generic Property
+		return new GenericPropertyImpl(m_javaInfo,
+				name,
+				new ExpressionAccessor[]{accessor},
+				defaultSource,
+				converter,
+				editor);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/InvocationChildEllipsisAssociation.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/InvocationChildEllipsisAssociation.java
index daba35934..7e14c59f5 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/InvocationChildEllipsisAssociation.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/InvocationChildEllipsisAssociation.java
@@ -23,44 +23,44 @@
  * @coverage core.model.association
  */
 public final class InvocationChildEllipsisAssociation extends InvocationAssociation {
-  private final EllipsisObjectInfo m_ellipsisInfo;
+	private final EllipsisObjectInfo m_ellipsisInfo;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public InvocationChildEllipsisAssociation(MethodInvocation invocation,
-      EllipsisObjectInfo ellipsisInfo) {
-    super(invocation);
-    m_ellipsisInfo = ellipsisInfo;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public InvocationChildEllipsisAssociation(MethodInvocation invocation,
+			EllipsisObjectInfo ellipsisInfo) {
+		super(invocation);
+		m_ellipsisInfo = ellipsisInfo;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean remove() throws Exception {
-    int elementIndex = m_ellipsisInfo.getItems().indexOf(m_javaInfo);
-    Assert.isTrue(elementIndex >= 0);
-    int parameterIndex = m_ellipsisInfo.getParameterIndex();
-    m_editor.removeInvocationArgument(m_invocation, parameterIndex + elementIndex);
-    // check then empty
-    if (m_invocation.arguments().size() <= parameterIndex) {
-      // if no items...
-      if (m_ellipsisInfo.isRemoveOnEmpty()
-          && m_invocation.getParent() instanceof ExpressionStatement) {
-        // ... and single invocation then remove invocation
-        m_editor.removeEnclosingStatement(m_invocation);
-      } else if (parameterIndex == 0) {
-        // ... and no more arguments
-        m_editor.replaceExpression(m_invocation, m_ellipsisInfo.getOnEmptySource());
-        m_ellipsisInfo.setInvocation(null);
-      }
-    }
-    // yes, association removed
-    return super.remove();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean remove() throws Exception {
+		int elementIndex = m_ellipsisInfo.getItems().indexOf(m_javaInfo);
+		Assert.isTrue(elementIndex >= 0);
+		int parameterIndex = m_ellipsisInfo.getParameterIndex();
+		m_editor.removeInvocationArgument(m_invocation, parameterIndex + elementIndex);
+		// check then empty
+		if (m_invocation.arguments().size() <= parameterIndex) {
+			// if no items...
+			if (m_ellipsisInfo.isRemoveOnEmpty()
+					&& m_invocation.getParent() instanceof ExpressionStatement) {
+				// ... and single invocation then remove invocation
+				m_editor.removeEnclosingStatement(m_invocation);
+			} else if (parameterIndex == 0) {
+				// ... and no more arguments
+				m_editor.replaceExpression(m_invocation, m_ellipsisInfo.getOnEmptySource());
+				m_ellipsisInfo.setInvocation(null);
+			}
+		}
+		// yes, association removed
+		return super.remove();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/InvocationSecondaryAssociation.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/InvocationSecondaryAssociation.java
index 1be9c7d2c..909531ad0 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/InvocationSecondaryAssociation.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/InvocationSecondaryAssociation.java
@@ -34,82 +34,82 @@
  * @coverage core.model.association
  */
 public final class InvocationSecondaryAssociation extends InvocationAssociation {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public InvocationSecondaryAssociation(MethodInvocation invocation) {
-    super(invocation);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public InvocationSecondaryAssociation(MethodInvocation invocation) {
+		super(invocation);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean canDelete() {
-    // check for forced delete
-    if (hasForcedDeleteTag()) {
-      return true;
-    }
-    // prepare binding for existing invocation
-    IMethodBinding binding = AstNodeUtils.getMethodBinding(m_invocation);
-    // prepare new binding - without this JavaInfo arguments
-    DesignerMethodBinding newBinding;
-    {
-      newBinding = m_editor.getBindingContext().get(binding);
-      List<Expression> arguments = DomGenerics.arguments(m_invocation);
-      for (int i = arguments.size() - 1; i >= 0; i--) {
-        Expression argument = arguments.get(i);
-        if (m_javaInfo.isRepresentedBy(argument)) {
-          newBinding.removeParameterType(i);
-        }
-      }
-    }
-    // we can delete association only if there is alternative method, without child
-    return AstNodeUtils.getMethodBySignature(
-        binding.getDeclaringClass(),
-        AstNodeUtils.getMethodSignature(newBinding)) != null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean canDelete() {
+		// check for forced delete
+		if (hasForcedDeleteTag()) {
+			return true;
+		}
+		// prepare binding for existing invocation
+		IMethodBinding binding = AstNodeUtils.getMethodBinding(m_invocation);
+		// prepare new binding - without this JavaInfo arguments
+		DesignerMethodBinding newBinding;
+		{
+			newBinding = m_editor.getBindingContext().get(binding);
+			List<Expression> arguments = DomGenerics.arguments(m_invocation);
+			for (int i = arguments.size() - 1; i >= 0; i--) {
+				Expression argument = arguments.get(i);
+				if (m_javaInfo.isRepresentedBy(argument)) {
+					newBinding.removeParameterType(i);
+				}
+			}
+		}
+		// we can delete association only if there is alternative method, without child
+		return AstNodeUtils.getMethodBySignature(
+				binding.getDeclaringClass(),
+				AstNodeUtils.getMethodSignature(newBinding)) != null;
+	}
 
-  @Override
-  public boolean remove() throws Exception {
-    if (!AstNodeUtils.isDanglingNode(m_invocation)) {
-      while (true) {
-        // forced delete
-        if (hasForcedDeleteTag()) {
-          break;
-        }
-        // update MethodInvocation
-        List<Expression> arguments = DomGenerics.arguments(m_invocation);
-        for (int i = arguments.size() - 1; i >= 0; i--) {
-          Expression argument = arguments.get(i);
-          if (m_javaInfo.isRepresentedBy(argument)) {
-            m_javaInfo.getEditor().removeInvocationArgument(m_invocation, i);
-          }
-        }
-        // leave loop
-        break;
-      }
-    }
-    // remove association
-    return super.remove();
-  }
+	@Override
+	public boolean remove() throws Exception {
+		if (!AstNodeUtils.isDanglingNode(m_invocation)) {
+			while (true) {
+				// forced delete
+				if (hasForcedDeleteTag()) {
+					break;
+				}
+				// update MethodInvocation
+				List<Expression> arguments = DomGenerics.arguments(m_invocation);
+				for (int i = arguments.size() - 1; i >= 0; i--) {
+					Expression argument = arguments.get(i);
+					if (m_javaInfo.isRepresentedBy(argument)) {
+						m_javaInfo.getEditor().removeInvocationArgument(m_invocation, i);
+					}
+				}
+				// leave loop
+				break;
+			}
+		}
+		// remove association
+		return super.remove();
+	}
 
-  /**
-   * @return <code>true</code> if association {@link MethodInvocation} has tag
-   *         <code>"secondaryAssociation.alwaysDelete"</code>, that allows association delete.
-   */
-  private boolean hasForcedDeleteTag() {
-    JavaInfo hostJavaInfo =
-        m_javaInfo.getRootJava().getChildRepresentedBy(m_invocation.getExpression());
-    if (hostJavaInfo != null) {
-      String signature = AstNodeUtils.getMethodSignature(m_invocation);
-      MethodDescription methodDescription = hostJavaInfo.getDescription().getMethod(signature);
-      return methodDescription.hasTrueTag("secondaryAssociation.alwaysDelete");
-    }
-    return false;
-  }
+	/**
+	 * @return <code>true</code> if association {@link MethodInvocation} has tag
+	 *         <code>"secondaryAssociation.alwaysDelete"</code>, that allows association delete.
+	 */
+	private boolean hasForcedDeleteTag() {
+		JavaInfo hostJavaInfo =
+				m_javaInfo.getRootJava().getChildRepresentedBy(m_invocation.getExpression());
+		if (hostJavaInfo != null) {
+			String signature = AstNodeUtils.getMethodSignature(m_invocation);
+			MethodDescription methodDescription = hostJavaInfo.getDescription().getMethod(signature);
+			return methodDescription.hasTrueTag("secondaryAssociation.alwaysDelete");
+		}
+		return false;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/InvocationVoidAssociation.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/InvocationVoidAssociation.java
index 1a36e1ffc..a81ca4c33 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/InvocationVoidAssociation.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/InvocationVoidAssociation.java
@@ -37,57 +37,57 @@
  * @coverage core.model.association
  */
 public final class InvocationVoidAssociation extends InvocationAssociation {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public InvocationVoidAssociation() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public InvocationVoidAssociation() {
+	}
 
-  public InvocationVoidAssociation(MethodInvocation invocation) {
-    super(invocation);
-  }
+	public InvocationVoidAssociation(MethodInvocation invocation) {
+		super(invocation);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void setJavaInfo(JavaInfo javaInfo) throws Exception {
-    super.setJavaInfo(javaInfo);
-    // get MethodInvocation from CreationSupport
-    CreationSupport creationSupport = m_javaInfo.getCreationSupport();
-    m_invocation = (MethodInvocation) creationSupport.getNode();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void setJavaInfo(JavaInfo javaInfo) throws Exception {
+		super.setJavaInfo(javaInfo);
+		// get MethodInvocation from CreationSupport
+		CreationSupport creationSupport = m_javaInfo.getCreationSupport();
+		m_invocation = (MethodInvocation) creationSupport.getNode();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void move(StatementTarget target) throws Exception {
-    if (m_javaInfo.getVariableSupport() instanceof LazyVariableSupport) {
-      moveLazy(target);
-    } else {
-      super.move(target);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void move(StatementTarget target) throws Exception {
+		if (m_javaInfo.getVariableSupport() instanceof LazyVariableSupport) {
+			moveLazy(target);
+		} else {
+			super.move(target);
+		}
+	}
 
-  private void moveLazy(StatementTarget target) throws Exception {
-    // prepare invocation of getX() lazy accessor, probably in parent
-    ASTNode invocationInParent;
-    {
-      LazyVariableSupport lazy = (LazyVariableSupport) m_javaInfo.getVariableSupport();
-      ExecutionFlowDescription flow = JavaInfoUtils.getState(m_javaInfo).getFlowDescription();
-      List<ASTNode> invocations = ExecutionFlowUtils.getInvocations(flow, lazy.m_accessor);
-      Assert.isTrue2(!invocations.isEmpty(), "No invocation for {0}", lazy.m_accessor);
-      invocationInParent = invocations.get(0);
-    }
-    // move its Statement into target
-    Statement invocationStatement = AstNodeUtils.getEnclosingStatement(invocationInParent);
-    m_editor.moveStatement(invocationStatement, target);
-  }
+	private void moveLazy(StatementTarget target) throws Exception {
+		// prepare invocation of getX() lazy accessor, probably in parent
+		ASTNode invocationInParent;
+		{
+			LazyVariableSupport lazy = (LazyVariableSupport) m_javaInfo.getVariableSupport();
+			ExecutionFlowDescription flow = JavaInfoUtils.getState(m_javaInfo).getFlowDescription();
+			List<ASTNode> invocations = ExecutionFlowUtils.getInvocations(flow, lazy.m_accessor);
+			Assert.isTrue2(!invocations.isEmpty(), "No invocation for {0}", lazy.m_accessor);
+			invocationInParent = invocations.get(0);
+		}
+		// move its Statement into target
+		Statement invocationStatement = AstNodeUtils.getEnclosingStatement(invocationInParent);
+		m_editor.moveStatement(invocationStatement, target);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/RootAssociation.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/RootAssociation.java
index 0c9ba9b58..e74881970 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/RootAssociation.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/RootAssociation.java
@@ -17,8 +17,8 @@
  * @coverage core.model.association
  */
 public final class RootAssociation extends Association {
-  @Override
-  public boolean remove() throws Exception {
-    return false;
-  }
+	@Override
+	public boolean remove() throws Exception {
+		return false;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/SuperConstructorArgumentAssociation.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/SuperConstructorArgumentAssociation.java
index 70a229c1b..af2fcf309 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/SuperConstructorArgumentAssociation.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/SuperConstructorArgumentAssociation.java
@@ -31,34 +31,34 @@
  * @coverage core.model.association
  */
 public final class SuperConstructorArgumentAssociation extends Association {
-  private final SuperConstructorInvocation m_invocation;
+	private final SuperConstructorInvocation m_invocation;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SuperConstructorArgumentAssociation(SuperConstructorInvocation invocation) {
-    m_invocation = invocation;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SuperConstructorArgumentAssociation(SuperConstructorInvocation invocation) {
+		m_invocation = invocation;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Statement getStatement() {
-    return m_invocation;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Statement getStatement() {
+		return m_invocation;
+	}
 
-  @Override
-  public String getSource() {
-    return m_editor.getSource(m_invocation);
-  }
+	@Override
+	public String getSource() {
+		return m_editor.getSource(m_invocation);
+	}
 
-  @Override
-  public boolean canDelete() {
-    return false;
-  }
+	@Override
+	public boolean canDelete() {
+		return false;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/UnknownAssociation.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/UnknownAssociation.java
index 388543005..5683cd276 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/UnknownAssociation.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/UnknownAssociation.java
@@ -19,13 +19,13 @@
  * @coverage core.model.association
  */
 public final class UnknownAssociation extends Association {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean canDelete() {
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean canDelete() {
+		return false;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/WrappedObjectAssociation.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/WrappedObjectAssociation.java
index 6400def99..7a71fcb19 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/WrappedObjectAssociation.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/association/WrappedObjectAssociation.java
@@ -24,45 +24,45 @@
  * @coverage core.model.association
  */
 public class WrappedObjectAssociation extends Association {
-  private final AbstractWrapper m_wrapper;
+	private final AbstractWrapper m_wrapper;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public WrappedObjectAssociation(AbstractWrapper wrapper) {
-    m_wrapper = wrapper;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public WrappedObjectAssociation(AbstractWrapper wrapper) {
+		m_wrapper = wrapper;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Statement getStatement() {
-    return m_wrapper.getWrapperInfo().getAssociation().getStatement();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Statement getStatement() {
+		return m_wrapper.getWrapperInfo().getAssociation().getStatement();
+	}
 
-  @Override
-  public String getSource() {
-    return m_wrapper.getWrapperInfo().getAssociation().getSource();
-  }
+	@Override
+	public String getSource() {
+		return m_wrapper.getWrapperInfo().getAssociation().getSource();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean remove() throws Exception {
-    // Control association with Viewer can not be broken
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean remove() throws Exception {
+		// Control association with Viewer can not be broken
+		return false;
+	}
 
-  @Override
-  public void setParent(JavaInfo parent) throws Exception {
-    m_wrapper.getWrapperInfo().getAssociation().setParent(parent);
-  }
+	@Override
+	public void setParent(JavaInfo parent) throws Exception {
+		m_wrapper.getWrapperInfo().getAssociation().setParent(parent);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/broadcast/EvaluationEventListener.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/broadcast/EvaluationEventListener.java
index eac97025b..9351fa6b0 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/broadcast/EvaluationEventListener.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/broadcast/EvaluationEventListener.java
@@ -24,31 +24,31 @@
  * @coverage core.model
  */
 public abstract class EvaluationEventListener {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Visiting
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * When parser {@link ASTVisitor} leaves given {@link ASTNode} frame.
-   */
-  public void leaveFrame(ASTNode node) throws Exception {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Visiting
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * When parser {@link ASTVisitor} leaves given {@link ASTNode} frame.
+	 */
+	public void leaveFrame(ASTNode node) throws Exception {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Evaluation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Given {@link ASTNode} is going to be evaluated.
-   */
-  public void evaluateBefore(EvaluationContext context, ASTNode node) throws Exception {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Evaluation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Given {@link ASTNode} is going to be evaluated.
+	 */
+	public void evaluateBefore(EvaluationContext context, ASTNode node) throws Exception {
+	}
 
-  /**
-   * Given {@link ASTNode} was just evaluated, so underlying toolkit objects may be changed.
-   */
-  public void evaluateAfter(EvaluationContext context, ASTNode node) throws Exception {
-  }
+	/**
+	 * Given {@link ASTNode} was just evaluated, so underlying toolkit objects may be changed.
+	 */
+	public void evaluateAfter(EvaluationContext context, ASTNode node) throws Exception {
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/broadcast/ExecutionFlowEnterFrame.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/broadcast/ExecutionFlowEnterFrame.java
index 8a4a96318..a0812e6e3 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/broadcast/ExecutionFlowEnterFrame.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/broadcast/ExecutionFlowEnterFrame.java
@@ -23,5 +23,5 @@
  * @coverage core.model
  */
 public interface ExecutionFlowEnterFrame {
-  void invoke(ASTNode node) throws Exception;
+	void invoke(ASTNode node) throws Exception;
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/broadcast/GenericPropertyGetValue.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/broadcast/GenericPropertyGetValue.java
index 9943ef58e..a289bbbc1 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/broadcast/GenericPropertyGetValue.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/broadcast/GenericPropertyGetValue.java
@@ -25,17 +25,17 @@
  * @coverage core.model
  */
 public interface GenericPropertyGetValue {
-  /**
-   * Subscribers can use this method to unconditionally return the property value. This is
-   * applicable for cases when property should unconditionally return certain value without using
-   * any expression evaluating related to this property. For example, the property may return value
-   * of another property.
-   *
-   * @param property
-   *          the {@link GenericPropertyImpl} that sends this event.
-   * @param value
-   *          the single element array to return property value. Initially it has <code>null</code>
-   *          value.
-   */
-  void invoke(GenericPropertyImpl property, Object[] value) throws Exception;
+	/**
+	 * Subscribers can use this method to unconditionally return the property value. This is
+	 * applicable for cases when property should unconditionally return certain value without using
+	 * any expression evaluating related to this property. For example, the property may return value
+	 * of another property.
+	 *
+	 * @param property
+	 *          the {@link GenericPropertyImpl} that sends this event.
+	 * @param value
+	 *          the single element array to return property value. Initially it has <code>null</code>
+	 *          value.
+	 */
+	void invoke(GenericPropertyImpl property, Object[] value) throws Exception;
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/broadcast/GenericPropertyGetValueEx.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/broadcast/GenericPropertyGetValueEx.java
index 633e8fa39..9f118449c 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/broadcast/GenericPropertyGetValueEx.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/broadcast/GenericPropertyGetValueEx.java
@@ -26,17 +26,17 @@
  * @coverage core.model
  */
 public interface GenericPropertyGetValueEx {
-  /**
-   * Subscribers can use this method to provide {@link Expression} value during
-   * {@link GenericPropertyImpl#getValue()}. This is useful for case when we did not evaluate this
-   * {@link Expression} using normal execution flow.
-   *
-   * @param property
-   *          the {@link GenericPropertyImpl} that sends this event.
-   * @param expression
-   *          the {@link Expression} to be evaluated.
-   * @param value
-   *          the single element array with value. Initially it has default (evaluated) value.
-   */
-  void invoke(GenericPropertyImpl property, Expression expression, Object[] value) throws Exception;
+	/**
+	 * Subscribers can use this method to provide {@link Expression} value during
+	 * {@link GenericPropertyImpl#getValue()}. This is useful for case when we did not evaluate this
+	 * {@link Expression} using normal execution flow.
+	 *
+	 * @param property
+	 *          the {@link GenericPropertyImpl} that sends this event.
+	 * @param expression
+	 *          the {@link Expression} to be evaluated.
+	 * @param value
+	 *          the single element array with value. Initially it has default (evaluated) value.
+	 */
+	void invoke(GenericPropertyImpl property, Expression expression, Object[] value) throws Exception;
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/broadcast/GenericPropertySetValue.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/broadcast/GenericPropertySetValue.java
index e25bee49b..a62193244 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/broadcast/GenericPropertySetValue.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/broadcast/GenericPropertySetValue.java
@@ -23,16 +23,16 @@
  * @coverage core.model
  */
 public interface GenericPropertySetValue {
-  /**
-   * @param property
-   *          the {@link GenericPropertyImpl} that sends this event.
-   * @param value
-   *          the single element array with new value.
-   * @param shouldSetValue
-   *          the single element array that specifies if value can be set, subscriber may set it to
-   *          <code>false</code> if it did required modification itself, or thinks that value of
-   *          this property should not be modified at all.
-   */
-  void invoke(GenericPropertyImpl property, Object[] value, boolean[] shouldSetValue)
-      throws Exception;
+	/**
+	 * @param property
+	 *          the {@link GenericPropertyImpl} that sends this event.
+	 * @param value
+	 *          the single element array with new value.
+	 * @param shouldSetValue
+	 *          the single element array that specifies if value can be set, subscriber may set it to
+	 *          <code>false</code> if it did required modification itself, or thinks that value of
+	 *          this property should not be modified at all.
+	 */
+	void invoke(GenericPropertyImpl property, Object[] value, boolean[] shouldSetValue)
+			throws Exception;
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/broadcast/JavaEventListener.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/broadcast/JavaEventListener.java
index eccef2b10..b080e6096 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/broadcast/JavaEventListener.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/broadcast/JavaEventListener.java
@@ -35,269 +35,269 @@
  * @coverage core.model
  */
 public abstract class JavaEventListener {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Life cycle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Parsing was complete, but may be not all components already bound with parents.<br>
-   * This is good place to perform any special parent/child associations.
-   *
-   * @param components
-   *          all components, bound and not bound, that were created during parsing.
-   */
-  public void bindComponents(List<JavaInfo> components) throws Exception {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Life cycle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Parsing was complete, but may be not all components already bound with parents.<br>
+	 * This is good place to perform any special parent/child associations.
+	 *
+	 * @param components
+	 *          all components, bound and not bound, that were created during parsing.
+	 */
+	public void bindComponents(List<JavaInfo> components) throws Exception {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Association
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * When given <code>component</code> is adding, this listener can process source code, for example
-   * replace template elements such as <code>%parent%</code>, <code>%child%</code>, etc.
-   *
-   * @param component
-   *          the {@link JavaInfo} that is adding now, it already has parent.
-   * @param source
-   *          the array with single element, listener can change it.
-   */
-  public void associationTemplate(JavaInfo component, String[] source) throws Exception {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Association
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * When given <code>component</code> is adding, this listener can process source code, for example
+	 * replace template elements such as <code>%parent%</code>, <code>%child%</code>, etc.
+	 *
+	 * @param component
+	 *          the {@link JavaInfo} that is adding now, it already has parent.
+	 * @param source
+	 *          the array with single element, listener can change it.
+	 */
+	public void associationTemplate(JavaInfo component, String[] source) throws Exception {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Target
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * When we check that {@link Statement} is may be terminal, i.e. all children should be placed
-   * before it, so no other {@link Statement}'s on execution flow should be checked.
-   *
-   * @param parent
-   *          the {@link JavaInfo} to which new child will be added. Note, that in
-   *          {@link JavaInfoUtils} we check also related {@link Statement}'s of existing
-   *          <code>parent</code> children. But here <code>parent</code> is exactly "parent", not
-   *          any of its children. This allows us reduce number of requests.
-   * @param child
-   *          the new child {@link JavaInfo}.
-   * @param statement
-   *          the {@link Statement} to check for being related.
-   * @param terminal
-   *          the array with single boolean flag, with initial <code>false</code> value, any can
-   *          listener set it to <code>true</code>.
-   */
-  public void target_isTerminalStatement(JavaInfo parent,
-      JavaInfo child,
-      Statement statement,
-      boolean[] terminal) {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Target
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * When we check that {@link Statement} is may be terminal, i.e. all children should be placed
+	 * before it, so no other {@link Statement}'s on execution flow should be checked.
+	 *
+	 * @param parent
+	 *          the {@link JavaInfo} to which new child will be added. Note, that in
+	 *          {@link JavaInfoUtils} we check also related {@link Statement}'s of existing
+	 *          <code>parent</code> children. But here <code>parent</code> is exactly "parent", not
+	 *          any of its children. This allows us reduce number of requests.
+	 * @param child
+	 *          the new child {@link JavaInfo}.
+	 * @param statement
+	 *          the {@link Statement} to check for being related.
+	 * @param terminal
+	 *          the array with single boolean flag, with initial <code>false</code> value, any can
+	 *          listener set it to <code>true</code>.
+	 */
+	public void target_isTerminalStatement(JavaInfo parent,
+			JavaInfo child,
+			Statement statement,
+			boolean[] terminal) {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Add
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Before {@link JavaInfo} added to its parent.
-   */
-  public void addBefore(JavaInfo parent, JavaInfo child) throws Exception {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Add
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Before {@link JavaInfo} added to its parent.
+	 */
+	public void addBefore(JavaInfo parent, JavaInfo child) throws Exception {
+	}
 
-  /**
-   * After {@link JavaInfo} added to its parent.
-   */
-  public void addAfter(JavaInfo parent, JavaInfo child) throws Exception {
-  }
+	/**
+	 * After {@link JavaInfo} added to its parent.
+	 */
+	public void addAfter(JavaInfo parent, JavaInfo child) throws Exception {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Move
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Notifies that component is going to be moved to different parent.<br>
-   * This method is same as {@link #moveBefore(JavaInfo, ObjectInfo, JavaInfo)}, but invoked just
-   * before it.
-   */
-  public void moveBefore0(JavaInfo child, ObjectInfo oldParent, JavaInfo newParent)
-      throws Exception {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Move
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Notifies that component is going to be moved to different parent.<br>
+	 * This method is same as {@link #moveBefore(JavaInfo, ObjectInfo, JavaInfo)}, but invoked just
+	 * before it.
+	 */
+	public void moveBefore0(JavaInfo child, ObjectInfo oldParent, JavaInfo newParent)
+			throws Exception {
+	}
 
-  /**
-   * Notifies that component is going to be moved to different parent.
-   *
-   * @param child
-   *          that component to move.
-   * @param oldParent
-   *          the old container of component.
-   * @param newParent
-   *          new new container of component (may be same as old).
-   */
-  public void moveBefore(JavaInfo child, ObjectInfo oldParent, JavaInfo newParent) throws Exception {
-  }
+	/**
+	 * Notifies that component is going to be moved to different parent.
+	 *
+	 * @param child
+	 *          that component to move.
+	 * @param oldParent
+	 *          the old container of component.
+	 * @param newParent
+	 *          new new container of component (may be same as old).
+	 */
+	public void moveBefore(JavaInfo child, ObjectInfo oldParent, JavaInfo newParent) throws Exception {
+	}
 
-  /**
-   * Notifies that component was moved to different parent.
-   *
-   * @param child
-   *          that component to move.
-   * @param oldParent
-   *          the old container of component.
-   * @param newParent
-   *          new new container of component (may be same as old).
-   */
-  public void moveAfter(JavaInfo child, ObjectInfo oldParent, JavaInfo newParent) throws Exception {
-  }
+	/**
+	 * Notifies that component was moved to different parent.
+	 *
+	 * @param child
+	 *          that component to move.
+	 * @param oldParent
+	 *          the old container of component.
+	 * @param newParent
+	 *          new new container of component (may be same as old).
+	 */
+	public void moveAfter(JavaInfo child, ObjectInfo oldParent, JavaInfo newParent) throws Exception {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Child replace
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Replaces given <code>oldChild</code> with <code>newChild</code>.
-   */
-  public void replaceChildBefore(JavaInfo parent, JavaInfo oldChild, JavaInfo newChild)
-      throws Exception {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Child replace
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Replaces given <code>oldChild</code> with <code>newChild</code>.
+	 */
+	public void replaceChildBefore(JavaInfo parent, JavaInfo oldChild, JavaInfo newChild)
+			throws Exception {
+	}
 
-  /**
-   * Replaces given <code>oldChild</code> with <code>newChild</code>.
-   */
-  public void replaceChildAfter(JavaInfo parent, JavaInfo oldChild, JavaInfo newChild)
-      throws Exception {
-  }
+	/**
+	 * Replaces given <code>oldChild</code> with <code>newChild</code>.
+	 */
+	public void replaceChildAfter(JavaInfo parent, JavaInfo oldChild, JavaInfo newChild)
+			throws Exception {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Properties
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Subscribers can use this method to update/validate expression during
-   * {@link GenericPropertyImpl#setExpression(String, Object)}.
-   *
-   * @param property
-   *          the {@link GenericPropertyImpl} that sends this event.
-   * @param source
-   *          the single element array with new expression.
-   * @param value
-   *          the single element array with new value.
-   * @param shouldSet
-   *          the single element array that specifies if expression can be set, subscriber may set
-   *          it to <code>false</code> if it did required modification itself, or thinks that value
-   *          of this property should not be modified at all.
-   */
-  public void setPropertyExpression(GenericPropertyImpl property,
-      String[] source,
-      Object[] value,
-      boolean[] shouldSet) throws Exception {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Properties
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Subscribers can use this method to update/validate expression during
+	 * {@link GenericPropertyImpl#setExpression(String, Object)}.
+	 *
+	 * @param property
+	 *          the {@link GenericPropertyImpl} that sends this event.
+	 * @param source
+	 *          the single element array with new expression.
+	 * @param value
+	 *          the single element array with new value.
+	 * @param shouldSet
+	 *          the single element array that specifies if expression can be set, subscriber may set
+	 *          it to <code>false</code> if it did required modification itself, or thinks that value
+	 *          of this property should not be modified at all.
+	 */
+	public void setPropertyExpression(GenericPropertyImpl property,
+			String[] source,
+			Object[] value,
+			boolean[] shouldSet) throws Exception {
+	}
 
-  /**
-   * Notifies that {@link GenericProperty} was changed its value.
-   *
-   * @param property
-   *          the {@link GenericPropertyImpl} that sends this event.
-   */
-  public void propertyValueWasSet(GenericPropertyImpl property) throws Exception {
-  }
+	/**
+	 * Notifies that {@link GenericProperty} was changed its value.
+	 *
+	 * @param property
+	 *          the {@link GenericPropertyImpl} that sends this event.
+	 */
+	public void propertyValueWasSet(GenericPropertyImpl property) throws Exception {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Variable
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Notifies that name of variable in {@link AbstractNamedVariableSupport} was changed to new.
-   *
-   * @param variableSupport
-   *          the {@link AbstractNamedVariableSupport} that was changed the name.
-   */
-  public void variable_setName(AbstractNamedVariableSupport variableSupport,
-      String oldName,
-      String newName) throws Exception {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Variable
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Notifies that name of variable in {@link AbstractNamedVariableSupport} was changed to new.
+	 *
+	 * @param variableSupport
+	 *          the {@link AbstractNamedVariableSupport} that was changed the name.
+	 */
+	public void variable_setName(AbstractNamedVariableSupport variableSupport,
+			String oldName,
+			String newName) throws Exception {
+	}
 
-  /**
-   * Notifies that some <code>parent</code> {@link JavaInfo} is collecting now {@link Statement}'s
-   * to move, and going to include {@link Statement}'s of given children.
-   * <p>
-   * This notification is often used in SWT, for example in <code>TabFolder</code> components should
-   * be created with <code>TabFolder</code> as parent, but in {@link Block} of <code>TabItem</code>,
-   * and should be moved then with <code>TabItem</code>.
-   */
-  public void variable_addStatementsToMove(JavaInfo parent, List<JavaInfo> children)
-      throws Exception {
-  }
+	/**
+	 * Notifies that some <code>parent</code> {@link JavaInfo} is collecting now {@link Statement}'s
+	 * to move, and going to include {@link Statement}'s of given children.
+	 * <p>
+	 * This notification is often used in SWT, for example in <code>TabFolder</code> components should
+	 * be created with <code>TabFolder</code> as parent, but in {@link Block} of <code>TabItem</code>,
+	 * and should be moved then with <code>TabItem</code>.
+	 */
+	public void variable_addStatementsToMove(JavaInfo parent, List<JavaInfo> children)
+			throws Exception {
+	}
 
-  /**
-   * Notifies that {@link EmptyVariableSupport} is going to materialize its {@link JavaInfo} with
-   * some "real" {@link VariableSupport}.
-   */
-  public void variable_emptyMaterializeBefore(EmptyVariableSupport variableSupport)
-      throws Exception {
-  }
+	/**
+	 * Notifies that {@link EmptyVariableSupport} is going to materialize its {@link JavaInfo} with
+	 * some "real" {@link VariableSupport}.
+	 */
+	public void variable_emptyMaterializeBefore(EmptyVariableSupport variableSupport)
+			throws Exception {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Clipboard
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Gives subscribers possibility to participate in copy to clipboard process. For example
-   * container can add command for installing layout, layout can commands for creating children,
-   * etc.
-   *
-   * @param javaInfo
-   *          the {@link JavaInfo} that is in process of copying.
-   * @param commands
-   *          the {@link List} of {@link ClipboardCommand}'s to add new commands.
-   */
-  public void clipboardCopy(JavaInfo javaInfo, List<ClipboardCommand> commands) throws Exception {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Clipboard
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Gives subscribers possibility to participate in copy to clipboard process. For example
+	 * container can add command for installing layout, layout can commands for creating children,
+	 * etc.
+	 *
+	 * @param javaInfo
+	 *          the {@link JavaInfo} that is in process of copying.
+	 * @param commands
+	 *          the {@link List} of {@link ClipboardCommand}'s to add new commands.
+	 */
+	public void clipboardCopy(JavaInfo javaInfo, List<ClipboardCommand> commands) throws Exception {
+	}
 
-  /**
-   * Notifies that {@link CreationSupport} needs source for given argument.
-   *
-   * @param javaInfo
-   *          the {@link JavaInfo} that is in process of copying.
-   * @param parameter
-   *          the {@link ParameterDescription} for parameter, can be used to access its index, tags,
-   *          etc.
-   * @param argument
-   *          the {@link Expression} to get source.
-   * @param source
-   *          the single element array for parameter source, initially <code>null</code>.
-   */
-  public void clipboardCopy_Argument(JavaInfo javaInfo,
-      ParameterDescription parameter,
-      Expression argument,
-      String[] source) throws Exception {
-  }
+	/**
+	 * Notifies that {@link CreationSupport} needs source for given argument.
+	 *
+	 * @param javaInfo
+	 *          the {@link JavaInfo} that is in process of copying.
+	 * @param parameter
+	 *          the {@link ParameterDescription} for parameter, can be used to access its index, tags,
+	 *          etc.
+	 * @param argument
+	 *          the {@link Expression} to get source.
+	 * @param source
+	 *          the single element array for parameter source, initially <code>null</code>.
+	 */
+	public void clipboardCopy_Argument(JavaInfo javaInfo,
+			ParameterDescription parameter,
+			Expression argument,
+			String[] source) throws Exception {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Permissions
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Asks subscribers if given {@link JavaInfo} can be moved in some way (may be just change bounds,
-   * may be even reorder, but not reparent).
-   *
-   * @param javaInfo
-   *          the {@link JavaInfo} to check.
-   * @param forceMoveEnable
-   *          the single element array that specifies if {@link JavaInfo} can be moved,
-   *          <code>false</code> initially, any subscriber may update.
-   * @param forceMoveDisable
-   *          the single element array that specifies if {@link JavaInfo} can not be moved,
-   *          <code>false</code> initially, any subscriber may update.
-   */
-  public void canMove(JavaInfo javaInfo, boolean[] forceMoveEnable, boolean[] forceMoveDisable)
-      throws Exception {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Permissions
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Asks subscribers if given {@link JavaInfo} can be moved in some way (may be just change bounds,
+	 * may be even reorder, but not reparent).
+	 *
+	 * @param javaInfo
+	 *          the {@link JavaInfo} to check.
+	 * @param forceMoveEnable
+	 *          the single element array that specifies if {@link JavaInfo} can be moved,
+	 *          <code>false</code> initially, any subscriber may update.
+	 * @param forceMoveDisable
+	 *          the single element array that specifies if {@link JavaInfo} can not be moved,
+	 *          <code>false</code> initially, any subscriber may update.
+	 */
+	public void canMove(JavaInfo javaInfo, boolean[] forceMoveEnable, boolean[] forceMoveDisable)
+			throws Exception {
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/broadcast/JavaInfoAddProperties.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/broadcast/JavaInfoAddProperties.java
index 582e983bb..387776fa2 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/broadcast/JavaInfoAddProperties.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/broadcast/JavaInfoAddProperties.java
@@ -24,8 +24,8 @@
  * @coverage core.model
  */
 public interface JavaInfoAddProperties {
-  /**
-   * During preparing {@link Property} list for {@link JavaInfo}.
-   */
-  void invoke(JavaInfo javaInfo, List<Property> properties) throws Exception;
+	/**
+	 * During preparing {@link Property} list for {@link JavaInfo}.
+	 */
+	void invoke(JavaInfo javaInfo, List<Property> properties) throws Exception;
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/broadcast/JavaInfoChildBeforeAssociation.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/broadcast/JavaInfoChildBeforeAssociation.java
index 0173a25ae..d01485b7a 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/broadcast/JavaInfoChildBeforeAssociation.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/broadcast/JavaInfoChildBeforeAssociation.java
@@ -22,32 +22,32 @@
  * @coverage core.model
  */
 public class JavaInfoChildBeforeAssociation extends JavaEventListener {
-  private final JavaInfo m_javaInfo;
+	private final JavaInfo m_javaInfo;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public JavaInfoChildBeforeAssociation(JavaInfo javaInfo) {
-    m_javaInfo = javaInfo;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public JavaInfoChildBeforeAssociation(JavaInfo javaInfo) {
+		m_javaInfo = javaInfo;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Target
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Ensures that all children are added before association {@link Statement}.
-   */
-  @Override
-  public void target_isTerminalStatement(JavaInfo parent,
-      JavaInfo child,
-      Statement statement,
-      boolean[] terminal) {
-    if (parent == m_javaInfo && statement == m_javaInfo.getAssociation().getStatement()) {
-      terminal[0] = true;
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Target
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Ensures that all children are added before association {@link Statement}.
+	 */
+	@Override
+	public void target_isTerminalStatement(JavaInfo parent,
+			JavaInfo child,
+			Statement statement,
+			boolean[] terminal) {
+		if (parent == m_javaInfo && statement == m_javaInfo.getAssociation().getStatement()) {
+			terminal[0] = true;
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/broadcast/JavaInfoEventListeners.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/broadcast/JavaInfoEventListeners.java
index f63ad0d2e..a3514a09e 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/broadcast/JavaInfoEventListeners.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/broadcast/JavaInfoEventListeners.java
@@ -22,5 +22,5 @@
  * @coverage core.model
  */
 public interface JavaInfoEventListeners {
-  void invoke(JavaInfo javaInfo, List<AbstractListenerProperty> properties) throws Exception;
+	void invoke(JavaInfo javaInfo, List<AbstractListenerProperty> properties) throws Exception;
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/broadcast/JavaInfoEventOpen.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/broadcast/JavaInfoEventOpen.java
index 6a83436a8..3d71780b1 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/broadcast/JavaInfoEventOpen.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/broadcast/JavaInfoEventOpen.java
@@ -19,5 +19,5 @@
  * @coverage core.model
  */
 public interface JavaInfoEventOpen {
-  void invoke(JavaInfo javaInfo, String spec) throws Exception;
+	void invoke(JavaInfo javaInfo, String spec) throws Exception;
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/broadcast/JavaInfoMethodAssociationOnParse.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/broadcast/JavaInfoMethodAssociationOnParse.java
index 30c34000b..bd67ad85a 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/broadcast/JavaInfoMethodAssociationOnParse.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/broadcast/JavaInfoMethodAssociationOnParse.java
@@ -22,6 +22,6 @@
  * @coverage core.model
  */
 public interface JavaInfoMethodAssociationOnParse {
-  void invoke(JavaInfo parent, JavaInfo child, MethodDescription methodDescription)
-      throws Exception;
+	void invoke(JavaInfo parent, JavaInfo child, MethodDescription methodDescription)
+			throws Exception;
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/broadcast/JavaInfoSetAssociationBefore.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/broadcast/JavaInfoSetAssociationBefore.java
index 38a4f490d..5e02b7295 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/broadcast/JavaInfoSetAssociationBefore.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/broadcast/JavaInfoSetAssociationBefore.java
@@ -20,5 +20,5 @@
  * @coverage core.model
  */
 public interface JavaInfoSetAssociationBefore {
-  void invoke(JavaInfo javaInfo, Association association) throws Exception;
+	void invoke(JavaInfo javaInfo, Association association) throws Exception;
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/broadcast/JavaInfoSetObjectAfter.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/broadcast/JavaInfoSetObjectAfter.java
index cdf6d97df..f2de36975 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/broadcast/JavaInfoSetObjectAfter.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/broadcast/JavaInfoSetObjectAfter.java
@@ -22,8 +22,8 @@
  * @coverage core.model
  */
 public interface JavaInfoSetObjectAfter {
-  /**
-   * After object of {@link JavaInfo} set using {@link JavaInfo#setObject(Object)}.
-   */
-  void invoke(JavaInfo target, Object o) throws Exception;
+	/**
+	 * After object of {@link JavaInfo} set using {@link JavaInfo#setObject(Object)}.
+	 */
+	void invoke(JavaInfo target, Object o) throws Exception;
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/broadcast/JavaInfoSetVariable.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/broadcast/JavaInfoSetVariable.java
index 330dc199a..dfebc7fad 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/broadcast/JavaInfoSetVariable.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/broadcast/JavaInfoSetVariable.java
@@ -20,6 +20,6 @@
  * @coverage core.model
  */
 public interface JavaInfoSetVariable {
-  void invoke(JavaInfo javaInfo, VariableSupport oldVariable, VariableSupport newVariable)
-      throws Exception;
+	void invoke(JavaInfo javaInfo, VariableSupport oldVariable, VariableSupport newVariable)
+			throws Exception;
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/broadcast/JavaInfoTreeAlmostComplete.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/broadcast/JavaInfoTreeAlmostComplete.java
index 1da61ef02..6182ae2ae 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/broadcast/JavaInfoTreeAlmostComplete.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/broadcast/JavaInfoTreeAlmostComplete.java
@@ -21,13 +21,13 @@
  * @coverage core.model
  */
 public interface JavaInfoTreeAlmostComplete {
-  /**
-   * Last step before building tree {@link JavaInfo} complete.
-   *
-   * @param root
-   *          the {@link JavaInfo} that is root of build component hierarchy.
-   * @param components
-   *          all components, bound and not bound, that were created during parsing.
-   */
-  void invoke(JavaInfo root, List<JavaInfo> components) throws Exception;
+	/**
+	 * Last step before building tree {@link JavaInfo} complete.
+	 *
+	 * @param root
+	 *          the {@link JavaInfo} that is root of build component hierarchy.
+	 * @param components
+	 *          all components, bound and not bound, that were created during parsing.
+	 */
+	void invoke(JavaInfo root, List<JavaInfo> components) throws Exception;
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/broadcast/JavaInfosetObjectBefore.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/broadcast/JavaInfosetObjectBefore.java
index 2fedd7d74..014820abc 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/broadcast/JavaInfosetObjectBefore.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/model/broadcast/JavaInfosetObjectBefore.java
@@ -22,8 +22,8 @@
  * @coverage core.model
  */
 public interface JavaInfosetObjectBefore {
-  /**
-   * Invoked before object of {@link JavaInfo} becomes set using {@link JavaInfo#setObject(Object)}.
-   */
-  void invoke(JavaInfo target, Object[] objectRef) throws Exception;
+	/**
+	 * Invoked before object of {@link JavaInfo} becomes set using {@link JavaInfo#setObject(Object)}.
+	 */
+	void invoke(JavaInfo target, Object[] objectRef) throws Exception;
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/CoreToolkitDescription.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/CoreToolkitDescription.java
index 047ccf450..6f1504bc7 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/CoreToolkitDescription.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/CoreToolkitDescription.java
@@ -42,107 +42,107 @@
  * @coverage code
  */
 public final class CoreToolkitDescription extends ToolkitDescriptionJava {
-  public static final ToolkitDescription INSTANCE = new CoreToolkitDescription();
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance fields
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final IPreferenceStore store = DesignerPlugin.getDefault().getPreferenceStore();
-  private final GenerationSettings settings = new GenerationSettings(store);
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Initialization
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private boolean m_initialized;
+	public static final ToolkitDescription INSTANCE = new CoreToolkitDescription();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance fields
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final IPreferenceStore store = DesignerPlugin.getDefault().getPreferenceStore();
+	private final GenerationSettings settings = new GenerationSettings(store);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Initialization
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private boolean m_initialized;
 
-  void initialize() {
-    if (!m_initialized) {
-      m_initialized = true;
-      configureGenerators();
-      configureCodeGeneration();
-      configureTypeSpecific();
-    }
-  }
+	void initialize() {
+		if (!m_initialized) {
+			m_initialized = true;
+			configureGenerators();
+			configureCodeGeneration();
+			configureTypeSpecific();
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getId() {
-    return IPreferenceConstants.TOOLKIT_ID;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getId() {
+		return IPreferenceConstants.TOOLKIT_ID;
+	}
 
-  @Override
-  public String getName() {
-    return "Core Java toolkit";
-  }
+	@Override
+	public String getName() {
+		return "Core Java toolkit";
+	}
 
-  @Override
-  public String getProductName() {
-    return BrandingUtils.getBranding().getProductName();
-  }
+	@Override
+	public String getProductName() {
+		return BrandingUtils.getBranding().getProductName();
+	}
 
-  @Override
-  public Bundle getBundle() {
-    return DesignerPlugin.getDefault().getBundle();
-  }
+	@Override
+	public Bundle getBundle() {
+		return DesignerPlugin.getDefault().getBundle();
+	}
 
-  @Override
-  public IPreferenceStore getPreferences() {
-    return store;
-  }
+	@Override
+	public IPreferenceStore getPreferences() {
+		return store;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public GenerationSettings getGenerationSettings() {
-    return settings;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public GenerationSettings getGenerationSettings() {
+		return settings;
+	}
 
-  private void configureGenerators() {
-    StatementGeneratorDescription[] usualStatements =
-        new StatementGeneratorDescription[]{
-            FlatStatementGeneratorDescription.INSTANCE,
-            BlockStatementGeneratorDescription.INSTANCE};
-    // local unique
-    settings.addGenerators(
-        LocalUniqueVariableDescription.INSTANCE,
-        usualStatements,
-        new GenerationPreview[]{
-            GenerationPreviewLocalUniqueFlat.INSTANCE,
-            GenerationPreviewLocalUniqueBlock.INSTANCE});
-    // field unique
-    settings.addGenerators(
-        FieldUniqueVariableDescription.INSTANCE,
-        usualStatements,
-        new GenerationPreview[]{GenerationPreviewFieldUniqueFlat.INSTANCE, null});
-    // field with initializer
-    settings.addGenerators(
-        FieldInitializerVariableDescription.INSTANCE,
-        usualStatements,
-        new GenerationPreview[]{
-            GenerationPreviewFieldInitializerFlat.INSTANCE,
-            GenerationPreviewFieldInitializerBlock.INSTANCE});
-    // lazy
-    settings.addGenerators(
-        LazyVariableDescription.INSTANCE,
-        new StatementGeneratorDescription[]{LazyStatementGeneratorDescription.INSTANCE},
-        new GenerationPreview[]{GenerationPreviewLazy.INSTANCE});
-  }
+	private void configureGenerators() {
+		StatementGeneratorDescription[] usualStatements =
+				new StatementGeneratorDescription[]{
+						FlatStatementGeneratorDescription.INSTANCE,
+						BlockStatementGeneratorDescription.INSTANCE};
+		// local unique
+		settings.addGenerators(
+				LocalUniqueVariableDescription.INSTANCE,
+				usualStatements,
+				new GenerationPreview[]{
+						GenerationPreviewLocalUniqueFlat.INSTANCE,
+						GenerationPreviewLocalUniqueBlock.INSTANCE});
+		// field unique
+		settings.addGenerators(
+				FieldUniqueVariableDescription.INSTANCE,
+				usualStatements,
+				new GenerationPreview[]{GenerationPreviewFieldUniqueFlat.INSTANCE, null});
+		// field with initializer
+		settings.addGenerators(
+				FieldInitializerVariableDescription.INSTANCE,
+				usualStatements,
+				new GenerationPreview[]{
+						GenerationPreviewFieldInitializerFlat.INSTANCE,
+						GenerationPreviewFieldInitializerBlock.INSTANCE});
+		// lazy
+		settings.addGenerators(
+				LazyVariableDescription.INSTANCE,
+				new StatementGeneratorDescription[]{LazyStatementGeneratorDescription.INSTANCE},
+				new GenerationPreview[]{GenerationPreviewLazy.INSTANCE});
+	}
 
-  private void configureCodeGeneration() {
-    settings.setDefaultDeduceSettings(true);
-    settings.setDefaultVariable(FieldInitializerVariableDescription.INSTANCE);
-    settings.setDefaultStatement(BlockStatementGeneratorDescription.INSTANCE);
-  }
+	private void configureCodeGeneration() {
+		settings.setDefaultDeduceSettings(true);
+		settings.setDefaultVariable(FieldInitializerVariableDescription.INSTANCE);
+		settings.setDefaultStatement(BlockStatementGeneratorDescription.INSTANCE);
+	}
 
-  private void configureTypeSpecific() {
-  }
+	private void configureTypeSpecific() {
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/ToolkitProvider.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/ToolkitProvider.java
index 91f461f6f..1217dc395 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/ToolkitProvider.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/ToolkitProvider.java
@@ -20,18 +20,18 @@
  * @coverage core
  */
 public final class ToolkitProvider implements IToolkitProvider {
-  public static final ToolkitDescription DESCRIPTION = CoreToolkitDescription.INSTANCE;
-  static {
-    ((CoreToolkitDescription) DESCRIPTION).initialize();
-  }
+	public static final ToolkitDescription DESCRIPTION = CoreToolkitDescription.INSTANCE;
+	static {
+		((CoreToolkitDescription) DESCRIPTION).initialize();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IToolkitProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public ToolkitDescription getDescription() {
-    return DESCRIPTION;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IToolkitProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public ToolkitDescription getDescription() {
+		return DESCRIPTION;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/DesignContextMenuProvider.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/DesignContextMenuProvider.java
index d48a7f763..a52de7ca8 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/DesignContextMenuProvider.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/DesignContextMenuProvider.java
@@ -37,95 +37,95 @@
  * @coverage core.editor
  */
 public final class DesignContextMenuProvider extends MultiSelectionContextMenuProvider
-    implements
-      IContextMenuConstants {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Groups
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds standard groups into given {@link IMenuManager}.
-   */
-  public static void addGroups(IMenuManager manager) {
-    manager.add(new Separator(IContextMenuConstants.GROUP_TOP));
-    manager.add(new Separator(IContextMenuConstants.GROUP_EDIT));
-    manager.add(new Separator(IContextMenuConstants.GROUP_EDIT2));
-    manager.add(new Separator(IContextMenuConstants.GROUP_EVENTS));
-    manager.add(new Separator(IContextMenuConstants.GROUP_EVENTS2));
-    manager.add(new Separator(IContextMenuConstants.GROUP_LAYOUT));
-    manager.add(new Separator(IContextMenuConstants.GROUP_CONSTRAINTS));
-    manager.add(new Separator(IContextMenuConstants.GROUP_INHERITANCE));
-    manager.add(new Separator(IContextMenuConstants.GROUP_ADDITIONAL));
-  }
+implements
+IContextMenuConstants {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Groups
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds standard groups into given {@link IMenuManager}.
+	 */
+	public static void addGroups(IMenuManager manager) {
+		manager.add(new Separator(IContextMenuConstants.GROUP_TOP));
+		manager.add(new Separator(IContextMenuConstants.GROUP_EDIT));
+		manager.add(new Separator(IContextMenuConstants.GROUP_EDIT2));
+		manager.add(new Separator(IContextMenuConstants.GROUP_EVENTS));
+		manager.add(new Separator(IContextMenuConstants.GROUP_EVENTS2));
+		manager.add(new Separator(IContextMenuConstants.GROUP_LAYOUT));
+		manager.add(new Separator(IContextMenuConstants.GROUP_CONSTRAINTS));
+		manager.add(new Separator(IContextMenuConstants.GROUP_INHERITANCE));
+		manager.add(new Separator(IContextMenuConstants.GROUP_ADDITIONAL));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance fields
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final DesignPageActions m_pageActions;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance fields
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final DesignPageActions m_pageActions;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DesignContextMenuProvider(IEditPartViewer viewer, DesignPageActions pageActions) {
-    super(viewer);
-    m_pageActions = pageActions;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DesignContextMenuProvider(IEditPartViewer viewer, DesignPageActions pageActions) {
+		super(viewer);
+		m_pageActions = pageActions;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // MultiSelectionContextMenuProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private List<ObjectInfo> m_selectedObjects;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// MultiSelectionContextMenuProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private List<ObjectInfo> m_selectedObjects;
 
-  @Override
-  protected void preprocessSelection(List<EditPart> editParts) {
-    super.preprocessSelection(editParts);
-    // prepare selected ObjectInfo's
-    m_selectedObjects = Lists.newArrayList();
-    for (EditPart editPart : editParts) {
-      if (editPart.getModel() instanceof ObjectInfo) {
-        m_selectedObjects.add((ObjectInfo) editPart.getModel());
-      }
-    }
-  }
+	@Override
+	protected void preprocessSelection(List<EditPart> editParts) {
+		super.preprocessSelection(editParts);
+		// prepare selected ObjectInfo's
+		m_selectedObjects = Lists.newArrayList();
+		for (EditPart editPart : editParts) {
+			if (editPart.getModel() instanceof ObjectInfo) {
+				m_selectedObjects.add((ObjectInfo) editPart.getModel());
+			}
+		}
+	}
 
-  @Override
-  protected void buildContextMenu(final EditPart editPart, final IMenuManager manager) {
-    addGroups(manager);
-    boolean wbBasic = InstanceScope.INSTANCE.getNode(
-        IEditorPreferenceConstants.WB_BASIC_UI_PREFERENCE_NODE).getBoolean(
-            IEditorPreferenceConstants.WB_BASIC_UI,
-            false);
-    // edit
-    {
-      manager.appendToGroup(IContextMenuConstants.GROUP_EDIT, m_pageActions.getCutAction());
-      manager.appendToGroup(IContextMenuConstants.GROUP_EDIT, m_pageActions.getCopyAction());
-      manager.appendToGroup(IContextMenuConstants.GROUP_EDIT, m_pageActions.getPasteAction());
-      manager.appendToGroup(IContextMenuConstants.GROUP_EDIT, m_pageActions.getDeleteAction());
-    }
-    // edit2
-    {
-      if (!wbBasic) {
-        manager.appendToGroup(IContextMenuConstants.GROUP_EDIT2, m_pageActions.getTestAction());
-        manager.appendToGroup(IContextMenuConstants.GROUP_EDIT2, m_pageActions.getRefreshAction());
-      }
-    }
-    // send notification
-    if (!wbBasic) {
-      if (editPart.getModel() instanceof ObjectInfo) {
-        ExecutionUtils.runLog(new RunnableEx() {
-          public void run() throws Exception {
-            ObjectInfo object = (ObjectInfo) editPart.getModel();
-            object.getBroadcastObject().addContextMenu(m_selectedObjects, object, manager);
-          }
-        });
-      }
-    }
-  }
+	@Override
+	protected void buildContextMenu(final EditPart editPart, final IMenuManager manager) {
+		addGroups(manager);
+		boolean wbBasic = InstanceScope.INSTANCE.getNode(
+				IEditorPreferenceConstants.WB_BASIC_UI_PREFERENCE_NODE).getBoolean(
+						IEditorPreferenceConstants.WB_BASIC_UI,
+						false);
+		// edit
+		{
+			manager.appendToGroup(IContextMenuConstants.GROUP_EDIT, m_pageActions.getCutAction());
+			manager.appendToGroup(IContextMenuConstants.GROUP_EDIT, m_pageActions.getCopyAction());
+			manager.appendToGroup(IContextMenuConstants.GROUP_EDIT, m_pageActions.getPasteAction());
+			manager.appendToGroup(IContextMenuConstants.GROUP_EDIT, m_pageActions.getDeleteAction());
+		}
+		// edit2
+		{
+			if (!wbBasic) {
+				manager.appendToGroup(IContextMenuConstants.GROUP_EDIT2, m_pageActions.getTestAction());
+				manager.appendToGroup(IContextMenuConstants.GROUP_EDIT2, m_pageActions.getRefreshAction());
+			}
+		}
+		// send notification
+		if (!wbBasic) {
+			if (editPart.getModel() instanceof ObjectInfo) {
+				ExecutionUtils.runLog(new RunnableEx() {
+					public void run() throws Exception {
+						ObjectInfo object = (ObjectInfo) editPart.getModel();
+						object.getBroadcastObject().addContextMenu(m_selectedObjects, object, manager);
+					}
+				});
+			}
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/DesignPage.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/DesignPage.java
index bed7cf002..122366a6f 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/DesignPage.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/DesignPage.java
@@ -74,596 +74,596 @@
  * @coverage core.editor
  */
 public final class DesignPage implements IDesignPage {
-  private boolean m_disposed;
-  private DesignerEditor m_designerEditor;
-  private ICompilationUnit m_compilationUnit;
-  private boolean m_showProgress = true;
-  private JavaInfo m_rootObject;
-  private boolean m_active;
-  private UndoManager m_undoManager;
-  private DesignerState m_designerState = DesignerState.Undefined;
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Initialization
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Listener for reparsing on external modifications, when our editor is activated.<br>
-   * Checks for that really THIS editor instance activated.
-   *
-   * Sets active JavaInfo.
-   */
-  private final IPartListener m_partListener = new PartListenerAdapter() {
-    @Override
-    public void partActivated(IWorkbenchPart part) {
-      if (part == m_designerEditor) {
-        ExecutionUtils.runAsync(new RunnableEx() {
-          @Override
-          public void run() throws Exception {
-            if (!isDisposed()) {
-              GlobalStateJava.activate(m_rootObject);
-              if (m_active) {
-                checkDependenciesOnDesignPageActivation();
-                m_undoManager.deactivate();
-                m_undoManager.activate();
-              }
-            }
-          }
-        });
-      }
-    }
-  };
-
-  @Override
-  public void initialize(IDesignerEditor designerEditor) {
-    m_designerEditor = (DesignerEditor) designerEditor;
-    ExecutionUtils.runRethrow(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        m_compilationUnit = m_designerEditor.getCompilationUnit();
-        m_undoManager = new UndoManager(DesignPage.this, m_compilationUnit);
-      }
-    });
-    // reparse on external modification
-    m_designerEditor.getEditorSite().getPage().addPartListener(m_partListener);
-  }
-
-  /**
-   * @return <code>true</code> if this {@link DesignPage} is disposed.
-   */
-  public boolean isDisposed() {
-    return m_disposed;
-  }
-
-  /**
-   * Disposes this {@link DesignPage}.
-   */
-  @Override
-  public void dispose() {
-    m_disposed = true;
-    m_undoManager.deactivate();
-    m_designerEditor.getEditorSite().getPage().removePartListener(m_partListener);
-    disposeAll(true);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getName() {
-    return "Design";
-  }
-
-  @Override
-  public Image getImage() {
-    return DesignerPlugin.getImage("editor_design_page.png");
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Control
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private PageBook m_pageBook;
-  private JavaDesignComposite m_designComposite;
-  private final Map<Class<?>, Composite> m_errorCompositesMap = Maps.newHashMap();
-
-  /**
-   * Creates the SWT control(s) for this page.
-   */
-  @Override
-  public Control createControl(Composite parent) {
-    Composite container = new Composite(parent, SWT.NONE);
-    GridLayoutFactory.create(container).noMargins().noSpacing();
-    createControl_pageBook(container);
-    return container;
-  }
-
-  private void createControl_pageBook(Composite container) {
-    m_pageBook = new PageBook(container, SWT.NONE);
-    GridDataFactory.create(m_pageBook).grab().fill();
-    // design composite
-    ICommandExceptionHandler exceptionHandler = new ICommandExceptionHandler() {
-      @Override
-      public void handleException(Throwable exception) {
-        handleDesignException(exception);
-      }
-    };
-    m_designComposite =
-        new JavaDesignComposite(m_pageBook, SWT.NONE, m_designerEditor, exceptionHandler);
-    // show "design" initially
-    m_pageBook.showPage(m_designComposite);
-  }
-
-  /**
-   * Creates and caches the composites for displaying some error/warning messages.
-   */
-  @SuppressWarnings("unchecked")
-  private <T extends Composite> T getErrorComposite(Class<T> compositeClass) throws Exception {
-    T composite = (T) m_errorCompositesMap.get(compositeClass);
-    if (composite == null) {
-      Constructor<T> constructor = compositeClass.getConstructor(Composite.class, int.class);
-      composite = constructor.newInstance(m_pageBook, SWT.NONE);
-      m_errorCompositesMap.put(compositeClass, composite);
-    }
-    return composite;
-  }
-
-  @Override
-  public Control getControl() {
-    return m_pageBook;
-  }
-
-  /**
-   * Makes this page disabled (during refresh) and again enabled.
-   */
-  private void setEnabled(boolean enabled) {
-    m_pageBook.getParent().setRedraw(enabled);
-  }
-
-  /**
-   * Asks this page to take focus.
-   */
-  @Override
-  public void setFocus() {
-    m_designComposite.setFocus();
-  }
-
-  /**
-   * @return the {@link DesignComposite} of this {@link DesignPage}.
-   */
-  public JavaDesignComposite getDesignComposite() {
-    return m_designComposite;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Activation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Handles activation/deactivation of {@link DesignPage} in {@link DesignerEditor}.
-   */
-  @Override
-  public void handleActiveState(boolean activate) {
-    m_active = activate;
-    if (activate) {
-      handleActiveState_True();
-    } else {
-      handleActiveState_False();
-    }
-  }
-
-  @Override
-  public void setSourceModelSynchronizationEnabled(boolean active) {
-    if (active) {
-      m_undoManager.activate();
-    } else {
-      m_undoManager.deactivate();
-    }
-  }
-
-  private void handleActiveState_True() {
-    // ensure that underlying ICompilationUnit is valid
-    if (!m_compilationUnit.isOpen()) {
-      IDesignerEditor designerEditor = m_designerEditor;
-      dispose();
-      initialize(designerEditor);
-    }
-    // OK, activate Design
-    m_undoManager.activate();
-    m_designComposite.onActivate();
-    // check dependencies
-    checkDependenciesOnDesignPageActivation();
-  }
-
-  private void handleActiveState_False() {
-    m_undoManager.deactivate();
-    m_designComposite.onDeActivate();
-  }
-
-  /**
-   * This editor and its "Design" page are activated. Check if some external dependencies are
-   * changed so that reparse or refresh should be performed.
-   */
-  private void checkDependenciesOnDesignPageActivation() {
-    if (m_rootObject != null) {
-      ExecutionUtils.runLog(new RunnableEx() {
-        @Override
-        public void run() throws Exception {
-          EditorActivatedRequest request = new EditorActivatedRequest();
-          m_rootObject.getBroadcast(EditorActivatedListener.class).invoke(request);
-          if (request.isReparseRequested()) {
-            refreshGEF();
-          } else if (request.isRefreshRequested()) {
-            m_rootObject.refresh();
-          }
-        }
-      });
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Life cycle listener
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return all registered {@link EditorLifeCycleListener}s.
-   */
-  private List<EditorLifeCycleListener> getLifeCycleListeners() {
-    return ExternalFactoriesHelper.getElementsInstances(
-        EditorLifeCycleListener.class,
-        "org.eclipse.wb.core.editorLifeCycleListeners",
-        "listener");
-  }
-
-  /**
-   * @return <code>false</code> if any of
-   *         {@link EditorLifeCycleListener#parseWithProgress(Object, ICompilationUnit)} returned
-   *         <code>false</code>.
-   */
-  private boolean isLifeCycleProgressRequired() {
-    for (EditorLifeCycleListener listener : getLifeCycleListeners()) {
-      if (!listener.parseWithProgress(this, m_compilationUnit)) {
-        return false;
-      }
-    }
-    return true;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Life cycle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Specifies if parsing should be done in progress dialog.
-   */
-  public void setShowProgress(boolean showProgress) {
-    m_showProgress = showProgress;
-  }
-
-  /**
-   * Disposes design and model.
-   */
-  private void disposeAll(final boolean force) {
-    // dispose design
-    if (!m_pageBook.isDisposed()) {
-      dispose_beforePresentation();
-      m_designComposite.disposeDesign();
-    }
-    // dispose model
-    if (m_rootObject != null) {
-      ExecutionUtils.runLog(new RunnableEx() {
-        @Override
-        public void run() throws Exception {
-          m_rootObject.refresh_dispose();
-          m_rootObject.getBroadcastObject().dispose();
-          disposeContext(force);
-          GlobalStateJava.deactivate(m_rootObject);
-        }
-      });
-      m_rootObject = null;
-    }
-  }
-
-  /**
-   * Sends notification that presentation will be disposed.
-   */
-  private void dispose_beforePresentation() {
-    if (m_rootObject != null) {
-      ExecutionUtils.runLog(new RunnableEx() {
-        @Override
-        public void run() throws Exception {
-          m_rootObject.getBroadcastObject().dispose_beforePresentation();
-        }
-      });
-    }
-  }
-
-  /**
-   * Notifies listeners that hierarchy is disposed or editor is closing.
-   *
-   * @param force
-   *          is <code>true</code> if user closes editor or explicitly requests re-parsing.
-   */
-  protected void disposeContext(final boolean force) {
-    for (final EditorLifeCycleListener listener : getLifeCycleListeners()) {
-      ExecutionUtils.runLog(new RunnableEx() {
-        @Override
-        public void run() throws Exception {
-          listener.disposeContext(DesignPage.this, force);
-        }
-      });
-    }
-  }
-
-  /**
-   * Parses {@link ICompilationUnit} and displays it in GEF.
-   */
-  @Override
-  public void refreshGEF() {
-    disposeContext(true);
-    m_undoManager.refreshDesignerEditor();
-    // notify listeners
-    {
-      List<DesignerEditorListener> designPageListeners =
-          ImmutableList.copyOf(m_designerEditor.getDesignPageListeners());
-      for (DesignerEditorListener listener : designPageListeners) {
-        listener.reparsed();
-      }
-    }
-  }
-
-  /**
-   * Parses {@link ICompilationUnit} and displays it in GEF.
-   *
-   * @return <code>true</code> if parsing was successful.
-   */
-  boolean internal_refreshGEF() {
-    setEnabled(false);
-    try {
-      disposeAll(false);
-      // do parse
-      m_designerState = DesignerState.Parsing;
-      if (m_showProgress && isLifeCycleProgressRequired()) {
-        internal_refreshGEF_withProgress();
-      } else {
-        internal_refreshGEF(new NullProgressMonitor());
-      }
-      // success, show Design
-      m_pageBook.showPage(m_designComposite);
-      m_designerState = DesignerState.Successful;
-      return true;
-    } catch (Throwable e) {
-      // extract "real" exception
-      if (e instanceof InvocationTargetException) {
-        e = ((InvocationTargetException) e).getTargetException();
-      }
-      // show exception in editor
-      showExceptionOnDesignPane(e, null);
-      // failure
-      return false;
-    } finally {
-      setEnabled(true);
-    }
-  }
-
-  private void internal_refreshGEF_withProgress() throws Exception {
-    final Display display = Display.getCurrent();
-    IRunnableWithProgress runnable = new IRunnableWithProgress() {
-      @Override
-      public void run(final IProgressMonitor monitor) throws InvocationTargetException,
-          InterruptedException {
-        monitor.beginTask("Opening Design page.", 7);
-        //
-        try {
-          DesignPageSite.setProgressMonitor(monitor);
-          display.syncExec(new Runnable() {
-            @Override
-            public void run() {
-              try {
-                internal_refreshGEF(monitor);
-              } catch (Throwable e) {
-                ReflectionUtils.propagate(e);
-              }
-            }
-          });
-        } catch (Throwable e) {
-          ReflectionUtils.propagate(e);
-        } finally {
-          DesignPageSite.setProgressMonitor(null);
-        }
-        //
-        monitor.done();
-      }
-    };
-    try {
-      new ProgressMonitorDialog(DesignerPlugin.getShell()).run(false, false, runnable);
-    } catch (InvocationTargetException e) {
-      ReflectionUtils.propagate(e.getCause());
-    } catch (Throwable e) {
-      ReflectionUtils.propagate(e);
-    }
-  }
-
-  /**
-   * Displays the error information on Design Pane.
-   *
-   * @param e
-   *          the {@link Throwable} to display.
-   * @param screenshot
-   *          the {@link Image} of entire shell just before error. Can be <code>null</code> in case
-   *          of parse error when no screenshot needed.
-   *
-   */
-  private void showExceptionOnDesignPane(Throwable e, Image screenshot) {
-    m_designerState = DesignerState.Error;
-    // show Throwable
-    try {
-      e = DesignerExceptionUtils.rewriteException(e);
-      Throwable designerCause = DesignerExceptionUtils.getDesignerCause(e);
-      if (e instanceof MultipleConstructorsError) {
-        MultipleConstructorsComposite composite =
-            getErrorComposite(MultipleConstructorsComposite.class);
-        composite.setException((MultipleConstructorsError) e);
-        m_pageBook.showPage(composite);
-      } else if (e instanceof NoEntryPointError) {
-        NoEntryPointComposite composite = getErrorComposite(NoEntryPointComposite.class);
-        composite.setException((NoEntryPointError) e);
-        m_pageBook.showPage(composite);
-      } else if (designerCause instanceof DesignerException
-          && ((DesignerException) designerCause).getCode() == ICoreExceptionConstants.PARSER_NOT_GUI) {
-        NotUiJavaWarningComposite composite = getErrorComposite(NotUiJavaWarningComposite.class);
-        composite.setException(e);
-        m_pageBook.showPage(composite);
-      } else if (DesignerExceptionUtils.isWarning(e)) {
-        JavaWarningComposite composite = getErrorComposite(JavaWarningComposite.class);
-        composite.setException(e);
-        m_pageBook.showPage(composite);
-      } else {
-        DesignerPlugin.log(e);
-        JavaExceptionComposite composite = getErrorComposite(JavaExceptionComposite.class);
-        composite.setException(e, screenshot, m_compilationUnit, m_rootObject);
-        m_pageBook.showPage(composite);
-      }
-    } catch (Throwable e1) {
-      // ignore, prevent error while showing the error.
-    }
-    m_designerEditor.getMultiMode().showDesign();
-  }
-
-  /**
-   * Implementation of {@link #internal_refreshGEF()} with {@link IProgressMonitor}.
-   */
-  private void internal_refreshGEF(IProgressMonitor monitor) throws Exception {
-    monitor.subTask("Initializing...");
-    monitor.worked(1);
-    // notify parseStart()
-    for (EditorLifeCycleListener listener : getLifeCycleListeners()) {
-      listener.parseStart(this);
-    }
-    // do parse
-    try {
-      long start = System.currentTimeMillis();
-      monitor.subTask("Parsing...");
-      Debug.print("Parsing...");
-      m_rootObject = JavaInfoParser.parse(m_compilationUnit);
-      monitor.worked(1);
-      Debug.println("done: " + (System.currentTimeMillis() - start));
-    } finally {
-      // notify parseEnd()
-      for (EditorLifeCycleListener listener : getLifeCycleListeners()) {
-        listener.parseEnd(this);
-      }
-    }
-    // install site
-    {
-      IDesignPageSite designPageSite = new DesignPageSite() {
-        @Override
-        public void showSourcePosition(int position) {
-          m_designerEditor.showSourcePosition(position);
-        }
-
-        @Override
-        public void openSourcePosition(int position) {
-          m_designerEditor.showSourcePosition(position);
-          m_designerEditor.getMultiMode().showSource();
-        }
-
-        // TODO(scheglov)
-//        @Override
-//        public void highlightVisitedNodes(Collection<ASTNode> nodes) {
-//          m_designerEditor.highlightVisitedNodes(nodes);
-//        }
-        @Override
-        public void handleException(Throwable e) {
-          handleDesignException(e);
-        }
-
-        @Override
-        public void reparse() {
-          refreshGEF();
-        }
-      };
-      DesignPageSite.Helper.setSite(m_rootObject, designPageSite);
-    }
-    // search dependencies in background
-    schedule_rememberDependency();
-    // refresh model (create GUI)
-    {
-      long start = System.currentTimeMillis();
-      monitor.subTask("Refreshing...");
-      m_rootObject.refresh();
-      monitor.worked(1);
-      Debug.println("refresh: " + (System.currentTimeMillis() - start));
-    }
-    // refresh design
-    m_designComposite.refresh(m_rootObject, monitor);
-    // configure helpers
-    m_undoManager.setRoot(m_rootObject);
-  }
-
-  private void schedule_rememberDependency() {
-    new Thread("WindowBuilder dependency search") {
-      @Override
-      public void run() {
-        ExecutionUtils.runIgnore(new RunnableEx() {
-          @Override
-          public void run() throws Exception {
-            JavaInfoUtils.rememberDependency(m_rootObject);
-          }
-        });
-      }
-    }.start();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public DesignerState getDesignerState() {
-    return m_designerState;
-  }
-
-  public UndoManager getUndoManager() {
-    return m_undoManager;
-  }
-
-  /**
-   * @return <code>true</code> if this editor is active.
-   */
-  public boolean isActiveEditor() {
-    return DesignerPlugin.getActiveEditor() == m_designerEditor;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exception
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Handles any exception happened on "Design" page, such as exceptions in GEF commands, property
-   * table, components tree.
-   */
-  private void handleDesignException(Throwable e) {
-    // at first, try to make post-mortem screenshot
-    Image screenshot;
-    try {
-      screenshot = DesignerExceptionUtils.makeScreenshot();
-    } catch (Throwable ex) {
-      screenshot = null;
-    }
-    // dispose current state to prevent any further exceptions
-    disposeAll(true);
-    // show exception
-    if (EnvironmentUtils.isTestingTime()) {
-      e.printStackTrace();
-    }
-    showExceptionOnDesignPane(e, screenshot);
-  }
+	private boolean m_disposed;
+	private DesignerEditor m_designerEditor;
+	private ICompilationUnit m_compilationUnit;
+	private boolean m_showProgress = true;
+	private JavaInfo m_rootObject;
+	private boolean m_active;
+	private UndoManager m_undoManager;
+	private DesignerState m_designerState = DesignerState.Undefined;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Initialization
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Listener for reparsing on external modifications, when our editor is activated.<br>
+	 * Checks for that really THIS editor instance activated.
+	 *
+	 * Sets active JavaInfo.
+	 */
+	private final IPartListener m_partListener = new PartListenerAdapter() {
+		@Override
+		public void partActivated(IWorkbenchPart part) {
+			if (part == m_designerEditor) {
+				ExecutionUtils.runAsync(new RunnableEx() {
+					@Override
+					public void run() throws Exception {
+						if (!isDisposed()) {
+							GlobalStateJava.activate(m_rootObject);
+							if (m_active) {
+								checkDependenciesOnDesignPageActivation();
+								m_undoManager.deactivate();
+								m_undoManager.activate();
+							}
+						}
+					}
+				});
+			}
+		}
+	};
+
+	@Override
+	public void initialize(IDesignerEditor designerEditor) {
+		m_designerEditor = (DesignerEditor) designerEditor;
+		ExecutionUtils.runRethrow(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				m_compilationUnit = m_designerEditor.getCompilationUnit();
+				m_undoManager = new UndoManager(DesignPage.this, m_compilationUnit);
+			}
+		});
+		// reparse on external modification
+		m_designerEditor.getEditorSite().getPage().addPartListener(m_partListener);
+	}
+
+	/**
+	 * @return <code>true</code> if this {@link DesignPage} is disposed.
+	 */
+	public boolean isDisposed() {
+		return m_disposed;
+	}
+
+	/**
+	 * Disposes this {@link DesignPage}.
+	 */
+	@Override
+	public void dispose() {
+		m_disposed = true;
+		m_undoManager.deactivate();
+		m_designerEditor.getEditorSite().getPage().removePartListener(m_partListener);
+		disposeAll(true);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getName() {
+		return "Design";
+	}
+
+	@Override
+	public Image getImage() {
+		return DesignerPlugin.getImage("editor_design_page.png");
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Control
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private PageBook m_pageBook;
+	private JavaDesignComposite m_designComposite;
+	private final Map<Class<?>, Composite> m_errorCompositesMap = Maps.newHashMap();
+
+	/**
+	 * Creates the SWT control(s) for this page.
+	 */
+	@Override
+	public Control createControl(Composite parent) {
+		Composite container = new Composite(parent, SWT.NONE);
+		GridLayoutFactory.create(container).noMargins().noSpacing();
+		createControl_pageBook(container);
+		return container;
+	}
+
+	private void createControl_pageBook(Composite container) {
+		m_pageBook = new PageBook(container, SWT.NONE);
+		GridDataFactory.create(m_pageBook).grab().fill();
+		// design composite
+		ICommandExceptionHandler exceptionHandler = new ICommandExceptionHandler() {
+			@Override
+			public void handleException(Throwable exception) {
+				handleDesignException(exception);
+			}
+		};
+		m_designComposite =
+				new JavaDesignComposite(m_pageBook, SWT.NONE, m_designerEditor, exceptionHandler);
+		// show "design" initially
+		m_pageBook.showPage(m_designComposite);
+	}
+
+	/**
+	 * Creates and caches the composites for displaying some error/warning messages.
+	 */
+	@SuppressWarnings("unchecked")
+	private <T extends Composite> T getErrorComposite(Class<T> compositeClass) throws Exception {
+		T composite = (T) m_errorCompositesMap.get(compositeClass);
+		if (composite == null) {
+			Constructor<T> constructor = compositeClass.getConstructor(Composite.class, int.class);
+			composite = constructor.newInstance(m_pageBook, SWT.NONE);
+			m_errorCompositesMap.put(compositeClass, composite);
+		}
+		return composite;
+	}
+
+	@Override
+	public Control getControl() {
+		return m_pageBook;
+	}
+
+	/**
+	 * Makes this page disabled (during refresh) and again enabled.
+	 */
+	private void setEnabled(boolean enabled) {
+		m_pageBook.getParent().setRedraw(enabled);
+	}
+
+	/**
+	 * Asks this page to take focus.
+	 */
+	@Override
+	public void setFocus() {
+		m_designComposite.setFocus();
+	}
+
+	/**
+	 * @return the {@link DesignComposite} of this {@link DesignPage}.
+	 */
+	public JavaDesignComposite getDesignComposite() {
+		return m_designComposite;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Activation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Handles activation/deactivation of {@link DesignPage} in {@link DesignerEditor}.
+	 */
+	@Override
+	public void handleActiveState(boolean activate) {
+		m_active = activate;
+		if (activate) {
+			handleActiveState_True();
+		} else {
+			handleActiveState_False();
+		}
+	}
+
+	@Override
+	public void setSourceModelSynchronizationEnabled(boolean active) {
+		if (active) {
+			m_undoManager.activate();
+		} else {
+			m_undoManager.deactivate();
+		}
+	}
+
+	private void handleActiveState_True() {
+		// ensure that underlying ICompilationUnit is valid
+		if (!m_compilationUnit.isOpen()) {
+			IDesignerEditor designerEditor = m_designerEditor;
+			dispose();
+			initialize(designerEditor);
+		}
+		// OK, activate Design
+		m_undoManager.activate();
+		m_designComposite.onActivate();
+		// check dependencies
+		checkDependenciesOnDesignPageActivation();
+	}
+
+	private void handleActiveState_False() {
+		m_undoManager.deactivate();
+		m_designComposite.onDeActivate();
+	}
+
+	/**
+	 * This editor and its "Design" page are activated. Check if some external dependencies are
+	 * changed so that reparse or refresh should be performed.
+	 */
+	private void checkDependenciesOnDesignPageActivation() {
+		if (m_rootObject != null) {
+			ExecutionUtils.runLog(new RunnableEx() {
+				@Override
+				public void run() throws Exception {
+					EditorActivatedRequest request = new EditorActivatedRequest();
+					m_rootObject.getBroadcast(EditorActivatedListener.class).invoke(request);
+					if (request.isReparseRequested()) {
+						refreshGEF();
+					} else if (request.isRefreshRequested()) {
+						m_rootObject.refresh();
+					}
+				}
+			});
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Life cycle listener
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return all registered {@link EditorLifeCycleListener}s.
+	 */
+	private List<EditorLifeCycleListener> getLifeCycleListeners() {
+		return ExternalFactoriesHelper.getElementsInstances(
+				EditorLifeCycleListener.class,
+				"org.eclipse.wb.core.editorLifeCycleListeners",
+				"listener");
+	}
+
+	/**
+	 * @return <code>false</code> if any of
+	 *         {@link EditorLifeCycleListener#parseWithProgress(Object, ICompilationUnit)} returned
+	 *         <code>false</code>.
+	 */
+	private boolean isLifeCycleProgressRequired() {
+		for (EditorLifeCycleListener listener : getLifeCycleListeners()) {
+			if (!listener.parseWithProgress(this, m_compilationUnit)) {
+				return false;
+			}
+		}
+		return true;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Life cycle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Specifies if parsing should be done in progress dialog.
+	 */
+	public void setShowProgress(boolean showProgress) {
+		m_showProgress = showProgress;
+	}
+
+	/**
+	 * Disposes design and model.
+	 */
+	private void disposeAll(final boolean force) {
+		// dispose design
+		if (!m_pageBook.isDisposed()) {
+			dispose_beforePresentation();
+			m_designComposite.disposeDesign();
+		}
+		// dispose model
+		if (m_rootObject != null) {
+			ExecutionUtils.runLog(new RunnableEx() {
+				@Override
+				public void run() throws Exception {
+					m_rootObject.refresh_dispose();
+					m_rootObject.getBroadcastObject().dispose();
+					disposeContext(force);
+					GlobalStateJava.deactivate(m_rootObject);
+				}
+			});
+			m_rootObject = null;
+		}
+	}
+
+	/**
+	 * Sends notification that presentation will be disposed.
+	 */
+	private void dispose_beforePresentation() {
+		if (m_rootObject != null) {
+			ExecutionUtils.runLog(new RunnableEx() {
+				@Override
+				public void run() throws Exception {
+					m_rootObject.getBroadcastObject().dispose_beforePresentation();
+				}
+			});
+		}
+	}
+
+	/**
+	 * Notifies listeners that hierarchy is disposed or editor is closing.
+	 *
+	 * @param force
+	 *          is <code>true</code> if user closes editor or explicitly requests re-parsing.
+	 */
+	protected void disposeContext(final boolean force) {
+		for (final EditorLifeCycleListener listener : getLifeCycleListeners()) {
+			ExecutionUtils.runLog(new RunnableEx() {
+				@Override
+				public void run() throws Exception {
+					listener.disposeContext(DesignPage.this, force);
+				}
+			});
+		}
+	}
+
+	/**
+	 * Parses {@link ICompilationUnit} and displays it in GEF.
+	 */
+	@Override
+	public void refreshGEF() {
+		disposeContext(true);
+		m_undoManager.refreshDesignerEditor();
+		// notify listeners
+		{
+			List<DesignerEditorListener> designPageListeners =
+					ImmutableList.copyOf(m_designerEditor.getDesignPageListeners());
+			for (DesignerEditorListener listener : designPageListeners) {
+				listener.reparsed();
+			}
+		}
+	}
+
+	/**
+	 * Parses {@link ICompilationUnit} and displays it in GEF.
+	 *
+	 * @return <code>true</code> if parsing was successful.
+	 */
+	boolean internal_refreshGEF() {
+		setEnabled(false);
+		try {
+			disposeAll(false);
+			// do parse
+			m_designerState = DesignerState.Parsing;
+			if (m_showProgress && isLifeCycleProgressRequired()) {
+				internal_refreshGEF_withProgress();
+			} else {
+				internal_refreshGEF(new NullProgressMonitor());
+			}
+			// success, show Design
+			m_pageBook.showPage(m_designComposite);
+			m_designerState = DesignerState.Successful;
+			return true;
+		} catch (Throwable e) {
+			// extract "real" exception
+			if (e instanceof InvocationTargetException) {
+				e = ((InvocationTargetException) e).getTargetException();
+			}
+			// show exception in editor
+			showExceptionOnDesignPane(e, null);
+			// failure
+			return false;
+		} finally {
+			setEnabled(true);
+		}
+	}
+
+	private void internal_refreshGEF_withProgress() throws Exception {
+		final Display display = Display.getCurrent();
+		IRunnableWithProgress runnable = new IRunnableWithProgress() {
+			@Override
+			public void run(final IProgressMonitor monitor) throws InvocationTargetException,
+			InterruptedException {
+				monitor.beginTask("Opening Design page.", 7);
+				//
+				try {
+					DesignPageSite.setProgressMonitor(monitor);
+					display.syncExec(new Runnable() {
+						@Override
+						public void run() {
+							try {
+								internal_refreshGEF(monitor);
+							} catch (Throwable e) {
+								ReflectionUtils.propagate(e);
+							}
+						}
+					});
+				} catch (Throwable e) {
+					ReflectionUtils.propagate(e);
+				} finally {
+					DesignPageSite.setProgressMonitor(null);
+				}
+				//
+				monitor.done();
+			}
+		};
+		try {
+			new ProgressMonitorDialog(DesignerPlugin.getShell()).run(false, false, runnable);
+		} catch (InvocationTargetException e) {
+			ReflectionUtils.propagate(e.getCause());
+		} catch (Throwable e) {
+			ReflectionUtils.propagate(e);
+		}
+	}
+
+	/**
+	 * Displays the error information on Design Pane.
+	 *
+	 * @param e
+	 *          the {@link Throwable} to display.
+	 * @param screenshot
+	 *          the {@link Image} of entire shell just before error. Can be <code>null</code> in case
+	 *          of parse error when no screenshot needed.
+	 *
+	 */
+	private void showExceptionOnDesignPane(Throwable e, Image screenshot) {
+		m_designerState = DesignerState.Error;
+		// show Throwable
+		try {
+			e = DesignerExceptionUtils.rewriteException(e);
+			Throwable designerCause = DesignerExceptionUtils.getDesignerCause(e);
+			if (e instanceof MultipleConstructorsError) {
+				MultipleConstructorsComposite composite =
+						getErrorComposite(MultipleConstructorsComposite.class);
+				composite.setException((MultipleConstructorsError) e);
+				m_pageBook.showPage(composite);
+			} else if (e instanceof NoEntryPointError) {
+				NoEntryPointComposite composite = getErrorComposite(NoEntryPointComposite.class);
+				composite.setException((NoEntryPointError) e);
+				m_pageBook.showPage(composite);
+			} else if (designerCause instanceof DesignerException
+					&& ((DesignerException) designerCause).getCode() == ICoreExceptionConstants.PARSER_NOT_GUI) {
+				NotUiJavaWarningComposite composite = getErrorComposite(NotUiJavaWarningComposite.class);
+				composite.setException(e);
+				m_pageBook.showPage(composite);
+			} else if (DesignerExceptionUtils.isWarning(e)) {
+				JavaWarningComposite composite = getErrorComposite(JavaWarningComposite.class);
+				composite.setException(e);
+				m_pageBook.showPage(composite);
+			} else {
+				DesignerPlugin.log(e);
+				JavaExceptionComposite composite = getErrorComposite(JavaExceptionComposite.class);
+				composite.setException(e, screenshot, m_compilationUnit, m_rootObject);
+				m_pageBook.showPage(composite);
+			}
+		} catch (Throwable e1) {
+			// ignore, prevent error while showing the error.
+		}
+		m_designerEditor.getMultiMode().showDesign();
+	}
+
+	/**
+	 * Implementation of {@link #internal_refreshGEF()} with {@link IProgressMonitor}.
+	 */
+	private void internal_refreshGEF(IProgressMonitor monitor) throws Exception {
+		monitor.subTask("Initializing...");
+		monitor.worked(1);
+		// notify parseStart()
+		for (EditorLifeCycleListener listener : getLifeCycleListeners()) {
+			listener.parseStart(this);
+		}
+		// do parse
+		try {
+			long start = System.currentTimeMillis();
+			monitor.subTask("Parsing...");
+			Debug.print("Parsing...");
+			m_rootObject = JavaInfoParser.parse(m_compilationUnit);
+			monitor.worked(1);
+			Debug.println("done: " + (System.currentTimeMillis() - start));
+		} finally {
+			// notify parseEnd()
+			for (EditorLifeCycleListener listener : getLifeCycleListeners()) {
+				listener.parseEnd(this);
+			}
+		}
+		// install site
+		{
+			IDesignPageSite designPageSite = new DesignPageSite() {
+				@Override
+				public void showSourcePosition(int position) {
+					m_designerEditor.showSourcePosition(position);
+				}
+
+				@Override
+				public void openSourcePosition(int position) {
+					m_designerEditor.showSourcePosition(position);
+					m_designerEditor.getMultiMode().showSource();
+				}
+
+				// TODO(scheglov)
+				//        @Override
+				//        public void highlightVisitedNodes(Collection<ASTNode> nodes) {
+				//          m_designerEditor.highlightVisitedNodes(nodes);
+				//        }
+				@Override
+				public void handleException(Throwable e) {
+					handleDesignException(e);
+				}
+
+				@Override
+				public void reparse() {
+					refreshGEF();
+				}
+			};
+			DesignPageSite.Helper.setSite(m_rootObject, designPageSite);
+		}
+		// search dependencies in background
+		schedule_rememberDependency();
+		// refresh model (create GUI)
+		{
+			long start = System.currentTimeMillis();
+			monitor.subTask("Refreshing...");
+			m_rootObject.refresh();
+			monitor.worked(1);
+			Debug.println("refresh: " + (System.currentTimeMillis() - start));
+		}
+		// refresh design
+		m_designComposite.refresh(m_rootObject, monitor);
+		// configure helpers
+		m_undoManager.setRoot(m_rootObject);
+	}
+
+	private void schedule_rememberDependency() {
+		new Thread("WindowBuilder dependency search") {
+			@Override
+			public void run() {
+				ExecutionUtils.runIgnore(new RunnableEx() {
+					@Override
+					public void run() throws Exception {
+						JavaInfoUtils.rememberDependency(m_rootObject);
+					}
+				});
+			}
+		}.start();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public DesignerState getDesignerState() {
+		return m_designerState;
+	}
+
+	public UndoManager getUndoManager() {
+		return m_undoManager;
+	}
+
+	/**
+	 * @return <code>true</code> if this editor is active.
+	 */
+	public boolean isActiveEditor() {
+		return DesignerPlugin.getActiveEditor() == m_designerEditor;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exception
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Handles any exception happened on "Design" page, such as exceptions in GEF commands, property
+	 * table, components tree.
+	 */
+	private void handleDesignException(Throwable e) {
+		// at first, try to make post-mortem screenshot
+		Image screenshot;
+		try {
+			screenshot = DesignerExceptionUtils.makeScreenshot();
+		} catch (Throwable ex) {
+			screenshot = null;
+		}
+		// dispose current state to prevent any further exceptions
+		disposeAll(true);
+		// show exception
+		if (EnvironmentUtils.isTestingTime()) {
+			e.printStackTrace();
+		}
+		showExceptionOnDesignPane(e, screenshot);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/EditorLifeCycleListener.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/EditorLifeCycleListener.java
index 2f66b04e3..ad6f2f0c4 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/EditorLifeCycleListener.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/EditorLifeCycleListener.java
@@ -19,33 +19,33 @@
  * @coverage core.editor
  */
 public abstract class EditorLifeCycleListener {
-  /**
-   * @return <code>false</code> if given {@link ICompilationUnit} can be parsed quickly, so no
-   *         progress required; or <code>true</code> if progress should be displayed.
-   */
-  public boolean parseWithProgress(Object editor, ICompilationUnit unit) {
-    return true;
-  }
+	/**
+	 * @return <code>false</code> if given {@link ICompilationUnit} can be parsed quickly, so no
+	 *         progress required; or <code>true</code> if progress should be displayed.
+	 */
+	public boolean parseWithProgress(Object editor, ICompilationUnit unit) {
+		return true;
+	}
 
-  /**
-   * Parsing is about to start.
-   */
-  public void parseStart(Object editor) throws Exception {
-  }
+	/**
+	 * Parsing is about to start.
+	 */
+	public void parseStart(Object editor) throws Exception {
+	}
 
-  /**
-   * Parsing was finished (successfully or not).
-   */
-  public void parseEnd(Object editor) throws Exception {
-  }
+	/**
+	 * Parsing was finished (successfully or not).
+	 */
+	public void parseEnd(Object editor) throws Exception {
+	}
 
-  /**
-   * Hierarchy was disposed in editor, so may be context of editor also should be disposed.
-   * Sometimes however we don't want to throw away all information about editor.
-   *
-   * @param force
-   *          is <code>true</code> if user closes editor, so context should be disposed.
-   */
-  public void disposeContext(Object editor, boolean force) throws Exception {
-  }
+	/**
+	 * Hierarchy was disposed in editor, so may be context of editor also should be disposed.
+	 * Sometimes however we don't want to throw away all information about editor.
+	 *
+	 * @param force
+	 *          is <code>true</code> if user closes editor, so context should be disposed.
+	 */
+	public void disposeContext(Object editor, boolean force) throws Exception {
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/JavaDesignComposite.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/JavaDesignComposite.java
index ae334aedc..63cef44a5 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/JavaDesignComposite.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/JavaDesignComposite.java
@@ -36,151 +36,151 @@
  * @coverage core.editor
  */
 public final class JavaDesignComposite extends DesignComposite {
-  private DesignPageActions m_pageActions;
-  private JavaDesignToolbarHelper m_toolbarHelper;
-  private DesignerPalette m_designerPalette;
-  private JavaInfo m_rootObject;
+	private DesignPageActions m_pageActions;
+	private JavaDesignToolbarHelper m_toolbarHelper;
+	private DesignerPalette m_designerPalette;
+	private JavaInfo m_rootObject;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public JavaDesignComposite(Composite parent,
-      int style,
-      IEditorPart editorPart,
-      ICommandExceptionHandler exceptionHandler) {
-    super(parent, style, editorPart, exceptionHandler);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public JavaDesignComposite(Composite parent,
+			int style,
+			IEditorPart editorPart,
+			ICommandExceptionHandler exceptionHandler) {
+		super(parent, style, editorPart, exceptionHandler);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Creation of UI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createDesignActions() {
-    IEditPartViewer treeViewer = m_componentsComposite.getTreeViewer();
-    m_pageActions = new DesignPageActions(m_editorPart, treeViewer);
-    m_viewer.setContextMenu(new DesignContextMenuProvider(m_viewer, m_pageActions));
-    // install dispose listener
-    addDisposeListener(new DisposeListener() {
-      @Override
-      public void widgetDisposed(DisposeEvent e) {
-        m_pageActions.dispose();
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Creation of UI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createDesignActions() {
+		IEditPartViewer treeViewer = m_componentsComposite.getTreeViewer();
+		m_pageActions = new DesignPageActions(m_editorPart, treeViewer);
+		m_viewer.setContextMenu(new DesignContextMenuProvider(m_viewer, m_pageActions));
+		// install dispose listener
+		addDisposeListener(new DisposeListener() {
+			@Override
+			public void widgetDisposed(DisposeEvent e) {
+				m_pageActions.dispose();
+			}
+		});
+	}
 
-  @Override
-  protected void createDesignToolbarHelper() {
-    m_toolbarHelper = new JavaDesignToolbarHelper(m_toolBar);
-    m_toolbarHelper.initialize(m_pageActions, m_viewer);
-    m_toolbarHelper.fill();
-  }
+	@Override
+	protected void createDesignToolbarHelper() {
+		m_toolbarHelper = new JavaDesignToolbarHelper(m_toolBar);
+		m_toolbarHelper.initialize(m_pageActions, m_viewer);
+		m_toolbarHelper.fill();
+	}
 
-  @Override
-  protected void createPalette(FlyoutControlComposite gefComposite) {
-    m_designerPalette = new DesignerPalette(gefComposite.getFlyoutParent(), SWT.NONE, true);
-  }
+	@Override
+	protected void createPalette(FlyoutControlComposite gefComposite) {
+		m_designerPalette = new DesignerPalette(gefComposite.getFlyoutParent(), SWT.NONE, true);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Life cycle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Notifies that "Design" page was activated.
-   */
-  public void onActivate() {
-    m_pageActions.installActions();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Life cycle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Notifies that "Design" page was activated.
+	 */
+	public void onActivate() {
+		m_pageActions.installActions();
+	}
 
-  /**
-   * Notifies that "Design" page was deactivated.
-   */
-  public void onDeActivate() {
-    m_pageActions.uninstallActions();
-  }
+	/**
+	 * Notifies that "Design" page was deactivated.
+	 */
+	public void onDeActivate() {
+		m_pageActions.uninstallActions();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link IAction} if it is implement by "Design" page, or <code>null</code>.
-   */
-  public IAction getAction(String actionID) {
-    return m_pageActions.getAction(actionID);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link IAction} if it is implement by "Design" page, or <code>null</code>.
+	 */
+	public IAction getAction(String actionID) {
+		return m_pageActions.getAction(actionID);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Design access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * New model was parsed. We should display it.
-   */
-  @Override
-  public void refresh(ObjectInfo rootObject, IProgressMonitor monitor) {
-    m_rootObject = (JavaInfo) rootObject;
-    // refresh viewer's
-    {
-      monitor.subTask("Updating GEF viewer...");
-      monitor.worked(1);
-      m_viewer.setInput(new DesignRootObject(m_rootObject));
-      m_viewer.getControl().setDrawCached(false);
-    }
-    {
-      monitor.subTask("Updating Property Composite...");
-      monitor.worked(1);
-      m_componentsComposite.setInput(m_viewer, m_rootObject);
-    }
-    {
-      long start = System.currentTimeMillis();
-      monitor.subTask("Loading palette...");
-      monitor.worked(1);
-      {
-        String toolkitId = m_rootObject.getDescription().getToolkit().getId();
-        m_designerPalette.setInput(m_viewer, m_rootObject, toolkitId);
-      }
-      Debug.println("palette: " + (System.currentTimeMillis() - start));
-    }
-    {
-      monitor.subTask("Configuring errors action...");
-      monitor.worked(1);
-      m_pageActions.getErrorsAction().setRoot(m_rootObject);
-    }
-    // configure helpers
-    m_pageActions.setRoot(m_rootObject);
-    m_toolbarHelper.setRoot(m_rootObject);
-    m_viewersComposite.setRoot(m_rootObject);
-    new SelectSupport(rootObject, m_viewer, m_componentsComposite.getTreeViewer());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Design access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * New model was parsed. We should display it.
+	 */
+	@Override
+	public void refresh(ObjectInfo rootObject, IProgressMonitor monitor) {
+		m_rootObject = (JavaInfo) rootObject;
+		// refresh viewer's
+		{
+			monitor.subTask("Updating GEF viewer...");
+			monitor.worked(1);
+			m_viewer.setInput(new DesignRootObject(m_rootObject));
+			m_viewer.getControl().setDrawCached(false);
+		}
+		{
+			monitor.subTask("Updating Property Composite...");
+			monitor.worked(1);
+			m_componentsComposite.setInput(m_viewer, m_rootObject);
+		}
+		{
+			long start = System.currentTimeMillis();
+			monitor.subTask("Loading palette...");
+			monitor.worked(1);
+			{
+				String toolkitId = m_rootObject.getDescription().getToolkit().getId();
+				m_designerPalette.setInput(m_viewer, m_rootObject, toolkitId);
+			}
+			Debug.println("palette: " + (System.currentTimeMillis() - start));
+		}
+		{
+			monitor.subTask("Configuring errors action...");
+			monitor.worked(1);
+			m_pageActions.getErrorsAction().setRoot(m_rootObject);
+		}
+		// configure helpers
+		m_pageActions.setRoot(m_rootObject);
+		m_toolbarHelper.setRoot(m_rootObject);
+		m_viewersComposite.setRoot(m_rootObject);
+		new SelectSupport(rootObject, m_viewer, m_componentsComposite.getTreeViewer());
+	}
 
-  @Override
-  public void disposeDesign() {
-    super.disposeDesign();
-    // clear palette
-    if (!m_designerPalette.getControl().isDisposed()) {
-      m_designerPalette.setInput(m_viewer, null, null);
-    }
-  }
+	@Override
+	public void disposeDesign() {
+		super.disposeDesign();
+		// clear palette
+		if (!m_designerPalette.getControl().isDisposed()) {
+			m_designerPalette.setInput(m_viewer, null, null);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Structure/Palette reparenting access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private IExtractableControl m_extractablePalette;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Structure/Palette reparenting access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private IExtractableControl m_extractablePalette;
 
-  @Override
-  public IExtractableControl getExtractablePalette() {
-    if (m_extractablePalette == null) {
-      m_extractablePalette = new ExtractableControl(m_designerPalette.getControl(), this);
-    }
-    return m_extractablePalette;
-  }
+	@Override
+	public IExtractableControl getExtractablePalette() {
+		if (m_extractablePalette == null) {
+			m_extractablePalette = new ExtractableControl(m_designerPalette.getControl(), this);
+		}
+		return m_extractablePalette;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/JavaDesignToolbarHelper.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/JavaDesignToolbarHelper.java
index 14c693420..b500da2d7 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/JavaDesignToolbarHelper.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/JavaDesignToolbarHelper.java
@@ -28,68 +28,68 @@
  * @coverage core.editor
  */
 public final class JavaDesignToolbarHelper extends DesignToolbarHelper {
-  private DesignPageActions m_pageActions;
-  private ExternalizeStringsContributionItem m_externalizeItem;
+	private DesignPageActions m_pageActions;
+	private ExternalizeStringsContributionItem m_externalizeItem;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public JavaDesignToolbarHelper(ToolBar toolBar) {
-    super(toolBar);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public JavaDesignToolbarHelper(ToolBar toolBar) {
+		super(toolBar);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Initializes with {@link DesignPageActions} and {@link IEditPartViewer}.
-   */
-  public void initialize(DesignPageActions pageActions, IEditPartViewer viewer) {
-    super.initialize(viewer);
-    m_pageActions = pageActions;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Initializes with {@link DesignPageActions} and {@link IEditPartViewer}.
+	 */
+	public void initialize(DesignPageActions pageActions, IEditPartViewer viewer) {
+		super.initialize(viewer);
+		m_pageActions = pageActions;
+	}
 
-  /**
-   * Fills {@link ToolBar} with actions.
-   */
-  @Override
-  public void fill() {
-    {
-      m_toolBarManager.add(m_pageActions.getErrorsAction());
-      m_toolBarManager.add(new Separator());
-    }
-    {
-      m_toolBarManager.add(m_pageActions.getTestAction());
-      m_toolBarManager.add(m_pageActions.getRefreshAction());
-      m_toolBarManager.add(new Separator());
-    }
-    super.fill();
-    /* $if oem.name != "RIM" $ */
-    {
-      m_toolBarManager.add(m_pageActions.getAssistantAction());
-      m_toolBarManager.add(new Separator());
-    }
-    {
-      m_externalizeItem = new ExternalizeStringsContributionItem();
-      m_toolBarManager.add(m_externalizeItem);
-    }
-    /* $endif$ */
-    super.fill2();
-  }
+	/**
+	 * Fills {@link ToolBar} with actions.
+	 */
+	@Override
+	public void fill() {
+		{
+			m_toolBarManager.add(m_pageActions.getErrorsAction());
+			m_toolBarManager.add(new Separator());
+		}
+		{
+			m_toolBarManager.add(m_pageActions.getTestAction());
+			m_toolBarManager.add(m_pageActions.getRefreshAction());
+			m_toolBarManager.add(new Separator());
+		}
+		super.fill();
+		/* $if oem.name != "RIM" $ */
+		{
+			m_toolBarManager.add(m_pageActions.getAssistantAction());
+			m_toolBarManager.add(new Separator());
+		}
+		{
+			m_externalizeItem = new ExternalizeStringsContributionItem();
+			m_toolBarManager.add(m_externalizeItem);
+		}
+		/* $endif$ */
+		super.fill2();
+	}
 
-  /**
-   * Sets the root {@link JavaInfo} on {@link DesignPage}.
-   */
-  @Override
-  public void setRoot(ObjectInfo rootObject) {
-    super.setRoot(rootObject);
-    /* $if oem.name != "RIM" $ */
-    m_externalizeItem.setRoot((JavaInfo) rootObject);
-    /* $endif$ */
-    m_toolBarManager.getControl().getParent().layout();
-  }
+	/**
+	 * Sets the root {@link JavaInfo} on {@link DesignPage}.
+	 */
+	@Override
+	public void setRoot(ObjectInfo rootObject) {
+		super.setRoot(rootObject);
+		/* $if oem.name != "RIM" $ */
+		m_externalizeItem.setRoot((JavaInfo) rootObject);
+		/* $endif$ */
+		m_toolBarManager.getControl().getParent().layout();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/UndoManager.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/UndoManager.java
index 8f6554f7f..87ecd1181 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/UndoManager.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/UndoManager.java
@@ -45,352 +45,352 @@
  * @coverage core.editor
  */
 public final class UndoManager {
-  private final DesignPage m_designPage;
-  private final IBuffer m_buffer;
-  private final IFile m_unitFile;
-  @SuppressWarnings("unchecked")
-  private final Map<String, int[][]> m_sourceToSelection = new LRUMap(32);
-  @SuppressWarnings("unchecked")
-  private final Map<String, int[][]> m_dumpToSelection = new LRUMap(32);
-  @SuppressWarnings("unchecked")
-  private final Map<String, int[][]> m_dumpToExpanded = new LRUMap(32);
-  private IComponentsTree m_componentsTree;
-  private ISelectionProvider m_selectionProvider;
-  private ITreeContentProvider m_componentsProvider;
-  private ObjectPathHelper m_objectPathHelper;
-  private JavaInfo m_root;
-  private String m_currentSource;
-  private String m_currentDump;
+	private final DesignPage m_designPage;
+	private final IBuffer m_buffer;
+	private final IFile m_unitFile;
+	@SuppressWarnings("unchecked")
+	private final Map<String, int[][]> m_sourceToSelection = new LRUMap(32);
+	@SuppressWarnings("unchecked")
+	private final Map<String, int[][]> m_dumpToSelection = new LRUMap(32);
+	@SuppressWarnings("unchecked")
+	private final Map<String, int[][]> m_dumpToExpanded = new LRUMap(32);
+	private IComponentsTree m_componentsTree;
+	private ISelectionProvider m_selectionProvider;
+	private ITreeContentProvider m_componentsProvider;
+	private ObjectPathHelper m_objectPathHelper;
+	private JavaInfo m_root;
+	private String m_currentSource;
+	private String m_currentDump;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public UndoManager(DesignPage designPage, ICompilationUnit unit) throws Exception {
-    m_designPage = designPage;
-    m_buffer = unit.getBuffer();
-    m_unitFile = (IFile) unit.getUnderlyingResource();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public UndoManager(DesignPage designPage, ICompilationUnit unit) throws Exception {
+		m_designPage = designPage;
+		m_buffer = unit.getBuffer();
+		m_unitFile = (IFile) unit.getUnderlyingResource();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private boolean m_active;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private boolean m_active;
 
-  /**
-   * Activates {@link UndoManager}, so it starts listening for buffer changes.
-   */
-  public void activate() {
-    if (!m_active) {
-      m_active = true;
-      if (!StringUtils.equals(m_currentSource, m_buffer.getContents())) {
-        refreshDesignerEditor();
-      }
-      addBufferListener();
-    }
-  }
+	/**
+	 * Activates {@link UndoManager}, so it starts listening for buffer changes.
+	 */
+	public void activate() {
+		if (!m_active) {
+			m_active = true;
+			if (!StringUtils.equals(m_currentSource, m_buffer.getContents())) {
+				refreshDesignerEditor();
+			}
+			addBufferListener();
+		}
+	}
 
-  /**
-   * Deactivates {@link UndoManager}, so it stops listening for buffer changes.
-   */
-  public void deactivate() {
-    if (m_active) {
-      m_active = false;
-      removeBufferListener();
-    }
-  }
+	/**
+	 * Deactivates {@link UndoManager}, so it stops listening for buffer changes.
+	 */
+	public void deactivate() {
+		if (m_active) {
+			m_active = false;
+			removeBufferListener();
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final IASTEditorCommitListener m_editorListener = new IASTEditorCommitListener() {
-    @Override
-    public void aboutToCommit() {
-      removeBufferListener();
-    }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final IASTEditorCommitListener m_editorListener = new IASTEditorCommitListener() {
+		@Override
+		public void aboutToCommit() {
+			removeBufferListener();
+		}
 
-    @Override
-    public boolean canEditBaseFile() {
-      if (m_unitFile.isReadOnly()) {
-        ResourcesPlugin.getWorkspace().validateEdit(
-            new IFile[]{m_unitFile},
-            DesignerPlugin.getShell());
-        return !m_unitFile.isReadOnly();
-      }
-      return true;
-    }
+		@Override
+		public boolean canEditBaseFile() {
+			if (m_unitFile.isReadOnly()) {
+				ResourcesPlugin.getWorkspace().validateEdit(
+						new IFile[]{m_unitFile},
+						DesignerPlugin.getShell());
+				return !m_unitFile.isReadOnly();
+			}
+			return true;
+		}
 
-    @Override
-    public void commitDone() {
-      addBufferListener();
-    }
-  };
-  private final ObjectEventListener m_refreshListener = new ObjectEventListener() {
-    @Override
-    public void refreshBeforeCreate() throws Exception {
-      removeSelectionListener();
-    }
+		@Override
+		public void commitDone() {
+			addBufferListener();
+		}
+	};
+	private final ObjectEventListener m_refreshListener = new ObjectEventListener() {
+		@Override
+		public void refreshBeforeCreate() throws Exception {
+			removeSelectionListener();
+		}
 
-    @Override
-    public void refreshed2() throws Exception {
-      addSelectionListener();
-      rememberSource();
-      rememberDump();
-      rememberState();
-    }
-  };
+		@Override
+		public void refreshed2() throws Exception {
+			addSelectionListener();
+			rememberSource();
+			rememberDump();
+			rememberState();
+		}
+	};
 
-  /**
-   * Sets the new root {@link JavaInfo} in editor.
-   */
-  public void setRoot(JavaInfo root) {
-    m_root = root;
-    m_root.getEditor().setCommitListener(m_editorListener);
-    m_root.addBroadcastListener(m_refreshListener);
-    // get components tree
-    {
-      DesignPageSite site = DesignPageSite.Helper.getSite(m_root);
-      m_componentsTree = site.getComponentTree();
-      m_componentsProvider = m_componentsTree.getContentProvider();
-      m_selectionProvider = m_componentsTree.getSelectionProvider();
-      m_objectPathHelper = new ObjectPathHelper(m_componentsProvider);
-      // listen for tree expansion state
-      m_componentsTree.setExpandListener(new Runnable() {
-        @Override
-        public void run() {
-          Display.getCurrent().asyncExec(new Runnable() {
-            @Override
-            public void run() {
-              rememberState();
-            }
-          });
-        }
-      });
-    }
-  }
+	/**
+	 * Sets the new root {@link JavaInfo} in editor.
+	 */
+	public void setRoot(JavaInfo root) {
+		m_root = root;
+		m_root.getEditor().setCommitListener(m_editorListener);
+		m_root.addBroadcastListener(m_refreshListener);
+		// get components tree
+		{
+			DesignPageSite site = DesignPageSite.Helper.getSite(m_root);
+			m_componentsTree = site.getComponentTree();
+			m_componentsProvider = m_componentsTree.getContentProvider();
+			m_selectionProvider = m_componentsTree.getSelectionProvider();
+			m_objectPathHelper = new ObjectPathHelper(m_componentsProvider);
+			// listen for tree expansion state
+			m_componentsTree.setExpandListener(new Runnable() {
+				@Override
+				public void run() {
+					Display.getCurrent().asyncExec(new Runnable() {
+						@Override
+						public void run() {
+							rememberState();
+						}
+					});
+				}
+			});
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Selection listener
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final ISelectionChangedListener m_selectionListener = new ISelectionChangedListener() {
-    @Override
-    public void selectionChanged(SelectionChangedEvent event) {
-      rememberState();
-    }
-  };
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Selection listener
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final ISelectionChangedListener m_selectionListener = new ISelectionChangedListener() {
+		@Override
+		public void selectionChanged(SelectionChangedEvent event) {
+			rememberState();
+		}
+	};
 
-  /**
-   * Adds {@link ISelectionChangedListener}.
-   */
-  private void addSelectionListener() {
-    m_selectionProvider.addSelectionChangedListener(m_selectionListener);
-  }
+	/**
+	 * Adds {@link ISelectionChangedListener}.
+	 */
+	private void addSelectionListener() {
+		m_selectionProvider.addSelectionChangedListener(m_selectionListener);
+	}
 
-  /**
-   * Removes {@link ISelectionChangedListener}
-   */
-  private void removeSelectionListener() {
-    if (m_selectionProvider != null) {
-      m_selectionProvider.removeSelectionChangedListener(m_selectionListener);
-    }
-  }
+	/**
+	 * Removes {@link ISelectionChangedListener}
+	 */
+	private void removeSelectionListener() {
+		if (m_selectionProvider != null) {
+			m_selectionProvider.removeSelectionChangedListener(m_selectionListener);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Selection
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Remembers current source.
-   */
-  private void rememberSource() {
-    m_currentSource = m_buffer.getContents();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Selection
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Remembers current source.
+	 */
+	private void rememberSource() {
+		m_currentSource = m_buffer.getContents();
+	}
 
-  /**
-   * Remembers current dump.
-   */
-  private void rememberDump() {
-    m_currentDump = ObjectPathHelper.getObjectsDump(m_root, 0);
-  }
+	/**
+	 * Remembers current dump.
+	 */
+	private void rememberDump() {
+		m_currentDump = ObjectPathHelper.getObjectsDump(m_root, 0);
+	}
 
-  /**
-   * Remembers selected/expanded elements for current source.
-   */
-  private void rememberState() {
-    // selection
-    {
-      // prepare selected objects
-      Object[] selectedObjects;
-      {
-        IStructuredSelection structuredSelection =
-            (IStructuredSelection) m_selectionProvider.getSelection();
-        selectedObjects = structuredSelection.toArray();
-      }
-      // remember
-      int[][] paths = m_objectPathHelper.getObjectsPaths(selectedObjects);
-      m_sourceToSelection.put(m_currentSource, paths);
-      m_dumpToSelection.put(m_currentDump, paths);
-    }
-    // expanded
-    {
-      Object[] expandedObjects = m_componentsTree.getExpandedElements();
-      int[][] paths = m_objectPathHelper.getObjectsPaths(expandedObjects);
-      m_dumpToExpanded.put(m_currentDump, paths);
-    }
-  }
+	/**
+	 * Remembers selected/expanded elements for current source.
+	 */
+	private void rememberState() {
+		// selection
+		{
+			// prepare selected objects
+			Object[] selectedObjects;
+			{
+				IStructuredSelection structuredSelection =
+						(IStructuredSelection) m_selectionProvider.getSelection();
+				selectedObjects = structuredSelection.toArray();
+			}
+			// remember
+			int[][] paths = m_objectPathHelper.getObjectsPaths(selectedObjects);
+			m_sourceToSelection.put(m_currentSource, paths);
+			m_dumpToSelection.put(m_currentDump, paths);
+		}
+		// expanded
+		{
+			Object[] expandedObjects = m_componentsTree.getExpandedElements();
+			int[][] paths = m_objectPathHelper.getObjectsPaths(expandedObjects);
+			m_dumpToExpanded.put(m_currentDump, paths);
+		}
+	}
 
-  /**
-   * Tries to restore selected/expanded elements for current source.
-   */
-  private void restoreState() {
-    restoreSelection();
-    restoreExpanded();
-  }
+	/**
+	 * Tries to restore selected/expanded elements for current source.
+	 */
+	private void restoreState() {
+		restoreSelection();
+		restoreExpanded();
+	}
 
-  /**
-   * Tries to restore selected elements for current source.
-   */
-  private void restoreSelection() {
-    // prepare selection
-    int[][] paths;
-    {
-      // get "source based" selection
-      paths = m_sourceToSelection.get(m_currentSource);
-      // if no "source based" selection, use "dump based" one
-      if (paths == null) {
-        paths = m_dumpToSelection.get(m_currentDump);
-      }
-    }
-    // do restore
-    if (paths != null) {
-      removeSelectionListener();
-      try {
-        Object[] objects = m_objectPathHelper.getObjectsForPaths(paths);
-        m_selectionProvider.setSelection(new StructuredSelection(objects));
-      } finally {
-        addSelectionListener();
-      }
-    }
-  }
+	/**
+	 * Tries to restore selected elements for current source.
+	 */
+	private void restoreSelection() {
+		// prepare selection
+		int[][] paths;
+		{
+			// get "source based" selection
+			paths = m_sourceToSelection.get(m_currentSource);
+			// if no "source based" selection, use "dump based" one
+			if (paths == null) {
+				paths = m_dumpToSelection.get(m_currentDump);
+			}
+		}
+		// do restore
+		if (paths != null) {
+			removeSelectionListener();
+			try {
+				Object[] objects = m_objectPathHelper.getObjectsForPaths(paths);
+				m_selectionProvider.setSelection(new StructuredSelection(objects));
+			} finally {
+				addSelectionListener();
+			}
+		}
+	}
 
-  /**
-   * Tries to restore expanded elements for current source.
-   */
-  private void restoreExpanded() {
-    int[][] paths = m_dumpToExpanded.get(m_currentDump);
-    // do restore
-    if (paths != null) {
-      Object[] objects = m_objectPathHelper.getObjectsForPaths(paths);
-      m_componentsTree.setExpandedElements(objects);
-    }
-    // if no expanded element, perform default expansion
-    if (m_componentsTree.getExpandedElements().length == 0) {
-      List<Object> expandedElements = Lists.newArrayList();
-      Object element = m_root;
-      while (true) {
-        expandedElements.add(element);
-        Object[] children = m_componentsProvider.getChildren(element);
-        if (children.length != 1) {
-          break;
-        }
-        element = children[0];
-      }
-      m_componentsTree.setExpandedElements(expandedElements.toArray());
-    }
-  }
+	/**
+	 * Tries to restore expanded elements for current source.
+	 */
+	private void restoreExpanded() {
+		int[][] paths = m_dumpToExpanded.get(m_currentDump);
+		// do restore
+		if (paths != null) {
+			Object[] objects = m_objectPathHelper.getObjectsForPaths(paths);
+			m_componentsTree.setExpandedElements(objects);
+		}
+		// if no expanded element, perform default expansion
+		if (m_componentsTree.getExpandedElements().length == 0) {
+			List<Object> expandedElements = Lists.newArrayList();
+			Object element = m_root;
+			while (true) {
+				expandedElements.add(element);
+				Object[] children = m_componentsProvider.getChildren(element);
+				if (children.length != 1) {
+					break;
+				}
+				element = children[0];
+			}
+			m_componentsTree.setExpandedElements(expandedElements.toArray());
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Buffer listener
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private int m_bufferChangeCount = 0;
-  private final IBufferChangedListener m_bufferListener = new IBufferChangedListener() {
-    @Override
-    public void bufferChanged(BufferChangedEvent event) {
-      if (!m_designPage.isActiveEditor()) {
-        return;
-      }
-      if (event.getText() != null || event.getLength() != 0) {
-        scheduleRefresh_onBufferChange();
-      }
-    }
-  };
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Buffer listener
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private int m_bufferChangeCount = 0;
+	private final IBufferChangedListener m_bufferListener = new IBufferChangedListener() {
+		@Override
+		public void bufferChanged(BufferChangedEvent event) {
+			if (!m_designPage.isActiveEditor()) {
+				return;
+			}
+			if (event.getText() != null || event.getLength() != 0) {
+				scheduleRefresh_onBufferChange();
+			}
+		}
+	};
 
-  private void scheduleRefresh_onBufferChange() {
-    final int bufferChangeCount = ++m_bufferChangeCount;
-    Runnable runnable = new Runnable() {
-      @Override
-      public void run() {
-        if (isStillInSave()) {
-          Display.getDefault().timerExec(1, this);
-          return;
-        }
-        if (bufferChangeCount == m_bufferChangeCount) {
-          refreshDesignerEditor();
-        }
-      }
+	private void scheduleRefresh_onBufferChange() {
+		final int bufferChangeCount = ++m_bufferChangeCount;
+		Runnable runnable = new Runnable() {
+			@Override
+			public void run() {
+				if (isStillInSave()) {
+					Display.getDefault().timerExec(1, this);
+					return;
+				}
+				if (bufferChangeCount == m_bufferChangeCount) {
+					refreshDesignerEditor();
+				}
+			}
 
-      /**
-       * Save operation may run event loops, so wait for finishing "doSave()" to reparse when save
-       * is complete. This allows also avoid deadlock in case if we will join to wait for finishing
-       * auto build job.
-       */
-      private boolean isStillInSave() {
-        String editorClassName = "org.eclipse.wb.internal.core.editor.multi.DesignerEditor";
-        StackTraceElement[] elements = new Exception().getStackTrace();
-        for (StackTraceElement element : elements) {
-          if (element.getClassName().equals(editorClassName)) {
-            if (element.getMethodName().equals("doSave")) {
-              return true;
-            }
-          }
-        }
-        return false;
-      }
-    };
-    Display.getDefault().asyncExec(runnable);
-  }
+			/**
+			 * Save operation may run event loops, so wait for finishing "doSave()" to reparse when save
+			 * is complete. This allows also avoid deadlock in case if we will join to wait for finishing
+			 * auto build job.
+			 */
+			private boolean isStillInSave() {
+				String editorClassName = "org.eclipse.wb.internal.core.editor.multi.DesignerEditor";
+				StackTraceElement[] elements = new Exception().getStackTrace();
+				for (StackTraceElement element : elements) {
+					if (element.getClassName().equals(editorClassName)) {
+						if (element.getMethodName().equals("doSave")) {
+							return true;
+						}
+					}
+				}
+				return false;
+			}
+		};
+		Display.getDefault().asyncExec(runnable);
+	}
 
-  /**
-   * Adds {@link IBufferChangedListener}.
-   */
-  private void addBufferListener() {
-    m_buffer.addBufferChangedListener(m_bufferListener);
-  }
+	/**
+	 * Adds {@link IBufferChangedListener}.
+	 */
+	private void addBufferListener() {
+		m_buffer.addBufferChangedListener(m_bufferListener);
+	}
 
-  /**
-   * Removes {@link IBufferChangedListener}.
-   */
-  private void removeBufferListener() {
-    m_buffer.removeBufferChangedListener(m_bufferListener);
-  }
+	/**
+	 * Removes {@link IBufferChangedListener}.
+	 */
+	private void removeBufferListener() {
+		m_buffer.removeBufferChangedListener(m_bufferListener);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Informs {@link DesignPage} that buffer was changed and reparse required.
-   */
-  void refreshDesignerEditor() {
-    rememberSource();
-    // refresh viewer
-    removeSelectionListener();
-    if (m_designPage.internal_refreshGEF()) {
-      addSelectionListener();
-      // restore selection
-      rememberDump();
-      restoreState();
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Informs {@link DesignPage} that buffer was changed and reparse required.
+	 */
+	void refreshDesignerEditor() {
+		rememberSource();
+		// refresh viewer
+		removeSelectionListener();
+		if (m_designPage.internal_refreshGEF()) {
+			addSelectionListener();
+			// restore selection
+			rememberDump();
+			restoreState();
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/actions/CopyAction.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/actions/CopyAction.java
index 1cece3ea4..15c1724d5 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/actions/CopyAction.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/actions/CopyAction.java
@@ -39,148 +39,148 @@
  * @coverage core.editor.action
  */
 public class CopyAction extends Action {
-  private final IEditPartViewer m_viewer;
+	private final IEditPartViewer m_viewer;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CopyAction(IEditPartViewer viewer) {
-    m_viewer = viewer;
-    m_viewer.addSelectionChangedListener(new ISelectionChangedListener() {
-      @Override
-      public void selectionChanged(SelectionChangedEvent event) {
-        firePropertyChange(ENABLED, null, isEnabled() ? Boolean.TRUE : Boolean.FALSE);
-      }
-    });
-    // copy presentation
-    ActionUtils.copyPresentation(this, ActionFactory.COPY);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CopyAction(IEditPartViewer viewer) {
+		m_viewer = viewer;
+		m_viewer.addSelectionChangedListener(new ISelectionChangedListener() {
+			@Override
+			public void selectionChanged(SelectionChangedEvent event) {
+				firePropertyChange(ENABLED, null, isEnabled() ? Boolean.TRUE : Boolean.FALSE);
+			}
+		});
+		// copy presentation
+		ActionUtils.copyPresentation(this, ActionFactory.COPY);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Action
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private List<JavaInfoMemento> m_mementos;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Action
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private List<JavaInfoMemento> m_mementos;
 
-  @Override
-  public void run() {
-    ExecutionUtils.runLog(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        List<EditPart> editParts = m_viewer.getSelectedEditParts();
-        m_mementos = getMementos(editParts);
-        doCopy(m_mementos);
-      }
-    });
-  }
+	@Override
+	public void run() {
+		ExecutionUtils.runLog(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				List<EditPart> editParts = m_viewer.getSelectedEditParts();
+				m_mementos = getMementos(editParts);
+				doCopy(m_mementos);
+			}
+		});
+	}
 
-  @Override
-  public boolean isEnabled() {
-    List<EditPart> editParts = m_viewer.getSelectedEditParts();
-    return hasMementos(editParts);
-  }
+	@Override
+	public boolean isEnabled() {
+		List<EditPart> editParts = m_viewer.getSelectedEditParts();
+		return hasMementos(editParts);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Memento
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Copies {@link JavaInfoMemento}'s into {@link Clipboard}.
-   */
-  static void doCopy(List<JavaInfoMemento> mementos) {
-    if (mementos != null) {
-      Clipboard clipboard = new Clipboard(Display.getCurrent());
-      try {
-        clipboard.setContents(
-            new Object[]{mementos},
-            new Transfer[]{JavaInfoMementoTransfer.getInstance()});
-      } finally {
-        clipboard.dispose();
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Memento
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Copies {@link JavaInfoMemento}'s into {@link Clipboard}.
+	 */
+	static void doCopy(List<JavaInfoMemento> mementos) {
+		if (mementos != null) {
+			Clipboard clipboard = new Clipboard(Display.getCurrent());
+			try {
+				clipboard.setContents(
+						new Object[]{mementos},
+						new Transfer[]{JavaInfoMementoTransfer.getInstance()});
+			} finally {
+				clipboard.dispose();
+			}
+		}
+	}
 
-  /**
-   * @return <code>true</code> if given {@link JavaInfo}'s can be copy/pasted.
-   */
-  static boolean hasMementos(final List<EditPart> editParts) {
-    return ExecutionUtils.runObjectLog(new RunnableObjectEx<Boolean>() {
-      @Override
-      public Boolean runObject() throws Exception {
-        // selection required
-        if (editParts.isEmpty()) {
-          return false;
-        }
-        // check that JavaInfoMemento's can be created
-        for (EditPart editPart : editParts) {
-          // prepare model
-          JavaInfo javaInfo;
-          {
-            Object model = editPart.getModel();
-            if (model instanceof JavaInfo) {
-              javaInfo = (JavaInfo) model;
-            } else {
-              return false;
-            }
-          }
-          // check for memento
-          if (!JavaInfoMemento.hasMemento(javaInfo)) {
-            return false;
-          }
-        }
-        // OK
-        return true;
-      }
-    }, false);
-  }
+	/**
+	 * @return <code>true</code> if given {@link JavaInfo}'s can be copy/pasted.
+	 */
+	static boolean hasMementos(final List<EditPart> editParts) {
+		return ExecutionUtils.runObjectLog(new RunnableObjectEx<Boolean>() {
+			@Override
+			public Boolean runObject() throws Exception {
+				// selection required
+				if (editParts.isEmpty()) {
+					return false;
+				}
+				// check that JavaInfoMemento's can be created
+				for (EditPart editPart : editParts) {
+					// prepare model
+					JavaInfo javaInfo;
+					{
+						Object model = editPart.getModel();
+						if (model instanceof JavaInfo) {
+							javaInfo = (JavaInfo) model;
+						} else {
+							return false;
+						}
+					}
+					// check for memento
+					if (!JavaInfoMemento.hasMemento(javaInfo)) {
+						return false;
+					}
+				}
+				// OK
+				return true;
+			}
+		}, false);
+	}
 
-  /**
-   * @return the {@link JavaInfoMemento}'s with copy/paste information for given {@link JavaInfo}'s.
-   */
-  @SuppressWarnings({"unchecked", "rawtypes"})
-  static List<JavaInfoMemento> getMementos(final List<EditPart> editParts) {
-    return (List<JavaInfoMemento>) ExecutionUtils.runObjectLog(new RunnableObjectEx() {
-      @Override
-      public Object runObject() throws Exception {
-        return getMemento0(editParts);
-      }
-    }, null);
-  }
+	/**
+	 * @return the {@link JavaInfoMemento}'s with copy/paste information for given {@link JavaInfo}'s.
+	 */
+	@SuppressWarnings({"unchecked", "rawtypes"})
+	static List<JavaInfoMemento> getMementos(final List<EditPart> editParts) {
+		return (List<JavaInfoMemento>) ExecutionUtils.runObjectLog(new RunnableObjectEx() {
+			@Override
+			public Object runObject() throws Exception {
+				return getMemento0(editParts);
+			}
+		}, null);
+	}
 
-  private static List<JavaInfoMemento> getMemento0(List<EditPart> editParts) throws Exception {
-    // prepare objects
-    List<JavaInfo> objects = Lists.newArrayList();
-    for (EditPart editPart : editParts) {
-      // prepare object
-      JavaInfo object;
-      {
-        Object model = editPart.getModel();
-        if (!(model instanceof JavaInfo)) {
-          return null;
-        }
-        object = (JavaInfo) model;
-      }
-      // add object
-      objects.add(object);
-    }
-    // don't copy child, if we copy its parent
-    for (Iterator<JavaInfo> I = objects.iterator(); I.hasNext();) {
-      JavaInfo object = I.next();
-      if (object.getParent(objects) != null) {
-        I.remove();
-      }
-    }
-    // prepare mementos
-    List<JavaInfoMemento> mementos = Lists.newArrayList();
-    for (JavaInfo object : objects) {
-      JavaInfoMemento memento = JavaInfoMemento.createMemento(object);
-      mementos.add(memento);
-    }
-    // OK, final result
-    return mementos;
-  }
+	private static List<JavaInfoMemento> getMemento0(List<EditPart> editParts) throws Exception {
+		// prepare objects
+		List<JavaInfo> objects = Lists.newArrayList();
+		for (EditPart editPart : editParts) {
+			// prepare object
+			JavaInfo object;
+			{
+				Object model = editPart.getModel();
+				if (!(model instanceof JavaInfo)) {
+					return null;
+				}
+				object = (JavaInfo) model;
+			}
+			// add object
+			objects.add(object);
+		}
+		// don't copy child, if we copy its parent
+		for (Iterator<JavaInfo> I = objects.iterator(); I.hasNext();) {
+			JavaInfo object = I.next();
+			if (object.getParent(objects) != null) {
+				I.remove();
+			}
+		}
+		// prepare mementos
+		List<JavaInfoMemento> mementos = Lists.newArrayList();
+		for (JavaInfo object : objects) {
+			JavaInfoMemento memento = JavaInfoMemento.createMemento(object);
+			mementos.add(memento);
+		}
+		// OK, final result
+		return mementos;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/actions/CutAction.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/actions/CutAction.java
index 6540e6325..72d0a924c 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/actions/CutAction.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/actions/CutAction.java
@@ -31,53 +31,53 @@
  * @coverage core.editor.action
  */
 public class CutAction extends Action {
-  private final IEditPartViewer m_viewer;
+	private final IEditPartViewer m_viewer;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CutAction(IEditPartViewer viewer) {
-    m_viewer = viewer;
-    m_viewer.addSelectionChangedListener(new ISelectionChangedListener() {
-      @Override
-      public void selectionChanged(SelectionChangedEvent event) {
-        firePropertyChange(ENABLED, null, isEnabled() ? Boolean.TRUE : Boolean.FALSE);
-      }
-    });
-    // copy presentation
-    ActionUtils.copyPresentation(this, ActionFactory.CUT);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CutAction(IEditPartViewer viewer) {
+		m_viewer = viewer;
+		m_viewer.addSelectionChangedListener(new ISelectionChangedListener() {
+			@Override
+			public void selectionChanged(SelectionChangedEvent event) {
+				firePropertyChange(ENABLED, null, isEnabled() ? Boolean.TRUE : Boolean.FALSE);
+			}
+		});
+		// copy presentation
+		ActionUtils.copyPresentation(this, ActionFactory.CUT);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Action
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Command m_command;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Action
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Command m_command;
 
-  @Override
-  public void run() {
-    ExecutionUtils.runLog(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        // copy
-        {
-          List<EditPart> editParts = m_viewer.getSelectedEditParts();
-          List<JavaInfoMemento> m_mementos = CopyAction.getMementos(editParts);
-          CopyAction.doCopy(m_mementos);
-        }
-        // delete
-        m_viewer.getEditDomain().executeCommand(m_command);
-      }
-    });
-  }
+	@Override
+	public void run() {
+		ExecutionUtils.runLog(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				// copy
+				{
+					List<EditPart> editParts = m_viewer.getSelectedEditParts();
+					List<JavaInfoMemento> m_mementos = CopyAction.getMementos(editParts);
+					CopyAction.doCopy(m_mementos);
+				}
+				// delete
+				m_viewer.getEditDomain().executeCommand(m_command);
+			}
+		});
+	}
 
-  @Override
-  public boolean isEnabled() {
-    List<EditPart> editParts = m_viewer.getSelectedEditParts();
-    m_command = DeleteAction.getCommand(editParts);
-    return CopyAction.hasMementos(editParts) && m_command != null;
-  }
+	@Override
+	public boolean isEnabled() {
+		List<EditPart> editParts = m_viewer.getSelectedEditParts();
+		m_command = DeleteAction.getCommand(editParts);
+		return CopyAction.hasMementos(editParts) && m_command != null;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/actions/DesignPageAction.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/actions/DesignPageAction.java
index d94e9b56b..d0c10a3d3 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/actions/DesignPageAction.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/actions/DesignPageAction.java
@@ -21,27 +21,27 @@
  * @coverage core.editor.action
  */
 public abstract class DesignPageAction extends EditorRelatedAction {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IAction
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final void run() {
-    DesignerEditor editor = getEditor();
-    if (editor != null) {
-      IDesignPage designPage = editor.getMultiMode().getDesignPage();
-      run(designPage);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IAction
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final void run() {
+		DesignerEditor editor = getEditor();
+		if (editor != null) {
+			IDesignPage designPage = editor.getMultiMode().getDesignPage();
+			run(designPage);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // DesignPageAction
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Runs the action with given {@link DesignPage}.
-   */
-  protected abstract void run(IDesignPage designPage);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// DesignPageAction
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Runs the action with given {@link DesignPage}.
+	 */
+	protected abstract void run(IDesignPage designPage);
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/actions/DesignPageActions.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/actions/DesignPageActions.java
index 324e74e3f..ef640f205 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/actions/DesignPageActions.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/actions/DesignPageActions.java
@@ -33,174 +33,174 @@
  * @coverage core.editor.action
  */
 public final class DesignPageActions {
-  private final IEditPartViewer m_viewer;
-  private final IActionBars m_actionBars;
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Actions
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final IAction m_cutAction;
-  private final IAction m_copyAction;
-  private final IAction m_pasteAction;
-  private final IAction m_deleteAction;
-  private final TestAction m_testAction;
-  private final IAction m_refreshAction;
-  private final ErrorsAction m_errorsAction;
-  private final LayoutAssistantAction m_assistantAction;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Initializes new {@link DesignPageActions}.
-   *
-   * @param viewer
-   *          the {@link IEditPartViewer} of {@link DesignPage}.
-   * @param actionBars
-   *          the editor site {@link IActionBars}.
-   */
-  public DesignPageActions(IEditorPart editor, IEditPartViewer viewer) {
-    m_viewer = viewer;
-    m_actionBars = editor.getEditorSite().getActionBars();
-    //
-    m_errorsAction = new ErrorsAction();
-    m_cutAction = new CutAction(m_viewer);
-    m_copyAction = new CopyAction(m_viewer);
-    m_pasteAction = new PasteAction(m_viewer);
-    m_deleteAction = new DeleteAction(m_viewer);
-    m_testAction = new TestAction();
-    m_refreshAction = new RefreshAction();
-    m_assistantAction = new LayoutAssistantAction(editor, viewer);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void setRoot(JavaInfo root) {
-    m_testAction.setRoot(root);
-    m_assistantAction.setRoot(root);
-  }
-
-  public ErrorsAction getErrorsAction() {
-    return m_errorsAction;
-  }
-
-  public IAction getCutAction() {
-    return m_cutAction;
-  }
-
-  public IAction getCopyAction() {
-    return m_copyAction;
-  }
-
-  public IAction getPasteAction() {
-    return m_pasteAction;
-  }
-
-  public IAction getDeleteAction() {
-    return m_deleteAction;
-  }
-
-  public IAction getTestAction() {
-    return m_testAction;
-  }
-
-  public IAction getRefreshAction() {
-    return m_refreshAction;
-  }
-
-  public LayoutAssistantAction getAssistantAction() {
-    return m_assistantAction;
-  }
-
-  /**
-   * @return the {@link IAction} if it is implement by "Design" page, or <code>null</code>.
-   */
-  public IAction getAction(String actionID) {
-    try {
-      for (Field field : getClass().getDeclaredFields()) {
-        Object fieldObject = field.get(this);
-        if (fieldObject instanceof IAction) {
-          IAction action = (IAction) fieldObject;
-          if (actionID.equals(action.getId())) {
-            return action;
-          }
-        }
-      }
-    } catch (Throwable e) {
-    }
-    return null;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Life cycle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final Map<String, IAction> m_originalActions = Maps.newTreeMap();
-
-  /**
-   * Installs Designer handlers for global actions.
-   */
-  public void installActions() {
-    m_assistantAction.showWindow();
-    installAction(m_cutAction);
-    installAction(m_copyAction);
-    installAction(m_pasteAction);
-    installAction(m_deleteAction);
-    installAction(m_refreshAction);
-    installEmptyAction(ActionFactory.SELECT_ALL.getId());
-    m_actionBars.updateActionBars();
-  }
-
-  /**
-   * Installs single handler for global action with given <code>id</code>.
-   */
-  private void installAction(IAction action) {
-    String id = action.getId();
-    IAction oldAction = m_actionBars.getGlobalActionHandler(id);
-    if (!m_originalActions.containsKey(id)) {
-      m_originalActions.put(id, oldAction);
-      m_actionBars.setGlobalActionHandler(id, action);
-    }
-  }
-
-  /**
-   * Remove handler for global action with given <code>id</code>.
-   */
-  private void installEmptyAction(String id) {
-    IAction oldAction = m_actionBars.getGlobalActionHandler(id);
-    if (!m_originalActions.containsKey(id)) {
-      m_originalActions.put(id, oldAction);
-      m_actionBars.setGlobalActionHandler(id, null);
-    }
-  }
-
-  /**
-   * Uninstalls actions installed by {@link #installActions()} and restores original ones.
-   */
-  public void uninstallActions() {
-    m_assistantAction.hideWindow();
-    //
-    for (Map.Entry<String, IAction> entry : m_originalActions.entrySet()) {
-      String id = entry.getKey();
-      IAction action = entry.getValue();
-      m_actionBars.setGlobalActionHandler(id, action);
-    }
-    m_originalActions.clear();
-    //
-    m_actionBars.updateActionBars();
-  }
-
-  /**
-   * Disposed actions created for this {@link DesignPage}.
-   */
-  public void dispose() {
-    m_assistantAction.closeWindow();
-  }
+	private final IEditPartViewer m_viewer;
+	private final IActionBars m_actionBars;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Actions
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final IAction m_cutAction;
+	private final IAction m_copyAction;
+	private final IAction m_pasteAction;
+	private final IAction m_deleteAction;
+	private final TestAction m_testAction;
+	private final IAction m_refreshAction;
+	private final ErrorsAction m_errorsAction;
+	private final LayoutAssistantAction m_assistantAction;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Initializes new {@link DesignPageActions}.
+	 *
+	 * @param viewer
+	 *          the {@link IEditPartViewer} of {@link DesignPage}.
+	 * @param actionBars
+	 *          the editor site {@link IActionBars}.
+	 */
+	public DesignPageActions(IEditorPart editor, IEditPartViewer viewer) {
+		m_viewer = viewer;
+		m_actionBars = editor.getEditorSite().getActionBars();
+		//
+		m_errorsAction = new ErrorsAction();
+		m_cutAction = new CutAction(m_viewer);
+		m_copyAction = new CopyAction(m_viewer);
+		m_pasteAction = new PasteAction(m_viewer);
+		m_deleteAction = new DeleteAction(m_viewer);
+		m_testAction = new TestAction();
+		m_refreshAction = new RefreshAction();
+		m_assistantAction = new LayoutAssistantAction(editor, viewer);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void setRoot(JavaInfo root) {
+		m_testAction.setRoot(root);
+		m_assistantAction.setRoot(root);
+	}
+
+	public ErrorsAction getErrorsAction() {
+		return m_errorsAction;
+	}
+
+	public IAction getCutAction() {
+		return m_cutAction;
+	}
+
+	public IAction getCopyAction() {
+		return m_copyAction;
+	}
+
+	public IAction getPasteAction() {
+		return m_pasteAction;
+	}
+
+	public IAction getDeleteAction() {
+		return m_deleteAction;
+	}
+
+	public IAction getTestAction() {
+		return m_testAction;
+	}
+
+	public IAction getRefreshAction() {
+		return m_refreshAction;
+	}
+
+	public LayoutAssistantAction getAssistantAction() {
+		return m_assistantAction;
+	}
+
+	/**
+	 * @return the {@link IAction} if it is implement by "Design" page, or <code>null</code>.
+	 */
+	public IAction getAction(String actionID) {
+		try {
+			for (Field field : getClass().getDeclaredFields()) {
+				Object fieldObject = field.get(this);
+				if (fieldObject instanceof IAction) {
+					IAction action = (IAction) fieldObject;
+					if (actionID.equals(action.getId())) {
+						return action;
+					}
+				}
+			}
+		} catch (Throwable e) {
+		}
+		return null;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Life cycle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final Map<String, IAction> m_originalActions = Maps.newTreeMap();
+
+	/**
+	 * Installs Designer handlers for global actions.
+	 */
+	public void installActions() {
+		m_assistantAction.showWindow();
+		installAction(m_cutAction);
+		installAction(m_copyAction);
+		installAction(m_pasteAction);
+		installAction(m_deleteAction);
+		installAction(m_refreshAction);
+		installEmptyAction(ActionFactory.SELECT_ALL.getId());
+		m_actionBars.updateActionBars();
+	}
+
+	/**
+	 * Installs single handler for global action with given <code>id</code>.
+	 */
+	private void installAction(IAction action) {
+		String id = action.getId();
+		IAction oldAction = m_actionBars.getGlobalActionHandler(id);
+		if (!m_originalActions.containsKey(id)) {
+			m_originalActions.put(id, oldAction);
+			m_actionBars.setGlobalActionHandler(id, action);
+		}
+	}
+
+	/**
+	 * Remove handler for global action with given <code>id</code>.
+	 */
+	private void installEmptyAction(String id) {
+		IAction oldAction = m_actionBars.getGlobalActionHandler(id);
+		if (!m_originalActions.containsKey(id)) {
+			m_originalActions.put(id, oldAction);
+			m_actionBars.setGlobalActionHandler(id, null);
+		}
+	}
+
+	/**
+	 * Uninstalls actions installed by {@link #installActions()} and restores original ones.
+	 */
+	public void uninstallActions() {
+		m_assistantAction.hideWindow();
+		//
+		for (Map.Entry<String, IAction> entry : m_originalActions.entrySet()) {
+			String id = entry.getKey();
+			IAction action = entry.getValue();
+			m_actionBars.setGlobalActionHandler(id, action);
+		}
+		m_originalActions.clear();
+		//
+		m_actionBars.updateActionBars();
+	}
+
+	/**
+	 * Disposed actions created for this {@link DesignPage}.
+	 */
+	public void dispose() {
+		m_assistantAction.closeWindow();
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/actions/EditorRelatedAction.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/actions/EditorRelatedAction.java
index 0c584424f..9e23b3073 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/actions/EditorRelatedAction.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/actions/EditorRelatedAction.java
@@ -26,62 +26,62 @@
  * @coverage core.editor.action
  */
 public abstract class EditorRelatedAction extends Action implements IEditorActionDelegate {
-  private DesignerEditor m_editor;
+	private DesignerEditor m_editor;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IEditorActionDelegate
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final void setActiveEditor(IAction action, IEditorPart editor) {
-    m_editor = null;
-    if (editor instanceof DesignerEditor) {
-      m_editor = (DesignerEditor) editor;
-    }
-    setEnabled(m_editor != null);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IEditorActionDelegate
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final void setActiveEditor(IAction action, IEditorPart editor) {
+		m_editor = null;
+		if (editor instanceof DesignerEditor) {
+			m_editor = (DesignerEditor) editor;
+		}
+		setEnabled(m_editor != null);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IActionDelegate
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void selectionChanged(IAction action, ISelection selection) {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IActionDelegate
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void selectionChanged(IAction action, ISelection selection) {
+	}
 
-  @Override
-  public void run(IAction action) {
-    run();
-  }
+	@Override
+	public void run(IAction action) {
+		run();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the active {@link DesignerEditor}.
-   */
-  protected final DesignerEditor getEditor() {
-    DesignerEditor designerEditor = m_editor;
-    if (designerEditor == null) {
-      designerEditor = getActiveEditor();
-    }
-    //
-    return designerEditor;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the active {@link DesignerEditor}.
+	 */
+	protected final DesignerEditor getEditor() {
+		DesignerEditor designerEditor = m_editor;
+		if (designerEditor == null) {
+			designerEditor = getActiveEditor();
+		}
+		//
+		return designerEditor;
+	}
 
-  /**
-   * @return the active {@link DesignerEditor}.
-   */
-  static DesignerEditor getActiveEditor() {
-    IEditorPart editor =
-        DesignerPlugin.getActiveWorkbenchWindow().getActivePage().getActiveEditor();
-    if (editor != null && editor instanceof DesignerEditor) {
-      return (DesignerEditor) editor;
-    }
-    return null;
-  }
+	/**
+	 * @return the active {@link DesignerEditor}.
+	 */
+	static DesignerEditor getActiveEditor() {
+		IEditorPart editor =
+				DesignerPlugin.getActiveWorkbenchWindow().getActivePage().getActiveEditor();
+		if (editor != null && editor instanceof DesignerEditor) {
+			return (DesignerEditor) editor;
+		}
+		return null;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/actions/PasteAction.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/actions/PasteAction.java
index 095dac411..b52e12d7d 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/actions/PasteAction.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/actions/PasteAction.java
@@ -31,56 +31,56 @@
  * @coverage core.editor.action
  */
 public class PasteAction extends Action {
-  private final IEditPartViewer m_viewer;
+	private final IEditPartViewer m_viewer;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public PasteAction(IEditPartViewer viewer) {
-    m_viewer = viewer;
-    // copy presentation
-    ActionUtils.copyPresentation(this, ActionFactory.PASTE);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public PasteAction(IEditPartViewer viewer) {
+		m_viewer = viewer;
+		// copy presentation
+		ActionUtils.copyPresentation(this, ActionFactory.PASTE);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Action
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void run() {
-    // check for SWT paste
-    {
-      Control focusControl = Display.getCurrent().getFocusControl();
-      if (focusControl instanceof Text) {
-        ((Text) focusControl).paste();
-        return;
-      }
-    }
-    // do JavaInfo paste
-    List<JavaInfoMemento> mementos = getMementos();
-    if (mementos != null) {
-      m_viewer.getEditDomain().setActiveTool(new PasteTool(mementos));
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Action
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void run() {
+		// check for SWT paste
+		{
+			Control focusControl = Display.getCurrent().getFocusControl();
+			if (focusControl instanceof Text) {
+				((Text) focusControl).paste();
+				return;
+			}
+		}
+		// do JavaInfo paste
+		List<JavaInfoMemento> mementos = getMementos();
+		if (mementos != null) {
+			m_viewer.getEditDomain().setActiveTool(new PasteTool(mementos));
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the array of {@link JavaInfoMemento} in {@link Clipboard}.
-   */
-  @SuppressWarnings("unchecked")
-  private static List<JavaInfoMemento> getMementos() {
-    Clipboard clipboard = new Clipboard(Display.getCurrent());
-    try {
-      return (List<JavaInfoMemento>) clipboard.getContents(JavaInfoMementoTransfer.getInstance());
-    } finally {
-      clipboard.dispose();
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the array of {@link JavaInfoMemento} in {@link Clipboard}.
+	 */
+	@SuppressWarnings("unchecked")
+	private static List<JavaInfoMemento> getMementos() {
+		Clipboard clipboard = new Clipboard(Display.getCurrent());
+		try {
+			return (List<JavaInfoMemento>) clipboard.getContents(JavaInfoMementoTransfer.getInstance());
+		} finally {
+			clipboard.dispose();
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/actions/RefreshAction.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/actions/RefreshAction.java
index 32f6e79a3..49aa2a479 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/actions/RefreshAction.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/actions/RefreshAction.java
@@ -23,26 +23,26 @@
  * @coverage core.editor.action
  */
 public final class RefreshAction extends DesignPageAction {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public RefreshAction() {
-    // copy presentation
-    ActionUtils.copyPresentation(this, ActionFactory.REFRESH);
-    // override presentation
-    setToolTipText("Reparse the source and refresh the design page");
-    setImageDescriptor(DesignerPlugin.getImageDescriptor("editor_refresh.png"));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public RefreshAction() {
+		// copy presentation
+		ActionUtils.copyPresentation(this, ActionFactory.REFRESH);
+		// override presentation
+		setToolTipText("Reparse the source and refresh the design page");
+		setImageDescriptor(DesignerPlugin.getImageDescriptor("editor_refresh.png"));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // DesignPageAction
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void run(IDesignPage designPage) {
-    designPage.refreshGEF();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// DesignPageAction
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void run(IDesignPage designPage) {
+		designPage.refreshGEF();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/actions/SwitchAction.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/actions/SwitchAction.java
index 0f0919785..6f5651911 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/actions/SwitchAction.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/actions/SwitchAction.java
@@ -19,44 +19,44 @@
  * @coverage core.editor.action
  */
 public class SwitchAction extends EditorRelatedAction {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IActionDelegate
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void run() {
-    DesignerEditor editor = getEditor();
-    if (editor != null) {
-      editor.getMultiMode().switchSourceDesign();
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IActionDelegate
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void run() {
+		DesignerEditor editor = getEditor();
+		if (editor != null) {
+			editor.getMultiMode().switchSourceDesign();
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Shows "Source" page.
-   */
-  public static void showSource() {
-    showSource(-1);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Shows "Source" page.
+	 */
+	public static void showSource() {
+		showSource(-1);
+	}
 
-  /**
-   * Shows "Source" page and at given source position.
-   *
-   * @param position
-   *          the position to show in source, if <code>-1</code>, then ignored.
-   */
-  public static void showSource(int position) {
-    DesignerEditor editor = getActiveEditor();
-    if (editor != null) {
-      editor.getMultiMode().showSource();
-      if (position != -1) {
-        editor.showSourcePosition(position);
-      }
-    }
-  }
+	/**
+	 * Shows "Source" page and at given source position.
+	 *
+	 * @param position
+	 *          the position to show in source, if <code>-1</code>, then ignored.
+	 */
+	public static void showSource(int position) {
+		DesignerEditor editor = getActiveEditor();
+		if (editor != null) {
+			editor.getMultiMode().showSource();
+			if (position != -1) {
+				editor.showSourcePosition(position);
+			}
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/actions/TestAction.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/actions/TestAction.java
index 2df9cc878..893d29c43 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/actions/TestAction.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/actions/TestAction.java
@@ -27,60 +27,60 @@
  * @coverage core.editor.action
  */
 public final class TestAction extends Action {
-  private ObjectInfo m_rootObject;
+	private ObjectInfo m_rootObject;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public TestAction() {
-    setText("Test/Preview...");
-    setToolTipText("Quickly test/preview the window without compiling or running it");
-    setImageDescriptor(DesignerPlugin.getImageDescriptor("test.png"));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public TestAction() {
+		setText("Test/Preview...");
+		setToolTipText("Quickly test/preview the window without compiling or running it");
+		setImageDescriptor(DesignerPlugin.getImageDescriptor("test.png"));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets the root {@link ObjectInfo} on {@link DesignPage}.
-   */
-  public void setRoot(ObjectInfo rootObject) {
-    m_rootObject = rootObject;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets the root {@link ObjectInfo} on {@link DesignPage}.
+	 */
+	public void setRoot(ObjectInfo rootObject) {
+		m_rootObject = rootObject;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Action
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void run() {
-    ExecutionUtils.runLog(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        ExecutionUtils.runDesignTime(new RunnableEx() {
-          @Override
-          public void run() throws Exception {
-            run0();
-          }
-        });
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Action
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void run() {
+		ExecutionUtils.runLog(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				ExecutionUtils.runDesignTime(new RunnableEx() {
+					@Override
+					public void run() throws Exception {
+						run0();
+					}
+				});
+			}
+		});
+	}
 
-  private void run0() throws Exception {
-    if (m_rootObject instanceof AbstractComponentInfo) {
-      AbstractComponentInfo component = (AbstractComponentInfo) m_rootObject;
-      TopBoundsSupport topSupport = component.getTopBoundsSupport();
-      boolean doReparse = topSupport.show();
-      // refresh because user can change something
-      if (doReparse) {
-        m_rootObject.refresh();
-      }
-    }
-  }
+	private void run0() throws Exception {
+		if (m_rootObject instanceof AbstractComponentInfo) {
+			AbstractComponentInfo component = (AbstractComponentInfo) m_rootObject;
+			TopBoundsSupport topSupport = component.getTopBoundsSupport();
+			boolean doReparse = topSupport.show();
+			// refresh because user can change something
+			if (doReparse) {
+				m_rootObject.refresh();
+			}
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/actions/errors/BadNodesErrorPage.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/actions/errors/BadNodesErrorPage.java
index 2c7feb382..f7e474395 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/actions/errors/BadNodesErrorPage.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/actions/errors/BadNodesErrorPage.java
@@ -41,126 +41,126 @@
  * @coverage core.editor.action.error
  */
 public abstract class BadNodesErrorPage implements IErrorPage {
-  private AstEditor m_editor;
-  private BadNodesCollection m_collection;
+	private AstEditor m_editor;
+	private BadNodesCollection m_collection;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IErrorPage
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final void setRoot(ObjectInfo rootObject) {
-    if (rootObject instanceof JavaInfo) {
-      JavaInfo javaInfo = (JavaInfo) rootObject;
-      m_editor = javaInfo.getEditor();
-      EditorState editorState = EditorState.get(m_editor);
-      m_collection = getCollection(editorState);
-    } else {
-      m_collection = null;
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IErrorPage
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final void setRoot(ObjectInfo rootObject) {
+		if (rootObject instanceof JavaInfo) {
+			JavaInfo javaInfo = (JavaInfo) rootObject;
+			m_editor = javaInfo.getEditor();
+			EditorState editorState = EditorState.get(m_editor);
+			m_collection = getCollection(editorState);
+		} else {
+			m_collection = null;
+		}
+	}
 
-  @Override
-  public final boolean hasErrors() {
-    return m_collection != null && !m_collection.isEmpty();
-  }
+	@Override
+	public final boolean hasErrors() {
+		return m_collection != null && !m_collection.isEmpty();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private List m_nodesList;
-  private Browser m_browser;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private List m_nodesList;
+	private Browser m_browser;
 
-  @Override
-  public final Control create(Composite parent) {
-    Composite container = new Composite(parent, SWT.NONE);
-    GridLayoutFactory.create(container);
-    // create List with bad nodes
-    {
-      Group group = new Group(container, SWT.NONE);
-      GridDataFactory.create(group).grabH().fill();
-      GridLayoutFactory.create(group);
-      group.setText(Messages.BadNodesErrorPage_nodesGroup);
-      //
-      m_nodesList = new List(group, SWT.BORDER | SWT.V_SCROLL);
-      GridDataFactory.create(m_nodesList).hintC(100, 10).grab().fill();
-      // fill items
-      if (m_collection != null) {
-        for (BadNodeInformation badNode : m_collection.nodes()) {
-          try {
-            m_nodesList.add(m_editor.getSource(badNode.getNode()));
-          } catch (Throwable e) {
-            DesignerPlugin.log(e);
-          }
-        }
-      }
-      // add selection listener
-      m_nodesList.addListener(SWT.Selection, new Listener() {
-        @Override
-        public void handleEvent(Event event) {
-          showException();
-        }
-      });
-    }
-    // create Text for displaying selected bad node
-    {
-      Group group = new Group(container, SWT.NONE);
-      GridDataFactory.create(group).grab().fill();
-      GridLayoutFactory.create(group);
-      group.setText(Messages.BadNodesErrorPage_nodeGroup);
-      //
-      m_browser = new Browser(group, SWT.BORDER);
-      GridDataFactory.create(m_browser).hintC(100, 15).grab().fill();
-    }
-    // show first node
-    if (m_nodesList.getItemCount() != 0) {
-      m_nodesList.select(0);
-      showException();
-    }
-    //
-    return container;
-  }
+	@Override
+	public final Control create(Composite parent) {
+		Composite container = new Composite(parent, SWT.NONE);
+		GridLayoutFactory.create(container);
+		// create List with bad nodes
+		{
+			Group group = new Group(container, SWT.NONE);
+			GridDataFactory.create(group).grabH().fill();
+			GridLayoutFactory.create(group);
+			group.setText(Messages.BadNodesErrorPage_nodesGroup);
+			//
+			m_nodesList = new List(group, SWT.BORDER | SWT.V_SCROLL);
+			GridDataFactory.create(m_nodesList).hintC(100, 10).grab().fill();
+			// fill items
+			if (m_collection != null) {
+				for (BadNodeInformation badNode : m_collection.nodes()) {
+					try {
+						m_nodesList.add(m_editor.getSource(badNode.getNode()));
+					} catch (Throwable e) {
+						DesignerPlugin.log(e);
+					}
+				}
+			}
+			// add selection listener
+			m_nodesList.addListener(SWT.Selection, new Listener() {
+				@Override
+				public void handleEvent(Event event) {
+					showException();
+				}
+			});
+		}
+		// create Text for displaying selected bad node
+		{
+			Group group = new Group(container, SWT.NONE);
+			GridDataFactory.create(group).grab().fill();
+			GridLayoutFactory.create(group);
+			group.setText(Messages.BadNodesErrorPage_nodeGroup);
+			//
+			m_browser = new Browser(group, SWT.BORDER);
+			GridDataFactory.create(m_browser).hintC(100, 15).grab().fill();
+		}
+		// show first node
+		if (m_nodesList.getItemCount() != 0) {
+			m_nodesList.select(0);
+			showException();
+		}
+		//
+		return container;
+	}
 
-  /**
-   * Shows given {@link BadNodeInformation}.
-   */
-  private void showException() {
-    try {
-      int index = m_nodesList.getSelectionIndex();
-      BadNodeInformation badNode = m_collection.nodes().get(index);
-      //
-      StringWriter stringWriter = new StringWriter();
-      {
-        // node source
-        stringWriter.write("<pre>");
-        stringWriter.write(m_editor.getSource(badNode.getNode()));
-        stringWriter.write("</pre>");
-        stringWriter.write("<p>");
-        // exception
-        {
-          Throwable exception = badNode.getException();
-          exception = DesignerExceptionUtils.rewriteException(exception);
-          String text = DesignerExceptionUtils.getExceptionHTML(exception);
-          stringWriter.write(text);
-        }
-      }
-      // set text
-      m_browser.setText(stringWriter.toString());
-    } catch (Throwable e) {
-      DesignerPlugin.log(e);
-    }
-  }
+	/**
+	 * Shows given {@link BadNodeInformation}.
+	 */
+	private void showException() {
+		try {
+			int index = m_nodesList.getSelectionIndex();
+			BadNodeInformation badNode = m_collection.nodes().get(index);
+			//
+			StringWriter stringWriter = new StringWriter();
+			{
+				// node source
+				stringWriter.write("<pre>");
+				stringWriter.write(m_editor.getSource(badNode.getNode()));
+				stringWriter.write("</pre>");
+				stringWriter.write("<p>");
+				// exception
+				{
+					Throwable exception = badNode.getException();
+					exception = DesignerExceptionUtils.rewriteException(exception);
+					String text = DesignerExceptionUtils.getExceptionHTML(exception);
+					stringWriter.write(text);
+				}
+			}
+			// set text
+			m_browser.setText(stringWriter.toString());
+		} catch (Throwable e) {
+			DesignerPlugin.log(e);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Implementation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link BadNodesCollection} to display for given {@link EditorState}.
-   */
-  protected abstract BadNodesCollection getCollection(EditorState editorState);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Implementation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link BadNodesCollection} to display for given {@link EditorState}.
+	 */
+	protected abstract BadNodesCollection getCollection(EditorState editorState);
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/actions/errors/BadNodesParserErrorPage.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/actions/errors/BadNodesParserErrorPage.java
index 03d20e1aa..55d87f393 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/actions/errors/BadNodesParserErrorPage.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/actions/errors/BadNodesParserErrorPage.java
@@ -21,13 +21,13 @@
  * @coverage core.editor.action.error
  */
 public final class BadNodesParserErrorPage extends BadNodesErrorPage {
-  @Override
-  public String getTitle() {
-    return Messages.BadNodesParserErrorPage_title;
-  }
+	@Override
+	public String getTitle() {
+		return Messages.BadNodesParserErrorPage_title;
+	}
 
-  @Override
-  protected BadNodesCollection getCollection(EditorState editorState) {
-    return editorState.getBadParserNodes();
-  }
+	@Override
+	protected BadNodesCollection getCollection(EditorState editorState) {
+		return editorState.getBadParserNodes();
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/actions/errors/BadNodesRefreshErrorPage.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/actions/errors/BadNodesRefreshErrorPage.java
index b65489ff6..9ae351a45 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/actions/errors/BadNodesRefreshErrorPage.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/actions/errors/BadNodesRefreshErrorPage.java
@@ -22,13 +22,13 @@
  * @coverage core.editor.action.error
  */
 public final class BadNodesRefreshErrorPage extends BadNodesErrorPage {
-  @Override
-  public String getTitle() {
-    return Messages.BadNodesRefreshErrorPage_title;
-  }
+	@Override
+	public String getTitle() {
+		return Messages.BadNodesRefreshErrorPage_title;
+	}
 
-  @Override
-  protected BadNodesCollection getCollection(EditorState editorState) {
-    return editorState.getBadRefreshNodes();
-  }
+	@Override
+	protected BadNodesCollection getCollection(EditorState editorState) {
+		return editorState.getBadRefreshNodes();
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/actions/errors/ErrorsAction.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/actions/errors/ErrorsAction.java
index 816ef0474..46dbcc26b 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/actions/errors/ErrorsAction.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/actions/errors/ErrorsAction.java
@@ -28,75 +28,75 @@
  * @coverage core.editor.action.error
  */
 public class ErrorsAction extends Action {
-  private final List<IErrorPage> m_pages = Lists.newArrayList();
-  private ObjectInfo m_rootObject;
+	private final List<IErrorPage> m_pages = Lists.newArrayList();
+	private ObjectInfo m_rootObject;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ErrorsAction() {
-    setImageDescriptor(DesignerPlugin.getImageDescriptor("actions/errors/errors.gif"));
-    setDisabledImageDescriptor(DesignerPlugin.getImageDescriptor("actions/errors/errors_disabled.gif"));
-    setToolTipText(Messages.ErrorsAction_toolTip);
-    // add pages
-    m_pages.add(new BadNodesRefreshErrorPage());
-    m_pages.add(new WarningsErrorPage());
-    m_pages.add(new BadNodesParserErrorPage());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ErrorsAction() {
+		setImageDescriptor(DesignerPlugin.getImageDescriptor("actions/errors/errors.gif"));
+		setDisabledImageDescriptor(DesignerPlugin.getImageDescriptor("actions/errors/errors_disabled.gif"));
+		setToolTipText(Messages.ErrorsAction_toolTip);
+		// add pages
+		m_pages.add(new BadNodesRefreshErrorPage());
+		m_pages.add(new WarningsErrorPage());
+		m_pages.add(new BadNodesParserErrorPage());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets the root {@link ObjectInfo}.
-   */
-  public void setRoot(ObjectInfo rootObject) {
-    m_rootObject = rootObject;
-    m_rootObject.addBroadcastListener(new ObjectEventListener() {
-      @Override
-      public void refreshed() throws Exception {
-        update();
-      }
-    });
-    update();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets the root {@link ObjectInfo}.
+	 */
+	public void setRoot(ObjectInfo rootObject) {
+		m_rootObject = rootObject;
+		m_rootObject.addBroadcastListener(new ObjectEventListener() {
+			@Override
+			public void refreshed() throws Exception {
+				update();
+			}
+		});
+		update();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Action
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void run() {
-    ErrorsDialog errorsDialog = new ErrorsDialog(DesignerPlugin.getShell(), m_rootObject, m_pages);
-    errorsDialog.open();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Action
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void run() {
+		ErrorsDialog errorsDialog = new ErrorsDialog(DesignerPlugin.getShell(), m_rootObject, m_pages);
+		errorsDialog.open();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Internal
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Updates state.
-   */
-  private void update() {
-    firePropertyChange(ENABLED, null, null);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Internal
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Updates state.
+	 */
+	private void update() {
+		firePropertyChange(ENABLED, null, null);
+	}
 
-  @Override
-  public boolean isEnabled() {
-    for (IErrorPage errorPage : m_pages) {
-      errorPage.setRoot(m_rootObject);
-      if (errorPage.hasErrors()) {
-        return true;
-      }
-    }
-    //
-    return false;
-  }
+	@Override
+	public boolean isEnabled() {
+		for (IErrorPage errorPage : m_pages) {
+			errorPage.setRoot(m_rootObject);
+			if (errorPage.hasErrors()) {
+				return true;
+			}
+		}
+		//
+		return false;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/actions/errors/ErrorsDialog.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/actions/errors/ErrorsDialog.java
index d8ee0f581..fc15f79ca 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/actions/errors/ErrorsDialog.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/actions/errors/ErrorsDialog.java
@@ -47,105 +47,105 @@
  * @coverage core.editor.action.error
  */
 public final class ErrorsDialog extends ResizableTitleAreaDialog {
-  private static final int CONTACT_SUPPORT_ID = 999;
-  private final ObjectInfo m_rootObject;
-  private final List<IErrorPage> m_pages;
-  private final Dialog m_dialog;
+	private static final int CONTACT_SUPPORT_ID = 999;
+	private final ObjectInfo m_rootObject;
+	private final List<IErrorPage> m_pages;
+	private final Dialog m_dialog;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ErrorsDialog(Shell parentShell, ObjectInfo rootObject, List<IErrorPage> pages) {
-    super(parentShell, DesignerPlugin.getDefault());
-    m_rootObject = rootObject;
-    m_pages = pages;
-    //
-    Image screenshot = DesignerExceptionUtils.makeScreenshot();
-    JavaInfo rootObjectJava = m_rootObject instanceof JavaInfo ? (JavaInfo) m_rootObject : null;
-    ICompilationUnit unit = rootObject != null ? rootObjectJava.getEditor().getModelUnit() : null;
-    IProject project = unit != null ? unit.getJavaProject().getProject() : null;
-    ZipFileErrorReport errorReport =
-        new ZipFileErrorReport(screenshot,
-            project,
-            JavaExceptionComposite.getSourceFileReport(unit));
-    m_dialog = new CreateReportDialog(DesignerPlugin.getShell(), screenshot, errorReport);
-    ImageDisposer.add(m_dialog, "ContactSupportDialog_screenshot", screenshot);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ErrorsDialog(Shell parentShell, ObjectInfo rootObject, List<IErrorPage> pages) {
+		super(parentShell, DesignerPlugin.getDefault());
+		m_rootObject = rootObject;
+		m_pages = pages;
+		//
+		Image screenshot = DesignerExceptionUtils.makeScreenshot();
+		JavaInfo rootObjectJava = m_rootObject instanceof JavaInfo ? (JavaInfo) m_rootObject : null;
+		ICompilationUnit unit = rootObject != null ? rootObjectJava.getEditor().getModelUnit() : null;
+		IProject project = unit != null ? unit.getJavaProject().getProject() : null;
+		ZipFileErrorReport errorReport =
+				new ZipFileErrorReport(screenshot,
+						project,
+						JavaExceptionComposite.getSourceFileReport(unit));
+		m_dialog = new CreateReportDialog(DesignerPlugin.getShell(), screenshot, errorReport);
+		ImageDisposer.add(m_dialog, "ContactSupportDialog_screenshot", screenshot);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Messages
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected final Control createContents(Composite parent) {
-    Control control = super.createContents(parent);
-    configureMessages();
-    return control;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Messages
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected final Control createContents(Composite parent) {
+		Control control = super.createContents(parent);
+		configureMessages();
+		return control;
+	}
 
-  /**
-   * Subclasses override this methods to set title and message for this {@link TitleAreaDialog}.
-   */
-  protected void configureMessages() {
-    getShell().setText(Messages.ErrorsDialog_shellTitle);
-    setTitle(Messages.ErrorsDialog_title);
-    setMessage(Messages.ErrorsDialog_message);
-  }
+	/**
+	 * Subclasses override this methods to set title and message for this {@link TitleAreaDialog}.
+	 */
+	protected void configureMessages() {
+		getShell().setText(Messages.ErrorsDialog_shellTitle);
+		setTitle(Messages.ErrorsDialog_title);
+		setMessage(Messages.ErrorsDialog_message);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createButtonsForButtonBar(Composite parent) {
-    createButton(parent, CONTACT_SUPPORT_ID, Messages.ErrorsDialog_supportButton, false);
-    createButton(parent, IDialogConstants.CLOSE_ID, IDialogConstants.CLOSE_LABEL, true);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createButtonsForButtonBar(Composite parent) {
+		createButton(parent, CONTACT_SUPPORT_ID, Messages.ErrorsDialog_supportButton, false);
+		createButton(parent, IDialogConstants.CLOSE_ID, IDialogConstants.CLOSE_LABEL, true);
+	}
 
-  @Override
-  protected Control createDialogArea(Composite parent) {
-    Composite area = (Composite) super.createDialogArea(parent);
-    //
-    Composite container = new Composite(area, SWT.NONE);
-    GridDataFactory.create(container).grab().fill();
-    GridLayoutFactory.create(container);
-    // create TabFolder for pages
-    TabFolder tabFolder = new TabFolder(container, SWT.NONE);
-    GridDataFactory.create(tabFolder).grab().fill();
-    // create pages
-    for (IErrorPage page : m_pages) {
-      page.setRoot(m_rootObject);
-      // create tab
-      TabItem tabItem = new TabItem(tabFolder, SWT.NONE);
-      tabItem.setText(page.getTitle());
-      // create control for page
-      Control pageControl = page.create(tabFolder);
-      tabItem.setControl(pageControl);
-    }
-    return area;
-  }
+	@Override
+	protected Control createDialogArea(Composite parent) {
+		Composite area = (Composite) super.createDialogArea(parent);
+		//
+		Composite container = new Composite(area, SWT.NONE);
+		GridDataFactory.create(container).grab().fill();
+		GridLayoutFactory.create(container);
+		// create TabFolder for pages
+		TabFolder tabFolder = new TabFolder(container, SWT.NONE);
+		GridDataFactory.create(tabFolder).grab().fill();
+		// create pages
+		for (IErrorPage page : m_pages) {
+			page.setRoot(m_rootObject);
+			// create tab
+			TabItem tabItem = new TabItem(tabFolder, SWT.NONE);
+			tabItem.setText(page.getTitle());
+			// create control for page
+			Control pageControl = page.create(tabFolder);
+			tabItem.setControl(pageControl);
+		}
+		return area;
+	}
 
-  @Override
-  protected void buttonPressed(int buttonId) {
-    close();
-    if (CONTACT_SUPPORT_ID == buttonId) {
-      ExecutionUtils.runAsync(new RunnableEx() {
-        @Override
-        public void run() throws Exception {
-          handleContactSupport();
-        }
-      });
-    }
-  }
+	@Override
+	protected void buttonPressed(int buttonId) {
+		close();
+		if (CONTACT_SUPPORT_ID == buttonId) {
+			ExecutionUtils.runAsync(new RunnableEx() {
+				@Override
+				public void run() throws Exception {
+					handleContactSupport();
+				}
+			});
+		}
+	}
 
-  /**
-   * Engages error report engine.
-   */
-  private void handleContactSupport() {
-    m_dialog.open();
-  }
+	/**
+	 * Engages error report engine.
+	 */
+	private void handleContactSupport() {
+		m_dialog.open();
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/actions/errors/WarningsErrorPage.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/actions/errors/WarningsErrorPage.java
index 47fedf4ad..9b9279ec8 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/actions/errors/WarningsErrorPage.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/actions/errors/WarningsErrorPage.java
@@ -39,107 +39,107 @@
  * @coverage core.editor.action.error
  */
 public final class WarningsErrorPage implements IErrorPage {
-  private AstEditor m_editor;
-  private java.util.List<EditorWarning> m_collection;
+	private AstEditor m_editor;
+	private java.util.List<EditorWarning> m_collection;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IErrorPage
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getTitle() {
-    return Messages.WarningsErrorPage_title;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IErrorPage
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getTitle() {
+		return Messages.WarningsErrorPage_title;
+	}
 
-  @Override
-  public final void setRoot(ObjectInfo rootObject) {
-    if (rootObject instanceof JavaInfo) {
-      JavaInfo javaInfo = (JavaInfo) rootObject;
-      m_editor = javaInfo.getEditor();
-      EditorState editorState = EditorState.get(m_editor);
-      m_collection = editorState.getWarnings();
-    } else {
-      m_collection = null;
-    }
-  }
+	@Override
+	public final void setRoot(ObjectInfo rootObject) {
+		if (rootObject instanceof JavaInfo) {
+			JavaInfo javaInfo = (JavaInfo) rootObject;
+			m_editor = javaInfo.getEditor();
+			EditorState editorState = EditorState.get(m_editor);
+			m_collection = editorState.getWarnings();
+		} else {
+			m_collection = null;
+		}
+	}
 
-  @Override
-  public final boolean hasErrors() {
-    return m_collection != null && !m_collection.isEmpty();
-  }
+	@Override
+	public final boolean hasErrors() {
+		return m_collection != null && !m_collection.isEmpty();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private List m_nodesList;
-  private Browser m_browser;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private List m_nodesList;
+	private Browser m_browser;
 
-  @Override
-  public final Control create(Composite parent) {
-    Composite container = new Composite(parent, SWT.NONE);
-    GridLayoutFactory.create(container);
-    // create List with bad nodes
-    {
-      Group group = new Group(container, SWT.NONE);
-      GridDataFactory.create(group).grabH().fill();
-      GridLayoutFactory.create(group);
-      group.setText(Messages.WarningsErrorPage_listLabel);
-      //
-      m_nodesList = new List(group, SWT.BORDER | SWT.V_SCROLL);
-      GridDataFactory.create(m_nodesList).hintC(100, 10).grab().fill();
-      // fill items
-      if (m_collection != null) {
-        for (EditorWarning warning : m_collection) {
-          try {
-            m_nodesList.add(warning.getMessage());
-          } catch (Throwable e) {
-            DesignerPlugin.log(e);
-          }
-        }
-      }
-      // add selection listener
-      m_nodesList.addListener(SWT.Selection, new Listener() {
-        @Override
-        public void handleEvent(Event event) {
-          showException();
-        }
-      });
-    }
-    // create Text for displaying selected bad node
-    {
-      Group group = new Group(container, SWT.NONE);
-      GridDataFactory.create(group).grab().fill();
-      GridLayoutFactory.create(group);
-      group.setText(Messages.WarningsErrorPage_singleLabel);
-      //
-      m_browser = new Browser(group, SWT.BORDER);
-      GridDataFactory.create(m_browser).hintC(100, 15).grab().fill();
-    }
-    // show first node
-    if (m_nodesList.getItemCount() != 0) {
-      m_nodesList.select(0);
-      showException();
-    }
-    //
-    return container;
-  }
+	@Override
+	public final Control create(Composite parent) {
+		Composite container = new Composite(parent, SWT.NONE);
+		GridLayoutFactory.create(container);
+		// create List with bad nodes
+		{
+			Group group = new Group(container, SWT.NONE);
+			GridDataFactory.create(group).grabH().fill();
+			GridLayoutFactory.create(group);
+			group.setText(Messages.WarningsErrorPage_listLabel);
+			//
+			m_nodesList = new List(group, SWT.BORDER | SWT.V_SCROLL);
+			GridDataFactory.create(m_nodesList).hintC(100, 10).grab().fill();
+			// fill items
+			if (m_collection != null) {
+				for (EditorWarning warning : m_collection) {
+					try {
+						m_nodesList.add(warning.getMessage());
+					} catch (Throwable e) {
+						DesignerPlugin.log(e);
+					}
+				}
+			}
+			// add selection listener
+			m_nodesList.addListener(SWT.Selection, new Listener() {
+				@Override
+				public void handleEvent(Event event) {
+					showException();
+				}
+			});
+		}
+		// create Text for displaying selected bad node
+		{
+			Group group = new Group(container, SWT.NONE);
+			GridDataFactory.create(group).grab().fill();
+			GridLayoutFactory.create(group);
+			group.setText(Messages.WarningsErrorPage_singleLabel);
+			//
+			m_browser = new Browser(group, SWT.BORDER);
+			GridDataFactory.create(m_browser).hintC(100, 15).grab().fill();
+		}
+		// show first node
+		if (m_nodesList.getItemCount() != 0) {
+			m_nodesList.select(0);
+			showException();
+		}
+		//
+		return container;
+	}
 
-  /**
-   * Shows given {@link BadNodeInformation}.
-   */
-  private void showException() {
-    try {
-      int index = m_nodesList.getSelectionIndex();
-      EditorWarning warning = m_collection.get(index);
-      // set html
-      String html =
-          DesignerExceptionUtils.getExceptionHTML0(warning.getMessage(), warning.getException());
-      m_browser.setText(html);
-    } catch (Throwable e) {
-      DesignerPlugin.log(e);
-    }
-  }
+	/**
+	 * Shows given {@link BadNodeInformation}.
+	 */
+	private void showException() {
+		try {
+			int index = m_nodesList.getSelectionIndex();
+			EditorWarning warning = m_collection.get(index);
+			// set html
+			String html =
+					DesignerExceptionUtils.getExceptionHTML0(warning.getMessage(), warning.getException());
+			m_browser.setText(html);
+		} catch (Throwable e) {
+			DesignerPlugin.log(e);
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/errors/CoreExceptionRewriter2.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/errors/CoreExceptionRewriter2.java
index 471541344..409270876 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/errors/CoreExceptionRewriter2.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/errors/CoreExceptionRewriter2.java
@@ -23,27 +23,27 @@
  * @coverage core.editor.errors
  */
 public class CoreExceptionRewriter2 implements IExceptionRewriter {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final IExceptionRewriter INSTANCE = new CoreExceptionRewriter2();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final IExceptionRewriter INSTANCE = new CoreExceptionRewriter2();
 
-  private CoreExceptionRewriter2() {
-  }
+	private CoreExceptionRewriter2() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IExceptionRewriter
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Throwable rewrite(Throwable e) {
-    Throwable rootException = DesignerExceptionUtils.getRootCause(e);
-    if (rootException instanceof AnonymousEvaluationError) {
-      return new DesignerException(ICoreExceptionConstants.EVAL_ANONYMOUS, e, e.getMessage());
-    }
-    return e;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IExceptionRewriter
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Throwable rewrite(Throwable e) {
+		Throwable rootException = DesignerExceptionUtils.getRootCause(e);
+		if (rootException instanceof AnonymousEvaluationError) {
+			return new DesignerException(ICoreExceptionConstants.EVAL_ANONYMOUS, e, e.getMessage());
+		}
+		return e;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/errors/JavaExceptionComposite.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/errors/JavaExceptionComposite.java
index 93374a7f1..51c87ee14 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/errors/JavaExceptionComposite.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/errors/JavaExceptionComposite.java
@@ -30,78 +30,78 @@
  * @coverage core.editor.errors
  */
 public final class JavaExceptionComposite extends ExceptionComposite {
-  private ICompilationUnit m_compilationUnit;
+	private ICompilationUnit m_compilationUnit;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public JavaExceptionComposite(Composite parent, int style) {
-    super(parent, style);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public JavaExceptionComposite(Composite parent, int style) {
+		super(parent, style);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets the {@link Throwable} to display with additional information which may be included into
-   * problem report.
-   *
-   * @param e
-   *          the {@link Throwable} to display.
-   * @param screenshot
-   *          the {@link Image} of entire shell just before error. Can be <code>null</code> in case
-   *          of parse error when no screenshot needed.
-   * @param compilationUnit
-   *          the compilation unit in which the problem occurred. Cannot be <code>null</code>.
-   * @param javaInfo
-   *          the root {@link JavaInfo}. Can be <code>null</code>.
-   */
-  public void setException(Throwable e,
-      Image screenshot,
-      ICompilationUnit compilationUnit,
-      JavaInfo javaInfo) {
-    setException0(e, screenshot);
-    Assert.isNotNull(compilationUnit);
-    m_compilationUnit = compilationUnit;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets the {@link Throwable} to display with additional information which may be included into
+	 * problem report.
+	 *
+	 * @param e
+	 *          the {@link Throwable} to display.
+	 * @param screenshot
+	 *          the {@link Image} of entire shell just before error. Can be <code>null</code> in case
+	 *          of parse error when no screenshot needed.
+	 * @param compilationUnit
+	 *          the compilation unit in which the problem occurred. Cannot be <code>null</code>.
+	 * @param javaInfo
+	 *          the root {@link JavaInfo}. Can be <code>null</code>.
+	 */
+	public void setException(Throwable e,
+			Image screenshot,
+			ICompilationUnit compilationUnit,
+			JavaInfo javaInfo) {
+		setException0(e, screenshot);
+		Assert.isNotNull(compilationUnit);
+		m_compilationUnit = compilationUnit;
+	}
 
-  @Override
-  protected ZipFileErrorReport getZipFileErrorReport() {
-    IProject project = m_compilationUnit.getJavaProject().getProject();
-    return new ZipFileErrorReport(getScreenshotImage(),
-        project,
-        getSourceFileReport(m_compilationUnit));
-  }
+	@Override
+	protected ZipFileErrorReport getZipFileErrorReport() {
+		IProject project = m_compilationUnit.getJavaProject().getProject();
+		return new ZipFileErrorReport(getScreenshotImage(),
+				project,
+				getSourceFileReport(m_compilationUnit));
+	}
 
-  @Override
-  protected void doShowSource(int sourcePosition) {
-    SwitchAction.showSource(sourcePosition);
-  }
+	@Override
+	protected void doShowSource(int sourcePosition) {
+		SwitchAction.showSource(sourcePosition);
+	}
 
-  @Override
-  protected void doRefresh() {
-    new RefreshAction().run();
-  }
+	@Override
+	protected void doRefresh() {
+		new RefreshAction().run();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Error Report related.
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the report info containing actual source of editing CU.
-   */
-  public static IReportEntry getSourceFileReport(ICompilationUnit compilationUnit) {
-    try {
-      return new StringFileReportEntry(compilationUnit.getElementName(),
-          compilationUnit.getSource());
-    } catch (Throwable e) {
-      // ignore, just send nothing
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Error Report related.
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the report info containing actual source of editing CU.
+	 */
+	public static IReportEntry getSourceFileReport(ICompilationUnit compilationUnit) {
+		try {
+			return new StringFileReportEntry(compilationUnit.getElementName(),
+					compilationUnit.getSource());
+		} catch (Throwable e) {
+			// ignore, just send nothing
+		}
+		return null;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/errors/JavaWarningComposite.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/errors/JavaWarningComposite.java
index 0a0bec22f..5694e603d 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/errors/JavaWarningComposite.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/errors/JavaWarningComposite.java
@@ -23,27 +23,27 @@
  * @coverage core.editor.errors
  */
 public class JavaWarningComposite extends WarningComposite {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public JavaWarningComposite(Composite parent, int style) {
-    super(parent, style);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public JavaWarningComposite(Composite parent, int style) {
+		super(parent, style);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void doRefresh() {
-    new RefreshAction().run();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void doRefresh() {
+		new RefreshAction().run();
+	}
 
-  @Override
-  protected void doShowSource(int sourcePosition) {
-    SwitchAction.showSource(sourcePosition);
-  }
+	@Override
+	protected void doShowSource(int sourcePosition) {
+		SwitchAction.showSource(sourcePosition);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/errors/MultipleConstructorsComposite.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/errors/MultipleConstructorsComposite.java
index 044a65c0c..f714033ee 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/errors/MultipleConstructorsComposite.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/errors/MultipleConstructorsComposite.java
@@ -54,146 +54,146 @@
  * @coverage core.editor.errors
  */
 public final class MultipleConstructorsComposite extends Composite {
-  private final BrowserComposite m_browser;
-  private final Label m_titleLabel;
-  private final TableViewer m_constructorsViewer;
-  private AstEditor m_editor;
-  private TypeDeclaration m_typeDeclaration;
+	private final BrowserComposite m_browser;
+	private final Label m_titleLabel;
+	private final TableViewer m_constructorsViewer;
+	private AstEditor m_editor;
+	private TypeDeclaration m_typeDeclaration;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public MultipleConstructorsComposite(Composite parent, int style) {
-    super(parent, style);
-    GridLayoutFactory.create(this);
-    {
-      Composite titleComposite = new Composite(this, SWT.NONE);
-      GridDataFactory.create(titleComposite).alignHL();
-      GridLayoutFactory.create(titleComposite).columns(2).margins(10);
-      {
-        Label label = new Label(titleComposite, SWT.NONE);
-        label.setImage(SwtResourceManager.getImage(SWT.ICON_INFORMATION));
-      }
-      {
-        m_titleLabel = new Label(titleComposite, SWT.NONE);
-        m_titleLabel.setFont(SwtResourceManager.getFont(
-            getFont().getFontData()[0].getName(),
-            14,
-            SWT.BOLD));
-      }
-    }
-    // Browser
-    {
-      m_browser = new BrowserComposite(this, SWT.NONE);
-      GridDataFactory.create(m_browser).grab().fill();
-    }
-    // viewer
-    {
-      new Label(this, SWT.NONE).setText(Messages.MultipleConstructorsComposite_listLabel);
-      m_constructorsViewer = new TableViewer(this, SWT.BORDER | SWT.V_SCROLL);
-      Table table = m_constructorsViewer.getTable();
-      GridDataFactory.create(table).hintVC(10).grabH().fill();
-      // providers
-      JavaElementLabelProvider labelProvider =
-          new JavaElementLabelProvider(JavaElementLabelProvider.SHOW_PARAMETERS
-              | JavaElementLabelProvider.SHOW_OVERLAY_ICONS);
-      m_constructorsViewer.setLabelProvider(labelProvider);
-      m_constructorsViewer.setContentProvider(new ArrayContentProvider());
-      // listeners
-      m_constructorsViewer.addDoubleClickListener(new IDoubleClickListener() {
-        @Override
-        public void doubleClick(DoubleClickEvent event) {
-          markSelectedConstructor();
-        }
-      });
-    }
-    // buttons
-    {
-      Composite buttonsComposite = new Composite(this, SWT.NONE);
-      GridDataFactory.create(buttonsComposite).alignHR();
-      GridLayoutFactory.create(buttonsComposite).columns(2).equalColumns().marginsH(0);
-      {
-        Button selectButton = new Button(buttonsComposite, SWT.NONE);
-        GridDataFactory.create(selectButton).fillH();
-        selectButton.setText(Messages.MultipleConstructorsComposite_useButton);
-        selectButton.setImage(EnvironmentUtils.IS_MAC
-            ? null
-            : DesignerPlugin.getImage("actions/errors/entry_point.png"));
-        selectButton.addSelectionListener(new SelectionAdapter() {
-          @Override
-          public void widgetSelected(SelectionEvent e) {
-            markSelectedConstructor();
-          }
-        });
-      }
-      {
-        Button switchButton = new Button(buttonsComposite, SWT.NONE);
-        GridDataFactory.create(switchButton).fillH();
-        switchButton.setText(Messages.MultipleConstructorsComposite_switchButton);
-        switchButton.setImage(EnvironmentUtils.IS_MAC
-            ? null
-            : DesignerPlugin.getImage("actions/errors/switch32.png"));
-        switchButton.addSelectionListener(new SelectionAdapter() {
-          @Override
-          public void widgetSelected(SelectionEvent e) {
-            new SwitchAction().run();
-          }
-        });
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public MultipleConstructorsComposite(Composite parent, int style) {
+		super(parent, style);
+		GridLayoutFactory.create(this);
+		{
+			Composite titleComposite = new Composite(this, SWT.NONE);
+			GridDataFactory.create(titleComposite).alignHL();
+			GridLayoutFactory.create(titleComposite).columns(2).margins(10);
+			{
+				Label label = new Label(titleComposite, SWT.NONE);
+				label.setImage(SwtResourceManager.getImage(SWT.ICON_INFORMATION));
+			}
+			{
+				m_titleLabel = new Label(titleComposite, SWT.NONE);
+				m_titleLabel.setFont(SwtResourceManager.getFont(
+						getFont().getFontData()[0].getName(),
+						14,
+						SWT.BOLD));
+			}
+		}
+		// Browser
+		{
+			m_browser = new BrowserComposite(this, SWT.NONE);
+			GridDataFactory.create(m_browser).grab().fill();
+		}
+		// viewer
+		{
+			new Label(this, SWT.NONE).setText(Messages.MultipleConstructorsComposite_listLabel);
+			m_constructorsViewer = new TableViewer(this, SWT.BORDER | SWT.V_SCROLL);
+			Table table = m_constructorsViewer.getTable();
+			GridDataFactory.create(table).hintVC(10).grabH().fill();
+			// providers
+			JavaElementLabelProvider labelProvider =
+					new JavaElementLabelProvider(JavaElementLabelProvider.SHOW_PARAMETERS
+							| JavaElementLabelProvider.SHOW_OVERLAY_ICONS);
+			m_constructorsViewer.setLabelProvider(labelProvider);
+			m_constructorsViewer.setContentProvider(new ArrayContentProvider());
+			// listeners
+			m_constructorsViewer.addDoubleClickListener(new IDoubleClickListener() {
+				@Override
+				public void doubleClick(DoubleClickEvent event) {
+					markSelectedConstructor();
+				}
+			});
+		}
+		// buttons
+		{
+			Composite buttonsComposite = new Composite(this, SWT.NONE);
+			GridDataFactory.create(buttonsComposite).alignHR();
+			GridLayoutFactory.create(buttonsComposite).columns(2).equalColumns().marginsH(0);
+			{
+				Button selectButton = new Button(buttonsComposite, SWT.NONE);
+				GridDataFactory.create(selectButton).fillH();
+				selectButton.setText(Messages.MultipleConstructorsComposite_useButton);
+				selectButton.setImage(EnvironmentUtils.IS_MAC
+						? null
+								: DesignerPlugin.getImage("actions/errors/entry_point.png"));
+				selectButton.addSelectionListener(new SelectionAdapter() {
+					@Override
+					public void widgetSelected(SelectionEvent e) {
+						markSelectedConstructor();
+					}
+				});
+			}
+			{
+				Button switchButton = new Button(buttonsComposite, SWT.NONE);
+				GridDataFactory.create(switchButton).fillH();
+				switchButton.setText(Messages.MultipleConstructorsComposite_switchButton);
+				switchButton.setImage(EnvironmentUtils.IS_MAC
+						? null
+								: DesignerPlugin.getImage("actions/errors/switch32.png"));
+				switchButton.addSelectionListener(new SelectionAdapter() {
+					@Override
+					public void widgetSelected(SelectionEvent e) {
+						new SwitchAction().run();
+					}
+				});
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets the {@link MultipleConstructorsError} to display.
-   */
-  public void setException(MultipleConstructorsError e) {
-    m_editor = e.getEditor();
-    m_typeDeclaration = e.getTypeDeclaration();
-    {
-      int code = ICoreExceptionConstants.EXECUTION_FLOW_TOO_MANY_CONSTRUCTORS;
-      ErrorEntryInfo entry = DesignerExceptionUtils.getErrorEntry(code);
-      m_titleLabel.setText(entry.getTitle());
-      m_browser.setText(DesignerExceptionUtils.getWarningHTML(entry));
-    }
-    try {
-      List<IMethod> constructors = getConstructors();
-      m_constructorsViewer.setInput(constructors);
-      m_constructorsViewer.getTable().setSelection(0);
-    } catch (Throwable ex) {
-      DesignerPlugin.log(ex);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets the {@link MultipleConstructorsError} to display.
+	 */
+	public void setException(MultipleConstructorsError e) {
+		m_editor = e.getEditor();
+		m_typeDeclaration = e.getTypeDeclaration();
+		{
+			int code = ICoreExceptionConstants.EXECUTION_FLOW_TOO_MANY_CONSTRUCTORS;
+			ErrorEntryInfo entry = DesignerExceptionUtils.getErrorEntry(code);
+			m_titleLabel.setText(entry.getTitle());
+			m_browser.setText(DesignerExceptionUtils.getWarningHTML(entry));
+		}
+		try {
+			List<IMethod> constructors = getConstructors();
+			m_constructorsViewer.setInput(constructors);
+			m_constructorsViewer.getTable().setSelection(0);
+		} catch (Throwable ex) {
+			DesignerPlugin.log(ex);
+		}
+	}
 
-  private List<IMethod> getConstructors() throws Exception {
-    String typeName = AstNodeUtils.getFullyQualifiedName(m_typeDeclaration, false);
-    IType type = m_editor.getJavaProject().findType(typeName);
-    List<MethodDeclaration> constructors = AstNodeUtils.getConstructors(m_typeDeclaration);
-    List<String> signatures = AstNodeUtils.getMethodSignatures(constructors);
-    return CodeUtils.findMethods(type, signatures);
-  }
+	private List<IMethod> getConstructors() throws Exception {
+		String typeName = AstNodeUtils.getFullyQualifiedName(m_typeDeclaration, false);
+		IType type = m_editor.getJavaProject().findType(typeName);
+		List<MethodDeclaration> constructors = AstNodeUtils.getConstructors(m_typeDeclaration);
+		List<String> signatures = AstNodeUtils.getMethodSignatures(constructors);
+		return CodeUtils.findMethods(type, signatures);
+	}
 
-  private void markSelectedConstructor() {
-    ExecutionUtils.runLog(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        markSelectedConstructorEx();
-      }
-    });
-  }
+	private void markSelectedConstructor() {
+		ExecutionUtils.runLog(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				markSelectedConstructorEx();
+			}
+		});
+	}
 
-  private void markSelectedConstructorEx() throws Exception {
-    IMethod constructorModel = GenericsUtils.first(m_constructorsViewer.getSelection());
-    String constructorSignature = CodeUtils.getMethodSignature(constructorModel);
-    MethodDeclaration constructor =
-        AstNodeUtils.getMethodBySignature(m_typeDeclaration, constructorSignature);
-    m_editor.setJavadocTagText(constructor, "@wbp.parser.constructor", "");
-    m_editor.commitChanges();
-  }
+	private void markSelectedConstructorEx() throws Exception {
+		IMethod constructorModel = GenericsUtils.first(m_constructorsViewer.getSelection());
+		String constructorSignature = CodeUtils.getMethodSignature(constructorModel);
+		MethodDeclaration constructor =
+				AstNodeUtils.getMethodBySignature(m_typeDeclaration, constructorSignature);
+		m_editor.setJavadocTagText(constructor, "@wbp.parser.constructor", "");
+		m_editor.commitChanges();
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/errors/NoEntryPointComposite.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/errors/NoEntryPointComposite.java
index da5355d59..5e1b817fa 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/errors/NoEntryPointComposite.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/errors/NoEntryPointComposite.java
@@ -58,171 +58,171 @@
  * @coverage core.editor.errors
  */
 public final class NoEntryPointComposite extends Composite {
-  private final BrowserComposite m_browser;
-  private final Label m_titleLabel;
-  private final TableViewer m_viewer;
-  private AstEditor m_editor;
-  private TypeDeclaration m_typeDeclaration;
+	private final BrowserComposite m_browser;
+	private final Label m_titleLabel;
+	private final TableViewer m_viewer;
+	private AstEditor m_editor;
+	private TypeDeclaration m_typeDeclaration;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public NoEntryPointComposite(Composite parent, int style) {
-    super(parent, style);
-    GridLayoutFactory.create(this);
-    {
-      Composite titleComposite = new Composite(this, SWT.NONE);
-      GridDataFactory.create(titleComposite).alignHL();
-      GridLayoutFactory.create(titleComposite).columns(2).margins(10);
-      {
-        Label label = new Label(titleComposite, SWT.NONE);
-        label.setImage(SwtResourceManager.getImage(SWT.ICON_INFORMATION));
-      }
-      {
-        m_titleLabel = new Label(titleComposite, SWT.NONE);
-        m_titleLabel.setFont(SwtResourceManager.getFont(
-            getFont().getFontData()[0].getName(),
-            14,
-            SWT.BOLD));
-      }
-    }
-    // Browser
-    {
-      m_browser = new BrowserComposite(this, SWT.NONE);
-      GridDataFactory.create(m_browser).grab().fill();
-    }
-    // viewer
-    {
-      new Label(this, SWT.NONE).setText(Messages.NoEntryPointComposite_viewerLabel);
-      m_viewer = new TableViewer(this, SWT.BORDER | SWT.V_SCROLL);
-      Table table = m_viewer.getTable();
-      GridDataFactory.create(table).hintVC(10).grabH().fill();
-      // providers
-      JavaElementLabelProvider labelProvider =
-          new JavaElementLabelProvider(JavaElementLabelProvider.SHOW_PARAMETERS
-              | JavaElementLabelProvider.SHOW_OVERLAY_ICONS);
-      m_viewer.setLabelProvider(labelProvider);
-      m_viewer.setContentProvider(new ArrayContentProvider());
-      // listeners
-      m_viewer.addDoubleClickListener(new IDoubleClickListener() {
-        @Override
-        public void doubleClick(DoubleClickEvent event) {
-          markSelectedMethod();
-        }
-      });
-    }
-    // buttons
-    {
-      Composite buttonsComposite = new Composite(this, SWT.NONE);
-      GridDataFactory.create(buttonsComposite).alignHR();
-      GridLayoutFactory.create(buttonsComposite).columns(2).equalColumns().marginsH(0);
-      {
-        Button selectButton = new Button(buttonsComposite, SWT.NONE);
-        GridDataFactory.create(selectButton).fillH();
-        selectButton.setText(Messages.NoEntryPointComposite_useButton);
-        selectButton.setImage(EnvironmentUtils.IS_MAC
-            ? null
-            : DesignerPlugin.getImage("actions/errors/entry_point.png"));
-        selectButton.addSelectionListener(new SelectionAdapter() {
-          @Override
-          public void widgetSelected(SelectionEvent e) {
-            markSelectedMethod();
-          }
-        });
-      }
-      {
-        Button switchButton = new Button(buttonsComposite, SWT.NONE);
-        GridDataFactory.create(switchButton).fillH();
-        switchButton.setText(Messages.NoEntryPointComposite_switchToCodeButton);
-        switchButton.setImage(EnvironmentUtils.IS_MAC
-            ? null
-            : DesignerPlugin.getImage("actions/errors/switch32.png"));
-        switchButton.addSelectionListener(new SelectionAdapter() {
-          @Override
-          public void widgetSelected(SelectionEvent e) {
-            new SwitchAction().run();
-          }
-        });
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public NoEntryPointComposite(Composite parent, int style) {
+		super(parent, style);
+		GridLayoutFactory.create(this);
+		{
+			Composite titleComposite = new Composite(this, SWT.NONE);
+			GridDataFactory.create(titleComposite).alignHL();
+			GridLayoutFactory.create(titleComposite).columns(2).margins(10);
+			{
+				Label label = new Label(titleComposite, SWT.NONE);
+				label.setImage(SwtResourceManager.getImage(SWT.ICON_INFORMATION));
+			}
+			{
+				m_titleLabel = new Label(titleComposite, SWT.NONE);
+				m_titleLabel.setFont(SwtResourceManager.getFont(
+						getFont().getFontData()[0].getName(),
+						14,
+						SWT.BOLD));
+			}
+		}
+		// Browser
+		{
+			m_browser = new BrowserComposite(this, SWT.NONE);
+			GridDataFactory.create(m_browser).grab().fill();
+		}
+		// viewer
+		{
+			new Label(this, SWT.NONE).setText(Messages.NoEntryPointComposite_viewerLabel);
+			m_viewer = new TableViewer(this, SWT.BORDER | SWT.V_SCROLL);
+			Table table = m_viewer.getTable();
+			GridDataFactory.create(table).hintVC(10).grabH().fill();
+			// providers
+			JavaElementLabelProvider labelProvider =
+					new JavaElementLabelProvider(JavaElementLabelProvider.SHOW_PARAMETERS
+							| JavaElementLabelProvider.SHOW_OVERLAY_ICONS);
+			m_viewer.setLabelProvider(labelProvider);
+			m_viewer.setContentProvider(new ArrayContentProvider());
+			// listeners
+			m_viewer.addDoubleClickListener(new IDoubleClickListener() {
+				@Override
+				public void doubleClick(DoubleClickEvent event) {
+					markSelectedMethod();
+				}
+			});
+		}
+		// buttons
+		{
+			Composite buttonsComposite = new Composite(this, SWT.NONE);
+			GridDataFactory.create(buttonsComposite).alignHR();
+			GridLayoutFactory.create(buttonsComposite).columns(2).equalColumns().marginsH(0);
+			{
+				Button selectButton = new Button(buttonsComposite, SWT.NONE);
+				GridDataFactory.create(selectButton).fillH();
+				selectButton.setText(Messages.NoEntryPointComposite_useButton);
+				selectButton.setImage(EnvironmentUtils.IS_MAC
+						? null
+								: DesignerPlugin.getImage("actions/errors/entry_point.png"));
+				selectButton.addSelectionListener(new SelectionAdapter() {
+					@Override
+					public void widgetSelected(SelectionEvent e) {
+						markSelectedMethod();
+					}
+				});
+			}
+			{
+				Button switchButton = new Button(buttonsComposite, SWT.NONE);
+				GridDataFactory.create(switchButton).fillH();
+				switchButton.setText(Messages.NoEntryPointComposite_switchToCodeButton);
+				switchButton.setImage(EnvironmentUtils.IS_MAC
+						? null
+								: DesignerPlugin.getImage("actions/errors/switch32.png"));
+				switchButton.addSelectionListener(new SelectionAdapter() {
+					@Override
+					public void widgetSelected(SelectionEvent e) {
+						new SwitchAction().run();
+					}
+				});
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets the {@link NoEntryPointError} to display.
-   */
-  public void setException(NoEntryPointError e) {
-    m_editor = e.getEditor();
-    m_typeDeclaration = e.getTypeDeclaration();
-    {
-      int code = ICoreExceptionConstants.PARSER_NO_ROOT_METHODS;
-      ErrorEntryInfo entry = DesignerExceptionUtils.getErrorEntry(code);
-      m_titleLabel.setText(entry.getTitle());
-      m_browser.setText(DesignerExceptionUtils.getWarningHTML(entry));
-    }
-    try {
-      m_viewer.setInput(getPossibleEntryPoints());
-      m_viewer.getTable().setSelection(0);
-    } catch (Throwable ex) {
-      DesignerPlugin.log(ex);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets the {@link NoEntryPointError} to display.
+	 */
+	public void setException(NoEntryPointError e) {
+		m_editor = e.getEditor();
+		m_typeDeclaration = e.getTypeDeclaration();
+		{
+			int code = ICoreExceptionConstants.PARSER_NO_ROOT_METHODS;
+			ErrorEntryInfo entry = DesignerExceptionUtils.getErrorEntry(code);
+			m_titleLabel.setText(entry.getTitle());
+			m_browser.setText(DesignerExceptionUtils.getWarningHTML(entry));
+		}
+		try {
+			m_viewer.setInput(getPossibleEntryPoints());
+			m_viewer.getTable().setSelection(0);
+		} catch (Throwable ex) {
+			DesignerPlugin.log(ex);
+		}
+	}
 
-  private List<IMethod> getPossibleEntryPoints() throws Exception {
-    String typeName = AstNodeUtils.getFullyQualifiedName(m_typeDeclaration, false);
-    IType type = m_editor.getJavaProject().findType(typeName);
-    List<IMethod> methods = Lists.newArrayList(type.getMethods());
-    sortMethods(methods);
-    return methods;
-  }
+	private List<IMethod> getPossibleEntryPoints() throws Exception {
+		String typeName = AstNodeUtils.getFullyQualifiedName(m_typeDeclaration, false);
+		IType type = m_editor.getJavaProject().findType(typeName);
+		List<IMethod> methods = Lists.newArrayList(type.getMethods());
+		sortMethods(methods);
+		return methods;
+	}
 
-  /**
-   * Sort methods so that most interesting methods, such as constructors and "create" methods,
-   * become first.
-   */
-  private static void sortMethods(List<IMethod> methods) {
-    Collections.sort(methods, new Comparator<IMethod>() {
-      @Override
-      public int compare(IMethod o1, IMethod o2) {
-        return getPriority(o1) - getPriority(o2);
-      }
+	/**
+	 * Sort methods so that most interesting methods, such as constructors and "create" methods,
+	 * become first.
+	 */
+	private static void sortMethods(List<IMethod> methods) {
+		Collections.sort(methods, new Comparator<IMethod>() {
+			@Override
+			public int compare(IMethod o1, IMethod o2) {
+				return getPriority(o1) - getPriority(o2);
+			}
 
-      private int getPriority(IMethod method) {
-        try {
-          if (method.isConstructor()) {
-            return 0;
-          }
-          if (method.getElementName().startsWith("create")) {
-            return 1;
-          }
-        } catch (Throwable e) {
-        }
-        return 10;
-      }
-    });
-  }
+			private int getPriority(IMethod method) {
+				try {
+					if (method.isConstructor()) {
+						return 0;
+					}
+					if (method.getElementName().startsWith("create")) {
+						return 1;
+					}
+				} catch (Throwable e) {
+				}
+				return 10;
+			}
+		});
+	}
 
-  private void markSelectedMethod() {
-    ExecutionUtils.runLog(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        markSelectedMethodEx();
-      }
-    });
-  }
+	private void markSelectedMethod() {
+		ExecutionUtils.runLog(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				markSelectedMethodEx();
+			}
+		});
+	}
 
-  private void markSelectedMethodEx() throws Exception {
-    IMethod methodModel = GenericsUtils.first(m_viewer.getSelection());
-    String methodSignature = CodeUtils.getMethodSignature(methodModel);
-    MethodDeclaration method =
-        AstNodeUtils.getMethodBySignature(m_typeDeclaration, methodSignature);
-    m_editor.setJavadocTagText(method, "@wbp.parser.entryPoint", "");
-    m_editor.commitChanges();
-  }
+	private void markSelectedMethodEx() throws Exception {
+		IMethod methodModel = GenericsUtils.first(m_viewer.getSelection());
+		String methodSignature = CodeUtils.getMethodSignature(methodModel);
+		MethodDeclaration method =
+				AstNodeUtils.getMethodBySignature(m_typeDeclaration, methodSignature);
+		m_editor.setJavadocTagText(method, "@wbp.parser.entryPoint", "");
+		m_editor.commitChanges();
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/errors/NotUiJavaWarningComposite.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/errors/NotUiJavaWarningComposite.java
index 6633c9147..0aee3e57d 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/errors/NotUiJavaWarningComposite.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/errors/NotUiJavaWarningComposite.java
@@ -29,42 +29,42 @@
  * @coverage core.editor.errors
  */
 public final class NotUiJavaWarningComposite extends JavaWarningComposite {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public NotUiJavaWarningComposite(Composite parent, int style) {
-    super(parent, style);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public NotUiJavaWarningComposite(Composite parent, int style) {
+		super(parent, style);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // UI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected int getNumButtons() {
-    return 3;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// UI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected int getNumButtons() {
+		return 3;
+	}
 
-  @Override
-  protected void createButtons(Composite buttonsComposite) {
-    {
-      Button toolkitsButton = new Button(buttonsComposite, SWT.NONE);
-      GridDataFactory.create(toolkitsButton).fill();
-      toolkitsButton.setText("Open UI Toolkits");
-      toolkitsButton.addSelectionListener(new SelectionAdapter() {
-        @Override
-        public void widgetSelected(SelectionEvent e) {
-          PreferencesUtil.createPreferenceDialogOn(
-              getShell(),
-              "org.eclipse.wb.internal.discovery.ui.preferences.ToolkitsPreferencePage",
-              ArrayUtils.EMPTY_STRING_ARRAY,
-              null).open();
-        }
-      });
-    }
-    super.createButtons(buttonsComposite);
-  }
+	@Override
+	protected void createButtons(Composite buttonsComposite) {
+		{
+			Button toolkitsButton = new Button(buttonsComposite, SWT.NONE);
+			GridDataFactory.create(toolkitsButton).fill();
+			toolkitsButton.setText("Open UI Toolkits");
+			toolkitsButton.addSelectionListener(new SelectionAdapter() {
+				@Override
+				public void widgetSelected(SelectionEvent e) {
+					PreferencesUtil.createPreferenceDialogOn(
+							getShell(),
+							"org.eclipse.wb.internal.discovery.ui.preferences.ToolkitsPreferencePage",
+							ArrayUtils.EMPTY_STRING_ARRAY,
+							null).open();
+				}
+			});
+		}
+		super.createButtons(buttonsComposite);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/errors/report2/logs/LogsReportEntriesProvider.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/errors/report2/logs/LogsReportEntriesProvider.java
index 67c0d524b..5438b0a45 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/errors/report2/logs/LogsReportEntriesProvider.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/errors/report2/logs/LogsReportEntriesProvider.java
@@ -20,9 +20,9 @@
  * @coverage core.editor.errors.report2
  */
 public final class LogsReportEntriesProvider implements IReportEntriesProvider {
-  @Override
-  public void addEntries(IErrorReport report) {
-    report.addEntry(new EclipseErrorLogsReportEntry());
-    report.addEntry(new ParseErrorsLogReportEntry());
-  }
+	@Override
+	public void addEntries(IErrorReport report) {
+		report.addEntry(new EclipseErrorLogsReportEntry());
+		report.addEntry(new ParseErrorsLogReportEntry());
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/errors/report2/logs/ParseErrorsLogReportEntry.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/errors/report2/logs/ParseErrorsLogReportEntry.java
index 362691675..c36d70b68 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/errors/report2/logs/ParseErrorsLogReportEntry.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/errors/report2/logs/ParseErrorsLogReportEntry.java
@@ -34,84 +34,84 @@
  * @coverage core.editor.errors.report2
  */
 public final class ParseErrorsLogReportEntry implements IReportEntry {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Contents
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void writeBadNodes(ZipOutputStream outputStream,
-      String title,
-      AstEditor editor,
-      BadNodesCollection badNodes) throws IOException {
-    if (!badNodes.isEmpty()) {
-      outputStream.putNextEntry(new ZipEntry("parse-errors/" + title));
-      try {
-        List<BadNodeInformation> nodes = badNodes.nodes();
-        for (BadNodeInformation badNode : nodes) {
-          IOUtils2.writeString(outputStream, editor.getSource(badNode.getNode()));
-          writeSmallDivider(outputStream);
-          IOUtils2.writeString(outputStream, ExceptionUtils.getStackTrace(badNode.getException()));
-          writeDivider(outputStream);
-        }
-      } finally {
-        outputStream.closeEntry();
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Contents
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void writeBadNodes(ZipOutputStream outputStream,
+			String title,
+			AstEditor editor,
+			BadNodesCollection badNodes) throws IOException {
+		if (!badNodes.isEmpty()) {
+			outputStream.putNextEntry(new ZipEntry("parse-errors/" + title));
+			try {
+				List<BadNodeInformation> nodes = badNodes.nodes();
+				for (BadNodeInformation badNode : nodes) {
+					IOUtils2.writeString(outputStream, editor.getSource(badNode.getNode()));
+					writeSmallDivider(outputStream);
+					IOUtils2.writeString(outputStream, ExceptionUtils.getStackTrace(badNode.getException()));
+					writeDivider(outputStream);
+				}
+			} finally {
+				outputStream.closeEntry();
+			}
+		}
+	}
 
-  private void writeWarnings(ZipOutputStream outputStream, List<EditorWarning> warnings)
-      throws IOException {
-    if (!warnings.isEmpty()) {
-      outputStream.putNextEntry(new ZipEntry("parse-errors/warnings.txt"));
-      try {
-        for (EditorWarning editorWarning : warnings) {
-          IOUtils2.writeString(outputStream, editorWarning.getMessage());
-          writeSmallDivider(outputStream);
-          IOUtils2.writeString(
-              outputStream,
-              ExceptionUtils.getStackTrace(editorWarning.getException()));
-          writeDivider(outputStream);
-        }
-      } finally {
-        outputStream.closeEntry();
-      }
-    }
-  }
+	private void writeWarnings(ZipOutputStream outputStream, List<EditorWarning> warnings)
+			throws IOException {
+		if (!warnings.isEmpty()) {
+			outputStream.putNextEntry(new ZipEntry("parse-errors/warnings.txt"));
+			try {
+				for (EditorWarning editorWarning : warnings) {
+					IOUtils2.writeString(outputStream, editorWarning.getMessage());
+					writeSmallDivider(outputStream);
+					IOUtils2.writeString(
+							outputStream,
+							ExceptionUtils.getStackTrace(editorWarning.getException()));
+					writeDivider(outputStream);
+				}
+			} finally {
+				outputStream.closeEntry();
+			}
+		}
+	}
 
-  private void writeDivider(OutputStream outputStream) throws IOException {
-    IOUtils2.writeString(
-        outputStream,
-        "\r\n==================================================\r\n\r\n");
-  }
+	private void writeDivider(OutputStream outputStream) throws IOException {
+		IOUtils2.writeString(
+				outputStream,
+				"\r\n==================================================\r\n\r\n");
+	}
 
-  private void writeSmallDivider(OutputStream outputStream) throws IOException {
-    IOUtils2.writeString(outputStream, "\r\n----\r\n");
-  }
+	private void writeSmallDivider(OutputStream outputStream) throws IOException {
+		IOUtils2.writeString(outputStream, "\r\n----\r\n");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IReportEntry
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void write(ZipOutputStream zipStream) throws Exception {
-    JavaInfo javaInfo = EditorState.getActiveJavaInfo();
-    if (javaInfo == null) {
-      return;
-    }
-    AstEditor editor = javaInfo.getEditor();
-    EditorState editorState = EditorState.get(editor);
-    if (editorState == null) {
-      return;
-    }
-    {
-      writeWarnings(zipStream, editorState.getWarnings());
-    }
-    {
-      writeBadNodes(zipStream, "bad-refresh-nodes.txt", editor, editorState.getBadRefreshNodes());
-    }
-    {
-      writeBadNodes(zipStream, "bad-parser-nodes.txt", editor, editorState.getBadParserNodes());
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IReportEntry
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void write(ZipOutputStream zipStream) throws Exception {
+		JavaInfo javaInfo = EditorState.getActiveJavaInfo();
+		if (javaInfo == null) {
+			return;
+		}
+		AstEditor editor = javaInfo.getEditor();
+		EditorState editorState = EditorState.get(editor);
+		if (editorState == null) {
+			return;
+		}
+		{
+			writeWarnings(zipStream, editorState.getWarnings());
+		}
+		{
+			writeBadNodes(zipStream, "bad-refresh-nodes.txt", editor, editorState.getBadRefreshNodes());
+		}
+		{
+			writeBadNodes(zipStream, "bad-parser-nodes.txt", editor, editorState.getBadParserNodes());
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/multi/DefaultMultiMode.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/multi/DefaultMultiMode.java
index 6081c51d4..bb118ca49 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/multi/DefaultMultiMode.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/multi/DefaultMultiMode.java
@@ -34,119 +34,119 @@
  * @coverage core.editor
  */
 abstract class DefaultMultiMode extends MultiMode {
-  protected CTabFolder m_folder;
-  protected IEditorPage m_activePage;
+	protected CTabFolder m_folder;
+	protected IEditorPage m_activePage;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DefaultMultiMode(DesignerEditor editor) {
-    super(editor);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DefaultMultiMode(DesignerEditor editor) {
+		super(editor);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Create tab folder for pages.
-   */
-  protected final void createTabFolder(Composite parent) {
-    m_folder = new CTabFolder(parent, SWT.BOTTOM);
-    TabFolderDecorator.decorate(m_editor, m_folder);
-    m_folder.addSelectionListener(new SelectionAdapter() {
-      @Override
-      public void widgetSelected(SelectionEvent e) {
-        showPage((IEditorPage) e.item.getData());
-      }
-    });
-    // see https://bugs.eclipse.org/bugs/show_bug.cgi?id=199499
-    // Switching tabs by Ctrl+PageUp/PageDown must not be caught on the inner tab set
-    m_folder.addTraverseListener(new TraverseListener() {
-      @Override
-      public void keyTraversed(TraverseEvent e) {
-        switch (e.detail) {
-          case SWT.TRAVERSE_PAGE_NEXT :
-          case SWT.TRAVERSE_PAGE_PREVIOUS :
-            final int detail = e.detail;
-            e.doit = true;
-            e.detail = SWT.TRAVERSE_NONE;
-            // 3.6+
-            ExecutionUtils.runIgnore(new RunnableEx() {
-              @Override
-              public void run() throws Exception {
-                Control control = m_folder.getParent();
-                ReflectionUtils.invokeMethod(
-                    control,
-                    "traverse(int,org.eclipse.swt.widgets.Event)",
-                    detail,
-                    new Event());
-              }
-            });
-        }
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Create tab folder for pages.
+	 */
+	protected final void createTabFolder(Composite parent) {
+		m_folder = new CTabFolder(parent, SWT.BOTTOM);
+		TabFolderDecorator.decorate(m_editor, m_folder);
+		m_folder.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				showPage((IEditorPage) e.item.getData());
+			}
+		});
+		// see https://bugs.eclipse.org/bugs/show_bug.cgi?id=199499
+		// Switching tabs by Ctrl+PageUp/PageDown must not be caught on the inner tab set
+		m_folder.addTraverseListener(new TraverseListener() {
+			@Override
+			public void keyTraversed(TraverseEvent e) {
+				switch (e.detail) {
+				case SWT.TRAVERSE_PAGE_NEXT :
+				case SWT.TRAVERSE_PAGE_PREVIOUS :
+					final int detail = e.detail;
+					e.doit = true;
+					e.detail = SWT.TRAVERSE_NONE;
+					// 3.6+
+					ExecutionUtils.runIgnore(new RunnableEx() {
+						@Override
+						public void run() throws Exception {
+							Control control = m_folder.getParent();
+							ReflectionUtils.invokeMethod(
+									control,
+									"traverse(int,org.eclipse.swt.widgets.Event)",
+									detail,
+									new Event());
+						}
+					});
+				}
+			}
+		});
+	}
 
-  /**
-   * Add given {@link IEditorPage} page to tab folder.
-   */
-  protected final CTabItem createTab(IEditorPage page) {
-    CTabItem item = new CTabItem(m_folder, SWT.NONE);
-    item.setData(page);
-    item.setText(page.getName());
-    item.setImage(page.getImage());
-    item.setControl(page.createControl(m_folder));
-    return item;
-  }
+	/**
+	 * Add given {@link IEditorPage} page to tab folder.
+	 */
+	protected final CTabItem createTab(IEditorPage page) {
+		CTabItem item = new CTabItem(m_folder, SWT.NONE);
+		item.setData(page);
+		item.setText(page.getName());
+		item.setImage(page.getImage());
+		item.setControl(page.createControl(m_folder));
+		return item;
+	}
 
-  /**
-   * Show given {@link IEditorPage} page.
-   */
-  protected final void showPage(IEditorPage page) {
-    if (m_activePage == page) {
-      return;
-    }
-    // deactivate old page
-    if (m_activePage != null) {
-      m_activePage.handleActiveState(false);
-    }
-    // handle show "Source" or "Design"
-    if (m_folder != null) {
-      for (CTabItem item : m_folder.getItems()) {
-        if (item.getData() == page) {
-          m_folder.setSelection(item);
-        }
-      }
-    }
-    // activate new page
-    m_activePage = page;
-    m_activePage.handleActiveState(true);
-    m_activePage.setFocus();
-    handleShowPage();
-  }
+	/**
+	 * Show given {@link IEditorPage} page.
+	 */
+	protected final void showPage(IEditorPage page) {
+		if (m_activePage == page) {
+			return;
+		}
+		// deactivate old page
+		if (m_activePage != null) {
+			m_activePage.handleActiveState(false);
+		}
+		// handle show "Source" or "Design"
+		if (m_folder != null) {
+			for (CTabItem item : m_folder.getItems()) {
+				if (item.getData() == page) {
+					m_folder.setSelection(item);
+				}
+			}
+		}
+		// activate new page
+		m_activePage = page;
+		m_activePage.handleActiveState(true);
+		m_activePage.setFocus();
+		handleShowPage();
+	}
 
-  /**
-   * Handle change active page.
-   */
-  protected void handleShowPage() {
-  }
+	/**
+	 * Handle change active page.
+	 */
+	protected void handleShowPage() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final boolean isSourceActive() {
-    return m_activePage == m_sourcePage;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final boolean isSourceActive() {
+		return m_activePage == m_sourcePage;
+	}
 
-  @Override
-  public final boolean isDesignActive() {
-    return m_activePage == m_designPage;
-  }
+	@Override
+	public final boolean isDesignActive() {
+		return m_activePage == m_designPage;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/multi/DesignerEditor.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/multi/DesignerEditor.java
index 0f2aebe12..fcb37ea93 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/multi/DesignerEditor.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/multi/DesignerEditor.java
@@ -53,271 +53,271 @@
  */
 @SuppressWarnings("restriction")
 public final class DesignerEditor extends CompilationUnitEditor
-    implements
-      IDesignerEditor,
-      IDesignCompositeProvider {
-  private static final String CONTEXT_ID = "org.eclipse.wb.core.java.editorScope";
-  private MultiMode m_multiMode;
-  private boolean m_firstActivation = true;
-  private Composite m_rootControl;
-  private VisitedLinesHighlighter m_linesHighlighter;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DesignerEditor() {
-    DesignerPlugin.configurePreEditor();
-    if (isPagesMode()) {
-      m_multiMode = new MultiPagesMode(this);
-    } else {
-      m_multiMode = new MultiSplitMode(this);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void createPartControl(Composite parent) {
-    m_rootControl = parent;
-    m_multiMode.create(parent);
-    m_linesHighlighter = new VisitedLinesHighlighter(getSourceViewer());
-    activateEditorContext();
-  }
-
-  /**
-   * Activates context of our Java editor.
-   */
-  private void activateEditorContext() {
-    IContextService contextService = (IContextService) getSite().getService(IContextService.class);
-    if (contextService != null) {
-      contextService.activateContext(CONTEXT_ID);
-    }
-  }
-
-  @Override
-  public void setFocus() {
-    m_multiMode.setFocus();
-  }
-
-  @Override
-  protected void doSetInput(IEditorInput input) throws CoreException {
-    super.doSetInput(input);
-    if (!canDesignInput()) {
-      m_multiMode = new MultiSourceMode(this);
-    }
-    m_multiMode.onSetInput();
-  }
-
-  /**
-   * @return <code>false</code> if input is invalid (for example external file), so we can not
-   *         design it.
-   */
-  private boolean canDesignInput() {
-    ICompilationUnit compilationUnit = getCompilationUnit();
-    if (compilationUnit == null) {
-      return false;
-    }
-    try {
-      compilationUnit.getUnderlyingResource();
-    } catch (Throwable e) {
-      return false;
-    }
-    return true;
-  }
-
-  /**
-   * {@link DesignerEditorContributor} notifies us about activation, with "Source" tab, so that Java
-   * actions are now installed.
-   */
-  void activated() {
-    if (m_firstActivation) {
-      m_firstActivation = false;
-      m_multiMode.editorActivatedFirstTime();
-    }
-  }
-
-  @Override
-  public void dispose() {
-    super.dispose();
-    m_multiMode.dispose();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Internal access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> {@link MultiPagesMode} should be used or <code>false</code> for
-   *         {@link MultiSplitMode}.
-   */
-  private boolean isPagesMode() {
-    int layout = DesignerPlugin.getPreferences().getInt(IPreferenceConstants.P_EDITOR_LAYOUT);
-    return layout == IPreferenceConstants.V_EDITOR_LAYOUT_PAGES_SOURCE
-        || layout == IPreferenceConstants.V_EDITOR_LAYOUT_PAGES_DESIGN;
-  }
-
-  /**
-   * @return the main editor {@link Composite}, root of all its {@link Control}s.
-   */
-  public Composite getRootControl() {
-    return m_rootControl;
-  }
-
-  /**
-   * Invokes "super" {@link #createPartControl(Composite)}.
-   */
-  void super_createPartControl(Composite parent) {
-    super.createPartControl(parent);
-  }
-
-  /**
-   * Invokes "super" {@link #getSourceViewer()}.
-   */
-  ISourceViewer super_getSourceViewer() {
-    return super.getSourceViewer();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Moves cursor to given position in Java editor.
-   */
-  public void showSourcePosition(final int position) {
-    ExecutionUtils.runLogLater(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        selectAndReveal(position, 0);
-      }
-    });
-  }
-
-  /**
-   * Highlight lines with visited {@link ASTNode}s.
-   */
-  public void highlightVisitedNodes(final Collection<ASTNode> nodes) {
-    ExecutionUtils.runIgnore(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        if (m_linesHighlighter != null) {
-          m_linesHighlighter.setVisitedNodes(nodes);
-        }
-      }
-    });
-  }
-
-  /**
-   * @return the {@link MultiMode}.
-   */
-  @Override
-  public IMultiMode getMultiMode() {
-    return m_multiMode;
-  }
-
-  /**
-   * @return the {@link ICompilationUnit} opened in this editor.
-   */
-  @Override
-  public ICompilationUnit getCompilationUnit() {
-    IWorkingCopyManager workingCopyManager = JavaUI.getWorkingCopyManager();
-    return workingCopyManager.getWorkingCopy(getEditorInput());
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Listeners
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final List<DesignerEditorListener> m_designPageListeners = Lists.newArrayList();
-
-  @Override
-  public void addDesignPageListener(DesignerEditorListener listener) {
-    m_designPageListeners.add(listener);
-  }
-
-  @Override
-  public void removeDesignPageListener(DesignerEditorListener listener) {
-    m_designPageListeners.remove(listener);
-  }
-
-  public List<DesignerEditorListener> getDesignPageListeners() {
-    return m_designPageListeners;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IDesignCompositeProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public DesignComposite getDesignComposite() {
-    return m_multiMode.getDesignPage().getDesignComposite();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final ProblemsLabelDecorator PROBLEMS_DECORATOR = new ProblemsLabelDecorator();
-
-  @Override
-  public void updatedTitleImage(Image image) {
-    Image baseImage = DesignerPlugin.getImage("gui_editor.gif");
-    Image decoratedImage = PROBLEMS_DECORATOR.decorateImage(baseImage, getCompilationUnit());
-    if (decoratedImage == null) {
-      decoratedImage = baseImage;
-    }
-    setTitleImage(decoratedImage);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Save
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void doSave(IProgressMonitor progressMonitor) {
-    if (DesignerPlugin.getPreferences().getBoolean(IPreferenceConstants.P_EDITOR_FORMAT_ON_SAVE)) {
-      ICompilationUnit unit = getCompilationUnit();
-      FormatAllAction formatAction = new FormatAllAction(getSite());
-      formatAction.run(new StructuredSelection(unit));
-    }
-    super.doSave(progressMonitor);
-    m_multiMode.afterSave();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Actions
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void setAction(String actionID, IAction action) {
-    super.setAction(actionID, action);
-    m_multiMode.getSourcePage().setAction(actionID, action);
-  }
-
-  void super_setAction(String actionID, IAction action) {
-    super.setAction(actionID, action);
-  }
-
-  @Override
-  public IAction getAction(String actionID) {
-    if (m_multiMode.isSourceActive()) {
-      return super.getAction(actionID);
-    }
-    if (m_multiMode.isDesignActive()) {
-      return m_multiMode.getDesignPage().getDesignComposite().getAction(actionID);
-    }
-    return super.getAction(actionID);
-  }
+implements
+IDesignerEditor,
+IDesignCompositeProvider {
+	private static final String CONTEXT_ID = "org.eclipse.wb.core.java.editorScope";
+	private MultiMode m_multiMode;
+	private boolean m_firstActivation = true;
+	private Composite m_rootControl;
+	private VisitedLinesHighlighter m_linesHighlighter;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DesignerEditor() {
+		DesignerPlugin.configurePreEditor();
+		if (isPagesMode()) {
+			m_multiMode = new MultiPagesMode(this);
+		} else {
+			m_multiMode = new MultiSplitMode(this);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void createPartControl(Composite parent) {
+		m_rootControl = parent;
+		m_multiMode.create(parent);
+		m_linesHighlighter = new VisitedLinesHighlighter(getSourceViewer());
+		activateEditorContext();
+	}
+
+	/**
+	 * Activates context of our Java editor.
+	 */
+	private void activateEditorContext() {
+		IContextService contextService = (IContextService) getSite().getService(IContextService.class);
+		if (contextService != null) {
+			contextService.activateContext(CONTEXT_ID);
+		}
+	}
+
+	@Override
+	public void setFocus() {
+		m_multiMode.setFocus();
+	}
+
+	@Override
+	protected void doSetInput(IEditorInput input) throws CoreException {
+		super.doSetInput(input);
+		if (!canDesignInput()) {
+			m_multiMode = new MultiSourceMode(this);
+		}
+		m_multiMode.onSetInput();
+	}
+
+	/**
+	 * @return <code>false</code> if input is invalid (for example external file), so we can not
+	 *         design it.
+	 */
+	private boolean canDesignInput() {
+		ICompilationUnit compilationUnit = getCompilationUnit();
+		if (compilationUnit == null) {
+			return false;
+		}
+		try {
+			compilationUnit.getUnderlyingResource();
+		} catch (Throwable e) {
+			return false;
+		}
+		return true;
+	}
+
+	/**
+	 * {@link DesignerEditorContributor} notifies us about activation, with "Source" tab, so that Java
+	 * actions are now installed.
+	 */
+	void activated() {
+		if (m_firstActivation) {
+			m_firstActivation = false;
+			m_multiMode.editorActivatedFirstTime();
+		}
+	}
+
+	@Override
+	public void dispose() {
+		super.dispose();
+		m_multiMode.dispose();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Internal access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> {@link MultiPagesMode} should be used or <code>false</code> for
+	 *         {@link MultiSplitMode}.
+	 */
+	private boolean isPagesMode() {
+		int layout = DesignerPlugin.getPreferences().getInt(IPreferenceConstants.P_EDITOR_LAYOUT);
+		return layout == IPreferenceConstants.V_EDITOR_LAYOUT_PAGES_SOURCE
+				|| layout == IPreferenceConstants.V_EDITOR_LAYOUT_PAGES_DESIGN;
+	}
+
+	/**
+	 * @return the main editor {@link Composite}, root of all its {@link Control}s.
+	 */
+	public Composite getRootControl() {
+		return m_rootControl;
+	}
+
+	/**
+	 * Invokes "super" {@link #createPartControl(Composite)}.
+	 */
+	void super_createPartControl(Composite parent) {
+		super.createPartControl(parent);
+	}
+
+	/**
+	 * Invokes "super" {@link #getSourceViewer()}.
+	 */
+	ISourceViewer super_getSourceViewer() {
+		return super.getSourceViewer();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Moves cursor to given position in Java editor.
+	 */
+	public void showSourcePosition(final int position) {
+		ExecutionUtils.runLogLater(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				selectAndReveal(position, 0);
+			}
+		});
+	}
+
+	/**
+	 * Highlight lines with visited {@link ASTNode}s.
+	 */
+	public void highlightVisitedNodes(final Collection<ASTNode> nodes) {
+		ExecutionUtils.runIgnore(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				if (m_linesHighlighter != null) {
+					m_linesHighlighter.setVisitedNodes(nodes);
+				}
+			}
+		});
+	}
+
+	/**
+	 * @return the {@link MultiMode}.
+	 */
+	@Override
+	public IMultiMode getMultiMode() {
+		return m_multiMode;
+	}
+
+	/**
+	 * @return the {@link ICompilationUnit} opened in this editor.
+	 */
+	@Override
+	public ICompilationUnit getCompilationUnit() {
+		IWorkingCopyManager workingCopyManager = JavaUI.getWorkingCopyManager();
+		return workingCopyManager.getWorkingCopy(getEditorInput());
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Listeners
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final List<DesignerEditorListener> m_designPageListeners = Lists.newArrayList();
+
+	@Override
+	public void addDesignPageListener(DesignerEditorListener listener) {
+		m_designPageListeners.add(listener);
+	}
+
+	@Override
+	public void removeDesignPageListener(DesignerEditorListener listener) {
+		m_designPageListeners.remove(listener);
+	}
+
+	public List<DesignerEditorListener> getDesignPageListeners() {
+		return m_designPageListeners;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IDesignCompositeProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public DesignComposite getDesignComposite() {
+		return m_multiMode.getDesignPage().getDesignComposite();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final ProblemsLabelDecorator PROBLEMS_DECORATOR = new ProblemsLabelDecorator();
+
+	@Override
+	public void updatedTitleImage(Image image) {
+		Image baseImage = DesignerPlugin.getImage("gui_editor.gif");
+		Image decoratedImage = PROBLEMS_DECORATOR.decorateImage(baseImage, getCompilationUnit());
+		if (decoratedImage == null) {
+			decoratedImage = baseImage;
+		}
+		setTitleImage(decoratedImage);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Save
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void doSave(IProgressMonitor progressMonitor) {
+		if (DesignerPlugin.getPreferences().getBoolean(IPreferenceConstants.P_EDITOR_FORMAT_ON_SAVE)) {
+			ICompilationUnit unit = getCompilationUnit();
+			FormatAllAction formatAction = new FormatAllAction(getSite());
+			formatAction.run(new StructuredSelection(unit));
+		}
+		super.doSave(progressMonitor);
+		m_multiMode.afterSave();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Actions
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void setAction(String actionID, IAction action) {
+		super.setAction(actionID, action);
+		m_multiMode.getSourcePage().setAction(actionID, action);
+	}
+
+	void super_setAction(String actionID, IAction action) {
+		super.setAction(actionID, action);
+	}
+
+	@Override
+	public IAction getAction(String actionID) {
+		if (m_multiMode.isSourceActive()) {
+			return super.getAction(actionID);
+		}
+		if (m_multiMode.isDesignActive()) {
+			return m_multiMode.getDesignPage().getDesignComposite().getAction(actionID);
+		}
+		return super.getAction(actionID);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/multi/DesignerEditorContributor.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/multi/DesignerEditorContributor.java
index bf8734e59..acde7453d 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/multi/DesignerEditorContributor.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/multi/DesignerEditorContributor.java
@@ -21,16 +21,16 @@
  */
 @SuppressWarnings("restriction")
 public class DesignerEditorContributor extends CompilationUnitEditorActionContributor {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void setActiveEditor(IEditorPart part) {
-    super.setActiveEditor(part);
-    if (part != null) {
-      ((DesignerEditor) part).activated();
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void setActiveEditor(IEditorPart part) {
+		super.setActiveEditor(part);
+		if (part != null) {
+			((DesignerEditor) part).activated();
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/multi/MultiMode.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/multi/MultiMode.java
index c82ce45fc..7cd7563c9 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/multi/MultiMode.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/multi/MultiMode.java
@@ -30,127 +30,127 @@
  * @coverage core.editor
  */
 public abstract class MultiMode implements IMultiMode {
-  protected final DesignerEditor m_editor;
-  protected final SourcePage m_sourcePage;
-  protected final DesignPage m_designPage;
-  protected final List<IEditorPage> m_additionalPages = Lists.newArrayList();
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public MultiMode(DesignerEditor editor) {
-    m_editor = editor;
-    m_sourcePage = new SourcePage(m_editor);
-    m_designPage = new DesignPage();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link SourcePage}.
-   */
-  public final SourcePage getSourcePage() {
-    return m_sourcePage;
-  }
-
-  /**
-   * @return the {@link DesignPage}.
-   */
-  @Override
-  public final DesignPage getDesignPage() {
-    return m_designPage;
-  }
-
-  /**
-   * @return <code>true</code> if "Source" page is active.
-   */
-  public abstract boolean isSourceActive();
-
-  /**
-   * @return <code>true</code> if "Design" page is active.
-   */
-  public abstract boolean isDesignActive();
-
-  /**
-   * Activates "Source" page of editor.
-   */
-  @Override
-  public abstract void showSource();
-
-  /**
-   * Activates "Design" page of editor.
-   */
-  @Override
-  public abstract void showDesign();
-
-  /**
-   * Switches between "Source" and "Design" pages.
-   */
-  @Override
-  public abstract void switchSourceDesign();
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Internal access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Creates GUI for this mode.
-   */
-  void create(Composite parent) {
-    m_sourcePage.initialize(m_editor);
-    m_designPage.initialize(m_editor);
-    // create additional pages
-    List<IEditorPageFactory> factories =
-        ExternalFactoriesHelper.getElementsInstances(
-            IEditorPageFactory.class,
-            "org.eclipse.wb.core.designPageFactories",
-            "factory");
-    for (IEditorPageFactory factory : factories) {
-      factory.createPages(m_editor, m_additionalPages);
-    }
-    // initialize create additional pages
-    for (IEditorPage page : m_additionalPages) {
-      page.initialize(m_editor);
-    }
-  }
-
-  /**
-   * {@link DesignerEditor} was fully created and activated. This is good time to show default page,
-   * move focus, etc.
-   */
-  abstract void editorActivatedFirstTime();
-
-  /**
-   * Asks to take focus within the workbench.
-   */
-  abstract void setFocus();
-
-  /**
-   * Disposes this {@link MultiMode}.
-   */
-  void dispose() {
-    m_sourcePage.dispose();
-    m_designPage.dispose();
-    for (IEditorPage page : m_additionalPages) {
-      page.dispose();
-    }
-  }
-
-  /**
-   * Notifies that {@link DesignerEditor} has now new input, so new {@link ICompilationUnit} to
-   * parse.
-   */
-  public abstract void onSetInput();
-
-  /**
-   * Notifies that {@link DesignerEditor} was saved.
-   */
-  public void afterSave() {
-  }
+	protected final DesignerEditor m_editor;
+	protected final SourcePage m_sourcePage;
+	protected final DesignPage m_designPage;
+	protected final List<IEditorPage> m_additionalPages = Lists.newArrayList();
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public MultiMode(DesignerEditor editor) {
+		m_editor = editor;
+		m_sourcePage = new SourcePage(m_editor);
+		m_designPage = new DesignPage();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link SourcePage}.
+	 */
+	public final SourcePage getSourcePage() {
+		return m_sourcePage;
+	}
+
+	/**
+	 * @return the {@link DesignPage}.
+	 */
+	@Override
+	public final DesignPage getDesignPage() {
+		return m_designPage;
+	}
+
+	/**
+	 * @return <code>true</code> if "Source" page is active.
+	 */
+	public abstract boolean isSourceActive();
+
+	/**
+	 * @return <code>true</code> if "Design" page is active.
+	 */
+	public abstract boolean isDesignActive();
+
+	/**
+	 * Activates "Source" page of editor.
+	 */
+	@Override
+	public abstract void showSource();
+
+	/**
+	 * Activates "Design" page of editor.
+	 */
+	@Override
+	public abstract void showDesign();
+
+	/**
+	 * Switches between "Source" and "Design" pages.
+	 */
+	@Override
+	public abstract void switchSourceDesign();
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Internal access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Creates GUI for this mode.
+	 */
+	void create(Composite parent) {
+		m_sourcePage.initialize(m_editor);
+		m_designPage.initialize(m_editor);
+		// create additional pages
+		List<IEditorPageFactory> factories =
+				ExternalFactoriesHelper.getElementsInstances(
+						IEditorPageFactory.class,
+						"org.eclipse.wb.core.designPageFactories",
+						"factory");
+		for (IEditorPageFactory factory : factories) {
+			factory.createPages(m_editor, m_additionalPages);
+		}
+		// initialize create additional pages
+		for (IEditorPage page : m_additionalPages) {
+			page.initialize(m_editor);
+		}
+	}
+
+	/**
+	 * {@link DesignerEditor} was fully created and activated. This is good time to show default page,
+	 * move focus, etc.
+	 */
+	abstract void editorActivatedFirstTime();
+
+	/**
+	 * Asks to take focus within the workbench.
+	 */
+	abstract void setFocus();
+
+	/**
+	 * Disposes this {@link MultiMode}.
+	 */
+	void dispose() {
+		m_sourcePage.dispose();
+		m_designPage.dispose();
+		for (IEditorPage page : m_additionalPages) {
+			page.dispose();
+		}
+	}
+
+	/**
+	 * Notifies that {@link DesignerEditor} has now new input, so new {@link ICompilationUnit} to
+	 * parse.
+	 */
+	public abstract void onSetInput();
+
+	/**
+	 * Notifies that {@link DesignerEditor} was saved.
+	 */
+	public void afterSave() {
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/multi/MultiPagesMode.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/multi/MultiPagesMode.java
index f2f30cd6f..15e41e7f7 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/multi/MultiPagesMode.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/multi/MultiPagesMode.java
@@ -24,121 +24,121 @@
  * @coverage core.editor
  */
 final class MultiPagesMode extends DefaultMultiMode {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public MultiPagesMode(DesignerEditor editor) {
-    super(editor);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public MultiPagesMode(DesignerEditor editor) {
+		super(editor);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  void setFocus() {
-    int selectionIndex = m_folder.getSelectionIndex();
-    if (isSourcePageFirst() && selectionIndex == 0 || !isSourcePageFirst() && selectionIndex == 1) {
-      m_sourcePage.setFocus();
-    } else {
-      m_designPage.setFocus();
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	void setFocus() {
+		int selectionIndex = m_folder.getSelectionIndex();
+		if (isSourcePageFirst() && selectionIndex == 0 || !isSourcePageFirst() && selectionIndex == 1) {
+			m_sourcePage.setFocus();
+		} else {
+			m_designPage.setFocus();
+		}
+	}
 
-  @Override
-  public void showSource() {
-    if (m_activePage != m_sourcePage) {
-      showPage(m_sourcePage);
-    }
-  }
+	@Override
+	public void showSource() {
+		if (m_activePage != m_sourcePage) {
+			showPage(m_sourcePage);
+		}
+	}
 
-  @Override
-  public void showDesign() {
-    if (m_activePage != m_designPage) {
-      showPage(m_designPage);
-    }
-  }
+	@Override
+	public void showDesign() {
+		if (m_activePage != m_designPage) {
+			showPage(m_designPage);
+		}
+	}
 
-  @Override
-  public void switchSourceDesign() {
-    showPage(m_activePage == m_sourcePage ? m_designPage : m_sourcePage);
-  }
+	@Override
+	public void switchSourceDesign() {
+		showPage(m_activePage == m_sourcePage ? m_designPage : m_sourcePage);
+	}
 
-  @Override
-  public void onSetInput() {
-    if (m_activePage == m_designPage) {
-      m_designPage.handleActiveState(false);
-      m_designPage.handleActiveState(true);
-    }
-  }
+	@Override
+	public void onSetInput() {
+		if (m_activePage == m_designPage) {
+			m_designPage.handleActiveState(false);
+			m_designPage.handleActiveState(true);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Internal access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  void create(Composite parent) {
-    super.create(parent);
-    createTabFolder(parent);
-    // create "Source" & "Design" tabs
-    if (isSourcePageFirst()) {
-      createTab(m_sourcePage);
-      createTab(m_designPage);
-    } else {
-      createTab(m_designPage);
-      createTab(m_sourcePage);
-    }
-    // create additional pages
-    for (IEditorPage page : m_additionalPages) {
-      createTab(page);
-    }
-    // initially show Source
-    showSource();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Internal access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	void create(Composite parent) {
+		super.create(parent);
+		createTabFolder(parent);
+		// create "Source" & "Design" tabs
+		if (isSourcePageFirst()) {
+			createTab(m_sourcePage);
+			createTab(m_designPage);
+		} else {
+			createTab(m_designPage);
+			createTab(m_sourcePage);
+		}
+		// create additional pages
+		for (IEditorPage page : m_additionalPages) {
+			createTab(page);
+		}
+		// initially show Source
+		showSource();
+	}
 
-  @Override
-  void editorActivatedFirstTime() {
-    if (!isSourcePageFirst()) {
-      showDesign();
-    }
-  }
+	@Override
+	void editorActivatedFirstTime() {
+		if (!isSourcePageFirst()) {
+			showDesign();
+		}
+	}
 
-  @Override
-  protected void handleShowPage() {
-    super.handleShowPage();
-    if (m_activePage == m_designPage) {
-      maximizeOnActivation();
-    }
-  }
+	@Override
+	protected void handleShowPage() {
+		super.handleShowPage();
+		if (m_activePage == m_designPage) {
+			maximizeOnActivation();
+		}
+	}
 
-  private void maximizeOnActivation() {
-    if (DesignerPlugin.getPreferences().getBoolean(IPreferenceConstants.P_EDITOR_MAX_DESIGN)) {
-      DesignerPlugin.getStandardDisplay().asyncExec(new Runnable() {
-        @Override
-        public void run() {
-          IWorkbenchPage page = m_editor.getSite().getPage();
-          if (!page.isPageZoomed()) {
-            page.toggleZoom(page.getActivePartReference());
-          }
-        }
-      });
-    }
-  }
+	private void maximizeOnActivation() {
+		if (DesignerPlugin.getPreferences().getBoolean(IPreferenceConstants.P_EDITOR_MAX_DESIGN)) {
+			DesignerPlugin.getStandardDisplay().asyncExec(new Runnable() {
+				@Override
+				public void run() {
+					IWorkbenchPage page = m_editor.getSite().getPage();
+					if (!page.isPageZoomed()) {
+						page.toggleZoom(page.getActivePartReference());
+					}
+				}
+			});
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Implementation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if "Source" page should be displayed first.
-   */
-  private boolean isSourcePageFirst() {
-    int layout = DesignerPlugin.getPreferences().getInt(IPreferenceConstants.P_EDITOR_LAYOUT);
-    return layout == IPreferenceConstants.V_EDITOR_LAYOUT_PAGES_SOURCE;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Implementation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if "Source" page should be displayed first.
+	 */
+	private boolean isSourcePageFirst() {
+		int layout = DesignerPlugin.getPreferences().getInt(IPreferenceConstants.P_EDITOR_LAYOUT);
+		return layout == IPreferenceConstants.V_EDITOR_LAYOUT_PAGES_SOURCE;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/multi/MultiSourceMode.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/multi/MultiSourceMode.java
index 6bb3b2e09..3eb61981a 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/multi/MultiSourceMode.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/multi/MultiSourceMode.java
@@ -19,59 +19,59 @@
  * @coverage core.editor
  */
 final class MultiSourceMode extends DefaultMultiMode {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public MultiSourceMode(DesignerEditor editor) {
-    super(editor);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public MultiSourceMode(DesignerEditor editor) {
+		super(editor);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  void setFocus() {
-    m_sourcePage.setFocus();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	void setFocus() {
+		m_sourcePage.setFocus();
+	}
 
-  @Override
-  public void showSource() {
-    showPage(m_sourcePage);
-  }
+	@Override
+	public void showSource() {
+		showPage(m_sourcePage);
+	}
 
-  @Override
-  public void showDesign() {
-  }
+	@Override
+	public void showDesign() {
+	}
 
-  @Override
-  public void switchSourceDesign() {
-  }
+	@Override
+	public void switchSourceDesign() {
+	}
 
-  @Override
-  public void onSetInput() {
-  }
+	@Override
+	public void onSetInput() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Internal access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void create(Composite parent) {
-    m_sourcePage.initialize(m_editor);
-    m_sourcePage.createControl(parent);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Internal access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void create(Composite parent) {
+		m_sourcePage.initialize(m_editor);
+		m_sourcePage.createControl(parent);
+	}
 
-  @Override
-  void editorActivatedFirstTime() {
-  }
+	@Override
+	void editorActivatedFirstTime() {
+	}
 
-  @Override
-  void dispose() {
-    m_sourcePage.dispose();
-  }
+	@Override
+	void dispose() {
+		m_sourcePage.dispose();
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/multi/MultiSplitMode.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/multi/MultiSplitMode.java
index 63ccdc784..266e69d45 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/multi/MultiSplitMode.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/multi/MultiSplitMode.java
@@ -32,206 +32,206 @@
  * @coverage core.editor
  */
 final class MultiSplitMode extends DefaultMultiMode {
-  private SashForm m_sashForm;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public MultiSplitMode(DesignerEditor editor) {
-    super(editor);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  void setFocus() {
-    m_sashForm.setFocus();
-  }
-
-  @Override
-  public void showSource() {
-    showPage(m_sourcePage);
-  }
-
-  @Override
-  public void showDesign() {
-    if (m_sourcePage.isActive() || m_activePage != null && m_activePage != m_designPage) {
-      if (m_additionalPages.isEmpty()) {
-        m_designPage.setFocus();
-      } else {
-        showPage(m_designPage);
-      }
-    }
-  }
-
-  @Override
-  public void switchSourceDesign() {
-    if (m_sourcePage.isActive()) {
-      showPage(m_designPage);
-    } else {
-      showPage(m_sourcePage);
-    }
-  }
-
-  @Override
-  public void onSetInput() {
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Internal access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void create(Composite parent) {
-    super.create(parent);
-    boolean vertical = isSplitVerticalMode();
-    m_sashForm = new SashForm(parent, vertical ? SWT.VERTICAL : SWT.HORIZONTAL);
-    m_sashForm.setBackground(IColorConstants.buttonDarker);
-    // parts
-    if (isSourceFirst()) {
-      createSource();
-      createDesign();
-      m_sashForm.setWeights(new int[]{40, 60});
-    } else {
-      createDesign();
-      createSource();
-      m_sashForm.setWeights(new int[]{60, 40});
-    }
-    // do first refresh and track document modifications
-    m_designPage.setShowProgress(false);
-    m_designPage.refreshGEF();
-    parseOnDocumentChange();
-    trackSourceActivation();
-  }
-
-  private void createDesign() {
-    if (m_additionalPages.isEmpty()) {
-      m_designPage.createControl(m_sashForm);
-    } else {
-      createTabFolder(m_sashForm);
-      // create "Design" tab
-      createTab(m_designPage);
-      // create additional pages
-      for (IEditorPage page : m_additionalPages) {
-        createTab(page);
-      }
-    }
-  }
-
-  private void createSource() {
-    m_sourcePage.createControl(m_sashForm);
-  }
-
-  private void trackSourceActivation() {
-    final Composite sourceControl = (Composite) m_sourcePage.getControl();
-    final Composite designControl = (Composite) m_designPage.getControl();
-    final Display display = sourceControl.getDisplay();
-    display.addFilter(SWT.MouseDown, new Listener() {
-      @Override
-      public void handleEvent(Event event) {
-        if (sourceControl.isDisposed()) {
-          display.removeFilter(SWT.MouseDown, this);
-          return;
-        }
-        if (UiUtils.isChildOf(sourceControl, event.widget)) {
-          showPage(m_sourcePage);
-        }
-        if (UiUtils.isChildOf(designControl, event.widget)) {
-          showPage(m_designPage);
-        }
-      }
-    });
-  }
-
-  @Override
-  void editorActivatedFirstTime() {
-    showSource();
-    showDesign();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Re-parse
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void parseOnDocumentChange() {
-    m_editor.super_getSourceViewer().getDocument().addDocumentListener(new IDocumentListener() {
-      private int m_lastModificationId;
-
-      @Override
-      public void documentAboutToBeChanged(DocumentEvent event) {
-      }
-
-      @Override
-      public void documentChanged(DocumentEvent event) {
-        final int modificationId = ++m_lastModificationId;
-        int delay = getSyncDelay();
-        if (delay > 0) {
-          delay = Math.max(delay, 250);
-          Display.getCurrent().timerExec(delay, new Runnable() {
-            @Override
-            public void run() {
-              if (modificationId == m_lastModificationId) {
-                if (m_sourcePage.isActive()) {
-                  parseWhenSourceActive();
-                }
-              }
-            }
-          });
-        }
-      }
-    });
-  }
-
-  private void parseWhenSourceActive() {
-    try {
-      m_designPage.refreshGEF();
-    } catch (Throwable ex) {
-    }
-  }
-
-  @Override
-  public void afterSave() {
-    super.afterSave();
-    if (getSyncDelay() <= 0) {
-      parseWhenSourceActive();
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> "Source" page should be first.
-   */
-  private boolean isSourceFirst() {
-    int layout = DesignerPlugin.getPreferences().getInt(IPreferenceConstants.P_EDITOR_LAYOUT);
-    return layout == IPreferenceConstants.V_EDITOR_LAYOUT_SPLIT_HORIZONTAL_SOURCE
-        || layout == IPreferenceConstants.V_EDITOR_LAYOUT_SPLIT_VERTICAL_SOURCE;
-  }
-
-  /**
-   * @return <code>true</code> if source/design part should be located above each other.
-   */
-  private boolean isSplitVerticalMode() {
-    int layout = DesignerPlugin.getPreferences().getInt(IPreferenceConstants.P_EDITOR_LAYOUT);
-    return layout == IPreferenceConstants.V_EDITOR_LAYOUT_SPLIT_VERTICAL_SOURCE
-        || layout == IPreferenceConstants.V_EDITOR_LAYOUT_SPLIT_VERTICAL_DESIGN;
-  }
-
-  /**
-   * @return the time in milliseconds, to wait before parsing, when editor was changed. If -1, then
-   *         disabled, parse on save.
-   */
-  private int getSyncDelay() {
-    return DesignerPlugin.getPreferences().getInt(IPreferenceConstants.P_EDITOR_LAYOUT_SYNC_DELAY);
-  }
+	private SashForm m_sashForm;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public MultiSplitMode(DesignerEditor editor) {
+		super(editor);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	void setFocus() {
+		m_sashForm.setFocus();
+	}
+
+	@Override
+	public void showSource() {
+		showPage(m_sourcePage);
+	}
+
+	@Override
+	public void showDesign() {
+		if (m_sourcePage.isActive() || m_activePage != null && m_activePage != m_designPage) {
+			if (m_additionalPages.isEmpty()) {
+				m_designPage.setFocus();
+			} else {
+				showPage(m_designPage);
+			}
+		}
+	}
+
+	@Override
+	public void switchSourceDesign() {
+		if (m_sourcePage.isActive()) {
+			showPage(m_designPage);
+		} else {
+			showPage(m_sourcePage);
+		}
+	}
+
+	@Override
+	public void onSetInput() {
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Internal access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void create(Composite parent) {
+		super.create(parent);
+		boolean vertical = isSplitVerticalMode();
+		m_sashForm = new SashForm(parent, vertical ? SWT.VERTICAL : SWT.HORIZONTAL);
+		m_sashForm.setBackground(IColorConstants.buttonDarker);
+		// parts
+		if (isSourceFirst()) {
+			createSource();
+			createDesign();
+			m_sashForm.setWeights(new int[]{40, 60});
+		} else {
+			createDesign();
+			createSource();
+			m_sashForm.setWeights(new int[]{60, 40});
+		}
+		// do first refresh and track document modifications
+		m_designPage.setShowProgress(false);
+		m_designPage.refreshGEF();
+		parseOnDocumentChange();
+		trackSourceActivation();
+	}
+
+	private void createDesign() {
+		if (m_additionalPages.isEmpty()) {
+			m_designPage.createControl(m_sashForm);
+		} else {
+			createTabFolder(m_sashForm);
+			// create "Design" tab
+			createTab(m_designPage);
+			// create additional pages
+			for (IEditorPage page : m_additionalPages) {
+				createTab(page);
+			}
+		}
+	}
+
+	private void createSource() {
+		m_sourcePage.createControl(m_sashForm);
+	}
+
+	private void trackSourceActivation() {
+		final Composite sourceControl = (Composite) m_sourcePage.getControl();
+		final Composite designControl = (Composite) m_designPage.getControl();
+		final Display display = sourceControl.getDisplay();
+		display.addFilter(SWT.MouseDown, new Listener() {
+			@Override
+			public void handleEvent(Event event) {
+				if (sourceControl.isDisposed()) {
+					display.removeFilter(SWT.MouseDown, this);
+					return;
+				}
+				if (UiUtils.isChildOf(sourceControl, event.widget)) {
+					showPage(m_sourcePage);
+				}
+				if (UiUtils.isChildOf(designControl, event.widget)) {
+					showPage(m_designPage);
+				}
+			}
+		});
+	}
+
+	@Override
+	void editorActivatedFirstTime() {
+		showSource();
+		showDesign();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Re-parse
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void parseOnDocumentChange() {
+		m_editor.super_getSourceViewer().getDocument().addDocumentListener(new IDocumentListener() {
+			private int m_lastModificationId;
+
+			@Override
+			public void documentAboutToBeChanged(DocumentEvent event) {
+			}
+
+			@Override
+			public void documentChanged(DocumentEvent event) {
+				final int modificationId = ++m_lastModificationId;
+				int delay = getSyncDelay();
+				if (delay > 0) {
+					delay = Math.max(delay, 250);
+					Display.getCurrent().timerExec(delay, new Runnable() {
+						@Override
+						public void run() {
+							if (modificationId == m_lastModificationId) {
+								if (m_sourcePage.isActive()) {
+									parseWhenSourceActive();
+								}
+							}
+						}
+					});
+				}
+			}
+		});
+	}
+
+	private void parseWhenSourceActive() {
+		try {
+			m_designPage.refreshGEF();
+		} catch (Throwable ex) {
+		}
+	}
+
+	@Override
+	public void afterSave() {
+		super.afterSave();
+		if (getSyncDelay() <= 0) {
+			parseWhenSourceActive();
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> "Source" page should be first.
+	 */
+	private boolean isSourceFirst() {
+		int layout = DesignerPlugin.getPreferences().getInt(IPreferenceConstants.P_EDITOR_LAYOUT);
+		return layout == IPreferenceConstants.V_EDITOR_LAYOUT_SPLIT_HORIZONTAL_SOURCE
+				|| layout == IPreferenceConstants.V_EDITOR_LAYOUT_SPLIT_VERTICAL_SOURCE;
+	}
+
+	/**
+	 * @return <code>true</code> if source/design part should be located above each other.
+	 */
+	private boolean isSplitVerticalMode() {
+		int layout = DesignerPlugin.getPreferences().getInt(IPreferenceConstants.P_EDITOR_LAYOUT);
+		return layout == IPreferenceConstants.V_EDITOR_LAYOUT_SPLIT_VERTICAL_SOURCE
+				|| layout == IPreferenceConstants.V_EDITOR_LAYOUT_SPLIT_VERTICAL_DESIGN;
+	}
+
+	/**
+	 * @return the time in milliseconds, to wait before parsing, when editor was changed. If -1, then
+	 *         disabled, parse on save.
+	 */
+	private int getSyncDelay() {
+		return DesignerPlugin.getPreferences().getInt(IPreferenceConstants.P_EDITOR_LAYOUT_SYNC_DELAY);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/multi/SourcePage.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/multi/SourcePage.java
index 4bda1290f..a3ac24eee 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/multi/SourcePage.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/multi/SourcePage.java
@@ -34,126 +34,126 @@
  * @coverage core.editor
  */
 public final class SourcePage implements IEditorPage {
-  private final DesignerEditor m_editor;
-  private final Map<String, IAction> m_idToTextEditorAction = Maps.newHashMap();
-  private Composite m_composite;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SourcePage(DesignerEditor editor) {
-    m_editor = editor;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Life cycle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void initialize(IDesignerEditor designerPage) {
-  }
-
-  @Override
-  public void dispose() {
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Activation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private boolean m_active = false;
-
-  @Override
-  public void handleActiveState(boolean activate) {
-    if (m_active == activate) {
-      return;
-    }
-    m_active = activate;
-    //
-    updateSourceActions(m_active);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Control createControl(Composite parent) {
-    m_composite = new Composite(parent, SWT.NONE);
-    m_composite.setLayout(new FillLayout());
-    m_editor.super_createPartControl(m_composite);
-    return m_composite;
-  }
-
-  @Override
-  public Control getControl() {
-    return m_composite;
-  }
-
-  @Override
-  public void setFocus() {
-    getTextWidget().setFocus();
-  }
-
-  private StyledText getTextWidget() {
-    return m_editor.super_getSourceViewer().getTextWidget();
-  }
-
-  /**
-   * @return <code>true</code> if page is active.
-   */
-  public boolean isActive() {
-    return getTextWidget().isFocusControl();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getName() {
-    return Messages.SourcePage_name;
-  }
-
-  @Override
-  public Image getImage() {
-    return DesignerPlugin.getImage("editor_source_page.png");
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void setAction(String actionID, IAction action) {
-    if (action != null
-        && !"save".equals(actionID)
-        && !"undo".equals(actionID)
-        && !"redo".equals(actionID)) {
-      m_idToTextEditorAction.put(actionID, action);
-    }
-  }
-
-  /**
-   * Installs/removes source editor actions depending on given flag. We need this to prevent
-   * activation of source editor actions on Design page, such as auto-completion (Ctrl+Space).
-   */
-  private void updateSourceActions(boolean install) {
-    for (Map.Entry<String, IAction> entry : m_idToTextEditorAction.entrySet()) {
-      String id = entry.getKey();
-      IAction action = entry.getValue();
-      action.setEnabled(install);
-      if (install) {
-        m_editor.super_setAction(id, action);
-      } else {
-        m_editor.super_setAction(id, null);
-      }
-    }
-  }
+	private final DesignerEditor m_editor;
+	private final Map<String, IAction> m_idToTextEditorAction = Maps.newHashMap();
+	private Composite m_composite;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SourcePage(DesignerEditor editor) {
+		m_editor = editor;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Life cycle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void initialize(IDesignerEditor designerPage) {
+	}
+
+	@Override
+	public void dispose() {
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Activation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private boolean m_active = false;
+
+	@Override
+	public void handleActiveState(boolean activate) {
+		if (m_active == activate) {
+			return;
+		}
+		m_active = activate;
+		//
+		updateSourceActions(m_active);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Control createControl(Composite parent) {
+		m_composite = new Composite(parent, SWT.NONE);
+		m_composite.setLayout(new FillLayout());
+		m_editor.super_createPartControl(m_composite);
+		return m_composite;
+	}
+
+	@Override
+	public Control getControl() {
+		return m_composite;
+	}
+
+	@Override
+	public void setFocus() {
+		getTextWidget().setFocus();
+	}
+
+	private StyledText getTextWidget() {
+		return m_editor.super_getSourceViewer().getTextWidget();
+	}
+
+	/**
+	 * @return <code>true</code> if page is active.
+	 */
+	public boolean isActive() {
+		return getTextWidget().isFocusControl();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getName() {
+		return Messages.SourcePage_name;
+	}
+
+	@Override
+	public Image getImage() {
+		return DesignerPlugin.getImage("editor_source_page.png");
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void setAction(String actionID, IAction action) {
+		if (action != null
+				&& !"save".equals(actionID)
+				&& !"undo".equals(actionID)
+				&& !"redo".equals(actionID)) {
+			m_idToTextEditorAction.put(actionID, action);
+		}
+	}
+
+	/**
+	 * Installs/removes source editor actions depending on given flag. We need this to prevent
+	 * activation of source editor actions on Design page, such as auto-completion (Ctrl+Space).
+	 */
+	private void updateSourceActions(boolean install) {
+		for (Map.Entry<String, IAction> entry : m_idToTextEditorAction.entrySet()) {
+			String id = entry.getKey();
+			IAction action = entry.getValue();
+			action.setEnabled(install);
+			if (install) {
+				m_editor.super_setAction(id, action);
+			} else {
+				m_editor.super_setAction(id, null);
+			}
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/multi/VisitedLinesHighlighter.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/multi/VisitedLinesHighlighter.java
index 71ebdde96..78091f379 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/multi/VisitedLinesHighlighter.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/multi/VisitedLinesHighlighter.java
@@ -51,143 +51,143 @@
  * @coverage core.editor
  */
 public class VisitedLinesHighlighter implements IPainter, LineBackgroundListener {
-  private boolean m_shouldHighlight;
-  private Color m_color;
-  private final List<Position> m_linePositions = Lists.newArrayList();
-  private final ISourceViewer m_sourceViewer;
-  private final IDocument m_document;
-  private final StyledText m_textWidget;
-  private final ITextViewerExtension2 m_extension2;
-  private final ITextViewerExtension5 m_extension5;
-  private IPaintPositionManager m_positionManager;
+	private boolean m_shouldHighlight;
+	private Color m_color;
+	private final List<Position> m_linePositions = Lists.newArrayList();
+	private final ISourceViewer m_sourceViewer;
+	private final IDocument m_document;
+	private final StyledText m_textWidget;
+	private final ITextViewerExtension2 m_extension2;
+	private final ITextViewerExtension5 m_extension5;
+	private IPaintPositionManager m_positionManager;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public VisitedLinesHighlighter(ISourceViewer sourceViewer) {
-    m_sourceViewer = sourceViewer;
-    m_document = m_sourceViewer.getDocument();
-    m_textWidget = sourceViewer.getTextWidget();
-    m_extension2 = (ITextViewerExtension2) sourceViewer;
-    m_extension5 = (ITextViewerExtension5) m_sourceViewer;
-    m_extension2.addPainter(this);
-    m_textWidget.addLineBackgroundListener(this);
-    //
-    trackPreferences();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public VisitedLinesHighlighter(ISourceViewer sourceViewer) {
+		m_sourceViewer = sourceViewer;
+		m_document = m_sourceViewer.getDocument();
+		m_textWidget = sourceViewer.getTextWidget();
+		m_extension2 = (ITextViewerExtension2) sourceViewer;
+		m_extension5 = (ITextViewerExtension5) m_sourceViewer;
+		m_extension2.addPainter(this);
+		m_textWidget.addLineBackgroundListener(this);
+		//
+		trackPreferences();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Preferences tracking
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  IPropertyChangeListener m_preferenceListener = new IPropertyChangeListener() {
-    @Override
-    public void propertyChange(PropertyChangeEvent event) {
-      trackPreferences_getCurrentValues();
-      m_textWidget.redraw();
-    }
-  };
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Preferences tracking
+	//
+	////////////////////////////////////////////////////////////////////////////
+	IPropertyChangeListener m_preferenceListener = new IPropertyChangeListener() {
+		@Override
+		public void propertyChange(PropertyChangeEvent event) {
+			trackPreferences_getCurrentValues();
+			m_textWidget.redraw();
+		}
+	};
 
-  private void trackPreferences() {
-    trackPreferences_getCurrentValues();
-    DesignerPlugin.getPreferences().addPropertyChangeListener(m_preferenceListener);
-  }
+	private void trackPreferences() {
+		trackPreferences_getCurrentValues();
+		DesignerPlugin.getPreferences().addPropertyChangeListener(m_preferenceListener);
+	}
 
-  private void trackPreferences_getCurrentValues() {
-    IPreferenceStore preferences = DesignerPlugin.getPreferences();
-    m_shouldHighlight = preferences.getBoolean(IPreferenceConstants.P_HIGHLIGHT_VISITED);
-    RGB rgb =
-        PreferenceConverter.getColor(preferences, IPreferenceConstants.P_HIGHLIGHT_VISITED_COLOR);
-    m_color = SwtResourceManager.getColor(rgb);
-  }
+	private void trackPreferences_getCurrentValues() {
+		IPreferenceStore preferences = DesignerPlugin.getPreferences();
+		m_shouldHighlight = preferences.getBoolean(IPreferenceConstants.P_HIGHLIGHT_VISITED);
+		RGB rgb =
+				PreferenceConverter.getColor(preferences, IPreferenceConstants.P_HIGHLIGHT_VISITED_COLOR);
+		m_color = SwtResourceManager.getColor(rgb);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void setVisitedNodes(Collection<ASTNode> nodes) throws Exception {
-    // unmanage previous positions
-    for (Position position : m_linePositions) {
-      m_positionManager.unmanagePosition(position);
-    }
-    // prepare lines
-    Set<Integer> lines = Sets.newHashSet();
-    for (ASTNode node : nodes) {
-      int line = m_document.getLineOfOffset(node.getStartPosition());
-      lines.add(line);
-    }
-    // create new positions
-    m_linePositions.clear();
-    for (Integer line : lines) {
-      int lineOffset = m_document.getLineOffset(line);
-      Position position = new Position(lineOffset);
-      m_linePositions.add(position);
-      m_positionManager.managePosition(position);
-    }
-    // paint
-    ExecutionUtils.runAsync(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        m_textWidget.redraw();
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void setVisitedNodes(Collection<ASTNode> nodes) throws Exception {
+		// unmanage previous positions
+		for (Position position : m_linePositions) {
+			m_positionManager.unmanagePosition(position);
+		}
+		// prepare lines
+		Set<Integer> lines = Sets.newHashSet();
+		for (ASTNode node : nodes) {
+			int line = m_document.getLineOfOffset(node.getStartPosition());
+			lines.add(line);
+		}
+		// create new positions
+		m_linePositions.clear();
+		for (Integer line : lines) {
+			int lineOffset = m_document.getLineOffset(line);
+			Position position = new Position(lineOffset);
+			m_linePositions.add(position);
+			m_positionManager.managePosition(position);
+		}
+		// paint
+		ExecutionUtils.runAsync(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				m_textWidget.redraw();
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IPainter
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void setPositionManager(IPaintPositionManager manager) {
-    m_positionManager = manager;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IPainter
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void setPositionManager(IPaintPositionManager manager) {
+		m_positionManager = manager;
+	}
 
-  @Override
-  public void paint(int reason) {
-  }
+	@Override
+	public void paint(int reason) {
+	}
 
-  @Override
-  public void deactivate(boolean redraw) {
-  }
+	@Override
+	public void deactivate(boolean redraw) {
+	}
 
-  @Override
-  public void dispose() {
-    DesignerPlugin.getPreferences().removePropertyChangeListener(m_preferenceListener);
-  }
+	@Override
+	public void dispose() {
+		DesignerPlugin.getPreferences().removePropertyChangeListener(m_preferenceListener);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // LineBackgroundListener
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void lineGetBackground(LineBackgroundEvent event) {
-    if (!m_shouldHighlight) {
-      return;
-    }
-    // prepare "model" line offset
-    int lineOffset = event.lineOffset;
-    lineOffset = m_extension5.widgetOffset2ModelOffset(lineOffset);
-    // if already not default background, such as "current line", then keep it as is
-    if (event.lineBackground != null) {
-      Color defaultBackground = m_textWidget.getBackground();
-      if (!event.lineBackground.equals(defaultBackground)) {
-        return;
-      }
-    }
-    // try to find position for given line
-    for (Position position : m_linePositions) {
-      if (!position.isDeleted()) {
-        if (position.getOffset() == lineOffset) {
-          event.lineBackground = m_color;
-          break;
-        }
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// LineBackgroundListener
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void lineGetBackground(LineBackgroundEvent event) {
+		if (!m_shouldHighlight) {
+			return;
+		}
+		// prepare "model" line offset
+		int lineOffset = event.lineOffset;
+		lineOffset = m_extension5.widgetOffset2ModelOffset(lineOffset);
+		// if already not default background, such as "current line", then keep it as is
+		if (event.lineBackground != null) {
+			Color defaultBackground = m_textWidget.getBackground();
+			if (!event.lineBackground.equals(defaultBackground)) {
+				return;
+			}
+		}
+		// try to find position for given line
+		for (Position position : m_linePositions) {
+			if (!position.isDeleted()) {
+				if (position.getOffset() == lineOffset) {
+					event.lineBackground = m_color;
+					break;
+				}
+			}
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/DesignerPalette.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/DesignerPalette.java
index 136f1ed70..f3062a9ec 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/DesignerPalette.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/DesignerPalette.java
@@ -82,598 +82,598 @@
  * @coverage core.editor.palette.ui
  */
 public class DesignerPalette {
-  public static final String FLAG_NO_PALETTE = "FLAG_NO_PALETTE"; // Don't load palette during testing
-  public static final int COLUMN_ICONS_TYPE = 0;
-  public static final int LIST_ICONS_TYPE = 1;
-  public static final int ONLY_ICONS_TYPE = 2;
-  public static final int DETAIL_ICONS_TYPE = 3;
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance fields
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final String ENTRYINFO_CATEGORY = "org.eclipse.wb.swing.layouts";
-  private final boolean m_isMainPalette;
-  private final PluginPalettePreferences m_preferences;
-  private final PaletteComposite m_paletteComposite;
-  private final DesignerPaletteOperations m_operations;
-  private IEditPartViewer m_editPartViewer;
-  private JavaInfo m_rootJavaInfo;
-  private PaletteManager m_manager;
-  private IEntry m_defaultEntry;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DesignerPalette(Composite parent, int style, boolean isMainPalette) {
-    m_isMainPalette = isMainPalette;
-    m_operations = new DesignerPaletteOperations();
-    m_preferences = new PluginPalettePreferences(DesignerPlugin.getPreferences());
-    m_paletteComposite = new PaletteComposite(parent, SWT.NONE);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public Control getControl() {
-    return m_paletteComposite;
-  }
-
-  /**
-   * Sets information about editor.
-   */
-  public void setInput(IEditPartViewer editPartViewer,
-      final JavaInfo rootJavaInfo,
-      String toolkitId) {
-    m_editPartViewer = editPartViewer;
-    m_rootJavaInfo = rootJavaInfo;
-    //
-    if (m_rootJavaInfo != null) {
-      // cancel cache pre-loading jobs possibly scheduled and/or running
-      {
-        IJobManager manager = Job.getJobManager();
-        manager.cancel(ComponentPresentationHelper.PALETTE_PRELOAD_JOBS);
-        try {
-          manager.join(ComponentPresentationHelper.PALETTE_PRELOAD_JOBS, null);
-        } catch (Throwable e) {
-          // don't care
-        }
-      }
-      // configure palette
-      m_manager = new PaletteManager(m_rootJavaInfo, toolkitId);
-      reloadPalette();
-      // configure preferences
-      {
-        m_preferences.setPrefix(toolkitId);
-        m_paletteComposite.setPreferences(m_preferences);
-      }
-      // set site
-      IPaletteSite.Helper.setSite(m_rootJavaInfo, m_paletteSite);
-      // refresh palette on JavaInfo hierarchy refresh
-      rootJavaInfo.addBroadcastListener(new ObjectEventListener() {
-        @Override
-        public void refreshed() throws Exception {
-          if (m_paletteComposite.isDisposed()) {
-            rootJavaInfo.removeBroadcastListener(this);
-            return;
-          }
-          refreshVisualPalette();
-        }
-      });
-    }
-  }
-
-  /**
-   * @return the {@link PaletteEventListener} for hierarchy.
-   */
-  private PaletteEventListener getBroadcastPalette() {
-    return m_rootJavaInfo.getBroadcast(PaletteEventListener.class);
-  }
-
-  /**
-   * Loads new base palette, applies commands and shows.
-   */
-  private void reloadPalette() {
-    m_manager.reloadPalette();
-    showPalette();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds given {@link Command} to the list and writes commands.
-   */
-  private void commands_addWrite(Command command) {
-    commands_addWrite(ImmutableList.of(command));
-  }
-
-  /**
-   * Adds given {@link Command}s to the list and writes commands.
-   */
-  private void commands_addWrite(List<Command> commands) {
-    for (Command command : commands) {
-      m_manager.commands_add(command);
-    }
-    m_manager.commands_write();
-    refreshVisualPalette();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IPaletteSite
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final IPaletteSite m_paletteSite = new IPaletteSite() {
-    @Override
-    public Shell getShell() {
-      return getOperations().getShell();
-    }
-
-    @Override
-    public PaletteInfo getPalette() {
-      return m_manager.getPalette();
-    }
-
-    @Override
-    public void addCommand(Command command) {
-      commands_addWrite(command);
-    }
-
-    @Override
-    public void editPalette() {
-      getOperations().editPalette();
-    }
-  };
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Palette displaying
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final Map<CategoryInfo, ICategory> m_categoryInfoToVisual = Maps.newHashMap();
-  private final Map<ICategory, CategoryInfo> m_visualToCategoryInfo = Maps.newHashMap();
-  private final Map<String, Boolean> m_openCategories = Maps.newHashMap();
-  private final Set<EntryInfo> m_knownEntryInfos = Sets.newHashSet();
-  private final Set<EntryInfo> m_goodEntryInfos = Sets.newHashSet();
-  private final Map<EntryInfo, IEntry> m_entryInfoToVisual = Maps.newHashMap();
-  private final Map<IEntry, EntryInfo> m_visualToEntryInfo = Maps.newHashMap();
-
-  /**
-   * Clears all caches for {@link EntryInfo}, {@link IEntry}, etc.
-   */
-  private void clearEntryCaches() {
-    m_categoryInfoToVisual.clear();
-    m_visualToCategoryInfo.clear();
-    m_knownEntryInfos.clear();
-    m_goodEntryInfos.clear();
-    m_entryInfoToVisual.clear();
-    m_visualToEntryInfo.clear();
-    m_defaultEntry = null;
-  }
-
-  /**
-   * @return the {@link IEntry} for given {@link EntryInfo}.
-   */
-  private IEntry getVisualEntry(final EntryInfo entryInfo) {
-    IEntry entry = m_entryInfoToVisual.get(entryInfo);
-    if (entry == null && !m_knownEntryInfos.contains(entryInfo)) {
-      m_knownEntryInfos.add(entryInfo);
-      if (entryInfo.initialize(m_editPartViewer, m_rootJavaInfo)) {
-        entry = new IEntry() {
-          ////////////////////////////////////////////////////////////////////////////
-          //
-          // Access
-          //
-          ////////////////////////////////////////////////////////////////////////////
-          @Override
-          public boolean isEnabled() {
-            return entryInfo.isEnabled();
-          }
-
-          @Override
-          public Image getIcon() {
-            return entryInfo.getIcon();
-          }
-
-          @Override
-          public String getText() {
-            return entryInfo.getName();
-          }
-
-          @Override
-          public String getToolTipText() {
-            return entryInfo.getDescription();
-          }
-
-          ////////////////////////////////////////////////////////////////////////////
-          //
-          // Activation
-          //
-          ////////////////////////////////////////////////////////////////////////////
-          @Override
-          public boolean activate(boolean reload) {
-            return entryInfo.activate(reload);
-          }
-        };
-        m_goodEntryInfos.add(entryInfo);
-        m_entryInfoToVisual.put(entryInfo, entry);
-        m_visualToEntryInfo.put(entry, entryInfo);
-        // initialize default entry
-        if (m_defaultEntry == null) {
-          if (entryInfo instanceof IDefaultEntryInfo) {
-            m_defaultEntry = entry;
-          }
-        }
-      }
-    }
-    return entry;
-  }
-
-  /**
-   * @return the {@link ICategory} for given {@link CategoryInfo}.
-   */
-  private ICategory getVisualCategory(final CategoryInfo categoryInfo) {
-    ICategory category = m_categoryInfoToVisual.get(categoryInfo);
-    if (category == null) {
-      final String categoryId = categoryInfo.getId();
-      category = new ICategory() {
-        private boolean m_open;
-
-        @Override
-        public List<IEntry> getEntries() {
-          final List<EntryInfo> entryInfoList = Lists.newArrayList(categoryInfo.getEntries());
-          // add new EntryInfo's using broadcast
-          ExecutionUtils.runIgnore(new RunnableEx() {
-            @Override
-            public void run() throws Exception {
-              getBroadcastPalette().entries(categoryInfo, entryInfoList);
-            }
-          });
-          // convert EntryInfo's into IEntry's
-          List<IEntry> entries = Lists.newArrayList();
-          for (EntryInfo entryInfo : entryInfoList) {
-            if (entryInfo.isVisible()) {
-              if (categoryId.equals(ENTRYINFO_CATEGORY)) {
-                if (InstanceScope.INSTANCE.getNode(
-                    IEditorPreferenceConstants.P_AVAILABLE_LAYOUTS_NODE).getBoolean(
-                        entryInfo.getId().substring(entryInfo.getId().indexOf(' ') + 1),
-                        true)) {
-                  IEntry entry = getVisualEntry(entryInfo);
-                  if (entry != null) {
-                    entries.add(entry);
-                  }
-                }
-              } else {
-                IEntry entry = getVisualEntry(entryInfo);
-                if (entry != null) {
-                  entries.add(entry);
-                }
-              }
-            }
-          }
-          return entries;
-        }
-
-        @Override
-        public String getText() {
-          return categoryInfo.getName();
-        }
-
-        @Override
-        public String getToolTipText() {
-          return categoryInfo.getDescription();
-        }
-
-        @Override
-        public boolean isOpen() {
-          return m_open;
-        }
-
-        @Override
-        public void setOpen(boolean open) {
-          m_open = open;
-          m_openCategories.put(categoryId, open);
-        }
-      };
-      m_categoryInfoToVisual.put(categoryInfo, category);
-      m_visualToCategoryInfo.put(category, categoryInfo);
-      // set "open" state: from map, or default
-      if (m_openCategories.containsKey(categoryId)) {
-        category.setOpen(m_openCategories.get(categoryId));
-      } else {
-        category.setOpen(categoryInfo.isOpen());
-      }
-    }
-    return category;
-  }
-
-  /**
-   * Shows current {@link PaletteInfo}.
-   */
-  private void showPalette() {
-    clearEntryCaches();
-    // set IPalette
-    IPalette palette = new IPalette() {
-      @Override
-      public List<ICategory> getCategories() {
-        // check for skipping palette during tests
-        if (System.getProperty(FLAG_NO_PALETTE) != null) {
-          return ImmutableList.of();
-        }
-        // get categories for palette model
-        final List<CategoryInfo> categoryInfoList;
-        {
-          List<CategoryInfo> pristineCategories = m_manager.getPalette().getCategories();
-          categoryInfoList = Lists.newArrayList(pristineCategories);
-        }
-        // add new CategoryInfo's using broadcast
-        ExecutionUtils.runLog(new RunnableEx() {
-          @Override
-          public void run() throws Exception {
-            getBroadcastPalette().categories(categoryInfoList);
-            getBroadcastPalette().categories2(categoryInfoList);
-          }
-        });
-        // convert CategoryInfo's into ICategory's
-        List<ICategory> categories = Lists.newArrayList();
-        for (CategoryInfo categoryInfo : categoryInfoList) {
-          if (shouldBeDisplayed(categoryInfo)) {
-            ICategory category = getVisualCategory(categoryInfo);
-            categories.add(category);
-          }
-        }
-        return categories;
-      }
-
-      @Override
-      public void addPopupActions(IMenuManager menuManager, Object target, int iconsType) {
-        new DesignerPalettePopupActions(getOperations()).addPopupActions(
-            menuManager,
-            target,
-            iconsType);
-      }
-
-      @Override
-      public void selectDefault() {
-        m_editPartViewer.getEditDomain().loadDefaultTool();
-      }
-
-      @Override
-      public void moveCategory(ICategory _category, ICategory _nextCategory) {
-        CategoryInfo category = m_visualToCategoryInfo.get(_category);
-        CategoryInfo nextCategory = m_visualToCategoryInfo.get(_nextCategory);
-        commands_addWrite(new CategoryMoveCommand(category, nextCategory));
-      }
-
-      @Override
-      public void moveEntry(IEntry _entry, ICategory _targetCategory, IEntry _nextEntry) {
-        EntryInfo entry = m_visualToEntryInfo.get(_entry);
-        CategoryInfo category = m_visualToCategoryInfo.get(_targetCategory);
-        EntryInfo nextEntry = m_visualToEntryInfo.get(_nextEntry);
-        commands_addWrite(new EntryMoveCommand(entry, category, nextEntry));
-      }
-    };
-    m_paletteComposite.setPalette(palette);
-    configure_EditDomain_DefaultTool();
-  }
-
-  private DesignerPaletteOperations getOperations() {
-    return m_operations;
-  }
-
-  /**
-   * @return <code>true</code> if given {@link CategoryInfo} should be displayed.
-   */
-  private boolean shouldBeDisplayed(CategoryInfo category) {
-    if (!category.isVisible()) {
-      return false;
-    }
-    if (category.isOptional()) {
-      return !getVisualCategory(category).getEntries().isEmpty();
-    }
-    return true;
-  }
-
-  private void configure_EditDomain_DefaultTool() {
-    if (m_isMainPalette) {
-      final EditDomain editDomain = m_editPartViewer.getEditDomain();
-      editDomain.setDefaultToolProvider(new IDefaultToolProvider() {
-        @Override
-        public void loadDefaultTool() {
-          if (m_defaultEntry != null) {
-            m_paletteComposite.selectEntry(m_defaultEntry, false);
-          } else {
-            editDomain.setActiveTool(new SelectionTool());
-          }
-        }
-      });
-      editDomain.loadDefaultTool();
-    }
-  }
-
-  /**
-   * Refreshes visual palette.
-   */
-  private void refreshVisualPalette() {
-    m_paletteComposite.refreshPalette();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Palette operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  final class DesignerPaletteOperations {
-    /**
-     * @return <code>true</code> if palette can be edited.
-     */
-    public boolean canEditPalette() {
-      boolean[] canEdit = {true};
-      getBroadcastPalette().canEdit(canEdit);
-      return canEdit[0];
-    }
-
-    /**
-     * Edits palette using {@link PaletteManagerDialog}.
-     */
-    public void editPalette() {
-      PaletteManagerDialog dialog = new PaletteManagerDialog(m_rootJavaInfo.getEditor(),
-          m_manager.getPalette(),
-          m_goodEntryInfos);
-      // reload in any case
-      reloadPalette();
-      // add commands used to update palette in dialog
-      if (dialog.open() == Window.OK) {
-        commands_addWrite(dialog.getCommands());
-      }
-    }
-
-    public void defaultPalette() {
-      m_manager.commands_clear();
-      m_manager.commands_write();
-      m_openCategories.clear();
-      reloadPalette();
-    }
-
-    /**
-     * Changes palette preferences.
-     */
-    public void editPreferences() {
-      PalettePreferencesDialog dialog = new PalettePreferencesDialog(getShell(), m_preferences);
-      if (dialog.open() == Window.OK) {
-        dialog.commit();
-        m_paletteComposite.setPreferences(m_preferences);
-      }
-    }
-
-    public void setIconsType(int iconsType) {
-      m_paletteComposite.setLayoutType(iconsType);
-      m_preferences.setLayoutType(iconsType);
-      m_paletteComposite.setPreferences(m_preferences);
-      m_paletteComposite.refreshComposite();
-    }
-
-    public EntryInfo getEntry(Object target) {
-      return m_visualToEntryInfo.get(target);
-    }
-
-    public CategoryInfo getCategory(Object target) {
-      return m_visualToCategoryInfo.get(target);
-    }
-
-    public void addComponent(CategoryInfo category) {
-      ComponentAddDialog dialog = new ComponentAddDialog(getShell(),
-          m_rootJavaInfo.getEditor(),
-          m_manager.getPalette(),
-          category);
-      if (dialog.open() == Window.OK) {
-        commands_addWrite(dialog.getCommand());
-      }
-    }
-
-    public void addFactory(CategoryInfo category, boolean forStatic) {
-      FactoryAddDialog dialog = new FactoryAddDialog(getShell(),
-          m_rootJavaInfo.getEditor(),
-          forStatic,
-          m_manager.getPalette(),
-          category);
-      if (dialog.open() == Window.OK) {
-        commands_addWrite(dialog.getCommand());
-      }
-    }
-
-    public void addFactories(CategoryInfo category, boolean forStatic) {
-      // prepare dialog
-      FactoriesAddDialog dialog = new FactoriesAddDialog(getShell(),
-          m_rootJavaInfo.getEditor(),
-          m_manager.getPalette(),
-          category,
-          forStatic);
-      // open dialog
-      if (dialog.open() == Window.OK) {
-        commands_addWrite(dialog.getCommands());
-      }
-    }
-
-    public void editEntry(ToolEntryInfo targetEntry) {
-      AbstractPaletteElementDialog dialog = null;
-      // prepare editing dialog
-      AstEditor editor = m_rootJavaInfo.getEditor();
-      if (targetEntry instanceof ComponentEntryInfo) {
-        ComponentEntryInfo entryInfo = (ComponentEntryInfo) targetEntry;
-        dialog = new ComponentEditDialog(getShell(), editor, entryInfo);
-      } else if (targetEntry instanceof StaticFactoryEntryInfo) {
-        StaticFactoryEntryInfo entryInfo = (StaticFactoryEntryInfo) targetEntry;
-        dialog = new FactoryEditDialog(getShell(), editor, true, entryInfo);
-      } else if (targetEntry instanceof InstanceFactoryEntryInfo) {
-        InstanceFactoryEntryInfo entryInfo = (InstanceFactoryEntryInfo) targetEntry;
-        dialog = new FactoryEditDialog(getShell(), editor, false, entryInfo);
-      }
-      // execute dialog
-      if (dialog != null && dialog.open() == Window.OK) {
-        // remove visual for component, so re-initialize them
-        m_entryInfoToVisual.remove(targetEntry);
-        m_knownEntryInfos.remove(targetEntry);
-        m_goodEntryInfos.remove(targetEntry);
-        // do updates
-        commands_addWrite(dialog.getCommand());
-      }
-    }
-
-    public void removeEntry(EntryInfo targetEntry) {
-      commands_addWrite(new EntryRemoveCommand(targetEntry));
-    }
-
-    public void addCategory(CategoryInfo nextCategory) {
-      CategoryAddDialog dialog =
-          new CategoryAddDialog(getShell(), m_manager.getPalette(), nextCategory);
-      if (dialog.open() == Window.OK) {
-        commands_addWrite(dialog.getCommand());
-      }
-    }
-
-    public void editCategory(CategoryInfo targetCategory) {
-      CategoryEditDialog dialog = new CategoryEditDialog(getShell(), targetCategory);
-      if (dialog.open() == Window.OK) {
-        commands_addWrite(dialog.getCommand());
-      }
-    }
-
-    public void removeCategory(CategoryInfo targetCategory) {
-      commands_addWrite(new CategoryRemoveCommand(targetCategory));
-    }
-
-    public void importJar(CategoryInfo nextCategory) {
-      ImportArchiveDialog dialog =
-          new ImportArchiveDialog(getShell(), m_manager.getPalette(), nextCategory);
-      if (dialog.open() == Window.OK) {
-        for (Command command : dialog.getCommands()) {
-          commands_addWrite(command);
-        }
-      }
-    }
-
-    public void importPalette(String path) throws Exception {
-      m_manager.importFrom(path);
-      reloadPalette();
-    }
-
-    public void exportPalette(String path) throws Exception {
-      m_manager.exportTo(path);
-    }
-
-    public String getToolkitId() {
-      return m_manager.getToolkitId();
-    }
-
-    public Shell getShell() {
-      return m_paletteComposite.getShell();
-    }
-  }
+	public static final String FLAG_NO_PALETTE = "FLAG_NO_PALETTE"; // Don't load palette during testing
+	public static final int COLUMN_ICONS_TYPE = 0;
+	public static final int LIST_ICONS_TYPE = 1;
+	public static final int ONLY_ICONS_TYPE = 2;
+	public static final int DETAIL_ICONS_TYPE = 3;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance fields
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final String ENTRYINFO_CATEGORY = "org.eclipse.wb.swing.layouts";
+	private final boolean m_isMainPalette;
+	private final PluginPalettePreferences m_preferences;
+	private final PaletteComposite m_paletteComposite;
+	private final DesignerPaletteOperations m_operations;
+	private IEditPartViewer m_editPartViewer;
+	private JavaInfo m_rootJavaInfo;
+	private PaletteManager m_manager;
+	private IEntry m_defaultEntry;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DesignerPalette(Composite parent, int style, boolean isMainPalette) {
+		m_isMainPalette = isMainPalette;
+		m_operations = new DesignerPaletteOperations();
+		m_preferences = new PluginPalettePreferences(DesignerPlugin.getPreferences());
+		m_paletteComposite = new PaletteComposite(parent, SWT.NONE);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public Control getControl() {
+		return m_paletteComposite;
+	}
+
+	/**
+	 * Sets information about editor.
+	 */
+	public void setInput(IEditPartViewer editPartViewer,
+			final JavaInfo rootJavaInfo,
+			String toolkitId) {
+		m_editPartViewer = editPartViewer;
+		m_rootJavaInfo = rootJavaInfo;
+		//
+		if (m_rootJavaInfo != null) {
+			// cancel cache pre-loading jobs possibly scheduled and/or running
+			{
+				IJobManager manager = Job.getJobManager();
+				manager.cancel(ComponentPresentationHelper.PALETTE_PRELOAD_JOBS);
+				try {
+					manager.join(ComponentPresentationHelper.PALETTE_PRELOAD_JOBS, null);
+				} catch (Throwable e) {
+					// don't care
+				}
+			}
+			// configure palette
+			m_manager = new PaletteManager(m_rootJavaInfo, toolkitId);
+			reloadPalette();
+			// configure preferences
+			{
+				m_preferences.setPrefix(toolkitId);
+				m_paletteComposite.setPreferences(m_preferences);
+			}
+			// set site
+			IPaletteSite.Helper.setSite(m_rootJavaInfo, m_paletteSite);
+			// refresh palette on JavaInfo hierarchy refresh
+			rootJavaInfo.addBroadcastListener(new ObjectEventListener() {
+				@Override
+				public void refreshed() throws Exception {
+					if (m_paletteComposite.isDisposed()) {
+						rootJavaInfo.removeBroadcastListener(this);
+						return;
+					}
+					refreshVisualPalette();
+				}
+			});
+		}
+	}
+
+	/**
+	 * @return the {@link PaletteEventListener} for hierarchy.
+	 */
+	private PaletteEventListener getBroadcastPalette() {
+		return m_rootJavaInfo.getBroadcast(PaletteEventListener.class);
+	}
+
+	/**
+	 * Loads new base palette, applies commands and shows.
+	 */
+	private void reloadPalette() {
+		m_manager.reloadPalette();
+		showPalette();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds given {@link Command} to the list and writes commands.
+	 */
+	private void commands_addWrite(Command command) {
+		commands_addWrite(ImmutableList.of(command));
+	}
+
+	/**
+	 * Adds given {@link Command}s to the list and writes commands.
+	 */
+	private void commands_addWrite(List<Command> commands) {
+		for (Command command : commands) {
+			m_manager.commands_add(command);
+		}
+		m_manager.commands_write();
+		refreshVisualPalette();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IPaletteSite
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final IPaletteSite m_paletteSite = new IPaletteSite() {
+		@Override
+		public Shell getShell() {
+			return getOperations().getShell();
+		}
+
+		@Override
+		public PaletteInfo getPalette() {
+			return m_manager.getPalette();
+		}
+
+		@Override
+		public void addCommand(Command command) {
+			commands_addWrite(command);
+		}
+
+		@Override
+		public void editPalette() {
+			getOperations().editPalette();
+		}
+	};
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Palette displaying
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final Map<CategoryInfo, ICategory> m_categoryInfoToVisual = Maps.newHashMap();
+	private final Map<ICategory, CategoryInfo> m_visualToCategoryInfo = Maps.newHashMap();
+	private final Map<String, Boolean> m_openCategories = Maps.newHashMap();
+	private final Set<EntryInfo> m_knownEntryInfos = Sets.newHashSet();
+	private final Set<EntryInfo> m_goodEntryInfos = Sets.newHashSet();
+	private final Map<EntryInfo, IEntry> m_entryInfoToVisual = Maps.newHashMap();
+	private final Map<IEntry, EntryInfo> m_visualToEntryInfo = Maps.newHashMap();
+
+	/**
+	 * Clears all caches for {@link EntryInfo}, {@link IEntry}, etc.
+	 */
+	private void clearEntryCaches() {
+		m_categoryInfoToVisual.clear();
+		m_visualToCategoryInfo.clear();
+		m_knownEntryInfos.clear();
+		m_goodEntryInfos.clear();
+		m_entryInfoToVisual.clear();
+		m_visualToEntryInfo.clear();
+		m_defaultEntry = null;
+	}
+
+	/**
+	 * @return the {@link IEntry} for given {@link EntryInfo}.
+	 */
+	private IEntry getVisualEntry(final EntryInfo entryInfo) {
+		IEntry entry = m_entryInfoToVisual.get(entryInfo);
+		if (entry == null && !m_knownEntryInfos.contains(entryInfo)) {
+			m_knownEntryInfos.add(entryInfo);
+			if (entryInfo.initialize(m_editPartViewer, m_rootJavaInfo)) {
+				entry = new IEntry() {
+					////////////////////////////////////////////////////////////////////////////
+					//
+					// Access
+					//
+					////////////////////////////////////////////////////////////////////////////
+					@Override
+					public boolean isEnabled() {
+						return entryInfo.isEnabled();
+					}
+
+					@Override
+					public Image getIcon() {
+						return entryInfo.getIcon();
+					}
+
+					@Override
+					public String getText() {
+						return entryInfo.getName();
+					}
+
+					@Override
+					public String getToolTipText() {
+						return entryInfo.getDescription();
+					}
+
+					////////////////////////////////////////////////////////////////////////////
+					//
+					// Activation
+					//
+					////////////////////////////////////////////////////////////////////////////
+					@Override
+					public boolean activate(boolean reload) {
+						return entryInfo.activate(reload);
+					}
+				};
+				m_goodEntryInfos.add(entryInfo);
+				m_entryInfoToVisual.put(entryInfo, entry);
+				m_visualToEntryInfo.put(entry, entryInfo);
+				// initialize default entry
+				if (m_defaultEntry == null) {
+					if (entryInfo instanceof IDefaultEntryInfo) {
+						m_defaultEntry = entry;
+					}
+				}
+			}
+		}
+		return entry;
+	}
+
+	/**
+	 * @return the {@link ICategory} for given {@link CategoryInfo}.
+	 */
+	private ICategory getVisualCategory(final CategoryInfo categoryInfo) {
+		ICategory category = m_categoryInfoToVisual.get(categoryInfo);
+		if (category == null) {
+			final String categoryId = categoryInfo.getId();
+			category = new ICategory() {
+				private boolean m_open;
+
+				@Override
+				public List<IEntry> getEntries() {
+					final List<EntryInfo> entryInfoList = Lists.newArrayList(categoryInfo.getEntries());
+					// add new EntryInfo's using broadcast
+					ExecutionUtils.runIgnore(new RunnableEx() {
+						@Override
+						public void run() throws Exception {
+							getBroadcastPalette().entries(categoryInfo, entryInfoList);
+						}
+					});
+					// convert EntryInfo's into IEntry's
+					List<IEntry> entries = Lists.newArrayList();
+					for (EntryInfo entryInfo : entryInfoList) {
+						if (entryInfo.isVisible()) {
+							if (categoryId.equals(ENTRYINFO_CATEGORY)) {
+								if (InstanceScope.INSTANCE.getNode(
+										IEditorPreferenceConstants.P_AVAILABLE_LAYOUTS_NODE).getBoolean(
+												entryInfo.getId().substring(entryInfo.getId().indexOf(' ') + 1),
+												true)) {
+									IEntry entry = getVisualEntry(entryInfo);
+									if (entry != null) {
+										entries.add(entry);
+									}
+								}
+							} else {
+								IEntry entry = getVisualEntry(entryInfo);
+								if (entry != null) {
+									entries.add(entry);
+								}
+							}
+						}
+					}
+					return entries;
+				}
+
+				@Override
+				public String getText() {
+					return categoryInfo.getName();
+				}
+
+				@Override
+				public String getToolTipText() {
+					return categoryInfo.getDescription();
+				}
+
+				@Override
+				public boolean isOpen() {
+					return m_open;
+				}
+
+				@Override
+				public void setOpen(boolean open) {
+					m_open = open;
+					m_openCategories.put(categoryId, open);
+				}
+			};
+			m_categoryInfoToVisual.put(categoryInfo, category);
+			m_visualToCategoryInfo.put(category, categoryInfo);
+			// set "open" state: from map, or default
+			if (m_openCategories.containsKey(categoryId)) {
+				category.setOpen(m_openCategories.get(categoryId));
+			} else {
+				category.setOpen(categoryInfo.isOpen());
+			}
+		}
+		return category;
+	}
+
+	/**
+	 * Shows current {@link PaletteInfo}.
+	 */
+	private void showPalette() {
+		clearEntryCaches();
+		// set IPalette
+		IPalette palette = new IPalette() {
+			@Override
+			public List<ICategory> getCategories() {
+				// check for skipping palette during tests
+				if (System.getProperty(FLAG_NO_PALETTE) != null) {
+					return ImmutableList.of();
+				}
+				// get categories for palette model
+				final List<CategoryInfo> categoryInfoList;
+				{
+					List<CategoryInfo> pristineCategories = m_manager.getPalette().getCategories();
+					categoryInfoList = Lists.newArrayList(pristineCategories);
+				}
+				// add new CategoryInfo's using broadcast
+				ExecutionUtils.runLog(new RunnableEx() {
+					@Override
+					public void run() throws Exception {
+						getBroadcastPalette().categories(categoryInfoList);
+						getBroadcastPalette().categories2(categoryInfoList);
+					}
+				});
+				// convert CategoryInfo's into ICategory's
+				List<ICategory> categories = Lists.newArrayList();
+				for (CategoryInfo categoryInfo : categoryInfoList) {
+					if (shouldBeDisplayed(categoryInfo)) {
+						ICategory category = getVisualCategory(categoryInfo);
+						categories.add(category);
+					}
+				}
+				return categories;
+			}
+
+			@Override
+			public void addPopupActions(IMenuManager menuManager, Object target, int iconsType) {
+				new DesignerPalettePopupActions(getOperations()).addPopupActions(
+						menuManager,
+						target,
+						iconsType);
+			}
+
+			@Override
+			public void selectDefault() {
+				m_editPartViewer.getEditDomain().loadDefaultTool();
+			}
+
+			@Override
+			public void moveCategory(ICategory _category, ICategory _nextCategory) {
+				CategoryInfo category = m_visualToCategoryInfo.get(_category);
+				CategoryInfo nextCategory = m_visualToCategoryInfo.get(_nextCategory);
+				commands_addWrite(new CategoryMoveCommand(category, nextCategory));
+			}
+
+			@Override
+			public void moveEntry(IEntry _entry, ICategory _targetCategory, IEntry _nextEntry) {
+				EntryInfo entry = m_visualToEntryInfo.get(_entry);
+				CategoryInfo category = m_visualToCategoryInfo.get(_targetCategory);
+				EntryInfo nextEntry = m_visualToEntryInfo.get(_nextEntry);
+				commands_addWrite(new EntryMoveCommand(entry, category, nextEntry));
+			}
+		};
+		m_paletteComposite.setPalette(palette);
+		configure_EditDomain_DefaultTool();
+	}
+
+	private DesignerPaletteOperations getOperations() {
+		return m_operations;
+	}
+
+	/**
+	 * @return <code>true</code> if given {@link CategoryInfo} should be displayed.
+	 */
+	private boolean shouldBeDisplayed(CategoryInfo category) {
+		if (!category.isVisible()) {
+			return false;
+		}
+		if (category.isOptional()) {
+			return !getVisualCategory(category).getEntries().isEmpty();
+		}
+		return true;
+	}
+
+	private void configure_EditDomain_DefaultTool() {
+		if (m_isMainPalette) {
+			final EditDomain editDomain = m_editPartViewer.getEditDomain();
+			editDomain.setDefaultToolProvider(new IDefaultToolProvider() {
+				@Override
+				public void loadDefaultTool() {
+					if (m_defaultEntry != null) {
+						m_paletteComposite.selectEntry(m_defaultEntry, false);
+					} else {
+						editDomain.setActiveTool(new SelectionTool());
+					}
+				}
+			});
+			editDomain.loadDefaultTool();
+		}
+	}
+
+	/**
+	 * Refreshes visual palette.
+	 */
+	private void refreshVisualPalette() {
+		m_paletteComposite.refreshPalette();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Palette operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	final class DesignerPaletteOperations {
+		/**
+		 * @return <code>true</code> if palette can be edited.
+		 */
+		public boolean canEditPalette() {
+			boolean[] canEdit = {true};
+			getBroadcastPalette().canEdit(canEdit);
+			return canEdit[0];
+		}
+
+		/**
+		 * Edits palette using {@link PaletteManagerDialog}.
+		 */
+		public void editPalette() {
+			PaletteManagerDialog dialog = new PaletteManagerDialog(m_rootJavaInfo.getEditor(),
+					m_manager.getPalette(),
+					m_goodEntryInfos);
+			// reload in any case
+			reloadPalette();
+			// add commands used to update palette in dialog
+			if (dialog.open() == Window.OK) {
+				commands_addWrite(dialog.getCommands());
+			}
+		}
+
+		public void defaultPalette() {
+			m_manager.commands_clear();
+			m_manager.commands_write();
+			m_openCategories.clear();
+			reloadPalette();
+		}
+
+		/**
+		 * Changes palette preferences.
+		 */
+		public void editPreferences() {
+			PalettePreferencesDialog dialog = new PalettePreferencesDialog(getShell(), m_preferences);
+			if (dialog.open() == Window.OK) {
+				dialog.commit();
+				m_paletteComposite.setPreferences(m_preferences);
+			}
+		}
+
+		public void setIconsType(int iconsType) {
+			m_paletteComposite.setLayoutType(iconsType);
+			m_preferences.setLayoutType(iconsType);
+			m_paletteComposite.setPreferences(m_preferences);
+			m_paletteComposite.refreshComposite();
+		}
+
+		public EntryInfo getEntry(Object target) {
+			return m_visualToEntryInfo.get(target);
+		}
+
+		public CategoryInfo getCategory(Object target) {
+			return m_visualToCategoryInfo.get(target);
+		}
+
+		public void addComponent(CategoryInfo category) {
+			ComponentAddDialog dialog = new ComponentAddDialog(getShell(),
+					m_rootJavaInfo.getEditor(),
+					m_manager.getPalette(),
+					category);
+			if (dialog.open() == Window.OK) {
+				commands_addWrite(dialog.getCommand());
+			}
+		}
+
+		public void addFactory(CategoryInfo category, boolean forStatic) {
+			FactoryAddDialog dialog = new FactoryAddDialog(getShell(),
+					m_rootJavaInfo.getEditor(),
+					forStatic,
+					m_manager.getPalette(),
+					category);
+			if (dialog.open() == Window.OK) {
+				commands_addWrite(dialog.getCommand());
+			}
+		}
+
+		public void addFactories(CategoryInfo category, boolean forStatic) {
+			// prepare dialog
+			FactoriesAddDialog dialog = new FactoriesAddDialog(getShell(),
+					m_rootJavaInfo.getEditor(),
+					m_manager.getPalette(),
+					category,
+					forStatic);
+			// open dialog
+			if (dialog.open() == Window.OK) {
+				commands_addWrite(dialog.getCommands());
+			}
+		}
+
+		public void editEntry(ToolEntryInfo targetEntry) {
+			AbstractPaletteElementDialog dialog = null;
+			// prepare editing dialog
+			AstEditor editor = m_rootJavaInfo.getEditor();
+			if (targetEntry instanceof ComponentEntryInfo) {
+				ComponentEntryInfo entryInfo = (ComponentEntryInfo) targetEntry;
+				dialog = new ComponentEditDialog(getShell(), editor, entryInfo);
+			} else if (targetEntry instanceof StaticFactoryEntryInfo) {
+				StaticFactoryEntryInfo entryInfo = (StaticFactoryEntryInfo) targetEntry;
+				dialog = new FactoryEditDialog(getShell(), editor, true, entryInfo);
+			} else if (targetEntry instanceof InstanceFactoryEntryInfo) {
+				InstanceFactoryEntryInfo entryInfo = (InstanceFactoryEntryInfo) targetEntry;
+				dialog = new FactoryEditDialog(getShell(), editor, false, entryInfo);
+			}
+			// execute dialog
+			if (dialog != null && dialog.open() == Window.OK) {
+				// remove visual for component, so re-initialize them
+				m_entryInfoToVisual.remove(targetEntry);
+				m_knownEntryInfos.remove(targetEntry);
+				m_goodEntryInfos.remove(targetEntry);
+				// do updates
+				commands_addWrite(dialog.getCommand());
+			}
+		}
+
+		public void removeEntry(EntryInfo targetEntry) {
+			commands_addWrite(new EntryRemoveCommand(targetEntry));
+		}
+
+		public void addCategory(CategoryInfo nextCategory) {
+			CategoryAddDialog dialog =
+					new CategoryAddDialog(getShell(), m_manager.getPalette(), nextCategory);
+			if (dialog.open() == Window.OK) {
+				commands_addWrite(dialog.getCommand());
+			}
+		}
+
+		public void editCategory(CategoryInfo targetCategory) {
+			CategoryEditDialog dialog = new CategoryEditDialog(getShell(), targetCategory);
+			if (dialog.open() == Window.OK) {
+				commands_addWrite(dialog.getCommand());
+			}
+		}
+
+		public void removeCategory(CategoryInfo targetCategory) {
+			commands_addWrite(new CategoryRemoveCommand(targetCategory));
+		}
+
+		public void importJar(CategoryInfo nextCategory) {
+			ImportArchiveDialog dialog =
+					new ImportArchiveDialog(getShell(), m_manager.getPalette(), nextCategory);
+			if (dialog.open() == Window.OK) {
+				for (Command command : dialog.getCommands()) {
+					commands_addWrite(command);
+				}
+			}
+		}
+
+		public void importPalette(String path) throws Exception {
+			m_manager.importFrom(path);
+			reloadPalette();
+		}
+
+		public void exportPalette(String path) throws Exception {
+			m_manager.exportTo(path);
+		}
+
+		public String getToolkitId() {
+			return m_manager.getToolkitId();
+		}
+
+		public Shell getShell() {
+			return m_paletteComposite.getShell();
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/DesignerPalettePopupActions.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/DesignerPalettePopupActions.java
index 4ccad6484..be5035a5d 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/DesignerPalettePopupActions.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/DesignerPalettePopupActions.java
@@ -47,65 +47,65 @@
  * @coverage core.editor.palette.ui
  */
 final class DesignerPalettePopupActions {
-  // image constants
-  private static final ImageDescriptor ID_ADD_CATEGORY = getImageDescription("add_category.gif");
-  private static final ImageDescriptor ID_ADD_COMPONENT = getImageDescription("add_component.gif");
-  private static final ImageDescriptor IMPORT_JAR_IMAGE = getImageDescription("import_jar.png");
-  private static final ImageDescriptor ID_REMOVE = getImageDescription("remove.gif");
-  private static final ImageDescriptor ID_MANAGER = getImageDescription("manager.gif");
-  private static final ImageDescriptor ID_SETTINGS = getImageDescription("settings.png");
-  private static final ImageDescriptor ID_IMPORT = getImageDescription("import.png");
-  private static final ImageDescriptor ID_EXPORT = getImageDescription("export.png");
-  private static final ImageDescriptor ID_SELECTED = getImageDescription("selected.gif");
-  // field
-  private final DesignerPaletteOperations m_operations;
-  private final PluginPalettePreferences m_preferences =
-      new PluginPalettePreferences(DesignerPlugin.getPreferences());
+	// image constants
+	private static final ImageDescriptor ID_ADD_CATEGORY = getImageDescription("add_category.gif");
+	private static final ImageDescriptor ID_ADD_COMPONENT = getImageDescription("add_component.gif");
+	private static final ImageDescriptor IMPORT_JAR_IMAGE = getImageDescription("import_jar.png");
+	private static final ImageDescriptor ID_REMOVE = getImageDescription("remove.gif");
+	private static final ImageDescriptor ID_MANAGER = getImageDescription("manager.gif");
+	private static final ImageDescriptor ID_SETTINGS = getImageDescription("settings.png");
+	private static final ImageDescriptor ID_IMPORT = getImageDescription("import.png");
+	private static final ImageDescriptor ID_EXPORT = getImageDescription("export.png");
+	private static final ImageDescriptor ID_SELECTED = getImageDescription("selected.gif");
+	// field
+	private final DesignerPaletteOperations m_operations;
+	private final PluginPalettePreferences m_preferences =
+			new PluginPalettePreferences(DesignerPlugin.getPreferences());
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DesignerPalettePopupActions(DesignerPaletteOperations operations) {
-    m_operations = operations;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DesignerPalettePopupActions(DesignerPaletteOperations operations) {
+		m_operations = operations;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Popup
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link ImageDescriptor} for palette image.
-   */
-  private static ImageDescriptor getImageDescription(String path) {
-    return DesignerPlugin.getImageDescriptor("palette/" + path);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Popup
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link ImageDescriptor} for palette image.
+	 */
+	private static ImageDescriptor getImageDescription(String path) {
+		return DesignerPlugin.getImageDescriptor("palette/" + path);
+	}
 
-  /**
-   * @see IPalette#addPopupActions(IMenuManager, Object)
-   */
-  void addPopupActions(IMenuManager menuManager, Object target, int iconsType) {
-    if (m_operations.canEditPalette()) {
-      addPopupActions_edit(menuManager, target, iconsType);
-    }
-    //
-    menuManager.add(new Separator());
-    // settings
-    {
-      Action settingsAction =
-          new Action(Messages.DesignerPalettePopupActions_settingsAction, ID_SETTINGS) {
-            @Override
-            public void run() {
-              m_operations.editPreferences();
-            }
-          };
-      menuManager.add(settingsAction);
-    }
-  }
+	/**
+	 * @see IPalette#addPopupActions(IMenuManager, Object)
+	 */
+	void addPopupActions(IMenuManager menuManager, Object target, int iconsType) {
+		if (m_operations.canEditPalette()) {
+			addPopupActions_edit(menuManager, target, iconsType);
+		}
+		//
+		menuManager.add(new Separator());
+		// settings
+		{
+			Action settingsAction =
+					new Action(Messages.DesignerPalettePopupActions_settingsAction, ID_SETTINGS) {
+				@Override
+				public void run() {
+					m_operations.editPreferences();
+				}
+			};
+			menuManager.add(settingsAction);
+		}
+	}
 
-  private void addPopupActions_edit(IMenuManager menuManager, Object target, int type) {
+	private void addPopupActions_edit(IMenuManager menuManager, Object target, int type) {
 
 		Preferences preferences = InstanceScope.INSTANCE
 				.getNode(IEditorPreferenceConstants.WB_BASIC_UI_PREFERENCE_NODE);
@@ -115,335 +115,335 @@ private void addPopupActions_edit(IMenuManager menuManager, Object target, int t
 			addPopupActions_edit_unUsed(menuManager, target);
 			menuManager.add(new Separator());
 		}
-    // add layout action
-    {
-      IMenuManager layoutMenuManager = new MenuManager("Layout");
-      menuManager.add(layoutMenuManager);
-      // single
-      {
-        ImageDescriptor image = null;
-        if (type == DesignerPalette.COLUMN_ICONS_TYPE) {
-          image = ID_SELECTED;
-        }
-        Action columnAction = new Action("Columns", image) {
-          @Override
-          public void run() {
-            m_operations.setIconsType(DesignerPalette.COLUMN_ICONS_TYPE);
-          }
-        };
-        layoutMenuManager.add(columnAction);
-        image = null;
-        if (type == DesignerPalette.LIST_ICONS_TYPE) {
-          image = ID_SELECTED;
-        }
-        Action listAction = new Action("List", image) {
-          @Override
-          public void run() {
-            m_operations.setIconsType(DesignerPalette.LIST_ICONS_TYPE);
-          }
-        };
-        layoutMenuManager.add(listAction);
-        image = null;
-        if (type == DesignerPalette.ONLY_ICONS_TYPE) {
-          image = ID_SELECTED;
-        }
-        Action onlyIconAction = new Action("Icons Only", image) {
-          @Override
-          public void run() {
-            m_operations.setIconsType(DesignerPalette.ONLY_ICONS_TYPE);
-          }
-        };
-        layoutMenuManager.add(onlyIconAction);
-        image = null;
-        if (type == DesignerPalette.DETAIL_ICONS_TYPE) {
-          image = ID_SELECTED;
-        }
-        Action detailAction = new Action("Detail", image) {
-          @Override
-          public void run() {
-            m_operations.setIconsType(DesignerPalette.DETAIL_ICONS_TYPE);
-          }
-        };
-        layoutMenuManager.add(detailAction);
-      }
-    }
-    // separator
-    menuManager.add(new Separator());
-  }
+		// add layout action
+		{
+			IMenuManager layoutMenuManager = new MenuManager("Layout");
+			menuManager.add(layoutMenuManager);
+			// single
+			{
+				ImageDescriptor image = null;
+				if (type == DesignerPalette.COLUMN_ICONS_TYPE) {
+					image = ID_SELECTED;
+				}
+				Action columnAction = new Action("Columns", image) {
+					@Override
+					public void run() {
+						m_operations.setIconsType(DesignerPalette.COLUMN_ICONS_TYPE);
+					}
+				};
+				layoutMenuManager.add(columnAction);
+				image = null;
+				if (type == DesignerPalette.LIST_ICONS_TYPE) {
+					image = ID_SELECTED;
+				}
+				Action listAction = new Action("List", image) {
+					@Override
+					public void run() {
+						m_operations.setIconsType(DesignerPalette.LIST_ICONS_TYPE);
+					}
+				};
+				layoutMenuManager.add(listAction);
+				image = null;
+				if (type == DesignerPalette.ONLY_ICONS_TYPE) {
+					image = ID_SELECTED;
+				}
+				Action onlyIconAction = new Action("Icons Only", image) {
+					@Override
+					public void run() {
+						m_operations.setIconsType(DesignerPalette.ONLY_ICONS_TYPE);
+					}
+				};
+				layoutMenuManager.add(onlyIconAction);
+				image = null;
+				if (type == DesignerPalette.DETAIL_ICONS_TYPE) {
+					image = ID_SELECTED;
+				}
+				Action detailAction = new Action("Detail", image) {
+					@Override
+					public void run() {
+						m_operations.setIconsType(DesignerPalette.DETAIL_ICONS_TYPE);
+					}
+				};
+				layoutMenuManager.add(detailAction);
+			}
+		}
+		// separator
+		menuManager.add(new Separator());
+	}
 
-  /**
-   * now we unused it for 2003
-   *
-   * @param menuManager
-   * @param target
-   */
-  private void addPopupActions_edit_unUsed(IMenuManager menuManager, Object target) {
-    final EntryInfo targetEntry = getEntry(target);
-    final CategoryInfo targetCategory = getCategory(target);
-    // add category
-    {
-      Action addCategoryAction =
-          new Action(Messages.DesignerPalettePopupActions_addCategoryAction, ID_ADD_CATEGORY) {
-            @Override
-            public void run() {
-              // prepare initial "next category"
-              CategoryInfo nextCategory = null;
-              if (targetCategory != null) {
-                nextCategory = targetCategory;
-              } else if (targetEntry != null) {
-                nextCategory = targetEntry.getCategory();
-              }
-              m_operations.addCategory(nextCategory);
-            }
-          };
-      menuManager.add(addCategoryAction);
-    }
-    // add component
-    {
-      Action addComponentAction =
-          new Action(Messages.DesignerPalettePopupActions_addComponentAction, ID_ADD_COMPONENT) {
-            @Override
-            public void run() {
-              // prepare category for new component
-              CategoryInfo category = targetCategory;
-              if (targetEntry != null) {
-                category = targetEntry.getCategory();
-              }
-              m_operations.addComponent(category);
-            }
-          };
-      menuManager.add(addComponentAction);
-    }
-    // factories
-    {
-      // prepare parameters
-      final CategoryInfo category =
-          targetEntry != null ? targetEntry.getCategory() : targetCategory;
-      // add static factories
-      {
-        IMenuManager staticMenuManager =
-            new MenuManager(Messages.DesignerPalettePopupActions_addStaticFactoryAction);
-        menuManager.add(staticMenuManager);
-        // single
-        {
-          IAction action = popup_createAction_addFactory(category, true);
-          staticMenuManager.add(action);
-        }
-        // multiple
-        {
-          IAction action = popup_createAction_addFactories(category, true);
-          staticMenuManager.add(action);
-        }
-      }
-      // add instance factories
-      {
-        IMenuManager instanceMenuManager =
-            new MenuManager(Messages.DesignerPalettePopupActions_addInstanceFactoryAction);
-        menuManager.add(instanceMenuManager);
-        // single
-        {
-          IAction action = popup_createAction_addFactory(category, false);
-          instanceMenuManager.add(action);
-        }
-        // multiple
-        {
-          IAction action = popup_createAction_addFactories(category, false);
-          instanceMenuManager.add(action);
-        }
-      }
-    }
-    // separator
-    menuManager.add(new Separator());
-    // Jar
-    menuManager.add(new Action(Messages.DesignerPalettePopupActions_importJarAction,
-        IMPORT_JAR_IMAGE) {
-      @Override
-      public void run() {
-        // prepare initial "next category"
-        CategoryInfo nextCategory = null;
-        if (targetCategory != null) {
-          nextCategory = targetCategory;
-        } else if (targetEntry != null) {
-          nextCategory = targetEntry.getCategory();
-        }
-        m_operations.importJar(nextCategory);
-      }
-    });
-    // separator
-    menuManager.add(new Separator());
-    // edit
-    {
-      Action editAction = new Action(Messages.DesignerPalettePopupActions_editAction) {
-        @Override
-        public void run() {
-          if (targetCategory != null) {
-            m_operations.editCategory(targetCategory);
-          } else if (targetEntry instanceof ToolEntryInfo) {
-            m_operations.editEntry((ToolEntryInfo) targetEntry);
-          }
-        }
-      };
-      menuManager.add(editAction);
-      editAction.setEnabled(targetCategory != null
-          || targetEntry instanceof ComponentEntryInfo
-          || targetEntry instanceof FactoryEntryInfo);
-    }
-    // remove
-    {
-      Action removeAction =
-          new Action(Messages.DesignerPalettePopupActions_removeAction, ID_REMOVE) {
-            @Override
-            public void run() {
-              if (targetEntry != null) {
-                if (MessageDialog.openConfirm(
-                    getShell(),
-                    Messages.DesignerPalettePopupActions_removeEntryTitle,
-                    MessageFormat.format(
-                        Messages.DesignerPalettePopupActions_removeEntryMessage,
-                        targetEntry.getName()))) {
-                  m_operations.removeEntry(targetEntry);
-                }
-              } else if (targetCategory != null) {
-                if (MessageDialog.openConfirm(
-                    getShell(),
-                    Messages.DesignerPalettePopupActions_removeCategoryTitle,
-                    MessageFormat.format(
-                        Messages.DesignerPalettePopupActions_removeCategoryMessage,
-                        targetCategory.getName()))) {
-                  m_operations.removeCategory(targetCategory);
-                }
-              }
-            }
-          };
-      menuManager.add(removeAction);
-      removeAction.setEnabled(targetEntry != null || targetCategory != null);
-    }
-    // separator
-    menuManager.add(new Separator());
-    // default
-    {
-      Action defaultAction =
-          new Action(Messages.DesignerPalettePopupActions_restoreDefaultsAction) {
-            @Override
-            public void run() {
-              if (MessageDialog.openConfirm(
-                  getShell(),
-                  Messages.DesignerPalettePopupActions_restoreDefaultsTitle,
-                  Messages.DesignerPalettePopupActions_restoreDefaultsMessage)) {
-                m_operations.defaultPalette();
-              }
-            }
-          };
-      menuManager.add(defaultAction);
-    }
-    // palette manager
-    {
-      Action managerAction =
-          new Action(Messages.DesignerPalettePopupActions_managerAction, ID_MANAGER) {
-            @Override
-            public void run() {
-              m_operations.editPalette();
-            }
-          };
-      menuManager.add(managerAction);
-    }
-    // import/export
-    addImportExport(menuManager);
-  }
+	/**
+	 * now we unused it for 2003
+	 *
+	 * @param menuManager
+	 * @param target
+	 */
+	private void addPopupActions_edit_unUsed(IMenuManager menuManager, Object target) {
+		final EntryInfo targetEntry = getEntry(target);
+		final CategoryInfo targetCategory = getCategory(target);
+		// add category
+		{
+			Action addCategoryAction =
+					new Action(Messages.DesignerPalettePopupActions_addCategoryAction, ID_ADD_CATEGORY) {
+				@Override
+				public void run() {
+					// prepare initial "next category"
+					CategoryInfo nextCategory = null;
+					if (targetCategory != null) {
+						nextCategory = targetCategory;
+					} else if (targetEntry != null) {
+						nextCategory = targetEntry.getCategory();
+					}
+					m_operations.addCategory(nextCategory);
+				}
+			};
+			menuManager.add(addCategoryAction);
+		}
+		// add component
+		{
+			Action addComponentAction =
+					new Action(Messages.DesignerPalettePopupActions_addComponentAction, ID_ADD_COMPONENT) {
+				@Override
+				public void run() {
+					// prepare category for new component
+					CategoryInfo category = targetCategory;
+					if (targetEntry != null) {
+						category = targetEntry.getCategory();
+					}
+					m_operations.addComponent(category);
+				}
+			};
+			menuManager.add(addComponentAction);
+		}
+		// factories
+		{
+			// prepare parameters
+			final CategoryInfo category =
+					targetEntry != null ? targetEntry.getCategory() : targetCategory;
+			// add static factories
+			{
+				IMenuManager staticMenuManager =
+						new MenuManager(Messages.DesignerPalettePopupActions_addStaticFactoryAction);
+				menuManager.add(staticMenuManager);
+				// single
+				{
+					IAction action = popup_createAction_addFactory(category, true);
+					staticMenuManager.add(action);
+				}
+				// multiple
+				{
+					IAction action = popup_createAction_addFactories(category, true);
+					staticMenuManager.add(action);
+				}
+			}
+			// add instance factories
+			{
+				IMenuManager instanceMenuManager =
+						new MenuManager(Messages.DesignerPalettePopupActions_addInstanceFactoryAction);
+				menuManager.add(instanceMenuManager);
+				// single
+				{
+					IAction action = popup_createAction_addFactory(category, false);
+					instanceMenuManager.add(action);
+				}
+				// multiple
+				{
+					IAction action = popup_createAction_addFactories(category, false);
+					instanceMenuManager.add(action);
+				}
+			}
+		}
+		// separator
+		menuManager.add(new Separator());
+		// Jar
+		menuManager.add(new Action(Messages.DesignerPalettePopupActions_importJarAction,
+				IMPORT_JAR_IMAGE) {
+			@Override
+			public void run() {
+				// prepare initial "next category"
+				CategoryInfo nextCategory = null;
+				if (targetCategory != null) {
+					nextCategory = targetCategory;
+				} else if (targetEntry != null) {
+					nextCategory = targetEntry.getCategory();
+				}
+				m_operations.importJar(nextCategory);
+			}
+		});
+		// separator
+		menuManager.add(new Separator());
+		// edit
+		{
+			Action editAction = new Action(Messages.DesignerPalettePopupActions_editAction) {
+				@Override
+				public void run() {
+					if (targetCategory != null) {
+						m_operations.editCategory(targetCategory);
+					} else if (targetEntry instanceof ToolEntryInfo) {
+						m_operations.editEntry((ToolEntryInfo) targetEntry);
+					}
+				}
+			};
+			menuManager.add(editAction);
+			editAction.setEnabled(targetCategory != null
+					|| targetEntry instanceof ComponentEntryInfo
+					|| targetEntry instanceof FactoryEntryInfo);
+		}
+		// remove
+		{
+			Action removeAction =
+					new Action(Messages.DesignerPalettePopupActions_removeAction, ID_REMOVE) {
+				@Override
+				public void run() {
+					if (targetEntry != null) {
+						if (MessageDialog.openConfirm(
+								getShell(),
+								Messages.DesignerPalettePopupActions_removeEntryTitle,
+								MessageFormat.format(
+										Messages.DesignerPalettePopupActions_removeEntryMessage,
+										targetEntry.getName()))) {
+							m_operations.removeEntry(targetEntry);
+						}
+					} else if (targetCategory != null) {
+						if (MessageDialog.openConfirm(
+								getShell(),
+								Messages.DesignerPalettePopupActions_removeCategoryTitle,
+								MessageFormat.format(
+										Messages.DesignerPalettePopupActions_removeCategoryMessage,
+										targetCategory.getName()))) {
+							m_operations.removeCategory(targetCategory);
+						}
+					}
+				}
+			};
+			menuManager.add(removeAction);
+			removeAction.setEnabled(targetEntry != null || targetCategory != null);
+		}
+		// separator
+		menuManager.add(new Separator());
+		// default
+		{
+			Action defaultAction =
+					new Action(Messages.DesignerPalettePopupActions_restoreDefaultsAction) {
+				@Override
+				public void run() {
+					if (MessageDialog.openConfirm(
+							getShell(),
+							Messages.DesignerPalettePopupActions_restoreDefaultsTitle,
+							Messages.DesignerPalettePopupActions_restoreDefaultsMessage)) {
+						m_operations.defaultPalette();
+					}
+				}
+			};
+			menuManager.add(defaultAction);
+		}
+		// palette manager
+		{
+			Action managerAction =
+					new Action(Messages.DesignerPalettePopupActions_managerAction, ID_MANAGER) {
+				@Override
+				public void run() {
+					m_operations.editPalette();
+				}
+			};
+			menuManager.add(managerAction);
+		}
+		// import/export
+		addImportExport(menuManager);
+	}
 
-  /**
-   * @return the {@link IAction} for adding single factory method.
-   */
-  private IAction popup_createAction_addFactory(final CategoryInfo category, final boolean forStatic) {
-    return new Action(Messages.DesignerPalettePopupActions_factorySingleAction) {
-      @Override
-      public void run() {
-        m_operations.addFactory(category, forStatic);
-      }
-    };
-  }
+	/**
+	 * @return the {@link IAction} for adding single factory method.
+	 */
+	private IAction popup_createAction_addFactory(final CategoryInfo category, final boolean forStatic) {
+		return new Action(Messages.DesignerPalettePopupActions_factorySingleAction) {
+			@Override
+			public void run() {
+				m_operations.addFactory(category, forStatic);
+			}
+		};
+	}
 
-  /**
-   * @return the {@link IAction} for adding multiple factory methods.
-   */
-  private IAction popup_createAction_addFactories(final CategoryInfo category,
-      final boolean forStatic) {
-    return new Action(Messages.DesignerPalettePopupActions_factoryMultipleAction) {
-      @Override
-      public void run() {
-        m_operations.addFactories(category, forStatic);
-      }
-    };
-  }
+	/**
+	 * @return the {@link IAction} for adding multiple factory methods.
+	 */
+	private IAction popup_createAction_addFactories(final CategoryInfo category,
+			final boolean forStatic) {
+		return new Action(Messages.DesignerPalettePopupActions_factoryMultipleAction) {
+			@Override
+			public void run() {
+				m_operations.addFactories(category, forStatic);
+			}
+		};
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Import/export
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void addImportExport(IMenuManager menuManager) {
-    Action importAction = new Action(Messages.DesignerPalettePopupActions_importAction, ID_IMPORT) {
-      @Override
-      public void run() {
-        importPalette();
-      }
-    };
-    Action exportAction = new Action(Messages.DesignerPalettePopupActions_exportAction, ID_EXPORT) {
-      @Override
-      public void run() {
-        exportPalette();
-      }
-    };
-    menuManager.add(importAction);
-    menuManager.add(exportAction);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Import/export
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void addImportExport(IMenuManager menuManager) {
+		Action importAction = new Action(Messages.DesignerPalettePopupActions_importAction, ID_IMPORT) {
+			@Override
+			public void run() {
+				importPalette();
+			}
+		};
+		Action exportAction = new Action(Messages.DesignerPalettePopupActions_exportAction, ID_EXPORT) {
+			@Override
+			public void run() {
+				exportPalette();
+			}
+		};
+		menuManager.add(importAction);
+		menuManager.add(exportAction);
+	}
 
-  private void exportPalette() {
-    final String path = getImportExportPath(SWT.SAVE);
-    if (path != null) {
-      ExecutionUtils.runLog(new RunnableEx() {
-        @Override
-        public void run() throws Exception {
-          m_operations.exportPalette(path);
-        }
-      });
-    }
-  }
+	private void exportPalette() {
+		final String path = getImportExportPath(SWT.SAVE);
+		if (path != null) {
+			ExecutionUtils.runLog(new RunnableEx() {
+				@Override
+				public void run() throws Exception {
+					m_operations.exportPalette(path);
+				}
+			});
+		}
+	}
 
-  private void importPalette() {
-    final String path = getImportExportPath(SWT.OPEN);
-    if (path != null) {
-      ExecutionUtils.runLog(new RunnableEx() {
-        @Override
-        public void run() throws Exception {
-          m_operations.importPalette(path);
-        }
-      });
-    }
-  }
+	private void importPalette() {
+		final String path = getImportExportPath(SWT.OPEN);
+		if (path != null) {
+			ExecutionUtils.runLog(new RunnableEx() {
+				@Override
+				public void run() throws Exception {
+					m_operations.importPalette(path);
+				}
+			});
+		}
+	}
 
-  private String getImportExportPath(int style) {
-    FileDialog fileDialog = new FileDialog(getShell(), style);
-    fileDialog.setFilterExtensions(new String[]{"*.xml"});
-    fileDialog.setFilterNames(new String[]{Messages.DesignerPalettePopupActions_paletteFilterName});
-    fileDialog.setFileName(m_operations.getToolkitId() + ".xml");
-    return fileDialog.open();
-  }
+	private String getImportExportPath(int style) {
+		FileDialog fileDialog = new FileDialog(getShell(), style);
+		fileDialog.setFilterExtensions(new String[]{"*.xml"});
+		fileDialog.setFilterNames(new String[]{Messages.DesignerPalettePopupActions_paletteFilterName});
+		fileDialog.setFileName(m_operations.getToolkitId() + ".xml");
+		return fileDialog.open();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Misc
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Shell getShell() {
-    return m_operations.getShell();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Misc
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Shell getShell() {
+		return m_operations.getShell();
+	}
 
-  private CategoryInfo getCategory(Object target) {
-    return m_operations.getCategory(target);
-  }
+	private CategoryInfo getCategory(Object target) {
+		return m_operations.getCategory(target);
+	}
 
-  private EntryInfo getEntry(Object target) {
-    return m_operations.getEntry(target);
-  }
+	private EntryInfo getEntry(Object target) {
+		return m_operations.getEntry(target);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/PaletteManager.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/PaletteManager.java
index 47711fc15..5ceaecf47 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/PaletteManager.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/PaletteManager.java
@@ -86,455 +86,455 @@
  * @coverage core.editor.palette
  */
 public final class PaletteManager {
-  private final JavaInfo m_rootJavaInfo;
-  private final ClassLoader m_classLoader;
-  private final IJavaProject m_javaProject;
-  private final IProject m_project;
-  private final String m_toolkitId;
-  private PaletteInfo m_paletteInfo;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public PaletteManager(JavaInfo rootJavaInfo, String toolkitId) {
-    m_rootJavaInfo = rootJavaInfo;
-    m_classLoader = JavaInfoUtils.getClassLoader(m_rootJavaInfo);
-    m_javaProject = rootJavaInfo.getEditor().getJavaProject();
-    m_project = m_javaProject.getProject();
-    m_toolkitId = toolkitId;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public String getToolkitId() {
-    return m_toolkitId;
-  }
-
-  /**
-   * @return the current palette.
-   */
-  public PaletteInfo getPalette() {
-    return m_paletteInfo;
-  }
-
-  /**
-   * @return the copy of current palette.
-   */
-  public PaletteInfo getPaletteCopy() {
-    PaletteManager manager = new PaletteManager(m_rootJavaInfo, m_toolkitId);
-    manager.reloadPalette();
-    return manager.getPalette();
-  }
-
-  /**
-   * Loads new base palette, applies commands.
-   */
-  public void reloadPalette() {
-    m_paletteInfo = new PaletteInfo();
-    if (m_toolkitId != null) {
-      ExecutionUtils.runLog(new RunnableEx() {
-        @Override
-        public void run() throws Exception {
-          parseExtensionPalette();
-          parseCustomPalette();
-          processReorderRequests();
-          // apply commands
-          commands_apply();
-        }
-      });
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Import/export
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void exportTo(String path) throws Exception {
-    File commandsFile = commands_getFile();
-    FileUtils.copyFile(commandsFile, new File(path));
-  }
-
-  public void importFrom(String path) throws Exception {
-    File commandsFile = commands_getFile();
-    FileUtils.copyFile(new File(path), commandsFile);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final List<Class<? extends Command>> m_commandClasses = Lists.newArrayList();
-  static {
-    m_commandClasses.add(ElementVisibilityCommand.class);
-    m_commandClasses.add(CategoryAddCommand.class);
-    m_commandClasses.add(CategoryEditCommand.class);
-    m_commandClasses.add(CategoryMoveCommand.class);
-    m_commandClasses.add(CategoryRemoveCommand.class);
-    m_commandClasses.add(EntryMoveCommand.class);
-    m_commandClasses.add(EntryRemoveCommand.class);
-    m_commandClasses.add(ComponentAddCommand.class);
-    m_commandClasses.add(ComponentEditCommand.class);
-    m_commandClasses.add(FactoryAddCommand.class);
-    m_commandClasses.add(FactoryEditCommand.class);
-  }
-  private static final Map<String, Class<? extends Command>> m_idToCommandClass = Maps.newTreeMap();
-  private List<Command> m_commands;
-
-  /**
-   * Applies commands for modifying palette.
-   */
-  private void commands_apply() throws Exception {
-    // prepare mapping: id -> command class
-    if (m_idToCommandClass.isEmpty()) {
-      for (Class<? extends Command> commandClass : m_commandClasses) {
-        String id = (String) commandClass.getField("ID").get(null);
-        m_idToCommandClass.put(id, commandClass);
-      }
-    }
-    // read commands
-    commandsRead();
-  }
-
-  private void commandsRead() throws Exception {
-    m_commands = Lists.newArrayList();
-    // read-only "wbp-meta" from classpath, for example from jar's
-    {
-      String commandsPath = "wbp-meta/" + m_toolkitId + ".wbp-palette-commands.xml";
-      Enumeration<URL> resources = m_classLoader.getResources(commandsPath);
-      while (resources.hasMoreElements()) {
-        InputStream inputStream = resources.nextElement().openStream();
-        commandsRead_fromStream(inputStream);
-      }
-    }
-    // from read-write file
-    File commandsFile = commands_getFile();
-    if (commandsFile.exists()) {
-      FileInputStream inputStream = new FileInputStream(commandsFile);
-      commandsRead_fromStream(inputStream);
-    }
-  }
-
-  private void commandsRead_fromStream(final InputStream inputStream) throws Exception {
-    try {
-      ExecutionUtils.runIgnore(new RunnableEx() {
-        @Override
-        public void run() throws Exception {
-          commandsRead_fromStream0(inputStream);
-        }
-      });
-    } finally {
-      IOUtils.closeQuietly(inputStream);
-    }
-  }
-
-  private void commandsRead_fromStream0(InputStream inputStream) throws Exception {
-    SAXParser parser = SAXParserFactory.newInstance().newSAXParser();
-    parser.parse(inputStream, new DefaultHandler() {
-      @Override
-      public void startElement(String uri,
-          String localName,
-          final String name,
-          final Attributes attributes) {
-        ExecutionUtils.runIgnore(new RunnableEx() {
-          @Override
-          public void run() throws Exception {
-            commandsRead_singleCommand(name, attributes);
-          }
-        });
-      }
-    });
-  }
-
-  private void commandsRead_singleCommand(String name, Attributes attributes) throws Exception {
-    // prepare command class
-    Class<? extends Command> commandClass;
-    {
-      commandClass = m_idToCommandClass.get(name);
-      if (commandClass == null) {
-        return;
-      }
-    }
-    // create command
-    Command command;
-    {
-      Constructor<? extends Command> constructor =
-          commandClass.getConstructor(new Class[]{Attributes.class});
-      command = constructor.newInstance(new Object[]{attributes});
-    }
-    // add command
-    commands_add(command);
-  }
-
-  /**
-   * Removes all saved commands, so rollbacks palette into initial state.
-   */
-  public void commands_clear() {
-    m_commands.clear();
-  }
-
-  /**
-   * Adds given {@link Command} to the list (and executes it).
-   */
-  public void commands_add(final Command command) {
-    ExecutionUtils.runIgnore(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        command.execute(m_paletteInfo);
-        command.addToCommandList(m_commands);
-      }
-    });
-  }
-
-  /**
-   * Stores current {@link Command}'s {@link List}.
-   */
-  public void commands_write() {
-    ExecutionUtils.runLog(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        File commandsFile = commands_getFile();
-        PrintWriter writer = new PrintWriter(new FileOutputStream(commandsFile));
-        try {
-          writer.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
-          writer.println("<commands>");
-          // write separate commands
-          for (Command command : m_commands) {
-            writer.println(command.toString());
-          }
-          // close
-          writer.println("</commands>");
-        } finally {
-          writer.close();
-        }
-        // we may be saved something in "wbp-meta", so refresh it
-        m_project.getFolder("wbp-meta").refreshLocal(IResource.DEPTH_INFINITE, null);
-      }
-    });
-  }
-
-  /**
-   * @return the {@link File} with {@link Command}'s for current GUI toolkit.
-   */
-  private File commands_getFile() {
-    // check for palette commands file in project "wbp-meta"
-    {
-      Path commandsFilePath = new Path("wbp-meta/" + m_toolkitId + ".wbp-palette-commands.xml");
-      IFile commandsFile = m_project.getFile(commandsFilePath);
-      if (commandsFile.exists()) {
-        return commandsFile.getLocation().toFile();
-      }
-    }
-    // save commands in plugin state
-    File stateDirectory = DesignerPlugin.getDefault().getStateLocation().toFile();
-    File palettesDirectory = new File(stateDirectory, "palettes");
-    if (!palettesDirectory.exists() && !palettesDirectory.mkdirs()) {
-      throw new Error("Unable to create palettes directory.");
-    }
-    return new File(palettesDirectory, m_toolkitId + ".commands");
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Extensions parsing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final Set<Pair<String, String>> m_categoryReorderRequests = Sets.newHashSet();
-
-  /**
-   * Fills {@link #m_paletteInfo} using contributed extensions.
-   */
-  private void parseExtensionPalette() {
-    // prepare <toolkit>/<palette> elements
-    List<IConfigurationElement> paletteElements = Lists.newArrayList();
-    for (IConfigurationElement toolkitElement : DescriptionHelper.getToolkitElements(m_toolkitId)) {
-      for (IConfigurationElement paletteElement : toolkitElement.getChildren("palette")) {
-        if (isConditionTrue(paletteElement)) {
-          paletteElements.add(paletteElement);
-        }
-      }
-    }
-    // add all categories first, order of contributions is undetermined
-    for (IConfigurationElement paletteElement : paletteElements) {
-      IConfigurationElement[] categoryElements = paletteElement.getChildren("category");
-      for (IConfigurationElement categoryElement : categoryElements) {
-        if (isConditionTrue(categoryElement)) {
-          processCategory(categoryElement);
-        }
-      }
-    }
-    // add other elements
-    for (IConfigurationElement paletteElement : paletteElements) {
-      processPaletteChildren(m_paletteInfo, null, paletteElement);
-    }
-  }
-
-  /**
-   * Process single category contribution.
-   */
-  private void processCategory(IConfigurationElement categoryElement) {
-    AttributesProvider attributesProvider = AttributesProviders.get(categoryElement);
-    // may be there was already category with such id
-    CategoryInfo category;
-    {
-      String id = attributesProvider.getAttribute("id");
-      category = m_paletteInfo.getCategory(id);
-    }
-    // new category, usual case
-    if (category == null) {
-      category = new CategoryInfo(attributesProvider);
-      m_paletteInfo.addCategory(category);
-      addReorderRequest(category, attributesProvider);
-    }
-    // process children
-    processPaletteChildren(m_paletteInfo, category, categoryElement);
-  }
-
-  /**
-   * Check if given {@link CategoryInfo} has "next" attribute to put it before some other category.
-   */
-  private void addReorderRequest(CategoryInfo categoryInfo, AttributesProvider attributesProvider) {
-    String nextCategoryId = attributesProvider.getAttribute("next");
-    if (nextCategoryId != null) {
-      m_categoryReorderRequests.add(Pair.create(categoryInfo.getId(), nextCategoryId));
-    }
-  }
-
-  /**
-   * Executes delayed {@link #m_categoryReorderRequests}.
-   */
-  private void processReorderRequests() {
-    for (Pair<String, String> reorder : m_categoryReorderRequests) {
-      m_paletteInfo.moveCategory(reorder.getLeft(), reorder.getRight());
-    }
-  }
-
-  /**
-   * Process all contributions in given parent {@link IConfigurationElement} for "palette".
-   */
-  private void processPaletteChildren(PaletteInfo paletteInfo,
-      CategoryInfo categoryInfo,
-      IConfigurationElement parentElement) {
-    for (IConfigurationElement element : parentElement.getChildren()) {
-      if (!element.getName().equals("category")) {
-        processCategoryChild(paletteInfo, categoryInfo, element);
-      }
-    }
-  }
-
-  /**
-   * Process single child of category contribution.
-   */
-  private void processCategoryChild(final PaletteInfo paletteInfo,
-      final CategoryInfo _categoryInfo,
-      final IConfigurationElement element) {
-    ExecutionUtils.runLog(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        // prepare category
-        CategoryInfo categoryInfo = _categoryInfo;
-        if (categoryInfo == null) {
-          String categoryId = element.getAttribute("category");
-          Assert.isNotNull(
-              categoryId,
-              "Element defined outside of category, so requires 'category' attribute.");
-          categoryInfo = paletteInfo.getCategory(categoryId);
-				if (categoryId.equals("org.eclipse.wb.rcp.layouts")) {
-					if (InstanceScope.INSTANCE.getNode(IEditorPreferenceConstants.P_AVAILABLE_LAYOUTS_NODE)
-							.getBoolean(categoryId, true)) {
-						categoryInfo = filterPaletteLayouts(categoryInfo);
+	private final JavaInfo m_rootJavaInfo;
+	private final ClassLoader m_classLoader;
+	private final IJavaProject m_javaProject;
+	private final IProject m_project;
+	private final String m_toolkitId;
+	private PaletteInfo m_paletteInfo;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public PaletteManager(JavaInfo rootJavaInfo, String toolkitId) {
+		m_rootJavaInfo = rootJavaInfo;
+		m_classLoader = JavaInfoUtils.getClassLoader(m_rootJavaInfo);
+		m_javaProject = rootJavaInfo.getEditor().getJavaProject();
+		m_project = m_javaProject.getProject();
+		m_toolkitId = toolkitId;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public String getToolkitId() {
+		return m_toolkitId;
+	}
+
+	/**
+	 * @return the current palette.
+	 */
+	public PaletteInfo getPalette() {
+		return m_paletteInfo;
+	}
+
+	/**
+	 * @return the copy of current palette.
+	 */
+	public PaletteInfo getPaletteCopy() {
+		PaletteManager manager = new PaletteManager(m_rootJavaInfo, m_toolkitId);
+		manager.reloadPalette();
+		return manager.getPalette();
+	}
+
+	/**
+	 * Loads new base palette, applies commands.
+	 */
+	public void reloadPalette() {
+		m_paletteInfo = new PaletteInfo();
+		if (m_toolkitId != null) {
+			ExecutionUtils.runLog(new RunnableEx() {
+				@Override
+				public void run() throws Exception {
+					parseExtensionPalette();
+					parseCustomPalette();
+					processReorderRequests();
+					// apply commands
+					commands_apply();
+				}
+			});
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Import/export
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void exportTo(String path) throws Exception {
+		File commandsFile = commands_getFile();
+		FileUtils.copyFile(commandsFile, new File(path));
+	}
+
+	public void importFrom(String path) throws Exception {
+		File commandsFile = commands_getFile();
+		FileUtils.copyFile(new File(path), commandsFile);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final List<Class<? extends Command>> m_commandClasses = Lists.newArrayList();
+	static {
+		m_commandClasses.add(ElementVisibilityCommand.class);
+		m_commandClasses.add(CategoryAddCommand.class);
+		m_commandClasses.add(CategoryEditCommand.class);
+		m_commandClasses.add(CategoryMoveCommand.class);
+		m_commandClasses.add(CategoryRemoveCommand.class);
+		m_commandClasses.add(EntryMoveCommand.class);
+		m_commandClasses.add(EntryRemoveCommand.class);
+		m_commandClasses.add(ComponentAddCommand.class);
+		m_commandClasses.add(ComponentEditCommand.class);
+		m_commandClasses.add(FactoryAddCommand.class);
+		m_commandClasses.add(FactoryEditCommand.class);
+	}
+	private static final Map<String, Class<? extends Command>> m_idToCommandClass = Maps.newTreeMap();
+	private List<Command> m_commands;
+
+	/**
+	 * Applies commands for modifying palette.
+	 */
+	private void commands_apply() throws Exception {
+		// prepare mapping: id -> command class
+		if (m_idToCommandClass.isEmpty()) {
+			for (Class<? extends Command> commandClass : m_commandClasses) {
+				String id = (String) commandClass.getField("ID").get(null);
+				m_idToCommandClass.put(id, commandClass);
+			}
+		}
+		// read commands
+		commandsRead();
+	}
+
+	private void commandsRead() throws Exception {
+		m_commands = Lists.newArrayList();
+		// read-only "wbp-meta" from classpath, for example from jar's
+		{
+			String commandsPath = "wbp-meta/" + m_toolkitId + ".wbp-palette-commands.xml";
+			Enumeration<URL> resources = m_classLoader.getResources(commandsPath);
+			while (resources.hasMoreElements()) {
+				InputStream inputStream = resources.nextElement().openStream();
+				commandsRead_fromStream(inputStream);
+			}
+		}
+		// from read-write file
+		File commandsFile = commands_getFile();
+		if (commandsFile.exists()) {
+			FileInputStream inputStream = new FileInputStream(commandsFile);
+			commandsRead_fromStream(inputStream);
+		}
+	}
+
+	private void commandsRead_fromStream(final InputStream inputStream) throws Exception {
+		try {
+			ExecutionUtils.runIgnore(new RunnableEx() {
+				@Override
+				public void run() throws Exception {
+					commandsRead_fromStream0(inputStream);
+				}
+			});
+		} finally {
+			IOUtils.closeQuietly(inputStream);
+		}
+	}
+
+	private void commandsRead_fromStream0(InputStream inputStream) throws Exception {
+		SAXParser parser = SAXParserFactory.newInstance().newSAXParser();
+		parser.parse(inputStream, new DefaultHandler() {
+			@Override
+			public void startElement(String uri,
+					String localName,
+					final String name,
+					final Attributes attributes) {
+				ExecutionUtils.runIgnore(new RunnableEx() {
+					@Override
+					public void run() throws Exception {
+						commandsRead_singleCommand(name, attributes);
+					}
+				});
+			}
+		});
+	}
+
+	private void commandsRead_singleCommand(String name, Attributes attributes) throws Exception {
+		// prepare command class
+		Class<? extends Command> commandClass;
+		{
+			commandClass = m_idToCommandClass.get(name);
+			if (commandClass == null) {
+				return;
+			}
+		}
+		// create command
+		Command command;
+		{
+			Constructor<? extends Command> constructor =
+					commandClass.getConstructor(new Class[]{Attributes.class});
+			command = constructor.newInstance(new Object[]{attributes});
+		}
+		// add command
+		commands_add(command);
+	}
+
+	/**
+	 * Removes all saved commands, so rollbacks palette into initial state.
+	 */
+	public void commands_clear() {
+		m_commands.clear();
+	}
+
+	/**
+	 * Adds given {@link Command} to the list (and executes it).
+	 */
+	public void commands_add(final Command command) {
+		ExecutionUtils.runIgnore(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				command.execute(m_paletteInfo);
+				command.addToCommandList(m_commands);
+			}
+		});
+	}
+
+	/**
+	 * Stores current {@link Command}'s {@link List}.
+	 */
+	public void commands_write() {
+		ExecutionUtils.runLog(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				File commandsFile = commands_getFile();
+				PrintWriter writer = new PrintWriter(new FileOutputStream(commandsFile));
+				try {
+					writer.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
+					writer.println("<commands>");
+					// write separate commands
+					for (Command command : m_commands) {
+						writer.println(command.toString());
+					}
+					// close
+					writer.println("</commands>");
+				} finally {
+					writer.close();
+				}
+				// we may be saved something in "wbp-meta", so refresh it
+				m_project.getFolder("wbp-meta").refreshLocal(IResource.DEPTH_INFINITE, null);
+			}
+		});
+	}
+
+	/**
+	 * @return the {@link File} with {@link Command}'s for current GUI toolkit.
+	 */
+	private File commands_getFile() {
+		// check for palette commands file in project "wbp-meta"
+		{
+			Path commandsFilePath = new Path("wbp-meta/" + m_toolkitId + ".wbp-palette-commands.xml");
+			IFile commandsFile = m_project.getFile(commandsFilePath);
+			if (commandsFile.exists()) {
+				return commandsFile.getLocation().toFile();
+			}
+		}
+		// save commands in plugin state
+		File stateDirectory = DesignerPlugin.getDefault().getStateLocation().toFile();
+		File palettesDirectory = new File(stateDirectory, "palettes");
+		if (!palettesDirectory.exists() && !palettesDirectory.mkdirs()) {
+			throw new Error("Unable to create palettes directory.");
+		}
+		return new File(palettesDirectory, m_toolkitId + ".commands");
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Extensions parsing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final Set<Pair<String, String>> m_categoryReorderRequests = Sets.newHashSet();
+
+	/**
+	 * Fills {@link #m_paletteInfo} using contributed extensions.
+	 */
+	private void parseExtensionPalette() {
+		// prepare <toolkit>/<palette> elements
+		List<IConfigurationElement> paletteElements = Lists.newArrayList();
+		for (IConfigurationElement toolkitElement : DescriptionHelper.getToolkitElements(m_toolkitId)) {
+			for (IConfigurationElement paletteElement : toolkitElement.getChildren("palette")) {
+				if (isConditionTrue(paletteElement)) {
+					paletteElements.add(paletteElement);
+				}
+			}
+		}
+		// add all categories first, order of contributions is undetermined
+		for (IConfigurationElement paletteElement : paletteElements) {
+			IConfigurationElement[] categoryElements = paletteElement.getChildren("category");
+			for (IConfigurationElement categoryElement : categoryElements) {
+				if (isConditionTrue(categoryElement)) {
+					processCategory(categoryElement);
+				}
+			}
+		}
+		// add other elements
+		for (IConfigurationElement paletteElement : paletteElements) {
+			processPaletteChildren(m_paletteInfo, null, paletteElement);
+		}
+	}
+
+	/**
+	 * Process single category contribution.
+	 */
+	private void processCategory(IConfigurationElement categoryElement) {
+		AttributesProvider attributesProvider = AttributesProviders.get(categoryElement);
+		// may be there was already category with such id
+		CategoryInfo category;
+		{
+			String id = attributesProvider.getAttribute("id");
+			category = m_paletteInfo.getCategory(id);
+		}
+		// new category, usual case
+		if (category == null) {
+			category = new CategoryInfo(attributesProvider);
+			m_paletteInfo.addCategory(category);
+			addReorderRequest(category, attributesProvider);
+		}
+		// process children
+		processPaletteChildren(m_paletteInfo, category, categoryElement);
+	}
+
+	/**
+	 * Check if given {@link CategoryInfo} has "next" attribute to put it before some other category.
+	 */
+	private void addReorderRequest(CategoryInfo categoryInfo, AttributesProvider attributesProvider) {
+		String nextCategoryId = attributesProvider.getAttribute("next");
+		if (nextCategoryId != null) {
+			m_categoryReorderRequests.add(Pair.create(categoryInfo.getId(), nextCategoryId));
+		}
+	}
+
+	/**
+	 * Executes delayed {@link #m_categoryReorderRequests}.
+	 */
+	private void processReorderRequests() {
+		for (Pair<String, String> reorder : m_categoryReorderRequests) {
+			m_paletteInfo.moveCategory(reorder.getLeft(), reorder.getRight());
+		}
+	}
+
+	/**
+	 * Process all contributions in given parent {@link IConfigurationElement} for "palette".
+	 */
+	private void processPaletteChildren(PaletteInfo paletteInfo,
+			CategoryInfo categoryInfo,
+			IConfigurationElement parentElement) {
+		for (IConfigurationElement element : parentElement.getChildren()) {
+			if (!element.getName().equals("category")) {
+				processCategoryChild(paletteInfo, categoryInfo, element);
+			}
+		}
+	}
+
+	/**
+	 * Process single child of category contribution.
+	 */
+	private void processCategoryChild(final PaletteInfo paletteInfo,
+			final CategoryInfo _categoryInfo,
+			final IConfigurationElement element) {
+		ExecutionUtils.runLog(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				// prepare category
+				CategoryInfo categoryInfo = _categoryInfo;
+				if (categoryInfo == null) {
+					String categoryId = element.getAttribute("category");
+					Assert.isNotNull(
+							categoryId,
+							"Element defined outside of category, so requires 'category' attribute.");
+					categoryInfo = paletteInfo.getCategory(categoryId);
+					if (categoryId.equals("org.eclipse.wb.rcp.layouts")) {
+						if (InstanceScope.INSTANCE.getNode(IEditorPreferenceConstants.P_AVAILABLE_LAYOUTS_NODE)
+								.getBoolean(categoryId, true)) {
+							categoryInfo = filterPaletteLayouts(categoryInfo);
+						}
 					}
+					Assert.isNotNull(categoryInfo, "No category with id '" + categoryId + "' found.");
 				}
-          Assert.isNotNull(categoryInfo, "No category with id '" + categoryId + "' found.");
-        }
-        // generic entry
-        if ("entry".equals(element.getName())) {
-          EntryInfo entryInfo = (EntryInfo) element.createExecutableExtension("class");
-          // set id
-          {
-            String id = element.getAttribute("id");
-            if (id != null) {
-              entryInfo.setId(id);
-            }
-          }
-          // set optional name
-          {
-            String name = element.getAttribute("name");
-            if (name != null) {
-              entryInfo.setName(name);
-            }
-          }
-          // add
-          categoryInfo.addEntry(entryInfo);
-        }
-        // component entry
-        if ("component".equals(element.getName())) {
-          if (isConditionTrue(element)) {
-            EntryInfo entryInfo = new ComponentEntryInfo(categoryInfo, element);
-            categoryInfo.addEntry(entryInfo);
-          }
-        }
-        // static factory
-        if ("static-factory".equals(element.getName())) {
-          String factoryClassName = ExternalFactoriesHelper.getRequiredAttribute(element, "class");
-          for (IConfigurationElement methodElement : element.getChildren("method")) {
-            AttributesProvider attributes = AttributesProviders.get(methodElement);
-            StaticFactoryEntryInfo entryInfo =
-                new StaticFactoryEntryInfo(categoryInfo, factoryClassName, attributes);
-            categoryInfo.addEntry(entryInfo);
-          }
-        }
-        // instance factory
-        if ("instance-factory".equals(element.getName())) {
-          String factoryClassName = ExternalFactoriesHelper.getRequiredAttribute(element, "class");
-          for (IConfigurationElement methodElement : element.getChildren("method")) {
-            AttributesProvider attributes = AttributesProviders.get(methodElement);
-            InstanceFactoryEntryInfo entryInfo =
-                new InstanceFactoryEntryInfo(categoryInfo, factoryClassName, attributes);
-            categoryInfo.addEntry(entryInfo);
-          }
-        }
-      }
-    });
-  }
+				// generic entry
+				if ("entry".equals(element.getName())) {
+					EntryInfo entryInfo = (EntryInfo) element.createExecutableExtension("class");
+					// set id
+					{
+						String id = element.getAttribute("id");
+						if (id != null) {
+							entryInfo.setId(id);
+						}
+					}
+					// set optional name
+					{
+						String name = element.getAttribute("name");
+						if (name != null) {
+							entryInfo.setName(name);
+						}
+					}
+					// add
+					categoryInfo.addEntry(entryInfo);
+				}
+				// component entry
+				if ("component".equals(element.getName())) {
+					if (isConditionTrue(element)) {
+						EntryInfo entryInfo = new ComponentEntryInfo(categoryInfo, element);
+						categoryInfo.addEntry(entryInfo);
+					}
+				}
+				// static factory
+				if ("static-factory".equals(element.getName())) {
+					String factoryClassName = ExternalFactoriesHelper.getRequiredAttribute(element, "class");
+					for (IConfigurationElement methodElement : element.getChildren("method")) {
+						AttributesProvider attributes = AttributesProviders.get(methodElement);
+						StaticFactoryEntryInfo entryInfo =
+								new StaticFactoryEntryInfo(categoryInfo, factoryClassName, attributes);
+						categoryInfo.addEntry(entryInfo);
+					}
+				}
+				// instance factory
+				if ("instance-factory".equals(element.getName())) {
+					String factoryClassName = ExternalFactoriesHelper.getRequiredAttribute(element, "class");
+					for (IConfigurationElement methodElement : element.getChildren("method")) {
+						AttributesProvider attributes = AttributesProviders.get(methodElement);
+						InstanceFactoryEntryInfo entryInfo =
+								new InstanceFactoryEntryInfo(categoryInfo, factoryClassName, attributes);
+						categoryInfo.addEntry(entryInfo);
+					}
+				}
+			}
+		});
+	}
 
 	public static CategoryInfo filterPaletteLayouts(CategoryInfo categoryInfo) {
 		CategoryInfo filteredCategory = categoryInfo;
 		List<EntryInfo> entries = new ArrayList<EntryInfo>();
 		entries.addAll(categoryInfo.getEntries()); // make a copy of the entries list to avoid concurrent modification
-													// error
+		// error
 		for (EntryInfo entryInfo : entries) {
 
-				if (entryInfo instanceof ComponentEntryInfo) {
-					// java.awt.FlowLayout, javax.swing.BoxLayout and java.awt.BorderLayout layout
-					// are special layouts that have a swing to swt
-					// implementation and need to checked
-					// separately
+			if (entryInfo instanceof ComponentEntryInfo) {
+				// java.awt.FlowLayout, javax.swing.BoxLayout and java.awt.BorderLayout layout
+				// are special layouts that have a swing to swt
+				// implementation and need to checked
+				// separately
 
-					if (((ComponentEntryInfo) entryInfo).getClassName().contains("FlowLayout")) {
-						if (!InstanceScope.INSTANCE.getNode(IEditorPreferenceConstants.P_AVAILABLE_LAYOUTS_NODE)
-								.getBoolean("java.awt.FlowLayout", true)) {
-							filteredCategory.removeEntry(entryInfo);
-						}
+				if (((ComponentEntryInfo) entryInfo).getClassName().contains("FlowLayout")) {
+					if (!InstanceScope.INSTANCE.getNode(IEditorPreferenceConstants.P_AVAILABLE_LAYOUTS_NODE)
+							.getBoolean("java.awt.FlowLayout", true)) {
+						filteredCategory.removeEntry(entryInfo);
 					}
-					if (((ComponentEntryInfo) entryInfo).getClassName().contains("BoxLayout")) {
-						if (!InstanceScope.INSTANCE.getNode(IEditorPreferenceConstants.P_AVAILABLE_LAYOUTS_NODE)
-								.getBoolean("javax.swing.BoxLayout", true)) {
-							filteredCategory.removeEntry(entryInfo);
-						}
+				}
+				if (((ComponentEntryInfo) entryInfo).getClassName().contains("BoxLayout")) {
+					if (!InstanceScope.INSTANCE.getNode(IEditorPreferenceConstants.P_AVAILABLE_LAYOUTS_NODE)
+							.getBoolean("javax.swing.BoxLayout", true)) {
+						filteredCategory.removeEntry(entryInfo);
 					}
-					if (((ComponentEntryInfo) entryInfo).getClassName().contains("BorderLayout")) {
-						if (!InstanceScope.INSTANCE.getNode(IEditorPreferenceConstants.P_AVAILABLE_LAYOUTS_NODE)
-								.getBoolean("java.awt.BorderLayout", true)) {
-							filteredCategory.removeEntry(entryInfo);
-						}
+				}
+				if (((ComponentEntryInfo) entryInfo).getClassName().contains("BorderLayout")) {
+					if (!InstanceScope.INSTANCE.getNode(IEditorPreferenceConstants.P_AVAILABLE_LAYOUTS_NODE)
+							.getBoolean("java.awt.BorderLayout", true)) {
+						filteredCategory.removeEntry(entryInfo);
 					}
+				}
 				if (!InstanceScope.INSTANCE.getNode(IEditorPreferenceConstants.P_AVAILABLE_LAYOUTS_NODE)
 						.getBoolean(((ComponentEntryInfo) entryInfo).getClassName(), true)) {
 					filteredCategory.removeEntry(entryInfo);
@@ -545,155 +545,155 @@ public static CategoryInfo filterPaletteLayouts(CategoryInfo categoryInfo) {
 
 		return filteredCategory;
 	}
-  /**
-   * @return <code>true</code> if "condition" attribute is empty or evaluates to <code>true</code>.
-   */
-  private boolean isConditionTrue(IConfigurationElement element) {
-    String condition = element.getAttribute("condition");
-    // no condition
-    if (condition == null) {
-      return true;
-    }
-    // evaluate condition
-    Map<String, Object> variables = Maps.newHashMap();
-    variables.put("rootModel", m_rootJavaInfo);
-    variables.putAll(JavaInfoUtils.getState(m_rootJavaInfo).getVersions());
-    Object result = ScriptUtils.evaluate(condition, variables);
-    return result instanceof Boolean ? (Boolean) result : false;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // "wbp-meta" parsing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Parses custom palettes in "wbp-meta".
-   */
-  private void parseCustomPalette() throws Exception {
-    String palettePath = "wbp-meta/" + m_toolkitId + ".wbp-palette.xml";
-    // parse "wbp-meta" from classpath, for example from jar's
-    {
-      Enumeration<URL> resources = m_classLoader.getResources(palettePath);
-      while (resources.hasMoreElements()) {
-        URL url = resources.nextElement();
-        parseCustomPalette(url.openStream(), url.toString());
-      }
-    }
-    // parse "wbp-meta" from IJavaProject's
-    {
-      List<IFile> files = ProjectUtils.findFiles(m_javaProject, palettePath);
-      for (IFile file : files) {
-        String sourceDescription = file.toString();
-        try {
-          parseCustomPalette(file.getContents(true), sourceDescription);
-        } catch (Throwable e) {
-          List<EditorWarning> warnings = JavaInfoUtils.getState(m_rootJavaInfo).getWarnings();
-          warnings.add(new EditorWarning("Can not parse " + sourceDescription, e));
-        }
-      }
-    }
-  }
-
-  /**
-   * Parses single custom palette contribution.
-   *
-   * @param inputStream
-   *          the {@link InputStream} with palette XML.
-   * @param sourceDescription
-   *          the textual description to show for user, that can help in detecting palette XML in
-   *          case of any error.
-   */
-  private void parseCustomPalette(InputStream inputStream, String sourceDescription)
-      throws Exception {
-    try {
-      SAXParser parser = SAXParserFactory.newInstance().newSAXParser();
-      parser.parse(inputStream, new DefaultHandler() {
-        private CategoryInfo m_category;
-        private String m_factoryClassName;
-        private boolean m_factoryStatic;
-
-        @Override
-        public void startElement(String uri, String localTag, String tag, Attributes attributes)
-            throws SAXException {
-          if ("category".equals(tag)) {
-            AttributesProvider attributesProvider = AttributesProviders.get(attributes);
-            // may be there is already category with this ID
-            {
-              String id = attributesProvider.getAttribute("id");
-              m_category = m_paletteInfo.getCategory(id);
-            }
-            // new category, usual case
-            if (m_category == null) {
-              m_category = new CategoryInfo(attributesProvider);
-              m_paletteInfo.addCategory(m_category);
-              addReorderRequest(m_category, attributesProvider);
-            }
-          } else if ("component".equals(tag)) {
-            CategoryInfo category = getTargetCategory(attributes);
-            AttributesProvider attributesProvider = AttributesProviders.get(attributes);
-            ComponentEntryInfo component = new ComponentEntryInfo(category, attributesProvider);
-            category.addEntry(component);
-          } else if ("static-factory".equals(tag)) {
-            m_factoryClassName = getRequiredString(attributes, "class");
-            m_factoryStatic = true;
-          } else if ("instance-factory".equals(tag)) {
-            m_factoryClassName = getRequiredString(attributes, "class");
-            m_factoryStatic = false;
-          } else if ("method".equals(tag)) {
-            CategoryInfo category = getTargetCategory(attributes);
-            FactoryEntryInfo entry = createFactoryEntry(category, attributes);
-            category.addEntry(entry);
-          }
-        }
-
-        private CategoryInfo getTargetCategory(Attributes attributes) {
-          CategoryInfo category = m_category;
-          if (category == null) {
-            String categoryId = attributes.getValue("category");
-            Assert.isNotNull(
-                categoryId,
-                "Element defined outside of category, so requires 'category' attribute.");
-            category = m_paletteInfo.getCategory(categoryId);
-            Assert.isNotNull(category, "No category with id '" + categoryId + "' found.");
-          }
-          return category;
-        }
-
-        private FactoryEntryInfo createFactoryEntry(CategoryInfo category, Attributes attributes) {
-          Assert.isNotNull(m_factoryClassName, "Attempt to use 'method' "
-              + "outside of <static-factory> or <instance-factory> tags.");
-          AttributesProvider attributesProvider = AttributesProviders.get(attributes);
-          if (m_factoryStatic) {
-            return new StaticFactoryEntryInfo(category, m_factoryClassName, attributesProvider);
-          } else {
-            return new InstanceFactoryEntryInfo(category, m_factoryClassName, attributesProvider);
-          }
-        }
-
-        @Override
-        public void endElement(String uri, String localName, String tag) throws SAXException {
-          if ("category".equals(tag)) {
-            m_category = null;
-          } else if ("static-factory".equals(tag) || "instance-factory".equals(tag)) {
-            m_factoryClassName = null;
-          }
-        }
-
-        /**
-         * @return the value of attribute with given name, throws exception if no such attribute
-         *         found.
-         */
-        private String getRequiredString(Attributes attributes, String name) {
-          String value = attributes.getValue(name);
-          Assert.isNotNull(value, "No value for attribute '" + name + "'.");
-          return value;
-        }
-      });
-    } catch (Throwable e) {
-      DesignerPlugin.log("Exception during loading project palette: " + sourceDescription, e);
-    } finally {
-      IOUtils.closeQuietly(inputStream);
-    }
-  }
+	/**
+	 * @return <code>true</code> if "condition" attribute is empty or evaluates to <code>true</code>.
+	 */
+	private boolean isConditionTrue(IConfigurationElement element) {
+		String condition = element.getAttribute("condition");
+		// no condition
+		if (condition == null) {
+			return true;
+		}
+		// evaluate condition
+		Map<String, Object> variables = Maps.newHashMap();
+		variables.put("rootModel", m_rootJavaInfo);
+		variables.putAll(JavaInfoUtils.getState(m_rootJavaInfo).getVersions());
+		Object result = ScriptUtils.evaluate(condition, variables);
+		return result instanceof Boolean ? (Boolean) result : false;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// "wbp-meta" parsing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Parses custom palettes in "wbp-meta".
+	 */
+	private void parseCustomPalette() throws Exception {
+		String palettePath = "wbp-meta/" + m_toolkitId + ".wbp-palette.xml";
+		// parse "wbp-meta" from classpath, for example from jar's
+		{
+			Enumeration<URL> resources = m_classLoader.getResources(palettePath);
+			while (resources.hasMoreElements()) {
+				URL url = resources.nextElement();
+				parseCustomPalette(url.openStream(), url.toString());
+			}
+		}
+		// parse "wbp-meta" from IJavaProject's
+		{
+			List<IFile> files = ProjectUtils.findFiles(m_javaProject, palettePath);
+			for (IFile file : files) {
+				String sourceDescription = file.toString();
+				try {
+					parseCustomPalette(file.getContents(true), sourceDescription);
+				} catch (Throwable e) {
+					List<EditorWarning> warnings = JavaInfoUtils.getState(m_rootJavaInfo).getWarnings();
+					warnings.add(new EditorWarning("Can not parse " + sourceDescription, e));
+				}
+			}
+		}
+	}
+
+	/**
+	 * Parses single custom palette contribution.
+	 *
+	 * @param inputStream
+	 *          the {@link InputStream} with palette XML.
+	 * @param sourceDescription
+	 *          the textual description to show for user, that can help in detecting palette XML in
+	 *          case of any error.
+	 */
+	private void parseCustomPalette(InputStream inputStream, String sourceDescription)
+			throws Exception {
+		try {
+			SAXParser parser = SAXParserFactory.newInstance().newSAXParser();
+			parser.parse(inputStream, new DefaultHandler() {
+				private CategoryInfo m_category;
+				private String m_factoryClassName;
+				private boolean m_factoryStatic;
+
+				@Override
+				public void startElement(String uri, String localTag, String tag, Attributes attributes)
+						throws SAXException {
+					if ("category".equals(tag)) {
+						AttributesProvider attributesProvider = AttributesProviders.get(attributes);
+						// may be there is already category with this ID
+						{
+							String id = attributesProvider.getAttribute("id");
+							m_category = m_paletteInfo.getCategory(id);
+						}
+						// new category, usual case
+						if (m_category == null) {
+							m_category = new CategoryInfo(attributesProvider);
+							m_paletteInfo.addCategory(m_category);
+							addReorderRequest(m_category, attributesProvider);
+						}
+					} else if ("component".equals(tag)) {
+						CategoryInfo category = getTargetCategory(attributes);
+						AttributesProvider attributesProvider = AttributesProviders.get(attributes);
+						ComponentEntryInfo component = new ComponentEntryInfo(category, attributesProvider);
+						category.addEntry(component);
+					} else if ("static-factory".equals(tag)) {
+						m_factoryClassName = getRequiredString(attributes, "class");
+						m_factoryStatic = true;
+					} else if ("instance-factory".equals(tag)) {
+						m_factoryClassName = getRequiredString(attributes, "class");
+						m_factoryStatic = false;
+					} else if ("method".equals(tag)) {
+						CategoryInfo category = getTargetCategory(attributes);
+						FactoryEntryInfo entry = createFactoryEntry(category, attributes);
+						category.addEntry(entry);
+					}
+				}
+
+				private CategoryInfo getTargetCategory(Attributes attributes) {
+					CategoryInfo category = m_category;
+					if (category == null) {
+						String categoryId = attributes.getValue("category");
+						Assert.isNotNull(
+								categoryId,
+								"Element defined outside of category, so requires 'category' attribute.");
+						category = m_paletteInfo.getCategory(categoryId);
+						Assert.isNotNull(category, "No category with id '" + categoryId + "' found.");
+					}
+					return category;
+				}
+
+				private FactoryEntryInfo createFactoryEntry(CategoryInfo category, Attributes attributes) {
+					Assert.isNotNull(m_factoryClassName, "Attempt to use 'method' "
+							+ "outside of <static-factory> or <instance-factory> tags.");
+					AttributesProvider attributesProvider = AttributesProviders.get(attributes);
+					if (m_factoryStatic) {
+						return new StaticFactoryEntryInfo(category, m_factoryClassName, attributesProvider);
+					} else {
+						return new InstanceFactoryEntryInfo(category, m_factoryClassName, attributesProvider);
+					}
+				}
+
+				@Override
+				public void endElement(String uri, String localName, String tag) throws SAXException {
+					if ("category".equals(tag)) {
+						m_category = null;
+					} else if ("static-factory".equals(tag) || "instance-factory".equals(tag)) {
+						m_factoryClassName = null;
+					}
+				}
+
+				/**
+				 * @return the value of attribute with given name, throws exception if no such attribute
+				 *         found.
+				 */
+				private String getRequiredString(Attributes attributes, String name) {
+					String value = attributes.getValue(name);
+					Assert.isNotNull(value, "No value for attribute '" + name + "'.");
+					return value;
+				}
+			});
+		} catch (Throwable e) {
+			DesignerPlugin.log("Exception during loading project palette: " + sourceDescription, e);
+		} finally {
+			IOUtils.closeQuietly(inputStream);
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/PluginPalettePreferences.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/PluginPalettePreferences.java
index 5951f6fb6..735db4e53 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/PluginPalettePreferences.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/PluginPalettePreferences.java
@@ -28,132 +28,132 @@
  * @coverage core.editor.palette.ui
  */
 public final class PluginPalettePreferences implements IPalettePreferences {
-  private final IPreferenceStore m_store;
-  private FontDescriptor m_categoryFont;
-  private FontDescriptor m_entryFont;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public PluginPalettePreferences(IPreferenceStore store) {
-    m_store = store;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Keys
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private String m_categoryFontKey;
-  private String m_entryFontKey;
-  private String m_onlyIconsKey;
-  private String m_minColumnsKey;
-  private String m_layoutsKey;
-
-  /**
-   * Sets the prefix for preference keys.
-   */
-  public void setPrefix(String prefix) {
-    // prepare keys
-    m_categoryFontKey = prefix + ".category.font";
-    m_entryFontKey = prefix + ".entry.font";
-    m_onlyIconsKey = prefix + ".onlyIcons";
-    m_minColumnsKey = prefix + ".columns.min";
-    m_layoutsKey = prefix + ".layouts.type";
-    // set default values
-    {
-      {
-        FontData defaultFontData = Display.getDefault().getSystemFont().getFontData()[0];
-        FontData boldFontData =
-            new FontData(defaultFontData.getName(), defaultFontData.getHeight(), SWT.BOLD);
-        PreferenceConverter.setDefault(m_store, m_categoryFontKey, boldFontData);
-      }
-      {
-        FontData[] defaultFontData = Display.getDefault().getSystemFont().getFontData();
-        PreferenceConverter.setDefault(m_store, m_entryFontKey, defaultFontData);
-      }
-    }
-    m_store.setDefault(m_onlyIconsKey, false);
-    m_store.setDefault(m_minColumnsKey, 2);
-    m_store.setDefault(m_layoutsKey, DesignerPalette.LIST_ICONS_TYPE);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IPalettePreferences
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public FontDescriptor getCategoryFontDescriptor() {
-    if (m_categoryFont == null) {
-      FontData[] fontDataArray = PreferenceConverter.getFontDataArray(m_store, m_categoryFontKey);
-      m_categoryFont = FontDescriptor.createFrom(fontDataArray);
-    }
-    return m_categoryFont;
-  }
-
-  @Override
-  public FontDescriptor getEntryFontDescriptor() {
-    if (m_entryFont == null) {
-      FontData[] fontDataArray = PreferenceConverter.getFontDataArray(m_store, m_entryFontKey);
-      m_entryFont = FontDescriptor.createFrom(fontDataArray);
-    }
-    return m_entryFont;
-  }
-
-  @Override
-  public boolean isOnlyIcons() {
-    return m_store.getBoolean(m_onlyIconsKey);
-  }
-
-  @Override
-  public int getMinColumns() {
-    return m_store.getInt(m_minColumnsKey);
-  }
-
-  public int getLayoutType() {
-    return m_store.getInt(m_layoutsKey);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets the {@link FontData} for {@link ICategory}.
-   */
-  public void setCategoryFont(FontData[] fontDataArray) {
-    PreferenceConverter.setValue(m_store, m_categoryFontKey, fontDataArray);
-  }
-
-  /**
-   * Sets the {@link FontData} for {@link IEntry}.
-   */
-  public void setEntryFont(FontData[] fontDataArray) {
-    PreferenceConverter.setValue(m_store, m_entryFontKey, fontDataArray);
-  }
-
-  /**
-   * Specifies if only icons should be displayed for {@link IEntry}'s.
-   */
-  public void setOnlyIcons(boolean onlyIcons) {
-    m_store.setValue(m_onlyIconsKey, onlyIcons);
-  }
-
-  /**
-   * Sets the minimal number of columns for {@link ICategory}.
-   */
-  public void setMinColumns(int minColumns) {
-    m_store.setValue(m_minColumnsKey, minColumns);
-  }
-
-  /**
-   * Sets the minimal number of columns for {@link ICategory}.
-   */
-  public void setLayoutType(int layoutTypes) {
-    m_store.setValue(m_layoutsKey, layoutTypes);
-  }
+	private final IPreferenceStore m_store;
+	private FontDescriptor m_categoryFont;
+	private FontDescriptor m_entryFont;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public PluginPalettePreferences(IPreferenceStore store) {
+		m_store = store;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Keys
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private String m_categoryFontKey;
+	private String m_entryFontKey;
+	private String m_onlyIconsKey;
+	private String m_minColumnsKey;
+	private String m_layoutsKey;
+
+	/**
+	 * Sets the prefix for preference keys.
+	 */
+	public void setPrefix(String prefix) {
+		// prepare keys
+		m_categoryFontKey = prefix + ".category.font";
+		m_entryFontKey = prefix + ".entry.font";
+		m_onlyIconsKey = prefix + ".onlyIcons";
+		m_minColumnsKey = prefix + ".columns.min";
+		m_layoutsKey = prefix + ".layouts.type";
+		// set default values
+		{
+			{
+				FontData defaultFontData = Display.getDefault().getSystemFont().getFontData()[0];
+				FontData boldFontData =
+						new FontData(defaultFontData.getName(), defaultFontData.getHeight(), SWT.BOLD);
+				PreferenceConverter.setDefault(m_store, m_categoryFontKey, boldFontData);
+			}
+			{
+				FontData[] defaultFontData = Display.getDefault().getSystemFont().getFontData();
+				PreferenceConverter.setDefault(m_store, m_entryFontKey, defaultFontData);
+			}
+		}
+		m_store.setDefault(m_onlyIconsKey, false);
+		m_store.setDefault(m_minColumnsKey, 2);
+		m_store.setDefault(m_layoutsKey, DesignerPalette.LIST_ICONS_TYPE);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IPalettePreferences
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public FontDescriptor getCategoryFontDescriptor() {
+		if (m_categoryFont == null) {
+			FontData[] fontDataArray = PreferenceConverter.getFontDataArray(m_store, m_categoryFontKey);
+			m_categoryFont = FontDescriptor.createFrom(fontDataArray);
+		}
+		return m_categoryFont;
+	}
+
+	@Override
+	public FontDescriptor getEntryFontDescriptor() {
+		if (m_entryFont == null) {
+			FontData[] fontDataArray = PreferenceConverter.getFontDataArray(m_store, m_entryFontKey);
+			m_entryFont = FontDescriptor.createFrom(fontDataArray);
+		}
+		return m_entryFont;
+	}
+
+	@Override
+	public boolean isOnlyIcons() {
+		return m_store.getBoolean(m_onlyIconsKey);
+	}
+
+	@Override
+	public int getMinColumns() {
+		return m_store.getInt(m_minColumnsKey);
+	}
+
+	public int getLayoutType() {
+		return m_store.getInt(m_layoutsKey);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets the {@link FontData} for {@link ICategory}.
+	 */
+	public void setCategoryFont(FontData[] fontDataArray) {
+		PreferenceConverter.setValue(m_store, m_categoryFontKey, fontDataArray);
+	}
+
+	/**
+	 * Sets the {@link FontData} for {@link IEntry}.
+	 */
+	public void setEntryFont(FontData[] fontDataArray) {
+		PreferenceConverter.setValue(m_store, m_entryFontKey, fontDataArray);
+	}
+
+	/**
+	 * Specifies if only icons should be displayed for {@link IEntry}'s.
+	 */
+	public void setOnlyIcons(boolean onlyIcons) {
+		m_store.setValue(m_onlyIconsKey, onlyIcons);
+	}
+
+	/**
+	 * Sets the minimal number of columns for {@link ICategory}.
+	 */
+	public void setMinColumns(int minColumns) {
+		m_store.setValue(m_minColumnsKey, minColumns);
+	}
+
+	/**
+	 * Sets the minimal number of columns for {@link ICategory}.
+	 */
+	public void setLayoutType(int layoutTypes) {
+		m_store.setValue(m_layoutsKey, layoutTypes);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/TypeParameterComposite.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/TypeParameterComposite.java
index 024c1353d..4714cc27d 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/TypeParameterComposite.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/TypeParameterComposite.java
@@ -41,86 +41,86 @@
  * @coverage core.editor.palette.ui
  */
 public class TypeParameterComposite extends Composite {
-  private final TypeParameterDescription m_typeParameter;
-  private final IJavaProject m_javaProject;
-  private final Label m_label;
-  private final Text m_text;
-  private final Button m_button;
+	private final TypeParameterDescription m_typeParameter;
+	private final IJavaProject m_javaProject;
+	private final Label m_label;
+	private final Text m_text;
+	private final Button m_button;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public TypeParameterComposite(Composite parent,
-      int style,
-      IJavaProject javaProject,
-      TypeParameterDescription typeParameter) {
-    super(parent, style);
-    GridLayoutFactory.create(this).columns(3);
-    m_typeParameter = typeParameter;
-    m_javaProject = javaProject;
-    // label
-    m_label = new Label(this, SWT.NONE);
-    GridDataFactory.create(m_label).alignHR();
-    m_label.setText(m_typeParameter.getTitle() + ":");
-    // text
-    m_text = new Text(this, SWT.BORDER);
-    GridDataFactory.create(m_text).grabH().fillH();
-    m_text.setText(m_typeParameter.getTypeName());
-    // button
-    m_button = new Button(this, SWT.NONE);
-    m_button.setText("...");
-    m_button.addSelectionListener(new SelectionAdapter() {
-      @Override
-      public void widgetSelected(SelectionEvent e) {
-        ExecutionUtils.runLog(new RunnableEx() {
-          @Override
-          public void run() throws Exception {
-            chooseType();
-          }
-        });
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public TypeParameterComposite(Composite parent,
+			int style,
+			IJavaProject javaProject,
+			TypeParameterDescription typeParameter) {
+		super(parent, style);
+		GridLayoutFactory.create(this).columns(3);
+		m_typeParameter = typeParameter;
+		m_javaProject = javaProject;
+		// label
+		m_label = new Label(this, SWT.NONE);
+		GridDataFactory.create(m_label).alignHR();
+		m_label.setText(m_typeParameter.getTitle() + ":");
+		// text
+		m_text = new Text(this, SWT.BORDER);
+		GridDataFactory.create(m_text).grabH().fillH();
+		m_text.setText(m_typeParameter.getTypeName());
+		// button
+		m_button = new Button(this, SWT.NONE);
+		m_button.setText("...");
+		m_button.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				ExecutionUtils.runLog(new RunnableEx() {
+					@Override
+					public void run() throws Exception {
+						chooseType();
+					}
+				});
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public String getArgument() {
-    String argumentText = m_text.getText();
-    return StringUtils.isEmpty(argumentText) ? m_typeParameter.getTypeName() : argumentText;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public String getArgument() {
+		String argumentText = m_text.getText();
+		return StringUtils.isEmpty(argumentText) ? m_typeParameter.getTypeName() : argumentText;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Event handlers
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void chooseType() throws Exception {
-    IType selectedType = JdtUiUtils.selectType(getShell(), m_javaProject);
-    // cancel
-    if (selectedType == null) {
-      return;
-    }
-    // should be subtype of "parameter"
-    {
-      String parameterTypeName = m_typeParameter.getTypeName();
-      IType parameterType = m_javaProject.findType(parameterTypeName);
-      ITypeHierarchy hierarchy = selectedType.newSupertypeHierarchy(null);
-      if (!hierarchy.contains(parameterType)) {
-        String message =
-            MessageFormat.format(
-                Messages.TypeParameterComposite_subTypeMessage,
-                selectedType.getFullyQualifiedName(),
-                parameterTypeName);
-        UiUtils.openError(getShell(), Messages.TypeParameterComposite_subTypeTitle, message);
-        return;
-      }
-    }
-    // OK
-    m_text.setText(selectedType.getFullyQualifiedName());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Event handlers
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void chooseType() throws Exception {
+		IType selectedType = JdtUiUtils.selectType(getShell(), m_javaProject);
+		// cancel
+		if (selectedType == null) {
+			return;
+		}
+		// should be subtype of "parameter"
+		{
+			String parameterTypeName = m_typeParameter.getTypeName();
+			IType parameterType = m_javaProject.findType(parameterTypeName);
+			ITypeHierarchy hierarchy = selectedType.newSupertypeHierarchy(null);
+			if (!hierarchy.contains(parameterType)) {
+				String message =
+						MessageFormat.format(
+								Messages.TypeParameterComposite_subTypeMessage,
+								selectedType.getFullyQualifiedName(),
+								parameterTypeName);
+				UiUtils.openError(getShell(), Messages.TypeParameterComposite_subTypeTitle, message);
+				return;
+			}
+		}
+		// OK
+		m_text.setText(selectedType.getFullyQualifiedName());
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/TypeParametersDialog.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/TypeParametersDialog.java
index c7cebf22f..412a54f60 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/TypeParametersDialog.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/TypeParametersDialog.java
@@ -36,88 +36,88 @@
  * @coverage core.editor.palette.ui
  */
 public final class TypeParametersDialog extends ResizableTitleAreaDialog {
-  private final IJavaProject m_javaProject;
-  private final Map<String, TypeParameterDescription> m_typeParameters;
-  private final Map<String, String> m_typeArguments = Maps.newTreeMap();
-  private final Map<String, TypeParameterComposite> m_typeParameterComposites = Maps.newTreeMap();
+	private final IJavaProject m_javaProject;
+	private final Map<String, TypeParameterDescription> m_typeParameters;
+	private final Map<String, String> m_typeArguments = Maps.newTreeMap();
+	private final Map<String, TypeParameterComposite> m_typeParameterComposites = Maps.newTreeMap();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public TypeParametersDialog(Shell parentShell,
-      IJavaProject javaProject,
-      Map<String, TypeParameterDescription> typeParameters) {
-    super(parentShell, DesignerPlugin.getDefault());
-    m_javaProject = javaProject;
-    m_typeParameters = typeParameters;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public TypeParametersDialog(Shell parentShell,
+			IJavaProject javaProject,
+			Map<String, TypeParameterDescription> typeParameters) {
+		super(parentShell, DesignerPlugin.getDefault());
+		m_javaProject = javaProject;
+		m_typeParameters = typeParameters;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public Map<String, String> getArguments() {
-    return m_typeArguments;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public Map<String, String> getArguments() {
+		return m_typeArguments;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Messages
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected final Control createContents(Composite parent) {
-    Control control = super.createContents(parent);
-    configureMessages();
-    return control;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Messages
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected final Control createContents(Composite parent) {
+		Control control = super.createContents(parent);
+		configureMessages();
+		return control;
+	}
 
-  /**
-   * Subclasses override this methods to set title and message for this {@link TitleAreaDialog}.
-   */
-  protected void configureMessages() {
-    getShell().setText(Messages.TypeParametersDialog_shellTitle);
-    setTitle(Messages.TypeParametersDialog_title);
-    setMessage(Messages.TypeParametersDialog_message);
-  }
+	/**
+	 * Subclasses override this methods to set title and message for this {@link TitleAreaDialog}.
+	 */
+	protected void configureMessages() {
+		getShell().setText(Messages.TypeParametersDialog_shellTitle);
+		setTitle(Messages.TypeParametersDialog_title);
+		setMessage(Messages.TypeParametersDialog_message);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Control createDialogArea(Composite parent) {
-    Composite area = (Composite) super.createDialogArea(parent);
-    //
-    Composite container = new Composite(area, SWT.NONE);
-    GridDataFactory.create(container).grab().fill();
-    GridLayoutFactory.create(container).columns(1);
-    // create {@link TypeParameterComposite}s
-    for (Entry<String, TypeParameterDescription> typeParameter : m_typeParameters.entrySet()) {
-      String key = typeParameter.getKey();
-      TypeParameterDescription paramenerInfo = typeParameter.getValue();
-      // create parameters composites
-      TypeParameterComposite parameterComposite =
-          new TypeParameterComposite(container, SWT.NONE, m_javaProject, paramenerInfo);
-      GridDataFactory.create(parameterComposite).grabH().fillH();
-      m_typeParameterComposites.put(key, parameterComposite);
-      // fill result arguments by default
-      m_typeArguments.put(key, paramenerInfo.getTypeName());
-    }
-    return area;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Control createDialogArea(Composite parent) {
+		Composite area = (Composite) super.createDialogArea(parent);
+		//
+		Composite container = new Composite(area, SWT.NONE);
+		GridDataFactory.create(container).grab().fill();
+		GridLayoutFactory.create(container).columns(1);
+		// create {@link TypeParameterComposite}s
+		for (Entry<String, TypeParameterDescription> typeParameter : m_typeParameters.entrySet()) {
+			String key = typeParameter.getKey();
+			TypeParameterDescription paramenerInfo = typeParameter.getValue();
+			// create parameters composites
+			TypeParameterComposite parameterComposite =
+					new TypeParameterComposite(container, SWT.NONE, m_javaProject, paramenerInfo);
+			GridDataFactory.create(parameterComposite).grabH().fillH();
+			m_typeParameterComposites.put(key, parameterComposite);
+			// fill result arguments by default
+			m_typeArguments.put(key, paramenerInfo.getTypeName());
+		}
+		return area;
+	}
 
-  @Override
-  protected void okPressed() {
-    // fill selected arguments
-    for (Entry<String, TypeParameterComposite> parameterComposite : m_typeParameterComposites.entrySet()) {
-      m_typeArguments.put(parameterComposite.getKey(), parameterComposite.getValue().getArgument());
-    }
-    // OK
-    super.okPressed();
-  }
+	@Override
+	protected void okPressed() {
+		// fill selected arguments
+		for (Entry<String, TypeParameterComposite> parameterComposite : m_typeParameterComposites.entrySet()) {
+			m_typeArguments.put(parameterComposite.getKey(), parameterComposite.getValue().getArgument());
+		}
+		// OK
+		super.okPressed();
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/command/AbstractElementCommand.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/command/AbstractElementCommand.java
index 54188fe9d..bc82d3634 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/command/AbstractElementCommand.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/command/AbstractElementCommand.java
@@ -21,54 +21,54 @@
  * @coverage core.editor.palette
  */
 public abstract class AbstractElementCommand extends Command {
-  protected final String m_id;
-  protected final String m_name;
-  protected final String m_description;
-  protected final boolean m_visible;
+	protected final String m_id;
+	protected final String m_name;
+	protected final String m_description;
+	protected final boolean m_visible;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractElementCommand(String id, String name, String description, boolean visible) {
-    m_id = id;
-    m_name = name;
-    m_description = description;
-    m_visible = visible;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractElementCommand(String id, String name, String description, boolean visible) {
+		m_id = id;
+		m_name = name;
+		m_description = description;
+		m_visible = visible;
+	}
 
-  public AbstractElementCommand(Attributes attributes) {
-    m_id = attributes.getValue("id");
-    m_name = attributes.getValue("name");
-    m_description = attributes.getValue("description");
-    m_visible = "true".equals(attributes.getValue("visible"));
-  }
+	public AbstractElementCommand(Attributes attributes) {
+		m_id = attributes.getValue("id");
+		m_name = attributes.getValue("name");
+		m_description = attributes.getValue("description");
+		m_visible = "true".equals(attributes.getValue("visible"));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Execution
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Updates given {@link AbstractElementInfo}.
-   */
-  protected void updateElement(AbstractElementInfo element) {
-    element.setName(m_name);
-    element.setDescription(m_description);
-    element.setVisible(m_visible);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Execution
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Updates given {@link AbstractElementInfo}.
+	 */
+	protected void updateElement(AbstractElementInfo element) {
+		element.setName(m_name);
+		element.setDescription(m_description);
+		element.setVisible(m_visible);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void addAttributes() {
-    addAttribute("id", m_id);
-    addAttribute("name", m_name);
-    addAttribute("description", m_description);
-    addAttribute("visible", m_visible);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void addAttributes() {
+		addAttribute("id", m_id);
+		addAttribute("name", m_name);
+		addAttribute("description", m_description);
+		addAttribute("visible", m_visible);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/command/CategoryAbstractCommand.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/command/CategoryAbstractCommand.java
index 84c2b4f90..949895096 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/command/CategoryAbstractCommand.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/command/CategoryAbstractCommand.java
@@ -22,47 +22,47 @@
  * @coverage core.editor.palette
  */
 public abstract class CategoryAbstractCommand extends AbstractElementCommand {
-  protected final boolean m_open;
+	protected final boolean m_open;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CategoryAbstractCommand(String id,
-      String name,
-      String description,
-      boolean hidden,
-      boolean open) {
-    super(id, name, description, hidden);
-    m_open = open;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CategoryAbstractCommand(String id,
+			String name,
+			String description,
+			boolean hidden,
+			boolean open) {
+		super(id, name, description, hidden);
+		m_open = open;
+	}
 
-  public CategoryAbstractCommand(Attributes attributes) {
-    super(attributes);
-    m_open = "true".equals(attributes.getValue("open"));
-  }
+	public CategoryAbstractCommand(Attributes attributes) {
+		super(attributes);
+		m_open = "true".equals(attributes.getValue("open"));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Execution
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected final void updateElement(AbstractElementInfo element) {
-    super.updateElement(element);
-    CategoryInfo category = (CategoryInfo) element;
-    category.setOpen(m_open);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Execution
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected final void updateElement(AbstractElementInfo element) {
+		super.updateElement(element);
+		CategoryInfo category = (CategoryInfo) element;
+		category.setOpen(m_open);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void addAttributes() {
-    super.addAttributes();
-    addAttribute("open", m_open);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void addAttributes() {
+		super.addAttributes();
+		addAttribute("open", m_open);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/command/CategoryAddCommand.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/command/CategoryAddCommand.java
index eac2e6fc5..70174fe7d 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/command/CategoryAddCommand.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/command/CategoryAddCommand.java
@@ -24,59 +24,59 @@
  * @coverage core.editor.palette
  */
 public final class CategoryAddCommand extends CategoryAbstractCommand {
-  public static final String ID = "addCategory";
-  private final String m_nextCategoryId;
+	public static final String ID = "addCategory";
+	private final String m_nextCategoryId;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CategoryAddCommand(String id,
-      String name,
-      String description,
-      boolean visible,
-      boolean open,
-      String nextCategoryId) {
-    super(id, name, description, visible, open);
-    m_nextCategoryId = nextCategoryId;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CategoryAddCommand(String id,
+			String name,
+			String description,
+			boolean visible,
+			boolean open,
+			String nextCategoryId) {
+		super(id, name, description, visible, open);
+		m_nextCategoryId = nextCategoryId;
+	}
 
-  public CategoryAddCommand(Attributes attributes) {
-    super(attributes);
-    m_nextCategoryId = attributes.getValue("nextCategory");
-  }
+	public CategoryAddCommand(Attributes attributes) {
+		super(attributes);
+		m_nextCategoryId = attributes.getValue("nextCategory");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Execution
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void execute(PaletteInfo palette) {
-    // create category
-    CategoryInfo category = new CategoryInfo();
-    category.setId(m_id);
-    updateElement(category);
-    // add category
-    List<CategoryInfo> categories = palette.getCategories();
-    CategoryInfo nextCategory = palette.getCategory(m_nextCategoryId);
-    int index = categories.indexOf(nextCategory);
-    if (index != -1) {
-      categories.add(index, category);
-    } else {
-      categories.add(category);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Execution
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void execute(PaletteInfo palette) {
+		// create category
+		CategoryInfo category = new CategoryInfo();
+		category.setId(m_id);
+		updateElement(category);
+		// add category
+		List<CategoryInfo> categories = palette.getCategories();
+		CategoryInfo nextCategory = palette.getCategory(m_nextCategoryId);
+		int index = categories.indexOf(nextCategory);
+		if (index != -1) {
+			categories.add(index, category);
+		} else {
+			categories.add(category);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void addAttributes() {
-    super.addAttributes();
-    addAttribute("nextCategory", m_nextCategoryId);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void addAttributes() {
+		super.addAttributes();
+		addAttribute("nextCategory", m_nextCategoryId);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/command/CategoryEditCommand.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/command/CategoryEditCommand.java
index 7916bc300..31dfd16fd 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/command/CategoryEditCommand.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/command/CategoryEditCommand.java
@@ -26,51 +26,51 @@
  * @coverage core.editor.palette
  */
 public final class CategoryEditCommand extends CategoryAbstractCommand {
-  public static final String ID = "editCategory";
+	public static final String ID = "editCategory";
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CategoryEditCommand(String id,
-      String name,
-      String description,
-      boolean visible,
-      boolean open) {
-    super(id, name, description, visible, open);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CategoryEditCommand(String id,
+			String name,
+			String description,
+			boolean visible,
+			boolean open) {
+		super(id, name, description, visible, open);
+	}
 
-  public CategoryEditCommand(Attributes attributes) {
-    super(attributes);
-  }
+	public CategoryEditCommand(Attributes attributes) {
+		super(attributes);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Execution
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void execute(PaletteInfo palette) {
-    CategoryInfo category = palette.getCategory(m_id);
-    if (category != null) {
-      updateElement(category);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Execution
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void execute(PaletteInfo palette) {
+		CategoryInfo category = palette.getCategory(m_id);
+		if (category != null) {
+			updateElement(category);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void addToCommandList(final List<Command> commands) {
-    ExecutionUtils.runIgnore(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        removeCommands(commands, CategoryEditCommand.class, m_id);
-      }
-    });
-    commands.add(this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void addToCommandList(final List<Command> commands) {
+		ExecutionUtils.runIgnore(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				removeCommands(commands, CategoryEditCommand.class, m_id);
+			}
+		});
+		commands.add(this);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/command/CategoryMoveCommand.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/command/CategoryMoveCommand.java
index ca8f30965..fd0839c3e 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/command/CategoryMoveCommand.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/command/CategoryMoveCommand.java
@@ -22,43 +22,43 @@
  * @coverage core.editor.palette
  */
 public final class CategoryMoveCommand extends Command {
-  public static final String ID = "moveCategory";
-  private final String m_id;
-  private final String m_nextCategoryId;
+	public static final String ID = "moveCategory";
+	private final String m_id;
+	private final String m_nextCategoryId;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CategoryMoveCommand(CategoryInfo category, CategoryInfo nextCategory) {
-    m_id = category.getId();
-    m_nextCategoryId = nextCategory != null ? nextCategory.getId() : null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CategoryMoveCommand(CategoryInfo category, CategoryInfo nextCategory) {
+		m_id = category.getId();
+		m_nextCategoryId = nextCategory != null ? nextCategory.getId() : null;
+	}
 
-  public CategoryMoveCommand(Attributes attributes) {
-    m_id = attributes.getValue("id");
-    m_nextCategoryId = attributes.getValue("nextCategory");
-  }
+	public CategoryMoveCommand(Attributes attributes) {
+		m_id = attributes.getValue("id");
+		m_nextCategoryId = attributes.getValue("nextCategory");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Execution
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void execute(PaletteInfo palette) {
-    palette.moveCategory(m_id, m_nextCategoryId);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Execution
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void execute(PaletteInfo palette) {
+		palette.moveCategory(m_id, m_nextCategoryId);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void addAttributes() {
-    addAttribute("id", m_id);
-    addAttribute("nextCategory", m_nextCategoryId);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void addAttributes() {
+		addAttribute("id", m_id);
+		addAttribute("nextCategory", m_nextCategoryId);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/command/CategoryRemoveCommand.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/command/CategoryRemoveCommand.java
index f0fb4f9eb..018f793af 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/command/CategoryRemoveCommand.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/command/CategoryRemoveCommand.java
@@ -22,42 +22,42 @@
  * @coverage core.editor.palette
  */
 public final class CategoryRemoveCommand extends Command {
-  public static final String ID = "removeCategory";
-  private final String m_id;
+	public static final String ID = "removeCategory";
+	private final String m_id;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CategoryRemoveCommand(CategoryInfo category) {
-    m_id = category.getId();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CategoryRemoveCommand(CategoryInfo category) {
+		m_id = category.getId();
+	}
 
-  public CategoryRemoveCommand(Attributes attributes) {
-    m_id = attributes.getValue("id");
-  }
+	public CategoryRemoveCommand(Attributes attributes) {
+		m_id = attributes.getValue("id");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Execution
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void execute(PaletteInfo palette) {
-    CategoryInfo category = palette.getCategory(m_id);
-    if (category != null) {
-      palette.getCategories().remove(category);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Execution
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void execute(PaletteInfo palette) {
+		CategoryInfo category = palette.getCategory(m_id);
+		if (category != null) {
+			palette.getCategories().remove(category);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void addAttributes() {
-    addAttribute("id", m_id);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void addAttributes() {
+		addAttribute("id", m_id);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/command/Command.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/command/Command.java
index df9a879e1..d02394c5f 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/command/Command.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/command/Command.java
@@ -28,119 +28,119 @@
  * @coverage core.editor.palette
  */
 public abstract class Command {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Execution
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Executes this {@link Command}.
-   */
-  public abstract void execute(PaletteInfo palette);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Execution
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Executes this {@link Command}.
+	 */
+	public abstract void execute(PaletteInfo palette);
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Writing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private StringBuffer m_stringBuffer;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Writing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private StringBuffer m_stringBuffer;
 
-  /**
-   * @return the {@link String} that contains information about this {@link Command}. It will be
-   *         passed back to constructor during reading.
-   */
-  @Override
-  public final String toString() {
-    m_stringBuffer = new StringBuffer();
-    m_stringBuffer.append("\t<");
-    // use ID as tag
-    ExecutionUtils.runRethrow(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        String id = (String) Command.this.getClass().getField("ID").get(null);
-        m_stringBuffer.append(id);
-      }
-    });
-    //
-    addAttributes();
-    m_stringBuffer.append("/>");
-    return m_stringBuffer.toString();
-  }
+	/**
+	 * @return the {@link String} that contains information about this {@link Command}. It will be
+	 *         passed back to constructor during reading.
+	 */
+	@Override
+	public final String toString() {
+		m_stringBuffer = new StringBuffer();
+		m_stringBuffer.append("\t<");
+		// use ID as tag
+		ExecutionUtils.runRethrow(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				String id = (String) Command.this.getClass().getField("ID").get(null);
+				m_stringBuffer.append(id);
+			}
+		});
+		//
+		addAttributes();
+		m_stringBuffer.append("/>");
+		return m_stringBuffer.toString();
+	}
 
-  /**
-   * Adds single attribute.
-   */
-  protected final void addAttribute(String name, boolean value) {
-    addAttribute(name, value ? "true" : "false");
-  }
+	/**
+	 * Adds single attribute.
+	 */
+	protected final void addAttribute(String name, boolean value) {
+		addAttribute(name, value ? "true" : "false");
+	}
 
-  /**
-   * Adds single attribute.
-   */
-  protected final void addAttribute(String name, String value) {
-    if (value != null) {
-      m_stringBuffer.append("\n\t\t");
-      m_stringBuffer.append(name);
-      m_stringBuffer.append("=\"");
-      //
-      value = StringEscapeUtils.escapeXml(value);
-      {
-        StringBuilder escaped = new StringBuilder();
-        for (int i = 0; i < value.length(); i++) {
-          char c = value.charAt(i);
-          if (c < 0x20) {
-            escaped.append("&#");
-            escaped.append((int) c);
-            escaped.append(";");
-          } else {
-            escaped.append(c);
-          }
-        }
-        value = escaped.toString();
-      }
-      m_stringBuffer.append(value);
-      //
-      m_stringBuffer.append("\"");
-    }
-  }
+	/**
+	 * Adds single attribute.
+	 */
+	protected final void addAttribute(String name, String value) {
+		if (value != null) {
+			m_stringBuffer.append("\n\t\t");
+			m_stringBuffer.append(name);
+			m_stringBuffer.append("=\"");
+			//
+			value = StringEscapeUtils.escapeXml(value);
+			{
+				StringBuilder escaped = new StringBuilder();
+				for (int i = 0; i < value.length(); i++) {
+					char c = value.charAt(i);
+					if (c < 0x20) {
+						escaped.append("&#");
+						escaped.append((int) c);
+						escaped.append(";");
+					} else {
+						escaped.append(c);
+					}
+				}
+				value = escaped.toString();
+			}
+			m_stringBuffer.append(value);
+			//
+			m_stringBuffer.append("\"");
+		}
+	}
 
-  /**
-   * Subclasses should implement this methods and use {@link #addAttribute(String, String)} to add
-   * separate attributes.
-   */
-  protected abstract void addAttributes();
+	/**
+	 * Subclasses should implement this methods and use {@link #addAttribute(String, String)} to add
+	 * separate attributes.
+	 */
+	protected abstract void addAttributes();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Add command in given list, possible with some optimizations.
-   */
-  public void addToCommandList(List<Command> commands) {
-    commands.add(this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Add command in given list, possible with some optimizations.
+	 */
+	public void addToCommandList(List<Command> commands) {
+		commands.add(this);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Removes all {@link Command}'s with given class and "id".
-   */
-  protected final void removeCommands(List<Command> commands,
-      Class<? extends Command> commandClass,
-      String id) throws Exception {
-    // prepare "id" field
-    Field idField = ReflectionUtils.getFieldByName(commandClass, "m_id");
-    // check commands
-    for (Iterator<Command> I = commands.iterator(); I.hasNext();) {
-      Command command = I.next();
-      if (command.getClass() == commandClass && idField.get(command).equals(id)) {
-        I.remove();
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Removes all {@link Command}'s with given class and "id".
+	 */
+	protected final void removeCommands(List<Command> commands,
+			Class<? extends Command> commandClass,
+			String id) throws Exception {
+		// prepare "id" field
+		Field idField = ReflectionUtils.getFieldByName(commandClass, "m_id");
+		// check commands
+		for (Iterator<Command> I = commands.iterator(); I.hasNext();) {
+			Command command = I.next();
+			if (command.getClass() == commandClass && idField.get(command).equals(id)) {
+				I.remove();
+			}
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/command/ComponentAbstractCommand.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/command/ComponentAbstractCommand.java
index b09c4bc9d..bc3b99373 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/command/ComponentAbstractCommand.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/command/ComponentAbstractCommand.java
@@ -22,47 +22,47 @@
  * @coverage core.editor.palette
  */
 public abstract class ComponentAbstractCommand extends AbstractElementCommand {
-  protected final String m_className;
+	protected final String m_className;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ComponentAbstractCommand(String id,
-      String name,
-      String description,
-      boolean visible,
-      String className) {
-    super(id, name, description, visible);
-    m_className = className;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ComponentAbstractCommand(String id,
+			String name,
+			String description,
+			boolean visible,
+			String className) {
+		super(id, name, description, visible);
+		m_className = className;
+	}
 
-  public ComponentAbstractCommand(Attributes attributes) {
-    super(attributes);
-    m_className = attributes.getValue("class");
-  }
+	public ComponentAbstractCommand(Attributes attributes) {
+		super(attributes);
+		m_className = attributes.getValue("class");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Execution
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected final void updateElement(AbstractElementInfo element) {
-    super.updateElement(element);
-    ComponentEntryInfo component = (ComponentEntryInfo) element;
-    component.setComponentClassName(m_className);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Execution
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected final void updateElement(AbstractElementInfo element) {
+		super.updateElement(element);
+		ComponentEntryInfo component = (ComponentEntryInfo) element;
+		component.setComponentClassName(m_className);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void addAttributes() {
-    super.addAttributes();
-    addAttribute("class", m_className);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void addAttributes() {
+		super.addAttributes();
+		addAttribute("class", m_className);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/command/ComponentAddCommand.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/command/ComponentAddCommand.java
index fc1a01ba7..5ba8c5605 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/command/ComponentAddCommand.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/command/ComponentAddCommand.java
@@ -23,53 +23,53 @@
  * @coverage core.editor.palette
  */
 public final class ComponentAddCommand extends ComponentAbstractCommand {
-  public static final String ID = "addComponent";
-  private final String m_categoryId;
+	public static final String ID = "addComponent";
+	private final String m_categoryId;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ComponentAddCommand(String id,
-      String name,
-      String description,
-      boolean visible,
-      String className,
-      CategoryInfo category) {
-    super(id, name, description, visible, className);
-    m_categoryId = category.getId();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ComponentAddCommand(String id,
+			String name,
+			String description,
+			boolean visible,
+			String className,
+			CategoryInfo category) {
+		super(id, name, description, visible, className);
+		m_categoryId = category.getId();
+	}
 
-  public ComponentAddCommand(Attributes attributes) {
-    super(attributes);
-    m_categoryId = attributes.getValue("category");
-  }
+	public ComponentAddCommand(Attributes attributes) {
+		super(attributes);
+		m_categoryId = attributes.getValue("category");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Execution
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void execute(PaletteInfo palette) {
-    // create component entry
-    ComponentEntryInfo component = new ComponentEntryInfo();
-    component.setId(m_id);
-    updateElement(component);
-    // prepare category
-    CategoryInfo category = palette.getCategory(m_categoryId);
-    category.addEntry(component);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Execution
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void execute(PaletteInfo palette) {
+		// create component entry
+		ComponentEntryInfo component = new ComponentEntryInfo();
+		component.setId(m_id);
+		updateElement(component);
+		// prepare category
+		CategoryInfo category = palette.getCategory(m_categoryId);
+		category.addEntry(component);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void addAttributes() {
-    super.addAttributes();
-    addAttribute("category", m_categoryId);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void addAttributes() {
+		super.addAttributes();
+		addAttribute("category", m_categoryId);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/command/ComponentEditCommand.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/command/ComponentEditCommand.java
index bd0e29ecb..ae0bfabab 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/command/ComponentEditCommand.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/command/ComponentEditCommand.java
@@ -27,51 +27,51 @@
  * @coverage core.editor.palette
  */
 public final class ComponentEditCommand extends ComponentAbstractCommand {
-  public static final String ID = "editComponent";
+	public static final String ID = "editComponent";
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ComponentEditCommand(String id,
-      String name,
-      String description,
-      boolean visible,
-      String className) {
-    super(id, name, description, visible, className);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ComponentEditCommand(String id,
+			String name,
+			String description,
+			boolean visible,
+			String className) {
+		super(id, name, description, visible, className);
+	}
 
-  public ComponentEditCommand(Attributes attributes) {
-    super(attributes);
-  }
+	public ComponentEditCommand(Attributes attributes) {
+		super(attributes);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Execution
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void execute(PaletteInfo palette) {
-    EntryInfo entry = palette.getEntry(m_id);
-    if (entry instanceof ComponentEntryInfo) {
-      updateElement(entry);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Execution
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void execute(PaletteInfo palette) {
+		EntryInfo entry = palette.getEntry(m_id);
+		if (entry instanceof ComponentEntryInfo) {
+			updateElement(entry);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void addToCommandList(final List<Command> commands) {
-    ExecutionUtils.runIgnore(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        removeCommands(commands, ComponentEditCommand.class, m_id);
-      }
-    });
-    commands.add(this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void addToCommandList(final List<Command> commands) {
+		ExecutionUtils.runIgnore(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				removeCommands(commands, ComponentEditCommand.class, m_id);
+			}
+		});
+		commands.add(this);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/command/ElementVisibilityCommand.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/command/ElementVisibilityCommand.java
index 75f49d588..799c40c5b 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/command/ElementVisibilityCommand.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/command/ElementVisibilityCommand.java
@@ -28,67 +28,67 @@
  * @coverage core.editor.palette
  */
 public final class ElementVisibilityCommand extends Command {
-  public static final String ID = "visibleElement";
-  private final String m_id;
-  private final boolean m_visible;
+	public static final String ID = "visibleElement";
+	private final String m_id;
+	private final boolean m_visible;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ElementVisibilityCommand(AbstractElementInfo element, boolean visible) {
-    m_id = element.getId();
-    m_visible = visible;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ElementVisibilityCommand(AbstractElementInfo element, boolean visible) {
+		m_id = element.getId();
+		m_visible = visible;
+	}
 
-  public ElementVisibilityCommand(Attributes attributes) {
-    m_id = attributes.getValue("id");
-    m_visible = "true".equals(attributes.getValue("visible"));
-  }
+	public ElementVisibilityCommand(Attributes attributes) {
+		m_id = attributes.getValue("id");
+		m_visible = "true".equals(attributes.getValue("visible"));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Execution
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void execute(PaletteInfo palette) {
-    // try category
-    {
-      CategoryInfo category = palette.getCategory(m_id);
-      if (category != null) {
-        category.setVisible(m_visible);
-      }
-    }
-    // try entry
-    {
-      EntryInfo entry = palette.getEntry(m_id);
-      if (entry != null) {
-        entry.setVisible(m_visible);
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Execution
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void execute(PaletteInfo palette) {
+		// try category
+		{
+			CategoryInfo category = palette.getCategory(m_id);
+			if (category != null) {
+				category.setVisible(m_visible);
+			}
+		}
+		// try entry
+		{
+			EntryInfo entry = palette.getEntry(m_id);
+			if (entry != null) {
+				entry.setVisible(m_visible);
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void addAttributes() {
-    addAttribute("id", m_id);
-    addAttribute("visible", m_visible);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void addAttributes() {
+		addAttribute("id", m_id);
+		addAttribute("visible", m_visible);
+	}
 
-  @Override
-  public void addToCommandList(final List<Command> commands) {
-    ExecutionUtils.runIgnore(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        removeCommands(commands, ElementVisibilityCommand.class, m_id);
-      }
-    });
-    commands.add(this);
-  }
+	@Override
+	public void addToCommandList(final List<Command> commands) {
+		ExecutionUtils.runIgnore(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				removeCommands(commands, ElementVisibilityCommand.class, m_id);
+			}
+		});
+		commands.add(this);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/command/EntryMoveCommand.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/command/EntryMoveCommand.java
index 0320b2260..0f8354a50 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/command/EntryMoveCommand.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/command/EntryMoveCommand.java
@@ -26,90 +26,90 @@
  * @coverage core.editor.palette
  */
 public final class EntryMoveCommand extends Command {
-  public static final String ID = "moveEntry";
-  private final String m_id;
-  private final String m_categoryId;
-  private final String m_nextEntryId;
+	public static final String ID = "moveEntry";
+	private final String m_id;
+	private final String m_categoryId;
+	private final String m_nextEntryId;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public EntryMoveCommand(EntryInfo entry, CategoryInfo category, EntryInfo nextEntry) {
-    m_id = entry.getId();
-    m_categoryId = category.getId();
-    m_nextEntryId = nextEntry != null ? nextEntry.getId() : null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public EntryMoveCommand(EntryInfo entry, CategoryInfo category, EntryInfo nextEntry) {
+		m_id = entry.getId();
+		m_categoryId = category.getId();
+		m_nextEntryId = nextEntry != null ? nextEntry.getId() : null;
+	}
 
-  public EntryMoveCommand(Attributes attributes) {
-    m_id = attributes.getValue("id");
-    m_categoryId = attributes.getValue("category");
-    m_nextEntryId = attributes.getValue("nextEntry");
-  }
+	public EntryMoveCommand(Attributes attributes) {
+		m_id = attributes.getValue("id");
+		m_categoryId = attributes.getValue("category");
+		m_nextEntryId = attributes.getValue("nextEntry");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Execution
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void execute(PaletteInfo palette) {
-    // prepare entry to move
-    EntryInfo entry = palette.getEntry(m_id);
-    if (entry == null) {
-      return;
-    }
-    // prepare target category
-    CategoryInfo category = palette.getCategory(m_categoryId);
-    if (category == null) {
-      return;
-    }
-    // don't move before itself, this is no-op
-    if (m_id.equals(m_nextEntryId)) {
-      return;
-    }
-    // remove source entry
-    entry.getCategory().removeEntry(entry);
-    // add to new location
-    EntryInfo nextEntry = palette.getEntry(m_nextEntryId);
-    if (nextEntry != null) {
-      int index = category.getEntries().indexOf(nextEntry);
-      category.addEntry(index, entry);
-    } else {
-      category.addEntry(entry);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Execution
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void execute(PaletteInfo palette) {
+		// prepare entry to move
+		EntryInfo entry = palette.getEntry(m_id);
+		if (entry == null) {
+			return;
+		}
+		// prepare target category
+		CategoryInfo category = palette.getCategory(m_categoryId);
+		if (category == null) {
+			return;
+		}
+		// don't move before itself, this is no-op
+		if (m_id.equals(m_nextEntryId)) {
+			return;
+		}
+		// remove source entry
+		entry.getCategory().removeEntry(entry);
+		// add to new location
+		EntryInfo nextEntry = palette.getEntry(m_nextEntryId);
+		if (nextEntry != null) {
+			int index = category.getEntries().indexOf(nextEntry);
+			category.addEntry(index, entry);
+		} else {
+			category.addEntry(entry);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void addAttributes() {
-    addAttribute("id", m_id);
-    addAttribute("category", m_categoryId);
-    addAttribute("nextEntry", m_nextEntryId);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void addAttributes() {
+		addAttribute("id", m_id);
+		addAttribute("category", m_categoryId);
+		addAttribute("nextEntry", m_nextEntryId);
+	}
 
-  @Override
-  public void addToCommandList(List<Command> commands) {
-    ListIterator<Command> I = commands.listIterator(commands.size());
-    while (I.hasPrevious()) {
-      Command command = I.previous();
-      if (command instanceof EntryMoveCommand) {
-        EntryMoveCommand moveCommand = (EntryMoveCommand) command;
-        if (m_id.equals(moveCommand.m_id)) {
-          // remove moves of source entry
-          I.remove();
-        } else if (m_id.equals(moveCommand.m_nextEntryId)) {
-          // if source entry used as target, stop optimizing
-          break;
-        }
-      }
-    }
-    // add command
-    commands.add(this);
-  }
+	@Override
+	public void addToCommandList(List<Command> commands) {
+		ListIterator<Command> I = commands.listIterator(commands.size());
+		while (I.hasPrevious()) {
+			Command command = I.previous();
+			if (command instanceof EntryMoveCommand) {
+				EntryMoveCommand moveCommand = (EntryMoveCommand) command;
+				if (m_id.equals(moveCommand.m_id)) {
+					// remove moves of source entry
+					I.remove();
+				} else if (m_id.equals(moveCommand.m_nextEntryId)) {
+					// if source entry used as target, stop optimizing
+					break;
+				}
+			}
+		}
+		// add command
+		commands.add(this);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/command/EntryRemoveCommand.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/command/EntryRemoveCommand.java
index cf868a370..5c1e895cd 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/command/EntryRemoveCommand.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/command/EntryRemoveCommand.java
@@ -23,43 +23,43 @@
  * @coverage core.editor.palette
  */
 public final class EntryRemoveCommand extends Command {
-  public static final String ID = "removeEntry";
-  private final String m_id;
+	public static final String ID = "removeEntry";
+	private final String m_id;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public EntryRemoveCommand(EntryInfo entry) {
-    m_id = entry.getId();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public EntryRemoveCommand(EntryInfo entry) {
+		m_id = entry.getId();
+	}
 
-  public EntryRemoveCommand(Attributes attributes) {
-    m_id = attributes.getValue("id");
-  }
+	public EntryRemoveCommand(Attributes attributes) {
+		m_id = attributes.getValue("id");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Execution
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void execute(PaletteInfo palette) {
-    EntryInfo entry = palette.getEntry(m_id);
-    if (entry != null) {
-      CategoryInfo category = entry.getCategory();
-      category.removeEntry(entry);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Execution
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void execute(PaletteInfo palette) {
+		EntryInfo entry = palette.getEntry(m_id);
+		if (entry != null) {
+			CategoryInfo category = entry.getCategory();
+			category.removeEntry(entry);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void addAttributes() {
-    addAttribute("id", m_id);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void addAttributes() {
+		addAttribute("id", m_id);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/command/factory/FactoryAbstractCommand.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/command/factory/FactoryAbstractCommand.java
index d10c1b555..9be527aa8 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/command/factory/FactoryAbstractCommand.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/command/factory/FactoryAbstractCommand.java
@@ -24,58 +24,58 @@
  * @coverage core.editor.palette
  */
 public abstract class FactoryAbstractCommand extends AbstractElementCommand {
-  protected final String m_factoryClassName;
-  protected final String m_methodSignature;
-  protected final boolean m_forStatic;
+	protected final String m_factoryClassName;
+	protected final String m_methodSignature;
+	protected final boolean m_forStatic;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FactoryAbstractCommand(String id,
-      String name,
-      String description,
-      boolean visible,
-      String factoryClassName,
-      String methodSignature,
-      boolean forStatic) {
-    super(id, name, description, visible);
-    m_factoryClassName = factoryClassName;
-    m_methodSignature = methodSignature;
-    m_forStatic = forStatic;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FactoryAbstractCommand(String id,
+			String name,
+			String description,
+			boolean visible,
+			String factoryClassName,
+			String methodSignature,
+			boolean forStatic) {
+		super(id, name, description, visible);
+		m_factoryClassName = factoryClassName;
+		m_methodSignature = methodSignature;
+		m_forStatic = forStatic;
+	}
 
-  public FactoryAbstractCommand(Attributes attributes) {
-    super(attributes);
-    m_factoryClassName = attributes.getValue("class");
-    m_methodSignature = attributes.getValue("signature");
-    m_forStatic = "true".equals(attributes.getValue("static"));
-  }
+	public FactoryAbstractCommand(Attributes attributes) {
+		super(attributes);
+		m_factoryClassName = attributes.getValue("class");
+		m_methodSignature = attributes.getValue("signature");
+		m_forStatic = "true".equals(attributes.getValue("static"));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Execution
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected final void updateElement(AbstractElementInfo element) {
-    super.updateElement(element);
-    FactoryEntryInfo component = (FactoryEntryInfo) element;
-    component.setFactoryClassName(m_factoryClassName);
-    component.setMethodSignature(m_methodSignature);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Execution
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected final void updateElement(AbstractElementInfo element) {
+		super.updateElement(element);
+		FactoryEntryInfo component = (FactoryEntryInfo) element;
+		component.setFactoryClassName(m_factoryClassName);
+		component.setMethodSignature(m_methodSignature);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void addAttributes() {
-    super.addAttributes();
-    addAttribute("class", m_factoryClassName);
-    addAttribute("signature", m_methodSignature);
-    addAttribute("static", m_forStatic);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void addAttributes() {
+		super.addAttributes();
+		addAttribute("class", m_factoryClassName);
+		addAttribute("signature", m_methodSignature);
+		addAttribute("static", m_forStatic);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/command/factory/FactoryAddCommand.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/command/factory/FactoryAddCommand.java
index a6af9b301..3ba6debe2 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/command/factory/FactoryAddCommand.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/command/factory/FactoryAddCommand.java
@@ -26,61 +26,61 @@
  * @coverage core.editor.palette
  */
 public final class FactoryAddCommand extends FactoryAbstractCommand {
-  public static final String ID = "addFactory";
-  private final String m_categoryId;
+	public static final String ID = "addFactory";
+	private final String m_categoryId;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FactoryAddCommand(String id,
-      String name,
-      String description,
-      boolean visible,
-      String factoryClassName,
-      String methodSignature,
-      boolean forStatic,
-      CategoryInfo category) {
-    super(id, name, description, visible, factoryClassName, methodSignature, forStatic);
-    m_categoryId = category.getId();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FactoryAddCommand(String id,
+			String name,
+			String description,
+			boolean visible,
+			String factoryClassName,
+			String methodSignature,
+			boolean forStatic,
+			CategoryInfo category) {
+		super(id, name, description, visible, factoryClassName, methodSignature, forStatic);
+		m_categoryId = category.getId();
+	}
 
-  public FactoryAddCommand(Attributes attributes) {
-    super(attributes);
-    m_categoryId = attributes.getValue("category");
-  }
+	public FactoryAddCommand(Attributes attributes) {
+		super(attributes);
+		m_categoryId = attributes.getValue("category");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Execution
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void execute(PaletteInfo palette) {
-    // create entry
-    FactoryEntryInfo entry;
-    if (m_forStatic) {
-      entry = new StaticFactoryEntryInfo();
-    } else {
-      entry = new InstanceFactoryEntryInfo();
-    }
-    // update entry
-    entry.setId(m_id);
-    updateElement(entry);
-    // prepare category
-    CategoryInfo category = palette.getCategory(m_categoryId);
-    category.addEntry(entry);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Execution
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void execute(PaletteInfo palette) {
+		// create entry
+		FactoryEntryInfo entry;
+		if (m_forStatic) {
+			entry = new StaticFactoryEntryInfo();
+		} else {
+			entry = new InstanceFactoryEntryInfo();
+		}
+		// update entry
+		entry.setId(m_id);
+		updateElement(entry);
+		// prepare category
+		CategoryInfo category = palette.getCategory(m_categoryId);
+		category.addEntry(entry);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void addAttributes() {
-    super.addAttributes();
-    addAttribute("category", m_categoryId);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void addAttributes() {
+		super.addAttributes();
+		addAttribute("category", m_categoryId);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/command/factory/FactoryEditCommand.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/command/factory/FactoryEditCommand.java
index 96801bd31..d65ece0d6 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/command/factory/FactoryEditCommand.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/command/factory/FactoryEditCommand.java
@@ -28,53 +28,53 @@
  * @coverage core.editor.palette
  */
 public final class FactoryEditCommand extends FactoryAbstractCommand {
-  public static final String ID = "editFactory";
+	public static final String ID = "editFactory";
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FactoryEditCommand(String id,
-      String name,
-      String description,
-      boolean visible,
-      String factoryClassName,
-      String methodSignature,
-      boolean forStatic) {
-    super(id, name, description, visible, factoryClassName, methodSignature, forStatic);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FactoryEditCommand(String id,
+			String name,
+			String description,
+			boolean visible,
+			String factoryClassName,
+			String methodSignature,
+			boolean forStatic) {
+		super(id, name, description, visible, factoryClassName, methodSignature, forStatic);
+	}
 
-  public FactoryEditCommand(Attributes attributes) {
-    super(attributes);
-  }
+	public FactoryEditCommand(Attributes attributes) {
+		super(attributes);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Execution
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void execute(PaletteInfo palette) {
-    EntryInfo entry = palette.getEntry(m_id);
-    if (entry instanceof FactoryEntryInfo) {
-      updateElement(entry);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Execution
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void execute(PaletteInfo palette) {
+		EntryInfo entry = palette.getEntry(m_id);
+		if (entry instanceof FactoryEntryInfo) {
+			updateElement(entry);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void addToCommandList(final List<Command> commands) {
-    ExecutionUtils.runIgnore(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        removeCommands(commands, FactoryEditCommand.class, m_id);
-      }
-    });
-    commands.add(this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void addToCommandList(final List<Command> commands) {
+		ExecutionUtils.runIgnore(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				removeCommands(commands, FactoryEditCommand.class, m_id);
+			}
+		});
+		commands.add(this);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/dialogs/AbstractPaletteDialog.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/dialogs/AbstractPaletteDialog.java
index d5229a7ef..063540446 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/dialogs/AbstractPaletteDialog.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/dialogs/AbstractPaletteDialog.java
@@ -30,53 +30,53 @@
  * @coverage core.editor.palette.ui
  */
 public abstract class AbstractPaletteDialog extends AbstractValidationTitleAreaDialog {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractPaletteDialog(Shell parentShell,
-      String shellText,
-      String titleText,
-      Image titleImage,
-      String titleMessage) {
-    super(parentShell, DesignerPlugin.getDefault(), shellText, titleText, titleImage, titleMessage);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractPaletteDialog(Shell parentShell,
+			String shellText,
+			String titleText,
+			Image titleImage,
+			String titleMessage) {
+		super(parentShell, DesignerPlugin.getDefault(), shellText, titleText, titleImage, titleMessage);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link ComboDialogField} for selecting {@link CategoryInfo}.
-   */
-  protected static ComboDialogField createCategoryField(PaletteInfo palette,
-      CategoryInfo initialCategory) {
-    final ComboDialogField categoryField = new ComboDialogField(SWT.READ_ONLY);
-    // add categories
-    boolean categorySelected = false;
-    for (CategoryInfo category : palette.getCategories()) {
-      categoryField.addItem(category.getName());
-      if (category == initialCategory) {
-        categoryField.selectItem(categoryField.getItemCount() - 1);
-        categorySelected = true;
-      }
-    }
-    // select default category
-    if (!categorySelected) {
-      categoryField.selectItem(categoryField.getItemCount() - 1);
-    }
-    // show all items
-    Display.getCurrent().asyncExec(new Runnable() {
-      @Override
-      public void run() {
-        UiUtils.setVisibleItemCount(
-            categoryField.getComboControl(null),
-            categoryField.getItemCount());
-      }
-    });
-    //
-    return categoryField;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link ComboDialogField} for selecting {@link CategoryInfo}.
+	 */
+	protected static ComboDialogField createCategoryField(PaletteInfo palette,
+			CategoryInfo initialCategory) {
+		final ComboDialogField categoryField = new ComboDialogField(SWT.READ_ONLY);
+		// add categories
+		boolean categorySelected = false;
+		for (CategoryInfo category : palette.getCategories()) {
+			categoryField.addItem(category.getName());
+			if (category == initialCategory) {
+				categoryField.selectItem(categoryField.getItemCount() - 1);
+				categorySelected = true;
+			}
+		}
+		// select default category
+		if (!categorySelected) {
+			categoryField.selectItem(categoryField.getItemCount() - 1);
+		}
+		// show all items
+		Display.getCurrent().asyncExec(new Runnable() {
+			@Override
+			public void run() {
+				UiUtils.setVisibleItemCount(
+						categoryField.getComboControl(null),
+						categoryField.getItemCount());
+			}
+		});
+		//
+		return categoryField;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/dialogs/AbstractPaletteElementDialog.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/dialogs/AbstractPaletteElementDialog.java
index efef36553..6009d8698 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/dialogs/AbstractPaletteElementDialog.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/dialogs/AbstractPaletteElementDialog.java
@@ -25,47 +25,47 @@
  * @coverage core.editor.palette.ui
  */
 public abstract class AbstractPaletteElementDialog extends AbstractPaletteDialog {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractPaletteElementDialog(Shell parentShell,
-      String shellText,
-      String titleText,
-      Image titleImage,
-      String titleMessage) {
-    super(parentShell, shellText, titleText, titleImage, titleMessage);
-    setShellStyle(SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractPaletteElementDialog(Shell parentShell,
+			String shellText,
+			String titleText,
+			Image titleImage,
+			String titleMessage) {
+		super(parentShell, shellText, titleText, titleImage, titleMessage);
+		setShellStyle(SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Buttons
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void okPressed() {
-    m_command = createCommand();
-    super.okPressed();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Buttons
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void okPressed() {
+		m_command = createCommand();
+		super.okPressed();
+	}
 
-  /**
-   * @return new {@link Command} for modifying {@link PaletteInfo}.
-   */
-  protected abstract Command createCommand();
+	/**
+	 * @return new {@link Command} for modifying {@link PaletteInfo}.
+	 */
+	protected abstract Command createCommand();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Command m_command;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Command m_command;
 
-  /**
-   * @return the {@link Command} generated by this dialog.
-   */
-  public final Command getCommand() {
-    return m_command;
-  }
+	/**
+	 * @return the {@link Command} generated by this dialog.
+	 */
+	public final Command getCommand() {
+		return m_command;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/dialogs/CategoryAbstractDialog.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/dialogs/CategoryAbstractDialog.java
index 0da1378ce..a8c7ff935 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/dialogs/CategoryAbstractDialog.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/dialogs/CategoryAbstractDialog.java
@@ -31,96 +31,96 @@
  * @coverage core.editor.palette.ui
  */
 public abstract class CategoryAbstractDialog extends AbstractPaletteElementDialog {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CategoryAbstractDialog(Shell parentShell, String shellText, String titleText) {
-    super(parentShell, shellText, titleText, null, Messages.CategoryAbstractDialog_message);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CategoryAbstractDialog(Shell parentShell, String shellText, String titleText) {
+		super(parentShell, shellText, titleText, null, Messages.CategoryAbstractDialog_message);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected StringDialogField m_idField;
-  protected StringDialogField m_nameField;
-  protected StringAreaDialogField m_descriptionField;
-  protected SelectionButtonDialogFieldGroup m_stateField;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected StringDialogField m_idField;
+	protected StringDialogField m_nameField;
+	protected StringAreaDialogField m_descriptionField;
+	protected SelectionButtonDialogFieldGroup m_stateField;
 
-  @Override
-  protected void createControls(Composite container) {
-    m_fieldsContainer = container;
-    GridLayoutFactory.create(container).columns(2);
-    // id
-    {
-      m_idField = new StringDialogField();
-      m_idField.setEditable(false);
-      doCreateField(m_idField, Messages.CategoryAbstractDialog_idLabel);
-    }
-    // name
-    {
-      m_nameField = new StringDialogField();
-      doCreateField(m_nameField, Messages.CategoryAbstractDialog_nameLabel);
-      m_nameField.setFocus();
-    }
-    // description
-    {
-      m_descriptionField = new StringAreaDialogField(5);
-      doCreateField(m_descriptionField, Messages.CategoryAbstractDialog_descriptionLabel);
-      GridDataFactory.modify(m_descriptionField.getTextControl(null)).grabV();
-    }
-    // state
-    {
-      m_stateField =
-          new SelectionButtonDialogFieldGroup(SWT.CHECK, new String[]{
-              Messages.CategoryAbstractDialog_stateVisible,
-              Messages.CategoryAbstractDialog_stateOpen}, 1, SWT.SHADOW_ETCHED_IN);
-      doCreateField(m_stateField, Messages.CategoryAbstractDialog_stateLabel);
-    }
-    // allow to add more controls
-    createAdditionalControls(container);
-  }
+	@Override
+	protected void createControls(Composite container) {
+		m_fieldsContainer = container;
+		GridLayoutFactory.create(container).columns(2);
+		// id
+		{
+			m_idField = new StringDialogField();
+			m_idField.setEditable(false);
+			doCreateField(m_idField, Messages.CategoryAbstractDialog_idLabel);
+		}
+		// name
+		{
+			m_nameField = new StringDialogField();
+			doCreateField(m_nameField, Messages.CategoryAbstractDialog_nameLabel);
+			m_nameField.setFocus();
+		}
+		// description
+		{
+			m_descriptionField = new StringAreaDialogField(5);
+			doCreateField(m_descriptionField, Messages.CategoryAbstractDialog_descriptionLabel);
+			GridDataFactory.modify(m_descriptionField.getTextControl(null)).grabV();
+		}
+		// state
+		{
+			m_stateField =
+					new SelectionButtonDialogFieldGroup(SWT.CHECK, new String[]{
+							Messages.CategoryAbstractDialog_stateVisible,
+							Messages.CategoryAbstractDialog_stateOpen}, 1, SWT.SHADOW_ETCHED_IN);
+			doCreateField(m_stateField, Messages.CategoryAbstractDialog_stateLabel);
+		}
+		// allow to add more controls
+		createAdditionalControls(container);
+	}
 
-  /**
-   * Creates additional controls.
-   */
-  protected void createAdditionalControls(Composite container) {
-  }
+	/**
+	 * Creates additional controls.
+	 */
+	protected void createAdditionalControls(Composite container) {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Validation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String validate() {
-    // validate name
-    {
-      String name = m_nameField.getText();
-      if (name.length() == 0) {
-        return Messages.CategoryAbstractDialog_validateEmptyName;
-      }
-    }
-    // OK
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Validation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String validate() {
+		// validate name
+		{
+			String name = m_nameField.getText();
+			if (name.length() == 0) {
+				return Messages.CategoryAbstractDialog_validateEmptyName;
+			}
+		}
+		// OK
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Composite m_fieldsContainer;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Composite m_fieldsContainer;
 
-  /**
-   * Configures given {@link DialogField} for specific of this dialog.
-   */
-  protected final void doCreateField(DialogField dialogField, String labelText) {
-    dialogField.setLabelText(labelText);
-    dialogField.setDialogFieldListener(m_validateListener);
-    DialogFieldUtils.fillControls(m_fieldsContainer, dialogField, 2, 60);
-  }
+	/**
+	 * Configures given {@link DialogField} for specific of this dialog.
+	 */
+	protected final void doCreateField(DialogField dialogField, String labelText) {
+		dialogField.setLabelText(labelText);
+		dialogField.setDialogFieldListener(m_validateListener);
+		DialogFieldUtils.fillControls(m_fieldsContainer, dialogField, 2, 60);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/dialogs/CategoryAddDialog.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/dialogs/CategoryAddDialog.java
index 73ec21535..ae566c4af 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/dialogs/CategoryAddDialog.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/dialogs/CategoryAddDialog.java
@@ -32,85 +32,85 @@
  * @coverage core.editor.palette.ui
  */
 public final class CategoryAddDialog extends CategoryAbstractDialog {
-  private final PaletteInfo m_palette;
-  private final CategoryInfo m_initialNextCategory;
+	private final PaletteInfo m_palette;
+	private final CategoryInfo m_initialNextCategory;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CategoryAddDialog(Shell parentShell, PaletteInfo palette, CategoryInfo initialNextCategory) {
-    super(parentShell, Messages.CategoryAddDialog_title, Messages.CategoryAddDialog_message);
-    m_palette = palette;
-    m_initialNextCategory = initialNextCategory;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CategoryAddDialog(Shell parentShell, PaletteInfo palette, CategoryInfo initialNextCategory) {
+		super(parentShell, Messages.CategoryAddDialog_title, Messages.CategoryAddDialog_message);
+		m_palette = palette;
+		m_initialNextCategory = initialNextCategory;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private ComboDialogField m_locationField;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private ComboDialogField m_locationField;
 
-  @Override
-  protected void createAdditionalControls(Composite container) {
-    m_stateField.setSelection(0, true);
-    m_stateField.setSelection(1, true);
-    // id
-    {
-      String id = "custom_" + System.currentTimeMillis();
-      m_idField.setTextWithoutUpdate(id);
-    }
-    // location
-    {
-      m_locationField = new ComboDialogField(SWT.READ_ONLY);
-      doCreateField(m_locationField, Messages.CategoryAddDialog_targetCategoryLabel);
-      // add categories
-      boolean categorySelected = false;
-      for (CategoryInfo category : m_palette.getCategories()) {
-        m_locationField.addItem(MessageFormat.format(
-            Messages.CategoryAddDialog_targetCategoryBefore,
-            category.getName()));
-        if (category == m_initialNextCategory) {
-          m_locationField.selectItem(m_locationField.getItemCount() - 1);
-          categorySelected = true;
-        }
-      }
-      // add end
-      m_locationField.addItem(Messages.CategoryAddDialog_targetCategoryEnd);
-      if (!categorySelected) {
-        m_locationField.selectItem(m_locationField.getItemCount() - 1);
-      }
-      // show all items
-      UiUtils.setVisibleItemCount(
-          m_locationField.getComboControl(null),
-          m_locationField.getItemCount());
-    }
-  }
+	@Override
+	protected void createAdditionalControls(Composite container) {
+		m_stateField.setSelection(0, true);
+		m_stateField.setSelection(1, true);
+		// id
+		{
+			String id = "custom_" + System.currentTimeMillis();
+			m_idField.setTextWithoutUpdate(id);
+		}
+		// location
+		{
+			m_locationField = new ComboDialogField(SWT.READ_ONLY);
+			doCreateField(m_locationField, Messages.CategoryAddDialog_targetCategoryLabel);
+			// add categories
+			boolean categorySelected = false;
+			for (CategoryInfo category : m_palette.getCategories()) {
+				m_locationField.addItem(MessageFormat.format(
+						Messages.CategoryAddDialog_targetCategoryBefore,
+						category.getName()));
+				if (category == m_initialNextCategory) {
+					m_locationField.selectItem(m_locationField.getItemCount() - 1);
+					categorySelected = true;
+				}
+			}
+			// add end
+			m_locationField.addItem(Messages.CategoryAddDialog_targetCategoryEnd);
+			if (!categorySelected) {
+				m_locationField.selectItem(m_locationField.getItemCount() - 1);
+			}
+			// show all items
+			UiUtils.setVisibleItemCount(
+					m_locationField.getComboControl(null),
+					m_locationField.getItemCount());
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Command
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Command createCommand() {
-    String id = m_idField.getText();
-    String name = m_nameField.getText();
-    String description = m_descriptionField.getText();
-    boolean hidden = m_stateField.isSelected(0);
-    boolean open = m_stateField.isSelected(1);
-    // prepare next category
-    String nextCategoryId = null;
-    {
-      int index = m_locationField.getSelectionIndex();
-      List<CategoryInfo> categories = m_palette.getCategories();
-      if (index < categories.size()) {
-        nextCategoryId = categories.get(index).getId();
-      }
-    }
-    // create command
-    return new CategoryAddCommand(id, name, description, hidden, open, nextCategoryId);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Command
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Command createCommand() {
+		String id = m_idField.getText();
+		String name = m_nameField.getText();
+		String description = m_descriptionField.getText();
+		boolean hidden = m_stateField.isSelected(0);
+		boolean open = m_stateField.isSelected(1);
+		// prepare next category
+		String nextCategoryId = null;
+		{
+			int index = m_locationField.getSelectionIndex();
+			List<CategoryInfo> categories = m_palette.getCategories();
+			if (index < categories.size()) {
+				nextCategoryId = categories.get(index).getId();
+			}
+		}
+		// create command
+		return new CategoryAddCommand(id, name, description, hidden, open, nextCategoryId);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/dialogs/CategoryEditDialog.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/dialogs/CategoryEditDialog.java
index f416f855f..3709c9920 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/dialogs/CategoryEditDialog.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/dialogs/CategoryEditDialog.java
@@ -25,44 +25,44 @@
  * @coverage core.editor.palette.ui
  */
 public final class CategoryEditDialog extends CategoryAbstractDialog {
-  private final CategoryInfo m_category;
+	private final CategoryInfo m_category;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CategoryEditDialog(Shell parentShell, CategoryInfo category) {
-    super(parentShell, Messages.CategoryEditDialog_title, Messages.CategoryEditDialog_message);
-    m_category = category;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CategoryEditDialog(Shell parentShell, CategoryInfo category) {
+		super(parentShell, Messages.CategoryEditDialog_title, Messages.CategoryEditDialog_message);
+		m_category = category;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createControls(Composite container) {
-    super.createControls(container);
-    m_idField.setText(m_category.getId());
-    m_nameField.setText(m_category.getName());
-    m_descriptionField.setText(m_category.getDescription());
-    m_stateField.setSelection(0, m_category.isVisible());
-    m_stateField.setSelection(1, m_category.isOpen());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createControls(Composite container) {
+		super.createControls(container);
+		m_idField.setText(m_category.getId());
+		m_nameField.setText(m_category.getName());
+		m_descriptionField.setText(m_category.getDescription());
+		m_stateField.setSelection(0, m_category.isVisible());
+		m_stateField.setSelection(1, m_category.isOpen());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Command
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Command createCommand() {
-    String name = m_nameField.getText();
-    String description = m_descriptionField.getText();
-    boolean hidden = m_stateField.isSelected(0);
-    boolean open = m_stateField.isSelected(1);
-    return new CategoryEditCommand(m_category.getId(), name, description, hidden, open);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Command
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Command createCommand() {
+		String name = m_nameField.getText();
+		String description = m_descriptionField.getText();
+		boolean hidden = m_stateField.isSelected(0);
+		boolean open = m_stateField.isSelected(1);
+		return new CategoryEditCommand(m_category.getId(), name, description, hidden, open);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/dialogs/ComponentAbstractDialog.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/dialogs/ComponentAbstractDialog.java
index 512320be9..6e6c5ce82 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/dialogs/ComponentAbstractDialog.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/dialogs/ComponentAbstractDialog.java
@@ -41,174 +41,174 @@
  * @coverage core.editor.palette.ui
  */
 public abstract class ComponentAbstractDialog extends AbstractPaletteElementDialog {
-  private final AstEditor m_editor;
-  private ComponentDescription m_componentDescription;
+	private final AstEditor m_editor;
+	private ComponentDescription m_componentDescription;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ComponentAbstractDialog(Shell parentShell,
-      AstEditor editor,
-      String shellText,
-      String titleText) {
-    super(parentShell, shellText, titleText, null, Messages.ComponentAbstractDialog_message);
-    m_editor = editor;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ComponentAbstractDialog(Shell parentShell,
+			AstEditor editor,
+			String shellText,
+			String titleText) {
+		super(parentShell, shellText, titleText, null, Messages.ComponentAbstractDialog_message);
+		m_editor = editor;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected StringDialogField m_idField;
-  protected StringDialogField m_nameField;
-  protected StringButtonDialogField m_classField;
-  protected StringAreaDialogField m_descriptionField;
-  protected BooleanDialogField m_visibleField;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected StringDialogField m_idField;
+	protected StringDialogField m_nameField;
+	protected StringButtonDialogField m_classField;
+	protected StringAreaDialogField m_descriptionField;
+	protected BooleanDialogField m_visibleField;
 
-  @Override
-  protected void createControls(Composite container) {
-    m_fieldsContainer = container;
-    GridLayoutFactory.create(container).columns(3);
-    // id
-    {
-      m_idField = new StringDialogField();
-      m_idField.setEditable(false);
-      doCreateField(m_idField, Messages.ComponentAbstractDialog_idLabel);
-    }
-    // name
-    {
-      m_nameField = new StringDialogField();
-      doCreateField(m_nameField, Messages.ComponentAbstractDialog_nameLabel);
-      m_nameField.setFocus();
-    }
-    // class
-    {
-      m_classField = new StringButtonDialogField(new IStringButtonAdapter() {
-        @Override
-        public void changeControlPressed(DialogField field) {
-          try {
-            String componentClassName =
-                JdtUiUtils.selectTypeName(getShell(), m_editor.getJavaProject());
-            if (componentClassName != null) {
-              m_classField.setText(componentClassName);
-              prepareComponentDescription();
-              m_nameField.setText(CodeUtils.getShortClass(componentClassName));
-              if (m_componentDescription != null) {
-                m_descriptionField.setText(m_componentDescription.getDescription());
-              } else {
-                m_descriptionField.setText(componentClassName);
-              }
-            }
-          } catch (Throwable e) {
-            DesignerPlugin.log(e);
-          }
-        }
-      });
-      m_classField.setButtonLabel(Messages.ComponentAbstractDialog_classButton);
-      doCreateField(m_classField, Messages.ComponentAbstractDialog_classLabel);
-      m_classField.getTextControl(null).setEditable(false);
-    }
-    // description
-    {
-      m_descriptionField = new StringAreaDialogField(5);
-      doCreateField(m_descriptionField, Messages.ComponentAbstractDialog_descriptionLabel);
-      GridDataFactory.modify(m_descriptionField.getTextControl(null)).grabV();
-    }
-    // state
-    {
-      m_visibleField = new BooleanDialogField();
-      doCreateField(m_visibleField, Messages.ComponentAbstractDialog_visibleFlag);
-    }
-  }
+	@Override
+	protected void createControls(Composite container) {
+		m_fieldsContainer = container;
+		GridLayoutFactory.create(container).columns(3);
+		// id
+		{
+			m_idField = new StringDialogField();
+			m_idField.setEditable(false);
+			doCreateField(m_idField, Messages.ComponentAbstractDialog_idLabel);
+		}
+		// name
+		{
+			m_nameField = new StringDialogField();
+			doCreateField(m_nameField, Messages.ComponentAbstractDialog_nameLabel);
+			m_nameField.setFocus();
+		}
+		// class
+		{
+			m_classField = new StringButtonDialogField(new IStringButtonAdapter() {
+				@Override
+				public void changeControlPressed(DialogField field) {
+					try {
+						String componentClassName =
+								JdtUiUtils.selectTypeName(getShell(), m_editor.getJavaProject());
+						if (componentClassName != null) {
+							m_classField.setText(componentClassName);
+							prepareComponentDescription();
+							m_nameField.setText(CodeUtils.getShortClass(componentClassName));
+							if (m_componentDescription != null) {
+								m_descriptionField.setText(m_componentDescription.getDescription());
+							} else {
+								m_descriptionField.setText(componentClassName);
+							}
+						}
+					} catch (Throwable e) {
+						DesignerPlugin.log(e);
+					}
+				}
+			});
+			m_classField.setButtonLabel(Messages.ComponentAbstractDialog_classButton);
+			doCreateField(m_classField, Messages.ComponentAbstractDialog_classLabel);
+			m_classField.getTextControl(null).setEditable(false);
+		}
+		// description
+		{
+			m_descriptionField = new StringAreaDialogField(5);
+			doCreateField(m_descriptionField, Messages.ComponentAbstractDialog_descriptionLabel);
+			GridDataFactory.modify(m_descriptionField.getTextControl(null)).grabV();
+		}
+		// state
+		{
+			m_visibleField = new BooleanDialogField();
+			doCreateField(m_visibleField, Messages.ComponentAbstractDialog_visibleFlag);
+		}
+	}
 
-  @Override
-  protected void okPressed() {
-    prepareComponentDescription();
-    super.okPressed();
-  }
+	@Override
+	protected void okPressed() {
+		prepareComponentDescription();
+		super.okPressed();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Validation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected final String validate() {
-    // validate class
-    {
-      String className = m_classField.getText().trim();
-      if (className.length() == 0) {
-        return Messages.ComponentAbstractDialog_validateEmptyClass;
-      }
-      // check for existence
-      try {
-        EditorState state = EditorState.get(m_editor);
-        state.getEditorLoader().loadClass(className);
-      } catch (Throwable e) {
-        return e.getClass().getName() + ": " + e.getMessage();
-      }
-    }
-    // validate name
-    {
-      String name = m_nameField.getText().trim();
-      if (name.length() == 0) {
-        return Messages.ComponentAbstractDialog_validateEmptyName;
-      }
-    }
-    // OK
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Validation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected final String validate() {
+		// validate class
+		{
+			String className = m_classField.getText().trim();
+			if (className.length() == 0) {
+				return Messages.ComponentAbstractDialog_validateEmptyClass;
+			}
+			// check for existence
+			try {
+				EditorState state = EditorState.get(m_editor);
+				state.getEditorLoader().loadClass(className);
+			} catch (Throwable e) {
+				return e.getClass().getName() + ": " + e.getMessage();
+			}
+		}
+		// validate name
+		{
+			String name = m_nameField.getText().trim();
+			if (name.length() == 0) {
+				return Messages.ComponentAbstractDialog_validateEmptyName;
+			}
+		}
+		// OK
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Composite m_fieldsContainer;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Composite m_fieldsContainer;
 
-  /**
-   * Configures given {@link DialogField} for specific of this dialog.
-   */
-  protected final void doCreateField(DialogField dialogField, String labelText) {
-    dialogField.setLabelText(labelText);
-    dialogField.setDialogFieldListener(m_validateListener);
-    DialogFieldUtils.fillControls(m_fieldsContainer, dialogField, 3, 60);
-  }
+	/**
+	 * Configures given {@link DialogField} for specific of this dialog.
+	 */
+	protected final void doCreateField(DialogField dialogField, String labelText) {
+		dialogField.setLabelText(labelText);
+		dialogField.setDialogFieldListener(m_validateListener);
+		DialogFieldUtils.fillControls(m_fieldsContainer, dialogField, 3, 60);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ComponentDescription utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Tries to load {@link ComponentDescription}, may be set <code>null</code>.
-   */
-  private void prepareComponentDescription() {
-    m_componentDescription = null;
-    try {
-      String componentClassName = m_classField.getText();
-      m_componentDescription =
-          ComponentDescriptionHelper.getDescription(m_editor, componentClassName);
-    } catch (Throwable e) {
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ComponentDescription utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Tries to load {@link ComponentDescription}, may be set <code>null</code>.
+	 */
+	private void prepareComponentDescription() {
+		m_componentDescription = null;
+		try {
+			String componentClassName = m_classField.getText();
+			m_componentDescription =
+					ComponentDescriptionHelper.getDescription(m_editor, componentClassName);
+		} catch (Throwable e) {
+		}
+	}
 
-  /**
-   * @return the description text to use in command, may be <code>null</code> if entered text is
-   *         default, so description from metadata should be used.
-   */
-  protected String getDescriptionText() {
-    String text = m_descriptionField.getText();
-    boolean isEmpty = StringUtils.isEmpty(text);
-    boolean isClassName = m_classField.getText().equals(text);
-    boolean isSameAsMetadata =
-        m_componentDescription != null && text.equals(m_componentDescription.getDescription());
-    if (isEmpty || isClassName || isSameAsMetadata) {
-      text = null;
-    }
-    return text;
-  }
+	/**
+	 * @return the description text to use in command, may be <code>null</code> if entered text is
+	 *         default, so description from metadata should be used.
+	 */
+	protected String getDescriptionText() {
+		String text = m_descriptionField.getText();
+		boolean isEmpty = StringUtils.isEmpty(text);
+		boolean isClassName = m_classField.getText().equals(text);
+		boolean isSameAsMetadata =
+				m_componentDescription != null && text.equals(m_componentDescription.getDescription());
+		if (isEmpty || isClassName || isSameAsMetadata) {
+			text = null;
+		}
+		return text;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/dialogs/ComponentAddDialog.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/dialogs/ComponentAddDialog.java
index 9db85e054..ed644e86a 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/dialogs/ComponentAddDialog.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/dialogs/ComponentAddDialog.java
@@ -29,57 +29,57 @@
  * @coverage core.editor.palette.ui
  */
 public final class ComponentAddDialog extends ComponentAbstractDialog {
-  private final PaletteInfo m_palette;
-  private final CategoryInfo m_initialCategory;
+	private final PaletteInfo m_palette;
+	private final CategoryInfo m_initialCategory;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ComponentAddDialog(Shell parentShell,
-      AstEditor editor,
-      PaletteInfo palette,
-      CategoryInfo initialCategory) {
-    super(parentShell,
-        editor,
-        Messages.ComponentAddDialog_title,
-        Messages.ComponentAddDialog_message);
-    m_palette = palette;
-    m_initialCategory = initialCategory;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ComponentAddDialog(Shell parentShell,
+			AstEditor editor,
+			PaletteInfo palette,
+			CategoryInfo initialCategory) {
+		super(parentShell,
+				editor,
+				Messages.ComponentAddDialog_title,
+				Messages.ComponentAddDialog_message);
+		m_palette = palette;
+		m_initialCategory = initialCategory;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private ComboDialogField m_categoryField;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private ComboDialogField m_categoryField;
 
-  @Override
-  protected void createControls(Composite container) {
-    super.createControls(container);
-    m_visibleField.setSelection(true);
-    // category
-    {
-      m_categoryField = createCategoryField(m_palette, m_initialCategory);
-      doCreateField(m_categoryField, Messages.ComponentAddDialog_category);
-    }
-  }
+	@Override
+	protected void createControls(Composite container) {
+		super.createControls(container);
+		m_visibleField.setSelection(true);
+		// category
+		{
+			m_categoryField = createCategoryField(m_palette, m_initialCategory);
+			doCreateField(m_categoryField, Messages.ComponentAddDialog_category);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Command
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Command createCommand() {
-    String id = "custom_" + System.currentTimeMillis();
-    String name = m_nameField.getText().trim();
-    String description = getDescriptionText();
-    boolean hidden = m_visibleField.getSelection();
-    String className = m_classField.getText();
-    CategoryInfo category = m_palette.getCategories().get(m_categoryField.getSelectionIndex());
-    return new ComponentAddCommand(id, name, description, hidden, className, category);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Command
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Command createCommand() {
+		String id = "custom_" + System.currentTimeMillis();
+		String name = m_nameField.getText().trim();
+		String description = getDescriptionText();
+		boolean hidden = m_visibleField.getSelection();
+		String className = m_classField.getText();
+		CategoryInfo category = m_palette.getCategories().get(m_categoryField.getSelectionIndex());
+		return new ComponentAddCommand(id, name, description, hidden, className, category);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/dialogs/ComponentEditDialog.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/dialogs/ComponentEditDialog.java
index f1f52e324..f7ac7208b 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/dialogs/ComponentEditDialog.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/dialogs/ComponentEditDialog.java
@@ -26,47 +26,47 @@
  * @coverage core.editor.palette.ui
  */
 public final class ComponentEditDialog extends ComponentAbstractDialog {
-  private final ComponentEntryInfo m_component;
+	private final ComponentEntryInfo m_component;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ComponentEditDialog(Shell parentShell, AstEditor editor, ComponentEntryInfo component) {
-    super(parentShell,
-        editor,
-        Messages.ComponentEditDialog_title,
-        Messages.ComponentEditDialog_message);
-    m_component = component;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ComponentEditDialog(Shell parentShell, AstEditor editor, ComponentEntryInfo component) {
+		super(parentShell,
+				editor,
+				Messages.ComponentEditDialog_title,
+				Messages.ComponentEditDialog_message);
+		m_component = component;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createControls(Composite container) {
-    super.createControls(container);
-    m_idField.setText(m_component.getId());
-    m_nameField.setText(m_component.getName());
-    m_classField.setText(m_component.getClassName());
-    m_descriptionField.setText(m_component.getDescription());
-    m_visibleField.setSelection(m_component.isVisible());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createControls(Composite container) {
+		super.createControls(container);
+		m_idField.setText(m_component.getId());
+		m_nameField.setText(m_component.getName());
+		m_classField.setText(m_component.getClassName());
+		m_descriptionField.setText(m_component.getDescription());
+		m_visibleField.setSelection(m_component.isVisible());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Command
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Command createCommand() {
-    String name = m_nameField.getText().trim();
-    String description = getDescriptionText();
-    boolean hidden = m_visibleField.getSelection();
-    String className = m_classField.getText();
-    return new ComponentEditCommand(m_component.getId(), name, description, hidden, className);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Command
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Command createCommand() {
+		String name = m_nameField.getText().trim();
+		String description = getDescriptionText();
+		boolean hidden = m_visibleField.getSelection();
+		String className = m_classField.getText();
+		return new ComponentEditCommand(m_component.getId(), name, description, hidden, className);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/dialogs/ImportArchiveDialog.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/dialogs/ImportArchiveDialog.java
index fd8529149..9382d1a3e 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/dialogs/ImportArchiveDialog.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/dialogs/ImportArchiveDialog.java
@@ -105,742 +105,742 @@
  * @coverage core.editor.palette.ui
  */
 public class ImportArchiveDialog extends AbstractPaletteDialog {
-  private static final int CHECK_ALL_ID = IDialogConstants.CLIENT_ID + 1;
-  private static final int UNCHECK_ALL_ID = IDialogConstants.CLIENT_ID + 2;
-  private static final String JAR_LIST_ID = "HISTORY_JAR_LIST";
-  private static final String JAR_SUFFIX = ".jar";
-  private static final String JAVA_BEAN_KEY = "Java-Bean";
-  private static final String JAVA_BEAN_VALUE = "True";
-  private static final String JAVA_BEAN_CLASS_SUFFIX = ".class";
-  private static final int JAR_COMBO_SIZE = 10;
-  //
-  private final PaletteInfo m_palette;
-  private final CategoryInfo m_initialCategory;
-  //
-  private Object m_initSelection;
-  private Object[] m_initExpanded;
-  //
-  private Combo m_fileArchiveCombo;
-  private CheckboxTableViewer m_classesViewer;
-  private Button m_ignoreManifestButton;
-  private ToolItem m_browseItem;
-  private Menu m_browseMenu;
-  private Label m_categoryLabel;
-  private Combo m_categoryCombo;
-  private Text m_categoryText;
-  private Button m_checkButton;
-  private Button m_uncheckButton;
-  //
-  private String m_jarPath;
-  private List<PaletteElementInfo> m_elements = Collections.emptyList();
-  private List<Command> m_commands = Collections.emptyList();
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ImportArchiveDialog(Shell parentShell, PaletteInfo palette, CategoryInfo initialCategory) {
-    super(parentShell,
-        Messages.ImportArchiveDialog_shellTitle,
-        Messages.ImportArchiveDialog_title,
-        null,
-        Messages.ImportArchiveDialog_message);
-    setShellStyle(SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL | SWT.RESIZE);
-    // initial state
-    m_palette = palette;
-    m_initialCategory = initialCategory;
-    //
-    m_initSelection = EditorState.getActiveJavaInfo().getEditor().getJavaProject().getProject();
-    m_initExpanded = new Object[]{m_initSelection};
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void configureShell(Shell newShell) {
-    super.configureShell(newShell);
-    newShell.addControlListener(new ControlAdapter() {
-      private boolean m_handle;
-
-      @Override
-      public void controlResized(ControlEvent e) {
-        if (m_handle) {
-          Table table = m_classesViewer.getTable();
-          Rectangle clientArea = getShell().getClientArea();
-          if (clientArea.width > 50) {
-            TableColumn[] columns = table.getColumns();
-            columns[0].setWidth(clientArea.width - 30);
-          }
-        }
-        m_handle = true;
-      }
-    });
-  }
-
-  @Override
-  protected void createControls(Composite container) {
-    GridLayoutFactory.create(container).columns(3);
-    // title
-    new Label(container, SWT.NONE).setText(Messages.ImportArchiveDialog_archiveLabel);
-    // jar combo
-    m_fileArchiveCombo = new Combo(container, SWT.READ_ONLY);
-    GridDataFactory.create(m_fileArchiveCombo).fillH().grabH();
-    UiUtils.setVisibleItemCount(m_fileArchiveCombo, JAR_COMBO_SIZE);
-    // load history
-    IDialogSettings settings = getDialogSettings();
-    String[] jarHistory = settings.getArray(JAR_LIST_ID);
-    if (jarHistory != null) {
-      m_fileArchiveCombo.setItems(jarHistory);
-    }
-    //
-    m_fileArchiveCombo.addSelectionListener(new SelectionAdapter() {
-      @Override
-      public void widgetSelected(SelectionEvent e) {
-        chooseFromText(m_fileArchiveCombo.getText());
-      }
-    });
-    // choose buttons
-    ToolBar browseToolBar = new ToolBar(container, SWT.FLAT | SWT.RIGHT);
-    // choose menu
-    m_browseItem = new ToolItem(browseToolBar, SWT.DROP_DOWN);
-    m_browseItem.setToolTipText(Messages.ImportArchiveDialog_browseToolTip);
-    m_browseItem.setImage(DesignerPlugin.getImage("palette/category.gif"));
-    //
-    m_browseMenu = new Menu(browseToolBar);
-    // Classpath
-    MenuItem classpathItem = new MenuItem(m_browseMenu, SWT.NONE);
-    classpathItem.setText(Messages.ImportArchiveDialog_classpathItem);
-    classpathItem.addSelectionListener(new SelectionAdapter() {
-      @Override
-      public void widgetSelected(SelectionEvent e) {
-        chooseFromClasspath();
-      }
-    });
-    // Workspace
-    MenuItem workspaceItem = new MenuItem(m_browseMenu, SWT.NONE);
-    workspaceItem.setText(Messages.ImportArchiveDialog_workspaceItem);
-    workspaceItem.addSelectionListener(new SelectionAdapter() {
-      @Override
-      public void widgetSelected(SelectionEvent e) {
-        chooseFromWorkspace();
-      }
-    });
-    // FileSystem
-    MenuItem filesystemItem = new MenuItem(m_browseMenu, SWT.NONE);
-    filesystemItem.setText(Messages.ImportArchiveDialog_fileSystemItem);
-    filesystemItem.addSelectionListener(new SelectionAdapter() {
-      @Override
-      public void widgetSelected(SelectionEvent e) {
-        chooseFromFilesystem();
-      }
-    });
-    //
-    m_browseItem.addSelectionListener(new SelectionAdapter() {
-      @Override
-      public void widgetSelected(SelectionEvent e) {
-        // prepare menu bounds
-        Rectangle bounds = m_browseItem.getBounds();
-        Point location =
-            m_browseItem.getParent().toDisplay(new Point(bounds.x, bounds.y + bounds.height));
-        m_browseMenu.setLocation(location.x, location.y);
-        // show context menu
-        m_browseMenu.setVisible(true);
-      }
-    });
-    // manifest button
-    m_ignoreManifestButton = new Button(container, SWT.CHECK);
-    GridDataFactory.create(m_ignoreManifestButton).spanH(3);
-    m_ignoreManifestButton.setText(Messages.ImportArchiveDialog_ignoreManifestFlag);
-    // classes viewer
-    m_classesViewer = CheckboxTableViewer.newCheckList(container, SWT.BORDER | SWT.FULL_SELECTION);
-    GridDataFactory.create(m_classesViewer.getControl()).fill().grab().spanH(3).hint(300, 150);
-    TableFactory.modify(m_classesViewer).headerVisible(true).linesVisible(true);
-    TableFactory.modify(m_classesViewer).newColumn().text(
-        Messages.ImportArchiveDialog_classesColumn).width(getInitialSize().x - 30);
-    m_classesViewer.setContentProvider(new ArrayContentProvider());
-    m_classesViewer.setLabelProvider(new LabelProvider());
-    m_classesViewer.addCheckStateListener(new ICheckStateListener() {
-      @Override
-      public void checkStateChanged(CheckStateChangedEvent event) {
-        calculateFinish();
-      }
-    });
-    // category title
-    m_categoryLabel = new Label(container, SWT.NONE);
-    m_categoryLabel.setText(Messages.ImportArchiveDialog_categoryLabel);
-    // category combo
-    m_categoryCombo = new Combo(container, SWT.READ_ONLY);
-    GridDataFactory.create(m_categoryCombo).fillH().grabH().spanH(2);
-    UiUtils.setVisibleItemCount(m_categoryCombo, 15);
-    // load categories
-    m_categoryCombo.add(Messages.ImportArchiveDialog_categoryNew);
-    for (CategoryInfo category : m_palette.getCategories()) {
-      m_categoryCombo.add(category.getName());
-    }
-    if (m_initialCategory == null) {
-      m_categoryCombo.select(0);
-    } else {
-      m_categoryCombo.select(m_palette.getCategories().indexOf(m_initialCategory) + 1);
-    }
-    //
-    m_categoryCombo.addSelectionListener(new SelectionAdapter() {
-      @Override
-      public void widgetSelected(SelectionEvent e) {
-        calculateFinish();
-      }
-    });
-    //
-    new Label(container, SWT.NONE);
-    // category name text
-    m_categoryText = new Text(container, SWT.BORDER);
-    GridDataFactory.create(m_categoryText).fillH().grabH().spanH(2);
-    m_categoryText.addModifyListener(new ModifyListener() {
-      @Override
-      public void modifyText(ModifyEvent e) {
-        calculateFinish();
-      }
-    });
-  }
-
-  @Override
-  protected void createButtonsForButtonBar(Composite parent) {
-    m_checkButton =
-        createButton(parent, CHECK_ALL_ID, Messages.ImportArchiveDialog_selectAllButton, false);
-    m_uncheckButton =
-        createButton(parent, UNCHECK_ALL_ID, Messages.ImportArchiveDialog_deselectAllButton, false);
-    super.createButtonsForButtonBar(parent);
-    calculateFinish();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Handle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void calculateFinish() {
-    // unchecked state
-    Object[] checkedElements = m_classesViewer.getCheckedElements();
-    m_uncheckButton.setEnabled(checkedElements.length > 0);
-    // checked state
-    m_checkButton.setEnabled(checkedElements.length < m_elements.size());
-    // category state
-    boolean catalogEnabled = !m_elements.isEmpty();
-    m_categoryLabel.setEnabled(catalogEnabled);
-    m_categoryCombo.setEnabled(catalogEnabled);
-    m_categoryText.setEnabled(catalogEnabled && m_categoryCombo.getSelectionIndex() == 0);
-    //
-    validateAll();
-  }
-
-  @Override
-  protected String validate() throws Exception {
-    // check choose content
-    if (m_elements.isEmpty()) {
-      return Messages.ImportArchiveDialog_validateSelectArchive;
-    }
-    // check selected content
-    Object[] checkedElements = m_classesViewer.getCheckedElements();
-    if (checkedElements.length == 0) {
-      return Messages.ImportArchiveDialog_validateSelectClass;
-    }
-    // check category name
-    String categoryName = m_categoryText.getText();
-    if (m_categoryCombo.getSelectionIndex() == 0 && categoryName.length() == 0) {
-      return Messages.ImportArchiveDialog_validateEmptyCategoryName;
-    }
-    //
-    return null;
-  }
-
-  @Override
-  protected void buttonPressed(int buttonId) {
-    if (buttonId == CHECK_ALL_ID || buttonId == UNCHECK_ALL_ID) {
-      // handle checked
-      m_classesViewer.setAllChecked(buttonId == CHECK_ALL_ID);
-      calculateFinish();
-    } else {
-      // save history
-      IDialogSettings settings = getDialogSettings();
-      settings.put(JAR_LIST_ID, m_fileArchiveCombo.getItems());
-      // handle finish
-      if (buttonId == IDialogConstants.OK_ID) {
-        checkClasspath();
-        createCommands();
-      }
-      super.buttonPressed(buttonId);
-    }
-  }
-
-  private void checkClasspath() {
-    try {
-      IJavaProject javaProject = EditorState.getActiveJavaInfo().getEditor().getJavaProject();
-      // check load classes
-      boolean addToClassPath = false;
-      for (PaletteElementInfo element : m_elements) {
-        if (javaProject.findType(element.className) == null) {
-          addToClassPath = true;
-          break;
-        }
-      }
-      if (addToClassPath) {
-        addToClassPath =
-            MessageDialog.openQuestion(
-                getShell(),
-                Messages.ImportArchiveDialog_JarNotInClasspathTitle,
-                MessageFormat.format(
-                    Messages.ImportArchiveDialog_JarNotInClasspathMessage,
-                    m_jarPath.toString(),
-                    m_jarPath.toString()));
-        if (addToClassPath) {
-          // copy library to project and add to .classpath
-          ProjectUtils.addJar(javaProject, m_jarPath, null);
-        }
-      }
-    } catch (Throwable t) {
-      DesignerPlugin.log(t);
-    }
-  }
-
-  private void createCommands() {
-    m_commands = Lists.newArrayList();
-    // handle category command
-    int categoryIndex = m_categoryCombo.getSelectionIndex();
-    CategoryInfo category = null;
-    if (categoryIndex == 0) {
-      // create new category
-      String name = m_categoryText.getText();
-      String id = name + "_" + Long.toString(System.currentTimeMillis());
-      String description =
-          MessageFormat.format(Messages.ImportArchiveDialog_newCategoryDescription, m_jarPath);
-      m_commands.add(new CategoryAddCommand(id, name, description, true, true, null));
-      category = new CategoryInfo(id);
-    } else {
-      // prepare exist category
-      category = m_palette.getCategories().get(categoryIndex - 1);
-    }
-    // handle components command
-    for (Object checkedElement : m_classesViewer.getCheckedElements()) {
-      PaletteElementInfo element = (PaletteElementInfo) checkedElement;
-      String description =
-          MessageFormat.format(
-              Messages.ImportArchiveDialog_newComponentDescription,
-              element.className);
-      m_commands.add(new ComponentAddCommand(element.className
-          + "_"
-          + Long.toString(System.currentTimeMillis()),
-          element.name,
-          description,
-          true,
-          element.className,
-          category));
-    }
-  }
-
-  private void chooseFromClasspath() {
-    try {
-      //prepare classpath projects
-      HashSet<IProject> includeObjects = Sets.newHashSet();
-      IWorkspaceRoot workspaceRoot = ResourcesPlugin.getWorkspace().getRoot();
-      IJavaProject javaProject = EditorState.getActiveJavaInfo().getEditor().getJavaProject();
-      includeObjects.add(javaProject.getProject());
-      for (String project : javaProject.getRequiredProjectNames()) {
-        includeObjects.add(workspaceRoot.getProject(project));
-      }
-      // open dialog
-      chooseFromWorkspace(
-          Messages.ImportArchiveDialog_classpathJarSelection,
-          new JarFileFilter(includeObjects));
-    } catch (Throwable e) {
-      DesignerPlugin.log(e);
-    }
-  }
-
-  private void chooseFromWorkspace() {
-    chooseFromWorkspace(Messages.ImportArchiveDialog_workspaceJarSelection, new JarFileFilter());
-  }
-
-  private void chooseFromWorkspace(String title, JarFileFilter filter) {
-    // prepare dialog
-    JarSelectionDialog dialog =
-        new JarSelectionDialog(getShell(),
-            new WorkbenchLabelProvider(),
-            new WorkbenchContentProvider());
-    dialog.setTitle(title);
-    dialog.setMessage(Messages.ImportArchiveDialog_choosefromWorkspaceMessage);
-    dialog.addFilter(filter);
-    // sets initial settings
-    if (m_initSelection != null) {
-      dialog.setInitialSelection(m_initSelection);
-    }
-    //
-    dialog.setInitialExpanded(m_initExpanded);
-    dialog.setInput(ResourcesPlugin.getWorkspace());
-    // open dialog
-    dialog.open();
-    // save state
-    m_initSelection = dialog.getSelection();
-    m_initExpanded = dialog.getExpandedElements();
-    // parse result
-    Object[] elements = dialog.getResult();
-    if (elements == null || elements.length == 0) {
-      return;
-    }
-    IFile jarFile = null;
-    for (int i = 0; i < elements.length; i++) {
-      Object element = elements[i];
-      if (filter.select(null, null, element)) {
-        jarFile = (IFile) element;
-        break;
-      }
-    }
-    if (jarFile == null) {
-      return;
-    }
-    // handle archive
-    chooseArchive(jarFile, null);
-  }
-
-  private void chooseFromFilesystem() {
-    // prepare dialog
-    FileDialog dialog = new FileDialog(getShell());
-    dialog.setFilterExtensions(new String[]{"*.jar"});
-    // open dialog
-    String jarPath = dialog.open();
-    // handle archive
-    if (jarPath != null) {
-      chooseFromText(jarPath);
-    }
-  }
-
-  private void chooseFromText(String jarName) {
-    // find file over direct file system name
-    File jarFile = new File(jarName);
-    if (jarFile.exists()) {
-      chooseArchive(null, jarFile);
-    } else {
-      // find file into workspace
-      IResource res = ResourcesPlugin.getWorkspace().getRoot().findMember(jarName);
-      jarFile = new File(res.getLocation().toString());
-      if (jarFile.exists()) {
-        chooseArchive(null, jarFile);
-      }
-    }
-  }
-
-  private void chooseArchive(IFile jarIFile, File jarFile) {
-    try {
-      // prepare path
-      boolean canFile = jarIFile == null;
-      m_jarPath = canFile ? jarFile.getAbsolutePath() : jarIFile.getLocation().toPortableString();
-      // load elements over manifest
-      boolean ignoreManifest = m_ignoreManifestButton.getSelection();
-      m_elements = Collections.emptyList();
-      if (!ignoreManifest) {
-        JarInputStream jarStream =
-            new JarInputStream(canFile ? new FileInputStream(jarFile) : jarIFile.getContents(true));
-        m_elements = extractElementsFromJarByManifest(jarStream);
-        jarStream.close();
-      }
-      // check load all elements
-      if (ignoreManifest || m_elements.isEmpty()) {
-        if (!ignoreManifest) {
-          String message =
-              MessageFormat.format(Messages.ImportArchiveDialog_hasManifestMessage, m_jarPath);
-          ignoreManifest =
-              MessageDialog.openQuestion(
-                  getShell(),
-                  Messages.ImportArchiveDialog_hasManifestTitle,
-                  message);
-        }
-        if (ignoreManifest) {
-          JarInputStream jarStream =
-              new JarInputStream(canFile
-                  ? new FileInputStream(jarFile)
-                  : jarIFile.getContents(true));
-          m_elements = extractElementsFromJarAllClasses(jarStream);
-          jarStream.close();
-        }
-      }
-      // sets elements
-      m_classesViewer.setInput(m_elements.toArray());
-      // handle jar combo
-      int removeIndex = m_fileArchiveCombo.indexOf(m_jarPath);
-      if (removeIndex != -1) {
-        m_fileArchiveCombo.remove(removeIndex);
-      }
-      m_fileArchiveCombo.add(m_jarPath, 0);
-      int archiveCount = m_fileArchiveCombo.getItemCount();
-      if (archiveCount > JAR_COMBO_SIZE) {
-        m_fileArchiveCombo.remove(JAR_COMBO_SIZE, archiveCount - 1);
-      }
-      if (!m_fileArchiveCombo.getText().equals(m_jarPath)) {
-        m_fileArchiveCombo.setText(m_jarPath);
-        m_fileArchiveCombo.setSelection(new Point(0, m_jarPath.length()));
-      }
-      // handle category
-      if (m_elements.isEmpty()) {
-        m_categoryText.setText("");
-      } else {
-        // convert 'foo.jar' to 'foo'
-        String categoryName = canFile ? jarFile.getName() : jarIFile.getName();
-        m_categoryText.setText(categoryName.substring(
-            0,
-            categoryName.length() - JAR_SUFFIX.length()));
-      }
-    } catch (Throwable t) {
-      m_jarPath = null;
-      m_elements = Collections.emptyList();
-      m_classesViewer.setInput(ArrayUtils.EMPTY_OBJECT_ARRAY);
-      m_categoryText.setText("");
-    } finally {
-      calculateFinish();
-    }
-  }
-
-  private List<PaletteElementInfo> extractElementsFromJarAllClasses(JarInputStream jarStream)
-      throws Exception {
-    // load all classes
-    List<PaletteElementInfo> elements = Lists.newArrayList();
-    try {
-      while (true) {
-        JarEntry jarEntry = jarStream.getNextJarEntry();
-        if (jarEntry == null) {
-          break;
-        }
-        String jarEntryName = jarEntry.getName();
-        if (jarEntryName.endsWith(JAVA_BEAN_CLASS_SUFFIX)) {
-          // convert 'aaa/bbb/ccc.class' to 'aaa.bbb.ccc'
-          PaletteElementInfo element = new PaletteElementInfo();
-          element.className =
-              StringUtils.substringBeforeLast(jarEntryName, JAVA_BEAN_CLASS_SUFFIX).replace(
-                  '/',
-                  '.');
-          element.name = CodeUtils.getShortClass(element.className);
-          elements.add(element);
-        }
-      }
-    } catch (Throwable e) {
-      DesignerPlugin.log(e);
-    }
-    // sort element over class name
-    Collections.sort(elements, new Comparator<PaletteElementInfo>() {
-      @Override
-      public int compare(PaletteElementInfo element0, PaletteElementInfo element1) {
-        return element0.className.compareToIgnoreCase(element1.className);
-      }
-    });
-    return elements;
-  }
-
-  private List<PaletteElementInfo> extractElementsFromJarByManifest(JarInputStream jarStream)
-      throws Exception {
-    List<PaletteElementInfo> elements = Lists.newArrayList();
-    Manifest manifest = jarStream.getManifest();
-    // check manifest, if null find it
-    if (manifest == null) {
-      try {
-        while (true) {
-          JarEntry entry = jarStream.getNextJarEntry();
-          if (entry == null) {
-            break;
-          }
-          if (JarFile.MANIFEST_NAME.equalsIgnoreCase(entry.getName())) {
-            // read manifest data
-            byte[] buffer = IOUtils.toByteArray(jarStream);
-            jarStream.closeEntry();
-            // create manifest
-            manifest = new Manifest(new ByteArrayInputStream(buffer));
-            break;
-          }
-        }
-      } catch (Throwable e) {
-        DesignerPlugin.log(e);
-        manifest = null;
-      }
-    }
-    if (manifest != null) {
-      // extract all "Java-Bean: True" classes
-      for (Iterator<Map.Entry<String, Attributes>> I = manifest.getEntries().entrySet().iterator(); I.hasNext();) {
-        Map.Entry<String, Attributes> mapElement = I.next();
-        Attributes attributes = mapElement.getValue();
-        if (JAVA_BEAN_VALUE.equalsIgnoreCase(attributes.getValue(JAVA_BEAN_KEY))) {
-          String beanClass = mapElement.getKey();
-          if (beanClass == null || beanClass.length() <= JAVA_BEAN_CLASS_SUFFIX.length()) {
-            continue;
-          }
-          // convert 'aaa/bbb/ccc.class' to 'aaa.bbb.ccc'
-          PaletteElementInfo element = new PaletteElementInfo();
-          element.className =
-              StringUtils.substringBeforeLast(beanClass, JAVA_BEAN_CLASS_SUFFIX).replace('/', '.');
-          element.name = CodeUtils.getShortClass(element.className);
-          elements.add(element);
-        }
-      }
-    }
-    return elements;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Command
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public List<Command> getCommands() {
-    return m_commands;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // LabelProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static class LabelProvider extends org.eclipse.jface.viewers.LabelProvider
-      implements
-        ITableLabelProvider {
-    @Override
-    public String getColumnText(Object element, int columnIndex) {
-      PaletteElementInfo paletteElement = (PaletteElementInfo) element;
-      return paletteElement.name;
-    }
-
-    @Override
-    public Image getColumnImage(Object element, int columnIndex) {
-      return null;
-    }
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Dialog for choose workspace JAR.
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static class JarSelectionDialog extends ElementTreeSelectionDialog {
-    private Object[] m_expanded;
-    private Object m_selection;
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public JarSelectionDialog(Shell parent,
-        ILabelProvider labelProvider,
-        ITreeContentProvider contentProvider) {
-      super(parent, labelProvider, contentProvider);
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Access
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public Object[] getExpandedElements() {
-      return m_expanded;
-    }
-
-    public Object getSelection() {
-      return m_selection;
-    }
-
-    public void setInitialExpanded(Object[] initExpanded) {
-      m_expanded = initExpanded;
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // GUI
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    protected TreeViewer createTreeViewer(Composite parent) {
-      TreeViewer viewer = super.createTreeViewer(parent);
-      if (m_expanded != null && m_expanded.length > 0) {
-        viewer.setExpandedElements(m_expanded);
-      }
-      return viewer;
-    }
-
-    @Override
-    protected void buttonPressed(int buttonId) {
-      // save expanded state
-      TreeViewer viewer = getTreeViewer();
-      m_expanded = viewer.getExpandedElements();
-      // save selection state
-      IStructuredSelection selection = (IStructuredSelection) viewer.getSelection();
-      m_selection = selection.getFirstElement();
-      // super
-      super.buttonPressed(buttonId);
-    }
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // @see org.eclipse.pde.internal.ui.editor.build.JARFileFilter
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static class JarFileFilter extends ViewerFilter {
-    private final Collection<?> m_includeObjects;
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructors
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public JarFileFilter() {
-      this(null);
-    }
-
-    public JarFileFilter(Collection<?> includeObjects) {
-      m_includeObjects = includeObjects;
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // ViewerFilter
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public boolean select(Viewer viewer, Object parent, Object element) {
-      // filter files
-      if (element instanceof IFile) {
-        IFile file = (IFile) element;
-        return "jar".equals(file.getProjectRelativePath().getFileExtension());
-      }
-      // filter containers
-      if (element instanceof IContainer) {
-        // check "included" project
-        if (m_includeObjects != null
-            && element instanceof IProject
-            && !m_includeObjects.contains(element)) {
-          return false;
-        }
-        // filter sub folders
-        try {
-          if (!((IContainer) element).isAccessible()) {
-            return false;
-          }
-          IResource[] resources = ((IContainer) element).members();
-          for (int i = 0; i < resources.length; i++) {
-            if (select(viewer, parent, resources[i])) {
-              return true;
-            }
-          }
-        } catch (CoreException e) {
-          DesignerPlugin.log(e);
-        }
-      }
-      return false;
-    }
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Palette
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static class PaletteElementInfo {
-    public String className;
-    public String name;
-  }
+	private static final int CHECK_ALL_ID = IDialogConstants.CLIENT_ID + 1;
+	private static final int UNCHECK_ALL_ID = IDialogConstants.CLIENT_ID + 2;
+	private static final String JAR_LIST_ID = "HISTORY_JAR_LIST";
+	private static final String JAR_SUFFIX = ".jar";
+	private static final String JAVA_BEAN_KEY = "Java-Bean";
+	private static final String JAVA_BEAN_VALUE = "True";
+	private static final String JAVA_BEAN_CLASS_SUFFIX = ".class";
+	private static final int JAR_COMBO_SIZE = 10;
+	//
+	private final PaletteInfo m_palette;
+	private final CategoryInfo m_initialCategory;
+	//
+	private Object m_initSelection;
+	private Object[] m_initExpanded;
+	//
+	private Combo m_fileArchiveCombo;
+	private CheckboxTableViewer m_classesViewer;
+	private Button m_ignoreManifestButton;
+	private ToolItem m_browseItem;
+	private Menu m_browseMenu;
+	private Label m_categoryLabel;
+	private Combo m_categoryCombo;
+	private Text m_categoryText;
+	private Button m_checkButton;
+	private Button m_uncheckButton;
+	//
+	private String m_jarPath;
+	private List<PaletteElementInfo> m_elements = Collections.emptyList();
+	private List<Command> m_commands = Collections.emptyList();
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ImportArchiveDialog(Shell parentShell, PaletteInfo palette, CategoryInfo initialCategory) {
+		super(parentShell,
+				Messages.ImportArchiveDialog_shellTitle,
+				Messages.ImportArchiveDialog_title,
+				null,
+				Messages.ImportArchiveDialog_message);
+		setShellStyle(SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL | SWT.RESIZE);
+		// initial state
+		m_palette = palette;
+		m_initialCategory = initialCategory;
+		//
+		m_initSelection = EditorState.getActiveJavaInfo().getEditor().getJavaProject().getProject();
+		m_initExpanded = new Object[]{m_initSelection};
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void configureShell(Shell newShell) {
+		super.configureShell(newShell);
+		newShell.addControlListener(new ControlAdapter() {
+			private boolean m_handle;
+
+			@Override
+			public void controlResized(ControlEvent e) {
+				if (m_handle) {
+					Table table = m_classesViewer.getTable();
+					Rectangle clientArea = getShell().getClientArea();
+					if (clientArea.width > 50) {
+						TableColumn[] columns = table.getColumns();
+						columns[0].setWidth(clientArea.width - 30);
+					}
+				}
+				m_handle = true;
+			}
+		});
+	}
+
+	@Override
+	protected void createControls(Composite container) {
+		GridLayoutFactory.create(container).columns(3);
+		// title
+		new Label(container, SWT.NONE).setText(Messages.ImportArchiveDialog_archiveLabel);
+		// jar combo
+		m_fileArchiveCombo = new Combo(container, SWT.READ_ONLY);
+		GridDataFactory.create(m_fileArchiveCombo).fillH().grabH();
+		UiUtils.setVisibleItemCount(m_fileArchiveCombo, JAR_COMBO_SIZE);
+		// load history
+		IDialogSettings settings = getDialogSettings();
+		String[] jarHistory = settings.getArray(JAR_LIST_ID);
+		if (jarHistory != null) {
+			m_fileArchiveCombo.setItems(jarHistory);
+		}
+		//
+		m_fileArchiveCombo.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				chooseFromText(m_fileArchiveCombo.getText());
+			}
+		});
+		// choose buttons
+		ToolBar browseToolBar = new ToolBar(container, SWT.FLAT | SWT.RIGHT);
+		// choose menu
+		m_browseItem = new ToolItem(browseToolBar, SWT.DROP_DOWN);
+		m_browseItem.setToolTipText(Messages.ImportArchiveDialog_browseToolTip);
+		m_browseItem.setImage(DesignerPlugin.getImage("palette/category.gif"));
+		//
+		m_browseMenu = new Menu(browseToolBar);
+		// Classpath
+		MenuItem classpathItem = new MenuItem(m_browseMenu, SWT.NONE);
+		classpathItem.setText(Messages.ImportArchiveDialog_classpathItem);
+		classpathItem.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				chooseFromClasspath();
+			}
+		});
+		// Workspace
+		MenuItem workspaceItem = new MenuItem(m_browseMenu, SWT.NONE);
+		workspaceItem.setText(Messages.ImportArchiveDialog_workspaceItem);
+		workspaceItem.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				chooseFromWorkspace();
+			}
+		});
+		// FileSystem
+		MenuItem filesystemItem = new MenuItem(m_browseMenu, SWT.NONE);
+		filesystemItem.setText(Messages.ImportArchiveDialog_fileSystemItem);
+		filesystemItem.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				chooseFromFilesystem();
+			}
+		});
+		//
+		m_browseItem.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				// prepare menu bounds
+				Rectangle bounds = m_browseItem.getBounds();
+				Point location =
+						m_browseItem.getParent().toDisplay(new Point(bounds.x, bounds.y + bounds.height));
+				m_browseMenu.setLocation(location.x, location.y);
+				// show context menu
+				m_browseMenu.setVisible(true);
+			}
+		});
+		// manifest button
+		m_ignoreManifestButton = new Button(container, SWT.CHECK);
+		GridDataFactory.create(m_ignoreManifestButton).spanH(3);
+		m_ignoreManifestButton.setText(Messages.ImportArchiveDialog_ignoreManifestFlag);
+		// classes viewer
+		m_classesViewer = CheckboxTableViewer.newCheckList(container, SWT.BORDER | SWT.FULL_SELECTION);
+		GridDataFactory.create(m_classesViewer.getControl()).fill().grab().spanH(3).hint(300, 150);
+		TableFactory.modify(m_classesViewer).headerVisible(true).linesVisible(true);
+		TableFactory.modify(m_classesViewer).newColumn().text(
+				Messages.ImportArchiveDialog_classesColumn).width(getInitialSize().x - 30);
+		m_classesViewer.setContentProvider(new ArrayContentProvider());
+		m_classesViewer.setLabelProvider(new LabelProvider());
+		m_classesViewer.addCheckStateListener(new ICheckStateListener() {
+			@Override
+			public void checkStateChanged(CheckStateChangedEvent event) {
+				calculateFinish();
+			}
+		});
+		// category title
+		m_categoryLabel = new Label(container, SWT.NONE);
+		m_categoryLabel.setText(Messages.ImportArchiveDialog_categoryLabel);
+		// category combo
+		m_categoryCombo = new Combo(container, SWT.READ_ONLY);
+		GridDataFactory.create(m_categoryCombo).fillH().grabH().spanH(2);
+		UiUtils.setVisibleItemCount(m_categoryCombo, 15);
+		// load categories
+		m_categoryCombo.add(Messages.ImportArchiveDialog_categoryNew);
+		for (CategoryInfo category : m_palette.getCategories()) {
+			m_categoryCombo.add(category.getName());
+		}
+		if (m_initialCategory == null) {
+			m_categoryCombo.select(0);
+		} else {
+			m_categoryCombo.select(m_palette.getCategories().indexOf(m_initialCategory) + 1);
+		}
+		//
+		m_categoryCombo.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				calculateFinish();
+			}
+		});
+		//
+		new Label(container, SWT.NONE);
+		// category name text
+		m_categoryText = new Text(container, SWT.BORDER);
+		GridDataFactory.create(m_categoryText).fillH().grabH().spanH(2);
+		m_categoryText.addModifyListener(new ModifyListener() {
+			@Override
+			public void modifyText(ModifyEvent e) {
+				calculateFinish();
+			}
+		});
+	}
+
+	@Override
+	protected void createButtonsForButtonBar(Composite parent) {
+		m_checkButton =
+				createButton(parent, CHECK_ALL_ID, Messages.ImportArchiveDialog_selectAllButton, false);
+		m_uncheckButton =
+				createButton(parent, UNCHECK_ALL_ID, Messages.ImportArchiveDialog_deselectAllButton, false);
+		super.createButtonsForButtonBar(parent);
+		calculateFinish();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Handle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void calculateFinish() {
+		// unchecked state
+		Object[] checkedElements = m_classesViewer.getCheckedElements();
+		m_uncheckButton.setEnabled(checkedElements.length > 0);
+		// checked state
+		m_checkButton.setEnabled(checkedElements.length < m_elements.size());
+		// category state
+		boolean catalogEnabled = !m_elements.isEmpty();
+		m_categoryLabel.setEnabled(catalogEnabled);
+		m_categoryCombo.setEnabled(catalogEnabled);
+		m_categoryText.setEnabled(catalogEnabled && m_categoryCombo.getSelectionIndex() == 0);
+		//
+		validateAll();
+	}
+
+	@Override
+	protected String validate() throws Exception {
+		// check choose content
+		if (m_elements.isEmpty()) {
+			return Messages.ImportArchiveDialog_validateSelectArchive;
+		}
+		// check selected content
+		Object[] checkedElements = m_classesViewer.getCheckedElements();
+		if (checkedElements.length == 0) {
+			return Messages.ImportArchiveDialog_validateSelectClass;
+		}
+		// check category name
+		String categoryName = m_categoryText.getText();
+		if (m_categoryCombo.getSelectionIndex() == 0 && categoryName.length() == 0) {
+			return Messages.ImportArchiveDialog_validateEmptyCategoryName;
+		}
+		//
+		return null;
+	}
+
+	@Override
+	protected void buttonPressed(int buttonId) {
+		if (buttonId == CHECK_ALL_ID || buttonId == UNCHECK_ALL_ID) {
+			// handle checked
+			m_classesViewer.setAllChecked(buttonId == CHECK_ALL_ID);
+			calculateFinish();
+		} else {
+			// save history
+			IDialogSettings settings = getDialogSettings();
+			settings.put(JAR_LIST_ID, m_fileArchiveCombo.getItems());
+			// handle finish
+			if (buttonId == IDialogConstants.OK_ID) {
+				checkClasspath();
+				createCommands();
+			}
+			super.buttonPressed(buttonId);
+		}
+	}
+
+	private void checkClasspath() {
+		try {
+			IJavaProject javaProject = EditorState.getActiveJavaInfo().getEditor().getJavaProject();
+			// check load classes
+			boolean addToClassPath = false;
+			for (PaletteElementInfo element : m_elements) {
+				if (javaProject.findType(element.className) == null) {
+					addToClassPath = true;
+					break;
+				}
+			}
+			if (addToClassPath) {
+				addToClassPath =
+						MessageDialog.openQuestion(
+								getShell(),
+								Messages.ImportArchiveDialog_JarNotInClasspathTitle,
+								MessageFormat.format(
+										Messages.ImportArchiveDialog_JarNotInClasspathMessage,
+										m_jarPath.toString(),
+										m_jarPath.toString()));
+				if (addToClassPath) {
+					// copy library to project and add to .classpath
+					ProjectUtils.addJar(javaProject, m_jarPath, null);
+				}
+			}
+		} catch (Throwable t) {
+			DesignerPlugin.log(t);
+		}
+	}
+
+	private void createCommands() {
+		m_commands = Lists.newArrayList();
+		// handle category command
+		int categoryIndex = m_categoryCombo.getSelectionIndex();
+		CategoryInfo category = null;
+		if (categoryIndex == 0) {
+			// create new category
+			String name = m_categoryText.getText();
+			String id = name + "_" + Long.toString(System.currentTimeMillis());
+			String description =
+					MessageFormat.format(Messages.ImportArchiveDialog_newCategoryDescription, m_jarPath);
+			m_commands.add(new CategoryAddCommand(id, name, description, true, true, null));
+			category = new CategoryInfo(id);
+		} else {
+			// prepare exist category
+			category = m_palette.getCategories().get(categoryIndex - 1);
+		}
+		// handle components command
+		for (Object checkedElement : m_classesViewer.getCheckedElements()) {
+			PaletteElementInfo element = (PaletteElementInfo) checkedElement;
+			String description =
+					MessageFormat.format(
+							Messages.ImportArchiveDialog_newComponentDescription,
+							element.className);
+			m_commands.add(new ComponentAddCommand(element.className
+					+ "_"
+					+ Long.toString(System.currentTimeMillis()),
+					element.name,
+					description,
+					true,
+					element.className,
+					category));
+		}
+	}
+
+	private void chooseFromClasspath() {
+		try {
+			//prepare classpath projects
+			HashSet<IProject> includeObjects = Sets.newHashSet();
+			IWorkspaceRoot workspaceRoot = ResourcesPlugin.getWorkspace().getRoot();
+			IJavaProject javaProject = EditorState.getActiveJavaInfo().getEditor().getJavaProject();
+			includeObjects.add(javaProject.getProject());
+			for (String project : javaProject.getRequiredProjectNames()) {
+				includeObjects.add(workspaceRoot.getProject(project));
+			}
+			// open dialog
+			chooseFromWorkspace(
+					Messages.ImportArchiveDialog_classpathJarSelection,
+					new JarFileFilter(includeObjects));
+		} catch (Throwable e) {
+			DesignerPlugin.log(e);
+		}
+	}
+
+	private void chooseFromWorkspace() {
+		chooseFromWorkspace(Messages.ImportArchiveDialog_workspaceJarSelection, new JarFileFilter());
+	}
+
+	private void chooseFromWorkspace(String title, JarFileFilter filter) {
+		// prepare dialog
+		JarSelectionDialog dialog =
+				new JarSelectionDialog(getShell(),
+						new WorkbenchLabelProvider(),
+						new WorkbenchContentProvider());
+		dialog.setTitle(title);
+		dialog.setMessage(Messages.ImportArchiveDialog_choosefromWorkspaceMessage);
+		dialog.addFilter(filter);
+		// sets initial settings
+		if (m_initSelection != null) {
+			dialog.setInitialSelection(m_initSelection);
+		}
+		//
+		dialog.setInitialExpanded(m_initExpanded);
+		dialog.setInput(ResourcesPlugin.getWorkspace());
+		// open dialog
+		dialog.open();
+		// save state
+		m_initSelection = dialog.getSelection();
+		m_initExpanded = dialog.getExpandedElements();
+		// parse result
+		Object[] elements = dialog.getResult();
+		if (elements == null || elements.length == 0) {
+			return;
+		}
+		IFile jarFile = null;
+		for (int i = 0; i < elements.length; i++) {
+			Object element = elements[i];
+			if (filter.select(null, null, element)) {
+				jarFile = (IFile) element;
+				break;
+			}
+		}
+		if (jarFile == null) {
+			return;
+		}
+		// handle archive
+		chooseArchive(jarFile, null);
+	}
+
+	private void chooseFromFilesystem() {
+		// prepare dialog
+		FileDialog dialog = new FileDialog(getShell());
+		dialog.setFilterExtensions(new String[]{"*.jar"});
+		// open dialog
+		String jarPath = dialog.open();
+		// handle archive
+		if (jarPath != null) {
+			chooseFromText(jarPath);
+		}
+	}
+
+	private void chooseFromText(String jarName) {
+		// find file over direct file system name
+		File jarFile = new File(jarName);
+		if (jarFile.exists()) {
+			chooseArchive(null, jarFile);
+		} else {
+			// find file into workspace
+			IResource res = ResourcesPlugin.getWorkspace().getRoot().findMember(jarName);
+			jarFile = new File(res.getLocation().toString());
+			if (jarFile.exists()) {
+				chooseArchive(null, jarFile);
+			}
+		}
+	}
+
+	private void chooseArchive(IFile jarIFile, File jarFile) {
+		try {
+			// prepare path
+			boolean canFile = jarIFile == null;
+			m_jarPath = canFile ? jarFile.getAbsolutePath() : jarIFile.getLocation().toPortableString();
+			// load elements over manifest
+			boolean ignoreManifest = m_ignoreManifestButton.getSelection();
+			m_elements = Collections.emptyList();
+			if (!ignoreManifest) {
+				JarInputStream jarStream =
+						new JarInputStream(canFile ? new FileInputStream(jarFile) : jarIFile.getContents(true));
+				m_elements = extractElementsFromJarByManifest(jarStream);
+				jarStream.close();
+			}
+			// check load all elements
+			if (ignoreManifest || m_elements.isEmpty()) {
+				if (!ignoreManifest) {
+					String message =
+							MessageFormat.format(Messages.ImportArchiveDialog_hasManifestMessage, m_jarPath);
+					ignoreManifest =
+							MessageDialog.openQuestion(
+									getShell(),
+									Messages.ImportArchiveDialog_hasManifestTitle,
+									message);
+				}
+				if (ignoreManifest) {
+					JarInputStream jarStream =
+							new JarInputStream(canFile
+									? new FileInputStream(jarFile)
+											: jarIFile.getContents(true));
+					m_elements = extractElementsFromJarAllClasses(jarStream);
+					jarStream.close();
+				}
+			}
+			// sets elements
+			m_classesViewer.setInput(m_elements.toArray());
+			// handle jar combo
+			int removeIndex = m_fileArchiveCombo.indexOf(m_jarPath);
+			if (removeIndex != -1) {
+				m_fileArchiveCombo.remove(removeIndex);
+			}
+			m_fileArchiveCombo.add(m_jarPath, 0);
+			int archiveCount = m_fileArchiveCombo.getItemCount();
+			if (archiveCount > JAR_COMBO_SIZE) {
+				m_fileArchiveCombo.remove(JAR_COMBO_SIZE, archiveCount - 1);
+			}
+			if (!m_fileArchiveCombo.getText().equals(m_jarPath)) {
+				m_fileArchiveCombo.setText(m_jarPath);
+				m_fileArchiveCombo.setSelection(new Point(0, m_jarPath.length()));
+			}
+			// handle category
+			if (m_elements.isEmpty()) {
+				m_categoryText.setText("");
+			} else {
+				// convert 'foo.jar' to 'foo'
+				String categoryName = canFile ? jarFile.getName() : jarIFile.getName();
+				m_categoryText.setText(categoryName.substring(
+						0,
+						categoryName.length() - JAR_SUFFIX.length()));
+			}
+		} catch (Throwable t) {
+			m_jarPath = null;
+			m_elements = Collections.emptyList();
+			m_classesViewer.setInput(ArrayUtils.EMPTY_OBJECT_ARRAY);
+			m_categoryText.setText("");
+		} finally {
+			calculateFinish();
+		}
+	}
+
+	private List<PaletteElementInfo> extractElementsFromJarAllClasses(JarInputStream jarStream)
+			throws Exception {
+		// load all classes
+		List<PaletteElementInfo> elements = Lists.newArrayList();
+		try {
+			while (true) {
+				JarEntry jarEntry = jarStream.getNextJarEntry();
+				if (jarEntry == null) {
+					break;
+				}
+				String jarEntryName = jarEntry.getName();
+				if (jarEntryName.endsWith(JAVA_BEAN_CLASS_SUFFIX)) {
+					// convert 'aaa/bbb/ccc.class' to 'aaa.bbb.ccc'
+					PaletteElementInfo element = new PaletteElementInfo();
+					element.className =
+							StringUtils.substringBeforeLast(jarEntryName, JAVA_BEAN_CLASS_SUFFIX).replace(
+									'/',
+									'.');
+					element.name = CodeUtils.getShortClass(element.className);
+					elements.add(element);
+				}
+			}
+		} catch (Throwable e) {
+			DesignerPlugin.log(e);
+		}
+		// sort element over class name
+		Collections.sort(elements, new Comparator<PaletteElementInfo>() {
+			@Override
+			public int compare(PaletteElementInfo element0, PaletteElementInfo element1) {
+				return element0.className.compareToIgnoreCase(element1.className);
+			}
+		});
+		return elements;
+	}
+
+	private List<PaletteElementInfo> extractElementsFromJarByManifest(JarInputStream jarStream)
+			throws Exception {
+		List<PaletteElementInfo> elements = Lists.newArrayList();
+		Manifest manifest = jarStream.getManifest();
+		// check manifest, if null find it
+		if (manifest == null) {
+			try {
+				while (true) {
+					JarEntry entry = jarStream.getNextJarEntry();
+					if (entry == null) {
+						break;
+					}
+					if (JarFile.MANIFEST_NAME.equalsIgnoreCase(entry.getName())) {
+						// read manifest data
+						byte[] buffer = IOUtils.toByteArray(jarStream);
+						jarStream.closeEntry();
+						// create manifest
+						manifest = new Manifest(new ByteArrayInputStream(buffer));
+						break;
+					}
+				}
+			} catch (Throwable e) {
+				DesignerPlugin.log(e);
+				manifest = null;
+			}
+		}
+		if (manifest != null) {
+			// extract all "Java-Bean: True" classes
+			for (Iterator<Map.Entry<String, Attributes>> I = manifest.getEntries().entrySet().iterator(); I.hasNext();) {
+				Map.Entry<String, Attributes> mapElement = I.next();
+				Attributes attributes = mapElement.getValue();
+				if (JAVA_BEAN_VALUE.equalsIgnoreCase(attributes.getValue(JAVA_BEAN_KEY))) {
+					String beanClass = mapElement.getKey();
+					if (beanClass == null || beanClass.length() <= JAVA_BEAN_CLASS_SUFFIX.length()) {
+						continue;
+					}
+					// convert 'aaa/bbb/ccc.class' to 'aaa.bbb.ccc'
+					PaletteElementInfo element = new PaletteElementInfo();
+					element.className =
+							StringUtils.substringBeforeLast(beanClass, JAVA_BEAN_CLASS_SUFFIX).replace('/', '.');
+					element.name = CodeUtils.getShortClass(element.className);
+					elements.add(element);
+				}
+			}
+		}
+		return elements;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Command
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public List<Command> getCommands() {
+		return m_commands;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// LabelProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static class LabelProvider extends org.eclipse.jface.viewers.LabelProvider
+	implements
+	ITableLabelProvider {
+		@Override
+		public String getColumnText(Object element, int columnIndex) {
+			PaletteElementInfo paletteElement = (PaletteElementInfo) element;
+			return paletteElement.name;
+		}
+
+		@Override
+		public Image getColumnImage(Object element, int columnIndex) {
+			return null;
+		}
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Dialog for choose workspace JAR.
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static class JarSelectionDialog extends ElementTreeSelectionDialog {
+		private Object[] m_expanded;
+		private Object m_selection;
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public JarSelectionDialog(Shell parent,
+				ILabelProvider labelProvider,
+				ITreeContentProvider contentProvider) {
+			super(parent, labelProvider, contentProvider);
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Access
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public Object[] getExpandedElements() {
+			return m_expanded;
+		}
+
+		public Object getSelection() {
+			return m_selection;
+		}
+
+		public void setInitialExpanded(Object[] initExpanded) {
+			m_expanded = initExpanded;
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// GUI
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		protected TreeViewer createTreeViewer(Composite parent) {
+			TreeViewer viewer = super.createTreeViewer(parent);
+			if (m_expanded != null && m_expanded.length > 0) {
+				viewer.setExpandedElements(m_expanded);
+			}
+			return viewer;
+		}
+
+		@Override
+		protected void buttonPressed(int buttonId) {
+			// save expanded state
+			TreeViewer viewer = getTreeViewer();
+			m_expanded = viewer.getExpandedElements();
+			// save selection state
+			IStructuredSelection selection = (IStructuredSelection) viewer.getSelection();
+			m_selection = selection.getFirstElement();
+			// super
+			super.buttonPressed(buttonId);
+		}
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// @see org.eclipse.pde.internal.ui.editor.build.JARFileFilter
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static class JarFileFilter extends ViewerFilter {
+		private final Collection<?> m_includeObjects;
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructors
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public JarFileFilter() {
+			this(null);
+		}
+
+		public JarFileFilter(Collection<?> includeObjects) {
+			m_includeObjects = includeObjects;
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// ViewerFilter
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public boolean select(Viewer viewer, Object parent, Object element) {
+			// filter files
+			if (element instanceof IFile) {
+				IFile file = (IFile) element;
+				return "jar".equals(file.getProjectRelativePath().getFileExtension());
+			}
+			// filter containers
+			if (element instanceof IContainer) {
+				// check "included" project
+				if (m_includeObjects != null
+						&& element instanceof IProject
+						&& !m_includeObjects.contains(element)) {
+					return false;
+				}
+				// filter sub folders
+				try {
+					if (!((IContainer) element).isAccessible()) {
+						return false;
+					}
+					IResource[] resources = ((IContainer) element).members();
+					for (int i = 0; i < resources.length; i++) {
+						if (select(viewer, parent, resources[i])) {
+							return true;
+						}
+					}
+				} catch (CoreException e) {
+					DesignerPlugin.log(e);
+				}
+			}
+			return false;
+		}
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Palette
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static class PaletteElementInfo {
+		public String className;
+		public String name;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/dialogs/PaletteManagerDialog.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/dialogs/PaletteManagerDialog.java
index e9dbe808d..5b1e0cc15 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/dialogs/PaletteManagerDialog.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/dialogs/PaletteManagerDialog.java
@@ -94,845 +94,845 @@
  * @coverage core.editor.palette.ui
  */
 public final class PaletteManagerDialog extends ResizableTitleAreaDialog {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Static images
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final Image IMAGE_CLEAR_FILTER =
-      DesignerPlugin.getImage("palette/clear_filter.gif");
-  private static final Image IMAGE_CATEGORY = DesignerPlugin.getImage("palette/category.gif");
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance fields
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final AstEditor m_editor;
-  private final PaletteInfo m_palette;
-  private final Set<EntryInfo> m_goodEntryInfos;
-  private final List<Command> m_commands = Lists.newArrayList();
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public PaletteManagerDialog(AstEditor editor, PaletteInfo palette, Set<EntryInfo> goodEntryInfos) {
-    super(DesignerPlugin.getShell(), DesignerPlugin.getDefault());
-    m_editor = editor;
-    m_palette = palette;
-    m_goodEntryInfos = goodEntryInfos;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private CheckboxTreeViewer m_viewer;
-
-  @Override
-  public void create() {
-    super.create();
-    // configure title area
-    getShell().setText(Messages.PaletteManagerDialog_shellTitle);
-    setTitle(Messages.PaletteManagerDialog_title);
-    setMessage(Messages.PaletteManagerDialog_message);
-  }
-
-  @Override
-  protected final Control createDialogArea(Composite parent) {
-    Composite area = (Composite) super.createDialogArea(parent);
-    //
-    Composite container = new Composite(area, SWT.NONE);
-    GridDataFactory.create(container).grab().fill();
-    createControls(container);
-    //
-    return area;
-  }
-
-  /**
-   * Creates controls on this dialog.
-   */
-  private void createControls(Composite container) {
-    GridLayoutFactory.create(container).columns(2);
-    createFilterComposite(container);
-    new Label(container, SWT.NONE);
-    createViewer(container);
-    createButtonsComposite(container);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI: filter
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final PaletteViewerFilter m_filter = new PaletteViewerFilter();
-  private Text m_filterText;
-  private ToolItem m_filterClearItem;
-
-  /**
-   * Creates {@link Composite} with filter for {@link #m_viewer}.
-   */
-  private void createFilterComposite(Composite container) {
-    Composite filterComposite = new Composite(container, SWT.NONE);
-    GridDataFactory.create(filterComposite).fillH();
-    GridLayoutFactory.create(filterComposite).columns(2).noMargins().noSpacing();
-    {
-      m_filterText = new Text(filterComposite, SWT.BORDER);
-      GridDataFactory.create(m_filterText).grabH().fillH();
-      // listener
-      m_filterText.addListener(SWT.Modify, new Listener() {
-        @Override
-        public void handleEvent(Event event) {
-          refreshFilter();
-        }
-      });
-    }
-    {
-      ToolBar toolBar = new ToolBar(filterComposite, SWT.FLAT);
-      m_filterClearItem = new ToolItem(toolBar, SWT.NONE);
-      m_filterClearItem.setImage(IMAGE_CLEAR_FILTER);
-      m_filterClearItem.setToolTipText(Messages.PaletteManagerDialog_clearItem);
-      m_filterClearItem.setEnabled(false);
-      // listener
-      m_filterClearItem.addListener(SWT.Selection, new Listener() {
-        @Override
-        public void handleEvent(Event event) {
-          m_filterText.setText("");
-        }
-      });
-    }
-  }
-
-  /**
-   * Updates filter and viewer.
-   */
-  private void refreshFilter() {
-    m_viewer.getTree().setRedraw(false);
-    try {
-      String pattern = m_filterText.getText();
-      if (pattern.length() == 0) {
-        m_filterClearItem.setEnabled(false);
-        m_viewer.resetFilters();
-      } else {
-        m_filterClearItem.setEnabled(true);
-        // set updated filter
-        m_filter.setPattern(pattern);
-        m_viewer.resetFilters();
-        m_viewer.addFilter(m_filter);
-        // expand to show entries
-        m_viewer.expandAll();
-      }
-      // do refresh to update visibility state
-      refreshViewer();
-    } finally {
-      m_viewer.getTree().setRedraw(true);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Palette filter
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Implementation of {@link ViewerFilter} for filtering {@link PaletteInfo} elements.
-   */
-  private static class PaletteViewerFilter extends ViewerFilter {
-    private SearchPattern m_pattern;
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Access
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    /**
-     * Sets new pattern to match.
-     */
-    public void setPattern(String pattern) {
-      if (pattern.indexOf('*') == -1) {
-        pattern += '*';
-      }
-      m_pattern = new SearchPattern();
-      m_pattern.setPattern(pattern);
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // ViewerFilter
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public boolean select(Viewer viewer, Object parent, Object element) {
-      if (element instanceof CategoryInfo) {
-        CategoryInfo category = (CategoryInfo) element;
-        for (EntryInfo entry : category.getEntries()) {
-          if (select(viewer, category, entry)) {
-            return true;
-          }
-        }
-      } else if (element instanceof EntryInfo) {
-        EntryInfo entry = (EntryInfo) element;
-        return m_pattern.matches(entry.getName());
-      }
-      return false;
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI: viewer
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final ITreeContentProvider m_contentProvider = new ITreeContentProvider() {
-    @Override
-    public Object[] getElements(Object inputElement) {
-      return getCategoriesWithGoodEntries().toArray();
-    }
-
-    @Override
-    public Object[] getChildren(Object parentElement) {
-      if (parentElement instanceof CategoryInfo) {
-        return ((CategoryInfo) parentElement).getEntries().toArray();
-      }
-      return ArrayUtils.EMPTY_OBJECT_ARRAY;
-    }
-
-    @Override
-    public Object getParent(Object element) {
-      if (element instanceof EntryInfo) {
-        return ((EntryInfo) element).getCategory();
-      }
-      return null;
-    }
-
-    @Override
-    public boolean hasChildren(Object element) {
-      return getChildren(element).length != 0;
-    }
-
-    @Override
-    public void dispose() {
-    }
-
-    @Override
-    public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Utils
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    private List<CategoryInfo> getCategoriesWithGoodEntries() {
-      List<CategoryInfo> goodCategories = Lists.newArrayList();
-      for (CategoryInfo category : m_palette.getCategories()) {
-        if (!category.isOptional() || hasGoodEntries(category)) {
-          goodCategories.add(category);
-        }
-      }
-      return goodCategories;
-    }
-
-    private boolean hasGoodEntries(CategoryInfo category) {
-      List<EntryInfo> entries = category.getEntries();
-      for (EntryInfo entry : entries) {
-        if (m_goodEntryInfos.contains(entry)) {
-          return true;
-        }
-      }
-      return false;
-    }
-  };
-
-  /**
-   * Creates {@link CheckboxTreeViewer} for palette categories/entries.
-   */
-  private void createViewer(Composite parent) {
-    m_viewer = new CheckboxTreeViewer(parent, SWT.BORDER | SWT.MULTI);
-    GridDataFactory.create(m_viewer.getTree()).hintC(60, 20).grab().fill();
-    // providers
-    m_viewer.setContentProvider(m_contentProvider);
-    m_viewer.setLabelProvider(new LabelProvider() {
-      @Override
-      public Image getImage(Object element) {
-        if (element instanceof EntryInfo) {
-          return ((EntryInfo) element).getIcon();
-        }
-        return IMAGE_CATEGORY;
-      }
-
-      @Override
-      public String getText(Object element) {
-        return ((AbstractElementInfo) element).getName();
-      }
-    });
-    // set input
-    m_viewer.setInput(m_palette);
-    refreshViewer();
-    // listeners
-    m_viewer.addCheckStateListener(new ICheckStateListener() {
-      @Override
-      public void checkStateChanged(CheckStateChangedEvent event) {
-        AbstractElementInfo elementInfo = (AbstractElementInfo) event.getElement();
-        commands_add(new ElementVisibilityCommand(elementInfo, event.getChecked()));
-      }
-    });
-    m_viewer.addSelectionChangedListener(new ISelectionChangedListener() {
-      @Override
-      public void selectionChanged(SelectionChangedEvent event) {
-        updateButtons();
-      }
-    });
-    m_viewer.addDoubleClickListener(new IDoubleClickListener() {
-      @Override
-      public void doubleClick(DoubleClickEvent event) {
-        onEdit();
-      }
-    });
-    // DND
-    configureDND();
-  }
-
-  /**
-   * Shows actual state of palette in {@link #m_viewer}.
-   */
-  private void refreshViewer() {
-    m_viewer.refresh();
-    // update "visible"
-    {
-      List<Object> visibleElements = Lists.newArrayList();
-      for (CategoryInfo category : m_palette.getCategories()) {
-        if (category.isVisible()) {
-          visibleElements.add(category);
-        }
-        for (EntryInfo entry : category.getEntries()) {
-          if (entry.isVisible()) {
-            visibleElements.add(entry);
-          }
-        }
-      }
-      // update viewer
-      m_viewer.setCheckedElements(visibleElements.toArray());
-    }
-  }
-
-  /**
-   * @return the {@link List} of selected palette elements.
-   */
-  @SuppressWarnings("unchecked")
-  private List<Object> getSelectedElements() {
-    IStructuredSelection selection = (IStructuredSelection) m_viewer.getSelection();
-    return selection.toList();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI: buttons
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Button m_addEntryButton;
-  private Button m_editButton;
-  private Button m_removeButton;
-  private Button m_moveUpButton;
-  private Button m_moveDownButton;
-
-  /**
-   * Creates {@link Composite} with buttons to modify palette.
-   */
-  private void createButtonsComposite(Composite parent) {
-    Composite buttonsComposite = new Composite(parent, SWT.NONE);
-    GridDataFactory.create(buttonsComposite).grabV().fill();
-    GridLayoutFactory.create(buttonsComposite).noMargins();
-    //
-    createButton(buttonsComposite, Messages.PaletteManagerDialog_addCategoryButton, new Listener() {
-      @Override
-      public void handleEvent(Event event) {
-        onAddCategory();
-      }
-    });
-    m_addEntryButton =
-        createButton(
-            buttonsComposite,
-            Messages.PaletteManagerDialog_addEntryButton,
-            new Listener() {
-              @Override
-              public void handleEvent(Event event) {
-                onAddEntry();
-              }
-            });
-    createButton(buttonsComposite, Messages.PaletteManagerDialog_importJarButton, new Listener() {
-      @Override
-      public void handleEvent(Event event) {
-        onImportJar();
-      }
-    });
-    //
-    createButtonSeparator(buttonsComposite);
-    m_editButton =
-        createButton(buttonsComposite, Messages.PaletteManagerDialog_editButton, new Listener() {
-          @Override
-          public void handleEvent(Event event) {
-            onEdit();
-          }
-        });
-    m_removeButton =
-        createButton(buttonsComposite, Messages.PaletteManagerDialog_removeButton, new Listener() {
-          @Override
-          public void handleEvent(Event event) {
-            onRemove();
-          }
-        });
-    //
-    createButtonSeparator(buttonsComposite);
-    m_moveUpButton =
-        createButton(buttonsComposite, Messages.PaletteManagerDialog_upButton, new Listener() {
-          @Override
-          public void handleEvent(Event event) {
-            onMove(-1);
-          }
-        });
-    m_moveDownButton =
-        createButton(buttonsComposite, Messages.PaletteManagerDialog_downButton, new Listener() {
-          @Override
-          public void handleEvent(Event event) {
-            onMove(+2);
-          }
-        });
-    //
-    createButtonSeparator(buttonsComposite);
-    createButton(buttonsComposite, Messages.PaletteManagerDialog_collapseAllButton, new Listener() {
-      @Override
-      public void handleEvent(Event event) {
-        m_viewer.collapseAll();
-      }
-    });
-    createButton(buttonsComposite, Messages.PaletteManagerDialog_expandAllButton, new Listener() {
-      @Override
-      public void handleEvent(Event event) {
-        m_viewer.expandAll();
-      }
-    });
-    // update buttons first time
-    updateButtons();
-  }
-
-  /**
-   * Creates {@link Button} with given text and {@link SWT#Selection} listener.
-   */
-  private static Button createButton(Composite parent, String text, Listener selectionListener) {
-    Button button = new Button(parent, SWT.NONE);
-    GridDataFactory.create(button).grabH().fillH();
-    button.setText(text);
-    button.addListener(SWT.Selection, selectionListener);
-    return button;
-  }
-
-  /**
-   * Creates separator between buttons on vertical buttons bar.
-   */
-  private static void createButtonSeparator(Composite parent) {
-    Label separator = new Label(parent, SWT.NONE);
-    GridDataFactory.create(separator).hintV(7);
-  }
-
-  /**
-   * Updates buttons according to selection in {@link #m_viewer}.
-   */
-  private void updateButtons() {
-    List<Object> selection = getSelectedElements();
-    m_addEntryButton.setEnabled(!selection.isEmpty());
-    m_editButton.setEnabled(selection.size() == 1);
-    m_removeButton.setEnabled(!selection.isEmpty());
-    // move up/down
-    List<CategoryInfo> categories = m_palette.getCategories();
-    {
-      boolean upEnabled = !selection.isEmpty();
-      boolean downEnabled = !selection.isEmpty();
-      for (Object element : selection) {
-        if (element instanceof CategoryInfo) {
-          upEnabled &= categories.indexOf(element) != 0;
-          downEnabled &= categories.indexOf(element) != categories.size() - 1;
-        } else if (element instanceof EntryInfo) {
-          EntryInfo entry = (EntryInfo) element;
-          List<EntryInfo> entries = entry.getCategory().getEntries();
-          upEnabled &= entries.indexOf(entry) != 0;
-          downEnabled &= entries.indexOf(entry) != entries.size() - 1;
-        }
-      }
-      m_moveUpButton.setEnabled(upEnabled);
-      m_moveDownButton.setEnabled(downEnabled);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds new {@link CategoryInfo}.
-   */
-  private void onAddCategory() {
-    CategoryAddDialog dialog = new CategoryAddDialog(getShell(), m_palette, null);
-    if (dialog.open() == Window.OK) {
-      commands_add(dialog.getCommand());
-      refreshViewer();
-    }
-  }
-
-  /**
-   * Adds new {@link EntryInfo}.
-   */
-  private void onAddEntry() {
-    final CategoryInfo targetCategory;
-    {
-      Object element = getSelectedElements().get(0);
-      if (element instanceof CategoryInfo) {
-        targetCategory = (CategoryInfo) element;
-      } else if (element instanceof EntryInfo) {
-        targetCategory = ((EntryInfo) element).getCategory();
-      } else {
-        return;
-      }
-    }
-    // prepare menu
-    //Menu menu = new Menu(getShell(), SWT.POP_UP);
-    MenuManager menuManager = new MenuManager();
-    // component
-    {
-      IAction action = new Action(Messages.PaletteManagerDialog_addComponentAction) {
-        @Override
-        public void run() {
-          ComponentAddDialog dialog =
-              new ComponentAddDialog(getShell(), m_editor, m_palette, targetCategory);
-          if (dialog.open() == Window.OK) {
-            commands_add(dialog.getCommand());
-            refreshViewer();
-          }
-        }
-      };
-      menuManager.add(action);
-    }
-    // static factory
-    {
-      menuManager.add(new Separator());
-      menuManager.add(onAddEntry_factory(targetCategory, true));
-      menuManager.add(onAddEntry_factories(targetCategory, true));
-    }
-    // instance factory
-    {
-      menuManager.add(new Separator());
-      menuManager.add(onAddEntry_factory(targetCategory, false));
-      menuManager.add(onAddEntry_factories(targetCategory, false));
-    }
-    // open menu
-    {
-      Point location = m_addEntryButton.toDisplay(0, m_addEntryButton.getSize().y);
-      Menu menu = menuManager.createContextMenu(getShell());
-      menu.setLocation(location);
-      menu.setVisible(true);
-    }
-  }
-
-  /**
-   * @return the {@link IAction} for adding single factory method.
-   */
-  private IAction onAddEntry_factory(final CategoryInfo category, final boolean forStatic) {
-    return new Action(Messages.PaletteManagerDialog_addFactorySingle
-        + (forStatic
-            ? Messages.PaletteManagerDialog_addFactorySingleStatic
-            : Messages.PaletteManagerDialog_addFactorySingleInstance)
-        + Messages.PaletteManagerDialog_addFactorySingleFactory) {
-      @Override
-      public void run() {
-        FactoryAddDialog dialog =
-            new FactoryAddDialog(getShell(), m_editor, forStatic, m_palette, category);
-        if (dialog.open() == Window.OK) {
-          commands_add(dialog.getCommand());
-          refreshViewer();
-        }
-      }
-    };
-  }
-
-  /**
-   * @return the {@link IAction} for adding several factory methods.
-   */
-  private IAction onAddEntry_factories(final CategoryInfo category, final boolean forStatic) {
-    return new Action(Messages.PaletteManagerDialog_addFactorySeveral
-        + (forStatic
-            ? Messages.PaletteManagerDialog_addFactorySeveralStatic
-            : Messages.PaletteManagerDialog_addFactorySeveralInstance)
-        + Messages.PaletteManagerDialog_addFactorySeveralFactories) {
-      @Override
-      public void run() {
-        // prepare dialog
-        FactoriesAddDialog dialog =
-            new FactoriesAddDialog(getShell(), m_editor, m_palette, category, forStatic);
-        // open dialog
-        if (dialog.open() == Window.OK) {
-          // add commands
-          for (Command command : dialog.getCommands()) {
-            commands_add(command);
-          }
-          // refresh
-          refreshViewer();
-        }
-      }
-    };
-  }
-
-  /**
-   * Import Jar file to palette.
-   */
-  private void onImportJar() {
-    // prepare selection
-    List<Object> allSelection = getSelectedElements();
-    Object selection = allSelection.isEmpty() ? null : allSelection.get(0);
-    // prepare initial "next category"
-    CategoryInfo nextCategory = null;
-    if (selection instanceof CategoryInfo) {
-      nextCategory = (CategoryInfo) selection;
-    } else if (selection instanceof EntryInfo) {
-      EntryInfo entry = (EntryInfo) selection;
-      nextCategory = entry.getCategory();
-    }
-    // open dialog
-    ImportArchiveDialog dialog = new ImportArchiveDialog(getShell(), m_palette, nextCategory);
-    if (dialog.open() == Window.OK) {
-      for (Command command : dialog.getCommands()) {
-        commands_add(command);
-      }
-      // refresh
-      refreshViewer();
-    }
-  }
-
-  /**
-   * Edits palette element.
-   */
-  private void onEdit() {
-    Object element = getSelectedElements().get(0);
-    if (element instanceof CategoryInfo) {
-      CategoryInfo category = (CategoryInfo) element;
-      CategoryEditDialog dialog = new CategoryEditDialog(getShell(), category);
-      if (dialog.open() == Window.OK) {
-        commands_add(dialog.getCommand());
-        refreshViewer();
-      }
-    } else if (element instanceof ToolEntryInfo) {
-      AbstractPaletteElementDialog dialog = null;
-      // prepare editing dialog
-      if (element instanceof ComponentEntryInfo) {
-        ComponentEntryInfo entryInfo = (ComponentEntryInfo) element;
-        dialog = new ComponentEditDialog(getShell(), m_editor, entryInfo);
-      } else if (element instanceof StaticFactoryEntryInfo) {
-        StaticFactoryEntryInfo entryInfo = (StaticFactoryEntryInfo) element;
-        dialog = new FactoryEditDialog(getShell(), m_editor, true, entryInfo);
-      } else if (element instanceof InstanceFactoryEntryInfo) {
-        InstanceFactoryEntryInfo entryInfo = (InstanceFactoryEntryInfo) element;
-        dialog = new FactoryEditDialog(getShell(), m_editor, false, entryInfo);
-      }
-      // execute dialog
-      if (dialog != null && dialog.open() == Window.OK) {
-        commands_add(dialog.getCommand());
-        refreshViewer();
-      }
-    }
-  }
-
-  /**
-   * Removes palette element.
-   */
-  private void onRemove() {
-    List<Object> selection = getSelectedElements();
-    if (MessageDialog.openConfirm(
-        getShell(),
-        Messages.PaletteManagerDialog_removeTitle,
-        MessageFormat.format(Messages.PaletteManagerDialog_removeMessage, selection.size()))) {
-      for (Object element : selection) {
-        if (element instanceof CategoryInfo) {
-          commands_add(new CategoryRemoveCommand((CategoryInfo) element));
-        } else if (element instanceof EntryInfo) {
-          commands_add(new EntryRemoveCommand((EntryInfo) element));
-        }
-      }
-      refreshViewer();
-    }
-  }
-
-  /**
-   * Moves selected elements up/down.
-   */
-  private void onMove(int delta) {
-    m_viewer.getTree().setRedraw(false);
-    try {
-      for (Object element : getSelectedElements()) {
-        if (element instanceof CategoryInfo) {
-          CategoryInfo category = (CategoryInfo) element;
-          List<CategoryInfo> categories = m_palette.getCategories();
-          int index = categories.indexOf(element);
-          int targetIndex = index + delta;
-          CategoryInfo nextCategory =
-              targetIndex < categories.size() ? (CategoryInfo) categories.get(targetIndex) : null;
-          commands_add(new CategoryMoveCommand(category, nextCategory));
-        } else if (element instanceof EntryInfo) {
-          EntryInfo entry = (EntryInfo) element;
-          CategoryInfo category = entry.getCategory();
-          List<EntryInfo> entries = category.getEntries();
-          int index = entries.indexOf(entry);
-          commands_add(new EntryMoveCommand(entry, category, entries.get(index + delta)));
-        }
-      }
-      refreshViewer();
-      updateButtons();
-    } finally {
-      m_viewer.getTree().setRedraw(true);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // DND
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private List<Object> m_dragElements;
-  private boolean m_dragCategory;
-
-  /**
-   * Configures DND in {@link #m_viewer}.
-   */
-  private void configureDND() {
-    Transfer[] transfers = new Transfer[]{EmptyTransfer.INSTANCE};
-    m_viewer.addDragSupport(DND.DROP_MOVE, transfers, new DragSourceListener() {
-      @Override
-      public void dragStart(DragSourceEvent event) {
-        m_dragElements = getSelectedElements();
-        m_dragCategory = m_dragElements.get(0) instanceof CategoryInfo;
-        // check that we drag only categories or only entries
-        for (Object element : m_dragElements) {
-          if (m_dragCategory != element instanceof CategoryInfo) {
-            event.doit = false;
-          }
-        }
-      }
-
-      @Override
-      public void dragSetData(DragSourceEvent event) {
-      }
-
-      @Override
-      public void dragFinished(DragSourceEvent event) {
-      }
-    });
-    ViewerDropAdapter dropAdapter = new ViewerDropAdapter(m_viewer) {
-      @Override
-      protected int determineLocation(DropTargetEvent event) {
-        if (event.item instanceof Item) {
-          Item item = (Item) event.item;
-          Point coordinates = m_viewer.getControl().toControl(event.x, event.y);
-          Rectangle bounds = getBounds(item);
-          // when drag entry, relation with category can be only ON
-          if (!m_dragCategory && determineTarget(event) instanceof CategoryInfo) {
-            return LOCATION_ON;
-          }
-          // in all other cases, drop before/after
-          return coordinates.y < bounds.y + bounds.height / 2 ? LOCATION_BEFORE : LOCATION_AFTER;
-        }
-        return LOCATION_NONE;
-      }
-
-      @Override
-      public boolean validateDrop(Object target, int operation, TransferData transferType) {
-        // category can be dragged only relative other category
-        if (m_dragCategory) {
-          return target instanceof CategoryInfo;
-        }
-        // all other cases are valid
-        return true;
-      }
-
-      @Override
-      public boolean performDrop(Object data) {
-        Object target = getCurrentTarget();
-        int location = getCurrentLocation();
-        if (m_dragCategory) {
-          Assert.instanceOf(CategoryInfo.class, target);
-          Assert.isTrue(location == LOCATION_BEFORE || location == LOCATION_AFTER);
-          // prepare next category
-          CategoryInfo nextCategory;
-          {
-            List<CategoryInfo> categories = m_palette.getCategories();
-            int index = categories.indexOf(target);
-            if (location == LOCATION_BEFORE) {
-              nextCategory = categories.get(index);
-            } else {
-              nextCategory = GenericsUtils.getNextOrNull(categories, index);
-            }
-          }
-          // add commands
-          for (Object element : m_dragElements) {
-            CategoryInfo category = (CategoryInfo) element;
-            commands_add(new CategoryMoveCommand(category, nextCategory));
-          }
-        } else if (target instanceof CategoryInfo) {
-          Assert.isTrue(location == LOCATION_ON);
-          CategoryInfo targetCategory = (CategoryInfo) target;
-          for (Object element : m_dragElements) {
-            EntryInfo entry = (EntryInfo) element;
-            commands_add(new EntryMoveCommand(entry, targetCategory, null));
-          }
-        } else {
-          EntryInfo targetEntry = (EntryInfo) target;
-          CategoryInfo targetCategory = targetEntry.getCategory();
-          // prepare next entry
-          EntryInfo nextEntry;
-          {
-            List<EntryInfo> entries = targetCategory.getEntries();
-            int index = entries.indexOf(targetEntry);
-            if (location == LOCATION_BEFORE) {
-              nextEntry = entries.get(index);
-            } else {
-              nextEntry = GenericsUtils.getNextOrNull(entries, index);
-            }
-          }
-          // add commands
-          for (Object element : m_dragElements) {
-            EntryInfo entry = (EntryInfo) element;
-            commands_add(new EntryMoveCommand(entry, targetCategory, nextEntry));
-          }
-        }
-        // refresh viewer to show result of applying commands
-        refreshViewer();
-        return true;
-      }
-    };
-    dropAdapter.setScrollExpandEnabled(false);
-    m_viewer.addDropSupport(DND.DROP_MOVE, transfers, dropAdapter);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link List} of {@link Command}'s to edit palette.
-   */
-  public List<Command> getCommands() {
-    return m_commands;
-  }
-
-  /**
-   * Adds given {@link Command} to the list (and executes it).
-   */
-  private void commands_add(Command command) {
-    try {
-      command.execute(m_palette);
-      command.addToCommandList(m_commands);
-    } catch (Throwable e) {
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Static images
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final Image IMAGE_CLEAR_FILTER =
+			DesignerPlugin.getImage("palette/clear_filter.gif");
+	private static final Image IMAGE_CATEGORY = DesignerPlugin.getImage("palette/category.gif");
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance fields
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final AstEditor m_editor;
+	private final PaletteInfo m_palette;
+	private final Set<EntryInfo> m_goodEntryInfos;
+	private final List<Command> m_commands = Lists.newArrayList();
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public PaletteManagerDialog(AstEditor editor, PaletteInfo palette, Set<EntryInfo> goodEntryInfos) {
+		super(DesignerPlugin.getShell(), DesignerPlugin.getDefault());
+		m_editor = editor;
+		m_palette = palette;
+		m_goodEntryInfos = goodEntryInfos;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private CheckboxTreeViewer m_viewer;
+
+	@Override
+	public void create() {
+		super.create();
+		// configure title area
+		getShell().setText(Messages.PaletteManagerDialog_shellTitle);
+		setTitle(Messages.PaletteManagerDialog_title);
+		setMessage(Messages.PaletteManagerDialog_message);
+	}
+
+	@Override
+	protected final Control createDialogArea(Composite parent) {
+		Composite area = (Composite) super.createDialogArea(parent);
+		//
+		Composite container = new Composite(area, SWT.NONE);
+		GridDataFactory.create(container).grab().fill();
+		createControls(container);
+		//
+		return area;
+	}
+
+	/**
+	 * Creates controls on this dialog.
+	 */
+	private void createControls(Composite container) {
+		GridLayoutFactory.create(container).columns(2);
+		createFilterComposite(container);
+		new Label(container, SWT.NONE);
+		createViewer(container);
+		createButtonsComposite(container);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI: filter
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final PaletteViewerFilter m_filter = new PaletteViewerFilter();
+	private Text m_filterText;
+	private ToolItem m_filterClearItem;
+
+	/**
+	 * Creates {@link Composite} with filter for {@link #m_viewer}.
+	 */
+	private void createFilterComposite(Composite container) {
+		Composite filterComposite = new Composite(container, SWT.NONE);
+		GridDataFactory.create(filterComposite).fillH();
+		GridLayoutFactory.create(filterComposite).columns(2).noMargins().noSpacing();
+		{
+			m_filterText = new Text(filterComposite, SWT.BORDER);
+			GridDataFactory.create(m_filterText).grabH().fillH();
+			// listener
+			m_filterText.addListener(SWT.Modify, new Listener() {
+				@Override
+				public void handleEvent(Event event) {
+					refreshFilter();
+				}
+			});
+		}
+		{
+			ToolBar toolBar = new ToolBar(filterComposite, SWT.FLAT);
+			m_filterClearItem = new ToolItem(toolBar, SWT.NONE);
+			m_filterClearItem.setImage(IMAGE_CLEAR_FILTER);
+			m_filterClearItem.setToolTipText(Messages.PaletteManagerDialog_clearItem);
+			m_filterClearItem.setEnabled(false);
+			// listener
+			m_filterClearItem.addListener(SWT.Selection, new Listener() {
+				@Override
+				public void handleEvent(Event event) {
+					m_filterText.setText("");
+				}
+			});
+		}
+	}
+
+	/**
+	 * Updates filter and viewer.
+	 */
+	private void refreshFilter() {
+		m_viewer.getTree().setRedraw(false);
+		try {
+			String pattern = m_filterText.getText();
+			if (pattern.length() == 0) {
+				m_filterClearItem.setEnabled(false);
+				m_viewer.resetFilters();
+			} else {
+				m_filterClearItem.setEnabled(true);
+				// set updated filter
+				m_filter.setPattern(pattern);
+				m_viewer.resetFilters();
+				m_viewer.addFilter(m_filter);
+				// expand to show entries
+				m_viewer.expandAll();
+			}
+			// do refresh to update visibility state
+			refreshViewer();
+		} finally {
+			m_viewer.getTree().setRedraw(true);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Palette filter
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Implementation of {@link ViewerFilter} for filtering {@link PaletteInfo} elements.
+	 */
+	private static class PaletteViewerFilter extends ViewerFilter {
+		private SearchPattern m_pattern;
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Access
+		//
+		////////////////////////////////////////////////////////////////////////////
+		/**
+		 * Sets new pattern to match.
+		 */
+		public void setPattern(String pattern) {
+			if (pattern.indexOf('*') == -1) {
+				pattern += '*';
+			}
+			m_pattern = new SearchPattern();
+			m_pattern.setPattern(pattern);
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// ViewerFilter
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public boolean select(Viewer viewer, Object parent, Object element) {
+			if (element instanceof CategoryInfo) {
+				CategoryInfo category = (CategoryInfo) element;
+				for (EntryInfo entry : category.getEntries()) {
+					if (select(viewer, category, entry)) {
+						return true;
+					}
+				}
+			} else if (element instanceof EntryInfo) {
+				EntryInfo entry = (EntryInfo) element;
+				return m_pattern.matches(entry.getName());
+			}
+			return false;
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI: viewer
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final ITreeContentProvider m_contentProvider = new ITreeContentProvider() {
+		@Override
+		public Object[] getElements(Object inputElement) {
+			return getCategoriesWithGoodEntries().toArray();
+		}
+
+		@Override
+		public Object[] getChildren(Object parentElement) {
+			if (parentElement instanceof CategoryInfo) {
+				return ((CategoryInfo) parentElement).getEntries().toArray();
+			}
+			return ArrayUtils.EMPTY_OBJECT_ARRAY;
+		}
+
+		@Override
+		public Object getParent(Object element) {
+			if (element instanceof EntryInfo) {
+				return ((EntryInfo) element).getCategory();
+			}
+			return null;
+		}
+
+		@Override
+		public boolean hasChildren(Object element) {
+			return getChildren(element).length != 0;
+		}
+
+		@Override
+		public void dispose() {
+		}
+
+		@Override
+		public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Utils
+		//
+		////////////////////////////////////////////////////////////////////////////
+		private List<CategoryInfo> getCategoriesWithGoodEntries() {
+			List<CategoryInfo> goodCategories = Lists.newArrayList();
+			for (CategoryInfo category : m_palette.getCategories()) {
+				if (!category.isOptional() || hasGoodEntries(category)) {
+					goodCategories.add(category);
+				}
+			}
+			return goodCategories;
+		}
+
+		private boolean hasGoodEntries(CategoryInfo category) {
+			List<EntryInfo> entries = category.getEntries();
+			for (EntryInfo entry : entries) {
+				if (m_goodEntryInfos.contains(entry)) {
+					return true;
+				}
+			}
+			return false;
+		}
+	};
+
+	/**
+	 * Creates {@link CheckboxTreeViewer} for palette categories/entries.
+	 */
+	private void createViewer(Composite parent) {
+		m_viewer = new CheckboxTreeViewer(parent, SWT.BORDER | SWT.MULTI);
+		GridDataFactory.create(m_viewer.getTree()).hintC(60, 20).grab().fill();
+		// providers
+		m_viewer.setContentProvider(m_contentProvider);
+		m_viewer.setLabelProvider(new LabelProvider() {
+			@Override
+			public Image getImage(Object element) {
+				if (element instanceof EntryInfo) {
+					return ((EntryInfo) element).getIcon();
+				}
+				return IMAGE_CATEGORY;
+			}
+
+			@Override
+			public String getText(Object element) {
+				return ((AbstractElementInfo) element).getName();
+			}
+		});
+		// set input
+		m_viewer.setInput(m_palette);
+		refreshViewer();
+		// listeners
+		m_viewer.addCheckStateListener(new ICheckStateListener() {
+			@Override
+			public void checkStateChanged(CheckStateChangedEvent event) {
+				AbstractElementInfo elementInfo = (AbstractElementInfo) event.getElement();
+				commands_add(new ElementVisibilityCommand(elementInfo, event.getChecked()));
+			}
+		});
+		m_viewer.addSelectionChangedListener(new ISelectionChangedListener() {
+			@Override
+			public void selectionChanged(SelectionChangedEvent event) {
+				updateButtons();
+			}
+		});
+		m_viewer.addDoubleClickListener(new IDoubleClickListener() {
+			@Override
+			public void doubleClick(DoubleClickEvent event) {
+				onEdit();
+			}
+		});
+		// DND
+		configureDND();
+	}
+
+	/**
+	 * Shows actual state of palette in {@link #m_viewer}.
+	 */
+	private void refreshViewer() {
+		m_viewer.refresh();
+		// update "visible"
+		{
+			List<Object> visibleElements = Lists.newArrayList();
+			for (CategoryInfo category : m_palette.getCategories()) {
+				if (category.isVisible()) {
+					visibleElements.add(category);
+				}
+				for (EntryInfo entry : category.getEntries()) {
+					if (entry.isVisible()) {
+						visibleElements.add(entry);
+					}
+				}
+			}
+			// update viewer
+			m_viewer.setCheckedElements(visibleElements.toArray());
+		}
+	}
+
+	/**
+	 * @return the {@link List} of selected palette elements.
+	 */
+	@SuppressWarnings("unchecked")
+	private List<Object> getSelectedElements() {
+		IStructuredSelection selection = (IStructuredSelection) m_viewer.getSelection();
+		return selection.toList();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI: buttons
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Button m_addEntryButton;
+	private Button m_editButton;
+	private Button m_removeButton;
+	private Button m_moveUpButton;
+	private Button m_moveDownButton;
+
+	/**
+	 * Creates {@link Composite} with buttons to modify palette.
+	 */
+	private void createButtonsComposite(Composite parent) {
+		Composite buttonsComposite = new Composite(parent, SWT.NONE);
+		GridDataFactory.create(buttonsComposite).grabV().fill();
+		GridLayoutFactory.create(buttonsComposite).noMargins();
+		//
+		createButton(buttonsComposite, Messages.PaletteManagerDialog_addCategoryButton, new Listener() {
+			@Override
+			public void handleEvent(Event event) {
+				onAddCategory();
+			}
+		});
+		m_addEntryButton =
+				createButton(
+						buttonsComposite,
+						Messages.PaletteManagerDialog_addEntryButton,
+						new Listener() {
+							@Override
+							public void handleEvent(Event event) {
+								onAddEntry();
+							}
+						});
+		createButton(buttonsComposite, Messages.PaletteManagerDialog_importJarButton, new Listener() {
+			@Override
+			public void handleEvent(Event event) {
+				onImportJar();
+			}
+		});
+		//
+		createButtonSeparator(buttonsComposite);
+		m_editButton =
+				createButton(buttonsComposite, Messages.PaletteManagerDialog_editButton, new Listener() {
+					@Override
+					public void handleEvent(Event event) {
+						onEdit();
+					}
+				});
+		m_removeButton =
+				createButton(buttonsComposite, Messages.PaletteManagerDialog_removeButton, new Listener() {
+					@Override
+					public void handleEvent(Event event) {
+						onRemove();
+					}
+				});
+		//
+		createButtonSeparator(buttonsComposite);
+		m_moveUpButton =
+				createButton(buttonsComposite, Messages.PaletteManagerDialog_upButton, new Listener() {
+					@Override
+					public void handleEvent(Event event) {
+						onMove(-1);
+					}
+				});
+		m_moveDownButton =
+				createButton(buttonsComposite, Messages.PaletteManagerDialog_downButton, new Listener() {
+					@Override
+					public void handleEvent(Event event) {
+						onMove(+2);
+					}
+				});
+		//
+		createButtonSeparator(buttonsComposite);
+		createButton(buttonsComposite, Messages.PaletteManagerDialog_collapseAllButton, new Listener() {
+			@Override
+			public void handleEvent(Event event) {
+				m_viewer.collapseAll();
+			}
+		});
+		createButton(buttonsComposite, Messages.PaletteManagerDialog_expandAllButton, new Listener() {
+			@Override
+			public void handleEvent(Event event) {
+				m_viewer.expandAll();
+			}
+		});
+		// update buttons first time
+		updateButtons();
+	}
+
+	/**
+	 * Creates {@link Button} with given text and {@link SWT#Selection} listener.
+	 */
+	private static Button createButton(Composite parent, String text, Listener selectionListener) {
+		Button button = new Button(parent, SWT.NONE);
+		GridDataFactory.create(button).grabH().fillH();
+		button.setText(text);
+		button.addListener(SWT.Selection, selectionListener);
+		return button;
+	}
+
+	/**
+	 * Creates separator between buttons on vertical buttons bar.
+	 */
+	private static void createButtonSeparator(Composite parent) {
+		Label separator = new Label(parent, SWT.NONE);
+		GridDataFactory.create(separator).hintV(7);
+	}
+
+	/**
+	 * Updates buttons according to selection in {@link #m_viewer}.
+	 */
+	private void updateButtons() {
+		List<Object> selection = getSelectedElements();
+		m_addEntryButton.setEnabled(!selection.isEmpty());
+		m_editButton.setEnabled(selection.size() == 1);
+		m_removeButton.setEnabled(!selection.isEmpty());
+		// move up/down
+		List<CategoryInfo> categories = m_palette.getCategories();
+		{
+			boolean upEnabled = !selection.isEmpty();
+			boolean downEnabled = !selection.isEmpty();
+			for (Object element : selection) {
+				if (element instanceof CategoryInfo) {
+					upEnabled &= categories.indexOf(element) != 0;
+					downEnabled &= categories.indexOf(element) != categories.size() - 1;
+				} else if (element instanceof EntryInfo) {
+					EntryInfo entry = (EntryInfo) element;
+					List<EntryInfo> entries = entry.getCategory().getEntries();
+					upEnabled &= entries.indexOf(entry) != 0;
+					downEnabled &= entries.indexOf(entry) != entries.size() - 1;
+				}
+			}
+			m_moveUpButton.setEnabled(upEnabled);
+			m_moveDownButton.setEnabled(downEnabled);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds new {@link CategoryInfo}.
+	 */
+	private void onAddCategory() {
+		CategoryAddDialog dialog = new CategoryAddDialog(getShell(), m_palette, null);
+		if (dialog.open() == Window.OK) {
+			commands_add(dialog.getCommand());
+			refreshViewer();
+		}
+	}
+
+	/**
+	 * Adds new {@link EntryInfo}.
+	 */
+	private void onAddEntry() {
+		final CategoryInfo targetCategory;
+		{
+			Object element = getSelectedElements().get(0);
+			if (element instanceof CategoryInfo) {
+				targetCategory = (CategoryInfo) element;
+			} else if (element instanceof EntryInfo) {
+				targetCategory = ((EntryInfo) element).getCategory();
+			} else {
+				return;
+			}
+		}
+		// prepare menu
+		//Menu menu = new Menu(getShell(), SWT.POP_UP);
+		MenuManager menuManager = new MenuManager();
+		// component
+		{
+			IAction action = new Action(Messages.PaletteManagerDialog_addComponentAction) {
+				@Override
+				public void run() {
+					ComponentAddDialog dialog =
+							new ComponentAddDialog(getShell(), m_editor, m_palette, targetCategory);
+					if (dialog.open() == Window.OK) {
+						commands_add(dialog.getCommand());
+						refreshViewer();
+					}
+				}
+			};
+			menuManager.add(action);
+		}
+		// static factory
+		{
+			menuManager.add(new Separator());
+			menuManager.add(onAddEntry_factory(targetCategory, true));
+			menuManager.add(onAddEntry_factories(targetCategory, true));
+		}
+		// instance factory
+		{
+			menuManager.add(new Separator());
+			menuManager.add(onAddEntry_factory(targetCategory, false));
+			menuManager.add(onAddEntry_factories(targetCategory, false));
+		}
+		// open menu
+		{
+			Point location = m_addEntryButton.toDisplay(0, m_addEntryButton.getSize().y);
+			Menu menu = menuManager.createContextMenu(getShell());
+			menu.setLocation(location);
+			menu.setVisible(true);
+		}
+	}
+
+	/**
+	 * @return the {@link IAction} for adding single factory method.
+	 */
+	private IAction onAddEntry_factory(final CategoryInfo category, final boolean forStatic) {
+		return new Action(Messages.PaletteManagerDialog_addFactorySingle
+				+ (forStatic
+						? Messages.PaletteManagerDialog_addFactorySingleStatic
+								: Messages.PaletteManagerDialog_addFactorySingleInstance)
+				+ Messages.PaletteManagerDialog_addFactorySingleFactory) {
+			@Override
+			public void run() {
+				FactoryAddDialog dialog =
+						new FactoryAddDialog(getShell(), m_editor, forStatic, m_palette, category);
+				if (dialog.open() == Window.OK) {
+					commands_add(dialog.getCommand());
+					refreshViewer();
+				}
+			}
+		};
+	}
+
+	/**
+	 * @return the {@link IAction} for adding several factory methods.
+	 */
+	private IAction onAddEntry_factories(final CategoryInfo category, final boolean forStatic) {
+		return new Action(Messages.PaletteManagerDialog_addFactorySeveral
+				+ (forStatic
+						? Messages.PaletteManagerDialog_addFactorySeveralStatic
+								: Messages.PaletteManagerDialog_addFactorySeveralInstance)
+				+ Messages.PaletteManagerDialog_addFactorySeveralFactories) {
+			@Override
+			public void run() {
+				// prepare dialog
+				FactoriesAddDialog dialog =
+						new FactoriesAddDialog(getShell(), m_editor, m_palette, category, forStatic);
+				// open dialog
+				if (dialog.open() == Window.OK) {
+					// add commands
+					for (Command command : dialog.getCommands()) {
+						commands_add(command);
+					}
+					// refresh
+					refreshViewer();
+				}
+			}
+		};
+	}
+
+	/**
+	 * Import Jar file to palette.
+	 */
+	private void onImportJar() {
+		// prepare selection
+		List<Object> allSelection = getSelectedElements();
+		Object selection = allSelection.isEmpty() ? null : allSelection.get(0);
+		// prepare initial "next category"
+		CategoryInfo nextCategory = null;
+		if (selection instanceof CategoryInfo) {
+			nextCategory = (CategoryInfo) selection;
+		} else if (selection instanceof EntryInfo) {
+			EntryInfo entry = (EntryInfo) selection;
+			nextCategory = entry.getCategory();
+		}
+		// open dialog
+		ImportArchiveDialog dialog = new ImportArchiveDialog(getShell(), m_palette, nextCategory);
+		if (dialog.open() == Window.OK) {
+			for (Command command : dialog.getCommands()) {
+				commands_add(command);
+			}
+			// refresh
+			refreshViewer();
+		}
+	}
+
+	/**
+	 * Edits palette element.
+	 */
+	private void onEdit() {
+		Object element = getSelectedElements().get(0);
+		if (element instanceof CategoryInfo) {
+			CategoryInfo category = (CategoryInfo) element;
+			CategoryEditDialog dialog = new CategoryEditDialog(getShell(), category);
+			if (dialog.open() == Window.OK) {
+				commands_add(dialog.getCommand());
+				refreshViewer();
+			}
+		} else if (element instanceof ToolEntryInfo) {
+			AbstractPaletteElementDialog dialog = null;
+			// prepare editing dialog
+			if (element instanceof ComponentEntryInfo) {
+				ComponentEntryInfo entryInfo = (ComponentEntryInfo) element;
+				dialog = new ComponentEditDialog(getShell(), m_editor, entryInfo);
+			} else if (element instanceof StaticFactoryEntryInfo) {
+				StaticFactoryEntryInfo entryInfo = (StaticFactoryEntryInfo) element;
+				dialog = new FactoryEditDialog(getShell(), m_editor, true, entryInfo);
+			} else if (element instanceof InstanceFactoryEntryInfo) {
+				InstanceFactoryEntryInfo entryInfo = (InstanceFactoryEntryInfo) element;
+				dialog = new FactoryEditDialog(getShell(), m_editor, false, entryInfo);
+			}
+			// execute dialog
+			if (dialog != null && dialog.open() == Window.OK) {
+				commands_add(dialog.getCommand());
+				refreshViewer();
+			}
+		}
+	}
+
+	/**
+	 * Removes palette element.
+	 */
+	private void onRemove() {
+		List<Object> selection = getSelectedElements();
+		if (MessageDialog.openConfirm(
+				getShell(),
+				Messages.PaletteManagerDialog_removeTitle,
+				MessageFormat.format(Messages.PaletteManagerDialog_removeMessage, selection.size()))) {
+			for (Object element : selection) {
+				if (element instanceof CategoryInfo) {
+					commands_add(new CategoryRemoveCommand((CategoryInfo) element));
+				} else if (element instanceof EntryInfo) {
+					commands_add(new EntryRemoveCommand((EntryInfo) element));
+				}
+			}
+			refreshViewer();
+		}
+	}
+
+	/**
+	 * Moves selected elements up/down.
+	 */
+	private void onMove(int delta) {
+		m_viewer.getTree().setRedraw(false);
+		try {
+			for (Object element : getSelectedElements()) {
+				if (element instanceof CategoryInfo) {
+					CategoryInfo category = (CategoryInfo) element;
+					List<CategoryInfo> categories = m_palette.getCategories();
+					int index = categories.indexOf(element);
+					int targetIndex = index + delta;
+					CategoryInfo nextCategory =
+							targetIndex < categories.size() ? (CategoryInfo) categories.get(targetIndex) : null;
+					commands_add(new CategoryMoveCommand(category, nextCategory));
+				} else if (element instanceof EntryInfo) {
+					EntryInfo entry = (EntryInfo) element;
+					CategoryInfo category = entry.getCategory();
+					List<EntryInfo> entries = category.getEntries();
+					int index = entries.indexOf(entry);
+					commands_add(new EntryMoveCommand(entry, category, entries.get(index + delta)));
+				}
+			}
+			refreshViewer();
+			updateButtons();
+		} finally {
+			m_viewer.getTree().setRedraw(true);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// DND
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private List<Object> m_dragElements;
+	private boolean m_dragCategory;
+
+	/**
+	 * Configures DND in {@link #m_viewer}.
+	 */
+	private void configureDND() {
+		Transfer[] transfers = new Transfer[]{EmptyTransfer.INSTANCE};
+		m_viewer.addDragSupport(DND.DROP_MOVE, transfers, new DragSourceListener() {
+			@Override
+			public void dragStart(DragSourceEvent event) {
+				m_dragElements = getSelectedElements();
+				m_dragCategory = m_dragElements.get(0) instanceof CategoryInfo;
+				// check that we drag only categories or only entries
+				for (Object element : m_dragElements) {
+					if (m_dragCategory != element instanceof CategoryInfo) {
+						event.doit = false;
+					}
+				}
+			}
+
+			@Override
+			public void dragSetData(DragSourceEvent event) {
+			}
+
+			@Override
+			public void dragFinished(DragSourceEvent event) {
+			}
+		});
+		ViewerDropAdapter dropAdapter = new ViewerDropAdapter(m_viewer) {
+			@Override
+			protected int determineLocation(DropTargetEvent event) {
+				if (event.item instanceof Item) {
+					Item item = (Item) event.item;
+					Point coordinates = m_viewer.getControl().toControl(event.x, event.y);
+					Rectangle bounds = getBounds(item);
+					// when drag entry, relation with category can be only ON
+					if (!m_dragCategory && determineTarget(event) instanceof CategoryInfo) {
+						return LOCATION_ON;
+					}
+					// in all other cases, drop before/after
+					return coordinates.y < bounds.y + bounds.height / 2 ? LOCATION_BEFORE : LOCATION_AFTER;
+				}
+				return LOCATION_NONE;
+			}
+
+			@Override
+			public boolean validateDrop(Object target, int operation, TransferData transferType) {
+				// category can be dragged only relative other category
+				if (m_dragCategory) {
+					return target instanceof CategoryInfo;
+				}
+				// all other cases are valid
+				return true;
+			}
+
+			@Override
+			public boolean performDrop(Object data) {
+				Object target = getCurrentTarget();
+				int location = getCurrentLocation();
+				if (m_dragCategory) {
+					Assert.instanceOf(CategoryInfo.class, target);
+					Assert.isTrue(location == LOCATION_BEFORE || location == LOCATION_AFTER);
+					// prepare next category
+					CategoryInfo nextCategory;
+					{
+						List<CategoryInfo> categories = m_palette.getCategories();
+						int index = categories.indexOf(target);
+						if (location == LOCATION_BEFORE) {
+							nextCategory = categories.get(index);
+						} else {
+							nextCategory = GenericsUtils.getNextOrNull(categories, index);
+						}
+					}
+					// add commands
+					for (Object element : m_dragElements) {
+						CategoryInfo category = (CategoryInfo) element;
+						commands_add(new CategoryMoveCommand(category, nextCategory));
+					}
+				} else if (target instanceof CategoryInfo) {
+					Assert.isTrue(location == LOCATION_ON);
+					CategoryInfo targetCategory = (CategoryInfo) target;
+					for (Object element : m_dragElements) {
+						EntryInfo entry = (EntryInfo) element;
+						commands_add(new EntryMoveCommand(entry, targetCategory, null));
+					}
+				} else {
+					EntryInfo targetEntry = (EntryInfo) target;
+					CategoryInfo targetCategory = targetEntry.getCategory();
+					// prepare next entry
+					EntryInfo nextEntry;
+					{
+						List<EntryInfo> entries = targetCategory.getEntries();
+						int index = entries.indexOf(targetEntry);
+						if (location == LOCATION_BEFORE) {
+							nextEntry = entries.get(index);
+						} else {
+							nextEntry = GenericsUtils.getNextOrNull(entries, index);
+						}
+					}
+					// add commands
+					for (Object element : m_dragElements) {
+						EntryInfo entry = (EntryInfo) element;
+						commands_add(new EntryMoveCommand(entry, targetCategory, nextEntry));
+					}
+				}
+				// refresh viewer to show result of applying commands
+				refreshViewer();
+				return true;
+			}
+		};
+		dropAdapter.setScrollExpandEnabled(false);
+		m_viewer.addDropSupport(DND.DROP_MOVE, transfers, dropAdapter);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link List} of {@link Command}'s to edit palette.
+	 */
+	public List<Command> getCommands() {
+		return m_commands;
+	}
+
+	/**
+	 * Adds given {@link Command} to the list (and executes it).
+	 */
+	private void commands_add(Command command) {
+		try {
+			command.execute(m_palette);
+			command.addToCommandList(m_commands);
+		} catch (Throwable e) {
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/dialogs/PalettePreferencesDialog.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/dialogs/PalettePreferencesDialog.java
index 7031cc934..a3b18817c 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/dialogs/PalettePreferencesDialog.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/dialogs/PalettePreferencesDialog.java
@@ -30,109 +30,109 @@
  * @coverage core.editor.palette.ui
  */
 public final class PalettePreferencesDialog extends AbstractPaletteDialog {
-  private final PluginPalettePreferences m_preferences;
+	private final PluginPalettePreferences m_preferences;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public PalettePreferencesDialog(Shell parentShell, PluginPalettePreferences preferences) {
-    super(parentShell,
-        Messages.PalettePreferencesDialog_shellTitle,
-        Messages.PalettePreferencesDialog_title,
-        null,
-        Messages.PalettePreferencesDialog_message);
-    m_preferences = preferences;
-    setShellStyle(SWT.APPLICATION_MODAL | SWT.DIALOG_TRIM);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public PalettePreferencesDialog(Shell parentShell, PluginPalettePreferences preferences) {
+		super(parentShell,
+				Messages.PalettePreferencesDialog_shellTitle,
+				Messages.PalettePreferencesDialog_title,
+				null,
+				Messages.PalettePreferencesDialog_message);
+		m_preferences = preferences;
+		setShellStyle(SWT.APPLICATION_MODAL | SWT.DIALOG_TRIM);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Commits settings from dialog to the preferences.
-   */
-  public void commit() {
-    m_preferences.setMinColumns(1 + m_minColumnsField.getSelection()[0]);
-    m_preferences.setCategoryFont(m_categoryFontField.getFontDataArray());
-    m_preferences.setEntryFont(m_entryFontField.getFontDataArray());
-    m_preferences.setLayoutType(m_layoutDialogField.getSelection()[0]);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Commits settings from dialog to the preferences.
+	 */
+	public void commit() {
+		m_preferences.setMinColumns(1 + m_minColumnsField.getSelection()[0]);
+		m_preferences.setCategoryFont(m_categoryFontField.getFontDataArray());
+		m_preferences.setEntryFont(m_entryFontField.getFontDataArray());
+		m_preferences.setLayoutType(m_layoutDialogField.getSelection()[0]);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private LayoutDialogFieldGroup m_layoutDialogField;
-  private SelectionButtonDialogFieldGroup m_minColumnsField;
-  private FontDialogField m_categoryFontField;
-  private FontDialogField m_entryFontField;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private LayoutDialogFieldGroup m_layoutDialogField;
+	private SelectionButtonDialogFieldGroup m_minColumnsField;
+	private FontDialogField m_categoryFontField;
+	private FontDialogField m_entryFontField;
 
-  @Override
-  protected void createControls(Composite container) {
-    m_fieldsContainer = container;
-    GridLayoutFactory.create(container).columns(2);
-    // layout
-    {
-      m_layoutDialogField = new LayoutDialogFieldGroup(SWT.RADIO,
-          new String[]{
-              Messages.PalettePreferencesDialog_layouts_1,
-              Messages.PalettePreferencesDialog_layouts_2,
-              Messages.PalettePreferencesDialog_layouts_3,
-              Messages.PalettePreferencesDialog_layouts_4},
-          4,
-          SWT.SHADOW_ETCHED_IN);
-      doCreateField(m_layoutDialogField, "layout");
-    }
-    // min columns
-    {
-      m_minColumnsField =
-          new SelectionButtonDialogFieldGroup(SWT.RADIO, new String[]{
-              Messages.PalettePreferencesDialog_columns_1,
-              Messages.PalettePreferencesDialog_columns_2,
-              Messages.PalettePreferencesDialog_columns_3,
-              Messages.PalettePreferencesDialog_columns_4,
-              Messages.PalettePreferencesDialog_columns_5}, 5, SWT.SHADOW_ETCHED_IN);
-      doCreateField(m_minColumnsField, Messages.PalettePreferencesDialog_minColumnsNumber);
-    }
-    // category font
-    {
-      m_categoryFontField = new FontDialogField();
-      doCreateField(m_categoryFontField, Messages.PalettePreferencesDialog_categoryFontLabel);
-      m_categoryFontField.setChooseButtonText(Messages.PalettePreferencesDialog_categoryFontChoose);
-      m_categoryFontField.setDefaultButtonText(Messages.PalettePreferencesDialog_categoryFontSystem);
-    }
-    // entry font
-    {
-      m_entryFontField = new FontDialogField();
-      doCreateField(m_entryFontField, Messages.PalettePreferencesDialog_entryFontLabel);
-      m_entryFontField.setChooseButtonText(Messages.PalettePreferencesDialog_entryFontChoose);
-      m_entryFontField.setDefaultButtonText(Messages.PalettePreferencesDialog_entryFontSystem);
-    }
-    // initialize fields
-    m_minColumnsField.setSelection(new int[]{m_preferences.getMinColumns() - 1});
-    m_categoryFontField.setFontDataArray(m_preferences.getCategoryFontDescriptor().getFontData());
-    m_entryFontField.setFontDataArray(m_preferences.getEntryFontDescriptor().getFontData());
-    m_layoutDialogField.setSelection(new int[]{m_preferences.getLayoutType()});
-  }
+	@Override
+	protected void createControls(Composite container) {
+		m_fieldsContainer = container;
+		GridLayoutFactory.create(container).columns(2);
+		// layout
+		{
+			m_layoutDialogField = new LayoutDialogFieldGroup(SWT.RADIO,
+					new String[]{
+							Messages.PalettePreferencesDialog_layouts_1,
+							Messages.PalettePreferencesDialog_layouts_2,
+							Messages.PalettePreferencesDialog_layouts_3,
+							Messages.PalettePreferencesDialog_layouts_4},
+					4,
+					SWT.SHADOW_ETCHED_IN);
+			doCreateField(m_layoutDialogField, "layout");
+		}
+		// min columns
+		{
+			m_minColumnsField =
+					new SelectionButtonDialogFieldGroup(SWT.RADIO, new String[]{
+							Messages.PalettePreferencesDialog_columns_1,
+							Messages.PalettePreferencesDialog_columns_2,
+							Messages.PalettePreferencesDialog_columns_3,
+							Messages.PalettePreferencesDialog_columns_4,
+							Messages.PalettePreferencesDialog_columns_5}, 5, SWT.SHADOW_ETCHED_IN);
+			doCreateField(m_minColumnsField, Messages.PalettePreferencesDialog_minColumnsNumber);
+		}
+		// category font
+		{
+			m_categoryFontField = new FontDialogField();
+			doCreateField(m_categoryFontField, Messages.PalettePreferencesDialog_categoryFontLabel);
+			m_categoryFontField.setChooseButtonText(Messages.PalettePreferencesDialog_categoryFontChoose);
+			m_categoryFontField.setDefaultButtonText(Messages.PalettePreferencesDialog_categoryFontSystem);
+		}
+		// entry font
+		{
+			m_entryFontField = new FontDialogField();
+			doCreateField(m_entryFontField, Messages.PalettePreferencesDialog_entryFontLabel);
+			m_entryFontField.setChooseButtonText(Messages.PalettePreferencesDialog_entryFontChoose);
+			m_entryFontField.setDefaultButtonText(Messages.PalettePreferencesDialog_entryFontSystem);
+		}
+		// initialize fields
+		m_minColumnsField.setSelection(new int[]{m_preferences.getMinColumns() - 1});
+		m_categoryFontField.setFontDataArray(m_preferences.getCategoryFontDescriptor().getFontData());
+		m_entryFontField.setFontDataArray(m_preferences.getEntryFontDescriptor().getFontData());
+		m_layoutDialogField.setSelection(new int[]{m_preferences.getLayoutType()});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Composite m_fieldsContainer;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Composite m_fieldsContainer;
 
-  /**
-   * Configures given {@link DialogField} for specific of this dialog.
-   */
-  protected final void doCreateField(DialogField dialogField, String labelText) {
-    dialogField.setLabelText(labelText);
-    dialogField.setDialogFieldListener(m_validateListener);
-    DialogFieldUtils.fillControls(m_fieldsContainer, dialogField, 2, 60);
-  }
+	/**
+	 * Configures given {@link DialogField} for specific of this dialog.
+	 */
+	protected final void doCreateField(DialogField dialogField, String labelText) {
+		dialogField.setLabelText(labelText);
+		dialogField.setDialogFieldListener(m_validateListener);
+		DialogFieldUtils.fillControls(m_fieldsContainer, dialogField, 2, 60);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/dialogs/factory/FactoriesAddDialog.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/dialogs/factory/FactoriesAddDialog.java
index 25c643df4..af28eabe8 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/dialogs/factory/FactoriesAddDialog.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/dialogs/factory/FactoriesAddDialog.java
@@ -52,189 +52,189 @@
  * @coverage core.editor.palette.ui
  */
 public final class FactoriesAddDialog extends AbstractPaletteDialog {
-  private final AstEditor m_editor;
-  private final PaletteInfo m_palette;
-  private final CategoryInfo m_initialCategory;
-  private final boolean m_forStatic;
+	private final AstEditor m_editor;
+	private final PaletteInfo m_palette;
+	private final CategoryInfo m_initialCategory;
+	private final boolean m_forStatic;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FactoriesAddDialog(Shell parentShell,
-      AstEditor editor,
-      PaletteInfo palette,
-      CategoryInfo initialCategory,
-      boolean forStatic) {
-    super(parentShell, forStatic
-        ? Messages.FactoriesAddDialog_shellTitleStatic
-        : Messages.FactoriesAddDialog_shellTitleInstance, forStatic
-        ? Messages.FactoriesAddDialog_titleStatic
-        : Messages.FactoriesAddDialog_titleInstance, null, Messages.FactoriesAddDialog_message);
-    m_editor = editor;
-    m_palette = palette;
-    m_initialCategory = initialCategory;
-    m_forStatic = forStatic;
-    setShellStyle(SWT.DIALOG_TRIM | SWT.RESIZE);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FactoriesAddDialog(Shell parentShell,
+			AstEditor editor,
+			PaletteInfo palette,
+			CategoryInfo initialCategory,
+			boolean forStatic) {
+		super(parentShell, forStatic
+				? Messages.FactoriesAddDialog_shellTitleStatic
+						: Messages.FactoriesAddDialog_shellTitleInstance, forStatic
+						? Messages.FactoriesAddDialog_titleStatic
+								: Messages.FactoriesAddDialog_titleInstance, null, Messages.FactoriesAddDialog_message);
+		m_editor = editor;
+		m_palette = palette;
+		m_initialCategory = initialCategory;
+		m_forStatic = forStatic;
+		setShellStyle(SWT.DIALOG_TRIM | SWT.RESIZE);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private StringButtonDialogField m_factoryClassField;
-  private CheckedListDialogField m_signaturesField;
-  private ComboDialogField m_categoryField;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private StringButtonDialogField m_factoryClassField;
+	private CheckedListDialogField m_signaturesField;
+	private ComboDialogField m_categoryField;
 
-  @Override
-  protected void createControls(Composite container) {
-    m_fieldsContainer = container;
-    GridLayoutFactory.create(container).columns(3);
-    // factory class
-    {
-      m_factoryClassField = new StringButtonDialogField(new IStringButtonAdapter() {
-        @Override
-        public void changeControlPressed(DialogField field) {
-          try {
-            String factoryClassName =
-                JdtUiUtils.selectTypeName(getShell(), m_editor.getJavaProject());
-            if (factoryClassName != null) {
-              m_factoryClassField.setText(factoryClassName);
-            }
-          } catch (Throwable e) {
-            DesignerPlugin.log(e);
-          }
-        }
-      });
-      m_factoryClassField.setButtonLabel(Messages.FactoriesAddDialog_classChoose);
-      doCreateField(m_factoryClassField, Messages.FactoriesAddDialog_classLabel);
-      m_factoryClassField.getTextControl(null).setEditable(false);
-    }
-    // method signatures
-    {
-      m_signaturesField =
-          new CheckedListDialogField(new IListAdapter() {
-            @Override
-            public void selectionChanged(ListDialogField field) {
-            }
+	@Override
+	protected void createControls(Composite container) {
+		m_fieldsContainer = container;
+		GridLayoutFactory.create(container).columns(3);
+		// factory class
+		{
+			m_factoryClassField = new StringButtonDialogField(new IStringButtonAdapter() {
+				@Override
+				public void changeControlPressed(DialogField field) {
+					try {
+						String factoryClassName =
+								JdtUiUtils.selectTypeName(getShell(), m_editor.getJavaProject());
+						if (factoryClassName != null) {
+							m_factoryClassField.setText(factoryClassName);
+						}
+					} catch (Throwable e) {
+						DesignerPlugin.log(e);
+					}
+				}
+			});
+			m_factoryClassField.setButtonLabel(Messages.FactoriesAddDialog_classChoose);
+			doCreateField(m_factoryClassField, Messages.FactoriesAddDialog_classLabel);
+			m_factoryClassField.getTextControl(null).setEditable(false);
+		}
+		// method signatures
+		{
+			m_signaturesField =
+					new CheckedListDialogField(new IListAdapter() {
+						@Override
+						public void selectionChanged(ListDialogField field) {
+						}
 
-            @Override
-            public void doubleClicked(ListDialogField field) {
-            }
+						@Override
+						public void doubleClicked(ListDialogField field) {
+						}
 
-            @Override
-            public void customButtonPressed(ListDialogField field, int index) {
-            }
-          }, new String[]{
-              Messages.FactoriesAddDialog_selectAllButton,
-              Messages.FactoriesAddDialog_deselectAllButton}, new LabelProvider());
-      m_signaturesField.setCheckAllButtonIndex(0);
-      m_signaturesField.setUncheckAllButtonIndex(1);
-      doCreateField(m_signaturesField, Messages.FactoriesAddDialog_methodsLabel);
-    }
-    // category
-    {
-      m_categoryField = createCategoryField(m_palette, m_initialCategory);
-      doCreateField(m_categoryField, Messages.FactoriesAddDialog_categoryLabel);
-    }
-  }
+						@Override
+						public void customButtonPressed(ListDialogField field, int index) {
+						}
+					}, new String[]{
+							Messages.FactoriesAddDialog_selectAllButton,
+							Messages.FactoriesAddDialog_deselectAllButton}, new LabelProvider());
+			m_signaturesField.setCheckAllButtonIndex(0);
+			m_signaturesField.setUncheckAllButtonIndex(1);
+			doCreateField(m_signaturesField, Messages.FactoriesAddDialog_methodsLabel);
+		}
+		// category
+		{
+			m_categoryField = createCategoryField(m_palette, m_initialCategory);
+			doCreateField(m_categoryField, Messages.FactoriesAddDialog_categoryLabel);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Validation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private String m_factoryClassName;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Validation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private String m_factoryClassName;
 
-  @Override
-  protected String validate() {
-    // validate class
-    {
-      String factoryClassName = m_factoryClassField.getText().trim();
-      if (factoryClassName.length() == 0) {
-        return Messages.FactoriesAddDialog_validateEmptyClass;
-      }
-      // check for existence
-      if (!factoryClassName.equals(m_factoryClassName)) {
-        m_factoryClassName = factoryClassName;
-        Class<?> factoryClass;
-        try {
-          EditorState state = EditorState.get(m_editor);
-          factoryClass = state.getEditorLoader().loadClass(factoryClassName);
-          // validate signatures
-          {
-            Map<String, FactoryMethodDescription> signaturesMap =
-                FactoryDescriptionHelper.getDescriptionsMap(m_editor, factoryClass, m_forStatic);
-            // set signatures
-            m_signaturesField.setElements(signaturesMap.keySet());
-            // validate
-            if (signaturesMap.isEmpty()) {
-              return MessageFormat.format(
-                  Messages.FactoriesAddDialog_validateNoMethods,
-                  factoryClassName);
-            }
-          }
-        } catch (Throwable e) {
-          return e.getClass().getName() + ": " + e.getMessage();
-        }
-      }
-    }
-    // validate signatures selection
-    if (m_signaturesField.getCheckedElements().isEmpty()) {
-      return Messages.FactoriesAddDialog_validateNoMethodSelection;
-    }
-    // OK
-    return null;
-  }
+	@Override
+	protected String validate() {
+		// validate class
+		{
+			String factoryClassName = m_factoryClassField.getText().trim();
+			if (factoryClassName.length() == 0) {
+				return Messages.FactoriesAddDialog_validateEmptyClass;
+			}
+			// check for existence
+			if (!factoryClassName.equals(m_factoryClassName)) {
+				m_factoryClassName = factoryClassName;
+				Class<?> factoryClass;
+				try {
+					EditorState state = EditorState.get(m_editor);
+					factoryClass = state.getEditorLoader().loadClass(factoryClassName);
+					// validate signatures
+					{
+						Map<String, FactoryMethodDescription> signaturesMap =
+								FactoryDescriptionHelper.getDescriptionsMap(m_editor, factoryClass, m_forStatic);
+						// set signatures
+						m_signaturesField.setElements(signaturesMap.keySet());
+						// validate
+						if (signaturesMap.isEmpty()) {
+							return MessageFormat.format(
+									Messages.FactoriesAddDialog_validateNoMethods,
+									factoryClassName);
+						}
+					}
+				} catch (Throwable e) {
+					return e.getClass().getName() + ": " + e.getMessage();
+				}
+			}
+		}
+		// validate signatures selection
+		if (m_signaturesField.getCheckedElements().isEmpty()) {
+			return Messages.FactoriesAddDialog_validateNoMethodSelection;
+		}
+		// OK
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link Command}'s for adding {@link StaticFactoryEntryInfo}'s.
-   */
-  public List<Command> getCommands() {
-    CategoryInfo category = m_palette.getCategories().get(m_categoryField.getSelectionIndex());
-    //
-    List<?> signatures = m_signaturesField.getCheckedElements();
-    List<Command> commands = Lists.newArrayList();
-    for (int i = 0; i < signatures.size(); i++) {
-      String signature = (String) signatures.get(i);
-      //
-      String id = "custom_" + System.currentTimeMillis() + "_" + i;
-      String name = signature;
-      String description = null;
-      //
-      commands.add(new FactoryAddCommand(id,
-          name,
-          description,
-          true,
-          m_factoryClassName,
-          signature,
-          m_forStatic,
-          category));
-    }
-    //
-    return commands;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link Command}'s for adding {@link StaticFactoryEntryInfo}'s.
+	 */
+	public List<Command> getCommands() {
+		CategoryInfo category = m_palette.getCategories().get(m_categoryField.getSelectionIndex());
+		//
+		List<?> signatures = m_signaturesField.getCheckedElements();
+		List<Command> commands = Lists.newArrayList();
+		for (int i = 0; i < signatures.size(); i++) {
+			String signature = (String) signatures.get(i);
+			//
+			String id = "custom_" + System.currentTimeMillis() + "_" + i;
+			String name = signature;
+			String description = null;
+			//
+			commands.add(new FactoryAddCommand(id,
+					name,
+					description,
+					true,
+					m_factoryClassName,
+					signature,
+					m_forStatic,
+					category));
+		}
+		//
+		return commands;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Composite m_fieldsContainer;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Composite m_fieldsContainer;
 
-  /**
-   * Configures given {@link DialogField} for specific of this dialog.
-   */
-  protected void doCreateField(DialogField dialogField, String labelText) {
-    dialogField.setLabelText(labelText);
-    dialogField.setDialogFieldListener(m_validateListener);
-    DialogFieldUtils.fillControls(m_fieldsContainer, dialogField, 3, 60);
-  }
+	/**
+	 * Configures given {@link DialogField} for specific of this dialog.
+	 */
+	protected void doCreateField(DialogField dialogField, String labelText) {
+		dialogField.setLabelText(labelText);
+		dialogField.setDialogFieldListener(m_validateListener);
+		DialogFieldUtils.fillControls(m_fieldsContainer, dialogField, 3, 60);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/dialogs/factory/FactoryAbstractDialog.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/dialogs/factory/FactoryAbstractDialog.java
index 926050598..1af3eb3ab 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/dialogs/factory/FactoryAbstractDialog.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/dialogs/factory/FactoryAbstractDialog.java
@@ -50,191 +50,191 @@
  * @coverage core.editor.palette.ui
  */
 public abstract class FactoryAbstractDialog extends AbstractPaletteElementDialog {
-  private final AstEditor m_editor;
-  protected final boolean m_forStatic;
+	private final AstEditor m_editor;
+	protected final boolean m_forStatic;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FactoryAbstractDialog(Shell parentShell,
-      AstEditor editor,
-      boolean forStatic,
-      String shellText,
-      String titleText) {
-    super(parentShell, shellText, titleText, null, Messages.FactoryAbstractDialog_message);
-    m_editor = editor;
-    m_forStatic = forStatic;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FactoryAbstractDialog(Shell parentShell,
+			AstEditor editor,
+			boolean forStatic,
+			String shellText,
+			String titleText) {
+		super(parentShell, shellText, titleText, null, Messages.FactoryAbstractDialog_message);
+		m_editor = editor;
+		m_forStatic = forStatic;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected StringDialogField m_nameField;
-  protected StringButtonDialogField m_factoryClassField;
-  protected StringButtonDialogField m_methodSignatureField;
-  protected StringAreaDialogField m_descriptionField;
-  protected BooleanDialogField m_visibleField;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected StringDialogField m_nameField;
+	protected StringButtonDialogField m_factoryClassField;
+	protected StringButtonDialogField m_methodSignatureField;
+	protected StringAreaDialogField m_descriptionField;
+	protected BooleanDialogField m_visibleField;
 
-  @Override
-  protected void createControls(Composite container) {
-    m_fieldsContainer = container;
-    GridLayoutFactory.create(container).columns(3);
-    // name
-    {
-      m_nameField = new StringDialogField();
-      doCreateField(m_nameField, Messages.FactoryAbstractDialog_nameLabel);
-    }
-    // factory class
-    {
-      m_factoryClassField = new StringButtonDialogField(new IStringButtonAdapter() {
-        @Override
-        public void changeControlPressed(DialogField field) {
-          try {
-            String factoryClassName =
-                JdtUiUtils.selectTypeName(getShell(), m_editor.getJavaProject());
-            if (factoryClassName != null) {
-              m_factoryClassField.setText(factoryClassName);
-            }
-          } catch (Throwable e) {
-            DesignerPlugin.log(e);
-          }
-        }
-      });
-      m_factoryClassField.setButtonLabel(Messages.FactoryAbstractDialog_classChoose);
-      doCreateField(m_factoryClassField, Messages.FactoryAbstractDialog_classLabel);
-      m_factoryClassField.getTextControl(null).setEditable(false);
-    }
-    // method signature
-    {
-      m_methodSignatureField = new StringButtonDialogField(new IStringButtonAdapter() {
-        @Override
-        public void changeControlPressed(DialogField field) {
-          try {
-            ElementListSelectionDialog dialog =
-                new ElementListSelectionDialog(getShell(), new LabelProvider() {
-                  @Override
-                  public Image getImage(Object element) {
-                    return JavaUI.getSharedImages().getImage(ISharedImages.IMG_OBJS_PUBLIC);
-                  }
+	@Override
+	protected void createControls(Composite container) {
+		m_fieldsContainer = container;
+		GridLayoutFactory.create(container).columns(3);
+		// name
+		{
+			m_nameField = new StringDialogField();
+			doCreateField(m_nameField, Messages.FactoryAbstractDialog_nameLabel);
+		}
+		// factory class
+		{
+			m_factoryClassField = new StringButtonDialogField(new IStringButtonAdapter() {
+				@Override
+				public void changeControlPressed(DialogField field) {
+					try {
+						String factoryClassName =
+								JdtUiUtils.selectTypeName(getShell(), m_editor.getJavaProject());
+						if (factoryClassName != null) {
+							m_factoryClassField.setText(factoryClassName);
+						}
+					} catch (Throwable e) {
+						DesignerPlugin.log(e);
+					}
+				}
+			});
+			m_factoryClassField.setButtonLabel(Messages.FactoryAbstractDialog_classChoose);
+			doCreateField(m_factoryClassField, Messages.FactoryAbstractDialog_classLabel);
+			m_factoryClassField.getTextControl(null).setEditable(false);
+		}
+		// method signature
+		{
+			m_methodSignatureField = new StringButtonDialogField(new IStringButtonAdapter() {
+				@Override
+				public void changeControlPressed(DialogField field) {
+					try {
+						ElementListSelectionDialog dialog =
+								new ElementListSelectionDialog(getShell(), new LabelProvider() {
+									@Override
+									public Image getImage(Object element) {
+										return JavaUI.getSharedImages().getImage(ISharedImages.IMG_OBJS_PUBLIC);
+									}
 
-                  @Override
-                  public String getText(Object element) {
-                    return super.getText(element);
-                  }
-                });
-            dialog.setTitle(Messages.FactoryAbstractDialog_methodDialogTitle);
-            dialog.setMessage(Messages.FactoryAbstractDialog_methodDialogMessage);
-            // set signatures
-            dialog.setElements(m_signaturesMap.keySet().toArray());
-            // open dialog
-            if (dialog.open() == Window.OK) {
-              String signature = (String) dialog.getFirstResult();
-              m_methodSignatureField.setText(signature);
-              // update presentation
-              m_nameField.setText(signature);
-              m_descriptionField.setText("");
-            }
-          } catch (Throwable e) {
-            DesignerPlugin.log(e);
-          }
-        }
-      });
-      m_methodSignatureField.setButtonLabel(Messages.FactoryAbstractDialog_methodChoose);
-      doCreateField(m_methodSignatureField, Messages.FactoryAbstractDialog_methodLabel);
-      m_methodSignatureField.getTextControl(null).setEditable(false);
-    }
-    // description
-    {
-      m_descriptionField = new StringAreaDialogField(5);
-      doCreateField(m_descriptionField, Messages.FactoryAbstractDialog_descriptionLabel);
-      GridDataFactory.modify(m_descriptionField.getTextControl(null)).grabV();
-    }
-    // state
-    {
-      m_visibleField = new BooleanDialogField();
-      doCreateField(m_visibleField, Messages.FactoryAbstractDialog_visibleFlag);
-    }
-  }
+									@Override
+									public String getText(Object element) {
+										return super.getText(element);
+									}
+								});
+						dialog.setTitle(Messages.FactoryAbstractDialog_methodDialogTitle);
+						dialog.setMessage(Messages.FactoryAbstractDialog_methodDialogMessage);
+						// set signatures
+						dialog.setElements(m_signaturesMap.keySet().toArray());
+						// open dialog
+						if (dialog.open() == Window.OK) {
+							String signature = (String) dialog.getFirstResult();
+							m_methodSignatureField.setText(signature);
+							// update presentation
+							m_nameField.setText(signature);
+							m_descriptionField.setText("");
+						}
+					} catch (Throwable e) {
+						DesignerPlugin.log(e);
+					}
+				}
+			});
+			m_methodSignatureField.setButtonLabel(Messages.FactoryAbstractDialog_methodChoose);
+			doCreateField(m_methodSignatureField, Messages.FactoryAbstractDialog_methodLabel);
+			m_methodSignatureField.getTextControl(null).setEditable(false);
+		}
+		// description
+		{
+			m_descriptionField = new StringAreaDialogField(5);
+			doCreateField(m_descriptionField, Messages.FactoryAbstractDialog_descriptionLabel);
+			GridDataFactory.modify(m_descriptionField.getTextControl(null)).grabV();
+		}
+		// state
+		{
+			m_visibleField = new BooleanDialogField();
+			doCreateField(m_visibleField, Messages.FactoryAbstractDialog_visibleFlag);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Validation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Map<String, FactoryMethodDescription> m_signaturesMap;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Validation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Map<String, FactoryMethodDescription> m_signaturesMap;
 
-  @Override
-  protected final String validate() {
-    // validate class
-    {
-      String factoryClassName = m_factoryClassField.getText().trim();
-      if (factoryClassName.length() == 0) {
-        return Messages.FactoryAbstractDialog_validateEmptyClass;
-      }
-      // check for existence
-      try {
-        EditorState state = EditorState.get(m_editor);
-        Class<?> factoryClass = state.getEditorLoader().loadClass(factoryClassName);
-        m_signaturesMap =
-            FactoryDescriptionHelper.getDescriptionsMap(m_editor, factoryClass, m_forStatic);
-      } catch (Throwable e) {
-        return e.getClass().getName() + ": " + e.getMessage();
-      }
-      // validate signatures
-      if (m_signaturesMap.isEmpty()) {
-        return MessageFormat.format(
-            Messages.FactoryAbstractDialog_validateNoMethods,
-            factoryClassName);
-      }
-    }
-    // validate signature
-    {
-      String signature = m_methodSignatureField.getText();
-      if (signature.length() == 0) {
-        return Messages.FactoryAbstractDialog_validateEmptyMethod;
-      }
-    }
-    // validate name
-    {
-      String name = m_nameField.getText().trim();
-      if (name.length() == 0) {
-        return Messages.FactoryAbstractDialog_validateEmptyName;
-      }
-    }
-    // OK
-    return null;
-  }
+	@Override
+	protected final String validate() {
+		// validate class
+		{
+			String factoryClassName = m_factoryClassField.getText().trim();
+			if (factoryClassName.length() == 0) {
+				return Messages.FactoryAbstractDialog_validateEmptyClass;
+			}
+			// check for existence
+			try {
+				EditorState state = EditorState.get(m_editor);
+				Class<?> factoryClass = state.getEditorLoader().loadClass(factoryClassName);
+				m_signaturesMap =
+						FactoryDescriptionHelper.getDescriptionsMap(m_editor, factoryClass, m_forStatic);
+			} catch (Throwable e) {
+				return e.getClass().getName() + ": " + e.getMessage();
+			}
+			// validate signatures
+			if (m_signaturesMap.isEmpty()) {
+				return MessageFormat.format(
+						Messages.FactoryAbstractDialog_validateNoMethods,
+						factoryClassName);
+			}
+		}
+		// validate signature
+		{
+			String signature = m_methodSignatureField.getText();
+			if (signature.length() == 0) {
+				return Messages.FactoryAbstractDialog_validateEmptyMethod;
+			}
+		}
+		// validate name
+		{
+			String name = m_nameField.getText().trim();
+			if (name.length() == 0) {
+				return Messages.FactoryAbstractDialog_validateEmptyName;
+			}
+		}
+		// OK
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Composite m_fieldsContainer;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Composite m_fieldsContainer;
 
-  /**
-   * Configures given {@link DialogField} for specific of this dialog.
-   */
-  protected final void doCreateField(DialogField dialogField, String labelText) {
-    dialogField.setLabelText(labelText);
-    dialogField.setDialogFieldListener(m_validateListener);
-    DialogFieldUtils.fillControls(m_fieldsContainer, dialogField, 3, 60);
-  }
+	/**
+	 * Configures given {@link DialogField} for specific of this dialog.
+	 */
+	protected final void doCreateField(DialogField dialogField, String labelText) {
+		dialogField.setLabelText(labelText);
+		dialogField.setDialogFieldListener(m_validateListener);
+		DialogFieldUtils.fillControls(m_fieldsContainer, dialogField, 3, 60);
+	}
 
-  /**
-   * @return the description text to use in command, may be <code>null</code> if entered text is
-   *         default, so description from metadata should be used.
-   */
-  protected final String getDescriptionText() {
-    String text = m_descriptionField.getText();
-    boolean isEmpty = StringUtils.isEmpty(text);
-    if (isEmpty) {
-      text = null;
-    }
-    return text;
-  }
+	/**
+	 * @return the description text to use in command, may be <code>null</code> if entered text is
+	 *         default, so description from metadata should be used.
+	 */
+	protected final String getDescriptionText() {
+		String text = m_descriptionField.getText();
+		boolean isEmpty = StringUtils.isEmpty(text);
+		if (isEmpty) {
+			text = null;
+		}
+		return text;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/dialogs/factory/FactoryAddDialog.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/dialogs/factory/FactoryAddDialog.java
index c57a0db20..5d98f06f2 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/dialogs/factory/FactoryAddDialog.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/dialogs/factory/FactoryAddDialog.java
@@ -29,67 +29,67 @@
  * @coverage core.editor.palette.ui
  */
 public final class FactoryAddDialog extends FactoryAbstractDialog {
-  private final PaletteInfo m_palette;
-  private final CategoryInfo m_initialCategory;
+	private final PaletteInfo m_palette;
+	private final CategoryInfo m_initialCategory;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FactoryAddDialog(Shell parentShell,
-      AstEditor editor,
-      boolean forStatic,
-      PaletteInfo palette,
-      CategoryInfo initialCategory) {
-    super(parentShell, editor, forStatic, forStatic
-        ? Messages.FactoryAddDialog_titleStatic
-        : Messages.FactoryAddDialog_titleInstance, forStatic
-        ? Messages.FactoryAddDialog_messageStatic
-        : Messages.FactoryAddDialog_messageInstance);
-    m_palette = palette;
-    m_initialCategory = initialCategory;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FactoryAddDialog(Shell parentShell,
+			AstEditor editor,
+			boolean forStatic,
+			PaletteInfo palette,
+			CategoryInfo initialCategory) {
+		super(parentShell, editor, forStatic, forStatic
+				? Messages.FactoryAddDialog_titleStatic
+						: Messages.FactoryAddDialog_titleInstance, forStatic
+						? Messages.FactoryAddDialog_messageStatic
+								: Messages.FactoryAddDialog_messageInstance);
+		m_palette = palette;
+		m_initialCategory = initialCategory;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private ComboDialogField m_categoryField;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private ComboDialogField m_categoryField;
 
-  @Override
-  protected void createControls(Composite container) {
-    super.createControls(container);
-    // category
-    {
-      m_categoryField = createCategoryField(m_palette, m_initialCategory);
-      doCreateField(m_categoryField, Messages.FactoryAddDialog_categoryLabel);
-    }
-    // initialize fields
-    m_visibleField.setSelection(true);
-  }
+	@Override
+	protected void createControls(Composite container) {
+		super.createControls(container);
+		// category
+		{
+			m_categoryField = createCategoryField(m_palette, m_initialCategory);
+			doCreateField(m_categoryField, Messages.FactoryAddDialog_categoryLabel);
+		}
+		// initialize fields
+		m_visibleField.setSelection(true);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Command
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Command createCommand() {
-    String id = "custom_" + System.currentTimeMillis();
-    String name = m_nameField.getText().trim();
-    String description = getDescriptionText();
-    String factoryClassName = m_factoryClassField.getText();
-    String methodSignature = m_methodSignatureField.getText();
-    CategoryInfo category = m_palette.getCategories().get(m_categoryField.getSelectionIndex());
-    return new FactoryAddCommand(id,
-        name,
-        description,
-        m_visibleField.getSelection(),
-        factoryClassName,
-        methodSignature,
-        m_forStatic,
-        category);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Command
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Command createCommand() {
+		String id = "custom_" + System.currentTimeMillis();
+		String name = m_nameField.getText().trim();
+		String description = getDescriptionText();
+		String factoryClassName = m_factoryClassField.getText();
+		String methodSignature = m_methodSignatureField.getText();
+		CategoryInfo category = m_palette.getCategories().get(m_categoryField.getSelectionIndex());
+		return new FactoryAddCommand(id,
+				name,
+				description,
+				m_visibleField.getSelection(),
+				factoryClassName,
+				methodSignature,
+				m_forStatic,
+				category);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/dialogs/factory/FactoryEditDialog.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/dialogs/factory/FactoryEditDialog.java
index 560b653c5..4a132c186 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/dialogs/factory/FactoryEditDialog.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/dialogs/factory/FactoryEditDialog.java
@@ -27,57 +27,57 @@
  * @coverage core.editor.palette.ui
  */
 public final class FactoryEditDialog extends FactoryAbstractDialog {
-  private final FactoryEntryInfo m_entry;
+	private final FactoryEntryInfo m_entry;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FactoryEditDialog(Shell parentShell,
-      AstEditor editor,
-      boolean forStatic,
-      FactoryEntryInfo entry) {
-    super(parentShell, editor, forStatic, forStatic
-        ? Messages.FactoryEditDialog_titleStatic
-        : Messages.FactoryEditDialog_titleInstance, forStatic
-        ? Messages.FactoryEditDialog_messageStatic
-        : Messages.FactoryEditDialog_messageInstance);
-    m_entry = entry;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FactoryEditDialog(Shell parentShell,
+			AstEditor editor,
+			boolean forStatic,
+			FactoryEntryInfo entry) {
+		super(parentShell, editor, forStatic, forStatic
+				? Messages.FactoryEditDialog_titleStatic
+						: Messages.FactoryEditDialog_titleInstance, forStatic
+						? Messages.FactoryEditDialog_messageStatic
+								: Messages.FactoryEditDialog_messageInstance);
+		m_entry = entry;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createControls(Composite container) {
-    super.createControls(container);
-    m_nameField.setText(m_entry.getName());
-    m_factoryClassField.setText(m_entry.getFactoryClassName());
-    m_methodSignatureField.setText(m_entry.getMethodSignature());
-    m_descriptionField.setText(m_entry.getDescription());
-    m_visibleField.setSelection(m_entry.isVisible());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createControls(Composite container) {
+		super.createControls(container);
+		m_nameField.setText(m_entry.getName());
+		m_factoryClassField.setText(m_entry.getFactoryClassName());
+		m_methodSignatureField.setText(m_entry.getMethodSignature());
+		m_descriptionField.setText(m_entry.getDescription());
+		m_visibleField.setSelection(m_entry.isVisible());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Command
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Command createCommand() {
-    String name = m_nameField.getText().trim();
-    String description = getDescriptionText();
-    String factoryClassName = m_factoryClassField.getText();
-    String methodSignature = m_methodSignatureField.getText();
-    return new FactoryEditCommand(m_entry.getId(),
-        name,
-        description,
-        m_visibleField.getSelection(),
-        factoryClassName,
-        methodSignature,
-        m_forStatic);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Command
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Command createCommand() {
+		String name = m_nameField.getText().trim();
+		String description = getDescriptionText();
+		String factoryClassName = m_factoryClassField.getText();
+		String methodSignature = m_methodSignatureField.getText();
+		return new FactoryEditCommand(m_entry.getId(),
+				name,
+				description,
+				m_visibleField.getSelection(),
+				factoryClassName,
+				methodSignature,
+				m_forStatic);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/model/entry/AttributesProvider.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/model/entry/AttributesProvider.java
index de0dd7325..8e374b55f 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/model/entry/AttributesProvider.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/model/entry/AttributesProvider.java
@@ -17,5 +17,5 @@
  * @coverage core.editor.palette
  */
 public interface AttributesProvider {
-  String getAttribute(String name);
+	String getAttribute(String name);
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/model/entry/AttributesProviders.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/model/entry/AttributesProviders.java
index ee1a94b30..de38e01d0 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/model/entry/AttributesProviders.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/model/entry/AttributesProviders.java
@@ -23,30 +23,30 @@
  * @coverage core.editor.palette
  */
 public final class AttributesProviders {
-  public static AttributesProvider get(final IConfigurationElement element) {
-    return new AttributesProvider() {
-      @Override
-      public String getAttribute(String name) {
-        return element.getAttribute(name);
-      }
-    };
-  }
+	public static AttributesProvider get(final IConfigurationElement element) {
+		return new AttributesProvider() {
+			@Override
+			public String getAttribute(String name) {
+				return element.getAttribute(name);
+			}
+		};
+	}
 
-  public static AttributesProvider get(final Attributes attributes) {
-    return new AttributesProvider() {
-      @Override
-      public String getAttribute(String name) {
-        return attributes.getValue(name);
-      }
-    };
-  }
+	public static AttributesProvider get(final Attributes attributes) {
+		return new AttributesProvider() {
+			@Override
+			public String getAttribute(String name) {
+				return attributes.getValue(name);
+			}
+		};
+	}
 
-  public static AttributesProvider get(final Map<String, String> attributes) {
-    return new AttributesProvider() {
-      @Override
-      public String getAttribute(String name) {
-        return attributes.get(name);
-      }
-    };
-  }
+	public static AttributesProvider get(final Map<String, String> attributes) {
+		return new AttributesProvider() {
+			@Override
+			public String getAttribute(String name) {
+				return attributes.get(name);
+			}
+		};
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/model/entry/FactoryEntryInfo.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/model/entry/FactoryEntryInfo.java
index 95edc3890..349fb9ef7 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/model/entry/FactoryEntryInfo.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/model/entry/FactoryEntryInfo.java
@@ -38,212 +38,212 @@
  * @coverage core.editor.palette
  */
 public abstract class FactoryEntryInfo extends ToolEntryInfo {
-  protected String m_factoryClassName;
-  protected String m_methodSignature;
-  private Image m_icon;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FactoryEntryInfo() {
-  }
-
-  public FactoryEntryInfo(CategoryInfo categoryInfo,
-      String factoryClassName,
-      AttributesProvider attributes) {
-    // factory class
-    {
-      m_factoryClassName = factoryClassName;
-      Assert.isNotNull(m_factoryClassName);
-    }
-    // signature
-    {
-      m_methodSignature = attributes.getAttribute("signature");
-      Assert.isNotNull(m_methodSignature, "Factory method must have 'signature' attribute.");
-    }
-    // id
-    {
-      String id = attributes.getAttribute("id");
-      if (id == null) {
-        id = categoryInfo.getId() + " " + m_factoryClassName + " " + m_methodSignature;
-      }
-      setId(id);
-    }
-    // name
-    {
-      String name = attributes.getAttribute("name");
-      setName(name);
-    }
-    // other
-    setDescription(attributes.getAttribute("description"));
-    setVisible(getBoolean(attributes, "visible", true));
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the name of factory class.
-   */
-  public final String getFactoryClassName() {
-    return m_factoryClassName;
-  }
-
-  /**
-   * Sets the name of factory class.
-   */
-  public final void setFactoryClassName(String factoryClassName) {
-    m_factoryClassName = factoryClassName;
-  }
-
-  /**
-   * @return the signature of method.
-   */
-  public final String getMethodSignature() {
-    return m_methodSignature;
-  }
-
-  /**
-   * Sets the signature of method.
-   */
-  public final void setMethodSignature(String methodSignature) {
-    m_methodSignature = methodSignature;
-  }
-
-  /**
-   * This method exists mostly for tests.
-   *
-   * @return the {@link FactoryMethodDescription} or this {@link FactoryEntryInfo}.
-   */
-  public FactoryMethodDescription getMethodDescription() {
-    return m_methodDescription;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // EntryInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected Class<?> m_factoryClass;
-  protected FactoryMethodDescription m_methodDescription;
-  private ComponentPresentation m_presentation;
-  private ComponentDescription m_componentDescription;
-
-  /**
-   * @return <code>true</code> if static factory methods should be used.
-   */
-  protected abstract boolean isStaticFactory();
-
-  @Override
-  public final boolean initialize(IEditPartViewer editPartViewer, JavaInfo rootJavaInfo) {
-    super.initialize(editPartViewer, rootJavaInfo);
-    // check for factory Class in classpath
-    if (!ProjectUtils.hasType(m_javaProject, m_factoryClassName)) {
-      return false;
-    }
-    // prepare descriptions
-    try {
-      {
-        m_factoryClass = m_state.getEditorLoader().loadClass(m_factoryClassName);
-        m_methodDescription =
-            FactoryDescriptionHelper.getDescription(
-                m_editor,
-                m_factoryClass,
-                m_methodSignature,
-                isStaticFactory());
-        if (m_methodDescription == null) {
-          return false;
-        }
-      }
-      {
-        Class<?> componentClass = m_methodDescription.getReturnClass();
-        m_presentation =
-            ComponentPresentationHelper.getPresentation(
-                m_editor,
-                componentClass.getCanonicalName(),
-                null);
-      }
-    } catch (ClassNotFoundException e) {
-      // not initialized because no Class, don't add warning
-      return false;
-    } catch (Throwable e) {
-      String message = "Palette: can not load factory method " + toString();
-      m_state.addWarning(new EditorWarning(message, e));
-      return false;
-    }
-    // updates
-    {
-      // update entry icon
-      if (m_methodDescription.getIcon() != null) {
-        m_icon = m_methodDescription.getIcon();
-      } else {
-        m_icon = m_presentation.getIcon();
-      }
-      // update entry name
-      {
-        String name = getNameRaw();
-        // if empty, try "name" from description
-        if (StringUtils.isEmpty(name) || name.equals(m_methodSignature)) {
-          String presentationName = m_methodDescription.getPresentationName();
-          if (presentationName != null) {
-            setName(presentationName);
-          }
-        }
-        // default
-        if (getNameRaw() == null) {
-          setName(m_methodSignature);
-        }
-      }
-      // update entry description text
-      {
-        String description = getDescription();
-        if (StringUtils.isEmpty(description) || description.startsWith("Class: ")) {
-          setDescription(m_methodDescription.getDescription());
-        }
-        if (getDescription() == null) {
-          setDescription("Class: " + m_factoryClassName + "<br/>Method: " + m_methodSignature);
-        }
-      }
-    }
-    // OK, can activate
-    return true;
-  }
-
-  protected final boolean ensureComponentDescription() {
-    if (m_componentDescription == null) {
-      try {
-        m_componentDescription =
-            ComponentDescriptionHelper.getDescription(m_editor, m_methodDescription);
-      } catch (Throwable e) {
-        String message = "Palette: can not load factory method " + toString();
-        m_state.addWarning(new EditorWarning(message, e));
-        return false;
-      }
-    }
-    // OK, can activate
-    return true;
-  }
-
-  @Override
-  public final Image getIcon() {
-    return m_icon;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the new {@link JavaInfo} for this component.
-   */
-  protected final JavaInfo createJavaInfo(CreationSupport creationSupport) throws Exception {
-    JavaInfo javaInfo =
-        JavaInfoUtils.createJavaInfo(m_editor, m_componentDescription, creationSupport);
-    return JavaInfoUtils.getWrapped(javaInfo);
-  }
+	protected String m_factoryClassName;
+	protected String m_methodSignature;
+	private Image m_icon;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FactoryEntryInfo() {
+	}
+
+	public FactoryEntryInfo(CategoryInfo categoryInfo,
+			String factoryClassName,
+			AttributesProvider attributes) {
+		// factory class
+		{
+			m_factoryClassName = factoryClassName;
+			Assert.isNotNull(m_factoryClassName);
+		}
+		// signature
+		{
+			m_methodSignature = attributes.getAttribute("signature");
+			Assert.isNotNull(m_methodSignature, "Factory method must have 'signature' attribute.");
+		}
+		// id
+		{
+			String id = attributes.getAttribute("id");
+			if (id == null) {
+				id = categoryInfo.getId() + " " + m_factoryClassName + " " + m_methodSignature;
+			}
+			setId(id);
+		}
+		// name
+		{
+			String name = attributes.getAttribute("name");
+			setName(name);
+		}
+		// other
+		setDescription(attributes.getAttribute("description"));
+		setVisible(getBoolean(attributes, "visible", true));
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the name of factory class.
+	 */
+	public final String getFactoryClassName() {
+		return m_factoryClassName;
+	}
+
+	/**
+	 * Sets the name of factory class.
+	 */
+	public final void setFactoryClassName(String factoryClassName) {
+		m_factoryClassName = factoryClassName;
+	}
+
+	/**
+	 * @return the signature of method.
+	 */
+	public final String getMethodSignature() {
+		return m_methodSignature;
+	}
+
+	/**
+	 * Sets the signature of method.
+	 */
+	public final void setMethodSignature(String methodSignature) {
+		m_methodSignature = methodSignature;
+	}
+
+	/**
+	 * This method exists mostly for tests.
+	 *
+	 * @return the {@link FactoryMethodDescription} or this {@link FactoryEntryInfo}.
+	 */
+	public FactoryMethodDescription getMethodDescription() {
+		return m_methodDescription;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// EntryInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected Class<?> m_factoryClass;
+	protected FactoryMethodDescription m_methodDescription;
+	private ComponentPresentation m_presentation;
+	private ComponentDescription m_componentDescription;
+
+	/**
+	 * @return <code>true</code> if static factory methods should be used.
+	 */
+	protected abstract boolean isStaticFactory();
+
+	@Override
+	public final boolean initialize(IEditPartViewer editPartViewer, JavaInfo rootJavaInfo) {
+		super.initialize(editPartViewer, rootJavaInfo);
+		// check for factory Class in classpath
+		if (!ProjectUtils.hasType(m_javaProject, m_factoryClassName)) {
+			return false;
+		}
+		// prepare descriptions
+		try {
+			{
+				m_factoryClass = m_state.getEditorLoader().loadClass(m_factoryClassName);
+				m_methodDescription =
+						FactoryDescriptionHelper.getDescription(
+								m_editor,
+								m_factoryClass,
+								m_methodSignature,
+								isStaticFactory());
+				if (m_methodDescription == null) {
+					return false;
+				}
+			}
+			{
+				Class<?> componentClass = m_methodDescription.getReturnClass();
+				m_presentation =
+						ComponentPresentationHelper.getPresentation(
+								m_editor,
+								componentClass.getCanonicalName(),
+								null);
+			}
+		} catch (ClassNotFoundException e) {
+			// not initialized because no Class, don't add warning
+			return false;
+		} catch (Throwable e) {
+			String message = "Palette: can not load factory method " + toString();
+			m_state.addWarning(new EditorWarning(message, e));
+			return false;
+		}
+		// updates
+		{
+			// update entry icon
+			if (m_methodDescription.getIcon() != null) {
+				m_icon = m_methodDescription.getIcon();
+			} else {
+				m_icon = m_presentation.getIcon();
+			}
+			// update entry name
+			{
+				String name = getNameRaw();
+				// if empty, try "name" from description
+				if (StringUtils.isEmpty(name) || name.equals(m_methodSignature)) {
+					String presentationName = m_methodDescription.getPresentationName();
+					if (presentationName != null) {
+						setName(presentationName);
+					}
+				}
+				// default
+				if (getNameRaw() == null) {
+					setName(m_methodSignature);
+				}
+			}
+			// update entry description text
+			{
+				String description = getDescription();
+				if (StringUtils.isEmpty(description) || description.startsWith("Class: ")) {
+					setDescription(m_methodDescription.getDescription());
+				}
+				if (getDescription() == null) {
+					setDescription("Class: " + m_factoryClassName + "<br/>Method: " + m_methodSignature);
+				}
+			}
+		}
+		// OK, can activate
+		return true;
+	}
+
+	protected final boolean ensureComponentDescription() {
+		if (m_componentDescription == null) {
+			try {
+				m_componentDescription =
+						ComponentDescriptionHelper.getDescription(m_editor, m_methodDescription);
+			} catch (Throwable e) {
+				String message = "Palette: can not load factory method " + toString();
+				m_state.addWarning(new EditorWarning(message, e));
+				return false;
+			}
+		}
+		// OK, can activate
+		return true;
+	}
+
+	@Override
+	public final Image getIcon() {
+		return m_icon;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the new {@link JavaInfo} for this component.
+	 */
+	protected final JavaInfo createJavaInfo(CreationSupport creationSupport) throws Exception {
+		JavaInfo javaInfo =
+				JavaInfoUtils.createJavaInfo(m_editor, m_componentDescription, creationSupport);
+		return JavaInfoUtils.getWrapped(javaInfo);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/model/entry/InstanceFactoryEntryInfo.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/model/entry/InstanceFactoryEntryInfo.java
index 7034b6cc5..b1394f9ac 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/model/entry/InstanceFactoryEntryInfo.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/model/entry/InstanceFactoryEntryInfo.java
@@ -38,124 +38,124 @@
  * @coverage core.editor.palette
  */
 public final class InstanceFactoryEntryInfo extends FactoryEntryInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public InstanceFactoryEntryInfo() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public InstanceFactoryEntryInfo() {
+	}
 
-  public InstanceFactoryEntryInfo(CategoryInfo categoryInfo,
-      String factoryClassName,
-      AttributesProvider attributes) {
-    super(categoryInfo, factoryClassName, attributes);
-  }
+	public InstanceFactoryEntryInfo(CategoryInfo categoryInfo,
+			String factoryClassName,
+			AttributesProvider attributes) {
+		super(categoryInfo, factoryClassName, attributes);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    return "InstanceFactoryMethod(class='"
-        + m_factoryClassName
-        + "' signature='"
-        + m_methodSignature
-        + "')";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		return "InstanceFactoryMethod(class='"
+				+ m_factoryClassName
+				+ "' signature='"
+				+ m_methodSignature
+				+ "')";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // EntryInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected boolean isStaticFactory() {
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// EntryInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected boolean isStaticFactory() {
+		return false;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ToolEntryInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Tool createTool() throws Exception {
-    if (!ensureComponentDescription()) {
-      return null;
-    }
-    // prepare instance factory
-    final InstanceFactoryInfo factoryInfo;
-    {
-      factoryInfo = getFactory();
-      if (factoryInfo == null) {
-        return null;
-      }
-    }
-    // prepare creation factory
-    ICreationFactory creationFactory = new ICreationFactory() {
-      private JavaInfo m_javaInfo;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ToolEntryInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Tool createTool() throws Exception {
+		if (!ensureComponentDescription()) {
+			return null;
+		}
+		// prepare instance factory
+		final InstanceFactoryInfo factoryInfo;
+		{
+			factoryInfo = getFactory();
+			if (factoryInfo == null) {
+				return null;
+			}
+		}
+		// prepare creation factory
+		ICreationFactory creationFactory = new ICreationFactory() {
+			private JavaInfo m_javaInfo;
 
-      @Override
-      public void activate() throws Exception {
-        CreationSupport creationSupport =
-            new InstanceFactoryCreationSupport(factoryInfo, m_methodDescription);
-        m_javaInfo = createJavaInfo(creationSupport);
-        m_javaInfo = JavaInfoUtils.getWrapped(m_javaInfo);
-        m_javaInfo.putArbitraryValue(JavaInfo.FLAG_MANUAL_COMPONENT, Boolean.TRUE);
-      }
+			@Override
+			public void activate() throws Exception {
+				CreationSupport creationSupport =
+						new InstanceFactoryCreationSupport(factoryInfo, m_methodDescription);
+				m_javaInfo = createJavaInfo(creationSupport);
+				m_javaInfo = JavaInfoUtils.getWrapped(m_javaInfo);
+				m_javaInfo.putArbitraryValue(JavaInfo.FLAG_MANUAL_COMPONENT, Boolean.TRUE);
+			}
 
-      @Override
-      public Object getNewObject() {
-        return m_javaInfo;
-      }
-    };
-    // return tool
-    return new CreationTool(creationFactory);
-  }
+			@Override
+			public Object getNewObject() {
+				return m_javaInfo;
+			}
+		};
+		// return tool
+		return new CreationTool(creationFactory);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the single {@link InstanceFactoryInfo} - existing or newly added.
-   */
-  private InstanceFactoryInfo getFactory() throws Exception {
-    List<InstanceFactoryInfo> factories =
-        InstanceFactoryInfo.getFactories(m_rootJavaInfo, m_factoryClass);
-    // single factory
-    if (factories.size() == 1) {
-      return factories.get(0);
-    }
-    // no factories
-    if (factories.size() == 0) {
-      final InstanceFactoryInfo[] result = new InstanceFactoryInfo[1];
-      ExecutionUtils.run(m_rootJavaInfo, new RunnableEx() {
-        @Override
-        public void run() throws Exception {
-          result[0] = InstanceFactoryInfo.add(m_rootJavaInfo, m_factoryClass);
-        }
-      });
-      return result[0];
-    }
-    // more than one factory
-    {
-      // prepare dialog
-      ElementListSelectionDialog dialog;
-      {
-        Shell shell = DesignerPlugin.getShell();
-        dialog = new ElementListSelectionDialog(shell, ObjectsLabelProvider.INSTANCE);
-        dialog.setTitle(Messages.InstanceFactoryEntryInfo_selectFactoryTitle);
-        dialog.setMessage(Messages.InstanceFactoryEntryInfo_selectFactoryMessage);
-      }
-      // open dialog
-      dialog.setElements(factories.toArray());
-      dialog.open();
-      return (InstanceFactoryInfo) dialog.getFirstResult();
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the single {@link InstanceFactoryInfo} - existing or newly added.
+	 */
+	private InstanceFactoryInfo getFactory() throws Exception {
+		List<InstanceFactoryInfo> factories =
+				InstanceFactoryInfo.getFactories(m_rootJavaInfo, m_factoryClass);
+		// single factory
+		if (factories.size() == 1) {
+			return factories.get(0);
+		}
+		// no factories
+		if (factories.size() == 0) {
+			final InstanceFactoryInfo[] result = new InstanceFactoryInfo[1];
+			ExecutionUtils.run(m_rootJavaInfo, new RunnableEx() {
+				@Override
+				public void run() throws Exception {
+					result[0] = InstanceFactoryInfo.add(m_rootJavaInfo, m_factoryClass);
+				}
+			});
+			return result[0];
+		}
+		// more than one factory
+		{
+			// prepare dialog
+			ElementListSelectionDialog dialog;
+			{
+				Shell shell = DesignerPlugin.getShell();
+				dialog = new ElementListSelectionDialog(shell, ObjectsLabelProvider.INSTANCE);
+				dialog.setTitle(Messages.InstanceFactoryEntryInfo_selectFactoryTitle);
+				dialog.setMessage(Messages.InstanceFactoryEntryInfo_selectFactoryMessage);
+			}
+			// open dialog
+			dialog.setElements(factories.toArray());
+			dialog.open();
+			return (InstanceFactoryInfo) dialog.getFirstResult();
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/model/entry/LibraryInfo.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/model/entry/LibraryInfo.java
index d486d203b..415026fa8 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/model/entry/LibraryInfo.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/model/entry/LibraryInfo.java
@@ -27,37 +27,37 @@
  * @coverage core.editor.palette
  */
 public final class LibraryInfo {
-  private final String m_typeName;
-  private final String m_bundleId;
-  private final String m_jarPath;
-  private final String m_srcPath;
+	private final String m_typeName;
+	private final String m_bundleId;
+	private final String m_jarPath;
+	private final String m_srcPath;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public LibraryInfo(IConfigurationElement element) {
-    m_typeName = ExternalFactoriesHelper.getRequiredAttribute(element, "type");
-    m_bundleId = ExternalFactoriesHelper.getRequiredAttribute(element, "bundle");
-    m_jarPath = ExternalFactoriesHelper.getRequiredAttribute(element, "jar");
-    m_srcPath = element.getAttribute("src");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public LibraryInfo(IConfigurationElement element) {
+		m_typeName = ExternalFactoriesHelper.getRequiredAttribute(element, "type");
+		m_bundleId = ExternalFactoriesHelper.getRequiredAttribute(element, "bundle");
+		m_jarPath = ExternalFactoriesHelper.getRequiredAttribute(element, "jar");
+		m_srcPath = element.getAttribute("src");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Ensures that required type exists in {@link IJavaProject}, if needed adds JAR/ZIP to classpath.
-   */
-  public void ensure(IJavaProject javaProject) throws Exception {
-    if (javaProject.findType(m_typeName) == null) {
-      Bundle bundle = ExternalFactoriesHelper.getRequiredBundle(m_bundleId);
-      // add JAR
-      ProjectUtils.addJar(javaProject, bundle, m_jarPath, m_srcPath);
-      ProjectUtils.waitForAutoBuild();
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Ensures that required type exists in {@link IJavaProject}, if needed adds JAR/ZIP to classpath.
+	 */
+	public void ensure(IJavaProject javaProject) throws Exception {
+		if (javaProject.findType(m_typeName) == null) {
+			Bundle bundle = ExternalFactoriesHelper.getRequiredBundle(m_bundleId);
+			// add JAR
+			ProjectUtils.addJar(javaProject, bundle, m_jarPath, m_srcPath);
+			ProjectUtils.waitForAutoBuild();
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/model/entry/StaticFactoryEntryInfo.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/model/entry/StaticFactoryEntryInfo.java
index 364ccb2c4..378042570 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/model/entry/StaticFactoryEntryInfo.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/model/entry/StaticFactoryEntryInfo.java
@@ -27,72 +27,72 @@
  * @coverage core.editor.palette
  */
 public final class StaticFactoryEntryInfo extends FactoryEntryInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public StaticFactoryEntryInfo() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public StaticFactoryEntryInfo() {
+	}
 
-  public StaticFactoryEntryInfo(CategoryInfo categoryInfo,
-      String factoryClassName,
-      AttributesProvider attributes) {
-    super(categoryInfo, factoryClassName, attributes);
-  }
+	public StaticFactoryEntryInfo(CategoryInfo categoryInfo,
+			String factoryClassName,
+			AttributesProvider attributes) {
+		super(categoryInfo, factoryClassName, attributes);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    return "StaticFactoryMethod(class='"
-        + m_factoryClassName
-        + "' signature='"
-        + m_methodSignature
-        + "')";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		return "StaticFactoryMethod(class='"
+				+ m_factoryClassName
+				+ "' signature='"
+				+ m_methodSignature
+				+ "')";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // EntryInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected boolean isStaticFactory() {
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// EntryInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected boolean isStaticFactory() {
+		return true;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ToolEntryInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Tool createTool() throws Exception {
-    if (!ensureComponentDescription()) {
-      return null;
-    }
-    // prepare factory
-    ICreationFactory factory = new ICreationFactory() {
-      private JavaInfo m_javaInfo;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ToolEntryInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Tool createTool() throws Exception {
+		if (!ensureComponentDescription()) {
+			return null;
+		}
+		// prepare factory
+		ICreationFactory factory = new ICreationFactory() {
+			private JavaInfo m_javaInfo;
 
-      @Override
-      public void activate() throws Exception {
-        CreationSupport creationSupport = new StaticFactoryCreationSupport(m_methodDescription);
-        m_javaInfo = createJavaInfo(creationSupport);
-        m_javaInfo = JavaInfoUtils.getWrapped(m_javaInfo);
-        m_javaInfo.putArbitraryValue(JavaInfo.FLAG_MANUAL_COMPONENT, Boolean.TRUE);
-      }
+			@Override
+			public void activate() throws Exception {
+				CreationSupport creationSupport = new StaticFactoryCreationSupport(m_methodDescription);
+				m_javaInfo = createJavaInfo(creationSupport);
+				m_javaInfo = JavaInfoUtils.getWrapped(m_javaInfo);
+				m_javaInfo.putArbitraryValue(JavaInfo.FLAG_MANUAL_COMPONENT, Boolean.TRUE);
+			}
 
-      @Override
-      public Object getNewObject() {
-        return m_javaInfo;
-      }
-    };
-    // return tool
-    return new CreationTool(factory);
-  }
+			@Override
+			public Object getNewObject() {
+				return m_javaInfo;
+			}
+		};
+		// return tool
+		return new CreationTool(factory);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/structure/property/JavaPropertiesToolBarContributor.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/structure/property/JavaPropertiesToolBarContributor.java
index d1c8b193d..3873ea89b 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/structure/property/JavaPropertiesToolBarContributor.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/structure/property/JavaPropertiesToolBarContributor.java
@@ -32,83 +32,83 @@
  * @coverage core.editor.structure
  */
 public final class JavaPropertiesToolBarContributor implements IPropertiesToolBarContributor {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final IPropertiesToolBarContributor INSTANCE =
-      new JavaPropertiesToolBarContributor();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final IPropertiesToolBarContributor INSTANCE =
+			new JavaPropertiesToolBarContributor();
 
-  private JavaPropertiesToolBarContributor() {
-  }
+	private JavaPropertiesToolBarContributor() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IPropertiesToolBarContributor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void contributeToolBar(IToolBarManager manager, final List<ObjectInfo> objects)
-      throws Exception {
-    addGotoDefinitionAction(manager, objects);
-    addVariableConvertAction(manager, objects);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IPropertiesToolBarContributor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void contributeToolBar(IToolBarManager manager, final List<ObjectInfo> objects)
+			throws Exception {
+		addGotoDefinitionAction(manager, objects);
+		addVariableConvertAction(manager, objects);
+	}
 
-  private void addGotoDefinitionAction(IToolBarManager manager, List<ObjectInfo> objects) {
-    if (objects.size() == 1 && objects.get(0) instanceof JavaInfo) {
-      final JavaInfo javaInfo = (JavaInfo) objects.get(0);
-      IAction gotoDefinitionAction = new Action() {
-        @Override
-        public void run() {
-          int position = javaInfo.getCreationSupport().getNode().getStartPosition();
-          IDesignPageSite site = IDesignPageSite.Helper.getSite(javaInfo);
-          site.openSourcePosition(position);
-        }
-      };
-      gotoDefinitionAction.setImageDescriptor(DesignerPlugin.getImageDescriptor("structure/goto_definition.gif"));
-      gotoDefinitionAction.setToolTipText(Messages.ComponentsPropertiesPage_goDefinition);
-      manager.appendToGroup(GROUP_EDIT, gotoDefinitionAction);
-    }
-  }
+	private void addGotoDefinitionAction(IToolBarManager manager, List<ObjectInfo> objects) {
+		if (objects.size() == 1 && objects.get(0) instanceof JavaInfo) {
+			final JavaInfo javaInfo = (JavaInfo) objects.get(0);
+			IAction gotoDefinitionAction = new Action() {
+				@Override
+				public void run() {
+					int position = javaInfo.getCreationSupport().getNode().getStartPosition();
+					IDesignPageSite site = IDesignPageSite.Helper.getSite(javaInfo);
+					site.openSourcePosition(position);
+				}
+			};
+			gotoDefinitionAction.setImageDescriptor(DesignerPlugin.getImageDescriptor("structure/goto_definition.gif"));
+			gotoDefinitionAction.setToolTipText(Messages.ComponentsPropertiesPage_goDefinition);
+			manager.appendToGroup(GROUP_EDIT, gotoDefinitionAction);
+		}
+	}
 
-  private void addVariableConvertAction(IToolBarManager manager, List<ObjectInfo> objects) {
-    if (objects.size() == 1 && objects.get(0) instanceof JavaInfo) {
-      final JavaInfo javaInfo = (JavaInfo) objects.get(0);
-      final VariableSupport variableSupport = javaInfo.getVariableSupport();
-      // prepare action
-      IAction variableConvertAction = new Action() {
-        @Override
-        public void run() {
-          ExecutionUtils.run(javaInfo, new RunnableEx() {
-            @Override
-            public void run() throws Exception {
-              if (variableSupport.canConvertLocalToField()) {
-                variableSupport.convertLocalToField();
-              } else if (variableSupport.canConvertFieldToLocal()) {
-                variableSupport.convertFieldToLocal();
-              }
-            }
-          });
-        }
-      };
-      boolean enabled = false;
-      // to field
-      if (variableSupport.canConvertLocalToField()) {
-        variableConvertAction.setImageDescriptor(DesignerPlugin.getImageDescriptor("structure/local_to_field.gif"));
-        variableConvertAction.setToolTipText(Messages.ComponentsPropertiesPage_convertLocalToFieldAction);
-        enabled = true;
-      }
-      // to local
-      if (!enabled && variableSupport.canConvertFieldToLocal()) {
-        variableConvertAction.setImageDescriptor(DesignerPlugin.getImageDescriptor("structure/field_to_local.gif"));
-        variableConvertAction.setToolTipText(Messages.ComponentsPropertiesPage_convertFieldToLocalAction);
-        enabled = true;
-      }
-      // append action
-      if (enabled) {
-        manager.appendToGroup(GROUP_EDIT, variableConvertAction);
-      }
-    }
-  }
+	private void addVariableConvertAction(IToolBarManager manager, List<ObjectInfo> objects) {
+		if (objects.size() == 1 && objects.get(0) instanceof JavaInfo) {
+			final JavaInfo javaInfo = (JavaInfo) objects.get(0);
+			final VariableSupport variableSupport = javaInfo.getVariableSupport();
+			// prepare action
+			IAction variableConvertAction = new Action() {
+				@Override
+				public void run() {
+					ExecutionUtils.run(javaInfo, new RunnableEx() {
+						@Override
+						public void run() throws Exception {
+							if (variableSupport.canConvertLocalToField()) {
+								variableSupport.convertLocalToField();
+							} else if (variableSupport.canConvertFieldToLocal()) {
+								variableSupport.convertFieldToLocal();
+							}
+						}
+					});
+				}
+			};
+			boolean enabled = false;
+			// to field
+			if (variableSupport.canConvertLocalToField()) {
+				variableConvertAction.setImageDescriptor(DesignerPlugin.getImageDescriptor("structure/local_to_field.gif"));
+				variableConvertAction.setToolTipText(Messages.ComponentsPropertiesPage_convertLocalToFieldAction);
+				enabled = true;
+			}
+			// to local
+			if (!enabled && variableSupport.canConvertFieldToLocal()) {
+				variableConvertAction.setImageDescriptor(DesignerPlugin.getImageDescriptor("structure/field_to_local.gif"));
+				variableConvertAction.setToolTipText(Messages.ComponentsPropertiesPage_convertFieldToLocalAction);
+				enabled = true;
+			}
+			// append action
+			if (enabled) {
+				manager.appendToGroup(GROUP_EDIT, variableConvertAction);
+			}
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/eval/ExecutionFlowProvider.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/eval/ExecutionFlowProvider.java
index 8cd30ea61..4b3774554 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/eval/ExecutionFlowProvider.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/eval/ExecutionFlowProvider.java
@@ -26,15 +26,15 @@
  * @coverage core.evaluation
  */
 public class ExecutionFlowProvider {
-  /**
-   * @return the constructor to start execution flow from, may be <code>null</code> if no any
-   *         constructor or just none of constructors can be chosen as default.
-   */
-  public MethodDeclaration getDefaultConstructor(TypeDeclaration typeDeclaration) {
-    return null;
-  }
+	/**
+	 * @return the constructor to start execution flow from, may be <code>null</code> if no any
+	 *         constructor or just none of constructors can be chosen as default.
+	 */
+	public MethodDeclaration getDefaultConstructor(TypeDeclaration typeDeclaration) {
+		return null;
+	}
 
-  public boolean shouldVisit(AnonymousClassDeclaration anonymous) throws Exception {
-    return false;
-  }
+	public boolean shouldVisit(AnonymousClassDeclaration anonymous) throws Exception {
+		return false;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/eval/evaluators/AnonymousEvaluationError.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/eval/evaluators/AnonymousEvaluationError.java
index 19cd3a3d9..73b8b0d0e 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/eval/evaluators/AnonymousEvaluationError.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/eval/evaluators/AnonymousEvaluationError.java
@@ -21,9 +21,9 @@
  * @coverage core.evaluation
  */
 public final class AnonymousEvaluationError extends Error {
-  private static final long serialVersionUID = 0L;
+	private static final long serialVersionUID = 0L;
 
-  public static boolean is(Throwable e) {
-    return DesignerExceptionUtils.getRootCause(e) instanceof AnonymousEvaluationError;
-  }
+	public static boolean is(Throwable e) {
+		return DesignerExceptionUtils.getRootCause(e) instanceof AnonymousEvaluationError;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/eval/evaluators/ArrayEvaluator.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/eval/evaluators/ArrayEvaluator.java
index 78de8ebe0..279948da5 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/eval/evaluators/ArrayEvaluator.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/eval/evaluators/ArrayEvaluator.java
@@ -35,125 +35,125 @@
  * @coverage core.evaluation
  */
 public final class ArrayEvaluator implements IExpressionEvaluator {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IExpressionEvaluator
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Object evaluate(EvaluationContext context,
-      Expression expression,
-      ITypeBinding typeBinding,
-      String typeQualifiedName) throws Exception {
-    // evaluate ArrayCreation
-    if (expression instanceof ArrayCreation) {
-      ArrayCreation creation = (ArrayCreation) expression;
-      ArrayInitializer initializer = creation.getInitializer();
-      if (initializer != null) {
-        return AstEvaluationEngine.evaluate(context, initializer);
-      }
-      return evaluateEmpty(context, typeBinding, creation);
-    }
-    // evaluate ArrayInitializer
-    if (expression instanceof ArrayInitializer) {
-      ArrayInitializer initializer = (ArrayInitializer) expression;
-      return evaluateInitializer(context, typeBinding, initializer);
-    }
-    // evaluate ArrayAccess
-    if (expression instanceof ArrayAccess) {
-      ArrayAccess arrayAccess = (ArrayAccess) expression;
-      Expression arrayExpression = arrayAccess.getArray();
-      Expression indexExpression = arrayAccess.getIndex();
-      Object arrayObject = AstEvaluationEngine.evaluate(context, arrayExpression);
-      Object indexObject = AstEvaluationEngine.evaluate(context, indexExpression);
-      if (indexObject instanceof Integer) {
-        int index = ((Integer) indexObject).intValue();
-        return Array.get(arrayObject, index);
-      }
-    }
-    // we don't understand given expression
-    return AstEvaluationEngine.UNKNOWN;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IExpressionEvaluator
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Object evaluate(EvaluationContext context,
+			Expression expression,
+			ITypeBinding typeBinding,
+			String typeQualifiedName) throws Exception {
+		// evaluate ArrayCreation
+		if (expression instanceof ArrayCreation) {
+			ArrayCreation creation = (ArrayCreation) expression;
+			ArrayInitializer initializer = creation.getInitializer();
+			if (initializer != null) {
+				return AstEvaluationEngine.evaluate(context, initializer);
+			}
+			return evaluateEmpty(context, typeBinding, creation);
+		}
+		// evaluate ArrayInitializer
+		if (expression instanceof ArrayInitializer) {
+			ArrayInitializer initializer = (ArrayInitializer) expression;
+			return evaluateInitializer(context, typeBinding, initializer);
+		}
+		// evaluate ArrayAccess
+		if (expression instanceof ArrayAccess) {
+			ArrayAccess arrayAccess = (ArrayAccess) expression;
+			Expression arrayExpression = arrayAccess.getArray();
+			Expression indexExpression = arrayAccess.getIndex();
+			Object arrayObject = AstEvaluationEngine.evaluate(context, arrayExpression);
+			Object indexObject = AstEvaluationEngine.evaluate(context, indexExpression);
+			if (indexObject instanceof Integer) {
+				int index = ((Integer) indexObject).intValue();
+				return Array.get(arrayObject, index);
+			}
+		}
+		// we don't understand given expression
+		return AstEvaluationEngine.UNKNOWN;
+	}
 
-  private static Object evaluateEmpty(EvaluationContext context,
-      ITypeBinding typeBinding,
-      ArrayCreation creation) throws Exception {
-    // prepare type information
-    ITypeBinding elementTypeBinding = typeBinding.getElementType();
-    Assert.isNotNull(elementTypeBinding);
-    String elementTypeName = AstNodeUtils.getFullyQualifiedName(elementTypeBinding, false);
-    Class<?> elementType =
-        ReflectionUtils.getClassByName(context.getClassLoader(), elementTypeName);
-    // prepare dimensions
-    List<Expression> dimensionExpressions = DomGenerics.dimensions(creation);
-    int dimensions[] = new int[dimensionExpressions.size()];
-    for (int i = 0; i < dimensions.length; i++) {
-      Expression dimensionExpression = dimensionExpressions.get(i);
-      dimensions[i] = (Integer) AstEvaluationEngine.evaluate(context, dimensionExpression);
-    }
-    // create Array
-    return Array.newInstance(elementType, dimensions);
-  }
+	private static Object evaluateEmpty(EvaluationContext context,
+			ITypeBinding typeBinding,
+			ArrayCreation creation) throws Exception {
+		// prepare type information
+		ITypeBinding elementTypeBinding = typeBinding.getElementType();
+		Assert.isNotNull(elementTypeBinding);
+		String elementTypeName = AstNodeUtils.getFullyQualifiedName(elementTypeBinding, false);
+		Class<?> elementType =
+				ReflectionUtils.getClassByName(context.getClassLoader(), elementTypeName);
+		// prepare dimensions
+		List<Expression> dimensionExpressions = DomGenerics.dimensions(creation);
+		int dimensions[] = new int[dimensionExpressions.size()];
+		for (int i = 0; i < dimensions.length; i++) {
+			Expression dimensionExpression = dimensionExpressions.get(i);
+			dimensions[i] = (Integer) AstEvaluationEngine.evaluate(context, dimensionExpression);
+		}
+		// create Array
+		return Array.newInstance(elementType, dimensions);
+	}
 
-  private static Object evaluateInitializer(EvaluationContext context,
-      ITypeBinding typeBinding,
-      ArrayInitializer initializer) throws Exception {
-    // prepare type information
-    ITypeBinding elementTypeBinding = typeBinding.getElementType();
-    Assert.isNotNull(elementTypeBinding);
-    String elementTypeName = AstNodeUtils.getFullyQualifiedName(elementTypeBinding, false);
-    Class<?> elementType =
-        ReflectionUtils.getClassByName(context.getClassLoader(), elementTypeName);
-    // prepare top level array length
-    List<Expression> expressions = DomGenerics.expressions(initializer);
-    int length = expressions.size();
-    // prepare top level array with correct number of dimensions
-    int dimensions[] = new int[typeBinding.getDimensions()];
-    dimensions[0] = length;
-    // array of primitives
-    if (typeBinding.getDimensions() == 1 && elementTypeBinding.isPrimitive()) {
-      Object values = Array.newInstance(elementType, dimensions);
-      for (int index = 0; index < length; index++) {
-        Expression element = expressions.get(index);
-        Object elementValue = AstEvaluationEngine.evaluate(context, element);
-        if (elementType == boolean.class) {
-          Array.setBoolean(values, index, ((Boolean) elementValue).booleanValue());
-        } else if (elementType == char.class) {
-          char charValue;
-          if (elementValue instanceof Number) {
-            charValue = (char) ((Number) elementValue).intValue();
-          } else {
-            charValue = ((Character) elementValue).charValue();
-          }
-          Array.setChar(values, index, charValue);
-        } else {
-          Number number = (Number) elementValue;
-          if (elementType == byte.class) {
-            Array.setByte(values, index, number.byteValue());
-          } else if (elementType == short.class) {
-            Array.setShort(values, index, number.shortValue());
-          } else if (elementType == int.class) {
-            Array.setInt(values, index, number.intValue());
-          } else if (elementType == long.class) {
-            Array.setLong(values, index, number.longValue());
-          } else if (elementType == float.class) {
-            Array.setFloat(values, index, number.floatValue());
-          } else if (elementType == double.class) {
-            Array.setDouble(values, index, number.doubleValue());
-          }
-        }
-      }
-      return values;
-    }
-    // array of Object's
-    {
-      Object values[] = (Object[]) Array.newInstance(elementType, dimensions);
-      for (int index = 0; index < length; index++) {
-        Expression element = expressions.get(index);
-        Object value = AstEvaluationEngine.evaluate(context, element);
-        values[index] = value;
-      }
-      return values;
-    }
-  }
+	private static Object evaluateInitializer(EvaluationContext context,
+			ITypeBinding typeBinding,
+			ArrayInitializer initializer) throws Exception {
+		// prepare type information
+		ITypeBinding elementTypeBinding = typeBinding.getElementType();
+		Assert.isNotNull(elementTypeBinding);
+		String elementTypeName = AstNodeUtils.getFullyQualifiedName(elementTypeBinding, false);
+		Class<?> elementType =
+				ReflectionUtils.getClassByName(context.getClassLoader(), elementTypeName);
+		// prepare top level array length
+		List<Expression> expressions = DomGenerics.expressions(initializer);
+		int length = expressions.size();
+		// prepare top level array with correct number of dimensions
+		int dimensions[] = new int[typeBinding.getDimensions()];
+		dimensions[0] = length;
+		// array of primitives
+		if (typeBinding.getDimensions() == 1 && elementTypeBinding.isPrimitive()) {
+			Object values = Array.newInstance(elementType, dimensions);
+			for (int index = 0; index < length; index++) {
+				Expression element = expressions.get(index);
+				Object elementValue = AstEvaluationEngine.evaluate(context, element);
+				if (elementType == boolean.class) {
+					Array.setBoolean(values, index, ((Boolean) elementValue).booleanValue());
+				} else if (elementType == char.class) {
+					char charValue;
+					if (elementValue instanceof Number) {
+						charValue = (char) ((Number) elementValue).intValue();
+					} else {
+						charValue = ((Character) elementValue).charValue();
+					}
+					Array.setChar(values, index, charValue);
+				} else {
+					Number number = (Number) elementValue;
+					if (elementType == byte.class) {
+						Array.setByte(values, index, number.byteValue());
+					} else if (elementType == short.class) {
+						Array.setShort(values, index, number.shortValue());
+					} else if (elementType == int.class) {
+						Array.setInt(values, index, number.intValue());
+					} else if (elementType == long.class) {
+						Array.setLong(values, index, number.longValue());
+					} else if (elementType == float.class) {
+						Array.setFloat(values, index, number.floatValue());
+					} else if (elementType == double.class) {
+						Array.setDouble(values, index, number.doubleValue());
+					}
+				}
+			}
+			return values;
+		}
+		// array of Object's
+		{
+			Object values[] = (Object[]) Array.newInstance(elementType, dimensions);
+			for (int index = 0; index < length; index++) {
+				Expression element = expressions.get(index);
+				Object value = AstEvaluationEngine.evaluate(context, element);
+				values[index] = value;
+			}
+			return values;
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/eval/evaluators/AssignmentEvaluator.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/eval/evaluators/AssignmentEvaluator.java
index 033e3f122..bcac97864 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/eval/evaluators/AssignmentEvaluator.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/eval/evaluators/AssignmentEvaluator.java
@@ -25,22 +25,22 @@
  * @coverage core.evaluation
  */
 public final class AssignmentEvaluator implements IExpressionEvaluator {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IExpressionEvaluator
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Object evaluate(EvaluationContext context,
-      Expression expression,
-      ITypeBinding typeBinding,
-      String typeQualifiedName) throws Exception {
-    if (expression instanceof Assignment) {
-      Assignment assignment = (Assignment) expression;
-      // evaluate right side
-      return AstEvaluationEngine.evaluate(context, assignment.getRightHandSide());
-    }
-    // we don't understand given expression
-    return AstEvaluationEngine.UNKNOWN;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IExpressionEvaluator
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Object evaluate(EvaluationContext context,
+			Expression expression,
+			ITypeBinding typeBinding,
+			String typeQualifiedName) throws Exception {
+		if (expression instanceof Assignment) {
+			Assignment assignment = (Assignment) expression;
+			// evaluate right side
+			return AstEvaluationEngine.evaluate(context, assignment.getRightHandSide());
+		}
+		// we don't understand given expression
+		return AstEvaluationEngine.UNKNOWN;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/eval/evaluators/BooleanEvaluator.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/eval/evaluators/BooleanEvaluator.java
index 177beb529..d96a3274a 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/eval/evaluators/BooleanEvaluator.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/eval/evaluators/BooleanEvaluator.java
@@ -34,96 +34,96 @@
  * @coverage core.evaluation
  */
 public final class BooleanEvaluator implements IExpressionEvaluator {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IExpressionEvaluator
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Object evaluate(EvaluationContext context,
-      Expression expression,
-      ITypeBinding typeBinding,
-      String typeQualifiedName) throws Exception {
-    // boolean expression
-    if ("boolean".equals(typeQualifiedName)) {
-      // single literal
-      if (expression instanceof BooleanLiteral) {
-        BooleanLiteral numberLiteral = (BooleanLiteral) expression;
-        return numberLiteral.booleanValue() ? Boolean.TRUE : Boolean.FALSE;
-      }
-      // prefix expression (!)
-      if (expression instanceof PrefixExpression) {
-        PrefixExpression prefixExpression = (PrefixExpression) expression;
-        // only "!" is possible prefix operator for string's
-        Assert.isTrue(prefixExpression.getOperator() == PrefixExpression.Operator.NOT);
-        // prepare operand value
-        Expression operand = prefixExpression.getOperand();
-        boolean operandValue = getBooleanValue(context, operand);
-        // return result
-        return !operandValue;
-      }
-      // infix expression (&&, ||)
-      if (expression instanceof InfixExpression) {
-        InfixExpression infixExpression = (InfixExpression) expression;
-        Operator operator = infixExpression.getOperator();
-        Expression leftOperand = infixExpression.getLeftOperand();
-        Expression rightOperand = infixExpression.getRightOperand();
-        // compare
-        if (operator == InfixExpression.Operator.EQUALS
-            || operator == InfixExpression.Operator.NOT_EQUALS) {
-          Object leftObject = AstEvaluationEngine.evaluate(context, leftOperand);
-          Object rightObject = AstEvaluationEngine.evaluate(context, rightOperand);
-          // ==
-          if (operator == InfixExpression.Operator.EQUALS) {
-            return ObjectUtils.equals(leftObject, rightObject);
-          }
-          // !=
-          if (operator == InfixExpression.Operator.NOT_EQUALS) {
-            return !ObjectUtils.equals(leftObject, rightObject);
-          }
-        }
-        // prepare operands
-        boolean operands[];
-        {
-          List<Expression> extendedOperands = DomGenerics.extendedOperands(infixExpression);
-          operands = new boolean[2 + extendedOperands.size()];
-          // evaluate usual operands
-          operands[0] = getBooleanValue(context, leftOperand);
-          operands[1] = getBooleanValue(context, rightOperand);
-          // evaluate extended operands
-          for (int i = 0; i < extendedOperands.size(); i++) {
-            Expression operandExpression = extendedOperands.get(i);
-            operands[2 + i] = getBooleanValue(context, operandExpression);
-          }
-        }
-        // process each operand
-        boolean value = operands[0];
-        for (boolean operand : operands) {
-          if (operator == InfixExpression.Operator.CONDITIONAL_AND) {
-            value &= operand;
-          } else if (operator == InfixExpression.Operator.CONDITIONAL_OR) {
-            value |= operand;
-          }
-        }
-        // return final value as object
-        return value;
-      }
-    }
-    // we don't understand given expression
-    return AstEvaluationEngine.UNKNOWN;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IExpressionEvaluator
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Object evaluate(EvaluationContext context,
+			Expression expression,
+			ITypeBinding typeBinding,
+			String typeQualifiedName) throws Exception {
+		// boolean expression
+		if ("boolean".equals(typeQualifiedName)) {
+			// single literal
+			if (expression instanceof BooleanLiteral) {
+				BooleanLiteral numberLiteral = (BooleanLiteral) expression;
+				return numberLiteral.booleanValue() ? Boolean.TRUE : Boolean.FALSE;
+			}
+			// prefix expression (!)
+			if (expression instanceof PrefixExpression) {
+				PrefixExpression prefixExpression = (PrefixExpression) expression;
+				// only "!" is possible prefix operator for string's
+				Assert.isTrue(prefixExpression.getOperator() == PrefixExpression.Operator.NOT);
+				// prepare operand value
+				Expression operand = prefixExpression.getOperand();
+				boolean operandValue = getBooleanValue(context, operand);
+				// return result
+				return !operandValue;
+			}
+			// infix expression (&&, ||)
+			if (expression instanceof InfixExpression) {
+				InfixExpression infixExpression = (InfixExpression) expression;
+				Operator operator = infixExpression.getOperator();
+				Expression leftOperand = infixExpression.getLeftOperand();
+				Expression rightOperand = infixExpression.getRightOperand();
+				// compare
+				if (operator == InfixExpression.Operator.EQUALS
+						|| operator == InfixExpression.Operator.NOT_EQUALS) {
+					Object leftObject = AstEvaluationEngine.evaluate(context, leftOperand);
+					Object rightObject = AstEvaluationEngine.evaluate(context, rightOperand);
+					// ==
+					if (operator == InfixExpression.Operator.EQUALS) {
+						return ObjectUtils.equals(leftObject, rightObject);
+					}
+					// !=
+					if (operator == InfixExpression.Operator.NOT_EQUALS) {
+						return !ObjectUtils.equals(leftObject, rightObject);
+					}
+				}
+				// prepare operands
+				boolean operands[];
+				{
+					List<Expression> extendedOperands = DomGenerics.extendedOperands(infixExpression);
+					operands = new boolean[2 + extendedOperands.size()];
+					// evaluate usual operands
+					operands[0] = getBooleanValue(context, leftOperand);
+					operands[1] = getBooleanValue(context, rightOperand);
+					// evaluate extended operands
+					for (int i = 0; i < extendedOperands.size(); i++) {
+						Expression operandExpression = extendedOperands.get(i);
+						operands[2 + i] = getBooleanValue(context, operandExpression);
+					}
+				}
+				// process each operand
+				boolean value = operands[0];
+				for (boolean operand : operands) {
+					if (operator == InfixExpression.Operator.CONDITIONAL_AND) {
+						value &= operand;
+					} else if (operator == InfixExpression.Operator.CONDITIONAL_OR) {
+						value |= operand;
+					}
+				}
+				// return final value as object
+				return value;
+			}
+		}
+		// we don't understand given expression
+		return AstEvaluationEngine.UNKNOWN;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Converts given {@link Expression} into "boolean" value.
-   */
-  private static boolean getBooleanValue(EvaluationContext context, Expression expression)
-      throws Exception {
-    Boolean value = (Boolean) AstEvaluationEngine.evaluate(context, expression);
-    return value.booleanValue();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Converts given {@link Expression} into "boolean" value.
+	 */
+	private static boolean getBooleanValue(EvaluationContext context, Expression expression)
+			throws Exception {
+		Boolean value = (Boolean) AstEvaluationEngine.evaluate(context, expression);
+		return value.booleanValue();
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/eval/evaluators/CastEvaluator.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/eval/evaluators/CastEvaluator.java
index 9b68f3e03..1a693630c 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/eval/evaluators/CastEvaluator.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/eval/evaluators/CastEvaluator.java
@@ -26,50 +26,50 @@
  * @coverage core.evaluation
  */
 public final class CastEvaluator implements IExpressionEvaluator {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IExpressionEvaluator
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Object evaluate(EvaluationContext context,
-      Expression expression,
-      ITypeBinding typeBinding,
-      String typeQualifiedName) throws Exception {
-    if (expression instanceof CastExpression) {
-      CastExpression castExpression = (CastExpression) expression;
-      // prepare value to cast
-      Object value = AstEvaluationEngine.evaluate(context, castExpression.getExpression());
-      // do cast for primities
-      if (castExpression.getType().isPrimitiveType()) {
-        Number number = (Number) value;
-        String name = AstNodeUtils.getFullyQualifiedName(castExpression.getType(), true);
-        if ("byte".equals(name)) {
-          return number.byteValue();
-        }
-        if ("short".equals(name)) {
-          return number.shortValue();
-        }
-        if ("char".equals(name)) {
-          return (char) number.intValue();
-        }
-        if ("int".equals(name)) {
-          return number.intValue();
-        }
-        if ("long".equals(name)) {
-          return number.longValue();
-        }
-        if ("float".equals(name)) {
-          return number.floatValue();
-        }
-        if ("double".equals(name)) {
-          return number.doubleValue();
-        }
-      }
-      // don't need cast for objects
-      return value;
-    }
-    // we don't understand given expression
-    return AstEvaluationEngine.UNKNOWN;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IExpressionEvaluator
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Object evaluate(EvaluationContext context,
+			Expression expression,
+			ITypeBinding typeBinding,
+			String typeQualifiedName) throws Exception {
+		if (expression instanceof CastExpression) {
+			CastExpression castExpression = (CastExpression) expression;
+			// prepare value to cast
+			Object value = AstEvaluationEngine.evaluate(context, castExpression.getExpression());
+			// do cast for primities
+			if (castExpression.getType().isPrimitiveType()) {
+				Number number = (Number) value;
+				String name = AstNodeUtils.getFullyQualifiedName(castExpression.getType(), true);
+				if ("byte".equals(name)) {
+					return number.byteValue();
+				}
+				if ("short".equals(name)) {
+					return number.shortValue();
+				}
+				if ("char".equals(name)) {
+					return (char) number.intValue();
+				}
+				if ("int".equals(name)) {
+					return number.intValue();
+				}
+				if ("long".equals(name)) {
+					return number.longValue();
+				}
+				if ("float".equals(name)) {
+					return number.floatValue();
+				}
+				if ("double".equals(name)) {
+					return number.doubleValue();
+				}
+			}
+			// don't need cast for objects
+			return value;
+		}
+		// we don't understand given expression
+		return AstEvaluationEngine.UNKNOWN;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/eval/evaluators/CharEvaluator.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/eval/evaluators/CharEvaluator.java
index 7ff4f0d29..3184ebd14 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/eval/evaluators/CharEvaluator.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/eval/evaluators/CharEvaluator.java
@@ -25,22 +25,22 @@
  * @coverage core.evaluation
  */
 public final class CharEvaluator implements IExpressionEvaluator {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IExpressionEvaluator
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Object evaluate(EvaluationContext context,
-      Expression expression,
-      ITypeBinding typeBinding,
-      String typeQualifiedName) throws Exception {
-    // character literal
-    if (expression instanceof CharacterLiteral) {
-      CharacterLiteral literal = (CharacterLiteral) expression;
-      return literal.charValue();
-    }
-    // we don't understand given expression
-    return AstEvaluationEngine.UNKNOWN;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IExpressionEvaluator
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Object evaluate(EvaluationContext context,
+			Expression expression,
+			ITypeBinding typeBinding,
+			String typeQualifiedName) throws Exception {
+		// character literal
+		if (expression instanceof CharacterLiteral) {
+			CharacterLiteral literal = (CharacterLiteral) expression;
+			return literal.charValue();
+		}
+		// we don't understand given expression
+		return AstEvaluationEngine.UNKNOWN;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/eval/evaluators/ClassEvaluator.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/eval/evaluators/ClassEvaluator.java
index b46f150d6..b587d6e84 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/eval/evaluators/ClassEvaluator.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/eval/evaluators/ClassEvaluator.java
@@ -30,51 +30,51 @@
  * @coverage core.evaluation
  */
 public final class ClassEvaluator implements IExpressionEvaluator {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IExpressionEvaluator
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Object evaluate(EvaluationContext context,
-      Expression expression,
-      ITypeBinding typeBinding,
-      String typeQualifiedName) throws Exception {
-    // TypeLiteral
-    if (expression instanceof TypeLiteral) {
-      TypeLiteral typeLiteral = (TypeLiteral) expression;
-      ITypeBinding binding = AstNodeUtils.getTypeBinding(typeLiteral.getType());
-      return loadClass(context, binding);
-    }
-    // getClass()
-    if (expression instanceof MethodInvocation) {
-      MethodInvocation invocation = (MethodInvocation) expression;
-      if (isThisInvocation(invocation) && AstNodeUtils.isMethodInvocation(invocation, "getClass()")) {
-        TypeDeclaration typeDeclaration = AstNodeUtils.getEnclosingType(invocation);
-        ITypeBinding binding = AstNodeUtils.getTypeBinding(typeDeclaration);
-        return loadClass(context, binding);
-      }
-    }
-    // we don't understand given expression
-    return AstEvaluationEngine.UNKNOWN;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IExpressionEvaluator
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Object evaluate(EvaluationContext context,
+			Expression expression,
+			ITypeBinding typeBinding,
+			String typeQualifiedName) throws Exception {
+		// TypeLiteral
+		if (expression instanceof TypeLiteral) {
+			TypeLiteral typeLiteral = (TypeLiteral) expression;
+			ITypeBinding binding = AstNodeUtils.getTypeBinding(typeLiteral.getType());
+			return loadClass(context, binding);
+		}
+		// getClass()
+		if (expression instanceof MethodInvocation) {
+			MethodInvocation invocation = (MethodInvocation) expression;
+			if (isThisInvocation(invocation) && AstNodeUtils.isMethodInvocation(invocation, "getClass()")) {
+				TypeDeclaration typeDeclaration = AstNodeUtils.getEnclosingType(invocation);
+				ITypeBinding binding = AstNodeUtils.getTypeBinding(typeDeclaration);
+				return loadClass(context, binding);
+			}
+		}
+		// we don't understand given expression
+		return AstEvaluationEngine.UNKNOWN;
+	}
 
-  /**
-   * @return <code>true</code> if target of given {@link MethodInvocation} is "this" class.
-   */
-  private static boolean isThisInvocation(MethodInvocation invocation) {
-    Expression expression = invocation.getExpression();
-    return expression == null || expression instanceof ThisExpression;
-  }
+	/**
+	 * @return <code>true</code> if target of given {@link MethodInvocation} is "this" class.
+	 */
+	private static boolean isThisInvocation(MethodInvocation invocation) {
+		Expression expression = invocation.getExpression();
+		return expression == null || expression instanceof ThisExpression;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static Object loadClass(EvaluationContext context, ITypeBinding binding) throws Exception {
-    ClassLoader classLoader = context.getClassLoader();
-    String className = AstNodeUtils.getFullyQualifiedName(binding, true);
-    return ReflectionUtils.getClassByName(classLoader, className);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static Object loadClass(EvaluationContext context, ITypeBinding binding) throws Exception {
+		ClassLoader classLoader = context.getClassLoader();
+		String className = AstNodeUtils.getFullyQualifiedName(binding, true);
+		return ReflectionUtils.getClassByName(classLoader, className);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/eval/evaluators/ConditionalExpressionEvaluator.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/eval/evaluators/ConditionalExpressionEvaluator.java
index 935bcb949..ea60cb644 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/eval/evaluators/ConditionalExpressionEvaluator.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/eval/evaluators/ConditionalExpressionEvaluator.java
@@ -25,32 +25,32 @@
  * @coverage core.evaluation
  */
 public final class ConditionalExpressionEvaluator implements IExpressionEvaluator {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IExpressionEvaluator
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Object evaluate(EvaluationContext context,
-      Expression expression,
-      ITypeBinding typeBinding,
-      String typeQualifiedName) throws Exception {
-    if (expression instanceof ConditionalExpression) {
-      ConditionalExpression conditionalExpression = (ConditionalExpression) expression;
-      // evaluate condition
-      Expression conditionExpression = conditionalExpression.getExpression();
-      boolean condition = (Boolean) AstEvaluationEngine.evaluate(context, conditionExpression);
-      // prepare Expression to evaluate
-      Expression resultExpression;
-      if (condition) {
-        resultExpression = conditionalExpression.getThenExpression();
-      } else {
-        resultExpression = conditionalExpression.getElseExpression();
-      }
-      // evaluate result
-      return AstEvaluationEngine.evaluate(context, resultExpression);
-    }
-    // we don't understand given expression
-    return AstEvaluationEngine.UNKNOWN;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IExpressionEvaluator
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Object evaluate(EvaluationContext context,
+			Expression expression,
+			ITypeBinding typeBinding,
+			String typeQualifiedName) throws Exception {
+		if (expression instanceof ConditionalExpression) {
+			ConditionalExpression conditionalExpression = (ConditionalExpression) expression;
+			// evaluate condition
+			Expression conditionExpression = conditionalExpression.getExpression();
+			boolean condition = (Boolean) AstEvaluationEngine.evaluate(context, conditionExpression);
+			// prepare Expression to evaluate
+			Expression resultExpression;
+			if (condition) {
+				resultExpression = conditionalExpression.getThenExpression();
+			} else {
+				resultExpression = conditionalExpression.getElseExpression();
+			}
+			// evaluate result
+			return AstEvaluationEngine.evaluate(context, resultExpression);
+		}
+		// we don't understand given expression
+		return AstEvaluationEngine.UNKNOWN;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/eval/evaluators/DoubleEvaluator.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/eval/evaluators/DoubleEvaluator.java
index 25988b70e..c71d4705a 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/eval/evaluators/DoubleEvaluator.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/eval/evaluators/DoubleEvaluator.java
@@ -33,103 +33,103 @@
  * @coverage core.evaluation
  */
 public final class DoubleEvaluator implements IExpressionEvaluator {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IExpressionEvaluator
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Object evaluate(EvaluationContext context,
-      Expression expression,
-      ITypeBinding typeBinding,
-      String typeQualifiedName) throws Exception {
-    // double expression
-    if ("double".equals(typeQualifiedName)) {
-      // single number literal
-      if (expression instanceof NumberLiteral) {
-        NumberLiteral numberLiteral = (NumberLiteral) expression;
-        String token = numberLiteral.getToken();
-        // remove trailing 'D'/'d'
-        token = StringUtils.stripEnd(token, "Dd");
-        // parse
-        return Double.valueOf(token);
-      }
-      // prefix expression (+, -)
-      if (expression instanceof PrefixExpression) {
-        PrefixExpression prefixExpression = (PrefixExpression) expression;
-        PrefixExpression.Operator operator = prefixExpression.getOperator();
-        //
-        Expression operand = prefixExpression.getOperand();
-        double operandValue = getDoubleValue(context, operand);
-        // +
-        if (operator == PrefixExpression.Operator.PLUS) {
-          return Double.valueOf(operandValue);
-        }
-        // -
-        if (operator == PrefixExpression.Operator.MINUS) {
-          return Double.valueOf(-operandValue);
-        }
-      }
-      // infix expression (+, -, *, /, %)
-      if (expression instanceof InfixExpression) {
-        InfixExpression infixExpression = (InfixExpression) expression;
-        // prepare operands
-        double operands[];
-        {
-          List<Expression> extendedOperands = DomGenerics.extendedOperands(infixExpression);
-          operands = new double[2 + extendedOperands.size()];
-          // evaluate usual operands
-          operands[0] = getDoubleValue(context, infixExpression.getLeftOperand());
-          operands[1] = getDoubleValue(context, infixExpression.getRightOperand());
-          // evaluate extended operands
-          for (int i = 0; i < extendedOperands.size(); i++) {
-            Expression operandExpression = extendedOperands.get(i);
-            operands[2 + i] = getDoubleValue(context, operandExpression);
-          }
-        }
-        // process each operand
-        double value = operands[0];
-        Operator operator = infixExpression.getOperator();
-        for (int i = 1; i < operands.length; i++) {
-          double operand = operands[i];
-          if (operator == InfixExpression.Operator.PLUS) {
-            value += operand;
-          } else if (operator == InfixExpression.Operator.MINUS) {
-            value -= operand;
-          } else if (operator == InfixExpression.Operator.TIMES) {
-            value *= operand;
-          } else if (operator == InfixExpression.Operator.DIVIDE) {
-            value /= operand;
-          } else if (operator == InfixExpression.Operator.REMAINDER) {
-            value %= operand;
-          }
-        }
-        // return final value as object
-        return Double.valueOf(value);
-      }
-    }
-    // we don't understand given expression
-    return AstEvaluationEngine.UNKNOWN;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IExpressionEvaluator
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Object evaluate(EvaluationContext context,
+			Expression expression,
+			ITypeBinding typeBinding,
+			String typeQualifiedName) throws Exception {
+		// double expression
+		if ("double".equals(typeQualifiedName)) {
+			// single number literal
+			if (expression instanceof NumberLiteral) {
+				NumberLiteral numberLiteral = (NumberLiteral) expression;
+				String token = numberLiteral.getToken();
+				// remove trailing 'D'/'d'
+				token = StringUtils.stripEnd(token, "Dd");
+				// parse
+				return Double.valueOf(token);
+			}
+			// prefix expression (+, -)
+			if (expression instanceof PrefixExpression) {
+				PrefixExpression prefixExpression = (PrefixExpression) expression;
+				PrefixExpression.Operator operator = prefixExpression.getOperator();
+				//
+				Expression operand = prefixExpression.getOperand();
+				double operandValue = getDoubleValue(context, operand);
+				// +
+				if (operator == PrefixExpression.Operator.PLUS) {
+					return Double.valueOf(operandValue);
+				}
+				// -
+				if (operator == PrefixExpression.Operator.MINUS) {
+					return Double.valueOf(-operandValue);
+				}
+			}
+			// infix expression (+, -, *, /, %)
+			if (expression instanceof InfixExpression) {
+				InfixExpression infixExpression = (InfixExpression) expression;
+				// prepare operands
+				double operands[];
+				{
+					List<Expression> extendedOperands = DomGenerics.extendedOperands(infixExpression);
+					operands = new double[2 + extendedOperands.size()];
+					// evaluate usual operands
+					operands[0] = getDoubleValue(context, infixExpression.getLeftOperand());
+					operands[1] = getDoubleValue(context, infixExpression.getRightOperand());
+					// evaluate extended operands
+					for (int i = 0; i < extendedOperands.size(); i++) {
+						Expression operandExpression = extendedOperands.get(i);
+						operands[2 + i] = getDoubleValue(context, operandExpression);
+					}
+				}
+				// process each operand
+				double value = operands[0];
+				Operator operator = infixExpression.getOperator();
+				for (int i = 1; i < operands.length; i++) {
+					double operand = operands[i];
+					if (operator == InfixExpression.Operator.PLUS) {
+						value += operand;
+					} else if (operator == InfixExpression.Operator.MINUS) {
+						value -= operand;
+					} else if (operator == InfixExpression.Operator.TIMES) {
+						value *= operand;
+					} else if (operator == InfixExpression.Operator.DIVIDE) {
+						value /= operand;
+					} else if (operator == InfixExpression.Operator.REMAINDER) {
+						value %= operand;
+					}
+				}
+				// return final value as object
+				return Double.valueOf(value);
+			}
+		}
+		// we don't understand given expression
+		return AstEvaluationEngine.UNKNOWN;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Converts given {@link Expression} into "double" value.
-   */
-  private static double getDoubleValue(EvaluationContext context, Expression expression)
-      throws Exception {
-    Object value = AstEvaluationEngine.evaluate(context, expression);
-    // Character
-    if (value instanceof Character) {
-      Character character = (Character) value;
-      return character.charValue();
-    }
-    // Number
-    Number number = (Number) value;
-    return number.doubleValue();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Converts given {@link Expression} into "double" value.
+	 */
+	private static double getDoubleValue(EvaluationContext context, Expression expression)
+			throws Exception {
+		Object value = AstEvaluationEngine.evaluate(context, expression);
+		// Character
+		if (value instanceof Character) {
+			Character character = (Character) value;
+			return character.charValue();
+		}
+		// Number
+		Number number = (Number) value;
+		return number.doubleValue();
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/eval/evaluators/FieldAccessEvaluator.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/eval/evaluators/FieldAccessEvaluator.java
index f1b9595b5..85c51fde5 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/eval/evaluators/FieldAccessEvaluator.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/eval/evaluators/FieldAccessEvaluator.java
@@ -34,48 +34,48 @@
  * @coverage core.evaluation
  */
 public final class FieldAccessEvaluator implements IExpressionEvaluator {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IExpressionEvaluator
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Object evaluate(EvaluationContext context,
-      Expression expression,
-      ITypeBinding typeBinding,
-      String typeQualifiedName) throws Exception {
-    if (expression instanceof FieldAccess) {
-      FieldAccess fieldAccess = (FieldAccess) expression;
-      String fieldName = fieldAccess.getName().getIdentifier();
-      // check "this" expression
-      Expression fieldAccessExpression = fieldAccess.getExpression();
-      if (fieldAccessExpression instanceof ThisExpression) {
-        // prepare field declaration
-        TypeDeclaration typeDeclaration = AstNodeUtils.getEnclosingType(expression);
-        VariableDeclarationFragment fragment =
-            AstNodeUtils.getFieldFragmentByName(typeDeclaration, fieldName);
-        Assert.isNotNull(fragment);
-        // calculate field value
-        Expression fieldInitializer = fragment.getInitializer();
-        if (fieldInitializer == null) {
-          FieldDeclaration fieldDeclaration =
-              AstNodeUtils.getEnclosingNode(fragment, FieldDeclaration.class);
-          String className = AstNodeUtils.getFullyQualifiedName(fieldDeclaration.getType(), true);
-          return ReflectionUtils.getDefaultValue(className);
-        }
-        return AstEvaluationEngine.evaluate(context, fieldInitializer);
-      }
-      // prepare expression
-      String expressionClassName = AstNodeUtils.getFullyQualifiedName(fieldAccessExpression, true);
-      Class<?> expressionClass = context.getClassLoader().loadClass(expressionClassName);
-      Object expressionValue = AstEvaluationEngine.evaluate(context, fieldAccessExpression);
-      // prepare field
-      Field field = ReflectionUtils.getFieldByName(expressionClass, fieldName);
-      Assert.isNotNull(field);
-      // return static value
-      return field.get(expressionValue);
-    }
-    // we don't understand given expression
-    return AstEvaluationEngine.UNKNOWN;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IExpressionEvaluator
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Object evaluate(EvaluationContext context,
+			Expression expression,
+			ITypeBinding typeBinding,
+			String typeQualifiedName) throws Exception {
+		if (expression instanceof FieldAccess) {
+			FieldAccess fieldAccess = (FieldAccess) expression;
+			String fieldName = fieldAccess.getName().getIdentifier();
+			// check "this" expression
+			Expression fieldAccessExpression = fieldAccess.getExpression();
+			if (fieldAccessExpression instanceof ThisExpression) {
+				// prepare field declaration
+				TypeDeclaration typeDeclaration = AstNodeUtils.getEnclosingType(expression);
+				VariableDeclarationFragment fragment =
+						AstNodeUtils.getFieldFragmentByName(typeDeclaration, fieldName);
+				Assert.isNotNull(fragment);
+				// calculate field value
+				Expression fieldInitializer = fragment.getInitializer();
+				if (fieldInitializer == null) {
+					FieldDeclaration fieldDeclaration =
+							AstNodeUtils.getEnclosingNode(fragment, FieldDeclaration.class);
+					String className = AstNodeUtils.getFullyQualifiedName(fieldDeclaration.getType(), true);
+					return ReflectionUtils.getDefaultValue(className);
+				}
+				return AstEvaluationEngine.evaluate(context, fieldInitializer);
+			}
+			// prepare expression
+			String expressionClassName = AstNodeUtils.getFullyQualifiedName(fieldAccessExpression, true);
+			Class<?> expressionClass = context.getClassLoader().loadClass(expressionClassName);
+			Object expressionValue = AstEvaluationEngine.evaluate(context, fieldAccessExpression);
+			// prepare field
+			Field field = ReflectionUtils.getFieldByName(expressionClass, fieldName);
+			Assert.isNotNull(field);
+			// return static value
+			return field.get(expressionValue);
+		}
+		// we don't understand given expression
+		return AstEvaluationEngine.UNKNOWN;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/eval/evaluators/FloatEvaluator.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/eval/evaluators/FloatEvaluator.java
index 961e42b2a..1d638240a 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/eval/evaluators/FloatEvaluator.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/eval/evaluators/FloatEvaluator.java
@@ -33,103 +33,103 @@
  * @coverage core.evaluation
  */
 public final class FloatEvaluator implements IExpressionEvaluator {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IExpressionEvaluator
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Object evaluate(EvaluationContext context,
-      Expression expression,
-      ITypeBinding typeBinding,
-      String typeQualifiedName) throws Exception {
-    // float expression
-    if ("float".equals(typeQualifiedName)) {
-      // single number literal
-      if (expression instanceof NumberLiteral) {
-        NumberLiteral numberLiteral = (NumberLiteral) expression;
-        String token = numberLiteral.getToken();
-        // remove trailing 'F'/'f'
-        token = StringUtils.stripEnd(token, "Ff");
-        // parse
-        return Float.valueOf(token);
-      }
-      // prefix expression (+, -)
-      if (expression instanceof PrefixExpression) {
-        PrefixExpression prefixExpression = (PrefixExpression) expression;
-        PrefixExpression.Operator operator = prefixExpression.getOperator();
-        //
-        Expression operand = prefixExpression.getOperand();
-        float operandValue = getFloatValue(context, operand);
-        // +
-        if (operator == PrefixExpression.Operator.PLUS) {
-          return +operandValue;
-        }
-        // -
-        if (operator == PrefixExpression.Operator.MINUS) {
-          return -operandValue;
-        }
-      }
-      // infix expression (+, -, *, /, %)
-      if (expression instanceof InfixExpression) {
-        InfixExpression infixExpression = (InfixExpression) expression;
-        // prepare operands
-        float operands[];
-        {
-          List<Expression> extendedOperands = DomGenerics.extendedOperands(infixExpression);
-          operands = new float[2 + extendedOperands.size()];
-          // evaluate usual operands
-          operands[0] = getFloatValue(context, infixExpression.getLeftOperand());
-          operands[1] = getFloatValue(context, infixExpression.getRightOperand());
-          // evaluate extended operands
-          for (int i = 0; i < extendedOperands.size(); i++) {
-            Expression operandExpression = extendedOperands.get(i);
-            operands[2 + i] = getFloatValue(context, operandExpression);
-          }
-        }
-        // process each operand
-        float value = operands[0];
-        Operator operator = infixExpression.getOperator();
-        for (int i = 1; i < operands.length; i++) {
-          float operand = operands[i];
-          if (operator == InfixExpression.Operator.PLUS) {
-            value += operand;
-          } else if (operator == InfixExpression.Operator.MINUS) {
-            value -= operand;
-          } else if (operator == InfixExpression.Operator.TIMES) {
-            value *= operand;
-          } else if (operator == InfixExpression.Operator.DIVIDE) {
-            value /= operand;
-          } else if (operator == InfixExpression.Operator.REMAINDER) {
-            value %= operand;
-          }
-        }
-        // return final value as object
-        return value;
-      }
-    }
-    // we don't understand given expression
-    return AstEvaluationEngine.UNKNOWN;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IExpressionEvaluator
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Object evaluate(EvaluationContext context,
+			Expression expression,
+			ITypeBinding typeBinding,
+			String typeQualifiedName) throws Exception {
+		// float expression
+		if ("float".equals(typeQualifiedName)) {
+			// single number literal
+			if (expression instanceof NumberLiteral) {
+				NumberLiteral numberLiteral = (NumberLiteral) expression;
+				String token = numberLiteral.getToken();
+				// remove trailing 'F'/'f'
+				token = StringUtils.stripEnd(token, "Ff");
+				// parse
+				return Float.valueOf(token);
+			}
+			// prefix expression (+, -)
+			if (expression instanceof PrefixExpression) {
+				PrefixExpression prefixExpression = (PrefixExpression) expression;
+				PrefixExpression.Operator operator = prefixExpression.getOperator();
+				//
+				Expression operand = prefixExpression.getOperand();
+				float operandValue = getFloatValue(context, operand);
+				// +
+				if (operator == PrefixExpression.Operator.PLUS) {
+					return +operandValue;
+				}
+				// -
+				if (operator == PrefixExpression.Operator.MINUS) {
+					return -operandValue;
+				}
+			}
+			// infix expression (+, -, *, /, %)
+			if (expression instanceof InfixExpression) {
+				InfixExpression infixExpression = (InfixExpression) expression;
+				// prepare operands
+				float operands[];
+				{
+					List<Expression> extendedOperands = DomGenerics.extendedOperands(infixExpression);
+					operands = new float[2 + extendedOperands.size()];
+					// evaluate usual operands
+					operands[0] = getFloatValue(context, infixExpression.getLeftOperand());
+					operands[1] = getFloatValue(context, infixExpression.getRightOperand());
+					// evaluate extended operands
+					for (int i = 0; i < extendedOperands.size(); i++) {
+						Expression operandExpression = extendedOperands.get(i);
+						operands[2 + i] = getFloatValue(context, operandExpression);
+					}
+				}
+				// process each operand
+				float value = operands[0];
+				Operator operator = infixExpression.getOperator();
+				for (int i = 1; i < operands.length; i++) {
+					float operand = operands[i];
+					if (operator == InfixExpression.Operator.PLUS) {
+						value += operand;
+					} else if (operator == InfixExpression.Operator.MINUS) {
+						value -= operand;
+					} else if (operator == InfixExpression.Operator.TIMES) {
+						value *= operand;
+					} else if (operator == InfixExpression.Operator.DIVIDE) {
+						value /= operand;
+					} else if (operator == InfixExpression.Operator.REMAINDER) {
+						value %= operand;
+					}
+				}
+				// return final value as object
+				return value;
+			}
+		}
+		// we don't understand given expression
+		return AstEvaluationEngine.UNKNOWN;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Converts given {@link Expression} into "float" value.
-   */
-  private static float getFloatValue(EvaluationContext context, Expression expression)
-      throws Exception {
-    Object value = AstEvaluationEngine.evaluate(context, expression);
-    // Character
-    if (value instanceof Character) {
-      Character character = (Character) value;
-      return character.charValue();
-    }
-    // Number
-    Number number = (Number) value;
-    return number.floatValue();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Converts given {@link Expression} into "float" value.
+	 */
+	private static float getFloatValue(EvaluationContext context, Expression expression)
+			throws Exception {
+		Object value = AstEvaluationEngine.evaluate(context, expression);
+		// Character
+		if (value instanceof Character) {
+			Character character = (Character) value;
+			return character.charValue();
+		}
+		// Number
+		Number number = (Number) value;
+		return number.floatValue();
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/eval/evaluators/IntegerEvaluator.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/eval/evaluators/IntegerEvaluator.java
index 8df538f81..32d5aafdc 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/eval/evaluators/IntegerEvaluator.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/eval/evaluators/IntegerEvaluator.java
@@ -35,148 +35,148 @@
  * @coverage core.evaluation
  */
 public final class IntegerEvaluator implements IExpressionEvaluator {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IExpressionEvaluator
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Object evaluate(EvaluationContext context,
-      Expression expression,
-      ITypeBinding typeBinding,
-      String typeQualifiedName) throws Exception {
-    // integer expression
-    if ("int".equals(typeQualifiedName)) {
-      // single number literal
-      if (expression instanceof NumberLiteral) {
-        NumberLiteral numberLiteral = (NumberLiteral) expression;
-        String token = numberLiteral.getToken();
-        // hex
-        if (token.startsWith("0x")) {
-          return Integer.valueOf(token.substring(2), 16);
-        }
-        // oct
-        if (token.startsWith("0")) {
-          return Integer.valueOf(token, 8);
-        }
-        // decimal
-        return Integer.valueOf(token);
-      }
-      // prefix expression (+, -, ~)
-      if (expression instanceof PrefixExpression) {
-        PrefixExpression prefixExpression = (PrefixExpression) expression;
-        PrefixExpression.Operator operator = prefixExpression.getOperator();
-        //
-        Expression operand = prefixExpression.getOperand();
-        int operandValue = getIntegerValue(context, operand);
-        // +
-        if (operator == PrefixExpression.Operator.PLUS) {
-          return +operandValue;
-        }
-        // -
-        if (operator == PrefixExpression.Operator.MINUS) {
-          return -operandValue;
-        }
-        // ~
-        if (operator == PrefixExpression.Operator.COMPLEMENT) {
-          return ~operandValue;
-        }
-      }
-      // postfix expression (++, --)
-      if (expression instanceof PostfixExpression) {
-        PostfixExpression postfixExpression = (PostfixExpression) expression;
-        PostfixExpression.Operator operator = postfixExpression.getOperator();
-        //
-        Expression operand = postfixExpression.getOperand();
-        {
-          ExecutionFlowDescription flowDescription = context.getFlowDescription();
-          ExpressionValue value = ExecutionFlowUtils2.getValuePrev(flowDescription, operand);
-          if (value != null) {
-            operand = value.getExpression();
-          }
-        }
-        int operandValue = getIntegerValue(context, operand);
-        // ++
-        if (operator == PostfixExpression.Operator.INCREMENT) {
-          return operandValue + 1;
-        }
-        // --
-        if (operator == PostfixExpression.Operator.DECREMENT) {
-          return operandValue - 1;
-        }
-      }
-      // infix expression (+, -, *, /, %, |, &)
-      if (expression instanceof InfixExpression) {
-        InfixExpression infixExpression = (InfixExpression) expression;
-        // prepare operands
-        int operands[];
-        {
-          List<Expression> extendedOperands = DomGenerics.extendedOperands(infixExpression);
-          operands = new int[2 + extendedOperands.size()];
-          // evaluate usual operands
-          operands[0] = getIntegerValue(context, infixExpression.getLeftOperand());
-          operands[1] = getIntegerValue(context, infixExpression.getRightOperand());
-          // evaluate extended operands
-          for (int i = 0; i < extendedOperands.size(); i++) {
-            Expression operandExpression = extendedOperands.get(i);
-            operands[2 + i] = getIntegerValue(context, operandExpression);
-          }
-        }
-        // process each operand
-        int value = operands[0];
-        Operator operator = infixExpression.getOperator();
-        for (int i = 1; i < operands.length; i++) {
-          int operand = operands[i];
-          if (operator == InfixExpression.Operator.PLUS) {
-            value += operand;
-          } else if (operator == InfixExpression.Operator.MINUS) {
-            value -= operand;
-          } else if (operator == InfixExpression.Operator.TIMES) {
-            value *= operand;
-          } else if (operator == InfixExpression.Operator.DIVIDE) {
-            value /= operand;
-          } else if (operator == InfixExpression.Operator.REMAINDER) {
-            value %= operand;
-          } else if (operator == InfixExpression.Operator.OR) {
-            value |= operand;
-          } else if (operator == InfixExpression.Operator.XOR) {
-            value ^= operand;
-          } else if (operator == InfixExpression.Operator.AND) {
-            value &= operand;
-          } else if (operator == InfixExpression.Operator.LEFT_SHIFT) {
-            value <<= operand;
-          } else if (operator == InfixExpression.Operator.RIGHT_SHIFT_SIGNED) {
-            value >>= operand;
-          } else if (operator == InfixExpression.Operator.RIGHT_SHIFT_UNSIGNED) {
-            value >>>= operand;
-          }
-        }
-        // return final value as object
-        return value;
-      }
-    }
-    // we don't understand given expression
-    return AstEvaluationEngine.UNKNOWN;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IExpressionEvaluator
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Object evaluate(EvaluationContext context,
+			Expression expression,
+			ITypeBinding typeBinding,
+			String typeQualifiedName) throws Exception {
+		// integer expression
+		if ("int".equals(typeQualifiedName)) {
+			// single number literal
+			if (expression instanceof NumberLiteral) {
+				NumberLiteral numberLiteral = (NumberLiteral) expression;
+				String token = numberLiteral.getToken();
+				// hex
+				if (token.startsWith("0x")) {
+					return Integer.valueOf(token.substring(2), 16);
+				}
+				// oct
+				if (token.startsWith("0")) {
+					return Integer.valueOf(token, 8);
+				}
+				// decimal
+				return Integer.valueOf(token);
+			}
+			// prefix expression (+, -, ~)
+			if (expression instanceof PrefixExpression) {
+				PrefixExpression prefixExpression = (PrefixExpression) expression;
+				PrefixExpression.Operator operator = prefixExpression.getOperator();
+				//
+				Expression operand = prefixExpression.getOperand();
+				int operandValue = getIntegerValue(context, operand);
+				// +
+				if (operator == PrefixExpression.Operator.PLUS) {
+					return +operandValue;
+				}
+				// -
+				if (operator == PrefixExpression.Operator.MINUS) {
+					return -operandValue;
+				}
+				// ~
+				if (operator == PrefixExpression.Operator.COMPLEMENT) {
+					return ~operandValue;
+				}
+			}
+			// postfix expression (++, --)
+			if (expression instanceof PostfixExpression) {
+				PostfixExpression postfixExpression = (PostfixExpression) expression;
+				PostfixExpression.Operator operator = postfixExpression.getOperator();
+				//
+				Expression operand = postfixExpression.getOperand();
+				{
+					ExecutionFlowDescription flowDescription = context.getFlowDescription();
+					ExpressionValue value = ExecutionFlowUtils2.getValuePrev(flowDescription, operand);
+					if (value != null) {
+						operand = value.getExpression();
+					}
+				}
+				int operandValue = getIntegerValue(context, operand);
+				// ++
+				if (operator == PostfixExpression.Operator.INCREMENT) {
+					return operandValue + 1;
+				}
+				// --
+				if (operator == PostfixExpression.Operator.DECREMENT) {
+					return operandValue - 1;
+				}
+			}
+			// infix expression (+, -, *, /, %, |, &)
+			if (expression instanceof InfixExpression) {
+				InfixExpression infixExpression = (InfixExpression) expression;
+				// prepare operands
+				int operands[];
+				{
+					List<Expression> extendedOperands = DomGenerics.extendedOperands(infixExpression);
+					operands = new int[2 + extendedOperands.size()];
+					// evaluate usual operands
+					operands[0] = getIntegerValue(context, infixExpression.getLeftOperand());
+					operands[1] = getIntegerValue(context, infixExpression.getRightOperand());
+					// evaluate extended operands
+					for (int i = 0; i < extendedOperands.size(); i++) {
+						Expression operandExpression = extendedOperands.get(i);
+						operands[2 + i] = getIntegerValue(context, operandExpression);
+					}
+				}
+				// process each operand
+				int value = operands[0];
+				Operator operator = infixExpression.getOperator();
+				for (int i = 1; i < operands.length; i++) {
+					int operand = operands[i];
+					if (operator == InfixExpression.Operator.PLUS) {
+						value += operand;
+					} else if (operator == InfixExpression.Operator.MINUS) {
+						value -= operand;
+					} else if (operator == InfixExpression.Operator.TIMES) {
+						value *= operand;
+					} else if (operator == InfixExpression.Operator.DIVIDE) {
+						value /= operand;
+					} else if (operator == InfixExpression.Operator.REMAINDER) {
+						value %= operand;
+					} else if (operator == InfixExpression.Operator.OR) {
+						value |= operand;
+					} else if (operator == InfixExpression.Operator.XOR) {
+						value ^= operand;
+					} else if (operator == InfixExpression.Operator.AND) {
+						value &= operand;
+					} else if (operator == InfixExpression.Operator.LEFT_SHIFT) {
+						value <<= operand;
+					} else if (operator == InfixExpression.Operator.RIGHT_SHIFT_SIGNED) {
+						value >>= operand;
+					} else if (operator == InfixExpression.Operator.RIGHT_SHIFT_UNSIGNED) {
+						value >>>= operand;
+					}
+				}
+				// return final value as object
+				return value;
+			}
+		}
+		// we don't understand given expression
+		return AstEvaluationEngine.UNKNOWN;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Converts given {@link Expression} into "int" value.
-   */
-  private static int getIntegerValue(EvaluationContext context, Expression expression)
-      throws Exception {
-    Object value = AstEvaluationEngine.evaluate(context, expression);
-    // Character
-    if (value instanceof Character) {
-      Character character = (Character) value;
-      return character.charValue();
-    }
-    // Number
-    Number number = (Number) value;
-    return number.intValue();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Converts given {@link Expression} into "int" value.
+	 */
+	private static int getIntegerValue(EvaluationContext context, Expression expression)
+			throws Exception {
+		Object value = AstEvaluationEngine.evaluate(context, expression);
+		// Character
+		if (value instanceof Character) {
+			Character character = (Character) value;
+			return character.charValue();
+		}
+		// Number
+		Number number = (Number) value;
+		return number.intValue();
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/eval/evaluators/InvocationEvaluator.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/eval/evaluators/InvocationEvaluator.java
index 9de2938b3..b875f9673 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/eval/evaluators/InvocationEvaluator.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/eval/evaluators/InvocationEvaluator.java
@@ -64,582 +64,582 @@
  * @coverage core.evaluation
  */
 public final class InvocationEvaluator implements IExpressionEvaluator {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IExpressionEvaluator
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Object evaluate(EvaluationContext context,
-      Expression expression,
-      ITypeBinding typeBinding,
-      String typeQualifiedName) throws Exception {
-    if (expression instanceof MethodInvocation) {
-      MethodInvocation invocation = (MethodInvocation) expression;
-      return evaluate(context, invocation);
-    }
-    if (expression instanceof SuperMethodInvocation) {
-      SuperMethodInvocation invocation = (SuperMethodInvocation) expression;
-      return evaluate(context, invocation);
-    }
-    if (expression instanceof ClassInstanceCreation) {
-      ClassInstanceCreation creation = (ClassInstanceCreation) expression;
-      return evaluate(context, creation, typeBinding, typeQualifiedName);
-    }
-    // we don't understand given expression
-    return AstEvaluationEngine.UNKNOWN;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // MethodInvocation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Object evaluate(EvaluationContext context, MethodInvocation invocation) throws Exception {
-    // prepare binding
-    IMethodBinding methodBinding = AstNodeUtils.getMethodBinding(invocation);
-    Assert.isNotNull(methodBinding);
-    //
-    Expression invocationExpression = invocation.getExpression();
-    if (AstNodeUtils.isStatic(methodBinding)) {
-      ITypeBinding targetTypeBinding = methodBinding.getDeclaringClass();
-      Assert.isNotNull2(targetTypeBinding, "{0} {1}", invocation, methodBinding);
-      return invokeMethod(context, null, targetTypeBinding, invocation, methodBinding);
-    } else {
-      // local instance method
-      if (invocationExpression == null) {
-        MethodDeclaration localMethod = AstNodeUtils.getLocalMethodDeclaration(invocation);
-        if (localMethod != null) {
-          return evaluateLocalMethodInvocation(context, localMethod, invocation);
-        }
-      }
-      // prepare value of expression
-      Object expressionValue = AstEvaluationEngine.evaluate(context, invocationExpression);
-      Assert.isTrueException(
-          expressionValue != null,
-          ICoreExceptionConstants.EVAL_NULL_INVOCATION_EXPRESSION,
-          context.getSource(invocation));
-      // invoke method
-      return invokeMethod(context, expressionValue, null, invocation, methodBinding);
-    }
-  }
-
-  private Object evaluateLocalMethodInvocation(EvaluationContext context,
-      MethodDeclaration methodDeclaration,
-      MethodInvocation invocation) throws Exception {
-    // try to evaluate method with "@wbp.eval.method.return parameterName" tag
-    Javadoc javadoc = methodDeclaration.getJavadoc();
-    if (javadoc != null) {
-      for (TagElement tag : DomGenerics.tags(javadoc)) {
-        if (StringUtils.equals(tag.getTagName(), "@wbp.eval.method.return")) {
-          List<ASTNode> fragments = DomGenerics.fragments(tag);
-          if (!fragments.isEmpty() && fragments.get(0) instanceof TextElement) {
-            TextElement textElement = (TextElement) tag.fragments().get(0);
-            String returnSource = textElement.getText().trim();
-            return evaluateInvocationSourceExpression(
-                context,
-                methodDeclaration,
-                invocation,
-                returnSource);
-          }
-        }
-      }
-    }
-    // try to evaluate simple "return Expr;"
-    if (methodDeclaration.parameters().isEmpty()) {
-      List<Statement> statements = DomGenerics.statements(methodDeclaration);
-      if (statements.size() == 1 && statements.get(0) instanceof ReturnStatement) {
-        ReturnStatement returnStatement = (ReturnStatement) statements.get(0);
-        try {
-          return AstEvaluationEngine.evaluate(context, returnStatement.getExpression());
-        } catch (Throwable e) {
-          throw new DesignerException(ICoreExceptionConstants.EVAL_LOCAL_METHOD_INVOCATION,
-              e,
-              context.getSource(invocation));
-        }
-      }
-    }
-    // in general case we can not invoke local instance method
-    throw new DesignerException(ICoreExceptionConstants.EVAL_LOCAL_METHOD_INVOCATION,
-        context.getSource(invocation));
-  }
-
-  /**
-   * @return the result of evaluation for {@link String} expression based on values of arguments
-   *         from {@link MethodInvocation}. It can use parameter names of {@link MethodDeclaration}.
-   */
-  private Object evaluateInvocationSourceExpression(EvaluationContext context,
-      MethodDeclaration methodDeclaration,
-      MethodInvocation invocation,
-      String expressionSource) throws Exception {
-    int index = -1;
-    List<SingleVariableDeclaration> parameters = DomGenerics.parameters(methodDeclaration);
-    for (SingleVariableDeclaration parameter : parameters) {
-      if (parameter.getName().getIdentifier().equals(expressionSource)) {
-        index = parameters.indexOf(parameter);
-        break;
-      }
-    }
-    Assert.isTrue(
-        index != -1,
-        "Can not evaluate %s for %s invocation of %s",
-        expressionSource,
-        invocation,
-        methodDeclaration);
-    return AstEvaluationEngine.evaluate(context, DomGenerics.arguments(invocation).get(index));
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // SuperMethodInvocation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * We mark root {@link ASTNode} with this key to specify that currently invoked {@link Method} was
-   * initiated by {@link SuperMethodInvocation}.
-   */
-  public static final String SUPER_MI_KEY = "SUPER_MI_KEY";
-
-  private Object evaluate(EvaluationContext context, SuperMethodInvocation invocation)
-      throws Exception {
-    // prepare target
-    Object thisValue = AstEvaluationEngine.evaluate(context, null);
-    // prepare method
-    Method method;
-    {
-      IMethodBinding methodBinding = AstNodeUtils.getMethodBinding(invocation);
-      Assert.isNotNull(methodBinding);
-      method = getReflectionMethod(thisValue.getClass(), methodBinding);
-    }
-    // prepare argument values
-    Object[] argumentValues = getArgumentValues(context, DomGenerics.arguments(invocation), true);
-    // invoke method
-    try {
-      invocation.getRoot().setProperty(SUPER_MI_KEY, Boolean.TRUE);
-      return method.invoke(thisValue, argumentValues);
-    } catch (Throwable e) {
-      throw new DesignerException(ICoreExceptionConstants.EVAL_SUPER_METHOD,
-          e,
-          context.getSource(invocation),
-          method.toString(),
-          getArguments_toString(argumentValues),
-          AstEvaluationEngine.getUserStackTrace(e));
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ClassInstanceCreation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Object evaluate(EvaluationContext context,
-      ClassInstanceCreation creation,
-      ITypeBinding typeBinding,
-      String typeQualifiedName) throws Exception {
-    // prepare binding
-    IMethodBinding methodBinding = AstNodeUtils.getCreationBinding(creation);
-    Assert.isNotNull(methodBinding);
-    // ignore "inner not static"
-    if (typeBinding.isMember() && !AstNodeUtils.isStatic(typeBinding)) {
-      return null;
-    }
-    // prepare argument values
-    List<Expression> argumentExpressions = DomGenerics.arguments(creation);
-    Object[] argumentValues = getArgumentValues(context, argumentExpressions, true);
-    argumentValues = updateForVarArgs(context, methodBinding, argumentValues);
-    // create object
-    if (typeBinding.isAnonymous()) {
-      return createAnonymousObject(context, creation, typeBinding, methodBinding, argumentValues);
-    } else {
-      // prepare constructor
-      Class<?> clazz = getTypeBindingClass(context, typeBinding);
-      Constructor<?> constructor = getReflectionConstructor(clazz, methodBinding);
-      try {
-        // try to use interceptors
-        {
-          Object result =
-              tryInterceptors(context, creation, typeBinding, clazz, constructor, argumentValues);
-          if (result != AstEvaluationEngine.UNKNOWN) {
-            return result;
-          }
-        }
-        // create object using constructor
-        fixThisExpressionArguments(constructor, argumentExpressions, argumentValues);
-        return constructor.newInstance(argumentValues);
-      } catch (Throwable e) {
-        if (e instanceof InvocationTargetException) {
-          e = ((InvocationTargetException) e).getCause();
-        }
-        throwAlternativeException(e);
-        throw createConstructorProblemException(context, creation, argumentValues, constructor, e);
-      }
-    }
-  }
-
-  private static Object createAnonymousObject(final EvaluationContext context,
-      final ClassInstanceCreation creation,
-      ITypeBinding typeBinding,
-      IMethodBinding methodBinding,
-      Object[] argumentValues) throws Exception {
-    ITypeBinding typeBindingConcrete = typeBinding;
-    while (typeBindingConcrete.isAnonymous() || AstNodeUtils.isAbstract(typeBindingConcrete)) {
-      typeBindingConcrete = typeBindingConcrete.getSuperclass();
-    }
-    // allow interceptors to evaluate
-    for (InvocationEvaluatorInterceptor interceptor : getInterceptors()) {
-      Object result =
-          interceptor.evaluateAnonymous(
-              context,
-              creation,
-              typeBinding,
-              typeBindingConcrete,
-              methodBinding,
-              argumentValues);
-      if (result != AstEvaluationEngine.UNKNOWN) {
-        return result;
-      }
-    }
-    // evaluate listeners and handlers
-    if (isAnonymousEventListener(typeBinding)) {
-      return AstEvaluationEngine.createAnonymousInstance(context, methodBinding, argumentValues);
-    }
-    // fail
-    throw new AnonymousEvaluationError();
-  }
-
-  /**
-   * @return <code>true</code> if given {@link ITypeBinding} is event listener, so we should create
-   *         its instance. We need this because if this listener is part of constructor, then
-   *         component may check that listener is not <code>null</code>.
-   */
-  private static boolean isAnonymousEventListener(ITypeBinding typeBinding) {
-    if (typeBinding == null) {
-      return false;
-    }
-    // this type
-    String name = typeBinding.getName();
-    if (name.endsWith("Listener") || name.endsWith("Handler")) {
-      return true;
-    }
-    // interfaces
-    for (ITypeBinding intf : typeBinding.getInterfaces()) {
-      if (isAnonymousEventListener(intf)) {
-        return true;
-      }
-    }
-    // super class
-    return isAnonymousEventListener(typeBinding.getSuperclass());
-  }
-
-  /**
-   * Stores the enhanced classes for each given {@link EvaluationContext}. All
-   * classes are uniquely identified by their base class and all implementing
-   * interfaces. The enhanced classes call return a default value for abstract
-   * methods. For all other methods, the parent method is invoked. Each class is
-   * unmodifiable and may be reused.
-   */
-  private static TypeCache<TypeCache.SimpleKey> PROXY_CACHE = new TypeCache.WithInlineExpunction<>(TypeCache.Sort.WEAK);
-
-  /**
-   * @param methodBinding
-   *          the {@link IMethodBinding} of constructor.
-   *
-   * @return the instance of anonymous {@link ClassInstanceCreation}, intercepting methods using
-   *         given {@link Implementation}.
-   */
-  public static Object createAnonymousInstance(EvaluationContext context,
-      IMethodBinding methodBinding,
-      Object[] argumentValues) throws Exception {
-    ITypeBinding typeBinding = methodBinding.getDeclaringClass();
-    Class<?> creationClass = getTypeBindingClass(context, typeBinding.getSuperclass());
-    Class<?>[] creationInterfaces = getClasses(context, typeBinding.getInterfaces());
-    Class<?>[] argumentTypes = getClasses(context, methodBinding.getParameterTypes());
-
-    ClassLoader proxyClassLoader = context.getClassLoader();
-    TypeCache.SimpleKey proxyKey = new TypeCache.SimpleKey(creationClass, creationInterfaces);
-
-    // create object using ByteBuddy
-    DynamicType.Builder<?> builder = new ByteBuddy() //
-        .subclass(creationClass) //
-        .implement(creationInterfaces) //
-        .method(ElementMatchers.any()) //
-        .intercept(SuperMethodCall.INSTANCE) //
-        .method(ElementMatchers.isAbstract()) //
-        .intercept(DefaultMethodInterceptor.INSTANCE);
-
-    return PROXY_CACHE //
-        .findOrInsert(proxyClassLoader, proxyKey, () -> builder.make().load(proxyClassLoader).getLoaded()) //
-        .getConstructor(argumentTypes) //
-        .newInstance(argumentValues);
-  }
-
-  /**
-   * Sometimes we known that some pieces of code in Internet or samples are not compatible with
-   * WindowBuilder and we want to show specific exception/message for them.
-   *
-   * @throws Error
-   *           to show instead of original {@link Throwable}.
-   */
-  private static void throwAlternativeException(Throwable e) {
-    List<InvocationEvaluatorInterceptor> interceptors = getInterceptors();
-    for (InvocationEvaluatorInterceptor interceptor : interceptors) {
-      Throwable result = interceptor.rewriteException(e);
-      if (result instanceof Error) {
-        throw (Error) result;
-      }
-    }
-  }
-
-  private static Object tryInterceptors(EvaluationContext context,
-      ClassInstanceCreation creation,
-      ITypeBinding typeBinding,
-      Class<?> clazz,
-      Constructor<?> explicitConstructor,
-      Object[] argumentValues) throws Exception {
-    for (InvocationEvaluatorInterceptor interceptor : getInterceptors()) {
-      Object result =
-          interceptor.evaluate(
-              context,
-              creation,
-              typeBinding,
-              clazz,
-              explicitConstructor,
-              argumentValues);
-      if (result != AstEvaluationEngine.UNKNOWN) {
-        return result;
-      }
-    }
-    return AstEvaluationEngine.UNKNOWN;
-  }
-
-  /**
-   * If {@link ThisExpression} argument values is not compatible with parameter, replace it with
-   * <code>null</code>.
-   */
-  private static void fixThisExpressionArguments(Constructor<?> constructor,
-      List<Expression> argumentExpressions,
-      Object[] argumentValues) {
-    Class<?>[] parameterTypes = constructor.getParameterTypes();
-    Assert.isTrue(
-        parameterTypes.length == argumentValues.length,
-        "Incompatible count of parameters %s and arguments %s",
-        parameterTypes.length,
-        argumentValues.length);
-    for (int i = 0; i < parameterTypes.length; i++) {
-      // empty varArgs
-      if (i >= argumentExpressions.size()) {
-        break;
-      }
-      // check for ThisExpression
-      if (argumentExpressions.get(i) instanceof ThisExpression) {
-        Class<?> parameterType = parameterTypes[i];
-        Object argument = argumentValues[i];
-        if (argument != null && !parameterType.isAssignableFrom(argument.getClass())) {
-          argumentValues[i] = null;
-        }
-      }
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Finds method using {@link IMethodBinding} and invokes it for given object instance.
-   */
-  private static Object invokeMethod(EvaluationContext context,
-      Object targetValue,
-      ITypeBinding targetTypeBinding,
-      MethodInvocation invocation,
-      IMethodBinding methodBinding) throws Exception {
-    // prepare class
-    Class<?> clazz;
-    if (targetTypeBinding != null) {
-      clazz = getTypeBindingClass(context, targetTypeBinding);
-    } else {
-      clazz = targetValue.getClass();
-    }
-    // prepare argument values
-    Object[] argumentValues = getArgumentValues(context, DomGenerics.arguments(invocation), false);
-    argumentValues = updateForVarArgs(context, methodBinding, argumentValues);
-    // prepare method
-    Method method = getReflectionMethod(clazz, methodBinding);
-    // try to use interceptors
-    {
-      Object result =
-          tryInterceptors(context, invocation, methodBinding, clazz, method, argumentValues);
-      if (result != AstEvaluationEngine.UNKNOWN) {
-        return result;
-      }
-    }
-    // invoke method
-    try {
-      return method.invoke(targetValue, argumentValues);
-    } catch (Throwable e) {
-      throw new DesignerException(ICoreExceptionConstants.EVAL_METHOD,
-          e,
-          context.getSource(invocation),
-          method.toString(),
-          getArguments_toString(argumentValues));
-    }
-  }
-
-  private static Object tryInterceptors(EvaluationContext context,
-      MethodInvocation invocation,
-      IMethodBinding methodBinding,
-      Class<?> clazz,
-      Method method,
-      Object[] argumentValues) {
-    for (InvocationEvaluatorInterceptor interceptor : getInterceptors()) {
-      Object result =
-          interceptor.evaluate(context, invocation, methodBinding, clazz, method, argumentValues);
-      if (result != AstEvaluationEngine.UNKNOWN) {
-        return result;
-      }
-    }
-    return AstEvaluationEngine.UNKNOWN;
-  }
-
-  /**
-   * @return the {@link Class} corresponding given {@link ITypeBinding}.
-   */
-  private static Class<?> getTypeBindingClass(EvaluationContext context, ITypeBinding typeBinding)
-      throws Exception {
-    ClassLoader classLoader = context.getClassLoader();
-    return AstReflectionUtils.getClass(classLoader, typeBinding);
-  }
-
-  /**
-   * @return array of {@link Class}'s for array of {@link ITypeBinding}.
-   */
-  private static Class<?>[] getClasses(EvaluationContext context, ITypeBinding[] typeBindings)
-      throws Exception {
-    Class<?>[] classes = new Class<?>[typeBindings.length];
-    for (int i = 0; i < typeBindings.length; i++) {
-      ITypeBinding typeBinding = typeBindings[i];
-      classes[i] = getTypeBindingClass(context, typeBinding);
-    }
-    return classes;
-  }
-
-  /**
-   * @return the reflection {@link Method} from given class for given {@link IMethodBinding}
-   */
-  private static Method getReflectionMethod(Class<?> clazz, IMethodBinding binding)
-      throws Exception {
-    String signature = AstNodeUtils.getMethodSignature(binding);
-    Method method;
-    // ask interceptors
-    for (InvocationEvaluatorInterceptor interceptor : getInterceptors()) {
-      method = interceptor.resolveMethod(clazz, signature);
-      if (method != null) {
-        return method;
-      }
-    }
-    //
-    method = AstReflectionUtils.getMethod(clazz, binding);
-    // done
-    Assert.isNotNull2(method, "Method {0} not found in {1}", signature, clazz);
-    return method;
-  }
-
-  /**
-   * @return the reflection {@link Constructor} from given {@link Class}.
-   */
-  private static Constructor<?> getReflectionConstructor(Class<?> clazz, IMethodBinding binding)
-      throws Exception {
-    String signature = AstNodeUtils.getMethodSignature(binding);
-    Constructor<?> constructor;
-    // usual signature
-    {
-      constructor = ReflectionUtils.getConstructorBySignature(clazz, signature);
-    }
-    // not found, try generic signature
-    if (constructor == null) {
-      IMethodBinding genericBinding = binding.getMethodDeclaration();
-      if (genericBinding != binding) {
-        String genericSignature = AstNodeUtils.getMethodSignature(genericBinding);
-        constructor = ReflectionUtils.getConstructorByGenericSignature(clazz, genericSignature);
-      }
-    }
-    // done
-    Assert.isNotNull2(constructor, "No constructor {0} in {1}.", signature, clazz);
-    return constructor;
-  }
-
-  /**
-   * @return values of given {@link Expression} list.
-   */
-  private static Object[] getArgumentValues(EvaluationContext context,
-      List<Expression> arguments,
-      boolean forConstructor) throws Exception {
-    int argumentCount = arguments.size();
-    Object argumentValues[] = new Object[argumentCount];
-    for (int i = 0; i < argumentCount; i++) {
-      Expression argument = arguments.get(i);
-      try {
-        argumentValues[i] = AstEvaluationEngine.evaluate(context, argument);
-      } catch (Error e) {
-        if (forConstructor && AnonymousEvaluationError.is(e)) {
-          argumentValues[i] = null;
-        } else {
-          throw e;
-        }
-      }
-    }
-    return argumentValues;
-  }
-
-  private static Object[] updateForVarArgs(EvaluationContext context,
-      IMethodBinding methodBinding,
-      Object[] values) throws Exception {
-    ClassLoader classLoader = context.getClassLoader();
-    return AstReflectionUtils.updateForVarArgs(classLoader, methodBinding, values);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exception utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link DesignerException} that describes problem during
-   *         {@link ClassInstanceCreation} evaluation.
-   */
-  private static DesignerException createConstructorProblemException(EvaluationContext context,
-      ClassInstanceCreation creation,
-      Object[] argumentValues,
-      Constructor<?> constructor,
-      Throwable e) throws DesignerException {
-    return new DesignerException(ICoreExceptionConstants.EVAL_CONSTRUCTOR,
-        e,
-        context.getSource(creation),
-        ReflectionUtils.getShortConstructorString(constructor),
-        getArguments_toString(argumentValues),
-        AstEvaluationEngine.getUserStackTrace(e));
-  }
-
-  /**
-   * @return {@link String} presentation of given argument values, safely.
-   */
-  public static String getArguments_toString(final Object[] arguments) {
-    return ExecutionUtils.runObjectIgnore(new RunnableObjectEx<String>() {
-      @Override
-      public String runObject() throws Exception {
-        return ArrayUtils.toString(arguments);
-      }
-    }, "<Exception during arguments.toString()>");
-  }
-
-  /**
-   * @return all registered {@link InvocationEvaluatorInterceptor}'s.
-   */
-  private static List<InvocationEvaluatorInterceptor> getInterceptors() {
-    return ExternalFactoriesHelper.getElementsInstances(
-        InvocationEvaluatorInterceptor.class,
-        "org.eclipse.wb.core.invocationEvaluatorInterceptors",
-        "interceptor");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IExpressionEvaluator
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Object evaluate(EvaluationContext context,
+			Expression expression,
+			ITypeBinding typeBinding,
+			String typeQualifiedName) throws Exception {
+		if (expression instanceof MethodInvocation) {
+			MethodInvocation invocation = (MethodInvocation) expression;
+			return evaluate(context, invocation);
+		}
+		if (expression instanceof SuperMethodInvocation) {
+			SuperMethodInvocation invocation = (SuperMethodInvocation) expression;
+			return evaluate(context, invocation);
+		}
+		if (expression instanceof ClassInstanceCreation) {
+			ClassInstanceCreation creation = (ClassInstanceCreation) expression;
+			return evaluate(context, creation, typeBinding, typeQualifiedName);
+		}
+		// we don't understand given expression
+		return AstEvaluationEngine.UNKNOWN;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// MethodInvocation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Object evaluate(EvaluationContext context, MethodInvocation invocation) throws Exception {
+		// prepare binding
+		IMethodBinding methodBinding = AstNodeUtils.getMethodBinding(invocation);
+		Assert.isNotNull(methodBinding);
+		//
+		Expression invocationExpression = invocation.getExpression();
+		if (AstNodeUtils.isStatic(methodBinding)) {
+			ITypeBinding targetTypeBinding = methodBinding.getDeclaringClass();
+			Assert.isNotNull2(targetTypeBinding, "{0} {1}", invocation, methodBinding);
+			return invokeMethod(context, null, targetTypeBinding, invocation, methodBinding);
+		} else {
+			// local instance method
+			if (invocationExpression == null) {
+				MethodDeclaration localMethod = AstNodeUtils.getLocalMethodDeclaration(invocation);
+				if (localMethod != null) {
+					return evaluateLocalMethodInvocation(context, localMethod, invocation);
+				}
+			}
+			// prepare value of expression
+			Object expressionValue = AstEvaluationEngine.evaluate(context, invocationExpression);
+			Assert.isTrueException(
+					expressionValue != null,
+					ICoreExceptionConstants.EVAL_NULL_INVOCATION_EXPRESSION,
+					context.getSource(invocation));
+			// invoke method
+			return invokeMethod(context, expressionValue, null, invocation, methodBinding);
+		}
+	}
+
+	private Object evaluateLocalMethodInvocation(EvaluationContext context,
+			MethodDeclaration methodDeclaration,
+			MethodInvocation invocation) throws Exception {
+		// try to evaluate method with "@wbp.eval.method.return parameterName" tag
+		Javadoc javadoc = methodDeclaration.getJavadoc();
+		if (javadoc != null) {
+			for (TagElement tag : DomGenerics.tags(javadoc)) {
+				if (StringUtils.equals(tag.getTagName(), "@wbp.eval.method.return")) {
+					List<ASTNode> fragments = DomGenerics.fragments(tag);
+					if (!fragments.isEmpty() && fragments.get(0) instanceof TextElement) {
+						TextElement textElement = (TextElement) tag.fragments().get(0);
+						String returnSource = textElement.getText().trim();
+						return evaluateInvocationSourceExpression(
+								context,
+								methodDeclaration,
+								invocation,
+								returnSource);
+					}
+				}
+			}
+		}
+		// try to evaluate simple "return Expr;"
+		if (methodDeclaration.parameters().isEmpty()) {
+			List<Statement> statements = DomGenerics.statements(methodDeclaration);
+			if (statements.size() == 1 && statements.get(0) instanceof ReturnStatement) {
+				ReturnStatement returnStatement = (ReturnStatement) statements.get(0);
+				try {
+					return AstEvaluationEngine.evaluate(context, returnStatement.getExpression());
+				} catch (Throwable e) {
+					throw new DesignerException(ICoreExceptionConstants.EVAL_LOCAL_METHOD_INVOCATION,
+							e,
+							context.getSource(invocation));
+				}
+			}
+		}
+		// in general case we can not invoke local instance method
+		throw new DesignerException(ICoreExceptionConstants.EVAL_LOCAL_METHOD_INVOCATION,
+				context.getSource(invocation));
+	}
+
+	/**
+	 * @return the result of evaluation for {@link String} expression based on values of arguments
+	 *         from {@link MethodInvocation}. It can use parameter names of {@link MethodDeclaration}.
+	 */
+	private Object evaluateInvocationSourceExpression(EvaluationContext context,
+			MethodDeclaration methodDeclaration,
+			MethodInvocation invocation,
+			String expressionSource) throws Exception {
+		int index = -1;
+		List<SingleVariableDeclaration> parameters = DomGenerics.parameters(methodDeclaration);
+		for (SingleVariableDeclaration parameter : parameters) {
+			if (parameter.getName().getIdentifier().equals(expressionSource)) {
+				index = parameters.indexOf(parameter);
+				break;
+			}
+		}
+		Assert.isTrue(
+				index != -1,
+				"Can not evaluate %s for %s invocation of %s",
+				expressionSource,
+				invocation,
+				methodDeclaration);
+		return AstEvaluationEngine.evaluate(context, DomGenerics.arguments(invocation).get(index));
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// SuperMethodInvocation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * We mark root {@link ASTNode} with this key to specify that currently invoked {@link Method} was
+	 * initiated by {@link SuperMethodInvocation}.
+	 */
+	public static final String SUPER_MI_KEY = "SUPER_MI_KEY";
+
+	private Object evaluate(EvaluationContext context, SuperMethodInvocation invocation)
+			throws Exception {
+		// prepare target
+		Object thisValue = AstEvaluationEngine.evaluate(context, null);
+		// prepare method
+		Method method;
+		{
+			IMethodBinding methodBinding = AstNodeUtils.getMethodBinding(invocation);
+			Assert.isNotNull(methodBinding);
+			method = getReflectionMethod(thisValue.getClass(), methodBinding);
+		}
+		// prepare argument values
+		Object[] argumentValues = getArgumentValues(context, DomGenerics.arguments(invocation), true);
+		// invoke method
+		try {
+			invocation.getRoot().setProperty(SUPER_MI_KEY, Boolean.TRUE);
+			return method.invoke(thisValue, argumentValues);
+		} catch (Throwable e) {
+			throw new DesignerException(ICoreExceptionConstants.EVAL_SUPER_METHOD,
+					e,
+					context.getSource(invocation),
+					method.toString(),
+					getArguments_toString(argumentValues),
+					AstEvaluationEngine.getUserStackTrace(e));
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ClassInstanceCreation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Object evaluate(EvaluationContext context,
+			ClassInstanceCreation creation,
+			ITypeBinding typeBinding,
+			String typeQualifiedName) throws Exception {
+		// prepare binding
+		IMethodBinding methodBinding = AstNodeUtils.getCreationBinding(creation);
+		Assert.isNotNull(methodBinding);
+		// ignore "inner not static"
+		if (typeBinding.isMember() && !AstNodeUtils.isStatic(typeBinding)) {
+			return null;
+		}
+		// prepare argument values
+		List<Expression> argumentExpressions = DomGenerics.arguments(creation);
+		Object[] argumentValues = getArgumentValues(context, argumentExpressions, true);
+		argumentValues = updateForVarArgs(context, methodBinding, argumentValues);
+		// create object
+		if (typeBinding.isAnonymous()) {
+			return createAnonymousObject(context, creation, typeBinding, methodBinding, argumentValues);
+		} else {
+			// prepare constructor
+			Class<?> clazz = getTypeBindingClass(context, typeBinding);
+			Constructor<?> constructor = getReflectionConstructor(clazz, methodBinding);
+			try {
+				// try to use interceptors
+				{
+					Object result =
+							tryInterceptors(context, creation, typeBinding, clazz, constructor, argumentValues);
+					if (result != AstEvaluationEngine.UNKNOWN) {
+						return result;
+					}
+				}
+				// create object using constructor
+				fixThisExpressionArguments(constructor, argumentExpressions, argumentValues);
+				return constructor.newInstance(argumentValues);
+			} catch (Throwable e) {
+				if (e instanceof InvocationTargetException) {
+					e = ((InvocationTargetException) e).getCause();
+				}
+				throwAlternativeException(e);
+				throw createConstructorProblemException(context, creation, argumentValues, constructor, e);
+			}
+		}
+	}
+
+	private static Object createAnonymousObject(final EvaluationContext context,
+			final ClassInstanceCreation creation,
+			ITypeBinding typeBinding,
+			IMethodBinding methodBinding,
+			Object[] argumentValues) throws Exception {
+		ITypeBinding typeBindingConcrete = typeBinding;
+		while (typeBindingConcrete.isAnonymous() || AstNodeUtils.isAbstract(typeBindingConcrete)) {
+			typeBindingConcrete = typeBindingConcrete.getSuperclass();
+		}
+		// allow interceptors to evaluate
+		for (InvocationEvaluatorInterceptor interceptor : getInterceptors()) {
+			Object result =
+					interceptor.evaluateAnonymous(
+							context,
+							creation,
+							typeBinding,
+							typeBindingConcrete,
+							methodBinding,
+							argumentValues);
+			if (result != AstEvaluationEngine.UNKNOWN) {
+				return result;
+			}
+		}
+		// evaluate listeners and handlers
+		if (isAnonymousEventListener(typeBinding)) {
+			return AstEvaluationEngine.createAnonymousInstance(context, methodBinding, argumentValues);
+		}
+		// fail
+		throw new AnonymousEvaluationError();
+	}
+
+	/**
+	 * @return <code>true</code> if given {@link ITypeBinding} is event listener, so we should create
+	 *         its instance. We need this because if this listener is part of constructor, then
+	 *         component may check that listener is not <code>null</code>.
+	 */
+	private static boolean isAnonymousEventListener(ITypeBinding typeBinding) {
+		if (typeBinding == null) {
+			return false;
+		}
+		// this type
+		String name = typeBinding.getName();
+		if (name.endsWith("Listener") || name.endsWith("Handler")) {
+			return true;
+		}
+		// interfaces
+		for (ITypeBinding intf : typeBinding.getInterfaces()) {
+			if (isAnonymousEventListener(intf)) {
+				return true;
+			}
+		}
+		// super class
+		return isAnonymousEventListener(typeBinding.getSuperclass());
+	}
+
+	/**
+	 * Stores the enhanced classes for each given {@link EvaluationContext}. All
+	 * classes are uniquely identified by their base class and all implementing
+	 * interfaces. The enhanced classes call return a default value for abstract
+	 * methods. For all other methods, the parent method is invoked. Each class is
+	 * unmodifiable and may be reused.
+	 */
+	private static TypeCache<TypeCache.SimpleKey> PROXY_CACHE = new TypeCache.WithInlineExpunction<>(TypeCache.Sort.WEAK);
+
+	/**
+	 * @param methodBinding
+	 *          the {@link IMethodBinding} of constructor.
+	 *
+	 * @return the instance of anonymous {@link ClassInstanceCreation}, intercepting methods using
+	 *         given {@link Implementation}.
+	 */
+	public static Object createAnonymousInstance(EvaluationContext context,
+			IMethodBinding methodBinding,
+			Object[] argumentValues) throws Exception {
+		ITypeBinding typeBinding = methodBinding.getDeclaringClass();
+		Class<?> creationClass = getTypeBindingClass(context, typeBinding.getSuperclass());
+		Class<?>[] creationInterfaces = getClasses(context, typeBinding.getInterfaces());
+		Class<?>[] argumentTypes = getClasses(context, methodBinding.getParameterTypes());
+
+		ClassLoader proxyClassLoader = context.getClassLoader();
+		TypeCache.SimpleKey proxyKey = new TypeCache.SimpleKey(creationClass, creationInterfaces);
+
+		// create object using ByteBuddy
+		DynamicType.Builder<?> builder = new ByteBuddy() //
+				.subclass(creationClass) //
+				.implement(creationInterfaces) //
+				.method(ElementMatchers.any()) //
+				.intercept(SuperMethodCall.INSTANCE) //
+				.method(ElementMatchers.isAbstract()) //
+				.intercept(DefaultMethodInterceptor.INSTANCE);
+
+		return PROXY_CACHE //
+				.findOrInsert(proxyClassLoader, proxyKey, () -> builder.make().load(proxyClassLoader).getLoaded()) //
+				.getConstructor(argumentTypes) //
+				.newInstance(argumentValues);
+	}
+
+	/**
+	 * Sometimes we known that some pieces of code in Internet or samples are not compatible with
+	 * WindowBuilder and we want to show specific exception/message for them.
+	 *
+	 * @throws Error
+	 *           to show instead of original {@link Throwable}.
+	 */
+	private static void throwAlternativeException(Throwable e) {
+		List<InvocationEvaluatorInterceptor> interceptors = getInterceptors();
+		for (InvocationEvaluatorInterceptor interceptor : interceptors) {
+			Throwable result = interceptor.rewriteException(e);
+			if (result instanceof Error) {
+				throw (Error) result;
+			}
+		}
+	}
+
+	private static Object tryInterceptors(EvaluationContext context,
+			ClassInstanceCreation creation,
+			ITypeBinding typeBinding,
+			Class<?> clazz,
+			Constructor<?> explicitConstructor,
+			Object[] argumentValues) throws Exception {
+		for (InvocationEvaluatorInterceptor interceptor : getInterceptors()) {
+			Object result =
+					interceptor.evaluate(
+							context,
+							creation,
+							typeBinding,
+							clazz,
+							explicitConstructor,
+							argumentValues);
+			if (result != AstEvaluationEngine.UNKNOWN) {
+				return result;
+			}
+		}
+		return AstEvaluationEngine.UNKNOWN;
+	}
+
+	/**
+	 * If {@link ThisExpression} argument values is not compatible with parameter, replace it with
+	 * <code>null</code>.
+	 */
+	private static void fixThisExpressionArguments(Constructor<?> constructor,
+			List<Expression> argumentExpressions,
+			Object[] argumentValues) {
+		Class<?>[] parameterTypes = constructor.getParameterTypes();
+		Assert.isTrue(
+				parameterTypes.length == argumentValues.length,
+				"Incompatible count of parameters %s and arguments %s",
+				parameterTypes.length,
+				argumentValues.length);
+		for (int i = 0; i < parameterTypes.length; i++) {
+			// empty varArgs
+			if (i >= argumentExpressions.size()) {
+				break;
+			}
+			// check for ThisExpression
+			if (argumentExpressions.get(i) instanceof ThisExpression) {
+				Class<?> parameterType = parameterTypes[i];
+				Object argument = argumentValues[i];
+				if (argument != null && !parameterType.isAssignableFrom(argument.getClass())) {
+					argumentValues[i] = null;
+				}
+			}
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Finds method using {@link IMethodBinding} and invokes it for given object instance.
+	 */
+	private static Object invokeMethod(EvaluationContext context,
+			Object targetValue,
+			ITypeBinding targetTypeBinding,
+			MethodInvocation invocation,
+			IMethodBinding methodBinding) throws Exception {
+		// prepare class
+		Class<?> clazz;
+		if (targetTypeBinding != null) {
+			clazz = getTypeBindingClass(context, targetTypeBinding);
+		} else {
+			clazz = targetValue.getClass();
+		}
+		// prepare argument values
+		Object[] argumentValues = getArgumentValues(context, DomGenerics.arguments(invocation), false);
+		argumentValues = updateForVarArgs(context, methodBinding, argumentValues);
+		// prepare method
+		Method method = getReflectionMethod(clazz, methodBinding);
+		// try to use interceptors
+		{
+			Object result =
+					tryInterceptors(context, invocation, methodBinding, clazz, method, argumentValues);
+			if (result != AstEvaluationEngine.UNKNOWN) {
+				return result;
+			}
+		}
+		// invoke method
+		try {
+			return method.invoke(targetValue, argumentValues);
+		} catch (Throwable e) {
+			throw new DesignerException(ICoreExceptionConstants.EVAL_METHOD,
+					e,
+					context.getSource(invocation),
+					method.toString(),
+					getArguments_toString(argumentValues));
+		}
+	}
+
+	private static Object tryInterceptors(EvaluationContext context,
+			MethodInvocation invocation,
+			IMethodBinding methodBinding,
+			Class<?> clazz,
+			Method method,
+			Object[] argumentValues) {
+		for (InvocationEvaluatorInterceptor interceptor : getInterceptors()) {
+			Object result =
+					interceptor.evaluate(context, invocation, methodBinding, clazz, method, argumentValues);
+			if (result != AstEvaluationEngine.UNKNOWN) {
+				return result;
+			}
+		}
+		return AstEvaluationEngine.UNKNOWN;
+	}
+
+	/**
+	 * @return the {@link Class} corresponding given {@link ITypeBinding}.
+	 */
+	private static Class<?> getTypeBindingClass(EvaluationContext context, ITypeBinding typeBinding)
+			throws Exception {
+		ClassLoader classLoader = context.getClassLoader();
+		return AstReflectionUtils.getClass(classLoader, typeBinding);
+	}
+
+	/**
+	 * @return array of {@link Class}'s for array of {@link ITypeBinding}.
+	 */
+	private static Class<?>[] getClasses(EvaluationContext context, ITypeBinding[] typeBindings)
+			throws Exception {
+		Class<?>[] classes = new Class<?>[typeBindings.length];
+		for (int i = 0; i < typeBindings.length; i++) {
+			ITypeBinding typeBinding = typeBindings[i];
+			classes[i] = getTypeBindingClass(context, typeBinding);
+		}
+		return classes;
+	}
+
+	/**
+	 * @return the reflection {@link Method} from given class for given {@link IMethodBinding}
+	 */
+	private static Method getReflectionMethod(Class<?> clazz, IMethodBinding binding)
+			throws Exception {
+		String signature = AstNodeUtils.getMethodSignature(binding);
+		Method method;
+		// ask interceptors
+		for (InvocationEvaluatorInterceptor interceptor : getInterceptors()) {
+			method = interceptor.resolveMethod(clazz, signature);
+			if (method != null) {
+				return method;
+			}
+		}
+		//
+		method = AstReflectionUtils.getMethod(clazz, binding);
+		// done
+		Assert.isNotNull2(method, "Method {0} not found in {1}", signature, clazz);
+		return method;
+	}
+
+	/**
+	 * @return the reflection {@link Constructor} from given {@link Class}.
+	 */
+	private static Constructor<?> getReflectionConstructor(Class<?> clazz, IMethodBinding binding)
+			throws Exception {
+		String signature = AstNodeUtils.getMethodSignature(binding);
+		Constructor<?> constructor;
+		// usual signature
+		{
+			constructor = ReflectionUtils.getConstructorBySignature(clazz, signature);
+		}
+		// not found, try generic signature
+		if (constructor == null) {
+			IMethodBinding genericBinding = binding.getMethodDeclaration();
+			if (genericBinding != binding) {
+				String genericSignature = AstNodeUtils.getMethodSignature(genericBinding);
+				constructor = ReflectionUtils.getConstructorByGenericSignature(clazz, genericSignature);
+			}
+		}
+		// done
+		Assert.isNotNull2(constructor, "No constructor {0} in {1}.", signature, clazz);
+		return constructor;
+	}
+
+	/**
+	 * @return values of given {@link Expression} list.
+	 */
+	private static Object[] getArgumentValues(EvaluationContext context,
+			List<Expression> arguments,
+			boolean forConstructor) throws Exception {
+		int argumentCount = arguments.size();
+		Object argumentValues[] = new Object[argumentCount];
+		for (int i = 0; i < argumentCount; i++) {
+			Expression argument = arguments.get(i);
+			try {
+				argumentValues[i] = AstEvaluationEngine.evaluate(context, argument);
+			} catch (Error e) {
+				if (forConstructor && AnonymousEvaluationError.is(e)) {
+					argumentValues[i] = null;
+				} else {
+					throw e;
+				}
+			}
+		}
+		return argumentValues;
+	}
+
+	private static Object[] updateForVarArgs(EvaluationContext context,
+			IMethodBinding methodBinding,
+			Object[] values) throws Exception {
+		ClassLoader classLoader = context.getClassLoader();
+		return AstReflectionUtils.updateForVarArgs(classLoader, methodBinding, values);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exception utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link DesignerException} that describes problem during
+	 *         {@link ClassInstanceCreation} evaluation.
+	 */
+	private static DesignerException createConstructorProblemException(EvaluationContext context,
+			ClassInstanceCreation creation,
+			Object[] argumentValues,
+			Constructor<?> constructor,
+			Throwable e) throws DesignerException {
+		return new DesignerException(ICoreExceptionConstants.EVAL_CONSTRUCTOR,
+				e,
+				context.getSource(creation),
+				ReflectionUtils.getShortConstructorString(constructor),
+				getArguments_toString(argumentValues),
+				AstEvaluationEngine.getUserStackTrace(e));
+	}
+
+	/**
+	 * @return {@link String} presentation of given argument values, safely.
+	 */
+	public static String getArguments_toString(final Object[] arguments) {
+		return ExecutionUtils.runObjectIgnore(new RunnableObjectEx<String>() {
+			@Override
+			public String runObject() throws Exception {
+				return ArrayUtils.toString(arguments);
+			}
+		}, "<Exception during arguments.toString()>");
+	}
+
+	/**
+	 * @return all registered {@link InvocationEvaluatorInterceptor}'s.
+	 */
+	private static List<InvocationEvaluatorInterceptor> getInterceptors() {
+		return ExternalFactoriesHelper.getElementsInstances(
+				InvocationEvaluatorInterceptor.class,
+				"org.eclipse.wb.core.invocationEvaluatorInterceptors",
+				"interceptor");
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/eval/evaluators/LongEvaluator.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/eval/evaluators/LongEvaluator.java
index c2375b8ae..569da5c21 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/eval/evaluators/LongEvaluator.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/eval/evaluators/LongEvaluator.java
@@ -33,115 +33,115 @@
  * @coverage core.evaluation
  */
 public final class LongEvaluator implements IExpressionEvaluator {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IExpressionEvaluator
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Object evaluate(EvaluationContext context,
-      Expression expression,
-      ITypeBinding typeBinding,
-      String typeQualifiedName) throws Exception {
-    // long expression
-    if ("long".equals(typeQualifiedName)) {
-      // single number literal
-      if (expression instanceof NumberLiteral) {
-        NumberLiteral numberLiteral = (NumberLiteral) expression;
-        String token = numberLiteral.getToken();
-        // remove trailing 'L'/'l'
-        token = StringUtils.stripEnd(token, "Ll");
-        // hex
-        if (token.startsWith("0x")) {
-          return Long.valueOf(token.substring(2), 16);
-        }
-        // oct
-        if (token.startsWith("0")) {
-          return Long.valueOf(token, 8);
-        }
-        // decimal
-        return Long.valueOf(token);
-      }
-      // prefix expression (+, -)
-      if (expression instanceof PrefixExpression) {
-        PrefixExpression prefixExpression = (PrefixExpression) expression;
-        PrefixExpression.Operator operator = prefixExpression.getOperator();
-        //
-        Expression operand = prefixExpression.getOperand();
-        long operandValue = getLongValue(context, operand);
-        // +
-        if (operator == PrefixExpression.Operator.PLUS) {
-          return operandValue;
-        }
-        // -
-        if (operator == PrefixExpression.Operator.MINUS) {
-          return -operandValue;
-        }
-      }
-      // infix expression (+, -, *, /, %, |, &)
-      if (expression instanceof InfixExpression) {
-        InfixExpression infixExpression = (InfixExpression) expression;
-        // prepare operands
-        long operands[];
-        {
-          List<Expression> extendedOperands = DomGenerics.extendedOperands(infixExpression);
-          operands = new long[2 + extendedOperands.size()];
-          // evaluate usual operands
-          operands[0] = getLongValue(context, infixExpression.getLeftOperand());
-          operands[1] = getLongValue(context, infixExpression.getRightOperand());
-          // evaluate extended operands
-          for (int i = 0; i < extendedOperands.size(); i++) {
-            Expression operandExpression = extendedOperands.get(i);
-            operands[2 + i] = getLongValue(context, operandExpression);
-          }
-        }
-        // process each operand
-        long value = operands[0];
-        Operator operator = infixExpression.getOperator();
-        for (int i = 1; i < operands.length; i++) {
-          long operand = operands[i];
-          if (operator == InfixExpression.Operator.PLUS) {
-            value += operand;
-          } else if (operator == InfixExpression.Operator.MINUS) {
-            value -= operand;
-          } else if (operator == InfixExpression.Operator.TIMES) {
-            value *= operand;
-          } else if (operator == InfixExpression.Operator.DIVIDE) {
-            value /= operand;
-          } else if (operator == InfixExpression.Operator.REMAINDER) {
-            value %= operand;
-          } else if (operator == InfixExpression.Operator.OR) {
-            value |= operand;
-          } else if (operator == InfixExpression.Operator.AND) {
-            value &= operand;
-          }
-        }
-        // return final value as object
-        return value;
-      }
-    }
-    // we don't understand given expression
-    return AstEvaluationEngine.UNKNOWN;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IExpressionEvaluator
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Object evaluate(EvaluationContext context,
+			Expression expression,
+			ITypeBinding typeBinding,
+			String typeQualifiedName) throws Exception {
+		// long expression
+		if ("long".equals(typeQualifiedName)) {
+			// single number literal
+			if (expression instanceof NumberLiteral) {
+				NumberLiteral numberLiteral = (NumberLiteral) expression;
+				String token = numberLiteral.getToken();
+				// remove trailing 'L'/'l'
+				token = StringUtils.stripEnd(token, "Ll");
+				// hex
+				if (token.startsWith("0x")) {
+					return Long.valueOf(token.substring(2), 16);
+				}
+				// oct
+				if (token.startsWith("0")) {
+					return Long.valueOf(token, 8);
+				}
+				// decimal
+				return Long.valueOf(token);
+			}
+			// prefix expression (+, -)
+			if (expression instanceof PrefixExpression) {
+				PrefixExpression prefixExpression = (PrefixExpression) expression;
+				PrefixExpression.Operator operator = prefixExpression.getOperator();
+				//
+				Expression operand = prefixExpression.getOperand();
+				long operandValue = getLongValue(context, operand);
+				// +
+				if (operator == PrefixExpression.Operator.PLUS) {
+					return operandValue;
+				}
+				// -
+				if (operator == PrefixExpression.Operator.MINUS) {
+					return -operandValue;
+				}
+			}
+			// infix expression (+, -, *, /, %, |, &)
+			if (expression instanceof InfixExpression) {
+				InfixExpression infixExpression = (InfixExpression) expression;
+				// prepare operands
+				long operands[];
+				{
+					List<Expression> extendedOperands = DomGenerics.extendedOperands(infixExpression);
+					operands = new long[2 + extendedOperands.size()];
+					// evaluate usual operands
+					operands[0] = getLongValue(context, infixExpression.getLeftOperand());
+					operands[1] = getLongValue(context, infixExpression.getRightOperand());
+					// evaluate extended operands
+					for (int i = 0; i < extendedOperands.size(); i++) {
+						Expression operandExpression = extendedOperands.get(i);
+						operands[2 + i] = getLongValue(context, operandExpression);
+					}
+				}
+				// process each operand
+				long value = operands[0];
+				Operator operator = infixExpression.getOperator();
+				for (int i = 1; i < operands.length; i++) {
+					long operand = operands[i];
+					if (operator == InfixExpression.Operator.PLUS) {
+						value += operand;
+					} else if (operator == InfixExpression.Operator.MINUS) {
+						value -= operand;
+					} else if (operator == InfixExpression.Operator.TIMES) {
+						value *= operand;
+					} else if (operator == InfixExpression.Operator.DIVIDE) {
+						value /= operand;
+					} else if (operator == InfixExpression.Operator.REMAINDER) {
+						value %= operand;
+					} else if (operator == InfixExpression.Operator.OR) {
+						value |= operand;
+					} else if (operator == InfixExpression.Operator.AND) {
+						value &= operand;
+					}
+				}
+				// return final value as object
+				return value;
+			}
+		}
+		// we don't understand given expression
+		return AstEvaluationEngine.UNKNOWN;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Converts given {@link Expression} into "long" value.
-   */
-  private static long getLongValue(EvaluationContext context, Expression expression)
-      throws Exception {
-    Object value = AstEvaluationEngine.evaluate(context, expression);
-    // Character
-    if (value instanceof Character) {
-      Character character = (Character) value;
-      return character.charValue();
-    }
-    // Number
-    Number number = (Number) value;
-    return number.longValue();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Converts given {@link Expression} into "long" value.
+	 */
+	private static long getLongValue(EvaluationContext context, Expression expression)
+			throws Exception {
+		Object value = AstEvaluationEngine.evaluate(context, expression);
+		// Character
+		if (value instanceof Character) {
+			Character character = (Character) value;
+			return character.charValue();
+		}
+		// Number
+		Number number = (Number) value;
+		return number.longValue();
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/eval/evaluators/QualifiedNameEvaluator.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/eval/evaluators/QualifiedNameEvaluator.java
index 26d62d637..a89b18019 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/eval/evaluators/QualifiedNameEvaluator.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/eval/evaluators/QualifiedNameEvaluator.java
@@ -32,45 +32,45 @@
  * @coverage core.evaluation
  */
 public final class QualifiedNameEvaluator implements IExpressionEvaluator {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IExpressionEvaluator
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Object evaluate(EvaluationContext context,
-      Expression expression,
-      ITypeBinding typeBinding,
-      String typeQualifiedName) throws Exception {
-    if (expression instanceof QualifiedName) {
-      QualifiedName qualifiedName = (QualifiedName) expression;
-      Name qualifier = qualifiedName.getQualifier();
-      String fieldName = qualifiedName.getName().getIdentifier();
-      // check for: array[].length
-      if ("length".equals(fieldName)) {
-        Object arrayValue = AstEvaluationEngine.evaluate(context, qualifier);
-        int length = Array.getLength(arrayValue);
-        return length;
-      } else {
-        // prepare class
-        Class<?> qualifierClass;
-        {
-          String qualifierClassName = AstNodeUtils.getFullyQualifiedName(qualifier, true);
-          qualifierClass = context.getClassLoader().loadClass(qualifierClassName);
-        }
-        // prepare field
-        Field field = ReflectionUtils.getFieldByName(qualifierClass, fieldName);
-        Assert.isNotNull(field);
-        // return static value
-        if (ReflectionUtils.isStatic(field)) {
-          return field.get(null);
-        }
-        // return non-static value
-        Object qualifierValue = AstEvaluationEngine.evaluate(context, qualifier);
-        return field.get(qualifierValue);
-      }
-    }
-    // we don't understand given expression
-    return AstEvaluationEngine.UNKNOWN;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IExpressionEvaluator
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Object evaluate(EvaluationContext context,
+			Expression expression,
+			ITypeBinding typeBinding,
+			String typeQualifiedName) throws Exception {
+		if (expression instanceof QualifiedName) {
+			QualifiedName qualifiedName = (QualifiedName) expression;
+			Name qualifier = qualifiedName.getQualifier();
+			String fieldName = qualifiedName.getName().getIdentifier();
+			// check for: array[].length
+			if ("length".equals(fieldName)) {
+				Object arrayValue = AstEvaluationEngine.evaluate(context, qualifier);
+				int length = Array.getLength(arrayValue);
+				return length;
+			} else {
+				// prepare class
+				Class<?> qualifierClass;
+				{
+					String qualifierClassName = AstNodeUtils.getFullyQualifiedName(qualifier, true);
+					qualifierClass = context.getClassLoader().loadClass(qualifierClassName);
+				}
+				// prepare field
+				Field field = ReflectionUtils.getFieldByName(qualifierClass, fieldName);
+				Assert.isNotNull(field);
+				// return static value
+				if (ReflectionUtils.isStatic(field)) {
+					return field.get(null);
+				}
+				// return non-static value
+				Object qualifierValue = AstEvaluationEngine.evaluate(context, qualifier);
+				return field.get(qualifierValue);
+			}
+		}
+		// we don't understand given expression
+		return AstEvaluationEngine.UNKNOWN;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/eval/evaluators/SimpleNameEvaluator.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/eval/evaluators/SimpleNameEvaluator.java
index 947f45d1d..7c6bf12f2 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/eval/evaluators/SimpleNameEvaluator.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/eval/evaluators/SimpleNameEvaluator.java
@@ -41,81 +41,81 @@
  * @coverage core.evaluation
  */
 public final class SimpleNameEvaluator implements IExpressionEvaluator {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IExpressionEvaluator
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Object evaluate(EvaluationContext context,
-      Expression expression,
-      ITypeBinding typeBinding,
-      String typeQualifiedName) throws Exception {
-    if (expression instanceof SimpleName) {
-      SimpleName simpleName = (SimpleName) expression;
-      // try to find field in super Class or implemented interface
-      {
-        Object value = evaluateAsConstant(context, simpleName);
-        if (value != AstEvaluationEngine.UNKNOWN) {
-          return value;
-        }
-      }
-      // try to find assignment
-      return evaluateAsAssignment(context, simpleName);
-    }
-    // we don't understand given expression
-    return AstEvaluationEngine.UNKNOWN;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IExpressionEvaluator
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Object evaluate(EvaluationContext context,
+			Expression expression,
+			ITypeBinding typeBinding,
+			String typeQualifiedName) throws Exception {
+		if (expression instanceof SimpleName) {
+			SimpleName simpleName = (SimpleName) expression;
+			// try to find field in super Class or implemented interface
+			{
+				Object value = evaluateAsConstant(context, simpleName);
+				if (value != AstEvaluationEngine.UNKNOWN) {
+					return value;
+				}
+			}
+			// try to find assignment
+			return evaluateAsAssignment(context, simpleName);
+		}
+		// we don't understand given expression
+		return AstEvaluationEngine.UNKNOWN;
+	}
 
-  private Object evaluateAsConstant(EvaluationContext context, SimpleName simpleName)
-      throws Exception {
-    IVariableBinding variableBinding = AstNodeUtils.getVariableBinding(simpleName);
-    if (variableBinding != null) {
-      ITypeBinding declaringClassBinding = variableBinding.getDeclaringClass();
-      if (declaringClassBinding != null) {
-        String declaringClassName = AstNodeUtils.getFullyQualifiedName(declaringClassBinding, true);
-        // check for local TypeDeclaration, ignore it
-        if (isNameOfTopTypeDeclaration(simpleName, declaringClassName)) {
-          return AstEvaluationEngine.UNKNOWN;
-        }
-        // prepare declaring class/interface
-        Class<?> declaringClass = context.getClassLoader().loadClass(declaringClassName);
-        // check Field
-        Field field = ReflectionUtils.getFieldByName(declaringClass, simpleName.getIdentifier());
-        if (field != null && java.lang.reflect.Modifier.isStatic(field.getModifiers())) {
-          return field.get(null);
-        }
-      }
-    }
-    return AstEvaluationEngine.UNKNOWN;
-  }
+	private Object evaluateAsConstant(EvaluationContext context, SimpleName simpleName)
+			throws Exception {
+		IVariableBinding variableBinding = AstNodeUtils.getVariableBinding(simpleName);
+		if (variableBinding != null) {
+			ITypeBinding declaringClassBinding = variableBinding.getDeclaringClass();
+			if (declaringClassBinding != null) {
+				String declaringClassName = AstNodeUtils.getFullyQualifiedName(declaringClassBinding, true);
+				// check for local TypeDeclaration, ignore it
+				if (isNameOfTopTypeDeclaration(simpleName, declaringClassName)) {
+					return AstEvaluationEngine.UNKNOWN;
+				}
+				// prepare declaring class/interface
+				Class<?> declaringClass = context.getClassLoader().loadClass(declaringClassName);
+				// check Field
+				Field field = ReflectionUtils.getFieldByName(declaringClass, simpleName.getIdentifier());
+				if (field != null && java.lang.reflect.Modifier.isStatic(field.getModifiers())) {
+					return field.get(null);
+				}
+			}
+		}
+		return AstEvaluationEngine.UNKNOWN;
+	}
 
-  private static boolean isNameOfTopTypeDeclaration(ASTNode node, String typeName) {
-    TypeDeclaration topTypeDeclaration = AstNodeUtils.getEnclosingTypeTop(node);
-    return AstNodeUtils.getFullyQualifiedName(topTypeDeclaration, false).equals(typeName);
-  }
+	private static boolean isNameOfTopTypeDeclaration(ASTNode node, String typeName) {
+		TypeDeclaration topTypeDeclaration = AstNodeUtils.getEnclosingTypeTop(node);
+		return AstNodeUtils.getFullyQualifiedName(topTypeDeclaration, false).equals(typeName);
+	}
 
-  private Object evaluateAsAssignment(EvaluationContext context, SimpleName simpleName)
-      throws Exception {
-    ExpressionValue value = ExecutionFlowUtils2.getValue(context.getFlowDescription(), simpleName);
-    if (value != null) {
-      Expression expression = value.getExpression();
-      // field declaration without initializer
-      if (expression.getLocationInParent() == VariableDeclarationFragment.NAME_PROPERTY
-          && expression.getParent().getLocationInParent() == FieldDeclaration.FRAGMENTS_PROPERTY) {
-        return null;
-      }
-      // parameter of method without invocation
-      if (expression.getLocationInParent() == SingleVariableDeclaration.NAME_PROPERTY) {
-        SingleVariableDeclaration parameter = (SingleVariableDeclaration) expression.getParent();
-        MethodDeclaration methodDeclaration = AstNodeUtils.getEnclosingMethod(parameter);
-        return context.evaluateUnknownParameter(methodDeclaration, parameter);
-      }
-      // normal Expression
-      return AstEvaluationEngine.evaluate(context, expression);
-    }
-    // no value
-    throw new DesignerException(ICoreExceptionConstants.EVAL_NO_SIMPLE_NAME_FOUND,
-        simpleName.getIdentifier());
-  }
+	private Object evaluateAsAssignment(EvaluationContext context, SimpleName simpleName)
+			throws Exception {
+		ExpressionValue value = ExecutionFlowUtils2.getValue(context.getFlowDescription(), simpleName);
+		if (value != null) {
+			Expression expression = value.getExpression();
+			// field declaration without initializer
+			if (expression.getLocationInParent() == VariableDeclarationFragment.NAME_PROPERTY
+					&& expression.getParent().getLocationInParent() == FieldDeclaration.FRAGMENTS_PROPERTY) {
+				return null;
+			}
+			// parameter of method without invocation
+			if (expression.getLocationInParent() == SingleVariableDeclaration.NAME_PROPERTY) {
+				SingleVariableDeclaration parameter = (SingleVariableDeclaration) expression.getParent();
+				MethodDeclaration methodDeclaration = AstNodeUtils.getEnclosingMethod(parameter);
+				return context.evaluateUnknownParameter(methodDeclaration, parameter);
+			}
+			// normal Expression
+			return AstEvaluationEngine.evaluate(context, expression);
+		}
+		// no value
+		throw new DesignerException(ICoreExceptionConstants.EVAL_NO_SIMPLE_NAME_FOUND,
+				simpleName.getIdentifier());
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/eval/evaluators/StringEvaluator.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/eval/evaluators/StringEvaluator.java
index bfc5d16dc..c45e5b413 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/eval/evaluators/StringEvaluator.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/eval/evaluators/StringEvaluator.java
@@ -30,72 +30,72 @@
  * @coverage core.evaluation
  */
 public final class StringEvaluator implements IExpressionEvaluator {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IExpressionEvaluator
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Object evaluate(EvaluationContext context,
-      Expression expression,
-      ITypeBinding typeBinding,
-      String typeQualifiedName) throws Exception {
-    // string literal
-    if (expression instanceof StringLiteral) {
-      StringLiteral stringLiteral = (StringLiteral) expression;
-      return stringLiteral.getLiteralValue();
-    }
-    // integer expression
-    if ("java.lang.String".equals(typeQualifiedName)) {
-      // infix expression (+)
-      if (expression instanceof InfixExpression) {
-        InfixExpression infixExpression = (InfixExpression) expression;
-        // only "+" is possible infix operator for string's
-        Assert.isTrue(infixExpression.getOperator() == InfixExpression.Operator.PLUS);
-        // prepare operands
-        String operands[];
-        {
-          List<Expression> extendedOperands = DomGenerics.extendedOperands(infixExpression);
-          operands = new String[2 + extendedOperands.size()];
-          // evaluate usual operands
-          operands[0] = getStringValue(context, infixExpression.getLeftOperand());
-          operands[1] = getStringValue(context, infixExpression.getRightOperand());
-          // evaluate extended operands
-          for (int i = 0; i < extendedOperands.size(); i++) {
-            Expression operandExpression = extendedOperands.get(i);
-            operands[2 + i] = getStringValue(context, operandExpression);
-          }
-        }
-        // process each operand
-        StringBuffer value = new StringBuffer();
-        for (String operand : operands) {
-          value.append(operand);
-        }
-        // return final value as object
-        return value.toString();
-      }
-    }
-    // we don't understand given expression
-    return AstEvaluationEngine.UNKNOWN;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IExpressionEvaluator
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Object evaluate(EvaluationContext context,
+			Expression expression,
+			ITypeBinding typeBinding,
+			String typeQualifiedName) throws Exception {
+		// string literal
+		if (expression instanceof StringLiteral) {
+			StringLiteral stringLiteral = (StringLiteral) expression;
+			return stringLiteral.getLiteralValue();
+		}
+		// integer expression
+		if ("java.lang.String".equals(typeQualifiedName)) {
+			// infix expression (+)
+			if (expression instanceof InfixExpression) {
+				InfixExpression infixExpression = (InfixExpression) expression;
+				// only "+" is possible infix operator for string's
+				Assert.isTrue(infixExpression.getOperator() == InfixExpression.Operator.PLUS);
+				// prepare operands
+				String operands[];
+				{
+					List<Expression> extendedOperands = DomGenerics.extendedOperands(infixExpression);
+					operands = new String[2 + extendedOperands.size()];
+					// evaluate usual operands
+					operands[0] = getStringValue(context, infixExpression.getLeftOperand());
+					operands[1] = getStringValue(context, infixExpression.getRightOperand());
+					// evaluate extended operands
+					for (int i = 0; i < extendedOperands.size(); i++) {
+						Expression operandExpression = extendedOperands.get(i);
+						operands[2 + i] = getStringValue(context, operandExpression);
+					}
+				}
+				// process each operand
+				StringBuffer value = new StringBuffer();
+				for (String operand : operands) {
+					value.append(operand);
+				}
+				// return final value as object
+				return value.toString();
+			}
+		}
+		// we don't understand given expression
+		return AstEvaluationEngine.UNKNOWN;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Converts given {@link Expression} into "String" value.
-   */
-  private static String getStringValue(EvaluationContext context, Expression expression)
-      throws Exception {
-    Object o = AstEvaluationEngine.evaluate(context, expression);
-    if (o instanceof String) {
-      return (String) o;
-    }
-    if (o == null) {
-      return "null";
-    }
-    return o.toString();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Converts given {@link Expression} into "String" value.
+	 */
+	private static String getStringValue(EvaluationContext context, Expression expression)
+			throws Exception {
+		Object o = AstEvaluationEngine.evaluate(context, expression);
+		if (o instanceof String) {
+			return (String) o;
+		}
+		if (o == null) {
+			return "null";
+		}
+		return o.toString();
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gef/CoreEditPartConfigurator.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gef/CoreEditPartConfigurator.java
index 4da075400..5a648876e 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gef/CoreEditPartConfigurator.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gef/CoreEditPartConfigurator.java
@@ -28,49 +28,49 @@
  * @coverage core.gef
  */
 public final class CoreEditPartConfigurator implements IEditPartConfigurator {
-  @Override
-  public void configure(EditPart context, EditPart editPart) {
-    Object model = editPart.getModel();
-    // double click
-    if (GlobalState.isComponent(model)) {
-      ObjectInfo component = (ObjectInfo) model;
-      configureFlipBooleanProperty(editPart, component);
-      configure_onDoubleClick_runScript(editPart, component);
-    }
-    // direct edit
-    if (model instanceof AbstractComponentInfo) {
-      AbstractComponentInfo item = (AbstractComponentInfo) model;
-      DirectTextPropertyEditPolicy.install(editPart, item);
-    }
-  }
+	@Override
+	public void configure(EditPart context, EditPart editPart) {
+		Object model = editPart.getModel();
+		// double click
+		if (GlobalState.isComponent(model)) {
+			ObjectInfo component = (ObjectInfo) model;
+			configureFlipBooleanProperty(editPart, component);
+			configure_onDoubleClick_runScript(editPart, component);
+		}
+		// direct edit
+		if (model instanceof AbstractComponentInfo) {
+			AbstractComponentInfo item = (AbstractComponentInfo) model;
+			DirectTextPropertyEditPolicy.install(editPart, item);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Allows to use <code>double-click.flipBooleanProperty</code> parameter to flip some boolean
-   * property between <code>true/false</code> states, for example "expanded" property.
-   */
-  private void configureFlipBooleanProperty(EditPart editPart, ObjectInfo component) {
-    String propertyPath =
-        GlobalState.getParametersProvider().getParameter(
-            component,
-            "double-click.flipBooleanProperty");
-    if (!StringUtils.isEmpty(propertyPath)) {
-      editPart.installEditPolicy(new FlipBooleanPropertyEditPolicy(component, propertyPath));
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Allows to use <code>double-click.flipBooleanProperty</code> parameter to flip some boolean
+	 * property between <code>true/false</code> states, for example "expanded" property.
+	 */
+	private void configureFlipBooleanProperty(EditPart editPart, ObjectInfo component) {
+		String propertyPath =
+				GlobalState.getParametersProvider().getParameter(
+						component,
+						"double-click.flipBooleanProperty");
+		if (!StringUtils.isEmpty(propertyPath)) {
+			editPart.installEditPolicy(new FlipBooleanPropertyEditPolicy(component, propertyPath));
+		}
+	}
 
-  /**
-   * If has "double-click.runScript", then run this MVEL script with component as context.
-   */
-  private void configure_onDoubleClick_runScript(EditPart editPart, ObjectInfo component) {
-    String propertyPath =
-        GlobalState.getParametersProvider().getParameter(component, "double-click.runScript");
-    if (!StringUtils.isEmpty(propertyPath)) {
-      editPart.installEditPolicy(new DblClickRunScriptEditPolicy(component, propertyPath));
-    }
-  }
+	/**
+	 * If has "double-click.runScript", then run this MVEL script with component as context.
+	 */
+	private void configure_onDoubleClick_runScript(EditPart editPart, ObjectInfo component) {
+		String propertyPath =
+				GlobalState.getParametersProvider().getParameter(component, "double-click.runScript");
+		if (!StringUtils.isEmpty(propertyPath)) {
+			editPart.installEditPolicy(new DblClickRunScriptEditPolicy(component, propertyPath));
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gef/EditPartFactory2.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gef/EditPartFactory2.java
index 4cb68e97b..a31175252 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gef/EditPartFactory2.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gef/EditPartFactory2.java
@@ -28,46 +28,46 @@
  * @coverage core.gef
  */
 public final class EditPartFactory2 implements IEditPartFactory {
-  public static final EditPartFactory2 INSTANCE = new EditPartFactory2();
+	public static final EditPartFactory2 INSTANCE = new EditPartFactory2();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private EditPartFactory2() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private EditPartFactory2() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IEditPartFactory
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public EditPart createEditPart(EditPart context, Object model) {
-    if (model == null) {
-      return null;
-    }
-    // designer root
-    if (model instanceof DesignRootObject) {
-      DesignRootObject designRootObject = (DesignRootObject) model;
-      return new DesignRootEditPart(designRootObject);
-    }
-    // child array
-    if (model instanceof AbstractArrayObjectInfo) {
-      AbstractArrayObjectInfo arrayInfo = (AbstractArrayObjectInfo) model;
-      ArrayObjectEditPart editPart = new ArrayObjectEditPart(arrayInfo);
-      EditPartFactory.configureEditPart(context, editPart);
-      return editPart;
-    }
-    // IWrapperInfo
-    if (model instanceof IWrapperInfo) {
-      IWrapper wrapper = ((IWrapperInfo) model).getWrapper();
-      AbstractWrapperEditPart editPart = new AbstractWrapperEditPart(wrapper);
-      EditPartFactory.configureEditPart(context, editPart);
-      return editPart;
-    }
-    // no EditPart found
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IEditPartFactory
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public EditPart createEditPart(EditPart context, Object model) {
+		if (model == null) {
+			return null;
+		}
+		// designer root
+		if (model instanceof DesignRootObject) {
+			DesignRootObject designRootObject = (DesignRootObject) model;
+			return new DesignRootEditPart(designRootObject);
+		}
+		// child array
+		if (model instanceof AbstractArrayObjectInfo) {
+			AbstractArrayObjectInfo arrayInfo = (AbstractArrayObjectInfo) model;
+			ArrayObjectEditPart editPart = new ArrayObjectEditPart(arrayInfo);
+			EditPartFactory.configureEditPart(context, editPart);
+			return editPart;
+		}
+		// IWrapperInfo
+		if (model instanceof IWrapperInfo) {
+			IWrapper wrapper = ((IWrapperInfo) model).getWrapper();
+			AbstractWrapperEditPart editPart = new AbstractWrapperEditPart(wrapper);
+			EditPartFactory.configureEditPart(context, editPart);
+			return editPart;
+		}
+		// no EditPart found
+		return null;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gef/GefMessages.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gef/GefMessages.java
index 7b8b47429..64c23a91f 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gef/GefMessages.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gef/GefMessages.java
@@ -3,32 +3,32 @@
 import org.eclipse.osgi.util.NLS;
 
 public class GefMessages extends NLS {
-  private static final String BUNDLE_NAME = "org.eclipse.wb.internal.core.gef.GefMessages"; //$NON-NLS-1$
-  public static String AbstractAlignmentActionsSupport_alighHorizontalCenters;
-  public static String AbstractAlignmentActionsSupport_alignBottom;
-  public static String AbstractAlignmentActionsSupport_alignLeft;
-  public static String AbstractAlignmentActionsSupport_alignRight;
-  public static String AbstractAlignmentActionsSupport_alignTop;
-  public static String AbstractAlignmentActionsSupport_alignVerticalCenters;
-  public static String AbstractAlignmentActionsSupport_centerHorizontally;
-  public static String AbstractAlignmentActionsSupport_centerVertically;
-  public static String AbstractAlignmentActionsSupport_replicateHeight;
-  public static String AbstractAlignmentActionsSupport_replicateWidth;
-  public static String AbstractAlignmentActionsSupport_spaceEquallyHorizontal;
-  public static String AbstractAlignmentActionsSupport_spaceEquallyVertical;
-  public static String AnchorsActionsSupport_bottomAlignment;
-  public static String AnchorsActionsSupport_leftAlignment;
-  public static String AnchorsActionsSupport_makeResizableHorizontal;
-  public static String AnchorsActionsSupport_makeResizableVertical;
-  public static String AnchorsActionsSupport_rightAlignment;
-  public static String AnchorsActionsSupport_topAlignment;
-  public static String NonVisualLayoutEditPolicy_copyFeedback;
-  public static String NonVisualLayoutEditPolicy_newFeedback;
-  static {
-    // initialize resource bundle
-    NLS.initializeMessages(BUNDLE_NAME, GefMessages.class);
-  }
+	private static final String BUNDLE_NAME = "org.eclipse.wb.internal.core.gef.GefMessages"; //$NON-NLS-1$
+	public static String AbstractAlignmentActionsSupport_alighHorizontalCenters;
+	public static String AbstractAlignmentActionsSupport_alignBottom;
+	public static String AbstractAlignmentActionsSupport_alignLeft;
+	public static String AbstractAlignmentActionsSupport_alignRight;
+	public static String AbstractAlignmentActionsSupport_alignTop;
+	public static String AbstractAlignmentActionsSupport_alignVerticalCenters;
+	public static String AbstractAlignmentActionsSupport_centerHorizontally;
+	public static String AbstractAlignmentActionsSupport_centerVertically;
+	public static String AbstractAlignmentActionsSupport_replicateHeight;
+	public static String AbstractAlignmentActionsSupport_replicateWidth;
+	public static String AbstractAlignmentActionsSupport_spaceEquallyHorizontal;
+	public static String AbstractAlignmentActionsSupport_spaceEquallyVertical;
+	public static String AnchorsActionsSupport_bottomAlignment;
+	public static String AnchorsActionsSupport_leftAlignment;
+	public static String AnchorsActionsSupport_makeResizableHorizontal;
+	public static String AnchorsActionsSupport_makeResizableVertical;
+	public static String AnchorsActionsSupport_rightAlignment;
+	public static String AnchorsActionsSupport_topAlignment;
+	public static String NonVisualLayoutEditPolicy_copyFeedback;
+	public static String NonVisualLayoutEditPolicy_newFeedback;
+	static {
+		// initialize resource bundle
+		NLS.initializeMessages(BUNDLE_NAME, GefMessages.class);
+	}
 
-  private GefMessages() {
-  }
+	private GefMessages() {
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gef/GenericContainersConfigurator.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gef/GenericContainersConfigurator.java
index e13afb7df..ad1edef11 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gef/GenericContainersConfigurator.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gef/GenericContainersConfigurator.java
@@ -30,48 +30,48 @@
  * @coverage core.gef
  */
 public final class GenericContainersConfigurator implements IEditPartConfigurator {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IEditPartConfigurator
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void configure(EditPart context, EditPart editPart) {
-    if (editPart.getModel() instanceof JavaInfo) {
-      JavaInfo component = (JavaInfo) editPart.getModel();
-      configureComponent(editPart, component);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IEditPartConfigurator
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void configure(EditPart context, EditPart editPart) {
+		if (editPart.getModel() instanceof JavaInfo) {
+			JavaInfo component = (JavaInfo) editPart.getModel();
+			configureComponent(editPart, component);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Configuring
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void configureComponent(EditPart editPart, JavaInfo component) {
-    configureSimpleContainer(editPart, component);
-    configureFlowContainer(editPart, component);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Configuring
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void configureComponent(EditPart editPart, JavaInfo component) {
+		configureSimpleContainer(editPart, component);
+		configureFlowContainer(editPart, component);
+	}
 
-  /**
-   * Simple containers: SimplePanel, CaptionPanel, etc.
-   */
-  private void configureSimpleContainer(EditPart editPart, JavaInfo component) {
-    List<SimpleContainer> containers = new SimpleContainerFactory(component, true).get();
-    for (SimpleContainer container : containers) {
-      EditPolicy layoutPolicy = new SimpleContainerLayoutEditPolicy(component, container);
-      editPart.installEditPolicy(container, layoutPolicy);
-    }
-  }
+	/**
+	 * Simple containers: SimplePanel, CaptionPanel, etc.
+	 */
+	private void configureSimpleContainer(EditPart editPart, JavaInfo component) {
+		List<SimpleContainer> containers = new SimpleContainerFactory(component, true).get();
+		for (SimpleContainer container : containers) {
+			EditPolicy layoutPolicy = new SimpleContainerLayoutEditPolicy(component, container);
+			editPart.installEditPolicy(container, layoutPolicy);
+		}
+	}
 
-  /**
-   * Flow containers: FlowPanel, HorizontalPanel, VerticalPanel, etc.
-   */
-  private void configureFlowContainer(EditPart editPart, JavaInfo component) {
-    List<FlowContainer> containers = new FlowContainerFactory(component, true).get();
-    for (FlowContainer container : containers) {
-      EditPolicy layoutPolicy = new FlowContainerLayoutEditPolicy(component, container);
-      editPart.installEditPolicy(container, layoutPolicy);
-    }
-  }
+	/**
+	 * Flow containers: FlowPanel, HorizontalPanel, VerticalPanel, etc.
+	 */
+	private void configureFlowContainer(EditPart editPart, JavaInfo component) {
+		List<FlowContainer> containers = new FlowContainerFactory(component, true).get();
+		for (FlowContainer container : containers) {
+			EditPolicy layoutPolicy = new FlowContainerLayoutEditPolicy(component, container);
+			editPart.installEditPolicy(container, layoutPolicy);
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gef/GenericContainersLayoutEditPolicyFactory.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gef/GenericContainersLayoutEditPolicyFactory.java
index 0fec89960..d58c57f4d 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gef/GenericContainersLayoutEditPolicyFactory.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gef/GenericContainersLayoutEditPolicyFactory.java
@@ -30,31 +30,31 @@
  * @coverage core.gef
  */
 public final class GenericContainersLayoutEditPolicyFactory implements ILayoutEditPolicyFactory {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ILayoutEditPolicyFactory
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public LayoutEditPolicy createLayoutEditPolicy(EditPart context, Object model) {
-    if (model instanceof JavaInfo) {
-      JavaInfo layout = (JavaInfo) model;
-      // simple containers
-      {
-        List<SimpleContainer> containers = new SimpleContainerFactory(layout, true).get();
-        for (SimpleContainer container : containers) {
-          return new SimpleContainerLayoutEditPolicy(layout, container);
-        }
-      }
-      // flow containers
-      {
-        List<FlowContainer> containers = new FlowContainerFactory(layout, true).get();
-        for (FlowContainer container : containers) {
-          return new FlowContainerLayoutEditPolicy(layout, container);
-        }
-      }
-    }
-    // not found
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ILayoutEditPolicyFactory
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public LayoutEditPolicy createLayoutEditPolicy(EditPart context, Object model) {
+		if (model instanceof JavaInfo) {
+			JavaInfo layout = (JavaInfo) model;
+			// simple containers
+			{
+				List<SimpleContainer> containers = new SimpleContainerFactory(layout, true).get();
+				for (SimpleContainer container : containers) {
+					return new SimpleContainerLayoutEditPolicy(layout, container);
+				}
+			}
+			// flow containers
+			{
+				List<FlowContainer> containers = new FlowContainerFactory(layout, true).get();
+				for (FlowContainer container : containers) {
+					return new FlowContainerLayoutEditPolicy(layout, container);
+				}
+			}
+		}
+		// not found
+		return null;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gef/part/AbstractWrapperEditPart.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gef/part/AbstractWrapperEditPart.java
index 01ce18dd6..e168fc77a 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gef/part/AbstractWrapperEditPart.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gef/part/AbstractWrapperEditPart.java
@@ -31,68 +31,68 @@
  * @coverage core.gef
  */
 public class AbstractWrapperEditPart extends GraphicalEditPart {
-  private final IWrapper m_wrapper;
+	private final IWrapper m_wrapper;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractWrapperEditPart(IWrapper wrapper) {
-    setModel(wrapper.getWrapperInfo());
-    m_wrapper = wrapper;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractWrapperEditPart(IWrapper wrapper) {
+		setModel(wrapper.getWrapperInfo());
+		m_wrapper = wrapper;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Edit Policies
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createEditPolicies() {
-    super.createEditPolicies();
-    installEditPolicy(EditPolicy.SELECTION_ROLE, new LineSelectionEditPolicy(IColorConstants.black));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Edit Policies
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createEditPolicies() {
+		super.createEditPolicies();
+		installEditPolicy(EditPolicy.SELECTION_ROLE, new LineSelectionEditPolicy(IColorConstants.black));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Figure
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Figure createFigure() {
-    return new Figure() {
-      @Override
-      protected void paintClientArea(Graphics graphics) {
-        graphics.drawImage(m_wrapper.getWrapperInfo().getDescription().getIcon(), 0, 0);
-      }
-    };
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Figure
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Figure createFigure() {
+		return new Figure() {
+			@Override
+			protected void paintClientArea(Graphics graphics) {
+				graphics.drawImage(m_wrapper.getWrapperInfo().getDescription().getIcon(), 0, 0);
+			}
+		};
+	}
 
-  @Override
-  protected void refreshVisuals() {
-    Display.getCurrent().asyncExec(new Runnable() {
-      @Override
-      public void run() {
-        refreshVisuals0();
-      }
-    });
-  }
+	@Override
+	protected void refreshVisuals() {
+		Display.getCurrent().asyncExec(new Runnable() {
+			@Override
+			public void run() {
+				refreshVisuals0();
+			}
+		});
+	}
 
-  /**
-   * {@link EditPart} refreshes children and then visuals. So, we should wait for parent visuals
-   * refresh.
-   */
-  private void refreshVisuals0() {
-    org.eclipse.swt.graphics.Rectangle imageBounds =
-        m_wrapper.getWrapperInfo().getDescription().getIcon().getBounds();
-    int width = imageBounds.width;
-    int height = imageBounds.height;
-    Rectangle parentClientArea = ((GraphicalEditPart) getParent()).getFigure().getClientArea();
-    Point location = parentClientArea.getBottomRight().getTranslated(-width, -height);
-    location.performTranslate(-3, -3);
-    Rectangle bounds = new Rectangle(location.x, location.y, width, height);
-    // no animation
-    getFigure().setBounds(bounds);
-  }
+	/**
+	 * {@link EditPart} refreshes children and then visuals. So, we should wait for parent visuals
+	 * refresh.
+	 */
+	private void refreshVisuals0() {
+		org.eclipse.swt.graphics.Rectangle imageBounds =
+				m_wrapper.getWrapperInfo().getDescription().getIcon().getBounds();
+		int width = imageBounds.width;
+		int height = imageBounds.height;
+		Rectangle parentClientArea = ((GraphicalEditPart) getParent()).getFigure().getClientArea();
+		Point location = parentClientArea.getBottomRight().getTranslated(-width, -height);
+		location.performTranslate(-3, -3);
+		Rectangle bounds = new Rectangle(location.x, location.y, width, height);
+		// no animation
+		getFigure().setBounds(bounds);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gef/part/DesignRootEditPart.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gef/part/DesignRootEditPart.java
index a3ebc0cc2..345b8787c 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gef/part/DesignRootEditPart.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gef/part/DesignRootEditPart.java
@@ -36,144 +36,144 @@
  * @coverage core.gef
  */
 public final class DesignRootEditPart extends GraphicalEditPart {
-  private final DesignRootObject m_designRootObject;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DesignRootEditPart(DesignRootObject designRootObject) {
-    m_designRootObject = designRootObject;
-    setModel(m_designRootObject);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Life cycle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void activate() {
-    refreshVisualsOnModelRefresh();
-    super.activate();
-  }
-
-  private void refreshVisualsOnModelRefresh() {
-    m_designRootObject.getRootObject().addBroadcastListener(new ObjectEventListener() {
-      @Override
-      public void refreshDispose() throws Exception {
-        if (isActive()) {
-          getFigureCanvas().setDrawCached(true);
-        }
-      }
-
-      @Override
-      public void refreshed() throws Exception {
-        getFigureCanvas().setDrawCached(false);
-        getFigureCanvas().redraw();
-        refresh();
-      }
-
-      private FigureCanvas getFigureCanvas() {
-        return (FigureCanvas) getViewer().getControl();
-      }
-    });
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Policies
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createEditPolicies() {
-    installEditPolicy(
-        EditPolicy.LAYOUT_ROLE,
-        new NonVisualLayoutEditPolicy(m_designRootObject.getRootObject()));
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Children
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected List<?> getModelChildren() {
-    return m_designRootObject.getChildren();
-  }
-
-  @Override
-  protected EditPart createEditPart(Object model) {
-    if (m_designRootObject.getRootObject() != model) {
-      // direct create non visual bean part
-      JavaInfo javaInfo = (JavaInfo) model;
-      NonVisualBeanInfo nonVisualInfo = NonVisualBeanInfo.getNonVisualInfo(javaInfo);
-      // create EditPart only if location specified
-      if (nonVisualInfo != null && nonVisualInfo.getLocation() != null) {
-        return new NonVisualBeanEditPart(javaInfo);
-      } else {
-        return null;
-      }
-    }
-    // use factory
-    return super.createEditPart(model);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return java root {@link EditPart}.
-   */
-  public EditPart getJavaRootEditPart() {
-    return getChildren().get(0);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Figure
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Figure createFigure() {
-    return new TopFigure();
-  }
-
-  /**
-   * Special {@link Figure} that cover full area of parent.
-   */
-  private static final class TopFigure extends Figure implements IPreferredSizeProvider {
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Figure
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public Rectangle getBounds() {
-      Figure parentFigure = getParent();
-      if (parentFigure != null) {
-        return new Rectangle(new Point(), parentFigure.getSize());
-      }
-      return super.getBounds();
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // IPreferredSizeProvider
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public Dimension getPreferredSize(Dimension originalPreferredSize) {
-      Rectangle preferred = new Rectangle();
-      for (Figure figure : getChildren()) {
-        if (figure.isVisible()) {
-          preferred.union(figure.getBounds());
-        }
-      }
-      return preferred.getSize();
-    }
-  }
+	private final DesignRootObject m_designRootObject;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DesignRootEditPart(DesignRootObject designRootObject) {
+		m_designRootObject = designRootObject;
+		setModel(m_designRootObject);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Life cycle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void activate() {
+		refreshVisualsOnModelRefresh();
+		super.activate();
+	}
+
+	private void refreshVisualsOnModelRefresh() {
+		m_designRootObject.getRootObject().addBroadcastListener(new ObjectEventListener() {
+			@Override
+			public void refreshDispose() throws Exception {
+				if (isActive()) {
+					getFigureCanvas().setDrawCached(true);
+				}
+			}
+
+			@Override
+			public void refreshed() throws Exception {
+				getFigureCanvas().setDrawCached(false);
+				getFigureCanvas().redraw();
+				refresh();
+			}
+
+			private FigureCanvas getFigureCanvas() {
+				return (FigureCanvas) getViewer().getControl();
+			}
+		});
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Policies
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createEditPolicies() {
+		installEditPolicy(
+				EditPolicy.LAYOUT_ROLE,
+				new NonVisualLayoutEditPolicy(m_designRootObject.getRootObject()));
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Children
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected List<?> getModelChildren() {
+		return m_designRootObject.getChildren();
+	}
+
+	@Override
+	protected EditPart createEditPart(Object model) {
+		if (m_designRootObject.getRootObject() != model) {
+			// direct create non visual bean part
+			JavaInfo javaInfo = (JavaInfo) model;
+			NonVisualBeanInfo nonVisualInfo = NonVisualBeanInfo.getNonVisualInfo(javaInfo);
+			// create EditPart only if location specified
+			if (nonVisualInfo != null && nonVisualInfo.getLocation() != null) {
+				return new NonVisualBeanEditPart(javaInfo);
+			} else {
+				return null;
+			}
+		}
+		// use factory
+		return super.createEditPart(model);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return java root {@link EditPart}.
+	 */
+	public EditPart getJavaRootEditPart() {
+		return getChildren().get(0);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Figure
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Figure createFigure() {
+		return new TopFigure();
+	}
+
+	/**
+	 * Special {@link Figure} that cover full area of parent.
+	 */
+	private static final class TopFigure extends Figure implements IPreferredSizeProvider {
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Figure
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public Rectangle getBounds() {
+			Figure parentFigure = getParent();
+			if (parentFigure != null) {
+				return new Rectangle(new Point(), parentFigure.getSize());
+			}
+			return super.getBounds();
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// IPreferredSizeProvider
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public Dimension getPreferredSize(Dimension originalPreferredSize) {
+			Rectangle preferred = new Rectangle();
+			for (Figure figure : getChildren()) {
+				if (figure.isVisible()) {
+					preferred.union(figure.getBounds());
+				}
+			}
+			return preferred.getSize();
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gef/part/nonvisual/ArrayObjectEditPart.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gef/part/nonvisual/ArrayObjectEditPart.java
index 731e3a472..c25a1386b 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gef/part/nonvisual/ArrayObjectEditPart.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gef/part/nonvisual/ArrayObjectEditPart.java
@@ -24,49 +24,49 @@
  * @coverage gef.graphical
  */
 public final class ArrayObjectEditPart extends GraphicalEditPart {
-  private final AbstractArrayObjectInfo m_arrayInfo;
+	private final AbstractArrayObjectInfo m_arrayInfo;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ArrayObjectEditPart(AbstractArrayObjectInfo arrayInfo) {
-    m_arrayInfo = arrayInfo;
-    setModel(arrayInfo);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ArrayObjectEditPart(AbstractArrayObjectInfo arrayInfo) {
+		m_arrayInfo = arrayInfo;
+		setModel(arrayInfo);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractArrayObjectInfo getArrayInfo() {
-    return m_arrayInfo;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractArrayObjectInfo getArrayInfo() {
+		return m_arrayInfo;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Policy
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createEditPolicies() {
-    installEditPolicy(EditPolicy.SELECTION_ROLE, new NonResizableSelectionEditPolicy());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Policy
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createEditPolicies() {
+		installEditPolicy(EditPolicy.SELECTION_ROLE, new NonResizableSelectionEditPolicy());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Figure
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Figure createFigure() {
-    return new Figure();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Figure
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Figure createFigure() {
+		return new Figure();
+	}
 
-  @Override
-  protected void refreshVisuals() {
-    getFigure().setBounds(m_arrayInfo.getBounds());
-  }
+	@Override
+	protected void refreshVisuals() {
+		getFigure().setBounds(m_arrayInfo.getBounds());
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gef/part/nonvisual/BeanFigure.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gef/part/nonvisual/BeanFigure.java
index 1bf9c394f..f5e545360 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gef/part/nonvisual/BeanFigure.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gef/part/nonvisual/BeanFigure.java
@@ -26,53 +26,53 @@
  * @coverage core.gef.nonvisual
  */
 public class BeanFigure extends Figure {
-  private final Image m_image;
-  private final Label m_label = new Label();
-  private final Point m_imageLocation = new Point();
-  private final Dimension m_imageSize;
+	private final Image m_image;
+	private final Label m_label = new Label();
+	private final Point m_imageLocation = new Point();
+	private final Dimension m_imageSize;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public BeanFigure(Image image) {
-    m_image = image;
-    m_imageSize = new Dimension(m_image);
-    add(m_label);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public BeanFigure(Image image) {
+		m_image = image;
+		m_imageSize = new Dimension(m_image);
+		add(m_label);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void update(String text, Point location) {
-    if (m_label.getText().equals(text)) {
-      setLocation(location);
-    } else {
-      // configure text
-      m_label.setText(text);
-      Dimension textSize = m_label.getPreferredSize();
-      // calculate total width
-      int width = Math.max(m_imageSize.width, textSize.width);
-      // set all bounds
-      setBounds(new Rectangle(location.x, location.y, width, m_imageSize.height + textSize.height));
-      m_imageLocation.x = width / 2 - m_imageSize.width / 2;
-      m_label.setBounds(new Rectangle(width / 2 - textSize.width / 2,
-          m_imageSize.height,
-          textSize.width,
-          textSize.height));
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void update(String text, Point location) {
+		if (m_label.getText().equals(text)) {
+			setLocation(location);
+		} else {
+			// configure text
+			m_label.setText(text);
+			Dimension textSize = m_label.getPreferredSize();
+			// calculate total width
+			int width = Math.max(m_imageSize.width, textSize.width);
+			// set all bounds
+			setBounds(new Rectangle(location.x, location.y, width, m_imageSize.height + textSize.height));
+			m_imageLocation.x = width / 2 - m_imageSize.width / 2;
+			m_label.setBounds(new Rectangle(width / 2 - textSize.width / 2,
+					m_imageSize.height,
+					textSize.width,
+					textSize.height));
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Figure
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void paintClientArea(Graphics graphics) {
-    graphics.drawImage(m_image, m_imageLocation);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Figure
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void paintClientArea(Graphics graphics) {
+		graphics.drawImage(m_image, m_imageLocation);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gef/part/nonvisual/NonVisualBeanEditPart.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gef/part/nonvisual/NonVisualBeanEditPart.java
index 9997c4efa..40105bc73 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gef/part/nonvisual/NonVisualBeanEditPart.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gef/part/nonvisual/NonVisualBeanEditPart.java
@@ -28,52 +28,52 @@
  * @coverage core.gef.nonvisual
  */
 public final class NonVisualBeanEditPart extends GraphicalEditPart {
-  private final NonVisualBeanInfo m_beanInfo;
+	private final NonVisualBeanInfo m_beanInfo;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public NonVisualBeanEditPart(JavaInfo javaInfo) {
-    m_beanInfo = NonVisualBeanInfo.getNonVisualInfo(javaInfo);
-    setModel(javaInfo);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public NonVisualBeanEditPart(JavaInfo javaInfo) {
+		m_beanInfo = NonVisualBeanInfo.getNonVisualInfo(javaInfo);
+		setModel(javaInfo);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public NonVisualBeanInfo getNonVisualInfo() {
-    return m_beanInfo;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public NonVisualBeanInfo getNonVisualInfo() {
+		return m_beanInfo;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Policy
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createEditPolicies() {
-    installEditPolicy(EditPolicy.SELECTION_ROLE, new NonResizableSelectionEditPolicy());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Policy
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createEditPolicies() {
+		installEditPolicy(EditPolicy.SELECTION_ROLE, new NonResizableSelectionEditPolicy());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Figure
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Figure createFigure() {
-    Image image = ObjectsLabelProvider.INSTANCE.getImage(m_beanInfo.getJavaInfo());
-    return new BeanFigure(image);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Figure
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Figure createFigure() {
+		Image image = ObjectsLabelProvider.INSTANCE.getImage(m_beanInfo.getJavaInfo());
+		return new BeanFigure(image);
+	}
 
-  @Override
-  protected void refreshVisuals() {
-    String text = ObjectsLabelProvider.INSTANCE.getText(m_beanInfo.getJavaInfo());
-    BeanFigure figure = (BeanFigure) getFigure();
-    figure.update(text, m_beanInfo.getLocation());
-  }
+	@Override
+	protected void refreshVisuals() {
+		String text = ObjectsLabelProvider.INSTANCE.getText(m_beanInfo.getJavaInfo());
+		BeanFigure figure = (BeanFigure) getFigure();
+		figure.update(text, m_beanInfo.getLocation());
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gef/policy/OpenErrorLogEditPolicy.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gef/policy/OpenErrorLogEditPolicy.java
index e8fd9026c..2f7023d98 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gef/policy/OpenErrorLogEditPolicy.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gef/policy/OpenErrorLogEditPolicy.java
@@ -36,124 +36,124 @@
  * @coverage core.gef.policy
  */
 public final class OpenErrorLogEditPolicy extends EditPolicy {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Install and access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final Object KEY = OpenErrorLogEditPolicy.class;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Install and access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final Object KEY = OpenErrorLogEditPolicy.class;
 
-  /**
-   * Installs {@link OpenErrorLogEditPolicy} for given {@link AbstractComponentEditPart}.
-   */
-  public static void install(AbstractComponentEditPart editPart) {
-    OpenErrorLogEditPolicy policy = new OpenErrorLogEditPolicy(editPart);
-    editPart.installEditPolicy(KEY, policy);
-  }
+	/**
+	 * Installs {@link OpenErrorLogEditPolicy} for given {@link AbstractComponentEditPart}.
+	 */
+	public static void install(AbstractComponentEditPart editPart) {
+		OpenErrorLogEditPolicy policy = new OpenErrorLogEditPolicy(editPart);
+		editPart.installEditPolicy(KEY, policy);
+	}
 
-  /**
-   * Notifies that {@link AbstractComponentEditPart} was refresh, so {@link OpenErrorLogEditPolicy}
-   * should be refreshed too.
-   */
-  public static void refresh(AbstractComponentEditPart editPart) {
-    OpenErrorLogEditPolicy policy = (OpenErrorLogEditPolicy) editPart.getEditPolicy(KEY);
-    if (policy != null) {
-      policy.refresh();
-    }
-  }
+	/**
+	 * Notifies that {@link AbstractComponentEditPart} was refresh, so {@link OpenErrorLogEditPolicy}
+	 * should be refreshed too.
+	 */
+	public static void refresh(AbstractComponentEditPart editPart) {
+		OpenErrorLogEditPolicy policy = (OpenErrorLogEditPolicy) editPart.getEditPolicy(KEY);
+		if (policy != null) {
+			policy.refresh();
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance fields
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final AbstractComponentEditPart m_editPart;
-  private final JavaInfo m_javaInfo;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance fields
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final AbstractComponentEditPart m_editPart;
+	private final JavaInfo m_javaInfo;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public OpenErrorLogEditPolicy(AbstractComponentEditPart editPart) {
-    m_editPart = editPart;
-    m_javaInfo = m_editPart.getComponent();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public OpenErrorLogEditPolicy(AbstractComponentEditPart editPart) {
+		m_editPart = editPart;
+		m_javaInfo = m_editPart.getComponent();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Figure m_figure;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Figure m_figure;
 
-  /**
-   * If placeholder used - show error log figure. If not - hide it.
-   */
-  private void refresh() {
-    if (m_javaInfo.isPlaceholder()) {
-      if (m_figure == null) {
-        createFigure();
-      }
-      if (m_figure.getParent() == null) {
-        m_editPart.getFigure().add(m_figure);
-      }
-    } else {
-      FigureUtils.removeFigure(m_figure);
-    }
-  }
+	/**
+	 * If placeholder used - show error log figure. If not - hide it.
+	 */
+	private void refresh() {
+		if (m_javaInfo.isPlaceholder()) {
+			if (m_figure == null) {
+				createFigure();
+			}
+			if (m_figure.getParent() == null) {
+				m_editPart.getFigure().add(m_figure);
+			}
+		} else {
+			FigureUtils.removeFigure(m_figure);
+		}
+	}
 
-  private void createFigure() {
-    ILocator locator = new ILocator() {
-      @Override
-      public void relocate(Figure target) {
-        Figure componentFigure = m_editPart.getFigure();
-        Rectangle componentArea = componentFigure.getClientArea();
-        target.setBounds(new Rectangle(5, componentArea.bottom() - 5 - 16, 16, 16));
-      }
-    };
-    m_figure = new Handle(m_editPart, locator) {
-      @Override
-      protected void paintClientArea(Graphics graphics) {
-        Image icon = DesignerPlugin.getImage("actions/errors/errors.gif");
-        graphics.drawImage(icon, 0, 0);
-      }
-    };
-    // open "log" on click
-    m_figure.addMouseListener(new IMouseListener() {
-      @Override
-      public void mouseUp(MouseEvent event) {
-      }
+	private void createFigure() {
+		ILocator locator = new ILocator() {
+			@Override
+			public void relocate(Figure target) {
+				Figure componentFigure = m_editPart.getFigure();
+				Rectangle componentArea = componentFigure.getClientArea();
+				target.setBounds(new Rectangle(5, componentArea.bottom() - 5 - 16, 16, 16));
+			}
+		};
+		m_figure = new Handle(m_editPart, locator) {
+			@Override
+			protected void paintClientArea(Graphics graphics) {
+				Image icon = DesignerPlugin.getImage("actions/errors/errors.gif");
+				graphics.drawImage(icon, 0, 0);
+			}
+		};
+		// open "log" on click
+		m_figure.addMouseListener(new IMouseListener() {
+			@Override
+			public void mouseUp(MouseEvent event) {
+			}
 
-      @Override
-      public void mouseDown(MouseEvent event) {
-        scheduleOpenErrorLog();
-      }
+			@Override
+			public void mouseDown(MouseEvent event) {
+				scheduleOpenErrorLog();
+			}
 
-      @Override
-      public void mouseDoubleClick(MouseEvent event) {
-      }
-    });
-  }
+			@Override
+			public void mouseDoubleClick(MouseEvent event) {
+			}
+		});
+	}
 
-  /**
-   * Schedules showing error log later. We do this to allow normal "click" processing first.
-   */
-  private void scheduleOpenErrorLog() {
-    ExecutionUtils.runAsync(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        openErrorLog();
-      }
-    });
-  }
+	/**
+	 * Schedules showing error log later. We do this to allow normal "click" processing first.
+	 */
+	private void scheduleOpenErrorLog() {
+		ExecutionUtils.runAsync(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				openErrorLog();
+			}
+		});
+	}
 
-  /**
-   * Shows errors log.
-   */
-  private void openErrorLog() {
-    ErrorsAction errorsAction = new ErrorsAction();
-    errorsAction.setRoot(m_javaInfo.getRoot());
-    errorsAction.run();
-  }
+	/**
+	 * Shows errors log.
+	 */
+	private void openErrorLog() {
+		ErrorsAction errorsAction = new ErrorsAction();
+		errorsAction.setRoot(m_javaInfo.getRoot());
+		errorsAction.run();
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gef/policy/OpenListenerEditPolicy.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gef/policy/OpenListenerEditPolicy.java
index a5f6eacc9..d24777eba 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gef/policy/OpenListenerEditPolicy.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gef/policy/OpenListenerEditPolicy.java
@@ -37,41 +37,41 @@
  * @coverage core.gef.policy
  */
 public final class OpenListenerEditPolicy extends EditPolicy {
-  private static final String DOUBLE_CLICK_LISTENER = "double-click.listener";
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance fields
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final String m_listenerName;
-  private final JavaInfo m_javaInfo;
+	private static final String DOUBLE_CLICK_LISTENER = "double-click.listener";
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance fields
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final String m_listenerName;
+	private final JavaInfo m_javaInfo;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public OpenListenerEditPolicy(JavaInfo javaInfo) {
-    m_javaInfo = javaInfo;
-    m_listenerName = JavaInfoUtils.getParameter(javaInfo, DOUBLE_CLICK_LISTENER);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public OpenListenerEditPolicy(JavaInfo javaInfo) {
+		m_javaInfo = javaInfo;
+		m_listenerName = JavaInfoUtils.getParameter(javaInfo, DOUBLE_CLICK_LISTENER);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Request
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void performRequest(Request request) {
-    if (!StringUtils.isEmpty(m_listenerName) && Request.REQ_OPEN.equals(request.getType())) {
-      ExecutionUtils.runLog(new RunnableEx() {
-        @Override
-        public void run() throws Exception {
-          EventsProperty eventsProperty = (EventsProperty) m_javaInfo.getPropertyByTitle("Events");
-          eventsProperty.openStubMethod(m_listenerName);
-        }
-      });
-    }
-    super.performRequest(request);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Request
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void performRequest(Request request) {
+		if (!StringUtils.isEmpty(m_listenerName) && Request.REQ_OPEN.equals(request.getType())) {
+			ExecutionUtils.runLog(new RunnableEx() {
+				@Override
+				public void run() throws Exception {
+					EventsProperty eventsProperty = (EventsProperty) m_javaInfo.getPropertyByTitle("Events");
+					eventsProperty.openStubMethod(m_listenerName);
+				}
+			});
+		}
+		super.performRequest(request);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gef/policy/nonvisual/NonVisualLayoutEditPolicy.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gef/policy/nonvisual/NonVisualLayoutEditPolicy.java
index c7852f4b7..48349fca5 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gef/policy/nonvisual/NonVisualLayoutEditPolicy.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gef/policy/nonvisual/NonVisualLayoutEditPolicy.java
@@ -46,205 +46,205 @@
  * @coverage core.gef.policy.nonvisual
  */
 public final class NonVisualLayoutEditPolicy extends LayoutEditPolicy {
-  private static final int SNAP_GRID_SIZE = 10;
-  private final JavaInfo m_rootInfo;
-  private final ILayoutRequestValidator m_validator;
-  private Figure m_feedbackFigure;
-  private Figure[] m_moveFeedbackFigures;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public NonVisualLayoutEditPolicy(JavaInfo rootInfo) {
-    m_rootInfo = rootInfo;
-    m_validator = new NonVisualValidator(m_rootInfo);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Validator
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected ILayoutRequestValidator getRequestValidator() {
-    return m_validator;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Command getCreateCommand(final CreateRequest request) {
-    final Point location = m_feedbackFigure.getLocation();
-    return new EditCommand(m_rootInfo) {
-      @Override
-      protected void executeEdit() throws Exception {
-        JavaInfo newInfo = (JavaInfo) request.getNewObject();
-        NonVisualBeanContainerInfo.add(m_rootInfo, newInfo, location);
-      }
-    };
-  }
-
-  @Override
-  protected Command getPasteCommand(final PasteRequest request) {
-    final Point location = m_feedbackFigure.getLocation();
-    return new EditCommand(m_rootInfo) {
-      @Override
-      @SuppressWarnings("unchecked")
-      protected void executeEdit() throws Exception {
-        List<JavaInfoMemento> mementos = (List<JavaInfoMemento>) request.getMemento();
-        JavaInfoMemento memento = mementos.get(0);
-        JavaInfo newInfo = memento.create(m_rootInfo);
-        NonVisualBeanContainerInfo.add(m_rootInfo, newInfo, location);
-        memento.apply();
-      }
-    };
-  }
-
-  @Override
-  protected Command getMoveCommand(final ChangeBoundsRequest request) {
-    return new EditCommand(m_rootInfo) {
-      @Override
-      protected void executeEdit() throws Exception {
-        Point snapMoveDelta = applyGrid(request.getMoveDelta(), SNAP_GRID_SIZE);
-        for (Iterator<?> I = request.getEditParts().iterator(); I.hasNext();) {
-          NonVisualBeanEditPart part = (NonVisualBeanEditPart) I.next();
-          NonVisualBeanInfo nonVisualBeanInfo = part.getNonVisualInfo();
-          nonVisualBeanInfo.moveLocation(snapMoveDelta);
-        }
-      }
-    };
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Feedback
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void showLayoutTargetFeedback(Request request) {
-    Object type = request.getType();
-    if (Request.REQ_CREATE.equals(type)) {
-      showCreationFeedback((CreateRequest) request);
-    } else if (Request.REQ_PASTE.equals(type)) {
-      showPasteFeedback((PasteRequest) request);
-    } else if (Request.REQ_MOVE.equals(type)) {
-      showMoveFeedback((ChangeBoundsRequest) request);
-    }
-  }
-
-  @Override
-  protected void eraseLayoutTargetFeedback(Request request) {
-    // remove simple feedback
-    if (m_feedbackFigure != null) {
-      removeFeedback(m_feedbackFigure);
-      m_feedbackFigure = null;
-    }
-    // remove move feedback's
-    if (m_moveFeedbackFigures != null) {
-      for (Figure figure : m_moveFeedbackFigures) {
-        removeFeedback(figure);
-      }
-      m_moveFeedbackFigures = null;
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Create/Paste
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void showCreationFeedback(CreateRequest request) {
-    JavaInfo newInfo = (JavaInfo) request.getNewObject();
-    Point location = request.getLocation();
-    showFeedback(GefMessages.NonVisualLayoutEditPolicy_newFeedback, newInfo, location);
-  }
-
-  @SuppressWarnings("unchecked")
-  private void showPasteFeedback(PasteRequest request) {
-    try {
-      List<JavaInfoMemento> mementos = (List<JavaInfoMemento>) request.getMemento();
-      JavaInfo newInfo = mementos.get(0).create(m_rootInfo);
-      Point location = request.getLocation();
-      showFeedback(GefMessages.NonVisualLayoutEditPolicy_copyFeedback, newInfo, location);
-    } catch (Throwable e) {
-      DesignerPlugin.log(e);
-    }
-  }
-
-  private void showFeedback(String prefix, JavaInfo info, Point location) {
-    // check create feedback
-    if (m_feedbackFigure == null) {
-      BeanFigure figure = new BeanFigure(info.getDescription().getIcon());
-      Class<?> componentClass = info.getDescription().getComponentClass();
-      figure.update(prefix + ClassUtils.getShortClassName(componentClass), location);
-      //
-      m_feedbackFigure = figure;
-      addFeedback(figure);
-    }
-    // configure feedback location
-    Rectangle bounds = m_feedbackFigure.getBounds();
-    Point snapLocation = applyGrid(location, SNAP_GRID_SIZE);
-    m_feedbackFigure.setLocation(new Point(snapLocation.x - bounds.width / 2, snapLocation.y
-        - bounds.height));
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Move
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void showMoveFeedback(ChangeBoundsRequest request) {
-    List<EditPart> editParts = request.getEditParts();
-    // check create feedback's
-    if (m_moveFeedbackFigures == null) {
-      m_moveFeedbackFigures = new Figure[editParts.size()];
-      for (int i = 0; i < m_moveFeedbackFigures.length; i++) {
-        NonVisualBeanEditPart part = (NonVisualBeanEditPart) editParts.get(i);
-        final JavaInfo info = part.getNonVisualInfo().getJavaInfo();
-        BeanFigure figure = new BeanFigure(info.getDescription().getIcon());
-        String text = ExecutionUtils.runObjectLog(new RunnableObjectEx<String>() {
-          @Override
-          public String runObject() throws Exception {
-            return info.getVariableSupport().getTitle();
-          }
-        }, null);
-        figure.update(text, request.getLocation());
-        //
-        m_moveFeedbackFigures[i] = figure;
-        addFeedback(figure);
-      }
-    }
-    // configure feedback's location
-    Point snapMoveDelta = applyGrid(request.getMoveDelta(), SNAP_GRID_SIZE);
-    for (int i = 0; i < m_moveFeedbackFigures.length; i++) {
-      NonVisualBeanEditPart part = (NonVisualBeanEditPart) editParts.get(i);
-      Point location = part.getNonVisualInfo().getLocation().getCopy();
-      location.performTranslate(snapMoveDelta);
-      m_moveFeedbackFigures[i].setLocation(location);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Grid snapping for {@link Point}.
-   */
-  private static Point applyGrid(Point point, int step) {
-    return new Point(applyGrid(point.x, step), applyGrid(point.y, step));
-  }
-
-  /**
-   * Simple math round to nearest integer, based on grid step.
-   */
-  private static int applyGrid(int value, int step) {
-    return value / step * step;
-  }
+	private static final int SNAP_GRID_SIZE = 10;
+	private final JavaInfo m_rootInfo;
+	private final ILayoutRequestValidator m_validator;
+	private Figure m_feedbackFigure;
+	private Figure[] m_moveFeedbackFigures;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public NonVisualLayoutEditPolicy(JavaInfo rootInfo) {
+		m_rootInfo = rootInfo;
+		m_validator = new NonVisualValidator(m_rootInfo);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Validator
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected ILayoutRequestValidator getRequestValidator() {
+		return m_validator;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Command getCreateCommand(final CreateRequest request) {
+		final Point location = m_feedbackFigure.getLocation();
+		return new EditCommand(m_rootInfo) {
+			@Override
+			protected void executeEdit() throws Exception {
+				JavaInfo newInfo = (JavaInfo) request.getNewObject();
+				NonVisualBeanContainerInfo.add(m_rootInfo, newInfo, location);
+			}
+		};
+	}
+
+	@Override
+	protected Command getPasteCommand(final PasteRequest request) {
+		final Point location = m_feedbackFigure.getLocation();
+		return new EditCommand(m_rootInfo) {
+			@Override
+			@SuppressWarnings("unchecked")
+			protected void executeEdit() throws Exception {
+				List<JavaInfoMemento> mementos = (List<JavaInfoMemento>) request.getMemento();
+				JavaInfoMemento memento = mementos.get(0);
+				JavaInfo newInfo = memento.create(m_rootInfo);
+				NonVisualBeanContainerInfo.add(m_rootInfo, newInfo, location);
+				memento.apply();
+			}
+		};
+	}
+
+	@Override
+	protected Command getMoveCommand(final ChangeBoundsRequest request) {
+		return new EditCommand(m_rootInfo) {
+			@Override
+			protected void executeEdit() throws Exception {
+				Point snapMoveDelta = applyGrid(request.getMoveDelta(), SNAP_GRID_SIZE);
+				for (Iterator<?> I = request.getEditParts().iterator(); I.hasNext();) {
+					NonVisualBeanEditPart part = (NonVisualBeanEditPart) I.next();
+					NonVisualBeanInfo nonVisualBeanInfo = part.getNonVisualInfo();
+					nonVisualBeanInfo.moveLocation(snapMoveDelta);
+				}
+			}
+		};
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Feedback
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void showLayoutTargetFeedback(Request request) {
+		Object type = request.getType();
+		if (Request.REQ_CREATE.equals(type)) {
+			showCreationFeedback((CreateRequest) request);
+		} else if (Request.REQ_PASTE.equals(type)) {
+			showPasteFeedback((PasteRequest) request);
+		} else if (Request.REQ_MOVE.equals(type)) {
+			showMoveFeedback((ChangeBoundsRequest) request);
+		}
+	}
+
+	@Override
+	protected void eraseLayoutTargetFeedback(Request request) {
+		// remove simple feedback
+		if (m_feedbackFigure != null) {
+			removeFeedback(m_feedbackFigure);
+			m_feedbackFigure = null;
+		}
+		// remove move feedback's
+		if (m_moveFeedbackFigures != null) {
+			for (Figure figure : m_moveFeedbackFigures) {
+				removeFeedback(figure);
+			}
+			m_moveFeedbackFigures = null;
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Create/Paste
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void showCreationFeedback(CreateRequest request) {
+		JavaInfo newInfo = (JavaInfo) request.getNewObject();
+		Point location = request.getLocation();
+		showFeedback(GefMessages.NonVisualLayoutEditPolicy_newFeedback, newInfo, location);
+	}
+
+	@SuppressWarnings("unchecked")
+	private void showPasteFeedback(PasteRequest request) {
+		try {
+			List<JavaInfoMemento> mementos = (List<JavaInfoMemento>) request.getMemento();
+			JavaInfo newInfo = mementos.get(0).create(m_rootInfo);
+			Point location = request.getLocation();
+			showFeedback(GefMessages.NonVisualLayoutEditPolicy_copyFeedback, newInfo, location);
+		} catch (Throwable e) {
+			DesignerPlugin.log(e);
+		}
+	}
+
+	private void showFeedback(String prefix, JavaInfo info, Point location) {
+		// check create feedback
+		if (m_feedbackFigure == null) {
+			BeanFigure figure = new BeanFigure(info.getDescription().getIcon());
+			Class<?> componentClass = info.getDescription().getComponentClass();
+			figure.update(prefix + ClassUtils.getShortClassName(componentClass), location);
+			//
+			m_feedbackFigure = figure;
+			addFeedback(figure);
+		}
+		// configure feedback location
+		Rectangle bounds = m_feedbackFigure.getBounds();
+		Point snapLocation = applyGrid(location, SNAP_GRID_SIZE);
+		m_feedbackFigure.setLocation(new Point(snapLocation.x - bounds.width / 2, snapLocation.y
+				- bounds.height));
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Move
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void showMoveFeedback(ChangeBoundsRequest request) {
+		List<EditPart> editParts = request.getEditParts();
+		// check create feedback's
+		if (m_moveFeedbackFigures == null) {
+			m_moveFeedbackFigures = new Figure[editParts.size()];
+			for (int i = 0; i < m_moveFeedbackFigures.length; i++) {
+				NonVisualBeanEditPart part = (NonVisualBeanEditPart) editParts.get(i);
+				final JavaInfo info = part.getNonVisualInfo().getJavaInfo();
+				BeanFigure figure = new BeanFigure(info.getDescription().getIcon());
+				String text = ExecutionUtils.runObjectLog(new RunnableObjectEx<String>() {
+					@Override
+					public String runObject() throws Exception {
+						return info.getVariableSupport().getTitle();
+					}
+				}, null);
+				figure.update(text, request.getLocation());
+				//
+				m_moveFeedbackFigures[i] = figure;
+				addFeedback(figure);
+			}
+		}
+		// configure feedback's location
+		Point snapMoveDelta = applyGrid(request.getMoveDelta(), SNAP_GRID_SIZE);
+		for (int i = 0; i < m_moveFeedbackFigures.length; i++) {
+			NonVisualBeanEditPart part = (NonVisualBeanEditPart) editParts.get(i);
+			Point location = part.getNonVisualInfo().getLocation().getCopy();
+			location.performTranslate(snapMoveDelta);
+			m_moveFeedbackFigures[i].setLocation(location);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Grid snapping for {@link Point}.
+	 */
+	private static Point applyGrid(Point point, int step) {
+		return new Point(applyGrid(point.x, step), applyGrid(point.y, step));
+	}
+
+	/**
+	 * Simple math round to nearest integer, based on grid step.
+	 */
+	private static int applyGrid(int value, int step) {
+		return value / step * step;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gef/policy/nonvisual/NonVisualValidator.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gef/policy/nonvisual/NonVisualValidator.java
index 5e81daa5a..2abded31e 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gef/policy/nonvisual/NonVisualValidator.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gef/policy/nonvisual/NonVisualValidator.java
@@ -37,101 +37,101 @@
  * @coverage core.gef.policy.nonvisual
  */
 final class NonVisualValidator implements ILayoutRequestValidator {
-  protected final JavaInfo m_infoForMemento;
+	protected final JavaInfo m_infoForMemento;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public NonVisualValidator(JavaInfo infoForMemento) {
-    m_infoForMemento = infoForMemento;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public NonVisualValidator(JavaInfo infoForMemento) {
+		m_infoForMemento = infoForMemento;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Create/Paste
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean validateCreateRequest(EditPart host, CreateRequest request) {
-    if (!acceptDropNonVisualBeans()) {
-      return false;
-    }
-    final Object newObject = request.getNewObject();
-    if (newObject instanceof JavaInfo) {
-      return ExecutionUtils.runObjectLog(new RunnableObjectEx<Boolean>() {
-        @Override
-        public Boolean runObject() throws Exception {
-          JavaInfo newInfo = (JavaInfo) newObject;
-          return validateJavaInfo(newInfo);
-        }
-      }, false);
-    }
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Create/Paste
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean validateCreateRequest(EditPart host, CreateRequest request) {
+		if (!acceptDropNonVisualBeans()) {
+			return false;
+		}
+		final Object newObject = request.getNewObject();
+		if (newObject instanceof JavaInfo) {
+			return ExecutionUtils.runObjectLog(new RunnableObjectEx<Boolean>() {
+				@Override
+				public Boolean runObject() throws Exception {
+					JavaInfo newInfo = (JavaInfo) newObject;
+					return validateJavaInfo(newInfo);
+				}
+			}, false);
+		}
+		return false;
+	}
 
-  @Override
-  public boolean validatePasteRequest(EditPart host, final PasteRequest request) {
-    if (!acceptDropNonVisualBeans()) {
-      return false;
-    }
-    return ExecutionUtils.runObjectLog(new RunnableObjectEx<Boolean>() {
-      @Override
-      @SuppressWarnings("unchecked")
-      public Boolean runObject() throws Exception {
-        List<JavaInfoMemento> mementos = (List<JavaInfoMemento>) request.getMemento();
-        if (mementos.size() == 1) {
-          JavaInfo newInfo = mementos.get(0).create(m_infoForMemento);
-          return validateJavaInfo(newInfo);
-        }
-        return false;
-      }
-    }, false);
-  }
+	@Override
+	public boolean validatePasteRequest(EditPart host, final PasteRequest request) {
+		if (!acceptDropNonVisualBeans()) {
+			return false;
+		}
+		return ExecutionUtils.runObjectLog(new RunnableObjectEx<Boolean>() {
+			@Override
+			@SuppressWarnings("unchecked")
+			public Boolean runObject() throws Exception {
+				List<JavaInfoMemento> mementos = (List<JavaInfoMemento>) request.getMemento();
+				if (mementos.size() == 1) {
+					JavaInfo newInfo = mementos.get(0).create(m_infoForMemento);
+					return validateJavaInfo(newInfo);
+				}
+				return false;
+			}
+		}, false);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Add/Move
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean validateAddRequest(EditPart host, ChangeBoundsRequest request) {
-    return validateMoveRequest(host, request);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Add/Move
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean validateAddRequest(EditPart host, ChangeBoundsRequest request) {
+		return validateMoveRequest(host, request);
+	}
 
-  @Override
-  public boolean validateMoveRequest(EditPart host, ChangeBoundsRequest request) {
-    for (EditPart part : request.getEditParts()) {
-      if (!(part instanceof NonVisualBeanEditPart)) {
-        return false;
-      }
-    }
-    return true;
-  }
+	@Override
+	public boolean validateMoveRequest(EditPart host, ChangeBoundsRequest request) {
+		for (EditPart part : request.getEditParts()) {
+			if (!(part instanceof NonVisualBeanEditPart)) {
+				return false;
+			}
+		}
+		return true;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected static boolean validateJavaInfo(JavaInfo newInfo) throws Exception {
-    ComponentDescription description = newInfo.getDescription();
-    // ignore special models (absolute layout and etc)
-    if (description.getComponentClass() == null) {
-      return false;
-    }
-    // ignore is disabled
-    if (JavaInfoUtils.hasTrueParameter(newInfo, "NVO.disabled")) {
-      return false;
-    }
-    // validate only java bean objects
-    String source = newInfo.getCreationSupport().add_getSource(null);
-    return !StringUtils.contains(source, "%parent%") && !StringUtils.contains(source, "%child%");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected static boolean validateJavaInfo(JavaInfo newInfo) throws Exception {
+		ComponentDescription description = newInfo.getDescription();
+		// ignore special models (absolute layout and etc)
+		if (description.getComponentClass() == null) {
+			return false;
+		}
+		// ignore is disabled
+		if (JavaInfoUtils.hasTrueParameter(newInfo, "NVO.disabled")) {
+			return false;
+		}
+		// validate only java bean objects
+		String source = newInfo.getCreationSupport().add_getSource(null);
+		return !StringUtils.contains(source, "%parent%") && !StringUtils.contains(source, "%child%");
+	}
 
-  protected static boolean acceptDropNonVisualBeans() {
-    return DesignerPlugin.getPreferences().getBoolean(
-        IPreferenceConstants.P_COMMON_ACCEPT_NON_VISUAL_BEANS);
-  }
+	protected static boolean acceptDropNonVisualBeans() {
+		return DesignerPlugin.getPreferences().getBoolean(
+				IPreferenceConstants.P_COMMON_ACCEPT_NON_VISUAL_BEANS);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gef/tools/TabOrderContainerRequest.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gef/tools/TabOrderContainerRequest.java
index d6a0edbb5..a46d20ac9 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gef/tools/TabOrderContainerRequest.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gef/tools/TabOrderContainerRequest.java
@@ -24,78 +24,78 @@
  * @coverage core.gef
  */
 public final class TabOrderContainerRequest extends Request {
-  private List<AbstractComponentInfo> m_possibleChildren;
-  private List<AbstractComponentInfo> m_children;
-  private Object m_selectedChild;
-  private Command m_command;
+	private List<AbstractComponentInfo> m_possibleChildren;
+	private List<AbstractComponentInfo> m_children;
+	private Object m_selectedChild;
+	private Command m_command;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public TabOrderContainerRequest(Object type) {
-    super(type);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public TabOrderContainerRequest(Object type) {
+		super(type);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return children that can be selected or not in list of tab order.
-   */
-  public List<AbstractComponentInfo> getPossibleChildren() {
-    return m_possibleChildren;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return children that can be selected or not in list of tab order.
+	 */
+	public List<AbstractComponentInfo> getPossibleChildren() {
+		return m_possibleChildren;
+	}
 
-  /**
-   * Sets children that can be selected or not in list of tab order.
-   */
-  public void setPossibleChildren(List<AbstractComponentInfo> possibleChildren) {
-    m_possibleChildren = possibleChildren;
-  }
+	/**
+	 * Sets children that can be selected or not in list of tab order.
+	 */
+	public void setPossibleChildren(List<AbstractComponentInfo> possibleChildren) {
+		m_possibleChildren = possibleChildren;
+	}
 
-  /**
-   * @return selected children that should be reordered.
-   */
-  public List<AbstractComponentInfo> getChildren() {
-    return m_children;
-  }
+	/**
+	 * @return selected children that should be reordered.
+	 */
+	public List<AbstractComponentInfo> getChildren() {
+		return m_children;
+	}
 
-  /**
-   * Sets selected children that should be reordered.
-   */
-  public void setChildren(List<AbstractComponentInfo> children) {
-    m_children = children;
-  }
+	/**
+	 * Sets selected children that should be reordered.
+	 */
+	public void setChildren(List<AbstractComponentInfo> children) {
+		m_children = children;
+	}
 
-  /**
-   * @return the current selection for change ordering.
-   */
-  public Object getSelectedChild() {
-    return m_selectedChild;
-  }
+	/**
+	 * @return the current selection for change ordering.
+	 */
+	public Object getSelectedChild() {
+		return m_selectedChild;
+	}
 
-  /**
-   * Sets current selection for change ordering.
-   */
-  public void setSelectedChild(Object selectedChild) {
-    m_selectedChild = selectedChild;
-  }
+	/**
+	 * Sets current selection for change ordering.
+	 */
+	public void setSelectedChild(Object selectedChild) {
+		m_selectedChild = selectedChild;
+	}
 
-  /**
-   * @return {@link Command} for execute reordering.
-   */
-  public Command getCommand() {
-    return m_command;
-  }
+	/**
+	 * @return {@link Command} for execute reordering.
+	 */
+	public Command getCommand() {
+		return m_command;
+	}
 
-  /**
-   * Sets {@link Command} for execute reordering.
-   */
-  public void setCommand(Command command) {
-    m_command = command;
-  }
+	/**
+	 * Sets {@link Command} for execute reordering.
+	 */
+	public void setCommand(Command command) {
+		m_command = command;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gef/tools/TabOrderTool.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gef/tools/TabOrderTool.java
index ed79c660d..149a25aa9 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gef/tools/TabOrderTool.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gef/tools/TabOrderTool.java
@@ -35,236 +35,236 @@
  * @coverage core.gef
  */
 public final class TabOrderTool extends TargetingTool {
-  private final TabOrderContainerRequest m_containerRequest =
-      new TabOrderContainerRequest(TabOrderContainerEditPolicy.REQ_CONTAINER_TAB_ORDER);
-  private final IEditPartViewer m_viewer;
-  private EditPolicy m_containerPolicy;
-  private int m_currentIndex;
-  private boolean m_saveTabOrder;
-  private boolean m_changingContainer;
+	private final TabOrderContainerRequest m_containerRequest =
+			new TabOrderContainerRequest(TabOrderContainerEditPolicy.REQ_CONTAINER_TAB_ORDER);
+	private final IEditPartViewer m_viewer;
+	private EditPolicy m_containerPolicy;
+	private int m_currentIndex;
+	private boolean m_saveTabOrder;
+	private boolean m_changingContainer;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public TabOrderTool(EditPart part) {
-    setDefaultCursor(ICursorConstants.ARROW);
-    m_viewer = part.getViewer();
-    m_viewer.addSelectionChangedListener(m_selectionListener);
-    m_containerPolicy = getContainerRole(part);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public TabOrderTool(EditPart part) {
+		setDefaultCursor(ICursorConstants.ARROW);
+		m_viewer = part.getViewer();
+		m_viewer.addSelectionChangedListener(m_selectionListener);
+		m_containerPolicy = getContainerRole(part);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tool
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void activate() {
-    super.activate();
-    activateTabContainerPolicy();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tool
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void activate() {
+		super.activate();
+		activateTabContainerPolicy();
+	}
 
-  @Override
-  public void deactivate() {
-    super.deactivate();
-    m_viewer.removeSelectionChangedListener(m_selectionListener);
-    if (m_viewer.getControl() != null) {
-      deactivateTabContainerPolicy();
-    }
-  }
+	@Override
+	public void deactivate() {
+		super.deactivate();
+		m_viewer.removeSelectionChangedListener(m_selectionListener);
+		if (m_viewer.getControl() != null) {
+			deactivateTabContainerPolicy();
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Request
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Request getTargetRequest() {
-    return TabOrderContainerEditPolicy.TAB_ORDER_REQUEST;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Request
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Request getTargetRequest() {
+		return TabOrderContainerEditPolicy.TAB_ORDER_REQUEST;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Selection
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final ISelectionChangedListener m_selectionListener = new ISelectionChangedListener() {
-    @Override
-    public void selectionChanged(SelectionChangedEvent event) {
-      // we can receive selection change event during changing to new container, ignore it
-      if (m_changingContainer) {
-        return;
-      }
-      //
-      List<EditPart> selectedParts = m_viewer.getSelectedEditParts();
-      if (selectedParts.size() == 1) {
-        if (m_containerPolicy != null) {
-          deactivateTabContainerPolicy();
-        }
-        activateTabContainerPolicy(selectedParts.get(0));
-      } else {
-        m_containerPolicy = null;
-      }
-    }
-  };
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Selection
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final ISelectionChangedListener m_selectionListener = new ISelectionChangedListener() {
+		@Override
+		public void selectionChanged(SelectionChangedEvent event) {
+			// we can receive selection change event during changing to new container, ignore it
+			if (m_changingContainer) {
+				return;
+			}
+			//
+			List<EditPart> selectedParts = m_viewer.getSelectedEditParts();
+			if (selectedParts.size() == 1) {
+				if (m_containerPolicy != null) {
+					deactivateTabContainerPolicy();
+				}
+				activateTabContainerPolicy(selectedParts.get(0));
+			} else {
+				m_containerPolicy = null;
+			}
+		}
+	};
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // High-Level handle MouseEvent
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void handleButtonDown(int button) {
-    if (m_containerPolicy != null
-        && m_containerRequest.getPossibleChildren() != null
-        && m_containerRequest.getChildren() != null) {
-      updateTargetUnderMouse();
-      EditPart editPart = getTargetEditPart();
-      if (editPart != null) {
-        AbstractComponentInfo model = (AbstractComponentInfo) editPart.getModel();
-        List<AbstractComponentInfo> children = m_containerRequest.getChildren();
-        List<AbstractComponentInfo> possibleChildren = m_containerRequest.getPossibleChildren();
-        if (possibleChildren.contains(model)) {
-          if (children.contains(model)) {
-            if (DesignerPlugin.isCtrlPressed()) {
-              // mark current child as selected
-              m_containerRequest.setSelectedChild(editPart.getModel());
-            } else if (DesignerPlugin.isShiftPressed()) {
-              children.remove(model);
-              if (m_containerRequest.getSelectedChild() == model) {
-                m_containerRequest.setSelectedChild(null);
-              }
-              m_saveTabOrder = true;
-            } else if (m_containerRequest.getSelectedChild() != null) {
-              // prepare index of selected child
-              Object selectedChild = m_containerRequest.getSelectedChild();
-              int selectedIndex = children.indexOf(selectedChild);
-              m_containerRequest.setSelectedChild(null);
-              // move clicked child to selected index
-              children.remove(model);
-              children.add(selectedIndex, model);
-              m_saveTabOrder = true;
-            } else {
-              // move clicked child to current index and move index forward
-              children.remove(model);
-              children.add(m_currentIndex++, model);
-              m_currentIndex = Math.min(m_currentIndex, children.size() - 1);
-              m_saveTabOrder = true;
-            }
-            //
-            m_containerPolicy.showTargetFeedback(m_containerRequest);
-          } else if (DesignerPlugin.isShiftPressed()) {
-            children.add(model);
-            m_containerPolicy.showTargetFeedback(m_containerRequest);
-          }
-        } else {
-          // this was click on EditPart outside of active container
-          EditPart activateOnPart = null;
-          // find, may be we click on new container or child on this container
-          if (hasContainerRole(editPart)) {
-            activateOnPart = editPart;
-          } else if (hasContainerRole(editPart.getParent())) {
-            activateOnPart = editPart.getParent();
-          }
-          // activate tool for new container
-          if (activateOnPart != null) {
-            try {
-              m_changingContainer = true;
-              deactivateTabContainerPolicy();
-              activateTabContainerPolicy(activateOnPart);
-            } finally {
-              m_changingContainer = false;
-            }
-          }
-        }
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// High-Level handle MouseEvent
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void handleButtonDown(int button) {
+		if (m_containerPolicy != null
+				&& m_containerRequest.getPossibleChildren() != null
+				&& m_containerRequest.getChildren() != null) {
+			updateTargetUnderMouse();
+			EditPart editPart = getTargetEditPart();
+			if (editPart != null) {
+				AbstractComponentInfo model = (AbstractComponentInfo) editPart.getModel();
+				List<AbstractComponentInfo> children = m_containerRequest.getChildren();
+				List<AbstractComponentInfo> possibleChildren = m_containerRequest.getPossibleChildren();
+				if (possibleChildren.contains(model)) {
+					if (children.contains(model)) {
+						if (DesignerPlugin.isCtrlPressed()) {
+							// mark current child as selected
+							m_containerRequest.setSelectedChild(editPart.getModel());
+						} else if (DesignerPlugin.isShiftPressed()) {
+							children.remove(model);
+							if (m_containerRequest.getSelectedChild() == model) {
+								m_containerRequest.setSelectedChild(null);
+							}
+							m_saveTabOrder = true;
+						} else if (m_containerRequest.getSelectedChild() != null) {
+							// prepare index of selected child
+							Object selectedChild = m_containerRequest.getSelectedChild();
+							int selectedIndex = children.indexOf(selectedChild);
+							m_containerRequest.setSelectedChild(null);
+							// move clicked child to selected index
+							children.remove(model);
+							children.add(selectedIndex, model);
+							m_saveTabOrder = true;
+						} else {
+							// move clicked child to current index and move index forward
+							children.remove(model);
+							children.add(m_currentIndex++, model);
+							m_currentIndex = Math.min(m_currentIndex, children.size() - 1);
+							m_saveTabOrder = true;
+						}
+						//
+						m_containerPolicy.showTargetFeedback(m_containerRequest);
+					} else if (DesignerPlugin.isShiftPressed()) {
+						children.add(model);
+						m_containerPolicy.showTargetFeedback(m_containerRequest);
+					}
+				} else {
+					// this was click on EditPart outside of active container
+					EditPart activateOnPart = null;
+					// find, may be we click on new container or child on this container
+					if (hasContainerRole(editPart)) {
+						activateOnPart = editPart;
+					} else if (hasContainerRole(editPart.getParent())) {
+						activateOnPart = editPart.getParent();
+					}
+					// activate tool for new container
+					if (activateOnPart != null) {
+						try {
+							m_changingContainer = true;
+							deactivateTabContainerPolicy();
+							activateTabContainerPolicy(activateOnPart);
+						} finally {
+							m_changingContainer = false;
+						}
+					}
+				}
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Handling Operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void updateTargetUnderMouse() {
-    // find on clickable layer
-    EditPart editPart =
-        getViewer().findTargetEditPart(
-            m_currentScreenX,
-            m_currentScreenY,
-            getExclusionSet(),
-            getTargetingConditional(),
-            IEditPartViewer.CLICKABLE_LAYER);
-    // common find target part
-    if (editPart == null) {
-      editPart =
-          getViewer().findTargetEditPart(
-              m_currentScreenX,
-              m_currentScreenY,
-              getExclusionSet(),
-              getTargetingConditional());
-    }
-    if (editPart != null) {
-      editPart = editPart.getTargetEditPart(getTargetRequest());
-    }
-    setTargetEditPart(editPart);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Handling Operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void updateTargetUnderMouse() {
+		// find on clickable layer
+		EditPart editPart =
+				getViewer().findTargetEditPart(
+						m_currentScreenX,
+						m_currentScreenY,
+						getExclusionSet(),
+						getTargetingConditional(),
+						IEditPartViewer.CLICKABLE_LAYER);
+		// common find target part
+		if (editPart == null) {
+			editPart =
+					getViewer().findTargetEditPart(
+							m_currentScreenX,
+							m_currentScreenY,
+							getExclusionSet(),
+							getTargetingConditional());
+		}
+		if (editPart != null) {
+			editPart = editPart.getTargetEditPart(getTargetRequest());
+		}
+		setTargetEditPart(editPart);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Handle KeyEvent
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void keyPressed(KeyEvent event, IEditPartViewer viewer) {
-    if (event.keyCode == SWT.ESC) {
-      viewer.getEditDomain().loadDefaultTool();
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Handle KeyEvent
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void keyPressed(KeyEvent event, IEditPartViewer viewer) {
+		if (event.keyCode == SWT.ESC) {
+			viewer.getEditDomain().loadDefaultTool();
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void activateTabContainerPolicy(EditPart editPart) {
-    m_containerPolicy = getContainerRole(editPart);
-    activateTabContainerPolicy();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void activateTabContainerPolicy(EditPart editPart) {
+		m_containerPolicy = getContainerRole(editPart);
+		activateTabContainerPolicy();
+	}
 
-  private void activateTabContainerPolicy() {
-    if (isActive() && m_containerPolicy != null) {
-      m_containerRequest.setChildren(null);
-      m_containerPolicy.showTargetFeedback(m_containerRequest);
-    }
-    m_currentIndex = 0;
-    m_saveTabOrder = false;
-  }
+	private void activateTabContainerPolicy() {
+		if (isActive() && m_containerPolicy != null) {
+			m_containerRequest.setChildren(null);
+			m_containerPolicy.showTargetFeedback(m_containerRequest);
+		}
+		m_currentIndex = 0;
+		m_saveTabOrder = false;
+	}
 
-  private void deactivateTabContainerPolicy() {
-    if (m_containerPolicy != null) {
-      m_containerPolicy.eraseTargetFeedback(m_containerRequest);
-      if (m_saveTabOrder && m_containerRequest.getCommand() != null) {
-        getDomain().executeCommand(m_containerRequest.getCommand());
-      }
-    }
-  }
+	private void deactivateTabContainerPolicy() {
+		if (m_containerPolicy != null) {
+			m_containerPolicy.eraseTargetFeedback(m_containerRequest);
+			if (m_saveTabOrder && m_containerRequest.getCommand() != null) {
+				getDomain().executeCommand(m_containerRequest.getCommand());
+			}
+		}
+	}
 
-  private static EditPolicy getContainerRole(EditPart part) {
-    if (part != null) {
-      EditPolicy policy = part.getEditPolicy(TabOrderContainerEditPolicy.TAB_CONTAINER_ROLE);
-      if (policy != null) {
-        return policy;
-      }
-      return getContainerRole(part.getParent());
-    }
-    return null;
-  }
+	private static EditPolicy getContainerRole(EditPart part) {
+		if (part != null) {
+			EditPolicy policy = part.getEditPolicy(TabOrderContainerEditPolicy.TAB_CONTAINER_ROLE);
+			if (policy != null) {
+				return policy;
+			}
+			return getContainerRole(part.getParent());
+		}
+		return null;
+	}
 
-  public static boolean hasContainerRole(EditPart part) {
-    return getContainerRole(part) != null;
-  }
+	public static boolean hasContainerRole(EditPart part) {
+		return getContainerRole(part) != null;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gefTree/EditPartFactory2.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gefTree/EditPartFactory2.java
index 39fa14c36..f44a63201 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gefTree/EditPartFactory2.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gefTree/EditPartFactory2.java
@@ -28,114 +28,114 @@
  * @coverage core.gefTree
  */
 public final class EditPartFactory2 implements IEditPartFactory {
-  public static final IEditPartFactory INSTANCE = new EditPartFactory2();
+	public static final IEditPartFactory INSTANCE = new EditPartFactory2();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private EditPartFactory2() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private EditPartFactory2() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IEditPartFactory
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public EditPart createEditPart(EditPart context, Object model) {
-    if (model == null) {
-      return null;
-    }
-    // flow container group
-    if (model instanceof FlowContainerGroupInfo) {
-      FlowContainerGroupInfo groupInfo = (FlowContainerGroupInfo) model;
-      return new FlowContainerGroupEditPart(groupInfo);
-    }
-    // child array
-    if (model instanceof AbstractArrayObjectInfo) {
-      AbstractArrayObjectInfo arrayInfo = (AbstractArrayObjectInfo) model;
-      return new ArrayObjectEditPart(arrayInfo);
-    }
-    // use default EditPart for JavaInfo and ObjectInfo
-    if (model instanceof JavaInfo) {
-      return new JavaEditPart((JavaInfo) model);
-    }
-    // no EditPart found
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IEditPartFactory
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public EditPart createEditPart(EditPart context, Object model) {
+		if (model == null) {
+			return null;
+		}
+		// flow container group
+		if (model instanceof FlowContainerGroupInfo) {
+			FlowContainerGroupInfo groupInfo = (FlowContainerGroupInfo) model;
+			return new FlowContainerGroupEditPart(groupInfo);
+		}
+		// child array
+		if (model instanceof AbstractArrayObjectInfo) {
+			AbstractArrayObjectInfo arrayInfo = (AbstractArrayObjectInfo) model;
+			return new ArrayObjectEditPart(arrayInfo);
+		}
+		// use default EditPart for JavaInfo and ObjectInfo
+		if (model instanceof JavaInfo) {
+			return new JavaEditPart((JavaInfo) model);
+		}
+		// no EditPart found
+		return null;
+	}
 
-  private EditPart createEditPartPure(EditPart context, Object model) {
-    // menu
-//    if (model instanceof ObjectInfo) {
-//      ObjectInfo objectInfo = (ObjectInfo) model;
-//      {
-//        IMenuInfo menuObject = MenuObjectInfoUtils.getMenuInfo(model);
-//        if (menuObject != null) {
-//          return new MenuEditPart(objectInfo, menuObject);
-//        }
-//      }
-//      {
-//        IMenuItemInfo itemObject = MenuObjectInfoUtils.getMenuItemInfo(model);
-//        if (itemObject != null) {
-//          return new MenuItemEditPart(objectInfo, itemObject);
-//        }
-//      }
-//    }
-    // check each external factory
-//    for (IEditPartFactory factory : getFactories()) {
-//      EditPart editPart = factory.createEditPart(context, model);
-//      if (editPart != null) {
-//        return editPart;
-//      }
-//    }
-    // flow container group
-    if (model instanceof FlowContainerGroupInfo) {
-      FlowContainerGroupInfo groupInfo = (FlowContainerGroupInfo) model;
-      return new FlowContainerGroupEditPart(groupInfo);
-    }
-    // child array
-    if (model instanceof AbstractArrayObjectInfo) {
-      AbstractArrayObjectInfo arrayInfo = (AbstractArrayObjectInfo) model;
-      return new ArrayObjectEditPart(arrayInfo);
-    }
-    // use default EditPart for JavaInfo and ObjectInfo
-    if (model instanceof JavaInfo) {
-      return new JavaEditPart((JavaInfo) model);
-    }
-//    if (model instanceof ObjectInfo) {
-//      return new ObjectEditPart((ObjectInfo) model);
-//    }
-    // no EditPart found
-    return null;
-  }
-//  ////////////////////////////////////////////////////////////////////////////
-//  //
-//  // Extensions
-//  //
-//  ////////////////////////////////////////////////////////////////////////////
-//  /**
-//   * @return the instances of {@link IEditPartFactory}.
-//   */
-//  private static List<IEditPartFactory> getFactories() {
-//    return ExternalFactoriesHelper.getElementsInstances(
-//        IEditPartFactory.class,
-//        "org.eclipse.wb.core.treeEditPartFactories",
-//        "factory");
-//  }
-//
-//  /**
-//   * Configures given {@link EditPart} using externally contributed {@link IEditPartConfigurator}'s.
-//   */
-//  private static void configureEditPart(EditPart context, EditPart editPart) {
-//    List<IEditPartConfigurator> configurators =
-//        ExternalFactoriesHelper.getElementsInstances(
-//            IEditPartConfigurator.class,
-//            "org.eclipse.wb.core.treeEditPartConfigurators",
-//            "configurator");
-//    for (IEditPartConfigurator configurator : configurators) {
-//      configurator.configure(context, editPart);
-//    }
-//  }
+	private EditPart createEditPartPure(EditPart context, Object model) {
+		// menu
+		//    if (model instanceof ObjectInfo) {
+		//      ObjectInfo objectInfo = (ObjectInfo) model;
+		//      {
+		//        IMenuInfo menuObject = MenuObjectInfoUtils.getMenuInfo(model);
+		//        if (menuObject != null) {
+		//          return new MenuEditPart(objectInfo, menuObject);
+		//        }
+		//      }
+		//      {
+		//        IMenuItemInfo itemObject = MenuObjectInfoUtils.getMenuItemInfo(model);
+		//        if (itemObject != null) {
+		//          return new MenuItemEditPart(objectInfo, itemObject);
+		//        }
+		//      }
+		//    }
+		// check each external factory
+		//    for (IEditPartFactory factory : getFactories()) {
+		//      EditPart editPart = factory.createEditPart(context, model);
+		//      if (editPart != null) {
+		//        return editPart;
+		//      }
+		//    }
+		// flow container group
+		if (model instanceof FlowContainerGroupInfo) {
+			FlowContainerGroupInfo groupInfo = (FlowContainerGroupInfo) model;
+			return new FlowContainerGroupEditPart(groupInfo);
+		}
+		// child array
+		if (model instanceof AbstractArrayObjectInfo) {
+			AbstractArrayObjectInfo arrayInfo = (AbstractArrayObjectInfo) model;
+			return new ArrayObjectEditPart(arrayInfo);
+		}
+		// use default EditPart for JavaInfo and ObjectInfo
+		if (model instanceof JavaInfo) {
+			return new JavaEditPart((JavaInfo) model);
+		}
+		//    if (model instanceof ObjectInfo) {
+		//      return new ObjectEditPart((ObjectInfo) model);
+		//    }
+		// no EditPart found
+		return null;
+	}
+	//  ////////////////////////////////////////////////////////////////////////////
+	//  //
+	//  // Extensions
+	//  //
+	//  ////////////////////////////////////////////////////////////////////////////
+	//  /**
+	//   * @return the instances of {@link IEditPartFactory}.
+	//   */
+	//  private static List<IEditPartFactory> getFactories() {
+	//    return ExternalFactoriesHelper.getElementsInstances(
+	//        IEditPartFactory.class,
+	//        "org.eclipse.wb.core.treeEditPartFactories",
+	//        "factory");
+	//  }
+	//
+	//  /**
+	//   * Configures given {@link EditPart} using externally contributed {@link IEditPartConfigurator}'s.
+	//   */
+	//  private static void configureEditPart(EditPart context, EditPart editPart) {
+	//    List<IEditPartConfigurator> configurators =
+	//        ExternalFactoriesHelper.getElementsInstances(
+	//            IEditPartConfigurator.class,
+	//            "org.eclipse.wb.core.treeEditPartConfigurators",
+	//            "configurator");
+	//    for (IEditPartConfigurator configurator : configurators) {
+	//      configurator.configure(context, editPart);
+	//    }
+	//  }
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gefTree/GenericContainersConfigurator.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gefTree/GenericContainersConfigurator.java
index e38c89d81..db56097bd 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gefTree/GenericContainersConfigurator.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gefTree/GenericContainersConfigurator.java
@@ -36,91 +36,91 @@
  * @coverage core.gefTree
  */
 public final class GenericContainersConfigurator implements IEditPartConfigurator {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IEditPartConfigurator
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void configure(EditPart context, EditPart editPart) {
-    if (editPart.getModel() instanceof JavaInfo) {
-      JavaInfo component = (JavaInfo) editPart.getModel();
-      configureComponent(editPart, component);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IEditPartConfigurator
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void configure(EditPart context, EditPart editPart) {
+		if (editPart.getModel() instanceof JavaInfo) {
+			JavaInfo component = (JavaInfo) editPart.getModel();
+			configureComponent(editPart, component);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Configuring
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void configureComponent(EditPart editPart, JavaInfo component) {
-    configureSimpleContainer(editPart, component);
-    configureFlowContainer(editPart, component);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Configuring
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void configureComponent(EditPart editPart, JavaInfo component) {
+		configureSimpleContainer(editPart, component);
+		configureFlowContainer(editPart, component);
+	}
 
-  /**
-   * Simple containers: SimplePanel, CaptionPanel, etc.
-   */
-  private void configureSimpleContainer(EditPart editPart, JavaInfo component) {
-    List<SimpleContainer> containers = new SimpleContainerFactory(component, false).get();
-    for (SimpleContainer container : containers) {
-      EditPolicy layoutPolicy = new SimpleContainerLayoutEditPolicy(component, container);
-      editPart.installEditPolicy(container, layoutPolicy);
-    }
-  }
+	/**
+	 * Simple containers: SimplePanel, CaptionPanel, etc.
+	 */
+	private void configureSimpleContainer(EditPart editPart, JavaInfo component) {
+		List<SimpleContainer> containers = new SimpleContainerFactory(component, false).get();
+		for (SimpleContainer container : containers) {
+			EditPolicy layoutPolicy = new SimpleContainerLayoutEditPolicy(component, container);
+			editPart.installEditPolicy(container, layoutPolicy);
+		}
+	}
 
-  /**
-   * Flow containers: FlowPanel, HorizontalPanel, VerticalPanel, etc.
-   */
-  private void configureFlowContainer(EditPart editPart, JavaInfo component) {
-    List<FlowContainer> containers = new FlowContainerFactory(component, false).get();
-    for (FlowContainer container : containers) {
-      EditPolicy layoutPolicy = new FlowContainerLayoutEditPolicy(component, container);
-      editPart.installEditPolicy(container, layoutPolicy);
-      // support groups
-      if (component instanceof AbstractComponentInfo
-          && container instanceof FlowContainerConfigurable) {
-        configureGroupInfo(
-            editPart,
-            (AbstractComponentInfo) component,
-            (FlowContainerConfigurable) container);
-      }
-    }
-  }
+	/**
+	 * Flow containers: FlowPanel, HorizontalPanel, VerticalPanel, etc.
+	 */
+	private void configureFlowContainer(EditPart editPart, JavaInfo component) {
+		List<FlowContainer> containers = new FlowContainerFactory(component, false).get();
+		for (FlowContainer container : containers) {
+			EditPolicy layoutPolicy = new FlowContainerLayoutEditPolicy(component, container);
+			editPart.installEditPolicy(container, layoutPolicy);
+			// support groups
+			if (component instanceof AbstractComponentInfo
+					&& container instanceof FlowContainerConfigurable) {
+				configureGroupInfo(
+						editPart,
+						(AbstractComponentInfo) component,
+						(FlowContainerConfigurable) container);
+			}
+		}
+	}
 
-  private void configureGroupInfo(EditPart editPart,
-      JavaInfo component,
-      FlowContainerConfigurable container) {
-    String groupName = container.getGroupName();
-    if (StringUtils.isEmpty(groupName)) {
-      return;
-    }
-    // configure group
-    FlowContainerGroupInfo groupInfo = getGroupInfoByName(component, groupName);
-    if (groupInfo != null) {
-      groupInfo.addContainer(container);
-    }
-  }
+	private void configureGroupInfo(EditPart editPart,
+			JavaInfo component,
+			FlowContainerConfigurable container) {
+		String groupName = container.getGroupName();
+		if (StringUtils.isEmpty(groupName)) {
+			return;
+		}
+		// configure group
+		FlowContainerGroupInfo groupInfo = getGroupInfoByName(component, groupName);
+		if (groupInfo != null) {
+			groupInfo.addContainer(container);
+		}
+	}
 
-  private FlowContainerGroupInfo getGroupInfoByName(JavaInfo component, String groupName) {
-    // find group info
-    {
-      List<FlowContainerGroupInfo> groupInfos = component.getChildren(FlowContainerGroupInfo.class);
-      for (FlowContainerGroupInfo groupInfo : groupInfos) {
-        if (groupInfo.getCaption().equals(groupName)) {
-          return groupInfo;
-        }
-      }
-    }
-    // create group info
-    FlowContainerGroupInfo groupInfo;
-    try {
-      groupInfo = new FlowContainerGroupInfo(component.getEditor(), component, groupName);
-    } catch (Exception e) {
-      DesignerPlugin.log("FlowContainerGroupInfo creation error: " + e.getMessage(), e);
-      groupInfo = null;
-    }
-    return groupInfo;
-  }
+	private FlowContainerGroupInfo getGroupInfoByName(JavaInfo component, String groupName) {
+		// find group info
+		{
+			List<FlowContainerGroupInfo> groupInfos = component.getChildren(FlowContainerGroupInfo.class);
+			for (FlowContainerGroupInfo groupInfo : groupInfos) {
+				if (groupInfo.getCaption().equals(groupName)) {
+					return groupInfo;
+				}
+			}
+		}
+		// create group info
+		FlowContainerGroupInfo groupInfo;
+		try {
+			groupInfo = new FlowContainerGroupInfo(component.getEditor(), component, groupName);
+		} catch (Exception e) {
+			DesignerPlugin.log("FlowContainerGroupInfo creation error: " + e.getMessage(), e);
+			groupInfo = null;
+		}
+		return groupInfo;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gefTree/GenericContainersLayoutEditPolicyFactory.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gefTree/GenericContainersLayoutEditPolicyFactory.java
index 7ae0cbf4a..f83e30d87 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gefTree/GenericContainersLayoutEditPolicyFactory.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gefTree/GenericContainersLayoutEditPolicyFactory.java
@@ -30,31 +30,31 @@
  * @coverage core.gefTree
  */
 public final class GenericContainersLayoutEditPolicyFactory implements ILayoutEditPolicyFactory {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ILayoutEditPolicyFactory
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public LayoutEditPolicy createLayoutEditPolicy(EditPart context, Object model) {
-    if (model instanceof JavaInfo) {
-      JavaInfo layout = (JavaInfo) model;
-      // simple containers
-      {
-        List<SimpleContainer> containers = new SimpleContainerFactory(layout, true).get();
-        for (SimpleContainer container : containers) {
-          return new SimpleContainerLayoutEditPolicy(layout, container);
-        }
-      }
-      // flow containers
-      {
-        List<FlowContainer> containers = new FlowContainerFactory(layout, false).get();
-        for (FlowContainer container : containers) {
-          return new FlowContainerLayoutEditPolicy(layout, container);
-        }
-      }
-    }
-    // not found
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ILayoutEditPolicyFactory
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public LayoutEditPolicy createLayoutEditPolicy(EditPart context, Object model) {
+		if (model instanceof JavaInfo) {
+			JavaInfo layout = (JavaInfo) model;
+			// simple containers
+			{
+				List<SimpleContainer> containers = new SimpleContainerFactory(layout, true).get();
+				for (SimpleContainer container : containers) {
+					return new SimpleContainerLayoutEditPolicy(layout, container);
+				}
+			}
+			// flow containers
+			{
+				List<FlowContainer> containers = new FlowContainerFactory(layout, false).get();
+				for (FlowContainer container : containers) {
+					return new FlowContainerLayoutEditPolicy(layout, container);
+				}
+			}
+		}
+		// not found
+		return null;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gefTree/part/ArrayObjectEditPart.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gefTree/part/ArrayObjectEditPart.java
index edccc82e3..72afe1917 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gefTree/part/ArrayObjectEditPart.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gefTree/part/ArrayObjectEditPart.java
@@ -23,26 +23,26 @@
  * @coverage core.gefTree
  */
 public final class ArrayObjectEditPart extends ObjectEditPart {
-  private final AbstractArrayObjectInfo m_arrayInfo;
+	private final AbstractArrayObjectInfo m_arrayInfo;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ArrayObjectEditPart(AbstractArrayObjectInfo object) {
-    super(object);
-    m_arrayInfo = object;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ArrayObjectEditPart(AbstractArrayObjectInfo object) {
+		super(object);
+		m_arrayInfo = object;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Policies
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createEditPolicies() {
-    super.createEditPolicies();
-    installEditPolicy(EditPolicy.LAYOUT_ROLE, new ArrayObjectLayoutEditPolicy(m_arrayInfo));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Policies
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createEditPolicies() {
+		super.createEditPolicies();
+		installEditPolicy(EditPolicy.LAYOUT_ROLE, new ArrayObjectLayoutEditPolicy(m_arrayInfo));
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gefTree/part/FlowContainerGroupEditPart.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gefTree/part/FlowContainerGroupEditPart.java
index 137670200..88c78bb92 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gefTree/part/FlowContainerGroupEditPart.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gefTree/part/FlowContainerGroupEditPart.java
@@ -25,31 +25,31 @@
  * @coverage core.gefTree
  */
 public final class FlowContainerGroupEditPart extends ObjectEditPart {
-  private final FlowContainerGroupInfo m_groupInfo;
+	private final FlowContainerGroupInfo m_groupInfo;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FlowContainerGroupEditPart(FlowContainerGroupInfo group) {
-    super(group);
-    m_groupInfo = group;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FlowContainerGroupEditPart(FlowContainerGroupInfo group) {
+		super(group);
+		m_groupInfo = group;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Policies
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createEditPolicies() {
-    super.createEditPolicies();
-    {
-      List<FlowContainerConfigurable> containers = m_groupInfo.getContainers();
-      for (FlowContainerConfigurable container : containers) {
-        installEditPolicy(new FlowContainerLayoutEditPolicy(m_groupInfo.getParent(), container));
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Policies
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createEditPolicies() {
+		super.createEditPolicies();
+		{
+			List<FlowContainerConfigurable> containers = m_groupInfo.getContainers();
+			for (FlowContainerConfigurable container : containers) {
+				installEditPolicy(new FlowContainerLayoutEditPolicy(m_groupInfo.getParent(), container));
+			}
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gefTree/policy/ArrayObjectLayoutEditPolicy.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gefTree/policy/ArrayObjectLayoutEditPolicy.java
index 1c191fcae..105b30ee0 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gefTree/policy/ArrayObjectLayoutEditPolicy.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gefTree/policy/ArrayObjectLayoutEditPolicy.java
@@ -29,69 +29,69 @@
  * @coverage core.gefTree.policy
  */
 public final class ArrayObjectLayoutEditPolicy extends LayoutEditPolicy {
-  private final AbstractArrayObjectInfo m_arrayInfo;
-  private final ArrayObjectRequestValidator m_validator;
+	private final AbstractArrayObjectInfo m_arrayInfo;
+	private final ArrayObjectRequestValidator m_validator;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ArrayObjectLayoutEditPolicy(AbstractArrayObjectInfo object) {
-    m_arrayInfo = object;
-    m_validator = new ArrayObjectRequestValidator(m_arrayInfo);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ArrayObjectLayoutEditPolicy(AbstractArrayObjectInfo object) {
+		m_arrayInfo = object;
+		m_validator = new ArrayObjectRequestValidator(m_arrayInfo);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Reference children
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected boolean isGoodReferenceChild(Request request, EditPart editPart) {
-    return m_validator.isValidModel(editPart.getModel());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Reference children
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected boolean isGoodReferenceChild(Request request, EditPart editPart) {
+		return m_validator.isValidModel(editPart.getModel());
+	}
 
-  @Override
-  protected ILayoutRequestValidator getRequestValidator() {
-    return m_validator;
-  }
+	@Override
+	protected ILayoutRequestValidator getRequestValidator() {
+		return m_validator;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Command getCreateCommand(Object newObject, Object referenceObject) {
-    final JavaInfo item = (JavaInfo) newObject;
-    final JavaInfo nextItem = (JavaInfo) referenceObject;
-    return new EditCommand(m_arrayInfo) {
-      @Override
-      protected void executeEdit() throws Exception {
-        m_arrayInfo.command_CREATE(item, nextItem);
-      }
-    };
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Command getCreateCommand(Object newObject, Object referenceObject) {
+		final JavaInfo item = (JavaInfo) newObject;
+		final JavaInfo nextItem = (JavaInfo) referenceObject;
+		return new EditCommand(m_arrayInfo) {
+			@Override
+			protected void executeEdit() throws Exception {
+				m_arrayInfo.command_CREATE(item, nextItem);
+			}
+		};
+	}
 
-  @Override
-  protected Command getMoveCommand(List<EditPart> moveParts, Object referenceObject) {
-    CompoundEditCommand command = new CompoundEditCommand(m_arrayInfo);
-    for (EditPart editPart : moveParts) {
-      final JavaInfo item = (JavaInfo) editPart.getModel();
-      final JavaInfo nextItem = (JavaInfo) referenceObject;
-      command.add(new EditCommand(m_arrayInfo) {
-        @Override
-        protected void executeEdit() throws Exception {
-          m_arrayInfo.command_MOVE(item, nextItem);
-        }
-      });
-    }
-    return command;
-  }
+	@Override
+	protected Command getMoveCommand(List<EditPart> moveParts, Object referenceObject) {
+		CompoundEditCommand command = new CompoundEditCommand(m_arrayInfo);
+		for (EditPart editPart : moveParts) {
+			final JavaInfo item = (JavaInfo) editPart.getModel();
+			final JavaInfo nextItem = (JavaInfo) referenceObject;
+			command.add(new EditCommand(m_arrayInfo) {
+				@Override
+				protected void executeEdit() throws Exception {
+					m_arrayInfo.command_MOVE(item, nextItem);
+				}
+			});
+		}
+		return command;
+	}
 
-  @Override
-  protected Command getAddCommand(List<EditPart> addParts, Object referenceObject) {
-    return getMoveCommand(addParts, referenceObject);
-  }
+	@Override
+	protected Command getAddCommand(List<EditPart> addParts, Object referenceObject) {
+		return getMoveCommand(addParts, referenceObject);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gefTree/policy/ArrayObjectRequestValidator.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gefTree/policy/ArrayObjectRequestValidator.java
index 5a132629c..4bd35c1bd 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gefTree/policy/ArrayObjectRequestValidator.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gefTree/policy/ArrayObjectRequestValidator.java
@@ -29,71 +29,71 @@
  * @coverage core.gefTree.policy
  */
 public final class ArrayObjectRequestValidator implements ILayoutRequestValidator {
-  private final AbstractArrayObjectInfo m_arrayInfo;
+	private final AbstractArrayObjectInfo m_arrayInfo;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ArrayObjectRequestValidator(AbstractArrayObjectInfo arrayInfo) {
-    m_arrayInfo = arrayInfo;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ArrayObjectRequestValidator(AbstractArrayObjectInfo arrayInfo) {
+		m_arrayInfo = arrayInfo;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ILayoutRequestValidator
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean validateCreateRequest(EditPart host, CreateRequest request) {
-    return isValidModel(request.getNewObject());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ILayoutRequestValidator
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean validateCreateRequest(EditPart host, CreateRequest request) {
+		return isValidModel(request.getNewObject());
+	}
 
-  @Override
-  public boolean validateMoveRequest(EditPart host, ChangeBoundsRequest request) {
-    for (EditPart editPart : request.getEditParts()) {
-      // check model
-      if (!isValidModel(editPart.getModel())) {
-        return false;
-      }
-      // allow move inside array or empty variable otherwise
-      JavaInfo javaInfo = (JavaInfo) editPart.getModel();
-      if (!m_arrayInfo.equals(AbstractArrayObjectInfo.getArrayObjectInfo(javaInfo))
-          && !(javaInfo.getVariableSupport() instanceof EmptyVariableSupport)) {
-        return false;
-      }
-    }
-    return true;
-  }
+	@Override
+	public boolean validateMoveRequest(EditPart host, ChangeBoundsRequest request) {
+		for (EditPart editPart : request.getEditParts()) {
+			// check model
+			if (!isValidModel(editPart.getModel())) {
+				return false;
+			}
+			// allow move inside array or empty variable otherwise
+			JavaInfo javaInfo = (JavaInfo) editPart.getModel();
+			if (!m_arrayInfo.equals(AbstractArrayObjectInfo.getArrayObjectInfo(javaInfo))
+					&& !(javaInfo.getVariableSupport() instanceof EmptyVariableSupport)) {
+				return false;
+			}
+		}
+		return true;
+	}
 
-  @Override
-  public boolean validateAddRequest(EditPart host, ChangeBoundsRequest request) {
-    return validateMoveRequest(host, request);
-  }
+	@Override
+	public boolean validateAddRequest(EditPart host, ChangeBoundsRequest request) {
+		return validateMoveRequest(host, request);
+	}
 
-  @Override
-  public boolean validatePasteRequest(EditPart host, PasteRequest request) {
-    return false;
-  }
+	@Override
+	public boolean validatePasteRequest(EditPart host, PasteRequest request) {
+		return false;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public boolean isValidModel(final Object objectModel) {
-    if (objectModel instanceof JavaInfo) {
-      return ExecutionUtils.runObjectLog(new RunnableObjectEx<Boolean>() {
-        @Override
-        public Boolean runObject() throws Exception {
-          JavaInfo info = (JavaInfo) objectModel;
-          return ReflectionUtils.isSuccessorOf(
-              info.getDescription().getComponentClass(),
-              m_arrayInfo.getItemClass().getCanonicalName());
-        }
-      }, false);
-    }
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public boolean isValidModel(final Object objectModel) {
+		if (objectModel instanceof JavaInfo) {
+			return ExecutionUtils.runObjectLog(new RunnableObjectEx<Boolean>() {
+				@Override
+				public Boolean runObject() throws Exception {
+					JavaInfo info = (JavaInfo) objectModel;
+					return ReflectionUtils.isSuccessorOf(
+							info.getDescription().getComponentClass(),
+							m_arrayInfo.getItemClass().getCanonicalName());
+				}
+			}, false);
+		}
+		return false;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gefTree/policy/dblclick/DoubleClickLayoutEditPolicy.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gefTree/policy/dblclick/DoubleClickLayoutEditPolicy.java
index 8a0a81464..6990638bc 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gefTree/policy/dblclick/DoubleClickLayoutEditPolicy.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gefTree/policy/dblclick/DoubleClickLayoutEditPolicy.java
@@ -26,62 +26,62 @@
  * @coverage core.gefTree.policy
  */
 public abstract class DoubleClickLayoutEditPolicy extends EditPolicy
-    implements
-      IPreferenceConstants {
-  protected final JavaInfo m_javaInfo;
+implements
+IPreferenceConstants {
+	protected final JavaInfo m_javaInfo;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DoubleClickLayoutEditPolicy(JavaInfo javaInfo) {
-    m_javaInfo = javaInfo;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DoubleClickLayoutEditPolicy(JavaInfo javaInfo) {
+		m_javaInfo = javaInfo;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Installing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Installs {@link EditPolicy} for handling double click request, based on settings.
-   */
-  public static void install(JavaEditPart editPart) {
-    int mode = DesignerPlugin.getPreferences().getInt(P_EDITOR_TREE_DBL_CLICK_ACTION);
-    JavaInfo javaInfo = editPart.getJavaInfo();
-    // prepare policy
-    EditPolicy editPolicy = null;
-    switch (mode) {
-      case V_EDITOR_TREE_OPEN_WIDGET_IN_EDITOR :
-        editPolicy = new OpenEditorLayoutEditPolicy(javaInfo);
-        break;
-      case V_EDITOR_TREE_CREATE_LISTENER :
-        editPolicy = new OpenListenerEditPolicy(javaInfo);
-        break;
-      case V_EDITOR_TREE_INITIATE_RENAME :
-        editPolicy = new RenameJavaInfoLayoutEditPolicy(javaInfo);
-        break;
-    }
-    // install policy
-    editPart.installEditPolicy(DoubleClickLayoutEditPolicy.class, editPolicy);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Installing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Installs {@link EditPolicy} for handling double click request, based on settings.
+	 */
+	public static void install(JavaEditPart editPart) {
+		int mode = DesignerPlugin.getPreferences().getInt(P_EDITOR_TREE_DBL_CLICK_ACTION);
+		JavaInfo javaInfo = editPart.getJavaInfo();
+		// prepare policy
+		EditPolicy editPolicy = null;
+		switch (mode) {
+		case V_EDITOR_TREE_OPEN_WIDGET_IN_EDITOR :
+			editPolicy = new OpenEditorLayoutEditPolicy(javaInfo);
+			break;
+		case V_EDITOR_TREE_CREATE_LISTENER :
+			editPolicy = new OpenListenerEditPolicy(javaInfo);
+			break;
+		case V_EDITOR_TREE_INITIATE_RENAME :
+			editPolicy = new RenameJavaInfoLayoutEditPolicy(javaInfo);
+			break;
+		}
+		// install policy
+		editPart.installEditPolicy(DoubleClickLayoutEditPolicy.class, editPolicy);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Double-click
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void performRequest(Request request) {
-    if (Request.REQ_OPEN.equals(request.getType())) {
-      performDoubleClick();
-    }
-    super.performRequest(request);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Double-click
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void performRequest(Request request) {
+		if (Request.REQ_OPEN.equals(request.getType())) {
+			performDoubleClick();
+		}
+		super.performRequest(request);
+	}
 
-  /**
-   * Override this to do operations required when user double-clicks on widget in widgets tree.
-   */
-  protected abstract void performDoubleClick();
+	/**
+	 * Override this to do operations required when user double-clicks on widget in widgets tree.
+	 */
+	protected abstract void performDoubleClick();
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gefTree/policy/dblclick/OpenEditorLayoutEditPolicy.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gefTree/policy/dblclick/OpenEditorLayoutEditPolicy.java
index 3eb7f80af..815ef6840 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gefTree/policy/dblclick/OpenEditorLayoutEditPolicy.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gefTree/policy/dblclick/OpenEditorLayoutEditPolicy.java
@@ -21,24 +21,24 @@
  * @coverage core.gefTree.policy
  */
 final class OpenEditorLayoutEditPolicy extends DoubleClickLayoutEditPolicy {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public OpenEditorLayoutEditPolicy(JavaInfo javaInfo) {
-    super(javaInfo);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public OpenEditorLayoutEditPolicy(JavaInfo javaInfo) {
+		super(javaInfo);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // DoubleClickLayoutEditPolicy
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void performDoubleClick() {
-    IDesignPageSite site = IDesignPageSite.Helper.getSite(m_javaInfo);
-    int position = m_javaInfo.getCreationSupport().getNode().getStartPosition();
-    site.openSourcePosition(position);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// DoubleClickLayoutEditPolicy
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void performDoubleClick() {
+		IDesignPageSite site = IDesignPageSite.Helper.getSite(m_javaInfo);
+		int position = m_javaInfo.getCreationSupport().getNode().getStartPosition();
+		site.openSourcePosition(position);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gefTree/policy/dblclick/RenameJavaInfoLayoutEditPolicy.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gefTree/policy/dblclick/RenameJavaInfoLayoutEditPolicy.java
index c3e93fdf8..0c2acd449 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gefTree/policy/dblclick/RenameJavaInfoLayoutEditPolicy.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gefTree/policy/dblclick/RenameJavaInfoLayoutEditPolicy.java
@@ -23,22 +23,22 @@
  * @coverage core.gefTree.policy
  */
 final class RenameJavaInfoLayoutEditPolicy extends DoubleClickLayoutEditPolicy {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public RenameJavaInfoLayoutEditPolicy(JavaInfo javaInfo) {
-    super(javaInfo);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public RenameJavaInfoLayoutEditPolicy(JavaInfo javaInfo) {
+		super(javaInfo);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // DoubleClickLayoutEditPolicy
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void performDoubleClick() {
-    RenameConvertSupport.rename(Collections.singletonList(m_javaInfo));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// DoubleClickLayoutEditPolicy
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void performDoubleClick() {
+		RenameConvertSupport.rename(Collections.singletonList(m_javaInfo));
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/java/Activator.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/java/Activator.java
index efd3c1c29..4222ae7f9 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/java/Activator.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/java/Activator.java
@@ -28,76 +28,76 @@
  * @coverage XML
  */
 public class Activator extends AbstractUIPlugin {
-  public static final String PLUGIN_ID = "org.eclipse.wb.core.java";
-  private static Activator m_plugin;
+	public static final String PLUGIN_ID = "org.eclipse.wb.core.java";
+	private static Activator m_plugin;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Life cycle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void stop(BundleContext context) throws Exception {
-    m_plugin = null;
-    super.stop(context);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Life cycle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void stop(BundleContext context) throws Exception {
+		m_plugin = null;
+		super.stop(context);
+	}
 
-  @Override
-  public void start(BundleContext context) throws Exception {
-    super.start(context);
-    m_plugin = this;
-  }
+	@Override
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+		m_plugin = this;
+	}
 
-  /**
-   * Returns the shared instance.
-   */
-  public static Activator getDefault() {
-    return m_plugin;
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Resources
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final BundleResourceProvider m_resourceProvider =
-      BundleResourceProvider.get(PLUGIN_ID);
+	/**
+	 * Returns the shared instance.
+	 */
+	public static Activator getDefault() {
+		return m_plugin;
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Resources
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final BundleResourceProvider m_resourceProvider =
+			BundleResourceProvider.get(PLUGIN_ID);
 
-  /**
-   * @return the {@link InputStream} for file from plugin directory.
-   */
-  public static InputStream getFile(String path) {
-    return m_resourceProvider.getFile(path);
-  }
+	/**
+	 * @return the {@link InputStream} for file from plugin directory.
+	 */
+	public static InputStream getFile(String path) {
+		return m_resourceProvider.getFile(path);
+	}
 
-  /**
-   * @return the {@link Image} from "icons" directory, with caching.
-   */
-  public static Image getImage(String path) {
-    return m_resourceProvider.getImage("icons/" + path);
-  }
+	/**
+	 * @return the {@link Image} from "icons" directory, with caching.
+	 */
+	public static Image getImage(String path) {
+		return m_resourceProvider.getImage("icons/" + path);
+	}
 
-  /**
-   * @return the {@link ImageDescriptor} from "icons" directory.
-   */
-  public static ImageDescriptor getImageDescriptor(String path) {
-    return m_resourceProvider.getImageDescriptor("icons/" + path);
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Set-up during first editor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static boolean m_preEditorConfigured = false;
+	/**
+	 * @return the {@link ImageDescriptor} from "icons" directory.
+	 */
+	public static ImageDescriptor getImageDescriptor(String path) {
+		return m_resourceProvider.getImageDescriptor("icons/" + path);
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Set-up during first editor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static boolean m_preEditorConfigured = false;
 
-  /**
-   * This is fast method which performs configuration directly before first use of editor.
-   */
-  public static synchronized void configurePreEditor() {
-    if (m_preEditorConfigured) {
-      return;
-    }
-    m_preEditorConfigured = true;
-    // add listeners
-    DesignerPlugin.configurePreEditor();
-  }
+	/**
+	 * This is fast method which performs configuration directly before first use of editor.
+	 */
+	public static synchronized void configurePreEditor() {
+		if (m_preEditorConfigured) {
+			return;
+		}
+		m_preEditorConfigured = true;
+		// add listeners
+		DesignerPlugin.configurePreEditor();
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/java/IExceptionConstants.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/java/IExceptionConstants.java
index b81f242b4..d4866436c 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/java/IExceptionConstants.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/java/IExceptionConstants.java
@@ -19,10 +19,10 @@
  * @coverage XML
  */
 public interface IExceptionConstants {
-  int DESCRIPTION_NO_DESCRIPTIONS = 5000;
-  int DESCRIPTION_LOADING = 5001;
-  int DESCRIPTION_NO_TOOLKIT = 5002;
-  int DESCRIPTION_EDITOR_STATIC_FIELD = 5003;
-  int NOT_JAVA_PROJECT = 5004;
-  int __FORCE_EXECUTION = Math.abs(0);
+	int DESCRIPTION_NO_DESCRIPTIONS = 5000;
+	int DESCRIPTION_LOADING = 5001;
+	int DESCRIPTION_NO_TOOLKIT = 5002;
+	int DESCRIPTION_EDITOR_STATIC_FIELD = 5003;
+	int NOT_JAVA_PROJECT = 5004;
+	int __FORCE_EXECUTION = Math.abs(0);
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/java/Messages.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/java/Messages.java
index 8df06f48e..032976740 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/java/Messages.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/java/Messages.java
@@ -3,12 +3,12 @@
 import org.eclipse.osgi.util.NLS;
 
 public class Messages extends NLS {
-  private static final String BUNDLE_NAME = "org.eclipse.wb.internal.core.java.messages"; //$NON-NLS-1$
-  static {
-    // initialize resource bundle
-    NLS.initializeMessages(BUNDLE_NAME, Messages.class);
-  }
+	private static final String BUNDLE_NAME = "org.eclipse.wb.internal.core.java.messages"; //$NON-NLS-1$
+	static {
+		// initialize resource bundle
+		NLS.initializeMessages(BUNDLE_NAME, Messages.class);
+	}
 
-  private Messages() {
-  }
+	private Messages() {
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/AbstractWrapper.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/AbstractWrapper.java
index f31d6faad..155481911 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/AbstractWrapper.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/AbstractWrapper.java
@@ -23,67 +23,67 @@
  * Abstract utility for any Java-based wrapper object.
  */
 public abstract class AbstractWrapper implements IWrapper {
-  protected final JavaInfo m_wrapperInfo;
-  protected JavaInfo m_wrappedInfo = null;
+	protected final JavaInfo m_wrapperInfo;
+	protected JavaInfo m_wrappedInfo = null;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractWrapper(JavaInfo host) {
-    m_wrapperInfo = host;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractWrapper(JavaInfo host) {
+		m_wrapperInfo = host;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return wrapper {@link JavaInfo}.
-   */
-  @Override
-  public JavaInfo getWrapperInfo() {
-    return m_wrapperInfo;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return wrapper {@link JavaInfo}.
+	 */
+	@Override
+	public JavaInfo getWrapperInfo() {
+		return m_wrapperInfo;
+	}
 
-  /**
-   * @return wrapped {@link JavaInfo}.
-   */
-  @Override
-  public JavaInfo getWrappedInfo() throws Exception {
-    if (m_wrappedInfo == null) {
-      m_wrappedInfo =
-          JavaInfoUtils.createJavaInfo(
-              m_wrapperInfo.getEditor(),
-              getWrappedType(),
-              newWrappedCreationSupport());
-      inheritParameters(m_wrappedInfo);
-    }
-    return m_wrappedInfo;
-  }
+	/**
+	 * @return wrapped {@link JavaInfo}.
+	 */
+	@Override
+	public JavaInfo getWrappedInfo() throws Exception {
+		if (m_wrappedInfo == null) {
+			m_wrappedInfo =
+					JavaInfoUtils.createJavaInfo(
+							m_wrapperInfo.getEditor(),
+							getWrappedType(),
+							newWrappedCreationSupport());
+			inheritParameters(m_wrappedInfo);
+		}
+		return m_wrappedInfo;
+	}
 
-  /**
-   * @return the exact type of {@link Control}.
-   */
-  public abstract Class<?> getWrappedType();
+	/**
+	 * @return the exact type of {@link Control}.
+	 */
+	public abstract Class<?> getWrappedType();
 
-  /**
-   * @return {@link CreationSupport} for new instance of wrapped model.
-   */
-  protected abstract CreationSupport newWrappedCreationSupport() throws Exception;
+	/**
+	 * @return {@link CreationSupport} for new instance of wrapped model.
+	 */
+	protected abstract CreationSupport newWrappedCreationSupport() throws Exception;
 
-  /**
-   * Inherit parameters from viewer to wrapped {@link JavaInfo}
-   */
-  protected void inheritParameters(JavaInfo javaInfo) {
-    Map<String, String> parameters = JavaInfoUtils.getParameters(m_wrapperInfo);
-    for (Entry<String, String> entry : parameters.entrySet()) {
-      String keyName = entry.getKey();
-      if (keyName.startsWith("wrapped.")) {
-        JavaInfoUtils.setParameter(javaInfo, keyName.substring(8), entry.getValue());
-      }
-    }
-  }
+	/**
+	 * Inherit parameters from viewer to wrapped {@link JavaInfo}
+	 */
+	protected void inheritParameters(JavaInfo javaInfo) {
+		Map<String, String> parameters = JavaInfoUtils.getParameters(m_wrapperInfo);
+		for (Entry<String, String> entry : parameters.entrySet()) {
+			String keyName = entry.getKey();
+			if (keyName.startsWith("wrapped.")) {
+				JavaInfoUtils.setParameter(javaInfo, keyName.substring(8), entry.getValue());
+			}
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/ChildTargetCalculator.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/ChildTargetCalculator.java
index 618163c62..a049b87a2 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/ChildTargetCalculator.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/ChildTargetCalculator.java
@@ -53,401 +53,401 @@
  * @coverage core.model
  */
 public final class ChildTargetCalculator {
-  private final JavaInfo m_parent;
-  private final JavaInfo m_child;
-  private final JavaInfo m_nextChild;
-  private VariableSupport m_parentVariable;
+	private final JavaInfo m_parent;
+	private final JavaInfo m_child;
+	private final JavaInfo m_nextChild;
+	private VariableSupport m_parentVariable;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ChildTargetCalculator(JavaInfo parent, JavaInfo child, JavaInfo nextChild) {
-    m_parent = parent;
-    m_child = child;
-    m_nextChild = nextChild;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ChildTargetCalculator(JavaInfo parent, JavaInfo child, JavaInfo nextChild) {
+		m_parent = parent;
+		m_child = child;
+		m_nextChild = nextChild;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return new {@link StatementTarget} where {@link Statement}'s for new {@link JavaInfo} should
-   *         be added to place them before given <code>nextChild</code>.
-   */
-  public StatementTarget getTarget() throws Exception {
-    // check for special case: lazy and implicit factory
-    {
-      StatementTarget target = getTarget_Lazy_ImplicitFactory();
-      if (target != null) {
-        return target;
-      }
-    }
-    // target before some existing child
-    if (m_nextChild != null) {
-      Statement associationStatement = m_nextChild.getAssociation().getStatement();
-      Statement targetStatement = trackRelatedStatementsUp(m_nextChild, associationStatement);
-      return new StatementTarget(targetStatement, true);
-    }
-    // check for "forced" method
-    {
-      StatementTarget target = ThisVariableSupport.getForcedTarget(m_parent);
-      if (target != null) {
-        return target;
-      }
-    }
-    // materialize "parent"
-    JavaInfoUtils.materializeVariable(m_parent);
-    m_parentVariable = m_parent.getVariableSupport();
-    // target as last child
-    {
-      Statement targetStatement = getLastTargetStatement();
-      // usually we have statement for parent, in other case use variable target
-      if (targetStatement != null) {
-        targetStatement = trackTargetStatementsDown(targetStatement);
-        return new StatementTarget(targetStatement, false);
-      } else {
-        return m_parentVariable.getChildTarget();
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return new {@link StatementTarget} where {@link Statement}'s for new {@link JavaInfo} should
+	 *         be added to place them before given <code>nextChild</code>.
+	 */
+	public StatementTarget getTarget() throws Exception {
+		// check for special case: lazy and implicit factory
+		{
+			StatementTarget target = getTarget_Lazy_ImplicitFactory();
+			if (target != null) {
+				return target;
+			}
+		}
+		// target before some existing child
+		if (m_nextChild != null) {
+			Statement associationStatement = m_nextChild.getAssociation().getStatement();
+			Statement targetStatement = trackRelatedStatementsUp(m_nextChild, associationStatement);
+			return new StatementTarget(targetStatement, true);
+		}
+		// check for "forced" method
+		{
+			StatementTarget target = ThisVariableSupport.getForcedTarget(m_parent);
+			if (target != null) {
+				return target;
+			}
+		}
+		// materialize "parent"
+		JavaInfoUtils.materializeVariable(m_parent);
+		m_parentVariable = m_parent.getVariableSupport();
+		// target as last child
+		{
+			Statement targetStatement = getLastTargetStatement();
+			// usually we have statement for parent, in other case use variable target
+			if (targetStatement != null) {
+				targetStatement = trackTargetStatementsDown(targetStatement);
+				return new StatementTarget(targetStatement, false);
+			} else {
+				return m_parentVariable.getChildTarget();
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * When {@link LazyVariableSupport} is used for "implicit factory", we create/associate component
-   * using artificial invocation of accessor. So, target "before component" should be before this
-   * invocation, not before "create" method invocation.
-   */
-  private StatementTarget getTarget_Lazy_ImplicitFactory() {
-    if (m_nextChild != null
-        && m_nextChild.getAssociation() instanceof InvocationVoidAssociation
-        && m_nextChild.getVariableSupport() instanceof LazyVariableSupport) {
-      LazyVariableSupport lazy = (LazyVariableSupport) m_nextChild.getVariableSupport();
-      List<ASTNode> invocations =
-          ExecutionFlowUtils.getInvocations(
-              JavaInfoUtils.getState(m_parent).getFlowDescription(),
-              lazy.m_accessor);
-      if (!invocations.isEmpty()) {
-        ASTNode targetInvocation = invocations.get(0);
-        Statement targetStatement = AstNodeUtils.getEnclosingStatement(targetInvocation);
-        return new StatementTarget(targetStatement, true);
-      }
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * When {@link LazyVariableSupport} is used for "implicit factory", we create/associate component
+	 * using artificial invocation of accessor. So, target "before component" should be before this
+	 * invocation, not before "create" method invocation.
+	 */
+	private StatementTarget getTarget_Lazy_ImplicitFactory() {
+		if (m_nextChild != null
+				&& m_nextChild.getAssociation() instanceof InvocationVoidAssociation
+				&& m_nextChild.getVariableSupport() instanceof LazyVariableSupport) {
+			LazyVariableSupport lazy = (LazyVariableSupport) m_nextChild.getVariableSupport();
+			List<ASTNode> invocations =
+					ExecutionFlowUtils.getInvocations(
+							JavaInfoUtils.getState(m_parent).getFlowDescription(),
+							lazy.m_accessor);
+			if (!invocations.isEmpty()) {
+				ASTNode targetInvocation = invocations.get(0);
+				Statement targetStatement = AstNodeUtils.getEnclosingStatement(targetInvocation);
+				return new StatementTarget(targetStatement, true);
+			}
+		}
+		return null;
+	}
 
-  /**
-   * @return the first {@link Statement} related with given {@link JavaInfo} and accessible starting
-   *         from given {@link Statement}.
-   */
-  private Statement trackRelatedStatementsUp(JavaInfo javaInfo, Statement targetStatement)
-      throws Exception {
-    Block targetBlock = (Block) targetStatement.getParent();
-    List<Statement> statements = DomGenerics.statements(targetBlock);
-    int index = statements.indexOf(targetStatement);
-    // track inside of target block
-    while (index-- != 0) {
-      Statement newTargetStatement = statements.get(index);
-      // check that new target is related
-      if (!isRelatedStatement(javaInfo, newTargetStatement)) {
-        return targetStatement;
-      }
-      // use new target
-      targetStatement = newTargetStatement;
-    }
-    // we've reached first statement of block, go to the enclosing block
-    if (targetBlock.getParent() instanceof Block) {
-      return trackRelatedStatementsUp(javaInfo, targetBlock);
-    }
-    // we've reached first statement of method, use it as target
-    return targetStatement;
-  }
+	/**
+	 * @return the first {@link Statement} related with given {@link JavaInfo} and accessible starting
+	 *         from given {@link Statement}.
+	 */
+	private Statement trackRelatedStatementsUp(JavaInfo javaInfo, Statement targetStatement)
+			throws Exception {
+		Block targetBlock = (Block) targetStatement.getParent();
+		List<Statement> statements = DomGenerics.statements(targetBlock);
+		int index = statements.indexOf(targetStatement);
+		// track inside of target block
+		while (index-- != 0) {
+			Statement newTargetStatement = statements.get(index);
+			// check that new target is related
+			if (!isRelatedStatement(javaInfo, newTargetStatement)) {
+				return targetStatement;
+			}
+			// use new target
+			targetStatement = newTargetStatement;
+		}
+		// we've reached first statement of block, go to the enclosing block
+		if (targetBlock.getParent() instanceof Block) {
+			return trackRelatedStatementsUp(javaInfo, targetBlock);
+		}
+		// we've reached first statement of method, use it as target
+		return targetStatement;
+	}
 
-  /**
-   * @return the last {@link Statement} related with given {@link JavaInfo} and accessible starting
-   *         from given {@link Statement}.
-   */
-  private Statement trackTargetStatementsDown(Statement targetStatement) throws Exception {
-    Block targetBlock = (Block) targetStatement.getParent();
-    List<Statement> statements = DomGenerics.statements(targetBlock);
-    boolean isLastStatement = statements.get(statements.size() - 1) == targetStatement;
-    // last statement of block, go to the enclosing block
-    if (isLastStatement && targetBlock.getParent() instanceof Block) {
-      //  ask variable if we can leave block, for example that javaInfo is still visible
-      if (!m_parentVariable.isValidStatementForChild(targetBlock)) {
-        return targetStatement;
-      }
-      // track inside of enclosing block
-      return trackTargetStatementsDown(targetBlock);
-    }
-    // we've reached last statement of method, use it as target
-    return targetStatement;
-  }
+	/**
+	 * @return the last {@link Statement} related with given {@link JavaInfo} and accessible starting
+	 *         from given {@link Statement}.
+	 */
+	private Statement trackTargetStatementsDown(Statement targetStatement) throws Exception {
+		Block targetBlock = (Block) targetStatement.getParent();
+		List<Statement> statements = DomGenerics.statements(targetBlock);
+		boolean isLastStatement = statements.get(statements.size() - 1) == targetStatement;
+		// last statement of block, go to the enclosing block
+		if (isLastStatement && targetBlock.getParent() instanceof Block) {
+			//  ask variable if we can leave block, for example that javaInfo is still visible
+			if (!m_parentVariable.isValidStatementForChild(targetBlock)) {
+				return targetStatement;
+			}
+			// track inside of enclosing block
+			return trackTargetStatementsDown(targetBlock);
+		}
+		// we've reached last statement of method, use it as target
+		return targetStatement;
+	}
 
-  /**
-   * @return the last {@link Statement} that is related with given {@link JavaInfo} (or any of its
-   *         children) and can be used as target for child.
-   */
-  private Statement getLastTargetStatement() throws Exception {
-    final Statement[] lastStatement = new Statement[1];
-    ExecutionFlowDescription flowDescription =
-        JavaInfoUtils.getState(m_parent).getFlowDescription();
-    ExecutionFlowUtils.visit(
-        new VisitingContext(true),
-        flowDescription,
-        new ExecutionFlowFrameVisitor() {
-          private final LinkedList<TargetMethodInformation> m_methodsStack = Lists.newLinkedList();
-          private boolean m_anyChildFound = false;
-          private boolean m_terminalFound = false;
+	/**
+	 * @return the last {@link Statement} that is related with given {@link JavaInfo} (or any of its
+	 *         children) and can be used as target for child.
+	 */
+	private Statement getLastTargetStatement() throws Exception {
+		final Statement[] lastStatement = new Statement[1];
+		ExecutionFlowDescription flowDescription =
+				JavaInfoUtils.getState(m_parent).getFlowDescription();
+		ExecutionFlowUtils.visit(
+				new VisitingContext(true),
+				flowDescription,
+				new ExecutionFlowFrameVisitor() {
+					private final LinkedList<TargetMethodInformation> m_methodsStack = Lists.newLinkedList();
+					private boolean m_anyChildFound = false;
+					private boolean m_terminalFound = false;
 
-          @Override
-          public void postVisit(ASTNode node) {
-            if (node instanceof Statement) {
-              Statement statement = (Statement) node;
-              postVisit(statement);
-            }
-          }
+					@Override
+					public void postVisit(ASTNode node) {
+						if (node instanceof Statement) {
+							Statement statement = (Statement) node;
+							postVisit(statement);
+						}
+					}
 
-          private void postVisit(Statement statement) {
-            // check for terminal
-            {
-              if (m_terminalFound) {
-                return;
-              }
-              m_terminalFound = isTerminalStatement(statement);
-              if (m_terminalFound) {
-                return;
-              }
-            }
-            // check if interesting Statement (creates parent or associates child)
-            if (isParentCreation(statement) || isAssociationForSomeChild(statement)) {
-              m_anyChildFound = true;
-              m_methodsStack.getFirst().interesting = true;
-            }
-            // check for target
-            if (m_parentVariable.isValidStatementForChild(statement)
-                && isTargetStatement(statement)) {
-              lastStatement[0] = statement;
-            }
-          }
+					private void postVisit(Statement statement) {
+						// check for terminal
+						{
+							if (m_terminalFound) {
+								return;
+							}
+							m_terminalFound = isTerminalStatement(statement);
+							if (m_terminalFound) {
+								return;
+							}
+						}
+						// check if interesting Statement (creates parent or associates child)
+						if (isParentCreation(statement) || isAssociationForSomeChild(statement)) {
+							m_anyChildFound = true;
+							m_methodsStack.getFirst().interesting = true;
+						}
+						// check for target
+						if (m_parentVariable.isValidStatementForChild(statement)
+								&& isTargetStatement(statement)) {
+							lastStatement[0] = statement;
+						}
+					}
 
-          @Override
-          public boolean enterFrame(ASTNode node) {
-            if (node instanceof MethodDeclaration) {
-              TargetMethodInformation methodInformation = new TargetMethodInformation();
-              methodInformation.lastStatement = lastStatement[0];
-              m_methodsStack.addFirst(methodInformation);
-            }
-            return true;
-          }
+					@Override
+					public boolean enterFrame(ASTNode node) {
+						if (node instanceof MethodDeclaration) {
+							TargetMethodInformation methodInformation = new TargetMethodInformation();
+							methodInformation.lastStatement = lastStatement[0];
+							m_methodsStack.addFirst(methodInformation);
+						}
+						return true;
+					}
 
-          @Override
-          public void leaveFrame(ASTNode node) {
-            if (node instanceof MethodDeclaration) {
-              TargetMethodInformation methodInformation = m_methodsStack.removeFirst();
-              // if this Method is not interesting, ignore its related Statement's
-              if (m_anyChildFound && !methodInformation.interesting) {
-                lastStatement[0] = methodInformation.lastStatement;
-              }
-              // if child Method is interesting, parent is interesting too
-              if (!m_methodsStack.isEmpty()) {
-                m_methodsStack.getFirst().interesting |= methodInformation.interesting;
-              }
-            }
-          }
-        });
-    return lastStatement[0];
-  }
+					@Override
+					public void leaveFrame(ASTNode node) {
+						if (node instanceof MethodDeclaration) {
+							TargetMethodInformation methodInformation = m_methodsStack.removeFirst();
+							// if this Method is not interesting, ignore its related Statement's
+							if (m_anyChildFound && !methodInformation.interesting) {
+								lastStatement[0] = methodInformation.lastStatement;
+							}
+							// if child Method is interesting, parent is interesting too
+							if (!m_methodsStack.isEmpty()) {
+								m_methodsStack.getFirst().interesting |= methodInformation.interesting;
+							}
+						}
+					}
+				});
+		return lastStatement[0];
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // "Configure" case support
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final class TargetMethodInformation {
-    boolean interesting = false;
-    Statement lastStatement;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// "Configure" case support
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final class TargetMethodInformation {
+		boolean interesting = false;
+		Statement lastStatement;
+	}
 
-  private boolean isParentCreation(Statement statement) {
-    CreationSupport parentCreation = m_parent.getCreationSupport();
-    ASTNode parentNode = parentCreation.getNode();
-    if (parentCreation instanceof ThisCreationSupport) {
-      return AstNodeUtils.contains(parentNode, statement);
-    }
-    return statement == AstNodeUtils.getEnclosingStatement(parentNode);
-  }
+	private boolean isParentCreation(Statement statement) {
+		CreationSupport parentCreation = m_parent.getCreationSupport();
+		ASTNode parentNode = parentCreation.getNode();
+		if (parentCreation instanceof ThisCreationSupport) {
+			return AstNodeUtils.contains(parentNode, statement);
+		}
+		return statement == AstNodeUtils.getEnclosingStatement(parentNode);
+	}
 
-  private boolean isAssociationForSomeChild(Statement statement) {
-    for (JavaInfo child : m_parent.getChildrenJava()) {
-      Association association = child.getAssociation();
-      if (association != null
-          && !(child.getCreationSupport() instanceof IImplicitCreationSupport)
-          && association.getStatement() == statement) {
-        return true;
-      }
-    }
-    return false;
-  }
+	private boolean isAssociationForSomeChild(Statement statement) {
+		for (JavaInfo child : m_parent.getChildrenJava()) {
+			Association association = child.getAssociation();
+			if (association != null
+					&& !(child.getCreationSupport() instanceof IImplicitCreationSupport)
+					&& association.getStatement() == statement) {
+				return true;
+			}
+		}
+		return false;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Target statement validation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @param statement
-   *          the {@link Statement} to check.
-   * @return <code>true</code> if given {@link Statement} can be used as target. Particularly it
-   *         should be related with {@link #m_parent}.
-   */
-  private boolean isTargetStatement(Statement statement) {
-    // check for "last" method invocation,
-    //   for all JavaInfo starting from given and its parents
-    {
-      JavaInfo javaInfo = m_parent;
-      while (javaInfo != null) {
-        // check this JavaInfo
-        MethodOrder methodOrder = getMethodOrder(javaInfo, statement);
-        if (methodOrder != null && !methodOrder.canReference(javaInfo)) {
-          return false;
-        }
-        // go to parent
-        if (javaInfo.getParent() instanceof JavaInfo) {
-          javaInfo = (JavaInfo) javaInfo.getParent();
-        } else {
-          break;
-        }
-      }
-    }
-    // check that Statement is related
-    return isRelatedStatement(m_parent, statement);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Target statement validation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @param statement
+	 *          the {@link Statement} to check.
+	 * @return <code>true</code> if given {@link Statement} can be used as target. Particularly it
+	 *         should be related with {@link #m_parent}.
+	 */
+	private boolean isTargetStatement(Statement statement) {
+		// check for "last" method invocation,
+		//   for all JavaInfo starting from given and its parents
+		{
+			JavaInfo javaInfo = m_parent;
+			while (javaInfo != null) {
+				// check this JavaInfo
+				MethodOrder methodOrder = getMethodOrder(javaInfo, statement);
+				if (methodOrder != null && !methodOrder.canReference(javaInfo)) {
+					return false;
+				}
+				// go to parent
+				if (javaInfo.getParent() instanceof JavaInfo) {
+					javaInfo = (JavaInfo) javaInfo.getParent();
+				} else {
+					break;
+				}
+			}
+		}
+		// check that Statement is related
+		return isRelatedStatement(m_parent, statement);
+	}
 
-  /**
-   * @return <code>true</code> if given {@link Statement} should not be used as target, and also no
-   *         other {@link Statement}'s after it (on execution flow) should be checked as target.
-   *         I.e. target is directly before given {@link Statement}.
-   */
-  private boolean isTerminalStatement(Statement statement) {
-    boolean[] terminal = new boolean[]{false};
-    if (m_child != null) {
-      // support for MethodOrder_AfterChildren
-      {
-        MethodOrder methodOrder = getMethodOrder(m_parent, statement);
-        if (methodOrder instanceof MethodOrderAfterChildren) {
-          if (((MethodOrderAfterChildren) methodOrder).isTargetChild(m_child)) {
-            terminal[0] = true;
-          }
-        }
-      }
-      // support for MethodOrder_AfterParentChildren
-      if (m_parent != null) {
-        for (JavaInfo parentChildInfo : m_parent.getChildrenJava()) {
-          MethodOrder methodOrder = getMethodOrder(parentChildInfo, statement);
-          if (methodOrder instanceof MethodOrderAfterParentChildren) {
-            if (((MethodOrderAfterParentChildren) methodOrder).isTargetChild(m_child)) {
-              terminal[0] = true;
-            }
-          }
-        }
-      }
-    }
-    m_parent.getBroadcastJava().target_isTerminalStatement(m_parent, m_child, statement, terminal);
-    return terminal[0];
-  }
+	/**
+	 * @return <code>true</code> if given {@link Statement} should not be used as target, and also no
+	 *         other {@link Statement}'s after it (on execution flow) should be checked as target.
+	 *         I.e. target is directly before given {@link Statement}.
+	 */
+	private boolean isTerminalStatement(Statement statement) {
+		boolean[] terminal = new boolean[]{false};
+		if (m_child != null) {
+			// support for MethodOrder_AfterChildren
+			{
+				MethodOrder methodOrder = getMethodOrder(m_parent, statement);
+				if (methodOrder instanceof MethodOrderAfterChildren) {
+					if (((MethodOrderAfterChildren) methodOrder).isTargetChild(m_child)) {
+						terminal[0] = true;
+					}
+				}
+			}
+			// support for MethodOrder_AfterParentChildren
+			if (m_parent != null) {
+				for (JavaInfo parentChildInfo : m_parent.getChildrenJava()) {
+					MethodOrder methodOrder = getMethodOrder(parentChildInfo, statement);
+					if (methodOrder instanceof MethodOrderAfterParentChildren) {
+						if (((MethodOrderAfterParentChildren) methodOrder).isTargetChild(m_child)) {
+							terminal[0] = true;
+						}
+					}
+				}
+			}
+		}
+		m_parent.getBroadcastJava().target_isTerminalStatement(m_parent, m_child, statement, terminal);
+		return terminal[0];
+	}
 
-  private MethodInvocation getMethodInvocation(JavaInfo javaInfo, Statement statement) {
-    if (statement instanceof ExpressionStatement) {
-      ExpressionStatement expressionStatement = (ExpressionStatement) statement;
-      if (expressionStatement.getExpression() instanceof MethodInvocation) {
-        MethodInvocation invocation = (MethodInvocation) expressionStatement.getExpression();
-        if (javaInfo.isRepresentedBy(invocation.getExpression())) {
-          return invocation;
-        }
-      }
-    }
-    return null;
-  }
+	private MethodInvocation getMethodInvocation(JavaInfo javaInfo, Statement statement) {
+		if (statement instanceof ExpressionStatement) {
+			ExpressionStatement expressionStatement = (ExpressionStatement) statement;
+			if (expressionStatement.getExpression() instanceof MethodInvocation) {
+				MethodInvocation invocation = (MethodInvocation) expressionStatement.getExpression();
+				if (javaInfo.isRepresentedBy(invocation.getExpression())) {
+					return invocation;
+				}
+			}
+		}
+		return null;
+	}
 
-  private MethodDescription getMethodDescription(JavaInfo javaInfo, Statement statement) {
-    MethodInvocation invocation = getMethodInvocation(javaInfo, statement);
-    if (invocation != null) {
-      return javaInfo.getDescription().getMethod(AstNodeUtils.getMethodBinding(invocation));
-    }
-    return null;
-  }
+	private MethodDescription getMethodDescription(JavaInfo javaInfo, Statement statement) {
+		MethodInvocation invocation = getMethodInvocation(javaInfo, statement);
+		if (invocation != null) {
+			return javaInfo.getDescription().getMethod(AstNodeUtils.getMethodBinding(invocation));
+		}
+		return null;
+	}
 
-  private MethodOrder getMethodOrder(JavaInfo javaInfo, Statement statement) {
-    MethodDescription description = getMethodDescription(javaInfo, statement);
-    if (description != null) {
-      return description.getOrder();
-    }
-    return null;
-  }
+	private MethodOrder getMethodOrder(JavaInfo javaInfo, Statement statement) {
+		MethodDescription description = getMethodDescription(javaInfo, statement);
+		if (description != null) {
+			return description.getOrder();
+		}
+		return null;
+	}
 
-  /**
-   * @param javaInfo
-   *          the {@link JavaInfo} which related {@link ASTNode}'s we should check.
-   * @param statement
-   *          the {@link Statement} to check for being related.
-   *
-   * @return <code>true</code> if given {@link Statement} contains {@link ASTNode} related with
-   *         given {@link JavaInfo} or any of its children.
-   */
-  private boolean isRelatedStatement(JavaInfo javaInfo, Statement statement) {
-    // check, may be given Statement contains related ASTNode's
-    for (ASTNode node : javaInfo.getRelatedNodes()) {
-      // check statement
-      {
-        Statement relatedStatement = AstNodeUtils.getEnclosingStatement(node);
-        // ignore "return component;"
-        if (relatedStatement instanceof ReturnStatement) {
-          continue;
-        }
-        // not our statement
-        if (relatedStatement != statement) {
-          continue;
-        }
-      }
-      // check invocation
-      {
-        MethodInvocation invocation = javaInfo.getMethodInvocation(node);
-        if (invocation != null) {
-          // non-executable method can not be reference,
-          // for example in "SWT Application" pattern shell.open() should be ignored
-          if (!javaInfo.shouldEvaluateInvocation(invocation)) {
-            continue;
-          }
-        }
-      }
-      // OK, given statement is related and valid
-      return true;
-    }
-    // check children
-    for (JavaInfo child : javaInfo.getChildrenJava()) {
-      Association association = child.getAssociation();
-      // each JavaInfo should have association, if there no association this means that we move it now
-      boolean hasAssociation = association != null;
-      // association may be invisible, for example performed in custom binary code of super-class
-      boolean hasGoodAssociation = hasAssociation && !(association instanceof UnknownAssociation);
-      // analyze child if:
-      //  1. we move it;
-      //  2. or we see its association.
-      if (!hasAssociation || hasGoodAssociation) {
-        if (isRelatedStatement(child, statement)) {
-          return true;
-        }
-      }
-    }
-    // not related
-    return false;
-  }
+	/**
+	 * @param javaInfo
+	 *          the {@link JavaInfo} which related {@link ASTNode}'s we should check.
+	 * @param statement
+	 *          the {@link Statement} to check for being related.
+	 *
+	 * @return <code>true</code> if given {@link Statement} contains {@link ASTNode} related with
+	 *         given {@link JavaInfo} or any of its children.
+	 */
+	private boolean isRelatedStatement(JavaInfo javaInfo, Statement statement) {
+		// check, may be given Statement contains related ASTNode's
+		for (ASTNode node : javaInfo.getRelatedNodes()) {
+			// check statement
+			{
+				Statement relatedStatement = AstNodeUtils.getEnclosingStatement(node);
+				// ignore "return component;"
+				if (relatedStatement instanceof ReturnStatement) {
+					continue;
+				}
+				// not our statement
+				if (relatedStatement != statement) {
+					continue;
+				}
+			}
+			// check invocation
+			{
+				MethodInvocation invocation = javaInfo.getMethodInvocation(node);
+				if (invocation != null) {
+					// non-executable method can not be reference,
+					// for example in "SWT Application" pattern shell.open() should be ignored
+					if (!javaInfo.shouldEvaluateInvocation(invocation)) {
+						continue;
+					}
+				}
+			}
+			// OK, given statement is related and valid
+			return true;
+		}
+		// check children
+		for (JavaInfo child : javaInfo.getChildrenJava()) {
+			Association association = child.getAssociation();
+			// each JavaInfo should have association, if there no association this means that we move it now
+			boolean hasAssociation = association != null;
+			// association may be invisible, for example performed in custom binary code of super-class
+			boolean hasGoodAssociation = hasAssociation && !(association instanceof UnknownAssociation);
+			// analyze child if:
+			//  1. we move it;
+			//  2. or we see its association.
+			if (!hasAssociation || hasGoodAssociation) {
+				if (isRelatedStatement(child, statement)) {
+					return true;
+				}
+			}
+		}
+		// not related
+		return false;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/DesignRootObject.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/DesignRootObject.java
index 98d420a9e..f3f6ff2bb 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/DesignRootObject.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/DesignRootObject.java
@@ -25,35 +25,35 @@
  * @coverage core.model
  */
 public final class DesignRootObject {
-  private final JavaInfo m_rootObject;
+	private final JavaInfo m_rootObject;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DesignRootObject(JavaInfo rootObject) {
-    m_rootObject = rootObject;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DesignRootObject(JavaInfo rootObject) {
+		m_rootObject = rootObject;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public JavaInfo getRootObject() {
-    return m_rootObject;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public JavaInfo getRootObject() {
+		return m_rootObject;
+	}
 
-  public List<?> getChildren() {
-    List<Object> children = Lists.newArrayList();
-    // add "info" root
-    children.add(m_rootObject);
-    // add exist non visual beans
-    NonVisualBeanContainerInfo container = NonVisualBeanContainerInfo.find(m_rootObject);
-    if (container != null) {
-      children.addAll(container.getChildren());
-    }
-    return children;
-  }
+	public List<?> getChildren() {
+		List<Object> children = Lists.newArrayList();
+		// add "info" root
+		children.add(m_rootObject);
+		// add exist non visual beans
+		NonVisualBeanContainerInfo container = NonVisualBeanContainerInfo.find(m_rootObject);
+		if (container != null) {
+			children.addAll(container.getChildren());
+		}
+		return children;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/JavaInfoEvaluationHelper.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/JavaInfoEvaluationHelper.java
index a0ca445f3..5c9143197 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/JavaInfoEvaluationHelper.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/JavaInfoEvaluationHelper.java
@@ -68,697 +68,697 @@
  * @coverage core.model
  */
 public abstract class JavaInfoEvaluationHelper {
-  /**
-   * The key for accessing {@link AstEditor} using
-   * {@link EvaluationContext#getArbitraryValue(Object)}.
-   */
-  public static final String KEY_EDITOR = "KEY_EXPRESSION_VALUE";
-  /**
-   * The key for flag on {@link SingleVariableDeclaration}, when {@link Boolean#TRUE}, when
-   * {@link #KEY_PARAMETER_VALUE} can be used to access value.
-   */
-  public static final String KEY_PARAMETER_HAS_VALUE = "KEY_PARAMETER_HAS_VALUE";
-  /**
-   * The key for accessing value of {@link SingleVariableDeclaration}, when execution flow routed
-   * from "binary flow" into {@link MethodDeclaration}.
-   */
-  public static final String KEY_PARAMETER_VALUE = "KEY_PARAMETER_VALUE";
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Value access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final String KEY_EXPRESSION_VALUE = "KEY_EXPRESSION_VALUE";
-  private static final Object NULL_VALUE = new Object() {
-    @Override
-    public String toString() {
-      return "NULL_VALUE";
-    }
-  };
-
-  /**
-   * @return <code>true</code> if given {@link Expression} has value property.
-   */
-  public static boolean hasValue(Expression expression) {
-    return expression.properties().containsKey(KEY_EXPRESSION_VALUE);
-  }
-
-  /**
-   * @return the value of {@link Expression} evaluated during AST execution, or <code>null</code> if
-   *         given {@link Expression} was not evaluated.
-   */
-  public static Object getValue(Expression expression) {
-    Object value = expression.getProperty(KEY_EXPRESSION_VALUE);
-    if (value == NULL_VALUE) {
-      return null;
-    }
-    return value;
-  }
-
-  /**
-   * Sets the value associated with {@link Expression} during AST evaluation.
-   */
-  public static void setValue(Expression expression, Object value) {
-    if (value == null) {
-      value = NULL_VALUE;
-    }
-    if (expression != null) {
-      expression.setProperty(KEY_EXPRESSION_VALUE, value);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Return value access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final String KEY_RETURN_VALUE = "KEY_RETURN_VALUE";
-  private static final String KEY_EVALUATE_RETURN_VALUE = "KEY_EVALUATE_RETURN_VALUE";
-
-  /**
-   * @return the value of {@link ReturnStatement} evaluated during AST execution, or
-   *         <code>null</code> if returned {@link Expression} was not evaluated.
-   */
-  public static Object getReturnValue(MethodDeclaration methodDeclaration) {
-    return methodDeclaration.getProperty(KEY_RETURN_VALUE);
-  }
-
-  /**
-   * Sets the value associated with {@link Expression} of {@link ReturnStatement} during AST
-   * evaluation.
-   */
-  private static void setReturnValue(MethodDeclaration methodDeclaration, Object value) {
-    methodDeclaration.setProperty(KEY_RETURN_VALUE, value);
-  }
-
-  /**
-   * Specifies if {@link ReturnStatement} of given {@link MethodDeclaration} should be evaluated.
-   */
-  public static void shouldEvaluateReturnValue(MethodDeclaration methodDeclaration, boolean evaluate) {
-    methodDeclaration.setProperty(KEY_EVALUATE_RETURN_VALUE, evaluate ? Boolean.TRUE : null);
-  }
-
-  /**
-   * @return <code>true</code> if {@link ReturnStatement} of given {@link MethodDeclaration} should
-   *         be evaluated.
-   */
-  private static boolean shouldEvaluateReturnValue(MethodDeclaration methodDeclaration) {
-    return methodDeclaration.getProperty(KEY_EVALUATE_RETURN_VALUE) == Boolean.TRUE;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance fields
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final AstEditor m_editor;
-  private final EditorState m_state;
-  private final ExecutionFlowFrameVisitor m_visitor;
-  private final EvaluationContext m_context;
-  private final Set<MethodInvocation> m_impossibleJavaInfo = Sets.newHashSet();
-  private final Set<Expression> m_evaluatedExpressions = Sets.newHashSet();
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public JavaInfoEvaluationHelper(AstEditor editor, ExecutionFlowFrameVisitor visitor) {
-    m_editor = editor;
-    m_state = EditorState.get(editor);
-    m_visitor = visitor;
-    // prepare evaluation context
-    {
-      m_context = createEvaluationContext();
-      // remember ASTEditor
-      m_context.putArbitraryValue(KEY_EDITOR, editor);
-      // evaluator for JavaInfo objects
-      m_context.addEvaluator(new IExpressionEvaluator() {
-        @Override
-        public Object evaluate(EvaluationContext context,
-            Expression expression,
-            ITypeBinding typeBinding,
-            String typeQualifiedName) throws Exception {
-          if (m_impossibleJavaInfo.contains(expression)) {
-            return AstEvaluationEngine.UNKNOWN;
-          }
-          if (isChainedInvocation(expression)) {
-            return AstEvaluationEngine.UNKNOWN;
-          }
-          //
-          JavaInfo javaInfo = getJavaInfoRepresentedBy(expression);
-          if (javaInfo != null) {
-            Object object = javaInfo.getObject();
-            if (object != null) {
-              return object;
-            }
-          }
-          return AstEvaluationEngine.UNKNOWN;
-        }
-
-        private boolean isChainedInvocation(Expression expression) {
-          if (expression instanceof MethodInvocation) {
-            MethodInvocation invocation = (MethodInvocation) expression;
-            JavaInfo javaInfo = getJavaInfoRepresentedBy(invocation.getExpression());
-            if (javaInfo != null) {
-              String signature = AstNodeUtils.getMethodSignature(invocation);
-              MethodDescription method = javaInfo.getDescription().getMethod(signature);
-              return method != null && method.hasTrueTag("returnThis");
-            }
-          }
-          return false;
-        }
-      });
-    }
-  }
-
-  private EvaluationContext createEvaluationContext() {
-    return new EvaluationContext(m_state.getEditorLoader(), m_state.getFlowDescription()) {
-      ////////////////////////////////////////////////////////////////////////////
-      //
-      // Access
-      //
-      ////////////////////////////////////////////////////////////////////////////
-      @Override
-      public String getSource(ASTNode node) {
-        if (node == null) {
-          return "<null>";
-        }
-        return m_editor.getSource(node);
-      }
-
-      ////////////////////////////////////////////////////////////////////////////
-      //
-      // Evaluation
-      //
-      ////////////////////////////////////////////////////////////////////////////
-      @Override
-      public void evaluationRequested(Expression expression) throws Exception {
-        super.evaluationRequested(expression);
-        m_state.getVisitedNodes().add(expression);
-      }
-
-      @Override
-      public void evaluationSuccessful(Expression expression, Object value) throws Exception {
-        super.evaluationSuccessful(expression, value);
-        // remember value of Expression
-        setValue(expression, value);
-        // remember object for JavaInfo
-        {
-          JavaInfo javaInfo = getJavaInfoRepresentedBy(expression);
-          if (javaInfo != null) {
-            boolean noObjectYet = javaInfo.getObject() == null;
-            if (noObjectYet) {
-              javaInfo.setObject(value);
-            }
-          }
-        }
-        // check for Assignment
-        if (expression instanceof Assignment) {
-          Assignment assignment = (Assignment) expression;
-          Expression leftHandExpression = assignment.getLeftHandSide();
-          // check for: javaInfo.fieldName = someExpression
-          if (leftHandExpression instanceof QualifiedName) {
-            QualifiedName leftQualifiedName = (QualifiedName) leftHandExpression;
-            Name leftQualifier = leftQualifiedName.getQualifier();
-            JavaInfo javaInfo = getJavaInfoRepresentedBy(leftQualifier);
-            if (javaInfo != null) {
-              Object javaInfoObject = javaInfo.getObject();
-              Assert.isNotNull(javaInfoObject);
-              // set value of field
-              String fieldName = leftQualifiedName.getName().getIdentifier();
-              ReflectionUtils.setField(javaInfoObject, fieldName, value);
-            }
-          }
-        }
-      }
-
-      @Override
-      public Object evaluationFailed(Expression expression, Throwable e) throws Exception {
-        // fail, if fatal
-        if (DesignerExceptionUtils.isFatal(e)) {
-          return AstEvaluationEngine.UNKNOWN;
-        }
-        // non-strict mode
-        if (!isStrictEvaluationMode()) {
-          // only for not JavaInfo
-          if (getJavaInfoRepresentedBy(expression) == null) {
-            m_state.getBadRefreshNodes().add(expression, e);
-            ITypeBinding binding = AstNodeUtils.getTypeBinding(expression);
-            return getDefaultValue(binding);
-          }
-        }
-        // default handling (fail)
-        return super.evaluationFailed(expression, e);
-      }
-
-      @Override
-      public void addException(ASTNode node, Throwable e) {
-        m_state.getBadRefreshNodes().add(node, e);
-      }
-
-      ////////////////////////////////////////////////////////////////////////////
-      //
-      // evaluator for "null"/"this" expression of MethodInvocation
-      //
-      ////////////////////////////////////////////////////////////////////////////
-      private MethodInvocation m_invocation;
-
-      @Override
-      public Object evaluate(Expression expression) throws Exception {
-        // null/this as "expression" of some MethodInvocation
-        if (expression == null || expression instanceof ThisExpression) {
-          JavaInfo javaInfo = getThisJavaInfo();
-          if (javaInfo != null) {
-            if (expression == null) {
-              thisJavaInfoNodeProcessed(javaInfo, m_invocation);
-            }
-            return javaInfo.getObject();
-          }
-        }
-        // if CreationSupport says that it should be used for Object creation, then do this
-        {
-          JavaInfo javaInfo = getJavaInfoRepresentedBy(expression);
-          if (javaInfo != null) {
-            CreationSupport creationSupport = javaInfo.getCreationSupport();
-            if (!creationSupport.canBeEvaluated()) {
-              Object object = javaInfo.getObject();
-              if (object != null) {
-                return object;
-              }
-              return evaluateJavaInfoUsingCreationSupport(javaInfo);
-            }
-          }
-        }
-        // remember last MethodInvocation
-        if (expression instanceof MethodInvocation) {
-          m_invocation = (MethodInvocation) expression;
-        } else {
-          m_invocation = null;
-        }
-        // not a "this"
-        return AstEvaluationEngine.UNKNOWN;
-      }
-
-      ////////////////////////////////////////////////////////////////////////////
-      //
-      // Unknown parameters
-      //
-      ////////////////////////////////////////////////////////////////////////////
-      @Override
-      public Object evaluateUnknownParameter(MethodDeclaration methodDeclaration,
-          SingleVariableDeclaration parameter) throws Exception {
-        {
-          Object value = evaluateUnknownParameter0(methodDeclaration, parameter);
-          if (value != AstEvaluationEngine.UNKNOWN) {
-            return value;
-          }
-        }
-        // default handling - will throw exception
-        return super.evaluateUnknownParameter(methodDeclaration, parameter);
-      }
-    };
-  }
-
-  private Object evaluateUnknownParameter0(MethodDeclaration method,
-      SingleVariableDeclaration parameter) throws Exception {
-    // check for external value
-    if (parameter.getProperty(KEY_PARAMETER_HAS_VALUE) == Boolean.TRUE) {
-      return parameter.getProperty(KEY_PARAMETER_VALUE);
-    }
-    // check JavaDoc tags
-    {
-      Object value =
-          evaluateJavadocTagExpression(
-              m_editor,
-              m_context,
-              method.getJavadoc(),
-              "@wbp.eval.method.parameter",
-              parameter.getName().getIdentifier());
-      if (value != AstEvaluationEngine.UNKNOWN) {
-        return value;
-      }
-    }
-    // prepare more information
-    String signature = AstNodeUtils.getMethodSignature(method);
-    int index = DomGenerics.parameters(method).indexOf(parameter);
-    // check for JavaInfo evaluator
-    {
-      JavaInfo thisJavaInfo = getThisJavaInfo();
-      if (thisJavaInfo instanceof IThisMethodParameterEvaluator) {
-        IThisMethodParameterEvaluator evaluator = (IThisMethodParameterEvaluator) thisJavaInfo;
-        Object value = evaluator.evaluateParameter(m_context, method, signature, parameter, index);
-        if (value != AstEvaluationEngine.UNKNOWN) {
-          return value;
-        }
-      }
-    }
-    // use IMethodParameterEvaluator
-    {
-      List<IMethodParameterEvaluator> evaluators =
-          ExternalFactoriesHelper.getElementsInstances(
-              IMethodParameterEvaluator.class,
-              "org.eclipse.wb.core.java.unknownParameterEvaluators",
-              "evaluator");
-      for (IMethodParameterEvaluator evaluator : evaluators) {
-        Object value = evaluator.evaluateParameter(m_context, method, signature, parameter, index);
-        if (value != AstEvaluationEngine.UNKNOWN) {
-          return value;
-        }
-      }
-    }
-    // non-strict mode
-    if (!isStrictEvaluationMode()) {
-      ITypeBinding binding = AstNodeUtils.getTypeBinding(parameter);
-      return getDefaultValue(binding);
-    }
-    // unknown
-    return AstEvaluationEngine.UNKNOWN;
-  }
-
-  public static Object getDefaultValue(ITypeBinding binding) {
-    // no binding (compilation error), so Object
-    if (binding == null) {
-      return null;
-    }
-    // primitive
-    if (binding.isPrimitive()) {
-      String className = AstNodeUtils.getFullyQualifiedName(binding, true);
-      return ReflectionUtils.getDefaultValue(className);
-    }
-    // String
-    if (AstNodeUtils.isSuccessorOf(binding, "java.lang.String")) {
-      return "<dynamic>";
-    }
-    // Collections
-    if (AstNodeUtils.isSuccessorOf(binding, "java.util.LinkedList")) {
-      return Lists.newLinkedList();
-    }
-    if (AstNodeUtils.isSuccessorOf(binding, "java.util.Vector")) {
-      return new java.util.Vector<Object>();
-    }
-    if (AstNodeUtils.isSuccessorOf(binding, "java.util.List")) {
-      return Lists.newArrayList();
-    }
-    if (AstNodeUtils.isSuccessorOf(binding, "java.util.Set")) {
-      return Sets.newHashSet();
-    }
-    if (AstNodeUtils.isSuccessorOf(binding, "java.util.Map")) {
-      return Maps.newHashMap();
-    }
-    // Object
-    return null;
-  }
-
-  private static boolean isStrictEvaluationMode() {
-    return DesignerPlugin.getDefault().getPreferenceStore().getBoolean(
-        org.eclipse.wb.internal.core.preferences.IPreferenceConstants.P_CODE_STRICT_EVALUATE);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link EvaluationContext} that is used in this {@link JavaInfoEvaluationHelper}
-   *         session.
-   */
-  public final EvaluationContext getContext() {
-    return m_context;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Evaluating
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public final void evaluate(ASTNode node) {
-    try {
-      // Expression that is JavaInfo creation
-      if (isPossibleJavaInfoCreationExpression(node)) {
-        Expression expression = (Expression) node;
-        JavaInfo javaInfo = getJavaInfoRepresentedBy(expression);
-        if (javaInfo != null) {
-          evaluateExpression(expression);
-          return;
-        }
-      }
-      // check for ReturnStatement
-      if (node instanceof ReturnStatement) {
-        ReturnStatement returnStatement = (ReturnStatement) node;
-        if (shouldEvaluateReturnStatement(returnStatement)) {
-          Expression expression = returnStatement.getExpression();
-          Object object = evaluateExpression(expression);
-          setReturnValue(AstNodeUtils.getEnclosingMethod(returnStatement), object);
-        }
-      }
-      // check for ExpressionStatement
-      if (node instanceof ExpressionStatement) {
-        ExpressionStatement expressionStatement = (ExpressionStatement) node;
-        Expression expression = expressionStatement.getExpression();
-        // check for MethodInvocation
-        if (expression instanceof MethodInvocation) {
-          MethodInvocation invocation = (MethodInvocation) expression;
-          // if "expression" of this invocation is JavaInfo
-          {
-            JavaInfo javaInfo = getJavaInfoRepresentedBy(invocation.getExpression());
-            if (javaInfo != null) {
-              // add invocation only for "this" component, for other invocations we already have
-              // "expression" as related node
-              if (invocation.getExpression() == null) {
-                // add related node, if it is declared in component class, i.e. is not local
-                Class<?> componentClass = javaInfo.getDescription().getComponentClass();
-                if (ReflectionUtils.getMethodBySignature(
-                    componentClass,
-                    AstNodeUtils.getMethodSignature(invocation)) != null) {
-                  javaInfo.addRelatedNode(invocation);
-                }
-              }
-              // check that it is possible to evaluate this invocation
-              if (!javaInfo.shouldEvaluateInvocation(invocation)) {
-                return;
-              }
-              // OK, now we can evaluate
-              m_impossibleJavaInfo.add(invocation);
-              evaluateMethodInvocation(javaInfo, invocation);
-              return;
-            }
-          }
-        }
-        // check for SuperMethodInvocation
-        if (expression instanceof SuperMethodInvocation) {
-          SuperMethodInvocation invocation = (SuperMethodInvocation) expression;
-          evaluateExpression(invocation);
-        }
-        // check for Assignment
-        if (expression instanceof Assignment) {
-          evaluateAssignment(expression);
-        }
-      }
-    } catch (Throwable e) {
-      ReflectionUtils.propagate(e);
-    }
-  }
-
-  private static boolean isPossibleJavaInfoCreationExpression(ASTNode node) {
-    if (node instanceof CastExpression) {
-      CastExpression castExpression = (CastExpression) node;
-      return isPossibleJavaInfoCreationExpression(castExpression.getExpression());
-    }
-    return node instanceof ClassInstanceCreation
-        || node instanceof MethodInvocation
-        || node instanceof SuperMethodInvocation;
-  }
-
-  private void evaluateAssignment(Expression expression) throws Exception {
-    Assignment assignment = (Assignment) expression;
-    Expression leftHandExpression = assignment.getLeftHandSide();
-    Expression rightHandExpression = assignment.getRightHandSide();
-    // check for: someName = javaInfoExpression
-    if (getJavaInfoRepresentedBy(rightHandExpression) != null) {
-      evaluateExpression(rightHandExpression);
-    }
-    // check for: javaInfo.fieldName = someExpression
-    {
-      Expression leftQualifier = AstNodeUtils.getFieldAccessQualifier(leftHandExpression);
-      if (leftQualifier != null) {
-        JavaInfo javaInfo = getJavaInfoRepresentedBy(leftQualifier);
-        if (javaInfo != null) {
-          evaluateExpression(leftQualifier);
-          Object javaInfoObject = javaInfo.getObject();
-          Assert.isNotNull(javaInfoObject);
-          // prepare field
-          Field field;
-          {
-            String fieldName = AstNodeUtils.getFieldAccessName(leftHandExpression).getIdentifier();
-            field = ReflectionUtils.getFieldByName(javaInfoObject.getClass(), fieldName);
-          }
-          // set value of field
-          if (field != null) {
-            Object value = evaluateExpression(rightHandExpression);
-            field.set(javaInfoObject, value);
-          }
-        }
-      }
-    }
-  }
-
-  /**
-   * @return the value of given {@link MethodInvocation} of {@link JavaInfo}.
-   */
-  public final void evaluateMethodInvocation(JavaInfo javaInfo, MethodInvocation invocation)
-      throws Exception {
-    try {
-      evaluateExpression(invocation);
-    } catch (Error e) {
-      if (AnonymousEvaluationError.is(e)) {
-      } else {
-        throw e;
-      }
-    }
-  }
-
-  /**
-   * @return the value of given {@link Expression}.
-   */
-  public final Object evaluateExpression(Expression expression) throws Exception {
-    if (m_evaluatedExpressions.contains(expression)) {
-      return getValue(expression);
-    }
-    m_evaluatedExpressions.add(expression);
-    // evaluate
-    Object result = AstEvaluationEngine.evaluate(m_context, expression);
-    Assert.isTrue(result != AstEvaluationEngine.UNKNOWN);
-    return result;
-  }
-
-  /**
-   * Evaluates given {@link JavaInfo} using its {@link CreationSupport}.
-   *
-   * @return the resulting object.
-   */
-  public final Object evaluateJavaInfoUsingCreationSupport(JavaInfo javaInfo) throws Exception {
-    // create object
-    Object object = javaInfo.getCreationSupport().create(m_context, m_visitor);
-    Assert.isNotNull(object);
-    // set it as value and return
-    javaInfo.setObject(object);
-    return object;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the root {@link JavaInfo}, possible {@link JavaInfo} for {@link ThisExpression}.
-   */
-  protected JavaInfo getRootJavaInfo() {
-    throw new NotImplementedException(getClass());
-  }
-
-  /**
-   * We use this method to send notification, that {@link ASTNode} for "this" {@link JavaInfo} was
-   * processed.
-   */
-  protected void thisJavaInfoNodeProcessed(JavaInfo javaInfo, ASTNode node) throws Exception {
-    throw new NotImplementedException(getClass());
-  }
-
-  /**
-   * @return the {@link JavaInfo} that represents given {@link Expression}.
-   */
-  protected abstract JavaInfo getJavaInfoRepresentedBy(Expression expression);
-
-  /**
-   * @return the {@link JavaInfo} that should be used for "this" {@link Expression}.
-   */
-  private JavaInfo getThisJavaInfo() {
-    JavaInfo rootJavaInfo = getRootJavaInfo();
-    // check that root JavaInfo is "this"
-    if (rootJavaInfo != null) {
-      if (rootJavaInfo.getCreationSupport() instanceof ThisCreationSupport) {
-        return rootJavaInfo;
-      }
-    }
-    // no, some different JavaInfo (or may be not JavaInfo at all)
-    return null;
-  }
-
-  private boolean shouldEvaluateReturnStatement(ReturnStatement returnStatement) throws Exception {
-    // check forced evaluation
-    {
-      MethodDeclaration enclosingMethod = AstNodeUtils.getEnclosingMethod(returnStatement);
-      if (shouldEvaluateReturnValue(enclosingMethod)) {
-        return true;
-      }
-    }
-    // evaluate if JavaInfo
-    Expression expression = returnStatement.getExpression();
-    return getJavaInfoRepresentedBy(expression) != null;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Unknown parameters support
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  //private static final String TAG_EVAL_PARAMETER = "@wbp.eval.method.parameter";
-  /**
-   * Evaluates value of expression specified in JavaDoc comments like this:
-   *
-   * @wbp.eval.method.parameter someName someExpression
-   *
-   * @param javadoc
-   *          the {@link Javadoc} that should be checked.
-   * @param tagName
-   *          the name of tag, "@wbp.eval.method.parameter" in example above.
-   * @param expectedName
-   *          the name of expression, "someName" in example above.
-   */
-  public static Object evaluateJavadocTagExpression(AstEditor editor,
-      EvaluationContext context,
-      Javadoc javadoc,
-      String tagName,
-      String expectedName) throws Exception {
-    if (javadoc != null) {
-      for (TagElement tag : DomGenerics.tags(javadoc)) {
-        if (tagName.equals(tag.getTagName())) {
-          // extract <name> and <expression text>
-          String name;
-          String expressionText;
-          {
-            String errorMessage =
-                "'" + tagName + " <name> = <expression>' expected but '" + tag + "' found.";
-            Assert.isLegal(tag.fragments().size() == 1, errorMessage);
-            // prepare TextElement parts
-            TextElement textElement = (TextElement) tag.fragments().get(0);
-            String text = textElement.getText().trim();
-            String[] parts = StringUtils.split(text);
-            Assert.isLegal(parts.length >= 2, errorMessage);
-            // assign parts
-            name = parts[0];
-            expressionText = text.substring(name.length()).trim();
-          }
-          // check that we found expected <name>
-          if (name.equals(expectedName)) {
-            Object value = tag.getProperty(KEY_EXPRESSION_VALUE);
-            // evaluate value only one time
-            if (value == null) {
-              Expression expression =
-                  editor.getParser().parseExpression(javadoc.getStartPosition(), expressionText);
-              value = AstEvaluationEngine.evaluate(context, expression);
-              tag.setProperty(KEY_EXPRESSION_VALUE, value);
-            }
-            // return value
-            return value;
-          }
-        }
-      }
-    }
-    // no value found
-    return AstEvaluationEngine.UNKNOWN;
-  }
+	/**
+	 * The key for accessing {@link AstEditor} using
+	 * {@link EvaluationContext#getArbitraryValue(Object)}.
+	 */
+	public static final String KEY_EDITOR = "KEY_EXPRESSION_VALUE";
+	/**
+	 * The key for flag on {@link SingleVariableDeclaration}, when {@link Boolean#TRUE}, when
+	 * {@link #KEY_PARAMETER_VALUE} can be used to access value.
+	 */
+	public static final String KEY_PARAMETER_HAS_VALUE = "KEY_PARAMETER_HAS_VALUE";
+	/**
+	 * The key for accessing value of {@link SingleVariableDeclaration}, when execution flow routed
+	 * from "binary flow" into {@link MethodDeclaration}.
+	 */
+	public static final String KEY_PARAMETER_VALUE = "KEY_PARAMETER_VALUE";
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Value access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final String KEY_EXPRESSION_VALUE = "KEY_EXPRESSION_VALUE";
+	private static final Object NULL_VALUE = new Object() {
+		@Override
+		public String toString() {
+			return "NULL_VALUE";
+		}
+	};
+
+	/**
+	 * @return <code>true</code> if given {@link Expression} has value property.
+	 */
+	public static boolean hasValue(Expression expression) {
+		return expression.properties().containsKey(KEY_EXPRESSION_VALUE);
+	}
+
+	/**
+	 * @return the value of {@link Expression} evaluated during AST execution, or <code>null</code> if
+	 *         given {@link Expression} was not evaluated.
+	 */
+	public static Object getValue(Expression expression) {
+		Object value = expression.getProperty(KEY_EXPRESSION_VALUE);
+		if (value == NULL_VALUE) {
+			return null;
+		}
+		return value;
+	}
+
+	/**
+	 * Sets the value associated with {@link Expression} during AST evaluation.
+	 */
+	public static void setValue(Expression expression, Object value) {
+		if (value == null) {
+			value = NULL_VALUE;
+		}
+		if (expression != null) {
+			expression.setProperty(KEY_EXPRESSION_VALUE, value);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Return value access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final String KEY_RETURN_VALUE = "KEY_RETURN_VALUE";
+	private static final String KEY_EVALUATE_RETURN_VALUE = "KEY_EVALUATE_RETURN_VALUE";
+
+	/**
+	 * @return the value of {@link ReturnStatement} evaluated during AST execution, or
+	 *         <code>null</code> if returned {@link Expression} was not evaluated.
+	 */
+	public static Object getReturnValue(MethodDeclaration methodDeclaration) {
+		return methodDeclaration.getProperty(KEY_RETURN_VALUE);
+	}
+
+	/**
+	 * Sets the value associated with {@link Expression} of {@link ReturnStatement} during AST
+	 * evaluation.
+	 */
+	private static void setReturnValue(MethodDeclaration methodDeclaration, Object value) {
+		methodDeclaration.setProperty(KEY_RETURN_VALUE, value);
+	}
+
+	/**
+	 * Specifies if {@link ReturnStatement} of given {@link MethodDeclaration} should be evaluated.
+	 */
+	public static void shouldEvaluateReturnValue(MethodDeclaration methodDeclaration, boolean evaluate) {
+		methodDeclaration.setProperty(KEY_EVALUATE_RETURN_VALUE, evaluate ? Boolean.TRUE : null);
+	}
+
+	/**
+	 * @return <code>true</code> if {@link ReturnStatement} of given {@link MethodDeclaration} should
+	 *         be evaluated.
+	 */
+	private static boolean shouldEvaluateReturnValue(MethodDeclaration methodDeclaration) {
+		return methodDeclaration.getProperty(KEY_EVALUATE_RETURN_VALUE) == Boolean.TRUE;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance fields
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final AstEditor m_editor;
+	private final EditorState m_state;
+	private final ExecutionFlowFrameVisitor m_visitor;
+	private final EvaluationContext m_context;
+	private final Set<MethodInvocation> m_impossibleJavaInfo = Sets.newHashSet();
+	private final Set<Expression> m_evaluatedExpressions = Sets.newHashSet();
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public JavaInfoEvaluationHelper(AstEditor editor, ExecutionFlowFrameVisitor visitor) {
+		m_editor = editor;
+		m_state = EditorState.get(editor);
+		m_visitor = visitor;
+		// prepare evaluation context
+		{
+			m_context = createEvaluationContext();
+			// remember ASTEditor
+			m_context.putArbitraryValue(KEY_EDITOR, editor);
+			// evaluator for JavaInfo objects
+			m_context.addEvaluator(new IExpressionEvaluator() {
+				@Override
+				public Object evaluate(EvaluationContext context,
+						Expression expression,
+						ITypeBinding typeBinding,
+						String typeQualifiedName) throws Exception {
+					if (m_impossibleJavaInfo.contains(expression)) {
+						return AstEvaluationEngine.UNKNOWN;
+					}
+					if (isChainedInvocation(expression)) {
+						return AstEvaluationEngine.UNKNOWN;
+					}
+					//
+					JavaInfo javaInfo = getJavaInfoRepresentedBy(expression);
+					if (javaInfo != null) {
+						Object object = javaInfo.getObject();
+						if (object != null) {
+							return object;
+						}
+					}
+					return AstEvaluationEngine.UNKNOWN;
+				}
+
+				private boolean isChainedInvocation(Expression expression) {
+					if (expression instanceof MethodInvocation) {
+						MethodInvocation invocation = (MethodInvocation) expression;
+						JavaInfo javaInfo = getJavaInfoRepresentedBy(invocation.getExpression());
+						if (javaInfo != null) {
+							String signature = AstNodeUtils.getMethodSignature(invocation);
+							MethodDescription method = javaInfo.getDescription().getMethod(signature);
+							return method != null && method.hasTrueTag("returnThis");
+						}
+					}
+					return false;
+				}
+			});
+		}
+	}
+
+	private EvaluationContext createEvaluationContext() {
+		return new EvaluationContext(m_state.getEditorLoader(), m_state.getFlowDescription()) {
+			////////////////////////////////////////////////////////////////////////////
+			//
+			// Access
+			//
+			////////////////////////////////////////////////////////////////////////////
+			@Override
+			public String getSource(ASTNode node) {
+				if (node == null) {
+					return "<null>";
+				}
+				return m_editor.getSource(node);
+			}
+
+			////////////////////////////////////////////////////////////////////////////
+			//
+			// Evaluation
+			//
+			////////////////////////////////////////////////////////////////////////////
+			@Override
+			public void evaluationRequested(Expression expression) throws Exception {
+				super.evaluationRequested(expression);
+				m_state.getVisitedNodes().add(expression);
+			}
+
+			@Override
+			public void evaluationSuccessful(Expression expression, Object value) throws Exception {
+				super.evaluationSuccessful(expression, value);
+				// remember value of Expression
+				setValue(expression, value);
+				// remember object for JavaInfo
+				{
+					JavaInfo javaInfo = getJavaInfoRepresentedBy(expression);
+					if (javaInfo != null) {
+						boolean noObjectYet = javaInfo.getObject() == null;
+						if (noObjectYet) {
+							javaInfo.setObject(value);
+						}
+					}
+				}
+				// check for Assignment
+				if (expression instanceof Assignment) {
+					Assignment assignment = (Assignment) expression;
+					Expression leftHandExpression = assignment.getLeftHandSide();
+					// check for: javaInfo.fieldName = someExpression
+					if (leftHandExpression instanceof QualifiedName) {
+						QualifiedName leftQualifiedName = (QualifiedName) leftHandExpression;
+						Name leftQualifier = leftQualifiedName.getQualifier();
+						JavaInfo javaInfo = getJavaInfoRepresentedBy(leftQualifier);
+						if (javaInfo != null) {
+							Object javaInfoObject = javaInfo.getObject();
+							Assert.isNotNull(javaInfoObject);
+							// set value of field
+							String fieldName = leftQualifiedName.getName().getIdentifier();
+							ReflectionUtils.setField(javaInfoObject, fieldName, value);
+						}
+					}
+				}
+			}
+
+			@Override
+			public Object evaluationFailed(Expression expression, Throwable e) throws Exception {
+				// fail, if fatal
+				if (DesignerExceptionUtils.isFatal(e)) {
+					return AstEvaluationEngine.UNKNOWN;
+				}
+				// non-strict mode
+				if (!isStrictEvaluationMode()) {
+					// only for not JavaInfo
+					if (getJavaInfoRepresentedBy(expression) == null) {
+						m_state.getBadRefreshNodes().add(expression, e);
+						ITypeBinding binding = AstNodeUtils.getTypeBinding(expression);
+						return getDefaultValue(binding);
+					}
+				}
+				// default handling (fail)
+				return super.evaluationFailed(expression, e);
+			}
+
+			@Override
+			public void addException(ASTNode node, Throwable e) {
+				m_state.getBadRefreshNodes().add(node, e);
+			}
+
+			////////////////////////////////////////////////////////////////////////////
+			//
+			// evaluator for "null"/"this" expression of MethodInvocation
+			//
+			////////////////////////////////////////////////////////////////////////////
+			private MethodInvocation m_invocation;
+
+			@Override
+			public Object evaluate(Expression expression) throws Exception {
+				// null/this as "expression" of some MethodInvocation
+				if (expression == null || expression instanceof ThisExpression) {
+					JavaInfo javaInfo = getThisJavaInfo();
+					if (javaInfo != null) {
+						if (expression == null) {
+							thisJavaInfoNodeProcessed(javaInfo, m_invocation);
+						}
+						return javaInfo.getObject();
+					}
+				}
+				// if CreationSupport says that it should be used for Object creation, then do this
+				{
+					JavaInfo javaInfo = getJavaInfoRepresentedBy(expression);
+					if (javaInfo != null) {
+						CreationSupport creationSupport = javaInfo.getCreationSupport();
+						if (!creationSupport.canBeEvaluated()) {
+							Object object = javaInfo.getObject();
+							if (object != null) {
+								return object;
+							}
+							return evaluateJavaInfoUsingCreationSupport(javaInfo);
+						}
+					}
+				}
+				// remember last MethodInvocation
+				if (expression instanceof MethodInvocation) {
+					m_invocation = (MethodInvocation) expression;
+				} else {
+					m_invocation = null;
+				}
+				// not a "this"
+				return AstEvaluationEngine.UNKNOWN;
+			}
+
+			////////////////////////////////////////////////////////////////////////////
+			//
+			// Unknown parameters
+			//
+			////////////////////////////////////////////////////////////////////////////
+			@Override
+			public Object evaluateUnknownParameter(MethodDeclaration methodDeclaration,
+					SingleVariableDeclaration parameter) throws Exception {
+				{
+					Object value = evaluateUnknownParameter0(methodDeclaration, parameter);
+					if (value != AstEvaluationEngine.UNKNOWN) {
+						return value;
+					}
+				}
+				// default handling - will throw exception
+				return super.evaluateUnknownParameter(methodDeclaration, parameter);
+			}
+		};
+	}
+
+	private Object evaluateUnknownParameter0(MethodDeclaration method,
+			SingleVariableDeclaration parameter) throws Exception {
+		// check for external value
+		if (parameter.getProperty(KEY_PARAMETER_HAS_VALUE) == Boolean.TRUE) {
+			return parameter.getProperty(KEY_PARAMETER_VALUE);
+		}
+		// check JavaDoc tags
+		{
+			Object value =
+					evaluateJavadocTagExpression(
+							m_editor,
+							m_context,
+							method.getJavadoc(),
+							"@wbp.eval.method.parameter",
+							parameter.getName().getIdentifier());
+			if (value != AstEvaluationEngine.UNKNOWN) {
+				return value;
+			}
+		}
+		// prepare more information
+		String signature = AstNodeUtils.getMethodSignature(method);
+		int index = DomGenerics.parameters(method).indexOf(parameter);
+		// check for JavaInfo evaluator
+		{
+			JavaInfo thisJavaInfo = getThisJavaInfo();
+			if (thisJavaInfo instanceof IThisMethodParameterEvaluator) {
+				IThisMethodParameterEvaluator evaluator = (IThisMethodParameterEvaluator) thisJavaInfo;
+				Object value = evaluator.evaluateParameter(m_context, method, signature, parameter, index);
+				if (value != AstEvaluationEngine.UNKNOWN) {
+					return value;
+				}
+			}
+		}
+		// use IMethodParameterEvaluator
+		{
+			List<IMethodParameterEvaluator> evaluators =
+					ExternalFactoriesHelper.getElementsInstances(
+							IMethodParameterEvaluator.class,
+							"org.eclipse.wb.core.java.unknownParameterEvaluators",
+							"evaluator");
+			for (IMethodParameterEvaluator evaluator : evaluators) {
+				Object value = evaluator.evaluateParameter(m_context, method, signature, parameter, index);
+				if (value != AstEvaluationEngine.UNKNOWN) {
+					return value;
+				}
+			}
+		}
+		// non-strict mode
+		if (!isStrictEvaluationMode()) {
+			ITypeBinding binding = AstNodeUtils.getTypeBinding(parameter);
+			return getDefaultValue(binding);
+		}
+		// unknown
+		return AstEvaluationEngine.UNKNOWN;
+	}
+
+	public static Object getDefaultValue(ITypeBinding binding) {
+		// no binding (compilation error), so Object
+		if (binding == null) {
+			return null;
+		}
+		// primitive
+		if (binding.isPrimitive()) {
+			String className = AstNodeUtils.getFullyQualifiedName(binding, true);
+			return ReflectionUtils.getDefaultValue(className);
+		}
+		// String
+		if (AstNodeUtils.isSuccessorOf(binding, "java.lang.String")) {
+			return "<dynamic>";
+		}
+		// Collections
+		if (AstNodeUtils.isSuccessorOf(binding, "java.util.LinkedList")) {
+			return Lists.newLinkedList();
+		}
+		if (AstNodeUtils.isSuccessorOf(binding, "java.util.Vector")) {
+			return new java.util.Vector<Object>();
+		}
+		if (AstNodeUtils.isSuccessorOf(binding, "java.util.List")) {
+			return Lists.newArrayList();
+		}
+		if (AstNodeUtils.isSuccessorOf(binding, "java.util.Set")) {
+			return Sets.newHashSet();
+		}
+		if (AstNodeUtils.isSuccessorOf(binding, "java.util.Map")) {
+			return Maps.newHashMap();
+		}
+		// Object
+		return null;
+	}
+
+	private static boolean isStrictEvaluationMode() {
+		return DesignerPlugin.getDefault().getPreferenceStore().getBoolean(
+				org.eclipse.wb.internal.core.preferences.IPreferenceConstants.P_CODE_STRICT_EVALUATE);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link EvaluationContext} that is used in this {@link JavaInfoEvaluationHelper}
+	 *         session.
+	 */
+	public final EvaluationContext getContext() {
+		return m_context;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Evaluating
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public final void evaluate(ASTNode node) {
+		try {
+			// Expression that is JavaInfo creation
+			if (isPossibleJavaInfoCreationExpression(node)) {
+				Expression expression = (Expression) node;
+				JavaInfo javaInfo = getJavaInfoRepresentedBy(expression);
+				if (javaInfo != null) {
+					evaluateExpression(expression);
+					return;
+				}
+			}
+			// check for ReturnStatement
+			if (node instanceof ReturnStatement) {
+				ReturnStatement returnStatement = (ReturnStatement) node;
+				if (shouldEvaluateReturnStatement(returnStatement)) {
+					Expression expression = returnStatement.getExpression();
+					Object object = evaluateExpression(expression);
+					setReturnValue(AstNodeUtils.getEnclosingMethod(returnStatement), object);
+				}
+			}
+			// check for ExpressionStatement
+			if (node instanceof ExpressionStatement) {
+				ExpressionStatement expressionStatement = (ExpressionStatement) node;
+				Expression expression = expressionStatement.getExpression();
+				// check for MethodInvocation
+				if (expression instanceof MethodInvocation) {
+					MethodInvocation invocation = (MethodInvocation) expression;
+					// if "expression" of this invocation is JavaInfo
+					{
+						JavaInfo javaInfo = getJavaInfoRepresentedBy(invocation.getExpression());
+						if (javaInfo != null) {
+							// add invocation only for "this" component, for other invocations we already have
+							// "expression" as related node
+							if (invocation.getExpression() == null) {
+								// add related node, if it is declared in component class, i.e. is not local
+								Class<?> componentClass = javaInfo.getDescription().getComponentClass();
+								if (ReflectionUtils.getMethodBySignature(
+										componentClass,
+										AstNodeUtils.getMethodSignature(invocation)) != null) {
+									javaInfo.addRelatedNode(invocation);
+								}
+							}
+							// check that it is possible to evaluate this invocation
+							if (!javaInfo.shouldEvaluateInvocation(invocation)) {
+								return;
+							}
+							// OK, now we can evaluate
+							m_impossibleJavaInfo.add(invocation);
+							evaluateMethodInvocation(javaInfo, invocation);
+							return;
+						}
+					}
+				}
+				// check for SuperMethodInvocation
+				if (expression instanceof SuperMethodInvocation) {
+					SuperMethodInvocation invocation = (SuperMethodInvocation) expression;
+					evaluateExpression(invocation);
+				}
+				// check for Assignment
+				if (expression instanceof Assignment) {
+					evaluateAssignment(expression);
+				}
+			}
+		} catch (Throwable e) {
+			ReflectionUtils.propagate(e);
+		}
+	}
+
+	private static boolean isPossibleJavaInfoCreationExpression(ASTNode node) {
+		if (node instanceof CastExpression) {
+			CastExpression castExpression = (CastExpression) node;
+			return isPossibleJavaInfoCreationExpression(castExpression.getExpression());
+		}
+		return node instanceof ClassInstanceCreation
+				|| node instanceof MethodInvocation
+				|| node instanceof SuperMethodInvocation;
+	}
+
+	private void evaluateAssignment(Expression expression) throws Exception {
+		Assignment assignment = (Assignment) expression;
+		Expression leftHandExpression = assignment.getLeftHandSide();
+		Expression rightHandExpression = assignment.getRightHandSide();
+		// check for: someName = javaInfoExpression
+		if (getJavaInfoRepresentedBy(rightHandExpression) != null) {
+			evaluateExpression(rightHandExpression);
+		}
+		// check for: javaInfo.fieldName = someExpression
+		{
+			Expression leftQualifier = AstNodeUtils.getFieldAccessQualifier(leftHandExpression);
+			if (leftQualifier != null) {
+				JavaInfo javaInfo = getJavaInfoRepresentedBy(leftQualifier);
+				if (javaInfo != null) {
+					evaluateExpression(leftQualifier);
+					Object javaInfoObject = javaInfo.getObject();
+					Assert.isNotNull(javaInfoObject);
+					// prepare field
+					Field field;
+					{
+						String fieldName = AstNodeUtils.getFieldAccessName(leftHandExpression).getIdentifier();
+						field = ReflectionUtils.getFieldByName(javaInfoObject.getClass(), fieldName);
+					}
+					// set value of field
+					if (field != null) {
+						Object value = evaluateExpression(rightHandExpression);
+						field.set(javaInfoObject, value);
+					}
+				}
+			}
+		}
+	}
+
+	/**
+	 * @return the value of given {@link MethodInvocation} of {@link JavaInfo}.
+	 */
+	public final void evaluateMethodInvocation(JavaInfo javaInfo, MethodInvocation invocation)
+			throws Exception {
+		try {
+			evaluateExpression(invocation);
+		} catch (Error e) {
+			if (AnonymousEvaluationError.is(e)) {
+			} else {
+				throw e;
+			}
+		}
+	}
+
+	/**
+	 * @return the value of given {@link Expression}.
+	 */
+	public final Object evaluateExpression(Expression expression) throws Exception {
+		if (m_evaluatedExpressions.contains(expression)) {
+			return getValue(expression);
+		}
+		m_evaluatedExpressions.add(expression);
+		// evaluate
+		Object result = AstEvaluationEngine.evaluate(m_context, expression);
+		Assert.isTrue(result != AstEvaluationEngine.UNKNOWN);
+		return result;
+	}
+
+	/**
+	 * Evaluates given {@link JavaInfo} using its {@link CreationSupport}.
+	 *
+	 * @return the resulting object.
+	 */
+	public final Object evaluateJavaInfoUsingCreationSupport(JavaInfo javaInfo) throws Exception {
+		// create object
+		Object object = javaInfo.getCreationSupport().create(m_context, m_visitor);
+		Assert.isNotNull(object);
+		// set it as value and return
+		javaInfo.setObject(object);
+		return object;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the root {@link JavaInfo}, possible {@link JavaInfo} for {@link ThisExpression}.
+	 */
+	protected JavaInfo getRootJavaInfo() {
+		throw new NotImplementedException(getClass());
+	}
+
+	/**
+	 * We use this method to send notification, that {@link ASTNode} for "this" {@link JavaInfo} was
+	 * processed.
+	 */
+	protected void thisJavaInfoNodeProcessed(JavaInfo javaInfo, ASTNode node) throws Exception {
+		throw new NotImplementedException(getClass());
+	}
+
+	/**
+	 * @return the {@link JavaInfo} that represents given {@link Expression}.
+	 */
+	protected abstract JavaInfo getJavaInfoRepresentedBy(Expression expression);
+
+	/**
+	 * @return the {@link JavaInfo} that should be used for "this" {@link Expression}.
+	 */
+	private JavaInfo getThisJavaInfo() {
+		JavaInfo rootJavaInfo = getRootJavaInfo();
+		// check that root JavaInfo is "this"
+		if (rootJavaInfo != null) {
+			if (rootJavaInfo.getCreationSupport() instanceof ThisCreationSupport) {
+				return rootJavaInfo;
+			}
+		}
+		// no, some different JavaInfo (or may be not JavaInfo at all)
+		return null;
+	}
+
+	private boolean shouldEvaluateReturnStatement(ReturnStatement returnStatement) throws Exception {
+		// check forced evaluation
+		{
+			MethodDeclaration enclosingMethod = AstNodeUtils.getEnclosingMethod(returnStatement);
+			if (shouldEvaluateReturnValue(enclosingMethod)) {
+				return true;
+			}
+		}
+		// evaluate if JavaInfo
+		Expression expression = returnStatement.getExpression();
+		return getJavaInfoRepresentedBy(expression) != null;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Unknown parameters support
+	//
+	////////////////////////////////////////////////////////////////////////////
+	//private static final String TAG_EVAL_PARAMETER = "@wbp.eval.method.parameter";
+	/**
+	 * Evaluates value of expression specified in JavaDoc comments like this:
+	 *
+	 * @wbp.eval.method.parameter someName someExpression
+	 *
+	 * @param javadoc
+	 *          the {@link Javadoc} that should be checked.
+	 * @param tagName
+	 *          the name of tag, "@wbp.eval.method.parameter" in example above.
+	 * @param expectedName
+	 *          the name of expression, "someName" in example above.
+	 */
+	public static Object evaluateJavadocTagExpression(AstEditor editor,
+			EvaluationContext context,
+			Javadoc javadoc,
+			String tagName,
+			String expectedName) throws Exception {
+		if (javadoc != null) {
+			for (TagElement tag : DomGenerics.tags(javadoc)) {
+				if (tagName.equals(tag.getTagName())) {
+					// extract <name> and <expression text>
+					String name;
+					String expressionText;
+					{
+						String errorMessage =
+								"'" + tagName + " <name> = <expression>' expected but '" + tag + "' found.";
+						Assert.isLegal(tag.fragments().size() == 1, errorMessage);
+						// prepare TextElement parts
+						TextElement textElement = (TextElement) tag.fragments().get(0);
+						String text = textElement.getText().trim();
+						String[] parts = StringUtils.split(text);
+						Assert.isLegal(parts.length >= 2, errorMessage);
+						// assign parts
+						name = parts[0];
+						expressionText = text.substring(name.length()).trim();
+					}
+					// check that we found expected <name>
+					if (name.equals(expectedName)) {
+						Object value = tag.getProperty(KEY_EXPRESSION_VALUE);
+						// evaluate value only one time
+						if (value == null) {
+							Expression expression =
+									editor.getParser().parseExpression(javadoc.getStartPosition(), expressionText);
+							value = AstEvaluationEngine.evaluate(context, expression);
+							tag.setProperty(KEY_EXPRESSION_VALUE, value);
+						}
+						// return value
+						return value;
+					}
+				}
+			}
+		}
+		// no value found
+		return AstEvaluationEngine.UNKNOWN;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/JavaInfoRootProcessor.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/JavaInfoRootProcessor.java
index d2298f028..6bc80b8ba 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/JavaInfoRootProcessor.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/JavaInfoRootProcessor.java
@@ -36,110 +36,110 @@
  * @coverage code.model
  */
 public final class JavaInfoRootProcessor implements IRootProcessor {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final IRootProcessor INSTANCE = new JavaInfoRootProcessor();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final IRootProcessor INSTANCE = new JavaInfoRootProcessor();
 
-  private JavaInfoRootProcessor() {
-  }
+	private JavaInfoRootProcessor() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IRootProcessor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void process(JavaInfo root, List<JavaInfo> components) throws Exception {
-    processRoot(root);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IRootProcessor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void process(JavaInfo root, List<JavaInfo> components) throws Exception {
+		processRoot(root);
+	}
 
-  private static void processRoot(final JavaInfo rootJavaInfo) throws Exception {
-    rootJavaInfo.addBroadcastListener(new ObjectEventListener() {
-      @Override
-      public void dispose() throws Exception {
-        JavaInfoUtils.getState(rootJavaInfo).dispose();
-      }
-    });
-    rootJavaInfo.addBroadcastListener(new EditorActivatedListener() {
-      @Override
-      public void invoke(EditorActivatedRequest request) throws Exception {
-        if (JavaInfoUtils.isDependencyChanged(rootJavaInfo)) {
-          request.requestReparse();
-        }
-      }
-    });
-    // visibility in tree/GEF
-    rootJavaInfo.addBroadcastListener(new ObjectInfoChildTree() {
-      @Override
-      public void invoke(ObjectInfo object, boolean[] visible) throws Exception {
-        if (object instanceof JavaInfo) {
-          JavaInfo javaInfo = (JavaInfo) object;
-          String visibilityTreeString = JavaInfoUtils.getParameter(javaInfo, "visible.inTree");
-          if (visibilityTreeString != null) {
-            visible[0] = Boolean.parseBoolean(visibilityTreeString);
-          } else {
-            String visibilityString = JavaInfoUtils.getParameter(javaInfo, "visible");
-            if (visibilityString != null) {
-              visible[0] = Boolean.parseBoolean(visibilityString);
-            }
-          }
-        }
-      }
-    });
-    rootJavaInfo.addBroadcastListener(new ObjectInfoChildGraphical() {
-      @Override
-      public void invoke(ObjectInfo object, boolean[] visible) throws Exception {
-        if (object instanceof JavaInfo) {
-          JavaInfo javaInfo = (JavaInfo) object;
-          String visibilityGraphString =
-              JavaInfoUtils.getParameter(javaInfo, "visible.inGraphical");
-          if (visibilityGraphString != null) {
-            visible[0] = Boolean.parseBoolean(visibilityGraphString);
-          } else {
-            String visibilityString = JavaInfoUtils.getParameter(javaInfo, "visible");
-            if (visibilityString != null) {
-              visible[0] = Boolean.parseBoolean(visibilityString);
-            }
-          }
-        }
-      }
-    });
-    // text decoration
-    rootJavaInfo.addBroadcastListener(new ObjectInfoPresentationDecorateText() {
-      @Override
-      public void invoke(ObjectInfo object, String[] text) throws Exception {
-        if (object instanceof JavaInfo) {
-          JavaInfo javaInfo = (JavaInfo) object;
-          IPreferenceStore preferences = javaInfo.getDescription().getToolkit().getPreferences();
-          if (preferences.getBoolean(IPreferenceConstants.P_GENERAL_TEXT_SUFFIX)) {
-            broadcast_presentation_decorateText(javaInfo, text);
-          }
-        }
-      }
-    });
-  }
+	private static void processRoot(final JavaInfo rootJavaInfo) throws Exception {
+		rootJavaInfo.addBroadcastListener(new ObjectEventListener() {
+			@Override
+			public void dispose() throws Exception {
+				JavaInfoUtils.getState(rootJavaInfo).dispose();
+			}
+		});
+		rootJavaInfo.addBroadcastListener(new EditorActivatedListener() {
+			@Override
+			public void invoke(EditorActivatedRequest request) throws Exception {
+				if (JavaInfoUtils.isDependencyChanged(rootJavaInfo)) {
+					request.requestReparse();
+				}
+			}
+		});
+		// visibility in tree/GEF
+		rootJavaInfo.addBroadcastListener(new ObjectInfoChildTree() {
+			@Override
+			public void invoke(ObjectInfo object, boolean[] visible) throws Exception {
+				if (object instanceof JavaInfo) {
+					JavaInfo javaInfo = (JavaInfo) object;
+					String visibilityTreeString = JavaInfoUtils.getParameter(javaInfo, "visible.inTree");
+					if (visibilityTreeString != null) {
+						visible[0] = Boolean.parseBoolean(visibilityTreeString);
+					} else {
+						String visibilityString = JavaInfoUtils.getParameter(javaInfo, "visible");
+						if (visibilityString != null) {
+							visible[0] = Boolean.parseBoolean(visibilityString);
+						}
+					}
+				}
+			}
+		});
+		rootJavaInfo.addBroadcastListener(new ObjectInfoChildGraphical() {
+			@Override
+			public void invoke(ObjectInfo object, boolean[] visible) throws Exception {
+				if (object instanceof JavaInfo) {
+					JavaInfo javaInfo = (JavaInfo) object;
+					String visibilityGraphString =
+							JavaInfoUtils.getParameter(javaInfo, "visible.inGraphical");
+					if (visibilityGraphString != null) {
+						visible[0] = Boolean.parseBoolean(visibilityGraphString);
+					} else {
+						String visibilityString = JavaInfoUtils.getParameter(javaInfo, "visible");
+						if (visibilityString != null) {
+							visible[0] = Boolean.parseBoolean(visibilityString);
+						}
+					}
+				}
+			}
+		});
+		// text decoration
+		rootJavaInfo.addBroadcastListener(new ObjectInfoPresentationDecorateText() {
+			@Override
+			public void invoke(ObjectInfo object, String[] text) throws Exception {
+				if (object instanceof JavaInfo) {
+					JavaInfo javaInfo = (JavaInfo) object;
+					IPreferenceStore preferences = javaInfo.getDescription().getToolkit().getPreferences();
+					if (preferences.getBoolean(IPreferenceConstants.P_GENERAL_TEXT_SUFFIX)) {
+						broadcast_presentation_decorateText(javaInfo, text);
+					}
+				}
+			}
+		});
+	}
 
-  /**
-   * Adds "text" property prefix to the given presentation text of this {@link JavaInfo}.
-   */
-  private static void broadcast_presentation_decorateText(JavaInfo javaInfo, String[] text)
-      throws Exception {
-    for (Property property : javaInfo.getProperties()) {
-      if (property instanceof GenericPropertyImpl) {
-        GenericPropertyImpl genericProperty = (GenericPropertyImpl) property;
-        GenericPropertyDescription propertyDescription = genericProperty.getDescription();
-        if (propertyDescription != null
-            && propertyDescription.hasTrueTag("isText")
-            && genericProperty.getJavaInfo() == javaInfo
-            && genericProperty.isModified()) {
-          String suffix = (String) genericProperty.getValue();
-          text[0] = text[0] + " - \"" + suffix + "\"";
-          break;
-        }
-      }
-    }
-  }
+	/**
+	 * Adds "text" property prefix to the given presentation text of this {@link JavaInfo}.
+	 */
+	private static void broadcast_presentation_decorateText(JavaInfo javaInfo, String[] text)
+			throws Exception {
+		for (Property property : javaInfo.getProperties()) {
+			if (property instanceof GenericPropertyImpl) {
+				GenericPropertyImpl genericProperty = (GenericPropertyImpl) property;
+				GenericPropertyDescription propertyDescription = genericProperty.getDescription();
+				if (propertyDescription != null
+						&& propertyDescription.hasTrueTag("isText")
+						&& genericProperty.getJavaInfo() == javaInfo
+						&& genericProperty.isModified()) {
+					String suffix = (String) genericProperty.getValue();
+					text[0] = text[0] + " - \"" + suffix + "\"";
+					break;
+				}
+			}
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/JavaInfoUtils.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/JavaInfoUtils.java
index 7126fe5c1..cb56456a4 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/JavaInfoUtils.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/JavaInfoUtils.java
@@ -114,2077 +114,2077 @@
  * @coverage core.model
  */
 public class JavaInfoUtils {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private JavaInfoUtils() {
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link TypeDeclaration} that contains given {@link JavaInfo}.
-   */
-  public static TypeDeclaration getTypeDeclaration(JavaInfo javaInfo) {
-    return AstNodeUtils.getEnclosingType(javaInfo.getCreationSupport().getNode());
-  }
-
-  /**
-   * @return the {@link MethodDeclaration} that contains given {@link JavaInfo}.
-   */
-  public static MethodDeclaration getMethodDeclaration(JavaInfo javaInfo) {
-    return AstNodeUtils.getEnclosingMethod(javaInfo.getCreationSupport().getNode());
-  }
-
-  /**
-   * @return <code>true</code> if given {@link IField} is declared in top-level
-   *         {@link TypeDeclaration} of {@link JavaInfo}, directly or by one of its implemented
-   *         interfaces.
-   */
-  public static boolean isLocalField(JavaInfo javaInfo, IField field) throws Exception {
-    // prepare binding of top-level type
-    ITypeBinding typeBinding;
-    {
-      TypeDeclaration typeDeclaration = getTypeDeclaration(javaInfo);
-      typeBinding = AstNodeUtils.getTypeBinding(typeDeclaration);
-    }
-    // do check
-    String declaringTypeName = field.getDeclaringType().getFullyQualifiedName();
-    return AstNodeUtils.isSuccessorOf(typeBinding, declaringTypeName);
-  }
-
-  /**
-   * @return <code>true</code> if given {@link JavaInfo} created implicitly, with its host.
-   */
-  public static boolean isImplicitlyCreated(JavaInfo javaInfo) {
-    return javaInfo.getCreationSupport() instanceof IImplicitCreationSupport;
-  }
-
-  /**
-   * Schedules save of {@link ICompilationUnit} of given {@link JavaInfo}.<br>
-   * We should save {@link ICompilationUnit} after edit operation finished.
-   */
-  public static void scheduleSave(final JavaInfo info) {
-    DesignerPlugin.getStandardDisplay().asyncExec(new Runnable() {
-      @Override
-      public void run() {
-        ExecutionUtils.runLog(new RunnableEx() {
-          @Override
-          public void run() throws Exception {
-            info.getEditor().getModelUnit().getBuffer().save(null, false);
-          }
-        });
-      }
-    });
-  }
-
-  /**
-   * Schedules opening given {@link ASTNode} in source view.
-   */
-  public static void scheduleOpenNode(final JavaInfo javaInfo, final ASTNode node) {
-    // Do in async because at this time changes may be not committed from ASTEditor to compilation unit.
-    // This happens because this method is invoked in internal start/endEdit cycle.
-    Display.getDefault().asyncExec(new Runnable() {
-      @Override
-      public void run() {
-        IDesignPageSite site = IDesignPageSite.Helper.getSite(javaInfo);
-        if (site != null) {
-          site.openSourcePosition(node.getStartPosition());
-        }
-      }
-    });
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Assertions
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static void assertIsNotDeleted(JavaInfo javaInfo) {
-    Assert.isTrue(!javaInfo.isDeleted(), "Component is already deleted: %s", javaInfo);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Permissions
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if given {@link JavaInfo} can be moved inside of its parent in some
-   *         way. Usually we just ask {@link CreationSupport#canReorder()}, however for example for
-   *         absolute layout we can not reorder exposed components, but we can move them (change
-   *         bounds).
-   */
-  public static boolean canMove(final JavaInfo javaInfo) {
-    // check, may be we can obtain external permission
-    {
-      final boolean[] forceMoveEnable = new boolean[1];
-      final boolean[] forceMoveDisable = new boolean[1];
-      ExecutionUtils.runLog(new RunnableEx() {
-        @Override
-        public void run() throws Exception {
-          javaInfo.getBroadcastJava().canMove(javaInfo, forceMoveEnable, forceMoveDisable);
-        }
-      });
-      if (forceMoveEnable[0]) {
-        return true;
-      }
-      if (forceMoveDisable[0]) {
-        return false;
-      }
-    }
-    // ask CreationSupport
-    return javaInfo.getCreationSupport().canReorder();
-  }
-
-  /**
-   * @return <code>true</code> if given {@link JavaInfo} can be moved into different parent. Here we
-   *         just ask {@link CreationSupport#canReparent()} and have this method only for symmetry
-   *         with {@link #canMove(JavaInfo)}.
-   */
-  public static boolean canReparent(JavaInfo javaInfo) {
-    return javaInfo.getCreationSupport().canReparent() && javaInfo.getAssociation().canDelete();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parameters
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final String KEY_PARAMETER_PREFIX = "Instance-level parameter: ";
-
-  /**
-   * Sets the {@link JavaInfo} instance level parameter value, can be accesses later using
-   * {@link #getParameter(JavaInfo, String)}.
-   */
-  public static void setParameter(JavaInfo javaInfo, String name, String value) {
-    String key = KEY_PARAMETER_PREFIX + name;
-    javaInfo.putArbitraryValue(key, value);
-  }
-
-  /**
-   * Returns the value of {@link JavaInfo} parameter.<br>
-   * Usually returns just {@link ComponentDescription#getParameter(String)}, but factory components
-   * we should also check this parameters in {@link FactoryMethodDescription}.
-   *
-   * @return the value of {@link JavaInfo} parameter.
-   */
-  public static String getParameter(JavaInfo javaInfo, String name) {
-    // try to key from JavaInfo instance
-    {
-      String key = KEY_PARAMETER_PREFIX + name;
-      String value = (String) javaInfo.getArbitraryValue(key);
-      if (value != null) {
-        return value;
-      }
-    }
-    // try to get from FactoryMethodDescription
-    if (javaInfo.getCreationSupport() instanceof AbstractExplicitFactoryCreationSupport) {
-      AbstractExplicitFactoryCreationSupport factoryCreationSupport =
-          (AbstractExplicitFactoryCreationSupport) javaInfo.getCreationSupport();
-      FactoryMethodDescription factoryMethodDescription = factoryCreationSupport.getDescription();
-      String value = factoryMethodDescription.getParameter(name);
-      if (value != null) {
-        return value;
-      }
-    }
-    // get from ComponentDescription
-    return javaInfo.getDescription().getParameter(name);
-  }
-
-  /**
-   * @return mapped {@link JavaInfo} parameters.
-   */
-  public static Map<String, String> getParameters(JavaInfo javaInfo) {
-    Map<String, String> parameters = Maps.newHashMap();
-    parameters.putAll(extractArbitraryParameters(javaInfo));
-    parameters.putAll(javaInfo.getDescription().getParameters());
-    return parameters;
-  }
-
-  /**
-   * @return the {@link Map} of parameters set using {@link #setParameter(JavaInfo, String, String)}
-   *         .
-   */
-  private static Map<String, String> extractArbitraryParameters(JavaInfo javaInfo) {
-    Map<String, String> parameters = Maps.newHashMap();
-    for (Entry<Object, Object> arbitrary : javaInfo.getArbitraries().entrySet()) {
-      Object key = arbitrary.getKey();
-      Object value = arbitrary.getValue();
-      if (key instanceof String && value instanceof String) {
-        String stringKey = (String) key;
-        if (stringKey.startsWith(KEY_PARAMETER_PREFIX)) {
-          parameters.put(stringKey.substring(KEY_PARAMETER_PREFIX.length()), (String) value);
-        }
-      }
-    }
-    return parameters;
-  }
-
-  /**
-   * Checks if {@link JavaInfo} has parameter with value <code>"true"</code>.
-   */
-  public static boolean hasTrueParameter(JavaInfo javaInfo, String name) {
-    String parameter = getParameter(javaInfo, name);
-    return "true".equals(parameter);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Script
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * If given {@link JavaInfo} has parameter with script, execute it with "model" and "object"
-   * variables.
-   */
-  public static Object executeScriptParameter(JavaInfo javaInfo, String scriptName)
-      throws Exception {
-    String script = getParameter(javaInfo, scriptName);
-    if (script != null) {
-      return executeScript(javaInfo, script);
-    }
-    return null;
-  }
-
-  /**
-   * Execute script with "model" and "object" variables.
-   */
-  public static Object executeScript(JavaInfo javaInfo, String script) throws Exception {
-    ClassLoader classLoader = JavaInfoUtils.getClassLoader(javaInfo);
-    Map<String, Object> variables = Maps.newHashMap();
-    variables.put("model", javaInfo);
-    variables.put("object", javaInfo.getObject());
-    return ScriptUtils.evaluate(classLoader, script, variables);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Model creation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return new {@link JavaInfo} for given component {@link Class} name and {@link CreationSupport}
-   *         .
-   */
-  public static JavaInfo createJavaInfo(AstEditor editor,
-      String componentClassName,
-      CreationSupport creationSupport) throws Exception {
-    Class<?> componentClass =
-        EditorState.get(editor).getEditorLoader().loadClass(componentClassName);
-    return createJavaInfo(editor, componentClass, creationSupport);
-  }
-
-  /**
-   * @return new {@link JavaInfo} for given component {@link Class} and {@link CreationSupport}.
-   */
-  public static JavaInfo createJavaInfo(AstEditor editor,
-      Class<?> componentClass,
-      CreationSupport creationSupport) throws Exception {
-    // prepare description
-    ComponentDescription componentDescription =
-        ComponentDescriptionHelper.getDescription(editor, componentClass);
-    // create model
-    return createJavaInfo(editor, componentDescription, creationSupport);
-  }
-
-  /**
-   * @return new {@link JavaInfo} for given {@link ComponentDescription} and {@link CreationSupport}
-   *         .
-   */
-  public static JavaInfo createJavaInfo(AstEditor editor,
-      ComponentDescription componentDescription,
-      CreationSupport creationSupport) throws Exception {
-    // prepare constructor of model
-    Constructor<?> modelConstructor;
-    {
-      Class<?> modelClass = componentDescription.getModelClass();
-      modelConstructor = modelClass.getConstructor(
-          new Class[]{AstEditor.class, ComponentDescription.class, CreationSupport.class});
-    }
-    // create model
-    JavaInfo javaInfo = (JavaInfo) modelConstructor.newInstance(
-        new Object[]{editor, componentDescription, creationSupport});
-    ObjectInfoUtils.setNewId(javaInfo);
-    return javaInfo;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exposed children
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds new exposed {@link JavaInfo}'s.
-   */
-  public static void addExposedChildren(JavaInfo host, Class<?>[] exposedTypes) throws Exception {
-    if (hasTrueParameter(host, "noExposedChildren")) {
-      return;
-    }
-    addExposedChildred_Method(host, exposedTypes);
-    addExposedChildred_Field(host, exposedTypes);
-    // reorder added components
-    buildExposedChildrenHierarchy(host);
-  }
-
-  /**
-   * Adds new {@link JavaInfo}'s exposed using {@link PropertyDescriptor}'s.
-   */
-  private static void addExposedChildred_Method(JavaInfo host, Class<?>[] exposedTypes)
-      throws Exception {
-    Object hostObject = host.getObject();
-    Assert.isNotNull(hostObject);
-    // prepare property descriptors
-    boolean includeProtected = shouldExposeProtectedMembers(host);
-    List<PropertyDescriptor> propertyDescriptors = host.getDescription().getPropertyDescriptors();
-    // check all PropertyDescriptor's
-    for (PropertyDescriptor propertyDescriptor : propertyDescriptors) {
-      Method setMethod = ReflectionUtils.getWriteMethod(propertyDescriptor);
-      // prepare "getter"
-      Method getMethod = ReflectionUtils.getReadMethod(propertyDescriptor);
-      if (getMethod == null) {
-        continue;
-      }
-      if (!includeProtected && ReflectionUtils.isProtected(getMethod)) {
-        continue;
-      }
-      // check for return type
-      {
-        Class<?> returnType = getMethod.getReturnType();
-        if (!isExposedType(exposedTypes, returnType)) {
-          continue;
-        }
-      }
-      // check if this method can be used for exposing child
-      if (!isEnabledExposeMethod(host, getMethod)) {
-        continue;
-      }
-      // check that methods returns not "null"
-      Object methodObject = null;
-      {
-        try {
-          methodObject = getMethod.invoke(hostObject);
-          if (methodObject == null) {
-            continue;
-          }
-        } catch (Exception e) {
-          continue;
-        }
-      }
-      // check that component returned by method is bound to parent object
-      if (!isExposeDisconnectedComponent(host, getMethod) && !areParentChild(host, methodObject)) {
-        continue;
-      }
-      // check for infinite recursion
-      if (isExposedRecursive(host, methodObject)) {
-        continue;
-      }
-      // OK, add component
-      addChildExposedByMethod(host, getMethod, setMethod, methodObject);
-    }
-  }
-
-  /**
-   * Adds new {@link JavaInfo} exposed by given {@link Method} as child of given <code>host</code>.
-   */
-  public static JavaInfo addChildExposedByMethod(JavaInfo host, String getMethodName)
-      throws Exception {
-    // prepare "host" object
-    Object hostObject = host.getObject();
-    Assert.isNotNull(hostObject);
-    // prepare "method" object
-    Method getMethod = ReflectionUtils.getMethod(hostObject.getClass(), getMethodName);
-    Object methodObject = getMethod.invoke(hostObject);
-    Assert.isNotNull(methodObject);
-    // add exposed child
-    return addChildExposedByMethod(host, getMethod, null, methodObject);
-  }
-
-  /**
-   * Adds new {@link JavaInfo} exposed by given {@link Method} as child of given <code>host</code>.
-   */
-  private static JavaInfo addChildExposedByMethod(JavaInfo host,
-      Method getMethod,
-      Method setMethod,
-      Object methodObject) throws Exception {
-    // check if already exposed
-    if (isAlreadyExposedMethod(host, getMethod)) {
-      return null;
-    }
-    // prepare elements
-    AstEditor editor = host.getEditor();
-    boolean direct = getParentObject(methodObject) == host.getObject();
-    CreationSupport creationSupport =
-        new ExposedPropertyCreationSupport(host, getMethod, setMethod, direct);
-    // create child JavaInfo
-    JavaInfo methodJavaInfo;
-    if (InstanceFactoryInfo.isFactory(editor, getMethod.getReturnType())) {
-      methodJavaInfo =
-          InstanceFactoryInfo.createFactory(editor, getMethod.getReturnType(), creationSupport);
-    } else {
-      ComponentDescription componentDescription =
-          ComponentDescriptionHelper.getDescription(editor, host.getDescription(), getMethod);
-      methodJavaInfo = createJavaInfo(editor, componentDescription, creationSupport);
-    }
-    // configure JavaInfo
-    methodJavaInfo.setVariableSupport(
-        new ExposedPropertyVariableSupport(methodJavaInfo, host, getMethod));
-    methodJavaInfo.setAssociation(new ImplicitObjectAssociation(host));
-    // add new child
-    addExposedJavaInfo(host, methodJavaInfo);
-    // initialize
-    methodJavaInfo.setObject(methodObject);
-    return methodJavaInfo;
-  }
-
-  /**
-   * @return <code>true</code> if given getter is already used to create exposed {@link JavaInfo},
-   *         so should be ignored. If not used yet, we mark it as used and return <code>false</code>
-   *         .
-   */
-  @SuppressWarnings("unchecked")
-  private static boolean isAlreadyExposedMethod(JavaInfo host, Method getMethod) {
-    String key = "JavaInfoUtils.alreadyExposed.Method";
-    Set<Method> alreadyExposed = (Set<Method>) host.getArbitraryValue(key);
-    if (alreadyExposed == null) {
-      alreadyExposed = Sets.newHashSet();
-      host.putArbitraryValue(key, alreadyExposed);
-    }
-    if (alreadyExposed.contains(getMethod)) {
-      return true;
-    }
-    alreadyExposed.add(getMethod);
-    return false;
-  }
-
-  /**
-   * Adds new {@link JavaInfo}'s exposed using {@link PropertyDescriptor}'s.
-   */
-  private static void addExposedChildred_Field(JavaInfo host, Class<?>[] exposedTypes)
-      throws Exception {
-    Object hostObject = host.getObject();
-    Assert.isNotNull(hostObject);
-    // check all Field's
-    boolean includeProtected = shouldExposeProtectedMembers(host);
-    List<Field> fields = ReflectionUtils.getFields(hostObject.getClass());
-    for (Field field : fields) {
-      // check modifier
-      if (ReflectionUtils.isPrivate(field) || ReflectionUtils.isPackagePrivate(field)) {
-        continue;
-      }
-      if (ReflectionUtils.isProtected(field) && !includeProtected) {
-        continue;
-      }
-      // check for type
-      {
-        Class<?> fieldType = field.getType();
-        if (!isExposedType(exposedTypes, fieldType)) {
-          continue;
-        }
-      }
-      // check if this field can be used for exposing child
-      if (!isEnabledExposeField(host, field)) {
-        continue;
-      }
-      // check that methods returns not "null"
-      Object fieldObject;
-      {
-        fieldObject = field.get(hostObject);
-        if (fieldObject == null) {
-          continue;
-        }
-      }
-      // check that component returned by method is bound to parent object
-      if (!areParentChild(host, fieldObject)) {
-        continue;
-      }
-      // check for infinite recursion
-      if (isExposedRecursive(host, fieldObject)) {
-        continue;
-      }
-      // OK, add component
-      addChildExposedByField(host, field, fieldObject);
-    }
-  }
-
-  /**
-   * Adds new {@link JavaInfo} exposed by given {@link Field} as child of given <code>host</code>.
-   */
-  private static JavaInfo addChildExposedByField(JavaInfo host, Field field, Object fieldObject)
-      throws Exception {
-    // check if already exposed
-    if (isAlreadyExposedField(host, field)) {
-      return null;
-    }
-    // prepare elements
-    AstEditor editor = host.getEditor();
-    boolean direct = getParentObject(fieldObject) == host.getObject();
-    CreationSupport creationSupport = new ExposedFieldCreationSupport(host, field, direct);
-    // create child JavaInfo
-    JavaInfo fieldJavaInfo;
-    ComponentDescription componentDescription =
-        ComponentDescriptionHelper.getDescription(editor, field.getType());
-    fieldJavaInfo = createJavaInfo(editor, componentDescription, creationSupport);
-    // configure JavaInfo
-    fieldJavaInfo.setVariableSupport(new ExposedFieldVariableSupport(fieldJavaInfo, host, field));
-    fieldJavaInfo.setAssociation(new ImplicitObjectAssociation(host));
-    // add new child
-    addExposedJavaInfo(host, fieldJavaInfo);
-    // initialize
-    fieldJavaInfo.setObject(fieldObject);
-    return fieldJavaInfo;
-  }
-
-  /**
-   * @return <code>true</code> if given {@link Field} is already used to create exposed
-   *         {@link JavaInfo}, so should be ignored. If not used yet, we mark it as used and return
-   *         <code>false</code>.
-   */
-  @SuppressWarnings("unchecked")
-  private static boolean isAlreadyExposedField(JavaInfo host, Field field) {
-    String key = "JavaInfoUtils.alreadyExposed.Field";
-    Set<Field> alreadyExposed = (Set<Field>) host.getArbitraryValue(key);
-    if (alreadyExposed == null) {
-      alreadyExposed = Sets.newHashSet();
-      host.putArbitraryValue(key, alreadyExposed);
-    }
-    if (alreadyExposed.contains(field)) {
-      return true;
-    }
-    alreadyExposed.add(field);
-    return false;
-  }
-
-  /**
-   * Adds exposed {@link JavaInfo} to its host.
-   */
-  private static void addExposedJavaInfo(JavaInfo host, JavaInfo exposed) throws Exception {
-    for (HierarchyProvider provider : getHierarchyProviders()) {
-      provider.add(host, exposed);
-      if (exposed.getParent() != null) {
-        break;
-      }
-    }
-    if (exposed.getParent() == null) {
-      host.addChild(exposed);
-    }
-  }
-
-  /**
-   * @return <code>true</code> if given {@link Method} can expose child.
-   */
-  private static boolean isEnabledExposeMethod(JavaInfo host, Method getMethod) {
-    // check filters
-    for (ExposingRule rule : host.getDescription().getExposingRules()) {
-      Boolean filter = rule.filter(getMethod);
-      if (filter != null) {
-        if (filter.booleanValue()) {
-          return true;
-        } else {
-          return false;
-        }
-      }
-    }
-    // if method of "this" JavaInfo overrides this method, ignore it to avoid binary execution flow
-    if (host.getCreationSupport() instanceof ThisCreationSupport) {
-      TypeDeclaration typeDeclaration = getTypeDeclaration(host);
-      String signature = ReflectionUtils.getMethodSignature(getMethod);
-      if (AstNodeUtils.getMethodBySignature(typeDeclaration, signature) != null) {
-        return false;
-      }
-    }
-    // if no rule that forbids this method, then allow exposing
-    return true;
-  }
-
-  /**
-   * @return <code>true</code> if given {@link Field} can expose child.
-   */
-  private static boolean isEnabledExposeField(JavaInfo host, Field field) {
-    // check filters
-    for (ExposingRule rule : host.getDescription().getExposingRules()) {
-      Boolean filter = rule.filter(field);
-      if (filter != null) {
-        if (filter.booleanValue()) {
-          return true;
-        } else {
-          return false;
-        }
-      }
-    }
-    // if no rule that forbids this field, then allow exposing
-    return true;
-  }
-
-  /**
-   * @return <code>true</code> if current form can see protected members of "host".
-   */
-  private static boolean shouldExposeProtectedMembers(JavaInfo host) {
-    // if subclass
-    if (host.getCreationSupport() instanceof ThisCreationSupport) {
-      return true;
-    }
-    // if same package
-    {
-      String unitPackageName = AstNodeUtils.getPackageName(host.getEditor().getAstUnit());
-      String hostPackageName =
-          CodeUtils.getPackage(host.getDescription().getComponentClass().getName());
-      if (unitPackageName.equals(hostPackageName)) {
-        return true;
-      }
-    }
-    // no
-    return false;
-  }
-
-  /**
-   * @return <code>true</code> if given {@link Class} is assignable to one of the given exposed
-   *         types.
-   */
-  private static boolean isExposedType(Class<?>[] exposedTypes, Class<?> candidate) {
-    for (Class<?> exposedType : exposedTypes) {
-      if (exposedType.isAssignableFrom(candidate)) {
-        return true;
-      }
-    }
-    return false;
-  }
-
-  /**
-   * @return <code>true</code> if given {@link Method} should expose component even if this
-   *         component is not connected to the host object.
-   */
-  private static boolean isExposeDisconnectedComponent(JavaInfo host, Method getMethod)
-      throws Exception {
-    String signature = ReflectionUtils.getMethodSignature(getMethod);
-    MethodDescription methodDescription = host.getDescription().getMethod(signature);
-    return methodDescription != null && methodDescription.hasTrueTag("exposeDisconnectedComponent");
-  }
-
-  /**
-   * @return <code>true</code> if given {@link Object} will cause infinite recursive exposing.
-   */
-  private static boolean isExposedRecursive(JavaInfo host, Object methodObject) {
-    return host.getObject() == methodObject;
-  }
-
-  /**
-   * @return <code>true</code> if given {@link JavaInfo} is not direct child of its parent, i.e. it
-   *         is child of some inner (not exposed) container.
-   */
-  public static boolean isIndirectlyExposed(JavaInfo javaInfo) {
-    CreationSupport creationSupport = javaInfo.getCreationSupport();
-    if (creationSupport instanceof IExposedCreationSupport) {
-      return !((IExposedCreationSupport) creationSupport).isDirect();
-    }
-    if (creationSupport instanceof IWrapperControlCreationSupport) {
-      JavaInfo wrapper = ((IWrapperControlCreationSupport) creationSupport).getWrapperInfo();
-      return isIndirectlyExposed(wrapper);
-    }
-    return false;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Sorting: exposed
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Interface for retrieving parent/child information using widget instances of specific toolkit.
-   * Used to build hierarchy of exposed children.
-   *
-   * @author scheglov_ke
-   * @author mitin_aa
-   */
-  public static class HierarchyProvider {
-    /**
-     * @return all aliases of given component object (including given object), may be
-     *         <code>null</code>, if no aliases.
-     */
-    public Object[] getAliases(Object object) throws Exception {
-      return null;
-    }
-
-    /**
-     * @return the parent object for given object.
-     */
-    public Object getParentObject(Object object) throws Exception {
-      return null;
-    }
-
-    /**
-     * @return the children of given toolkit object.
-     *
-     * @param object
-     *          the object to get children from
-     */
-    public Object[] getChildrenObjects(Object object) throws Exception {
-      return ArrayUtils.EMPTY_OBJECT_ARRAY;
-    }
-
-    /**
-     * Can associate exposed {@link JavaInfo} with its host.
-     * <p>
-     * For example in RCP we need to create intermediate Control for exposed Viewer.
-     */
-    public void add(JavaInfo host, JavaInfo exposed) throws Exception {
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Build exposed children hierarchy
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * For custom component it is possible that exposed component is a child of other exposed
-   * component, but from custom component point of view this looks as two independent components.
-   * This method restores such logical hierarchy.
-   */
-  private static void buildExposedChildrenHierarchy(JavaInfo host) throws Exception {
-    // prepare map (object -> child)
-    final Map<Object, JavaInfo> objectToChild = Maps.newHashMap();
-    for (JavaInfo child : host.getChildrenJava()) {
-      objectToChild.put(child.getObject(), child);
-    }
-    // prepare sorted list of children, so we will add them to the logical parents in correct order
-    final List<JavaInfo> sortedChildren;
-    {
-      sortedChildren = Lists.newArrayList();
-      fillChildren(sortedChildren, host.getObject(), objectToChild);
-    }
-    // sort children in host JavaInfo (to reorder children that have host as logical parent)
-    // only exposed children should be sorted
-    Collections.sort(host.getChildren(), new Comparator<ObjectInfo>() {
-      @Override
-      public int compare(ObjectInfo o1, ObjectInfo o2) {
-        // ignore not exposed
-        {
-          boolean exposed_1 = isExposed(o1);
-          boolean exposed_2 = isExposed(o2);
-          if (!exposed_1 || !exposed_2) {
-            return 0;
-          }
-        }
-        // two exposed
-        return sortedChildren.indexOf(o1) - sortedChildren.indexOf(o2);
-      }
-
-      private boolean isExposed(ObjectInfo o) {
-        if (o instanceof JavaInfo) {
-          JavaInfo javaInfo = (JavaInfo) o;
-          return javaInfo.getCreationSupport() instanceof IExposedCreationSupport;
-        }
-        return false;
-      }
-    });
-    // find logical parent for each exposed child
-    for (JavaInfo child : sortedChildren) {
-      if (child.getCreationSupport() instanceof IExposedCreationSupport) {
-        // go up along the hierarchy
-        Object parentObject = getParentObject(child.getObject());
-        for (; parentObject != null; parentObject = getParentObject(parentObject)) {
-          JavaInfo parent = objectToChild.get(parentObject);
-          if (parent != null) {
-            // move child to the logical parent
-            host.removeChild(child);
-            parent.addChild(child);
-            // OK, we found logical parent
-            break;
-          }
-        }
-      }
-    }
-  }
-
-  /**
-   * @return the parent object of given object according to toolkit which object belongs to
-   *
-   * @param childObject
-   *          the object to get parent for
-   */
-  private static Object getParentObject(Object childObject) throws Exception {
-    for (HierarchyProvider provider : getHierarchyProviders()) {
-      Object parentObject = provider.getParentObject(childObject);
-      if (parentObject != null) {
-        return parentObject;
-      }
-    }
-    return null;
-  }
-
-  /**
-   * @return <code>true</code> if given objects are parent/child.
-   */
-  private static boolean areParentChild(JavaInfo host, Object child) throws Exception {
-    Object[] requiredParents = getComponentObjects(host);
-    for (Object requiredParent : requiredParents) {
-      // check by parent
-      if (areParentChild(requiredParent, child)) {
-        return true;
-      }
-      // check in children
-      for (HierarchyProvider provider : getHierarchyProviders()) {
-        Object[] children = provider.getChildrenObjects(requiredParent);
-        if (ArrayUtils.contains(children, child)) {
-          return true;
-        }
-      }
-    }
-    return false;
-  }
-
-  /**
-   * @return <code>true</code> if given objects are parent/child.
-   */
-  private static boolean areParentChild(Object requiredParent, Object child) throws Exception {
-    for (Object parent = child; parent != null; parent = getParentObject(parent)) {
-      if (parent == requiredParent) {
-        return true;
-      }
-    }
-    return false;
-  }
-
-  /**
-   * Traverse hierarchy starting from given objects and fill {@link List} of {@link JavaInfo} models
-   * in top-down order.
-   *
-   * @param children
-   *          the {@link List} to add ordered {@link JavaInfo} models
-   * @param object
-   *          the current object to fill models from
-   * @param objectToChild
-   *          the {@link Map} to convert objects into models
-   */
-  private static void fillChildren(List<JavaInfo> children,
-      Object object,
-      Map<Object, JavaInfo> objectToChild) throws Exception {
-    // add model for current object
-    {
-      JavaInfo child = objectToChild.get(object);
-      if (child != null) {
-        children.add(child);
-      }
-    }
-    // prepare children objects
-    List<Object> childrenObjects = Lists.newArrayList();
-    for (HierarchyProvider provider : getHierarchyProviders()) {
-      Collections.addAll(childrenObjects, provider.getChildrenObjects(object));
-    }
-    // process children objects
-    for (Object childOfChild : childrenObjects) {
-      fillChildren(children, childOfChild, objectToChild);
-    }
-  }
-
-  /**
-   * @return the instances of {@link HierarchyProvider}.
-   */
-  private static List<HierarchyProvider> getHierarchyProviders() {
-    return ExternalFactoriesHelper.getElementsInstances(
-        HierarchyProvider.class,
-        "org.eclipse.wb.core.componentsHierarchyProviders",
-        "provider");
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Binary hierarchy binding
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Binds any not bound yet components to the given root {@link JavaInfo} or any of its children.
-   */
-  public static void bindBinaryComponents(List<JavaInfo> components) throws Exception {
-    List<JavaInfo> reverseComponents = ImmutableList.copyOf(components).reverse();
-    // prepare map (object -> JavaInfo)
-    final Map<Object, JavaInfo> objectToModel;
-    {
-      objectToModel = Maps.newHashMap();
-      for (JavaInfo component : components) {
-        component.accept(new ObjectInfoVisitor() {
-          @Override
-          public void endVisit(ObjectInfo objectInfo) throws Exception {
-            if (objectInfo instanceof JavaInfo) {
-              JavaInfo javaInfo = (JavaInfo) objectInfo;
-              for (Object componentObject : getComponentObjects(javaInfo)) {
-                objectToModel.put(componentObject, javaInfo);
-              }
-            }
-          }
-        });
-      }
-    }
-    // prepare toolkit objects for ALL hierarchies
-    List<Object> objects;
-    {
-      objects = Lists.newArrayList();
-      for (JavaInfo component : components) {
-        if (component.getParent() == null) {
-          for (Object componentObject : getComponentObjects(component)) {
-            Assert.isNotNull(componentObject, "No object for component: %s", component);
-            fillToolkitObjects(objects, componentObject);
-          }
-        }
-      }
-    }
-    // bind not bound components
-    for (JavaInfo component : components) {
-      if (component.getParent() == null) {
-        bindBinaryComponent_toParent(objectToModel, objects, component);
-      }
-    }
-    // check still not bound component, it may be alias for some other component
-    for (JavaInfo component : reverseComponents) {
-      if (component.getParent() == null) {
-        bindBinaryComponent_asAlias(components, component);
-      }
-    }
-    // check still not bound component, flow to depth
-    for (JavaInfo component : reverseComponents) {
-      if (component.getParent() == null
-          && component.getDescription().hasTrueParameter("bindBinary.toDepth")) {
-        bindBinaryComponent_toDepth(objectToModel, component);
-      }
-    }
-  }
-
-  /**
-   * Binds single binary component to parent.
-   */
-  private static void bindBinaryComponent_toParent(Map<Object, JavaInfo> objectToModel,
-      List<Object> objects,
-      JavaInfo component) throws Exception {
-    for (Object object : getComponentObjects(component)) {
-      int objectIndex = objects.indexOf(object);
-      // go up along the hierarchy
-      Object parentObject = getParentObject(object);
-      for (; parentObject != null; parentObject = getParentObject(parentObject)) {
-        JavaInfo parent = objectToModel.get(parentObject);
-        if (parent != null) {
-          boolean added = false;
-          // try to add before some existing "child"
-          nextChild : for (JavaInfo child : parent.getChildrenJava()) {
-            for (Object childObject : getComponentObjects(child)) {
-              int childIndex = objects.indexOf(childObject);
-              if (objectIndex < childIndex) {
-                parent.addChild(component, child);
-                added = true;
-                break nextChild;
-              }
-            }
-          }
-          // if not added yet, add as the last "child"
-          if (!added) {
-            parent.addChild(component);
-          }
-          // set association
-          component.setAssociation(new UnknownAssociation());
-          // OK, we found logical parent
-          return;
-        }
-      }
-    }
-  }
-
-  /**
-   * Binds single binary component to its alias (but not to itself).
-   */
-  private static void bindBinaryComponent_asAlias(List<JavaInfo> components, JavaInfo component)
-      throws Exception {
-    for (Object object : getComponentObjects(component)) {
-      for (JavaInfo otherComponent : components) {
-        for (Object otherObject : getComponentObjects(otherComponent)) {
-          boolean otherIsSameOrChild =
-              otherComponent == component || component.isParentOf(otherComponent);
-          if (otherObject == object && !otherIsSameOrChild) {
-            List<AbstractComponentInfo> children =
-                otherComponent.getChildren(AbstractComponentInfo.class);
-            JavaInfo nextChild = !children.isEmpty() ? children.get(0) : null;
-            otherComponent.addChild(component, nextChild);
-            component.setAssociation(new UnknownAssociation());
-            return;
-          }
-        }
-      }
-    }
-  }
-
-  /**
-   * @return {@link Object}'s that represent given component. Usually this is just single object,
-   *         but in GWT components has two presentations: <code>UIObject</code> and its
-   *         <code>Element</code>.
-   */
-  private static Object[] getComponentObjects(JavaInfo component) throws Exception {
-    Object object = getComponentObject0(component);
-    if (object == null) {
-      return ArrayUtils.EMPTY_OBJECT_ARRAY;
-    }
-    for (HierarchyProvider provider : getHierarchyProviders()) {
-      Object[] objects = provider.getAliases(object);
-      if (objects != null) {
-        return objects;
-      }
-    }
-    return new Object[]{object};
-  }
-
-  /**
-   * @return the {@link AbstractComponentInfo#getComponentObject()} or {@link JavaInfo#getObject()}.
-   */
-  private static Object getComponentObject0(JavaInfo component) {
-    return component instanceof AbstractComponentInfo
-        ? ((AbstractComponentInfo) component).getComponentObject()
-        : component.getObject();
-  }
-
-  /**
-   * Traverse hierarchy starting from given objects and fill {@link List} with toolkit
-   * {@link Object}'s in top-down order.
-   *
-   * @param objects
-   *          the {@link List} to add ordered toolkit objects.
-   * @param object
-   *          the current toolkit object.
-   */
-  private static void fillToolkitObjects(List<Object> objects, Object object) throws Exception {
-    // add current object
-    objects.add(object);
-    // prepare children objects
-    List<Object> children = Lists.newArrayList();
-    for (HierarchyProvider provider : getHierarchyProviders()) {
-      Collections.addAll(children, provider.getChildrenObjects(object));
-    }
-    // process children objects
-    for (Object child : children) {
-      fillToolkitObjects(objects, child);
-    }
-  }
-
-  /**
-   * Binds single binary component to parent using flow from root to depth.
-   */
-  private static void bindBinaryComponent_toDepth(Map<Object, JavaInfo> objectToModel,
-      JavaInfo component) throws Exception {
-    Object[] objects = getComponentObjects(component);
-    for (Object object : objects) {
-      bindBinaryComponent_toDepth(objectToModel, component, object);
-    }
-  }
-
-  private static void bindBinaryComponent_toDepth(Map<Object, JavaInfo> objectToModel,
-      JavaInfo parentInfo,
-      Object object) throws Exception {
-    for (HierarchyProvider provider : getHierarchyProviders()) {
-      Object[] children = provider.getChildrenObjects(object);
-      for (Object child : children) {
-        JavaInfo childInfo = objectToModel.get(child);
-        if (childInfo != null) {
-          if (childInfo.getParent() == null) {
-            parentInfo.addChild(childInfo);
-            childInfo.setAssociation(new UnknownAssociation());
-          }
-          bindBinaryComponent_toDepth(objectToModel, childInfo, child);
-        } else {
-          bindBinaryComponent_toDepth(objectToModel, parentInfo, child);
-        }
-      }
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Adding new JavaInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds new component to container before some existing component.
-   *
-   * @param component
-   *          the component to add.
-   * @param associationObject
-   *          the container {@link AssociationObject}.
-   * @param container
-   *          the parent for adding component.
-   * @param nextComponent
-   *          the component before which new component should be added, may be <code>null</code>, so
-   *          new component will be added as last child of parent.
-   */
-  public static void add(JavaInfo component,
-      AssociationObject associationObject,
-      JavaInfo container,
-      JavaInfo nextComponent) throws Exception {
-    VariableSupport variableSupport = GenerationUtils.getVariableSupport(component);
-    StatementGenerator statementGenerator = GenerationUtils.getStatementGenerator(component);
-    add(
-        component,
-        variableSupport,
-        statementGenerator,
-        associationObject,
-        container,
-        nextComponent);
-  }
-
-  /**
-   * Adds new component to container into given {@link StatementTarget}.
-   *
-   * @param component
-   *          the component to add.
-   * @param associationObject
-   *          the container {@link AssociationObject}.
-   * @param container
-   *          the parent for adding component.
-   * @param target
-   *          the {@link StatementTarget} to add component to.
-   */
-  public static void addTarget(JavaInfo component,
-      AssociationObject associationObject,
-      JavaInfo container,
-      StatementTarget target) throws Exception {
-    addTarget(component, associationObject, container, null, target);
-  }
-
-  public static void addTarget(JavaInfo component,
-      AssociationObject associationObject,
-      JavaInfo container,
-      JavaInfo nextComponent,
-      StatementTarget target) throws Exception {
-    VariableSupport variableSupport = GenerationUtils.getVariableSupport(component);
-    StatementGenerator statementGenerator = GenerationUtils.getStatementGenerator(component);
-    add(
-        component,
-        variableSupport,
-        statementGenerator,
-        associationObject,
-        container,
-        nextComponent,
-        target);
-  }
-
-  /**
-   * Adds new component to container before some existing component.
-   *
-   * @param component
-   *          the component to add.
-   * @param variableSupport
-   *          the {@link VariableSupport} for new component.
-   * @param statementGenerator
-   *          the {@link StatementGenerator} for new component.
-   * @param associationObject
-   *          the container {@link AssociationObject}.
-   * @param container
-   *          the parent for adding component.
-   * @param nextComponent
-   *          the component before which new component should be added, may be <code>null</code>, so
-   *          new component will be added as last child of parent.
-   */
-  public static void add(JavaInfo component,
-      VariableSupport variableSupport,
-      StatementGenerator statementGenerator,
-      AssociationObject associationObject,
-      JavaInfo container,
-      JavaInfo nextComponent) throws Exception {
-    nextComponent = getNextComponent_useComponentOrder(component, container, nextComponent);
-    StatementTarget target = getTarget(container, component, nextComponent);
-    add(
-        component,
-        variableSupport,
-        statementGenerator,
-        associationObject,
-        container,
-        nextComponent,
-        target);
-  }
-
-  /**
-   * @return the actual "nextComponent" that should be used to conform "component"
-   *         {@link ComponentOrder} and {@link ComponentOrder}-s of existing children.
-   */
-  private static JavaInfo getNextComponent_useComponentOrder(JavaInfo component,
-      JavaInfo container,
-      JavaInfo nextComponent) throws Exception {
-    ComponentOrder order = component.getDescription().getOrder();
-    // may be this "component" wants to be first
-    if (nextComponent == null) {
-      nextComponent = order.getNextComponent_whenLast(component, container);
-    }
-    // may be other child wants to be last
-    if (nextComponent == null) {
-      for (JavaInfo parentChild : container.getChildrenJava()) {
-        if (!parentChild.getDescription().getOrder().canBeBefore(component)) {
-          return parentChild;
-        }
-      }
-    }
-    // no changes
-    return nextComponent;
-  }
-
-  /**
-   * Adds new component to container as first child.
-   *
-   * @param component
-   *          the component to add.
-   * @param associationObject
-   *          the container {@link AssociationObject}.
-   * @param container
-   *          the parent for adding component.
-   */
-  public static void addFirst(JavaInfo component,
-      AssociationObject associationObject,
-      JavaInfo container) throws Exception {
-    ComponentOrder order = ComponentOrderFirst.INSTANCE;
-    JavaInfo nextComponent = order.getNextComponent_whenLast(component, container);
-    StatementTarget target = getTarget(container, component, nextComponent);
-    //
-    VariableSupport variableSupport = GenerationUtils.getVariableSupport(component);
-    StatementGenerator statementGenerator = GenerationUtils.getStatementGenerator(component);
-    add(
-        component,
-        variableSupport,
-        statementGenerator,
-        associationObject,
-        container,
-        nextComponent,
-        target);
-  }
-
-  /**
-   * Adds new component to container before some existing component.
-   *
-   * @param component
-   *          the component to add.
-   * @param variableSupport
-   *          the {@link VariableSupport} for new component.
-   * @param statementGenerator
-   *          the {@link StatementGenerator} for new component.
-   * @param associationObject
-   *          the container {@link AssociationObject}.
-   * @param container
-   *          the parent for adding component.
-   * @param nextComponent
-   *          the component before which new component should be added, may be <code>null</code>, so
-   *          new component will be added as last child of parent.
-   * @param target
-   *          the {@link StatementTarget} where {@link Statement}'s (more precise - association) of
-   *          new component should be added.
-   */
-  public static void add(JavaInfo component,
-      VariableSupport variableSupport,
-      StatementGenerator statementGenerator,
-      AssociationObject associationObject,
-      JavaInfo container,
-      JavaInfo nextComponent,
-      StatementTarget target) throws Exception {
-    container.getBroadcastJava().addBefore(container, component);
-    // setup hierarchy
-    container.addChild(component, nextComponent);
-    // set variable support
-    component.setVariableSupport(variableSupport);
-    // add component and association using StatementGenerator
-    Association association = createAssociation(container, component, associationObject);
-    statementGenerator.add(component, target, association);
-    //
-    container.getBroadcastJava().addAfter(container, component);
-  }
-
-  /**
-   * When container does not have special {@link Association}, then only {@link Association} from
-   * component should be used.
-   * <p>
-   * When container has special {@link Association} and it is required, then {@link Association}
-   * from component should be mixed with it in {@link CompoundAssociation}.
-   */
-  private static Association createAssociation(JavaInfo container,
-      JavaInfo component,
-      AssociationObject associationObject) throws Exception {
-    associationObject = getNotNullAssociationObject(associationObject);
-    Association componentAssociation = component.getCreationSupport().getAssociation();
-    Association containerAssociation = associationObject.getAssociation();
-    // try to mix with container association
-    if (componentAssociation != null) {
-      if (associationObject.isRequired()) {
-        return new CompoundAssociation(componentAssociation, containerAssociation);
-      }
-      return componentAssociation;
-    }
-    // use container association
-    Assert.isNotNull(
-        containerAssociation,
-        "No special container association and no component creation association for %s and %s",
-        container,
-        component);
-    return containerAssociation;
-  }
-
-  /**
-   * @return the given not null {@link AssociationObject} or {@link AssociationObject} with
-   *         <code>null</code> as {@link Association}.
-   */
-  private static AssociationObject getNotNullAssociationObject(
-      AssociationObject associationObject) {
-    if (associationObject == null) {
-      associationObject = new AssociationObject(null, false);
-    }
-    return associationObject;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Move
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Internal interface for providing {@link StatementTarget} during move.
-   */
-  public interface IMoveTargetProvider {
-    void add() throws Exception;
-
-    void move() throws Exception;
-
-    StatementTarget getTarget() throws Exception;
-  }
-
-  /**
-   * Moves component to new container.<br>
-   * Move can be inner (i.e. move association) or adding from other container.
-   *
-   * @param component
-   *          the component to move.
-   * @param associationObject
-   *          the container {@link AssociationObject}.
-   * @param newParent
-   *          the parent for adding component, may be old parent (so, we just move inside it), or
-   *          new one, so we reparent component.
-   * @param nextComponent
-   *          the component before which new component should be added, may be <code>null</code>, so
-   *          new component will be added as last child of parent.
-   */
-  public static void move(JavaInfo component,
-      AssociationObject associationObject,
-      JavaInfo newParent,
-      JavaInfo nextComponent) throws Exception {
-    // pre-condition: move component before itself, ignore
-    if (nextComponent == component) {
-      return;
-    }
-    // do move
-    nextComponent = getNextComponent_useComponentOrder(component, newParent, nextComponent);
-    move0(component, associationObject, newParent, nextComponent);
-  }
-
-  private static void move0(final JavaInfo component,
-      final AssociationObject associationObject,
-      final JavaInfo newParent,
-      final JavaInfo nextComponent) throws Exception {
-    IMoveTargetProvider targetProvider = new IMoveTargetProvider() {
-      @Override
-      public void add() throws Exception {
-        newParent.addChild(component, nextComponent);
-      }
-
-      @Override
-      public void move() throws Exception {
-        newParent.moveChild(component, nextComponent);
-      }
-
-      @Override
-      public StatementTarget getTarget() throws Exception {
-        return JavaInfoUtils.getTarget(newParent, component, nextComponent);
-      }
-    };
-    moveProvider(component, associationObject, newParent, targetProvider);
-  }
-
-  /**
-   * Moves component: inside of same container, or to new container.
-   */
-  public static void moveTarget(final JavaInfo component,
-      AssociationObject associationObject,
-      final JavaInfo newParent,
-      final JavaInfo nextComponent,
-      final StatementTarget target) throws Exception {
-    IMoveTargetProvider targetProvider = new IMoveTargetProvider() {
-      @Override
-      public void add() throws Exception {
-        newParent.addChild(component, nextComponent);
-      }
-
-      @Override
-      public void move() throws Exception {
-        newParent.moveChild(component, nextComponent);
-      }
-
-      @Override
-      public StatementTarget getTarget() throws Exception {
-        return target;
-      }
-    };
-    moveProvider(component, associationObject, newParent, targetProvider);
-  }
-
-  /**
-   * Moves component to new container.<br>
-   * Move can be inner (i.e. move association) or adding from other container.
-   *
-   * @param component
-   *          the component to move.
-   * @param associationObject
-   *          the container {@link AssociationObject}.
-   * @param newParent
-   *          the parent for adding component, may be old parent (so, we just move inside it), or
-   *          new one, so we reparent component.
-   * @param targetProvider
-   *          the {@link IMoveTargetProvider} that is used to separate move operation from target
-   *          {@link Statement} and position in {@link JavaInfo} children.
-   */
-  public static void moveProvider(JavaInfo component,
-      AssociationObject associationObject,
-      JavaInfo newParent,
-      IMoveTargetProvider targetProvider) throws Exception {
-    Association oldAssociation = component.getAssociation();
-    associationObject = getNotNullAssociationObject(associationObject);
-    Association newAssociation = associationObject.getAssociation();
-    boolean newAssociationRequired = associationObject.isRequired();
-    //
-    ObjectInfo oldParent = component.getParent();
-    boolean isReparenting = oldParent != newParent;
-    newParent.getBroadcastJava().moveBefore0(component, oldParent, newParent);
-    newParent.getBroadcastJava().moveBefore(component, oldParent, newParent);
-    // remove association
-    // we do this now to avoid possible using association node as target
-    if (isReparenting || newAssociationRequired) {
-      materializeVariable(component);
-      oldAssociation.remove();
-    } else if (oldAssociation instanceof InvocationChildArrayAssociation
-        || oldAssociation instanceof InvocationChildEllipsisAssociation) {
-      // support array
-      VariableSupport variableSupport = component.getVariableSupport();
-      if (variableSupport instanceof EmptyVariableSupport) {
-        ((EmptyVariableSupport) variableSupport).materialize();
-      }
-      oldAssociation.remove();
-      newAssociationRequired = true;
-    }
-    // move component ASTNode's, prepare statements target
-    StatementTarget componentTarget;
-    {
-      componentTarget = targetProvider.getTarget();
-      component.getVariableSupport().ensureInstanceReadyAt(componentTarget);
-    }
-    // move/reparent component
-    if (isReparenting) {
-      oldParent.removeChild(component);
-      targetProvider.add();
-    } else {
-      targetProvider.move();
-    }
-    // now, when all moving are done, prepare association target
-    StatementTarget associationTarget =
-        component.getVariableSupport().getAssociationTarget(componentTarget);
-    // update association
-    if (isReparenting || newAssociationRequired) {
-      if (component.getAssociation() == null) {
-        newAssociation.add(component, associationTarget, null);
-      } else {
-        // check, may be we need to add one more association
-        if (newAssociation != null) {
-          CompoundAssociation compoundAssociation =
-              new CompoundAssociation(component.getAssociation());
-          compoundAssociation.add(newAssociation);
-          component.setAssociation(compoundAssociation);
-        }
-        // ask association about update to reflect new parent
-        component.getAssociation().setParent(newParent);
-      }
-    } else {
-      // for "lazy creation" - move association
-      // for other variables - it will be moved with other component statements
-      if (component.getVariableSupport() instanceof LazyVariableSupport) {
-        component.getAssociation().move(associationTarget);
-      }
-    }
-    // end move operation
-    newParent.getBroadcastJava().moveAfter(component, oldParent, newParent);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Target
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return new {@link StatementTarget} where {@link Statement}'s for new {@link JavaInfo} should
-   *         be added to place them before given <code>nextChild</code>.
-   *
-   * @param parent
-   *          the parent to which {@link JavaInfo} should be added.
-   * @param child
-   *          the child that will be added.
-   * @param nextChild
-   *          the {@link JavaInfo} before which next {@link JavaInfo} should be added, can be
-   *          <code>null</code> that means that new {@link JavaInfo} should be added as last child
-   *          of parent.
-   */
-  public static StatementTarget getTarget(JavaInfo parent, JavaInfo child, JavaInfo nextChild)
-      throws Exception {
-    return new ChildTargetCalculator(parent, child, nextChild).getTarget();
-  }
-
-  /**
-   * @return new {@link StatementTarget} where {@link Statement}'s should be added to place them
-   *         before given <code>nextChild</code>.
-   *
-   * @param parent
-   *          the parent to which {@link JavaInfo} should be added.
-   * @param nextChild
-   *          the {@link JavaInfo} before which next {@link JavaInfo} should be added, can be
-   *          <code>null</code> that means that new {@link JavaInfo} should be added as last child
-   *          of parent.
-   */
-  public static StatementTarget getTarget(JavaInfo parent, JavaInfo nextChild) throws Exception {
-    return getTarget(parent, null, nextChild);
-  }
-
-  /**
-   * @return new {@link StatementTarget} where {@link Statement}'s should be added.
-   *
-   * @param parent
-   *          the parent to which {@link JavaInfo} should be added.
-   */
-  public static StatementTarget getTarget(JavaInfo parent) throws Exception {
-    return getTarget(parent, null, null);
-  }
-
-  /**
-   * Ensures that given {@link JavaInfo} has some "real" {@link VariableSupport}. For example we
-   * materialize {@link EmptyVariableSupport} because we may need to reference creation/association
-   * {@link Statement}.
-   */
-  public static void materializeVariable(JavaInfo javaInfo) throws Exception {
-    if (javaInfo.getVariableSupport() instanceof EmptyVariableSupport) {
-      EmptyVariableSupport variableSupport = (EmptyVariableSupport) javaInfo.getVariableSupport();
-      variableSupport.materialize();
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Creation sequence
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sorts {@link JavaInfo}'s by the time when they are created on execution flow.
-   */
-  public static void sortComponentsByFlow(final List<JavaInfo> components) {
-    if (components.isEmpty()) {
-      return;
-    }
-    // prepare ExecutionFlowDescription
-    ExecutionFlowDescription flowDescription;
-    {
-      JavaInfo someComponent = components.get(0);
-      flowDescription = getState(someComponent).getFlowDescription();
-    }
-    // prepare new List, with components in execution flow order
-    final List<JavaInfo> sortedComponents = Lists.newArrayList();
-    ExecutionFlowUtils.visit(
-        new VisitingContext(true),
-        flowDescription,
-        new ExecutionFlowFrameVisitor() {
-          @Override
-          public void postVisit(ASTNode node) {
-            for (JavaInfo component : components) {
-              if (component.getCreationSupport().getNode() == node) {
-                sortedComponents.add(component);
-                break;
-              }
-            }
-          }
-        });
-    // sort original List
-    Collections.sort(components, new Comparator<JavaInfo>() {
-      @Override
-      public int compare(JavaInfo o1, JavaInfo o2) {
-        int index_1 = sortedComponents.indexOf(o1);
-        int index_2 = sortedComponents.indexOf(o2);
-        return index_1 - index_2;
-      }
-    });
-  }
-
-  /**
-   * Sorts {@link ASTNode}'s by the time when they are visited on execution flow. {@link ASTNode}'s
-   * not included into execution flow should be removed.
-   *
-   * @param onEnter
-   *          is <code>true</code> if {@link ASTNode} considered as visited on enter, use
-   *          <code>false</code> to consider as visited on exit.
-   */
-  public static void sortNodesByFlow(ExecutionFlowDescription flowDescription,
-      final boolean onEnter,
-      final List<? extends ASTNode> nodes) {
-    final List<ASTNode> sortedNodes = Lists.newArrayList();
-    ExecutionFlowUtils.visit(
-        new VisitingContext(true),
-        flowDescription,
-        new ExecutionFlowFrameVisitor() {
-          @Override
-          public boolean enterFrame(ASTNode node) {
-            if (onEnter) {
-              addSortedNode(node);
-            }
-            return super.enterFrame(node);
-          }
-
-          @Override
-          public void leaveFrame(ASTNode node) {
-            if (!onEnter) {
-              addSortedNode(node);
-            }
-          }
-
-          @Override
-          public void preVisit(ASTNode node) {
-            if (onEnter) {
-              addSortedNode(node);
-            }
-          }
-
-          @Override
-          public void postVisit(ASTNode node) {
-            if (!onEnter) {
-              addSortedNode(node);
-            }
-          }
-
-          private void addSortedNode(ASTNode node) {
-            if (nodes.contains(node)) {
-              sortedNodes.add(node);
-            }
-          }
-        });
-    // remove nodes that are not visited on execution flow
-    for (Iterator<? extends ASTNode> I = nodes.iterator(); I.hasNext();) {
-      ASTNode node = I.next();
-      if (!sortedNodes.contains(node)) {
-        I.remove();
-      }
-    }
-    // sort original List
-    Collections.sort(nodes, new Comparator<ASTNode>() {
-      @Override
-      public int compare(ASTNode o1, ASTNode o2) {
-        int index_1 = sortedNodes.indexOf(o1);
-        int index_2 = sortedNodes.indexOf(o2);
-        return index_1 - index_2;
-      }
-    });
-  }
-
-  /**
-   * @return <code>true</code> if {@link JavaInfo} is already created at/before location specified
-   *         by {@link NodeTarget}.
-   */
-  public static boolean isCreatedAtTarget(JavaInfo javaInfo, NodeTarget target) {
-    // special case: JavaInfo with constructor as node
-    {
-      ASTNode node = javaInfo.getCreationSupport().getNode();
-      if (node instanceof MethodDeclaration) {
-        MethodDeclaration methodDeclaration = (MethodDeclaration) node;
-        if (methodDeclaration.isConstructor()) {
-          return true;
-        }
-      }
-    }
-    // StatementTarget
-    {
-      StatementTarget statementTarget = target.getStatementTarget();
-      if (statementTarget != null) {
-        return isCreatedAt(javaInfo, statementTarget);
-      }
-    }
-    // BodyDeclarationTarget
-    {
-      BodyDeclarationTarget bodyDeclarationTarget = target.getBodyDeclarationTarget();
-      return isCreatedAt(javaInfo, bodyDeclarationTarget);
-    }
-  }
-
-  /**
-   * @return <code>true</code> if {@link JavaInfo} is already created at location specified by
-   *         {@link StatementTarget}.
-   */
-  private static boolean isCreatedAt(JavaInfo javaInfo, StatementTarget target) {
-    ExecutionFlowDescription flowDescription = getState(javaInfo).getFlowDescription();
-    ASTNode javaInfoNode = javaInfo.getCreationSupport().getNode();
-    // Statement
-    {
-      Statement statement = target.getStatement();
-      if (statement != null) {
-        List<ASTNode> nodes = Lists.newArrayList(statement, javaInfoNode);
-        sortNodesByFlow(flowDescription, target.isBefore(), nodes);
-        return nodes.get(0) == javaInfoNode;
-      }
-    }
-    // Block
-    {
-      Block block = target.getBlock();
-      List<ASTNode> nodes = Lists.newArrayList(block, javaInfoNode);
-      sortNodesByFlow(flowDescription, target.isBefore(), nodes);
-      return nodes.get(0) == javaInfoNode;
-    }
-  }
-
-  /**
-   * @return <code>true</code> if {@link JavaInfo} is already created at location specified by
-   *         {@link BodyDeclarationTarget}.
-   */
-  private static boolean isCreatedAt(JavaInfo javaInfo, BodyDeclarationTarget target) {
-    ExecutionFlowDescription flowDescription = getState(javaInfo).getFlowDescription();
-    ASTNode javaInfoNode = javaInfo.getCreationSupport().getNode();
-    // BodyDeclaration
-    {
-      BodyDeclaration bodyDeclaration = target.getDeclaration();
-      if (bodyDeclaration != null) {
-        List<ASTNode> nodes = Lists.newArrayList(bodyDeclaration, javaInfoNode);
-        sortNodesByFlow(flowDescription, target.isBefore(), nodes);
-        return nodes.get(0) == javaInfoNode;
-      }
-    }
-    // TypeDeclaration
-    {
-      TypeDeclaration typeDeclaration = target.getType();
-      List<ASTNode> nodes = Lists.newArrayList(typeDeclaration, javaInfoNode);
-      sortNodesByFlow(flowDescription, target.isBefore(), nodes);
-      return nodes.get(0) == javaInfoNode;
-    }
-  }
-
-  /**
-   * @return the {@link StatementTarget} such that all given {@link JavaInfo} are created at this
-   *         target, so can be referenced.
-   */
-  public static StatementTarget getStatementTarget_whenAllCreated(
-      List<? extends JavaInfo> components) throws Exception {
-    Assert.isTrue(!components.isEmpty(), "Can not provide target for empty components list.");
-    // prepare target after last component
-    NodeTarget nodeTarget_afterLastComponent;
-    {
-      List<JavaInfo> componentsCopy = Lists.newArrayList(components);
-      sortComponentsByFlow(componentsCopy);
-      JavaInfo lastComponent = componentsCopy.get(componentsCopy.size() - 1);
-      nodeTarget_afterLastComponent = getNodeTarget_afterCreation(lastComponent);
-    }
-    // convert NodeTarget into StatementTarget
-    StatementTarget statementTarget = nodeTarget_afterLastComponent.getStatementTarget();
-    if (statementTarget != null) {
-      return statementTarget;
-    }
-    // probably all components created in fields, so use "this" target
-    JavaInfo rootJava = components.get(0).getRootJava();
-    if (rootJava.getCreationSupport() instanceof ThisCreationSupport) {
-      return rootJava.getVariableSupport().getStatementTarget();
-    }
-    // use "flow" method
-    ExecutionFlowDescription flowDescription = getState(rootJava).getFlowDescription();
-    MethodDeclaration startMethod = flowDescription.getStartMethods().get(0);
-    return new StatementTarget(startMethod, true);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // NodeTarget
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link NodeTarget} directly before creation of given {@link JavaInfo}.
-   */
-  public static NodeTarget getNodeTarget_beforeCreation(JavaInfo javaInfo) throws Exception {
-    return getNodeTarget_relativeCreation(javaInfo, true);
-  }
-
-  /**
-   * @return the {@link NodeTarget} directly after creation of given {@link JavaInfo}.
-   */
-  public static NodeTarget getNodeTarget_afterCreation(JavaInfo javaInfo) throws Exception {
-    return getNodeTarget_relativeCreation(javaInfo, false);
-  }
-
-  /**
-   * @return the {@link NodeTarget} relative creation of given {@link JavaInfo}.
-   */
-  private static NodeTarget getNodeTarget_relativeCreation(JavaInfo javaInfo, boolean before)
-      throws Exception {
-    CreationSupport creationSupport = javaInfo.getCreationSupport();
-    // Special support for control of wrapper/viewer.
-    {
-      if (creationSupport instanceof WrapperMethodControlCreationSupport) {
-        StatementTarget statementTarget = javaInfo.getVariableSupport().getStatementTarget();
-        if (statementTarget != null) {
-          return new NodeTarget(statementTarget);
-        }
-      }
-    }
-    // general case
-    ASTNode node = creationSupport.getNode();
-    {
-      Statement statement = AstNodeUtils.getEnclosingStatement(node);
-      if (statement != null) {
-        return new NodeTarget(new StatementTarget(statement, before));
-      }
-    }
-    {
-      BodyDeclaration bodyDeclaration = AstNodeUtils.getEnclosingNode(node, BodyDeclaration.class);
-      Assert.isNotNull(
-          bodyDeclaration,
-          "No Statement and no BodyDeclaration for %s %s in %s",
-          javaInfo,
-          node,
-          node.getRoot());
-      return new NodeTarget(new BodyDeclarationTarget(bodyDeclaration, before));
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Rendering
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Schedules invocation of {@link IJavaInfoRendering#render()} when execution flow leaves
-   * constructor.
-   * <p>
-   * This method should specify that this rendering is performed for some active {@link Statement}
-   * in {@link ExecutionFlowDescription}. We use constructor body as such {@link Statement}.
-   *
-   * @see IJavaInfoRendering IJavaInfoRendering for more information.
-   */
-  public static void scheduleSpecialRendering(JavaInfo javaInfo) {
-    if (javaInfo instanceof IJavaInfoRendering) {
-      scheduleSpecialRendering(javaInfo, (IJavaInfoRendering) javaInfo);
-    }
-  }
-
-  /**
-   * Schedules invocation of {@link IJavaInfoRendering#render()} when execution flow leaves
-   * constructor.
-   * <p>
-   * This method should specify that this rendering is performed for some active {@link Statement}
-   * in {@link ExecutionFlowDescription}. We use constructor body as such {@link Statement}.
-   *
-   * @see IJavaInfoRendering IJavaInfoRendering for more information.
-   */
-  public static void scheduleSpecialRendering(JavaInfo javaInfo,
-      final IJavaInfoRendering rendering) {
-    if (!(javaInfo.getCreationSupport() instanceof ThisCreationSupport)) {
-      return;
-    }
-    // prepare JavaInfo elements
-    final EditorState editorState = getState(javaInfo);
-    final MethodDeclaration constructor =
-        (MethodDeclaration) javaInfo.getCreationSupport().getNode();
-    final Statement statement = constructor.getBody();
-    // add rendering listener
-    javaInfo.addBroadcastListener(new EvaluationEventListener() {
-      @Override
-      public void leaveFrame(ASTNode node) throws Exception {
-        if (node == constructor) {
-          ExecutionFlowDescription flowDescription = editorState.getFlowDescription();
-          flowDescription.enterStatement(statement);
-          try {
-            rendering.render();
-          } finally {
-            flowDescription.leaveStatement(statement);
-          }
-        }
-      }
-    });
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Wrappers
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sometimes real component is created using some wrapper, for example as {@link Viewer} creates
-   * {@link Control}. We should drop {@link Viewer} in code, but layout policies should see that we
-   * drop {@link Control}. So we should "extract" {@link Control} {@link JavaInfo} from
-   * {@link Viewer} {@link JavaInfo}.
-   *
-   * @return the wrapped {@link JavaInfo} or original {@link JavaInfo} if there are no wrapping.
-   */
-  public static JavaInfo getWrapped(JavaInfo original) throws Exception {
-    if (original instanceof IWrapperInfo) {
-      IWrapperInfo wrapperInfo = (IWrapperInfo) original;
-      return wrapperInfo.getWrapper().getWrappedInfo();
-    }
-    return original;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Deleting
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Deletes children and related nodes of given {@link JavaInfo}.<br>
-   *
-   * @param removeFromParent
-   *          is <code>true</code>, also removes from from parent. Usually it is <code>true</code>,
-   *          but exposed components can not be really deleted, because they belong to its host, so
-   *          only children and related nodes can be removed.
-   */
-  public static void deleteJavaInfo(JavaInfo javaInfo, boolean removeFromParent) throws Exception {
-    // delete children
-    List<ObjectInfo> children = ImmutableList.copyOf(javaInfo.getChildren());
-    for (ObjectInfo child : children) {
-      // There are cases when children of some parent are "linked", so one deletes other on delete.
-      // So, we should check, may be child is already deleted.
-      if (!child.isDeleted()) {
-        child.delete();
-      }
-    }
-    // remove statements of related nodes
-    for (ASTNode node : javaInfo.getRelatedNodes()) {
-      // we can have several related nodes in same Statement, so may be already removed
-      if (AstNodeUtils.isDanglingNode(node)) {
-        continue;
-      }
-      // may be creation node, when we don't want to remove it
-      if (!removeFromParent && node == javaInfo.getCreationSupport().getNode()) {
-        continue;
-      }
-      // do remove
-      Statement statement = AstNodeUtils.getEnclosingStatement(node);
-      if (statement != null) {
-        javaInfo.getEditor().removeStatement(statement);
-      }
-    }
-    // remove from parent
-    if (removeFromParent) {
-      javaInfo.getParent().removeChild(javaInfo);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Reparse on dependency change
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final String DEPENDENCY_KEY = "JavaInfo.dependencies";
-
-  /**
-   * @return <code>true</code> if dependency information for hierarchy was prepared.
-   */
-  public static boolean hasDependencyInformation(JavaInfo javaInfo) throws Exception {
-    return javaInfo.getEditor().getGlobalValue(DEPENDENCY_KEY) != null;
-  }
-
-  /**
-   * @return <code>true</code> if one of the referenced types was changed.
-   */
-  @SuppressWarnings("unchecked")
-  public static boolean isDependencyChanged(JavaInfo javaInfo) throws Exception {
-    Map<IResource, Long> dependencies =
-        (Map<IResource, Long>) javaInfo.getEditor().getGlobalValue(DEPENDENCY_KEY);
-    if (dependencies != null) {
-      for (Map.Entry<IResource, Long> entry : dependencies.entrySet()) {
-        if (entry.getKey().getModificationStamp() != entry.getValue()) {
-          return true;
-        }
-      }
-    }
-    return false;
-  }
-
-  /**
-   * Remembers dependency information for given {@link JavaInfo}, i.e. time stamps for referenced
-   * types.
-   */
-  public static void rememberDependency(JavaInfo javaInfo) throws Exception {
-    AstEditor editor = javaInfo.getEditor();
-    // prepare dependencies
-    Map<IResource, Long> dependencies = Maps.newHashMap();
-    addDependencies(dependencies, Sets.<String>newTreeSet(), editor.getModelUnit(), 0);
-    // don't use this compilation unit resource
-    dependencies.remove(editor.getModelUnit().getResource());
-    // remember dependencies
-    editor.putGlobalValue(DEPENDENCY_KEY, dependencies);
-  }
-
-  /**
-   * Adds dependencies for given {@link ICompilationUnit}.
-   */
-  private static void addDependencies(final Map<IResource, Long> dependencies,
-      final Set<String> checkedTypes,
-      final ICompilationUnit modelUnit,
-      final int level) throws Exception {
-    if (level < 5 && dependencies.size() < 100) {
-      final IJavaProject javaProject = modelUnit.getJavaProject();
-      // add current resource
-      {
-        IResource resource = modelUnit.getResource();
-        dependencies.put(resource, resource.getModificationStamp());
-      }
-      // add references
-      CompilationUnit astUnit = CodeUtils.parseCompilationUnit(modelUnit);
-      astUnit.accept(new ASTVisitor() {
-        @Override
-        public void endVisit(QualifiedName node) {
-          addNewType(node.resolveTypeBinding());
-        }
-
-        @Override
-        public void endVisit(SimpleName node) {
-          addNewType(node.resolveTypeBinding());
-        }
-
-        private void addNewType(final ITypeBinding binding) {
-          if (binding == null) {
-            return;
-          }
-          ExecutionUtils.runIgnore(new RunnableEx() {
-            @Override
-            public void run() throws Exception {
-              String typeName = AstNodeUtils.getFullyQualifiedName(binding, false);
-              if (typeName.indexOf('.') != -1 && !checkedTypes.contains(typeName)) {
-                checkedTypes.add(typeName);
-                IType type = javaProject.findType(typeName);
-                if (type != null && !type.isBinary()) {
-                  addDependencies(dependencies, checkedTypes, type.getCompilationUnit(), level + 1);
-                }
-              }
-            }
-          });
-        }
-      });
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // EditorState
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link EditorState} instance for given {@link JavaInfo}.
-   */
-  public static EditorState getState(JavaInfo javaInfo) {
-    return EditorState.get(javaInfo.getEditor());
-  }
-
-  /**
-   * @return the {@link ClassLoader} for given {@link JavaInfo}.
-   */
-  public static ClassLoader getClassLoader(JavaInfo javaInfo) {
-    return getState(javaInfo).getEditorLoader();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private JavaInfoUtils() {
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link TypeDeclaration} that contains given {@link JavaInfo}.
+	 */
+	public static TypeDeclaration getTypeDeclaration(JavaInfo javaInfo) {
+		return AstNodeUtils.getEnclosingType(javaInfo.getCreationSupport().getNode());
+	}
+
+	/**
+	 * @return the {@link MethodDeclaration} that contains given {@link JavaInfo}.
+	 */
+	public static MethodDeclaration getMethodDeclaration(JavaInfo javaInfo) {
+		return AstNodeUtils.getEnclosingMethod(javaInfo.getCreationSupport().getNode());
+	}
+
+	/**
+	 * @return <code>true</code> if given {@link IField} is declared in top-level
+	 *         {@link TypeDeclaration} of {@link JavaInfo}, directly or by one of its implemented
+	 *         interfaces.
+	 */
+	public static boolean isLocalField(JavaInfo javaInfo, IField field) throws Exception {
+		// prepare binding of top-level type
+		ITypeBinding typeBinding;
+		{
+			TypeDeclaration typeDeclaration = getTypeDeclaration(javaInfo);
+			typeBinding = AstNodeUtils.getTypeBinding(typeDeclaration);
+		}
+		// do check
+		String declaringTypeName = field.getDeclaringType().getFullyQualifiedName();
+		return AstNodeUtils.isSuccessorOf(typeBinding, declaringTypeName);
+	}
+
+	/**
+	 * @return <code>true</code> if given {@link JavaInfo} created implicitly, with its host.
+	 */
+	public static boolean isImplicitlyCreated(JavaInfo javaInfo) {
+		return javaInfo.getCreationSupport() instanceof IImplicitCreationSupport;
+	}
+
+	/**
+	 * Schedules save of {@link ICompilationUnit} of given {@link JavaInfo}.<br>
+	 * We should save {@link ICompilationUnit} after edit operation finished.
+	 */
+	public static void scheduleSave(final JavaInfo info) {
+		DesignerPlugin.getStandardDisplay().asyncExec(new Runnable() {
+			@Override
+			public void run() {
+				ExecutionUtils.runLog(new RunnableEx() {
+					@Override
+					public void run() throws Exception {
+						info.getEditor().getModelUnit().getBuffer().save(null, false);
+					}
+				});
+			}
+		});
+	}
+
+	/**
+	 * Schedules opening given {@link ASTNode} in source view.
+	 */
+	public static void scheduleOpenNode(final JavaInfo javaInfo, final ASTNode node) {
+		// Do in async because at this time changes may be not committed from ASTEditor to compilation unit.
+		// This happens because this method is invoked in internal start/endEdit cycle.
+		Display.getDefault().asyncExec(new Runnable() {
+			@Override
+			public void run() {
+				IDesignPageSite site = IDesignPageSite.Helper.getSite(javaInfo);
+				if (site != null) {
+					site.openSourcePosition(node.getStartPosition());
+				}
+			}
+		});
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Assertions
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static void assertIsNotDeleted(JavaInfo javaInfo) {
+		Assert.isTrue(!javaInfo.isDeleted(), "Component is already deleted: %s", javaInfo);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Permissions
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if given {@link JavaInfo} can be moved inside of its parent in some
+	 *         way. Usually we just ask {@link CreationSupport#canReorder()}, however for example for
+	 *         absolute layout we can not reorder exposed components, but we can move them (change
+	 *         bounds).
+	 */
+	public static boolean canMove(final JavaInfo javaInfo) {
+		// check, may be we can obtain external permission
+		{
+			final boolean[] forceMoveEnable = new boolean[1];
+			final boolean[] forceMoveDisable = new boolean[1];
+			ExecutionUtils.runLog(new RunnableEx() {
+				@Override
+				public void run() throws Exception {
+					javaInfo.getBroadcastJava().canMove(javaInfo, forceMoveEnable, forceMoveDisable);
+				}
+			});
+			if (forceMoveEnable[0]) {
+				return true;
+			}
+			if (forceMoveDisable[0]) {
+				return false;
+			}
+		}
+		// ask CreationSupport
+		return javaInfo.getCreationSupport().canReorder();
+	}
+
+	/**
+	 * @return <code>true</code> if given {@link JavaInfo} can be moved into different parent. Here we
+	 *         just ask {@link CreationSupport#canReparent()} and have this method only for symmetry
+	 *         with {@link #canMove(JavaInfo)}.
+	 */
+	public static boolean canReparent(JavaInfo javaInfo) {
+		return javaInfo.getCreationSupport().canReparent() && javaInfo.getAssociation().canDelete();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parameters
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final String KEY_PARAMETER_PREFIX = "Instance-level parameter: ";
+
+	/**
+	 * Sets the {@link JavaInfo} instance level parameter value, can be accesses later using
+	 * {@link #getParameter(JavaInfo, String)}.
+	 */
+	public static void setParameter(JavaInfo javaInfo, String name, String value) {
+		String key = KEY_PARAMETER_PREFIX + name;
+		javaInfo.putArbitraryValue(key, value);
+	}
+
+	/**
+	 * Returns the value of {@link JavaInfo} parameter.<br>
+	 * Usually returns just {@link ComponentDescription#getParameter(String)}, but factory components
+	 * we should also check this parameters in {@link FactoryMethodDescription}.
+	 *
+	 * @return the value of {@link JavaInfo} parameter.
+	 */
+	public static String getParameter(JavaInfo javaInfo, String name) {
+		// try to key from JavaInfo instance
+		{
+			String key = KEY_PARAMETER_PREFIX + name;
+			String value = (String) javaInfo.getArbitraryValue(key);
+			if (value != null) {
+				return value;
+			}
+		}
+		// try to get from FactoryMethodDescription
+		if (javaInfo.getCreationSupport() instanceof AbstractExplicitFactoryCreationSupport) {
+			AbstractExplicitFactoryCreationSupport factoryCreationSupport =
+					(AbstractExplicitFactoryCreationSupport) javaInfo.getCreationSupport();
+			FactoryMethodDescription factoryMethodDescription = factoryCreationSupport.getDescription();
+			String value = factoryMethodDescription.getParameter(name);
+			if (value != null) {
+				return value;
+			}
+		}
+		// get from ComponentDescription
+		return javaInfo.getDescription().getParameter(name);
+	}
+
+	/**
+	 * @return mapped {@link JavaInfo} parameters.
+	 */
+	public static Map<String, String> getParameters(JavaInfo javaInfo) {
+		Map<String, String> parameters = Maps.newHashMap();
+		parameters.putAll(extractArbitraryParameters(javaInfo));
+		parameters.putAll(javaInfo.getDescription().getParameters());
+		return parameters;
+	}
+
+	/**
+	 * @return the {@link Map} of parameters set using {@link #setParameter(JavaInfo, String, String)}
+	 *         .
+	 */
+	private static Map<String, String> extractArbitraryParameters(JavaInfo javaInfo) {
+		Map<String, String> parameters = Maps.newHashMap();
+		for (Entry<Object, Object> arbitrary : javaInfo.getArbitraries().entrySet()) {
+			Object key = arbitrary.getKey();
+			Object value = arbitrary.getValue();
+			if (key instanceof String && value instanceof String) {
+				String stringKey = (String) key;
+				if (stringKey.startsWith(KEY_PARAMETER_PREFIX)) {
+					parameters.put(stringKey.substring(KEY_PARAMETER_PREFIX.length()), (String) value);
+				}
+			}
+		}
+		return parameters;
+	}
+
+	/**
+	 * Checks if {@link JavaInfo} has parameter with value <code>"true"</code>.
+	 */
+	public static boolean hasTrueParameter(JavaInfo javaInfo, String name) {
+		String parameter = getParameter(javaInfo, name);
+		return "true".equals(parameter);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Script
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * If given {@link JavaInfo} has parameter with script, execute it with "model" and "object"
+	 * variables.
+	 */
+	public static Object executeScriptParameter(JavaInfo javaInfo, String scriptName)
+			throws Exception {
+		String script = getParameter(javaInfo, scriptName);
+		if (script != null) {
+			return executeScript(javaInfo, script);
+		}
+		return null;
+	}
+
+	/**
+	 * Execute script with "model" and "object" variables.
+	 */
+	public static Object executeScript(JavaInfo javaInfo, String script) throws Exception {
+		ClassLoader classLoader = JavaInfoUtils.getClassLoader(javaInfo);
+		Map<String, Object> variables = Maps.newHashMap();
+		variables.put("model", javaInfo);
+		variables.put("object", javaInfo.getObject());
+		return ScriptUtils.evaluate(classLoader, script, variables);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Model creation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return new {@link JavaInfo} for given component {@link Class} name and {@link CreationSupport}
+	 *         .
+	 */
+	public static JavaInfo createJavaInfo(AstEditor editor,
+			String componentClassName,
+			CreationSupport creationSupport) throws Exception {
+		Class<?> componentClass =
+				EditorState.get(editor).getEditorLoader().loadClass(componentClassName);
+		return createJavaInfo(editor, componentClass, creationSupport);
+	}
+
+	/**
+	 * @return new {@link JavaInfo} for given component {@link Class} and {@link CreationSupport}.
+	 */
+	public static JavaInfo createJavaInfo(AstEditor editor,
+			Class<?> componentClass,
+			CreationSupport creationSupport) throws Exception {
+		// prepare description
+		ComponentDescription componentDescription =
+				ComponentDescriptionHelper.getDescription(editor, componentClass);
+		// create model
+		return createJavaInfo(editor, componentDescription, creationSupport);
+	}
+
+	/**
+	 * @return new {@link JavaInfo} for given {@link ComponentDescription} and {@link CreationSupport}
+	 *         .
+	 */
+	public static JavaInfo createJavaInfo(AstEditor editor,
+			ComponentDescription componentDescription,
+			CreationSupport creationSupport) throws Exception {
+		// prepare constructor of model
+		Constructor<?> modelConstructor;
+		{
+			Class<?> modelClass = componentDescription.getModelClass();
+			modelConstructor = modelClass.getConstructor(
+					new Class[]{AstEditor.class, ComponentDescription.class, CreationSupport.class});
+		}
+		// create model
+		JavaInfo javaInfo = (JavaInfo) modelConstructor.newInstance(
+				new Object[]{editor, componentDescription, creationSupport});
+		ObjectInfoUtils.setNewId(javaInfo);
+		return javaInfo;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exposed children
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds new exposed {@link JavaInfo}'s.
+	 */
+	public static void addExposedChildren(JavaInfo host, Class<?>[] exposedTypes) throws Exception {
+		if (hasTrueParameter(host, "noExposedChildren")) {
+			return;
+		}
+		addExposedChildred_Method(host, exposedTypes);
+		addExposedChildred_Field(host, exposedTypes);
+		// reorder added components
+		buildExposedChildrenHierarchy(host);
+	}
+
+	/**
+	 * Adds new {@link JavaInfo}'s exposed using {@link PropertyDescriptor}'s.
+	 */
+	private static void addExposedChildred_Method(JavaInfo host, Class<?>[] exposedTypes)
+			throws Exception {
+		Object hostObject = host.getObject();
+		Assert.isNotNull(hostObject);
+		// prepare property descriptors
+		boolean includeProtected = shouldExposeProtectedMembers(host);
+		List<PropertyDescriptor> propertyDescriptors = host.getDescription().getPropertyDescriptors();
+		// check all PropertyDescriptor's
+		for (PropertyDescriptor propertyDescriptor : propertyDescriptors) {
+			Method setMethod = ReflectionUtils.getWriteMethod(propertyDescriptor);
+			// prepare "getter"
+			Method getMethod = ReflectionUtils.getReadMethod(propertyDescriptor);
+			if (getMethod == null) {
+				continue;
+			}
+			if (!includeProtected && ReflectionUtils.isProtected(getMethod)) {
+				continue;
+			}
+			// check for return type
+			{
+				Class<?> returnType = getMethod.getReturnType();
+				if (!isExposedType(exposedTypes, returnType)) {
+					continue;
+				}
+			}
+			// check if this method can be used for exposing child
+			if (!isEnabledExposeMethod(host, getMethod)) {
+				continue;
+			}
+			// check that methods returns not "null"
+			Object methodObject = null;
+			{
+				try {
+					methodObject = getMethod.invoke(hostObject);
+					if (methodObject == null) {
+						continue;
+					}
+				} catch (Exception e) {
+					continue;
+				}
+			}
+			// check that component returned by method is bound to parent object
+			if (!isExposeDisconnectedComponent(host, getMethod) && !areParentChild(host, methodObject)) {
+				continue;
+			}
+			// check for infinite recursion
+			if (isExposedRecursive(host, methodObject)) {
+				continue;
+			}
+			// OK, add component
+			addChildExposedByMethod(host, getMethod, setMethod, methodObject);
+		}
+	}
+
+	/**
+	 * Adds new {@link JavaInfo} exposed by given {@link Method} as child of given <code>host</code>.
+	 */
+	public static JavaInfo addChildExposedByMethod(JavaInfo host, String getMethodName)
+			throws Exception {
+		// prepare "host" object
+		Object hostObject = host.getObject();
+		Assert.isNotNull(hostObject);
+		// prepare "method" object
+		Method getMethod = ReflectionUtils.getMethod(hostObject.getClass(), getMethodName);
+		Object methodObject = getMethod.invoke(hostObject);
+		Assert.isNotNull(methodObject);
+		// add exposed child
+		return addChildExposedByMethod(host, getMethod, null, methodObject);
+	}
+
+	/**
+	 * Adds new {@link JavaInfo} exposed by given {@link Method} as child of given <code>host</code>.
+	 */
+	private static JavaInfo addChildExposedByMethod(JavaInfo host,
+			Method getMethod,
+			Method setMethod,
+			Object methodObject) throws Exception {
+		// check if already exposed
+		if (isAlreadyExposedMethod(host, getMethod)) {
+			return null;
+		}
+		// prepare elements
+		AstEditor editor = host.getEditor();
+		boolean direct = getParentObject(methodObject) == host.getObject();
+		CreationSupport creationSupport =
+				new ExposedPropertyCreationSupport(host, getMethod, setMethod, direct);
+		// create child JavaInfo
+		JavaInfo methodJavaInfo;
+		if (InstanceFactoryInfo.isFactory(editor, getMethod.getReturnType())) {
+			methodJavaInfo =
+					InstanceFactoryInfo.createFactory(editor, getMethod.getReturnType(), creationSupport);
+		} else {
+			ComponentDescription componentDescription =
+					ComponentDescriptionHelper.getDescription(editor, host.getDescription(), getMethod);
+			methodJavaInfo = createJavaInfo(editor, componentDescription, creationSupport);
+		}
+		// configure JavaInfo
+		methodJavaInfo.setVariableSupport(
+				new ExposedPropertyVariableSupport(methodJavaInfo, host, getMethod));
+		methodJavaInfo.setAssociation(new ImplicitObjectAssociation(host));
+		// add new child
+		addExposedJavaInfo(host, methodJavaInfo);
+		// initialize
+		methodJavaInfo.setObject(methodObject);
+		return methodJavaInfo;
+	}
+
+	/**
+	 * @return <code>true</code> if given getter is already used to create exposed {@link JavaInfo},
+	 *         so should be ignored. If not used yet, we mark it as used and return <code>false</code>
+	 *         .
+	 */
+	@SuppressWarnings("unchecked")
+	private static boolean isAlreadyExposedMethod(JavaInfo host, Method getMethod) {
+		String key = "JavaInfoUtils.alreadyExposed.Method";
+		Set<Method> alreadyExposed = (Set<Method>) host.getArbitraryValue(key);
+		if (alreadyExposed == null) {
+			alreadyExposed = Sets.newHashSet();
+			host.putArbitraryValue(key, alreadyExposed);
+		}
+		if (alreadyExposed.contains(getMethod)) {
+			return true;
+		}
+		alreadyExposed.add(getMethod);
+		return false;
+	}
+
+	/**
+	 * Adds new {@link JavaInfo}'s exposed using {@link PropertyDescriptor}'s.
+	 */
+	private static void addExposedChildred_Field(JavaInfo host, Class<?>[] exposedTypes)
+			throws Exception {
+		Object hostObject = host.getObject();
+		Assert.isNotNull(hostObject);
+		// check all Field's
+		boolean includeProtected = shouldExposeProtectedMembers(host);
+		List<Field> fields = ReflectionUtils.getFields(hostObject.getClass());
+		for (Field field : fields) {
+			// check modifier
+			if (ReflectionUtils.isPrivate(field) || ReflectionUtils.isPackagePrivate(field)) {
+				continue;
+			}
+			if (ReflectionUtils.isProtected(field) && !includeProtected) {
+				continue;
+			}
+			// check for type
+			{
+				Class<?> fieldType = field.getType();
+				if (!isExposedType(exposedTypes, fieldType)) {
+					continue;
+				}
+			}
+			// check if this field can be used for exposing child
+			if (!isEnabledExposeField(host, field)) {
+				continue;
+			}
+			// check that methods returns not "null"
+			Object fieldObject;
+			{
+				fieldObject = field.get(hostObject);
+				if (fieldObject == null) {
+					continue;
+				}
+			}
+			// check that component returned by method is bound to parent object
+			if (!areParentChild(host, fieldObject)) {
+				continue;
+			}
+			// check for infinite recursion
+			if (isExposedRecursive(host, fieldObject)) {
+				continue;
+			}
+			// OK, add component
+			addChildExposedByField(host, field, fieldObject);
+		}
+	}
+
+	/**
+	 * Adds new {@link JavaInfo} exposed by given {@link Field} as child of given <code>host</code>.
+	 */
+	private static JavaInfo addChildExposedByField(JavaInfo host, Field field, Object fieldObject)
+			throws Exception {
+		// check if already exposed
+		if (isAlreadyExposedField(host, field)) {
+			return null;
+		}
+		// prepare elements
+		AstEditor editor = host.getEditor();
+		boolean direct = getParentObject(fieldObject) == host.getObject();
+		CreationSupport creationSupport = new ExposedFieldCreationSupport(host, field, direct);
+		// create child JavaInfo
+		JavaInfo fieldJavaInfo;
+		ComponentDescription componentDescription =
+				ComponentDescriptionHelper.getDescription(editor, field.getType());
+		fieldJavaInfo = createJavaInfo(editor, componentDescription, creationSupport);
+		// configure JavaInfo
+		fieldJavaInfo.setVariableSupport(new ExposedFieldVariableSupport(fieldJavaInfo, host, field));
+		fieldJavaInfo.setAssociation(new ImplicitObjectAssociation(host));
+		// add new child
+		addExposedJavaInfo(host, fieldJavaInfo);
+		// initialize
+		fieldJavaInfo.setObject(fieldObject);
+		return fieldJavaInfo;
+	}
+
+	/**
+	 * @return <code>true</code> if given {@link Field} is already used to create exposed
+	 *         {@link JavaInfo}, so should be ignored. If not used yet, we mark it as used and return
+	 *         <code>false</code>.
+	 */
+	@SuppressWarnings("unchecked")
+	private static boolean isAlreadyExposedField(JavaInfo host, Field field) {
+		String key = "JavaInfoUtils.alreadyExposed.Field";
+		Set<Field> alreadyExposed = (Set<Field>) host.getArbitraryValue(key);
+		if (alreadyExposed == null) {
+			alreadyExposed = Sets.newHashSet();
+			host.putArbitraryValue(key, alreadyExposed);
+		}
+		if (alreadyExposed.contains(field)) {
+			return true;
+		}
+		alreadyExposed.add(field);
+		return false;
+	}
+
+	/**
+	 * Adds exposed {@link JavaInfo} to its host.
+	 */
+	private static void addExposedJavaInfo(JavaInfo host, JavaInfo exposed) throws Exception {
+		for (HierarchyProvider provider : getHierarchyProviders()) {
+			provider.add(host, exposed);
+			if (exposed.getParent() != null) {
+				break;
+			}
+		}
+		if (exposed.getParent() == null) {
+			host.addChild(exposed);
+		}
+	}
+
+	/**
+	 * @return <code>true</code> if given {@link Method} can expose child.
+	 */
+	private static boolean isEnabledExposeMethod(JavaInfo host, Method getMethod) {
+		// check filters
+		for (ExposingRule rule : host.getDescription().getExposingRules()) {
+			Boolean filter = rule.filter(getMethod);
+			if (filter != null) {
+				if (filter.booleanValue()) {
+					return true;
+				} else {
+					return false;
+				}
+			}
+		}
+		// if method of "this" JavaInfo overrides this method, ignore it to avoid binary execution flow
+		if (host.getCreationSupport() instanceof ThisCreationSupport) {
+			TypeDeclaration typeDeclaration = getTypeDeclaration(host);
+			String signature = ReflectionUtils.getMethodSignature(getMethod);
+			if (AstNodeUtils.getMethodBySignature(typeDeclaration, signature) != null) {
+				return false;
+			}
+		}
+		// if no rule that forbids this method, then allow exposing
+		return true;
+	}
+
+	/**
+	 * @return <code>true</code> if given {@link Field} can expose child.
+	 */
+	private static boolean isEnabledExposeField(JavaInfo host, Field field) {
+		// check filters
+		for (ExposingRule rule : host.getDescription().getExposingRules()) {
+			Boolean filter = rule.filter(field);
+			if (filter != null) {
+				if (filter.booleanValue()) {
+					return true;
+				} else {
+					return false;
+				}
+			}
+		}
+		// if no rule that forbids this field, then allow exposing
+		return true;
+	}
+
+	/**
+	 * @return <code>true</code> if current form can see protected members of "host".
+	 */
+	private static boolean shouldExposeProtectedMembers(JavaInfo host) {
+		// if subclass
+		if (host.getCreationSupport() instanceof ThisCreationSupport) {
+			return true;
+		}
+		// if same package
+		{
+			String unitPackageName = AstNodeUtils.getPackageName(host.getEditor().getAstUnit());
+			String hostPackageName =
+					CodeUtils.getPackage(host.getDescription().getComponentClass().getName());
+			if (unitPackageName.equals(hostPackageName)) {
+				return true;
+			}
+		}
+		// no
+		return false;
+	}
+
+	/**
+	 * @return <code>true</code> if given {@link Class} is assignable to one of the given exposed
+	 *         types.
+	 */
+	private static boolean isExposedType(Class<?>[] exposedTypes, Class<?> candidate) {
+		for (Class<?> exposedType : exposedTypes) {
+			if (exposedType.isAssignableFrom(candidate)) {
+				return true;
+			}
+		}
+		return false;
+	}
+
+	/**
+	 * @return <code>true</code> if given {@link Method} should expose component even if this
+	 *         component is not connected to the host object.
+	 */
+	private static boolean isExposeDisconnectedComponent(JavaInfo host, Method getMethod)
+			throws Exception {
+		String signature = ReflectionUtils.getMethodSignature(getMethod);
+		MethodDescription methodDescription = host.getDescription().getMethod(signature);
+		return methodDescription != null && methodDescription.hasTrueTag("exposeDisconnectedComponent");
+	}
+
+	/**
+	 * @return <code>true</code> if given {@link Object} will cause infinite recursive exposing.
+	 */
+	private static boolean isExposedRecursive(JavaInfo host, Object methodObject) {
+		return host.getObject() == methodObject;
+	}
+
+	/**
+	 * @return <code>true</code> if given {@link JavaInfo} is not direct child of its parent, i.e. it
+	 *         is child of some inner (not exposed) container.
+	 */
+	public static boolean isIndirectlyExposed(JavaInfo javaInfo) {
+		CreationSupport creationSupport = javaInfo.getCreationSupport();
+		if (creationSupport instanceof IExposedCreationSupport) {
+			return !((IExposedCreationSupport) creationSupport).isDirect();
+		}
+		if (creationSupport instanceof IWrapperControlCreationSupport) {
+			JavaInfo wrapper = ((IWrapperControlCreationSupport) creationSupport).getWrapperInfo();
+			return isIndirectlyExposed(wrapper);
+		}
+		return false;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Sorting: exposed
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Interface for retrieving parent/child information using widget instances of specific toolkit.
+	 * Used to build hierarchy of exposed children.
+	 *
+	 * @author scheglov_ke
+	 * @author mitin_aa
+	 */
+	public static class HierarchyProvider {
+		/**
+		 * @return all aliases of given component object (including given object), may be
+		 *         <code>null</code>, if no aliases.
+		 */
+		public Object[] getAliases(Object object) throws Exception {
+			return null;
+		}
+
+		/**
+		 * @return the parent object for given object.
+		 */
+		public Object getParentObject(Object object) throws Exception {
+			return null;
+		}
+
+		/**
+		 * @return the children of given toolkit object.
+		 *
+		 * @param object
+		 *          the object to get children from
+		 */
+		public Object[] getChildrenObjects(Object object) throws Exception {
+			return ArrayUtils.EMPTY_OBJECT_ARRAY;
+		}
+
+		/**
+		 * Can associate exposed {@link JavaInfo} with its host.
+		 * <p>
+		 * For example in RCP we need to create intermediate Control for exposed Viewer.
+		 */
+		public void add(JavaInfo host, JavaInfo exposed) throws Exception {
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Build exposed children hierarchy
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * For custom component it is possible that exposed component is a child of other exposed
+	 * component, but from custom component point of view this looks as two independent components.
+	 * This method restores such logical hierarchy.
+	 */
+	private static void buildExposedChildrenHierarchy(JavaInfo host) throws Exception {
+		// prepare map (object -> child)
+		final Map<Object, JavaInfo> objectToChild = Maps.newHashMap();
+		for (JavaInfo child : host.getChildrenJava()) {
+			objectToChild.put(child.getObject(), child);
+		}
+		// prepare sorted list of children, so we will add them to the logical parents in correct order
+		final List<JavaInfo> sortedChildren;
+		{
+			sortedChildren = Lists.newArrayList();
+			fillChildren(sortedChildren, host.getObject(), objectToChild);
+		}
+		// sort children in host JavaInfo (to reorder children that have host as logical parent)
+		// only exposed children should be sorted
+		Collections.sort(host.getChildren(), new Comparator<ObjectInfo>() {
+			@Override
+			public int compare(ObjectInfo o1, ObjectInfo o2) {
+				// ignore not exposed
+				{
+					boolean exposed_1 = isExposed(o1);
+					boolean exposed_2 = isExposed(o2);
+					if (!exposed_1 || !exposed_2) {
+						return 0;
+					}
+				}
+				// two exposed
+				return sortedChildren.indexOf(o1) - sortedChildren.indexOf(o2);
+			}
+
+			private boolean isExposed(ObjectInfo o) {
+				if (o instanceof JavaInfo) {
+					JavaInfo javaInfo = (JavaInfo) o;
+					return javaInfo.getCreationSupport() instanceof IExposedCreationSupport;
+				}
+				return false;
+			}
+		});
+		// find logical parent for each exposed child
+		for (JavaInfo child : sortedChildren) {
+			if (child.getCreationSupport() instanceof IExposedCreationSupport) {
+				// go up along the hierarchy
+				Object parentObject = getParentObject(child.getObject());
+				for (; parentObject != null; parentObject = getParentObject(parentObject)) {
+					JavaInfo parent = objectToChild.get(parentObject);
+					if (parent != null) {
+						// move child to the logical parent
+						host.removeChild(child);
+						parent.addChild(child);
+						// OK, we found logical parent
+						break;
+					}
+				}
+			}
+		}
+	}
+
+	/**
+	 * @return the parent object of given object according to toolkit which object belongs to
+	 *
+	 * @param childObject
+	 *          the object to get parent for
+	 */
+	private static Object getParentObject(Object childObject) throws Exception {
+		for (HierarchyProvider provider : getHierarchyProviders()) {
+			Object parentObject = provider.getParentObject(childObject);
+			if (parentObject != null) {
+				return parentObject;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * @return <code>true</code> if given objects are parent/child.
+	 */
+	private static boolean areParentChild(JavaInfo host, Object child) throws Exception {
+		Object[] requiredParents = getComponentObjects(host);
+		for (Object requiredParent : requiredParents) {
+			// check by parent
+			if (areParentChild(requiredParent, child)) {
+				return true;
+			}
+			// check in children
+			for (HierarchyProvider provider : getHierarchyProviders()) {
+				Object[] children = provider.getChildrenObjects(requiredParent);
+				if (ArrayUtils.contains(children, child)) {
+					return true;
+				}
+			}
+		}
+		return false;
+	}
+
+	/**
+	 * @return <code>true</code> if given objects are parent/child.
+	 */
+	private static boolean areParentChild(Object requiredParent, Object child) throws Exception {
+		for (Object parent = child; parent != null; parent = getParentObject(parent)) {
+			if (parent == requiredParent) {
+				return true;
+			}
+		}
+		return false;
+	}
+
+	/**
+	 * Traverse hierarchy starting from given objects and fill {@link List} of {@link JavaInfo} models
+	 * in top-down order.
+	 *
+	 * @param children
+	 *          the {@link List} to add ordered {@link JavaInfo} models
+	 * @param object
+	 *          the current object to fill models from
+	 * @param objectToChild
+	 *          the {@link Map} to convert objects into models
+	 */
+	private static void fillChildren(List<JavaInfo> children,
+			Object object,
+			Map<Object, JavaInfo> objectToChild) throws Exception {
+		// add model for current object
+		{
+			JavaInfo child = objectToChild.get(object);
+			if (child != null) {
+				children.add(child);
+			}
+		}
+		// prepare children objects
+		List<Object> childrenObjects = Lists.newArrayList();
+		for (HierarchyProvider provider : getHierarchyProviders()) {
+			Collections.addAll(childrenObjects, provider.getChildrenObjects(object));
+		}
+		// process children objects
+		for (Object childOfChild : childrenObjects) {
+			fillChildren(children, childOfChild, objectToChild);
+		}
+	}
+
+	/**
+	 * @return the instances of {@link HierarchyProvider}.
+	 */
+	private static List<HierarchyProvider> getHierarchyProviders() {
+		return ExternalFactoriesHelper.getElementsInstances(
+				HierarchyProvider.class,
+				"org.eclipse.wb.core.componentsHierarchyProviders",
+				"provider");
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Binary hierarchy binding
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Binds any not bound yet components to the given root {@link JavaInfo} or any of its children.
+	 */
+	public static void bindBinaryComponents(List<JavaInfo> components) throws Exception {
+		List<JavaInfo> reverseComponents = ImmutableList.copyOf(components).reverse();
+		// prepare map (object -> JavaInfo)
+		final Map<Object, JavaInfo> objectToModel;
+		{
+			objectToModel = Maps.newHashMap();
+			for (JavaInfo component : components) {
+				component.accept(new ObjectInfoVisitor() {
+					@Override
+					public void endVisit(ObjectInfo objectInfo) throws Exception {
+						if (objectInfo instanceof JavaInfo) {
+							JavaInfo javaInfo = (JavaInfo) objectInfo;
+							for (Object componentObject : getComponentObjects(javaInfo)) {
+								objectToModel.put(componentObject, javaInfo);
+							}
+						}
+					}
+				});
+			}
+		}
+		// prepare toolkit objects for ALL hierarchies
+		List<Object> objects;
+		{
+			objects = Lists.newArrayList();
+			for (JavaInfo component : components) {
+				if (component.getParent() == null) {
+					for (Object componentObject : getComponentObjects(component)) {
+						Assert.isNotNull(componentObject, "No object for component: %s", component);
+						fillToolkitObjects(objects, componentObject);
+					}
+				}
+			}
+		}
+		// bind not bound components
+		for (JavaInfo component : components) {
+			if (component.getParent() == null) {
+				bindBinaryComponent_toParent(objectToModel, objects, component);
+			}
+		}
+		// check still not bound component, it may be alias for some other component
+		for (JavaInfo component : reverseComponents) {
+			if (component.getParent() == null) {
+				bindBinaryComponent_asAlias(components, component);
+			}
+		}
+		// check still not bound component, flow to depth
+		for (JavaInfo component : reverseComponents) {
+			if (component.getParent() == null
+					&& component.getDescription().hasTrueParameter("bindBinary.toDepth")) {
+				bindBinaryComponent_toDepth(objectToModel, component);
+			}
+		}
+	}
+
+	/**
+	 * Binds single binary component to parent.
+	 */
+	private static void bindBinaryComponent_toParent(Map<Object, JavaInfo> objectToModel,
+			List<Object> objects,
+			JavaInfo component) throws Exception {
+		for (Object object : getComponentObjects(component)) {
+			int objectIndex = objects.indexOf(object);
+			// go up along the hierarchy
+			Object parentObject = getParentObject(object);
+			for (; parentObject != null; parentObject = getParentObject(parentObject)) {
+				JavaInfo parent = objectToModel.get(parentObject);
+				if (parent != null) {
+					boolean added = false;
+					// try to add before some existing "child"
+					nextChild : for (JavaInfo child : parent.getChildrenJava()) {
+						for (Object childObject : getComponentObjects(child)) {
+							int childIndex = objects.indexOf(childObject);
+							if (objectIndex < childIndex) {
+								parent.addChild(component, child);
+								added = true;
+								break nextChild;
+							}
+						}
+					}
+					// if not added yet, add as the last "child"
+					if (!added) {
+						parent.addChild(component);
+					}
+					// set association
+					component.setAssociation(new UnknownAssociation());
+					// OK, we found logical parent
+					return;
+				}
+			}
+		}
+	}
+
+	/**
+	 * Binds single binary component to its alias (but not to itself).
+	 */
+	private static void bindBinaryComponent_asAlias(List<JavaInfo> components, JavaInfo component)
+			throws Exception {
+		for (Object object : getComponentObjects(component)) {
+			for (JavaInfo otherComponent : components) {
+				for (Object otherObject : getComponentObjects(otherComponent)) {
+					boolean otherIsSameOrChild =
+							otherComponent == component || component.isParentOf(otherComponent);
+					if (otherObject == object && !otherIsSameOrChild) {
+						List<AbstractComponentInfo> children =
+								otherComponent.getChildren(AbstractComponentInfo.class);
+						JavaInfo nextChild = !children.isEmpty() ? children.get(0) : null;
+						otherComponent.addChild(component, nextChild);
+						component.setAssociation(new UnknownAssociation());
+						return;
+					}
+				}
+			}
+		}
+	}
+
+	/**
+	 * @return {@link Object}'s that represent given component. Usually this is just single object,
+	 *         but in GWT components has two presentations: <code>UIObject</code> and its
+	 *         <code>Element</code>.
+	 */
+	private static Object[] getComponentObjects(JavaInfo component) throws Exception {
+		Object object = getComponentObject0(component);
+		if (object == null) {
+			return ArrayUtils.EMPTY_OBJECT_ARRAY;
+		}
+		for (HierarchyProvider provider : getHierarchyProviders()) {
+			Object[] objects = provider.getAliases(object);
+			if (objects != null) {
+				return objects;
+			}
+		}
+		return new Object[]{object};
+	}
+
+	/**
+	 * @return the {@link AbstractComponentInfo#getComponentObject()} or {@link JavaInfo#getObject()}.
+	 */
+	private static Object getComponentObject0(JavaInfo component) {
+		return component instanceof AbstractComponentInfo
+				? ((AbstractComponentInfo) component).getComponentObject()
+						: component.getObject();
+	}
+
+	/**
+	 * Traverse hierarchy starting from given objects and fill {@link List} with toolkit
+	 * {@link Object}'s in top-down order.
+	 *
+	 * @param objects
+	 *          the {@link List} to add ordered toolkit objects.
+	 * @param object
+	 *          the current toolkit object.
+	 */
+	private static void fillToolkitObjects(List<Object> objects, Object object) throws Exception {
+		// add current object
+		objects.add(object);
+		// prepare children objects
+		List<Object> children = Lists.newArrayList();
+		for (HierarchyProvider provider : getHierarchyProviders()) {
+			Collections.addAll(children, provider.getChildrenObjects(object));
+		}
+		// process children objects
+		for (Object child : children) {
+			fillToolkitObjects(objects, child);
+		}
+	}
+
+	/**
+	 * Binds single binary component to parent using flow from root to depth.
+	 */
+	private static void bindBinaryComponent_toDepth(Map<Object, JavaInfo> objectToModel,
+			JavaInfo component) throws Exception {
+		Object[] objects = getComponentObjects(component);
+		for (Object object : objects) {
+			bindBinaryComponent_toDepth(objectToModel, component, object);
+		}
+	}
+
+	private static void bindBinaryComponent_toDepth(Map<Object, JavaInfo> objectToModel,
+			JavaInfo parentInfo,
+			Object object) throws Exception {
+		for (HierarchyProvider provider : getHierarchyProviders()) {
+			Object[] children = provider.getChildrenObjects(object);
+			for (Object child : children) {
+				JavaInfo childInfo = objectToModel.get(child);
+				if (childInfo != null) {
+					if (childInfo.getParent() == null) {
+						parentInfo.addChild(childInfo);
+						childInfo.setAssociation(new UnknownAssociation());
+					}
+					bindBinaryComponent_toDepth(objectToModel, childInfo, child);
+				} else {
+					bindBinaryComponent_toDepth(objectToModel, parentInfo, child);
+				}
+			}
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Adding new JavaInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds new component to container before some existing component.
+	 *
+	 * @param component
+	 *          the component to add.
+	 * @param associationObject
+	 *          the container {@link AssociationObject}.
+	 * @param container
+	 *          the parent for adding component.
+	 * @param nextComponent
+	 *          the component before which new component should be added, may be <code>null</code>, so
+	 *          new component will be added as last child of parent.
+	 */
+	public static void add(JavaInfo component,
+			AssociationObject associationObject,
+			JavaInfo container,
+			JavaInfo nextComponent) throws Exception {
+		VariableSupport variableSupport = GenerationUtils.getVariableSupport(component);
+		StatementGenerator statementGenerator = GenerationUtils.getStatementGenerator(component);
+		add(
+				component,
+				variableSupport,
+				statementGenerator,
+				associationObject,
+				container,
+				nextComponent);
+	}
+
+	/**
+	 * Adds new component to container into given {@link StatementTarget}.
+	 *
+	 * @param component
+	 *          the component to add.
+	 * @param associationObject
+	 *          the container {@link AssociationObject}.
+	 * @param container
+	 *          the parent for adding component.
+	 * @param target
+	 *          the {@link StatementTarget} to add component to.
+	 */
+	public static void addTarget(JavaInfo component,
+			AssociationObject associationObject,
+			JavaInfo container,
+			StatementTarget target) throws Exception {
+		addTarget(component, associationObject, container, null, target);
+	}
+
+	public static void addTarget(JavaInfo component,
+			AssociationObject associationObject,
+			JavaInfo container,
+			JavaInfo nextComponent,
+			StatementTarget target) throws Exception {
+		VariableSupport variableSupport = GenerationUtils.getVariableSupport(component);
+		StatementGenerator statementGenerator = GenerationUtils.getStatementGenerator(component);
+		add(
+				component,
+				variableSupport,
+				statementGenerator,
+				associationObject,
+				container,
+				nextComponent,
+				target);
+	}
+
+	/**
+	 * Adds new component to container before some existing component.
+	 *
+	 * @param component
+	 *          the component to add.
+	 * @param variableSupport
+	 *          the {@link VariableSupport} for new component.
+	 * @param statementGenerator
+	 *          the {@link StatementGenerator} for new component.
+	 * @param associationObject
+	 *          the container {@link AssociationObject}.
+	 * @param container
+	 *          the parent for adding component.
+	 * @param nextComponent
+	 *          the component before which new component should be added, may be <code>null</code>, so
+	 *          new component will be added as last child of parent.
+	 */
+	public static void add(JavaInfo component,
+			VariableSupport variableSupport,
+			StatementGenerator statementGenerator,
+			AssociationObject associationObject,
+			JavaInfo container,
+			JavaInfo nextComponent) throws Exception {
+		nextComponent = getNextComponent_useComponentOrder(component, container, nextComponent);
+		StatementTarget target = getTarget(container, component, nextComponent);
+		add(
+				component,
+				variableSupport,
+				statementGenerator,
+				associationObject,
+				container,
+				nextComponent,
+				target);
+	}
+
+	/**
+	 * @return the actual "nextComponent" that should be used to conform "component"
+	 *         {@link ComponentOrder} and {@link ComponentOrder}-s of existing children.
+	 */
+	private static JavaInfo getNextComponent_useComponentOrder(JavaInfo component,
+			JavaInfo container,
+			JavaInfo nextComponent) throws Exception {
+		ComponentOrder order = component.getDescription().getOrder();
+		// may be this "component" wants to be first
+		if (nextComponent == null) {
+			nextComponent = order.getNextComponent_whenLast(component, container);
+		}
+		// may be other child wants to be last
+		if (nextComponent == null) {
+			for (JavaInfo parentChild : container.getChildrenJava()) {
+				if (!parentChild.getDescription().getOrder().canBeBefore(component)) {
+					return parentChild;
+				}
+			}
+		}
+		// no changes
+		return nextComponent;
+	}
+
+	/**
+	 * Adds new component to container as first child.
+	 *
+	 * @param component
+	 *          the component to add.
+	 * @param associationObject
+	 *          the container {@link AssociationObject}.
+	 * @param container
+	 *          the parent for adding component.
+	 */
+	public static void addFirst(JavaInfo component,
+			AssociationObject associationObject,
+			JavaInfo container) throws Exception {
+		ComponentOrder order = ComponentOrderFirst.INSTANCE;
+		JavaInfo nextComponent = order.getNextComponent_whenLast(component, container);
+		StatementTarget target = getTarget(container, component, nextComponent);
+		//
+		VariableSupport variableSupport = GenerationUtils.getVariableSupport(component);
+		StatementGenerator statementGenerator = GenerationUtils.getStatementGenerator(component);
+		add(
+				component,
+				variableSupport,
+				statementGenerator,
+				associationObject,
+				container,
+				nextComponent,
+				target);
+	}
+
+	/**
+	 * Adds new component to container before some existing component.
+	 *
+	 * @param component
+	 *          the component to add.
+	 * @param variableSupport
+	 *          the {@link VariableSupport} for new component.
+	 * @param statementGenerator
+	 *          the {@link StatementGenerator} for new component.
+	 * @param associationObject
+	 *          the container {@link AssociationObject}.
+	 * @param container
+	 *          the parent for adding component.
+	 * @param nextComponent
+	 *          the component before which new component should be added, may be <code>null</code>, so
+	 *          new component will be added as last child of parent.
+	 * @param target
+	 *          the {@link StatementTarget} where {@link Statement}'s (more precise - association) of
+	 *          new component should be added.
+	 */
+	public static void add(JavaInfo component,
+			VariableSupport variableSupport,
+			StatementGenerator statementGenerator,
+			AssociationObject associationObject,
+			JavaInfo container,
+			JavaInfo nextComponent,
+			StatementTarget target) throws Exception {
+		container.getBroadcastJava().addBefore(container, component);
+		// setup hierarchy
+		container.addChild(component, nextComponent);
+		// set variable support
+		component.setVariableSupport(variableSupport);
+		// add component and association using StatementGenerator
+		Association association = createAssociation(container, component, associationObject);
+		statementGenerator.add(component, target, association);
+		//
+		container.getBroadcastJava().addAfter(container, component);
+	}
+
+	/**
+	 * When container does not have special {@link Association}, then only {@link Association} from
+	 * component should be used.
+	 * <p>
+	 * When container has special {@link Association} and it is required, then {@link Association}
+	 * from component should be mixed with it in {@link CompoundAssociation}.
+	 */
+	private static Association createAssociation(JavaInfo container,
+			JavaInfo component,
+			AssociationObject associationObject) throws Exception {
+		associationObject = getNotNullAssociationObject(associationObject);
+		Association componentAssociation = component.getCreationSupport().getAssociation();
+		Association containerAssociation = associationObject.getAssociation();
+		// try to mix with container association
+		if (componentAssociation != null) {
+			if (associationObject.isRequired()) {
+				return new CompoundAssociation(componentAssociation, containerAssociation);
+			}
+			return componentAssociation;
+		}
+		// use container association
+		Assert.isNotNull(
+				containerAssociation,
+				"No special container association and no component creation association for %s and %s",
+				container,
+				component);
+		return containerAssociation;
+	}
+
+	/**
+	 * @return the given not null {@link AssociationObject} or {@link AssociationObject} with
+	 *         <code>null</code> as {@link Association}.
+	 */
+	private static AssociationObject getNotNullAssociationObject(
+			AssociationObject associationObject) {
+		if (associationObject == null) {
+			associationObject = new AssociationObject(null, false);
+		}
+		return associationObject;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Move
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Internal interface for providing {@link StatementTarget} during move.
+	 */
+	public interface IMoveTargetProvider {
+		void add() throws Exception;
+
+		void move() throws Exception;
+
+		StatementTarget getTarget() throws Exception;
+	}
+
+	/**
+	 * Moves component to new container.<br>
+	 * Move can be inner (i.e. move association) or adding from other container.
+	 *
+	 * @param component
+	 *          the component to move.
+	 * @param associationObject
+	 *          the container {@link AssociationObject}.
+	 * @param newParent
+	 *          the parent for adding component, may be old parent (so, we just move inside it), or
+	 *          new one, so we reparent component.
+	 * @param nextComponent
+	 *          the component before which new component should be added, may be <code>null</code>, so
+	 *          new component will be added as last child of parent.
+	 */
+	public static void move(JavaInfo component,
+			AssociationObject associationObject,
+			JavaInfo newParent,
+			JavaInfo nextComponent) throws Exception {
+		// pre-condition: move component before itself, ignore
+		if (nextComponent == component) {
+			return;
+		}
+		// do move
+		nextComponent = getNextComponent_useComponentOrder(component, newParent, nextComponent);
+		move0(component, associationObject, newParent, nextComponent);
+	}
+
+	private static void move0(final JavaInfo component,
+			final AssociationObject associationObject,
+			final JavaInfo newParent,
+			final JavaInfo nextComponent) throws Exception {
+		IMoveTargetProvider targetProvider = new IMoveTargetProvider() {
+			@Override
+			public void add() throws Exception {
+				newParent.addChild(component, nextComponent);
+			}
+
+			@Override
+			public void move() throws Exception {
+				newParent.moveChild(component, nextComponent);
+			}
+
+			@Override
+			public StatementTarget getTarget() throws Exception {
+				return JavaInfoUtils.getTarget(newParent, component, nextComponent);
+			}
+		};
+		moveProvider(component, associationObject, newParent, targetProvider);
+	}
+
+	/**
+	 * Moves component: inside of same container, or to new container.
+	 */
+	public static void moveTarget(final JavaInfo component,
+			AssociationObject associationObject,
+			final JavaInfo newParent,
+			final JavaInfo nextComponent,
+			final StatementTarget target) throws Exception {
+		IMoveTargetProvider targetProvider = new IMoveTargetProvider() {
+			@Override
+			public void add() throws Exception {
+				newParent.addChild(component, nextComponent);
+			}
+
+			@Override
+			public void move() throws Exception {
+				newParent.moveChild(component, nextComponent);
+			}
+
+			@Override
+			public StatementTarget getTarget() throws Exception {
+				return target;
+			}
+		};
+		moveProvider(component, associationObject, newParent, targetProvider);
+	}
+
+	/**
+	 * Moves component to new container.<br>
+	 * Move can be inner (i.e. move association) or adding from other container.
+	 *
+	 * @param component
+	 *          the component to move.
+	 * @param associationObject
+	 *          the container {@link AssociationObject}.
+	 * @param newParent
+	 *          the parent for adding component, may be old parent (so, we just move inside it), or
+	 *          new one, so we reparent component.
+	 * @param targetProvider
+	 *          the {@link IMoveTargetProvider} that is used to separate move operation from target
+	 *          {@link Statement} and position in {@link JavaInfo} children.
+	 */
+	public static void moveProvider(JavaInfo component,
+			AssociationObject associationObject,
+			JavaInfo newParent,
+			IMoveTargetProvider targetProvider) throws Exception {
+		Association oldAssociation = component.getAssociation();
+		associationObject = getNotNullAssociationObject(associationObject);
+		Association newAssociation = associationObject.getAssociation();
+		boolean newAssociationRequired = associationObject.isRequired();
+		//
+		ObjectInfo oldParent = component.getParent();
+		boolean isReparenting = oldParent != newParent;
+		newParent.getBroadcastJava().moveBefore0(component, oldParent, newParent);
+		newParent.getBroadcastJava().moveBefore(component, oldParent, newParent);
+		// remove association
+		// we do this now to avoid possible using association node as target
+		if (isReparenting || newAssociationRequired) {
+			materializeVariable(component);
+			oldAssociation.remove();
+		} else if (oldAssociation instanceof InvocationChildArrayAssociation
+				|| oldAssociation instanceof InvocationChildEllipsisAssociation) {
+			// support array
+			VariableSupport variableSupport = component.getVariableSupport();
+			if (variableSupport instanceof EmptyVariableSupport) {
+				((EmptyVariableSupport) variableSupport).materialize();
+			}
+			oldAssociation.remove();
+			newAssociationRequired = true;
+		}
+		// move component ASTNode's, prepare statements target
+		StatementTarget componentTarget;
+		{
+			componentTarget = targetProvider.getTarget();
+			component.getVariableSupport().ensureInstanceReadyAt(componentTarget);
+		}
+		// move/reparent component
+		if (isReparenting) {
+			oldParent.removeChild(component);
+			targetProvider.add();
+		} else {
+			targetProvider.move();
+		}
+		// now, when all moving are done, prepare association target
+		StatementTarget associationTarget =
+				component.getVariableSupport().getAssociationTarget(componentTarget);
+		// update association
+		if (isReparenting || newAssociationRequired) {
+			if (component.getAssociation() == null) {
+				newAssociation.add(component, associationTarget, null);
+			} else {
+				// check, may be we need to add one more association
+				if (newAssociation != null) {
+					CompoundAssociation compoundAssociation =
+							new CompoundAssociation(component.getAssociation());
+					compoundAssociation.add(newAssociation);
+					component.setAssociation(compoundAssociation);
+				}
+				// ask association about update to reflect new parent
+				component.getAssociation().setParent(newParent);
+			}
+		} else {
+			// for "lazy creation" - move association
+			// for other variables - it will be moved with other component statements
+			if (component.getVariableSupport() instanceof LazyVariableSupport) {
+				component.getAssociation().move(associationTarget);
+			}
+		}
+		// end move operation
+		newParent.getBroadcastJava().moveAfter(component, oldParent, newParent);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Target
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return new {@link StatementTarget} where {@link Statement}'s for new {@link JavaInfo} should
+	 *         be added to place them before given <code>nextChild</code>.
+	 *
+	 * @param parent
+	 *          the parent to which {@link JavaInfo} should be added.
+	 * @param child
+	 *          the child that will be added.
+	 * @param nextChild
+	 *          the {@link JavaInfo} before which next {@link JavaInfo} should be added, can be
+	 *          <code>null</code> that means that new {@link JavaInfo} should be added as last child
+	 *          of parent.
+	 */
+	public static StatementTarget getTarget(JavaInfo parent, JavaInfo child, JavaInfo nextChild)
+			throws Exception {
+		return new ChildTargetCalculator(parent, child, nextChild).getTarget();
+	}
+
+	/**
+	 * @return new {@link StatementTarget} where {@link Statement}'s should be added to place them
+	 *         before given <code>nextChild</code>.
+	 *
+	 * @param parent
+	 *          the parent to which {@link JavaInfo} should be added.
+	 * @param nextChild
+	 *          the {@link JavaInfo} before which next {@link JavaInfo} should be added, can be
+	 *          <code>null</code> that means that new {@link JavaInfo} should be added as last child
+	 *          of parent.
+	 */
+	public static StatementTarget getTarget(JavaInfo parent, JavaInfo nextChild) throws Exception {
+		return getTarget(parent, null, nextChild);
+	}
+
+	/**
+	 * @return new {@link StatementTarget} where {@link Statement}'s should be added.
+	 *
+	 * @param parent
+	 *          the parent to which {@link JavaInfo} should be added.
+	 */
+	public static StatementTarget getTarget(JavaInfo parent) throws Exception {
+		return getTarget(parent, null, null);
+	}
+
+	/**
+	 * Ensures that given {@link JavaInfo} has some "real" {@link VariableSupport}. For example we
+	 * materialize {@link EmptyVariableSupport} because we may need to reference creation/association
+	 * {@link Statement}.
+	 */
+	public static void materializeVariable(JavaInfo javaInfo) throws Exception {
+		if (javaInfo.getVariableSupport() instanceof EmptyVariableSupport) {
+			EmptyVariableSupport variableSupport = (EmptyVariableSupport) javaInfo.getVariableSupport();
+			variableSupport.materialize();
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Creation sequence
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sorts {@link JavaInfo}'s by the time when they are created on execution flow.
+	 */
+	public static void sortComponentsByFlow(final List<JavaInfo> components) {
+		if (components.isEmpty()) {
+			return;
+		}
+		// prepare ExecutionFlowDescription
+		ExecutionFlowDescription flowDescription;
+		{
+			JavaInfo someComponent = components.get(0);
+			flowDescription = getState(someComponent).getFlowDescription();
+		}
+		// prepare new List, with components in execution flow order
+		final List<JavaInfo> sortedComponents = Lists.newArrayList();
+		ExecutionFlowUtils.visit(
+				new VisitingContext(true),
+				flowDescription,
+				new ExecutionFlowFrameVisitor() {
+					@Override
+					public void postVisit(ASTNode node) {
+						for (JavaInfo component : components) {
+							if (component.getCreationSupport().getNode() == node) {
+								sortedComponents.add(component);
+								break;
+							}
+						}
+					}
+				});
+		// sort original List
+		Collections.sort(components, new Comparator<JavaInfo>() {
+			@Override
+			public int compare(JavaInfo o1, JavaInfo o2) {
+				int index_1 = sortedComponents.indexOf(o1);
+				int index_2 = sortedComponents.indexOf(o2);
+				return index_1 - index_2;
+			}
+		});
+	}
+
+	/**
+	 * Sorts {@link ASTNode}'s by the time when they are visited on execution flow. {@link ASTNode}'s
+	 * not included into execution flow should be removed.
+	 *
+	 * @param onEnter
+	 *          is <code>true</code> if {@link ASTNode} considered as visited on enter, use
+	 *          <code>false</code> to consider as visited on exit.
+	 */
+	public static void sortNodesByFlow(ExecutionFlowDescription flowDescription,
+			final boolean onEnter,
+			final List<? extends ASTNode> nodes) {
+		final List<ASTNode> sortedNodes = Lists.newArrayList();
+		ExecutionFlowUtils.visit(
+				new VisitingContext(true),
+				flowDescription,
+				new ExecutionFlowFrameVisitor() {
+					@Override
+					public boolean enterFrame(ASTNode node) {
+						if (onEnter) {
+							addSortedNode(node);
+						}
+						return super.enterFrame(node);
+					}
+
+					@Override
+					public void leaveFrame(ASTNode node) {
+						if (!onEnter) {
+							addSortedNode(node);
+						}
+					}
+
+					@Override
+					public void preVisit(ASTNode node) {
+						if (onEnter) {
+							addSortedNode(node);
+						}
+					}
+
+					@Override
+					public void postVisit(ASTNode node) {
+						if (!onEnter) {
+							addSortedNode(node);
+						}
+					}
+
+					private void addSortedNode(ASTNode node) {
+						if (nodes.contains(node)) {
+							sortedNodes.add(node);
+						}
+					}
+				});
+		// remove nodes that are not visited on execution flow
+		for (Iterator<? extends ASTNode> I = nodes.iterator(); I.hasNext();) {
+			ASTNode node = I.next();
+			if (!sortedNodes.contains(node)) {
+				I.remove();
+			}
+		}
+		// sort original List
+		Collections.sort(nodes, new Comparator<ASTNode>() {
+			@Override
+			public int compare(ASTNode o1, ASTNode o2) {
+				int index_1 = sortedNodes.indexOf(o1);
+				int index_2 = sortedNodes.indexOf(o2);
+				return index_1 - index_2;
+			}
+		});
+	}
+
+	/**
+	 * @return <code>true</code> if {@link JavaInfo} is already created at/before location specified
+	 *         by {@link NodeTarget}.
+	 */
+	public static boolean isCreatedAtTarget(JavaInfo javaInfo, NodeTarget target) {
+		// special case: JavaInfo with constructor as node
+		{
+			ASTNode node = javaInfo.getCreationSupport().getNode();
+			if (node instanceof MethodDeclaration) {
+				MethodDeclaration methodDeclaration = (MethodDeclaration) node;
+				if (methodDeclaration.isConstructor()) {
+					return true;
+				}
+			}
+		}
+		// StatementTarget
+		{
+			StatementTarget statementTarget = target.getStatementTarget();
+			if (statementTarget != null) {
+				return isCreatedAt(javaInfo, statementTarget);
+			}
+		}
+		// BodyDeclarationTarget
+		{
+			BodyDeclarationTarget bodyDeclarationTarget = target.getBodyDeclarationTarget();
+			return isCreatedAt(javaInfo, bodyDeclarationTarget);
+		}
+	}
+
+	/**
+	 * @return <code>true</code> if {@link JavaInfo} is already created at location specified by
+	 *         {@link StatementTarget}.
+	 */
+	private static boolean isCreatedAt(JavaInfo javaInfo, StatementTarget target) {
+		ExecutionFlowDescription flowDescription = getState(javaInfo).getFlowDescription();
+		ASTNode javaInfoNode = javaInfo.getCreationSupport().getNode();
+		// Statement
+		{
+			Statement statement = target.getStatement();
+			if (statement != null) {
+				List<ASTNode> nodes = Lists.newArrayList(statement, javaInfoNode);
+				sortNodesByFlow(flowDescription, target.isBefore(), nodes);
+				return nodes.get(0) == javaInfoNode;
+			}
+		}
+		// Block
+		{
+			Block block = target.getBlock();
+			List<ASTNode> nodes = Lists.newArrayList(block, javaInfoNode);
+			sortNodesByFlow(flowDescription, target.isBefore(), nodes);
+			return nodes.get(0) == javaInfoNode;
+		}
+	}
+
+	/**
+	 * @return <code>true</code> if {@link JavaInfo} is already created at location specified by
+	 *         {@link BodyDeclarationTarget}.
+	 */
+	private static boolean isCreatedAt(JavaInfo javaInfo, BodyDeclarationTarget target) {
+		ExecutionFlowDescription flowDescription = getState(javaInfo).getFlowDescription();
+		ASTNode javaInfoNode = javaInfo.getCreationSupport().getNode();
+		// BodyDeclaration
+		{
+			BodyDeclaration bodyDeclaration = target.getDeclaration();
+			if (bodyDeclaration != null) {
+				List<ASTNode> nodes = Lists.newArrayList(bodyDeclaration, javaInfoNode);
+				sortNodesByFlow(flowDescription, target.isBefore(), nodes);
+				return nodes.get(0) == javaInfoNode;
+			}
+		}
+		// TypeDeclaration
+		{
+			TypeDeclaration typeDeclaration = target.getType();
+			List<ASTNode> nodes = Lists.newArrayList(typeDeclaration, javaInfoNode);
+			sortNodesByFlow(flowDescription, target.isBefore(), nodes);
+			return nodes.get(0) == javaInfoNode;
+		}
+	}
+
+	/**
+	 * @return the {@link StatementTarget} such that all given {@link JavaInfo} are created at this
+	 *         target, so can be referenced.
+	 */
+	public static StatementTarget getStatementTarget_whenAllCreated(
+			List<? extends JavaInfo> components) throws Exception {
+		Assert.isTrue(!components.isEmpty(), "Can not provide target for empty components list.");
+		// prepare target after last component
+		NodeTarget nodeTarget_afterLastComponent;
+		{
+			List<JavaInfo> componentsCopy = Lists.newArrayList(components);
+			sortComponentsByFlow(componentsCopy);
+			JavaInfo lastComponent = componentsCopy.get(componentsCopy.size() - 1);
+			nodeTarget_afterLastComponent = getNodeTarget_afterCreation(lastComponent);
+		}
+		// convert NodeTarget into StatementTarget
+		StatementTarget statementTarget = nodeTarget_afterLastComponent.getStatementTarget();
+		if (statementTarget != null) {
+			return statementTarget;
+		}
+		// probably all components created in fields, so use "this" target
+		JavaInfo rootJava = components.get(0).getRootJava();
+		if (rootJava.getCreationSupport() instanceof ThisCreationSupport) {
+			return rootJava.getVariableSupport().getStatementTarget();
+		}
+		// use "flow" method
+		ExecutionFlowDescription flowDescription = getState(rootJava).getFlowDescription();
+		MethodDeclaration startMethod = flowDescription.getStartMethods().get(0);
+		return new StatementTarget(startMethod, true);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// NodeTarget
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link NodeTarget} directly before creation of given {@link JavaInfo}.
+	 */
+	public static NodeTarget getNodeTarget_beforeCreation(JavaInfo javaInfo) throws Exception {
+		return getNodeTarget_relativeCreation(javaInfo, true);
+	}
+
+	/**
+	 * @return the {@link NodeTarget} directly after creation of given {@link JavaInfo}.
+	 */
+	public static NodeTarget getNodeTarget_afterCreation(JavaInfo javaInfo) throws Exception {
+		return getNodeTarget_relativeCreation(javaInfo, false);
+	}
+
+	/**
+	 * @return the {@link NodeTarget} relative creation of given {@link JavaInfo}.
+	 */
+	private static NodeTarget getNodeTarget_relativeCreation(JavaInfo javaInfo, boolean before)
+			throws Exception {
+		CreationSupport creationSupport = javaInfo.getCreationSupport();
+		// Special support for control of wrapper/viewer.
+		{
+			if (creationSupport instanceof WrapperMethodControlCreationSupport) {
+				StatementTarget statementTarget = javaInfo.getVariableSupport().getStatementTarget();
+				if (statementTarget != null) {
+					return new NodeTarget(statementTarget);
+				}
+			}
+		}
+		// general case
+		ASTNode node = creationSupport.getNode();
+		{
+			Statement statement = AstNodeUtils.getEnclosingStatement(node);
+			if (statement != null) {
+				return new NodeTarget(new StatementTarget(statement, before));
+			}
+		}
+		{
+			BodyDeclaration bodyDeclaration = AstNodeUtils.getEnclosingNode(node, BodyDeclaration.class);
+			Assert.isNotNull(
+					bodyDeclaration,
+					"No Statement and no BodyDeclaration for %s %s in %s",
+					javaInfo,
+					node,
+					node.getRoot());
+			return new NodeTarget(new BodyDeclarationTarget(bodyDeclaration, before));
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Rendering
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Schedules invocation of {@link IJavaInfoRendering#render()} when execution flow leaves
+	 * constructor.
+	 * <p>
+	 * This method should specify that this rendering is performed for some active {@link Statement}
+	 * in {@link ExecutionFlowDescription}. We use constructor body as such {@link Statement}.
+	 *
+	 * @see IJavaInfoRendering IJavaInfoRendering for more information.
+	 */
+	public static void scheduleSpecialRendering(JavaInfo javaInfo) {
+		if (javaInfo instanceof IJavaInfoRendering) {
+			scheduleSpecialRendering(javaInfo, (IJavaInfoRendering) javaInfo);
+		}
+	}
+
+	/**
+	 * Schedules invocation of {@link IJavaInfoRendering#render()} when execution flow leaves
+	 * constructor.
+	 * <p>
+	 * This method should specify that this rendering is performed for some active {@link Statement}
+	 * in {@link ExecutionFlowDescription}. We use constructor body as such {@link Statement}.
+	 *
+	 * @see IJavaInfoRendering IJavaInfoRendering for more information.
+	 */
+	public static void scheduleSpecialRendering(JavaInfo javaInfo,
+			final IJavaInfoRendering rendering) {
+		if (!(javaInfo.getCreationSupport() instanceof ThisCreationSupport)) {
+			return;
+		}
+		// prepare JavaInfo elements
+		final EditorState editorState = getState(javaInfo);
+		final MethodDeclaration constructor =
+				(MethodDeclaration) javaInfo.getCreationSupport().getNode();
+		final Statement statement = constructor.getBody();
+		// add rendering listener
+		javaInfo.addBroadcastListener(new EvaluationEventListener() {
+			@Override
+			public void leaveFrame(ASTNode node) throws Exception {
+				if (node == constructor) {
+					ExecutionFlowDescription flowDescription = editorState.getFlowDescription();
+					flowDescription.enterStatement(statement);
+					try {
+						rendering.render();
+					} finally {
+						flowDescription.leaveStatement(statement);
+					}
+				}
+			}
+		});
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Wrappers
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sometimes real component is created using some wrapper, for example as {@link Viewer} creates
+	 * {@link Control}. We should drop {@link Viewer} in code, but layout policies should see that we
+	 * drop {@link Control}. So we should "extract" {@link Control} {@link JavaInfo} from
+	 * {@link Viewer} {@link JavaInfo}.
+	 *
+	 * @return the wrapped {@link JavaInfo} or original {@link JavaInfo} if there are no wrapping.
+	 */
+	public static JavaInfo getWrapped(JavaInfo original) throws Exception {
+		if (original instanceof IWrapperInfo) {
+			IWrapperInfo wrapperInfo = (IWrapperInfo) original;
+			return wrapperInfo.getWrapper().getWrappedInfo();
+		}
+		return original;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Deleting
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Deletes children and related nodes of given {@link JavaInfo}.<br>
+	 *
+	 * @param removeFromParent
+	 *          is <code>true</code>, also removes from from parent. Usually it is <code>true</code>,
+	 *          but exposed components can not be really deleted, because they belong to its host, so
+	 *          only children and related nodes can be removed.
+	 */
+	public static void deleteJavaInfo(JavaInfo javaInfo, boolean removeFromParent) throws Exception {
+		// delete children
+		List<ObjectInfo> children = ImmutableList.copyOf(javaInfo.getChildren());
+		for (ObjectInfo child : children) {
+			// There are cases when children of some parent are "linked", so one deletes other on delete.
+			// So, we should check, may be child is already deleted.
+			if (!child.isDeleted()) {
+				child.delete();
+			}
+		}
+		// remove statements of related nodes
+		for (ASTNode node : javaInfo.getRelatedNodes()) {
+			// we can have several related nodes in same Statement, so may be already removed
+			if (AstNodeUtils.isDanglingNode(node)) {
+				continue;
+			}
+			// may be creation node, when we don't want to remove it
+			if (!removeFromParent && node == javaInfo.getCreationSupport().getNode()) {
+				continue;
+			}
+			// do remove
+			Statement statement = AstNodeUtils.getEnclosingStatement(node);
+			if (statement != null) {
+				javaInfo.getEditor().removeStatement(statement);
+			}
+		}
+		// remove from parent
+		if (removeFromParent) {
+			javaInfo.getParent().removeChild(javaInfo);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Reparse on dependency change
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final String DEPENDENCY_KEY = "JavaInfo.dependencies";
+
+	/**
+	 * @return <code>true</code> if dependency information for hierarchy was prepared.
+	 */
+	public static boolean hasDependencyInformation(JavaInfo javaInfo) throws Exception {
+		return javaInfo.getEditor().getGlobalValue(DEPENDENCY_KEY) != null;
+	}
+
+	/**
+	 * @return <code>true</code> if one of the referenced types was changed.
+	 */
+	@SuppressWarnings("unchecked")
+	public static boolean isDependencyChanged(JavaInfo javaInfo) throws Exception {
+		Map<IResource, Long> dependencies =
+				(Map<IResource, Long>) javaInfo.getEditor().getGlobalValue(DEPENDENCY_KEY);
+		if (dependencies != null) {
+			for (Map.Entry<IResource, Long> entry : dependencies.entrySet()) {
+				if (entry.getKey().getModificationStamp() != entry.getValue()) {
+					return true;
+				}
+			}
+		}
+		return false;
+	}
+
+	/**
+	 * Remembers dependency information for given {@link JavaInfo}, i.e. time stamps for referenced
+	 * types.
+	 */
+	public static void rememberDependency(JavaInfo javaInfo) throws Exception {
+		AstEditor editor = javaInfo.getEditor();
+		// prepare dependencies
+		Map<IResource, Long> dependencies = Maps.newHashMap();
+		addDependencies(dependencies, Sets.<String>newTreeSet(), editor.getModelUnit(), 0);
+		// don't use this compilation unit resource
+		dependencies.remove(editor.getModelUnit().getResource());
+		// remember dependencies
+		editor.putGlobalValue(DEPENDENCY_KEY, dependencies);
+	}
+
+	/**
+	 * Adds dependencies for given {@link ICompilationUnit}.
+	 */
+	private static void addDependencies(final Map<IResource, Long> dependencies,
+			final Set<String> checkedTypes,
+			final ICompilationUnit modelUnit,
+			final int level) throws Exception {
+		if (level < 5 && dependencies.size() < 100) {
+			final IJavaProject javaProject = modelUnit.getJavaProject();
+			// add current resource
+			{
+				IResource resource = modelUnit.getResource();
+				dependencies.put(resource, resource.getModificationStamp());
+			}
+			// add references
+			CompilationUnit astUnit = CodeUtils.parseCompilationUnit(modelUnit);
+			astUnit.accept(new ASTVisitor() {
+				@Override
+				public void endVisit(QualifiedName node) {
+					addNewType(node.resolveTypeBinding());
+				}
+
+				@Override
+				public void endVisit(SimpleName node) {
+					addNewType(node.resolveTypeBinding());
+				}
+
+				private void addNewType(final ITypeBinding binding) {
+					if (binding == null) {
+						return;
+					}
+					ExecutionUtils.runIgnore(new RunnableEx() {
+						@Override
+						public void run() throws Exception {
+							String typeName = AstNodeUtils.getFullyQualifiedName(binding, false);
+							if (typeName.indexOf('.') != -1 && !checkedTypes.contains(typeName)) {
+								checkedTypes.add(typeName);
+								IType type = javaProject.findType(typeName);
+								if (type != null && !type.isBinary()) {
+									addDependencies(dependencies, checkedTypes, type.getCompilationUnit(), level + 1);
+								}
+							}
+						}
+					});
+				}
+			});
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// EditorState
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link EditorState} instance for given {@link JavaInfo}.
+	 */
+	public static EditorState getState(JavaInfo javaInfo) {
+		return EditorState.get(javaInfo.getEditor());
+	}
+
+	/**
+	 * @return the {@link ClassLoader} for given {@link JavaInfo}.
+	 */
+	public static ClassLoader getClassLoader(JavaInfo javaInfo) {
+		return getState(javaInfo).getEditorLoader();
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/TopBoundsSupport.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/TopBoundsSupport.java
index b356f4c2d..c3e433fd3 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/TopBoundsSupport.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/TopBoundsSupport.java
@@ -31,113 +31,113 @@
  * @coverage core.model
  */
 public abstract class TopBoundsSupport implements ITopBoundsSupport {
-  private static final QualifiedName KEY_DESIGN_BOUNDS =
-      new QualifiedName(DesignerPlugin.PLUGIN_ID, "designBounds");
-  protected final AbstractComponentInfo m_component;
+	private static final QualifiedName KEY_DESIGN_BOUNDS =
+			new QualifiedName(DesignerPlugin.PLUGIN_ID, "designBounds");
+	protected final AbstractComponentInfo m_component;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public TopBoundsSupport(AbstractComponentInfo componentInfo) {
-    m_component = componentInfo;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public TopBoundsSupport(AbstractComponentInfo componentInfo) {
+		m_component = componentInfo;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Size
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Applies size to component.
-   */
-  public abstract void apply() throws Exception;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Size
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Applies size to component.
+	 */
+	public abstract void apply() throws Exception;
 
-  @Override
-  public abstract void setSize(int width, int height) throws Exception;
+	@Override
+	public abstract void setSize(int width, int height) throws Exception;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Test
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Shows component for testing/preview.
-   *
-   * @return <code>true</code> if something really was shown, so reparse required.
-   */
-  public abstract boolean show() throws Exception;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Test
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Shows component for testing/preview.
+	 *
+	 * @return <code>true</code> if something really was shown, so reparse required.
+	 */
+	public abstract boolean show() throws Exception;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link IResource} for this component.
-   */
-  protected final IResource getUnderlyingResource() throws Exception {
-    return m_component.getEditor().getModelUnit().getUnderlyingResource();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link IResource} for this component.
+	 */
+	protected final IResource getUnderlyingResource() throws Exception {
+		return m_component.getEditor().getModelUnit().getUnderlyingResource();
+	}
 
-  /**
-   * @return <code>true</code> if component has invocation with one of the given signatures.
-   */
-  protected final boolean hasMethodInvocations(String[] signatures) throws Exception {
-    for (int i = 0; i < signatures.length; i++) {
-      String signature = signatures[i];
-      if (m_component.getMethodInvocation(signature) != null) {
-        return true;
-      }
-    }
-    // not found
-    return false;
-  }
+	/**
+	 * @return <code>true</code> if component has invocation with one of the given signatures.
+	 */
+	protected final boolean hasMethodInvocations(String[] signatures) throws Exception {
+		for (int i = 0; i < signatures.length; i++) {
+			String signature = signatures[i];
+			if (m_component.getMethodInvocation(signature) != null) {
+				return true;
+			}
+		}
+		// not found
+		return false;
+	}
 
-  /**
-   * @return the size remembered in {@link IResource} properties for this component.
-   */
-  protected final Dimension getResourceSize() throws Exception {
-    int width;
-    int height;
-    // set defaults
-    {
-      Dimension defaultSize = getDefaultSize();
-      width = defaultSize.width;
-      height = defaultSize.height;
-    }
-    // check for size from resource properties
-    {
-      String designBoundsString = getUnderlyingResource().getPersistentProperty(KEY_DESIGN_BOUNDS);
-      if (designBoundsString != null) {
-        String[] parts = StringUtils.split(designBoundsString);
-        width = Integer.parseInt(parts[0]);
-        height = Integer.parseInt(parts[1]);
-      }
-    }
-    // ensure positive size
-    width = Math.max(width, 1);
-    height = Math.max(height, 1);
-    // final size
-    return new Dimension(width, height);
-  }
+	/**
+	 * @return the size remembered in {@link IResource} properties for this component.
+	 */
+	protected final Dimension getResourceSize() throws Exception {
+		int width;
+		int height;
+		// set defaults
+		{
+			Dimension defaultSize = getDefaultSize();
+			width = defaultSize.width;
+			height = defaultSize.height;
+		}
+		// check for size from resource properties
+		{
+			String designBoundsString = getUnderlyingResource().getPersistentProperty(KEY_DESIGN_BOUNDS);
+			if (designBoundsString != null) {
+				String[] parts = StringUtils.split(designBoundsString);
+				width = Integer.parseInt(parts[0]);
+				height = Integer.parseInt(parts[1]);
+			}
+		}
+		// ensure positive size
+		width = Math.max(width, 1);
+		height = Math.max(height, 1);
+		// final size
+		return new Dimension(width, height);
+	}
 
-  /**
-   * Remembers the size of component into {@link IResource} properties for this component.
-   */
-  protected final void setResourceSize(int width, int height) throws Exception {
-    String designBoundsString = width + " " + height;
-    getUnderlyingResource().setPersistentProperty(KEY_DESIGN_BOUNDS, designBoundsString);
-  }
+	/**
+	 * Remembers the size of component into {@link IResource} properties for this component.
+	 */
+	protected final void setResourceSize(int width, int height) throws Exception {
+		String designBoundsString = width + " " + height;
+		getUnderlyingResource().setPersistentProperty(KEY_DESIGN_BOUNDS, designBoundsString);
+	}
 
-  /**
-   * @return the default size for this component.
-   */
-  protected Dimension getDefaultSize() {
-    IPreferenceStore preferences = m_component.getDescription().getToolkit().getPreferences();
-    int width = preferences.getInt(IPreferenceConstants.P_GENERAL_DEFAULT_TOP_WIDTH);
-    int height = preferences.getInt(IPreferenceConstants.P_GENERAL_DEFAULT_TOP_HEIGHT);
-    return new Dimension(width, height);
-  }
+	/**
+	 * @return the default size for this component.
+	 */
+	protected Dimension getDefaultSize() {
+		IPreferenceStore preferences = m_component.getDescription().getToolkit().getPreferences();
+		int width = preferences.getInt(IPreferenceConstants.P_GENERAL_DEFAULT_TOP_WIDTH);
+		int height = preferences.getInt(IPreferenceConstants.P_GENERAL_DEFAULT_TOP_HEIGHT);
+		return new Dimension(width, height);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/clipboard/ClipboardCommand.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/clipboard/ClipboardCommand.java
index 438f05776..354264ce3 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/clipboard/ClipboardCommand.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/clipboard/ClipboardCommand.java
@@ -21,15 +21,15 @@
  * @coverage core.model.clipboard
  */
 public abstract class ClipboardCommand implements Serializable {
-  private static final long serialVersionUID = 0L;
+	private static final long serialVersionUID = 0L;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Execute
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Executes this {@link ClipboardCommand} in context of its {@link JavaInfo}.
-   */
-  public abstract void execute(JavaInfo javaInfo) throws Exception;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Execute
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Executes this {@link ClipboardCommand} in context of its {@link JavaInfo}.
+	 */
+	public abstract void execute(JavaInfo javaInfo) throws Exception;
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/clipboard/ComponentClipboardCommand.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/clipboard/ComponentClipboardCommand.java
index 0d588c0ad..92861ba84 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/clipboard/ComponentClipboardCommand.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/clipboard/ComponentClipboardCommand.java
@@ -19,22 +19,22 @@
  * @coverage core.model.clipboard
  */
 public abstract class ComponentClipboardCommand<T> extends ClipboardCommand {
-  private static final long serialVersionUID = 0L;
+	private static final long serialVersionUID = 0L;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Execute
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  @SuppressWarnings("unchecked")
-  public final void execute(JavaInfo javaInfo) throws Exception {
-    T container = (T) javaInfo;
-    execute(container);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Execute
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	@SuppressWarnings("unchecked")
+	public final void execute(JavaInfo javaInfo) throws Exception {
+		T container = (T) javaInfo;
+		execute(container);
+	}
 
-  /**
-   * Implementation of {@link #execute(JavaInfo)} for <code>T</code>.
-   */
-  protected abstract void execute(T component) throws Exception;
+	/**
+	 * Implementation of {@link #execute(JavaInfo)} for <code>T</code>.
+	 */
+	protected abstract void execute(T component) throws Exception;
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/clipboard/ComponentInfoMemento.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/clipboard/ComponentInfoMemento.java
index da712544d..420f58a69 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/clipboard/ComponentInfoMemento.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/clipboard/ComponentInfoMemento.java
@@ -26,82 +26,82 @@
  * @coverage core.model.clipboard
  */
 public final class ComponentInfoMemento extends JavaInfoMemento {
-  private static final long serialVersionUID = 0L;
-  private final Rectangle m_bounds;
-  private final byte[] m_imageBytes;
-  private transient Image m_image;
+	private static final long serialVersionUID = 0L;
+	private final Rectangle m_bounds;
+	private final byte[] m_imageBytes;
+	private transient Image m_image;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected ComponentInfoMemento(AbstractComponentInfo component) throws Exception {
-    super(component);
-    m_bounds = component.getAbsoluteBounds();
-    // prepare bytes for image
-    {
-      Image image = component.getImage();
-      if (image != null) {
-        m_imageBytes = ImageUtils.getBytesPNG(image);
-      } else {
-        m_imageBytes = null;
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected ComponentInfoMemento(AbstractComponentInfo component) throws Exception {
+		super(component);
+		m_bounds = component.getAbsoluteBounds();
+		// prepare bytes for image
+		{
+			Image image = component.getImage();
+			if (image != null) {
+				m_imageBytes = ImageUtils.getBytesPNG(image);
+			} else {
+				m_imageBytes = null;
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the image of component, recorded from source component.
-   */
-  public Image getImage() {
-    if (m_image == null && m_imageBytes != null) {
-      m_image = new Image(null, new ByteArrayInputStream(m_imageBytes));
-    }
-    return m_image;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the image of component, recorded from source component.
+	 */
+	public Image getImage() {
+		if (m_image == null && m_imageBytes != null) {
+			m_image = new Image(null, new ByteArrayInputStream(m_imageBytes));
+		}
+		return m_image;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Creation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public JavaInfo create(JavaInfo existingHierarchyObject) throws Exception {
-    AbstractComponentInfo component = (AbstractComponentInfo) super.create(existingHierarchyObject);
-    component.setBounds(m_bounds);
-    component.setModelBounds(m_bounds);
-    return component;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Creation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public JavaInfo create(JavaInfo existingHierarchyObject) throws Exception {
+		AbstractComponentInfo component = (AbstractComponentInfo) super.create(existingHierarchyObject);
+		component.setBounds(m_bounds);
+		component.setModelBounds(m_bounds);
+		return component;
+	}
 
-  @Override
-  public void apply() throws Exception {
-    super.apply();
-    // now operation in finished and we can dispose image
-    if (m_image != null) {
-      m_image.dispose();
-    }
-  }
+	@Override
+	public void apply() throws Exception {
+		super.apply();
+		// now operation in finished and we can dispose image
+		if (m_image != null) {
+			m_image.dispose();
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the associated {@link Image} of given <code>component</code> if this component has the
-   *         associated {@link ComponentInfoMemento}. Otherwise returns <code>null</code>.
-   */
-  public static Image getImage(AbstractComponentInfo component) {
-    ComponentInfoMemento memento =
-        (ComponentInfoMemento) component.getArbitraryValue(JavaInfoMemento.KEY_MEMENTO);
-    if (memento != null) {
-      return memento.getImage();
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the associated {@link Image} of given <code>component</code> if this component has the
+	 *         associated {@link ComponentInfoMemento}. Otherwise returns <code>null</code>.
+	 */
+	public static Image getImage(AbstractComponentInfo component) {
+		ComponentInfoMemento memento =
+				(ComponentInfoMemento) component.getArbitraryValue(JavaInfoMemento.KEY_MEMENTO);
+		if (memento != null) {
+			return memento.getImage();
+		}
+		return null;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/clipboard/IClipboardCreationSupport.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/clipboard/IClipboardCreationSupport.java
index 9e8eee91b..56a7fc66d 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/clipboard/IClipboardCreationSupport.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/clipboard/IClipboardCreationSupport.java
@@ -23,19 +23,19 @@
  * @coverage core.model.clipboard
  */
 public abstract class IClipboardCreationSupport implements Serializable {
-  private static final long serialVersionUID = 0L;
+	private static final long serialVersionUID = 0L;
 
-  /**
-   * @param rootObject
-   *          the root {@link JavaInfo} to which new {@link JavaInfo} will be added.
-   *
-   * @return the {@link CreationSupport} for creating {@link JavaInfo}.
-   */
-  public abstract CreationSupport create(JavaInfo rootObject) throws Exception;
+	/**
+	 * @param rootObject
+	 *          the root {@link JavaInfo} to which new {@link JavaInfo} will be added.
+	 *
+	 * @return the {@link CreationSupport} for creating {@link JavaInfo}.
+	 */
+	public abstract CreationSupport create(JavaInfo rootObject) throws Exception;
 
-  /**
-   * Notification that {@link JavaInfo} was created using this {@link CreationSupport}.
-   */
-  public void apply(JavaInfo javaInfo) throws Exception {
-  }
+	/**
+	 * Notification that {@link JavaInfo} was created using this {@link CreationSupport}.
+	 */
+	public void apply(JavaInfo javaInfo) throws Exception {
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/clipboard/IClipboardImplicitCreationSupport.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/clipboard/IClipboardImplicitCreationSupport.java
index eda3c52e4..3d1338fc8 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/clipboard/IClipboardImplicitCreationSupport.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/clipboard/IClipboardImplicitCreationSupport.java
@@ -30,11 +30,11 @@
  * @coverage core.model.clipboard
  */
 public abstract interface IClipboardImplicitCreationSupport extends Serializable {
-  /**
-   * Returns the child of given host, that corresponds to this {@link IImplicitCreationSupport}.
-   *
-   * @param host
-   *          the host {@link JavaInfo} to find children in.
-   */
-  JavaInfo find(JavaInfo host) throws Exception;
+	/**
+	 * Returns the child of given host, that corresponds to this {@link IImplicitCreationSupport}.
+	 *
+	 * @param host
+	 *          the host {@link JavaInfo} to find children in.
+	 */
+	JavaInfo find(JavaInfo host) throws Exception;
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/clipboard/IClipboardSourceProvider.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/clipboard/IClipboardSourceProvider.java
index bbb04d4e4..cbcd4d0c2 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/clipboard/IClipboardSourceProvider.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/clipboard/IClipboardSourceProvider.java
@@ -20,9 +20,9 @@
  * @coverage core.model.clipboard
  */
 public interface IClipboardSourceProvider {
-  /**
-   * @return the Java source that that has same value as current value of given
-   *         {@link GenericProperty}, or <code>null</code> if no such source can be provided.
-   */
-  String getClipboardSource(GenericProperty property) throws Exception;
+	/**
+	 * @return the Java source that that has same value as current value of given
+	 *         {@link GenericProperty}, or <code>null</code> if no such source can be provided.
+	 */
+	String getClipboardSource(GenericProperty property) throws Exception;
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/clipboard/ImplicitChildCommand.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/clipboard/ImplicitChildCommand.java
index 1318f14f1..52cd78301 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/clipboard/ImplicitChildCommand.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/clipboard/ImplicitChildCommand.java
@@ -24,36 +24,36 @@
  * @coverage core.model.clipboard
  */
 final class ImplicitChildCommand extends ClipboardCommand {
-  private static final long serialVersionUID = 0L;
-  private final IClipboardImplicitCreationSupport m_implicitCreation;
-  private final List<ClipboardCommand> m_commands = Lists.newArrayList();
+	private static final long serialVersionUID = 0L;
+	private final IClipboardImplicitCreationSupport m_implicitCreation;
+	private final List<ClipboardCommand> m_commands = Lists.newArrayList();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ImplicitChildCommand(JavaInfo child) throws Exception {
-    m_implicitCreation =
-        ((IImplicitCreationSupport) child.getCreationSupport()).getImplicitClipboard();
-    if (m_implicitCreation != null) {
-      JavaInfoMemento.cleanUpAnonymous(m_implicitCreation);
-      JavaInfoMemento.addCommands(child, m_commands);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ImplicitChildCommand(JavaInfo child) throws Exception {
+		m_implicitCreation =
+				((IImplicitCreationSupport) child.getCreationSupport()).getImplicitClipboard();
+		if (m_implicitCreation != null) {
+			JavaInfoMemento.cleanUpAnonymous(m_implicitCreation);
+			JavaInfoMemento.addCommands(child, m_commands);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Command
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void execute(JavaInfo host) throws Exception {
-    if (m_implicitCreation != null) {
-      JavaInfo child = m_implicitCreation.find(host);
-      for (ClipboardCommand command : m_commands) {
-        command.execute(child);
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Command
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void execute(JavaInfo host) throws Exception {
+		if (m_implicitCreation != null) {
+			JavaInfo child = m_implicitCreation.find(host);
+			for (ClipboardCommand command : m_commands) {
+				command.execute(child);
+			}
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/clipboard/JavaInfoMemento.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/clipboard/JavaInfoMemento.java
index 1eb2a0fcc..4d59272e1 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/clipboard/JavaInfoMemento.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/clipboard/JavaInfoMemento.java
@@ -47,203 +47,203 @@
  * @coverage core.model.clipboard
  */
 public class JavaInfoMemento implements Serializable {
-  private static final long serialVersionUID = 0L;
-  /**
-   * The key under which {@link JavaInfoMemento} registers itself in created {@link JavaInfo}.
-   */
-  public static final String KEY_MEMENTO = "KEY_MEMENTO";
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Creation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link JavaInfoMemento} for given {@link JavaInfo}.
-   */
-  public static JavaInfoMemento createMemento(JavaInfo javaInfo) throws Exception {
-    if (javaInfo instanceof AbstractComponentInfo) {
-      return new ComponentInfoMemento((AbstractComponentInfo) javaInfo);
-    }
-    return new JavaInfoMemento(javaInfo);
-  }
-
-  /**
-   * Checks that component can be copy/paste, i.e. {@link JavaInfoMemento} can be created, but don't
-   * really create it. We use this to enable/disable copy/cut actions on selection change.
-   *
-   * @return <code>true</code> if {@link JavaInfoMemento} can be created for given {@link JavaInfo}.
-   */
-  public static boolean hasMemento(JavaInfo javaInfo) {
-    try {
-      IClipboardCreationSupport clipboard = javaInfo.getCreationSupport().getClipboard();
-      return clipboard != null;
-    } catch (Throwable e) {
-      return false;
-    }
-  }
-
-  /**
-   * If given {@link JavaInfo} was created from some {@link JavaInfoMemento}, then applies this
-   * memento.
-   */
-  public static void apply(JavaInfo javaInfo) throws Exception {
-    JavaInfoMemento memento = (JavaInfoMemento) javaInfo.getArbitraryValue(KEY_MEMENTO);
-    memento.apply();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance fields
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final String m_componentClassName;
-  private final IClipboardCreationSupport m_creationSupport;
-  private final List<ClipboardCommand> m_commands = Lists.newArrayList();
-
-  //the variable.field name must be kept, it's not contained in javaInfo created during paste.
-  private String m_variableName;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected JavaInfoMemento(JavaInfo javaInfo) throws Exception {
-    m_componentClassName = javaInfo.getDescription().getComponentClass().getName();
-    // creation
-    {
-      m_creationSupport = javaInfo.getCreationSupport().getClipboard();
-      m_variableName = getVariableName(javaInfo);
-      Assert.isNotNull(m_creationSupport, "No clipboard CreationSupport for %s", javaInfo);
-      cleanUpAnonymous(m_creationSupport);
-    }
-    // prepare commands
-    addCommands(javaInfo, m_commands);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Copy utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds {@link ClipboardCommand}'s for restoring properties, children, etc for given
-   * {@link JavaInfo}.
-   *
-   * @param javaInfo
-   *          the {@link JavaInfo} to add commands for.
-   * @param commands
-   *          the container to add commands to.
-   */
-  static void addCommands(JavaInfo javaInfo, List<ClipboardCommand> commands) throws Exception {
-    // properties command
-    commands.add(new PropertiesClipboardCommand(javaInfo));
-    // implicit/exposed children commands
-    for (JavaInfo child : javaInfo.getChildrenJava()) {
-      if (child.getCreationSupport() instanceof IImplicitCreationSupport) {
-        commands.add(new ImplicitChildCommand(child));
-      }
-    }
-    // broadcast commands
-    javaInfo.getBroadcastJava().clipboardCopy(javaInfo, commands);
-    // clean up anonymous commands
-    for (ClipboardCommand command : commands) {
-      cleanUpAnonymous(command);
-    }
-  }
-
-  /**
-   * Clears "this$0", "this$1", etc, because it is convenient to use clipboard anonymous classes,
-   * and we sure that they don't reference enclosing classes, even if Java thinks that they do this.
-   */
-  static void cleanUpAnonymous(Object o) throws Exception {
-    for (int i = 0; i < 10; i++) {
-      Field field = ReflectionUtils.getFieldByName(o.getClass(), "this$" + i);
-      if (field != null) {
-        field.set(o, null);
-      }
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Creation/paste
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private transient JavaInfo m_javaInfo;
-  private transient boolean m_applied;
-
-  /**
-   * @return the class of component represented by this {@link JavaInfoMemento}. This can be used to
-   *         check component class/model in more light way than creating real {@link JavaInfo}.
-   */
-  public String getComponentClassName() {
-    return m_componentClassName;
-  }
-
-  /**
-   * Creates new {@link JavaInfo} using remembered values.
-   *
-   * @param existingHierarchyObject
-   *          some {@link JavaInfo} in model hierarchy.
-   *
-   * @return the new {@link JavaInfo}.
-   */
-  public JavaInfo create(JavaInfo existingHierarchyObject) throws Exception {
-    Assert.isLegal(!m_applied, "This memento already applied.");
-    if (m_javaInfo == null) {
-      JavaInfo rootObject = existingHierarchyObject.getRootJava();
-      AstEditor editor = rootObject.getEditor();
-      Class<?> componentClass =
-          JavaInfoUtils.getClassLoader(rootObject).loadClass(m_componentClassName);
-      // prepare creation
-      CreationSupport creationSupport = m_creationSupport.create(rootObject);
-      // create JavaInfo
-      m_javaInfo = JavaInfoUtils.createJavaInfo(editor, componentClass, creationSupport);
-      m_javaInfo.putArbitraryValue(KEY_MEMENTO, this);
-      JavaInfoUtils.setParameter(m_javaInfo, NamesManager.NAME_PARAMETER, m_variableName);
-    }
-    return m_javaInfo;
-  }
-
-  /**
-   * Performs configuring for this {@link JavaInfo}.
-   */
-  public void apply() throws Exception {
-    Assert.isNotNull(m_javaInfo, "JavaInfo should be already created using create().");
-    Assert.isLegal(
-        m_javaInfo.getParent() != null,
-        "JavaInfo should be already bounds to the hierarchy.");
-    Assert.isLegal(!m_applied, "This memento already applied.");
-    m_applied = true;
-    // do apply
-    m_javaInfo.getRootJava().refreshLight();
-    m_creationSupport.apply(m_javaInfo);
-    // execute commands
-    executeCommands();
-  }
-
-  /**
-   * Executes remembered {@link ClipboardCommand}'s for this {@link JavaInfo}.
-   */
-  private void executeCommands() throws Exception {
-    for (ClipboardCommand command : m_commands) {
-      command.execute(m_javaInfo);
-    }
-  }
-
-  /**
-   * Get the variable field name of the JavaInfo.
-   *
-   * @param javaInfo The JavaInfo will be queried.
-   *
-   * @return The variable field name.
-   */
-    private String getVariableName(JavaInfo javaInfo) {
-        if (javaInfo != null) {
-            return javaInfo.getVariableSupport().getName();
-        }
-        return null;
-    }
+	private static final long serialVersionUID = 0L;
+	/**
+	 * The key under which {@link JavaInfoMemento} registers itself in created {@link JavaInfo}.
+	 */
+	public static final String KEY_MEMENTO = "KEY_MEMENTO";
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Creation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link JavaInfoMemento} for given {@link JavaInfo}.
+	 */
+	public static JavaInfoMemento createMemento(JavaInfo javaInfo) throws Exception {
+		if (javaInfo instanceof AbstractComponentInfo) {
+			return new ComponentInfoMemento((AbstractComponentInfo) javaInfo);
+		}
+		return new JavaInfoMemento(javaInfo);
+	}
+
+	/**
+	 * Checks that component can be copy/paste, i.e. {@link JavaInfoMemento} can be created, but don't
+	 * really create it. We use this to enable/disable copy/cut actions on selection change.
+	 *
+	 * @return <code>true</code> if {@link JavaInfoMemento} can be created for given {@link JavaInfo}.
+	 */
+	public static boolean hasMemento(JavaInfo javaInfo) {
+		try {
+			IClipboardCreationSupport clipboard = javaInfo.getCreationSupport().getClipboard();
+			return clipboard != null;
+		} catch (Throwable e) {
+			return false;
+		}
+	}
+
+	/**
+	 * If given {@link JavaInfo} was created from some {@link JavaInfoMemento}, then applies this
+	 * memento.
+	 */
+	public static void apply(JavaInfo javaInfo) throws Exception {
+		JavaInfoMemento memento = (JavaInfoMemento) javaInfo.getArbitraryValue(KEY_MEMENTO);
+		memento.apply();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance fields
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final String m_componentClassName;
+	private final IClipboardCreationSupport m_creationSupport;
+	private final List<ClipboardCommand> m_commands = Lists.newArrayList();
+
+	//the variable.field name must be kept, it's not contained in javaInfo created during paste.
+	private String m_variableName;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected JavaInfoMemento(JavaInfo javaInfo) throws Exception {
+		m_componentClassName = javaInfo.getDescription().getComponentClass().getName();
+		// creation
+		{
+			m_creationSupport = javaInfo.getCreationSupport().getClipboard();
+			m_variableName = getVariableName(javaInfo);
+			Assert.isNotNull(m_creationSupport, "No clipboard CreationSupport for %s", javaInfo);
+			cleanUpAnonymous(m_creationSupport);
+		}
+		// prepare commands
+		addCommands(javaInfo, m_commands);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Copy utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds {@link ClipboardCommand}'s for restoring properties, children, etc for given
+	 * {@link JavaInfo}.
+	 *
+	 * @param javaInfo
+	 *          the {@link JavaInfo} to add commands for.
+	 * @param commands
+	 *          the container to add commands to.
+	 */
+	static void addCommands(JavaInfo javaInfo, List<ClipboardCommand> commands) throws Exception {
+		// properties command
+		commands.add(new PropertiesClipboardCommand(javaInfo));
+		// implicit/exposed children commands
+		for (JavaInfo child : javaInfo.getChildrenJava()) {
+			if (child.getCreationSupport() instanceof IImplicitCreationSupport) {
+				commands.add(new ImplicitChildCommand(child));
+			}
+		}
+		// broadcast commands
+		javaInfo.getBroadcastJava().clipboardCopy(javaInfo, commands);
+		// clean up anonymous commands
+		for (ClipboardCommand command : commands) {
+			cleanUpAnonymous(command);
+		}
+	}
+
+	/**
+	 * Clears "this$0", "this$1", etc, because it is convenient to use clipboard anonymous classes,
+	 * and we sure that they don't reference enclosing classes, even if Java thinks that they do this.
+	 */
+	static void cleanUpAnonymous(Object o) throws Exception {
+		for (int i = 0; i < 10; i++) {
+			Field field = ReflectionUtils.getFieldByName(o.getClass(), "this$" + i);
+			if (field != null) {
+				field.set(o, null);
+			}
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Creation/paste
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private transient JavaInfo m_javaInfo;
+	private transient boolean m_applied;
+
+	/**
+	 * @return the class of component represented by this {@link JavaInfoMemento}. This can be used to
+	 *         check component class/model in more light way than creating real {@link JavaInfo}.
+	 */
+	public String getComponentClassName() {
+		return m_componentClassName;
+	}
+
+	/**
+	 * Creates new {@link JavaInfo} using remembered values.
+	 *
+	 * @param existingHierarchyObject
+	 *          some {@link JavaInfo} in model hierarchy.
+	 *
+	 * @return the new {@link JavaInfo}.
+	 */
+	public JavaInfo create(JavaInfo existingHierarchyObject) throws Exception {
+		Assert.isLegal(!m_applied, "This memento already applied.");
+		if (m_javaInfo == null) {
+			JavaInfo rootObject = existingHierarchyObject.getRootJava();
+			AstEditor editor = rootObject.getEditor();
+			Class<?> componentClass =
+					JavaInfoUtils.getClassLoader(rootObject).loadClass(m_componentClassName);
+			// prepare creation
+			CreationSupport creationSupport = m_creationSupport.create(rootObject);
+			// create JavaInfo
+			m_javaInfo = JavaInfoUtils.createJavaInfo(editor, componentClass, creationSupport);
+			m_javaInfo.putArbitraryValue(KEY_MEMENTO, this);
+			JavaInfoUtils.setParameter(m_javaInfo, NamesManager.NAME_PARAMETER, m_variableName);
+		}
+		return m_javaInfo;
+	}
+
+	/**
+	 * Performs configuring for this {@link JavaInfo}.
+	 */
+	public void apply() throws Exception {
+		Assert.isNotNull(m_javaInfo, "JavaInfo should be already created using create().");
+		Assert.isLegal(
+				m_javaInfo.getParent() != null,
+				"JavaInfo should be already bounds to the hierarchy.");
+		Assert.isLegal(!m_applied, "This memento already applied.");
+		m_applied = true;
+		// do apply
+		m_javaInfo.getRootJava().refreshLight();
+		m_creationSupport.apply(m_javaInfo);
+		// execute commands
+		executeCommands();
+	}
+
+	/**
+	 * Executes remembered {@link ClipboardCommand}'s for this {@link JavaInfo}.
+	 */
+	private void executeCommands() throws Exception {
+		for (ClipboardCommand command : m_commands) {
+			command.execute(m_javaInfo);
+		}
+	}
+
+	/**
+	 * Get the variable field name of the JavaInfo.
+	 *
+	 * @param javaInfo The JavaInfo will be queried.
+	 *
+	 * @return The variable field name.
+	 */
+	private String getVariableName(JavaInfo javaInfo) {
+		if (javaInfo != null) {
+			return javaInfo.getVariableSupport().getName();
+		}
+		return null;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/clipboard/JavaInfoMementoTransfer.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/clipboard/JavaInfoMementoTransfer.java
index b22119399..4e8650131 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/clipboard/JavaInfoMementoTransfer.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/clipboard/JavaInfoMementoTransfer.java
@@ -37,135 +37,135 @@
  * @coverage core.model.clipboard
  */
 public class JavaInfoMementoTransfer extends ByteArrayTransfer {
-  private static final String TYPE_NAME = "DESIGNER_TYPE_NAME";
-  private static final int TYPE_ID = registerType(TYPE_NAME);
-  private static JavaInfoMementoTransfer _instance = new JavaInfoMementoTransfer();
+	private static final String TYPE_NAME = "DESIGNER_TYPE_NAME";
+	private static final int TYPE_ID = registerType(TYPE_NAME);
+	private static JavaInfoMementoTransfer _instance = new JavaInfoMementoTransfer();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private JavaInfoMementoTransfer() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private JavaInfoMementoTransfer() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static JavaInfoMementoTransfer getInstance() {
-    return _instance;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static JavaInfoMementoTransfer getInstance() {
+		return _instance;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Transfer
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String[] getTypeNames() {
-    return new String[]{TYPE_NAME};
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Transfer
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String[] getTypeNames() {
+		return new String[]{TYPE_NAME};
+	}
 
-  @Override
-  protected int[] getTypeIds() {
-    return new int[]{TYPE_ID};
-  }
+	@Override
+	protected int[] getTypeIds() {
+		return new int[]{TYPE_ID};
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ByteArrayTransfer
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void javaToNative(final Object object, final TransferData transferData) {
-    if (isSupportedType(transferData)) {
-      ExecutionUtils.runRethrow(new RunnableEx() {
-        @Override
-        public void run() throws Exception {
-          byte[] bytes = convertObjectToBytes(object);
-          JavaInfoMementoTransfer.super.javaToNative(bytes, transferData);
-        }
-      });
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ByteArrayTransfer
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void javaToNative(final Object object, final TransferData transferData) {
+		if (isSupportedType(transferData)) {
+			ExecutionUtils.runRethrow(new RunnableEx() {
+				@Override
+				public void run() throws Exception {
+					byte[] bytes = convertObjectToBytes(object);
+					JavaInfoMementoTransfer.super.javaToNative(bytes, transferData);
+				}
+			});
+		}
+	}
 
-  @Override
-  public Object nativeToJava(final TransferData transferData) {
-    if (isSupportedType(transferData)) {
-      return ExecutionUtils.runObject(new RunnableObjectEx<Object>() {
-        @Override
-        public Object runObject() throws Exception {
-          byte[] bytes = (byte[]) JavaInfoMementoTransfer.super.nativeToJava(transferData);
-          return convertBytesToObject(bytes);
-        }
-      });
-    }
-    return null;
-  }
+	@Override
+	public Object nativeToJava(final TransferData transferData) {
+		if (isSupportedType(transferData)) {
+			return ExecutionUtils.runObject(new RunnableObjectEx<Object>() {
+				@Override
+				public Object runObject() throws Exception {
+					byte[] bytes = (byte[]) JavaInfoMementoTransfer.super.nativeToJava(transferData);
+					return convertBytesToObject(bytes);
+				}
+			});
+		}
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Implementation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the bytes that correspond to the serialized object.
-   */
-  public static byte[] convertObjectToBytes(Object object) throws IOException {
-    // write object to stream
-    ByteArrayOutputStream baos;
-    {
-      baos = new ByteArrayOutputStream();
-      ObjectOutputStream oos = new ObjectOutputStream(new GZIPOutputStream(baos));
-      oos.writeObject(object);
-      oos.close();
-    }
-    // return as bytes
-    return baos.toByteArray();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Implementation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the bytes that correspond to the serialized object.
+	 */
+	public static byte[] convertObjectToBytes(Object object) throws IOException {
+		// write object to stream
+		ByteArrayOutputStream baos;
+		{
+			baos = new ByteArrayOutputStream();
+			ObjectOutputStream oos = new ObjectOutputStream(new GZIPOutputStream(baos));
+			oos.writeObject(object);
+			oos.close();
+		}
+		// return as bytes
+		return baos.toByteArray();
+	}
 
-  public static Object convertBytesToObject(byte[] bytes) throws Exception {
-    ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
-    ObjectInputStream ois = new BundleObjectInputStream(new GZIPInputStream(bais));
-    try {
-      return ois.readObject();
-    } finally {
-      ois.close();
-    }
-  }
+	public static Object convertBytesToObject(byte[] bytes) throws Exception {
+		ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
+		ObjectInputStream ois = new BundleObjectInputStream(new GZIPInputStream(bais));
+		try {
+			return ois.readObject();
+		} finally {
+			ois.close();
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // BundleObjectInputStream
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Implementation of {@link ObjectInputStream} that resolves classes using {@link Bundle}'s.
-   *
-   * @author scheglov_ke
-   */
-  private static final class BundleObjectInputStream extends ObjectInputStream {
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public BundleObjectInputStream(InputStream in) throws IOException {
-      super(in);
-    }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// BundleObjectInputStream
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Implementation of {@link ObjectInputStream} that resolves classes using {@link Bundle}'s.
+	 *
+	 * @author scheglov_ke
+	 */
+	private static final class BundleObjectInputStream extends ObjectInputStream {
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public BundleObjectInputStream(InputStream in) throws IOException {
+			super(in);
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Resolve
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    protected Class<?> resolveClass(ObjectStreamClass desc) throws IOException,
-        ClassNotFoundException {
-      String className = desc.getName();
-      return ExternalFactoriesHelper.loadBundleClass(className);
-    }
-  }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Resolve
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		protected Class<?> resolveClass(ObjectStreamClass desc) throws IOException,
+		ClassNotFoundException {
+			String className = desc.getName();
+			return ExternalFactoriesHelper.loadBundleClass(className);
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/clipboard/PropertiesClipboardCommand.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/clipboard/PropertiesClipboardCommand.java
index 7bc691c2e..7386582c3 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/clipboard/PropertiesClipboardCommand.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/clipboard/PropertiesClipboardCommand.java
@@ -25,43 +25,43 @@
  * @coverage core.model.clipboard
  */
 public final class PropertiesClipboardCommand extends ClipboardCommand {
-  private static final long serialVersionUID = 0L;
-  private final Map<String, String> m_propertyTitleToSource = Maps.newTreeMap();
+	private static final long serialVersionUID = 0L;
+	private final Map<String, String> m_propertyTitleToSource = Maps.newTreeMap();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public PropertiesClipboardCommand(JavaInfo javaInfo) throws Exception {
-    for (Property property : javaInfo.getProperties()) {
-      if (property instanceof GenericPropertyImpl
-          && !property.getCategory().isSystem()
-          && property.isModified()) {
-        GenericPropertyImpl genericProperty = (GenericPropertyImpl) property;
-        String clipboardSource = genericProperty.getClipboardSource();
-        if (clipboardSource != null) {
-          m_propertyTitleToSource.put(property.getTitle(), clipboardSource);
-        }
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public PropertiesClipboardCommand(JavaInfo javaInfo) throws Exception {
+		for (Property property : javaInfo.getProperties()) {
+			if (property instanceof GenericPropertyImpl
+					&& !property.getCategory().isSystem()
+					&& property.isModified()) {
+				GenericPropertyImpl genericProperty = (GenericPropertyImpl) property;
+				String clipboardSource = genericProperty.getClipboardSource();
+				if (clipboardSource != null) {
+					m_propertyTitleToSource.put(property.getTitle(), clipboardSource);
+				}
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Command
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void execute(JavaInfo javaInfo) throws Exception {
-    for (Property property : javaInfo.getProperties()) {
-      if (property instanceof GenericPropertyImpl) {
-        GenericPropertyImpl genericProperty = (GenericPropertyImpl) property;
-        String clipboardSource = m_propertyTitleToSource.get(property.getTitle());
-        if (clipboardSource != null) {
-          genericProperty.setExpression(clipboardSource, Property.UNKNOWN_VALUE);
-        }
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Command
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void execute(JavaInfo javaInfo) throws Exception {
+		for (Property property : javaInfo.getProperties()) {
+			if (property instanceof GenericPropertyImpl) {
+				GenericPropertyImpl genericProperty = (GenericPropertyImpl) property;
+				String clipboardSource = m_propertyTitleToSource.get(property.getTitle());
+				if (clipboardSource != null) {
+					genericProperty.setExpression(clipboardSource, Property.UNKNOWN_VALUE);
+				}
+			}
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/CastedSuperInvocationCreationSupport.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/CastedSuperInvocationCreationSupport.java
index 0d1ff788a..ab7e4b064 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/CastedSuperInvocationCreationSupport.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/CastedSuperInvocationCreationSupport.java
@@ -23,39 +23,39 @@
  * @coverage core.model.creation
  */
 public final class CastedSuperInvocationCreationSupport extends CreationSupport {
-  private final CastExpression m_castExpression;
+	private final CastExpression m_castExpression;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CastedSuperInvocationCreationSupport(CastExpression castExpression) {
-    m_castExpression = castExpression;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CastedSuperInvocationCreationSupport(CastExpression castExpression) {
+		m_castExpression = castExpression;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    return "casted-superInvocation: " + m_castExpression;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		return "casted-superInvocation: " + m_castExpression;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public ASTNode getNode() {
-    return m_castExpression;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public ASTNode getNode() {
+		return m_castExpression;
+	}
 
-  @Override
-  public boolean isJavaInfo(ASTNode node) {
-    return node == m_castExpression;
-  }
+	@Override
+	public boolean isJavaInfo(ASTNode node) {
+		return node == m_castExpression;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/ConstructorCreationSupport.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/ConstructorCreationSupport.java
index db114e501..ee8dbe66b 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/ConstructorCreationSupport.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/ConstructorCreationSupport.java
@@ -60,420 +60,420 @@
  * @coverage core.model.creation
  */
 public final class ConstructorCreationSupport extends CreationSupport
-    implements
-      ILiveCreationSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Existing state
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private ClassInstanceCreation m_creation;
-  private IMethodBinding m_binding;
-  private ConstructorDescription m_description;
-  private CreationSupportUtils m_utils;
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Adding configuration
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private boolean m_addInvocations;
-  private String m_creationId;
-  private String m_creationSource;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Constructor for existing {@link ClassInstanceCreation}, used during parsing.
-   */
-  public ConstructorCreationSupport(ClassInstanceCreation creation) {
-    setCreation(creation);
-  }
-
-  /**
-   * Constructor for adding new {@link JavaInfo} using default creation.
-   */
-  public ConstructorCreationSupport() {
-    this(null, true);
-  }
-
-  /**
-   * Constructor for adding new {@link JavaInfo} using creation wit specified id.
-   *
-   * @param creationId
-   *          the id of {@link CreationDescription} to use during add.
-   * @param addInvocations
-   *          is <code>true</code> if invocations from {@link CreationDescription} during
-   *          {@link #add_setSourceExpression(Expression)}.
-   *
-   */
-  public ConstructorCreationSupport(String creationId, boolean addInvocations) {
-    m_creationId = creationId;
-    m_addInvocations = addInvocations;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Factories
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link ConstructorCreationSupport} that uses specified source. No invocations.
-   */
-  public static ConstructorCreationSupport forSource(String source) {
-    ConstructorCreationSupport creation = new ConstructorCreationSupport();
-    creation.m_creationSource = source;
-    creation.m_addInvocations = false;
-    return creation;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Initialization
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets the {@link ClassInstanceCreation}.
-   */
-  private void setCreation(ClassInstanceCreation creation) {
-    m_creation = creation;
-    m_binding = AstNodeUtils.getCreationBinding(m_creation);
-    initializeConstructorDescription();
-  }
-
-  /**
-   * Initializes {@link #m_description}. We do this in separate method and not in
-   * {@link #setCreation(ClassInstanceCreation)} because when we call
-   * {@link #setCreation(ClassInstanceCreation)} first time from constructor, {@link JavaInfo} is
-   * not known yet, so we don't know {@link ComponentDescription} and can not determine
-   * {@link ConstructorDescription} .
-   */
-  private void initializeConstructorDescription() {
-    if (m_javaInfo != null && m_creation != null) {
-      ComponentDescription componentDescription = m_javaInfo.getDescription();
-      m_description = componentDescription.getConstructor(m_binding);
-      if (m_description == null) {
-        String source = m_javaInfo.getEditor().getSource(m_creation);
-        throw new DesignerException(ICoreExceptionConstants.GEN_NO_CONSTRUCTOR_BINDING, source);
-      }
-      ComponentDescriptionHelper.ensureInitialized(
-          m_javaInfo.getEditor().getJavaProject(),
-          m_description);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    return "new: "
-        + getComponentClass().getName()
-        + (m_creationId != null ? " " + m_creationId : "");
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void setJavaInfo(JavaInfo javaInfo) throws Exception {
-    super.setJavaInfo(javaInfo);
-    initializeConstructorDescription();
-    // apply parameters from CreationDescription
-    {
-      CreationDescription creationDescription =
-          m_javaInfo.getDescription().getCreation(m_creationId);
-      // parameters
-      for (Map.Entry<String, String> entry : creationDescription.getParameters().entrySet()) {
-        JavaInfoUtils.setParameter(javaInfo, entry.getKey(), entry.getValue());
-      }
-      // fill type parameters with defaults
-      Map<String, TypeParameterDescription> typeParameters =
-          creationDescription.getTypeParameters();
-      for (Entry<String, TypeParameterDescription> parameter : typeParameters.entrySet()) {
-        m_javaInfo.putTemplateArgument(parameter.getKey(), parameter.getValue().getTypeName());
-      }
-    }
-    // prepare Utils
-    m_utils = new CreationSupportUtils(m_javaInfo);
-  }
-
-  @Override
-  public boolean isJavaInfo(ASTNode node) {
-    return node == m_creation;
-  }
-
-  @Override
-  public ASTNode getNode() {
-    return m_creation;
-  }
-
-  @Override
-  public CreationSupport getLiveComponentCreation() {
-    return new ConstructorCreationSupport(m_creationId, m_addInvocations);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Special access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link ClassInstanceCreation} of this {@link ConstructorCreationSupport}.
-   */
-  public ClassInstanceCreation getCreation() {
-    return m_creation;
-  }
-
-  /**
-   * @return the {@link IMethodBinding} of this {@link ClassInstanceCreation}.
-   */
-  public IMethodBinding getBinding() {
-    return m_binding;
-  }
-
-  /**
-   * @return the {@link ConstructorDescription} of this {@link ClassInstanceCreation}.
-   */
-  public ConstructorDescription getDescription() {
-    return m_description;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Validation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final Set<String> m_validParentSources = Sets.newTreeSet();
-  private final Set<String> m_invalidParentSources = Sets.newTreeSet();
-
-  @Override
-  public boolean canUseParent(JavaInfo parent) throws Exception {
-    Class<?> parentType = parent.getDescription().getComponentClass();
-    // if this JavaInfo is not created yet, try to compile creation source with this given "parent"
-    if (m_description == null) {
-      return canUseParent_noDescription(parent, parentType);
-    }
-    // check that if constructor has "parent" parameter, it is compatible with given "parent"
-    for (ParameterDescription parameter : m_description.getParameters()) {
-      if (parameter.isParent()) {
-        Class<?> requiredType = parameter.getType();
-        if (!requiredType.isAssignableFrom(parentType)) {
-          return false;
-        }
-      }
-    }
-    // continue
-    return true;
-  }
-
-  private boolean canUseParent_noDescription(JavaInfo parent, Class<?> parentType) throws Exception {
-    String source = add_getSource(null);
-    // we don't care if there are no "parent" to check
-    if (!source.contains("%parent%")) {
-      return true;
-    }
-    source = StringUtils.replace(source, "%parent%", "(" + parentType.getName() + ") null");
-    // check cached result
-    if (m_validParentSources.contains(source)) {
-      return true;
-    }
-    if (m_invalidParentSources.contains(source)) {
-      return false;
-    }
-    // check that arguments correspond to parameter types
-    {
-      int position = parent.getCreationSupport().getNode().getStartPosition();
-      ClassInstanceCreation creation =
-          (ClassInstanceCreation) m_javaInfo.getEditor().getParser().parseExpression(
-              position,
-              source);
-      IMethodBinding creationBinding = AstNodeUtils.getCreationBinding(creation);
-      ITypeBinding[] parameterTypes = creationBinding.getParameterTypes();
-      for (int i = 0; i < parameterTypes.length; i++) {
-        ITypeBinding parameterType = parameterTypes[i];
-        Expression argument = DomGenerics.arguments(creation).get(i);
-        if (!AstNodeUtils.isSuccessorOf(argument, parameterType)) {
-          m_invalidParentSources.add(source);
-          return false;
-        }
-      }
-    }
-    // OK
-    m_validParentSources.add(source);
-    return true;
-  }
-
-  @Override
-  public boolean canReorder() {
-    return true;
-  }
-
-  @Override
-  public boolean canReparent() {
-    return true;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Properties
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private ComplexProperty m_complexProperty;
-
-  @Override
-  public void addProperties(List<Property> properties) throws Exception {
-    if (m_complexProperty == null) {
-      m_complexProperty = new ComplexProperty("Constructor", "(Constructor properties)");
-      m_complexProperty.setCategory(PropertyCategory.system(3));
-      m_complexProperty.setModified(true);
-      // prepare list of sub-properties
-      List<Property> subPropertiesList = Lists.newArrayList();
-      for (ParameterDescription parameter : m_description.getParameters()) {
-        Property property = m_utils.createProperty(parameter);
-        if (property != null) {
-          subPropertiesList.add(property);
-        }
-      }
-      // set sub-properties
-      if (!subPropertiesList.isEmpty()) {
-        m_complexProperty.setProperties(subPropertiesList);
-      }
-    }
-    // add complex property if there are sub-properties
-    if (m_complexProperty.getProperties().length != 0) {
-      properties.add(m_complexProperty);
-    }
-  }
-
-  @Override
-  public void addAccessors(GenericPropertyDescription propertyDescription,
-      List<ExpressionAccessor> accessors) throws Exception {
-    // add accessors for parameters bound to given property
-    List<ParameterDescription> parameters = m_description.getParameters();
-    for (ParameterDescription parameter : parameters) {
-      if (propertyDescription.getId().equals(parameter.getProperty())) {
-        accessors.add(new ConstructorAccessor(parameter.getIndex(), parameter.getDefaultSource()));
-      }
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Adding
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String add_getSource(NodeTarget target) throws Exception {
-    if (m_creationSource != null) {
-      return m_creationSource;
-    } else {
-      CreationDescription creationDescription =
-          m_javaInfo.getDescription().getCreation(m_creationId);
-      return creationDescription.getSource();
-    }
-  }
-
-  @Override
-  public void add_setSourceExpression(Expression expression) throws Exception {
-    ClassInstanceCreation creation = (ClassInstanceCreation) expression;
-    setCreation(creation);
-    m_javaInfo.bindToExpression(creation);
-    // add invocations
-    if (m_addInvocations) {
-      CreationDescription creationDescription =
-          m_javaInfo.getDescription().getCreation(m_creationId);
-      for (CreationInvocationDescription invocation : creationDescription.getInvocations()) {
-        m_javaInfo.addMethodInvocation(invocation.getSignature(), invocation.getArguments());
-      }
-    }
-  }
-
-  @Override
-  public Association getAssociation() throws Exception {
-    if (add_getSource(null).indexOf("%parent%") != -1) {
-      return new ConstructorParentAssociation();
-    }
-    return null;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Delete
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean canDelete() {
-    return true;
-  }
-
-  @Override
-  public void delete() throws Exception {
-    boolean removeFromParent = !m_javaInfo.isRoot();
-    JavaInfoUtils.deleteJavaInfo(m_javaInfo, removeFromParent);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Clipboard
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  //@edu.umd.cs.findbugs.annotations.SuppressWarnings(value = "SE_BAD_FIELD_INNER_CLASS")
-  public IClipboardCreationSupport getClipboard() throws Exception {
-    final String source = getClipboardSource();
-    return new IClipboardCreationSupport() {
-      private static final long serialVersionUID = 0L;
-
-      @Override
-      public CreationSupport create(JavaInfo rootObject) throws Exception {
-        return forSource(source);
-      }
-    };
-  }
-
-  /**
-   * @return the source for copy/paste.
-   */
-  private String getClipboardSource() throws Exception {
-    AstEditor editor = m_javaInfo.getEditor();
-    String typeArgumentsSource = editor.getTypeArgumentsSource(m_creation);
-    String argumentsSource = m_utils.getClipboardArguments(m_description.getParameters());
-    String methodStubs = getClipboardSourceMethodStubs(editor);
-    return "new "
-        + m_javaInfo.getDescription().getComponentClass().getName()
-        + typeArgumentsSource
-        + "("
-        + argumentsSource
-        + ")"
-        + methodStubs;
-  }
-
-  /**
-   * @return the {@link AnonymousClassDeclaration} method stubs, may be empty string.
-   */
-  private String getClipboardSourceMethodStubs(AstEditor editor) throws Exception {
-    AnonymousClassDeclaration anonymousDeclaration = m_creation.getAnonymousClassDeclaration();
-    if (anonymousDeclaration != null) {
-      StringBuilder sb = new StringBuilder();
-      sb.append(" {\n");
-      List<MethodDeclaration> methodDeclarations =
-          DomGenerics.methodDeclarations(anonymousDeclaration);
-      for (MethodDeclaration methodDeclaration : methodDeclarations) {
-        String stubSource = editor.getMethodStubSource(methodDeclaration);
-        sb.append(stubSource);
-        sb.append("\n");
-      }
-      sb.append("}");
-      return sb.toString();
-    } else {
-      return "";
-    }
-  }
+implements
+ILiveCreationSupport {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Existing state
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private ClassInstanceCreation m_creation;
+	private IMethodBinding m_binding;
+	private ConstructorDescription m_description;
+	private CreationSupportUtils m_utils;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Adding configuration
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private boolean m_addInvocations;
+	private String m_creationId;
+	private String m_creationSource;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Constructor for existing {@link ClassInstanceCreation}, used during parsing.
+	 */
+	public ConstructorCreationSupport(ClassInstanceCreation creation) {
+		setCreation(creation);
+	}
+
+	/**
+	 * Constructor for adding new {@link JavaInfo} using default creation.
+	 */
+	public ConstructorCreationSupport() {
+		this(null, true);
+	}
+
+	/**
+	 * Constructor for adding new {@link JavaInfo} using creation wit specified id.
+	 *
+	 * @param creationId
+	 *          the id of {@link CreationDescription} to use during add.
+	 * @param addInvocations
+	 *          is <code>true</code> if invocations from {@link CreationDescription} during
+	 *          {@link #add_setSourceExpression(Expression)}.
+	 *
+	 */
+	public ConstructorCreationSupport(String creationId, boolean addInvocations) {
+		m_creationId = creationId;
+		m_addInvocations = addInvocations;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Factories
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link ConstructorCreationSupport} that uses specified source. No invocations.
+	 */
+	public static ConstructorCreationSupport forSource(String source) {
+		ConstructorCreationSupport creation = new ConstructorCreationSupport();
+		creation.m_creationSource = source;
+		creation.m_addInvocations = false;
+		return creation;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Initialization
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets the {@link ClassInstanceCreation}.
+	 */
+	private void setCreation(ClassInstanceCreation creation) {
+		m_creation = creation;
+		m_binding = AstNodeUtils.getCreationBinding(m_creation);
+		initializeConstructorDescription();
+	}
+
+	/**
+	 * Initializes {@link #m_description}. We do this in separate method and not in
+	 * {@link #setCreation(ClassInstanceCreation)} because when we call
+	 * {@link #setCreation(ClassInstanceCreation)} first time from constructor, {@link JavaInfo} is
+	 * not known yet, so we don't know {@link ComponentDescription} and can not determine
+	 * {@link ConstructorDescription} .
+	 */
+	private void initializeConstructorDescription() {
+		if (m_javaInfo != null && m_creation != null) {
+			ComponentDescription componentDescription = m_javaInfo.getDescription();
+			m_description = componentDescription.getConstructor(m_binding);
+			if (m_description == null) {
+				String source = m_javaInfo.getEditor().getSource(m_creation);
+				throw new DesignerException(ICoreExceptionConstants.GEN_NO_CONSTRUCTOR_BINDING, source);
+			}
+			ComponentDescriptionHelper.ensureInitialized(
+					m_javaInfo.getEditor().getJavaProject(),
+					m_description);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		return "new: "
+				+ getComponentClass().getName()
+				+ (m_creationId != null ? " " + m_creationId : "");
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void setJavaInfo(JavaInfo javaInfo) throws Exception {
+		super.setJavaInfo(javaInfo);
+		initializeConstructorDescription();
+		// apply parameters from CreationDescription
+		{
+			CreationDescription creationDescription =
+					m_javaInfo.getDescription().getCreation(m_creationId);
+			// parameters
+			for (Map.Entry<String, String> entry : creationDescription.getParameters().entrySet()) {
+				JavaInfoUtils.setParameter(javaInfo, entry.getKey(), entry.getValue());
+			}
+			// fill type parameters with defaults
+			Map<String, TypeParameterDescription> typeParameters =
+					creationDescription.getTypeParameters();
+			for (Entry<String, TypeParameterDescription> parameter : typeParameters.entrySet()) {
+				m_javaInfo.putTemplateArgument(parameter.getKey(), parameter.getValue().getTypeName());
+			}
+		}
+		// prepare Utils
+		m_utils = new CreationSupportUtils(m_javaInfo);
+	}
+
+	@Override
+	public boolean isJavaInfo(ASTNode node) {
+		return node == m_creation;
+	}
+
+	@Override
+	public ASTNode getNode() {
+		return m_creation;
+	}
+
+	@Override
+	public CreationSupport getLiveComponentCreation() {
+		return new ConstructorCreationSupport(m_creationId, m_addInvocations);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Special access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link ClassInstanceCreation} of this {@link ConstructorCreationSupport}.
+	 */
+	public ClassInstanceCreation getCreation() {
+		return m_creation;
+	}
+
+	/**
+	 * @return the {@link IMethodBinding} of this {@link ClassInstanceCreation}.
+	 */
+	public IMethodBinding getBinding() {
+		return m_binding;
+	}
+
+	/**
+	 * @return the {@link ConstructorDescription} of this {@link ClassInstanceCreation}.
+	 */
+	public ConstructorDescription getDescription() {
+		return m_description;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Validation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final Set<String> m_validParentSources = Sets.newTreeSet();
+	private final Set<String> m_invalidParentSources = Sets.newTreeSet();
+
+	@Override
+	public boolean canUseParent(JavaInfo parent) throws Exception {
+		Class<?> parentType = parent.getDescription().getComponentClass();
+		// if this JavaInfo is not created yet, try to compile creation source with this given "parent"
+		if (m_description == null) {
+			return canUseParent_noDescription(parent, parentType);
+		}
+		// check that if constructor has "parent" parameter, it is compatible with given "parent"
+		for (ParameterDescription parameter : m_description.getParameters()) {
+			if (parameter.isParent()) {
+				Class<?> requiredType = parameter.getType();
+				if (!requiredType.isAssignableFrom(parentType)) {
+					return false;
+				}
+			}
+		}
+		// continue
+		return true;
+	}
+
+	private boolean canUseParent_noDescription(JavaInfo parent, Class<?> parentType) throws Exception {
+		String source = add_getSource(null);
+		// we don't care if there are no "parent" to check
+		if (!source.contains("%parent%")) {
+			return true;
+		}
+		source = StringUtils.replace(source, "%parent%", "(" + parentType.getName() + ") null");
+		// check cached result
+		if (m_validParentSources.contains(source)) {
+			return true;
+		}
+		if (m_invalidParentSources.contains(source)) {
+			return false;
+		}
+		// check that arguments correspond to parameter types
+		{
+			int position = parent.getCreationSupport().getNode().getStartPosition();
+			ClassInstanceCreation creation =
+					(ClassInstanceCreation) m_javaInfo.getEditor().getParser().parseExpression(
+							position,
+							source);
+			IMethodBinding creationBinding = AstNodeUtils.getCreationBinding(creation);
+			ITypeBinding[] parameterTypes = creationBinding.getParameterTypes();
+			for (int i = 0; i < parameterTypes.length; i++) {
+				ITypeBinding parameterType = parameterTypes[i];
+				Expression argument = DomGenerics.arguments(creation).get(i);
+				if (!AstNodeUtils.isSuccessorOf(argument, parameterType)) {
+					m_invalidParentSources.add(source);
+					return false;
+				}
+			}
+		}
+		// OK
+		m_validParentSources.add(source);
+		return true;
+	}
+
+	@Override
+	public boolean canReorder() {
+		return true;
+	}
+
+	@Override
+	public boolean canReparent() {
+		return true;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Properties
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private ComplexProperty m_complexProperty;
+
+	@Override
+	public void addProperties(List<Property> properties) throws Exception {
+		if (m_complexProperty == null) {
+			m_complexProperty = new ComplexProperty("Constructor", "(Constructor properties)");
+			m_complexProperty.setCategory(PropertyCategory.system(3));
+			m_complexProperty.setModified(true);
+			// prepare list of sub-properties
+			List<Property> subPropertiesList = Lists.newArrayList();
+			for (ParameterDescription parameter : m_description.getParameters()) {
+				Property property = m_utils.createProperty(parameter);
+				if (property != null) {
+					subPropertiesList.add(property);
+				}
+			}
+			// set sub-properties
+			if (!subPropertiesList.isEmpty()) {
+				m_complexProperty.setProperties(subPropertiesList);
+			}
+		}
+		// add complex property if there are sub-properties
+		if (m_complexProperty.getProperties().length != 0) {
+			properties.add(m_complexProperty);
+		}
+	}
+
+	@Override
+	public void addAccessors(GenericPropertyDescription propertyDescription,
+			List<ExpressionAccessor> accessors) throws Exception {
+		// add accessors for parameters bound to given property
+		List<ParameterDescription> parameters = m_description.getParameters();
+		for (ParameterDescription parameter : parameters) {
+			if (propertyDescription.getId().equals(parameter.getProperty())) {
+				accessors.add(new ConstructorAccessor(parameter.getIndex(), parameter.getDefaultSource()));
+			}
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Adding
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String add_getSource(NodeTarget target) throws Exception {
+		if (m_creationSource != null) {
+			return m_creationSource;
+		} else {
+			CreationDescription creationDescription =
+					m_javaInfo.getDescription().getCreation(m_creationId);
+			return creationDescription.getSource();
+		}
+	}
+
+	@Override
+	public void add_setSourceExpression(Expression expression) throws Exception {
+		ClassInstanceCreation creation = (ClassInstanceCreation) expression;
+		setCreation(creation);
+		m_javaInfo.bindToExpression(creation);
+		// add invocations
+		if (m_addInvocations) {
+			CreationDescription creationDescription =
+					m_javaInfo.getDescription().getCreation(m_creationId);
+			for (CreationInvocationDescription invocation : creationDescription.getInvocations()) {
+				m_javaInfo.addMethodInvocation(invocation.getSignature(), invocation.getArguments());
+			}
+		}
+	}
+
+	@Override
+	public Association getAssociation() throws Exception {
+		if (add_getSource(null).indexOf("%parent%") != -1) {
+			return new ConstructorParentAssociation();
+		}
+		return null;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Delete
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean canDelete() {
+		return true;
+	}
+
+	@Override
+	public void delete() throws Exception {
+		boolean removeFromParent = !m_javaInfo.isRoot();
+		JavaInfoUtils.deleteJavaInfo(m_javaInfo, removeFromParent);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Clipboard
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	//@edu.umd.cs.findbugs.annotations.SuppressWarnings(value = "SE_BAD_FIELD_INNER_CLASS")
+	public IClipboardCreationSupport getClipboard() throws Exception {
+		final String source = getClipboardSource();
+		return new IClipboardCreationSupport() {
+			private static final long serialVersionUID = 0L;
+
+			@Override
+			public CreationSupport create(JavaInfo rootObject) throws Exception {
+				return forSource(source);
+			}
+		};
+	}
+
+	/**
+	 * @return the source for copy/paste.
+	 */
+	private String getClipboardSource() throws Exception {
+		AstEditor editor = m_javaInfo.getEditor();
+		String typeArgumentsSource = editor.getTypeArgumentsSource(m_creation);
+		String argumentsSource = m_utils.getClipboardArguments(m_description.getParameters());
+		String methodStubs = getClipboardSourceMethodStubs(editor);
+		return "new "
+		+ m_javaInfo.getDescription().getComponentClass().getName()
+		+ typeArgumentsSource
+		+ "("
+		+ argumentsSource
+		+ ")"
+		+ methodStubs;
+	}
+
+	/**
+	 * @return the {@link AnonymousClassDeclaration} method stubs, may be empty string.
+	 */
+	private String getClipboardSourceMethodStubs(AstEditor editor) throws Exception {
+		AnonymousClassDeclaration anonymousDeclaration = m_creation.getAnonymousClassDeclaration();
+		if (anonymousDeclaration != null) {
+			StringBuilder sb = new StringBuilder();
+			sb.append(" {\n");
+			List<MethodDeclaration> methodDeclarations =
+					DomGenerics.methodDeclarations(anonymousDeclaration);
+			for (MethodDeclaration methodDeclaration : methodDeclarations) {
+				String stubSource = editor.getMethodStubSource(methodDeclaration);
+				sb.append(stubSource);
+				sb.append("\n");
+			}
+			sb.append("}");
+			return sb.toString();
+		} else {
+			return "";
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/CreationSupport.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/CreationSupport.java
index 93bce8b98..f5bf47377 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/CreationSupport.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/CreationSupport.java
@@ -36,193 +36,193 @@
  * @coverage core.model.creation
  */
 public abstract class CreationSupport {
-  protected JavaInfo m_javaInfo;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets {@link JavaInfo} that uses this {@link CreationSupport}.
-   */
-  public void setJavaInfo(JavaInfo javaInfo) throws Exception {
-    Assert.isLegal(m_javaInfo == null, "JavaInfo for CreationSupport can be set only one time.");
-    Assert.isNotNull(javaInfo, "JavaInfo for CreationSupport can not be 'null'.");
-    m_javaInfo = javaInfo;
-  }
-
-  /**
-   * @return <code>true</code> if given {@link ASTNode} represents {@link JavaInfo} of this
-   *         {@link CreationSupport}.
-   */
-  public abstract boolean isJavaInfo(ASTNode node);
-
-  /**
-   * @return the {@link ASTNode} that presents creation of this component.
-   */
-  public abstract ASTNode getNode();
-
-  /**
-   * If this {@link CreationSupport} form an association during creation (for example in SWT all
-   * constructors accept parent), the return corresponding {@link Association}, and
-   * <code>null</code> in other case.
-   *
-   * @return the {@link Association} for this {@link CreationSupport} or <code>null</code>.
-   */
-  public Association getAssociation() throws Exception {
-    return null;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Validation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if {@link JavaInfo} created using this {@link CreationSupport} can be
-   *         places (created or added) on given parent. Returns <code>true</code> by default.
-   */
-  public boolean canUseParent(JavaInfo parent) throws Exception {
-    return true;
-  }
-
-  /**
-   * @return <code>true</code> if this {@link JavaInfo} can be reordered inside of its parent.
-   */
-  public boolean canReorder() {
-    return false;
-  }
-
-  /**
-   * @return <code>true</code> if this {@link JavaInfo} can be reparented.
-   */
-  public boolean canReparent() {
-    return false;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Properties
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds {@link ExpressionAccessor} for given {@link GenericPropertyDescription}.
-   */
-  public void addAccessors(GenericPropertyDescription propertyDescription,
-      List<ExpressionAccessor> accessors) throws Exception {
-    // don't add any new accessors by default
-  }
-
-  /**
-   * Allows {@link CreationSupport} add zero or more {@link Property}'s, for example for constructor
-   * we can add complex property with sub-property for each argument.
-   */
-  public void addProperties(List<Property> properties) throws Exception {
-    // don't add any property by default
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Creation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if object with this {@link CreationSupport} can be evaluated using
-   *         AST. For example {@link ClassInstanceCreation} can be evaluated, but "this" component -
-   *         no.
-   */
-  public boolean canBeEvaluated() {
-    return true;
-  }
-
-  /**
-   * If needed, creates object for this {@link JavaInfo} manually.
-   *
-   * Sometimes we need this ("this", "exposed").
-   *
-   * Sometimes - no (constructor) because {@link AstEvaluationEngine} can evaluate creation node
-   * without our assistance.
-   *
-   * @param context
-   *          the {@link EvaluationContext} in which we should evaluate other {@link Expression}'s.
-   * @param visitor
-   *          the {@link ExecutionFlowFrameVisitor} that initiated this evaluation. We can use it
-   *          for "continuation".
-   */
-  public Object create(EvaluationContext context, ExecutionFlowFrameVisitor visitor)
-      throws Exception {
-    throw new IllegalStateException();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Adding
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @param target
-   *          the {@link NodeTarget} that specifies location where this returned source will be
-   *          used.
-   *
-   * @return the Java source that should be used for adding new component. This method should also
-   *         do any operations required to make returned code correct, for example add imports
-   *         (almost always), fields (for instance factories).
-   */
-  public String add_getSource(NodeTarget target) throws Exception {
-    throw new IllegalStateException("Generic CreationSupport does not support adding.");
-  }
-
-  /**
-   * After adding new component using source returned from {@link #add_getSource(NodeTarget)} the
-   * {@link Expression} for this source will be set.
-   */
-  public void add_setSourceExpression(Expression expression) throws Exception {
-    throw new IllegalStateException("Generic CreationSupport does not support adding.");
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Delete
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if {@link #delete()} can be used.
-   */
-  public boolean canDelete() {
-    return false;
-  }
-
-  /**
-   * Deletes this {@link JavaInfo} from its parent.
-   */
-  public void delete() throws Exception {
-    throw new IllegalStateException("Generic CreationSupport does not support delete operation.");
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Clipboard
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link IClipboardCreationSupport} that can be used during paste to create
-   *         {@link CreationSupport} for pasted {@link JavaInfo}. Can return <code>null</code>, if
-   *         copy/paste is not available.
-   */
-  public IClipboardCreationSupport getClipboard() throws Exception {
-    return null;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link Class} of component.
-   */
-  protected final Class<?> getComponentClass() {
-    return m_javaInfo.getDescription().getComponentClass();
-  }
+	protected JavaInfo m_javaInfo;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets {@link JavaInfo} that uses this {@link CreationSupport}.
+	 */
+	public void setJavaInfo(JavaInfo javaInfo) throws Exception {
+		Assert.isLegal(m_javaInfo == null, "JavaInfo for CreationSupport can be set only one time.");
+		Assert.isNotNull(javaInfo, "JavaInfo for CreationSupport can not be 'null'.");
+		m_javaInfo = javaInfo;
+	}
+
+	/**
+	 * @return <code>true</code> if given {@link ASTNode} represents {@link JavaInfo} of this
+	 *         {@link CreationSupport}.
+	 */
+	public abstract boolean isJavaInfo(ASTNode node);
+
+	/**
+	 * @return the {@link ASTNode} that presents creation of this component.
+	 */
+	public abstract ASTNode getNode();
+
+	/**
+	 * If this {@link CreationSupport} form an association during creation (for example in SWT all
+	 * constructors accept parent), the return corresponding {@link Association}, and
+	 * <code>null</code> in other case.
+	 *
+	 * @return the {@link Association} for this {@link CreationSupport} or <code>null</code>.
+	 */
+	public Association getAssociation() throws Exception {
+		return null;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Validation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if {@link JavaInfo} created using this {@link CreationSupport} can be
+	 *         places (created or added) on given parent. Returns <code>true</code> by default.
+	 */
+	public boolean canUseParent(JavaInfo parent) throws Exception {
+		return true;
+	}
+
+	/**
+	 * @return <code>true</code> if this {@link JavaInfo} can be reordered inside of its parent.
+	 */
+	public boolean canReorder() {
+		return false;
+	}
+
+	/**
+	 * @return <code>true</code> if this {@link JavaInfo} can be reparented.
+	 */
+	public boolean canReparent() {
+		return false;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Properties
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds {@link ExpressionAccessor} for given {@link GenericPropertyDescription}.
+	 */
+	public void addAccessors(GenericPropertyDescription propertyDescription,
+			List<ExpressionAccessor> accessors) throws Exception {
+		// don't add any new accessors by default
+	}
+
+	/**
+	 * Allows {@link CreationSupport} add zero or more {@link Property}'s, for example for constructor
+	 * we can add complex property with sub-property for each argument.
+	 */
+	public void addProperties(List<Property> properties) throws Exception {
+		// don't add any property by default
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Creation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if object with this {@link CreationSupport} can be evaluated using
+	 *         AST. For example {@link ClassInstanceCreation} can be evaluated, but "this" component -
+	 *         no.
+	 */
+	public boolean canBeEvaluated() {
+		return true;
+	}
+
+	/**
+	 * If needed, creates object for this {@link JavaInfo} manually.
+	 *
+	 * Sometimes we need this ("this", "exposed").
+	 *
+	 * Sometimes - no (constructor) because {@link AstEvaluationEngine} can evaluate creation node
+	 * without our assistance.
+	 *
+	 * @param context
+	 *          the {@link EvaluationContext} in which we should evaluate other {@link Expression}'s.
+	 * @param visitor
+	 *          the {@link ExecutionFlowFrameVisitor} that initiated this evaluation. We can use it
+	 *          for "continuation".
+	 */
+	public Object create(EvaluationContext context, ExecutionFlowFrameVisitor visitor)
+			throws Exception {
+		throw new IllegalStateException();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Adding
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @param target
+	 *          the {@link NodeTarget} that specifies location where this returned source will be
+	 *          used.
+	 *
+	 * @return the Java source that should be used for adding new component. This method should also
+	 *         do any operations required to make returned code correct, for example add imports
+	 *         (almost always), fields (for instance factories).
+	 */
+	public String add_getSource(NodeTarget target) throws Exception {
+		throw new IllegalStateException("Generic CreationSupport does not support adding.");
+	}
+
+	/**
+	 * After adding new component using source returned from {@link #add_getSource(NodeTarget)} the
+	 * {@link Expression} for this source will be set.
+	 */
+	public void add_setSourceExpression(Expression expression) throws Exception {
+		throw new IllegalStateException("Generic CreationSupport does not support adding.");
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Delete
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if {@link #delete()} can be used.
+	 */
+	public boolean canDelete() {
+		return false;
+	}
+
+	/**
+	 * Deletes this {@link JavaInfo} from its parent.
+	 */
+	public void delete() throws Exception {
+		throw new IllegalStateException("Generic CreationSupport does not support delete operation.");
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Clipboard
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link IClipboardCreationSupport} that can be used during paste to create
+	 *         {@link CreationSupport} for pasted {@link JavaInfo}. Can return <code>null</code>, if
+	 *         copy/paste is not available.
+	 */
+	public IClipboardCreationSupport getClipboard() throws Exception {
+		return null;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link Class} of component.
+	 */
+	protected final Class<?> getComponentClass() {
+		return m_javaInfo.getDescription().getComponentClass();
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/CreationSupportUtils.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/CreationSupportUtils.java
index d18d8d3e8..4184dfabb 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/CreationSupportUtils.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/CreationSupportUtils.java
@@ -38,185 +38,185 @@
  * @coverage core.model.creation
  */
 public final class CreationSupportUtils {
-  private final JavaInfo m_javaInfo;
-  private final CreationSupport m_creationSupport;
+	private final JavaInfo m_javaInfo;
+	private final CreationSupport m_creationSupport;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CreationSupportUtils(JavaInfo javaInfo) {
-    m_javaInfo = javaInfo;
-    m_creationSupport = javaInfo.getCreationSupport();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CreationSupportUtils(JavaInfo javaInfo) {
+		m_javaInfo = javaInfo;
+		m_creationSupport = javaInfo.getCreationSupport();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link ExpressionAccessor} for accessing {@link Expression}.
-   */
-  private ExpressionAccessor createAccessor(ParameterDescription parameter) {
-    int index = parameter.getIndex();
-    String defaultSource = parameter.getDefaultSource();
-    if (m_creationSupport instanceof ConstructorCreationSupport) {
-      return new ConstructorAccessor(index, defaultSource);
-    } else if (m_creationSupport instanceof ThisCreationSupport) {
-      SuperConstructorInvocation invocation =
-          ((ThisCreationSupport) m_creationSupport).getInvocation();
-      return new SuperConstructorAccessor(invocation, index, defaultSource);
-    } else {
-      Assert.instanceOf(AbstractFactoryCreationSupport.class, m_creationSupport);
-      return new FactoryAccessor(index, defaultSource);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link ExpressionAccessor} for accessing {@link Expression}.
+	 */
+	private ExpressionAccessor createAccessor(ParameterDescription parameter) {
+		int index = parameter.getIndex();
+		String defaultSource = parameter.getDefaultSource();
+		if (m_creationSupport instanceof ConstructorCreationSupport) {
+			return new ConstructorAccessor(index, defaultSource);
+		} else if (m_creationSupport instanceof ThisCreationSupport) {
+			SuperConstructorInvocation invocation =
+					((ThisCreationSupport) m_creationSupport).getInvocation();
+			return new SuperConstructorAccessor(invocation, index, defaultSource);
+		} else {
+			Assert.instanceOf(AbstractFactoryCreationSupport.class, m_creationSupport);
+			return new FactoryAccessor(index, defaultSource);
+		}
+	}
 
-  private Expression getArgument(ParameterDescription parameter) {
-    int index = parameter.getIndex();
-    return getArguments().get(index);
-  }
+	private Expression getArgument(ParameterDescription parameter) {
+		int index = parameter.getIndex();
+		return getArguments().get(index);
+	}
 
-  private List<Expression> getArguments() {
-    if (m_creationSupport instanceof ConstructorCreationSupport) {
-      return DomGenerics.arguments(((ConstructorCreationSupport) m_creationSupport).getCreation());
-    } else if (m_creationSupport instanceof ThisCreationSupport) {
-      SuperConstructorInvocation invocation =
-          ((ThisCreationSupport) m_creationSupport).getInvocation();
-      return DomGenerics.arguments(invocation);
-    } else {
-      Assert.instanceOf(AbstractFactoryCreationSupport.class, m_creationSupport);
-      return DomGenerics.arguments(((AbstractFactoryCreationSupport) m_creationSupport).getInvocation());
-    }
-  }
+	private List<Expression> getArguments() {
+		if (m_creationSupport instanceof ConstructorCreationSupport) {
+			return DomGenerics.arguments(((ConstructorCreationSupport) m_creationSupport).getCreation());
+		} else if (m_creationSupport instanceof ThisCreationSupport) {
+			SuperConstructorInvocation invocation =
+					((ThisCreationSupport) m_creationSupport).getInvocation();
+			return DomGenerics.arguments(invocation);
+		} else {
+			Assert.instanceOf(AbstractFactoryCreationSupport.class, m_creationSupport);
+			return DomGenerics.arguments(((AbstractFactoryCreationSupport) m_creationSupport).getInvocation());
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Properties
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link GenericPropertyImpl} for given {@link ParameterDescription} of constructor.
-   */
-  public Property createProperty(ParameterDescription parameter) throws Exception {
-    // may be disabled
-    if (parameter.hasTrueTag("property.no")) {
-      return null;
-    }
-    // try to find JavaInfo passed as parameter
-    if (parameter.isParent()) {
-      Expression argument = getArgument(parameter);
-      JavaInfo argumentJavaInfo = getArgumentJavaInfo(argument);
-      if (argumentJavaInfo != null) {
-        ComplexProperty complexProperty = new ComplexProperty(parameter.getName(), "(properties)");
-        complexProperty.setProperties(argumentJavaInfo.getProperties());
-        return complexProperty;
-      }
-    }
-    // prepare PropertyEditor
-    PropertyEditor editor = parameter.getEditor();
-    // if no special PropertyEditor, use Object editor
-    if (editor == null && shouldUseObjectPropertyEditor(parameter)) {
-      editor = ObjectPropertyEditor.INSTANCE;
-    }
-    // create property
-    if (editor != null) {
-      ExpressionAccessor accessor = createAccessor(parameter);
-      ExpressionConverter converter = parameter.getConverter();
-      GenericPropertyImpl property =
-          new GenericPropertyImpl(m_javaInfo,
-              parameter.getName(),
-              new ExpressionAccessor[]{accessor},
-              Property.UNKNOWN_VALUE,
-              converter,
-              editor);
-      property.setType(parameter.getType());
-      return property;
-    }
-    // no property
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Properties
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link GenericPropertyImpl} for given {@link ParameterDescription} of constructor.
+	 */
+	public Property createProperty(ParameterDescription parameter) throws Exception {
+		// may be disabled
+		if (parameter.hasTrueTag("property.no")) {
+			return null;
+		}
+		// try to find JavaInfo passed as parameter
+		if (parameter.isParent()) {
+			Expression argument = getArgument(parameter);
+			JavaInfo argumentJavaInfo = getArgumentJavaInfo(argument);
+			if (argumentJavaInfo != null) {
+				ComplexProperty complexProperty = new ComplexProperty(parameter.getName(), "(properties)");
+				complexProperty.setProperties(argumentJavaInfo.getProperties());
+				return complexProperty;
+			}
+		}
+		// prepare PropertyEditor
+		PropertyEditor editor = parameter.getEditor();
+		// if no special PropertyEditor, use Object editor
+		if (editor == null && shouldUseObjectPropertyEditor(parameter)) {
+			editor = ObjectPropertyEditor.INSTANCE;
+		}
+		// create property
+		if (editor != null) {
+			ExpressionAccessor accessor = createAccessor(parameter);
+			ExpressionConverter converter = parameter.getConverter();
+			GenericPropertyImpl property =
+					new GenericPropertyImpl(m_javaInfo,
+							parameter.getName(),
+							new ExpressionAccessor[]{accessor},
+							Property.UNKNOWN_VALUE,
+							converter,
+							editor);
+			property.setType(parameter.getType());
+			return property;
+		}
+		// no property
+		return null;
+	}
 
-  /**
-   * @return the {@link JavaInfo} in same hierarchy which corresponds to the given
-   *         {@link Expression}.
-   */
-  private JavaInfo getArgumentJavaInfo(Expression argument) {
-    JavaInfo argumentJavaInfo = m_javaInfo.getRootJava().getChildRepresentedBy(argument);
-    // may be not bound to hierarchy
-    if (argumentJavaInfo != null && argumentJavaInfo.getRoot() != m_javaInfo.getRoot()) {
-      return null;
-    }
-    // done
-    return argumentJavaInfo;
-  }
+	/**
+	 * @return the {@link JavaInfo} in same hierarchy which corresponds to the given
+	 *         {@link Expression}.
+	 */
+	private JavaInfo getArgumentJavaInfo(Expression argument) {
+		JavaInfo argumentJavaInfo = m_javaInfo.getRootJava().getChildRepresentedBy(argument);
+		// may be not bound to hierarchy
+		if (argumentJavaInfo != null && argumentJavaInfo.getRoot() != m_javaInfo.getRoot()) {
+			return null;
+		}
+		// done
+		return argumentJavaInfo;
+	}
 
-  private static boolean shouldUseObjectPropertyEditor(ParameterDescription parameter) {
-    Class<?> type = parameter.getType();
-    return type != null && !type.isPrimitive();
-  }
+	private static boolean shouldUseObjectPropertyEditor(ParameterDescription parameter) {
+		Class<?> type = parameter.getType();
+		return type != null && !type.isPrimitive();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Clipboard
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the source for arguments.
-   */
-  public String getClipboardArguments(List<ParameterDescription> parameters) throws Exception {
-    StringBuilder argumentsSource = new StringBuilder();
-    List<Expression> arguments = getArguments();
-    for (ParameterDescription parameter : parameters) {
-      // append separator
-      if (argumentsSource.length() != 0) {
-        argumentsSource.append(", ");
-      }
-      // try to use broadcast
-      {
-        String[] source = new String[1];
-        Expression argument = arguments.get(parameter.getIndex());
-        m_javaInfo.getBroadcastJava().clipboardCopy_Argument(
-            m_javaInfo,
-            parameter,
-            argument,
-            source);
-        if (source[0] != null) {
-          argumentsSource.append(source[0]);
-          continue;
-        }
-      }
-      // append argument
-      if (parameter.isParent()) {
-        argumentsSource.append("%parent%");
-      } else {
-        String argumentSource = getClipboardArgument(parameter);
-        argumentsSource.append(argumentSource);
-      }
-    }
-    return argumentsSource.toString();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Clipboard
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the source for arguments.
+	 */
+	public String getClipboardArguments(List<ParameterDescription> parameters) throws Exception {
+		StringBuilder argumentsSource = new StringBuilder();
+		List<Expression> arguments = getArguments();
+		for (ParameterDescription parameter : parameters) {
+			// append separator
+			if (argumentsSource.length() != 0) {
+				argumentsSource.append(", ");
+			}
+			// try to use broadcast
+			{
+				String[] source = new String[1];
+				Expression argument = arguments.get(parameter.getIndex());
+				m_javaInfo.getBroadcastJava().clipboardCopy_Argument(
+						m_javaInfo,
+						parameter,
+						argument,
+						source);
+				if (source[0] != null) {
+					argumentsSource.append(source[0]);
+					continue;
+				}
+			}
+			// append argument
+			if (parameter.isParent()) {
+				argumentsSource.append("%parent%");
+			} else {
+				String argumentSource = getClipboardArgument(parameter);
+				argumentsSource.append(argumentSource);
+			}
+		}
+		return argumentsSource.toString();
+	}
 
-  private String getClipboardArgument(ParameterDescription parameter) throws Exception {
-    String argumentSource = null;
-    // try GenericPropertyImpl
-    {
-      Property argumentProperty = createProperty(parameter);
-      if (argumentProperty instanceof GenericPropertyImpl) {
-        argumentSource = ((GenericPropertyImpl) argumentProperty).getClipboardSource();
-      }
-    }
-    // default source
-    if (argumentSource == null) {
-      argumentSource = parameter.getDefaultSource();
-    }
-    // ensure or fail
-    Assert.isNotNull(argumentSource, "No source for "
-        + parameter.getIndex()
-        + "-th argument of "
-        + m_creationSupport.getNode());
-    return argumentSource;
-  }
+	private String getClipboardArgument(ParameterDescription parameter) throws Exception {
+		String argumentSource = null;
+		// try GenericPropertyImpl
+		{
+			Property argumentProperty = createProperty(parameter);
+			if (argumentProperty instanceof GenericPropertyImpl) {
+				argumentSource = ((GenericPropertyImpl) argumentProperty).getClipboardSource();
+			}
+		}
+		// default source
+		if (argumentSource == null) {
+			argumentSource = parameter.getDefaultSource();
+		}
+		// ensure or fail
+		Assert.isNotNull(argumentSource, "No source for "
+				+ parameter.getIndex()
+				+ "-th argument of "
+				+ m_creationSupport.getNode());
+		return argumentSource;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/ExposedFieldCreationSupport.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/ExposedFieldCreationSupport.java
index 493615345..5316095a6 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/ExposedFieldCreationSupport.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/ExposedFieldCreationSupport.java
@@ -37,182 +37,182 @@
  * @coverage core.model.creation
  */
 public final class ExposedFieldCreationSupport extends CreationSupport
-    implements
-      IImplicitCreationSupport,
-      IExposedCreationSupport {
-  private final JavaInfo m_hostJavaInfo;
-  private final Field m_field;
-  private final String m_fieldName;
-  private final boolean m_direct;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ExposedFieldCreationSupport(JavaInfo hostJavaInfo, Field field, boolean direct) {
-    m_hostJavaInfo = hostJavaInfo;
-    m_field = field;
-    m_fieldName = m_field.getName();
-    m_direct = direct;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    return "field: " + m_field.getType().getName();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void setJavaInfo(JavaInfo javaInfo) throws Exception {
-    super.setJavaInfo(javaInfo);
-    // evaluation
-    m_hostJavaInfo.addBroadcastListener(new JavaInfoSetObjectAfter() {
-      @Override
-      public void invoke(JavaInfo target, Object o) throws Exception {
-        if (target == m_hostJavaInfo) {
-          if (m_javaInfo.getObject() == null) {
-            Object object = m_field.get(o);
-            if (object != null) {
-              m_javaInfo.setObject(object);
-            }
-          }
-        }
-      }
-    });
-    // icon decorator
-    m_javaInfo.addBroadcastListener(new ObjectInfoPresentationDecorateIcon() {
-      @Override
-      public void invoke(ObjectInfo object, Image[] icon) throws Exception {
-        if (object == m_javaInfo) {
-          Image decorator = DesignerPlugin.getImage("exposed/decorator.gif");
-          icon[0] =
-              SwtResourceManager.decorateImage(icon[0], decorator, SwtResourceManager.BOTTOM_RIGHT);
-        }
-      }
-    });
-  }
-
-  @Override
-  public boolean isJavaInfo(ASTNode node) {
-    if (node instanceof SimpleName) {
-      SimpleName simpleName = (SimpleName) node;
-      return isNameOfField(simpleName)
-          && !isFieldHidden(simpleName)
-          && m_hostJavaInfo.isRepresentedBy(null);
-    }
-    if (node instanceof QualifiedName) {
-      QualifiedName qualifiedName = (QualifiedName) node;
-      Name qualifier = qualifiedName.getQualifier();
-      SimpleName simpleName = qualifiedName.getName();
-      return isNameOfField(simpleName) && m_hostJavaInfo.isRepresentedBy(qualifier);
-    }
-    return false;
-  }
-
-  @Override
-  public ASTNode getNode() {
-    return m_hostJavaInfo.getCreationSupport().getNode();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private boolean isNameOfField(SimpleName simpleName) {
-    return simpleName.getIdentifier().equals(m_fieldName);
-  }
-
-  private boolean isFieldHidden(SimpleName simpleName) {
-    if (AstNodeUtils.isVariable(simpleName)) {
-      ExecutionFlowDescription flowDescription =
-          JavaInfoUtils.getState(m_hostJavaInfo).getFlowDescription();
-      return ExecutionFlowUtils.getLastAssignment(flowDescription, simpleName) != null;
-    }
-    return false;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Special access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link JavaInfo} that exposes this {@link JavaInfo}.
-   */
-  @Override
-  public JavaInfo getHostJavaInfo() {
-    return m_hostJavaInfo;
-  }
-
-  /**
-   * @return the {@link Field} used to expose this {@link JavaInfo}.
-   */
-  public Field getField() {
-    return m_field;
-  }
-
-  /**
-   * @return <code>true</code> if this {@link JavaInfo} is direct child of host {@link JavaInfo}.
-   */
-  @Override
-  public boolean isDirect() {
-    return m_direct;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Delete
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Components with {@link ExposedFieldCreationSupport} can be "deleted", but for them this means
-   * that they delete their children and related nodes, but keep themselves in parent.
-   */
-  @Override
-  public boolean canDelete() {
-    return true;
-  }
-
-  @Override
-  public void delete() throws Exception {
-    JavaInfoUtils.deleteJavaInfo(m_javaInfo, false);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IClipboardImplicitCreationSupport
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public IClipboardImplicitCreationSupport getImplicitClipboard() {
-    final String fieldName = m_fieldName;
-    return new IClipboardImplicitCreationSupport() {
-      private static final long serialVersionUID = 0L;
-
-      @Override
-      public JavaInfo find(JavaInfo host) throws Exception {
-        for (JavaInfo child : host.getChildrenJava()) {
-          if (child.getCreationSupport() instanceof ExposedFieldCreationSupport) {
-            ExposedFieldCreationSupport exposedCreation =
-                (ExposedFieldCreationSupport) child.getCreationSupport();
-            if (exposedCreation.m_fieldName.equals(fieldName)) {
-              return child;
-            }
-          }
-        }
-        return null;
-      }
-    };
-  }
+implements
+IImplicitCreationSupport,
+IExposedCreationSupport {
+	private final JavaInfo m_hostJavaInfo;
+	private final Field m_field;
+	private final String m_fieldName;
+	private final boolean m_direct;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ExposedFieldCreationSupport(JavaInfo hostJavaInfo, Field field, boolean direct) {
+		m_hostJavaInfo = hostJavaInfo;
+		m_field = field;
+		m_fieldName = m_field.getName();
+		m_direct = direct;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		return "field: " + m_field.getType().getName();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void setJavaInfo(JavaInfo javaInfo) throws Exception {
+		super.setJavaInfo(javaInfo);
+		// evaluation
+		m_hostJavaInfo.addBroadcastListener(new JavaInfoSetObjectAfter() {
+			@Override
+			public void invoke(JavaInfo target, Object o) throws Exception {
+				if (target == m_hostJavaInfo) {
+					if (m_javaInfo.getObject() == null) {
+						Object object = m_field.get(o);
+						if (object != null) {
+							m_javaInfo.setObject(object);
+						}
+					}
+				}
+			}
+		});
+		// icon decorator
+		m_javaInfo.addBroadcastListener(new ObjectInfoPresentationDecorateIcon() {
+			@Override
+			public void invoke(ObjectInfo object, Image[] icon) throws Exception {
+				if (object == m_javaInfo) {
+					Image decorator = DesignerPlugin.getImage("exposed/decorator.gif");
+					icon[0] =
+							SwtResourceManager.decorateImage(icon[0], decorator, SwtResourceManager.BOTTOM_RIGHT);
+				}
+			}
+		});
+	}
+
+	@Override
+	public boolean isJavaInfo(ASTNode node) {
+		if (node instanceof SimpleName) {
+			SimpleName simpleName = (SimpleName) node;
+			return isNameOfField(simpleName)
+					&& !isFieldHidden(simpleName)
+					&& m_hostJavaInfo.isRepresentedBy(null);
+		}
+		if (node instanceof QualifiedName) {
+			QualifiedName qualifiedName = (QualifiedName) node;
+			Name qualifier = qualifiedName.getQualifier();
+			SimpleName simpleName = qualifiedName.getName();
+			return isNameOfField(simpleName) && m_hostJavaInfo.isRepresentedBy(qualifier);
+		}
+		return false;
+	}
+
+	@Override
+	public ASTNode getNode() {
+		return m_hostJavaInfo.getCreationSupport().getNode();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private boolean isNameOfField(SimpleName simpleName) {
+		return simpleName.getIdentifier().equals(m_fieldName);
+	}
+
+	private boolean isFieldHidden(SimpleName simpleName) {
+		if (AstNodeUtils.isVariable(simpleName)) {
+			ExecutionFlowDescription flowDescription =
+					JavaInfoUtils.getState(m_hostJavaInfo).getFlowDescription();
+			return ExecutionFlowUtils.getLastAssignment(flowDescription, simpleName) != null;
+		}
+		return false;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Special access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link JavaInfo} that exposes this {@link JavaInfo}.
+	 */
+	@Override
+	public JavaInfo getHostJavaInfo() {
+		return m_hostJavaInfo;
+	}
+
+	/**
+	 * @return the {@link Field} used to expose this {@link JavaInfo}.
+	 */
+	public Field getField() {
+		return m_field;
+	}
+
+	/**
+	 * @return <code>true</code> if this {@link JavaInfo} is direct child of host {@link JavaInfo}.
+	 */
+	@Override
+	public boolean isDirect() {
+		return m_direct;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Delete
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Components with {@link ExposedFieldCreationSupport} can be "deleted", but for them this means
+	 * that they delete their children and related nodes, but keep themselves in parent.
+	 */
+	@Override
+	public boolean canDelete() {
+		return true;
+	}
+
+	@Override
+	public void delete() throws Exception {
+		JavaInfoUtils.deleteJavaInfo(m_javaInfo, false);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IClipboardImplicitCreationSupport
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public IClipboardImplicitCreationSupport getImplicitClipboard() {
+		final String fieldName = m_fieldName;
+		return new IClipboardImplicitCreationSupport() {
+			private static final long serialVersionUID = 0L;
+
+			@Override
+			public JavaInfo find(JavaInfo host) throws Exception {
+				for (JavaInfo child : host.getChildrenJava()) {
+					if (child.getCreationSupport() instanceof ExposedFieldCreationSupport) {
+						ExposedFieldCreationSupport exposedCreation =
+								(ExposedFieldCreationSupport) child.getCreationSupport();
+						if (exposedCreation.m_fieldName.equals(fieldName)) {
+							return child;
+						}
+					}
+				}
+				return null;
+			}
+		};
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/ExposedPropertyCreationSupport.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/ExposedPropertyCreationSupport.java
index eebf2e32d..9f8083cc1 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/ExposedPropertyCreationSupport.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/ExposedPropertyCreationSupport.java
@@ -38,210 +38,210 @@
  * @coverage core.model.creation
  */
 public final class ExposedPropertyCreationSupport extends CreationSupport
-    implements
-      IImplicitCreationSupport,
-      IExposedCreationSupport {
-  private static final String IS_SET_REPLACED = "ExposedPropertyCreationSupport.isSetReplaced";
-  private final JavaInfo m_hostJavaInfo;
-  private final Method m_getMethod;
-  private final String m_getMethodSignature;
-  private final String m_setMethodSignature;
-  private final boolean m_direct;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ExposedPropertyCreationSupport(JavaInfo hostJavaInfo,
-      Method getMethod,
-      Method setMethod,
-      boolean direct) {
-    m_hostJavaInfo = hostJavaInfo;
-    m_getMethod = getMethod;
-    m_direct = direct;
-    m_getMethodSignature = ReflectionUtils.getMethodSignature(m_getMethod);
-    m_setMethodSignature = setMethod != null ? ReflectionUtils.getMethodSignature(setMethod) : null;
-    // add listeners to remove/add exposed component when "setXXX()" added/removed
-    if (setMethod != null) {
-      m_hostJavaInfo.addBroadcastListener(new JavaInfoMethodAssociationOnParse() {
-        @Override
-        public void invoke(JavaInfo parent, JavaInfo child, MethodDescription methodDescription)
-            throws Exception {
-          if (parent == m_hostJavaInfo) {
-            if (m_setMethodSignature.equals(methodDescription.getSignature())) {
-              parent.removeChild(m_javaInfo);
-              child.putArbitraryValue(IS_SET_REPLACED, Boolean.TRUE);
-            }
-          }
-        }
-      });
-      m_hostJavaInfo.addBroadcastListener(new ObjectInfoDelete() {
-        @Override
-        public void before(ObjectInfo parent, ObjectInfo child) throws Exception {
-          // when delete component, associated using "setXXX()", restore original exposed component
-          if (parent == m_hostJavaInfo && child != m_javaInfo) {
-            MethodInvocation invocation = m_hostJavaInfo.getMethodInvocation(m_setMethodSignature);
-            if (invocation != null) {
-              Expression argument = (Expression) invocation.arguments().get(0);
-              JavaInfo removingChild = m_hostJavaInfo.getChildRepresentedBy(argument);
-              if (removingChild != null) {
-                parent.addChild(m_javaInfo);
-              }
-            }
-          }
-        }
-      });
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    return "method: " + ReflectionUtils.toString(m_getMethod);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void setJavaInfo(JavaInfo javaInfo) throws Exception {
-    super.setJavaInfo(javaInfo);
-    // evaluation
-    m_hostJavaInfo.addBroadcastListener(new JavaInfoSetObjectAfter() {
-      @Override
-      public void invoke(JavaInfo target, Object o) throws Exception {
-        if (target == m_hostJavaInfo) {
-          if (m_javaInfo.getObject() == null) {
-            // get object, may fail if not right time, case 47105
-            Object object;
-            try {
-              object = m_getMethod.invoke(o);
-            } catch (Throwable e) {
-              object = null;
-            }
-            // set object
-            if (object != null) {
-              m_javaInfo.setObject(object);
-            }
-          }
-        }
-      }
-    });
-    // icon decorator
-    m_javaInfo.addBroadcastListener(new ObjectInfoPresentationDecorateIcon() {
-      @Override
-      public void invoke(ObjectInfo object, Image[] icon) throws Exception {
-        if (object == m_javaInfo) {
-          Image decorator = DesignerPlugin.getImage("exposed/decorator.gif");
-          icon[0] =
-              SwtResourceManager.decorateImage(icon[0], decorator, SwtResourceManager.BOTTOM_RIGHT);
-        }
-      }
-    });
-  }
-
-  @Override
-  public boolean isJavaInfo(ASTNode node) {
-    if (node instanceof MethodInvocation) {
-      MethodInvocation invocation = (MethodInvocation) node;
-      return invocation.arguments().isEmpty()
-          && invocation.getName().getIdentifier().equals(m_getMethod.getName())
-          && m_hostJavaInfo.isRepresentedBy(invocation.getExpression());
-    }
-    return false;
-  }
-
-  @Override
-  public ASTNode getNode() {
-    return m_hostJavaInfo.getCreationSupport().getNode();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Special access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link JavaInfo} that exposes this {@link JavaInfo}.
-   */
-  @Override
-  public JavaInfo getHostJavaInfo() {
-    return m_hostJavaInfo;
-  }
-
-  /**
-   * @return the {@link Method} used to expose this {@link JavaInfo}.
-   */
-  public Method getMethod() {
-    return m_getMethod;
-  }
-
-  /**
-   * @return <code>true</code> if this {@link JavaInfo} is direct child of host {@link JavaInfo}.
-   */
-  @Override
-  public boolean isDirect() {
-    return m_direct;
-  }
-
-  /**
-   * @return <code>true</code> if given {@link JavaInfo} was set using "setXXX()" during parsing
-   *         instead of some exposed child.
-   */
-  public static boolean isReplacementForExposed(JavaInfo javaInfo) {
-    return javaInfo.getArbitraryValue(IS_SET_REPLACED) != null;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Delete
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Components with {@link ExposedPropertyCreationSupport} can be "deleted", but for them this
-   * means that they delete their children and related nodes, but keep themselves in parent.
-   */
-  @Override
-  public boolean canDelete() {
-    return true;
-  }
-
-  @Override
-  public void delete() throws Exception {
-    JavaInfoUtils.deleteJavaInfo(m_javaInfo, false);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IClipboardImplicitCreationSupport
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public IClipboardImplicitCreationSupport getImplicitClipboard() {
-    final String getMethodSignature = m_getMethodSignature;
-    return new IClipboardImplicitCreationSupport() {
-      private static final long serialVersionUID = 0L;
-
-      @Override
-      public JavaInfo find(JavaInfo host) throws Exception {
-        for (JavaInfo child : host.getChildrenJava()) {
-          if (child.getCreationSupport() instanceof ExposedPropertyCreationSupport) {
-            ExposedPropertyCreationSupport exposedCreation =
-                (ExposedPropertyCreationSupport) child.getCreationSupport();
-            if (exposedCreation.m_getMethodSignature.equals(getMethodSignature)) {
-              return child;
-            }
-          }
-        }
-        return null;
-      }
-    };
-  }
+implements
+IImplicitCreationSupport,
+IExposedCreationSupport {
+	private static final String IS_SET_REPLACED = "ExposedPropertyCreationSupport.isSetReplaced";
+	private final JavaInfo m_hostJavaInfo;
+	private final Method m_getMethod;
+	private final String m_getMethodSignature;
+	private final String m_setMethodSignature;
+	private final boolean m_direct;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ExposedPropertyCreationSupport(JavaInfo hostJavaInfo,
+			Method getMethod,
+			Method setMethod,
+			boolean direct) {
+		m_hostJavaInfo = hostJavaInfo;
+		m_getMethod = getMethod;
+		m_direct = direct;
+		m_getMethodSignature = ReflectionUtils.getMethodSignature(m_getMethod);
+		m_setMethodSignature = setMethod != null ? ReflectionUtils.getMethodSignature(setMethod) : null;
+		// add listeners to remove/add exposed component when "setXXX()" added/removed
+		if (setMethod != null) {
+			m_hostJavaInfo.addBroadcastListener(new JavaInfoMethodAssociationOnParse() {
+				@Override
+				public void invoke(JavaInfo parent, JavaInfo child, MethodDescription methodDescription)
+						throws Exception {
+					if (parent == m_hostJavaInfo) {
+						if (m_setMethodSignature.equals(methodDescription.getSignature())) {
+							parent.removeChild(m_javaInfo);
+							child.putArbitraryValue(IS_SET_REPLACED, Boolean.TRUE);
+						}
+					}
+				}
+			});
+			m_hostJavaInfo.addBroadcastListener(new ObjectInfoDelete() {
+				@Override
+				public void before(ObjectInfo parent, ObjectInfo child) throws Exception {
+					// when delete component, associated using "setXXX()", restore original exposed component
+					if (parent == m_hostJavaInfo && child != m_javaInfo) {
+						MethodInvocation invocation = m_hostJavaInfo.getMethodInvocation(m_setMethodSignature);
+						if (invocation != null) {
+							Expression argument = (Expression) invocation.arguments().get(0);
+							JavaInfo removingChild = m_hostJavaInfo.getChildRepresentedBy(argument);
+							if (removingChild != null) {
+								parent.addChild(m_javaInfo);
+							}
+						}
+					}
+				}
+			});
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		return "method: " + ReflectionUtils.toString(m_getMethod);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void setJavaInfo(JavaInfo javaInfo) throws Exception {
+		super.setJavaInfo(javaInfo);
+		// evaluation
+		m_hostJavaInfo.addBroadcastListener(new JavaInfoSetObjectAfter() {
+			@Override
+			public void invoke(JavaInfo target, Object o) throws Exception {
+				if (target == m_hostJavaInfo) {
+					if (m_javaInfo.getObject() == null) {
+						// get object, may fail if not right time, case 47105
+						Object object;
+						try {
+							object = m_getMethod.invoke(o);
+						} catch (Throwable e) {
+							object = null;
+						}
+						// set object
+						if (object != null) {
+							m_javaInfo.setObject(object);
+						}
+					}
+				}
+			}
+		});
+		// icon decorator
+		m_javaInfo.addBroadcastListener(new ObjectInfoPresentationDecorateIcon() {
+			@Override
+			public void invoke(ObjectInfo object, Image[] icon) throws Exception {
+				if (object == m_javaInfo) {
+					Image decorator = DesignerPlugin.getImage("exposed/decorator.gif");
+					icon[0] =
+							SwtResourceManager.decorateImage(icon[0], decorator, SwtResourceManager.BOTTOM_RIGHT);
+				}
+			}
+		});
+	}
+
+	@Override
+	public boolean isJavaInfo(ASTNode node) {
+		if (node instanceof MethodInvocation) {
+			MethodInvocation invocation = (MethodInvocation) node;
+			return invocation.arguments().isEmpty()
+					&& invocation.getName().getIdentifier().equals(m_getMethod.getName())
+					&& m_hostJavaInfo.isRepresentedBy(invocation.getExpression());
+		}
+		return false;
+	}
+
+	@Override
+	public ASTNode getNode() {
+		return m_hostJavaInfo.getCreationSupport().getNode();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Special access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link JavaInfo} that exposes this {@link JavaInfo}.
+	 */
+	@Override
+	public JavaInfo getHostJavaInfo() {
+		return m_hostJavaInfo;
+	}
+
+	/**
+	 * @return the {@link Method} used to expose this {@link JavaInfo}.
+	 */
+	public Method getMethod() {
+		return m_getMethod;
+	}
+
+	/**
+	 * @return <code>true</code> if this {@link JavaInfo} is direct child of host {@link JavaInfo}.
+	 */
+	@Override
+	public boolean isDirect() {
+		return m_direct;
+	}
+
+	/**
+	 * @return <code>true</code> if given {@link JavaInfo} was set using "setXXX()" during parsing
+	 *         instead of some exposed child.
+	 */
+	public static boolean isReplacementForExposed(JavaInfo javaInfo) {
+		return javaInfo.getArbitraryValue(IS_SET_REPLACED) != null;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Delete
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Components with {@link ExposedPropertyCreationSupport} can be "deleted", but for them this
+	 * means that they delete their children and related nodes, but keep themselves in parent.
+	 */
+	@Override
+	public boolean canDelete() {
+		return true;
+	}
+
+	@Override
+	public void delete() throws Exception {
+		JavaInfoUtils.deleteJavaInfo(m_javaInfo, false);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IClipboardImplicitCreationSupport
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public IClipboardImplicitCreationSupport getImplicitClipboard() {
+		final String getMethodSignature = m_getMethodSignature;
+		return new IClipboardImplicitCreationSupport() {
+			private static final long serialVersionUID = 0L;
+
+			@Override
+			public JavaInfo find(JavaInfo host) throws Exception {
+				for (JavaInfo child : host.getChildrenJava()) {
+					if (child.getCreationSupport() instanceof ExposedPropertyCreationSupport) {
+						ExposedPropertyCreationSupport exposedCreation =
+								(ExposedPropertyCreationSupport) child.getCreationSupport();
+						if (exposedCreation.m_getMethodSignature.equals(getMethodSignature)) {
+							return child;
+						}
+					}
+				}
+				return null;
+			}
+		};
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/ICreationSupportPermissions.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/ICreationSupportPermissions.java
index 9730325ec..cf216b518 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/ICreationSupportPermissions.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/ICreationSupportPermissions.java
@@ -21,46 +21,46 @@
  * @coverage core.model.creation
  */
 public interface ICreationSupportPermissions {
-  /**
-   * Implementation of {@link ICreationSupportPermissions} that does not allow any operation.
-   */
-  ICreationSupportPermissions FALSE = new ICreationSupportPermissions() {
-    @Override
-    public boolean canDelete(JavaInfo javaInfo) {
-      return false;
-    }
+	/**
+	 * Implementation of {@link ICreationSupportPermissions} that does not allow any operation.
+	 */
+	ICreationSupportPermissions FALSE = new ICreationSupportPermissions() {
+		@Override
+		public boolean canDelete(JavaInfo javaInfo) {
+			return false;
+		}
 
-    @Override
-    public void delete(JavaInfo javaInfo) throws Exception {
-      throw new NotImplementedException();
-    }
+		@Override
+		public void delete(JavaInfo javaInfo) throws Exception {
+			throw new NotImplementedException();
+		}
 
-    @Override
-    public boolean canReorder(JavaInfo javaInfo) {
-      return false;
-    }
+		@Override
+		public boolean canReorder(JavaInfo javaInfo) {
+			return false;
+		}
 
-    @Override
-    public boolean canReparent(JavaInfo javaInfo) {
-      return false;
-    }
-  };
+		@Override
+		public boolean canReparent(JavaInfo javaInfo) {
+			return false;
+		}
+	};
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Delete
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  boolean canDelete(JavaInfo javaInfo);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Delete
+	//
+	////////////////////////////////////////////////////////////////////////////
+	boolean canDelete(JavaInfo javaInfo);
 
-  void delete(JavaInfo javaInfo) throws Exception;
+	void delete(JavaInfo javaInfo) throws Exception;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Permissions
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  boolean canReorder(JavaInfo javaInfo);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Permissions
+	//
+	////////////////////////////////////////////////////////////////////////////
+	boolean canReorder(JavaInfo javaInfo);
 
-  boolean canReparent(JavaInfo javaInfo);
+	boolean canReparent(JavaInfo javaInfo);
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/IExposedCreationSupport.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/IExposedCreationSupport.java
index c430bfad6..19aaf02d3 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/IExposedCreationSupport.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/IExposedCreationSupport.java
@@ -19,13 +19,13 @@
  * @coverage core.model.creation
  */
 public interface IExposedCreationSupport {
-  /**
-   * @return the {@link JavaInfo} that exposes this {@link JavaInfo}.
-   */
-  JavaInfo getHostJavaInfo();
+	/**
+	 * @return the {@link JavaInfo} that exposes this {@link JavaInfo}.
+	 */
+	JavaInfo getHostJavaInfo();
 
-  /**
-   * @return <code>true</code> if this {@link JavaInfo} is direct child of host {@link JavaInfo}.
-   */
-  boolean isDirect();
+	/**
+	 * @return <code>true</code> if this {@link JavaInfo} is direct child of host {@link JavaInfo}.
+	 */
+	boolean isDirect();
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/IImplicitCreationSupport.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/IImplicitCreationSupport.java
index 978421978..319fb495c 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/IImplicitCreationSupport.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/IImplicitCreationSupport.java
@@ -20,5 +20,5 @@
  * @coverage core.model.creation
  */
 public interface IImplicitCreationSupport {
-  IClipboardImplicitCreationSupport getImplicitClipboard();
+	IClipboardImplicitCreationSupport getImplicitClipboard();
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/ILiveCreationSupport.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/ILiveCreationSupport.java
index be59987e2..a5b3ad748 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/ILiveCreationSupport.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/ILiveCreationSupport.java
@@ -28,5 +28,5 @@
  * @coverage core.model.creation
  */
 public interface ILiveCreationSupport {
-  CreationSupport getLiveComponentCreation();
+	CreationSupport getLiveComponentCreation();
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/IMethodParameterEvaluator.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/IMethodParameterEvaluator.java
index f14e3ceb4..7935306be 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/IMethodParameterEvaluator.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/IMethodParameterEvaluator.java
@@ -28,12 +28,12 @@
  * @coverage core.model.creation
  */
 public interface IMethodParameterEvaluator {
-  /**
-   * @return the value of given parameter or {@link AstEvaluationEngine#UNKNOWN}.
-   */
-  Object evaluateParameter(EvaluationContext context,
-      MethodDeclaration methodDeclaration,
-      String methodSignature,
-      SingleVariableDeclaration parameter,
-      int index) throws Exception;
+	/**
+	 * @return the value of given parameter or {@link AstEvaluationEngine#UNKNOWN}.
+	 */
+	Object evaluateParameter(EvaluationContext context,
+			MethodDeclaration methodDeclaration,
+			String methodSignature,
+			SingleVariableDeclaration parameter,
+			int index) throws Exception;
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/IThisMethodParameterEvaluator.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/IThisMethodParameterEvaluator.java
index dddb1f85b..8a201d139 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/IThisMethodParameterEvaluator.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/IThisMethodParameterEvaluator.java
@@ -25,23 +25,23 @@
  * @coverage core.model.creation
  */
 public interface IThisMethodParameterEvaluator {
-  /**
-   * @param context
-   *          the {@link EvaluationContext}
-   * @param methodDeclaration
-   *          the {@link MethodDeclaration} to evaluate parameter.
-   * @param methodSignature
-   *          the signature of {@link MethodDeclaration}.
-   * @param parameter
-   *          the parameter in {@link MethodDeclaration}.
-   * @param index
-   *          the index of parameter.
-   *
-   * @return the value of given parameter or {@link AstEvaluationEngine#UNKNOWN}.
-   */
-  Object evaluateParameter(EvaluationContext context,
-      MethodDeclaration methodDeclaration,
-      String methodSignature,
-      SingleVariableDeclaration parameter,
-      int index) throws Exception;
+	/**
+	 * @param context
+	 *          the {@link EvaluationContext}
+	 * @param methodDeclaration
+	 *          the {@link MethodDeclaration} to evaluate parameter.
+	 * @param methodSignature
+	 *          the signature of {@link MethodDeclaration}.
+	 * @param parameter
+	 *          the parameter in {@link MethodDeclaration}.
+	 * @param index
+	 *          the index of parameter.
+	 *
+	 * @return the value of given parameter or {@link AstEvaluationEngine#UNKNOWN}.
+	 */
+	Object evaluateParameter(EvaluationContext context,
+			MethodDeclaration methodDeclaration,
+			String methodSignature,
+			SingleVariableDeclaration parameter,
+			int index) throws Exception;
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/IWrapperControlCreationSupport.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/IWrapperControlCreationSupport.java
index 4a126e888..a1a1978bd 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/IWrapperControlCreationSupport.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/IWrapperControlCreationSupport.java
@@ -19,8 +19,8 @@
  * @coverage core.model.creation
  */
 public interface IWrapperControlCreationSupport {
-  /**
-   * @return the {@link JavaInfo} that wraps this {@link JavaInfo}.
-   */
-  JavaInfo getWrapperInfo();
+	/**
+	 * @return the {@link JavaInfo} that wraps this {@link JavaInfo}.
+	 */
+	JavaInfo getWrapperInfo();
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/InvocationChainCreationSupport.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/InvocationChainCreationSupport.java
index 3e5fb2971..c663fda5b 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/InvocationChainCreationSupport.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/InvocationChainCreationSupport.java
@@ -29,41 +29,41 @@
  * @coverage core.model.creation
  */
 public final class InvocationChainCreationSupport extends CreationSupport {
-  private final MethodInvocation m_invocation;
-  private final String m_chainSignatures;
+	private final MethodInvocation m_invocation;
+	private final String m_chainSignatures;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public InvocationChainCreationSupport(MethodInvocation invocation, String chainSignatures) {
-    m_invocation = invocation;
-    m_chainSignatures = chainSignatures;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public InvocationChainCreationSupport(MethodInvocation invocation, String chainSignatures) {
+		m_invocation = invocation;
+		m_chainSignatures = chainSignatures;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    return "invocationChain: " + m_chainSignatures;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		return "invocationChain: " + m_chainSignatures;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public ASTNode getNode() {
-    return m_invocation;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public ASTNode getNode() {
+		return m_invocation;
+	}
 
-  @Override
-  public boolean isJavaInfo(ASTNode node) {
-    return node == m_invocation;
-  }
+	@Override
+	public boolean isJavaInfo(ASTNode node) {
+		return node == m_invocation;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/MethodParameterCreationSupport.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/MethodParameterCreationSupport.java
index dd0aa1c56..21dc99702 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/MethodParameterCreationSupport.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/MethodParameterCreationSupport.java
@@ -22,39 +22,39 @@
  * @coverage core.model.creation
  */
 public class MethodParameterCreationSupport extends CreationSupport {
-  private final SingleVariableDeclaration m_parameter;
+	private final SingleVariableDeclaration m_parameter;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public MethodParameterCreationSupport(SingleVariableDeclaration parameter) {
-    m_parameter = parameter;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public MethodParameterCreationSupport(SingleVariableDeclaration parameter) {
+		m_parameter = parameter;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    return "parameter";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		return "parameter";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public ASTNode getNode() {
-    return m_parameter;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public ASTNode getNode() {
+		return m_parameter;
+	}
 
-  @Override
-  public boolean isJavaInfo(ASTNode node) {
-    return false;
-  }
+	@Override
+	public boolean isJavaInfo(ASTNode node) {
+		return false;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/OpaqueCreationSupport.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/OpaqueCreationSupport.java
index 7443e08ef..ba8de4dd9 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/OpaqueCreationSupport.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/OpaqueCreationSupport.java
@@ -27,98 +27,98 @@
  * @coverage core.model.creation
  */
 public class OpaqueCreationSupport extends CreationSupport {
-  private ICreationSupportPermissions m_permissions = ICreationSupportPermissions.FALSE;
-  private String m_source;
-  private Expression m_expression;
+	private ICreationSupportPermissions m_permissions = ICreationSupportPermissions.FALSE;
+	private String m_source;
+	private Expression m_expression;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public OpaqueCreationSupport(String source) {
-    m_source = source;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public OpaqueCreationSupport(String source) {
+		m_source = source;
+	}
 
-  public OpaqueCreationSupport(Expression expression) {
-    m_expression = expression;
-  }
+	public OpaqueCreationSupport(Expression expression) {
+		m_expression = expression;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    return "opaque";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		return "opaque";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets the {@link ICreationSupportPermissions} to delegate operations to.
-   */
-  public void setPermissions(ICreationSupportPermissions permissions) {
-    m_permissions = permissions;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets the {@link ICreationSupportPermissions} to delegate operations to.
+	 */
+	public void setPermissions(ICreationSupportPermissions permissions) {
+		m_permissions = permissions;
+	}
 
-  @Override
-  public ASTNode getNode() {
-    return m_expression;
-  }
+	@Override
+	public ASTNode getNode() {
+		return m_expression;
+	}
 
-  @Override
-  public boolean isJavaInfo(ASTNode node) {
-    return node == m_expression;
-  }
+	@Override
+	public boolean isJavaInfo(ASTNode node) {
+		return node == m_expression;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Delete
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean canDelete() {
-    return m_permissions.canDelete(m_javaInfo);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Delete
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean canDelete() {
+		return m_permissions.canDelete(m_javaInfo);
+	}
 
-  @Override
-  public void delete() throws Exception {
-    m_permissions.delete(m_javaInfo);
-  }
+	@Override
+	public void delete() throws Exception {
+		m_permissions.delete(m_javaInfo);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Permissions
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean canReorder() {
-    return m_permissions.canReorder(m_javaInfo);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Permissions
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean canReorder() {
+		return m_permissions.canReorder(m_javaInfo);
+	}
 
-  @Override
-  public boolean canReparent() {
-    return m_permissions.canReparent(m_javaInfo);
-  }
+	@Override
+	public boolean canReparent() {
+		return m_permissions.canReparent(m_javaInfo);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Adding
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String add_getSource(NodeTarget target) {
-    return m_source;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Adding
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String add_getSource(NodeTarget target) {
+		return m_source;
+	}
 
-  @Override
-  public void add_setSourceExpression(Expression expression) throws Exception {
-    m_expression = expression;
-    m_javaInfo.bindToExpression(expression);
-  }
+	@Override
+	public void add_setSourceExpression(Expression expression) throws Exception {
+		m_expression = expression;
+		m_javaInfo.bindToExpression(expression);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/SuperInvocationCreationSupport.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/SuperInvocationCreationSupport.java
index 56a75d3ca..727c204ee 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/SuperInvocationCreationSupport.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/SuperInvocationCreationSupport.java
@@ -23,69 +23,69 @@
  * @coverage core.model.creation
  */
 public final class SuperInvocationCreationSupport extends CreationSupport {
-  private final SuperMethodInvocation m_invocation;
+	private final SuperMethodInvocation m_invocation;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SuperInvocationCreationSupport(SuperMethodInvocation invocation) {
-    m_invocation = invocation;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SuperInvocationCreationSupport(SuperMethodInvocation invocation) {
+		m_invocation = invocation;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    return "superInvocation: " + m_invocation;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		return "superInvocation: " + m_invocation;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public ASTNode getNode() {
-    return m_invocation;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public ASTNode getNode() {
+		return m_invocation;
+	}
 
-  @Override
-  public boolean isJavaInfo(ASTNode node) {
-    return node == m_invocation;
-  }
+	@Override
+	public boolean isJavaInfo(ASTNode node) {
+		return node == m_invocation;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Validation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean canReorder() {
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Validation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean canReorder() {
+		return true;
+	}
 
-  @Override
-  public boolean canReparent() {
-    return true;
-  }
+	@Override
+	public boolean canReparent() {
+		return true;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Delete
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean canDelete() {
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Delete
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean canDelete() {
+		return true;
+	}
 
-  @Override
-  public void delete() throws Exception {
-    JavaInfoUtils.deleteJavaInfo(m_javaInfo, true);
-  }
+	@Override
+	public void delete() throws Exception {
+		JavaInfoUtils.deleteJavaInfo(m_javaInfo, true);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/ThisCreationSupport.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/ThisCreationSupport.java
index 8ffbda4e3..94ddcccde 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/ThisCreationSupport.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/ThisCreationSupport.java
@@ -102,786 +102,786 @@
  * @coverage core.model.creation
  */
 public final class ThisCreationSupport extends CreationSupport {
-  private final MethodDeclaration m_constructor;
-  private SuperConstructorInvocation m_invocation;
-  private ConstructorDescription m_description;
-  private CreationSupportUtils m_utils;
-  private EditorState m_editorState;
-  private boolean m_interceptOnlyDuringExecution;
-  private Predicate<Method> m_methodInterceptorPredicate = Predicates.alwaysTrue();
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ThisCreationSupport(MethodDeclaration constructor) {
-    m_constructor = constructor;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    return "this: " + getComponentClass().getName();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void setJavaInfo(JavaInfo javaInfo) throws Exception {
-    super.setJavaInfo(javaInfo);
-    m_editorState = JavaInfoUtils.getState(javaInfo);
-    m_interceptOnlyDuringExecution =
-        JavaInfoUtils.hasTrueParameter(javaInfo, "interceptOnlyDuringExecution");
-    m_methodInterceptorPredicate = createInterceptionPredicate_excludeByPackage(m_javaInfo);
-    prepareSuperConstructorInvocation(javaInfo);
-    // attempt to expose children after executing each Statement
-    m_javaInfo.addBroadcastListener(new EvaluationEventListener() {
-      @Override
-      public void evaluateAfter(EvaluationContext context, ASTNode node) throws Exception {
-        if (shouldTryToExposeChildren(node)) {
-          // create new exposed children
-          duringParsing_createExposedChildren();
-          // set object again, to get objects of exposed children (problem during refresh)
-          m_javaInfo.setObject(m_javaInfo.getObject());
-        }
-      }
-
-      private boolean shouldTryToExposeChildren(ASTNode node) {
-        if (node instanceof ExpressionStatement) {
-          Expression expression = ((ExpressionStatement) node).getExpression();
-          return expression instanceof SuperMethodInvocation;
-        }
-        return false;
-      }
-    });
-    // prepare Utils
-    m_utils = new CreationSupportUtils(m_javaInfo);
-  }
-
-  /**
-   * Tries to find {@link SuperConstructorInvocation} and prepare {@link #m_invocation}, etc.
-   */
-  private void prepareSuperConstructorInvocation(JavaInfo javaInfo) {
-    if (javaInfo.getDescription().getComponentClass().isInterface()) {
-      return;
-    }
-    // check constructor body
-    m_invocation = findSuperConstructorInvocation(m_constructor);
-    if (m_invocation != null) {
-      IMethodBinding constructorBinding = AstNodeUtils.getSuperBinding(m_invocation);
-      m_description = m_javaInfo.getDescription().getConstructor(constructorBinding);
-      ComponentDescriptionHelper.ensureInitialized(
-          m_javaInfo.getEditor().getJavaProject(),
-          m_description);
-    }
-  }
-
-  private SuperConstructorInvocation findSuperConstructorInvocation(MethodDeclaration constructor) {
-    List<Statement> statements = DomGenerics.statements(constructor);
-    if (statements.isEmpty()) {
-      return null;
-    }
-    Statement statement = statements.get(0);
-    if (statement instanceof ConstructorInvocation) {
-      ConstructorInvocation invocation = (ConstructorInvocation) statement;
-      constructor = AstNodeUtils.getConstructor(invocation);
-      Assert.isNotNull(constructor, "Can not find constructor declaration for %s", invocation);
-      return findSuperConstructorInvocation(constructor);
-    } else if (statement instanceof SuperConstructorInvocation) {
-      return (SuperConstructorInvocation) statement;
-    }
-    return null;
-  }
-
-  @Override
-  public boolean isJavaInfo(ASTNode node) {
-    return node == null || node instanceof ThisExpression || node == m_constructor;
-  }
-
-  @Override
-  public ASTNode getNode() {
-    return m_constructor;
-  }
-
-  @Override
-  public boolean canBeEvaluated() {
-    return false;
-  }
-
-  /**
-   * @return the {@link MethodDeclaration} of constructor that bounds to this
-   *         {@link ThisCreationSupport}.
-   */
-  public MethodDeclaration getConstructor() {
-    return m_constructor;
-  }
-
-  /**
-   * @return the used {@link SuperConstructorInvocation}, may be <code>null</code>.
-   */
-  public SuperConstructorInvocation getInvocation() {
-    return m_invocation;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Creation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * This key is used to remember {@link JavaInfo} created for {@link SingleVariableDeclaration}.
-   */
-  private static final String KEY_PARAMETER_BASED_COMPONENT = "KEY_PARAMETER_BASED_COMPONENT";
-  /**
-   * <p>
-   * This field is used to create an enhanced instance of the component class. The
-   * thread-local datatype is used to support concurrent construction of such
-   * instances where each instance uses its own visitor.
-   * </p>
-   * <p>
-   * The field is set before and cleared after the instance has been created.
-   * </p>
-   * <p>
-   * The field has to be static in order to be accessible by
-   * {@link StubMethodInterceptor}.
-   * </p>
-   */
-  private static final ThreadLocal<MethodInterceptor> PROXY_INTERCEPTOR = new ThreadLocal<>();
-  /**
-   * <p>
-   * This field is used to create an enhanced class for a given component class.
-   * Given the expensive overhead that comes with the classloader, each class
-   * should only be created once and then reused as much as possible.
-   * </p>
-   * <p>
-   * The primary difference between two enhanced objects (of the same type) is the
-   * {@link ExecutionFlowFrameVisitor} that is used to calculate a custom return
-   * type. This visitor is reference via a local variable, which needs to be set
-   * when an instance is created. The corresponding visitor object is stored in
-   * {@link #PROXY_INTERCEPTOR}.
-   * </p>
-   */
-  private static final TypeCache<TypeCache.SimpleKey> PROXY_CACHE = new TypeCache.WithInlineExpunction<>(
-      TypeCache.Sort.WEAK);
-
-  @Override
-  public Object create(EvaluationContext context, ExecutionFlowFrameVisitor visitor)
-      throws Exception {
-    Class<?> componentClass = getComponentClass();
-    // prepare constructor
-    String signature;
-    Constructor<?> constructor;
-    Object[] argumentValues;
-    if (m_invocation != null) {
-      IMethodBinding methodBinding = AstNodeUtils.getSuperBinding(m_invocation);
-      signature = AstNodeUtils.getMethodSignature(methodBinding);
-      constructor = AstReflectionUtils.getConstructor(componentClass, m_invocation);
-      List<Expression> arguments = DomGenerics.arguments(m_invocation);
-      argumentValues = evaluateExpressions(context, arguments);
-      argumentValues =
-          AstReflectionUtils.updateForVarArgs(
-              context.getClassLoader(),
-              methodBinding,
-              argumentValues);
-    } else {
-      signature = "<init>()";
-      constructor = ReflectionUtils.getConstructorBySignature(componentClass, "<init>()");
-      argumentValues = ArrayUtils.EMPTY_OBJECT_ARRAY;
-    }
-    if (constructor == null && !componentClass.isInterface()) {
-      throw new DesignerException(ICoreExceptionConstants.EVAL_NO_CONSTRUCTOR,
-          signature,
-          componentClass.getName());
-    }
-    // create Object
-    try {
-      Object object = create0(visitor, constructor, componentClass, argumentValues);
-      m_javaInfo.setObject(object);
-      duringParsing_createExposedChildren();
-      return object;
-    } catch (DesignerException e) {
-      throw e;
-    } catch (Throwable e) {
-      throw new DesignerException(ICoreExceptionConstants.EVAL_BYTEBUDDY,
-          e,
-          ReflectionUtils.getShortConstructorString(constructor),
-          InvocationEvaluator.getArguments_toString(argumentValues),
-          AstEvaluationEngine.getUserStackTrace(e));
-    }
-  }
-
-  private Object create0(ExecutionFlowFrameVisitor visitor,
-      Constructor<?> constructor,
-      Class<?> componentClass,
-      Object[] argumentValues) throws Exception {
-    // use Enhancer
-    if (needEnhancer() && hasEnhancer()) {
-      return create_usingEnhancer(visitor, constructor, componentClass, argumentValues);
-    }
-    // create object using Constructor
-    return constructor.newInstance(argumentValues);
-  }
-
-  private Object create_usingEnhancer(ExecutionFlowFrameVisitor visitor,
-      Constructor<?> constructor,
-      Class<?> componentClass,
-      Object[] argumentValues) {
-    createEnhancer(componentClass, visitor);
-    // set current ASTNode = body of constructor
-    ExecutionFlowDescription flowDescription;
-    {
-      flowDescription = m_editorState.getFlowDescription();
-      flowDescription.enterStatement(m_constructor.getBody());
-    }
-    // create object
-    try {
-      PROXY_INTERCEPTOR.set(new ExecutionMethodInterceptor(visitor));
-      Class<?> m_enhancer = PROXY_CACHE.find(getClassLoader(), new TypeCache.SimpleKey(componentClass));
-      Object instance;
-      if (constructor != null) {
-        Assert.isTrueException(
-            !ReflectionUtils.isPackagePrivate(constructor),
-            ICoreExceptionConstants.EVAL_NON_PUBLIC_CONSTRUCTOR,
-            constructor);
-        instance = m_enhancer.getConstructor(constructor.getParameterTypes()).newInstance(argumentValues);
-      } else {
-        instance = m_enhancer.getConstructor().newInstance();
-      }
-      ReflectionUtils.setField(instance, MethodInterceptor.FIELD_INTERCEPTOR, PROXY_INTERCEPTOR.get());
-      return instance;
-    } catch (ReflectiveOperationException e) {
-      throw new DesignerException(ICoreExceptionConstants.EVAL_BYTEBUDDY, e);
-    } finally {
-      PROXY_INTERCEPTOR.set(null);
-      flowDescription.leaveStatement(m_constructor.getBody());
-    }
-  }
-
-  /**
-   * @return <code>true</code> if we need to use {@link ByteBuddy} for this component, and
-   *         <code>false</code> if this component can be created more lightly, without ByteBuddy.
-   */
-  private boolean needEnhancer() {
-    ComponentDescription description = m_javaInfo.getDescription();
-    if (description.hasTrueParameter("binaryExecutionFlow.no")) {
-      return false;
-    }
-    Class<?> componentClass = description.getComponentClass();
-    boolean isSystemClass = componentClass.getClassLoader() == null;
-    boolean isEnhanced = ReflectionUtils.getFieldByName(componentClass, MethodInterceptor.FIELD_INTERCEPTOR) != null;
-    return !isSystemClass && !isEnhanced;
-  }
-
-  /**
-   * @return <code>true</code> if given {@link Class} can access ByteBuddy.
-   */
-  private boolean hasEnhancer() {
-    try {
-      ClassLoader classLoader = getClassLoader();
-      return classLoader != null && classLoader.loadClass("net.bytebuddy.ByteBuddy") != null;
-    } catch (ClassNotFoundException e) {
-      return false;
-    }
-  }
-
-  /**
-   * @return the {@link ClassLoader} for {@link JavaInfo} context.
-   */
-  private ClassLoader getClassLoader() {
-    return JavaInfoUtils.getClassLoader(m_javaInfo);
-  }
-
-  /**
-   * Initializes {@link #m_enhancer} field.
-   */
-  private void createEnhancer(Class<?> componentClass, final ExecutionFlowFrameVisitor visitor) {
-    final TypeCache.SimpleKey proxyKey = new TypeCache.SimpleKey(componentClass);
-
-    DynamicType.Builder<?> builder = new ByteBuddy()
-        .subclass(componentClass) //
-        .defineField(MethodInterceptor.FIELD_INTERCEPTOR, MethodInterceptor.class, Modifier.PRIVATE)
-        .method(ElementMatchers.noneOf(getIgnoredMethods(componentClass))) //
-        .intercept(MethodDelegation.to(new StubMethodInterceptor(), MethodInterceptor.class));
-
-    PROXY_CACHE.findOrInsert(getClassLoader(), proxyKey, () -> builder.make().load(getClassLoader(), ClassLoadingStrategy.Default.INJECTION).getLoaded());
-  }
-
-  /**
-   * Filter for intercepting {@link Method}'s.
-   */
-  private static Method[] getIgnoredMethods(Class<?> clazz) {
-    List<Method> ignored = new ArrayList<>();
-
-    // Iterate over all public methods, including inherited
-    for (Method method : clazz.getMethods()) {
-      // ignore standard Swing methods
-      if (method.getDeclaringClass().getClassLoader() == null) {
-        ignored.add(method);
-      }
-    }
-
-    // Iterate over all methods, excluding inherited
-    for (Method method : clazz.getDeclaredMethods()) {
-      // ignore inaccessible methods
-      if (ReflectionUtils.isPrivate(method) || ReflectionUtils.isPackagePrivate(method)) {
-        ignored.add(method);
-      }
-    }
-
-    return ignored.toArray(Method[]::new);
-  }
-
-  /**
-   * Allows disable interception of all methods in some package (for example all standard methods of
-   * toolkit), but still allow interception of some specific methods.
-   */
-  private static Predicate<Method> createInterceptionPredicate_excludeByPackage(JavaInfo javaInfo) {
-    class ExcludedPackage {
-      Set<String> exceptions = Sets.newHashSet();
-    }
-    final Map<String, ExcludedPackage> excludedPackages = Maps.newHashMap();
-    // prepare excluded packages
-    String parameterNamePrefix = "binaryExecutionFlow.dontVisit.package ";
-    for (Map.Entry<String, String> entry : JavaInfoUtils.getParameters(javaInfo).entrySet()) {
-      String parameterName = entry.getKey();
-      if (parameterName.startsWith(parameterNamePrefix)) {
-        String packageName = parameterName.substring(parameterNamePrefix.length()).trim();
-        ExcludedPackage excludedPackage = new ExcludedPackage();
-        String exceptionMethodsString = entry.getValue();
-        String[] exceptionMethodsSignatures = StringUtils.split(exceptionMethodsString);
-        excludedPackage.exceptions = ImmutableSet.copyOf(exceptionMethodsSignatures);
-        excludedPackages.put(packageName, excludedPackage);
-      }
-    }
-    // use as Predicate
-    return new Predicate<Method>() {
-      @Override
-      public boolean apply(Method method) {
-        String declaringClassName = method.getDeclaringClass().getName();
-        String declaringPackage = CodeUtils.getPackage(declaringClassName);
-        ExcludedPackage excludedPackage = excludedPackages.get(declaringPackage);
-        if (excludedPackage != null) {
-          String signature = ReflectionUtils.getMethodSignature(method);
-          return excludedPackage.exceptions.contains(signature);
-        }
-        return true;
-      }
-    };
-  }
-
-  /**
-   * @return <code>true</code> if currently invoked {@link Method} was from
-   *         {@link SuperMethodInvocation}. Removes this flag.
-   */
-  private boolean isSuperMethodInvocation() {
-    ASTNode root = m_constructor.getRoot();
-    try {
-      return root.getProperty(InvocationEvaluator.SUPER_MI_KEY) == Boolean.TRUE;
-    } finally {
-      root.setProperty(InvocationEvaluator.SUPER_MI_KEY, null);
-    }
-  }
-
-  private Object tryModelMethodInterceptor(Method method, String signature, Object[] args)
-      throws Exception {
-    // try interceptor in description
-    {
-      String interceptorName = "this.interceptMethod: " + signature;
-      String script = JavaInfoUtils.getParameter(m_javaInfo, interceptorName);
-      if (script != null) {
-        return ScriptUtils.evaluate(getClassLoader(), script, "model", m_javaInfo);
-      }
-    }
-    // try interceptor in model
-    {
-      String interceptorName = method.getName() + "_interceptor";
-      Method interceptor =
-          ReflectionUtils.getMethod(
-              m_javaInfo.getClass(),
-              interceptorName,
-              method.getParameterTypes());
-      if (interceptor != null) {
-        return interceptor.invoke(m_javaInfo, args);
-      }
-    }
-    // no interceptor
-    return AstEvaluationEngine.UNKNOWN;
-  }
-
-  private boolean canInterceptMethod(Method method, String signature) throws Exception {
-    // method specific flag
-    {
-      MethodDescription methodDescription = m_javaInfo.getDescription().getMethod(signature);
-      if (methodDescription != null
-          && methodDescription.hasTrueTag("binaryExecutionFlow.dontVisit")) {
-        return false;
-      }
-    }
-    // class level predicate
-    return m_methodInterceptorPredicate.apply(method);
-  }
-
-  /**
-   * Visits {@link MethodDeclaration} that corresponds to the intercepted {@link Method}.
-   */
-  private Object visitMethod(Object obj,
-      java.lang.reflect.Method method,
-      Object[] args,
-      MethodDeclaration methodDeclaration,
-      ExecutionFlowFrameVisitor visitor) throws Exception {
-    Object result = visitMethod0(obj, method, args, methodDeclaration, visitor);
-    result = visitMethod_validator(method, args, result);
-    return result;
-  }
-
-  /**
-   * Try to apply validator from {@link JavaInfo}.
-   */
-  private Object visitMethod_validator(java.lang.reflect.Method method, Object[] args, Object result)
-      throws Exception {
-    Class<?>[] validatorParameterTypes =
-        (Class<?>[]) ArrayUtils.add(method.getParameterTypes(), Object.class);
-    String validatorName = method.getName() + "_validator";
-    Method validator =
-        ReflectionUtils.getMethod(m_javaInfo.getClass(), validatorName, validatorParameterTypes);
-    if (validator != null) {
-      Object[] validatorArgs = ArrayUtils.add(args, result);
-      result = validator.invoke(m_javaInfo, validatorArgs);
-    }
-    return result;
-  }
-
-  /**
-   * Visits {@link MethodDeclaration} that corresponds to the intercepted {@link Method}.
-   */
-  private Object visitMethod0(Object obj,
-      java.lang.reflect.Method method,
-      Object[] args,
-      MethodDeclaration methodDeclaration,
-      ExecutionFlowFrameVisitor visitor) throws Exception {
-    m_javaInfo.setObject(obj);
-    duringParsing_createExposedChildren();
-    // prepare context
-    AstEditor editor = m_javaInfo.getEditor();
-    ExecutionFlowDescription flowDescription = m_editorState.getFlowDescription();
-    // check if already visited
-    {
-      boolean simpleReturnMethod = isSimpleReturnMethod(methodDeclaration);
-      boolean lazyMethod = LazyVariableSupportUtils.getInformation(methodDeclaration) != null;
-      if (!simpleReturnMethod && !lazyMethod) {
-        Set<MethodDeclaration> interceptedMethods = m_editorState.getTmp_InterceptedMethods();
-        if (interceptedMethods.contains(methodDeclaration)) {
-          return ReflectionUtils.getDefaultValue(method.getReturnType());
-        }
-        interceptedMethods.add(methodDeclaration);
-      }
-    }
-    // create/update parameter based components
-    processMethodParameterComponents(editor, flowDescription, method, args, methodDeclaration);
-    // include method into execution flow
-    if (!flowDescription.isBinaryFlowLocked()) {
-      flowDescription.addBinaryFlowMethodAfter(methodDeclaration);
-    }
-    // visit method
-    ExecutionFlowUtils.visit(
-        m_editorState.getTmp_visitingContext(),
-        flowDescription,
-        visitor,
-        ImmutableList.of(methodDeclaration));
-    // during execution we remember "return value", so return it here to binary
-    return JavaInfoEvaluationHelper.getReturnValue(methodDeclaration);
-  }
-
-  /**
-   * @return <code>true</code> if given {@link ASTNode} (initially some {@link MethodDeclaration})
-   *         is simple {@link ReturnStatement} and can be evaluated more than one time, so it is
-   *         safe to visit this {@link MethodDeclaration} several times.
-   */
-  private static boolean isSimpleReturnMethod(ASTNode node) {
-    if (node instanceof MethodDeclaration) {
-      MethodDeclaration methodDeclaration = (MethodDeclaration) node;
-      List<Statement> statements = DomGenerics.statements(methodDeclaration);
-      return methodDeclaration.parameters().isEmpty()
-          && statements.size() == 1
-          && isSimpleReturnMethod(statements.get(0));
-    }
-    if (node instanceof ReturnStatement) {
-      ReturnStatement returnStatement = (ReturnStatement) node;
-      return isSimpleReturnMethod(returnStatement.getExpression());
-    }
-    if (node instanceof ParenthesizedExpression) {
-      ParenthesizedExpression parenthesizedExpression = (ParenthesizedExpression) node;
-      return isSimpleReturnMethod(parenthesizedExpression.getExpression());
-    }
-    if (node instanceof SimpleName) {
-      return true;
-    }
-    return false;
-  }
-
-  /**
-   * Creates or sets {@link Object} for components based on parameters of given
-   * {@link MethodDeclaration}.
-   */
-  private void processMethodParameterComponents(AstEditor editor,
-      ExecutionFlowDescription flowDescription,
-      java.lang.reflect.Method method,
-      Object[] args,
-      MethodDeclaration methodDeclaration) throws Exception {
-    Class<?>[] parameterTypes = method.getParameterTypes();
-    List<SingleVariableDeclaration> parameters = DomGenerics.parameters(methodDeclaration);
-    // remember values into parameters
-    for (int i = 0; i < args.length; i++) {
-      SingleVariableDeclaration parameter = parameters.get(i);
-      parameter.setProperty(JavaInfoEvaluationHelper.KEY_PARAMETER_HAS_VALUE, Boolean.TRUE);
-      parameter.setProperty(JavaInfoEvaluationHelper.KEY_PARAMETER_VALUE, args[i]);
-    }
-    // create/update JavaInfo
-    if (!flowDescription.isBinaryFlowLocked()) {
-      for (int i = 0; i < args.length; i++) {
-        if (!parameterTypes[i].isPrimitive() && args[i] != null) {
-          SingleVariableDeclaration parameter = parameters.get(i);
-          // prepare ComponentDescription, note that it may fail
-          ComponentDescription componentDescription;
-          try {
-            componentDescription =
-                ComponentDescriptionHelper.getDescription(
-                    editor,
-                    m_javaInfo.getDescription(),
-                    parameter);
-            // check if we can create JavaInfo
-            if ("true".equals(componentDescription.getParameter("thisCreation.ignoreBind"))) {
-              continue;
-            }
-          } catch (Throwable e) {
-            continue;
-          }
-          // create JavaInfo for parameter
-          JavaInfo javaInfo;
-          {
-            javaInfo =
-                JavaInfoUtils.createJavaInfo(
-                    editor,
-                    componentDescription,
-                    new MethodParameterCreationSupport(parameter));
-            javaInfo.setVariableSupport(new MethodParameterVariableSupport(javaInfo, parameter));
-            javaInfo.setObject(args[i]);
-          }
-          // append JavaInfo into parser components, to bind later
-          parameter.setProperty(KEY_PARAMETER_BASED_COMPONENT, javaInfo);
-          m_editorState.getTmp_Components().add(javaInfo);
-          ExecutionFlowUtils2.ensurePermanentValue(parameter.getName()).setModel(javaInfo);
-        }
-      }
-    } else {
-      for (int i = 0; i < parameters.size(); i++) {
-        SingleVariableDeclaration parameter = parameters.get(i);
-        JavaInfo javaInfo = (JavaInfo) parameter.getProperty(KEY_PARAMETER_BASED_COMPONENT);
-        if (javaInfo != null) {
-          javaInfo.setObject(args[i]);
-        }
-      }
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void duringParsing_createExposedChildren() throws Exception {
-    if (GlobalState.isParsing()) {
-      m_javaInfo.createExposedChildren();
-    }
-  }
-
-  private static Object[] evaluateExpressions(EvaluationContext context,
-      List<Expression> expressions) throws Exception {
-    Object[] values = new Object[expressions.size()];
-    for (int i = 0; i < values.length; i++) {
-      Expression expression = expressions.get(i);
-      values[i] = AstEvaluationEngine.evaluate(context, expression);
-    }
-    return values;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Delete
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean canDelete() {
-    return true;
-  }
-
-  @Override
-  public void delete() throws Exception {
-    JavaInfoUtils.deleteJavaInfo(m_javaInfo, false);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Properties
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private ComplexProperty m_complexProperty;
-
-  @Override
-  public void addProperties(List<Property> properties) throws Exception {
-    if (m_complexProperty == null) {
-      m_complexProperty = new ComplexProperty("Constructor", "(Constructor properties)");
-      m_complexProperty.setCategory(PropertyCategory.system(3));
-      m_complexProperty.setModified(true);
-      //
-      List<Property> subPropertiesList = Lists.newArrayList();
-      if (m_invocation != null) {
-        // add accessors for parameters bound to given property
-        for (ParameterDescription parameter : m_description.getParameters()) {
-          Property property = m_utils.createProperty(parameter);
-          if (property != null) {
-            subPropertiesList.add(property);
-          }
-        }
-        // set sub-properties
-        if (!subPropertiesList.isEmpty()) {
-          m_complexProperty.setProperties(subPropertiesList);
-        }
-      }
-    }
-    // add complex property if there are sub-properties
-    if (m_complexProperty.getProperties().length != 0) {
-      properties.add(m_complexProperty);
-    }
-  }
-
-  @Override
-  public void addAccessors(GenericPropertyDescription propertyDescription,
-      List<ExpressionAccessor> accessors) throws Exception {
-    // add accessors for parameters bound to given property
-    if (m_invocation != null) {
-      for (ParameterDescription parameter : m_description.getParameters()) {
-        if (propertyDescription.getId().equals(parameter.getProperty())) {
-          accessors.add(new SuperConstructorAccessor(m_invocation,
-              parameter.getIndex(),
-              parameter.getDefaultSource()));
-        }
-      }
-    }
-  }
-
-  /**
-   * The base interface to which all method invocations are delegated to. In case
-   * the intercepted method is abstract, a dummy value should be returned. In case
-   * no custom behavior is specified, its super method should be invoked.
-   */
-  public static interface MethodInterceptor {
-    String FIELD_INTERCEPTOR = "WINDOWBUILDER$INTERCEPTOR";
-
-    @RuntimeType
-    Object intercept(@This Object obj, @Origin Method method, @AllArguments Object[] args,
-        @SuperCall(nullIfImpossible = true) Callable<?> superCall) throws Throwable;
-
-    default Object returnDefaultValue(Method method) {
-      Class<?> returnType = method.getReturnType();
-      return ReflectionUtils.getDefaultValue(returnType);
-    }
-  }
-
-  /**
-   * This class contains the primary interceptor logic. For each instance of an
-   * enhanced class, we attempt to calculate a custom return type using the given
-   * {@link ExecutionFlowFrameVisitor} instance. This interceptor is stored as a
-   * local variable in the enhanced object.
-   */
-  private class ExecutionMethodInterceptor implements MethodInterceptor {
-    private final ExecutionFlowFrameVisitor visitor;
-
-    public ExecutionMethodInterceptor(ExecutionFlowFrameVisitor visitor) {
-      this.visitor = visitor;
-    }
-
-    @Override
-    public Object intercept(Object obj, Method method, Object[] args, Callable<?> superCall) throws Throwable {
-      // if not in AST execution, then ignore
-      if (m_interceptOnlyDuringExecution && !m_editorState.isExecuting()) {
-        if (ReflectionUtils.isAbstract(method)) {
-          return returnDefaultValue(method);
-        }
-        return superCall.call();
-      }
-      // try to find implementation of this method in AST
-      if (!method.isBridge() && !isSuperMethodInvocation()) {
-        String methodSignature = ReflectionUtils.getMethodSignature(method);
-        // handle special SWT methods
-        if (methodSignature.equals("isValidSubclass()")) {
-          return Boolean.TRUE;
-        }
-        if (methodSignature.equals("checkSubclass()")) {
-          return null;
-        }
-        // may be model wants to handle method and provide result
-        {
-          Object result = tryModelMethodInterceptor(method, methodSignature, args);
-          if (result != AstEvaluationEngine.UNKNOWN) {
-            return result;
-          }
-        }
-        // check if we are allowed to intercept method
-        if (!canInterceptMethod(method, methodSignature)) {
-          return superCall.call();
-        }
-        // try to find MethodDeclaration
-        MethodDeclaration methodDeclaration;
-        {
-          TypeDeclaration typeDeclaration = (TypeDeclaration) m_constructor.getParent();
-          methodDeclaration = AstNodeUtils.getMethodBySignature(typeDeclaration, methodSignature);
-        }
-        // OK, we have MethodDeclaration, redirect to it
-        if (methodDeclaration != null && !AstNodeUtils.isAbstract(methodDeclaration)) {
-          JavaInfoEvaluationHelper.shouldEvaluateReturnValue(methodDeclaration, true);
-          return visitMethod(obj, method, args, methodDeclaration, visitor);
-        }
-      }
-      // handle abstract
-      if (ReflectionUtils.isAbstract(method)) {
-        return returnDefaultValue(method);
-      }
-      // invoke super
-      return superCall.call();
-    }
-  }
-
-  /**
-   * This class is used as a default interceptor inside the enhanced class, shared
-   * between all instances. The method invocation is delegated to the
-   * instance-scoped interceptor, which is stored as a local variable. In case
-   * this field hasn't been initialized yet (meaning we're calling an enhanced
-   * method from within the constructor), the referee is fetched from the
-   * thread-local store. This store is set before, and cleared after an object is
-   * constructed, so its value is the same as the one, the field is going to be
-   * initialized with.
-   */
-  private static class StubMethodInterceptor implements MethodInterceptor {
-    @Override
-    public Object intercept(Object obj, Method method, Object[] args, Callable<?> superCall) throws Throwable {
-      MethodInterceptor referee = (MethodInterceptor) ReflectionUtils.getFieldObject(obj, FIELD_INTERCEPTOR);
-
-      // We may call non-private methods inside the constructor. The field hasn't been
-      // initialized at that point in time...
-      if (referee == null) {
-        referee = PROXY_INTERCEPTOR.get();
-      }
-
-      return referee.intercept(obj, method, args, superCall);
-    }
-  }
+	private final MethodDeclaration m_constructor;
+	private SuperConstructorInvocation m_invocation;
+	private ConstructorDescription m_description;
+	private CreationSupportUtils m_utils;
+	private EditorState m_editorState;
+	private boolean m_interceptOnlyDuringExecution;
+	private Predicate<Method> m_methodInterceptorPredicate = Predicates.alwaysTrue();
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ThisCreationSupport(MethodDeclaration constructor) {
+		m_constructor = constructor;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		return "this: " + getComponentClass().getName();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void setJavaInfo(JavaInfo javaInfo) throws Exception {
+		super.setJavaInfo(javaInfo);
+		m_editorState = JavaInfoUtils.getState(javaInfo);
+		m_interceptOnlyDuringExecution =
+				JavaInfoUtils.hasTrueParameter(javaInfo, "interceptOnlyDuringExecution");
+		m_methodInterceptorPredicate = createInterceptionPredicate_excludeByPackage(m_javaInfo);
+		prepareSuperConstructorInvocation(javaInfo);
+		// attempt to expose children after executing each Statement
+		m_javaInfo.addBroadcastListener(new EvaluationEventListener() {
+			@Override
+			public void evaluateAfter(EvaluationContext context, ASTNode node) throws Exception {
+				if (shouldTryToExposeChildren(node)) {
+					// create new exposed children
+					duringParsing_createExposedChildren();
+					// set object again, to get objects of exposed children (problem during refresh)
+					m_javaInfo.setObject(m_javaInfo.getObject());
+				}
+			}
+
+			private boolean shouldTryToExposeChildren(ASTNode node) {
+				if (node instanceof ExpressionStatement) {
+					Expression expression = ((ExpressionStatement) node).getExpression();
+					return expression instanceof SuperMethodInvocation;
+				}
+				return false;
+			}
+		});
+		// prepare Utils
+		m_utils = new CreationSupportUtils(m_javaInfo);
+	}
+
+	/**
+	 * Tries to find {@link SuperConstructorInvocation} and prepare {@link #m_invocation}, etc.
+	 */
+	private void prepareSuperConstructorInvocation(JavaInfo javaInfo) {
+		if (javaInfo.getDescription().getComponentClass().isInterface()) {
+			return;
+		}
+		// check constructor body
+		m_invocation = findSuperConstructorInvocation(m_constructor);
+		if (m_invocation != null) {
+			IMethodBinding constructorBinding = AstNodeUtils.getSuperBinding(m_invocation);
+			m_description = m_javaInfo.getDescription().getConstructor(constructorBinding);
+			ComponentDescriptionHelper.ensureInitialized(
+					m_javaInfo.getEditor().getJavaProject(),
+					m_description);
+		}
+	}
+
+	private SuperConstructorInvocation findSuperConstructorInvocation(MethodDeclaration constructor) {
+		List<Statement> statements = DomGenerics.statements(constructor);
+		if (statements.isEmpty()) {
+			return null;
+		}
+		Statement statement = statements.get(0);
+		if (statement instanceof ConstructorInvocation) {
+			ConstructorInvocation invocation = (ConstructorInvocation) statement;
+			constructor = AstNodeUtils.getConstructor(invocation);
+			Assert.isNotNull(constructor, "Can not find constructor declaration for %s", invocation);
+			return findSuperConstructorInvocation(constructor);
+		} else if (statement instanceof SuperConstructorInvocation) {
+			return (SuperConstructorInvocation) statement;
+		}
+		return null;
+	}
+
+	@Override
+	public boolean isJavaInfo(ASTNode node) {
+		return node == null || node instanceof ThisExpression || node == m_constructor;
+	}
+
+	@Override
+	public ASTNode getNode() {
+		return m_constructor;
+	}
+
+	@Override
+	public boolean canBeEvaluated() {
+		return false;
+	}
+
+	/**
+	 * @return the {@link MethodDeclaration} of constructor that bounds to this
+	 *         {@link ThisCreationSupport}.
+	 */
+	public MethodDeclaration getConstructor() {
+		return m_constructor;
+	}
+
+	/**
+	 * @return the used {@link SuperConstructorInvocation}, may be <code>null</code>.
+	 */
+	public SuperConstructorInvocation getInvocation() {
+		return m_invocation;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Creation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * This key is used to remember {@link JavaInfo} created for {@link SingleVariableDeclaration}.
+	 */
+	private static final String KEY_PARAMETER_BASED_COMPONENT = "KEY_PARAMETER_BASED_COMPONENT";
+	/**
+	 * <p>
+	 * This field is used to create an enhanced instance of the component class. The
+	 * thread-local datatype is used to support concurrent construction of such
+	 * instances where each instance uses its own visitor.
+	 * </p>
+	 * <p>
+	 * The field is set before and cleared after the instance has been created.
+	 * </p>
+	 * <p>
+	 * The field has to be static in order to be accessible by
+	 * {@link StubMethodInterceptor}.
+	 * </p>
+	 */
+	private static final ThreadLocal<MethodInterceptor> PROXY_INTERCEPTOR = new ThreadLocal<>();
+	/**
+	 * <p>
+	 * This field is used to create an enhanced class for a given component class.
+	 * Given the expensive overhead that comes with the classloader, each class
+	 * should only be created once and then reused as much as possible.
+	 * </p>
+	 * <p>
+	 * The primary difference between two enhanced objects (of the same type) is the
+	 * {@link ExecutionFlowFrameVisitor} that is used to calculate a custom return
+	 * type. This visitor is reference via a local variable, which needs to be set
+	 * when an instance is created. The corresponding visitor object is stored in
+	 * {@link #PROXY_INTERCEPTOR}.
+	 * </p>
+	 */
+	private static final TypeCache<TypeCache.SimpleKey> PROXY_CACHE = new TypeCache.WithInlineExpunction<>(
+			TypeCache.Sort.WEAK);
+
+	@Override
+	public Object create(EvaluationContext context, ExecutionFlowFrameVisitor visitor)
+			throws Exception {
+		Class<?> componentClass = getComponentClass();
+		// prepare constructor
+		String signature;
+		Constructor<?> constructor;
+		Object[] argumentValues;
+		if (m_invocation != null) {
+			IMethodBinding methodBinding = AstNodeUtils.getSuperBinding(m_invocation);
+			signature = AstNodeUtils.getMethodSignature(methodBinding);
+			constructor = AstReflectionUtils.getConstructor(componentClass, m_invocation);
+			List<Expression> arguments = DomGenerics.arguments(m_invocation);
+			argumentValues = evaluateExpressions(context, arguments);
+			argumentValues =
+					AstReflectionUtils.updateForVarArgs(
+							context.getClassLoader(),
+							methodBinding,
+							argumentValues);
+		} else {
+			signature = "<init>()";
+			constructor = ReflectionUtils.getConstructorBySignature(componentClass, "<init>()");
+			argumentValues = ArrayUtils.EMPTY_OBJECT_ARRAY;
+		}
+		if (constructor == null && !componentClass.isInterface()) {
+			throw new DesignerException(ICoreExceptionConstants.EVAL_NO_CONSTRUCTOR,
+					signature,
+					componentClass.getName());
+		}
+		// create Object
+		try {
+			Object object = create0(visitor, constructor, componentClass, argumentValues);
+			m_javaInfo.setObject(object);
+			duringParsing_createExposedChildren();
+			return object;
+		} catch (DesignerException e) {
+			throw e;
+		} catch (Throwable e) {
+			throw new DesignerException(ICoreExceptionConstants.EVAL_BYTEBUDDY,
+					e,
+					ReflectionUtils.getShortConstructorString(constructor),
+					InvocationEvaluator.getArguments_toString(argumentValues),
+					AstEvaluationEngine.getUserStackTrace(e));
+		}
+	}
+
+	private Object create0(ExecutionFlowFrameVisitor visitor,
+			Constructor<?> constructor,
+			Class<?> componentClass,
+			Object[] argumentValues) throws Exception {
+		// use Enhancer
+		if (needEnhancer() && hasEnhancer()) {
+			return create_usingEnhancer(visitor, constructor, componentClass, argumentValues);
+		}
+		// create object using Constructor
+		return constructor.newInstance(argumentValues);
+	}
+
+	private Object create_usingEnhancer(ExecutionFlowFrameVisitor visitor,
+			Constructor<?> constructor,
+			Class<?> componentClass,
+			Object[] argumentValues) {
+		createEnhancer(componentClass, visitor);
+		// set current ASTNode = body of constructor
+		ExecutionFlowDescription flowDescription;
+		{
+			flowDescription = m_editorState.getFlowDescription();
+			flowDescription.enterStatement(m_constructor.getBody());
+		}
+		// create object
+		try {
+			PROXY_INTERCEPTOR.set(new ExecutionMethodInterceptor(visitor));
+			Class<?> m_enhancer = PROXY_CACHE.find(getClassLoader(), new TypeCache.SimpleKey(componentClass));
+			Object instance;
+			if (constructor != null) {
+				Assert.isTrueException(
+						!ReflectionUtils.isPackagePrivate(constructor),
+						ICoreExceptionConstants.EVAL_NON_PUBLIC_CONSTRUCTOR,
+						constructor);
+				instance = m_enhancer.getConstructor(constructor.getParameterTypes()).newInstance(argumentValues);
+			} else {
+				instance = m_enhancer.getConstructor().newInstance();
+			}
+			ReflectionUtils.setField(instance, MethodInterceptor.FIELD_INTERCEPTOR, PROXY_INTERCEPTOR.get());
+			return instance;
+		} catch (ReflectiveOperationException e) {
+			throw new DesignerException(ICoreExceptionConstants.EVAL_BYTEBUDDY, e);
+		} finally {
+			PROXY_INTERCEPTOR.set(null);
+			flowDescription.leaveStatement(m_constructor.getBody());
+		}
+	}
+
+	/**
+	 * @return <code>true</code> if we need to use {@link ByteBuddy} for this component, and
+	 *         <code>false</code> if this component can be created more lightly, without ByteBuddy.
+	 */
+	private boolean needEnhancer() {
+		ComponentDescription description = m_javaInfo.getDescription();
+		if (description.hasTrueParameter("binaryExecutionFlow.no")) {
+			return false;
+		}
+		Class<?> componentClass = description.getComponentClass();
+		boolean isSystemClass = componentClass.getClassLoader() == null;
+		boolean isEnhanced = ReflectionUtils.getFieldByName(componentClass, MethodInterceptor.FIELD_INTERCEPTOR) != null;
+		return !isSystemClass && !isEnhanced;
+	}
+
+	/**
+	 * @return <code>true</code> if given {@link Class} can access ByteBuddy.
+	 */
+	private boolean hasEnhancer() {
+		try {
+			ClassLoader classLoader = getClassLoader();
+			return classLoader != null && classLoader.loadClass("net.bytebuddy.ByteBuddy") != null;
+		} catch (ClassNotFoundException e) {
+			return false;
+		}
+	}
+
+	/**
+	 * @return the {@link ClassLoader} for {@link JavaInfo} context.
+	 */
+	private ClassLoader getClassLoader() {
+		return JavaInfoUtils.getClassLoader(m_javaInfo);
+	}
+
+	/**
+	 * Initializes {@link #m_enhancer} field.
+	 */
+	private void createEnhancer(Class<?> componentClass, final ExecutionFlowFrameVisitor visitor) {
+		final TypeCache.SimpleKey proxyKey = new TypeCache.SimpleKey(componentClass);
+
+		DynamicType.Builder<?> builder = new ByteBuddy()
+				.subclass(componentClass) //
+				.defineField(MethodInterceptor.FIELD_INTERCEPTOR, MethodInterceptor.class, Modifier.PRIVATE)
+				.method(ElementMatchers.noneOf(getIgnoredMethods(componentClass))) //
+				.intercept(MethodDelegation.to(new StubMethodInterceptor(), MethodInterceptor.class));
+
+		PROXY_CACHE.findOrInsert(getClassLoader(), proxyKey, () -> builder.make().load(getClassLoader(), ClassLoadingStrategy.Default.INJECTION).getLoaded());
+	}
+
+	/**
+	 * Filter for intercepting {@link Method}'s.
+	 */
+	private static Method[] getIgnoredMethods(Class<?> clazz) {
+		List<Method> ignored = new ArrayList<>();
+
+		// Iterate over all public methods, including inherited
+		for (Method method : clazz.getMethods()) {
+			// ignore standard Swing methods
+			if (method.getDeclaringClass().getClassLoader() == null) {
+				ignored.add(method);
+			}
+		}
+
+		// Iterate over all methods, excluding inherited
+		for (Method method : clazz.getDeclaredMethods()) {
+			// ignore inaccessible methods
+			if (ReflectionUtils.isPrivate(method) || ReflectionUtils.isPackagePrivate(method)) {
+				ignored.add(method);
+			}
+		}
+
+		return ignored.toArray(Method[]::new);
+	}
+
+	/**
+	 * Allows disable interception of all methods in some package (for example all standard methods of
+	 * toolkit), but still allow interception of some specific methods.
+	 */
+	private static Predicate<Method> createInterceptionPredicate_excludeByPackage(JavaInfo javaInfo) {
+		class ExcludedPackage {
+			Set<String> exceptions = Sets.newHashSet();
+		}
+		final Map<String, ExcludedPackage> excludedPackages = Maps.newHashMap();
+		// prepare excluded packages
+		String parameterNamePrefix = "binaryExecutionFlow.dontVisit.package ";
+		for (Map.Entry<String, String> entry : JavaInfoUtils.getParameters(javaInfo).entrySet()) {
+			String parameterName = entry.getKey();
+			if (parameterName.startsWith(parameterNamePrefix)) {
+				String packageName = parameterName.substring(parameterNamePrefix.length()).trim();
+				ExcludedPackage excludedPackage = new ExcludedPackage();
+				String exceptionMethodsString = entry.getValue();
+				String[] exceptionMethodsSignatures = StringUtils.split(exceptionMethodsString);
+				excludedPackage.exceptions = ImmutableSet.copyOf(exceptionMethodsSignatures);
+				excludedPackages.put(packageName, excludedPackage);
+			}
+		}
+		// use as Predicate
+		return new Predicate<Method>() {
+			@Override
+			public boolean apply(Method method) {
+				String declaringClassName = method.getDeclaringClass().getName();
+				String declaringPackage = CodeUtils.getPackage(declaringClassName);
+				ExcludedPackage excludedPackage = excludedPackages.get(declaringPackage);
+				if (excludedPackage != null) {
+					String signature = ReflectionUtils.getMethodSignature(method);
+					return excludedPackage.exceptions.contains(signature);
+				}
+				return true;
+			}
+		};
+	}
+
+	/**
+	 * @return <code>true</code> if currently invoked {@link Method} was from
+	 *         {@link SuperMethodInvocation}. Removes this flag.
+	 */
+	private boolean isSuperMethodInvocation() {
+		ASTNode root = m_constructor.getRoot();
+		try {
+			return root.getProperty(InvocationEvaluator.SUPER_MI_KEY) == Boolean.TRUE;
+		} finally {
+			root.setProperty(InvocationEvaluator.SUPER_MI_KEY, null);
+		}
+	}
+
+	private Object tryModelMethodInterceptor(Method method, String signature, Object[] args)
+			throws Exception {
+		// try interceptor in description
+		{
+			String interceptorName = "this.interceptMethod: " + signature;
+			String script = JavaInfoUtils.getParameter(m_javaInfo, interceptorName);
+			if (script != null) {
+				return ScriptUtils.evaluate(getClassLoader(), script, "model", m_javaInfo);
+			}
+		}
+		// try interceptor in model
+		{
+			String interceptorName = method.getName() + "_interceptor";
+			Method interceptor =
+					ReflectionUtils.getMethod(
+							m_javaInfo.getClass(),
+							interceptorName,
+							method.getParameterTypes());
+			if (interceptor != null) {
+				return interceptor.invoke(m_javaInfo, args);
+			}
+		}
+		// no interceptor
+		return AstEvaluationEngine.UNKNOWN;
+	}
+
+	private boolean canInterceptMethod(Method method, String signature) throws Exception {
+		// method specific flag
+		{
+			MethodDescription methodDescription = m_javaInfo.getDescription().getMethod(signature);
+			if (methodDescription != null
+					&& methodDescription.hasTrueTag("binaryExecutionFlow.dontVisit")) {
+				return false;
+			}
+		}
+		// class level predicate
+		return m_methodInterceptorPredicate.apply(method);
+	}
+
+	/**
+	 * Visits {@link MethodDeclaration} that corresponds to the intercepted {@link Method}.
+	 */
+	private Object visitMethod(Object obj,
+			java.lang.reflect.Method method,
+			Object[] args,
+			MethodDeclaration methodDeclaration,
+			ExecutionFlowFrameVisitor visitor) throws Exception {
+		Object result = visitMethod0(obj, method, args, methodDeclaration, visitor);
+		result = visitMethod_validator(method, args, result);
+		return result;
+	}
+
+	/**
+	 * Try to apply validator from {@link JavaInfo}.
+	 */
+	private Object visitMethod_validator(java.lang.reflect.Method method, Object[] args, Object result)
+			throws Exception {
+		Class<?>[] validatorParameterTypes =
+				(Class<?>[]) ArrayUtils.add(method.getParameterTypes(), Object.class);
+		String validatorName = method.getName() + "_validator";
+		Method validator =
+				ReflectionUtils.getMethod(m_javaInfo.getClass(), validatorName, validatorParameterTypes);
+		if (validator != null) {
+			Object[] validatorArgs = ArrayUtils.add(args, result);
+			result = validator.invoke(m_javaInfo, validatorArgs);
+		}
+		return result;
+	}
+
+	/**
+	 * Visits {@link MethodDeclaration} that corresponds to the intercepted {@link Method}.
+	 */
+	private Object visitMethod0(Object obj,
+			java.lang.reflect.Method method,
+			Object[] args,
+			MethodDeclaration methodDeclaration,
+			ExecutionFlowFrameVisitor visitor) throws Exception {
+		m_javaInfo.setObject(obj);
+		duringParsing_createExposedChildren();
+		// prepare context
+		AstEditor editor = m_javaInfo.getEditor();
+		ExecutionFlowDescription flowDescription = m_editorState.getFlowDescription();
+		// check if already visited
+		{
+			boolean simpleReturnMethod = isSimpleReturnMethod(methodDeclaration);
+			boolean lazyMethod = LazyVariableSupportUtils.getInformation(methodDeclaration) != null;
+			if (!simpleReturnMethod && !lazyMethod) {
+				Set<MethodDeclaration> interceptedMethods = m_editorState.getTmp_InterceptedMethods();
+				if (interceptedMethods.contains(methodDeclaration)) {
+					return ReflectionUtils.getDefaultValue(method.getReturnType());
+				}
+				interceptedMethods.add(methodDeclaration);
+			}
+		}
+		// create/update parameter based components
+		processMethodParameterComponents(editor, flowDescription, method, args, methodDeclaration);
+		// include method into execution flow
+		if (!flowDescription.isBinaryFlowLocked()) {
+			flowDescription.addBinaryFlowMethodAfter(methodDeclaration);
+		}
+		// visit method
+		ExecutionFlowUtils.visit(
+				m_editorState.getTmp_visitingContext(),
+				flowDescription,
+				visitor,
+				ImmutableList.of(methodDeclaration));
+		// during execution we remember "return value", so return it here to binary
+		return JavaInfoEvaluationHelper.getReturnValue(methodDeclaration);
+	}
+
+	/**
+	 * @return <code>true</code> if given {@link ASTNode} (initially some {@link MethodDeclaration})
+	 *         is simple {@link ReturnStatement} and can be evaluated more than one time, so it is
+	 *         safe to visit this {@link MethodDeclaration} several times.
+	 */
+	private static boolean isSimpleReturnMethod(ASTNode node) {
+		if (node instanceof MethodDeclaration) {
+			MethodDeclaration methodDeclaration = (MethodDeclaration) node;
+			List<Statement> statements = DomGenerics.statements(methodDeclaration);
+			return methodDeclaration.parameters().isEmpty()
+					&& statements.size() == 1
+					&& isSimpleReturnMethod(statements.get(0));
+		}
+		if (node instanceof ReturnStatement) {
+			ReturnStatement returnStatement = (ReturnStatement) node;
+			return isSimpleReturnMethod(returnStatement.getExpression());
+		}
+		if (node instanceof ParenthesizedExpression) {
+			ParenthesizedExpression parenthesizedExpression = (ParenthesizedExpression) node;
+			return isSimpleReturnMethod(parenthesizedExpression.getExpression());
+		}
+		if (node instanceof SimpleName) {
+			return true;
+		}
+		return false;
+	}
+
+	/**
+	 * Creates or sets {@link Object} for components based on parameters of given
+	 * {@link MethodDeclaration}.
+	 */
+	private void processMethodParameterComponents(AstEditor editor,
+			ExecutionFlowDescription flowDescription,
+			java.lang.reflect.Method method,
+			Object[] args,
+			MethodDeclaration methodDeclaration) throws Exception {
+		Class<?>[] parameterTypes = method.getParameterTypes();
+		List<SingleVariableDeclaration> parameters = DomGenerics.parameters(methodDeclaration);
+		// remember values into parameters
+		for (int i = 0; i < args.length; i++) {
+			SingleVariableDeclaration parameter = parameters.get(i);
+			parameter.setProperty(JavaInfoEvaluationHelper.KEY_PARAMETER_HAS_VALUE, Boolean.TRUE);
+			parameter.setProperty(JavaInfoEvaluationHelper.KEY_PARAMETER_VALUE, args[i]);
+		}
+		// create/update JavaInfo
+		if (!flowDescription.isBinaryFlowLocked()) {
+			for (int i = 0; i < args.length; i++) {
+				if (!parameterTypes[i].isPrimitive() && args[i] != null) {
+					SingleVariableDeclaration parameter = parameters.get(i);
+					// prepare ComponentDescription, note that it may fail
+					ComponentDescription componentDescription;
+					try {
+						componentDescription =
+								ComponentDescriptionHelper.getDescription(
+										editor,
+										m_javaInfo.getDescription(),
+										parameter);
+						// check if we can create JavaInfo
+						if ("true".equals(componentDescription.getParameter("thisCreation.ignoreBind"))) {
+							continue;
+						}
+					} catch (Throwable e) {
+						continue;
+					}
+					// create JavaInfo for parameter
+					JavaInfo javaInfo;
+					{
+						javaInfo =
+								JavaInfoUtils.createJavaInfo(
+										editor,
+										componentDescription,
+										new MethodParameterCreationSupport(parameter));
+						javaInfo.setVariableSupport(new MethodParameterVariableSupport(javaInfo, parameter));
+						javaInfo.setObject(args[i]);
+					}
+					// append JavaInfo into parser components, to bind later
+					parameter.setProperty(KEY_PARAMETER_BASED_COMPONENT, javaInfo);
+					m_editorState.getTmp_Components().add(javaInfo);
+					ExecutionFlowUtils2.ensurePermanentValue(parameter.getName()).setModel(javaInfo);
+				}
+			}
+		} else {
+			for (int i = 0; i < parameters.size(); i++) {
+				SingleVariableDeclaration parameter = parameters.get(i);
+				JavaInfo javaInfo = (JavaInfo) parameter.getProperty(KEY_PARAMETER_BASED_COMPONENT);
+				if (javaInfo != null) {
+					javaInfo.setObject(args[i]);
+				}
+			}
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void duringParsing_createExposedChildren() throws Exception {
+		if (GlobalState.isParsing()) {
+			m_javaInfo.createExposedChildren();
+		}
+	}
+
+	private static Object[] evaluateExpressions(EvaluationContext context,
+			List<Expression> expressions) throws Exception {
+		Object[] values = new Object[expressions.size()];
+		for (int i = 0; i < values.length; i++) {
+			Expression expression = expressions.get(i);
+			values[i] = AstEvaluationEngine.evaluate(context, expression);
+		}
+		return values;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Delete
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean canDelete() {
+		return true;
+	}
+
+	@Override
+	public void delete() throws Exception {
+		JavaInfoUtils.deleteJavaInfo(m_javaInfo, false);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Properties
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private ComplexProperty m_complexProperty;
+
+	@Override
+	public void addProperties(List<Property> properties) throws Exception {
+		if (m_complexProperty == null) {
+			m_complexProperty = new ComplexProperty("Constructor", "(Constructor properties)");
+			m_complexProperty.setCategory(PropertyCategory.system(3));
+			m_complexProperty.setModified(true);
+			//
+			List<Property> subPropertiesList = Lists.newArrayList();
+			if (m_invocation != null) {
+				// add accessors for parameters bound to given property
+				for (ParameterDescription parameter : m_description.getParameters()) {
+					Property property = m_utils.createProperty(parameter);
+					if (property != null) {
+						subPropertiesList.add(property);
+					}
+				}
+				// set sub-properties
+				if (!subPropertiesList.isEmpty()) {
+					m_complexProperty.setProperties(subPropertiesList);
+				}
+			}
+		}
+		// add complex property if there are sub-properties
+		if (m_complexProperty.getProperties().length != 0) {
+			properties.add(m_complexProperty);
+		}
+	}
+
+	@Override
+	public void addAccessors(GenericPropertyDescription propertyDescription,
+			List<ExpressionAccessor> accessors) throws Exception {
+		// add accessors for parameters bound to given property
+		if (m_invocation != null) {
+			for (ParameterDescription parameter : m_description.getParameters()) {
+				if (propertyDescription.getId().equals(parameter.getProperty())) {
+					accessors.add(new SuperConstructorAccessor(m_invocation,
+							parameter.getIndex(),
+							parameter.getDefaultSource()));
+				}
+			}
+		}
+	}
+
+	/**
+	 * The base interface to which all method invocations are delegated to. In case
+	 * the intercepted method is abstract, a dummy value should be returned. In case
+	 * no custom behavior is specified, its super method should be invoked.
+	 */
+	public static interface MethodInterceptor {
+		String FIELD_INTERCEPTOR = "WINDOWBUILDER$INTERCEPTOR";
+
+		@RuntimeType
+		Object intercept(@This Object obj, @Origin Method method, @AllArguments Object[] args,
+				@SuperCall(nullIfImpossible = true) Callable<?> superCall) throws Throwable;
+
+		default Object returnDefaultValue(Method method) {
+			Class<?> returnType = method.getReturnType();
+			return ReflectionUtils.getDefaultValue(returnType);
+		}
+	}
+
+	/**
+	 * This class contains the primary interceptor logic. For each instance of an
+	 * enhanced class, we attempt to calculate a custom return type using the given
+	 * {@link ExecutionFlowFrameVisitor} instance. This interceptor is stored as a
+	 * local variable in the enhanced object.
+	 */
+	private class ExecutionMethodInterceptor implements MethodInterceptor {
+		private final ExecutionFlowFrameVisitor visitor;
+
+		public ExecutionMethodInterceptor(ExecutionFlowFrameVisitor visitor) {
+			this.visitor = visitor;
+		}
+
+		@Override
+		public Object intercept(Object obj, Method method, Object[] args, Callable<?> superCall) throws Throwable {
+			// if not in AST execution, then ignore
+			if (m_interceptOnlyDuringExecution && !m_editorState.isExecuting()) {
+				if (ReflectionUtils.isAbstract(method)) {
+					return returnDefaultValue(method);
+				}
+				return superCall.call();
+			}
+			// try to find implementation of this method in AST
+			if (!method.isBridge() && !isSuperMethodInvocation()) {
+				String methodSignature = ReflectionUtils.getMethodSignature(method);
+				// handle special SWT methods
+				if (methodSignature.equals("isValidSubclass()")) {
+					return Boolean.TRUE;
+				}
+				if (methodSignature.equals("checkSubclass()")) {
+					return null;
+				}
+				// may be model wants to handle method and provide result
+				{
+					Object result = tryModelMethodInterceptor(method, methodSignature, args);
+					if (result != AstEvaluationEngine.UNKNOWN) {
+						return result;
+					}
+				}
+				// check if we are allowed to intercept method
+				if (!canInterceptMethod(method, methodSignature)) {
+					return superCall.call();
+				}
+				// try to find MethodDeclaration
+				MethodDeclaration methodDeclaration;
+				{
+					TypeDeclaration typeDeclaration = (TypeDeclaration) m_constructor.getParent();
+					methodDeclaration = AstNodeUtils.getMethodBySignature(typeDeclaration, methodSignature);
+				}
+				// OK, we have MethodDeclaration, redirect to it
+				if (methodDeclaration != null && !AstNodeUtils.isAbstract(methodDeclaration)) {
+					JavaInfoEvaluationHelper.shouldEvaluateReturnValue(methodDeclaration, true);
+					return visitMethod(obj, method, args, methodDeclaration, visitor);
+				}
+			}
+			// handle abstract
+			if (ReflectionUtils.isAbstract(method)) {
+				return returnDefaultValue(method);
+			}
+			// invoke super
+			return superCall.call();
+		}
+	}
+
+	/**
+	 * This class is used as a default interceptor inside the enhanced class, shared
+	 * between all instances. The method invocation is delegated to the
+	 * instance-scoped interceptor, which is stored as a local variable. In case
+	 * this field hasn't been initialized yet (meaning we're calling an enhanced
+	 * method from within the constructor), the referee is fetched from the
+	 * thread-local store. This store is set before, and cleared after an object is
+	 * constructed, so its value is the same as the one, the field is going to be
+	 * initialized with.
+	 */
+	private static class StubMethodInterceptor implements MethodInterceptor {
+		@Override
+		public Object intercept(Object obj, Method method, Object[] args, Callable<?> superCall) throws Throwable {
+			MethodInterceptor referee = (MethodInterceptor) ReflectionUtils.getFieldObject(obj, FIELD_INTERCEPTOR);
+
+			// We may call non-private methods inside the constructor. The field hasn't been
+			// initialized at that point in time...
+			if (referee == null) {
+				referee = PROXY_INTERCEPTOR.get();
+			}
+
+			return referee.intercept(obj, method, args, superCall);
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/VoidInvocationCreationSupport.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/VoidInvocationCreationSupport.java
index 8fb224890..41aac2930 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/VoidInvocationCreationSupport.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/VoidInvocationCreationSupport.java
@@ -36,125 +36,125 @@
  * @coverage core.model.creation
  */
 public abstract class VoidInvocationCreationSupport extends AbstractFactoryCreationSupport {
-  private final JavaInfo m_hostJavaInfo;
+	private final JavaInfo m_hostJavaInfo;
 
-  //private MethodInvocation m_invocation;
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public VoidInvocationCreationSupport(JavaInfo hostJavaInfo,
-      MethodDescription description,
-      MethodInvocation invocation) {
-    super(description, invocation);
-    m_hostJavaInfo = hostJavaInfo;
-    //m_invocation = invocation;
-  }
+	//private MethodInvocation m_invocation;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public VoidInvocationCreationSupport(JavaInfo hostJavaInfo,
+			MethodDescription description,
+			MethodInvocation invocation) {
+		super(description, invocation);
+		m_hostJavaInfo = hostJavaInfo;
+		//m_invocation = invocation;
+	}
 
-  /**
-   * Creates new {@link VoidInvocationCreationSupport} for adding new component.
-   *
-   * @param hostJavaInfo
-   *          the {@link JavaInfo} for which {@link MethodInvocation} should be added.
-   */
-  public VoidInvocationCreationSupport(JavaInfo hostJavaInfo, MethodDescription description) {
-    super(description);
-    m_hostJavaInfo = hostJavaInfo;
-  }
+	/**
+	 * Creates new {@link VoidInvocationCreationSupport} for adding new component.
+	 *
+	 * @param hostJavaInfo
+	 *          the {@link JavaInfo} for which {@link MethodInvocation} should be added.
+	 */
+	public VoidInvocationCreationSupport(JavaInfo hostJavaInfo, MethodDescription description) {
+		super(description);
+		m_hostJavaInfo = hostJavaInfo;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    return "void";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		return "void";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean canUseParent(JavaInfo parent) throws Exception {
-    // TODO consider to implement
-    return super.canUseParent(parent);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean canUseParent(JavaInfo parent) throws Exception {
+		// TODO consider to implement
+		return super.canUseParent(parent);
+	}
 
-  @Override
-  public void setJavaInfo(JavaInfo javaInfo) throws Exception {
-    super.setJavaInfo(javaInfo);
-    m_javaInfo.addBroadcastListener(new JavaInfosetObjectBefore() {
-      @Override
-      public void invoke(JavaInfo target, Object[] objectRef) throws Exception {
-        if (target == m_javaInfo) {
-          if (m_javaInfo.getCreationSupport() == VoidInvocationCreationSupport.this) {
-            Object hostObject = m_hostJavaInfo.getObject();
-            objectRef[0] = getObject(hostObject);
-          } else {
-            m_javaInfo.removeBroadcastListener(this);
-          }
-        }
-      }
-    });
-    m_javaInfo.addBroadcastListener(new ObjectInfoAllProperties() {
-      @Override
-      public void invoke(ObjectInfo object, List<Property> properties) throws Exception {
-        if (object == m_javaInfo) {
-          if (!m_description.hasTrueTag("voidFactory.dontFilterProperties")) {
-            Predicate<Property> predicate = PropertyUtils.getIncludeByTitlePredicate("Factory");
-            PropertyUtils.filterProperties(properties, predicate);
-          }
-        }
-      }
-    });
-  }
+	@Override
+	public void setJavaInfo(JavaInfo javaInfo) throws Exception {
+		super.setJavaInfo(javaInfo);
+		m_javaInfo.addBroadcastListener(new JavaInfosetObjectBefore() {
+			@Override
+			public void invoke(JavaInfo target, Object[] objectRef) throws Exception {
+				if (target == m_javaInfo) {
+					if (m_javaInfo.getCreationSupport() == VoidInvocationCreationSupport.this) {
+						Object hostObject = m_hostJavaInfo.getObject();
+						objectRef[0] = getObject(hostObject);
+					} else {
+						m_javaInfo.removeBroadcastListener(this);
+					}
+				}
+			}
+		});
+		m_javaInfo.addBroadcastListener(new ObjectInfoAllProperties() {
+			@Override
+			public void invoke(ObjectInfo object, List<Property> properties) throws Exception {
+				if (object == m_javaInfo) {
+					if (!m_description.hasTrueTag("voidFactory.dontFilterProperties")) {
+						Predicate<Property> predicate = PropertyUtils.getIncludeByTitlePredicate("Factory");
+						PropertyUtils.filterProperties(properties, predicate);
+					}
+				}
+			}
+		});
+	}
 
-  /**
-   * Void methods don't return any value, so we need so special way to access created object.
-   *
-   * @param hostObject
-   *          the {@link Object} or host {@link JavaInfo}.
-   * @return the object of this {@link JavaInfo}.
-   */
-  protected abstract Object getObject(Object hostObject) throws Exception;
+	/**
+	 * Void methods don't return any value, so we need so special way to access created object.
+	 *
+	 * @param hostObject
+	 *          the {@link Object} or host {@link JavaInfo}.
+	 * @return the object of this {@link JavaInfo}.
+	 */
+	protected abstract Object getObject(Object hostObject) throws Exception;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Special access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets underlying {@link MethodInvocation}, useful to perform morphing into different method.
-   * <p>
-   * TODO may be move into {@link AbstractFactoryCreationSupport}.
-   */
-  public final void setInvocation(MethodInvocation invocation) {
-    m_invocation = invocation;
-    m_javaInfo.bindToExpression(invocation);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Special access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets underlying {@link MethodInvocation}, useful to perform morphing into different method.
+	 * <p>
+	 * TODO may be move into {@link AbstractFactoryCreationSupport}.
+	 */
+	public final void setInvocation(MethodInvocation invocation) {
+		m_invocation = invocation;
+		m_javaInfo.bindToExpression(invocation);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Adding
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the source of {@link MethodInvocation} for {@link #add_getSource(NodeTarget)}, starting
-   *         from method name, without "expression" part, for example <code>addSeparator()</code>.
-   */
-  protected abstract String add_getMethodSource() throws Exception;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Adding
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the source of {@link MethodInvocation} for {@link #add_getSource(NodeTarget)}, starting
+	 *         from method name, without "expression" part, for example <code>addSeparator()</code>.
+	 */
+	protected abstract String add_getMethodSource() throws Exception;
 
-  @Override
-  public final String add_getSource(NodeTarget target) throws Exception {
-    return TemplateUtils.format("{0}.{1}", m_hostJavaInfo, add_getMethodSource());
-  }
+	@Override
+	public final String add_getSource(NodeTarget target) throws Exception {
+		return TemplateUtils.format("{0}.{1}", m_hostJavaInfo, add_getMethodSource());
+	}
 
-  @Override
-  public final void add_setSourceExpression(Expression expression) throws Exception {
-    setInvocation((MethodInvocation) expression);
-  }
+	@Override
+	public final void add_setSourceExpression(Expression expression) throws Exception {
+		setInvocation((MethodInvocation) expression);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/WrapperMethodControlCreationSupport.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/WrapperMethodControlCreationSupport.java
index ddb5b1ccc..87dcbef6b 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/WrapperMethodControlCreationSupport.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/WrapperMethodControlCreationSupport.java
@@ -32,136 +32,136 @@
  * @coverage core.model.creation
  */
 public class WrapperMethodControlCreationSupport extends CreationSupport
-    implements
-      IWrapperControlCreationSupport {
-  private final WrapperByMethod m_wrapper;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public WrapperMethodControlCreationSupport(WrapperByMethod wrapper) {
-    m_wrapper = wrapper;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    return "viewer: " + m_wrapper.getControlMethod();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link JavaInfo} that wraps this {@link JavaInfo}.
-   */
-  @Override
-  public final JavaInfo getWrapperInfo() {
-    return m_wrapper.getWrapperInfo();
-  }
-
-  @Override
-  public void setJavaInfo(JavaInfo javaInfo) throws Exception {
-    super.setJavaInfo(javaInfo);
-    m_javaInfo.addBroadcastListener(new JavaInfoSetObjectAfter() {
-      @Override
-      public void invoke(JavaInfo target, Object o) throws Exception {
-        if (target == m_wrapper.getWrapperInfo()) {
-          Object object = m_wrapper.getControlMethod().invoke(o);
-          m_javaInfo.setObject(object);
-        }
-      }
-    });
-  }
-
-  @Override
-  public ASTNode getNode() {
-    return m_wrapper.getWrapperInfo().getCreationSupport().getNode();
-  }
-
-  @Override
-  public boolean isJavaInfo(ASTNode node) {
-    return m_wrapper.isWrappedInfo(node);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Validation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean canReorder() {
-    return true;
-  }
-
-  @Override
-  public boolean canReparent() {
-    return true;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Add
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String add_getSource(NodeTarget target) throws Exception {
-    return TemplateUtils.format(
-        "{0}.{1}()",
-        m_wrapper.getWrapperInfo(),
-        m_wrapper.getControlMethod().getName());
-  }
-
-  @Override
-  public void add_setSourceExpression(Expression expression) throws Exception {
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Delete
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean canDelete() {
-    return true;
-  }
-
-  @Override
-  public void delete() throws Exception {
-    CreationSupport wrapperCreation = m_wrapper.getWrapperInfo().getCreationSupport();
-    boolean isImplicitWrapper = wrapperCreation instanceof IImplicitCreationSupport;
-    JavaInfoUtils.deleteJavaInfo(m_javaInfo, !isImplicitWrapper);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Clipboard
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public IClipboardCreationSupport getClipboard() throws Exception {
-    final JavaInfoMemento viewerMemento = JavaInfoMemento.createMemento(m_wrapper.getWrapperInfo());
-    return new IClipboardCreationSupport() {
-      private static final long serialVersionUID = 0L;
-
-      @Override
-      public CreationSupport create(JavaInfo rootObject) throws Exception {
-        IWrapperInfo wrapperInfo = (IWrapperInfo) viewerMemento.create(rootObject);
-        return new WrapperMethodCreationSupport((WrapperByMethod) wrapperInfo.getWrapper());
-      }
-
-      @Override
-      public void apply(JavaInfo javaInfo) throws Exception {
-        viewerMemento.apply();
-      }
-    };
-  }
+implements
+IWrapperControlCreationSupport {
+	private final WrapperByMethod m_wrapper;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public WrapperMethodControlCreationSupport(WrapperByMethod wrapper) {
+		m_wrapper = wrapper;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		return "viewer: " + m_wrapper.getControlMethod();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link JavaInfo} that wraps this {@link JavaInfo}.
+	 */
+	@Override
+	public final JavaInfo getWrapperInfo() {
+		return m_wrapper.getWrapperInfo();
+	}
+
+	@Override
+	public void setJavaInfo(JavaInfo javaInfo) throws Exception {
+		super.setJavaInfo(javaInfo);
+		m_javaInfo.addBroadcastListener(new JavaInfoSetObjectAfter() {
+			@Override
+			public void invoke(JavaInfo target, Object o) throws Exception {
+				if (target == m_wrapper.getWrapperInfo()) {
+					Object object = m_wrapper.getControlMethod().invoke(o);
+					m_javaInfo.setObject(object);
+				}
+			}
+		});
+	}
+
+	@Override
+	public ASTNode getNode() {
+		return m_wrapper.getWrapperInfo().getCreationSupport().getNode();
+	}
+
+	@Override
+	public boolean isJavaInfo(ASTNode node) {
+		return m_wrapper.isWrappedInfo(node);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Validation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean canReorder() {
+		return true;
+	}
+
+	@Override
+	public boolean canReparent() {
+		return true;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Add
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String add_getSource(NodeTarget target) throws Exception {
+		return TemplateUtils.format(
+				"{0}.{1}()",
+				m_wrapper.getWrapperInfo(),
+				m_wrapper.getControlMethod().getName());
+	}
+
+	@Override
+	public void add_setSourceExpression(Expression expression) throws Exception {
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Delete
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean canDelete() {
+		return true;
+	}
+
+	@Override
+	public void delete() throws Exception {
+		CreationSupport wrapperCreation = m_wrapper.getWrapperInfo().getCreationSupport();
+		boolean isImplicitWrapper = wrapperCreation instanceof IImplicitCreationSupport;
+		JavaInfoUtils.deleteJavaInfo(m_javaInfo, !isImplicitWrapper);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Clipboard
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public IClipboardCreationSupport getClipboard() throws Exception {
+		final JavaInfoMemento viewerMemento = JavaInfoMemento.createMemento(m_wrapper.getWrapperInfo());
+		return new IClipboardCreationSupport() {
+			private static final long serialVersionUID = 0L;
+
+			@Override
+			public CreationSupport create(JavaInfo rootObject) throws Exception {
+				IWrapperInfo wrapperInfo = (IWrapperInfo) viewerMemento.create(rootObject);
+				return new WrapperMethodCreationSupport((WrapperByMethod) wrapperInfo.getWrapper());
+			}
+
+			@Override
+			public void apply(JavaInfo javaInfo) throws Exception {
+				viewerMemento.apply();
+			}
+		};
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/WrapperMethodCreationSupport.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/WrapperMethodCreationSupport.java
index 4c6ba1ec7..0abe6a37c 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/WrapperMethodCreationSupport.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/WrapperMethodCreationSupport.java
@@ -35,88 +35,88 @@
  * @coverage core.model.creation
  */
 public class WrapperMethodCreationSupport extends CreationSupport {
-  protected final WrapperByMethod m_wrapper;
-  private MethodInvocation m_invocation;
+	protected final WrapperByMethod m_wrapper;
+	private MethodInvocation m_invocation;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public WrapperMethodCreationSupport(WrapperByMethod wrapper) {
-    m_wrapper = wrapper;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public WrapperMethodCreationSupport(WrapperByMethod wrapper) {
+		m_wrapper = wrapper;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    return "method: " + ReflectionUtils.toString(m_wrapper.getControlMethod());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		return "method: " + ReflectionUtils.toString(m_wrapper.getControlMethod());
+	}
 
-  @Override
-  public ASTNode getNode() {
-    return m_invocation;
-  }
+	@Override
+	public ASTNode getNode() {
+		return m_invocation;
+	}
 
-  @Override
-  public boolean isJavaInfo(ASTNode node) {
-    return m_invocation != null && node == m_invocation;
-  }
+	@Override
+	public boolean isJavaInfo(ASTNode node) {
+		return m_invocation != null && node == m_invocation;
+	}
 
-  @Override
-  public Association getAssociation() throws Exception {
-    return new WrappedObjectAssociation(m_wrapper);
-  }
+	@Override
+	public Association getAssociation() throws Exception {
+		return new WrappedObjectAssociation(m_wrapper);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Add
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String add_getSource(NodeTarget target) throws Exception {
-    String wrapperSource = m_wrapper.getWrapperInfo().getCreationSupport().add_getSource(target);
-    String controlName = m_wrapper.getControlMethod().getName();
-    return TemplateUtils.format("{0}.{1}()", wrapperSource, controlName);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Add
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String add_getSource(NodeTarget target) throws Exception {
+		String wrapperSource = m_wrapper.getWrapperInfo().getCreationSupport().add_getSource(target);
+		String controlName = m_wrapper.getControlMethod().getName();
+		return TemplateUtils.format("{0}.{1}()", wrapperSource, controlName);
+	}
 
-  @Override
-  public void add_setSourceExpression(Expression expression) throws Exception {
-    m_invocation = (MethodInvocation) expression;
-    // prepare viewer expression
-    Expression viewerCreation = m_invocation.getExpression();
-    // configure viewer
-    JavaInfo wrapperInfo = m_wrapper.getWrapperInfo();
-    wrapperInfo.getCreationSupport().add_setSourceExpression(viewerCreation);
-    wrapperInfo.addRelatedNode(viewerCreation);
-    wrapperInfo.setAssociation(wrapperInfo.getCreationSupport().getAssociation());
-    // ensure local/field variable for viewer
-    {
-      wrapperInfo.setVariableSupport(new EmptyVariableSupport(wrapperInfo, viewerCreation));
-      if (shouldUseFieldForWrapper()) {
-        wrapperInfo.getVariableSupport().convertLocalToField();
-      } else {
-        wrapperInfo.getVariableSupport().convertFieldToLocal();
-      }
-    }
-    // add viewer to control
-    m_javaInfo.addChild(wrapperInfo);
-    // configure control
-    m_javaInfo.setCreationSupport(newControlCreationSupport());
-    m_javaInfo.bindToExpression(m_invocation);
-  }
+	@Override
+	public void add_setSourceExpression(Expression expression) throws Exception {
+		m_invocation = (MethodInvocation) expression;
+		// prepare viewer expression
+		Expression viewerCreation = m_invocation.getExpression();
+		// configure viewer
+		JavaInfo wrapperInfo = m_wrapper.getWrapperInfo();
+		wrapperInfo.getCreationSupport().add_setSourceExpression(viewerCreation);
+		wrapperInfo.addRelatedNode(viewerCreation);
+		wrapperInfo.setAssociation(wrapperInfo.getCreationSupport().getAssociation());
+		// ensure local/field variable for viewer
+		{
+			wrapperInfo.setVariableSupport(new EmptyVariableSupport(wrapperInfo, viewerCreation));
+			if (shouldUseFieldForWrapper()) {
+				wrapperInfo.getVariableSupport().convertLocalToField();
+			} else {
+				wrapperInfo.getVariableSupport().convertFieldToLocal();
+			}
+		}
+		// add viewer to control
+		m_javaInfo.addChild(wrapperInfo);
+		// configure control
+		m_javaInfo.setCreationSupport(newControlCreationSupport());
+		m_javaInfo.bindToExpression(m_invocation);
+	}
 
-  private boolean shouldUseFieldForWrapper() {
-    JavaInfo wrapperInfo = m_wrapper.getWrapperInfo();
-    GenerationSettings settings = wrapperInfo.getDescription().getToolkit().getGenerationSettings();
-    return settings.getVariable(wrapperInfo) instanceof FieldUniqueVariableDescription;
-  }
+	private boolean shouldUseFieldForWrapper() {
+		JavaInfo wrapperInfo = m_wrapper.getWrapperInfo();
+		GenerationSettings settings = wrapperInfo.getDescription().getToolkit().getGenerationSettings();
+		return settings.getVariable(wrapperInfo) instanceof FieldUniqueVariableDescription;
+	}
 
-  protected CreationSupport newControlCreationSupport() {
-    return new WrapperMethodControlCreationSupport(m_wrapper);
-  }
+	protected CreationSupport newControlCreationSupport() {
+		return new WrapperMethodControlCreationSupport(m_wrapper);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/WrapperMethodLiveCreationSupport.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/WrapperMethodLiveCreationSupport.java
index ad3d828e6..88552950f 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/WrapperMethodLiveCreationSupport.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/WrapperMethodLiveCreationSupport.java
@@ -26,70 +26,70 @@
  * @coverage core.model.creation
  */
 public class WrapperMethodLiveCreationSupport extends WrapperMethodCreationSupport
-    implements
-      ILiveCreationSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public WrapperMethodLiveCreationSupport(WrapperByMethod viewer) {
-    super(viewer);
-  }
+implements
+ILiveCreationSupport {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public WrapperMethodLiveCreationSupport(WrapperByMethod viewer) {
+		super(viewer);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public CreationSupport getLiveComponentCreation() {
-    return new LiveCreationSupport();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public CreationSupport getLiveComponentCreation() {
+		return new LiveCreationSupport();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // LiveCreationSupport
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private class LiveCreationSupport extends CreationSupport {
-    private Expression m_expression;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// LiveCreationSupport
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private class LiveCreationSupport extends CreationSupport {
+		private Expression m_expression;
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Access
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public ASTNode getNode() {
-      return m_expression;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Access
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public ASTNode getNode() {
+			return m_expression;
+		}
 
-    @Override
-    public boolean isJavaInfo(ASTNode node) {
-      return node == m_expression;
-    }
+		@Override
+		public boolean isJavaInfo(ASTNode node) {
+			return node == m_expression;
+		}
 
-    @Override
-    public Association getAssociation() throws Exception {
-      return new WrappedObjectAssociation(m_wrapper);
-    }
+		@Override
+		public Association getAssociation() throws Exception {
+			return new WrappedObjectAssociation(m_wrapper);
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Add
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public String add_getSource(NodeTarget target) throws Exception {
-      String controlSource = "." + m_wrapper.getControlMethod().getName() + "()";
-      return m_wrapper.getWrapperInfo().getCreationSupport().add_getSource(target) + controlSource;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Add
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public String add_getSource(NodeTarget target) throws Exception {
+			String controlSource = "." + m_wrapper.getControlMethod().getName() + "()";
+			return m_wrapper.getWrapperInfo().getCreationSupport().add_getSource(target) + controlSource;
+		}
 
-    @Override
-    public void add_setSourceExpression(Expression expression) throws Exception {
-      m_expression = expression;
-      m_javaInfo.bindToExpression(expression);
-    }
-  }
+		@Override
+		public void add_setSourceExpression(Expression expression) throws Exception {
+			m_expression = expression;
+			m_javaInfo.bindToExpression(expression);
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/factory/AbstractExplicitFactoryCreationSupport.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/factory/AbstractExplicitFactoryCreationSupport.java
index 017403891..0290cea6c 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/factory/AbstractExplicitFactoryCreationSupport.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/factory/AbstractExplicitFactoryCreationSupport.java
@@ -34,170 +34,170 @@
  * @coverage core.model.creation
  */
 public abstract class AbstractExplicitFactoryCreationSupport extends AbstractFactoryCreationSupport
-    implements
-      ILiveCreationSupport {
-  protected String m_addArguments;
+implements
+ILiveCreationSupport {
+	protected String m_addArguments;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractExplicitFactoryCreationSupport(FactoryMethodDescription description) {
-    super(description);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractExplicitFactoryCreationSupport(FactoryMethodDescription description) {
+		super(description);
+	}
 
-  public AbstractExplicitFactoryCreationSupport(FactoryMethodDescription description,
-      MethodInvocation invocation) {
-    super(description, invocation);
-  }
+	public AbstractExplicitFactoryCreationSupport(FactoryMethodDescription description,
+			MethodInvocation invocation) {
+		super(description, invocation);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link FactoryMethodDescription} for this factory method.
-   */
-  @Override
-  public final FactoryMethodDescription getDescription() {
-    return (FactoryMethodDescription) m_description;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link FactoryMethodDescription} for this factory method.
+	 */
+	@Override
+	public final FactoryMethodDescription getDescription() {
+		return (FactoryMethodDescription) m_description;
+	}
 
-  @Override
-  public final Association getAssociation() throws Exception {
-    if (add_getSource(null).indexOf("%parent%") != -1) {
-      return new FactoryParentAssociation();
-    }
-    return null;
-  }
+	@Override
+	public final Association getAssociation() throws Exception {
+		if (add_getSource(null).indexOf("%parent%") != -1) {
+			return new FactoryParentAssociation();
+		}
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Validation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean canUseParent(JavaInfo parent) throws Exception {
-    // check that if constructor has "parent" parameter, it is compatible with given "parent"
-    for (ParameterDescription parameter : m_description.getParameters()) {
-      if (parameter.isParent()) {
-        Class<?> requiredType = parameter.getType();
-        Class<?> parentType = parent.getDescription().getComponentClass();
-        if (!requiredType.isAssignableFrom(parentType)) {
-          return false;
-        }
-      }
-    }
-    // continue
-    return super.canUseParent(parent);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Validation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean canUseParent(JavaInfo parent) throws Exception {
+		// check that if constructor has "parent" parameter, it is compatible with given "parent"
+		for (ParameterDescription parameter : m_description.getParameters()) {
+			if (parameter.isParent()) {
+				Class<?> requiredType = parameter.getType();
+				Class<?> parentType = parent.getDescription().getComponentClass();
+				if (!requiredType.isAssignableFrom(parentType)) {
+					return false;
+				}
+			}
+		}
+		// continue
+		return super.canUseParent(parent);
+	}
 
-  @Override
-  public final boolean canReorder() {
-    return true;
-  }
+	@Override
+	public final boolean canReorder() {
+		return true;
+	}
 
-  @Override
-  public final boolean canReparent() {
-    return true;
-  }
+	@Override
+	public final boolean canReparent() {
+		return true;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Adding
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final String add_getSource(NodeTarget target) throws Exception {
-    String argumentsSource;
-    if (m_addArguments != null) {
-      argumentsSource = m_addArguments;
-    } else {
-      argumentsSource = "";
-      for (ParameterDescription parameter : m_description.getParameters()) {
-        // comma
-        if (argumentsSource.length() != 0) {
-          argumentsSource += ", ";
-        }
-        // source
-        if (parameter.isParent()) {
-          argumentsSource += "%parent%";
-        } else {
-          Assert.isNotNull(parameter.getDefaultSource());
-          argumentsSource += parameter.getDefaultSource();
-        }
-      }
-    }
-    //
-    return MessageFormat.format(
-        "{0}{1}({2})",
-        add_getSource_invocationExpression(target),
-        m_description.getName(),
-        argumentsSource);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Adding
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final String add_getSource(NodeTarget target) throws Exception {
+		String argumentsSource;
+		if (m_addArguments != null) {
+			argumentsSource = m_addArguments;
+		} else {
+			argumentsSource = "";
+			for (ParameterDescription parameter : m_description.getParameters()) {
+				// comma
+				if (argumentsSource.length() != 0) {
+					argumentsSource += ", ";
+				}
+				// source
+				if (parameter.isParent()) {
+					argumentsSource += "%parent%";
+				} else {
+					Assert.isNotNull(parameter.getDefaultSource());
+					argumentsSource += parameter.getDefaultSource();
+				}
+			}
+		}
+		//
+		return MessageFormat.format(
+				"{0}{1}({2})",
+				add_getSource_invocationExpression(target),
+				m_description.getName(),
+				argumentsSource);
+	}
 
-  /**
-   * @return the source for expression part of {@link MethodInvocation}, name of class for static
-   *         method or access expression for instance method.
-   */
-  protected abstract String add_getSource_invocationExpression(NodeTarget target) throws Exception;
+	/**
+	 * @return the source for expression part of {@link MethodInvocation}, name of class for static
+	 *         method or access expression for instance method.
+	 */
+	protected abstract String add_getSource_invocationExpression(NodeTarget target) throws Exception;
 
-  @Override
-  public final void add_setSourceExpression(Expression expression) throws Exception {
-    m_invocation = (MethodInvocation) expression;
-    m_javaInfo.bindToExpression(m_invocation);
-    // add invocations
-    for (CreationInvocationDescription invocation : getDescription().getInvocations()) {
-      m_javaInfo.addMethodInvocation(invocation.getSignature(), invocation.getArguments());
-    }
-  }
+	@Override
+	public final void add_setSourceExpression(Expression expression) throws Exception {
+		m_invocation = (MethodInvocation) expression;
+		m_javaInfo.bindToExpression(m_invocation);
+		// add invocations
+		for (CreationInvocationDescription invocation : getDescription().getInvocations()) {
+			m_javaInfo.addMethodInvocation(invocation.getSignature(), invocation.getArguments());
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Clipboard
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the source of arguments for copy/paste.
-   */
-  protected final String getClipboardArguments() throws Exception {
-    // prepare source for arguments
-    String argumentsSource = "";
-    for (ParameterDescription parameter : m_description.getParameters()) {
-      // append separator
-      if (argumentsSource.length() != 0) {
-        argumentsSource += ", ";
-      }
-      // append argument
-      if (parameter.isParent()) {
-        argumentsSource += "%parent%";
-      } else {
-        String argumentSource = null;
-        // ask property
-        {
-          GenericPropertyImpl argumentProperty =
-              (GenericPropertyImpl) getGenericProperty(parameter);
-          if (argumentProperty != null) {
-            argumentSource = argumentProperty.getClipboardSource();
-          }
-        }
-        // use default source for parameter
-        if (argumentSource == null) {
-          if (Object.class.isAssignableFrom(parameter.getType())) {
-            argumentSource = parameter.getDefaultSource();
-          }
-        }
-        // do append argument
-        Assert.isNotNull(argumentSource, "No source for "
-            + parameter.getIndex()
-            + "-th argument of "
-            + m_invocation);
-        argumentsSource += argumentSource;
-      }
-    }
-    // return source of arguments
-    return argumentsSource;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Clipboard
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the source of arguments for copy/paste.
+	 */
+	protected final String getClipboardArguments() throws Exception {
+		// prepare source for arguments
+		String argumentsSource = "";
+		for (ParameterDescription parameter : m_description.getParameters()) {
+			// append separator
+			if (argumentsSource.length() != 0) {
+				argumentsSource += ", ";
+			}
+			// append argument
+			if (parameter.isParent()) {
+				argumentsSource += "%parent%";
+			} else {
+				String argumentSource = null;
+				// ask property
+				{
+					GenericPropertyImpl argumentProperty =
+							(GenericPropertyImpl) getGenericProperty(parameter);
+					if (argumentProperty != null) {
+						argumentSource = argumentProperty.getClipboardSource();
+					}
+				}
+				// use default source for parameter
+				if (argumentSource == null) {
+					if (Object.class.isAssignableFrom(parameter.getType())) {
+						argumentSource = parameter.getDefaultSource();
+					}
+				}
+				// do append argument
+				Assert.isNotNull(argumentSource, "No source for "
+						+ parameter.getIndex()
+						+ "-th argument of "
+						+ m_invocation);
+				argumentsSource += argumentSource;
+			}
+		}
+		// return source of arguments
+		return argumentsSource;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/factory/AbstractFactoryCreationSupport.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/factory/AbstractFactoryCreationSupport.java
index b998c7b99..268dc74a4 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/factory/AbstractFactoryCreationSupport.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/factory/AbstractFactoryCreationSupport.java
@@ -41,120 +41,120 @@
  * @coverage core.model.creation
  */
 public abstract class AbstractFactoryCreationSupport extends CreationSupport {
-  protected CreationSupportUtils m_utils;
-  protected MethodDescription m_description;
-  protected MethodInvocation m_invocation;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractFactoryCreationSupport() {
-  }
-
-  public AbstractFactoryCreationSupport(MethodDescription description) {
-    Assert.isNotNull(description);
-    m_description = description;
-  }
-
-  public AbstractFactoryCreationSupport(MethodDescription description, MethodInvocation invocation) {
-    this(description);
-    m_invocation = invocation;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void setJavaInfo(JavaInfo javaInfo) throws Exception {
-    super.setJavaInfo(javaInfo);
-    m_utils = new CreationSupportUtils(m_javaInfo);
-  }
-
-  @Override
-  public final boolean isJavaInfo(ASTNode node) {
-    return node == m_invocation;
-  }
-
-  @Override
-  public final ASTNode getNode() {
-    return m_invocation;
-  }
-
-  /**
-   * @return the {@link MethodInvocation} for creating this {@link JavaInfo}.
-   */
-  public final MethodInvocation getInvocation() {
-    return m_invocation;
-  }
-
-  /**
-   * @return the {@link MethodDescription} for this factory method.
-   */
-  public MethodDescription getDescription() {
-    return m_description;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Properties
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private ComplexProperty m_complexProperty;
-
-  @Override
-  public void addProperties(List<Property> properties) throws Exception {
-    if (m_complexProperty == null) {
-      m_complexProperty = new ComplexProperty("Factory", "(Factory properties)");
-      m_complexProperty.setCategory(PropertyCategory.system(3));
-      m_complexProperty.setModified(true);
-      // initialize description
-      ComponentDescriptionHelper.ensureInitialized(
-          m_javaInfo.getEditor().getJavaProject(),
-          m_description);
-      // prepare list of sub-properties
-      List<Property> subPropertiesList = Lists.newArrayList();
-      for (ParameterDescription parameter : m_description.getParameters()) {
-        Property property = getGenericProperty(parameter);
-        if (property != null) {
-          subPropertiesList.add(property);
-        }
-      }
-      // set sub-properties
-      if (!subPropertiesList.isEmpty()) {
-        Property[] subProperties =
-            subPropertiesList.toArray(new Property[subPropertiesList.size()]);
-        m_complexProperty.setProperties(subProperties);
-      }
-    }
-    // add complex property if there are sub-properties
-    if (m_complexProperty.getProperties().length != 0) {
-      properties.add(m_complexProperty);
-    }
-  }
-
-  @Override
-  public final void addAccessors(GenericPropertyDescription propertyDescription,
-      List<ExpressionAccessor> accessors) throws Exception {
-    for (ParameterDescription parameter : m_description.getParameters()) {
-      if (propertyDescription.getId().equals(parameter.getProperty())) {
-        int index = parameter.getIndex();
-        String defaultSource = parameter.getDefaultSource();
-        ExpressionAccessor accessor = new FactoryAccessor(index, defaultSource);
-        accessors.add(accessor);
-      }
-    }
-  }
-
-  /**
-   * @return the {@link GenericPropertyImpl} for given {@link ParameterDescription} of factory.
-   */
-  protected final Property getGenericProperty(ParameterDescription parameter) throws Exception {
-    // try to find JavaInfo passed as parameter
-    /*{
+	protected CreationSupportUtils m_utils;
+	protected MethodDescription m_description;
+	protected MethodInvocation m_invocation;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractFactoryCreationSupport() {
+	}
+
+	public AbstractFactoryCreationSupport(MethodDescription description) {
+		Assert.isNotNull(description);
+		m_description = description;
+	}
+
+	public AbstractFactoryCreationSupport(MethodDescription description, MethodInvocation invocation) {
+		this(description);
+		m_invocation = invocation;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void setJavaInfo(JavaInfo javaInfo) throws Exception {
+		super.setJavaInfo(javaInfo);
+		m_utils = new CreationSupportUtils(m_javaInfo);
+	}
+
+	@Override
+	public final boolean isJavaInfo(ASTNode node) {
+		return node == m_invocation;
+	}
+
+	@Override
+	public final ASTNode getNode() {
+		return m_invocation;
+	}
+
+	/**
+	 * @return the {@link MethodInvocation} for creating this {@link JavaInfo}.
+	 */
+	public final MethodInvocation getInvocation() {
+		return m_invocation;
+	}
+
+	/**
+	 * @return the {@link MethodDescription} for this factory method.
+	 */
+	public MethodDescription getDescription() {
+		return m_description;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Properties
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private ComplexProperty m_complexProperty;
+
+	@Override
+	public void addProperties(List<Property> properties) throws Exception {
+		if (m_complexProperty == null) {
+			m_complexProperty = new ComplexProperty("Factory", "(Factory properties)");
+			m_complexProperty.setCategory(PropertyCategory.system(3));
+			m_complexProperty.setModified(true);
+			// initialize description
+			ComponentDescriptionHelper.ensureInitialized(
+					m_javaInfo.getEditor().getJavaProject(),
+					m_description);
+			// prepare list of sub-properties
+			List<Property> subPropertiesList = Lists.newArrayList();
+			for (ParameterDescription parameter : m_description.getParameters()) {
+				Property property = getGenericProperty(parameter);
+				if (property != null) {
+					subPropertiesList.add(property);
+				}
+			}
+			// set sub-properties
+			if (!subPropertiesList.isEmpty()) {
+				Property[] subProperties =
+						subPropertiesList.toArray(new Property[subPropertiesList.size()]);
+				m_complexProperty.setProperties(subProperties);
+			}
+		}
+		// add complex property if there are sub-properties
+		if (m_complexProperty.getProperties().length != 0) {
+			properties.add(m_complexProperty);
+		}
+	}
+
+	@Override
+	public final void addAccessors(GenericPropertyDescription propertyDescription,
+			List<ExpressionAccessor> accessors) throws Exception {
+		for (ParameterDescription parameter : m_description.getParameters()) {
+			if (propertyDescription.getId().equals(parameter.getProperty())) {
+				int index = parameter.getIndex();
+				String defaultSource = parameter.getDefaultSource();
+				ExpressionAccessor accessor = new FactoryAccessor(index, defaultSource);
+				accessors.add(accessor);
+			}
+		}
+	}
+
+	/**
+	 * @return the {@link GenericPropertyImpl} for given {@link ParameterDescription} of factory.
+	 */
+	protected final Property getGenericProperty(ParameterDescription parameter) throws Exception {
+		// try to find JavaInfo passed as parameter
+		/*{
     	Expression argument = DomGenerics.arguments(m_invocation).get(parameter.getIndex());
     	JavaInfo javaInfo = m_javaInfo.getRootJava().getChildRepresentedBy(argument);
     	if (javaInfo != null) {
@@ -163,22 +163,22 @@ protected final Property getGenericProperty(ParameterDescription parameter) thro
     		return complexProperty;
     	}
     }*/
-    // use GenericProperty
-    return m_utils.createProperty(parameter);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Delete
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final boolean canDelete() {
-    return true;
-  }
-
-  @Override
-  public final void delete() throws Exception {
-    JavaInfoUtils.deleteJavaInfo(m_javaInfo, true);
-  }
+		// use GenericProperty
+		return m_utils.createProperty(parameter);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Delete
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final boolean canDelete() {
+		return true;
+	}
+
+	@Override
+	public final void delete() throws Exception {
+		JavaInfoUtils.deleteJavaInfo(m_javaInfo, true);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/factory/ImplicitFactoryCreationSupport.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/factory/ImplicitFactoryCreationSupport.java
index 51a0fe470..6054c9370 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/factory/ImplicitFactoryCreationSupport.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/factory/ImplicitFactoryCreationSupport.java
@@ -38,122 +38,122 @@
  * @coverage core.model.creation
  */
 public final class ImplicitFactoryCreationSupport extends AbstractFactoryCreationSupport {
-  private final String m_signature;
-  private JavaInfo m_invocationTarget;
-  private String m_invocationSource;
+	private final String m_signature;
+	private JavaInfo m_invocationTarget;
+	private String m_invocationSource;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Constructor for existing {@link JavaInfo} creation using {@link ImplicitFactoryCreationSupport}
-   * .
-   */
-  public ImplicitFactoryCreationSupport(MethodDescription description, MethodInvocation invocation) {
-    super(description, invocation);
-    m_signature = description.getSignature();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Constructor for existing {@link JavaInfo} creation using {@link ImplicitFactoryCreationSupport}
+	 * .
+	 */
+	public ImplicitFactoryCreationSupport(MethodDescription description, MethodInvocation invocation) {
+		super(description, invocation);
+		m_signature = description.getSignature();
+	}
 
-  /**
-   * Constructor for creating new {@link JavaInfo} using {@link ImplicitFactoryCreationSupport}.
-   */
-  public ImplicitFactoryCreationSupport(String signature, String invocationSource) {
-    this(null, signature, invocationSource);
-  }
+	/**
+	 * Constructor for creating new {@link JavaInfo} using {@link ImplicitFactoryCreationSupport}.
+	 */
+	public ImplicitFactoryCreationSupport(String signature, String invocationSource) {
+		this(null, signature, invocationSource);
+	}
 
-  /**
-   * Constructor for creating new {@link JavaInfo} using {@link ImplicitFactoryCreationSupport}.
-   *
-   * @param invocationTarget
-   *          the {@link JavaInfo} which method should be invoked, may be <code>null</code> to use
-   *          parent {@link JavaInfo}.
-   */
-  public ImplicitFactoryCreationSupport(JavaInfo invocationTarget,
-      String signature,
-      String invocationSource) {
-    m_invocationTarget = invocationTarget;
-    m_signature = signature;
-    m_invocationSource = invocationSource;
-  }
+	/**
+	 * Constructor for creating new {@link JavaInfo} using {@link ImplicitFactoryCreationSupport}.
+	 *
+	 * @param invocationTarget
+	 *          the {@link JavaInfo} which method should be invoked, may be <code>null</code> to use
+	 *          parent {@link JavaInfo}.
+	 */
+	public ImplicitFactoryCreationSupport(JavaInfo invocationTarget,
+			String signature,
+			String invocationSource) {
+		m_invocationTarget = invocationTarget;
+		m_signature = signature;
+		m_invocationSource = invocationSource;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    return "implicit-factory";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		return "implicit-factory";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Validation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean canReorder() {
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Validation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean canReorder() {
+		return true;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Creation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String add_getSource(NodeTarget target) throws Exception {
-    if (m_invocationTarget != null) {
-      return TemplateUtils.format("{0}.{1}", m_invocationTarget, m_invocationSource);
-    } else {
-      return TemplateUtils.format("%parent%.{0}", m_invocationSource);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Creation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String add_getSource(NodeTarget target) throws Exception {
+		if (m_invocationTarget != null) {
+			return TemplateUtils.format("{0}.{1}", m_invocationTarget, m_invocationSource);
+		} else {
+			return TemplateUtils.format("%parent%.{0}", m_invocationSource);
+		}
+	}
 
-  @Override
-  public void add_setSourceExpression(Expression expression) throws Exception {
-    m_invocation = (MethodInvocation) expression;
-    m_javaInfo.bindToExpression(m_invocation);
-    {
-      Expression targetExpression = m_invocation.getExpression();
-      JavaInfo target = m_javaInfo.getRootJava().getChildRepresentedBy(targetExpression);
-      m_description = target.getDescription().getMethod(m_signature);
-    }
-  }
+	@Override
+	public void add_setSourceExpression(Expression expression) throws Exception {
+		m_invocation = (MethodInvocation) expression;
+		m_javaInfo.bindToExpression(m_invocation);
+		{
+			Expression targetExpression = m_invocation.getExpression();
+			JavaInfo target = m_javaInfo.getRootJava().getChildRepresentedBy(targetExpression);
+			m_description = target.getDescription().getMethod(m_signature);
+		}
+	}
 
-  @Override
-  public Association getAssociation() throws Exception {
-    return new InvocationVoidAssociation();
-  }
+	@Override
+	public Association getAssociation() throws Exception {
+		return new InvocationVoidAssociation();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Clipboard
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public IClipboardCreationSupport getClipboard() throws Exception {
-    // support copy/paste only when target/parent are same
-    if (!m_javaInfo.getParentJava().isRepresentedBy(m_invocation.getExpression())) {
-      return null;
-    }
-    // OK, simple case
-    final String signature = m_signature;
-    final String source = getClipboardSource();
-    return new IClipboardCreationSupport() {
-      private static final long serialVersionUID = 0L;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Clipboard
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public IClipboardCreationSupport getClipboard() throws Exception {
+		// support copy/paste only when target/parent are same
+		if (!m_javaInfo.getParentJava().isRepresentedBy(m_invocation.getExpression())) {
+			return null;
+		}
+		// OK, simple case
+		final String signature = m_signature;
+		final String source = getClipboardSource();
+		return new IClipboardCreationSupport() {
+			private static final long serialVersionUID = 0L;
 
-      @Override
-      public CreationSupport create(JavaInfo rootObject) throws Exception {
-        return new ImplicitFactoryCreationSupport(null, signature, source);
-      }
-    };
-  }
+			@Override
+			public CreationSupport create(JavaInfo rootObject) throws Exception {
+				return new ImplicitFactoryCreationSupport(null, signature, source);
+			}
+		};
+	}
 
-  private String getClipboardSource() throws Exception {
-    String argumentsSource = m_utils.getClipboardArguments(m_description.getParameters());
-    return m_description.getName() + "(" + argumentsSource + ")";
-  }
+	private String getClipboardSource() throws Exception {
+		String argumentsSource = m_utils.getClipboardArguments(m_description.getParameters());
+		return m_description.getName() + "(" + argumentsSource + ")";
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/factory/InstanceFactoryContainerInfo.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/factory/InstanceFactoryContainerInfo.java
index 7cfa577d4..0e75be0a2 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/factory/InstanceFactoryContainerInfo.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/factory/InstanceFactoryContainerInfo.java
@@ -27,75 +27,75 @@
  * @coverage core.model.creation
  */
 public final class InstanceFactoryContainerInfo extends ObjectInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    return "{instance factory container}";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		return "{instance factory container}";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the list of {@link InstanceFactoryInfo} children.
-   */
-  public List<InstanceFactoryInfo> getChildrenFactory() {
-    return getChildren(InstanceFactoryInfo.class);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the list of {@link InstanceFactoryInfo} children.
+	 */
+	public List<InstanceFactoryInfo> getChildrenFactory() {
+		return getChildren(InstanceFactoryInfo.class);
+	}
 
-  /**
-   * @return the existing or new {@link InstanceFactoryContainerInfo} for given root.
-   */
-  public static InstanceFactoryContainerInfo get(JavaInfo root) throws Exception {
-    // try to find existing container
-    for (ObjectInfo child : root.getChildren()) {
-      if (child instanceof InstanceFactoryContainerInfo) {
-        return (InstanceFactoryContainerInfo) child;
-      }
-    }
-    // add new container
-    InstanceFactoryContainerInfo container = new InstanceFactoryContainerInfo();
-    root.addChild(container);
-    return container;
-  }
+	/**
+	 * @return the existing or new {@link InstanceFactoryContainerInfo} for given root.
+	 */
+	public static InstanceFactoryContainerInfo get(JavaInfo root) throws Exception {
+		// try to find existing container
+		for (ObjectInfo child : root.getChildren()) {
+			if (child instanceof InstanceFactoryContainerInfo) {
+				return (InstanceFactoryContainerInfo) child;
+			}
+		}
+		// add new container
+		InstanceFactoryContainerInfo container = new InstanceFactoryContainerInfo();
+		root.addChild(container);
+		return container;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public IObjectPresentation getPresentation() {
-    return new DefaultObjectPresentation(this) {
-      @Override
-      public String getText() throws Exception {
-        return "(instance factories)";
-      }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public IObjectPresentation getPresentation() {
+		return new DefaultObjectPresentation(this) {
+			@Override
+			public String getText() throws Exception {
+				return "(instance factories)";
+			}
 
-      @Override
-      public Image getIcon() throws Exception {
-        return DesignerPlugin.getImage("components/factory_container.gif");
-      }
-    };
-  }
+			@Override
+			public Image getIcon() throws Exception {
+				return DesignerPlugin.getImage("components/factory_container.gif");
+			}
+		};
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Delete
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean canDelete() {
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Delete
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean canDelete() {
+		return false;
+	}
 
-  @Override
-  public void delete() throws Exception {
-  }
+	@Override
+	public void delete() throws Exception {
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/factory/InstanceFactoryCreationSupport.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/factory/InstanceFactoryCreationSupport.java
index 22b6c4f63..e928254c0 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/factory/InstanceFactoryCreationSupport.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/factory/InstanceFactoryCreationSupport.java
@@ -44,213 +44,213 @@
  * @coverage core.model.creation
  */
 public final class InstanceFactoryCreationSupport extends AbstractExplicitFactoryCreationSupport {
-  private final InstanceFactoryInfo m_factory;
+	private final InstanceFactoryInfo m_factory;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public InstanceFactoryCreationSupport(InstanceFactoryInfo factory,
-      FactoryMethodDescription description) {
-    super(description);
-    m_factory = factory;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public InstanceFactoryCreationSupport(InstanceFactoryInfo factory,
+			FactoryMethodDescription description) {
+		super(description);
+		m_factory = factory;
+	}
 
-  public InstanceFactoryCreationSupport(InstanceFactoryInfo factory,
-      FactoryMethodDescription description,
-      MethodInvocation invocation) {
-    super(description, invocation);
-    m_factory = factory;
-  }
+	public InstanceFactoryCreationSupport(InstanceFactoryInfo factory,
+			FactoryMethodDescription description,
+			MethodInvocation invocation) {
+		super(description, invocation);
+		m_factory = factory;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    return "instance factory: "
-        + "{"
-        + m_factory.getVariableSupport().toString()
-        + "}"
-        + " "
-        + m_description.getSignature();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		return "instance factory: "
+				+ "{"
+				+ m_factory.getVariableSupport().toString()
+				+ "}"
+				+ " "
+				+ m_description.getSignature();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link InstanceFactoryInfo} used to create this component.
-   */
-  public InstanceFactoryInfo getFactory() {
-    return m_factory;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link InstanceFactoryInfo} used to create this component.
+	 */
+	public InstanceFactoryInfo getFactory() {
+		return m_factory;
+	}
 
-  @Override
-  public CreationSupport getLiveComponentCreation() {
-    FactoryMethodDescription factoryMethodDescription = getDescription();
-    return new LiveCreationSupport(factoryMethodDescription);
-  }
+	@Override
+	public CreationSupport getLiveComponentCreation() {
+		FactoryMethodDescription factoryMethodDescription = getDescription();
+		return new LiveCreationSupport(factoryMethodDescription);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Adding
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String add_getSource_invocationExpression(NodeTarget target) throws Exception {
-    return TemplateUtils.getExpression(m_factory) + ".";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Adding
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String add_getSource_invocationExpression(NodeTarget target) throws Exception {
+		return TemplateUtils.getExpression(m_factory) + ".";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Clipboard
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public IClipboardCreationSupport getClipboard() throws Exception {
-    final String factoryClassName = m_description.getDeclaringClass().getName();
-    final String methodSignature = m_description.getSignature();
-    final String argumentsSource = getClipboardArguments();
-    return new IClipboardCreationSupport() {
-      private static final long serialVersionUID = 0L;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Clipboard
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public IClipboardCreationSupport getClipboard() throws Exception {
+		final String factoryClassName = m_description.getDeclaringClass().getName();
+		final String methodSignature = m_description.getSignature();
+		final String argumentsSource = getClipboardArguments();
+		return new IClipboardCreationSupport() {
+			private static final long serialVersionUID = 0L;
 
-      @Override
-      public CreationSupport create(JavaInfo rootObject) throws Exception {
-        AstEditor editor = rootObject.getEditor();
-        Class<?> factoryClass =
-            EditorState.get(editor).getEditorLoader().loadClass(factoryClassName);
-        //
-        InstanceFactoryInfo factoryInfo = getFactory(rootObject, factoryClass);
-        FactoryMethodDescription description =
-            FactoryDescriptionHelper.getDescription(editor, factoryClass, methodSignature, false);
-        //
-        InstanceFactoryCreationSupport creationSupport =
-            new InstanceFactoryCreationSupport(factoryInfo, description);
-        creationSupport.m_addArguments = argumentsSource;
-        return creationSupport;
-      }
+			@Override
+			public CreationSupport create(JavaInfo rootObject) throws Exception {
+				AstEditor editor = rootObject.getEditor();
+				Class<?> factoryClass =
+						EditorState.get(editor).getEditorLoader().loadClass(factoryClassName);
+				//
+				InstanceFactoryInfo factoryInfo = getFactory(rootObject, factoryClass);
+				FactoryMethodDescription description =
+						FactoryDescriptionHelper.getDescription(editor, factoryClass, methodSignature, false);
+				//
+				InstanceFactoryCreationSupport creationSupport =
+						new InstanceFactoryCreationSupport(factoryInfo, description);
+				creationSupport.m_addArguments = argumentsSource;
+				return creationSupport;
+			}
 
-      /**
-       * @return the new or existing {@link InstanceFactoryInfo} from hierarchy.
-       */
-      private InstanceFactoryInfo getFactory(JavaInfo rootObject, Class<?> factoryClass)
-          throws Exception {
-        List<InstanceFactoryInfo> factories =
-            InstanceFactoryInfo.getFactories(rootObject, factoryClass);
-        // single factory
-        if (factories.size() == 1) {
-          return factories.get(0);
-        }
-        // no factories
-        /*if (factories.size() == 0)*/{
-          Assert.isTrue(factories.isEmpty(), "Only single and no instance factories expected for "
-              + factoryClassName
-              + "."
-              + methodSignature
-              + ", but found "
-              + factories);
-          return InstanceFactoryInfo.add(rootObject, factoryClass);
-        }
-      }
-    };
-  }
+			/**
+			 * @return the new or existing {@link InstanceFactoryInfo} from hierarchy.
+			 */
+			private InstanceFactoryInfo getFactory(JavaInfo rootObject, Class<?> factoryClass)
+					throws Exception {
+				List<InstanceFactoryInfo> factories =
+						InstanceFactoryInfo.getFactories(rootObject, factoryClass);
+				// single factory
+				if (factories.size() == 1) {
+					return factories.get(0);
+				}
+				// no factories
+				/*if (factories.size() == 0)*/{
+					Assert.isTrue(factories.isEmpty(), "Only single and no instance factories expected for "
+							+ factoryClassName
+							+ "."
+							+ methodSignature
+							+ ", but found "
+							+ factories);
+					return InstanceFactoryInfo.add(rootObject, factoryClass);
+				}
+			}
+		};
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // LiveCreationSupport
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Implementation of {@link CreationSupport} for creating {@link JavaInfo} for
-   * {@link AbstractLiveManager}.
-   * <p>
-   * We use here special trick - instead of real source code for {@link InstanceFactoryInfo} access
-   * we use casted {@link NullLiteral}, and then evaluate it as
-   * <em>already existing<em> object of factory! This object
-   * exists because "live" works when we already show some GUI for user, so there are objects for all {@link JavaInfo}'s,
-   * including {@link InstanceFactoryInfo}.
-   */
-  private final class LiveCreationSupport extends AbstractExplicitFactoryCreationSupport {
-    private final String m_factoryTypeName;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// LiveCreationSupport
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Implementation of {@link CreationSupport} for creating {@link JavaInfo} for
+	 * {@link AbstractLiveManager}.
+	 * <p>
+	 * We use here special trick - instead of real source code for {@link InstanceFactoryInfo} access
+	 * we use casted {@link NullLiteral}, and then evaluate it as
+	 * <em>already existing<em> object of factory! This object
+	 * exists because "live" works when we already show some GUI for user, so there are objects for all {@link JavaInfo}'s,
+	 * including {@link InstanceFactoryInfo}.
+	 */
+	private final class LiveCreationSupport extends AbstractExplicitFactoryCreationSupport {
+		private final String m_factoryTypeName;
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    private LiveCreationSupport(FactoryMethodDescription description) {
-      super(description);
-      m_factoryTypeName = m_factory.getDescription().getComponentClass().getName();
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		private LiveCreationSupport(FactoryMethodDescription description) {
+			super(description);
+			m_factoryTypeName = m_factory.getDescription().getComponentClass().getName();
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Evaluation
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    private boolean m_canBeEvaluated = false;
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Evaluation
+		//
+		////////////////////////////////////////////////////////////////////////////
+		private boolean m_canBeEvaluated = false;
 
-    @Override
-    public boolean canBeEvaluated() {
-      // first time return "false", so force to call our "create()" method
-      if (!m_canBeEvaluated) {
-        m_canBeEvaluated = true;
-        return false;
-      }
-      // next times return "true" to evaluate using ASTEvaluationEngine,
-      // with our IExpressionEvaluator that evaluates "(our.factory.Type) null"
-      return true;
-    }
+		@Override
+		public boolean canBeEvaluated() {
+			// first time return "false", so force to call our "create()" method
+			if (!m_canBeEvaluated) {
+				m_canBeEvaluated = true;
+				return false;
+			}
+			// next times return "true" to evaluate using ASTEvaluationEngine,
+			// with our IExpressionEvaluator that evaluates "(our.factory.Type) null"
+			return true;
+		}
 
-    @Override
-    public Object create(EvaluationContext context, ExecutionFlowFrameVisitor visitor)
-        throws Exception {
-      // evaluates "(our.factory.Type) null" into factory object
-      IExpressionEvaluator evaluator = new IExpressionEvaluator() {
-        @Override
-        public Object evaluate(EvaluationContext _context,
-            Expression expression,
-            ITypeBinding typeBinding,
-            String typeQualifiedName) throws Exception {
-          if (expression instanceof CastExpression) {
-            CastExpression castExpression = (CastExpression) expression;
-            String typeName = AstNodeUtils.getFullyQualifiedName(castExpression.getType(), false);
-            if (typeName.equals(m_factoryTypeName)
-                && castExpression.getExpression() instanceof NullLiteral) {
-              return m_factory.getObject();
-            }
-          }
-          return AstEvaluationEngine.UNKNOWN;
-        }
-      };
-      // JavaInfo object is evaluation of invocation
-      context.addEvaluator(evaluator);
-      try {
-        return AstEvaluationEngine.evaluate(context, m_invocation);
-      } finally {
-        context.removeEvaluator(evaluator);
-      }
-    }
+		@Override
+		public Object create(EvaluationContext context, ExecutionFlowFrameVisitor visitor)
+				throws Exception {
+			// evaluates "(our.factory.Type) null" into factory object
+			IExpressionEvaluator evaluator = new IExpressionEvaluator() {
+				@Override
+				public Object evaluate(EvaluationContext _context,
+						Expression expression,
+						ITypeBinding typeBinding,
+						String typeQualifiedName) throws Exception {
+					if (expression instanceof CastExpression) {
+						CastExpression castExpression = (CastExpression) expression;
+						String typeName = AstNodeUtils.getFullyQualifiedName(castExpression.getType(), false);
+						if (typeName.equals(m_factoryTypeName)
+								&& castExpression.getExpression() instanceof NullLiteral) {
+							return m_factory.getObject();
+						}
+					}
+					return AstEvaluationEngine.UNKNOWN;
+				}
+			};
+			// JavaInfo object is evaluation of invocation
+			context.addEvaluator(evaluator);
+			try {
+				return AstEvaluationEngine.evaluate(context, m_invocation);
+			} finally {
+				context.removeEvaluator(evaluator);
+			}
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Adding
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    protected String add_getSource_invocationExpression(NodeTarget target) throws Exception {
-      return "((" + m_factoryTypeName + ") null).";
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Adding
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		protected String add_getSource_invocationExpression(NodeTarget target) throws Exception {
+			return "((" + m_factoryTypeName + ") null).";
+		}
 
-    @Override
-    public CreationSupport getLiveComponentCreation() {
-      throw new NotImplementedException();
-    }
-  }
+		@Override
+		public CreationSupport getLiveComponentCreation() {
+			throw new NotImplementedException();
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/factory/InstanceFactoryInfo.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/factory/InstanceFactoryInfo.java
index 27e694007..c771870c6 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/factory/InstanceFactoryInfo.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/factory/InstanceFactoryInfo.java
@@ -37,114 +37,114 @@
  * @coverage core.model.creation
  */
 public final class InstanceFactoryInfo extends JavaInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public InstanceFactoryInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public InstanceFactoryInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * {@link ComponentDescription} for {@link Object}, cached, initialized only one time.
-   */
-  private static ComponentDescription OBJECT_DESCRIPTION;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * {@link ComponentDescription} for {@link Object}, cached, initialized only one time.
+	 */
+	private static ComponentDescription OBJECT_DESCRIPTION;
 
-  /**
-   * @return <code>true</code> if given class is the instance factory class.
-   */
-  public static boolean isFactory(AstEditor editor, Class<?> clazz) throws Exception {
-    return !FactoryDescriptionHelper.getDescriptionsMap(editor, clazz, false).isEmpty();
-  }
+	/**
+	 * @return <code>true</code> if given class is the instance factory class.
+	 */
+	public static boolean isFactory(AstEditor editor, Class<?> clazz) throws Exception {
+		return !FactoryDescriptionHelper.getDescriptionsMap(editor, clazz, false).isEmpty();
+	}
 
-  /**
-   * Creates new instance of {@link InstanceFactoryInfo}. It is expected that
-   * {@link #isFactory(AstEditor, Class)} returned <code>true</code> for given {@link Class}, i.e.
-   * that it is really instance factory.
-   *
-   * @return new instance {@link InstanceFactoryInfo}.
-   */
-  public static InstanceFactoryInfo createFactory(AstEditor editor,
-      Class<?> factoryClass,
-      CreationSupport creationSupport) throws Exception {
-    ComponentDescription componentDescription;
-    {
-      componentDescription = ComponentDescriptionHelper.getDescription(editor, factoryClass);
-      // use InstanceFactoryInfo as model
-      componentDescription.setModelClass(InstanceFactoryInfo.class);
-      // set factory icon
-      {
-        // prepare description for java.lang.Object
-        if (OBJECT_DESCRIPTION == null) {
-          OBJECT_DESCRIPTION = ComponentDescriptionHelper.getDescription(editor, Object.class);
-        }
-        // if icon is java.lang.Object, use default instance factory icon
-        if (UiUtils.equals(componentDescription.getIcon(), OBJECT_DESCRIPTION.getIcon())) {
-          Image defaultFactoryIcon = DesignerPlugin.getImage("components/factory.gif");
-          componentDescription.setIcon(defaultFactoryIcon);
-        }
-      }
-    }
-    // OK, create InstanceFactoryInfo
-    return (InstanceFactoryInfo) JavaInfoUtils.createJavaInfo(
-        editor,
-        componentDescription,
-        creationSupport);
-  }
+	/**
+	 * Creates new instance of {@link InstanceFactoryInfo}. It is expected that
+	 * {@link #isFactory(AstEditor, Class)} returned <code>true</code> for given {@link Class}, i.e.
+	 * that it is really instance factory.
+	 *
+	 * @return new instance {@link InstanceFactoryInfo}.
+	 */
+	public static InstanceFactoryInfo createFactory(AstEditor editor,
+			Class<?> factoryClass,
+			CreationSupport creationSupport) throws Exception {
+		ComponentDescription componentDescription;
+		{
+			componentDescription = ComponentDescriptionHelper.getDescription(editor, factoryClass);
+			// use InstanceFactoryInfo as model
+			componentDescription.setModelClass(InstanceFactoryInfo.class);
+			// set factory icon
+			{
+				// prepare description for java.lang.Object
+				if (OBJECT_DESCRIPTION == null) {
+					OBJECT_DESCRIPTION = ComponentDescriptionHelper.getDescription(editor, Object.class);
+				}
+				// if icon is java.lang.Object, use default instance factory icon
+				if (UiUtils.equals(componentDescription.getIcon(), OBJECT_DESCRIPTION.getIcon())) {
+					Image defaultFactoryIcon = DesignerPlugin.getImage("components/factory.gif");
+					componentDescription.setIcon(defaultFactoryIcon);
+				}
+			}
+		}
+		// OK, create InstanceFactoryInfo
+		return (InstanceFactoryInfo) JavaInfoUtils.createJavaInfo(
+				editor,
+				componentDescription,
+				creationSupport);
+	}
 
-  /**
-   * @return the {@link List} of {@link InstanceFactoryInfo} with given {@link Class}.
-   */
-  public static List<InstanceFactoryInfo> getFactories(JavaInfo rootJavaInfo, Class<?> factoryClass)
-      throws Exception {
-    List<InstanceFactoryInfo> factories = Lists.newArrayList();
-    //
-    InstanceFactoryContainerInfo container = InstanceFactoryContainerInfo.get(rootJavaInfo);
-    for (InstanceFactoryInfo factory : container.getChildrenFactory()) {
-      if (factoryClass.isAssignableFrom(factory.getDescription().getComponentClass())) {
-        factories.add(factory);
-      }
-    }
-    //
-    return factories;
-  }
+	/**
+	 * @return the {@link List} of {@link InstanceFactoryInfo} with given {@link Class}.
+	 */
+	public static List<InstanceFactoryInfo> getFactories(JavaInfo rootJavaInfo, Class<?> factoryClass)
+			throws Exception {
+		List<InstanceFactoryInfo> factories = Lists.newArrayList();
+		//
+		InstanceFactoryContainerInfo container = InstanceFactoryContainerInfo.get(rootJavaInfo);
+		for (InstanceFactoryInfo factory : container.getChildrenFactory()) {
+			if (factoryClass.isAssignableFrom(factory.getDescription().getComponentClass())) {
+				factories.add(factory);
+			}
+		}
+		//
+		return factories;
+	}
 
-  /**
-   * Creates new instance of {@link InstanceFactoryInfo} of given class and adds it to the
-   * {@link InstanceFactoryContainerInfo}.
-   *
-   * @return the new added {@link InstanceFactoryInfo}.
-   */
-  public static InstanceFactoryInfo add(JavaInfo rootJavaInfo, Class<?> factoryClass)
-      throws Exception {
-    // create model
-    InstanceFactoryInfo factoryInfo;
-    {
-      AstEditor editor = rootJavaInfo.getEditor();
-      factoryInfo = createFactory(editor, factoryClass, new ConstructorCreationSupport());
-    }
-    // add model
-    {
-      JavaInfoUtils.add(
-          factoryInfo,
-          new FieldInitializerVariableSupport(factoryInfo),
-          PureFlatStatementGenerator.INSTANCE,
-          AssociationObjects.empty(),
-          rootJavaInfo,
-          null);
-      // move to InstanceFactoryContainerInfo
-      rootJavaInfo.removeChild(factoryInfo);
-      InstanceFactoryContainerInfo.get(rootJavaInfo).addChild(factoryInfo);
-    }
-    //
-    return factoryInfo;
-  }
+	/**
+	 * Creates new instance of {@link InstanceFactoryInfo} of given class and adds it to the
+	 * {@link InstanceFactoryContainerInfo}.
+	 *
+	 * @return the new added {@link InstanceFactoryInfo}.
+	 */
+	public static InstanceFactoryInfo add(JavaInfo rootJavaInfo, Class<?> factoryClass)
+			throws Exception {
+		// create model
+		InstanceFactoryInfo factoryInfo;
+		{
+			AstEditor editor = rootJavaInfo.getEditor();
+			factoryInfo = createFactory(editor, factoryClass, new ConstructorCreationSupport());
+		}
+		// add model
+		{
+			JavaInfoUtils.add(
+					factoryInfo,
+					new FieldInitializerVariableSupport(factoryInfo),
+					PureFlatStatementGenerator.INSTANCE,
+					AssociationObjects.empty(),
+					rootJavaInfo,
+					null);
+			// move to InstanceFactoryContainerInfo
+			rootJavaInfo.removeChild(factoryInfo);
+			InstanceFactoryContainerInfo.get(rootJavaInfo).addChild(factoryInfo);
+		}
+		//
+		return factoryInfo;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/factory/InstanceFactoryRootProcessor.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/factory/InstanceFactoryRootProcessor.java
index 650a573f2..b6972bbb2 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/factory/InstanceFactoryRootProcessor.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/factory/InstanceFactoryRootProcessor.java
@@ -23,30 +23,30 @@
  * @coverage core.model.creation
  */
 public final class InstanceFactoryRootProcessor implements IRootProcessor {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final IRootProcessor INSTANCE = new InstanceFactoryRootProcessor();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final IRootProcessor INSTANCE = new InstanceFactoryRootProcessor();
 
-  private InstanceFactoryRootProcessor() {
-  }
+	private InstanceFactoryRootProcessor() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IRootProcessor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void process(final JavaInfo root, List<JavaInfo> components) throws Exception {
-    for (JavaInfo javaInfo : components) {
-      if (javaInfo instanceof InstanceFactoryInfo) {
-        InstanceFactoryInfo instanceFactoryInfo = (InstanceFactoryInfo) javaInfo;
-        InstanceFactoryContainerInfo containerInfo = InstanceFactoryContainerInfo.get(root);
-        containerInfo.addChild(instanceFactoryInfo);
-        instanceFactoryInfo.setAssociation(new EmptyAssociation());
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IRootProcessor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void process(final JavaInfo root, List<JavaInfo> components) throws Exception {
+		for (JavaInfo javaInfo : components) {
+			if (javaInfo instanceof InstanceFactoryInfo) {
+				InstanceFactoryInfo instanceFactoryInfo = (InstanceFactoryInfo) javaInfo;
+				InstanceFactoryContainerInfo containerInfo = InstanceFactoryContainerInfo.get(root);
+				containerInfo.addChild(instanceFactoryInfo);
+				instanceFactoryInfo.setAssociation(new EmptyAssociation());
+			}
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/factory/StaticFactoryCreationSupport.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/factory/StaticFactoryCreationSupport.java
index 33a40c6f6..300b8312d 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/factory/StaticFactoryCreationSupport.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/creation/factory/StaticFactoryCreationSupport.java
@@ -28,90 +28,90 @@
  * @coverage core.model.creation
  */
 public final class StaticFactoryCreationSupport extends AbstractExplicitFactoryCreationSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public StaticFactoryCreationSupport(FactoryMethodDescription description) {
-    super(description);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public StaticFactoryCreationSupport(FactoryMethodDescription description) {
+		super(description);
+	}
 
-  public StaticFactoryCreationSupport(FactoryMethodDescription description,
-      MethodInvocation invocation) {
-    super(description, invocation);
-  }
+	public StaticFactoryCreationSupport(FactoryMethodDescription description,
+			MethodInvocation invocation) {
+		super(description, invocation);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    return "static factory: "
-        + m_description.getDeclaringClass().getName()
-        + " "
-        + m_description.getSignature();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		return "static factory: "
+				+ m_description.getDeclaringClass().getName()
+				+ " "
+				+ m_description.getSignature();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public CreationSupport getLiveComponentCreation() {
-    FactoryMethodDescription factoryMethodDescription = getDescription();
-    return new StaticFactoryCreationSupport(factoryMethodDescription);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public CreationSupport getLiveComponentCreation() {
+		FactoryMethodDescription factoryMethodDescription = getDescription();
+		return new StaticFactoryCreationSupport(factoryMethodDescription);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Adding
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String add_getSource_invocationExpression(NodeTarget target) throws Exception {
-    if (isLocalFactoryMethod()) {
-      return "";
-    }
-    return m_description.getDeclaringClass().getName() + ".";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Adding
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String add_getSource_invocationExpression(NodeTarget target) throws Exception {
+		if (isLocalFactoryMethod()) {
+			return "";
+		}
+		return m_description.getDeclaringClass().getName() + ".";
+	}
 
-  private boolean isLocalFactoryMethod() {
-    String editorTypeName =
-        m_javaInfo.getEditor().getModelUnit().findPrimaryType().getFullyQualifiedName();
-    String factoryTypeName = m_description.getDeclaringClass().getName();
-    return editorTypeName.equals(factoryTypeName);
-  }
+	private boolean isLocalFactoryMethod() {
+		String editorTypeName =
+				m_javaInfo.getEditor().getModelUnit().findPrimaryType().getFullyQualifiedName();
+		String factoryTypeName = m_description.getDeclaringClass().getName();
+		return editorTypeName.equals(factoryTypeName);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Clipboard
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public IClipboardCreationSupport getClipboard() throws Exception {
-    final String factoryClassName = m_description.getDeclaringClass().getName();
-    final String methodSignature = m_description.getSignature();
-    final String argumentsSource = getClipboardArguments();
-    return new IClipboardCreationSupport() {
-      private static final long serialVersionUID = 0L;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Clipboard
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public IClipboardCreationSupport getClipboard() throws Exception {
+		final String factoryClassName = m_description.getDeclaringClass().getName();
+		final String methodSignature = m_description.getSignature();
+		final String argumentsSource = getClipboardArguments();
+		return new IClipboardCreationSupport() {
+			private static final long serialVersionUID = 0L;
 
-      @Override
-      public CreationSupport create(JavaInfo rootObject) throws Exception {
-        AstEditor editor = rootObject.getEditor();
-        Class<?> factoryClass =
-            EditorState.get(editor).getEditorLoader().loadClass(factoryClassName);
-        FactoryMethodDescription description =
-            FactoryDescriptionHelper.getDescription(editor, factoryClass, methodSignature, true);
-        //
-        StaticFactoryCreationSupport creationSupport =
-            new StaticFactoryCreationSupport(description);
-        creationSupport.m_addArguments = argumentsSource;
-        return creationSupport;
-      }
-    };
-  }
+			@Override
+			public CreationSupport create(JavaInfo rootObject) throws Exception {
+				AstEditor editor = rootObject.getEditor();
+				Class<?> factoryClass =
+						EditorState.get(editor).getEditorLoader().loadClass(factoryClassName);
+				FactoryMethodDescription description =
+						FactoryDescriptionHelper.getDescription(editor, factoryClass, methodSignature, true);
+				//
+				StaticFactoryCreationSupport creationSupport =
+						new StaticFactoryCreationSupport(description);
+				creationSupport.m_addArguments = argumentsSource;
+				return creationSupport;
+			}
+		};
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/AbstractDescription.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/AbstractDescription.java
index 86da68b43..f3e45ca85 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/AbstractDescription.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/AbstractDescription.java
@@ -25,91 +25,91 @@
  * @coverage core.model.description
  */
 public abstract class AbstractDescription implements IAdaptable {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Visiting
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * This description is used for passed {@link JavaInfo}.
-   */
-  public static final int STATE_USE = 0;
-  /**
-   * {@link JavaInfo} toolkit object was initialized and ready to be used. For example, In GWT-Ext
-   * we can get default values for properties only when we have Element, i.e. bound to parent.
-   */
-  public static final int STATE_OBJECT_READY = 1;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Visiting
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * This description is used for passed {@link JavaInfo}.
+	 */
+	public static final int STATE_USE = 0;
+	/**
+	 * {@link JavaInfo} toolkit object was initialized and ready to be used. For example, In GWT-Ext
+	 * we can get default values for properties only when we have Element, i.e. bound to parent.
+	 */
+	public static final int STATE_OBJECT_READY = 1;
 
-  /**
-   * Sends this {@link AbstractDescription} message that given {@link JavaInfo} is now in given
-   * state, so some action can be done. This message will be also transmitted to all children of
-   * this description object.
-   */
-  public void visit(JavaInfo javaInfo, int state) throws Exception {
-  }
+	/**
+	 * Sends this {@link AbstractDescription} message that given {@link JavaInfo} is now in given
+	 * state, so some action can be done. This message will be also transmitted to all children of
+	 * this description object.
+	 */
+	public void visit(JavaInfo javaInfo, int state) throws Exception {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IAdaptable
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public <T> T getAdapter(Class<T> adapter) {
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IAdaptable
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public <T> T getAdapter(Class<T> adapter) {
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tags
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Map<String, String> m_tags;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tags
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Map<String, String> m_tags;
 
-  /**
-   * @return the {@link Map} of "tag name" to "tag value". Can return empty {@link Map}, but not
-   *         <code>null</code>.
-   */
-  public final Map<String, String> getTags() {
-    if (m_tags == null) {
-      return Collections.emptyMap();
-    }
-    return m_tags;
-  }
+	/**
+	 * @return the {@link Map} of "tag name" to "tag value". Can return empty {@link Map}, but not
+	 *         <code>null</code>.
+	 */
+	public final Map<String, String> getTags() {
+		if (m_tags == null) {
+			return Collections.emptyMap();
+		}
+		return m_tags;
+	}
 
-  /**
-   * @return the value of given tag, can return <code>null</code>.
-   */
-  public final String getTag(String tag) {
-    return getTags().get(tag);
-  }
+	/**
+	 * @return the value of given tag, can return <code>null</code>.
+	 */
+	public final String getTag(String tag) {
+		return getTags().get(tag);
+	}
 
-  /**
-   * @return <code>true</code> if this {@link AbstractDescription} has given tag with value
-   *         <code>"true"</code>.
-   */
-  public final boolean hasTrueTag(String tag) {
-    return "true".equals(getTag(tag));
-  }
+	/**
+	 * @return <code>true</code> if this {@link AbstractDescription} has given tag with value
+	 *         <code>"true"</code>.
+	 */
+	public final boolean hasTrueTag(String tag) {
+		return "true".equals(getTag(tag));
+	}
 
-  /**
-   * Sets the value of given tag.
-   */
-  public final void putTag(String tag, String value) {
-    if (m_tags == null) {
-      m_tags = Maps.newTreeMap();
-    }
-    m_tags.put(tag, value);
-  }
+	/**
+	 * Sets the value of given tag.
+	 */
+	public final void putTag(String tag, String value) {
+		if (m_tags == null) {
+			m_tags = Maps.newTreeMap();
+		}
+		m_tags.put(tag, value);
+	}
 
-  /**
-   * Adds tags from given {@link AbstractDescription}.
-   */
-  public final void putTags(Map<String, String> tags) {
-    if (tags != null && !tags.isEmpty()) {
-      if (m_tags == null) {
-        m_tags = Maps.newTreeMap();
-      }
-      m_tags.putAll(tags);
-    }
-  }
+	/**
+	 * Adds tags from given {@link AbstractDescription}.
+	 */
+	public final void putTags(Map<String, String> tags) {
+		if (tags != null && !tags.isEmpty()) {
+			if (m_tags == null) {
+				m_tags = Maps.newTreeMap();
+			}
+			m_tags.putAll(tags);
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/AbstractInvocationDescription.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/AbstractInvocationDescription.java
index aedebeefb..380ad1767 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/AbstractInvocationDescription.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/AbstractInvocationDescription.java
@@ -27,222 +27,222 @@
  * @coverage core.model.description
  */
 public abstract class AbstractInvocationDescription extends AbstractDescription {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractInvocationDescription(Class<?> declaringClass) {
-    m_declaringClass = declaringClass;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final String toString() {
-    return m_name + "(" + StringUtils.join(m_parameters.iterator(), ",") + ")";
-  }
-
-  @Override
-  public final boolean equals(Object obj) {
-    if (obj == this) {
-      return true;
-    }
-    if (obj instanceof AbstractInvocationDescription) {
-      AbstractInvocationDescription description = (AbstractInvocationDescription) obj;
-      return m_signature.equals(description.m_signature);
-    }
-    return false;
-  }
-
-  @Override
-  public final int hashCode() {
-    return m_signature.hashCode();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Join
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Joins this {@link AbstractInvocationDescription} with given one.
-   */
-  public void join(AbstractInvocationDescription description) {
-    // parameters
-    List<ParameterDescription> newParameters = description.getParameters();
-    for (int index = 0; index < m_parameters.size(); index++) {
-      ParameterDescription thisParameter = m_parameters.get(index);
-      ParameterDescription newParameter = newParameters.get(index);
-      thisParameter.join(newParameter);
-    }
-    // tags
-    putTags(description.getTags());
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Declaring class
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final Class<?> m_declaringClass;
-
-  public final Class<?> getDeclaringClass() {
-    return m_declaringClass;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Name
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private String m_name;
-
-  /**
-   * @return the name of this method.
-   */
-  public final String getName() {
-    return m_name;
-  }
-
-  /**
-   * Sets the name of this method.
-   */
-  public final void setName(String name) {
-    m_name = name;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parameters
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final List<ParameterDescription> m_parameters = Lists.newArrayList();
-
-  /**
-   * @return the list of {@link ParameterDescription}'s of this
-   *         {@link AbstractInvocationDescription}.
-   */
-  public List<ParameterDescription> getParameters() {
-    return m_parameters;
-  }
-
-  /**
-   * @return the {@link ParameterDescription} of this {@link AbstractInvocationDescription}.
-   */
-  public ParameterDescription getParameter(int index) {
-    return m_parameters.get(index);
-  }
-
-  /**
-   * Adds new {@link ParameterDescription}.
-   */
-  public final void addParameter(ParameterDescription parameter) {
-    m_parameters.add(parameter);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parameter utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link List} of default source for each {@link ParameterDescription}.
-   */
-  public List<String> getDefaultArguments() {
-    List<String> defaultArguments = Lists.newArrayList();
-    for (ParameterDescription parameter : getParameters()) {
-      String defaultArgument = parameter.getDefaultSource();
-      defaultArguments.add(defaultArgument);
-    }
-    return defaultArguments;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Signature
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private String m_signature;
-
-  /**
-   * @return the signature of this method. This signature should be same as
-   *         {@link AstNodeUtils#getMethodSignature(org.eclipse.jdt.core.dom.MethodDeclaration)} .
-   */
-  public final String getSignature() {
-    return m_signature;
-  }
-
-  /**
-   * This method is invoked as last step, after all parameters added and computes final signature of
-   * this method.
-   */
-  public final void postProcess() {
-    // post process parameters
-    for (int index = 0; index < m_parameters.size(); index++) {
-      ParameterDescription parameter = m_parameters.get(index);
-      parameter.setIndex(index);
-    }
-    // compute signature
-    {
-      StringBuffer buffer = new StringBuffer();
-      // append name
-      buffer.append(m_name);
-      buffer.append("(");
-      // append parameters
-      for (int i = 0; i < m_parameters.size(); i++) {
-        ParameterDescription parameter = m_parameters.get(i);
-        if (i != 0) {
-          buffer.append(',');
-        }
-        buffer.append(ReflectionUtils.getFullyQualifiedName(parameter.getType(), false));
-      }
-      //
-      buffer.append(")");
-      // set final signature
-      m_signature = buffer.toString();
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Initialization
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private boolean m_initialized;
-
-  /**
-   * @return <code>true</code>, if this {@link AbstractInvocationDescription} is fully initialized.
-   */
-  public boolean isInitialized() {
-    return m_initialized;
-  }
-
-  /**
-   * Specifies, if this {@link AbstractInvocationDescription} is fully initialized.
-   * <p>
-   * For {@link AbstractInvocationDescription} we need to know names for
-   * {@link ParameterDescription}'s because we show them to user in property table. But getting them
-   * requires much time, so we should not load them always when
-   * {@link AbstractInvocationDescription} is loaded. So, we delay full initialization.
-   */
-  public void setInitialized(boolean initialized) {
-    m_initialized = initialized;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Visiting
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final void visit(JavaInfo javaInfo, int state) throws Exception {
-    super.visit(javaInfo, state);
-    for (ParameterDescription parameter : m_parameters) {
-      parameter.visit(javaInfo, state);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractInvocationDescription(Class<?> declaringClass) {
+		m_declaringClass = declaringClass;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final String toString() {
+		return m_name + "(" + StringUtils.join(m_parameters.iterator(), ",") + ")";
+	}
+
+	@Override
+	public final boolean equals(Object obj) {
+		if (obj == this) {
+			return true;
+		}
+		if (obj instanceof AbstractInvocationDescription) {
+			AbstractInvocationDescription description = (AbstractInvocationDescription) obj;
+			return m_signature.equals(description.m_signature);
+		}
+		return false;
+	}
+
+	@Override
+	public final int hashCode() {
+		return m_signature.hashCode();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Join
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Joins this {@link AbstractInvocationDescription} with given one.
+	 */
+	public void join(AbstractInvocationDescription description) {
+		// parameters
+		List<ParameterDescription> newParameters = description.getParameters();
+		for (int index = 0; index < m_parameters.size(); index++) {
+			ParameterDescription thisParameter = m_parameters.get(index);
+			ParameterDescription newParameter = newParameters.get(index);
+			thisParameter.join(newParameter);
+		}
+		// tags
+		putTags(description.getTags());
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Declaring class
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final Class<?> m_declaringClass;
+
+	public final Class<?> getDeclaringClass() {
+		return m_declaringClass;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Name
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private String m_name;
+
+	/**
+	 * @return the name of this method.
+	 */
+	public final String getName() {
+		return m_name;
+	}
+
+	/**
+	 * Sets the name of this method.
+	 */
+	public final void setName(String name) {
+		m_name = name;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parameters
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final List<ParameterDescription> m_parameters = Lists.newArrayList();
+
+	/**
+	 * @return the list of {@link ParameterDescription}'s of this
+	 *         {@link AbstractInvocationDescription}.
+	 */
+	public List<ParameterDescription> getParameters() {
+		return m_parameters;
+	}
+
+	/**
+	 * @return the {@link ParameterDescription} of this {@link AbstractInvocationDescription}.
+	 */
+	public ParameterDescription getParameter(int index) {
+		return m_parameters.get(index);
+	}
+
+	/**
+	 * Adds new {@link ParameterDescription}.
+	 */
+	public final void addParameter(ParameterDescription parameter) {
+		m_parameters.add(parameter);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parameter utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link List} of default source for each {@link ParameterDescription}.
+	 */
+	public List<String> getDefaultArguments() {
+		List<String> defaultArguments = Lists.newArrayList();
+		for (ParameterDescription parameter : getParameters()) {
+			String defaultArgument = parameter.getDefaultSource();
+			defaultArguments.add(defaultArgument);
+		}
+		return defaultArguments;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Signature
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private String m_signature;
+
+	/**
+	 * @return the signature of this method. This signature should be same as
+	 *         {@link AstNodeUtils#getMethodSignature(org.eclipse.jdt.core.dom.MethodDeclaration)} .
+	 */
+	public final String getSignature() {
+		return m_signature;
+	}
+
+	/**
+	 * This method is invoked as last step, after all parameters added and computes final signature of
+	 * this method.
+	 */
+	public final void postProcess() {
+		// post process parameters
+		for (int index = 0; index < m_parameters.size(); index++) {
+			ParameterDescription parameter = m_parameters.get(index);
+			parameter.setIndex(index);
+		}
+		// compute signature
+		{
+			StringBuffer buffer = new StringBuffer();
+			// append name
+			buffer.append(m_name);
+			buffer.append("(");
+			// append parameters
+			for (int i = 0; i < m_parameters.size(); i++) {
+				ParameterDescription parameter = m_parameters.get(i);
+				if (i != 0) {
+					buffer.append(',');
+				}
+				buffer.append(ReflectionUtils.getFullyQualifiedName(parameter.getType(), false));
+			}
+			//
+			buffer.append(")");
+			// set final signature
+			m_signature = buffer.toString();
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Initialization
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private boolean m_initialized;
+
+	/**
+	 * @return <code>true</code>, if this {@link AbstractInvocationDescription} is fully initialized.
+	 */
+	public boolean isInitialized() {
+		return m_initialized;
+	}
+
+	/**
+	 * Specifies, if this {@link AbstractInvocationDescription} is fully initialized.
+	 * <p>
+	 * For {@link AbstractInvocationDescription} we need to know names for
+	 * {@link ParameterDescription}'s because we show them to user in property table. But getting them
+	 * requires much time, so we should not load them always when
+	 * {@link AbstractInvocationDescription} is loaded. So, we delay full initialization.
+	 */
+	public void setInitialized(boolean initialized) {
+		m_initialized = initialized;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Visiting
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final void visit(JavaInfo javaInfo, int state) throws Exception {
+		super.visit(javaInfo, state);
+		for (ParameterDescription parameter : m_parameters) {
+			parameter.visit(javaInfo, state);
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/ComponentDescription.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/ComponentDescription.java
index d327b1e26..6a8c64028 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/ComponentDescription.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/ComponentDescription.java
@@ -52,745 +52,745 @@
  * @coverage core.model.description
  */
 public class ComponentDescription extends AbstractDescription implements IComponentDescription {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ComponentDescription(ComponentDescriptionKey key) {
-    m_key = key;
-    if (m_key != null) {
-      m_componentClass = m_key.getComponentClass();
-      m_description = m_componentClass.getName();
-    } else {
-      m_componentClass = null;
-    }
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Key
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final ComponentDescriptionKey m_key;
-
-  /**
-   * @return the {@link ComponentDescriptionKey} of this {@link ComponentDescription}.
-   */
-  public ComponentDescriptionKey getKey() {
-    return m_key;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    String methods_toString = ", m=" + m_methods;
-    String parameters_toString = ", p=" + m_parameters;
-    return m_modelClass.getName()
-        + "("
-        + m_componentClass.getName()
-        + methods_toString
-        + parameters_toString
-        + ")";
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Cached
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private boolean m_cached;
-
-  /**
-   * @return <code>true</code> if this {@link ComponentDescription} is statically cached.
-   */
-  public boolean isCached() {
-    return m_cached;
-  }
-
-  /**
-   * Marks this {@link ComponentDescription} as statically cached.
-   */
-  public void setCached(boolean cached) {
-    m_cached = cached;
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Caching presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private boolean m_presentationCached;
-
-  /**
-   * @return <code>true</code> if {@link ComponentPresentation} for this
-   *         {@link ComponentDescription} can be cached.
-   */
-  public boolean isPresentationCached() {
-    return m_presentationCached;
-  }
-
-  /**
-   * Specifies if {@link ComponentPresentation} for this {@link ComponentDescription} can be cached.
-   */
-  public void setPresentationCached(boolean presentationCached) {
-    m_presentationCached = presentationCached;
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI toolkit
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private ToolkitDescriptionJava m_toolkit;
-
-  @Override
-  public ToolkitDescriptionJava getToolkit() {
-    return m_toolkit;
-  }
-
-  /**
-   * Sets the {@link ToolkitDescription} for this component.
-   */
-  public void setToolkit(ToolkitDescription toolkit) {
-    m_toolkit = (ToolkitDescriptionJava) toolkit;
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Component class
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final Class<?> m_componentClass;
-
-  @Override
-  public Class<?> getComponentClass() {
-    return m_componentClass;
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Model class
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Class<?> m_modelClass;
-
-  @Override
-  public Class<?> getModelClass() {
-    return m_modelClass;
-  }
-
-  /**
-   * Sets the {@link Class} of {@link JavaInfo} successor class that should be used for this
-   * component.
-   */
-  public void setModelClass(Class<?> modelClass) {
-    m_modelClass = modelClass;
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // BeanInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private BeanInfo m_beanInfo;
-
-  /**
-   * @return the {@link BeanInfo} of this component.
-   */
-  public BeanInfo getBeanInfo() {
-    return m_beanInfo;
-  }
-
-  /**
-   * Sets the {@link BeanInfo} of this component.
-   */
-  public void setBeanInfo(BeanInfo beanInfo) {
-    Assert.isNull(m_beanInfo);
-    m_beanInfo = beanInfo;
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // BeanDescriptor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private BeanDescriptor m_beanDescriptor;
-
-  /**
-   * @return the consolidated {@link BeanDescriptor} of this component.
-   */
-  public BeanDescriptor getBeanDescriptor() {
-    return m_beanDescriptor;
-  }
-
-  /**
-   * Sets the consolidated {@link BeanDescriptor} of this component.
-   */
-  public void setBeanDescriptor(BeanDescriptor beanDescriptor) {
-    m_beanDescriptor = beanDescriptor;
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // PropertyDescriptors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private List<PropertyDescriptor> m_propertyDescriptors;
-
-  /**
-   * @return all {@link PropertyDescriptor}'s, including protected.
-   */
-  public List<PropertyDescriptor> getPropertyDescriptors() {
-    return m_propertyDescriptors;
-  }
-
-  /**
-   * Sets all {@link PropertyDescriptor}'s, including protected.
-   */
-  public void setPropertyDescriptors(List<PropertyDescriptor> propertyDescriptors) {
-    m_propertyDescriptors = propertyDescriptors;
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final List<ConstructorDescription> m_constructors = Lists.newArrayList();
-
-  /**
-   * @return the list of {@link ConstructorDescription}'s of this component.
-   */
-  public List<ConstructorDescription> getConstructors() {
-    return m_constructors;
-  }
-
-  /**
-   * Adds new {@link ConstructorDescription}.
-   */
-  public void addConstructor(ConstructorDescription constructor) {
-    int index = m_constructors.indexOf(constructor);
-    if (index != -1) {
-      ConstructorDescription existingConstructor = m_constructors.get(index);
-      existingConstructor.join(constructor);
-    } else {
-      {
-        Constructor<?> reflectionConstructor =
-            ReflectionUtils.getConstructorBySignature(m_componentClass, constructor.getSignature());
-        Assert.isNotNull2(
-            reflectionConstructor,
-            "{0} has no constructor with signature {1}",
-            m_componentClass,
-            constructor.getSignature());
-      }
-      m_constructors.add(constructor);
-    }
-  }
-
-  /**
-   * Note: supported generics.
-   *
-   * @return the {@link ConstructorDescription} for given {@link IMethodBinding}.
-   */
-  public ConstructorDescription getConstructor(IMethodBinding methodBinding) {
-    if (!methodBinding.isConstructor()) {
-      return null;
-    }
-    ConstructorDescription constructorDescription;
-    {
-      String signature = AstNodeUtils.getMethodSignature(methodBinding);
-      constructorDescription = getConstructor(signature);
-    }
-    if (constructorDescription == null) {
-      String signature = AstNodeUtils.getMethodDeclarationSignature(methodBinding);
-      constructorDescription = getConstructor(signature);
-    }
-    return constructorDescription;
-  }
-
-  /**
-   * Note: not supported generics.
-   *
-   * @return the {@link ConstructorDescription} for given signature.
-   */
-  @Deprecated
-  public ConstructorDescription getConstructor(String signature) {
-    // try to find method with same signature
-    for (ConstructorDescription constructor : m_constructors) {
-      if (constructor.getSignature().equals(signature)) {
-        return constructor;
-      }
-    }
-    // not found
-    return null;
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Methods
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final List<MethodDescription> m_methods = Lists.newArrayList();
-  private final Map<String, MethodDescription> m_methodsMap = Maps.newTreeMap();
-
-  /**
-   * @return the list of {@link MethodDescription}'s of this component.
-   */
-  public List<MethodDescription> getMethods() {
-    return m_methods;
-  }
-
-  /**
-   * Adds new {@link MethodDescription} based on given reflection {@link Method}.
-   */
-  public MethodDescription addMethod(Method method) throws Exception {
-    String methodSignature = ReflectionUtils.getMethodSignature(method);
-    MethodDescription methodDescription = getMethod(methodSignature);
-    if (methodDescription == null) {
-      methodDescription = new MethodDescription(method);
-      addMethod(methodDescription);
-    }
-    return methodDescription;
-  }
-
-  /**
-   * Adds new {@link MethodDescription}.
-   */
-  public void addMethod(MethodDescription method) {
-    int index = m_methods.indexOf(method);
-    if (index != -1) {
-      m_methods.get(index).join(method);
-    } else {
-      m_methods.add(method);
-    }
-    m_methodsMap.clear();
-  }
-
-  /**
-   * @return the {@link MethodDescription} from given list corresponding to given
-   *         {@link IMethodBinding}.
-   */
-  public MethodDescription getMethod(IMethodBinding methodBinding) {
-    String signature = AstNodeUtils.getMethodSignature(methodBinding);
-    return getMethod(signature);
-  }
-
-  /**
-   * @return the {@link MethodDescription} for method with given signature.
-   */
-  public MethodDescription getMethod(String signature) {
-    // fill cache
-    if (m_methodsMap.isEmpty()) {
-      for (MethodDescription method : m_methods) {
-        String methodSignature = method.getSignature();
-        m_methodsMap.put(methodSignature, method);
-      }
-    }
-    // use cache
-    return m_methodsMap.get(signature);
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Method invocation order
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private MethodOrder m_defaultMethodOrder = new MethodOrderAfterCreation();
-
-  /**
-   * @return the default {@link MethodOrder} for all methods of this component.
-   */
-  public MethodOrder getDefaultMethodOrder() {
-    return m_defaultMethodOrder;
-  }
-
-  /**
-   * Sets the default {@link MethodOrder} for all methods of this component.
-   */
-  public void setDefaultMethodOrder(MethodOrder defaultMethodOrder) {
-    m_defaultMethodOrder = defaultMethodOrder;
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Order
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private ComponentOrder m_order = ComponentOrderDefault.INSTANCE;
-
-  /**
-   * @return current {@link ComponentOrder}. Can not return <code>null</code>.
-   */
-  public ComponentOrder getOrder() {
-    return m_order;
-  }
-
-  /**
-   * Sets new {@link ComponentOrder} using specification.
-   */
-  public void setOrder(String specification) {
-    m_order = ComponentOrder.parse(specification);
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Generic properties
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final List<GenericPropertyDescription> m_properties = Lists.newArrayList();
-  private final Map<String, GenericPropertyDescription> m_idToProperty = Maps.newHashMap();
-
-  /**
-   * @return the {@link GenericPropertyDescription}'s of this component.
-   */
-  public List<GenericPropertyDescription> getProperties() {
-    return Collections.unmodifiableList(m_properties);
-  }
-
-  /**
-   * @return the {@link GenericPropertyDescription} with given id, can not return <code>null</code>.
-   *
-   * @throws RuntimeException
-   *           if no {@link GenericPropertyDescription} with such id is registered.
-   */
-  public GenericPropertyDescription getProperty(String id) {
-    GenericPropertyDescription property = m_idToProperty.get(id);
-    if (property == null && !EnvironmentUtils.isTestingTime()) {
-      // fix for descriptions of non-existing properties
-      property = new GenericPropertyDescription(id, "NO_SUCH_PROPERTY");
-    }
-    Assert.isNotNull(property, "Can not find property with id '" + id + "'.");
-    return property;
-  }
-
-  /**
-   * Adds (and registers) new {@link GenericPropertyDescription}.
-   */
-  public void addProperty(GenericPropertyDescription property) {
-    String id = property.getId();
-    GenericPropertyDescription existingProperty = m_idToProperty.get(id);
-    if (existingProperty == null) {
-      registerProperty(property);
-      m_properties.add(property);
-    } else {
-      // TODO add separate test
-      existingProperty.join(property);
-    }
-  }
-
-  /**
-   * Registers {@link GenericPropertyDescription} so that it can be accessed using
-   * {@link #getProperty(String)}, but don't added them to the list of top level of component
-   * properties.
-   */
-  public void registerProperty(GenericPropertyDescription property) {
-    String id = property.getId();
-    m_idToProperty.put(id, property);
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Configurable properties
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final Map<String, ConfigurablePropertyDescription> m_idToConfigurableProperty =
-      Maps.newHashMap();
-
-  /**
-   * @return the {@link GenericPropertyDescription}'s of this component.
-   */
-  public Collection<ConfigurablePropertyDescription> getConfigurableProperties() {
-    return m_idToConfigurableProperty.values();
-  }
-
-  /**
-   * Adds new {@link ConfigurablePropertyDescription}.
-   */
-  public void addConfigurableProperty(ConfigurablePropertyDescription property) {
-    m_idToConfigurableProperty.put(property.getId(), property);
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parameters
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final Map<String, String> m_parameters = Maps.newTreeMap();
-
-  /**
-   * Adds new parameter.
-   */
-  public void addParameter(String name, String value) {
-    m_parameters.put(name, value);
-  }
-
-  /**
-   * @return the read only {@link Map} of parameters.
-   */
-  public Map<String, String> getParameters() {
-    return Collections.unmodifiableMap(m_parameters);
-  }
-
-  /**
-   * @return the value of parameter with given name.
-   */
-  public String getParameter(String name) {
-    return m_parameters.get(name);
-  }
-
-  /**
-   * @return <code>true</code> description has parameter with value "true".
-   */
-  public boolean hasTrueParameter(String name) {
-    String parameter = getParameter(name);
-    return "true".equals(parameter);
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Creation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private CreationDescription m_creationDefault;
-  private final Map<String, CreationDescription> m_creations = Maps.newHashMap();
-
-  /**
-   * @return all {@link CreationDescription}'s.
-   */
-  public List<CreationDescription> getCreations() {
-    List<CreationDescription> creations = Lists.newArrayList(m_creations.values());
-    creations.add(m_creationDefault);
-    return creations;
-  }
-
-  /**
-   * @return the {@link CreationDescription} for this component with given <code>creationId</code>.
-   */
-  public CreationDescription getCreation(String creationId) {
-    CreationDescription creation = m_creations.get(creationId);
-    if (creation != null) {
-      return creation;
-    }
-    return m_creationDefault;
-  }
-
-  /**
-   * Sets default, inheritable {@link CreationDescription}.
-   */
-  public void setCreationDefault(CreationDescription creationDefault) {
-    m_creationDefault = creationDefault;
-  }
-
-  /**
-   * Adds the {@link CreationDescription} for component with exactly same class.
-   */
-  public void addCreation(CreationDescription creation) {
-    m_creations.put(creation.getId(), creation);
-  }
-
-  /**
-   * Removes all existing {@link CreationDescription}'s.
-   */
-  public void clearCreations() {
-    m_creations.clear();
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exposed children
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final List<ExposingRule> m_exposingRules = Lists.newArrayList();
-
-  /**
-   * @return the {@link List} of {@link ExposingRule}'s.
-   */
-  public List<ExposingRule> getExposingRules() {
-    return m_exposingRules;
-  }
-
-  /**
-   * Adds new {@link ExposingRule} into beginning of rules {@link List}, so that it will be checked
-   * first. Such order gives ability to fine-tune exposing rules in sub-classes.
-   *
-   * @param rule
-   *          the {@link ExposingRule} to add.
-   */
-  public void addExposingRule(ExposingRule rule) {
-    m_exposingRules.add(0, rule);
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Morphing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final List<MorphingTargetDescription> m_morphingTargets = Lists.newArrayList();
-
-  /**
-   * @return the {@link MorphingTargetDescription}'s registered for this component.
-   */
-  public List<MorphingTargetDescription> getMorphingTargets() {
-    return m_morphingTargets;
-  }
-
-  /**
-   * Registers new {@link MorphingTargetDescription}.
-   */
-  public void addMorphingTarget(MorphingTargetDescription morphingTarget) {
-    m_morphingTargets.add(morphingTarget);
-  }
-
-  /**
-   * Clear registered {@link MorphingTargetDescription}'s list.
-   */
-  public void clearMorphingTargets() {
-    m_morphingTargets.clear();
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Description
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private String m_description;
-
-  /**
-   * @return the description text for this component.
-   */
-  public String getDescription() {
-    return m_description;
-  }
-
-  /**
-   * Sets the description text for this component.
-   */
-  public void setDescription(String description) {
-    if (description != null) {
-      m_description = StringUtilities.normalizeWhitespaces(description);
-      m_description = StringUtils.replace(m_description, "\\n", "\n");
-    } else {
-      m_description = m_componentClass.getName();
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Post processing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Post process {@link GenericPropertyDescription}'s.
-   */
-  public void joinProperties() throws Exception {
-    // update constructors
-    for (ConstructorDescription constructor : getConstructors()) {
-      for (ParameterDescription parameter : constructor.getParameters()) {
-        // try to set editor from mapped property
-        {
-          String propertyId = parameter.getProperty();
-          if (propertyId != null) {
-            GenericPropertyDescription property = getProperty(propertyId);
-            PropertyEditor editor = property.getEditor();
-            if (editor != null) {
-              parameter.setEditor(editor);
-            }
-          }
-        }
-      }
-    }
-    // configure "Object" properties
-    useObjectPropertyEditor();
-    // remove properties without editors
-    for (Iterator<GenericPropertyDescription> I = m_properties.iterator(); I.hasNext();) {
-      GenericPropertyDescription property = I.next();
-      if (property.getEditor() == null) {
-        I.remove();
-        m_idToProperty.remove(property.getId());
-      }
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object properties
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void useObjectPropertyEditor() {
-    for (GenericPropertyDescription property : m_properties) {
-      // may be has some special editor
-      if (property.getEditor() != null) {
-        continue;
-      }
-      // use Object editor
-      if (shouldUseObjectPropertyEditor(property)) {
-        property.setEditor(ObjectPropertyEditor.INSTANCE);
-        if (property.getCategory() == PropertyCategory.NORMAL) {
-          property.setCategory(PropertyCategory.ADVANCED);
-        }
-      }
-    }
-  }
-
-  private static boolean shouldUseObjectPropertyEditor(GenericPropertyDescription property) {
-    if (property.hasTrueTag("useObjectEditor")) {
-      return true;
-    }
-    Method setter = property.getSetter();
-    return setter != null && !isStandardMethod(setter);
-  }
-
-  /**
-   * @return <code>true</code> if given {@link Method} is declared in standard toolkit component.
-   */
-  private static boolean isStandardMethod(Method setter) {
-    String declaringClassName = setter.getDeclaringClass().getName();
-    List<IConfigurationElement> elements =
-        ExternalFactoriesHelper.getElements(
-            "org.eclipse.wb.core.standardToolkitPackages",
-            "package");
-    for (IConfigurationElement element : elements) {
-      String prefix = ExternalFactoriesHelper.getRequiredAttribute(element, "prefix");
-      if (declaringClassName.startsWith(prefix)) {
-        return true;
-      }
-    }
-    return false;
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Current class
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Class<?> m_currentClass;
-
-  /**
-   * @return the currently parsing class.
-   */
-  public Class<?> getCurrentClass() {
-    return m_currentClass;
-  }
-
-  /**
-   * Sets the currently parsing class.
-   */
-  public void setCurrentClass(Class<?> currentClass) {
-    m_currentClass = currentClass;
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Icon
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Image m_icon;
-
-  @Override
-  public Image getIcon() {
-    return m_icon;
-  }
-
-  /**
-   * Sets the icon for this component.
-   */
-  public void setIcon(Image icon) {
-    m_icon = icon;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Visiting
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void visit(JavaInfo javaInfo, int state) throws Exception {
-    super.visit(javaInfo, state);
-    for (GenericPropertyDescription property : m_idToProperty.values()) {
-      property.visit(javaInfo, state);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ComponentDescription(ComponentDescriptionKey key) {
+		m_key = key;
+		if (m_key != null) {
+			m_componentClass = m_key.getComponentClass();
+			m_description = m_componentClass.getName();
+		} else {
+			m_componentClass = null;
+		}
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Key
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final ComponentDescriptionKey m_key;
+
+	/**
+	 * @return the {@link ComponentDescriptionKey} of this {@link ComponentDescription}.
+	 */
+	public ComponentDescriptionKey getKey() {
+		return m_key;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		String methods_toString = ", m=" + m_methods;
+		String parameters_toString = ", p=" + m_parameters;
+		return m_modelClass.getName()
+				+ "("
+				+ m_componentClass.getName()
+				+ methods_toString
+				+ parameters_toString
+				+ ")";
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Cached
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private boolean m_cached;
+
+	/**
+	 * @return <code>true</code> if this {@link ComponentDescription} is statically cached.
+	 */
+	public boolean isCached() {
+		return m_cached;
+	}
+
+	/**
+	 * Marks this {@link ComponentDescription} as statically cached.
+	 */
+	public void setCached(boolean cached) {
+		m_cached = cached;
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Caching presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private boolean m_presentationCached;
+
+	/**
+	 * @return <code>true</code> if {@link ComponentPresentation} for this
+	 *         {@link ComponentDescription} can be cached.
+	 */
+	public boolean isPresentationCached() {
+		return m_presentationCached;
+	}
+
+	/**
+	 * Specifies if {@link ComponentPresentation} for this {@link ComponentDescription} can be cached.
+	 */
+	public void setPresentationCached(boolean presentationCached) {
+		m_presentationCached = presentationCached;
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI toolkit
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private ToolkitDescriptionJava m_toolkit;
+
+	@Override
+	public ToolkitDescriptionJava getToolkit() {
+		return m_toolkit;
+	}
+
+	/**
+	 * Sets the {@link ToolkitDescription} for this component.
+	 */
+	public void setToolkit(ToolkitDescription toolkit) {
+		m_toolkit = (ToolkitDescriptionJava) toolkit;
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Component class
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final Class<?> m_componentClass;
+
+	@Override
+	public Class<?> getComponentClass() {
+		return m_componentClass;
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Model class
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Class<?> m_modelClass;
+
+	@Override
+	public Class<?> getModelClass() {
+		return m_modelClass;
+	}
+
+	/**
+	 * Sets the {@link Class} of {@link JavaInfo} successor class that should be used for this
+	 * component.
+	 */
+	public void setModelClass(Class<?> modelClass) {
+		m_modelClass = modelClass;
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// BeanInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private BeanInfo m_beanInfo;
+
+	/**
+	 * @return the {@link BeanInfo} of this component.
+	 */
+	public BeanInfo getBeanInfo() {
+		return m_beanInfo;
+	}
+
+	/**
+	 * Sets the {@link BeanInfo} of this component.
+	 */
+	public void setBeanInfo(BeanInfo beanInfo) {
+		Assert.isNull(m_beanInfo);
+		m_beanInfo = beanInfo;
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// BeanDescriptor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private BeanDescriptor m_beanDescriptor;
+
+	/**
+	 * @return the consolidated {@link BeanDescriptor} of this component.
+	 */
+	public BeanDescriptor getBeanDescriptor() {
+		return m_beanDescriptor;
+	}
+
+	/**
+	 * Sets the consolidated {@link BeanDescriptor} of this component.
+	 */
+	public void setBeanDescriptor(BeanDescriptor beanDescriptor) {
+		m_beanDescriptor = beanDescriptor;
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// PropertyDescriptors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private List<PropertyDescriptor> m_propertyDescriptors;
+
+	/**
+	 * @return all {@link PropertyDescriptor}'s, including protected.
+	 */
+	public List<PropertyDescriptor> getPropertyDescriptors() {
+		return m_propertyDescriptors;
+	}
+
+	/**
+	 * Sets all {@link PropertyDescriptor}'s, including protected.
+	 */
+	public void setPropertyDescriptors(List<PropertyDescriptor> propertyDescriptors) {
+		m_propertyDescriptors = propertyDescriptors;
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final List<ConstructorDescription> m_constructors = Lists.newArrayList();
+
+	/**
+	 * @return the list of {@link ConstructorDescription}'s of this component.
+	 */
+	public List<ConstructorDescription> getConstructors() {
+		return m_constructors;
+	}
+
+	/**
+	 * Adds new {@link ConstructorDescription}.
+	 */
+	public void addConstructor(ConstructorDescription constructor) {
+		int index = m_constructors.indexOf(constructor);
+		if (index != -1) {
+			ConstructorDescription existingConstructor = m_constructors.get(index);
+			existingConstructor.join(constructor);
+		} else {
+			{
+				Constructor<?> reflectionConstructor =
+						ReflectionUtils.getConstructorBySignature(m_componentClass, constructor.getSignature());
+				Assert.isNotNull2(
+						reflectionConstructor,
+						"{0} has no constructor with signature {1}",
+						m_componentClass,
+						constructor.getSignature());
+			}
+			m_constructors.add(constructor);
+		}
+	}
+
+	/**
+	 * Note: supported generics.
+	 *
+	 * @return the {@link ConstructorDescription} for given {@link IMethodBinding}.
+	 */
+	public ConstructorDescription getConstructor(IMethodBinding methodBinding) {
+		if (!methodBinding.isConstructor()) {
+			return null;
+		}
+		ConstructorDescription constructorDescription;
+		{
+			String signature = AstNodeUtils.getMethodSignature(methodBinding);
+			constructorDescription = getConstructor(signature);
+		}
+		if (constructorDescription == null) {
+			String signature = AstNodeUtils.getMethodDeclarationSignature(methodBinding);
+			constructorDescription = getConstructor(signature);
+		}
+		return constructorDescription;
+	}
+
+	/**
+	 * Note: not supported generics.
+	 *
+	 * @return the {@link ConstructorDescription} for given signature.
+	 */
+	@Deprecated
+	public ConstructorDescription getConstructor(String signature) {
+		// try to find method with same signature
+		for (ConstructorDescription constructor : m_constructors) {
+			if (constructor.getSignature().equals(signature)) {
+				return constructor;
+			}
+		}
+		// not found
+		return null;
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Methods
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final List<MethodDescription> m_methods = Lists.newArrayList();
+	private final Map<String, MethodDescription> m_methodsMap = Maps.newTreeMap();
+
+	/**
+	 * @return the list of {@link MethodDescription}'s of this component.
+	 */
+	public List<MethodDescription> getMethods() {
+		return m_methods;
+	}
+
+	/**
+	 * Adds new {@link MethodDescription} based on given reflection {@link Method}.
+	 */
+	public MethodDescription addMethod(Method method) throws Exception {
+		String methodSignature = ReflectionUtils.getMethodSignature(method);
+		MethodDescription methodDescription = getMethod(methodSignature);
+		if (methodDescription == null) {
+			methodDescription = new MethodDescription(method);
+			addMethod(methodDescription);
+		}
+		return methodDescription;
+	}
+
+	/**
+	 * Adds new {@link MethodDescription}.
+	 */
+	public void addMethod(MethodDescription method) {
+		int index = m_methods.indexOf(method);
+		if (index != -1) {
+			m_methods.get(index).join(method);
+		} else {
+			m_methods.add(method);
+		}
+		m_methodsMap.clear();
+	}
+
+	/**
+	 * @return the {@link MethodDescription} from given list corresponding to given
+	 *         {@link IMethodBinding}.
+	 */
+	public MethodDescription getMethod(IMethodBinding methodBinding) {
+		String signature = AstNodeUtils.getMethodSignature(methodBinding);
+		return getMethod(signature);
+	}
+
+	/**
+	 * @return the {@link MethodDescription} for method with given signature.
+	 */
+	public MethodDescription getMethod(String signature) {
+		// fill cache
+		if (m_methodsMap.isEmpty()) {
+			for (MethodDescription method : m_methods) {
+				String methodSignature = method.getSignature();
+				m_methodsMap.put(methodSignature, method);
+			}
+		}
+		// use cache
+		return m_methodsMap.get(signature);
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Method invocation order
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private MethodOrder m_defaultMethodOrder = new MethodOrderAfterCreation();
+
+	/**
+	 * @return the default {@link MethodOrder} for all methods of this component.
+	 */
+	public MethodOrder getDefaultMethodOrder() {
+		return m_defaultMethodOrder;
+	}
+
+	/**
+	 * Sets the default {@link MethodOrder} for all methods of this component.
+	 */
+	public void setDefaultMethodOrder(MethodOrder defaultMethodOrder) {
+		m_defaultMethodOrder = defaultMethodOrder;
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Order
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private ComponentOrder m_order = ComponentOrderDefault.INSTANCE;
+
+	/**
+	 * @return current {@link ComponentOrder}. Can not return <code>null</code>.
+	 */
+	public ComponentOrder getOrder() {
+		return m_order;
+	}
+
+	/**
+	 * Sets new {@link ComponentOrder} using specification.
+	 */
+	public void setOrder(String specification) {
+		m_order = ComponentOrder.parse(specification);
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Generic properties
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final List<GenericPropertyDescription> m_properties = Lists.newArrayList();
+	private final Map<String, GenericPropertyDescription> m_idToProperty = Maps.newHashMap();
+
+	/**
+	 * @return the {@link GenericPropertyDescription}'s of this component.
+	 */
+	public List<GenericPropertyDescription> getProperties() {
+		return Collections.unmodifiableList(m_properties);
+	}
+
+	/**
+	 * @return the {@link GenericPropertyDescription} with given id, can not return <code>null</code>.
+	 *
+	 * @throws RuntimeException
+	 *           if no {@link GenericPropertyDescription} with such id is registered.
+	 */
+	public GenericPropertyDescription getProperty(String id) {
+		GenericPropertyDescription property = m_idToProperty.get(id);
+		if (property == null && !EnvironmentUtils.isTestingTime()) {
+			// fix for descriptions of non-existing properties
+			property = new GenericPropertyDescription(id, "NO_SUCH_PROPERTY");
+		}
+		Assert.isNotNull(property, "Can not find property with id '" + id + "'.");
+		return property;
+	}
+
+	/**
+	 * Adds (and registers) new {@link GenericPropertyDescription}.
+	 */
+	public void addProperty(GenericPropertyDescription property) {
+		String id = property.getId();
+		GenericPropertyDescription existingProperty = m_idToProperty.get(id);
+		if (existingProperty == null) {
+			registerProperty(property);
+			m_properties.add(property);
+		} else {
+			// TODO add separate test
+			existingProperty.join(property);
+		}
+	}
+
+	/**
+	 * Registers {@link GenericPropertyDescription} so that it can be accessed using
+	 * {@link #getProperty(String)}, but don't added them to the list of top level of component
+	 * properties.
+	 */
+	public void registerProperty(GenericPropertyDescription property) {
+		String id = property.getId();
+		m_idToProperty.put(id, property);
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Configurable properties
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final Map<String, ConfigurablePropertyDescription> m_idToConfigurableProperty =
+			Maps.newHashMap();
+
+	/**
+	 * @return the {@link GenericPropertyDescription}'s of this component.
+	 */
+	public Collection<ConfigurablePropertyDescription> getConfigurableProperties() {
+		return m_idToConfigurableProperty.values();
+	}
+
+	/**
+	 * Adds new {@link ConfigurablePropertyDescription}.
+	 */
+	public void addConfigurableProperty(ConfigurablePropertyDescription property) {
+		m_idToConfigurableProperty.put(property.getId(), property);
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parameters
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final Map<String, String> m_parameters = Maps.newTreeMap();
+
+	/**
+	 * Adds new parameter.
+	 */
+	public void addParameter(String name, String value) {
+		m_parameters.put(name, value);
+	}
+
+	/**
+	 * @return the read only {@link Map} of parameters.
+	 */
+	public Map<String, String> getParameters() {
+		return Collections.unmodifiableMap(m_parameters);
+	}
+
+	/**
+	 * @return the value of parameter with given name.
+	 */
+	public String getParameter(String name) {
+		return m_parameters.get(name);
+	}
+
+	/**
+	 * @return <code>true</code> description has parameter with value "true".
+	 */
+	public boolean hasTrueParameter(String name) {
+		String parameter = getParameter(name);
+		return "true".equals(parameter);
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Creation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private CreationDescription m_creationDefault;
+	private final Map<String, CreationDescription> m_creations = Maps.newHashMap();
+
+	/**
+	 * @return all {@link CreationDescription}'s.
+	 */
+	public List<CreationDescription> getCreations() {
+		List<CreationDescription> creations = Lists.newArrayList(m_creations.values());
+		creations.add(m_creationDefault);
+		return creations;
+	}
+
+	/**
+	 * @return the {@link CreationDescription} for this component with given <code>creationId</code>.
+	 */
+	public CreationDescription getCreation(String creationId) {
+		CreationDescription creation = m_creations.get(creationId);
+		if (creation != null) {
+			return creation;
+		}
+		return m_creationDefault;
+	}
+
+	/**
+	 * Sets default, inheritable {@link CreationDescription}.
+	 */
+	public void setCreationDefault(CreationDescription creationDefault) {
+		m_creationDefault = creationDefault;
+	}
+
+	/**
+	 * Adds the {@link CreationDescription} for component with exactly same class.
+	 */
+	public void addCreation(CreationDescription creation) {
+		m_creations.put(creation.getId(), creation);
+	}
+
+	/**
+	 * Removes all existing {@link CreationDescription}'s.
+	 */
+	public void clearCreations() {
+		m_creations.clear();
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exposed children
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final List<ExposingRule> m_exposingRules = Lists.newArrayList();
+
+	/**
+	 * @return the {@link List} of {@link ExposingRule}'s.
+	 */
+	public List<ExposingRule> getExposingRules() {
+		return m_exposingRules;
+	}
+
+	/**
+	 * Adds new {@link ExposingRule} into beginning of rules {@link List}, so that it will be checked
+	 * first. Such order gives ability to fine-tune exposing rules in sub-classes.
+	 *
+	 * @param rule
+	 *          the {@link ExposingRule} to add.
+	 */
+	public void addExposingRule(ExposingRule rule) {
+		m_exposingRules.add(0, rule);
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Morphing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final List<MorphingTargetDescription> m_morphingTargets = Lists.newArrayList();
+
+	/**
+	 * @return the {@link MorphingTargetDescription}'s registered for this component.
+	 */
+	public List<MorphingTargetDescription> getMorphingTargets() {
+		return m_morphingTargets;
+	}
+
+	/**
+	 * Registers new {@link MorphingTargetDescription}.
+	 */
+	public void addMorphingTarget(MorphingTargetDescription morphingTarget) {
+		m_morphingTargets.add(morphingTarget);
+	}
+
+	/**
+	 * Clear registered {@link MorphingTargetDescription}'s list.
+	 */
+	public void clearMorphingTargets() {
+		m_morphingTargets.clear();
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Description
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private String m_description;
+
+	/**
+	 * @return the description text for this component.
+	 */
+	public String getDescription() {
+		return m_description;
+	}
+
+	/**
+	 * Sets the description text for this component.
+	 */
+	public void setDescription(String description) {
+		if (description != null) {
+			m_description = StringUtilities.normalizeWhitespaces(description);
+			m_description = StringUtils.replace(m_description, "\\n", "\n");
+		} else {
+			m_description = m_componentClass.getName();
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Post processing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Post process {@link GenericPropertyDescription}'s.
+	 */
+	public void joinProperties() throws Exception {
+		// update constructors
+		for (ConstructorDescription constructor : getConstructors()) {
+			for (ParameterDescription parameter : constructor.getParameters()) {
+				// try to set editor from mapped property
+				{
+					String propertyId = parameter.getProperty();
+					if (propertyId != null) {
+						GenericPropertyDescription property = getProperty(propertyId);
+						PropertyEditor editor = property.getEditor();
+						if (editor != null) {
+							parameter.setEditor(editor);
+						}
+					}
+				}
+			}
+		}
+		// configure "Object" properties
+		useObjectPropertyEditor();
+		// remove properties without editors
+		for (Iterator<GenericPropertyDescription> I = m_properties.iterator(); I.hasNext();) {
+			GenericPropertyDescription property = I.next();
+			if (property.getEditor() == null) {
+				I.remove();
+				m_idToProperty.remove(property.getId());
+			}
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object properties
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void useObjectPropertyEditor() {
+		for (GenericPropertyDescription property : m_properties) {
+			// may be has some special editor
+			if (property.getEditor() != null) {
+				continue;
+			}
+			// use Object editor
+			if (shouldUseObjectPropertyEditor(property)) {
+				property.setEditor(ObjectPropertyEditor.INSTANCE);
+				if (property.getCategory() == PropertyCategory.NORMAL) {
+					property.setCategory(PropertyCategory.ADVANCED);
+				}
+			}
+		}
+	}
+
+	private static boolean shouldUseObjectPropertyEditor(GenericPropertyDescription property) {
+		if (property.hasTrueTag("useObjectEditor")) {
+			return true;
+		}
+		Method setter = property.getSetter();
+		return setter != null && !isStandardMethod(setter);
+	}
+
+	/**
+	 * @return <code>true</code> if given {@link Method} is declared in standard toolkit component.
+	 */
+	private static boolean isStandardMethod(Method setter) {
+		String declaringClassName = setter.getDeclaringClass().getName();
+		List<IConfigurationElement> elements =
+				ExternalFactoriesHelper.getElements(
+						"org.eclipse.wb.core.standardToolkitPackages",
+						"package");
+		for (IConfigurationElement element : elements) {
+			String prefix = ExternalFactoriesHelper.getRequiredAttribute(element, "prefix");
+			if (declaringClassName.startsWith(prefix)) {
+				return true;
+			}
+		}
+		return false;
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Current class
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Class<?> m_currentClass;
+
+	/**
+	 * @return the currently parsing class.
+	 */
+	public Class<?> getCurrentClass() {
+		return m_currentClass;
+	}
+
+	/**
+	 * Sets the currently parsing class.
+	 */
+	public void setCurrentClass(Class<?> currentClass) {
+		m_currentClass = currentClass;
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Icon
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Image m_icon;
+
+	@Override
+	public Image getIcon() {
+		return m_icon;
+	}
+
+	/**
+	 * Sets the icon for this component.
+	 */
+	public void setIcon(Image icon) {
+		m_icon = icon;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Visiting
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void visit(JavaInfo javaInfo, int state) throws Exception {
+		super.visit(javaInfo, state);
+		for (GenericPropertyDescription property : m_idToProperty.values()) {
+			property.visit(javaInfo, state);
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/ComponentDescriptionKey.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/ComponentDescriptionKey.java
index 04700267b..ba9090da5 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/ComponentDescriptionKey.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/ComponentDescriptionKey.java
@@ -30,93 +30,93 @@
  * @coverage core.model.description
  */
 public final class ComponentDescriptionKey {
-  private final Class<?> m_componentClass;
-  private final ComponentDescriptionKey m_host;
-  private final String m_suffix;
+	private final Class<?> m_componentClass;
+	private final ComponentDescriptionKey m_host;
+	private final String m_suffix;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ComponentDescriptionKey(Class<?> componentClass) {
-    this(componentClass, null, null);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ComponentDescriptionKey(Class<?> componentClass) {
+		this(componentClass, null, null);
+	}
 
-  public ComponentDescriptionKey(Class<?> componentClass,
-      ComponentDescriptionKey host,
-      String suffix) {
-    Assert.isNotNull(componentClass);
-    Assert.isLegal(
-        !(host != null ^ suffix != null),
-        "Host and suffix should both be null or not null.");
-    m_componentClass = componentClass;
-    m_host = host;
-    m_suffix = suffix;
-  }
+	public ComponentDescriptionKey(Class<?> componentClass,
+			ComponentDescriptionKey host,
+			String suffix) {
+		Assert.isNotNull(componentClass);
+		Assert.isLegal(
+				!(host != null ^ suffix != null),
+				"Host and suffix should both be null or not null.");
+		m_componentClass = componentClass;
+		m_host = host;
+		m_suffix = suffix;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public int hashCode() {
-    return m_componentClass.hashCode();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public int hashCode() {
+		return m_componentClass.hashCode();
+	}
 
-  @Override
-  public boolean equals(Object obj) {
-    if (obj instanceof ComponentDescriptionKey) {
-      ComponentDescriptionKey key = (ComponentDescriptionKey) obj;
-      return m_componentClass == key.m_componentClass
-          && ObjectUtils.equals(m_host, key.m_host)
-          && ObjectUtils.equals(m_suffix, key.m_suffix);
-    }
-    return false;
-  }
+	@Override
+	public boolean equals(Object obj) {
+		if (obj instanceof ComponentDescriptionKey) {
+			ComponentDescriptionKey key = (ComponentDescriptionKey) obj;
+			return m_componentClass == key.m_componentClass
+					&& ObjectUtils.equals(m_host, key.m_host)
+					&& ObjectUtils.equals(m_suffix, key.m_suffix);
+		}
+		return false;
+	}
 
-  @Override
-  public String toString() {
-    String s = "CDKey(";
-    s += m_componentClass.getName();
-    // some specialization of "host"
-    if (m_host != null) {
-      s += "," + m_host.toString() + "," + m_suffix;
-    }
-    // finalize toString()
-    s += ")";
-    return s;
-  }
+	@Override
+	public String toString() {
+		String s = "CDKey(";
+		s += m_componentClass.getName();
+		// some specialization of "host"
+		if (m_host != null) {
+			s += "," + m_host.toString() + "," + m_suffix;
+		}
+		// finalize toString()
+		s += ")";
+		return s;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the underlying component {@link Class}.
-   */
-  public Class<?> getComponentClass() {
-    return m_componentClass;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the underlying component {@link Class}.
+	 */
+	public Class<?> getComponentClass() {
+		return m_componentClass;
+	}
 
-  /**
-   * @return <code>true</code> if this {@link ComponentDescriptionKey} is pure component
-   *         {@link Class}, not hosted by other {@link ComponentDescriptionKey}.
-   */
-  public boolean isPureComponent() {
-    return m_host == null;
-  }
+	/**
+	 * @return <code>true</code> if this {@link ComponentDescriptionKey} is pure component
+	 *         {@link Class}, not hosted by other {@link ComponentDescriptionKey}.
+	 */
+	public boolean isPureComponent() {
+		return m_host == null;
+	}
 
-  /**
-   * @return the name of resource with {@link ComponentDescription}, excluding
-   *         <code>.wbp-component.xml</code> extension.
-   */
-  public String getName() {
-    if (m_host != null) {
-      return m_host.getName() + "." + m_suffix;
-    }
-    return m_componentClass.getName().replace('.', '/');
-  }
+	/**
+	 * @return the name of resource with {@link ComponentDescription}, excluding
+	 *         <code>.wbp-component.xml</code> extension.
+	 */
+	public String getName() {
+		if (m_host != null) {
+			return m_host.getName() + "." + m_suffix;
+		}
+		return m_componentClass.getName().replace('.', '/');
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/ConfigurablePropertyDescription.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/ConfigurablePropertyDescription.java
index 63e1967d8..236162e10 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/ConfigurablePropertyDescription.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/ConfigurablePropertyDescription.java
@@ -25,47 +25,47 @@
  * @coverage core.model.description
  */
 public final class ConfigurablePropertyDescription extends AbstractConfigurableDescription {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ID
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private String m_id;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ID
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private String m_id;
 
-  /**
-   * @return the ID of {@link IConfigurablePropertyFactory} that should be used to create
-   *         {@link Property}.
-   */
-  public String getId() {
-    return m_id;
-  }
+	/**
+	 * @return the ID of {@link IConfigurablePropertyFactory} that should be used to create
+	 *         {@link Property}.
+	 */
+	public String getId() {
+		return m_id;
+	}
 
-  /**
-   * Sets the ID of {@link IConfigurablePropertyFactory} that should be used to create
-   * {@link Property}.
-   */
-  public void setId(String id) {
-    m_id = id;
-  }
+	/**
+	 * Sets the ID of {@link IConfigurablePropertyFactory} that should be used to create
+	 * {@link Property}.
+	 */
+	public void setId(String id) {
+		m_id = id;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Title
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private String m_title;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Title
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private String m_title;
 
-  /**
-   * @return the title of {@link Property} to display for user.
-   */
-  public String getTitle() {
-    return m_title;
-  }
+	/**
+	 * @return the title of {@link Property} to display for user.
+	 */
+	public String getTitle() {
+		return m_title;
+	}
 
-  /**
-   * Sets the title of {@link Property} to display for user.
-   */
-  public void setTitle(String title) {
-    m_title = title;
-  }
+	/**
+	 * Sets the title of {@link Property} to display for user.
+	 */
+	public void setTitle(String title) {
+		m_title = title;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/ConstructorDescription.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/ConstructorDescription.java
index 43a82c19a..559c5b966 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/ConstructorDescription.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/ConstructorDescription.java
@@ -17,13 +17,13 @@
  * @coverage core.model.description
  */
 public final class ConstructorDescription extends AbstractInvocationDescription {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ConstructorDescription(Class<?> declaringClass) {
-    super(declaringClass);
-    setName("<init>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ConstructorDescription(Class<?> declaringClass) {
+		super(declaringClass);
+		setName("<init>");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/CreationDescription.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/CreationDescription.java
index 9f61a3d6b..6b37a8905 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/CreationDescription.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/CreationDescription.java
@@ -33,211 +33,211 @@
  * @coverage core.model.description
  */
 public final class CreationDescription extends AbstractDescription {
-  private final ComponentDescription m_componentDescription;
-  private final Class<?> m_componentClass;
-  private final String m_componentClassName;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CreationDescription(ComponentDescription componentDescription,
-      String creationId,
-      String name) {
-    m_componentDescription = componentDescription;
-    m_componentClass = componentDescription.getComponentClass();
-    m_componentClassName = ReflectionUtils.getCanonicalName(m_componentClass);
-    m_id = creationId;
-    m_name = name != null ? name : CodeUtils.getShortClass(m_componentClassName);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // id
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final String m_id;
-
-  /**
-   * @return identifier of this creation.
-   */
-  public String getId() {
-    return m_id;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // icon
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Image m_icon;
-
-  /**
-   * @return the icon of this creation for displaying for user.
-   */
-  public Image getIcon() {
-    return m_icon != null ? m_icon : m_componentDescription.getIcon();
-  }
-
-  /**
-   * Sets the icon of this creation for displaying for user.
-   */
-  public void setIcon(Image icon) {
-    m_icon = icon;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // name
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final String m_name;
-
-  /**
-   * @return the name of this creation for displaying for user.
-   */
-  public String getName() {
-    return m_name;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // description
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private String m_description;
-
-  /**
-   * @return the description of this creation for displaying for user.
-   */
-  public String getDescription() {
-    return m_description != null ? m_description : m_componentDescription.getDescription();
-  }
-
-  /**
-   * Sets the description of this creation for displaying for user.
-   */
-  public void setDescription(String description) {
-    m_description = description != null ? StringUtilities.normalizeWhitespaces(description) : null;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Source
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private String m_source;
-
-  /**
-   * @return the source for creating new component instance.
-   */
-  public String getSource() {
-    return m_source;
-  }
-
-  /**
-   * Sets that source for creating new component instance.
-   */
-  public void setSource(String source) {
-    m_source = evaluate(source);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Invocations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final List<CreationInvocationDescription> m_invocations = Lists.newArrayList();
-
-  /**
-   * @return the {@link List} of {@link CreationInvocationDescription}.
-   */
-  public List<CreationInvocationDescription> getInvocations() {
-    return m_invocations;
-  }
-
-  /**
-   * Adds the {@link CreationInvocationDescription}.
-   */
-  public void addInvocation(CreationInvocationDescription invocation) {
-    m_invocations.add(invocation);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parameters
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final Map<String, String> m_parameters = Maps.newTreeMap();
-
-  /**
-   * @return the {@link CreationDescription} specific parameters.
-   */
-  public Map<String, String> getParameters() {
-    return Collections.unmodifiableMap(m_parameters);
-  }
-
-  /**
-   * Adds new parameter.
-   */
-  public void addParameter(String name, String value) {
-    m_parameters.put(name, value);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Generics
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static class TypeParameterDescription {
-    private final String m_typeName;
-    private final String m_title;
-
-    public TypeParameterDescription(String typeName, String title) {
-      m_typeName = typeName;
-      m_title = title;
-    }
-
-    public String getTypeName() {
-      return m_typeName;
-    }
-
-    public String getTitle() {
-      return m_title;
-    }
-  }
-
-  private Map<String, TypeParameterDescription> m_typeArguments;
-
-  /**
-   * @return the {@link Map} of generic parameters.
-   */
-  public Map<String, TypeParameterDescription> getTypeParameters() {
-    return m_typeArguments != null
-        ? m_typeArguments
-        : ImmutableMap.<String, TypeParameterDescription>of();
-  }
-
-  /**
-   * Adds new generic parameter info.
-   */
-  public void setTypeParameter(String name, String typeName, String title) {
-    if (m_typeArguments == null) {
-      m_typeArguments = Maps.newLinkedHashMap();
-    }
-    m_typeArguments.put(name, new TypeParameterDescription(typeName, title));
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Do any replaces in given template (with <code>%pattern%</code>).
-   */
-  private String evaluate(String s) {
-    return StringUtils.replace(s, "%component.class%", m_componentClassName);
-  }
+	private final ComponentDescription m_componentDescription;
+	private final Class<?> m_componentClass;
+	private final String m_componentClassName;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CreationDescription(ComponentDescription componentDescription,
+			String creationId,
+			String name) {
+		m_componentDescription = componentDescription;
+		m_componentClass = componentDescription.getComponentClass();
+		m_componentClassName = ReflectionUtils.getCanonicalName(m_componentClass);
+		m_id = creationId;
+		m_name = name != null ? name : CodeUtils.getShortClass(m_componentClassName);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// id
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final String m_id;
+
+	/**
+	 * @return identifier of this creation.
+	 */
+	public String getId() {
+		return m_id;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// icon
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Image m_icon;
+
+	/**
+	 * @return the icon of this creation for displaying for user.
+	 */
+	public Image getIcon() {
+		return m_icon != null ? m_icon : m_componentDescription.getIcon();
+	}
+
+	/**
+	 * Sets the icon of this creation for displaying for user.
+	 */
+	public void setIcon(Image icon) {
+		m_icon = icon;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// name
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final String m_name;
+
+	/**
+	 * @return the name of this creation for displaying for user.
+	 */
+	public String getName() {
+		return m_name;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// description
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private String m_description;
+
+	/**
+	 * @return the description of this creation for displaying for user.
+	 */
+	public String getDescription() {
+		return m_description != null ? m_description : m_componentDescription.getDescription();
+	}
+
+	/**
+	 * Sets the description of this creation for displaying for user.
+	 */
+	public void setDescription(String description) {
+		m_description = description != null ? StringUtilities.normalizeWhitespaces(description) : null;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Source
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private String m_source;
+
+	/**
+	 * @return the source for creating new component instance.
+	 */
+	public String getSource() {
+		return m_source;
+	}
+
+	/**
+	 * Sets that source for creating new component instance.
+	 */
+	public void setSource(String source) {
+		m_source = evaluate(source);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Invocations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final List<CreationInvocationDescription> m_invocations = Lists.newArrayList();
+
+	/**
+	 * @return the {@link List} of {@link CreationInvocationDescription}.
+	 */
+	public List<CreationInvocationDescription> getInvocations() {
+		return m_invocations;
+	}
+
+	/**
+	 * Adds the {@link CreationInvocationDescription}.
+	 */
+	public void addInvocation(CreationInvocationDescription invocation) {
+		m_invocations.add(invocation);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parameters
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final Map<String, String> m_parameters = Maps.newTreeMap();
+
+	/**
+	 * @return the {@link CreationDescription} specific parameters.
+	 */
+	public Map<String, String> getParameters() {
+		return Collections.unmodifiableMap(m_parameters);
+	}
+
+	/**
+	 * Adds new parameter.
+	 */
+	public void addParameter(String name, String value) {
+		m_parameters.put(name, value);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Generics
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static class TypeParameterDescription {
+		private final String m_typeName;
+		private final String m_title;
+
+		public TypeParameterDescription(String typeName, String title) {
+			m_typeName = typeName;
+			m_title = title;
+		}
+
+		public String getTypeName() {
+			return m_typeName;
+		}
+
+		public String getTitle() {
+			return m_title;
+		}
+	}
+
+	private Map<String, TypeParameterDescription> m_typeArguments;
+
+	/**
+	 * @return the {@link Map} of generic parameters.
+	 */
+	public Map<String, TypeParameterDescription> getTypeParameters() {
+		return m_typeArguments != null
+				? m_typeArguments
+						: ImmutableMap.<String, TypeParameterDescription>of();
+	}
+
+	/**
+	 * Adds new generic parameter info.
+	 */
+	public void setTypeParameter(String name, String typeName, String title) {
+		if (m_typeArguments == null) {
+			m_typeArguments = Maps.newLinkedHashMap();
+		}
+		m_typeArguments.put(name, new TypeParameterDescription(typeName, title));
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Do any replaces in given template (with <code>%pattern%</code>).
+	 */
+	private String evaluate(String s) {
+		return StringUtils.replace(s, "%component.class%", m_componentClassName);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/CreationInvocationDescription.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/CreationInvocationDescription.java
index ac99b415d..76b942bff 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/CreationInvocationDescription.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/CreationInvocationDescription.java
@@ -19,33 +19,33 @@
  * @coverage core.model.description
  */
 public final class CreationInvocationDescription extends AbstractDescription {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Signature
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private String m_signature;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Signature
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private String m_signature;
 
-  public String getSignature() {
-    return m_signature;
-  }
+	public String getSignature() {
+		return m_signature;
+	}
 
-  public void setSignature(String signature) {
-    m_signature = signature;
-  }
+	public void setSignature(String signature) {
+		m_signature = signature;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Arguments
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private String m_arguments;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Arguments
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private String m_arguments;
 
-  public String getArguments() {
-    return m_arguments;
-  }
+	public String getArguments() {
+		return m_arguments;
+	}
 
-  public void setArguments(String arguments) {
-    m_arguments = arguments;
-  }
+	public void setArguments(String arguments) {
+		m_arguments = arguments;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/ExposingMethodRule.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/ExposingMethodRule.java
index 60c06581b..4e94bcc23 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/ExposingMethodRule.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/ExposingMethodRule.java
@@ -21,32 +21,32 @@
  * @coverage core.model.description
  */
 public final class ExposingMethodRule extends ExposingRule {
-  private final boolean m_include;
-  private final String m_methodName;
+	private final boolean m_include;
+	private final String m_methodName;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ExposingMethodRule(boolean include, String methodName) {
-    m_include = include;
-    m_methodName = methodName;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ExposingMethodRule(boolean include, String methodName) {
+		m_include = include;
+		m_methodName = methodName;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Filter
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Boolean filter(Method method) {
-    Assert.isLegal(method.getParameterTypes().length == 0, method.toString());
-    // check method name
-    if (!method.getName().equals(m_methodName)) {
-      return null;
-    }
-    // OK, method satisfies to filter, so include/exclude it
-    return m_include;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Filter
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Boolean filter(Method method) {
+		Assert.isLegal(method.getParameterTypes().length == 0, method.toString());
+		// check method name
+		if (!method.getName().equals(m_methodName)) {
+			return null;
+		}
+		// OK, method satisfies to filter, so include/exclude it
+		return m_include;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/ExposingPackageRule.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/ExposingPackageRule.java
index a0c5f8105..ea9c58891 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/ExposingPackageRule.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/ExposingPackageRule.java
@@ -23,39 +23,39 @@
  * @coverage core.model.description
  */
 public final class ExposingPackageRule extends ExposingRule {
-  private final boolean m_include;
-  private final String m_packageName;
+	private final boolean m_include;
+	private final String m_packageName;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ExposingPackageRule(boolean include, String packageName) {
-    m_include = include;
-    m_packageName = packageName;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ExposingPackageRule(boolean include, String packageName) {
+		m_include = include;
+		m_packageName = packageName;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Filter
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Boolean filter(Method method) {
-    String packageName = CodeUtils.getPackage(method.getDeclaringClass().getName());
-    if (packageName.equals(m_packageName)) {
-      return m_include;
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Filter
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Boolean filter(Method method) {
+		String packageName = CodeUtils.getPackage(method.getDeclaringClass().getName());
+		if (packageName.equals(m_packageName)) {
+			return m_include;
+		}
+		return null;
+	}
 
-  @Override
-  public Boolean filter(Field field) {
-    String packageName = CodeUtils.getPackage(field.getDeclaringClass().getName());
-    if (packageName.equals(m_packageName)) {
-      return m_include;
-    }
-    return null;
-  }
+	@Override
+	public Boolean filter(Field field) {
+		String packageName = CodeUtils.getPackage(field.getDeclaringClass().getName());
+		if (packageName.equals(m_packageName)) {
+			return m_include;
+		}
+		return null;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/ExposingRule.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/ExposingRule.java
index 959ffcd21..0d82c98cd 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/ExposingRule.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/ExposingRule.java
@@ -20,27 +20,27 @@
  * @coverage core.model.description
  */
 public abstract class ExposingRule {
-  /**
-   * @param method
-   *          the {@link Method} to filter.
-   *
-   * @return <code>true</code> if given {@link Method} can be used to expose child,
-   *         <code>false</code> - if can not be exposed, or <code>null</code> if given
-   *         {@link Method} does not fall into this rule.
-   */
-  public Boolean filter(Method method) {
-    return null;
-  }
+	/**
+	 * @param method
+	 *          the {@link Method} to filter.
+	 *
+	 * @return <code>true</code> if given {@link Method} can be used to expose child,
+	 *         <code>false</code> - if can not be exposed, or <code>null</code> if given
+	 *         {@link Method} does not fall into this rule.
+	 */
+	public Boolean filter(Method method) {
+		return null;
+	}
 
-  /**
-   * @param method
-   *          the {@link Field} to filter.
-   *
-   * @return <code>true</code> if given {@link Field} can be used to expose child,
-   *         <code>false</code> - if can not be exposed, or <code>null</code> if given {@link Field}
-   *         does not fall into this rule.
-   */
-  public Boolean filter(Field field) {
-    return null;
-  }
+	/**
+	 * @param method
+	 *          the {@link Field} to filter.
+	 *
+	 * @return <code>true</code> if given {@link Field} can be used to expose child,
+	 *         <code>false</code> - if can not be exposed, or <code>null</code> if given {@link Field}
+	 *         does not fall into this rule.
+	 */
+	public Boolean filter(Field field) {
+		return null;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/GenericPropertyDescription.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/GenericPropertyDescription.java
index ff5a3d27e..0b4d38dcd 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/GenericPropertyDescription.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/GenericPropertyDescription.java
@@ -32,217 +32,217 @@
  * @coverage core.model.description
  */
 public final class GenericPropertyDescription extends AbstractDescription {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public GenericPropertyDescription(String id, String title) {
-    this(id, title, null);
-  }
-
-  public GenericPropertyDescription(String id, String title, Class<?> type) {
-    m_id = id;
-    m_title = title;
-    m_type = type;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Id
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final String m_id;
-
-  /**
-   * @return the id of this property.
-   */
-  public String getId() {
-    return m_id;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Title
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private String m_title;
-
-  /**
-   * @return the title of this property.
-   */
-  public String getTitle() {
-    // try to find "title" tag
-    {
-      String title = getTag("title");
-      if (title != null) {
-        return title;
-      }
-    }
-    // use default title
-    return m_title;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Type
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final Class<?> m_type;
-
-  /**
-   * @return the type of this property.
-   */
-  public Class<?> getType() {
-    return m_type;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Category
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private PropertyCategory m_category = PropertyCategory.NORMAL;
-
-  /**
-   * Sets the {@link PropertyCategory} for this property.
-   */
-  public void setCategory(PropertyCategory category) {
-    m_category = category;
-  }
-
-  /**
-   * @return the {@link PropertyCategory} of this property.
-   */
-  public PropertyCategory getCategory() {
-    return m_category;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Accessors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final List<ExpressionAccessor> m_accessors = Lists.newArrayList();
-
-  /**
-   * @return the list of {@link ExpressionAccessor}'s.
-   */
-  public List<ExpressionAccessor> getAccessorsList() {
-    return m_accessors;
-  }
-
-  /**
-   * @return the array of {@link ExpressionAccessor}'s.
-   */
-  public ExpressionAccessor[] getAccessorsArray() {
-    return m_accessors.toArray(new ExpressionAccessor[m_accessors.size()]);
-  }
-
-  /**
-   * Adds given {@link ExpressionAccessor}.
-   */
-  public void addAccessor(ExpressionAccessor accessor) {
-    m_accessors.add(accessor);
-    accessor.setPropertyDescription(this);
-  }
-
-  /**
-   * @return the setter {@link Method}, if this this property is based on {@link SetterAccessor},
-   *         may be <code>null</code>.
-   */
-  Method getSetter() {
-    List<ExpressionAccessor> accessors = getAccessorsList();
-    for (ExpressionAccessor accessor : accessors) {
-      if (accessor instanceof SetterAccessor) {
-        return ((SetterAccessor) accessor).getSetter();
-      }
-    }
-    return null;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Default value
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Object m_defaultValue = Property.UNKNOWN_VALUE;
-
-  /**
-   * @return the forced default value.
-   */
-  public Object getDefaultValue() {
-    return m_defaultValue;
-  }
-
-  /**
-   * Sets the forced default value.
-   */
-  public void setDefaultValue(Object defaultValue) {
-    m_defaultValue = defaultValue;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Converter
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private ExpressionConverter m_converter;
-
-  /**
-   * Sets the {@link ExpressionConverter} for this property.
-   */
-  public void setConverter(ExpressionConverter converter) {
-    m_converter = converter;
-  }
-
-  /**
-   * @return the {@link ExpressionConverter} for this property.
-   */
-  public ExpressionConverter getConverter() {
-    return m_converter;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private PropertyEditor m_editor;
-
-  /**
-   * Sets the {@link PropertyEditor} for this property.
-   */
-  public void setEditor(PropertyEditor editor) {
-    m_editor = editor;
-  }
-
-  /**
-   * @return the {@link PropertyEditor} for this property.
-   */
-  public PropertyEditor getEditor() {
-    return m_editor;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Join
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void join(GenericPropertyDescription property) {
-    m_title = property.getTitle();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Visiting
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void visit(JavaInfo javaInfo, int state) throws Exception {
-    super.visit(javaInfo, state);
-    for (ExpressionAccessor accessor : m_accessors) {
-      accessor.visit(javaInfo, state);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public GenericPropertyDescription(String id, String title) {
+		this(id, title, null);
+	}
+
+	public GenericPropertyDescription(String id, String title, Class<?> type) {
+		m_id = id;
+		m_title = title;
+		m_type = type;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Id
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final String m_id;
+
+	/**
+	 * @return the id of this property.
+	 */
+	public String getId() {
+		return m_id;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Title
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private String m_title;
+
+	/**
+	 * @return the title of this property.
+	 */
+	public String getTitle() {
+		// try to find "title" tag
+		{
+			String title = getTag("title");
+			if (title != null) {
+				return title;
+			}
+		}
+		// use default title
+		return m_title;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Type
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final Class<?> m_type;
+
+	/**
+	 * @return the type of this property.
+	 */
+	public Class<?> getType() {
+		return m_type;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Category
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private PropertyCategory m_category = PropertyCategory.NORMAL;
+
+	/**
+	 * Sets the {@link PropertyCategory} for this property.
+	 */
+	public void setCategory(PropertyCategory category) {
+		m_category = category;
+	}
+
+	/**
+	 * @return the {@link PropertyCategory} of this property.
+	 */
+	public PropertyCategory getCategory() {
+		return m_category;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Accessors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final List<ExpressionAccessor> m_accessors = Lists.newArrayList();
+
+	/**
+	 * @return the list of {@link ExpressionAccessor}'s.
+	 */
+	public List<ExpressionAccessor> getAccessorsList() {
+		return m_accessors;
+	}
+
+	/**
+	 * @return the array of {@link ExpressionAccessor}'s.
+	 */
+	public ExpressionAccessor[] getAccessorsArray() {
+		return m_accessors.toArray(new ExpressionAccessor[m_accessors.size()]);
+	}
+
+	/**
+	 * Adds given {@link ExpressionAccessor}.
+	 */
+	public void addAccessor(ExpressionAccessor accessor) {
+		m_accessors.add(accessor);
+		accessor.setPropertyDescription(this);
+	}
+
+	/**
+	 * @return the setter {@link Method}, if this this property is based on {@link SetterAccessor},
+	 *         may be <code>null</code>.
+	 */
+	Method getSetter() {
+		List<ExpressionAccessor> accessors = getAccessorsList();
+		for (ExpressionAccessor accessor : accessors) {
+			if (accessor instanceof SetterAccessor) {
+				return ((SetterAccessor) accessor).getSetter();
+			}
+		}
+		return null;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Default value
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Object m_defaultValue = Property.UNKNOWN_VALUE;
+
+	/**
+	 * @return the forced default value.
+	 */
+	public Object getDefaultValue() {
+		return m_defaultValue;
+	}
+
+	/**
+	 * Sets the forced default value.
+	 */
+	public void setDefaultValue(Object defaultValue) {
+		m_defaultValue = defaultValue;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Converter
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private ExpressionConverter m_converter;
+
+	/**
+	 * Sets the {@link ExpressionConverter} for this property.
+	 */
+	public void setConverter(ExpressionConverter converter) {
+		m_converter = converter;
+	}
+
+	/**
+	 * @return the {@link ExpressionConverter} for this property.
+	 */
+	public ExpressionConverter getConverter() {
+		return m_converter;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private PropertyEditor m_editor;
+
+	/**
+	 * Sets the {@link PropertyEditor} for this property.
+	 */
+	public void setEditor(PropertyEditor editor) {
+		m_editor = editor;
+	}
+
+	/**
+	 * @return the {@link PropertyEditor} for this property.
+	 */
+	public PropertyEditor getEditor() {
+		return m_editor;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Join
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void join(GenericPropertyDescription property) {
+		m_title = property.getTitle();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Visiting
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void visit(JavaInfo javaInfo, int state) throws Exception {
+		super.visit(javaInfo, state);
+		for (ExpressionAccessor accessor : m_accessors) {
+			accessor.visit(javaInfo, state);
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/IDescriptionProcessor.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/IDescriptionProcessor.java
index ea9edc099..4ba82f9d3 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/IDescriptionProcessor.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/IDescriptionProcessor.java
@@ -19,15 +19,15 @@
  * @coverage core.model.description
  */
 public interface IDescriptionProcessor {
-  /**
-   * This method allows configure given {@link ComponentDescription} after loading.
-   * <p>
-   * For example in SWT we can mark first <code>Composite</code> parameter of constructor as parent.
-   *
-   * @param editor
-   *          the {@link AstEditor} in which context {@link ComponentDescription} is loading.
-   * @param componentDescription
-   *          the {@link ComponentDescription} to process.
-   */
-  void process(AstEditor editor, ComponentDescription componentDescription) throws Exception;
+	/**
+	 * This method allows configure given {@link ComponentDescription} after loading.
+	 * <p>
+	 * For example in SWT we can mark first <code>Composite</code> parameter of constructor as parent.
+	 *
+	 * @param editor
+	 *          the {@link AstEditor} in which context {@link ComponentDescription} is loading.
+	 * @param componentDescription
+	 *          the {@link ComponentDescription} to process.
+	 */
+	void process(AstEditor editor, ComponentDescription componentDescription) throws Exception;
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/MethodDescription.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/MethodDescription.java
index 6e0dab8a1..6405494d1 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/MethodDescription.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/MethodDescription.java
@@ -21,119 +21,119 @@
  * @coverage core.model.description
  */
 public class MethodDescription extends AbstractInvocationDescription {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public MethodDescription(Class<?> declaringClass) {
-    super(declaringClass);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public MethodDescription(Class<?> declaringClass) {
+		super(declaringClass);
+	}
 
-  public MethodDescription(Method method) throws Exception {
-    super(method.getDeclaringClass());
-    setName(method.getName());
-    setReturnClass(method.getReturnType());
-    // add parameters
-    for (Class<?> parameterType : method.getParameterTypes()) {
-      ParameterDescription parameterDescription = new ParameterDescription();
-      parameterDescription.setType(parameterType);
-      addParameter(parameterDescription);
-    }
-    // finalize
-    postProcess();
-  }
+	public MethodDescription(Method method) throws Exception {
+		super(method.getDeclaringClass());
+		setName(method.getName());
+		setReturnClass(method.getReturnType());
+		// add parameters
+		for (Class<?> parameterType : method.getParameterTypes()) {
+			ParameterDescription parameterDescription = new ParameterDescription();
+			parameterDescription.setType(parameterType);
+			addParameter(parameterDescription);
+		}
+		// finalize
+		postProcess();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Join
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void join(AbstractInvocationDescription description) {
-    super.join(description);
-    // order
-    MethodDescription methodDescription = (MethodDescription) description;
-    if (methodDescription.m_order != MethodOrder.DEFAULT) {
-      m_order = methodDescription.m_order;
-    }
-    // executable
-    if (methodDescription.m_executable != null) {
-      m_executable = methodDescription.m_executable;
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Join
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void join(AbstractInvocationDescription description) {
+		super.join(description);
+		// order
+		MethodDescription methodDescription = (MethodDescription) description;
+		if (methodDescription.m_order != MethodOrder.DEFAULT) {
+			m_order = methodDescription.m_order;
+		}
+		// executable
+		if (methodDescription.m_executable != null) {
+			m_executable = methodDescription.m_executable;
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Return class
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Class<?> m_returnClass;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Return class
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Class<?> m_returnClass;
 
-  /**
-   * @return the {@link Class} of component returned by this factory method;
-   */
-  public Class<?> getReturnClass() {
-    return m_returnClass;
-  }
+	/**
+	 * @return the {@link Class} of component returned by this factory method;
+	 */
+	public Class<?> getReturnClass() {
+		return m_returnClass;
+	}
 
-  /**
-   * Sets the {@link Class} of component returned by this factory method;
-   */
-  public void setReturnClass(Class<?> componentClass) {
-    m_returnClass = componentClass;
-  }
+	/**
+	 * Sets the {@link Class} of component returned by this factory method;
+	 */
+	public void setReturnClass(Class<?> componentClass) {
+		m_returnClass = componentClass;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Order
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private MethodOrder m_order = MethodOrder.DEFAULT;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Order
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private MethodOrder m_order = MethodOrder.DEFAULT;
 
-  /**
-   * @return the {@link MethodOrder}, i.e. specification where invocations of this method should be
-   *         located relative to invocations of other methods.
-   */
-  public final MethodOrder getOrder() {
-    return m_order;
-  }
+	/**
+	 * @return the {@link MethodOrder}, i.e. specification where invocations of this method should be
+	 *         located relative to invocations of other methods.
+	 */
+	public final MethodOrder getOrder() {
+		return m_order;
+	}
 
-  /**
-   * Sets the {@link MethodOrder}.
-   */
-  public void setOrder(MethodOrder order) {
-    m_order = order;
-  }
+	/**
+	 * Sets the {@link MethodOrder}.
+	 */
+	public void setOrder(MethodOrder order) {
+		m_order = order;
+	}
 
-  /**
-   * Sets the {@link MethodOrder} using its specification.
-   */
-  public void setOrderSpecification(String specification) {
-    m_order = MethodOrder.parse(specification);
-  }
+	/**
+	 * Sets the {@link MethodOrder} using its specification.
+	 */
+	public void setOrderSpecification(String specification) {
+		m_order = MethodOrder.parse(specification);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Executable
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Boolean m_executable = null;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Executable
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Boolean m_executable = null;
 
-  /**
-   * @return <code>true</code> if evaluation this method is allowed.
-   */
-  public final boolean isExecutable() {
-    if (m_executable == null) {
-      return true;
-    }
-    return m_executable;
-  }
+	/**
+	 * @return <code>true</code> if evaluation this method is allowed.
+	 */
+	public final boolean isExecutable() {
+		if (m_executable == null) {
+			return true;
+		}
+		return m_executable;
+	}
 
-  /**
-   * Specifies if this method can be evaluated.
-   */
-  public final void setExecutable(boolean executable) {
-    m_executable = executable ? Boolean.TRUE : Boolean.FALSE;
-  }
+	/**
+	 * Specifies if this method can be evaluated.
+	 */
+	public final void setExecutable(boolean executable) {
+		m_executable = executable ? Boolean.TRUE : Boolean.FALSE;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/MorphingTargetDescription.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/MorphingTargetDescription.java
index 41e15ec95..66fd393ae 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/MorphingTargetDescription.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/MorphingTargetDescription.java
@@ -42,35 +42,35 @@
  * @coverage core.model.description
  */
 public final class MorphingTargetDescription {
-  private final Class<?> m_componentClass;
-  private final String m_creationId;
+	private final Class<?> m_componentClass;
+	private final String m_creationId;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public MorphingTargetDescription(Class<?> componentClass, String creationId) {
-    m_componentClass = componentClass;
-    m_creationId = creationId;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public MorphingTargetDescription(Class<?> componentClass, String creationId) {
+		m_componentClass = componentClass;
+		m_creationId = creationId;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the target component class.
-   */
-  public Class<?> getComponentClass() {
-    return m_componentClass;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the target component class.
+	 */
+	public Class<?> getComponentClass() {
+		return m_componentClass;
+	}
 
-  /**
-   * @return the creation id for target class.
-   */
-  public String getCreationId() {
-    return m_creationId;
-  }
+	/**
+	 * @return the creation id for target class.
+	 */
+	public String getCreationId() {
+		return m_creationId;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/ParameterDescription.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/ParameterDescription.java
index ad92d4312..5277cce5d 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/ParameterDescription.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/ParameterDescription.java
@@ -25,301 +25,301 @@
  * @coverage core.model.description
  */
 public final class ParameterDescription extends AbstractDescription {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    StringBuffer sb = new StringBuffer();
-    sb.append("{");
-    sb.append(m_type.getName());
-    // parent/child
-    if (m_parent) {
-      sb.append(",parent");
-    }
-    if (m_child) {
-      sb.append(",child");
-    }
-    // parent2/child2
-    if (m_parent2) {
-      sb.append(",parent2");
-    }
-    if (m_child2) {
-      sb.append(",child2");
-    }
-    // close
-    sb.append("}");
-    return sb.toString();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Join
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Joins this {@link ParameterDescription} with given one.
-   */
-  public void join(ParameterDescription description) {
-    m_name = (String) ObjectUtils.defaultIfNull(m_name, description.m_name);
-    // editor/converter
-    if (description.m_editor != null) {
-      m_converter = description.m_converter;
-      m_editor = description.m_editor;
-    }
-    // tags
-    putTags(description.getTags());
-    // other
-    m_property = description.m_property;
-    m_defaultSource = description.m_defaultSource;
-    {
-      m_parent = description.m_parent;
-      m_child = description.m_child;
-    }
-    {
-      m_parent2 = description.m_parent2;
-      m_child2 = description.m_child2;
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Index
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private int m_index;
-
-  /**
-   * @return the index of this parameter.
-   */
-  public int getIndex() {
-    return m_index;
-  }
-
-  /**
-   * Sets the index of this parameter.
-   */
-  public void setIndex(int index) {
-    m_index = index;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Name
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private String m_name;
-
-  /**
-   * @return the name of parameter.
-   */
-  public String getName() {
-    return m_name;
-  }
-
-  /**
-   * Sets the name of parameter.
-   */
-  public void setName(String name) {
-    m_name = name;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Type
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Class<?> m_type;
-
-  /**
-   * @return the type of this parameter.
-   */
-  public Class<?> getType() {
-    return m_type;
-  }
-
-  /**
-   * Sets the type of this parameter.
-   */
-  public void setType(Class<?> type) throws Exception {
-    m_type = type;
-    m_converterDefault = DescriptionPropertiesHelper.getConverterForType(m_type);
-    m_editorDefault = DescriptionPropertiesHelper.getEditorForType(m_type);
-    m_defaultSource = AstParser.getDefaultValue(m_type.getName());
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parent flag
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private boolean m_parent;
-
-  /**
-   * @return <code>true</code> if this parameter contains reference on parent {@link JavaInfo}.
-   */
-  public boolean isParent() {
-    return m_parent;
-  }
-
-  /**
-   * Marks this parameter as passing parent of this component.
-   */
-  public void setParent(boolean parent) {
-    m_parent = parent;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Child flag
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private boolean m_child;
-
-  /**
-   * @return <code>true</code> if this parameter contains reference on child {@link JavaInfo}.
-   */
-  public boolean isChild() {
-    return m_child;
-  }
-
-  /**
-   * Marks this parameter as passing child of this component.
-   */
-  public void setChild(boolean child) {
-    m_child = child;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // "parent2" flag
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private boolean m_parent2;
-
-  /**
-   * @return <code>true</code> if this parameter contains (optional) reference of parent
-   *         {@link JavaInfo}.
-   *
-   *         We use {@link #isParent2()} and {@link #isChild2()} to create parent/child link between
-   *         components because they appear as parameters of this method invocation.
-   */
-  public boolean isParent2() {
-    return m_parent2;
-  }
-
-  /**
-   * Marks this parameter as optional secondary parent.
-   */
-  public void setParent2(boolean parent2) {
-    m_parent2 = parent2;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // "child2" flag
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private boolean m_child2;
-
-  /**
-   * @return <code>true</code> if this parameter contains (optional) reference of child
-   *         {@link JavaInfo}.
-   *
-   *         We use {@link #isParent2()} and {@link #isChild2()} to create parent/child link between
-   *         components because they appear as parameters of this method invocation.
-   */
-  public boolean isChild2() {
-    return m_child2;
-  }
-
-  /**
-   * Marks this parameter as optional secondary child.
-   */
-  public void setChild2(boolean child2) {
-    m_child2 = child2;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Property
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private String m_property;
-
-  /**
-   * @return the id of property to which this parameter should be bound, may be <code>null</code>.
-   */
-  public String getProperty() {
-    return m_property;
-  }
-
-  /**
-   * Sets the id of property to which this parameter should be bound.
-   */
-  public void setProperty(String property) {
-    m_property = property;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Converter
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private ExpressionConverter m_converter;
-  private ExpressionConverter m_converterDefault;
-
-  /**
-   * @return the {@link ExpressionConverter} for this parameter.
-   */
-  public ExpressionConverter getConverter() {
-    return m_converter != null ? m_converter : m_converterDefault;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private PropertyEditor m_editor;
-  private PropertyEditor m_editorDefault;
-
-  /**
-   * Sets the {@link PropertyEditor} for this property.
-   */
-  public void setEditor(PropertyEditor editor) {
-    m_editor = editor;
-  }
-
-  /**
-   * @return the {@link PropertyEditor} for this property.
-   */
-  public PropertyEditor getEditor() {
-    return m_editor != null ? m_editor : m_editorDefault;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Default source
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private String m_defaultSource;
-
-  /**
-   * @return the default source for this parameter that should be used when user asks for
-   *         "cleaning". Can return <code>null</code> that means that parameter can not be
-   *         "cleaned".
-   */
-  public String getDefaultSource() {
-    return m_defaultSource;
-  }
-
-  /**
-   * Sets the default source for this parameter.
-   */
-  public void setDefaultSource(String defaultSource) {
-    m_defaultSource = defaultSource;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		StringBuffer sb = new StringBuffer();
+		sb.append("{");
+		sb.append(m_type.getName());
+		// parent/child
+		if (m_parent) {
+			sb.append(",parent");
+		}
+		if (m_child) {
+			sb.append(",child");
+		}
+		// parent2/child2
+		if (m_parent2) {
+			sb.append(",parent2");
+		}
+		if (m_child2) {
+			sb.append(",child2");
+		}
+		// close
+		sb.append("}");
+		return sb.toString();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Join
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Joins this {@link ParameterDescription} with given one.
+	 */
+	public void join(ParameterDescription description) {
+		m_name = (String) ObjectUtils.defaultIfNull(m_name, description.m_name);
+		// editor/converter
+		if (description.m_editor != null) {
+			m_converter = description.m_converter;
+			m_editor = description.m_editor;
+		}
+		// tags
+		putTags(description.getTags());
+		// other
+		m_property = description.m_property;
+		m_defaultSource = description.m_defaultSource;
+		{
+			m_parent = description.m_parent;
+			m_child = description.m_child;
+		}
+		{
+			m_parent2 = description.m_parent2;
+			m_child2 = description.m_child2;
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Index
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private int m_index;
+
+	/**
+	 * @return the index of this parameter.
+	 */
+	public int getIndex() {
+		return m_index;
+	}
+
+	/**
+	 * Sets the index of this parameter.
+	 */
+	public void setIndex(int index) {
+		m_index = index;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Name
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private String m_name;
+
+	/**
+	 * @return the name of parameter.
+	 */
+	public String getName() {
+		return m_name;
+	}
+
+	/**
+	 * Sets the name of parameter.
+	 */
+	public void setName(String name) {
+		m_name = name;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Type
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Class<?> m_type;
+
+	/**
+	 * @return the type of this parameter.
+	 */
+	public Class<?> getType() {
+		return m_type;
+	}
+
+	/**
+	 * Sets the type of this parameter.
+	 */
+	public void setType(Class<?> type) throws Exception {
+		m_type = type;
+		m_converterDefault = DescriptionPropertiesHelper.getConverterForType(m_type);
+		m_editorDefault = DescriptionPropertiesHelper.getEditorForType(m_type);
+		m_defaultSource = AstParser.getDefaultValue(m_type.getName());
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parent flag
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private boolean m_parent;
+
+	/**
+	 * @return <code>true</code> if this parameter contains reference on parent {@link JavaInfo}.
+	 */
+	public boolean isParent() {
+		return m_parent;
+	}
+
+	/**
+	 * Marks this parameter as passing parent of this component.
+	 */
+	public void setParent(boolean parent) {
+		m_parent = parent;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Child flag
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private boolean m_child;
+
+	/**
+	 * @return <code>true</code> if this parameter contains reference on child {@link JavaInfo}.
+	 */
+	public boolean isChild() {
+		return m_child;
+	}
+
+	/**
+	 * Marks this parameter as passing child of this component.
+	 */
+	public void setChild(boolean child) {
+		m_child = child;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// "parent2" flag
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private boolean m_parent2;
+
+	/**
+	 * @return <code>true</code> if this parameter contains (optional) reference of parent
+	 *         {@link JavaInfo}.
+	 *
+	 *         We use {@link #isParent2()} and {@link #isChild2()} to create parent/child link between
+	 *         components because they appear as parameters of this method invocation.
+	 */
+	public boolean isParent2() {
+		return m_parent2;
+	}
+
+	/**
+	 * Marks this parameter as optional secondary parent.
+	 */
+	public void setParent2(boolean parent2) {
+		m_parent2 = parent2;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// "child2" flag
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private boolean m_child2;
+
+	/**
+	 * @return <code>true</code> if this parameter contains (optional) reference of child
+	 *         {@link JavaInfo}.
+	 *
+	 *         We use {@link #isParent2()} and {@link #isChild2()} to create parent/child link between
+	 *         components because they appear as parameters of this method invocation.
+	 */
+	public boolean isChild2() {
+		return m_child2;
+	}
+
+	/**
+	 * Marks this parameter as optional secondary child.
+	 */
+	public void setChild2(boolean child2) {
+		m_child2 = child2;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Property
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private String m_property;
+
+	/**
+	 * @return the id of property to which this parameter should be bound, may be <code>null</code>.
+	 */
+	public String getProperty() {
+		return m_property;
+	}
+
+	/**
+	 * Sets the id of property to which this parameter should be bound.
+	 */
+	public void setProperty(String property) {
+		m_property = property;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Converter
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private ExpressionConverter m_converter;
+	private ExpressionConverter m_converterDefault;
+
+	/**
+	 * @return the {@link ExpressionConverter} for this parameter.
+	 */
+	public ExpressionConverter getConverter() {
+		return m_converter != null ? m_converter : m_converterDefault;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private PropertyEditor m_editor;
+	private PropertyEditor m_editorDefault;
+
+	/**
+	 * Sets the {@link PropertyEditor} for this property.
+	 */
+	public void setEditor(PropertyEditor editor) {
+		m_editor = editor;
+	}
+
+	/**
+	 * @return the {@link PropertyEditor} for this property.
+	 */
+	public PropertyEditor getEditor() {
+		return m_editor != null ? m_editor : m_editorDefault;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Default source
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private String m_defaultSource;
+
+	/**
+	 * @return the default source for this parameter that should be used when user asks for
+	 *         "cleaning". Can return <code>null</code> that means that parameter can not be
+	 *         "cleaned".
+	 */
+	public String getDefaultSource() {
+		return m_defaultSource;
+	}
+
+	/**
+	 * Sets the default source for this parameter.
+	 */
+	public void setDefaultSource(String defaultSource) {
+		m_defaultSource = defaultSource;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/ToolkitDescriptionJava.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/ToolkitDescriptionJava.java
index d87fbdd2f..af1c0065c 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/ToolkitDescriptionJava.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/ToolkitDescriptionJava.java
@@ -19,13 +19,13 @@
  * @coverage core.model.description
  */
 public abstract class ToolkitDescriptionJava extends ToolkitDescription {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link GenerationSettings}.
-   */
-  public abstract GenerationSettings getGenerationSettings();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link GenerationSettings}.
+	 */
+	public abstract GenerationSettings getGenerationSettings();
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/factory/FactoryMethodDescription.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/factory/FactoryMethodDescription.java
index d4f39c8ab..7ffb5daa2 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/factory/FactoryMethodDescription.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/factory/FactoryMethodDescription.java
@@ -31,165 +31,165 @@
  * @coverage core.model.description
  */
 public final class FactoryMethodDescription extends MethodDescription {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FactoryMethodDescription(Class<?> declaringClass) {
-    super(declaringClass);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Factory
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private boolean m_factory;
-
-  /**
-   * @return <code>true</code> if this method should be handled as factory.
-   */
-  public boolean isFactory() {
-    return m_factory;
-  }
-
-  /**
-   * Sets the factory flag.
-   */
-  public void setFactory(boolean factory) {
-    m_factory = factory;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IMethod
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private IMethod m_modelMethod;
-
-  /**
-   * @return the {@link IMethod}, from JDT model.
-   */
-  public IMethod getModelMethod() {
-    return m_modelMethod;
-  }
-
-  /**
-   * Set the {@link IMethod}, from JDT model.
-   */
-  public void setModelMethod(IMethod modelMethod) {
-    m_modelMethod = modelMethod;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Icon
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Image m_icon;
-
-  /**
-   * @return the icon for this factory method.
-   */
-  public Image getIcon() {
-    return m_icon;
-  }
-
-  /**
-   * Sets the icon for this factory method.
-   */
-  public void setIcon(Image icon) {
-    m_icon = icon;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Name
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private String m_presentationName;
-
-  /**
-   * @return the name of this factory, to display for user. Usually <code>null</code>, but if may be
-   *         useful if the user is not using a wbp-palette.xml file.
-   */
-  public String getPresentationName() {
-    return m_presentationName;
-  }
-
-  /**
-   * Sets the name of this factory, to display for user.
-   */
-  public void setPresentationName(String presentationName) {
-    m_presentationName = presentationName;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Description
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private String m_description;
-
-  /**
-   * @return the description text for this factory method.
-   */
-  public String getDescription() {
-    return m_description;
-  }
-
-  /**
-   * Sets the description text for this factory method.
-   */
-  public void setDescription(String description) {
-    m_description = StringUtilities.normalizeWhitespaces(description);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parameters
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final Map<String, String> m_parameters = Maps.newTreeMap();
-
-  /**
-   * Adds new parameter.
-   * <p>
-   * These parameters are used to tweak type-level parameters from {@link ComponentDescription} for
-   * separate factory methods. For example factory returns {@link javax.swing.JComponent}, and we
-   * don't know, may be it has {@link java.awt.LayoutManager}, may be not. So, user should specify
-   * this on factory method level.
-   */
-  public void addParameter(String name, String value) {
-    m_parameters.put(name, value);
-  }
-
-  /**
-   * @return the value of parameter with given name.
-   */
-  public String getParameter(String name) {
-    return m_parameters.get(name);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Invocations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final List<CreationInvocationDescription> m_invocations = Lists.newArrayList();
-
-  /**
-   * @return the {@link List} of {@link CreationInvocationDescription}.
-   */
-  public List<CreationInvocationDescription> getInvocations() {
-    return m_invocations;
-  }
-
-  /**
-   * Adds the {@link CreationInvocationDescription}.
-   */
-  public void addInvocation(CreationInvocationDescription invocation) {
-    m_invocations.add(invocation);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FactoryMethodDescription(Class<?> declaringClass) {
+		super(declaringClass);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Factory
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private boolean m_factory;
+
+	/**
+	 * @return <code>true</code> if this method should be handled as factory.
+	 */
+	public boolean isFactory() {
+		return m_factory;
+	}
+
+	/**
+	 * Sets the factory flag.
+	 */
+	public void setFactory(boolean factory) {
+		m_factory = factory;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IMethod
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private IMethod m_modelMethod;
+
+	/**
+	 * @return the {@link IMethod}, from JDT model.
+	 */
+	public IMethod getModelMethod() {
+		return m_modelMethod;
+	}
+
+	/**
+	 * Set the {@link IMethod}, from JDT model.
+	 */
+	public void setModelMethod(IMethod modelMethod) {
+		m_modelMethod = modelMethod;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Icon
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Image m_icon;
+
+	/**
+	 * @return the icon for this factory method.
+	 */
+	public Image getIcon() {
+		return m_icon;
+	}
+
+	/**
+	 * Sets the icon for this factory method.
+	 */
+	public void setIcon(Image icon) {
+		m_icon = icon;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Name
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private String m_presentationName;
+
+	/**
+	 * @return the name of this factory, to display for user. Usually <code>null</code>, but if may be
+	 *         useful if the user is not using a wbp-palette.xml file.
+	 */
+	public String getPresentationName() {
+		return m_presentationName;
+	}
+
+	/**
+	 * Sets the name of this factory, to display for user.
+	 */
+	public void setPresentationName(String presentationName) {
+		m_presentationName = presentationName;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Description
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private String m_description;
+
+	/**
+	 * @return the description text for this factory method.
+	 */
+	public String getDescription() {
+		return m_description;
+	}
+
+	/**
+	 * Sets the description text for this factory method.
+	 */
+	public void setDescription(String description) {
+		m_description = StringUtilities.normalizeWhitespaces(description);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parameters
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final Map<String, String> m_parameters = Maps.newTreeMap();
+
+	/**
+	 * Adds new parameter.
+	 * <p>
+	 * These parameters are used to tweak type-level parameters from {@link ComponentDescription} for
+	 * separate factory methods. For example factory returns {@link javax.swing.JComponent}, and we
+	 * don't know, may be it has {@link java.awt.LayoutManager}, may be not. So, user should specify
+	 * this on factory method level.
+	 */
+	public void addParameter(String name, String value) {
+		m_parameters.put(name, value);
+	}
+
+	/**
+	 * @return the value of parameter with given name.
+	 */
+	public String getParameter(String name) {
+		return m_parameters.get(name);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Invocations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final List<CreationInvocationDescription> m_invocations = Lists.newArrayList();
+
+	/**
+	 * @return the {@link List} of {@link CreationInvocationDescription}.
+	 */
+	public List<CreationInvocationDescription> getInvocations() {
+		return m_invocations;
+	}
+
+	/**
+	 * Adds the {@link CreationInvocationDescription}.
+	 */
+	public void addInvocation(CreationInvocationDescription invocation) {
+		m_invocations.add(invocation);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/helpers/ComponentPresentationHelper.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/helpers/ComponentPresentationHelper.java
index f7ac8c64d..58df6c718 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/helpers/ComponentPresentationHelper.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/helpers/ComponentPresentationHelper.java
@@ -69,574 +69,574 @@
  * @coverage core.model.description
  */
 public final class ComponentPresentationHelper {
-  public static final String PALETTE_PRELOAD_JOBS = "palette pre-load";
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private ComponentPresentationHelper() {
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final Map<String, ComponentPresentationCache> m_presentationCaches =
-      Maps.newTreeMap();
-
-  /**
-   * @return the {@link ComponentPresentation} for component with given {@link Class}.
-   */
-  public static ComponentPresentation getPresentation(AstEditor editor,
-      String componentClassName,
-      String creationId) throws Exception {
-    String key = getKey(componentClassName, creationId);
-    // try to find cached presentation
-    ComponentPresentation presentation = null;
-    {
-      ComponentPresentationCache cache = getCache(editor);
-      presentation = cache.get(key);
-      if (presentation != null) {
-        return presentation;
-      }
-    }
-    // load component Class
-    Class<?> componentClass;
-    {
-      ClassLoader classLoader = EditorState.get(editor).getEditorLoader();
-      componentClass = classLoader.loadClass(componentClassName);
-    }
-    // try to load "fast" presentation
-    {
-      presentation = getFastPresentation(editor, componentClass, creationId);
-      if (presentation != null) {
-        return presentation;
-      }
-    }
-    // fall back to slow implementation
-    return getSlowPresentation(editor, componentClass, key);
-  }
-
-  private static ComponentPresentation getFastPresentation(AstEditor editor,
-      Class<?> componentClass,
-      String creationId) throws Exception {
-    EditorState state = EditorState.get(editor);
-    ILoadingContext context = EditorStateLoadingContext.get(state);
-    String componentClassName = componentClass.getName();
-    ResourceInfo resource =
-        DescriptionHelper.getComponentDescriptionResource(context, componentClass);
-    if (resource != null) {
-      // parse name and descriptions
-      ComponentParseHelper parseHelper = parseResource(resource.getURL());
-      // done, create presentation
-      String desc = parseHelper.getDescription(creationId);
-      String name = parseHelper.getName(componentClassName, creationId);
-      String key = getKey(componentClassName, creationId);
-      String toolkitId = getToolkitId(state, resource);
-      Image icon = getComponentImage(componentClass, creationId, context);
-      ComponentPresentation presentation =
-          new ComponentPresentation(key, toolkitId, name, desc, icon);
-      if (shouldCacheFast(resource.getBundle())) {
-        ComponentPresentationCache cache = getCache(editor);
-        cache.put(presentation);
-      }
-      return presentation;
-    }
-    return null;
-  }
-
-  private static String getToolkitId(EditorState state, ResourceInfo resource) {
-    ToolkitDescription toolkit = resource.getToolkit();
-    return toolkit == null ? state.getToolkitId() : toolkit.getId();
-  }
-
-  private static boolean shouldCacheFast(Bundle bundle) {
-    if (bundle != null) {
-      return bundle.getEntry("wbp-meta/.wbp-cache-presentations") != null;
-    }
-    return false;
-  }
-
-  private static Image getComponentImage(Class<?> clazz, String creationId, ILoadingContext context)
-      throws Exception {
-    String iconPath = getImageName(clazz.getName(), creationId);
-    Image image = DescriptionHelper.getIconImage(context, iconPath);
-    if (image == null) {
-      // no image for this type, use super type
-      return getComponentImage(clazz.getSuperclass(), null/*use default id*/, context);
-    }
-    return image;
-  }
-
-  private static byte[] getComponentImage(Bundle bundle,
-      String componentClassName,
-      String creationId) throws Exception {
-    String iconPath = "/wbp-meta/" + getImageName(componentClassName, creationId);
-    for (String ext : DescriptionHelper.ICON_EXTS) {
-      String iconName = iconPath + ext;
-      URL entry = bundle.getEntry(iconName);
-      if (entry != null) {
-        InputStream stream = entry.openStream();
-        return IOUtils2.readBytes(stream);
-      }
-    }
-    // not found
-    return null;
-  }
-
-  private static String getImageName(String componentClassName, String creationId) {
-    String imageName = componentClassName.replace('.', '/');
-    return creationId == null ? imageName : imageName + "_" + creationId;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Slow way
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static ComponentPresentation getSlowPresentation(AstEditor editor,
-      Class<?> componentClass,
-      String requiredKey) throws Exception {
-    ComponentPresentation presentationForKey = null;
-    ComponentDescription componentDescription =
-        ComponentDescriptionHelper.getDescription(editor, componentClass);
-    for (CreationDescription creationDescription : componentDescription.getCreations()) {
-      ComponentPresentation presentation =
-          createPresentation(componentDescription, creationDescription);
-      // cache if allowed
-      if (componentDescription.isPresentationCached()) {
-        ComponentPresentationCache cache = getCache(editor);
-        cache.put(presentation);
-      }
-      // check for required presentation
-      if (requiredKey.equals(presentation.getKey())) {
-        presentationForKey = presentation;
-      }
-    }
-    // done
-    return presentationForKey;
-  }
-
-  private static ComponentPresentation createPresentation(ComponentDescription componentDescription,
-      CreationDescription creationDescription) {
-    String componentKey = componentDescription.getComponentClass().getName();
-    String key = componentKey + " " + creationDescription.getId();
-    String toolkitId = componentDescription.getToolkit().getId();
-    String name = creationDescription.getName();
-    String description = creationDescription.getDescription();
-    Image icon = UiUtils.getCopy(creationDescription.getIcon());
-    return new ComponentPresentation(key, toolkitId, name, description, icon);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parsing component-related resources
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static ComponentParseHelper parseResource(URL url) throws Exception {
-    String xml = IOUtils2.readString(url.openStream());
-    ComponentParseHelper parseHelper = new ComponentParseHelper(xml);
-    QParser.parse(new StringReader(xml), parseHelper);
-    return parseHelper;
-  }
-
-  private static final class ComponentParseHelper extends QHandlerAdapter {
-    private String m_currentId = null;
-    private final Map<String, String> m_descriptions = Maps.newHashMap();
-    private final Map<String, String> m_names = Maps.newHashMap();
-    //
-    private final String m_xml;
-    private int m_descStart;
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public ComponentParseHelper(String xml) {
-      m_xml = xml;
-    }
-
-    @Override
-    public void startElement(int offset,
-        int length,
-        String name,
-        Map<String, String> attributes,
-        List<QAttribute> attrList,
-        boolean closed) throws Exception {
-      if ("description".equals(name)) {
-        m_descStart = offset + length;
-      }
-      if ("creation".equals(name)) {
-        String id = attributes.get("id");
-        m_currentId = id;
-        String compName = attributes.get("name");
-        m_names.put(id, compName);
-      }
-    }
-
-    @Override
-    public void endElement(int offset, int endOffset, String name) throws Exception {
-      if ("description".equals(name)) {
-        m_descriptions.put(m_currentId, m_xml.substring(m_descStart, offset));
-      }
-    }
-
-    public String getDescription(String creationId) {
-      String desc = m_descriptions.get(creationId);
-      if (desc == null) {
-        return "";
-      }
-      return desc;
-    }
-
-    public String getName(String className, String creationId) {
-      String name = m_names.get(creationId);
-      if (name == null) {
-        name = CodeUtils.getShortClass(className);
-      }
-      return name;
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Cache
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static String getKey(String componentClassName, String creationId) {
-    return componentClassName + " " + creationId;
-  }
-
-  private static ComponentPresentationCache getCache(AstEditor editor) throws Exception {
-    String toolkitId = EditorState.get(editor).getToolkitId();
-    return getCache(toolkitId);
-  }
-
-  private static ComponentPresentationCache getCache(String toolkitId) throws Exception {
-    synchronized (m_presentationCaches) {
-      ComponentPresentationCache cache = m_presentationCaches.get(toolkitId);
-      if (cache == null) {
-        cache = new ComponentPresentationCache(toolkitId);
-        m_presentationCaches.put(toolkitId, cache);
-        cache.load();
-      }
-      return cache;
-    }
-  }
-
-  /**
-   * Cache for {@link ComponentPresentation}s.
-   */
-  private static class ComponentPresentationCache {
-    private final String m_toolkitId;
-    private final List<Bundle> m_bundles = Lists.newArrayList();
-    private final Set<String> m_bundleCheckSums = Sets.newHashSet();
-    private final File m_cacheFile;
-    private final Map<String, ComponentPresentation> m_presentations = Maps.newTreeMap();
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public ComponentPresentationCache(String toolkitId) throws Exception {
-      m_toolkitId = toolkitId;
-      m_cacheFile = getCacheFile();
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Access
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public ComponentPresentation get(String key) {
-      return m_presentations.get(key);
-    }
-
-    public void put(ComponentPresentation presentation) throws Exception {
-      m_presentations.put(presentation.getKey(), presentation);
-      writeCacheEntry(presentation);
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Loading
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public void load() {
-      try {
-        prepareBundles();
-        prepareBundleCheckSums();
-        ensureCacheExistsAndNotStale();
-        loadFromCacheFile();
-      } catch (Throwable e) {
-        DesignerPlugin.log(e);
-        try {
-          m_cacheFile.delete();
-        } catch (Throwable e2) {
-        }
-      }
-    }
-
-    private void loadFromCacheFile() throws Exception {
-      InputStream stream = new FileInputStream(m_cacheFile);
-      try {
-        loadFromStream(stream);
-      } finally {
-        IOUtils.closeQuietly(stream);
-      }
-    }
-
-    private void loadFromStream(InputStream inputStream) throws Exception {
-      inputStream = new BufferedInputStream(inputStream);
-      DataInputStream dataInput = new DataInputStream(inputStream);
-      // skip check sums
-      readCheckSums(dataInput);
-      // read records
-      while (true) {
-        try {
-          String key = dataInput.readUTF();
-          String toolkitId = dataInput.readUTF();
-          String name = dataInput.readUTF();
-          String description = dataInput.readUTF();
-          byte[] iconBytes;
-          {
-            int bytesLength = dataInput.readInt();
-            iconBytes = new byte[bytesLength];
-            dataInput.readFully(iconBytes);
-          }
-          ComponentPresentation presentation =
-              new ComponentPresentation(key, toolkitId, name, description, iconBytes);
-          m_presentations.put(key, presentation);
-        } catch (EOFException e) {
-          break;
-        }
-      }
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Writing
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    private void writeCacheEntry(ComponentPresentation presentation) throws Exception {
-      RandomAccessFile randomAccessFile = new RandomAccessFile(m_cacheFile, "rw");
-      try {
-        randomAccessFile.seek(randomAccessFile.length());
-        randomAccessFile.writeUTF(presentation.getKey());
-        randomAccessFile.writeUTF(presentation.getToolkitId());
-        randomAccessFile.writeUTF(presentation.getName());
-        randomAccessFile.writeUTF(presentation.getDescription());
-        {
-          byte[] bytes = ImageUtils.getBytesPNG(presentation.getIcon());
-          randomAccessFile.writeInt(bytes.length);
-          randomAccessFile.write(bytes);
-        }
-      } finally {
-        randomAccessFile.close();
-      }
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Bundles
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    private void prepareBundles() {
-      for (IConfigurationElement toolkitElement : DescriptionHelper.getToolkitElements(m_toolkitId)) {
-        Bundle bundle = ExternalFactoriesHelper.getExtensionBundle(toolkitElement);
-        m_bundles.add(bundle);
-      }
-    }
-
-    private void prepareBundleCheckSums() throws Exception {
-      for (Bundle bundle : m_bundles) {
-        URL presentationsResource = bundle.getEntry("wbp-meta/.wbp-cache-presentations");
-        if (presentationsResource != null) {
-          String checkSum = IOUtils2.readString(presentationsResource.openStream());
-          m_bundleCheckSums.add(checkSum);
-        }
-      }
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Cache file management
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    private File getCacheFile() throws Exception {
-      File stateDirectory = DesignerPlugin.getDefault().getStateLocation().toFile();
-      File descriptionsDirectory = new File(stateDirectory, "descriptions");
-      File cacheFile = new File(descriptionsDirectory, m_toolkitId + ".cached-presentations.dat");
-      Files.createParentDirs(cacheFile);
-      return cacheFile;
-    }
-
-    private boolean cacheExistsAndNotStale() {
-      try {
-        if (m_cacheFile.exists()) {
-          // check that not stale
-          Set<String> cacheCheckSums = getCacheCheckSums();
-          if (m_bundleCheckSums.equals(cacheCheckSums)) {
-            return true;
-          }
-        }
-      } catch (Throwable e) {
-      }
-      return false;
-    }
-
-    private void ensureCacheExistsAndNotStale() throws Exception {
-      if (!cacheExistsAndNotStale()) {
-        try {
-          m_cacheFile.delete();
-        } catch (Throwable e2) {
-        }
-      }
-      // create new
-      if (!m_cacheFile.exists()) {
-        createNewCacheFile();
-      }
-    }
-
-    private void createNewCacheFile() throws Exception {
-      OutputStream outputStream = new BufferedOutputStream(new FileOutputStream(m_cacheFile));
-      DataOutputStream dataOutput = new DataOutputStream(outputStream);
-      try {
-        dataOutput.writeInt(m_bundleCheckSums.size());
-        for (String checkSum : m_bundleCheckSums) {
-          dataOutput.writeUTF(checkSum);
-        }
-      } finally {
-        IOUtils.closeQuietly(dataOutput);
-      }
-    }
-
-    private Set<String> getCacheCheckSums() throws Exception {
-      InputStream inputStream = new FileInputStream(m_cacheFile);
-      try {
-        inputStream = new BufferedInputStream(inputStream);
-        DataInputStream dataInput = new DataInputStream(inputStream);
-        return readCheckSums(dataInput);
-      } finally {
-        IOUtils.closeQuietly(inputStream);
-      }
-    }
-
-    private static Set<String> readCheckSums(DataInputStream dataInput) throws IOException {
-      Set<String> checkSums = Sets.newHashSet();
-      int sumCount = dataInput.readInt();
-      for (int i = 0; i < sumCount; i++) {
-        String checkSum = dataInput.readUTF();
-        checkSums.add(checkSum);
-      }
-      return checkSums;
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Perform light scanning and fill cache for all available entries
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Creates and schedules the job for pre-loading the cache of presentations based on toolkit name.
-   */
-  public static void scheduleFillingPresentationCache(final String toolkitId) {
-    Job job = new Job("Updating WindowBuilder palette...") {
-      @Override
-      protected IStatus run(IProgressMonitor monitor) {
-        try {
-          // ensure cache
-          ComponentPresentationCache cache = getCache(toolkitId);
-          if (monitor.isCanceled()) {
-            // it OK
-            return Status.OK_STATUS;
-          }
-          // proceed with presentations
-          fillPresentations(cache, toolkitId, monitor);
-        } catch (Exception e) {
-          DesignerPlugin.log(e);
-        }
-        return Status.OK_STATUS;
-      }
-
-      @Override
-      public boolean belongsTo(Object family) {
-        return PALETTE_PRELOAD_JOBS.equals(family);
-      }
-    };
-    job.schedule();
-  }
-
-  private static void fillPresentations(ComponentPresentationCache cache,
-      String toolkitId,
-      IProgressMonitor monitor) throws Exception {
-    Map<Bundle, List<IConfigurationElement>> bundles = Maps.newHashMap();
-    // prepare bundles and entries
-    for (IConfigurationElement toolkitElement : DescriptionHelper.getToolkitElements(toolkitId)) {
-      IConfigurationElement[] elements = toolkitElement.getChildren("palette");
-      List<IConfigurationElement> paletteElements = Lists.newArrayList();
-      Collections.addAll(paletteElements, elements);
-      bundles.put(ExternalFactoriesHelper.getExtensionBundle(toolkitElement), paletteElements);
-    }
-    // traverse and fetch presentations
-    for (Map.Entry<Bundle, List<IConfigurationElement>> entry : bundles.entrySet()) {
-      Bundle bundle = entry.getKey();
-      for (IConfigurationElement paletteElement : entry.getValue()) {
-        for (IConfigurationElement categoryElement : paletteElement.getChildren("category")) {
-          for (IConfigurationElement element : categoryElement.getChildren()) {
-            // get 'component's only
-            if ("component".equals(element.getName())) {
-              String className = ExternalFactoriesHelper.getRequiredAttribute(element, "class");
-              String creationId = element.getAttribute("creationId");
-              if (monitor.isCanceled()) {
-                return;
-              }
-              fetchLightPresentation(bundle, cache, toolkitId, className, creationId);
-            }
-          }
-        }
-      }
-    }
-  }
-
-  /**
-   * Finds and parses *.wbp-component.xml files. If none found or an icon is absent then does
-   * nothing.
-   */
-  private static void fetchLightPresentation(Bundle bundle,
-      ComponentPresentationCache cache,
-      String toolkitId,
-      String componentClassName,
-      String creationId) throws Exception {
-    if (cache.get(getKey(componentClassName, creationId)) != null) {
-      // already in cache, don't parse
-      return;
-    }
-    // parse name and descriptions
-    String resourceName =
-        "/wbp-meta/" + componentClassName.replace('.', '/') + ".wbp-component.xml";
-    URL resourceEntry = bundle.getEntry(resourceName);
-    if (resourceEntry != null) {
-      // parse
-      ComponentParseHelper parseHelper = parseResource(resourceEntry);
-      // done, create presentation
-      String desc = parseHelper.getDescription(creationId);
-      String name = parseHelper.getName(componentClassName, creationId);
-      String key = getKey(componentClassName, creationId);
-      byte[] iconBytes = getComponentImage(bundle, componentClassName, creationId);
-      if (iconBytes == null) {
-        // no image -- no presentation ;)
-        return;
-      }
-      ComponentPresentation presentation =
-          new ComponentPresentation(key, toolkitId, name, desc, iconBytes);
-      cache.put(presentation);
-    }
-  }
+	public static final String PALETTE_PRELOAD_JOBS = "palette pre-load";
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private ComponentPresentationHelper() {
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final Map<String, ComponentPresentationCache> m_presentationCaches =
+			Maps.newTreeMap();
+
+	/**
+	 * @return the {@link ComponentPresentation} for component with given {@link Class}.
+	 */
+	public static ComponentPresentation getPresentation(AstEditor editor,
+			String componentClassName,
+			String creationId) throws Exception {
+		String key = getKey(componentClassName, creationId);
+		// try to find cached presentation
+		ComponentPresentation presentation = null;
+		{
+			ComponentPresentationCache cache = getCache(editor);
+			presentation = cache.get(key);
+			if (presentation != null) {
+				return presentation;
+			}
+		}
+		// load component Class
+		Class<?> componentClass;
+		{
+			ClassLoader classLoader = EditorState.get(editor).getEditorLoader();
+			componentClass = classLoader.loadClass(componentClassName);
+		}
+		// try to load "fast" presentation
+		{
+			presentation = getFastPresentation(editor, componentClass, creationId);
+			if (presentation != null) {
+				return presentation;
+			}
+		}
+		// fall back to slow implementation
+		return getSlowPresentation(editor, componentClass, key);
+	}
+
+	private static ComponentPresentation getFastPresentation(AstEditor editor,
+			Class<?> componentClass,
+			String creationId) throws Exception {
+		EditorState state = EditorState.get(editor);
+		ILoadingContext context = EditorStateLoadingContext.get(state);
+		String componentClassName = componentClass.getName();
+		ResourceInfo resource =
+				DescriptionHelper.getComponentDescriptionResource(context, componentClass);
+		if (resource != null) {
+			// parse name and descriptions
+			ComponentParseHelper parseHelper = parseResource(resource.getURL());
+			// done, create presentation
+			String desc = parseHelper.getDescription(creationId);
+			String name = parseHelper.getName(componentClassName, creationId);
+			String key = getKey(componentClassName, creationId);
+			String toolkitId = getToolkitId(state, resource);
+			Image icon = getComponentImage(componentClass, creationId, context);
+			ComponentPresentation presentation =
+					new ComponentPresentation(key, toolkitId, name, desc, icon);
+			if (shouldCacheFast(resource.getBundle())) {
+				ComponentPresentationCache cache = getCache(editor);
+				cache.put(presentation);
+			}
+			return presentation;
+		}
+		return null;
+	}
+
+	private static String getToolkitId(EditorState state, ResourceInfo resource) {
+		ToolkitDescription toolkit = resource.getToolkit();
+		return toolkit == null ? state.getToolkitId() : toolkit.getId();
+	}
+
+	private static boolean shouldCacheFast(Bundle bundle) {
+		if (bundle != null) {
+			return bundle.getEntry("wbp-meta/.wbp-cache-presentations") != null;
+		}
+		return false;
+	}
+
+	private static Image getComponentImage(Class<?> clazz, String creationId, ILoadingContext context)
+			throws Exception {
+		String iconPath = getImageName(clazz.getName(), creationId);
+		Image image = DescriptionHelper.getIconImage(context, iconPath);
+		if (image == null) {
+			// no image for this type, use super type
+			return getComponentImage(clazz.getSuperclass(), null/*use default id*/, context);
+		}
+		return image;
+	}
+
+	private static byte[] getComponentImage(Bundle bundle,
+			String componentClassName,
+			String creationId) throws Exception {
+		String iconPath = "/wbp-meta/" + getImageName(componentClassName, creationId);
+		for (String ext : DescriptionHelper.ICON_EXTS) {
+			String iconName = iconPath + ext;
+			URL entry = bundle.getEntry(iconName);
+			if (entry != null) {
+				InputStream stream = entry.openStream();
+				return IOUtils2.readBytes(stream);
+			}
+		}
+		// not found
+		return null;
+	}
+
+	private static String getImageName(String componentClassName, String creationId) {
+		String imageName = componentClassName.replace('.', '/');
+		return creationId == null ? imageName : imageName + "_" + creationId;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Slow way
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static ComponentPresentation getSlowPresentation(AstEditor editor,
+			Class<?> componentClass,
+			String requiredKey) throws Exception {
+		ComponentPresentation presentationForKey = null;
+		ComponentDescription componentDescription =
+				ComponentDescriptionHelper.getDescription(editor, componentClass);
+		for (CreationDescription creationDescription : componentDescription.getCreations()) {
+			ComponentPresentation presentation =
+					createPresentation(componentDescription, creationDescription);
+			// cache if allowed
+			if (componentDescription.isPresentationCached()) {
+				ComponentPresentationCache cache = getCache(editor);
+				cache.put(presentation);
+			}
+			// check for required presentation
+			if (requiredKey.equals(presentation.getKey())) {
+				presentationForKey = presentation;
+			}
+		}
+		// done
+		return presentationForKey;
+	}
+
+	private static ComponentPresentation createPresentation(ComponentDescription componentDescription,
+			CreationDescription creationDescription) {
+		String componentKey = componentDescription.getComponentClass().getName();
+		String key = componentKey + " " + creationDescription.getId();
+		String toolkitId = componentDescription.getToolkit().getId();
+		String name = creationDescription.getName();
+		String description = creationDescription.getDescription();
+		Image icon = UiUtils.getCopy(creationDescription.getIcon());
+		return new ComponentPresentation(key, toolkitId, name, description, icon);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parsing component-related resources
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static ComponentParseHelper parseResource(URL url) throws Exception {
+		String xml = IOUtils2.readString(url.openStream());
+		ComponentParseHelper parseHelper = new ComponentParseHelper(xml);
+		QParser.parse(new StringReader(xml), parseHelper);
+		return parseHelper;
+	}
+
+	private static final class ComponentParseHelper extends QHandlerAdapter {
+		private String m_currentId = null;
+		private final Map<String, String> m_descriptions = Maps.newHashMap();
+		private final Map<String, String> m_names = Maps.newHashMap();
+		//
+		private final String m_xml;
+		private int m_descStart;
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public ComponentParseHelper(String xml) {
+			m_xml = xml;
+		}
+
+		@Override
+		public void startElement(int offset,
+				int length,
+				String name,
+				Map<String, String> attributes,
+				List<QAttribute> attrList,
+				boolean closed) throws Exception {
+			if ("description".equals(name)) {
+				m_descStart = offset + length;
+			}
+			if ("creation".equals(name)) {
+				String id = attributes.get("id");
+				m_currentId = id;
+				String compName = attributes.get("name");
+				m_names.put(id, compName);
+			}
+		}
+
+		@Override
+		public void endElement(int offset, int endOffset, String name) throws Exception {
+			if ("description".equals(name)) {
+				m_descriptions.put(m_currentId, m_xml.substring(m_descStart, offset));
+			}
+		}
+
+		public String getDescription(String creationId) {
+			String desc = m_descriptions.get(creationId);
+			if (desc == null) {
+				return "";
+			}
+			return desc;
+		}
+
+		public String getName(String className, String creationId) {
+			String name = m_names.get(creationId);
+			if (name == null) {
+				name = CodeUtils.getShortClass(className);
+			}
+			return name;
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Cache
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static String getKey(String componentClassName, String creationId) {
+		return componentClassName + " " + creationId;
+	}
+
+	private static ComponentPresentationCache getCache(AstEditor editor) throws Exception {
+		String toolkitId = EditorState.get(editor).getToolkitId();
+		return getCache(toolkitId);
+	}
+
+	private static ComponentPresentationCache getCache(String toolkitId) throws Exception {
+		synchronized (m_presentationCaches) {
+			ComponentPresentationCache cache = m_presentationCaches.get(toolkitId);
+			if (cache == null) {
+				cache = new ComponentPresentationCache(toolkitId);
+				m_presentationCaches.put(toolkitId, cache);
+				cache.load();
+			}
+			return cache;
+		}
+	}
+
+	/**
+	 * Cache for {@link ComponentPresentation}s.
+	 */
+	private static class ComponentPresentationCache {
+		private final String m_toolkitId;
+		private final List<Bundle> m_bundles = Lists.newArrayList();
+		private final Set<String> m_bundleCheckSums = Sets.newHashSet();
+		private final File m_cacheFile;
+		private final Map<String, ComponentPresentation> m_presentations = Maps.newTreeMap();
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public ComponentPresentationCache(String toolkitId) throws Exception {
+			m_toolkitId = toolkitId;
+			m_cacheFile = getCacheFile();
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Access
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public ComponentPresentation get(String key) {
+			return m_presentations.get(key);
+		}
+
+		public void put(ComponentPresentation presentation) throws Exception {
+			m_presentations.put(presentation.getKey(), presentation);
+			writeCacheEntry(presentation);
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Loading
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public void load() {
+			try {
+				prepareBundles();
+				prepareBundleCheckSums();
+				ensureCacheExistsAndNotStale();
+				loadFromCacheFile();
+			} catch (Throwable e) {
+				DesignerPlugin.log(e);
+				try {
+					m_cacheFile.delete();
+				} catch (Throwable e2) {
+				}
+			}
+		}
+
+		private void loadFromCacheFile() throws Exception {
+			InputStream stream = new FileInputStream(m_cacheFile);
+			try {
+				loadFromStream(stream);
+			} finally {
+				IOUtils.closeQuietly(stream);
+			}
+		}
+
+		private void loadFromStream(InputStream inputStream) throws Exception {
+			inputStream = new BufferedInputStream(inputStream);
+			DataInputStream dataInput = new DataInputStream(inputStream);
+			// skip check sums
+			readCheckSums(dataInput);
+			// read records
+			while (true) {
+				try {
+					String key = dataInput.readUTF();
+					String toolkitId = dataInput.readUTF();
+					String name = dataInput.readUTF();
+					String description = dataInput.readUTF();
+					byte[] iconBytes;
+					{
+						int bytesLength = dataInput.readInt();
+						iconBytes = new byte[bytesLength];
+						dataInput.readFully(iconBytes);
+					}
+					ComponentPresentation presentation =
+							new ComponentPresentation(key, toolkitId, name, description, iconBytes);
+					m_presentations.put(key, presentation);
+				} catch (EOFException e) {
+					break;
+				}
+			}
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Writing
+		//
+		////////////////////////////////////////////////////////////////////////////
+		private void writeCacheEntry(ComponentPresentation presentation) throws Exception {
+			RandomAccessFile randomAccessFile = new RandomAccessFile(m_cacheFile, "rw");
+			try {
+				randomAccessFile.seek(randomAccessFile.length());
+				randomAccessFile.writeUTF(presentation.getKey());
+				randomAccessFile.writeUTF(presentation.getToolkitId());
+				randomAccessFile.writeUTF(presentation.getName());
+				randomAccessFile.writeUTF(presentation.getDescription());
+				{
+					byte[] bytes = ImageUtils.getBytesPNG(presentation.getIcon());
+					randomAccessFile.writeInt(bytes.length);
+					randomAccessFile.write(bytes);
+				}
+			} finally {
+				randomAccessFile.close();
+			}
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Bundles
+		//
+		////////////////////////////////////////////////////////////////////////////
+		private void prepareBundles() {
+			for (IConfigurationElement toolkitElement : DescriptionHelper.getToolkitElements(m_toolkitId)) {
+				Bundle bundle = ExternalFactoriesHelper.getExtensionBundle(toolkitElement);
+				m_bundles.add(bundle);
+			}
+		}
+
+		private void prepareBundleCheckSums() throws Exception {
+			for (Bundle bundle : m_bundles) {
+				URL presentationsResource = bundle.getEntry("wbp-meta/.wbp-cache-presentations");
+				if (presentationsResource != null) {
+					String checkSum = IOUtils2.readString(presentationsResource.openStream());
+					m_bundleCheckSums.add(checkSum);
+				}
+			}
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Cache file management
+		//
+		////////////////////////////////////////////////////////////////////////////
+		private File getCacheFile() throws Exception {
+			File stateDirectory = DesignerPlugin.getDefault().getStateLocation().toFile();
+			File descriptionsDirectory = new File(stateDirectory, "descriptions");
+			File cacheFile = new File(descriptionsDirectory, m_toolkitId + ".cached-presentations.dat");
+			Files.createParentDirs(cacheFile);
+			return cacheFile;
+		}
+
+		private boolean cacheExistsAndNotStale() {
+			try {
+				if (m_cacheFile.exists()) {
+					// check that not stale
+					Set<String> cacheCheckSums = getCacheCheckSums();
+					if (m_bundleCheckSums.equals(cacheCheckSums)) {
+						return true;
+					}
+				}
+			} catch (Throwable e) {
+			}
+			return false;
+		}
+
+		private void ensureCacheExistsAndNotStale() throws Exception {
+			if (!cacheExistsAndNotStale()) {
+				try {
+					m_cacheFile.delete();
+				} catch (Throwable e2) {
+				}
+			}
+			// create new
+			if (!m_cacheFile.exists()) {
+				createNewCacheFile();
+			}
+		}
+
+		private void createNewCacheFile() throws Exception {
+			OutputStream outputStream = new BufferedOutputStream(new FileOutputStream(m_cacheFile));
+			DataOutputStream dataOutput = new DataOutputStream(outputStream);
+			try {
+				dataOutput.writeInt(m_bundleCheckSums.size());
+				for (String checkSum : m_bundleCheckSums) {
+					dataOutput.writeUTF(checkSum);
+				}
+			} finally {
+				IOUtils.closeQuietly(dataOutput);
+			}
+		}
+
+		private Set<String> getCacheCheckSums() throws Exception {
+			InputStream inputStream = new FileInputStream(m_cacheFile);
+			try {
+				inputStream = new BufferedInputStream(inputStream);
+				DataInputStream dataInput = new DataInputStream(inputStream);
+				return readCheckSums(dataInput);
+			} finally {
+				IOUtils.closeQuietly(inputStream);
+			}
+		}
+
+		private static Set<String> readCheckSums(DataInputStream dataInput) throws IOException {
+			Set<String> checkSums = Sets.newHashSet();
+			int sumCount = dataInput.readInt();
+			for (int i = 0; i < sumCount; i++) {
+				String checkSum = dataInput.readUTF();
+				checkSums.add(checkSum);
+			}
+			return checkSums;
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Perform light scanning and fill cache for all available entries
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Creates and schedules the job for pre-loading the cache of presentations based on toolkit name.
+	 */
+	public static void scheduleFillingPresentationCache(final String toolkitId) {
+		Job job = new Job("Updating WindowBuilder palette...") {
+			@Override
+			protected IStatus run(IProgressMonitor monitor) {
+				try {
+					// ensure cache
+					ComponentPresentationCache cache = getCache(toolkitId);
+					if (monitor.isCanceled()) {
+						// it OK
+						return Status.OK_STATUS;
+					}
+					// proceed with presentations
+					fillPresentations(cache, toolkitId, monitor);
+				} catch (Exception e) {
+					DesignerPlugin.log(e);
+				}
+				return Status.OK_STATUS;
+			}
+
+			@Override
+			public boolean belongsTo(Object family) {
+				return PALETTE_PRELOAD_JOBS.equals(family);
+			}
+		};
+		job.schedule();
+	}
+
+	private static void fillPresentations(ComponentPresentationCache cache,
+			String toolkitId,
+			IProgressMonitor monitor) throws Exception {
+		Map<Bundle, List<IConfigurationElement>> bundles = Maps.newHashMap();
+		// prepare bundles and entries
+		for (IConfigurationElement toolkitElement : DescriptionHelper.getToolkitElements(toolkitId)) {
+			IConfigurationElement[] elements = toolkitElement.getChildren("palette");
+			List<IConfigurationElement> paletteElements = Lists.newArrayList();
+			Collections.addAll(paletteElements, elements);
+			bundles.put(ExternalFactoriesHelper.getExtensionBundle(toolkitElement), paletteElements);
+		}
+		// traverse and fetch presentations
+		for (Map.Entry<Bundle, List<IConfigurationElement>> entry : bundles.entrySet()) {
+			Bundle bundle = entry.getKey();
+			for (IConfigurationElement paletteElement : entry.getValue()) {
+				for (IConfigurationElement categoryElement : paletteElement.getChildren("category")) {
+					for (IConfigurationElement element : categoryElement.getChildren()) {
+						// get 'component's only
+						if ("component".equals(element.getName())) {
+							String className = ExternalFactoriesHelper.getRequiredAttribute(element, "class");
+							String creationId = element.getAttribute("creationId");
+							if (monitor.isCanceled()) {
+								return;
+							}
+							fetchLightPresentation(bundle, cache, toolkitId, className, creationId);
+						}
+					}
+				}
+			}
+		}
+	}
+
+	/**
+	 * Finds and parses *.wbp-component.xml files. If none found or an icon is absent then does
+	 * nothing.
+	 */
+	private static void fetchLightPresentation(Bundle bundle,
+			ComponentPresentationCache cache,
+			String toolkitId,
+			String componentClassName,
+			String creationId) throws Exception {
+		if (cache.get(getKey(componentClassName, creationId)) != null) {
+			// already in cache, don't parse
+			return;
+		}
+		// parse name and descriptions
+		String resourceName =
+				"/wbp-meta/" + componentClassName.replace('.', '/') + ".wbp-component.xml";
+		URL resourceEntry = bundle.getEntry(resourceName);
+		if (resourceEntry != null) {
+			// parse
+			ComponentParseHelper parseHelper = parseResource(resourceEntry);
+			// done, create presentation
+			String desc = parseHelper.getDescription(creationId);
+			String name = parseHelper.getName(componentClassName, creationId);
+			String key = getKey(componentClassName, creationId);
+			byte[] iconBytes = getComponentImage(bundle, componentClassName, creationId);
+			if (iconBytes == null) {
+				// no image -- no presentation ;)
+				return;
+			}
+			ComponentPresentation presentation =
+					new ComponentPresentation(key, toolkitId, name, desc, iconBytes);
+			cache.put(presentation);
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/helpers/DescriptionHelper.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/helpers/DescriptionHelper.java
index e1ff1eab7..64472b43e 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/helpers/DescriptionHelper.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/helpers/DescriptionHelper.java
@@ -52,481 +52,481 @@
  * @coverage core.model.description
  */
 public final class DescriptionHelper {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ClassResourceInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds {@link ClassResourceInfo}'s for given component class and all its super classes and
-   * interfaces.
-   */
-  public static void addDescriptionResources(LinkedList<ClassResourceInfo> descriptions,
-      ILoadingContext context,
-      Class<?> currentClass) throws Exception {
-    if (currentClass != null) {
-      ResourceInfo resource = getComponentDescriptionResource(context, currentClass);
-      if (resource != null) {
-        validateComponentDescription(resource);
-        descriptions.addFirst(new ClassResourceInfo(currentClass, resource));
-      }
-      // handle interfaces
-      for (Class<?> interfaceClass : currentClass.getInterfaces()) {
-        addDescriptionResources(descriptions, context, interfaceClass);
-      }
-      // handle super class
-      addDescriptionResources(descriptions, context, currentClass.getSuperclass());
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Validation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static Schema m_wbpComponentSchema;
-
-  /**
-   * Validates <code>*.wbp-component.xml</code> against its schema.
-   */
-  public static synchronized void validateComponentDescription(ResourceInfo resource)
-      throws Exception {
-    // validate on developers computers
-    if (EnvironmentUtils.isTestingTime()) {
-      // prepare Schema
-      if (m_wbpComponentSchema == null) {
-        SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
-        InputStream schemaStream = DesignerPlugin.getFile("schema/wbp-component.xsd");
-        m_wbpComponentSchema = factory.newSchema(new StreamSource(schemaStream));
-      }
-      // validate
-      InputStream contents = resource.getURL().openStream();
-      try {
-        Validator validator = m_wbpComponentSchema.newValidator();
-        validator.validate(new StreamSource(contents));
-      } catch (Throwable e) {
-        throw new Exception("Exception during validation " + resource.getURL(), e);
-      } finally {
-        contents.close();
-      }
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final String[] ICON_EXTS = new String[]{".png", ".gif"};
-
-  /**
-   * @return the icon {@link Image} for given component.
-   */
-  public static Image getIconImage(ILoadingContext context, Class<?> componentClass)
-      throws Exception {
-    return getIconImage(context, componentClass, StringUtils.EMPTY);
-  }
-
-  /**
-   * Attempts to load icon with one of the supported extensions from description resources.
-   *
-   * @param context
-   *          the {@link EditorState} for accessing resource from {@link ClassLoader}.
-   * @param componentClass
-   *          the {@link Class} of component, for example <code>"javax.swing.JButton"</code>.
-   * @param suffix
-   *          optional suffix, may be empty, but not <code>null</code>. We use it loading
-   *          creation-specific icons.
-   *
-   * @return the icon {@link Image}, or <code>null</code>.
-   */
-  public static Image getIconImage(ILoadingContext context, Class<?> componentClass, String suffix)
-      throws Exception {
-    String iconPath = componentClass.getName().replace('.', '/') + suffix;
-    return getIconImage(context, iconPath);
-  }
-
-  /**
-   * Attempt to load icon with one of the supported extensions from description resources.
-   *
-   * @param context
-   *          the {@link EditorState} for accessing resource from {@link ClassLoader}.
-   * @param iconPath
-   *          the path to icon file, without extension.
-   *
-   * @return the icon {@link Image}, or <code>null</code>.
-   */
-  public static Image getIconImage(ILoadingContext context, String iconPath) throws Exception {
-    for (String ext : ICON_EXTS) {
-      String iconName = iconPath + ext;
-      ResourceInfo resourceInfo = getResourceInfo0(context, iconName, true);
-      if (resourceInfo != null) {
-        InputStream stream = resourceInfo.getURL().openStream();
-        try {
-          return new Image(null, stream);
-        } finally {
-          stream.close();
-        }
-      }
-    }
-    // not found
-    return null;
-  }
-
-  /**
-   * @return <code>true</code> if there is <code>.wbp-forced-toolkit.txt</code> file exactly for
-   *         given component.
-   */
-  public static boolean hasForcedToolkitForComponent(ILoadingContext context,
-      String toolkitId,
-      String componentClassName) throws Exception {
-    String name = componentClassName.replace('.', '/') + ".wbp-forced-toolkit.txt";
-    ResourceInfo resourceInfo = getResourceInfo0(context, name, true);
-    if (resourceInfo != null) {
-      return IOUtils2.readString(resourceInfo.getURL().openStream()).equals(toolkitId);
-    }
-    return false;
-  }
-
-  /**
-   * @return <code>true</code> if there is <code>.wbp-component.xml</code> file exactly for given
-   *         component.
-   */
-  public static boolean hasComponentDescriptionResource(ILoadingContext context,
-      Class<?> componentClass) throws Exception {
-    return getComponentDescriptionResource(context, componentClass) != null;
-  }
-
-  /**
-   * @return the {@link ResourceInfo} with description file of given component in project
-   *         {@link ClassLoader}'s.
-   */
-  public static ResourceInfo getComponentDescriptionResource(ILoadingContext context,
-      Class<?> componentClass) throws Exception {
-    String name = componentClass.getName().replace('.', '/') + ".wbp-component.xml";
-    return getResourceInfo(context, componentClass, name);
-  }
-
-  /**
-   * Same as {@link #getResourceInfo0(EditorState, String)}, but tries first versions corresponding
-   * to toolkit of given {@link Class}.
-   *
-   * @return the {@link ResourceInfo} for resource with given name or <code>null</code> if no such
-   *         resource found.
-   */
-  static ResourceInfo getResourceInfo(ILoadingContext context,
-      Class<?> resourceClass,
-      String defaultPath) throws Exception {
-    // try to find versioned path
-    for (IDescriptionVersionsProvider provider : context.getDescriptionVersionsProviders()) {
-      List<String> versions = provider.getVersions(resourceClass);
-      for (String version : versions) {
-        String versionedPath = version + "/" + defaultPath;
-        ResourceInfo resource = getResourceInfo0(context, versionedPath, false);
-        if (resource != null) {
-          return resource;
-        }
-      }
-    }
-    // use default path XXX
-    return getResourceInfo0(context, defaultPath, true);
-  }
-
-  /**
-   * This method tries to find resource in following places:
-   * <p>
-   * <ol>
-   * <li>Project {@link ClassLoader} from {@link EditorState}.
-   * <li>Plugins that contribute toolkits, from "wbp-meta".
-   * </ol>
-   *
-   * @return the {@link ResourceInfo} for resource with given name or <code>null</code> if no such
-   *         resource found.
-   */
-  @SuppressWarnings("unchecked")
-  private static ResourceInfo getResourceInfo0(ILoadingContext context,
-      String name,
-      boolean tryContext) throws Exception {
-    // cache with results
-    Map<String, ResourceInfo> cacheResult;
-    {
-      String key = "ComponentDescriptionHelper.getResourceInfo0.hasResult";
-      cacheResult = (Map<String, ResourceInfo>) context.getGlobalValue(key);
-      if (cacheResult == null) {
-        cacheResult = Maps.newHashMap();
-        context.putGlobalValue(key, cacheResult);
-      }
-      ResourceInfo result = cacheResult.get(name);
-      if (result != null) {
-        return result;
-      }
-    }
-    // cache without results
-    Set<String> cacheNoResult;
-    {
-      String key = "ComponentDescriptionHelper.getResourceInfo0.noResult";
-      cacheNoResult = (Set<String>) context.getGlobalValue(key);
-      if (cacheNoResult == null) {
-        cacheNoResult = Sets.newHashSet();
-        context.putGlobalValue(key, cacheNoResult);
-      }
-      if (cacheNoResult.contains(name)) {
-        return null;
-      }
-    }
-    // prepare result XXX
-    ResourceInfo result = getResourceInfo00(context, name, tryContext);
-    // fill caches
-    if (result != null) {
-      cacheResult.put(name, result);
-    } else {
-      cacheNoResult.add(name);
-    }
-    // done
-    return result;
-  }
-
-  /**
-   * Non-caching implementation of {@link #getResourceInfo0(EditorState, String)}.
-   *
-   * @param tryContext
-   *          is <code>false</code> if {@link ILoadingContext} should not be used, because version
-   *          was attached to the name, and custom components can not have version.
-   */
-  private static ResourceInfo getResourceInfo00(ILoadingContext context,
-      String name,
-      boolean tryContext) throws Exception {
-    // check bundles with toolkits
-    {
-      ResourceInfo resource = getResourceInfo(name, context.getToolkitId());
-      if (resource != null) {
-        return resource;
-      }
-    }
-    // may be standard resource
-    for (IConfigurationElement toolkitElement : DescriptionHelper.getToolkitElements()) {
-      if (hasMatchingResourcePrefix(toolkitElement, name)) {
-        return null;
-      }
-    }
-    // ask context XXX
-    if (tryContext) {
-      URL resource = context.getResource(name);
-      if (resource != null) {
-        return new ResourceInfo(null, null, resource);
-      }
-    }
-    // no resource
-    return null;
-  }
-
-  /**
-   * @param toolkitElement
-   *          the {@link IConfigurationElement} with toolkit description.
-   * @param name
-   *          the name of resource.
-   * @return the {@link ResourceInfo} for resource with given name or <code>null</code> if no such
-   *         resource found in given plugin.
-   */
-  private static ResourceInfo getResourceInfo(IConfigurationElement toolkitElement, String name)
-      throws Exception {
-    if (!canHaveResource(toolkitElement, name)) {
-      return null;
-    }
-    String toolkitId = ExternalFactoriesHelper.getRequiredAttribute(toolkitElement, "id");
-    Bundle bundle = ExternalFactoriesHelper.getExtensionBundle(toolkitElement);
-    return getResourceInfo(toolkitId, bundle, name);
-  }
-
-  /**
-   * @return <code>true</code> if toolkit {@link IConfigurationElement} has description that it may
-   *         be has resource with given name. This allows us prevent checking many {@link Bundle}s
-   *         and get big speed up gain.
-   */
-  private static boolean canHaveResource(IConfigurationElement toolkitElement, String name) {
-    IConfigurationElement[] prefixElements = getResourcePrefixElements(toolkitElement);
-    if (prefixElements.length != 0) {
-      return hasMatchingResourcePrefix(prefixElements, name);
-    }
-    return true;
-  }
-
-  /**
-   * @return <code>true</code> if toolkit has "resourcePrefix" which matches given name.
-   */
-  private static boolean hasMatchingResourcePrefix(IConfigurationElement toolkitElement, String name) {
-    IConfigurationElement[] prefixElements = getResourcePrefixElements(toolkitElement);
-    return hasMatchingResourcePrefix(prefixElements, name);
-  }
-
-  /**
-   * @return the "resourcePrefix" elements of given toolkit.
-   */
-  private static IConfigurationElement[] getResourcePrefixElements(IConfigurationElement toolkitElement) {
-    IConfigurationElement[] prefixContainers = toolkitElement.getChildren("resourcePrefixes");
-    for (IConfigurationElement containerElement : prefixContainers) {
-      return containerElement.getChildren("resourcePrefix");
-    }
-    return new IConfigurationElement[0];
-  }
-
-  /**
-   * @return <code>true</code> if one of the prefixes matches given name.
-   */
-  private static boolean hasMatchingResourcePrefix(IConfigurationElement[] prefixElements,
-      String name) {
-    for (IConfigurationElement prefixElement : prefixElements) {
-      String prefix = prefixElement.getValue().replace('.', '/');
-      // direct prefix
-      if (name.startsWith(prefix)) {
-        return true;
-      }
-      // "name" can have version prefix, remove it and try again
-      String nameWithoutVersion = StringUtils.substringAfter(name, "/");
-      if (nameWithoutVersion.startsWith(prefix)) {
-        return true;
-      }
-    }
-    return false;
-  }
-
-  /**
-   * @return the {@link ResourceInfo} for resource with given name or <code>null</code> if no such
-   *         resource found in given plugin.
-   */
-  public static ResourceInfo getResourceInfo(String toolkitId, Bundle bundle, String name)
-      throws Exception {
-    // check that resource exists in bundle
-    URL resource = bundle.getEntry("wbp-meta/" + name);
-    if (resource != null) {
-      ToolkitDescription toolkit = toolkitId != null ? getToolkit(toolkitId) : null;
-      return new ResourceInfo(bundle, toolkit, resource);
-    }
-    // not found
-    return null;
-  }
-
-  /**
-   * @return the {@link ResourceInfo} for resource with given name or <code>null</code> if no such
-   *         resource found in all plugins.
-   */
-  public static ResourceInfo getResourceInfo(String name) throws Exception {
-    return getResourceInfo(name, null);
-  }
-
-  public static ResourceInfo getResourceInfo(String name, String activeToolkitId) throws Exception {
-    // check bundles with toolkits
-    List<IConfigurationElement> toolkitElements = getToolkitElements();
-    // check bundles with active toolkit
-    if (!StringUtils.isEmpty(activeToolkitId)) {
-      for (IConfigurationElement toolkitElement : toolkitElements) {
-        String toolkitId = ExternalFactoriesHelper.getRequiredAttribute(toolkitElement, "id");
-        if (toolkitId.equals(activeToolkitId)) {
-          ResourceInfo resourceInfo = getResourceInfo(toolkitElement, name);
-          if (resourceInfo != null) {
-            return resourceInfo;
-          }
-        }
-      }
-    }
-    // check all bundles
-    for (IConfigurationElement toolkitElement : toolkitElements) {
-      ResourceInfo resourceInfo = getResourceInfo(toolkitElement, name);
-      if (resourceInfo != null) {
-        return resourceInfo;
-      }
-    }
-    // not found
-    return null;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Toolkit
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final String POINT_TOOLKITS = "org.eclipse.wb.core.toolkits";
-  private static Map<String, ToolkitDescription> m_idToToolkit;
-
-  /**
-   * @return the all {@link IConfigurationElement}'s that contribute to GUI toolkits. This is not
-   *         only elements that describe GUI toolkit, but may be also contribution to toolkit
-   *         palette.
-   */
-  public static List<IConfigurationElement> getToolkitElements() {
-    return ExternalFactoriesHelper.getElements(POINT_TOOLKITS, "toolkit");
-  }
-
-  /**
-   * @return the all {@link IConfigurationElement}'s that contribute to GUI toolkits. This is not
-   *         only elements that describe GUI toolkit, but may be also contribution to toolkit
-   *         palette.
-   */
-  public static List<IConfigurationElement> getToolkitElements(String toolkitId) {
-    List<IConfigurationElement> toolkitElements = Lists.newArrayList();
-    for (IConfigurationElement element : getToolkitElements()) {
-      if (ExternalFactoriesHelper.getRequiredAttribute(element, "id").equals(toolkitId)) {
-        toolkitElements.add(element);
-      }
-    }
-    return toolkitElements;
-  }
-
-  /**
-   * @return the {@link ToolkitDescription}'s for registered GUI toolkits.
-   */
-  public static ToolkitDescription[] getToolkits() throws Exception {
-    List<ToolkitDescription> toolkits = Lists.newArrayList();
-    //
-    Set<String> addedToolkits = Sets.newHashSet();
-    for (IConfigurationElement toolkitElement : getToolkitElements()) {
-      String id = toolkitElement.getAttribute("id");
-      if (!addedToolkits.contains(id)) {
-        addedToolkits.add(id);
-        toolkits.add(getToolkit(id));
-      }
-    }
-    //
-    return toolkits.toArray(new ToolkitDescription[toolkits.size()]);
-  }
-
-  /**
-   * @return the {@link ToolkitDescription} for toolkit with given id.
-   */
-  public static synchronized ToolkitDescription getToolkit(String toolkitId) throws Exception {
-    Assert.isNotNull(toolkitId);
-    // prepare all toolkits
-    if (m_idToToolkit == null) {
-      m_idToToolkit = Maps.newTreeMap();
-      for (IConfigurationElement toolkitElement : getToolkitElements()) {
-        // ask each toolkit provider
-        IConfigurationElement[] providerElements = toolkitElement.getChildren("provider");
-        for (IConfigurationElement providerElement : providerElements) {
-          IToolkitProvider toolkitProvider =
-              (IToolkitProvider) providerElement.createExecutableExtension("class");
-          // add toolkit description
-          ToolkitDescription toolkitDescription = toolkitProvider.getDescription();
-          m_idToToolkit.put(toolkitDescription.getId(), toolkitDescription);
-        }
-      }
-    }
-    // return required toolkit
-    ToolkitDescription toolkitDescription = m_idToToolkit.get(toolkitId);
-    Assert.isNotNull(toolkitDescription, "Can not find description for toolkit: " + toolkitId);
-    return toolkitDescription;
-  }
-
-  /**
-   * Loads {@link Class} from {@link Bundle}'s that contribute some toolkit.
-   */
-  public static Class<?> loadModelClass(String className) throws Exception {
-    for (IConfigurationElement toolkitElement : getToolkitElements()) {
-      Bundle bundle = ExternalFactoriesHelper.getExtensionBundle(toolkitElement);
-      try {
-        return bundle.loadClass(className);
-      } catch (ClassNotFoundException e) {
-      }
-    }
-    throw new ClassNotFoundException(className);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ClassResourceInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds {@link ClassResourceInfo}'s for given component class and all its super classes and
+	 * interfaces.
+	 */
+	public static void addDescriptionResources(LinkedList<ClassResourceInfo> descriptions,
+			ILoadingContext context,
+			Class<?> currentClass) throws Exception {
+		if (currentClass != null) {
+			ResourceInfo resource = getComponentDescriptionResource(context, currentClass);
+			if (resource != null) {
+				validateComponentDescription(resource);
+				descriptions.addFirst(new ClassResourceInfo(currentClass, resource));
+			}
+			// handle interfaces
+			for (Class<?> interfaceClass : currentClass.getInterfaces()) {
+				addDescriptionResources(descriptions, context, interfaceClass);
+			}
+			// handle super class
+			addDescriptionResources(descriptions, context, currentClass.getSuperclass());
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Validation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static Schema m_wbpComponentSchema;
+
+	/**
+	 * Validates <code>*.wbp-component.xml</code> against its schema.
+	 */
+	public static synchronized void validateComponentDescription(ResourceInfo resource)
+			throws Exception {
+		// validate on developers computers
+		if (EnvironmentUtils.isTestingTime()) {
+			// prepare Schema
+			if (m_wbpComponentSchema == null) {
+				SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
+				InputStream schemaStream = DesignerPlugin.getFile("schema/wbp-component.xsd");
+				m_wbpComponentSchema = factory.newSchema(new StreamSource(schemaStream));
+			}
+			// validate
+			InputStream contents = resource.getURL().openStream();
+			try {
+				Validator validator = m_wbpComponentSchema.newValidator();
+				validator.validate(new StreamSource(contents));
+			} catch (Throwable e) {
+				throw new Exception("Exception during validation " + resource.getURL(), e);
+			} finally {
+				contents.close();
+			}
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final String[] ICON_EXTS = new String[]{".png", ".gif"};
+
+	/**
+	 * @return the icon {@link Image} for given component.
+	 */
+	public static Image getIconImage(ILoadingContext context, Class<?> componentClass)
+			throws Exception {
+		return getIconImage(context, componentClass, StringUtils.EMPTY);
+	}
+
+	/**
+	 * Attempts to load icon with one of the supported extensions from description resources.
+	 *
+	 * @param context
+	 *          the {@link EditorState} for accessing resource from {@link ClassLoader}.
+	 * @param componentClass
+	 *          the {@link Class} of component, for example <code>"javax.swing.JButton"</code>.
+	 * @param suffix
+	 *          optional suffix, may be empty, but not <code>null</code>. We use it loading
+	 *          creation-specific icons.
+	 *
+	 * @return the icon {@link Image}, or <code>null</code>.
+	 */
+	public static Image getIconImage(ILoadingContext context, Class<?> componentClass, String suffix)
+			throws Exception {
+		String iconPath = componentClass.getName().replace('.', '/') + suffix;
+		return getIconImage(context, iconPath);
+	}
+
+	/**
+	 * Attempt to load icon with one of the supported extensions from description resources.
+	 *
+	 * @param context
+	 *          the {@link EditorState} for accessing resource from {@link ClassLoader}.
+	 * @param iconPath
+	 *          the path to icon file, without extension.
+	 *
+	 * @return the icon {@link Image}, or <code>null</code>.
+	 */
+	public static Image getIconImage(ILoadingContext context, String iconPath) throws Exception {
+		for (String ext : ICON_EXTS) {
+			String iconName = iconPath + ext;
+			ResourceInfo resourceInfo = getResourceInfo0(context, iconName, true);
+			if (resourceInfo != null) {
+				InputStream stream = resourceInfo.getURL().openStream();
+				try {
+					return new Image(null, stream);
+				} finally {
+					stream.close();
+				}
+			}
+		}
+		// not found
+		return null;
+	}
+
+	/**
+	 * @return <code>true</code> if there is <code>.wbp-forced-toolkit.txt</code> file exactly for
+	 *         given component.
+	 */
+	public static boolean hasForcedToolkitForComponent(ILoadingContext context,
+			String toolkitId,
+			String componentClassName) throws Exception {
+		String name = componentClassName.replace('.', '/') + ".wbp-forced-toolkit.txt";
+		ResourceInfo resourceInfo = getResourceInfo0(context, name, true);
+		if (resourceInfo != null) {
+			return IOUtils2.readString(resourceInfo.getURL().openStream()).equals(toolkitId);
+		}
+		return false;
+	}
+
+	/**
+	 * @return <code>true</code> if there is <code>.wbp-component.xml</code> file exactly for given
+	 *         component.
+	 */
+	public static boolean hasComponentDescriptionResource(ILoadingContext context,
+			Class<?> componentClass) throws Exception {
+		return getComponentDescriptionResource(context, componentClass) != null;
+	}
+
+	/**
+	 * @return the {@link ResourceInfo} with description file of given component in project
+	 *         {@link ClassLoader}'s.
+	 */
+	public static ResourceInfo getComponentDescriptionResource(ILoadingContext context,
+			Class<?> componentClass) throws Exception {
+		String name = componentClass.getName().replace('.', '/') + ".wbp-component.xml";
+		return getResourceInfo(context, componentClass, name);
+	}
+
+	/**
+	 * Same as {@link #getResourceInfo0(EditorState, String)}, but tries first versions corresponding
+	 * to toolkit of given {@link Class}.
+	 *
+	 * @return the {@link ResourceInfo} for resource with given name or <code>null</code> if no such
+	 *         resource found.
+	 */
+	static ResourceInfo getResourceInfo(ILoadingContext context,
+			Class<?> resourceClass,
+			String defaultPath) throws Exception {
+		// try to find versioned path
+		for (IDescriptionVersionsProvider provider : context.getDescriptionVersionsProviders()) {
+			List<String> versions = provider.getVersions(resourceClass);
+			for (String version : versions) {
+				String versionedPath = version + "/" + defaultPath;
+				ResourceInfo resource = getResourceInfo0(context, versionedPath, false);
+				if (resource != null) {
+					return resource;
+				}
+			}
+		}
+		// use default path XXX
+		return getResourceInfo0(context, defaultPath, true);
+	}
+
+	/**
+	 * This method tries to find resource in following places:
+	 * <p>
+	 * <ol>
+	 * <li>Project {@link ClassLoader} from {@link EditorState}.
+	 * <li>Plugins that contribute toolkits, from "wbp-meta".
+	 * </ol>
+	 *
+	 * @return the {@link ResourceInfo} for resource with given name or <code>null</code> if no such
+	 *         resource found.
+	 */
+	@SuppressWarnings("unchecked")
+	private static ResourceInfo getResourceInfo0(ILoadingContext context,
+			String name,
+			boolean tryContext) throws Exception {
+		// cache with results
+		Map<String, ResourceInfo> cacheResult;
+		{
+			String key = "ComponentDescriptionHelper.getResourceInfo0.hasResult";
+			cacheResult = (Map<String, ResourceInfo>) context.getGlobalValue(key);
+			if (cacheResult == null) {
+				cacheResult = Maps.newHashMap();
+				context.putGlobalValue(key, cacheResult);
+			}
+			ResourceInfo result = cacheResult.get(name);
+			if (result != null) {
+				return result;
+			}
+		}
+		// cache without results
+		Set<String> cacheNoResult;
+		{
+			String key = "ComponentDescriptionHelper.getResourceInfo0.noResult";
+			cacheNoResult = (Set<String>) context.getGlobalValue(key);
+			if (cacheNoResult == null) {
+				cacheNoResult = Sets.newHashSet();
+				context.putGlobalValue(key, cacheNoResult);
+			}
+			if (cacheNoResult.contains(name)) {
+				return null;
+			}
+		}
+		// prepare result XXX
+		ResourceInfo result = getResourceInfo00(context, name, tryContext);
+		// fill caches
+		if (result != null) {
+			cacheResult.put(name, result);
+		} else {
+			cacheNoResult.add(name);
+		}
+		// done
+		return result;
+	}
+
+	/**
+	 * Non-caching implementation of {@link #getResourceInfo0(EditorState, String)}.
+	 *
+	 * @param tryContext
+	 *          is <code>false</code> if {@link ILoadingContext} should not be used, because version
+	 *          was attached to the name, and custom components can not have version.
+	 */
+	private static ResourceInfo getResourceInfo00(ILoadingContext context,
+			String name,
+			boolean tryContext) throws Exception {
+		// check bundles with toolkits
+		{
+			ResourceInfo resource = getResourceInfo(name, context.getToolkitId());
+			if (resource != null) {
+				return resource;
+			}
+		}
+		// may be standard resource
+		for (IConfigurationElement toolkitElement : DescriptionHelper.getToolkitElements()) {
+			if (hasMatchingResourcePrefix(toolkitElement, name)) {
+				return null;
+			}
+		}
+		// ask context XXX
+		if (tryContext) {
+			URL resource = context.getResource(name);
+			if (resource != null) {
+				return new ResourceInfo(null, null, resource);
+			}
+		}
+		// no resource
+		return null;
+	}
+
+	/**
+	 * @param toolkitElement
+	 *          the {@link IConfigurationElement} with toolkit description.
+	 * @param name
+	 *          the name of resource.
+	 * @return the {@link ResourceInfo} for resource with given name or <code>null</code> if no such
+	 *         resource found in given plugin.
+	 */
+	private static ResourceInfo getResourceInfo(IConfigurationElement toolkitElement, String name)
+			throws Exception {
+		if (!canHaveResource(toolkitElement, name)) {
+			return null;
+		}
+		String toolkitId = ExternalFactoriesHelper.getRequiredAttribute(toolkitElement, "id");
+		Bundle bundle = ExternalFactoriesHelper.getExtensionBundle(toolkitElement);
+		return getResourceInfo(toolkitId, bundle, name);
+	}
+
+	/**
+	 * @return <code>true</code> if toolkit {@link IConfigurationElement} has description that it may
+	 *         be has resource with given name. This allows us prevent checking many {@link Bundle}s
+	 *         and get big speed up gain.
+	 */
+	private static boolean canHaveResource(IConfigurationElement toolkitElement, String name) {
+		IConfigurationElement[] prefixElements = getResourcePrefixElements(toolkitElement);
+		if (prefixElements.length != 0) {
+			return hasMatchingResourcePrefix(prefixElements, name);
+		}
+		return true;
+	}
+
+	/**
+	 * @return <code>true</code> if toolkit has "resourcePrefix" which matches given name.
+	 */
+	private static boolean hasMatchingResourcePrefix(IConfigurationElement toolkitElement, String name) {
+		IConfigurationElement[] prefixElements = getResourcePrefixElements(toolkitElement);
+		return hasMatchingResourcePrefix(prefixElements, name);
+	}
+
+	/**
+	 * @return the "resourcePrefix" elements of given toolkit.
+	 */
+	private static IConfigurationElement[] getResourcePrefixElements(IConfigurationElement toolkitElement) {
+		IConfigurationElement[] prefixContainers = toolkitElement.getChildren("resourcePrefixes");
+		for (IConfigurationElement containerElement : prefixContainers) {
+			return containerElement.getChildren("resourcePrefix");
+		}
+		return new IConfigurationElement[0];
+	}
+
+	/**
+	 * @return <code>true</code> if one of the prefixes matches given name.
+	 */
+	private static boolean hasMatchingResourcePrefix(IConfigurationElement[] prefixElements,
+			String name) {
+		for (IConfigurationElement prefixElement : prefixElements) {
+			String prefix = prefixElement.getValue().replace('.', '/');
+			// direct prefix
+			if (name.startsWith(prefix)) {
+				return true;
+			}
+			// "name" can have version prefix, remove it and try again
+			String nameWithoutVersion = StringUtils.substringAfter(name, "/");
+			if (nameWithoutVersion.startsWith(prefix)) {
+				return true;
+			}
+		}
+		return false;
+	}
+
+	/**
+	 * @return the {@link ResourceInfo} for resource with given name or <code>null</code> if no such
+	 *         resource found in given plugin.
+	 */
+	public static ResourceInfo getResourceInfo(String toolkitId, Bundle bundle, String name)
+			throws Exception {
+		// check that resource exists in bundle
+		URL resource = bundle.getEntry("wbp-meta/" + name);
+		if (resource != null) {
+			ToolkitDescription toolkit = toolkitId != null ? getToolkit(toolkitId) : null;
+			return new ResourceInfo(bundle, toolkit, resource);
+		}
+		// not found
+		return null;
+	}
+
+	/**
+	 * @return the {@link ResourceInfo} for resource with given name or <code>null</code> if no such
+	 *         resource found in all plugins.
+	 */
+	public static ResourceInfo getResourceInfo(String name) throws Exception {
+		return getResourceInfo(name, null);
+	}
+
+	public static ResourceInfo getResourceInfo(String name, String activeToolkitId) throws Exception {
+		// check bundles with toolkits
+		List<IConfigurationElement> toolkitElements = getToolkitElements();
+		// check bundles with active toolkit
+		if (!StringUtils.isEmpty(activeToolkitId)) {
+			for (IConfigurationElement toolkitElement : toolkitElements) {
+				String toolkitId = ExternalFactoriesHelper.getRequiredAttribute(toolkitElement, "id");
+				if (toolkitId.equals(activeToolkitId)) {
+					ResourceInfo resourceInfo = getResourceInfo(toolkitElement, name);
+					if (resourceInfo != null) {
+						return resourceInfo;
+					}
+				}
+			}
+		}
+		// check all bundles
+		for (IConfigurationElement toolkitElement : toolkitElements) {
+			ResourceInfo resourceInfo = getResourceInfo(toolkitElement, name);
+			if (resourceInfo != null) {
+				return resourceInfo;
+			}
+		}
+		// not found
+		return null;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Toolkit
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final String POINT_TOOLKITS = "org.eclipse.wb.core.toolkits";
+	private static Map<String, ToolkitDescription> m_idToToolkit;
+
+	/**
+	 * @return the all {@link IConfigurationElement}'s that contribute to GUI toolkits. This is not
+	 *         only elements that describe GUI toolkit, but may be also contribution to toolkit
+	 *         palette.
+	 */
+	public static List<IConfigurationElement> getToolkitElements() {
+		return ExternalFactoriesHelper.getElements(POINT_TOOLKITS, "toolkit");
+	}
+
+	/**
+	 * @return the all {@link IConfigurationElement}'s that contribute to GUI toolkits. This is not
+	 *         only elements that describe GUI toolkit, but may be also contribution to toolkit
+	 *         palette.
+	 */
+	public static List<IConfigurationElement> getToolkitElements(String toolkitId) {
+		List<IConfigurationElement> toolkitElements = Lists.newArrayList();
+		for (IConfigurationElement element : getToolkitElements()) {
+			if (ExternalFactoriesHelper.getRequiredAttribute(element, "id").equals(toolkitId)) {
+				toolkitElements.add(element);
+			}
+		}
+		return toolkitElements;
+	}
+
+	/**
+	 * @return the {@link ToolkitDescription}'s for registered GUI toolkits.
+	 */
+	public static ToolkitDescription[] getToolkits() throws Exception {
+		List<ToolkitDescription> toolkits = Lists.newArrayList();
+		//
+		Set<String> addedToolkits = Sets.newHashSet();
+		for (IConfigurationElement toolkitElement : getToolkitElements()) {
+			String id = toolkitElement.getAttribute("id");
+			if (!addedToolkits.contains(id)) {
+				addedToolkits.add(id);
+				toolkits.add(getToolkit(id));
+			}
+		}
+		//
+		return toolkits.toArray(new ToolkitDescription[toolkits.size()]);
+	}
+
+	/**
+	 * @return the {@link ToolkitDescription} for toolkit with given id.
+	 */
+	public static synchronized ToolkitDescription getToolkit(String toolkitId) throws Exception {
+		Assert.isNotNull(toolkitId);
+		// prepare all toolkits
+		if (m_idToToolkit == null) {
+			m_idToToolkit = Maps.newTreeMap();
+			for (IConfigurationElement toolkitElement : getToolkitElements()) {
+				// ask each toolkit provider
+				IConfigurationElement[] providerElements = toolkitElement.getChildren("provider");
+				for (IConfigurationElement providerElement : providerElements) {
+					IToolkitProvider toolkitProvider =
+							(IToolkitProvider) providerElement.createExecutableExtension("class");
+					// add toolkit description
+					ToolkitDescription toolkitDescription = toolkitProvider.getDescription();
+					m_idToToolkit.put(toolkitDescription.getId(), toolkitDescription);
+				}
+			}
+		}
+		// return required toolkit
+		ToolkitDescription toolkitDescription = m_idToToolkit.get(toolkitId);
+		Assert.isNotNull(toolkitDescription, "Can not find description for toolkit: " + toolkitId);
+		return toolkitDescription;
+	}
+
+	/**
+	 * Loads {@link Class} from {@link Bundle}'s that contribute some toolkit.
+	 */
+	public static Class<?> loadModelClass(String className) throws Exception {
+		for (IConfigurationElement toolkitElement : getToolkitElements()) {
+			Bundle bundle = ExternalFactoriesHelper.getExtensionBundle(toolkitElement);
+			try {
+				return bundle.loadClass(className);
+			} catch (ClassNotFoundException e) {
+			}
+		}
+		throw new ClassNotFoundException(className);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/helpers/DescriptionPropertiesHelper.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/helpers/DescriptionPropertiesHelper.java
index f78fce2aa..3d3c149ee 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/helpers/DescriptionPropertiesHelper.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/helpers/DescriptionPropertiesHelper.java
@@ -30,128 +30,128 @@
  * @coverage core.model.description
  */
 public class DescriptionPropertiesHelper {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private DescriptionPropertiesHelper() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private DescriptionPropertiesHelper() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Property editors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final String POINT_PROPERTY_EDITORS = "org.eclipse.wb.core.propertyEditors";
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Property editors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final String POINT_PROPERTY_EDITORS = "org.eclipse.wb.core.propertyEditors";
 
-  /**
-   * @return the {@link PropertyEditor} for given type.
-   */
-  public static PropertyEditor getEditorForType(Class<?> type) throws Exception {
-    // enum editor
-    if (type.isEnum()) {
-      return EnumPropertyEditor.INSTANCE;
-    }
-    // try to find editor using PropertyEditorProvider
-    for (PropertyEditorProvider provider : getPropertyEditorProviders()) {
-      PropertyEditor editor = provider.getEditorForType(type);
-      if (editor != null) {
-        return editor;
-      }
-    }
-    // try to find editor using type name
-    {
-      String typeName = ReflectionUtils.getFullyQualifiedName(type, false);
-      List<IConfigurationElement> elements =
-          ExternalFactoriesHelper.getElements(POINT_PROPERTY_EDITORS, "editor");
-      for (IConfigurationElement element : elements) {
-        if (typeName.equals(element.getAttribute("type"))) {
-          return ExternalFactoriesHelper.createExecutableExtension(element, "class");
-        }
-      }
-    }
-    // not found
-    return null;
-  }
+	/**
+	 * @return the {@link PropertyEditor} for given type.
+	 */
+	public static PropertyEditor getEditorForType(Class<?> type) throws Exception {
+		// enum editor
+		if (type.isEnum()) {
+			return EnumPropertyEditor.INSTANCE;
+		}
+		// try to find editor using PropertyEditorProvider
+		for (PropertyEditorProvider provider : getPropertyEditorProviders()) {
+			PropertyEditor editor = provider.getEditorForType(type);
+			if (editor != null) {
+				return editor;
+			}
+		}
+		// try to find editor using type name
+		{
+			String typeName = ReflectionUtils.getFullyQualifiedName(type, false);
+			List<IConfigurationElement> elements =
+					ExternalFactoriesHelper.getElements(POINT_PROPERTY_EDITORS, "editor");
+			for (IConfigurationElement element : elements) {
+				if (typeName.equals(element.getAttribute("type"))) {
+					return ExternalFactoriesHelper.createExecutableExtension(element, "class");
+				}
+			}
+		}
+		// not found
+		return null;
+	}
 
-  /**
-   * @return the {@link PropertyEditor} for given {@link PropertyDescriptor} or <code>null</code>.
-   */
-  public static PropertyEditor getEditorForPropertyDescriptor(PropertyDescriptor descriptor)
-      throws Exception {
-    List<PropertyEditorProvider> providers = getPropertyEditorProviders();
-    for (PropertyEditorProvider provider : providers) {
-      PropertyEditor editor = provider.getEditorForPropertyDescriptor(descriptor);
-      if (editor != null) {
-        return editor;
-      }
-    }
-    // not found
-    return null;
-  }
+	/**
+	 * @return the {@link PropertyEditor} for given {@link PropertyDescriptor} or <code>null</code>.
+	 */
+	public static PropertyEditor getEditorForPropertyDescriptor(PropertyDescriptor descriptor)
+			throws Exception {
+		List<PropertyEditorProvider> providers = getPropertyEditorProviders();
+		for (PropertyEditorProvider provider : providers) {
+			PropertyEditor editor = provider.getEditorForPropertyDescriptor(descriptor);
+			if (editor != null) {
+				return editor;
+			}
+		}
+		// not found
+		return null;
+	}
 
-  /**
-   * @return the {@link PropertyEditor} for given {@link java.beans.PropertyEditor} editor type or
-   *         <code>null</code>.
-   */
-  public static PropertyEditor getEditorForEditorType(Class<?> editorType) throws Exception {
-    List<PropertyEditorProvider> providers = getPropertyEditorProviders();
-    for (PropertyEditorProvider provider : providers) {
-      PropertyEditor editor = provider.getEditorForEditorType(editorType);
-      if (editor != null) {
-        return editor;
-      }
-    }
-    // not found
-    return null;
-  }
+	/**
+	 * @return the {@link PropertyEditor} for given {@link java.beans.PropertyEditor} editor type or
+	 *         <code>null</code>.
+	 */
+	public static PropertyEditor getEditorForEditorType(Class<?> editorType) throws Exception {
+		List<PropertyEditorProvider> providers = getPropertyEditorProviders();
+		for (PropertyEditorProvider provider : providers) {
+			PropertyEditor editor = provider.getEditorForEditorType(editorType);
+			if (editor != null) {
+				return editor;
+			}
+		}
+		// not found
+		return null;
+	}
 
-  /**
-   * @return contributed {@link PropertyEditorProvider}-s.
-   */
-  private static List<PropertyEditorProvider> getPropertyEditorProviders() {
-    return ExternalFactoriesHelper.getElementsInstances(
-        PropertyEditorProvider.class,
-        POINT_PROPERTY_EDITORS,
-        "provider");
-  }
+	/**
+	 * @return contributed {@link PropertyEditorProvider}-s.
+	 */
+	private static List<PropertyEditorProvider> getPropertyEditorProviders() {
+		return ExternalFactoriesHelper.getElementsInstances(
+				PropertyEditorProvider.class,
+				POINT_PROPERTY_EDITORS,
+				"provider");
+	}
 
-  /**
-   * @return the configurable {@link PropertyEditor} for given <code>id</code>.
-   */
-  public static PropertyEditor getConfigurableEditor(String id) throws Exception {
-    List<IConfigurationElement> elements =
-        ExternalFactoriesHelper.getElements(POINT_PROPERTY_EDITORS, "configurableEditor");
-    for (IConfigurationElement element : elements) {
-      if (id.equals(element.getAttribute("id"))) {
-        return ExternalFactoriesHelper.createExecutableExtension(element, "class");
-      }
-    }
-    // not found
-    throw new IllegalArgumentException("Can not find configurable editor with id '" + id + "'.");
-  }
+	/**
+	 * @return the configurable {@link PropertyEditor} for given <code>id</code>.
+	 */
+	public static PropertyEditor getConfigurableEditor(String id) throws Exception {
+		List<IConfigurationElement> elements =
+				ExternalFactoriesHelper.getElements(POINT_PROPERTY_EDITORS, "configurableEditor");
+		for (IConfigurationElement element : elements) {
+			if (id.equals(element.getAttribute("id"))) {
+				return ExternalFactoriesHelper.createExecutableExtension(element, "class");
+			}
+		}
+		// not found
+		throw new IllegalArgumentException("Can not find configurable editor with id '" + id + "'.");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Converters
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final String POINT_PROPERTY_CONVERTERS = "org.eclipse.wb.core.propertyConverters";
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Converters
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final String POINT_PROPERTY_CONVERTERS = "org.eclipse.wb.core.propertyConverters";
 
-  /**
-   * @return the {@link ExpressionConverter} for given type.
-   */
-  public static ExpressionConverter getConverterForType(Class<?> type) throws Exception {
-    String typeName = ReflectionUtils.getFullyQualifiedName(type, false);
-    List<IConfigurationElement> elements =
-        ExternalFactoriesHelper.getElements(POINT_PROPERTY_CONVERTERS, "converter");
-    for (IConfigurationElement element : elements) {
-      if (typeName.equals(element.getAttribute("type"))) {
-        return ExternalFactoriesHelper.createExecutableExtension(element, "class");
-      }
-    }
-    // not found
-    return null;
-  }
+	/**
+	 * @return the {@link ExpressionConverter} for given type.
+	 */
+	public static ExpressionConverter getConverterForType(Class<?> type) throws Exception {
+		String typeName = ReflectionUtils.getFullyQualifiedName(type, false);
+		List<IConfigurationElement> elements =
+				ExternalFactoriesHelper.getElements(POINT_PROPERTY_CONVERTERS, "converter");
+		for (IConfigurationElement element : elements) {
+			if (typeName.equals(element.getAttribute("type"))) {
+				return ExternalFactoriesHelper.createExecutableExtension(element, "class");
+			}
+		}
+		// not found
+		return null;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/helpers/EditorStateLoadingContext.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/helpers/EditorStateLoadingContext.java
index 86f4da4ad..8629565fa 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/helpers/EditorStateLoadingContext.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/helpers/EditorStateLoadingContext.java
@@ -27,100 +27,100 @@
  * @coverage core.model.description
  */
 public class EditorStateLoadingContext implements ILoadingContext {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Factory
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link ILoadingContext} to use for given {@link EditorState}.
-   */
-  public static ILoadingContext get(EditorState state) {
-    String key = ILoadingContext.class.getName();
-    ILoadingContext context = (ILoadingContext) state.getEditor().getGlobalValue(key);
-    if (context == null) {
-      context = new EditorStateLoadingContext(state);
-      state.getEditor().putGlobalValue(key, context);
-    }
-    return context;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Factory
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link ILoadingContext} to use for given {@link EditorState}.
+	 */
+	public static ILoadingContext get(EditorState state) {
+		String key = ILoadingContext.class.getName();
+		ILoadingContext context = (ILoadingContext) state.getEditor().getGlobalValue(key);
+		if (context == null) {
+			context = new EditorStateLoadingContext(state);
+			state.getEditor().putGlobalValue(key, context);
+		}
+		return context;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance fields
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final EditorState m_state;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance fields
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final EditorState m_state;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private EditorStateLoadingContext(EditorState state) {
-    m_state = state;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private EditorStateLoadingContext(EditorState state) {
+		m_state = state;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ILoadingContext
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getToolkitId() {
-    return m_state.getToolkitId();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ILoadingContext
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getToolkitId() {
+		return m_state.getToolkitId();
+	}
 
-  @Override
-  public URL getResource(String name) throws Exception {
-    // try editor class loader
-    {
-      URL resource = m_state.getEditorLoader().getResource(name);
-      if (resource != null) {
-        return resource;
-      }
-    }
-    // try "wbp-meta" of IJavaProject
-    {
-      URL resource = getResource(m_state.getEditor().getJavaProject(), name);
-      if (resource != null) {
-        return resource;
-      }
-    }
-    // not found
-    return null;
-  }
+	@Override
+	public URL getResource(String name) throws Exception {
+		// try editor class loader
+		{
+			URL resource = m_state.getEditorLoader().getResource(name);
+			if (resource != null) {
+				return resource;
+			}
+		}
+		// try "wbp-meta" of IJavaProject
+		{
+			URL resource = getResource(m_state.getEditor().getJavaProject(), name);
+			if (resource != null) {
+				return resource;
+			}
+		}
+		// not found
+		return null;
+	}
 
-  @Override
-  public List<IDescriptionVersionsProvider> getDescriptionVersionsProviders() {
-    return m_state.getDescriptionVersionsProviders();
-  }
+	@Override
+	public List<IDescriptionVersionsProvider> getDescriptionVersionsProviders() {
+		return m_state.getDescriptionVersionsProviders();
+	}
 
-  @Override
-  public Object getGlobalValue(String key) {
-    return m_state.getEditor().getGlobalValue(key);
-  }
+	@Override
+	public Object getGlobalValue(String key) {
+		return m_state.getEditor().getGlobalValue(key);
+	}
 
-  @Override
-  public void putGlobalValue(String key, Object value) {
-    m_state.getEditor().putGlobalValue(key, value);
-  }
+	@Override
+	public void putGlobalValue(String key, Object value) {
+		m_state.getEditor().putGlobalValue(key, value);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link URL} with <code>*.wbp-component.xml</code> file for given name, in
-   *         {@link IJavaProject} itself or any required project.
-   */
-  private static URL getResource(IJavaProject javaProject, String name) throws Exception {
-    List<IFile> files = ProjectUtils.findFiles(javaProject, "wbp-meta/" + name);
-    if (!files.isEmpty()) {
-      IFile file = files.get(0);
-      return file.getLocation().toFile().toURL();
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link URL} with <code>*.wbp-component.xml</code> file for given name, in
+	 *         {@link IJavaProject} itself or any required project.
+	 */
+	private static URL getResource(IJavaProject javaProject, String name) throws Exception {
+		List<IFile> files = ProjectUtils.findFiles(javaProject, "wbp-meta/" + name);
+		if (!files.isEmpty()) {
+			IFile file = files.get(0);
+			return file.getLocation().toFile().toURL();
+		}
+		return null;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/helpers/FactoryDescriptionHelper.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/helpers/FactoryDescriptionHelper.java
index 302fa3cdc..fba9c25af 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/helpers/FactoryDescriptionHelper.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/helpers/FactoryDescriptionHelper.java
@@ -501,7 +501,7 @@ public void begin(String namespace, String name, Attributes attributes) throws E
 					FactoryMethodDescription factoryMethodDescription = new FactoryMethodDescription(declaringClass);
 					Boolean allMethodsAreFactories = (Boolean) getDigester().peek(1);
 					factoryMethodDescription
-							.setFactory(allMethodsAreFactories != null ? allMethodsAreFactories.booleanValue() : true);
+					.setFactory(allMethodsAreFactories != null ? allMethodsAreFactories.booleanValue() : true);
 					digester.push(factoryMethodDescription);
 				}
 
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/helpers/ILoadingContext.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/helpers/ILoadingContext.java
index 5a4122216..938a0aaec 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/helpers/ILoadingContext.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/helpers/ILoadingContext.java
@@ -22,13 +22,13 @@
  * @coverage core.model.description
  */
 public interface ILoadingContext {
-  String getToolkitId();
+	String getToolkitId();
 
-  URL getResource(String name) throws Exception;
+	URL getResource(String name) throws Exception;
 
-  Object getGlobalValue(String key);
+	Object getGlobalValue(String key);
 
-  void putGlobalValue(String key, Object value);
+	void putGlobalValue(String key, Object value);
 
-  List<IDescriptionVersionsProvider> getDescriptionVersionsProviders();
+	List<IDescriptionVersionsProvider> getDescriptionVersionsProviders();
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/helpers/LayoutDescriptionHelper.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/helpers/LayoutDescriptionHelper.java
index aae231748..7e9907e18 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/helpers/LayoutDescriptionHelper.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/helpers/LayoutDescriptionHelper.java
@@ -29,52 +29,52 @@
  * @coverage core.model.description
  */
 public final class LayoutDescriptionHelper {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private LayoutDescriptionHelper() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private LayoutDescriptionHelper() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final String POINT_ID = "org.eclipse.wb.core.layoutManagers";
-  private static final Map<ToolkitDescription, List<LayoutDescription>> m_layouts =
-      Maps.newHashMap();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final String POINT_ID = "org.eclipse.wb.core.layoutManagers";
+	private static final Map<ToolkitDescription, List<LayoutDescription>> m_layouts =
+			Maps.newHashMap();
 
-  /**
-   * @return the {@link List} of {@link LayoutDescription}'s contributed for given toolkit.
-   */
-  public static List<LayoutDescription> get(ToolkitDescription toolkit) {
-    List<LayoutDescription> layouts = m_layouts.get(toolkit);
-    if (layouts == null) {
-      layouts = Lists.newArrayList();
-      m_layouts.put(toolkit, layouts);
-      //
-      for (IConfigurationElement element : ExternalFactoriesHelper.getElements(POINT_ID, "layout")) {
-        String toolkitId = ExternalFactoriesHelper.getRequiredAttribute(element, "toolkit");
-        if (toolkitId.equals(toolkit.getId())) {
-          layouts.add(new LayoutDescription(toolkit, element));
-        }
-      }
-    }
-    return layouts;
-  }
+	/**
+	 * @return the {@link List} of {@link LayoutDescription}'s contributed for given toolkit.
+	 */
+	public static List<LayoutDescription> get(ToolkitDescription toolkit) {
+		List<LayoutDescription> layouts = m_layouts.get(toolkit);
+		if (layouts == null) {
+			layouts = Lists.newArrayList();
+			m_layouts.put(toolkit, layouts);
+			//
+			for (IConfigurationElement element : ExternalFactoriesHelper.getElements(POINT_ID, "layout")) {
+				String toolkitId = ExternalFactoriesHelper.getRequiredAttribute(element, "toolkit");
+				if (toolkitId.equals(toolkit.getId())) {
+					layouts.add(new LayoutDescription(toolkit, element));
+				}
+			}
+		}
+		return layouts;
+	}
 
-  /**
-   * @return the {@link LayoutDescription} with given id, or <code>null</code> if not found.
-   */
-  public static LayoutDescription get(ToolkitDescription toolkit, String id) {
-    for (LayoutDescription layout : get(toolkit)) {
-      if (layout.getId().equals(id)) {
-        return layout;
-      }
-    }
-    // not found
-    return null;
-  }
+	/**
+	 * @return the {@link LayoutDescription} with given id, or <code>null</code> if not found.
+	 */
+	public static LayoutDescription get(ToolkitDescription toolkit, String id) {
+		for (LayoutDescription layout : get(toolkit)) {
+			if (layout.getId().equals(id)) {
+				return layout;
+			}
+		}
+		// not found
+		return null;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/internal/AbstractConfigurableDescription.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/internal/AbstractConfigurableDescription.java
index d526439e6..1617a7c81 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/internal/AbstractConfigurableDescription.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/internal/AbstractConfigurableDescription.java
@@ -27,41 +27,41 @@
  * @coverage core.model.description
  */
 public abstract class AbstractConfigurableDescription {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parameters
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final Map<String, Object> m_parameters = Maps.newHashMap();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parameters
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final Map<String, Object> m_parameters = Maps.newHashMap();
 
-  /**
-   * Adds new parameter.
-   */
-  public final void addParameter(String name, String value) {
-    Assert.isTrue(!m_parameters.containsKey(name), "Duplicate declaration of parameter '"
-        + name
-        + "'.");
-    m_parameters.put(name, value);
-  }
+	/**
+	 * Adds new parameter.
+	 */
+	public final void addParameter(String name, String value) {
+		Assert.isTrue(!m_parameters.containsKey(name), "Duplicate declaration of parameter '"
+				+ name
+				+ "'.");
+		m_parameters.put(name, value);
+	}
 
-  /**
-   * Adds new list parameter.
-   */
-  @SuppressWarnings("unchecked")
-  public final void addListParameter(String name, String value) {
-    List<String> list = (List<String>) m_parameters.get(name);
-    if (list == null) {
-      list = Lists.newArrayList();
-      m_parameters.put(name, list);
-    }
-    list.add(value);
-  }
+	/**
+	 * Adds new list parameter.
+	 */
+	@SuppressWarnings("unchecked")
+	public final void addListParameter(String name, String value) {
+		List<String> list = (List<String>) m_parameters.get(name);
+		if (list == null) {
+			list = Lists.newArrayList();
+			m_parameters.put(name, list);
+		}
+		list.add(value);
+	}
 
-  /**
-   * Configures given {@link IConfigurablePropertyObject} with current parameters.
-   */
-  public final void configure(EditorState state, IConfigurablePropertyObject configurableObject)
-      throws Exception {
-    configurableObject.configure(state, m_parameters);
-  }
+	/**
+	 * Configures given {@link IConfigurablePropertyObject} with current parameters.
+	 */
+	public final void configure(EditorState state, IConfigurablePropertyObject configurableObject)
+			throws Exception {
+		configurableObject.configure(state, m_parameters);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/internal/PropertyEditorDescription.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/internal/PropertyEditorDescription.java
index dff18a885..3a041bea5 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/internal/PropertyEditorDescription.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/internal/PropertyEditorDescription.java
@@ -21,31 +21,31 @@
  * @coverage core.model.description
  */
 public final class PropertyEditorDescription extends AbstractConfigurableDescription {
-  private final EditorState m_state;
-  private final PropertyEditor m_editor;
+	private final EditorState m_state;
+	private final PropertyEditor m_editor;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public PropertyEditorDescription(EditorState state, PropertyEditor editor) {
-    m_state = state;
-    m_editor = editor;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public PropertyEditorDescription(EditorState state, PropertyEditor editor) {
+		m_state = state;
+		m_editor = editor;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return configured {@link PropertyEditor}.
-   */
-  public PropertyEditor getConfiguredEditor() throws Exception {
-    if (m_editor instanceof IConfigurablePropertyObject) {
-      configure(m_state, (IConfigurablePropertyObject) m_editor);
-    }
-    return m_editor;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return configured {@link PropertyEditor}.
+	 */
+	public PropertyEditor getConfiguredEditor() throws Exception {
+		if (m_editor instanceof IConfigurablePropertyObject) {
+			configure(m_state, (IConfigurablePropertyObject) m_editor);
+		}
+		return m_editor;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/resource/ClassResourceInfo.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/resource/ClassResourceInfo.java
index 521b0e94d..f8518295f 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/resource/ClassResourceInfo.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/resource/ClassResourceInfo.java
@@ -17,11 +17,11 @@
  * @coverage core.model.description
  */
 public final class ClassResourceInfo {
-  public final Class<?> clazz;
-  public final ResourceInfo resource;
+	public final Class<?> clazz;
+	public final ResourceInfo resource;
 
-  public ClassResourceInfo(Class<?> clazz, ResourceInfo resource) {
-    this.clazz = clazz;
-    this.resource = resource;
-  }
+	public ClassResourceInfo(Class<?> clazz, ResourceInfo resource) {
+		this.clazz = clazz;
+		this.resource = resource;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/resource/EmptyDescriptionVersionsProvider.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/resource/EmptyDescriptionVersionsProvider.java
index 902ef75ed..c1c437a8e 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/resource/EmptyDescriptionVersionsProvider.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/resource/EmptyDescriptionVersionsProvider.java
@@ -24,24 +24,24 @@
  * @coverage core.model.description
  */
 public final class EmptyDescriptionVersionsProvider implements IDescriptionVersionsProvider {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final IDescriptionVersionsProvider INSTANCE =
-      new EmptyDescriptionVersionsProvider();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final IDescriptionVersionsProvider INSTANCE =
+			new EmptyDescriptionVersionsProvider();
 
-  private EmptyDescriptionVersionsProvider() {
-  }
+	private EmptyDescriptionVersionsProvider() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IDescriptionVersionsProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public List<String> getVersions(Class<?> componentClass) throws Exception {
-    return ImmutableList.of();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IDescriptionVersionsProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public List<String> getVersions(Class<?> componentClass) throws Exception {
+		return ImmutableList.of();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/resource/FromListDescriptionVersionsProvider.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/resource/FromListDescriptionVersionsProvider.java
index 128b2aafa..c8a380b68 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/resource/FromListDescriptionVersionsProvider.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/resource/FromListDescriptionVersionsProvider.java
@@ -24,41 +24,41 @@
  * @coverage core.model.description
  */
 public abstract class FromListDescriptionVersionsProvider implements IDescriptionVersionsProvider {
-  private final List<String> m_versions = Lists.newArrayList();
+	private final List<String> m_versions = Lists.newArrayList();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FromListDescriptionVersionsProvider(List<String> allVersions, String currentVersion) {
-    int currentVersionIndex = allVersions.indexOf(currentVersion);
-    Assert.isTrue(
-        currentVersionIndex != -1,
-        "Version %s is not present in %s",
-        currentVersion,
-        allVersions);
-    // add versions from current to earlier versions
-    for (String version : allVersions) {
-      m_versions.add(0, version);
-      if (version.equals(currentVersion)) {
-        break;
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FromListDescriptionVersionsProvider(List<String> allVersions, String currentVersion) {
+		int currentVersionIndex = allVersions.indexOf(currentVersion);
+		Assert.isTrue(
+				currentVersionIndex != -1,
+				"Version %s is not present in %s",
+				currentVersion,
+				allVersions);
+		// add versions from current to earlier versions
+		for (String version : allVersions) {
+			m_versions.add(0, version);
+			if (version.equals(currentVersion)) {
+				break;
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IDescriptionVersionsProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public List<String> getVersions(Class<?> componentClass) throws Exception {
-    if (validate(componentClass)) {
-      return m_versions;
-    }
-    return ImmutableList.of();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IDescriptionVersionsProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public List<String> getVersions(Class<?> componentClass) throws Exception {
+		if (validate(componentClass)) {
+			return m_versions;
+		}
+		return ImmutableList.of();
+	}
 
-  protected abstract boolean validate(Class<?> componentClass) throws Exception;
+	protected abstract boolean validate(Class<?> componentClass) throws Exception;
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/resource/IDescriptionVersionsProvider.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/resource/IDescriptionVersionsProvider.java
index 4406972f9..ccb11509e 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/resource/IDescriptionVersionsProvider.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/resource/IDescriptionVersionsProvider.java
@@ -26,9 +26,9 @@
  * @coverage core.model.description
  */
 public interface IDescriptionVersionsProvider {
-  /**
-   * @return the {@link List} of versions, or sub-folders in "wbp-meta" where component description
-   *         may be found, may be empty {@link List}, but not <code>null</code>.
-   */
-  List<String> getVersions(Class<?> componentClass) throws Exception;
+	/**
+	 * @return the {@link List} of versions, or sub-folders in "wbp-meta" where component description
+	 *         may be found, may be empty {@link List}, but not <code>null</code>.
+	 */
+	List<String> getVersions(Class<?> componentClass) throws Exception;
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/resource/IDescriptionVersionsProviderFactory.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/resource/IDescriptionVersionsProviderFactory.java
index f05382705..3663fdfa3 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/resource/IDescriptionVersionsProviderFactory.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/resource/IDescriptionVersionsProviderFactory.java
@@ -25,22 +25,22 @@
  * @coverage core.model.description
  */
 public interface IDescriptionVersionsProviderFactory {
-  /**
-   * @return the {@link Map} with versions, for example <code>rcp.version -> 3.2</code> or
-   *         <code>gwt_version -> 1.5</code>.
-   */
-  Map<String, Object> getVersions(IJavaProject javaProject, ClassLoader classLoader)
-      throws Exception;
+	/**
+	 * @return the {@link Map} with versions, for example <code>rcp.version -> 3.2</code> or
+	 *         <code>gwt_version -> 1.5</code>.
+	 */
+	Map<String, Object> getVersions(IJavaProject javaProject, ClassLoader classLoader)
+			throws Exception;
 
-  /**
-   * @param javaProject
-   *          the {@link IJavaProject} that can be used to detect version of toolkit/library.
-   * @param classLoader
-   *          the editor {@link ClassLoader} that can be used to detect version of toolkit/library.
-   *
-   * @return the {@link IDescriptionVersionsProvider} for toolkit or library that is supported by
-   *         this {@link IDescriptionVersionsProviderFactory}, may be <code>null</code>.
-   */
-  IDescriptionVersionsProvider getProvider(IJavaProject javaProject, ClassLoader classLoader)
-      throws Exception;
+	/**
+	 * @param javaProject
+	 *          the {@link IJavaProject} that can be used to detect version of toolkit/library.
+	 * @param classLoader
+	 *          the editor {@link ClassLoader} that can be used to detect version of toolkit/library.
+	 *
+	 * @return the {@link IDescriptionVersionsProvider} for toolkit or library that is supported by
+	 *         this {@link IDescriptionVersionsProviderFactory}, may be <code>null</code>.
+	 */
+	IDescriptionVersionsProvider getProvider(IJavaProject javaProject, ClassLoader classLoader)
+			throws Exception;
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/resource/ResourceInfo.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/resource/ResourceInfo.java
index d5b7f943f..c4e7dfb75 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/resource/ResourceInfo.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/resource/ResourceInfo.java
@@ -23,44 +23,44 @@
  * @coverage core.model.description
  */
 public final class ResourceInfo {
-  private final Bundle m_bundle;
-  private final ToolkitDescription m_toolkit;
-  private final URL m_url;
+	private final Bundle m_bundle;
+	private final ToolkitDescription m_toolkit;
+	private final URL m_url;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ResourceInfo(Bundle bundle, ToolkitDescription toolkit, URL url) {
-    m_bundle = bundle;
-    m_toolkit = toolkit;
-    m_url = url;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ResourceInfo(Bundle bundle, ToolkitDescription toolkit, URL url) {
+		m_bundle = bundle;
+		m_toolkit = toolkit;
+		m_url = url;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link Bundle} that contains this {@link ResourceInfo}.
-   */
-  public Bundle getBundle() {
-    return m_bundle;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link Bundle} that contains this {@link ResourceInfo}.
+	 */
+	public Bundle getBundle() {
+		return m_bundle;
+	}
 
-  /**
-   * @return the {@link ToolkitDescription} of {@link Bundle}.
-   */
-  public ToolkitDescription getToolkit() {
-    return m_toolkit;
-  }
+	/**
+	 * @return the {@link ToolkitDescription} of {@link Bundle}.
+	 */
+	public ToolkitDescription getToolkit() {
+		return m_toolkit;
+	}
 
-  /**
-   * @return the {@link URL} with reference on this {@link ResourceInfo}.
-   */
-  public URL getURL() {
-    return m_url;
-  }
+	/**
+	 * @return the {@link URL} with reference on this {@link ResourceInfo}.
+	 */
+	public URL getURL() {
+		return m_url;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/AbstractDesignerRule.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/AbstractDesignerRule.java
index 8cf2c177f..420f8e8ee 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/AbstractDesignerRule.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/AbstractDesignerRule.java
@@ -23,19 +23,19 @@
  * @coverage core.model.description
  */
 public abstract class AbstractDesignerRule extends Rule {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the value of required attribute or throws exception if attribute is missing.
-   */
-  protected static String getRequiredAttribute(String tagName,
-      Attributes attributes,
-      String attributeName) {
-    String value = attributes.getValue(attributeName);
-    Assert.isNotNull(value, "Attribute '" + attributeName + "' for <" + tagName + "> required.");
-    return value;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the value of required attribute or throws exception if attribute is missing.
+	 */
+	protected static String getRequiredAttribute(String tagName,
+			Attributes attributes,
+			String attributeName) {
+		String value = attributes.getValue(attributeName);
+		Assert.isNotNull(value, "Attribute '" + attributeName + "' for <" + tagName + "> required.");
+		return value;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/ConfigurableObjectListParameterRule.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/ConfigurableObjectListParameterRule.java
index 3c3157a67..8f7d108ca 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/ConfigurableObjectListParameterRule.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/ConfigurableObjectListParameterRule.java
@@ -23,28 +23,28 @@
  * @coverage core.model.description
  */
 public final class ConfigurableObjectListParameterRule extends AbstractDesignerRule {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Rule
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private String m_name;
-  private String m_value;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Rule
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private String m_name;
+	private String m_value;
 
-  @Override
-  public void begin(String namespace, String name, Attributes attributes) throws Exception {
-    m_name = getRequiredAttribute(name, attributes, "name");
-  }
+	@Override
+	public void begin(String namespace, String name, Attributes attributes) throws Exception {
+		m_name = getRequiredAttribute(name, attributes, "name");
+	}
 
-  @Override
-  public void body(String namespace, String name, String text) throws Exception {
-    m_value = text;
-    Assert.isNotNull(m_value, "Body text for <" + name + "> required.");
-  }
+	@Override
+	public void body(String namespace, String name, String text) throws Exception {
+		m_value = text;
+		Assert.isNotNull(m_value, "Body text for <" + name + "> required.");
+	}
 
-  @Override
-  public void end(String namespace, String name) throws Exception {
-    AbstractConfigurableDescription description = (AbstractConfigurableDescription) getDigester().peek();
-    description.addListParameter(m_name, m_value);
-  }
+	@Override
+	public void end(String namespace, String name) throws Exception {
+		AbstractConfigurableDescription description = (AbstractConfigurableDescription) getDigester().peek();
+		description.addListParameter(m_name, m_value);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/ConfigurablePropertyRule.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/ConfigurablePropertyRule.java
index 0821daf22..967f0daee 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/ConfigurablePropertyRule.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/ConfigurablePropertyRule.java
@@ -23,30 +23,30 @@
  * @coverage core.model.description
  */
 public final class ConfigurablePropertyRule extends AbstractDesignerRule {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Rule
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void begin(String namespace, String name, Attributes attributes) throws Exception {
-    String id = getRequiredAttribute(name, attributes, "id");
-    String title = getRequiredAttribute(name, attributes, "title");
-    // create property
-    ConfigurablePropertyDescription propertyDescription = new ConfigurablePropertyDescription();
-    propertyDescription.setId(id);
-    propertyDescription.setTitle(title);
-    // add property
-    {
-      ComponentDescription componentDescription = (ComponentDescription) getDigester().peek();
-      componentDescription.addConfigurableProperty(propertyDescription);
-    }
-    // push property
-    getDigester().push(propertyDescription);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Rule
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void begin(String namespace, String name, Attributes attributes) throws Exception {
+		String id = getRequiredAttribute(name, attributes, "id");
+		String title = getRequiredAttribute(name, attributes, "title");
+		// create property
+		ConfigurablePropertyDescription propertyDescription = new ConfigurablePropertyDescription();
+		propertyDescription.setId(id);
+		propertyDescription.setTitle(title);
+		// add property
+		{
+			ComponentDescription componentDescription = (ComponentDescription) getDigester().peek();
+			componentDescription.addConfigurableProperty(propertyDescription);
+		}
+		// push property
+		getDigester().push(propertyDescription);
+	}
 
-  @Override
-  public void end(String namespace, String name) throws Exception {
-    getDigester().pop();
-  }
+	@Override
+	public void end(String namespace, String name) throws Exception {
+		getDigester().pop();
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/ConstructorRule.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/ConstructorRule.java
index dff8806c0..9a25238aa 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/ConstructorRule.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/ConstructorRule.java
@@ -23,40 +23,40 @@
  * @coverage core.model.description
  */
 public final class ConstructorRule extends Rule {
-  private ComponentDescription componentDescription;
-  private ConstructorDescription constructorDescription;
+	private ComponentDescription componentDescription;
+	private ConstructorDescription constructorDescription;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Rule
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void begin(String namespace, String name, Attributes attributes) throws Exception {
-    componentDescription = (ComponentDescription) getDigester().peek();
-    createConstructorDescription();
-    getDigester().push(constructorDescription);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Rule
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void begin(String namespace, String name, Attributes attributes) throws Exception {
+		componentDescription = (ComponentDescription) getDigester().peek();
+		createConstructorDescription();
+		getDigester().push(constructorDescription);
+	}
 
-  private void createConstructorDescription() {
-    Class<?> componentClass = componentDescription.getComponentClass();
-    constructorDescription = new ConstructorDescription(componentClass);
-  }
+	private void createConstructorDescription() {
+		Class<?> componentClass = componentDescription.getComponentClass();
+		constructorDescription = new ConstructorDescription(componentClass);
+	}
 
-  @Override
-  public void end(String namespace, String name) throws Exception {
-    getDigester().pop();
-    constructorDescription.postProcess();
-    // add constructor only if we are parsing final component class
-    if (componentDescription.getCurrentClass() == componentDescription.getComponentClass()) {
-      componentDescription.addConstructor(constructorDescription);
-    }
-  }
+	@Override
+	public void end(String namespace, String name) throws Exception {
+		getDigester().pop();
+		constructorDescription.postProcess();
+		// add constructor only if we are parsing final component class
+		if (componentDescription.getCurrentClass() == componentDescription.getComponentClass()) {
+			componentDescription.addConstructor(constructorDescription);
+		}
+	}
 
-  @Override
-  public void finish() throws Exception {
-    super.finish();
-    componentDescription = null;
-    constructorDescription = null;
-  }
+	@Override
+	public void finish() throws Exception {
+		super.finish();
+		componentDescription = null;
+		constructorDescription = null;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/CreationTagRule.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/CreationTagRule.java
index 9d7e34a43..0760b09a1 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/CreationTagRule.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/CreationTagRule.java
@@ -22,16 +22,16 @@
  * @coverage core.model.description
  */
 public final class CreationTagRule extends AbstractDesignerRule {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Rule
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void begin(String namespace, String name, Attributes attributes) throws Exception {
-    String tag = getRequiredAttribute(name, attributes, "name");
-    String value = getRequiredAttribute(name, attributes, "value");
-    CreationDescription creationDescription = (CreationDescription) getDigester().peek();
-    creationDescription.putTag(tag, value);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Rule
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void begin(String namespace, String name, Attributes attributes) throws Exception {
+		String tag = getRequiredAttribute(name, attributes, "name");
+		String value = getRequiredAttribute(name, attributes, "value");
+		CreationDescription creationDescription = (CreationDescription) getDigester().peek();
+		creationDescription.putTag(tag, value);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/CreationTypeParametersRule.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/CreationTypeParametersRule.java
index 91e75c6ea..fd91e95c4 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/CreationTypeParametersRule.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/CreationTypeParametersRule.java
@@ -22,17 +22,17 @@
  * @coverage core.model.description
  */
 public final class CreationTypeParametersRule extends AbstractDesignerRule {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Rule
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void begin(String namespace, String elementName, Attributes attributes) throws Exception {
-    String name = getRequiredAttribute(elementName, attributes, "name");
-    String type = getRequiredAttribute(elementName, attributes, "type");
-    String description = getRequiredAttribute(elementName, attributes, "title");
-    CreationDescription creationDescription = (CreationDescription) getDigester().peek();
-    creationDescription.setTypeParameter(name, type, description);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Rule
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void begin(String namespace, String elementName, Attributes attributes) throws Exception {
+		String name = getRequiredAttribute(elementName, attributes, "name");
+		String type = getRequiredAttribute(elementName, attributes, "type");
+		String description = getRequiredAttribute(elementName, attributes, "title");
+		CreationDescription creationDescription = (CreationDescription) getDigester().peek();
+		creationDescription.setTypeParameter(name, type, description);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/ExposingRulesRule.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/ExposingRulesRule.java
index 7c246d545..5f9da435d 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/ExposingRulesRule.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/ExposingRulesRule.java
@@ -25,26 +25,26 @@
  * @coverage core.model.description
  */
 public final class ExposingRulesRule extends AbstractDesignerRule {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Rule
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void begin(String namespace, String name, Attributes attributes) throws Exception {
-    ComponentDescription componentDescription = (ComponentDescription) getDigester().peek();
-    // prepare attributes
-    boolean include = "include".equals(name);
-    String packageName = attributes.getValue("package");
-    String methodName = attributes.getValue("method");
-    // add expose rules
-    if (packageName != null) {
-      ExposingRule rule = new ExposingPackageRule(include, packageName);
-      componentDescription.addExposingRule(rule);
-    }
-    if (methodName != null) {
-      ExposingRule rule = new ExposingMethodRule(include, methodName);
-      componentDescription.addExposingRule(rule);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Rule
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void begin(String namespace, String name, Attributes attributes) throws Exception {
+		ComponentDescription componentDescription = (ComponentDescription) getDigester().peek();
+		// prepare attributes
+		boolean include = "include".equals(name);
+		String packageName = attributes.getValue("package");
+		String methodName = attributes.getValue("method");
+		// add expose rules
+		if (packageName != null) {
+			ExposingRule rule = new ExposingPackageRule(include, packageName);
+			componentDescription.addExposingRule(rule);
+		}
+		if (methodName != null) {
+			ExposingRule rule = new ExposingMethodRule(include, methodName);
+			componentDescription.addExposingRule(rule);
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/MethodOrderDefaultRule.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/MethodOrderDefaultRule.java
index 0db6f759a..2c366b0ef 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/MethodOrderDefaultRule.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/MethodOrderDefaultRule.java
@@ -23,15 +23,15 @@
  * @coverage core.model.description
  */
 public final class MethodOrderDefaultRule extends AbstractDesignerRule {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Rule
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void begin(String namespace, String name, Attributes attributes) throws Exception {
-    ComponentDescription componentDescription = (ComponentDescription) getDigester().peek();
-    String specification = getRequiredAttribute(name, attributes, "order");
-    componentDescription.setDefaultMethodOrder(MethodOrder.parse(specification));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Rule
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void begin(String namespace, String name, Attributes attributes) throws Exception {
+		ComponentDescription componentDescription = (ComponentDescription) getDigester().peek();
+		String specification = getRequiredAttribute(name, attributes, "order");
+		componentDescription.setDefaultMethodOrder(MethodOrder.parse(specification));
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/MethodOrderMethodRule.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/MethodOrderMethodRule.java
index 8cfe6e9f1..3ccd42016 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/MethodOrderMethodRule.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/MethodOrderMethodRule.java
@@ -25,32 +25,32 @@
  * @coverage core.model.description
  */
 public final class MethodOrderMethodRule extends AbstractDesignerRule {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Rule
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void begin(String namespace, String name, Attributes attributes) throws Exception {
-    // prepare order
-    MethodOrder order;
-    {
-      String specification = getRequiredAttribute(name, attributes, "order");
-      order = MethodOrder.parse(specification);
-    }
-    // prepare method
-    MethodDescription methodDescription;
-    {
-      String signature = getRequiredAttribute(name, attributes, "signature");
-      ComponentDescription componentDescription = (ComponentDescription) getDigester().peek();
-      methodDescription = componentDescription.getMethod(signature);
-      Assert.isNotNull(
-          methodDescription,
-          "Can not find method %s for %s.",
-          signature,
-          componentDescription);
-    }
-    // set order
-    methodDescription.setOrder(order);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Rule
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void begin(String namespace, String name, Attributes attributes) throws Exception {
+		// prepare order
+		MethodOrder order;
+		{
+			String specification = getRequiredAttribute(name, attributes, "order");
+			order = MethodOrder.parse(specification);
+		}
+		// prepare method
+		MethodDescription methodDescription;
+		{
+			String signature = getRequiredAttribute(name, attributes, "signature");
+			ComponentDescription componentDescription = (ComponentDescription) getDigester().peek();
+			methodDescription = componentDescription.getMethod(signature);
+			Assert.isNotNull(
+					methodDescription,
+					"Can not find method %s for %s.",
+					signature,
+					componentDescription);
+		}
+		// set order
+		methodDescription.setOrder(order);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/MethodOrderMethodsRule.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/MethodOrderMethodsRule.java
index a1c4d2d8b..049f03153 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/MethodOrderMethodsRule.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/MethodOrderMethodsRule.java
@@ -29,48 +29,48 @@
  * @coverage core.model.description
  */
 public final class MethodOrderMethodsRule extends AbstractDesignerRule {
-  private MethodOrder m_order;
-  private List<String> m_signatures;
+	private MethodOrder m_order;
+	private List<String> m_signatures;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Rule
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void begin(String namespace, String name, Attributes attributes) throws Exception {
-    // prepare order
-    {
-      String specification = getRequiredAttribute(name, attributes, "order");
-      m_order = MethodOrder.parse(specification);
-    }
-    // push List for signatures
-    {
-      m_signatures = Lists.newArrayList();
-      getDigester().push(m_signatures);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Rule
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void begin(String namespace, String name, Attributes attributes) throws Exception {
+		// prepare order
+		{
+			String specification = getRequiredAttribute(name, attributes, "order");
+			m_order = MethodOrder.parse(specification);
+		}
+		// push List for signatures
+		{
+			m_signatures = Lists.newArrayList();
+			getDigester().push(m_signatures);
+		}
+	}
 
-  @Override
-  public void end(String namespace, String name) throws Exception {
-    getDigester().pop();
-    ComponentDescription componentDescription = (ComponentDescription) getDigester().peek();
-    for (String signature : m_signatures) {
-      // prepare method
-      MethodDescription methodDescription;
-      {
-        methodDescription = componentDescription.getMethod(signature);
-        Assert.isNotNull(
-            methodDescription,
-            "Can not find method %s for %s.",
-            signature,
-            componentDescription);
-      }
-      // set order
-      methodDescription.setOrder(m_order);
-    }
-    // clean up
-    m_order = null;
-    m_signatures = null;
-  }
+	@Override
+	public void end(String namespace, String name) throws Exception {
+		getDigester().pop();
+		ComponentDescription componentDescription = (ComponentDescription) getDigester().peek();
+		for (String signature : m_signatures) {
+			// prepare method
+			MethodDescription methodDescription;
+			{
+				methodDescription = componentDescription.getMethod(signature);
+				Assert.isNotNull(
+						methodDescription,
+						"Can not find method %s for %s.",
+						signature,
+						componentDescription);
+			}
+			// set order
+			methodDescription.setOrder(m_order);
+		}
+		// clean up
+		m_order = null;
+		m_signatures = null;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/MethodOrderMethodsSignatureRule.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/MethodOrderMethodsSignatureRule.java
index 1b4a80f52..0b48687d1 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/MethodOrderMethodsSignatureRule.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/MethodOrderMethodsSignatureRule.java
@@ -21,16 +21,16 @@
  * @coverage core.model.description
  */
 public final class MethodOrderMethodsSignatureRule extends AbstractDesignerRule {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Rule
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  @SuppressWarnings("unchecked")
-  public void body(String namespace, String name, String text) throws Exception {
-    List<String> signatures = (List<String>) getDigester().peek();
-    String signature = text.trim();
-    signatures.add(signature);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Rule
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	@SuppressWarnings("unchecked")
+	public void body(String namespace, String name, String text) throws Exception {
+		List<String> signatures = (List<String>) getDigester().peek();
+		String signature = text.trim();
+		signatures.add(signature);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/MethodPropertyRule.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/MethodPropertyRule.java
index 88f2ebeaa..e97a5652b 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/MethodPropertyRule.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/MethodPropertyRule.java
@@ -46,90 +46,90 @@
  * @coverage core.model.description
  */
 public final class MethodPropertyRule extends AbstractDesignerRule {
-  private final IJavaProject m_javaProject;
+	private final IJavaProject m_javaProject;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public MethodPropertyRule(IJavaProject javaProject) {
-    m_javaProject = javaProject;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public MethodPropertyRule(IJavaProject javaProject) {
+		m_javaProject = javaProject;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Rule
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void begin(String namespace, String name, Attributes attributes) throws Exception {
-    ComponentDescription componentDescription = (ComponentDescription) getDigester().peek();
-    Class<?> componentClass = componentDescription.getComponentClass();
-    // prepare method attributes
-    String propertyTitle = getRequiredAttribute(name, attributes, "title");
-    String methodSignature = getRequiredAttribute(name, attributes, "method");
-    String propertyId = methodSignature;
-    // prepare Method
-    Method method = ReflectionUtils.getMethodBySignature(componentClass, methodSignature);
-    Assert.isNotNull(method, "Method %s in %s.", methodSignature, componentClass);
-    // prepare executable MethodDescription
-    MethodDescription methodDescription;
-    {
-      methodDescription = componentDescription.addMethod(method);
-      ComponentDescriptionHelper.ensureInitialized(m_javaProject, methodDescription);
-    }
-    // prepare accessor
-    ExpressionAccessor accessor = new MethodInvocationAccessor(method);
-    // prepare editor
-    PropertyEditor editor;
-    {
-      List<GenericPropertyDescription> descriptions = Lists.newArrayList();
-      for (ParameterDescription parameter : methodDescription.getParameters()) {
-        GenericPropertyDescription description =
-            createPropertyDescription(method, propertyId, parameter);
-        if (description != null) {
-          descriptions.add(description);
-          componentDescription.registerProperty(description);
-        }
-      }
-      editor = new MethodPropertyPropertyEditor("(properties)", descriptions);
-    }
-    // create property
-    GenericPropertyDescription propertyDescription =
-        new GenericPropertyDescription(propertyId, propertyTitle);
-    propertyDescription.addAccessor(accessor);
-    propertyDescription.setEditor(editor);
-    // add property
-    componentDescription.addProperty(propertyDescription);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Rule
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void begin(String namespace, String name, Attributes attributes) throws Exception {
+		ComponentDescription componentDescription = (ComponentDescription) getDigester().peek();
+		Class<?> componentClass = componentDescription.getComponentClass();
+		// prepare method attributes
+		String propertyTitle = getRequiredAttribute(name, attributes, "title");
+		String methodSignature = getRequiredAttribute(name, attributes, "method");
+		String propertyId = methodSignature;
+		// prepare Method
+		Method method = ReflectionUtils.getMethodBySignature(componentClass, methodSignature);
+		Assert.isNotNull(method, "Method %s in %s.", methodSignature, componentClass);
+		// prepare executable MethodDescription
+		MethodDescription methodDescription;
+		{
+			methodDescription = componentDescription.addMethod(method);
+			ComponentDescriptionHelper.ensureInitialized(m_javaProject, methodDescription);
+		}
+		// prepare accessor
+		ExpressionAccessor accessor = new MethodInvocationAccessor(method);
+		// prepare editor
+		PropertyEditor editor;
+		{
+			List<GenericPropertyDescription> descriptions = Lists.newArrayList();
+			for (ParameterDescription parameter : methodDescription.getParameters()) {
+				GenericPropertyDescription description =
+						createPropertyDescription(method, propertyId, parameter);
+				if (description != null) {
+					descriptions.add(description);
+					componentDescription.registerProperty(description);
+				}
+			}
+			editor = new MethodPropertyPropertyEditor("(properties)", descriptions);
+		}
+		// create property
+		GenericPropertyDescription propertyDescription =
+				new GenericPropertyDescription(propertyId, propertyTitle);
+		propertyDescription.addAccessor(accessor);
+		propertyDescription.setEditor(editor);
+		// add property
+		componentDescription.addProperty(propertyDescription);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link GenericPropertyDescription} for editing given {@link ParameterDescription},
-   *         may be <code>null</code> if it can not be edited.
-   */
-  private static GenericPropertyDescription createPropertyDescription(Method method,
-      String methodPropertyId,
-      ParameterDescription parameter) {
-    if (parameter.getEditor() != null) {
-      String propertyId = methodPropertyId + " " + parameter.getIndex();
-      String propertyTitle = parameter.getName();
-      GenericPropertyDescription propertyDescription =
-          new GenericPropertyDescription(propertyId, propertyTitle);
-      // fill GenericPropertyDescription
-      ExpressionAccessor accessor =
-          new MethodInvocationArgumentAccessor(method, parameter.getIndex());
-      propertyDescription.addAccessor(accessor);
-      propertyDescription.setConverter(parameter.getConverter());
-      propertyDescription.setEditor(parameter.getEditor());
-      // OK, we have GenericPropertyDescription
-      return propertyDescription;
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link GenericPropertyDescription} for editing given {@link ParameterDescription},
+	 *         may be <code>null</code> if it can not be edited.
+	 */
+	private static GenericPropertyDescription createPropertyDescription(Method method,
+			String methodPropertyId,
+			ParameterDescription parameter) {
+		if (parameter.getEditor() != null) {
+			String propertyId = methodPropertyId + " " + parameter.getIndex();
+			String propertyTitle = parameter.getName();
+			GenericPropertyDescription propertyDescription =
+					new GenericPropertyDescription(propertyId, propertyTitle);
+			// fill GenericPropertyDescription
+			ExpressionAccessor accessor =
+					new MethodInvocationArgumentAccessor(method, parameter.getIndex());
+			propertyDescription.addAccessor(accessor);
+			propertyDescription.setConverter(parameter.getConverter());
+			propertyDescription.setEditor(parameter.getEditor());
+			// OK, we have GenericPropertyDescription
+			return propertyDescription;
+		}
+		return null;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/MethodRule.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/MethodRule.java
index 64cd4516f..71ae8cac4 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/MethodRule.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/MethodRule.java
@@ -27,84 +27,84 @@
  * @coverage core.model.description
  */
 public final class MethodRule extends AbstractDesignerRule {
-  private ComponentDescription componentDescription;
-  private MethodDescription methodDescription;
+	private ComponentDescription componentDescription;
+	private MethodDescription methodDescription;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Rule.begin
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void begin(String namespace, String name, Attributes attributes) throws Exception {
-    componentDescription = (ComponentDescription) getDigester().peek();
-    pushNewMethodDescription();
-    configureBegin(attributes);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Rule.begin
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void begin(String namespace, String name, Attributes attributes) throws Exception {
+		componentDescription = (ComponentDescription) getDigester().peek();
+		pushNewMethodDescription();
+		configureBegin(attributes);
+	}
 
-  private void pushNewMethodDescription() {
-    Class<?> componentClass = componentDescription.getComponentClass();
-    methodDescription = new MethodDescription(componentClass);
-    getDigester().push(methodDescription);
-  }
+	private void pushNewMethodDescription() {
+		Class<?> componentClass = componentDescription.getComponentClass();
+		methodDescription = new MethodDescription(componentClass);
+		getDigester().push(methodDescription);
+	}
 
-  private void configureBegin(Attributes attributes) {
-    methodDescription.setName(getRequiredAttribute("method", attributes, "name"));
-    setOptionalOrder(attributes);
-    setExecutableFlag(attributes);
-  }
+	private void configureBegin(Attributes attributes) {
+		methodDescription.setName(getRequiredAttribute("method", attributes, "name"));
+		setOptionalOrder(attributes);
+		setExecutableFlag(attributes);
+	}
 
-  private void setOptionalOrder(Attributes attributes) {
-    String orderSpecification = attributes.getValue("order");
-    if (orderSpecification != null) {
-      methodDescription.setOrderSpecification(orderSpecification);
-    }
-  }
+	private void setOptionalOrder(Attributes attributes) {
+		String orderSpecification = attributes.getValue("order");
+		if (orderSpecification != null) {
+			methodDescription.setOrderSpecification(orderSpecification);
+		}
+	}
 
-  private void setExecutableFlag(Attributes attributes) {
-    String executableString = attributes.getValue("executable");
-    if (executableString != null) {
-      boolean executable = !"false".equalsIgnoreCase(executableString);
-      methodDescription.setExecutable(executable);
-    }
-  }
+	private void setExecutableFlag(Attributes attributes) {
+		String executableString = attributes.getValue("executable");
+		if (executableString != null) {
+			boolean executable = !"false".equalsIgnoreCase(executableString);
+			methodDescription.setExecutable(executable);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Rule.end
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void end(String namespace, String name) throws Exception {
-    popMethodDescription();
-    configureEnd();
-    componentDescription.addMethod(methodDescription);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Rule.end
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void end(String namespace, String name) throws Exception {
+		popMethodDescription();
+		configureEnd();
+		componentDescription.addMethod(methodDescription);
+	}
 
-  private void popMethodDescription() {
-    getDigester().pop();
-  }
+	private void popMethodDescription() {
+		getDigester().pop();
+	}
 
-  private void configureEnd() {
-    methodDescription.postProcess();
-    configureWithReflectionMethod();
-  }
+	private void configureEnd() {
+		methodDescription.postProcess();
+		configureWithReflectionMethod();
+	}
 
-  private void configureWithReflectionMethod() {
-    Method method = getReflectionMethod();
-    methodDescription.setReturnClass(method.getReturnType());
-  }
+	private void configureWithReflectionMethod() {
+		Method method = getReflectionMethod();
+		methodDescription.setReturnClass(method.getReturnType());
+	}
 
-  private Method getReflectionMethod() {
-    Class<?> componentClass = methodDescription.getDeclaringClass();
-    String signature = methodDescription.getSignature();
-    Method method = ReflectionUtils.getMethodBySignature(componentClass, signature);
-    Assert.isNotNull2(
-        method,
-        "No such method {0}.{1} during parsing {2}",
-        componentClass.getName(),
-        signature,
-        componentDescription.getCurrentClass().getName());
-    return method;
-  }
+	private Method getReflectionMethod() {
+		Class<?> componentClass = methodDescription.getDeclaringClass();
+		String signature = methodDescription.getSignature();
+		Method method = ReflectionUtils.getMethodBySignature(componentClass, signature);
+		Assert.isNotNull2(
+				method,
+				"No such method {0}.{1} during parsing {2}",
+				componentClass.getName(),
+				signature,
+				componentDescription.getCurrentClass().getName());
+		return method;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/MethodSinglePropertyRule.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/MethodSinglePropertyRule.java
index d40c7a05f..0b8e76c1c 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/MethodSinglePropertyRule.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/MethodSinglePropertyRule.java
@@ -28,35 +28,35 @@
  * @coverage core.model.description
  */
 public final class MethodSinglePropertyRule extends AbstractDesignerRule {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Rule
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void begin(String namespace, String name, Attributes attributes) throws Exception {
-    ComponentDescription componentDescription = (ComponentDescription) getDigester().peek();
-    Class<?> componentClass = componentDescription.getComponentClass();
-    // prepare method attributes
-    String propertyTitle = getRequiredAttribute(name, attributes, "title");
-    String methodSignature = getRequiredAttribute(name, attributes, "method");
-    // prepare method
-    Method method = ReflectionUtils.getMethodBySignature(componentClass, methodSignature);
-    Assert.isTrue(
-        method.getParameterTypes().length == 1,
-        "Method with single parameter expected: %s",
-        method);
-    // add property
-    GenericPropertyDescription property = StandardBeanPropertiesRule.addSingleProperty(
-        componentDescription,
-        propertyTitle,
-        method,
-        null);
-    getDigester().push(property);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Rule
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void begin(String namespace, String name, Attributes attributes) throws Exception {
+		ComponentDescription componentDescription = (ComponentDescription) getDigester().peek();
+		Class<?> componentClass = componentDescription.getComponentClass();
+		// prepare method attributes
+		String propertyTitle = getRequiredAttribute(name, attributes, "title");
+		String methodSignature = getRequiredAttribute(name, attributes, "method");
+		// prepare method
+		Method method = ReflectionUtils.getMethodBySignature(componentClass, methodSignature);
+		Assert.isTrue(
+				method.getParameterTypes().length == 1,
+				"Method with single parameter expected: %s",
+				method);
+		// add property
+		GenericPropertyDescription property = StandardBeanPropertiesRule.addSingleProperty(
+				componentDescription,
+				propertyTitle,
+				method,
+				null);
+		getDigester().push(property);
+	}
 
-  @Override
-  public void end(String namespace, String name) throws Exception {
-    getDigester().pop();
-  }
+	@Override
+	public void end(String namespace, String name) throws Exception {
+		getDigester().pop();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/MethodTagRule.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/MethodTagRule.java
index db30a1798..060e85d26 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/MethodTagRule.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/MethodTagRule.java
@@ -22,16 +22,16 @@
  * @coverage core.model.description
  */
 public final class MethodTagRule extends AbstractDesignerRule {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Rule
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void begin(String namespace, String name, Attributes attributes) throws Exception {
-    String tag = getRequiredAttribute(name, attributes, "name");
-    String value = getRequiredAttribute(name, attributes, "value");
-    MethodDescription methodDescription = (MethodDescription) getDigester().peek();
-    methodDescription.putTag(tag, value);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Rule
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void begin(String namespace, String name, Attributes attributes) throws Exception {
+		String tag = getRequiredAttribute(name, attributes, "name");
+		String value = getRequiredAttribute(name, attributes, "value");
+		MethodDescription methodDescription = (MethodDescription) getDigester().peek();
+		methodDescription.putTag(tag, value);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/MethodsOperationRule.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/MethodsOperationRule.java
index 60625a11a..6f2a6efb2 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/MethodsOperationRule.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/MethodsOperationRule.java
@@ -32,83 +32,83 @@
  * @coverage core.model.description
  */
 public final class MethodsOperationRule extends AbstractDesignerRule {
-  private final boolean m_include;
+	private final boolean m_include;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public MethodsOperationRule(boolean include) {
-    m_include = include;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public MethodsOperationRule(boolean include) {
+		m_include = include;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Rule
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private ComponentDescription componentDescription;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Rule
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private ComponentDescription componentDescription;
 
-  @Override
-  public void begin(String namespace, String name, Attributes attributes) throws Exception {
-    componentDescription = (ComponentDescription) getDigester().peek();
-    String signature = getRequiredAttribute(name, attributes, "signature");
-    if (isRegexpSignature(signature)) {
-      processRegexp(signature);
-    } else {
-      processSingleSignature(signature);
-    }
-  }
+	@Override
+	public void begin(String namespace, String name, Attributes attributes) throws Exception {
+		componentDescription = (ComponentDescription) getDigester().peek();
+		String signature = getRequiredAttribute(name, attributes, "signature");
+		if (isRegexpSignature(signature)) {
+			processRegexp(signature);
+		} else {
+			processSingleSignature(signature);
+		}
+	}
 
-  private boolean isRegexpSignature(String signature) {
-    return signature.startsWith("/") && signature.endsWith("/");
-  }
+	private boolean isRegexpSignature(String signature) {
+		return signature.startsWith("/") && signature.endsWith("/");
+	}
 
-  private void processRegexp(final String signature) throws Exception {
-    final Pattern pattern = Pattern.compile(StringUtils.substring(signature, 1, -1));
-    process(new Predicate<String>() {
-      @Override
-      public boolean apply(String t) {
-        return pattern.matcher(t).matches();
-      }
-    });
-  }
+	private void processRegexp(final String signature) throws Exception {
+		final Pattern pattern = Pattern.compile(StringUtils.substring(signature, 1, -1));
+		process(new Predicate<String>() {
+			@Override
+			public boolean apply(String t) {
+				return pattern.matcher(t).matches();
+			}
+		});
+	}
 
-  private void processSingleSignature(final String signature) throws Exception {
-    process(new Predicate<String>() {
-      @Override
-      public boolean apply(String t) {
-        return signature.equals(t);
-      }
-    });
-  }
+	private void processSingleSignature(final String signature) throws Exception {
+		process(new Predicate<String>() {
+			@Override
+			public boolean apply(String t) {
+				return signature.equals(t);
+			}
+		});
+	}
 
-  private void process(Predicate<String> signaturePredicate) throws Exception {
-    if (m_include) {
-      processInclude(signaturePredicate);
-    } else {
-      processExclude(signaturePredicate);
-    }
-  }
+	private void process(Predicate<String> signaturePredicate) throws Exception {
+		if (m_include) {
+			processInclude(signaturePredicate);
+		} else {
+			processExclude(signaturePredicate);
+		}
+	}
 
-  private void processInclude(Predicate<String> signaturePredicate) throws Exception {
-    Method[] methods = componentDescription.getComponentClass().getMethods();
-    for (Method method : methods) {
-      String methodSignature = ReflectionUtils.getMethodSignature(method);
-      if (signaturePredicate.apply(methodSignature)) {
-        componentDescription.addMethod(method);
-      }
-    }
-  }
+	private void processInclude(Predicate<String> signaturePredicate) throws Exception {
+		Method[] methods = componentDescription.getComponentClass().getMethods();
+		for (Method method : methods) {
+			String methodSignature = ReflectionUtils.getMethodSignature(method);
+			if (signaturePredicate.apply(methodSignature)) {
+				componentDescription.addMethod(method);
+			}
+		}
+	}
 
-  private void processExclude(Predicate<String> signaturePredicate) {
-    for (Iterator<MethodDescription> I = componentDescription.getMethods().iterator(); I.hasNext();) {
-      MethodDescription methodDescription = I.next();
-      String methodSignature = methodDescription.getSignature();
-      if (signaturePredicate.apply(methodSignature)) {
-        I.remove();
-      }
-    }
-  }
+	private void processExclude(Predicate<String> signaturePredicate) {
+		for (Iterator<MethodDescription> I = componentDescription.getMethods().iterator(); I.hasNext();) {
+			MethodDescription methodDescription = I.next();
+			String methodSignature = methodDescription.getSignature();
+			if (signaturePredicate.apply(methodSignature)) {
+				I.remove();
+			}
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/ModelClassRule.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/ModelClassRule.java
index 67f31eaea..1711f6083 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/ModelClassRule.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/ModelClassRule.java
@@ -23,18 +23,18 @@
  * @coverage core.model.description
  */
 public final class ModelClassRule extends Rule {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Rule
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void begin(String namespace, String name, Attributes attributes) throws Exception {
-    // prepare model Class
-    String className = attributes.getValue("class");
-    Class<?> modelClass = DescriptionHelper.loadModelClass(className);
-    // set model Class
-    ComponentDescription componentDescription = (ComponentDescription) getDigester().peek();
-    componentDescription.setModelClass(modelClass);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Rule
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void begin(String namespace, String name, Attributes attributes) throws Exception {
+		// prepare model Class
+		String className = attributes.getValue("class");
+		Class<?> modelClass = DescriptionHelper.loadModelClass(className);
+		// set model Class
+		ComponentDescription componentDescription = (ComponentDescription) getDigester().peek();
+		componentDescription.setModelClass(modelClass);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/MorphingNoInheritRule.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/MorphingNoInheritRule.java
index 409e6e439..3936c921f 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/MorphingNoInheritRule.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/MorphingNoInheritRule.java
@@ -24,15 +24,15 @@
  * @coverage core.model.description
  */
 public final class MorphingNoInheritRule extends Rule {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Rule
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void begin(String namespace, String name, Attributes attributes) throws Exception {
-    // clear morphing targets
-    ComponentDescription componentDescription = (ComponentDescription) getDigester().peek();
-    componentDescription.clearMorphingTargets();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Rule
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void begin(String namespace, String name, Attributes attributes) throws Exception {
+		// clear morphing targets
+		ComponentDescription componentDescription = (ComponentDescription) getDigester().peek();
+		componentDescription.clearMorphingTargets();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/MorphingTargetRule.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/MorphingTargetRule.java
index 4f218d1bd..caed96139 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/MorphingTargetRule.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/MorphingTargetRule.java
@@ -25,43 +25,43 @@
  * @coverage core.model.description
  */
 public final class MorphingTargetRule extends Rule {
-  private final EditorState m_state;
-  private final ClassLoader m_classLoader;
+	private final EditorState m_state;
+	private final ClassLoader m_classLoader;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public MorphingTargetRule(EditorState state) {
-    m_state = state;
-    m_classLoader = m_state.getEditorLoader();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public MorphingTargetRule(EditorState state) {
+		m_state = state;
+		m_classLoader = m_state.getEditorLoader();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Rule
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void begin(String namespace, String name, Attributes attributes) throws Exception {
-    try {
-      addTarget(attributes);
-    } catch (ClassNotFoundException e) {
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Rule
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void begin(String namespace, String name, Attributes attributes) throws Exception {
+		try {
+			addTarget(attributes);
+		} catch (ClassNotFoundException e) {
+		}
+	}
 
-  private void addTarget(Attributes attributes) throws ClassNotFoundException {
-    String creationId = attributes.getValue("creationId");
-    // prepare class
-    Class<?> clazz;
-    {
-      String className = attributes.getValue("class");
-      Assert.isNotNull(className);
-      clazz = m_classLoader.loadClass(className);
-    }
-    // add morphing target
-    ComponentDescription componentDescription = (ComponentDescription) getDigester().peek();
-    componentDescription.addMorphingTarget(new MorphingTargetDescription(clazz, creationId));
-  }
+	private void addTarget(Attributes attributes) throws ClassNotFoundException {
+		String creationId = attributes.getValue("creationId");
+		// prepare class
+		Class<?> clazz;
+		{
+			String className = attributes.getValue("class");
+			Assert.isNotNull(className);
+			clazz = m_classLoader.loadClass(className);
+		}
+		// add morphing target
+		ComponentDescription componentDescription = (ComponentDescription) getDigester().peek();
+		componentDescription.addMorphingTarget(new MorphingTargetDescription(clazz, creationId));
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/ObjectCreateRule.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/ObjectCreateRule.java
index 8d4699daf..2263be4c6 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/ObjectCreateRule.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/ObjectCreateRule.java
@@ -20,29 +20,29 @@
  * @coverage core.model.description
  */
 public final class ObjectCreateRule extends Rule {
-  private final Class<?> m_class;
+	private final Class<?> m_class;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ObjectCreateRule(Class<?> clazz) {
-    m_class = clazz;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ObjectCreateRule(Class<?> clazz) {
+		m_class = clazz;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Rule
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void begin(String namespace, String name, Attributes attributes) throws Exception {
-    getDigester().push(m_class.newInstance());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Rule
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void begin(String namespace, String name, Attributes attributes) throws Exception {
+		getDigester().push(m_class.newInstance());
+	}
 
-  @Override
-  public void end(String namespace, String name) throws Exception {
-    getDigester().pop();
-  }
+	@Override
+	public void end(String namespace, String name) throws Exception {
+		getDigester().pop();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/ParameterEditorRule.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/ParameterEditorRule.java
index 33c39a857..ff3031821 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/ParameterEditorRule.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/ParameterEditorRule.java
@@ -26,39 +26,39 @@
  * @coverage core.model.description
  */
 public final class ParameterEditorRule extends Rule {
-  private final EditorState m_state;
+	private final EditorState m_state;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ParameterEditorRule(EditorState state) {
-    m_state = state;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ParameterEditorRule(EditorState state) {
+		m_state = state;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Rule
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void begin(String namespace, String name, Attributes attributes) throws Exception {
-    String id = attributes.getValue("id");
-    PropertyEditor editor = DescriptionPropertiesHelper.getConfigurableEditor(id);
-    getDigester().push(new PropertyEditorDescription(m_state, editor));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Rule
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void begin(String namespace, String name, Attributes attributes) throws Exception {
+		String id = attributes.getValue("id");
+		PropertyEditor editor = DescriptionPropertiesHelper.getConfigurableEditor(id);
+		getDigester().push(new PropertyEditorDescription(m_state, editor));
+	}
 
-  @Override
-  public void end(String namespace, String name) throws Exception {
-    // prepare editor
-    PropertyEditor editor;
-    {
-      PropertyEditorDescription editorDescription = (PropertyEditorDescription) getDigester().pop();
-      editor = editorDescription.getConfiguredEditor();
-    }
-    // set editor for current property
-    ParameterDescription propertyDescription = (ParameterDescription) getDigester().peek();
-    propertyDescription.setEditor(editor);
-  }
+	@Override
+	public void end(String namespace, String name) throws Exception {
+		// prepare editor
+		PropertyEditor editor;
+		{
+			PropertyEditorDescription editorDescription = (PropertyEditorDescription) getDigester().pop();
+			editor = editorDescription.getConfiguredEditor();
+		}
+		// set editor for current property
+		ParameterDescription propertyDescription = (ParameterDescription) getDigester().peek();
+		propertyDescription.setEditor(editor);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/ParameterTagRule.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/ParameterTagRule.java
index 72e5a581d..6fa5e9e4c 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/ParameterTagRule.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/ParameterTagRule.java
@@ -22,16 +22,16 @@
  * @coverage core.model.description
  */
 public final class ParameterTagRule extends AbstractDesignerRule {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Rule
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void begin(String namespace, String name, Attributes attributes) throws Exception {
-    String tag = getRequiredAttribute(name, attributes, "name");
-    String value = getRequiredAttribute(name, attributes, "value");
-    ParameterDescription parameterDescription = (ParameterDescription) getDigester().peek();
-    parameterDescription.putTag(tag, value);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Rule
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void begin(String namespace, String name, Attributes attributes) throws Exception {
+		String tag = getRequiredAttribute(name, attributes, "name");
+		String value = getRequiredAttribute(name, attributes, "value");
+		ParameterDescription parameterDescription = (ParameterDescription) getDigester().peek();
+		parameterDescription.putTag(tag, value);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/PropertyAccessRule.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/PropertyAccessRule.java
index e4bc144ec..a59ffb91f 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/PropertyAccessRule.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/PropertyAccessRule.java
@@ -23,20 +23,20 @@
  * @coverage core.model.description
  */
 public final class PropertyAccessRule extends Rule {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Rule
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void begin(String namespace, String name, Attributes attributes) throws Exception {
-    String id = attributes.getValue("id");
-    ComponentDescription componentDescription = (ComponentDescription) getDigester().peek();
-    getDigester().push(componentDescription.getProperty(id));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Rule
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void begin(String namespace, String name, Attributes attributes) throws Exception {
+		String id = attributes.getValue("id");
+		ComponentDescription componentDescription = (ComponentDescription) getDigester().peek();
+		getDigester().push(componentDescription.getProperty(id));
+	}
 
-  @Override
-  public void end(String namespace, String name) throws Exception {
-    getDigester().pop();
-  }
+	@Override
+	public void end(String namespace, String name) throws Exception {
+		getDigester().pop();
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/PropertyCategoryRule.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/PropertyCategoryRule.java
index 61bb8e657..319d95a16 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/PropertyCategoryRule.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/PropertyCategoryRule.java
@@ -24,32 +24,32 @@
  * @coverage core.model.description
  */
 public final class PropertyCategoryRule extends Rule {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Rule
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void begin(String namespace, String name, Attributes attributes) throws Exception {
-    // prepare category
-    PropertyCategory category;
-    {
-      String categoryTitle = attributes.getValue("value");
-      if ("preferred".equals(categoryTitle)) {
-        category = PropertyCategory.PREFERRED;
-      } else if ("normal".equals(categoryTitle)) {
-        category = PropertyCategory.NORMAL;
-      } else if ("advanced".equals(categoryTitle)) {
-        category = PropertyCategory.ADVANCED;
-      } else if ("hidden".equals(categoryTitle)) {
-        category = PropertyCategory.HIDDEN;
-      } else {
-        throw new IllegalArgumentException("Unknown category " + categoryTitle);
-      }
-    }
-    // set category
-    GenericPropertyDescription propertyDescription =
-        (GenericPropertyDescription) getDigester().peek();
-    propertyDescription.setCategory(category);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Rule
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void begin(String namespace, String name, Attributes attributes) throws Exception {
+		// prepare category
+		PropertyCategory category;
+		{
+			String categoryTitle = attributes.getValue("value");
+			if ("preferred".equals(categoryTitle)) {
+				category = PropertyCategory.PREFERRED;
+			} else if ("normal".equals(categoryTitle)) {
+				category = PropertyCategory.NORMAL;
+			} else if ("advanced".equals(categoryTitle)) {
+				category = PropertyCategory.ADVANCED;
+			} else if ("hidden".equals(categoryTitle)) {
+				category = PropertyCategory.HIDDEN;
+			} else {
+				throw new IllegalArgumentException("Unknown category " + categoryTitle);
+			}
+		}
+		// set category
+		GenericPropertyDescription propertyDescription =
+				(GenericPropertyDescription) getDigester().peek();
+		propertyDescription.setCategory(category);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/PropertyGetterRule.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/PropertyGetterRule.java
index 38b12f450..384dd5fca 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/PropertyGetterRule.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/PropertyGetterRule.java
@@ -28,23 +28,23 @@
  * @coverage core.model.description
  */
 public final class PropertyGetterRule extends Rule {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Rule
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void begin(String namespace, String name, Attributes attributes) throws Exception {
-    ComponentDescription componentDescription = (ComponentDescription) getDigester().peek(1);
-    GenericPropertyDescription propertyDescription =
-        (GenericPropertyDescription) getDigester().peek();
-    String getterName = attributes.getValue("name");
-    Method getter = ReflectionUtils.getMethod(componentDescription.getComponentClass(), getterName);
-    for (ExpressionAccessor accessor : propertyDescription.getAccessorsList()) {
-      if (accessor instanceof SetterAccessor) {
-        SetterAccessor setterAccessor = (SetterAccessor) accessor;
-        setterAccessor.setGetter(getter);
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Rule
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void begin(String namespace, String name, Attributes attributes) throws Exception {
+		ComponentDescription componentDescription = (ComponentDescription) getDigester().peek(1);
+		GenericPropertyDescription propertyDescription =
+				(GenericPropertyDescription) getDigester().peek();
+		String getterName = attributes.getValue("name");
+		Method getter = ReflectionUtils.getMethod(componentDescription.getComponentClass(), getterName);
+		for (ExpressionAccessor accessor : propertyDescription.getAccessorsList()) {
+			if (accessor instanceof SetterAccessor) {
+				SetterAccessor setterAccessor = (SetterAccessor) accessor;
+				setterAccessor.setGetter(getter);
+			}
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/PublicFieldPropertiesRule.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/PublicFieldPropertiesRule.java
index 2616e78bf..c993ca99d 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/PublicFieldPropertiesRule.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/PublicFieldPropertiesRule.java
@@ -30,42 +30,42 @@
  * @coverage core.model.description
  */
 public final class PublicFieldPropertiesRule extends Rule {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Rule
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void begin(String namespace, String name, Attributes attributes) throws Exception {
-    ComponentDescription componentDescription = (ComponentDescription) getDigester().peek();
-    Class<?> componentClass = componentDescription.getComponentClass();
-    for (Field field : componentClass.getFields()) {
-      int modifiers = field.getModifiers();
-      if (!Modifier.isStatic(modifiers) && !Modifier.isFinal(modifiers)) {
-        addSingleProperty(componentDescription, field);
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Rule
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void begin(String namespace, String name, Attributes attributes) throws Exception {
+		ComponentDescription componentDescription = (ComponentDescription) getDigester().peek();
+		Class<?> componentClass = componentDescription.getComponentClass();
+		for (Field field : componentClass.getFields()) {
+			int modifiers = field.getModifiers();
+			if (!Modifier.isStatic(modifiers) && !Modifier.isFinal(modifiers)) {
+				addSingleProperty(componentDescription, field);
+			}
+		}
+	}
 
-  /**
-   * Adds single {@link GenericPropertyDescription} for given field.
-   */
-  private static void addSingleProperty(ComponentDescription componentDescription, Field field)
-      throws Exception {
-    String title = field.getName();
-    String id = title;
-    Class<?> type = field.getType();
-    // prepare property parts
-    PropertyEditor editor = DescriptionPropertiesHelper.getEditorForType(type);
-    ExpressionConverter converter = DescriptionPropertiesHelper.getConverterForType(type);
-    FieldAccessor accessor = new FieldAccessor(field);
-    // create property
-    GenericPropertyDescription propertyDescription =
-        new GenericPropertyDescription(id, title, type);
-    propertyDescription.addAccessor(accessor);
-    propertyDescription.setConverter(converter);
-    propertyDescription.setEditor(editor);
-    // add property
-    componentDescription.addProperty(propertyDescription);
-  }
+	/**
+	 * Adds single {@link GenericPropertyDescription} for given field.
+	 */
+	private static void addSingleProperty(ComponentDescription componentDescription, Field field)
+			throws Exception {
+		String title = field.getName();
+		String id = title;
+		Class<?> type = field.getType();
+		// prepare property parts
+		PropertyEditor editor = DescriptionPropertiesHelper.getEditorForType(type);
+		ExpressionConverter converter = DescriptionPropertiesHelper.getConverterForType(type);
+		FieldAccessor accessor = new FieldAccessor(field);
+		// create property
+		GenericPropertyDescription propertyDescription =
+				new GenericPropertyDescription(id, title, type);
+		propertyDescription.addAccessor(accessor);
+		propertyDescription.setConverter(converter);
+		propertyDescription.setEditor(editor);
+		// add property
+		componentDescription.addProperty(propertyDescription);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/SetClassPropertyRule.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/SetClassPropertyRule.java
index fd0c80727..270ab0b8d 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/SetClassPropertyRule.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/SetClassPropertyRule.java
@@ -24,43 +24,43 @@
  * @coverage core.model.description
  */
 public final class SetClassPropertyRule extends Rule {
-  private final ClassLoader m_classLoader;
-  private final String m_attributeName;
-  private final String m_propertyName;
+	private final ClassLoader m_classLoader;
+	private final String m_attributeName;
+	private final String m_propertyName;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SetClassPropertyRule(ClassLoader classLoader, String propertyName) {
-    this(classLoader, propertyName, propertyName);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SetClassPropertyRule(ClassLoader classLoader, String propertyName) {
+		this(classLoader, propertyName, propertyName);
+	}
 
-  public SetClassPropertyRule(ClassLoader classLoader, String attributeName, String propertyName) {
-    m_classLoader = classLoader;
-    m_attributeName = attributeName;
-    m_propertyName = propertyName;
-  }
+	public SetClassPropertyRule(ClassLoader classLoader, String attributeName, String propertyName) {
+		m_classLoader = classLoader;
+		m_attributeName = attributeName;
+		m_propertyName = propertyName;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Rule
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void begin(String namespace, String name, Attributes attributes) throws Exception {
-    // prepare class
-    Class<?> clazz;
-    {
-      String className = attributes.getValue(m_attributeName);
-      Assert.isNotNull(className);
-      clazz = ReflectionUtils.getClassByName(m_classLoader, className);
-    }
-    // set property
-    BeanUtilsBean.getInstance().getPropertyUtils().setProperty(
-        getDigester().peek(),
-        m_propertyName,
-        clazz);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Rule
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void begin(String namespace, String name, Attributes attributes) throws Exception {
+		// prepare class
+		Class<?> clazz;
+		{
+			String className = attributes.getValue(m_attributeName);
+			Assert.isNotNull(className);
+			clazz = ReflectionUtils.getClassByName(m_classLoader, className);
+		}
+		// set property
+		BeanUtilsBean.getInstance().getPropertyUtils().setProperty(
+				getDigester().peek(),
+				m_propertyName,
+				clazz);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/SetListedPropertiesRule.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/SetListedPropertiesRule.java
index c7af3f34c..9163d165e 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/SetListedPropertiesRule.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/SetListedPropertiesRule.java
@@ -23,37 +23,37 @@
  * @coverage core.model.description
  */
 public final class SetListedPropertiesRule extends Rule {
-  private final String[] m_attributeNames;
-  private final String[] m_propertyNames;
+	private final String[] m_attributeNames;
+	private final String[] m_propertyNames;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SetListedPropertiesRule(String[] propertyNames) {
-    this(propertyNames, propertyNames);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SetListedPropertiesRule(String[] propertyNames) {
+		this(propertyNames, propertyNames);
+	}
 
-  public SetListedPropertiesRule(String[] attributeNames, String[] propertyNames) {
-    m_attributeNames = attributeNames;
-    m_propertyNames = propertyNames;
-    Assert.isTrue(m_attributeNames.length == m_propertyNames.length);
-  }
+	public SetListedPropertiesRule(String[] attributeNames, String[] propertyNames) {
+		m_attributeNames = attributeNames;
+		m_propertyNames = propertyNames;
+		Assert.isTrue(m_attributeNames.length == m_propertyNames.length);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Rule
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void begin(String namespace, String name, Attributes attributes) throws Exception {
-    for (int i = 0; i < m_attributeNames.length; i++) {
-      String attributeName = m_attributeNames[i];
-      String value = attributes.getValue(attributeName);
-      if (value != null) {
-        BeanUtils.setProperty(getDigester().peek(), m_propertyNames[i], value);
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Rule
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void begin(String namespace, String name, Attributes attributes) throws Exception {
+		for (int i = 0; i < m_attributeNames.length; i++) {
+			String attributeName = m_attributeNames[i];
+			String value = attributes.getValue(attributeName);
+			if (value != null) {
+				BeanUtils.setProperty(getDigester().peek(), m_propertyNames[i], value);
+			}
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/StandardBeanPropertiesAdvancedRule.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/StandardBeanPropertiesAdvancedRule.java
index 6df467ef0..4b0575f9e 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/StandardBeanPropertiesAdvancedRule.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/StandardBeanPropertiesAdvancedRule.java
@@ -23,8 +23,8 @@
  * @coverage core.model.description
  */
 public final class StandardBeanPropertiesAdvancedRule extends StandardBeanPropertiesFlaggedRule {
-  @Override
-  protected void configure(GenericPropertyDescription propertyDescription, Attributes attributes) {
-    propertyDescription.setCategory(PropertyCategory.ADVANCED);
-  }
+	@Override
+	protected void configure(GenericPropertyDescription propertyDescription, Attributes attributes) {
+		propertyDescription.setCategory(PropertyCategory.ADVANCED);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/StandardBeanPropertiesFlaggedRule.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/StandardBeanPropertiesFlaggedRule.java
index 3b3296b95..4620231b2 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/StandardBeanPropertiesFlaggedRule.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/StandardBeanPropertiesFlaggedRule.java
@@ -24,88 +24,88 @@
  * @coverage core.model.description
  */
 public abstract class StandardBeanPropertiesFlaggedRule extends AbstractDesignerRule {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Rule
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final void begin(String namespace, String tagName, Attributes attributes)
-      throws Exception {
-    ComponentDescription componentDescription = (ComponentDescription) getDigester().peek();
-    // prepare names
-    String[] names;
-    {
-      String namesString = getRequiredAttribute(tagName, attributes, "names");
-      names = StringUtils.split(namesString);
-    }
-    // check names
-    for (String name : names) {
-      for (GenericPropertyDescription propertyDescription : componentDescription.getProperties()) {
-        String id = propertyDescription.getId();
-        if (matchPropertyId(id, name)) {
-          configure(propertyDescription, attributes);
-        }
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Rule
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final void begin(String namespace, String tagName, Attributes attributes)
+			throws Exception {
+		ComponentDescription componentDescription = (ComponentDescription) getDigester().peek();
+		// prepare names
+		String[] names;
+		{
+			String namesString = getRequiredAttribute(tagName, attributes, "names");
+			names = StringUtils.split(namesString);
+		}
+		// check names
+		for (String name : names) {
+			for (GenericPropertyDescription propertyDescription : componentDescription.getProperties()) {
+				String id = propertyDescription.getId();
+				if (matchPropertyId(id, name)) {
+					configure(propertyDescription, attributes);
+				}
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Configuring
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Configures given {@link GenericPropertyDescription}.
-   */
-  protected abstract void configure(GenericPropertyDescription propertyDescription,
-      Attributes attributes);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Configuring
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Configures given {@link GenericPropertyDescription}.
+	 */
+	protected abstract void configure(GenericPropertyDescription propertyDescription,
+			Attributes attributes);
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Match
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static boolean matchPropertyId(String id, String name) {
-    // check for explicit method name
-    if (name.startsWith("m:")) {
-      String signaturePrefix = "set" + StringUtils.capitalize(name.substring(2)) + "(";
-      return matchAsSetter(id, signaturePrefix);
-    }
-    // check for explicit field name
-    if (name.startsWith("f:")) {
-      String fieldName = name.substring(2);
-      return matchAsField(id, fieldName);
-    }
-    // check for full method signature
-    if (name.indexOf('(') != -1) {
-      return matchAsSetter(id, name);
-    }
-    // check for template
-    if (name.endsWith("*")) {
-      String signaturePrefix = "set" + StringUtils.capitalize(name.substring(0, name.length() - 1));
-      return matchAsSetter(id, signaturePrefix);
-    }
-    // try setter
-    {
-      String signaturePrefix = "set" + StringUtils.capitalize(name) + "(";
-      if (matchAsSetter(id, signaturePrefix)) {
-        return true;
-      }
-    }
-    // try field name
-    if (matchAsField(id, name)) {
-      return true;
-    }
-    // no
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Match
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static boolean matchPropertyId(String id, String name) {
+		// check for explicit method name
+		if (name.startsWith("m:")) {
+			String signaturePrefix = "set" + StringUtils.capitalize(name.substring(2)) + "(";
+			return matchAsSetter(id, signaturePrefix);
+		}
+		// check for explicit field name
+		if (name.startsWith("f:")) {
+			String fieldName = name.substring(2);
+			return matchAsField(id, fieldName);
+		}
+		// check for full method signature
+		if (name.indexOf('(') != -1) {
+			return matchAsSetter(id, name);
+		}
+		// check for template
+		if (name.endsWith("*")) {
+			String signaturePrefix = "set" + StringUtils.capitalize(name.substring(0, name.length() - 1));
+			return matchAsSetter(id, signaturePrefix);
+		}
+		// try setter
+		{
+			String signaturePrefix = "set" + StringUtils.capitalize(name) + "(";
+			if (matchAsSetter(id, signaturePrefix)) {
+				return true;
+			}
+		}
+		// try field name
+		if (matchAsField(id, name)) {
+			return true;
+		}
+		// no
+		return false;
+	}
 
-  private static boolean matchAsSetter(String id, String signaturePrefix) {
-    return id.startsWith(signaturePrefix);
-  }
+	private static boolean matchAsSetter(String id, String signaturePrefix) {
+		return id.startsWith(signaturePrefix);
+	}
 
-  private static boolean matchAsField(String id, String fieldName) {
-    return id.equals(fieldName);
-  }
+	private static boolean matchAsField(String id, String fieldName) {
+		return id.equals(fieldName);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/StandardBeanPropertiesHiddenRule.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/StandardBeanPropertiesHiddenRule.java
index 0963dbace..846502c70 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/StandardBeanPropertiesHiddenRule.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/StandardBeanPropertiesHiddenRule.java
@@ -23,8 +23,8 @@
  * @coverage core.model.description
  */
 public final class StandardBeanPropertiesHiddenRule extends StandardBeanPropertiesFlaggedRule {
-  @Override
-  protected void configure(GenericPropertyDescription propertyDescription, Attributes attributes) {
-    propertyDescription.setCategory(PropertyCategory.HIDDEN);
-  }
+	@Override
+	protected void configure(GenericPropertyDescription propertyDescription, Attributes attributes) {
+		propertyDescription.setCategory(PropertyCategory.HIDDEN);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/StandardBeanPropertiesNoDefaultValueRule.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/StandardBeanPropertiesNoDefaultValueRule.java
index 649302368..2cea9203e 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/StandardBeanPropertiesNoDefaultValueRule.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/StandardBeanPropertiesNoDefaultValueRule.java
@@ -24,10 +24,10 @@
  * @coverage core.model.description
  */
 public final class StandardBeanPropertiesNoDefaultValueRule
-    extends
-      StandardBeanPropertiesFlaggedRule {
-  @Override
-  protected void configure(GenericPropertyDescription propertyDescription, Attributes attributes) {
-    propertyDescription.putTag(ExpressionAccessor.NO_DEFAULT_VALUE_TAG, "true");
-  }
+extends
+StandardBeanPropertiesFlaggedRule {
+	@Override
+	protected void configure(GenericPropertyDescription propertyDescription, Attributes attributes) {
+		propertyDescription.putTag(ExpressionAccessor.NO_DEFAULT_VALUE_TAG, "true");
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/StandardBeanPropertiesNormalRule.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/StandardBeanPropertiesNormalRule.java
index ef57a25fe..2dcdba155 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/StandardBeanPropertiesNormalRule.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/StandardBeanPropertiesNormalRule.java
@@ -23,8 +23,8 @@
  * @coverage core.model.description
  */
 public final class StandardBeanPropertiesNormalRule extends StandardBeanPropertiesFlaggedRule {
-  @Override
-  protected void configure(GenericPropertyDescription propertyDescription, Attributes attributes) {
-    propertyDescription.setCategory(PropertyCategory.NORMAL);
-  }
+	@Override
+	protected void configure(GenericPropertyDescription propertyDescription, Attributes attributes) {
+		propertyDescription.setCategory(PropertyCategory.NORMAL);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/StandardBeanPropertiesPreferredRule.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/StandardBeanPropertiesPreferredRule.java
index e50de3f8f..99c21a04f 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/StandardBeanPropertiesPreferredRule.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/StandardBeanPropertiesPreferredRule.java
@@ -23,8 +23,8 @@
  * @coverage core.model.description
  */
 public final class StandardBeanPropertiesPreferredRule extends StandardBeanPropertiesFlaggedRule {
-  @Override
-  protected void configure(GenericPropertyDescription propertyDescription, Attributes attributes) {
-    propertyDescription.setCategory(PropertyCategory.PREFERRED);
-  }
+	@Override
+	protected void configure(GenericPropertyDescription propertyDescription, Attributes attributes) {
+		propertyDescription.setCategory(PropertyCategory.PREFERRED);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/StandardBeanPropertyTagRule.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/StandardBeanPropertyTagRule.java
index 9a048badf..2cbdbdf4e 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/StandardBeanPropertyTagRule.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/StandardBeanPropertyTagRule.java
@@ -24,23 +24,23 @@
  * @coverage core.model.description
  */
 public final class StandardBeanPropertyTagRule extends AbstractDesignerRule {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Rule
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void begin(String namespace, String name, Attributes attributes) throws Exception {
-    String propertyName = getRequiredAttribute(name, attributes, "name");
-    // check all properties
-    ComponentDescription componentDescription = (ComponentDescription) getDigester().peek();
-    for (GenericPropertyDescription propertyDescription : componentDescription.getProperties()) {
-      String id = propertyDescription.getId();
-      if (StandardBeanPropertiesFlaggedRule.matchPropertyId(id, propertyName)) {
-        String tag = getRequiredAttribute(name, attributes, "tag");
-        String value = getRequiredAttribute(name, attributes, "value");
-        propertyDescription.putTag(tag, value);
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Rule
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void begin(String namespace, String name, Attributes attributes) throws Exception {
+		String propertyName = getRequiredAttribute(name, attributes, "name");
+		// check all properties
+		ComponentDescription componentDescription = (ComponentDescription) getDigester().peek();
+		for (GenericPropertyDescription propertyDescription : componentDescription.getProperties()) {
+			String id = propertyDescription.getId();
+			if (StandardBeanPropertiesFlaggedRule.matchPropertyId(id, propertyName)) {
+				String tag = getRequiredAttribute(name, attributes, "tag");
+				String value = getRequiredAttribute(name, attributes, "value");
+				propertyDescription.putTag(tag, value);
+			}
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/ToolkitRule.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/ToolkitRule.java
index f954dbcc8..35ba71cd2 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/ToolkitRule.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/description/rules/ToolkitRule.java
@@ -24,15 +24,15 @@
  * @coverage core.model.description
  */
 public final class ToolkitRule extends AbstractDesignerRule {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Rule
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void begin(String namespace, String name, Attributes attributes) throws Exception {
-    ComponentDescription componentDescription = (ComponentDescription) getDigester().peek();
-    String toolkitId = getRequiredAttribute(name, attributes, "id");
-    componentDescription.setToolkit(DescriptionHelper.getToolkit(toolkitId));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Rule
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void begin(String namespace, String name, Attributes attributes) throws Exception {
+		ComponentDescription componentDescription = (ComponentDescription) getDigester().peek();
+		String toolkitId = getRequiredAttribute(name, attributes, "id");
+		componentDescription.setToolkit(DescriptionHelper.getToolkit(toolkitId));
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generation/GenerationDescription.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generation/GenerationDescription.java
index 6e1714c6a..d9745c16e 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generation/GenerationDescription.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generation/GenerationDescription.java
@@ -22,59 +22,59 @@
  * @coverage core.model.generation
  */
 public abstract class GenerationDescription {
-  private final String m_id;
-  private final String m_name;
-  private final String m_description;
+	private final String m_id;
+	private final String m_name;
+	private final String m_description;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected GenerationDescription(String id, String name, String description) {
-    m_id = id;
-    m_name = name;
-    m_description = description;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected GenerationDescription(String id, String name, String description) {
+		m_id = id;
+		m_name = name;
+		m_description = description;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the id of this description.
-   */
-  public final String getId() {
-    return m_id;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the id of this description.
+	 */
+	public final String getId() {
+		return m_id;
+	}
 
-  /**
-   * @return the name of this description.
-   */
-  public final String getName() {
-    return m_name;
-  }
+	/**
+	 * @return the name of this description.
+	 */
+	public final String getName() {
+		return m_name;
+	}
 
-  /**
-   * @return the textual description to show for user.
-   */
-  public final String getDescription() {
-    return m_description;
-  }
+	/**
+	 * @return the textual description to show for user.
+	 */
+	public final String getDescription() {
+		return m_description;
+	}
 
-  /**
-   * Sets the default values for preferences.
-   */
-  public void configureDefaultPreferences(IPreferenceStore store) {
-  }
+	/**
+	 * Sets the default values for preferences.
+	 */
+	public void configureDefaultPreferences(IPreferenceStore store) {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Properties composite
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public abstract GenerationPropertiesComposite createPropertiesComposite(Composite parent,
-      DataBindManager bindManager,
-      IPreferenceStore store);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Properties composite
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public abstract GenerationPropertiesComposite createPropertiesComposite(Composite parent,
+			DataBindManager bindManager,
+			IPreferenceStore store);
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generation/GenerationPropertiesComposite.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generation/GenerationPropertiesComposite.java
index f4352644e..b691544f1 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generation/GenerationPropertiesComposite.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generation/GenerationPropertiesComposite.java
@@ -23,14 +23,14 @@
  * @coverage core.preferences.ui
  */
 public abstract class GenerationPropertiesComposite extends AbstractBindingComposite {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public GenerationPropertiesComposite(Composite parent,
-      DataBindManager bindManager,
-      IPreferenceStore preferences) {
-    super(parent, bindManager, preferences);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public GenerationPropertiesComposite(Composite parent,
+			DataBindManager bindManager,
+			IPreferenceStore preferences) {
+		super(parent, bindManager, preferences);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generation/GenerationSettings.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generation/GenerationSettings.java
index 1a765d39a..f084f5932 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generation/GenerationSettings.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generation/GenerationSettings.java
@@ -491,7 +491,7 @@ private void deduceStatement(Set<AbstractComponentInfo> components, IPreferenceS
 			}
 			StatementGeneratorDescription statementDescription = singleCount >= multipleCount
 					? BlockStatementGeneratorDescription.INSTANCE
-					: FlatStatementGeneratorDescription.INSTANCE;
+							: FlatStatementGeneratorDescription.INSTANCE;
 			store.setValue(P_STATEMENT_GENERATOR_ID, statementDescription.getId());
 		}
 	}
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generation/GenerationUtils.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generation/GenerationUtils.java
index f5be471a7..ada99a7ee 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generation/GenerationUtils.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generation/GenerationUtils.java
@@ -24,53 +24,53 @@
  * @coverage core.model.generation
  */
 public final class GenerationUtils {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private GenerationUtils() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private GenerationUtils() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link VariableSupport} for given {@link JavaInfo}.
-   */
-  public static VariableSupport getVariableSupport(JavaInfo javaInfo) throws Exception {
-    VariableSupportDescription description = getVariableDescription(javaInfo);
-    return description.createSupport(javaInfo);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link VariableSupport} for given {@link JavaInfo}.
+	 */
+	public static VariableSupport getVariableSupport(JavaInfo javaInfo) throws Exception {
+		VariableSupportDescription description = getVariableDescription(javaInfo);
+		return description.createSupport(javaInfo);
+	}
 
-  /**
-   * @return the {@link VariableSupportDescription} for given {@link JavaInfo}.
-   */
-  public static VariableSupportDescription getVariableDescription(JavaInfo javaInfo) {
-    GenerationSettings generationSettings = getToolkit(javaInfo).getGenerationSettings();
-    return generationSettings.getVariable(javaInfo);
-  }
+	/**
+	 * @return the {@link VariableSupportDescription} for given {@link JavaInfo}.
+	 */
+	public static VariableSupportDescription getVariableDescription(JavaInfo javaInfo) {
+		GenerationSettings generationSettings = getToolkit(javaInfo).getGenerationSettings();
+		return generationSettings.getVariable(javaInfo);
+	}
 
-  /**
-   * @return the {@link StatementGenerator} for given {@link JavaInfo}.
-   */
-  public static StatementGenerator getStatementGenerator(JavaInfo javaInfo) throws Exception {
-    GenerationSettings generationSettings = getToolkit(javaInfo).getGenerationSettings();
-    StatementGeneratorDescription description = generationSettings.getStatement(javaInfo);
-    return description.get();
-  }
+	/**
+	 * @return the {@link StatementGenerator} for given {@link JavaInfo}.
+	 */
+	public static StatementGenerator getStatementGenerator(JavaInfo javaInfo) throws Exception {
+		GenerationSettings generationSettings = getToolkit(javaInfo).getGenerationSettings();
+		StatementGeneratorDescription description = generationSettings.getStatement(javaInfo);
+		return description.get();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link ToolkitDescriptionJava} for given {@link JavaInfo}.
-   */
-  private static ToolkitDescriptionJava getToolkit(JavaInfo javaInfo) {
-    return javaInfo.getDescription().getToolkit();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link ToolkitDescriptionJava} for given {@link JavaInfo}.
+	 */
+	private static ToolkitDescriptionJava getToolkit(JavaInfo javaInfo) {
+		return javaInfo.getDescription().getToolkit();
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generation/preview/GenerationPreview.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generation/preview/GenerationPreview.java
index f2a9ac546..0efc1a013 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generation/preview/GenerationPreview.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generation/preview/GenerationPreview.java
@@ -25,52 +25,52 @@
  * @coverage core.model.generation.ui
  */
 public abstract class GenerationPreview {
-  /**
-   * @return the preview source using properties from given {@link GenerationPropertiesComposite}'s
-   *         for variable and statement.
-   */
-  public abstract String getPreview(GenerationPropertiesComposite variableComposite,
-      GenerationPropertiesComposite statementComposite);
+	/**
+	 * @return the preview source using properties from given {@link GenerationPropertiesComposite}'s
+	 *         for variable and statement.
+	 */
+	public abstract String getPreview(GenerationPropertiesComposite variableComposite,
+			GenerationPropertiesComposite statementComposite);
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link String} for joined given {@link String}'s using "\n".
-   */
-  protected static String getSource(String[] lines) {
-    return getSource(new String[][]{lines});
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link String} for joined given {@link String}'s using "\n".
+	 */
+	protected static String getSource(String[] lines) {
+		return getSource(new String[][]{lines});
+	}
 
-  /**
-   * @return the {@link String} for joined given {@link String}'s using "\n".
-   */
-  protected static String getSource(String[][] lines2) {
-    StringBuffer buffer = new StringBuffer();
-    for (String[] lines : lines2) {
-      if (lines == null) {
-        continue;
-      }
-      //
-      for (String line : lines) {
-        // prepare count of leading spaces
-        int spaceCount = 0;
-        for (char c : line.toCharArray()) {
-          if (c != ' ') {
-            break;
-          }
-          spaceCount++;
-        }
-        // replace each two leading spaces with one \t
-        Assert.isTrue(spaceCount % 2 == 0);
-        line = StringUtils.repeat("\t", spaceCount / 2) + line.substring(spaceCount);
-        // append line
-        buffer.append(line);
-        buffer.append("\n");
-      }
-    }
-    return buffer.toString();
-  }
+	/**
+	 * @return the {@link String} for joined given {@link String}'s using "\n".
+	 */
+	protected static String getSource(String[][] lines2) {
+		StringBuffer buffer = new StringBuffer();
+		for (String[] lines : lines2) {
+			if (lines == null) {
+				continue;
+			}
+			//
+			for (String line : lines) {
+				// prepare count of leading spaces
+				int spaceCount = 0;
+				for (char c : line.toCharArray()) {
+					if (c != ' ') {
+						break;
+					}
+					spaceCount++;
+				}
+				// replace each two leading spaces with one \t
+				Assert.isTrue(spaceCount % 2 == 0);
+				line = StringUtils.repeat("\t", spaceCount / 2) + line.substring(spaceCount);
+				// append line
+				buffer.append(line);
+				buffer.append("\n");
+			}
+		}
+		return buffer.toString();
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generation/preview/GenerationPreviewFieldInitializerBlock.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generation/preview/GenerationPreviewFieldInitializerBlock.java
index 59d2eaa51..4e60d28f7 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generation/preview/GenerationPreviewFieldInitializerBlock.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generation/preview/GenerationPreviewFieldInitializerBlock.java
@@ -23,60 +23,60 @@
  * @coverage core.model.generation.ui
  */
 public final class GenerationPreviewFieldInitializerBlock extends GenerationPreview {
-  public static final GenerationPreview INSTANCE = new GenerationPreviewFieldInitializerBlock();
+	public static final GenerationPreview INSTANCE = new GenerationPreviewFieldInitializerBlock();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private GenerationPreviewFieldInitializerBlock() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private GenerationPreviewFieldInitializerBlock() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GenerationPreview
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getPreview(GenerationPropertiesComposite variableComposite,
-      GenerationPropertiesComposite statementComposite) {
-    boolean v_useThis = variableComposite.getBoolean(FieldInitializerVariableSupport.P_PREFIX_THIS);
-    int v_modifierIndex =
-        variableComposite.getInteger(FieldInitializerVariableSupport.P_FIELD_MODIFIER);
-    String v_modifierSource = FieldVariableSupport.V_MODIFIER_CODE[v_modifierIndex];
-    //
-    String source = "";
-    String panelRef = v_useThis ? "this.panel" : "panel";
-    String buttonRef = v_useThis ? "this.button" : "button";
-    // declare fields
-    source += "\t" + v_modifierSource + "final JPanel panel = new JPanel();\n";
-    source += "\t" + v_modifierSource + "final JButton button = new JButton();\n";
-    // begin
-    source += "\t...\n";
-    // parent
-    {
-      // open block
-      source += "\t{\n";
-      // properties
-      source += "\t\t" + panelRef + ".setBorder(new TitledBorder(\"Management\"));\n";
-      // child
-      {
-        // open block
-        source += "\t\t{\n";
-        // properties
-        source += "\t\t\t" + buttonRef + ".setText(\"Add customer...\");\n";
-        source += "\t\t\t" + panelRef + ".add(" + buttonRef + ");\n";
-        // close block
-        source += "\t\t}\n";
-        source += "\t\t...\n";
-      }
-      // close block
-      source += "\t}\n";
-    }
-    // end
-    source += "\t...\n";
-    // final result
-    return source;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GenerationPreview
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getPreview(GenerationPropertiesComposite variableComposite,
+			GenerationPropertiesComposite statementComposite) {
+		boolean v_useThis = variableComposite.getBoolean(FieldInitializerVariableSupport.P_PREFIX_THIS);
+		int v_modifierIndex =
+				variableComposite.getInteger(FieldInitializerVariableSupport.P_FIELD_MODIFIER);
+		String v_modifierSource = FieldVariableSupport.V_MODIFIER_CODE[v_modifierIndex];
+		//
+		String source = "";
+		String panelRef = v_useThis ? "this.panel" : "panel";
+		String buttonRef = v_useThis ? "this.button" : "button";
+		// declare fields
+		source += "\t" + v_modifierSource + "final JPanel panel = new JPanel();\n";
+		source += "\t" + v_modifierSource + "final JButton button = new JButton();\n";
+		// begin
+		source += "\t...\n";
+		// parent
+		{
+			// open block
+			source += "\t{\n";
+			// properties
+			source += "\t\t" + panelRef + ".setBorder(new TitledBorder(\"Management\"));\n";
+			// child
+			{
+				// open block
+				source += "\t\t{\n";
+				// properties
+				source += "\t\t\t" + buttonRef + ".setText(\"Add customer...\");\n";
+				source += "\t\t\t" + panelRef + ".add(" + buttonRef + ");\n";
+				// close block
+				source += "\t\t}\n";
+				source += "\t\t...\n";
+			}
+			// close block
+			source += "\t}\n";
+		}
+		// end
+		source += "\t...\n";
+		// final result
+		return source;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generation/preview/GenerationPreviewFieldInitializerFlat.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generation/preview/GenerationPreviewFieldInitializerFlat.java
index bdf5447d5..67fc37a3d 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generation/preview/GenerationPreviewFieldInitializerFlat.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generation/preview/GenerationPreviewFieldInitializerFlat.java
@@ -23,56 +23,56 @@
  * @coverage core.model.generation.ui
  */
 public final class GenerationPreviewFieldInitializerFlat extends GenerationPreview {
-  public static final GenerationPreview INSTANCE = new GenerationPreviewFieldInitializerFlat();
+	public static final GenerationPreview INSTANCE = new GenerationPreviewFieldInitializerFlat();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private GenerationPreviewFieldInitializerFlat() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private GenerationPreviewFieldInitializerFlat() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GenerationPreview
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getPreview(GenerationPropertiesComposite variableComposite,
-      GenerationPropertiesComposite statementComposite) {
-    boolean v_useThis = variableComposite.getBoolean(FieldInitializerVariableSupport.P_PREFIX_THIS);
-    int v_modifierIndex =
-        variableComposite.getInteger(FieldInitializerVariableSupport.P_FIELD_MODIFIER);
-    String v_modifierSource = FieldVariableSupport.V_MODIFIER_CODE[v_modifierIndex];
-    boolean s_usePrefix = statementComposite.getBoolean(FlatStatementGenerator.P_USE_PREFIX);
-    String s_thePrefix = statementComposite.getString(FlatStatementGenerator.P_PREFIX_TEXT);
-    //
-    String source = "";
-    String panelRef = v_useThis ? "this.panel" : "panel";
-    String buttonRef = v_useThis ? "this.button" : "button";
-    // declare fields
-    source += "\t" + v_modifierSource + "final JPanel panel = new JPanel();\n";
-    source += "\t" + v_modifierSource + "final JButton button = new JButton();\n";
-    // begin
-    source += "\t...\n";
-    // parent
-    {
-      source += "\t" + panelRef + ".setBorder(new TitledBorder(\"Management\"));\n";
-    }
-    // child
-    {
-      // optional prefix
-      if (s_usePrefix) {
-        source += "\t" + s_thePrefix + "\n";
-      }
-      // properties
-      source += "\t" + panelRef + ".add(" + buttonRef + ");\n";
-      source += "\t" + buttonRef + ".setText(\"Add customer...\");\n";
-    }
-    // end
-    source += "\t...\n";
-    // final result
-    return source;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GenerationPreview
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getPreview(GenerationPropertiesComposite variableComposite,
+			GenerationPropertiesComposite statementComposite) {
+		boolean v_useThis = variableComposite.getBoolean(FieldInitializerVariableSupport.P_PREFIX_THIS);
+		int v_modifierIndex =
+				variableComposite.getInteger(FieldInitializerVariableSupport.P_FIELD_MODIFIER);
+		String v_modifierSource = FieldVariableSupport.V_MODIFIER_CODE[v_modifierIndex];
+		boolean s_usePrefix = statementComposite.getBoolean(FlatStatementGenerator.P_USE_PREFIX);
+		String s_thePrefix = statementComposite.getString(FlatStatementGenerator.P_PREFIX_TEXT);
+		//
+		String source = "";
+		String panelRef = v_useThis ? "this.panel" : "panel";
+		String buttonRef = v_useThis ? "this.button" : "button";
+		// declare fields
+		source += "\t" + v_modifierSource + "final JPanel panel = new JPanel();\n";
+		source += "\t" + v_modifierSource + "final JButton button = new JButton();\n";
+		// begin
+		source += "\t...\n";
+		// parent
+		{
+			source += "\t" + panelRef + ".setBorder(new TitledBorder(\"Management\"));\n";
+		}
+		// child
+		{
+			// optional prefix
+			if (s_usePrefix) {
+				source += "\t" + s_thePrefix + "\n";
+			}
+			// properties
+			source += "\t" + panelRef + ".add(" + buttonRef + ");\n";
+			source += "\t" + buttonRef + ".setText(\"Add customer...\");\n";
+		}
+		// end
+		source += "\t...\n";
+		// final result
+		return source;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generation/preview/GenerationPreviewFieldUniqueBlock.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generation/preview/GenerationPreviewFieldUniqueBlock.java
index b5fe53185..618508c61 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generation/preview/GenerationPreviewFieldUniqueBlock.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generation/preview/GenerationPreviewFieldUniqueBlock.java
@@ -23,63 +23,63 @@
  * @coverage core.model.generation.ui
  */
 public final class GenerationPreviewFieldUniqueBlock extends GenerationPreview {
-  public static final GenerationPreview INSTANCE = new GenerationPreviewFieldUniqueBlock();
+	public static final GenerationPreview INSTANCE = new GenerationPreviewFieldUniqueBlock();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private GenerationPreviewFieldUniqueBlock() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private GenerationPreviewFieldUniqueBlock() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GenerationPreview
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getPreview(GenerationPropertiesComposite variableComposite,
-      GenerationPropertiesComposite statementComposite) {
-    boolean v_useThis = variableComposite.getBoolean(FieldUniqueVariableSupport.P_PREFIX_THIS);
-    int v_modifierIndex = variableComposite.getInteger(FieldUniqueVariableSupport.P_FIELD_MODIFIER);
-    String v_modifierSource = FieldVariableSupport.V_MODIFIER_CODE[v_modifierIndex];
-    //
-    String source = "";
-    String panelRef = v_useThis ? "this.panel" : "panel";
-    String buttonRef = v_useThis ? "this.button" : "button";
-    // declare fields
-    source += "\t" + v_modifierSource + "JPanel panel;\n";
-    source += "\t" + v_modifierSource + "JButton button;\n";
-    // begin
-    source += "\t...\n";
-    // parent
-    {
-      // open block
-      source += "\t{\n";
-      // assign field
-      source += "\t\t" + panelRef + " = new JPanel();\n";
-      // properties
-      source += "\t\t" + panelRef + ".setBorder(new TitledBorder(\"Management\"));\n";
-      // child
-      {
-        // open block
-        source += "\t\t{\n";
-        // assign field
-        source += "\t\t\t" + buttonRef + " = new JButton();\n";
-        // properties
-        source += "\t\t\t" + buttonRef + ".setText(\"Add customer...\");\n";
-        source += "\t\t\t" + panelRef + ".add(" + buttonRef + ");\n";
-        // close block
-        source += "\t\t}\n";
-        source += "\t\t...\n";
-      }
-      // close block
-      source += "\t}\n";
-    }
-    // end
-    source += "\t...\n";
-    // final result
-    return source;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GenerationPreview
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getPreview(GenerationPropertiesComposite variableComposite,
+			GenerationPropertiesComposite statementComposite) {
+		boolean v_useThis = variableComposite.getBoolean(FieldUniqueVariableSupport.P_PREFIX_THIS);
+		int v_modifierIndex = variableComposite.getInteger(FieldUniqueVariableSupport.P_FIELD_MODIFIER);
+		String v_modifierSource = FieldVariableSupport.V_MODIFIER_CODE[v_modifierIndex];
+		//
+		String source = "";
+		String panelRef = v_useThis ? "this.panel" : "panel";
+		String buttonRef = v_useThis ? "this.button" : "button";
+		// declare fields
+		source += "\t" + v_modifierSource + "JPanel panel;\n";
+		source += "\t" + v_modifierSource + "JButton button;\n";
+		// begin
+		source += "\t...\n";
+		// parent
+		{
+			// open block
+			source += "\t{\n";
+			// assign field
+			source += "\t\t" + panelRef + " = new JPanel();\n";
+			// properties
+			source += "\t\t" + panelRef + ".setBorder(new TitledBorder(\"Management\"));\n";
+			// child
+			{
+				// open block
+				source += "\t\t{\n";
+				// assign field
+				source += "\t\t\t" + buttonRef + " = new JButton();\n";
+				// properties
+				source += "\t\t\t" + buttonRef + ".setText(\"Add customer...\");\n";
+				source += "\t\t\t" + panelRef + ".add(" + buttonRef + ");\n";
+				// close block
+				source += "\t\t}\n";
+				source += "\t\t...\n";
+			}
+			// close block
+			source += "\t}\n";
+		}
+		// end
+		source += "\t...\n";
+		// final result
+		return source;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generation/preview/GenerationPreviewFieldUniqueFlat.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generation/preview/GenerationPreviewFieldUniqueFlat.java
index 45989cd59..4d09348bb 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generation/preview/GenerationPreviewFieldUniqueFlat.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generation/preview/GenerationPreviewFieldUniqueFlat.java
@@ -23,60 +23,60 @@
  * @coverage core.model.generation.ui
  */
 public final class GenerationPreviewFieldUniqueFlat extends GenerationPreview {
-  public static final GenerationPreview INSTANCE = new GenerationPreviewFieldUniqueFlat();
+	public static final GenerationPreview INSTANCE = new GenerationPreviewFieldUniqueFlat();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private GenerationPreviewFieldUniqueFlat() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private GenerationPreviewFieldUniqueFlat() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GenerationPreview
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getPreview(GenerationPropertiesComposite variableComposite,
-      GenerationPropertiesComposite statementComposite) {
-    boolean v_useThis = variableComposite.getBoolean(FieldUniqueVariableSupport.P_PREFIX_THIS);
-    int v_modifierIndex = variableComposite.getInteger(FieldUniqueVariableSupport.P_FIELD_MODIFIER);
-    String v_modifierSource = FieldVariableSupport.V_MODIFIER_CODE[v_modifierIndex];
-    boolean s_usePrefix = statementComposite.getBoolean(FlatStatementGenerator.P_USE_PREFIX);
-    String s_thePrefix = statementComposite.getString(FlatStatementGenerator.P_PREFIX_TEXT);
-    //
-    String source = "";
-    String panelRef = v_useThis ? "this.panel" : "panel";
-    String buttonRef = v_useThis ? "this.button" : "button";
-    // declare fields
-    source += "\t" + v_modifierSource + "JPanel panel;\n";
-    source += "\t" + v_modifierSource + "JButton button;\n";
-    // begin
-    source += "\t...\n";
-    // parent
-    {
-      // assign field
-      source += "\t" + panelRef + " = new JPanel();\n";
-      // properties
-      source += "\t" + panelRef + ".setBorder(new TitledBorder(\"Management\"));\n";
-    }
-    // child
-    {
-      // optional prefix
-      if (s_usePrefix) {
-        source += "\t" + s_thePrefix + "\n";
-      }
-      // assign field
-      source += "\t" + buttonRef + " = new JButton();\n";
-      // properties
-      source += "\t" + buttonRef + ".setText(\"Add customer...\");\n";
-      source += "\t" + panelRef + ".add(" + buttonRef + ");\n";
-    }
-    // end
-    source += "\t...\n";
-    // final result
-    return source;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GenerationPreview
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getPreview(GenerationPropertiesComposite variableComposite,
+			GenerationPropertiesComposite statementComposite) {
+		boolean v_useThis = variableComposite.getBoolean(FieldUniqueVariableSupport.P_PREFIX_THIS);
+		int v_modifierIndex = variableComposite.getInteger(FieldUniqueVariableSupport.P_FIELD_MODIFIER);
+		String v_modifierSource = FieldVariableSupport.V_MODIFIER_CODE[v_modifierIndex];
+		boolean s_usePrefix = statementComposite.getBoolean(FlatStatementGenerator.P_USE_PREFIX);
+		String s_thePrefix = statementComposite.getString(FlatStatementGenerator.P_PREFIX_TEXT);
+		//
+		String source = "";
+		String panelRef = v_useThis ? "this.panel" : "panel";
+		String buttonRef = v_useThis ? "this.button" : "button";
+		// declare fields
+		source += "\t" + v_modifierSource + "JPanel panel;\n";
+		source += "\t" + v_modifierSource + "JButton button;\n";
+		// begin
+		source += "\t...\n";
+		// parent
+		{
+			// assign field
+			source += "\t" + panelRef + " = new JPanel();\n";
+			// properties
+			source += "\t" + panelRef + ".setBorder(new TitledBorder(\"Management\"));\n";
+		}
+		// child
+		{
+			// optional prefix
+			if (s_usePrefix) {
+				source += "\t" + s_thePrefix + "\n";
+			}
+			// assign field
+			source += "\t" + buttonRef + " = new JButton();\n";
+			// properties
+			source += "\t" + buttonRef + ".setText(\"Add customer...\");\n";
+			source += "\t" + panelRef + ".add(" + buttonRef + ");\n";
+		}
+		// end
+		source += "\t...\n";
+		// final result
+		return source;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generation/preview/GenerationPreviewLazy.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generation/preview/GenerationPreviewLazy.java
index 99babe878..d990d3d53 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generation/preview/GenerationPreviewLazy.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generation/preview/GenerationPreviewLazy.java
@@ -22,63 +22,63 @@
  * @coverage core.model.generation.ui
  */
 public final class GenerationPreviewLazy extends GenerationPreview {
-  public static final GenerationPreview INSTANCE = new GenerationPreviewLazy();
+	public static final GenerationPreview INSTANCE = new GenerationPreviewLazy();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private GenerationPreviewLazy() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private GenerationPreviewLazy() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GenerationPreview
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getPreview(GenerationPropertiesComposite variableComposite,
-      GenerationPropertiesComposite statementComposite) {
-    int v_modifierIndex = variableComposite.getInteger(LazyVariableSupport.P_METHOD_MODIFIER);
-    String v_modifierSource = LazyVariableSupport.V_MODIFIER_CODE[v_modifierIndex];
-    String source = "";
-    // declare fields
-    source += "\tprivate JPanel panel;\n";
-    source += "\tprivate JButton button;\n";
-    // begin
-    source += "\t...\n";
-    // declare getPanel(), use getButton()
-    {
-      // open method
-      source += "\t" + v_modifierSource + "JPanel getPanel() {\n";
-      // code for panel
-      source += "\t\tif (panel == null) {\n";
-      source += "\t\t\tpanel = new JPanel();\n";
-      source += "\t\t\tpanel.setBorder(new TitledBorder(\"Management\"));\n";
-      // use getButton()
-      source += "\t\t\tpanel.add(getButton());\n";
-      // close method
-      source += "\t\t}\n";
-      source += "\t\treturn panel;\n";
-      source += "\t}\n";
-    }
-    // separator
-    source += "\t...\n";
-    // declare getButton()
-    {
-      // open method
-      source += "\t" + v_modifierSource + "JButton getButton() {\n";
-      // code
-      source += "\t\tif (button == null) {\n";
-      source += "\t\t\tbutton = new JButton();\n";
-      source += "\t\t\tbutton.setText(\"New button\");\n";
-      source += "\t\t}\n";
-      // close method
-      source += "\t\treturn button;\n";
-      source += "\t}\n";
-    }
-    // final result
-    return source;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GenerationPreview
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getPreview(GenerationPropertiesComposite variableComposite,
+			GenerationPropertiesComposite statementComposite) {
+		int v_modifierIndex = variableComposite.getInteger(LazyVariableSupport.P_METHOD_MODIFIER);
+		String v_modifierSource = LazyVariableSupport.V_MODIFIER_CODE[v_modifierIndex];
+		String source = "";
+		// declare fields
+		source += "\tprivate JPanel panel;\n";
+		source += "\tprivate JButton button;\n";
+		// begin
+		source += "\t...\n";
+		// declare getPanel(), use getButton()
+		{
+			// open method
+			source += "\t" + v_modifierSource + "JPanel getPanel() {\n";
+			// code for panel
+			source += "\t\tif (panel == null) {\n";
+			source += "\t\t\tpanel = new JPanel();\n";
+			source += "\t\t\tpanel.setBorder(new TitledBorder(\"Management\"));\n";
+			// use getButton()
+			source += "\t\t\tpanel.add(getButton());\n";
+			// close method
+			source += "\t\t}\n";
+			source += "\t\treturn panel;\n";
+			source += "\t}\n";
+		}
+		// separator
+		source += "\t...\n";
+		// declare getButton()
+		{
+			// open method
+			source += "\t" + v_modifierSource + "JButton getButton() {\n";
+			// code
+			source += "\t\tif (button == null) {\n";
+			source += "\t\t\tbutton = new JButton();\n";
+			source += "\t\t\tbutton.setText(\"New button\");\n";
+			source += "\t\t}\n";
+			// close method
+			source += "\t\treturn button;\n";
+			source += "\t}\n";
+		}
+		// final result
+		return source;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generation/preview/GenerationPreviewLocalUniqueBlock.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generation/preview/GenerationPreviewLocalUniqueBlock.java
index 40463f5d6..8770ab0ac 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generation/preview/GenerationPreviewLocalUniqueBlock.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generation/preview/GenerationPreviewLocalUniqueBlock.java
@@ -22,63 +22,63 @@
  * @coverage core.model.generation.ui
  */
 public final class GenerationPreviewLocalUniqueBlock extends GenerationPreview {
-  public static final GenerationPreview INSTANCE = new GenerationPreviewLocalUniqueBlock();
+	public static final GenerationPreview INSTANCE = new GenerationPreviewLocalUniqueBlock();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private GenerationPreviewLocalUniqueBlock() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private GenerationPreviewLocalUniqueBlock() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GenerationPreview
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getPreview(GenerationPropertiesComposite variableComposite,
-      GenerationPropertiesComposite statementComposite) {
-    boolean v_useFinal = variableComposite.getBoolean(LocalUniqueVariableSupport.P_DECLARE_FINAL);
-    String source = "";
-    // begin
-    source += "\t...\n";
-    // parent
-    {
-      // open block
-      source += "\t{\n";
-      // declare parent
-      source += "\t\t";
-      if (v_useFinal) {
-        source += "final ";
-      }
-      source += "JPanel panel = new JPanel();\n";
-      // properties
-      source += "\t\tpanel.setBorder(new TitledBorder(\"Management\"));\n";
-      // child
-      {
-        // open block
-        source += "\t\t{\n";
-        // variable
-        source += "\t\t\t";
-        if (v_useFinal) {
-          source += "final ";
-        }
-        source += "JButton button = new JButton();\n";
-        // properties
-        source += "\t\t\tbutton.setText(\"Add customer...\");\n";
-        source += "\t\t\tpanel.add(button);\n";
-        // close block
-        source += "\t\t}\n";
-        source += "\t\t...\n";
-      }
-      // close block
-      source += "\t}\n";
-    }
-    // end
-    source += "\t...\n";
-    // final result
-    return source;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GenerationPreview
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getPreview(GenerationPropertiesComposite variableComposite,
+			GenerationPropertiesComposite statementComposite) {
+		boolean v_useFinal = variableComposite.getBoolean(LocalUniqueVariableSupport.P_DECLARE_FINAL);
+		String source = "";
+		// begin
+		source += "\t...\n";
+		// parent
+		{
+			// open block
+			source += "\t{\n";
+			// declare parent
+			source += "\t\t";
+			if (v_useFinal) {
+				source += "final ";
+			}
+			source += "JPanel panel = new JPanel();\n";
+			// properties
+			source += "\t\tpanel.setBorder(new TitledBorder(\"Management\"));\n";
+			// child
+			{
+				// open block
+				source += "\t\t{\n";
+				// variable
+				source += "\t\t\t";
+				if (v_useFinal) {
+					source += "final ";
+				}
+				source += "JButton button = new JButton();\n";
+				// properties
+				source += "\t\t\tbutton.setText(\"Add customer...\");\n";
+				source += "\t\t\tpanel.add(button);\n";
+				// close block
+				source += "\t\t}\n";
+				source += "\t\t...\n";
+			}
+			// close block
+			source += "\t}\n";
+		}
+		// end
+		source += "\t...\n";
+		// final result
+		return source;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generation/preview/GenerationPreviewLocalUniqueFlat.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generation/preview/GenerationPreviewLocalUniqueFlat.java
index b45adeb78..06d253cd5 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generation/preview/GenerationPreviewLocalUniqueFlat.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generation/preview/GenerationPreviewLocalUniqueFlat.java
@@ -22,59 +22,59 @@
  * @coverage core.model.generation.ui
  */
 public final class GenerationPreviewLocalUniqueFlat extends GenerationPreview {
-  public static final GenerationPreview INSTANCE = new GenerationPreviewLocalUniqueFlat();
+	public static final GenerationPreview INSTANCE = new GenerationPreviewLocalUniqueFlat();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private GenerationPreviewLocalUniqueFlat() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private GenerationPreviewLocalUniqueFlat() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GenerationPreview
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getPreview(GenerationPropertiesComposite variableComposite,
-      GenerationPropertiesComposite statementComposite) {
-    boolean v_useFinal = variableComposite.getBoolean(LocalUniqueVariableSupport.P_DECLARE_FINAL);
-    boolean s_usePrefix = statementComposite.getBoolean(FlatStatementGenerator.P_USE_PREFIX);
-    String s_thePrefix = statementComposite.getString(FlatStatementGenerator.P_PREFIX_TEXT);
-    String source = "";
-    // begin
-    source += "\t...\n";
-    // parent
-    {
-      source += "\t";
-      if (v_useFinal) {
-        source += "final ";
-      }
-      source += "JPanel panel = new JPanel();\n";
-      // properties
-      source += "\tpanel.setBorder(new TitledBorder(\"Management\"));\n";
-    }
-    // child
-    {
-      // optional prefix
-      if (s_usePrefix) {
-        source += "\t" + s_thePrefix + "\n";
-      }
-      // variable
-      source += "\t";
-      if (v_useFinal) {
-        source += "final ";
-      }
-      source += "JButton button = new JButton();\n";
-      // properties
-      source += "\tbutton.setText(\"Add customer...\");\n";
-      source += "\tpanel.add(button);\n";
-    }
-    // end
-    source += "\t...\n";
-    // final result
-    return source;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GenerationPreview
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getPreview(GenerationPropertiesComposite variableComposite,
+			GenerationPropertiesComposite statementComposite) {
+		boolean v_useFinal = variableComposite.getBoolean(LocalUniqueVariableSupport.P_DECLARE_FINAL);
+		boolean s_usePrefix = statementComposite.getBoolean(FlatStatementGenerator.P_USE_PREFIX);
+		String s_thePrefix = statementComposite.getString(FlatStatementGenerator.P_PREFIX_TEXT);
+		String source = "";
+		// begin
+		source += "\t...\n";
+		// parent
+		{
+			source += "\t";
+			if (v_useFinal) {
+				source += "final ";
+			}
+			source += "JPanel panel = new JPanel();\n";
+			// properties
+			source += "\tpanel.setBorder(new TitledBorder(\"Management\"));\n";
+		}
+		// child
+		{
+			// optional prefix
+			if (s_usePrefix) {
+				source += "\t" + s_thePrefix + "\n";
+			}
+			// variable
+			source += "\t";
+			if (v_useFinal) {
+				source += "final ";
+			}
+			source += "JButton button = new JButton();\n";
+			// properties
+			source += "\tbutton.setText(\"Add customer...\");\n";
+			source += "\tpanel.add(button);\n";
+		}
+		// end
+		source += "\t...\n";
+		// final result
+		return source;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generation/statement/AbstractInsideStatementGenerator.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generation/statement/AbstractInsideStatementGenerator.java
index 5bff46220..0813c5dcf 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generation/statement/AbstractInsideStatementGenerator.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generation/statement/AbstractInsideStatementGenerator.java
@@ -35,66 +35,66 @@
  * @coverage core.model.generation
  */
 public abstract class AbstractInsideStatementGenerator extends StatementGenerator {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds variable and association {@link Statement}'s into given {@link StatementTarget}.
-   *
-   * @param child
-   *          the {@link JavaInfo} that should be added
-   * @param target
-   *          the target for statements
-   * @param leadingComments
-   *          the optional (can be <code>null</code>) array of lines that should be added before
-   *          first statement
-   * @param association
-   *          the {@link Association} that asked for generating parent/child association in source
-   *          code. For Swing/GWT there is usually some separate association code, in SWT parent is
-   *          passed in constructor, so usually no additional association required.
-   *
-   * @return the {@link Statement} for given association source.
-   */
-  protected static void add(JavaInfo child,
-      StatementTarget target,
-      String[] leadingComments,
-      Association association) throws Exception {
-    AstEditor editor = child.getEditor();
-    VariableSupport variableSupport = child.getVariableSupport();
-    // add optional variable statement
-    {
-      String statementSource = variableSupport.add_getVariableStatementSource(target);
-      if (statementSource != null) {
-        // prepare lines
-        List<String> lines;
-        {
-          statementSource = AssociationUtils.replaceTemplates(child, statementSource, target);
-          lines = Lists.newArrayList();
-          if (leadingComments != null) {
-            Collections.addAll(lines, leadingComments);
-          }
-          Collections.addAll(lines, StringUtils.split(statementSource, '\n'));
-          leadingComments = null;
-        }
-        // add statement
-        Statement variableStatement = editor.addStatement(lines, target);
-        variableSupport.add_setVariableStatement(variableStatement);
-        addRelatedNodes(child, variableStatement);
-        // modify target
-        target = variableSupport.getAssociationTarget(target);
-      }
-    }
-    // add association
-    association.add(child, target, leadingComments);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds variable and association {@link Statement}'s into given {@link StatementTarget}.
+	 *
+	 * @param child
+	 *          the {@link JavaInfo} that should be added
+	 * @param target
+	 *          the target for statements
+	 * @param leadingComments
+	 *          the optional (can be <code>null</code>) array of lines that should be added before
+	 *          first statement
+	 * @param association
+	 *          the {@link Association} that asked for generating parent/child association in source
+	 *          code. For Swing/GWT there is usually some separate association code, in SWT parent is
+	 *          passed in constructor, so usually no additional association required.
+	 *
+	 * @return the {@link Statement} for given association source.
+	 */
+	protected static void add(JavaInfo child,
+			StatementTarget target,
+			String[] leadingComments,
+			Association association) throws Exception {
+		AstEditor editor = child.getEditor();
+		VariableSupport variableSupport = child.getVariableSupport();
+		// add optional variable statement
+		{
+			String statementSource = variableSupport.add_getVariableStatementSource(target);
+			if (statementSource != null) {
+				// prepare lines
+				List<String> lines;
+				{
+					statementSource = AssociationUtils.replaceTemplates(child, statementSource, target);
+					lines = Lists.newArrayList();
+					if (leadingComments != null) {
+						Collections.addAll(lines, leadingComments);
+					}
+					Collections.addAll(lines, StringUtils.split(statementSource, '\n'));
+					leadingComments = null;
+				}
+				// add statement
+				Statement variableStatement = editor.addStatement(lines, target);
+				variableSupport.add_setVariableStatement(variableStatement);
+				addRelatedNodes(child, variableStatement);
+				// modify target
+				target = variableSupport.getAssociationTarget(target);
+			}
+		}
+		// add association
+		association.add(child, target, leadingComments);
+	}
 
-  /**
-   * Adds related {@link ASTNode}'s in subtree of given {@link ASTNode}.
-   */
-  public static void addRelatedNodes(JavaInfo child, ASTNode statement) {
-    child.addRelatedNodes(statement);
-    child.getParentJava().addRelatedNodes(statement);
-  }
+	/**
+	 * Adds related {@link ASTNode}'s in subtree of given {@link ASTNode}.
+	 */
+	public static void addRelatedNodes(JavaInfo child, ASTNode statement) {
+		child.addRelatedNodes(statement);
+		child.getParentJava().addRelatedNodes(statement);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generation/statement/PureFlatStatementGenerator.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generation/statement/PureFlatStatementGenerator.java
index 9f6afe2b7..6e58b7460 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generation/statement/PureFlatStatementGenerator.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generation/statement/PureFlatStatementGenerator.java
@@ -25,23 +25,23 @@
  * @coverage core.model.generation
  */
 public final class PureFlatStatementGenerator extends AbstractInsideStatementGenerator {
-  public static final PureFlatStatementGenerator INSTANCE = new PureFlatStatementGenerator();
+	public static final PureFlatStatementGenerator INSTANCE = new PureFlatStatementGenerator();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private PureFlatStatementGenerator() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private PureFlatStatementGenerator() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // StatementGenerator
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void add(JavaInfo child, StatementTarget target, Association association) throws Exception {
-    add(child, target, null, association);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// StatementGenerator
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void add(JavaInfo child, StatementTarget target, Association association) throws Exception {
+		add(child, target, null, association);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generation/statement/StatementGenerator.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generation/statement/StatementGenerator.java
index a02fa3ed8..31e696155 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generation/statement/StatementGenerator.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generation/statement/StatementGenerator.java
@@ -26,30 +26,30 @@
  * @coverage core.model.generation
  */
 public abstract class StatementGenerator {
-  /**
-   * Adds given statements according rules of this {@link StatementGenerator}.
-   *
-   * @param child
-   *          the child {@link JavaInfo} that will be added to the given parent
-   * @param target
-   *          the target for association statement
-   * @param associationStatementSource
-   *          the source of statement for parent/child association
-   * @param variableStatementSource
-   *          the source of variable statement (can be <code>null</code>)
-   */
-  public abstract void add(JavaInfo child, StatementTarget target, Association association)
-      throws Exception;
+	/**
+	 * Adds given statements according rules of this {@link StatementGenerator}.
+	 *
+	 * @param child
+	 *          the child {@link JavaInfo} that will be added to the given parent
+	 * @param target
+	 *          the target for association statement
+	 * @param associationStatementSource
+	 *          the source of statement for parent/child association
+	 * @param variableStatementSource
+	 *          the source of variable statement (can be <code>null</code>)
+	 */
+	public abstract void add(JavaInfo child, StatementTarget target, Association association)
+			throws Exception;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link IPreferenceStore} for given {@link JavaInfo}.
-   */
-  protected final IPreferenceStore getPreferences(JavaInfo javaInfo) {
-    return javaInfo.getDescription().getToolkit().getPreferences();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link IPreferenceStore} for given {@link JavaInfo}.
+	 */
+	protected final IPreferenceStore getPreferences(JavaInfo javaInfo) {
+		return javaInfo.getDescription().getToolkit().getPreferences();
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generation/statement/StatementGeneratorDescription.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generation/statement/StatementGeneratorDescription.java
index 853642857..bcea9de7c 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generation/statement/StatementGeneratorDescription.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generation/statement/StatementGeneratorDescription.java
@@ -19,22 +19,22 @@
  * @coverage core.model.generation
  */
 public abstract class StatementGeneratorDescription extends GenerationDescription {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected StatementGeneratorDescription(String id, String name, String description) {
-    super(id, name, description);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected StatementGeneratorDescription(String id, String name, String description) {
+		super(id, name, description);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the instance of {@link StatementGenerator}.
-   */
-  public abstract StatementGenerator get();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the instance of {@link StatementGenerator}.
+	 */
+	public abstract StatementGenerator get();
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generation/statement/block/BlockStatementGenerator.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generation/statement/block/BlockStatementGenerator.java
index b39a5c06e..285d01a1c 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generation/statement/block/BlockStatementGenerator.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generation/statement/block/BlockStatementGenerator.java
@@ -29,27 +29,27 @@
  * @coverage core.model.generation
  */
 public final class BlockStatementGenerator extends AbstractInsideStatementGenerator {
-  public static final BlockStatementGenerator INSTANCE = new BlockStatementGenerator();
+	public static final BlockStatementGenerator INSTANCE = new BlockStatementGenerator();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private BlockStatementGenerator() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private BlockStatementGenerator() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // StatementGenerator
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void add(JavaInfo child, StatementTarget target, Association association) throws Exception {
-    // prepare block
-    Block block = (Block) child.getEditor().addStatement(ImmutableList.of("{", "}"), target);
-    // add statements in block
-    target = new StatementTarget(block, true);
-    add(child, target, null, association);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// StatementGenerator
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void add(JavaInfo child, StatementTarget target, Association association) throws Exception {
+		// prepare block
+		Block block = (Block) child.getEditor().addStatement(ImmutableList.of("{", "}"), target);
+		// add statements in block
+		target = new StatementTarget(block, true);
+		add(child, target, null, association);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generation/statement/block/BlockStatementGeneratorDescription.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generation/statement/block/BlockStatementGeneratorDescription.java
index e6a70ecf2..d9e1db0d1 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generation/statement/block/BlockStatementGeneratorDescription.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generation/statement/block/BlockStatementGeneratorDescription.java
@@ -25,50 +25,50 @@
  * @coverage core.model.generation
  */
 public final class BlockStatementGeneratorDescription extends StatementGeneratorDescription {
-  public static final StatementGeneratorDescription INSTANCE =
-      new BlockStatementGeneratorDescription();
+	public static final StatementGeneratorDescription INSTANCE =
+			new BlockStatementGeneratorDescription();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private BlockStatementGeneratorDescription() {
-    super("org.eclipse.wb.core.model.statement.block", "Block", "separate block for each component");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private BlockStatementGeneratorDescription() {
+		super("org.eclipse.wb.core.model.statement.block", "Block", "separate block for each component");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // StatementGeneratorDescription
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public StatementGenerator get() {
-    return BlockStatementGenerator.INSTANCE;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// StatementGeneratorDescription
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public StatementGenerator get() {
+		return BlockStatementGenerator.INSTANCE;
+	}
 
-  @Override
-  public GenerationPropertiesComposite createPropertiesComposite(Composite parent,
-      DataBindManager bindManager,
-      IPreferenceStore store) {
-    return new PropertiesComposite(parent, bindManager, store);
-  }
+	@Override
+	public GenerationPropertiesComposite createPropertiesComposite(Composite parent,
+			DataBindManager bindManager,
+			IPreferenceStore store) {
+		return new PropertiesComposite(parent, bindManager, store);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Properties composite
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static class PropertiesComposite extends GenerationPropertiesComposite {
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public PropertiesComposite(Composite parent,
-        DataBindManager bindManager,
-        IPreferenceStore preferences) {
-      super(parent, bindManager, preferences);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Properties composite
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static class PropertiesComposite extends GenerationPropertiesComposite {
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public PropertiesComposite(Composite parent,
+				DataBindManager bindManager,
+				IPreferenceStore preferences) {
+			super(parent, bindManager, preferences);
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generation/statement/flat/FlatStatementGenerator.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generation/statement/flat/FlatStatementGenerator.java
index 72cbaa68b..066430b04 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generation/statement/flat/FlatStatementGenerator.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generation/statement/flat/FlatStatementGenerator.java
@@ -28,41 +28,41 @@
  * @coverage core.model.generation
  */
 public final class FlatStatementGenerator extends AbstractInsideStatementGenerator {
-  public static final FlatStatementGenerator INSTANCE = new FlatStatementGenerator();
+	public static final FlatStatementGenerator INSTANCE = new FlatStatementGenerator();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private FlatStatementGenerator() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private FlatStatementGenerator() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Preferences
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final String BASE = "statement.flat.";
-  public static final String P_USE_PREFIX = BASE + "usePrefix";
-  public static final String P_PREFIX_TEXT = BASE + "prefixText";
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Preferences
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final String BASE = "statement.flat.";
+	public static final String P_USE_PREFIX = BASE + "usePrefix";
+	public static final String P_PREFIX_TEXT = BASE + "prefixText";
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // StatementGenerator
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void add(JavaInfo child, StatementTarget target, Association association) throws Exception {
-    // prepare comments
-    String[] leadingComments = null;
-    {
-      IPreferenceStore preferences = getPreferences(child);
-      if (preferences.getBoolean(P_USE_PREFIX)) {
-        leadingComments = new String[]{preferences.getString(P_PREFIX_TEXT)};
-      }
-    }
-    // add
-    add(child, target, leadingComments, association);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// StatementGenerator
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void add(JavaInfo child, StatementTarget target, Association association) throws Exception {
+		// prepare comments
+		String[] leadingComments = null;
+		{
+			IPreferenceStore preferences = getPreferences(child);
+			if (preferences.getBoolean(P_USE_PREFIX)) {
+				leadingComments = new String[]{preferences.getString(P_PREFIX_TEXT)};
+			}
+		}
+		// add
+		add(child, target, leadingComments, association);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generation/statement/flat/FlatStatementGeneratorDescription.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generation/statement/flat/FlatStatementGeneratorDescription.java
index 51c7dcd6f..eeb389e0a 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generation/statement/flat/FlatStatementGeneratorDescription.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generation/statement/flat/FlatStatementGeneratorDescription.java
@@ -30,69 +30,69 @@
  * @coverage core.model.generation
  */
 public final class FlatStatementGeneratorDescription extends StatementGeneratorDescription {
-  public static final StatementGeneratorDescription INSTANCE =
-      new FlatStatementGeneratorDescription();
+	public static final StatementGeneratorDescription INSTANCE =
+			new FlatStatementGeneratorDescription();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private FlatStatementGeneratorDescription() {
-    super("org.eclipse.wb.core.model.statement.flat", "Flat", "all components in same block");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private FlatStatementGeneratorDescription() {
+		super("org.eclipse.wb.core.model.statement.flat", "Flat", "all components in same block");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // StatementGeneratorDescription
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public StatementGenerator get() {
-    return FlatStatementGenerator.INSTANCE;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// StatementGeneratorDescription
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public StatementGenerator get() {
+		return FlatStatementGenerator.INSTANCE;
+	}
 
-  @Override
-  public void configureDefaultPreferences(IPreferenceStore store) {
-    store.setDefault(FlatStatementGenerator.P_USE_PREFIX, true);
-    store.setDefault(FlatStatementGenerator.P_PREFIX_TEXT, "");
-  }
+	@Override
+	public void configureDefaultPreferences(IPreferenceStore store) {
+		store.setDefault(FlatStatementGenerator.P_USE_PREFIX, true);
+		store.setDefault(FlatStatementGenerator.P_PREFIX_TEXT, "");
+	}
 
-  @Override
-  public GenerationPropertiesComposite createPropertiesComposite(Composite parent,
-      DataBindManager bindManager,
-      IPreferenceStore store) {
-    return new PropertiesComposite(parent, bindManager, store);
-  }
+	@Override
+	public GenerationPropertiesComposite createPropertiesComposite(Composite parent,
+			DataBindManager bindManager,
+			IPreferenceStore store) {
+		return new PropertiesComposite(parent, bindManager, store);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Properties composite
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static class PropertiesComposite extends GenerationPropertiesComposite {
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public PropertiesComposite(Composite parent,
-        DataBindManager bindManager,
-        IPreferenceStore preferences) {
-      super(parent, bindManager, preferences);
-      // prefix flag
-      Button prefixFlagButton = new Button(this, SWT.CHECK);
-      prefixFlagButton.setText("Prefix component creation code:");
-      // prefix text
-      Text prefixText = new Text(this, SWT.BORDER);
-      GridDataFactory.create(prefixText).indentHC(3).grabH().fill();
-      // bind
-      {
-        CheckButtonEditor prefixFlagEditor =
-            bindBoolean(prefixFlagButton, FlatStatementGenerator.P_USE_PREFIX);
-        prefixFlagEditor.addEnableControl(prefixText);
-        bindString(prefixText, FlatStatementGenerator.P_PREFIX_TEXT);
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Properties composite
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static class PropertiesComposite extends GenerationPropertiesComposite {
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public PropertiesComposite(Composite parent,
+				DataBindManager bindManager,
+				IPreferenceStore preferences) {
+			super(parent, bindManager, preferences);
+			// prefix flag
+			Button prefixFlagButton = new Button(this, SWT.CHECK);
+			prefixFlagButton.setText("Prefix component creation code:");
+			// prefix text
+			Text prefixText = new Text(this, SWT.BORDER);
+			GridDataFactory.create(prefixText).indentHC(3).grabH().fill();
+			// bind
+			{
+				CheckButtonEditor prefixFlagEditor =
+						bindBoolean(prefixFlagButton, FlatStatementGenerator.P_USE_PREFIX);
+				prefixFlagEditor.addEnableControl(prefixText);
+				bindString(prefixText, FlatStatementGenerator.P_PREFIX_TEXT);
+			}
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generation/statement/lazy/LazyStatementGenerator.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generation/statement/lazy/LazyStatementGenerator.java
index 52bfc4d02..e83d8d44c 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generation/statement/lazy/LazyStatementGenerator.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generation/statement/lazy/LazyStatementGenerator.java
@@ -30,39 +30,39 @@
  * @coverage core.model.generation
  */
 public final class LazyStatementGenerator extends StatementGenerator {
-  public static final LazyStatementGenerator INSTANCE = new LazyStatementGenerator();
+	public static final LazyStatementGenerator INSTANCE = new LazyStatementGenerator();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private LazyStatementGenerator() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private LazyStatementGenerator() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // StatementGenerator
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void add(JavaInfo child, StatementTarget target, Association association) throws Exception {
-    // add method
-    {
-      VariableSupport variableSupport = child.getVariableSupport();
-      Assert.isTrue(variableSupport instanceof LazyVariableSupport);
-      variableSupport.add_getVariableStatementSource(target);
-    }
-    // add association
-    association.add(child, target, null);
-    // This type of association is used when child associated with parent at creation.
-    // But we still need to call method to perform creation/association.
-    if (association instanceof InvocationVoidAssociation) {
-      LazyVariableSupport variableSupport = (LazyVariableSupport) child.getVariableSupport();
-      String source = variableSupport.m_accessor.getName() + "();";
-      Statement statement = child.getEditor().addStatement(source, target);
-      Expression expression = DomGenerics.getExpression(statement);
-      child.addRelatedNode(expression);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// StatementGenerator
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void add(JavaInfo child, StatementTarget target, Association association) throws Exception {
+		// add method
+		{
+			VariableSupport variableSupport = child.getVariableSupport();
+			Assert.isTrue(variableSupport instanceof LazyVariableSupport);
+			variableSupport.add_getVariableStatementSource(target);
+		}
+		// add association
+		association.add(child, target, null);
+		// This type of association is used when child associated with parent at creation.
+		// But we still need to call method to perform creation/association.
+		if (association instanceof InvocationVoidAssociation) {
+			LazyVariableSupport variableSupport = (LazyVariableSupport) child.getVariableSupport();
+			String source = variableSupport.m_accessor.getName() + "();";
+			Statement statement = child.getEditor().addStatement(source, target);
+			Expression expression = DomGenerics.getExpression(statement);
+			child.addRelatedNode(expression);
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generation/statement/lazy/LazyStatementGeneratorDescription.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generation/statement/lazy/LazyStatementGeneratorDescription.java
index 9616a7839..21bfa117c 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generation/statement/lazy/LazyStatementGeneratorDescription.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generation/statement/lazy/LazyStatementGeneratorDescription.java
@@ -25,52 +25,52 @@
  * @coverage core.model.generation
  */
 public final class LazyStatementGeneratorDescription extends StatementGeneratorDescription {
-  public static final StatementGeneratorDescription INSTANCE =
-      new LazyStatementGeneratorDescription();
+	public static final StatementGeneratorDescription INSTANCE =
+			new LazyStatementGeneratorDescription();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private LazyStatementGeneratorDescription() {
-    super("org.eclipse.wb.core.model.statement.lazy",
-        "Lazy",
-        "each component in separate getXXX() method");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private LazyStatementGeneratorDescription() {
+		super("org.eclipse.wb.core.model.statement.lazy",
+				"Lazy",
+				"each component in separate getXXX() method");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // StatementGeneratorDescription
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public StatementGenerator get() {
-    return LazyStatementGenerator.INSTANCE;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// StatementGeneratorDescription
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public StatementGenerator get() {
+		return LazyStatementGenerator.INSTANCE;
+	}
 
-  @Override
-  public GenerationPropertiesComposite createPropertiesComposite(Composite parent,
-      DataBindManager bindManager,
-      IPreferenceStore store) {
-    return new PropertiesComposite(parent, bindManager, store);
-  }
+	@Override
+	public GenerationPropertiesComposite createPropertiesComposite(Composite parent,
+			DataBindManager bindManager,
+			IPreferenceStore store) {
+		return new PropertiesComposite(parent, bindManager, store);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Properties composite
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static class PropertiesComposite extends GenerationPropertiesComposite {
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public PropertiesComposite(Composite parent,
-        DataBindManager bindManager,
-        IPreferenceStore preferences) {
-      super(parent, bindManager, preferences);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Properties composite
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static class PropertiesComposite extends GenerationPropertiesComposite {
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public PropertiesComposite(Composite parent,
+				DataBindManager bindManager,
+				IPreferenceStore preferences) {
+			super(parent, bindManager, preferences);
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generic/FlowContainerConfigurable.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generic/FlowContainerConfigurable.java
index 665b76d93..0cbb6970d 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generic/FlowContainerConfigurable.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generic/FlowContainerConfigurable.java
@@ -27,125 +27,125 @@
  * @coverage core.model.generic
  */
 public final class FlowContainerConfigurable implements FlowContainer {
-  private final JavaInfo m_container;
-  private final FlowContainerConfiguration m_configuration;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FlowContainerConfigurable(JavaInfo container, FlowContainerConfiguration configuration) {
-    m_container = container;
-    m_configuration = configuration;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean isHorizontal() {
-    return m_configuration.getHorizontalPredicate().apply(m_container);
-  }
-
-  @Override
-  public boolean isRtl() {
-    return m_configuration.getRtlPredicate().apply(m_container);
-  }
-
-  public String getGroupName() {
-    return m_configuration.getGroupName();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Validation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean validateComponent(Object component) {
-    return m_configuration.getComponentValidator().validate(m_container, component);
-  }
-
-  @Override
-  public boolean validateReference(Object reference) {
-    return m_configuration.getReferenceValidator().validate(m_container, reference);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void command_CREATE(Object newObject, Object referenceObject) throws Exception {
-    if (!tryDuckTyping("command_CREATE", newObject, referenceObject)) {
-      command_CREATE_default(newObject, referenceObject);
-    }
-    tryDuckTyping("command_CREATE_after", newObject, referenceObject);
-    tryDuckTyping("command_TARGET_after", newObject, referenceObject);
-  }
-
-  @Override
-  public void command_MOVE(Object moveObject, Object referenceObject) throws Exception {
-    if (!tryDuckTyping("command_MOVE", moveObject, referenceObject)) {
-      command_MOVE_default(moveObject, referenceObject);
-    }
-    tryDuckTyping("command_MOVE_after", moveObject, referenceObject);
-    tryDuckTyping("command_TARGET_after", moveObject, referenceObject);
-  }
-
-  private void command_CREATE_default(Object newObject, Object referenceObject) throws Exception {
-    JavaInfo component = (JavaInfo) newObject;
-    JavaInfo nextComponent = (JavaInfo) referenceObject;
-    AssociationObject associationObject = createAssociationObject();
-    JavaInfoUtils.add(component, associationObject, m_container, nextComponent);
-  }
-
-  private void command_MOVE_default(Object moveObject, Object referenceObject) throws Exception {
-    JavaInfo component = (JavaInfo) moveObject;
-    JavaInfo nextComponent = (JavaInfo) referenceObject;
-    AssociationObject associationObject = createAssociationObject();
-    JavaInfoUtils.move(component, associationObject, m_container, nextComponent);
-  }
-
-  private AssociationObject createAssociationObject() {
-    return m_configuration.getAssociationObjectFactory().create();
-  }
-
-  private boolean tryDuckTyping(String methodName, Object object, Object referenceObject)
-      throws Exception {
-    Method method = getCommandMethod(methodName, object, referenceObject);
-    if (method != null) {
-      method.invoke(m_container, object, referenceObject);
-      return true;
-    }
-    return false;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link Method} with given name that can be invoked with object/referenceObject.
-   */
-  private Method getCommandMethod(String methodName, Object object, Object referenceObject) {
-    List<Method> methods = Lists.newArrayList();
-    for (Method method : m_container.getClass().getMethods()) {
-      if (method.getName().equals(methodName)) {
-        Class<?>[] parameterTypes = method.getParameterTypes();
-        if (parameterTypes.length == 2) {
-          if (ReflectionUtils.isAssignableFrom(parameterTypes[0], object)
-              && ReflectionUtils.isAssignableFrom(parameterTypes[1], referenceObject)) {
-            methods.add(method);
-          }
-        }
-      }
-    }
-    return ReflectionUtils.getMostSpecific(methods);
-  }
+	private final JavaInfo m_container;
+	private final FlowContainerConfiguration m_configuration;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FlowContainerConfigurable(JavaInfo container, FlowContainerConfiguration configuration) {
+		m_container = container;
+		m_configuration = configuration;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean isHorizontal() {
+		return m_configuration.getHorizontalPredicate().apply(m_container);
+	}
+
+	@Override
+	public boolean isRtl() {
+		return m_configuration.getRtlPredicate().apply(m_container);
+	}
+
+	public String getGroupName() {
+		return m_configuration.getGroupName();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Validation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean validateComponent(Object component) {
+		return m_configuration.getComponentValidator().validate(m_container, component);
+	}
+
+	@Override
+	public boolean validateReference(Object reference) {
+		return m_configuration.getReferenceValidator().validate(m_container, reference);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void command_CREATE(Object newObject, Object referenceObject) throws Exception {
+		if (!tryDuckTyping("command_CREATE", newObject, referenceObject)) {
+			command_CREATE_default(newObject, referenceObject);
+		}
+		tryDuckTyping("command_CREATE_after", newObject, referenceObject);
+		tryDuckTyping("command_TARGET_after", newObject, referenceObject);
+	}
+
+	@Override
+	public void command_MOVE(Object moveObject, Object referenceObject) throws Exception {
+		if (!tryDuckTyping("command_MOVE", moveObject, referenceObject)) {
+			command_MOVE_default(moveObject, referenceObject);
+		}
+		tryDuckTyping("command_MOVE_after", moveObject, referenceObject);
+		tryDuckTyping("command_TARGET_after", moveObject, referenceObject);
+	}
+
+	private void command_CREATE_default(Object newObject, Object referenceObject) throws Exception {
+		JavaInfo component = (JavaInfo) newObject;
+		JavaInfo nextComponent = (JavaInfo) referenceObject;
+		AssociationObject associationObject = createAssociationObject();
+		JavaInfoUtils.add(component, associationObject, m_container, nextComponent);
+	}
+
+	private void command_MOVE_default(Object moveObject, Object referenceObject) throws Exception {
+		JavaInfo component = (JavaInfo) moveObject;
+		JavaInfo nextComponent = (JavaInfo) referenceObject;
+		AssociationObject associationObject = createAssociationObject();
+		JavaInfoUtils.move(component, associationObject, m_container, nextComponent);
+	}
+
+	private AssociationObject createAssociationObject() {
+		return m_configuration.getAssociationObjectFactory().create();
+	}
+
+	private boolean tryDuckTyping(String methodName, Object object, Object referenceObject)
+			throws Exception {
+		Method method = getCommandMethod(methodName, object, referenceObject);
+		if (method != null) {
+			method.invoke(m_container, object, referenceObject);
+			return true;
+		}
+		return false;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link Method} with given name that can be invoked with object/referenceObject.
+	 */
+	private Method getCommandMethod(String methodName, Object object, Object referenceObject) {
+		List<Method> methods = Lists.newArrayList();
+		for (Method method : m_container.getClass().getMethods()) {
+			if (method.getName().equals(methodName)) {
+				Class<?>[] parameterTypes = method.getParameterTypes();
+				if (parameterTypes.length == 2) {
+					if (ReflectionUtils.isAssignableFrom(parameterTypes[0], object)
+							&& ReflectionUtils.isAssignableFrom(parameterTypes[1], referenceObject)) {
+						methods.add(method);
+					}
+				}
+			}
+		}
+		return ReflectionUtils.getMostSpecific(methods);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generic/FlowContainerConfiguration.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generic/FlowContainerConfiguration.java
index a17d8cb96..35b4804d2 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generic/FlowContainerConfiguration.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generic/FlowContainerConfiguration.java
@@ -21,58 +21,58 @@
  * @coverage core.model.generic
  */
 public class FlowContainerConfiguration {
-  private final ContainerObjectValidator m_componentValidator;
-  private final ContainerObjectValidator m_referenceValidator;
-  private final Predicate<Object> m_horizontalPredicate;
-  private final Predicate<Object> m_rtlPredicate;
-  private final AssociationObjectFactory m_associationObjectFactory;
-  private final String m_groupName;
+	private final ContainerObjectValidator m_componentValidator;
+	private final ContainerObjectValidator m_referenceValidator;
+	private final Predicate<Object> m_horizontalPredicate;
+	private final Predicate<Object> m_rtlPredicate;
+	private final AssociationObjectFactory m_associationObjectFactory;
+	private final String m_groupName;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FlowContainerConfiguration(Predicate<Object> horizontalPredicate,
-      Predicate<Object> rtlPredicate,
-      AssociationObjectFactory associationObjectFactory,
-      ContainerObjectValidator componentValidator,
-      ContainerObjectValidator referenceValidator,
-      String groupName) {
-    m_horizontalPredicate = horizontalPredicate;
-    m_rtlPredicate = rtlPredicate;
-    m_associationObjectFactory = associationObjectFactory;
-    m_componentValidator = componentValidator;
-    m_referenceValidator = referenceValidator;
-    m_groupName = groupName;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FlowContainerConfiguration(Predicate<Object> horizontalPredicate,
+			Predicate<Object> rtlPredicate,
+			AssociationObjectFactory associationObjectFactory,
+			ContainerObjectValidator componentValidator,
+			ContainerObjectValidator referenceValidator,
+			String groupName) {
+		m_horizontalPredicate = horizontalPredicate;
+		m_rtlPredicate = rtlPredicate;
+		m_associationObjectFactory = associationObjectFactory;
+		m_componentValidator = componentValidator;
+		m_referenceValidator = referenceValidator;
+		m_groupName = groupName;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public Predicate<Object> getHorizontalPredicate() {
-    return m_horizontalPredicate;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public Predicate<Object> getHorizontalPredicate() {
+		return m_horizontalPredicate;
+	}
 
-  public Predicate<Object> getRtlPredicate() {
-    return m_rtlPredicate;
-  }
+	public Predicate<Object> getRtlPredicate() {
+		return m_rtlPredicate;
+	}
 
-  public AssociationObjectFactory getAssociationObjectFactory() {
-    return m_associationObjectFactory;
-  }
+	public AssociationObjectFactory getAssociationObjectFactory() {
+		return m_associationObjectFactory;
+	}
 
-  public ContainerObjectValidator getComponentValidator() {
-    return m_componentValidator;
-  }
+	public ContainerObjectValidator getComponentValidator() {
+		return m_componentValidator;
+	}
 
-  public ContainerObjectValidator getReferenceValidator() {
-    return m_referenceValidator;
-  }
+	public ContainerObjectValidator getReferenceValidator() {
+		return m_referenceValidator;
+	}
 
-  public String getGroupName() {
-    return m_groupName;
-  }
+	public String getGroupName() {
+		return m_groupName;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generic/FlowContainerFactory.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generic/FlowContainerFactory.java
index cc6c006c9..dd5275dce 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generic/FlowContainerFactory.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generic/FlowContainerFactory.java
@@ -34,191 +34,191 @@
  * @coverage core.model.generic
  */
 public final class FlowContainerFactory {
-  private final JavaInfo m_javaInfo;
-  private final boolean m_forCanvas;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FlowContainerFactory(JavaInfo javaInfo, boolean forCanvas) {
-    m_javaInfo = javaInfo;
-    m_forCanvas = forCanvas;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public List<FlowContainer> get() {
-    List<FlowContainer> containers = Lists.newArrayList();
-    addConfigurableContainers(containers);
-    return containers;
-  }
-
-  private void addConfigurableContainers(List<FlowContainer> containers) {
-    List<FlowContainerConfiguration> configurations = getConfigurations();
-    for (FlowContainerConfiguration configuration : configurations) {
-      FlowContainer container = new FlowContainerConfigurable(m_javaInfo, configuration);
-      containers.add(container);
-    }
-  }
-
-  public List<FlowContainerConfiguration> getConfigurations() {
-    return ExecutionUtils.runObject(new RunnableObjectEx<List<FlowContainerConfiguration>>() {
-      @Override
-      public List<FlowContainerConfiguration> runObject() throws Exception {
-        return getConfigurationsEx();
-      }
-    }, "Exception during reading flow container configurations for %s", m_javaInfo);
-  }
-
-  private List<FlowContainerConfiguration> getConfigurationsEx() {
-    List<FlowContainerConfiguration> configurations = Lists.newArrayList();
-    for (String prefix : getConfigurationPrefixes()) {
-      FlowContainerConfiguration configuration = createConfiguration(prefix);
-      configurations.add(configuration);
-    }
-    return configurations;
-  }
-
-  private List<String> getConfigurationPrefixes() {
-    List<String> prefixes = Lists.newArrayList();
-    addConfigurationPrefixes(prefixes, "flowContainer");
-    if (m_forCanvas) {
-      addConfigurationPrefixes(prefixes, "flowContainer.canvas");
-    } else {
-      addConfigurationPrefixes(prefixes, "flowContainer.tree");
-    }
-    return prefixes;
-  }
-
-  private void addConfigurationPrefixes(List<String> prefixes, String basePrefix) {
-    for (int i = 0; i < 10; i++) {
-      String prefix = basePrefix + (i == 0 ? "" : "." + i);
-      if ("true".equals(getParameter(prefix))) {
-        prefixes.add(prefix);
-      }
-    }
-  }
-
-  private FlowContainerConfiguration createConfiguration(String prefix) {
-    return new FlowContainerConfiguration(getHorizontalPredicate(prefix, true),
-        getRtlPredicate(prefix, true),
-        getAssociation(prefix),
-        getComponentValidator(prefix),
-        getReferenceValidator(prefix),
-        getGroupName(prefix));
-  }
-
-  private ContainerObjectValidator getComponentValidator(String prefix) {
-    // try to find "component-validator"
-    {
-      String validatorExpression = getParameter(prefix + ".component-validator");
-      if (validatorExpression != null) {
-        return ContainerObjectValidators.forComponentExpression(validatorExpression);
-      }
-    }
-    // component should be list of types
-    {
-      String componentString = getComponentString(prefix);
-      Assert.isNotNull(componentString, "No 'component' validator.");
-      String[] componentTypes = StringUtils.split(componentString);
-      return ContainerObjectValidators.forList(componentTypes);
-    }
-  }
-
-  private String getComponentString(String prefix) {
-    String componentString = getParameter(prefix + ".component");
-    // if no "component", try to get from "defaultComponent"
-    if (componentString == null) {
-      componentString = getParameter("flowContainer.defaultComponent");
-    }
-    // return what we have
-    return componentString;
-  }
-
-  private ContainerObjectValidator getReferenceValidator(String prefix) {
-    // try to find "reference-validator"
-    {
-      String validatorExpression = getParameter(prefix + ".reference-validator");
-      if (validatorExpression != null) {
-        return ContainerObjectValidators.forReferenceExpression(validatorExpression);
-      }
-    }
-    // reference should be list of types
-    {
-      String referenceString = getReferenceString(prefix);
-      Assert.isNotNull(referenceString, "No 'reference' validator.");
-      String[] referenceTypes = StringUtils.split(referenceString);
-      return ContainerObjectValidators.forList(referenceTypes);
-    }
-  }
-
-  private String getReferenceString(String prefix) {
-    String referenceString = getParameter(prefix + ".reference");
-    // if no specific "reference" for this container, use same as "component"
-    if (referenceString == null) {
-      referenceString = getParameter(prefix + ".component");
-    }
-    // try to get from "defaultReference"
-    if (referenceString == null) {
-      referenceString = getParameter("flowContainer.defaultReference");
-    }
-    // return what we have
-    return referenceString;
-  }
-
-  private Predicate<Object> getHorizontalPredicate(String prefix, boolean def) {
-    String horizontalString = getParameter(prefix + ".horizontal");
-    if (horizontalString == null) {
-      return Predicates.alwaysTrue();
-    }
-    return new ExpressionPredicate<Object>(horizontalString);
-  }
-
-  private Predicate<Object> getRtlPredicate(String prefix, boolean def) {
-    String rtlString = getParameter(prefix + ".rtl");
-    if (rtlString == null) {
-      return Predicates.alwaysFalse();
-    }
-    return new ExpressionPredicate<Object>(rtlString);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Association
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private AssociationObjectFactory getAssociation(String prefix) {
-    String associationString = getParameter(prefix + ".association");
-    if (associationString == null) {
-      return AssociationObjectFactories.no();
-    }
-    return getAssociation_invocationChild(associationString);
-  }
-
-  private static AssociationObjectFactory getAssociation_invocationChild(String associationString) {
-    associationString = StringUtils.removeStart(associationString, "invocationChild ");
-    Assert.isTrue(
-        associationString.startsWith("%parent%."),
-        "Association 'invocationChild' should start with %%parent%%., but '%s' found.",
-        associationString);
-    return AssociationObjectFactories.invocationChild(associationString, false);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private String getGroupName(String prefix) {
-    return getParameter(prefix + ".group");
-  }
-
-  private String getParameter(String name) {
-    return JavaInfoUtils.getParameter(m_javaInfo, name);
-  }
+	private final JavaInfo m_javaInfo;
+	private final boolean m_forCanvas;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FlowContainerFactory(JavaInfo javaInfo, boolean forCanvas) {
+		m_javaInfo = javaInfo;
+		m_forCanvas = forCanvas;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public List<FlowContainer> get() {
+		List<FlowContainer> containers = Lists.newArrayList();
+		addConfigurableContainers(containers);
+		return containers;
+	}
+
+	private void addConfigurableContainers(List<FlowContainer> containers) {
+		List<FlowContainerConfiguration> configurations = getConfigurations();
+		for (FlowContainerConfiguration configuration : configurations) {
+			FlowContainer container = new FlowContainerConfigurable(m_javaInfo, configuration);
+			containers.add(container);
+		}
+	}
+
+	public List<FlowContainerConfiguration> getConfigurations() {
+		return ExecutionUtils.runObject(new RunnableObjectEx<List<FlowContainerConfiguration>>() {
+			@Override
+			public List<FlowContainerConfiguration> runObject() throws Exception {
+				return getConfigurationsEx();
+			}
+		}, "Exception during reading flow container configurations for %s", m_javaInfo);
+	}
+
+	private List<FlowContainerConfiguration> getConfigurationsEx() {
+		List<FlowContainerConfiguration> configurations = Lists.newArrayList();
+		for (String prefix : getConfigurationPrefixes()) {
+			FlowContainerConfiguration configuration = createConfiguration(prefix);
+			configurations.add(configuration);
+		}
+		return configurations;
+	}
+
+	private List<String> getConfigurationPrefixes() {
+		List<String> prefixes = Lists.newArrayList();
+		addConfigurationPrefixes(prefixes, "flowContainer");
+		if (m_forCanvas) {
+			addConfigurationPrefixes(prefixes, "flowContainer.canvas");
+		} else {
+			addConfigurationPrefixes(prefixes, "flowContainer.tree");
+		}
+		return prefixes;
+	}
+
+	private void addConfigurationPrefixes(List<String> prefixes, String basePrefix) {
+		for (int i = 0; i < 10; i++) {
+			String prefix = basePrefix + (i == 0 ? "" : "." + i);
+			if ("true".equals(getParameter(prefix))) {
+				prefixes.add(prefix);
+			}
+		}
+	}
+
+	private FlowContainerConfiguration createConfiguration(String prefix) {
+		return new FlowContainerConfiguration(getHorizontalPredicate(prefix, true),
+				getRtlPredicate(prefix, true),
+				getAssociation(prefix),
+				getComponentValidator(prefix),
+				getReferenceValidator(prefix),
+				getGroupName(prefix));
+	}
+
+	private ContainerObjectValidator getComponentValidator(String prefix) {
+		// try to find "component-validator"
+		{
+			String validatorExpression = getParameter(prefix + ".component-validator");
+			if (validatorExpression != null) {
+				return ContainerObjectValidators.forComponentExpression(validatorExpression);
+			}
+		}
+		// component should be list of types
+		{
+			String componentString = getComponentString(prefix);
+			Assert.isNotNull(componentString, "No 'component' validator.");
+			String[] componentTypes = StringUtils.split(componentString);
+			return ContainerObjectValidators.forList(componentTypes);
+		}
+	}
+
+	private String getComponentString(String prefix) {
+		String componentString = getParameter(prefix + ".component");
+		// if no "component", try to get from "defaultComponent"
+		if (componentString == null) {
+			componentString = getParameter("flowContainer.defaultComponent");
+		}
+		// return what we have
+		return componentString;
+	}
+
+	private ContainerObjectValidator getReferenceValidator(String prefix) {
+		// try to find "reference-validator"
+		{
+			String validatorExpression = getParameter(prefix + ".reference-validator");
+			if (validatorExpression != null) {
+				return ContainerObjectValidators.forReferenceExpression(validatorExpression);
+			}
+		}
+		// reference should be list of types
+		{
+			String referenceString = getReferenceString(prefix);
+			Assert.isNotNull(referenceString, "No 'reference' validator.");
+			String[] referenceTypes = StringUtils.split(referenceString);
+			return ContainerObjectValidators.forList(referenceTypes);
+		}
+	}
+
+	private String getReferenceString(String prefix) {
+		String referenceString = getParameter(prefix + ".reference");
+		// if no specific "reference" for this container, use same as "component"
+		if (referenceString == null) {
+			referenceString = getParameter(prefix + ".component");
+		}
+		// try to get from "defaultReference"
+		if (referenceString == null) {
+			referenceString = getParameter("flowContainer.defaultReference");
+		}
+		// return what we have
+		return referenceString;
+	}
+
+	private Predicate<Object> getHorizontalPredicate(String prefix, boolean def) {
+		String horizontalString = getParameter(prefix + ".horizontal");
+		if (horizontalString == null) {
+			return Predicates.alwaysTrue();
+		}
+		return new ExpressionPredicate<Object>(horizontalString);
+	}
+
+	private Predicate<Object> getRtlPredicate(String prefix, boolean def) {
+		String rtlString = getParameter(prefix + ".rtl");
+		if (rtlString == null) {
+			return Predicates.alwaysFalse();
+		}
+		return new ExpressionPredicate<Object>(rtlString);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Association
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private AssociationObjectFactory getAssociation(String prefix) {
+		String associationString = getParameter(prefix + ".association");
+		if (associationString == null) {
+			return AssociationObjectFactories.no();
+		}
+		return getAssociation_invocationChild(associationString);
+	}
+
+	private static AssociationObjectFactory getAssociation_invocationChild(String associationString) {
+		associationString = StringUtils.removeStart(associationString, "invocationChild ");
+		Assert.isTrue(
+				associationString.startsWith("%parent%."),
+				"Association 'invocationChild' should start with %%parent%%., but '%s' found.",
+				associationString);
+		return AssociationObjectFactories.invocationChild(associationString, false);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private String getGroupName(String prefix) {
+		return getParameter(prefix + ".group");
+	}
+
+	private String getParameter(String name) {
+		return JavaInfoUtils.getParameter(m_javaInfo, name);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generic/SimpleContainerClipboardSupport.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generic/SimpleContainerClipboardSupport.java
index b7c28639f..b91890fcd 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generic/SimpleContainerClipboardSupport.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generic/SimpleContainerClipboardSupport.java
@@ -25,61 +25,61 @@
  * @coverage core.model.generic
  */
 public final class SimpleContainerClipboardSupport implements IRootProcessor {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final IRootProcessor INSTANCE = new SimpleContainerClipboardSupport();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final IRootProcessor INSTANCE = new SimpleContainerClipboardSupport();
 
-  private SimpleContainerClipboardSupport() {
-  }
+	private SimpleContainerClipboardSupport() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IRootProcessor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void process(final JavaInfo root, List<JavaInfo> components) throws Exception {
-    root.addBroadcastListener(new JavaEventListener() {
-      @Override
-      public void clipboardCopy(JavaInfo javaInfo, List<ClipboardCommand> commands)
-          throws Exception {
-        List<SimpleContainer> containers = getSimpleContainers(javaInfo);
-        for (int i = 0; i < containers.size(); i++) {
-          SimpleContainer container = containers.get(i);
-          Object child_ = container.getChild();
-          if (child_ instanceof JavaInfo) {
-            ClipboardCommand command = createCommand(i, (JavaInfo) child_);
-            commands.add(command);
-          }
-        }
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IRootProcessor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void process(final JavaInfo root, List<JavaInfo> components) throws Exception {
+		root.addBroadcastListener(new JavaEventListener() {
+			@Override
+			public void clipboardCopy(JavaInfo javaInfo, List<ClipboardCommand> commands)
+					throws Exception {
+				List<SimpleContainer> containers = getSimpleContainers(javaInfo);
+				for (int i = 0; i < containers.size(); i++) {
+					SimpleContainer container = containers.get(i);
+					Object child_ = container.getChild();
+					if (child_ instanceof JavaInfo) {
+						ClipboardCommand command = createCommand(i, (JavaInfo) child_);
+						commands.add(command);
+					}
+				}
+			}
+		});
+	}
 
-  private static List<SimpleContainer> getSimpleContainers(JavaInfo javaInfo) {
-    return new SimpleContainerFactory(javaInfo, true).get();
-  }
+	private static List<SimpleContainer> getSimpleContainers(JavaInfo javaInfo) {
+		return new SimpleContainerFactory(javaInfo, true).get();
+	}
 
-  /**
-   * @return the {@link ClipboardCommand} for creating given child on simple container, during
-   *         paste.
-   */
-  private static ClipboardCommand createCommand(final int containerIndex, JavaInfo child)
-      throws Exception {
-    final JavaInfoMemento memento = JavaInfoMemento.createMemento(child);
-    ClipboardCommand command = new ClipboardCommand() {
-      private static final long serialVersionUID = 0L;
+	/**
+	 * @return the {@link ClipboardCommand} for creating given child on simple container, during
+	 *         paste.
+	 */
+	private static ClipboardCommand createCommand(final int containerIndex, JavaInfo child)
+			throws Exception {
+		final JavaInfoMemento memento = JavaInfoMemento.createMemento(child);
+		ClipboardCommand command = new ClipboardCommand() {
+			private static final long serialVersionUID = 0L;
 
-      @Override
-      public void execute(JavaInfo newContainer) throws Exception {
-        JavaInfo newChild = memento.create(newContainer);
-        getSimpleContainers(newContainer).get(containerIndex).command_CREATE(newChild);
-        memento.apply();
-      }
-    };
-    return command;
-  }
+			@Override
+			public void execute(JavaInfo newContainer) throws Exception {
+				JavaInfo newChild = memento.create(newContainer);
+				getSimpleContainers(newContainer).get(containerIndex).command_CREATE(newChild);
+				memento.apply();
+			}
+		};
+		return command;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generic/SimpleContainerConfigurable.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generic/SimpleContainerConfigurable.java
index 663044a07..91cf410e5 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generic/SimpleContainerConfigurable.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generic/SimpleContainerConfigurable.java
@@ -26,128 +26,128 @@
  * @coverage core.model.generic
  */
 public final class SimpleContainerConfigurable implements SimpleContainer {
-  private final JavaInfo m_container;
-  private final SimpleContainerConfiguration m_configuration;
+	private final JavaInfo m_container;
+	private final SimpleContainerConfiguration m_configuration;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SimpleContainerConfigurable(JavaInfo container, SimpleContainerConfiguration configuration) {
-    m_container = container;
-    m_configuration = configuration;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SimpleContainerConfigurable(JavaInfo container, SimpleContainerConfiguration configuration) {
+		m_container = container;
+		m_configuration = configuration;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean isEmpty() {
-    return getChild() == null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean isEmpty() {
+		return getChild() == null;
+	}
 
-  @Override
-  public Object getChild() {
-    for (ObjectInfo child : getContainerChildren()) {
-      if (validateComponent(child)) {
-        return child;
-      }
-    }
-    return null;
-  }
+	@Override
+	public Object getChild() {
+		for (ObjectInfo child : getContainerChildren()) {
+			if (validateComponent(child)) {
+				return child;
+			}
+		}
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Validation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean validateComponent(Object component) {
-    return m_configuration.getComponentValidator().validate(m_container, component);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Validation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean validateComponent(Object component) {
+		return m_configuration.getComponentValidator().validate(m_container, component);
+	}
 
-  @SuppressWarnings("unchecked")
-  private List<ObjectInfo> getContainerChildren() {
-    {
-      String signature = "getSimpleContainerChildren()";
-      Method method = ReflectionUtils.getMethodBySignature(m_container.getClass(), signature);
-      if (method != null) {
-        return (List<ObjectInfo>) ReflectionUtils.invokeMethodEx(m_container, signature);
-      }
-    }
-    return m_container.getChildren();
-  }
+	@SuppressWarnings("unchecked")
+	private List<ObjectInfo> getContainerChildren() {
+		{
+			String signature = "getSimpleContainerChildren()";
+			Method method = ReflectionUtils.getMethodBySignature(m_container.getClass(), signature);
+			if (method != null) {
+				return (List<ObjectInfo>) ReflectionUtils.invokeMethodEx(m_container, signature);
+			}
+		}
+		return m_container.getChildren();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void command_CREATE(Object newObject) throws Exception {
-    if (!tryDuckTyping("command_CREATE", newObject)) {
-      command_CREATE_default(newObject);
-    }
-    tryDuckTyping("command_CREATE_after", newObject);
-    tryDuckTyping("command_TARGET_after", newObject);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void command_CREATE(Object newObject) throws Exception {
+		if (!tryDuckTyping("command_CREATE", newObject)) {
+			command_CREATE_default(newObject);
+		}
+		tryDuckTyping("command_CREATE_after", newObject);
+		tryDuckTyping("command_TARGET_after", newObject);
+	}
 
-  @Override
-  public void command_ADD(Object moveObject) throws Exception {
-    if (!tryDuckTyping("command_ADD", moveObject)) {
-      command_ADD_default(moveObject);
-    }
-    tryDuckTyping("command_ADD_after", moveObject);
-    tryDuckTyping("command_TARGET_after", moveObject);
-  }
+	@Override
+	public void command_ADD(Object moveObject) throws Exception {
+		if (!tryDuckTyping("command_ADD", moveObject)) {
+			command_ADD_default(moveObject);
+		}
+		tryDuckTyping("command_ADD_after", moveObject);
+		tryDuckTyping("command_TARGET_after", moveObject);
+	}
 
-  private void command_CREATE_default(Object newObject) throws Exception {
-    JavaInfo component = (JavaInfo) newObject;
-    AssociationObject associationObject = createAssociationObject();
-    JavaInfoUtils.add(component, associationObject, m_container, null);
-  }
+	private void command_CREATE_default(Object newObject) throws Exception {
+		JavaInfo component = (JavaInfo) newObject;
+		AssociationObject associationObject = createAssociationObject();
+		JavaInfoUtils.add(component, associationObject, m_container, null);
+	}
 
-  private void command_ADD_default(Object moveObject) throws Exception {
-    JavaInfo component = (JavaInfo) moveObject;
-    AssociationObject associationObject = createAssociationObject();
-    JavaInfoUtils.move(component, associationObject, m_container, null);
-  }
+	private void command_ADD_default(Object moveObject) throws Exception {
+		JavaInfo component = (JavaInfo) moveObject;
+		AssociationObject associationObject = createAssociationObject();
+		JavaInfoUtils.move(component, associationObject, m_container, null);
+	}
 
-  private AssociationObject createAssociationObject() {
-    return m_configuration.getAssociationObjectFactory().create();
-  }
+	private AssociationObject createAssociationObject() {
+		return m_configuration.getAssociationObjectFactory().create();
+	}
 
-  private boolean tryDuckTyping(String methodName, Object object) throws Exception {
-    Method method = getCommandMethod(methodName, object);
-    if (method != null) {
-      method.invoke(m_container, object);
-      return true;
-    }
-    return false;
-  }
+	private boolean tryDuckTyping(String methodName, Object object) throws Exception {
+		Method method = getCommandMethod(methodName, object);
+		if (method != null) {
+			method.invoke(m_container, object);
+			return true;
+		}
+		return false;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link Method} with given name that can be invoked with given parameter object.
-   */
-  private Method getCommandMethod(String methodName, Object object) {
-    for (Method method : m_container.getClass().getMethods()) {
-      if (method.getName().equals(methodName)) {
-        Class<?>[] parameterTypes = method.getParameterTypes();
-        if (parameterTypes.length == 1) {
-          if (ReflectionUtils.isAssignableFrom(parameterTypes[0], object)) {
-            return method;
-          }
-        }
-      }
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link Method} with given name that can be invoked with given parameter object.
+	 */
+	private Method getCommandMethod(String methodName, Object object) {
+		for (Method method : m_container.getClass().getMethods()) {
+			if (method.getName().equals(methodName)) {
+				Class<?>[] parameterTypes = method.getParameterTypes();
+				if (parameterTypes.length == 1) {
+					if (ReflectionUtils.isAssignableFrom(parameterTypes[0], object)) {
+						return method;
+					}
+				}
+			}
+		}
+		return null;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generic/SimpleContainerConfiguration.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generic/SimpleContainerConfiguration.java
index 2b3332e0e..c59ce5012 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generic/SimpleContainerConfiguration.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generic/SimpleContainerConfiguration.java
@@ -19,30 +19,30 @@
  * @coverage core.model.generic
  */
 public class SimpleContainerConfiguration {
-  private final ContainerObjectValidator m_componentValidator;
-  private final AssociationObjectFactory m_associationObjectFactory;
+	private final ContainerObjectValidator m_componentValidator;
+	private final AssociationObjectFactory m_associationObjectFactory;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SimpleContainerConfiguration(ContainerObjectValidator componentValidator,
-      AssociationObjectFactory associationObjectFactory) {
-    m_componentValidator = componentValidator;
-    m_associationObjectFactory = associationObjectFactory;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SimpleContainerConfiguration(ContainerObjectValidator componentValidator,
+			AssociationObjectFactory associationObjectFactory) {
+		m_componentValidator = componentValidator;
+		m_associationObjectFactory = associationObjectFactory;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AssociationObjectFactory getAssociationObjectFactory() {
-    return m_associationObjectFactory;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AssociationObjectFactory getAssociationObjectFactory() {
+		return m_associationObjectFactory;
+	}
 
-  public ContainerObjectValidator getComponentValidator() {
-    return m_componentValidator;
-  }
+	public ContainerObjectValidator getComponentValidator() {
+		return m_componentValidator;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generic/SimpleContainerFactory.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generic/SimpleContainerFactory.java
index 4d4d2e0d1..21d9af3bb 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generic/SimpleContainerFactory.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/generic/SimpleContainerFactory.java
@@ -29,129 +29,129 @@
  * @coverage core.model.generic
  */
 public final class SimpleContainerFactory {
-  private final JavaInfo m_javaInfo;
-  private final boolean m_forCanvas;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SimpleContainerFactory(JavaInfo javaInfo, boolean forCanvas) {
-    m_javaInfo = javaInfo;
-    m_forCanvas = forCanvas;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public List<SimpleContainer> get() {
-    List<SimpleContainer> containers = Lists.newArrayList();
-    addConfigurableContainers(containers);
-    return containers;
-  }
-
-  private void addConfigurableContainers(List<SimpleContainer> containers) {
-    List<SimpleContainerConfiguration> configurations = getConfigurations();
-    for (SimpleContainerConfiguration configuration : configurations) {
-      SimpleContainer container = new SimpleContainerConfigurable(m_javaInfo, configuration);
-      containers.add(container);
-    }
-  }
-
-  public List<SimpleContainerConfiguration> getConfigurations() {
-    List<SimpleContainerConfiguration> configurations = Lists.newArrayList();
-    for (String prefix : getConfigurationPrefixes()) {
-      SimpleContainerConfiguration configuration = createConfiguration(prefix);
-      configurations.add(configuration);
-    }
-    return configurations;
-  }
-
-  private List<String> getConfigurationPrefixes() {
-    List<String> prefixes = Lists.newArrayList();
-    addConfigurationPrefixes(prefixes, "simpleContainer");
-    if (m_forCanvas) {
-      addConfigurationPrefixes(prefixes, "simpleContainer.canvas");
-    } else {
-      addConfigurationPrefixes(prefixes, "simpleContainer.tree");
-    }
-    return prefixes;
-  }
-
-  private void addConfigurationPrefixes(List<String> prefixes, String basePrefix) {
-    for (int i = 0; i < 10; i++) {
-      String prefix = basePrefix + (i == 0 ? "" : "." + i);
-      String validatorText = getParameter(prefix);
-      if (validatorText != null) {
-        if (ContainerObjectValidators.validateContainer(m_javaInfo, validatorText)) {
-          prefixes.add(prefix);
-        }
-      }
-    }
-  }
-
-  private SimpleContainerConfiguration createConfiguration(String prefix) {
-    return new SimpleContainerConfiguration(getComponentValidator(prefix), getAssociation(prefix));
-  }
-
-  private ContainerObjectValidator getComponentValidator(String prefix) {
-    // try to find "component-validator"
-    {
-      String validatorExpression = getParameter(prefix + ".component-validator");
-      if (validatorExpression != null) {
-        return ContainerObjectValidators.forComponentExpression(validatorExpression);
-      }
-    }
-    // component should be list of types
-    {
-      String componentString = getComponentString(prefix);
-      Assert.isNotNull(componentString, "No 'component' validator.");
-      String[] componentTypes = StringUtils.split(componentString);
-      return ContainerObjectValidators.forList(componentTypes);
-    }
-  }
-
-  private String getComponentString(String prefix) {
-    String componentString = getParameter(prefix + ".component");
-    // if no "component", try to get from "defaultComponent"
-    if (componentString == null) {
-      componentString = getParameter("simpleContainer.defaultComponent");
-    }
-    // return what we have
-    return componentString;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Association
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private AssociationObjectFactory getAssociation(String prefix) {
-    String associationString = getParameter(prefix + ".association");
-    if (associationString == null) {
-      return AssociationObjectFactories.no();
-    }
-    return getAssociation_invocationChild(associationString);
-  }
-
-  private static AssociationObjectFactory getAssociation_invocationChild(String associationString) {
-    associationString = StringUtils.removeStart(associationString, "invocationChild ");
-    Assert.isTrue(
-        associationString.startsWith("%parent%."),
-        "Association 'invocationChild' should start with '%%parent%%.', but '%s' found.",
-        associationString);
-    return AssociationObjectFactories.invocationChild(associationString, false);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private String getParameter(String name) {
-    return JavaInfoUtils.getParameter(m_javaInfo, name);
-  }
+	private final JavaInfo m_javaInfo;
+	private final boolean m_forCanvas;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SimpleContainerFactory(JavaInfo javaInfo, boolean forCanvas) {
+		m_javaInfo = javaInfo;
+		m_forCanvas = forCanvas;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public List<SimpleContainer> get() {
+		List<SimpleContainer> containers = Lists.newArrayList();
+		addConfigurableContainers(containers);
+		return containers;
+	}
+
+	private void addConfigurableContainers(List<SimpleContainer> containers) {
+		List<SimpleContainerConfiguration> configurations = getConfigurations();
+		for (SimpleContainerConfiguration configuration : configurations) {
+			SimpleContainer container = new SimpleContainerConfigurable(m_javaInfo, configuration);
+			containers.add(container);
+		}
+	}
+
+	public List<SimpleContainerConfiguration> getConfigurations() {
+		List<SimpleContainerConfiguration> configurations = Lists.newArrayList();
+		for (String prefix : getConfigurationPrefixes()) {
+			SimpleContainerConfiguration configuration = createConfiguration(prefix);
+			configurations.add(configuration);
+		}
+		return configurations;
+	}
+
+	private List<String> getConfigurationPrefixes() {
+		List<String> prefixes = Lists.newArrayList();
+		addConfigurationPrefixes(prefixes, "simpleContainer");
+		if (m_forCanvas) {
+			addConfigurationPrefixes(prefixes, "simpleContainer.canvas");
+		} else {
+			addConfigurationPrefixes(prefixes, "simpleContainer.tree");
+		}
+		return prefixes;
+	}
+
+	private void addConfigurationPrefixes(List<String> prefixes, String basePrefix) {
+		for (int i = 0; i < 10; i++) {
+			String prefix = basePrefix + (i == 0 ? "" : "." + i);
+			String validatorText = getParameter(prefix);
+			if (validatorText != null) {
+				if (ContainerObjectValidators.validateContainer(m_javaInfo, validatorText)) {
+					prefixes.add(prefix);
+				}
+			}
+		}
+	}
+
+	private SimpleContainerConfiguration createConfiguration(String prefix) {
+		return new SimpleContainerConfiguration(getComponentValidator(prefix), getAssociation(prefix));
+	}
+
+	private ContainerObjectValidator getComponentValidator(String prefix) {
+		// try to find "component-validator"
+		{
+			String validatorExpression = getParameter(prefix + ".component-validator");
+			if (validatorExpression != null) {
+				return ContainerObjectValidators.forComponentExpression(validatorExpression);
+			}
+		}
+		// component should be list of types
+		{
+			String componentString = getComponentString(prefix);
+			Assert.isNotNull(componentString, "No 'component' validator.");
+			String[] componentTypes = StringUtils.split(componentString);
+			return ContainerObjectValidators.forList(componentTypes);
+		}
+	}
+
+	private String getComponentString(String prefix) {
+		String componentString = getParameter(prefix + ".component");
+		// if no "component", try to get from "defaultComponent"
+		if (componentString == null) {
+			componentString = getParameter("simpleContainer.defaultComponent");
+		}
+		// return what we have
+		return componentString;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Association
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private AssociationObjectFactory getAssociation(String prefix) {
+		String associationString = getParameter(prefix + ".association");
+		if (associationString == null) {
+			return AssociationObjectFactories.no();
+		}
+		return getAssociation_invocationChild(associationString);
+	}
+
+	private static AssociationObjectFactory getAssociation_invocationChild(String associationString) {
+		associationString = StringUtils.removeStart(associationString, "invocationChild ");
+		Assert.isTrue(
+				associationString.startsWith("%parent%."),
+				"Association 'invocationChild' should start with '%%parent%%.', but '%s' found.",
+				associationString);
+		return AssociationObjectFactories.invocationChild(associationString, false);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private String getParameter(String name) {
+		return JavaInfoUtils.getParameter(m_javaInfo, name);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/layout/GeneralLayoutDataRemover.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/layout/GeneralLayoutDataRemover.java
index 34e6a479e..f0c6dbb92 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/layout/GeneralLayoutDataRemover.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/layout/GeneralLayoutDataRemover.java
@@ -25,42 +25,42 @@
  * @coverage core.model.layout
  */
 public final class GeneralLayoutDataRemover implements IRootProcessor {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final IRootProcessor INSTANCE = new GeneralLayoutDataRemover();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final IRootProcessor INSTANCE = new GeneralLayoutDataRemover();
 
-  private GeneralLayoutDataRemover() {
-  }
+	private GeneralLayoutDataRemover() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IRootProcessor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void process(final JavaInfo root, List<JavaInfo> components) throws Exception {
-    root.addBroadcastListener(new ObjectEventListener() {
-      @Override
-      public void refreshed() throws Exception {
-        clearHierarachy(root);
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IRootProcessor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void process(final JavaInfo root, List<JavaInfo> components) throws Exception {
+		root.addBroadcastListener(new ObjectEventListener() {
+			@Override
+			public void refreshed() throws Exception {
+				clearHierarachy(root);
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Implementation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static void clearHierarachy(JavaInfo root) throws Exception {
-    root.accept0(new ObjectInfoVisitor() {
-      @Override
-      public void endVisit(ObjectInfo objectInfo) throws Exception {
-        GeneralLayoutData.clearForInfo(objectInfo);
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Implementation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static void clearHierarachy(JavaInfo root) throws Exception {
+		root.accept0(new ObjectInfoVisitor() {
+			@Override
+			public void endVisit(ObjectInfo objectInfo) throws Exception {
+				GeneralLayoutData.clearForInfo(objectInfo);
+			}
+		});
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/layout/LayoutDataNameSupport.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/layout/LayoutDataNameSupport.java
index c63126a1b..0422d988b 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/layout/LayoutDataNameSupport.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/layout/LayoutDataNameSupport.java
@@ -22,14 +22,14 @@
  * @coverage core.model.layout
  */
 public abstract class LayoutDataNameSupport<T extends JavaInfo>
-    extends
-      SyncParentChildVariableNameSupport<T> {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public LayoutDataNameSupport(T layoutData) {
-    super(layoutData);
-  }
+extends
+SyncParentChildVariableNameSupport<T> {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public LayoutDataNameSupport(T layoutData) {
+		super(layoutData);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/layout/LayoutNameSupport.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/layout/LayoutNameSupport.java
index af3fd2cdc..8948115a6 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/layout/LayoutNameSupport.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/layout/LayoutNameSupport.java
@@ -21,14 +21,14 @@
  * @coverage core.model.layout
  */
 public abstract class LayoutNameSupport<T extends JavaInfo>
-    extends
-      SyncParentChildVariableNameSupport<T> {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public LayoutNameSupport(T layout) {
-    super(layout);
-  }
+extends
+SyncParentChildVariableNameSupport<T> {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public LayoutNameSupport(T layout) {
+		super(layout);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/menu/JavaMenuMenuObject.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/menu/JavaMenuMenuObject.java
index cdf84a098..d1283a6e0 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/menu/JavaMenuMenuObject.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/menu/JavaMenuMenuObject.java
@@ -21,42 +21,42 @@
  * @coverage core.model.menu
  */
 public abstract class JavaMenuMenuObject extends AbstractMenuMenuObject {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public JavaMenuMenuObject(JavaInfo component) {
-    super(component);
-    m_component.addBroadcastListener(new ObjectInfoDelete() {
-      private int m_level = 0;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public JavaMenuMenuObject(JavaInfo component) {
+		super(component);
+		m_component.addBroadcastListener(new ObjectInfoDelete() {
+			private int m_level = 0;
 
-      @Override
-      public void before(ObjectInfo parent, ObjectInfo child) throws Exception {
-        if (m_level == 0 && isRootFor0(child)) {
-          fireDeleteListeners0(child);
-        }
-        m_level++;
-      }
+			@Override
+			public void before(ObjectInfo parent, ObjectInfo child) throws Exception {
+				if (m_level == 0 && isRootFor0(child)) {
+					fireDeleteListeners0(child);
+				}
+				m_level++;
+			}
 
-      @Override
-      public void after(ObjectInfo parent, ObjectInfo child) throws Exception {
-        m_level--;
-      }
-    });
-  }
+			@Override
+			public void after(ObjectInfo parent, ObjectInfo child) throws Exception {
+				m_level--;
+			}
+		});
+	}
 
-  /**
-   * Access method for {@link #isRootFor(ObjectInfo)}.
-   */
-  private boolean isRootFor0(ObjectInfo child) {
-    return isRootFor(child);
-  }
+	/**
+	 * Access method for {@link #isRootFor(ObjectInfo)}.
+	 */
+	private boolean isRootFor0(ObjectInfo child) {
+		return isRootFor(child);
+	}
 
-  /**
-   * Access method for {@link #fireDeleteListeners(Object).
-   */
-  private void fireDeleteListeners0(Object toolkitModel) {
-    fireDeleteListeners(toolkitModel);
-  }
+	/**
+	 * Access method for {@link #fireDeleteListeners(Object).
+	 */
+	private void fireDeleteListeners0(Object toolkitModel) {
+		fireDeleteListeners(toolkitModel);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/nonvisual/AbstractArrayObjectInfo.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/nonvisual/AbstractArrayObjectInfo.java
index 9ff320923..b72e4d6f5 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/nonvisual/AbstractArrayObjectInfo.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/nonvisual/AbstractArrayObjectInfo.java
@@ -44,255 +44,255 @@
  * @coverage core.model.nonvisual
  */
 public abstract class AbstractArrayObjectInfo extends ItemCollectorObjectInfo {
-  public final static String ARRAY_ARBITRARY_KEY = "ARRAY_OBJECT";
-  public final static String REMOVE_ON_EMPTY_TAG = "arrayObject.removeOnEmpty";
-  public final static String HIDE_IN_TREE_TAG = "arrayObject.hideInTree";
-  //public final static String CREATION_ID_TAG = "arrayObject.creationId";
-  private final AbstractArrayObjectInfo m_this = this;
-  //private String m_creationId = StringUtils.EMPTY;
-  private final Class<?> m_itemType;
+	public final static String ARRAY_ARBITRARY_KEY = "ARRAY_OBJECT";
+	public final static String REMOVE_ON_EMPTY_TAG = "arrayObject.removeOnEmpty";
+	public final static String HIDE_IN_TREE_TAG = "arrayObject.hideInTree";
+	//public final static String CREATION_ID_TAG = "arrayObject.creationId";
+	private final AbstractArrayObjectInfo m_this = this;
+	//private String m_creationId = StringUtils.EMPTY;
+	private final Class<?> m_itemType;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected AbstractArrayObjectInfo(AstEditor editor, String caption, Class<?> itemType)
-      throws Exception {
-    super(editor, caption);
-    m_itemType = itemType;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected AbstractArrayObjectInfo(AstEditor editor, String caption, Class<?> itemType)
+			throws Exception {
+		super(editor, caption);
+		m_itemType = itemType;
+	}
 
-  public Class<?> getItemClass() {
-    return m_itemType;
-  }
+	public Class<?> getItemClass() {
+		return m_itemType;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IObjectPresentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public IObjectPresentation getPresentation() {
-    return new DefaultObjectPresentation(this) {
-      @Override
-      public String getText() throws Exception {
-        String text = "(array)";
-        if (!StringUtils.isEmpty(m_caption)) {
-          text = m_caption + text;
-        }
-        return text;
-      }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IObjectPresentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public IObjectPresentation getPresentation() {
+		return new DefaultObjectPresentation(this) {
+			@Override
+			public String getText() throws Exception {
+				String text = "(array)";
+				if (!StringUtils.isEmpty(m_caption)) {
+					text = m_caption + text;
+				}
+				return text;
+			}
 
-      @Override
-      public Image getIcon() throws Exception {
-        return DesignerPlugin.getImage("components/non_visual_beans_container.gif");
-      }
+			@Override
+			public Image getIcon() throws Exception {
+				return DesignerPlugin.getImage("components/non_visual_beans_container.gif");
+			}
 
-      @Override
-      public List<ObjectInfo> getChildrenTree() throws Exception {
-        if (isHideInTree()) {
-          return Lists.<ObjectInfo>newLinkedList();
-        } else {
-          return getItems();
-        }
-      }
+			@Override
+			public List<ObjectInfo> getChildrenTree() throws Exception {
+				if (isHideInTree()) {
+					return Lists.<ObjectInfo>newLinkedList();
+				} else {
+					return getItems();
+				}
+			}
 
-      @Override
-      public boolean isVisible() throws Exception {
-        return !isHideInTree();
-      }
-    };
-  }
+			@Override
+			public boolean isVisible() throws Exception {
+				return !isHideInTree();
+			}
+		};
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Items
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void addItem(int index, ObjectInfo item) throws Exception {
-    super.addItem(index, item);
-    if (item != null) {
-      item.putArbitraryValue(ARRAY_ARBITRARY_KEY, this);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Items
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void addItem(int index, ObjectInfo item) throws Exception {
+		super.addItem(index, item);
+		if (item != null) {
+			item.putArbitraryValue(ARRAY_ARBITRARY_KEY, this);
+		}
+	}
 
-  @Override
-  protected void removeItem(ObjectInfo item) throws Exception {
-    if (m_this.equals(item.getArbitraryValue(ARRAY_ARBITRARY_KEY))) {
-      item.removeArbitraryValue(ARRAY_ARBITRARY_KEY);
-    }
-    super.removeItem(item);
-  }
+	@Override
+	protected void removeItem(ObjectInfo item) throws Exception {
+		if (m_this.equals(item.getArbitraryValue(ARRAY_ARBITRARY_KEY))) {
+			item.removeArbitraryValue(ARRAY_ARBITRARY_KEY);
+		}
+		super.removeItem(item);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds new item to this array.
-   */
-  public void command_CREATE(JavaInfo item, JavaInfo nextItem) throws Exception {
-    JavaInfo parentJavaInfo = getParent() instanceof JavaInfo ? (JavaInfo) getParent() : null;
-    // fire before event
-    getBroadcast(ObjectInfoChildAddBefore.class).invoke(
-        getParent(),
-        item,
-        new ObjectInfo[]{nextItem});
-    if (parentJavaInfo != null) {
-      parentJavaInfo.getBroadcastJava().addBefore(parentJavaInfo, item);
-    }
-    // setup hierarchy
-    int index = m_items.indexOf(nextItem);
-    index = index == -1 ? m_items.size() : index;
-    getParent().addChild(item, nextItem);
-    addItem(index, item);
-    // add source
-    NodeTarget nodeTarget = getNodeTarget();
-    String source = item.getCreationSupport().add_getSource(nodeTarget);
-    Expression element =
-        getCreateItemExpression(
-            item,
-            index,
-            AssociationUtils.replaceTemplates(item, source, nodeTarget));
-    // set association
-    item.setAssociation(getAssociation(element));
-    // fire after event
-    if (parentJavaInfo != null) {
-      parentJavaInfo.getBroadcastJava().addAfter(parentJavaInfo, item);
-    }
-    getBroadcast(ObjectInfoChildAddAfter.class).invoke(getParent(), item);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds new item to this array.
+	 */
+	public void command_CREATE(JavaInfo item, JavaInfo nextItem) throws Exception {
+		JavaInfo parentJavaInfo = getParent() instanceof JavaInfo ? (JavaInfo) getParent() : null;
+		// fire before event
+		getBroadcast(ObjectInfoChildAddBefore.class).invoke(
+				getParent(),
+				item,
+				new ObjectInfo[]{nextItem});
+		if (parentJavaInfo != null) {
+			parentJavaInfo.getBroadcastJava().addBefore(parentJavaInfo, item);
+		}
+		// setup hierarchy
+		int index = m_items.indexOf(nextItem);
+		index = index == -1 ? m_items.size() : index;
+		getParent().addChild(item, nextItem);
+		addItem(index, item);
+		// add source
+		NodeTarget nodeTarget = getNodeTarget();
+		String source = item.getCreationSupport().add_getSource(nodeTarget);
+		Expression element =
+				getCreateItemExpression(
+						item,
+						index,
+						AssociationUtils.replaceTemplates(item, source, nodeTarget));
+		// set association
+		item.setAssociation(getAssociation(element));
+		// fire after event
+		if (parentJavaInfo != null) {
+			parentJavaInfo.getBroadcastJava().addAfter(parentJavaInfo, item);
+		}
+		getBroadcast(ObjectInfoChildAddAfter.class).invoke(getParent(), item);
+	}
 
-  protected Expression getCreateItemExpression(JavaInfo item, int index, String source)
-      throws Exception {
-    Expression itemExpression = createItemExpression(item, index, source);
-    item.addRelatedNode(itemExpression);
-    // set variable support
-    if (item.getVariableSupport() == null) {
-      item.setVariableSupport(new EmptyVariableSupport(item, itemExpression));
-    }
-    // set source creation
-    CreationSupport creationSupport = item.getCreationSupport();
-    if (creationSupport != null && itemExpression instanceof ClassInstanceCreation) {
-      creationSupport.add_setSourceExpression(itemExpression);
-    }
-    return itemExpression;
-  }
+	protected Expression getCreateItemExpression(JavaInfo item, int index, String source)
+			throws Exception {
+		Expression itemExpression = createItemExpression(item, index, source);
+		item.addRelatedNode(itemExpression);
+		// set variable support
+		if (item.getVariableSupport() == null) {
+			item.setVariableSupport(new EmptyVariableSupport(item, itemExpression));
+		}
+		// set source creation
+		CreationSupport creationSupport = item.getCreationSupport();
+		if (creationSupport != null && itemExpression instanceof ClassInstanceCreation) {
+			creationSupport.add_setSourceExpression(itemExpression);
+		}
+		return itemExpression;
+	}
 
-  abstract protected Expression createItemExpression(JavaInfo item, int index, String source)
-      throws Exception;
+	abstract protected Expression createItemExpression(JavaInfo item, int index, String source)
+			throws Exception;
 
-  /**
-   * Moves item into this array.
-   */
-  public void command_MOVE(JavaInfo item, JavaInfo nextItem) throws Exception {
-    JavaInfo parJavaInfo = getParent() instanceof JavaInfo ? (JavaInfo) getParent() : null;
-    JavaInfo oldJavaInfo = item.getParent() instanceof JavaInfo ? item.getParentJava() : null;
-    // fire before event
-    getBroadcastObject().childMoveBefore(getParent(), item, nextItem);
-    if (parJavaInfo != null) {
-      parJavaInfo.getBroadcastJava().moveBefore(item, oldJavaInfo, parJavaInfo);
-    }
-    // move hierarchy
-    int newIndex = m_items.indexOf(nextItem);
-    newIndex = newIndex == -1 ? m_items.size() : newIndex;
-    int oldIndex = item.getParent().getChildren().indexOf(item);
-    AbstractArrayObjectInfo oldAbstractArrayInfo = getArrayObjectInfo(item);
-    if (oldAbstractArrayInfo != null) {
-      oldIndex = oldAbstractArrayInfo.getItems().indexOf(item);
-      oldIndex = oldIndex == -1 ? oldAbstractArrayInfo.getItems().size() : oldIndex;
-      if (oldAbstractArrayInfo == this && newIndex > oldIndex) {
-        newIndex--;
-      }
-    }
-    Expression element =
-        getMoveItemExpression(item, nextItem, oldAbstractArrayInfo, oldIndex, newIndex);
-    // set association
-    item.setAssociation(getAssociation(element));
-    // fire after event
-    if (parJavaInfo != null) {
-      parJavaInfo.getBroadcastJava().moveAfter(item, oldJavaInfo, parJavaInfo);
-    }
-    getBroadcastObject().childMoveAfter(getParent(), item, nextItem, oldIndex, newIndex);
-  }
+	/**
+	 * Moves item into this array.
+	 */
+	public void command_MOVE(JavaInfo item, JavaInfo nextItem) throws Exception {
+		JavaInfo parJavaInfo = getParent() instanceof JavaInfo ? (JavaInfo) getParent() : null;
+		JavaInfo oldJavaInfo = item.getParent() instanceof JavaInfo ? item.getParentJava() : null;
+		// fire before event
+		getBroadcastObject().childMoveBefore(getParent(), item, nextItem);
+		if (parJavaInfo != null) {
+			parJavaInfo.getBroadcastJava().moveBefore(item, oldJavaInfo, parJavaInfo);
+		}
+		// move hierarchy
+		int newIndex = m_items.indexOf(nextItem);
+		newIndex = newIndex == -1 ? m_items.size() : newIndex;
+		int oldIndex = item.getParent().getChildren().indexOf(item);
+		AbstractArrayObjectInfo oldAbstractArrayInfo = getArrayObjectInfo(item);
+		if (oldAbstractArrayInfo != null) {
+			oldIndex = oldAbstractArrayInfo.getItems().indexOf(item);
+			oldIndex = oldIndex == -1 ? oldAbstractArrayInfo.getItems().size() : oldIndex;
+			if (oldAbstractArrayInfo == this && newIndex > oldIndex) {
+				newIndex--;
+			}
+		}
+		Expression element =
+				getMoveItemExpression(item, nextItem, oldAbstractArrayInfo, oldIndex, newIndex);
+		// set association
+		item.setAssociation(getAssociation(element));
+		// fire after event
+		if (parJavaInfo != null) {
+			parJavaInfo.getBroadcastJava().moveAfter(item, oldJavaInfo, parJavaInfo);
+		}
+		getBroadcastObject().childMoveAfter(getParent(), item, nextItem, oldIndex, newIndex);
+	}
 
-  abstract protected Expression getMoveItemExpression(JavaInfo item,
-      JavaInfo nextItem,
-      AbstractArrayObjectInfo oldAbstractArrayInfo,
-      int oldIndex,
-      int newIndex) throws Exception;
+	abstract protected Expression getMoveItemExpression(JavaInfo item,
+			JavaInfo nextItem,
+			AbstractArrayObjectInfo oldAbstractArrayInfo,
+			int oldIndex,
+			int newIndex) throws Exception;
 
-  /**
-   * Move item from outside to this {@link AbstractArrayObjectInfo}.
-   */
-  protected Expression moveOther(JavaInfo item, JavaInfo nextItem, int newIndex) throws Exception {
-    // try optimize source
-    if (item.getVariableSupport() instanceof LocalUniqueVariableSupport) {
-      LocalUniqueVariableSupport localVariableSupport =
-          (LocalUniqueVariableSupport) item.getVariableSupport();
-      if (localVariableSupport.canInline()) {
-        localVariableSupport.inline();
-      }
-    }
-    // source
-    String source = null;
-    if (item.getVariableSupport() instanceof EmptyVariableSupport) {
-      source =
-          getEditor().getSource(((EmptyVariableSupport) item.getVariableSupport()).getInitializer());
-    }
-    // remove from old place
-    Association association = item.getAssociation();
-    if (association != null) {
-      if (association.remove()) {
-        item.setAssociation(null);
-      }
-    }
-    item.getParent().removeChild(item);
-    // add to array
-    getParent().addChild(item, nextItem);
-    addItem(newIndex, item);
-    if (!(item.getVariableSupport() instanceof EmptyVariableSupport)) {
-      item.getVariableSupport().ensureInstanceReadyAt(getStatementTarget());
-      source = item.getVariableSupport().getReferenceExpression(getNodeTarget());
-    }
-    Assert.isNotNull(source, "No source found for.");
-    Expression element = getCreateItemExpression(item, newIndex, source);
-    return element;
-  }
+	/**
+	 * Move item from outside to this {@link AbstractArrayObjectInfo}.
+	 */
+	protected Expression moveOther(JavaInfo item, JavaInfo nextItem, int newIndex) throws Exception {
+		// try optimize source
+		if (item.getVariableSupport() instanceof LocalUniqueVariableSupport) {
+			LocalUniqueVariableSupport localVariableSupport =
+					(LocalUniqueVariableSupport) item.getVariableSupport();
+			if (localVariableSupport.canInline()) {
+				localVariableSupport.inline();
+			}
+		}
+		// source
+		String source = null;
+		if (item.getVariableSupport() instanceof EmptyVariableSupport) {
+			source =
+					getEditor().getSource(((EmptyVariableSupport) item.getVariableSupport()).getInitializer());
+		}
+		// remove from old place
+		Association association = item.getAssociation();
+		if (association != null) {
+			if (association.remove()) {
+				item.setAssociation(null);
+			}
+		}
+		item.getParent().removeChild(item);
+		// add to array
+		getParent().addChild(item, nextItem);
+		addItem(newIndex, item);
+		if (!(item.getVariableSupport() instanceof EmptyVariableSupport)) {
+			item.getVariableSupport().ensureInstanceReadyAt(getStatementTarget());
+			source = item.getVariableSupport().getReferenceExpression(getNodeTarget());
+		}
+		Assert.isNotNull(source, "No source found for.");
+		Expression element = getCreateItemExpression(item, newIndex, source);
+		return element;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Targets
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  abstract protected NodeTarget getNodeTarget();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Targets
+	//
+	////////////////////////////////////////////////////////////////////////////
+	abstract protected NodeTarget getNodeTarget();
 
-  abstract protected StatementTarget getStatementTarget();
+	abstract protected StatementTarget getStatementTarget();
 
-  /**
-   * @return {@link Association} for array item.
-   */
-  abstract protected Association getAssociation(Expression element);
+	/**
+	 * @return {@link Association} for array item.
+	 */
+	abstract protected Association getAssociation(Expression element);
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  static public AbstractArrayObjectInfo getArrayObjectInfo(ObjectInfo item) {
-    return (AbstractArrayObjectInfo) item.getArbitraryValue(ARRAY_ARBITRARY_KEY);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	static public AbstractArrayObjectInfo getArrayObjectInfo(ObjectInfo item) {
+		return (AbstractArrayObjectInfo) item.getArbitraryValue(ARRAY_ARBITRARY_KEY);
+	}
 
-  @Override
-  public String toString() {
-    StringBuffer buffer = new StringBuffer();
-    // creation
-    buffer.append(getCaption());
-    buffer.append(" []");
-    // result
-    return buffer.toString();
-  }
+	@Override
+	public String toString() {
+		StringBuffer buffer = new StringBuffer();
+		// creation
+		buffer.append(getCaption());
+		buffer.append(" []");
+		// result
+		return buffer.toString();
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/nonvisual/ArrayObjectInfo.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/nonvisual/ArrayObjectInfo.java
index 1e53d1820..a73ffa70c 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/nonvisual/ArrayObjectInfo.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/nonvisual/ArrayObjectInfo.java
@@ -39,139 +39,139 @@
  * @coverage core.model.nonvisual
  */
 public final class ArrayObjectInfo extends AbstractArrayObjectInfo {
-  private final ArrayCreation m_creation;
+	private final ArrayCreation m_creation;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ArrayObjectInfo(AstEditor editor, String caption, Class<?> itemType, ArrayCreation creation)
-      throws Exception {
-    super(editor, caption, itemType);
-    m_creation = creation;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ArrayObjectInfo(AstEditor editor, String caption, Class<?> itemType, ArrayCreation creation)
+			throws Exception {
+		super(editor, caption, itemType);
+		m_creation = creation;
+	}
 
-  /**
-   * This constructor can't used for tests, because fires {@link InvocationTargetException}.
-   */
-  public ArrayObjectInfo(AstEditor editor, String caption, ArrayCreation creation) throws Exception {
-    this(editor, caption, ReflectionUtils.getClassByName(
-        EditorState.get(editor).getEditorLoader(),
-        creation.getType().getComponentType().resolveBinding().getQualifiedName()), creation);
-  }
+	/**
+	 * This constructor can't used for tests, because fires {@link InvocationTargetException}.
+	 */
+	public ArrayObjectInfo(AstEditor editor, String caption, ArrayCreation creation) throws Exception {
+		this(editor, caption, ReflectionUtils.getClassByName(
+				EditorState.get(editor).getEditorLoader(),
+				creation.getType().getComponentType().resolveBinding().getQualifiedName()), creation);
+	}
 
-  public ArrayCreation getCreation() {
-    return m_creation;
-  }
+	public ArrayCreation getCreation() {
+		return m_creation;
+	}
 
-  /*public void setCreationId(String creationId) {
+	/*public void setCreationId(String creationId) {
   	m_creationId = creationId;
   }
   public String getCreationId() {
   	return m_creationId;
   }*/
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Expression createItemExpression(JavaInfo item, int index, String source)
-      throws Exception {
-    return getEditor().addArrayElement(m_creation.getInitializer(), index, source);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Expression createItemExpression(JavaInfo item, int index, String source)
+			throws Exception {
+		return getEditor().addArrayElement(m_creation.getInitializer(), index, source);
+	}
 
-  @Override
-  protected Expression getMoveItemExpression(JavaInfo item,
-      JavaInfo nextItem,
-      AbstractArrayObjectInfo oldAbstractArrayInfo,
-      int oldIndex,
-      int newIndex) throws Exception {
-    Expression element;
-    if (oldAbstractArrayInfo instanceof ArrayObjectInfo) {
-      // moving item between two arrays
-      ArrayObjectInfo oldArrayInfo = (ArrayObjectInfo) oldAbstractArrayInfo;
-      ArrayInitializer oldArray = oldArrayInfo.m_creation.getInitializer();
-      ArrayInitializer newArray = m_creation.getInitializer();
-      if (oldArray.equals(newArray)) {
-        // move in same array
-        getParent().moveChild(item, nextItem);
-        m_items.remove(item);
-        m_items.add(newIndex, item);
-        // exchange elements
-        element = getEditor().moveArrayElement(oldArray, newArray, oldIndex, newIndex);
-      } else {
-        // move between different arrays
-        element = moveFromArray(oldArray, oldIndex, newArray, newIndex, item, nextItem);
-      }
-      /*} else if (oldAbstractArrayInfo instanceof EllipsisObjectInfo) {
+	@Override
+	protected Expression getMoveItemExpression(JavaInfo item,
+			JavaInfo nextItem,
+			AbstractArrayObjectInfo oldAbstractArrayInfo,
+			int oldIndex,
+			int newIndex) throws Exception {
+		Expression element;
+		if (oldAbstractArrayInfo instanceof ArrayObjectInfo) {
+			// moving item between two arrays
+			ArrayObjectInfo oldArrayInfo = (ArrayObjectInfo) oldAbstractArrayInfo;
+			ArrayInitializer oldArray = oldArrayInfo.m_creation.getInitializer();
+			ArrayInitializer newArray = m_creation.getInitializer();
+			if (oldArray.equals(newArray)) {
+				// move in same array
+				getParent().moveChild(item, nextItem);
+				m_items.remove(item);
+				m_items.add(newIndex, item);
+				// exchange elements
+				element = getEditor().moveArrayElement(oldArray, newArray, oldIndex, newIndex);
+			} else {
+				// move between different arrays
+				element = moveFromArray(oldArray, oldIndex, newArray, newIndex, item, nextItem);
+			}
+			/*} else if (oldAbstractArrayInfo instanceof EllipsisObjectInfo) {
       	// moving item from ellipsis-array to this array
       	EllipsisObjectInfo oldEllipsisInfo = (EllipsisObjectInfo) oldAbstractArrayInfo;
       	// TODO
       	Assert.fail("Not implemented");
       	element = null;*/
-    } else {
-      // moving item from outside
-      element = moveOther(item, nextItem, newIndex);
-    }
-    return element;
-  }
+		} else {
+			// moving item from outside
+			element = moveOther(item, nextItem, newIndex);
+		}
+		return element;
+	}
 
-  /**
-   * Move item to this {@link ArrayObjectInfo} from other {@link ArrayObjectInfo}.
-   */
-  private Expression moveFromArray(ArrayInitializer oldArray,
-      int oldIndex,
-      ArrayInitializer newArray,
-      int newIndex,
-      JavaInfo item,
-      JavaInfo nextItem) throws Exception {
-    AstEditor editor = getEditor();
-    String source = editor.getSource(DomGenerics.expressions(oldArray).get(oldIndex));
-    // remove from old array
-    Association association = item.getAssociation();
-    if (association != null) {
-      if (association.remove()) {
-        item.setAssociation(null);
-      }
-    } else {
-      editor.removeArrayElement(oldArray, oldIndex);
-    }
-    item.getParent().removeChild(item);
-    // add to new array
-    getParent().addChild(item, nextItem);
-    addItem(newIndex, item);
-    if (!(item.getVariableSupport() instanceof EmptyVariableSupport)) {
-      item.getVariableSupport().ensureInstanceReadyAt(getStatementTarget());
-      source = item.getVariableSupport().getReferenceExpression(getNodeTarget());
-    }
-    return getCreateItemExpression(item, newIndex, source);
-  }
+	/**
+	 * Move item to this {@link ArrayObjectInfo} from other {@link ArrayObjectInfo}.
+	 */
+	private Expression moveFromArray(ArrayInitializer oldArray,
+			int oldIndex,
+			ArrayInitializer newArray,
+			int newIndex,
+			JavaInfo item,
+			JavaInfo nextItem) throws Exception {
+		AstEditor editor = getEditor();
+		String source = editor.getSource(DomGenerics.expressions(oldArray).get(oldIndex));
+		// remove from old array
+		Association association = item.getAssociation();
+		if (association != null) {
+			if (association.remove()) {
+				item.setAssociation(null);
+			}
+		} else {
+			editor.removeArrayElement(oldArray, oldIndex);
+		}
+		item.getParent().removeChild(item);
+		// add to new array
+		getParent().addChild(item, nextItem);
+		addItem(newIndex, item);
+		if (!(item.getVariableSupport() instanceof EmptyVariableSupport)) {
+			item.getVariableSupport().ensureInstanceReadyAt(getStatementTarget());
+			source = item.getVariableSupport().getReferenceExpression(getNodeTarget());
+		}
+		return getCreateItemExpression(item, newIndex, source);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Targets
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected NodeTarget getNodeTarget() {
-    return new NodeTarget(getStatementTarget());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Targets
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected NodeTarget getNodeTarget() {
+		return new NodeTarget(getStatementTarget());
+	}
 
-  @Override
-  protected StatementTarget getStatementTarget() {
-    return new StatementTarget(AstNodeUtils.getEnclosingStatement(m_creation), true);
-  }
+	@Override
+	protected StatementTarget getStatementTarget() {
+		return new StatementTarget(AstNodeUtils.getEnclosingStatement(m_creation), true);
+	}
 
-  @Override
-  protected Association getAssociation(Expression element) {
-    ASTNode parentNode = m_creation.getParent();
-    if (parentNode instanceof MethodInvocation) {
-      return new InvocationChildArrayAssociation((MethodInvocation) parentNode, this);
-    }
-    // FIXME
-    Assert.fail("ArrayObjectInfo supported association only for MethodInvocation.");
-    return null;
-  }
+	@Override
+	protected Association getAssociation(Expression element) {
+		ASTNode parentNode = m_creation.getParent();
+		if (parentNode instanceof MethodInvocation) {
+			return new InvocationChildArrayAssociation((MethodInvocation) parentNode, this);
+		}
+		// FIXME
+		Assert.fail("ArrayObjectInfo supported association only for MethodInvocation.");
+		return null;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/nonvisual/CollectorObjectInfo.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/nonvisual/CollectorObjectInfo.java
index 4fbef714f..947fb2c7d 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/nonvisual/CollectorObjectInfo.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/nonvisual/CollectorObjectInfo.java
@@ -37,171 +37,171 @@
  * @coverage core.model.nonvisual
  */
 public abstract class CollectorObjectInfo extends ObjectInfo {
-  public final static String COLLECTOR_ARBITRARY_KEY = "CONTAINER_OBJECT";
-  private boolean m_removeOnEmpty = false;
-  private boolean m_hideInTree = false;
-  private final AstEditor m_editor;
-  protected final String m_caption;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CollectorObjectInfo(AstEditor editor, String caption) throws Exception {
-    m_editor = editor;
-    m_caption = StringUtils.isEmpty(caption) ? "(container)" : caption;
-    // initialize
-    setBroadcastSupport(EditorState.get(m_editor).getBroadcast());
-    installListeners();
-  }
-
-  protected void installListeners() {
-    addBroadcastListener(new ObjectInfoChildTree() {
-      @Override
-      public void invoke(ObjectInfo object, boolean[] visible) throws Exception {
-        visible[0] &= isHideInTree() || !getItems().contains(object);
-      }
-    });
-  }
-
-  public AstEditor getEditor() {
-    return m_editor;
-  }
-
-  public void setRemoveOnEmpty(boolean removeOnEmpty) {
-    m_removeOnEmpty = removeOnEmpty;
-  }
-
-  public boolean isRemoveOnEmpty() {
-    return m_removeOnEmpty;
-  }
-
-  public void setHideInTree(boolean hideInTree) {
-    m_hideInTree = hideInTree;
-  }
-
-  public boolean isHideInTree() {
-    return m_hideInTree;
-  }
-
-  public String getCaption() {
-    return m_caption;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IObjectPresentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public IObjectPresentation getPresentation() {
-    return new DefaultObjectPresentation(this) {
-      @Override
-      public String getText() throws Exception {
-        return m_caption;
-      }
-
-      @Override
-      public Image getIcon() throws Exception {
-        return DesignerPlugin.getImage("components/non_visual_beans_container.gif");
-      }
-
-      @Override
-      public List<ObjectInfo> getChildrenTree() throws Exception {
-        if (isHideInTree()) {
-          return Lists.<ObjectInfo>newLinkedList();
-        } else {
-          return getItems();
-        }
-      }
-
-      @Override
-      public boolean isVisible() throws Exception {
-        return !isHideInTree();
-      }
-    };
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Delete operation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean canDelete() {
-    // ask each item
-    for (ObjectInfo item : getItems()) {
-      if (!item.canDelete()) {
-        return false;
-      }
-    }
-    // yes, ArrayObjectInfo can be deleted
-    return true;
-  }
-
-  @Override
-  public void delete() throws Exception {
-    ExecutionUtils.run(this, new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        List<ObjectInfo> items = getItems();
-        for (int i = 0; i < items.size(); i++) {
-          ObjectInfo itemInfo = items.get(i);
-          if (!itemInfo.isDeleted()) {
-            itemInfo.delete();
-          }
-        }
-      }
-    });
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Items
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public abstract List<ObjectInfo> getItems();
-
-  public abstract void addItem(ObjectInfo item) throws Exception;
-
-  protected abstract void addItem(int index, ObjectInfo item) throws Exception;
-
-  protected abstract void removeItem(ObjectInfo item) throws Exception;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Visuals
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public Rectangle getBounds() {
-    Rectangle bounds = null;
-    for (ObjectInfo objectInfo : getItems()) {
-      if (objectInfo instanceof AbstractComponentInfo) {
-        AbstractComponentInfo componentInfo = (AbstractComponentInfo) objectInfo;
-        Rectangle itemBounds = componentInfo.getBounds();
-        if (bounds == null && itemBounds != null) {
-          bounds = new Rectangle(itemBounds);
-        } else {
-          if (bounds != null && itemBounds != null) {
-            bounds.union(componentInfo.getBounds());
-          }
-        }
-      }
-    }
-    if (bounds == null) {
-      return new Rectangle(0, 0, 0, 0);
-    } else {
-      return bounds;
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  static public CollectorObjectInfo getCollectorObjectInfo(ObjectInfo item) {
-    return (CollectorObjectInfo) item.getArbitraryValue(COLLECTOR_ARBITRARY_KEY);
-  }
+	public final static String COLLECTOR_ARBITRARY_KEY = "CONTAINER_OBJECT";
+	private boolean m_removeOnEmpty = false;
+	private boolean m_hideInTree = false;
+	private final AstEditor m_editor;
+	protected final String m_caption;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CollectorObjectInfo(AstEditor editor, String caption) throws Exception {
+		m_editor = editor;
+		m_caption = StringUtils.isEmpty(caption) ? "(container)" : caption;
+		// initialize
+		setBroadcastSupport(EditorState.get(m_editor).getBroadcast());
+		installListeners();
+	}
+
+	protected void installListeners() {
+		addBroadcastListener(new ObjectInfoChildTree() {
+			@Override
+			public void invoke(ObjectInfo object, boolean[] visible) throws Exception {
+				visible[0] &= isHideInTree() || !getItems().contains(object);
+			}
+		});
+	}
+
+	public AstEditor getEditor() {
+		return m_editor;
+	}
+
+	public void setRemoveOnEmpty(boolean removeOnEmpty) {
+		m_removeOnEmpty = removeOnEmpty;
+	}
+
+	public boolean isRemoveOnEmpty() {
+		return m_removeOnEmpty;
+	}
+
+	public void setHideInTree(boolean hideInTree) {
+		m_hideInTree = hideInTree;
+	}
+
+	public boolean isHideInTree() {
+		return m_hideInTree;
+	}
+
+	public String getCaption() {
+		return m_caption;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IObjectPresentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public IObjectPresentation getPresentation() {
+		return new DefaultObjectPresentation(this) {
+			@Override
+			public String getText() throws Exception {
+				return m_caption;
+			}
+
+			@Override
+			public Image getIcon() throws Exception {
+				return DesignerPlugin.getImage("components/non_visual_beans_container.gif");
+			}
+
+			@Override
+			public List<ObjectInfo> getChildrenTree() throws Exception {
+				if (isHideInTree()) {
+					return Lists.<ObjectInfo>newLinkedList();
+				} else {
+					return getItems();
+				}
+			}
+
+			@Override
+			public boolean isVisible() throws Exception {
+				return !isHideInTree();
+			}
+		};
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Delete operation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean canDelete() {
+		// ask each item
+		for (ObjectInfo item : getItems()) {
+			if (!item.canDelete()) {
+				return false;
+			}
+		}
+		// yes, ArrayObjectInfo can be deleted
+		return true;
+	}
+
+	@Override
+	public void delete() throws Exception {
+		ExecutionUtils.run(this, new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				List<ObjectInfo> items = getItems();
+				for (int i = 0; i < items.size(); i++) {
+					ObjectInfo itemInfo = items.get(i);
+					if (!itemInfo.isDeleted()) {
+						itemInfo.delete();
+					}
+				}
+			}
+		});
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Items
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public abstract List<ObjectInfo> getItems();
+
+	public abstract void addItem(ObjectInfo item) throws Exception;
+
+	protected abstract void addItem(int index, ObjectInfo item) throws Exception;
+
+	protected abstract void removeItem(ObjectInfo item) throws Exception;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Visuals
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public Rectangle getBounds() {
+		Rectangle bounds = null;
+		for (ObjectInfo objectInfo : getItems()) {
+			if (objectInfo instanceof AbstractComponentInfo) {
+				AbstractComponentInfo componentInfo = (AbstractComponentInfo) objectInfo;
+				Rectangle itemBounds = componentInfo.getBounds();
+				if (bounds == null && itemBounds != null) {
+					bounds = new Rectangle(itemBounds);
+				} else {
+					if (bounds != null && itemBounds != null) {
+						bounds.union(componentInfo.getBounds());
+					}
+				}
+			}
+		}
+		if (bounds == null) {
+			return new Rectangle(0, 0, 0, 0);
+		} else {
+			return bounds;
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	static public CollectorObjectInfo getCollectorObjectInfo(ObjectInfo item) {
+		return (CollectorObjectInfo) item.getArbitraryValue(COLLECTOR_ARBITRARY_KEY);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/nonvisual/EllipsisObjectInfo.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/nonvisual/EllipsisObjectInfo.java
index adeca6fff..44a85d19a 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/nonvisual/EllipsisObjectInfo.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/nonvisual/EllipsisObjectInfo.java
@@ -31,149 +31,149 @@
  * @coverage core.model.nonvisual
  */
 public final class EllipsisObjectInfo extends AbstractArrayObjectInfo {
-  public static final String ON_EMPTY_SOURCE_TAG = "arrayObject.OnEmptySource";
-  private MethodInvocation m_invocation;
-  private final int m_parameterIndex;
-  private String m_onEmptySource;
+	public static final String ON_EMPTY_SOURCE_TAG = "arrayObject.OnEmptySource";
+	private MethodInvocation m_invocation;
+	private final int m_parameterIndex;
+	private String m_onEmptySource;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public EllipsisObjectInfo(AstEditor editor,
-      String caption,
-      Class<?> itemType,
-      MethodInvocation invocation,
-      int parameterIndex) throws Exception {
-    super(editor, caption, itemType);
-    m_invocation = invocation;
-    m_parameterIndex = parameterIndex;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public EllipsisObjectInfo(AstEditor editor,
+			String caption,
+			Class<?> itemType,
+			MethodInvocation invocation,
+			int parameterIndex) throws Exception {
+		super(editor, caption, itemType);
+		m_invocation = invocation;
+		m_parameterIndex = parameterIndex;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void setInvocation(MethodInvocation invocation) {
-    m_invocation = invocation;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void setInvocation(MethodInvocation invocation) {
+		m_invocation = invocation;
+	}
 
-  public MethodInvocation getInvocation() {
-    return m_invocation;
-  }
+	public MethodInvocation getInvocation() {
+		return m_invocation;
+	}
 
-  public int getParameterIndex() {
-    return m_parameterIndex;
-  }
+	public int getParameterIndex() {
+		return m_parameterIndex;
+	}
 
-  public void setOnEmptySource(String onEmptySource) {
-    m_onEmptySource = onEmptySource;
-  }
+	public void setOnEmptySource(String onEmptySource) {
+		m_onEmptySource = onEmptySource;
+	}
 
-  public String getOnEmptySource() {
-    return m_onEmptySource;
-  }
+	public String getOnEmptySource() {
+		return m_onEmptySource;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Expression createItemExpression(JavaInfo item, int index, String source)
-      throws Exception {
-    return getEditor().addInvocationArgument(m_invocation, m_parameterIndex + index, source);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Expression createItemExpression(JavaInfo item, int index, String source)
+			throws Exception {
+		return getEditor().addInvocationArgument(m_invocation, m_parameterIndex + index, source);
+	}
 
-  @Override
-  protected Expression getMoveItemExpression(JavaInfo item,
-      JavaInfo nextItem,
-      AbstractArrayObjectInfo oldAbstractArrayInfo,
-      int oldIndex,
-      int newIndex) throws Exception {
-    Expression element;
-    if (oldAbstractArrayInfo instanceof EllipsisObjectInfo) {
-      EllipsisObjectInfo oldEllipsisInfo = (EllipsisObjectInfo) oldAbstractArrayInfo;
-      MethodInvocation oldInvocation = oldEllipsisInfo.getInvocation();
-      if (oldInvocation.equals(m_invocation)) {
-        // move in same array
-        getParent().moveChild(item, nextItem);
-        m_items.remove(item);
-        m_items.add(newIndex, item);
-        // exchange elements
-        element =
-            getEditor().moveInvocationArgument(
-                oldInvocation,
-                oldEllipsisInfo.getParameterIndex() + oldIndex,
-                getParameterIndex() + newIndex);
-      } else {
-        element =
-            moveFromEllipsis(item, nextItem, oldInvocation, oldEllipsisInfo, oldIndex, newIndex);
-      }
-      /*} else if (oldAbstractArrayInfo instanceof ArrayObjectInfo) {
+	@Override
+	protected Expression getMoveItemExpression(JavaInfo item,
+			JavaInfo nextItem,
+			AbstractArrayObjectInfo oldAbstractArrayInfo,
+			int oldIndex,
+			int newIndex) throws Exception {
+		Expression element;
+		if (oldAbstractArrayInfo instanceof EllipsisObjectInfo) {
+			EllipsisObjectInfo oldEllipsisInfo = (EllipsisObjectInfo) oldAbstractArrayInfo;
+			MethodInvocation oldInvocation = oldEllipsisInfo.getInvocation();
+			if (oldInvocation.equals(m_invocation)) {
+				// move in same array
+				getParent().moveChild(item, nextItem);
+				m_items.remove(item);
+				m_items.add(newIndex, item);
+				// exchange elements
+				element =
+						getEditor().moveInvocationArgument(
+								oldInvocation,
+								oldEllipsisInfo.getParameterIndex() + oldIndex,
+								getParameterIndex() + newIndex);
+			} else {
+				element =
+						moveFromEllipsis(item, nextItem, oldInvocation, oldEllipsisInfo, oldIndex, newIndex);
+			}
+			/*} else if (oldAbstractArrayInfo instanceof ArrayObjectInfo) {
       	// moving item from array to this ellipsis-array
       	ArrayObjectInfo oldArrayInfo = (ArrayObjectInfo) oldAbstractArrayInfo;
       	// TODO
       	Assert.fail("Not implemented");
       	element = null;*/
-    } else {
-      // moving item from outside
-      element = moveOther(item, nextItem, newIndex);
-    }
-    return element;
-  }
+		} else {
+			// moving item from outside
+			element = moveOther(item, nextItem, newIndex);
+		}
+		return element;
+	}
 
-  /**
-   * Move item to this {@link EllipsisObjectInfo} from other {@link EllipsisObjectInfo}.
-   */
-  private Expression moveFromEllipsis(JavaInfo item,
-      JavaInfo nextItem,
-      MethodInvocation oldInvocation,
-      EllipsisObjectInfo oldEllipsisInfo,
-      int oldIndex,
-      int newIndex) throws Exception {
-    AstEditor editor = getEditor();
-    int oldInvocationIndex = oldEllipsisInfo.getParameterIndex() + oldIndex;
-    String source = editor.getSource(DomGenerics.arguments(oldInvocation).get(oldInvocationIndex));
-    // remove from old ellipsis-array
-    Association association = item.getAssociation();
-    if (association != null) {
-      if (association.remove()) {
-        item.setAssociation(null);
-      }
-    } else {
-      editor.removeInvocationArgument(oldInvocation, oldInvocationIndex);
-    }
-    item.getParent().removeChild(item);
-    // add to new ellipsis-array
-    getParent().addChild(item, nextItem);
-    addItem(newIndex, item);
-    if (!(item.getVariableSupport() instanceof EmptyVariableSupport)) {
-      item.getVariableSupport().ensureInstanceReadyAt(getStatementTarget());
-      source = item.getVariableSupport().getReferenceExpression(getNodeTarget());
-    }
-    return getCreateItemExpression(item, newIndex, source);
-  }
+	/**
+	 * Move item to this {@link EllipsisObjectInfo} from other {@link EllipsisObjectInfo}.
+	 */
+	private Expression moveFromEllipsis(JavaInfo item,
+			JavaInfo nextItem,
+			MethodInvocation oldInvocation,
+			EllipsisObjectInfo oldEllipsisInfo,
+			int oldIndex,
+			int newIndex) throws Exception {
+		AstEditor editor = getEditor();
+		int oldInvocationIndex = oldEllipsisInfo.getParameterIndex() + oldIndex;
+		String source = editor.getSource(DomGenerics.arguments(oldInvocation).get(oldInvocationIndex));
+		// remove from old ellipsis-array
+		Association association = item.getAssociation();
+		if (association != null) {
+			if (association.remove()) {
+				item.setAssociation(null);
+			}
+		} else {
+			editor.removeInvocationArgument(oldInvocation, oldInvocationIndex);
+		}
+		item.getParent().removeChild(item);
+		// add to new ellipsis-array
+		getParent().addChild(item, nextItem);
+		addItem(newIndex, item);
+		if (!(item.getVariableSupport() instanceof EmptyVariableSupport)) {
+			item.getVariableSupport().ensureInstanceReadyAt(getStatementTarget());
+			source = item.getVariableSupport().getReferenceExpression(getNodeTarget());
+		}
+		return getCreateItemExpression(item, newIndex, source);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Targets
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected NodeTarget getNodeTarget() {
-    return new NodeTarget(getStatementTarget());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Targets
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected NodeTarget getNodeTarget() {
+		return new NodeTarget(getStatementTarget());
+	}
 
-  @Override
-  protected StatementTarget getStatementTarget() {
-    return new StatementTarget(AstNodeUtils.getEnclosingStatement(m_invocation), true);
-  }
+	@Override
+	protected StatementTarget getStatementTarget() {
+		return new StatementTarget(AstNodeUtils.getEnclosingStatement(m_invocation), true);
+	}
 
-  @Override
-  protected Association getAssociation(Expression element) {
-    return new InvocationChildEllipsisAssociation(m_invocation, this);
-  }
+	@Override
+	protected Association getAssociation(Expression element) {
+		return new InvocationChildEllipsisAssociation(m_invocation, this);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/nonvisual/FlowContainerGroupInfo.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/nonvisual/FlowContainerGroupInfo.java
index 8a29ef874..0a63a370d 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/nonvisual/FlowContainerGroupInfo.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/nonvisual/FlowContainerGroupInfo.java
@@ -28,74 +28,74 @@
  * @coverage core.model.nonvisual
  */
 public class FlowContainerGroupInfo extends CollectorObjectInfo {
-  private final JavaInfo m_component;
-  ArrayList<FlowContainerConfigurable> m_containers = Lists.newArrayList();
+	private final JavaInfo m_component;
+	ArrayList<FlowContainerConfigurable> m_containers = Lists.newArrayList();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FlowContainerGroupInfo(AstEditor editor, JavaInfo javaInfo, String caption)
-      throws Exception {
-    super(editor, caption);
-    m_component = javaInfo;
-    m_component.addChild(this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FlowContainerGroupInfo(AstEditor editor, JavaInfo javaInfo, String caption)
+			throws Exception {
+		super(editor, caption);
+		m_component = javaInfo;
+		m_component.addChild(this);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Items
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public List<ObjectInfo> getItems() {
-    List<ObjectInfo> list = Lists.newArrayList();
-    List<JavaInfo> children = m_component.getChildrenJava();
-    for (JavaInfo child : children) {
-      for (FlowContainerConfigurable container : m_containers) {
-        if (container.validateComponent(child)) {
-          list.add(child);
-          break;
-        }
-      }
-    }
-    return list;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Items
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public List<ObjectInfo> getItems() {
+		List<ObjectInfo> list = Lists.newArrayList();
+		List<JavaInfo> children = m_component.getChildrenJava();
+		for (JavaInfo child : children) {
+			for (FlowContainerConfigurable container : m_containers) {
+				if (container.validateComponent(child)) {
+					list.add(child);
+					break;
+				}
+			}
+		}
+		return list;
+	}
 
-  @Override
-  public void addItem(ObjectInfo item) throws Exception {
-    error("addItem(ObjectInfo)");
-  }
+	@Override
+	public void addItem(ObjectInfo item) throws Exception {
+		error("addItem(ObjectInfo)");
+	}
 
-  @Override
-  protected void addItem(int index, ObjectInfo item) throws Exception {
-    error("addItem(int,ObjectInfo)");
-  }
+	@Override
+	protected void addItem(int index, ObjectInfo item) throws Exception {
+		error("addItem(int,ObjectInfo)");
+	}
 
-  @Override
-  protected void removeItem(ObjectInfo item) throws Exception {
-    error("removeItem(ObjectInfo)");
-  }
+	@Override
+	protected void removeItem(ObjectInfo item) throws Exception {
+		error("removeItem(ObjectInfo)");
+	}
 
-  private void error(String operation) throws Exception {
-    throw new Exception("Operation '" + operation + "' not allowed.");
-  }
+	private void error(String operation) throws Exception {
+		throw new Exception("Operation '" + operation + "' not allowed.");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public List<FlowContainerConfigurable> getContainers() {
-    return Collections.unmodifiableList(m_containers);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public List<FlowContainerConfigurable> getContainers() {
+		return Collections.unmodifiableList(m_containers);
+	}
 
-  public void addContainer(FlowContainerConfigurable container) {
-    m_containers.add(container);
-  }
+	public void addContainer(FlowContainerConfigurable container) {
+		m_containers.add(container);
+	}
 
-  public boolean removeContainer(FlowContainerConfigurable container) {
-    return m_containers.remove(container);
-  }
+	public boolean removeContainer(FlowContainerConfigurable container) {
+		return m_containers.remove(container);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/nonvisual/ItemCollectorObjectInfo.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/nonvisual/ItemCollectorObjectInfo.java
index 8beaa984e..ae0d21dcc 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/nonvisual/ItemCollectorObjectInfo.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/nonvisual/ItemCollectorObjectInfo.java
@@ -27,62 +27,62 @@
  * @coverage core.model.nonvisual
  */
 public class ItemCollectorObjectInfo extends CollectorObjectInfo {
-  private final ItemCollectorObjectInfo m_this = this;
-  protected final LinkedList<ObjectInfo> m_items = Lists.newLinkedList();
+	private final ItemCollectorObjectInfo m_this = this;
+	protected final LinkedList<ObjectInfo> m_items = Lists.newLinkedList();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ItemCollectorObjectInfo(AstEditor editor, String caption) throws Exception {
-    super(editor, caption);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ItemCollectorObjectInfo(AstEditor editor, String caption) throws Exception {
+		super(editor, caption);
+	}
 
-  @Override
-  protected void installListeners() {
-    super.installListeners();
-    addBroadcastListener(new ObjectEventListener() {
-      @Override
-      public void childRemoveAfter(ObjectInfo parent, ObjectInfo child) throws Exception {
-        m_this.removeItem(child);
-      }
-    });
-  }
+	@Override
+	protected void installListeners() {
+		super.installListeners();
+		addBroadcastListener(new ObjectEventListener() {
+			@Override
+			public void childRemoveAfter(ObjectInfo parent, ObjectInfo child) throws Exception {
+				m_this.removeItem(child);
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Items
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public List<ObjectInfo> getItems() {
-    List<ObjectInfo> list = Lists.newArrayList();
-    list.addAll(m_items);
-    return Collections.unmodifiableList(list);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Items
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public List<ObjectInfo> getItems() {
+		List<ObjectInfo> list = Lists.newArrayList();
+		list.addAll(m_items);
+		return Collections.unmodifiableList(list);
+	}
 
-  @Override
-  public void addItem(ObjectInfo item) throws Exception {
-    addItem(m_items.size(), item);
-  }
+	@Override
+	public void addItem(ObjectInfo item) throws Exception {
+		addItem(m_items.size(), item);
+	}
 
-  @Override
-  protected void addItem(int index, ObjectInfo item) throws Exception {
-    if (item != null && !m_items.contains(item)) {
-      m_items.add(index, item);
-      item.putArbitraryValue(COLLECTOR_ARBITRARY_KEY, this);
-    }
-  }
+	@Override
+	protected void addItem(int index, ObjectInfo item) throws Exception {
+		if (item != null && !m_items.contains(item)) {
+			m_items.add(index, item);
+			item.putArbitraryValue(COLLECTOR_ARBITRARY_KEY, this);
+		}
+	}
 
-  @Override
-  protected void removeItem(ObjectInfo item) throws Exception {
-    boolean removed = m_items.remove(item);
-    if (m_this.equals(item.getArbitraryValue(COLLECTOR_ARBITRARY_KEY))) {
-      item.removeArbitraryValue(COLLECTOR_ARBITRARY_KEY);
-    }
-    if (isRemoveOnEmpty() && m_items.isEmpty() && removed) {
-      getParent().removeChild(m_this);
-    }
-  }
+	@Override
+	protected void removeItem(ObjectInfo item) throws Exception {
+		boolean removed = m_items.remove(item);
+		if (m_this.equals(item.getArbitraryValue(COLLECTOR_ARBITRARY_KEY))) {
+			item.removeArbitraryValue(COLLECTOR_ARBITRARY_KEY);
+		}
+		if (isRemoveOnEmpty() && m_items.isEmpty() && removed) {
+			getParent().removeChild(m_this);
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/nonvisual/JavadocNonVisualBeanInfo.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/nonvisual/JavadocNonVisualBeanInfo.java
index d402c7159..f10b2a1ce 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/nonvisual/JavadocNonVisualBeanInfo.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/nonvisual/JavadocNonVisualBeanInfo.java
@@ -32,110 +32,110 @@
  * @coverage core.model.nonvisual
  */
 final class JavadocNonVisualBeanInfo extends NonVisualBeanInfo {
-  private static final String NON_VISUAL_TAG = "@wbp.nonvisual";
-  private static final String LOCATION_PREFIX = "location=";
-  //
-  private final BodyDeclaration m_bodyDeclaration;
+	private static final String NON_VISUAL_TAG = "@wbp.nonvisual";
+	private static final String LOCATION_PREFIX = "location=";
+	//
+	private final BodyDeclaration m_bodyDeclaration;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  JavadocNonVisualBeanInfo(BodyDeclaration bodyDeclaration) {
-    m_location = new Point();
-    m_bodyDeclaration = bodyDeclaration;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	JavadocNonVisualBeanInfo(BodyDeclaration bodyDeclaration) {
+		m_location = new Point();
+		m_bodyDeclaration = bodyDeclaration;
+	}
 
-  private JavadocNonVisualBeanInfo(BodyDeclaration bodyDeclaration, Point location) {
-    this(bodyDeclaration);
-    m_location.setLocation(location);
-  }
+	private JavadocNonVisualBeanInfo(BodyDeclaration bodyDeclaration, Point location) {
+		this(bodyDeclaration);
+		m_location.setLocation(location);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Creation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return {@link NonVisualBeanInfo} if given {@link BodyDeclaration} contains special non-visual
-   *         comment or <code>null</code>.
-   */
-  static NonVisualBeanInfo getNonVisualBeanInfo(BodyDeclaration bodyDeclaration) {
-    Javadoc javadoc = bodyDeclaration.getJavadoc();
-    if (javadoc != null) {
-      // try to find non-visual tag
-      for (TagElement tagElement : DomGenerics.tags(javadoc)) {
-        if (NON_VISUAL_TAG.equals(tagElement.getTagName())) {
-          // prepare fragments
-          List<ASTNode> fragments = DomGenerics.fragments(tagElement);
-          Assert.isTrueException(
-              !fragments.isEmpty(),
-              ICoreExceptionConstants.PARSER_WRONG_NON_VISUAL_COMMENT,
-              tagElement);
-          // extract location element
-          ASTNode fragment = fragments.get(0);
-          Assert.isTrueException(
-              fragment instanceof TextElement,
-              ICoreExceptionConstants.PARSER_WRONG_NON_VISUAL_COMMENT,
-              tagElement);
-          //
-          TextElement textElement = (TextElement) fragment;
-          String text = textElement.getText().trim();
-          Assert.isTrueException(
-              text.startsWith(LOCATION_PREFIX),
-              ICoreExceptionConstants.PARSER_WRONG_NON_VISUAL_COMMENT,
-              tagElement);
-          // prepare location
-          String[] locationParts = StringUtils.split(text.substring(LOCATION_PREFIX.length()), ',');
-          Assert.isTrueException(
-              locationParts.length == 2,
-              ICoreExceptionConstants.PARSER_WRONG_NON_VISUAL_COMMENT,
-              tagElement);
-          Point location = new Point();
-          try {
-            location.x = Integer.parseInt(locationParts[0].trim());
-            location.y = Integer.parseInt(locationParts[1].trim());
-          } catch (NumberFormatException e) {
-            Assert.isTrueException(
-                false,
-                ICoreExceptionConstants.PARSER_WRONG_NON_VISUAL_COMMENT,
-                tagElement);
-          }
-          // create model
-          return new JavadocNonVisualBeanInfo(bodyDeclaration, location);
-        }
-      }
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Creation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return {@link NonVisualBeanInfo} if given {@link BodyDeclaration} contains special non-visual
+	 *         comment or <code>null</code>.
+	 */
+	static NonVisualBeanInfo getNonVisualBeanInfo(BodyDeclaration bodyDeclaration) {
+		Javadoc javadoc = bodyDeclaration.getJavadoc();
+		if (javadoc != null) {
+			// try to find non-visual tag
+			for (TagElement tagElement : DomGenerics.tags(javadoc)) {
+				if (NON_VISUAL_TAG.equals(tagElement.getTagName())) {
+					// prepare fragments
+					List<ASTNode> fragments = DomGenerics.fragments(tagElement);
+					Assert.isTrueException(
+							!fragments.isEmpty(),
+							ICoreExceptionConstants.PARSER_WRONG_NON_VISUAL_COMMENT,
+							tagElement);
+					// extract location element
+					ASTNode fragment = fragments.get(0);
+					Assert.isTrueException(
+							fragment instanceof TextElement,
+							ICoreExceptionConstants.PARSER_WRONG_NON_VISUAL_COMMENT,
+							tagElement);
+					//
+					TextElement textElement = (TextElement) fragment;
+					String text = textElement.getText().trim();
+					Assert.isTrueException(
+							text.startsWith(LOCATION_PREFIX),
+							ICoreExceptionConstants.PARSER_WRONG_NON_VISUAL_COMMENT,
+							tagElement);
+					// prepare location
+					String[] locationParts = StringUtils.split(text.substring(LOCATION_PREFIX.length()), ',');
+					Assert.isTrueException(
+							locationParts.length == 2,
+							ICoreExceptionConstants.PARSER_WRONG_NON_VISUAL_COMMENT,
+							tagElement);
+					Point location = new Point();
+					try {
+						location.x = Integer.parseInt(locationParts[0].trim());
+						location.y = Integer.parseInt(locationParts[1].trim());
+					} catch (NumberFormatException e) {
+						Assert.isTrueException(
+								false,
+								ICoreExceptionConstants.PARSER_WRONG_NON_VISUAL_COMMENT,
+								tagElement);
+					}
+					// create model
+					return new JavadocNonVisualBeanInfo(bodyDeclaration, location);
+				}
+			}
+		}
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Location
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void moveLocation(Point moveDelta) throws Exception {
-    m_location.performTranslate(moveDelta);
-    m_javaInfo.getEditor().setJavadocTagText(
-        m_bodyDeclaration,
-        NON_VISUAL_TAG,
-        " "
-            + LOCATION_PREFIX
-            + Integer.toString(m_location.x)
-            + ","
-            + Integer.toString(m_location.y));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Location
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void moveLocation(Point moveDelta) throws Exception {
+		m_location.performTranslate(moveDelta);
+		m_javaInfo.getEditor().setJavadocTagText(
+				m_bodyDeclaration,
+				NON_VISUAL_TAG,
+				" "
+						+ LOCATION_PREFIX
+						+ Integer.toString(m_location.x)
+						+ ","
+						+ Integer.toString(m_location.y));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Remove
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void remove() throws Exception {
-    m_javaInfo.getEditor().setJavadocTagText(m_bodyDeclaration, NON_VISUAL_TAG, null);
-    super.remove();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Remove
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void remove() throws Exception {
+		m_javaInfo.getEditor().setJavadocTagText(m_bodyDeclaration, NON_VISUAL_TAG, null);
+		super.remove();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/nonvisual/NonVisualAssociation.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/nonvisual/NonVisualAssociation.java
index 8a2be548f..1205b9441 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/nonvisual/NonVisualAssociation.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/nonvisual/NonVisualAssociation.java
@@ -19,23 +19,23 @@
  * @coverage core.model.association
  */
 public final class NonVisualAssociation extends Association {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public NonVisualAssociation() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public NonVisualAssociation() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean remove() throws Exception {
-    NonVisualBeanInfo beanInfo = NonVisualBeanInfo.getNonVisualInfo(m_javaInfo);
-    beanInfo.remove();
-    return super.remove();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean remove() throws Exception {
+		NonVisualBeanInfo beanInfo = NonVisualBeanInfo.getNonVisualInfo(m_javaInfo);
+		beanInfo.remove();
+		return super.remove();
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/nonvisual/NonVisualBeanContainerInfo.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/nonvisual/NonVisualBeanContainerInfo.java
index 001ae65d2..d9643033f 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/nonvisual/NonVisualBeanContainerInfo.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/nonvisual/NonVisualBeanContainerInfo.java
@@ -41,137 +41,137 @@
  * @coverage core.model.nonvisual
  */
 public final class NonVisualBeanContainerInfo extends ObjectInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the existing or new {@link ActionContainerInfo} for given root.
-   */
-  public static NonVisualBeanContainerInfo get(JavaInfo root) throws Exception {
-    // try to find existing container
-    NonVisualBeanContainerInfo container = find(root);
-    if (container != null) {
-      return container;
-    }
-    // add new container
-    container = new NonVisualBeanContainerInfo();
-    root.addChild(container);
-    return container;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the existing or new {@link ActionContainerInfo} for given root.
+	 */
+	public static NonVisualBeanContainerInfo get(JavaInfo root) throws Exception {
+		// try to find existing container
+		NonVisualBeanContainerInfo container = find(root);
+		if (container != null) {
+			return container;
+		}
+		// add new container
+		container = new NonVisualBeanContainerInfo();
+		root.addChild(container);
+		return container;
+	}
 
-  /**
-   * @return find the existing {@link NonVisualBeanContainerInfo} for given root, otherwise
-   *         <code>null</code>.
-   */
-  public static NonVisualBeanContainerInfo find(JavaInfo rootInfo) {
-    for (ObjectInfo child : rootInfo.getChildren()) {
-      if (child instanceof NonVisualBeanContainerInfo) {
-        return (NonVisualBeanContainerInfo) child;
-      }
-    }
-    return null;
-  }
+	/**
+	 * @return find the existing {@link NonVisualBeanContainerInfo} for given root, otherwise
+	 *         <code>null</code>.
+	 */
+	public static NonVisualBeanContainerInfo find(JavaInfo rootInfo) {
+		for (ObjectInfo child : rootInfo.getChildren()) {
+			if (child instanceof NonVisualBeanContainerInfo) {
+				return (NonVisualBeanContainerInfo) child;
+			}
+		}
+		return null;
+	}
 
-  /**
-   * @return {@link NonVisualBeanInfo} if given {@link ASTNode} contains special non-visual comment
-   *         or <code>null</code>.
-   */
-  public static NonVisualBeanInfo getNonVisualInfo(ASTNode creationNode) throws Exception {
-    BodyDeclaration member = AstNodeUtils.getEnclosingNode(creationNode, BodyDeclaration.class);
-    if (member != null) {
-      return JavadocNonVisualBeanInfo.getNonVisualBeanInfo(member);
-    }
-    return null;
-  }
+	/**
+	 * @return {@link NonVisualBeanInfo} if given {@link ASTNode} contains special non-visual comment
+	 *         or <code>null</code>.
+	 */
+	public static NonVisualBeanInfo getNonVisualInfo(ASTNode creationNode) throws Exception {
+		BodyDeclaration member = AstNodeUtils.getEnclosingNode(creationNode, BodyDeclaration.class);
+		if (member != null) {
+			return JavadocNonVisualBeanInfo.getNonVisualBeanInfo(member);
+		}
+		return null;
+	}
 
-  /**
-   * Add new <i>non-visual bean</i> to container for giver root and location.
-   */
-  public static void add(JavaInfo root, JavaInfo bean, Point location) throws Exception {
-    // prepare code generation settings
-    VariableSupport variableSupport;
-    StatementGenerator statementGenerator;
-    {
-      VariableSupportDescription variableDescription = GenerationUtils.getVariableDescription(root);
-      if (variableDescription == LazyVariableDescription.INSTANCE) {
-        variableSupport = new LazyVariableSupport(bean);
-        statementGenerator = LazyStatementGenerator.INSTANCE;
-      } else {
-        variableSupport = new FieldInitializerVariableSupport(bean);
-        statementGenerator = PureFlatStatementGenerator.INSTANCE;
-      }
-    }
-    // do add
-    JavaInfoUtils.add(
-        bean,
-        variableSupport,
-        statementGenerator,
-        AssociationObjects.nonVisual(),
-        root,
-        null);
-    root.removeChild(bean);
-    // create non-visual model
-    {
-      BodyDeclaration member =
-          AstNodeUtils.getEnclosingNode(bean.getCreationSupport().getNode(), BodyDeclaration.class);
-      NonVisualBeanInfo nonVisualInfo = new JavadocNonVisualBeanInfo(member);
-      nonVisualInfo.setJavaInfo(bean);
-      nonVisualInfo.moveLocation(location);
-    }
-    // add to container
-    get(root).addChild(bean);
-    // If "lazy" Action just added and not attached later, it will be not if execution flow.
-    // Include it now.
-    if (bean.getVariableSupport() instanceof LazyVariableSupport) {
-      LazyVariableSupport lazyVariable = (LazyVariableSupport) bean.getVariableSupport();
-      ExecutionFlowDescription flowDescription = JavaInfoUtils.getState(bean).getFlowDescription();
-      flowDescription.addStartMethod(lazyVariable.m_accessor);
-    }
-  }
+	/**
+	 * Add new <i>non-visual bean</i> to container for giver root and location.
+	 */
+	public static void add(JavaInfo root, JavaInfo bean, Point location) throws Exception {
+		// prepare code generation settings
+		VariableSupport variableSupport;
+		StatementGenerator statementGenerator;
+		{
+			VariableSupportDescription variableDescription = GenerationUtils.getVariableDescription(root);
+			if (variableDescription == LazyVariableDescription.INSTANCE) {
+				variableSupport = new LazyVariableSupport(bean);
+				statementGenerator = LazyStatementGenerator.INSTANCE;
+			} else {
+				variableSupport = new FieldInitializerVariableSupport(bean);
+				statementGenerator = PureFlatStatementGenerator.INSTANCE;
+			}
+		}
+		// do add
+		JavaInfoUtils.add(
+				bean,
+				variableSupport,
+				statementGenerator,
+				AssociationObjects.nonVisual(),
+				root,
+				null);
+		root.removeChild(bean);
+		// create non-visual model
+		{
+			BodyDeclaration member =
+					AstNodeUtils.getEnclosingNode(bean.getCreationSupport().getNode(), BodyDeclaration.class);
+			NonVisualBeanInfo nonVisualInfo = new JavadocNonVisualBeanInfo(member);
+			nonVisualInfo.setJavaInfo(bean);
+			nonVisualInfo.moveLocation(location);
+		}
+		// add to container
+		get(root).addChild(bean);
+		// If "lazy" Action just added and not attached later, it will be not if execution flow.
+		// Include it now.
+		if (bean.getVariableSupport() instanceof LazyVariableSupport) {
+			LazyVariableSupport lazyVariable = (LazyVariableSupport) bean.getVariableSupport();
+			ExecutionFlowDescription flowDescription = JavaInfoUtils.getState(bean).getFlowDescription();
+			flowDescription.addStartMethod(lazyVariable.m_accessor);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    return "{NonVisualBeans}";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		return "{NonVisualBeans}";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public IObjectPresentation getPresentation() {
-    return new DefaultObjectPresentation(this) {
-      @Override
-      public String getText() throws Exception {
-        return "(non-visual beans)";
-      }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public IObjectPresentation getPresentation() {
+		return new DefaultObjectPresentation(this) {
+			@Override
+			public String getText() throws Exception {
+				return "(non-visual beans)";
+			}
 
-      @Override
-      public Image getIcon() throws Exception {
-        return DesignerPlugin.getImage("components/non_visual_beans_container.gif");
-      }
-    };
-  }
+			@Override
+			public Image getIcon() throws Exception {
+				return DesignerPlugin.getImage("components/non_visual_beans_container.gif");
+			}
+		};
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Delete
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean canDelete() {
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Delete
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean canDelete() {
+		return false;
+	}
 
-  @Override
-  public void delete() throws Exception {
-  }
+	@Override
+	public void delete() throws Exception {
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/nonvisual/NonVisualBeanInfo.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/nonvisual/NonVisualBeanInfo.java
index 9869f3151..ffa26f8b7 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/nonvisual/NonVisualBeanInfo.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/nonvisual/NonVisualBeanInfo.java
@@ -21,79 +21,79 @@
  * @coverage core.model.nonvisual
  */
 public abstract class NonVisualBeanInfo {
-  private static final String KEY_NON_VISUAL_BEAN = "NON_VISUAL_BEAN";
-  //
-  protected Point m_location = null;
-  protected JavaInfo m_javaInfo;
+	private static final String KEY_NON_VISUAL_BEAN = "NON_VISUAL_BEAN";
+	//
+	protected Point m_location = null;
+	protected JavaInfo m_javaInfo;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Location
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link Point} current bean visual location.
-   */
-  public final Point getLocation() {
-    return m_location;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Location
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link Point} current bean visual location.
+	 */
+	public final Point getLocation() {
+		return m_location;
+	}
 
-  /**
-   * Changes bean visual location.
-   *
-   * @param moveDelta
-   *          is move delta for new location.
-   */
-  public abstract void moveLocation(Point moveDelta) throws Exception;
+	/**
+	 * Changes bean visual location.
+	 *
+	 * @param moveDelta
+	 *          is move delta for new location.
+	 */
+	public abstract void moveLocation(Point moveDelta) throws Exception;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Remove
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Removes information that wrapped {@link JavaInfo} is NVO. For example, removes JavaDoc comment.
-   */
-  public void remove() throws Exception {
-    m_javaInfo.putArbitraryValue(KEY_NON_VISUAL_BEAN, null);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Remove
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Removes information that wrapped {@link JavaInfo} is NVO. For example, removes JavaDoc comment.
+	 */
+	public void remove() throws Exception {
+		m_javaInfo.putArbitraryValue(KEY_NON_VISUAL_BEAN, null);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // JavaInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return association <i>non-visual bean</i> {@link JavaInfo}.
-   */
-  public final JavaInfo getJavaInfo() {
-    return m_javaInfo;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// JavaInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return association <i>non-visual bean</i> {@link JavaInfo}.
+	 */
+	public final JavaInfo getJavaInfo() {
+		return m_javaInfo;
+	}
 
-  /**
-   * Sets association <i>non-visual bean</i> {@link JavaInfo}.
-   */
-  public final void setJavaInfo(JavaInfo javaInfo) {
-    m_javaInfo = javaInfo;
-    m_javaInfo.putArbitraryValue(KEY_NON_VISUAL_BEAN, this);
-  }
+	/**
+	 * Sets association <i>non-visual bean</i> {@link JavaInfo}.
+	 */
+	public final void setJavaInfo(JavaInfo javaInfo) {
+		m_javaInfo = javaInfo;
+		m_javaInfo.putArbitraryValue(KEY_NON_VISUAL_BEAN, this);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if given {@link JavaInfo} in non-visual bean.
-   */
-  public static boolean isNVO(JavaInfo javaInfo) {
-    return getNonVisualInfo(javaInfo) != null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if given {@link JavaInfo} in non-visual bean.
+	 */
+	public static boolean isNVO(JavaInfo javaInfo) {
+		return getNonVisualInfo(javaInfo) != null;
+	}
 
-  /**
-   * @return {@link NonVisualBeanInfo} for given <i>non-visual bean</i> or <code>null</code>.
-   */
-  public static NonVisualBeanInfo getNonVisualInfo(JavaInfo javaInfo) {
-    return (NonVisualBeanInfo) javaInfo.getArbitraryValue(KEY_NON_VISUAL_BEAN);
-  }
+	/**
+	 * @return {@link NonVisualBeanInfo} for given <i>non-visual bean</i> or <code>null</code>.
+	 */
+	public static NonVisualBeanInfo getNonVisualInfo(JavaInfo javaInfo) {
+		return (NonVisualBeanInfo) javaInfo.getArbitraryValue(KEY_NON_VISUAL_BEAN);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/nonvisual/NonVisualBeanRootProcessor.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/nonvisual/NonVisualBeanRootProcessor.java
index 05d6212ec..e8d918bbc 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/nonvisual/NonVisualBeanRootProcessor.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/nonvisual/NonVisualBeanRootProcessor.java
@@ -26,40 +26,40 @@
  * @coverage core.model.nonvisual
  */
 public final class NonVisualBeanRootProcessor implements IRootProcessor {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final IRootProcessor INSTANCE = new NonVisualBeanRootProcessor();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final IRootProcessor INSTANCE = new NonVisualBeanRootProcessor();
 
-  private NonVisualBeanRootProcessor() {
-  }
+	private NonVisualBeanRootProcessor() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IRootProcessor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void process(final JavaInfo root, List<JavaInfo> components) throws Exception {
-    // check initial root state
-    Assert.isNull(NonVisualBeanContainerInfo.find(root));
-    // prepare all non-visual beans
-    List<JavaInfo> nonVisualBeans = Lists.newArrayList();
-    for (JavaInfo component : components) {
-      if (component.getParent() == null && NonVisualBeanInfo.getNonVisualInfo(component) != null) {
-        nonVisualBeans.add(component);
-      }
-    }
-    // check create container
-    if (!nonVisualBeans.isEmpty()) {
-      NonVisualBeanContainerInfo container = new NonVisualBeanContainerInfo();
-      root.addChild(container);
-      for (JavaInfo component : nonVisualBeans) {
-        component.setAssociation(new NonVisualAssociation());
-        container.addChild(component);
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IRootProcessor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void process(final JavaInfo root, List<JavaInfo> components) throws Exception {
+		// check initial root state
+		Assert.isNull(NonVisualBeanContainerInfo.find(root));
+		// prepare all non-visual beans
+		List<JavaInfo> nonVisualBeans = Lists.newArrayList();
+		for (JavaInfo component : components) {
+			if (component.getParent() == null && NonVisualBeanInfo.getNonVisualInfo(component) != null) {
+				nonVisualBeans.add(component);
+			}
+		}
+		// check create container
+		if (!nonVisualBeans.isEmpty()) {
+			NonVisualBeanContainerInfo container = new NonVisualBeanContainerInfo();
+			root.addChild(container);
+			for (JavaInfo component : nonVisualBeans) {
+				component.setAssociation(new NonVisualAssociation());
+				container.addChild(component);
+			}
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/order/ComponentOrder.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/order/ComponentOrder.java
index 42fdf44c0..6fb66eea2 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/order/ComponentOrder.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/order/ComponentOrder.java
@@ -19,52 +19,52 @@
  * @coverage core.model.description
  */
 public abstract class ComponentOrder {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parsing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link ComponentOrder} parsed from given string specification.
-   */
-  public static ComponentOrder parse(String specification) {
-    if (specification.equals("default")) {
-      return ComponentOrderDefault.INSTANCE;
-    } else if (specification.equals("last")) {
-      return ComponentOrderLast.INSTANCE;
-    } else if (specification.equals("first")) {
-      return ComponentOrderFirst.INSTANCE;
-    } else if (specification.startsWith("beforeSibling ")) {
-      String nextComponentClass = specification.substring("beforeSibling ".length());
-      return new ComponentOrderBeforeSibling(nextComponentClass);
-    } else {
-      throw new IllegalArgumentException("Unsupported order specification: " + specification);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parsing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link ComponentOrder} parsed from given string specification.
+	 */
+	public static ComponentOrder parse(String specification) {
+		if (specification.equals("default")) {
+			return ComponentOrderDefault.INSTANCE;
+		} else if (specification.equals("last")) {
+			return ComponentOrderLast.INSTANCE;
+		} else if (specification.equals("first")) {
+			return ComponentOrderFirst.INSTANCE;
+		} else if (specification.startsWith("beforeSibling ")) {
+			String nextComponentClass = specification.substring("beforeSibling ".length());
+			return new ComponentOrderBeforeSibling(nextComponentClass);
+		} else {
+			throw new IllegalArgumentException("Unsupported order specification: " + specification);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * This method is used when requested to add component with this {@link ComponentOrder} as "last".
-   * Usually this means - after all existing {@link JavaInfo} children. However sometimes we want to
-   * group children by class and "last" means "after last child of same class".
-   *
-   * @return the {@link JavaInfo} before which component should be added, may be <code>null</code>,
-   *         so component will be added as last child of parent.
-   */
-  public JavaInfo getNextComponent_whenLast(JavaInfo component, JavaInfo container)
-      throws Exception {
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * This method is used when requested to add component with this {@link ComponentOrder} as "last".
+	 * Usually this means - after all existing {@link JavaInfo} children. However sometimes we want to
+	 * group children by class and "last" means "after last child of same class".
+	 *
+	 * @return the {@link JavaInfo} before which component should be added, may be <code>null</code>,
+	 *         so component will be added as last child of parent.
+	 */
+	public JavaInfo getNextComponent_whenLast(JavaInfo component, JavaInfo container)
+			throws Exception {
+		return null;
+	}
 
-  /**
-   * @return <code>true</code> if "otherComponent" can be added after component with this
-   *         {@link ComponentOrder}.
-   */
-  public boolean canBeBefore(JavaInfo otherComponent) {
-    return true;
-  }
+	/**
+	 * @return <code>true</code> if "otherComponent" can be added after component with this
+	 *         {@link ComponentOrder}.
+	 */
+	public boolean canBeBefore(JavaInfo otherComponent) {
+		return true;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/order/ComponentOrderBeforeSibling.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/order/ComponentOrderBeforeSibling.java
index b9c348608..36fd0c97b 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/order/ComponentOrderBeforeSibling.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/order/ComponentOrderBeforeSibling.java
@@ -20,41 +20,41 @@
  * @coverage core.model.description
  */
 public final class ComponentOrderBeforeSibling extends ComponentOrder {
-  private final String m_nextComponentClass;
+	private final String m_nextComponentClass;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ComponentOrderBeforeSibling(String nextComponentClass) {
-    m_nextComponentClass = nextComponentClass;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ComponentOrderBeforeSibling(String nextComponentClass) {
+		m_nextComponentClass = nextComponentClass;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ComponentOrder
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public JavaInfo getNextComponent_whenLast(JavaInfo component, JavaInfo container)
-      throws Exception {
-    for (JavaInfo sibling : container.getChildrenJava()) {
-      if (isNextSibling(sibling)) {
-        return sibling;
-      }
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ComponentOrder
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public JavaInfo getNextComponent_whenLast(JavaInfo component, JavaInfo container)
+			throws Exception {
+		for (JavaInfo sibling : container.getChildrenJava()) {
+			if (isNextSibling(sibling)) {
+				return sibling;
+			}
+		}
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Implementation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private boolean isNextSibling(JavaInfo sibling) {
-    return ReflectionUtils.isSuccessorOf(
-        sibling.getDescription().getComponentClass(),
-        m_nextComponentClass);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Implementation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private boolean isNextSibling(JavaInfo sibling) {
+		return ReflectionUtils.isSuccessorOf(
+				sibling.getDescription().getComponentClass(),
+				m_nextComponentClass);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/order/ComponentOrderDefault.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/order/ComponentOrderDefault.java
index 9687db93d..f08a0d133 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/order/ComponentOrderDefault.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/order/ComponentOrderDefault.java
@@ -18,13 +18,13 @@
  * @coverage core.model.description
  */
 public final class ComponentOrderDefault extends ComponentOrder {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final ComponentOrder INSTANCE = new ComponentOrderDefault();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final ComponentOrder INSTANCE = new ComponentOrderDefault();
 
-  private ComponentOrderDefault() {
-  }
+	private ComponentOrderDefault() {
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/order/ComponentOrderFirst.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/order/ComponentOrderFirst.java
index 185aaea17..e4a632549 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/order/ComponentOrderFirst.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/order/ComponentOrderFirst.java
@@ -20,30 +20,30 @@
  * @coverage core.model.description
  */
 public final class ComponentOrderFirst extends ComponentOrder {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final ComponentOrder INSTANCE = new ComponentOrderFirst();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final ComponentOrder INSTANCE = new ComponentOrderFirst();
 
-  private ComponentOrderFirst() {
-  }
+	private ComponentOrderFirst() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ComponentOrder
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public JavaInfo getNextComponent_whenLast(JavaInfo component, JavaInfo container)
-      throws Exception {
-    for (JavaInfo child : container.getChildrenJava()) {
-      boolean isImplicit = child.getCreationSupport() instanceof IImplicitCreationSupport;
-      if (!isImplicit) {
-        return child;
-      }
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ComponentOrder
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public JavaInfo getNextComponent_whenLast(JavaInfo component, JavaInfo container)
+			throws Exception {
+		for (JavaInfo child : container.getChildrenJava()) {
+			boolean isImplicit = child.getCreationSupport() instanceof IImplicitCreationSupport;
+			if (!isImplicit) {
+				return child;
+			}
+		}
+		return null;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/order/ComponentOrderLast.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/order/ComponentOrderLast.java
index f20582497..835a36efc 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/order/ComponentOrderLast.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/order/ComponentOrderLast.java
@@ -19,23 +19,23 @@
  * @coverage core.model.description
  */
 public final class ComponentOrderLast extends ComponentOrder {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final ComponentOrder INSTANCE = new ComponentOrderLast();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final ComponentOrder INSTANCE = new ComponentOrderLast();
 
-  private ComponentOrderLast() {
-  }
+	private ComponentOrderLast() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ComponentOrder
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean canBeBefore(JavaInfo otherComponent) {
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ComponentOrder
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean canBeBefore(JavaInfo otherComponent) {
+		return false;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/order/MethodOrder.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/order/MethodOrder.java
index 778002fd0..778607df4 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/order/MethodOrder.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/order/MethodOrder.java
@@ -39,131 +39,131 @@
  * @coverage core.model.description
  */
 public abstract class MethodOrder {
-  /**
-   * {@link MethodOrder} for default order, i.e. when new invocation should be added directly after
-   * component creation.
-   */
-  public static final MethodOrder DEFAULT = new MethodOrderDefault();
+	/**
+	 * {@link MethodOrder} for default order, i.e. when new invocation should be added directly after
+	 * component creation.
+	 */
+	public static final MethodOrder DEFAULT = new MethodOrderDefault();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parsing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link MethodOrder} parsed from given string specification.
-   */
-  public static MethodOrder parse(String specification) {
-    if (specification.startsWith("first")) {
-      return new MethodOrderFirst();
-    } else if (specification.startsWith("afterCreation")) {
-      return new MethodOrderAfterCreation();
-    } else if (specification.startsWith("beforeAssociation")) {
-      return new MethodOrderBeforeAssociation();
-    } else if (specification.startsWith("afterAssociation")) {
-      return new MethodOrderAfterAssociation();
-    } else if (specification.startsWith("after ")) {
-      String targetSignature = specification.substring("after ".length());
-      return new MethodOrderAfter(targetSignature);
-    } else if (specification.startsWith("afterChildren ")) {
-      String targetChild = specification.substring("afterChildren ".length());
-      return new MethodOrderAfterChildren(targetChild);
-    } else if (specification.startsWith("afterParentChildren ")) {
-      String targetChild = specification.substring("afterParentChildren ".length());
-      return new MethodOrderAfterParentChildren(targetChild);
-    } else if (specification.equals("last")) {
-      return new MethodOrderLast();
-    } else {
-      throw new IllegalArgumentException("Unsupported order specification: " + specification);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parsing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link MethodOrder} parsed from given string specification.
+	 */
+	public static MethodOrder parse(String specification) {
+		if (specification.startsWith("first")) {
+			return new MethodOrderFirst();
+		} else if (specification.startsWith("afterCreation")) {
+			return new MethodOrderAfterCreation();
+		} else if (specification.startsWith("beforeAssociation")) {
+			return new MethodOrderBeforeAssociation();
+		} else if (specification.startsWith("afterAssociation")) {
+			return new MethodOrderAfterAssociation();
+		} else if (specification.startsWith("after ")) {
+			String targetSignature = specification.substring("after ".length());
+			return new MethodOrderAfter(targetSignature);
+		} else if (specification.startsWith("afterChildren ")) {
+			String targetChild = specification.substring("afterChildren ".length());
+			return new MethodOrderAfterChildren(targetChild);
+		} else if (specification.startsWith("afterParentChildren ")) {
+			String targetChild = specification.substring("afterParentChildren ".length());
+			return new MethodOrderAfterParentChildren(targetChild);
+		} else if (specification.equals("last")) {
+			return new MethodOrderLast();
+		} else {
+			throw new IllegalArgumentException("Unsupported order specification: " + specification);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @param javaInfo
-   *          the {@link JavaInfo} that has invocation with such {@link MethodOrder}.
-   *
-   * @return <code>true</code> {@link MethodInvocation} of method with such {@link MethodOrder} can
-   *         be used as reference for adding new {@link Statement} or {@link JavaInfo} child. This
-   *         means also that such {@link MethodInvocation} should be added as last one, after all
-   *         existing invocations/children. Also new children also should be added before this
-   *         method.
-   */
-  public abstract boolean canReference(JavaInfo javaInfo);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @param javaInfo
+	 *          the {@link JavaInfo} that has invocation with such {@link MethodOrder}.
+	 *
+	 * @return <code>true</code> {@link MethodInvocation} of method with such {@link MethodOrder} can
+	 *         be used as reference for adding new {@link Statement} or {@link JavaInfo} child. This
+	 *         means also that such {@link MethodInvocation} should be added as last one, after all
+	 *         existing invocations/children. Also new children also should be added before this
+	 *         method.
+	 */
+	public abstract boolean canReference(JavaInfo javaInfo);
 
-  /**
-   * @return the {@link StatementTarget} to add new {@link MethodInvocation}, using
-   *         {@link MethodOrder}.
-   */
-  public final StatementTarget getTarget(JavaInfo javaInfo, String newSignature) throws Exception {
-    // check for inversion
-    for (Pair<MethodInvocation, MethodOrder> pair : getInvocationOrders(javaInfo)) {
-      MethodInvocation existingInvocation = pair.getLeft();
-      MethodOrder existingOrder = pair.getRight();
-      if (existingOrder instanceof MethodOrderAfter) {
-        MethodOrderAfter afterOrder = (MethodOrderAfter) existingOrder;
-        if (afterOrder.isTarget(newSignature)) {
-          Statement statement = AstNodeUtils.getEnclosingStatement(existingInvocation);
-          return new StatementTarget(statement, true);
-        }
-      }
-    }
-    // check for "this" specific target
-    if (javaInfo.getVariableSupport() instanceof ThisVariableSupport) {
-      MethodDescription newDescription = javaInfo.getDescription().getMethod(newSignature);
-      if (newDescription != null) {
-        String targetMethodSignature = newDescription.getTag("thisTargetMethod");
-        if (targetMethodSignature != null) {
-          TypeDeclaration typeDeclaration = JavaInfoUtils.getTypeDeclaration(javaInfo);
-          MethodDeclaration targetMethod =
-              AstNodeUtils.getMethodBySignature(typeDeclaration, targetMethodSignature);
-          if (targetMethod != null) {
-            Block targetBlock = targetMethod.getBody();
-            // if first Statement if "super()" invocation, add after it
-            List<Statement> statements = DomGenerics.statements(targetBlock);
-            if (!statements.isEmpty() && statements.get(0) instanceof ExpressionStatement) {
-              ExpressionStatement firstStatement = (ExpressionStatement) statements.get(0);
-              if (firstStatement.getExpression() instanceof SuperMethodInvocation) {
-                return new StatementTarget(firstStatement, false);
-              }
-            }
-            // add as first Statement of target method
-            return new StatementTarget(targetBlock, true);
-          }
-        }
-      }
-    }
-    // use MethodOrder specific target
-    return getSpecificTarget(javaInfo, newSignature);
-  }
+	/**
+	 * @return the {@link StatementTarget} to add new {@link MethodInvocation}, using
+	 *         {@link MethodOrder}.
+	 */
+	public final StatementTarget getTarget(JavaInfo javaInfo, String newSignature) throws Exception {
+		// check for inversion
+		for (Pair<MethodInvocation, MethodOrder> pair : getInvocationOrders(javaInfo)) {
+			MethodInvocation existingInvocation = pair.getLeft();
+			MethodOrder existingOrder = pair.getRight();
+			if (existingOrder instanceof MethodOrderAfter) {
+				MethodOrderAfter afterOrder = (MethodOrderAfter) existingOrder;
+				if (afterOrder.isTarget(newSignature)) {
+					Statement statement = AstNodeUtils.getEnclosingStatement(existingInvocation);
+					return new StatementTarget(statement, true);
+				}
+			}
+		}
+		// check for "this" specific target
+		if (javaInfo.getVariableSupport() instanceof ThisVariableSupport) {
+			MethodDescription newDescription = javaInfo.getDescription().getMethod(newSignature);
+			if (newDescription != null) {
+				String targetMethodSignature = newDescription.getTag("thisTargetMethod");
+				if (targetMethodSignature != null) {
+					TypeDeclaration typeDeclaration = JavaInfoUtils.getTypeDeclaration(javaInfo);
+					MethodDeclaration targetMethod =
+							AstNodeUtils.getMethodBySignature(typeDeclaration, targetMethodSignature);
+					if (targetMethod != null) {
+						Block targetBlock = targetMethod.getBody();
+						// if first Statement if "super()" invocation, add after it
+						List<Statement> statements = DomGenerics.statements(targetBlock);
+						if (!statements.isEmpty() && statements.get(0) instanceof ExpressionStatement) {
+							ExpressionStatement firstStatement = (ExpressionStatement) statements.get(0);
+							if (firstStatement.getExpression() instanceof SuperMethodInvocation) {
+								return new StatementTarget(firstStatement, false);
+							}
+						}
+						// add as first Statement of target method
+						return new StatementTarget(targetBlock, true);
+					}
+				}
+			}
+		}
+		// use MethodOrder specific target
+		return getSpecificTarget(javaInfo, newSignature);
+	}
 
-  /**
-   * @return the information about existing {@link MethodInvocation}s.
-   */
-  protected static List<Pair<MethodInvocation, MethodOrder>> getInvocationOrders(JavaInfo javaInfo) {
-    List<Pair<MethodInvocation, MethodOrder>> invocationOrders = Lists.newArrayList();
-    List<MethodInvocation> invocations = javaInfo.getMethodInvocations();
-    for (MethodInvocation invocation : invocations) {
-      String signature = AstNodeUtils.getMethodSignature(invocation);
-      MethodDescription description = javaInfo.getDescription().getMethod(signature);
-      if (description != null) {
-        MethodOrder order = description.getOrder();
-        invocationOrders.add(Pair.create(invocation, order));
-      }
-    }
-    return invocationOrders;
-  }
+	/**
+	 * @return the information about existing {@link MethodInvocation}s.
+	 */
+	protected static List<Pair<MethodInvocation, MethodOrder>> getInvocationOrders(JavaInfo javaInfo) {
+		List<Pair<MethodInvocation, MethodOrder>> invocationOrders = Lists.newArrayList();
+		List<MethodInvocation> invocations = javaInfo.getMethodInvocations();
+		for (MethodInvocation invocation : invocations) {
+			String signature = AstNodeUtils.getMethodSignature(invocation);
+			MethodDescription description = javaInfo.getDescription().getMethod(signature);
+			if (description != null) {
+				MethodOrder order = description.getOrder();
+				invocationOrders.add(Pair.create(invocation, order));
+			}
+		}
+		return invocationOrders;
+	}
 
-  /**
-   * @return the {@link MethodOrder} specific target.
-   */
-  protected StatementTarget getSpecificTarget(JavaInfo javaInfo, String newSignature)
-      throws Exception {
-    // redirect to default MethodOrder of JavaInfo
-    return javaInfo.getDescription().getDefaultMethodOrder().getTarget(javaInfo, newSignature);
-  }
+	/**
+	 * @return the {@link MethodOrder} specific target.
+	 */
+	protected StatementTarget getSpecificTarget(JavaInfo javaInfo, String newSignature)
+			throws Exception {
+		// redirect to default MethodOrder of JavaInfo
+		return javaInfo.getDescription().getDefaultMethodOrder().getTarget(javaInfo, newSignature);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/order/MethodOrderAfter.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/order/MethodOrderAfter.java
index e57b7ae4b..c7ea55626 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/order/MethodOrderAfter.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/order/MethodOrderAfter.java
@@ -31,60 +31,60 @@
  * @coverage core.model.description
  */
 public final class MethodOrderAfter extends MethodOrder {
-  private final String m_targetSignature;
+	private final String m_targetSignature;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public MethodOrderAfter(String targetSignature) {
-    m_targetSignature = targetSignature;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public MethodOrderAfter(String targetSignature) {
+		m_targetSignature = targetSignature;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // MethodOrder
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean canReference(JavaInfo javaInfo) {
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// MethodOrder
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean canReference(JavaInfo javaInfo) {
+		return true;
+	}
 
-  @Override
-  protected StatementTarget getSpecificTarget(JavaInfo javaInfo, String newSignature)
-      throws Exception {
-    List<MethodInvocation> targetInvocations = javaInfo.getMethodInvocations(m_targetSignature);
-    if (!targetInvocations.isEmpty()) {
-      // "after" means 'after all such invocations', so sort to find last one
-      {
-        AstEditor editor = javaInfo.getEditor();
-        ExecutionFlowDescription flowDescription = EditorState.get(editor).getFlowDescription();
-        JavaInfoUtils.sortNodesByFlow(flowDescription, false, targetInvocations);
-      }
-      // use last invocation as target
-      MethodInvocation targetInvocation = targetInvocations.get(targetInvocations.size() - 1);
-      Statement targetStatement = AstNodeUtils.getEnclosingStatement(targetInvocation);
-      return new StatementTarget(targetStatement, false);
-    }
-    // no "target" invocation, but may be "target" has its own "order"
-    {
-      MethodDescription targetMethod = javaInfo.getDescription().getMethod(m_targetSignature);
-      MethodOrder targetOrder = targetMethod.getOrder();
-      return targetOrder.getTarget(javaInfo, newSignature);
-    }
-  }
+	@Override
+	protected StatementTarget getSpecificTarget(JavaInfo javaInfo, String newSignature)
+			throws Exception {
+		List<MethodInvocation> targetInvocations = javaInfo.getMethodInvocations(m_targetSignature);
+		if (!targetInvocations.isEmpty()) {
+			// "after" means 'after all such invocations', so sort to find last one
+			{
+				AstEditor editor = javaInfo.getEditor();
+				ExecutionFlowDescription flowDescription = EditorState.get(editor).getFlowDescription();
+				JavaInfoUtils.sortNodesByFlow(flowDescription, false, targetInvocations);
+			}
+			// use last invocation as target
+			MethodInvocation targetInvocation = targetInvocations.get(targetInvocations.size() - 1);
+			Statement targetStatement = AstNodeUtils.getEnclosingStatement(targetInvocation);
+			return new StatementTarget(targetStatement, false);
+		}
+		// no "target" invocation, but may be "target" has its own "order"
+		{
+			MethodDescription targetMethod = javaInfo.getDescription().getMethod(m_targetSignature);
+			MethodOrder targetOrder = targetMethod.getOrder();
+			return targetOrder.getTarget(javaInfo, newSignature);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if given signature is target one.
-   */
-  boolean isTarget(String newSignature) {
-    return m_targetSignature.equals(newSignature);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if given signature is target one.
+	 */
+	boolean isTarget(String newSignature) {
+		return m_targetSignature.equals(newSignature);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/order/MethodOrderAfterChildren.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/order/MethodOrderAfterChildren.java
index fd85b003b..03e06881f 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/order/MethodOrderAfterChildren.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/order/MethodOrderAfterChildren.java
@@ -26,25 +26,25 @@
  * @coverage core.model.description
  */
 public class MethodOrderAfterChildren extends MethodOrderChildren {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public MethodOrderAfterChildren(String childrenTypeNames) {
-    super(childrenTypeNames);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public MethodOrderAfterChildren(String childrenTypeNames) {
+		super(childrenTypeNames);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // MethodOrder
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected StatementTarget getSpecificTarget(JavaInfo javaInfo, String newSignature)
-      throws Exception {
-    JavaInfo nextChild =
-        GenericsUtils.getNextOrNull(javaInfo.getChildrenJava(), getLastChild(javaInfo));
-    return JavaInfoUtils.getTarget(javaInfo, nextChild);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// MethodOrder
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected StatementTarget getSpecificTarget(JavaInfo javaInfo, String newSignature)
+			throws Exception {
+		JavaInfo nextChild =
+				GenericsUtils.getNextOrNull(javaInfo.getChildrenJava(), getLastChild(javaInfo));
+		return JavaInfoUtils.getTarget(javaInfo, nextChild);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/order/MethodOrderAfterCreation.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/order/MethodOrderAfterCreation.java
index 74864d822..9d384cdb5 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/order/MethodOrderAfterCreation.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/order/MethodOrderAfterCreation.java
@@ -26,39 +26,39 @@
  * @coverage core.model.description
  */
 public final class MethodOrderAfterCreation extends MethodOrder {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // MethodOrder
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean canReference(JavaInfo javaInfo) {
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// MethodOrder
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean canReference(JavaInfo javaInfo) {
+		return true;
+	}
 
-  @Override
-  protected StatementTarget getSpecificTarget(JavaInfo javaInfo, String newSignature)
-      throws Exception {
-    // check for "first"
-    {
-      Statement lastFirstStatement = getLastFirstStatement(javaInfo);
-      if (lastFirstStatement != null) {
-        return new StatementTarget(lastFirstStatement, false);
-      }
-    }
-    // OK, use specific
-    return javaInfo.getVariableSupport().getStatementTarget();
-  }
+	@Override
+	protected StatementTarget getSpecificTarget(JavaInfo javaInfo, String newSignature)
+			throws Exception {
+		// check for "first"
+		{
+			Statement lastFirstStatement = getLastFirstStatement(javaInfo);
+			if (lastFirstStatement != null) {
+				return new StatementTarget(lastFirstStatement, false);
+			}
+		}
+		// OK, use specific
+		return javaInfo.getVariableSupport().getStatementTarget();
+	}
 
-  private static Statement getLastFirstStatement(JavaInfo javaInfo) {
-    Statement lastFirstStatement = null;
-    for (Pair<MethodInvocation, MethodOrder> pair : getInvocationOrders(javaInfo)) {
-      MethodInvocation existingInvocation = pair.getLeft();
-      MethodOrder existingOrder = pair.getRight();
-      if (existingOrder instanceof MethodOrderFirst) {
-        lastFirstStatement = AstNodeUtils.getEnclosingStatement(existingInvocation);
-      }
-    }
-    return lastFirstStatement;
-  }
+	private static Statement getLastFirstStatement(JavaInfo javaInfo) {
+		Statement lastFirstStatement = null;
+		for (Pair<MethodInvocation, MethodOrder> pair : getInvocationOrders(javaInfo)) {
+			MethodInvocation existingInvocation = pair.getLeft();
+			MethodOrder existingOrder = pair.getRight();
+			if (existingOrder instanceof MethodOrderFirst) {
+				lastFirstStatement = AstNodeUtils.getEnclosingStatement(existingInvocation);
+			}
+		}
+		return lastFirstStatement;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/order/MethodOrderAfterParentChildren.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/order/MethodOrderAfterParentChildren.java
index 526f2a2a1..cec54a616 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/order/MethodOrderAfterParentChildren.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/order/MethodOrderAfterParentChildren.java
@@ -26,33 +26,33 @@
  * @coverage core.model.description
  */
 public final class MethodOrderAfterParentChildren extends MethodOrderChildren {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public MethodOrderAfterParentChildren(String childrenTypeNames) {
-    super(childrenTypeNames);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public MethodOrderAfterParentChildren(String childrenTypeNames) {
+		super(childrenTypeNames);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // MethodOrder
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected StatementTarget getSpecificTarget(JavaInfo javaInfo, String newSignature)
-      throws Exception {
-    JavaInfoUtils.materializeVariable(javaInfo);
-    // calculate 'relative' target
-    JavaInfo parentJavaInfo = javaInfo.getParentJava();
-    JavaInfo parentNextChild =
-        GenericsUtils.getNextOrNull(parentJavaInfo.getChildrenJava(), getLastChild(parentJavaInfo));
-    StatementTarget target = JavaInfoUtils.getTarget(parentJavaInfo, parentNextChild);
-    // check target
-    if (!JavaInfoUtils.isCreatedAtTarget(javaInfo, new NodeTarget(target))) {
-      target = JavaInfoUtils.getTarget(javaInfo);
-    }
-    return target;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// MethodOrder
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected StatementTarget getSpecificTarget(JavaInfo javaInfo, String newSignature)
+			throws Exception {
+		JavaInfoUtils.materializeVariable(javaInfo);
+		// calculate 'relative' target
+		JavaInfo parentJavaInfo = javaInfo.getParentJava();
+		JavaInfo parentNextChild =
+				GenericsUtils.getNextOrNull(parentJavaInfo.getChildrenJava(), getLastChild(parentJavaInfo));
+		StatementTarget target = JavaInfoUtils.getTarget(parentJavaInfo, parentNextChild);
+		// check target
+		if (!JavaInfoUtils.isCreatedAtTarget(javaInfo, new NodeTarget(target))) {
+			target = JavaInfoUtils.getTarget(javaInfo);
+		}
+		return target;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/order/MethodOrderChildren.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/order/MethodOrderChildren.java
index 1d17567f7..2eb12170d 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/order/MethodOrderChildren.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/order/MethodOrderChildren.java
@@ -31,64 +31,64 @@
  * @coverage core.model.description
  */
 public abstract class MethodOrderChildren extends MethodOrder {
-  private final String[] m_childrenTypeNames;
+	private final String[] m_childrenTypeNames;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public MethodOrderChildren(String childrenTypeNames) {
-    m_childrenTypeNames =
-        "*".equals(childrenTypeNames) || StringUtils.isEmpty(childrenTypeNames)
-            ? null
-            : StringUtils.split(childrenTypeNames);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public MethodOrderChildren(String childrenTypeNames) {
+		m_childrenTypeNames =
+				"*".equals(childrenTypeNames) || StringUtils.isEmpty(childrenTypeNames)
+				? null
+						: StringUtils.split(childrenTypeNames);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // MethodOrder
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean canReference(JavaInfo javaInfo) {
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// MethodOrder
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean canReference(JavaInfo javaInfo) {
+		return true;
+	}
 
-  /**
-   * @return last typed (managed by this order) child {@link JavaInfo} of given parent.
-   */
-  protected JavaInfo getLastChild(JavaInfo javaInfo) throws Exception {
-    return GenericsUtils.getLastOrNull(getTargetChildren(javaInfo));
-  }
+	/**
+	 * @return last typed (managed by this order) child {@link JavaInfo} of given parent.
+	 */
+	protected JavaInfo getLastChild(JavaInfo javaInfo) throws Exception {
+		return GenericsUtils.getLastOrNull(getTargetChildren(javaInfo));
+	}
 
-  /**
-   * @return list typed (managed by this order) children {@link JavaInfo}'s of given parent.
-   */
-  protected List<JavaInfo> getTargetChildren(JavaInfo javaInfo) throws Exception {
-    List<JavaInfo> list = Lists.newArrayList();
-    for (JavaInfo child : javaInfo.getChildrenJava()) {
-      if (isTargetChild(child)) {
-        list.add(child);
-      }
-    }
-    return list;
-  }
+	/**
+	 * @return list typed (managed by this order) children {@link JavaInfo}'s of given parent.
+	 */
+	protected List<JavaInfo> getTargetChildren(JavaInfo javaInfo) throws Exception {
+		List<JavaInfo> list = Lists.newArrayList();
+		for (JavaInfo child : javaInfo.getChildrenJava()) {
+			if (isTargetChild(child)) {
+				list.add(child);
+			}
+		}
+		return list;
+	}
 
-  /**
-   * @return <code>true</code> if given {@link JavaInfo} is managed by this order.
-   */
-  public boolean isTargetChild(JavaInfo child) {
-    if (m_childrenTypeNames == null) {
-      // all children accepted
-      return true;
-    }
-    Class<?> componentClass = child.getDescription().getComponentClass();
-    for (String childTypeName : m_childrenTypeNames) {
-      if (ReflectionUtils.isSuccessorOf(componentClass, childTypeName)) {
-        return true;
-      }
-    }
-    return false;
-  }
+	/**
+	 * @return <code>true</code> if given {@link JavaInfo} is managed by this order.
+	 */
+	public boolean isTargetChild(JavaInfo child) {
+		if (m_childrenTypeNames == null) {
+			// all children accepted
+			return true;
+		}
+		Class<?> componentClass = child.getDescription().getComponentClass();
+		for (String childTypeName : m_childrenTypeNames) {
+			if (ReflectionUtils.isSuccessorOf(componentClass, childTypeName)) {
+				return true;
+			}
+		}
+		return false;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/order/MethodOrderDefault.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/order/MethodOrderDefault.java
index 5e3e37953..715e66dbf 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/order/MethodOrderDefault.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/order/MethodOrderDefault.java
@@ -22,19 +22,19 @@
  * @coverage core.model.description
  */
 public final class MethodOrderDefault extends MethodOrder {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // MethodOrder
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean canReference(JavaInfo javaInfo) {
-    return javaInfo.getDescription().getDefaultMethodOrder().canReference(javaInfo);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// MethodOrder
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean canReference(JavaInfo javaInfo) {
+		return javaInfo.getDescription().getDefaultMethodOrder().canReference(javaInfo);
+	}
 
-  @Override
-  protected StatementTarget getSpecificTarget(JavaInfo javaInfo, String newSignature)
-      throws Exception {
-    return javaInfo.getDescription().getDefaultMethodOrder().getTarget(javaInfo, newSignature);
-  }
+	@Override
+	protected StatementTarget getSpecificTarget(JavaInfo javaInfo, String newSignature)
+			throws Exception {
+		return javaInfo.getDescription().getDefaultMethodOrder().getTarget(javaInfo, newSignature);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/order/MethodOrderFirst.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/order/MethodOrderFirst.java
index 968e4769c..631854e0d 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/order/MethodOrderFirst.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/order/MethodOrderFirst.java
@@ -20,19 +20,19 @@
  * @coverage core.model.description
  */
 public final class MethodOrderFirst extends MethodOrder {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // MethodOrder
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean canReference(JavaInfo javaInfo) {
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// MethodOrder
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean canReference(JavaInfo javaInfo) {
+		return true;
+	}
 
-  @Override
-  protected StatementTarget getSpecificTarget(JavaInfo javaInfo, String newSignature)
-      throws Exception {
-    return javaInfo.getVariableSupport().getStatementTarget();
-  }
+	@Override
+	protected StatementTarget getSpecificTarget(JavaInfo javaInfo, String newSignature)
+			throws Exception {
+		return javaInfo.getVariableSupport().getStatementTarget();
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/order/MethodOrderLast.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/order/MethodOrderLast.java
index 387cb21a3..f557beffc 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/order/MethodOrderLast.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/order/MethodOrderLast.java
@@ -26,22 +26,22 @@
  * @coverage core.model.description
  */
 public final class MethodOrderLast extends MethodOrder {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // MethodOrder
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean canReference(JavaInfo javaInfo) {
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// MethodOrder
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean canReference(JavaInfo javaInfo) {
+		return false;
+	}
 
-  @Override
-  protected StatementTarget getSpecificTarget(JavaInfo javaInfo, String newSignature)
-      throws Exception {
-    if (javaInfo instanceof IWrapperInfo) {
-      javaInfo = javaInfo.getParentJava();
-    }
-    return JavaInfoUtils.getTarget(javaInfo);
-  }
+	@Override
+	protected StatementTarget getSpecificTarget(JavaInfo javaInfo, String newSignature)
+			throws Exception {
+		if (javaInfo instanceof IWrapperInfo) {
+			javaInfo = javaInfo.getParentJava();
+		}
+		return JavaInfoUtils.getTarget(javaInfo);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/order/MethodOrderRelativeAssociation.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/order/MethodOrderRelativeAssociation.java
index fc4880710..f411aaca6 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/order/MethodOrderRelativeAssociation.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/order/MethodOrderRelativeAssociation.java
@@ -26,41 +26,41 @@
  * @coverage core.model.description
  */
 public abstract class MethodOrderRelativeAssociation extends MethodOrder {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // MethodOrder
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean canReference(JavaInfo javaInfo) {
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// MethodOrder
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean canReference(JavaInfo javaInfo) {
+		return true;
+	}
 
-  @Override
-  protected StatementTarget getSpecificTarget(JavaInfo javaInfo, String newSignature)
-      throws Exception {
-    if (canUseAssociation(javaInfo)) {
-      JavaInfoUtils.materializeVariable(javaInfo);
-      Statement statement = javaInfo.getAssociation().getStatement();
-      boolean before = this instanceof MethodOrderBeforeAssociation;
-      return new StatementTarget(statement, before);
-    }
-    return javaInfo.getVariableSupport().getStatementTarget();
-  }
+	@Override
+	protected StatementTarget getSpecificTarget(JavaInfo javaInfo, String newSignature)
+			throws Exception {
+		if (canUseAssociation(javaInfo)) {
+			JavaInfoUtils.materializeVariable(javaInfo);
+			Statement statement = javaInfo.getAssociation().getStatement();
+			boolean before = this instanceof MethodOrderBeforeAssociation;
+			return new StatementTarget(statement, before);
+		}
+		return javaInfo.getVariableSupport().getStatementTarget();
+	}
 
-  private static boolean canUseAssociation(JavaInfo javaInfo) {
-    if (javaInfo.getCreationSupport() instanceof IImplicitCreationSupport) {
-      return canUseAssociation(javaInfo.getParentJava());
-    }
-    if (javaInfo.getAssociation() == null) {
-      return false;
-    }
-    if (javaInfo.getAssociation().getStatement() == null) {
-      return false;
-    }
-    if (javaInfo.getVariableSupport() instanceof LazyVariableSupport) {
-      return false;
-    }
-    return true;
-  }
+	private static boolean canUseAssociation(JavaInfo javaInfo) {
+		if (javaInfo.getCreationSupport() instanceof IImplicitCreationSupport) {
+			return canUseAssociation(javaInfo.getParentJava());
+		}
+		if (javaInfo.getAssociation() == null) {
+			return false;
+		}
+		if (javaInfo.getAssociation().getStatement() == null) {
+			return false;
+		}
+		if (javaInfo.getVariableSupport() instanceof LazyVariableSupport) {
+			return false;
+		}
+		return true;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/presentation/DefaultJavaInfoPresentation.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/presentation/DefaultJavaInfoPresentation.java
index 3ac352cf2..ca5ea0798 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/presentation/DefaultJavaInfoPresentation.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/presentation/DefaultJavaInfoPresentation.java
@@ -22,40 +22,40 @@
  * @coverage core.model.presentation
  */
 public class DefaultJavaInfoPresentation extends DefaultObjectPresentation {
-  protected final JavaInfo m_javaInfo;
+	protected final JavaInfo m_javaInfo;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DefaultJavaInfoPresentation(JavaInfo javaInfo) {
-    super(javaInfo);
-    m_javaInfo = javaInfo;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DefaultJavaInfoPresentation(JavaInfo javaInfo) {
+		super(javaInfo);
+		m_javaInfo = javaInfo;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IObjectPresentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Image getIcon() throws Exception {
-    // for factory try to get "factory method" specific icon
-    if (m_javaInfo.getCreationSupport() instanceof AbstractExplicitFactoryCreationSupport) {
-      AbstractExplicitFactoryCreationSupport factoryCreationSupport =
-          (AbstractExplicitFactoryCreationSupport) m_javaInfo.getCreationSupport();
-      Image icon = factoryCreationSupport.getDescription().getIcon();
-      if (icon != null) {
-        return icon;
-      }
-    }
-    // by default use "component type" specific icon
-    return m_javaInfo.getDescription().getIcon();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IObjectPresentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Image getIcon() throws Exception {
+		// for factory try to get "factory method" specific icon
+		if (m_javaInfo.getCreationSupport() instanceof AbstractExplicitFactoryCreationSupport) {
+			AbstractExplicitFactoryCreationSupport factoryCreationSupport =
+					(AbstractExplicitFactoryCreationSupport) m_javaInfo.getCreationSupport();
+			Image icon = factoryCreationSupport.getDescription().getIcon();
+			if (icon != null) {
+				return icon;
+			}
+		}
+		// by default use "component type" specific icon
+		return m_javaInfo.getDescription().getIcon();
+	}
 
-  @Override
-  public String getText() throws Exception {
-    return m_javaInfo.getVariableSupport().getTitle();
-  }
+	@Override
+	public String getText() throws Exception {
+		return m_javaInfo.getVariableSupport().getTitle();
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/GenericProperty.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/GenericProperty.java
index f59193af2..6f9092776 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/GenericProperty.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/GenericProperty.java
@@ -25,48 +25,48 @@
  * @coverage core.model.property
  */
 public abstract class GenericProperty extends JavaProperty implements ITypedProperty {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public GenericProperty(JavaInfo javaInfo, String title, PropertyEditor propertyEditor) {
-    super(javaInfo, title, propertyEditor);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public GenericProperty(JavaInfo javaInfo, String title, PropertyEditor propertyEditor) {
+		super(javaInfo, title, propertyEditor);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Value
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the value from {@link Expression} AST property. This value is set during latest AST
-   *         evaluation, so it does not exist for nodes that are not evaluated - for example for new
-   *         {@link Expression} 's. So, most probably this value can be used only for displaying to
-   *         user.
-   */
-  @Override
-  public abstract Object getValue() throws Exception;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Value
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the value from {@link Expression} AST property. This value is set during latest AST
+	 *         evaluation, so it does not exist for nodes that are not evaluated - for example for new
+	 *         {@link Expression} 's. So, most probably this value can be used only for displaying to
+	 *         user.
+	 */
+	@Override
+	public abstract Object getValue() throws Exception;
 
-  /**
-   * @return the default value of this {@link GenericProperty}. This value is got from component
-   *         directly after its creation, or set externally in component description.
-   */
-  public abstract Object getDefaultValue() throws Exception;
+	/**
+	 * @return the default value of this {@link GenericProperty}. This value is got from component
+	 *         directly after its creation, or set externally in component description.
+	 */
+	public abstract Object getDefaultValue() throws Exception;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Expression
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link Expression} that was used for calculating value of this
-   *         {@link GenericProperty}.
-   */
-  public abstract Expression getExpression() throws Exception;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Expression
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link Expression} that was used for calculating value of this
+	 *         {@link GenericProperty}.
+	 */
+	public abstract Expression getExpression() throws Exception;
 
-  /**
-   * Changes value using Java source and (optional) value.
-   */
-  public abstract void setExpression(String source, Object value) throws Exception;
+	/**
+	 * Changes value using Java source and (optional) value.
+	 */
+	public abstract void setExpression(String source, Object value) throws Exception;
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/GenericPropertyComposite.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/GenericPropertyComposite.java
index 529667fb0..fbba71800 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/GenericPropertyComposite.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/GenericPropertyComposite.java
@@ -25,185 +25,185 @@
  * @coverage core.model.property
  */
 public final class GenericPropertyComposite extends GenericProperty {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Creation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static GenericPropertyComposite create(Property... properties) {
-    // prepare GenericProperty's array
-    GenericProperty[] genericProperties = new GenericProperty[properties.length];
-    for (int i = 0; i < properties.length; i++) {
-      Property property = properties[i];
-      genericProperties[i] = (GenericProperty) property;
-    }
-    // create composite
-    GenericPropertyComposite composite = new GenericPropertyComposite(genericProperties);
-    composite.setCategory(genericProperties[0].getCategory());
-    return composite;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance fields
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final GenericProperty[] m_properties;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public GenericPropertyComposite(GenericProperty[] properties) {
-    super(properties[0].getJavaInfo(), properties[0].getTitle(), properties[0].getEditor());
-    m_properties = properties;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public int hashCode() {
-    return m_properties.length;
-  }
-
-  @Override
-  public boolean equals(Object obj) {
-    if (obj == this) {
-      return true;
-    }
-    //
-    if (obj instanceof GenericPropertyComposite) {
-      GenericPropertyComposite property = (GenericPropertyComposite) obj;
-      return ArrayUtils.isEquals(m_properties, property.m_properties);
-    }
-    //
-    return false;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Property
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final Object NO_VALUE = new Object();
-
-  @Override
-  public boolean isModified() throws Exception {
-    for (GenericProperty property : m_properties) {
-      if (property.isModified()) {
-        return true;
-      }
-    }
-    // no modified properties
-    return false;
-  }
-
-  @Override
-  public Object getValue() throws Exception {
-    Object value = NO_VALUE;
-    for (GenericProperty property : m_properties) {
-      Object propertyValue = property.getValue();
-      if (value == NO_VALUE) {
-        value = propertyValue;
-      } else if (!ObjectUtils.equals(value, propertyValue)) {
-        return UNKNOWN_VALUE;
-      }
-    }
-    // return common value
-    return value;
-  }
-
-  @Override
-  public Object getDefaultValue() throws Exception {
-    Object value = NO_VALUE;
-    for (GenericProperty property : m_properties) {
-      Object propertyValue = property.getDefaultValue();
-      if (value == NO_VALUE) {
-        value = propertyValue;
-      } else if (!ObjectUtils.equals(value, propertyValue)) {
-        return UNKNOWN_VALUE;
-      }
-    }
-    // return common value
-    return value;
-  }
-
-  @Override
-  public void setValue(final Object value) throws Exception {
-    ExecutionUtils.run(m_javaInfo, new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        for (GenericProperty property : m_properties) {
-          property.setValue(value);
-        }
-      }
-    });
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GenericProperty
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Class<?> getType() {
-    Class<?> commonType = null;
-    for (GenericProperty property : m_properties) {
-      // prepare type
-      Class<?> type = property.getType();
-      if (type == null) {
-        return null;
-      }
-      // check that type is same
-      if (commonType == null) {
-        commonType = type;
-      } else if (type != commonType) {
-        return null;
-      }
-    }
-    // return type
-    return commonType;
-  }
-
-  /**
-   * @return {@link Expression} if all properties have {@link Expression}'s with same source.
-   */
-  @Override
-  public Expression getExpression() throws Exception {
-    Expression commonExpression = null;
-    String commonSource = null;
-    for (GenericProperty property : m_properties) {
-      // prepare expression
-      Expression expression = property.getExpression();
-      if (expression == null) {
-        return null;
-      }
-      // check source
-      String expresisonSource = m_javaInfo.getEditor().getSource(expression);
-      if (commonSource == null) {
-        commonExpression = expression;
-        commonSource = expresisonSource;
-      } else if (!commonSource.equals(expresisonSource)) {
-        return null;
-      }
-    }
-    // return expression with same source
-    return commonExpression;
-  }
-
-  @Override
-  public void setExpression(final String source, final Object value) throws Exception {
-    ExecutionUtils.run(m_javaInfo, new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        for (GenericProperty property : m_properties) {
-          property.setExpression(source, value);
-        }
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Creation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static GenericPropertyComposite create(Property... properties) {
+		// prepare GenericProperty's array
+		GenericProperty[] genericProperties = new GenericProperty[properties.length];
+		for (int i = 0; i < properties.length; i++) {
+			Property property = properties[i];
+			genericProperties[i] = (GenericProperty) property;
+		}
+		// create composite
+		GenericPropertyComposite composite = new GenericPropertyComposite(genericProperties);
+		composite.setCategory(genericProperties[0].getCategory());
+		return composite;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance fields
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final GenericProperty[] m_properties;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public GenericPropertyComposite(GenericProperty[] properties) {
+		super(properties[0].getJavaInfo(), properties[0].getTitle(), properties[0].getEditor());
+		m_properties = properties;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public int hashCode() {
+		return m_properties.length;
+	}
+
+	@Override
+	public boolean equals(Object obj) {
+		if (obj == this) {
+			return true;
+		}
+		//
+		if (obj instanceof GenericPropertyComposite) {
+			GenericPropertyComposite property = (GenericPropertyComposite) obj;
+			return ArrayUtils.isEquals(m_properties, property.m_properties);
+		}
+		//
+		return false;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Property
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final Object NO_VALUE = new Object();
+
+	@Override
+	public boolean isModified() throws Exception {
+		for (GenericProperty property : m_properties) {
+			if (property.isModified()) {
+				return true;
+			}
+		}
+		// no modified properties
+		return false;
+	}
+
+	@Override
+	public Object getValue() throws Exception {
+		Object value = NO_VALUE;
+		for (GenericProperty property : m_properties) {
+			Object propertyValue = property.getValue();
+			if (value == NO_VALUE) {
+				value = propertyValue;
+			} else if (!ObjectUtils.equals(value, propertyValue)) {
+				return UNKNOWN_VALUE;
+			}
+		}
+		// return common value
+		return value;
+	}
+
+	@Override
+	public Object getDefaultValue() throws Exception {
+		Object value = NO_VALUE;
+		for (GenericProperty property : m_properties) {
+			Object propertyValue = property.getDefaultValue();
+			if (value == NO_VALUE) {
+				value = propertyValue;
+			} else if (!ObjectUtils.equals(value, propertyValue)) {
+				return UNKNOWN_VALUE;
+			}
+		}
+		// return common value
+		return value;
+	}
+
+	@Override
+	public void setValue(final Object value) throws Exception {
+		ExecutionUtils.run(m_javaInfo, new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				for (GenericProperty property : m_properties) {
+					property.setValue(value);
+				}
+			}
+		});
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GenericProperty
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Class<?> getType() {
+		Class<?> commonType = null;
+		for (GenericProperty property : m_properties) {
+			// prepare type
+			Class<?> type = property.getType();
+			if (type == null) {
+				return null;
+			}
+			// check that type is same
+			if (commonType == null) {
+				commonType = type;
+			} else if (type != commonType) {
+				return null;
+			}
+		}
+		// return type
+		return commonType;
+	}
+
+	/**
+	 * @return {@link Expression} if all properties have {@link Expression}'s with same source.
+	 */
+	@Override
+	public Expression getExpression() throws Exception {
+		Expression commonExpression = null;
+		String commonSource = null;
+		for (GenericProperty property : m_properties) {
+			// prepare expression
+			Expression expression = property.getExpression();
+			if (expression == null) {
+				return null;
+			}
+			// check source
+			String expresisonSource = m_javaInfo.getEditor().getSource(expression);
+			if (commonSource == null) {
+				commonExpression = expression;
+				commonSource = expresisonSource;
+			} else if (!commonSource.equals(expresisonSource)) {
+				return null;
+			}
+		}
+		// return expression with same source
+		return commonExpression;
+	}
+
+	@Override
+	public void setExpression(final String source, final Object value) throws Exception {
+		ExecutionUtils.run(m_javaInfo, new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				for (GenericProperty property : m_properties) {
+					property.setExpression(source, value);
+				}
+			}
+		});
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/GenericPropertyImpl.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/GenericPropertyImpl.java
index da5151568..316eb6d9a 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/GenericPropertyImpl.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/GenericPropertyImpl.java
@@ -51,458 +51,458 @@
  * @coverage core.model.property
  */
 public final class GenericPropertyImpl extends GenericProperty {
-  private final GenericPropertyImpl m_this = this;
-  private final ExpressionAccessor[] m_accessors;
-  private final Object m_defaultValue;
-  private final ExpressionConverter m_converter;
-  private GenericPropertyDescription m_description;
-  private Class<?> m_type;
+	private final GenericPropertyImpl m_this = this;
+	private final ExpressionAccessor[] m_accessors;
+	private final Object m_defaultValue;
+	private final ExpressionConverter m_converter;
+	private GenericPropertyDescription m_description;
+	private Class<?> m_type;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Creates {@link GenericPropertyImpl} with all explicit elements.
-   */
-  public GenericPropertyImpl(JavaInfo javaInfo,
-      String title,
-      ExpressionAccessor[] accessors,
-      Object defaultValue,
-      ExpressionConverter converter,
-      PropertyEditor propertyEditor) {
-    super(javaInfo, title, propertyEditor);
-    m_accessors = accessors;
-    m_defaultValue = defaultValue;
-    m_converter = converter;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Creates {@link GenericPropertyImpl} with all explicit elements.
+	 */
+	public GenericPropertyImpl(JavaInfo javaInfo,
+			String title,
+			ExpressionAccessor[] accessors,
+			Object defaultValue,
+			ExpressionConverter converter,
+			PropertyEditor propertyEditor) {
+		super(javaInfo, title, propertyEditor);
+		m_accessors = accessors;
+		m_defaultValue = defaultValue;
+		m_converter = converter;
+	}
 
-  /**
-   * Creates identical copy of given {@link GenericPropertyImpl}.
-   */
-  public GenericPropertyImpl(GenericPropertyImpl property) {
-    this(property, property.getTitle());
-  }
+	/**
+	 * Creates identical copy of given {@link GenericPropertyImpl}.
+	 */
+	public GenericPropertyImpl(GenericPropertyImpl property) {
+		this(property, property.getTitle());
+	}
 
-  /**
-   * Creates copy of {@link GenericPropertyImpl}, with new title.
-   */
-  public GenericPropertyImpl(GenericPropertyImpl property, String title) {
-    this(property.m_javaInfo,
-        title,
-        property.m_accessors,
-        property.m_defaultValue,
-        property.m_converter,
-        property.getEditor());
-    setCategory(property.getCategory());
-    setDescription(property.getDescription());
-    setType(property.getType());
-  }
+	/**
+	 * Creates copy of {@link GenericPropertyImpl}, with new title.
+	 */
+	public GenericPropertyImpl(GenericPropertyImpl property, String title) {
+		this(property.m_javaInfo,
+				title,
+				property.m_accessors,
+				property.m_defaultValue,
+				property.m_converter,
+				property.getEditor());
+		setCategory(property.getCategory());
+		setDescription(property.getDescription());
+		setType(property.getType());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean isModified() throws Exception {
-    return getExpressionInfo() != null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean isModified() throws Exception {
+		return getExpressionInfo() != null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Type
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Class<?> getType() {
-    return m_type;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Type
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Class<?> getType() {
+		return m_type;
+	}
 
-  /**
-   * Sets the type of this property. Use this if it has no {@link GenericPropertyDescription}.
-   */
-  public void setType(Class<?> type) {
-    m_type = type;
-  }
+	/**
+	 * Sets the type of this property. Use this if it has no {@link GenericPropertyDescription}.
+	 */
+	public void setType(Class<?> type) {
+		m_type = type;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Description
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the optional {@link GenericPropertyDescription} for "standard bean property".
-   */
-  public GenericPropertyDescription getDescription() {
-    return m_description;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Description
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the optional {@link GenericPropertyDescription} for "standard bean property".
+	 */
+	public GenericPropertyDescription getDescription() {
+		return m_description;
+	}
 
-  /**
-   * Sets the optional {@link GenericPropertyDescription}.
-   */
-  public void setDescription(GenericPropertyDescription description) {
-    m_description = description;
-    if (m_description != null) {
-      m_type = m_description.getType();
-    }
-  }
+	/**
+	 * Sets the optional {@link GenericPropertyDescription}.
+	 */
+	public void setDescription(GenericPropertyDescription description) {
+		m_description = description;
+		if (m_description != null) {
+			m_type = m_description.getType();
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Value
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Object getValue() throws Exception {
-    // allow broadcast listeners to set value
-    {
-      Object[] valueArray = new Object[]{UNKNOWN_VALUE};
-      m_javaInfo.getBroadcast(GenericPropertyGetValue.class).invoke(this, valueArray);
-      if (valueArray[0] != UNKNOWN_VALUE) {
-        return valueArray[0];
-      }
-    }
-    // get value from Expression
-    Expression expression = getExpression();
-    if (expression != null) {
-      Object value = JavaInfoEvaluationHelper.getValue(expression);
-      // allow broadcast listeners to change value
-      {
-        Object[] valueArray = new Object[]{value};
-        m_javaInfo.getBroadcast(GenericPropertyGetValueEx.class).invoke(
-            this,
-            expression,
-            valueArray);
-        value = valueArray[0];
-      }
-      // final result
-      return value;
-    }
-    // return default value
-    return getDefaultValue();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Value
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Object getValue() throws Exception {
+		// allow broadcast listeners to set value
+		{
+			Object[] valueArray = new Object[]{UNKNOWN_VALUE};
+			m_javaInfo.getBroadcast(GenericPropertyGetValue.class).invoke(this, valueArray);
+			if (valueArray[0] != UNKNOWN_VALUE) {
+				return valueArray[0];
+			}
+		}
+		// get value from Expression
+		Expression expression = getExpression();
+		if (expression != null) {
+			Object value = JavaInfoEvaluationHelper.getValue(expression);
+			// allow broadcast listeners to change value
+			{
+				Object[] valueArray = new Object[]{value};
+				m_javaInfo.getBroadcast(GenericPropertyGetValueEx.class).invoke(
+						this,
+						expression,
+						valueArray);
+				value = valueArray[0];
+			}
+			// final result
+			return value;
+		}
+		// return default value
+		return getDefaultValue();
+	}
 
-  @Override
-  public Object getDefaultValue() throws Exception {
-    // if has forced default value from property, use it
-    if (m_defaultValue != UNKNOWN_VALUE) {
-      return m_defaultValue;
-    }
-    // check for default value from accessor
-    Object accessor_defaultValue = m_accessors[0].getDefaultValue(m_javaInfo);
-    if (accessor_defaultValue != UNKNOWN_VALUE) {
-      return accessor_defaultValue;
-    }
-    // no value
-    return UNKNOWN_VALUE;
-  }
+	@Override
+	public Object getDefaultValue() throws Exception {
+		// if has forced default value from property, use it
+		if (m_defaultValue != UNKNOWN_VALUE) {
+			return m_defaultValue;
+		}
+		// check for default value from accessor
+		Object accessor_defaultValue = m_accessors[0].getDefaultValue(m_javaInfo);
+		if (accessor_defaultValue != UNKNOWN_VALUE) {
+			return accessor_defaultValue;
+		}
+		// no value
+		return UNKNOWN_VALUE;
+	}
 
-  @Override
-  public void setValue(final Object value) throws Exception {
-    if (process_NLSSupport_specialFunctionality(value)) {
-      return;
-    }
-    // "normal" property
-    ExecutionUtils.run(m_javaInfo, new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        setValueEx(value);
-      }
-    });
-  }
+	@Override
+	public void setValue(final Object value) throws Exception {
+		if (process_NLSSupport_specialFunctionality(value)) {
+			return;
+		}
+		// "normal" property
+		ExecutionUtils.run(m_javaInfo, new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				setValueEx(value);
+			}
+		});
+	}
 
-  private boolean process_NLSSupport_specialFunctionality(final Object value) throws Exception {
-    if (value == UNKNOWN_VALUE) {
-      return false;
-    }
-    if (!NlsSupport.isStringProperty(this)) {
-      return false;
-    }
-    final NlsSupport support = NlsSupport.get(m_javaInfo);
-    // check if key name is used
-    if (value instanceof String) {
-      String stringValue = (String) value;
-      String keyPrefix =
-          m_javaInfo.getDescription().getToolkit().getPreferences().getString(
-              IPreferenceConstants.P_NLS_KEY_AS_VALUE_PREFIX);
-      if (!StringUtils.isEmpty(keyPrefix) && stringValue.startsWith(keyPrefix)) {
-        final String key = stringValue.substring(keyPrefix.length());
-        final AbstractSource source = support.getKeySource(key);
-        if (source != null) {
-          ExecutionUtils.run(m_javaInfo, new RunnableEx() {
-            @Override
-            public void run() throws Exception {
-              source.useKey(m_this, key);
-            }
-          });
-          return true;
-        }
-      }
-    }
-    // check for externalized String property
-    {
-      final Expression expression = getExpression();
-      if (expression != null) {
-        if (support.isExternalized(expression)) {
-          ExecutionUtils.run(m_javaInfo, new RunnableEx() {
-            @Override
-            public void run() throws Exception {
-              String string = value == UNKNOWN_VALUE ? null : (String) value;
-              support.setValue(expression, string);
-            }
-          });
-          return true;
-        }
-      }
-    }
-    // no NLS
-    return false;
-  }
+	private boolean process_NLSSupport_specialFunctionality(final Object value) throws Exception {
+		if (value == UNKNOWN_VALUE) {
+			return false;
+		}
+		if (!NlsSupport.isStringProperty(this)) {
+			return false;
+		}
+		final NlsSupport support = NlsSupport.get(m_javaInfo);
+		// check if key name is used
+		if (value instanceof String) {
+			String stringValue = (String) value;
+			String keyPrefix =
+					m_javaInfo.getDescription().getToolkit().getPreferences().getString(
+							IPreferenceConstants.P_NLS_KEY_AS_VALUE_PREFIX);
+			if (!StringUtils.isEmpty(keyPrefix) && stringValue.startsWith(keyPrefix)) {
+				final String key = stringValue.substring(keyPrefix.length());
+				final AbstractSource source = support.getKeySource(key);
+				if (source != null) {
+					ExecutionUtils.run(m_javaInfo, new RunnableEx() {
+						@Override
+						public void run() throws Exception {
+							source.useKey(m_this, key);
+						}
+					});
+					return true;
+				}
+			}
+		}
+		// check for externalized String property
+		{
+			final Expression expression = getExpression();
+			if (expression != null) {
+				if (support.isExternalized(expression)) {
+					ExecutionUtils.run(m_javaInfo, new RunnableEx() {
+						@Override
+						public void run() throws Exception {
+							String string = value == UNKNOWN_VALUE ? null : (String) value;
+							support.setValue(expression, string);
+						}
+					});
+					return true;
+				}
+			}
+		}
+		// no NLS
+		return false;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Expression
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Expression getExpression() throws Exception {
-    ExpressionInfo expressionInfo = getExpressionInfo();
-    return expressionInfo != null ? expressionInfo.m_expression : null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Expression
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Expression getExpression() throws Exception {
+		ExpressionInfo expressionInfo = getExpressionInfo();
+		return expressionInfo != null ? expressionInfo.m_expression : null;
+	}
 
-  @Override
-  public void setExpression(String source, Object value) throws Exception {
-    // validate expression
-    {
-      String[] sourceToValidate = new String[]{source};
-      Object[] valueToValidate = new Object[]{value};
-      boolean[] validationStatus = new boolean[]{true};
-      m_javaInfo.getBroadcastJava().setPropertyExpression(
-          this,
-          sourceToValidate,
-          valueToValidate,
-          validationStatus);
-      if (!validationStatus[0]) {
-        return;
-      }
-      source = sourceToValidate[0];
-      value = valueToValidate[0];
-    }
-    // replace patterns
-    if (source != null && source.contains("%this%")) {
-      source = StringUtils.replace(source, "%this%", TemplateUtils.getExpression(m_javaInfo));
-    }
-    // do set expression
-    ExpressionInfo expressionInfo = getExpressionInfo();
-    if (expressionInfo != null) {
-      ExpressionAccessor accessor = expressionInfo.m_accessor;
-      setExpressionUsingAccessor(accessor, source, value);
-    } else {
-      for (ExpressionAccessor accessor : getAccessors()) {
-        boolean success = setExpressionUsingAccessor(accessor, source, value);
-        if (success) {
-          break;
-        }
-      }
-    }
-    // set value
-    rememberValueIntoExpression(value);
-    // done
-    m_javaInfo.getBroadcastJava().propertyValueWasSet(this);
-  }
+	@Override
+	public void setExpression(String source, Object value) throws Exception {
+		// validate expression
+		{
+			String[] sourceToValidate = new String[]{source};
+			Object[] valueToValidate = new Object[]{value};
+			boolean[] validationStatus = new boolean[]{true};
+			m_javaInfo.getBroadcastJava().setPropertyExpression(
+					this,
+					sourceToValidate,
+					valueToValidate,
+					validationStatus);
+			if (!validationStatus[0]) {
+				return;
+			}
+			source = sourceToValidate[0];
+			value = valueToValidate[0];
+		}
+		// replace patterns
+		if (source != null && source.contains("%this%")) {
+			source = StringUtils.replace(source, "%this%", TemplateUtils.getExpression(m_javaInfo));
+		}
+		// do set expression
+		ExpressionInfo expressionInfo = getExpressionInfo();
+		if (expressionInfo != null) {
+			ExpressionAccessor accessor = expressionInfo.m_accessor;
+			setExpressionUsingAccessor(accessor, source, value);
+		} else {
+			for (ExpressionAccessor accessor : getAccessors()) {
+				boolean success = setExpressionUsingAccessor(accessor, source, value);
+				if (success) {
+					break;
+				}
+			}
+		}
+		// set value
+		rememberValueIntoExpression(value);
+		// done
+		m_javaInfo.getBroadcastJava().propertyValueWasSet(this);
+	}
 
-  /**
-   * We should remember value into current {@link Expression}, because sometimes we want to use
-   * {@link #getValue()} directly after {@link #setExpression(String, Object)}, without
-   * {@link JavaInfo#refresh()}.
-   */
-  private void rememberValueIntoExpression(Object value) throws Exception {
-    Expression expression = getExpression();
-    if (expression != null) {
-      if (!JavaInfoEvaluationHelper.hasValue(expression)) {
-        JavaInfoEvaluationHelper.setValue(expression, value);
-      }
-    }
-  }
+	/**
+	 * We should remember value into current {@link Expression}, because sometimes we want to use
+	 * {@link #getValue()} directly after {@link #setExpression(String, Object)}, without
+	 * {@link JavaInfo#refresh()}.
+	 */
+	private void rememberValueIntoExpression(Object value) throws Exception {
+		Expression expression = getExpression();
+		if (expression != null) {
+			if (!JavaInfoEvaluationHelper.hasValue(expression)) {
+				JavaInfoEvaluationHelper.setValue(expression, value);
+			}
+		}
+	}
 
-  /**
-   * Sets the source/value using given {@link ExpressionAccessor}.
-   *
-   * @return <code>true</code> if expression was successfully set.
-   */
-  private boolean setExpressionUsingAccessor(ExpressionAccessor accessor,
-      String source,
-      Object value) throws Exception {
-    // check for default value
-    if (value != UNKNOWN_VALUE) {
-      if (ObjectUtils.equals(getDefaultValue(accessor), value)) {
-        source = null;
-      }
-    }
-    // do set
-    return accessor.setExpression(m_javaInfo, source);
-  }
+	/**
+	 * Sets the source/value using given {@link ExpressionAccessor}.
+	 *
+	 * @return <code>true</code> if expression was successfully set.
+	 */
+	private boolean setExpressionUsingAccessor(ExpressionAccessor accessor,
+			String source,
+			Object value) throws Exception {
+		// check for default value
+		if (value != UNKNOWN_VALUE) {
+			if (ObjectUtils.equals(getDefaultValue(accessor), value)) {
+				source = null;
+			}
+		}
+		// do set
+		return accessor.setExpression(m_javaInfo, source);
+	}
 
-  /**
-   * @return the forced default value or default from {@link ExpressionAccessor} that will be used
-   *         to set new value.
-   */
-  private Object getDefaultValue(ExpressionAccessor accessor) throws Exception {
-    if (m_defaultValue != UNKNOWN_VALUE) {
-      return m_defaultValue;
-    }
-    return accessor.getDefaultValue(m_javaInfo);
-  }
+	/**
+	 * @return the forced default value or default from {@link ExpressionAccessor} that will be used
+	 *         to set new value.
+	 */
+	private Object getDefaultValue(ExpressionAccessor accessor) throws Exception {
+		if (m_defaultValue != UNKNOWN_VALUE) {
+			return m_defaultValue;
+		}
+		return accessor.getDefaultValue(m_javaInfo);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Composite
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Property getComposite(Property[] properties) {
-    return GenericPropertyComposite.create(properties);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Composite
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Property getComposite(Property[] properties) {
+		return GenericPropertyComposite.create(properties);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IAdaptable
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public <T> T getAdapter(Class<T> adapter) {
-    // get PropertyTooltipProvider from first accessor
-    if (adapter == PropertyTooltipProvider.class) {
-      return m_accessors[0].getAdapter(adapter);
-    }
-    return super.getAdapter(adapter);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IAdaptable
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public <T> T getAdapter(Class<T> adapter) {
+		// get PropertyTooltipProvider from first accessor
+		if (adapter == PropertyTooltipProvider.class) {
+			return m_accessors[0].getAdapter(adapter);
+		}
+		return super.getAdapter(adapter);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Returns the {@link ExpressionAccessor}'s that should be used now. In the past we've used
-   * accessors prepared directly in {@link JavaInfo} during {@link GenericPropertyImpl} creation.
-   * However we can not do this because {@link CreationSupport} can be changed during life of
-   * {@link JavaInfo}, so it can contribute different {@link ExpressionAccessor}'s.
-   *
-   * @return the current {@link ExpressionAccessor}'s.
-   */
-  public List<ExpressionAccessor> getAccessors() throws Exception {
-    List<ExpressionAccessor> accessors = Lists.newArrayList();
-    // add "static" accessors
-    Collections.addAll(accessors, m_accessors);
-    // add accessors from CreationSupport
-    if (m_description != null) {
-      m_javaInfo.getCreationSupport().addAccessors(m_description, accessors);
-    }
-    // remove non-accessible accessors
-    for (Iterator<ExpressionAccessor> I = accessors.iterator(); I.hasNext();) {
-      ExpressionAccessor accessor = I.next();
-      IAccessibleExpressionAccessor accessibleAccessor =
-          accessor.getAdapter(IAccessibleExpressionAccessor.class);
-      if (accessibleAccessor != null && !accessibleAccessor.isAccessible(m_javaInfo)) {
-        I.remove();
-      }
-    }
-    // OK, final accessors
-    return accessors;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Returns the {@link ExpressionAccessor}'s that should be used now. In the past we've used
+	 * accessors prepared directly in {@link JavaInfo} during {@link GenericPropertyImpl} creation.
+	 * However we can not do this because {@link CreationSupport} can be changed during life of
+	 * {@link JavaInfo}, so it can contribute different {@link ExpressionAccessor}'s.
+	 *
+	 * @return the current {@link ExpressionAccessor}'s.
+	 */
+	public List<ExpressionAccessor> getAccessors() throws Exception {
+		List<ExpressionAccessor> accessors = Lists.newArrayList();
+		// add "static" accessors
+		Collections.addAll(accessors, m_accessors);
+		// add accessors from CreationSupport
+		if (m_description != null) {
+			m_javaInfo.getCreationSupport().addAccessors(m_description, accessors);
+		}
+		// remove non-accessible accessors
+		for (Iterator<ExpressionAccessor> I = accessors.iterator(); I.hasNext();) {
+			ExpressionAccessor accessor = I.next();
+			IAccessibleExpressionAccessor accessibleAccessor =
+					accessor.getAdapter(IAccessibleExpressionAccessor.class);
+			if (accessibleAccessor != null && !accessibleAccessor.isAccessible(m_javaInfo)) {
+				I.remove();
+			}
+		}
+		// OK, final accessors
+		return accessors;
+	}
 
-  /**
-   * @return the {@link ExpressionInfo} for existing property {@link Expression} or
-   *         <code>null</code> if not {@link Expression} was found.
-   */
-  private ExpressionInfo getExpressionInfo() throws Exception {
-    for (ExpressionAccessor accessor : getAccessors()) {
-      Expression expression = accessor.getExpression(m_javaInfo);
-      if (expression != null) {
-        return new ExpressionInfo(accessor, expression);
-      }
-    }
-    return null;
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ExpressionInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Holder of information about {@link Expression} and {@link ExpressionAccessor} that provided it.
-   *
-   * @author scheglov_ke
-   */
-  private static final class ExpressionInfo {
-    ExpressionAccessor m_accessor;
-    Expression m_expression;
+	/**
+	 * @return the {@link ExpressionInfo} for existing property {@link Expression} or
+	 *         <code>null</code> if not {@link Expression} was found.
+	 */
+	private ExpressionInfo getExpressionInfo() throws Exception {
+		for (ExpressionAccessor accessor : getAccessors()) {
+			Expression expression = accessor.getExpression(m_javaInfo);
+			if (expression != null) {
+				return new ExpressionInfo(accessor, expression);
+			}
+		}
+		return null;
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ExpressionInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Holder of information about {@link Expression} and {@link ExpressionAccessor} that provided it.
+	 *
+	 * @author scheglov_ke
+	 */
+	private static final class ExpressionInfo {
+		ExpressionAccessor m_accessor;
+		Expression m_expression;
 
-    public ExpressionInfo(ExpressionAccessor accessor, Expression expression) {
-      m_accessor = accessor;
-      m_expression = expression;
-    }
-  }
+		public ExpressionInfo(ExpressionAccessor accessor, Expression expression) {
+			m_accessor = accessor;
+			m_expression = expression;
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Clipboard
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the Java source that that has same value as current value of this
-   *         {@link GenericPropertyImpl}, or <code>null</code> if no such source can be provided.
-   */
-  public String getClipboardSource() throws Exception {
-    if (m_description != null && m_description.hasTrueTag("noClipboard")) {
-      return null;
-    }
-    if (m_editor instanceof IClipboardSourceProvider) {
-      return ((IClipboardSourceProvider) m_editor).getClipboardSource(this);
-    }
-    if (m_converter != null) {
-      return m_converter.toJavaSource(m_javaInfo, getValue());
-    }
-    // no clipboard source
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Clipboard
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the Java source that that has same value as current value of this
+	 *         {@link GenericPropertyImpl}, or <code>null</code> if no such source can be provided.
+	 */
+	public String getClipboardSource() throws Exception {
+		if (m_description != null && m_description.hasTrueTag("noClipboard")) {
+			return null;
+		}
+		if (m_editor instanceof IClipboardSourceProvider) {
+			return ((IClipboardSourceProvider) m_editor).getClipboardSource(this);
+		}
+		if (m_converter != null) {
+			return m_converter.toJavaSource(m_javaInfo, getValue());
+		}
+		// no clipboard source
+		return null;
+	}
 
-  private void setValueEx(final Object value) throws Exception {
-    // validate value
-    Object validatedValue;
-    {
-      Object[] valueToValidate = new Object[]{value};
-      boolean[] validationStatus = new boolean[]{true};
-      m_javaInfo.getBroadcast(GenericPropertySetValue.class).invoke(
-          m_this,
-          valueToValidate,
-          validationStatus);
-      if (!validationStatus[0]) {
-        return;
-      }
-      validatedValue = valueToValidate[0];
-    }
-    // prepare source
-    String source;
-    if (validatedValue == UNKNOWN_VALUE) {
-      source = null;
-    } else if (m_editor instanceof IValueSourcePropertyEditor) {
-      IValueSourcePropertyEditor sourceEditor = (IValueSourcePropertyEditor) m_editor;
-      source = sourceEditor.getValueSource(validatedValue);
-    } else {
-      Assert.isNotNull(m_converter);
-      source = m_converter.toJavaSource(m_javaInfo, validatedValue);
-    }
-    // set source
-    setExpression(source, validatedValue);
-    // auto externalize
-    if (value != UNKNOWN_VALUE) {
-      if (!JavaInfoUtils.getState(m_javaInfo).isLiveComponent()) {
-        NlsSupport.autoExternalize(m_this);
-      }
-    }
-  }
+	private void setValueEx(final Object value) throws Exception {
+		// validate value
+		Object validatedValue;
+		{
+			Object[] valueToValidate = new Object[]{value};
+			boolean[] validationStatus = new boolean[]{true};
+			m_javaInfo.getBroadcast(GenericPropertySetValue.class).invoke(
+					m_this,
+					valueToValidate,
+					validationStatus);
+			if (!validationStatus[0]) {
+				return;
+			}
+			validatedValue = valueToValidate[0];
+		}
+		// prepare source
+		String source;
+		if (validatedValue == UNKNOWN_VALUE) {
+			source = null;
+		} else if (m_editor instanceof IValueSourcePropertyEditor) {
+			IValueSourcePropertyEditor sourceEditor = (IValueSourcePropertyEditor) m_editor;
+			source = sourceEditor.getValueSource(validatedValue);
+		} else {
+			Assert.isNotNull(m_converter);
+			source = m_converter.toJavaSource(m_javaInfo, validatedValue);
+		}
+		// set source
+		setExpression(source, validatedValue);
+		// auto externalize
+		if (value != UNKNOWN_VALUE) {
+			if (!JavaInfoUtils.getState(m_javaInfo).isLiveComponent()) {
+				NlsSupport.autoExternalize(m_this);
+			}
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/IConfigurablePropertyFactory.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/IConfigurablePropertyFactory.java
index a20dba9a1..096d078f9 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/IConfigurablePropertyFactory.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/IConfigurablePropertyFactory.java
@@ -20,9 +20,9 @@
  * @coverage core.model.property
  */
 public interface IConfigurablePropertyFactory {
-  /**
-   * @return the {@link Property} created/configured according the given
-   *         {@link ConfigurablePropertyDescription} .
-   */
-  Property create(JavaInfo javaInfo, ConfigurablePropertyDescription description) throws Exception;
+	/**
+	 * @return the {@link Property} created/configured according the given
+	 *         {@link ConfigurablePropertyDescription} .
+	 */
+	Property create(JavaInfo javaInfo, ConfigurablePropertyDescription description) throws Exception;
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/IConfigurablePropertyObject.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/IConfigurablePropertyObject.java
index ceb5f21f5..eea5fc535 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/IConfigurablePropertyObject.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/IConfigurablePropertyObject.java
@@ -20,8 +20,8 @@
  * @author scheglov_ke
  */
 public interface IConfigurablePropertyObject {
-  /**
-   * Configures object with given {@link Map} of parameters.
-   */
-  void configure(EditorState state, Map<String, Object> parameters) throws Exception;
+	/**
+	 * Configures object with given {@link Map} of parameters.
+	 */
+	void configure(EditorState state, Map<String, Object> parameters) throws Exception;
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/JavaProperty.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/JavaProperty.java
index a569d43a4..560d5edfe 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/JavaProperty.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/JavaProperty.java
@@ -23,67 +23,67 @@
  * @coverage core.model.property
  */
 public abstract class JavaProperty extends ObjectProperty {
-  protected final JavaInfo m_javaInfo;
-  private String m_title;
+	protected final JavaInfo m_javaInfo;
+	private String m_title;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public JavaProperty(JavaInfo javaInfo, String title, PropertyEditor propertyEditor) {
-    super(propertyEditor);
-    m_javaInfo = javaInfo;
-    m_title = title;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public JavaProperty(JavaInfo javaInfo, String title, PropertyEditor propertyEditor) {
+		super(propertyEditor);
+		m_javaInfo = javaInfo;
+		m_title = title;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final String getTitle() {
-    return m_title;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final String getTitle() {
+		return m_title;
+	}
 
-  /**
-   * Sets the title, used to rename properties in special toolkits.
-   */
-  public final void setTitle(String title) {
-    m_title = title;
-  }
+	/**
+	 * Sets the title, used to rename properties in special toolkits.
+	 */
+	public final void setTitle(String title) {
+		m_title = title;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public ObjectInfo getObjectInfo() {
-    return m_javaInfo;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public ObjectInfo getObjectInfo() {
+		return m_javaInfo;
+	}
 
-  /**
-   * @return the {@link JavaInfo} of this {@link Property}.
-   */
-  public final JavaInfo getJavaInfo() {
-    return m_javaInfo;
-  }
+	/**
+	 * @return the {@link JavaInfo} of this {@link Property}.
+	 */
+	public final JavaInfo getJavaInfo() {
+		return m_javaInfo;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IAdapter
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public <T> T getAdapter(Class<T> adapter) {
-    if (adapter == IJavaProject.class) {
-      return adapter.cast(m_javaInfo.getEditor().getJavaProject());
-    }
-    if (adapter == ObjectInfo.class) {
-      return adapter.cast(m_javaInfo);
-    }
-    return super.getAdapter(adapter);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IAdapter
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public <T> T getAdapter(Class<T> adapter) {
+		if (adapter == IJavaProject.class) {
+			return adapter.cast(m_javaInfo.getEditor().getJavaProject());
+		}
+		if (adapter == ObjectInfo.class) {
+			return adapter.cast(m_javaInfo);
+		}
+		return super.getAdapter(adapter);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/accessor/AccessorUtils.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/accessor/AccessorUtils.java
index abb02d152..ecefb9b86 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/accessor/AccessorUtils.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/accessor/AccessorUtils.java
@@ -33,114 +33,114 @@
  * @coverage core.model.property.accessor
  */
 public class AccessorUtils {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private AccessorUtils() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private AccessorUtils() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IAccessibleExpressionAccessor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the implementation of {@link IAccessibleExpressionAccessor} for reflection
-   *         {@link Method}.
-   */
-  public static IAccessibleExpressionAccessor IAccessibleExpressionAccessor_forMethod(final Method method) {
-    return new IAccessibleExpressionAccessor() {
-      @Override
-      public boolean isAccessible(JavaInfo javaInfo) {
-        return Modifier.isPublic(method.getModifiers())
-            || javaInfo.getCreationSupport() instanceof ThisCreationSupport;
-      }
-    };
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IAccessibleExpressionAccessor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the implementation of {@link IAccessibleExpressionAccessor} for reflection
+	 *         {@link Method}.
+	 */
+	public static IAccessibleExpressionAccessor IAccessibleExpressionAccessor_forMethod(final Method method) {
+		return new IAccessibleExpressionAccessor() {
+			@Override
+			public boolean isAccessible(JavaInfo javaInfo) {
+				return Modifier.isPublic(method.getModifiers())
+						|| javaInfo.getCreationSupport() instanceof ThisCreationSupport;
+			}
+		};
+	}
 
-  /**
-   * @return the implementation of {@link IAccessibleExpressionAccessor} for reflection
-   *         {@link Field}.
-   */
-  public static IAccessibleExpressionAccessor IAccessibleExpressionAccessor_forField(final Field field) {
-    return new IAccessibleExpressionAccessor() {
-      @Override
-      public boolean isAccessible(JavaInfo javaInfo) {
-        return Modifier.isPublic(field.getModifiers())
-            || javaInfo.getCreationSupport() instanceof ThisCreationSupport;
-      }
-    };
-  }
+	/**
+	 * @return the implementation of {@link IAccessibleExpressionAccessor} for reflection
+	 *         {@link Field}.
+	 */
+	public static IAccessibleExpressionAccessor IAccessibleExpressionAccessor_forField(final Field field) {
+		return new IAccessibleExpressionAccessor() {
+			@Override
+			public boolean isAccessible(JavaInfo javaInfo) {
+				return Modifier.isPublic(field.getModifiers())
+						|| javaInfo.getCreationSupport() instanceof ThisCreationSupport;
+			}
+		};
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IExposableExpressionAccessor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link IExposableExpressionAccessor}, may be <code>null</code>.
-   */
-  public static IExposableExpressionAccessor getExposableExpressionAccessor(Property property)
-      throws Exception {
-    if (property instanceof GenericPropertyImpl) {
-      GenericPropertyImpl genericProperty = (GenericPropertyImpl) property;
-      for (ExpressionAccessor accessor : genericProperty.getAccessors()) {
-        IExposableExpressionAccessor exposableAccessor =
-            accessor.getAdapter(IExposableExpressionAccessor.class);
-        if (exposableAccessor != null) {
-          return exposableAccessor;
-        }
-      }
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IExposableExpressionAccessor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link IExposableExpressionAccessor}, may be <code>null</code>.
+	 */
+	public static IExposableExpressionAccessor getExposableExpressionAccessor(Property property)
+			throws Exception {
+		if (property instanceof GenericPropertyImpl) {
+			GenericPropertyImpl genericProperty = (GenericPropertyImpl) property;
+			for (ExpressionAccessor accessor : genericProperty.getAccessors()) {
+				IExposableExpressionAccessor exposableAccessor =
+						accessor.getAdapter(IExposableExpressionAccessor.class);
+				if (exposableAccessor != null) {
+					return exposableAccessor;
+				}
+			}
+		}
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // PropertyTooltipProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the implementation of {@link PropertyTooltipProvider} for reflection {@link Method}.
-   */
-  public static PropertyTooltipProvider PropertyTooltipProvider_forMethod(final Method method) {
-    final String methodSignature = ReflectionUtils.getMethodSignature(method);
-    return new PropertyTooltipTextProvider() {
-      @Override
-      protected String getText(Property property) throws Exception {
-        IJavaProject javaProject = property.getAdapter(IJavaProject.class);
-        String javaDocText =
-            JavaDocUtils.getTooltip(
-                javaProject,
-                method.getDeclaringClass().getName(),
-                methodSignature);
-        if (javaDocText == null) {
-          return property.getTitle();
-        }
-        return javaDocText;
-      }
-    };
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// PropertyTooltipProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the implementation of {@link PropertyTooltipProvider} for reflection {@link Method}.
+	 */
+	public static PropertyTooltipProvider PropertyTooltipProvider_forMethod(final Method method) {
+		final String methodSignature = ReflectionUtils.getMethodSignature(method);
+		return new PropertyTooltipTextProvider() {
+			@Override
+			protected String getText(Property property) throws Exception {
+				IJavaProject javaProject = property.getAdapter(IJavaProject.class);
+				String javaDocText =
+						JavaDocUtils.getTooltip(
+								javaProject,
+								method.getDeclaringClass().getName(),
+								methodSignature);
+				if (javaDocText == null) {
+					return property.getTitle();
+				}
+				return javaDocText;
+			}
+		};
+	}
 
-  /**
-   * @return the implementation of {@link PropertyTooltipProvider} for reflection {@link Field}.
-   */
-  public static PropertyTooltipProvider PropertyTooltipProvider_forField(final Field field) {
-    return new PropertyTooltipTextProvider() {
-      @Override
-      protected String getText(Property property) throws Exception {
-        // prepare property type
-        IJavaProject javaProject = property.getAdapter(IJavaProject.class);
-        IType findType = javaProject.findType(field.getDeclaringClass().getName());
-        // prepare java doc
-        String javaDocText = JavaDocUtils.getTooltip(findType.getField(field.getName()));
-        if (javaDocText == null) {
-          return property.getTitle();
-        }
-        return javaDocText;
-      }
-    };
-  }
+	/**
+	 * @return the implementation of {@link PropertyTooltipProvider} for reflection {@link Field}.
+	 */
+	public static PropertyTooltipProvider PropertyTooltipProvider_forField(final Field field) {
+		return new PropertyTooltipTextProvider() {
+			@Override
+			protected String getText(Property property) throws Exception {
+				// prepare property type
+				IJavaProject javaProject = property.getAdapter(IJavaProject.class);
+				IType findType = javaProject.findType(field.getDeclaringClass().getName());
+				// prepare java doc
+				String javaDocText = JavaDocUtils.getTooltip(findType.getField(field.getName()));
+				if (javaDocText == null) {
+					return property.getTitle();
+				}
+				return javaDocText;
+			}
+		};
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/accessor/AssignmentsSequence.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/accessor/AssignmentsSequence.java
index 8a27c523b..e369d992a 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/accessor/AssignmentsSequence.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/accessor/AssignmentsSequence.java
@@ -22,29 +22,29 @@
  * @coverage core.model.property.accessor
  */
 public final class AssignmentsSequence {
-  private final List<Assignment> m_assignments;
-  private final Expression m_assignedExpression;
+	private final List<Assignment> m_assignments;
+	private final Expression m_assignedExpression;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AssignmentsSequence(List<Assignment> assignments, Expression assignedExpression) {
-    m_assignments = assignments;
-    m_assignedExpression = assignedExpression;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AssignmentsSequence(List<Assignment> assignments, Expression assignedExpression) {
+		m_assignments = assignments;
+		m_assignedExpression = assignedExpression;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public List<Assignment> getAssignments() {
-    return m_assignments;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public List<Assignment> getAssignments() {
+		return m_assignments;
+	}
 
-  public Expression getAssignedExpression() {
-    return m_assignedExpression;
-  }
+	public Expression getAssignedExpression() {
+		return m_assignedExpression;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/accessor/ConstructorAccessor.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/accessor/ConstructorAccessor.java
index 40a391774..41cd1c946 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/accessor/ConstructorAccessor.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/accessor/ConstructorAccessor.java
@@ -27,55 +27,55 @@
  * @coverage core.model.property.accessor
  */
 public final class ConstructorAccessor extends ExpressionAccessor {
-  private final int m_index;
-  private final String m_defaultSource;
+	private final int m_index;
+	private final String m_defaultSource;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ConstructorAccessor(int index, String defaultSource) {
-    m_index = index;
-    m_defaultSource = defaultSource;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ConstructorAccessor(int index, String defaultSource) {
+		m_index = index;
+		m_defaultSource = defaultSource;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ExpressionAccessor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Expression getExpression(JavaInfo javaInfo) throws Exception {
-    ClassInstanceCreation creation =
-        ((ConstructorCreationSupport) javaInfo.getCreationSupport()).getCreation();
-    return DomGenerics.arguments(creation).get(m_index);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ExpressionAccessor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Expression getExpression(JavaInfo javaInfo) throws Exception {
+		ClassInstanceCreation creation =
+				((ConstructorCreationSupport) javaInfo.getCreationSupport()).getCreation();
+		return DomGenerics.arguments(creation).get(m_index);
+	}
 
-  @Override
-  public boolean setExpression(final JavaInfo javaInfo, String source) throws Exception {
-    // if given source is "null", use default source (but it also can be "null")
-    final String newSource;
-    if (source != null) {
-      newSource = source;
-    } else {
-      newSource = m_defaultSource;
-    }
-    // if we have source to replace current, do this
-    if (newSource != null) {
-      final AstEditor editor = javaInfo.getEditor();
-      final Expression oldExpression = getExpression(javaInfo);
-      if (!editor.getSource(oldExpression).equals(source)) {
-        ExecutionUtils.run(javaInfo, new RunnableEx() {
-          @Override
-          public void run() throws Exception {
-            javaInfo.replaceExpression(oldExpression, newSource);
-          }
-        });
-        return true;
-      }
-    }
-    // no changes
-    return false;
-  }
+	@Override
+	public boolean setExpression(final JavaInfo javaInfo, String source) throws Exception {
+		// if given source is "null", use default source (but it also can be "null")
+		final String newSource;
+		if (source != null) {
+			newSource = source;
+		} else {
+			newSource = m_defaultSource;
+		}
+		// if we have source to replace current, do this
+		if (newSource != null) {
+			final AstEditor editor = javaInfo.getEditor();
+			final Expression oldExpression = getExpression(javaInfo);
+			if (!editor.getSource(oldExpression).equals(source)) {
+				ExecutionUtils.run(javaInfo, new RunnableEx() {
+					@Override
+					public void run() throws Exception {
+						javaInfo.replaceExpression(oldExpression, newSource);
+					}
+				});
+				return true;
+			}
+		}
+		// no changes
+		return false;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/accessor/ExpressionAccessor.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/accessor/ExpressionAccessor.java
index f08eb6447..da4922615 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/accessor/ExpressionAccessor.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/accessor/ExpressionAccessor.java
@@ -27,67 +27,67 @@
  * @coverage core.model.property.accessor
  */
 public abstract class ExpressionAccessor extends AbstractDescription {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GenericPropertyDescription
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected GenericPropertyDescription m_propertyDescription;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GenericPropertyDescription
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected GenericPropertyDescription m_propertyDescription;
 
-  /**
-   * Sets the {@link GenericPropertyDescription} in which this {@link ExpressionAccessor} is used.
-   */
-  public final void setPropertyDescription(GenericPropertyDescription property) {
-    m_propertyDescription = property;
-  }
+	/**
+	 * Sets the {@link GenericPropertyDescription} in which this {@link ExpressionAccessor} is used.
+	 */
+	public final void setPropertyDescription(GenericPropertyDescription property) {
+		m_propertyDescription = property;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Expression
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link Expression} for given {@link JavaInfo}.
-   */
-  public abstract Expression getExpression(JavaInfo javaInfo) throws Exception;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Expression
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link Expression} for given {@link JavaInfo}.
+	 */
+	public abstract Expression getExpression(JavaInfo javaInfo) throws Exception;
 
-  /**
-   * Sets new expression with given source to the given {@link JavaInfo}.
-   *
-   * @param source
-   *          the source of new value, <code>null</code> means that value should be removed (if
-   *          possible for this accessor)
-   *
-   * @return <code>true</code> if expression was successfully set.
-   */
-  public abstract boolean setExpression(JavaInfo javaInfo, String source) throws Exception;
+	/**
+	 * Sets new expression with given source to the given {@link JavaInfo}.
+	 *
+	 * @param source
+	 *          the source of new value, <code>null</code> means that value should be removed (if
+	 *          possible for this accessor)
+	 *
+	 * @return <code>true</code> if expression was successfully set.
+	 */
+	public abstract boolean setExpression(JavaInfo javaInfo, String source) throws Exception;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Default value
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Property can be marked with this tag (with value "true") to specify, that
-   * {@link ExpressionAccessor} should not try to fetch default value. For example in eSWT
-   * <code>Menu.getVisible()</code> contains bug - infinite recursion, so we should prevent its
-   * invocation.
-   */
-  public static final String NO_DEFAULT_VALUE_TAG = "noDefaultValue";
-  /**
-   * Component can be marked with this tag (with value "true") to specify, that
-   * {@link ExpressionAccessor} should not try to fetch default value, if {@link JavaInfo} uses
-   * {@link ThisCreationSupport}. For example in GWT <code>Composite</code> requires invocation of
-   * <code>initWidget()</code> before accessing default values, however we can not do this because
-   * we can do this only once - for real widget.
-   */
-  protected static final String NO_DEFAULT_VALUES_THIS_TAG = "noDefaultValuesForThis";
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Default value
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Property can be marked with this tag (with value "true") to specify, that
+	 * {@link ExpressionAccessor} should not try to fetch default value. For example in eSWT
+	 * <code>Menu.getVisible()</code> contains bug - infinite recursion, so we should prevent its
+	 * invocation.
+	 */
+	public static final String NO_DEFAULT_VALUE_TAG = "noDefaultValue";
+	/**
+	 * Component can be marked with this tag (with value "true") to specify, that
+	 * {@link ExpressionAccessor} should not try to fetch default value, if {@link JavaInfo} uses
+	 * {@link ThisCreationSupport}. For example in GWT <code>Composite</code> requires invocation of
+	 * <code>initWidget()</code> before accessing default values, however we can not do this because
+	 * we can do this only once - for real widget.
+	 */
+	protected static final String NO_DEFAULT_VALUES_THIS_TAG = "noDefaultValuesForThis";
 
-  /**
-   * @return optional default value for this property or {@link Property#UNKNOWN_VALUE} if default
-   *         value is unknown.
-   */
-  public Object getDefaultValue(JavaInfo javaInfo) throws Exception {
-    return Property.UNKNOWN_VALUE;
-  }
+	/**
+	 * @return optional default value for this property or {@link Property#UNKNOWN_VALUE} if default
+	 *         value is unknown.
+	 */
+	public Object getDefaultValue(JavaInfo javaInfo) throws Exception {
+		return Property.UNKNOWN_VALUE;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/accessor/FactoryAccessor.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/accessor/FactoryAccessor.java
index 27d4d173a..6519a17cd 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/accessor/FactoryAccessor.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/accessor/FactoryAccessor.java
@@ -28,54 +28,54 @@
  * @coverage core.model.property.accessor
  */
 public final class FactoryAccessor extends ExpressionAccessor {
-  private final int m_index;
-  private final String m_defaultSource;
+	private final int m_index;
+	private final String m_defaultSource;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FactoryAccessor(int index, String defaultSource) {
-    m_index = index;
-    m_defaultSource = defaultSource;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FactoryAccessor(int index, String defaultSource) {
+		m_index = index;
+		m_defaultSource = defaultSource;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ExpressionAccessor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Expression getExpression(JavaInfo javaInfo) throws Exception {
-    MethodInvocation invocation = (MethodInvocation) javaInfo.getCreationSupport().getNode();
-    return DomGenerics.arguments(invocation).get(m_index);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ExpressionAccessor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Expression getExpression(JavaInfo javaInfo) throws Exception {
+		MethodInvocation invocation = (MethodInvocation) javaInfo.getCreationSupport().getNode();
+		return DomGenerics.arguments(invocation).get(m_index);
+	}
 
-  @Override
-  public boolean setExpression(JavaInfo javaInfo, String source) throws Exception {
-    // if given source is "null", use default source (but it also can be "null")
-    final String newSource;
-    if (source != null) {
-      newSource = source;
-    } else {
-      newSource = m_defaultSource;
-    }
-    // if we have source to replace current, do this
-    if (newSource != null) {
-      final AstEditor editor = javaInfo.getEditor();
-      final Expression oldExpression = getExpression(javaInfo);
-      if (!editor.getSource(oldExpression).equals(source)) {
-        ExecutionUtils.run(javaInfo, new RunnableEx() {
-          @Override
-          public void run() throws Exception {
-            editor.replaceExpression(oldExpression, newSource);
-          }
-        });
-        return true;
-      }
-    }
-    // no changes
-    return false;
-  }
+	@Override
+	public boolean setExpression(JavaInfo javaInfo, String source) throws Exception {
+		// if given source is "null", use default source (but it also can be "null")
+		final String newSource;
+		if (source != null) {
+			newSource = source;
+		} else {
+			newSource = m_defaultSource;
+		}
+		// if we have source to replace current, do this
+		if (newSource != null) {
+			final AstEditor editor = javaInfo.getEditor();
+			final Expression oldExpression = getExpression(javaInfo);
+			if (!editor.getSource(oldExpression).equals(source)) {
+				ExecutionUtils.run(javaInfo, new RunnableEx() {
+					@Override
+					public void run() throws Exception {
+						editor.replaceExpression(oldExpression, newSource);
+					}
+				});
+				return true;
+			}
+		}
+		// no changes
+		return false;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/accessor/FieldAccessor.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/accessor/FieldAccessor.java
index 04fd865a9..4dfe74e83 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/accessor/FieldAccessor.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/accessor/FieldAccessor.java
@@ -42,245 +42,245 @@
  * @coverage core.model.property.accessor
  */
 public final class FieldAccessor extends ExpressionAccessor {
-  private final Field m_field;
-  private final String m_fieldName;
+	private final Field m_field;
+	private final String m_fieldName;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FieldAccessor(Field field) {
-    Assert.isNotNull(field);
-    m_field = field;
-    m_fieldName = m_field.getName();
-    // initialize IAdaptable
-    m_accessibleAccessor = AccessorUtils.IAccessibleExpressionAccessor_forField(m_field);
-    m_tooltipProvider = AccessorUtils.PropertyTooltipProvider_forField(m_field);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FieldAccessor(Field field) {
+		Assert.isNotNull(field);
+		m_field = field;
+		m_fieldName = m_field.getName();
+		// initialize IAdaptable
+		m_accessibleAccessor = AccessorUtils.IAccessibleExpressionAccessor_forField(m_field);
+		m_tooltipProvider = AccessorUtils.PropertyTooltipProvider_forField(m_field);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Visiting
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void visit(JavaInfo javaInfo, int state) throws Exception {
-    super.visit(javaInfo, state);
-    // remember default value
-    if (isTimeToGetDefaultValue(javaInfo, state)) {
-      Object defaultValue = getFieldValue(javaInfo);
-      javaInfo.putArbitraryValue(this, defaultValue);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Visiting
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void visit(JavaInfo javaInfo, int state) throws Exception {
+		super.visit(javaInfo, state);
+		// remember default value
+		if (isTimeToGetDefaultValue(javaInfo, state)) {
+			Object defaultValue = getFieldValue(javaInfo);
+			javaInfo.putArbitraryValue(this, defaultValue);
+		}
+	}
 
-  private boolean isTimeToGetDefaultValue(JavaInfo javaInfo, int state) {
-    return state == STATE_OBJECT_READY;
-  }
+	private boolean isTimeToGetDefaultValue(JavaInfo javaInfo, int state) {
+		return state == STATE_OBJECT_READY;
+	}
 
-  /**
-   * Returns values of field from {@link JavaInfo} object. Note, that we can not use
-   * {@link #m_field} directly because sometimes object of {@link JavaInfo} has different class than
-   * specified in {@link ComponentDescription}, so declared this {@link #m_field}. For example
-   * <code>GridLayout</code> and its <code>GridLayout2</code>.
-   */
-  private Object getFieldValue(final JavaInfo javaInfo) {
-    return ExecutionUtils.runObjectIgnore(new RunnableObjectEx<Object>() {
-      @Override
-      public Object runObject() throws Exception {
-        Object object = javaInfo.getObject();
-        return ReflectionUtils.getFieldObject(object, m_fieldName);
-      }
-    }, Property.UNKNOWN_VALUE);
-  }
+	/**
+	 * Returns values of field from {@link JavaInfo} object. Note, that we can not use
+	 * {@link #m_field} directly because sometimes object of {@link JavaInfo} has different class than
+	 * specified in {@link ComponentDescription}, so declared this {@link #m_field}. For example
+	 * <code>GridLayout</code> and its <code>GridLayout2</code>.
+	 */
+	private Object getFieldValue(final JavaInfo javaInfo) {
+		return ExecutionUtils.runObjectIgnore(new RunnableObjectEx<Object>() {
+			@Override
+			public Object runObject() throws Exception {
+				Object object = javaInfo.getObject();
+				return ReflectionUtils.getFieldObject(object, m_fieldName);
+			}
+		}, Property.UNKNOWN_VALUE);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ExpressionAccessor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Expression getExpression(JavaInfo javaInfo) throws Exception {
-    Assignment assignment = getFieldAssignment(javaInfo);
-    return getExpression(assignment);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ExpressionAccessor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Expression getExpression(JavaInfo javaInfo) throws Exception {
+		Assignment assignment = getFieldAssignment(javaInfo);
+		return getExpression(assignment);
+	}
 
-  @Override
-  public boolean setExpression(final JavaInfo javaInfo, final String source) throws Exception {
-    boolean hasAssignment = !javaInfo.getFieldAssignments(m_fieldName).isEmpty();
-    if (source == null) {
-      if (hasAssignment) {
-        ExecutionUtils.run(javaInfo, new RunnableEx() {
-          @Override
-          public void run() throws Exception {
-            javaInfo.removeFieldAssignments(m_fieldName);
-          }
-        });
-      }
-    } else if (hasAssignment) {
-      Assignment assignment = getFieldAssignmentForUpdate(javaInfo);
-      final Expression oldExpression = getExpression(assignment);
-      if (!javaInfo.getEditor().getSource(oldExpression).equals(source)) {
-        ExecutionUtils.run(javaInfo, new RunnableEx() {
-          @Override
-          public void run() throws Exception {
-            javaInfo.getEditor().replaceExpression(oldExpression, source);
-          }
-        });
-      }
-    } else {
-      ExecutionUtils.run(javaInfo, new RunnableEx() {
-        @Override
-        public void run() throws Exception {
-          javaInfo.addFieldAssignment(m_fieldName, source);
-        }
-      });
-    }
-    // success
-    return true;
-  }
+	@Override
+	public boolean setExpression(final JavaInfo javaInfo, final String source) throws Exception {
+		boolean hasAssignment = !javaInfo.getFieldAssignments(m_fieldName).isEmpty();
+		if (source == null) {
+			if (hasAssignment) {
+				ExecutionUtils.run(javaInfo, new RunnableEx() {
+					@Override
+					public void run() throws Exception {
+						javaInfo.removeFieldAssignments(m_fieldName);
+					}
+				});
+			}
+		} else if (hasAssignment) {
+			Assignment assignment = getFieldAssignmentForUpdate(javaInfo);
+			final Expression oldExpression = getExpression(assignment);
+			if (!javaInfo.getEditor().getSource(oldExpression).equals(source)) {
+				ExecutionUtils.run(javaInfo, new RunnableEx() {
+					@Override
+					public void run() throws Exception {
+						javaInfo.getEditor().replaceExpression(oldExpression, source);
+					}
+				});
+			}
+		} else {
+			ExecutionUtils.run(javaInfo, new RunnableEx() {
+				@Override
+				public void run() throws Exception {
+					javaInfo.addFieldAssignment(m_fieldName, source);
+				}
+			});
+		}
+		// success
+		return true;
+	}
 
-  @Override
-  public Object getDefaultValue(JavaInfo javaInfo) throws Exception {
-    return javaInfo.getArbitraryValue(this);
-  }
+	@Override
+	public Object getDefaultValue(JavaInfo javaInfo) throws Exception {
+		return javaInfo.getArbitraryValue(this);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IAdaptable
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final IAccessibleExpressionAccessor m_accessibleAccessor;
-  private final PropertyTooltipProvider m_tooltipProvider;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IAdaptable
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final IAccessibleExpressionAccessor m_accessibleAccessor;
+	private final PropertyTooltipProvider m_tooltipProvider;
 
-  @Override
-  public <T> T getAdapter(Class<T> adapter) {
-    if (adapter == IAccessibleExpressionAccessor.class) {
-      return adapter.cast(m_accessibleAccessor);
-    }
-    if (adapter == IExposableExpressionAccessor.class) {
-      return adapter.cast(m_exposableAccessor);
-    }
-    if (adapter == PropertyTooltipProvider.class) {
-      return adapter.cast(m_tooltipProvider);
-    }
-    // other
-    return super.getAdapter(adapter);
-  }
+	@Override
+	public <T> T getAdapter(Class<T> adapter) {
+		if (adapter == IAccessibleExpressionAccessor.class) {
+			return adapter.cast(m_accessibleAccessor);
+		}
+		if (adapter == IExposableExpressionAccessor.class) {
+			return adapter.cast(m_exposableAccessor);
+		}
+		if (adapter == PropertyTooltipProvider.class) {
+			return adapter.cast(m_tooltipProvider);
+		}
+		// other
+		return super.getAdapter(adapter);
+	}
 
-  /**
-   * Implementation of {@link IExposableExpressionAccessor}.
-   */
-  private final IExposableExpressionAccessor m_exposableAccessor =
-      new IExposableExpressionAccessor() {
-        @Override
-        public Class<?> getValueClass(JavaInfo javaInfo) {
-          return m_field.getType();
-        }
+	/**
+	 * Implementation of {@link IExposableExpressionAccessor}.
+	 */
+	private final IExposableExpressionAccessor m_exposableAccessor =
+			new IExposableExpressionAccessor() {
+		@Override
+		public Class<?> getValueClass(JavaInfo javaInfo) {
+			return m_field.getType();
+		}
 
-        @Override
-        public String getGetterCode(JavaInfo javaInfo) throws Exception {
-          return m_fieldName;
-        }
+		@Override
+		public String getGetterCode(JavaInfo javaInfo) throws Exception {
+			return m_fieldName;
+		}
 
-        @Override
-        public String getSetterCode(JavaInfo javaInfo, String source) throws Exception {
-          return m_fieldName + " = " + source;
-        }
-      };
+		@Override
+		public String getSetterCode(JavaInfo javaInfo, String source) throws Exception {
+			return m_fieldName + " = " + source;
+		}
+	};
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link Assignment} of this field accessor for given {@link JavaInfo}.
-   */
-  private Assignment getFieldAssignment(JavaInfo javaInfo) throws Exception {
-    return javaInfo.getFieldAssignment(m_fieldName);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link Assignment} of this field accessor for given {@link JavaInfo}.
+	 */
+	private Assignment getFieldAssignment(JavaInfo javaInfo) throws Exception {
+		return javaInfo.getFieldAssignment(m_fieldName);
+	}
 
-  /**
-   * @return right hand side of given assignment expression.
-   */
-  private static Expression getExpression(Assignment assignment) {
-    return assignment == null ? null : assignment.getRightHandSide();
-  }
+	/**
+	 * @return right hand side of given assignment expression.
+	 */
+	private static Expression getExpression(Assignment assignment) {
+		return assignment == null ? null : assignment.getRightHandSide();
+	}
 
-  /**
-   * @return the {@link Assignment} of this field accessor for given {@link JavaInfo}. If
-   *         {@link Assignment} was part of {@link Assignment}'s sequence, then this sequence will
-   *         be splitted on separate {@link Statement}'s with {@link Assignment}'s.
-   */
-  private Assignment getFieldAssignmentForUpdate(JavaInfo javaInfo) throws Exception {
-    Assignment targetAssignment = getFieldAssignment(javaInfo);
-    if (targetAssignment != null) {
-      AssignmentsSequence sequence = getAssignmentsSequence(targetAssignment);
-      if (sequence.getAssignments().size() == 1) {
-        return targetAssignment;
-      } else {
-        return splitAssignmentsSequence(javaInfo, targetAssignment, sequence);
-      }
-    }
-    // not found
-    return null;
-  }
+	/**
+	 * @return the {@link Assignment} of this field accessor for given {@link JavaInfo}. If
+	 *         {@link Assignment} was part of {@link Assignment}'s sequence, then this sequence will
+	 *         be splitted on separate {@link Statement}'s with {@link Assignment}'s.
+	 */
+	private Assignment getFieldAssignmentForUpdate(JavaInfo javaInfo) throws Exception {
+		Assignment targetAssignment = getFieldAssignment(javaInfo);
+		if (targetAssignment != null) {
+			AssignmentsSequence sequence = getAssignmentsSequence(targetAssignment);
+			if (sequence.getAssignments().size() == 1) {
+				return targetAssignment;
+			} else {
+				return splitAssignmentsSequence(javaInfo, targetAssignment, sequence);
+			}
+		}
+		// not found
+		return null;
+	}
 
-  private static AssignmentsSequence getAssignmentsSequence(Assignment targetAssignment) {
-    List<Assignment> assignments = Lists.newArrayList();
-    // add assignment's on left side
-    {
-      Assignment leftAssignment = targetAssignment;
-      while (leftAssignment.getParent() instanceof Assignment) {
-        leftAssignment = (Assignment) leftAssignment.getParent();
-        assignments.add(leftAssignment);
-      }
-      Assert.isTrue(
-          leftAssignment.getParent() instanceof ExpressionStatement,
-          "Assignments are expected to be directly in ExpressionStatement, but %s found.",
-          leftAssignment.getParent());
-    }
-    // add target assignment
-    assignments.add(targetAssignment);
-    // add assignments on right side
-    Expression assignedExpression;
-    {
-      Assignment rightAssignment = targetAssignment;
-      while (rightAssignment.getRightHandSide() instanceof Assignment) {
-        rightAssignment = (Assignment) rightAssignment.getRightHandSide();
-        assignments.add(rightAssignment);
-      }
-      // remember assigned expression
-      assignedExpression = rightAssignment.getRightHandSide();
-    }
-    return new AssignmentsSequence(assignments, assignedExpression);
-  }
+	private static AssignmentsSequence getAssignmentsSequence(Assignment targetAssignment) {
+		List<Assignment> assignments = Lists.newArrayList();
+		// add assignment's on left side
+		{
+			Assignment leftAssignment = targetAssignment;
+			while (leftAssignment.getParent() instanceof Assignment) {
+				leftAssignment = (Assignment) leftAssignment.getParent();
+				assignments.add(leftAssignment);
+			}
+			Assert.isTrue(
+					leftAssignment.getParent() instanceof ExpressionStatement,
+					"Assignments are expected to be directly in ExpressionStatement, but %s found.",
+					leftAssignment.getParent());
+		}
+		// add target assignment
+		assignments.add(targetAssignment);
+		// add assignments on right side
+		Expression assignedExpression;
+		{
+			Assignment rightAssignment = targetAssignment;
+			while (rightAssignment.getRightHandSide() instanceof Assignment) {
+				rightAssignment = (Assignment) rightAssignment.getRightHandSide();
+				assignments.add(rightAssignment);
+			}
+			// remember assigned expression
+			assignedExpression = rightAssignment.getRightHandSide();
+		}
+		return new AssignmentsSequence(assignments, assignedExpression);
+	}
 
-  private static Assignment splitAssignmentsSequence(JavaInfo javaInfo,
-      Assignment targetAssignment,
-      AssignmentsSequence sequence) throws Exception {
-    Assignment newTargetAssignment = null;
-    {
-      AstEditor editor = javaInfo.getEditor();
-      String assignedSource = editor.getSource(sequence.getAssignedExpression());
-      Statement targetStatement = AstNodeUtils.getEnclosingStatement(targetAssignment);
-      for (Assignment assignment : sequence.getAssignments()) {
-        String source = editor.getSource(assignment.getLeftHandSide()) + " = " + assignedSource;
-        // add new assignment
-        StatementTarget target = new StatementTarget(targetStatement, false);
-        Assignment newAssignment = (Assignment) javaInfo.addExpressionStatement(target, source);
-        if (assignment == targetAssignment) {
-          newTargetAssignment = newAssignment;
-        }
-        // prepare new statement target
-        targetStatement = AstNodeUtils.getEnclosingStatement(newAssignment);
-      }
-      // remove old statement
-      editor.removeEnclosingStatement(targetAssignment);
-    }
-    // use new target assignment
-    Assert.isNotNull(newTargetAssignment);
-    return newTargetAssignment;
-  }
+	private static Assignment splitAssignmentsSequence(JavaInfo javaInfo,
+			Assignment targetAssignment,
+			AssignmentsSequence sequence) throws Exception {
+		Assignment newTargetAssignment = null;
+		{
+			AstEditor editor = javaInfo.getEditor();
+			String assignedSource = editor.getSource(sequence.getAssignedExpression());
+			Statement targetStatement = AstNodeUtils.getEnclosingStatement(targetAssignment);
+			for (Assignment assignment : sequence.getAssignments()) {
+				String source = editor.getSource(assignment.getLeftHandSide()) + " = " + assignedSource;
+				// add new assignment
+				StatementTarget target = new StatementTarget(targetStatement, false);
+				Assignment newAssignment = (Assignment) javaInfo.addExpressionStatement(target, source);
+				if (assignment == targetAssignment) {
+					newTargetAssignment = newAssignment;
+				}
+				// prepare new statement target
+				targetStatement = AstNodeUtils.getEnclosingStatement(newAssignment);
+			}
+			// remove old statement
+			editor.removeEnclosingStatement(targetAssignment);
+		}
+		// use new target assignment
+		Assert.isNotNull(newTargetAssignment);
+		return newTargetAssignment;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/accessor/IAccessibleExpressionAccessor.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/accessor/IAccessibleExpressionAccessor.java
index a182bc0bb..b8888e0fd 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/accessor/IAccessibleExpressionAccessor.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/accessor/IAccessibleExpressionAccessor.java
@@ -25,11 +25,11 @@
  * @coverage core.model.property.accessor
  */
 public interface IAccessibleExpressionAccessor {
-  /**
-   * @param javaInfo
-   *          the {@link JavaInfo} that has property with this {@link ExpressionAccessor}.
-   *
-   * @return <code>true</code> if this {@link ExpressionAccessor} can be used.
-   */
-  boolean isAccessible(JavaInfo javaInfo);
+	/**
+	 * @param javaInfo
+	 *          the {@link JavaInfo} that has property with this {@link ExpressionAccessor}.
+	 *
+	 * @return <code>true</code> if this {@link ExpressionAccessor} can be used.
+	 */
+	boolean isAccessible(JavaInfo javaInfo);
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/accessor/IExposableExpressionAccessor.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/accessor/IExposableExpressionAccessor.java
index 287f43d9a..2ab577e34 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/accessor/IExposableExpressionAccessor.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/accessor/IExposableExpressionAccessor.java
@@ -20,33 +20,33 @@
  * @coverage core.model.property.accessor
  */
 public interface IExposableExpressionAccessor {
-  /**
-   * @param javaInfo
-   *          the {@link JavaInfo} that has property with this {@link ExpressionAccessor}.
-   *
-   * @return the {@link Class} of property value.
-   */
-  Class<?> getValueClass(JavaInfo javaInfo);
+	/**
+	 * @param javaInfo
+	 *          the {@link JavaInfo} that has property with this {@link ExpressionAccessor}.
+	 *
+	 * @return the {@link Class} of property value.
+	 */
+	Class<?> getValueClass(JavaInfo javaInfo);
 
-  /**
-   * @param javaInfo
-   *          the {@link JavaInfo} that has property with this {@link ExpressionAccessor}.
-   *
-   * @return the code that should be used to access this property. For example for property "text"
-   *         it will return "${componentAccessExpression}getText()". Note that it does not prepends
-   *         this code with component accessing code, this is up to caller.
-   */
-  String getGetterCode(JavaInfo javaInfo) throws Exception;
+	/**
+	 * @param javaInfo
+	 *          the {@link JavaInfo} that has property with this {@link ExpressionAccessor}.
+	 *
+	 * @return the code that should be used to access this property. For example for property "text"
+	 *         it will return "${componentAccessExpression}getText()". Note that it does not prepends
+	 *         this code with component accessing code, this is up to caller.
+	 */
+	String getGetterCode(JavaInfo javaInfo) throws Exception;
 
-  /**
-   * @param javaInfo
-   *          the {@link JavaInfo} that has property with this {@link ExpressionAccessor}.
-   * @param source
-   *          the source of value to assign.
-   *
-   * @return the code that should be used to change this property to given value. For example for
-   *         property "text" and parameter "text" in will return "setText(text)". Note that it does
-   *         not prepends this code with component accessing code, this is up to caller.
-   */
-  String getSetterCode(JavaInfo javaInfo, String source) throws Exception;
+	/**
+	 * @param javaInfo
+	 *          the {@link JavaInfo} that has property with this {@link ExpressionAccessor}.
+	 * @param source
+	 *          the source of value to assign.
+	 *
+	 * @return the code that should be used to change this property to given value. For example for
+	 *         property "text" and parameter "text" in will return "setText(text)". Note that it does
+	 *         not prepends this code with component accessing code, this is up to caller.
+	 */
+	String getSetterCode(JavaInfo javaInfo, String source) throws Exception;
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/accessor/InvocationChildAssociationAccessor.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/accessor/InvocationChildAssociationAccessor.java
index a545aab55..8d0905183 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/accessor/InvocationChildAssociationAccessor.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/accessor/InvocationChildAssociationAccessor.java
@@ -29,55 +29,55 @@
  * @coverage core.model.property.accessor
  */
 public final class InvocationChildAssociationAccessor extends ExpressionAccessor {
-  private final int m_index;
-  private final String m_defaultSource;
+	private final int m_index;
+	private final String m_defaultSource;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public InvocationChildAssociationAccessor(int index, String defaultSource) {
-    m_index = index;
-    m_defaultSource = defaultSource;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public InvocationChildAssociationAccessor(int index, String defaultSource) {
+		m_index = index;
+		m_defaultSource = defaultSource;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ExpressionAccessor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Expression getExpression(JavaInfo javaInfo) throws Exception {
-    MethodInvocation invocation =
-        ((InvocationAssociation) javaInfo.getAssociation()).getInvocation();
-    return DomGenerics.arguments(invocation).get(m_index);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ExpressionAccessor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Expression getExpression(JavaInfo javaInfo) throws Exception {
+		MethodInvocation invocation =
+				((InvocationAssociation) javaInfo.getAssociation()).getInvocation();
+		return DomGenerics.arguments(invocation).get(m_index);
+	}
 
-  @Override
-  public boolean setExpression(JavaInfo javaInfo, String source) throws Exception {
-    // if given source is "null", use default source (but it also can be "null")
-    final String newSource;
-    if (source != null) {
-      newSource = source;
-    } else {
-      newSource = m_defaultSource;
-    }
-    // if we have source to replace current, do this
-    if (newSource != null) {
-      final AstEditor editor = javaInfo.getEditor();
-      final Expression oldExpression = getExpression(javaInfo);
-      if (!editor.getSource(oldExpression).equals(source)) {
-        ExecutionUtils.run(javaInfo, new RunnableEx() {
-          @Override
-          public void run() throws Exception {
-            editor.replaceExpression(oldExpression, newSource);
-          }
-        });
-        return true;
-      }
-    }
-    // no changes
-    return false;
-  }
+	@Override
+	public boolean setExpression(JavaInfo javaInfo, String source) throws Exception {
+		// if given source is "null", use default source (but it also can be "null")
+		final String newSource;
+		if (source != null) {
+			newSource = source;
+		} else {
+			newSource = m_defaultSource;
+		}
+		// if we have source to replace current, do this
+		if (newSource != null) {
+			final AstEditor editor = javaInfo.getEditor();
+			final Expression oldExpression = getExpression(javaInfo);
+			if (!editor.getSource(oldExpression).equals(source)) {
+				ExecutionUtils.run(javaInfo, new RunnableEx() {
+					@Override
+					public void run() throws Exception {
+						editor.replaceExpression(oldExpression, newSource);
+					}
+				});
+				return true;
+			}
+		}
+		// no changes
+		return false;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/accessor/MethodInvocationAccessor.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/accessor/MethodInvocationAccessor.java
index ccfc7648a..9a43a8fc6 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/accessor/MethodInvocationAccessor.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/accessor/MethodInvocationAccessor.java
@@ -35,93 +35,93 @@
  * @coverage core.model.property.accessor
  */
 public final class MethodInvocationAccessor extends ExpressionAccessor {
-  private final Method m_method;
-  private final String m_methodSignature;
+	private final Method m_method;
+	private final String m_methodSignature;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public MethodInvocationAccessor(Method setMethod) throws Exception {
-    m_method = setMethod;
-    m_methodSignature = ReflectionUtils.getMethodSignature(m_method);
-    // initialize IAdaptable
-    m_accessibleAccessor = AccessorUtils.IAccessibleExpressionAccessor_forMethod(m_method);
-    m_tooltipProvider = AccessorUtils.PropertyTooltipProvider_forMethod(m_method);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public MethodInvocationAccessor(Method setMethod) throws Exception {
+		m_method = setMethod;
+		m_methodSignature = ReflectionUtils.getMethodSignature(m_method);
+		// initialize IAdaptable
+		m_accessibleAccessor = AccessorUtils.IAccessibleExpressionAccessor_forMethod(m_method);
+		m_tooltipProvider = AccessorUtils.PropertyTooltipProvider_forMethod(m_method);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ExpressionAccessor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Expression getExpression(JavaInfo javaInfo) throws Exception {
-    return getMethodInvocation(javaInfo);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ExpressionAccessor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Expression getExpression(JavaInfo javaInfo) throws Exception {
+		return getMethodInvocation(javaInfo);
+	}
 
-  @Override
-  public boolean setExpression(final JavaInfo javaInfo, final String source) throws Exception {
-    final MethodInvocation invocation = getMethodInvocation(javaInfo);
-    if (invocation != null) {
-      final AstEditor editor = javaInfo.getEditor();
-      if (source == null) {
-        ExecutionUtils.run(javaInfo, new RunnableEx() {
-          @Override
-          public void run() throws Exception {
-            editor.removeEnclosingStatement(invocation);
-          }
-        });
-      } else {
-        ExecutionUtils.run(javaInfo, new RunnableEx() {
-          @Override
-          public void run() throws Exception {
-            editor.replaceInvocationArguments(invocation, ImmutableList.of(source));
-          }
-        });
-      }
-    } else if (source != null) {
-      ExecutionUtils.run(javaInfo, new RunnableEx() {
-        @Override
-        public void run() throws Exception {
-          javaInfo.addMethodInvocation(m_methodSignature, source);
-        }
-      });
-    }
-    // success
-    return true;
-  }
+	@Override
+	public boolean setExpression(final JavaInfo javaInfo, final String source) throws Exception {
+		final MethodInvocation invocation = getMethodInvocation(javaInfo);
+		if (invocation != null) {
+			final AstEditor editor = javaInfo.getEditor();
+			if (source == null) {
+				ExecutionUtils.run(javaInfo, new RunnableEx() {
+					@Override
+					public void run() throws Exception {
+						editor.removeEnclosingStatement(invocation);
+					}
+				});
+			} else {
+				ExecutionUtils.run(javaInfo, new RunnableEx() {
+					@Override
+					public void run() throws Exception {
+						editor.replaceInvocationArguments(invocation, ImmutableList.of(source));
+					}
+				});
+			}
+		} else if (source != null) {
+			ExecutionUtils.run(javaInfo, new RunnableEx() {
+				@Override
+				public void run() throws Exception {
+					javaInfo.addMethodInvocation(m_methodSignature, source);
+				}
+			});
+		}
+		// success
+		return true;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IAdaptable
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final IAccessibleExpressionAccessor m_accessibleAccessor;
-  private final PropertyTooltipProvider m_tooltipProvider;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IAdaptable
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final IAccessibleExpressionAccessor m_accessibleAccessor;
+	private final PropertyTooltipProvider m_tooltipProvider;
 
-  @Override
-  public <T> T getAdapter(Class<T> adapter) {
-    if (adapter == IAccessibleExpressionAccessor.class) {
-      return adapter.cast(m_accessibleAccessor);
-    }
-    if (adapter == PropertyTooltipProvider.class) {
-      return adapter.cast(m_tooltipProvider);
-    }
-    // other
-    return super.getAdapter(adapter);
-  }
+	@Override
+	public <T> T getAdapter(Class<T> adapter) {
+		if (adapter == IAccessibleExpressionAccessor.class) {
+			return adapter.cast(m_accessibleAccessor);
+		}
+		if (adapter == PropertyTooltipProvider.class) {
+			return adapter.cast(m_tooltipProvider);
+		}
+		// other
+		return super.getAdapter(adapter);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link MethodInvocation} of this setter for given {@link JavaInfo}.
-   */
-  private MethodInvocation getMethodInvocation(JavaInfo javaInfo) throws Exception {
-    return javaInfo.getMethodInvocation(m_methodSignature);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link MethodInvocation} of this setter for given {@link JavaInfo}.
+	 */
+	private MethodInvocation getMethodInvocation(JavaInfo javaInfo) throws Exception {
+		return javaInfo.getMethodInvocation(m_methodSignature);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/accessor/MethodInvocationArgumentAccessor.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/accessor/MethodInvocationArgumentAccessor.java
index e40305b63..926e545e6 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/accessor/MethodInvocationArgumentAccessor.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/accessor/MethodInvocationArgumentAccessor.java
@@ -42,132 +42,132 @@
  * @coverage core.model.property.accessor
  */
 public final class MethodInvocationArgumentAccessor extends ExpressionAccessor {
-  private final Method m_method;
-  private final String m_methodSignature;
-  private final int m_index;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public MethodInvocationArgumentAccessor(Method method, int index) {
-    m_method = method;
-    m_methodSignature = ReflectionUtils.getMethodSignature(m_method);
-    m_index = index;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ExpressionAccessor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Expression getExpression(JavaInfo javaInfo) throws Exception {
-    MethodInvocation invocation = getMethodInvocation(javaInfo);
-    return getArgumentExpression(invocation);
-  }
-
-  @Override
-  public boolean setExpression(final JavaInfo javaInfo, final String source) throws Exception {
-    final List<String> defaultArguments = getMethodDescription(javaInfo).getDefaultArguments();
-    // modify expression
-    final MethodInvocation invocation = getMethodInvocation(javaInfo);
-    if (invocation != null) {
-      final AstEditor editor = javaInfo.getEditor();
-      final Expression oldArgumentExpression = getArgumentExpression(invocation);
-      final String argumentSource = source != null ? source : defaultArguments.get(m_index);
-      if (!isSameSource(editor, oldArgumentExpression, argumentSource)) {
-        ExecutionUtils.run(javaInfo, new RunnableEx() {
-          @Override
-          public void run() throws Exception {
-            editor.replaceExpression(oldArgumentExpression, argumentSource);
-            if (isDefaultArguments(javaInfo, invocation)) {
-              editor.removeEnclosingStatement(invocation);
-            }
-          }
-        });
-      }
-    } else if (source != null) {
-      ExecutionUtils.run(javaInfo, new RunnableEx() {
-        @Override
-        public void run() throws Exception {
-          String argumentsSource = getNewInvocationArguments();
-          javaInfo.addMethodInvocation(m_methodSignature, argumentsSource);
-        }
-
-        private String getNewInvocationArguments() {
-          List<String> arguments = Lists.newArrayList(defaultArguments);
-          arguments.set(m_index, source);
-          return StringUtils.join(arguments.iterator(), ", ");
-        }
-      });
-    }
-    // success
-    return true;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link MethodInvocation} of this setter for given {@link JavaInfo}.
-   */
-  private MethodInvocation getMethodInvocation(JavaInfo javaInfo) throws Exception {
-    return javaInfo.getMethodInvocation(m_methodSignature);
-  }
-
-  /**
-   * @return the {@link Expression} of given {@link MethodInvocation}.
-   */
-  private Expression getArgumentExpression(MethodInvocation invocation) {
-    return invocation != null ? DomGenerics.arguments(invocation).get(m_index) : null;
-  }
-
-  private MethodDescription getMethodDescription(JavaInfo javaInfo) {
-    MethodDescription methodDescription = javaInfo.getDescription().getMethod(m_methodSignature);
-    Assert.isNotNull(
-        methodDescription,
-        "Can not find description for method with signature %s",
-        m_methodSignature);
-    return methodDescription;
-  }
-
-  private boolean isDefaultArguments(JavaInfo javaInfo, MethodInvocation invocation) {
-    AstEditor editor = javaInfo.getEditor();
-    boolean allDefault = true;
-    List<ParameterDescription> parameters = getMethodDescription(javaInfo).getParameters();
-    List<Expression> arguments = DomGenerics.arguments(invocation);
-    for (ParameterDescription parameter : parameters) {
-      int index = parameter.getIndex();
-      Expression argument = arguments.get(index);
-      allDefault &= isDefaultArgument(editor, argument, parameter);
-    }
-    return allDefault;
-  }
-
-  private static boolean isDefaultArgument(AstEditor editor,
-      Expression argument,
-      ParameterDescription parameter) {
-    String defaultArgumentSource = parameter.getDefaultSource();
-    return isSameSource(editor, argument, defaultArgumentSource);
-  }
-
-  private static boolean isSameSource(AstEditor editor, Expression expression, String expectedSource) {
-    String currentArgumentSource = getNormalizedSource(editor, expression);
-    return expectedSource.equals(currentArgumentSource);
-  }
-
-  private static String getNormalizedSource(AstEditor editor, Expression expression) {
-    if (expression instanceof CastExpression) {
-      CastExpression castExpression = (CastExpression) expression;
-      if (castExpression.getExpression() instanceof NullLiteral) {
-        String qualifiedTypeName = AstNodeUtils.getFullyQualifiedName(expression, false);
-        return MessageFormat.format("({0}) null", qualifiedTypeName);
-      }
-    }
-    return editor.getSource(expression);
-  }
+	private final Method m_method;
+	private final String m_methodSignature;
+	private final int m_index;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public MethodInvocationArgumentAccessor(Method method, int index) {
+		m_method = method;
+		m_methodSignature = ReflectionUtils.getMethodSignature(m_method);
+		m_index = index;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ExpressionAccessor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Expression getExpression(JavaInfo javaInfo) throws Exception {
+		MethodInvocation invocation = getMethodInvocation(javaInfo);
+		return getArgumentExpression(invocation);
+	}
+
+	@Override
+	public boolean setExpression(final JavaInfo javaInfo, final String source) throws Exception {
+		final List<String> defaultArguments = getMethodDescription(javaInfo).getDefaultArguments();
+		// modify expression
+		final MethodInvocation invocation = getMethodInvocation(javaInfo);
+		if (invocation != null) {
+			final AstEditor editor = javaInfo.getEditor();
+			final Expression oldArgumentExpression = getArgumentExpression(invocation);
+			final String argumentSource = source != null ? source : defaultArguments.get(m_index);
+			if (!isSameSource(editor, oldArgumentExpression, argumentSource)) {
+				ExecutionUtils.run(javaInfo, new RunnableEx() {
+					@Override
+					public void run() throws Exception {
+						editor.replaceExpression(oldArgumentExpression, argumentSource);
+						if (isDefaultArguments(javaInfo, invocation)) {
+							editor.removeEnclosingStatement(invocation);
+						}
+					}
+				});
+			}
+		} else if (source != null) {
+			ExecutionUtils.run(javaInfo, new RunnableEx() {
+				@Override
+				public void run() throws Exception {
+					String argumentsSource = getNewInvocationArguments();
+					javaInfo.addMethodInvocation(m_methodSignature, argumentsSource);
+				}
+
+				private String getNewInvocationArguments() {
+					List<String> arguments = Lists.newArrayList(defaultArguments);
+					arguments.set(m_index, source);
+					return StringUtils.join(arguments.iterator(), ", ");
+				}
+			});
+		}
+		// success
+		return true;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link MethodInvocation} of this setter for given {@link JavaInfo}.
+	 */
+	private MethodInvocation getMethodInvocation(JavaInfo javaInfo) throws Exception {
+		return javaInfo.getMethodInvocation(m_methodSignature);
+	}
+
+	/**
+	 * @return the {@link Expression} of given {@link MethodInvocation}.
+	 */
+	private Expression getArgumentExpression(MethodInvocation invocation) {
+		return invocation != null ? DomGenerics.arguments(invocation).get(m_index) : null;
+	}
+
+	private MethodDescription getMethodDescription(JavaInfo javaInfo) {
+		MethodDescription methodDescription = javaInfo.getDescription().getMethod(m_methodSignature);
+		Assert.isNotNull(
+				methodDescription,
+				"Can not find description for method with signature %s",
+				m_methodSignature);
+		return methodDescription;
+	}
+
+	private boolean isDefaultArguments(JavaInfo javaInfo, MethodInvocation invocation) {
+		AstEditor editor = javaInfo.getEditor();
+		boolean allDefault = true;
+		List<ParameterDescription> parameters = getMethodDescription(javaInfo).getParameters();
+		List<Expression> arguments = DomGenerics.arguments(invocation);
+		for (ParameterDescription parameter : parameters) {
+			int index = parameter.getIndex();
+			Expression argument = arguments.get(index);
+			allDefault &= isDefaultArgument(editor, argument, parameter);
+		}
+		return allDefault;
+	}
+
+	private static boolean isDefaultArgument(AstEditor editor,
+			Expression argument,
+			ParameterDescription parameter) {
+		String defaultArgumentSource = parameter.getDefaultSource();
+		return isSameSource(editor, argument, defaultArgumentSource);
+	}
+
+	private static boolean isSameSource(AstEditor editor, Expression expression, String expectedSource) {
+		String currentArgumentSource = getNormalizedSource(editor, expression);
+		return expectedSource.equals(currentArgumentSource);
+	}
+
+	private static String getNormalizedSource(AstEditor editor, Expression expression) {
+		if (expression instanceof CastExpression) {
+			CastExpression castExpression = (CastExpression) expression;
+			if (castExpression.getExpression() instanceof NullLiteral) {
+				String qualifiedTypeName = AstNodeUtils.getFullyQualifiedName(expression, false);
+				return MessageFormat.format("({0}) null", qualifiedTypeName);
+			}
+		}
+		return editor.getSource(expression);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/accessor/SetterAccessor.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/accessor/SetterAccessor.java
index eafeb6258..a196b2155 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/accessor/SetterAccessor.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/accessor/SetterAccessor.java
@@ -34,194 +34,194 @@
  * @coverage core.model.property.accessor
  */
 public final class SetterAccessor extends ExpressionAccessor {
-  private final Method m_setter;
-  private final String m_setterSignature;
-  private Method m_getter;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SetterAccessor(Method setter, Method getter) throws Exception {
-    m_setter = setter;
-    m_setterSignature = ReflectionUtils.getMethodSignature(m_setter);
-    // initialize IAdaptable
-    m_accessibleAccessor = AccessorUtils.IAccessibleExpressionAccessor_forMethod(m_setter);
-    m_tooltipProvider = AccessorUtils.PropertyTooltipProvider_forMethod(m_setter);
-    // getter
-    m_getter = getter;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public Method getSetter() {
-    return m_setter;
-  }
-
-  public Method getGetter() {
-    return m_getter;
-  }
-
-  public void setGetter(Method getter) {
-    m_getter = getter;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Visiting
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void visit(JavaInfo javaInfo, int state) throws Exception {
-    super.visit(javaInfo, state);
-    if (isTimeToGetDefaultValue(javaInfo, state)) {
-      javaInfo.putArbitraryValue(this, askDefaultValue(javaInfo));
-    }
-  }
-
-  private boolean isTimeToGetDefaultValue(JavaInfo javaInfo, int state) {
-    return state == STATE_OBJECT_READY;
-  }
-
-  private Object askDefaultValue(final JavaInfo javaInfo) throws Exception {
-    if (m_getter != null && isDefaultEnabled(javaInfo)) {
-      return ExecutionUtils.runObjectIgnore(new RunnableObjectEx<Object>() {
-        @Override
-        public Object runObject() throws Exception {
-          return m_getter.invoke(javaInfo.getObject());
-        }
-      }, Property.UNKNOWN_VALUE);
-    } else {
-      return Property.UNKNOWN_VALUE;
-    }
-  }
-
-  private boolean isDefaultEnabled(JavaInfo javaInfo) {
-    if (javaInfo.getCreationSupport() instanceof ThisCreationSupport) {
-      if (JavaInfoUtils.hasTrueParameter(javaInfo, NO_DEFAULT_VALUES_THIS_TAG)) {
-        return false;
-      }
-    }
-    return m_propertyDescription == null || !m_propertyDescription.hasTrueTag(NO_DEFAULT_VALUE_TAG);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ExpressionAccessor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Expression getExpression(JavaInfo javaInfo) throws Exception {
-    MethodInvocation invocation = getMethodInvocation(javaInfo);
-    return getExpression(invocation);
-  }
-
-  @Override
-  public boolean setExpression(final JavaInfo javaInfo, final String source) throws Exception {
-    // modify expression
-    final MethodInvocation invocation = getMethodInvocation(javaInfo);
-    if (invocation != null) {
-      final AstEditor editor = javaInfo.getEditor();
-      if (source == null) {
-        ExecutionUtils.run(javaInfo, new RunnableEx() {
-          @Override
-          public void run() throws Exception {
-            editor.removeEnclosingStatement(invocation);
-          }
-        });
-      } else {
-        final Expression oldExpression = getExpression(invocation);
-        if (!editor.getSource(oldExpression).equals(source)) {
-          ExecutionUtils.run(javaInfo, new RunnableEx() {
-            @Override
-            public void run() throws Exception {
-              javaInfo.replaceExpression(oldExpression, source);
-            }
-          });
-        }
-      }
-    } else if (source != null) {
-      ExecutionUtils.run(javaInfo, new RunnableEx() {
-        @Override
-        public void run() throws Exception {
-          javaInfo.addMethodInvocation(m_setterSignature, source);
-        }
-      });
-    }
-    // success
-    return true;
-  }
-
-  @Override
-  public Object getDefaultValue(JavaInfo javaInfo) throws Exception {
-    return javaInfo.getArbitraryValue(this);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IAdaptable
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final IAccessibleExpressionAccessor m_accessibleAccessor;
-  private final PropertyTooltipProvider m_tooltipProvider;
-
-  @Override
-  public <T> T getAdapter(Class<T> adapter) {
-    if (adapter == IAccessibleExpressionAccessor.class) {
-      return adapter.cast(m_accessibleAccessor);
-    }
-    if (adapter == IExposableExpressionAccessor.class) {
-      return adapter.cast(m_exposableAccessor);
-    }
-    if (adapter == PropertyTooltipProvider.class) {
-      return adapter.cast(m_tooltipProvider);
-    }
-    // other
-    return super.getAdapter(adapter);
-  }
-
-  /**
-   * Implementation of {@link IExposableExpressionAccessor}.
-   */
-  private final IExposableExpressionAccessor m_exposableAccessor =
-      new IExposableExpressionAccessor() {
-        @Override
-        public Class<?> getValueClass(JavaInfo javaInfo) {
-          return m_setter.getParameterTypes()[0];
-        }
-
-        @Override
-        public String getGetterCode(JavaInfo javaInfo) throws Exception {
-          return m_getter.getName() + "()";
-        }
-
-        @Override
-        public String getSetterCode(JavaInfo javaInfo, String source) throws Exception {
-          return m_setter.getName() + "(" + source + ")";
-        }
-      };
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link MethodInvocation} of this setter for given {@link JavaInfo}.
-   */
-  private MethodInvocation getMethodInvocation(JavaInfo javaInfo) throws Exception {
-    return javaInfo.getMethodInvocation(m_setterSignature);
-  }
-
-  /**
-   * @return the sole argument (because {@link SetterAccessor} is only for such methods) of given
-   *         {@link MethodInvocation}.
-   */
-  private Expression getExpression(MethodInvocation invocation) {
-    return invocation != null ? (Expression) invocation.arguments().get(0) : null;
-  }
+	private final Method m_setter;
+	private final String m_setterSignature;
+	private Method m_getter;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SetterAccessor(Method setter, Method getter) throws Exception {
+		m_setter = setter;
+		m_setterSignature = ReflectionUtils.getMethodSignature(m_setter);
+		// initialize IAdaptable
+		m_accessibleAccessor = AccessorUtils.IAccessibleExpressionAccessor_forMethod(m_setter);
+		m_tooltipProvider = AccessorUtils.PropertyTooltipProvider_forMethod(m_setter);
+		// getter
+		m_getter = getter;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public Method getSetter() {
+		return m_setter;
+	}
+
+	public Method getGetter() {
+		return m_getter;
+	}
+
+	public void setGetter(Method getter) {
+		m_getter = getter;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Visiting
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void visit(JavaInfo javaInfo, int state) throws Exception {
+		super.visit(javaInfo, state);
+		if (isTimeToGetDefaultValue(javaInfo, state)) {
+			javaInfo.putArbitraryValue(this, askDefaultValue(javaInfo));
+		}
+	}
+
+	private boolean isTimeToGetDefaultValue(JavaInfo javaInfo, int state) {
+		return state == STATE_OBJECT_READY;
+	}
+
+	private Object askDefaultValue(final JavaInfo javaInfo) throws Exception {
+		if (m_getter != null && isDefaultEnabled(javaInfo)) {
+			return ExecutionUtils.runObjectIgnore(new RunnableObjectEx<Object>() {
+				@Override
+				public Object runObject() throws Exception {
+					return m_getter.invoke(javaInfo.getObject());
+				}
+			}, Property.UNKNOWN_VALUE);
+		} else {
+			return Property.UNKNOWN_VALUE;
+		}
+	}
+
+	private boolean isDefaultEnabled(JavaInfo javaInfo) {
+		if (javaInfo.getCreationSupport() instanceof ThisCreationSupport) {
+			if (JavaInfoUtils.hasTrueParameter(javaInfo, NO_DEFAULT_VALUES_THIS_TAG)) {
+				return false;
+			}
+		}
+		return m_propertyDescription == null || !m_propertyDescription.hasTrueTag(NO_DEFAULT_VALUE_TAG);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ExpressionAccessor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Expression getExpression(JavaInfo javaInfo) throws Exception {
+		MethodInvocation invocation = getMethodInvocation(javaInfo);
+		return getExpression(invocation);
+	}
+
+	@Override
+	public boolean setExpression(final JavaInfo javaInfo, final String source) throws Exception {
+		// modify expression
+		final MethodInvocation invocation = getMethodInvocation(javaInfo);
+		if (invocation != null) {
+			final AstEditor editor = javaInfo.getEditor();
+			if (source == null) {
+				ExecutionUtils.run(javaInfo, new RunnableEx() {
+					@Override
+					public void run() throws Exception {
+						editor.removeEnclosingStatement(invocation);
+					}
+				});
+			} else {
+				final Expression oldExpression = getExpression(invocation);
+				if (!editor.getSource(oldExpression).equals(source)) {
+					ExecutionUtils.run(javaInfo, new RunnableEx() {
+						@Override
+						public void run() throws Exception {
+							javaInfo.replaceExpression(oldExpression, source);
+						}
+					});
+				}
+			}
+		} else if (source != null) {
+			ExecutionUtils.run(javaInfo, new RunnableEx() {
+				@Override
+				public void run() throws Exception {
+					javaInfo.addMethodInvocation(m_setterSignature, source);
+				}
+			});
+		}
+		// success
+		return true;
+	}
+
+	@Override
+	public Object getDefaultValue(JavaInfo javaInfo) throws Exception {
+		return javaInfo.getArbitraryValue(this);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IAdaptable
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final IAccessibleExpressionAccessor m_accessibleAccessor;
+	private final PropertyTooltipProvider m_tooltipProvider;
+
+	@Override
+	public <T> T getAdapter(Class<T> adapter) {
+		if (adapter == IAccessibleExpressionAccessor.class) {
+			return adapter.cast(m_accessibleAccessor);
+		}
+		if (adapter == IExposableExpressionAccessor.class) {
+			return adapter.cast(m_exposableAccessor);
+		}
+		if (adapter == PropertyTooltipProvider.class) {
+			return adapter.cast(m_tooltipProvider);
+		}
+		// other
+		return super.getAdapter(adapter);
+	}
+
+	/**
+	 * Implementation of {@link IExposableExpressionAccessor}.
+	 */
+	private final IExposableExpressionAccessor m_exposableAccessor =
+			new IExposableExpressionAccessor() {
+		@Override
+		public Class<?> getValueClass(JavaInfo javaInfo) {
+			return m_setter.getParameterTypes()[0];
+		}
+
+		@Override
+		public String getGetterCode(JavaInfo javaInfo) throws Exception {
+			return m_getter.getName() + "()";
+		}
+
+		@Override
+		public String getSetterCode(JavaInfo javaInfo, String source) throws Exception {
+			return m_setter.getName() + "(" + source + ")";
+		}
+	};
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link MethodInvocation} of this setter for given {@link JavaInfo}.
+	 */
+	private MethodInvocation getMethodInvocation(JavaInfo javaInfo) throws Exception {
+		return javaInfo.getMethodInvocation(m_setterSignature);
+	}
+
+	/**
+	 * @return the sole argument (because {@link SetterAccessor} is only for such methods) of given
+	 *         {@link MethodInvocation}.
+	 */
+	private Expression getExpression(MethodInvocation invocation) {
+		return invocation != null ? (Expression) invocation.arguments().get(0) : null;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/accessor/SuperConstructorAccessor.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/accessor/SuperConstructorAccessor.java
index 2fd4da79e..ca84e488e 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/accessor/SuperConstructorAccessor.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/accessor/SuperConstructorAccessor.java
@@ -27,57 +27,57 @@
  * @coverage core.model.property.accessor
  */
 public final class SuperConstructorAccessor extends ExpressionAccessor {
-  private final SuperConstructorInvocation m_invocation;
-  private final int m_index;
-  private final String m_defaultSource;
+	private final SuperConstructorInvocation m_invocation;
+	private final int m_index;
+	private final String m_defaultSource;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SuperConstructorAccessor(SuperConstructorInvocation invocation,
-      int index,
-      String defaultSource) {
-    m_invocation = invocation;
-    m_index = index;
-    m_defaultSource = defaultSource;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SuperConstructorAccessor(SuperConstructorInvocation invocation,
+			int index,
+			String defaultSource) {
+		m_invocation = invocation;
+		m_index = index;
+		m_defaultSource = defaultSource;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ExpressionAccessor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Expression getExpression(JavaInfo javaInfo) throws Exception {
-    return DomGenerics.arguments(m_invocation).get(m_index);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ExpressionAccessor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Expression getExpression(JavaInfo javaInfo) throws Exception {
+		return DomGenerics.arguments(m_invocation).get(m_index);
+	}
 
-  @Override
-  public boolean setExpression(JavaInfo javaInfo, String source) throws Exception {
-    // if given source is "null", use default source (but it also can be "null")
-    final String newSource;
-    if (source != null) {
-      newSource = source;
-    } else {
-      newSource = m_defaultSource;
-    }
-    // if we have source to replace current, do this
-    if (newSource != null) {
-      final AstEditor editor = javaInfo.getEditor();
-      final Expression oldExpression = getExpression(javaInfo);
-      if (!editor.getSource(oldExpression).equals(source)) {
-        ExecutionUtils.run(javaInfo, new RunnableEx() {
-          @Override
-          public void run() throws Exception {
-            editor.replaceExpression(oldExpression, newSource);
-          }
-        });
-        return true;
-      }
-    }
-    // no changes
-    return false;
-  }
+	@Override
+	public boolean setExpression(JavaInfo javaInfo, String source) throws Exception {
+		// if given source is "null", use default source (but it also can be "null")
+		final String newSource;
+		if (source != null) {
+			newSource = source;
+		} else {
+			newSource = m_defaultSource;
+		}
+		// if we have source to replace current, do this
+		if (newSource != null) {
+			final AstEditor editor = javaInfo.getEditor();
+			final Expression oldExpression = getExpression(javaInfo);
+			if (!editor.getSource(oldExpression).equals(source)) {
+				ExecutionUtils.run(javaInfo, new RunnableEx() {
+					@Override
+					public void run() throws Exception {
+						editor.replaceExpression(oldExpression, newSource);
+					}
+				});
+				return true;
+			}
+		}
+		// no changes
+		return false;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/configurable/StringsAddPropertyEditor.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/configurable/StringsAddPropertyEditor.java
index fd74ec66b..70e9394a2 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/configurable/StringsAddPropertyEditor.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/configurable/StringsAddPropertyEditor.java
@@ -51,118 +51,118 @@
  * @coverage core.model.property.editor
  */
 public final class StringsAddPropertyEditor extends TextDialogPropertyEditor
-    implements
-      IConfigurablePropertyObject {
-  private String m_addMethodSignature;
-  private String[] m_removeMethodsSignatures;
+implements
+IConfigurablePropertyObject {
+	private String m_addMethodSignature;
+	private String[] m_removeMethodsSignatures;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getText(Property property) throws Exception {
-    String[] items = getItems(property);
-    return "[" + StringUtils.join(items, ",") + "]";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getText(Property property) throws Exception {
+		String[] items = getItems(property);
+		return "[" + StringUtils.join(items, ",") + "]";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Items
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the items specified in value of given {@link Property}.
-   */
-  String[] getItems(Property _property) throws Exception {
-    JavaInfo javaInfo = ((JavaProperty) _property).getJavaInfo();
-    // prepare "add" invocations
-    List<MethodInvocation> invocations;
-    {
-      invocations = javaInfo.getMethodInvocations(m_addMethodSignature);
-      ExecutionFlowDescription flowDescription =
-          EditorState.get(javaInfo.getEditor()).getFlowDescription();
-      JavaInfoUtils.sortNodesByFlow(flowDescription, false, invocations);
-    }
-    // fill items
-    List<String> items = Lists.newArrayList();
-    for (MethodInvocation invocation : invocations) {
-      Expression itemExpression = DomGenerics.arguments(invocation).get(0);
-      String item = (String) JavaInfoEvaluationHelper.getValue(itemExpression);
-      items.add(item);
-    }
-    // return as array
-    return items.toArray(new String[items.size()]);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Items
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the items specified in value of given {@link Property}.
+	 */
+	String[] getItems(Property _property) throws Exception {
+		JavaInfo javaInfo = ((JavaProperty) _property).getJavaInfo();
+		// prepare "add" invocations
+		List<MethodInvocation> invocations;
+		{
+			invocations = javaInfo.getMethodInvocations(m_addMethodSignature);
+			ExecutionFlowDescription flowDescription =
+					EditorState.get(javaInfo.getEditor()).getFlowDescription();
+			JavaInfoUtils.sortNodesByFlow(flowDescription, false, invocations);
+		}
+		// fill items
+		List<String> items = Lists.newArrayList();
+		for (MethodInvocation invocation : invocations) {
+			Expression itemExpression = DomGenerics.arguments(invocation).get(0);
+			String item = (String) JavaInfoEvaluationHelper.getValue(itemExpression);
+			items.add(item);
+		}
+		// return as array
+		return items.toArray(new String[items.size()]);
+	}
 
-  /**
-   * Sets new items into given {@link Property}.
-   */
-  void setItems(Property _property, final String[] items) throws Exception {
-    final JavaInfo javaInfo = ((JavaProperty) _property).getJavaInfo();
-    ExecutionUtils.run(javaInfo, new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        setItems0(items, javaInfo);
-      }
-    });
-  }
+	/**
+	 * Sets new items into given {@link Property}.
+	 */
+	void setItems(Property _property, final String[] items) throws Exception {
+		final JavaInfo javaInfo = ((JavaProperty) _property).getJavaInfo();
+		ExecutionUtils.run(javaInfo, new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				setItems0(items, javaInfo);
+			}
+		});
+	}
 
-  private void setItems0(String[] items, JavaInfo javaInfo) throws Exception {
-    // remove existing invocations
-    javaInfo.removeMethodInvocations(m_addMethodSignature);
-    for (String removeMethodSignature : m_removeMethodsSignatures) {
-      javaInfo.removeMethodInvocations(removeMethodSignature);
-    }
-    // add "add" invocations
-    for (int i = items.length - 1; i >= 0; i--) {
-      String item = items[i];
-      String itemSource = StringConverter.INSTANCE.toJavaSource(javaInfo, item);
-      javaInfo.addMethodInvocation(m_addMethodSignature, itemSource);
-    }
-  }
+	private void setItems0(String[] items, JavaInfo javaInfo) throws Exception {
+		// remove existing invocations
+		javaInfo.removeMethodInvocations(m_addMethodSignature);
+		for (String removeMethodSignature : m_removeMethodsSignatures) {
+			javaInfo.removeMethodInvocations(removeMethodSignature);
+		}
+		// add "add" invocations
+		for (int i = items.length - 1; i >= 0; i--) {
+			String item = items[i];
+			String itemSource = StringConverter.INSTANCE.toJavaSource(javaInfo, item);
+			javaInfo.addMethodInvocation(m_addMethodSignature, itemSource);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void openDialog(Property property) throws Exception {
-    StringsDialog itemsDialog =
-        new StringsDialog(DesignerPlugin.getShell(),
-            DesignerPlugin.getDefault(),
-            property.getTitle(),
-            "String items:",
-            "Each line in the above text field represents a single item.");
-    itemsDialog.setItems(getItems(property));
-    // open dialog
-    if (itemsDialog.open() == Window.OK) {
-      String[] items = itemsDialog.getItems();
-      setItems(property, items);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void openDialog(Property property) throws Exception {
+		StringsDialog itemsDialog =
+				new StringsDialog(DesignerPlugin.getShell(),
+						DesignerPlugin.getDefault(),
+						property.getTitle(),
+						"String items:",
+						"Each line in the above text field represents a single item.");
+		itemsDialog.setItems(getItems(property));
+		// open dialog
+		if (itemsDialog.open() == Window.OK) {
+			String[] items = itemsDialog.getItems();
+			setItems(property, items);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IConfigurablePropertyObject
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void configure(EditorState state, Map<String, Object> parameters) throws Exception {
-    {
-      String addMethodName = (String) parameters.get("addMethod");
-      Assert.isNotNull(addMethodName, "No 'addMethod' parameter in %s.", parameters);
-      m_addMethodSignature = addMethodName + "(java.lang.String)";
-    }
-    {
-      String removeMethodsString = (String) parameters.get("removeMethods");
-      if (removeMethodsString != null) {
-        m_removeMethodsSignatures = StringUtils.split(removeMethodsString);
-      } else {
-        m_removeMethodsSignatures = ArrayUtils.EMPTY_STRING_ARRAY;
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IConfigurablePropertyObject
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void configure(EditorState state, Map<String, Object> parameters) throws Exception {
+		{
+			String addMethodName = (String) parameters.get("addMethod");
+			Assert.isNotNull(addMethodName, "No 'addMethod' parameter in %s.", parameters);
+			m_addMethodSignature = addMethodName + "(java.lang.String)";
+		}
+		{
+			String removeMethodsString = (String) parameters.get("removeMethods");
+			if (removeMethodsString != null) {
+				m_removeMethodsSignatures = StringUtils.split(removeMethodsString);
+			} else {
+				m_removeMethodsSignatures = ArrayUtils.EMPTY_STRING_ARRAY;
+			}
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/configurable/StringsAddPropertyFactory.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/configurable/StringsAddPropertyFactory.java
index e370fa65c..f7807d109 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/configurable/StringsAddPropertyFactory.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/configurable/StringsAddPropertyFactory.java
@@ -26,69 +26,69 @@
  * @coverage core.model.property.editor
  */
 public final class StringsAddPropertyFactory implements IConfigurablePropertyFactory {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IConfigurablePropertyFactory
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Property create(JavaInfo javaInfo, ConfigurablePropertyDescription description)
-      throws Exception {
-    Property property = new ConfigurableProperty(javaInfo, description.getTitle());
-    if (property.getEditor() instanceof IConfigurablePropertyObject) {
-      EditorState editorState = EditorState.get(javaInfo.getEditor());
-      IConfigurablePropertyObject editor = (IConfigurablePropertyObject) property.getEditor();
-      description.configure(editorState, editor);
-    }
-    return property;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IConfigurablePropertyFactory
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Property create(JavaInfo javaInfo, ConfigurablePropertyDescription description)
+			throws Exception {
+		Property property = new ConfigurableProperty(javaInfo, description.getTitle());
+		if (property.getEditor() instanceof IConfigurablePropertyObject) {
+			EditorState editorState = EditorState.get(javaInfo.getEditor());
+			IConfigurablePropertyObject editor = (IConfigurablePropertyObject) property.getEditor();
+			description.configure(editorState, editor);
+		}
+		return property;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Property
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * {@link ConfigurableProperty} implementation for this {@link IConfigurablePropertyFactory}.
-   */
-  private static final class ConfigurableProperty extends JavaProperty {
-    private final StringsAddPropertyEditor m_stringsEditor;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Property
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * {@link ConfigurableProperty} implementation for this {@link IConfigurablePropertyFactory}.
+	 */
+	private static final class ConfigurableProperty extends JavaProperty {
+		private final StringsAddPropertyEditor m_stringsEditor;
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public ConfigurableProperty(JavaInfo javaInfo, String title) {
-      super(javaInfo, title, new StringsAddPropertyEditor());
-      m_stringsEditor = (StringsAddPropertyEditor) getEditor();
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public ConfigurableProperty(JavaInfo javaInfo, String title) {
+			super(javaInfo, title, new StringsAddPropertyEditor());
+			m_stringsEditor = (StringsAddPropertyEditor) getEditor();
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Presentation
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public boolean isModified() throws Exception {
-      return m_stringsEditor.getItems(this).length != 0;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Presentation
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public boolean isModified() throws Exception {
+			return m_stringsEditor.getItems(this).length != 0;
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Value
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public Object getValue() throws Exception {
-      return m_stringsEditor.getItems(this);
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Value
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public Object getValue() throws Exception {
+			return m_stringsEditor.getItems(this);
+		}
 
-    @Override
-    public void setValue(Object value) throws Exception {
-      if (value instanceof String[]) {
-        m_stringsEditor.setItems(this, (String[]) value);
-      }
-    }
-  }
+		@Override
+		public void setValue(Object value) throws Exception {
+			if (value instanceof String[]) {
+				m_stringsEditor.setItems(this, (String[]) value);
+			}
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/converter/AbstractNumberConverter.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/converter/AbstractNumberConverter.java
index c22107f9c..ef363a1ba 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/converter/AbstractNumberConverter.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/converter/AbstractNumberConverter.java
@@ -23,29 +23,29 @@
  * @coverage core.model.property.converter
  */
 public abstract class AbstractNumberConverter extends ExpressionConverter {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if context {@link IJavaProject} supports auto-boxing.
-   */
-  protected final boolean isBoxingEnabled(JavaInfo javaInfo) {
-    if (javaInfo == null) {
-      return false;
-    }
-    IJavaProject javaProject = javaInfo.getEditor().getJavaProject();
-    // we need Java 5+
-    if (!ProjectUtils.isJDK15(javaProject)) {
-      return false;
-    }
-    // ...auto-boxing enabled?
-    String option = javaProject.getOption(JavaCore.COMPILER_PB_AUTOBOXING, true);
-    if (!"ignore".equals(option)) {
-      return false;
-    }
-    // OK
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if context {@link IJavaProject} supports auto-boxing.
+	 */
+	protected final boolean isBoxingEnabled(JavaInfo javaInfo) {
+		if (javaInfo == null) {
+			return false;
+		}
+		IJavaProject javaProject = javaInfo.getEditor().getJavaProject();
+		// we need Java 5+
+		if (!ProjectUtils.isJDK15(javaProject)) {
+			return false;
+		}
+		// ...auto-boxing enabled?
+		String option = javaProject.getOption(JavaCore.COMPILER_PB_AUTOBOXING, true);
+		if (!"ignore".equals(option)) {
+			return false;
+		}
+		// OK
+		return true;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/converter/BooleanArrayConverter.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/converter/BooleanArrayConverter.java
index a14e842d1..0eda486f7 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/converter/BooleanArrayConverter.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/converter/BooleanArrayConverter.java
@@ -19,40 +19,40 @@
  * @coverage core.model.property.converter
  */
 public final class BooleanArrayConverter extends ExpressionConverter {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final ExpressionConverter INSTANCE = new BooleanArrayConverter();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final ExpressionConverter INSTANCE = new BooleanArrayConverter();
 
-  private BooleanArrayConverter() {
-  }
+	private BooleanArrayConverter() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ExpressionConverter
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toJavaSource(JavaInfo javaInfo, Object value) throws Exception {
-    if (value == null) {
-      return "(boolean[]) null";
-    } else {
-      StringBuilder buffer = new StringBuilder();
-      buffer.append("new boolean[] {");
-      // add items
-      boolean[] items = (boolean[]) value;
-      for (int i = 0; i < items.length; i++) {
-        boolean item = items[i];
-        if (i != 0) {
-          buffer.append(", ");
-        }
-        buffer.append(BooleanConverter.INSTANCE.toJavaSource(javaInfo, item));
-      }
-      //
-      buffer.append("}");
-      return buffer.toString();
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ExpressionConverter
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toJavaSource(JavaInfo javaInfo, Object value) throws Exception {
+		if (value == null) {
+			return "(boolean[]) null";
+		} else {
+			StringBuilder buffer = new StringBuilder();
+			buffer.append("new boolean[] {");
+			// add items
+			boolean[] items = (boolean[]) value;
+			for (int i = 0; i < items.length; i++) {
+				boolean item = items[i];
+				if (i != 0) {
+					buffer.append(", ");
+				}
+				buffer.append(BooleanConverter.INSTANCE.toJavaSource(javaInfo, item));
+			}
+			//
+			buffer.append("}");
+			return buffer.toString();
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/converter/BooleanConverter.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/converter/BooleanConverter.java
index 9233ecd04..a973ecf91 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/converter/BooleanConverter.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/converter/BooleanConverter.java
@@ -19,23 +19,23 @@
  * @coverage core.model.property.converter
  */
 public final class BooleanConverter extends ExpressionConverter {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final ExpressionConverter INSTANCE = new BooleanConverter();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final ExpressionConverter INSTANCE = new BooleanConverter();
 
-  private BooleanConverter() {
-  }
+	private BooleanConverter() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ExpressionConverter
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toJavaSource(JavaInfo javaInfo, Object value) throws Exception {
-    return ((Boolean) value).toString();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ExpressionConverter
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toJavaSource(JavaInfo javaInfo, Object value) throws Exception {
+		return ((Boolean) value).toString();
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/converter/BooleanObjectConverter.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/converter/BooleanObjectConverter.java
index 0b53f7390..7b1f8fb86 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/converter/BooleanObjectConverter.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/converter/BooleanObjectConverter.java
@@ -22,40 +22,40 @@
  * @coverage core.model.property.converter
  */
 public final class BooleanObjectConverter extends ExpressionConverter {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final ExpressionConverter INSTANCE = new BooleanObjectConverter();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final ExpressionConverter INSTANCE = new BooleanObjectConverter();
 
-  private BooleanObjectConverter() {
-  }
+	private BooleanObjectConverter() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ExpressionConverter
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toJavaSource(JavaInfo javaInfo, Object value) {
-    if (value == null) {
-      return "(Boolean) null";
-    }
-    // has value
-    boolean b = ((Boolean) value).booleanValue();
-    // may be use auto-boxing
-    if (javaInfo != null) {
-      IJavaProject javaProject = javaInfo.getEditor().getJavaProject();
-      if (ProjectUtils.isJDK15(javaProject)) {
-        return Boolean.toString(b);
-      }
-    }
-    // use explicit boxing
-    if (b) {
-      return "Boolean.TRUE";
-    } else {
-      return "Boolean.FALSE";
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ExpressionConverter
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toJavaSource(JavaInfo javaInfo, Object value) {
+		if (value == null) {
+			return "(Boolean) null";
+		}
+		// has value
+		boolean b = ((Boolean) value).booleanValue();
+		// may be use auto-boxing
+		if (javaInfo != null) {
+			IJavaProject javaProject = javaInfo.getEditor().getJavaProject();
+			if (ProjectUtils.isJDK15(javaProject)) {
+				return Boolean.toString(b);
+			}
+		}
+		// use explicit boxing
+		if (b) {
+			return "Boolean.TRUE";
+		} else {
+			return "Boolean.FALSE";
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/converter/ByteConverter.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/converter/ByteConverter.java
index 129d69dbc..61b15f619 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/converter/ByteConverter.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/converter/ByteConverter.java
@@ -19,23 +19,23 @@
  * @coverage core.model.property.converter
  */
 public final class ByteConverter extends ExpressionConverter {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final ExpressionConverter INSTANCE = new ByteConverter();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final ExpressionConverter INSTANCE = new ByteConverter();
 
-  private ByteConverter() {
-  }
+	private ByteConverter() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ExpressionConverter
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toJavaSource(JavaInfo javaInfo, Object value) throws Exception {
-    return "(byte) " + ((Byte) value).toString();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ExpressionConverter
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toJavaSource(JavaInfo javaInfo, Object value) throws Exception {
+		return "(byte) " + ((Byte) value).toString();
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/converter/ByteObjectConverter.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/converter/ByteObjectConverter.java
index ae249984b..7127d78c3 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/converter/ByteObjectConverter.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/converter/ByteObjectConverter.java
@@ -19,33 +19,33 @@
  * @coverage core.model.property.converter
  */
 public final class ByteObjectConverter extends AbstractNumberConverter {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final ExpressionConverter INSTANCE = new ByteObjectConverter();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final ExpressionConverter INSTANCE = new ByteObjectConverter();
 
-  private ByteObjectConverter() {
-  }
+	private ByteObjectConverter() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ExpressionConverter
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toJavaSource(JavaInfo javaInfo, Object value) {
-    if (value == null) {
-      return "(Byte) null";
-    }
-    // has value
-    String text = "(byte) " + ((Byte) value).toString();
-    // may be use auto-boxing
-    if (isBoxingEnabled(javaInfo)) {
-      return text;
-    }
-    // use explicit boxing
-    return "Byte.valueOf(" + text + ")";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ExpressionConverter
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toJavaSource(JavaInfo javaInfo, Object value) {
+		if (value == null) {
+			return "(Byte) null";
+		}
+		// has value
+		String text = "(byte) " + ((Byte) value).toString();
+		// may be use auto-boxing
+		if (isBoxingEnabled(javaInfo)) {
+			return text;
+		}
+		// use explicit boxing
+		return "Byte.valueOf(" + text + ")";
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/converter/CharacterConverter.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/converter/CharacterConverter.java
index b66868fd7..a09162913 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/converter/CharacterConverter.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/converter/CharacterConverter.java
@@ -19,23 +19,23 @@
  * @coverage core.model.property.converter
  */
 public final class CharacterConverter extends ExpressionConverter {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final ExpressionConverter INSTANCE = new CharacterConverter();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final ExpressionConverter INSTANCE = new CharacterConverter();
 
-  private CharacterConverter() {
-  }
+	private CharacterConverter() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ExpressionConverter
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toJavaSource(JavaInfo javaInfo, Object value) throws Exception {
-    return "'" + ((Character) value).charValue() + "'";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ExpressionConverter
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toJavaSource(JavaInfo javaInfo, Object value) throws Exception {
+		return "'" + ((Character) value).charValue() + "'";
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/converter/DoubleConverter.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/converter/DoubleConverter.java
index af72d7091..0630d8ed7 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/converter/DoubleConverter.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/converter/DoubleConverter.java
@@ -19,24 +19,24 @@
  * @coverage core.model.property.converter
  */
 public final class DoubleConverter extends ExpressionConverter {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final ExpressionConverter INSTANCE = new DoubleConverter();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final ExpressionConverter INSTANCE = new DoubleConverter();
 
-  private DoubleConverter() {
-  }
+	private DoubleConverter() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ExpressionConverter
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toJavaSource(JavaInfo javaInfo, Object value) throws Exception {
-    double doubleValue = ((Number) value).doubleValue();
-    return Double.toString(doubleValue);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ExpressionConverter
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toJavaSource(JavaInfo javaInfo, Object value) throws Exception {
+		double doubleValue = ((Number) value).doubleValue();
+		return Double.toString(doubleValue);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/converter/DoubleObjectConverter.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/converter/DoubleObjectConverter.java
index 4e2dc039e..e9bbe71a4 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/converter/DoubleObjectConverter.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/converter/DoubleObjectConverter.java
@@ -19,33 +19,33 @@
  * @coverage core.model.property.converter
  */
 public final class DoubleObjectConverter extends AbstractNumberConverter {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final ExpressionConverter INSTANCE = new DoubleObjectConverter();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final ExpressionConverter INSTANCE = new DoubleObjectConverter();
 
-  private DoubleObjectConverter() {
-  }
+	private DoubleObjectConverter() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ExpressionConverter
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toJavaSource(JavaInfo javaInfo, Object value) {
-    if (value == null) {
-      return "(Double) null";
-    }
-    // has value
-    String text = ((Double) value).toString();
-    // may be use auto-boxing
-    if (isBoxingEnabled(javaInfo)) {
-      return text;
-    }
-    // use explicit boxing
-    return "Double.valueOf(" + text + ")";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ExpressionConverter
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toJavaSource(JavaInfo javaInfo, Object value) {
+		if (value == null) {
+			return "(Double) null";
+		}
+		// has value
+		String text = ((Double) value).toString();
+		// may be use auto-boxing
+		if (isBoxingEnabled(javaInfo)) {
+			return text;
+		}
+		// use explicit boxing
+		return "Double.valueOf(" + text + ")";
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/converter/ExpressionConverter.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/converter/ExpressionConverter.java
index a43310f18..d26bc3abc 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/converter/ExpressionConverter.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/converter/ExpressionConverter.java
@@ -25,10 +25,10 @@
  * @coverage core.model.property.converter
  */
 public abstract class ExpressionConverter {
-  /**
-   * @return the Java source for {@link Expression} with given value. This Java source will be used
-   *         for adding to the AST of given {@link JavaInfo}, so {@link ExpressionConverter} should
-   *         do also any additional operation, for example import required classes.
-   */
-  public abstract String toJavaSource(JavaInfo javaInfo, Object value) throws Exception;
+	/**
+	 * @return the Java source for {@link Expression} with given value. This Java source will be used
+	 *         for adding to the AST of given {@link JavaInfo}, so {@link ExpressionConverter} should
+	 *         do also any additional operation, for example import required classes.
+	 */
+	public abstract String toJavaSource(JavaInfo javaInfo, Object value) throws Exception;
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/converter/FloatConverter.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/converter/FloatConverter.java
index 9c534279a..aee740f84 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/converter/FloatConverter.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/converter/FloatConverter.java
@@ -19,23 +19,23 @@
  * @coverage core.model.property.converter
  */
 public final class FloatConverter extends ExpressionConverter {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final ExpressionConverter INSTANCE = new FloatConverter();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final ExpressionConverter INSTANCE = new FloatConverter();
 
-  private FloatConverter() {
-  }
+	private FloatConverter() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ExpressionConverter
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toJavaSource(JavaInfo javaInfo, Object value) throws Exception {
-    return ((Float) value).toString() + "f";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ExpressionConverter
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toJavaSource(JavaInfo javaInfo, Object value) throws Exception {
+		return ((Float) value).toString() + "f";
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/converter/IntegerArrayConverter.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/converter/IntegerArrayConverter.java
index d09947800..a4f286b71 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/converter/IntegerArrayConverter.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/converter/IntegerArrayConverter.java
@@ -19,40 +19,40 @@
  * @coverage core.model.property.converter
  */
 public final class IntegerArrayConverter extends ExpressionConverter {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final ExpressionConverter INSTANCE = new IntegerArrayConverter();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final ExpressionConverter INSTANCE = new IntegerArrayConverter();
 
-  private IntegerArrayConverter() {
-  }
+	private IntegerArrayConverter() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ExpressionConverter
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toJavaSource(JavaInfo javaInfo, Object value) throws Exception {
-    if (value == null) {
-      return "(int[]) null";
-    } else {
-      StringBuilder buffer = new StringBuilder();
-      buffer.append("new int[] {");
-      // add items
-      int[] items = (int[]) value;
-      for (int i = 0; i < items.length; i++) {
-        int item = items[i];
-        if (i != 0) {
-          buffer.append(", ");
-        }
-        buffer.append(IntegerConverter.INSTANCE.toJavaSource(javaInfo, item));
-      }
-      //
-      buffer.append("}");
-      return buffer.toString();
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ExpressionConverter
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toJavaSource(JavaInfo javaInfo, Object value) throws Exception {
+		if (value == null) {
+			return "(int[]) null";
+		} else {
+			StringBuilder buffer = new StringBuilder();
+			buffer.append("new int[] {");
+			// add items
+			int[] items = (int[]) value;
+			for (int i = 0; i < items.length; i++) {
+				int item = items[i];
+				if (i != 0) {
+					buffer.append(", ");
+				}
+				buffer.append(IntegerConverter.INSTANCE.toJavaSource(javaInfo, item));
+			}
+			//
+			buffer.append("}");
+			return buffer.toString();
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/converter/IntegerConverter.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/converter/IntegerConverter.java
index 3a6c45c26..289db088e 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/converter/IntegerConverter.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/converter/IntegerConverter.java
@@ -19,23 +19,23 @@
  * @coverage core.model.property.converter
  */
 public final class IntegerConverter extends ExpressionConverter {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final ExpressionConverter INSTANCE = new IntegerConverter();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final ExpressionConverter INSTANCE = new IntegerConverter();
 
-  private IntegerConverter() {
-  }
+	private IntegerConverter() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ExpressionConverter
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toJavaSource(JavaInfo javaInfo, Object value) {
-    return ((Integer) value).toString();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ExpressionConverter
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toJavaSource(JavaInfo javaInfo, Object value) {
+		return ((Integer) value).toString();
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/converter/IntegerObjectConverter.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/converter/IntegerObjectConverter.java
index de9d3e262..aa28768ea 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/converter/IntegerObjectConverter.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/converter/IntegerObjectConverter.java
@@ -19,33 +19,33 @@
  * @coverage core.model.property.converter
  */
 public final class IntegerObjectConverter extends AbstractNumberConverter {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final ExpressionConverter INSTANCE = new IntegerObjectConverter();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final ExpressionConverter INSTANCE = new IntegerObjectConverter();
 
-  private IntegerObjectConverter() {
-  }
+	private IntegerObjectConverter() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ExpressionConverter
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toJavaSource(JavaInfo javaInfo, Object value) {
-    if (value == null) {
-      return "(Integer) null";
-    }
-    // has value
-    String text = ((Integer) value).toString();
-    // may be use auto-boxing
-    if (isBoxingEnabled(javaInfo)) {
-      return text;
-    }
-    // use explicit boxing
-    return "Integer.valueOf(" + text + ")";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ExpressionConverter
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toJavaSource(JavaInfo javaInfo, Object value) {
+		if (value == null) {
+			return "(Integer) null";
+		}
+		// has value
+		String text = ((Integer) value).toString();
+		// may be use auto-boxing
+		if (isBoxingEnabled(javaInfo)) {
+			return text;
+		}
+		// use explicit boxing
+		return "Integer.valueOf(" + text + ")";
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/converter/LocaleConverter.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/converter/LocaleConverter.java
index 52f719373..77439d7f9 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/converter/LocaleConverter.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/converter/LocaleConverter.java
@@ -23,47 +23,47 @@
  * @coverage core.model.property.converter
  */
 public final class LocaleConverter extends ExpressionConverter {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final ExpressionConverter INSTANCE = new LocaleConverter();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final ExpressionConverter INSTANCE = new LocaleConverter();
 
-  private LocaleConverter() {
-  }
+	private LocaleConverter() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ExpressionConverter
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toJavaSource(JavaInfo javaInfo, Object value) throws Exception {
-    if (value == null) {
-      return "(java.util.Locale) null";
-    } else {
-      // find standard values
-      for (Field field : Locale.class.getFields()) {
-        int fModifiers = field.getModifiers();
-        if (Modifier.isFinal(fModifiers) && Modifier.isStatic(fModifiers)) {
-          if (field.getType() == Locale.class && value.equals(field.get(null))) {
-            return "java.util.Locale." + field.getName();
-          }
-        }
-      }
-      // convert language+country to create instance of Locale
-      Locale locale = (Locale) value;
-      StringBuilder buffer = new StringBuilder(256);
-      buffer.append("new java.util.Locale(");
-      buffer.append(StringConverter.INSTANCE.toJavaSource(javaInfo, locale.getLanguage()));
-      String country = locale.getCountry();
-      if (country.length() != 0) {
-        buffer.append(", ");
-        buffer.append(StringConverter.INSTANCE.toJavaSource(javaInfo, country));
-      }
-      buffer.append(")");
-      return buffer.toString();
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ExpressionConverter
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toJavaSource(JavaInfo javaInfo, Object value) throws Exception {
+		if (value == null) {
+			return "(java.util.Locale) null";
+		} else {
+			// find standard values
+			for (Field field : Locale.class.getFields()) {
+				int fModifiers = field.getModifiers();
+				if (Modifier.isFinal(fModifiers) && Modifier.isStatic(fModifiers)) {
+					if (field.getType() == Locale.class && value.equals(field.get(null))) {
+						return "java.util.Locale." + field.getName();
+					}
+				}
+			}
+			// convert language+country to create instance of Locale
+			Locale locale = (Locale) value;
+			StringBuilder buffer = new StringBuilder(256);
+			buffer.append("new java.util.Locale(");
+			buffer.append(StringConverter.INSTANCE.toJavaSource(javaInfo, locale.getLanguage()));
+			String country = locale.getCountry();
+			if (country.length() != 0) {
+				buffer.append(", ");
+				buffer.append(StringConverter.INSTANCE.toJavaSource(javaInfo, country));
+			}
+			buffer.append(")");
+			return buffer.toString();
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/converter/LongConverter.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/converter/LongConverter.java
index 26a7a44c5..bc80853e2 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/converter/LongConverter.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/converter/LongConverter.java
@@ -19,23 +19,23 @@
  * @coverage core.model.property.converter
  */
 public final class LongConverter extends ExpressionConverter {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final ExpressionConverter INSTANCE = new LongConverter();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final ExpressionConverter INSTANCE = new LongConverter();
 
-  private LongConverter() {
-  }
+	private LongConverter() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ExpressionConverter
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toJavaSource(JavaInfo javaInfo, Object value) throws Exception {
-    return ((Long) value).toString() + "L";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ExpressionConverter
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toJavaSource(JavaInfo javaInfo, Object value) throws Exception {
+		return ((Long) value).toString() + "L";
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/converter/LongObjectConverter.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/converter/LongObjectConverter.java
index f35dfcaea..90a76db97 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/converter/LongObjectConverter.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/converter/LongObjectConverter.java
@@ -19,33 +19,33 @@
  * @coverage core.model.property.converter
  */
 public final class LongObjectConverter extends AbstractNumberConverter {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final ExpressionConverter INSTANCE = new LongObjectConverter();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final ExpressionConverter INSTANCE = new LongObjectConverter();
 
-  private LongObjectConverter() {
-  }
+	private LongObjectConverter() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ExpressionConverter
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toJavaSource(JavaInfo javaInfo, Object value) {
-    if (value == null) {
-      return "(Long) null";
-    }
-    // has value
-    String text = ((Long) value).toString() + "L";
-    // may be use auto-boxing
-    if (isBoxingEnabled(javaInfo)) {
-      return text;
-    }
-    // use explicit boxing
-    return "Long.valueOf(" + text + ")";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ExpressionConverter
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toJavaSource(JavaInfo javaInfo, Object value) {
+		if (value == null) {
+			return "(Long) null";
+		}
+		// has value
+		String text = ((Long) value).toString() + "L";
+		// may be use auto-boxing
+		if (isBoxingEnabled(javaInfo)) {
+			return text;
+		}
+		// use explicit boxing
+		return "Long.valueOf(" + text + ")";
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/converter/ShortConverter.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/converter/ShortConverter.java
index cd9e69bf1..96ec6f7b0 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/converter/ShortConverter.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/converter/ShortConverter.java
@@ -19,23 +19,23 @@
  * @coverage core.model.property.converter
  */
 public final class ShortConverter extends ExpressionConverter {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final ExpressionConverter INSTANCE = new ShortConverter();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final ExpressionConverter INSTANCE = new ShortConverter();
 
-  private ShortConverter() {
-  }
+	private ShortConverter() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ExpressionConverter
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toJavaSource(JavaInfo javaInfo, Object value) throws Exception {
-    return "(short) " + ((Short) value).toString();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ExpressionConverter
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toJavaSource(JavaInfo javaInfo, Object value) throws Exception {
+		return "(short) " + ((Short) value).toString();
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/converter/ShortObjectConverter.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/converter/ShortObjectConverter.java
index 9efe71553..e121d4978 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/converter/ShortObjectConverter.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/converter/ShortObjectConverter.java
@@ -19,33 +19,33 @@
  * @coverage core.model.property.converter
  */
 public final class ShortObjectConverter extends AbstractNumberConverter {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final ExpressionConverter INSTANCE = new ShortObjectConverter();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final ExpressionConverter INSTANCE = new ShortObjectConverter();
 
-  private ShortObjectConverter() {
-  }
+	private ShortObjectConverter() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ExpressionConverter
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toJavaSource(JavaInfo javaInfo, Object value) {
-    if (value == null) {
-      return "(Short) null";
-    }
-    // has value
-    String text = "(short) " + ((Short) value).toString();
-    // may be use auto-boxing
-    if (isBoxingEnabled(javaInfo)) {
-      return text;
-    }
-    // use explicit boxing
-    return "Short.valueOf(" + text + ")";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ExpressionConverter
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toJavaSource(JavaInfo javaInfo, Object value) {
+		if (value == null) {
+			return "(Short) null";
+		}
+		// has value
+		String text = "(short) " + ((Short) value).toString();
+		// may be use auto-boxing
+		if (isBoxingEnabled(javaInfo)) {
+			return text;
+		}
+		// use explicit boxing
+		return "Short.valueOf(" + text + ")";
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/converter/StringArrayConverter.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/converter/StringArrayConverter.java
index a0b05c16c..3a790ff86 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/converter/StringArrayConverter.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/converter/StringArrayConverter.java
@@ -19,40 +19,40 @@
  * @coverage core.model.property.converter
  */
 public final class StringArrayConverter extends ExpressionConverter {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final ExpressionConverter INSTANCE = new StringArrayConverter();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final ExpressionConverter INSTANCE = new StringArrayConverter();
 
-  private StringArrayConverter() {
-  }
+	private StringArrayConverter() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ExpressionConverter
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toJavaSource(JavaInfo javaInfo, Object value) throws Exception {
-    if (value == null) {
-      return "(String[]) null";
-    } else {
-      StringBuilder buffer = new StringBuilder();
-      buffer.append("new String[] {");
-      // add items
-      String[] items = (String[]) value;
-      for (int i = 0; i < items.length; i++) {
-        String item = items[i];
-        if (i != 0) {
-          buffer.append(", ");
-        }
-        buffer.append(StringConverter.INSTANCE.toJavaSource(javaInfo, item));
-      }
-      //
-      buffer.append("}");
-      return buffer.toString();
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ExpressionConverter
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toJavaSource(JavaInfo javaInfo, Object value) throws Exception {
+		if (value == null) {
+			return "(String[]) null";
+		} else {
+			StringBuilder buffer = new StringBuilder();
+			buffer.append("new String[] {");
+			// add items
+			String[] items = (String[]) value;
+			for (int i = 0; i < items.length; i++) {
+				String item = items[i];
+				if (i != 0) {
+					buffer.append(", ");
+				}
+				buffer.append(StringConverter.INSTANCE.toJavaSource(javaInfo, item));
+			}
+			//
+			buffer.append("}");
+			return buffer.toString();
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/converter/StringConverter.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/converter/StringConverter.java
index 59b7f2e9b..7a33b8755 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/converter/StringConverter.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/converter/StringConverter.java
@@ -24,56 +24,56 @@
  * @coverage core.model.property.converter
  */
 public final class StringConverter extends ExpressionConverter {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final ExpressionConverter INSTANCE = new StringConverter();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final ExpressionConverter INSTANCE = new StringConverter();
 
-  private StringConverter() {
-  }
+	private StringConverter() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ExpressionConverter
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toJavaSource(JavaInfo javaInfo, Object value) {
-    if (value == null) {
-      return "(String) null";
-    } else {
-      String valueString = (String) value;
-      String[] result = new String[]{null};
-      // may be plain can be used
-      if (result[0] == null) {
-        result[0] = toJavaSource_UTF(javaInfo, valueString);
-      }
-      // escape required
-      if (result[0] == null) {
-        String escaped = StringUtilities.escapeJava(valueString);
-        result[0] = '"' + escaped + '"';
-      }
-      // done
-      return result[0];
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ExpressionConverter
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toJavaSource(JavaInfo javaInfo, Object value) {
+		if (value == null) {
+			return "(String) null";
+		} else {
+			String valueString = (String) value;
+			String[] result = new String[]{null};
+			// may be plain can be used
+			if (result[0] == null) {
+				result[0] = toJavaSource_UTF(javaInfo, valueString);
+			}
+			// escape required
+			if (result[0] == null) {
+				String escaped = StringUtilities.escapeJava(valueString);
+				result[0] = '"' + escaped + '"';
+			}
+			// done
+			return result[0];
+		}
+	}
 
-  private static String toJavaSource_UTF(final JavaInfo javaInfo, final String valueString) {
-    return ExecutionUtils.runObjectIgnore(new RunnableObjectEx<String>() {
-      @Override
-      public String runObject() throws Exception {
-        if (javaInfo != null) {
-          IFile file = (IFile) javaInfo.getEditor().getModelUnit().getUnderlyingResource();
-          String charset = file.getCharset();
-          if (charset.equals("UTF-8") || charset.equals("UTF-16")) {
-            String escaped = StringUtilities.escapeForJavaSource(valueString);
-            return '"' + escaped + '"';
-          }
-        }
-        return null;
-      }
-    }, null);
-  }
+	private static String toJavaSource_UTF(final JavaInfo javaInfo, final String valueString) {
+		return ExecutionUtils.runObjectIgnore(new RunnableObjectEx<String>() {
+			@Override
+			public String runObject() throws Exception {
+				if (javaInfo != null) {
+					IFile file = (IFile) javaInfo.getEditor().getModelUnit().getUnderlyingResource();
+					String charset = file.getCharset();
+					if (charset.equals("UTF-8") || charset.equals("UTF-16")) {
+						String escaped = StringUtilities.escapeForJavaSource(valueString);
+						return '"' + escaped + '"';
+					}
+				}
+				return null;
+			}
+		}, null);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/AbstractEnumPropertyEditor.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/AbstractEnumPropertyEditor.java
index 294a13830..73f810972 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/AbstractEnumPropertyEditor.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/AbstractEnumPropertyEditor.java
@@ -24,105 +24,105 @@
  * @coverage core.model.property.editor
  */
 public abstract class AbstractEnumPropertyEditor extends AbstractComboPropertyEditor
-    implements
-      IValueSourcePropertyEditor,
-      ITextValuePropertyEditor,
-      IClipboardSourceProvider {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // TextDisplayPropertyEditor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getText(Property property) throws Exception {
-    Object value = property.getValue();
-    // return title for value
-    if (value instanceof Enum<?>) {
-      Enum<?> element = (Enum<?>) value;
-      return element.toString();
-    }
-    // unknown value
-    return null;
-  }
+implements
+IValueSourcePropertyEditor,
+ITextValuePropertyEditor,
+IClipboardSourceProvider {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// TextDisplayPropertyEditor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getText(Property property) throws Exception {
+		Object value = property.getValue();
+		// return title for value
+		if (value instanceof Enum<?>) {
+			Enum<?> element = (Enum<?>) value;
+			return element.toString();
+		}
+		// unknown value
+		return null;
+	}
 
-  @Override
-  public void setText(Property property, String text) throws Exception {
-    for (Enum<?> element : getElements(property)) {
-      if (element.toString().equals(text)) {
-        setPropertyValue(property, element);
-        break;
-      }
-    }
-  }
+	@Override
+	public void setText(Property property, String text) throws Exception {
+		for (Enum<?> element : getElements(property)) {
+			if (element.toString().equals(text)) {
+				setPropertyValue(property, element);
+				break;
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Combo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void addItems(Property property, CCombo3 combo) throws Exception {
-    Enum<?>[] elements = getElements(property);
-    for (Enum<?> element : elements) {
-      combo.add(element.toString());
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Combo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void addItems(Property property, CCombo3 combo) throws Exception {
+		Enum<?>[] elements = getElements(property);
+		for (Enum<?> element : elements) {
+			combo.add(element.toString());
+		}
+	}
 
-  @Override
-  protected void selectItem(Property property, CCombo3 combo) throws Exception {
-    combo.setText(getText(property));
-  }
+	@Override
+	protected void selectItem(Property property, CCombo3 combo) throws Exception {
+		combo.setText(getText(property));
+	}
 
-  @Override
-  protected void toPropertyEx(Property property, CCombo3 combo, int index) throws Exception {
-    Enum<?>[] elements = getElements(property);
-    Enum<?> element = elements[index];
-    setPropertyValue(property, element);
-  }
+	@Override
+	protected void toPropertyEx(Property property, CCombo3 combo, int index) throws Exception {
+		Enum<?>[] elements = getElements(property);
+		Enum<?> element = elements[index];
+		setPropertyValue(property, element);
+	}
 
-  /**
-   * @return array of available values.
-   */
-  abstract protected Enum<?>[] getElements(Property property) throws Exception;
+	/**
+	 * @return array of available values.
+	 */
+	abstract protected Enum<?>[] getElements(Property property) throws Exception;
 
-  /**
-   * Apply new selected value to {@link Property}.
-   */
-  protected void setPropertyValue(Property property, Enum<?> element) throws Exception {
-    if (property instanceof GenericProperty) {
-      GenericProperty genericProperty = (GenericProperty) property;
-      String source = getValueSource(element);
-      genericProperty.setExpression(source, element);
-    } else {
-      property.setValue(element);
-    }
-  }
+	/**
+	 * Apply new selected value to {@link Property}.
+	 */
+	protected void setPropertyValue(Property property, Enum<?> element) throws Exception {
+		if (property instanceof GenericProperty) {
+			GenericProperty genericProperty = (GenericProperty) property;
+			String source = getValueSource(element);
+			genericProperty.setExpression(source, element);
+		} else {
+			property.setValue(element);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IValueSourcePropertyEditor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getValueSource(Object value) throws Exception {
-    if (value instanceof Enum<?>) {
-      Enum<?> element = (Enum<?>) value;
-      return ReflectionUtils.getFullyQualifiedName(element.getDeclaringClass(), false)
-          + "."
-          + element.name();
-    }
-    // unknown value
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IValueSourcePropertyEditor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getValueSource(Object value) throws Exception {
+		if (value instanceof Enum<?>) {
+			Enum<?> element = (Enum<?>) value;
+			return ReflectionUtils.getFullyQualifiedName(element.getDeclaringClass(), false)
+					+ "."
+					+ element.name();
+		}
+		// unknown value
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IClipboardSourceProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getClipboardSource(GenericProperty property) throws Exception {
-    Object value = property.getValue();
-    return getValueSource(value);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IClipboardSourceProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getClipboardSource(GenericProperty property) throws Exception {
+		Object value = property.getValue();
+		return getValueSource(value);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/AbstractListPropertyEditor.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/AbstractListPropertyEditor.java
index fca686e29..79cbefadd 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/AbstractListPropertyEditor.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/AbstractListPropertyEditor.java
@@ -32,151 +32,151 @@
  * @coverage core.model.property.editor
  */
 public abstract class AbstractListPropertyEditor extends AbstractComboPropertyEditor
-    implements
-      IConfigurablePropertyObject,
-      IValueSourcePropertyEditor,
-      IClipboardSourceProvider {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // TextDisplayPropertyEditor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getText(Property property) throws Exception {
-    // return title for value
-    Object value = property.getValue();
-    if (value != Property.UNKNOWN_VALUE) {
-      int index = getValueIndex(value);
-      if (index >= 0) {
-        return getTitle(index);
-      } else {
-        if (value instanceof String) {
-          return (String) value;
-        }
-      }
-    }
-    // unknown value
-    return null;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IValueSourcePropertyEditor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getValueSource(Object value) throws Exception {
-    // return expression for value
-    if (value != Property.UNKNOWN_VALUE) {
-      int index = getValueIndex(value);
-      if (index >= 0) {
-        return getExpression(index);
-      }
-    }
-    // unknown value
-    return null;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IClipboardSourceProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getClipboardSource(GenericProperty property) throws Exception {
-    Object value = property.getValue();
-    return getValueSource(value);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Combo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void addItems(Property property, CCombo3 combo) throws Exception {
-    for (int i = 0; i < getCount(); i++) {
-      combo.add(getTitle(i));
-    }
-  }
-
-  @Override
-  protected void selectItem(Property property, CCombo3 combo) throws Exception {
-    combo.setText(getText(property));
-  }
-
-  @Override
-  protected void toPropertyEx(Property property, CCombo3 combo, int index) throws Exception {
-    if (property instanceof GenericProperty) {
-      GenericProperty genericProperty = (GenericProperty) property;
-      String expression = getExpression(index);
-      Object evaluatedExpression = evaluateExpression(genericProperty, expression);
-      // apply expression
-      genericProperty.setExpression(expression, evaluatedExpression);
-    } else {
-      toPropertyEx_simpleProperty(property, combo, index);
-    }
-  }
-
-  private static Object evaluateExpression(final GenericProperty genericProperty,
-      final String expression) {
-    return ExecutionUtils.runObjectIgnore(new RunnableObjectEx<Object>() {
-      @Override
-      public Object runObject() throws Exception {
-        JavaInfo javaInfo = genericProperty.getJavaInfo();
-        ClassLoader classLoader = JavaInfoUtils.getClassLoader(javaInfo);
-        return ScriptUtils.evaluate(classLoader, expression);
-      }
-    }, Property.UNKNOWN_VALUE);
-  }
-
-  /**
-   * Sets value of simple {@link Property}, not {@link GenericProperty}.
-   */
-  protected void toPropertyEx_simpleProperty(Property property, CCombo3 combo, int index)
-      throws Exception {
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access to list items
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  abstract protected int getCount();
-
-  abstract protected int getValueIndex(Object value);
-
-  abstract protected String getTitle(int index);
-
-  abstract protected String getExpression(int index) throws Exception;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Extract string array from parameters.
-   */
-  protected static String[] getParameterAsArray(Map<String, Object> parameters, String name) {
-    return getParameterAsArray(parameters, name, false);
-  }
-
-  @SuppressWarnings("unchecked")
-  protected static String[] getParameterAsArray(Map<String, Object> parameters,
-      String name,
-      boolean noAssert) {
-    String[] values = null;
-    if (parameters.containsKey(name)) {
-      List<String> list = (List<String>) parameters.get(name);
-      values = list.toArray(new String[list.size()]);
-    } else {
-      if (noAssert) {
-        values = null;
-      } else {
-        Assert.fail(String.format("No parameter %s in %s.", name, parameters));
-      }
-    }
-    return values;
-  }
+implements
+IConfigurablePropertyObject,
+IValueSourcePropertyEditor,
+IClipboardSourceProvider {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// TextDisplayPropertyEditor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getText(Property property) throws Exception {
+		// return title for value
+		Object value = property.getValue();
+		if (value != Property.UNKNOWN_VALUE) {
+			int index = getValueIndex(value);
+			if (index >= 0) {
+				return getTitle(index);
+			} else {
+				if (value instanceof String) {
+					return (String) value;
+				}
+			}
+		}
+		// unknown value
+		return null;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IValueSourcePropertyEditor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getValueSource(Object value) throws Exception {
+		// return expression for value
+		if (value != Property.UNKNOWN_VALUE) {
+			int index = getValueIndex(value);
+			if (index >= 0) {
+				return getExpression(index);
+			}
+		}
+		// unknown value
+		return null;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IClipboardSourceProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getClipboardSource(GenericProperty property) throws Exception {
+		Object value = property.getValue();
+		return getValueSource(value);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Combo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void addItems(Property property, CCombo3 combo) throws Exception {
+		for (int i = 0; i < getCount(); i++) {
+			combo.add(getTitle(i));
+		}
+	}
+
+	@Override
+	protected void selectItem(Property property, CCombo3 combo) throws Exception {
+		combo.setText(getText(property));
+	}
+
+	@Override
+	protected void toPropertyEx(Property property, CCombo3 combo, int index) throws Exception {
+		if (property instanceof GenericProperty) {
+			GenericProperty genericProperty = (GenericProperty) property;
+			String expression = getExpression(index);
+			Object evaluatedExpression = evaluateExpression(genericProperty, expression);
+			// apply expression
+			genericProperty.setExpression(expression, evaluatedExpression);
+		} else {
+			toPropertyEx_simpleProperty(property, combo, index);
+		}
+	}
+
+	private static Object evaluateExpression(final GenericProperty genericProperty,
+			final String expression) {
+		return ExecutionUtils.runObjectIgnore(new RunnableObjectEx<Object>() {
+			@Override
+			public Object runObject() throws Exception {
+				JavaInfo javaInfo = genericProperty.getJavaInfo();
+				ClassLoader classLoader = JavaInfoUtils.getClassLoader(javaInfo);
+				return ScriptUtils.evaluate(classLoader, expression);
+			}
+		}, Property.UNKNOWN_VALUE);
+	}
+
+	/**
+	 * Sets value of simple {@link Property}, not {@link GenericProperty}.
+	 */
+	protected void toPropertyEx_simpleProperty(Property property, CCombo3 combo, int index)
+			throws Exception {
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access to list items
+	//
+	////////////////////////////////////////////////////////////////////////////
+	abstract protected int getCount();
+
+	abstract protected int getValueIndex(Object value);
+
+	abstract protected String getTitle(int index);
+
+	abstract protected String getExpression(int index) throws Exception;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Extract string array from parameters.
+	 */
+	protected static String[] getParameterAsArray(Map<String, Object> parameters, String name) {
+		return getParameterAsArray(parameters, name, false);
+	}
+
+	@SuppressWarnings("unchecked")
+	protected static String[] getParameterAsArray(Map<String, Object> parameters,
+			String name,
+			boolean noAssert) {
+		String[] values = null;
+		if (parameters.containsKey(name)) {
+			List<String> list = (List<String>) parameters.get(name);
+			values = list.toArray(new String[list.size()]);
+		} else {
+			if (noAssert) {
+				values = null;
+			} else {
+				Assert.fail(String.format("No parameter %s in %s.", name, parameters));
+			}
+		}
+		return values;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/ConstantSelectionPropertyEditor.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/ConstantSelectionPropertyEditor.java
index 26b5da365..80c891dba 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/ConstantSelectionPropertyEditor.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/ConstantSelectionPropertyEditor.java
@@ -91,643 +91,643 @@
  * @coverage core.model.property.editor
  */
 public final class ConstantSelectionPropertyEditor extends AbstractComboPropertyEditor
-    implements
-      IConfigurablePropertyObject {
-  private String m_typeName;
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final PropertyEditorPresentation m_presentation = new ButtonPropertyEditorPresentation() {
-    @Override
-    protected void onClick(PropertyTable propertyTable, Property property) throws Exception {
-      openDialog(property);
-    }
-  };
-
-  @Override
-  public final PropertyEditorPresentation getPresentation() {
-    return m_presentation;
-  }
-
-  @Override
-  protected String getText(Property _property) throws Exception {
-    GenericProperty property = (GenericProperty) _property;
-    IField field = getField(property);
-    if (field != null) {
-      return field.getElementName();
-    }
-    return null;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AbstractComboPropertyEditor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void addItems(Property _property, CCombo3 combo) throws Exception {
-    GenericProperty property = (GenericProperty) _property;
-    IType type = getType(property);
-    List<IField> fields = getFields(type);
-    for (int index = 0; index < fields.size(); index++) {
-      IField field = fields.get(index);
-      combo.add(field.getElementName());
-      combo.setData("" + index, field);
-    }
-  }
-
-  @Override
-  protected void selectItem(Property _property, CCombo3 combo) throws Exception {
-    GenericProperty property = (GenericProperty) _property;
-    combo.select(-1);
-    // try to find current field
-    IField field = getField(property);
-    for (int i = 0; i < combo.getItemCount(); i++) {
-      if (combo.getData("" + i) == field) {
-        combo.select(i);
-        break;
-      }
-    }
-  }
-
-  @Override
-  protected void toPropertyEx(Property _property, CCombo3 combo, int index) throws Exception {
-    GenericProperty property = (GenericProperty) _property;
-    IField field = (IField) combo.getData("" + index);
-    setField(property, field);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean activate(PropertyTable propertyTable, Property property, Point location)
-      throws Exception {
-    // activate using keyboard
-    if (location == null) {
-      openDialog(property);
-      return false;
-    }
-    // activate as Combo
-    return super.activate(propertyTable, property, location);
-  }
-
-  /**
-   * Opens editing dialog.
-   */
-  private void openDialog(Property _property) throws Exception {
-    GenericProperty property = (GenericProperty) _property;
-    ConstantSelection_Dialog dialog =
-        new ConstantSelection_Dialog(DesignerPlugin.getShell(),
-            property.getJavaInfo(),
-            getField(property));
-    if (dialog.open() == Window.OK) {
-      setField(property, dialog.m_selectedField);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IConfigurablePropertyObject
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void configure(EditorState state, Map<String, Object> parameters) throws Exception {
-    m_typeName = (String) parameters.get("type");
-    Assert.isNotNull(m_typeName, "'type' attribute in %s.", parameters);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Opens dialog to select {@link IField}. XXX
-   *
-   * @return the selected {@link IField}, or <code>null</code> if selection was cancelled.
-   */
-  public static IField selectField(Shell parentShell,
-      String typeName,
-      JavaInfo javaInfo,
-      Set<IType> additionalTypes,
-      IField currentField) throws Exception {
-    ConstantSelectionPropertyEditor editor = new ConstantSelectionPropertyEditor();
-    editor.m_typeName = typeName;
-    ConstantSelection_Dialog dialog =
-        editor.new ConstantSelection_Dialog(parentShell, javaInfo, currentField);
-    dialog.m_additionalTypes.addAll(additionalTypes);
-    if (dialog.open() == Window.OK) {
-      return dialog.m_selectedField;
-    }
-    return null;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utilities
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link IField}'s for constants of required type.
-   */
-  public List<IField> getFields(IType type) throws Exception {
-    List<IField> fields = Lists.newArrayList();
-    if (type != null) {
-      for (IField field : type.getFields()) {
-        // check that field is "public static final"
-        {
-          int flags = field.getFlags();
-          boolean isConstant =
-              Flags.isPublic(flags) && Flags.isStatic(flags) && Flags.isFinal(flags);
-          if (type.isClass() && !isConstant) {
-            continue;
-          }
-        }
-        // check for valid type
-        {
-          String typeName = CodeUtils.getResolvedTypeName(type, field.getTypeSignature());
-          if (!typeName.equals(m_typeName)) {
-            continue;
-          }
-        }
-        // OK, we can add this field
-        fields.add(field);
-      }
-    }
-    // sort fields by name
-    Collections.sort(fields, new Comparator<IField>() {
-      @Override
-      public int compare(IField field1, IField field2) {
-        return field1.getElementName().compareTo(field2.getElementName());
-      }
-    });
-    // OK, final result
-    return fields;
-  }
-
-  /**
-   * @return the {@link IType} for {@link IField} returned by {@link #getField(GenericProperty)},
-   *         i.e. current {@link IType} to get constants from.
-   */
-  private static IType getType(GenericProperty property) throws Exception {
-    IField field = getField(property);
-    return field != null ? field.getDeclaringType() : null;
-  }
-
-  /**
-   * @return the {@link IField} that is represented by {@link Expression} of given
-   *         {@link GenericProperty}, may be <code>null</code> if not a field is used as
-   *         {@link Expression}.
-   */
-  private static IField getField(GenericProperty property) throws Exception {
-    IJavaProject javaProject = property.getJavaInfo().getEditor().getJavaProject();
-    Expression expression = property.getExpression();
-    return getField(javaProject, expression);
-  }
-
-  /**
-   * @return the {@link IField} that is represented by given {@link Expression}, may be
-   *         <code>null</code> if not a field is used as {@link Expression}.
-   */
-  public static IField getField(IJavaProject javaProject, Expression expression) throws Exception {
-    // QualifiedName: contains all required information
-    if (expression instanceof QualifiedName) {
-      QualifiedName qualifiedName = (QualifiedName) expression;
-      // prepare "typeName"
-      Name qualifier = qualifiedName.getQualifier();
-      String typeName = AstNodeUtils.getFullyQualifiedName(qualifier, true);
-      // find field
-      String fieldName = qualifiedName.getName().getIdentifier();
-      return CodeUtils.findField(javaProject, typeName, fieldName);
-    }
-    // SimpleName: may be name of field
-    if (expression instanceof SimpleName) {
-      SimpleName simpleName = (SimpleName) expression;
-      IVariableBinding binding = AstNodeUtils.getVariableBinding(simpleName);
-      if (binding != null) {
-        ITypeBinding declaringClass = binding.getDeclaringClass();
-        if (declaringClass != null) {
-          String typeName = AstNodeUtils.getFullyQualifiedName(declaringClass, false);
-          String fieldName = simpleName.getIdentifier();
-          return CodeUtils.findField(javaProject, typeName, fieldName);
-        }
-      }
-    }
-    // unknown
-    return null;
-  }
-
-  /**
-   * Sets new {@link IField} value for {@link GenericProperty}.
-   */
-  private static void setField(GenericProperty property, IField field) throws Exception {
-    String code = getFieldCode(property.getJavaInfo(), field);
-    property.setExpression(code, Property.UNKNOWN_VALUE);
-  }
-
-  /**
-   * @param javaInfo
-   *          the {@link JavaInfo} to specify context.
-   * @param field
-   *          the {@link IField} to get code for.
-   *
-   * @return the code that should be used to specify reference of given {@link IField}.
-   */
-  public static String getFieldCode(JavaInfo javaInfo, IField field) throws Exception {
-    IType fieldType = field.getDeclaringType();
-    String fieldName = field.getElementName();
-    if (JavaInfoUtils.isLocalField(javaInfo, field)) {
-      return fieldName;
-    } else {
-      String typeName = fieldType.getFullyQualifiedName();
-      return typeName + "." + fieldName;
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Referenced IType's with constants
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return {@link IType}'s that have constants of valid type and are used by some
-   *         {@link ConstantSelectionPropertyEditor} in current {@link CompilationUnit}.
-   */
-  private Set<IType> getUsedTypes(JavaInfo javaInfo) throws Exception {
-    Set<IType> types = Sets.newHashSet();
-    collectUsedTypes(types, javaInfo.getRootJava());
-    return types;
-  }
-
-  /**
-   * Adds {@link IType}'s with constants of valid type, using {@link Property}'s og given
-   * {@link JavaInfo} and its children.
-   */
-  private void collectUsedTypes(Set<IType> types, JavaInfo javaInfo) throws Exception {
-    for (Property property : javaInfo.getProperties()) {
-      addUsedTypes(types, property);
-    }
-    // collect types for children
-    for (JavaInfo child : javaInfo.getChildrenJava()) {
-      collectUsedTypes(types, child);
-    }
-  }
-
-  /**
-   * If given {@link Property} has {@link ConstantSelectionPropertyEditor} with same constant type,
-   * try to add used {@link IType}.
-   */
-  private void addUsedTypes(Set<IType> types, Property property) throws Exception {
-    if (property.getEditor() instanceof ConstantSelectionPropertyEditor) {
-      ConstantSelectionPropertyEditor propertyEditor =
-          (ConstantSelectionPropertyEditor) property.getEditor();
-      if (propertyEditor.m_typeName.equals(m_typeName)) {
-        IType type = ConstantSelectionPropertyEditor.getType((GenericProperty) property);
-        if (type != null) {
-          types.add(type);
-        }
-      }
-    }
-    // check for sub-properties
-    PropertyEditor propertyEditor = property.getEditor();
-    if (propertyEditor instanceof IComplexPropertyEditor) {
-      Property[] properties = ((IComplexPropertyEditor) propertyEditor).getProperties(property);
-      for (Property subProperty : properties) {
-        addUsedTypes(types, subProperty);
-      }
-    }
-  }
-
-  /**
-   * @return the {@link IType}'s for top-level {@link TypeDeclaration} and implemented interfaces,
-   *         with constants of valid type.
-   */
-  private List<IType> getLocalTypes(JavaInfo javaInfo) throws Exception {
-    List<IType> types = Lists.newArrayList();
-    IJavaProject javaProject = javaInfo.getEditor().getJavaProject();
-    TypeDeclaration typeDeclaration = JavaInfoUtils.getTypeDeclaration(javaInfo);
-    // add type itself
-    {
-      String typeName = AstNodeUtils.getFullyQualifiedName(typeDeclaration, false);
-      addLocalTypes(javaProject, types, typeName);
-    }
-    // add interfaces
-    for (Type interfaceType : DomGenerics.superInterfaces(typeDeclaration)) {
-      String interfaceQualifiedName = AstNodeUtils.getFullyQualifiedName(interfaceType, false);
-      addLocalTypes(javaProject, types, interfaceQualifiedName);
-    }
-    // OK, we prepared local types
-    return types;
-  }
-
-  /**
-   * If {@link IType} with given name has valid constants, adds it into {@link List}.
-   */
-  private void addLocalTypes(IJavaProject javaProject, List<IType> types, String typeName)
-      throws Exception {
-    IType type = javaProject.findType(typeName);
-    if (type != null && !getFields(type).isEmpty()) {
-      types.add(type);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ConstantSelection_Dialog
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * The {@link ResizableDialog} for selecting constant.
-   */
-  private class ConstantSelection_Dialog extends ResizableDialog {
-    private static final int ADD_TYPE_ID = IDialogConstants.CLIENT_ID + 1;
-    private final JavaInfo m_javaInfo;
-    private final IField m_currentField;
-    private final IType m_currentType;
-    private final Set<IType> m_additionalTypes = Sets.newHashSet();
-    private TableViewer m_typesViewer;
-    private Text m_filterText;
-    private TableViewer m_fieldsViewer;
-    private IField m_selectedField;
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public ConstantSelection_Dialog(Shell parentShell, JavaInfo javaInfo, IField currentField) {
-      super(parentShell, DesignerPlugin.getDefault());
-      m_javaInfo = javaInfo;
-      m_currentField = currentField;
-      m_currentType = m_currentField != null ? m_currentField.getDeclaringType() : null;
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // GUI
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    protected Control createDialogArea(Composite parent) {
-      Composite container = (Composite) super.createDialogArea(parent);
-      GridLayoutFactory.create(container).columns(2);
-      {
-        Group group = new Group(container, SWT.NONE);
-        GridDataFactory.create(group).grab().fill();
-        GridLayoutFactory.create(group);
-        group.setText(ModelMessages.ConstantSelectionPropertyEditor_typesGroup);
-        {
-          m_typesViewer = new TableViewer(group, SWT.BORDER | SWT.FULL_SELECTION);
-          {
-            Table table = m_typesViewer.getTable();
-            GridDataFactory.create(table).hintC(50, 15).grab().fill();
-          }
-          // set providers
-          m_typesViewer.setLabelProvider(new JavaElementLabelProvider());
-          m_typesViewer.setContentProvider(new TypeContentProvider());
-          m_typesViewer.setInput(new Object());
-          // set listeners
-          m_typesViewer.addSelectionChangedListener(new ISelectionChangedListener() {
-            @Override
-            public void selectionChanged(SelectionChangedEvent e) {
-              onTypeSelected();
-            }
-          });
-        }
-      }
-      {
-        Group group = new Group(container, SWT.NONE);
-        GridDataFactory.create(group).grab().fill();
-        GridLayoutFactory.create(group).columns(2);
-        group.setText(ModelMessages.ConstantSelectionPropertyEditor_fieldsGroup);
-        {
-          Label label = new Label(group, SWT.NONE);
-          label.setText(ModelMessages.ConstantSelectionPropertyEditor_filterLabel);
-        }
-        {
-          m_filterText = new Text(group, SWT.BORDER);
-          GridDataFactory.create(m_filterText).grabH().fillH();
-          m_filterText.addModifyListener(new ModifyListener() {
-            @Override
-            public void modifyText(ModifyEvent e) {
-              onFilterModify();
-            }
-          });
-        }
-        {
-          m_fieldsViewer = new TableViewer(group, SWT.BORDER | SWT.FULL_SELECTION);
-          {
-            Table table = m_fieldsViewer.getTable();
-            GridDataFactory.create(table).spanH(2).hintC(50, 15).grab().fill();
-          }
-          // set providers
-          m_fieldsViewer.setLabelProvider(new JavaElementLabelProvider());
-          m_fieldsViewer.setContentProvider(new FieldContentProvider());
-          m_fieldsViewer.addFilter(new FieldFilter());
-          // set listeners
-          m_fieldsViewer.addOpenListener(new IOpenListener() {
-            @Override
-            public void open(OpenEvent e) {
-              okPressed();
-            }
-          });
-        }
-      }
-      // initialize selection in viewer's
-      ExecutionUtils.runLog(new RunnableEx() {
-        @Override
-        public void run() throws Exception {
-          if (m_currentType != null) {
-            m_typesViewer.setSelection(new StructuredSelection(m_currentType));
-          } else {
-            m_typesViewer.getTable().select(0);
-            onTypeSelected();
-          }
-        }
-      });
-      // set field filter
-      {
-        IDialogSettings settings = getDialogSettings();
-        String filter = settings.get("filter");
-        if (filter != null) {
-          m_filterText.setText(filter);
-          onFilterModify();
-        }
-      }
-      return container;
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // GUI additional
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    protected void configureShell(Shell newShell) {
-      super.configureShell(newShell);
-      newShell.setText(ModelMessages.ConstantSelectionPropertyEditor_title);
-    }
-
-    @Override
-    public boolean close() {
-      String filter = m_filterText.getText();
-      boolean closed = super.close();
-      if (closed) {
-        IDialogSettings settings = getDialogSettings();
-        settings.put("filter", filter);
-      }
-      return closed;
-    }
-
-    @Override
-    protected void createButtonsForButtonBar(Composite parent) {
-      createButton(
-          parent,
-          ADD_TYPE_ID,
-          ModelMessages.ConstantSelectionPropertyEditor_addTypeButton,
-          false);
-      createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, false);
-      createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false);
-    }
-
-    @Override
-    protected void okPressed() {
-      IStructuredSelection selection = (IStructuredSelection) m_fieldsViewer.getSelection();
-      m_selectedField = (IField) selection.getFirstElement();
-      super.okPressed();
-    }
-
-    @Override
-    protected void buttonPressed(int buttonId) {
-      if (buttonId == ADD_TYPE_ID) {
-        onAddType();
-      }
-      super.buttonPressed(buttonId);
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Handlers
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    /**
-     * {@link IType} was selected in {@link #m_typesViewer}, update {@link #m_fieldsViewer}.
-     */
-    private void onTypeSelected() {
-      IStructuredSelection selection = (IStructuredSelection) m_typesViewer.getSelection();
-      IType type = (IType) selection.getFirstElement();
-      m_fieldsViewer.setInput(type);
-      // select current IField
-      ExecutionUtils.runLog(new RunnableEx() {
-        @Override
-        public void run() throws Exception {
-          if (m_currentField != null) {
-            m_fieldsViewer.setSelection(new StructuredSelection(m_currentField));
-            Table table = m_fieldsViewer.getTable();
-            // it is good to set focus to "fields", so allow instantly use up/down keys
-            table.setFocus();
-            // tweak selection, because setSelection() should be used, not just select()
-            {
-              int selectionIndex = table.getSelectionIndex();
-              if (selectionIndex != -1) {
-                table.setSelection(selectionIndex);
-              }
-            }
-          }
-        }
-      });
-    }
-
-    /**
-     * Adds new {@link IType} into {@link #m_typesViewer}.
-     */
-    private void onAddType() {
-      ExecutionUtils.runLog(new RunnableEx() {
-        @Override
-        public void run() throws Exception {
-          IJavaProject javaProject = m_javaInfo.getEditor().getJavaProject();
-          IType type = JdtUiUtils.selectType(getShell(), javaProject);
-          if (type != null) {
-            m_additionalTypes.add(type);
-            m_typesViewer.refresh();
-            m_typesViewer.setSelection(new StructuredSelection(type));
-          }
-        }
-      });
-    }
-
-    /**
-     * Updates {@link #m_fieldsViewer} according to the new filter.
-     */
-    private void onFilterModify() {
-      m_fieldsViewer.refresh();
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Type providers
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    private class TypeContentProvider implements IStructuredContentProvider {
-      @Override
-      public Object[] getElements(Object inputElement) {
-        return ExecutionUtils.runObject(new RunnableObjectEx<Object[]>() {
-          @Override
-          public Object[] runObject() throws Exception {
-            Set<IType> types = Sets.newHashSet();
-            types.addAll(m_additionalTypes);
-            types.addAll(getUsedTypes(m_javaInfo));
-            types.addAll(getLocalTypes(m_javaInfo));
-            return types.toArray();
-          }
-        });
-      }
-
-      @Override
-      public void dispose() {
-      }
-
-      @Override
-      public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
-      }
-    }
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Field providers
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    private class FieldContentProvider implements IStructuredContentProvider {
-      @Override
-      public Object[] getElements(Object inputElement) {
-        final IType type = (IType) inputElement;
-        return ExecutionUtils.runObject(new RunnableObjectEx<Object[]>() {
-          @Override
-          public Object[] runObject() throws Exception {
-            return getFields(type).toArray();
-          }
-        });
-      }
-
-      @Override
-      public void dispose() {
-      }
-
-      @Override
-      public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
-      }
-    }
-    private class FieldFilter extends ViewerFilter {
-      @Override
-      public boolean select(Viewer viewer, Object parentElement, Object element) {
-        IField field = (IField) element;
-        String filter = m_filterText.getText().toLowerCase();
-        return field.getElementName().toLowerCase().startsWith(filter);
-      }
-    }
-  }
+implements
+IConfigurablePropertyObject {
+	private String m_typeName;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final PropertyEditorPresentation m_presentation = new ButtonPropertyEditorPresentation() {
+		@Override
+		protected void onClick(PropertyTable propertyTable, Property property) throws Exception {
+			openDialog(property);
+		}
+	};
+
+	@Override
+	public final PropertyEditorPresentation getPresentation() {
+		return m_presentation;
+	}
+
+	@Override
+	protected String getText(Property _property) throws Exception {
+		GenericProperty property = (GenericProperty) _property;
+		IField field = getField(property);
+		if (field != null) {
+			return field.getElementName();
+		}
+		return null;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AbstractComboPropertyEditor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void addItems(Property _property, CCombo3 combo) throws Exception {
+		GenericProperty property = (GenericProperty) _property;
+		IType type = getType(property);
+		List<IField> fields = getFields(type);
+		for (int index = 0; index < fields.size(); index++) {
+			IField field = fields.get(index);
+			combo.add(field.getElementName());
+			combo.setData("" + index, field);
+		}
+	}
+
+	@Override
+	protected void selectItem(Property _property, CCombo3 combo) throws Exception {
+		GenericProperty property = (GenericProperty) _property;
+		combo.select(-1);
+		// try to find current field
+		IField field = getField(property);
+		for (int i = 0; i < combo.getItemCount(); i++) {
+			if (combo.getData("" + i) == field) {
+				combo.select(i);
+				break;
+			}
+		}
+	}
+
+	@Override
+	protected void toPropertyEx(Property _property, CCombo3 combo, int index) throws Exception {
+		GenericProperty property = (GenericProperty) _property;
+		IField field = (IField) combo.getData("" + index);
+		setField(property, field);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean activate(PropertyTable propertyTable, Property property, Point location)
+			throws Exception {
+		// activate using keyboard
+		if (location == null) {
+			openDialog(property);
+			return false;
+		}
+		// activate as Combo
+		return super.activate(propertyTable, property, location);
+	}
+
+	/**
+	 * Opens editing dialog.
+	 */
+	private void openDialog(Property _property) throws Exception {
+		GenericProperty property = (GenericProperty) _property;
+		ConstantSelection_Dialog dialog =
+				new ConstantSelection_Dialog(DesignerPlugin.getShell(),
+						property.getJavaInfo(),
+						getField(property));
+		if (dialog.open() == Window.OK) {
+			setField(property, dialog.m_selectedField);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IConfigurablePropertyObject
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void configure(EditorState state, Map<String, Object> parameters) throws Exception {
+		m_typeName = (String) parameters.get("type");
+		Assert.isNotNull(m_typeName, "'type' attribute in %s.", parameters);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Opens dialog to select {@link IField}. XXX
+	 *
+	 * @return the selected {@link IField}, or <code>null</code> if selection was cancelled.
+	 */
+	public static IField selectField(Shell parentShell,
+			String typeName,
+			JavaInfo javaInfo,
+			Set<IType> additionalTypes,
+			IField currentField) throws Exception {
+		ConstantSelectionPropertyEditor editor = new ConstantSelectionPropertyEditor();
+		editor.m_typeName = typeName;
+		ConstantSelection_Dialog dialog =
+				editor.new ConstantSelection_Dialog(parentShell, javaInfo, currentField);
+		dialog.m_additionalTypes.addAll(additionalTypes);
+		if (dialog.open() == Window.OK) {
+			return dialog.m_selectedField;
+		}
+		return null;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utilities
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link IField}'s for constants of required type.
+	 */
+	public List<IField> getFields(IType type) throws Exception {
+		List<IField> fields = Lists.newArrayList();
+		if (type != null) {
+			for (IField field : type.getFields()) {
+				// check that field is "public static final"
+				{
+					int flags = field.getFlags();
+					boolean isConstant =
+							Flags.isPublic(flags) && Flags.isStatic(flags) && Flags.isFinal(flags);
+					if (type.isClass() && !isConstant) {
+						continue;
+					}
+				}
+				// check for valid type
+				{
+					String typeName = CodeUtils.getResolvedTypeName(type, field.getTypeSignature());
+					if (!typeName.equals(m_typeName)) {
+						continue;
+					}
+				}
+				// OK, we can add this field
+				fields.add(field);
+			}
+		}
+		// sort fields by name
+		Collections.sort(fields, new Comparator<IField>() {
+			@Override
+			public int compare(IField field1, IField field2) {
+				return field1.getElementName().compareTo(field2.getElementName());
+			}
+		});
+		// OK, final result
+		return fields;
+	}
+
+	/**
+	 * @return the {@link IType} for {@link IField} returned by {@link #getField(GenericProperty)},
+	 *         i.e. current {@link IType} to get constants from.
+	 */
+	private static IType getType(GenericProperty property) throws Exception {
+		IField field = getField(property);
+		return field != null ? field.getDeclaringType() : null;
+	}
+
+	/**
+	 * @return the {@link IField} that is represented by {@link Expression} of given
+	 *         {@link GenericProperty}, may be <code>null</code> if not a field is used as
+	 *         {@link Expression}.
+	 */
+	private static IField getField(GenericProperty property) throws Exception {
+		IJavaProject javaProject = property.getJavaInfo().getEditor().getJavaProject();
+		Expression expression = property.getExpression();
+		return getField(javaProject, expression);
+	}
+
+	/**
+	 * @return the {@link IField} that is represented by given {@link Expression}, may be
+	 *         <code>null</code> if not a field is used as {@link Expression}.
+	 */
+	public static IField getField(IJavaProject javaProject, Expression expression) throws Exception {
+		// QualifiedName: contains all required information
+		if (expression instanceof QualifiedName) {
+			QualifiedName qualifiedName = (QualifiedName) expression;
+			// prepare "typeName"
+			Name qualifier = qualifiedName.getQualifier();
+			String typeName = AstNodeUtils.getFullyQualifiedName(qualifier, true);
+			// find field
+			String fieldName = qualifiedName.getName().getIdentifier();
+			return CodeUtils.findField(javaProject, typeName, fieldName);
+		}
+		// SimpleName: may be name of field
+		if (expression instanceof SimpleName) {
+			SimpleName simpleName = (SimpleName) expression;
+			IVariableBinding binding = AstNodeUtils.getVariableBinding(simpleName);
+			if (binding != null) {
+				ITypeBinding declaringClass = binding.getDeclaringClass();
+				if (declaringClass != null) {
+					String typeName = AstNodeUtils.getFullyQualifiedName(declaringClass, false);
+					String fieldName = simpleName.getIdentifier();
+					return CodeUtils.findField(javaProject, typeName, fieldName);
+				}
+			}
+		}
+		// unknown
+		return null;
+	}
+
+	/**
+	 * Sets new {@link IField} value for {@link GenericProperty}.
+	 */
+	private static void setField(GenericProperty property, IField field) throws Exception {
+		String code = getFieldCode(property.getJavaInfo(), field);
+		property.setExpression(code, Property.UNKNOWN_VALUE);
+	}
+
+	/**
+	 * @param javaInfo
+	 *          the {@link JavaInfo} to specify context.
+	 * @param field
+	 *          the {@link IField} to get code for.
+	 *
+	 * @return the code that should be used to specify reference of given {@link IField}.
+	 */
+	public static String getFieldCode(JavaInfo javaInfo, IField field) throws Exception {
+		IType fieldType = field.getDeclaringType();
+		String fieldName = field.getElementName();
+		if (JavaInfoUtils.isLocalField(javaInfo, field)) {
+			return fieldName;
+		} else {
+			String typeName = fieldType.getFullyQualifiedName();
+			return typeName + "." + fieldName;
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Referenced IType's with constants
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return {@link IType}'s that have constants of valid type and are used by some
+	 *         {@link ConstantSelectionPropertyEditor} in current {@link CompilationUnit}.
+	 */
+	private Set<IType> getUsedTypes(JavaInfo javaInfo) throws Exception {
+		Set<IType> types = Sets.newHashSet();
+		collectUsedTypes(types, javaInfo.getRootJava());
+		return types;
+	}
+
+	/**
+	 * Adds {@link IType}'s with constants of valid type, using {@link Property}'s og given
+	 * {@link JavaInfo} and its children.
+	 */
+	private void collectUsedTypes(Set<IType> types, JavaInfo javaInfo) throws Exception {
+		for (Property property : javaInfo.getProperties()) {
+			addUsedTypes(types, property);
+		}
+		// collect types for children
+		for (JavaInfo child : javaInfo.getChildrenJava()) {
+			collectUsedTypes(types, child);
+		}
+	}
+
+	/**
+	 * If given {@link Property} has {@link ConstantSelectionPropertyEditor} with same constant type,
+	 * try to add used {@link IType}.
+	 */
+	private void addUsedTypes(Set<IType> types, Property property) throws Exception {
+		if (property.getEditor() instanceof ConstantSelectionPropertyEditor) {
+			ConstantSelectionPropertyEditor propertyEditor =
+					(ConstantSelectionPropertyEditor) property.getEditor();
+			if (propertyEditor.m_typeName.equals(m_typeName)) {
+				IType type = ConstantSelectionPropertyEditor.getType((GenericProperty) property);
+				if (type != null) {
+					types.add(type);
+				}
+			}
+		}
+		// check for sub-properties
+		PropertyEditor propertyEditor = property.getEditor();
+		if (propertyEditor instanceof IComplexPropertyEditor) {
+			Property[] properties = ((IComplexPropertyEditor) propertyEditor).getProperties(property);
+			for (Property subProperty : properties) {
+				addUsedTypes(types, subProperty);
+			}
+		}
+	}
+
+	/**
+	 * @return the {@link IType}'s for top-level {@link TypeDeclaration} and implemented interfaces,
+	 *         with constants of valid type.
+	 */
+	private List<IType> getLocalTypes(JavaInfo javaInfo) throws Exception {
+		List<IType> types = Lists.newArrayList();
+		IJavaProject javaProject = javaInfo.getEditor().getJavaProject();
+		TypeDeclaration typeDeclaration = JavaInfoUtils.getTypeDeclaration(javaInfo);
+		// add type itself
+		{
+			String typeName = AstNodeUtils.getFullyQualifiedName(typeDeclaration, false);
+			addLocalTypes(javaProject, types, typeName);
+		}
+		// add interfaces
+		for (Type interfaceType : DomGenerics.superInterfaces(typeDeclaration)) {
+			String interfaceQualifiedName = AstNodeUtils.getFullyQualifiedName(interfaceType, false);
+			addLocalTypes(javaProject, types, interfaceQualifiedName);
+		}
+		// OK, we prepared local types
+		return types;
+	}
+
+	/**
+	 * If {@link IType} with given name has valid constants, adds it into {@link List}.
+	 */
+	private void addLocalTypes(IJavaProject javaProject, List<IType> types, String typeName)
+			throws Exception {
+		IType type = javaProject.findType(typeName);
+		if (type != null && !getFields(type).isEmpty()) {
+			types.add(type);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ConstantSelection_Dialog
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * The {@link ResizableDialog} for selecting constant.
+	 */
+	private class ConstantSelection_Dialog extends ResizableDialog {
+		private static final int ADD_TYPE_ID = IDialogConstants.CLIENT_ID + 1;
+		private final JavaInfo m_javaInfo;
+		private final IField m_currentField;
+		private final IType m_currentType;
+		private final Set<IType> m_additionalTypes = Sets.newHashSet();
+		private TableViewer m_typesViewer;
+		private Text m_filterText;
+		private TableViewer m_fieldsViewer;
+		private IField m_selectedField;
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public ConstantSelection_Dialog(Shell parentShell, JavaInfo javaInfo, IField currentField) {
+			super(parentShell, DesignerPlugin.getDefault());
+			m_javaInfo = javaInfo;
+			m_currentField = currentField;
+			m_currentType = m_currentField != null ? m_currentField.getDeclaringType() : null;
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// GUI
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		protected Control createDialogArea(Composite parent) {
+			Composite container = (Composite) super.createDialogArea(parent);
+			GridLayoutFactory.create(container).columns(2);
+			{
+				Group group = new Group(container, SWT.NONE);
+				GridDataFactory.create(group).grab().fill();
+				GridLayoutFactory.create(group);
+				group.setText(ModelMessages.ConstantSelectionPropertyEditor_typesGroup);
+				{
+					m_typesViewer = new TableViewer(group, SWT.BORDER | SWT.FULL_SELECTION);
+					{
+						Table table = m_typesViewer.getTable();
+						GridDataFactory.create(table).hintC(50, 15).grab().fill();
+					}
+					// set providers
+					m_typesViewer.setLabelProvider(new JavaElementLabelProvider());
+					m_typesViewer.setContentProvider(new TypeContentProvider());
+					m_typesViewer.setInput(new Object());
+					// set listeners
+					m_typesViewer.addSelectionChangedListener(new ISelectionChangedListener() {
+						@Override
+						public void selectionChanged(SelectionChangedEvent e) {
+							onTypeSelected();
+						}
+					});
+				}
+			}
+			{
+				Group group = new Group(container, SWT.NONE);
+				GridDataFactory.create(group).grab().fill();
+				GridLayoutFactory.create(group).columns(2);
+				group.setText(ModelMessages.ConstantSelectionPropertyEditor_fieldsGroup);
+				{
+					Label label = new Label(group, SWT.NONE);
+					label.setText(ModelMessages.ConstantSelectionPropertyEditor_filterLabel);
+				}
+				{
+					m_filterText = new Text(group, SWT.BORDER);
+					GridDataFactory.create(m_filterText).grabH().fillH();
+					m_filterText.addModifyListener(new ModifyListener() {
+						@Override
+						public void modifyText(ModifyEvent e) {
+							onFilterModify();
+						}
+					});
+				}
+				{
+					m_fieldsViewer = new TableViewer(group, SWT.BORDER | SWT.FULL_SELECTION);
+					{
+						Table table = m_fieldsViewer.getTable();
+						GridDataFactory.create(table).spanH(2).hintC(50, 15).grab().fill();
+					}
+					// set providers
+					m_fieldsViewer.setLabelProvider(new JavaElementLabelProvider());
+					m_fieldsViewer.setContentProvider(new FieldContentProvider());
+					m_fieldsViewer.addFilter(new FieldFilter());
+					// set listeners
+					m_fieldsViewer.addOpenListener(new IOpenListener() {
+						@Override
+						public void open(OpenEvent e) {
+							okPressed();
+						}
+					});
+				}
+			}
+			// initialize selection in viewer's
+			ExecutionUtils.runLog(new RunnableEx() {
+				@Override
+				public void run() throws Exception {
+					if (m_currentType != null) {
+						m_typesViewer.setSelection(new StructuredSelection(m_currentType));
+					} else {
+						m_typesViewer.getTable().select(0);
+						onTypeSelected();
+					}
+				}
+			});
+			// set field filter
+			{
+				IDialogSettings settings = getDialogSettings();
+				String filter = settings.get("filter");
+				if (filter != null) {
+					m_filterText.setText(filter);
+					onFilterModify();
+				}
+			}
+			return container;
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// GUI additional
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		protected void configureShell(Shell newShell) {
+			super.configureShell(newShell);
+			newShell.setText(ModelMessages.ConstantSelectionPropertyEditor_title);
+		}
+
+		@Override
+		public boolean close() {
+			String filter = m_filterText.getText();
+			boolean closed = super.close();
+			if (closed) {
+				IDialogSettings settings = getDialogSettings();
+				settings.put("filter", filter);
+			}
+			return closed;
+		}
+
+		@Override
+		protected void createButtonsForButtonBar(Composite parent) {
+			createButton(
+					parent,
+					ADD_TYPE_ID,
+					ModelMessages.ConstantSelectionPropertyEditor_addTypeButton,
+					false);
+			createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, false);
+			createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false);
+		}
+
+		@Override
+		protected void okPressed() {
+			IStructuredSelection selection = (IStructuredSelection) m_fieldsViewer.getSelection();
+			m_selectedField = (IField) selection.getFirstElement();
+			super.okPressed();
+		}
+
+		@Override
+		protected void buttonPressed(int buttonId) {
+			if (buttonId == ADD_TYPE_ID) {
+				onAddType();
+			}
+			super.buttonPressed(buttonId);
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Handlers
+		//
+		////////////////////////////////////////////////////////////////////////////
+		/**
+		 * {@link IType} was selected in {@link #m_typesViewer}, update {@link #m_fieldsViewer}.
+		 */
+		private void onTypeSelected() {
+			IStructuredSelection selection = (IStructuredSelection) m_typesViewer.getSelection();
+			IType type = (IType) selection.getFirstElement();
+			m_fieldsViewer.setInput(type);
+			// select current IField
+			ExecutionUtils.runLog(new RunnableEx() {
+				@Override
+				public void run() throws Exception {
+					if (m_currentField != null) {
+						m_fieldsViewer.setSelection(new StructuredSelection(m_currentField));
+						Table table = m_fieldsViewer.getTable();
+						// it is good to set focus to "fields", so allow instantly use up/down keys
+						table.setFocus();
+						// tweak selection, because setSelection() should be used, not just select()
+						{
+							int selectionIndex = table.getSelectionIndex();
+							if (selectionIndex != -1) {
+								table.setSelection(selectionIndex);
+							}
+						}
+					}
+				}
+			});
+		}
+
+		/**
+		 * Adds new {@link IType} into {@link #m_typesViewer}.
+		 */
+		private void onAddType() {
+			ExecutionUtils.runLog(new RunnableEx() {
+				@Override
+				public void run() throws Exception {
+					IJavaProject javaProject = m_javaInfo.getEditor().getJavaProject();
+					IType type = JdtUiUtils.selectType(getShell(), javaProject);
+					if (type != null) {
+						m_additionalTypes.add(type);
+						m_typesViewer.refresh();
+						m_typesViewer.setSelection(new StructuredSelection(type));
+					}
+				}
+			});
+		}
+
+		/**
+		 * Updates {@link #m_fieldsViewer} according to the new filter.
+		 */
+		private void onFilterModify() {
+			m_fieldsViewer.refresh();
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Type providers
+		//
+		////////////////////////////////////////////////////////////////////////////
+		private class TypeContentProvider implements IStructuredContentProvider {
+			@Override
+			public Object[] getElements(Object inputElement) {
+				return ExecutionUtils.runObject(new RunnableObjectEx<Object[]>() {
+					@Override
+					public Object[] runObject() throws Exception {
+						Set<IType> types = Sets.newHashSet();
+						types.addAll(m_additionalTypes);
+						types.addAll(getUsedTypes(m_javaInfo));
+						types.addAll(getLocalTypes(m_javaInfo));
+						return types.toArray();
+					}
+				});
+			}
+
+			@Override
+			public void dispose() {
+			}
+
+			@Override
+			public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+			}
+		}
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Field providers
+		//
+		////////////////////////////////////////////////////////////////////////////
+		private class FieldContentProvider implements IStructuredContentProvider {
+			@Override
+			public Object[] getElements(Object inputElement) {
+				final IType type = (IType) inputElement;
+				return ExecutionUtils.runObject(new RunnableObjectEx<Object[]>() {
+					@Override
+					public Object[] runObject() throws Exception {
+						return getFields(type).toArray();
+					}
+				});
+			}
+
+			@Override
+			public void dispose() {
+			}
+
+			@Override
+			public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+			}
+		}
+		private class FieldFilter extends ViewerFilter {
+			@Override
+			public boolean select(Viewer viewer, Object parentElement, Object element) {
+				IField field = (IField) element;
+				String filter = m_filterText.getText().toLowerCase();
+				return field.getElementName().toLowerCase().startsWith(filter);
+			}
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/DatePropertyEditor.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/DatePropertyEditor.java
index 2d018cfa8..12d709d39 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/DatePropertyEditor.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/DatePropertyEditor.java
@@ -50,287 +50,287 @@
  * @coverage core.model.property.editor
  */
 public final class DatePropertyEditor extends AbstractTextPropertyEditor
-    implements
-      IValueSourcePropertyEditor,
-      IConfigurablePropertyObject {
-  private EditorState m_state;
-  private String m_toStringScript;
-  private String m_toDateScript;
-  private String m_functions;
-  private String m_sourceTemplate;
-  private boolean m_isLongValue;
+implements
+IValueSourcePropertyEditor,
+IConfigurablePropertyObject {
+	private EditorState m_state;
+	private String m_toStringScript;
+	private String m_toDateScript;
+	private String m_functions;
+	private String m_sourceTemplate;
+	private boolean m_isLongValue;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public PropertyEditorPresentation getPresentation() {
-    return PRESENTATION;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public PropertyEditorPresentation getPresentation() {
+		return PRESENTATION;
+	}
 
-  private final PropertyEditorPresentation PRESENTATION = new ButtonPropertyEditorPresentation() {
-    @Override
-    protected Image getImage() {
-      return DesignerPlugin.getImage("properties/dt.png");
-    }
+	private final PropertyEditorPresentation PRESENTATION = new ButtonPropertyEditorPresentation() {
+		@Override
+		protected Image getImage() {
+			return DesignerPlugin.getImage("properties/dt.png");
+		}
 
-    @Override
-    protected void onClick(PropertyTable propertyTable, Property property) throws Exception {
-      // create dialog
-      DateDialog dialog = new DateDialog(DesignerPlugin.getShell());
-      if (property.getValue() != null && property.getValue() != Property.UNKNOWN_VALUE) {
-        if (m_isLongValue) {
-          dialog.setValue((Long) property.getValue());
-        } else {
-          dialog.setValue((Date) property.getValue());
-        }
-      }
-      // open dialog
-      if (dialog.open() == Window.OK) {
-        property.setValue(dialog.getValue());
-      }
-    }
-  };
+		@Override
+		protected void onClick(PropertyTable propertyTable, Property property) throws Exception {
+			// create dialog
+			DateDialog dialog = new DateDialog(DesignerPlugin.getShell());
+			if (property.getValue() != null && property.getValue() != Property.UNKNOWN_VALUE) {
+				if (m_isLongValue) {
+					dialog.setValue((Long) property.getValue());
+				} else {
+					dialog.setValue((Date) property.getValue());
+				}
+			}
+			// open dialog
+			if (dialog.open() == Window.OK) {
+				property.setValue(dialog.getValue());
+			}
+		}
+	};
 
-  @Override
-  public String getText(Property property) throws Exception {
-    Object value = property.getValue();
-    if (value instanceof Long) {
-      value = new Date(((Long) value).longValue());
-    }
-    if (value instanceof Date) {
-      Map<String, Object> variables = Maps.newTreeMap();
-      if (property instanceof GenericProperty) {
-        GenericProperty genericProperty = (GenericProperty) property;
-        variables.put("control", genericProperty.getJavaInfo().getObject());
-      }
-      variables.put("value", value);
-      return (String) evaluate(m_toStringScript, variables);
-    }
-    return null;
-  }
+	@Override
+	public String getText(Property property) throws Exception {
+		Object value = property.getValue();
+		if (value instanceof Long) {
+			value = new Date(((Long) value).longValue());
+		}
+		if (value instanceof Date) {
+			Map<String, Object> variables = Maps.newTreeMap();
+			if (property instanceof GenericProperty) {
+				GenericProperty genericProperty = (GenericProperty) property;
+				variables.put("control", genericProperty.getJavaInfo().getObject());
+			}
+			variables.put("value", value);
+			return (String) evaluate(m_toStringScript, variables);
+		}
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getEditorText(Property property) throws Exception {
-    return getText(property);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getEditorText(Property property) throws Exception {
+		return getText(property);
+	}
 
-  @Override
-  protected boolean setEditorText(Property property, String text) throws Exception {
-    String valueText = text.trim();
-    Object value;
-    // check for delete
-    if (valueText.length() == 0) {
-      value = Property.UNKNOWN_VALUE;
-    } else {
-      // prepare value
-      try {
-        Map<String, Object> variables = Maps.newTreeMap();
-        variables.put("value", valueText);
-        if (property instanceof GenericProperty) {
-          GenericProperty genericProperty = (GenericProperty) property;
-          variables.put("control", genericProperty.getJavaInfo().getObject());
-        }
-        value = evaluate(m_toDateScript, variables);
-      } catch (Throwable e) {
-        UiUtils.openWarning(
-            DesignerPlugin.getShell(),
-            property.getTitle(),
-            MessageFormat.format(ModelMessages.DatePropertyEditor_notValidDate, valueText));
-        return false;
-      }
-    }
-    // modify property
-    property.setValue(value);
-    return true;
-  }
+	@Override
+	protected boolean setEditorText(Property property, String text) throws Exception {
+		String valueText = text.trim();
+		Object value;
+		// check for delete
+		if (valueText.length() == 0) {
+			value = Property.UNKNOWN_VALUE;
+		} else {
+			// prepare value
+			try {
+				Map<String, Object> variables = Maps.newTreeMap();
+				variables.put("value", valueText);
+				if (property instanceof GenericProperty) {
+					GenericProperty genericProperty = (GenericProperty) property;
+					variables.put("control", genericProperty.getJavaInfo().getObject());
+				}
+				value = evaluate(m_toDateScript, variables);
+			} catch (Throwable e) {
+				UiUtils.openWarning(
+						DesignerPlugin.getShell(),
+						property.getTitle(),
+						MessageFormat.format(ModelMessages.DatePropertyEditor_notValidDate, valueText));
+				return false;
+			}
+		}
+		// modify property
+		property.setValue(value);
+		return true;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IValueSourcePropertyEditor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getValueSource(Object value) throws Exception {
-    if (value instanceof Date) {
-      String source;
-      Long millisecs = ReflectionUtils.getFieldLong(value, "fastTime");
-      if (StringUtils.isEmpty(m_sourceTemplate)) {
-        source = "new java.util.Date(%millisecs%)";
-      } else {
-        Map<String, Object> variables = Maps.newTreeMap();
-        variables.put("value", value);
-        String valueText = (String) evaluate(m_toStringScript, variables);
-        source = StringUtils.replace(m_sourceTemplate, "%value%", valueText);
-      }
-      return StringUtils.replace(source, "%millisecs%", millisecs.toString() + "L");
-    }
-    return value == null ? "(java.util.Date) null" : value.toString();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IValueSourcePropertyEditor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getValueSource(Object value) throws Exception {
+		if (value instanceof Date) {
+			String source;
+			Long millisecs = ReflectionUtils.getFieldLong(value, "fastTime");
+			if (StringUtils.isEmpty(m_sourceTemplate)) {
+				source = "new java.util.Date(%millisecs%)";
+			} else {
+				Map<String, Object> variables = Maps.newTreeMap();
+				variables.put("value", value);
+				String valueText = (String) evaluate(m_toStringScript, variables);
+				source = StringUtils.replace(m_sourceTemplate, "%value%", valueText);
+			}
+			return StringUtils.replace(source, "%millisecs%", millisecs.toString() + "L");
+		}
+		return value == null ? "(java.util.Date) null" : value.toString();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IConfigurablePropertyObject
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void configure(EditorState state, Map<String, Object> parameters) throws Exception {
-    m_state = state;
-    // functions
-    {
-      final String FUNCTIONS_PARAM = "functions";
-      if (parameters.containsKey(FUNCTIONS_PARAM)) {
-        m_functions = (String) parameters.get(FUNCTIONS_PARAM);
-      } else {
-        m_functions = "";
-      }
-    }
-    // to-string script
-    {
-      final String TO_STRING_PARAM = "toString";
-      String toStringScript = "";
-      if (parameters.containsKey(TO_STRING_PARAM)) {
-        toStringScript = (String) parameters.get(TO_STRING_PARAM);
-      }
-      if (StringUtils.isEmpty(toStringScript)) {
-        toStringScript =
-            StringUtils.join(new String[]{
-                "import java.text.SimpleDateFormat;",
-                m_functions,
-                "(new SimpleDateFormat()).format(value)"});
-      } else {
-        toStringScript = m_functions + "\n" + toStringScript;
-      }
-      m_toStringScript = toStringScript;
-    }
-    // to-date script
-    {
-      final String TO_DATE_PARAM = "toDate";
-      String toDateScript = "";
-      if (parameters.containsKey(TO_DATE_PARAM)) {
-        toDateScript = (String) parameters.get(TO_DATE_PARAM);
-      }
-      if (StringUtils.isEmpty(toDateScript)) {
-        toDateScript =
-            StringUtils.join(new String[]{
-                "import java.text.SimpleDateFormat;",
-                m_functions,
-                "(new java.text.SimpleDateFormat()).parse(value)"});
-      } else {
-        toDateScript = m_functions + "\n" + toDateScript;
-      }
-      m_toDateScript = toDateScript;
-    }
-    // source template
-    {
-      final String SOURCE_PARAM = "source";
-      if (parameters.containsKey(SOURCE_PARAM)) {
-        m_sourceTemplate = (String) parameters.get(SOURCE_PARAM);
-      } else {
-        m_sourceTemplate = "";
-      }
-    }
-    // isLongValue switch
-    {
-      final String IS_LONG_VALUE_PARAM = "isLongValue";
-      if (parameters.containsKey(IS_LONG_VALUE_PARAM)) {
-        m_isLongValue = ((String) parameters.get(IS_LONG_VALUE_PARAM)).equals("true");
-      } else {
-        m_isLongValue = false;
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IConfigurablePropertyObject
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void configure(EditorState state, Map<String, Object> parameters) throws Exception {
+		m_state = state;
+		// functions
+		{
+			final String FUNCTIONS_PARAM = "functions";
+			if (parameters.containsKey(FUNCTIONS_PARAM)) {
+				m_functions = (String) parameters.get(FUNCTIONS_PARAM);
+			} else {
+				m_functions = "";
+			}
+		}
+		// to-string script
+		{
+			final String TO_STRING_PARAM = "toString";
+			String toStringScript = "";
+			if (parameters.containsKey(TO_STRING_PARAM)) {
+				toStringScript = (String) parameters.get(TO_STRING_PARAM);
+			}
+			if (StringUtils.isEmpty(toStringScript)) {
+				toStringScript =
+						StringUtils.join(new String[]{
+								"import java.text.SimpleDateFormat;",
+								m_functions,
+						"(new SimpleDateFormat()).format(value)"});
+			} else {
+				toStringScript = m_functions + "\n" + toStringScript;
+			}
+			m_toStringScript = toStringScript;
+		}
+		// to-date script
+		{
+			final String TO_DATE_PARAM = "toDate";
+			String toDateScript = "";
+			if (parameters.containsKey(TO_DATE_PARAM)) {
+				toDateScript = (String) parameters.get(TO_DATE_PARAM);
+			}
+			if (StringUtils.isEmpty(toDateScript)) {
+				toDateScript =
+						StringUtils.join(new String[]{
+								"import java.text.SimpleDateFormat;",
+								m_functions,
+						"(new java.text.SimpleDateFormat()).parse(value)"});
+			} else {
+				toDateScript = m_functions + "\n" + toDateScript;
+			}
+			m_toDateScript = toDateScript;
+		}
+		// source template
+		{
+			final String SOURCE_PARAM = "source";
+			if (parameters.containsKey(SOURCE_PARAM)) {
+				m_sourceTemplate = (String) parameters.get(SOURCE_PARAM);
+			} else {
+				m_sourceTemplate = "";
+			}
+		}
+		// isLongValue switch
+		{
+			final String IS_LONG_VALUE_PARAM = "isLongValue";
+			if (parameters.containsKey(IS_LONG_VALUE_PARAM)) {
+				m_isLongValue = ((String) parameters.get(IS_LONG_VALUE_PARAM)).equals("true");
+			} else {
+				m_isLongValue = false;
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Object evaluate(String script, Map<String, Object> variables) throws Exception {
-    if (m_state == null) {
-      return ScriptUtils.evaluate(script, variables);
-    } else {
-      return ScriptUtils.evaluate(m_state.getEditorLoader(), script, variables);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Object evaluate(String script, Map<String, Object> variables) throws Exception {
+		if (m_state == null) {
+			return ScriptUtils.evaluate(script, variables);
+		} else {
+			return ScriptUtils.evaluate(m_state.getEditorLoader(), script, variables);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Dialog
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static class DateDialog extends ReusableDialog {
-    private Date m_value;
-    private boolean m_changed;
-    private CDateTime m_control;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Dialog
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static class DateDialog extends ReusableDialog {
+		private Date m_value;
+		private boolean m_changed;
+		private CDateTime m_control;
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public DateDialog(Shell parentShell) {
-      super(parentShell);
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public DateDialog(Shell parentShell) {
+			super(parentShell);
+		}
 
-    @Override
-    protected void onBeforeOpen() {
-      super.onBeforeOpen();
-      m_changed = false;
-    }
+		@Override
+		protected void onBeforeOpen() {
+			super.onBeforeOpen();
+			m_changed = false;
+		}
 
-    public void setValue(Date value) {
-      m_value = value;
-    }
+		public void setValue(Date value) {
+			m_value = value;
+		}
 
-    public void setValue(Long value) {
-      m_value = new Date(value);
-    }
+		public void setValue(Long value) {
+			m_value = new Date(value);
+		}
 
-    public Date getValue() {
-      if (isChanged()) {
-        m_value = m_control.getSelection();
-      }
-      return m_value;
-    }
+		public Date getValue() {
+			if (isChanged()) {
+				m_value = m_control.getSelection();
+			}
+			return m_value;
+		}
 
-    public boolean isChanged() {
-      return m_changed;
-    }
+		public boolean isChanged() {
+			return m_changed;
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Contents
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    protected void configureShell(Shell newShell) {
-      super.configureShell(newShell);
-      newShell.setText(ModelMessages.DatePropertyEditor_dialogTitle);
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Contents
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		protected void configureShell(Shell newShell) {
+			super.configureShell(newShell);
+			newShell.setText(ModelMessages.DatePropertyEditor_dialogTitle);
+		}
 
-    @Override
-    protected Control createDialogArea(Composite parent) {
-      Composite area = (Composite) super.createDialogArea(parent);
-      area.setLayout(new FillLayout());
-      // create date&time control
-      m_control = new CDateTime(area, CDT.SIMPLE | CDT.DATE_MEDIUM | CDT.TIME_MEDIUM);
-      m_control.addSelectionListener(new SelectionAdapter() {
-        @Override
-        public void widgetSelected(SelectionEvent e) {
-          m_changed = true;
-        }
-      });
-      m_control.setSelection(m_value);
-      //
-      return area;
-    }
-  }
+		@Override
+		protected Control createDialogArea(Composite parent) {
+			Composite area = (Composite) super.createDialogArea(parent);
+			area.setLayout(new FillLayout());
+			// create date&time control
+			m_control = new CDateTime(area, CDT.SIMPLE | CDT.DATE_MEDIUM | CDT.TIME_MEDIUM);
+			m_control.addSelectionListener(new SelectionAdapter() {
+				@Override
+				public void widgetSelected(SelectionEvent e) {
+					m_changed = true;
+				}
+			});
+			m_control.setSelection(m_value);
+			//
+			return area;
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/DisplayExpressionPropertyEditor.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/DisplayExpressionPropertyEditor.java
index c5c79da69..8aa7af15b 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/DisplayExpressionPropertyEditor.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/DisplayExpressionPropertyEditor.java
@@ -25,40 +25,40 @@
  * @coverage core.model.property.editor
  */
 public final class DisplayExpressionPropertyEditor extends TextDisplayPropertyEditor {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final PropertyEditor INSTANCE = new DisplayExpressionPropertyEditor();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final PropertyEditor INSTANCE = new DisplayExpressionPropertyEditor();
 
-  private DisplayExpressionPropertyEditor() {
-  }
+	private DisplayExpressionPropertyEditor() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getText(Property property) throws Exception {
-    GenericProperty genericProperty = (GenericProperty) property;
-    Expression expression = genericProperty.getExpression();
-    if (expression != null) {
-      AstEditor editor = genericProperty.getJavaInfo().getEditor();
-      return editor.getSource(expression);
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getText(Property property) throws Exception {
+		GenericProperty genericProperty = (GenericProperty) property;
+		Expression expression = genericProperty.getExpression();
+		if (expression != null) {
+			AstEditor editor = genericProperty.getJavaInfo().getEditor();
+			return editor.getSource(expression);
+		}
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean activate(PropertyTable propertyTable, Property property, Point location)
-      throws Exception {
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean activate(PropertyTable propertyTable, Property property, Point location)
+			throws Exception {
+		return false;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/EnumCustomPropertyEditor.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/EnumCustomPropertyEditor.java
index f1c321ddc..bd4918c90 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/EnumCustomPropertyEditor.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/EnumCustomPropertyEditor.java
@@ -20,31 +20,31 @@
  * @coverage core.model.property.editor
  */
 public final class EnumCustomPropertyEditor extends AbstractEnumPropertyEditor {
-  private Class<?> m_class;
-  private Enum<?>[] m_enumElements;
+	private Class<?> m_class;
+	private Enum<?>[] m_enumElements;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Combo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Enum<?>[] getElements(Property property) {
-    return m_enumElements;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Combo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Enum<?>[] getElements(Property property) {
+		return m_enumElements;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Configuring
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void configure(Class<?> enumClass) {
-    m_class = enumClass;
-    m_enumElements = (Enum<?>[]) m_class.getEnumConstants();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Configuring
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void configure(Class<?> enumClass) {
+		m_class = enumClass;
+		m_enumElements = (Enum<?>[]) m_class.getEnumConstants();
+	}
 
-  public <T extends Enum<?>> void configure(T[] enumElements) {
-    m_class = enumElements[0].getDeclaringClass();
-    m_enumElements = enumElements;
-  }
+	public <T extends Enum<?>> void configure(T[] enumElements) {
+		m_class = enumElements[0].getDeclaringClass();
+		m_enumElements = enumElements;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/EnumPropertyEditor.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/EnumPropertyEditor.java
index a82c84a5b..f1712cdea 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/EnumPropertyEditor.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/EnumPropertyEditor.java
@@ -21,30 +21,30 @@
  * @coverage core.model.property.editor
  */
 public final class EnumPropertyEditor extends AbstractEnumPropertyEditor {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final EnumPropertyEditor INSTANCE = new EnumPropertyEditor();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final EnumPropertyEditor INSTANCE = new EnumPropertyEditor();
 
-  private EnumPropertyEditor() {
-  }
+	private EnumPropertyEditor() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Combo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Enum<?>[] getElements(Property property) throws Exception {
-    Enum<?>[] elements = null;
-    if (property instanceof ITypedProperty) {
-      Class<?> typeClass = ((ITypedProperty) property).getType();
-      if (typeClass.isEnum()) {
-        elements = (Enum<?>[]) typeClass.getEnumConstants();
-      }
-    }
-    return elements == null ? new Enum<?>[0] : elements;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Combo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Enum<?>[] getElements(Property property) throws Exception {
+		Enum<?>[] elements = null;
+		if (property instanceof ITypedProperty) {
+			Class<?> typeClass = ((ITypedProperty) property).getType();
+			if (typeClass.isEnum()) {
+				elements = (Enum<?>[]) typeClass.getEnumConstants();
+			}
+		}
+		return elements == null ? new Enum<?>[0] : elements;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/EnumerationValuesPropertyEditor.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/EnumerationValuesPropertyEditor.java
index d2e27b4e6..92d175413 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/EnumerationValuesPropertyEditor.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/EnumerationValuesPropertyEditor.java
@@ -28,106 +28,106 @@
  * @coverage core.model.property.editor
  */
 public class EnumerationValuesPropertyEditor extends AbstractComboPropertyEditor
-    implements
-      IValueSourcePropertyEditor,
-      IClipboardSourceProvider {
-  private final String[] m_names;
-  private final Object[] m_values;
-  private final String[] m_sources;
+implements
+IValueSourcePropertyEditor,
+IClipboardSourceProvider {
+	private final String[] m_names;
+	private final Object[] m_values;
+	private final String[] m_sources;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public EnumerationValuesPropertyEditor(Object attributeValue) {
-    Object[] enumElements = (Object[]) attributeValue;
-    int items = enumElements.length / 3;
-    m_names = new String[items];
-    m_values = new Object[items];
-    m_sources = new String[items];
-    for (int i = 0; i < items; i++) {
-      m_names[i] = (String) enumElements[3 * i + 0];
-      m_values[i] = enumElements[3 * i + 1];
-      m_sources[i] = (String) enumElements[3 * i + 2];
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public EnumerationValuesPropertyEditor(Object attributeValue) {
+		Object[] enumElements = (Object[]) attributeValue;
+		int items = enumElements.length / 3;
+		m_names = new String[items];
+		m_values = new Object[items];
+		m_sources = new String[items];
+		for (int i = 0; i < items; i++) {
+			m_names[i] = (String) enumElements[3 * i + 0];
+			m_values[i] = enumElements[3 * i + 1];
+			m_sources[i] = (String) enumElements[3 * i + 2];
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // TextDisplayPropertyEditor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getText(Property property) throws Exception {
-    Object value = property.getValue();
-    // return name for value
-    if (value != Property.UNKNOWN_VALUE) {
-      for (int i = 0; i < m_values.length; i++) {
-        if (ObjectUtils.equals(m_values[i], value)) {
-          return m_names[i];
-        }
-      }
-    }
-    // unknown value
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// TextDisplayPropertyEditor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getText(Property property) throws Exception {
+		Object value = property.getValue();
+		// return name for value
+		if (value != Property.UNKNOWN_VALUE) {
+			for (int i = 0; i < m_values.length; i++) {
+				if (ObjectUtils.equals(m_values[i], value)) {
+					return m_names[i];
+				}
+			}
+		}
+		// unknown value
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IValueSourcePropertyEditor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getValueSource(Object value) throws Exception {
-    if (value != Property.UNKNOWN_VALUE) {
-      for (int i = 0; i < m_values.length; i++) {
-        if (ObjectUtils.equals(m_values[i], value)) {
-          return m_sources[i];
-        }
-      }
-    }
-    // unknown value
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IValueSourcePropertyEditor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getValueSource(Object value) throws Exception {
+		if (value != Property.UNKNOWN_VALUE) {
+			for (int i = 0; i < m_values.length; i++) {
+				if (ObjectUtils.equals(m_values[i], value)) {
+					return m_sources[i];
+				}
+			}
+		}
+		// unknown value
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IClipboardSourceProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getClipboardSource(GenericProperty property) throws Exception {
-    Object value = property.getValue();
-    return getValueSource(value);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IClipboardSourceProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getClipboardSource(GenericProperty property) throws Exception {
+		Object value = property.getValue();
+		return getValueSource(value);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Combo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void addItems(Property property, CCombo3 combo) throws Exception {
-    for (String title : m_names) {
-      combo.add(title);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Combo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void addItems(Property property, CCombo3 combo) throws Exception {
+		for (String title : m_names) {
+			combo.add(title);
+		}
+	}
 
-  @Override
-  protected void selectItem(Property property, CCombo3 combo) throws Exception {
-    combo.setText(getText(property));
-  }
+	@Override
+	protected void selectItem(Property property, CCombo3 combo) throws Exception {
+		combo.setText(getText(property));
+	}
 
-  @Override
-  protected void toPropertyEx(Property property, CCombo3 combo, int index) throws Exception {
-    Object value = m_values[index];
-    if (property instanceof GenericProperty) {
-      GenericProperty genericProperty = (GenericProperty) property;
-      String source = getValueSource(value);
-      genericProperty.setExpression(source, value);
-    } else {
-      property.setValue(value);
-    }
-  }
+	@Override
+	protected void toPropertyEx(Property property, CCombo3 combo, int index) throws Exception {
+		Object value = m_values[index];
+		if (property instanceof GenericProperty) {
+			GenericProperty genericProperty = (GenericProperty) property;
+			String source = getValueSource(value);
+			genericProperty.setExpression(source, value);
+		} else {
+			property.setValue(value);
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/ExpressionListPropertyEditor.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/ExpressionListPropertyEditor.java
index 249cf5533..5a16f2d68 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/ExpressionListPropertyEditor.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/ExpressionListPropertyEditor.java
@@ -29,126 +29,126 @@
  * @coverage core.model.property.editor
  */
 public final class ExpressionListPropertyEditor extends AbstractListPropertyEditor {
-  protected String[] m_expressions;
-  protected String[] m_conditions;
-  protected String[] m_titles;
-  protected String m_functions;
-  protected Object[] m_compiled;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access to list items
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected int getCount() {
-    return m_compiled.length;
-  }
-
-  @Override
-  protected int getValueIndex(Object value) {
-    for (int i = 0; i < getCount(); i++) {
-      Map<String, Object> variables = Maps.newTreeMap();
-      variables.put("value", value);
-      setVariables(variables, i);
-      if ((Boolean) MVEL.executeExpression(m_compiled[i], variables)) {
-        return i;
-      }
-    }
-    return -1;
-  }
-
-  protected void setVariables(Map<String, Object> variables, int conditionIndex) {
-  }
-
-  @Override
-  protected String getTitle(int index) {
-    return m_titles[index];
-  }
-
-  @Override
-  protected String getExpression(int index) throws Exception {
-    return m_expressions[index];
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IConfigurablePropertyObject
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void configure(EditorState state, Map<String, Object> parameters) throws Exception {
-    // initialize parameters
-    initializeParameters(parameters);
-    // prepare parameters
-    prepareParameters(state);
-    // sanity check
-    Assert.isTrue(
-        m_expressions.length == m_conditions.length && m_expressions.length == m_titles.length,
-        "Count of expressions/conditions/titles should be same in %s",
-        parameters);
-    // compile conditions
-    compileConditions();
-  }
-
-  protected static final String USER_functions = "functions";
-
-  private void initializeParameters(Map<String, Object> parameters) {
-    m_expressions = getParameterAsArray(parameters, "expressions");
-    m_conditions = getParameterAsArray(parameters, "conditions");
-    m_titles = getParameterAsArray(parameters, "titles", true);
-    // init functions
-    if (parameters.containsKey(USER_functions)) {
-      Object functions = parameters.get(USER_functions);
-      if (functions instanceof String) {
-        m_functions = (String) functions;
-      }
-    } else {
-      m_functions = "";
-    }
-  }
-
-  private void prepareParameters(EditorState state) throws ClassNotFoundException {
-    // if no titles specified, then copy them from expressions
-    if (m_titles == null || m_titles.length < 1) {
-      m_titles = new String[m_expressions.length];
-      for (int i = 0; i < m_expressions.length; i++) {
-        m_titles[i] = m_expressions[i];
-      }
-    }
-  }
-
-  /**
-   * Compiling conditions using MVEL library
-   */
-  private static final String DEF_functions = StringUtils.join(new String[]{
-      "def isType(t, c) {",
-      "  if (c is String) {",
-      "    return ReflectionUtils.isSuccessorOf(t, c);",
-      "  } else {",
-      "    return c.isAssignableFrom(v);",
-      "  }",
-      "};",
-      "def isValueType(c) {",
-      "  if (value == null) {",
-      "    return false;",
-      "  } else {",
-      "    return isType(value.getClass(),c);",
-      "  }",
-      "};",}, "\n");
-
-  private void compileConditions() {
-    ParserContext parseContext = getParseContext();
-    m_compiled = new Object[m_conditions.length];
-    for (int i = 0; i < m_conditions.length; i++) {
-      String expression = DEF_functions + m_functions + m_conditions[i];
-      m_compiled[i] = MVEL.compileExpression(expression, parseContext);
-    }
-  }
-
-  private static ParserContext getParseContext() {
-    ParserContext context = new ParserContext();
-    context.addImport("ReflectionUtils", ReflectionUtils.class);
-    return context;
-  }
+	protected String[] m_expressions;
+	protected String[] m_conditions;
+	protected String[] m_titles;
+	protected String m_functions;
+	protected Object[] m_compiled;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access to list items
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected int getCount() {
+		return m_compiled.length;
+	}
+
+	@Override
+	protected int getValueIndex(Object value) {
+		for (int i = 0; i < getCount(); i++) {
+			Map<String, Object> variables = Maps.newTreeMap();
+			variables.put("value", value);
+			setVariables(variables, i);
+			if ((Boolean) MVEL.executeExpression(m_compiled[i], variables)) {
+				return i;
+			}
+		}
+		return -1;
+	}
+
+	protected void setVariables(Map<String, Object> variables, int conditionIndex) {
+	}
+
+	@Override
+	protected String getTitle(int index) {
+		return m_titles[index];
+	}
+
+	@Override
+	protected String getExpression(int index) throws Exception {
+		return m_expressions[index];
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IConfigurablePropertyObject
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void configure(EditorState state, Map<String, Object> parameters) throws Exception {
+		// initialize parameters
+		initializeParameters(parameters);
+		// prepare parameters
+		prepareParameters(state);
+		// sanity check
+		Assert.isTrue(
+				m_expressions.length == m_conditions.length && m_expressions.length == m_titles.length,
+				"Count of expressions/conditions/titles should be same in %s",
+				parameters);
+		// compile conditions
+		compileConditions();
+	}
+
+	protected static final String USER_functions = "functions";
+
+	private void initializeParameters(Map<String, Object> parameters) {
+		m_expressions = getParameterAsArray(parameters, "expressions");
+		m_conditions = getParameterAsArray(parameters, "conditions");
+		m_titles = getParameterAsArray(parameters, "titles", true);
+		// init functions
+		if (parameters.containsKey(USER_functions)) {
+			Object functions = parameters.get(USER_functions);
+			if (functions instanceof String) {
+				m_functions = (String) functions;
+			}
+		} else {
+			m_functions = "";
+		}
+	}
+
+	private void prepareParameters(EditorState state) throws ClassNotFoundException {
+		// if no titles specified, then copy them from expressions
+		if (m_titles == null || m_titles.length < 1) {
+			m_titles = new String[m_expressions.length];
+			for (int i = 0; i < m_expressions.length; i++) {
+				m_titles[i] = m_expressions[i];
+			}
+		}
+	}
+
+	/**
+	 * Compiling conditions using MVEL library
+	 */
+	private static final String DEF_functions = StringUtils.join(new String[]{
+			"def isType(t, c) {",
+			"  if (c is String) {",
+			"    return ReflectionUtils.isSuccessorOf(t, c);",
+			"  } else {",
+			"    return c.isAssignableFrom(v);",
+			"  }",
+			"};",
+			"def isValueType(c) {",
+			"  if (value == null) {",
+			"    return false;",
+			"  } else {",
+			"    return isType(value.getClass(),c);",
+			"  }",
+			"};",}, "\n");
+
+	private void compileConditions() {
+		ParserContext parseContext = getParseContext();
+		m_compiled = new Object[m_conditions.length];
+		for (int i = 0; i < m_conditions.length; i++) {
+			String expression = DEF_functions + m_functions + m_conditions[i];
+			m_compiled[i] = MVEL.compileExpression(expression, parseContext);
+		}
+	}
+
+	private static ParserContext getParseContext() {
+		ParserContext context = new ParserContext();
+		context.addImport("ReflectionUtils", ReflectionUtils.class);
+		return context;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/IObjectPropertyProcessor.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/IObjectPropertyProcessor.java
index 26acf7ba7..6a2e7e1c5 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/IObjectPropertyProcessor.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/IObjectPropertyProcessor.java
@@ -22,13 +22,13 @@
  * @coverage core.model.property.editor
  */
 public interface IObjectPropertyProcessor {
-  /**
-   * @param property
-   *          {@link Property} to assign object value.
-   * @param componentValue
-   *          value {@link JavaInfo} for assign.
-   * @return the {@link StatementTarget} for assign invocation.
-   */
-  public StatementTarget getObjectPropertyStatementTarget(GenericProperty property,
-      JavaInfo componentValue) throws Exception;
+	/**
+	 * @param property
+	 *          {@link Property} to assign object value.
+	 * @param componentValue
+	 *          value {@link JavaInfo} for assign.
+	 * @return the {@link StatementTarget} for assign invocation.
+	 */
+	public StatementTarget getObjectPropertyStatementTarget(GenericProperty property,
+			JavaInfo componentValue) throws Exception;
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/InnerClassPropertyEditor.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/InnerClassPropertyEditor.java
index fc31a9752..57bbb1280 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/InnerClassPropertyEditor.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/InnerClassPropertyEditor.java
@@ -78,186 +78,186 @@ public String getColumnText(Object element, int columnIndex) {
  * @coverage core.model.property.editor
  */
 public final class InnerClassPropertyEditor extends TextDialogPropertyEditor
-    implements
-      IConfigurablePropertyObject {
-  private static enum Mode {
-    INNER, ANONYMOUS
-  }
+implements
+IConfigurablePropertyObject {
+	private static enum Mode {
+		INNER, ANONYMOUS
+	}
 
-  private Mode m_mode;
-  private String m_baseName;
-  private String m_className;
-  private String m_source;
+	private Mode m_mode;
+	private String m_baseName;
+	private String m_className;
+	private String m_source;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getText(Property property) throws Exception {
-    GenericProperty genericProperty = (GenericProperty) property;
-    Expression expression = genericProperty.getExpression();
-    if (expression instanceof ClassInstanceCreation) {
-      ClassInstanceCreation cic = (ClassInstanceCreation) expression;
-      if (cic.getAnonymousClassDeclaration() != null) {
-        return "<anonymous>";
-      }
-      return AstNodeUtils.getFullyQualifiedName(expression, false);
-    }
-    // no class
-    return "<double click>";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getText(Property property) throws Exception {
+		GenericProperty genericProperty = (GenericProperty) property;
+		Expression expression = genericProperty.getExpression();
+		if (expression instanceof ClassInstanceCreation) {
+			ClassInstanceCreation cic = (ClassInstanceCreation) expression;
+			if (cic.getAnonymousClassDeclaration() != null) {
+				return "<anonymous>";
+			}
+			return AstNodeUtils.getFullyQualifiedName(expression, false);
+		}
+		// no class
+		return "<double click>";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean activate(PropertyTable propertyTable, Property property, Point location)
-      throws Exception {
-    // activate using keyboard
-    if (location == null) {
-      openClass(property);
-    }
-    // don't activate
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean activate(PropertyTable propertyTable, Property property, Point location)
+			throws Exception {
+		// activate using keyboard
+		if (location == null) {
+			openClass(property);
+		}
+		// don't activate
+		return false;
+	}
 
-  @Override
-  protected void openDialog(Property property) throws Exception {
-    GenericProperty genericProperty = (GenericProperty) property;
-    JavaInfo javaInfo = genericProperty.getJavaInfo();
-    // prepare scope
-    Shell shell = DesignerPlugin.getShell();
-    IJavaProject javaProject = javaInfo.getEditor().getJavaProject();
-    // open dialog
-    IType type = JdtUiUtils.selectType(shell, javaProject);
-    if (type != null) {
-      if (Flags.isAbstract(type.getFlags())) {
-        UiUtils.openError(
-            shell,
-            ModelMessages.InnerClassPropertyEditor_selectTypeAbstractTitle,
-            ModelMessages.InnerClassPropertyEditor_selectTypeAbstractMessage);
-        return;
-      }
-      String source = getCreationSource(javaInfo, type);
-      genericProperty.setExpression(source, Property.UNKNOWN_VALUE);
-    }
-  }
+	@Override
+	protected void openDialog(Property property) throws Exception {
+		GenericProperty genericProperty = (GenericProperty) property;
+		JavaInfo javaInfo = genericProperty.getJavaInfo();
+		// prepare scope
+		Shell shell = DesignerPlugin.getShell();
+		IJavaProject javaProject = javaInfo.getEditor().getJavaProject();
+		// open dialog
+		IType type = JdtUiUtils.selectType(shell, javaProject);
+		if (type != null) {
+			if (Flags.isAbstract(type.getFlags())) {
+				UiUtils.openError(
+						shell,
+						ModelMessages.InnerClassPropertyEditor_selectTypeAbstractTitle,
+						ModelMessages.InnerClassPropertyEditor_selectTypeAbstractMessage);
+				return;
+			}
+			String source = getCreationSource(javaInfo, type);
+			genericProperty.setExpression(source, Property.UNKNOWN_VALUE);
+		}
+	}
 
-  /**
-   * @return the source to use to create {@link Class} instance. Attempt to use shortest
-   *         constructor.
-   */
-  private static String getCreationSource(JavaInfo javaInfo, IType type) {
-    String sourceTypeName = type.getFullyQualifiedName().replace('$', '.');
-    try {
-      ClassLoader classLoader = JavaInfoUtils.getClassLoader(javaInfo);
-      Class<?> componentClass = classLoader.loadClass(sourceTypeName);
-      Constructor<?> constructor = ReflectionUtils.getShortestConstructor(componentClass);
-      return ComponentDescriptionHelper.getDefaultConstructorInvocation(constructor);
-    } catch (Throwable e) {
-      return "new " + sourceTypeName + "()";
-    }
-  }
+	/**
+	 * @return the source to use to create {@link Class} instance. Attempt to use shortest
+	 *         constructor.
+	 */
+	private static String getCreationSource(JavaInfo javaInfo, IType type) {
+		String sourceTypeName = type.getFullyQualifiedName().replace('$', '.');
+		try {
+			ClassLoader classLoader = JavaInfoUtils.getClassLoader(javaInfo);
+			Class<?> componentClass = classLoader.loadClass(sourceTypeName);
+			Constructor<?> constructor = ReflectionUtils.getShortestConstructor(componentClass);
+			return ComponentDescriptionHelper.getDefaultConstructorInvocation(constructor);
+		} catch (Throwable e) {
+			return "new " + sourceTypeName + "()";
+		}
+	}
 
-  @Override
-  public void doubleClick(Property property, Point location) throws Exception {
-    openClass(property);
-  }
+	@Override
+	public void doubleClick(Property property, Point location) throws Exception {
+		openClass(property);
+	}
 
-  /**
-   * If there is class, open it, else create new inner class and open.
-   */
-  private void openClass(Property property) throws Exception {
-    GenericProperty genericProperty = (GenericProperty) property;
-    Expression expression = genericProperty.getExpression();
-    if (expression != null) {
-      IDesignPageSite site = IDesignPageSite.Helper.getSite(genericProperty.getJavaInfo());
-      if (site != null) {
-        site.openSourcePosition(expression.getStartPosition());
-      }
-    } else {
-      // generate new class
-      switch (m_mode) {
-        case ANONYMOUS :
-          newClass_ANONYMOUS(genericProperty);
-          break;
-        case INNER :
-          newClass_INNER(genericProperty);
-          break;
-      }
-      openClass(property);
-    }
-  }
+	/**
+	 * If there is class, open it, else create new inner class and open.
+	 */
+	private void openClass(Property property) throws Exception {
+		GenericProperty genericProperty = (GenericProperty) property;
+		Expression expression = genericProperty.getExpression();
+		if (expression != null) {
+			IDesignPageSite site = IDesignPageSite.Helper.getSite(genericProperty.getJavaInfo());
+			if (site != null) {
+				site.openSourcePosition(expression.getStartPosition());
+			}
+		} else {
+			// generate new class
+			switch (m_mode) {
+			case ANONYMOUS :
+				newClass_ANONYMOUS(genericProperty);
+				break;
+			case INNER :
+				newClass_INNER(genericProperty);
+				break;
+			}
+			openClass(property);
+		}
+	}
 
-  /**
-   * Uses anonymous class as {@link GenericProperty} expression.
-   */
-  private void newClass_ANONYMOUS(GenericProperty genericProperty) throws Exception {
-    JavaInfo javaInfo = genericProperty.getJavaInfo();
-    String source = TemplateUtils.evaluate(m_source, javaInfo, ImmutableMap.<String, String>of());
-    genericProperty.setExpression(source, Property.UNKNOWN_VALUE);
-  }
+	/**
+	 * Uses anonymous class as {@link GenericProperty} expression.
+	 */
+	private void newClass_ANONYMOUS(GenericProperty genericProperty) throws Exception {
+		JavaInfo javaInfo = genericProperty.getJavaInfo();
+		String source = TemplateUtils.evaluate(m_source, javaInfo, ImmutableMap.<String, String>of());
+		genericProperty.setExpression(source, Property.UNKNOWN_VALUE);
+	}
 
-  /**
-   * Adds new inner class.
-   */
-  private void newClass_INNER(GenericProperty genericProperty) throws Exception {
-    JavaInfo javaInfo = genericProperty.getJavaInfo();
-    AstEditor editor = javaInfo.getEditor();
-    // prepare name of type and source lines
-    String newName;
-    List<String> newLines;
-    {
-      newName = editor.getUniqueTypeName(m_baseName);
-      String newSource =
-          TemplateUtils.evaluate(m_source, javaInfo, ImmutableMap.of("name", newName));
-      newLines = ImmutableList.copyOf(StringUtils.split(newSource, "\r\n"));
-    }
-    // add type
-    {
-      TypeDeclaration targetType = JavaInfoUtils.getTypeDeclaration(javaInfo);
-      editor.addTypeDeclaration(newLines, new BodyDeclarationTarget(targetType, true));
-    }
-    // set value
-    genericProperty.setExpression("new " + newName + "()", Property.UNKNOWN_VALUE);
-  }
+	/**
+	 * Adds new inner class.
+	 */
+	private void newClass_INNER(GenericProperty genericProperty) throws Exception {
+		JavaInfo javaInfo = genericProperty.getJavaInfo();
+		AstEditor editor = javaInfo.getEditor();
+		// prepare name of type and source lines
+		String newName;
+		List<String> newLines;
+		{
+			newName = editor.getUniqueTypeName(m_baseName);
+			String newSource =
+					TemplateUtils.evaluate(m_source, javaInfo, ImmutableMap.of("name", newName));
+			newLines = ImmutableList.copyOf(StringUtils.split(newSource, "\r\n"));
+		}
+		// add type
+		{
+			TypeDeclaration targetType = JavaInfoUtils.getTypeDeclaration(javaInfo);
+			editor.addTypeDeclaration(newLines, new BodyDeclarationTarget(targetType, true));
+		}
+		// set value
+		genericProperty.setExpression("new " + newName + "()", Property.UNKNOWN_VALUE);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IConfigurablePropertyObject
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void configure(EditorState state, Map<String, Object> parameters) throws Exception {
-    // mode
-    {
-      String modeText = (String) parameters.get("mode");
-      Assert.isNotNull(modeText, "'mode' attribute required.");
-      modeText = modeText.toUpperCase(Locale.ENGLISH);
-      m_mode = Mode.valueOf(modeText);
-      Assert.isNotNull(
-          m_mode,
-          "Invalid value for 'mode' attribute. Only 'anonymous' or 'inner' supported.");
-    }
-    // base class name
-    if (m_mode != Mode.ANONYMOUS) {
-      m_baseName = (String) parameters.get("name");
-      Assert.isNotNull(m_baseName, "'name' attribute required.");
-    }
-    // class
-    {
-      m_className = (String) parameters.get("class");
-      Assert.isNotNull(m_className, "'class' attribute required.");
-    }
-    // template source
-    {
-      m_source = (String) parameters.get("source");
-      Assert.isNotNull(m_source, "'source' attribute required.");
-      m_source = m_source.trim();
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IConfigurablePropertyObject
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void configure(EditorState state, Map<String, Object> parameters) throws Exception {
+		// mode
+		{
+			String modeText = (String) parameters.get("mode");
+			Assert.isNotNull(modeText, "'mode' attribute required.");
+			modeText = modeText.toUpperCase(Locale.ENGLISH);
+			m_mode = Mode.valueOf(modeText);
+			Assert.isNotNull(
+					m_mode,
+					"Invalid value for 'mode' attribute. Only 'anonymous' or 'inner' supported.");
+		}
+		// base class name
+		if (m_mode != Mode.ANONYMOUS) {
+			m_baseName = (String) parameters.get("name");
+			Assert.isNotNull(m_baseName, "'name' attribute required.");
+		}
+		// class
+		{
+			m_className = (String) parameters.get("class");
+			Assert.isNotNull(m_className, "'class' attribute required.");
+		}
+		// template source
+		{
+			m_source = (String) parameters.get("source");
+			Assert.isNotNull(m_source, "'source' attribute required.");
+			m_source = m_source.trim();
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/InstanceListPropertyEditor.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/InstanceListPropertyEditor.java
index 9aa6634ec..bbe75c2e9 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/InstanceListPropertyEditor.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/InstanceListPropertyEditor.java
@@ -24,77 +24,77 @@
  * @coverage core.model.property.editor
  */
 public final class InstanceListPropertyEditor extends AbstractListPropertyEditor {
-  private String[] m_types;
-  private String[] m_titles;
-  private Class<?>[] m_classes;
+	private String[] m_types;
+	private String[] m_titles;
+	private Class<?>[] m_classes;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access to list items
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected int getCount() {
-    return m_classes.length;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access to list items
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected int getCount() {
+		return m_classes.length;
+	}
 
-  @Override
-  protected int getValueIndex(Object value) {
-    for (int i = 0; i < getCount(); i++) {
-      if (value == null ? m_classes[i] == null : value.getClass() == m_classes[i]) {
-        return i;
-      }
-    }
-    return -1;
-  }
+	@Override
+	protected int getValueIndex(Object value) {
+		for (int i = 0; i < getCount(); i++) {
+			if (value == null ? m_classes[i] == null : value.getClass() == m_classes[i]) {
+				return i;
+			}
+		}
+		return -1;
+	}
 
-  @Override
-  protected String getTitle(int index) {
-    return m_titles[index];
-  }
+	@Override
+	protected String getTitle(int index) {
+		return m_titles[index];
+	}
 
-  @Override
-  protected String getExpression(int index) throws Exception {
-    return m_classes[index] == null ? "null" : "new " + m_types[index] + "()";
-  }
+	@Override
+	protected String getExpression(int index) throws Exception {
+		return m_classes[index] == null ? "null" : "new " + m_types[index] + "()";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IConfigurablePropertyObject
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void configure(EditorState state, Map<String, Object> parameters) throws Exception {
-    // prepare m_classes
-    m_types = getParameterAsArray(parameters, "types");
-    // prepare m_types
-    m_classes = new Class<?>[m_types.length];
-    for (int i = 0; i < m_types.length; i++) {
-      // special "null" expression
-      if (m_types[i].equalsIgnoreCase("null")) {
-        m_classes[i] = null;
-      } else {
-        m_classes[i] = state.getEditorLoader().loadClass(m_types[i]);
-      }
-    }
-    // prepare titles
-    m_titles = getParameterAsArray(parameters, "titles", true);
-    if (m_titles == null || m_titles.length < 1) {
-      m_titles = new String[m_classes.length];
-      for (int i = 0; i < m_classes.length; i++) {
-        ClassUtils.getShortClassName(m_classes[i]);
-        if (m_classes[i] == null) {
-          m_titles[i] = "null";
-        } else {
-          m_titles[i] = ClassUtils.getShortClassName(m_classes[i]);
-        }
-      }
-    } else {
-      // sanity check
-      Assert.isTrue(
-          m_classes.length == m_titles.length,
-          "Count of types/titles should be same in %s",
-          parameters);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IConfigurablePropertyObject
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void configure(EditorState state, Map<String, Object> parameters) throws Exception {
+		// prepare m_classes
+		m_types = getParameterAsArray(parameters, "types");
+		// prepare m_types
+		m_classes = new Class<?>[m_types.length];
+		for (int i = 0; i < m_types.length; i++) {
+			// special "null" expression
+			if (m_types[i].equalsIgnoreCase("null")) {
+				m_classes[i] = null;
+			} else {
+				m_classes[i] = state.getEditorLoader().loadClass(m_types[i]);
+			}
+		}
+		// prepare titles
+		m_titles = getParameterAsArray(parameters, "titles", true);
+		if (m_titles == null || m_titles.length < 1) {
+			m_titles = new String[m_classes.length];
+			for (int i = 0; i < m_classes.length; i++) {
+				ClassUtils.getShortClassName(m_classes[i]);
+				if (m_classes[i] == null) {
+					m_titles[i] = "null";
+				} else {
+					m_titles[i] = ClassUtils.getShortClassName(m_classes[i]);
+				}
+			}
+		} else {
+			// sanity check
+			Assert.isTrue(
+					m_classes.length == m_titles.length,
+					"Count of types/titles should be same in %s",
+					parameters);
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/LocalePropertyEditor.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/LocalePropertyEditor.java
index 894133f14..4103257da 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/LocalePropertyEditor.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/LocalePropertyEditor.java
@@ -25,48 +25,48 @@
  * @coverage core.model.property.editor
  */
 public final class LocalePropertyEditor extends TextDialogPropertyEditor {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final PropertyEditor INSTANCE = new LocalePropertyEditor();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final PropertyEditor INSTANCE = new LocalePropertyEditor();
 
-  private LocalePropertyEditor() {
-  }
+	private LocalePropertyEditor() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getText(Property property) throws Exception {
-    Object value = property.getValue();
-    if (value instanceof Locale) {
-      return ((Locale) value).getDisplayName();
-    }
-    // unknown value
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getText(Property property) throws Exception {
+		Object value = property.getValue();
+		if (value instanceof Locale) {
+			return ((Locale) value).getDisplayName();
+		}
+		// unknown value
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void openDialog(Property property) throws Exception {
-    Object value = property.getValue();
-    ChooseLocaleDialog localeDialog;
-    if (value instanceof Locale) {
-      localeDialog = new ChooseLocaleDialog(DesignerPlugin.getShell(), (Locale) value);
-    } else {
-      localeDialog = new ChooseLocaleDialog(DesignerPlugin.getShell(), null);
-    }
-    // open dialog
-    if (localeDialog.open() == Window.OK) {
-      property.setValue(localeDialog.getSelectedLocale().getLocale());
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void openDialog(Property property) throws Exception {
+		Object value = property.getValue();
+		ChooseLocaleDialog localeDialog;
+		if (value instanceof Locale) {
+			localeDialog = new ChooseLocaleDialog(DesignerPlugin.getShell(), (Locale) value);
+		} else {
+			localeDialog = new ChooseLocaleDialog(DesignerPlugin.getShell(), null);
+		}
+		// open dialog
+		if (localeDialog.open() == Window.OK) {
+			property.setValue(localeDialog.getSelectedLocale().getLocale());
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/MethodPropertyPropertyEditor.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/MethodPropertyPropertyEditor.java
index 67696359b..e47dc2153 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/MethodPropertyPropertyEditor.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/MethodPropertyPropertyEditor.java
@@ -28,56 +28,56 @@
  * @coverage core.model.property.editor
  */
 public final class MethodPropertyPropertyEditor extends TextDisplayPropertyEditor
-    implements
-      IComplexPropertyEditor {
-  private final String m_text;
-  private final List<GenericPropertyDescription> m_descriptions;
+implements
+IComplexPropertyEditor {
+	private final String m_text;
+	private final List<GenericPropertyDescription> m_descriptions;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public MethodPropertyPropertyEditor(String text, List<GenericPropertyDescription> descriptions) {
-    m_text = text;
-    m_descriptions = descriptions;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public MethodPropertyPropertyEditor(String text, List<GenericPropertyDescription> descriptions) {
+		m_text = text;
+		m_descriptions = descriptions;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getText(Property property) throws Exception {
-    return m_text;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getText(Property property) throws Exception {
+		return m_text;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IComplexPropertyEditor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Property[] getProperties(Property _methodProperty) throws Exception {
-    GenericProperty methodProperty = (GenericProperty) _methodProperty;
-    // lazily create sub-properties
-    Property[] properties = (Property[]) methodProperty.getArbitraryValue(this);
-    if (properties == null) {
-      properties = createProperties(methodProperty);
-      methodProperty.putArbitraryValue(this, properties);
-    }
-    // OK, we have sub-properties
-    return properties;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IComplexPropertyEditor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Property[] getProperties(Property _methodProperty) throws Exception {
+		GenericProperty methodProperty = (GenericProperty) _methodProperty;
+		// lazily create sub-properties
+		Property[] properties = (Property[]) methodProperty.getArbitraryValue(this);
+		if (properties == null) {
+			properties = createProperties(methodProperty);
+			methodProperty.putArbitraryValue(this, properties);
+		}
+		// OK, we have sub-properties
+		return properties;
+	}
 
-  private Property[] createProperties(GenericProperty methodProperty) {
-    Property[] properties = new Property[m_descriptions.size()];
-    int propertyIndex = 0;
-    for (GenericPropertyDescription description : m_descriptions) {
-      JavaInfo javaInfo = methodProperty.getJavaInfo();
-      properties[propertyIndex++] = PropertyUtils2.createGenericPropertyImpl(javaInfo, description);
-    }
-    return properties;
-  }
+	private Property[] createProperties(GenericProperty methodProperty) {
+		Property[] properties = new Property[m_descriptions.size()];
+		int propertyIndex = 0;
+		for (GenericPropertyDescription description : m_descriptions) {
+			JavaInfo javaInfo = methodProperty.getJavaInfo();
+			properties[propertyIndex++] = PropertyUtils2.createGenericPropertyImpl(javaInfo, description);
+		}
+		return properties;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/ObjectPropertyEditor.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/ObjectPropertyEditor.java
index 3a9aff778..49166ad3a 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/ObjectPropertyEditor.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/ObjectPropertyEditor.java
@@ -51,202 +51,202 @@
  * @coverage core.model.property.editor
  */
 public final class ObjectPropertyEditor extends TextDialogPropertyEditor
-    implements
-      IComplexPropertyEditor {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final PropertyEditor INSTANCE = new ObjectPropertyEditor();
-
-  private ObjectPropertyEditor() {
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public JavaInfo getValueComponent(Property property) throws Exception {
-    Object value = property.getValue();
-    GenericProperty genericProperty = (GenericProperty) property;
-    return genericProperty.getJavaInfo().getRootJava().getChildByObject(value);
-  }
-
-  @Override
-  protected String getText(Property property) throws Exception {
-    JavaInfo component = getValueComponent(property);
-    if (component != null) {
-      return ObjectsLabelProvider.INSTANCE.getText(component);
-    }
-    // unknown value
-    return null;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void openDialog(Property property_) throws Exception {
-    GenericProperty property = (GenericProperty) property_;
-    // prepare dialog
-    ElementTreeSelectionDialog selectionDialog;
-    {
-      final JavaInfo thisComponent = property.getJavaInfo();
-      final Class<?> propertyType = property.getType();
-      // providers
-      ISelectionStatusValidator validator = new ISelectionStatusValidator() {
-        @Override
-        public IStatus validate(Object[] selection) {
-          if (selection.length == 1) {
-            if (isValidComponent(propertyType, selection[0])) {
-              return StatusUtils.OK_STATUS;
-            }
-          }
-          return StatusUtils.ERROR_STATUS;
-        }
-      };
-      ITreeContentProvider contentProvider = createContentProvider(propertyType);
-      // create dialog
-      selectionDialog =
-          new ElementTreeSelectionDialog(DesignerPlugin.getShell(), ObjectsLabelProvider.INSTANCE,
-              contentProvider) {
-            @Override
-            public void create() {
-              super.create();
-              getTreeViewer().expandAll();
-            }
-          };
-      selectionDialog.setAllowMultiple(false);
-      selectionDialog.setTitle(property_.getTitle());
-      selectionDialog.setMessage(ModelMessages.ObjectPropertyEditor_chooseMessage);
-      selectionDialog.setValidator(validator);
-      // set input
-      selectionDialog.setInput(new Object[]{thisComponent.getRoot()});
-      // set initial selection
-      {
-        JavaInfo component = getValueComponent(property);
-        selectionDialog.setInitialSelection(component);
-      }
-    }
-    // open dialog
-    if (selectionDialog.open() == Window.OK) {
-      JavaInfo component = (JavaInfo) selectionDialog.getFirstResult();
-      setComponent(property, component);
-    }
-  }
-
-  private ITreeContentProvider createContentProvider(final Class<?> propertyType) {
-    final ITreeContentProvider[] contentProvider = new ITreeContentProvider[1];
-    contentProvider[0] = new ObjectsTreeContentProvider(new Predicate<ObjectInfo>() {
-      @Override
-      public boolean apply(ObjectInfo t) {
-        return isValidComponent(propertyType, t) || hasValidComponents(t);
-      }
-
-      private boolean hasValidComponents(ObjectInfo t) {
-        return contentProvider[0].getChildren(t).length != 0;
-      }
-    });
-    return contentProvider[0];
-  }
-
-  private boolean isValidComponent(Class<?> propertyType, Object element) {
-    if (element instanceof JavaInfo) {
-      JavaInfo component = (JavaInfo) element;
-      Class<?> componentClass = component.getDescription().getComponentClass();
-      return componentClass != null && propertyType.isAssignableFrom(componentClass);
-    }
-    return false;
-  }
-
-  /**
-   * Sets new {@link JavaInfo} value.
-   *
-   * @param component
-   *          new {@link JavaInfo}, or <code>null</code>, if property should be removed.
-   */
-  public void setComponent(final GenericProperty property, final JavaInfo component)
-      throws Exception {
-    ExecutionUtils.run(property.getJavaInfo(), new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        setComponent0(property, component);
-      }
-    });
-  }
-
-  /**
-   * Implementation for {@link #setComponent(GenericProperty, JavaInfo)}.
-   */
-  private void setComponent0(GenericProperty property, JavaInfo component) throws Exception {
-    JavaInfo thisComponent = property.getJavaInfo();
-    // remove existing invocation
-    property.setValue(Property.UNKNOWN_VALUE);
-    // set, if not null
-    if (component != null) {
-      Method setter = getSetter(property);
-      // may be setter
-      if (setter != null) {
-        StatementTarget target = null;
-        // try get special target
-        if (thisComponent instanceof IObjectPropertyProcessor) {
-          IObjectPropertyProcessor objectPropertyProcessor =
-              (IObjectPropertyProcessor) thisComponent;
-          target = objectPropertyProcessor.getObjectPropertyStatementTarget(property, component);
-        }
-        // if no special, use default
-        if (target == null) {
-          if (component.getVariableSupport() instanceof LazyVariableSupport) {
-            // "lazy" component is always accessible
-            property.setExpression(TemplateUtils.getExpression(component), component);
-            return;
-          }
-          List<JavaInfo> allComponents = ImmutableList.of(thisComponent, component);
-          target = JavaInfoUtils.getStatementTarget_whenAllCreated(allComponents);
-        }
-        String source =
-            TemplateUtils.format("{0}.{1}({2})", thisComponent, setter.getName(), component);
-        Expression expression = thisComponent.addExpressionStatement(target, source);
-        component.addRelatedNodes(expression);
-        return;
-      }
-      // should be creation
-      property.setExpression(TemplateUtils.getExpression(component), component);
-    }
-  }
-
-  /**
-   * @return the setter {@link Method}, or <code>null</code> if given {@link Property} is not based
-   *         on known setter.
-   */
-  private static Method getSetter(Property property) throws Exception {
-    if (property instanceof GenericPropertyImpl) {
-      GenericPropertyImpl genericProperty = (GenericPropertyImpl) property;
-      List<ExpressionAccessor> accessors = genericProperty.getAccessors();
-      for (ExpressionAccessor accessor : accessors) {
-        if (accessor instanceof SetterAccessor) {
-          return ((SetterAccessor) accessor).getSetter();
-        }
-      }
-    }
-    return null;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Property[] getProperties(Property property) throws Exception {
-    JavaInfo component = getValueComponent(property);
-    if (component != null) {
-      return component.getProperties();
-    }
-    return new Property[0];
-  }
+implements
+IComplexPropertyEditor {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final PropertyEditor INSTANCE = new ObjectPropertyEditor();
+
+	private ObjectPropertyEditor() {
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public JavaInfo getValueComponent(Property property) throws Exception {
+		Object value = property.getValue();
+		GenericProperty genericProperty = (GenericProperty) property;
+		return genericProperty.getJavaInfo().getRootJava().getChildByObject(value);
+	}
+
+	@Override
+	protected String getText(Property property) throws Exception {
+		JavaInfo component = getValueComponent(property);
+		if (component != null) {
+			return ObjectsLabelProvider.INSTANCE.getText(component);
+		}
+		// unknown value
+		return null;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void openDialog(Property property_) throws Exception {
+		GenericProperty property = (GenericProperty) property_;
+		// prepare dialog
+		ElementTreeSelectionDialog selectionDialog;
+		{
+			final JavaInfo thisComponent = property.getJavaInfo();
+			final Class<?> propertyType = property.getType();
+			// providers
+			ISelectionStatusValidator validator = new ISelectionStatusValidator() {
+				@Override
+				public IStatus validate(Object[] selection) {
+					if (selection.length == 1) {
+						if (isValidComponent(propertyType, selection[0])) {
+							return StatusUtils.OK_STATUS;
+						}
+					}
+					return StatusUtils.ERROR_STATUS;
+				}
+			};
+			ITreeContentProvider contentProvider = createContentProvider(propertyType);
+			// create dialog
+			selectionDialog =
+					new ElementTreeSelectionDialog(DesignerPlugin.getShell(), ObjectsLabelProvider.INSTANCE,
+							contentProvider) {
+				@Override
+				public void create() {
+					super.create();
+					getTreeViewer().expandAll();
+				}
+			};
+			selectionDialog.setAllowMultiple(false);
+			selectionDialog.setTitle(property_.getTitle());
+			selectionDialog.setMessage(ModelMessages.ObjectPropertyEditor_chooseMessage);
+			selectionDialog.setValidator(validator);
+			// set input
+			selectionDialog.setInput(new Object[]{thisComponent.getRoot()});
+			// set initial selection
+			{
+				JavaInfo component = getValueComponent(property);
+				selectionDialog.setInitialSelection(component);
+			}
+		}
+		// open dialog
+		if (selectionDialog.open() == Window.OK) {
+			JavaInfo component = (JavaInfo) selectionDialog.getFirstResult();
+			setComponent(property, component);
+		}
+	}
+
+	private ITreeContentProvider createContentProvider(final Class<?> propertyType) {
+		final ITreeContentProvider[] contentProvider = new ITreeContentProvider[1];
+		contentProvider[0] = new ObjectsTreeContentProvider(new Predicate<ObjectInfo>() {
+			@Override
+			public boolean apply(ObjectInfo t) {
+				return isValidComponent(propertyType, t) || hasValidComponents(t);
+			}
+
+			private boolean hasValidComponents(ObjectInfo t) {
+				return contentProvider[0].getChildren(t).length != 0;
+			}
+		});
+		return contentProvider[0];
+	}
+
+	private boolean isValidComponent(Class<?> propertyType, Object element) {
+		if (element instanceof JavaInfo) {
+			JavaInfo component = (JavaInfo) element;
+			Class<?> componentClass = component.getDescription().getComponentClass();
+			return componentClass != null && propertyType.isAssignableFrom(componentClass);
+		}
+		return false;
+	}
+
+	/**
+	 * Sets new {@link JavaInfo} value.
+	 *
+	 * @param component
+	 *          new {@link JavaInfo}, or <code>null</code>, if property should be removed.
+	 */
+	public void setComponent(final GenericProperty property, final JavaInfo component)
+			throws Exception {
+		ExecutionUtils.run(property.getJavaInfo(), new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				setComponent0(property, component);
+			}
+		});
+	}
+
+	/**
+	 * Implementation for {@link #setComponent(GenericProperty, JavaInfo)}.
+	 */
+	private void setComponent0(GenericProperty property, JavaInfo component) throws Exception {
+		JavaInfo thisComponent = property.getJavaInfo();
+		// remove existing invocation
+		property.setValue(Property.UNKNOWN_VALUE);
+		// set, if not null
+		if (component != null) {
+			Method setter = getSetter(property);
+			// may be setter
+			if (setter != null) {
+				StatementTarget target = null;
+				// try get special target
+				if (thisComponent instanceof IObjectPropertyProcessor) {
+					IObjectPropertyProcessor objectPropertyProcessor =
+							(IObjectPropertyProcessor) thisComponent;
+					target = objectPropertyProcessor.getObjectPropertyStatementTarget(property, component);
+				}
+				// if no special, use default
+				if (target == null) {
+					if (component.getVariableSupport() instanceof LazyVariableSupport) {
+						// "lazy" component is always accessible
+						property.setExpression(TemplateUtils.getExpression(component), component);
+						return;
+					}
+					List<JavaInfo> allComponents = ImmutableList.of(thisComponent, component);
+					target = JavaInfoUtils.getStatementTarget_whenAllCreated(allComponents);
+				}
+				String source =
+						TemplateUtils.format("{0}.{1}({2})", thisComponent, setter.getName(), component);
+				Expression expression = thisComponent.addExpressionStatement(target, source);
+				component.addRelatedNodes(expression);
+				return;
+			}
+			// should be creation
+			property.setExpression(TemplateUtils.getExpression(component), component);
+		}
+	}
+
+	/**
+	 * @return the setter {@link Method}, or <code>null</code> if given {@link Property} is not based
+	 *         on known setter.
+	 */
+	private static Method getSetter(Property property) throws Exception {
+		if (property instanceof GenericPropertyImpl) {
+			GenericPropertyImpl genericProperty = (GenericPropertyImpl) property;
+			List<ExpressionAccessor> accessors = genericProperty.getAccessors();
+			for (ExpressionAccessor accessor : accessors) {
+				if (accessor instanceof SetterAccessor) {
+					return ((SetterAccessor) accessor).getSetter();
+				}
+			}
+		}
+		return null;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Property[] getProperties(Property property) throws Exception {
+		JavaInfo component = getValueComponent(property);
+		if (component != null) {
+			return component.getProperties();
+		}
+		return new Property[0];
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/PropertyDescriptorEditorProvider.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/PropertyDescriptorEditorProvider.java
index c0e55b705..e1a56f2b3 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/PropertyDescriptorEditorProvider.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/PropertyDescriptorEditorProvider.java
@@ -20,54 +20,54 @@
  * @coverage core.model.property.editor
  */
 public final class PropertyDescriptorEditorProvider extends PropertyEditorProvider {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // PropertyEditorProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public PropertyEditor getEditorForPropertyDescriptor(PropertyDescriptor descriptor)
-      throws Exception {
-    {
-      Object attributeValue = descriptor.getValue("enumerationValues");
-      if (isEnumerationProperty(descriptor)) {
-        return new EnumerationValuesPropertyEditor(attributeValue);
-      }
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// PropertyEditorProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public PropertyEditor getEditorForPropertyDescriptor(PropertyDescriptor descriptor)
+			throws Exception {
+		{
+			Object attributeValue = descriptor.getValue("enumerationValues");
+			if (isEnumerationProperty(descriptor)) {
+				return new EnumerationValuesPropertyEditor(attributeValue);
+			}
+		}
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if given {@link PropertyDescriptor} has attribute "enumerationValues"
-   *         with valid value structure.
-   */
-  private static boolean isEnumerationProperty(PropertyDescriptor descriptor) {
-    Object attributeValue = descriptor.getValue("enumerationValues");
-    // should be Object[]
-    if (!(attributeValue instanceof Object[])) {
-      return false;
-    }
-    Object[] enumElements = (Object[]) attributeValue;
-    // should be multiple 3
-    if (enumElements.length == 0 || enumElements.length % 3 != 0) {
-      return false;
-    }
-    // elements should be sequence of [String,Object,String]
-    for (int i = 0; i < enumElements.length; i++) {
-      Object element = enumElements[i];
-      if (i % 3 == 0 && !(element instanceof String)) {
-        return false;
-      }
-      if (i % 3 == 2 && !(element instanceof String)) {
-        return false;
-      }
-    }
-    // OK
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if given {@link PropertyDescriptor} has attribute "enumerationValues"
+	 *         with valid value structure.
+	 */
+	private static boolean isEnumerationProperty(PropertyDescriptor descriptor) {
+		Object attributeValue = descriptor.getValue("enumerationValues");
+		// should be Object[]
+		if (!(attributeValue instanceof Object[])) {
+			return false;
+		}
+		Object[] enumElements = (Object[]) attributeValue;
+		// should be multiple 3
+		if (enumElements.length == 0 || enumElements.length % 3 != 0) {
+			return false;
+		}
+		// elements should be sequence of [String,Object,String]
+		for (int i = 0; i < enumElements.length; i++) {
+			Object element = enumElements[i];
+			if (i % 3 == 0 && !(element instanceof String)) {
+				return false;
+			}
+			if (i % 3 == 2 && !(element instanceof String)) {
+				return false;
+			}
+		}
+		// OK
+		return true;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/StaticFieldPropertyEditor.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/StaticFieldPropertyEditor.java
index 30ca8c56d..52cb4b0bd 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/StaticFieldPropertyEditor.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/StaticFieldPropertyEditor.java
@@ -39,283 +39,283 @@
  * @coverage core.model.property.editor
  */
 public class StaticFieldPropertyEditor extends AbstractComboPropertyEditor
-    implements
-      IConfigurablePropertyObject,
-      IValueSourcePropertyEditor,
-      IClipboardSourceProvider {
-  private Class<?> m_class;
-  private String m_classSourceName;
-  private String[] m_names;
-  private String[] m_titles;
-  private Object[] m_values;
+implements
+IConfigurablePropertyObject,
+IValueSourcePropertyEditor,
+IClipboardSourceProvider {
+	private Class<?> m_class;
+	private String m_classSourceName;
+	private String[] m_names;
+	private String[] m_titles;
+	private Object[] m_values;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Accepts value as {@link Object} and sets corresponding value as static field.
-   */
-  public void setValue(Property property, Object value) throws Exception {
-    if (property instanceof GenericProperty) {
-      GenericProperty genericProperty = (GenericProperty) property;
-      String source = getValueSource(value);
-      genericProperty.setExpression(source, value);
-    } else {
-      property.setValue(value);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Accepts value as {@link Object} and sets corresponding value as static field.
+	 */
+	public void setValue(Property property, Object value) throws Exception {
+		if (property instanceof GenericProperty) {
+			GenericProperty genericProperty = (GenericProperty) property;
+			String source = getValueSource(value);
+			genericProperty.setExpression(source, value);
+		} else {
+			property.setValue(value);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // TextDisplayPropertyEditor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getText(Property property) throws Exception {
-    Object value = property.getValue();
-    // return title for value
-    if (value != Property.UNKNOWN_VALUE) {
-      for (int i = 0; i < m_values.length; i++) {
-        Object fieldValue = m_values[i];
-        if (ObjectUtils.equals(fieldValue, value)) {
-          return m_titles[i];
-        }
-      }
-    }
-    // unknown value
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// TextDisplayPropertyEditor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getText(Property property) throws Exception {
+		Object value = property.getValue();
+		// return title for value
+		if (value != Property.UNKNOWN_VALUE) {
+			for (int i = 0; i < m_values.length; i++) {
+				Object fieldValue = m_values[i];
+				if (ObjectUtils.equals(fieldValue, value)) {
+					return m_titles[i];
+				}
+			}
+		}
+		// unknown value
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IValueSourcePropertyEditor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getValueSource(Object value) throws Exception {
-    if (value != Property.UNKNOWN_VALUE) {
-      for (int i = 0; i < m_values.length; i++) {
-        Object fieldValue = m_values[i];
-        if (ObjectUtils.equals(fieldValue, value)) {
-          String fieldName = m_names[i];
-          if (fieldName == null) {
-            return null;
-          } else {
-            return m_classSourceName + "." + fieldName;
-          }
-        }
-      }
-    }
-    // unknown value
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IValueSourcePropertyEditor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getValueSource(Object value) throws Exception {
+		if (value != Property.UNKNOWN_VALUE) {
+			for (int i = 0; i < m_values.length; i++) {
+				Object fieldValue = m_values[i];
+				if (ObjectUtils.equals(fieldValue, value)) {
+					String fieldName = m_names[i];
+					if (fieldName == null) {
+						return null;
+					} else {
+						return m_classSourceName + "." + fieldName;
+					}
+				}
+			}
+		}
+		// unknown value
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IClipboardSourceProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getClipboardSource(GenericProperty property) throws Exception {
-    Object value = property.getValue();
-    return getValueSource(value);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IClipboardSourceProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getClipboardSource(GenericProperty property) throws Exception {
+		Object value = property.getValue();
+		return getValueSource(value);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Combo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void addItems(Property property, CCombo3 combo) throws Exception {
-    for (String title : m_titles) {
-      combo.add(title);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Combo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void addItems(Property property, CCombo3 combo) throws Exception {
+		for (String title : m_titles) {
+			combo.add(title);
+		}
+	}
 
-  @Override
-  protected void selectItem(Property property, CCombo3 combo) throws Exception {
-    combo.setText(getText(property));
-  }
+	@Override
+	protected void selectItem(Property property, CCombo3 combo) throws Exception {
+		combo.setText(getText(property));
+	}
 
-  @Override
-  protected void toPropertyEx(Property property, CCombo3 combo, int index) throws Exception {
-    Object value = m_values[index];
-    if (property instanceof GenericProperty) {
-      GenericProperty genericProperty = (GenericProperty) property;
-      String source = getValueSource(value);
-      genericProperty.setExpression(source, value);
-    } else {
-      property.setValue(value);
-    }
-  }
+	@Override
+	protected void toPropertyEx(Property property, CCombo3 combo, int index) throws Exception {
+		Object value = m_values[index];
+		if (property instanceof GenericProperty) {
+			GenericProperty genericProperty = (GenericProperty) property;
+			String source = getValueSource(value);
+			genericProperty.setExpression(source, value);
+		} else {
+			property.setValue(value);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IConfigurablePropertyObject
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Configures this {@link StaticFieldPropertyEditor} with class and fields. This is same as
-   * {@link #configure(EditorState, Map)}, but for access from code, not from component description.
-   */
-  public void configure(Class<?> clazz, String[] fieldDescriptions) throws Exception {
-    // prepare class
-    m_class = clazz;
-    m_classSourceName = m_class.getName().replace('$', '.');
-    // prepare fields
-    initialize(new Empty_WarningConsumer(), fieldDescriptions);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IConfigurablePropertyObject
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Configures this {@link StaticFieldPropertyEditor} with class and fields. This is same as
+	 * {@link #configure(EditorState, Map)}, but for access from code, not from component description.
+	 */
+	public void configure(Class<?> clazz, String[] fieldDescriptions) throws Exception {
+		// prepare class
+		m_class = clazz;
+		m_classSourceName = m_class.getName().replace('$', '.');
+		// prepare fields
+		initialize(new Empty_WarningConsumer(), fieldDescriptions);
+	}
 
-  @Override
-  public void configure(EditorState state, Map<String, Object> parameters) throws Exception {
-    // prepare class
-    {
-      String classBinaryName = (String) parameters.get("class");
-      m_class = state.getEditorLoader().loadClass(classBinaryName);
-      m_classSourceName = classBinaryName.replace('$', '.');
-    }
-    // prepare fields
-    String[] fieldDescriptions;
-    if (parameters.containsKey("field")) {
-      @SuppressWarnings("unchecked")
-      List<String> fieldDescriptionList = (List<String>) parameters.get("field");
-      fieldDescriptions = fieldDescriptionList.toArray(new String[fieldDescriptionList.size()]);
-    } else if (parameters.containsKey("fields")) {
-      fieldDescriptions = StringUtils.split((String) parameters.get("fields"));
-    } else {
-      throw new DesignerException(ICoreExceptionConstants.DESCRIPTION_EDITOR_STATIC_FIELD,
-          "No fields: " + m_classSourceName);
-    }
-    // set fields
-    initialize(new EditorState_WarningConsumer(state), fieldDescriptions);
-  }
+	@Override
+	public void configure(EditorState state, Map<String, Object> parameters) throws Exception {
+		// prepare class
+		{
+			String classBinaryName = (String) parameters.get("class");
+			m_class = state.getEditorLoader().loadClass(classBinaryName);
+			m_classSourceName = classBinaryName.replace('$', '.');
+		}
+		// prepare fields
+		String[] fieldDescriptions;
+		if (parameters.containsKey("field")) {
+			@SuppressWarnings("unchecked")
+			List<String> fieldDescriptionList = (List<String>) parameters.get("field");
+			fieldDescriptions = fieldDescriptionList.toArray(new String[fieldDescriptionList.size()]);
+		} else if (parameters.containsKey("fields")) {
+			fieldDescriptions = StringUtils.split((String) parameters.get("fields"));
+		} else {
+			throw new DesignerException(ICoreExceptionConstants.DESCRIPTION_EDITOR_STATIC_FIELD,
+					"No fields: " + m_classSourceName);
+		}
+		// set fields
+		initialize(new EditorState_WarningConsumer(state), fieldDescriptions);
+	}
 
-  /**
-   * Initializes {@link StaticFieldPropertyEditor} using given array of fields.
-   */
-  private void initialize(IWarningConsumer logger, String[] fieldDescriptions) throws Exception {
-    fieldDescriptions = cleanUpFieldDescriptions(logger, m_class, fieldDescriptions);
-    int count = fieldDescriptions.length;
-    // prepare names/titles/values
-    m_names = new String[count];
-    m_titles = new String[count];
-    m_values = new Object[count];
-    // fill names/titles/values
-    for (int i = 0; i < count; i++) {
-      String fieldDescription = fieldDescriptions[i];
-      // special cases
-      if ("*remove".equals(fieldDescription)) {
-        m_titles[i] = "";
-        continue;
-      }
-      // fill name/title
-      m_names[i] = getFieldName(fieldDescription);
-      m_titles[i] = getFieldTitle(fieldDescription);
-      // fill value
-      {
-        Field field = m_class.getField(m_names[i]);
-        Assert.isTrue(Modifier.isStatic(field.getModifiers()), "Field %s is not static.", field);
-        m_values[i] = field.get(null);
-      }
-    }
-  }
+	/**
+	 * Initializes {@link StaticFieldPropertyEditor} using given array of fields.
+	 */
+	private void initialize(IWarningConsumer logger, String[] fieldDescriptions) throws Exception {
+		fieldDescriptions = cleanUpFieldDescriptions(logger, m_class, fieldDescriptions);
+		int count = fieldDescriptions.length;
+		// prepare names/titles/values
+		m_names = new String[count];
+		m_titles = new String[count];
+		m_values = new Object[count];
+		// fill names/titles/values
+		for (int i = 0; i < count; i++) {
+			String fieldDescription = fieldDescriptions[i];
+			// special cases
+			if ("*remove".equals(fieldDescription)) {
+				m_titles[i] = "";
+				continue;
+			}
+			// fill name/title
+			m_names[i] = getFieldName(fieldDescription);
+			m_titles[i] = getFieldTitle(fieldDescription);
+			// fill value
+			{
+				Field field = m_class.getField(m_names[i]);
+				Assert.isTrue(Modifier.isStatic(field.getModifiers()), "Field %s is not static.", field);
+				m_values[i] = field.get(null);
+			}
+		}
+	}
 
-  /**
-   * Check field's, if field does not exist, then remove it from array.
-   */
-  private static String[] cleanUpFieldDescriptions(IWarningConsumer logger,
-      Class<?> m_class,
-      String[] fieldDescriptions) throws Exception {
-    List<String> newFieldDescriptions = Lists.newArrayList();
-    // check all fields
-    for (String fieldDescription : fieldDescriptions) {
-      // skip special cases
-      if ("*remove".equals(fieldDescription)) {
-        newFieldDescriptions.add(fieldDescription);
-        continue;
-      }
-      // prepare field name
-      String name = getFieldName(fieldDescription);
-      // check exist field
-      try {
-        m_class.getField(name);
-      } catch (NoSuchFieldException e) {
-        String message =
-            MessageFormat.format("Can not find field {0}.{1}.", m_class.getName(), name);
-        logger.addWarning(message, e);
-        continue;
-      }
-      // OK, valid field
-      newFieldDescriptions.add(fieldDescription);
-    }
-    // return as array
-    return newFieldDescriptions.toArray(new String[newFieldDescriptions.size()]);
-  }
+	/**
+	 * Check field's, if field does not exist, then remove it from array.
+	 */
+	private static String[] cleanUpFieldDescriptions(IWarningConsumer logger,
+			Class<?> m_class,
+			String[] fieldDescriptions) throws Exception {
+		List<String> newFieldDescriptions = Lists.newArrayList();
+		// check all fields
+		for (String fieldDescription : fieldDescriptions) {
+			// skip special cases
+			if ("*remove".equals(fieldDescription)) {
+				newFieldDescriptions.add(fieldDescription);
+				continue;
+			}
+			// prepare field name
+			String name = getFieldName(fieldDescription);
+			// check exist field
+			try {
+				m_class.getField(name);
+			} catch (NoSuchFieldException e) {
+				String message =
+						MessageFormat.format("Can not find field {0}.{1}.", m_class.getName(), name);
+				logger.addWarning(message, e);
+				continue;
+			}
+			// OK, valid field
+			newFieldDescriptions.add(fieldDescription);
+		}
+		// return as array
+		return newFieldDescriptions.toArray(new String[newFieldDescriptions.size()]);
+	}
 
-  /**
-   * @return the name of field from given field description.
-   */
-  private static String getFieldName(String fieldDescription) {
-    // simple case - just name of field
-    if (!fieldDescription.contains(":")) {
-      return fieldDescription;
-    }
-    // name:title
-    String[] parts = StringUtils.split(fieldDescription, ":");
-    String message =
-        "Exactly one ':' expected in description name:title, but found " + fieldDescription;
-    Assert.equals(2, parts.length, message);
-    return parts[0];
-  }
+	/**
+	 * @return the name of field from given field description.
+	 */
+	private static String getFieldName(String fieldDescription) {
+		// simple case - just name of field
+		if (!fieldDescription.contains(":")) {
+			return fieldDescription;
+		}
+		// name:title
+		String[] parts = StringUtils.split(fieldDescription, ":");
+		String message =
+				"Exactly one ':' expected in description name:title, but found " + fieldDescription;
+		Assert.equals(2, parts.length, message);
+		return parts[0];
+	}
 
-  /**
-   * @return the title of field from given field description.
-   */
-  private static String getFieldTitle(String fieldDescription) {
-    // simple case - use name of field
-    if (!fieldDescription.contains(":")) {
-      return fieldDescription;
-    }
-    // name:title
-    String[] parts = StringUtils.split(fieldDescription, ":");
-    String message =
-        "Exactly one ':' expected in description name:title, but found " + fieldDescription;
-    Assert.equals(2, parts.length, message);
-    return parts[1];
-  }
+	/**
+	 * @return the title of field from given field description.
+	 */
+	private static String getFieldTitle(String fieldDescription) {
+		// simple case - use name of field
+		if (!fieldDescription.contains(":")) {
+			return fieldDescription;
+		}
+		// name:title
+		String[] parts = StringUtils.split(fieldDescription, ":");
+		String message =
+				"Exactly one ':' expected in description name:title, but found " + fieldDescription;
+		Assert.equals(2, parts.length, message);
+		return parts[1];
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Warnings
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private interface IWarningConsumer {
-    void addWarning(String message, Throwable e);
-  }
-  /**
-   * Implementation of {@link IWarningConsumer} that ignores warnings.
-   */
-  private static final class Empty_WarningConsumer implements IWarningConsumer {
-    @Override
-    public void addWarning(String message, Throwable e) {
-    }
-  }
-  /**
-   * Implementation of {@link IWarningConsumer} to log warnings into {@link EditorState}.
-   */
-  private static final class EditorState_WarningConsumer implements IWarningConsumer {
-    private final EditorState m_state;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Warnings
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private interface IWarningConsumer {
+		void addWarning(String message, Throwable e);
+	}
+	/**
+	 * Implementation of {@link IWarningConsumer} that ignores warnings.
+	 */
+	private static final class Empty_WarningConsumer implements IWarningConsumer {
+		@Override
+		public void addWarning(String message, Throwable e) {
+		}
+	}
+	/**
+	 * Implementation of {@link IWarningConsumer} to log warnings into {@link EditorState}.
+	 */
+	private static final class EditorState_WarningConsumer implements IWarningConsumer {
+		private final EditorState m_state;
 
-    private EditorState_WarningConsumer(EditorState state) {
-      m_state = state;
-    }
+		private EditorState_WarningConsumer(EditorState state) {
+			m_state = state;
+		}
 
-    @Override
-    public void addWarning(String message, Throwable e) {
-      m_state.addWarning(new EditorWarning(message, e));
-    }
-  }
+		@Override
+		public void addWarning(String message, Throwable e) {
+			m_state.addWarning(new EditorWarning(message, e));
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/StringListPropertyEditor.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/StringListPropertyEditor.java
index 89b87aaed..d696bfc20 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/StringListPropertyEditor.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/StringListPropertyEditor.java
@@ -24,74 +24,74 @@
  * @coverage core.model.property.editor
  */
 public final class StringListPropertyEditor extends AbstractListPropertyEditor {
-  private boolean m_ignoreCase;
-  private String[] m_strings;
+	private boolean m_ignoreCase;
+	private String[] m_strings;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Combo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void toPropertyEx_simpleProperty(Property property, CCombo3 combo, int index)
-      throws Exception {
-    property.setValue(m_strings[index]);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Combo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void toPropertyEx_simpleProperty(Property property, CCombo3 combo, int index)
+			throws Exception {
+		property.setValue(m_strings[index]);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access to list items
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected int getCount() {
-    return m_strings.length;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access to list items
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected int getCount() {
+		return m_strings.length;
+	}
 
-  @Override
-  protected int getValueIndex(Object value) {
-    if (value instanceof String) {
-      String string = (String) value;
-      for (int i = 0; i < getCount(); i++) {
-        if (m_ignoreCase) {
-          if (string.equalsIgnoreCase(m_strings[i])) {
-            return i;
-          }
-        } else {
-          if (string.equals(m_strings[i])) {
-            return i;
-          }
-        }
-      }
-    }
-    return -1;
-  }
+	@Override
+	protected int getValueIndex(Object value) {
+		if (value instanceof String) {
+			String string = (String) value;
+			for (int i = 0; i < getCount(); i++) {
+				if (m_ignoreCase) {
+					if (string.equalsIgnoreCase(m_strings[i])) {
+						return i;
+					}
+				} else {
+					if (string.equals(m_strings[i])) {
+						return i;
+					}
+				}
+			}
+		}
+		return -1;
+	}
 
-  @Override
-  protected String getTitle(int index) {
-    return m_strings[index];
-  }
+	@Override
+	protected String getTitle(int index) {
+		return m_strings[index];
+	}
 
-  @Override
-  protected String getExpression(int index) throws Exception {
-    return StringConverter.INSTANCE.toJavaSource(null, m_strings[index]);
-  }
+	@Override
+	protected String getExpression(int index) throws Exception {
+		return StringConverter.INSTANCE.toJavaSource(null, m_strings[index]);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IConfigurablePropertyObject
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void configure(EditorState state, Map<String, Object> parameters) throws Exception {
-    m_strings = getParameterAsArray(parameters, "strings");
-    m_ignoreCase = "true".equals(parameters.get("ignoreCase"));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IConfigurablePropertyObject
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void configure(EditorState state, Map<String, Object> parameters) throws Exception {
+		m_strings = getParameterAsArray(parameters, "strings");
+		m_ignoreCase = "true".equals(parameters.get("ignoreCase"));
+	}
 
-  /**
-   * Configures this editor externally.
-   */
-  public void configure(String[] strings) {
-    m_strings = strings;
-  }
+	/**
+	 * Configures this editor externally.
+	 */
+	public void configure(String[] strings) {
+		m_strings = strings;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/complex/InstanceObjectPropertyEditor.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/complex/InstanceObjectPropertyEditor.java
index f9b67c392..983aa6e18 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/complex/InstanceObjectPropertyEditor.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/complex/InstanceObjectPropertyEditor.java
@@ -66,260 +66,260 @@
  * @coverage core.model.property.editor
  */
 public final class InstanceObjectPropertyEditor extends TextDialogPropertyEditor
-    implements
-      IComplexPropertyEditor,
-      IConfigurablePropertyObject {
-  private static final String INSTANCE_JAVA_INFO_KEY = "Instance JavaInfo";
-  private String m_className;
-  private String m_sourceNewClass;
+implements
+IComplexPropertyEditor,
+IConfigurablePropertyObject {
+	private static final String INSTANCE_JAVA_INFO_KEY = "Instance JavaInfo";
+	private String m_className;
+	private String m_sourceNewClass;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getText(Property property) throws Exception {
-    // by Instance
-    JavaInfo instanceInfo = getInstanceInfo(property);
-    if (instanceInfo != null) {
-      return instanceInfo.getDescription().getComponentClass().getName();
-    }
-    // by Expression
-    Expression expression = getInstanceExpression(property);
-    if (expression != null) {
-      if (expression instanceof ClassInstanceCreation) {
-        ClassInstanceCreation creation = (ClassInstanceCreation) expression;
-        if (creation.getAnonymousClassDeclaration() != null) {
-          return "<anonymous>";
-        }
-        return AstNodeUtils.getFullyQualifiedName(expression, false);
-      }
-      return "<unknown>";
-    }
-    // by Value
-    Object value = property.getValue();
-    if (value != null && value != Property.UNKNOWN_VALUE) {
-      return value.getClass().getName();
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getText(Property property) throws Exception {
+		// by Instance
+		JavaInfo instanceInfo = getInstanceInfo(property);
+		if (instanceInfo != null) {
+			return instanceInfo.getDescription().getComponentClass().getName();
+		}
+		// by Expression
+		Expression expression = getInstanceExpression(property);
+		if (expression != null) {
+			if (expression instanceof ClassInstanceCreation) {
+				ClassInstanceCreation creation = (ClassInstanceCreation) expression;
+				if (creation.getAnonymousClassDeclaration() != null) {
+					return "<anonymous>";
+				}
+				return AstNodeUtils.getFullyQualifiedName(expression, false);
+			}
+			return "<unknown>";
+		}
+		// by Value
+		Object value = property.getValue();
+		if (value != null && value != Property.UNKNOWN_VALUE) {
+			return value.getClass().getName();
+		}
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean activate(PropertyTable propertyTable, Property property, Point location)
-      throws Exception {
-    // activate using keyboard
-    if (location == null) {
-      openClass(property);
-    }
-    // don't activate
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean activate(PropertyTable propertyTable, Property property, Point location)
+			throws Exception {
+		// activate using keyboard
+		if (location == null) {
+			openClass(property);
+		}
+		// don't activate
+		return false;
+	}
 
-  @Override
-  public void deactivate(PropertyTable propertyTable, Property property, boolean save) {
-    super.deactivate(propertyTable, property, save);
-  }
+	@Override
+	public void deactivate(PropertyTable propertyTable, Property property, boolean save) {
+		super.deactivate(propertyTable, property, save);
+	}
 
-  @Override
-  public void doubleClick(Property property, Point location) throws Exception {
-    if (!StringUtils.isEmpty(m_sourceNewClass)) {
-      openClass(property);
-    }
-  }
+	@Override
+	public void doubleClick(Property property, Point location) throws Exception {
+		if (!StringUtils.isEmpty(m_sourceNewClass)) {
+			openClass(property);
+		}
+	}
 
-  @Override
-  protected void openDialog(Property property) throws Exception {
-    GenericProperty genericProperty = (GenericProperty) property;
-    // prepare scope
-    IJavaSearchScope scope;
-    {
-      IJavaProject project = genericProperty.getJavaInfo().getEditor().getJavaProject();
-      IType classType = project.findType(m_className);
-      scope = SearchEngine.createHierarchyScope(classType);
-    }
-    // prepare dialog
-    SelectionDialog dialog;
-    {
-      Shell shell = DesignerPlugin.getShell();
-      ProgressMonitorDialog context = new ProgressMonitorDialog(shell);
-      dialog =
-          JavaUI.createTypeDialog(
-              shell,
-              context,
-              scope,
-              IJavaElementSearchConstants.CONSIDER_CLASSES,
-              false);
-      dialog.setTitle(ModelMessages.InstanceObjectPropertyEditor_chooseTitle);
-      dialog.setMessage(ModelMessages.InstanceObjectPropertyEditor_chooseMessage);
-    }
-    // open dialog
-    if (dialog.open() == Window.OK) {
-      IType instanceType = (IType) dialog.getResult()[0];
-      String instanceTypeName = instanceType.getFullyQualifiedName();//.replace('$', '.');
-      ComponentDescription instanceComponentDescription =
-          ComponentDescriptionHelper.getDescription(
-              genericProperty.getJavaInfo().getEditor(),
-              instanceTypeName);
-      CreationDescription creation = instanceComponentDescription.getCreation(null);
-      setValueSource(genericProperty, creation.getSource().replace('$', '.'));
-    }
-  }
+	@Override
+	protected void openDialog(Property property) throws Exception {
+		GenericProperty genericProperty = (GenericProperty) property;
+		// prepare scope
+		IJavaSearchScope scope;
+		{
+			IJavaProject project = genericProperty.getJavaInfo().getEditor().getJavaProject();
+			IType classType = project.findType(m_className);
+			scope = SearchEngine.createHierarchyScope(classType);
+		}
+		// prepare dialog
+		SelectionDialog dialog;
+		{
+			Shell shell = DesignerPlugin.getShell();
+			ProgressMonitorDialog context = new ProgressMonitorDialog(shell);
+			dialog =
+					JavaUI.createTypeDialog(
+							shell,
+							context,
+							scope,
+							IJavaElementSearchConstants.CONSIDER_CLASSES,
+							false);
+			dialog.setTitle(ModelMessages.InstanceObjectPropertyEditor_chooseTitle);
+			dialog.setMessage(ModelMessages.InstanceObjectPropertyEditor_chooseMessage);
+		}
+		// open dialog
+		if (dialog.open() == Window.OK) {
+			IType instanceType = (IType) dialog.getResult()[0];
+			String instanceTypeName = instanceType.getFullyQualifiedName();//.replace('$', '.');
+			ComponentDescription instanceComponentDescription =
+					ComponentDescriptionHelper.getDescription(
+							genericProperty.getJavaInfo().getEditor(),
+							instanceTypeName);
+			CreationDescription creation = instanceComponentDescription.getCreation(null);
+			setValueSource(genericProperty, creation.getSource().replace('$', '.'));
+		}
+	}
 
-  /**
-   * If there is class, open it, else create new anonymous class and open.
-   */
-  private void openClass(Property property) throws Exception {
-    GenericProperty genericProperty = (GenericProperty) property;
-    Expression expression = genericProperty.getExpression();
-    if (expression != null) {
-      IDesignPageSite site = IDesignPageSite.Helper.getSite(genericProperty.getJavaInfo());
-      if (site != null) {
-        site.openSourcePosition(expression.getStartPosition());
-      }
-    } else {
-      // generate new class
-      generateNewClass(genericProperty);
-      openClass(property);
-    }
-  }
+	/**
+	 * If there is class, open it, else create new anonymous class and open.
+	 */
+	private void openClass(Property property) throws Exception {
+		GenericProperty genericProperty = (GenericProperty) property;
+		Expression expression = genericProperty.getExpression();
+		if (expression != null) {
+			IDesignPageSite site = IDesignPageSite.Helper.getSite(genericProperty.getJavaInfo());
+			if (site != null) {
+				site.openSourcePosition(expression.getStartPosition());
+			}
+		} else {
+			// generate new class
+			generateNewClass(genericProperty);
+			openClass(property);
+		}
+	}
 
-  /**
-   * Uses anonymous class as {@link GenericProperty} expression.
-   */
-  private void generateNewClass(GenericProperty property) throws Exception {
-    setValueSource(property, m_sourceNewClass);
-  }
+	/**
+	 * Uses anonymous class as {@link GenericProperty} expression.
+	 */
+	private void generateNewClass(GenericProperty property) throws Exception {
+		setValueSource(property, m_sourceNewClass);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IComplexPropertyEditor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Property[] getProperties(Property property) throws Exception {
-    JavaInfo instanceInfo = getInstanceInfo(property);
-    if (instanceInfo != null) {
-      List<Property> propertyList =
-          PropertyUtils.getProperties_excludeByParameter(
-              instanceInfo,
-              "instanceProperty.exclude-properties");
-      Property[] properties = propertyList.toArray(new Property[propertyList.size()]);
-      return properties;
-    }
-    return new Property[0];
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IComplexPropertyEditor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Property[] getProperties(Property property) throws Exception {
+		JavaInfo instanceInfo = getInstanceInfo(property);
+		if (instanceInfo != null) {
+			List<Property> propertyList =
+					PropertyUtils.getProperties_excludeByParameter(
+							instanceInfo,
+							"instanceProperty.exclude-properties");
+			Property[] properties = propertyList.toArray(new Property[propertyList.size()]);
+			return properties;
+		}
+		return new Property[0];
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IConfigurablePropertyObject
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void configure(EditorState state, Map<String, Object> parameters) throws Exception {
-    // class
-    {
-      m_className = (String) parameters.get("class");
-      Assert.isNotNull(m_className, "'class' attribute required.");
-    }
-    // source
-    {
-      m_sourceNewClass = (String) parameters.get("source");
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IConfigurablePropertyObject
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void configure(EditorState state, Map<String, Object> parameters) throws Exception {
+		// class
+		{
+			m_className = (String) parameters.get("class");
+			Assert.isNotNull(m_className, "'class' attribute required.");
+		}
+		// source
+		{
+			m_sourceNewClass = (String) parameters.get("source");
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public Expression getInstanceExpression(Property property) throws Exception {
-    GenericProperty genericProperty = (GenericProperty) property;
-    return genericProperty.getExpression();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public Expression getInstanceExpression(Property property) throws Exception {
+		GenericProperty genericProperty = (GenericProperty) property;
+		return genericProperty.getExpression();
+	}
 
-  public JavaInfo getInstanceInfo(Property property) throws Exception {
-    GenericProperty genericProperty = (GenericProperty) property;
-    Expression expression = genericProperty.getExpression();
-    if (expression != null) {
-      JavaInfo instanceInfo = genericProperty.getJavaInfo().getChildRepresentedBy(expression);
-      property.putArbitraryValue(INSTANCE_JAVA_INFO_KEY, instanceInfo);
-      return instanceInfo;
-    }
-    return null;
-  }
+	public JavaInfo getInstanceInfo(Property property) throws Exception {
+		GenericProperty genericProperty = (GenericProperty) property;
+		Expression expression = genericProperty.getExpression();
+		if (expression != null) {
+			JavaInfo instanceInfo = genericProperty.getJavaInfo().getChildRepresentedBy(expression);
+			property.putArbitraryValue(INSTANCE_JAVA_INFO_KEY, instanceInfo);
+			return instanceInfo;
+		}
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Processing set new source for {@link GenericProperty} expression.
-   */
-  private void setValueSource(final GenericProperty property, final String source) throws Exception {
-    final JavaInfo javaInfo = property.getJavaInfo();
-    ExecutionUtils.run(javaInfo, new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        // remove old instance info
-        {
-          JavaInfo oldInstanceInfo = getInstanceInfo(property);
-          if (oldInstanceInfo != null) {
-            oldInstanceInfo.delete();
-            property.removeArbitraryValue(INSTANCE_JAVA_INFO_KEY);
-          }
-        }
-        // evaluate new expression
-        String evaluateSource =
-            TemplateUtils.evaluate(source, javaInfo, ImmutableMap.<String, String>of());
-        property.setExpression(evaluateSource, Property.UNKNOWN_VALUE);
-        // create new instance info
-        {
-          Expression expression = getInstanceExpression(property);
-          Assert.isNotNull(expression, "setting expression failed.");
-          if (expression instanceof ClassInstanceCreation) {
-            ClassInstanceCreation creation = (ClassInstanceCreation) expression;
-            if (creation.getAnonymousClassDeclaration() == null) {
-              JavaInfo newInstanceInfo =
-                  JavaInfoUtils.createJavaInfo(
-                      javaInfo.getEditor(),
-                      AstNodeUtils.getFullyQualifiedName(expression, true),
-                      new ConstructorCreationSupport(creation));
-              newInstanceInfo.bindToExpression(expression);
-              newInstanceInfo.setVariableSupport(new EmptyVariableSupport(newInstanceInfo, creation));
-              newInstanceInfo.setAssociation(new InvocationChildAssociation((MethodInvocation) creation.getParent()));
-              javaInfo.addChild(newInstanceInfo);
-            }
-          }
-        }
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Processing set new source for {@link GenericProperty} expression.
+	 */
+	private void setValueSource(final GenericProperty property, final String source) throws Exception {
+		final JavaInfo javaInfo = property.getJavaInfo();
+		ExecutionUtils.run(javaInfo, new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				// remove old instance info
+				{
+					JavaInfo oldInstanceInfo = getInstanceInfo(property);
+					if (oldInstanceInfo != null) {
+						oldInstanceInfo.delete();
+						property.removeArbitraryValue(INSTANCE_JAVA_INFO_KEY);
+					}
+				}
+				// evaluate new expression
+				String evaluateSource =
+						TemplateUtils.evaluate(source, javaInfo, ImmutableMap.<String, String>of());
+				property.setExpression(evaluateSource, Property.UNKNOWN_VALUE);
+				// create new instance info
+				{
+					Expression expression = getInstanceExpression(property);
+					Assert.isNotNull(expression, "setting expression failed.");
+					if (expression instanceof ClassInstanceCreation) {
+						ClassInstanceCreation creation = (ClassInstanceCreation) expression;
+						if (creation.getAnonymousClassDeclaration() == null) {
+							JavaInfo newInstanceInfo =
+									JavaInfoUtils.createJavaInfo(
+											javaInfo.getEditor(),
+											AstNodeUtils.getFullyQualifiedName(expression, true),
+											new ConstructorCreationSupport(creation));
+							newInstanceInfo.bindToExpression(expression);
+							newInstanceInfo.setVariableSupport(new EmptyVariableSupport(newInstanceInfo, creation));
+							newInstanceInfo.setAssociation(new InvocationChildAssociation((MethodInvocation) creation.getParent()));
+							javaInfo.addChild(newInstanceInfo);
+						}
+					}
+				}
+			}
+		});
+	}
 
-  /**
-   * Installing listeners for correct processing "Reset to default" action.
-   */
-  public static void installListenerForProperty(final JavaInfo instanceInfo) {
-    instanceInfo.addBroadcastListener(new JavaEventListener() {
-      final JavaInfo m_instanceInfo = instanceInfo;
+	/**
+	 * Installing listeners for correct processing "Reset to default" action.
+	 */
+	public static void installListenerForProperty(final JavaInfo instanceInfo) {
+		instanceInfo.addBroadcastListener(new JavaEventListener() {
+			final JavaInfo m_instanceInfo = instanceInfo;
 
-      @Override
-      public void propertyValueWasSet(GenericPropertyImpl property) throws Exception {
-        if (property.getEditor() instanceof InstanceObjectPropertyEditor
-            && m_instanceInfo == property.getArbitraryValue(INSTANCE_JAVA_INFO_KEY)) {
-          InstanceObjectPropertyEditor editor = (InstanceObjectPropertyEditor) property.getEditor();
-          if (editor.getInstanceInfo(property) != m_instanceInfo) {
-            m_instanceInfo.delete();
-            property.removeArbitraryValue(INSTANCE_JAVA_INFO_KEY);
-          }
-        }
-      }
-    });
-  }
+			@Override
+			public void propertyValueWasSet(GenericPropertyImpl property) throws Exception {
+				if (property.getEditor() instanceof InstanceObjectPropertyEditor
+						&& m_instanceInfo == property.getArbitraryValue(INSTANCE_JAVA_INFO_KEY)) {
+					InstanceObjectPropertyEditor editor = (InstanceObjectPropertyEditor) property.getEditor();
+					if (editor.getInstanceInfo(property) != m_instanceInfo) {
+						m_instanceInfo.delete();
+						property.removeArbitraryValue(INSTANCE_JAVA_INFO_KEY);
+					}
+				}
+			}
+		});
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/string/StringPropertyDialog.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/string/StringPropertyDialog.java
index 7e48b15db..e9854aa73 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/string/StringPropertyDialog.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/string/StringPropertyDialog.java
@@ -50,270 +50,270 @@
  * @coverage core.model.property.editor
  */
 public final class StringPropertyDialog extends ResizableDialog {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Final fields
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final Property m_property;
-  private final JavaInfo m_component;
-  private final GenericProperty m_genericProperty;
-  private final NlsSupport m_support;
-  private final IEditableSupport m_editableSupport;
-  private final LocaleInfo m_locale;
-  private final AbstractSource m_initialSource;
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // State fields
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private IEditableSource m_selectedEditSource;
-  private String m_selectedKey;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Final fields
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final Property m_property;
+	private final JavaInfo m_component;
+	private final GenericProperty m_genericProperty;
+	private final NlsSupport m_support;
+	private final IEditableSupport m_editableSupport;
+	private final LocaleInfo m_locale;
+	private final AbstractSource m_initialSource;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// State fields
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private IEditableSource m_selectedEditSource;
+	private String m_selectedKey;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public StringPropertyDialog(Shell parentShell, Property property) throws Exception {
-    super(parentShell, DesignerPlugin.getDefault());
-    m_property = property;
-    if (m_property instanceof GenericProperty) {
-      m_genericProperty = (GenericProperty) m_property;
-      m_component = m_genericProperty.getJavaInfo();
-      // NLSSupport
-      m_support = NlsSupport.get(m_component);
-      m_editableSupport = m_support.getEditable();
-      m_locale = AbstractSource.getLocaleInfo(m_component);
-      // source
-      {
-        Expression expression = m_genericProperty.getExpression();
-        if (expression != null) {
-          m_initialSource = NlsSupport.getSource(expression);
-          m_selectedEditSource = m_editableSupport.getEditableSource(m_initialSource);
-          // selected source/key
-          if (m_selectedEditSource != null) {
-            m_selectedKey = m_initialSource.getKey(expression);
-          }
-        } else {
-          m_initialSource = null;
-        }
-      }
-    } else {
-      m_genericProperty = null;
-      m_component = null;
-      m_support = null;
-      m_editableSupport = null;
-      m_locale = null;
-      //
-      m_initialSource = null;
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public StringPropertyDialog(Shell parentShell, Property property) throws Exception {
+		super(parentShell, DesignerPlugin.getDefault());
+		m_property = property;
+		if (m_property instanceof GenericProperty) {
+			m_genericProperty = (GenericProperty) m_property;
+			m_component = m_genericProperty.getJavaInfo();
+			// NLSSupport
+			m_support = NlsSupport.get(m_component);
+			m_editableSupport = m_support.getEditable();
+			m_locale = AbstractSource.getLocaleInfo(m_component);
+			// source
+			{
+				Expression expression = m_genericProperty.getExpression();
+				if (expression != null) {
+					m_initialSource = NlsSupport.getSource(expression);
+					m_selectedEditSource = m_editableSupport.getEditableSource(m_initialSource);
+					// selected source/key
+					if (m_selectedEditSource != null) {
+						m_selectedKey = m_initialSource.getKey(expression);
+					}
+				} else {
+					m_initialSource = null;
+				}
+			}
+		} else {
+			m_genericProperty = null;
+			m_component = null;
+			m_support = null;
+			m_editableSupport = null;
+			m_locale = null;
+			//
+			m_initialSource = null;
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Text m_valueText;
-  private Composite m_nlsComposite;
-  private Button m_nlsButton;
-  private Text m_nlsSourceText;
-  private Text m_nlsKeyText;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Text m_valueText;
+	private Composite m_nlsComposite;
+	private Button m_nlsButton;
+	private Text m_nlsSourceText;
+	private Text m_nlsKeyText;
 
-  @Override
-  public void create() {
-    super.create();
-    // show initial source/key
-    updateSourceKey();
-    m_valueText.selectAll();
-  }
+	@Override
+	public void create() {
+		super.create();
+		// show initial source/key
+		updateSourceKey();
+		m_valueText.selectAll();
+	}
 
-  @Override
-  protected Control createDialogArea(Composite parent) {
-    Composite area = (Composite) super.createDialogArea(parent);
-    // value
-    {
-      m_valueText = new Text(area, SWT.BORDER | SWT.MULTI | SWT.WRAP);
-      GridDataFactory.create(m_valueText).grab().hintC(80, 8).fill();
-      // initial value
-      ExecutionUtils.runLog(new RunnableEx() {
-        @Override
-        public void run() throws Exception {
-          Object value = m_property.getValue();
-          if (value instanceof String) {
-            m_valueText.setText((String) value);
-          }
-        }
-      });
-      // handle Ctrl+Enter as OK
-      m_valueText.addKeyListener(new KeyAdapter() {
-        @Override
-        public void keyPressed(KeyEvent e) {
-          if (e.stateMask == SWT.CTRL && e.keyCode == SWT.CR) {
-            okPressed();
-          }
-        }
-      });
-    }
-    // localization
-    if (m_genericProperty != null) {
-      Group group = new Group(area, SWT.NONE);
-      GridDataFactory.create(group).fill();
-      GridLayoutFactory.create(group);
-      group.setText(ModelMessages.StringPropertyDialog_localizationGroup);
-      // flag of using existing NLS key
-      {
-        m_nlsButton = new Button(group, SWT.CHECK);
-        m_nlsButton.setText(ModelMessages.StringPropertyDialog_localizationUseExisting);
-        m_nlsButton.setEnabled(!m_editableSupport.getEditableSources().isEmpty());
-        // initial state
-        ExecutionUtils.runLog(new RunnableEx() {
-          @Override
-          public void run() throws Exception {
-            m_nlsButton.setSelection(m_support.isExternalized(m_genericProperty.getExpression()));
-          }
-        });
-        // add selection listener
-        m_nlsButton.addListener(SWT.Selection, new Listener() {
-          @Override
-          public void handleEvent(Event event) {
-            UiUtils.changeControlEnable(m_nlsComposite, m_nlsButton.getSelection());
-            updateSourceKey();
-          }
-        });
-      }
-      // NLS container
-      {
-        m_nlsComposite = new Composite(group, SWT.NONE);
-        GridDataFactory.create(m_nlsComposite).grab().fill();
-        GridLayoutFactory.create(m_nlsComposite).columns(3).noMargins();
-        // source
-        {
-          new Label(m_nlsComposite, SWT.NONE).setText(ModelMessages.StringPropertyDialog_localizationSourceLabel);
-          //
-          m_nlsSourceText = new Text(m_nlsComposite, SWT.BORDER | SWT.READ_ONLY);
-          GridDataFactory.create(m_nlsSourceText).grabH().fillH();
-        }
-        // browse for source/key
-        {
-          Button browseButton = new Button(m_nlsComposite, SWT.NONE);
-          GridDataFactory.create(browseButton).hintHU(50).spanV(2).fill();
-          browseButton.setText(ModelMessages.StringPropertyDialog_localizationBrowse);
-          // add selection listener
-          browseButton.addListener(SWT.Selection, new Listener() {
-            @Override
-            public void handleEvent(Event event) {
-              StringPropertyKeyDialog keyDialog =
-                  new StringPropertyKeyDialog(getShell(),
-                      m_editableSupport,
-                      m_selectedEditSource,
-                      m_selectedKey,
-                      m_locale);
-              if (keyDialog.open() == OK) {
-                m_selectedEditSource = keyDialog.getSelectedSource();
-                m_selectedKey = keyDialog.getSelectedKey();
-                updateSourceKey();
-              }
-            }
-          });
-        }
-        // key
-        {
-          new Label(m_nlsComposite, SWT.NONE).setText(ModelMessages.StringPropertyDialog_localizationKeyLabel);
-          //
-          m_nlsKeyText = new Text(m_nlsComposite, SWT.BORDER | SWT.READ_ONLY);
-          GridDataFactory.create(m_nlsKeyText).grabH().fillH();
-        }
-      }
-      // update enable state for NLS container
-      UiUtils.changeControlEnable(m_nlsComposite, m_nlsButton.getSelection());
-    }
-    //
-    return area;
-  }
+	@Override
+	protected Control createDialogArea(Composite parent) {
+		Composite area = (Composite) super.createDialogArea(parent);
+		// value
+		{
+			m_valueText = new Text(area, SWT.BORDER | SWT.MULTI | SWT.WRAP);
+			GridDataFactory.create(m_valueText).grab().hintC(80, 8).fill();
+			// initial value
+			ExecutionUtils.runLog(new RunnableEx() {
+				@Override
+				public void run() throws Exception {
+					Object value = m_property.getValue();
+					if (value instanceof String) {
+						m_valueText.setText((String) value);
+					}
+				}
+			});
+			// handle Ctrl+Enter as OK
+			m_valueText.addKeyListener(new KeyAdapter() {
+				@Override
+				public void keyPressed(KeyEvent e) {
+					if (e.stateMask == SWT.CTRL && e.keyCode == SWT.CR) {
+						okPressed();
+					}
+				}
+			});
+		}
+		// localization
+		if (m_genericProperty != null) {
+			Group group = new Group(area, SWT.NONE);
+			GridDataFactory.create(group).fill();
+			GridLayoutFactory.create(group);
+			group.setText(ModelMessages.StringPropertyDialog_localizationGroup);
+			// flag of using existing NLS key
+			{
+				m_nlsButton = new Button(group, SWT.CHECK);
+				m_nlsButton.setText(ModelMessages.StringPropertyDialog_localizationUseExisting);
+				m_nlsButton.setEnabled(!m_editableSupport.getEditableSources().isEmpty());
+				// initial state
+				ExecutionUtils.runLog(new RunnableEx() {
+					@Override
+					public void run() throws Exception {
+						m_nlsButton.setSelection(m_support.isExternalized(m_genericProperty.getExpression()));
+					}
+				});
+				// add selection listener
+				m_nlsButton.addListener(SWT.Selection, new Listener() {
+					@Override
+					public void handleEvent(Event event) {
+						UiUtils.changeControlEnable(m_nlsComposite, m_nlsButton.getSelection());
+						updateSourceKey();
+					}
+				});
+			}
+			// NLS container
+			{
+				m_nlsComposite = new Composite(group, SWT.NONE);
+				GridDataFactory.create(m_nlsComposite).grab().fill();
+				GridLayoutFactory.create(m_nlsComposite).columns(3).noMargins();
+				// source
+				{
+					new Label(m_nlsComposite, SWT.NONE).setText(ModelMessages.StringPropertyDialog_localizationSourceLabel);
+					//
+					m_nlsSourceText = new Text(m_nlsComposite, SWT.BORDER | SWT.READ_ONLY);
+					GridDataFactory.create(m_nlsSourceText).grabH().fillH();
+				}
+				// browse for source/key
+				{
+					Button browseButton = new Button(m_nlsComposite, SWT.NONE);
+					GridDataFactory.create(browseButton).hintHU(50).spanV(2).fill();
+					browseButton.setText(ModelMessages.StringPropertyDialog_localizationBrowse);
+					// add selection listener
+					browseButton.addListener(SWT.Selection, new Listener() {
+						@Override
+						public void handleEvent(Event event) {
+							StringPropertyKeyDialog keyDialog =
+									new StringPropertyKeyDialog(getShell(),
+											m_editableSupport,
+											m_selectedEditSource,
+											m_selectedKey,
+											m_locale);
+							if (keyDialog.open() == OK) {
+								m_selectedEditSource = keyDialog.getSelectedSource();
+								m_selectedKey = keyDialog.getSelectedKey();
+								updateSourceKey();
+							}
+						}
+					});
+				}
+				// key
+				{
+					new Label(m_nlsComposite, SWT.NONE).setText(ModelMessages.StringPropertyDialog_localizationKeyLabel);
+					//
+					m_nlsKeyText = new Text(m_nlsComposite, SWT.BORDER | SWT.READ_ONLY);
+					GridDataFactory.create(m_nlsKeyText).grabH().fillH();
+				}
+			}
+			// update enable state for NLS container
+			UiUtils.changeControlEnable(m_nlsComposite, m_nlsButton.getSelection());
+		}
+		//
+		return area;
+	}
 
-  /**
-   * Shows source/key in {@link Control}'s.
-   */
-  private void updateSourceKey() {
-    if (m_genericProperty != null) {
-      if (m_nlsButton.getSelection() && m_selectedKey != null) {
-        m_nlsSourceText.setText(m_selectedEditSource.getLongTitle());
-        m_nlsKeyText.setText(m_selectedKey);
-        String value = m_selectedEditSource.getValue(m_locale, m_selectedKey);
-        if (value != null) {
-          m_valueText.setText(value);
-        }
-      }
-      // update OK button
-      {
-        Button okButton = getButton(IDialogConstants.OK_ID);
-        if (m_nlsButton.getSelection()) {
-          okButton.setEnabled(m_selectedKey != null);
-        } else {
-          okButton.setEnabled(true);
-        }
-      }
-    }
-  }
+	/**
+	 * Shows source/key in {@link Control}'s.
+	 */
+	private void updateSourceKey() {
+		if (m_genericProperty != null) {
+			if (m_nlsButton.getSelection() && m_selectedKey != null) {
+				m_nlsSourceText.setText(m_selectedEditSource.getLongTitle());
+				m_nlsKeyText.setText(m_selectedKey);
+				String value = m_selectedEditSource.getValue(m_locale, m_selectedKey);
+				if (value != null) {
+					m_valueText.setText(value);
+				}
+			}
+			// update OK button
+			{
+				Button okButton = getButton(IDialogConstants.OK_ID);
+				if (m_nlsButton.getSelection()) {
+					okButton.setEnabled(m_selectedKey != null);
+				} else {
+					okButton.setEnabled(true);
+				}
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Shell
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void configureShell(Shell newShell) {
-    super.configureShell(newShell);
-    newShell.setText(ModelMessages.StringPropertyDialog_title);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Shell
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void configureShell(Shell newShell) {
+		super.configureShell(newShell);
+		newShell.setText(ModelMessages.StringPropertyDialog_title);
+	}
 
-  @Override
-  protected void okPressed() {
-    final String value = m_valueText.getText();
-    if (m_component != null) {
-      ExecutionUtils.run(m_component, new RunnableEx() {
-        @Override
-        public void run() throws Exception {
-          if (m_genericProperty != null) {
-            // replace with StringLiteral
-            if (!m_nlsButton.getSelection() && m_initialSource != null) {
-              m_initialSource.replace_toStringLiteral(m_genericProperty, value);
-              return;
-            }
-            // use different key in different source
-            if (m_nlsButton.getSelection()) {
-              AbstractSource selectedSource =
-                  m_support.getAttachedSource(m_editableSupport, m_selectedEditSource);
-              selectedSource.useKey(m_genericProperty, m_selectedKey);
-              if (isValueDifferentThanInSource()) {
-                m_property.setValue(value);
-              }
-              return;
-            }
-          }
-          m_property.setValue(value);
-        }
+	@Override
+	protected void okPressed() {
+		final String value = m_valueText.getText();
+		if (m_component != null) {
+			ExecutionUtils.run(m_component, new RunnableEx() {
+				@Override
+				public void run() throws Exception {
+					if (m_genericProperty != null) {
+						// replace with StringLiteral
+						if (!m_nlsButton.getSelection() && m_initialSource != null) {
+							m_initialSource.replace_toStringLiteral(m_genericProperty, value);
+							return;
+						}
+						// use different key in different source
+						if (m_nlsButton.getSelection()) {
+							AbstractSource selectedSource =
+									m_support.getAttachedSource(m_editableSupport, m_selectedEditSource);
+							selectedSource.useKey(m_genericProperty, m_selectedKey);
+							if (isValueDifferentThanInSource()) {
+								m_property.setValue(value);
+							}
+							return;
+						}
+					}
+					m_property.setValue(value);
+				}
 
-        /**
-         * @return <code>true</code> if value in NLS source and in editor is not same, so user
-         *         changed it and we should update NLS source.
-         */
-        private boolean isValueDifferentThanInSource() {
-          String valueInSource = m_selectedEditSource.getValue(m_locale, m_selectedKey);
-          return !value.equals(valueInSource);
-        }
-      });
-    } else {
-      ExecutionUtils.runLog(new RunnableEx() {
-        @Override
-        public void run() throws Exception {
-          m_property.setValue(value);
-        }
-      });
-    }
-    // close dialog
-    super.okPressed();
-  }
+				/**
+				 * @return <code>true</code> if value in NLS source and in editor is not same, so user
+				 *         changed it and we should update NLS source.
+				 */
+				private boolean isValueDifferentThanInSource() {
+					String valueInSource = m_selectedEditSource.getValue(m_locale, m_selectedKey);
+					return !value.equals(valueInSource);
+				}
+			});
+		} else {
+			ExecutionUtils.runLog(new RunnableEx() {
+				@Override
+				public void run() throws Exception {
+					m_property.setValue(value);
+				}
+			});
+		}
+		// close dialog
+		super.okPressed();
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/string/StringPropertyEditor.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/string/StringPropertyEditor.java
index 24b9a6616..dd847227f 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/string/StringPropertyEditor.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/string/StringPropertyEditor.java
@@ -26,74 +26,74 @@
  * @coverage core.model.property.editor
  */
 public class StringPropertyEditor extends AbstractTextPropertyEditor {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final PropertyEditor INSTANCE = new StringPropertyEditor();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final PropertyEditor INSTANCE = new StringPropertyEditor();
 
-  private StringPropertyEditor() {
-  }
+	private StringPropertyEditor() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final PropertyEditorPresentation m_presentation = new ButtonPropertyEditorPresentation() {
-    @Override
-    protected void onClick(PropertyTable propertyTable, Property property) throws Exception {
-      openDialog(propertyTable, property);
-    }
-  };
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final PropertyEditorPresentation m_presentation = new ButtonPropertyEditorPresentation() {
+		@Override
+		protected void onClick(PropertyTable propertyTable, Property property) throws Exception {
+			openDialog(propertyTable, property);
+		}
+	};
 
-  @Override
-  public PropertyEditorPresentation getPresentation() {
-    return m_presentation;
-  }
+	@Override
+	public PropertyEditorPresentation getPresentation() {
+		return m_presentation;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getText(Property property) throws Exception {
-    Object value = property.getValue();
-    if (value instanceof String) {
-      return (String) value;
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getText(Property property) throws Exception {
+		Object value = property.getValue();
+		if (value instanceof String) {
+			return (String) value;
+		}
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getEditorText(Property property) throws Exception {
-    return getText(property);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getEditorText(Property property) throws Exception {
+		return getText(property);
+	}
 
-  @Override
-  protected boolean setEditorText(Property property, String text) throws Exception {
-    property.setValue(text);
-    return true;
-  }
+	@Override
+	protected boolean setEditorText(Property property, String text) throws Exception {
+		property.setValue(text);
+		return true;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing in dialog
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Opens editing dialog.
-   */
-  private void openDialog(PropertyTable propertyTable, Property property) throws Exception {
-    StringPropertyDialog dialog = new StringPropertyDialog(propertyTable.getShell(), property);
-    if (dialog.open() == Window.OK) {
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing in dialog
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Opens editing dialog.
+	 */
+	private void openDialog(PropertyTable propertyTable, Property property) throws Exception {
+		StringPropertyDialog dialog = new StringPropertyDialog(propertyTable.getShell(), property);
+		if (dialog.open() == Window.OK) {
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/string/StringPropertyKeyDialog.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/string/StringPropertyKeyDialog.java
index 2791de5ba..a3b93f326 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/string/StringPropertyKeyDialog.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/string/StringPropertyKeyDialog.java
@@ -58,320 +58,320 @@
  * @coverage core.model.property.editor
  */
 final class StringPropertyKeyDialog extends ResizableTitleAreaDialog {
-  private final IEditableSupport m_editableSupport;
-  private final LocaleInfo m_locale;
-  private IEditableSource m_selectedSource;
-  private String m_selectedKey;
+	private final IEditableSupport m_editableSupport;
+	private final LocaleInfo m_locale;
+	private IEditableSource m_selectedSource;
+	private String m_selectedKey;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public StringPropertyKeyDialog(Shell parentShell,
-      IEditableSupport editableSupport,
-      IEditableSource source,
-      String key,
-      LocaleInfo locale) {
-    super(parentShell, DesignerPlugin.getDefault());
-    m_editableSupport = editableSupport;
-    m_selectedSource = source;
-    m_selectedKey = key;
-    m_locale = locale;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public StringPropertyKeyDialog(Shell parentShell,
+			IEditableSupport editableSupport,
+			IEditableSource source,
+			String key,
+			LocaleInfo locale) {
+		super(parentShell, DesignerPlugin.getDefault());
+		m_editableSupport = editableSupport;
+		m_selectedSource = source;
+		m_selectedKey = key;
+		m_locale = locale;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the selected {@link IEditableSource}.
-   */
-  public IEditableSource getSelectedSource() {
-    return m_selectedSource;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the selected {@link IEditableSource}.
+	 */
+	public IEditableSource getSelectedSource() {
+		return m_selectedSource;
+	}
 
-  /**
-   * @return the selected key.
-   */
-  public String getSelectedKey() {
-    return m_selectedKey;
-  }
+	/**
+	 * @return the selected key.
+	 */
+	public String getSelectedKey() {
+		return m_selectedKey;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private ListViewer m_sourcesViewer;
-  private TableViewer m_valuesViewer;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private ListViewer m_sourcesViewer;
+	private TableViewer m_valuesViewer;
 
-  @Override
-  public void create() {
-    super.create();
-    // title/message
-    {
-      setTitle(ModelMessages.StringPropertyKeyDialog_title);
-      setMessage(ModelMessages.StringPropertyKeyDialog_message);
-    }
-    // select key
-    {
-      Button okButton = getButton(IDialogConstants.OK_ID);
-      if (m_selectedKey != null) {
-        m_valuesViewer.setSelection(new StructuredSelection(m_selectedKey));
-        okButton.setEnabled(true);
-      } else {
-        okButton.setEnabled(false);
-      }
-    }
-  }
+	@Override
+	public void create() {
+		super.create();
+		// title/message
+		{
+			setTitle(ModelMessages.StringPropertyKeyDialog_title);
+			setMessage(ModelMessages.StringPropertyKeyDialog_message);
+		}
+		// select key
+		{
+			Button okButton = getButton(IDialogConstants.OK_ID);
+			if (m_selectedKey != null) {
+				m_valuesViewer.setSelection(new StructuredSelection(m_selectedKey));
+				okButton.setEnabled(true);
+			} else {
+				okButton.setEnabled(false);
+			}
+		}
+	}
 
-  @Override
-  protected Control createDialogArea(Composite parent) {
-    Composite area = (Composite) super.createDialogArea(parent);
-    // prepare container for all dialog controls
-    Composite container = new Composite(area, SWT.NONE);
-    GridDataFactory.create(container).grab().fill();
-    GridLayoutFactory.create(container);
-    // groups
-    createSourcesGroup(container);
-    createValuesGroup(container);
-    // select source
-    {
-      if (m_selectedSource == null) {
-        m_selectedSource = (IEditableSource) m_sourcesViewer.getElementAt(0);
-      }
-      m_sourcesViewer.setSelection(new StructuredSelection(m_selectedSource));
-    }
-    //
-    return area;
-  }
+	@Override
+	protected Control createDialogArea(Composite parent) {
+		Composite area = (Composite) super.createDialogArea(parent);
+		// prepare container for all dialog controls
+		Composite container = new Composite(area, SWT.NONE);
+		GridDataFactory.create(container).grab().fill();
+		GridLayoutFactory.create(container);
+		// groups
+		createSourcesGroup(container);
+		createValuesGroup(container);
+		// select source
+		{
+			if (m_selectedSource == null) {
+				m_selectedSource = (IEditableSource) m_sourcesViewer.getElementAt(0);
+			}
+			m_sourcesViewer.setSelection(new StructuredSelection(m_selectedSource));
+		}
+		//
+		return area;
+	}
 
-  private void createSourcesGroup(Composite parent) {
-    Group sourcesGroup = new Group(parent, SWT.NONE);
-    GridDataFactory.create(sourcesGroup).hintC(105, 5).grabH().fill();
-    GridLayoutFactory.create(sourcesGroup);
-    sourcesGroup.setText(ModelMessages.StringPropertyKeyDialog_sourcesGroup);
-    //
-    m_sourcesViewer = new ListViewer(sourcesGroup, SWT.BORDER);
-    GridDataFactory.create(m_sourcesViewer.getList()).grab().fill();
-    // content
-    m_sourcesViewer.setLabelProvider(new LabelProvider() {
-      @Override
-      public String getText(Object element) {
-        IEditableSource source = (IEditableSource) element;
-        return source.getLongTitle();
-      }
-    });
-    m_sourcesViewer.setContentProvider(new ArrayContentProvider());
-    m_sourcesViewer.setComparator(new ViewerComparator());
-    m_sourcesViewer.setInput(m_editableSupport.getEditableSources());
-    // selection listener
-    m_sourcesViewer.addSelectionChangedListener(new ISelectionChangedListener() {
-      @Override
-      public void selectionChanged(SelectionChangedEvent event) {
-        IStructuredSelection selection = (IStructuredSelection) event.getSelection();
-        if (!selection.isEmpty()) {
-          m_selectedSource = (IEditableSource) selection.getFirstElement();
-          m_valuesViewer.setInput(m_selectedSource.getKeys());
-        } else {
-          m_valuesViewer.setInput(null);
-        }
-        updateOkButton();
-      }
-    });
-  }
+	private void createSourcesGroup(Composite parent) {
+		Group sourcesGroup = new Group(parent, SWT.NONE);
+		GridDataFactory.create(sourcesGroup).hintC(105, 5).grabH().fill();
+		GridLayoutFactory.create(sourcesGroup);
+		sourcesGroup.setText(ModelMessages.StringPropertyKeyDialog_sourcesGroup);
+		//
+		m_sourcesViewer = new ListViewer(sourcesGroup, SWT.BORDER);
+		GridDataFactory.create(m_sourcesViewer.getList()).grab().fill();
+		// content
+		m_sourcesViewer.setLabelProvider(new LabelProvider() {
+			@Override
+			public String getText(Object element) {
+				IEditableSource source = (IEditableSource) element;
+				return source.getLongTitle();
+			}
+		});
+		m_sourcesViewer.setContentProvider(new ArrayContentProvider());
+		m_sourcesViewer.setComparator(new ViewerComparator());
+		m_sourcesViewer.setInput(m_editableSupport.getEditableSources());
+		// selection listener
+		m_sourcesViewer.addSelectionChangedListener(new ISelectionChangedListener() {
+			@Override
+			public void selectionChanged(SelectionChangedEvent event) {
+				IStructuredSelection selection = (IStructuredSelection) event.getSelection();
+				if (!selection.isEmpty()) {
+					m_selectedSource = (IEditableSource) selection.getFirstElement();
+					m_valuesViewer.setInput(m_selectedSource.getKeys());
+				} else {
+					m_valuesViewer.setInput(null);
+				}
+				updateOkButton();
+			}
+		});
+	}
 
-  private void createValuesGroup(Composite parent) {
-    Group valuesGroup = new Group(parent, SWT.NONE);
-    GridDataFactory.create(valuesGroup).hintC(105, 20).grab().fill();
-    GridLayoutFactory.create(valuesGroup);
-    valuesGroup.setText(ModelMessages.StringPropertyKeyDialog_valuesGroup);
-    // pattern
-    {
-      new Label(valuesGroup, SWT.NONE).setText(
-          ModelMessages.StringPropertyKeyDialog_valuesFilterLabel);
-      //
-      m_filterPatternText = new Text(valuesGroup, SWT.BORDER);
-      GridDataFactory.create(m_filterPatternText).grabH().fill();
-      m_filterPatternText.addListener(SWT.Modify, new Listener() {
-        @Override
-        public void handleEvent(Event event) {
-          refreshValuesViewer();
-        }
-      });
-    }
-    // viewer
-    {
-      new Label(valuesGroup, SWT.NONE).setText(ModelMessages.StringPropertyKeyDialog_matchedGroup);
-      //
-      m_valuesViewer = new TableViewer(valuesGroup, SWT.BORDER | SWT.FULL_SELECTION);
-      GridDataFactory.create(m_valuesViewer.getTable()).grab().fill();
-      // columns
-      {
-        TableFactory tableFactory = TableFactory.modify(m_valuesViewer).standard();
-        tableFactory.newColumn().widthC(40).text(ModelMessages.StringPropertyKeyDialog_keyColumn);
-        tableFactory.newColumn().widthC(57).image(LocaleUtils.getImage(m_locale)).text(
-            ModelMessages.StringPropertyKeyDialog_valueColumn);
-      }
-      // content
-      setValuesFilter();
-      m_valuesViewer.setContentProvider(new ArrayContentProvider());
-      m_valuesViewer.setLabelProvider(new ValuesLabelProvider());
-      m_valuesViewer.setComparator(new ViewerComparator());
-      // listeners
-      m_valuesViewer.addSelectionChangedListener(new ISelectionChangedListener() {
-        @Override
-        public void selectionChanged(SelectionChangedEvent event) {
-          IStructuredSelection selection = (IStructuredSelection) event.getSelection();
-          m_selectedKey = (String) selection.getFirstElement();
-          getButton(IDialogConstants.OK_ID).setEnabled(true);
-        }
-      });
-      m_valuesViewer.addDoubleClickListener(new IDoubleClickListener() {
-        @Override
-        public void doubleClick(DoubleClickEvent event) {
-          okPressed();
-        }
-      });
-    }
-    // pattern options
-    {
-      Composite optionsComposite = new Composite(valuesGroup, SWT.NONE);
-      GridDataFactory.create(optionsComposite).fill();
-      GridLayoutFactory.create(optionsComposite).noMargins().columns(4);
-      //
-      new Label(optionsComposite, SWT.NONE).setText(
-          ModelMessages.StringPropertyKeyDialog_filterLabel);
-      // create buttons
-      m_filterKeyButton = createFilterOptionButton(
-          optionsComposite,
-          ModelMessages.StringPropertyKeyDialog_filterKeyButton);
-      m_filterValueButton = createFilterOptionButton(
-          optionsComposite,
-          ModelMessages.StringPropertyKeyDialog_filterValueButton);
-      m_filterBothButton = createFilterOptionButton(
-          optionsComposite,
-          ModelMessages.StringPropertyKeyDialog_filterBothButton);
-      // by default select "key"
-      if (!m_filterKeyButton.getSelection()
-          && !m_filterValueButton.getSelection()
-          && !m_filterBothButton.getSelection()) {
-        m_filterKeyButton.setSelection(true);
-      }
-    }
-  }
+	private void createValuesGroup(Composite parent) {
+		Group valuesGroup = new Group(parent, SWT.NONE);
+		GridDataFactory.create(valuesGroup).hintC(105, 20).grab().fill();
+		GridLayoutFactory.create(valuesGroup);
+		valuesGroup.setText(ModelMessages.StringPropertyKeyDialog_valuesGroup);
+		// pattern
+		{
+			new Label(valuesGroup, SWT.NONE).setText(
+					ModelMessages.StringPropertyKeyDialog_valuesFilterLabel);
+			//
+			m_filterPatternText = new Text(valuesGroup, SWT.BORDER);
+			GridDataFactory.create(m_filterPatternText).grabH().fill();
+			m_filterPatternText.addListener(SWT.Modify, new Listener() {
+				@Override
+				public void handleEvent(Event event) {
+					refreshValuesViewer();
+				}
+			});
+		}
+		// viewer
+		{
+			new Label(valuesGroup, SWT.NONE).setText(ModelMessages.StringPropertyKeyDialog_matchedGroup);
+			//
+			m_valuesViewer = new TableViewer(valuesGroup, SWT.BORDER | SWT.FULL_SELECTION);
+			GridDataFactory.create(m_valuesViewer.getTable()).grab().fill();
+			// columns
+			{
+				TableFactory tableFactory = TableFactory.modify(m_valuesViewer).standard();
+				tableFactory.newColumn().widthC(40).text(ModelMessages.StringPropertyKeyDialog_keyColumn);
+				tableFactory.newColumn().widthC(57).image(LocaleUtils.getImage(m_locale)).text(
+						ModelMessages.StringPropertyKeyDialog_valueColumn);
+			}
+			// content
+			setValuesFilter();
+			m_valuesViewer.setContentProvider(new ArrayContentProvider());
+			m_valuesViewer.setLabelProvider(new ValuesLabelProvider());
+			m_valuesViewer.setComparator(new ViewerComparator());
+			// listeners
+			m_valuesViewer.addSelectionChangedListener(new ISelectionChangedListener() {
+				@Override
+				public void selectionChanged(SelectionChangedEvent event) {
+					IStructuredSelection selection = (IStructuredSelection) event.getSelection();
+					m_selectedKey = (String) selection.getFirstElement();
+					getButton(IDialogConstants.OK_ID).setEnabled(true);
+				}
+			});
+			m_valuesViewer.addDoubleClickListener(new IDoubleClickListener() {
+				@Override
+				public void doubleClick(DoubleClickEvent event) {
+					okPressed();
+				}
+			});
+		}
+		// pattern options
+		{
+			Composite optionsComposite = new Composite(valuesGroup, SWT.NONE);
+			GridDataFactory.create(optionsComposite).fill();
+			GridLayoutFactory.create(optionsComposite).noMargins().columns(4);
+			//
+			new Label(optionsComposite, SWT.NONE).setText(
+					ModelMessages.StringPropertyKeyDialog_filterLabel);
+			// create buttons
+			m_filterKeyButton = createFilterOptionButton(
+					optionsComposite,
+					ModelMessages.StringPropertyKeyDialog_filterKeyButton);
+			m_filterValueButton = createFilterOptionButton(
+					optionsComposite,
+					ModelMessages.StringPropertyKeyDialog_filterValueButton);
+			m_filterBothButton = createFilterOptionButton(
+					optionsComposite,
+					ModelMessages.StringPropertyKeyDialog_filterBothButton);
+			// by default select "key"
+			if (!m_filterKeyButton.getSelection()
+					&& !m_filterValueButton.getSelection()
+					&& !m_filterBothButton.getSelection()) {
+				m_filterKeyButton.setSelection(true);
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Filter
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private SearchPattern m_searchPattern;
-  private Text m_filterPatternText;
-  private Button m_filterKeyButton;
-  private Button m_filterValueButton;
-  private Button m_filterBothButton;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Filter
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private SearchPattern m_searchPattern;
+	private Text m_filterPatternText;
+	private Button m_filterKeyButton;
+	private Button m_filterValueButton;
+	private Button m_filterBothButton;
 
-  /**
-   * Creates {@link SWT#RADIO} {@link Button} that refreshes {@link #m_valuesViewer}.
-   */
-  private Button createFilterOptionButton(Composite parent, final String text) {
-    final Button button = new Button(parent, SWT.RADIO);
-    button.setText(text);
-    button.setSelection(getDialogSettings().getBoolean(text));
-    button.addListener(SWT.Selection, new Listener() {
-      @Override
-      public void handleEvent(Event event) {
-        getDialogSettings().put(text, button.getSelection());
-        refreshValuesViewer();
-      }
-    });
-    return button;
-  }
+	/**
+	 * Creates {@link SWT#RADIO} {@link Button} that refreshes {@link #m_valuesViewer}.
+	 */
+	private Button createFilterOptionButton(Composite parent, final String text) {
+		final Button button = new Button(parent, SWT.RADIO);
+		button.setText(text);
+		button.setSelection(getDialogSettings().getBoolean(text));
+		button.addListener(SWT.Selection, new Listener() {
+			@Override
+			public void handleEvent(Event event) {
+				getDialogSettings().put(text, button.getSelection());
+				refreshValuesViewer();
+			}
+		});
+		return button;
+	}
 
-  /**
-   * Sets the {@link ViewerFilter} that uses {@link #m_searchPattern}.
-   */
-  private void setValuesFilter() {
-    m_valuesViewer.addFilter(new ViewerFilter() {
-      @Override
-      public boolean select(Viewer viewer, Object parentElement, Object element) {
-        if (m_searchPattern == null) {
-          return true;
-        } else {
-          String key = (String) element;
-          String value = m_selectedSource.getValue(m_locale, key);
-          if (m_filterKeyButton.getSelection()) {
-            return m_searchPattern.matches(key);
-          }
-          if (m_filterValueButton.getSelection()) {
-            return m_searchPattern.matches(value);
-          }
-          if (m_filterBothButton.getSelection()) {
-            return m_searchPattern.matches(key) || m_searchPattern.matches(value);
-          }
-          return false;
-        }
-      }
-    });
-  }
+	/**
+	 * Sets the {@link ViewerFilter} that uses {@link #m_searchPattern}.
+	 */
+	private void setValuesFilter() {
+		m_valuesViewer.addFilter(new ViewerFilter() {
+			@Override
+			public boolean select(Viewer viewer, Object parentElement, Object element) {
+				if (m_searchPattern == null) {
+					return true;
+				} else {
+					String key = (String) element;
+					String value = m_selectedSource.getValue(m_locale, key);
+					if (m_filterKeyButton.getSelection()) {
+						return m_searchPattern.matches(key);
+					}
+					if (m_filterValueButton.getSelection()) {
+						return m_searchPattern.matches(value);
+					}
+					if (m_filterBothButton.getSelection()) {
+						return m_searchPattern.matches(key) || m_searchPattern.matches(value);
+					}
+					return false;
+				}
+			}
+		});
+	}
 
-  /**
-   * Refreshes {@link #m_valuesViewer}.
-   */
-  private void refreshValuesViewer() {
-    // create search pattern
-    {
-      m_searchPattern = new SearchPattern();
-      m_searchPattern.setPattern("*" + m_filterPatternText.getText());
-    }
-    // do refresh
-    m_valuesViewer.refresh();
-    updateOkButton();
-  }
+	/**
+	 * Refreshes {@link #m_valuesViewer}.
+	 */
+	private void refreshValuesViewer() {
+		// create search pattern
+		{
+			m_searchPattern = new SearchPattern();
+			m_searchPattern.setPattern("*" + m_filterPatternText.getText());
+		}
+		// do refresh
+		m_valuesViewer.refresh();
+		updateOkButton();
+	}
 
-  private void updateOkButton() {
-    ISelection keySelection = m_valuesViewer.getSelection();
-    Button okButton = getButton(IDialogConstants.OK_ID);
-    if (okButton != null) {
-      okButton.setEnabled(!keySelection.isEmpty());
-    }
-  }
+	private void updateOkButton() {
+		ISelection keySelection = m_valuesViewer.getSelection();
+		Button okButton = getButton(IDialogConstants.OK_ID);
+		if (okButton != null) {
+			okButton.setEnabled(!keySelection.isEmpty());
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Shell
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void configureShell(Shell newShell) {
-    super.configureShell(newShell);
-    newShell.setText(ModelMessages.StringPropertyKeyDialog_shellTitle);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Shell
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void configureShell(Shell newShell) {
+		super.configureShell(newShell);
+		newShell.setText(ModelMessages.StringPropertyKeyDialog_shellTitle);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Values providers
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Implementation of {@link ITableLabelProvider} for {@link #m_valuesViewer}.
-   */
-  private class ValuesLabelProvider extends LabelProvider implements ITableLabelProvider {
-    @Override
-    public Image getColumnImage(Object element, int columnIndex) {
-      return null;
-    }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Values providers
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Implementation of {@link ITableLabelProvider} for {@link #m_valuesViewer}.
+	 */
+	private class ValuesLabelProvider extends LabelProvider implements ITableLabelProvider {
+		@Override
+		public Image getColumnImage(Object element, int columnIndex) {
+			return null;
+		}
 
-    @Override
-    public String getColumnText(Object element, int columnIndex) {
-      String key = (String) element;
-      if (columnIndex == 0) {
-        return key;
-      }
-      return m_selectedSource.getValue(m_locale, key);
-    }
-  }
+		@Override
+		public String getColumnText(Object element, int columnIndex) {
+			String key = (String) element;
+			if (columnIndex == 0) {
+				return key;
+			}
+			return m_selectedSource.getValue(m_locale, key);
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/style/AbstractStylePropertyEditor.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/style/AbstractStylePropertyEditor.java
index 67413d96c..78c4e6a0e 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/style/AbstractStylePropertyEditor.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/style/AbstractStylePropertyEditor.java
@@ -38,126 +38,126 @@
  * @coverage core.model.property.editor
  */
 public abstract class AbstractStylePropertyEditor extends TextDisplayPropertyEditor
-    implements
-      IComplexPropertyEditor {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance fields
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected final List<SubStylePropertyImpl> m_macroProperties = Lists.newArrayList();
-  protected final List<SubStylePropertyImpl> m_otherProperties = Lists.newArrayList();
-  protected final List<SubStylePropertyImpl> m_properties = Lists.newArrayList();
+implements
+IComplexPropertyEditor {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance fields
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected final List<SubStylePropertyImpl> m_macroProperties = Lists.newArrayList();
+	protected final List<SubStylePropertyImpl> m_otherProperties = Lists.newArrayList();
+	protected final List<SubStylePropertyImpl> m_properties = Lists.newArrayList();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the current style value.
-   */
-  protected long getStyleValue(Property property) throws Exception {
-    Object propertyValue = property.getValue();
-    if (Property.UNKNOWN_VALUE == propertyValue) {
-      return 0;
-    }
-    Number value = (Number) propertyValue;
-    return value != null ? value.longValue() : 0;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the current style value.
+	 */
+	protected long getStyleValue(Property property) throws Exception {
+		Object propertyValue = property.getValue();
+		if (Property.UNKNOWN_VALUE == propertyValue) {
+			return 0;
+		}
+		Number value = (Number) propertyValue;
+		return value != null ? value.longValue() : 0;
+	}
 
-  /**
-   * Sets the new value of given {@link SubStyleProperty}.
-   */
-  protected abstract void setStyleValue(Property property, long newValue) throws Exception;
+	/**
+	 * Sets the new value of given {@link SubStyleProperty}.
+	 */
+	protected abstract void setStyleValue(Property property, long newValue) throws Exception;
 
-  /**
-   * @return the {@link Property} that has given value.
-   */
-  protected static Property getPropertyForValue(final Object value) {
-    return new EmptyProperty() {
-      @Override
-      public Object getValue() throws Exception {
-        return value;
-      }
-    };
-  }
+	/**
+	 * @return the {@link Property} that has given value.
+	 */
+	protected static Property getPropertyForValue(final Object value) {
+		return new EmptyProperty() {
+			@Override
+			public Object getValue() throws Exception {
+				return value;
+			}
+		};
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // As string
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link String} presentation of this {@link StylePropertyEditor}, for tests.
-   */
-  public String getAsString() {
-    StringBuilder builder = new StringBuilder();
-    for (SubStylePropertyImpl property : m_properties) {
-      builder.append("\t");
-      property.getAsString(builder);
-      builder.append("\n");
-    }
-    return builder.toString();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// As string
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link String} presentation of this {@link StylePropertyEditor}, for tests.
+	 */
+	public String getAsString() {
+		StringBuilder builder = new StringBuilder();
+		for (SubStylePropertyImpl property : m_properties) {
+			builder.append("\t");
+			property.getAsString(builder);
+			builder.append("\n");
+		}
+		return builder.toString();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Properties
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Property[] getProperties(Property mainProperty) throws Exception {
-    ObjectInfo objectInfo = mainProperty.getAdapter(ObjectInfo.class);
-    Property[] properties = (Property[]) objectInfo.getArbitraryValue(this);
-    if (properties == null) {
-      int length = m_properties.size();
-      properties = new Property[length];
-      for (int i = 0; i < length; i++) {
-        properties[i] = new SubStyleProperty(mainProperty, m_properties.get(i));
-      }
-      objectInfo.putArbitraryValue(this, properties);
-    }
-    return properties;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Properties
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Property[] getProperties(Property mainProperty) throws Exception {
+		ObjectInfo objectInfo = mainProperty.getAdapter(ObjectInfo.class);
+		Property[] properties = (Property[]) objectInfo.getArbitraryValue(this);
+		if (properties == null) {
+			int length = m_properties.size();
+			properties = new Property[length];
+			for (int i = 0; i < length; i++) {
+				properties[i] = new SubStyleProperty(mainProperty, m_properties.get(i));
+			}
+			objectInfo.putArbitraryValue(this, properties);
+		}
+		return properties;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Popup menu
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Contributes actions into {@link Property} context menu.
-   */
-  public void contributeActions(Property mainProperty,
-      IMenuManager manager,
-      String implementTitle,
-      boolean isCascade) throws Exception {
-    // prepare "implement" menu
-    IMenuManager implementMenuManager = new MenuManager(implementTitle);
-    if (isCascade) {
-      // add all "boolean" properties
-      for (SubStylePropertyImpl property : m_properties) {
-        if (property instanceof BooleanStylePropertyImpl) {
-          property.contributeActions(mainProperty, implementMenuManager);
-        }
-      }
-      //
-      implementMenuManager.add(new Separator());
-      // add other properties
-      for (SubStylePropertyImpl property : m_properties) {
-        if (!(property instanceof BooleanStylePropertyImpl)) {
-          IMenuManager subMenu = new MenuManager(property.getTitle());
-          property.contributeActions(mainProperty, subMenu);
-          implementMenuManager.add(subMenu);
-        }
-      }
-    } else {
-      for (SubStylePropertyImpl property : m_properties) {
-        property.contributeActions(mainProperty, implementMenuManager);
-      }
-    }
-    // add "implement" menu
-    manager.appendToGroup(IContextMenuConstants.GROUP_LAYOUT, implementMenuManager);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Popup menu
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Contributes actions into {@link Property} context menu.
+	 */
+	public void contributeActions(Property mainProperty,
+			IMenuManager manager,
+			String implementTitle,
+			boolean isCascade) throws Exception {
+		// prepare "implement" menu
+		IMenuManager implementMenuManager = new MenuManager(implementTitle);
+		if (isCascade) {
+			// add all "boolean" properties
+			for (SubStylePropertyImpl property : m_properties) {
+				if (property instanceof BooleanStylePropertyImpl) {
+					property.contributeActions(mainProperty, implementMenuManager);
+				}
+			}
+			//
+			implementMenuManager.add(new Separator());
+			// add other properties
+			for (SubStylePropertyImpl property : m_properties) {
+				if (!(property instanceof BooleanStylePropertyImpl)) {
+					IMenuManager subMenu = new MenuManager(property.getTitle());
+					property.contributeActions(mainProperty, subMenu);
+					implementMenuManager.add(subMenu);
+				}
+			}
+		} else {
+			for (SubStylePropertyImpl property : m_properties) {
+				property.contributeActions(mainProperty, implementMenuManager);
+			}
+		}
+		// add "implement" menu
+		manager.appendToGroup(IContextMenuConstants.GROUP_LAYOUT, implementMenuManager);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/style/StylePropertyEditor.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/style/StylePropertyEditor.java
index d021083e7..579cb1af0 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/style/StylePropertyEditor.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/style/StylePropertyEditor.java
@@ -62,506 +62,506 @@
  * @coverage core.model.property.editor
  */
 public final class StylePropertyEditor extends AbstractStylePropertyEditor
-    implements
-      IClipboardSourceProvider,
-      IConfigurablePropertyObject,
-      IValueSourcePropertyEditor {
-  private static final String STYLE_TITLE = "Style";
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance fields
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private String m_className;
-  private Class<?> m_class;
-  private String m_title = "Style";
+implements
+IClipboardSourceProvider,
+IConfigurablePropertyObject,
+IValueSourcePropertyEditor {
+	private static final String STYLE_TITLE = "Style";
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance fields
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private String m_className;
+	private Class<?> m_class;
+	private String m_title = "Style";
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getText(Property property) throws Exception {
-    return "[" + getSource(property, false, ", ") + "]";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getText(Property property) throws Exception {
+		return "[" + getSource(property, false, ", ") + "]";
+	}
 
-  public String getPropertyTitle() {
-    return m_title;
-  }
+	public String getPropertyTitle() {
+		return m_title;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // As string
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link String} presentation of this {@link StylePropertyEditor}, for tests.
-   */
-  @Override
-  public String getAsString() {
-    StringBuilder builder = new StringBuilder();
-    builder.append(m_className);
-    builder.append("\n");
-    builder.append(super.getAsString());
-    return builder.toString();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// As string
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link String} presentation of this {@link StylePropertyEditor}, for tests.
+	 */
+	@Override
+	public String getAsString() {
+		StringBuilder builder = new StringBuilder();
+		builder.append(m_className);
+		builder.append("\n");
+		builder.append(super.getAsString());
+		return builder.toString();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IClipboardSourceProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getClipboardSource(GenericProperty property) throws Exception {
-    return getSource(property);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IClipboardSourceProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getClipboardSource(GenericProperty property) throws Exception {
+		return getSource(property);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IConfigurablePropertyObject
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void configure(EditorState state, Map<String, Object> parameters) throws Exception {
-    // prepare class
-    m_className = (String) parameters.get("class");
-    m_class = state.getEditorLoader().loadClass(m_className);
-    // prepare title
-    if (parameters.containsKey("title")) {
-      m_title = (String) parameters.get("title");
-    }
-    // prepare sub properties
-    configureSet(m_properties, state, parameters);
-    configureSetUsingEquals(m_properties, state, parameters);
-    configureMacro(m_properties, state, parameters);
-    configureSelections(m_properties, state, parameters);
-    configureSelectionUsingEquals(m_properties, state, parameters);
-    configureEnums(m_properties, state, parameters);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IConfigurablePropertyObject
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void configure(EditorState state, Map<String, Object> parameters) throws Exception {
+		// prepare class
+		m_className = (String) parameters.get("class");
+		m_class = state.getEditorLoader().loadClass(m_className);
+		// prepare title
+		if (parameters.containsKey("title")) {
+			m_title = (String) parameters.get("title");
+		}
+		// prepare sub properties
+		configureSet(m_properties, state, parameters);
+		configureSetUsingEquals(m_properties, state, parameters);
+		configureMacro(m_properties, state, parameters);
+		configureSelections(m_properties, state, parameters);
+		configureSelectionUsingEquals(m_properties, state, parameters);
+		configureEnums(m_properties, state, parameters);
+	}
 
-  private void configureSet(List<SubStylePropertyImpl> properties,
-      EditorState state,
-      Map<String, Object> parameters) throws Exception {
-    if (parameters.containsKey("set")) {
-      String[] setters = StringUtils.split((String) parameters.get("set"));
-      // loop of all set's
-      for (int i = 0; i < setters.length; i++) {
-        // prepare flag name
-        String[] names = StringUtils.split(setters[i], ':');
-        String flagName = names[0];
-        // prepare flag value
-        Field field = getField(state, m_class, flagName);
-        if (field == null) {
-          continue;
-        }
-        long flag = field.getLong(null);
-        // add property
-        SubStylePropertyImpl property;
-        if (names.length == 2) {
-          property = new BooleanStylePropertyImpl(this, names[1], flagName, flag);
-        } else {
-          property = new BooleanStylePropertyImpl(this, flagName.toLowerCase(), flagName, flag);
-        }
-        properties.add(property);
-        m_otherProperties.add(property);
-      }
-    }
-  }
+	private void configureSet(List<SubStylePropertyImpl> properties,
+			EditorState state,
+			Map<String, Object> parameters) throws Exception {
+		if (parameters.containsKey("set")) {
+			String[] setters = StringUtils.split((String) parameters.get("set"));
+			// loop of all set's
+			for (int i = 0; i < setters.length; i++) {
+				// prepare flag name
+				String[] names = StringUtils.split(setters[i], ':');
+				String flagName = names[0];
+				// prepare flag value
+				Field field = getField(state, m_class, flagName);
+				if (field == null) {
+					continue;
+				}
+				long flag = field.getLong(null);
+				// add property
+				SubStylePropertyImpl property;
+				if (names.length == 2) {
+					property = new BooleanStylePropertyImpl(this, names[1], flagName, flag);
+				} else {
+					property = new BooleanStylePropertyImpl(this, flagName.toLowerCase(), flagName, flag);
+				}
+				properties.add(property);
+				m_otherProperties.add(property);
+			}
+		}
+	}
 
-  private void configureSetUsingEquals(List<SubStylePropertyImpl> properties,
-      EditorState state,
-      Map<String, Object> parameters) throws Exception {
-    if (parameters.containsKey("setUsingEqual")) {
-      String[] setters = StringUtils.split((String) parameters.get("setUsingEqual"));
-      // loop of all set's
-      for (int i = 0; i < setters.length; i++) {
-        // prepare flag name
-        String[] names = StringUtils.split(setters[i], ':');
-        String flagName = names[0];
-        // prepare flag value
-        Field field = getField(state, m_class, flagName);
-        if (field == null) {
-          continue;
-        }
-        long flag = field.getLong(null);
-        // add property
-        SubStylePropertyImpl property;
-        if (names.length == 2) {
-          property =
-              new BooleanUsingEqualsStylePropertyImpl(this, names[1], flagName, flag, m_className);
-        } else {
-          property =
-              new BooleanUsingEqualsStylePropertyImpl(this,
-                  flagName.toLowerCase(),
-                  flagName,
-                  flag,
-                  m_className);
-        }
-        properties.add(property);
-        m_otherProperties.add(property);
-      }
-    }
-  }
+	private void configureSetUsingEquals(List<SubStylePropertyImpl> properties,
+			EditorState state,
+			Map<String, Object> parameters) throws Exception {
+		if (parameters.containsKey("setUsingEqual")) {
+			String[] setters = StringUtils.split((String) parameters.get("setUsingEqual"));
+			// loop of all set's
+			for (int i = 0; i < setters.length; i++) {
+				// prepare flag name
+				String[] names = StringUtils.split(setters[i], ':');
+				String flagName = names[0];
+				// prepare flag value
+				Field field = getField(state, m_class, flagName);
+				if (field == null) {
+					continue;
+				}
+				long flag = field.getLong(null);
+				// add property
+				SubStylePropertyImpl property;
+				if (names.length == 2) {
+					property =
+							new BooleanUsingEqualsStylePropertyImpl(this, names[1], flagName, flag, m_className);
+				} else {
+					property =
+							new BooleanUsingEqualsStylePropertyImpl(this,
+									flagName.toLowerCase(),
+									flagName,
+									flag,
+									m_className);
+				}
+				properties.add(property);
+				m_otherProperties.add(property);
+			}
+		}
+	}
 
-  private void configureMacro(List<SubStylePropertyImpl> properties,
-      EditorState state,
-      Map<String, Object> parameters) throws Exception {
-    int macroIndex = 0;
-    while (true) {
-      // prepare "macro" key
-      String key = "macro" + Integer.toString(macroIndex++);
-      if (!parameters.containsKey(key)) {
-        break;
-      }
-      // prepare all part's
-      String[] values = StringUtils.split((String) parameters.get(key));
-      // title
-      String title = values[0];
-      // prepare flag string values
-      int flagCount = 0;
-      String[] flagValues = new String[values.length - 1];
-      for (int i = 0; i < flagValues.length; i++) {
-        String flag = values[i + 1];
-        if (getField(state, m_class, flag) == null) {
-          continue;
-        }
-        flagValues[flagCount++] = flag;
-      }
-      // flag values
-      long[] flags = new long[flagCount];
-      String[] sFlags = new String[flagCount + 1];
-      sFlags[flagCount] = "";
-      for (int i = 0; i < flagCount; i++) {
-        String flag = flagValues[i];
-        flags[i] = m_class.getField(flag).getLong(null);
-        sFlags[i] = flag;
-      }
-      // add property
-      SubStylePropertyImpl property = new MacroStylePropertyImpl(this, title, flags, sFlags);
-      properties.add(property);
-      m_macroProperties.add(property);
-    }
-  }
+	private void configureMacro(List<SubStylePropertyImpl> properties,
+			EditorState state,
+			Map<String, Object> parameters) throws Exception {
+		int macroIndex = 0;
+		while (true) {
+			// prepare "macro" key
+			String key = "macro" + Integer.toString(macroIndex++);
+			if (!parameters.containsKey(key)) {
+				break;
+			}
+			// prepare all part's
+			String[] values = StringUtils.split((String) parameters.get(key));
+			// title
+			String title = values[0];
+			// prepare flag string values
+			int flagCount = 0;
+			String[] flagValues = new String[values.length - 1];
+			for (int i = 0; i < flagValues.length; i++) {
+				String flag = values[i + 1];
+				if (getField(state, m_class, flag) == null) {
+					continue;
+				}
+				flagValues[flagCount++] = flag;
+			}
+			// flag values
+			long[] flags = new long[flagCount];
+			String[] sFlags = new String[flagCount + 1];
+			sFlags[flagCount] = "";
+			for (int i = 0; i < flagCount; i++) {
+				String flag = flagValues[i];
+				flags[i] = m_class.getField(flag).getLong(null);
+				sFlags[i] = flag;
+			}
+			// add property
+			SubStylePropertyImpl property = new MacroStylePropertyImpl(this, title, flags, sFlags);
+			properties.add(property);
+			m_macroProperties.add(property);
+		}
+	}
 
-  private void configureSelections(List<SubStylePropertyImpl> properties,
-      EditorState state,
-      Map<String, Object> parameters) throws Exception {
-    int selectIndex = 0;
-    while (true) {
-      // prepare "select" key
-      String key = "select" + Integer.toString(selectIndex++);
-      if (!parameters.containsKey(key)) {
-        break;
-      }
-      // prepare all part's
-      String[] values = StringUtils.split((String) parameters.get(key));
-      // title
-      String title = values[0];
-      // default value
-      String defaultString = values[1];
-      long defaultFlag;
-      if (StringUtils.isNumeric(defaultString)) {
-        defaultFlag = Long.parseLong(defaultString);
-      } else {
-        defaultFlag = m_class.getField(defaultString).getLong(null);
-      }
-      // prepare flag string values
-      int flagCount = 0;
-      String[] flagValues = new String[values.length - 2];
-      for (int i = 0; i < flagValues.length; i++) {
-        String flag = values[i + 2];
-        if (!StringUtils.isNumeric(flag) && getField(state, m_class, flag) == null) {
-          continue;
-        }
-        flagValues[flagCount++] = flag;
-      }
-      // flag values
-      long[] flags = new long[flagCount];
-      String[] sFlags = new String[flagCount];
-      for (int i = 0; i < flagCount; i++) {
-        String flag = flagValues[i];
-        if (StringUtils.isNumeric(flag)) {
-          flags[i] = Long.parseLong(flag);
-        } else {
-          flags[i] = m_class.getField(flag).getLong(null);
-        }
-        sFlags[i] = flag;
-      }
-      // add property
-      SubStylePropertyImpl property =
-          new SelectionStylePropertyImpl(this, title, flags, sFlags, defaultFlag);
-      properties.add(property);
-      m_otherProperties.add(property);
-    }
-  }
+	private void configureSelections(List<SubStylePropertyImpl> properties,
+			EditorState state,
+			Map<String, Object> parameters) throws Exception {
+		int selectIndex = 0;
+		while (true) {
+			// prepare "select" key
+			String key = "select" + Integer.toString(selectIndex++);
+			if (!parameters.containsKey(key)) {
+				break;
+			}
+			// prepare all part's
+			String[] values = StringUtils.split((String) parameters.get(key));
+			// title
+			String title = values[0];
+			// default value
+			String defaultString = values[1];
+			long defaultFlag;
+			if (StringUtils.isNumeric(defaultString)) {
+				defaultFlag = Long.parseLong(defaultString);
+			} else {
+				defaultFlag = m_class.getField(defaultString).getLong(null);
+			}
+			// prepare flag string values
+			int flagCount = 0;
+			String[] flagValues = new String[values.length - 2];
+			for (int i = 0; i < flagValues.length; i++) {
+				String flag = values[i + 2];
+				if (!StringUtils.isNumeric(flag) && getField(state, m_class, flag) == null) {
+					continue;
+				}
+				flagValues[flagCount++] = flag;
+			}
+			// flag values
+			long[] flags = new long[flagCount];
+			String[] sFlags = new String[flagCount];
+			for (int i = 0; i < flagCount; i++) {
+				String flag = flagValues[i];
+				if (StringUtils.isNumeric(flag)) {
+					flags[i] = Long.parseLong(flag);
+				} else {
+					flags[i] = m_class.getField(flag).getLong(null);
+				}
+				sFlags[i] = flag;
+			}
+			// add property
+			SubStylePropertyImpl property =
+					new SelectionStylePropertyImpl(this, title, flags, sFlags, defaultFlag);
+			properties.add(property);
+			m_otherProperties.add(property);
+		}
+	}
 
-  private void configureSelectionUsingEquals(List<SubStylePropertyImpl> properties,
-      EditorState state,
-      Map<String, Object> parameters) throws Exception {
-    int selectIndex = 0;
-    while (true) {
-      // prepare "select" key
-      String key = "selectUsingEqual" + Integer.toString(selectIndex++);
-      if (!parameters.containsKey(key)) {
-        break;
-      }
-      // prepare all part's
-      String[] values = StringUtils.split((String) parameters.get(key));
-      // title
-      String title = values[0];
-      //
-      // Default value is used in SelectionStylePropertyImpl, but is not used in SelectionUsingEqualsStylePropertyImpl
-      //
-      // default value
-      //String defaultString = values[1];
-      //long defaultFlag;
-      //if (StringUtils.isNumeric(defaultString)) {
-      //  defaultFlag = Long.parseLong(defaultString);
-      //} else {
-      //  defaultFlag = m_class.getField(defaultString).getLong(null);
-      //}
-      //
-      // prepare flag string values
-      int flagCount = 0;
-      String[] flagValues = new String[values.length - 1];
-      for (int i = 0; i < flagValues.length; i++) {
-        String flag = values[i + 1];
-        if (!StringUtils.isNumeric(flag) && getField(state, m_class, flag) == null) {
-          continue;
-        }
-        flagValues[flagCount++] = flag;
-      }
-      // flag values
-      long[] flags = new long[flagCount];
-      String[] sFlags = new String[flagCount];
-      for (int i = 0; i < flagCount; i++) {
-        String flag = flagValues[i];
-        if (StringUtils.isNumeric(flag)) {
-          flags[i] = Long.parseLong(flag);
-        } else {
-          flags[i] = m_class.getField(flag).getLong(null);
-        }
-        sFlags[i] = flag;
-      }
-      // add property
-      SubStylePropertyImpl property =
-          new SelectionUsingEqualsStylePropertyImpl(this, title, flags, sFlags, m_className);
-      properties.add(property);
-      m_otherProperties.add(property);
-    }
-  }
+	private void configureSelectionUsingEquals(List<SubStylePropertyImpl> properties,
+			EditorState state,
+			Map<String, Object> parameters) throws Exception {
+		int selectIndex = 0;
+		while (true) {
+			// prepare "select" key
+			String key = "selectUsingEqual" + Integer.toString(selectIndex++);
+			if (!parameters.containsKey(key)) {
+				break;
+			}
+			// prepare all part's
+			String[] values = StringUtils.split((String) parameters.get(key));
+			// title
+			String title = values[0];
+			//
+			// Default value is used in SelectionStylePropertyImpl, but is not used in SelectionUsingEqualsStylePropertyImpl
+			//
+			// default value
+			//String defaultString = values[1];
+			//long defaultFlag;
+			//if (StringUtils.isNumeric(defaultString)) {
+			//  defaultFlag = Long.parseLong(defaultString);
+			//} else {
+			//  defaultFlag = m_class.getField(defaultString).getLong(null);
+			//}
+			//
+			// prepare flag string values
+			int flagCount = 0;
+			String[] flagValues = new String[values.length - 1];
+			for (int i = 0; i < flagValues.length; i++) {
+				String flag = values[i + 1];
+				if (!StringUtils.isNumeric(flag) && getField(state, m_class, flag) == null) {
+					continue;
+				}
+				flagValues[flagCount++] = flag;
+			}
+			// flag values
+			long[] flags = new long[flagCount];
+			String[] sFlags = new String[flagCount];
+			for (int i = 0; i < flagCount; i++) {
+				String flag = flagValues[i];
+				if (StringUtils.isNumeric(flag)) {
+					flags[i] = Long.parseLong(flag);
+				} else {
+					flags[i] = m_class.getField(flag).getLong(null);
+				}
+				sFlags[i] = flag;
+			}
+			// add property
+			SubStylePropertyImpl property =
+					new SelectionUsingEqualsStylePropertyImpl(this, title, flags, sFlags, m_className);
+			properties.add(property);
+			m_otherProperties.add(property);
+		}
+	}
 
-  private void configureEnums(List<SubStylePropertyImpl> properties,
-      EditorState state,
-      Map<String, Object> parameters) throws Exception {
-    int selectIndex = 0;
-    while (true) {
-      // prepare "enum" key
-      String key = "enum" + Integer.toString(selectIndex++);
-      if (!parameters.containsKey(key)) {
-        break;
-      }
-      // prepare all part's
-      String[] values = StringUtils.split((String) parameters.get(key));
-      // title
-      String title = values[0];
-      // clear mask
-      String mask16 = values[1]; // 0x[value]
-      int clearMask = Integer.parseInt(mask16.substring(2), 16);
-      // prepare flag string values
-      int flagCount = 0;
-      String[] flagValues = new String[values.length - 2];
-      for (int i = 0; i < flagValues.length; i++) {
-        String flag = values[i + 2];
-        if (!StringUtils.isNumeric(flag) && getField(state, m_class, flag) == null) {
-          continue;
-        }
-        flagValues[flagCount++] = flag;
-      }
-      // flag values
-      long[] flags = new long[flagCount];
-      String[] sFlags = new String[flagCount];
-      for (int i = 0; i < flagCount; i++) {
-        String flag = flagValues[i];
-        if (StringUtils.isNumeric(flag)) {
-          flags[i] = Long.parseLong(flag);
-        } else {
-          flags[i] = m_class.getField(flag).getLong(null);
-        }
-        sFlags[i] = flag;
-      }
-      // add property
-      SubStylePropertyImpl property =
-          new EnumerationStylePropertyImpl(this, title, flags, sFlags, clearMask);
-      properties.add(property);
-      m_otherProperties.add(property);
-    }
-  }
+	private void configureEnums(List<SubStylePropertyImpl> properties,
+			EditorState state,
+			Map<String, Object> parameters) throws Exception {
+		int selectIndex = 0;
+		while (true) {
+			// prepare "enum" key
+			String key = "enum" + Integer.toString(selectIndex++);
+			if (!parameters.containsKey(key)) {
+				break;
+			}
+			// prepare all part's
+			String[] values = StringUtils.split((String) parameters.get(key));
+			// title
+			String title = values[0];
+			// clear mask
+			String mask16 = values[1]; // 0x[value]
+			int clearMask = Integer.parseInt(mask16.substring(2), 16);
+			// prepare flag string values
+			int flagCount = 0;
+			String[] flagValues = new String[values.length - 2];
+			for (int i = 0; i < flagValues.length; i++) {
+				String flag = values[i + 2];
+				if (!StringUtils.isNumeric(flag) && getField(state, m_class, flag) == null) {
+					continue;
+				}
+				flagValues[flagCount++] = flag;
+			}
+			// flag values
+			long[] flags = new long[flagCount];
+			String[] sFlags = new String[flagCount];
+			for (int i = 0; i < flagCount; i++) {
+				String flag = flagValues[i];
+				if (StringUtils.isNumeric(flag)) {
+					flags[i] = Long.parseLong(flag);
+				} else {
+					flags[i] = m_class.getField(flag).getLong(null);
+				}
+				sFlags[i] = flag;
+			}
+			// add property
+			SubStylePropertyImpl property =
+					new EnumerationStylePropertyImpl(this, title, flags, sFlags, clearMask);
+			properties.add(property);
+			m_otherProperties.add(property);
+		}
+	}
 
-  private static Field getField(EditorState state, Class<?> baseClass, String name) {
-    try {
-      return baseClass.getField(name);
-    } catch (NoSuchFieldException e) {
-      state.addWarning(new EditorWarning("StylePropertyEditor: can not find field "
-          + baseClass.getName()
-          + "."
-          + name, e));
-      return null;
-    }
-  }
+	private static Field getField(EditorState state, Class<?> baseClass, String name) {
+		try {
+			return baseClass.getField(name);
+		} catch (NoSuchFieldException e) {
+			state.addWarning(new EditorWarning("StylePropertyEditor: can not find field "
+					+ baseClass.getName()
+					+ "."
+					+ name, e));
+			return null;
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Source
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the source that represents updated value of style property.
-   */
-  private String getSource(Property property) throws Exception {
-    return getSource(property, true, " | ");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Source
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the source that represents updated value of style property.
+	 */
+	private String getSource(Property property) throws Exception {
+		return getSource(property, true, " | ");
+	}
 
-  private String getSource(Property mainProperty, boolean addClassAndDefault, String separator)
-      throws Exception {
-    StringBuffer source = new StringBuffer();
-    long macroFlag = 0;
-    // handle macro properties
-    for (SubStylePropertyImpl property : m_macroProperties) {
-      String sFlag = property.getFlagValue(mainProperty);
-      if (sFlag != null) {
-        // add class prefix
-        if (addClassAndDefault) {
-          source.append(m_className);
-          source.append('.');
-        }
-        // add flag
-        source.append(sFlag);
-        macroFlag = property.getFlag(sFlag);
-        break;
-      }
-    }
-    // handle other (set, select) properties
-    for (SubStylePropertyImpl property : m_otherProperties) {
-      String sFlag = property.getFlagValue(mainProperty);
-      if (sFlag != null) {
-        // skip current flag if it part of macro flag
-        if (macroFlag != 0 && (macroFlag & property.getFlag(sFlag)) != 0) {
-          continue;
-        }
-        // add separator if need
-        if (source.length() != 0) {
-          source.append(separator);
-        }
-        // add class prefix
-        if (addClassAndDefault) {
-          source.append(m_className);
-          source.append('.');
-        }
-        // add flag
-        source.append(sFlag);
-      }
-    }
-    // use null (default), if no other flags
-    if (addClassAndDefault && source.length() == 0) {
-      return null;
-    }
-    return source.toString();
-  }
+	private String getSource(Property mainProperty, boolean addClassAndDefault, String separator)
+			throws Exception {
+		StringBuffer source = new StringBuffer();
+		long macroFlag = 0;
+		// handle macro properties
+		for (SubStylePropertyImpl property : m_macroProperties) {
+			String sFlag = property.getFlagValue(mainProperty);
+			if (sFlag != null) {
+				// add class prefix
+				if (addClassAndDefault) {
+					source.append(m_className);
+					source.append('.');
+				}
+				// add flag
+				source.append(sFlag);
+				macroFlag = property.getFlag(sFlag);
+				break;
+			}
+		}
+		// handle other (set, select) properties
+		for (SubStylePropertyImpl property : m_otherProperties) {
+			String sFlag = property.getFlagValue(mainProperty);
+			if (sFlag != null) {
+				// skip current flag if it part of macro flag
+				if (macroFlag != 0 && (macroFlag & property.getFlag(sFlag)) != 0) {
+					continue;
+				}
+				// add separator if need
+				if (source.length() != 0) {
+					source.append(separator);
+				}
+				// add class prefix
+				if (addClassAndDefault) {
+					source.append(m_className);
+					source.append('.');
+				}
+				// add flag
+				source.append(sFlag);
+			}
+		}
+		// use null (default), if no other flags
+		if (addClassAndDefault && source.length() == 0) {
+			return null;
+		}
+		return source.toString();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IValueSourcePropertyEditor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getValueSource(Object value) throws Exception {
-    Property property = getPropertyForValue(value);
-    return getSource(property);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IValueSourcePropertyEditor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getValueSource(Object value) throws Exception {
+		Property property = getPropertyForValue(value);
+		return getSource(property);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets the new value of given {@link SubStyleProperty}.
-   */
-  @Override
-  protected void setStyleValue(Property property, long newValue) throws Exception {
-    GenericProperty genericProperty = (GenericProperty) property;
-    String source = getSource(getPropertyForValue(newValue));
-    genericProperty.setExpression(source, Property.UNKNOWN_VALUE);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets the new value of given {@link SubStyleProperty}.
+	 */
+	@Override
+	protected void setStyleValue(Property property, long newValue) throws Exception {
+		GenericProperty genericProperty = (GenericProperty) property;
+		String source = getSource(getPropertyForValue(newValue));
+		genericProperty.setExpression(source, Property.UNKNOWN_VALUE);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private int getPriority() {
-    return STYLE_TITLE.equals(m_title) ? 1 : 2;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private int getPriority() {
+		return STYLE_TITLE.equals(m_title) ? 1 : 2;
+	}
 
-  /**
-   * Analyzes given {@link Property}'s and moves ones with {@link StylePropertyEditor} from
-   * "Constructor" and "Factory" on top level, to simplify access for user.
-   */
-  public static void addStyleProperties(List<Property> properties) throws Exception {
-    // find style properties
-    for (ListIterator<Property> I = properties.listIterator(); I.hasNext();) {
-      Property property = I.next();
-      // check "constructor" property
-      if (property instanceof ComplexProperty
-          && ("Constructor".equals(property.getTitle()) || "Factory".equals(property.getTitle()))) {
-        ComplexProperty complexProperty = (ComplexProperty) property;
-        Property[] subProperties = complexProperty.getProperties();
-        // loop of all sub properties
-        for (Property subProperty : subProperties) {
-          PropertyEditor editor = subProperty.getEditor();
-          // check style property
-          if (editor instanceof StylePropertyEditor) {
-            GenericPropertyImpl constructorStyleProperty = (GenericPropertyImpl) subProperty;
-            StylePropertyEditor styleEditor = (StylePropertyEditor) editor;
-            String propertyTitle = styleEditor.getPropertyTitle();
-            // create "style" property
-            GenericPropertyImpl styleProperty =
-                new GenericPropertyImpl(constructorStyleProperty, propertyTitle);
-            styleProperty.setCategory(PropertyCategory.system(
-                complexProperty.getCategory(),
-                styleEditor.getPriority()));
-            I.add(styleProperty);
-          }
-        }
-      }
-    }
-  }
+	/**
+	 * Analyzes given {@link Property}'s and moves ones with {@link StylePropertyEditor} from
+	 * "Constructor" and "Factory" on top level, to simplify access for user.
+	 */
+	public static void addStyleProperties(List<Property> properties) throws Exception {
+		// find style properties
+		for (ListIterator<Property> I = properties.listIterator(); I.hasNext();) {
+			Property property = I.next();
+			// check "constructor" property
+			if (property instanceof ComplexProperty
+					&& ("Constructor".equals(property.getTitle()) || "Factory".equals(property.getTitle()))) {
+				ComplexProperty complexProperty = (ComplexProperty) property;
+				Property[] subProperties = complexProperty.getProperties();
+				// loop of all sub properties
+				for (Property subProperty : subProperties) {
+					PropertyEditor editor = subProperty.getEditor();
+					// check style property
+					if (editor instanceof StylePropertyEditor) {
+						GenericPropertyImpl constructorStyleProperty = (GenericPropertyImpl) subProperty;
+						StylePropertyEditor styleEditor = (StylePropertyEditor) editor;
+						String propertyTitle = styleEditor.getPropertyTitle();
+						// create "style" property
+						GenericPropertyImpl styleProperty =
+								new GenericPropertyImpl(constructorStyleProperty, propertyTitle);
+						styleProperty.setCategory(PropertyCategory.system(
+								complexProperty.getCategory(),
+								styleEditor.getPriority()));
+						I.add(styleProperty);
+					}
+				}
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Popup Menu
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static void configureContributeActions(final JavaInfo hostInfo) {
-    hostInfo.addBroadcastListener(new ObjectEventListener() {
-      @Override
-      public void addContextMenu(List<? extends ObjectInfo> objects,
-          ObjectInfo object,
-          IMenuManager manager) throws Exception {
-        if (object == hostInfo) {
-          Property property = hostInfo.getPropertyByTitle(STYLE_TITLE);
-          if (property != null && property.getEditor() instanceof StylePropertyEditor) {
-            IPreferenceStore preferences = hostInfo.getDescription().getToolkit().getPreferences();
-            boolean isCascade =
-                preferences.getBoolean(IPreferenceConstants.P_STYLE_PROPERTY_CASCADE_POPUP);
-            //
-            StylePropertyEditor editor = (StylePropertyEditor) property.getEditor();
-            editor.contributeActions(property, manager, "Style", isCascade);
-          }
-        }
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Popup Menu
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static void configureContributeActions(final JavaInfo hostInfo) {
+		hostInfo.addBroadcastListener(new ObjectEventListener() {
+			@Override
+			public void addContextMenu(List<? extends ObjectInfo> objects,
+					ObjectInfo object,
+					IMenuManager manager) throws Exception {
+				if (object == hostInfo) {
+					Property property = hostInfo.getPropertyByTitle(STYLE_TITLE);
+					if (property != null && property.getEditor() instanceof StylePropertyEditor) {
+						IPreferenceStore preferences = hostInfo.getDescription().getToolkit().getPreferences();
+						boolean isCascade =
+								preferences.getBoolean(IPreferenceConstants.P_STYLE_PROPERTY_CASCADE_POPUP);
+						//
+						StylePropertyEditor editor = (StylePropertyEditor) property.getEditor();
+						editor.contributeActions(property, manager, "Style", isCascade);
+					}
+				}
+			}
+		});
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/style/SubStyleProperty.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/style/SubStyleProperty.java
index de3d66be8..910403c4d 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/style/SubStyleProperty.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/style/SubStyleProperty.java
@@ -19,56 +19,56 @@
  * @coverage core.model.property.editor
  */
 public final class SubStyleProperty extends Property {
-  private final Property m_mainProperty;
-  private final SubStylePropertyImpl m_propertyImpl;
-  private String m_overrideTitle = null;
+	private final Property m_mainProperty;
+	private final SubStylePropertyImpl m_propertyImpl;
+	private String m_overrideTitle = null;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SubStyleProperty(Property mainProperty, SubStylePropertyImpl propertyImpl) {
-    super(propertyImpl.createEditor());
-    m_mainProperty = mainProperty;
-    m_propertyImpl = propertyImpl;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SubStyleProperty(Property mainProperty, SubStylePropertyImpl propertyImpl) {
+		super(propertyImpl.createEditor());
+		m_mainProperty = mainProperty;
+		m_propertyImpl = propertyImpl;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getTitle() {
-    if (m_overrideTitle == null) {
-      return m_propertyImpl.getTitle();
-    } else {
-      return m_overrideTitle;
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getTitle() {
+		if (m_overrideTitle == null) {
+			return m_propertyImpl.getTitle();
+		} else {
+			return m_overrideTitle;
+		}
+	}
 
-  public void setOverrideTitle(String title) {
-    m_overrideTitle = title;
-  }
+	public void setOverrideTitle(String title) {
+		m_overrideTitle = title;
+	}
 
-  @Override
-  public boolean isModified() throws Exception {
-    return true;
-  }
+	@Override
+	public boolean isModified() throws Exception {
+		return true;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Value
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Object getValue() throws Exception {
-    return m_propertyImpl.getValue(m_mainProperty);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Value
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Object getValue() throws Exception {
+		return m_propertyImpl.getValue(m_mainProperty);
+	}
 
-  @Override
-  public void setValue(Object value) throws Exception {
-    m_propertyImpl.setValue(m_mainProperty, value);
-  }
+	@Override
+	public void setValue(Object value) throws Exception {
+		m_propertyImpl.setValue(m_mainProperty, value);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/style/SubStylePropertyImpl.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/style/SubStylePropertyImpl.java
index d77fa424b..d683bb1ec 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/style/SubStylePropertyImpl.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/style/SubStylePropertyImpl.java
@@ -22,103 +22,103 @@
  * @coverage core.model.property.editor
  */
 public abstract class SubStylePropertyImpl {
-  private final AbstractStylePropertyEditor m_editor;
-  private final String m_title;
+	private final AbstractStylePropertyEditor m_editor;
+	private final String m_title;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SubStylePropertyImpl(AbstractStylePropertyEditor editor, String title) {
-    m_editor = editor;
-    m_title = title;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SubStylePropertyImpl(AbstractStylePropertyEditor editor, String title) {
+		m_editor = editor;
+		m_title = title;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * The title for sub-property.
-   */
-  public final String getTitle() {
-    return m_title;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * The title for sub-property.
+	 */
+	public final String getTitle() {
+		return m_title;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // As string
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Appends style presentation of this style editor part, for tests.
-   */
-  public void getAsString(StringBuilder builder) {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// As string
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Appends style presentation of this style editor part, for tests.
+	 */
+	public void getAsString(StringBuilder builder) {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // PropertyEditor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return {@link PropertyEditor} for sub-property.
-   */
-  public abstract PropertyEditor createEditor();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// PropertyEditor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return {@link PropertyEditor} for sub-property.
+	 */
+	public abstract PropertyEditor createEditor();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Style
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the current style value.
-   */
-  protected final long getStyleValue(Property property) throws Exception {
-    return m_editor.getStyleValue(property);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Style
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the current style value.
+	 */
+	protected final long getStyleValue(Property property) throws Exception {
+		return m_editor.getStyleValue(property);
+	}
 
-  /**
-   * Sets the new value of given {@link SubStylePropertyImpl}.
-   */
-  protected final void setStyleValue(Property property, long newValue) throws Exception {
-    m_editor.setStyleValue(property, newValue);
-  }
+	/**
+	 * Sets the new value of given {@link SubStylePropertyImpl}.
+	 */
+	protected final void setStyleValue(Property property, long newValue) throws Exception {
+		m_editor.setStyleValue(property, newValue);
+	}
 
-  /**
-   * @return int value of given flag.
-   */
-  public abstract long getFlag(String sFlag);
+	/**
+	 * @return int value of given flag.
+	 */
+	public abstract long getFlag(String sFlag);
 
-  /**
-   * @return the string/source presentation of this flag.
-   */
-  public abstract String getFlagValue(Property property) throws Exception;
+	/**
+	 * @return the string/source presentation of this flag.
+	 */
+	public abstract String getFlagValue(Property property) throws Exception;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Value
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the current value of this sub-property.
-   */
-  public abstract Object getValue(Property property) throws Exception;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Value
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the current value of this sub-property.
+	 */
+	public abstract Object getValue(Property property) throws Exception;
 
-  /**
-   * Sets the new value of this sub-property.
-   */
-  public abstract void setValue(Property property, Object value) throws Exception;
+	/**
+	 * Sets the new value of this sub-property.
+	 */
+	public abstract void setValue(Property property, Object value) throws Exception;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Popup menu
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Contributes actions into {@link Property} context menu.
-   */
-  public abstract void contributeActions(Property property, IMenuManager manager) throws Exception;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Popup menu
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Contributes actions into {@link Property} context menu.
+	 */
+	public abstract void contributeActions(Property property, IMenuManager manager) throws Exception;
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/style/actions/BooleanStyleAction.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/style/actions/BooleanStyleAction.java
index d13df50c3..36143064b 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/style/actions/BooleanStyleAction.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/style/actions/BooleanStyleAction.java
@@ -22,22 +22,22 @@
  * @coverage core.model.property.editor
  */
 public final class BooleanStyleAction extends SubStyleAction {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public BooleanStyleAction(Property property, SubStylePropertyImpl propertyImpl) {
-    super(property, propertyImpl, propertyImpl.getTitle(), IAction.AS_CHECK_BOX);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public BooleanStyleAction(Property property, SubStylePropertyImpl propertyImpl) {
+		super(property, propertyImpl, propertyImpl.getTitle(), IAction.AS_CHECK_BOX);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // SubStyleAction
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Object getActionValue() {
-    return isChecked();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// SubStyleAction
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Object getActionValue() {
+		return isChecked();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/style/actions/RadioStyleAction.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/style/actions/RadioStyleAction.java
index cdfd48efa..e08d4b827 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/style/actions/RadioStyleAction.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/style/actions/RadioStyleAction.java
@@ -22,22 +22,22 @@
  * @coverage core.model.property.editor
  */
 public final class RadioStyleAction extends SubStyleAction {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public RadioStyleAction(Property property, SubStylePropertyImpl propertyImpl, String title) {
-    super(property, propertyImpl, title, IAction.AS_RADIO_BUTTON);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public RadioStyleAction(Property property, SubStylePropertyImpl propertyImpl, String title) {
+		super(property, propertyImpl, title, IAction.AS_RADIO_BUTTON);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // SubStyleAction
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Object getActionValue() {
-    return getText();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// SubStyleAction
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Object getActionValue() {
+		return getText();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/style/actions/SubStyleAction.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/style/actions/SubStyleAction.java
index 838322e29..e13028b48 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/style/actions/SubStyleAction.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/style/actions/SubStyleAction.java
@@ -22,44 +22,44 @@
  * @coverage core.model.property.editor
  */
 public abstract class SubStyleAction extends ObjectInfoAction {
-  private final Property m_property;
-  private final SubStylePropertyImpl m_propertyImpl;
+	private final Property m_property;
+	private final SubStylePropertyImpl m_propertyImpl;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SubStyleAction(Property property,
-      SubStylePropertyImpl propertyImpl,
-      String title,
-      int style) {
-    super(getHostInfo(property), title, style);
-    m_property = property;
-    m_propertyImpl = propertyImpl;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SubStyleAction(Property property,
+			SubStylePropertyImpl propertyImpl,
+			String title,
+			int style) {
+		super(getHostInfo(property), title, style);
+		m_property = property;
+		m_propertyImpl = propertyImpl;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ObjectInfoAction
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void runEx() throws Exception {
-    m_propertyImpl.setValue(m_property, getActionValue());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ObjectInfoAction
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void runEx() throws Exception {
+		m_propertyImpl.setValue(m_property, getActionValue());
+	}
 
-  /**
-   * @return the new "action" value.
-   */
-  protected abstract Object getActionValue();
+	/**
+	 * @return the new "action" value.
+	 */
+	protected abstract Object getActionValue();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static ObjectInfo getHostInfo(Property property) {
-    return property.getAdapter(ObjectInfo.class);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static ObjectInfo getHostInfo(Property property) {
+		return property.getAdapter(ObjectInfo.class);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/style/impl/BooleanStylePropertyImpl.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/style/impl/BooleanStylePropertyImpl.java
index 4c717f5e1..f63e21e2d 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/style/impl/BooleanStylePropertyImpl.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/style/impl/BooleanStylePropertyImpl.java
@@ -27,98 +27,98 @@
  * @coverage core.model.property.editor
  */
 public final class BooleanStylePropertyImpl extends SubStylePropertyImpl {
-  private final String m_sFlag;
-  private final long m_flag;
+	private final String m_sFlag;
+	private final long m_flag;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public BooleanStylePropertyImpl(AbstractStylePropertyEditor editor,
-      String title,
-      String sFlag,
-      long flag) {
-    super(editor, title);
-    m_sFlag = sFlag;
-    m_flag = flag;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public BooleanStylePropertyImpl(AbstractStylePropertyEditor editor,
+			String title,
+			String sFlag,
+			long flag) {
+		super(editor, title);
+		m_sFlag = sFlag;
+		m_flag = flag;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // As string
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void getAsString(StringBuilder builder) {
-    builder.append(getTitle());
-    builder.append(" boolean: ");
-    builder.append(m_sFlag);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// As string
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void getAsString(StringBuilder builder) {
+		builder.append(getTitle());
+		builder.append(" boolean: ");
+		builder.append(m_sFlag);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // PropertyEditor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public PropertyEditor createEditor() {
-    return BooleanPropertyEditor.INSTANCE;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// PropertyEditor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public PropertyEditor createEditor() {
+		return BooleanPropertyEditor.INSTANCE;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Style
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public long getFlag(String sFlag) {
-    return m_flag;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Style
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public long getFlag(String sFlag) {
+		return m_flag;
+	}
 
-  @Override
-  public String getFlagValue(Property property) throws Exception {
-    return isSet(property) ? m_sFlag : null;
-  }
+	@Override
+	public String getFlagValue(Property property) throws Exception {
+		return isSet(property) ? m_sFlag : null;
+	}
 
-  private boolean isSet(Property property) throws Exception {
-    return (getStyleValue(property) & m_flag) != 0;
-  }
+	private boolean isSet(Property property) throws Exception {
+		return (getStyleValue(property) & m_flag) != 0;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Value
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Object getValue(Property property) throws Exception {
-    return isSet(property) ? Boolean.TRUE : Boolean.FALSE;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Value
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Object getValue(Property property) throws Exception {
+		return isSet(property) ? Boolean.TRUE : Boolean.FALSE;
+	}
 
-  @Override
-  public void setValue(Property property, Object value) throws Exception {
-    boolean setValue = value != Property.UNKNOWN_VALUE && (Boolean) value;
-    long style = getStyleValue(property);
-    if (setValue) {
-      style |= m_flag;
-    } else {
-      style ^= m_flag;
-    }
-    setStyleValue(property, style);
-  }
+	@Override
+	public void setValue(Property property, Object value) throws Exception {
+		boolean setValue = value != Property.UNKNOWN_VALUE && (Boolean) value;
+		long style = getStyleValue(property);
+		if (setValue) {
+			style |= m_flag;
+		} else {
+			style ^= m_flag;
+		}
+		setStyleValue(property, style);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Popup menu
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void contributeActions(Property property, IMenuManager manager) throws Exception {
-    // create
-    IAction action = new BooleanStyleAction(property, this);
-    // configure
-    action.setChecked(isSet(property));
-    // add to menu
-    manager.add(action);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Popup menu
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void contributeActions(Property property, IMenuManager manager) throws Exception {
+		// create
+		IAction action = new BooleanStyleAction(property, this);
+		// configure
+		action.setChecked(isSet(property));
+		// add to menu
+		manager.add(action);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/style/impl/BooleanUsingEqualsStylePropertyImpl.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/style/impl/BooleanUsingEqualsStylePropertyImpl.java
index e3a2cf739..1b1bd7349 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/style/impl/BooleanUsingEqualsStylePropertyImpl.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/style/impl/BooleanUsingEqualsStylePropertyImpl.java
@@ -31,171 +31,171 @@
  * @coverage core.model.property.editor
  */
 public final class BooleanUsingEqualsStylePropertyImpl extends SubStylePropertyImpl {
-  private final String m_sFlag;
-  private final long m_flag;
-  private final String m_className;
+	private final String m_sFlag;
+	private final long m_flag;
+	private final String m_className;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public BooleanUsingEqualsStylePropertyImpl(StylePropertyEditor editor,
-      String title,
-      String sFlag,
-      long flag,
-      String className) {
-    super(editor, title);
-    m_sFlag = sFlag;
-    m_flag = flag;
-    m_className = className;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public BooleanUsingEqualsStylePropertyImpl(StylePropertyEditor editor,
+			String title,
+			String sFlag,
+			long flag,
+			String className) {
+		super(editor, title);
+		m_sFlag = sFlag;
+		m_flag = flag;
+		m_className = className;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // As string
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void getAsString(StringBuilder builder) {
-    builder.append(getTitle());
-    builder.append(" boolean: ");
-    builder.append(m_sFlag);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// As string
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void getAsString(StringBuilder builder) {
+		builder.append(getTitle());
+		builder.append(" boolean: ");
+		builder.append(m_sFlag);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // PropertyEditor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public PropertyEditor createEditor() {
-    return BooleanPropertyEditor.INSTANCE;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// PropertyEditor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public PropertyEditor createEditor() {
+		return BooleanPropertyEditor.INSTANCE;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Style
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public long getFlag(String sFlag) {
-    return m_flag;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Style
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public long getFlag(String sFlag) {
+		return m_flag;
+	}
 
-  @Override
-  public String getFlagValue(Property property) throws Exception {
-    if (property instanceof GenericProperty) {
-      String expressionString = getCurrentSource((GenericProperty) property);
-      if (expressionString.indexOf('.' + m_sFlag) != -1) {
-        return m_sFlag;
-      }
-    }
-    return null;
-  }
+	@Override
+	public String getFlagValue(Property property) throws Exception {
+		if (property instanceof GenericProperty) {
+			String expressionString = getCurrentSource((GenericProperty) property);
+			if (expressionString.indexOf('.' + m_sFlag) != -1) {
+				return m_sFlag;
+			}
+		}
+		return null;
+	}
 
-  private boolean isSet(Property property) throws Exception {
-    return getFlagValue(property) != null;
-  }
+	private boolean isSet(Property property) throws Exception {
+		return getFlagValue(property) != null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Value
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Object getValue(Property property) throws Exception {
-    return isSet(property) ? Boolean.TRUE : Boolean.FALSE;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Value
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Object getValue(Property property) throws Exception {
+		return isSet(property) ? Boolean.TRUE : Boolean.FALSE;
+	}
 
-  @Override
-  public void setValue(Property property, Object value) throws Exception {
-    GenericProperty genericProperty = (GenericProperty) property;
-    String source = getSource(genericProperty, value != Property.UNKNOWN_VALUE && (Boolean) value);
-    genericProperty.setExpression(source, Property.UNKNOWN_VALUE);
-  }
+	@Override
+	public void setValue(Property property, Object value) throws Exception {
+		GenericProperty genericProperty = (GenericProperty) property;
+		String source = getSource(genericProperty, value != Property.UNKNOWN_VALUE && (Boolean) value);
+		genericProperty.setExpression(source, Property.UNKNOWN_VALUE);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Popup menu
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void contributeActions(Property property, IMenuManager manager) throws Exception {
-    // create
-    IAction action = new BooleanStyleAction(property, this);
-    // configure
-    action.setChecked(isSet(property));
-    // add to menu
-    manager.add(action);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Popup menu
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void contributeActions(Property property, IMenuManager manager) throws Exception {
+		// create
+		IAction action = new BooleanStyleAction(property, this);
+		// configure
+		action.setChecked(isSet(property));
+		// add to menu
+		manager.add(action);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private String getCurrentSource(final GenericProperty genericProperty) throws Exception {
-    return genericProperty.getExpression().toString();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private String getCurrentSource(final GenericProperty genericProperty) throws Exception {
+		return genericProperty.getExpression().toString();
+	}
 
-  private String getSource(final GenericProperty genericProperty, final boolean boolValue)
-      throws Exception {
-    // addClassAndDefault must be true, case and point: ButtonField.NON_FOCUSABLE
-    return getSource(genericProperty, boolValue, true, " | ");
-  }
+	private String getSource(final GenericProperty genericProperty, final boolean boolValue)
+			throws Exception {
+		// addClassAndDefault must be true, case and point: ButtonField.NON_FOCUSABLE
+		return getSource(genericProperty, boolValue, true, " | ");
+	}
 
-  private String getSource(final GenericProperty genericProperty,
-      final boolean boolValue,
-      final boolean addClassAndDefault,
-      final String separator) throws Exception {
-    String currentSource = getCurrentSource(genericProperty);
-    currentSource = currentSource.trim();
-    // "ELLIPSIS" == m_sFlag
-    final boolean isFlagInSource = currentSource.indexOf('.' + m_sFlag) != -1;
-    // 4 cases
-    if (boolValue && !isFlagInSource) {
-      // if: the user checked the style & it is not in the current source
-      // then: append it to the current source and
-      if (addClassAndDefault) {
-        return currentSource + separator + m_className + '.' + m_sFlag;
-      } else {
-        return currentSource + separator + m_sFlag;
-      }
-    } else if (boolValue && isFlagInSource) {
-      // else if: the user checked the style & it is in the current source
-      // then: do nothing
-      return currentSource;
-    } else if (!boolValue && !isFlagInSource) {
-      // else if: the user un-checked the style & it is not in the current source
-      // then: do nothing
-      return currentSource;
-    } else if (!boolValue && isFlagInSource) {
-      // else if: the user un-checked the style & it is in the current source
-      // then: remove the style flag from the source
-      int beginIndex = currentSource.indexOf('.' + m_sFlag);
-      int endIndex = currentSource.indexOf('.' + m_sFlag) + m_sFlag.length() + 1;
-      // adjust beginIndex to include the "*Field." part of the style bit
-      for (; beginIndex > 0; beginIndex--) {
-        final char ch = currentSource.charAt(beginIndex);
-        if (!Character.isLetter(ch) && ch != '.') {
-          break;
-        }
-      }
-      final int firstSeparatorOccurrence = currentSource.indexOf('|');
-      if (firstSeparatorOccurrence == -1) {
-        // don't remove the flag since changing the source to "" would throw a bug
-        return currentSource;
-      } else if (firstSeparatorOccurrence <= beginIndex) {
-        // the '|' is before the style we are removing, update the beginIndex
-        beginIndex = firstSeparatorOccurrence;
-      } else if (firstSeparatorOccurrence >= endIndex) {
-        // the '|' is after the style we are removing, update the endIndex
-        endIndex = firstSeparatorOccurrence + 1;
-      }
-      return (currentSource.substring(0, beginIndex) + currentSource.substring(endIndex)).trim();
-    } else {
-      throw new IllegalStateException();
-    }
-  }
+	private String getSource(final GenericProperty genericProperty,
+			final boolean boolValue,
+			final boolean addClassAndDefault,
+			final String separator) throws Exception {
+		String currentSource = getCurrentSource(genericProperty);
+		currentSource = currentSource.trim();
+		// "ELLIPSIS" == m_sFlag
+		final boolean isFlagInSource = currentSource.indexOf('.' + m_sFlag) != -1;
+		// 4 cases
+		if (boolValue && !isFlagInSource) {
+			// if: the user checked the style & it is not in the current source
+			// then: append it to the current source and
+			if (addClassAndDefault) {
+				return currentSource + separator + m_className + '.' + m_sFlag;
+			} else {
+				return currentSource + separator + m_sFlag;
+			}
+		} else if (boolValue && isFlagInSource) {
+			// else if: the user checked the style & it is in the current source
+			// then: do nothing
+			return currentSource;
+		} else if (!boolValue && !isFlagInSource) {
+			// else if: the user un-checked the style & it is not in the current source
+			// then: do nothing
+			return currentSource;
+		} else if (!boolValue && isFlagInSource) {
+			// else if: the user un-checked the style & it is in the current source
+			// then: remove the style flag from the source
+			int beginIndex = currentSource.indexOf('.' + m_sFlag);
+			int endIndex = currentSource.indexOf('.' + m_sFlag) + m_sFlag.length() + 1;
+			// adjust beginIndex to include the "*Field." part of the style bit
+			for (; beginIndex > 0; beginIndex--) {
+				final char ch = currentSource.charAt(beginIndex);
+				if (!Character.isLetter(ch) && ch != '.') {
+					break;
+				}
+			}
+			final int firstSeparatorOccurrence = currentSource.indexOf('|');
+			if (firstSeparatorOccurrence == -1) {
+				// don't remove the flag since changing the source to "" would throw a bug
+				return currentSource;
+			} else if (firstSeparatorOccurrence <= beginIndex) {
+				// the '|' is before the style we are removing, update the beginIndex
+				beginIndex = firstSeparatorOccurrence;
+			} else if (firstSeparatorOccurrence >= endIndex) {
+				// the '|' is after the style we are removing, update the endIndex
+				endIndex = firstSeparatorOccurrence + 1;
+			}
+			return (currentSource.substring(0, beginIndex) + currentSource.substring(endIndex)).trim();
+		} else {
+			throw new IllegalStateException();
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/style/impl/EnumerationStylePropertyImpl.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/style/impl/EnumerationStylePropertyImpl.java
index 7cdd8bdb1..a9f0382d5 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/style/impl/EnumerationStylePropertyImpl.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/style/impl/EnumerationStylePropertyImpl.java
@@ -29,96 +29,96 @@
  * @coverage core.model.property.editor
  */
 public final class EnumerationStylePropertyImpl extends SubStylePropertyImpl {
-  private final long[] m_values;
-  private final String[] m_sValues;
-  private final long m_flagsClearMask;
-  private final long m_enumClearMask;
+	private final long[] m_values;
+	private final String[] m_sValues;
+	private final long m_flagsClearMask;
+	private final long m_enumClearMask;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public EnumerationStylePropertyImpl(AbstractStylePropertyEditor editor,
-      String title,
-      long[] values,
-      String[] sValues,
-      int clearMask) {
-    super(editor, title);
-    m_values = values;
-    m_sValues = sValues;
-    m_flagsClearMask = clearMask;
-    m_enumClearMask = ~clearMask;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public EnumerationStylePropertyImpl(AbstractStylePropertyEditor editor,
+			String title,
+			long[] values,
+			String[] sValues,
+			int clearMask) {
+		super(editor, title);
+		m_values = values;
+		m_sValues = sValues;
+		m_flagsClearMask = clearMask;
+		m_enumClearMask = ~clearMask;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // PropertyEditor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public PropertyEditor createEditor() {
-    return new StringComboPropertyEditor(m_sValues);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// PropertyEditor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public PropertyEditor createEditor() {
+		return new StringComboPropertyEditor(m_sValues);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Style
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public long getFlag(String sFlag) {
-    int index = ArrayUtils.indexOf(m_sValues, sFlag);
-    return index != ArrayUtils.INDEX_NOT_FOUND ? m_values[index] : 0;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Style
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public long getFlag(String sFlag) {
+		int index = ArrayUtils.indexOf(m_sValues, sFlag);
+		return index != ArrayUtils.INDEX_NOT_FOUND ? m_values[index] : 0;
+	}
 
-  @Override
-  public String getFlagValue(Property property) throws Exception {
-    long value = getStyleValue(property) & m_flagsClearMask;
-    int index = ArrayUtils.indexOf(m_values, value);
-    return index != ArrayUtils.INDEX_NOT_FOUND ? m_sValues[index] : null;
-  }
+	@Override
+	public String getFlagValue(Property property) throws Exception {
+		long value = getStyleValue(property) & m_flagsClearMask;
+		int index = ArrayUtils.indexOf(m_values, value);
+		return index != ArrayUtils.INDEX_NOT_FOUND ? m_sValues[index] : null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Value
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Object getValue(Property property) throws Exception {
-    return getFlagValue(property);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Value
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Object getValue(Property property) throws Exception {
+		return getFlagValue(property);
+	}
 
-  @Override
-  public void setValue(Property property, Object value) throws Exception {
-    long style = getStyleValue(property) & m_enumClearMask;
-    if (value != Property.UNKNOWN_VALUE) {
-      String sValue = (String) value;
-      style |= m_values[ArrayUtils.indexOf(m_sValues, sValue)];
-    }
-    setStyleValue(property, style);
-  }
+	@Override
+	public void setValue(Property property, Object value) throws Exception {
+		long style = getStyleValue(property) & m_enumClearMask;
+		if (value != Property.UNKNOWN_VALUE) {
+			String sValue = (String) value;
+			style |= m_values[ArrayUtils.indexOf(m_sValues, sValue)];
+		}
+		setStyleValue(property, style);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Popup menu
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void contributeActions(Property property, IMenuManager manager) throws Exception {
-    // separate sub-properties
-    manager.add(new org.eclipse.jface.action.Separator());
-    // add actions
-    long style = getStyleValue(property) & m_flagsClearMask;
-    for (int i = 0; i < m_values.length; i++) {
-      // create
-      IAction action = new RadioStyleAction(property, this, m_sValues[i]);
-      // configure
-      if (m_values[i] == style) {
-        action.setChecked(true);
-      }
-      // add to menu
-      manager.add(action);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Popup menu
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void contributeActions(Property property, IMenuManager manager) throws Exception {
+		// separate sub-properties
+		manager.add(new org.eclipse.jface.action.Separator());
+		// add actions
+		long style = getStyleValue(property) & m_flagsClearMask;
+		for (int i = 0; i < m_values.length; i++) {
+			// create
+			IAction action = new RadioStyleAction(property, this, m_sValues[i]);
+			// configure
+			if (m_values[i] == style) {
+				action.setChecked(true);
+			}
+			// add to menu
+			manager.add(action);
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/style/impl/MacroStylePropertyImpl.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/style/impl/MacroStylePropertyImpl.java
index d3dd70bd0..bebd45c71 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/style/impl/MacroStylePropertyImpl.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/style/impl/MacroStylePropertyImpl.java
@@ -31,98 +31,98 @@
  * @coverage core.model.property.editor
  */
 public final class MacroStylePropertyImpl extends SubStylePropertyImpl {
-  private final long[] m_flags;
-  private final String[] m_sFlags;
+	private final long[] m_flags;
+	private final String[] m_sFlags;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public MacroStylePropertyImpl(AbstractStylePropertyEditor editor,
-      String title,
-      long[] flags,
-      String[] sFlags) {
-    super(editor, title);
-    m_flags = flags;
-    m_sFlags = sFlags;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public MacroStylePropertyImpl(AbstractStylePropertyEditor editor,
+			String title,
+			long[] flags,
+			String[] sFlags) {
+		super(editor, title);
+		m_flags = flags;
+		m_sFlags = sFlags;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // PropertyEditor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public PropertyEditor createEditor() {
-    return new StringComboPropertyEditor(m_sFlags);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// PropertyEditor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public PropertyEditor createEditor() {
+		return new StringComboPropertyEditor(m_sFlags);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Style
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public long getFlag(String sFlag) {
-    return m_flags[ArrayUtils.indexOf(m_sFlags, sFlag)];
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Style
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public long getFlag(String sFlag) {
+		return m_flags[ArrayUtils.indexOf(m_sFlags, sFlag)];
+	}
 
-  @Override
-  public String getFlagValue(Property property) throws Exception {
-    long style = getStyleValue(property);
-    for (int i = 0; i < m_flags.length; i++) {
-      long flag = m_flags[i];
-      if ((style & flag) == flag) {
-        return m_sFlags[i];
-      }
-    }
-    return null;
-  }
+	@Override
+	public String getFlagValue(Property property) throws Exception {
+		long style = getStyleValue(property);
+		for (int i = 0; i < m_flags.length; i++) {
+			long flag = m_flags[i];
+			if ((style & flag) == flag) {
+				return m_sFlags[i];
+			}
+		}
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Value
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Object getValue(Property property) throws Exception {
-    return StringUtils.defaultString(getFlagValue(property));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Value
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Object getValue(Property property) throws Exception {
+		return StringUtils.defaultString(getFlagValue(property));
+	}
 
-  @Override
-  public void setValue(Property property, Object value) throws Exception {
-    long style = 0;
-    if (value != Property.UNKNOWN_VALUE) {
-      String sFlag = (String) value;
-      if (!StringUtils.isEmpty(sFlag)) {
-        style = getFlag(sFlag);
-      }
-    }
-    setStyleValue(property, style);
-  }
+	@Override
+	public void setValue(Property property, Object value) throws Exception {
+		long style = 0;
+		if (value != Property.UNKNOWN_VALUE) {
+			String sFlag = (String) value;
+			if (!StringUtils.isEmpty(sFlag)) {
+				style = getFlag(sFlag);
+			}
+		}
+		setStyleValue(property, style);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Popup menu
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void contributeActions(Property property, IMenuManager manager) throws Exception {
-    // separate sub-properties
-    manager.add(new Separator());
-    // add actions
-    long style = getStyleValue(property);
-    for (int i = 0; i < m_flags.length; i++) {
-      // create
-      IAction action = new RadioStyleAction(property, this, m_sFlags[i]);
-      // configure
-      long flag = m_flags[i];
-      if ((style & flag) == flag) {
-        action.setChecked(true);
-      }
-      // add to menu
-      manager.add(action);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Popup menu
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void contributeActions(Property property, IMenuManager manager) throws Exception {
+		// separate sub-properties
+		manager.add(new Separator());
+		// add actions
+		long style = getStyleValue(property);
+		for (int i = 0; i < m_flags.length; i++) {
+			// create
+			IAction action = new RadioStyleAction(property, this, m_sFlags[i]);
+			// configure
+			long flag = m_flags[i];
+			if ((style & flag) == flag) {
+				action.setChecked(true);
+			}
+			// add to menu
+			manager.add(action);
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/style/impl/MacroUsingEqualsStylePropertyImpl.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/style/impl/MacroUsingEqualsStylePropertyImpl.java
index 8e016c55b..960021ac8 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/style/impl/MacroUsingEqualsStylePropertyImpl.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/style/impl/MacroUsingEqualsStylePropertyImpl.java
@@ -32,103 +32,103 @@
  * @coverage core.model.property.editor
  */
 public final class MacroUsingEqualsStylePropertyImpl extends SubStylePropertyImpl {
-  private final long[] m_flags;
-  private final String[] m_sFlags;
-  private final long m_flagsClearMask;
-  private final long m_setClearMask;
+	private final long[] m_flags;
+	private final String[] m_sFlags;
+	private final long m_flagsClearMask;
+	private final long m_setClearMask;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public MacroUsingEqualsStylePropertyImpl(AbstractStylePropertyEditor editor,
-      String title,
-      long[] flags,
-      String[] sFlags,
-      long clearMask) {
-    super(editor, title);
-    m_flags = flags;
-    m_sFlags = sFlags;
-    m_flagsClearMask = clearMask;
-    m_setClearMask = ~clearMask;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public MacroUsingEqualsStylePropertyImpl(AbstractStylePropertyEditor editor,
+			String title,
+			long[] flags,
+			String[] sFlags,
+			long clearMask) {
+		super(editor, title);
+		m_flags = flags;
+		m_sFlags = sFlags;
+		m_flagsClearMask = clearMask;
+		m_setClearMask = ~clearMask;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // PropertyEditor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public PropertyEditor createEditor() {
-    return new StringComboPropertyEditor(m_sFlags);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// PropertyEditor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public PropertyEditor createEditor() {
+		return new StringComboPropertyEditor(m_sFlags);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Style
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public long getFlag(String sFlag) {
-    return m_flags[ArrayUtils.indexOf(m_sFlags, sFlag)];
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Style
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public long getFlag(String sFlag) {
+		return m_flags[ArrayUtils.indexOf(m_sFlags, sFlag)];
+	}
 
-  @Override
-  public String getFlagValue(Property property) throws Exception {
-    long style = getStyleValue(property) & m_flagsClearMask;
-    for (int i = 0; i < m_flags.length; i++) {
-      long flag = m_flags[i];
-      if (style == flag) {
-        return m_sFlags[i];
-      }
-    }
-    return null;
-  }
+	@Override
+	public String getFlagValue(Property property) throws Exception {
+		long style = getStyleValue(property) & m_flagsClearMask;
+		for (int i = 0; i < m_flags.length; i++) {
+			long flag = m_flags[i];
+			if (style == flag) {
+				return m_sFlags[i];
+			}
+		}
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Value
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Object getValue(Property property) throws Exception {
-    return StringUtils.defaultString(getFlagValue(property));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Value
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Object getValue(Property property) throws Exception {
+		return StringUtils.defaultString(getFlagValue(property));
+	}
 
-  @Override
-  public void setValue(Property property, Object value) throws Exception {
-    long style = getStyleValue(property) & m_setClearMask;
-    if (value != Property.UNKNOWN_VALUE) {
-      String sValue = (String) value;
-      if (!StringUtils.isEmpty(sValue)) {
-        style |= getFlag(sValue);
-      }
-    }
-    setStyleValue(property, style);
-  }
+	@Override
+	public void setValue(Property property, Object value) throws Exception {
+		long style = getStyleValue(property) & m_setClearMask;
+		if (value != Property.UNKNOWN_VALUE) {
+			String sValue = (String) value;
+			if (!StringUtils.isEmpty(sValue)) {
+				style |= getFlag(sValue);
+			}
+		}
+		setStyleValue(property, style);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Popup menu
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void contributeActions(Property property, IMenuManager manager) throws Exception {
-    // separate sub-properties
-    manager.add(new Separator());
-    // add actions
-    long style = getStyleValue(property);
-    for (int i = 0; i < m_flags.length; i++) {
-      // create
-      IAction action = new RadioStyleAction(property, this, m_sFlags[i]);
-      // configure
-      long flag = m_flags[i];
-      if ((style & flag) == flag) {
-        action.setChecked(true);
-      }
-      // add to menu
-      manager.add(action);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Popup menu
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void contributeActions(Property property, IMenuManager manager) throws Exception {
+		// separate sub-properties
+		manager.add(new Separator());
+		// add actions
+		long style = getStyleValue(property);
+		for (int i = 0; i < m_flags.length; i++) {
+			// create
+			IAction action = new RadioStyleAction(property, this, m_sFlags[i]);
+			// configure
+			long flag = m_flags[i];
+			if ((style & flag) == flag) {
+				action.setChecked(true);
+			}
+			// add to menu
+			manager.add(action);
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/style/impl/SelectionStylePropertyImpl.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/style/impl/SelectionStylePropertyImpl.java
index 092ce833a..bbba73154 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/style/impl/SelectionStylePropertyImpl.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/style/impl/SelectionStylePropertyImpl.java
@@ -30,147 +30,147 @@
  * @coverage core.model.property.editor
  */
 public final class SelectionStylePropertyImpl extends SubStylePropertyImpl {
-  private final long[] m_flags;
-  private final int m_defaultIndex;
-  private final String[] m_sFlags;
+	private final long[] m_flags;
+	private final int m_defaultIndex;
+	private final String[] m_sFlags;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SelectionStylePropertyImpl(AbstractStylePropertyEditor editor,
-      String title,
-      long[] flags,
-      String[] sFlags,
-      long defaultFlag) {
-    super(editor, title);
-    m_flags = flags;
-    m_sFlags = sFlags;
-    m_defaultIndex = ArrayUtils.indexOf(m_flags, defaultFlag);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SelectionStylePropertyImpl(AbstractStylePropertyEditor editor,
+			String title,
+			long[] flags,
+			String[] sFlags,
+			long defaultFlag) {
+		super(editor, title);
+		m_flags = flags;
+		m_sFlags = sFlags;
+		m_defaultIndex = ArrayUtils.indexOf(m_flags, defaultFlag);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // As string
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void getAsString(StringBuilder builder) {
-    builder.append(getTitle());
-    builder.append(" select: ");
-    builder.append(m_defaultIndex);
-    for (String sFlag : m_sFlags) {
-      builder.append(" ");
-      builder.append(sFlag);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// As string
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void getAsString(StringBuilder builder) {
+		builder.append(getTitle());
+		builder.append(" select: ");
+		builder.append(m_defaultIndex);
+		for (String sFlag : m_sFlags) {
+			builder.append(" ");
+			builder.append(sFlag);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // PropertyEditor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public PropertyEditor createEditor() {
-    return new StringComboPropertyEditor(m_sFlags);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// PropertyEditor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public PropertyEditor createEditor() {
+		return new StringComboPropertyEditor(m_sFlags);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Style
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public long getFlag(String sFlag) {
-    return m_flags[ArrayUtils.indexOf(m_sFlags, sFlag)];
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Style
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public long getFlag(String sFlag) {
+		return m_flags[ArrayUtils.indexOf(m_sFlags, sFlag)];
+	}
 
-  @Override
-  public String getFlagValue(Property property) throws Exception {
-    long style = getStyleValue(property);
-    for (int i = 0; i < m_flags.length; i++) {
-      if (i == m_defaultIndex) {
-        continue;
-      }
-      if ((style & m_flags[i]) != 0) {
-        return m_sFlags[i];
-      }
-    }
-    return null;
-  }
+	@Override
+	public String getFlagValue(Property property) throws Exception {
+		long style = getStyleValue(property);
+		for (int i = 0; i < m_flags.length; i++) {
+			if (i == m_defaultIndex) {
+				continue;
+			}
+			if ((style & m_flags[i]) != 0) {
+				return m_sFlags[i];
+			}
+		}
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Value
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Object getValue(Property property) throws Exception {
-    long style = getStyleValue(property);
-    for (int i = 0; i < m_flags.length; i++) {
-      if ((style & m_flags[i]) != 0) {
-        return m_sFlags[i];
-      }
-    }
-    return m_sFlags[m_defaultIndex];
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Value
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Object getValue(Property property) throws Exception {
+		long style = getStyleValue(property);
+		for (int i = 0; i < m_flags.length; i++) {
+			if ((style & m_flags[i]) != 0) {
+				return m_sFlags[i];
+			}
+		}
+		return m_sFlags[m_defaultIndex];
+	}
 
-  private long getCurrentFlag(Property property) throws Exception {
-    long style = getStyleValue(property);
-    for (int i = 0; i < m_flags.length; i++) {
-      if ((style & m_flags[i]) != 0) {
-        return m_flags[i];
-      }
-    }
-    return m_flags[m_defaultIndex];
-  }
+	private long getCurrentFlag(Property property) throws Exception {
+		long style = getStyleValue(property);
+		for (int i = 0; i < m_flags.length; i++) {
+			if ((style & m_flags[i]) != 0) {
+				return m_flags[i];
+			}
+		}
+		return m_flags[m_defaultIndex];
+	}
 
-  @Override
-  public void setValue(Property property, Object value) throws Exception {
-    long style = getStyleValue(property) ^ getCurrentFlag(property);
-    if (value != Property.UNKNOWN_VALUE) {
-      String sFlag = (String) value;
-      int index = ArrayUtils.indexOf(m_sFlags, sFlag);
-      if (index != m_defaultIndex) {
-        style |= m_flags[index];
-      }
-    }
-    setStyleValue(property, style);
-  }
+	@Override
+	public void setValue(Property property, Object value) throws Exception {
+		long style = getStyleValue(property) ^ getCurrentFlag(property);
+		if (value != Property.UNKNOWN_VALUE) {
+			String sFlag = (String) value;
+			int index = ArrayUtils.indexOf(m_sFlags, sFlag);
+			if (index != m_defaultIndex) {
+				style |= m_flags[index];
+			}
+		}
+		setStyleValue(property, style);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Popup menu
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void contributeActions(Property property, IMenuManager manager) throws Exception {
-    // separate sub-properties
-    manager.add(new Separator());
-    // default
-    IAction defaultAction = null;
-    boolean defineChecked = false;
-    // add actions
-    long style = getStyleValue(property);
-    for (int i = 0; i < m_flags.length; i++) {
-      // create
-      IAction action = new RadioStyleAction(property, this, m_sFlags[i]);
-      // configure
-      if ((style & m_flags[i]) != 0) {
-        action.setChecked(true);
-        defineChecked = true;
-      }
-      // default
-      if (m_defaultIndex == i) {
-        defaultAction = action;
-      }
-      // add to menu
-      manager.add(action);
-    }
-    // default
-    if (!defineChecked) {
-      defaultAction.setChecked(true);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Popup menu
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void contributeActions(Property property, IMenuManager manager) throws Exception {
+		// separate sub-properties
+		manager.add(new Separator());
+		// default
+		IAction defaultAction = null;
+		boolean defineChecked = false;
+		// add actions
+		long style = getStyleValue(property);
+		for (int i = 0; i < m_flags.length; i++) {
+			// create
+			IAction action = new RadioStyleAction(property, this, m_sFlags[i]);
+			// configure
+			if ((style & m_flags[i]) != 0) {
+				action.setChecked(true);
+				defineChecked = true;
+			}
+			// default
+			if (m_defaultIndex == i) {
+				defaultAction = action;
+			}
+			// add to menu
+			manager.add(action);
+		}
+		// default
+		if (!defineChecked) {
+			defaultAction.setChecked(true);
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/style/impl/SelectionUsingEqualsStylePropertyImpl.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/style/impl/SelectionUsingEqualsStylePropertyImpl.java
index ee84c75ec..14a8741b5 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/style/impl/SelectionUsingEqualsStylePropertyImpl.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/editor/style/impl/SelectionUsingEqualsStylePropertyImpl.java
@@ -32,239 +32,239 @@
  * @coverage core.model.property.editor
  */
 public final class SelectionUsingEqualsStylePropertyImpl extends SubStylePropertyImpl {
-  private final long[] m_flags;
-  private final String[] m_sFlags;
-  private final String m_className;
+	private final long[] m_flags;
+	private final String[] m_sFlags;
+	private final String m_className;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SelectionUsingEqualsStylePropertyImpl(AbstractStylePropertyEditor editor,
-      String title,
-      long[] flags,
-      String[] sFlags,
-      String className) {
-    super(editor, title);
-    m_flags = flags;
-    m_sFlags = sFlags;
-    m_className = className;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SelectionUsingEqualsStylePropertyImpl(AbstractStylePropertyEditor editor,
+			String title,
+			long[] flags,
+			String[] sFlags,
+			String className) {
+		super(editor, title);
+		m_flags = flags;
+		m_sFlags = sFlags;
+		m_className = className;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // As string
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void getAsString(StringBuilder builder) {
-    builder.append(getTitle());
-    builder.append(" select: ");
-    for (String sFlag : m_sFlags) {
-      builder.append(" ");
-      builder.append(sFlag);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// As string
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void getAsString(StringBuilder builder) {
+		builder.append(getTitle());
+		builder.append(" select: ");
+		for (String sFlag : m_sFlags) {
+			builder.append(" ");
+			builder.append(sFlag);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // PropertyEditor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public PropertyEditor createEditor() {
-    return new StringComboPropertyEditor(m_sFlags);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// PropertyEditor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public PropertyEditor createEditor() {
+		return new StringComboPropertyEditor(m_sFlags);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Style
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public long getFlag(String sFlag) {
-    return m_flags[ArrayUtils.indexOf(m_sFlags, sFlag)];
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Style
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public long getFlag(String sFlag) {
+		return m_flags[ArrayUtils.indexOf(m_sFlags, sFlag)];
+	}
 
-  @Override
-  public String getFlagValue(Property property) throws Exception {
-    if (property instanceof GenericProperty) {
-      String expressionString = getCurrentSource((GenericProperty) property);
-      for (int i = 0; i < m_flags.length; i++) {
-        if (expressionString.indexOf('.' + m_sFlags[i]) != -1) {
-          return m_sFlags[i];
-        }
-      }
-    }
-    return null;
-  }
+	@Override
+	public String getFlagValue(Property property) throws Exception {
+		if (property instanceof GenericProperty) {
+			String expressionString = getCurrentSource((GenericProperty) property);
+			for (int i = 0; i < m_flags.length; i++) {
+				if (expressionString.indexOf('.' + m_sFlags[i]) != -1) {
+					return m_sFlags[i];
+				}
+			}
+		}
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Value
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Object getValue(Property property) throws Exception {
-    return getFlagValue(property);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Value
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Object getValue(Property property) throws Exception {
+		return getFlagValue(property);
+	}
 
-  //	private long getCurrentFlag(Property property) throws Exception {
-  //		if (property instanceof GenericProperty) {
-  //			String expressionString = getCurrentSource((GenericProperty) property);
-  //			for (int i = 0; i < m_flags.length; i++) {
-  //				if (expressionString.indexOf('.' + m_sFlags[i]) != -1) {
-  //					return m_flags[i];
-  //				}
-  //			}
-  //		}
-  //		return 0L;
-  //	}
-  @Override
-  public void setValue(Property property, Object value) throws Exception {
-    GenericProperty genericProperty = (GenericProperty) property;
-    String source = getSource(genericProperty, value.toString());
-    genericProperty.setExpression(source, Property.UNKNOWN_VALUE);
-  }
+	//	private long getCurrentFlag(Property property) throws Exception {
+	//		if (property instanceof GenericProperty) {
+	//			String expressionString = getCurrentSource((GenericProperty) property);
+	//			for (int i = 0; i < m_flags.length; i++) {
+	//				if (expressionString.indexOf('.' + m_sFlags[i]) != -1) {
+	//					return m_flags[i];
+	//				}
+	//			}
+	//		}
+	//		return 0L;
+	//	}
+	@Override
+	public void setValue(Property property, Object value) throws Exception {
+		GenericProperty genericProperty = (GenericProperty) property;
+		String source = getSource(genericProperty, value.toString());
+		genericProperty.setExpression(source, Property.UNKNOWN_VALUE);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Popup menu
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void contributeActions(Property property, IMenuManager manager) throws Exception {
-    // separate sub-properties
-    manager.add(new Separator());
-    // add actions
-    long style = getStyleValue(property);
-    for (int i = 0; i < m_flags.length; i++) {
-      // create
-      IAction action = new RadioStyleAction(property, this, m_sFlags[i]);
-      // configure
-      if ((style & m_flags[i]) != 0) {
-        action.setChecked(true);
-      }
-      // add to menu
-      manager.add(action);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Popup menu
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void contributeActions(Property property, IMenuManager manager) throws Exception {
+		// separate sub-properties
+		manager.add(new Separator());
+		// add actions
+		long style = getStyleValue(property);
+		for (int i = 0; i < m_flags.length; i++) {
+			// create
+			IAction action = new RadioStyleAction(property, this, m_sFlags[i]);
+			// configure
+			if ((style & m_flags[i]) != 0) {
+				action.setChecked(true);
+			}
+			// add to menu
+			manager.add(action);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private String getCurrentSource(final GenericProperty genericProperty) throws Exception {
-    return genericProperty.getExpression().toString();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private String getCurrentSource(final GenericProperty genericProperty) throws Exception {
+		return genericProperty.getExpression().toString();
+	}
 
-  private String getSource(final GenericProperty genericProperty, final String style)
-      throws Exception {
-    // addClassAndDefault must be true, case and point: ButtonField.NON_FOCUSABLE
-    return getSource(genericProperty, style, true, " | ");
-  }
+	private String getSource(final GenericProperty genericProperty, final String style)
+			throws Exception {
+		// addClassAndDefault must be true, case and point: ButtonField.NON_FOCUSABLE
+		return getSource(genericProperty, style, true, " | ");
+	}
 
-  private String getSource(final GenericProperty genericProperty,
-      final String style,
-      final boolean addClassAndDefault,
-      final String separator) throws Exception {
-    String currentSource = getCurrentSource(genericProperty);
-    currentSource = currentSource.trim();
-    // if the new style is unknown, do nothing
-    if (style.equals("UNKNOWN_VALUE")) {
-      // get the style string that the new source should replace
-      final String flagValue = getFlagValue(genericProperty);
-      if (flagValue == null) {
-        // the selection doesn't include anything to clear
-        return currentSource;
-      }
-      // remove flagValue from the current source, and return the source
-      // if there is no source, then don't bother, return the current source
-      if (currentSource.length() == 0) {
-        return currentSource;
-      }
-      int beginIndex = currentSource.indexOf('.' + flagValue);
-      int endIndex = currentSource.indexOf('.' + flagValue) + flagValue.length() + 1;
-      // adjust beginIndex to include the "*Field." part of the style bit
-      for (; beginIndex > 0; beginIndex--) {
-        final char ch = currentSource.charAt(beginIndex);
-        if (!Character.isLetter(ch) && ch != '.') {
-          break;
-        }
-      }
-      // adjust beginIndex and endIndex to trim any whitespace
-      for (; beginIndex > 0; beginIndex--) {
-        final char ch = currentSource.charAt(beginIndex);
-        if (!Character.isWhitespace(ch)) {
-          break;
-        }
-      }
-      for (; endIndex <= currentSource.length() - 1; endIndex++) {
-        final char ch = currentSource.charAt(endIndex);
-        if (!Character.isWhitespace(ch)) {
-          break;
-        }
-      }
-      // assume that a '|' is just before the beginIndex
-      // else, then assume it is after the endIndex
-      // else, we just assume that
-      if (beginIndex > 0 && currentSource.charAt(beginIndex) == '|') {
-        beginIndex--;
-      } else if (endIndex < currentSource.length() && currentSource.charAt(endIndex) == '|') {
-        endIndex++;
-      } else {
-        return currentSource;
-      }
-      return currentSource.substring(0, beginIndex)
-          + currentSource.substring(endIndex, currentSource.length());
-    }
-    // else if the new style is not already in the currentSource, then add the new source
-    else if (currentSource.indexOf('.' + style) == -1) {
-      // get the style string that the new source should replace
-      final String flagValue = getFlagValue(genericProperty);
-      if (flagValue == null) {
-        // if not replacing any source, simply append the new style source onto the existing source
-        StringBuffer newSource = new StringBuffer();
-        if (currentSource.length() != 0) {
-          newSource.append(currentSource);
-        }
-        newSource.append(separator);
-        if (addClassAndDefault) {
-          newSource.append(m_className);
-          newSource.append('.');
-        }
-        newSource.append(style);
-        return newSource.toString();
-      } else {
-        // otherwise, replace the existing style String with the new selection
-        //currentSource.subSequence(beginIndex, endIndex);
-        int beginIndex = currentSource.indexOf('.' + flagValue);
-        int endIndex = currentSource.indexOf('.' + flagValue) + flagValue.length() + 1;
-        // adjust beginIndex to include the "*Field." part of the style bit
-        for (; beginIndex > 0; beginIndex--) {
-          final char ch = currentSource.charAt(beginIndex);
-          if (!Character.isLetter(ch) && ch != '.') {
-            break;
-          }
-        }
-        // modify this code segment to use the StringBuffer so that the code is in sync with
-        // the coding-pattern in the rest of the method (pattern of using the StringBuffer)
-        if (addClassAndDefault) {
-          currentSource = currentSource.substring(0, beginIndex)
-              + m_className
-              + '.'
-              + style
-              + currentSource.substring(endIndex);
-        } else {
-          currentSource =
-              currentSource.substring(0, beginIndex) + style + currentSource.substring(endIndex);
-        }
-        return currentSource;
-      }
-    } else {
-      return currentSource;
-    }
-  }
+	private String getSource(final GenericProperty genericProperty,
+			final String style,
+			final boolean addClassAndDefault,
+			final String separator) throws Exception {
+		String currentSource = getCurrentSource(genericProperty);
+		currentSource = currentSource.trim();
+		// if the new style is unknown, do nothing
+		if (style.equals("UNKNOWN_VALUE")) {
+			// get the style string that the new source should replace
+			final String flagValue = getFlagValue(genericProperty);
+			if (flagValue == null) {
+				// the selection doesn't include anything to clear
+				return currentSource;
+			}
+			// remove flagValue from the current source, and return the source
+			// if there is no source, then don't bother, return the current source
+			if (currentSource.length() == 0) {
+				return currentSource;
+			}
+			int beginIndex = currentSource.indexOf('.' + flagValue);
+			int endIndex = currentSource.indexOf('.' + flagValue) + flagValue.length() + 1;
+			// adjust beginIndex to include the "*Field." part of the style bit
+			for (; beginIndex > 0; beginIndex--) {
+				final char ch = currentSource.charAt(beginIndex);
+				if (!Character.isLetter(ch) && ch != '.') {
+					break;
+				}
+			}
+			// adjust beginIndex and endIndex to trim any whitespace
+			for (; beginIndex > 0; beginIndex--) {
+				final char ch = currentSource.charAt(beginIndex);
+				if (!Character.isWhitespace(ch)) {
+					break;
+				}
+			}
+			for (; endIndex <= currentSource.length() - 1; endIndex++) {
+				final char ch = currentSource.charAt(endIndex);
+				if (!Character.isWhitespace(ch)) {
+					break;
+				}
+			}
+			// assume that a '|' is just before the beginIndex
+			// else, then assume it is after the endIndex
+			// else, we just assume that
+			if (beginIndex > 0 && currentSource.charAt(beginIndex) == '|') {
+				beginIndex--;
+			} else if (endIndex < currentSource.length() && currentSource.charAt(endIndex) == '|') {
+				endIndex++;
+			} else {
+				return currentSource;
+			}
+			return currentSource.substring(0, beginIndex)
+					+ currentSource.substring(endIndex, currentSource.length());
+		}
+		// else if the new style is not already in the currentSource, then add the new source
+		else if (currentSource.indexOf('.' + style) == -1) {
+			// get the style string that the new source should replace
+			final String flagValue = getFlagValue(genericProperty);
+			if (flagValue == null) {
+				// if not replacing any source, simply append the new style source onto the existing source
+				StringBuffer newSource = new StringBuffer();
+				if (currentSource.length() != 0) {
+					newSource.append(currentSource);
+				}
+				newSource.append(separator);
+				if (addClassAndDefault) {
+					newSource.append(m_className);
+					newSource.append('.');
+				}
+				newSource.append(style);
+				return newSource.toString();
+			} else {
+				// otherwise, replace the existing style String with the new selection
+				//currentSource.subSequence(beginIndex, endIndex);
+				int beginIndex = currentSource.indexOf('.' + flagValue);
+				int endIndex = currentSource.indexOf('.' + flagValue) + flagValue.length() + 1;
+				// adjust beginIndex to include the "*Field." part of the style bit
+				for (; beginIndex > 0; beginIndex--) {
+					final char ch = currentSource.charAt(beginIndex);
+					if (!Character.isLetter(ch) && ch != '.') {
+						break;
+					}
+				}
+				// modify this code segment to use the StringBuffer so that the code is in sync with
+				// the coding-pattern in the rest of the method (pattern of using the StringBuffer)
+				if (addClassAndDefault) {
+					currentSource = currentSource.substring(0, beginIndex)
+							+ m_className
+							+ '.'
+							+ style
+							+ currentSource.substring(endIndex);
+				} else {
+					currentSource =
+							currentSource.substring(0, beginIndex) + style + currentSource.substring(endIndex);
+				}
+				return currentSource;
+			}
+		} else {
+			return currentSource;
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/event/AbstractComplexEventPropertyEditor.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/event/AbstractComplexEventPropertyEditor.java
index 7b56cfe62..ae249fded 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/event/AbstractComplexEventPropertyEditor.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/event/AbstractComplexEventPropertyEditor.java
@@ -23,31 +23,31 @@
  * @coverage core.model.property.events
  */
 public abstract class AbstractComplexEventPropertyEditor extends TextDisplayPropertyEditor
-    implements
-      IComplexPropertyEditor {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // TextDisplayPropertyEditor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected final String getText(Property property) throws Exception {
-    StringBuffer sb = new StringBuffer();
-    // append properties
-    Property[] subProperties = getProperties(property);
-    for (int i = 0; i < subProperties.length; i++) {
-      Property subProperty = subProperties[i];
-      if (subProperty.isModified()) {
-        if (sb.length() != 0) {
-          sb.append(", ");
-        }
-        sb.append(subProperty.getTitle());
-      }
-    }
-    // append square brackets
-    sb.insert(0, "[");
-    sb.append("]");
-    // return final text
-    return sb.toString();
-  }
+implements
+IComplexPropertyEditor {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// TextDisplayPropertyEditor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected final String getText(Property property) throws Exception {
+		StringBuffer sb = new StringBuffer();
+		// append properties
+		Property[] subProperties = getProperties(property);
+		for (int i = 0; i < subProperties.length; i++) {
+			Property subProperty = subProperties[i];
+			if (subProperty.isModified()) {
+				if (sb.length() != 0) {
+					sb.append(", ");
+				}
+				sb.append(subProperty.getTitle());
+			}
+		}
+		// append square brackets
+		sb.insert(0, "[");
+		sb.append("]");
+		// return final text
+		return sb.toString();
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/event/AbstractEventProperty.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/event/AbstractEventProperty.java
index 6e10c507e..0a69dad84 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/event/AbstractEventProperty.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/event/AbstractEventProperty.java
@@ -21,26 +21,26 @@
  * @coverage core.model.property.events
  */
 abstract class AbstractEventProperty extends JavaProperty {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractEventProperty(JavaInfo javaInfo, String title, PropertyEditor propertyEditor) {
-    super(javaInfo, title, propertyEditor);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractEventProperty(JavaInfo javaInfo, String title, PropertyEditor propertyEditor) {
+		super(javaInfo, title, propertyEditor);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Property
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final Object getValue() throws Exception {
-    return UNKNOWN_VALUE;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Property
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final Object getValue() throws Exception {
+		return UNKNOWN_VALUE;
+	}
 
-  @Override
-  public void setValue(Object value) throws Exception {
-  }
+	@Override
+	public void setValue(Object value) throws Exception {
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/event/AbstractListenerProperty.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/event/AbstractListenerProperty.java
index 8423e3964..ea48774cc 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/event/AbstractListenerProperty.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/event/AbstractListenerProperty.java
@@ -23,28 +23,28 @@
  * @coverage core.model.property.events
  */
 public abstract class AbstractListenerProperty extends AbstractEventProperty {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractListenerProperty(JavaInfo javaInfo, String title, PropertyEditor propertyEditor) {
-    super(javaInfo, title, propertyEditor);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractListenerProperty(JavaInfo javaInfo, String title, PropertyEditor propertyEditor) {
+		super(javaInfo, title, propertyEditor);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Removes listener for this event.
-   */
-  protected abstract void removeListener() throws Exception;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Removes listener for this event.
+	 */
+	protected abstract void removeListener() throws Exception;
 
-  /**
-   * Contributes actions into context menu.
-   */
-  protected abstract void addListenerActions(IMenuManager manager, IMenuManager implementMenuManager)
-      throws Exception;
+	/**
+	 * Contributes actions into context menu.
+	 */
+	protected abstract void addListenerActions(IMenuManager manager, IMenuManager implementMenuManager)
+			throws Exception;
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/event/EventsProperty.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/event/EventsProperty.java
index 2d09684ab..3da6827ce 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/event/EventsProperty.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/event/EventsProperty.java
@@ -39,154 +39,154 @@
  * @coverage core.model.property.events
  */
 public final class EventsProperty extends AbstractEventProperty {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public EventsProperty(JavaInfo javaInfo) {
-    super(javaInfo, "Events", EventsPropertyEditor.INSTANCE);
-    setCategory(PropertyCategory.HIDDEN);
-    installDecoratorListener();
-    installContextMenuListener();
-    installDeleteListener();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public EventsProperty(JavaInfo javaInfo) {
+		super(javaInfo, "Events", EventsPropertyEditor.INSTANCE);
+		setCategory(PropertyCategory.HIDDEN);
+		installDecoratorListener();
+		installContextMenuListener();
+		installDeleteListener();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Broadcasts
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Installs listener for decorating icon of component with event listener.
-   */
-  private void installDecoratorListener() {
-    m_javaInfo.addBroadcastListener(new ObjectInfoPresentationDecorateIcon() {
-      @Override
-      public void invoke(ObjectInfo object, Image[] icon) throws Exception {
-        if (object == m_javaInfo) {
-          IPreferenceStore preferences = m_javaInfo.getDescription().getToolkit().getPreferences();
-          if (preferences.getBoolean(IPreferenceConstants.P_DECORATE_ICON) && isModified()) {
-            Image decorator = DesignerPlugin.getImage("events/decorator.gif");
-            icon[0] =
-                SwtResourceManager.decorateImage(icon[0], decorator, SwtResourceManager.TOP_LEFT);
-          }
-        }
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Broadcasts
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Installs listener for decorating icon of component with event listener.
+	 */
+	private void installDecoratorListener() {
+		m_javaInfo.addBroadcastListener(new ObjectInfoPresentationDecorateIcon() {
+			@Override
+			public void invoke(ObjectInfo object, Image[] icon) throws Exception {
+				if (object == m_javaInfo) {
+					IPreferenceStore preferences = m_javaInfo.getDescription().getToolkit().getPreferences();
+					if (preferences.getBoolean(IPreferenceConstants.P_DECORATE_ICON) && isModified()) {
+						Image decorator = DesignerPlugin.getImage("events/decorator.gif");
+						icon[0] =
+								SwtResourceManager.decorateImage(icon[0], decorator, SwtResourceManager.TOP_LEFT);
+					}
+				}
+			}
+		});
+	}
 
-  /**
-   * Installs listener for adding {@link EventsProperty} menu into component context menu.
-   */
-  private void installContextMenuListener() {
-    m_javaInfo.addBroadcastListener(new ObjectEventListener() {
-      @Override
-      public void addContextMenu(List<? extends ObjectInfo> objects,
-          ObjectInfo object,
-          IMenuManager manager) throws Exception {
-        if (object == m_javaInfo) {
-          contributeActions(manager, ModelMessages.EventsProperty_menuManagerName);
-        }
-      }
-    });
-  }
+	/**
+	 * Installs listener for adding {@link EventsProperty} menu into component context menu.
+	 */
+	private void installContextMenuListener() {
+		m_javaInfo.addBroadcastListener(new ObjectEventListener() {
+			@Override
+			public void addContextMenu(List<? extends ObjectInfo> objects,
+					ObjectInfo object,
+					IMenuManager manager) throws Exception {
+				if (object == m_javaInfo) {
+					contributeActions(manager, ModelMessages.EventsProperty_menuManagerName);
+				}
+			}
+		});
+	}
 
-  /**
-   * Installs listener for deleting listeners during component delete.
-   */
-  private void installDeleteListener() {
-    m_javaInfo.addBroadcastListener(new ObjectInfoDelete() {
-      @Override
-      public void before(ObjectInfo parent, ObjectInfo child) throws Exception {
-        if (child == m_javaInfo) {
-          for (AbstractListenerProperty listenerProperty : getSubProperties()) {
-            if (listenerProperty.isModified()) {
-              listenerProperty.removeListener();
-            }
-          }
-        }
-      }
-    });
-  }
+	/**
+	 * Installs listener for deleting listeners during component delete.
+	 */
+	private void installDeleteListener() {
+		m_javaInfo.addBroadcastListener(new ObjectInfoDelete() {
+			@Override
+			public void before(ObjectInfo parent, ObjectInfo child) throws Exception {
+				if (child == m_javaInfo) {
+					for (AbstractListenerProperty listenerProperty : getSubProperties()) {
+						if (listenerProperty.isModified()) {
+							listenerProperty.removeListener();
+						}
+					}
+				}
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Property
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean isModified() throws Exception {
-    // check if there are listeners
-    Property[] properties = getSubProperties();
-    for (Property property : properties) {
-      if (property.isModified()) {
-        return true;
-      }
-    }
-    // not modified
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Property
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean isModified() throws Exception {
+		// check if there are listeners
+		Property[] properties = getSubProperties();
+		for (Property property : properties) {
+			if (property.isModified()) {
+				return true;
+			}
+		}
+		// not modified
+		return false;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link AbstractListenerProperty}'s of this {@link EventsProperty}.
-   */
-  private AbstractListenerProperty[] getSubProperties() throws Exception {
-    return EventsPropertyEditor.INSTANCE.getProperties(this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link AbstractListenerProperty}'s of this {@link EventsProperty}.
+	 */
+	private AbstractListenerProperty[] getSubProperties() throws Exception {
+		return EventsPropertyEditor.INSTANCE.getProperties(this);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Context menu
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Contributes actions into context menu.
-   */
-  private void contributeActions(IMenuManager manager, String implementTitle) throws Exception {
-    // prepare "implement" menu
-    IMenuManager implementMenuManager = new MenuManager(implementTitle);
-    // add separate actions
-    AbstractListenerProperty[] listenerProperties = getSubProperties();
-    for (AbstractListenerProperty listenerProperty : listenerProperties) {
-      listenerProperty.addListenerActions(manager, implementMenuManager);
-    }
-    // add "implement" menu
-    manager.appendToGroup(IContextMenuConstants.GROUP_EVENTS, implementMenuManager);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Context menu
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Contributes actions into context menu.
+	 */
+	private void contributeActions(IMenuManager manager, String implementTitle) throws Exception {
+		// prepare "implement" menu
+		IMenuManager implementMenuManager = new MenuManager(implementTitle);
+		// add separate actions
+		AbstractListenerProperty[] listenerProperties = getSubProperties();
+		for (AbstractListenerProperty listenerProperty : listenerProperties) {
+			listenerProperty.addListenerActions(manager, implementMenuManager);
+		}
+		// add "implement" menu
+		manager.appendToGroup(IContextMenuConstants.GROUP_EVENTS, implementMenuManager);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Open stub
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Creates and/or opens in editor listener method for specified <code>methodPath</code>. Used to
-   * create and open listener with known info, for example on double click.
-   *
-   * @param methodPath
-   *          the '/' separated name of listener method, for example <code>key/pressed</code>.
-   */
-  public void openStubMethod(String methodPath) throws Exception {
-    if (methodPath.equals("wbp:openSource")) {
-      JavaInfoUtils.scheduleOpenNode(m_javaInfo, m_javaInfo.getCreationSupport().getNode());
-      return;
-    }
-    if (methodPath.startsWith("wbp:broadcast")) {
-      m_javaInfo.getBroadcast(JavaInfoEventOpen.class).invoke(m_javaInfo, methodPath);
-      return;
-    }
-    // normal event
-    String eventMethodPath = "Events/" + methodPath;
-    IListenerMethodProperty property =
-        (IListenerMethodProperty) PropertyUtils.getByPath(m_javaInfo, eventMethodPath);
-    if (property != null) {
-      property.openStubMethod();
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Open stub
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Creates and/or opens in editor listener method for specified <code>methodPath</code>. Used to
+	 * create and open listener with known info, for example on double click.
+	 *
+	 * @param methodPath
+	 *          the '/' separated name of listener method, for example <code>key/pressed</code>.
+	 */
+	public void openStubMethod(String methodPath) throws Exception {
+		if (methodPath.equals("wbp:openSource")) {
+			JavaInfoUtils.scheduleOpenNode(m_javaInfo, m_javaInfo.getCreationSupport().getNode());
+			return;
+		}
+		if (methodPath.startsWith("wbp:broadcast")) {
+			m_javaInfo.getBroadcast(JavaInfoEventOpen.class).invoke(m_javaInfo, methodPath);
+			return;
+		}
+		// normal event
+		String eventMethodPath = "Events/" + methodPath;
+		IListenerMethodProperty property =
+				(IListenerMethodProperty) PropertyUtils.getByPath(m_javaInfo, eventMethodPath);
+		if (property != null) {
+			property.openStubMethod();
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/event/EventsPropertyEditor.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/event/EventsPropertyEditor.java
index b81f24fb6..9dbcfbca5 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/event/EventsPropertyEditor.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/event/EventsPropertyEditor.java
@@ -32,99 +32,99 @@
  * @coverage core.model.property.events
  */
 final class EventsPropertyEditor extends AbstractComplexEventPropertyEditor {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final EventsPropertyEditor INSTANCE = new EventsPropertyEditor();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final EventsPropertyEditor INSTANCE = new EventsPropertyEditor();
 
-  private EventsPropertyEditor() {
-  }
+	private EventsPropertyEditor() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IComplexPropertyEditor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public AbstractListenerProperty[] getProperties(Property property) throws Exception {
-    EventsProperty eventsProperty = (EventsProperty) property;
-    JavaInfo javaInfo = eventsProperty.getJavaInfo();
-    // get from cache or create
-    AbstractListenerProperty[] properties =
-        (AbstractListenerProperty[]) javaInfo.getArbitraryValue(eventsProperty);
-    if (properties == null) {
-      properties = createProperties(javaInfo);
-      javaInfo.putArbitraryValue(eventsProperty, properties);
-    }
-    return properties;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IComplexPropertyEditor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public AbstractListenerProperty[] getProperties(Property property) throws Exception {
+		EventsProperty eventsProperty = (EventsProperty) property;
+		JavaInfo javaInfo = eventsProperty.getJavaInfo();
+		// get from cache or create
+		AbstractListenerProperty[] properties =
+				(AbstractListenerProperty[]) javaInfo.getArbitraryValue(eventsProperty);
+		if (properties == null) {
+			properties = createProperties(javaInfo);
+			javaInfo.putArbitraryValue(eventsProperty, properties);
+		}
+		return properties;
+	}
 
-  private AbstractListenerProperty[] createProperties(JavaInfo javaInfo) throws Exception {
-    List<AbstractListenerProperty> properties = Lists.newArrayList();
-    // standard: add*[Listener,Handler]
-    for (ListenerInfo listener : getListeners(javaInfo)) {
-      properties.add(new ListenerProperty(javaInfo, listener));
-    }
-    // use broadcast
-    javaInfo.getBroadcast(JavaInfoEventListeners.class).invoke(javaInfo, properties);
-    // return as array
-    return properties.toArray(new AbstractListenerProperty[properties.size()]);
-  }
+	private AbstractListenerProperty[] createProperties(JavaInfo javaInfo) throws Exception {
+		List<AbstractListenerProperty> properties = Lists.newArrayList();
+		// standard: add*[Listener,Handler]
+		for (ListenerInfo listener : getListeners(javaInfo)) {
+			properties.add(new ListenerProperty(javaInfo, listener));
+		}
+		// use broadcast
+		javaInfo.getBroadcast(JavaInfoEventListeners.class).invoke(javaInfo, properties);
+		// return as array
+		return properties.toArray(new AbstractListenerProperty[properties.size()]);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Listeners access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final ClassMap<List<ListenerInfo>> m_listenersCache = ClassMap.create();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Listeners access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final ClassMap<List<ListenerInfo>> m_listenersCache = ClassMap.create();
 
-  /**
-   * @return the {@link ListenerInfo} for each listener in component class.
-   */
-  private static List<ListenerInfo> getListeners(JavaInfo javaInfo) throws Exception {
-    Class<?> componentClass = javaInfo.getDescription().getComponentClass();
-    List<ListenerInfo> listeners = m_listenersCache.get(componentClass);
-    if (listeners == null) {
-      GenericTypeResolver externalResolver = new GenericTypeResolverJavaInfo(javaInfo);
-      listeners = getListeners(componentClass, externalResolver);
-      m_listenersCache.put(componentClass, listeners);
-    }
-    return listeners;
-  }
+	/**
+	 * @return the {@link ListenerInfo} for each listener in component class.
+	 */
+	private static List<ListenerInfo> getListeners(JavaInfo javaInfo) throws Exception {
+		Class<?> componentClass = javaInfo.getDescription().getComponentClass();
+		List<ListenerInfo> listeners = m_listenersCache.get(componentClass);
+		if (listeners == null) {
+			GenericTypeResolver externalResolver = new GenericTypeResolverJavaInfo(javaInfo);
+			listeners = getListeners(componentClass, externalResolver);
+			m_listenersCache.put(componentClass, listeners);
+		}
+		return listeners;
+	}
 
-  private static List<ListenerInfo> getListeners(Class<?> componentClass,
-      GenericTypeResolver externalResolver) {
-    // prepare methods
-    List<Method> methods = get_addListener_methods(componentClass);
-    // fill list of listeners
-    List<ListenerInfo> listeners = Lists.newArrayList();
-    for (Method method : methods) {
-      listeners.add(new ListenerInfo(method, componentClass, externalResolver));
-    }
-    // use simple names
-    ListenerInfo.useSimpleNamesWherePossible(listeners);
-    // sort listeners by name
-    Collections.sort(listeners, new Comparator<ListenerInfo>() {
-      @Override
-      public int compare(ListenerInfo listener_1, ListenerInfo listener_2) {
-        return listener_1.getName().compareTo(listener_2.getName());
-      }
-    });
-    return listeners;
-  }
+	private static List<ListenerInfo> getListeners(Class<?> componentClass,
+			GenericTypeResolver externalResolver) {
+		// prepare methods
+		List<Method> methods = get_addListener_methods(componentClass);
+		// fill list of listeners
+		List<ListenerInfo> listeners = Lists.newArrayList();
+		for (Method method : methods) {
+			listeners.add(new ListenerInfo(method, componentClass, externalResolver));
+		}
+		// use simple names
+		ListenerInfo.useSimpleNamesWherePossible(listeners);
+		// sort listeners by name
+		Collections.sort(listeners, new Comparator<ListenerInfo>() {
+			@Override
+			public int compare(ListenerInfo listener_1, ListenerInfo listener_2) {
+				return listener_1.getName().compareTo(listener_2.getName());
+			}
+		});
+		return listeners;
+	}
 
-  /**
-   * @return the <code>addXXXListener(listener)</code> {@link Method}'s.
-   */
-  private static List<Method> get_addListener_methods(Class<?> clazz) {
-    List<Method> listenerMethods = Lists.newArrayList();
-    for (Method method : clazz.getMethods()) {
-      if (ListenerInfo.isAddListenerMethod(method)) {
-        listenerMethods.add(method);
-      }
-    }
-    return listenerMethods;
-  }
+	/**
+	 * @return the <code>addXXXListener(listener)</code> {@link Method}'s.
+	 */
+	private static List<Method> get_addListener_methods(Class<?> clazz) {
+		List<Method> listenerMethods = Lists.newArrayList();
+		for (Method method : clazz.getMethods()) {
+			if (ListenerInfo.isAddListenerMethod(method)) {
+				listenerMethods.add(method);
+			}
+		}
+		return listenerMethods;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/event/EventsPropertyUtils.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/event/EventsPropertyUtils.java
index ec3b1eb3f..e5c94f5bc 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/event/EventsPropertyUtils.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/event/EventsPropertyUtils.java
@@ -22,21 +22,21 @@
  * @coverage core.model.property.events
  */
 public final class EventsPropertyUtils {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Image constants for to display in actions
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final ImageDescriptor LISTENER_METHOD_IMAGE_DESCRIPTOR =
-      DesignerPlugin.getImageDescriptor("events/listener_method.gif");
-  public static final ImageDescriptor LISTENER_INTERFACE_IMAGE_DESCRIPTOR =
-      DesignerPlugin.getImageDescriptor("events/listener_interface.gif");
-  public static final Image LISTENER_CLASS_IMAGE =
-      DesignerPlugin.getImage("events/listener_class.gif");
-  public static final Image LISTENER_INTERFACE_IMAGE =
-      DesignerPlugin.getImage("events/listener_interface.gif");
-  public static final Image EXISTING_CLASS_IMAGE =
-      DesignerPlugin.getImage("events/existing_class.gif");
-  public static final Image EXISTING_INTERFACE_IMAGE =
-      DesignerPlugin.getImage("events/existing_interface.gif");
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Image constants for to display in actions
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final ImageDescriptor LISTENER_METHOD_IMAGE_DESCRIPTOR =
+			DesignerPlugin.getImageDescriptor("events/listener_method.gif");
+	public static final ImageDescriptor LISTENER_INTERFACE_IMAGE_DESCRIPTOR =
+			DesignerPlugin.getImageDescriptor("events/listener_interface.gif");
+	public static final Image LISTENER_CLASS_IMAGE =
+			DesignerPlugin.getImage("events/listener_class.gif");
+	public static final Image LISTENER_INTERFACE_IMAGE =
+			DesignerPlugin.getImage("events/listener_interface.gif");
+	public static final Image EXISTING_CLASS_IMAGE =
+			DesignerPlugin.getImage("events/existing_class.gif");
+	public static final Image EXISTING_INTERFACE_IMAGE =
+			DesignerPlugin.getImage("events/existing_interface.gif");
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/event/IListenerMethodProperty.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/event/IListenerMethodProperty.java
index b13cbaa98..8964c043f 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/event/IListenerMethodProperty.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/event/IListenerMethodProperty.java
@@ -19,8 +19,8 @@
  * @coverage core.model.property.events
  */
 public interface IListenerMethodProperty {
-  /**
-   * Opens stub method (or listener method if there are no stub method).
-   */
-  void openStubMethod() throws Exception;
+	/**
+	 * Opens stub method (or listener method if there are no stub method).
+	 */
+	void openStubMethod() throws Exception;
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/event/IPreferenceConstants.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/event/IPreferenceConstants.java
index 3a5a6f02b..1934c38fe 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/event/IPreferenceConstants.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/event/IPreferenceConstants.java
@@ -22,86 +22,86 @@
  * @coverage core.model.property.events
  */
 public interface IPreferenceConstants {
-  String BASE = "property.events.";
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Other
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Is <code>true</code> if parameters in even handlers should be declared as <code>final</code>.
-   */
-  String P_FINAL_PARAMETERS = BASE + "finalParameters";
-  /**
-   * Is <code>true</code> icon of component with events should be decorated.
-   */
-  String P_DECORATE_ICON = BASE + "decorateIcon";
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Stub
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Is <code>true</code> if event handling methods should be generated to call a stub method.
-   */
-  String P_CREATE_STUB = BASE + "stubCreate";
-  /**
-   * The template that will be used to generate the name of an stub method.
-   */
-  String P_STUB_NAME_TEMPLATE = "stubName";
-  /**
-   * Is <code>true</code> if stub {@link MethodDeclaration} should be removed on {@link JavaInfo}
-   * remove.
-   */
-  String P_DELETE_STUB = BASE + "stubDelete";
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code type
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Style of code for event listener.
-   */
-  String P_CODE_TYPE = BASE + "codeType";
-  /**
-   * Generate anonymous class.
-   */
-  int V_CODE_ANONYMOUS = 0;
-  /**
-   * Generate inner class.
-   */
-  int V_CODE_INNER_CLASS = 1;
-  /**
-   * Implement listener interface by main {@link TypeDeclaration}.
-   */
-  int V_CODE_INTERFACE = 2;
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Inner class
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Position for new inner class for listener.
-   */
-  String P_INNER_POSITION = BASE + "innerClassPosition";
-  /**
-   * First body declaration in class.
-   */
-  int V_INNER_FIRST = 0;
-  /**
-   * Last body declaration in class.
-   */
-  int V_INNER_LAST = 1;
-  /**
-   * Before first inner listener class, or first in class.
-   */
-  int V_INNER_BEFORE = 2;
-  /**
-   * After last inner listener class, or last in class.
-   */
-  int V_INNER_AFTER = 3;
-  /**
-   * The template that will be used to generate the name of an stub method.
-   */
-  String P_INNER_NAME_TEMPLATE = "innerClassName";
+	String BASE = "property.events.";
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Other
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Is <code>true</code> if parameters in even handlers should be declared as <code>final</code>.
+	 */
+	String P_FINAL_PARAMETERS = BASE + "finalParameters";
+	/**
+	 * Is <code>true</code> icon of component with events should be decorated.
+	 */
+	String P_DECORATE_ICON = BASE + "decorateIcon";
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Stub
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Is <code>true</code> if event handling methods should be generated to call a stub method.
+	 */
+	String P_CREATE_STUB = BASE + "stubCreate";
+	/**
+	 * The template that will be used to generate the name of an stub method.
+	 */
+	String P_STUB_NAME_TEMPLATE = "stubName";
+	/**
+	 * Is <code>true</code> if stub {@link MethodDeclaration} should be removed on {@link JavaInfo}
+	 * remove.
+	 */
+	String P_DELETE_STUB = BASE + "stubDelete";
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code type
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Style of code for event listener.
+	 */
+	String P_CODE_TYPE = BASE + "codeType";
+	/**
+	 * Generate anonymous class.
+	 */
+	int V_CODE_ANONYMOUS = 0;
+	/**
+	 * Generate inner class.
+	 */
+	int V_CODE_INNER_CLASS = 1;
+	/**
+	 * Implement listener interface by main {@link TypeDeclaration}.
+	 */
+	int V_CODE_INTERFACE = 2;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Inner class
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Position for new inner class for listener.
+	 */
+	String P_INNER_POSITION = BASE + "innerClassPosition";
+	/**
+	 * First body declaration in class.
+	 */
+	int V_INNER_FIRST = 0;
+	/**
+	 * Last body declaration in class.
+	 */
+	int V_INNER_LAST = 1;
+	/**
+	 * Before first inner listener class, or first in class.
+	 */
+	int V_INNER_BEFORE = 2;
+	/**
+	 * After last inner listener class, or last in class.
+	 */
+	int V_INNER_AFTER = 3;
+	/**
+	 * The template that will be used to generate the name of an stub method.
+	 */
+	String P_INNER_NAME_TEMPLATE = "innerClassName";
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/event/ListenerInfo.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/event/ListenerInfo.java
index 36f032169..fd6a955cf 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/event/ListenerInfo.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/event/ListenerInfo.java
@@ -31,262 +31,262 @@
  * @coverage core.model.property.events
  */
 final class ListenerInfo {
-  private final Class<?> m_componentClass;
-  private final Method m_method;
-  private final String m_methodSignature;
-  private final boolean m_deprecated;
-  private String m_name;
-  private final String m_simpleName;
-  private final Class<?> m_interfaceType;
-  private boolean m_adapterTypeReady;
-  private Class<?> m_adapterType;
-  private final GenericTypeResolver m_externalResolver;
+	private final Class<?> m_componentClass;
+	private final Method m_method;
+	private final String m_methodSignature;
+	private final boolean m_deprecated;
+	private String m_name;
+	private final String m_simpleName;
+	private final Class<?> m_interfaceType;
+	private boolean m_adapterTypeReady;
+	private Class<?> m_adapterType;
+	private final GenericTypeResolver m_externalResolver;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ListenerInfo(Method method, Class<?> componentClass, GenericTypeResolver externalResolver) {
-    m_method = method;
-    m_componentClass = componentClass;
-    m_externalResolver = externalResolver;
-    m_methodSignature = ReflectionUtils.getMethodSignature(m_method);
-    m_deprecated = m_method.getAnnotation(Deprecated.class) != null;
-    m_name = _getListenerName(m_method);
-    m_simpleName = _getListenerSimpleName(m_method);
-    m_interfaceType = m_method.getParameterTypes()[0];
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ListenerInfo(Method method, Class<?> componentClass, GenericTypeResolver externalResolver) {
+		m_method = method;
+		m_componentClass = componentClass;
+		m_externalResolver = externalResolver;
+		m_methodSignature = ReflectionUtils.getMethodSignature(m_method);
+		m_deprecated = m_method.getAnnotation(Deprecated.class) != null;
+		m_name = _getListenerName(m_method);
+		m_simpleName = _getListenerSimpleName(m_method);
+		m_interfaceType = m_method.getParameterTypes()[0];
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Creation utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if given {@link Method} satisfies "add listener" pattern.
-   */
-  static boolean isAddListenerMethod(Method method) {
-    String methodName = method.getName();
-    return methodName.startsWith("add")
-        && (methodName.endsWith("Listener") || methodName.endsWith("Handler"))
-        && method.getParameterTypes().length == 1;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Creation utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if given {@link Method} satisfies "add listener" pattern.
+	 */
+	static boolean isAddListenerMethod(Method method) {
+		String methodName = method.getName();
+		return methodName.startsWith("add")
+				&& (methodName.endsWith("Listener") || methodName.endsWith("Handler"))
+				&& method.getParameterTypes().length == 1;
+	}
 
-  /**
-   * @return the "qualified" name of listener method, it should be shortened later, if possible.
-   */
-  private static String _getListenerName(Method addListenerMethod) {
-    String name = _getListenerSimpleName(addListenerMethod);
-    // use qualified name, turn into simple later
-    String parameterName = "(" + addListenerMethod.getParameterTypes()[0].getName() + ")";
-    return name + parameterName;
-  }
+	/**
+	 * @return the "qualified" name of listener method, it should be shortened later, if possible.
+	 */
+	private static String _getListenerName(Method addListenerMethod) {
+		String name = _getListenerSimpleName(addListenerMethod);
+		// use qualified name, turn into simple later
+		String parameterName = "(" + addListenerMethod.getParameterTypes()[0].getName() + ")";
+		return name + parameterName;
+	}
 
-  /**
-   * @return the name of listener method, to display for user. For example <code>key</code> for
-   *         <code>addKeyListener()</code>.
-   */
-  private static String _getListenerSimpleName(Method addListenerMethod) {
-    String name = addListenerMethod.getName();
-    // convert into simple name
-    name = StringUtils.removeStart(name, "add");
-    name = StringUtils.removeEnd(name, "Listener");
-    name = StringUtils.removeEnd(name, "Handler");
-    name = StringUtils.uncapitalize(name);
-    // if become empty, use full name
-    if (name.length() == 0) {
-      name = addListenerMethod.getName();
-    }
-    return name;
-  }
+	/**
+	 * @return the name of listener method, to display for user. For example <code>key</code> for
+	 *         <code>addKeyListener()</code>.
+	 */
+	private static String _getListenerSimpleName(Method addListenerMethod) {
+		String name = addListenerMethod.getName();
+		// convert into simple name
+		name = StringUtils.removeStart(name, "add");
+		name = StringUtils.removeEnd(name, "Listener");
+		name = StringUtils.removeEnd(name, "Handler");
+		name = StringUtils.uncapitalize(name);
+		// if become empty, use full name
+		if (name.length() == 0) {
+			name = addListenerMethod.getName();
+		}
+		return name;
+	}
 
-  /**
-   * @return the adapter class for given listener interface type, may be <code>null</code>.
-   */
-  private static Class<?> _getAdapterType(Class<?> listenerType) {
-    Class<?> adapterType = null;
-    // -Listener/Handler +Adapter
-    {
-      String adapterClassName = listenerType.getName();
-      adapterClassName = StringUtils.removeEnd(adapterClassName, "Listener");
-      adapterClassName = StringUtils.removeEnd(adapterClassName, "Handler");
-      adapterClassName = adapterClassName + "Adapter";
-      adapterType = _getExistingType(listenerType, adapterClassName);
-    }
-    // +Adapter
-    if (adapterType == null) {
-      String adapterClassName = listenerType.getName();
-      adapterClassName = adapterClassName + "Adapter";
-      adapterType = _getExistingType(listenerType, adapterClassName);
-    }
-    // result
-    return adapterType;
-  }
+	/**
+	 * @return the adapter class for given listener interface type, may be <code>null</code>.
+	 */
+	private static Class<?> _getAdapterType(Class<?> listenerType) {
+		Class<?> adapterType = null;
+		// -Listener/Handler +Adapter
+		{
+			String adapterClassName = listenerType.getName();
+			adapterClassName = StringUtils.removeEnd(adapterClassName, "Listener");
+			adapterClassName = StringUtils.removeEnd(adapterClassName, "Handler");
+			adapterClassName = adapterClassName + "Adapter";
+			adapterType = _getExistingType(listenerType, adapterClassName);
+		}
+		// +Adapter
+		if (adapterType == null) {
+			String adapterClassName = listenerType.getName();
+			adapterClassName = adapterClassName + "Adapter";
+			adapterType = _getExistingType(listenerType, adapterClassName);
+		}
+		// result
+		return adapterType;
+	}
 
-  private static Class<?> _getExistingType(Class<?> someType, String typeNameToLoad) {
-    try {
-      ClassLoader classLoader = ReflectionUtils.getClassLoader(someType);
-      return classLoader.loadClass(typeNameToLoad);
-    } catch (Throwable e) {
-      return null;
-    }
-  }
+	private static Class<?> _getExistingType(Class<?> someType, String typeNameToLoad) {
+		try {
+			ClassLoader classLoader = ReflectionUtils.getClassLoader(someType);
+			return classLoader.loadClass(typeNameToLoad);
+		} catch (Throwable e) {
+			return null;
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the <code>addXXXListener</code> {@link Method}.
-   */
-  public Method getMethod() {
-    return m_method;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the <code>addXXXListener</code> {@link Method}.
+	 */
+	public Method getMethod() {
+		return m_method;
+	}
 
-  /**
-   * @return the signature of <code>addXXXListener</code> {@link Method}.
-   */
-  public String getMethodSignature() {
-    return m_methodSignature;
-  }
+	/**
+	 * @return the signature of <code>addXXXListener</code> {@link Method}.
+	 */
+	public String getMethodSignature() {
+		return m_methodSignature;
+	}
 
-  /**
-   * @return <code>true</code> if listener {@link Method} is deprecated.
-   */
-  public boolean isDeprecated() {
-    return m_deprecated;
-  }
+	/**
+	 * @return <code>true</code> if listener {@link Method} is deprecated.
+	 */
+	public boolean isDeprecated() {
+		return m_deprecated;
+	}
 
-  /**
-   * @return the name of this listener.
-   */
-  public String getName() {
-    return m_name;
-  }
+	/**
+	 * @return the name of this listener.
+	 */
+	public String getName() {
+		return m_name;
+	}
 
-  /**
-   * @return the simple name of this listener.
-   */
-  public String getSimpleName() {
-    return m_simpleName;
-  }
+	/**
+	 * @return the simple name of this listener.
+	 */
+	public String getSimpleName() {
+		return m_simpleName;
+	}
 
-  /**
-   * @return the listener interface {@link Class}.
-   */
-  public Class<?> getInterface() {
-    return m_interfaceType;
-  }
+	/**
+	 * @return the listener interface {@link Class}.
+	 */
+	public Class<?> getInterface() {
+		return m_interfaceType;
+	}
 
-  /**
-   * @return the listener adapter {@link Class}, may be <code>null</code>.
-   */
-  public Class<?> getAdapter() {
-    if (!m_adapterTypeReady) {
-      m_adapterTypeReady = true;
-      m_adapterType = _getAdapterType(m_interfaceType);
-    }
-    return m_adapterType;
-  }
+	/**
+	 * @return the listener adapter {@link Class}, may be <code>null</code>.
+	 */
+	public Class<?> getAdapter() {
+		if (!m_adapterTypeReady) {
+			m_adapterTypeReady = true;
+			m_adapterType = _getAdapterType(m_interfaceType);
+		}
+		return m_adapterType;
+	}
 
-  /**
-   * @return <code>true</code> if this listener has adapter.
-   */
-  public boolean hasAdapter() {
-    return getAdapter() != null;
-  }
+	/**
+	 * @return <code>true</code> if this listener has adapter.
+	 */
+	public boolean hasAdapter() {
+		return getAdapter() != null;
+	}
 
-  /**
-   * @return the {@link Class} that should be used for this listener - adapter (if exists) or
-   *         interface.
-   */
-  public Class<?> getListenerType() {
-    Class<?> adapterType = getAdapter();
-    return adapterType != null ? adapterType : m_interfaceType;
-  }
+	/**
+	 * @return the {@link Class} that should be used for this listener - adapter (if exists) or
+	 *         interface.
+	 */
+	public Class<?> getListenerType() {
+		Class<?> adapterType = getAdapter();
+		return adapterType != null ? adapterType : m_interfaceType;
+	}
 
-  public GenericTypeResolver getResolver() {
-    GenericTypeResolver resolver_1 =
-        GenericTypeResolver.superClass(
-            m_externalResolver,
-            m_componentClass,
-            m_method.getDeclaringClass());
-    GenericTypeResolver resolver_2 = GenericTypeResolver.argumentOfMethod(resolver_1, m_method, 0);
-    return resolver_2;
-  }
+	public GenericTypeResolver getResolver() {
+		GenericTypeResolver resolver_1 =
+				GenericTypeResolver.superClass(
+						m_externalResolver,
+						m_componentClass,
+						m_method.getDeclaringClass());
+		GenericTypeResolver resolver_2 = GenericTypeResolver.argumentOfMethod(resolver_1, m_method, 0);
+		return resolver_2;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Methods access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private List<ListenerMethodInfo> m_methods;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Methods access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private List<ListenerMethodInfo> m_methods;
 
-  /**
-   * @return the {@link ListenerMethodInfo}'s for each method in this listener.
-   */
-  public List<ListenerMethodInfo> getMethods() {
-    if (m_methods == null) {
-      m_methods = Lists.newArrayList();
-      // prepare method information objects
-      for (Method method : m_interfaceType.getMethods()) {
-        if (isListenerMethod(method)) {
-          m_methods.add(new ListenerMethodInfo(this, method));
-        }
-      }
-      // sort by name
-      Collections.sort(m_methods, new Comparator<ListenerMethodInfo>() {
-        @Override
-        public int compare(ListenerMethodInfo method_1, ListenerMethodInfo method_2) {
-          return method_1.getName().compareTo(method_2.getName());
-        }
-      });
-    }
-    return m_methods;
-  }
+	/**
+	 * @return the {@link ListenerMethodInfo}'s for each method in this listener.
+	 */
+	public List<ListenerMethodInfo> getMethods() {
+		if (m_methods == null) {
+			m_methods = Lists.newArrayList();
+			// prepare method information objects
+			for (Method method : m_interfaceType.getMethods()) {
+				if (isListenerMethod(method)) {
+					m_methods.add(new ListenerMethodInfo(this, method));
+				}
+			}
+			// sort by name
+			Collections.sort(m_methods, new Comparator<ListenerMethodInfo>() {
+				@Override
+				public int compare(ListenerMethodInfo method_1, ListenerMethodInfo method_2) {
+					return method_1.getName().compareTo(method_2.getName());
+				}
+			});
+		}
+		return m_methods;
+	}
 
-  /**
-   * @return <code>true</code> if given {@link Method} is valid handler for some event in listener.
-   */
-  private boolean isListenerMethod(Method method) {
-    if (method.isBridge()) {
-      return false;
-    }
-    if (ReflectionUtils.isAbstract(method)) {
-      return true;
-    }
-    if (method.getDeclaringClass() == m_interfaceType) {
-      return true;
-    }
-    return false;
-  }
+	/**
+	 * @return <code>true</code> if given {@link Method} is valid handler for some event in listener.
+	 */
+	private boolean isListenerMethod(Method method) {
+		if (method.isBridge()) {
+			return false;
+		}
+		if (ReflectionUtils.isAbstract(method)) {
+			return true;
+		}
+		if (method.getDeclaringClass() == m_interfaceType) {
+			return true;
+		}
+		return false;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Internal access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  static void useSimpleNamesWherePossible(List<ListenerInfo> listeners) {
-    // prepare map: simple name -> qualified names
-    Multimap<String, String> simplePropertyNames = HashMultimap.create();
-    for (ListenerInfo listener : listeners) {
-      String qualifiedName = listener.getName();
-      String simpleName = getSimpleName(qualifiedName);
-      simplePropertyNames.put(simpleName, qualifiedName);
-    }
-    // if simple name is unique, use it
-    for (ListenerInfo listener : listeners) {
-      String qualifiedName = listener.getName();
-      String simpleName = getSimpleName(qualifiedName);
-      if (simplePropertyNames.get(simpleName).size() == 1) {
-        listener.m_name = simpleName;
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Internal access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	static void useSimpleNamesWherePossible(List<ListenerInfo> listeners) {
+		// prepare map: simple name -> qualified names
+		Multimap<String, String> simplePropertyNames = HashMultimap.create();
+		for (ListenerInfo listener : listeners) {
+			String qualifiedName = listener.getName();
+			String simpleName = getSimpleName(qualifiedName);
+			simplePropertyNames.put(simpleName, qualifiedName);
+		}
+		// if simple name is unique, use it
+		for (ListenerInfo listener : listeners) {
+			String qualifiedName = listener.getName();
+			String simpleName = getSimpleName(qualifiedName);
+			if (simplePropertyNames.get(simpleName).size() == 1) {
+				listener.m_name = simpleName;
+			}
+		}
+	}
 
-  private static String getSimpleName(String qualifiedName) {
-    return StringUtils.substringBefore(qualifiedName, "(");
-  }
+	private static String getSimpleName(String qualifiedName) {
+		return StringUtils.substringBefore(qualifiedName, "(");
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/event/ListenerMethodInfo.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/event/ListenerMethodInfo.java
index 9829f6465..254db9f6f 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/event/ListenerMethodInfo.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/event/ListenerMethodInfo.java
@@ -26,100 +26,100 @@
  * @coverage core.model.property.events
  */
 final class ListenerMethodInfo {
-  private final ListenerInfo m_listener;
-  private final Method m_method;
-  private final String m_signature;
+	private final ListenerInfo m_listener;
+	private final Method m_method;
+	private final String m_signature;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ListenerMethodInfo(ListenerInfo listener, Method method) {
-    m_listener = listener;
-    m_method = method;
-    m_signature = ReflectionUtils.getMethodSignature(method);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ListenerMethodInfo(ListenerInfo listener, Method method) {
+		m_listener = listener;
+		m_method = method;
+		m_signature = ReflectionUtils.getMethodSignature(method);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the parent {@link ListenerInfo}.
-   */
-  public ListenerInfo getListener() {
-    return m_listener;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the parent {@link ListenerInfo}.
+	 */
+	public ListenerInfo getListener() {
+		return m_listener;
+	}
 
-  /**
-   * @return the reflection {@link Method}.
-   */
-  public Method getMethod() {
-    return m_method;
-  }
+	/**
+	 * @return the reflection {@link Method}.
+	 */
+	public Method getMethod() {
+		return m_method;
+	}
 
-  /**
-   * @return the signature of reflection {@link Method}.
-   */
-  public String getSignature() {
-    return m_signature;
-  }
+	/**
+	 * @return the signature of reflection {@link Method}.
+	 */
+	public String getSignature() {
+		return m_signature;
+	}
 
-  /**
-   * @return the name of this method.
-   */
-  public String getName() {
-    return m_method.getName();
-  }
+	/**
+	 * @return the name of this method.
+	 */
+	public String getName() {
+		return m_method.getName();
+	}
 
-  /**
-   * @return <code>true</code> if this {@link Method} is abstract.
-   */
-  public boolean isAbstract() {
-    return ReflectionUtils.isAbstract(m_method);
-  }
+	/**
+	 * @return <code>true</code> if this {@link Method} is abstract.
+	 */
+	public boolean isAbstract() {
+		return ReflectionUtils.isAbstract(m_method);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Generics utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the signature for method in AST. It may be different from {@link #getSignature()} if
-   *         listener type is generic.
-   */
-  public String getSignatureAST() {
-    String name = m_method.getName();
-    StringBuilder buffer = new StringBuilder();
-    buffer.append(name);
-    // types
-    buffer.append('(');
-    boolean firstParameter = true;
-    for (String parameterType : getActualParameterTypes()) {
-      // separator
-      if (firstParameter) {
-        firstParameter = false;
-      } else {
-        buffer.append(',');
-      }
-      // in AST signatures we don't use generics, so remove them
-      parameterType = StringUtils.substringBefore(parameterType, "<");
-      // append
-      buffer.append(parameterType);
-    }
-    buffer.append(')');
-    // done
-    return buffer.toString();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Generics utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the signature for method in AST. It may be different from {@link #getSignature()} if
+	 *         listener type is generic.
+	 */
+	public String getSignatureAST() {
+		String name = m_method.getName();
+		StringBuilder buffer = new StringBuilder();
+		buffer.append(name);
+		// types
+		buffer.append('(');
+		boolean firstParameter = true;
+		for (String parameterType : getActualParameterTypes()) {
+			// separator
+			if (firstParameter) {
+				firstParameter = false;
+			} else {
+				buffer.append(',');
+			}
+			// in AST signatures we don't use generics, so remove them
+			parameterType = StringUtils.substringBefore(parameterType, "<");
+			// append
+			buffer.append(parameterType);
+		}
+		buffer.append(')');
+		// done
+		return buffer.toString();
+	}
 
-  /**
-   * @return the actual parameter types of this method, as required by type arguments of listener.
-   */
-  public String[] getActualParameterTypes() {
-    Type[] genericTypes = m_method.getGenericParameterTypes();
-    GenericTypeResolver resolver = m_listener.getResolver();
-    return GenericsUtils.getTypeNames(resolver, genericTypes);
-  }
+	/**
+	 * @return the actual parameter types of this method, as required by type arguments of listener.
+	 */
+	public String[] getActualParameterTypes() {
+		Type[] genericTypes = m_method.getGenericParameterTypes();
+		GenericTypeResolver resolver = m_listener.getResolver();
+		return GenericsUtils.getTypeNames(resolver, genericTypes);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/event/ListenerMethodProperty.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/event/ListenerMethodProperty.java
index 487d86df9..f1881c782 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/event/ListenerMethodProperty.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/event/ListenerMethodProperty.java
@@ -80,936 +80,936 @@
  * @coverage core.model.property.events
  */
 final class ListenerMethodProperty extends AbstractEventProperty
-    implements
-      IPreferenceConstants,
-      IListenerMethodProperty {
-  private final IPreferenceStore m_preferences;
-  private final ListenerInfo m_listener;
-  private final ListenerMethodInfo m_method;
-  private final ListenerMethodProperty[] m_siblings;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ListenerMethodProperty(JavaInfo javaInfo,
-      ListenerInfo listener,
-      ListenerMethodInfo method,
-      ListenerMethodProperty[] siblings) {
-    super(javaInfo, getTitle(listener, method), ListenerMethodPropertyEditor.INSTANCE);
-    m_preferences = javaInfo.getDescription().getToolkit().getPreferences();
-    m_listener = listener;
-    m_method = method;
-    m_siblings = siblings;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Title
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the reduced title of {@link ListenerMethodInfo}, for example use "gained" instead of
-   *         "focusGained" for {@link FocusListener}.
-   */
-  private static String getTitle(ListenerInfo listener, ListenerMethodInfo method) {
-    String listenerTitle = listener.getName();
-    String methodTitle = method.getName();
-    if (methodTitle.startsWith(listenerTitle) && !methodTitle.equals(listenerTitle)) {
-      return StringUtils.uncapitalize(methodTitle.substring(listenerTitle.length()));
-    }
-    return methodTitle;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IProperty
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean isModified() throws Exception {
-    MethodDeclaration listenerMethod = findListenerMethod();
-    if (listenerMethod != null) {
-      if (hasStubRouting(listenerMethod)) {
-        return findStubMethod_orNull(listenerMethod) != null;
-      }
-      return true;
-    }
-    // no listener method
-    return false;
-  }
-
-  @Override
-  public void setValue(Object value) throws Exception {
-    Assert.isTrue(value == UNKNOWN_VALUE, "Unsupported value |%s|.", value);
-    ExecutionUtils.run(m_javaInfo, new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        removeListenerMethod();
-      }
-    });
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link ListenerInfo}.
-   */
-  public ListenerInfo getListener() {
-    return m_listener;
-  }
-
-  /**
-   * @return the {@link ListenerMethodInfo}.
-   */
-  public ListenerMethodInfo getMethod() {
-    return m_method;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Remove support
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Removes stub/handler for this listener method.
-   */
-  private void removeListenerMethod() throws Exception {
-    // prepare listener type
-    TypeDeclaration listenerType = findListenerType();
-    if (listenerType == null) {
-      return;
-    }
-    // prepare listener method
-    MethodDeclaration listenerMethod = findListenerMethod();
-    if (listenerMethod == null) {
-      return;
-    }
-    // if "listenerType" is "this" type, then we implement interface, so remove only stub
-    if (listenerType == JavaInfoUtils.getTypeDeclaration(m_javaInfo)) {
-      removeStubMethod(listenerMethod);
-      return;
-    }
-    // check that listener has adapter and adapter is used
-    if (m_listener.hasAdapter()
-        && AstNodeUtils.isSuccessorOf(
-            AstNodeUtils.getTypeBinding(listenerType),
-            m_listener.getAdapter())) {
-      // ask confirmation about method remove
-      if (!MessageDialog.openConfirm(
-          DesignerPlugin.getShell(),
-          ModelMessages.ListenerMethodProperty_deleteMethodTitle,
-          MessageFormat.format(
-              ModelMessages.ListenerMethodProperty_deleteMethodMessage,
-              m_method.getName()))) {
-        return;
-      }
-      // remove method
-      removeListenerMethod(listenerType, listenerMethod);
-    } else {
-      // ask confirmation about listener remove
-      if (!MessageDialog.openConfirm(
-          DesignerPlugin.getShell(),
-          ModelMessages.ListenerMethodProperty_deleteListenerTitle,
-          MessageFormat.format(
-              ModelMessages.ListenerMethodProperty_deleteListenerMessage,
-              m_listener.getName()))) {
-        return;
-      }
-      // remove listener
-      removeListener();
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Listener type support
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link TypeDeclaration} that handles this event listener.
-   */
-  TypeDeclaration findListenerType() {
-    Expression argument = getListenerExpression();
-    if (argument != null) {
-      // check for "this"
-      if (argument instanceof ThisExpression) {
-        return AstNodeUtils.getEnclosingType(argument);
-      }
-      // check for listener creation
-      if (argument instanceof ClassInstanceCreation) {
-        ClassInstanceCreation creation = (ClassInstanceCreation) argument;
-        // check for anonymous class
-        if (creation.getAnonymousClassDeclaration() != null) {
-          return AnonymousTypeDeclaration.create(creation.getAnonymousClassDeclaration());
-        }
-        // find inner type
-        return AstNodeUtils.getTypeDeclaration(creation);
-      }
-    }
-    // no listener found
-    return null;
-  }
-
-  /**
-   * @return the {@link Expression} that represents listener reference, may be creation
-   *         <code>new FocusListener()</code>, may be <code>this</code> reference, etc. May return
-   *         <code>null</code> if no listener yet.
-   */
-  private Expression getListenerExpression() {
-    Expression expression = getListenerExpression0();
-    if (expression != null) {
-      ExecutionFlowDescription flow = JavaInfoUtils.getState(m_javaInfo).getFlowDescription();
-      expression = ExecutionFlowUtils.getFinalExpression(flow, expression);
-    }
-    return expression;
-  }
-
-  /**
-   * @return the {@link Expression} used as direct argument for <code>addXListener()</code> or
-   *         constructor.
-   */
-  private Expression getListenerExpression0() {
-    String addListenerMethodSignature = m_listener.getMethodSignature();
-    // try to find listener adding
-    MethodInvocation invocation = m_javaInfo.getMethodInvocation(addListenerMethodSignature);
-    if (invocation != null) {
-      return (Expression) invocation.arguments().get(0);
-    }
-    // try to find listener in constructor
-    if (m_javaInfo.getCreationSupport() instanceof ConstructorCreationSupport) {
-      ConstructorCreationSupport creationSupport =
-          (ConstructorCreationSupport) m_javaInfo.getCreationSupport();
-      for (ParameterDescription parameter : creationSupport.getDescription().getParameters()) {
-        String listenerMethodTag = parameter.getTag("events: add listener method");
-        if (addListenerMethodSignature.equals(listenerMethodTag)) {
-          return DomGenerics.arguments(creationSupport.getCreation()).get(parameter.getIndex());
-        }
-      }
-    }
-    // no listener found
-    return null;
-  }
-
-  /**
-   * Removes the listener {@link TypeDeclaration} with all its methods and stubs (if enabled).
-   */
-  void removeListener() throws Exception {
-    // prepare listener TypeDeclaration now, when we have so reference on it via addXXXListener()
-    TypeDeclaration listenerType = findListenerType();
-    // delete inner or "simple"
-    if (listenerType != null && listenerType.getParent() instanceof TypeDeclaration) {
-      removeListener_inner(listenerType);
-    } else {
-      // remove stubs
-      if (m_preferences.getBoolean(P_DELETE_STUB)) {
-        removeListenerStubs();
-      }
-      // remove addXXXListener()
-      m_javaInfo.removeMethodInvocations(m_listener.getMethodSignature());
-    }
-    // refresh
-    ExecutionUtils.refresh(m_javaInfo);
-  }
-
-  /**
-   * Implementation of {@link #removeListener()} for inner type.
-   */
-  private void removeListener_inner(TypeDeclaration listenerType) throws Exception {
-    List<ClassInstanceCreation> listenerCreations =
-        AstNodeUtils.getClassInstanceCreations(listenerType);
-    boolean removeAllListenerArtifacts = true;
-    if (listenerCreations.size() > 1) {
-      if (m_javaInfo.isDeleting()) {
-        removeAllListenerArtifacts = false;
-      } else {
-        String message = MessageFormat.format(
-            ModelMessages.ListenerMethodProperty_deleteAllListenerUsagesMessage,
-            m_listener.getName());
-        if (!MessageDialog.openQuestion(
-            DesignerPlugin.getShell(),
-            ModelMessages.ListenerMethodProperty_deleteAllListenerUsagesTitle,
-            message)) {
-          removeAllListenerArtifacts = false;
-        }
-      }
-    }
-    // remove stubs
-    if (m_preferences.getBoolean(P_DELETE_STUB) && removeAllListenerArtifacts) {
-      removeListenerStubs();
-    }
-    // remove addXXXListener()
-    m_javaInfo.removeMethodInvocations(m_listener.getMethodSignature());
-    // remove also "inner" type
-    if (removeAllListenerArtifacts) {
-      for (ClassInstanceCreation classInstanceCreation : listenerCreations) {
-        m_javaInfo.getEditor().removeEnclosingStatement(classInstanceCreation);
-      }
-      m_javaInfo.getEditor().removeBodyDeclaration(listenerType);
-    }
-  }
-
-  /**
-   * Removes stubs for this {@link ListenerInfo}.
-   */
-  private void removeListenerStubs() throws Exception {
-    for (ListenerMethodProperty property : m_siblings) {
-      MethodDeclaration listenerMethod = property.findListenerMethod();
-      if (listenerMethod != null) {
-        property.removeStubMethod(listenerMethod);
-      }
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Inner class
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link BodyDeclarationTarget} for adding new inner class listener.
-   */
-  private BodyDeclarationTarget getListenerInnerClassTarget() {
-    int position = m_preferences.getInt(P_INNER_POSITION);
-    TypeDeclaration typeDeclaration = JavaInfoUtils.getTypeDeclaration(m_javaInfo);
-    List<BodyDeclaration> declarations = DomGenerics.bodyDeclarations(typeDeclaration);
-    // first declaration
-    if (position == V_INNER_FIRST) {
-      return new BodyDeclarationTarget(typeDeclaration, true);
-    }
-    // last declaration
-    if (position == V_INNER_LAST) {
-      return new BodyDeclarationTarget(typeDeclaration, false);
-    }
-    // before first listener, or first declaration
-    if (position == V_INNER_BEFORE) {
-      // try to find first existing inner listener class
-      for (BodyDeclaration declaration : declarations) {
-        if (declaration instanceof TypeDeclaration) {
-          ITypeBinding binding = AstNodeUtils.getTypeBinding((TypeDeclaration) declaration);
-          if (AstNodeUtils.isSuccessorOf(binding, "java.util.EventListener")) {
-            return new BodyDeclarationTarget(declaration, true);
-          }
-        }
-      }
-      // by default as first declaration
-      return new BodyDeclarationTarget(typeDeclaration, true);
-    }
-    // after last listener, or last declaration
-    if (position == V_INNER_AFTER) {
-      // by default as last declaration
-      BodyDeclarationTarget target = new BodyDeclarationTarget(typeDeclaration, false);
-      // try to find last existing inner class listener
-      for (BodyDeclaration declaration : declarations) {
-        if (declaration instanceof TypeDeclaration) {
-          ITypeBinding binding = AstNodeUtils.getTypeBinding((TypeDeclaration) declaration);
-          if (AstNodeUtils.isSuccessorOf(binding, "java.util.EventListener")) {
-            target = new BodyDeclarationTarget(declaration, false);
-          }
-        }
-      }
-      //
-      return target;
-    }
-    //
-    throw new IllegalArgumentException("Unknown position for inner class: " + position);
-  }
-
-  /**
-   * @return the new inner {@link TypeDeclaration} for event listener.
-   */
-  private TypeDeclaration addListenerInnerClassDeclaration() throws Exception {
-    // prepare target
-    BodyDeclarationTarget target = getListenerInnerClassTarget();
-    // prepare header
-    String headerSource;
-    if (m_listener.hasAdapter()) {
-      headerSource = " extends " + m_listener.getAdapter().getCanonicalName();
-    } else {
-      Class<?> listenerType = m_listener.getInterface();
-      if (listenerType.isInterface()) {
-        headerSource = " implements " + getListenerTypeNameSource();
-      } else {
-        headerSource = " extends " + getListenerTypeNameSource();
-      }
-    }
-    // add inner class
-    List<String> lines =
-        ImmutableList.of("private class " + createInnerClassName() + headerSource + " {", "}");
-    return m_javaInfo.getEditor().addTypeDeclaration(lines, target);
-  }
-
-  /**
-   * @return the unique name of inner {@link TypeDeclaration} for event listener.
-   */
-  private String createInnerClassName() {
-    Map<String, String> valueMap = Maps.newTreeMap();
-    {
-      String componentName = getComponentName(m_javaInfo);
-      valueMap.put("component_name", componentName);
-      valueMap.put("Component_name", StringUtils.capitalize(componentName));
-      //
-      String componentType =
-          CodeUtils.getShortClass(m_javaInfo.getDescription().getComponentClass().getName());
-      valueMap.put("component_className", componentType);
-      valueMap.put("Component_className", StringUtils.capitalize(componentType));
-      //
-      String listenerMethodName =
-          CodeUtils.getShortClass(m_listener.getInterface().getCanonicalName());
-      valueMap.put("listener_className", listenerMethodName);
-      valueMap.put("Listener_className", StringUtils.capitalize(listenerMethodName));
-      //
-      String listenerName = m_listener.getSimpleName();
-      valueMap.put("listener_name", listenerName);
-      valueMap.put("Listener_name", StringUtils.capitalize(listenerName));
-    }
-    // generate base name
-    String template = m_preferences.getString(P_INNER_NAME_TEMPLATE);
-    String baseName = StrSubstitutor.replace(template, valueMap);
-    // generate unique name
-    return m_javaInfo.getEditor().getUniqueTypeName(baseName);
-  }
-
-  /**
-   * @return the name of host {@link JavaInfo}.
-   */
-  private static String getComponentName(JavaInfo javaInfo) {
-    return javaInfo.getVariableSupport().getComponentName();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Listener method support
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the listener method. If there are no such method, creates it.
-   */
-  private MethodDeclaration ensureListenerMethod() throws Exception {
-    MethodDeclaration listenerMethod = findListenerMethod();
-    if (listenerMethod == null) {
-      // ensure listener type
-      TypeDeclaration listenerType = findListenerType();
-      if (listenerType == null) {
-        boolean implementInterfaceMethods = !m_listener.hasAdapter();
-        int eventCodeType = m_preferences.getInt(P_CODE_TYPE);
-        if (eventCodeType == V_CODE_ANONYMOUS) {
-          // prepare listener source
-          String source = "new " + getListenerTypeNameSource() + "() {\n}";
-          // add listener and get added listener type
-          m_javaInfo.addMethodInvocation(m_listener.getMethodSignature(), source);
-          listenerType = findListenerType();
-        } else if (eventCodeType == V_CODE_INNER_CLASS) {
-          // add listener inner class
-          listenerType = addListenerInnerClassDeclaration();
-          // use listener
-          String source = "new " + listenerType.getName().getIdentifier() + "()";
-          m_javaInfo.addMethodInvocation(m_listener.getMethodSignature(), source);
-        } else if (eventCodeType == V_CODE_INTERFACE) {
-          // prepare listener type
-          listenerType = JavaInfoUtils.getTypeDeclaration(m_javaInfo);
-          implementInterfaceMethods = m_javaInfo.getEditor().ensureInterfaceImplementation(
-              listenerType,
-              m_listener.getInterface().getCanonicalName());
-          // add listener
-          m_javaInfo.addMethodInvocation(m_listener.getMethodSignature(), "this");
-        }
-        // implement all methods, if there are no adapter
-        if (implementInterfaceMethods) {
-          List<ListenerMethodInfo> interfaceMethods = m_listener.getMethods();
-          for (ListenerMethodInfo interfaceMethodInfo : interfaceMethods) {
-            if (interfaceMethodInfo.isAbstract()) {
-              addListenerMethod(listenerType, interfaceMethodInfo);
-            }
-          }
-        }
-      }
-      // ensure listener method
-      {
-        listenerMethod = findListenerMethod();
-        if (listenerMethod == null) {
-          listenerMethod = addListenerMethod(listenerType, m_method);
-        }
-      }
-    }
-    // return listener method
-    return listenerMethod;
-  }
-
-  /**
-   * @return the name of listener type, including generic arguments.
-   */
-  private String getListenerTypeNameSource() {
-    // simple case - no generics
-    {
-      Class<?> listenerType = m_listener.getListenerType();
-      if (listenerType.getTypeParameters().length == 0) {
-        return listenerType.getCanonicalName();
-      }
-    }
-    // listener with generics
-    Type listenerType = m_listener.getMethod().getGenericParameterTypes()[0];
-    GenericTypeResolver resolver_2 = m_listener.getResolver();
-    return GenericsUtils.getTypeName(resolver_2, listenerType);
-  }
-
-  /**
-   * Adds listener method for given {@link ListenerMethodInfo} in given {@link TypeDeclaration}.
-   */
-  private MethodDeclaration addListenerMethod(TypeDeclaration typeDeclaration,
-      ListenerMethodInfo methodInfo) throws Exception {
-    AstEditor editor = m_javaInfo.getEditor();
-    // prepare annotations
-    List<String> annotations = Lists.newArrayList();
-    if (shouldAppendOverride(typeDeclaration, methodInfo)) {
-      annotations.add("@Override");
-    }
-    // prepare parameter names
-    String[] parameterNames = null;
-    {
-      String listenerTypeName = m_listener.getListenerType().getCanonicalName();
-      IType listenerType = editor.getJavaProject().findType(listenerTypeName);
-      IMethod listenerMethod = CodeUtils.findMethod(listenerType, methodInfo.getSignature());
-      parameterNames = listenerMethod.getParameterNames();
-    }
-    // prepare header code
-    String headerCode;
-    {
-      // prepare parameters
-      String parametersCode = "";
-      {
-        String[] parameterTypes = methodInfo.getActualParameterTypes();
-        for (int i = 0; i < parameterTypes.length; i++) {
-          String parameterType = parameterTypes[i];
-          // comma
-          if (parametersCode.length() != 0) {
-            parametersCode += ", ";
-          }
-          // append type
-          if (m_preferences.getBoolean(P_FINAL_PARAMETERS)) {
-            parametersCode += "final ";
-          }
-          parametersCode += parameterType;
-          parametersCode += " ";
-          // append name
-          parametersCode += parameterNames[i];
-        }
-      }
-      // prepare full header code
-      headerCode = "public "
-          + methodInfo.getMethod().getReturnType().getName()
-          + " "
-          + methodInfo.getName()
-          + "("
-          + parametersCode
-          + ")";
-    }
-    // prepare body
-    List<String> bodyLines = getListenerMethodBody(methodInfo);
-    // add method
-    BodyDeclarationTarget target = new BodyDeclarationTarget(typeDeclaration, false);
-    if (target.getType() == null && target.getDeclaration() == null) {
-      // No code for this method
-      return null;
-    }
-    return editor.addMethodDeclaration(annotations, headerCode, bodyLines, target);
-  }
-
-  /**
-   * In Java5 we should append "@Override" annotation when override adapter methods.
-   */
-  private boolean shouldAppendOverride(TypeDeclaration type, ListenerMethodInfo method)
-      throws Exception {
-    IJavaProject javaProject = m_javaInfo.getEditor().getJavaProject();
-    ListenerInfo listener = method.getListener();
-    if (ProjectUtils.isJDK15(javaProject) && listener.hasAdapter()) {
-      ITypeBinding typeBinding = AstNodeUtils.getTypeBinding(type);
-      ITypeBinding superTypeBinding = typeBinding.getSuperclass();
-      return AstNodeUtils.isSuccessorOf(superTypeBinding, listener.getAdapter());
-    }
-    return false;
-  }
-
-  /**
-   * Sometimes we need to tweak it, for example in GWT for TabPanel and
-   * TabListener.onBeforeTabSelected we should return <code>true</code>, not <code>false</code> as
-   * we do in general case.
-   *
-   * @param methodInfo
-   *
-   * @return body of listener method
-   */
-  private static List<String> getListenerMethodBody(ListenerMethodInfo methodInfo) {
-    Class<?> returnType = methodInfo.getMethod().getReturnType();
-    if (returnType == Void.TYPE) {
-      return ImmutableList.of();
-    } else {
-      String defaultValue = AstParser.getDefaultValue(returnType.getName());
-      return ImmutableList.of("return " + defaultValue + ";");
-    }
-  }
-
-  /**
-   * Removes listener method, can be used only if listener has adapter.
-   */
-  private void removeListenerMethod(TypeDeclaration typeDeclaration,
-      MethodDeclaration listenerMethod) throws Exception {
-    AstEditor editor = m_javaInfo.getEditor();
-    // remove stub, called from listener method
-    removeStubMethod(listenerMethod);
-    // remove listener method itself
-    editor.removeBodyDeclaration(listenerMethod);
-    // remove listener if we don't have methods
-    if (typeDeclaration.bodyDeclarations().isEmpty()) {
-      removeListener();
-    }
-  }
-
-  /**
-   * Removes stub method for given listener method.
-   * <p>
-   * When we use {@link IPreferenceConstants#V_CODE_INTERFACE} code style, we can not remove
-   * listener method itself, instead we should remove stub method and its invocation from listener
-   * method.
-   */
-  private void removeStubMethod(MethodDeclaration listenerMethod) throws Exception {
-    MethodDeclaration stubMethod = findStubMethod_orNull(listenerMethod);
-    if (stubMethod != null) {
-      AstEditor editor = m_javaInfo.getEditor();
-      // remove stub invocations
-      boolean canDeleteStub = true;
-      for (MethodInvocation invocation : AstNodeUtils.getMethodInvocations(stubMethod)) {
-        Statement statement = AstNodeUtils.getEnclosingStatement(invocation);
-        if (AstNodeUtils.getEnclosingMethod(statement) == listenerMethod) {
-          if (statement.getParent() instanceof IfStatement) {
-            statement = (Statement) statement.getParent();
-          } else if (statement.getParent() instanceof Block
-              && statement.getParent().getParent() instanceof IfStatement) {
-            statement = (Statement) statement.getParent().getParent();
-          }
-          editor.removeStatement(statement);
-        } else {
-          canDeleteStub = false;
-        }
-      }
-      // remove stub method
-      if (canDeleteStub) {
-        editor.removeBodyDeclaration(stubMethod);
-      }
-    }
-  }
-
-  /**
-   * @return the listener method in event listener.
-   */
-  private MethodDeclaration findListenerMethod() {
-    TypeDeclaration listenerType = findListenerType();
-    if (listenerType != null) {
-      return AstNodeUtils.getMethodBySignature(listenerType, m_method.getSignatureAST());
-    }
-    return null;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Stub method support
-  //
-  // Stub method is method that really handles event. We can generate anonymous
-  // classes that just calls stub methods from its methods.
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Opens stub method (or listener method if there are no stub method).
-   */
-  @Override
-  public void openStubMethod() throws Exception {
-    // prepare method as listener method or stub method
-    MethodDeclaration method = findStubMethod();
-    if (method == null) {
-      method = ExecutionUtils.runObject(m_javaInfo, new RunnableObjectEx<MethodDeclaration>() {
-        @Override
-        public MethodDeclaration runObject() throws Exception {
-          return ensureStubMethod();
-        }
-      });
-    }
-    // open method
-    JavaInfoUtils.scheduleOpenNode(m_javaInfo, method);
-  }
-
-  /**
-   * @return the stub method (if enabled), or listener method. If there are no such method, creates
-   *         it.
-   */
-  private MethodDeclaration ensureStubMethod() throws Exception {
-    MethodDeclaration listenerMethod = ensureListenerMethod();
-    // create stub, if needed
-    if (m_preferences.getBoolean(P_CREATE_STUB)) {
-      MethodDeclaration stubMethod = findStubMethod_orNull(listenerMethod);
-      if (stubMethod == null) {
-        stubMethod = addStubMethod(m_method, listenerMethod);
-      }
-      return stubMethod;
-    }
-    // no need to stub, so return listener method
-    return listenerMethod;
-  }
-
-  /**
-   * Adds the stub method and its invocation from given listener method.
-   */
-  private MethodDeclaration addStubMethod(ListenerMethodInfo methodInfo,
-      MethodDeclaration listenerMethod) throws Exception {
-    AstEditor editor = m_javaInfo.getEditor();
-    // don't use stub for inner listener
-    if (listenerMethod.getParent().getParent() instanceof TypeDeclaration) {
-      return listenerMethod;
-    }
-    // prepare stub name/signature
-    String stubMethodName = getStubMethodName(methodInfo);
-    String signature;
-    {
-      signature = methodInfo.getSignature();
-      signature = StringUtils.replace(signature, methodInfo.getName(), stubMethodName);
-    }
-    // add stub method declaration
-    MethodDeclaration stubMethod;
-    {
-      TypeDeclaration typeDeclaration = JavaInfoUtils.getTypeDeclaration(m_javaInfo);
-      // try to find existing stub method
-      stubMethod = AstNodeUtils.getMethodBySignature(typeDeclaration, signature);
-      // add stub method declaration
-      if (stubMethod == null) {
-        // prepare modifiers
-        String modifiers;
-        {
-          boolean isStaticContext;
-          {
-            ExecutionFlowDescription flowDescription = EditorState.get(editor).getFlowDescription();
-            isStaticContext = flowDescription.isStatic();
-          }
-          if (isStaticContext) {
-            modifiers = "protected static ";
-          } else {
-            modifiers = "protected ";
-          }
-        }
-        // prepare header
-        String header = modifiers
-            + "void "
-            + stubMethodName
-            + "("
-            + editor.getParametersSource(listenerMethod)
-            + ")";
-        // add stub method
-        stubMethod = editor.addMethodDeclaration(
-            header,
-            ImmutableList.<String>of(),
-            new BodyDeclarationTarget(typeDeclaration, false));
-      }
-    }
-    // add invocation for stub method from listener method
-    {
-      String lineInvoke = stubMethodName
-          + "("
-          + StringUtils.join(editor.getParameterNames(listenerMethod), ", ")
-          + ");";
-      // prepare source for stub invocation Statement
-      List<String> lines;
-      if (m_preferences.getInt(P_CODE_TYPE) == V_CODE_INTERFACE) {
-        lines = getConditionalStubInvocationSource(listenerMethod, editor, lineInvoke);
-      } else {
-        lines = ImmutableList.of(lineInvoke);
-      }
-      // add Statement that invokes stub
-      if (lines != null) {
-        StatementTarget target = new StatementTarget(listenerMethod, true);
-        TemplateUtils.addStatement(m_javaInfo, target, lines);
-      }
-    }
-    // OK, we've added stub method
-    return stubMethod;
-  }
-
-  /**
-   * <pre>
-   *   if (event.getSource() == m_myComponent) {
-   *     do_myComponent_keyPressed(event);
-   *   }
-   * </pre>
-   *
-   * @return lines for conditional stub invocation.
-   */
-  private List<String> getConditionalStubInvocationSource(MethodDeclaration listenerMethod,
-      final AstEditor editor,
-      String lineInvoke) throws Exception {
-    List<SingleVariableDeclaration> parameters = DomGenerics.parameters(listenerMethod);
-    for (final SingleVariableDeclaration parameter : parameters) {
-      // try to load ComponentDescription for listener method parameter
-      ComponentDescription eventClassDescription =
-          ExecutionUtils.runObjectIgnore(new RunnableObjectEx<ComponentDescription>() {
-            @Override
-            public ComponentDescription runObject() throws Exception {
-              ClassLoader editorLoader = EditorState.get(editor).getEditorLoader();
-              String parameterTypeName =
-                  AstNodeUtils.getFullyQualifiedName(parameter.getType(), true);
-              Class<?> parameterType =
-                  ReflectionUtils.getClassByName(editorLoader, parameterTypeName);
-              return ComponentDescriptionHelper.getDescription(editor, parameterType);
-            }
-          }, null);
-      // invoke stub only if we can check for our component
-      if (eventClassDescription != null) {
-        String componentAccess =
-            eventClassDescription.getParameter("eventsProperty.componentAccess");
-        if (componentAccess != null) {
-          String lineIf = TemplateUtils.format(
-              "if ({0}{1} == {2}) '{'",
-              parameter.getName().getIdentifier(),
-              componentAccess,
-              m_javaInfo);
-          return ImmutableList.of(lineIf, "\t" + lineInvoke, "}");
-        }
-      }
-    }
-    // no parameter with "component" access
-    return null;
-  }
-
-  /**
-   * @return the name of the stub method.
-   */
-  private String getStubMethodName(ListenerMethodInfo methodInfo) {
-    Map<String, String> valueMap = Maps.newTreeMap();
-    {
-      String componentName = getComponentName(m_javaInfo);
-      valueMap.put("component_name", componentName);
-      valueMap.put("Component_name", StringUtils.capitalize(componentName));
-      //
-      String componentType =
-          CodeUtils.getShortClass(m_javaInfo.getDescription().getComponentClass().getName());
-      valueMap.put("component_class_name", componentType);
-      valueMap.put("Component_class_name", StringUtils.capitalize(componentType));
-      //
-      String methodName = methodInfo.getName();
-      valueMap.put("event_name", methodName);
-      valueMap.put("Event_name", StringUtils.capitalize(methodName));
-    }
-    //
-    String template = m_preferences.getString(P_STUB_NAME_TEMPLATE);
-    return StrSubstitutor.replace(template, valueMap);
-  }
-
-  /**
-   * @return the stub method.
-   */
-  MethodDeclaration findStubMethod() {
-    MethodDeclaration listenerMethod = findListenerMethod();
-    return findStubMethod(listenerMethod);
-  }
-
-  /**
-   * @return the stub method for given listener method.
-   */
-  private MethodDeclaration findStubMethod(MethodDeclaration listenerMethod) {
-    // try to find stub method
-    MethodDeclaration stubMethod = findStubMethod_orNull(listenerMethod);
-    if (stubMethod != null) {
-      return stubMethod;
-    }
-    // use listener method, if no stub
-    return listenerMethod;
-  }
-
-  /**
-   * @return the stub method for given listener method, or <code>null</code> if listener method has
-   *         no stub.
-   */
-  private MethodDeclaration findStubMethod_orNull(MethodDeclaration listenerMethod) {
-    if (listenerMethod == null) {
-      return null;
-    }
-    // direct stub method
-    {
-      MethodDeclaration stubMethod = findStubMethod(listenerMethod.getBody());
-      if (stubMethod != null) {
-        return stubMethod;
-      }
-    }
-    // conditional stub method (for "this" listener)
-    List<Statement> statements = DomGenerics.statements(listenerMethod.getBody());
-    for (Statement statement : statements) {
-      if (statement instanceof IfStatement) {
-        IfStatement ifStatement = (IfStatement) statement;
-        if (ifStatement.getExpression() instanceof InfixExpression) {
-          InfixExpression condition = (InfixExpression) ifStatement.getExpression();
-          if (condition.getOperator() == InfixExpression.Operator.EQUALS
-              && m_javaInfo.isRepresentedBy(condition.getRightOperand())) {
-            Statement thenStatement = ifStatement.getThenStatement();
-            MethodDeclaration stubMethod = findStubMethod(thenStatement);
-            if (stubMethod != null) {
-              return stubMethod;
-            }
-            break;
-          }
-        }
-      }
-    }
-    // no stub
-    return null;
-  }
-
-  /**
-   * @param listenerStatement
-   *          the {@link Statement} that invokes stub method, may be {@link Block} with single other
-   *          {@link Statement}.
-   *
-   * @return the stub {@link MethodDeclaration}, invoked by given {@link Statement}, or
-   *         <code>null</code> if no stub invocation found.
-   */
-  private MethodDeclaration findStubMethod(Statement listenerStatement) {
-    List<Statement> statements;
-    if (listenerStatement instanceof Block) {
-      statements = DomGenerics.statements((Block) listenerStatement);
-    } else {
-      statements = ImmutableList.of(listenerStatement);
-    }
-    // analyze statements
-    if (statements.size() == 1) {
-      Statement statement = statements.get(0);
-      if (statement instanceof ExpressionStatement) {
-        ExpressionStatement expressionStatement = (ExpressionStatement) statement;
-        if (expressionStatement.getExpression() instanceof MethodInvocation) {
-          MethodInvocation invocation = (MethodInvocation) expressionStatement.getExpression();
-          TypeDeclaration typeDeclaration = JavaInfoUtils.getTypeDeclaration(m_javaInfo);
-          String methodSignature = AstNodeUtils.getMethodSignature(invocation);
-          return AstNodeUtils.getMethodBySignature(typeDeclaration, methodSignature);
-        }
-      }
-    }
-    // no stub
-    return null;
-  }
-
-  /**
-   * @return <code>true</code> if given listener method has {@link IfStatement} that routes
-   *         execution flow into some stub method.
-   */
-  private static boolean hasStubRouting(MethodDeclaration listenerMethod) {
-    List<Statement> statements = DomGenerics.statements(listenerMethod.getBody());
-    if (!statements.isEmpty() && statements.get(0) instanceof IfStatement) {
-      IfStatement ifStatement = (IfStatement) statements.get(0);
-      if (ifStatement.getExpression() instanceof InfixExpression) {
-        InfixExpression condition = (InfixExpression) ifStatement.getExpression();
-        if (condition.getOperator() == InfixExpression.Operator.EQUALS) {
-          return true;
-        }
-      }
-    }
-    return false;
-  }
+implements
+IPreferenceConstants,
+IListenerMethodProperty {
+	private final IPreferenceStore m_preferences;
+	private final ListenerInfo m_listener;
+	private final ListenerMethodInfo m_method;
+	private final ListenerMethodProperty[] m_siblings;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ListenerMethodProperty(JavaInfo javaInfo,
+			ListenerInfo listener,
+			ListenerMethodInfo method,
+			ListenerMethodProperty[] siblings) {
+		super(javaInfo, getTitle(listener, method), ListenerMethodPropertyEditor.INSTANCE);
+		m_preferences = javaInfo.getDescription().getToolkit().getPreferences();
+		m_listener = listener;
+		m_method = method;
+		m_siblings = siblings;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Title
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the reduced title of {@link ListenerMethodInfo}, for example use "gained" instead of
+	 *         "focusGained" for {@link FocusListener}.
+	 */
+	private static String getTitle(ListenerInfo listener, ListenerMethodInfo method) {
+		String listenerTitle = listener.getName();
+		String methodTitle = method.getName();
+		if (methodTitle.startsWith(listenerTitle) && !methodTitle.equals(listenerTitle)) {
+			return StringUtils.uncapitalize(methodTitle.substring(listenerTitle.length()));
+		}
+		return methodTitle;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IProperty
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean isModified() throws Exception {
+		MethodDeclaration listenerMethod = findListenerMethod();
+		if (listenerMethod != null) {
+			if (hasStubRouting(listenerMethod)) {
+				return findStubMethod_orNull(listenerMethod) != null;
+			}
+			return true;
+		}
+		// no listener method
+		return false;
+	}
+
+	@Override
+	public void setValue(Object value) throws Exception {
+		Assert.isTrue(value == UNKNOWN_VALUE, "Unsupported value |%s|.", value);
+		ExecutionUtils.run(m_javaInfo, new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				removeListenerMethod();
+			}
+		});
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link ListenerInfo}.
+	 */
+	public ListenerInfo getListener() {
+		return m_listener;
+	}
+
+	/**
+	 * @return the {@link ListenerMethodInfo}.
+	 */
+	public ListenerMethodInfo getMethod() {
+		return m_method;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Remove support
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Removes stub/handler for this listener method.
+	 */
+	private void removeListenerMethod() throws Exception {
+		// prepare listener type
+		TypeDeclaration listenerType = findListenerType();
+		if (listenerType == null) {
+			return;
+		}
+		// prepare listener method
+		MethodDeclaration listenerMethod = findListenerMethod();
+		if (listenerMethod == null) {
+			return;
+		}
+		// if "listenerType" is "this" type, then we implement interface, so remove only stub
+		if (listenerType == JavaInfoUtils.getTypeDeclaration(m_javaInfo)) {
+			removeStubMethod(listenerMethod);
+			return;
+		}
+		// check that listener has adapter and adapter is used
+		if (m_listener.hasAdapter()
+				&& AstNodeUtils.isSuccessorOf(
+						AstNodeUtils.getTypeBinding(listenerType),
+						m_listener.getAdapter())) {
+			// ask confirmation about method remove
+			if (!MessageDialog.openConfirm(
+					DesignerPlugin.getShell(),
+					ModelMessages.ListenerMethodProperty_deleteMethodTitle,
+					MessageFormat.format(
+							ModelMessages.ListenerMethodProperty_deleteMethodMessage,
+							m_method.getName()))) {
+				return;
+			}
+			// remove method
+			removeListenerMethod(listenerType, listenerMethod);
+		} else {
+			// ask confirmation about listener remove
+			if (!MessageDialog.openConfirm(
+					DesignerPlugin.getShell(),
+					ModelMessages.ListenerMethodProperty_deleteListenerTitle,
+					MessageFormat.format(
+							ModelMessages.ListenerMethodProperty_deleteListenerMessage,
+							m_listener.getName()))) {
+				return;
+			}
+			// remove listener
+			removeListener();
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Listener type support
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link TypeDeclaration} that handles this event listener.
+	 */
+	TypeDeclaration findListenerType() {
+		Expression argument = getListenerExpression();
+		if (argument != null) {
+			// check for "this"
+			if (argument instanceof ThisExpression) {
+				return AstNodeUtils.getEnclosingType(argument);
+			}
+			// check for listener creation
+			if (argument instanceof ClassInstanceCreation) {
+				ClassInstanceCreation creation = (ClassInstanceCreation) argument;
+				// check for anonymous class
+				if (creation.getAnonymousClassDeclaration() != null) {
+					return AnonymousTypeDeclaration.create(creation.getAnonymousClassDeclaration());
+				}
+				// find inner type
+				return AstNodeUtils.getTypeDeclaration(creation);
+			}
+		}
+		// no listener found
+		return null;
+	}
+
+	/**
+	 * @return the {@link Expression} that represents listener reference, may be creation
+	 *         <code>new FocusListener()</code>, may be <code>this</code> reference, etc. May return
+	 *         <code>null</code> if no listener yet.
+	 */
+	private Expression getListenerExpression() {
+		Expression expression = getListenerExpression0();
+		if (expression != null) {
+			ExecutionFlowDescription flow = JavaInfoUtils.getState(m_javaInfo).getFlowDescription();
+			expression = ExecutionFlowUtils.getFinalExpression(flow, expression);
+		}
+		return expression;
+	}
+
+	/**
+	 * @return the {@link Expression} used as direct argument for <code>addXListener()</code> or
+	 *         constructor.
+	 */
+	private Expression getListenerExpression0() {
+		String addListenerMethodSignature = m_listener.getMethodSignature();
+		// try to find listener adding
+		MethodInvocation invocation = m_javaInfo.getMethodInvocation(addListenerMethodSignature);
+		if (invocation != null) {
+			return (Expression) invocation.arguments().get(0);
+		}
+		// try to find listener in constructor
+		if (m_javaInfo.getCreationSupport() instanceof ConstructorCreationSupport) {
+			ConstructorCreationSupport creationSupport =
+					(ConstructorCreationSupport) m_javaInfo.getCreationSupport();
+			for (ParameterDescription parameter : creationSupport.getDescription().getParameters()) {
+				String listenerMethodTag = parameter.getTag("events: add listener method");
+				if (addListenerMethodSignature.equals(listenerMethodTag)) {
+					return DomGenerics.arguments(creationSupport.getCreation()).get(parameter.getIndex());
+				}
+			}
+		}
+		// no listener found
+		return null;
+	}
+
+	/**
+	 * Removes the listener {@link TypeDeclaration} with all its methods and stubs (if enabled).
+	 */
+	void removeListener() throws Exception {
+		// prepare listener TypeDeclaration now, when we have so reference on it via addXXXListener()
+		TypeDeclaration listenerType = findListenerType();
+		// delete inner or "simple"
+		if (listenerType != null && listenerType.getParent() instanceof TypeDeclaration) {
+			removeListener_inner(listenerType);
+		} else {
+			// remove stubs
+			if (m_preferences.getBoolean(P_DELETE_STUB)) {
+				removeListenerStubs();
+			}
+			// remove addXXXListener()
+			m_javaInfo.removeMethodInvocations(m_listener.getMethodSignature());
+		}
+		// refresh
+		ExecutionUtils.refresh(m_javaInfo);
+	}
+
+	/**
+	 * Implementation of {@link #removeListener()} for inner type.
+	 */
+	private void removeListener_inner(TypeDeclaration listenerType) throws Exception {
+		List<ClassInstanceCreation> listenerCreations =
+				AstNodeUtils.getClassInstanceCreations(listenerType);
+		boolean removeAllListenerArtifacts = true;
+		if (listenerCreations.size() > 1) {
+			if (m_javaInfo.isDeleting()) {
+				removeAllListenerArtifacts = false;
+			} else {
+				String message = MessageFormat.format(
+						ModelMessages.ListenerMethodProperty_deleteAllListenerUsagesMessage,
+						m_listener.getName());
+				if (!MessageDialog.openQuestion(
+						DesignerPlugin.getShell(),
+						ModelMessages.ListenerMethodProperty_deleteAllListenerUsagesTitle,
+						message)) {
+					removeAllListenerArtifacts = false;
+				}
+			}
+		}
+		// remove stubs
+		if (m_preferences.getBoolean(P_DELETE_STUB) && removeAllListenerArtifacts) {
+			removeListenerStubs();
+		}
+		// remove addXXXListener()
+		m_javaInfo.removeMethodInvocations(m_listener.getMethodSignature());
+		// remove also "inner" type
+		if (removeAllListenerArtifacts) {
+			for (ClassInstanceCreation classInstanceCreation : listenerCreations) {
+				m_javaInfo.getEditor().removeEnclosingStatement(classInstanceCreation);
+			}
+			m_javaInfo.getEditor().removeBodyDeclaration(listenerType);
+		}
+	}
+
+	/**
+	 * Removes stubs for this {@link ListenerInfo}.
+	 */
+	private void removeListenerStubs() throws Exception {
+		for (ListenerMethodProperty property : m_siblings) {
+			MethodDeclaration listenerMethod = property.findListenerMethod();
+			if (listenerMethod != null) {
+				property.removeStubMethod(listenerMethod);
+			}
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Inner class
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link BodyDeclarationTarget} for adding new inner class listener.
+	 */
+	private BodyDeclarationTarget getListenerInnerClassTarget() {
+		int position = m_preferences.getInt(P_INNER_POSITION);
+		TypeDeclaration typeDeclaration = JavaInfoUtils.getTypeDeclaration(m_javaInfo);
+		List<BodyDeclaration> declarations = DomGenerics.bodyDeclarations(typeDeclaration);
+		// first declaration
+		if (position == V_INNER_FIRST) {
+			return new BodyDeclarationTarget(typeDeclaration, true);
+		}
+		// last declaration
+		if (position == V_INNER_LAST) {
+			return new BodyDeclarationTarget(typeDeclaration, false);
+		}
+		// before first listener, or first declaration
+		if (position == V_INNER_BEFORE) {
+			// try to find first existing inner listener class
+			for (BodyDeclaration declaration : declarations) {
+				if (declaration instanceof TypeDeclaration) {
+					ITypeBinding binding = AstNodeUtils.getTypeBinding((TypeDeclaration) declaration);
+					if (AstNodeUtils.isSuccessorOf(binding, "java.util.EventListener")) {
+						return new BodyDeclarationTarget(declaration, true);
+					}
+				}
+			}
+			// by default as first declaration
+			return new BodyDeclarationTarget(typeDeclaration, true);
+		}
+		// after last listener, or last declaration
+		if (position == V_INNER_AFTER) {
+			// by default as last declaration
+			BodyDeclarationTarget target = new BodyDeclarationTarget(typeDeclaration, false);
+			// try to find last existing inner class listener
+			for (BodyDeclaration declaration : declarations) {
+				if (declaration instanceof TypeDeclaration) {
+					ITypeBinding binding = AstNodeUtils.getTypeBinding((TypeDeclaration) declaration);
+					if (AstNodeUtils.isSuccessorOf(binding, "java.util.EventListener")) {
+						target = new BodyDeclarationTarget(declaration, false);
+					}
+				}
+			}
+			//
+			return target;
+		}
+		//
+		throw new IllegalArgumentException("Unknown position for inner class: " + position);
+	}
+
+	/**
+	 * @return the new inner {@link TypeDeclaration} for event listener.
+	 */
+	private TypeDeclaration addListenerInnerClassDeclaration() throws Exception {
+		// prepare target
+		BodyDeclarationTarget target = getListenerInnerClassTarget();
+		// prepare header
+		String headerSource;
+		if (m_listener.hasAdapter()) {
+			headerSource = " extends " + m_listener.getAdapter().getCanonicalName();
+		} else {
+			Class<?> listenerType = m_listener.getInterface();
+			if (listenerType.isInterface()) {
+				headerSource = " implements " + getListenerTypeNameSource();
+			} else {
+				headerSource = " extends " + getListenerTypeNameSource();
+			}
+		}
+		// add inner class
+		List<String> lines =
+				ImmutableList.of("private class " + createInnerClassName() + headerSource + " {", "}");
+		return m_javaInfo.getEditor().addTypeDeclaration(lines, target);
+	}
+
+	/**
+	 * @return the unique name of inner {@link TypeDeclaration} for event listener.
+	 */
+	private String createInnerClassName() {
+		Map<String, String> valueMap = Maps.newTreeMap();
+		{
+			String componentName = getComponentName(m_javaInfo);
+			valueMap.put("component_name", componentName);
+			valueMap.put("Component_name", StringUtils.capitalize(componentName));
+			//
+			String componentType =
+					CodeUtils.getShortClass(m_javaInfo.getDescription().getComponentClass().getName());
+			valueMap.put("component_className", componentType);
+			valueMap.put("Component_className", StringUtils.capitalize(componentType));
+			//
+			String listenerMethodName =
+					CodeUtils.getShortClass(m_listener.getInterface().getCanonicalName());
+			valueMap.put("listener_className", listenerMethodName);
+			valueMap.put("Listener_className", StringUtils.capitalize(listenerMethodName));
+			//
+			String listenerName = m_listener.getSimpleName();
+			valueMap.put("listener_name", listenerName);
+			valueMap.put("Listener_name", StringUtils.capitalize(listenerName));
+		}
+		// generate base name
+		String template = m_preferences.getString(P_INNER_NAME_TEMPLATE);
+		String baseName = StrSubstitutor.replace(template, valueMap);
+		// generate unique name
+		return m_javaInfo.getEditor().getUniqueTypeName(baseName);
+	}
+
+	/**
+	 * @return the name of host {@link JavaInfo}.
+	 */
+	private static String getComponentName(JavaInfo javaInfo) {
+		return javaInfo.getVariableSupport().getComponentName();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Listener method support
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the listener method. If there are no such method, creates it.
+	 */
+	private MethodDeclaration ensureListenerMethod() throws Exception {
+		MethodDeclaration listenerMethod = findListenerMethod();
+		if (listenerMethod == null) {
+			// ensure listener type
+			TypeDeclaration listenerType = findListenerType();
+			if (listenerType == null) {
+				boolean implementInterfaceMethods = !m_listener.hasAdapter();
+				int eventCodeType = m_preferences.getInt(P_CODE_TYPE);
+				if (eventCodeType == V_CODE_ANONYMOUS) {
+					// prepare listener source
+					String source = "new " + getListenerTypeNameSource() + "() {\n}";
+					// add listener and get added listener type
+					m_javaInfo.addMethodInvocation(m_listener.getMethodSignature(), source);
+					listenerType = findListenerType();
+				} else if (eventCodeType == V_CODE_INNER_CLASS) {
+					// add listener inner class
+					listenerType = addListenerInnerClassDeclaration();
+					// use listener
+					String source = "new " + listenerType.getName().getIdentifier() + "()";
+					m_javaInfo.addMethodInvocation(m_listener.getMethodSignature(), source);
+				} else if (eventCodeType == V_CODE_INTERFACE) {
+					// prepare listener type
+					listenerType = JavaInfoUtils.getTypeDeclaration(m_javaInfo);
+					implementInterfaceMethods = m_javaInfo.getEditor().ensureInterfaceImplementation(
+							listenerType,
+							m_listener.getInterface().getCanonicalName());
+					// add listener
+					m_javaInfo.addMethodInvocation(m_listener.getMethodSignature(), "this");
+				}
+				// implement all methods, if there are no adapter
+				if (implementInterfaceMethods) {
+					List<ListenerMethodInfo> interfaceMethods = m_listener.getMethods();
+					for (ListenerMethodInfo interfaceMethodInfo : interfaceMethods) {
+						if (interfaceMethodInfo.isAbstract()) {
+							addListenerMethod(listenerType, interfaceMethodInfo);
+						}
+					}
+				}
+			}
+			// ensure listener method
+			{
+				listenerMethod = findListenerMethod();
+				if (listenerMethod == null) {
+					listenerMethod = addListenerMethod(listenerType, m_method);
+				}
+			}
+		}
+		// return listener method
+		return listenerMethod;
+	}
+
+	/**
+	 * @return the name of listener type, including generic arguments.
+	 */
+	private String getListenerTypeNameSource() {
+		// simple case - no generics
+		{
+			Class<?> listenerType = m_listener.getListenerType();
+			if (listenerType.getTypeParameters().length == 0) {
+				return listenerType.getCanonicalName();
+			}
+		}
+		// listener with generics
+		Type listenerType = m_listener.getMethod().getGenericParameterTypes()[0];
+		GenericTypeResolver resolver_2 = m_listener.getResolver();
+		return GenericsUtils.getTypeName(resolver_2, listenerType);
+	}
+
+	/**
+	 * Adds listener method for given {@link ListenerMethodInfo} in given {@link TypeDeclaration}.
+	 */
+	private MethodDeclaration addListenerMethod(TypeDeclaration typeDeclaration,
+			ListenerMethodInfo methodInfo) throws Exception {
+		AstEditor editor = m_javaInfo.getEditor();
+		// prepare annotations
+		List<String> annotations = Lists.newArrayList();
+		if (shouldAppendOverride(typeDeclaration, methodInfo)) {
+			annotations.add("@Override");
+		}
+		// prepare parameter names
+		String[] parameterNames = null;
+		{
+			String listenerTypeName = m_listener.getListenerType().getCanonicalName();
+			IType listenerType = editor.getJavaProject().findType(listenerTypeName);
+			IMethod listenerMethod = CodeUtils.findMethod(listenerType, methodInfo.getSignature());
+			parameterNames = listenerMethod.getParameterNames();
+		}
+		// prepare header code
+		String headerCode;
+		{
+			// prepare parameters
+			String parametersCode = "";
+			{
+				String[] parameterTypes = methodInfo.getActualParameterTypes();
+				for (int i = 0; i < parameterTypes.length; i++) {
+					String parameterType = parameterTypes[i];
+					// comma
+					if (parametersCode.length() != 0) {
+						parametersCode += ", ";
+					}
+					// append type
+					if (m_preferences.getBoolean(P_FINAL_PARAMETERS)) {
+						parametersCode += "final ";
+					}
+					parametersCode += parameterType;
+					parametersCode += " ";
+					// append name
+					parametersCode += parameterNames[i];
+				}
+			}
+			// prepare full header code
+			headerCode = "public "
+					+ methodInfo.getMethod().getReturnType().getName()
+					+ " "
+					+ methodInfo.getName()
+					+ "("
+					+ parametersCode
+					+ ")";
+		}
+		// prepare body
+		List<String> bodyLines = getListenerMethodBody(methodInfo);
+		// add method
+		BodyDeclarationTarget target = new BodyDeclarationTarget(typeDeclaration, false);
+		if (target.getType() == null && target.getDeclaration() == null) {
+			// No code for this method
+			return null;
+		}
+		return editor.addMethodDeclaration(annotations, headerCode, bodyLines, target);
+	}
+
+	/**
+	 * In Java5 we should append "@Override" annotation when override adapter methods.
+	 */
+	private boolean shouldAppendOverride(TypeDeclaration type, ListenerMethodInfo method)
+			throws Exception {
+		IJavaProject javaProject = m_javaInfo.getEditor().getJavaProject();
+		ListenerInfo listener = method.getListener();
+		if (ProjectUtils.isJDK15(javaProject) && listener.hasAdapter()) {
+			ITypeBinding typeBinding = AstNodeUtils.getTypeBinding(type);
+			ITypeBinding superTypeBinding = typeBinding.getSuperclass();
+			return AstNodeUtils.isSuccessorOf(superTypeBinding, listener.getAdapter());
+		}
+		return false;
+	}
+
+	/**
+	 * Sometimes we need to tweak it, for example in GWT for TabPanel and
+	 * TabListener.onBeforeTabSelected we should return <code>true</code>, not <code>false</code> as
+	 * we do in general case.
+	 *
+	 * @param methodInfo
+	 *
+	 * @return body of listener method
+	 */
+	private static List<String> getListenerMethodBody(ListenerMethodInfo methodInfo) {
+		Class<?> returnType = methodInfo.getMethod().getReturnType();
+		if (returnType == Void.TYPE) {
+			return ImmutableList.of();
+		} else {
+			String defaultValue = AstParser.getDefaultValue(returnType.getName());
+			return ImmutableList.of("return " + defaultValue + ";");
+		}
+	}
+
+	/**
+	 * Removes listener method, can be used only if listener has adapter.
+	 */
+	private void removeListenerMethod(TypeDeclaration typeDeclaration,
+			MethodDeclaration listenerMethod) throws Exception {
+		AstEditor editor = m_javaInfo.getEditor();
+		// remove stub, called from listener method
+		removeStubMethod(listenerMethod);
+		// remove listener method itself
+		editor.removeBodyDeclaration(listenerMethod);
+		// remove listener if we don't have methods
+		if (typeDeclaration.bodyDeclarations().isEmpty()) {
+			removeListener();
+		}
+	}
+
+	/**
+	 * Removes stub method for given listener method.
+	 * <p>
+	 * When we use {@link IPreferenceConstants#V_CODE_INTERFACE} code style, we can not remove
+	 * listener method itself, instead we should remove stub method and its invocation from listener
+	 * method.
+	 */
+	private void removeStubMethod(MethodDeclaration listenerMethod) throws Exception {
+		MethodDeclaration stubMethod = findStubMethod_orNull(listenerMethod);
+		if (stubMethod != null) {
+			AstEditor editor = m_javaInfo.getEditor();
+			// remove stub invocations
+			boolean canDeleteStub = true;
+			for (MethodInvocation invocation : AstNodeUtils.getMethodInvocations(stubMethod)) {
+				Statement statement = AstNodeUtils.getEnclosingStatement(invocation);
+				if (AstNodeUtils.getEnclosingMethod(statement) == listenerMethod) {
+					if (statement.getParent() instanceof IfStatement) {
+						statement = (Statement) statement.getParent();
+					} else if (statement.getParent() instanceof Block
+							&& statement.getParent().getParent() instanceof IfStatement) {
+						statement = (Statement) statement.getParent().getParent();
+					}
+					editor.removeStatement(statement);
+				} else {
+					canDeleteStub = false;
+				}
+			}
+			// remove stub method
+			if (canDeleteStub) {
+				editor.removeBodyDeclaration(stubMethod);
+			}
+		}
+	}
+
+	/**
+	 * @return the listener method in event listener.
+	 */
+	private MethodDeclaration findListenerMethod() {
+		TypeDeclaration listenerType = findListenerType();
+		if (listenerType != null) {
+			return AstNodeUtils.getMethodBySignature(listenerType, m_method.getSignatureAST());
+		}
+		return null;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Stub method support
+	//
+	// Stub method is method that really handles event. We can generate anonymous
+	// classes that just calls stub methods from its methods.
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Opens stub method (or listener method if there are no stub method).
+	 */
+	@Override
+	public void openStubMethod() throws Exception {
+		// prepare method as listener method or stub method
+		MethodDeclaration method = findStubMethod();
+		if (method == null) {
+			method = ExecutionUtils.runObject(m_javaInfo, new RunnableObjectEx<MethodDeclaration>() {
+				@Override
+				public MethodDeclaration runObject() throws Exception {
+					return ensureStubMethod();
+				}
+			});
+		}
+		// open method
+		JavaInfoUtils.scheduleOpenNode(m_javaInfo, method);
+	}
+
+	/**
+	 * @return the stub method (if enabled), or listener method. If there are no such method, creates
+	 *         it.
+	 */
+	private MethodDeclaration ensureStubMethod() throws Exception {
+		MethodDeclaration listenerMethod = ensureListenerMethod();
+		// create stub, if needed
+		if (m_preferences.getBoolean(P_CREATE_STUB)) {
+			MethodDeclaration stubMethod = findStubMethod_orNull(listenerMethod);
+			if (stubMethod == null) {
+				stubMethod = addStubMethod(m_method, listenerMethod);
+			}
+			return stubMethod;
+		}
+		// no need to stub, so return listener method
+		return listenerMethod;
+	}
+
+	/**
+	 * Adds the stub method and its invocation from given listener method.
+	 */
+	private MethodDeclaration addStubMethod(ListenerMethodInfo methodInfo,
+			MethodDeclaration listenerMethod) throws Exception {
+		AstEditor editor = m_javaInfo.getEditor();
+		// don't use stub for inner listener
+		if (listenerMethod.getParent().getParent() instanceof TypeDeclaration) {
+			return listenerMethod;
+		}
+		// prepare stub name/signature
+		String stubMethodName = getStubMethodName(methodInfo);
+		String signature;
+		{
+			signature = methodInfo.getSignature();
+			signature = StringUtils.replace(signature, methodInfo.getName(), stubMethodName);
+		}
+		// add stub method declaration
+		MethodDeclaration stubMethod;
+		{
+			TypeDeclaration typeDeclaration = JavaInfoUtils.getTypeDeclaration(m_javaInfo);
+			// try to find existing stub method
+			stubMethod = AstNodeUtils.getMethodBySignature(typeDeclaration, signature);
+			// add stub method declaration
+			if (stubMethod == null) {
+				// prepare modifiers
+				String modifiers;
+				{
+					boolean isStaticContext;
+					{
+						ExecutionFlowDescription flowDescription = EditorState.get(editor).getFlowDescription();
+						isStaticContext = flowDescription.isStatic();
+					}
+					if (isStaticContext) {
+						modifiers = "protected static ";
+					} else {
+						modifiers = "protected ";
+					}
+				}
+				// prepare header
+				String header = modifiers
+						+ "void "
+						+ stubMethodName
+						+ "("
+						+ editor.getParametersSource(listenerMethod)
+						+ ")";
+				// add stub method
+				stubMethod = editor.addMethodDeclaration(
+						header,
+						ImmutableList.<String>of(),
+						new BodyDeclarationTarget(typeDeclaration, false));
+			}
+		}
+		// add invocation for stub method from listener method
+		{
+			String lineInvoke = stubMethodName
+					+ "("
+					+ StringUtils.join(editor.getParameterNames(listenerMethod), ", ")
+					+ ");";
+			// prepare source for stub invocation Statement
+			List<String> lines;
+			if (m_preferences.getInt(P_CODE_TYPE) == V_CODE_INTERFACE) {
+				lines = getConditionalStubInvocationSource(listenerMethod, editor, lineInvoke);
+			} else {
+				lines = ImmutableList.of(lineInvoke);
+			}
+			// add Statement that invokes stub
+			if (lines != null) {
+				StatementTarget target = new StatementTarget(listenerMethod, true);
+				TemplateUtils.addStatement(m_javaInfo, target, lines);
+			}
+		}
+		// OK, we've added stub method
+		return stubMethod;
+	}
+
+	/**
+	 * <pre>
+	 *   if (event.getSource() == m_myComponent) {
+	 *     do_myComponent_keyPressed(event);
+	 *   }
+	 * </pre>
+	 *
+	 * @return lines for conditional stub invocation.
+	 */
+	private List<String> getConditionalStubInvocationSource(MethodDeclaration listenerMethod,
+			final AstEditor editor,
+			String lineInvoke) throws Exception {
+		List<SingleVariableDeclaration> parameters = DomGenerics.parameters(listenerMethod);
+		for (final SingleVariableDeclaration parameter : parameters) {
+			// try to load ComponentDescription for listener method parameter
+			ComponentDescription eventClassDescription =
+					ExecutionUtils.runObjectIgnore(new RunnableObjectEx<ComponentDescription>() {
+						@Override
+						public ComponentDescription runObject() throws Exception {
+							ClassLoader editorLoader = EditorState.get(editor).getEditorLoader();
+							String parameterTypeName =
+									AstNodeUtils.getFullyQualifiedName(parameter.getType(), true);
+							Class<?> parameterType =
+									ReflectionUtils.getClassByName(editorLoader, parameterTypeName);
+							return ComponentDescriptionHelper.getDescription(editor, parameterType);
+						}
+					}, null);
+			// invoke stub only if we can check for our component
+			if (eventClassDescription != null) {
+				String componentAccess =
+						eventClassDescription.getParameter("eventsProperty.componentAccess");
+				if (componentAccess != null) {
+					String lineIf = TemplateUtils.format(
+							"if ({0}{1} == {2}) '{'",
+							parameter.getName().getIdentifier(),
+							componentAccess,
+							m_javaInfo);
+					return ImmutableList.of(lineIf, "\t" + lineInvoke, "}");
+				}
+			}
+		}
+		// no parameter with "component" access
+		return null;
+	}
+
+	/**
+	 * @return the name of the stub method.
+	 */
+	private String getStubMethodName(ListenerMethodInfo methodInfo) {
+		Map<String, String> valueMap = Maps.newTreeMap();
+		{
+			String componentName = getComponentName(m_javaInfo);
+			valueMap.put("component_name", componentName);
+			valueMap.put("Component_name", StringUtils.capitalize(componentName));
+			//
+			String componentType =
+					CodeUtils.getShortClass(m_javaInfo.getDescription().getComponentClass().getName());
+			valueMap.put("component_class_name", componentType);
+			valueMap.put("Component_class_name", StringUtils.capitalize(componentType));
+			//
+			String methodName = methodInfo.getName();
+			valueMap.put("event_name", methodName);
+			valueMap.put("Event_name", StringUtils.capitalize(methodName));
+		}
+		//
+		String template = m_preferences.getString(P_STUB_NAME_TEMPLATE);
+		return StrSubstitutor.replace(template, valueMap);
+	}
+
+	/**
+	 * @return the stub method.
+	 */
+	MethodDeclaration findStubMethod() {
+		MethodDeclaration listenerMethod = findListenerMethod();
+		return findStubMethod(listenerMethod);
+	}
+
+	/**
+	 * @return the stub method for given listener method.
+	 */
+	private MethodDeclaration findStubMethod(MethodDeclaration listenerMethod) {
+		// try to find stub method
+		MethodDeclaration stubMethod = findStubMethod_orNull(listenerMethod);
+		if (stubMethod != null) {
+			return stubMethod;
+		}
+		// use listener method, if no stub
+		return listenerMethod;
+	}
+
+	/**
+	 * @return the stub method for given listener method, or <code>null</code> if listener method has
+	 *         no stub.
+	 */
+	private MethodDeclaration findStubMethod_orNull(MethodDeclaration listenerMethod) {
+		if (listenerMethod == null) {
+			return null;
+		}
+		// direct stub method
+		{
+			MethodDeclaration stubMethod = findStubMethod(listenerMethod.getBody());
+			if (stubMethod != null) {
+				return stubMethod;
+			}
+		}
+		// conditional stub method (for "this" listener)
+		List<Statement> statements = DomGenerics.statements(listenerMethod.getBody());
+		for (Statement statement : statements) {
+			if (statement instanceof IfStatement) {
+				IfStatement ifStatement = (IfStatement) statement;
+				if (ifStatement.getExpression() instanceof InfixExpression) {
+					InfixExpression condition = (InfixExpression) ifStatement.getExpression();
+					if (condition.getOperator() == InfixExpression.Operator.EQUALS
+							&& m_javaInfo.isRepresentedBy(condition.getRightOperand())) {
+						Statement thenStatement = ifStatement.getThenStatement();
+						MethodDeclaration stubMethod = findStubMethod(thenStatement);
+						if (stubMethod != null) {
+							return stubMethod;
+						}
+						break;
+					}
+				}
+			}
+		}
+		// no stub
+		return null;
+	}
+
+	/**
+	 * @param listenerStatement
+	 *          the {@link Statement} that invokes stub method, may be {@link Block} with single other
+	 *          {@link Statement}.
+	 *
+	 * @return the stub {@link MethodDeclaration}, invoked by given {@link Statement}, or
+	 *         <code>null</code> if no stub invocation found.
+	 */
+	private MethodDeclaration findStubMethod(Statement listenerStatement) {
+		List<Statement> statements;
+		if (listenerStatement instanceof Block) {
+			statements = DomGenerics.statements((Block) listenerStatement);
+		} else {
+			statements = ImmutableList.of(listenerStatement);
+		}
+		// analyze statements
+		if (statements.size() == 1) {
+			Statement statement = statements.get(0);
+			if (statement instanceof ExpressionStatement) {
+				ExpressionStatement expressionStatement = (ExpressionStatement) statement;
+				if (expressionStatement.getExpression() instanceof MethodInvocation) {
+					MethodInvocation invocation = (MethodInvocation) expressionStatement.getExpression();
+					TypeDeclaration typeDeclaration = JavaInfoUtils.getTypeDeclaration(m_javaInfo);
+					String methodSignature = AstNodeUtils.getMethodSignature(invocation);
+					return AstNodeUtils.getMethodBySignature(typeDeclaration, methodSignature);
+				}
+			}
+		}
+		// no stub
+		return null;
+	}
+
+	/**
+	 * @return <code>true</code> if given listener method has {@link IfStatement} that routes
+	 *         execution flow into some stub method.
+	 */
+	private static boolean hasStubRouting(MethodDeclaration listenerMethod) {
+		List<Statement> statements = DomGenerics.statements(listenerMethod.getBody());
+		if (!statements.isEmpty() && statements.get(0) instanceof IfStatement) {
+			IfStatement ifStatement = (IfStatement) statements.get(0);
+			if (ifStatement.getExpression() instanceof InfixExpression) {
+				InfixExpression condition = (InfixExpression) ifStatement.getExpression();
+				if (condition.getOperator() == InfixExpression.Operator.EQUALS) {
+					return true;
+				}
+			}
+		}
+		return false;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/event/ListenerMethodPropertyEditor.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/event/ListenerMethodPropertyEditor.java
index 851a454f0..f439e90d8 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/event/ListenerMethodPropertyEditor.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/event/ListenerMethodPropertyEditor.java
@@ -28,67 +28,67 @@
  * @coverage core.model.property.events
  */
 final class ListenerMethodPropertyEditor extends TextDisplayPropertyEditor {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final PropertyEditor INSTANCE = new ListenerMethodPropertyEditor();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final PropertyEditor INSTANCE = new ListenerMethodPropertyEditor();
 
-  private ListenerMethodPropertyEditor() {
-  }
+	private ListenerMethodPropertyEditor() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // TextDisplayPropertyEditor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getText(Property property) throws Exception {
-    ListenerMethodProperty methodProperty = (ListenerMethodProperty) property;
-    MethodDeclaration method = methodProperty.findStubMethod();
-    if (method != null) {
-      JavaInfo javaInfo = methodProperty.getJavaInfo();
-      int line = javaInfo.getEditor().getLineNumber(method.getStartPosition());
-      return "line " + line;
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// TextDisplayPropertyEditor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getText(Property property) throws Exception {
+		ListenerMethodProperty methodProperty = (ListenerMethodProperty) property;
+		MethodDeclaration method = methodProperty.findStubMethod();
+		if (method != null) {
+			JavaInfo javaInfo = methodProperty.getJavaInfo();
+			int line = javaInfo.getEditor().getLineNumber(method.getStartPosition());
+			return "line " + line;
+		}
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // PropertyEditor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void doubleClick(Property property, Point location) throws Exception {
-    openStubMethod(property);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// PropertyEditor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void doubleClick(Property property, Point location) throws Exception {
+		openStubMethod(property);
+	}
 
-  @Override
-  public boolean activate(PropertyTable propertyTable, Property property, Point location)
-      throws Exception {
-    if (location == null) {
-      openStubMethod(property);
-    }
-    return false;
-  }
+	@Override
+	public boolean activate(PropertyTable propertyTable, Property property, Point location)
+			throws Exception {
+		if (location == null) {
+			openStubMethod(property);
+		}
+		return false;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Opens stub method in "Source" page.
-   */
-  private void openStubMethod(Property property) throws Exception {
-    final ListenerMethodProperty methodProperty = (ListenerMethodProperty) property;
-    ExecutionUtils.run(methodProperty.getJavaInfo(), new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        methodProperty.openStubMethod();
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Opens stub method in "Source" page.
+	 */
+	private void openStubMethod(Property property) throws Exception {
+		final ListenerMethodProperty methodProperty = (ListenerMethodProperty) property;
+		ExecutionUtils.run(methodProperty.getJavaInfo(), new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				methodProperty.openStubMethod();
+			}
+		});
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/event/ListenerProperty.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/event/ListenerProperty.java
index 95d39d3cc..bcaec825f 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/event/ListenerProperty.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/event/ListenerProperty.java
@@ -36,156 +36,156 @@
  * @coverage core.model.property.events
  */
 final class ListenerProperty extends AbstractListenerProperty {
-  private final ListenerInfo m_listener;
-  private final String m_addSignature;
+	private final ListenerInfo m_listener;
+	private final String m_addSignature;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ListenerProperty(JavaInfo javaInfo, ListenerInfo listener) {
-    super(javaInfo, listener.getName(), new ListenerPropertyEditor(listener));
-    m_listener = listener;
-    m_addSignature = listener.getMethodSignature();
-    if (listener.isDeprecated()) {
-      setCategory(PropertyCategory.ADVANCED);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ListenerProperty(JavaInfo javaInfo, ListenerInfo listener) {
+		super(javaInfo, listener.getName(), new ListenerPropertyEditor(listener));
+		m_listener = listener;
+		m_addSignature = listener.getMethodSignature();
+		if (listener.isDeprecated()) {
+			setCategory(PropertyCategory.ADVANCED);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Property
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean isModified() throws Exception {
-    return m_javaInfo.getMethodInvocation(m_addSignature) != null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Property
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean isModified() throws Exception {
+		return m_javaInfo.getMethodInvocation(m_addSignature) != null;
+	}
 
-  @Override
-  public void setValue(Object value) throws Exception {
-    if (value == UNKNOWN_VALUE) {
-      // ask confirmation
-      if (MessageDialog.openConfirm(
-          DesignerPlugin.getShell(),
-          ModelMessages.ListenerProperty_removeTitle,
-          MessageFormat.format(ModelMessages.ListenerProperty_removeMessage, m_listener.getName()))) {
-        removeListener();
-      }
-    }
-  }
+	@Override
+	public void setValue(Object value) throws Exception {
+		if (value == UNKNOWN_VALUE) {
+			// ask confirmation
+			if (MessageDialog.openConfirm(
+					DesignerPlugin.getShell(),
+					ModelMessages.ListenerProperty_removeTitle,
+					MessageFormat.format(ModelMessages.ListenerProperty_removeMessage, m_listener.getName()))) {
+				removeListener();
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Removes listener for this event. May be not very effective.
-   */
-  @Override
-  protected void removeListener() throws Exception {
-    ListenerMethodProperty[] methodProperties = getMethodProperties();
-    ListenerMethodProperty methodProperty = methodProperties[0];
-    methodProperty.removeListener();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Removes listener for this event. May be not very effective.
+	 */
+	@Override
+	protected void removeListener() throws Exception {
+		ListenerMethodProperty[] methodProperties = getMethodProperties();
+		ListenerMethodProperty methodProperty = methodProperties[0];
+		methodProperty.removeListener();
+	}
 
-  private ListenerMethodProperty[] getMethodProperties() throws Exception {
-    return ((ListenerPropertyEditor) getEditor()).getProperties(this);
-  }
+	private ListenerMethodProperty[] getMethodProperties() throws Exception {
+		return ((ListenerPropertyEditor) getEditor()).getProperties(this);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Context menu
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void addListenerActions(IMenuManager manager, IMenuManager implementMenuManager)
-      throws Exception {
-    // if deprecated - don't show it
-    if (m_listener.isDeprecated()) {
-      return;
-    }
-    // add methods
-    MenuManagerEx listenerMenuManager = null;
-    for (ListenerMethodProperty methodProperty : getMethodProperties()) {
-      // prepare listener menu manager
-      if (listenerMenuManager == null) {
-        ListenerInfo listenerInfo = methodProperty.getListener();
-        listenerMenuManager = new MenuManagerEx(listenerInfo.getName());
-        implementMenuManager.add(listenerMenuManager);
-        // prepare listener menu image
-        Image image;
-        {
-          TypeDeclaration listenerType = methodProperty.findListenerType();
-          if (listenerType != null) {
-            if (listenerInfo.hasAdapter()) {
-              image = EventsPropertyUtils.EXISTING_CLASS_IMAGE;
-            } else {
-              image = EventsPropertyUtils.EXISTING_INTERFACE_IMAGE;
-            }
-          } else {
-            if (listenerInfo.hasAdapter()) {
-              image = EventsPropertyUtils.LISTENER_CLASS_IMAGE;
-            } else {
-              image = EventsPropertyUtils.LISTENER_INTERFACE_IMAGE;
-            }
-          }
-        }
-        listenerMenuManager.setImage(image);
-      }
-      // actions
-      {
-        // prepare actions
-        IAction[] actions = createListenerMethodActions(methodProperty);
-        // append existing stub action
-        if (actions[0] != null) {
-          manager.appendToGroup(IContextMenuConstants.GROUP_EVENTS, actions[0]);
-        }
-        // append existing or new method action
-        listenerMenuManager.add(actions[0] != null ? actions[0] : actions[1]);
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Context menu
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void addListenerActions(IMenuManager manager, IMenuManager implementMenuManager)
+			throws Exception {
+		// if deprecated - don't show it
+		if (m_listener.isDeprecated()) {
+			return;
+		}
+		// add methods
+		MenuManagerEx listenerMenuManager = null;
+		for (ListenerMethodProperty methodProperty : getMethodProperties()) {
+			// prepare listener menu manager
+			if (listenerMenuManager == null) {
+				ListenerInfo listenerInfo = methodProperty.getListener();
+				listenerMenuManager = new MenuManagerEx(listenerInfo.getName());
+				implementMenuManager.add(listenerMenuManager);
+				// prepare listener menu image
+				Image image;
+				{
+					TypeDeclaration listenerType = methodProperty.findListenerType();
+					if (listenerType != null) {
+						if (listenerInfo.hasAdapter()) {
+							image = EventsPropertyUtils.EXISTING_CLASS_IMAGE;
+						} else {
+							image = EventsPropertyUtils.EXISTING_INTERFACE_IMAGE;
+						}
+					} else {
+						if (listenerInfo.hasAdapter()) {
+							image = EventsPropertyUtils.LISTENER_CLASS_IMAGE;
+						} else {
+							image = EventsPropertyUtils.LISTENER_INTERFACE_IMAGE;
+						}
+					}
+				}
+				listenerMenuManager.setImage(image);
+			}
+			// actions
+			{
+				// prepare actions
+				IAction[] actions = createListenerMethodActions(methodProperty);
+				// append existing stub action
+				if (actions[0] != null) {
+					manager.appendToGroup(IContextMenuConstants.GROUP_EVENTS, actions[0]);
+				}
+				// append existing or new method action
+				listenerMenuManager.add(actions[0] != null ? actions[0] : actions[1]);
+			}
+		}
+	}
 
-  /**
-   * For given {@link ListenerMethodProperty} creates two {@link Action}'s:
-   *
-   * [0] - for existing stub method, may be <code>null</code>;<br>
-   * [1] - for creating new stub method.
-   */
-  private IAction[] createListenerMethodActions(final ListenerMethodProperty property) {
-    IAction[] actions = new IAction[2];
-    // try to find existing stub method
-    {
-      MethodDeclaration stubMethod = property.findStubMethod();
-      if (stubMethod != null) {
-        actions[0] = new ObjectInfoAction(m_javaInfo) {
-          @Override
-          protected void runEx() throws Exception {
-            property.openStubMethod();
-          }
-        };
-        int line = m_javaInfo.getEditor().getLineNumber(stubMethod.getStartPosition());
-        actions[0].setText(property.getMethod().getName()
-            + ModelMessages.ListenerProperty_line
-            + line);
-        actions[0].setImageDescriptor(EventsPropertyUtils.LISTENER_METHOD_IMAGE_DESCRIPTOR);
-      }
-    }
-    // in any case prepare action for creating new stub method
-    {
-      actions[1] = new ObjectInfoAction(m_javaInfo) {
-        @Override
-        protected void runEx() throws Exception {
-          property.openStubMethod();
-        }
-      };
-      actions[1].setText(property.getMethod().getName());
-      actions[1].setImageDescriptor(EventsPropertyUtils.LISTENER_METHOD_IMAGE_DESCRIPTOR);
-    }
-    //
-    return actions;
-  }
+	/**
+	 * For given {@link ListenerMethodProperty} creates two {@link Action}'s:
+	 *
+	 * [0] - for existing stub method, may be <code>null</code>;<br>
+	 * [1] - for creating new stub method.
+	 */
+	private IAction[] createListenerMethodActions(final ListenerMethodProperty property) {
+		IAction[] actions = new IAction[2];
+		// try to find existing stub method
+		{
+			MethodDeclaration stubMethod = property.findStubMethod();
+			if (stubMethod != null) {
+				actions[0] = new ObjectInfoAction(m_javaInfo) {
+					@Override
+					protected void runEx() throws Exception {
+						property.openStubMethod();
+					}
+				};
+				int line = m_javaInfo.getEditor().getLineNumber(stubMethod.getStartPosition());
+				actions[0].setText(property.getMethod().getName()
+						+ ModelMessages.ListenerProperty_line
+						+ line);
+				actions[0].setImageDescriptor(EventsPropertyUtils.LISTENER_METHOD_IMAGE_DESCRIPTOR);
+			}
+		}
+		// in any case prepare action for creating new stub method
+		{
+			actions[1] = new ObjectInfoAction(m_javaInfo) {
+				@Override
+				protected void runEx() throws Exception {
+					property.openStubMethod();
+				}
+			};
+			actions[1].setText(property.getMethod().getName());
+			actions[1].setImageDescriptor(EventsPropertyUtils.LISTENER_METHOD_IMAGE_DESCRIPTOR);
+		}
+		//
+		return actions;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/event/ListenerPropertyEditor.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/event/ListenerPropertyEditor.java
index edabb85d4..6e4c66db6 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/event/ListenerPropertyEditor.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/event/ListenerPropertyEditor.java
@@ -23,31 +23,31 @@
  * @coverage core.model.property.events
  */
 final class ListenerPropertyEditor extends AbstractComplexEventPropertyEditor {
-  private final ListenerInfo m_listener;
+	private final ListenerInfo m_listener;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ListenerPropertyEditor(ListenerInfo listener) {
-    m_listener = listener;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ListenerPropertyEditor(ListenerInfo listener) {
+		m_listener = listener;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IComplexPropertyEditor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public ListenerMethodProperty[] getProperties(Property property) throws Exception {
-    JavaInfo javaInfo = ((ListenerProperty) property).getJavaInfo();
-    List<ListenerMethodInfo> methods = m_listener.getMethods();
-    ListenerMethodProperty[] properties = new ListenerMethodProperty[methods.size()];
-    for (int i = 0; i < methods.size(); i++) {
-      ListenerMethodInfo method = methods.get(i);
-      properties[i] = new ListenerMethodProperty(javaInfo, m_listener, method, properties);
-    }
-    return properties;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IComplexPropertyEditor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public ListenerMethodProperty[] getProperties(Property property) throws Exception {
+		JavaInfo javaInfo = ((ListenerProperty) property).getJavaInfo();
+		List<ListenerMethodInfo> methods = m_listener.getMethods();
+		ListenerMethodProperty[] properties = new ListenerMethodProperty[methods.size()];
+		for (int i = 0; i < methods.size(); i++) {
+			ListenerMethodInfo method = methods.get(i);
+			properties[i] = new ListenerMethodProperty(javaInfo, m_listener, method, properties);
+		}
+		return properties;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/hierarchy/ComponentClassProperty.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/hierarchy/ComponentClassProperty.java
index 2b8aad199..4aef6a6b5 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/hierarchy/ComponentClassProperty.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/hierarchy/ComponentClassProperty.java
@@ -25,56 +25,56 @@
  * @coverage core.model.property
  */
 public final class ComponentClassProperty extends Property {
-  private static final String TITLE_TOOLTIP = ModelMessages.ComponentClassProperty_tooltip;
-  private final String m_componentClassName;
+	private static final String TITLE_TOOLTIP = ModelMessages.ComponentClassProperty_tooltip;
+	private final String m_componentClassName;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ComponentClassProperty(IJavaProject javaProject, Class<?> componentClass) {
-    super(new ComponentClassPropertyEditor(javaProject, componentClass));
-    setCategory(PropertyCategory.system(7));
-    m_componentClassName = componentClass.getName();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ComponentClassProperty(IJavaProject javaProject, Class<?> componentClass) {
+		super(new ComponentClassPropertyEditor(javaProject, componentClass));
+		setCategory(PropertyCategory.system(7));
+		m_componentClassName = componentClass.getName();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Property
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getTitle() {
-    return "Class";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Property
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getTitle() {
+		return "Class";
+	}
 
-  @Override
-  public Object getValue() throws Exception {
-    return m_componentClassName;
-  }
+	@Override
+	public Object getValue() throws Exception {
+		return m_componentClassName;
+	}
 
-  @Override
-  public boolean isModified() throws Exception {
-    return false;
-  }
+	@Override
+	public boolean isModified() throws Exception {
+		return false;
+	}
 
-  @Override
-  public void setValue(Object value) throws Exception {
-  }
+	@Override
+	public void setValue(Object value) throws Exception {
+	}
 
-  @Override
-  public <T> T getAdapter(Class<T> adapter) {
-    // tooltip
-    if (adapter == PropertyTooltipProvider.class) {
-      return adapter.cast(new PropertyTooltipTextProvider() {
-        @Override
-        protected String getText(Property property) throws Exception {
-          return TITLE_TOOLTIP;
-        }
-      });
-    }
-    // other
-    return super.getAdapter(adapter);
-  }
+	@Override
+	public <T> T getAdapter(Class<T> adapter) {
+		// tooltip
+		if (adapter == PropertyTooltipProvider.class) {
+			return adapter.cast(new PropertyTooltipTextProvider() {
+				@Override
+				protected String getText(Property property) throws Exception {
+					return TITLE_TOOLTIP;
+				}
+			});
+		}
+		// other
+		return super.getAdapter(adapter);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/hierarchy/ComponentClassPropertyEditor.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/hierarchy/ComponentClassPropertyEditor.java
index 894fdfc43..6860145f1 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/hierarchy/ComponentClassPropertyEditor.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/hierarchy/ComponentClassPropertyEditor.java
@@ -53,213 +53,213 @@
  * @coverage core.model.property.editor
  */
 public final class ComponentClassPropertyEditor extends TextDisplayPropertyEditor {
-  private final IJavaProject m_javaProject;
-  private final Class<?> m_componentClass;
+	private final IJavaProject m_javaProject;
+	private final Class<?> m_componentClass;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ComponentClassPropertyEditor(IJavaProject javaProject, Class<?> componentClass) {
-    m_javaProject = javaProject;
-    m_componentClass = componentClass;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ComponentClassPropertyEditor(IJavaProject javaProject, Class<?> componentClass) {
+		m_javaProject = javaProject;
+		m_componentClass = componentClass;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getText(Property property) throws Exception {
-    return m_componentClass.getName();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getText(Property property) throws Exception {
+		return m_componentClass.getName();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tooltip
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected PropertyTooltipProvider createPropertyTooltipProvider() {
-    return new PropertyTooltipProvider() {
-      @Override
-      public Control createTooltipControl(Property property,
-          Composite parent,
-          int availableWidth,
-          final IPropertyTooltipSite site) {
-        // prepare hierarchy
-        List<Class<?>> classes = Lists.newArrayList();
-        {
-          Class<?> clazz = m_componentClass;
-          while (clazz != null) {
-            classes.add(clazz);
-            clazz = clazz.getSuperclass();
-          }
-        }
-        // create tree that can calculate full size
-        Tree tree = new Tree(parent, SWT.NONE) {
-          @Override
-          public Point computeSize(int wHint, int hHint, boolean changed) {
-            Point minLocation = new Point(0, 0);
-            Point maxLocation = new Point(0, 0);
-            updateMaxSize(minLocation, maxLocation, getItems());
-            Point size = new Point(maxLocation.x - minLocation.x, maxLocation.y - minLocation.y);
-            int verticalBarSize = getVerticalBar().getSize().x;
-            int horizontalBarSize = getHorizontalBar().getSize().y;
-            // bug in SWT: for non-windows platforms there is no need to forsibly set the scrollbars (see Tree.checkStyle())
-            // the workaround is to add additional space on non-windows platforms
-            size.x += EnvironmentUtils.IS_WINDOWS ? verticalBarSize + 10 : verticalBarSize * 3;
-            size.y += EnvironmentUtils.IS_WINDOWS ? horizontalBarSize : horizontalBarSize * 2;
-            return size;
-          }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tooltip
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected PropertyTooltipProvider createPropertyTooltipProvider() {
+		return new PropertyTooltipProvider() {
+			@Override
+			public Control createTooltipControl(Property property,
+					Composite parent,
+					int availableWidth,
+					final IPropertyTooltipSite site) {
+				// prepare hierarchy
+				List<Class<?>> classes = Lists.newArrayList();
+				{
+					Class<?> clazz = m_componentClass;
+					while (clazz != null) {
+						classes.add(clazz);
+						clazz = clazz.getSuperclass();
+					}
+				}
+				// create tree that can calculate full size
+				Tree tree = new Tree(parent, SWT.NONE) {
+					@Override
+					public Point computeSize(int wHint, int hHint, boolean changed) {
+						Point minLocation = new Point(0, 0);
+						Point maxLocation = new Point(0, 0);
+						updateMaxSize(minLocation, maxLocation, getItems());
+						Point size = new Point(maxLocation.x - minLocation.x, maxLocation.y - minLocation.y);
+						int verticalBarSize = getVerticalBar().getSize().x;
+						int horizontalBarSize = getHorizontalBar().getSize().y;
+						// bug in SWT: for non-windows platforms there is no need to forsibly set the scrollbars (see Tree.checkStyle())
+						// the workaround is to add additional space on non-windows platforms
+						size.x += EnvironmentUtils.IS_WINDOWS ? verticalBarSize + 10 : verticalBarSize * 3;
+						size.y += EnvironmentUtils.IS_WINDOWS ? horizontalBarSize : horizontalBarSize * 2;
+						return size;
+					}
 
-          private void updateMaxSize(Point minLocation, Point maxLocation, TreeItem rootItems[]) {
-            for (int i = 0; i < rootItems.length; i++) {
-              TreeItem item = rootItems[i];
-              Rectangle bounds = item.getBounds();
-              minLocation.x = Math.min(minLocation.x, bounds.x);
-              minLocation.y = Math.min(minLocation.y, bounds.y);
-              maxLocation.x = Math.max(maxLocation.x, bounds.x + bounds.width);
-              maxLocation.y = Math.max(maxLocation.y, bounds.y + bounds.height);
-              updateMaxSize(minLocation, maxLocation, item.getItems());
-            }
-          }
+					private void updateMaxSize(Point minLocation, Point maxLocation, TreeItem rootItems[]) {
+						for (int i = 0; i < rootItems.length; i++) {
+							TreeItem item = rootItems[i];
+							Rectangle bounds = item.getBounds();
+							minLocation.x = Math.min(minLocation.x, bounds.x);
+							minLocation.y = Math.min(minLocation.y, bounds.y);
+							maxLocation.x = Math.max(maxLocation.x, bounds.x + bounds.width);
+							maxLocation.y = Math.max(maxLocation.y, bounds.y + bounds.height);
+							updateMaxSize(minLocation, maxLocation, item.getItems());
+						}
+					}
 
-          @Override
-          protected void checkSubclass() {
-          }
-        };
-        // copy colors
-        tree.setForeground(parent.getForeground());
-        tree.setBackground(parent.getBackground());
-        // create viewer
-        TreeViewer treeViewer = new TreeViewer(tree);
-        treeViewer.setContentProvider(new ComponentClassContentProvider());
-        treeViewer.setLabelProvider(new ComponentClassLabelProvider(tree));
-        treeViewer.setInput(classes);
-        treeViewer.expandAll();
-        // add double click to open class in editor
-        treeViewer.addDoubleClickListener(new IDoubleClickListener() {
-          @Override
-          public void doubleClick(DoubleClickEvent event) {
-            try {
-              String className;
-              {
-                IStructuredSelection selection = (IStructuredSelection) event.getSelection();
-                Class<?> clazz = (Class<?>) selection.getFirstElement();
-                className = clazz.getName();
-              }
-              //
-              IType type = m_javaProject.findType(className);
-              if (type != null) {
-                site.hideTooltip();
-                JavaUI.openInEditor(type);
-              }
-            } catch (Throwable e) {
-              DesignerPlugin.log(e);
-            }
-          }
-        });
-        // set listeners
-        {
-          HideListener listener = new HideListener(site);
-          tree.addListener(SWT.MouseExit, listener);
-        }
-        // return tree as tooltip control
-        return tree;
-      }
-    };
-  }
+					@Override
+					protected void checkSubclass() {
+					}
+				};
+				// copy colors
+				tree.setForeground(parent.getForeground());
+				tree.setBackground(parent.getBackground());
+				// create viewer
+				TreeViewer treeViewer = new TreeViewer(tree);
+				treeViewer.setContentProvider(new ComponentClassContentProvider());
+				treeViewer.setLabelProvider(new ComponentClassLabelProvider(tree));
+				treeViewer.setInput(classes);
+				treeViewer.expandAll();
+				// add double click to open class in editor
+				treeViewer.addDoubleClickListener(new IDoubleClickListener() {
+					@Override
+					public void doubleClick(DoubleClickEvent event) {
+						try {
+							String className;
+							{
+								IStructuredSelection selection = (IStructuredSelection) event.getSelection();
+								Class<?> clazz = (Class<?>) selection.getFirstElement();
+								className = clazz.getName();
+							}
+							//
+							IType type = m_javaProject.findType(className);
+							if (type != null) {
+								site.hideTooltip();
+								JavaUI.openInEditor(type);
+							}
+						} catch (Throwable e) {
+							DesignerPlugin.log(e);
+						}
+					}
+				});
+				// set listeners
+				{
+					HideListener listener = new HideListener(site);
+					tree.addListener(SWT.MouseExit, listener);
+				}
+				// return tree as tooltip control
+				return tree;
+			}
+		};
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Component class content provider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static class ComponentClassContentProvider implements ITreeContentProvider {
-    private List<?> m_classes;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Component class content provider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static class ComponentClassContentProvider implements ITreeContentProvider {
+		private List<?> m_classes;
 
-    @Override
-    public Object[] getElements(Object inputElement) {
-      return new Object[]{m_classes.get(m_classes.size() - 1)};
-    }
+		@Override
+		public Object[] getElements(Object inputElement) {
+			return new Object[]{m_classes.get(m_classes.size() - 1)};
+		}
 
-    @Override
-    public Object[] getChildren(Object parentElement) {
-      int index = m_classes.indexOf(parentElement);
-      if (index == 0) {
-        return null;
-      }
-      return new Object[]{m_classes.get(index - 1)};
-    }
+		@Override
+		public Object[] getChildren(Object parentElement) {
+			int index = m_classes.indexOf(parentElement);
+			if (index == 0) {
+				return null;
+			}
+			return new Object[]{m_classes.get(index - 1)};
+		}
 
-    @Override
-    public Object getParent(Object element) {
-      int index = m_classes.indexOf(element);
-      return m_classes.get(index + 1);
-    }
+		@Override
+		public Object getParent(Object element) {
+			int index = m_classes.indexOf(element);
+			return m_classes.get(index + 1);
+		}
 
-    @Override
-    public boolean hasChildren(Object element) {
-      return m_classes.indexOf(element) != 0;
-    }
+		@Override
+		public boolean hasChildren(Object element) {
+			return m_classes.indexOf(element) != 0;
+		}
 
-    @Override
-    public void dispose() {
-    }
+		@Override
+		public void dispose() {
+		}
 
-    @Override
-    public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
-      m_classes = (List<?>) newInput;
-    }
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Component class label provider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private class ComponentClassLabelProvider extends LabelProvider implements IFontProvider {
-    private final Tree m_tree;
+		@Override
+		public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+			m_classes = (List<?>) newInput;
+		}
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Component class label provider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private class ComponentClassLabelProvider extends LabelProvider implements IFontProvider {
+		private final Tree m_tree;
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public ComponentClassLabelProvider(final Tree tree) {
-      m_tree = tree;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public ComponentClassLabelProvider(final Tree tree) {
+			m_tree = tree;
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // LabelProvider
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public String getText(Object element) {
-      Class<?> clazz = (Class<?>) element;
-      return clazz.getName();
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// LabelProvider
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public String getText(Object element) {
+			Class<?> clazz = (Class<?>) element;
+			return clazz.getName();
+		}
 
-    @Override
-    public Image getImage(Object element) {
-      return JavaUI.getSharedImages().getImage(ISharedImages.IMG_OBJS_CLASS);
-    }
+		@Override
+		public Image getImage(Object element) {
+			return JavaUI.getSharedImages().getImage(ISharedImages.IMG_OBJS_CLASS);
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // IFontProvider
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public Font getFont(Object element) {
-      Class<?> clazz = (Class<?>) element;
-      if (clazz == m_componentClass) {
-        return SwtResourceManager.getBoldFont(m_tree.getFont());
-      }
-      return null;
-    }
-  }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// IFontProvider
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public Font getFont(Object element) {
+			Class<?> clazz = (Class<?>) element;
+			if (clazz == m_componentClass) {
+				return SwtResourceManager.getBoldFont(m_tree.getFont());
+			}
+			return null;
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/order/ReorderDialog.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/order/ReorderDialog.java
index fef5aaa5c..7fe5dbec2 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/order/ReorderDialog.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/order/ReorderDialog.java
@@ -51,227 +51,227 @@
  * @coverage core.model.property.order
  */
 final class ReorderDialog extends ResizableDialog {
-  private final TabOrderInfo m_orderInfo;
-  private final List<AbstractComponentInfo> m_allInfos;
-  private CheckboxTableViewer m_viewer;
-  private Button m_upButton;
-  private Button m_downButton;
-  private Button m_unSelectAllButton;
-  private Button m_selectAllButton;
+	private final TabOrderInfo m_orderInfo;
+	private final List<AbstractComponentInfo> m_allInfos;
+	private CheckboxTableViewer m_viewer;
+	private Button m_upButton;
+	private Button m_downButton;
+	private Button m_unSelectAllButton;
+	private Button m_selectAllButton;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ReorderDialog(Shell parentShell, TabOrderInfo orderInfo) {
-    super(parentShell, DesignerPlugin.getDefault());
-    m_orderInfo = orderInfo;
-    m_allInfos = m_orderInfo.getInfos();
-    setShellStyle(SWT.DIALOG_TRIM | SWT.RESIZE);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ReorderDialog(Shell parentShell, TabOrderInfo orderInfo) {
+		super(parentShell, DesignerPlugin.getDefault());
+		m_orderInfo = orderInfo;
+		m_allInfos = m_orderInfo.getInfos();
+		setShellStyle(SWT.DIALOG_TRIM | SWT.RESIZE);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Control createDialogArea(Composite parent) {
-    // container
-    Composite container = (Composite) super.createDialogArea(parent);
-    GridLayoutFactory.create(container).columns(2);
-    // title
-    Label title = new Label(container, SWT.NONE);
-    title.setText(ModelMessages.ReorderDialog_childrenLabel);
-    GridDataFactory.create(title).spanH(2);
-    // reorder viewer
-    m_viewer = CheckboxTableViewer.newCheckList(container, SWT.FULL_SELECTION | SWT.BORDER);
-    m_viewer.addSelectionChangedListener(new ISelectionChangedListener() {
-      @Override
-      public void selectionChanged(SelectionChangedEvent e) {
-        do_viewer_selectionChanged();
-      }
-    });
-    m_viewer.setContentProvider(new ArrayContentProvider());
-    m_viewer.setLabelProvider(ObjectsLabelProvider.INSTANCE);
-    //
-    TableFactory.modify(m_viewer).headerVisible(true).linesVisible(true);
-    GridDataFactory.create(m_viewer.getControl()).fill().grab().hintC(60, 15);
-    TableFactory.modify(m_viewer).newColumn().width(convertWidthInCharsToPixels(60)).text(
-        ModelMessages.ReorderDialog_childColumn);
-    // show all components and select first
-    m_viewer.setInput(m_allInfos);
-    m_viewer.getTable().select(0);
-    // check all components that are already in tab order, or all, if there is not components
-    m_viewer.setCheckedElements(m_orderInfo.getOrderedInfos().toArray());
-    setupDragAndDrop();
-    // buttons bar
-    Composite buttonsComposite = new Composite(container, SWT.NONE);
-    GridLayoutFactory.create(buttonsComposite).noMargins();
-    GridDataFactory.create(buttonsComposite).fill().hintHC(18);
-    // up
-    m_upButton = new Button(buttonsComposite, SWT.NONE);
-    m_upButton.addSelectionListener(new SelectionAdapter() {
-      @Override
-      public void widgetSelected(SelectionEvent e) {
-        do_upButton_widgetSelected(e);
-      }
-    });
-    m_upButton.setText(ModelMessages.ReorderDialog_upButton);
-    GridDataFactory.create(m_upButton).fillH().grabH();
-    // down
-    m_downButton = new Button(buttonsComposite, SWT.NONE);
-    m_downButton.addSelectionListener(new SelectionAdapter() {
-      @Override
-      public void widgetSelected(SelectionEvent e) {
-        do_downButton_widgetSelected(e);
-      }
-    });
-    m_downButton.setText(ModelMessages.ReorderDialog_downButton);
-    GridDataFactory.create(m_downButton).fillH().grabH();
-    // filler
-    GridDataFactory.create(new Label(buttonsComposite, SWT.NONE)).fillH().grabH();
-    // select all
-    m_selectAllButton = new Button(buttonsComposite, SWT.NONE);
-    m_selectAllButton.addSelectionListener(new SelectionAdapter() {
-      @Override
-      public void widgetSelected(SelectionEvent e) {
-        m_viewer.setAllChecked(true);
-      }
-    });
-    m_selectAllButton.setText(ModelMessages.ReorderDialog_selectAllButton);
-    GridDataFactory.create(m_selectAllButton).fillH().grabH();
-    // unselect all
-    m_unSelectAllButton = new Button(buttonsComposite, SWT.NONE);
-    m_unSelectAllButton.addSelectionListener(new SelectionAdapter() {
-      @Override
-      public void widgetSelected(SelectionEvent e) {
-        m_viewer.setAllChecked(false);
-      }
-    });
-    m_unSelectAllButton.setText(ModelMessages.ReorderDialog_deselectAllButton);
-    GridDataFactory.create(m_unSelectAllButton).fillH().grabH();
-    // calculate start state
-    do_viewer_selectionChanged();
-    return container;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Control createDialogArea(Composite parent) {
+		// container
+		Composite container = (Composite) super.createDialogArea(parent);
+		GridLayoutFactory.create(container).columns(2);
+		// title
+		Label title = new Label(container, SWT.NONE);
+		title.setText(ModelMessages.ReorderDialog_childrenLabel);
+		GridDataFactory.create(title).spanH(2);
+		// reorder viewer
+		m_viewer = CheckboxTableViewer.newCheckList(container, SWT.FULL_SELECTION | SWT.BORDER);
+		m_viewer.addSelectionChangedListener(new ISelectionChangedListener() {
+			@Override
+			public void selectionChanged(SelectionChangedEvent e) {
+				do_viewer_selectionChanged();
+			}
+		});
+		m_viewer.setContentProvider(new ArrayContentProvider());
+		m_viewer.setLabelProvider(ObjectsLabelProvider.INSTANCE);
+		//
+		TableFactory.modify(m_viewer).headerVisible(true).linesVisible(true);
+		GridDataFactory.create(m_viewer.getControl()).fill().grab().hintC(60, 15);
+		TableFactory.modify(m_viewer).newColumn().width(convertWidthInCharsToPixels(60)).text(
+				ModelMessages.ReorderDialog_childColumn);
+		// show all components and select first
+		m_viewer.setInput(m_allInfos);
+		m_viewer.getTable().select(0);
+		// check all components that are already in tab order, or all, if there is not components
+		m_viewer.setCheckedElements(m_orderInfo.getOrderedInfos().toArray());
+		setupDragAndDrop();
+		// buttons bar
+		Composite buttonsComposite = new Composite(container, SWT.NONE);
+		GridLayoutFactory.create(buttonsComposite).noMargins();
+		GridDataFactory.create(buttonsComposite).fill().hintHC(18);
+		// up
+		m_upButton = new Button(buttonsComposite, SWT.NONE);
+		m_upButton.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				do_upButton_widgetSelected(e);
+			}
+		});
+		m_upButton.setText(ModelMessages.ReorderDialog_upButton);
+		GridDataFactory.create(m_upButton).fillH().grabH();
+		// down
+		m_downButton = new Button(buttonsComposite, SWT.NONE);
+		m_downButton.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				do_downButton_widgetSelected(e);
+			}
+		});
+		m_downButton.setText(ModelMessages.ReorderDialog_downButton);
+		GridDataFactory.create(m_downButton).fillH().grabH();
+		// filler
+		GridDataFactory.create(new Label(buttonsComposite, SWT.NONE)).fillH().grabH();
+		// select all
+		m_selectAllButton = new Button(buttonsComposite, SWT.NONE);
+		m_selectAllButton.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				m_viewer.setAllChecked(true);
+			}
+		});
+		m_selectAllButton.setText(ModelMessages.ReorderDialog_selectAllButton);
+		GridDataFactory.create(m_selectAllButton).fillH().grabH();
+		// unselect all
+		m_unSelectAllButton = new Button(buttonsComposite, SWT.NONE);
+		m_unSelectAllButton.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				m_viewer.setAllChecked(false);
+			}
+		});
+		m_unSelectAllButton.setText(ModelMessages.ReorderDialog_deselectAllButton);
+		GridDataFactory.create(m_unSelectAllButton).fillH().grabH();
+		// calculate start state
+		do_viewer_selectionChanged();
+		return container;
+	}
 
-  @Override
-  protected void configureShell(Shell newShell) {
-    super.configureShell(newShell);
-    newShell.setText(ModelMessages.ReorderDialog_title);
-  }
+	@Override
+	protected void configureShell(Shell newShell) {
+		super.configureShell(newShell);
+		newShell.setText(ModelMessages.ReorderDialog_title);
+	}
 
-  @Override
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Events handling
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected void okPressed() {
-    List<AbstractComponentInfo> orderedInfos = m_orderInfo.getOrderedInfos();
-    orderedInfos.clear();
-    for (Object element : m_viewer.getCheckedElements()) {
-      orderedInfos.add((AbstractComponentInfo) element);
-    }
-    super.okPressed();
-  }
+	@Override
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Events handling
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected void okPressed() {
+		List<AbstractComponentInfo> orderedInfos = m_orderInfo.getOrderedInfos();
+		orderedInfos.clear();
+		for (Object element : m_viewer.getCheckedElements()) {
+			orderedInfos.add((AbstractComponentInfo) element);
+		}
+		super.okPressed();
+	}
 
-  protected void do_viewer_selectionChanged() {
-    IStructuredSelection selection = getSelection();
-    if (selection.isEmpty()) {
-      m_upButton.setEnabled(false);
-      m_downButton.setEnabled(false);
-    } else {
-      JavaInfo child = (JavaInfo) selection.getFirstElement();
-      m_upButton.setEnabled(m_allInfos.indexOf(child) > 0);
-      m_downButton.setEnabled(m_allInfos.indexOf(child) < m_allInfos.size() - 1);
-    }
-  }
+	protected void do_viewer_selectionChanged() {
+		IStructuredSelection selection = getSelection();
+		if (selection.isEmpty()) {
+			m_upButton.setEnabled(false);
+			m_downButton.setEnabled(false);
+		} else {
+			JavaInfo child = (JavaInfo) selection.getFirstElement();
+			m_upButton.setEnabled(m_allInfos.indexOf(child) > 0);
+			m_downButton.setEnabled(m_allInfos.indexOf(child) < m_allInfos.size() - 1);
+		}
+	}
 
-  protected void do_upButton_widgetSelected(SelectionEvent e) {
-    AbstractComponentInfo child = getSelectionElement();
-    int index = m_allInfos.indexOf(child);
-    m_allInfos.remove(index);
-    m_allInfos.add(index - 1, child);
-    m_viewer.refresh();
-    do_viewer_selectionChanged();
-  }
+	protected void do_upButton_widgetSelected(SelectionEvent e) {
+		AbstractComponentInfo child = getSelectionElement();
+		int index = m_allInfos.indexOf(child);
+		m_allInfos.remove(index);
+		m_allInfos.add(index - 1, child);
+		m_viewer.refresh();
+		do_viewer_selectionChanged();
+	}
 
-  protected void do_downButton_widgetSelected(SelectionEvent e) {
-    AbstractComponentInfo child = getSelectionElement();
-    int index = m_allInfos.indexOf(child);
-    m_allInfos.remove(child);
-    m_allInfos.add(index + 1, child);
-    m_viewer.refresh();
-    do_viewer_selectionChanged();
-  }
+	protected void do_downButton_widgetSelected(SelectionEvent e) {
+		AbstractComponentInfo child = getSelectionElement();
+		int index = m_allInfos.indexOf(child);
+		m_allInfos.remove(child);
+		m_allInfos.add(index + 1, child);
+		m_viewer.refresh();
+		do_viewer_selectionChanged();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private IStructuredSelection getSelection() {
-    return (IStructuredSelection) m_viewer.getSelection();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private IStructuredSelection getSelection() {
+		return (IStructuredSelection) m_viewer.getSelection();
+	}
 
-  private AbstractComponentInfo getSelectionElement() {
-    return (AbstractComponentInfo) getSelection().getFirstElement();
-  }
+	private AbstractComponentInfo getSelectionElement() {
+		return (AbstractComponentInfo) getSelection().getFirstElement();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Drag and drop
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void setupDragAndDrop() {
-    int ops = DND.DROP_MOVE;
-    Transfer[] transfers = new Transfer[]{TreeTransfer.INSTANCE};
-    //
-    final AbstractComponentInfo dragWidget[] = new AbstractComponentInfo[1];
-    m_viewer.addDragSupport(ops, transfers, new DragSourceAdapter() {
-      @Override
-      public void dragStart(DragSourceEvent event) {
-        dragWidget[0] = getSelectionElement();
-      }
-    });
-    ViewerDropAdapter adapter = new ViewerDropAdapter(m_viewer) {
-      private AbstractComponentInfo m_targetWidget;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Drag and drop
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void setupDragAndDrop() {
+		int ops = DND.DROP_MOVE;
+		Transfer[] transfers = new Transfer[]{TreeTransfer.INSTANCE};
+		//
+		final AbstractComponentInfo dragWidget[] = new AbstractComponentInfo[1];
+		m_viewer.addDragSupport(ops, transfers, new DragSourceAdapter() {
+			@Override
+			public void dragStart(DragSourceEvent event) {
+				dragWidget[0] = getSelectionElement();
+			}
+		});
+		ViewerDropAdapter adapter = new ViewerDropAdapter(m_viewer) {
+			private AbstractComponentInfo m_targetWidget;
 
-      @Override
-      protected int determineLocation(DropTargetEvent event) {
-        int location = super.determineLocation(event);
-        if (location == LOCATION_BEFORE || location == LOCATION_AFTER) {
-          location = LOCATION_ON;
-        }
-        return location;
-      }
+			@Override
+			protected int determineLocation(DropTargetEvent event) {
+				int location = super.determineLocation(event);
+				if (location == LOCATION_BEFORE || location == LOCATION_AFTER) {
+					location = LOCATION_ON;
+				}
+				return location;
+			}
 
-      @Override
-      public boolean performDrop(Object data) {
-        int sourceIndex = m_allInfos.indexOf(dragWidget[0]);
-        int targetIndex = m_allInfos.indexOf(m_targetWidget);
-        m_allInfos.remove(sourceIndex);
-        if (m_targetWidget == null) {
-          m_allInfos.add(dragWidget[0]);
-        } else if (sourceIndex < targetIndex) {
-          m_allInfos.add(targetIndex - 1, dragWidget[0]);
-        } else {
-          m_allInfos.add(targetIndex, dragWidget[0]);
-        }
-        m_viewer.refresh();
-        return true;
-      }
+			@Override
+			public boolean performDrop(Object data) {
+				int sourceIndex = m_allInfos.indexOf(dragWidget[0]);
+				int targetIndex = m_allInfos.indexOf(m_targetWidget);
+				m_allInfos.remove(sourceIndex);
+				if (m_targetWidget == null) {
+					m_allInfos.add(dragWidget[0]);
+				} else if (sourceIndex < targetIndex) {
+					m_allInfos.add(targetIndex - 1, dragWidget[0]);
+				} else {
+					m_allInfos.add(targetIndex, dragWidget[0]);
+				}
+				m_viewer.refresh();
+				return true;
+			}
 
-      @Override
-      public boolean validateDrop(Object target, int operation, TransferData transferType) {
-        m_targetWidget = (AbstractComponentInfo) target;
-        return true;
-      }
-    };
-    adapter.setFeedbackEnabled(true);
-    m_viewer.addDropSupport(ops | DND.DROP_DEFAULT, transfers, adapter);
-  }
+			@Override
+			public boolean validateDrop(Object target, int operation, TransferData transferType) {
+				m_targetWidget = (AbstractComponentInfo) target;
+				return true;
+			}
+		};
+		adapter.setFeedbackEnabled(true);
+		m_viewer.addDropSupport(ops | DND.DROP_DEFAULT, transfers, adapter);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/order/TabOrderInfo.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/order/TabOrderInfo.java
index 952cb4d89..8e65bf6da 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/order/TabOrderInfo.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/order/TabOrderInfo.java
@@ -24,37 +24,37 @@
  * @coverage core.model.property.order
  */
 public final class TabOrderInfo {
-  private final List<AbstractComponentInfo> m_infos = Lists.newArrayList();
-  private final List<AbstractComponentInfo> m_orderedInfos = Lists.newArrayList();
-  private boolean m_isDefault;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void addOrderedInfo(AbstractComponentInfo info) throws Exception {
-    m_orderedInfos.add(info);
-  }
-
-  void reorder() {
-    m_infos.removeAll(m_orderedInfos);
-    m_infos.addAll(0, m_orderedInfos);
-  }
-
-  public List<AbstractComponentInfo> getInfos() {
-    return m_infos;
-  }
-
-  public List<AbstractComponentInfo> getOrderedInfos() {
-    return m_orderedInfos;
-  }
-
-  boolean isDefault() {
-    return m_isDefault;
-  }
-
-  void setDefault() {
-    m_isDefault = true;
-  }
+	private final List<AbstractComponentInfo> m_infos = Lists.newArrayList();
+	private final List<AbstractComponentInfo> m_orderedInfos = Lists.newArrayList();
+	private boolean m_isDefault;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void addOrderedInfo(AbstractComponentInfo info) throws Exception {
+		m_orderedInfos.add(info);
+	}
+
+	void reorder() {
+		m_infos.removeAll(m_orderedInfos);
+		m_infos.addAll(0, m_orderedInfos);
+	}
+
+	public List<AbstractComponentInfo> getInfos() {
+		return m_infos;
+	}
+
+	public List<AbstractComponentInfo> getOrderedInfos() {
+		return m_orderedInfos;
+	}
+
+	boolean isDefault() {
+		return m_isDefault;
+	}
+
+	void setDefault() {
+		m_isDefault = true;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/order/TabOrderProperty.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/order/TabOrderProperty.java
index fba403fa0..2e2271367 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/order/TabOrderProperty.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/order/TabOrderProperty.java
@@ -35,213 +35,213 @@
  * @coverage core.model.property.order
  */
 public abstract class TabOrderProperty extends Property {
-  protected final JavaInfo m_container;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public TabOrderProperty(JavaInfo container) {
-    super(TabOrderPropertyEditor.INSTANCE);
-    m_container = container;
-    //
-    m_container.addBroadcastListener(new ObjectInfoDelete() {
-      @Override
-      public void before(ObjectInfo parent, ObjectInfo child) throws Exception {
-        handleDeleteOrderElement(parent, child);
-      }
-    });
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final String getTitle() {
-    return "tab order";
-  }
-
-  @Override
-  public final boolean isModified() throws Exception {
-    return getOrderedArray() != null;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Value
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final Object getValue() throws Exception {
-    TabOrderInfo orderInfo = new TabOrderInfo();
-    // prepare all components
-    List<? extends AbstractComponentInfo> components = getTabPossibleChildren();
-    orderInfo.getInfos().addAll(components);
-    // calculate ordering
-    ArrayInitializer arrayInitializer = getOrderedArray();
-    if (arrayInitializer == null) {
-      orderInfo.setDefault();
-      // set default ordering
-      for (AbstractComponentInfo component : components) {
-        if (isDefaultOrdered(component)) {
-          orderInfo.addOrderedInfo(component);
-        }
-      }
-    } else {
-      // set current ordering
-      for (Expression expression : DomGenerics.expressions(arrayInitializer)) {
-        JavaInfo component = m_container.getChildRepresentedBy(expression);
-        if (component instanceof AbstractComponentInfo) {
-          orderInfo.addOrderedInfo((AbstractComponentInfo) component);
-        }
-      }
-      // reorder
-      orderInfo.reorder();
-    }
-    return orderInfo;
-  }
-
-  public final String getDisplayText() throws Exception {
-    // prepare ordering
-    ArrayInitializer arrayInitializer = getOrderedArray();
-    // check "no value"
-    if (arrayInitializer == null) {
-      return "";
-    }
-    // prepare current value
-    StringBuffer textBuffer = new StringBuffer("[");
-    for (Expression expression : DomGenerics.expressions(arrayInitializer)) {
-      JavaInfo component = m_container.getChildRepresentedBy(expression);
-      if (component instanceof AbstractComponentInfo) {
-        // check element separator
-        if (textBuffer.length() > 1) {
-          textBuffer.append(", ");
-        }
-        // next value
-        textBuffer.append(component.getVariableSupport().getTitle());
-      }
-    }
-    textBuffer.append(']');
-    return textBuffer.toString();
-  }
-
-  @Override
-  public final void setValue(final Object value) throws Exception {
-    ExecutionUtils.run(m_container, new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        setValueEx(value);
-      }
-    });
-  }
-
-  private void setValueEx(final Object value) throws Exception {
-    if (value == UNKNOWN_VALUE) {
-      // unknown value (maybe delete)
-      removePropertyAssociation();
-    } else {
-      TabOrderInfo orderInfo = (TabOrderInfo) value;
-      List<AbstractComponentInfo> orderedInfos = orderInfo.getOrderedInfos();
-      // remove existing (may be it was at wrong place)
-      removePropertyAssociation();
-      // set new value
-      if (!orderedInfos.isEmpty()) {
-        StringBuffer source = new StringBuffer("{");
-        for (AbstractComponentInfo component : orderedInfos) {
-          if (source.length() != 1) {
-            source.append(", ");
-          }
-          source.append(getComponentReference(component));
-        }
-        source.append("}");
-        setOrderedArraySource(source.toString());
-        // update related nodes
-        ArrayInitializer arrayInitializer = getOrderedArray();
-        Assert.isNotNull(arrayInitializer);
-        List<Expression> arrayArguments = DomGenerics.expressions(arrayInitializer);
-        int size = arrayArguments.size();
-        Assert.equals(orderedInfos.size(), size);
-        for (int i = 0; i < size; i++) {
-          orderedInfos.get(i).addRelatedNode(arrayArguments.get(i));
-        }
-      }
-    }
-  }
-
-  private static String getComponentReference(AbstractComponentInfo component) throws Exception {
-    return TemplateUtils.getExpression(component);
-  }
-
-  /**
-   * @return the list of all {@link JavaInfo} children supporting tab ordering.
-   */
-  protected abstract List<? extends AbstractComponentInfo> getTabPossibleChildren()
-      throws Exception;
-
-  /**
-   * @return <code>true</code> if given info can have focus.
-   */
-  protected abstract boolean isDefaultOrdered(AbstractComponentInfo component) throws Exception;
-
-  /**
-   * @return {@link ArrayInitializer} represented tab order value.
-   */
-  protected abstract ArrayInitializer getOrderedArray() throws Exception;
-
-  /**
-   * Sets new tab order source value.
-   */
-  protected abstract void setOrderedArraySource(String source) throws Exception;
-
-  /**
-   * Remove property code association: for example method invocation (setTabList() for SWT) or
-   * others.
-   */
-  protected abstract void removePropertyAssociation() throws Exception;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Delete
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final void handleDeleteOrderElement(ObjectInfo parent, ObjectInfo child) throws Exception {
-    if (hasOrderElement(parent, child)) {
-      TabOrderInfo orderInfo = (TabOrderInfo) getValue();
-      if (!orderInfo.isDefault() && orderInfo.getOrderedInfos().remove(child)) {
-        setValue(orderInfo);
-      }
-    }
-  }
-
-  protected boolean hasOrderElement(ObjectInfo parent, ObjectInfo child) throws Exception {
-    return parent == m_container;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tooltip
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public <T> T getAdapter(Class<T> adapter) {
-    // tooltip
-    if (adapter == PropertyTooltipProvider.class && getPropertyTooltipText() != null) {
-      return adapter.cast(new PropertyTooltipTextProvider() {
-        @Override
-        protected String getText(Property property) throws Exception {
-          return getPropertyTooltipText();
-        }
-      });
-    }
-    // other
-    return super.getAdapter(adapter);
-  }
-
-  /**
-   * @return property tooltip text or <code>null</code> otherwise.
-   */
-  protected abstract String getPropertyTooltipText();
+	protected final JavaInfo m_container;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public TabOrderProperty(JavaInfo container) {
+		super(TabOrderPropertyEditor.INSTANCE);
+		m_container = container;
+		//
+		m_container.addBroadcastListener(new ObjectInfoDelete() {
+			@Override
+			public void before(ObjectInfo parent, ObjectInfo child) throws Exception {
+				handleDeleteOrderElement(parent, child);
+			}
+		});
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final String getTitle() {
+		return "tab order";
+	}
+
+	@Override
+	public final boolean isModified() throws Exception {
+		return getOrderedArray() != null;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Value
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final Object getValue() throws Exception {
+		TabOrderInfo orderInfo = new TabOrderInfo();
+		// prepare all components
+		List<? extends AbstractComponentInfo> components = getTabPossibleChildren();
+		orderInfo.getInfos().addAll(components);
+		// calculate ordering
+		ArrayInitializer arrayInitializer = getOrderedArray();
+		if (arrayInitializer == null) {
+			orderInfo.setDefault();
+			// set default ordering
+			for (AbstractComponentInfo component : components) {
+				if (isDefaultOrdered(component)) {
+					orderInfo.addOrderedInfo(component);
+				}
+			}
+		} else {
+			// set current ordering
+			for (Expression expression : DomGenerics.expressions(arrayInitializer)) {
+				JavaInfo component = m_container.getChildRepresentedBy(expression);
+				if (component instanceof AbstractComponentInfo) {
+					orderInfo.addOrderedInfo((AbstractComponentInfo) component);
+				}
+			}
+			// reorder
+			orderInfo.reorder();
+		}
+		return orderInfo;
+	}
+
+	public final String getDisplayText() throws Exception {
+		// prepare ordering
+		ArrayInitializer arrayInitializer = getOrderedArray();
+		// check "no value"
+		if (arrayInitializer == null) {
+			return "";
+		}
+		// prepare current value
+		StringBuffer textBuffer = new StringBuffer("[");
+		for (Expression expression : DomGenerics.expressions(arrayInitializer)) {
+			JavaInfo component = m_container.getChildRepresentedBy(expression);
+			if (component instanceof AbstractComponentInfo) {
+				// check element separator
+				if (textBuffer.length() > 1) {
+					textBuffer.append(", ");
+				}
+				// next value
+				textBuffer.append(component.getVariableSupport().getTitle());
+			}
+		}
+		textBuffer.append(']');
+		return textBuffer.toString();
+	}
+
+	@Override
+	public final void setValue(final Object value) throws Exception {
+		ExecutionUtils.run(m_container, new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				setValueEx(value);
+			}
+		});
+	}
+
+	private void setValueEx(final Object value) throws Exception {
+		if (value == UNKNOWN_VALUE) {
+			// unknown value (maybe delete)
+			removePropertyAssociation();
+		} else {
+			TabOrderInfo orderInfo = (TabOrderInfo) value;
+			List<AbstractComponentInfo> orderedInfos = orderInfo.getOrderedInfos();
+			// remove existing (may be it was at wrong place)
+			removePropertyAssociation();
+			// set new value
+			if (!orderedInfos.isEmpty()) {
+				StringBuffer source = new StringBuffer("{");
+				for (AbstractComponentInfo component : orderedInfos) {
+					if (source.length() != 1) {
+						source.append(", ");
+					}
+					source.append(getComponentReference(component));
+				}
+				source.append("}");
+				setOrderedArraySource(source.toString());
+				// update related nodes
+				ArrayInitializer arrayInitializer = getOrderedArray();
+				Assert.isNotNull(arrayInitializer);
+				List<Expression> arrayArguments = DomGenerics.expressions(arrayInitializer);
+				int size = arrayArguments.size();
+				Assert.equals(orderedInfos.size(), size);
+				for (int i = 0; i < size; i++) {
+					orderedInfos.get(i).addRelatedNode(arrayArguments.get(i));
+				}
+			}
+		}
+	}
+
+	private static String getComponentReference(AbstractComponentInfo component) throws Exception {
+		return TemplateUtils.getExpression(component);
+	}
+
+	/**
+	 * @return the list of all {@link JavaInfo} children supporting tab ordering.
+	 */
+	protected abstract List<? extends AbstractComponentInfo> getTabPossibleChildren()
+			throws Exception;
+
+	/**
+	 * @return <code>true</code> if given info can have focus.
+	 */
+	protected abstract boolean isDefaultOrdered(AbstractComponentInfo component) throws Exception;
+
+	/**
+	 * @return {@link ArrayInitializer} represented tab order value.
+	 */
+	protected abstract ArrayInitializer getOrderedArray() throws Exception;
+
+	/**
+	 * Sets new tab order source value.
+	 */
+	protected abstract void setOrderedArraySource(String source) throws Exception;
+
+	/**
+	 * Remove property code association: for example method invocation (setTabList() for SWT) or
+	 * others.
+	 */
+	protected abstract void removePropertyAssociation() throws Exception;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Delete
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final void handleDeleteOrderElement(ObjectInfo parent, ObjectInfo child) throws Exception {
+		if (hasOrderElement(parent, child)) {
+			TabOrderInfo orderInfo = (TabOrderInfo) getValue();
+			if (!orderInfo.isDefault() && orderInfo.getOrderedInfos().remove(child)) {
+				setValue(orderInfo);
+			}
+		}
+	}
+
+	protected boolean hasOrderElement(ObjectInfo parent, ObjectInfo child) throws Exception {
+		return parent == m_container;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tooltip
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public <T> T getAdapter(Class<T> adapter) {
+		// tooltip
+		if (adapter == PropertyTooltipProvider.class && getPropertyTooltipText() != null) {
+			return adapter.cast(new PropertyTooltipTextProvider() {
+				@Override
+				protected String getText(Property property) throws Exception {
+					return getPropertyTooltipText();
+				}
+			});
+		}
+		// other
+		return super.getAdapter(adapter);
+	}
+
+	/**
+	 * @return property tooltip text or <code>null</code> otherwise.
+	 */
+	protected abstract String getPropertyTooltipText();
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/order/TabOrderPropertyEditor.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/order/TabOrderPropertyEditor.java
index 24482c261..c24d0ef76 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/order/TabOrderPropertyEditor.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/property/order/TabOrderPropertyEditor.java
@@ -24,38 +24,38 @@
  * @coverage core.model.property.order
  */
 public final class TabOrderPropertyEditor extends TextDialogPropertyEditor {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final PropertyEditor INSTANCE = new TabOrderPropertyEditor();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final PropertyEditor INSTANCE = new TabOrderPropertyEditor();
 
-  private TabOrderPropertyEditor() {
-  }
+	private TabOrderPropertyEditor() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getText(Property property) throws Exception {
-    TabOrderProperty orderProperty = (TabOrderProperty) property;
-    return orderProperty.getDisplayText();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getText(Property property) throws Exception {
+		TabOrderProperty orderProperty = (TabOrderProperty) property;
+		return orderProperty.getDisplayText();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void openDialog(Property property) throws Exception {
-    TabOrderInfo orderInfo = (TabOrderInfo) property.getValue();
-    ReorderDialog dialog = new ReorderDialog(DesignerPlugin.getShell(), orderInfo);
-    if (dialog.open() == Window.OK) {
-      property.setValue(orderInfo);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void openDialog(Property property) throws Exception {
+		TabOrderInfo orderInfo = (TabOrderInfo) property.getValue();
+		ReorderDialog dialog = new ReorderDialog(DesignerPlugin.getShell(), orderInfo);
+		if (dialog.open() == Window.OK) {
+			property.setValue(orderInfo);
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/AbstractMorphingSupport.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/AbstractMorphingSupport.java
index a1c7de37e..51c4b1911 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/AbstractMorphingSupport.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/AbstractMorphingSupport.java
@@ -45,303 +45,303 @@
  * @coverage core.model.util
  */
 public abstract class AbstractMorphingSupport<T extends ObjectInfo> {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance fields
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected final String m_toolkitClassName;
-  protected final T m_component;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance fields
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected final String m_toolkitClassName;
+	protected final T m_component;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected AbstractMorphingSupport(String toolkitClassName, T component) {
-    m_toolkitClassName = toolkitClassName;
-    m_component = component;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected AbstractMorphingSupport(String toolkitClassName, T component) {
+		m_toolkitClassName = toolkitClassName;
+		m_component = component;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected abstract IJavaProject getJavaProject();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected abstract IJavaProject getJavaProject();
 
-  protected abstract ClassLoader getClassLoader();
+	protected abstract ClassLoader getClassLoader();
 
-  protected abstract Class<?> getComponentClass();
+	protected abstract Class<?> getComponentClass();
 
-  protected abstract List<MorphingTargetDescription> getMorphingTargets();
+	protected abstract List<MorphingTargetDescription> getMorphingTargets();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Contribution
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Add "Morph" sub-menu to context {@link IContributionManager}.
-   *
-   * @return the "Morph" sub-menu manager.
-   */
-  protected static MenuManagerEx createMorphManager(IContributionManager manager) {
-    MenuManagerEx morphManager = new MenuManagerEx(ModelMessages.MorphingSupport_managerText);
-    morphManager.setImage(DesignerPlugin.getImage("actions/morph/morph2.png"));
-    manager.appendToGroup(IContextMenuConstants.GROUP_INHERITANCE, morphManager);
-    return morphManager;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Contribution
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Add "Morph" sub-menu to context {@link IContributionManager}.
+	 *
+	 * @return the "Morph" sub-menu manager.
+	 */
+	protected static MenuManagerEx createMorphManager(IContributionManager manager) {
+		MenuManagerEx morphManager = new MenuManagerEx(ModelMessages.MorphingSupport_managerText);
+		morphManager.setImage(DesignerPlugin.getImage("actions/morph/morph2.png"));
+		manager.appendToGroup(IContextMenuConstants.GROUP_INHERITANCE, morphManager);
+		return morphManager;
+	}
 
-  /**
-   * Contributes "morph" actions.
-   *
-   * @param morphingSupport
-   *          the {@link AbstractMorphingSupport<T>} that should be contributed.
-   * @param manager
-   *          the {@link IContributionManager} to add action to.
-   */
-  public static <T extends ObjectInfo> void contribute(AbstractMorphingSupport<T> morphingSupport,
-      IContributionManager manager) throws Exception {
-    MenuManagerEx morphManager = createMorphManager(manager);
-    // add known morphing targets
-    for (MorphingTargetDescription target : morphingSupport.getMorphingTargets()) {
-      morphManager.add(morphingSupport.new MorphTargetAction(target));
-    }
-    // add special actions
-    morphManager.add(new Separator());
-    {
-      String baseClassName = morphingSupport.getComponentClass().getName();
-      Action action = morphingSupport.new MorphSubclassAction(baseClassName);
-      action.setImageDescriptor(DesignerPlugin.getImageDescriptor("actions/morph/subclass.gif"));
-      action.setText(ModelMessages.MorphingSupport_subclassAction);
-      morphManager.add(action);
-    }
-    {
-      Action action = morphingSupport.new MorphSubclassAction(morphingSupport.m_toolkitClassName);
-      action.setImageDescriptor(DesignerPlugin.getImageDescriptor("actions/morph/other.gif"));
-      action.setText(ModelMessages.MorphingSupport_otherAction);
-      morphManager.add(action);
-    }
-  }
+	/**
+	 * Contributes "morph" actions.
+	 *
+	 * @param morphingSupport
+	 *          the {@link AbstractMorphingSupport<T>} that should be contributed.
+	 * @param manager
+	 *          the {@link IContributionManager} to add action to.
+	 */
+	public static <T extends ObjectInfo> void contribute(AbstractMorphingSupport<T> morphingSupport,
+			IContributionManager manager) throws Exception {
+		MenuManagerEx morphManager = createMorphManager(manager);
+		// add known morphing targets
+		for (MorphingTargetDescription target : morphingSupport.getMorphingTargets()) {
+			morphManager.add(morphingSupport.new MorphTargetAction(target));
+		}
+		// add special actions
+		morphManager.add(new Separator());
+		{
+			String baseClassName = morphingSupport.getComponentClass().getName();
+			Action action = morphingSupport.new MorphSubclassAction(baseClassName);
+			action.setImageDescriptor(DesignerPlugin.getImageDescriptor("actions/morph/subclass.gif"));
+			action.setText(ModelMessages.MorphingSupport_subclassAction);
+			morphManager.add(action);
+		}
+		{
+			Action action = morphingSupport.new MorphSubclassAction(morphingSupport.m_toolkitClassName);
+			action.setImageDescriptor(DesignerPlugin.getImageDescriptor("actions/morph/other.gif"));
+			action.setText(ModelMessages.MorphingSupport_otherAction);
+			morphManager.add(action);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Morphing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Validates if given {@link MorphingTargetDescription} can be used.
-   *
-   * @return the error message or <code>null</code>.
-   */
-  protected String validate(MorphingTargetDescription target) throws Exception {
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Morphing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Validates if given {@link MorphingTargetDescription} can be used.
+	 *
+	 * @return the error message or <code>null</code>.
+	 */
+	protected String validate(MorphingTargetDescription target) throws Exception {
+		return null;
+	}
 
-  /**
-   * Performs morphing to given {@link MorphingTargetDescription}.
-   */
-  protected void morph(MorphingTargetDescription target) throws Exception {
-    T newComponent = morph_create(target);
-    morph_replace(newComponent);
-    morph_properties(newComponent);
-    morph_children(newComponent);
-    morph_source(newComponent);
-    morph_finish(newComponent);
-  }
+	/**
+	 * Performs morphing to given {@link MorphingTargetDescription}.
+	 */
+	protected void morph(MorphingTargetDescription target) throws Exception {
+		T newComponent = morph_create(target);
+		morph_replace(newComponent);
+		morph_properties(newComponent);
+		morph_children(newComponent);
+		morph_source(newComponent);
+		morph_finish(newComponent);
+	}
 
-  protected abstract T morph_create(MorphingTargetDescription target) throws Exception;
+	protected abstract T morph_create(MorphingTargetDescription target) throws Exception;
 
-  protected abstract void morph_replace(T newComponent) throws Exception;
+	protected abstract void morph_replace(T newComponent) throws Exception;
 
-  protected abstract void morph_properties(T newComponent) throws Exception;
+	protected abstract void morph_properties(T newComponent) throws Exception;
 
-  protected abstract void morph_children(T newComponent) throws Exception;
+	protected abstract void morph_children(T newComponent) throws Exception;
 
-  protected abstract void morph_source(T newComponent) throws Exception;
+	protected abstract void morph_source(T newComponent) throws Exception;
 
-  protected abstract void morph_finish(T newComponent) throws Exception;
+	protected abstract void morph_finish(T newComponent) throws Exception;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected abstract ImageDescriptor getTargetImageDescriptor(MorphingTargetDescription target)
-      throws Exception;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected abstract ImageDescriptor getTargetImageDescriptor(MorphingTargetDescription target)
+			throws Exception;
 
-  protected abstract String getTargetText(MorphingTargetDescription target) throws Exception;
+	protected abstract String getTargetText(MorphingTargetDescription target) throws Exception;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // MorphTargetAction
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Abstract {@link Action} for morphing component.
-   */
-  protected abstract class MorphAction extends Action {
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Object - make "singleton"
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public final int hashCode() {
-      return 0;
-    }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// MorphTargetAction
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Abstract {@link Action} for morphing component.
+	 */
+	protected abstract class MorphAction extends Action {
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Object - make "singleton"
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public final int hashCode() {
+			return 0;
+		}
 
-    @Override
-    public final boolean equals(Object obj) {
-      if (obj instanceof AbstractMorphingSupport.MorphTargetAction) {
-        return true;
-      }
-      return false;
-    }
+		@Override
+		public final boolean equals(Object obj) {
+			if (obj instanceof AbstractMorphingSupport.MorphTargetAction) {
+				return true;
+			}
+			return false;
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Run
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public final void run() {
-      // prepare target
-      final MorphingTargetDescription target;
-      try {
-        target = getTarget();
-        // no target
-        if (target == null) {
-          return;
-        }
-        // validate
-        {
-          String message = validate(target);
-          if (message != null) {
-            MessageDialog.openError(
-                DesignerPlugin.getShell(),
-                ModelMessages.MorphingSupport_incompatibleTargetTitle,
-                message);
-            return;
-          }
-        }
-      } catch (Throwable e) {
-        DesignerPlugin.log(e);
-        return;
-      }
-      // do morph
-      {
-        RunnableEx runnable = new RunnableEx() {
-          @Override
-          public void run() throws Exception {
-            morph(target);
-          }
-        };
-        ObjectInfo rootObject = m_component.getRoot();
-        if (m_component != rootObject) {
-          ExecutionUtils.run(rootObject, runnable);
-        } else {
-          ExecutionUtils.runLog(runnable);
-        }
-      }
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Run
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public final void run() {
+			// prepare target
+			final MorphingTargetDescription target;
+			try {
+				target = getTarget();
+				// no target
+				if (target == null) {
+					return;
+				}
+				// validate
+				{
+					String message = validate(target);
+					if (message != null) {
+						MessageDialog.openError(
+								DesignerPlugin.getShell(),
+								ModelMessages.MorphingSupport_incompatibleTargetTitle,
+								message);
+						return;
+					}
+				}
+			} catch (Throwable e) {
+				DesignerPlugin.log(e);
+				return;
+			}
+			// do morph
+			{
+				RunnableEx runnable = new RunnableEx() {
+					@Override
+					public void run() throws Exception {
+						morph(target);
+					}
+				};
+				ObjectInfo rootObject = m_component.getRoot();
+				if (m_component != rootObject) {
+					ExecutionUtils.run(rootObject, runnable);
+				} else {
+					ExecutionUtils.runLog(runnable);
+				}
+			}
+		}
 
-    /**
-     * @return the target to morph to, or <code>null</code> if user canceled selection.
-     */
-    protected abstract MorphingTargetDescription getTarget() throws Exception;
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // MorphTargetAction
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * {@link Action} for morphing component into existing {@link MorphingTargetDescription}.
-   */
-  protected class MorphTargetAction extends MorphAction {
-    private final MorphingTargetDescription m_target;
+		/**
+		 * @return the target to morph to, or <code>null</code> if user canceled selection.
+		 */
+		protected abstract MorphingTargetDescription getTarget() throws Exception;
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// MorphTargetAction
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * {@link Action} for morphing component into existing {@link MorphingTargetDescription}.
+	 */
+	protected class MorphTargetAction extends MorphAction {
+		private final MorphingTargetDescription m_target;
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public MorphTargetAction(MorphingTargetDescription target) throws Exception {
-      m_target = target;
-      setImageDescriptor(getTargetImageDescriptor(target));
-      setText(getTargetText(target));
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public MorphTargetAction(MorphingTargetDescription target) throws Exception {
+			m_target = target;
+			setImageDescriptor(getTargetImageDescriptor(target));
+			setText(getTargetText(target));
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Run
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    protected MorphingTargetDescription getTarget() throws Exception {
-      return m_target;
-    }
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // MorphSubclassAction
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * {@link Action} for morphing component into user selected subclass.
-   */
-  protected class MorphSubclassAction extends MorphAction {
-    private final String m_baseClassName;
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Run
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		protected MorphingTargetDescription getTarget() throws Exception {
+			return m_target;
+		}
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// MorphSubclassAction
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * {@link Action} for morphing component into user selected subclass.
+	 */
+	protected class MorphSubclassAction extends MorphAction {
+		private final String m_baseClassName;
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public MorphSubclassAction(String baseClassName) {
-      m_baseClassName = baseClassName;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public MorphSubclassAction(String baseClassName) {
+			m_baseClassName = baseClassName;
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Run
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    protected MorphingTargetDescription getTarget() throws Exception {
-      // prepare scope
-      IJavaSearchScope scope;
-      {
-        IJavaProject project = getJavaProject();
-        IType componentType = project.findType(m_baseClassName);
-        scope = new SubtypesScope(componentType);
-      }
-      // prepare dialog
-      SelectionDialog dialog;
-      {
-        Shell shell = DesignerPlugin.getShell();
-        ProgressMonitorDialog context = new ProgressMonitorDialog(shell);
-        dialog =
-            JavaUI.createTypeDialog(
-                shell,
-                context,
-                scope,
-                IJavaElementSearchConstants.CONSIDER_CLASSES,
-                false);
-        dialog.setTitle(ModelMessages.MorphingSupport_chooseTitle);
-        dialog.setMessage(ModelMessages.MorphingSupport_chooseMessage);
-      }
-      // open dialog
-      if (dialog.open() == Window.OK) {
-        IType type = (IType) dialog.getResult()[0];
-        String typeName = type.getFullyQualifiedName();
-        Class<?> targetClass = getClassLoader().loadClass(typeName);
-        return new MorphingTargetDescription(targetClass, null);
-      }
-      // no target
-      return null;
-    }
-  }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Run
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		protected MorphingTargetDescription getTarget() throws Exception {
+			// prepare scope
+			IJavaSearchScope scope;
+			{
+				IJavaProject project = getJavaProject();
+				IType componentType = project.findType(m_baseClassName);
+				scope = new SubtypesScope(componentType);
+			}
+			// prepare dialog
+			SelectionDialog dialog;
+			{
+				Shell shell = DesignerPlugin.getShell();
+				ProgressMonitorDialog context = new ProgressMonitorDialog(shell);
+				dialog =
+						JavaUI.createTypeDialog(
+								shell,
+								context,
+								scope,
+								IJavaElementSearchConstants.CONSIDER_CLASSES,
+								false);
+				dialog.setTitle(ModelMessages.MorphingSupport_chooseTitle);
+				dialog.setMessage(ModelMessages.MorphingSupport_chooseMessage);
+			}
+			// open dialog
+			if (dialog.open() == Window.OK) {
+				IType type = (IType) dialog.getResult()[0];
+				String typeName = type.getFullyQualifiedName();
+				Class<?> targetClass = getClassLoader().loadClass(typeName);
+				return new MorphingTargetDescription(targetClass, null);
+			}
+			// no target
+			return null;
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/ExposeComponentSupport.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/ExposeComponentSupport.java
index cc7d4cb19..62669ffbe 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/ExposeComponentSupport.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/ExposeComponentSupport.java
@@ -56,236 +56,236 @@
  * @coverage core.model.util
  */
 public final class ExposeComponentSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Contribution
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * If possible, contributes "expose" action.
-   *
-   * @param component
-   *          the {@link JavaInfo} that should be exposed.
-   * @param manager
-   *          the {@link IContributionManager} to add action to.
-   * @param text
-   *          the text to display in action.
-   */
-  public static void contribute(JavaInfo component, IContributionManager manager, String text) {
-    // check for supported variable type
-    VariableSupport variableSupport = component.getVariableSupport();
-    if (!(variableSupport instanceof AbstractSimpleVariableSupport)) {
-      return;
-    }
-    // check, may be there is already method that returns this component
-    {
-      AstEditor editor = component.getEditor();
-      TypeDeclaration typeDeclaration = getTypeDeclaration(component);
-      for (MethodDeclaration method : typeDeclaration.getMethods()) {
-        List<Statement> statements = DomGenerics.statements(method);
-        if (statements.size() == 1 && statements.get(0) instanceof ReturnStatement) {
-          ReturnStatement returnStatement = (ReturnStatement) statements.get(0);
-          // check for "return fieldName;"
-          if (variableSupport.hasName()) {
-            String name = variableSupport.getName();
-            Expression expression = returnStatement.getExpression();
-            if (expression != null && editor.getSource(expression).equals(name)) {
-              return;
-            }
-          }
-        }
-      }
-    }
-    // OK, we can add expose action
-    manager.appendToGroup(
-        IContextMenuConstants.GROUP_INHERITANCE,
-        new ExposeAction(component, text));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Contribution
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * If possible, contributes "expose" action.
+	 *
+	 * @param component
+	 *          the {@link JavaInfo} that should be exposed.
+	 * @param manager
+	 *          the {@link IContributionManager} to add action to.
+	 * @param text
+	 *          the text to display in action.
+	 */
+	public static void contribute(JavaInfo component, IContributionManager manager, String text) {
+		// check for supported variable type
+		VariableSupport variableSupport = component.getVariableSupport();
+		if (!(variableSupport instanceof AbstractSimpleVariableSupport)) {
+			return;
+		}
+		// check, may be there is already method that returns this component
+		{
+			AstEditor editor = component.getEditor();
+			TypeDeclaration typeDeclaration = getTypeDeclaration(component);
+			for (MethodDeclaration method : typeDeclaration.getMethods()) {
+				List<Statement> statements = DomGenerics.statements(method);
+				if (statements.size() == 1 && statements.get(0) instanceof ReturnStatement) {
+					ReturnStatement returnStatement = (ReturnStatement) statements.get(0);
+					// check for "return fieldName;"
+					if (variableSupport.hasName()) {
+						String name = variableSupport.getName();
+						Expression expression = returnStatement.getExpression();
+						if (expression != null && editor.getSource(expression).equals(name)) {
+							return;
+						}
+					}
+				}
+			}
+		}
+		// OK, we can add expose action
+		manager.appendToGroup(
+				IContextMenuConstants.GROUP_INHERITANCE,
+				new ExposeAction(component, text));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Implementation
-  //
-  ///////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link TypeDeclaration} that contains given {@link JavaInfo} creation.
-   */
-  private static TypeDeclaration getTypeDeclaration(JavaInfo component) {
-    AstEditor editor = component.getEditor();
-    return EditorState.get(editor).getFlowDescription().geTypeDeclaration();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Implementation
+	//
+	///////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link TypeDeclaration} that contains given {@link JavaInfo} creation.
+	 */
+	private static TypeDeclaration getTypeDeclaration(JavaInfo component) {
+		AstEditor editor = component.getEditor();
+		return EditorState.get(editor).getFlowDescription().geTypeDeclaration();
+	}
 
-  /**
-   * Exposes component using <code>getXXX()</code> method.
-   *
-   * @param component
-   *          the component to expose.
-   * @param methodName
-   *          the name of method that should return component.
-   * @param modifier
-   *          the modifier source, such as <code>"public"</code> or <code>"protected"</code>.
-   */
-  private static void expose(JavaInfo component, String methodName, String modifier)
-      throws Exception {
-    AstEditor editor = component.getEditor();
-    TypeDeclaration typeDeclaration = getTypeDeclaration(component);
-    BodyDeclarationTarget methodTarget = new BodyDeclarationTarget(typeDeclaration, false);
-    // add method
-    String headerSource =
-        MessageFormat.format(
-            "{0} {1} {2}()",
-            modifier,
-            component.getDescription().getComponentClass().getName(),
-            methodName);
-    String returnSource = TemplateUtils.resolve(methodTarget, "return {0};", component);
-    editor.addMethodDeclaration(headerSource, ImmutableList.of(returnSource), methodTarget);
-  }
+	/**
+	 * Exposes component using <code>getXXX()</code> method.
+	 *
+	 * @param component
+	 *          the component to expose.
+	 * @param methodName
+	 *          the name of method that should return component.
+	 * @param modifier
+	 *          the modifier source, such as <code>"public"</code> or <code>"protected"</code>.
+	 */
+	private static void expose(JavaInfo component, String methodName, String modifier)
+			throws Exception {
+		AstEditor editor = component.getEditor();
+		TypeDeclaration typeDeclaration = getTypeDeclaration(component);
+		BodyDeclarationTarget methodTarget = new BodyDeclarationTarget(typeDeclaration, false);
+		// add method
+		String headerSource =
+				MessageFormat.format(
+						"{0} {1} {2}()",
+						modifier,
+						component.getDescription().getComponentClass().getName(),
+						methodName);
+		String returnSource = TemplateUtils.resolve(methodTarget, "return {0};", component);
+		editor.addMethodDeclaration(headerSource, ImmutableList.of(returnSource), methodTarget);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Expose action
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * {@link Action} for exposing {@link JavaInfo}.
-   */
-  private static final class ExposeAction extends Action {
-    private final JavaInfo m_component;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Expose action
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * {@link Action} for exposing {@link JavaInfo}.
+	 */
+	private static final class ExposeAction extends Action {
+		private final JavaInfo m_component;
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public ExposeAction(JavaInfo component, String text) {
-      m_component = component;
-      setText(text);
-      setImageDescriptor(DesignerPlugin.getImageDescriptor("actions/expose/exposeComponent.png"));
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public ExposeAction(JavaInfo component, String text) {
+			m_component = component;
+			setText(text);
+			setImageDescriptor(DesignerPlugin.getImageDescriptor("actions/expose/exposeComponent.png"));
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Run
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public void run() {
-      final ExposeDialog dialog = new ExposeDialog(m_component);
-      if (dialog.open() == Window.OK) {
-        ExecutionUtils.run(m_component, new RunnableEx() {
-          @Override
-          public void run() throws Exception {
-            expose(m_component, dialog.getName(), dialog.isPublic() ? "public" : "protected");
-          }
-        });
-      }
-    }
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Expose dialog
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Dialog for requesting parameters for exposing {@link JavaInfo}.
-   */
-  private static class ExposeDialog extends AbstractValidationTitleAreaDialog {
-    private final JavaInfo m_component;
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Run
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public void run() {
+			final ExposeDialog dialog = new ExposeDialog(m_component);
+			if (dialog.open() == Window.OK) {
+				ExecutionUtils.run(m_component, new RunnableEx() {
+					@Override
+					public void run() throws Exception {
+						expose(m_component, dialog.getName(), dialog.isPublic() ? "public" : "protected");
+					}
+				});
+			}
+		}
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Expose dialog
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Dialog for requesting parameters for exposing {@link JavaInfo}.
+	 */
+	private static class ExposeDialog extends AbstractValidationTitleAreaDialog {
+		private final JavaInfo m_component;
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public ExposeDialog(JavaInfo component) {
-      super(DesignerPlugin.getShell(),
-          DesignerPlugin.getDefault(),
-          ModelMessages.ExposeComponentSupport_shellTitle,
-          ModelMessages.ExposeComponentSupport_title,
-          DesignerPlugin.getImage("actions/expose/expose_banner.gif"),
-          ModelMessages.ExposeComponentSupport_message);
-      m_component = component;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public ExposeDialog(JavaInfo component) {
+			super(DesignerPlugin.getShell(),
+					DesignerPlugin.getDefault(),
+					ModelMessages.ExposeComponentSupport_shellTitle,
+					ModelMessages.ExposeComponentSupport_title,
+					DesignerPlugin.getImage("actions/expose/expose_banner.gif"),
+					ModelMessages.ExposeComponentSupport_message);
+			m_component = component;
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // GUI
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    private StringDialogField m_nameField;
-    private SelectionButtonDialogFieldGroup m_modifierField;
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// GUI
+		//
+		////////////////////////////////////////////////////////////////////////////
+		private StringDialogField m_nameField;
+		private SelectionButtonDialogFieldGroup m_modifierField;
 
-    @Override
-    protected void createControls(Composite container) {
-      m_fieldsContainer = container;
-      GridLayoutFactory.create(container).columns(2);
-      // name
-      {
-        m_nameField = new StringDialogField();
-        doCreateField(m_nameField, ModelMessages.ExposeComponentSupport_methodLabel);
-        {
-          String componentName = m_component.getVariableSupport().getComponentName();
-          m_nameField.setText("get" + StringUtils.capitalize(componentName));
-        }
-      }
-      // modifier
-      {
-        m_modifierField =
-            new SelectionButtonDialogFieldGroup(SWT.RADIO,
-                new String[]{"&public", "pro&tected"},
-                1,
-                SWT.SHADOW_ETCHED_IN);
-        doCreateField(m_modifierField, ModelMessages.ExposeComponentSupport_modifierLabel);
-      }
-    }
+		@Override
+		protected void createControls(Composite container) {
+			m_fieldsContainer = container;
+			GridLayoutFactory.create(container).columns(2);
+			// name
+			{
+				m_nameField = new StringDialogField();
+				doCreateField(m_nameField, ModelMessages.ExposeComponentSupport_methodLabel);
+				{
+					String componentName = m_component.getVariableSupport().getComponentName();
+					m_nameField.setText("get" + StringUtils.capitalize(componentName));
+				}
+			}
+			// modifier
+			{
+				m_modifierField =
+						new SelectionButtonDialogFieldGroup(SWT.RADIO,
+								new String[]{"&public", "pro&tected"},
+								1,
+								SWT.SHADOW_ETCHED_IN);
+				doCreateField(m_modifierField, ModelMessages.ExposeComponentSupport_modifierLabel);
+			}
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Validation
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    protected String validate() {
-      {
-        String methodName = m_nameField.getText();
-        String methodSignature = methodName + "()";
-        if (AstNodeUtils.getMethodBySignature(getTypeDeclaration(m_component), methodSignature) != null) {
-          return MessageFormat.format(
-              ModelMessages.ExposeComponentSupport_methodAlreadyExists,
-              methodSignature);
-        }
-      }
-      // OK
-      return null;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Validation
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		protected String validate() {
+			{
+				String methodName = m_nameField.getText();
+				String methodSignature = methodName + "()";
+				if (AstNodeUtils.getMethodBySignature(getTypeDeclaration(m_component), methodSignature) != null) {
+					return MessageFormat.format(
+							ModelMessages.ExposeComponentSupport_methodAlreadyExists,
+							methodSignature);
+				}
+			}
+			// OK
+			return null;
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Access
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public String getName() {
-      return m_nameField.getText();
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Access
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public String getName() {
+			return m_nameField.getText();
+		}
 
-    public boolean isPublic() {
-      return m_modifierField.getSelection()[0] == 0;
-    }
+		public boolean isPublic() {
+			return m_modifierField.getSelection()[0] == 0;
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Utils
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    private Composite m_fieldsContainer;
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Utils
+		//
+		////////////////////////////////////////////////////////////////////////////
+		private Composite m_fieldsContainer;
 
-    /**
-     * Configures given {@link DialogField} for specific of this dialog.
-     */
-    protected final void doCreateField(DialogField dialogField, String labelText) {
-      dialogField.setLabelText(labelText);
-      dialogField.setDialogFieldListener(m_validateListener);
-      DialogFieldUtils.fillControls(m_fieldsContainer, dialogField, 2, 60);
-    }
-  }
+		/**
+		 * Configures given {@link DialogField} for specific of this dialog.
+		 */
+		protected final void doCreateField(DialogField dialogField, String labelText) {
+			dialogField.setLabelText(labelText);
+			dialogField.setDialogFieldListener(m_validateListener);
+			DialogFieldUtils.fillControls(m_fieldsContainer, dialogField, 2, 60);
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/ExposePropertySupport.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/ExposePropertySupport.java
index 3ed3d7807..e3d482d78 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/ExposePropertySupport.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/ExposePropertySupport.java
@@ -53,363 +53,363 @@
  * @coverage core.util
  */
 public final class ExposePropertySupport implements IPropertiesMenuContributor {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final IPropertiesMenuContributor INSTANCE = new ExposePropertySupport();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final IPropertiesMenuContributor INSTANCE = new ExposePropertySupport();
 
-  private ExposePropertySupport() {
-  }
+	private ExposePropertySupport() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IPropertiesMenuContributor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void contributeMenu(IMenuManager manager, Property property) throws Exception {
-    if (property instanceof GenericPropertyImpl) {
-      GenericPropertyImpl genericProperty = (GenericPropertyImpl) property;
-      IExposableExpressionAccessor accessor =
-          AccessorUtils.getExposableExpressionAccessor(property);
-      if (accessor != null) {
-        manager.insertAfter(GROUP_EDIT, new ExposePropertyAction(genericProperty, accessor));
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IPropertiesMenuContributor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void contributeMenu(IMenuManager manager, Property property) throws Exception {
+		if (property instanceof GenericPropertyImpl) {
+			GenericPropertyImpl genericProperty = (GenericPropertyImpl) property;
+			IExposableExpressionAccessor accessor =
+					AccessorUtils.getExposableExpressionAccessor(property);
+			if (accessor != null) {
+				manager.insertAfter(GROUP_EDIT, new ExposePropertyAction(genericProperty, accessor));
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Action
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static class ExposePropertyAction extends Action {
-    private final GenericPropertyImpl m_property;
-    private final IExposableExpressionAccessor m_exposableAccessor;
-    private final JavaInfo m_javaInfo;
-    private final AstEditor m_editor;
-    private final TypeDeclaration m_typeDeclaration;
-    private final String m_propertyTypeName;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Action
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static class ExposePropertyAction extends Action {
+		private final GenericPropertyImpl m_property;
+		private final IExposableExpressionAccessor m_exposableAccessor;
+		private final JavaInfo m_javaInfo;
+		private final AstEditor m_editor;
+		private final TypeDeclaration m_typeDeclaration;
+		private final String m_propertyTypeName;
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public ExposePropertyAction(GenericPropertyImpl property,
-        IExposableExpressionAccessor exposableAccessor) {
-      setImageDescriptor(DesignerPlugin.getImageDescriptor("actions/expose/exposeProperty.png"));
-      setText(ModelMessages.ExposePropertyAction_text);
-      setToolTipText(ModelMessages.ExposePropertyAction_tooltip);
-      // model
-      m_property = property;
-      m_exposableAccessor = exposableAccessor;
-      // update state
-      m_javaInfo = m_property.getJavaInfo();
-      m_editor = m_javaInfo.getEditor();
-      m_typeDeclaration = JavaInfoUtils.getTypeDeclaration(m_javaInfo);
-      m_propertyTypeName =
-          ReflectionUtils.getFullyQualifiedName(
-              m_exposableAccessor.getValueClass(m_javaInfo),
-              false);
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public ExposePropertyAction(GenericPropertyImpl property,
+				IExposableExpressionAccessor exposableAccessor) {
+			setImageDescriptor(DesignerPlugin.getImageDescriptor("actions/expose/exposeProperty.png"));
+			setText(ModelMessages.ExposePropertyAction_text);
+			setToolTipText(ModelMessages.ExposePropertyAction_tooltip);
+			// model
+			m_property = property;
+			m_exposableAccessor = exposableAccessor;
+			// update state
+			m_javaInfo = m_property.getJavaInfo();
+			m_editor = m_javaInfo.getEditor();
+			m_typeDeclaration = JavaInfoUtils.getTypeDeclaration(m_javaInfo);
+			m_propertyTypeName =
+					ReflectionUtils.getFullyQualifiedName(
+							m_exposableAccessor.getValueClass(m_javaInfo),
+							false);
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Run
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public void run() {
-      final ExposeDialog dialog = new ExposeDialog();
-      if (dialog.open() == Window.OK) {
-        ExecutionUtils.run(m_javaInfo, new RunnableEx() {
-          @Override
-          public void run() throws Exception {
-            expose(dialog.isPublic());
-          }
-        });
-      }
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Run
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public void run() {
+			final ExposeDialog dialog = new ExposeDialog();
+			if (dialog.open() == Window.OK) {
+				ExecutionUtils.run(m_javaInfo, new RunnableEx() {
+					@Override
+					public void run() throws Exception {
+						expose(dialog.isPublic());
+					}
+				});
+			}
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Implementation
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    private String m_exposedName;
-    private String m_exposedGetter;
-    private String m_exposedSetter;
-    private String m_exposedSetterParameter;
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Implementation
+		//
+		////////////////////////////////////////////////////////////////////////////
+		private String m_exposedName;
+		private String m_exposedGetter;
+		private String m_exposedSetter;
+		private String m_exposedSetterParameter;
 
-    /**
-     * Sets the currently entered by user name of exposed property.<br>
-     * This automatically updates all values that depend on it, and used in both
-     * {@link ExposeDialog} and this action.
-     */
-    private void setExposedName(String exposedName) {
-      m_exposedName = exposedName;
-      m_exposedGetter = "get" + StringUtils.capitalize(m_exposedName);
-      m_exposedSetter = "set" + StringUtils.capitalize(m_exposedName);
-      {
-        final List<VariableDeclaration> variables =
-            AstNodeUtils.getVariableDeclarationsAll(m_editor.getAstUnit());
-        m_exposedSetterParameter =
-            CodeUtils.generateUniqueName(m_property.getTitle(), new Predicate<String>() {
-              @Override
-              public boolean apply(String name) {
-                for (VariableDeclaration variable : variables) {
-                  if (variable.getName().getIdentifier().equals(name)) {
-                    return false;
-                  }
-                }
-                return true;
-              }
-            });
-      }
-    }
+		/**
+		 * Sets the currently entered by user name of exposed property.<br>
+		 * This automatically updates all values that depend on it, and used in both
+		 * {@link ExposeDialog} and this action.
+		 */
+		private void setExposedName(String exposedName) {
+			m_exposedName = exposedName;
+			m_exposedGetter = "get" + StringUtils.capitalize(m_exposedName);
+			m_exposedSetter = "set" + StringUtils.capitalize(m_exposedName);
+			{
+				final List<VariableDeclaration> variables =
+						AstNodeUtils.getVariableDeclarationsAll(m_editor.getAstUnit());
+				m_exposedSetterParameter =
+						CodeUtils.generateUniqueName(m_property.getTitle(), new Predicate<String>() {
+							@Override
+							public boolean apply(String name) {
+								for (VariableDeclaration variable : variables) {
+									if (variable.getName().getIdentifier().equals(name)) {
+										return false;
+									}
+								}
+								return true;
+							}
+						});
+			}
+		}
 
-    /**
-     * Validates the currently entered by user name of exposed property.
-     *
-     * @return the error message, or <code>null</code> if given name is valid.
-     */
-    private String validate(String exposedName) {
-      setExposedName(exposedName);
-      // check for valid identifier
-      {
-        IStatus status = JavaConventions.validateIdentifier(m_exposedName);
-        if (status.getSeverity() == IStatus.ERROR) {
-          return status.getMessage();
-        }
-      }
-      // check for existing getter
-      {
-        String signature = m_exposedGetter + "()";
-        if (AstNodeUtils.getMethodBySignature(m_typeDeclaration, signature) != null) {
-          return MessageFormat.format(
-              ModelMessages.ExposePropertyAction_validateMethodAlreadyExists,
-              signature);
-        }
-      }
-      // check for existing setter
-      {
-        String signature = m_exposedSetter + "(" + m_propertyTypeName + ")";
-        if (AstNodeUtils.getMethodBySignature(m_typeDeclaration, signature) != null) {
-          return MessageFormat.format(
-              ModelMessages.ExposePropertyAction_validateMethodAlreadyExists,
-              signature);
-        }
-      }
-      // OK
-      return null;
-    }
+		/**
+		 * Validates the currently entered by user name of exposed property.
+		 *
+		 * @return the error message, or <code>null</code> if given name is valid.
+		 */
+		private String validate(String exposedName) {
+			setExposedName(exposedName);
+			// check for valid identifier
+			{
+				IStatus status = JavaConventions.validateIdentifier(m_exposedName);
+				if (status.getSeverity() == IStatus.ERROR) {
+					return status.getMessage();
+				}
+			}
+			// check for existing getter
+			{
+				String signature = m_exposedGetter + "()";
+				if (AstNodeUtils.getMethodBySignature(m_typeDeclaration, signature) != null) {
+					return MessageFormat.format(
+							ModelMessages.ExposePropertyAction_validateMethodAlreadyExists,
+							signature);
+				}
+			}
+			// check for existing setter
+			{
+				String signature = m_exposedSetter + "(" + m_propertyTypeName + ")";
+				if (AstNodeUtils.getMethodBySignature(m_typeDeclaration, signature) != null) {
+					return MessageFormat.format(
+							ModelMessages.ExposePropertyAction_validateMethodAlreadyExists,
+							signature);
+				}
+			}
+			// OK
+			return null;
+		}
 
-    /**
-     * Prepares source for preview.
-     *
-     * @param isPublic
-     *          is <code>true</code> if <code>public</code> modifier should be used and
-     *          <code>false</code> for <code>protected</code> modifier.
-     */
-    private String getPreviewSource(boolean isPublic) throws Exception {
-      String modifierSource = isPublic ? "public" : "protected";
-      String propertyTypeName = CodeUtils.getShortClass(m_propertyTypeName);
-      String accessExpression = m_javaInfo.getVariableSupport().getName() + ".";
-      // prepare source
-      String source = "";
-      {
-        source += "...\n";
-        // getter
-        {
-          source +=
-              MessageFormat.format(
-                  "\t{0} {1} {2}() '{'\n",
-                  modifierSource,
-                  propertyTypeName,
-                  m_exposedGetter);
-          source +=
-              MessageFormat.format(
-                  "\t\treturn {0}{1};\n",
-                  accessExpression,
-                  m_exposableAccessor.getGetterCode(m_javaInfo));
-          source += "\t}\n";
-        }
-        // setter
-        {
-          source +=
-              MessageFormat.format(
-                  "\t{0} void {1}({2} {3}) '{'\n",
-                  modifierSource,
-                  m_exposedSetter,
-                  propertyTypeName,
-                  m_exposedSetterParameter);
-          source +=
-              MessageFormat.format(
-                  "\t\t{0}{1};\n",
-                  accessExpression,
-                  m_exposableAccessor.getSetterCode(m_javaInfo, m_exposedSetterParameter));
-          source += "\t}\n";
-        }
-        // end
-        source += "...\n";
-      }
-      // final result
-      return source;
-    }
+		/**
+		 * Prepares source for preview.
+		 *
+		 * @param isPublic
+		 *          is <code>true</code> if <code>public</code> modifier should be used and
+		 *          <code>false</code> for <code>protected</code> modifier.
+		 */
+		private String getPreviewSource(boolean isPublic) throws Exception {
+			String modifierSource = isPublic ? "public" : "protected";
+			String propertyTypeName = CodeUtils.getShortClass(m_propertyTypeName);
+			String accessExpression = m_javaInfo.getVariableSupport().getName() + ".";
+			// prepare source
+			String source = "";
+			{
+				source += "...\n";
+				// getter
+				{
+					source +=
+							MessageFormat.format(
+									"\t{0} {1} {2}() '{'\n",
+									modifierSource,
+									propertyTypeName,
+									m_exposedGetter);
+					source +=
+							MessageFormat.format(
+									"\t\treturn {0}{1};\n",
+									accessExpression,
+									m_exposableAccessor.getGetterCode(m_javaInfo));
+					source += "\t}\n";
+				}
+				// setter
+				{
+					source +=
+							MessageFormat.format(
+									"\t{0} void {1}({2} {3}) '{'\n",
+									modifierSource,
+									m_exposedSetter,
+									propertyTypeName,
+									m_exposedSetterParameter);
+					source +=
+							MessageFormat.format(
+									"\t\t{0}{1};\n",
+									accessExpression,
+									m_exposableAccessor.getSetterCode(m_javaInfo, m_exposedSetterParameter));
+					source += "\t}\n";
+				}
+				// end
+				source += "...\n";
+			}
+			// final result
+			return source;
+		}
 
-    /**
-     * Generates getter/setter for exposing property.
-     */
-    private void expose(boolean isPublic) throws Exception {
-      BodyDeclarationTarget methodTarget = new BodyDeclarationTarget(m_typeDeclaration, false);
-      String modifierSource = isPublic ? "public" : "protected";
-      // getter
-      {
-        String header = modifierSource + " " + m_propertyTypeName + " " + m_exposedGetter + "()";
-        String body =
-            TemplateUtils.resolve(
-                methodTarget,
-                "return {0}.{1};",
-                m_javaInfo,
-                m_exposableAccessor.getGetterCode(m_javaInfo));
-        m_editor.addMethodDeclaration(header, ImmutableList.of(body), methodTarget);
-      }
-      // setter
-      {
-        String header =
-            MessageFormat.format(
-                "{0} void {1}({2} {3})",
-                modifierSource,
-                m_exposedSetter,
-                m_propertyTypeName,
-                m_exposedSetterParameter);
-        String body =
-            TemplateUtils.resolve(
-                methodTarget,
-                "{0}.{1};",
-                m_javaInfo,
-                m_exposableAccessor.getSetterCode(m_javaInfo, m_exposedSetterParameter));
-        m_editor.addMethodDeclaration(header, ImmutableList.of(body), methodTarget);
-      }
-    }
+		/**
+		 * Generates getter/setter for exposing property.
+		 */
+		private void expose(boolean isPublic) throws Exception {
+			BodyDeclarationTarget methodTarget = new BodyDeclarationTarget(m_typeDeclaration, false);
+			String modifierSource = isPublic ? "public" : "protected";
+			// getter
+			{
+				String header = modifierSource + " " + m_propertyTypeName + " " + m_exposedGetter + "()";
+				String body =
+						TemplateUtils.resolve(
+								methodTarget,
+								"return {0}.{1};",
+								m_javaInfo,
+								m_exposableAccessor.getGetterCode(m_javaInfo));
+				m_editor.addMethodDeclaration(header, ImmutableList.of(body), methodTarget);
+			}
+			// setter
+			{
+				String header =
+						MessageFormat.format(
+								"{0} void {1}({2} {3})",
+								modifierSource,
+								m_exposedSetter,
+								m_propertyTypeName,
+								m_exposedSetterParameter);
+				String body =
+						TemplateUtils.resolve(
+								methodTarget,
+								"{0}.{1};",
+								m_javaInfo,
+								m_exposableAccessor.getSetterCode(m_javaInfo, m_exposedSetterParameter));
+				m_editor.addMethodDeclaration(header, ImmutableList.of(body), methodTarget);
+			}
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Expose dialog
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    /**
-     * Dialog for requesting parameters for exposing {@link AbstractComponentInfo}.
-     */
-    private class ExposeDialog extends AbstractValidationTitleAreaDialog {
-      ////////////////////////////////////////////////////////////////////////////
-      //
-      // Constructor
-      //
-      ////////////////////////////////////////////////////////////////////////////
-      public ExposeDialog() {
-        super(DesignerPlugin.getShell(),
-            DesignerPlugin.getDefault(),
-            ModelMessages.ExposePropertyAction_dialogShellTitle,
-            ModelMessages.ExposePropertyAction_dialogTitle,
-            DesignerPlugin.getImage("actions/expose/expose_banner.gif"),
-            ModelMessages.ExposePropertyAction_dialogMessage);
-        setShellStyle(SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
-      }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Expose dialog
+		//
+		////////////////////////////////////////////////////////////////////////////
+		/**
+		 * Dialog for requesting parameters for exposing {@link AbstractComponentInfo}.
+		 */
+		private class ExposeDialog extends AbstractValidationTitleAreaDialog {
+			////////////////////////////////////////////////////////////////////////////
+			//
+			// Constructor
+			//
+			////////////////////////////////////////////////////////////////////////////
+			public ExposeDialog() {
+				super(DesignerPlugin.getShell(),
+						DesignerPlugin.getDefault(),
+						ModelMessages.ExposePropertyAction_dialogShellTitle,
+						ModelMessages.ExposePropertyAction_dialogTitle,
+						DesignerPlugin.getImage("actions/expose/expose_banner.gif"),
+						ModelMessages.ExposePropertyAction_dialogMessage);
+				setShellStyle(SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
+			}
 
-      ////////////////////////////////////////////////////////////////////////////
-      //
-      // GUI
-      //
-      ////////////////////////////////////////////////////////////////////////////
-      private StringDialogField m_nameField;
-      private SelectionButtonDialogFieldGroup m_modifierField;
-      private SourceViewer m_previewViewer;
+			////////////////////////////////////////////////////////////////////////////
+			//
+			// GUI
+			//
+			////////////////////////////////////////////////////////////////////////////
+			private StringDialogField m_nameField;
+			private SelectionButtonDialogFieldGroup m_modifierField;
+			private SourceViewer m_previewViewer;
 
-      @Override
-      protected void createControls(Composite container) {
-        m_fieldsContainer = container;
-        GridLayoutFactory.create(container).columns(2);
-        // name
-        {
-          m_nameField = new StringDialogField();
-          doCreateField(m_nameField, ModelMessages.ExposePropertyAction_dialogPropertyLabel);
-          // initial name
-          String exposedName =
-              m_javaInfo.getVariableSupport().getComponentName()
-                  + StringUtils.capitalize(m_property.getTitle());
-          m_nameField.setText(exposedName);
-        }
-        // modifier
-        {
-          m_modifierField =
-              new SelectionButtonDialogFieldGroup(SWT.RADIO,
-                  new String[]{"&public", "pro&tected"},
-                  1,
-                  SWT.SHADOW_ETCHED_IN);
-          doCreateField(m_modifierField, ModelMessages.ExposePropertyAction_dialogModifier);
-        }
-        // preview
-        {
-          new Label(container, SWT.NONE).setText(ModelMessages.ExposePropertyAction_dialogPreview);
-          m_previewViewer = JdtUiUtils.createJavaSourceViewer(container, SWT.BORDER | SWT.V_SCROLL);
-          GridDataFactory.create(m_previewViewer.getControl()).spanH(2).hintVC(9).grab().fill();
-        }
-      }
+			@Override
+			protected void createControls(Composite container) {
+				m_fieldsContainer = container;
+				GridLayoutFactory.create(container).columns(2);
+				// name
+				{
+					m_nameField = new StringDialogField();
+					doCreateField(m_nameField, ModelMessages.ExposePropertyAction_dialogPropertyLabel);
+					// initial name
+					String exposedName =
+							m_javaInfo.getVariableSupport().getComponentName()
+							+ StringUtils.capitalize(m_property.getTitle());
+					m_nameField.setText(exposedName);
+				}
+				// modifier
+				{
+					m_modifierField =
+							new SelectionButtonDialogFieldGroup(SWT.RADIO,
+									new String[]{"&public", "pro&tected"},
+									1,
+									SWT.SHADOW_ETCHED_IN);
+					doCreateField(m_modifierField, ModelMessages.ExposePropertyAction_dialogModifier);
+				}
+				// preview
+				{
+					new Label(container, SWT.NONE).setText(ModelMessages.ExposePropertyAction_dialogPreview);
+					m_previewViewer = JdtUiUtils.createJavaSourceViewer(container, SWT.BORDER | SWT.V_SCROLL);
+					GridDataFactory.create(m_previewViewer.getControl()).spanH(2).hintVC(9).grab().fill();
+				}
+			}
 
-      ////////////////////////////////////////////////////////////////////////////
-      //
-      // Validation
-      //
-      ////////////////////////////////////////////////////////////////////////////
-      @Override
-      protected String validate() throws Exception {
-        // validate
-        {
-          String message = ExposePropertyAction.this.validate(m_nameField.getText());
-          if (message != null) {
-            JdtUiUtils.setJavaSourceForViewer(
-                m_previewViewer,
-                ModelMessages.ExposePropertyAction_dialogNoPreview);
-            return message;
-          }
-        }
-        // update preview
-        {
-          boolean isPublic = isPublic();
-          JdtUiUtils.setJavaSourceForViewer(m_previewViewer, getPreviewSource(isPublic));
-        }
-        // OK
-        return null;
-      }
+			////////////////////////////////////////////////////////////////////////////
+			//
+			// Validation
+			//
+			////////////////////////////////////////////////////////////////////////////
+			@Override
+			protected String validate() throws Exception {
+				// validate
+				{
+					String message = ExposePropertyAction.this.validate(m_nameField.getText());
+					if (message != null) {
+						JdtUiUtils.setJavaSourceForViewer(
+								m_previewViewer,
+								ModelMessages.ExposePropertyAction_dialogNoPreview);
+						return message;
+					}
+				}
+				// update preview
+				{
+					boolean isPublic = isPublic();
+					JdtUiUtils.setJavaSourceForViewer(m_previewViewer, getPreviewSource(isPublic));
+				}
+				// OK
+				return null;
+			}
 
-      ////////////////////////////////////////////////////////////////////////////
-      //
-      // Access
-      //
-      ////////////////////////////////////////////////////////////////////////////
-      public boolean isPublic() {
-        return m_modifierField.getSelection()[0] == 0;
-      }
+			////////////////////////////////////////////////////////////////////////////
+			//
+			// Access
+			//
+			////////////////////////////////////////////////////////////////////////////
+			public boolean isPublic() {
+				return m_modifierField.getSelection()[0] == 0;
+			}
 
-      ////////////////////////////////////////////////////////////////////////////
-      //
-      // Utils
-      //
-      ////////////////////////////////////////////////////////////////////////////
-      private Composite m_fieldsContainer;
+			////////////////////////////////////////////////////////////////////////////
+			//
+			// Utils
+			//
+			////////////////////////////////////////////////////////////////////////////
+			private Composite m_fieldsContainer;
 
-      /**
-       * Configures given {@link DialogField} for specific of this dialog.
-       */
-      protected final void doCreateField(DialogField dialogField, String labelText) {
-        dialogField.setLabelText(labelText);
-        dialogField.setDialogFieldListener(m_validateListener);
-        DialogFieldUtils.fillControls(m_fieldsContainer, dialogField, 2, 40);
-      }
-    }
-  }
+			/**
+			 * Configures given {@link DialogField} for specific of this dialog.
+			 */
+			protected final void doCreateField(DialogField dialogField, String labelText) {
+				dialogField.setLabelText(labelText);
+				dialogField.setDialogFieldListener(m_validateListener);
+				DialogFieldUtils.fillControls(m_fieldsContainer, dialogField, 2, 40);
+			}
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/GenericTypeResolverJavaInfo.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/GenericTypeResolverJavaInfo.java
index c4fd0d6f0..1e140ae61 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/GenericTypeResolverJavaInfo.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/GenericTypeResolverJavaInfo.java
@@ -32,61 +32,61 @@
  * @coverage core.util
  */
 public class GenericTypeResolverJavaInfo extends GenericTypeResolver {
-  private final Map<String, String> m_typeArguments;
+	private final Map<String, String> m_typeArguments;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public GenericTypeResolverJavaInfo(JavaInfo javaInfo) throws Exception {
-    super(GenericTypeResolver.EMPTY);
-    m_typeArguments = getTypeArguments(javaInfo);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public GenericTypeResolverJavaInfo(JavaInfo javaInfo) throws Exception {
+		super(GenericTypeResolver.EMPTY);
+		m_typeArguments = getTypeArguments(javaInfo);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Creation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static Map<String, String> getTypeArguments(JavaInfo javaInfo) throws Exception {
-    Map<String, String> typeArguments = Maps.newHashMap();
-    ASTNode node = javaInfo.getCreationSupport().getNode();
-    if (node instanceof ClassInstanceCreation) {
-      ClassInstanceCreation creation = (ClassInstanceCreation) node;
-      if (creation.getType() instanceof ParameterizedType) {
-        ParameterizedType parameterizedType = (ParameterizedType) creation.getType();
-        ITypeBinding binding = AstNodeUtils.getTypeBinding(parameterizedType);
-        ITypeBinding[] typeParameters_bindings = binding.getTypeDeclaration().getTypeParameters();
-        ITypeBinding[] typeArguments_bindings = binding.getTypeArguments();
-        for (int i = 0; i < typeParameters_bindings.length; i++) {
-          ITypeBinding typeParameter = typeParameters_bindings[i];
-          ITypeBinding typeArgument = typeArguments_bindings[i];
-          String typeParameterName = typeParameter.getName();
-          String typeArgumentName = AstNodeUtils.getFullyQualifiedName(typeArgument, true);
-          typeArguments.put(typeParameterName, typeArgumentName);
-        }
-      } else {
-        Class<?> componentClass = javaInfo.getDescription().getComponentClass();
-        for (TypeVariable<?> typeParameter : componentClass.getTypeParameters()) {
-          java.lang.reflect.Type[] bounds = typeParameter.getBounds();
-          Class<?> upperBound = (Class<?>) bounds[0];
-          String upperBoundName = ReflectionUtils.getCanonicalName(upperBound);
-          typeArguments.put(typeParameter.getName(), upperBoundName);
-        }
-      }
-    }
-    return typeArguments;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Creation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static Map<String, String> getTypeArguments(JavaInfo javaInfo) throws Exception {
+		Map<String, String> typeArguments = Maps.newHashMap();
+		ASTNode node = javaInfo.getCreationSupport().getNode();
+		if (node instanceof ClassInstanceCreation) {
+			ClassInstanceCreation creation = (ClassInstanceCreation) node;
+			if (creation.getType() instanceof ParameterizedType) {
+				ParameterizedType parameterizedType = (ParameterizedType) creation.getType();
+				ITypeBinding binding = AstNodeUtils.getTypeBinding(parameterizedType);
+				ITypeBinding[] typeParameters_bindings = binding.getTypeDeclaration().getTypeParameters();
+				ITypeBinding[] typeArguments_bindings = binding.getTypeArguments();
+				for (int i = 0; i < typeParameters_bindings.length; i++) {
+					ITypeBinding typeParameter = typeParameters_bindings[i];
+					ITypeBinding typeArgument = typeArguments_bindings[i];
+					String typeParameterName = typeParameter.getName();
+					String typeArgumentName = AstNodeUtils.getFullyQualifiedName(typeArgument, true);
+					typeArguments.put(typeParameterName, typeArgumentName);
+				}
+			} else {
+				Class<?> componentClass = javaInfo.getDescription().getComponentClass();
+				for (TypeVariable<?> typeParameter : componentClass.getTypeParameters()) {
+					java.lang.reflect.Type[] bounds = typeParameter.getBounds();
+					Class<?> upperBound = (Class<?>) bounds[0];
+					String upperBoundName = ReflectionUtils.getCanonicalName(upperBound);
+					typeArguments.put(typeParameter.getName(), upperBoundName);
+				}
+			}
+		}
+		return typeArguments;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String resolveTypeVariable(TypeVariable<?> variable) {
-    String variableName = variable.getName();
-    return m_typeArguments.get(variableName);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String resolveTypeVariable(TypeVariable<?> variable) {
+		String variableName = variable.getName();
+		return m_typeArguments.get(variableName);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/GlobalStateJava.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/GlobalStateJava.java
index 2520f88fd..38555e1a3 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/GlobalStateJava.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/GlobalStateJava.java
@@ -50,239 +50,239 @@
  * @coverage core.model.util
  */
 public final class GlobalStateJava {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Activates this {@link GlobalState}.
-   */
-  public static void activate(JavaInfo javaInfo) {
-    EditorState.setActiveJavaInfo(javaInfo);
-    GlobalState.setActiveObject(javaInfo);
-    if (javaInfo != null) {
-      GlobalState.setToolkit(javaInfo.getDescription().getToolkit());
-      GlobalState.setClassLoader(JavaInfoUtils.getClassLoader(javaInfo));
-    } else {
-      GlobalState.setToolkit(null);
-      GlobalState.setClassLoader(null);
-    }
-    GlobalState.setParametersProvider(m_parametersProvider);
-    GlobalState.setDescriptionHelper(m_descriptionHelper);
-    GlobalState.setValidatorHelper(m_validatorHelper);
-    GlobalState.setPasteRequestProcessor(m_pasteRequestProcessor);
-    GlobalState.setOrderProcessor(m_orderProcessor);
-    GlobalState.setOtherHelper(m_otherHelper);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Activates this {@link GlobalState}.
+	 */
+	public static void activate(JavaInfo javaInfo) {
+		EditorState.setActiveJavaInfo(javaInfo);
+		GlobalState.setActiveObject(javaInfo);
+		if (javaInfo != null) {
+			GlobalState.setToolkit(javaInfo.getDescription().getToolkit());
+			GlobalState.setClassLoader(JavaInfoUtils.getClassLoader(javaInfo));
+		} else {
+			GlobalState.setToolkit(null);
+			GlobalState.setClassLoader(null);
+		}
+		GlobalState.setParametersProvider(m_parametersProvider);
+		GlobalState.setDescriptionHelper(m_descriptionHelper);
+		GlobalState.setValidatorHelper(m_validatorHelper);
+		GlobalState.setPasteRequestProcessor(m_pasteRequestProcessor);
+		GlobalState.setOrderProcessor(m_orderProcessor);
+		GlobalState.setOtherHelper(m_otherHelper);
+	}
 
-  /**
-   * Deactivates this {@link GlobalState}, if given {@link JavaInfo} is active.
-   */
-  public static void deactivate(JavaInfo javaInfo) {
-    if (GlobalState.getActiveObject() == javaInfo) {
-      deactivate();
-    }
-  }
+	/**
+	 * Deactivates this {@link GlobalState}, if given {@link JavaInfo} is active.
+	 */
+	public static void deactivate(JavaInfo javaInfo) {
+		if (GlobalState.getActiveObject() == javaInfo) {
+			deactivate();
+		}
+	}
 
-  /**
-   * Deactivates {@link GlobalState}.
-   */
-  public static void deactivate() {
-    EditorState.setActiveJavaInfo(null);
-    GlobalState.setActiveObject(null);
-    GlobalState.setToolkit(null);
-    GlobalState.setClassLoader(null);
-    GlobalState.setParametersProvider(null);
-    GlobalState.setDescriptionHelper(null);
-    GlobalState.setValidatorHelper(null);
-    GlobalState.setPasteRequestProcessor(null);
-    GlobalState.setOrderProcessor(null);
-    GlobalState.setOtherHelper(null);
-  }
+	/**
+	 * Deactivates {@link GlobalState}.
+	 */
+	public static void deactivate() {
+		EditorState.setActiveJavaInfo(null);
+		GlobalState.setActiveObject(null);
+		GlobalState.setToolkit(null);
+		GlobalState.setClassLoader(null);
+		GlobalState.setParametersProvider(null);
+		GlobalState.setDescriptionHelper(null);
+		GlobalState.setValidatorHelper(null);
+		GlobalState.setPasteRequestProcessor(null);
+		GlobalState.setOrderProcessor(null);
+		GlobalState.setOtherHelper(null);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Implementations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final IParametersProvider m_parametersProvider = new IParametersProvider() {
-    @Override
-    public java.util.Map<String, String> getParameters(Object object) {
-      if (object instanceof JavaInfo) {
-        return JavaInfoUtils.getParameters((JavaInfo) object);
-      }
-      if (object instanceof ComponentDescription) {
-        return ((ComponentDescription) object).getParameters();
-      }
-      return null;
-    }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Implementations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final IParametersProvider m_parametersProvider = new IParametersProvider() {
+		@Override
+		public java.util.Map<String, String> getParameters(Object object) {
+			if (object instanceof JavaInfo) {
+				return JavaInfoUtils.getParameters((JavaInfo) object);
+			}
+			if (object instanceof ComponentDescription) {
+				return ((ComponentDescription) object).getParameters();
+			}
+			return null;
+		}
 
-    @Override
-    public String getParameter(Object object, String name) {
-      if (object instanceof JavaInfo) {
-        return JavaInfoUtils.getParameter((JavaInfo) object, name);
-      }
-      if (object instanceof ComponentDescription) {
-        return ((ComponentDescription) object).getParameter(name);
-      }
-      return null;
-    }
+		@Override
+		public String getParameter(Object object, String name) {
+			if (object instanceof JavaInfo) {
+				return JavaInfoUtils.getParameter((JavaInfo) object, name);
+			}
+			if (object instanceof ComponentDescription) {
+				return ((ComponentDescription) object).getParameter(name);
+			}
+			return null;
+		}
 
-    @Override
-    public boolean hasTrueParameter(Object object, String name) {
-      if (object instanceof JavaInfo) {
-        return JavaInfoUtils.hasTrueParameter((JavaInfo) object, name);
-      }
-      return false;
-    }
-  };
-  private static final IDescriptionHelper m_descriptionHelper = new IDescriptionHelper() {
-    @Override
-    public PropertyEditor getEditorForType(Class<?> type) throws Exception {
-      return DescriptionPropertiesHelper.getEditorForType(type);
-    }
+		@Override
+		public boolean hasTrueParameter(Object object, String name) {
+			if (object instanceof JavaInfo) {
+				return JavaInfoUtils.hasTrueParameter((JavaInfo) object, name);
+			}
+			return false;
+		}
+	};
+	private static final IDescriptionHelper m_descriptionHelper = new IDescriptionHelper() {
+		@Override
+		public PropertyEditor getEditorForType(Class<?> type) throws Exception {
+			return DescriptionPropertiesHelper.getEditorForType(type);
+		}
 
-    @Override
-    public IComponentDescription getDescription(Object object) {
-      if (object instanceof JavaInfo) {
-        return ((JavaInfo) object).getDescription();
-      }
-      return null;
-    }
-  };
-  private static final ILayoutRequestValidatorHelper m_validatorHelper =
-      new ILayoutRequestValidatorHelper() {
-        @Override
-        public boolean isComponent(Object object) {
-          return object instanceof JavaInfo;
-        }
+		@Override
+		public IComponentDescription getDescription(Object object) {
+			if (object instanceof JavaInfo) {
+				return ((JavaInfo) object).getDescription();
+			}
+			return null;
+		}
+	};
+	private static final ILayoutRequestValidatorHelper m_validatorHelper =
+			new ILayoutRequestValidatorHelper() {
+		@Override
+		public boolean isComponent(Object object) {
+			return object instanceof JavaInfo;
+		}
 
-        @Override
-        public IComponentDescription getPasteComponentDescription(Object _memento) throws Exception {
-          JavaInfoMemento memento = (JavaInfoMemento) _memento;
-          JavaInfo activeJava = (JavaInfo) GlobalState.getActiveObject();
-          return ComponentDescriptionHelper.getDescription(
-              activeJava.getEditor(),
-              memento.getComponentClassName());
-        }
+		@Override
+		public IComponentDescription getPasteComponentDescription(Object _memento) throws Exception {
+			JavaInfoMemento memento = (JavaInfoMemento) _memento;
+			JavaInfo activeJava = (JavaInfo) GlobalState.getActiveObject();
+			return ComponentDescriptionHelper.getDescription(
+					activeJava.getEditor(),
+					memento.getComponentClassName());
+		}
 
-        @Override
-        public Object getPasteComponent(Object _memento) throws Exception {
-          JavaInfoMemento memento = (JavaInfoMemento) _memento;
-          JavaInfo activeJava = (JavaInfo) GlobalState.getActiveObject();
-          return memento.create(activeJava);
-        }
+		@Override
+		public Object getPasteComponent(Object _memento) throws Exception {
+			JavaInfoMemento memento = (JavaInfoMemento) _memento;
+			JavaInfo activeJava = (JavaInfo) GlobalState.getActiveObject();
+			return memento.create(activeJava);
+		}
 
-        @Override
-        public boolean canUseParentForChild(Object parent, Object child) throws Exception {
-          if (parent instanceof JavaInfo && child instanceof JavaInfo) {
-            JavaInfo parentJava = (JavaInfo) parent;
-            JavaInfo childJava = (JavaInfo) child;
-            return childJava.getCreationSupport().canUseParent(parentJava);
-          }
-          return true;
-        }
+		@Override
+		public boolean canUseParentForChild(Object parent, Object child) throws Exception {
+			if (parent instanceof JavaInfo && child instanceof JavaInfo) {
+				JavaInfo parentJava = (JavaInfo) parent;
+				JavaInfo childJava = (JavaInfo) child;
+				return childJava.getCreationSupport().canUseParent(parentJava);
+			}
+			return true;
+		}
 
-        @Override
-        public boolean canReference(Object object) {
-          if (object instanceof JavaInfo) {
-            JavaInfo javaInfo = (JavaInfo) object;
-            return !(javaInfo.getCreationSupport() instanceof IImplicitCreationSupport);
-          }
-          return false;
-        }
+		@Override
+		public boolean canReference(Object object) {
+			if (object instanceof JavaInfo) {
+				JavaInfo javaInfo = (JavaInfo) object;
+				return !(javaInfo.getCreationSupport() instanceof IImplicitCreationSupport);
+			}
+			return false;
+		}
 
-        @Override
-        public boolean canReorder(ObjectInfo component) {
-          return ((JavaInfo) component).getCreationSupport().canReorder();
-        }
+		@Override
+		public boolean canReorder(ObjectInfo component) {
+			return ((JavaInfo) component).getCreationSupport().canReorder();
+		}
 
-        @Override
-        public boolean canReparent(ObjectInfo component) {
-          return ((JavaInfo) component).getCreationSupport().canReparent();
-        }
-      };
-  private static final IPasteRequestProcessor m_pasteRequestProcessor =
-      new IPasteRequestProcessor() {
-        @Override
-        public Command getPasteCommand(PasteRequest request,
-            final IPasteComponentProcessor componentProcessor) {
-          final List<IObjectInfo> components = getPastingComponents(request);
-          if (components.isEmpty()) {
-            return null;
-          }
-          // create command
-          ObjectInfo hierarchyObject = GlobalState.getActiveObject();
-          return new EditCommand(hierarchyObject) {
-            @Override
-            protected void executeEdit() throws Exception {
-              for (IObjectInfo component : components) {
-                componentProcessor.process(component);
-                JavaInfoMemento.apply((JavaInfo) component.getUnderlyingModel());
-              }
-            }
-          };
-        }
+		@Override
+		public boolean canReparent(ObjectInfo component) {
+			return ((JavaInfo) component).getCreationSupport().canReparent();
+		}
+	};
+	private static final IPasteRequestProcessor m_pasteRequestProcessor =
+			new IPasteRequestProcessor() {
+		@Override
+		public Command getPasteCommand(PasteRequest request,
+				final IPasteComponentProcessor componentProcessor) {
+			final List<IObjectInfo> components = getPastingComponents(request);
+			if (components.isEmpty()) {
+				return null;
+			}
+			// create command
+			ObjectInfo hierarchyObject = GlobalState.getActiveObject();
+			return new EditCommand(hierarchyObject) {
+				@Override
+				protected void executeEdit() throws Exception {
+					for (IObjectInfo component : components) {
+						componentProcessor.process(component);
+						JavaInfoMemento.apply((JavaInfo) component.getUnderlyingModel());
+					}
+				}
+			};
+		}
 
-        @Override
-        public List<IObjectInfo> getPastingComponents(final PasteRequest request) {
-          @SuppressWarnings("unchecked")
-          final List<JavaInfoMemento> mementos = (List<JavaInfoMemento>) request.getMemento();
-          final List<IObjectInfo> components = Lists.newArrayList();
-          // prepare models
-          ExecutionUtils.runLog(new RunnableEx() {
-            @Override
-            public void run() throws Exception {
-              JavaInfo hierarchyModel = (JavaInfo) GlobalState.getActiveObject();
-              for (JavaInfoMemento memento : mementos) {
-                JavaInfo component = memento.create(hierarchyModel);
-                components.add(component);
-              }
-            }
-          });
-          // set objects for selection
-          request.setObjects(components);
-          return components;
-        }
-      };
-  private static final IOrderProcessor m_orderProcessor = new IOrderProcessor() {
-    @Override
-    public void move(Object _component, Object _nextComponent) throws Exception {
-      JavaInfo component = (JavaInfo) _component;
-      JavaInfo nextComponent = (JavaInfo) _nextComponent;
-      JavaInfo container = (JavaInfo) component.getParent();
-      JavaInfoUtils.move(component, null, container, nextComponent);
-    }
-  };
-  private static final IOtherHelper m_otherHelper = new IOtherHelper() {
-    @Override
-    public IJavaProject getJavaProject() {
-      JavaInfo javaInfo = (JavaInfo) GlobalState.getActiveObject();
-      return javaInfo.getEditor().getJavaProject();
-    }
+		@Override
+		public List<IObjectInfo> getPastingComponents(final PasteRequest request) {
+			@SuppressWarnings("unchecked")
+			final List<JavaInfoMemento> mementos = (List<JavaInfoMemento>) request.getMemento();
+			final List<IObjectInfo> components = Lists.newArrayList();
+			// prepare models
+			ExecutionUtils.runLog(new RunnableEx() {
+				@Override
+				public void run() throws Exception {
+					JavaInfo hierarchyModel = (JavaInfo) GlobalState.getActiveObject();
+					for (JavaInfoMemento memento : mementos) {
+						JavaInfo component = memento.create(hierarchyModel);
+						components.add(component);
+					}
+				}
+			});
+			// set objects for selection
+			request.setObjects(components);
+			return components;
+		}
+	};
+	private static final IOrderProcessor m_orderProcessor = new IOrderProcessor() {
+		@Override
+		public void move(Object _component, Object _nextComponent) throws Exception {
+			JavaInfo component = (JavaInfo) _component;
+			JavaInfo nextComponent = (JavaInfo) _nextComponent;
+			JavaInfo container = (JavaInfo) component.getParent();
+			JavaInfoUtils.move(component, null, container, nextComponent);
+		}
+	};
+	private static final IOtherHelper m_otherHelper = new IOtherHelper() {
+		@Override
+		public IJavaProject getJavaProject() {
+			JavaInfo javaInfo = (JavaInfo) GlobalState.getActiveObject();
+			return javaInfo.getEditor().getJavaProject();
+		}
 
-    @Override
-    public Object getObject(ObjectInfo model) {
-      if (model instanceof JavaInfo) {
-        return ((JavaInfo) model).getObject();
-      }
-      return null;
-    }
+		@Override
+		public Object getObject(ObjectInfo model) {
+			if (model instanceof JavaInfo) {
+				return ((JavaInfo) model).getObject();
+			}
+			return null;
+		}
 
-    @Override
-    public List<EditorWarning> getWarnings() {
-      return getState().getWarnings();
-    }
+		@Override
+		public List<EditorWarning> getWarnings() {
+			return getState().getWarnings();
+		}
 
-    @Override
-    public void addWarning(EditorWarning warning) {
-      getState().addWarning(warning);
-    }
+		@Override
+		public void addWarning(EditorWarning warning) {
+			getState().addWarning(warning);
+		}
 
-    private EditorState getState() {
-      JavaInfo javaInfo = (JavaInfo) GlobalState.getActiveObject();
-      return JavaInfoUtils.getState(javaInfo);
-    }
-  };
+		private EditorState getState() {
+			JavaInfo javaInfo = (JavaInfo) GlobalState.getActiveObject();
+			return JavaInfoUtils.getState(javaInfo);
+		}
+	};
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/IJavaInfoRendering.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/IJavaInfoRendering.java
index 981190e0c..87932ad58 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/IJavaInfoRendering.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/IJavaInfoRendering.java
@@ -32,8 +32,8 @@
  * @coverage core.model.util
  */
 public interface IJavaInfoRendering {
-  /**
-   * Renders {@link JavaInfo} GUI.
-   */
-  void render() throws Exception;
+	/**
+	 * Renders {@link JavaInfo} GUI.
+	 */
+	void render() throws Exception;
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/ImportantPropertiesDialog.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/ImportantPropertiesDialog.java
index 4f172be3f..bd4fc0993 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/ImportantPropertiesDialog.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/ImportantPropertiesDialog.java
@@ -42,111 +42,111 @@
  * @coverage core.model.util.ui
  */
 public class ImportantPropertiesDialog extends ResizableDialog {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Activation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Schedules opening {@link ImportantPropertiesDialog} after adding given {@link JavaInfo} to
-   * parent.
-   */
-  public static void scheduleImportantProperties(final JavaInfo javaInfo) {
-    IPreferenceStore preferences = javaInfo.getDescription().getToolkit().getPreferences();
-    if (preferences.getBoolean(IPreferenceConstants.P_GENERAL_IMPORTANT_PROPERTIES_AFTER_ADD)
-        && javaInfo.getArbitraryValue(JavaInfo.FLAG_MANUAL_COMPONENT) == Boolean.TRUE) {
-      Display.getDefault().asyncExec(new Runnable() {
-        @Override
-        public void run() {
-          ImportantPropertiesDialog dialog =
-              new ImportantPropertiesDialog(DesignerPlugin.getShell(), javaInfo);
-          dialog.open();
-        }
-      });
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Activation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Schedules opening {@link ImportantPropertiesDialog} after adding given {@link JavaInfo} to
+	 * parent.
+	 */
+	public static void scheduleImportantProperties(final JavaInfo javaInfo) {
+		IPreferenceStore preferences = javaInfo.getDescription().getToolkit().getPreferences();
+		if (preferences.getBoolean(IPreferenceConstants.P_GENERAL_IMPORTANT_PROPERTIES_AFTER_ADD)
+				&& javaInfo.getArbitraryValue(JavaInfo.FLAG_MANUAL_COMPONENT) == Boolean.TRUE) {
+			Display.getDefault().asyncExec(new Runnable() {
+				@Override
+				public void run() {
+					ImportantPropertiesDialog dialog =
+							new ImportantPropertiesDialog(DesignerPlugin.getShell(), javaInfo);
+					dialog.open();
+				}
+			});
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance fields
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final JavaInfo m_javaInfo;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance fields
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final JavaInfo m_javaInfo;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private ImportantPropertiesDialog(Shell parentShell, JavaInfo javaInfo) {
-    super(parentShell, DesignerPlugin.getDefault());
-    m_javaInfo = javaInfo;
-    setShellStyle(SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private ImportantPropertiesDialog(Shell parentShell, JavaInfo javaInfo) {
+		super(parentShell, DesignerPlugin.getDefault());
+		m_javaInfo = javaInfo;
+		setShellStyle(SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private PropertyTable m_propertyTable;
-  private final ObjectEventListener m_refreshListener = new ObjectEventListener() {
-    @Override
-    public void refreshed() throws Exception {
-      m_propertyTable.redraw();
-    }
-  };
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private PropertyTable m_propertyTable;
+	private final ObjectEventListener m_refreshListener = new ObjectEventListener() {
+		@Override
+		public void refreshed() throws Exception {
+			m_propertyTable.redraw();
+		}
+	};
 
-  @Override
-  protected Control createDialogArea(Composite parent) {
-    Composite area = (Composite) super.createDialogArea(parent);
-    area.setLayout(new GridLayout());
-    //
-    m_propertyTable = new PropertyTable(area, SWT.BORDER);
-    GridDataFactory.create(m_propertyTable).grab().fill().hintC(55, 20);
-    // install refresh listener
-    m_javaInfo.addBroadcastListener(m_refreshListener);
-    // show important properties
-    try {
-      showImportantProperties();
-    } catch (Throwable e) {
-      DesignerPlugin.log(e);
-    }
-    //
-    return area;
-  }
+	@Override
+	protected Control createDialogArea(Composite parent) {
+		Composite area = (Composite) super.createDialogArea(parent);
+		area.setLayout(new GridLayout());
+		//
+		m_propertyTable = new PropertyTable(area, SWT.BORDER);
+		GridDataFactory.create(m_propertyTable).grab().fill().hintC(55, 20);
+		// install refresh listener
+		m_javaInfo.addBroadcastListener(m_refreshListener);
+		// show important properties
+		try {
+			showImportantProperties();
+		} catch (Throwable e) {
+			DesignerPlugin.log(e);
+		}
+		//
+		return area;
+	}
 
-  @Override
-  protected void configureShell(Shell newShell) {
-    super.configureShell(newShell);
-    newShell.setText(ModelMessages.ImportantPropertiesDialog_title);
-  }
+	@Override
+	protected void configureShell(Shell newShell) {
+		super.configureShell(newShell);
+		newShell.setText(ModelMessages.ImportantPropertiesDialog_title);
+	}
 
-  @Override
-  public boolean close() {
-    m_javaInfo.removeBroadcastListener(m_refreshListener);
-    return super.close();
-  }
+	@Override
+	public boolean close() {
+		m_javaInfo.removeBroadcastListener(m_refreshListener);
+		return super.close();
+	}
 
-  @Override
-  protected void okPressed() {
-    m_propertyTable.deactivateEditor(true);
-    super.okPressed();
-  }
+	@Override
+	protected void okPressed() {
+		m_propertyTable.deactivateEditor(true);
+		super.okPressed();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Properties
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void showImportantProperties() throws Exception {
-    List<Property> importantProperties = Lists.newArrayList();
-    for (Property property : m_javaInfo.getProperties()) {
-      PropertyCategory category = PropertyManager.getCategory(property);
-      if (category.isPreferred() || category.isSystem()) {
-        importantProperties.add(property);
-      }
-    }
-    m_propertyTable.setInput(importantProperties.toArray(new Property[importantProperties.size()]));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Properties
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void showImportantProperties() throws Exception {
+		List<Property> importantProperties = Lists.newArrayList();
+		for (Property property : m_javaInfo.getProperties()) {
+			PropertyCategory category = PropertyManager.getCategory(property);
+			if (category.isPreferred() || category.isSystem()) {
+				importantProperties.add(property);
+			}
+		}
+		m_propertyTable.setInput(importantProperties.toArray(new Property[importantProperties.size()]));
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/MorphingSupport.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/MorphingSupport.java
index a5b3f1ee2..f7091ed3d 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/MorphingSupport.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/MorphingSupport.java
@@ -60,313 +60,313 @@
  * @coverage core.model.util
  */
 public abstract class MorphingSupport<T extends JavaInfo> extends AbstractMorphingSupport<T> {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance fields
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final AstEditor m_editor;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance fields
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final AstEditor m_editor;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected MorphingSupport(String toolkitClassName, T component) {
-    super(toolkitClassName, component);
-    m_editor = m_component.getEditor();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected MorphingSupport(String toolkitClassName, T component) {
+		super(toolkitClassName, component);
+		m_editor = m_component.getEditor();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected IJavaProject getJavaProject() {
-    return m_editor.getJavaProject();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected IJavaProject getJavaProject() {
+		return m_editor.getJavaProject();
+	}
 
-  @Override
-  protected ClassLoader getClassLoader() {
-    return EditorState.get(m_editor).getEditorLoader();
-  }
+	@Override
+	protected ClassLoader getClassLoader() {
+		return EditorState.get(m_editor).getEditorLoader();
+	}
 
-  @Override
-  protected Class<?> getComponentClass() {
-    return m_component.getDescription().getComponentClass();
-  }
+	@Override
+	protected Class<?> getComponentClass() {
+		return m_component.getDescription().getComponentClass();
+	}
 
-  @Override
-  protected List<MorphingTargetDescription> getMorphingTargets() {
-    return m_component.getDescription().getMorphingTargets();
-  }
+	@Override
+	protected List<MorphingTargetDescription> getMorphingTargets() {
+		return m_component.getDescription().getMorphingTargets();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getTargetText(MorphingTargetDescription target) throws Exception {
-    return getComponentPresentation(target).getName();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getTargetText(MorphingTargetDescription target) throws Exception {
+		return getComponentPresentation(target).getName();
+	}
 
-  @Override
-  protected ImageDescriptor getTargetImageDescriptor(MorphingTargetDescription target)
-      throws Exception {
-    ComponentPresentation presentation = getComponentPresentation(target);
-    return new ImageImageDescriptor(presentation.getIcon());
-  }
+	@Override
+	protected ImageDescriptor getTargetImageDescriptor(MorphingTargetDescription target)
+			throws Exception {
+		ComponentPresentation presentation = getComponentPresentation(target);
+		return new ImageImageDescriptor(presentation.getIcon());
+	}
 
-  private ComponentPresentation getComponentPresentation(MorphingTargetDescription target)
-      throws Exception {
-    return ComponentPresentationHelper.getPresentation(
-        m_editor,
-        target.getComponentClass().getName(),
-        target.getCreationId());
-  }
+	private ComponentPresentation getComponentPresentation(MorphingTargetDescription target)
+			throws Exception {
+		return ComponentPresentationHelper.getPresentation(
+				m_editor,
+				target.getComponentClass().getName(),
+				target.getCreationId());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Contribution
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * If possible, contributes "morph" actions.
-   *
-   * @param toolkitClassName
-   *          the name of base class for "Other..." action, for example
-   *          <code>"org.eclipse.swt.widgets.Control"</code> as SWT.
-   * @param component
-   *          the {@link JavaInfo} that should be morphed.
-   * @param manager
-   *          the {@link IContributionManager} to add action to.
-   */
-  public static void contribute(String toolkitClassName,
-      JavaInfo component,
-      IContributionManager manager) throws Exception {
-    // check for supported variable type
-    if (!(component.getVariableSupport() instanceof AbstractSimpleVariableSupport)) {
-      return;
-    }
-    // add "morph" actions
-    MorphingSupport<JavaInfo> morphingSupport =
-        new MorphingSupport<JavaInfo>(toolkitClassName, component) {
-        };
-    contribute(morphingSupport, manager);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Contribution
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * If possible, contributes "morph" actions.
+	 *
+	 * @param toolkitClassName
+	 *          the name of base class for "Other..." action, for example
+	 *          <code>"org.eclipse.swt.widgets.Control"</code> as SWT.
+	 * @param component
+	 *          the {@link JavaInfo} that should be morphed.
+	 * @param manager
+	 *          the {@link IContributionManager} to add action to.
+	 */
+	public static void contribute(String toolkitClassName,
+			JavaInfo component,
+			IContributionManager manager) throws Exception {
+		// check for supported variable type
+		if (!(component.getVariableSupport() instanceof AbstractSimpleVariableSupport)) {
+			return;
+		}
+		// add "morph" actions
+		MorphingSupport<JavaInfo> morphingSupport =
+				new MorphingSupport<JavaInfo>(toolkitClassName, component) {
+		};
+		contribute(morphingSupport, manager);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Morphing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String validate(MorphingTargetDescription target) throws Exception {
-    // prepare signatures of methods used for children association
-    Set<String> associationSignatures = Sets.newHashSet();
-    for (JavaInfo child : m_component.getChildrenJava()) {
-      if (child.getAssociation() instanceof InvocationChildAssociation) {
-        InvocationChildAssociation association =
-            (InvocationChildAssociation) child.getAssociation();
-        String signature = association.getDescription().getSignature();
-        associationSignatures.add(signature);
-      }
-    }
-    // check that target has methods used for associations
-    {
-      Class<?> targetClass = target.getComponentClass();
-      ComponentDescription targetDescription =
-          ComponentDescriptionHelper.getDescription(m_editor, targetClass);
-      for (String associationSignature : associationSignatures) {
-        MethodDescription method = targetDescription.getMethod(associationSignature);
-        // check that method exists
-        if (method == null) {
-          return MessageFormat.format(
-              ModelMessages.MorphingSupport_validateNoAssociationMethod,
-              associationSignature);
-        }
-        // check that method is association
-        boolean hasChild = false;
-        List<ParameterDescription> parameters = method.getParameters();
-        for (ParameterDescription parameter : parameters) {
-          hasChild |= parameter.isChild();
-        }
-        if (!hasChild) {
-          return ModelMessages.MorphingSupport_validateAssociationMethod_1
-              + associationSignature
-              + ModelMessages.MorphingSupport_validateAssociationMethod_2
-              + ModelMessages.MorphingSupport_validateAssociationMethod_3
-              + ModelMessages.MorphingSupport_validateAssociationMethod_4;
-        }
-      }
-    }
-    // OK
-    return super.validate(target);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Morphing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String validate(MorphingTargetDescription target) throws Exception {
+		// prepare signatures of methods used for children association
+		Set<String> associationSignatures = Sets.newHashSet();
+		for (JavaInfo child : m_component.getChildrenJava()) {
+			if (child.getAssociation() instanceof InvocationChildAssociation) {
+				InvocationChildAssociation association =
+						(InvocationChildAssociation) child.getAssociation();
+				String signature = association.getDescription().getSignature();
+				associationSignatures.add(signature);
+			}
+		}
+		// check that target has methods used for associations
+		{
+			Class<?> targetClass = target.getComponentClass();
+			ComponentDescription targetDescription =
+					ComponentDescriptionHelper.getDescription(m_editor, targetClass);
+			for (String associationSignature : associationSignatures) {
+				MethodDescription method = targetDescription.getMethod(associationSignature);
+				// check that method exists
+				if (method == null) {
+					return MessageFormat.format(
+							ModelMessages.MorphingSupport_validateNoAssociationMethod,
+							associationSignature);
+				}
+				// check that method is association
+				boolean hasChild = false;
+				List<ParameterDescription> parameters = method.getParameters();
+				for (ParameterDescription parameter : parameters) {
+					hasChild |= parameter.isChild();
+				}
+				if (!hasChild) {
+					return ModelMessages.MorphingSupport_validateAssociationMethod_1
+							+ associationSignature
+							+ ModelMessages.MorphingSupport_validateAssociationMethod_2
+							+ ModelMessages.MorphingSupport_validateAssociationMethod_3
+							+ ModelMessages.MorphingSupport_validateAssociationMethod_4;
+				}
+			}
+		}
+		// OK
+		return super.validate(target);
+	}
 
-  @Override
-  protected void morph(MorphingTargetDescription target) throws Exception {
-    if (m_component.getCreationSupport() instanceof ConstructorCreationSupport
-        || m_component.getCreationSupport() instanceof StaticFactoryCreationSupport
-        || m_component.getCreationSupport() instanceof InstanceFactoryCreationSupport) {
-      super.morph(target);
-    }
-  }
+	@Override
+	protected void morph(MorphingTargetDescription target) throws Exception {
+		if (m_component.getCreationSupport() instanceof ConstructorCreationSupport
+				|| m_component.getCreationSupport() instanceof StaticFactoryCreationSupport
+				|| m_component.getCreationSupport() instanceof InstanceFactoryCreationSupport) {
+			super.morph(target);
+		}
+	}
 
-  @Override
-  @SuppressWarnings("unchecked")
-  protected T morph_create(MorphingTargetDescription target) throws Exception {
-    ComponentDescription newDescription =
-        ComponentDescriptionHelper.getDescription(m_editor, target.getComponentClass());
-    CreationSupport newCreationSupport = getTargetCreationSupport(target);
-    return (T) JavaInfoUtils.createJavaInfo(m_editor, newDescription, newCreationSupport);
-  }
+	@Override
+	@SuppressWarnings("unchecked")
+	protected T morph_create(MorphingTargetDescription target) throws Exception {
+		ComponentDescription newDescription =
+				ComponentDescriptionHelper.getDescription(m_editor, target.getComponentClass());
+		CreationSupport newCreationSupport = getTargetCreationSupport(target);
+		return (T) JavaInfoUtils.createJavaInfo(m_editor, newDescription, newCreationSupport);
+	}
 
-  private ConstructorCreationSupport getTargetCreationSupport(MorphingTargetDescription target) {
-    // try constructor matching
-    if (target.getCreationId() == null) {
-      CreationSupport creation = m_component.getCreationSupport();
-      if (creation instanceof ConstructorCreationSupport) {
-        ConstructorCreationSupport constructorCreation = (ConstructorCreationSupport) creation;
-        String signature = constructorCreation.getDescription().getSignature();
-        final Class<?> targetClass = target.getComponentClass();
-        if (ReflectionUtils.getConstructorBySignature(targetClass, signature) != null) {
-          final ClassInstanceCreation creationNode = constructorCreation.getCreation();
-          String source = m_editor.getExternalSource(creationNode, new Function<ASTNode, String>() {
-            @Override
-            public String apply(ASTNode from) {
-              if (from == creationNode.getType()) {
-                return targetClass.getName();
-              }
-              return null;
-            }
-          });
-          return ConstructorCreationSupport.forSource(source);
-        }
-      }
-    }
-    // use specified creation id
-    return new ConstructorCreationSupport(target.getCreationId(), false);
-  }
+	private ConstructorCreationSupport getTargetCreationSupport(MorphingTargetDescription target) {
+		// try constructor matching
+		if (target.getCreationId() == null) {
+			CreationSupport creation = m_component.getCreationSupport();
+			if (creation instanceof ConstructorCreationSupport) {
+				ConstructorCreationSupport constructorCreation = (ConstructorCreationSupport) creation;
+				String signature = constructorCreation.getDescription().getSignature();
+				final Class<?> targetClass = target.getComponentClass();
+				if (ReflectionUtils.getConstructorBySignature(targetClass, signature) != null) {
+					final ClassInstanceCreation creationNode = constructorCreation.getCreation();
+					String source = m_editor.getExternalSource(creationNode, new Function<ASTNode, String>() {
+						@Override
+						public String apply(ASTNode from) {
+							if (from == creationNode.getType()) {
+								return targetClass.getName();
+							}
+							return null;
+						}
+					});
+					return ConstructorCreationSupport.forSource(source);
+				}
+			}
+		}
+		// use specified creation id
+		return new ConstructorCreationSupport(target.getCreationId(), false);
+	}
 
-  @Override
-  protected void morph_replace(T newComponent) throws Exception {
-    m_component.getBroadcastJava().replaceChildBefore(
-        m_component.getParentJava(),
-        m_component,
-        newComponent);
-    // replace component in parent (following operations may require parent)
-    m_component.getParent().replaceChild(m_component, newComponent);
-  }
+	@Override
+	protected void morph_replace(T newComponent) throws Exception {
+		m_component.getBroadcastJava().replaceChildBefore(
+				m_component.getParentJava(),
+				m_component,
+				newComponent);
+		// replace component in parent (following operations may require parent)
+		m_component.getParent().replaceChild(m_component, newComponent);
+	}
 
-  @Override
-  protected void morph_properties(T newComponent) throws Exception {
-    ComponentDescription newComponentDescription = newComponent.getDescription();
-    // move related nodes
-    for (ASTNode node : m_component.getRelatedNodes()) {
-      // check if method invocation can exist in new component
-      if (node.getLocationInParent() == MethodInvocation.EXPRESSION_PROPERTY) {
-        MethodInvocation invocation = (MethodInvocation) node.getParent();
-        String signature = AstNodeUtils.getMethodSignature(invocation);
-        if (newComponentDescription.getMethod(signature) == null) {
-          m_editor.removeEnclosingStatement(invocation);
-          continue;
-        }
-      }
-      // check if assignment can exist in new component
-      if (node.getLocationInParent() == QualifiedName.QUALIFIER_PROPERTY) {
-        QualifiedName fieldAccess = (QualifiedName) node.getParent();
-        if (fieldAccess.getLocationInParent() == Assignment.LEFT_HAND_SIDE_PROPERTY) {
-          String fieldName = fieldAccess.getName().getIdentifier();
-          if (ReflectionUtils.getFieldByName(newComponentDescription.getComponentClass(), fieldName) == null) {
-            m_editor.removeEnclosingStatement(node);
-            continue;
-          }
-        }
-      }
-      // OK, we can add this related node
-      newComponent.addRelatedNode(node);
-    }
-  }
+	@Override
+	protected void morph_properties(T newComponent) throws Exception {
+		ComponentDescription newComponentDescription = newComponent.getDescription();
+		// move related nodes
+		for (ASTNode node : m_component.getRelatedNodes()) {
+			// check if method invocation can exist in new component
+			if (node.getLocationInParent() == MethodInvocation.EXPRESSION_PROPERTY) {
+				MethodInvocation invocation = (MethodInvocation) node.getParent();
+				String signature = AstNodeUtils.getMethodSignature(invocation);
+				if (newComponentDescription.getMethod(signature) == null) {
+					m_editor.removeEnclosingStatement(invocation);
+					continue;
+				}
+			}
+			// check if assignment can exist in new component
+			if (node.getLocationInParent() == QualifiedName.QUALIFIER_PROPERTY) {
+				QualifiedName fieldAccess = (QualifiedName) node.getParent();
+				if (fieldAccess.getLocationInParent() == Assignment.LEFT_HAND_SIDE_PROPERTY) {
+					String fieldName = fieldAccess.getName().getIdentifier();
+					if (ReflectionUtils.getFieldByName(newComponentDescription.getComponentClass(), fieldName) == null) {
+						m_editor.removeEnclosingStatement(node);
+						continue;
+					}
+				}
+			}
+			// OK, we can add this related node
+			newComponent.addRelatedNode(node);
+		}
+	}
 
-  @Override
-  protected void morph_children(T newComponent) throws Exception {
-    // move children
-    for (JavaInfo javaChild : m_component.getChildrenJava()) {
-      newComponent.addChild(javaChild);
-    }
-  }
+	@Override
+	protected void morph_children(T newComponent) throws Exception {
+		// move children
+		for (JavaInfo javaChild : m_component.getChildrenJava()) {
+			newComponent.addChild(javaChild);
+		}
+	}
 
-  @Override
-  protected void morph_source(T newComponent) throws Exception {
-    // reuse variable
-    {
-      // replace type in variable
-      {
-        ComponentDescription newComponentDescription = newComponent.getDescription();
-        AbstractSimpleVariableSupport variable =
-            (AbstractSimpleVariableSupport) m_component.getVariableSupport();
-        variable.setType(newComponentDescription.getComponentClass().getName());
-      }
-      // possible new variable was generated, use it
-      m_component.getVariableSupport().moveTo(newComponent);
-    }
-    // replace creation
-    {
-      CreationSupport oldCreationSupport = m_component.getCreationSupport();
-      CreationSupport newCreationSupport = newComponent.getCreationSupport();
-      Expression oldCreationExpression = (Expression) oldCreationSupport.getNode();
-      StatementTarget statementTarget =
-          new StatementTarget(AstNodeUtils.getEnclosingStatement(oldCreationExpression), true);
-      // prepare new creation expression
-      Expression newCreationExpression;
-      {
-        String source = newCreationSupport.add_getSource(null);
-        source = AssociationUtils.replaceTemplates(newComponent, source, statementTarget);
-        newCreationExpression = m_editor.replaceExpression(oldCreationExpression, source);
-      }
-      // set new creation expression
-      newCreationSupport.add_setSourceExpression(newCreationExpression);
-      newComponent.addRelatedNode(newCreationExpression);
-    }
-    // set association
-    {
-      Association oldAssociation = m_component.getAssociation();
-      Association newAssociation = oldAssociation.getCopy();
-      newComponent.setAssociation(newAssociation);
-    }
-  }
+	@Override
+	protected void morph_source(T newComponent) throws Exception {
+		// reuse variable
+		{
+			// replace type in variable
+			{
+				ComponentDescription newComponentDescription = newComponent.getDescription();
+				AbstractSimpleVariableSupport variable =
+						(AbstractSimpleVariableSupport) m_component.getVariableSupport();
+				variable.setType(newComponentDescription.getComponentClass().getName());
+			}
+			// possible new variable was generated, use it
+			m_component.getVariableSupport().moveTo(newComponent);
+		}
+		// replace creation
+		{
+			CreationSupport oldCreationSupport = m_component.getCreationSupport();
+			CreationSupport newCreationSupport = newComponent.getCreationSupport();
+			Expression oldCreationExpression = (Expression) oldCreationSupport.getNode();
+			StatementTarget statementTarget =
+					new StatementTarget(AstNodeUtils.getEnclosingStatement(oldCreationExpression), true);
+			// prepare new creation expression
+			Expression newCreationExpression;
+			{
+				String source = newCreationSupport.add_getSource(null);
+				source = AssociationUtils.replaceTemplates(newComponent, source, statementTarget);
+				newCreationExpression = m_editor.replaceExpression(oldCreationExpression, source);
+			}
+			// set new creation expression
+			newCreationSupport.add_setSourceExpression(newCreationExpression);
+			newComponent.addRelatedNode(newCreationExpression);
+		}
+		// set association
+		{
+			Association oldAssociation = m_component.getAssociation();
+			Association newAssociation = oldAssociation.getCopy();
+			newComponent.setAssociation(newAssociation);
+		}
+	}
 
-  @Override
-  protected void morph_finish(T newComponent) throws Exception {
-    m_component.getBroadcastJava().replaceChildAfter(
-        m_component.getParentJava(),
-        m_component,
-        newComponent);
-  }
+	@Override
+	protected void morph_finish(T newComponent) throws Exception {
+		m_component.getBroadcastJava().replaceChildAfter(
+				m_component.getParentJava(),
+				m_component,
+				newComponent);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utility access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static String validate(String toolkitClassName,
-      JavaInfo component,
-      MorphingTargetDescription target) throws Exception {
-    MorphingSupport<JavaInfo> morphingSupport =
-        new MorphingSupport<JavaInfo>(toolkitClassName, component) {
-        };
-    return morphingSupport.validate(target);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utility access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static String validate(String toolkitClassName,
+			JavaInfo component,
+			MorphingTargetDescription target) throws Exception {
+		MorphingSupport<JavaInfo> morphingSupport =
+				new MorphingSupport<JavaInfo>(toolkitClassName, component) {
+		};
+		return morphingSupport.validate(target);
+	}
 
-  public static void morph(String toolkitClassName,
-      JavaInfo component,
-      MorphingTargetDescription target) throws Exception {
-    MorphingSupport<JavaInfo> morphingSupport =
-        new MorphingSupport<JavaInfo>(toolkitClassName, component) {
-        };
-    morphingSupport.morph(target);
-  }
+	public static void morph(String toolkitClassName,
+			JavaInfo component,
+			MorphingTargetDescription target) throws Exception {
+		MorphingSupport<JavaInfo> morphingSupport =
+				new MorphingSupport<JavaInfo>(toolkitClassName, component) {
+		};
+		morphingSupport.morph(target);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/PlaceholderUtils.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/PlaceholderUtils.java
index b7ef18188..69bd00968 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/PlaceholderUtils.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/PlaceholderUtils.java
@@ -26,98 +26,98 @@
  * @coverage core.model.util
  */
 public final class PlaceholderUtils {
-  private static String KEY_EXCEPTIONS = PlaceholderUtils.class.getName() + ".exceptions";
-  private static String KEY_PLACEHOLDER = PlaceholderUtils.class.getName() + ".placeholder";
+	private static String KEY_EXCEPTIONS = PlaceholderUtils.class.getName() + ".exceptions";
+	private static String KEY_PLACEHOLDER = PlaceholderUtils.class.getName() + ".placeholder";
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private PlaceholderUtils() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private PlaceholderUtils() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access: JavaInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if given {@link JavaInfo} has placeholder object.
-   */
-  public static boolean isPlaceholder(JavaInfo javaInfo) {
-    ASTNode node = javaInfo.getCreationSupport().getNode();
-    return isPlaceholder(node);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access: JavaInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if given {@link JavaInfo} has placeholder object.
+	 */
+	public static boolean isPlaceholder(JavaInfo javaInfo) {
+		ASTNode node = javaInfo.getCreationSupport().getNode();
+		return isPlaceholder(node);
+	}
 
-  /**
-   * @return exceptions associated with given {@link JavaInfo}.
-   */
-  public static List<Throwable> getExceptions(JavaInfo javaInfo) {
-    ASTNode node = javaInfo.getCreationSupport().getNode();
-    return getExceptions(node);
-  }
+	/**
+	 * @return exceptions associated with given {@link JavaInfo}.
+	 */
+	public static List<Throwable> getExceptions(JavaInfo javaInfo) {
+		ASTNode node = javaInfo.getCreationSupport().getNode();
+		return getExceptions(node);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exceptions
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return exceptions associated with given {@link ASTNode}, may be empty, but not
-   *         <code>null</code>.
-   */
-  public static List<Throwable> getExceptions(ASTNode node) {
-    List<Throwable> exceptions = getExceptions0(node);
-    return exceptions != null ? exceptions : ImmutableList.<Throwable>of();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exceptions
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return exceptions associated with given {@link ASTNode}, may be empty, but not
+	 *         <code>null</code>.
+	 */
+	public static List<Throwable> getExceptions(ASTNode node) {
+		List<Throwable> exceptions = getExceptions0(node);
+		return exceptions != null ? exceptions : ImmutableList.<Throwable>of();
+	}
 
-  /**
-   * Removes information associated with given {@link ASTNode}.
-   */
-  public static void clear(ASTNode node) {
-    node.setProperty(KEY_EXCEPTIONS, null);
-    node.setProperty(KEY_PLACEHOLDER, null);
-  }
+	/**
+	 * Removes information associated with given {@link ASTNode}.
+	 */
+	public static void clear(ASTNode node) {
+		node.setProperty(KEY_EXCEPTIONS, null);
+		node.setProperty(KEY_PLACEHOLDER, null);
+	}
 
-  /**
-   * Adds new exception associated with given {@link ASTNode}.
-   */
-  public static void addException(ASTNode node, Throwable e) {
-    // prepare List for exceptions
-    List<Throwable> exceptions = getExceptions0(node);
-    if (exceptions == null) {
-      exceptions = Lists.newArrayList();
-      node.setProperty(KEY_EXCEPTIONS, exceptions);
-    }
-    // add new exception
-    exceptions.add(e);
-  }
+	/**
+	 * Adds new exception associated with given {@link ASTNode}.
+	 */
+	public static void addException(ASTNode node, Throwable e) {
+		// prepare List for exceptions
+		List<Throwable> exceptions = getExceptions0(node);
+		if (exceptions == null) {
+			exceptions = Lists.newArrayList();
+			node.setProperty(KEY_EXCEPTIONS, exceptions);
+		}
+		// add new exception
+		exceptions.add(e);
+	}
 
-  /**
-   * @return exceptions associated with given {@link ASTNode}, may be <code>null</code>.
-   */
-  @SuppressWarnings("unchecked")
-  private static List<Throwable> getExceptions0(ASTNode node) {
-    return (List<Throwable>) node.getProperty(KEY_EXCEPTIONS);
-  }
+	/**
+	 * @return exceptions associated with given {@link ASTNode}, may be <code>null</code>.
+	 */
+	@SuppressWarnings("unchecked")
+	private static List<Throwable> getExceptions0(ASTNode node) {
+		return (List<Throwable>) node.getProperty(KEY_EXCEPTIONS);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Placeholder
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if given {@link ASTNode} was evaluated as placeholder.
-   */
-  public static boolean isPlaceholder(ASTNode node) {
-    return node != null && node.getProperty(KEY_PLACEHOLDER) == Boolean.TRUE;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Placeholder
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if given {@link ASTNode} was evaluated as placeholder.
+	 */
+	public static boolean isPlaceholder(ASTNode node) {
+		return node != null && node.getProperty(KEY_PLACEHOLDER) == Boolean.TRUE;
+	}
 
-  /**
-   * Marks that given {@link ASTNode} was evaluated as placeholder.
-   */
-  public static void markPlaceholder(ASTNode node) {
-    node.setProperty(KEY_PLACEHOLDER, Boolean.TRUE);
-  }
+	/**
+	 * Marks that given {@link ASTNode} was evaluated as placeholder.
+	 */
+	public static void markPlaceholder(ASTNode node) {
+		node.setProperty(KEY_PLACEHOLDER, Boolean.TRUE);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/PropertyUtils2.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/PropertyUtils2.java
index 53dc9a4bb..e22cc8e24 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/PropertyUtils2.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/PropertyUtils2.java
@@ -22,30 +22,30 @@
  * @coverage core.model.util
  */
 public final class PropertyUtils2 {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private PropertyUtils2() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private PropertyUtils2() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Create
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static GenericPropertyImpl createGenericPropertyImpl(JavaInfo javaInfo,
-      GenericPropertyDescription description) {
-    GenericPropertyImpl property =
-        new GenericPropertyImpl(javaInfo,
-            description.getTitle(),
-            description.getAccessorsArray(),
-            description.getDefaultValue(),
-            description.getConverter(),
-            description.getEditor());
-    property.setDescription(description);
-    property.setCategory(description.getCategory());
-    return property;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Create
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static GenericPropertyImpl createGenericPropertyImpl(JavaInfo javaInfo,
+			GenericPropertyDescription description) {
+		GenericPropertyImpl property =
+				new GenericPropertyImpl(javaInfo,
+						description.getTitle(),
+						description.getAccessorsArray(),
+						description.getDefaultValue(),
+						description.getConverter(),
+						description.getEditor());
+		property.setDescription(description);
+		property.setCategory(description.getCategory());
+		return property;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/RenameConvertSupport.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/RenameConvertSupport.java
index 19ef6071d..635734f24 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/RenameConvertSupport.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/RenameConvertSupport.java
@@ -58,386 +58,386 @@
  * @coverage core.model.util
  */
 public final class RenameConvertSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Contribution
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * If possible, contributes "rename" action.
-   *
-   * @param objects
-   *          The components that should be renamed/converted.
-   * @param manager
-   *          The {@link IContributionManager} to add action to.
-   */
-  public static void contribute(List<? extends ObjectInfo> objects, IContributionManager manager) {
-    // ensure objects (during tests we sometimes send "null")
-    if (objects == null) {
-      return;
-    }
-    // prepare components
-    Iterable<JavaInfo> components = Iterables.filter(objects, JavaInfo.class);
-    RenameConvertSupport support = new RenameConvertSupport(components);
-    // add action
-    if (components.iterator().hasNext()) {
-      Action action = support.new RenameAction();
-      manager.appendToGroup(IContextMenuConstants.GROUP_INHERITANCE, action);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Contribution
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * If possible, contributes "rename" action.
+	 *
+	 * @param objects
+	 *          The components that should be renamed/converted.
+	 * @param manager
+	 *          The {@link IContributionManager} to add action to.
+	 */
+	public static void contribute(List<? extends ObjectInfo> objects, IContributionManager manager) {
+		// ensure objects (during tests we sometimes send "null")
+		if (objects == null) {
+			return;
+		}
+		// prepare components
+		Iterable<JavaInfo> components = Iterables.filter(objects, JavaInfo.class);
+		RenameConvertSupport support = new RenameConvertSupport(components);
+		// add action
+		if (components.iterator().hasNext()) {
+			Action action = support.new RenameAction();
+			manager.appendToGroup(IContextMenuConstants.GROUP_INHERITANCE, action);
+		}
+	}
 
-  /**
-   * Initiates the rename/convert operation for <code>objects</code> by bringing up rename dialog.
-   *
-   * @param objects
-   *          The components that should be renamed/converted.
-   */
-  public static void rename(List<? extends ObjectInfo> objects) {
-    Iterable<JavaInfo> components = Iterables.filter(objects, JavaInfo.class);
-    RenameConvertSupport support = new RenameConvertSupport(components);
-    support.doRename();
-  }
+	/**
+	 * Initiates the rename/convert operation for <code>objects</code> by bringing up rename dialog.
+	 *
+	 * @param objects
+	 *          The components that should be renamed/converted.
+	 */
+	public static void rename(List<? extends ObjectInfo> objects) {
+		Iterable<JavaInfo> components = Iterables.filter(objects, JavaInfo.class);
+		RenameConvertSupport support = new RenameConvertSupport(components);
+		support.doRename();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance fields
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final Iterable<? extends JavaInfo> m_components;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance fields
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final Iterable<? extends JavaInfo> m_components;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private RenameConvertSupport(Iterable<? extends JavaInfo> components) {
-    m_components = components;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private RenameConvertSupport(Iterable<? extends JavaInfo> components) {
+		m_components = components;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Action
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * {@link Action} for rename/convert components.
-   */
-  private class RenameAction extends Action {
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public RenameAction() {
-      setImageDescriptor(DesignerPlugin.getImageDescriptor("actions/rename/rename_convert.png"));
-      setText(ModelMessages.RenameConvertSupport_text);
-    }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Action
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * {@link Action} for rename/convert components.
+	 */
+	private class RenameAction extends Action {
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public RenameAction() {
+			setImageDescriptor(DesignerPlugin.getImageDescriptor("actions/rename/rename_convert.png"));
+			setText(ModelMessages.RenameConvertSupport_text);
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Object - make "singleton"
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public int hashCode() {
-      return 0;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Object - make "singleton"
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public int hashCode() {
+			return 0;
+		}
 
-    @Override
-    public boolean equals(Object obj) {
-      return obj instanceof RenameAction;
-    }
+		@Override
+		public boolean equals(Object obj) {
+			return obj instanceof RenameAction;
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Run
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public void run() {
-      doRename();
-    }
-  }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Run
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public void run() {
+			doRename();
+		}
+	}
 
-  /**
-   * Opens rename/convert dialog and perform one or more operations if user pressed OK.
-   */
-  private void doRename() {
-    RenameDialog dialog = new RenameDialog();
-    if (dialog.open() == Window.OK) {
-      executeCommands();
-    }
-  }
+	/**
+	 * Opens rename/convert dialog and perform one or more operations if user pressed OK.
+	 */
+	private void doRename() {
+		RenameDialog dialog = new RenameDialog();
+		if (dialog.open() == Window.OK) {
+			executeCommands();
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final Map<JavaInfo, RenameCommand> m_commands = Maps.newLinkedHashMap();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final Map<JavaInfo, RenameCommand> m_commands = Maps.newLinkedHashMap();
 
-  /**
-   * Executes pending {@link RenameCommand}'s.
-   */
-  private void executeCommands() {
-    if (!m_commands.isEmpty()) {
-      JavaInfo anyComponent = m_components.iterator().next();
-      ExecutionUtils.run(anyComponent, new RunnableEx() {
-        @Override
-        public void run() throws Exception {
-          for (RenameCommand command : m_commands.values()) {
-            command.execute();
-          }
-        }
-      });
-    }
-  }
+	/**
+	 * Executes pending {@link RenameCommand}'s.
+	 */
+	private void executeCommands() {
+		if (!m_commands.isEmpty()) {
+			JavaInfo anyComponent = m_components.iterator().next();
+			ExecutionUtils.run(anyComponent, new RunnableEx() {
+				@Override
+				public void run() throws Exception {
+					for (RenameCommand command : m_commands.values()) {
+						command.execute();
+					}
+				}
+			});
+		}
+	}
 
-  /**
-   * Validates that all pending {@link RenameCommand}'s are valid.<br>
-   * In particular we verify that variable names are valid and unique.
-   *
-   * @return the error message or <code>null</code>.
-   */
-  private String validateCommands() {
-    // check that variable names are valid
-    for (RenameCommand command : m_commands.values()) {
-      String name = command.m_name;
-      if (name != null) {
-        IStatus status = JavaConventions.validateIdentifier(name);
-        if (status.matches(IStatus.ERROR)) {
-          return status.getMessage();
-        }
-      }
-    }
-    // check for unique names
-    {
-      // we intentionally don't check for names uniqueness, because:
-      // 1. hard to implement;
-      // 2. hard for user, if we force him generate unique names by hands.
-    }
-    // OK
-    return null;
-  }
+	/**
+	 * Validates that all pending {@link RenameCommand}'s are valid.<br>
+	 * In particular we verify that variable names are valid and unique.
+	 *
+	 * @return the error message or <code>null</code>.
+	 */
+	private String validateCommands() {
+		// check that variable names are valid
+		for (RenameCommand command : m_commands.values()) {
+			String name = command.m_name;
+			if (name != null) {
+				IStatus status = JavaConventions.validateIdentifier(name);
+				if (status.matches(IStatus.ERROR)) {
+					return status.getMessage();
+				}
+			}
+		}
+		// check for unique names
+		{
+			// we intentionally don't check for names uniqueness, because:
+			// 1. hard to implement;
+			// 2. hard for user, if we force him generate unique names by hands.
+		}
+		// OK
+		return null;
+	}
 
-  /**
-   * @return the {@link RenameCommand} associated with given {@link JavaInfo}.
-   */
-  private RenameCommand getCommand(JavaInfo javaInfo) {
-    RenameCommand command = m_commands.get(javaInfo);
-    if (command == null) {
-      command = new RenameCommand(javaInfo);
-      m_commands.put(javaInfo, command);
-    }
-    return command;
-  }
+	/**
+	 * @return the {@link RenameCommand} associated with given {@link JavaInfo}.
+	 */
+	private RenameCommand getCommand(JavaInfo javaInfo) {
+		RenameCommand command = m_commands.get(javaInfo);
+		if (command == null) {
+			command = new RenameCommand(javaInfo);
+			m_commands.put(javaInfo, command);
+		}
+		return command;
+	}
 
-  /**
-   * Container for remembering pending operation.
-   */
-  private static final class RenameCommand {
-    private final JavaInfo m_javaInfo;
-    private String m_name;
-    private boolean m_toLocal;
-    private boolean m_toField;
+	/**
+	 * Container for remembering pending operation.
+	 */
+	private static final class RenameCommand {
+		private final JavaInfo m_javaInfo;
+		private String m_name;
+		private boolean m_toLocal;
+		private boolean m_toField;
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public RenameCommand(JavaInfo javaInfo) {
-      m_javaInfo = javaInfo;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public RenameCommand(JavaInfo javaInfo) {
+			m_javaInfo = javaInfo;
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Access
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    /**
-     * Sets the new name for {@link JavaInfo} variable.
-     */
-    public void setName(String name) {
-      m_name = name;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Access
+		//
+		////////////////////////////////////////////////////////////////////////////
+		/**
+		 * Sets the new name for {@link JavaInfo} variable.
+		 */
+		public void setName(String name) {
+			m_name = name;
+		}
 
-    /**
-     * Specifies that {@link JavaInfo} variable should be converted to local.
-     */
-    public void toLocal() {
-      m_toLocal = true;
-      m_toField = false;
-    }
+		/**
+		 * Specifies that {@link JavaInfo} variable should be converted to local.
+		 */
+		public void toLocal() {
+			m_toLocal = true;
+			m_toField = false;
+		}
 
-    /**
-     * Specifies that {@link JavaInfo} variable should be converted to field.
-     */
-    public void toField() {
-      m_toLocal = false;
-      m_toField = true;
-    }
+		/**
+		 * Specifies that {@link JavaInfo} variable should be converted to field.
+		 */
+		public void toField() {
+			m_toLocal = false;
+			m_toField = true;
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Execution
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    /**
-     * Executes operation remembered in this command.
-     */
-    public void execute() throws Exception {
-      // to local/field
-      {
-        VariableSupport variable = m_javaInfo.getVariableSupport();
-        if (m_toLocal && variable.canConvertFieldToLocal()) {
-          variable.convertFieldToLocal();
-        } else if (m_toField && variable.canConvertLocalToField()) {
-          variable.convertLocalToField();
-        }
-      }
-      // name
-      {
-        VariableSupport variable = m_javaInfo.getVariableSupport();
-        if (m_name != null && !variable.getName().equals(m_name)) {
-          ((AbstractNamedVariableSupport) variable).setNameBase(m_name);
-        }
-      }
-    }
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Rename dialog
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Dialog for requesting new name/local/field for components.
-   */
-  private class RenameDialog extends AbstractValidationTitleAreaDialog {
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public RenameDialog() {
-      super(DesignerPlugin.getShell(),
-          DesignerPlugin.getDefault(),
-          ModelMessages.RenameConvertSupport_shellTitle,
-          ModelMessages.RenameConvertSupport_title,
-          DesignerPlugin.getImage("actions/rename/rename_banner.gif"),
-          ModelMessages.RenameConvertSupport_message);
-      setShellStyle(SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Execution
+		//
+		////////////////////////////////////////////////////////////////////////////
+		/**
+		 * Executes operation remembered in this command.
+		 */
+		public void execute() throws Exception {
+			// to local/field
+			{
+				VariableSupport variable = m_javaInfo.getVariableSupport();
+				if (m_toLocal && variable.canConvertFieldToLocal()) {
+					variable.convertFieldToLocal();
+				} else if (m_toField && variable.canConvertLocalToField()) {
+					variable.convertLocalToField();
+				}
+			}
+			// name
+			{
+				VariableSupport variable = m_javaInfo.getVariableSupport();
+				if (m_name != null && !variable.getName().equals(m_name)) {
+					((AbstractNamedVariableSupport) variable).setNameBase(m_name);
+				}
+			}
+		}
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Rename dialog
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Dialog for requesting new name/local/field for components.
+	 */
+	private class RenameDialog extends AbstractValidationTitleAreaDialog {
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public RenameDialog() {
+			super(DesignerPlugin.getShell(),
+					DesignerPlugin.getDefault(),
+					ModelMessages.RenameConvertSupport_shellTitle,
+					ModelMessages.RenameConvertSupport_title,
+					DesignerPlugin.getImage("actions/rename/rename_banner.gif"),
+					ModelMessages.RenameConvertSupport_message);
+			setShellStyle(SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // GUI
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    protected void createControls(Composite container) {
-      GridLayoutFactory.create(container).columns(4);
-      // for each component
-      for (JavaInfo javaInfo : m_components) {
-        VariableSupport variableSupport = javaInfo.getVariableSupport();
-        // we need name
-        if (!variableSupport.hasName()) {
-          continue;
-        }
-        // process single component
-        createControls(container, javaInfo, variableSupport);
-      }
-      // set focus on first Text
-      for (Control control : container.getChildren()) {
-        if (control instanceof Text) {
-          control.setFocus();
-          break;
-        }
-      }
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// GUI
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		protected void createControls(Composite container) {
+			GridLayoutFactory.create(container).columns(4);
+			// for each component
+			for (JavaInfo javaInfo : m_components) {
+				VariableSupport variableSupport = javaInfo.getVariableSupport();
+				// we need name
+				if (!variableSupport.hasName()) {
+					continue;
+				}
+				// process single component
+				createControls(container, javaInfo, variableSupport);
+			}
+			// set focus on first Text
+			for (Control control : container.getChildren()) {
+				if (control instanceof Text) {
+					control.setFocus();
+					break;
+				}
+			}
+		}
 
-    /**
-     * Creates {@link Control}'s for single {@link JavaInfo}.
-     */
-    private void createControls(Composite container,
-        final JavaInfo javaInfo,
-        VariableSupport variableSupport) {
-      // presentation
-      {
-        // icon
-        {
-          Label iconLabel = new Label(container, SWT.NONE);
-          Image icon = ObjectsLabelProvider.INSTANCE.getImage(javaInfo);
-          iconLabel.setImage(icon);
-        }
-        // text
-        {
-          Label textLabel = new Label(container, SWT.NONE);
-          String text = ObjectsLabelProvider.INSTANCE.getText(javaInfo);
-          textLabel.setText(text);
-        }
-      }
-      // name
-      {
-        final Text nameText = new Text(container, SWT.BORDER);
-        GridDataFactory.create(nameText).hintHC(30).grabH().fillH();
-        nameText.setText(variableSupport.getName());
-        // listener
-        nameText.addListener(SWT.Modify, new Listener() {
-          @Override
-          public void handleEvent(Event event) {
-            getCommand(javaInfo).setName(nameText.getText());
-            validateAll();
-          }
-        });
-      }
-      // local/field
-      {
-        ToolBar toolBar = new ToolBar(container, SWT.FLAT);
-        boolean isNormalVariable =
-            variableSupport instanceof LocalUniqueVariableSupport
-                || variableSupport instanceof LocalReuseVariableSupport
-                || variableSupport instanceof FieldUniqueVariableSupport
-                || variableSupport instanceof FieldReuseVariableSupport;
-        {
-          ToolItem toolItem = new ToolItem(toolBar, SWT.RADIO);
-          toolItem.setImage(DesignerPlugin.getImage("actions/rename/be_local.png"));
-          toolItem.setToolTipText(ModelMessages.RenameConvertSupport_toLocal);
-          toolItem.setEnabled(isNormalVariable);
-          toolItem.setSelection(variableSupport instanceof LocalVariableSupport);
-          // listener
-          toolItem.addListener(SWT.Selection, new Listener() {
-            @Override
-            public void handleEvent(Event event) {
-              getCommand(javaInfo).toLocal();
-            }
-          });
-        }
-        {
-          ToolItem toolItem = new ToolItem(toolBar, SWT.RADIO);
-          toolItem.setImage(DesignerPlugin.getImage("actions/rename/be_field.png"));
-          toolItem.setToolTipText(ModelMessages.RenameConvertSupport_beField);
-          toolItem.setEnabled(isNormalVariable);
-          toolItem.setSelection(variableSupport instanceof FieldVariableSupport);
-          // listener
-          toolItem.addListener(SWT.Selection, new Listener() {
-            @Override
-            public void handleEvent(Event event) {
-              getCommand(javaInfo).toField();
-            }
-          });
-        }
-      }
-    }
+		/**
+		 * Creates {@link Control}'s for single {@link JavaInfo}.
+		 */
+		private void createControls(Composite container,
+				final JavaInfo javaInfo,
+				VariableSupport variableSupport) {
+			// presentation
+			{
+				// icon
+				{
+					Label iconLabel = new Label(container, SWT.NONE);
+					Image icon = ObjectsLabelProvider.INSTANCE.getImage(javaInfo);
+					iconLabel.setImage(icon);
+				}
+				// text
+				{
+					Label textLabel = new Label(container, SWT.NONE);
+					String text = ObjectsLabelProvider.INSTANCE.getText(javaInfo);
+					textLabel.setText(text);
+				}
+			}
+			// name
+			{
+				final Text nameText = new Text(container, SWT.BORDER);
+				GridDataFactory.create(nameText).hintHC(30).grabH().fillH();
+				nameText.setText(variableSupport.getName());
+				// listener
+				nameText.addListener(SWT.Modify, new Listener() {
+					@Override
+					public void handleEvent(Event event) {
+						getCommand(javaInfo).setName(nameText.getText());
+						validateAll();
+					}
+				});
+			}
+			// local/field
+			{
+				ToolBar toolBar = new ToolBar(container, SWT.FLAT);
+				boolean isNormalVariable =
+						variableSupport instanceof LocalUniqueVariableSupport
+						|| variableSupport instanceof LocalReuseVariableSupport
+						|| variableSupport instanceof FieldUniqueVariableSupport
+						|| variableSupport instanceof FieldReuseVariableSupport;
+				{
+					ToolItem toolItem = new ToolItem(toolBar, SWT.RADIO);
+					toolItem.setImage(DesignerPlugin.getImage("actions/rename/be_local.png"));
+					toolItem.setToolTipText(ModelMessages.RenameConvertSupport_toLocal);
+					toolItem.setEnabled(isNormalVariable);
+					toolItem.setSelection(variableSupport instanceof LocalVariableSupport);
+					// listener
+					toolItem.addListener(SWT.Selection, new Listener() {
+						@Override
+						public void handleEvent(Event event) {
+							getCommand(javaInfo).toLocal();
+						}
+					});
+				}
+				{
+					ToolItem toolItem = new ToolItem(toolBar, SWT.RADIO);
+					toolItem.setImage(DesignerPlugin.getImage("actions/rename/be_field.png"));
+					toolItem.setToolTipText(ModelMessages.RenameConvertSupport_beField);
+					toolItem.setEnabled(isNormalVariable);
+					toolItem.setSelection(variableSupport instanceof FieldVariableSupport);
+					// listener
+					toolItem.addListener(SWT.Selection, new Listener() {
+						@Override
+						public void handleEvent(Event event) {
+							getCommand(javaInfo).toField();
+						}
+					});
+				}
+			}
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Validation
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    protected String validate() {
-      return validateCommands();
-    }
-  }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Validation
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		protected String validate() {
+			return validateCommands();
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/TemplateUtils.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/TemplateUtils.java
index 21419961e..bfb52cbf3 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/TemplateUtils.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/TemplateUtils.java
@@ -36,260 +36,260 @@
  * @coverage core.model.util
  */
 public final class TemplateUtils {
-  public static final String ID_PREFIX = "__wbpId:";
+	public static final String ID_PREFIX = "__wbpId:";
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Low level expression utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the deferred reference on given {@link JavaInfo}.
-   */
-  public static String getExpression(JavaInfo javaInfo) {
-    return ID_PREFIX + ObjectInfoUtils.getId(javaInfo);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Low level expression utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the deferred reference on given {@link JavaInfo}.
+	 */
+	public static String getExpression(JavaInfo javaInfo) {
+		return ID_PREFIX + ObjectInfoUtils.getId(javaInfo);
+	}
 
-  /**
-   * Formats text using {@link MessageFormat}, and replaces {@link JavaInfo} references with
-   * "delayed" references, in form <code>"__wbpId:id"</code>. These references should be resolved
-   * later, when {@link NodeTarget} will be known.
-   *
-   * @return the formatted text.
-   */
-  public static String format(String pattern, Object... arguments) {
-    Object[] updatedArguments = new Object[arguments.length];
-    for (int i = 0; i < arguments.length; i++) {
-      Object argument = arguments[i];
-      if (argument instanceof JavaInfo) {
-        argument = getExpression((JavaInfo) argument);
-      }
-      updatedArguments[i] = argument;
-    }
-    return MessageFormat.format(pattern, updatedArguments);
-  }
+	/**
+	 * Formats text using {@link MessageFormat}, and replaces {@link JavaInfo} references with
+	 * "delayed" references, in form <code>"__wbpId:id"</code>. These references should be resolved
+	 * later, when {@link NodeTarget} will be known.
+	 *
+	 * @return the formatted text.
+	 */
+	public static String format(String pattern, Object... arguments) {
+		Object[] updatedArguments = new Object[arguments.length];
+		for (int i = 0; i < arguments.length; i++) {
+			Object argument = arguments[i];
+			if (argument instanceof JavaInfo) {
+				argument = getExpression((JavaInfo) argument);
+			}
+			updatedArguments[i] = argument;
+		}
+		return MessageFormat.format(pattern, updatedArguments);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Resolve
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * See {@link #resolve(JavaInfo, NodeTarget, String)}.
-   */
-  public static String resolve(StatementTarget target, String text) throws Exception {
-    return resolve(new NodeTarget(target), text);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Resolve
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * See {@link #resolve(JavaInfo, NodeTarget, String)}.
+	 */
+	public static String resolve(StatementTarget target, String text) throws Exception {
+		return resolve(new NodeTarget(target), text);
+	}
 
-  /**
-   * See {@link #resolve(JavaInfo, NodeTarget, String)}.
-   */
-  public static String resolve(BodyDeclarationTarget target, String text) throws Exception {
-    return resolve(new NodeTarget(target), text);
-  }
+	/**
+	 * See {@link #resolve(JavaInfo, NodeTarget, String)}.
+	 */
+	public static String resolve(BodyDeclarationTarget target, String text) throws Exception {
+		return resolve(new NodeTarget(target), text);
+	}
 
-  /**
-   * Replaces "delayed" {@link JavaInfo} references in form <code>"__wbpId:id"</code> with real
-   * references, good in given {@link NodeTarget}.
-   *
-   * @return the text with resolved {@link JavaInfo} references.
-   */
-  public static String resolve(NodeTarget target, String text) throws Exception {
-    while (true) {
-      int jIndex = text.indexOf(ID_PREFIX);
-      if (jIndex == -1) {
-        break;
-      }
-      // prepare ID range
-      int idBegin = jIndex + ID_PREFIX.length();
-      int idEnd = idBegin;
-      while (idEnd < text.length() && Character.isDigit(text.charAt(idEnd))) {
-        idEnd++;
-      }
-      // prepare ID
-      String id = text.substring(idBegin, idEnd);
-      // check for ".", i.e. for access expression
-      boolean askAccess = false;
-      if (idEnd < text.length() && text.charAt(idEnd) == '.') {
-        askAccess = true;
-        idEnd++;
-      }
-      // prepare JavaInfo expression
-      String expr;
-      {
-        JavaInfo javaInfo = (JavaInfo) ObjectInfoUtils.getById(id);
-        VariableSupport variableSupport = javaInfo.getVariableSupport();
-        if (askAccess) {
-          expr = variableSupport.getAccessExpression(target);
-        } else {
-          expr = variableSupport.getReferenceExpression(target);
-        }
-      }
-      // replace ID with expression
-      text = text.substring(0, jIndex) + expr + text.substring(idEnd);
-    }
-    return text;
-  }
+	/**
+	 * Replaces "delayed" {@link JavaInfo} references in form <code>"__wbpId:id"</code> with real
+	 * references, good in given {@link NodeTarget}.
+	 *
+	 * @return the text with resolved {@link JavaInfo} references.
+	 */
+	public static String resolve(NodeTarget target, String text) throws Exception {
+		while (true) {
+			int jIndex = text.indexOf(ID_PREFIX);
+			if (jIndex == -1) {
+				break;
+			}
+			// prepare ID range
+			int idBegin = jIndex + ID_PREFIX.length();
+			int idEnd = idBegin;
+			while (idEnd < text.length() && Character.isDigit(text.charAt(idEnd))) {
+				idEnd++;
+			}
+			// prepare ID
+			String id = text.substring(idBegin, idEnd);
+			// check for ".", i.e. for access expression
+			boolean askAccess = false;
+			if (idEnd < text.length() && text.charAt(idEnd) == '.') {
+				askAccess = true;
+				idEnd++;
+			}
+			// prepare JavaInfo expression
+			String expr;
+			{
+				JavaInfo javaInfo = (JavaInfo) ObjectInfoUtils.getById(id);
+				VariableSupport variableSupport = javaInfo.getVariableSupport();
+				if (askAccess) {
+					expr = variableSupport.getAccessExpression(target);
+				} else {
+					expr = variableSupport.getReferenceExpression(target);
+				}
+			}
+			// replace ID with expression
+			text = text.substring(0, jIndex) + expr + text.substring(idEnd);
+		}
+		return text;
+	}
 
-  /**
-   * @return the {@link List} with all resolved {@link String}'s.
-   */
-  public static List<String> resolve(NodeTarget target, List<String> lines) throws Exception {
-    List<String> resolvedLines = Lists.newArrayList();
-    for (String line : lines) {
-      line = resolve(target, line);
-      resolvedLines.add(line);
-    }
-    return resolvedLines;
-  }
+	/**
+	 * @return the {@link List} with all resolved {@link String}'s.
+	 */
+	public static List<String> resolve(NodeTarget target, List<String> lines) throws Exception {
+		List<String> resolvedLines = Lists.newArrayList();
+		for (String line : lines) {
+			line = resolve(target, line);
+			resolvedLines.add(line);
+		}
+		return resolvedLines;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Format + resolve
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * See {@link #resolve(NodeTarget, String, Object...)}.
-   */
-  public static String resolve(StatementTarget target, String pattern, Object... arguments)
-      throws Exception {
-    return resolve(new NodeTarget(target), pattern, arguments);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Format + resolve
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * See {@link #resolve(NodeTarget, String, Object...)}.
+	 */
+	public static String resolve(StatementTarget target, String pattern, Object... arguments)
+			throws Exception {
+		return resolve(new NodeTarget(target), pattern, arguments);
+	}
 
-  /**
-   * See {@link #resolve(NodeTarget, String, Object...)}.
-   */
-  public static String resolve(BodyDeclarationTarget target, String pattern, Object... arguments)
-      throws Exception {
-    return resolve(new NodeTarget(target), pattern, arguments);
-  }
+	/**
+	 * See {@link #resolve(NodeTarget, String, Object...)}.
+	 */
+	public static String resolve(BodyDeclarationTarget target, String pattern, Object... arguments)
+			throws Exception {
+		return resolve(new NodeTarget(target), pattern, arguments);
+	}
 
-  /**
-   * Performs {@link #format(String, Object...)} and
-   * {@link #resolve(JavaInfo, BodyDeclarationTarget, String)}, expects that one of the arguments is
-   * {@link JavaInfo}.
-   */
-  public static String resolve(NodeTarget target, String pattern, Object... arguments)
-      throws Exception {
-    String text = format(pattern, arguments);
-    return resolve(target, text);
-  }
+	/**
+	 * Performs {@link #format(String, Object...)} and
+	 * {@link #resolve(JavaInfo, BodyDeclarationTarget, String)}, expects that one of the arguments is
+	 * {@link JavaInfo}.
+	 */
+	public static String resolve(NodeTarget target, String pattern, Object... arguments)
+			throws Exception {
+		String text = format(pattern, arguments);
+		return resolve(target, text);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ASTNode operations for source with templates
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds {@link Statement} with template source.
-   */
-  public static Statement addStatement(JavaInfo javaInfo, StatementTarget target, List<String> lines)
-      throws Exception {
-    List<String> resolvedLines = resolve(new NodeTarget(target), lines);
-    Statement statement = javaInfo.getEditor().addStatement(resolvedLines, target);
-    javaInfo.addRelatedNodes(statement);
-    return statement;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ASTNode operations for source with templates
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds {@link Statement} with template source.
+	 */
+	public static Statement addStatement(JavaInfo javaInfo, StatementTarget target, List<String> lines)
+			throws Exception {
+		List<String> resolvedLines = resolve(new NodeTarget(target), lines);
+		Statement statement = javaInfo.getEditor().addStatement(resolvedLines, target);
+		javaInfo.addRelatedNodes(statement);
+		return statement;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // OLD templates
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * See {@link #evaluate(String, JavaInfo, Map)}.
-   */
-  public static String evaluate(String source, JavaInfo javaInfo) throws Exception {
-    return evaluate(source, javaInfo, null);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// OLD templates
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * See {@link #evaluate(String, JavaInfo, Map)}.
+	 */
+	public static String evaluate(String source, JavaInfo javaInfo) throws Exception {
+		return evaluate(source, javaInfo, null);
+	}
 
-  /**
-   * Evaluates source {@link String}, with <code>"${variable}"</code> variables and
-   * <code>"${expression}"</code> expressions.
-   * <p>
-   * Typical expression is <code>"${parent.firstChild[java.awt.LayoutManager].expression}"</code>.
-   *
-   * @param source
-   *          the source {@link String} to evaluate.
-   * @param javaInfo
-   *          the starting {@link JavaInfo}, relative to which expressions should be evaluated.
-   * @param templateVariables
-   *          the {@link Map} to variable names into values, may be <code>null</code>.
-   *
-   * @return the source with replaced template variables/expressions.
-   */
-  public static String evaluate(String source,
-      JavaInfo javaInfo,
-      Map<String, String> templateVariables) throws Exception {
-    // replace template variables
-    if (templateVariables != null) {
-      source = StrSubstitutor.replace(source, templateVariables);
-    }
-    // replace template expressions
-    while (true) {
-      // extract single template expression
-      String expression = StringUtils.substringBetween(source, "${", "}");
-      if (expression == null) {
-        break;
-      }
-      // replace template expression
-      try {
-        String result = evaluateExpression(expression, javaInfo);
-        source = StringUtils.replace(source, "${" + expression + "}", result);
-      } catch (Throwable e) {
-        String message = String.format("Exception during evaluation |%s|.", source);
-        throw new IllegalArgumentException(message, e);
-      }
-    }
-    return source;
-  }
+	/**
+	 * Evaluates source {@link String}, with <code>"${variable}"</code> variables and
+	 * <code>"${expression}"</code> expressions.
+	 * <p>
+	 * Typical expression is <code>"${parent.firstChild[java.awt.LayoutManager].expression}"</code>.
+	 *
+	 * @param source
+	 *          the source {@link String} to evaluate.
+	 * @param javaInfo
+	 *          the starting {@link JavaInfo}, relative to which expressions should be evaluated.
+	 * @param templateVariables
+	 *          the {@link Map} to variable names into values, may be <code>null</code>.
+	 *
+	 * @return the source with replaced template variables/expressions.
+	 */
+	public static String evaluate(String source,
+			JavaInfo javaInfo,
+			Map<String, String> templateVariables) throws Exception {
+		// replace template variables
+		if (templateVariables != null) {
+			source = StrSubstitutor.replace(source, templateVariables);
+		}
+		// replace template expressions
+		while (true) {
+			// extract single template expression
+			String expression = StringUtils.substringBetween(source, "${", "}");
+			if (expression == null) {
+				break;
+			}
+			// replace template expression
+			try {
+				String result = evaluateExpression(expression, javaInfo);
+				source = StringUtils.replace(source, "${" + expression + "}", result);
+			} catch (Throwable e) {
+				String message = String.format("Exception during evaluation |%s|.", source);
+				throw new IllegalArgumentException(message, e);
+			}
+		}
+		return source;
+	}
 
-  /**
-   * Evaluates single {@link JavaInfo} expression.
-   */
-  private static String evaluateExpression(String expression, JavaInfo javaInfo) throws Exception {
-    String originalExpression = expression;
-    expressionLoop : while (expression.length() != 0) {
-      // remove leading "."
-      if (expression.startsWith(".")) {
-        expression = expression.substring(1);
-        continue;
-      }
-      // analyze simple expression part
-      if (expression.startsWith("parent")) {
-        javaInfo = javaInfo.getParentJava();
-        expression = expression.substring("parent".length());
-      } else if (expression.startsWith("firstChild[")) {
-        // prepare selector
-        String selectorClassName;
-        {
-          int openBracketIndex = expression.indexOf("[");
-          int closeBracketIndex = expression.indexOf("]");
-          selectorClassName = expression.substring(openBracketIndex + 1, closeBracketIndex);
-          expression = expression.substring(closeBracketIndex + "]".length());
-        }
-        // select child by component class
-        for (JavaInfo child : javaInfo.getChildrenJava()) {
-          Class<?> childComponentClass = child.getDescription().getComponentClass();
-          if (ReflectionUtils.isSuccessorOf(childComponentClass, selectorClassName)) {
-            javaInfo = child;
-            continue expressionLoop;
-          }
-        }
-        // no such child found
-        throw new IllegalArgumentException(String.format(
-            "Can not find |%s| in |%s|.",
-            selectorClassName,
-            javaInfo));
-      } else if (expression.startsWith("expression")) {
-        return getExpression(javaInfo);
-      } else {
-        throw new IllegalArgumentException(String.format("Incorrect expression |%s|.", expression));
-      }
-    }
-    // should not happen
-    throw new IllegalArgumentException(String.format(
-        "Expression have not evaluated |%s|.",
-        originalExpression));
-  }
+	/**
+	 * Evaluates single {@link JavaInfo} expression.
+	 */
+	private static String evaluateExpression(String expression, JavaInfo javaInfo) throws Exception {
+		String originalExpression = expression;
+		expressionLoop : while (expression.length() != 0) {
+			// remove leading "."
+			if (expression.startsWith(".")) {
+				expression = expression.substring(1);
+				continue;
+			}
+			// analyze simple expression part
+			if (expression.startsWith("parent")) {
+				javaInfo = javaInfo.getParentJava();
+				expression = expression.substring("parent".length());
+			} else if (expression.startsWith("firstChild[")) {
+				// prepare selector
+				String selectorClassName;
+				{
+					int openBracketIndex = expression.indexOf("[");
+					int closeBracketIndex = expression.indexOf("]");
+					selectorClassName = expression.substring(openBracketIndex + 1, closeBracketIndex);
+					expression = expression.substring(closeBracketIndex + "]".length());
+				}
+				// select child by component class
+				for (JavaInfo child : javaInfo.getChildrenJava()) {
+					Class<?> childComponentClass = child.getDescription().getComponentClass();
+					if (ReflectionUtils.isSuccessorOf(childComponentClass, selectorClassName)) {
+						javaInfo = child;
+						continue expressionLoop;
+					}
+				}
+				// no such child found
+				throw new IllegalArgumentException(String.format(
+						"Can not find |%s| in |%s|.",
+						selectorClassName,
+						javaInfo));
+			} else if (expression.startsWith("expression")) {
+				return getExpression(javaInfo);
+			} else {
+				throw new IllegalArgumentException(String.format("Incorrect expression |%s|.", expression));
+			}
+		}
+		// should not happen
+		throw new IllegalArgumentException(String.format(
+				"Expression have not evaluated |%s|.",
+				originalExpression));
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/WorkspaceUtils.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/WorkspaceUtils.java
index c1739bee6..6513a43e0 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/WorkspaceUtils.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/WorkspaceUtils.java
@@ -27,109 +27,109 @@
  * @coverage core.model.util
  */
 public class WorkspaceUtils {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private WorkspaceUtils() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private WorkspaceUtils() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Job utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Process UI input but do not return for the specified time interval.
-   *
-   * @param waitTimeMillis
-   *          the number of milliseconds
-   */
-  public static void delay(long waitTimeMillis) {
-    Display display = Display.getCurrent();
-    // If this is the user interface thread, then process input
-    if (display != null) {
-      long endTimeMillis = System.currentTimeMillis() + waitTimeMillis;
-      while (System.currentTimeMillis() < endTimeMillis) {
-        if (!display.readAndDispatch()) {
-          display.sleep();
-        }
-      }
-      display.update();
-    }
-    // Otherwise perform a simple sleep
-    else {
-      try {
-        Thread.sleep(waitTimeMillis);
-      } catch (InterruptedException e) {
-        // ignored
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Job utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Process UI input but do not return for the specified time interval.
+	 *
+	 * @param waitTimeMillis
+	 *          the number of milliseconds
+	 */
+	public static void delay(long waitTimeMillis) {
+		Display display = Display.getCurrent();
+		// If this is the user interface thread, then process input
+		if (display != null) {
+			long endTimeMillis = System.currentTimeMillis() + waitTimeMillis;
+			while (System.currentTimeMillis() < endTimeMillis) {
+				if (!display.readAndDispatch()) {
+					display.sleep();
+				}
+			}
+			display.update();
+		}
+		// Otherwise perform a simple sleep
+		else {
+			try {
+				Thread.sleep(waitTimeMillis);
+			} catch (InterruptedException e) {
+				// ignored
+			}
+		}
+	}
 
-  /**
-   * Wait until all background tasks are complete
-   */
-  public static void waitForJobs() {
-    while (Job.getJobManager().currentJob() != null) {
-      delay(10);
-    }
-  }
+	/**
+	 * Wait until all background tasks are complete
+	 */
+	public static void waitForJobs() {
+		while (Job.getJobManager().currentJob() != null) {
+			delay(10);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Class utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Wait until type with given name will appear in project. We use this function if we need open
-   * this type in editor directly after creation.
-   */
-  public static IType waitForType(IJavaProject project, String fullClassName) {
-    while (true) {
-      // try to find type in model
-      try {
-        IType type = project.findType(fullClassName);
-        if (type != null) {
-          return type;
-        }
-      } catch (Throwable e) {
-      }
-      // delay
-      delay(10);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Class utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Wait until type with given name will appear in project. We use this function if we need open
+	 * this type in editor directly after creation.
+	 */
+	public static IType waitForType(IJavaProject project, String fullClassName) {
+		while (true) {
+			// try to find type in model
+			try {
+				IType type = project.findType(fullClassName);
+				if (type != null) {
+					return type;
+				}
+			} catch (Throwable e) {
+			}
+			// delay
+			delay(10);
+		}
+	}
 
-  /**
-   * Wait until class with given name will appear in project.<br>
-   * We use this function during code generation for classes that will be used directly after
-   * creation.
-   */
-  public static void waitForClass(AstEditor editor, String fullClassName) {
-    Job.getJobManager().wakeUp(ResourcesPlugin.FAMILY_AUTO_BUILD);
-    //
-    IJavaProject project = editor.getJavaProject();
-    ClassLoader editorLoader = EditorState.get(editor).getEditorLoader();
-    while (true) {
-      // try to find type in model
-      IType type = null;
-      try {
-        type = project.findType(fullClassName);
-      } catch (Throwable e) {
-      }
-      // try to load class
-      if (type != null) {
-        try {
-          editorLoader.loadClass(fullClassName);
-          break;
-        } catch (ClassNotFoundException e) {
-        } catch (Throwable e) {
-          throw ReflectionUtils.propagate(e);
-        }
-      }
-      // delay
-      delay(10);
-    }
-  }
+	/**
+	 * Wait until class with given name will appear in project.<br>
+	 * We use this function during code generation for classes that will be used directly after
+	 * creation.
+	 */
+	public static void waitForClass(AstEditor editor, String fullClassName) {
+		Job.getJobManager().wakeUp(ResourcesPlugin.FAMILY_AUTO_BUILD);
+		//
+		IJavaProject project = editor.getJavaProject();
+		ClassLoader editorLoader = EditorState.get(editor).getEditorLoader();
+		while (true) {
+			// try to find type in model
+			IType type = null;
+			try {
+				type = project.findType(fullClassName);
+			} catch (Throwable e) {
+			}
+			// try to load class
+			if (type != null) {
+				try {
+					editorLoader.loadClass(fullClassName);
+					break;
+				} catch (ClassNotFoundException e) {
+				} catch (Throwable e) {
+					throw ReflectionUtils.propagate(e);
+				}
+			}
+			// delay
+			delay(10);
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/factory/FactoryActionsSupport.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/factory/FactoryActionsSupport.java
index f0e8da877..c8684c2eb 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/factory/FactoryActionsSupport.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/factory/FactoryActionsSupport.java
@@ -47,153 +47,153 @@
  * @coverage core.model.util
  */
 public final class FactoryActionsSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Contribution
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * If possible, contributes actions for factory operations.
-   *
-   * @param component
-   *          the {@link JavaInfo} the target component.
-   * @param manager
-   *          the {@link IContributionManager} to add actions to.
-   */
-  public static void contribute(JavaInfo component, IContributionManager manager) throws Exception {
-    // only constructor creation is supported, no "factory-on-factory-on-factory" please :-)
-    if (!(component.getCreationSupport() instanceof ConstructorCreationSupport)) {
-      return;
-    }
-    // add "Factory" sub-menu
-    MenuManagerEx factoryManager;
-    {
-      factoryManager = new MenuManagerEx(ModelMessages.FactoryActionsSupport_factoryManager);
-      factoryManager.setImage(DesignerPlugin.getImage("actions/factory/factory.png"));
-      manager.appendToGroup(IContextMenuConstants.GROUP_INHERITANCE, factoryManager);
-    }
-    // add "factory" actions
-    new FactoryActionsSupport(component).contribute(factoryManager);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Contribution
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * If possible, contributes actions for factory operations.
+	 *
+	 * @param component
+	 *          the {@link JavaInfo} the target component.
+	 * @param manager
+	 *          the {@link IContributionManager} to add actions to.
+	 */
+	public static void contribute(JavaInfo component, IContributionManager manager) throws Exception {
+		// only constructor creation is supported, no "factory-on-factory-on-factory" please :-)
+		if (!(component.getCreationSupport() instanceof ConstructorCreationSupport)) {
+			return;
+		}
+		// add "Factory" sub-menu
+		MenuManagerEx factoryManager;
+		{
+			factoryManager = new MenuManagerEx(ModelMessages.FactoryActionsSupport_factoryManager);
+			factoryManager.setImage(DesignerPlugin.getImage("actions/factory/factory.png"));
+			manager.appendToGroup(IContextMenuConstants.GROUP_INHERITANCE, factoryManager);
+		}
+		// add "factory" actions
+		new FactoryActionsSupport(component).contribute(factoryManager);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance fields
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final JavaInfo m_component;
-  private final AstEditor m_editor;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance fields
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final JavaInfo m_component;
+	private final AstEditor m_editor;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private FactoryActionsSupport(JavaInfo component) {
-    m_component = component;
-    m_editor = m_component.getEditor();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private FactoryActionsSupport(JavaInfo component) {
+		m_component = component;
+		m_editor = m_component.getEditor();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Contribution
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Contributes "factory" actions for this component.
-   *
-   * @param manager
-   *          the {@link IContributionManager} to add action to.
-   */
-  private void contribute(IContributionManager manager) throws Exception {
-    // factories from same package
-    {
-      IPackageFragment currentPackage = (IPackageFragment) m_editor.getModelUnit().getParent();
-      // check all methods in all factories
-      List<ICompilationUnit> factoryUnits =
-          FactoryDescriptionHelper.getFactoryUnits(m_editor, currentPackage);
-      for (ICompilationUnit unit : factoryUnits) {
-        String typeName = unit.findPrimaryType().getFullyQualifiedName();
-        addApplyActions(manager, typeName);
-      }
-    }
-    // previous factories
-    manager.add(new Separator());
-    {
-      String[] previousTypeNames = getPreviousTypeNames(m_component);
-      for (String typeName : previousTypeNames) {
-        if (m_editor.getJavaProject().findType(typeName) != null) {
-          addApplyActions(manager, typeName);
-        }
-      }
-    }
-    manager.add(new FactorySelectAction(m_component));
-    // create factory
-    manager.add(new Separator());
-    manager.add(new FactoryCreateAction(m_component));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Contribution
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Contributes "factory" actions for this component.
+	 *
+	 * @param manager
+	 *          the {@link IContributionManager} to add action to.
+	 */
+	private void contribute(IContributionManager manager) throws Exception {
+		// factories from same package
+		{
+			IPackageFragment currentPackage = (IPackageFragment) m_editor.getModelUnit().getParent();
+			// check all methods in all factories
+			List<ICompilationUnit> factoryUnits =
+					FactoryDescriptionHelper.getFactoryUnits(m_editor, currentPackage);
+			for (ICompilationUnit unit : factoryUnits) {
+				String typeName = unit.findPrimaryType().getFullyQualifiedName();
+				addApplyActions(manager, typeName);
+			}
+		}
+		// previous factories
+		manager.add(new Separator());
+		{
+			String[] previousTypeNames = getPreviousTypeNames(m_component);
+			for (String typeName : previousTypeNames) {
+				if (m_editor.getJavaProject().findType(typeName) != null) {
+					addApplyActions(manager, typeName);
+				}
+			}
+		}
+		manager.add(new FactorySelectAction(m_component));
+		// create factory
+		manager.add(new Separator());
+		manager.add(new FactoryCreateAction(m_component));
+	}
 
-  /**
-   * Adds {@link FactoryApplyAction}'s from given factory type.
-   */
-  private void addApplyActions(IContributionManager manager, String typeName) throws Exception {
-    ClassLoader classLoader = EditorState.get(m_editor).getEditorLoader();
-    Class<?> factoryClass = classLoader.loadClass(typeName);
-    Collection<FactoryMethodDescription> descriptions =
-        FactoryDescriptionHelper.getDescriptionsMap(m_editor, factoryClass, true).values();
-    for (FactoryMethodDescription description : descriptions) {
-      Class<?> componentClass = m_component.getDescription().getComponentClass();
-      if (componentClass.isAssignableFrom(description.getReturnClass())) {
-        manager.add(new FactoryApplyAction(m_component, description));
-      }
-    }
-  }
+	/**
+	 * Adds {@link FactoryApplyAction}'s from given factory type.
+	 */
+	private void addApplyActions(IContributionManager manager, String typeName) throws Exception {
+		ClassLoader classLoader = EditorState.get(m_editor).getEditorLoader();
+		Class<?> factoryClass = classLoader.loadClass(typeName);
+		Collection<FactoryMethodDescription> descriptions =
+				FactoryDescriptionHelper.getDescriptionsMap(m_editor, factoryClass, true).values();
+		for (FactoryMethodDescription description : descriptions) {
+			Class<?> componentClass = m_component.getDescription().getComponentClass();
+			if (componentClass.isAssignableFrom(description.getReturnClass())) {
+				manager.add(new FactoryApplyAction(m_component, description));
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Previous factory types
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final QualifiedName KEY_PREVIOUS_FACTORIES =
-      new QualifiedName(DesignerPlugin.PLUGIN_ID, "previousFactoryTypes");
-  private static final int MAX_PREVIOUS_FACTORIES = 5;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Previous factory types
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final QualifiedName KEY_PREVIOUS_FACTORIES =
+			new QualifiedName(DesignerPlugin.PLUGIN_ID, "previousFactoryTypes");
+	private static final int MAX_PREVIOUS_FACTORIES = 5;
 
-  /**
-   * Clears the factory types history.
-   */
-  static void clearPreviousTypeNames(JavaInfo component) throws CoreException {
-    IProject project = component.getEditor().getJavaProject().getProject();
-    project.setPersistentProperty(KEY_PREVIOUS_FACTORIES, null);
-  }
+	/**
+	 * Clears the factory types history.
+	 */
+	static void clearPreviousTypeNames(JavaInfo component) throws CoreException {
+		IProject project = component.getEditor().getJavaProject().getProject();
+		project.setPersistentProperty(KEY_PREVIOUS_FACTORIES, null);
+	}
 
-  /**
-   * @return the names of factory types that were selected by user in past, may be empty array, but
-   *         not <code>null</code>.
-   */
-  static String[] getPreviousTypeNames(JavaInfo component) throws CoreException {
-    IProject project = component.getEditor().getJavaProject().getProject();
-    String possiblePreviousTypeNames = project.getPersistentProperty(KEY_PREVIOUS_FACTORIES);
-    if (possiblePreviousTypeNames != null) {
-      return StringUtils.split(possiblePreviousTypeNames, ',');
-    }
-    // no previous types
-    return ArrayUtils.EMPTY_STRING_ARRAY;
-  }
+	/**
+	 * @return the names of factory types that were selected by user in past, may be empty array, but
+	 *         not <code>null</code>.
+	 */
+	static String[] getPreviousTypeNames(JavaInfo component) throws CoreException {
+		IProject project = component.getEditor().getJavaProject().getProject();
+		String possiblePreviousTypeNames = project.getPersistentProperty(KEY_PREVIOUS_FACTORIES);
+		if (possiblePreviousTypeNames != null) {
+			return StringUtils.split(possiblePreviousTypeNames, ',');
+		}
+		// no previous types
+		return ArrayUtils.EMPTY_STRING_ARRAY;
+	}
 
-  /**
-   * Adds new factory type into history, but limit history to some size.
-   */
-  static void addPreviousTypeName(JavaInfo component, String typeName) throws CoreException {
-    String[] typeNames = getPreviousTypeNames(component);
-    // move element into head
-    typeNames = (String[]) ArrayUtils.removeElement(typeNames, typeName);
-    typeNames = (String[]) ArrayUtils.add(typeNames, 0, typeName);
-    // limit history size
-    if (typeNames.length > MAX_PREVIOUS_FACTORIES) {
-      typeNames = (String[]) ArrayUtils.remove(typeNames, typeNames.length - 1);
-    }
-    // set new type names
-    IProject project = component.getEditor().getJavaProject().getProject();
-    project.setPersistentProperty(KEY_PREVIOUS_FACTORIES, StringUtils.join(typeNames, ','));
-  }
+	/**
+	 * Adds new factory type into history, but limit history to some size.
+	 */
+	static void addPreviousTypeName(JavaInfo component, String typeName) throws CoreException {
+		String[] typeNames = getPreviousTypeNames(component);
+		// move element into head
+		typeNames = (String[]) ArrayUtils.removeElement(typeNames, typeName);
+		typeNames = (String[]) ArrayUtils.add(typeNames, 0, typeName);
+		// limit history size
+		if (typeNames.length > MAX_PREVIOUS_FACTORIES) {
+			typeNames = (String[]) ArrayUtils.remove(typeNames, typeNames.length - 1);
+		}
+		// set new type names
+		IProject project = component.getEditor().getJavaProject().getProject();
+		project.setPersistentProperty(KEY_PREVIOUS_FACTORIES, StringUtils.join(typeNames, ','));
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/factory/FactoryApplyAction.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/factory/FactoryApplyAction.java
index bc7978014..d3f73d8b7 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/factory/FactoryApplyAction.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/factory/FactoryApplyAction.java
@@ -52,166 +52,166 @@
  * @coverage core.model.util
  */
 public final class FactoryApplyAction extends Action {
-  private final JavaInfo m_component;
-  private final FactoryMethodDescription m_description;
-  private final AstEditor m_editor;
+	private final JavaInfo m_component;
+	private final FactoryMethodDescription m_description;
+	private final AstEditor m_editor;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FactoryApplyAction(JavaInfo component, FactoryMethodDescription description) {
-    m_component = component;
-    m_description = description;
-    m_editor = m_component.getEditor();
-    // configure presentation
-    ExecutionUtils.runLog(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        ComponentDescription componentDescription =
-            ComponentDescriptionHelper.getDescription(m_editor, m_description.getReturnClass());
-        setImageDescriptor(new ImageImageDescriptor(componentDescription.getIcon()));
-        setText(CodeUtils.getShortClass(m_description.getDeclaringClass().getName())
-            + "."
-            + m_description.getName()
-            + "(...)");
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FactoryApplyAction(JavaInfo component, FactoryMethodDescription description) {
+		m_component = component;
+		m_description = description;
+		m_editor = m_component.getEditor();
+		// configure presentation
+		ExecutionUtils.runLog(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				ComponentDescription componentDescription =
+						ComponentDescriptionHelper.getDescription(m_editor, m_description.getReturnClass());
+				setImageDescriptor(new ImageImageDescriptor(componentDescription.getIcon()));
+				setText(CodeUtils.getShortClass(m_description.getDeclaringClass().getName())
+						+ "."
+						+ m_description.getName()
+						+ "(...)");
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Run
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void run() {
-    ExecutionUtils.run(m_component, new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        prepareGenericProperties();
-        if (m_component.getCreationSupport() instanceof ConstructorCreationSupport) {
-          runConstructor();
-        }
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Run
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void run() {
+		ExecutionUtils.run(m_component, new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				prepareGenericProperties();
+				if (m_component.getCreationSupport() instanceof ConstructorCreationSupport) {
+					runConstructor();
+				}
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Implementation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private boolean m_hasParentArgument;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Implementation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private boolean m_hasParentArgument;
 
-  /**
-   * Apply to the {@link ConstructorCreationSupport}.
-   */
-  private void runConstructor() throws Exception {
-    ConstructorCreationSupport oldCreationSupport =
-        (ConstructorCreationSupport) m_component.getCreationSupport();
-    ClassInstanceCreation oldExpression = oldCreationSupport.getCreation();
-    List<Expression> oldArguments = DomGenerics.arguments(oldExpression);
-    // prepare source for factory invocation
-    String newSource;
-    {
-      newSource = m_description.getDeclaringClass().getName() + "." + m_description.getName() + "(";
-      newSource += StringUtils.join(getFactoryArguments(oldArguments).iterator(), ", ");
-      newSource += ")";
-    }
-    // set StaticFactoryCreationSupport
-    MethodInvocation newExpression;
-    {
-      // set new creation
-      StaticFactoryCreationSupport newCreationSupport =
-          new StaticFactoryCreationSupport(m_description);
-      m_component.setCreationSupport(newCreationSupport);
-      // set Expression
-      newExpression = (MethodInvocation) m_component.replaceExpression(oldExpression, newSource);
-      newCreationSupport.add_setSourceExpression(newExpression);
-    }
-    // if has "parent" argument, change association
-    if (m_hasParentArgument) {
-      m_component.setAssociation(new FactoryParentAssociation(newExpression));
-    }
-  }
+	/**
+	 * Apply to the {@link ConstructorCreationSupport}.
+	 */
+	private void runConstructor() throws Exception {
+		ConstructorCreationSupport oldCreationSupport =
+				(ConstructorCreationSupport) m_component.getCreationSupport();
+		ClassInstanceCreation oldExpression = oldCreationSupport.getCreation();
+		List<Expression> oldArguments = DomGenerics.arguments(oldExpression);
+		// prepare source for factory invocation
+		String newSource;
+		{
+			newSource = m_description.getDeclaringClass().getName() + "." + m_description.getName() + "(";
+			newSource += StringUtils.join(getFactoryArguments(oldArguments).iterator(), ", ");
+			newSource += ")";
+		}
+		// set StaticFactoryCreationSupport
+		MethodInvocation newExpression;
+		{
+			// set new creation
+			StaticFactoryCreationSupport newCreationSupport =
+					new StaticFactoryCreationSupport(m_description);
+			m_component.setCreationSupport(newCreationSupport);
+			// set Expression
+			newExpression = (MethodInvocation) m_component.replaceExpression(oldExpression, newSource);
+			newCreationSupport.add_setSourceExpression(newExpression);
+		}
+		// if has "parent" argument, change association
+		if (m_hasParentArgument) {
+			m_component.setAssociation(new FactoryParentAssociation(newExpression));
+		}
+	}
 
-  /**
-   * @param oldArguments
-   *          the arguments of old {@link ClassInstanceCreation} or {@link MethodInvocation} that
-   *          was used to create component.
-   *
-   * @return the arguments for factory method invocation.
-   */
-  private List<String> getFactoryArguments(List<Expression> oldArguments) throws Exception {
-    List<String> arguments = Lists.newArrayList();
-    for (ParameterDescription parameter : m_description.getParameters()) {
-      // check for "parent"
-      if (parameter.isParent()) {
-        m_hasParentArgument = true;
-        arguments.add(TemplateUtils.getExpression(m_component.getParentJava()));
-        continue;
-      }
-      // try to use source from bound property
-      {
-        GenericPropertyImpl property = getGenericProperty(parameter.getProperty());
-        if (property != null) {
-          Expression expression = ((GenericProperty) property).getExpression();
-          // argument of creation
-          if (oldArguments.contains(expression)) {
-            arguments.add(m_editor.getSource(expression));
-            continue;
-          }
-          // argument of separate method (only literal)
-          if (expression.getLocationInParent() == MethodInvocation.ARGUMENTS_PROPERTY
-              && (expression instanceof NullLiteral
-                  || expression instanceof BooleanLiteral
-                  || expression instanceof NumberLiteral || expression instanceof StringLiteral)) {
-            arguments.add(m_editor.getSource(expression));
-            m_editor.removeEnclosingStatement(expression);
-            continue;
-          }
-        }
-      }
-      // default source
-      arguments.add(parameter.getDefaultSource());
-    }
-    return arguments;
-  }
+	/**
+	 * @param oldArguments
+	 *          the arguments of old {@link ClassInstanceCreation} or {@link MethodInvocation} that
+	 *          was used to create component.
+	 *
+	 * @return the arguments for factory method invocation.
+	 */
+	private List<String> getFactoryArguments(List<Expression> oldArguments) throws Exception {
+		List<String> arguments = Lists.newArrayList();
+		for (ParameterDescription parameter : m_description.getParameters()) {
+			// check for "parent"
+			if (parameter.isParent()) {
+				m_hasParentArgument = true;
+				arguments.add(TemplateUtils.getExpression(m_component.getParentJava()));
+				continue;
+			}
+			// try to use source from bound property
+			{
+				GenericPropertyImpl property = getGenericProperty(parameter.getProperty());
+				if (property != null) {
+					Expression expression = ((GenericProperty) property).getExpression();
+					// argument of creation
+					if (oldArguments.contains(expression)) {
+						arguments.add(m_editor.getSource(expression));
+						continue;
+					}
+					// argument of separate method (only literal)
+					if (expression.getLocationInParent() == MethodInvocation.ARGUMENTS_PROPERTY
+							&& (expression instanceof NullLiteral
+									|| expression instanceof BooleanLiteral
+									|| expression instanceof NumberLiteral || expression instanceof StringLiteral)) {
+						arguments.add(m_editor.getSource(expression));
+						m_editor.removeEnclosingStatement(expression);
+						continue;
+					}
+				}
+			}
+			// default source
+			arguments.add(parameter.getDefaultSource());
+		}
+		return arguments;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Generic properties
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final List<GenericPropertyImpl> m_genericProperties = Lists.newArrayList();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Generic properties
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final List<GenericPropertyImpl> m_genericProperties = Lists.newArrayList();
 
-  /**
-   * Prepares list of {@link GenericPropertyImpl}'s that can be bound to the arguments of factory
-   * invocation.
-   */
-  private void prepareGenericProperties() throws Exception {
-    for (Property property : m_component.getProperties()) {
-      if (property instanceof GenericPropertyImpl) {
-        GenericPropertyImpl genericProperty = (GenericPropertyImpl) property;
-        if (genericProperty.getExpression() != null) {
-          m_genericProperties.add((GenericPropertyImpl) property);
-        }
-      }
-    }
-  }
+	/**
+	 * Prepares list of {@link GenericPropertyImpl}'s that can be bound to the arguments of factory
+	 * invocation.
+	 */
+	private void prepareGenericProperties() throws Exception {
+		for (Property property : m_component.getProperties()) {
+			if (property instanceof GenericPropertyImpl) {
+				GenericPropertyImpl genericProperty = (GenericPropertyImpl) property;
+				if (genericProperty.getExpression() != null) {
+					m_genericProperties.add((GenericPropertyImpl) property);
+				}
+			}
+		}
+	}
 
-  /**
-   * @return the {@link GenericPropertyImpl} that has {@link GenericPropertyDescription} with given
-   *         id; or <code>null</code> if not such {@link GenericPropertyImpl} found.
-   */
-  private GenericPropertyImpl getGenericProperty(String id) {
-    for (GenericPropertyImpl property : m_genericProperties) {
-      if (property.getDescription() != null && property.getDescription().getId().equals(id)) {
-        return property;
-      }
-    }
-    return null;
-  }
+	/**
+	 * @return the {@link GenericPropertyImpl} that has {@link GenericPropertyDescription} with given
+	 *         id; or <code>null</code> if not such {@link GenericPropertyImpl} found.
+	 */
+	private GenericPropertyImpl getGenericProperty(String id) {
+		for (GenericPropertyImpl property : m_genericProperties) {
+			if (property.getDescription() != null && property.getDescription().getId().equals(id)) {
+				return property;
+			}
+		}
+		return null;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/factory/FactoryCreateAction.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/factory/FactoryCreateAction.java
index d07e626a0..c297c282c 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/factory/FactoryCreateAction.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/factory/FactoryCreateAction.java
@@ -96,951 +96,951 @@
  * @coverage core.model.util
  */
 public final class FactoryCreateAction extends Action {
-  private final JavaInfo m_component;
-  private final AstEditor m_editor;
+	private final JavaInfo m_component;
+	private final AstEditor m_editor;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FactoryCreateAction(JavaInfo component) {
-    m_component = component;
-    m_editor = m_component.getEditor();
-    // configure action look
-    setImageDescriptor(DesignerPlugin.getImageDescriptor("actions/factory/factory_new.png"));
-    setText(ModelMessages.FactoryCreateAction_text);
-    // prepare collections for creation/invocations
-    ExecutionUtils.runLog(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        fillCollections();
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FactoryCreateAction(JavaInfo component) {
+		m_component = component;
+		m_editor = m_component.getEditor();
+		// configure action look
+		setImageDescriptor(DesignerPlugin.getImageDescriptor("actions/factory/factory_new.png"));
+		setText(ModelMessages.FactoryCreateAction_text);
+		// prepare collections for creation/invocations
+		ExecutionUtils.runLog(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				fillCollections();
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Creation/configuration collections
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final CreationInfo m_creationInfo = new CreationInfo();
-  private final List<InvocationInfo> m_invocations = Lists.newArrayList();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Creation/configuration collections
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final CreationInfo m_creationInfo = new CreationInfo();
+	private final List<InvocationInfo> m_invocations = Lists.newArrayList();
 
-  /**
-   * Information about single argument {@link Expression} in component creation or invocation.
-   */
-  private static final class ArgumentInfo {
-    ParameterDescription m_description;
-    Expression m_expression;
-    boolean m_hasVariables = false;
-    boolean m_parameter = false;
-    String m_source;
-    String m_parameterName;
-  }
-  /**
-   * Information about component creation or single {@link MethodInvocation} existing for component.
-   */
-  private static abstract class AbstractInvocationInfo {
-    Expression m_expression;
-    List<ArgumentInfo> m_arguments = Lists.newArrayList();
-  }
-  /**
-   * Information about component creation.
-   */
-  private static final class CreationInfo extends AbstractInvocationInfo {
-  }
-  /**
-   * Information about single {@link MethodInvocation} existing for component.
-   */
-  private static final class InvocationInfo extends AbstractInvocationInfo {
-    MethodInvocation m_invocation;
-    boolean m_canExtract = true;
-    boolean m_extract = false;
-    String m_signature;
-  }
+	/**
+	 * Information about single argument {@link Expression} in component creation or invocation.
+	 */
+	private static final class ArgumentInfo {
+		ParameterDescription m_description;
+		Expression m_expression;
+		boolean m_hasVariables = false;
+		boolean m_parameter = false;
+		String m_source;
+		String m_parameterName;
+	}
+	/**
+	 * Information about component creation or single {@link MethodInvocation} existing for component.
+	 */
+	private static abstract class AbstractInvocationInfo {
+		Expression m_expression;
+		List<ArgumentInfo> m_arguments = Lists.newArrayList();
+	}
+	/**
+	 * Information about component creation.
+	 */
+	private static final class CreationInfo extends AbstractInvocationInfo {
+	}
+	/**
+	 * Information about single {@link MethodInvocation} existing for component.
+	 */
+	private static final class InvocationInfo extends AbstractInvocationInfo {
+		MethodInvocation m_invocation;
+		boolean m_canExtract = true;
+		boolean m_extract = false;
+		String m_signature;
+	}
 
-  /**
-   * Fills creation and configuration collections.
-   */
-  private void fillCollections() {
-    // creation
-    if (m_component.getCreationSupport() instanceof ConstructorCreationSupport) {
-      ConstructorCreationSupport creationSupport =
-          (ConstructorCreationSupport) m_component.getCreationSupport();
-      ClassInstanceCreation creation = creationSupport.getCreation();
-      m_creationInfo.m_expression = creation;
-      // fill arguments
-      List<Expression> arguments = DomGenerics.arguments(creation);
-      ConstructorDescription description = creationSupport.getDescription();
-      fillArguments(m_creationInfo.m_arguments, arguments, description);
-    }
-    // invocations
-    for (ASTNode relatedNode : m_component.getRelatedNodes()) {
-      if (relatedNode.getLocationInParent() == MethodInvocation.EXPRESSION_PROPERTY) {
-        MethodInvocation invocation = (MethodInvocation) relatedNode.getParent();
-        String signature = AstNodeUtils.getMethodSignature(invocation);
-        // prepare description
-        MethodDescription description = m_component.getDescription().getMethod(signature);
-        if (description == null) {
-          continue;
-        }
-        // check, may be this method is disabled
-        if (description.hasTrueTag("noFactory")) {
-          continue;
-        }
-        // add invocation information
-        InvocationInfo invocationInfo = new InvocationInfo();
-        invocationInfo.m_expression = invocation;
-        invocationInfo.m_invocation = invocation;
-        invocationInfo.m_signature = signature;
-        m_invocations.add(invocationInfo);
-        // fill arguments
-        List<Expression> arguments = DomGenerics.arguments(invocation);
-        fillArguments(invocationInfo.m_arguments, arguments, description);
-        // check that no arguments with variables
-        for (ArgumentInfo argument : invocationInfo.m_arguments) {
-          if (argument.m_hasVariables) {
-            invocationInfo.m_canExtract = false;
-          }
-        }
-        // extract by default
-        invocationInfo.m_extract = true;
-      }
-    }
-  }
+	/**
+	 * Fills creation and configuration collections.
+	 */
+	private void fillCollections() {
+		// creation
+		if (m_component.getCreationSupport() instanceof ConstructorCreationSupport) {
+			ConstructorCreationSupport creationSupport =
+					(ConstructorCreationSupport) m_component.getCreationSupport();
+			ClassInstanceCreation creation = creationSupport.getCreation();
+			m_creationInfo.m_expression = creation;
+			// fill arguments
+			List<Expression> arguments = DomGenerics.arguments(creation);
+			ConstructorDescription description = creationSupport.getDescription();
+			fillArguments(m_creationInfo.m_arguments, arguments, description);
+		}
+		// invocations
+		for (ASTNode relatedNode : m_component.getRelatedNodes()) {
+			if (relatedNode.getLocationInParent() == MethodInvocation.EXPRESSION_PROPERTY) {
+				MethodInvocation invocation = (MethodInvocation) relatedNode.getParent();
+				String signature = AstNodeUtils.getMethodSignature(invocation);
+				// prepare description
+				MethodDescription description = m_component.getDescription().getMethod(signature);
+				if (description == null) {
+					continue;
+				}
+				// check, may be this method is disabled
+				if (description.hasTrueTag("noFactory")) {
+					continue;
+				}
+				// add invocation information
+				InvocationInfo invocationInfo = new InvocationInfo();
+				invocationInfo.m_expression = invocation;
+				invocationInfo.m_invocation = invocation;
+				invocationInfo.m_signature = signature;
+				m_invocations.add(invocationInfo);
+				// fill arguments
+				List<Expression> arguments = DomGenerics.arguments(invocation);
+				fillArguments(invocationInfo.m_arguments, arguments, description);
+				// check that no arguments with variables
+				for (ArgumentInfo argument : invocationInfo.m_arguments) {
+					if (argument.m_hasVariables) {
+						invocationInfo.m_canExtract = false;
+					}
+				}
+				// extract by default
+				invocationInfo.m_extract = true;
+			}
+		}
+	}
 
-  /**
-   * Fills collection of {@link ArgumentInfo} using collection of {@link Expression} arguments and
-   * description on invocation.
-   */
-  private void fillArguments(List<ArgumentInfo> argumentInfos,
-      List<Expression> arguments,
-      AbstractInvocationDescription description) {
-    for (int i = 0; i < arguments.size(); i++) {
-      Expression argument = arguments.get(i);
-      ParameterDescription parameter = description.getParameter(i);
-      // add argument information
-      ArgumentInfo argumentInfo = new ArgumentInfo();
-      argumentInfo.m_description = parameter;
-      argumentInfo.m_expression = argument;
-      argumentInfo.m_hasVariables = hasVariables(argument);
-      argumentInfo.m_parameter = argumentInfo.m_hasVariables;
-      argumentInfo.m_source = m_editor.getExternalSource(argument, null);
-      argumentInfo.m_parameterName = parameter.getName();
-      argumentInfos.add(argumentInfo);
-    }
-  }
+	/**
+	 * Fills collection of {@link ArgumentInfo} using collection of {@link Expression} arguments and
+	 * description on invocation.
+	 */
+	private void fillArguments(List<ArgumentInfo> argumentInfos,
+			List<Expression> arguments,
+			AbstractInvocationDescription description) {
+		for (int i = 0; i < arguments.size(); i++) {
+			Expression argument = arguments.get(i);
+			ParameterDescription parameter = description.getParameter(i);
+			// add argument information
+			ArgumentInfo argumentInfo = new ArgumentInfo();
+			argumentInfo.m_description = parameter;
+			argumentInfo.m_expression = argument;
+			argumentInfo.m_hasVariables = hasVariables(argument);
+			argumentInfo.m_parameter = argumentInfo.m_hasVariables;
+			argumentInfo.m_source = m_editor.getExternalSource(argument, null);
+			argumentInfo.m_parameterName = parameter.getName();
+			argumentInfos.add(argumentInfo);
+		}
+	}
 
-  /**
-   * @return <code>true</code> if {@link Expression} has references on some variables (or
-   *         {@link ThisExpression}), so can not be used as value.
-   */
-  private static boolean hasVariables(Expression expression) {
-    final boolean[] hasVariables = new boolean[1];
-    expression.accept(new ASTVisitor() {
-      @Override
-      public void endVisit(ThisExpression node) {
-        hasVariables[0] |= true;
-      }
+	/**
+	 * @return <code>true</code> if {@link Expression} has references on some variables (or
+	 *         {@link ThisExpression}), so can not be used as value.
+	 */
+	private static boolean hasVariables(Expression expression) {
+		final boolean[] hasVariables = new boolean[1];
+		expression.accept(new ASTVisitor() {
+			@Override
+			public void endVisit(ThisExpression node) {
+				hasVariables[0] |= true;
+			}
 
-      @Override
-      public void endVisit(SimpleName node) {
-        hasVariables[0] |= AstNodeUtils.isVariable(node);
-      }
-    });
-    return hasVariables[0];
-  }
+			@Override
+			public void endVisit(SimpleName node) {
+				hasVariables[0] |= AstNodeUtils.isVariable(node);
+			}
+		});
+		return hasVariables[0];
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Run
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void run() {
-    FactoryCreateDialog dialog = new FactoryCreateDialog();
-    if (dialog.open() == Window.OK) {
-      ExecutionUtils.runLog(new RunnableEx() {
-        @Override
-        public void run() throws Exception {
-          generate(true);
-          m_editor.commitChanges();
-        }
-      });
-      // force reparse
-      {
-        IDesignPageSite pageSite = IDesignPageSite.Helper.getSite(m_component);
-        if (pageSite != null) {
-          pageSite.reparse();
-        }
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Run
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void run() {
+		FactoryCreateDialog dialog = new FactoryCreateDialog();
+		if (dialog.open() == Window.OK) {
+			ExecutionUtils.runLog(new RunnableEx() {
+				@Override
+				public void run() throws Exception {
+					generate(true);
+					m_editor.commitChanges();
+				}
+			});
+			// force reparse
+			{
+				IDesignPageSite pageSite = IDesignPageSite.Helper.getSite(m_component);
+				if (pageSite != null) {
+					pageSite.reparse();
+				}
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Implementation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Returns first {@link ICompilationUnit} that can contains factory.
-   *
-   * @return the first {@link ICompilationUnit} with factory, or <code>null</code> if not factories
-   *         found in current package.
-   */
-  private ICompilationUnit findFactoryUnit() throws Exception {
-    IPackageFragment currentPackage = (IPackageFragment) m_editor.getModelUnit().getParent();
-    List<ICompilationUnit> factoryUnits =
-        FactoryDescriptionHelper.getFactoryUnits(m_editor, currentPackage);
-    return !factoryUnits.isEmpty() ? factoryUnits.get(0) : null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Implementation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Returns first {@link ICompilationUnit} that can contains factory.
+	 *
+	 * @return the first {@link ICompilationUnit} with factory, or <code>null</code> if not factories
+	 *         found in current package.
+	 */
+	private ICompilationUnit findFactoryUnit() throws Exception {
+		IPackageFragment currentPackage = (IPackageFragment) m_editor.getModelUnit().getParent();
+		List<ICompilationUnit> factoryUnits =
+				FactoryDescriptionHelper.getFactoryUnits(m_editor, currentPackage);
+		return !factoryUnits.isEmpty() ? factoryUnits.get(0) : null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // State
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  // basic elements
-  private IPackageFragmentRoot m_sourceFolder;
-  private IPackageFragment m_package;
-  private String m_className;
-  private String m_qualifiedClassName;
-  private String m_methodName;
-  private CategoryInfo m_paletteCategory;
-  // prepared for factory creation
-  private boolean m_canPreview;
-  private List<String> m_generate_methodComments;
-  private String m_generate_methodHeader;
-  private String m_generate_methodSignature;
-  private List<String> m_generate_methodBody;
-  private String m_generate_invocationArguments;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// State
+	//
+	////////////////////////////////////////////////////////////////////////////
+	// basic elements
+	private IPackageFragmentRoot m_sourceFolder;
+	private IPackageFragment m_package;
+	private String m_className;
+	private String m_qualifiedClassName;
+	private String m_methodName;
+	private CategoryInfo m_paletteCategory;
+	// prepared for factory creation
+	private boolean m_canPreview;
+	private List<String> m_generate_methodComments;
+	private String m_generate_methodHeader;
+	private String m_generate_methodSignature;
+	private List<String> m_generate_methodBody;
+	private String m_generate_invocationArguments;
 
-  /**
-   * @return the preview source of factory method that will be generated.
-   */
-  private String getFactoryPreviewSource() throws Exception {
-    ICompilationUnit factoryUnit =
-        m_editor.getModelUnit().getWorkingCopy(new NullProgressMonitor());
-    try {
-      String className = "__wbp_tmpUnit";
-      String source = "";
-      // add package
-      {
-        PackageDeclaration packageDeclaration = m_editor.getAstUnit().getPackage();
-        if (packageDeclaration != null) {
-          source += "package " + packageDeclaration.getName().toString() + ";\n";
-        }
-      }
-      // add empty class
-      source +=
-          StringUtils.join(new String[]{
-              "class " + className + " {",
-              "  private int ___filler___ = 0;",
-              "}"}, "\n");
-      factoryUnit.getBuffer().setContents(source);
-      // parse and generate
-      AstEditor factoryEditor = new AstEditor(factoryUnit);
-      generateFactory(factoryEditor, className);
-      // return only source of method
-      TypeDeclaration typeDeclaration =
-          AstNodeUtils.getTypeByName(factoryEditor.getAstUnit(), className);
-      String indentation = factoryEditor.getGeneration().getIndentation(1);
-      return indentation + factoryEditor.getSource(typeDeclaration.getMethods()[0]);
-    } finally {
-      factoryUnit.discardWorkingCopy();
-    }
-  }
+	/**
+	 * @return the preview source of factory method that will be generated.
+	 */
+	private String getFactoryPreviewSource() throws Exception {
+		ICompilationUnit factoryUnit =
+				m_editor.getModelUnit().getWorkingCopy(new NullProgressMonitor());
+		try {
+			String className = "__wbp_tmpUnit";
+			String source = "";
+			// add package
+			{
+				PackageDeclaration packageDeclaration = m_editor.getAstUnit().getPackage();
+				if (packageDeclaration != null) {
+					source += "package " + packageDeclaration.getName().toString() + ";\n";
+				}
+			}
+			// add empty class
+			source +=
+					StringUtils.join(new String[]{
+							"class " + className + " {",
+							"  private int ___filler___ = 0;",
+					"}"}, "\n");
+			factoryUnit.getBuffer().setContents(source);
+			// parse and generate
+			AstEditor factoryEditor = new AstEditor(factoryUnit);
+			generateFactory(factoryEditor, className);
+			// return only source of method
+			TypeDeclaration typeDeclaration =
+					AstNodeUtils.getTypeByName(factoryEditor.getAstUnit(), className);
+			String indentation = factoryEditor.getGeneration().getIndentation(1);
+			return indentation + factoryEditor.getSource(typeDeclaration.getMethods()[0]);
+		} finally {
+			factoryUnit.discardWorkingCopy();
+		}
+	}
 
-  /**
-   * Generates new factory method, replaces component creation and remove extracted invocations.
-   *
-   * @param replaceWithFactory
-   *          is <code>true</code> if existing component creation should be replace with factory
-   *          creation.
-   */
-  private void generate(boolean replaceWithFactory) throws Exception {
-    // prepare factory unit
-    ICompilationUnit factoryUnit;
-    {
-      String factoryUnitName = m_className + ".java";
-      factoryUnit = m_package.getCompilationUnit(factoryUnitName);
-      if (!factoryUnit.exists()) {
-        String eol = m_editor.getGeneration().getEndOfLine();
-        String factoryUnitSource =
-            StringUtils.join(new String[]{
-                "package " + m_package.getElementName() + ";",
-                "",
-                "public final class " + m_className + " {",
-                "}"}, eol);
-        m_package.createCompilationUnit(factoryUnitName, factoryUnitSource, false, null);
-      }
-    }
-    boolean sameCompilationUnit = m_editor.getModelUnit().equals(factoryUnit);
-    // prepare AST editor
-    AstEditor factoryEditor;
-    if (sameCompilationUnit) {
-      factoryEditor = m_editor;
-    } else {
-      factoryEditor = new AstEditor(factoryUnit);
-    }
-    // generate factory
-    generateFactory(factoryEditor, m_className);
-    // save/compile factory
-    {
-      factoryUnit.save(null, true);
-      factoryUnit.getBuffer().save(null, true);
-      ProjectUtils.waitForAutoBuild();
-    }
-    // add factory on palette
-    if (m_paletteCategory != null) {
-      String id = "custom_" + System.currentTimeMillis();
-      String name = m_generate_methodSignature;
-      String description =
-          "Class: " + m_qualifiedClassName + "\nMethod: " + m_generate_methodSignature;
-      IPaletteSite.Helper.getSite(m_component).addCommand(
-          new FactoryAddCommand(id,
-              name,
-              description,
-              true,
-              m_qualifiedClassName,
-              m_generate_methodSignature,
-              true,
-              m_paletteCategory));
-    }
-    // replace creation, if enabled
-    if (replaceWithFactory) {
-      // replace creation with factory invocation
-      {
-        String creationSource = "";
-        {
-          creationSource += (sameCompilationUnit ? "" : m_qualifiedClassName + ".") + m_methodName;
-          creationSource += "(";
-          creationSource += m_generate_invocationArguments;
-          creationSource += ")";
-        }
-        m_editor.replaceExpression(m_creationInfo.m_expression, creationSource);
-      }
-      // remove extracted invocations
-      for (InvocationInfo invocation : m_invocations) {
-        if (invocation.m_extract) {
-          m_editor.removeEnclosingStatement(invocation.m_invocation);
-        }
-      }
-    }
-  }
+	/**
+	 * Generates new factory method, replaces component creation and remove extracted invocations.
+	 *
+	 * @param replaceWithFactory
+	 *          is <code>true</code> if existing component creation should be replace with factory
+	 *          creation.
+	 */
+	private void generate(boolean replaceWithFactory) throws Exception {
+		// prepare factory unit
+		ICompilationUnit factoryUnit;
+		{
+			String factoryUnitName = m_className + ".java";
+			factoryUnit = m_package.getCompilationUnit(factoryUnitName);
+			if (!factoryUnit.exists()) {
+				String eol = m_editor.getGeneration().getEndOfLine();
+				String factoryUnitSource =
+						StringUtils.join(new String[]{
+								"package " + m_package.getElementName() + ";",
+								"",
+								"public final class " + m_className + " {",
+						"}"}, eol);
+				m_package.createCompilationUnit(factoryUnitName, factoryUnitSource, false, null);
+			}
+		}
+		boolean sameCompilationUnit = m_editor.getModelUnit().equals(factoryUnit);
+		// prepare AST editor
+		AstEditor factoryEditor;
+		if (sameCompilationUnit) {
+			factoryEditor = m_editor;
+		} else {
+			factoryEditor = new AstEditor(factoryUnit);
+		}
+		// generate factory
+		generateFactory(factoryEditor, m_className);
+		// save/compile factory
+		{
+			factoryUnit.save(null, true);
+			factoryUnit.getBuffer().save(null, true);
+			ProjectUtils.waitForAutoBuild();
+		}
+		// add factory on palette
+		if (m_paletteCategory != null) {
+			String id = "custom_" + System.currentTimeMillis();
+			String name = m_generate_methodSignature;
+			String description =
+					"Class: " + m_qualifiedClassName + "\nMethod: " + m_generate_methodSignature;
+			IPaletteSite.Helper.getSite(m_component).addCommand(
+					new FactoryAddCommand(id,
+							name,
+							description,
+							true,
+							m_qualifiedClassName,
+							m_generate_methodSignature,
+							true,
+							m_paletteCategory));
+		}
+		// replace creation, if enabled
+		if (replaceWithFactory) {
+			// replace creation with factory invocation
+			{
+				String creationSource = "";
+				{
+					creationSource += (sameCompilationUnit ? "" : m_qualifiedClassName + ".") + m_methodName;
+					creationSource += "(";
+					creationSource += m_generate_invocationArguments;
+					creationSource += ")";
+				}
+				m_editor.replaceExpression(m_creationInfo.m_expression, creationSource);
+			}
+			// remove extracted invocations
+			for (InvocationInfo invocation : m_invocations) {
+				if (invocation.m_extract) {
+					m_editor.removeEnclosingStatement(invocation.m_invocation);
+				}
+			}
+		}
+	}
 
-  /**
-   * Generates factory method in given {@link AstEditor} and returns arguments for using this method
-   * for creation.
-   *
-   * @param factoryEditor
-   *          the {@link AstEditor} to generate factory method.
-   * @return the arguments for component creation using factory method.
-   */
-  private void generateFactory(AstEditor factoryEditor, String className) throws Exception {
-    // add factory method
-    {
-      TypeDeclaration typeDeclaration =
-          AstNodeUtils.getTypeByName(factoryEditor.getAstUnit(), className);
-      BodyDeclarationTarget target = new BodyDeclarationTarget(typeDeclaration, false);
-      MethodDeclaration methodDeclaration =
-          factoryEditor.addMethodDeclaration(m_generate_methodHeader, m_generate_methodBody, target);
-      factoryEditor.setJavadoc(
-          methodDeclaration,
-          Iterables.toArray(m_generate_methodComments, String.class));
-    }
-    // commit changes to factory unit
-    factoryEditor.commitChanges();
-  }
+	/**
+	 * Generates factory method in given {@link AstEditor} and returns arguments for using this method
+	 * for creation.
+	 *
+	 * @param factoryEditor
+	 *          the {@link AstEditor} to generate factory method.
+	 * @return the arguments for component creation using factory method.
+	 */
+	private void generateFactory(AstEditor factoryEditor, String className) throws Exception {
+		// add factory method
+		{
+			TypeDeclaration typeDeclaration =
+					AstNodeUtils.getTypeByName(factoryEditor.getAstUnit(), className);
+			BodyDeclarationTarget target = new BodyDeclarationTarget(typeDeclaration, false);
+			MethodDeclaration methodDeclaration =
+					factoryEditor.addMethodDeclaration(m_generate_methodHeader, m_generate_methodBody, target);
+			factoryEditor.setJavadoc(
+					methodDeclaration,
+					Iterables.toArray(m_generate_methodComments, String.class));
+		}
+		// commit changes to factory unit
+		factoryEditor.commitChanges();
+	}
 
-  /**
-   * Prepares information for generating factory method and new creation, using existing
-   * configuration of {@link #m_creationInfo} and {@link #m_invocations}.
-   */
-  private void prepareFactoryMethod() {
-    // prepare identifiers
-    final Set<String> usedIdentifiers = Sets.newTreeSet();
-    String componentTypeName = m_component.getDescription().getComponentClass().getName();
-    String componentName =
-        generateUniqueIdentifier(usedIdentifiers, NamesManager.getName(m_component));
-    // add method
-    m_qualifiedClassName = m_package.getElementName() + "." + m_className;
-    m_generate_methodSignature = m_methodName + "(";
-    m_generate_invocationArguments = "";
-    {
-      // prepare list of JavaDoc comments
-      m_generate_methodComments = Lists.newArrayList();
-      m_generate_methodComments.add("@wbp.factory");
-      // prepare method header
-      {
-        String header = "";
-        header +=
-            "public static " + m_component.getDescription().getComponentClass().getName() + " ";
-        header += m_methodName + "(";
-        boolean firstParameter = true;
-        // prepare all parameters
-        List<ArgumentInfo> parameters;
-        {
-          parameters = Lists.newArrayList();
-          for (ArgumentInfo argument : m_creationInfo.m_arguments) {
-            if (argument.m_parameter) {
-              parameters.add(argument);
-            }
-          }
-          for (InvocationInfo invocation : m_invocations) {
-            if (invocation.m_extract) {
-              for (ArgumentInfo argument : invocation.m_arguments) {
-                if (argument.m_parameter) {
-                  parameters.add(argument);
-                }
-              }
-            }
-          }
-        }
-        // generate parameters (for declaration) and arguments (for invocation)
-        for (ArgumentInfo argument : parameters) {
-          // prepare parameter name
-          if (argument.m_description.isParent()) {
-            argument.m_parameterName = "parent";
-          } else {
-            argument.m_parameterName =
-                generateUniqueIdentifier(usedIdentifiers, argument.m_description.getName());
-          }
-          // add "comma"
-          if (!firstParameter) {
-            header += ", ";
-            m_generate_methodSignature += ",";
-            m_generate_invocationArguments += ", ";
-          }
-          firstParameter = false;
-          // add parameter to header
-          header += argument.m_description.getType().getName();
-          header += " ";
-          header += argument.m_parameterName;
-          // add parameter description in JavaDoc
-          if (!argument.m_description.isParent()) {
-            String descriptionSource = argument.m_source;
-            if (descriptionSource.equals("getClass()")) {
-              descriptionSource = "{wbp_class}";
-            }
-            m_generate_methodComments.add("@wbp.factory.parameter.source "
-                + argument.m_parameterName
-                + " "
-                + descriptionSource);
-          }
-          // add type to signature
-          m_generate_methodSignature += argument.m_description.getType().getName();
-          // add argument to invocation
-          m_generate_invocationArguments += argument.m_source;
-        }
-        header += ")";
-        m_generate_methodSignature += ")";
-        m_generate_methodHeader = header;
-      }
-      // prepare creation source
-      String creationSource = getFactorySource(m_creationInfo);
-      // prepare body lines
-      {
-        List<String> bodyLines = Lists.newArrayList();
-        // create component
-        bodyLines.add(componentTypeName + " " + componentName + " = " + creationSource + ";");
-        // invocations
-        for (InvocationInfo invocation : m_invocations) {
-          if (invocation.m_extract) {
-            bodyLines.add(componentName + getFactorySource(invocation) + ";");
-          }
-        }
-        // return component
-        bodyLines.add("return " + componentName + ";");
-        m_generate_methodBody = bodyLines;
-      }
-    }
-  }
+	/**
+	 * Prepares information for generating factory method and new creation, using existing
+	 * configuration of {@link #m_creationInfo} and {@link #m_invocations}.
+	 */
+	private void prepareFactoryMethod() {
+		// prepare identifiers
+		final Set<String> usedIdentifiers = Sets.newTreeSet();
+		String componentTypeName = m_component.getDescription().getComponentClass().getName();
+		String componentName =
+				generateUniqueIdentifier(usedIdentifiers, NamesManager.getName(m_component));
+		// add method
+		m_qualifiedClassName = m_package.getElementName() + "." + m_className;
+		m_generate_methodSignature = m_methodName + "(";
+		m_generate_invocationArguments = "";
+		{
+			// prepare list of JavaDoc comments
+			m_generate_methodComments = Lists.newArrayList();
+			m_generate_methodComments.add("@wbp.factory");
+			// prepare method header
+			{
+				String header = "";
+				header +=
+						"public static " + m_component.getDescription().getComponentClass().getName() + " ";
+				header += m_methodName + "(";
+				boolean firstParameter = true;
+				// prepare all parameters
+				List<ArgumentInfo> parameters;
+				{
+					parameters = Lists.newArrayList();
+					for (ArgumentInfo argument : m_creationInfo.m_arguments) {
+						if (argument.m_parameter) {
+							parameters.add(argument);
+						}
+					}
+					for (InvocationInfo invocation : m_invocations) {
+						if (invocation.m_extract) {
+							for (ArgumentInfo argument : invocation.m_arguments) {
+								if (argument.m_parameter) {
+									parameters.add(argument);
+								}
+							}
+						}
+					}
+				}
+				// generate parameters (for declaration) and arguments (for invocation)
+				for (ArgumentInfo argument : parameters) {
+					// prepare parameter name
+					if (argument.m_description.isParent()) {
+						argument.m_parameterName = "parent";
+					} else {
+						argument.m_parameterName =
+								generateUniqueIdentifier(usedIdentifiers, argument.m_description.getName());
+					}
+					// add "comma"
+					if (!firstParameter) {
+						header += ", ";
+						m_generate_methodSignature += ",";
+						m_generate_invocationArguments += ", ";
+					}
+					firstParameter = false;
+					// add parameter to header
+					header += argument.m_description.getType().getName();
+					header += " ";
+					header += argument.m_parameterName;
+					// add parameter description in JavaDoc
+					if (!argument.m_description.isParent()) {
+						String descriptionSource = argument.m_source;
+						if (descriptionSource.equals("getClass()")) {
+							descriptionSource = "{wbp_class}";
+						}
+						m_generate_methodComments.add("@wbp.factory.parameter.source "
+								+ argument.m_parameterName
+								+ " "
+								+ descriptionSource);
+					}
+					// add type to signature
+					m_generate_methodSignature += argument.m_description.getType().getName();
+					// add argument to invocation
+					m_generate_invocationArguments += argument.m_source;
+				}
+				header += ")";
+				m_generate_methodSignature += ")";
+				m_generate_methodHeader = header;
+			}
+			// prepare creation source
+			String creationSource = getFactorySource(m_creationInfo);
+			// prepare body lines
+			{
+				List<String> bodyLines = Lists.newArrayList();
+				// create component
+				bodyLines.add(componentTypeName + " " + componentName + " = " + creationSource + ";");
+				// invocations
+				for (InvocationInfo invocation : m_invocations) {
+					if (invocation.m_extract) {
+						bodyLines.add(componentName + getFactorySource(invocation) + ";");
+					}
+				}
+				// return component
+				bodyLines.add("return " + componentName + ";");
+				m_generate_methodBody = bodyLines;
+			}
+		}
+	}
 
-  /**
-   * Generates new identifier based on given name, and not present in used identifiers. After
-   * generation adds new identifier into {@link Set} of used identifiers.
-   *
-   * @return the new generated identifier.
-   */
-  private static String generateUniqueIdentifier(final Set<String> usedIdentifiers, String baseName) {
-    String newIdentifier = CodeUtils.generateUniqueName(baseName, new Predicate<String>() {
-      @Override
-      public boolean apply(String t) {
-        return !usedIdentifiers.contains(t);
-      }
-    });
-    usedIdentifiers.add(newIdentifier);
-    return newIdentifier;
-  }
+	/**
+	 * Generates new identifier based on given name, and not present in used identifiers. After
+	 * generation adds new identifier into {@link Set} of used identifiers.
+	 *
+	 * @return the new generated identifier.
+	 */
+	private static String generateUniqueIdentifier(final Set<String> usedIdentifiers, String baseName) {
+		String newIdentifier = CodeUtils.generateUniqueName(baseName, new Predicate<String>() {
+			@Override
+			public boolean apply(String t) {
+				return !usedIdentifiers.contains(t);
+			}
+		});
+		usedIdentifiers.add(newIdentifier);
+		return newIdentifier;
+	}
 
-  /**
-   * @return the source ready to use in factory, with arguments replaced with parameters, where
-   *         needed.
-   */
-  private String getFactorySource(final AbstractInvocationInfo invocation) {
-    return m_editor.getExternalSource(invocation.m_expression, new Function<ASTNode, String>() {
-      @Override
-      public String apply(ASTNode from) {
-        // replace arguments with parameters
-        for (ArgumentInfo argument : invocation.m_arguments) {
-          if (argument.m_parameter && argument.m_expression == from) {
-            return argument.m_parameterName;
-          }
-        }
-        // replace getClass() with ClassLiteral source
-        if (from instanceof MethodInvocation) {
-          MethodInvocation invocationNode = (MethodInvocation) from;
-          if (invocationNode.getExpression() == null
-              && invocationNode.getName().getIdentifier().equals("getClass")
-              && invocationNode.arguments().isEmpty()) {
-            TypeDeclaration enclosingType = AstNodeUtils.getEnclosingType(invocationNode);
-            return AstNodeUtils.getFullyQualifiedName(enclosingType, false) + ".class";
-          }
-        }
-        // replace "expression" of method invocation with empty string
-        if (invocation instanceof InvocationInfo) {
-          InvocationInfo methodInvocation = (InvocationInfo) invocation;
-          if (from == methodInvocation.m_invocation.getExpression()) {
-            return "";
-          }
-        }
-        // use usual expression source
-        return null;
-      }
-    });
-  }
+	/**
+	 * @return the source ready to use in factory, with arguments replaced with parameters, where
+	 *         needed.
+	 */
+	private String getFactorySource(final AbstractInvocationInfo invocation) {
+		return m_editor.getExternalSource(invocation.m_expression, new Function<ASTNode, String>() {
+			@Override
+			public String apply(ASTNode from) {
+				// replace arguments with parameters
+				for (ArgumentInfo argument : invocation.m_arguments) {
+					if (argument.m_parameter && argument.m_expression == from) {
+						return argument.m_parameterName;
+					}
+				}
+				// replace getClass() with ClassLiteral source
+				if (from instanceof MethodInvocation) {
+					MethodInvocation invocationNode = (MethodInvocation) from;
+					if (invocationNode.getExpression() == null
+							&& invocationNode.getName().getIdentifier().equals("getClass")
+							&& invocationNode.arguments().isEmpty()) {
+						TypeDeclaration enclosingType = AstNodeUtils.getEnclosingType(invocationNode);
+						return AstNodeUtils.getFullyQualifiedName(enclosingType, false) + ".class";
+					}
+				}
+				// replace "expression" of method invocation with empty string
+				if (invocation instanceof InvocationInfo) {
+					InvocationInfo methodInvocation = (InvocationInfo) invocation;
+					if (from == methodInvocation.m_invocation.getExpression()) {
+						return "";
+					}
+				}
+				// use usual expression source
+				return null;
+			}
+		});
+	}
 
-  /**
-   * Validates the currently entered source folder, package and factory class name.
-   *
-   * @return the error message, or <code>null</code> if values are valid.
-   */
-  private String validate() throws Exception {
-    m_canPreview = false;
-    // validate source folder
-    {
-      if (m_sourceFolder == null || !m_sourceFolder.exists()) {
-        return ModelMessages.FactoryCreateAction_validateInvalidSourceFolder;
-      }
-    }
-    // validate package
-    {
-      if (m_package == null || !m_package.exists()) {
-        return ModelMessages.FactoryCreateAction_validateInvalidPackage;
-      } else if (m_package.getElementName().length() == 0) {
-        return ModelMessages.FactoryCreateAction_validateDefaultPackage;
-      }
-    }
-    // now we know, that basic elements are valid, so we can prepare method
-    m_canPreview = true;
-    prepareFactoryMethod();
-    // validate class name
-    {
-      IStatus status = JavaConventions.validateJavaTypeName(m_className);
-      if (m_className.length() == 0) {
-        return ModelMessages.FactoryCreateAction_validateEmptyClass;
-      } else if (m_className.indexOf('.') != -1) {
-        return ModelMessages.FactoryCreateAction_validateDotInClass;
-      } else if (status.getSeverity() != IStatus.OK) {
-        return status.getMessage();
-      }
-    }
-    // validate method name
-    {
-      IStatus status = JavaConventions.validateMethodName(m_methodName);
-      if (m_methodName.length() == 0) {
-        return ModelMessages.FactoryCreateAction_validateEmptyMethod;
-      } else if (status.getSeverity() != IStatus.OK) {
-        return status.getMessage();
-      }
-    }
-    // check that new factory method is unique
-    {
-      IType factoryType = m_editor.getJavaProject().findType(m_qualifiedClassName);
-      if (factoryType != null
-          && CodeUtils.findMethodSingleType(factoryType, m_generate_methodSignature) != null) {
-        return "Method " + m_generate_methodSignature + " already exists.";
-      }
-    }
-    // OK
-    return null;
-  }
+	/**
+	 * Validates the currently entered source folder, package and factory class name.
+	 *
+	 * @return the error message, or <code>null</code> if values are valid.
+	 */
+	private String validate() throws Exception {
+		m_canPreview = false;
+		// validate source folder
+		{
+			if (m_sourceFolder == null || !m_sourceFolder.exists()) {
+				return ModelMessages.FactoryCreateAction_validateInvalidSourceFolder;
+			}
+		}
+		// validate package
+		{
+			if (m_package == null || !m_package.exists()) {
+				return ModelMessages.FactoryCreateAction_validateInvalidPackage;
+			} else if (m_package.getElementName().length() == 0) {
+				return ModelMessages.FactoryCreateAction_validateDefaultPackage;
+			}
+		}
+		// now we know, that basic elements are valid, so we can prepare method
+		m_canPreview = true;
+		prepareFactoryMethod();
+		// validate class name
+		{
+			IStatus status = JavaConventions.validateJavaTypeName(m_className);
+			if (m_className.length() == 0) {
+				return ModelMessages.FactoryCreateAction_validateEmptyClass;
+			} else if (m_className.indexOf('.') != -1) {
+				return ModelMessages.FactoryCreateAction_validateDotInClass;
+			} else if (status.getSeverity() != IStatus.OK) {
+				return status.getMessage();
+			}
+		}
+		// validate method name
+		{
+			IStatus status = JavaConventions.validateMethodName(m_methodName);
+			if (m_methodName.length() == 0) {
+				return ModelMessages.FactoryCreateAction_validateEmptyMethod;
+			} else if (status.getSeverity() != IStatus.OK) {
+				return status.getMessage();
+			}
+		}
+		// check that new factory method is unique
+		{
+			IType factoryType = m_editor.getJavaProject().findType(m_qualifiedClassName);
+			if (factoryType != null
+					&& CodeUtils.findMethodSingleType(factoryType, m_generate_methodSignature) != null) {
+				return "Method " + m_generate_methodSignature + " already exists.";
+			}
+		}
+		// OK
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Dialog
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final class FactoryCreateDialog extends AbstractValidationTitleAreaDialog {
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public FactoryCreateDialog() {
-      super(DesignerPlugin.getShell(),
-          DesignerPlugin.getDefault(),
-          ModelMessages.FactoryCreateAction_dialogShellTitle,
-          ModelMessages.FactoryCreateAction_dialogTitle,
-          DesignerPlugin.getImage("actions/factory/factory_banner.png"),
-          ModelMessages.FactoryCreateAction_dialogMessage);
-      setShellStyle(SWT.DIALOG_TRIM | SWT.RESIZE | SWT.APPLICATION_MODAL);
-    }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Dialog
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final class FactoryCreateDialog extends AbstractValidationTitleAreaDialog {
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public FactoryCreateDialog() {
+			super(DesignerPlugin.getShell(),
+					DesignerPlugin.getDefault(),
+					ModelMessages.FactoryCreateAction_dialogShellTitle,
+					ModelMessages.FactoryCreateAction_dialogTitle,
+					DesignerPlugin.getImage("actions/factory/factory_banner.png"),
+					ModelMessages.FactoryCreateAction_dialogMessage);
+			setShellStyle(SWT.DIALOG_TRIM | SWT.RESIZE | SWT.APPLICATION_MODAL);
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // GUI
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    private List<CategoryInfo> m_paletteCategories;
-    private PackageRootAndPackageSelectionDialogField m_packageField;
-    private StringButtonDialogField m_classField;
-    private StringDialogField m_methodField;
-    private ComboDialogField m_categoryField;
-    private SourceViewer m_previewViewer;
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// GUI
+		//
+		////////////////////////////////////////////////////////////////////////////
+		private List<CategoryInfo> m_paletteCategories;
+		private PackageRootAndPackageSelectionDialogField m_packageField;
+		private StringButtonDialogField m_classField;
+		private StringDialogField m_methodField;
+		private ComboDialogField m_categoryField;
+		private SourceViewer m_previewViewer;
 
-    @Override
-    protected void createControls(Composite container) {
-      m_fieldsContainer = container;
-      GridLayoutFactory.create(container).columns(3);
-      // parameters
-      createParametersComposite(container);
-      // separator
-      {
-        Label separator = new Label(container, SWT.SEPARATOR | SWT.HORIZONTAL);
-        GridDataFactory.create(separator).spanH(3).hintVC(1).grabH().fillH();
-      }
-      // arguments/invocations and preview
-      {
-        SashForm sashForm = new SashForm(container, SWT.VERTICAL);
-        GridDataFactory.create(sashForm).spanH(3).grab().fill();
-        // creation/invocations tree
-        createArgumentsInvocationsComposite(sashForm);
-        // preview
-        createPreviewComposite(sashForm);
-        // set weight, after creating children
-        sashForm.setWeights(new int[]{1, 1});
-      }
-    }
+		@Override
+		protected void createControls(Composite container) {
+			m_fieldsContainer = container;
+			GridLayoutFactory.create(container).columns(3);
+			// parameters
+			createParametersComposite(container);
+			// separator
+			{
+				Label separator = new Label(container, SWT.SEPARATOR | SWT.HORIZONTAL);
+				GridDataFactory.create(separator).spanH(3).hintVC(1).grabH().fillH();
+			}
+			// arguments/invocations and preview
+			{
+				SashForm sashForm = new SashForm(container, SWT.VERTICAL);
+				GridDataFactory.create(sashForm).spanH(3).grab().fill();
+				// creation/invocations tree
+				createArgumentsInvocationsComposite(sashForm);
+				// preview
+				createPreviewComposite(sashForm);
+				// set weight, after creating children
+				sashForm.setWeights(new int[]{1, 1});
+			}
+		}
 
-    /**
-     * Creates {@link Composite} for factory creation parameters - package, class, etc.
-     */
-    private void createParametersComposite(Composite parent) {
-      // package
-      {
-        m_packageField =
-            new PackageRootAndPackageSelectionDialogField(60,
-                ModelMessages.FactoryCreateAction_dialogPackageSourceFolder,
-                ModelMessages.FactoryCreateAction_dialogPackageSourceFolderBrowse,
-                ModelMessages.FactoryCreateAction_dialogPackagePackage,
-                ModelMessages.FactoryCreateAction_dialogPackagePackageBrowse);
-        m_packageField.setDialogFieldListener(m_validateListener);
-        m_packageField.doFillIntoGrid(m_fieldsContainer, 3);
-        // use current package
-        m_packageField.setPackage((IPackageFragment) m_editor.getModelUnit().getParent());
-      }
-      // class name
-      {
-        m_classField = new StringButtonDialogField(new IStringButtonAdapter() {
-          @Override
-          public void changeControlPressed(DialogField field) {
-            ExecutionUtils.runLog(new RunnableEx() {
-              @Override
-              public void run() throws Exception {
-                IType type = JdtUiUtils.selectClassType(getShell(), m_editor.getJavaProject());
-                if (type != null) {
-                  ICompilationUnit compilationUnit = type.getCompilationUnit();
-                  m_classField.setTextWithoutUpdate(type.getElementName());
-                  m_packageField.setPackage((IPackageFragment) compilationUnit.getParent());
-                }
-              }
-            });
-          }
-        });
-        m_classField.setButtonLabel(ModelMessages.FactoryCreateAction_classBrowse);
-        doCreateField(m_classField, ModelMessages.FactoryCreateAction_classLabel);
-        // try to use existing factory
-        ExecutionUtils.runLog(new RunnableEx() {
-          @Override
-          public void run() throws Exception {
-            ICompilationUnit factoryUnit = findFactoryUnit();
-            if (factoryUnit != null) {
-              m_classField.setText(factoryUnit.findPrimaryType().getElementName());
-            } else {
-              m_classField.setFocus();
-            }
-          }
-        });
-      }
-      // method name
-      {
-        m_methodField = new StringDialogField();
-        doCreateField(m_methodField, ModelMessages.FactoryCreateAction_methodLabel);
-        // use "createComponent" as initial name
-        m_methodField.setText("create"
-            + CodeUtils.getShortClass(m_component.getDescription().getComponentClass().getName()));
-      }
-      // palette category
-      {
-        // create Combo
-        {
-          m_categoryField = new ComboDialogField(SWT.READ_ONLY);
-          m_categoryField.setLabelText(ModelMessages.FactoryCreateAction_paletteCategoryLabel);
-          m_categoryField.setDialogFieldListener(new IDialogFieldListener() {
-            @Override
-            public void dialogFieldChanged(DialogField field) {
-              if (m_paletteCategories != null) {
-                int selectionIndex = m_categoryField.getSelectionIndex();
-                if (selectionIndex >= 1) {
-                  m_paletteCategory = m_paletteCategories.get(selectionIndex - 1);
-                } else {
-                  m_paletteCategory = null;
-                }
-              }
-            }
-          });
-          DialogFieldUtils.fillControls(m_fieldsContainer, m_categoryField, 2, 40);
-          fillPaletteCategories();
-          m_categoryField.selectItem(0);
-        }
-        // "Open manager..." button
-        {
-          Button managerButton = new Button(m_fieldsContainer, SWT.NONE);
-          GridDataFactory.create(managerButton).fillH();
-          managerButton.setText(ModelMessages.FactoryCreateAction_paletteManagerButton);
-          managerButton.addListener(SWT.Selection, new Listener() {
-            @Override
-            public void handleEvent(Event event) {
-              IPaletteSite.Helper.getSite(m_component).editPalette();
-              fillPaletteCategories();
-            }
-          });
-        }
-      }
-    }
+		/**
+		 * Creates {@link Composite} for factory creation parameters - package, class, etc.
+		 */
+		private void createParametersComposite(Composite parent) {
+			// package
+			{
+				m_packageField =
+						new PackageRootAndPackageSelectionDialogField(60,
+								ModelMessages.FactoryCreateAction_dialogPackageSourceFolder,
+								ModelMessages.FactoryCreateAction_dialogPackageSourceFolderBrowse,
+								ModelMessages.FactoryCreateAction_dialogPackagePackage,
+								ModelMessages.FactoryCreateAction_dialogPackagePackageBrowse);
+				m_packageField.setDialogFieldListener(m_validateListener);
+				m_packageField.doFillIntoGrid(m_fieldsContainer, 3);
+				// use current package
+				m_packageField.setPackage((IPackageFragment) m_editor.getModelUnit().getParent());
+			}
+			// class name
+			{
+				m_classField = new StringButtonDialogField(new IStringButtonAdapter() {
+					@Override
+					public void changeControlPressed(DialogField field) {
+						ExecutionUtils.runLog(new RunnableEx() {
+							@Override
+							public void run() throws Exception {
+								IType type = JdtUiUtils.selectClassType(getShell(), m_editor.getJavaProject());
+								if (type != null) {
+									ICompilationUnit compilationUnit = type.getCompilationUnit();
+									m_classField.setTextWithoutUpdate(type.getElementName());
+									m_packageField.setPackage((IPackageFragment) compilationUnit.getParent());
+								}
+							}
+						});
+					}
+				});
+				m_classField.setButtonLabel(ModelMessages.FactoryCreateAction_classBrowse);
+				doCreateField(m_classField, ModelMessages.FactoryCreateAction_classLabel);
+				// try to use existing factory
+				ExecutionUtils.runLog(new RunnableEx() {
+					@Override
+					public void run() throws Exception {
+						ICompilationUnit factoryUnit = findFactoryUnit();
+						if (factoryUnit != null) {
+							m_classField.setText(factoryUnit.findPrimaryType().getElementName());
+						} else {
+							m_classField.setFocus();
+						}
+					}
+				});
+			}
+			// method name
+			{
+				m_methodField = new StringDialogField();
+				doCreateField(m_methodField, ModelMessages.FactoryCreateAction_methodLabel);
+				// use "createComponent" as initial name
+				m_methodField.setText("create"
+						+ CodeUtils.getShortClass(m_component.getDescription().getComponentClass().getName()));
+			}
+			// palette category
+			{
+				// create Combo
+				{
+					m_categoryField = new ComboDialogField(SWT.READ_ONLY);
+					m_categoryField.setLabelText(ModelMessages.FactoryCreateAction_paletteCategoryLabel);
+					m_categoryField.setDialogFieldListener(new IDialogFieldListener() {
+						@Override
+						public void dialogFieldChanged(DialogField field) {
+							if (m_paletteCategories != null) {
+								int selectionIndex = m_categoryField.getSelectionIndex();
+								if (selectionIndex >= 1) {
+									m_paletteCategory = m_paletteCategories.get(selectionIndex - 1);
+								} else {
+									m_paletteCategory = null;
+								}
+							}
+						}
+					});
+					DialogFieldUtils.fillControls(m_fieldsContainer, m_categoryField, 2, 40);
+					fillPaletteCategories();
+					m_categoryField.selectItem(0);
+				}
+				// "Open manager..." button
+				{
+					Button managerButton = new Button(m_fieldsContainer, SWT.NONE);
+					GridDataFactory.create(managerButton).fillH();
+					managerButton.setText(ModelMessages.FactoryCreateAction_paletteManagerButton);
+					managerButton.addListener(SWT.Selection, new Listener() {
+						@Override
+						public void handleEvent(Event event) {
+							IPaletteSite.Helper.getSite(m_component).editPalette();
+							fillPaletteCategories();
+						}
+					});
+				}
+			}
+		}
 
-    /**
-     * Creates {@link Composite} for selection of arguments/invocations.
-     */
-    private void createArgumentsInvocationsComposite(Composite parent) {
-      Composite composite = new Composite(parent, SWT.NONE);
-      GridLayoutFactory.create(composite).noMargins();
-      new Label(composite, SWT.NONE).setText(ModelMessages.FactoryCreateAction_dialogArgumentsHint);
-      {
-        Tree tree = new Tree(composite, SWT.BORDER | SWT.CHECK);
-        GridDataFactory.create(tree).hintC(150, 12).grab().fill();
-        // listeners
-        tree.addListener(SWT.Selection, new Listener() {
-          @Override
-          public void handleEvent(Event event) {
-            if (event.detail == SWT.CHECK) {
-              TreeItem item = (TreeItem) event.item;
-              // don't change check state for grayed (special) items
-              if (item.getGrayed()) {
-                item.setChecked(!item.getChecked());
-                return;
-              }
-              // handle check state for model
-              if (item.getData() instanceof InvocationInfo) {
-                InvocationInfo invocation = (InvocationInfo) item.getData();
-                invocation.m_extract = item.getChecked();
-              } else if (item.getData() instanceof ArgumentInfo) {
-                ArgumentInfo argument = (ArgumentInfo) item.getData();
-                if (argument.m_hasVariables) {
-                  // arguments with variables should be parameters
-                  item.setChecked(true);
-                  return;
-                } else {
-                  argument.m_parameter = item.getChecked();
-                }
-              }
-              // validate, update preview
-              validateAll();
-            }
-          }
-        });
-        // creation
-        {
-          TreeItem creationItem = new TreeItem(tree, SWT.NONE);
-          creationItem.setImage(DesignerPlugin.getImage("actions/factory/folder.png"));
-          creationItem.setText(ModelMessages.FactoryCreateAction_dialogArgumentsCreation);
-          creationItem.setGrayed(true);
-          creationItem.setChecked(true);
-          // arguments
-          for (ArgumentInfo argument : m_creationInfo.m_arguments) {
-            TreeItem item = new TreeItem(creationItem, SWT.NONE);
-            item.setData(argument);
-            item.setImage(DesignerPlugin.getImage("actions/factory/argument_can_parameter.gif"));
-            item.setText(argument.m_parameterName + " = " + argument.m_source);
-            if (argument.m_hasVariables) {
-              item.setImage(DesignerPlugin.getImage("actions/factory/argument_must_parameter.gif"));
-              item.setChecked(true);
-            }
-          }
-        }
-        // invocations
-        {
-          TreeItem invocationsItem = new TreeItem(tree, SWT.NONE);
-          invocationsItem.setText(ModelMessages.FactoryCreateAction_dialogArgumentsInvocations);
-          invocationsItem.setImage(DesignerPlugin.getImage("actions/factory/folder.png"));
-          invocationsItem.setGrayed(true);
-          invocationsItem.setChecked(true);
-          // for each invocation
-          for (InvocationInfo invocation : m_invocations) {
-            // skip, if can not be extracted
-            if (!invocation.m_canExtract) {
-              continue;
-            }
-            // item for invocation
-            TreeItem invocationItem = new TreeItem(invocationsItem, SWT.NONE);
-            invocationItem.setData(invocation);
-            invocationItem.setImage(DesignerPlugin.getImage("actions/factory/invocation.gif"));
-            invocationItem.setText(invocation.m_signature);
-            invocationItem.setChecked(invocation.m_extract);
-            // arguments
-            for (ArgumentInfo argument : invocation.m_arguments) {
-              TreeItem item = new TreeItem(invocationItem, SWT.NONE);
-              item.setData(argument);
-              item.setImage(DesignerPlugin.getImage("actions/factory/argument_can_parameter.gif"));
-              item.setText(argument.m_parameterName + " = " + argument.m_source);
-            }
-          }
-        }
-        // expand
-        UiUtils.expandAll(tree);
-      }
-    }
+		/**
+		 * Creates {@link Composite} for selection of arguments/invocations.
+		 */
+		private void createArgumentsInvocationsComposite(Composite parent) {
+			Composite composite = new Composite(parent, SWT.NONE);
+			GridLayoutFactory.create(composite).noMargins();
+			new Label(composite, SWT.NONE).setText(ModelMessages.FactoryCreateAction_dialogArgumentsHint);
+			{
+				Tree tree = new Tree(composite, SWT.BORDER | SWT.CHECK);
+				GridDataFactory.create(tree).hintC(150, 12).grab().fill();
+				// listeners
+				tree.addListener(SWT.Selection, new Listener() {
+					@Override
+					public void handleEvent(Event event) {
+						if (event.detail == SWT.CHECK) {
+							TreeItem item = (TreeItem) event.item;
+							// don't change check state for grayed (special) items
+							if (item.getGrayed()) {
+								item.setChecked(!item.getChecked());
+								return;
+							}
+							// handle check state for model
+							if (item.getData() instanceof InvocationInfo) {
+								InvocationInfo invocation = (InvocationInfo) item.getData();
+								invocation.m_extract = item.getChecked();
+							} else if (item.getData() instanceof ArgumentInfo) {
+								ArgumentInfo argument = (ArgumentInfo) item.getData();
+								if (argument.m_hasVariables) {
+									// arguments with variables should be parameters
+									item.setChecked(true);
+									return;
+								} else {
+									argument.m_parameter = item.getChecked();
+								}
+							}
+							// validate, update preview
+							validateAll();
+						}
+					}
+				});
+				// creation
+				{
+					TreeItem creationItem = new TreeItem(tree, SWT.NONE);
+					creationItem.setImage(DesignerPlugin.getImage("actions/factory/folder.png"));
+					creationItem.setText(ModelMessages.FactoryCreateAction_dialogArgumentsCreation);
+					creationItem.setGrayed(true);
+					creationItem.setChecked(true);
+					// arguments
+					for (ArgumentInfo argument : m_creationInfo.m_arguments) {
+						TreeItem item = new TreeItem(creationItem, SWT.NONE);
+						item.setData(argument);
+						item.setImage(DesignerPlugin.getImage("actions/factory/argument_can_parameter.gif"));
+						item.setText(argument.m_parameterName + " = " + argument.m_source);
+						if (argument.m_hasVariables) {
+							item.setImage(DesignerPlugin.getImage("actions/factory/argument_must_parameter.gif"));
+							item.setChecked(true);
+						}
+					}
+				}
+				// invocations
+				{
+					TreeItem invocationsItem = new TreeItem(tree, SWT.NONE);
+					invocationsItem.setText(ModelMessages.FactoryCreateAction_dialogArgumentsInvocations);
+					invocationsItem.setImage(DesignerPlugin.getImage("actions/factory/folder.png"));
+					invocationsItem.setGrayed(true);
+					invocationsItem.setChecked(true);
+					// for each invocation
+					for (InvocationInfo invocation : m_invocations) {
+						// skip, if can not be extracted
+						if (!invocation.m_canExtract) {
+							continue;
+						}
+						// item for invocation
+						TreeItem invocationItem = new TreeItem(invocationsItem, SWT.NONE);
+						invocationItem.setData(invocation);
+						invocationItem.setImage(DesignerPlugin.getImage("actions/factory/invocation.gif"));
+						invocationItem.setText(invocation.m_signature);
+						invocationItem.setChecked(invocation.m_extract);
+						// arguments
+						for (ArgumentInfo argument : invocation.m_arguments) {
+							TreeItem item = new TreeItem(invocationItem, SWT.NONE);
+							item.setData(argument);
+							item.setImage(DesignerPlugin.getImage("actions/factory/argument_can_parameter.gif"));
+							item.setText(argument.m_parameterName + " = " + argument.m_source);
+						}
+					}
+				}
+				// expand
+				UiUtils.expandAll(tree);
+			}
+		}
 
-    /**
-     * Creates {@link #m_previewViewer}.
-     */
-    private void createPreviewComposite(Composite parent) {
-      Composite composite = new Composite(parent, SWT.NONE);
-      GridLayoutFactory.create(composite).noMargins();
-      new Label(composite, SWT.NONE).setText(ModelMessages.FactoryCreateAction_dialogPreview);
-      m_previewViewer =
-          JdtUiUtils.createJavaSourceViewer(composite, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
-      GridDataFactory.create(m_previewViewer.getControl()).hintVC(12).grab().fill();
-    }
+		/**
+		 * Creates {@link #m_previewViewer}.
+		 */
+		private void createPreviewComposite(Composite parent) {
+			Composite composite = new Composite(parent, SWT.NONE);
+			GridLayoutFactory.create(composite).noMargins();
+			new Label(composite, SWT.NONE).setText(ModelMessages.FactoryCreateAction_dialogPreview);
+			m_previewViewer =
+					JdtUiUtils.createJavaSourceViewer(composite, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
+			GridDataFactory.create(m_previewViewer.getControl()).hintVC(12).grab().fill();
+		}
 
-    /**
-     * Fills palette categories in {@link #m_categoryField}.
-     */
-    private void fillPaletteCategories() {
-      CategoryInfo selectedCategory = m_paletteCategory;
-      // do fill with items
-      {
-        m_categoryField.setItems(new String[]{});
-        m_categoryField.addItem(ModelMessages.FactoryCreateAction_dialogCategoryNo);
-        // add categories
-        {
-          IPaletteSite paletteSite = IPaletteSite.Helper.getSite(m_component);
-          if (paletteSite != null) {
-            PaletteInfo palette = paletteSite.getPalette();
-            m_paletteCategories = palette.getCategories();
-            for (CategoryInfo category : m_paletteCategories) {
-              m_categoryField.addItem(category.getName());
-            }
-          }
-        }
-        // show all items
-        UiUtils.setVisibleItemCount(
-            m_categoryField.getComboControl(null),
-            m_categoryField.getItemCount());
-      }
-      // restore selection
-      m_categoryField.selectItem(0);
-      if (selectedCategory != null) {
-        m_categoryField.selectItem(selectedCategory.getName());
-      }
-    }
+		/**
+		 * Fills palette categories in {@link #m_categoryField}.
+		 */
+		private void fillPaletteCategories() {
+			CategoryInfo selectedCategory = m_paletteCategory;
+			// do fill with items
+			{
+				m_categoryField.setItems(new String[]{});
+				m_categoryField.addItem(ModelMessages.FactoryCreateAction_dialogCategoryNo);
+				// add categories
+				{
+					IPaletteSite paletteSite = IPaletteSite.Helper.getSite(m_component);
+					if (paletteSite != null) {
+						PaletteInfo palette = paletteSite.getPalette();
+						m_paletteCategories = palette.getCategories();
+						for (CategoryInfo category : m_paletteCategories) {
+							m_categoryField.addItem(category.getName());
+						}
+					}
+				}
+				// show all items
+				UiUtils.setVisibleItemCount(
+						m_categoryField.getComboControl(null),
+						m_categoryField.getItemCount());
+			}
+			// restore selection
+			m_categoryField.selectItem(0);
+			if (selectedCategory != null) {
+				m_categoryField.selectItem(selectedCategory.getName());
+			}
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Buttons
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    private static final int CREATE_ID = IDialogConstants.CLIENT_ID + 1;
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Buttons
+		//
+		////////////////////////////////////////////////////////////////////////////
+		private static final int CREATE_ID = IDialogConstants.CLIENT_ID + 1;
 
-    @Override
-    protected void createButtonsForButtonBar(Composite parent) {
-      createButton(parent, CREATE_ID, ModelMessages.FactoryCreateAction_dialogCreateButton, false);
-      super.createButtonsForButtonBar(parent);
-    }
+		@Override
+		protected void createButtonsForButtonBar(Composite parent) {
+			createButton(parent, CREATE_ID, ModelMessages.FactoryCreateAction_dialogCreateButton, false);
+			super.createButtonsForButtonBar(parent);
+		}
 
-    @Override
-    protected void buttonPressed(int buttonId) {
-      super.buttonPressed(buttonId);
-      if (buttonId == CREATE_ID) {
-        ExecutionUtils.runLog(new RunnableEx() {
-          @Override
-          public void run() throws Exception {
-            generate(false);
-            validateAll();
-          }
-        });
-      }
-    }
+		@Override
+		protected void buttonPressed(int buttonId) {
+			super.buttonPressed(buttonId);
+			if (buttonId == CREATE_ID) {
+				ExecutionUtils.runLog(new RunnableEx() {
+					@Override
+					public void run() throws Exception {
+						generate(false);
+						validateAll();
+					}
+				});
+			}
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Validation
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    protected String validate() throws Exception {
-      // validate
-      String message;
-      {
-        m_sourceFolder = m_packageField.getRoot();
-        m_package = m_packageField.getPackage();
-        m_className = m_classField.getText();
-        m_methodName = m_methodField.getText();
-        message = FactoryCreateAction.this.validate();
-      }
-      // update preview
-      if (m_canPreview) {
-        ExecutionUtils.runLog(new RunnableEx() {
-          @Override
-          public void run() throws Exception {
-            JdtUiUtils.setJavaSourceForViewer(m_previewViewer, getFactoryPreviewSource());
-          }
-        });
-      } else {
-        JdtUiUtils.setJavaSourceForViewer(
-            m_previewViewer,
-            ModelMessages.FactoryCreateAction_dialogNoPreview);
-      }
-      // return validation message
-      return message;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Validation
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		protected String validate() throws Exception {
+			// validate
+			String message;
+			{
+				m_sourceFolder = m_packageField.getRoot();
+				m_package = m_packageField.getPackage();
+				m_className = m_classField.getText();
+				m_methodName = m_methodField.getText();
+				message = FactoryCreateAction.this.validate();
+			}
+			// update preview
+			if (m_canPreview) {
+				ExecutionUtils.runLog(new RunnableEx() {
+					@Override
+					public void run() throws Exception {
+						JdtUiUtils.setJavaSourceForViewer(m_previewViewer, getFactoryPreviewSource());
+					}
+				});
+			} else {
+				JdtUiUtils.setJavaSourceForViewer(
+						m_previewViewer,
+						ModelMessages.FactoryCreateAction_dialogNoPreview);
+			}
+			// return validation message
+			return message;
+		}
 
-    @Override
-    protected void setValid(boolean enabled) {
-      super.setValid(enabled);
-      {
-        Button button = getButton(CREATE_ID);
-        button.setEnabled(enabled);
-      }
-    }
+		@Override
+		protected void setValid(boolean enabled) {
+			super.setValid(enabled);
+			{
+				Button button = getButton(CREATE_ID);
+				button.setEnabled(enabled);
+			}
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Utils
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    private Composite m_fieldsContainer;
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Utils
+		//
+		////////////////////////////////////////////////////////////////////////////
+		private Composite m_fieldsContainer;
 
-    /**
-     * Configures given {@link DialogField} for specific of this dialog.
-     */
-    protected final void doCreateField(DialogField dialogField, String labelText) {
-      dialogField.setLabelText(labelText);
-      dialogField.setDialogFieldListener(m_validateListener);
-      DialogFieldUtils.fillControls(m_fieldsContainer, dialogField, 3, 40);
-    }
-  }
+		/**
+		 * Configures given {@link DialogField} for specific of this dialog.
+		 */
+		protected final void doCreateField(DialogField dialogField, String labelText) {
+			dialogField.setLabelText(labelText);
+			dialogField.setDialogFieldListener(m_validateListener);
+			DialogFieldUtils.fillControls(m_fieldsContainer, dialogField, 3, 40);
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/factory/FactorySelectAction.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/factory/FactorySelectAction.java
index b1f275839..198b9c5a4 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/factory/FactorySelectAction.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/factory/FactorySelectAction.java
@@ -42,99 +42,99 @@
  * @coverage core.model.util
  */
 public final class FactorySelectAction extends Action {
-  private final JavaInfo m_component;
-  private final AstEditor m_editor;
+	private final JavaInfo m_component;
+	private final AstEditor m_editor;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FactorySelectAction(JavaInfo component) {
-    m_component = component;
-    m_editor = m_component.getEditor();
-    setImageDescriptor(DesignerPlugin.getImageDescriptor("actions/factory/open_factory.gif"));
-    setText(ModelMessages.FactorySelectAction_text);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FactorySelectAction(JavaInfo component) {
+		m_component = component;
+		m_editor = m_component.getEditor();
+		setImageDescriptor(DesignerPlugin.getImageDescriptor("actions/factory/open_factory.gif"));
+		setText(ModelMessages.FactorySelectAction_text);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Run
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void run() {
-    try {
-      Class<?> factoryType = selectFactoryType();
-      if (factoryType == null) {
-        return;
-      }
-      // prepare factory methods
-      Map<String, FactoryMethodDescription> descriptionsMap =
-          FactoryDescriptionHelper.getDescriptionsMap(m_editor, factoryType, true);
-      // prepare factory method selection dialog
-      ListDialog selectionDialog;
-      {
-        selectionDialog = new ListDialog(DesignerPlugin.getShell());
-        selectionDialog.setTitle(ModelMessages.FactorySelectAction_dialogTitle);
-        selectionDialog.setMessage(ModelMessages.FactorySelectAction_dialogMessage);
-        selectionDialog.setContentProvider(new ArrayContentProvider());
-        selectionDialog.setLabelProvider(new LabelProvider() {
-          @Override
-          public String getText(Object element) {
-            return (String) element;
-          }
-        });
-        selectionDialog.setInput(descriptionsMap.keySet());
-        if (!descriptionsMap.isEmpty()) {
-          selectionDialog.setInitialSelections(new Object[]{descriptionsMap.keySet().iterator().next()});
-        }
-      }
-      // open dialog
-      if (selectionDialog.open() == Window.OK && selectionDialog.getResult().length != 0) {
-        FactoryActionsSupport.addPreviousTypeName(m_component, factoryType.getName());
-        // do apply
-        String signature = (String) selectionDialog.getResult()[0];
-        FactoryMethodDescription description = descriptionsMap.get(signature);
-        new FactoryApplyAction(m_component, description).run();
-      }
-    } catch (Throwable e) {
-      DesignerPlugin.log(e);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Run
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void run() {
+		try {
+			Class<?> factoryType = selectFactoryType();
+			if (factoryType == null) {
+				return;
+			}
+			// prepare factory methods
+			Map<String, FactoryMethodDescription> descriptionsMap =
+					FactoryDescriptionHelper.getDescriptionsMap(m_editor, factoryType, true);
+			// prepare factory method selection dialog
+			ListDialog selectionDialog;
+			{
+				selectionDialog = new ListDialog(DesignerPlugin.getShell());
+				selectionDialog.setTitle(ModelMessages.FactorySelectAction_dialogTitle);
+				selectionDialog.setMessage(ModelMessages.FactorySelectAction_dialogMessage);
+				selectionDialog.setContentProvider(new ArrayContentProvider());
+				selectionDialog.setLabelProvider(new LabelProvider() {
+					@Override
+					public String getText(Object element) {
+						return (String) element;
+					}
+				});
+				selectionDialog.setInput(descriptionsMap.keySet());
+				if (!descriptionsMap.isEmpty()) {
+					selectionDialog.setInitialSelections(new Object[]{descriptionsMap.keySet().iterator().next()});
+				}
+			}
+			// open dialog
+			if (selectionDialog.open() == Window.OK && selectionDialog.getResult().length != 0) {
+				FactoryActionsSupport.addPreviousTypeName(m_component, factoryType.getName());
+				// do apply
+				String signature = (String) selectionDialog.getResult()[0];
+				FactoryMethodDescription description = descriptionsMap.get(signature);
+				new FactoryApplyAction(m_component, description).run();
+			}
+		} catch (Throwable e) {
+			DesignerPlugin.log(e);
+		}
+	}
 
-  /**
-   * Asks user about factory type.
-   *
-   * @return the loaded factory type, or <code>null</code> is selection was cancelled.
-   */
-  private Class<?> selectFactoryType() throws Exception {
-    Class<?> factoryType;
-    // prepare dialog
-    SelectionDialog dialog;
-    {
-      Shell shell = DesignerPlugin.getShell();
-      ProgressMonitorDialog context = new ProgressMonitorDialog(shell);
-      IJavaSearchScope scope =
-          SearchEngine.createJavaSearchScope(new IJavaElement[]{m_editor.getJavaProject()});
-      dialog =
-          JavaUI.createTypeDialog(
-              shell,
-              context,
-              scope,
-              IJavaElementSearchConstants.CONSIDER_CLASSES,
-              false);
-      dialog.setTitle(ModelMessages.FactorySelectAction_chooseTitle);
-      dialog.setMessage(ModelMessages.FactorySelectAction_chooseMessage);
-    }
-    // open dialog
-    if (dialog.open() != Window.OK) {
-      return null;
-    }
-    // prepare type
-    IType type = (IType) dialog.getResult()[0];
-    String factoryTypeName = type.getFullyQualifiedName().replace('$', '.');
-    factoryType = EditorState.get(m_editor).getEditorLoader().loadClass(factoryTypeName);
-    return factoryType;
-  }
+	/**
+	 * Asks user about factory type.
+	 *
+	 * @return the loaded factory type, or <code>null</code> is selection was cancelled.
+	 */
+	private Class<?> selectFactoryType() throws Exception {
+		Class<?> factoryType;
+		// prepare dialog
+		SelectionDialog dialog;
+		{
+			Shell shell = DesignerPlugin.getShell();
+			ProgressMonitorDialog context = new ProgressMonitorDialog(shell);
+			IJavaSearchScope scope =
+					SearchEngine.createJavaSearchScope(new IJavaElement[]{m_editor.getJavaProject()});
+			dialog =
+					JavaUI.createTypeDialog(
+							shell,
+							context,
+							scope,
+							IJavaElementSearchConstants.CONSIDER_CLASSES,
+							false);
+			dialog.setTitle(ModelMessages.FactorySelectAction_chooseTitle);
+			dialog.setMessage(ModelMessages.FactorySelectAction_chooseMessage);
+		}
+		// open dialog
+		if (dialog.open() != Window.OK) {
+			return null;
+		}
+		// prepare type
+		IType type = (IType) dialog.getResult()[0];
+		String factoryTypeName = type.getFullyQualifiedName().replace('$', '.');
+		factoryType = EditorState.get(m_editor).getEditorLoader().loadClass(factoryTypeName);
+		return factoryType;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/generic/CopyPropertyTopAbstractSupport.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/generic/CopyPropertyTopAbstractSupport.java
index 752c248c9..8cd3f77cb 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/generic/CopyPropertyTopAbstractSupport.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/generic/CopyPropertyTopAbstractSupport.java
@@ -33,118 +33,118 @@
  * @coverage core.model.util
  */
 public abstract class CopyPropertyTopAbstractSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Installation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Configures given {@link JavaInfo} to copy properties according parameters in description.
-   */
-  protected final void install(JavaInfo javaInfo, String prefix) {
-    for (String parameter : javaInfo.getDescription().getParameters().keySet()) {
-      String sourcePath = null;
-      String copyTitle = null;
-      PropertyCategory category = PropertyCategory.NORMAL;
-      if (parameter.startsWith(prefix)) {
-        String[] parts = StringUtils.split(parameter);
-        for (String part : parts) {
-          if (part.startsWith("from=")) {
-            sourcePath = StringUtils.removeStart(part, "from=");
-          }
-          if (part.startsWith("to=")) {
-            copyTitle = StringUtils.removeStart(part, "to=");
-          }
-          if (part.startsWith("category=")) {
-            String categoryText = StringUtils.removeStart(part, "category=");
-            category = PropertyCategory.get(categoryText, category);
-          }
-        }
-        // validate
-        if (sourcePath == null || copyTitle == null) {
-          String message = "No 'from' or 'to' attributes: " + parameter;
-          JavaInfoUtils.getState(javaInfo).addWarning(new EditorWarning(message, null));
-          continue;
-        }
-        // OK, create copy processor
-        Predicate<JavaInfo> targetPredicate = createTargetPredicate(javaInfo);
-        new CopyProcessor(javaInfo, targetPredicate, sourcePath, copyTitle, category);
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Installation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Configures given {@link JavaInfo} to copy properties according parameters in description.
+	 */
+	protected final void install(JavaInfo javaInfo, String prefix) {
+		for (String parameter : javaInfo.getDescription().getParameters().keySet()) {
+			String sourcePath = null;
+			String copyTitle = null;
+			PropertyCategory category = PropertyCategory.NORMAL;
+			if (parameter.startsWith(prefix)) {
+				String[] parts = StringUtils.split(parameter);
+				for (String part : parts) {
+					if (part.startsWith("from=")) {
+						sourcePath = StringUtils.removeStart(part, "from=");
+					}
+					if (part.startsWith("to=")) {
+						copyTitle = StringUtils.removeStart(part, "to=");
+					}
+					if (part.startsWith("category=")) {
+						String categoryText = StringUtils.removeStart(part, "category=");
+						category = PropertyCategory.get(categoryText, category);
+					}
+				}
+				// validate
+				if (sourcePath == null || copyTitle == null) {
+					String message = "No 'from' or 'to' attributes: " + parameter;
+					JavaInfoUtils.getState(javaInfo).addWarning(new EditorWarning(message, null));
+					continue;
+				}
+				// OK, create copy processor
+				Predicate<JavaInfo> targetPredicate = createTargetPredicate(javaInfo);
+				new CopyProcessor(javaInfo, targetPredicate, sourcePath, copyTitle, category);
+			}
+		}
+	}
 
-  /**
-   * @param javaInfo
-   *          the {@link JavaInfo} passed into {@link #install(JavaInfo, String)}.
-   *
-   * @return the {@link Predicate} to check if property of some {@link JavaInfo} should be copied to
-   *         its top properties.
-   */
-  protected abstract Predicate<JavaInfo> createTargetPredicate(JavaInfo javaInfo);
+	/**
+	 * @param javaInfo
+	 *          the {@link JavaInfo} passed into {@link #install(JavaInfo, String)}.
+	 *
+	 * @return the {@link Predicate} to check if property of some {@link JavaInfo} should be copied to
+	 *         its top properties.
+	 */
+	protected abstract Predicate<JavaInfo> createTargetPredicate(JavaInfo javaInfo);
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Copy processor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  static class CopyProcessor {
-    private final Predicate<JavaInfo> m_targetPredicate;
-    private final String m_sourcePath;
-    private final String m_copyTitle;
-    private final PropertyCategory m_category;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Copy processor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	static class CopyProcessor {
+		private final Predicate<JavaInfo> m_targetPredicate;
+		private final String m_sourcePath;
+		private final String m_copyTitle;
+		private final PropertyCategory m_category;
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    CopyProcessor(JavaInfo someJavaInfo,
-        Predicate<JavaInfo> targetPredicate,
-        String sourcePath,
-        String copyTitle,
-        PropertyCategory category) {
-      m_targetPredicate = targetPredicate;
-      m_sourcePath = sourcePath;
-      m_copyTitle = copyTitle;
-      m_category = category;
-      someJavaInfo.addBroadcastListener(new JavaInfoAddProperties() {
-        @Override
-        public void invoke(JavaInfo javaInfo, List<Property> properties) throws Exception {
-          if (m_targetPredicate.apply(javaInfo)) {
-            Property source = PropertyUtils.getByPath(properties, m_sourcePath);
-            Property copy = getCopy(source);
-            if (copy != null) {
-              properties.add(copy);
-            }
-          }
-        }
-      });
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		CopyProcessor(JavaInfo someJavaInfo,
+				Predicate<JavaInfo> targetPredicate,
+				String sourcePath,
+				String copyTitle,
+				PropertyCategory category) {
+			m_targetPredicate = targetPredicate;
+			m_sourcePath = sourcePath;
+			m_copyTitle = copyTitle;
+			m_category = category;
+			someJavaInfo.addBroadcastListener(new JavaInfoAddProperties() {
+				@Override
+				public void invoke(JavaInfo javaInfo, List<Property> properties) throws Exception {
+					if (m_targetPredicate.apply(javaInfo)) {
+						Property source = PropertyUtils.getByPath(properties, m_sourcePath);
+						Property copy = getCopy(source);
+						if (copy != null) {
+							properties.add(copy);
+						}
+					}
+				}
+			});
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Implementation
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    private Property m_oldSource;
-    private Property m_oldCopy;
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Implementation
+		//
+		////////////////////////////////////////////////////////////////////////////
+		private Property m_oldSource;
+		private Property m_oldCopy;
 
-    private Property getCopy(Property source) {
-      if (m_oldSource != source) {
-        m_oldSource = source;
-        m_oldCopy = createCopy(source);
-      }
-      return m_oldCopy;
-    }
+		private Property getCopy(Property source) {
+			if (m_oldSource != source) {
+				m_oldSource = source;
+				m_oldCopy = createCopy(source);
+			}
+			return m_oldCopy;
+		}
 
-    private Property createCopy(Property source) {
-      if (source instanceof GenericPropertyImpl) {
-        GenericPropertyImpl genericProperty = (GenericPropertyImpl) source;
-        Property copy = new GenericPropertyImpl(genericProperty, m_copyTitle);
-        copy.setCategory(m_category);
-        return copy;
-      }
-      return null;
-    }
-  }
+		private Property createCopy(Property source) {
+			if (source instanceof GenericPropertyImpl) {
+				GenericPropertyImpl genericProperty = (GenericPropertyImpl) source;
+				Property copy = new GenericPropertyImpl(genericProperty, m_copyTitle);
+				copy.setCategory(m_category);
+				return copy;
+			}
+			return null;
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/generic/CopyPropertyTopChildSupport.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/generic/CopyPropertyTopChildSupport.java
index 22010d622..7294644bd 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/generic/CopyPropertyTopChildSupport.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/generic/CopyPropertyTopChildSupport.java
@@ -34,30 +34,30 @@
  * @coverage core.model.util
  */
 public final class CopyPropertyTopChildSupport extends CopyPropertyTopAbstractSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Installation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Configures given parent to copy properties of children according parameters in description.
-   */
-  public static void install(JavaInfo parent) {
-    new CopyPropertyTopChildSupport().install(parent, "copyChildPropertyTop ");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Installation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Configures given parent to copy properties of children according parameters in description.
+	 */
+	public static void install(JavaInfo parent) {
+		new CopyPropertyTopChildSupport().install(parent, "copyChildPropertyTop ");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Implementation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Predicate<JavaInfo> createTargetPredicate(final JavaInfo javaInfo) {
-    return new Predicate<JavaInfo>() {
-      @Override
-      public boolean apply(JavaInfo t) {
-        return t.getParent() == javaInfo;
-      }
-    };
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Implementation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Predicate<JavaInfo> createTargetPredicate(final JavaInfo javaInfo) {
+		return new Predicate<JavaInfo>() {
+			@Override
+			public boolean apply(JavaInfo t) {
+				return t.getParent() == javaInfo;
+			}
+		};
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/generic/CopyPropertyTopSupport.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/generic/CopyPropertyTopSupport.java
index e401003c2..0ba5aa135 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/generic/CopyPropertyTopSupport.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/generic/CopyPropertyTopSupport.java
@@ -31,30 +31,30 @@
  * @coverage core.model.util
  */
 public final class CopyPropertyTopSupport extends CopyPropertyTopAbstractSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Installation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Configures given {@link JavaInfo} to copy properties according parameters in description.
-   */
-  public static void install(JavaInfo javaInfo) {
-    new CopyPropertyTopSupport().install(javaInfo, "copyPropertyTop ");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Installation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Configures given {@link JavaInfo} to copy properties according parameters in description.
+	 */
+	public static void install(JavaInfo javaInfo) {
+		new CopyPropertyTopSupport().install(javaInfo, "copyPropertyTop ");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Implementation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Predicate<JavaInfo> createTargetPredicate(final JavaInfo javaInfo) {
-    return new Predicate<JavaInfo>() {
-      @Override
-      public boolean apply(JavaInfo t) {
-        return t == javaInfo;
-      }
-    };
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Implementation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Predicate<JavaInfo> createTargetPredicate(final JavaInfo javaInfo) {
+		return new Predicate<JavaInfo>() {
+			@Override
+			public boolean apply(JavaInfo t) {
+				return t == javaInfo;
+			}
+		};
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/generic/DescriptionDrivenFeaturesParticipator.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/generic/DescriptionDrivenFeaturesParticipator.java
index 2eef1a3e7..6ad95b504 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/generic/DescriptionDrivenFeaturesParticipator.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/generic/DescriptionDrivenFeaturesParticipator.java
@@ -21,18 +21,18 @@
  * @coverage core.model.util
  */
 public final class DescriptionDrivenFeaturesParticipator
-    implements
-      IJavaInfoInitializationParticipator {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IJavaInfoInitializationParticipator
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void process(JavaInfo javaInfo) throws Exception {
-    CopyPropertyTopSupport.install(javaInfo);
-    CopyPropertyTopChildSupport.install(javaInfo);
-    ModelMethodPropertySupport.install(javaInfo, "modelMethodProperty ");
-    ModelMethodPropertyChildSupport.install(javaInfo, "modelMethodChildProperty ");
-  }
+implements
+IJavaInfoInitializationParticipator {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IJavaInfoInitializationParticipator
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void process(JavaInfo javaInfo) throws Exception {
+		CopyPropertyTopSupport.install(javaInfo);
+		CopyPropertyTopChildSupport.install(javaInfo);
+		ModelMethodPropertySupport.install(javaInfo, "modelMethodProperty ");
+		ModelMethodPropertyChildSupport.install(javaInfo, "modelMethodChildProperty ");
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/generic/LocalStaticFactoriesRootProcessor.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/generic/LocalStaticFactoriesRootProcessor.java
index 1aa94f822..5e91c70e6 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/generic/LocalStaticFactoriesRootProcessor.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/generic/LocalStaticFactoriesRootProcessor.java
@@ -38,87 +38,87 @@
  * @coverage core.model.util
  */
 public final class LocalStaticFactoriesRootProcessor implements IRootProcessor {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final IRootProcessor INSTANCE = new LocalStaticFactoriesRootProcessor();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final IRootProcessor INSTANCE = new LocalStaticFactoriesRootProcessor();
 
-  private LocalStaticFactoriesRootProcessor() {
-  }
+	private LocalStaticFactoriesRootProcessor() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IRootProcessor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void process(JavaInfo root, List<JavaInfo> components) throws Exception {
-    processRoot(root);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IRootProcessor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void process(JavaInfo root, List<JavaInfo> components) throws Exception {
+		processRoot(root);
+	}
 
-  /**
-   * Configures given parent to copy properties of children according parameters in description.
-   */
-  private static void processRoot(final JavaInfo rootJavaInfo) {
-    ExecutionUtils.runIgnore(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        installPaletteBroadcastEx(rootJavaInfo);
-      }
-    });
-  }
+	/**
+	 * Configures given parent to copy properties of children according parameters in description.
+	 */
+	private static void processRoot(final JavaInfo rootJavaInfo) {
+		ExecutionUtils.runIgnore(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				installPaletteBroadcastEx(rootJavaInfo);
+			}
+		});
+	}
 
-  private static void installPaletteBroadcastEx(JavaInfo rootJavaInfo) throws Exception {
-    final Map<String, FactoryMethodDescription> descriptionsMap = getLocalFactories(rootJavaInfo);
-    if (!descriptionsMap.isEmpty()) {
-      rootJavaInfo.addBroadcastListener(new PaletteEventListener() {
-        @Override
-        public void categories(List<CategoryInfo> categories) throws Exception {
-          CategoryInfo category = createLocalFactoriesCategory(descriptionsMap);
-          categories.add(category);
-        }
-      });
-    }
-  }
+	private static void installPaletteBroadcastEx(JavaInfo rootJavaInfo) throws Exception {
+		final Map<String, FactoryMethodDescription> descriptionsMap = getLocalFactories(rootJavaInfo);
+		if (!descriptionsMap.isEmpty()) {
+			rootJavaInfo.addBroadcastListener(new PaletteEventListener() {
+				@Override
+				public void categories(List<CategoryInfo> categories) throws Exception {
+					CategoryInfo category = createLocalFactoriesCategory(descriptionsMap);
+					categories.add(category);
+				}
+			});
+		}
+	}
 
-  /**
-   * @return the {@link Map} of local factories, may be empty, but not <code>null</code>.
-   */
-  private static Map<String, FactoryMethodDescription> getLocalFactories(JavaInfo rootJavaInfo)
-      throws Exception {
-    AstEditor editor = rootJavaInfo.getEditor();
-    // quick check
-    if (!editor.getSource().contains("@wbp.factory")) {
-      return ImmutableMap.of();
-    }
-    // analyze
-    String editorTypeName = editor.getModelUnit().findPrimaryType().getFullyQualifiedName();
-    Class<?> possibleFactoryClass =
-        JavaInfoUtils.getClassLoader(rootJavaInfo).loadClass(editorTypeName);
-    return FactoryDescriptionHelper.getDescriptionsMap(editor, possibleFactoryClass, true);
-  }
+	/**
+	 * @return the {@link Map} of local factories, may be empty, but not <code>null</code>.
+	 */
+	private static Map<String, FactoryMethodDescription> getLocalFactories(JavaInfo rootJavaInfo)
+			throws Exception {
+		AstEditor editor = rootJavaInfo.getEditor();
+		// quick check
+		if (!editor.getSource().contains("@wbp.factory")) {
+			return ImmutableMap.of();
+		}
+		// analyze
+		String editorTypeName = editor.getModelUnit().findPrimaryType().getFullyQualifiedName();
+		Class<?> possibleFactoryClass =
+				JavaInfoUtils.getClassLoader(rootJavaInfo).loadClass(editorTypeName);
+		return FactoryDescriptionHelper.getDescriptionsMap(editor, possibleFactoryClass, true);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Palette
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static CategoryInfo createLocalFactoriesCategory(Map<String, FactoryMethodDescription> descriptionsMap) {
-    CategoryInfo category = new CategoryInfo("wbp.Core.localFactories");
-    category.setName("Local Factories");
-    category.setDescription("Automatically added category with entries for local factory methods.");
-    // add entries
-    for (FactoryMethodDescription methodDescription : descriptionsMap.values()) {
-      String factoryClassName = methodDescription.getDeclaringClass().getName();
-      AttributesProvider attributes =
-          AttributesProviders.get(ImmutableMap.of("signature", methodDescription.getSignature()));
-      StaticFactoryEntryInfo entry =
-          new StaticFactoryEntryInfo(category, factoryClassName, attributes);
-      category.addEntry(entry);
-    }
-    //
-    return category;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Palette
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static CategoryInfo createLocalFactoriesCategory(Map<String, FactoryMethodDescription> descriptionsMap) {
+		CategoryInfo category = new CategoryInfo("wbp.Core.localFactories");
+		category.setName("Local Factories");
+		category.setDescription("Automatically added category with entries for local factory methods.");
+		// add entries
+		for (FactoryMethodDescription methodDescription : descriptionsMap.values()) {
+			String factoryClassName = methodDescription.getDeclaringClass().getName();
+			AttributesProvider attributes =
+					AttributesProviders.get(ImmutableMap.of("signature", methodDescription.getSignature()));
+			StaticFactoryEntryInfo entry =
+					new StaticFactoryEntryInfo(category, factoryClassName, attributes);
+			category.addEntry(entry);
+		}
+		//
+		return category;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/generic/ModelMethodPropertyAbstractSupport.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/generic/ModelMethodPropertyAbstractSupport.java
index ebe2d6c0e..0b2b5fc8b 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/generic/ModelMethodPropertyAbstractSupport.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/generic/ModelMethodPropertyAbstractSupport.java
@@ -38,269 +38,269 @@
  * @coverage core.model.util
  */
 abstract class ModelMethodPropertyAbstractSupport {
-  protected final ObjectInfo object;
-  private final String prefix;
+	protected final ObjectInfo object;
+	private final String prefix;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ModelMethodPropertyAbstractSupport(ObjectInfo object, String prefix) {
-    this.object = object;
-    this.prefix = prefix;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ModelMethodPropertyAbstractSupport(ObjectInfo object, String prefix) {
+		this.object = object;
+		this.prefix = prefix;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Installation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Configures given {@link ObjectInfo} to create properties.
-   */
-  protected final void install() {
-    ExecutionUtils.runLog(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        installEx();
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Installation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Configures given {@link ObjectInfo} to create properties.
+	 */
+	protected final void install() {
+		ExecutionUtils.runLog(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				installEx();
+			}
+		});
+	}
 
-  private void installEx() throws Exception {
-    Map<String, String> parameters = GlobalState.getParametersProvider().getParameters(object);
-    for (String parameter : parameters.keySet()) {
-      if (parameter.startsWith(prefix)) {
-        createParameterProcessor().process(parameter);
-      }
-    }
-  }
+	private void installEx() throws Exception {
+		Map<String, String> parameters = GlobalState.getParametersProvider().getParameters(object);
+		for (String parameter : parameters.keySet()) {
+			if (parameter.startsWith(prefix)) {
+				createParameterProcessor().process(parameter);
+			}
+		}
+	}
 
-  protected abstract ParameterProcessor createParameterProcessor();
+	protected abstract ParameterProcessor createParameterProcessor();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parameter
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected abstract class ParameterProcessor {
-    // parameter parts
-    protected String getterSignature;
-    protected String setterSignature;
-    protected Class<?> type;
-    protected PropertyEditor propertyEditor;
-    protected String title;
-    protected PropertyCategory category = PropertyCategory.NORMAL;
-    // prepared property features
-    protected Method getter;
-    protected Method setter;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parameter
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected abstract class ParameterProcessor {
+		// parameter parts
+		protected String getterSignature;
+		protected String setterSignature;
+		protected Class<?> type;
+		protected PropertyEditor propertyEditor;
+		protected String title;
+		protected PropertyCategory category = PropertyCategory.NORMAL;
+		// prepared property features
+		protected Method getter;
+		protected Method setter;
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Access
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public void process(String parameter) throws Exception {
-      for (String part : StringUtils.split(parameter)) {
-        processParameterPart(part);
-      }
-      // validate
-      {
-        String message = validate();
-        if (message != null) {
-          message += "\n" + parameter;
-          EditorWarning warning = new EditorWarning(message, null);
-          GlobalState.getOtherHelper().addWarning(warning);
-          return;
-        }
-      }
-      // OK, configure property
-      configureProperty();
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Access
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public void process(String parameter) throws Exception {
+			for (String part : StringUtils.split(parameter)) {
+				processParameterPart(part);
+			}
+			// validate
+			{
+				String message = validate();
+				if (message != null) {
+					message += "\n" + parameter;
+					EditorWarning warning = new EditorWarning(message, null);
+					GlobalState.getOtherHelper().addWarning(warning);
+					return;
+				}
+			}
+			// OK, configure property
+			configureProperty();
+		}
 
-    /**
-     * Performs operations required to create {@link Property} with given parameters.
-     */
-    protected abstract void configureProperty();
+		/**
+		 * Performs operations required to create {@link Property} with given parameters.
+		 */
+		protected abstract void configureProperty();
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Parameters cycle
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    protected void processParameterPart(String part) throws Exception {
-      if (part.startsWith("getter=")) {
-        getterSignature = StringUtils.removeStart(part, "getter=");
-      }
-      if (part.startsWith("setter=")) {
-        setterSignature = StringUtils.removeStart(part, "setter=");
-      }
-      if (part.startsWith("type=")) {
-        String typeName = StringUtils.removeStart(part, "type=");
-        type = ReflectionUtils.getClassByName(GlobalState.getClassLoader(), typeName);
-        if (propertyEditor == null) {
-          propertyEditor = GlobalState.getDescriptionHelper().getEditorForType(type);
-        }
-      }
-      if (part.startsWith("editor=")) {
-        String desc = StringUtils.removeStart(part, "editor=");
-        parseEditor(desc);
-      }
-      if (part.startsWith("title=")) {
-        title = StringUtils.removeStart(part, "title=");
-      }
-      if (part.startsWith("category=")) {
-        String categoryText = StringUtils.removeStart(part, "category=");
-        category = PropertyCategory.get(categoryText, category);
-      }
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Parameters cycle
+		//
+		////////////////////////////////////////////////////////////////////////////
+		protected void processParameterPart(String part) throws Exception {
+			if (part.startsWith("getter=")) {
+				getterSignature = StringUtils.removeStart(part, "getter=");
+			}
+			if (part.startsWith("setter=")) {
+				setterSignature = StringUtils.removeStart(part, "setter=");
+			}
+			if (part.startsWith("type=")) {
+				String typeName = StringUtils.removeStart(part, "type=");
+				type = ReflectionUtils.getClassByName(GlobalState.getClassLoader(), typeName);
+				if (propertyEditor == null) {
+					propertyEditor = GlobalState.getDescriptionHelper().getEditorForType(type);
+				}
+			}
+			if (part.startsWith("editor=")) {
+				String desc = StringUtils.removeStart(part, "editor=");
+				parseEditor(desc);
+			}
+			if (part.startsWith("title=")) {
+				title = StringUtils.removeStart(part, "title=");
+			}
+			if (part.startsWith("category=")) {
+				String categoryText = StringUtils.removeStart(part, "category=");
+				category = PropertyCategory.get(categoryText, category);
+			}
+		}
 
-    /**
-     * Attempts to parse {@link PropertyEditor} description.
-     */
-    private void parseEditor(String desc) {
-      if (desc.startsWith("strings(")) {
-        desc = StringUtils.substringBetween(desc, "strings(", ")");
-        String[] strings = StringUtils.split(desc, ',');
-        StringListPropertyEditor stringsPropertyEditor = new StringListPropertyEditor();
-        stringsPropertyEditor.configure(strings);
-        propertyEditor = stringsPropertyEditor;
-      }
-    }
+		/**
+		 * Attempts to parse {@link PropertyEditor} description.
+		 */
+		private void parseEditor(String desc) {
+			if (desc.startsWith("strings(")) {
+				desc = StringUtils.substringBetween(desc, "strings(", ")");
+				String[] strings = StringUtils.split(desc, ',');
+				StringListPropertyEditor stringsPropertyEditor = new StringListPropertyEditor();
+				stringsPropertyEditor.configure(strings);
+				propertyEditor = stringsPropertyEditor;
+			}
+		}
 
-    protected String validate() throws Exception {
-      if (getterSignature == null
-          || setterSignature == null
-          || propertyEditor == null
-          || title == null) {
-        return "No 'getter' or 'setter' or 'type' or 'editor' or 'title' attributes: ";
-      }
-      // prepare getter
-      processGetterSignature();
-      getter = ReflectionUtils.getMethodBySignature(object.getClass(), getterSignature);
-      if (getter == null) {
-        return "Invalid '" + prefix + "' getter: " + getterSignature;
-      }
-      // prepare setter
-      processSetterSignature();
-      setter = ReflectionUtils.getMethodBySignature(object.getClass(), setterSignature);
-      if (setter == null) {
-        return "Invalid '" + prefix + "' setter: " + setterSignature;
-      }
-      // OK
-      return null;
-    }
+		protected String validate() throws Exception {
+			if (getterSignature == null
+					|| setterSignature == null
+					|| propertyEditor == null
+					|| title == null) {
+				return "No 'getter' or 'setter' or 'type' or 'editor' or 'title' attributes: ";
+			}
+			// prepare getter
+			processGetterSignature();
+			getter = ReflectionUtils.getMethodBySignature(object.getClass(), getterSignature);
+			if (getter == null) {
+				return "Invalid '" + prefix + "' getter: " + getterSignature;
+			}
+			// prepare setter
+			processSetterSignature();
+			setter = ReflectionUtils.getMethodBySignature(object.getClass(), setterSignature);
+			if (setter == null) {
+				return "Invalid '" + prefix + "' setter: " + setterSignature;
+			}
+			// OK
+			return null;
+		}
 
-    protected abstract void processGetterSignature();
+		protected abstract void processGetterSignature();
 
-    protected abstract void processSetterSignature();
+		protected abstract void processSetterSignature();
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // PropertyProcessor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    protected abstract class PropertyProcessor {
-      ////////////////////////////////////////////////////////////////////////////
-      //
-      // Constructor
-      //
-      ////////////////////////////////////////////////////////////////////////////
-      protected PropertyProcessor() {
-        object.addBroadcastListener(new ObjectInfoAddProperties() {
-          @Override
-          public void invoke(ObjectInfo target, List<Property> properties) throws Exception {
-            if (isPropertyTarget(target)) {
-              Property property = createProperty(target);
-              properties.add(property);
-            }
-          }
-        });
-      }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// PropertyProcessor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		protected abstract class PropertyProcessor {
+			////////////////////////////////////////////////////////////////////////////
+			//
+			// Constructor
+			//
+			////////////////////////////////////////////////////////////////////////////
+			protected PropertyProcessor() {
+				object.addBroadcastListener(new ObjectInfoAddProperties() {
+					@Override
+					public void invoke(ObjectInfo target, List<Property> properties) throws Exception {
+						if (isPropertyTarget(target)) {
+							Property property = createProperty(target);
+							properties.add(property);
+						}
+					}
+				});
+			}
 
-      ////////////////////////////////////////////////////////////////////////////
-      //
-      // Property
-      //
-      ////////////////////////////////////////////////////////////////////////////
-      private final Map<ObjectInfo, Property> m_properties =
-          new WeakHashMap<ObjectInfo, Property>();
+			////////////////////////////////////////////////////////////////////////////
+			//
+			// Property
+			//
+			////////////////////////////////////////////////////////////////////////////
+			private final Map<ObjectInfo, Property> m_properties =
+					new WeakHashMap<ObjectInfo, Property>();
 
-      private Property createProperty(ObjectInfo target) throws Exception {
-        Property property = m_properties.get(target);
-        if (property == null) {
-          property = new ModelProperty(target);
-          property.setCategory(category);
-          m_properties.put(target, property);
-        }
-        return property;
-      }
+			private Property createProperty(ObjectInfo target) throws Exception {
+				Property property = m_properties.get(target);
+				if (property == null) {
+					property = new ModelProperty(target);
+					property.setCategory(category);
+					m_properties.put(target, property);
+				}
+				return property;
+			}
 
-      ////////////////////////////////////////////////////////////////////////////
-      //
-      // Implementation
-      //
-      ////////////////////////////////////////////////////////////////////////////
-      protected abstract boolean isPropertyTarget(ObjectInfo target);
+			////////////////////////////////////////////////////////////////////////////
+			//
+			// Implementation
+			//
+			////////////////////////////////////////////////////////////////////////////
+			protected abstract boolean isPropertyTarget(ObjectInfo target);
 
-      protected abstract Object getValue(ObjectInfo target) throws Exception;
+			protected abstract Object getValue(ObjectInfo target) throws Exception;
 
-      protected abstract void setValue(ObjectInfo target, Object value) throws Exception;
+			protected abstract void setValue(ObjectInfo target, Object value) throws Exception;
 
-      ////////////////////////////////////////////////////////////////////////////
-      //
-      // ModelProperty
-      //
-      ////////////////////////////////////////////////////////////////////////////
-      private class ModelProperty extends Property implements ITypedProperty {
-        private final ObjectInfo target;
+			////////////////////////////////////////////////////////////////////////////
+			//
+			// ModelProperty
+			//
+			////////////////////////////////////////////////////////////////////////////
+			private class ModelProperty extends Property implements ITypedProperty {
+				private final ObjectInfo target;
 
-        ////////////////////////////////////////////////////////////////////////////
-        //
-        // Constructor
-        //
-        ////////////////////////////////////////////////////////////////////////////
-        public ModelProperty(ObjectInfo target) {
-          super(propertyEditor);
-          this.target = target;
-        }
+				////////////////////////////////////////////////////////////////////////////
+				//
+				// Constructor
+				//
+				////////////////////////////////////////////////////////////////////////////
+				public ModelProperty(ObjectInfo target) {
+					super(propertyEditor);
+					this.target = target;
+				}
 
-        ////////////////////////////////////////////////////////////////////////////
-        //
-        // ITypedProperty
-        //
-        ////////////////////////////////////////////////////////////////////////////
-        @Override
-        public Class<?> getType() {
-          return type;
-        }
+				////////////////////////////////////////////////////////////////////////////
+				//
+				// ITypedProperty
+				//
+				////////////////////////////////////////////////////////////////////////////
+				@Override
+				public Class<?> getType() {
+					return type;
+				}
 
-        ////////////////////////////////////////////////////////////////////////////
-        //
-        // Property
-        //
-        ////////////////////////////////////////////////////////////////////////////
-        @Override
-        public String getTitle() {
-          return title;
-        }
+				////////////////////////////////////////////////////////////////////////////
+				//
+				// Property
+				//
+				////////////////////////////////////////////////////////////////////////////
+				@Override
+				public String getTitle() {
+					return title;
+				}
 
-        @Override
-        public boolean isModified() throws Exception {
-          return getValue() != UNKNOWN_VALUE;
-        }
+				@Override
+				public boolean isModified() throws Exception {
+					return getValue() != UNKNOWN_VALUE;
+				}
 
-        @Override
-        public Object getValue() throws Exception {
-          return PropertyProcessor.this.getValue(target);
-        }
+				@Override
+				public Object getValue() throws Exception {
+					return PropertyProcessor.this.getValue(target);
+				}
 
-        @Override
-        public void setValue(Object value) throws Exception {
-          PropertyProcessor.this.setValue(target, value);
-        }
-      }
-    }
-  }
+				@Override
+				public void setValue(Object value) throws Exception {
+					PropertyProcessor.this.setValue(target, value);
+				}
+			}
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/generic/ModelMethodPropertyChildSupport.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/generic/ModelMethodPropertyChildSupport.java
index 0c441a3e9..802cd0eeb 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/generic/ModelMethodPropertyChildSupport.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/generic/ModelMethodPropertyChildSupport.java
@@ -23,75 +23,75 @@
  * @coverage core.model.util
  */
 public final class ModelMethodPropertyChildSupport extends ModelMethodPropertyAbstractSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Installation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Configures given {@link ObjectInfo} to create properties according parameters in description.
-   */
-  public static void install(ObjectInfo object, String prefix) {
-    new ModelMethodPropertyChildSupport(object, prefix).install();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Installation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Configures given {@link ObjectInfo} to create properties according parameters in description.
+	 */
+	public static void install(ObjectInfo object, String prefix) {
+		new ModelMethodPropertyChildSupport(object, prefix).install();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ModelMethodPropertyChildSupport(ObjectInfo object, String prefix) {
-    super(object, prefix);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ModelMethodPropertyChildSupport(ObjectInfo object, String prefix) {
+		super(object, prefix);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Implementation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected ParameterProcessor createParameterProcessor() {
-    return new ParameterProcessor() {
-      private String m_childTypeName;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Implementation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected ParameterProcessor createParameterProcessor() {
+		return new ParameterProcessor() {
+			private String m_childTypeName;
 
-      @Override
-      protected void processParameterPart(String part) throws Exception {
-        super.processParameterPart(part);
-        if (part.startsWith("child=")) {
-          m_childTypeName = StringUtils.removeStart(part, "child=");
-        }
-      }
+			@Override
+			protected void processParameterPart(String part) throws Exception {
+				super.processParameterPart(part);
+				if (part.startsWith("child=")) {
+					m_childTypeName = StringUtils.removeStart(part, "child=");
+				}
+			}
 
-      @Override
-      protected void processGetterSignature() {
-        getterSignature += "(" + m_childTypeName + ")";
-      }
+			@Override
+			protected void processGetterSignature() {
+				getterSignature += "(" + m_childTypeName + ")";
+			}
 
-      @Override
-      protected void processSetterSignature() {
-        setterSignature += "(" + m_childTypeName + ",java.lang.Object)";
-      }
+			@Override
+			protected void processSetterSignature() {
+				setterSignature += "(" + m_childTypeName + ",java.lang.Object)";
+			}
 
-      @Override
-      protected void configureProperty() {
-        new PropertyProcessor() {
-          @Override
-          protected boolean isPropertyTarget(ObjectInfo target) {
-            return target.getParent() == object
-                && getter.getParameterTypes()[0].isAssignableFrom(target.getClass());
-          }
+			@Override
+			protected void configureProperty() {
+				new PropertyProcessor() {
+					@Override
+					protected boolean isPropertyTarget(ObjectInfo target) {
+						return target.getParent() == object
+								&& getter.getParameterTypes()[0].isAssignableFrom(target.getClass());
+					}
 
-          @Override
-          protected Object getValue(ObjectInfo target) throws Exception {
-            return getter.invoke(object, target);
-          }
+					@Override
+					protected Object getValue(ObjectInfo target) throws Exception {
+						return getter.invoke(object, target);
+					}
 
-          @Override
-          protected void setValue(ObjectInfo target, Object value) throws Exception {
-            setter.invoke(object, target, value);
-          }
-        };
-      }
-    };
-  }
+					@Override
+					protected void setValue(ObjectInfo target, Object value) throws Exception {
+						setter.invoke(object, target, value);
+					}
+				};
+			}
+		};
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/generic/ModelMethodPropertySupport.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/generic/ModelMethodPropertySupport.java
index 5c0dffe13..3a6188dd2 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/generic/ModelMethodPropertySupport.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/generic/ModelMethodPropertySupport.java
@@ -21,64 +21,64 @@
  * @coverage core.model.util
  */
 public final class ModelMethodPropertySupport extends ModelMethodPropertyAbstractSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Installation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Configures given {@link ObjectInfo} to create properties according parameters in description.
-   */
-  public static void install(ObjectInfo object, String prefix) {
-    new ModelMethodPropertySupport(object, prefix).install();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Installation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Configures given {@link ObjectInfo} to create properties according parameters in description.
+	 */
+	public static void install(ObjectInfo object, String prefix) {
+		new ModelMethodPropertySupport(object, prefix).install();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ModelMethodPropertySupport(ObjectInfo object, String prefix) {
-    super(object, prefix);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ModelMethodPropertySupport(ObjectInfo object, String prefix) {
+		super(object, prefix);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Implementation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected ParameterProcessor createParameterProcessor() {
-    return new ParameterProcessor() {
-      @Override
-      protected void processGetterSignature() {
-        getterSignature += "()";
-      }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Implementation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected ParameterProcessor createParameterProcessor() {
+		return new ParameterProcessor() {
+			@Override
+			protected void processGetterSignature() {
+				getterSignature += "()";
+			}
 
-      @Override
-      protected void processSetterSignature() {
-        setterSignature += "(java.lang.Object)";
-      }
+			@Override
+			protected void processSetterSignature() {
+				setterSignature += "(java.lang.Object)";
+			}
 
-      @Override
-      protected void configureProperty() {
-        new PropertyProcessor() {
-          @Override
-          protected boolean isPropertyTarget(ObjectInfo target) {
-            return target == object;
-          }
+			@Override
+			protected void configureProperty() {
+				new PropertyProcessor() {
+					@Override
+					protected boolean isPropertyTarget(ObjectInfo target) {
+						return target == object;
+					}
 
-          @Override
-          protected Object getValue(ObjectInfo target) throws Exception {
-            return getter.invoke(object);
-          }
+					@Override
+					protected Object getValue(ObjectInfo target) throws Exception {
+						return getter.invoke(object);
+					}
 
-          @Override
-          protected void setValue(ObjectInfo target, Object value) throws Exception {
-            setter.invoke(object, value);
-          }
-        };
-      }
-    };
-  }
+					@Override
+					protected void setValue(ObjectInfo target, Object value) throws Exception {
+						setter.invoke(object, value);
+					}
+				};
+			}
+		};
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/live/AbstractLiveManager.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/live/AbstractLiveManager.java
index cbab5b159..58dc4b27d 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/live/AbstractLiveManager.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/live/AbstractLiveManager.java
@@ -53,250 +53,250 @@
  * @coverage core.model.util.live
  */
 public abstract class AbstractLiveManager {
-  protected final AbstractComponentInfo m_component;
-  protected final AstEditor m_editor;
-  protected final EditorState m_editorState;
+	protected final AbstractComponentInfo m_component;
+	protected final AstEditor m_editor;
+	protected final EditorState m_editorState;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractLiveManager(AbstractComponentInfo component) {
-    m_component = component;
-    m_editor = component.getEditor();
-    m_editorState = EditorState.get(m_component.getEditor());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractLiveManager(AbstractComponentInfo component) {
+		m_component = component;
+		m_editor = component.getEditor();
+		m_editorState = EditorState.get(m_component.getEditor());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the filled {@link ILiveCacheEntry} instance. Creates "live" component, fill cache entry
-   *         and removes "live" component.
-   */
-  protected final ILiveCacheEntry createCacheEntry() {
-    try {
-      return createCacheEntryEx();
-    } catch (Throwable e) {
-      e = DesignerExceptionUtils.getDesignerCause(e);
-      DesignerPlugin.log(e);
-      return createComponentCacheEntryEx(e);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the filled {@link ILiveCacheEntry} instance. Creates "live" component, fill cache entry
+	 *         and removes "live" component.
+	 */
+	protected final ILiveCacheEntry createCacheEntry() {
+		try {
+			return createCacheEntryEx();
+		} catch (Throwable e) {
+			e = DesignerExceptionUtils.getDesignerCause(e);
+			DesignerPlugin.log(e);
+			return createComponentCacheEntryEx(e);
+		}
+	}
 
-  private ILiveCacheEntry createCacheEntryEx() throws Exception {
-    BroadcastSupport oldBroadcast = m_editorState.getBroadcast();
-    JavaInfoResolver oldResolver = m_editorState.getJavaInfoResolver();
-    JavaInfo oldActiveObject = (JavaInfo) GlobalState.getActiveObject();
-    oldBroadcast.getListener(DisplayEventListener.class).beforeMessagesLoop();
-    //
-    ExecutionFlowDescription old_flowDescription = m_editorState.getFlowDescription();
-    AbstractComponentInfo liveComponentInfo = null;
-    try {
-      m_editorState.setBroadcastSupport(new BroadcastSupport());
-      m_editorState.setLiveComponent(true);
-      m_editor.setResolveImports(false);
-      // create component model
-      liveComponentInfo = createLiveComponent();
-      JavaInfo root = liveComponentInfo.getRootJava();
-      // finish edit operation
-      root.endEdit();
-      // fill cache
-      return createComponentCacheEntry(liveComponentInfo);
-    } finally {
-      // do clean up
-      cleanupLiveComponent(liveComponentInfo);
-      m_editorState.setLiveComponent(false);
-      m_editorState.setBroadcastSupport(oldBroadcast);
-      m_editorState.setJavaInfoResolver(oldResolver);
-      m_editorState.setFlowDescription(old_flowDescription);
-      GlobalStateJava.activate(oldActiveObject);
-      m_editor.setResolveImports(true);
-      if (m_tmpType != null) {
-        m_editor.removeBodyDeclaration(m_tmpType);
-        m_editor.commitChanges();
-      }
-      // we finished inner operation
-      oldBroadcast.getListener(DisplayEventListener.class).afterMessagesLoop();
-    }
-  }
+	private ILiveCacheEntry createCacheEntryEx() throws Exception {
+		BroadcastSupport oldBroadcast = m_editorState.getBroadcast();
+		JavaInfoResolver oldResolver = m_editorState.getJavaInfoResolver();
+		JavaInfo oldActiveObject = (JavaInfo) GlobalState.getActiveObject();
+		oldBroadcast.getListener(DisplayEventListener.class).beforeMessagesLoop();
+		//
+		ExecutionFlowDescription old_flowDescription = m_editorState.getFlowDescription();
+		AbstractComponentInfo liveComponentInfo = null;
+		try {
+			m_editorState.setBroadcastSupport(new BroadcastSupport());
+			m_editorState.setLiveComponent(true);
+			m_editor.setResolveImports(false);
+			// create component model
+			liveComponentInfo = createLiveComponent();
+			JavaInfo root = liveComponentInfo.getRootJava();
+			// finish edit operation
+			root.endEdit();
+			// fill cache
+			return createComponentCacheEntry(liveComponentInfo);
+		} finally {
+			// do clean up
+			cleanupLiveComponent(liveComponentInfo);
+			m_editorState.setLiveComponent(false);
+			m_editorState.setBroadcastSupport(oldBroadcast);
+			m_editorState.setJavaInfoResolver(oldResolver);
+			m_editorState.setFlowDescription(old_flowDescription);
+			GlobalStateJava.activate(oldActiveObject);
+			m_editor.setResolveImports(true);
+			if (m_tmpType != null) {
+				m_editor.removeBodyDeclaration(m_tmpType);
+				m_editor.commitChanges();
+			}
+			// we finished inner operation
+			oldBroadcast.getListener(DisplayEventListener.class).afterMessagesLoop();
+		}
+	}
 
-  /**
-   * @return the key for storing cached {@link Object}.
-   */
-  protected String getKey() {
-    return m_component.getCreationSupport().toString();
-  }
+	/**
+	 * @return the key for storing cached {@link Object}.
+	 */
+	protected String getKey() {
+		return m_component.getCreationSupport().toString();
+	}
 
-  /**
-   * @return the {@link AbstractComponentInfo} of "live component" after parsing.
-   */
-  protected abstract AbstractComponentInfo createLiveComponent() throws Exception;
+	/**
+	 * @return the {@link AbstractComponentInfo} of "live component" after parsing.
+	 */
+	protected abstract AbstractComponentInfo createLiveComponent() throws Exception;
 
-  /**
-   * Does some clean up for "live" component created earlier.
-   */
-  protected void cleanupLiveComponent(AbstractComponentInfo liveComponentInfo) throws Exception {
-    if (liveComponentInfo != null) {
-      liveComponentInfo.getRoot().refresh_dispose();
-    }
-  }
+	/**
+	 * Does some clean up for "live" component created earlier.
+	 */
+	protected void cleanupLiveComponent(AbstractComponentInfo liveComponentInfo) throws Exception {
+		if (liveComponentInfo != null) {
+			liveComponentInfo.getRoot().refresh_dispose();
+		}
+	}
 
-  /**
-   * Creates {@link ILiveCacheEntry} instance and fills it with required data.
-   */
-  protected abstract ILiveCacheEntry createComponentCacheEntry(AbstractComponentInfo liveComponentInfo);
+	/**
+	 * Creates {@link ILiveCacheEntry} instance and fills it with required data.
+	 */
+	protected abstract ILiveCacheEntry createComponentCacheEntry(AbstractComponentInfo liveComponentInfo);
 
-  /**
-   * Creates {@link ILiveCacheEntry} instance when exception happens.
-   */
-  protected abstract ILiveCacheEntry createComponentCacheEntryEx(Throwable e);
+	/**
+	 * Creates {@link ILiveCacheEntry} instance when exception happens.
+	 */
+	protected abstract ILiveCacheEntry createComponentCacheEntryEx(Throwable e);
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private TypeDeclaration m_tmpType;
-  private MethodDeclaration m_method;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private TypeDeclaration m_tmpType;
+	private MethodDeclaration m_method;
 
-  /**
-   * Parses given statements source in temporary type/method, but in same {@link AstEditor}, so with
-   * same {@link EditorState}, {@link ClassLoader}, etc. Ensures that new parsed {@link JavaInfo}
-   * hierarchy does not interacts with "main" hierarchy.
-   *
-   * @param sourceLines
-   *          that source for {@link Statement}'s to parse.
-   *
-   * @return the root {@link JavaInfo} for parsed source.
-   */
-  protected final JavaInfo parse(String[] sourceLines) throws Exception {
-    // prepare target type
-    TypeDeclaration typeDeclaration = (TypeDeclaration) m_editor.getAstUnit().types().get(0);
-    // create method
-    m_tmpType =
-        m_editor.addTypeDeclaration(
-            ImmutableList.of("private static class __Tmp {", "}"),
-            new BodyDeclarationTarget(typeDeclaration, false));
-    m_method =
-        m_editor.addMethodDeclaration(
-            "private static void __tmp()",
-            ImmutableList.copyOf(sourceLines),
-            new BodyDeclarationTarget(m_tmpType, false));
-    m_editorState.setFlowDescription(new ExecutionFlowDescription(m_method));
-    // parse created method
-    JavaInfo root = JavaInfoParser.parse(m_editor, m_method);
-    root.startEdit();
-    root.putArbitraryValue(JavaInfo.FLAG_DONT_COMMIT_EDITOR, Boolean.TRUE);
-    return root;
-  }
+	/**
+	 * Parses given statements source in temporary type/method, but in same {@link AstEditor}, so with
+	 * same {@link EditorState}, {@link ClassLoader}, etc. Ensures that new parsed {@link JavaInfo}
+	 * hierarchy does not interacts with "main" hierarchy.
+	 *
+	 * @param sourceLines
+	 *          that source for {@link Statement}'s to parse.
+	 *
+	 * @return the root {@link JavaInfo} for parsed source.
+	 */
+	protected final JavaInfo parse(String[] sourceLines) throws Exception {
+		// prepare target type
+		TypeDeclaration typeDeclaration = (TypeDeclaration) m_editor.getAstUnit().types().get(0);
+		// create method
+		m_tmpType =
+				m_editor.addTypeDeclaration(
+						ImmutableList.of("private static class __Tmp {", "}"),
+						new BodyDeclarationTarget(typeDeclaration, false));
+		m_method =
+				m_editor.addMethodDeclaration(
+						"private static void __tmp()",
+						ImmutableList.copyOf(sourceLines),
+						new BodyDeclarationTarget(m_tmpType, false));
+		m_editorState.setFlowDescription(new ExecutionFlowDescription(m_method));
+		// parse created method
+		JavaInfo root = JavaInfoParser.parse(m_editor, m_method);
+		root.startEdit();
+		root.putArbitraryValue(JavaInfo.FLAG_DONT_COMMIT_EDITOR, Boolean.TRUE);
+		return root;
+	}
 
-  /**
-   * @return the {@link Image} to use as "live" for given {@link Throwable}.
-   */
-  protected static Image createImageForException(Throwable e) {
-    int width = 200;
-    int height = 50;
-    Image image = new Image(null, width, height);
-    GC gc = new GC(image);
-    try {
-      gc.setBackground(SwtResourceManager.getColor(255, 220, 220));
-      gc.fillRectangle(0, 0, width, height);
-      String text = ModelMessages.AbstractLiveManager_errorMessage;
-      DrawUtils.drawTextWrap(gc, text, 0, 0, width, height);
-    } finally {
-      gc.dispose();
-    }
-    return image;
-  }
+	/**
+	 * @return the {@link Image} to use as "live" for given {@link Throwable}.
+	 */
+	protected static Image createImageForException(Throwable e) {
+		int width = 200;
+		int height = 50;
+		Image image = new Image(null, width, height);
+		GC gc = new GC(image);
+		try {
+			gc.setBackground(SwtResourceManager.getColor(255, 220, 220));
+			gc.fillRectangle(0, 0, width, height);
+			String text = ModelMessages.AbstractLiveManager_errorMessage;
+			DrawUtils.drawTextWrap(gc, text, 0, 0, width, height);
+		} finally {
+			gc.dispose();
+		}
+		return image;
+	}
 
-  /**
-   * @return the {@link JavaInfo} cloned from original component.
-   */
-  protected final <T extends JavaInfo> T createClone() throws Exception {
-    CreationSupport creationSupport =
-        ((ILiveCreationSupport) m_component.getCreationSupport()).getLiveComponentCreation();
-    @SuppressWarnings("unchecked")
-    T clone =
-        (T) JavaInfoUtils.createJavaInfo(m_editor, m_component.getDescription(), creationSupport);
-    // copy generics arguments
-    clone.putTemplateArguments(m_component.getTemplateArguments());
-    // clone ready
-    return clone;
-  }
+	/**
+	 * @return the {@link JavaInfo} cloned from original component.
+	 */
+	protected final <T extends JavaInfo> T createClone() throws Exception {
+		CreationSupport creationSupport =
+				((ILiveCreationSupport) m_component.getCreationSupport()).getLiveComponentCreation();
+		@SuppressWarnings("unchecked")
+		T clone =
+		(T) JavaInfoUtils.createJavaInfo(m_editor, m_component.getDescription(), creationSupport);
+		// copy generics arguments
+		clone.putTemplateArguments(m_component.getTemplateArguments());
+		// clone ready
+		return clone;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Cached info
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the cached {@link ILiveCacheEntry} for this component. If no cached entry found then it
-   *         creates one.
-   */
-  protected final ILiveCacheEntry getCachedEntry() {
-    // check for static cache (only for constructor creation)
-    if (m_component.getDescription().isCached()
-        && m_component.getCreationSupport() instanceof ConstructorCreationSupport) {
-      Map<String, ILiveCacheEntry> cache = getStaticCache();
-      return getCachedEntry(cache, false);
-    }
-    // use for editor cache
-    {
-      Map<String, ILiveCacheEntry> cache = getEditorCache();
-      return getCachedEntry(cache, true);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Cached info
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the cached {@link ILiveCacheEntry} for this component. If no cached entry found then it
+	 *         creates one.
+	 */
+	protected final ILiveCacheEntry getCachedEntry() {
+		// check for static cache (only for constructor creation)
+		if (m_component.getDescription().isCached()
+				&& m_component.getCreationSupport() instanceof ConstructorCreationSupport) {
+			Map<String, ILiveCacheEntry> cache = getStaticCache();
+			return getCachedEntry(cache, false);
+		}
+		// use for editor cache
+		{
+			Map<String, ILiveCacheEntry> cache = getEditorCache();
+			return getCachedEntry(cache, true);
+		}
+	}
 
-  /**
-   * @return the cached {@link ILiveCacheEntry} for this component using specified cache. If no
-   *         cached entry found then it creates one.
-   */
-  private ILiveCacheEntry getCachedEntry(Map<String, ILiveCacheEntry> cache,
-      boolean disposeWithEditor) {
-    String key = getKey();
-    // get/put entry from cache
-    ILiveCacheEntry entry = cache.get(key);
-    if (entry == null) {
-      entry = createCacheEntry();
-      cache.put(key, entry);
-      // schedule for dispose if needed
-      if (disposeWithEditor) {
-        EditorState.get(m_editor).addDisposable(entry);
-      }
-    }
-    return entry;
-  }
+	/**
+	 * @return the cached {@link ILiveCacheEntry} for this component using specified cache. If no
+	 *         cached entry found then it creates one.
+	 */
+	private ILiveCacheEntry getCachedEntry(Map<String, ILiveCacheEntry> cache,
+			boolean disposeWithEditor) {
+		String key = getKey();
+		// get/put entry from cache
+		ILiveCacheEntry entry = cache.get(key);
+		if (entry == null) {
+			entry = createCacheEntry();
+			cache.put(key, entry);
+			// schedule for dispose if needed
+			if (disposeWithEditor) {
+				EditorState.get(m_editor).addDisposable(entry);
+			}
+		}
+		return entry;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Caching
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final Map<String, ILiveCacheEntry> m_staticCache = Maps.newHashMap();
-  private static final String EDITOR_CACHE_KEY = "LIVE_CACHE";
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Caching
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final Map<String, ILiveCacheEntry> m_staticCache = Maps.newHashMap();
+	private static final String EDITOR_CACHE_KEY = "LIVE_CACHE";
 
-  /**
-   * @return the static level cache {@link Map}.
-   */
-  protected final Map<String, ILiveCacheEntry> getStaticCache() {
-    return m_staticCache;
-  }
+	/**
+	 * @return the static level cache {@link Map}.
+	 */
+	protected final Map<String, ILiveCacheEntry> getStaticCache() {
+		return m_staticCache;
+	}
 
-  /**
-   * @return the {@link AstEditor} level cache {@link Map}.
-   */
-  @SuppressWarnings("unchecked")
-  protected final Map<String, ILiveCacheEntry> getEditorCache() {
-    Map<String, ILiveCacheEntry> cache =
-        (Map<String, ILiveCacheEntry>) m_component.getEditor().getGlobalValue(EDITOR_CACHE_KEY);
-    if (cache == null) {
-      cache = Maps.newHashMap();
-      m_component.getEditor().putGlobalValue(EDITOR_CACHE_KEY, cache);
-    }
-    return cache;
-  }
+	/**
+	 * @return the {@link AstEditor} level cache {@link Map}.
+	 */
+	@SuppressWarnings("unchecked")
+	protected final Map<String, ILiveCacheEntry> getEditorCache() {
+		Map<String, ILiveCacheEntry> cache =
+				(Map<String, ILiveCacheEntry>) m_component.getEditor().getGlobalValue(EDITOR_CACHE_KEY);
+		if (cache == null) {
+			cache = Maps.newHashMap();
+			m_component.getEditor().putGlobalValue(EDITOR_CACHE_KEY, cache);
+		}
+		return cache;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/predicate/ComponentSubclassPredicate.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/predicate/ComponentSubclassPredicate.java
index 3d913546c..bbf95aa84 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/predicate/ComponentSubclassPredicate.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/predicate/ComponentSubclassPredicate.java
@@ -23,39 +23,39 @@
  * @coverage core.model.util
  */
 public final class ComponentSubclassPredicate implements Predicate<Object> {
-  private final String m_superClass;
+	private final String m_superClass;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ComponentSubclassPredicate(String superClass) {
-    m_superClass = superClass;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ComponentSubclassPredicate(String superClass) {
+		m_superClass = superClass;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    return m_superClass;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		return m_superClass;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Predicate
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean apply(Object t) {
-    if (t instanceof JavaInfo) {
-      JavaInfo javaInfo = (JavaInfo) t;
-      Class<?> componentClass = javaInfo.getDescription().getComponentClass();
-      return ReflectionUtils.isSuccessorOf(componentClass, m_superClass);
-    }
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Predicate
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean apply(Object t) {
+		if (t instanceof JavaInfo) {
+			JavaInfo javaInfo = (JavaInfo) t;
+			Class<?> componentClass = javaInfo.getDescription().getComponentClass();
+			return ReflectionUtils.isSuccessorOf(componentClass, m_superClass);
+		}
+		return false;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/surround/ISurroundProcessor.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/surround/ISurroundProcessor.java
index 36d9f1f94..fc62c78ea 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/surround/ISurroundProcessor.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/surround/ISurroundProcessor.java
@@ -29,13 +29,13 @@
  * @coverage core.model.util
  */
 public interface ISurroundProcessor<C extends IAbstractComponentInfo, T extends IAbstractComponentInfo> {
-  /**
-   * @return the <code>true</code> if this {@link ISurroundProcessor} wants to perform move
-   *         operation.
-   */
-  boolean filter(C sourceContainer, C targetContainer) throws Exception;
-  /**
-   * Moves components from source to target container.
-   */
-  void move(C sourceContainer, C targetContainer, List<T> components) throws Exception;
+	/**
+	 * @return the <code>true</code> if this {@link ISurroundProcessor} wants to perform move
+	 *         operation.
+	 */
+	boolean filter(C sourceContainer, C targetContainer) throws Exception;
+	/**
+	 * Moves components from source to target container.
+	 */
+	void move(C sourceContainer, C targetContainer, List<T> components) throws Exception;
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/surround/ISurroundTarget.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/surround/ISurroundTarget.java
index d68421051..d09e4c86b 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/surround/ISurroundTarget.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/surround/ISurroundTarget.java
@@ -27,77 +27,77 @@
  * @coverage core.model.util
  */
 public abstract class ISurroundTarget<C extends IAbstractComponentInfo, T extends IAbstractComponentInfo> {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the text to display for user. This can be some static text, variable name, etc.
-   */
-  public abstract String getText(AstEditor editor) throws Exception;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the text to display for user. This can be some static text, variable name, etc.
+	 */
+	public abstract String getText(AstEditor editor) throws Exception;
 
-  /**
-   * @return the icon to display for user.
-   */
-  public abstract Image getIcon(AstEditor editor) throws Exception;
+	/**
+	 * @return the icon to display for user.
+	 */
+	public abstract Image getIcon(AstEditor editor) throws Exception;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Validation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if given components can be surrounded by this target. For example
-   *         {@link JSplitPane} can accept at max two components, so returns <code>false</code>, if
-   *         number of components is greater than two.
-   */
-  public boolean validate(List<T> components) throws Exception {
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Validation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if given components can be surrounded by this target. For example
+	 *         {@link JSplitPane} can accept at max two components, so returns <code>false</code>, if
+	 *         number of components is greater than two.
+	 */
+	public boolean validate(List<T> components) throws Exception {
+		return true;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Operation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the new target container to move components on.
-   */
-  public abstract C createContainer(AstEditor editor) throws Exception;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Operation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the new target container to move components on.
+	 */
+	public abstract C createContainer(AstEditor editor) throws Exception;
 
-  /**
-   * Initializes container after adding it to the components hierarchy.
-   *
-   * @param container
-   *          the target container.
-   * @param components
-   *          the components that should be moved later. We can initialize target container
-   *          differently, depending on components count/type.
-   */
-  public void afterContainerAdd(C container, List<T> components) throws Exception {
-  }
+	/**
+	 * Initializes container after adding it to the components hierarchy.
+	 *
+	 * @param container
+	 *          the target container.
+	 * @param components
+	 *          the components that should be moved later. We can initialize target container
+	 *          differently, depending on components count/type.
+	 */
+	public void afterContainerAdd(C container, List<T> components) throws Exception {
+	}
 
-  /**
-   * Initializes container before moving components on this container using
-   * {@link #move(AbstractComponentInfo, AbstractComponentInfo)}.
-   *
-   * @param container
-   *          the target container.
-   * @param components
-   *          the components that will be moved later. We can initialize target container
-   *          differently, depending on components count/type.
-   */
-  public void beforeComponentsMove(C container, List<T> components) throws Exception {
-  }
+	/**
+	 * Initializes container before moving components on this container using
+	 * {@link #move(AbstractComponentInfo, AbstractComponentInfo)}.
+	 *
+	 * @param container
+	 *          the target container.
+	 * @param components
+	 *          the components that will be moved later. We can initialize target container
+	 *          differently, depending on components count/type.
+	 */
+	public void beforeComponentsMove(C container, List<T> components) throws Exception {
+	}
 
-  /**
-   * Moves component to target container.
-   *
-   * @param container
-   *          the target container.
-   * @param component
-   *          the component to move on target container.
-   */
-  public abstract void move(C container, T component) throws Exception;
+	/**
+	 * Moves component to target container.
+	 *
+	 * @param container
+	 *          the target container.
+	 * @param component
+	 *          the component to move on target container.
+	 */
+	public abstract void move(C container, T component) throws Exception;
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/surround/SurroundSupport.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/surround/SurroundSupport.java
index c5e891a6c..f4d6c6850 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/surround/SurroundSupport.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/util/surround/SurroundSupport.java
@@ -41,250 +41,250 @@
  * @coverage core.model.util
  */
 public abstract class SurroundSupport<C extends AbstractComponentInfo, T extends AbstractComponentInfo> {
-  private static final String SURROUND_POINT = "org.eclipse.wb.core.surroundWith";
-  private final C m_sourceContainer;
-  private final Class<T> m_componentClass;
+	private static final String SURROUND_POINT = "org.eclipse.wb.core.surroundWith";
+	private final C m_sourceContainer;
+	private final Class<T> m_componentClass;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SurroundSupport(C sourceContainer, Class<T> componentClass) {
-    m_sourceContainer = sourceContainer;
-    m_componentClass = componentClass;
-    m_sourceContainer.addBroadcastListener(new ObjectEventListener() {
-      @Override
-      public void addContextMenu(List<? extends ObjectInfo> objects,
-          ObjectInfo object,
-          IMenuManager manager) throws Exception {
-        if (objects != null && object != null) {
-          boolean shouldExecute = objects.indexOf(object) == 0;
-          addSurroundMenu(objects, shouldExecute, manager);
-        }
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SurroundSupport(C sourceContainer, Class<T> componentClass) {
+		m_sourceContainer = sourceContainer;
+		m_componentClass = componentClass;
+		m_sourceContainer.addBroadcastListener(new ObjectEventListener() {
+			@Override
+			public void addContextMenu(List<? extends ObjectInfo> objects,
+					ObjectInfo object,
+					IMenuManager manager) throws Exception {
+				if (objects != null && object != null) {
+					boolean shouldExecute = objects.indexOf(object) == 0;
+					addSurroundMenu(objects, shouldExecute, manager);
+				}
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Menu
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Prepares components to surround, appends <code>"Surround"</code> {@link IMenuManager} with
-   * separate actions for each possible target surround container.
-   */
-  @SuppressWarnings("unchecked")
-  private void addSurroundMenu(List<? extends ObjectInfo> objects,
-      boolean shouldExecute,
-      IMenuManager manager) throws Exception {
-    if (objects.isEmpty()) {
-      return;
-    }
-    if (!isActive()) {
-      return;
-    }
-    // prepare selected components
-    Set<T> selectedComponents = Sets.newHashSet();
-    for (ObjectInfo selectedObject : objects) {
-      // only components of source container
-      if (selectedObject.getParent() != m_sourceContainer) {
-        return;
-      }
-      // only components of valid type
-      if (!m_componentClass.isAssignableFrom(selectedObject.getClass())) {
-        return;
-      }
-      // OK, add this component
-      T component = (T) selectedObject;
-      selectedComponents.add(component);
-    }
-    // sort components to be in same order, as in source container
-    List<T> sortedComponents = Lists.newArrayList();
-    for (ObjectInfo component : m_sourceContainer.getChildren()) {
-      if (selectedComponents.contains(component)) {
-        sortedComponents.add((T) component);
-      }
-    }
-    // validate
-    if (!validateComponents(sortedComponents)) {
-      return;
-    }
-    // add "Surround with" sub-menu
-    MenuManagerEx surroundManager;
-    {
-      surroundManager = new MenuManagerEx(ModelMessages.SurroundSupport_surorundManager);
-      surroundManager.setImage(DesignerPlugin.getImage("actions/surround/surround.png"));
-      manager.appendToGroup(IContextMenuConstants.GROUP_CONSTRAINTS, surroundManager);
-    }
-    // add actions
-    addSurroundActions(surroundManager, sortedComponents);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Menu
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Prepares components to surround, appends <code>"Surround"</code> {@link IMenuManager} with
+	 * separate actions for each possible target surround container.
+	 */
+	@SuppressWarnings("unchecked")
+	private void addSurroundMenu(List<? extends ObjectInfo> objects,
+			boolean shouldExecute,
+			IMenuManager manager) throws Exception {
+		if (objects.isEmpty()) {
+			return;
+		}
+		if (!isActive()) {
+			return;
+		}
+		// prepare selected components
+		Set<T> selectedComponents = Sets.newHashSet();
+		for (ObjectInfo selectedObject : objects) {
+			// only components of source container
+			if (selectedObject.getParent() != m_sourceContainer) {
+				return;
+			}
+			// only components of valid type
+			if (!m_componentClass.isAssignableFrom(selectedObject.getClass())) {
+				return;
+			}
+			// OK, add this component
+			T component = (T) selectedObject;
+			selectedComponents.add(component);
+		}
+		// sort components to be in same order, as in source container
+		List<T> sortedComponents = Lists.newArrayList();
+		for (ObjectInfo component : m_sourceContainer.getChildren()) {
+			if (selectedComponents.contains(component)) {
+				sortedComponents.add((T) component);
+			}
+		}
+		// validate
+		if (!validateComponents(sortedComponents)) {
+			return;
+		}
+		// add "Surround with" sub-menu
+		MenuManagerEx surroundManager;
+		{
+			surroundManager = new MenuManagerEx(ModelMessages.SurroundSupport_surorundManager);
+			surroundManager.setImage(DesignerPlugin.getImage("actions/surround/surround.png"));
+			manager.appendToGroup(IContextMenuConstants.GROUP_CONSTRAINTS, surroundManager);
+		}
+		// add actions
+		addSurroundActions(surroundManager, sortedComponents);
+	}
 
-  /**
-   * Adds separate actions for each possible target surround container.
-   */
-  private void addSurroundActions(MenuManagerEx surroundManager, List<T> components)
-      throws Exception {
-    List<IConfigurationElement> elements =
-        ExternalFactoriesHelper.getElements(SURROUND_POINT, "target");
-    String sourceToolkitID = m_sourceContainer.getDescription().getToolkit().getId();
-    for (IConfigurationElement element : elements) {
-      if (ExternalFactoriesHelper.getRequiredAttribute(element, "toolkit").equals(sourceToolkitID)) {
-        ISurroundTarget<C, T> target =
-            ExternalFactoriesHelper.createExecutableExtension(element, "class");
-        if (target.validate(components)) {
-          surroundManager.add(new SurroundAction(components, target));
-        }
-      }
-    }
-  }
+	/**
+	 * Adds separate actions for each possible target surround container.
+	 */
+	private void addSurroundActions(MenuManagerEx surroundManager, List<T> components)
+			throws Exception {
+		List<IConfigurationElement> elements =
+				ExternalFactoriesHelper.getElements(SURROUND_POINT, "target");
+		String sourceToolkitID = m_sourceContainer.getDescription().getToolkit().getId();
+		for (IConfigurationElement element : elements) {
+			if (ExternalFactoriesHelper.getRequiredAttribute(element, "toolkit").equals(sourceToolkitID)) {
+				ISurroundTarget<C, T> target =
+						ExternalFactoriesHelper.createExecutableExtension(element, "class");
+				if (target.validate(components)) {
+					surroundManager.add(new SurroundAction(components, target));
+				}
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Action
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Action for single {@link ISurroundTarget}.
-   */
-  private class SurroundAction extends ObjectInfoAction implements IActionSingleton {
-    private final List<T> m_components;
-    private final ISurroundTarget<C, T> m_target;
-    private final AstEditor m_editor;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Action
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Action for single {@link ISurroundTarget}.
+	 */
+	private class SurroundAction extends ObjectInfoAction implements IActionSingleton {
+		private final List<T> m_components;
+		private final ISurroundTarget<C, T> m_target;
+		private final AstEditor m_editor;
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public SurroundAction(List<T> components, ISurroundTarget<C, T> target) throws Exception {
-      super(m_sourceContainer);
-      m_components = components;
-      m_target = target;
-      m_editor = m_sourceContainer.getEditor();
-      // presentation
-      setText(m_target.getText(m_editor));
-      setIcon(m_target.getIcon(m_editor));
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public SurroundAction(List<T> components, ISurroundTarget<C, T> target) throws Exception {
+			super(m_sourceContainer);
+			m_components = components;
+			m_target = target;
+			m_editor = m_sourceContainer.getEditor();
+			// presentation
+			setText(m_target.getText(m_editor));
+			setIcon(m_target.getIcon(m_editor));
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Run
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    protected void runEx() throws Exception {
-      // prepare container
-      final C container;
-      {
-        container = m_target.createContainer(m_editor);
-        addContainer(container, m_components);
-        m_target.afterContainerAdd(container, m_components);
-      }
-      // do refresh
-      {
-        ObjectInfo rootObject = container.getRoot();
-        // disable refreshed() to avoid conflict with UndoManager
-        rootObject.putArbitraryValue(ObjectInfo.KEY_NO_REFRESHED_BROADCAST, Boolean.FALSE);
-        try {
-          rootObject.refresh();
-        } finally {
-          rootObject.removeArbitraryValue(ObjectInfo.KEY_NO_REFRESHED_BROADCAST);
-        }
-      }
-      // do move
-      moveComponents(container);
-      moveDone(container, m_components);
-      ExecutionUtils.runLogLater(new RunnableEx() {
-        @Override
-        public void run() throws Exception {
-          container.getBroadcastObject().select(ImmutableList.of(container));
-        }
-      });
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Run
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		protected void runEx() throws Exception {
+			// prepare container
+			final C container;
+			{
+				container = m_target.createContainer(m_editor);
+				addContainer(container, m_components);
+				m_target.afterContainerAdd(container, m_components);
+			}
+			// do refresh
+			{
+				ObjectInfo rootObject = container.getRoot();
+				// disable refreshed() to avoid conflict with UndoManager
+				rootObject.putArbitraryValue(ObjectInfo.KEY_NO_REFRESHED_BROADCAST, Boolean.FALSE);
+				try {
+					rootObject.refresh();
+				} finally {
+					rootObject.removeArbitraryValue(ObjectInfo.KEY_NO_REFRESHED_BROADCAST);
+				}
+			}
+			// do move
+			moveComponents(container);
+			moveDone(container, m_components);
+			ExecutionUtils.runLogLater(new RunnableEx() {
+				@Override
+				public void run() throws Exception {
+					container.getBroadcastObject().select(ImmutableList.of(container));
+				}
+			});
+		}
 
-    private void moveComponents(C container) throws Exception {
-      // try to move using ISurroundProcessor
-      for (ISurroundProcessor<C, T> processor : getSurroundProcessors()) {
-        if (processor.filter(m_sourceContainer, container)) {
-          processor.move(m_sourceContainer, container, m_components);
-          return;
-        }
-      }
-      // move components using default ISurroundTarget behavior
-      m_target.beforeComponentsMove(container, m_components);
-      for (T component : m_components) {
-        moveComponent(m_target, container, component);
-      }
-    }
-  }
+		private void moveComponents(C container) throws Exception {
+			// try to move using ISurroundProcessor
+			for (ISurroundProcessor<C, T> processor : getSurroundProcessors()) {
+				if (processor.filter(m_sourceContainer, container)) {
+					processor.move(m_sourceContainer, container, m_components);
+					return;
+				}
+			}
+			// move components using default ISurroundTarget behavior
+			m_target.beforeComponentsMove(container, m_components);
+			for (T component : m_components) {
+				moveComponent(m_target, container, component);
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if this {@link SurroundSupport} is active, for example layout manager
-   *         should check if it is still active on its container.
-   */
-  protected boolean isActive() {
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if this {@link SurroundSupport} is active, for example layout manager
+	 *         should check if it is still active on its container.
+	 */
+	protected boolean isActive() {
+		return true;
+	}
 
-  /**
-   * Performs validation for selected/sorted components.
-   *
-   * @return <code>true</code> if components are valid and can be used to extract from source
-   *         container.
-   */
-  protected boolean validateComponents(List<T> components) throws Exception {
-    return true;
-  }
+	/**
+	 * Performs validation for selected/sorted components.
+	 *
+	 * @return <code>true</code> if components are valid and can be used to extract from source
+	 *         container.
+	 */
+	protected boolean validateComponents(List<T> components) throws Exception {
+		return true;
+	}
 
-  /**
-   * Adds newly created container into appropriate location (usually source container).
-   */
-  protected abstract void addContainer(C container, List<T> components) throws Exception;
+	/**
+	 * Adds newly created container into appropriate location (usually source container).
+	 */
+	protected abstract void addContainer(C container, List<T> components) throws Exception;
 
-  /**
-   * Moves given component into new container.
-   */
-  protected void moveComponent(ISurroundTarget<C, T> target, C container, T component)
-      throws Exception {
-    target.move(container, component);
-  }
+	/**
+	 * Moves given component into new container.
+	 */
+	protected void moveComponent(ISurroundTarget<C, T> target, C container, T component)
+			throws Exception {
+		target.move(container, component);
+	}
 
-  /**
-   * Notifies that all components were moved.
-   */
-  protected void moveDone(C container, List<T> components) throws Exception {
-  }
+	/**
+	 * Notifies that all components were moved.
+	 */
+	protected void moveDone(C container, List<T> components) throws Exception {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link ISurroundProcessor}'s registered for source toolkit.
-   */
-  private List<ISurroundProcessor<C, T>> getSurroundProcessors() {
-    List<ISurroundProcessor<C, T>> typedProcessors = Lists.newArrayList();
-    //
-    List<IConfigurationElement> elements =
-        ExternalFactoriesHelper.getElements(SURROUND_POINT, "processor");
-    String sourceToolkitID = m_sourceContainer.getDescription().getToolkit().getId();
-    for (IConfigurationElement element : elements) {
-      if (ExternalFactoriesHelper.getRequiredAttribute(element, "toolkit").equals(sourceToolkitID)) {
-        ISurroundProcessor<C, T> processor =
-            ExternalFactoriesHelper.createExecutableExtension(element, "class");
-        typedProcessors.add(processor);
-      }
-    }
-    //
-    return typedProcessors;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link ISurroundProcessor}'s registered for source toolkit.
+	 */
+	private List<ISurroundProcessor<C, T>> getSurroundProcessors() {
+		List<ISurroundProcessor<C, T>> typedProcessors = Lists.newArrayList();
+		//
+		List<IConfigurationElement> elements =
+				ExternalFactoriesHelper.getElements(SURROUND_POINT, "processor");
+		String sourceToolkitID = m_sourceContainer.getDescription().getToolkit().getId();
+		for (IConfigurationElement element : elements) {
+			if (ExternalFactoriesHelper.getRequiredAttribute(element, "toolkit").equals(sourceToolkitID)) {
+				ISurroundProcessor<C, T> processor =
+						ExternalFactoriesHelper.createExecutableExtension(element, "class");
+				typedProcessors.add(processor);
+			}
+		}
+		//
+		return typedProcessors;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/AbstractImplicitVariableSupport.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/AbstractImplicitVariableSupport.java
index 73053e9d4..9a3c89169 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/AbstractImplicitVariableSupport.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/AbstractImplicitVariableSupport.java
@@ -28,100 +28,100 @@
  * @coverage core.model.variable
  */
 public abstract class AbstractImplicitVariableSupport extends AbstractNoNameVariableSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractImplicitVariableSupport(JavaInfo javaInfo) {
-    super(javaInfo);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractImplicitVariableSupport(JavaInfo javaInfo) {
+		super(javaInfo);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Expressions
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean hasExpression(NodeTarget target) {
-    // we materialize using LocalUniqueVariableSupport, so will have expression
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Expressions
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean hasExpression(NodeTarget target) {
+		// we materialize using LocalUniqueVariableSupport, so will have expression
+		return true;
+	}
 
-  @Override
-  public final String getReferenceExpression(NodeTarget target) throws Exception {
-    VariableSupport localVariable = ensureLocalVariable();
-    updateTarget_ifWasAfterParentStatement(target);
-    return localVariable.getReferenceExpression(target);
-  }
+	@Override
+	public final String getReferenceExpression(NodeTarget target) throws Exception {
+		VariableSupport localVariable = ensureLocalVariable();
+		updateTarget_ifWasAfterParentStatement(target);
+		return localVariable.getReferenceExpression(target);
+	}
 
-  @Override
-  public final String getAccessExpression(NodeTarget target) throws Exception {
-    return getReferenceExpression(target) + ".";
-  }
+	@Override
+	public final String getAccessExpression(NodeTarget target) throws Exception {
+		return getReferenceExpression(target) + ".";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Target
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final StatementTarget getStatementTarget() throws Exception {
-    return ensureLocalVariable().getStatementTarget();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Target
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final StatementTarget getStatementTarget() throws Exception {
+		return ensureLocalVariable().getStatementTarget();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Materializing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the parent {@link JavaInfo} for this {@link JavaInfo} child.
-   */
-  protected abstract JavaInfo getParent();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Materializing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the parent {@link JavaInfo} for this {@link JavaInfo} child.
+	 */
+	protected abstract JavaInfo getParent();
 
-  /**
-   * @return the materialized {@link VariableSupport}.
-   */
-  private VariableSupport ensureLocalVariable() throws Exception {
-    JavaInfo parent = getParent();
-    // generate local variable
-    VariableSupport variableSupport = new LocalUniqueVariableSupport(m_javaInfo);
-    m_javaInfo.setVariableSupport(variableSupport);
-    // add statement
-    StatementTarget target = parent.getVariableSupport().getStatementTarget();
-    ImplicitObjectAssociation association = new ImplicitObjectAssociation(parent);
-    PureFlatStatementGenerator.INSTANCE.add(m_javaInfo, target, association);
-    // return variable
-    return variableSupport;
-  }
+	/**
+	 * @return the materialized {@link VariableSupport}.
+	 */
+	private VariableSupport ensureLocalVariable() throws Exception {
+		JavaInfo parent = getParent();
+		// generate local variable
+		VariableSupport variableSupport = new LocalUniqueVariableSupport(m_javaInfo);
+		m_javaInfo.setVariableSupport(variableSupport);
+		// add statement
+		StatementTarget target = parent.getVariableSupport().getStatementTarget();
+		ImplicitObjectAssociation association = new ImplicitObjectAssociation(parent);
+		PureFlatStatementGenerator.INSTANCE.add(m_javaInfo, target, association);
+		// return variable
+		return variableSupport;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils for updating NodeTarget
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * If parent Statement was used as target, update target to use new "local variable" Statement.
-   */
-  private void updateTarget_ifWasAfterParentStatement(NodeTarget target) throws Exception {
-    StatementTarget statementTarget = target.getStatementTarget();
-    if (statementTarget != null) {
-      Statement oldStatement = updateTarget_getParentStatement();
-      if (statementTarget.isAfter() && statementTarget.getStatement() == oldStatement) {
-        Statement newStatement = updateTarget_getNewVariableStatement();
-        statementTarget.setStatement(newStatement);
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils for updating NodeTarget
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * If parent Statement was used as target, update target to use new "local variable" Statement.
+	 */
+	private void updateTarget_ifWasAfterParentStatement(NodeTarget target) throws Exception {
+		StatementTarget statementTarget = target.getStatementTarget();
+		if (statementTarget != null) {
+			Statement oldStatement = updateTarget_getParentStatement();
+			if (statementTarget.isAfter() && statementTarget.getStatement() == oldStatement) {
+				Statement newStatement = updateTarget_getNewVariableStatement();
+				statementTarget.setStatement(newStatement);
+			}
+		}
+	}
 
-  private Statement updateTarget_getParentStatement() throws Exception {
-    return getParent().getVariableSupport().getStatementTarget().getStatement();
-  }
+	private Statement updateTarget_getParentStatement() throws Exception {
+		return getParent().getVariableSupport().getStatementTarget().getStatement();
+	}
 
-  private Statement updateTarget_getNewVariableStatement() {
-    Expression variableExpression =
-        ((LocalUniqueVariableSupport) m_javaInfo.getVariableSupport()).m_variable;
-    return AstNodeUtils.getEnclosingStatement(variableExpression);
-  }
+	private Statement updateTarget_getNewVariableStatement() {
+		Expression variableExpression =
+				((LocalUniqueVariableSupport) m_javaInfo.getVariableSupport()).m_variable;
+		return AstNodeUtils.getEnclosingStatement(variableExpression);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/AbstractNamedVariableSupport.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/AbstractNamedVariableSupport.java
index 2db53c005..2241e57af 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/AbstractNamedVariableSupport.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/AbstractNamedVariableSupport.java
@@ -44,334 +44,334 @@
  * @coverage core.model.variable
  */
 public abstract class AbstractNamedVariableSupport extends VariableSupport {
-  protected Expression m_variable;
-  protected VariableDeclaration m_declaration;
+	protected Expression m_variable;
+	protected VariableDeclaration m_declaration;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractNamedVariableSupport(JavaInfo javaInfo, Expression variable) {
-    super(javaInfo);
-    m_variable = variable;
-    rememberDeclaration();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractNamedVariableSupport(JavaInfo javaInfo, Expression variable) {
+		super(javaInfo);
+		m_variable = variable;
+		rememberDeclaration();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Name
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final boolean hasName() {
-    return m_variable != null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Name
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final boolean hasName() {
+		return m_variable != null;
+	}
 
-  @Override
-  public final String getName() {
-    if (m_variable == null) {
-      return "no-variable-yet";
-    }
-    return AstNodeUtils.getVariableName(m_variable);
-  }
+	@Override
+	public final String getName() {
+		if (m_variable == null) {
+			return "no-variable-yet";
+		}
+		return AstNodeUtils.getVariableName(m_variable);
+	}
 
-  @Override
-  public String getTitle() throws Exception {
-    return getName();
-  }
+	@Override
+	public String getTitle() throws Exception {
+		return getName();
+	}
 
-  @Override
-  public String getComponentName() {
-    return getName();
-  }
+	@Override
+	public String getComponentName() {
+		return getName();
+	}
 
-  /**
-   * Sets new unique/non-conflicting name generated from given "base".
-   */
-  public final void setNameBase(String nameBase) throws Exception {
-    int position = m_variable.getStartPosition();
-    String newName = m_javaInfo.getEditor().getUniqueVariableName(position, nameBase, null);
-    setName(newName);
-  }
+	/**
+	 * Sets new unique/non-conflicting name generated from given "base".
+	 */
+	public final void setNameBase(String nameBase) throws Exception {
+		int position = m_variable.getStartPosition();
+		String newName = m_javaInfo.getEditor().getUniqueVariableName(position, nameBase, null);
+		setName(newName);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Properties
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final VariableProperty m_variableProperty = new VariableProperty(this);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Properties
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final VariableProperty m_variableProperty = new VariableProperty(this);
 
-  @Override
-  public final void addProperties(List<Property> properties) {
-    properties.add(m_variableProperty);
-  }
+	@Override
+	public final void addProperties(List<Property> properties) {
+		properties.add(m_variableProperty);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Expressions
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final String getAccessExpression(NodeTarget target) throws Exception {
-    return getReferenceExpression(target) + ".";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Expressions
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final String getAccessExpression(NodeTarget target) throws Exception {
+		return getReferenceExpression(target) + ".";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils: environment
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link ExecutionFlowDescription} from {@link EditorState}.
-   */
-  protected final ExecutionFlowDescription getFlowDescription() {
-    AstEditor editor = m_javaInfo.getEditor();
-    EditorState state = EditorState.get(editor);
-    return state.getFlowDescription();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils: environment
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link ExecutionFlowDescription} from {@link EditorState}.
+	 */
+	protected final ExecutionFlowDescription getFlowDescription() {
+		AstEditor editor = m_javaInfo.getEditor();
+		EditorState state = EditorState.get(editor);
+		return state.getFlowDescription();
+	}
 
-  /**
-   * @return the {@link TypeDeclaration} of this component. XXX
-   */
-  protected final TypeDeclaration getTypeDeclaration() {
-    return getFlowDescription().geTypeDeclaration();
-  }
+	/**
+	 * @return the {@link TypeDeclaration} of this component. XXX
+	 */
+	protected final TypeDeclaration getTypeDeclaration() {
+		return getFlowDescription().geTypeDeclaration();
+	}
 
-  /**
-   * We are going to create/access field and need to know if at position of component creation (so
-   * assignment) we work within static or instance context (for example in <code>main</code>).
-   *
-   * @return <code>true</code> if we work within static context.
-   */
-  protected final boolean isStaticContext() {
-    int position = m_javaInfo.getCreationSupport().getNode().getStartPosition();
-    return isStaticContext(position);
-  }
+	/**
+	 * We are going to create/access field and need to know if at position of component creation (so
+	 * assignment) we work within static or instance context (for example in <code>main</code>).
+	 *
+	 * @return <code>true</code> if we work within static context.
+	 */
+	protected final boolean isStaticContext() {
+		int position = m_javaInfo.getCreationSupport().getNode().getStartPosition();
+		return isStaticContext(position);
+	}
 
-  /**
-   * We are going to create/access field and need to know if at position of assignment we work
-   * within static or instance context (for example in <code>main</code>).
-   *
-   * @param position
-   *          the position in source where we are going to access field.
-   *
-   * @return <code>true</code> if we work within static context.
-   */
-  protected final boolean isStaticContext(int position) {
-    ASTNode enclosingNode = m_javaInfo.getEditor().getEnclosingNode(position);
-    TypeDeclaration type = getTypeDeclaration();
-    MethodDeclaration method = AstNodeUtils.getEnclosingMethod(type, enclosingNode);
-    return AstNodeUtils.isStatic(method);
-  }
+	/**
+	 * We are going to create/access field and need to know if at position of assignment we work
+	 * within static or instance context (for example in <code>main</code>).
+	 *
+	 * @param position
+	 *          the position in source where we are going to access field.
+	 *
+	 * @return <code>true</code> if we work within static context.
+	 */
+	protected final boolean isStaticContext(int position) {
+		ASTNode enclosingNode = m_javaInfo.getEditor().getEnclosingNode(position);
+		TypeDeclaration type = getTypeDeclaration();
+		MethodDeclaration method = AstNodeUtils.getEnclosingMethod(type, enclosingNode);
+		return AstNodeUtils.isStatic(method);
+	}
 
-  /**
-   * Remembers into field {@link VariableDeclaration} for current {@link #m_variable}.
-   */
-  protected final void rememberDeclaration() {
-    if (m_variable != null) {
-      ExecutionFlowDescription flowDescription = getFlowDescription();
-      if (flowDescription != null) {
-        m_declaration = ExecutionFlowUtils.getDeclaration(flowDescription, m_variable);
-      }
-    }
-  }
+	/**
+	 * Remembers into field {@link VariableDeclaration} for current {@link #m_variable}.
+	 */
+	protected final void rememberDeclaration() {
+		if (m_variable != null) {
+			ExecutionFlowDescription flowDescription = getFlowDescription();
+			if (flowDescription != null) {
+				m_declaration = ExecutionFlowUtils.getDeclaration(flowDescription, m_variable);
+			}
+		}
+	}
 
-  /**
-   * @return the references on this variable.
-   */
-  protected final List<Expression> getReferences() {
-    return ExecutionFlowUtils.getReferences(getFlowDescription(), m_variable);
-  }
+	/**
+	 * @return the references on this variable.
+	 */
+	protected final List<Expression> getReferences() {
+		return ExecutionFlowUtils.getReferences(getFlowDescription(), m_variable);
+	}
 
-  /**
-   * @return the references on this {@link JavaInfo} using this variable.
-   */
-  protected final List<Expression> getComponentReferences() {
-    List<Expression> componentReferences = Lists.newArrayList();
-    for (Expression reference : getReferences()) {
-      if (m_javaInfo.isRepresentedBy(reference)) {
-        componentReferences.add(reference);
-      }
-    }
-    return componentReferences;
-  }
+	/**
+	 * @return the references on this {@link JavaInfo} using this variable.
+	 */
+	protected final List<Expression> getComponentReferences() {
+		List<Expression> componentReferences = Lists.newArrayList();
+		for (Expression reference : getReferences()) {
+			if (m_javaInfo.isRepresentedBy(reference)) {
+				componentReferences.add(reference);
+			}
+		}
+		return componentReferences;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils: name validation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * XXX Kosta.20072024. Note, that this method was implemented (partly, without toLocal/toField),
-   * but then I've decided that such strong validation is not a feature, as it will make user
-   * operations harder.
-   *
-   * Validates that given combination of variables and their new names is valid.
-   *
-   * @param variablesNames
-   *          the map: variable -> new name.
-   * @param toLocalVariables
-   *          the set variables that are currently fields, but will be converted to locals.
-   * @param toFieldVariables
-   *          the set variables that are currently locales, but will be converted to fields.
-   *
-   * @return the message with problem description, or <code>null</code> is variable name is valid.
-   */
-  public static String validateVariables(Map<AbstractNamedVariableSupport, String> variablesNames,
-      Set<AbstractNamedVariableSupport> toLocalVariables,
-      Set<AbstractNamedVariableSupport> toFieldVariables) {
-    // check that identifier are valid
-    for (String name : variablesNames.values()) {
-      IStatus status = JavaConventions.validateIdentifier(name);
-      if (status.matches(IStatus.ERROR)) {
-        return status.getMessage();
-      }
-    }
-    // prepare map: variable declaration -> name
-    Map<VariableDeclaration, String> declarationsNames = Maps.newHashMap();
-    for (Map.Entry<AbstractNamedVariableSupport, String> entry : variablesNames.entrySet()) {
-      AbstractNamedVariableSupport variable = entry.getKey();
-      String name = entry.getValue();
-      declarationsNames.put(variable.m_declaration, name);
-    }
-    // check each variable
-    for (Map.Entry<AbstractNamedVariableSupport, String> entry : variablesNames.entrySet()) {
-      AbstractNamedVariableSupport variable = entry.getKey();
-      String name = entry.getValue();
-      // prepare environment
-      CompilationUnit astUnit = variable.m_javaInfo.getEditor().getAstUnit();
-      int position = variable.m_variable.getStartPosition();
-      // check variables visible at this position
-      {
-        List<VariableDeclaration> declarations =
-            AstNodeUtils.getVariableDeclarationsVisibleAt(astUnit, position);
-        // validate visible declarations
-        for (VariableDeclaration declaration : declarations) {
-          if (getDeclarationName(declaration, declarationsNames).equals(name)) {
-            return MessageFormat.format(
-                "Variable \"{0}\" is already visible at this position.",
-                name);
-          }
-        }
-      }
-      // check variables declared after this position
-      {
-        List<VariableDeclaration> declarations =
-            AstNodeUtils.getVariableDeclarationsAfter(astUnit, position);
-        // validate shadowed declarations
-        for (VariableDeclaration declaration : declarations) {
-          if (getDeclarationName(declaration, declarationsNames).equals(name)) {
-            return MessageFormat.format(
-                "Variable \"{0}\" conflicts with other variable declared after it.",
-                name);
-          }
-        }
-      }
-    }
-    // OK
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils: name validation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * XXX Kosta.20072024. Note, that this method was implemented (partly, without toLocal/toField),
+	 * but then I've decided that such strong validation is not a feature, as it will make user
+	 * operations harder.
+	 *
+	 * Validates that given combination of variables and their new names is valid.
+	 *
+	 * @param variablesNames
+	 *          the map: variable -> new name.
+	 * @param toLocalVariables
+	 *          the set variables that are currently fields, but will be converted to locals.
+	 * @param toFieldVariables
+	 *          the set variables that are currently locales, but will be converted to fields.
+	 *
+	 * @return the message with problem description, or <code>null</code> is variable name is valid.
+	 */
+	public static String validateVariables(Map<AbstractNamedVariableSupport, String> variablesNames,
+			Set<AbstractNamedVariableSupport> toLocalVariables,
+			Set<AbstractNamedVariableSupport> toFieldVariables) {
+		// check that identifier are valid
+		for (String name : variablesNames.values()) {
+			IStatus status = JavaConventions.validateIdentifier(name);
+			if (status.matches(IStatus.ERROR)) {
+				return status.getMessage();
+			}
+		}
+		// prepare map: variable declaration -> name
+		Map<VariableDeclaration, String> declarationsNames = Maps.newHashMap();
+		for (Map.Entry<AbstractNamedVariableSupport, String> entry : variablesNames.entrySet()) {
+			AbstractNamedVariableSupport variable = entry.getKey();
+			String name = entry.getValue();
+			declarationsNames.put(variable.m_declaration, name);
+		}
+		// check each variable
+		for (Map.Entry<AbstractNamedVariableSupport, String> entry : variablesNames.entrySet()) {
+			AbstractNamedVariableSupport variable = entry.getKey();
+			String name = entry.getValue();
+			// prepare environment
+			CompilationUnit astUnit = variable.m_javaInfo.getEditor().getAstUnit();
+			int position = variable.m_variable.getStartPosition();
+			// check variables visible at this position
+			{
+				List<VariableDeclaration> declarations =
+						AstNodeUtils.getVariableDeclarationsVisibleAt(astUnit, position);
+				// validate visible declarations
+				for (VariableDeclaration declaration : declarations) {
+					if (getDeclarationName(declaration, declarationsNames).equals(name)) {
+						return MessageFormat.format(
+								"Variable \"{0}\" is already visible at this position.",
+								name);
+					}
+				}
+			}
+			// check variables declared after this position
+			{
+				List<VariableDeclaration> declarations =
+						AstNodeUtils.getVariableDeclarationsAfter(astUnit, position);
+				// validate shadowed declarations
+				for (VariableDeclaration declaration : declarations) {
+					if (getDeclarationName(declaration, declarationsNames).equals(name)) {
+						return MessageFormat.format(
+								"Variable \"{0}\" conflicts with other variable declared after it.",
+								name);
+					}
+				}
+			}
+		}
+		// OK
+		return null;
+	}
 
-  /**
-   * Returns that name of {@link VariableDeclaration} when we know that some
-   * {@link VariableDeclaration} will be requested to change name.
-   *
-   * @param declaration
-   *          the {@link VariableDeclaration} to get name.
-   * @param declarationsNames
-   *          the {@link Map} of variables into new names.
-   *
-   * @return the actual name of {@link VariableDeclaration}.
-   */
-  private static String getDeclarationName(VariableDeclaration declaration,
-      Map<VariableDeclaration, String> declarationsNames) {
-    String newName = declarationsNames.get(declaration);
-    return newName != null ? newName : declaration.getName().getIdentifier();
-  }
+	/**
+	 * Returns that name of {@link VariableDeclaration} when we know that some
+	 * {@link VariableDeclaration} will be requested to change name.
+	 *
+	 * @param declaration
+	 *          the {@link VariableDeclaration} to get name.
+	 * @param declarationsNames
+	 *          the {@link Map} of variables into new names.
+	 *
+	 * @return the actual name of {@link VariableDeclaration}.
+	 */
+	private static String getDeclarationName(VariableDeclaration declaration,
+			Map<VariableDeclaration, String> declarationsNames) {
+		String newName = declarationsNames.get(declaration);
+		return newName != null ? newName : declaration.getName().getIdentifier();
+	}
 
-  /**
-   * Validates that given name is valid for this {@link VariableSupport}.
-   *
-   * @return the message with problem description, or <code>null</code> is variable name is valid.
-   */
-  public final String validateName(String name) throws Exception {
-    // check that identifier is valid
-    {
-      IStatus status = JavaConventions.validateIdentifier(name);
-      if (status.matches(IStatus.ERROR)) {
-        return status.getMessage();
-      }
-    }
-    // check that variable is unique
-    {
-      CompilationUnit astUnit = m_javaInfo.getEditor().getAstUnit();
-      int position = m_variable.getStartPosition();
-      // check variables visible at this position
-      {
-        // prepare visible declarations
-        List<VariableDeclaration> declarations =
-            AstNodeUtils.getVariableDeclarationsVisibleAt(astUnit, position);
-        // check each declaration
-        for (VariableDeclaration declaration : declarations) {
-          if (declaration.getName().getIdentifier().equals(name)) {
-            return MessageFormat.format(
-                "Variable \"{0}\" is already visible at this position.",
-                name);
-          }
-        }
-      }
-      // check variables declared after this position
-      {
-        // prepare shadowing declarations
-        List<VariableDeclaration> declarations =
-            AstNodeUtils.getVariableDeclarationsAfter(astUnit, position);
-        // check each declaration
-        for (VariableDeclaration declaration : declarations) {
-          if (declaration.getName().getIdentifier().equals(name)) {
-            return MessageFormat.format(
-                "Variable \"{0}\" conflicts with other variable declared after it.",
-                name);
-          }
-        }
-      }
-    }
-    // OK
-    return null;
-  }
+	/**
+	 * Validates that given name is valid for this {@link VariableSupport}.
+	 *
+	 * @return the message with problem description, or <code>null</code> is variable name is valid.
+	 */
+	public final String validateName(String name) throws Exception {
+		// check that identifier is valid
+		{
+			IStatus status = JavaConventions.validateIdentifier(name);
+			if (status.matches(IStatus.ERROR)) {
+				return status.getMessage();
+			}
+		}
+		// check that variable is unique
+		{
+			CompilationUnit astUnit = m_javaInfo.getEditor().getAstUnit();
+			int position = m_variable.getStartPosition();
+			// check variables visible at this position
+			{
+				// prepare visible declarations
+				List<VariableDeclaration> declarations =
+						AstNodeUtils.getVariableDeclarationsVisibleAt(astUnit, position);
+				// check each declaration
+				for (VariableDeclaration declaration : declarations) {
+					if (declaration.getName().getIdentifier().equals(name)) {
+						return MessageFormat.format(
+								"Variable \"{0}\" is already visible at this position.",
+								name);
+					}
+				}
+			}
+			// check variables declared after this position
+			{
+				// prepare shadowing declarations
+				List<VariableDeclaration> declarations =
+						AstNodeUtils.getVariableDeclarationsAfter(astUnit, position);
+				// check each declaration
+				for (VariableDeclaration declaration : declarations) {
+					if (declaration.getName().getIdentifier().equals(name)) {
+						return MessageFormat.format(
+								"Variable \"{0}\" conflicts with other variable declared after it.",
+								name);
+					}
+				}
+			}
+		}
+		// OK
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils: name modifications
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets new identifier for this variable.
-   */
-  protected final void modifyName(String newIdentifier) throws Exception {
-    String oldName = getName();
-    for (Expression reference : getReferences()) {
-      modifyVariableName(reference, newIdentifier);
-    }
-    m_javaInfo.getBroadcastJava().variable_setName(this, oldName, newIdentifier);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils: name modifications
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets new identifier for this variable.
+	 */
+	protected final void modifyName(String newIdentifier) throws Exception {
+		String oldName = getName();
+		for (Expression reference : getReferences()) {
+			modifyVariableName(reference, newIdentifier);
+		}
+		m_javaInfo.getBroadcastJava().variable_setName(this, oldName, newIdentifier);
+	}
 
-  /**
-   * Changes identifier in given variable {@link Expression}.
-   */
-  protected final void modifyVariableName(Expression variable, String newIdentifier)
-      throws Exception {
-    SimpleName simpleName = AstNodeUtils.getVariableSimpleName(variable);
-    m_javaInfo.getEditor().setIdentifier(simpleName, newIdentifier);
-  }
+	/**
+	 * Changes identifier in given variable {@link Expression}.
+	 */
+	protected final void modifyVariableName(Expression variable, String newIdentifier)
+			throws Exception {
+		SimpleName simpleName = AstNodeUtils.getVariableSimpleName(variable);
+		m_javaInfo.getEditor().setIdentifier(simpleName, newIdentifier);
+	}
 
-  /**
-   * Replaces name in all {@link Expression}'s referenced on this component with new name. We do
-   * this after creating unique field for previously reused variable.
-   */
-  protected final void replaceComponentReferences(String newVariableName) throws Exception {
-    for (Expression reference : getComponentReferences()) {
-      modifyVariableName(reference, newVariableName);
-    }
-  }
+	/**
+	 * Replaces name in all {@link Expression}'s referenced on this component with new name. We do
+	 * this after creating unique field for previously reused variable.
+	 */
+	protected final void replaceComponentReferences(String newVariableName) throws Exception {
+		for (Expression reference : getComponentReferences()) {
+			modifyVariableName(reference, newVariableName);
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/AbstractNoNameVariableSupport.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/AbstractNoNameVariableSupport.java
index 1f30dafc6..578f62872 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/AbstractNoNameVariableSupport.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/AbstractNoNameVariableSupport.java
@@ -20,57 +20,57 @@
  * @coverage core.model.variable
  */
 public abstract class AbstractNoNameVariableSupport extends VariableSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractNoNameVariableSupport(JavaInfo javaInfo) {
-    super(javaInfo);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractNoNameVariableSupport(JavaInfo javaInfo) {
+		super(javaInfo);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Name
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final boolean hasName() {
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Name
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final boolean hasName() {
+		return false;
+	}
 
-  @Override
-  public final String getName() {
-    throw new IllegalStateException();
-  }
+	@Override
+	public final String getName() {
+		throw new IllegalStateException();
+	}
 
-  @Override
-  public final void setName(String newName) throws Exception {
-    throw new IllegalStateException();
-  }
+	@Override
+	public final void setName(String newName) throws Exception {
+		throw new IllegalStateException();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Conversion
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final boolean canConvertLocalToField() {
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Conversion
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final boolean canConvertLocalToField() {
+		return false;
+	}
 
-  @Override
-  public final void convertLocalToField() throws Exception {
-    throw new IllegalStateException();
-  }
+	@Override
+	public final void convertLocalToField() throws Exception {
+		throw new IllegalStateException();
+	}
 
-  @Override
-  public final boolean canConvertFieldToLocal() {
-    return false;
-  }
+	@Override
+	public final boolean canConvertFieldToLocal() {
+		return false;
+	}
 
-  @Override
-  public final void convertFieldToLocal() throws Exception {
-    throw new IllegalStateException();
-  }
+	@Override
+	public final void convertFieldToLocal() throws Exception {
+		throw new IllegalStateException();
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/AbstractSimpleVariableSupport.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/AbstractSimpleVariableSupport.java
index 6ee0f7e88..a8409ee02 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/AbstractSimpleVariableSupport.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/AbstractSimpleVariableSupport.java
@@ -65,486 +65,486 @@
  * @coverage core.model.variable
  */
 public abstract class AbstractSimpleVariableSupport extends AbstractNamedVariableSupport {
-  private final AbstractSimpleVariableSupport m_this = this;
-  protected final VariableUtils m_utils;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractSimpleVariableSupport(JavaInfo javaInfo) {
-    this(javaInfo, null);
-  }
-
-  public AbstractSimpleVariableSupport(JavaInfo javaInfo, Expression variable) {
-    super(javaInfo, variable);
-    m_utils = new VariableUtils(m_javaInfo);
-    hookTextRenameEvent();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Expressions
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean hasExpression(NodeTarget target) {
-    return JavaInfoUtils.isCreatedAtTarget(m_javaInfo, target);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Target
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public StatementTarget getStatementTarget() throws Exception {
-    Statement assignmentStatement = AstNodeUtils.getEnclosingStatement(m_variable);
-    return new StatementTarget(assignmentStatement, false);
-  }
-
-  @Override
-  public void ensureInstanceReadyAt(StatementTarget target) throws Exception {
-    moveStatements(target);
-  }
-
-  @Override
-  public StatementTarget getAssociationTarget(StatementTarget target) throws Exception {
-    // check, may be we should place association after "beforeAssociation" invocations
-    {
-      StatementTarget associationTarget = getAssociationTarget_beforeAssocitation();
-      if (associationTarget != null) {
-        return associationTarget;
-      }
-    }
-    // use default target
-    return getStatementTarget();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils for expressions
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected final void assertJavaInfoCreatedAt(NodeTarget target) {
-    boolean isCreated = JavaInfoUtils.isCreatedAtTarget(m_javaInfo, target);
-    if (!isCreated) {
-      Assert.fail(
-          "{0} is not created at {1} in {2}",
-          m_javaInfo,
-          target,
-          m_javaInfo.getEditor().getSource());
-    }
-  }
-
-  protected final boolean isVisibleAtTarget(NodeTarget nodeTarget) {
-    // Statement
-    {
-      StatementTarget target = nodeTarget.getStatementTarget();
-      if (target != null) {
-        Statement statement = target.getStatement();
-        if (statement != null) {
-          if (target.isBefore()) {
-            return isVisible_before(statement);
-          } else {
-            return isVisible_after(statement);
-          }
-        } else {
-          Block block = target.getBlock();
-          if (target.isBefore()) {
-            return isVisible_before(block);
-          } else {
-            return isVisible_end(block);
-          }
-        }
-      }
-    }
-    // BodyDeclaration
-    // Only field can be visible, but field variables use different implementation.
-    // So, at this point we always "local variable" and it can not be visible in type.
-    return false;
-  }
-
-  private boolean isVisible_before(Statement statement) {
-    // check that "local" variable can be visible here at all
-    if (isVisible_isLocalVariable_outsideOfItsBlock(statement)) {
-      return false;
-    }
-    // check that variable already assigned
-    return areInSuchOrderInBlock(m_variable, statement, false);
-  }
-
-  private boolean isVisible_after(Statement statement) {
-    // check that "local" variable can be visible here at all
-    if (isVisible_isLocalVariable_outsideOfItsBlock(statement)) {
-      return false;
-    }
-    // check that variable already assigned
-    if (areInSuchOrderInBlock(m_variable, statement, true)) {
-      // ...and not reassigned later
-      if (isVisible_isReuseVariable_reassignedLater(statement)) {
-        return false;
-      }
-      // OK
-      return true;
-    }
-    // bad situation - not assigned yet, we should not use this target at all
-    return false;
-  }
-
-  private boolean isVisible_end(Block block) {
-    if (AstNodeUtils.contains(block, m_variable)) {
-      return !isVisible_isReuseVariable_reassignedLater(block);
-    }
-    return isVisible_after(block);
-  }
-
-  private boolean isVisible_isLocalVariable_outsideOfItsBlock(Statement statement) {
-    if (!getClass().getName().contains(".Local")) {
-      return false;
-    }
-    // check that Statement is inside of Block which defines variable
-    Block declarationBlock = AstNodeUtils.getEnclosingBlock(m_declaration);
-    return !AstNodeUtils.contains(declarationBlock, statement);
-  }
-
-  private boolean isVisible_isReuseVariable_reassignedLater(Statement statement) {
-    if (!getClass().getName().contains("Reuse")) {
-      return false;
-    }
-    // check all assignments
-    List<Expression> allAssignments =
-        ExecutionFlowUtils.getAssignments(getFlowDescription(), m_variable);
-    for (ASTNode assignment : allAssignments) {
-      if (AstNodeUtils.contains(assignment, m_variable)) {
-        continue;
-      }
-      if (areInSuchOrderInBlock(assignment, statement, true)) {
-        return true;
-      }
-    }
-    // no
-    return false;
-  }
-
-  private static boolean areInSuchOrderInBlock(ASTNode node_1, ASTNode node_2, boolean equals) {
-    Block commonBlock = AstNodeUtils.getCommonBlock(node_1, node_2);
-    if (commonBlock != null) {
-      Statement statement_1 = AstNodeUtils.getStatementWithinBlock(commonBlock, node_1);
-      Statement statement_2 = AstNodeUtils.getStatementWithinBlock(commonBlock, node_2);
-      int index_1 = DomGenerics.statements(commonBlock).indexOf(statement_1);
-      int index_2 = DomGenerics.statements(commonBlock).indexOf(statement_2);
-      if (equals) {
-        return index_1 <= index_2;
-      } else {
-        return index_1 < index_2;
-      }
-    }
-    return false;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // "beforeAssociation" support
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return some {@link StatementTarget} if there are {@link MethodOrderBeforeAssociation}
-   *         invocations or <code>null</code> if there are no such special invocations.
-   */
-  private StatementTarget getAssociationTarget_beforeAssocitation() {
-    LinkedList<MethodInvocation> beforeAssociationInvocations = Lists.newLinkedList();
-    for (ASTNode node : m_javaInfo.getRelatedNodes()) {
-      MethodInvocation invocation = m_javaInfo.getMethodInvocation(node);
-      if (invocation != null) {
-        String signature = AstNodeUtils.getMethodSignature(invocation);
-        MethodDescription description = m_javaInfo.getDescription().getMethod(signature);
-        if (description != null) {
-          if (isBeforeAssociation(description)) {
-            beforeAssociationInvocations.add(invocation);
-          }
-        }
-      }
-    }
-    // if there are "beforeAssociation" invocations, use last one as target
-    if (!beforeAssociationInvocations.isEmpty()) {
-      ExecutionFlowDescription flowDescription =
-          JavaInfoUtils.getState(m_javaInfo).getFlowDescription();
-      JavaInfoUtils.sortNodesByFlow(flowDescription, false, beforeAssociationInvocations);
-      // use last invocation as target
-      MethodInvocation targetInvocation = beforeAssociationInvocations.getLast();
-      Statement targetStatement = AstNodeUtils.getEnclosingStatement(targetInvocation);
-      return new StatementTarget(targetStatement, false);
-    }
-    // no "beforeAssociation"
-    return null;
-  }
-
-  /**
-   * @return <code>true</code> if invocations of given {@link MethodDescription} have effective
-   *         order {@link MethodOrderBeforeAssociation}.
-   */
-  private boolean isBeforeAssociation(MethodDescription description) {
-    MethodOrder order = description.getOrder();
-    if (order instanceof MethodOrderDefault) {
-      order = m_javaInfo.getDescription().getDefaultMethodOrder();
-    }
-    return order instanceof MethodOrderBeforeAssociation;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Adding
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets variable and initializer {@link Expression} after component adding.
-   */
-  protected final void add_setVariableAndInitializer(Expression variable, Expression initializer)
-      throws Exception {
-    m_variable = variable;
-    rememberDeclaration();
-    // process initializer
-    if (AstNodeUtils.getTypeBinding(initializer) == null) {
-      throw new DesignerException(ICoreExceptionConstants.GEN_NO_TYPE_BINDING,
-          m_javaInfo.getEditor().getSource(initializer));
-    }
-    m_javaInfo.addRelatedNode(initializer);
-    m_javaInfo.getCreationSupport().add_setSourceExpression(initializer);
-    add_setVariableParameterizedType(initializer);
-    // notify about variable name (later, when association will be done)
-    m_javaInfo.addBroadcastListener(new JavaEventListener() {
-      @Override
-      public void addAfter(JavaInfo parent, JavaInfo child) throws Exception {
-        if (child == m_javaInfo) {
-          m_javaInfo.removeBroadcastListener(this);
-          m_javaInfo.getBroadcastJava().variable_setName(m_this, null, getName());
-        }
-      }
-    });
-  }
-
-  /**
-   * At the time when we generate {@link VariableDeclarationStatement} with variable declaration and
-   * initializer, we don't know yet what is exact {@link ITypeBinding} of initializer. So, we
-   * generate raw type and replace it later with actual type arguments.
-   */
-  protected void add_setVariableParameterizedType(Expression initializer) throws Exception {
-    ITypeBinding typeBinding = AstNodeUtils.getTypeBinding(initializer);
-    if (typeBinding.isAnonymous()) {
-      typeBinding = typeBinding.getSuperclass();
-    }
-    if (typeBinding.isParameterizedType()) {
-      AstEditor editor = m_javaInfo.getEditor();
-      String genericTypeName = editor.getTypeBindingSource(typeBinding);
-      editor.replaceVariableType(m_declaration, genericTypeName);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Moving
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Moves statements of this component into given {@link StatementTarget}.
-   */
-  protected final void moveStatements(StatementTarget target) throws Exception {
-    AstEditor editor = m_javaInfo.getEditor();
-    Statement[] statementsToMove = getStatementsToMove(target);
-    // ensure unique names
-    ensureUniqueVariablesDuringMove(target.getPosition(), statementsToMove);
-    // do move Statement's
-    for (Statement statement : statementsToMove) {
-      editor.moveStatement(statement, target);
-      target = new StatementTarget(statement, false);
-    }
-  }
-
-  /**
-   * When we move component, it is possible that at new position there are already visible
-   * variables, so that moving component or any of it direct/indirect child has same name. So, we
-   * check this and rename moving component.
-   * <p>
-   * Note, that we use {@link Statement}'s that will be moved to decide if moved
-   * {@link VariableDeclaration} will shadow any subsequent variables or not.
-   *
-   * @param statementsToMove
-   *          the {@link Statement}'s that will be moved.
-   */
-  private void ensureUniqueVariablesDuringMove(final int position,
-      final Statement[] statementsToMove) throws Exception {
-    m_javaInfo.accept(new ObjectInfoVisitor() {
-      @Override
-      public void endVisit(ObjectInfo objectInfo) throws Exception {
-        if (objectInfo instanceof JavaInfo) {
-          JavaInfo javaInfo = (JavaInfo) objectInfo;
-          if (javaInfo.getVariableSupport() instanceof LocalVariableSupport) {
-            LocalVariableSupport variableSupport =
-                (LocalVariableSupport) javaInfo.getVariableSupport();
-            variableSupport.ensureUniqueVariableDuringMove(position, statementsToMove);
-          }
-        }
-      }
-    });
-  }
-
-  /**
-   * @param target
-   *          the target to move {@link Statement}'s to.
-   *
-   * @return {@link Statement}'s that should be move with this component.
-   */
-  private Statement[] getStatementsToMove(StatementTarget target) throws Exception {
-    // prepare statements to move
-    Set<Statement> statementSet;
-    {
-      statementSet = Sets.newHashSet();
-      addStatementsToMove(statementSet, target, m_javaInfo);
-    }
-    // replace statements with blocks
-    {
-      // prepare unique list of blocks
-      List<Block> blocks = Lists.newArrayList();
-      for (Statement statement : statementSet) {
-        Block block = AstNodeUtils.getEnclosingBlock(statement);
-        if (!blocks.contains(block)) {
-          blocks.add(block);
-        }
-      }
-      // replace statements with blocks
-      Collections.sort(blocks, AstNodeUtils.SORT_BY_REVERSE_POSITION);
-      for (Block block : blocks) {
-        List<Statement> blockStatements = DomGenerics.statements(block);
-        if (statementSet.containsAll(blockStatements) && block.getParent() instanceof Block) {
-          statementSet.removeAll(blockStatements);
-          statementSet.add(block);
-        }
-      }
-    }
-    // sort the resulting list of statements
-    Statement[] statements = statementSet.toArray(new Statement[statementSet.size()]);
-    Arrays.sort(statements, AstNodeUtils.SORT_BY_POSITION);
-    return statements;
-  }
-
-  /**
-   * Adds {@link Statement}'s related to given {@link JavaInfo} and any of its children.
-   *
-   * @param target
-   */
-  private static void addStatementsToMove(Set<Statement> statements,
-      StatementTarget target,
-      JavaInfo javaInfo) throws Exception {
-    // add related nodes
-    for (ASTNode relatedNode : javaInfo.getRelatedNodes()) {
-      Statement statement = AstNodeUtils.getEnclosingStatement(relatedNode);
-      if (!canMoveStatement(target, javaInfo, statement)) {
-        continue;
-      }
-      if (statement != null) {
-        statements.add(statement);
-      }
-    }
-    // add children
-    List<JavaInfo> children = Lists.newArrayList(javaInfo.getChildrenJava());
-    javaInfo.getBroadcastJava().variable_addStatementsToMove(javaInfo, children);
-    for (JavaInfo child : children) {
-      addStatementsToMove(statements, target, child);
-    }
-  }
-
-  /**
-   * We should not move {@link Statement} if it is not in same method, for example in some separate
-   * "configure()" method.
-   */
-  private static boolean canMoveStatement(StatementTarget target,
-      JavaInfo javaInfo,
-      Statement statement) {
-    MethodDeclaration statementMethod = AstNodeUtils.getEnclosingMethod(statement);
-    // move Statement, if it is same method as creation
-    {
-      ASTNode creationNode = javaInfo.getCreationSupport().getNode();
-      MethodDeclaration creationMethod = AstNodeUtils.getEnclosingMethod(creationNode);
-      if (statementMethod == creationMethod) {
-        return true;
-      }
-    }
-    // move Statement, if it is in same method as target
-    MethodDeclaration targetMethod = AstNodeUtils.getEnclosingMethod(target.getNode());
-    return targetMethod == null || statementMethod == targetMethod;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Morphing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Modifies {@link VariableDeclaration} of this variable to use new type.<br>
-   * We need this during morphing components.<br>
-   * No any validations for existing {@link MethodInvocation}, {@link Assignment}'s, etc are
-   * performed.
-   */
-  public abstract void setType(String newTypeName) throws Exception;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Rename on "text" property modification
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds listener for "text" property modification.
-   */
-  private void hookTextRenameEvent() {
-    m_javaInfo.addBroadcastListener(new GenericPropertySetValue() {
-      @Override
-      public void invoke(GenericPropertyImpl property, Object[] value, boolean[] shouldSetValue)
-          throws Exception {
-        if (property.getJavaInfo().getVariableSupport() == m_this && value[0] instanceof String) {
-          GenericPropertyDescription description = property.getDescription();
-          if (description != null && description.hasTrueTag("isText")) {
-            NamesManager.renameForText(m_this, property, (String) value[0]);
-          }
-        }
-      }
-    });
-  }
-
-  /**
-   * @return the new name of variable decorated with prefix/suffix.
-   *
-   * @param newName
-   *          the new name generate using "text" property.
-   */
-  String decorateTextName(String newName) {
-    return newName;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Conversion
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the added {@link FieldDeclaration} with given source.
-   */
-  protected final FieldDeclaration addField(String fieldSource) throws Exception {
-    AstEditor editor = m_javaInfo.getEditor();
-    TypeDeclaration targetType = getTypeDeclaration();
-    boolean addFieldBefore = true;
-    // try to find target field (add after it)
-    FieldDeclaration targetField = null;
-    for (BodyDeclaration bodyDeclaration : DomGenerics.bodyDeclarations(targetType)) {
-      if (bodyDeclaration instanceof FieldDeclaration) {
-        targetField = (FieldDeclaration) bodyDeclaration;
-        addFieldBefore = false;
-      }
-    }
-    // add field
-    BodyDeclarationTarget target =
-        new BodyDeclarationTarget(targetType, targetField, addFieldBefore);
-    return editor.addFieldDeclaration(fieldSource, target);
-  }
+	private final AbstractSimpleVariableSupport m_this = this;
+	protected final VariableUtils m_utils;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractSimpleVariableSupport(JavaInfo javaInfo) {
+		this(javaInfo, null);
+	}
+
+	public AbstractSimpleVariableSupport(JavaInfo javaInfo, Expression variable) {
+		super(javaInfo, variable);
+		m_utils = new VariableUtils(m_javaInfo);
+		hookTextRenameEvent();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Expressions
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean hasExpression(NodeTarget target) {
+		return JavaInfoUtils.isCreatedAtTarget(m_javaInfo, target);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Target
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public StatementTarget getStatementTarget() throws Exception {
+		Statement assignmentStatement = AstNodeUtils.getEnclosingStatement(m_variable);
+		return new StatementTarget(assignmentStatement, false);
+	}
+
+	@Override
+	public void ensureInstanceReadyAt(StatementTarget target) throws Exception {
+		moveStatements(target);
+	}
+
+	@Override
+	public StatementTarget getAssociationTarget(StatementTarget target) throws Exception {
+		// check, may be we should place association after "beforeAssociation" invocations
+		{
+			StatementTarget associationTarget = getAssociationTarget_beforeAssocitation();
+			if (associationTarget != null) {
+				return associationTarget;
+			}
+		}
+		// use default target
+		return getStatementTarget();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils for expressions
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected final void assertJavaInfoCreatedAt(NodeTarget target) {
+		boolean isCreated = JavaInfoUtils.isCreatedAtTarget(m_javaInfo, target);
+		if (!isCreated) {
+			Assert.fail(
+					"{0} is not created at {1} in {2}",
+					m_javaInfo,
+					target,
+					m_javaInfo.getEditor().getSource());
+		}
+	}
+
+	protected final boolean isVisibleAtTarget(NodeTarget nodeTarget) {
+		// Statement
+		{
+			StatementTarget target = nodeTarget.getStatementTarget();
+			if (target != null) {
+				Statement statement = target.getStatement();
+				if (statement != null) {
+					if (target.isBefore()) {
+						return isVisible_before(statement);
+					} else {
+						return isVisible_after(statement);
+					}
+				} else {
+					Block block = target.getBlock();
+					if (target.isBefore()) {
+						return isVisible_before(block);
+					} else {
+						return isVisible_end(block);
+					}
+				}
+			}
+		}
+		// BodyDeclaration
+		// Only field can be visible, but field variables use different implementation.
+		// So, at this point we always "local variable" and it can not be visible in type.
+		return false;
+	}
+
+	private boolean isVisible_before(Statement statement) {
+		// check that "local" variable can be visible here at all
+		if (isVisible_isLocalVariable_outsideOfItsBlock(statement)) {
+			return false;
+		}
+		// check that variable already assigned
+		return areInSuchOrderInBlock(m_variable, statement, false);
+	}
+
+	private boolean isVisible_after(Statement statement) {
+		// check that "local" variable can be visible here at all
+		if (isVisible_isLocalVariable_outsideOfItsBlock(statement)) {
+			return false;
+		}
+		// check that variable already assigned
+		if (areInSuchOrderInBlock(m_variable, statement, true)) {
+			// ...and not reassigned later
+			if (isVisible_isReuseVariable_reassignedLater(statement)) {
+				return false;
+			}
+			// OK
+			return true;
+		}
+		// bad situation - not assigned yet, we should not use this target at all
+		return false;
+	}
+
+	private boolean isVisible_end(Block block) {
+		if (AstNodeUtils.contains(block, m_variable)) {
+			return !isVisible_isReuseVariable_reassignedLater(block);
+		}
+		return isVisible_after(block);
+	}
+
+	private boolean isVisible_isLocalVariable_outsideOfItsBlock(Statement statement) {
+		if (!getClass().getName().contains(".Local")) {
+			return false;
+		}
+		// check that Statement is inside of Block which defines variable
+		Block declarationBlock = AstNodeUtils.getEnclosingBlock(m_declaration);
+		return !AstNodeUtils.contains(declarationBlock, statement);
+	}
+
+	private boolean isVisible_isReuseVariable_reassignedLater(Statement statement) {
+		if (!getClass().getName().contains("Reuse")) {
+			return false;
+		}
+		// check all assignments
+		List<Expression> allAssignments =
+				ExecutionFlowUtils.getAssignments(getFlowDescription(), m_variable);
+		for (ASTNode assignment : allAssignments) {
+			if (AstNodeUtils.contains(assignment, m_variable)) {
+				continue;
+			}
+			if (areInSuchOrderInBlock(assignment, statement, true)) {
+				return true;
+			}
+		}
+		// no
+		return false;
+	}
+
+	private static boolean areInSuchOrderInBlock(ASTNode node_1, ASTNode node_2, boolean equals) {
+		Block commonBlock = AstNodeUtils.getCommonBlock(node_1, node_2);
+		if (commonBlock != null) {
+			Statement statement_1 = AstNodeUtils.getStatementWithinBlock(commonBlock, node_1);
+			Statement statement_2 = AstNodeUtils.getStatementWithinBlock(commonBlock, node_2);
+			int index_1 = DomGenerics.statements(commonBlock).indexOf(statement_1);
+			int index_2 = DomGenerics.statements(commonBlock).indexOf(statement_2);
+			if (equals) {
+				return index_1 <= index_2;
+			} else {
+				return index_1 < index_2;
+			}
+		}
+		return false;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// "beforeAssociation" support
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return some {@link StatementTarget} if there are {@link MethodOrderBeforeAssociation}
+	 *         invocations or <code>null</code> if there are no such special invocations.
+	 */
+	private StatementTarget getAssociationTarget_beforeAssocitation() {
+		LinkedList<MethodInvocation> beforeAssociationInvocations = Lists.newLinkedList();
+		for (ASTNode node : m_javaInfo.getRelatedNodes()) {
+			MethodInvocation invocation = m_javaInfo.getMethodInvocation(node);
+			if (invocation != null) {
+				String signature = AstNodeUtils.getMethodSignature(invocation);
+				MethodDescription description = m_javaInfo.getDescription().getMethod(signature);
+				if (description != null) {
+					if (isBeforeAssociation(description)) {
+						beforeAssociationInvocations.add(invocation);
+					}
+				}
+			}
+		}
+		// if there are "beforeAssociation" invocations, use last one as target
+		if (!beforeAssociationInvocations.isEmpty()) {
+			ExecutionFlowDescription flowDescription =
+					JavaInfoUtils.getState(m_javaInfo).getFlowDescription();
+			JavaInfoUtils.sortNodesByFlow(flowDescription, false, beforeAssociationInvocations);
+			// use last invocation as target
+			MethodInvocation targetInvocation = beforeAssociationInvocations.getLast();
+			Statement targetStatement = AstNodeUtils.getEnclosingStatement(targetInvocation);
+			return new StatementTarget(targetStatement, false);
+		}
+		// no "beforeAssociation"
+		return null;
+	}
+
+	/**
+	 * @return <code>true</code> if invocations of given {@link MethodDescription} have effective
+	 *         order {@link MethodOrderBeforeAssociation}.
+	 */
+	private boolean isBeforeAssociation(MethodDescription description) {
+		MethodOrder order = description.getOrder();
+		if (order instanceof MethodOrderDefault) {
+			order = m_javaInfo.getDescription().getDefaultMethodOrder();
+		}
+		return order instanceof MethodOrderBeforeAssociation;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Adding
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets variable and initializer {@link Expression} after component adding.
+	 */
+	protected final void add_setVariableAndInitializer(Expression variable, Expression initializer)
+			throws Exception {
+		m_variable = variable;
+		rememberDeclaration();
+		// process initializer
+		if (AstNodeUtils.getTypeBinding(initializer) == null) {
+			throw new DesignerException(ICoreExceptionConstants.GEN_NO_TYPE_BINDING,
+					m_javaInfo.getEditor().getSource(initializer));
+		}
+		m_javaInfo.addRelatedNode(initializer);
+		m_javaInfo.getCreationSupport().add_setSourceExpression(initializer);
+		add_setVariableParameterizedType(initializer);
+		// notify about variable name (later, when association will be done)
+		m_javaInfo.addBroadcastListener(new JavaEventListener() {
+			@Override
+			public void addAfter(JavaInfo parent, JavaInfo child) throws Exception {
+				if (child == m_javaInfo) {
+					m_javaInfo.removeBroadcastListener(this);
+					m_javaInfo.getBroadcastJava().variable_setName(m_this, null, getName());
+				}
+			}
+		});
+	}
+
+	/**
+	 * At the time when we generate {@link VariableDeclarationStatement} with variable declaration and
+	 * initializer, we don't know yet what is exact {@link ITypeBinding} of initializer. So, we
+	 * generate raw type and replace it later with actual type arguments.
+	 */
+	protected void add_setVariableParameterizedType(Expression initializer) throws Exception {
+		ITypeBinding typeBinding = AstNodeUtils.getTypeBinding(initializer);
+		if (typeBinding.isAnonymous()) {
+			typeBinding = typeBinding.getSuperclass();
+		}
+		if (typeBinding.isParameterizedType()) {
+			AstEditor editor = m_javaInfo.getEditor();
+			String genericTypeName = editor.getTypeBindingSource(typeBinding);
+			editor.replaceVariableType(m_declaration, genericTypeName);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Moving
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Moves statements of this component into given {@link StatementTarget}.
+	 */
+	protected final void moveStatements(StatementTarget target) throws Exception {
+		AstEditor editor = m_javaInfo.getEditor();
+		Statement[] statementsToMove = getStatementsToMove(target);
+		// ensure unique names
+		ensureUniqueVariablesDuringMove(target.getPosition(), statementsToMove);
+		// do move Statement's
+		for (Statement statement : statementsToMove) {
+			editor.moveStatement(statement, target);
+			target = new StatementTarget(statement, false);
+		}
+	}
+
+	/**
+	 * When we move component, it is possible that at new position there are already visible
+	 * variables, so that moving component or any of it direct/indirect child has same name. So, we
+	 * check this and rename moving component.
+	 * <p>
+	 * Note, that we use {@link Statement}'s that will be moved to decide if moved
+	 * {@link VariableDeclaration} will shadow any subsequent variables or not.
+	 *
+	 * @param statementsToMove
+	 *          the {@link Statement}'s that will be moved.
+	 */
+	private void ensureUniqueVariablesDuringMove(final int position,
+			final Statement[] statementsToMove) throws Exception {
+		m_javaInfo.accept(new ObjectInfoVisitor() {
+			@Override
+			public void endVisit(ObjectInfo objectInfo) throws Exception {
+				if (objectInfo instanceof JavaInfo) {
+					JavaInfo javaInfo = (JavaInfo) objectInfo;
+					if (javaInfo.getVariableSupport() instanceof LocalVariableSupport) {
+						LocalVariableSupport variableSupport =
+								(LocalVariableSupport) javaInfo.getVariableSupport();
+						variableSupport.ensureUniqueVariableDuringMove(position, statementsToMove);
+					}
+				}
+			}
+		});
+	}
+
+	/**
+	 * @param target
+	 *          the target to move {@link Statement}'s to.
+	 *
+	 * @return {@link Statement}'s that should be move with this component.
+	 */
+	private Statement[] getStatementsToMove(StatementTarget target) throws Exception {
+		// prepare statements to move
+		Set<Statement> statementSet;
+		{
+			statementSet = Sets.newHashSet();
+			addStatementsToMove(statementSet, target, m_javaInfo);
+		}
+		// replace statements with blocks
+		{
+			// prepare unique list of blocks
+			List<Block> blocks = Lists.newArrayList();
+			for (Statement statement : statementSet) {
+				Block block = AstNodeUtils.getEnclosingBlock(statement);
+				if (!blocks.contains(block)) {
+					blocks.add(block);
+				}
+			}
+			// replace statements with blocks
+			Collections.sort(blocks, AstNodeUtils.SORT_BY_REVERSE_POSITION);
+			for (Block block : blocks) {
+				List<Statement> blockStatements = DomGenerics.statements(block);
+				if (statementSet.containsAll(blockStatements) && block.getParent() instanceof Block) {
+					statementSet.removeAll(blockStatements);
+					statementSet.add(block);
+				}
+			}
+		}
+		// sort the resulting list of statements
+		Statement[] statements = statementSet.toArray(new Statement[statementSet.size()]);
+		Arrays.sort(statements, AstNodeUtils.SORT_BY_POSITION);
+		return statements;
+	}
+
+	/**
+	 * Adds {@link Statement}'s related to given {@link JavaInfo} and any of its children.
+	 *
+	 * @param target
+	 */
+	private static void addStatementsToMove(Set<Statement> statements,
+			StatementTarget target,
+			JavaInfo javaInfo) throws Exception {
+		// add related nodes
+		for (ASTNode relatedNode : javaInfo.getRelatedNodes()) {
+			Statement statement = AstNodeUtils.getEnclosingStatement(relatedNode);
+			if (!canMoveStatement(target, javaInfo, statement)) {
+				continue;
+			}
+			if (statement != null) {
+				statements.add(statement);
+			}
+		}
+		// add children
+		List<JavaInfo> children = Lists.newArrayList(javaInfo.getChildrenJava());
+		javaInfo.getBroadcastJava().variable_addStatementsToMove(javaInfo, children);
+		for (JavaInfo child : children) {
+			addStatementsToMove(statements, target, child);
+		}
+	}
+
+	/**
+	 * We should not move {@link Statement} if it is not in same method, for example in some separate
+	 * "configure()" method.
+	 */
+	private static boolean canMoveStatement(StatementTarget target,
+			JavaInfo javaInfo,
+			Statement statement) {
+		MethodDeclaration statementMethod = AstNodeUtils.getEnclosingMethod(statement);
+		// move Statement, if it is same method as creation
+		{
+			ASTNode creationNode = javaInfo.getCreationSupport().getNode();
+			MethodDeclaration creationMethod = AstNodeUtils.getEnclosingMethod(creationNode);
+			if (statementMethod == creationMethod) {
+				return true;
+			}
+		}
+		// move Statement, if it is in same method as target
+		MethodDeclaration targetMethod = AstNodeUtils.getEnclosingMethod(target.getNode());
+		return targetMethod == null || statementMethod == targetMethod;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Morphing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Modifies {@link VariableDeclaration} of this variable to use new type.<br>
+	 * We need this during morphing components.<br>
+	 * No any validations for existing {@link MethodInvocation}, {@link Assignment}'s, etc are
+	 * performed.
+	 */
+	public abstract void setType(String newTypeName) throws Exception;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Rename on "text" property modification
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds listener for "text" property modification.
+	 */
+	private void hookTextRenameEvent() {
+		m_javaInfo.addBroadcastListener(new GenericPropertySetValue() {
+			@Override
+			public void invoke(GenericPropertyImpl property, Object[] value, boolean[] shouldSetValue)
+					throws Exception {
+				if (property.getJavaInfo().getVariableSupport() == m_this && value[0] instanceof String) {
+					GenericPropertyDescription description = property.getDescription();
+					if (description != null && description.hasTrueTag("isText")) {
+						NamesManager.renameForText(m_this, property, (String) value[0]);
+					}
+				}
+			}
+		});
+	}
+
+	/**
+	 * @return the new name of variable decorated with prefix/suffix.
+	 *
+	 * @param newName
+	 *          the new name generate using "text" property.
+	 */
+	String decorateTextName(String newName) {
+		return newName;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Conversion
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the added {@link FieldDeclaration} with given source.
+	 */
+	protected final FieldDeclaration addField(String fieldSource) throws Exception {
+		AstEditor editor = m_javaInfo.getEditor();
+		TypeDeclaration targetType = getTypeDeclaration();
+		boolean addFieldBefore = true;
+		// try to find target field (add after it)
+		FieldDeclaration targetField = null;
+		for (BodyDeclaration bodyDeclaration : DomGenerics.bodyDeclarations(targetType)) {
+			if (bodyDeclaration instanceof FieldDeclaration) {
+				targetField = (FieldDeclaration) bodyDeclaration;
+				addFieldBefore = false;
+			}
+		}
+		// add field
+		BodyDeclarationTarget target =
+				new BodyDeclarationTarget(targetType, targetField, addFieldBefore);
+		return editor.addFieldDeclaration(fieldSource, target);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/EmptyInvocationVariableSupport.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/EmptyInvocationVariableSupport.java
index e296b9f31..60539d1b8 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/EmptyInvocationVariableSupport.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/EmptyInvocationVariableSupport.java
@@ -35,51 +35,51 @@
  * @coverage core.model.variable
  */
 public final class EmptyInvocationVariableSupport extends EmptyVariableSupport {
-  private final String m_invocationSource;
-  private final int m_argumentIndex;
+	private final String m_invocationSource;
+	private final int m_argumentIndex;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public EmptyInvocationVariableSupport(JavaInfo javaInfo,
-      String invocationSource,
-      int argumentIndex) {
-    super(javaInfo);
-    m_invocationSource = invocationSource;
-    m_argumentIndex = argumentIndex;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public EmptyInvocationVariableSupport(JavaInfo javaInfo,
+			String invocationSource,
+			int argumentIndex) {
+		super(javaInfo);
+		m_invocationSource = invocationSource;
+		m_argumentIndex = argumentIndex;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Adding
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String add_getVariableStatementSource(StatementTarget associationTarget) throws Exception {
-    String source = m_invocationSource;
-    // use child creation source
-    {
-      NodeTarget creationTarget = new NodeTarget(associationTarget);
-      String childSource = m_javaInfo.getCreationSupport().add_getSource(creationTarget);
-      source = StringUtils.replace(source, "%child%", childSource);
-    }
-    // replace parent expressions
-    source = AssociationUtils.replaceTemplates(m_javaInfo, source, associationTarget);
-    {
-      /*VariableSupport parentVariable = m_javaInfo.getParentJava().getVariableSupport();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Adding
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String add_getVariableStatementSource(StatementTarget associationTarget) throws Exception {
+		String source = m_invocationSource;
+		// use child creation source
+		{
+			NodeTarget creationTarget = new NodeTarget(associationTarget);
+			String childSource = m_javaInfo.getCreationSupport().add_getSource(creationTarget);
+			source = StringUtils.replace(source, "%child%", childSource);
+		}
+		// replace parent expressions
+		source = AssociationUtils.replaceTemplates(m_javaInfo, source, associationTarget);
+		{
+			/*VariableSupport parentVariable = m_javaInfo.getParentJava().getVariableSupport();
       source = StringUtils.replace(source, "%parent%", parentVariable.getReferenceExpression(true));
       source = StringUtils.replace(source, "%parent%.", parentVariable.getAccessExpression(true));*/
-    }
-    // return as Statement source
-    return source + ";";
-  }
+		}
+		// return as Statement source
+		return source + ";";
+	}
 
-  @Override
-  public void add_setVariableStatement(Statement statement) throws Exception {
-    MethodInvocation invocation =
-        (MethodInvocation) ((ExpressionStatement) statement).getExpression();
-    add_setInitializer(DomGenerics.arguments(invocation).get(m_argumentIndex));
-  }
+	@Override
+	public void add_setVariableStatement(Statement statement) throws Exception {
+		MethodInvocation invocation =
+				(MethodInvocation) ((ExpressionStatement) statement).getExpression();
+		add_setInitializer(DomGenerics.arguments(invocation).get(m_argumentIndex));
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/EmptyPureVariableSupport.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/EmptyPureVariableSupport.java
index 04343bb31..161bcb128 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/EmptyPureVariableSupport.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/EmptyPureVariableSupport.java
@@ -34,29 +34,29 @@
  * @coverage core.model.variable
  */
 public final class EmptyPureVariableSupport extends EmptyVariableSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public EmptyPureVariableSupport(JavaInfo javaInfo) {
-    super(javaInfo);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public EmptyPureVariableSupport(JavaInfo javaInfo) {
+		super(javaInfo);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Adding
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String add_getVariableStatementSource(StatementTarget associationTarget) throws Exception {
-    NodeTarget creationTarget = new NodeTarget(associationTarget);
-    return m_javaInfo.getCreationSupport().add_getSource(creationTarget) + ";";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Adding
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String add_getVariableStatementSource(StatementTarget associationTarget) throws Exception {
+		NodeTarget creationTarget = new NodeTarget(associationTarget);
+		return m_javaInfo.getCreationSupport().add_getSource(creationTarget) + ";";
+	}
 
-  @Override
-  public void add_setVariableStatement(Statement statement) throws Exception {
-    Expression initializer = ((ExpressionStatement) statement).getExpression();
-    add_setInitializer(initializer);
-  }
+	@Override
+	public void add_setVariableStatement(Statement statement) throws Exception {
+		Expression initializer = ((ExpressionStatement) statement).getExpression();
+		add_setInitializer(initializer);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/EmptyVariableSupport.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/EmptyVariableSupport.java
index 70ae03156..5bfe3a22a 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/EmptyVariableSupport.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/EmptyVariableSupport.java
@@ -50,528 +50,528 @@
  * @coverage core.model.variable
  */
 public class EmptyVariableSupport extends VariableSupport {
-  private Expression m_initializer;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected EmptyVariableSupport(JavaInfo javaInfo) {
-    super(javaInfo);
-  }
-
-  public EmptyVariableSupport(JavaInfo javaInfo, Expression initializer) {
-    super(javaInfo);
-    m_initializer = initializer;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final String toString() {
-    return "empty";
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final boolean isDefault() {
-    return true;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Special access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the initializer {@link Expression} that represents this {@link JavaInfo}.
-   */
-  public final Expression getInitializer() {
-    return m_initializer;
-  }
-
-  /**
-   * Converts this "empty" variable into existing local variable.
-   */
-  public final void materialize() throws Exception {
-    m_javaInfo.getBroadcastJava().variable_emptyMaterializeBefore(this);
-    if (getEnclosingField() != null) {
-      materialize_newField();
-    } else if (isPureInitializer()) {
-      materialize_sameStatement();
-    } else {
-      materialize_newStatement();
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Name
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final boolean hasName() {
-    return true;
-  }
-
-  @Override
-  public final String getName() {
-    return null;
-  }
-
-  @Override
-  public final void setName(String newName) throws Exception {
-    materialize();
-    m_javaInfo.getVariableSupport().setName(newName);
-  }
-
-  @Override
-  public final String getTitle() throws Exception {
-    return "(no variable)";
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Expressions
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean hasExpression(NodeTarget target) {
-    return true;
-  }
-
-  @Override
-  public final String getReferenceExpression(NodeTarget target) throws Exception {
-    ensureLocalVariable_withUpdatingTarget(target);
-    return m_javaInfo.getVariableSupport().getReferenceExpression(target);
-  }
-
-  @Override
-  public final String getAccessExpression(NodeTarget target) throws Exception {
-    return getReferenceExpression(target) + ".";
-  }
-
-  private void ensureLocalVariable_withUpdatingTarget(NodeTarget target) throws Exception {
-    StatementTarget statementTarget = target.getStatementTarget();
-    if (statementTarget != null) {
-      boolean targetUsesThisStatement = statementTarget.getStatement() == getStatement();
-      materialize();
-      if (targetUsesThisStatement) {
-        statementTarget.setStatement(getStatement());
-      }
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Conversion
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final boolean canConvertLocalToField() {
-    return true;
-  }
-
-  @Override
-  public final void convertLocalToField() throws Exception {
-    materialize();
-    m_javaInfo.getVariableSupport().convertLocalToField();
-  }
-
-  @Override
-  public final boolean canConvertFieldToLocal() {
-    return true;
-  }
-
-  @Override
-  public final void convertFieldToLocal() throws Exception {
-    materialize();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Target
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final StatementTarget getStatementTarget() throws Exception {
-    materialize();
-    return m_javaInfo.getVariableSupport().getStatementTarget();
-  }
-
-  @Override
-  public void ensureInstanceReadyAt(StatementTarget target) throws Exception {
-    if (shouldMoveOnlyInitializater()) {
-      ExpressionStatement statement = (ExpressionStatement) m_initializer.getParent();
-      m_javaInfo.getEditor().moveStatement(statement, target);
-    } else {
-      materialize();
-      m_javaInfo.getVariableSupport().ensureInstanceReadyAt(target);
-    }
-  }
-
-  @Override
-  public StatementTarget getAssociationTarget(StatementTarget target) throws Exception {
-    return target;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Internal checks
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if initializer is direct child of {@link ExpressionStatement}, i.e.
-   *         for example just <code>new Button(parent, style);</code>.
-   */
-  private boolean isPureInitializer() {
-    return m_initializer.getParent() instanceof ExpressionStatement;
-  }
-
-  /**
-   * Checks if only initializer {@link ExpressionStatement} should be moved.
-   * <p>
-   * In some exotic situations {@link JavaInfo} with {@link EmptyVariableSupport} still can have
-   * children, so example in GWT <code>MenuBar.addItem(text, childMenuBar)</code>. So, in this case
-   * we should move these children too, not just single statement.
-   */
-  private boolean shouldMoveOnlyInitializater() {
-    if (isPureInitializer()) {
-      return m_javaInfo.getChildrenJava().isEmpty();
-    }
-    return false;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Declaration
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link Statement} of {@link #m_initializer}.
-   */
-  private Statement getStatement() {
-    return AstNodeUtils.getEnclosingStatement(m_initializer);
-  }
-
-  /**
-   * @return the {@link FieldDeclaration} that encloses {@link #m_initializer}, may be
-   *         <code>null</code>.
-   */
-  private FieldDeclaration getEnclosingField() {
-    return AstNodeUtils.getEnclosingFieldDeclaration(m_initializer);
-  }
-
-  /**
-   * Converts this "empty" variable into existing local variable.<br>
-   * Case when initializer {@link Expression} is direct child of {@link ExpressionStatement}.
-   */
-  private void materialize_sameStatement() throws Exception {
-    AstEditor editor = m_javaInfo.getEditor();
-    ExpressionStatement oldStatement = (ExpressionStatement) m_initializer.getParent();
-    // prepare type
-    ITypeBinding typeBinding;
-    String typeName;
-    {
-      typeBinding = AstNodeUtils.getTypeBinding(m_initializer);
-      typeName = editor.getTypeBindingSource(typeBinding);
-    }
-    // initialize position and source
-    int position = oldStatement.getStartPosition();
-    String source = "";
-    // add type
-    Type newType;
-    {
-      newType = editor.getParser().parseQualifiedType(position, typeName);
-      source += typeName + " ";
-    }
-    // add variable
-    String variableName;
-    SimpleName newDeclarationVariable;
-    {
-      variableName =
-          editor.getUniqueVariableName(
-              m_initializer.getStartPosition(),
-              NamesManager.getName(m_javaInfo),
-              null);
-      newDeclarationVariable =
-          editor.getParser().parseVariable(
-              position + source.length(),
-              variableName,
-              null,
-              typeBinding,
-              false,
-              Modifier.NONE);
-      source += variableName + " = ";
-    }
-    // move initializer
-    {
-      String initializerSource = editor.getSource(m_initializer);
-      // replace initializer, so "free" it to use with different parent
-      oldStatement.setExpression(editor.getParser().parseSimpleName(0, "__wbp_Tmp"));
-      // use initializer for declaration
-      AstNodeUtils.moveNode(m_initializer, position + source.length());
-      source += initializerSource;
-    }
-    // add fragment
-    VariableDeclarationFragment newFragment;
-    {
-      newFragment = m_initializer.getAST().newVariableDeclarationFragment();
-      newFragment.setName(newDeclarationVariable);
-      newFragment.setInitializer(m_initializer);
-      AstNodeUtils.setSourceRange(newFragment, newDeclarationVariable, m_initializer);
-    }
-    // add statement
-    VariableDeclarationStatement newStatement;
-    {
-      newStatement = m_initializer.getAST().newVariableDeclarationStatement(newFragment);
-      newStatement.setType(newType);
-      AstNodeUtils.setSourceRange(newStatement, newType, newFragment, 1);
-      source += ";";
-    }
-    // update source
-    editor.replaceSubstring(oldStatement.getStartPosition(), oldStatement.getLength(), source);
-    // set new statement into AST
-    {
-      List<Statement> statements = DomGenerics.statements((Block) oldStatement.getParent());
-      int index = statements.indexOf(oldStatement);
-      statements.set(index, newStatement);
-      editor.resolveImports(newStatement);
-    }
-    // use local variable support
-    m_javaInfo.setVariableSupport(new LocalUniqueVariableSupport(m_javaInfo, newDeclarationVariable));
-  }
-
-  /**
-   * Converts this "empty" variable into existing local variable.<br>
-   * Case when initializer {@link Expression} is part of some other {@link Expression}.
-   */
-  private void materialize_newStatement() throws Exception {
-    AstEditor editor = m_javaInfo.getEditor();
-    Statement oldStatement = getStatement();
-    // prepare type
-    ITypeBinding typeBinding;
-    String typeName;
-    {
-      typeBinding = AstNodeUtils.getTypeBinding(m_initializer);
-      typeName = editor.getTypeBindingSource(typeBinding);
-    }
-    // initialize position and source
-    int position = oldStatement.getStartPosition();
-    String source = "";
-    // add type
-    Type newType;
-    {
-      newType = editor.getParser().parseQualifiedType(position, typeName);
-      source += typeName + " ";
-    }
-    // add variable
-    String variableName;
-    SimpleName newDeclarationVariable;
-    {
-      variableName =
-          editor.getUniqueVariableName(
-              m_initializer.getStartPosition(),
-              NamesManager.getName(m_javaInfo),
-              null);
-      newDeclarationVariable =
-          editor.getParser().parseVariable(
-              position + source.length(),
-              variableName,
-              null,
-              typeBinding,
-              false,
-              Modifier.NONE);
-      source += variableName + " = ";
-    }
-    // move initializer
-    {
-      String initializerSource = editor.getSource(m_initializer);
-      int originalInitializerPosition = m_initializer.getStartPosition();
-      int originalInitializerLength = m_initializer.getLength();
-      // replace initializer with variable
-      {
-        SimpleName newUseVariable =
-            editor.getParser().parseVariable(
-                originalInitializerPosition,
-                variableName,
-                null,
-                typeBinding,
-                false,
-                Modifier.NONE);
-        //
-        AstEditor.replaceNode(m_initializer, newUseVariable);
-        m_javaInfo.addRelatedNode(newUseVariable);
-        editor.replaceSubstring(
-            originalInitializerPosition,
-            originalInitializerLength,
-            newUseVariable.getIdentifier());
-        AstNodeUtils.moveNode(newUseVariable, originalInitializerPosition);
-        editor.inlineParenthesizedExpression(newUseVariable);
-      }
-      // use initializer for declaration
-      AstNodeUtils.moveNode(m_initializer, position + source.length());
-      source += initializerSource;
-    }
-    // add fragment
-    VariableDeclarationFragment newFragment;
-    {
-      newFragment = m_initializer.getAST().newVariableDeclarationFragment();
-      newFragment.setName(newDeclarationVariable);
-      newFragment.setInitializer(m_initializer);
-      AstNodeUtils.setSourceRange(newFragment, newDeclarationVariable, m_initializer);
-    }
-    // add statement
-    VariableDeclarationStatement newStatement;
-    {
-      newStatement = m_initializer.getAST().newVariableDeclarationStatement(newFragment);
-      newStatement.setType(newType);
-      AstNodeUtils.setSourceRange(newStatement, newType, newFragment, 1);
-      source += ";";
-    }
-    // add EOL and prefix
-    source += editor.getGeneration().getEndOfLine() + editor.getWhitespaceToLeft(position, false);
-    // update source
-    editor.replaceSubstring(position, 0, source);
-    // add new statement to AST
-    {
-      List<Statement> statements = DomGenerics.statements((Block) oldStatement.getParent());
-      int index = statements.indexOf(oldStatement);
-      statements.add(index, newStatement);
-      editor.resolveImports(newStatement);
-    }
-    // use local variable support
-    m_javaInfo.setVariableSupport(new LocalUniqueVariableSupport(m_javaInfo, newDeclarationVariable));
-  }
-
-  /**
-   * Converts this "empty" variable into {@link LocalUniqueVariableSupport}.
-   * <p>
-   * Case when initializer {@link Expression} is part of other {@link FieldDeclaration}.
-   */
-  private void materialize_newField() throws Exception {
-    AstEditor editor = m_javaInfo.getEditor();
-    FieldDeclaration oldField = getEnclosingField();
-    // prepare type
-    ITypeBinding typeBinding;
-    String typeName;
-    {
-      typeBinding = AstNodeUtils.getTypeBinding(m_initializer);
-      typeName = editor.getTypeBindingSource(typeBinding);
-    }
-    // initialize position and source
-    int position = oldField.getStartPosition();
-    String source = "";
-    // modifier
-    {
-      source += "private ";
-    }
-    // add type
-    Type newType;
-    {
-      newType = editor.getParser().parseQualifiedType(position + source.length(), typeName);
-      source += typeName + " ";
-    }
-    // add variable
-    String variableName;
-    SimpleName newDeclarationVariable;
-    {
-      variableName =
-          editor.getUniqueVariableName(
-              m_initializer.getStartPosition(),
-              NamesManager.getName(m_javaInfo),
-              null);
-      newDeclarationVariable =
-          editor.getParser().parseVariable(
-              position + source.length(),
-              variableName,
-              null,
-              typeBinding,
-              false,
-              Modifier.NONE);
-      source += variableName + " = ";
-    }
-    // move initializer
-    {
-      String initializerSource = editor.getSource(m_initializer);
-      int originalInitializerPosition = m_initializer.getStartPosition();
-      int originalInitializerLength = m_initializer.getLength();
-      // replace initializer with variable
-      {
-        SimpleName newUseVariable =
-            editor.getParser().parseVariable(
-                originalInitializerPosition,
-                variableName,
-                null,
-                typeBinding,
-                false,
-                Modifier.NONE);
-        //
-        AstEditor.replaceNode(m_initializer, newUseVariable);
-        m_javaInfo.addRelatedNode(newUseVariable);
-        editor.replaceSubstring(
-            originalInitializerPosition,
-            originalInitializerLength,
-            newUseVariable.getIdentifier());
-        AstNodeUtils.moveNode(newUseVariable, originalInitializerPosition);
-        editor.inlineParenthesizedExpression(newUseVariable);
-      }
-      // use initializer for declaration
-      AstNodeUtils.moveNode(m_initializer, position + source.length());
-      source += initializerSource;
-    }
-    // add fragment
-    VariableDeclarationFragment newFragment;
-    {
-      newFragment = m_initializer.getAST().newVariableDeclarationFragment();
-      newFragment.setName(newDeclarationVariable);
-      newFragment.setInitializer(m_initializer);
-      AstNodeUtils.setSourceRange(newFragment, newDeclarationVariable, m_initializer);
-    }
-    // add statement
-    FieldDeclaration newField;
-    {
-      newField = m_initializer.getAST().newFieldDeclaration(newFragment);
-      newField.setType(newType);
-      AstNodeUtils.setSourceRange(newField, newType, newFragment, 1);
-      source += ";";
-    }
-    // add EOL and prefix
-    source += editor.getGeneration().getEndOfLine() + editor.getWhitespaceToLeft(position, false);
-    // update source
-    editor.replaceSubstring(position, 0, source);
-    // add new statement to AST
-    {
-      TypeDeclaration typeDeclaration = (TypeDeclaration) oldField.getParent();
-      List<BodyDeclaration> bodyDeclarations = DomGenerics.bodyDeclarations(typeDeclaration);
-      int index = bodyDeclarations.indexOf(oldField);
-      bodyDeclarations.add(index, newField);
-      editor.resolveImports(newField);
-    }
-    // use local variable support
-    m_javaInfo.setVariableSupport(new FieldInitializerVariableSupport(m_javaInfo,
-        newDeclarationVariable));
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Adding
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Special method for initializing {@link EmptyVariableSupport} using pure {@link Expression}.
-   */
-  protected final void add_setInitializer(Expression initializer) throws Exception {
-    m_initializer = initializer;
-    m_javaInfo.addRelatedNode(m_initializer);
-    m_javaInfo.getCreationSupport().add_setSourceExpression(m_initializer);
-  }
+	private Expression m_initializer;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected EmptyVariableSupport(JavaInfo javaInfo) {
+		super(javaInfo);
+	}
+
+	public EmptyVariableSupport(JavaInfo javaInfo, Expression initializer) {
+		super(javaInfo);
+		m_initializer = initializer;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final String toString() {
+		return "empty";
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final boolean isDefault() {
+		return true;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Special access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the initializer {@link Expression} that represents this {@link JavaInfo}.
+	 */
+	public final Expression getInitializer() {
+		return m_initializer;
+	}
+
+	/**
+	 * Converts this "empty" variable into existing local variable.
+	 */
+	public final void materialize() throws Exception {
+		m_javaInfo.getBroadcastJava().variable_emptyMaterializeBefore(this);
+		if (getEnclosingField() != null) {
+			materialize_newField();
+		} else if (isPureInitializer()) {
+			materialize_sameStatement();
+		} else {
+			materialize_newStatement();
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Name
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final boolean hasName() {
+		return true;
+	}
+
+	@Override
+	public final String getName() {
+		return null;
+	}
+
+	@Override
+	public final void setName(String newName) throws Exception {
+		materialize();
+		m_javaInfo.getVariableSupport().setName(newName);
+	}
+
+	@Override
+	public final String getTitle() throws Exception {
+		return "(no variable)";
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Expressions
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean hasExpression(NodeTarget target) {
+		return true;
+	}
+
+	@Override
+	public final String getReferenceExpression(NodeTarget target) throws Exception {
+		ensureLocalVariable_withUpdatingTarget(target);
+		return m_javaInfo.getVariableSupport().getReferenceExpression(target);
+	}
+
+	@Override
+	public final String getAccessExpression(NodeTarget target) throws Exception {
+		return getReferenceExpression(target) + ".";
+	}
+
+	private void ensureLocalVariable_withUpdatingTarget(NodeTarget target) throws Exception {
+		StatementTarget statementTarget = target.getStatementTarget();
+		if (statementTarget != null) {
+			boolean targetUsesThisStatement = statementTarget.getStatement() == getStatement();
+			materialize();
+			if (targetUsesThisStatement) {
+				statementTarget.setStatement(getStatement());
+			}
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Conversion
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final boolean canConvertLocalToField() {
+		return true;
+	}
+
+	@Override
+	public final void convertLocalToField() throws Exception {
+		materialize();
+		m_javaInfo.getVariableSupport().convertLocalToField();
+	}
+
+	@Override
+	public final boolean canConvertFieldToLocal() {
+		return true;
+	}
+
+	@Override
+	public final void convertFieldToLocal() throws Exception {
+		materialize();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Target
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final StatementTarget getStatementTarget() throws Exception {
+		materialize();
+		return m_javaInfo.getVariableSupport().getStatementTarget();
+	}
+
+	@Override
+	public void ensureInstanceReadyAt(StatementTarget target) throws Exception {
+		if (shouldMoveOnlyInitializater()) {
+			ExpressionStatement statement = (ExpressionStatement) m_initializer.getParent();
+			m_javaInfo.getEditor().moveStatement(statement, target);
+		} else {
+			materialize();
+			m_javaInfo.getVariableSupport().ensureInstanceReadyAt(target);
+		}
+	}
+
+	@Override
+	public StatementTarget getAssociationTarget(StatementTarget target) throws Exception {
+		return target;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Internal checks
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if initializer is direct child of {@link ExpressionStatement}, i.e.
+	 *         for example just <code>new Button(parent, style);</code>.
+	 */
+	private boolean isPureInitializer() {
+		return m_initializer.getParent() instanceof ExpressionStatement;
+	}
+
+	/**
+	 * Checks if only initializer {@link ExpressionStatement} should be moved.
+	 * <p>
+	 * In some exotic situations {@link JavaInfo} with {@link EmptyVariableSupport} still can have
+	 * children, so example in GWT <code>MenuBar.addItem(text, childMenuBar)</code>. So, in this case
+	 * we should move these children too, not just single statement.
+	 */
+	private boolean shouldMoveOnlyInitializater() {
+		if (isPureInitializer()) {
+			return m_javaInfo.getChildrenJava().isEmpty();
+		}
+		return false;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Declaration
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link Statement} of {@link #m_initializer}.
+	 */
+	private Statement getStatement() {
+		return AstNodeUtils.getEnclosingStatement(m_initializer);
+	}
+
+	/**
+	 * @return the {@link FieldDeclaration} that encloses {@link #m_initializer}, may be
+	 *         <code>null</code>.
+	 */
+	private FieldDeclaration getEnclosingField() {
+		return AstNodeUtils.getEnclosingFieldDeclaration(m_initializer);
+	}
+
+	/**
+	 * Converts this "empty" variable into existing local variable.<br>
+	 * Case when initializer {@link Expression} is direct child of {@link ExpressionStatement}.
+	 */
+	private void materialize_sameStatement() throws Exception {
+		AstEditor editor = m_javaInfo.getEditor();
+		ExpressionStatement oldStatement = (ExpressionStatement) m_initializer.getParent();
+		// prepare type
+		ITypeBinding typeBinding;
+		String typeName;
+		{
+			typeBinding = AstNodeUtils.getTypeBinding(m_initializer);
+			typeName = editor.getTypeBindingSource(typeBinding);
+		}
+		// initialize position and source
+		int position = oldStatement.getStartPosition();
+		String source = "";
+		// add type
+		Type newType;
+		{
+			newType = editor.getParser().parseQualifiedType(position, typeName);
+			source += typeName + " ";
+		}
+		// add variable
+		String variableName;
+		SimpleName newDeclarationVariable;
+		{
+			variableName =
+					editor.getUniqueVariableName(
+							m_initializer.getStartPosition(),
+							NamesManager.getName(m_javaInfo),
+							null);
+			newDeclarationVariable =
+					editor.getParser().parseVariable(
+							position + source.length(),
+							variableName,
+							null,
+							typeBinding,
+							false,
+							Modifier.NONE);
+			source += variableName + " = ";
+		}
+		// move initializer
+		{
+			String initializerSource = editor.getSource(m_initializer);
+			// replace initializer, so "free" it to use with different parent
+			oldStatement.setExpression(editor.getParser().parseSimpleName(0, "__wbp_Tmp"));
+			// use initializer for declaration
+			AstNodeUtils.moveNode(m_initializer, position + source.length());
+			source += initializerSource;
+		}
+		// add fragment
+		VariableDeclarationFragment newFragment;
+		{
+			newFragment = m_initializer.getAST().newVariableDeclarationFragment();
+			newFragment.setName(newDeclarationVariable);
+			newFragment.setInitializer(m_initializer);
+			AstNodeUtils.setSourceRange(newFragment, newDeclarationVariable, m_initializer);
+		}
+		// add statement
+		VariableDeclarationStatement newStatement;
+		{
+			newStatement = m_initializer.getAST().newVariableDeclarationStatement(newFragment);
+			newStatement.setType(newType);
+			AstNodeUtils.setSourceRange(newStatement, newType, newFragment, 1);
+			source += ";";
+		}
+		// update source
+		editor.replaceSubstring(oldStatement.getStartPosition(), oldStatement.getLength(), source);
+		// set new statement into AST
+		{
+			List<Statement> statements = DomGenerics.statements((Block) oldStatement.getParent());
+			int index = statements.indexOf(oldStatement);
+			statements.set(index, newStatement);
+			editor.resolveImports(newStatement);
+		}
+		// use local variable support
+		m_javaInfo.setVariableSupport(new LocalUniqueVariableSupport(m_javaInfo, newDeclarationVariable));
+	}
+
+	/**
+	 * Converts this "empty" variable into existing local variable.<br>
+	 * Case when initializer {@link Expression} is part of some other {@link Expression}.
+	 */
+	private void materialize_newStatement() throws Exception {
+		AstEditor editor = m_javaInfo.getEditor();
+		Statement oldStatement = getStatement();
+		// prepare type
+		ITypeBinding typeBinding;
+		String typeName;
+		{
+			typeBinding = AstNodeUtils.getTypeBinding(m_initializer);
+			typeName = editor.getTypeBindingSource(typeBinding);
+		}
+		// initialize position and source
+		int position = oldStatement.getStartPosition();
+		String source = "";
+		// add type
+		Type newType;
+		{
+			newType = editor.getParser().parseQualifiedType(position, typeName);
+			source += typeName + " ";
+		}
+		// add variable
+		String variableName;
+		SimpleName newDeclarationVariable;
+		{
+			variableName =
+					editor.getUniqueVariableName(
+							m_initializer.getStartPosition(),
+							NamesManager.getName(m_javaInfo),
+							null);
+			newDeclarationVariable =
+					editor.getParser().parseVariable(
+							position + source.length(),
+							variableName,
+							null,
+							typeBinding,
+							false,
+							Modifier.NONE);
+			source += variableName + " = ";
+		}
+		// move initializer
+		{
+			String initializerSource = editor.getSource(m_initializer);
+			int originalInitializerPosition = m_initializer.getStartPosition();
+			int originalInitializerLength = m_initializer.getLength();
+			// replace initializer with variable
+			{
+				SimpleName newUseVariable =
+						editor.getParser().parseVariable(
+								originalInitializerPosition,
+								variableName,
+								null,
+								typeBinding,
+								false,
+								Modifier.NONE);
+				//
+				AstEditor.replaceNode(m_initializer, newUseVariable);
+				m_javaInfo.addRelatedNode(newUseVariable);
+				editor.replaceSubstring(
+						originalInitializerPosition,
+						originalInitializerLength,
+						newUseVariable.getIdentifier());
+				AstNodeUtils.moveNode(newUseVariable, originalInitializerPosition);
+				editor.inlineParenthesizedExpression(newUseVariable);
+			}
+			// use initializer for declaration
+			AstNodeUtils.moveNode(m_initializer, position + source.length());
+			source += initializerSource;
+		}
+		// add fragment
+		VariableDeclarationFragment newFragment;
+		{
+			newFragment = m_initializer.getAST().newVariableDeclarationFragment();
+			newFragment.setName(newDeclarationVariable);
+			newFragment.setInitializer(m_initializer);
+			AstNodeUtils.setSourceRange(newFragment, newDeclarationVariable, m_initializer);
+		}
+		// add statement
+		VariableDeclarationStatement newStatement;
+		{
+			newStatement = m_initializer.getAST().newVariableDeclarationStatement(newFragment);
+			newStatement.setType(newType);
+			AstNodeUtils.setSourceRange(newStatement, newType, newFragment, 1);
+			source += ";";
+		}
+		// add EOL and prefix
+		source += editor.getGeneration().getEndOfLine() + editor.getWhitespaceToLeft(position, false);
+		// update source
+		editor.replaceSubstring(position, 0, source);
+		// add new statement to AST
+		{
+			List<Statement> statements = DomGenerics.statements((Block) oldStatement.getParent());
+			int index = statements.indexOf(oldStatement);
+			statements.add(index, newStatement);
+			editor.resolveImports(newStatement);
+		}
+		// use local variable support
+		m_javaInfo.setVariableSupport(new LocalUniqueVariableSupport(m_javaInfo, newDeclarationVariable));
+	}
+
+	/**
+	 * Converts this "empty" variable into {@link LocalUniqueVariableSupport}.
+	 * <p>
+	 * Case when initializer {@link Expression} is part of other {@link FieldDeclaration}.
+	 */
+	private void materialize_newField() throws Exception {
+		AstEditor editor = m_javaInfo.getEditor();
+		FieldDeclaration oldField = getEnclosingField();
+		// prepare type
+		ITypeBinding typeBinding;
+		String typeName;
+		{
+			typeBinding = AstNodeUtils.getTypeBinding(m_initializer);
+			typeName = editor.getTypeBindingSource(typeBinding);
+		}
+		// initialize position and source
+		int position = oldField.getStartPosition();
+		String source = "";
+		// modifier
+		{
+			source += "private ";
+		}
+		// add type
+		Type newType;
+		{
+			newType = editor.getParser().parseQualifiedType(position + source.length(), typeName);
+			source += typeName + " ";
+		}
+		// add variable
+		String variableName;
+		SimpleName newDeclarationVariable;
+		{
+			variableName =
+					editor.getUniqueVariableName(
+							m_initializer.getStartPosition(),
+							NamesManager.getName(m_javaInfo),
+							null);
+			newDeclarationVariable =
+					editor.getParser().parseVariable(
+							position + source.length(),
+							variableName,
+							null,
+							typeBinding,
+							false,
+							Modifier.NONE);
+			source += variableName + " = ";
+		}
+		// move initializer
+		{
+			String initializerSource = editor.getSource(m_initializer);
+			int originalInitializerPosition = m_initializer.getStartPosition();
+			int originalInitializerLength = m_initializer.getLength();
+			// replace initializer with variable
+			{
+				SimpleName newUseVariable =
+						editor.getParser().parseVariable(
+								originalInitializerPosition,
+								variableName,
+								null,
+								typeBinding,
+								false,
+								Modifier.NONE);
+				//
+				AstEditor.replaceNode(m_initializer, newUseVariable);
+				m_javaInfo.addRelatedNode(newUseVariable);
+				editor.replaceSubstring(
+						originalInitializerPosition,
+						originalInitializerLength,
+						newUseVariable.getIdentifier());
+				AstNodeUtils.moveNode(newUseVariable, originalInitializerPosition);
+				editor.inlineParenthesizedExpression(newUseVariable);
+			}
+			// use initializer for declaration
+			AstNodeUtils.moveNode(m_initializer, position + source.length());
+			source += initializerSource;
+		}
+		// add fragment
+		VariableDeclarationFragment newFragment;
+		{
+			newFragment = m_initializer.getAST().newVariableDeclarationFragment();
+			newFragment.setName(newDeclarationVariable);
+			newFragment.setInitializer(m_initializer);
+			AstNodeUtils.setSourceRange(newFragment, newDeclarationVariable, m_initializer);
+		}
+		// add statement
+		FieldDeclaration newField;
+		{
+			newField = m_initializer.getAST().newFieldDeclaration(newFragment);
+			newField.setType(newType);
+			AstNodeUtils.setSourceRange(newField, newType, newFragment, 1);
+			source += ";";
+		}
+		// add EOL and prefix
+		source += editor.getGeneration().getEndOfLine() + editor.getWhitespaceToLeft(position, false);
+		// update source
+		editor.replaceSubstring(position, 0, source);
+		// add new statement to AST
+		{
+			TypeDeclaration typeDeclaration = (TypeDeclaration) oldField.getParent();
+			List<BodyDeclaration> bodyDeclarations = DomGenerics.bodyDeclarations(typeDeclaration);
+			int index = bodyDeclarations.indexOf(oldField);
+			bodyDeclarations.add(index, newField);
+			editor.resolveImports(newField);
+		}
+		// use local variable support
+		m_javaInfo.setVariableSupport(new FieldInitializerVariableSupport(m_javaInfo,
+				newDeclarationVariable));
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Adding
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Special method for initializing {@link EmptyVariableSupport} using pure {@link Expression}.
+	 */
+	protected final void add_setInitializer(Expression initializer) throws Exception {
+		m_initializer = initializer;
+		m_javaInfo.addRelatedNode(m_initializer);
+		m_javaInfo.getCreationSupport().add_setSourceExpression(m_initializer);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/ExposedFieldVariableSupport.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/ExposedFieldVariableSupport.java
index 489dbd0eb..6ed7797df 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/ExposedFieldVariableSupport.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/ExposedFieldVariableSupport.java
@@ -29,90 +29,90 @@
  * @coverage core.model.variable
  */
 public final class ExposedFieldVariableSupport extends AbstractNoNameVariableSupport {
-  private final JavaInfo m_hostJavaInfo;
-  private final Field m_field;
+	private final JavaInfo m_hostJavaInfo;
+	private final Field m_field;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ExposedFieldVariableSupport(JavaInfo javaInfo, JavaInfo hostJavaInfo, Field field) {
-    super(javaInfo);
-    m_hostJavaInfo = hostJavaInfo;
-    m_field = field;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ExposedFieldVariableSupport(JavaInfo javaInfo, JavaInfo hostJavaInfo, Field field) {
+		super(javaInfo);
+		m_hostJavaInfo = hostJavaInfo;
+		m_field = field;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    return m_field.getName();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		return m_field.getName();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean isValidStatementForChild(Statement statement) {
-    return m_hostJavaInfo.getVariableSupport().isValidStatementForChild(statement);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean isValidStatementForChild(Statement statement) {
+		return m_hostJavaInfo.getVariableSupport().isValidStatementForChild(statement);
+	}
 
-  @Override
-  public String getTitle() throws Exception {
-    return m_field.getName();
-  }
+	@Override
+	public String getTitle() throws Exception {
+		return m_field.getName();
+	}
 
-  @Override
-  public String getComponentName() {
-    String name = m_field.getName();
-    name =
-        new VariableUtils(m_javaInfo).stripPrefixSuffix(
-            name,
-            JavaCore.CODEASSIST_FIELD_PREFIXES,
-            JavaCore.CODEASSIST_FIELD_SUFFIXES);
-    name = StringUtils.capitalize(name);
-    return m_hostJavaInfo.getVariableSupport().getComponentName() + name;
-  }
+	@Override
+	public String getComponentName() {
+		String name = m_field.getName();
+		name =
+				new VariableUtils(m_javaInfo).stripPrefixSuffix(
+						name,
+						JavaCore.CODEASSIST_FIELD_PREFIXES,
+						JavaCore.CODEASSIST_FIELD_SUFFIXES);
+		name = StringUtils.capitalize(name);
+		return m_hostJavaInfo.getVariableSupport().getComponentName() + name;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Expressions
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean hasExpression(NodeTarget target) {
-    return m_hostJavaInfo.getVariableSupport().hasExpression(target);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Expressions
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean hasExpression(NodeTarget target) {
+		return m_hostJavaInfo.getVariableSupport().hasExpression(target);
+	}
 
-  @Override
-  public String getReferenceExpression(NodeTarget target) throws Exception {
-    String parentAccess = m_hostJavaInfo.getVariableSupport().getAccessExpression(target);
-    return parentAccess + m_field.getName();
-  }
+	@Override
+	public String getReferenceExpression(NodeTarget target) throws Exception {
+		String parentAccess = m_hostJavaInfo.getVariableSupport().getAccessExpression(target);
+		return parentAccess + m_field.getName();
+	}
 
-  @Override
-  public String getAccessExpression(NodeTarget target) throws Exception {
-    return getReferenceExpression(target) + ".";
-  }
+	@Override
+	public String getAccessExpression(NodeTarget target) throws Exception {
+		return getReferenceExpression(target) + ".";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Target
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public StatementTarget getStatementTarget() throws Exception {
-    return m_hostJavaInfo.getVariableSupport().getStatementTarget();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Target
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public StatementTarget getStatementTarget() throws Exception {
+		return m_hostJavaInfo.getVariableSupport().getStatementTarget();
+	}
 
-  @Override
-  public StatementTarget getChildTarget() throws Exception {
-    return JavaInfoUtils.getTarget(m_hostJavaInfo);
-  }
+	@Override
+	public StatementTarget getChildTarget() throws Exception {
+		return JavaInfoUtils.getTarget(m_hostJavaInfo);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/ExposedPropertyVariableSupport.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/ExposedPropertyVariableSupport.java
index 580cc5f53..e87cca366 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/ExposedPropertyVariableSupport.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/ExposedPropertyVariableSupport.java
@@ -28,88 +28,88 @@
  * @coverage core.model.variable
  */
 public final class ExposedPropertyVariableSupport extends AbstractNoNameVariableSupport {
-  private final JavaInfo m_hostJavaInfo;
-  private final Method m_method;
+	private final JavaInfo m_hostJavaInfo;
+	private final Method m_method;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ExposedPropertyVariableSupport(JavaInfo javaInfo, JavaInfo hostJavaInfo, Method method) {
-    super(javaInfo);
-    m_hostJavaInfo = hostJavaInfo;
-    m_method = method;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ExposedPropertyVariableSupport(JavaInfo javaInfo, JavaInfo hostJavaInfo, Method method) {
+		super(javaInfo);
+		m_hostJavaInfo = hostJavaInfo;
+		m_method = method;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    return "property";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		return "property";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean isValidStatementForChild(Statement statement) {
-    return m_hostJavaInfo.getVariableSupport().isValidStatementForChild(statement);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean isValidStatementForChild(Statement statement) {
+		return m_hostJavaInfo.getVariableSupport().isValidStatementForChild(statement);
+	}
 
-  @Override
-  public String getTitle() throws Exception {
-    return m_method.getName() + "()";
-  }
+	@Override
+	public String getTitle() throws Exception {
+		return m_method.getName() + "()";
+	}
 
-  @Override
-  public String getComponentName() {
-    String methodName = m_method.getName();
-    if (methodName.startsWith("get")) {
-      methodName = methodName.substring("get".length());
-    }
-    return m_hostJavaInfo.getVariableSupport().getComponentName()
-        + StringUtils.capitalize(methodName);
-  }
+	@Override
+	public String getComponentName() {
+		String methodName = m_method.getName();
+		if (methodName.startsWith("get")) {
+			methodName = methodName.substring("get".length());
+		}
+		return m_hostJavaInfo.getVariableSupport().getComponentName()
+				+ StringUtils.capitalize(methodName);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Expressions
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean hasExpression(NodeTarget target) {
-    return m_hostJavaInfo.getVariableSupport().hasExpression(target);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Expressions
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean hasExpression(NodeTarget target) {
+		return m_hostJavaInfo.getVariableSupport().hasExpression(target);
+	}
 
-  @Override
-  public String getReferenceExpression(NodeTarget target) throws Exception {
-    String parentAccess = m_hostJavaInfo.getVariableSupport().getAccessExpression(target);
-    return parentAccess + m_method.getName() + "()";
-  }
+	@Override
+	public String getReferenceExpression(NodeTarget target) throws Exception {
+		String parentAccess = m_hostJavaInfo.getVariableSupport().getAccessExpression(target);
+		return parentAccess + m_method.getName() + "()";
+	}
 
-  @Override
-  public String getAccessExpression(NodeTarget target) throws Exception {
-    return getReferenceExpression(target) + ".";
-  }
+	@Override
+	public String getAccessExpression(NodeTarget target) throws Exception {
+		return getReferenceExpression(target) + ".";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Target
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public StatementTarget getStatementTarget() throws Exception {
-    return m_hostJavaInfo.getVariableSupport().getStatementTarget();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Target
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public StatementTarget getStatementTarget() throws Exception {
+		return m_hostJavaInfo.getVariableSupport().getStatementTarget();
+	}
 
-  @Override
-  public StatementTarget getChildTarget() throws Exception {
-    return JavaInfoUtils.getTarget(m_hostJavaInfo);
-  }
+	@Override
+	public StatementTarget getChildTarget() throws Exception {
+		return JavaInfoUtils.getTarget(m_hostJavaInfo);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/FieldInitializerVariableSupport.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/FieldInitializerVariableSupport.java
index 15c491603..8d4386c9f 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/FieldInitializerVariableSupport.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/FieldInitializerVariableSupport.java
@@ -53,308 +53,308 @@
  * @coverage core.model.variable
  */
 public final class FieldInitializerVariableSupport extends FieldVariableSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FieldInitializerVariableSupport(JavaInfo javaInfo) {
-    super(javaInfo);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FieldInitializerVariableSupport(JavaInfo javaInfo) {
+		super(javaInfo);
+	}
 
-  public FieldInitializerVariableSupport(JavaInfo javaInfo, Expression variable) {
-    super(javaInfo, variable);
-  }
+	public FieldInitializerVariableSupport(JavaInfo javaInfo, Expression variable) {
+		super(javaInfo, variable);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    return "field-initializer: " + getName();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		return "field-initializer: " + getName();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Name
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void setName(String newName) throws Exception {
-    modifyName(newName);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Name
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void setName(String newName) throws Exception {
+		modifyName(newName);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Target
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public StatementTarget getStatementTarget() throws Exception {
-    List<Statement> statements = getRelatedStatements();
-    if (!statements.isEmpty()) {
-      // sort statements
-      Collections.sort(statements, AstNodeUtils.SORT_BY_POSITION);
-      // target = before first statement
-      Statement targetStatement = statements.get(0);
-      return new StatementTarget(targetStatement, true);
-    } else {
-      // prepare first method with compatible static/instance modifier
-      MethodDeclaration targetMethod = getTargetMethod();
-      Assert.isNotNull(targetMethod, "Unable to find target method for " + m_javaInfo);
-      // if this method is constructor with super() invocation, add after it
-      {
-        List<Statement> targetStatements = DomGenerics.statements(targetMethod);
-        Statement firstTargetStatement = GenericsUtils.getFirstOrNull(targetStatements);
-        if (firstTargetStatement instanceof SuperConstructorInvocation) {
-          return new StatementTarget(firstTargetStatement, false);
-        }
-      }
-      // target = beginning of first method with compatible static/instance modifier
-      return new StatementTarget(targetMethod, true);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Target
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public StatementTarget getStatementTarget() throws Exception {
+		List<Statement> statements = getRelatedStatements();
+		if (!statements.isEmpty()) {
+			// sort statements
+			Collections.sort(statements, AstNodeUtils.SORT_BY_POSITION);
+			// target = before first statement
+			Statement targetStatement = statements.get(0);
+			return new StatementTarget(targetStatement, true);
+		} else {
+			// prepare first method with compatible static/instance modifier
+			MethodDeclaration targetMethod = getTargetMethod();
+			Assert.isNotNull(targetMethod, "Unable to find target method for " + m_javaInfo);
+			// if this method is constructor with super() invocation, add after it
+			{
+				List<Statement> targetStatements = DomGenerics.statements(targetMethod);
+				Statement firstTargetStatement = GenericsUtils.getFirstOrNull(targetStatements);
+				if (firstTargetStatement instanceof SuperConstructorInvocation) {
+					return new StatementTarget(firstTargetStatement, false);
+				}
+			}
+			// target = beginning of first method with compatible static/instance modifier
+			return new StatementTarget(targetMethod, true);
+		}
+	}
 
-  /**
-   * @return the {@link MethodDeclaration} for {@link StatementTarget}. It should be compatible with
-   *         static/instance modified of this {@link FieldDeclaration}.
-   */
-  private MethodDeclaration getTargetMethod() {
-    // check if field is static/instance
-    final boolean staticField;
-    {
-      FieldDeclaration field = AstNodeUtils.getEnclosingNode(m_variable, FieldDeclaration.class);
-      staticField = Modifier.isStatic(field.getModifiers());
-    }
-    // first try to use method of "root" JavaInfo
-    {
-      int position = m_javaInfo.getRootJava().getCreationSupport().getNode().getStartPosition();
-      MethodDeclaration enclosingMethod = m_javaInfo.getEditor().getEnclosingMethod(position);
-      if (enclosingMethod != null
-          && (staticField || !Modifier.isStatic(enclosingMethod.getModifiers()))) {
-        return enclosingMethod;
-      }
-    }
-    // well, visit execution flow and find first compatible method
-    final MethodDeclaration[] targetMethod = new MethodDeclaration[1];
-    ExecutionFlowUtils.visit(
-        new VisitingContext(true),
-        getFlowDescription(),
-        new ExecutionFlowFrameVisitor() {
-          @Override
-          public boolean enterFrame(ASTNode node) {
-            if (node instanceof MethodDeclaration) {
-              MethodDeclaration methodDeclaration = (MethodDeclaration) node;
-              if (staticField || !Modifier.isStatic(methodDeclaration.getModifiers())) {
-                targetMethod[0] = methodDeclaration;
-              }
-            }
-            return targetMethod[0] == null;
-          }
-        });
-    return targetMethod[0];
-  }
+	/**
+	 * @return the {@link MethodDeclaration} for {@link StatementTarget}. It should be compatible with
+	 *         static/instance modified of this {@link FieldDeclaration}.
+	 */
+	private MethodDeclaration getTargetMethod() {
+		// check if field is static/instance
+		final boolean staticField;
+		{
+			FieldDeclaration field = AstNodeUtils.getEnclosingNode(m_variable, FieldDeclaration.class);
+			staticField = Modifier.isStatic(field.getModifiers());
+		}
+		// first try to use method of "root" JavaInfo
+		{
+			int position = m_javaInfo.getRootJava().getCreationSupport().getNode().getStartPosition();
+			MethodDeclaration enclosingMethod = m_javaInfo.getEditor().getEnclosingMethod(position);
+			if (enclosingMethod != null
+					&& (staticField || !Modifier.isStatic(enclosingMethod.getModifiers()))) {
+				return enclosingMethod;
+			}
+		}
+		// well, visit execution flow and find first compatible method
+		final MethodDeclaration[] targetMethod = new MethodDeclaration[1];
+		ExecutionFlowUtils.visit(
+				new VisitingContext(true),
+				getFlowDescription(),
+				new ExecutionFlowFrameVisitor() {
+					@Override
+					public boolean enterFrame(ASTNode node) {
+						if (node instanceof MethodDeclaration) {
+							MethodDeclaration methodDeclaration = (MethodDeclaration) node;
+							if (staticField || !Modifier.isStatic(methodDeclaration.getModifiers())) {
+								targetMethod[0] = methodDeclaration;
+							}
+						}
+						return targetMethod[0] == null;
+					}
+				});
+		return targetMethod[0];
+	}
 
-  @Override
-  public void ensureInstanceReadyAt(StatementTarget target) throws Exception {
-    moveStatements(target);
-  }
+	@Override
+	public void ensureInstanceReadyAt(StatementTarget target) throws Exception {
+		moveStatements(target);
+	}
 
-  @Override
-  public StatementTarget getAssociationTarget(StatementTarget target) throws Exception {
-    List<Statement> statements = getRelatedStatements();
-    if (!statements.isEmpty()) {
-      return getStatementTarget();
-    } else {
-      return target;
-    }
-  }
+	@Override
+	public StatementTarget getAssociationTarget(StatementTarget target) throws Exception {
+		List<Statement> statements = getRelatedStatements();
+		if (!statements.isEmpty()) {
+			return getStatementTarget();
+		} else {
+			return target;
+		}
+	}
 
-  /**
-   * @return the related {@link Statement}'s, that should be moved with component.
-   */
-  private List<Statement> getRelatedStatements() {
-    List<Statement> statements = Lists.newArrayList();
-    // add association statement (when we move component, association may not exist)
-    if (m_javaInfo.getAssociation() != null) {
-      Statement associationStatement = m_javaInfo.getAssociation().getStatement();
-      if (associationStatement != null) {
-        statements.add(associationStatement);
-      }
-    }
-    // add related statements
-    for (ASTNode relatedNode : m_javaInfo.getRelatedNodes()) {
-      // add Statement with MethodInvocation
-      {
-        MethodInvocation invocation = m_javaInfo.getMethodInvocation(relatedNode);
-        if (invocation != null
-            && invocation.getLocationInParent() == ExpressionStatement.EXPRESSION_PROPERTY) {
-          statements.add((Statement) invocation.getParent());
-          continue;
-        }
-      }
-      // add Statement with Assignment
-      {
-        ASTNode fieldAccess = AstNodeUtils.getFieldAssignment(relatedNode);
-        if (fieldAccess != null) {
-          Assignment fieldAssignment = (Assignment) fieldAccess.getParent();
-          if (fieldAssignment.getLocationInParent() == ExpressionStatement.EXPRESSION_PROPERTY) {
-            statements.add((Statement) fieldAssignment.getParent());
-            continue;
-          }
-        }
-      }
-    }
-    return statements;
-  }
+	/**
+	 * @return the related {@link Statement}'s, that should be moved with component.
+	 */
+	private List<Statement> getRelatedStatements() {
+		List<Statement> statements = Lists.newArrayList();
+		// add association statement (when we move component, association may not exist)
+		if (m_javaInfo.getAssociation() != null) {
+			Statement associationStatement = m_javaInfo.getAssociation().getStatement();
+			if (associationStatement != null) {
+				statements.add(associationStatement);
+			}
+		}
+		// add related statements
+		for (ASTNode relatedNode : m_javaInfo.getRelatedNodes()) {
+			// add Statement with MethodInvocation
+			{
+				MethodInvocation invocation = m_javaInfo.getMethodInvocation(relatedNode);
+				if (invocation != null
+						&& invocation.getLocationInParent() == ExpressionStatement.EXPRESSION_PROPERTY) {
+					statements.add((Statement) invocation.getParent());
+					continue;
+				}
+			}
+			// add Statement with Assignment
+			{
+				ASTNode fieldAccess = AstNodeUtils.getFieldAssignment(relatedNode);
+				if (fieldAccess != null) {
+					Assignment fieldAssignment = (Assignment) fieldAccess.getParent();
+					if (fieldAssignment.getLocationInParent() == ExpressionStatement.EXPRESSION_PROPERTY) {
+						statements.add((Statement) fieldAssignment.getParent());
+						continue;
+					}
+				}
+			}
+		}
+		return statements;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Conversion
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean canConvertFieldToLocal() {
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Conversion
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean canConvertFieldToLocal() {
+		return false;
+	}
 
-  @Override
-  public void convertFieldToLocal() throws Exception {
-    throw new IllegalStateException();
-  }
+	@Override
+	public void convertFieldToLocal() throws Exception {
+		throw new IllegalStateException();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Adding
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String add_getVariableStatementSource(StatementTarget associationTarget) throws Exception {
-    // add field
-    VariableDeclarationFragment fragment;
-    {
-      NodeTarget creationTarget = getCreationTarget(associationTarget);
-      String initializer = m_javaInfo.getCreationSupport().add_getSource(creationTarget);
-      initializer = AssociationUtils.replaceTemplates(m_javaInfo, initializer, creationTarget);
-      fragment = addUniqueField(associationTarget.getPosition(), initializer);
-    }
-    // initialize variable and creation
-    add_setVariableAndInitializer(fragment.getName(), fragment.getInitializer());
-    // no assignment statement
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Adding
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String add_getVariableStatementSource(StatementTarget associationTarget) throws Exception {
+		// add field
+		VariableDeclarationFragment fragment;
+		{
+			NodeTarget creationTarget = getCreationTarget(associationTarget);
+			String initializer = m_javaInfo.getCreationSupport().add_getSource(creationTarget);
+			initializer = AssociationUtils.replaceTemplates(m_javaInfo, initializer, creationTarget);
+			fragment = addUniqueField(associationTarget.getPosition(), initializer);
+		}
+		// initialize variable and creation
+		add_setVariableAndInitializer(fragment.getName(), fragment.getInitializer());
+		// no assignment statement
+		return null;
+	}
 
-  /**
-   * @return the {@link NodeTarget} that specifies location of new {@link FieldDeclaration}, i.e.
-   *         location where {@link CreationSupport#add_getSource(NodeTarget)} will be used.
-   */
-  private static NodeTarget getCreationTarget(StatementTarget associationTarget) {
-    TypeDeclaration targetTypeDeclaration =
-        AstNodeUtils.getEnclosingType(associationTarget.getNode());
-    BodyDeclarationTarget newFieldTarget = new BodyDeclarationTarget(targetTypeDeclaration, true);
-    return new NodeTarget(newFieldTarget);
-  }
+	/**
+	 * @return the {@link NodeTarget} that specifies location of new {@link FieldDeclaration}, i.e.
+	 *         location where {@link CreationSupport#add_getSource(NodeTarget)} will be used.
+	 */
+	private static NodeTarget getCreationTarget(StatementTarget associationTarget) {
+		TypeDeclaration targetTypeDeclaration =
+				AstNodeUtils.getEnclosingType(associationTarget.getNode());
+		BodyDeclarationTarget newFieldTarget = new BodyDeclarationTarget(targetTypeDeclaration, true);
+		return new NodeTarget(newFieldTarget);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Delete
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void deleteAfter() throws Exception {
-    if (m_javaInfo.isRoot()) {
-      return;
-    }
-    delete_removeDeclarationField();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Delete
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void deleteAfter() throws Exception {
+		if (m_javaInfo.isRoot()) {
+			return;
+		}
+		delete_removeDeclarationField();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Morphing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void setType(String newTypeName) throws Exception {
-    AstEditor editor = m_javaInfo.getEditor();
-    editor.replaceVariableType(m_declaration, newTypeName);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Morphing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void setType(String newTypeName) throws Exception {
+		AstEditor editor = m_javaInfo.getEditor();
+		editor.replaceVariableType(m_declaration, newTypeName);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @param position
-   *          is location in source where this field will be referenced, used to decide if field
-   *          should be static or instance. FIXME probably should be replaced with
-   *          {@link StatementTarget}.
-   * @param initializer
-   *          the optional (can be <code>null</code>) initializer of field
-   *
-   * @return {@link VariableDeclarationFragment} of new field with unique name and given
-   *         initializer.
-   */
-  private VariableDeclarationFragment addUniqueField(int position, String initializer)
-      throws Exception {
-    AstEditor editor = m_javaInfo.getEditor();
-    // prepare field source
-    String fieldSource;
-    {
-      // prepare class and field names
-      String className = m_javaInfo.getDescription().getComponentClass().getName();
-      String fieldName = editor.getUniqueVariableName(-1, NamesManager.getName(m_javaInfo), null);
-      // prepare modifiers
-      String modifiers = perfFieldModifier(m_javaInfo);
-      if (m_forceStaticModifier || isStaticContext(position)) {
-        modifiers += "static ";
-      }
-      modifiers += "final ";
-      // compose field source
-      fieldSource = modifiers + className + " " + fieldName;
-      if (initializer != null) {
-        initializer = StringUtils.replace(initializer, "%variable-name%", fieldName);
-        fieldSource += " = " + initializer;
-      }
-    }
-    // add field
-    FieldDeclaration fieldDeclaration = addField(fieldSource + ";");
-    return (VariableDeclarationFragment) fieldDeclaration.fragments().get(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @param position
+	 *          is location in source where this field will be referenced, used to decide if field
+	 *          should be static or instance. FIXME probably should be replaced with
+	 *          {@link StatementTarget}.
+	 * @param initializer
+	 *          the optional (can be <code>null</code>) initializer of field
+	 *
+	 * @return {@link VariableDeclarationFragment} of new field with unique name and given
+	 *         initializer.
+	 */
+	private VariableDeclarationFragment addUniqueField(int position, String initializer)
+			throws Exception {
+		AstEditor editor = m_javaInfo.getEditor();
+		// prepare field source
+		String fieldSource;
+		{
+			// prepare class and field names
+			String className = m_javaInfo.getDescription().getComponentClass().getName();
+			String fieldName = editor.getUniqueVariableName(-1, NamesManager.getName(m_javaInfo), null);
+			// prepare modifiers
+			String modifiers = perfFieldModifier(m_javaInfo);
+			if (m_forceStaticModifier || isStaticContext(position)) {
+				modifiers += "static ";
+			}
+			modifiers += "final ";
+			// compose field source
+			fieldSource = modifiers + className + " " + fieldName;
+			if (initializer != null) {
+				initializer = StringUtils.replace(initializer, "%variable-name%", fieldName);
+				fieldSource += " = " + initializer;
+			}
+		}
+		// add field
+		FieldDeclaration fieldDeclaration = addField(fieldSource + ";");
+		return (VariableDeclarationFragment) fieldDeclaration.fragments().get(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Static modifier
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private boolean m_forceStaticModifier;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Static modifier
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private boolean m_forceStaticModifier;
 
-  /**
-   * Specifies if <code>static</code> modifier should be used, even if position for component is not
-   * a static context.
-   */
-  public void setForceStaticModifier(boolean forceStaticModifier) {
-    m_forceStaticModifier = forceStaticModifier;
-  }
+	/**
+	 * Specifies if <code>static</code> modifier should be used, even if position for component is not
+	 * a static context.
+	 */
+	public void setForceStaticModifier(boolean forceStaticModifier) {
+		m_forceStaticModifier = forceStaticModifier;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Preferences
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final String BASE = "variable.fieldInitializer.";
-  public static final String P_PREFIX_THIS = BASE + "prefixThis";
-  public static final String P_FIELD_MODIFIER = BASE + "fieldModifier";
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Preferences
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final String BASE = "variable.fieldInitializer.";
+	public static final String P_PREFIX_THIS = BASE + "prefixThis";
+	public static final String P_FIELD_MODIFIER = BASE + "fieldModifier";
 
-  @Override
-  protected boolean prefixThis() {
-    return getPreferences().getBoolean(P_PREFIX_THIS);
-  }
+	@Override
+	protected boolean prefixThis() {
+		return getPreferences().getBoolean(P_PREFIX_THIS);
+	}
 
-  public static String perfFieldModifier(JavaInfo javaInfo) {
-    IPreferenceStore preferences = javaInfo.getDescription().getToolkit().getPreferences();
-    return V_MODIFIER_CODE[preferences.getInt(P_FIELD_MODIFIER)];
-  }
+	public static String perfFieldModifier(JavaInfo javaInfo) {
+		IPreferenceStore preferences = javaInfo.getDescription().getToolkit().getPreferences();
+		return V_MODIFIER_CODE[preferences.getInt(P_FIELD_MODIFIER)];
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/FieldReuseVariableSupport.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/FieldReuseVariableSupport.java
index 90264f164..4caca2490 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/FieldReuseVariableSupport.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/FieldReuseVariableSupport.java
@@ -29,144 +29,144 @@
  * @coverage core.model.variable
  */
 public final class FieldReuseVariableSupport extends FieldVariableSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FieldReuseVariableSupport(JavaInfo javaInfo, Expression variable) {
-    super(javaInfo, variable);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FieldReuseVariableSupport(JavaInfo javaInfo, Expression variable) {
+		super(javaInfo, variable);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    return "field-reused: " + getName();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		return "field-reused: " + getName();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Name
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void setName(String newName) throws Exception {
-    splitUniqueField();
-    m_javaInfo.getVariableSupport().setName(newName);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Name
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void setName(String newName) throws Exception {
+		splitUniqueField();
+		m_javaInfo.getVariableSupport().setName(newName);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Expressions
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getReferenceExpression(NodeTarget target) throws Exception {
-    assertJavaInfoCreatedAt(target);
-    if (isVisibleAtTarget(target)) {
-      return getName();
-    } else {
-      splitUniqueField();
-      return m_javaInfo.getVariableSupport().getReferenceExpression(target);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Expressions
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getReferenceExpression(NodeTarget target) throws Exception {
+		assertJavaInfoCreatedAt(target);
+		if (isVisibleAtTarget(target)) {
+			return getName();
+		} else {
+			splitUniqueField();
+			return m_javaInfo.getVariableSupport().getReferenceExpression(target);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Conversion
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean canConvertFieldToLocal() {
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Conversion
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean canConvertFieldToLocal() {
+		return false;
+	}
 
-  @Override
-  public void convertFieldToLocal() throws Exception {
-    throw new IllegalStateException();
-  }
+	@Override
+	public void convertFieldToLocal() throws Exception {
+		throw new IllegalStateException();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Preferences
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected boolean prefixThis() {
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Preferences
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected boolean prefixThis() {
+		return false;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Morphing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void setType(String newTypeName) throws Exception {
-    splitUniqueField();
-    ((FieldUniqueVariableSupport) m_javaInfo.getVariableSupport()).setType(newTypeName);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Morphing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void setType(String newTypeName) throws Exception {
+		splitUniqueField();
+		((FieldUniqueVariableSupport) m_javaInfo.getVariableSupport()).setType(newTypeName);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Split
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Creates unique field for this component.
-   */
-  private void splitUniqueField() throws Exception {
-    // add new field and use its name
-    {
-      AstEditor editor = m_javaInfo.getEditor();
-      VariableDeclaration oldDeclaration = m_declaration;
-      FieldDeclaration oldField = (FieldDeclaration) oldDeclaration.getParent();
-      String oldFieldName = getName();
-      String newFieldName = editor.getUniqueVariableName(-1, oldFieldName, null);
-      // prepare modifiers
-      String modifiers;
-      {
-        modifiers = "private ";
-        if (AstNodeUtils.isStatic(oldField)) {
-          modifiers += "static ";
-        }
-      }
-      // check when field has assignment of our component
-      if (oldDeclaration.getName() == m_variable) {
-        // use temporary name for all references
-        modifyName("__tmpField");
-        // add new field with oldFieldName
-        {
-          String fieldSource =
-              modifiers + editor.getSource(oldField.getType()) + " " + oldFieldName + ";";
-          editor.addFieldDeclaration(fieldSource, new BodyDeclarationTarget(oldField, true));
-        }
-        // change references: this component -> newFieldName, other -> oldFieldName
-        {
-          // prepare list of references for this JavaInfo (not just on same variable)
-          // NB: we need this list because during replacing references it will become temporary invalid
-          List<Expression> componentReferences = getComponentReferences();
-          // replace references
-          for (Expression reference : getReferences()) {
-            if (componentReferences.contains(reference)) {
-              modifyVariableName(reference, newFieldName);
-            } else {
-              modifyVariableName(reference, oldFieldName);
-            }
-          }
-        }
-      } else {
-        String fieldSource =
-            modifiers + editor.getSource(oldField.getType()) + " " + newFieldName + ";";
-        editor.addFieldDeclaration(fieldSource, new BodyDeclarationTarget(oldField, false));
-        replaceComponentReferences(newFieldName);
-      }
-    }
-    // use field variable support
-    m_javaInfo.setVariableSupport(new FieldUniqueVariableSupport(m_javaInfo, m_variable));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Split
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Creates unique field for this component.
+	 */
+	private void splitUniqueField() throws Exception {
+		// add new field and use its name
+		{
+			AstEditor editor = m_javaInfo.getEditor();
+			VariableDeclaration oldDeclaration = m_declaration;
+			FieldDeclaration oldField = (FieldDeclaration) oldDeclaration.getParent();
+			String oldFieldName = getName();
+			String newFieldName = editor.getUniqueVariableName(-1, oldFieldName, null);
+			// prepare modifiers
+			String modifiers;
+			{
+				modifiers = "private ";
+				if (AstNodeUtils.isStatic(oldField)) {
+					modifiers += "static ";
+				}
+			}
+			// check when field has assignment of our component
+			if (oldDeclaration.getName() == m_variable) {
+				// use temporary name for all references
+				modifyName("__tmpField");
+				// add new field with oldFieldName
+				{
+					String fieldSource =
+							modifiers + editor.getSource(oldField.getType()) + " " + oldFieldName + ";";
+					editor.addFieldDeclaration(fieldSource, new BodyDeclarationTarget(oldField, true));
+				}
+				// change references: this component -> newFieldName, other -> oldFieldName
+				{
+					// prepare list of references for this JavaInfo (not just on same variable)
+					// NB: we need this list because during replacing references it will become temporary invalid
+					List<Expression> componentReferences = getComponentReferences();
+					// replace references
+					for (Expression reference : getReferences()) {
+						if (componentReferences.contains(reference)) {
+							modifyVariableName(reference, newFieldName);
+						} else {
+							modifyVariableName(reference, oldFieldName);
+						}
+					}
+				}
+			} else {
+				String fieldSource =
+						modifiers + editor.getSource(oldField.getType()) + " " + newFieldName + ";";
+				editor.addFieldDeclaration(fieldSource, new BodyDeclarationTarget(oldField, false));
+				replaceComponentReferences(newFieldName);
+			}
+		}
+		// use field variable support
+		m_javaInfo.setVariableSupport(new FieldUniqueVariableSupport(m_javaInfo, m_variable));
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/FieldUniqueVariableSupport.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/FieldUniqueVariableSupport.java
index 269fedd60..0d0cfd764 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/FieldUniqueVariableSupport.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/FieldUniqueVariableSupport.java
@@ -51,242 +51,242 @@
  * @coverage core.model.variable
  */
 public final class FieldUniqueVariableSupport extends FieldVariableSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FieldUniqueVariableSupport(JavaInfo javaInfo) {
-    super(javaInfo);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FieldUniqueVariableSupport(JavaInfo javaInfo) {
+		super(javaInfo);
+	}
 
-  public FieldUniqueVariableSupport(JavaInfo javaInfo, Expression variable) {
-    super(javaInfo, variable);
-  }
+	public FieldUniqueVariableSupport(JavaInfo javaInfo, Expression variable) {
+		super(javaInfo, variable);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    return "field-unique: " + getName();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		return "field-unique: " + getName();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Name
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void setName(String newName) throws Exception {
-    modifyName(newName);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Name
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void setName(String newName) throws Exception {
+		modifyName(newName);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Conversion
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean canConvertFieldToLocal() {
-    // prepare set of methods that reference this field
-    Set<MethodDeclaration> methods = Sets.newHashSet();
-    {
-      for (Expression reference : getReferences()) {
-        // ignore field declaration
-        if (reference.getParent() instanceof VariableDeclarationFragment) {
-          continue;
-        }
-        // add method
-        MethodDeclaration method = AstNodeUtils.getEnclosingMethod(reference);
-        if (method != null) {
-          methods.add(method);
-        }
-      }
-    }
-    // we can convert field to local only if it is referenced from single method (where it is assigned)
-    return methods.size() == 1;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Conversion
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean canConvertFieldToLocal() {
+		// prepare set of methods that reference this field
+		Set<MethodDeclaration> methods = Sets.newHashSet();
+		{
+			for (Expression reference : getReferences()) {
+				// ignore field declaration
+				if (reference.getParent() instanceof VariableDeclarationFragment) {
+					continue;
+				}
+				// add method
+				MethodDeclaration method = AstNodeUtils.getEnclosingMethod(reference);
+				if (method != null) {
+					methods.add(method);
+				}
+			}
+		}
+		// we can convert field to local only if it is referenced from single method (where it is assigned)
+		return methods.size() == 1;
+	}
 
-  @Override
-  public void convertFieldToLocal() throws Exception {
-    AstEditor editor = m_javaInfo.getEditor();
-    // prepare current information
-    VariableDeclaration oldFragment = m_declaration;
-    FieldDeclaration oldField = (FieldDeclaration) oldFragment.getParent();
-    String typeString = editor.getSource(oldField.getType());
-    // variable is first place where JavaInfo is assigned
-    Assignment assignment = (Assignment) m_variable.getParent();
-    Assert.isTrue(assignment.getLeftHandSide() == m_variable);
-    Expression oldInitializer = assignment.getRightHandSide();
-    Statement oldStatement = (Statement) assignment.getParent();
-    ITypeBinding typeBinding = AstNodeUtils.getTypeBinding(oldField.getType());
-    // rename variable to make it local-like
-    String localName =
-        m_utils.convertName(
-            assignment.getStartPosition(),
-            getName(),
-            JavaCore.CODEASSIST_FIELD_PREFIXES,
-            JavaCore.CODEASSIST_FIELD_SUFFIXES,
-            JavaCore.CODEASSIST_LOCAL_PREFIXES,
-            JavaCore.CODEASSIST_LOCAL_SUFFIXES,
-            m_declaration);
-    setName(localName);
-    // replace "this.fieldName" with "localName"
-    {
-      for (Expression reference : getReferences()) {
-        if (reference instanceof FieldAccess) {
-          SimpleName simpleReference =
-              parseVariableSimpleName(reference.getStartPosition(), localName, typeBinding);
-          editor.replaceSubstring(reference, localName);
-          AstEditor.replaceNode(reference, simpleReference);
-          if (reference == m_variable) {
-            m_variable = simpleReference;
-          }
-        }
-      }
-    }
-    // add type source (before changes in AST because we insert new nodes)
-    Type newType;
-    {
-      int oldStart = m_variable.getStartPosition();
-      editor.replaceSubstring(oldStart, 0, typeString + " ");
-      newType = editor.getParser().parseType(oldStart, oldField.getType());
-    }
-    // replace assignment with variable declaration
-    SimpleName localVariable;
-    {
-      AST ast = m_variable.getAST();
-      // prepare new fragment, reuse variable and initializer
-      VariableDeclarationFragment newFragment = ast.newVariableDeclarationFragment();
-      {
-        assignment.setLeftHandSide(ast.newSimpleName("__foo"));
-        editor.replaceSubstring(m_variable, localName);
-        localVariable =
-            parseVariableSimpleName(m_variable.getStartPosition(), localName, typeBinding);
-        m_variable = localVariable;
-        newFragment.setName(localVariable);
-      }
-      {
-        assignment.setRightHandSide(ast.newSimpleName("__bar"));
-        newFragment.setInitializer(oldInitializer);
-      }
-      AstNodeUtils.setSourceRange(newFragment, m_variable, oldInitializer);
-      // prepare new statement
-      VariableDeclarationStatement newStatement = ast.newVariableDeclarationStatement(newFragment);
-      newStatement.setType(newType);
-      AstNodeUtils.setSourceRange(newStatement, newType, oldStatement);
-      // replace old statement in AST
-      {
-        List<Statement> statements = DomGenerics.statements((Block) oldStatement.getParent());
-        int index = statements.indexOf(oldStatement);
-        statements.set(index, newStatement);
-      }
-    }
-    // remove old field
-    editor.removeVariableDeclaration(oldFragment);
-    // use local variable support
-    m_javaInfo.setVariableSupport(new LocalUniqueVariableSupport(m_javaInfo, localVariable));
-  }
+	@Override
+	public void convertFieldToLocal() throws Exception {
+		AstEditor editor = m_javaInfo.getEditor();
+		// prepare current information
+		VariableDeclaration oldFragment = m_declaration;
+		FieldDeclaration oldField = (FieldDeclaration) oldFragment.getParent();
+		String typeString = editor.getSource(oldField.getType());
+		// variable is first place where JavaInfo is assigned
+		Assignment assignment = (Assignment) m_variable.getParent();
+		Assert.isTrue(assignment.getLeftHandSide() == m_variable);
+		Expression oldInitializer = assignment.getRightHandSide();
+		Statement oldStatement = (Statement) assignment.getParent();
+		ITypeBinding typeBinding = AstNodeUtils.getTypeBinding(oldField.getType());
+		// rename variable to make it local-like
+		String localName =
+				m_utils.convertName(
+						assignment.getStartPosition(),
+						getName(),
+						JavaCore.CODEASSIST_FIELD_PREFIXES,
+						JavaCore.CODEASSIST_FIELD_SUFFIXES,
+						JavaCore.CODEASSIST_LOCAL_PREFIXES,
+						JavaCore.CODEASSIST_LOCAL_SUFFIXES,
+						m_declaration);
+		setName(localName);
+		// replace "this.fieldName" with "localName"
+		{
+			for (Expression reference : getReferences()) {
+				if (reference instanceof FieldAccess) {
+					SimpleName simpleReference =
+							parseVariableSimpleName(reference.getStartPosition(), localName, typeBinding);
+					editor.replaceSubstring(reference, localName);
+					AstEditor.replaceNode(reference, simpleReference);
+					if (reference == m_variable) {
+						m_variable = simpleReference;
+					}
+				}
+			}
+		}
+		// add type source (before changes in AST because we insert new nodes)
+		Type newType;
+		{
+			int oldStart = m_variable.getStartPosition();
+			editor.replaceSubstring(oldStart, 0, typeString + " ");
+			newType = editor.getParser().parseType(oldStart, oldField.getType());
+		}
+		// replace assignment with variable declaration
+		SimpleName localVariable;
+		{
+			AST ast = m_variable.getAST();
+			// prepare new fragment, reuse variable and initializer
+			VariableDeclarationFragment newFragment = ast.newVariableDeclarationFragment();
+			{
+				assignment.setLeftHandSide(ast.newSimpleName("__foo"));
+				editor.replaceSubstring(m_variable, localName);
+				localVariable =
+						parseVariableSimpleName(m_variable.getStartPosition(), localName, typeBinding);
+				m_variable = localVariable;
+				newFragment.setName(localVariable);
+			}
+			{
+				assignment.setRightHandSide(ast.newSimpleName("__bar"));
+				newFragment.setInitializer(oldInitializer);
+			}
+			AstNodeUtils.setSourceRange(newFragment, m_variable, oldInitializer);
+			// prepare new statement
+			VariableDeclarationStatement newStatement = ast.newVariableDeclarationStatement(newFragment);
+			newStatement.setType(newType);
+			AstNodeUtils.setSourceRange(newStatement, newType, oldStatement);
+			// replace old statement in AST
+			{
+				List<Statement> statements = DomGenerics.statements((Block) oldStatement.getParent());
+				int index = statements.indexOf(oldStatement);
+				statements.set(index, newStatement);
+			}
+		}
+		// remove old field
+		editor.removeVariableDeclaration(oldFragment);
+		// use local variable support
+		m_javaInfo.setVariableSupport(new LocalUniqueVariableSupport(m_javaInfo, localVariable));
+	}
 
-  /**
-   * @return the {@link SimpleName} variable with given name and type.
-   */
-  private SimpleName parseVariableSimpleName(int position,
-      String localName,
-      ITypeBinding typeBinding) {
-    AstEditor editor = m_javaInfo.getEditor();
-    return editor.getParser().parseVariable(
-        position,
-        localName,
-        null,
-        typeBinding,
-        false,
-        Modifier.NONE);
-  }
+	/**
+	 * @return the {@link SimpleName} variable with given name and type.
+	 */
+	private SimpleName parseVariableSimpleName(int position,
+			String localName,
+			ITypeBinding typeBinding) {
+		AstEditor editor = m_javaInfo.getEditor();
+		return editor.getParser().parseVariable(
+				position,
+				localName,
+				null,
+				typeBinding,
+				false,
+				Modifier.NONE);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Adding
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String add_getVariableStatementSource(StatementTarget associationTarget) throws Exception {
-    boolean isStatic = isStaticContext(associationTarget.getPosition());
-    // add field
-    String fieldName;
-    {
-      String name = NamesManager.getName(m_javaInfo);
-      fieldName = m_utils.getUniqueFieldName(name, null);
-      String modifiers = perfFieldModifier(m_javaInfo);
-      if (isStatic) {
-        modifiers += "static ";
-      }
-      // add field
-      String className = m_javaInfo.getDescription().getComponentClass().getName();
-      addField(modifiers + className + " " + fieldName + ";");
-    }
-    // prepare code for field reference
-    String fieldReference = fieldName;
-    if (!isStatic && prefixThis()) {
-      fieldReference = "this." + fieldName;
-    }
-    // prepare assignment statement
-    NodeTarget creationTarget = new NodeTarget(associationTarget);
-    String initializer = m_javaInfo.getCreationSupport().add_getSource(creationTarget);
-    initializer = StringUtils.replace(initializer, "%variable-name%", fieldName);
-    return fieldReference + " = " + initializer + ";";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Adding
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String add_getVariableStatementSource(StatementTarget associationTarget) throws Exception {
+		boolean isStatic = isStaticContext(associationTarget.getPosition());
+		// add field
+		String fieldName;
+		{
+			String name = NamesManager.getName(m_javaInfo);
+			fieldName = m_utils.getUniqueFieldName(name, null);
+			String modifiers = perfFieldModifier(m_javaInfo);
+			if (isStatic) {
+				modifiers += "static ";
+			}
+			// add field
+			String className = m_javaInfo.getDescription().getComponentClass().getName();
+			addField(modifiers + className + " " + fieldName + ";");
+		}
+		// prepare code for field reference
+		String fieldReference = fieldName;
+		if (!isStatic && prefixThis()) {
+			fieldReference = "this." + fieldName;
+		}
+		// prepare assignment statement
+		NodeTarget creationTarget = new NodeTarget(associationTarget);
+		String initializer = m_javaInfo.getCreationSupport().add_getSource(creationTarget);
+		initializer = StringUtils.replace(initializer, "%variable-name%", fieldName);
+		return fieldReference + " = " + initializer + ";";
+	}
 
-  @Override
-  public void add_setVariableStatement(Statement statement) throws Exception {
-    ExpressionStatement expressionStatement = (ExpressionStatement) statement;
-    Assignment assignment = (Assignment) expressionStatement.getExpression();
-    add_setVariableAndInitializer(assignment.getLeftHandSide(), assignment.getRightHandSide());
-  }
+	@Override
+	public void add_setVariableStatement(Statement statement) throws Exception {
+		ExpressionStatement expressionStatement = (ExpressionStatement) statement;
+		Assignment assignment = (Assignment) expressionStatement.getExpression();
+		add_setVariableAndInitializer(assignment.getLeftHandSide(), assignment.getRightHandSide());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Delete
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void deleteAfter() throws Exception {
-    if (m_javaInfo.isRoot()) {
-      return;
-    }
-    delete_removeDeclarationField();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Delete
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void deleteAfter() throws Exception {
+		if (m_javaInfo.isRoot()) {
+			return;
+		}
+		delete_removeDeclarationField();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Morphing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void setType(String newTypeName) throws Exception {
-    AstEditor editor = m_javaInfo.getEditor();
-    editor.replaceVariableType(m_declaration, newTypeName);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Morphing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void setType(String newTypeName) throws Exception {
+		AstEditor editor = m_javaInfo.getEditor();
+		editor.replaceVariableType(m_declaration, newTypeName);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Preferences
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final String BASE = "variable.fieldUnique.";
-  public static final String P_PREFIX_THIS = BASE + "prefixThis";
-  public static final String P_FIELD_MODIFIER = BASE + "fieldModifier";
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Preferences
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final String BASE = "variable.fieldUnique.";
+	public static final String P_PREFIX_THIS = BASE + "prefixThis";
+	public static final String P_FIELD_MODIFIER = BASE + "fieldModifier";
 
-  @Override
-  protected boolean prefixThis() {
-    return getPreferences().getBoolean(P_PREFIX_THIS);
-  }
+	@Override
+	protected boolean prefixThis() {
+		return getPreferences().getBoolean(P_PREFIX_THIS);
+	}
 
-  public static String perfFieldModifier(JavaInfo javaInfo) {
-    IPreferenceStore preferences = javaInfo.getDescription().getToolkit().getPreferences();
-    return V_MODIFIER_CODE[preferences.getInt(P_FIELD_MODIFIER)];
-  }
+	public static String perfFieldModifier(JavaInfo javaInfo) {
+		IPreferenceStore preferences = javaInfo.getDescription().getToolkit().getPreferences();
+		return V_MODIFIER_CODE[preferences.getInt(P_FIELD_MODIFIER)];
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/FieldVariableSupport.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/FieldVariableSupport.java
index d5cc88076..eadebd78f 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/FieldVariableSupport.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/FieldVariableSupport.java
@@ -27,114 +27,114 @@
  * @coverage core.model.variable
  */
 public abstract class FieldVariableSupport extends AbstractSimpleVariableSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FieldVariableSupport(JavaInfo javaInfo) {
-    super(javaInfo);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FieldVariableSupport(JavaInfo javaInfo) {
+		super(javaInfo);
+	}
 
-  public FieldVariableSupport(JavaInfo javaInfo, Expression variable) {
-    super(javaInfo, variable);
-  }
+	public FieldVariableSupport(JavaInfo javaInfo, Expression variable) {
+		super(javaInfo, variable);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean isValidStatementForChild(Statement statement) {
-    // When statement is Block, this means that we try to leave it (down).
-    // To have good code structure, we should not leave blocks where field is assigned.
-    if (statement instanceof Block) {
-      return AstNodeUtils.getEnclosingBlock(m_variable) != statement;
-    }
-    // field is always visible, so any related statement is valid
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean isValidStatementForChild(Statement statement) {
+		// When statement is Block, this means that we try to leave it (down).
+		// To have good code structure, we should not leave blocks where field is assigned.
+		if (statement instanceof Block) {
+			return AstNodeUtils.getEnclosingBlock(m_variable) != statement;
+		}
+		// field is always visible, so any related statement is valid
+		return true;
+	}
 
-  @Override
-  public String getComponentName() {
-    return m_utils.stripPrefixSuffix(
-        getName(),
-        JavaCore.CODEASSIST_FIELD_PREFIXES,
-        JavaCore.CODEASSIST_FIELD_SUFFIXES);
-  }
+	@Override
+	public String getComponentName() {
+		return m_utils.stripPrefixSuffix(
+				getName(),
+				JavaCore.CODEASSIST_FIELD_PREFIXES,
+				JavaCore.CODEASSIST_FIELD_SUFFIXES);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Expressions
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getReferenceExpression(NodeTarget target) throws Exception {
-    assertJavaInfoCreatedAt(target);
-    boolean isStatic;
-    {
-      FieldDeclaration fieldDeclaration =
-          AstNodeUtils.getEnclosingNode(m_declaration, FieldDeclaration.class);
-      isStatic = AstNodeUtils.isStatic(fieldDeclaration);
-    }
-    String fieldName = getName();
-    return !isStatic && prefixThis() ? "this." + fieldName : fieldName;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Expressions
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getReferenceExpression(NodeTarget target) throws Exception {
+		assertJavaInfoCreatedAt(target);
+		boolean isStatic;
+		{
+			FieldDeclaration fieldDeclaration =
+					AstNodeUtils.getEnclosingNode(m_declaration, FieldDeclaration.class);
+			isStatic = AstNodeUtils.isStatic(fieldDeclaration);
+		}
+		String fieldName = getName();
+		return !isStatic && prefixThis() ? "this." + fieldName : fieldName;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Conversion
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final boolean canConvertLocalToField() {
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Conversion
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final boolean canConvertLocalToField() {
+		return false;
+	}
 
-  @Override
-  public final void convertLocalToField() throws Exception {
-    throw new IllegalStateException();
-  }
+	@Override
+	public final void convertLocalToField() throws Exception {
+		throw new IllegalStateException();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Delete
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Deletes {@link FieldDeclaration} of this {@link FieldVariableSupport}.
-   */
-  protected final void delete_removeDeclarationField() throws Exception {
-    m_javaInfo.getEditor().removeVariableDeclaration(m_declaration);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Delete
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Deletes {@link FieldDeclaration} of this {@link FieldVariableSupport}.
+	 */
+	protected final void delete_removeDeclarationField() throws Exception {
+		m_javaInfo.getEditor().removeVariableDeclaration(m_declaration);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Rename on "text" property modification
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  String decorateTextName(String newName) {
-    return m_utils.addPrefixSuffix(
-        newName,
-        JavaCore.CODEASSIST_FIELD_PREFIXES,
-        JavaCore.CODEASSIST_FIELD_SUFFIXES);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Rename on "text" property modification
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	String decorateTextName(String newName) {
+		return m_utils.addPrefixSuffix(
+				newName,
+				JavaCore.CODEASSIST_FIELD_PREFIXES,
+				JavaCore.CODEASSIST_FIELD_SUFFIXES);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Preferences
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final String[] V_MODIFIER_CODE = {"private ", "", "protected ", "public "};
-  public static final int V_FIELD_MODIFIER_PRIVATE = 0;
-  public static final int V_FIELD_MODIFIER_PACKAGE = 1;
-  public static final int V_FIELD_MODIFIER_PROTECTED = 2;
-  public static final int V_FIELD_MODIFIER_PUBLIC = 3;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Preferences
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final String[] V_MODIFIER_CODE = {"private ", "", "protected ", "public "};
+	public static final int V_FIELD_MODIFIER_PRIVATE = 0;
+	public static final int V_FIELD_MODIFIER_PACKAGE = 1;
+	public static final int V_FIELD_MODIFIER_PROTECTED = 2;
+	public static final int V_FIELD_MODIFIER_PUBLIC = 3;
 
-  /**
-   * @return <code>true</code> if field access should be prefixed by "this.".
-   */
-  protected abstract boolean prefixThis();
+	/**
+	 * @return <code>true</code> if field access should be prefixed by "this.".
+	 */
+	protected abstract boolean prefixThis();
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/LazyVariableSupport.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/LazyVariableSupport.java
index 3ea8e9905..e8dda262d 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/LazyVariableSupport.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/LazyVariableSupport.java
@@ -45,325 +45,325 @@
  * @coverage core.model.variable
  */
 public final class LazyVariableSupport extends AbstractSimpleVariableSupport {
-  public MethodDeclaration m_accessor;
+	public MethodDeclaration m_accessor;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public LazyVariableSupport(JavaInfo javaInfo) {
-    super(javaInfo);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public LazyVariableSupport(JavaInfo javaInfo) {
+		super(javaInfo);
+	}
 
-  public LazyVariableSupport(JavaInfo javaInfo, LazyVariableInformation lazyVariableInformation) {
-    super(javaInfo, lazyVariableInformation.m_variable);
-    m_accessor = lazyVariableInformation.m_accessor;
-  }
+	public LazyVariableSupport(JavaInfo javaInfo, LazyVariableInformation lazyVariableInformation) {
+		super(javaInfo, lazyVariableInformation.m_variable);
+		m_accessor = lazyVariableInformation.m_accessor;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    return "lazy: " + m_variable + " " + getAccessorSignature();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		return "lazy: " + m_variable + " " + getAccessorSignature();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean isJavaInfo(ASTNode node) {
-    if (node instanceof MethodInvocation) {
-      MethodInvocation invocation = (MethodInvocation) node;
-      String signature = AstNodeUtils.getMethodSignature(invocation);
-      if (getAccessorSignature().equals(signature)) {
-        return true;
-      }
-    }
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean isJavaInfo(ASTNode node) {
+		if (node instanceof MethodInvocation) {
+			MethodInvocation invocation = (MethodInvocation) node;
+			String signature = AstNodeUtils.getMethodSignature(invocation);
+			if (getAccessorSignature().equals(signature)) {
+				return true;
+			}
+		}
+		return false;
+	}
 
-  @Override
-  public boolean isValidStatementForChild(Statement statement) {
-    // children should be added directly in accessor
-    return AstNodeUtils.getEnclosingMethod(statement) == m_accessor;
-  }
+	@Override
+	public boolean isValidStatementForChild(Statement statement) {
+		// children should be added directly in accessor
+		return AstNodeUtils.getEnclosingMethod(statement) == m_accessor;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Name
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void setName(String newName) throws Exception {
-    // check may be we should rename method
-    {
-      String actualMethodName = m_accessor.getName().getIdentifier();
-      String expectedMethodName =
-          LazyVariableSupportUtils.getExpectedMethodName(m_javaInfo, getName());
-      if (expectedMethodName.equals(actualMethodName)) {
-        String newMethodName = LazyVariableSupportUtils.getExpectedMethodName(m_javaInfo, newName);
-        List<MethodInvocation> invocations = AstNodeUtils.getMethodInvocations(m_accessor);
-        AstEditor editor = m_javaInfo.getEditor();
-        // change name in declaration
-        editor.replaceMethodName(m_accessor, newMethodName);
-        // change name in invocations
-        for (MethodInvocation invocation : invocations) {
-          editor.replaceInvocationName(invocation, newMethodName);
-        }
-      }
-    }
-    // rename field
-    modifyName(newName);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Name
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void setName(String newName) throws Exception {
+		// check may be we should rename method
+		{
+			String actualMethodName = m_accessor.getName().getIdentifier();
+			String expectedMethodName =
+					LazyVariableSupportUtils.getExpectedMethodName(m_javaInfo, getName());
+			if (expectedMethodName.equals(actualMethodName)) {
+				String newMethodName = LazyVariableSupportUtils.getExpectedMethodName(m_javaInfo, newName);
+				List<MethodInvocation> invocations = AstNodeUtils.getMethodInvocations(m_accessor);
+				AstEditor editor = m_javaInfo.getEditor();
+				// change name in declaration
+				editor.replaceMethodName(m_accessor, newMethodName);
+				// change name in invocations
+				for (MethodInvocation invocation : invocations) {
+					editor.replaceInvocationName(invocation, newMethodName);
+				}
+			}
+		}
+		// rename field
+		modifyName(newName);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Expressions
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean hasExpression(NodeTarget target) {
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Expressions
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean hasExpression(NodeTarget target) {
+		return true;
+	}
 
-  @Override
-  public String getReferenceExpression(NodeTarget target) throws Exception {
-    if (isTargetInAccessor(target)) {
-      return getName();
-    } else {
-      return getAccessorReferenceExpression();
-    }
-  }
+	@Override
+	public String getReferenceExpression(NodeTarget target) throws Exception {
+		if (isTargetInAccessor(target)) {
+			return getName();
+		} else {
+			return getAccessorReferenceExpression();
+		}
+	}
 
-  /**
-   * @return the "external" reference on component, using accessor.
-   */
-  public String getAccessorReferenceExpression() {
-    return m_accessor.getName().getIdentifier() + "()";
-  }
+	/**
+	 * @return the "external" reference on component, using accessor.
+	 */
+	public String getAccessorReferenceExpression() {
+		return m_accessor.getName().getIdentifier() + "()";
+	}
 
-  /**
-   * @return <code>true</code> if given {@link NodeTarget} specifies node in {@link #m_accessor}.
-   */
-  private boolean isTargetInAccessor(NodeTarget target) {
-    StatementTarget statementTarget = target.getStatementTarget();
-    if (statementTarget != null) {
-      return AstNodeUtils.contains(m_accessor, statementTarget.getNode());
-    }
-    return false;
-  }
+	/**
+	 * @return <code>true</code> if given {@link NodeTarget} specifies node in {@link #m_accessor}.
+	 */
+	private boolean isTargetInAccessor(NodeTarget target) {
+		StatementTarget statementTarget = target.getStatementTarget();
+		if (statementTarget != null) {
+			return AstNodeUtils.contains(m_accessor, statementTarget.getNode());
+		}
+		return false;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Conversion
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean canConvertLocalToField() {
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Conversion
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean canConvertLocalToField() {
+		return false;
+	}
 
-  @Override
-  public void convertLocalToField() throws Exception {
-    throw new IllegalStateException();
-  }
+	@Override
+	public void convertLocalToField() throws Exception {
+		throw new IllegalStateException();
+	}
 
-  @Override
-  public boolean canConvertFieldToLocal() {
-    return false;
-  }
+	@Override
+	public boolean canConvertFieldToLocal() {
+		return false;
+	}
 
-  @Override
-  public void convertFieldToLocal() throws Exception {
-    throw new IllegalStateException();
-  }
+	@Override
+	public void convertFieldToLocal() throws Exception {
+		throw new IllegalStateException();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Target
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void ensureInstanceReadyAt(StatementTarget target) throws Exception {
-    // lazy component is ready at any place
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Target
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void ensureInstanceReadyAt(StatementTarget target) throws Exception {
+		// lazy component is ready at any place
+	}
 
-  @Override
-  public StatementTarget getAssociationTarget(StatementTarget target) throws Exception {
-    return target;
-  }
+	@Override
+	public StatementTarget getAssociationTarget(StatementTarget target) throws Exception {
+		return target;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Adding
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String add_getVariableStatementSource(StatementTarget associationTarget) throws Exception {
-    AstEditor editor = m_javaInfo.getEditor();
-    boolean isStatic = isStaticContext(associationTarget.getPosition());
-    // prepare component class
-    String className =
-        ReflectionUtils.getCanonicalName(m_javaInfo.getDescription().getComponentClass());
-    // add field
-    String fieldName;
-    FieldDeclaration field;
-    {
-      // prepare modifiers
-      String modifiers = "private ";
-      if (isStatic) {
-        modifiers += "static ";
-      }
-      // do add
-      fieldName = editor.getUniqueVariableName(-1, NamesManager.getName(m_javaInfo), null);
-      field = addField(modifiers + className + " " + fieldName + ";");
-    }
-    // add method
-    {
-      String methodName = LazyVariableSupportUtils.getExpectedMethodName(m_javaInfo, fieldName);
-      methodName = editor.getUniqueMethodName(methodName);
-      // prepare target
-      BodyDeclarationTarget bodyTarget;
-      {
-        TypeDeclaration typeDeclaration = AstNodeUtils.getEnclosingType(field);
-        bodyTarget = new BodyDeclarationTarget(typeDeclaration, false);
-      }
-      // add accessor method
-      {
-        NodeTarget creationTarget = new NodeTarget(bodyTarget);
-        String initializer = m_javaInfo.getCreationSupport().add_getSource(creationTarget);
-        initializer = AssociationUtils.replaceTemplates(m_javaInfo, initializer, creationTarget);
-        // prepare modifiers
-        String modifiers = prefMethodModifier(m_javaInfo);
-        if (isStatic) {
-          modifiers += "static ";
-        }
-        //
-        String header = modifiers + className + " " + methodName + "()";
-        List<String> bodyLines = Lists.newArrayList();
-        bodyLines.add("if (" + fieldName + " == null) {");
-        bodyLines.add("\t" + fieldName + " = " + initializer + ";");
-        bodyLines.add("}");
-        bodyLines.add("return " + fieldName + ";");
-        m_accessor = editor.addMethodDeclaration(header, bodyLines, bodyTarget);
-      }
-      // include accessor into execution flow, to allow visiting its nodes
-      JavaInfoUtils.getState(m_javaInfo).getFlowDescription().addStartMethod(m_accessor);
-      // initialize variable and creation
-      {
-        IfStatement ifStatement = (IfStatement) m_accessor.getBody().statements().get(0);
-        Block thenBlock = (Block) ifStatement.getThenStatement();
-        ExpressionStatement expressionStatement =
-            (ExpressionStatement) thenBlock.statements().get(0);
-        Assignment assignment = (Assignment) expressionStatement.getExpression();
-        add_setVariableAndInitializer(assignment.getLeftHandSide(), assignment.getRightHandSide());
-      }
-    }
-    // no variable statement
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Adding
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String add_getVariableStatementSource(StatementTarget associationTarget) throws Exception {
+		AstEditor editor = m_javaInfo.getEditor();
+		boolean isStatic = isStaticContext(associationTarget.getPosition());
+		// prepare component class
+		String className =
+				ReflectionUtils.getCanonicalName(m_javaInfo.getDescription().getComponentClass());
+		// add field
+		String fieldName;
+		FieldDeclaration field;
+		{
+			// prepare modifiers
+			String modifiers = "private ";
+			if (isStatic) {
+				modifiers += "static ";
+			}
+			// do add
+			fieldName = editor.getUniqueVariableName(-1, NamesManager.getName(m_javaInfo), null);
+			field = addField(modifiers + className + " " + fieldName + ";");
+		}
+		// add method
+		{
+			String methodName = LazyVariableSupportUtils.getExpectedMethodName(m_javaInfo, fieldName);
+			methodName = editor.getUniqueMethodName(methodName);
+			// prepare target
+			BodyDeclarationTarget bodyTarget;
+			{
+				TypeDeclaration typeDeclaration = AstNodeUtils.getEnclosingType(field);
+				bodyTarget = new BodyDeclarationTarget(typeDeclaration, false);
+			}
+			// add accessor method
+			{
+				NodeTarget creationTarget = new NodeTarget(bodyTarget);
+				String initializer = m_javaInfo.getCreationSupport().add_getSource(creationTarget);
+				initializer = AssociationUtils.replaceTemplates(m_javaInfo, initializer, creationTarget);
+				// prepare modifiers
+				String modifiers = prefMethodModifier(m_javaInfo);
+				if (isStatic) {
+					modifiers += "static ";
+				}
+				//
+				String header = modifiers + className + " " + methodName + "()";
+				List<String> bodyLines = Lists.newArrayList();
+				bodyLines.add("if (" + fieldName + " == null) {");
+				bodyLines.add("\t" + fieldName + " = " + initializer + ";");
+				bodyLines.add("}");
+				bodyLines.add("return " + fieldName + ";");
+				m_accessor = editor.addMethodDeclaration(header, bodyLines, bodyTarget);
+			}
+			// include accessor into execution flow, to allow visiting its nodes
+			JavaInfoUtils.getState(m_javaInfo).getFlowDescription().addStartMethod(m_accessor);
+			// initialize variable and creation
+			{
+				IfStatement ifStatement = (IfStatement) m_accessor.getBody().statements().get(0);
+				Block thenBlock = (Block) ifStatement.getThenStatement();
+				ExpressionStatement expressionStatement =
+						(ExpressionStatement) thenBlock.statements().get(0);
+				Assignment assignment = (Assignment) expressionStatement.getExpression();
+				add_setVariableAndInitializer(assignment.getLeftHandSide(), assignment.getRightHandSide());
+			}
+		}
+		// no variable statement
+		return null;
+	}
 
-  @Override
-  protected void add_setVariableParameterizedType(Expression initializer) throws Exception {
-    ITypeBinding typeBinding = AstNodeUtils.getTypeBinding(initializer);
-    if (typeBinding.isParameterizedType()) {
-      AstEditor editor = m_javaInfo.getEditor();
-      String genericTypeName = editor.getTypeBindingSource(typeBinding);
-      editor.replaceVariableType(m_declaration, genericTypeName);
-      editor.replaceMethodType(m_accessor, genericTypeName);
-    }
-  }
+	@Override
+	protected void add_setVariableParameterizedType(Expression initializer) throws Exception {
+		ITypeBinding typeBinding = AstNodeUtils.getTypeBinding(initializer);
+		if (typeBinding.isParameterizedType()) {
+			AstEditor editor = m_javaInfo.getEditor();
+			String genericTypeName = editor.getTypeBindingSource(typeBinding);
+			editor.replaceVariableType(m_declaration, genericTypeName);
+			editor.replaceMethodType(m_accessor, genericTypeName);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Delete
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void deleteAfter() throws Exception {
-    AstEditor editor = m_javaInfo.getEditor();
-    // remove field
-    editor.removeVariableDeclaration(m_declaration);
-    // remove accessor method
-    editor.removeBodyDeclaration(m_accessor);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Delete
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void deleteAfter() throws Exception {
+		AstEditor editor = m_javaInfo.getEditor();
+		// remove field
+		editor.removeVariableDeclaration(m_declaration);
+		// remove accessor method
+		editor.removeBodyDeclaration(m_accessor);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Morphing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void setType(String newTypeName) throws Exception {
-    AstEditor editor = m_javaInfo.getEditor();
-    editor.replaceVariableType(m_declaration, newTypeName);
-    editor.replaceMethodType(m_accessor, newTypeName);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Morphing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void setType(String newTypeName) throws Exception {
+		AstEditor editor = m_javaInfo.getEditor();
+		editor.replaceVariableType(m_declaration, newTypeName);
+		editor.replaceMethodType(m_accessor, newTypeName);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the signature for accessor method.
-   */
-  private String getAccessorSignature() {
-    return AstNodeUtils.getMethodSignature(m_accessor);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the signature for accessor method.
+	 */
+	private String getAccessorSignature() {
+		return AstNodeUtils.getMethodSignature(m_accessor);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // LazyVariableInformation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Holder for information about lazy creation variable.
-   *
-   * @author scheglov_ke
-   */
-  public static final class LazyVariableInformation {
-    private final MethodDeclaration m_accessor;
-    private final Expression m_variable;
-    private final Expression m_creation;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// LazyVariableInformation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Holder for information about lazy creation variable.
+	 *
+	 * @author scheglov_ke
+	 */
+	public static final class LazyVariableInformation {
+		private final MethodDeclaration m_accessor;
+		private final Expression m_variable;
+		private final Expression m_creation;
 
-    public LazyVariableInformation(MethodDeclaration accessor,
-        Expression variable,
-        Expression creation) {
-      m_accessor = accessor;
-      m_variable = variable;
-      m_creation = creation;
-    }
+		public LazyVariableInformation(MethodDeclaration accessor,
+				Expression variable,
+				Expression creation) {
+			m_accessor = accessor;
+			m_variable = variable;
+			m_creation = creation;
+		}
 
-    public Expression getCreation() {
-      return m_creation;
-    }
-  }
+		public Expression getCreation() {
+			return m_creation;
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Preferences
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final String BASE = "variable.lazy.";
-  public static final String[] V_MODIFIER_CODE = {"private ", "", "protected ", "public "};
-  public static final String P_METHOD_MODIFIER = BASE + "methodModifier";
-  public static final int V_METHOD_MODIFIER_PRIVATE = 0;
-  public static final int V_METHOD_MODIFIER_PACKAGE = 1;
-  public static final int V_METHOD_MODIFIER_PROTECTED = 2;
-  public static final int V_METHOD_MODIFIER_PUBLIC = 3;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Preferences
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final String BASE = "variable.lazy.";
+	public static final String[] V_MODIFIER_CODE = {"private ", "", "protected ", "public "};
+	public static final String P_METHOD_MODIFIER = BASE + "methodModifier";
+	public static final int V_METHOD_MODIFIER_PRIVATE = 0;
+	public static final int V_METHOD_MODIFIER_PACKAGE = 1;
+	public static final int V_METHOD_MODIFIER_PROTECTED = 2;
+	public static final int V_METHOD_MODIFIER_PUBLIC = 3;
 
-  /**
-   * @return method modifier for source code.
-   */
-  public static String prefMethodModifier(JavaInfo javaInfo) {
-    IPreferenceStore preferences = javaInfo.getDescription().getToolkit().getPreferences();
-    return V_MODIFIER_CODE[preferences.getInt(P_METHOD_MODIFIER)];
-  }
+	/**
+	 * @return method modifier for source code.
+	 */
+	public static String prefMethodModifier(JavaInfo javaInfo) {
+		IPreferenceStore preferences = javaInfo.getDescription().getToolkit().getPreferences();
+		return V_MODIFIER_CODE[preferences.getInt(P_METHOD_MODIFIER)];
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/LazyVariableSupportUtils.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/LazyVariableSupportUtils.java
index f590e759e..4ece900a0 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/LazyVariableSupportUtils.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/LazyVariableSupportUtils.java
@@ -54,407 +54,407 @@
  * @coverage core.model.variable
  */
 public final class LazyVariableSupportUtils {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Check
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static boolean canConvert(JavaInfo javaInfo) {
-    boolean canConvert = true;
-    // check variable support
-    VariableSupport variableSupport = javaInfo.getVariableSupport();
-    canConvert &=
-        variableSupport.canConvertLocalToField()
-            || variableSupport instanceof LazyVariableSupport
-            || variableSupport instanceof FieldVariableSupport;
-    //
-    return canConvert;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Check
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static boolean canConvert(JavaInfo javaInfo) {
+		boolean canConvert = true;
+		// check variable support
+		VariableSupport variableSupport = javaInfo.getVariableSupport();
+		canConvert &=
+				variableSupport.canConvertLocalToField()
+				|| variableSupport instanceof LazyVariableSupport
+				|| variableSupport instanceof FieldVariableSupport;
+		//
+		return canConvert;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Conversion
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static void convert(JavaInfo javaInfo) throws Exception {
-    VariableSupport variableSupport = javaInfo.getVariableSupport();
-    if (variableSupport instanceof LazyVariableSupport) {
-      return;
-    }
-    // convert to field if can
-    if (variableSupport.canConvertLocalToField()) {
-      variableSupport.convertLocalToField();
-      variableSupport = javaInfo.getVariableSupport();
-    }
-    // converting
-    LazyVariableInformation variableInformation;
-    if (variableSupport instanceof FieldVariableSupport) {
-      variableInformation = convertAsField(javaInfo);
-    } else {
-      throw new IllegalStateException();
-    }
-    // change variable support
-    LazyVariableSupport lazyVariableSupport =
-        new LazyVariableSupport(javaInfo, variableInformation);
-    javaInfo.setVariableSupport(lazyVariableSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Conversion
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static void convert(JavaInfo javaInfo) throws Exception {
+		VariableSupport variableSupport = javaInfo.getVariableSupport();
+		if (variableSupport instanceof LazyVariableSupport) {
+			return;
+		}
+		// convert to field if can
+		if (variableSupport.canConvertLocalToField()) {
+			variableSupport.convertLocalToField();
+			variableSupport = javaInfo.getVariableSupport();
+		}
+		// converting
+		LazyVariableInformation variableInformation;
+		if (variableSupport instanceof FieldVariableSupport) {
+			variableInformation = convertAsField(javaInfo);
+		} else {
+			throw new IllegalStateException();
+		}
+		// change variable support
+		LazyVariableSupport lazyVariableSupport =
+				new LazyVariableSupport(javaInfo, variableInformation);
+		javaInfo.setVariableSupport(lazyVariableSupport);
+	}
 
-  /**
-   * Conversion for {@link FieldVariableSupport}.
-   */
-  private static LazyVariableInformation convertAsField(JavaInfo javaInfo) throws Exception {
-    FieldVariableSupport fieldVariableSupport =
-        (FieldVariableSupport) javaInfo.getVariableSupport();
-    String fieldName = fieldVariableSupport.getName();
-    Expression creation = (Expression) javaInfo.getCreationSupport().getNode();
-    // add method by template
-    MethodDeclaration accessor =
-        addMethod(javaInfo, AstNodeUtils.getEnclosingType(creation), fieldName);
-    // initialize variable and creation
-    Assignment assignment;
-    {
-      IfStatement ifStatement = (IfStatement) accessor.getBody().statements().get(0);
-      Block thenBlock = (Block) ifStatement.getThenStatement();
-      ExpressionStatement expressionStatement = (ExpressionStatement) thenBlock.statements().get(0);
-      assignment = (Assignment) expressionStatement.getExpression();
-    }
-    AstEditor editor = javaInfo.getEditor();
-    StatementTarget target = new StatementTarget(assignment, false);
-    // process related nodes
-    List<Statement> moveStatements = Lists.newArrayList();
-    List<ASTNode> replaceNodes = Lists.newArrayList();
-    // prepare node lists...
-    collectNodesToEdit(javaInfo, moveStatements, replaceNodes, target);
-    moveStatements.remove(AstNodeUtils.getEnclosingStatement(creation));
-    replaceNodes.remove(creation);
-    // move creation directly
-    {
-      // check
-      Assert.isTrue(canMoveNode(target, javaInfo, creation));
-      // remove creation at old location
-      String replacementSource = editor.getSource(creation);
-      {
-        // replace by "null" and remove statement
-        NullLiteral newNullLiteral = creation.getAST().newNullLiteral();
-        AstEditor.replaceNode(creation, newNullLiteral);
-        editor.removeEnclosingStatement(newNullLiteral);
-      }
-      // replace "null" expression in template by creation
-      ASTNode originalNode = assignment.getRightHandSide();
-      int startPosition = originalNode.getStartPosition();
-      editor.replaceExpression((Expression) originalNode, replacementSource);
-      AstNodeUtils.moveNode(creation, startPosition);
-      assignment.setRightHandSide(creation);
-    }
-    // replace statements with blocks
-    {
-      // prepare unique list of blocks
-      List<Block> blocks = Lists.newArrayList();
-      for (Statement statement : moveStatements) {
-        Block block = AstNodeUtils.getEnclosingBlock(statement);
-        if (!blocks.contains(block)) {
-          blocks.add(block);
-        }
-      }
-      // replace statements with blocks
-      Collections.sort(blocks, AstNodeUtils.SORT_BY_REVERSE_POSITION);
-      for (Block block : blocks) {
-        List<Statement> blockStatements = DomGenerics.statements(block);
-        if (moveStatements.containsAll(blockStatements) && block.getParent() instanceof Block) {
-          moveStatements.removeAll(blockStatements);
-          moveStatements.add(block);
-        }
-      }
-    }
-    // sort the resulting list of statements
-    {
-      Statement[] statements = moveStatements.toArray(new Statement[moveStatements.size()]);
-      Arrays.sort(statements, AstNodeUtils.SORT_BY_POSITION);
-      moveStatements = Lists.newArrayList(statements);
-    }
-    // move statements
-    for (Statement moveStatement : moveStatements) {
-      editor.moveStatement(moveStatement, target);
-      target = new StatementTarget(moveStatement, false);
-    }
-    // replace field access nodes to access by invocation nodes
-    String invocationSource = accessor.getName().getIdentifier() + "()";
-    List<ASTNode> relatedNodes = javaInfo.getRelatedNodes();
-    for (ASTNode replaceNode : replaceNodes) {
-      if (relatedNodes.contains(replaceNode)) {
-        Expression replaceExpression =
-            editor.replaceExpression((Expression) replaceNode, invocationSource);
-        relatedNodes.remove(replaceNode);
-        javaInfo.addRelatedNode(replaceExpression);
-      }
-    }
-    // ready
-    return new LazyVariableInformation(accessor, assignment.getLeftHandSide(), creation);
-  }
+	/**
+	 * Conversion for {@link FieldVariableSupport}.
+	 */
+	private static LazyVariableInformation convertAsField(JavaInfo javaInfo) throws Exception {
+		FieldVariableSupport fieldVariableSupport =
+				(FieldVariableSupport) javaInfo.getVariableSupport();
+		String fieldName = fieldVariableSupport.getName();
+		Expression creation = (Expression) javaInfo.getCreationSupport().getNode();
+		// add method by template
+		MethodDeclaration accessor =
+				addMethod(javaInfo, AstNodeUtils.getEnclosingType(creation), fieldName);
+		// initialize variable and creation
+		Assignment assignment;
+		{
+			IfStatement ifStatement = (IfStatement) accessor.getBody().statements().get(0);
+			Block thenBlock = (Block) ifStatement.getThenStatement();
+			ExpressionStatement expressionStatement = (ExpressionStatement) thenBlock.statements().get(0);
+			assignment = (Assignment) expressionStatement.getExpression();
+		}
+		AstEditor editor = javaInfo.getEditor();
+		StatementTarget target = new StatementTarget(assignment, false);
+		// process related nodes
+		List<Statement> moveStatements = Lists.newArrayList();
+		List<ASTNode> replaceNodes = Lists.newArrayList();
+		// prepare node lists...
+		collectNodesToEdit(javaInfo, moveStatements, replaceNodes, target);
+		moveStatements.remove(AstNodeUtils.getEnclosingStatement(creation));
+		replaceNodes.remove(creation);
+		// move creation directly
+		{
+			// check
+			Assert.isTrue(canMoveNode(target, javaInfo, creation));
+			// remove creation at old location
+			String replacementSource = editor.getSource(creation);
+			{
+				// replace by "null" and remove statement
+				NullLiteral newNullLiteral = creation.getAST().newNullLiteral();
+				AstEditor.replaceNode(creation, newNullLiteral);
+				editor.removeEnclosingStatement(newNullLiteral);
+			}
+			// replace "null" expression in template by creation
+			ASTNode originalNode = assignment.getRightHandSide();
+			int startPosition = originalNode.getStartPosition();
+			editor.replaceExpression((Expression) originalNode, replacementSource);
+			AstNodeUtils.moveNode(creation, startPosition);
+			assignment.setRightHandSide(creation);
+		}
+		// replace statements with blocks
+		{
+			// prepare unique list of blocks
+			List<Block> blocks = Lists.newArrayList();
+			for (Statement statement : moveStatements) {
+				Block block = AstNodeUtils.getEnclosingBlock(statement);
+				if (!blocks.contains(block)) {
+					blocks.add(block);
+				}
+			}
+			// replace statements with blocks
+			Collections.sort(blocks, AstNodeUtils.SORT_BY_REVERSE_POSITION);
+			for (Block block : blocks) {
+				List<Statement> blockStatements = DomGenerics.statements(block);
+				if (moveStatements.containsAll(blockStatements) && block.getParent() instanceof Block) {
+					moveStatements.removeAll(blockStatements);
+					moveStatements.add(block);
+				}
+			}
+		}
+		// sort the resulting list of statements
+		{
+			Statement[] statements = moveStatements.toArray(new Statement[moveStatements.size()]);
+			Arrays.sort(statements, AstNodeUtils.SORT_BY_POSITION);
+			moveStatements = Lists.newArrayList(statements);
+		}
+		// move statements
+		for (Statement moveStatement : moveStatements) {
+			editor.moveStatement(moveStatement, target);
+			target = new StatementTarget(moveStatement, false);
+		}
+		// replace field access nodes to access by invocation nodes
+		String invocationSource = accessor.getName().getIdentifier() + "()";
+		List<ASTNode> relatedNodes = javaInfo.getRelatedNodes();
+		for (ASTNode replaceNode : replaceNodes) {
+			if (relatedNodes.contains(replaceNode)) {
+				Expression replaceExpression =
+						editor.replaceExpression((Expression) replaceNode, invocationSource);
+				relatedNodes.remove(replaceNode);
+				javaInfo.addRelatedNode(replaceExpression);
+			}
+		}
+		// ready
+		return new LazyVariableInformation(accessor, assignment.getLeftHandSide(), creation);
+	}
 
-  /**
-   * Fills nodes that should be move/replace with this component and any of its children.
-   */
-  private static void collectNodesToEdit(JavaInfo javaInfo,
-      List<Statement> moveStatements,
-      List<ASTNode> replaceNodes,
-      StatementTarget target) throws Exception {
-    // add related nodes
-    for (ASTNode relatedNode : javaInfo.getRelatedNodes()) {
-      Statement statement = AstNodeUtils.getEnclosingStatement(relatedNode);
-      if (moveStatements.contains(statement)) {
-        continue;
-      }
-      if (canMoveNode(target, javaInfo, relatedNode)) {
-        moveStatements.add(statement);
-      } else {
-        replaceNodes.add(relatedNode);
-        continue;
-      }
-    }
-    // add children
-    List<JavaInfo> children = Lists.newArrayList(javaInfo.getChildrenJava());
-    javaInfo.getBroadcastJava().variable_addStatementsToMove(javaInfo, children);
-    for (JavaInfo child : children) {
-      collectNodesToEdit(child, moveStatements, replaceNodes, target);
-    }
-  }
+	/**
+	 * Fills nodes that should be move/replace with this component and any of its children.
+	 */
+	private static void collectNodesToEdit(JavaInfo javaInfo,
+			List<Statement> moveStatements,
+			List<ASTNode> replaceNodes,
+			StatementTarget target) throws Exception {
+		// add related nodes
+		for (ASTNode relatedNode : javaInfo.getRelatedNodes()) {
+			Statement statement = AstNodeUtils.getEnclosingStatement(relatedNode);
+			if (moveStatements.contains(statement)) {
+				continue;
+			}
+			if (canMoveNode(target, javaInfo, relatedNode)) {
+				moveStatements.add(statement);
+			} else {
+				replaceNodes.add(relatedNode);
+				continue;
+			}
+		}
+		// add children
+		List<JavaInfo> children = Lists.newArrayList(javaInfo.getChildrenJava());
+		javaInfo.getBroadcastJava().variable_addStatementsToMove(javaInfo, children);
+		for (JavaInfo child : children) {
+			collectNodesToEdit(child, moveStatements, replaceNodes, target);
+		}
+	}
 
-  /**
-   * We should not move {@link ASTNode} if it is not ready enclosing parameters, for example
-   * invocation expression or arguments not ready at target.
-   */
-  private static boolean canMoveNode(StatementTarget target, JavaInfo javaInfo, ASTNode node) {
-    if (!(node instanceof Expression)) {
-      return true;
-    }
-    if (node instanceof MethodInvocation) {
-      MethodInvocation invocation = (MethodInvocation) node;
-      if (!canMoveInvocation(target, javaInfo, invocation)) {
-        return false;
-      }
-    }
-    return canMoveNode(target, javaInfo, node.getParent());
-  }
+	/**
+	 * We should not move {@link ASTNode} if it is not ready enclosing parameters, for example
+	 * invocation expression or arguments not ready at target.
+	 */
+	private static boolean canMoveNode(StatementTarget target, JavaInfo javaInfo, ASTNode node) {
+		if (!(node instanceof Expression)) {
+			return true;
+		}
+		if (node instanceof MethodInvocation) {
+			MethodInvocation invocation = (MethodInvocation) node;
+			if (!canMoveInvocation(target, javaInfo, invocation)) {
+				return false;
+			}
+		}
+		return canMoveNode(target, javaInfo, node.getParent());
+	}
 
-  private static boolean canMoveInvocation(StatementTarget target,
-      JavaInfo javaInfo,
-      MethodInvocation invocation) {
-    Expression invocationExpression = invocation.getExpression();
-    if (invocationExpression == null) {
-      // skip "this" invocation
-      return false;
-    }
-    if (!javaInfo.isRepresentedBy(invocationExpression)) {
-      // skip non-self invocation
-      return false;
-    }
-    List<Expression> expressions = DomGenerics.arguments(invocation);
-    // do not move invocations with parameters not ready at target
-    for (Expression expression : expressions) {
-      if (isRepresentedByOrChild(javaInfo, expression)) {
-        continue;
-      }
-      JavaInfo expressionJavaInfo = javaInfo.getRootJava().getChildRepresentedBy(expression);
-      if (expressionJavaInfo != null) {
-        if (expressionJavaInfo.getVariableSupport() instanceof LazyVariableSupport) {
-          continue;
-        }
-        if (!JavaInfoUtils.isCreatedAtTarget(expressionJavaInfo, new NodeTarget(target))) {
-          return false;
-        }
-      }
-    }
-    return true;
-  }
+	private static boolean canMoveInvocation(StatementTarget target,
+			JavaInfo javaInfo,
+			MethodInvocation invocation) {
+		Expression invocationExpression = invocation.getExpression();
+		if (invocationExpression == null) {
+			// skip "this" invocation
+			return false;
+		}
+		if (!javaInfo.isRepresentedBy(invocationExpression)) {
+			// skip non-self invocation
+			return false;
+		}
+		List<Expression> expressions = DomGenerics.arguments(invocation);
+		// do not move invocations with parameters not ready at target
+		for (Expression expression : expressions) {
+			if (isRepresentedByOrChild(javaInfo, expression)) {
+				continue;
+			}
+			JavaInfo expressionJavaInfo = javaInfo.getRootJava().getChildRepresentedBy(expression);
+			if (expressionJavaInfo != null) {
+				if (expressionJavaInfo.getVariableSupport() instanceof LazyVariableSupport) {
+					continue;
+				}
+				if (!JavaInfoUtils.isCreatedAtTarget(expressionJavaInfo, new NodeTarget(target))) {
+					return false;
+				}
+			}
+		}
+		return true;
+	}
 
-  private static boolean isRepresentedByOrChild(JavaInfo javaInfo, ASTNode node) {
-    boolean represented = javaInfo.isRepresentedBy(node);
-    for (JavaInfo childJavaInfo : javaInfo.getChildrenJava()) {
-      if (represented) {
-        return true;
-      }
-      represented |= isRepresentedByOrChild(childJavaInfo, node);
-    }
-    return represented;
-  }
+	private static boolean isRepresentedByOrChild(JavaInfo javaInfo, ASTNode node) {
+		boolean represented = javaInfo.isRepresentedBy(node);
+		for (JavaInfo childJavaInfo : javaInfo.getChildrenJava()) {
+			if (represented) {
+				return true;
+			}
+			represented |= isRepresentedByOrChild(childJavaInfo, node);
+		}
+		return represented;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the added "lazy" {@link MethodDeclaration} by template.
-   */
-  private static MethodDeclaration addMethod(JavaInfo javaInfo,
-      TypeDeclaration typeDeclaration,
-      String fieldName) throws Exception {
-    AstEditor editor = javaInfo.getEditor();
-    String methodName = getExpectedMethodName(javaInfo, fieldName);
-    methodName = editor.getUniqueMethodName(methodName);
-    // prepare target
-    String className =
-        ReflectionUtils.getCanonicalName(javaInfo.getDescription().getComponentClass());
-    BodyDeclarationTarget bodyTarget = new BodyDeclarationTarget(typeDeclaration, false);
-    // prepare modifiers
-    String modifiers = LazyVariableSupport.prefMethodModifier(javaInfo);
-    if (isStaticContext(javaInfo, javaInfo.getCreationSupport().getNode().getStartPosition())) {
-      modifiers += "static ";
-    }
-    //
-    String header = modifiers + className + " " + methodName + "()";
-    List<String> bodyLines = Lists.newArrayList();
-    bodyLines.add("if (" + fieldName + " == null) {");
-    bodyLines.add("\t" + fieldName + " = null;");
-    bodyLines.add("}");
-    bodyLines.add("return " + fieldName + ";");
-    return editor.addMethodDeclaration(header, bodyLines, bodyTarget);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the added "lazy" {@link MethodDeclaration} by template.
+	 */
+	private static MethodDeclaration addMethod(JavaInfo javaInfo,
+			TypeDeclaration typeDeclaration,
+			String fieldName) throws Exception {
+		AstEditor editor = javaInfo.getEditor();
+		String methodName = getExpectedMethodName(javaInfo, fieldName);
+		methodName = editor.getUniqueMethodName(methodName);
+		// prepare target
+		String className =
+				ReflectionUtils.getCanonicalName(javaInfo.getDescription().getComponentClass());
+		BodyDeclarationTarget bodyTarget = new BodyDeclarationTarget(typeDeclaration, false);
+		// prepare modifiers
+		String modifiers = LazyVariableSupport.prefMethodModifier(javaInfo);
+		if (isStaticContext(javaInfo, javaInfo.getCreationSupport().getNode().getStartPosition())) {
+			modifiers += "static ";
+		}
+		//
+		String header = modifiers + className + " " + methodName + "()";
+		List<String> bodyLines = Lists.newArrayList();
+		bodyLines.add("if (" + fieldName + " == null) {");
+		bodyLines.add("\t" + fieldName + " = null;");
+		bodyLines.add("}");
+		bodyLines.add("return " + fieldName + ";");
+		return editor.addMethodDeclaration(header, bodyLines, bodyTarget);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utilities
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * We are going to create/access field and need to know if at position of assignment we work
-   * within static or instance context (for example in <code>main</code>).
-   *
-   * @param position
-   *          the position in source where we are going to access field.
-   *
-   * @return <code>true</code> if we work within static context.
-   */
-  public static boolean isStaticContext(JavaInfo javaInfo, int position) {
-    MethodDeclaration method = javaInfo.getEditor().getEnclosingMethod(position);
-    return AstNodeUtils.isStatic(method);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utilities
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * We are going to create/access field and need to know if at position of assignment we work
+	 * within static or instance context (for example in <code>main</code>).
+	 *
+	 * @param position
+	 *          the position in source where we are going to access field.
+	 *
+	 * @return <code>true</code> if we work within static context.
+	 */
+	public static boolean isStaticContext(JavaInfo javaInfo, int position) {
+		MethodDeclaration method = javaInfo.getEditor().getEnclosingMethod(position);
+		return AstNodeUtils.isStatic(method);
+	}
 
-  /**
-   * @return the name of method that corresponds to given name of field.
-   */
-  public static String getExpectedMethodName(JavaInfo javaInfo, String fieldName) {
-    String strippedFieldName =
-        new VariableUtils(javaInfo).stripPrefixSuffix(
-            fieldName,
-            JavaCore.CODEASSIST_FIELD_PREFIXES,
-            JavaCore.CODEASSIST_FIELD_SUFFIXES);
-    return "get" + StringUtils.capitalize(strippedFieldName);
-  }
+	/**
+	 * @return the name of method that corresponds to given name of field.
+	 */
+	public static String getExpectedMethodName(JavaInfo javaInfo, String fieldName) {
+		String strippedFieldName =
+				new VariableUtils(javaInfo).stripPrefixSuffix(
+						fieldName,
+						JavaCore.CODEASSIST_FIELD_PREFIXES,
+						JavaCore.CODEASSIST_FIELD_SUFFIXES);
+		return "get" + StringUtils.capitalize(strippedFieldName);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // LazyVariableInformation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Checks if given {@link JavaInfo} uses "lazy" pattern and sets {@link LazyVariableSupport}.
-   */
-  public static void setLazyVariable(JavaInfo javaInfo) throws Exception {
-    ASTNode creationNode = javaInfo.getCreationSupport().getNode();
-    MethodDeclaration method = AstNodeUtils.getEnclosingMethod(creationNode);
-    if (method != null) {
-      LazyVariableInformation lazyInformation = getInformation(method);
-      if (lazyInformation != null && lazyInformation.getCreation() == creationNode) {
-        javaInfo.setVariableSupport(new LazyVariableSupport(javaInfo, lazyInformation));
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// LazyVariableInformation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Checks if given {@link JavaInfo} uses "lazy" pattern and sets {@link LazyVariableSupport}.
+	 */
+	public static void setLazyVariable(JavaInfo javaInfo) throws Exception {
+		ASTNode creationNode = javaInfo.getCreationSupport().getNode();
+		MethodDeclaration method = AstNodeUtils.getEnclosingMethod(creationNode);
+		if (method != null) {
+			LazyVariableInformation lazyInformation = getInformation(method);
+			if (lazyInformation != null && lazyInformation.getCreation() == creationNode) {
+				javaInfo.setVariableSupport(new LazyVariableSupport(javaInfo, lazyInformation));
+			}
+		}
+	}
 
-  /**
-   * @return the {@link LazyVariableInformation} if given {@link MethodDeclaration} is access of
-   *         component using "lazy creation" pattern, or <code>null</code> in other case.
-   */
-  public static LazyVariableInformation getInformation(MethodDeclaration method) {
-    if (method.parameters().isEmpty() && isNotAbstract(method)) {
-      List<Statement> statements = DomGenerics.statements(method.getBody());
-      // check for: [if () {}, return someExpression;]
-      if (statements.size() == 2
-          && statements.get(0) instanceof IfStatement
-          && statements.get(1) instanceof ReturnStatement) {
-        IfStatement ifStatement = (IfStatement) statements.get(0);
-        // prepare "return expression;"
-        Expression returnExpression;
-        {
-          ReturnStatement returnStatement = (ReturnStatement) statements.get(1);
-          returnExpression = returnStatement.getExpression();
-          if (returnExpression == null) {
-            return null;
-          }
-        }
-        // check for: [if (infixExpression) {}, return simpleName;]
-        if (ifStatement.getThenStatement() instanceof Block
-            && ifStatement.getElseStatement() == null
-            && ifStatement.getExpression() instanceof InfixExpression) {
-          IVariableBinding variableBinding = AstNodeUtils.getVariableBinding(returnExpression);
-          InfixExpression condition = (InfixExpression) ifStatement.getExpression();
-          // check for: [if (simpleName == null) {}, return field;]
-          if (variableBinding != null
-              && variableBinding.isField()
-              && condition.getOperator() == InfixExpression.Operator.EQUALS
-              && condition.getRightOperand() instanceof NullLiteral) {
-            // check for: [if (field == null) {}, return field;]
-            if (sameVariables(condition.getLeftOperand(), returnExpression)) {
-              Block block = (Block) ifStatement.getThenStatement();
-              return getInformation(method, block, returnExpression);
-            }
-          }
-        }
-      }
-    }
-    // no "lazy creation" detected
-    return null;
-  }
+	/**
+	 * @return the {@link LazyVariableInformation} if given {@link MethodDeclaration} is access of
+	 *         component using "lazy creation" pattern, or <code>null</code> in other case.
+	 */
+	public static LazyVariableInformation getInformation(MethodDeclaration method) {
+		if (method.parameters().isEmpty() && isNotAbstract(method)) {
+			List<Statement> statements = DomGenerics.statements(method.getBody());
+			// check for: [if () {}, return someExpression;]
+			if (statements.size() == 2
+					&& statements.get(0) instanceof IfStatement
+					&& statements.get(1) instanceof ReturnStatement) {
+				IfStatement ifStatement = (IfStatement) statements.get(0);
+				// prepare "return expression;"
+				Expression returnExpression;
+				{
+					ReturnStatement returnStatement = (ReturnStatement) statements.get(1);
+					returnExpression = returnStatement.getExpression();
+					if (returnExpression == null) {
+						return null;
+					}
+				}
+				// check for: [if (infixExpression) {}, return simpleName;]
+				if (ifStatement.getThenStatement() instanceof Block
+						&& ifStatement.getElseStatement() == null
+						&& ifStatement.getExpression() instanceof InfixExpression) {
+					IVariableBinding variableBinding = AstNodeUtils.getVariableBinding(returnExpression);
+					InfixExpression condition = (InfixExpression) ifStatement.getExpression();
+					// check for: [if (simpleName == null) {}, return field;]
+					if (variableBinding != null
+							&& variableBinding.isField()
+							&& condition.getOperator() == InfixExpression.Operator.EQUALS
+							&& condition.getRightOperand() instanceof NullLiteral) {
+						// check for: [if (field == null) {}, return field;]
+						if (sameVariables(condition.getLeftOperand(), returnExpression)) {
+							Block block = (Block) ifStatement.getThenStatement();
+							return getInformation(method, block, returnExpression);
+						}
+					}
+				}
+			}
+		}
+		// no "lazy creation" detected
+		return null;
+	}
 
-  private static boolean isNotAbstract(MethodDeclaration method) {
-    return method.getBody() != null;
-  }
+	private static boolean isNotAbstract(MethodDeclaration method) {
+		return method.getBody() != null;
+	}
 
-  private static LazyVariableInformation getInformation(MethodDeclaration method,
-      Block thenBlock,
-      Expression variable) {
-    List<Statement> thenStatements = DomGenerics.statements(thenBlock);
-    for (Statement thenStatement : thenStatements) {
-      LazyVariableInformation information = getInformation(method, variable, thenStatement);
-      if (information != null) {
-        return information;
-      }
-    }
-    return null;
-  }
+	private static LazyVariableInformation getInformation(MethodDeclaration method,
+			Block thenBlock,
+			Expression variable) {
+		List<Statement> thenStatements = DomGenerics.statements(thenBlock);
+		for (Statement thenStatement : thenStatements) {
+			LazyVariableInformation information = getInformation(method, variable, thenStatement);
+			if (information != null) {
+				return information;
+			}
+		}
+		return null;
+	}
 
-  private static LazyVariableInformation getInformation(MethodDeclaration method,
-      Expression variable,
-      Statement thenStatement) {
-    // try {}
-    if (thenStatement instanceof TryStatement) {
-      TryStatement tryStatement = (TryStatement) thenStatement;
-      return getInformation(method, tryStatement.getBody(), variable);
-    }
-    // variable = new Component();
-    if (thenStatement instanceof ExpressionStatement) {
-      ExpressionStatement expressionStatement = (ExpressionStatement) thenStatement;
-      if (expressionStatement.getExpression() instanceof Assignment) {
-        Assignment assignment = (Assignment) expressionStatement.getExpression();
-        Expression assignmentVariable = assignment.getLeftHandSide();
-        if (sameVariables(assignmentVariable, variable)) {
-          return new LazyVariableInformation(method,
-              assignmentVariable,
-              assignment.getRightHandSide());
-        }
-      }
-    }
-    // fail
-    return null;
-  }
+	private static LazyVariableInformation getInformation(MethodDeclaration method,
+			Expression variable,
+			Statement thenStatement) {
+		// try {}
+		if (thenStatement instanceof TryStatement) {
+			TryStatement tryStatement = (TryStatement) thenStatement;
+			return getInformation(method, tryStatement.getBody(), variable);
+		}
+		// variable = new Component();
+		if (thenStatement instanceof ExpressionStatement) {
+			ExpressionStatement expressionStatement = (ExpressionStatement) thenStatement;
+			if (expressionStatement.getExpression() instanceof Assignment) {
+				Assignment assignment = (Assignment) expressionStatement.getExpression();
+				Expression assignmentVariable = assignment.getLeftHandSide();
+				if (sameVariables(assignmentVariable, variable)) {
+					return new LazyVariableInformation(method,
+							assignmentVariable,
+							assignment.getRightHandSide());
+				}
+			}
+		}
+		// fail
+		return null;
+	}
 
-  /**
-   * Checks if two given {@link Expression}-s are same variables.
-   */
-  private static boolean sameVariables(Expression expression_1, Expression expression_2) {
-    String source_1 = expression_1.toString();
-    String source_2 = expression_2.toString();
-    return source_1.equals(source_2);
-  }
+	/**
+	 * Checks if two given {@link Expression}-s are same variables.
+	 */
+	private static boolean sameVariables(Expression expression_1, Expression expression_2) {
+		String source_1 = expression_1.toString();
+		String source_2 = expression_2.toString();
+		return source_1.equals(source_2);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/LocalReuseVariableSupport.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/LocalReuseVariableSupport.java
index 5d6e29ce5..60dda894f 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/LocalReuseVariableSupport.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/LocalReuseVariableSupport.java
@@ -39,246 +39,246 @@
  * @coverage core.model.variable
  */
 public final class LocalReuseVariableSupport extends LocalVariableSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public LocalReuseVariableSupport(JavaInfo javaInfo, SimpleName variable) {
-    super(javaInfo, variable);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public LocalReuseVariableSupport(JavaInfo javaInfo, SimpleName variable) {
+		super(javaInfo, variable);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    return "local-reused: " + getName();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		return "local-reused: " + getName();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Name
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void setName(String newName) throws Exception {
-    convertLocalToField();
-    m_javaInfo.getVariableSupport().setName(newName);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Name
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void setName(String newName) throws Exception {
+		convertLocalToField();
+		m_javaInfo.getVariableSupport().setName(newName);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Expressions
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getReferenceExpression(NodeTarget target) throws Exception {
-    assertJavaInfoCreatedAt(target);
-    if (isVisibleAtTarget(target)) {
-      return getName();
-    } else {
-      convertLocalToField();
-      return m_javaInfo.getVariableSupport().getReferenceExpression(target);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Expressions
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getReferenceExpression(NodeTarget target) throws Exception {
+		assertJavaInfoCreatedAt(target);
+		if (isVisibleAtTarget(target)) {
+			return getName();
+		} else {
+			convertLocalToField();
+			return m_javaInfo.getVariableSupport().getReferenceExpression(target);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Conversion
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void convertLocalToField() throws Exception {
-    // if old declaration is with our initializer, split it on declaration and assignment
-    if (m_declaration.getName() == m_variable) {
-      splitVariable();
-    }
-    // add new field and use its name
-    {
-      String fieldName = addUniqueField(isStaticContext(), null);
-      replaceComponentReferences(fieldName);
-    }
-    // use field variable support
-    m_javaInfo.setVariableSupport(new FieldUniqueVariableSupport(m_javaInfo, m_variable));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Conversion
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void convertLocalToField() throws Exception {
+		// if old declaration is with our initializer, split it on declaration and assignment
+		if (m_declaration.getName() == m_variable) {
+			splitVariable();
+		}
+		// add new field and use its name
+		{
+			String fieldName = addUniqueField(isStaticContext(), null);
+			replaceComponentReferences(fieldName);
+		}
+		// use field variable support
+		m_javaInfo.setVariableSupport(new FieldUniqueVariableSupport(m_javaInfo, m_variable));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Morphing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void setType(String newTypeName) throws Exception {
-    // if old declaration is with our initializer, split it on declaration and assignment
-    if (m_declaration.getName() == m_variable) {
-      splitVariable();
-    }
-    // check that existing assignment is part of ExpressionStatement
-    Assignment oldAssignment;
-    ExpressionStatement oldStatement;
-    {
-      Assert.isTrue(
-          m_variable.getLocationInParent() == Assignment.LEFT_HAND_SIDE_PROPERTY
-              && m_variable.getParent().getLocationInParent() == ExpressionStatement.EXPRESSION_PROPERTY,
-          "Variable should be part of Assignment in ExpressionStatement, for "
-              + AstNodeUtils.getEnclosingStatement(m_variable));
-      oldAssignment = (Assignment) m_variable.getParent();
-      oldStatement = (ExpressionStatement) AstNodeUtils.getEnclosingStatement(oldAssignment);
-    }
-    // convert Assignment into VariableDeclarationStatement with required Type
-    {
-      AstEditor editor = m_javaInfo.getEditor();
-      AST ast = m_variable.getAST();
-      // initial values
-      int position = oldStatement.getStartPosition();
-      String source = "";
-      // add type
-      Type newType;
-      {
-        newType = editor.getParser().parseQualifiedType(position, newTypeName);
-        source += newTypeName + " ";
-      }
-      // add variable
-      SimpleName newVariable;
-      {
-        // prepare identifier
-        String identifier;
-        {
-          identifier = AstNodeUtils.getVariableName(m_variable);
-          identifier = editor.getUniqueVariableName(position, identifier, null);
-          replaceComponentReferences(identifier);
-        }
-        // prepare variable
-        newVariable =
-            editor.getParser().parseVariable(
-                position + source.length(),
-                identifier,
-                null,
-                AstNodeUtils.getTypeBinding(newType),
-                false,
-                Modifier.NONE);
-        source += identifier;
-      }
-      // add " = "
-      {
-        source += " = ";
-      }
-      // add initializer
-      Expression newInitializer;
-      {
-        newInitializer = oldAssignment.getRightHandSide();
-        oldAssignment.setRightHandSide(ast.newSimpleName("__bar__"));
-        String initializerSource = editor.getSource(newInitializer);
-        AstNodeUtils.moveNode(newInitializer, position + source.length());
-        source += initializerSource;
-      }
-      // create fragment
-      VariableDeclarationFragment newFragment;
-      {
-        newFragment = ast.newVariableDeclarationFragment();
-        newFragment.setName(newVariable);
-        newFragment.setInitializer(newInitializer);
-        AstNodeUtils.setSourceRange(newFragment, newVariable, newInitializer);
-      }
-      // create statement
-      VariableDeclarationStatement newStatement;
-      {
-        newStatement = ast.newVariableDeclarationStatement(newFragment);
-        newStatement.setType(newType);
-        AstNodeUtils.setSourceRange(newStatement, newType, newFragment, 1);
-        source += ";";
-      }
-      // replace old statement with new statement
-      {
-        List<Statement> statements = DomGenerics.statements((Block) oldStatement.getParent());
-        int index = statements.indexOf(oldStatement);
-        // replace without "oldStatement", so its parts are not moved
-        statements.remove(index);
-        editor.replaceSubstring(oldStatement, source);
-        // now we can add "newStatement", we created it already with correct positions
-        statements.add(index, newStatement);
-        // finalize source modifications
-        editor.resolveImports(newStatement);
-      }
-      // now our JavaInfo uses LocalUniqueVariableSupport
-      m_javaInfo.setVariableSupport(new LocalUniqueVariableSupport(m_javaInfo, newVariable));
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Morphing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void setType(String newTypeName) throws Exception {
+		// if old declaration is with our initializer, split it on declaration and assignment
+		if (m_declaration.getName() == m_variable) {
+			splitVariable();
+		}
+		// check that existing assignment is part of ExpressionStatement
+		Assignment oldAssignment;
+		ExpressionStatement oldStatement;
+		{
+			Assert.isTrue(
+					m_variable.getLocationInParent() == Assignment.LEFT_HAND_SIDE_PROPERTY
+					&& m_variable.getParent().getLocationInParent() == ExpressionStatement.EXPRESSION_PROPERTY,
+					"Variable should be part of Assignment in ExpressionStatement, for "
+							+ AstNodeUtils.getEnclosingStatement(m_variable));
+			oldAssignment = (Assignment) m_variable.getParent();
+			oldStatement = (ExpressionStatement) AstNodeUtils.getEnclosingStatement(oldAssignment);
+		}
+		// convert Assignment into VariableDeclarationStatement with required Type
+		{
+			AstEditor editor = m_javaInfo.getEditor();
+			AST ast = m_variable.getAST();
+			// initial values
+			int position = oldStatement.getStartPosition();
+			String source = "";
+			// add type
+			Type newType;
+			{
+				newType = editor.getParser().parseQualifiedType(position, newTypeName);
+				source += newTypeName + " ";
+			}
+			// add variable
+			SimpleName newVariable;
+			{
+				// prepare identifier
+				String identifier;
+				{
+					identifier = AstNodeUtils.getVariableName(m_variable);
+					identifier = editor.getUniqueVariableName(position, identifier, null);
+					replaceComponentReferences(identifier);
+				}
+				// prepare variable
+				newVariable =
+						editor.getParser().parseVariable(
+								position + source.length(),
+								identifier,
+								null,
+								AstNodeUtils.getTypeBinding(newType),
+								false,
+								Modifier.NONE);
+				source += identifier;
+			}
+			// add " = "
+			{
+				source += " = ";
+			}
+			// add initializer
+			Expression newInitializer;
+			{
+				newInitializer = oldAssignment.getRightHandSide();
+				oldAssignment.setRightHandSide(ast.newSimpleName("__bar__"));
+				String initializerSource = editor.getSource(newInitializer);
+				AstNodeUtils.moveNode(newInitializer, position + source.length());
+				source += initializerSource;
+			}
+			// create fragment
+			VariableDeclarationFragment newFragment;
+			{
+				newFragment = ast.newVariableDeclarationFragment();
+				newFragment.setName(newVariable);
+				newFragment.setInitializer(newInitializer);
+				AstNodeUtils.setSourceRange(newFragment, newVariable, newInitializer);
+			}
+			// create statement
+			VariableDeclarationStatement newStatement;
+			{
+				newStatement = ast.newVariableDeclarationStatement(newFragment);
+				newStatement.setType(newType);
+				AstNodeUtils.setSourceRange(newStatement, newType, newFragment, 1);
+				source += ";";
+			}
+			// replace old statement with new statement
+			{
+				List<Statement> statements = DomGenerics.statements((Block) oldStatement.getParent());
+				int index = statements.indexOf(oldStatement);
+				// replace without "oldStatement", so its parts are not moved
+				statements.remove(index);
+				editor.replaceSubstring(oldStatement, source);
+				// now we can add "newStatement", we created it already with correct positions
+				statements.add(index, newStatement);
+				// finalize source modifications
+				editor.resolveImports(newStatement);
+			}
+			// now our JavaInfo uses LocalUniqueVariableSupport
+			m_javaInfo.setVariableSupport(new LocalUniqueVariableSupport(m_javaInfo, newVariable));
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Split
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * This method should be used if this variable is initialized in
-   * {@link VariableDeclarationFragment} and we want split it on separate
-   * {@link VariableDeclarationStatement} and assignment. There is such quick assist in Eclipse.
-   */
-  private void splitVariable() throws Exception {
-    AstEditor editor = m_javaInfo.getEditor();
-    // prepare current information
-    VariableDeclaration oldFragment = m_declaration;
-    VariableDeclarationStatement oldStatement = getDeclarationStatement();
-    // add new VariableDeclarationStatement before oldStatement
-    // we should create new variable because "m_variable" is place of _assignment_
-    {
-      int position = oldStatement.getStartPosition();
-      String source = "";
-      // add type
-      Type newType;
-      {
-        Type oldType = oldStatement.getType();
-        newType = editor.getParser().parseType(position, oldType);
-        source += editor.getSource(oldType) + " ";
-      }
-      // add variable
-      SimpleName newVariable;
-      {
-        String identifier = AstNodeUtils.getVariableName(m_variable);
-        newVariable =
-            editor.getParser().parseVariable(
-                position + source.length(),
-                identifier,
-                null,
-                AstNodeUtils.getTypeBinding(newType),
-                false,
-                Modifier.NONE);
-        source += identifier;
-      }
-      // create fragment
-      VariableDeclarationFragment newFragment;
-      {
-        newFragment = m_variable.getAST().newVariableDeclarationFragment();
-        newFragment.setName(newVariable);
-        AstNodeUtils.copySourceRange(newFragment, newVariable);
-      }
-      // create statement
-      VariableDeclarationStatement newStatement;
-      {
-        newStatement = m_variable.getAST().newVariableDeclarationStatement(newFragment);
-        newStatement.setType(newType);
-        AstNodeUtils.setSourceRange(newStatement, newType, newFragment, 1);
-        source += ";";
-      }
-      // modify source
-      {
-        String prefix = editor.getWhitespaceToLeft(position, false);
-        source += editor.getGeneration().getEndOfLine() + prefix;
-        editor.replaceSubstring(position, 0, source);
-      }
-      // add new statement to AST
-      {
-        List<Statement> statements = DomGenerics.statements((Block) oldStatement.getParent());
-        int index = statements.indexOf(oldStatement);
-        statements.add(index, newStatement);
-      }
-    }
-    // convert old declaration to assignment
-    replaceDeclarationWithAssignment(editor, oldFragment);
-    rememberDeclaration();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Split
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * This method should be used if this variable is initialized in
+	 * {@link VariableDeclarationFragment} and we want split it on separate
+	 * {@link VariableDeclarationStatement} and assignment. There is such quick assist in Eclipse.
+	 */
+	private void splitVariable() throws Exception {
+		AstEditor editor = m_javaInfo.getEditor();
+		// prepare current information
+		VariableDeclaration oldFragment = m_declaration;
+		VariableDeclarationStatement oldStatement = getDeclarationStatement();
+		// add new VariableDeclarationStatement before oldStatement
+		// we should create new variable because "m_variable" is place of _assignment_
+		{
+			int position = oldStatement.getStartPosition();
+			String source = "";
+			// add type
+			Type newType;
+			{
+				Type oldType = oldStatement.getType();
+				newType = editor.getParser().parseType(position, oldType);
+				source += editor.getSource(oldType) + " ";
+			}
+			// add variable
+			SimpleName newVariable;
+			{
+				String identifier = AstNodeUtils.getVariableName(m_variable);
+				newVariable =
+						editor.getParser().parseVariable(
+								position + source.length(),
+								identifier,
+								null,
+								AstNodeUtils.getTypeBinding(newType),
+								false,
+								Modifier.NONE);
+				source += identifier;
+			}
+			// create fragment
+			VariableDeclarationFragment newFragment;
+			{
+				newFragment = m_variable.getAST().newVariableDeclarationFragment();
+				newFragment.setName(newVariable);
+				AstNodeUtils.copySourceRange(newFragment, newVariable);
+			}
+			// create statement
+			VariableDeclarationStatement newStatement;
+			{
+				newStatement = m_variable.getAST().newVariableDeclarationStatement(newFragment);
+				newStatement.setType(newType);
+				AstNodeUtils.setSourceRange(newStatement, newType, newFragment, 1);
+				source += ";";
+			}
+			// modify source
+			{
+				String prefix = editor.getWhitespaceToLeft(position, false);
+				source += editor.getGeneration().getEndOfLine() + prefix;
+				editor.replaceSubstring(position, 0, source);
+			}
+			// add new statement to AST
+			{
+				List<Statement> statements = DomGenerics.statements((Block) oldStatement.getParent());
+				int index = statements.indexOf(oldStatement);
+				statements.add(index, newStatement);
+			}
+		}
+		// convert old declaration to assignment
+		replaceDeclarationWithAssignment(editor, oldFragment);
+		rememberDeclaration();
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/LocalUniqueVariableSupport.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/LocalUniqueVariableSupport.java
index d1da68ff6..21eb5945d 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/LocalUniqueVariableSupport.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/LocalUniqueVariableSupport.java
@@ -38,234 +38,234 @@
  * @coverage core.model.variable
  */
 public final class LocalUniqueVariableSupport extends LocalVariableSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public LocalUniqueVariableSupport(JavaInfo javaInfo) {
-    super(javaInfo);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public LocalUniqueVariableSupport(JavaInfo javaInfo) {
+		super(javaInfo);
+	}
 
-  public LocalUniqueVariableSupport(JavaInfo javaInfo, SimpleName variable) {
-    super(javaInfo, variable);
-  }
+	public LocalUniqueVariableSupport(JavaInfo javaInfo, SimpleName variable) {
+		super(javaInfo, variable);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    return "local-unique: " + getName();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		return "local-unique: " + getName();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Name
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void setName(String newName) throws Exception {
-    modifyName(newName);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Name
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void setName(String newName) throws Exception {
+		modifyName(newName);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Expressions
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getReferenceExpression(NodeTarget target) throws Exception {
-    assertJavaInfoCreatedAt(target);
-    if (isVisibleAtTarget(target)) {
-      return getName();
-    } else {
-      convertLocalToField();
-      return m_javaInfo.getVariableSupport().getReferenceExpression(target);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Expressions
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getReferenceExpression(NodeTarget target) throws Exception {
+		assertJavaInfoCreatedAt(target);
+		if (isVisibleAtTarget(target)) {
+			return getName();
+		} else {
+			convertLocalToField();
+			return m_javaInfo.getVariableSupport().getReferenceExpression(target);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Conversion
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void convertLocalToField() throws Exception {
-    AstEditor editor = m_javaInfo.getEditor();
-    // add new field and use its name
-    {
-      String fieldName = addUniqueField(isStaticContext(), m_declaration);
-      setName(fieldName);
-    }
-    // replace local variable declaration with assignment to field
-    {
-      VariableDeclaration declaration = m_declaration;
-      if (declaration.getInitializer() != null) {
-        replaceDeclarationWithAssignment(editor, declaration);
-      } else {
-        editor.removeStatement((Statement) declaration.getParent());
-      }
-    }
-    // use field variable support
-    m_javaInfo.setVariableSupport(new FieldUniqueVariableSupport(m_javaInfo, m_variable));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Conversion
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void convertLocalToField() throws Exception {
+		AstEditor editor = m_javaInfo.getEditor();
+		// add new field and use its name
+		{
+			String fieldName = addUniqueField(isStaticContext(), m_declaration);
+			setName(fieldName);
+		}
+		// replace local variable declaration with assignment to field
+		{
+			VariableDeclaration declaration = m_declaration;
+			if (declaration.getInitializer() != null) {
+				replaceDeclarationWithAssignment(editor, declaration);
+			} else {
+				editor.removeStatement((Statement) declaration.getParent());
+			}
+		}
+		// use field variable support
+		m_javaInfo.setVariableSupport(new FieldUniqueVariableSupport(m_javaInfo, m_variable));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Adding
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String add_getVariableStatementSource(StatementTarget associationTarget) throws Exception {
-    AstEditor editor = m_javaInfo.getEditor();
-    // prepare component class
-    String className = m_javaInfo.getDescription().getComponentClass().getName();
-    // prepare variable declaration statement
-    NodeTarget creationTarget = new NodeTarget(associationTarget);
-    String initializer = m_javaInfo.getCreationSupport().add_getSource(creationTarget);
-    String variableName =
-        editor.getUniqueVariableName(
-            associationTarget.getPosition(),
-            NamesManager.getName(m_javaInfo),
-            null);
-    initializer = StringUtils.replace(initializer, "%variable-name%", variableName);
-    String modifiers = prefDeclareFinal() ? "final " : "";
-    return modifiers + className + " " + variableName + " = " + initializer + ";";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Adding
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String add_getVariableStatementSource(StatementTarget associationTarget) throws Exception {
+		AstEditor editor = m_javaInfo.getEditor();
+		// prepare component class
+		String className = m_javaInfo.getDescription().getComponentClass().getName();
+		// prepare variable declaration statement
+		NodeTarget creationTarget = new NodeTarget(associationTarget);
+		String initializer = m_javaInfo.getCreationSupport().add_getSource(creationTarget);
+		String variableName =
+				editor.getUniqueVariableName(
+						associationTarget.getPosition(),
+						NamesManager.getName(m_javaInfo),
+						null);
+		initializer = StringUtils.replace(initializer, "%variable-name%", variableName);
+		String modifiers = prefDeclareFinal() ? "final " : "";
+		return modifiers + className + " " + variableName + " = " + initializer + ";";
+	}
 
-  @Override
-  public void add_setVariableStatement(Statement statement) throws Exception {
-    VariableDeclarationStatement variableDeclarationStatement =
-        (VariableDeclarationStatement) statement;
-    VariableDeclaration fragment =
-        (VariableDeclaration) variableDeclarationStatement.fragments().get(0);
-    add_setVariableAndInitializer(fragment.getName(), fragment.getInitializer());
-  }
+	@Override
+	public void add_setVariableStatement(Statement statement) throws Exception {
+		VariableDeclarationStatement variableDeclarationStatement =
+				(VariableDeclarationStatement) statement;
+		VariableDeclaration fragment =
+				(VariableDeclaration) variableDeclarationStatement.fragments().get(0);
+		add_setVariableAndInitializer(fragment.getName(), fragment.getInitializer());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Delete
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void deleteBefore() throws Exception {
-    // remove "initializer in declaration" from related nodes, so prevent declaration removing
-    {
-      Expression initializer = m_declaration.getInitializer();
-      m_javaInfo.getRelatedNodes().remove(initializer);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Delete
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void deleteBefore() throws Exception {
+		// remove "initializer in declaration" from related nodes, so prevent declaration removing
+		{
+			Expression initializer = m_declaration.getInitializer();
+			m_javaInfo.getRelatedNodes().remove(initializer);
+		}
+	}
 
-  @Override
-  public void deleteAfter() throws Exception {
-    if (m_javaInfo.isRoot()) {
-      return;
-    }
-    m_javaInfo.getEditor().removeVariableDeclaration(m_declaration);
-  }
+	@Override
+	public void deleteAfter() throws Exception {
+		if (m_javaInfo.isRoot()) {
+			return;
+		}
+		m_javaInfo.getEditor().removeVariableDeclaration(m_declaration);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Morphing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void setType(String newTypeName) throws Exception {
-    AstEditor editor = m_javaInfo.getEditor();
-    editor.replaceVariableType(m_declaration, newTypeName);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Morphing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void setType(String newTypeName) throws Exception {
+		AstEditor editor = m_javaInfo.getEditor();
+		editor.replaceVariableType(m_declaration, newTypeName);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Inlining
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if this {@link LocalUniqueVariableSupport} has only one reference, so
-   *         can be inlined.
-   */
-  public boolean canInline() {
-    List<Expression> references = Lists.newArrayList(getReferences());
-    references.remove(m_variable);
-    return references.size() == 1;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Inlining
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if this {@link LocalUniqueVariableSupport} has only one reference, so
+	 *         can be inlined.
+	 */
+	public boolean canInline() {
+		List<Expression> references = Lists.newArrayList(getReferences());
+		references.remove(m_variable);
+		return references.size() == 1;
+	}
 
-  /**
-   * Inlines this {@link LocalUniqueVariableSupport} into its single use.
-   *
-   * @throws IllegalStateException
-   *           if variable is used in more than one place.
-   */
-  public void inline() throws Exception {
-    AstEditor editor = m_javaInfo.getEditor();
-    // prepare single reference on component, that should be replaced with creation Expression
-    Expression reference;
-    {
-      List<Expression> references = Lists.newArrayList(getReferences());
-      references.remove(m_variable);
-      Preconditions.checkState(references.size() == 1, references);
-      reference = references.get(0);
-    }
-    // prepare "initializer"
-    Expression initializer = m_declaration.getInitializer();
-    AstEditor.replaceNode(initializer, initializer.getAST().newSimpleName("__wbp_tmp"));
-    // replace "reference" with "initializer"
-    replaceReferenceWithInitializer(reference, initializer);
-    // remove VariableDeclarationStatement
-    editor.removeStatement(getDeclarationStatement());
-    // use EmptyVariableSupport
-    m_javaInfo.setVariableSupport(new EmptyVariableSupport(m_javaInfo, initializer));
-  }
+	/**
+	 * Inlines this {@link LocalUniqueVariableSupport} into its single use.
+	 *
+	 * @throws IllegalStateException
+	 *           if variable is used in more than one place.
+	 */
+	public void inline() throws Exception {
+		AstEditor editor = m_javaInfo.getEditor();
+		// prepare single reference on component, that should be replaced with creation Expression
+		Expression reference;
+		{
+			List<Expression> references = Lists.newArrayList(getReferences());
+			references.remove(m_variable);
+			Preconditions.checkState(references.size() == 1, references);
+			reference = references.get(0);
+		}
+		// prepare "initializer"
+		Expression initializer = m_declaration.getInitializer();
+		AstEditor.replaceNode(initializer, initializer.getAST().newSimpleName("__wbp_tmp"));
+		// replace "reference" with "initializer"
+		replaceReferenceWithInitializer(reference, initializer);
+		// remove VariableDeclarationStatement
+		editor.removeStatement(getDeclarationStatement());
+		// use EmptyVariableSupport
+		m_javaInfo.setVariableSupport(new EmptyVariableSupport(m_javaInfo, initializer));
+	}
 
-  private void replaceReferenceWithInitializer(Expression reference, Expression initializer)
-      throws Exception {
-    AstEditor editor = m_javaInfo.getEditor();
-    // check if initializer should be wrapped with ParenthesizedExpression
-    if (reference.getParent() instanceof Expression) {
-      Expression parent = (Expression) reference.getParent();
-      int parentPrecedence = OperatorPrecedence.getExpressionPrecedence(parent);
-      int initializerPrecedence = OperatorPrecedence.getExpressionPrecedence(initializer);
-      if (parentPrecedence > initializerPrecedence) {
-        String parenthesizedSource = "(" + editor.getSource(initializer) + ")";
-        editor.replaceSubstring(
-            reference.getStartPosition(),
-            reference.getLength(),
-            parenthesizedSource);
-        // prepare ParenthesizedExpression
-        ParenthesizedExpression parenthesized = reference.getAST().newParenthesizedExpression();
-        parenthesized.setExpression(initializer);
-        parenthesized.setSourceRange(reference.getStartPosition(), 1 + initializer.getLength() + 1);
-        // replace "reference"
-        AstEditor.replaceNode(reference, parenthesized);
-        AstNodeUtils.moveNode(initializer, 1 + parenthesized.getStartPosition());
-        m_javaInfo.addRelatedNode(parenthesized);
-        return;
-      }
-    }
-    // simple case - just replace "reference" with "initializer"
-    editor.replaceSubstring(
-        reference.getStartPosition(),
-        reference.getLength(),
-        editor.getSource(initializer));
-    AstEditor.replaceNode(reference, initializer);
-    AstNodeUtils.moveNode(initializer, reference.getStartPosition());
-  }
+	private void replaceReferenceWithInitializer(Expression reference, Expression initializer)
+			throws Exception {
+		AstEditor editor = m_javaInfo.getEditor();
+		// check if initializer should be wrapped with ParenthesizedExpression
+		if (reference.getParent() instanceof Expression) {
+			Expression parent = (Expression) reference.getParent();
+			int parentPrecedence = OperatorPrecedence.getExpressionPrecedence(parent);
+			int initializerPrecedence = OperatorPrecedence.getExpressionPrecedence(initializer);
+			if (parentPrecedence > initializerPrecedence) {
+				String parenthesizedSource = "(" + editor.getSource(initializer) + ")";
+				editor.replaceSubstring(
+						reference.getStartPosition(),
+						reference.getLength(),
+						parenthesizedSource);
+				// prepare ParenthesizedExpression
+				ParenthesizedExpression parenthesized = reference.getAST().newParenthesizedExpression();
+				parenthesized.setExpression(initializer);
+				parenthesized.setSourceRange(reference.getStartPosition(), 1 + initializer.getLength() + 1);
+				// replace "reference"
+				AstEditor.replaceNode(reference, parenthesized);
+				AstNodeUtils.moveNode(initializer, 1 + parenthesized.getStartPosition());
+				m_javaInfo.addRelatedNode(parenthesized);
+				return;
+			}
+		}
+		// simple case - just replace "reference" with "initializer"
+		editor.replaceSubstring(
+				reference.getStartPosition(),
+				reference.getLength(),
+				editor.getSource(initializer));
+		AstEditor.replaceNode(reference, initializer);
+		AstNodeUtils.moveNode(initializer, reference.getStartPosition());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Preferences
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final String BASE = "variable.localUnique.";
-  public static final String P_DECLARE_FINAL = BASE + "final";
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Preferences
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final String BASE = "variable.localUnique.";
+	public static final String P_DECLARE_FINAL = BASE + "final";
 
-  /**
-   * @return <code>true</code> if local variable should be declared "final".
-   */
-  private boolean prefDeclareFinal() {
-    return getPreferences().getBoolean(P_DECLARE_FINAL);
-  }
+	/**
+	 * @return <code>true</code> if local variable should be declared "final".
+	 */
+	private boolean prefDeclareFinal() {
+		return getPreferences().getBoolean(P_DECLARE_FINAL);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/LocalVariableSupport.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/LocalVariableSupport.java
index d0a40bf8f..38bba3315 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/LocalVariableSupport.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/LocalVariableSupport.java
@@ -42,187 +42,187 @@
  * @coverage core.model.variable
  */
 public abstract class LocalVariableSupport extends AbstractSimpleVariableSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public LocalVariableSupport(JavaInfo javaInfo) {
-    super(javaInfo);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public LocalVariableSupport(JavaInfo javaInfo) {
+		super(javaInfo);
+	}
 
-  public LocalVariableSupport(JavaInfo javaInfo, SimpleName variable) {
-    super(javaInfo, variable);
-  }
+	public LocalVariableSupport(JavaInfo javaInfo, SimpleName variable) {
+		super(javaInfo, variable);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final boolean isValidStatementForChild(Statement statement) {
-    StatementTarget statementTarget = new StatementTarget(statement, true);
-    NodeTarget nodeTarget = new NodeTarget(statementTarget);
-    return isVisibleAtTarget(nodeTarget);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final boolean isValidStatementForChild(Statement statement) {
+		StatementTarget statementTarget = new StatementTarget(statement, true);
+		NodeTarget nodeTarget = new NodeTarget(statementTarget);
+		return isVisibleAtTarget(nodeTarget);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Conversion
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final boolean canConvertLocalToField() {
-    // right now we support only one variable declaration
-    return getDeclarationStatement().fragments().size() == 1;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Conversion
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final boolean canConvertLocalToField() {
+		// right now we support only one variable declaration
+		return getDeclarationStatement().fragments().size() == 1;
+	}
 
-  @Override
-  public final boolean canConvertFieldToLocal() {
-    return false;
-  }
+	@Override
+	public final boolean canConvertFieldToLocal() {
+		return false;
+	}
 
-  @Override
-  public final void convertFieldToLocal() throws Exception {
-    throw new IllegalStateException();
-  }
+	@Override
+	public final void convertFieldToLocal() throws Exception {
+		throw new IllegalStateException();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Moving
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Ensures that variable has name (existing or re-generated) such that it does not conflict with
-   * other variables related with given position (visible or can be shadowed).
-   *
-   * @param newPosition
-   *          the position where this variable will be declared.
-   * @param statementsToMove
-   *          the {@link Statement}'s that will be moved.
-   */
-  void ensureUniqueVariableDuringMove(int newPosition, Statement[] statementsToMove)
-      throws Exception {
-    // prepare potentially conflicting declarations
-    List<VariableDeclaration> existingDeclarations;
-    {
-      existingDeclarations = Lists.newArrayList();
-      // prepare state
-      AstEditor editor = m_javaInfo.getEditor();
-      CompilationUnit unit = editor.getAstUnit();
-      VariableDeclaration declaration = m_declaration;
-      // in any case add visible variables
-      existingDeclarations.addAll(AstNodeUtils.getVariableDeclarationsVisibleAt(unit, newPosition));
-      // in any case add shadow variables in *old* position
-      existingDeclarations.addAll(AstNodeUtils.getVariableDeclarationsAfter(
-          unit,
-          declaration.getStartPosition()));
-      // if moved declaration is not in Block, then it can shadow variables below
-      {
-        boolean isInBlock = false;
-        for (Statement statement : statementsToMove) {
-          isInBlock |= statement instanceof Block && AstNodeUtils.contains(statement, declaration);
-        }
-        if (!isInBlock) {
-          existingDeclarations.addAll(AstNodeUtils.getVariableDeclarationsAfter(unit, newPosition));
-        }
-      }
-      // exclude this variable
-      existingDeclarations.remove(declaration);
-    }
-    // do generate unique name
-    {
-      String oldName = getName();
-      String newName = AstEditor.getUniqueVariableName(existingDeclarations, oldName);
-      if (!oldName.equals(newName)) {
-        setName(newName);
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Moving
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Ensures that variable has name (existing or re-generated) such that it does not conflict with
+	 * other variables related with given position (visible or can be shadowed).
+	 *
+	 * @param newPosition
+	 *          the position where this variable will be declared.
+	 * @param statementsToMove
+	 *          the {@link Statement}'s that will be moved.
+	 */
+	void ensureUniqueVariableDuringMove(int newPosition, Statement[] statementsToMove)
+			throws Exception {
+		// prepare potentially conflicting declarations
+		List<VariableDeclaration> existingDeclarations;
+		{
+			existingDeclarations = Lists.newArrayList();
+			// prepare state
+			AstEditor editor = m_javaInfo.getEditor();
+			CompilationUnit unit = editor.getAstUnit();
+			VariableDeclaration declaration = m_declaration;
+			// in any case add visible variables
+			existingDeclarations.addAll(AstNodeUtils.getVariableDeclarationsVisibleAt(unit, newPosition));
+			// in any case add shadow variables in *old* position
+			existingDeclarations.addAll(AstNodeUtils.getVariableDeclarationsAfter(
+					unit,
+					declaration.getStartPosition()));
+			// if moved declaration is not in Block, then it can shadow variables below
+			{
+				boolean isInBlock = false;
+				for (Statement statement : statementsToMove) {
+					isInBlock |= statement instanceof Block && AstNodeUtils.contains(statement, declaration);
+				}
+				if (!isInBlock) {
+					existingDeclarations.addAll(AstNodeUtils.getVariableDeclarationsAfter(unit, newPosition));
+				}
+			}
+			// exclude this variable
+			existingDeclarations.remove(declaration);
+		}
+		// do generate unique name
+		{
+			String oldName = getName();
+			String newName = AstEditor.getUniqueVariableName(existingDeclarations, oldName);
+			if (!oldName.equals(newName)) {
+				setName(newName);
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link VariableDeclarationStatement} that declares this variable.
-   */
-  protected final VariableDeclarationStatement getDeclarationStatement() {
-    return (VariableDeclarationStatement) m_declaration.getParent();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link VariableDeclarationStatement} that declares this variable.
+	 */
+	protected final VariableDeclarationStatement getDeclarationStatement() {
+		return (VariableDeclarationStatement) m_declaration.getParent();
+	}
 
-  /**
-   * Adds new {@link FieldDeclaration} with name based on the name of this variable.
-   *
-   * @return the identifier of added field
-   */
-  protected final String addUniqueField(boolean isStatic, VariableDeclaration excludedVariable)
-      throws Exception {
-    AstEditor editor = m_javaInfo.getEditor();
-    // prepare source of new field declaration
-    String fieldName = m_utils.getUniqueFieldName(getName(), excludedVariable);
-    String fieldSource;
-    {
-      Type type = getDeclarationStatement().getType();
-      // prepare modifiers
-      String modifiers = isStatic ? "private static " : "private ";
-      // prepare source
-      fieldSource = modifiers + editor.getSource(type) + " " + fieldName + ";";
-    }
-    // add new field declaration
-    addField(fieldSource);
-    // return field name
-    return fieldName;
-  }
+	/**
+	 * Adds new {@link FieldDeclaration} with name based on the name of this variable.
+	 *
+	 * @return the identifier of added field
+	 */
+	protected final String addUniqueField(boolean isStatic, VariableDeclaration excludedVariable)
+			throws Exception {
+		AstEditor editor = m_javaInfo.getEditor();
+		// prepare source of new field declaration
+		String fieldName = m_utils.getUniqueFieldName(getName(), excludedVariable);
+		String fieldSource;
+		{
+			Type type = getDeclarationStatement().getType();
+			// prepare modifiers
+			String modifiers = isStatic ? "private static " : "private ";
+			// prepare source
+			fieldSource = modifiers + editor.getSource(type) + " " + fieldName + ";";
+		}
+		// add new field declaration
+		addField(fieldSource);
+		// return field name
+		return fieldName;
+	}
 
-  /**
-   * Replaces given {@link VariableDeclarationStatement} with {@link ExpressionStatement} with
-   * {@link Assignment} to the same variable.
-   */
-  protected final void replaceDeclarationWithAssignment(AstEditor editor,
-      VariableDeclaration oldFragment) throws Exception {
-    VariableDeclarationStatement oldStatement =
-        (VariableDeclarationStatement) oldFragment.getParent();
-    Assert.isTrue(oldStatement.fragments().size() == 1);
-    int oldStart = oldStatement.getStartPosition();
-    // prepare ExpressionStatement with assignment of existing expression to existing variable
-    ExpressionStatement newStatement;
-    {
-      AST ast = m_variable.getAST();
-      // prepare assignment
-      Assignment newAssignment;
-      {
-        newAssignment = ast.newAssignment();
-        // reuse variable
-        {
-          oldFragment.setName(ast.newSimpleName("__foo"));
-          newAssignment.setLeftHandSide(m_variable);
-        }
-        // reuse initializer
-        {
-          Expression initializer = oldFragment.getInitializer();
-          oldFragment.setInitializer(null);
-          newAssignment.setRightHandSide(initializer);
-        }
-        // source range
-        AstNodeUtils.setSourceRange(
-            newAssignment,
-            newAssignment.getLeftHandSide(),
-            newAssignment.getRightHandSide());
-      }
-      // prepare ExpressionStatement
-      newStatement = ast.newExpressionStatement(newAssignment);
-      AstNodeUtils.setSourceRange(newStatement, newAssignment, 1);
-    }
-    // replace old expression in AST
-    {
-      List<Statement> oldStatements = DomGenerics.statements((Block) oldStatement.getParent());
-      int index = oldStatements.indexOf(oldStatement);
-      oldStatements.set(index, newStatement);
-    }
-    // patch source to make it same as changed AST
-    editor.replaceSubstring(oldStart, m_variable.getStartPosition() - oldStart, "");
-  }
+	/**
+	 * Replaces given {@link VariableDeclarationStatement} with {@link ExpressionStatement} with
+	 * {@link Assignment} to the same variable.
+	 */
+	protected final void replaceDeclarationWithAssignment(AstEditor editor,
+			VariableDeclaration oldFragment) throws Exception {
+		VariableDeclarationStatement oldStatement =
+				(VariableDeclarationStatement) oldFragment.getParent();
+		Assert.isTrue(oldStatement.fragments().size() == 1);
+		int oldStart = oldStatement.getStartPosition();
+		// prepare ExpressionStatement with assignment of existing expression to existing variable
+		ExpressionStatement newStatement;
+		{
+			AST ast = m_variable.getAST();
+			// prepare assignment
+			Assignment newAssignment;
+			{
+				newAssignment = ast.newAssignment();
+				// reuse variable
+				{
+					oldFragment.setName(ast.newSimpleName("__foo"));
+					newAssignment.setLeftHandSide(m_variable);
+				}
+				// reuse initializer
+				{
+					Expression initializer = oldFragment.getInitializer();
+					oldFragment.setInitializer(null);
+					newAssignment.setRightHandSide(initializer);
+				}
+				// source range
+				AstNodeUtils.setSourceRange(
+						newAssignment,
+						newAssignment.getLeftHandSide(),
+						newAssignment.getRightHandSide());
+			}
+			// prepare ExpressionStatement
+			newStatement = ast.newExpressionStatement(newAssignment);
+			AstNodeUtils.setSourceRange(newStatement, newAssignment, 1);
+		}
+		// replace old expression in AST
+		{
+			List<Statement> oldStatements = DomGenerics.statements((Block) oldStatement.getParent());
+			int index = oldStatements.indexOf(oldStatement);
+			oldStatements.set(index, newStatement);
+		}
+		// patch source to make it same as changed AST
+		editor.replaceSubstring(oldStart, m_variable.getStartPosition() - oldStart, "");
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/MethodParameterVariableSupport.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/MethodParameterVariableSupport.java
index 4c921c35c..eff05346d 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/MethodParameterVariableSupport.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/MethodParameterVariableSupport.java
@@ -36,146 +36,146 @@
  * @coverage core.model.variable
  */
 public final class MethodParameterVariableSupport extends AbstractNamedVariableSupport {
-  private final SingleVariableDeclaration m_parameter;
-  private final MethodDeclaration m_method;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public MethodParameterVariableSupport(JavaInfo javaInfo, SingleVariableDeclaration parameter) {
-    super(javaInfo, parameter.getName());
-    m_parameter = parameter;
-    m_method = (MethodDeclaration) m_parameter.getParent();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    return m_parameter.getName().getIdentifier();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getTitle() throws Exception {
-    return m_parameter.getName().getIdentifier()
-        + " in "
-        + m_method.getName().getIdentifier()
-        + "(...)";
-  }
-
-  @Override
-  public boolean isJavaInfo(ASTNode node) {
-    if (node instanceof SimpleName && AstNodeUtils.isVariable(node)) {
-      return ExecutionFlowUtils.getLastAssignment(new ExecutionFlowDescription(m_method), node) == m_parameter;
-    }
-    return false;
-  }
-
-  @Override
-  public StatementTarget getStatementTarget() throws Exception {
-    // if first statement is SuperConstructorInvocation, then target = after super()
-    {
-      List<Statement> statements = DomGenerics.statements(m_method.getBody());
-      if (!statements.isEmpty() && statements.get(0) instanceof SuperConstructorInvocation) {
-        return new StatementTarget(statements.get(0), false);
-      }
-    }
-    // target = in beginning of method
-    return new StatementTarget(m_method, true);
-  }
-
-  @Override
-  public boolean isValidStatementForChild(Statement statement) {
-    return AstNodeUtils.getEnclosingMethod(statement) == m_method;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Name
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void setName(String newName) throws Exception {
-    modifyName(newName);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Expressions
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean hasExpression(NodeTarget target) {
-    return getReferenceExpression0(target) != null;
-  }
-
-  @Override
-  public String getReferenceExpression(NodeTarget target) throws Exception {
-    String expression = getReferenceExpression0(target);
-    if (expression != null) {
-      return expression;
-    }
-    throw new IllegalArgumentException(MessageFormat.format(
-        "Can not access {0} of {1} at target {2}.",
-        m_parameter,
-        m_method,
-        target));
-  }
-
-  private String getReferenceExpression0(NodeTarget target) {
-    StatementTarget statementTarget = target.getStatementTarget();
-    if (statementTarget != null) {
-      ASTNode targetNode = statementTarget.getNode();
-      // directly in declaring method
-      if (AstNodeUtils.contains(m_method, targetNode)) {
-        return getName();
-      }
-      // in other method
-      {
-        MethodDeclaration targetMethod = AstNodeUtils.getEnclosingMethod(targetNode);
-        for (SingleVariableDeclaration parameter : DomGenerics.parameters(targetMethod)) {
-          SimpleName parameterName = parameter.getName();
-          if (m_javaInfo.isRepresentedBy(parameterName)) {
-            return parameterName.getIdentifier();
-          }
-        }
-      }
-    }
-    return null;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Conversion
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean canConvertLocalToField() {
-    return false;
-  }
-
-  @Override
-  public void convertLocalToField() throws Exception {
-    throw new IllegalStateException();
-  }
-
-  @Override
-  public boolean canConvertFieldToLocal() {
-    return false;
-  }
-
-  @Override
-  public void convertFieldToLocal() throws Exception {
-    throw new IllegalStateException();
-  }
+	private final SingleVariableDeclaration m_parameter;
+	private final MethodDeclaration m_method;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public MethodParameterVariableSupport(JavaInfo javaInfo, SingleVariableDeclaration parameter) {
+		super(javaInfo, parameter.getName());
+		m_parameter = parameter;
+		m_method = (MethodDeclaration) m_parameter.getParent();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		return m_parameter.getName().getIdentifier();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getTitle() throws Exception {
+		return m_parameter.getName().getIdentifier()
+				+ " in "
+				+ m_method.getName().getIdentifier()
+				+ "(...)";
+	}
+
+	@Override
+	public boolean isJavaInfo(ASTNode node) {
+		if (node instanceof SimpleName && AstNodeUtils.isVariable(node)) {
+			return ExecutionFlowUtils.getLastAssignment(new ExecutionFlowDescription(m_method), node) == m_parameter;
+		}
+		return false;
+	}
+
+	@Override
+	public StatementTarget getStatementTarget() throws Exception {
+		// if first statement is SuperConstructorInvocation, then target = after super()
+		{
+			List<Statement> statements = DomGenerics.statements(m_method.getBody());
+			if (!statements.isEmpty() && statements.get(0) instanceof SuperConstructorInvocation) {
+				return new StatementTarget(statements.get(0), false);
+			}
+		}
+		// target = in beginning of method
+		return new StatementTarget(m_method, true);
+	}
+
+	@Override
+	public boolean isValidStatementForChild(Statement statement) {
+		return AstNodeUtils.getEnclosingMethod(statement) == m_method;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Name
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void setName(String newName) throws Exception {
+		modifyName(newName);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Expressions
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean hasExpression(NodeTarget target) {
+		return getReferenceExpression0(target) != null;
+	}
+
+	@Override
+	public String getReferenceExpression(NodeTarget target) throws Exception {
+		String expression = getReferenceExpression0(target);
+		if (expression != null) {
+			return expression;
+		}
+		throw new IllegalArgumentException(MessageFormat.format(
+				"Can not access {0} of {1} at target {2}.",
+				m_parameter,
+				m_method,
+				target));
+	}
+
+	private String getReferenceExpression0(NodeTarget target) {
+		StatementTarget statementTarget = target.getStatementTarget();
+		if (statementTarget != null) {
+			ASTNode targetNode = statementTarget.getNode();
+			// directly in declaring method
+			if (AstNodeUtils.contains(m_method, targetNode)) {
+				return getName();
+			}
+			// in other method
+			{
+				MethodDeclaration targetMethod = AstNodeUtils.getEnclosingMethod(targetNode);
+				for (SingleVariableDeclaration parameter : DomGenerics.parameters(targetMethod)) {
+					SimpleName parameterName = parameter.getName();
+					if (m_javaInfo.isRepresentedBy(parameterName)) {
+						return parameterName.getIdentifier();
+					}
+				}
+			}
+		}
+		return null;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Conversion
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean canConvertLocalToField() {
+		return false;
+	}
+
+	@Override
+	public void convertLocalToField() throws Exception {
+		throw new IllegalStateException();
+	}
+
+	@Override
+	public boolean canConvertFieldToLocal() {
+		return false;
+	}
+
+	@Override
+	public void convertFieldToLocal() throws Exception {
+		throw new IllegalStateException();
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/NamesManager.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/NamesManager.java
index 4553d050c..45262699c 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/NamesManager.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/NamesManager.java
@@ -48,535 +48,535 @@
  * @coverage core.model.variable
  */
 public final class NamesManager {
-  public static final String NAME_PARAMETER = "variable.name";
-  public static final String ACRONYM_PARAMETER = "variable.acronym";
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private NamesManager() {
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Auto-rename of "text" property change
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets new name for given {@link AbstractSimpleVariableSupport} according new value of "text"
-   * property and mode/template.
-   */
-  public static void renameForText(AbstractSimpleVariableSupport variableSupport,
-      GenericProperty property,
-      String text) throws Exception {
-    JavaInfo javaInfo = variableSupport.getJavaInfo();
-    IPreferenceStore preferences = javaInfo.getDescription().getToolkit().getPreferences();
-    // check mode
-    {
-      int renameMode = preferences.getInt(IPreferenceConstants.P_VARIABLE_TEXT_MODE);
-      // never rename
-      if (renameMode == IPreferenceConstants.V_VARIABLE_TEXT_MODE_NEVER) {
-        return;
-      }
-      // rename default
-      if (renameMode == IPreferenceConstants.V_VARIABLE_TEXT_MODE_DEFAULT
-          && !isDefaultName(javaInfo, variableSupport.getName())) {
-        return;
-      }
-    }
-    // prepare initial name
-    String newName = getNameForText(javaInfo, text);
-    if (newName == null) {
-      return;
-    }
-    // decorate in variable type specific way
-    newName = variableSupport.decorateTextName(newName);
-    // generate unique name
-    newName = javaInfo.getEditor().getUniqueVariableName(-1, newName, null);
-    // do rename, if different name
-    if (!variableSupport.getName().equals(newName)) {
-      variableSupport.setName(newName);
-    }
-  }
-
-  /**
-   * @return <code>true</code> if given variable is is default one for component.
-   */
-  private static boolean isDefaultName(JavaInfo javaInfo, String name) {
-    String baseName = StringUtils.substringBefore(name, "_").toLowerCase();
-    return getName(javaInfo).equalsIgnoreCase(baseName);
-  }
-
-  /**
-   * @return the basic name of variable (without prefix/suffix or uniqueness test) for given
-   *         component and text, or <code>null</code> if no valid name can be generated.
-   */
-  private static String getNameForText(JavaInfo javaInfo, String text) {
-    ComponentDescription description = javaInfo.getDescription();
-    IPreferenceStore preferences = description.getToolkit().getPreferences();
-    // prepare component class name for variable
-    String classNameForVariable;
-    {
-      String qualifiedClassName = ReflectionUtils.getCanonicalName(description.getComponentClass());
-      String shortClassName = CodeUtils.getShortClass(qualifiedClassName);
-      classNameForVariable = StringUtilities.stripLeadingUppercaseChars(shortClassName, 1);
-    }
-    // prepare "text" part of template
-    String textPart;
-    {
-      textPart = text.toLowerCase();
-      textPart = WordUtils.capitalize(textPart);
-      // remove HTML tags
-      textPart = StringUtilities.stripHtml(textPart);
-      // get first "wordsLimit" words to prevent too long identifiers
-      {
-        int wordsLimit = preferences.getInt(IPreferenceConstants.P_VARIABLE_TEXT_WORDS_LIMIT);
-        if (wordsLimit > 0) {
-          String[] strings = StringUtils.split(textPart);
-          if (strings.length > wordsLimit) {
-            textPart = "";
-            for (int i = 0; i < wordsLimit; i++) {
-              textPart += strings[i];
-            }
-          }
-        }
-      }
-      // remove invalid characters
-      textPart = StringUtilities.removeNonLatinCharacters(textPart);
-      // is there any remaining symbol? :)
-      if (textPart.length() == 0) {
-        return null;
-      }
-    }
-    // use template
-    String name;
-    {
-      Map<String, String> valueMap = Maps.newTreeMap();
-      {
-        valueMap.put("class_name", classNameForVariable);
-        valueMap.put("text", textPart);
-        valueMap.put("default_name", getName(javaInfo));
-        valueMap.put("class_acronym", getAcronym(javaInfo));
-      }
-      // use template
-      String template = preferences.getString(IPreferenceConstants.P_VARIABLE_TEXT_TEMPLATE);
-      name = StrSubstitutor.replace(template, valueMap);
-    }
-    // final modifications
-    name = StringUtils.uncapitalize(name);
-    return name;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Validation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>null</code> if given template is valid, or some error message if no. For example
-   *         invalid template may attempt to use unsupported variables (or in wrong case).
-   */
-  public static String validate(String template) {
-    // prepare empty variables
-    Map<String, String> valueMap = Maps.newTreeMap();
-    {
-      valueMap.put("class_name", "");
-      valueMap.put("text", "");
-      valueMap.put("default_name", "");
-      valueMap.put("class_acronym", "");
-    }
-    // use template
-    String evaluated = StrSubstitutor.replace(template, valueMap);
-    if (evaluated.indexOf("$") != -1) {
-      return evaluated;
-    }
-    return null;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Name
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the base variable name for given {@link JavaInfo}.
-   */
-  public static String getName(JavaInfo javaInfo) {
-    ComponentDescription description = javaInfo.getDescription();
-    // check type specific information
-    {
-      ComponentNameDescription nameDescription = getNameDescription(description);
-      if (nameDescription != null) {
-        return nameDescription.getName();
-      }
-    }
-    // check component parameter
-    {
-      String name = JavaInfoUtils.getParameter(javaInfo, NAME_PARAMETER);
-      if (!StringUtils.isEmpty(name)) {
-        return name;
-      }
-    }
-    // use default name
-    {
-      String qualifiedClassName = ReflectionUtils.getCanonicalName(description.getComponentClass());
-      return getDefaultName(qualifiedClassName);
-    }
-  }
-
-  /**
-   * @return the default base variable name for given component class.
-   */
-  public static String getDefaultName(String qualifiedClassName) {
-    String name = CodeUtils.getShortClass(qualifiedClassName);
-    // check if class name has only upper case characters
-    {
-      boolean onlyUpper = true;
-      for (int i = 0; i < name.length(); i++) {
-        onlyUpper &= Character.isUpperCase(name.charAt(i));
-      }
-      if (onlyUpper) {
-        return name.toLowerCase();
-      }
-    }
-    // check if class name starts from lower case character
-    if (Character.isLowerCase(name.charAt(0))) {
-      return name + '_';
-    }
-    // remove all upper case characters from beginning except last one (most right from beginning)
-    {
-      int index = 0;
-      {
-        int maxIndex = name.length() - 1;
-        while (index < maxIndex && Character.isUpperCase(name.charAt(index + 1))) {
-          index++;
-        }
-      }
-      name = name.substring(index);
-    }
-    //
-    return StringUtils.uncapitalize(name);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Acronym
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the acronym for given {@link JavaInfo}.
-   * @see #getDefaultAcronym(String) for examples of default acronyms
-   */
-  public static String getAcronym(JavaInfo javaInfo) {
-    ComponentDescription description = javaInfo.getDescription();
-    // check type specific information
-    {
-      ComponentNameDescription nameDescription = getNameDescription(description);
-      if (nameDescription != null) {
-        return nameDescription.getAcronym();
-      }
-    }
-    // check component parameter
-    {
-      String acronym = JavaInfoUtils.getParameter(javaInfo, ACRONYM_PARAMETER);
-      if (!StringUtils.isEmpty(acronym)) {
-        return acronym;
-      }
-    }
-    // use default acronym
-    {
-      String qualifiedClassName = ReflectionUtils.getCanonicalName(description.getComponentClass());
-      return getDefaultAcronym(qualifiedClassName);
-    }
-  }
-
-  /**
-   * @return the default acronym of the given component class.
-   *
-   * <pre>
+	public static final String NAME_PARAMETER = "variable.name";
+	public static final String ACRONYM_PARAMETER = "variable.acronym";
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private NamesManager() {
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Auto-rename of "text" property change
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets new name for given {@link AbstractSimpleVariableSupport} according new value of "text"
+	 * property and mode/template.
+	 */
+	public static void renameForText(AbstractSimpleVariableSupport variableSupport,
+			GenericProperty property,
+			String text) throws Exception {
+		JavaInfo javaInfo = variableSupport.getJavaInfo();
+		IPreferenceStore preferences = javaInfo.getDescription().getToolkit().getPreferences();
+		// check mode
+		{
+			int renameMode = preferences.getInt(IPreferenceConstants.P_VARIABLE_TEXT_MODE);
+			// never rename
+			if (renameMode == IPreferenceConstants.V_VARIABLE_TEXT_MODE_NEVER) {
+				return;
+			}
+			// rename default
+			if (renameMode == IPreferenceConstants.V_VARIABLE_TEXT_MODE_DEFAULT
+					&& !isDefaultName(javaInfo, variableSupport.getName())) {
+				return;
+			}
+		}
+		// prepare initial name
+		String newName = getNameForText(javaInfo, text);
+		if (newName == null) {
+			return;
+		}
+		// decorate in variable type specific way
+		newName = variableSupport.decorateTextName(newName);
+		// generate unique name
+		newName = javaInfo.getEditor().getUniqueVariableName(-1, newName, null);
+		// do rename, if different name
+		if (!variableSupport.getName().equals(newName)) {
+			variableSupport.setName(newName);
+		}
+	}
+
+	/**
+	 * @return <code>true</code> if given variable is is default one for component.
+	 */
+	private static boolean isDefaultName(JavaInfo javaInfo, String name) {
+		String baseName = StringUtils.substringBefore(name, "_").toLowerCase();
+		return getName(javaInfo).equalsIgnoreCase(baseName);
+	}
+
+	/**
+	 * @return the basic name of variable (without prefix/suffix or uniqueness test) for given
+	 *         component and text, or <code>null</code> if no valid name can be generated.
+	 */
+	private static String getNameForText(JavaInfo javaInfo, String text) {
+		ComponentDescription description = javaInfo.getDescription();
+		IPreferenceStore preferences = description.getToolkit().getPreferences();
+		// prepare component class name for variable
+		String classNameForVariable;
+		{
+			String qualifiedClassName = ReflectionUtils.getCanonicalName(description.getComponentClass());
+			String shortClassName = CodeUtils.getShortClass(qualifiedClassName);
+			classNameForVariable = StringUtilities.stripLeadingUppercaseChars(shortClassName, 1);
+		}
+		// prepare "text" part of template
+		String textPart;
+		{
+			textPart = text.toLowerCase();
+			textPart = WordUtils.capitalize(textPart);
+			// remove HTML tags
+			textPart = StringUtilities.stripHtml(textPart);
+			// get first "wordsLimit" words to prevent too long identifiers
+			{
+				int wordsLimit = preferences.getInt(IPreferenceConstants.P_VARIABLE_TEXT_WORDS_LIMIT);
+				if (wordsLimit > 0) {
+					String[] strings = StringUtils.split(textPart);
+					if (strings.length > wordsLimit) {
+						textPart = "";
+						for (int i = 0; i < wordsLimit; i++) {
+							textPart += strings[i];
+						}
+					}
+				}
+			}
+			// remove invalid characters
+			textPart = StringUtilities.removeNonLatinCharacters(textPart);
+			// is there any remaining symbol? :)
+			if (textPart.length() == 0) {
+				return null;
+			}
+		}
+		// use template
+		String name;
+		{
+			Map<String, String> valueMap = Maps.newTreeMap();
+			{
+				valueMap.put("class_name", classNameForVariable);
+				valueMap.put("text", textPart);
+				valueMap.put("default_name", getName(javaInfo));
+				valueMap.put("class_acronym", getAcronym(javaInfo));
+			}
+			// use template
+			String template = preferences.getString(IPreferenceConstants.P_VARIABLE_TEXT_TEMPLATE);
+			name = StrSubstitutor.replace(template, valueMap);
+		}
+		// final modifications
+		name = StringUtils.uncapitalize(name);
+		return name;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Validation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>null</code> if given template is valid, or some error message if no. For example
+	 *         invalid template may attempt to use unsupported variables (or in wrong case).
+	 */
+	public static String validate(String template) {
+		// prepare empty variables
+		Map<String, String> valueMap = Maps.newTreeMap();
+		{
+			valueMap.put("class_name", "");
+			valueMap.put("text", "");
+			valueMap.put("default_name", "");
+			valueMap.put("class_acronym", "");
+		}
+		// use template
+		String evaluated = StrSubstitutor.replace(template, valueMap);
+		if (evaluated.indexOf("$") != -1) {
+			return evaluated;
+		}
+		return null;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Name
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the base variable name for given {@link JavaInfo}.
+	 */
+	public static String getName(JavaInfo javaInfo) {
+		ComponentDescription description = javaInfo.getDescription();
+		// check type specific information
+		{
+			ComponentNameDescription nameDescription = getNameDescription(description);
+			if (nameDescription != null) {
+				return nameDescription.getName();
+			}
+		}
+		// check component parameter
+		{
+			String name = JavaInfoUtils.getParameter(javaInfo, NAME_PARAMETER);
+			if (!StringUtils.isEmpty(name)) {
+				return name;
+			}
+		}
+		// use default name
+		{
+			String qualifiedClassName = ReflectionUtils.getCanonicalName(description.getComponentClass());
+			return getDefaultName(qualifiedClassName);
+		}
+	}
+
+	/**
+	 * @return the default base variable name for given component class.
+	 */
+	public static String getDefaultName(String qualifiedClassName) {
+		String name = CodeUtils.getShortClass(qualifiedClassName);
+		// check if class name has only upper case characters
+		{
+			boolean onlyUpper = true;
+			for (int i = 0; i < name.length(); i++) {
+				onlyUpper &= Character.isUpperCase(name.charAt(i));
+			}
+			if (onlyUpper) {
+				return name.toLowerCase();
+			}
+		}
+		// check if class name starts from lower case character
+		if (Character.isLowerCase(name.charAt(0))) {
+			return name + '_';
+		}
+		// remove all upper case characters from beginning except last one (most right from beginning)
+		{
+			int index = 0;
+			{
+				int maxIndex = name.length() - 1;
+				while (index < maxIndex && Character.isUpperCase(name.charAt(index + 1))) {
+					index++;
+				}
+			}
+			name = name.substring(index);
+		}
+		//
+		return StringUtils.uncapitalize(name);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Acronym
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the acronym for given {@link JavaInfo}.
+	 * @see #getDefaultAcronym(String) for examples of default acronyms
+	 */
+	public static String getAcronym(JavaInfo javaInfo) {
+		ComponentDescription description = javaInfo.getDescription();
+		// check type specific information
+		{
+			ComponentNameDescription nameDescription = getNameDescription(description);
+			if (nameDescription != null) {
+				return nameDescription.getAcronym();
+			}
+		}
+		// check component parameter
+		{
+			String acronym = JavaInfoUtils.getParameter(javaInfo, ACRONYM_PARAMETER);
+			if (!StringUtils.isEmpty(acronym)) {
+				return acronym;
+			}
+		}
+		// use default acronym
+		{
+			String qualifiedClassName = ReflectionUtils.getCanonicalName(description.getComponentClass());
+			return getDefaultAcronym(qualifiedClassName);
+		}
+	}
+
+	/**
+	 * @return the default acronym of the given component class.
+	 *
+	 * <pre>
 	 * org.eclipse.swt.widgets.Button    = btn
 	 * javax.swing.JButton               = btn
 	 * org.eclipse.swt.custom.StyledText = stldtxt
 	 * </pre>
-   */
-  private static String getDefaultAcronym(String qualifiedClassName) {
-    String shortClassName = CodeUtils.getShortClass(qualifiedClassName);
-    String acronym = StringUtilities.stripLeadingUppercaseChars(shortClassName, 1).toLowerCase();
-    // remove vowels
-    acronym = StringUtils.replaceChars(acronym, "aeiouy", null);
-    // remove sequential duplicate symbols
-    acronym = StringUtilities.removeDuplicateCharacters(acronym);
-    // check final result
-    if (acronym.length() == 0) {
-      return shortClassName;
-    } else {
-      return acronym;
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Variable
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if {@link FieldUniqueVariableDescription} should be used instead of
-   *         (and only of) {@link LocalUniqueVariableDescription}.
-   */
-  public static boolean shouldUseFieldInsteadOfLocal(ComponentDescription description) {
-    // check type specific information
-    {
-      ComponentNameDescription nameDescription = getNameDescription(description);
-      if (nameDescription != null) {
-        return nameDescription.isAsField();
-      }
-    }
-    // no specific information
-    return false;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Type specific names
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * The id of {@link ComponentNameDescription} children in {@link IMemento}.
-   */
-  private static final String TYPE_DESCRIPTION_ID = "description";
-
-  /**
-   * @return the default {@link ComponentNameDescription} for given class.
-   */
-  public static ComponentNameDescription getDefaultNameDescription(String qualifiedClassName) {
-    String name = getDefaultName(qualifiedClassName);
-    String acronym = getDefaultAcronym(qualifiedClassName);
-    return new ComponentNameDescription(qualifiedClassName, name, acronym);
-  }
-
-  /**
-   * @return the type specific {@link ComponentNameDescription} for given
-   *         {@link ComponentDescription}.
-   */
-  private static ComponentNameDescription getNameDescription(ComponentDescription description) {
-    if (description == null || description.getComponentClass() == null) {
-      return null;
-    }
-    String qualifiedClassName = ReflectionUtils.getCanonicalName(description.getComponentClass());
-    return getNameDescription(description.getToolkit(), qualifiedClassName);
-  }
-
-  /**
-   * @return the type specific {@link ComponentNameDescription} for given toolkit and class name.
-   */
-  public static ComponentNameDescription getNameDescription(ToolkitDescription toolkit,
-      String componentClassName) {
-    // check type specific descriptions
-    List<ComponentNameDescription> nameDescriptions = getNameDescriptions(toolkit, false);
-    for (ComponentNameDescription nameDescription : nameDescriptions) {
-      if (nameDescription.getClassName().equals(componentClassName)) {
-        return nameDescription;
-      }
-    }
-    // no type specific name description
-    return null;
-  }
-
-  /**
-   * @return the {@link List} of component specific {@link ComponentNameDescription}'s.
-   *
-   * @param def
-   *          is <code>true</code> if default descriptions should be returned
-   */
-  public static List<ComponentNameDescription> getNameDescriptions(ToolkitDescription toolkit,
-      boolean def) {
-    final List<ComponentNameDescription> descriptions = Lists.newArrayList();
-    // prepare settings as String
-    final String settingsString;
-    {
-      IPreferenceStore preferences = toolkit.getPreferences();
-      if (def) {
-        settingsString =
-            preferences.getDefaultString(IPreferenceConstants.P_VARIABLE_TYPE_SPECIFIC);
-      } else {
-        settingsString = preferences.getString(IPreferenceConstants.P_VARIABLE_TYPE_SPECIFIC);
-      }
-      // check, may be no settings yet
-      if (settingsString.length() == 0) {
-        return descriptions;
-      }
-    }
-    // read descriptions
-    ExecutionUtils.runLog(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        XMLMemento rootMemento = XMLMemento.createReadRoot(new StringReader(settingsString));
-        IMemento[] mementos = rootMemento.getChildren(TYPE_DESCRIPTION_ID);
-        for (int i = 0; i < mementos.length; i++) {
-          IMemento memento = mementos[i];
-          // prepare description parameters
-          String className = memento.getString("class");
-          String name = memento.getString("name");
-          String acronym = memento.getString("acronym");
-          boolean asField = "true".equals(memento.getString("asField"));
-          // add description
-          descriptions.add(new ComponentNameDescription(className, name, acronym, asField));
-        }
-      }
-    });
-    return descriptions;
-  }
-
-  /**
-   * Sets the {@link List} of default component specific {@link ComponentNameDescription}'s.
-   * <p>
-   * Should be used in toolkit providers.
-   */
-  public static void setDefaultNameDescriptions(ToolkitDescription toolkit,
-      List<ComponentNameDescription> descriptions) {
-    String settingsString = getDescriptionsAsString(descriptions);
-    IPreferenceStore preferences = toolkit.getPreferences();
-    preferences.setDefault(IPreferenceConstants.P_VARIABLE_TYPE_SPECIFIC, settingsString);
-  }
-
-  /**
-   * Sets the {@link List} of component specific {@link ComponentNameDescription}'s.
-   */
-  public static void setNameDescriptions(ToolkitDescription toolkit,
-      List<ComponentNameDescription> descriptions) {
-    String settingsString = getDescriptionsAsString(descriptions);
-    IPreferenceStore preferences = toolkit.getPreferences();
-    preferences.setValue(IPreferenceConstants.P_VARIABLE_TYPE_SPECIFIC, settingsString);
-  }
-
-  /**
-   * @return the {@link String} presentation of given {@link ComponentNameDescription}'s.
-   */
-  private static String getDescriptionsAsString(List<ComponentNameDescription> descriptions) {
-    // fill memento
-    final XMLMemento rootMemento = XMLMemento.createWriteRoot("descriptions");
-    for (ComponentNameDescription nameDescription : descriptions) {
-      IMemento memento = rootMemento.createChild(TYPE_DESCRIPTION_ID);
-      memento.putString("class", nameDescription.getClassName());
-      memento.putString("name", nameDescription.getName());
-      memento.putString("acronym", nameDescription.getAcronym());
-      memento.putString("asField", nameDescription.isAsField() ? "true" : "false");
-    }
-    // prepare as String
-    return ExecutionUtils.runObject(new RunnableObjectEx<String>() {
-      @Override
-      public String runObject() throws Exception {
-        StringWriter writer = new StringWriter();
-        rootMemento.save(writer);
-        return writer.toString();
-      }
-    });
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ComponentNameDescription
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Description for component specific name preferences.
-   */
-  public static final class ComponentNameDescription {
-    private final String m_className;
-    private String m_name;
-    private String m_acronym;
-    private boolean m_asField;
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructors
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public ComponentNameDescription(String className, String defaultName, String acronym) {
-      this(className, defaultName, acronym, false);
-    }
-
-    public ComponentNameDescription(String className,
-        String defaultName,
-        String acronym,
-        boolean asField) {
-      m_className = className;
-      m_name = defaultName;
-      m_acronym = acronym;
-      m_asField = asField;
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Access
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    /**
-     * @return the fully qualified class name of component.
-     */
-    public String getClassName() {
-      return m_className;
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Name
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    /**
-     * @return the name of variable for this component.
-     */
-    public String getName() {
-      return m_name;
-    }
-
-    /**
-     * Sets the name of variable for this component.
-     */
-    public void setName(String name) {
-      m_name = name;
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Acronym
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    /**
-     * @return the acronym for this component.
-     */
-    public String getAcronym() {
-      return m_acronym;
-    }
-
-    /**
-     * Sets the acronym for this component.
-     */
-    public void setAcronym(String acronym) {
-      m_acronym = acronym;
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Field
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    /**
-     * @return <code>true</code> if {@link FieldUniqueVariableDescription} should be used instead of
-     *         (and only of) {@link LocalUniqueVariableDescription}.
-     */
-    public boolean isAsField() {
-      return m_asField;
-    }
-
-    /**
-     * Specifies if {@link FieldUniqueVariableDescription} should be used instead of (and only of)
-     * {@link LocalUniqueVariableDescription}.
-     */
-    public void setAsField(boolean asField) {
-      m_asField = asField;
-    }
-  }
+	 */
+	private static String getDefaultAcronym(String qualifiedClassName) {
+		String shortClassName = CodeUtils.getShortClass(qualifiedClassName);
+		String acronym = StringUtilities.stripLeadingUppercaseChars(shortClassName, 1).toLowerCase();
+		// remove vowels
+		acronym = StringUtils.replaceChars(acronym, "aeiouy", null);
+		// remove sequential duplicate symbols
+		acronym = StringUtilities.removeDuplicateCharacters(acronym);
+		// check final result
+		if (acronym.length() == 0) {
+			return shortClassName;
+		} else {
+			return acronym;
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Variable
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if {@link FieldUniqueVariableDescription} should be used instead of
+	 *         (and only of) {@link LocalUniqueVariableDescription}.
+	 */
+	public static boolean shouldUseFieldInsteadOfLocal(ComponentDescription description) {
+		// check type specific information
+		{
+			ComponentNameDescription nameDescription = getNameDescription(description);
+			if (nameDescription != null) {
+				return nameDescription.isAsField();
+			}
+		}
+		// no specific information
+		return false;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Type specific names
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * The id of {@link ComponentNameDescription} children in {@link IMemento}.
+	 */
+	private static final String TYPE_DESCRIPTION_ID = "description";
+
+	/**
+	 * @return the default {@link ComponentNameDescription} for given class.
+	 */
+	public static ComponentNameDescription getDefaultNameDescription(String qualifiedClassName) {
+		String name = getDefaultName(qualifiedClassName);
+		String acronym = getDefaultAcronym(qualifiedClassName);
+		return new ComponentNameDescription(qualifiedClassName, name, acronym);
+	}
+
+	/**
+	 * @return the type specific {@link ComponentNameDescription} for given
+	 *         {@link ComponentDescription}.
+	 */
+	private static ComponentNameDescription getNameDescription(ComponentDescription description) {
+		if (description == null || description.getComponentClass() == null) {
+			return null;
+		}
+		String qualifiedClassName = ReflectionUtils.getCanonicalName(description.getComponentClass());
+		return getNameDescription(description.getToolkit(), qualifiedClassName);
+	}
+
+	/**
+	 * @return the type specific {@link ComponentNameDescription} for given toolkit and class name.
+	 */
+	public static ComponentNameDescription getNameDescription(ToolkitDescription toolkit,
+			String componentClassName) {
+		// check type specific descriptions
+		List<ComponentNameDescription> nameDescriptions = getNameDescriptions(toolkit, false);
+		for (ComponentNameDescription nameDescription : nameDescriptions) {
+			if (nameDescription.getClassName().equals(componentClassName)) {
+				return nameDescription;
+			}
+		}
+		// no type specific name description
+		return null;
+	}
+
+	/**
+	 * @return the {@link List} of component specific {@link ComponentNameDescription}'s.
+	 *
+	 * @param def
+	 *          is <code>true</code> if default descriptions should be returned
+	 */
+	public static List<ComponentNameDescription> getNameDescriptions(ToolkitDescription toolkit,
+			boolean def) {
+		final List<ComponentNameDescription> descriptions = Lists.newArrayList();
+		// prepare settings as String
+		final String settingsString;
+		{
+			IPreferenceStore preferences = toolkit.getPreferences();
+			if (def) {
+				settingsString =
+						preferences.getDefaultString(IPreferenceConstants.P_VARIABLE_TYPE_SPECIFIC);
+			} else {
+				settingsString = preferences.getString(IPreferenceConstants.P_VARIABLE_TYPE_SPECIFIC);
+			}
+			// check, may be no settings yet
+			if (settingsString.length() == 0) {
+				return descriptions;
+			}
+		}
+		// read descriptions
+		ExecutionUtils.runLog(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				XMLMemento rootMemento = XMLMemento.createReadRoot(new StringReader(settingsString));
+				IMemento[] mementos = rootMemento.getChildren(TYPE_DESCRIPTION_ID);
+				for (int i = 0; i < mementos.length; i++) {
+					IMemento memento = mementos[i];
+					// prepare description parameters
+					String className = memento.getString("class");
+					String name = memento.getString("name");
+					String acronym = memento.getString("acronym");
+					boolean asField = "true".equals(memento.getString("asField"));
+					// add description
+					descriptions.add(new ComponentNameDescription(className, name, acronym, asField));
+				}
+			}
+		});
+		return descriptions;
+	}
+
+	/**
+	 * Sets the {@link List} of default component specific {@link ComponentNameDescription}'s.
+	 * <p>
+	 * Should be used in toolkit providers.
+	 */
+	public static void setDefaultNameDescriptions(ToolkitDescription toolkit,
+			List<ComponentNameDescription> descriptions) {
+		String settingsString = getDescriptionsAsString(descriptions);
+		IPreferenceStore preferences = toolkit.getPreferences();
+		preferences.setDefault(IPreferenceConstants.P_VARIABLE_TYPE_SPECIFIC, settingsString);
+	}
+
+	/**
+	 * Sets the {@link List} of component specific {@link ComponentNameDescription}'s.
+	 */
+	public static void setNameDescriptions(ToolkitDescription toolkit,
+			List<ComponentNameDescription> descriptions) {
+		String settingsString = getDescriptionsAsString(descriptions);
+		IPreferenceStore preferences = toolkit.getPreferences();
+		preferences.setValue(IPreferenceConstants.P_VARIABLE_TYPE_SPECIFIC, settingsString);
+	}
+
+	/**
+	 * @return the {@link String} presentation of given {@link ComponentNameDescription}'s.
+	 */
+	private static String getDescriptionsAsString(List<ComponentNameDescription> descriptions) {
+		// fill memento
+		final XMLMemento rootMemento = XMLMemento.createWriteRoot("descriptions");
+		for (ComponentNameDescription nameDescription : descriptions) {
+			IMemento memento = rootMemento.createChild(TYPE_DESCRIPTION_ID);
+			memento.putString("class", nameDescription.getClassName());
+			memento.putString("name", nameDescription.getName());
+			memento.putString("acronym", nameDescription.getAcronym());
+			memento.putString("asField", nameDescription.isAsField() ? "true" : "false");
+		}
+		// prepare as String
+		return ExecutionUtils.runObject(new RunnableObjectEx<String>() {
+			@Override
+			public String runObject() throws Exception {
+				StringWriter writer = new StringWriter();
+				rootMemento.save(writer);
+				return writer.toString();
+			}
+		});
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ComponentNameDescription
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Description for component specific name preferences.
+	 */
+	public static final class ComponentNameDescription {
+		private final String m_className;
+		private String m_name;
+		private String m_acronym;
+		private boolean m_asField;
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructors
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public ComponentNameDescription(String className, String defaultName, String acronym) {
+			this(className, defaultName, acronym, false);
+		}
+
+		public ComponentNameDescription(String className,
+				String defaultName,
+				String acronym,
+				boolean asField) {
+			m_className = className;
+			m_name = defaultName;
+			m_acronym = acronym;
+			m_asField = asField;
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Access
+		//
+		////////////////////////////////////////////////////////////////////////////
+		/**
+		 * @return the fully qualified class name of component.
+		 */
+		public String getClassName() {
+			return m_className;
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Name
+		//
+		////////////////////////////////////////////////////////////////////////////
+		/**
+		 * @return the name of variable for this component.
+		 */
+		public String getName() {
+			return m_name;
+		}
+
+		/**
+		 * Sets the name of variable for this component.
+		 */
+		public void setName(String name) {
+			m_name = name;
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Acronym
+		//
+		////////////////////////////////////////////////////////////////////////////
+		/**
+		 * @return the acronym for this component.
+		 */
+		public String getAcronym() {
+			return m_acronym;
+		}
+
+		/**
+		 * Sets the acronym for this component.
+		 */
+		public void setAcronym(String acronym) {
+			m_acronym = acronym;
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Field
+		//
+		////////////////////////////////////////////////////////////////////////////
+		/**
+		 * @return <code>true</code> if {@link FieldUniqueVariableDescription} should be used instead of
+		 *         (and only of) {@link LocalUniqueVariableDescription}.
+		 */
+		public boolean isAsField() {
+			return m_asField;
+		}
+
+		/**
+		 * Specifies if {@link FieldUniqueVariableDescription} should be used instead of (and only of)
+		 * {@link LocalUniqueVariableDescription}.
+		 */
+		public void setAsField(boolean asField) {
+			m_asField = asField;
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/SyncParentChildVariableNameSupport.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/SyncParentChildVariableNameSupport.java
index d51768c93..abc54e3e8 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/SyncParentChildVariableNameSupport.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/SyncParentChildVariableNameSupport.java
@@ -32,114 +32,114 @@
  * @coverage core.model.layout
  */
 public abstract class SyncParentChildVariableNameSupport<T extends JavaInfo> {
-  protected final T m_childInfo;
-  public static final String TEMPLATE_FOR_DEFAULT = "${defaultName}";
+	protected final T m_childInfo;
+	public static final String TEMPLATE_FOR_DEFAULT = "${defaultName}";
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SyncParentChildVariableNameSupport(T layoutData) {
-    m_childInfo = layoutData;
-    // materialization of child JavaInfo
-    m_childInfo.addBroadcastListener(new JavaInfoSetVariable() {
-      @Override
-      public void invoke(JavaInfo javaInfo, VariableSupport oldVariable, VariableSupport newVariable)
-          throws Exception {
-        if (javaInfo == m_childInfo
-            && oldVariable instanceof EmptyVariableSupport
-            && newVariable instanceof AbstractNamedVariableSupport) {
-          JavaInfo parent = m_childInfo.getParentJava();
-          if (!GlobalState.isParsing()
-              && parent != null
-              && parent.getVariableSupport() instanceof AbstractNamedVariableSupport) {
-            setNewName();
-          }
-        }
-      }
-    });
-    // parent JavaInfo rename
-    m_childInfo.addBroadcastListener(new JavaEventListener() {
-      @Override
-      public void variable_setName(AbstractNamedVariableSupport variableSupport,
-          String oldName,
-          String newName) throws Exception {
-        JavaInfo parent = m_childInfo.getParentJava();
-        if (variableSupport.getJavaInfo() == parent
-            && m_childInfo.getVariableSupport() instanceof AbstractNamedVariableSupport
-            && parent.getVariableSupport() instanceof AbstractNamedVariableSupport) {
-          setNewName();
-        }
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SyncParentChildVariableNameSupport(T layoutData) {
+		m_childInfo = layoutData;
+		// materialization of child JavaInfo
+		m_childInfo.addBroadcastListener(new JavaInfoSetVariable() {
+			@Override
+			public void invoke(JavaInfo javaInfo, VariableSupport oldVariable, VariableSupport newVariable)
+					throws Exception {
+				if (javaInfo == m_childInfo
+						&& oldVariable instanceof EmptyVariableSupport
+						&& newVariable instanceof AbstractNamedVariableSupport) {
+					JavaInfo parent = m_childInfo.getParentJava();
+					if (!GlobalState.isParsing()
+							&& parent != null
+							&& parent.getVariableSupport() instanceof AbstractNamedVariableSupport) {
+						setNewName();
+					}
+				}
+			}
+		});
+		// parent JavaInfo rename
+		m_childInfo.addBroadcastListener(new JavaEventListener() {
+			@Override
+			public void variable_setName(AbstractNamedVariableSupport variableSupport,
+					String oldName,
+					String newName) throws Exception {
+				JavaInfo parent = m_childInfo.getParentJava();
+				if (variableSupport.getJavaInfo() == parent
+						&& m_childInfo.getVariableSupport() instanceof AbstractNamedVariableSupport
+						&& parent.getVariableSupport() instanceof AbstractNamedVariableSupport) {
+					setNewName();
+				}
+			}
+		});
+	}
 
-  private void setNewName() throws Exception {
-    String newName = generateName();
-    if (newName != null) {
-      m_childInfo.getVariableSupport().setName(newName);
-    }
-  }
+	private void setNewName() throws Exception {
+		String newName = generateName();
+		if (newName != null) {
+			m_childInfo.getVariableSupport().setName(newName);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utilities
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected static boolean isValidTemplate(String templates[], String template) {
-    return ArrayUtils.contains(templates, template);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utilities
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected static boolean isValidTemplate(String templates[], String template) {
+		return ArrayUtils.contains(templates, template);
+	}
 
-  /**
-   * @return the name of child {@link JavaInfo} that corresponds to the name of parent
-   *         {@link JavaInfo}.
-   */
-  protected String generateName() {
-    // prepare template
-    String template = getTemplate();
-    if (template.equals(getTemplateForDefault()) || StringUtils.isEmpty(template)) {
-      return null;
-    }
-    // use template
-    return StrSubstitutor.replace(template, getValueMap());
-  }
+	/**
+	 * @return the name of child {@link JavaInfo} that corresponds to the name of parent
+	 *         {@link JavaInfo}.
+	 */
+	protected String generateName() {
+		// prepare template
+		String template = getTemplate();
+		if (template.equals(getTemplateForDefault()) || StringUtils.isEmpty(template)) {
+			return null;
+		}
+		// use template
+		return StrSubstitutor.replace(template, getValueMap());
+	}
 
-  /**
-   * @return template applied as default variable name (old name style).
-   */
-  protected String getTemplateForDefault() {
-    return TEMPLATE_FOR_DEFAULT;
-  }
+	/**
+	 * @return template applied as default variable name (old name style).
+	 */
+	protected String getTemplateForDefault() {
+		return TEMPLATE_FOR_DEFAULT;
+	}
 
-  /**
-   * @return template for applied variable name.
-   */
-  protected abstract String getTemplate();
+	/**
+	 * @return template for applied variable name.
+	 */
+	protected abstract String getTemplate();
 
-  /**
-   * @return template values map.
-   */
-  protected abstract Map<String, String> getValueMap();
+	/**
+	 * @return template values map.
+	 */
+	protected abstract Map<String, String> getValueMap();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Name utilities
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public String getClassName() {
-    return CodeUtils.getShortClass(m_childInfo.getDescription().getComponentClass().getName());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Name utilities
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public String getClassName() {
+		return CodeUtils.getShortClass(m_childInfo.getDescription().getComponentClass().getName());
+	}
 
-  public String getAcronym() {
-    return StringUtilities.extractCamelCaps(getClassName()).toLowerCase();
-  }
+	public String getAcronym() {
+		return StringUtilities.extractCamelCaps(getClassName()).toLowerCase();
+	}
 
-  public String getParentName() {
-    return m_childInfo.getParentJava().getVariableSupport().getComponentName();
-  }
+	public String getParentName() {
+		return m_childInfo.getParentJava().getVariableSupport().getComponentName();
+	}
 
-  public String getParentNameCap() {
-    return StringUtils.capitalize(getParentName());
-  }
+	public String getParentNameCap() {
+		return StringUtils.capitalize(getParentName());
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/ThisVariableSupport.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/ThisVariableSupport.java
index ec656a1d9..11d65ca71 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/ThisVariableSupport.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/ThisVariableSupport.java
@@ -51,347 +51,347 @@
  * @coverage core.model.variable
  */
 public final class ThisVariableSupport extends AbstractNoNameVariableSupport {
-  private final MethodDeclaration m_constructor;
+	private final MethodDeclaration m_constructor;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ThisVariableSupport(JavaInfo javaInfo, MethodDeclaration constructor) {
-    super(javaInfo);
-    m_constructor = constructor;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ThisVariableSupport(JavaInfo javaInfo, MethodDeclaration constructor) {
+		super(javaInfo);
+		m_constructor = constructor;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    return "this";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		return "this";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getTitle() throws Exception {
-    Class<?> objectClass = m_javaInfo.getDescription().getComponentClass();
-    return "(" + objectClass.getName() + ")";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getTitle() throws Exception {
+		Class<?> objectClass = m_javaInfo.getDescription().getComponentClass();
+		return "(" + objectClass.getName() + ")";
+	}
 
-  @Override
-  public String getComponentName() {
-    return "this";
-  }
+	@Override
+	public String getComponentName() {
+		return "this";
+	}
 
-  @Override
-  public boolean isValidStatementForChild(Statement statement) {
-    return true;
-  }
+	@Override
+	public boolean isValidStatementForChild(Statement statement) {
+		return true;
+	}
 
-  /**
-   * @return the constructor that used for this component.
-   */
-  public MethodDeclaration getConstructor() {
-    return m_constructor;
-  }
+	/**
+	 * @return the constructor that used for this component.
+	 */
+	public MethodDeclaration getConstructor() {
+		return m_constructor;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Expressions
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean hasExpression(NodeTarget target) {
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Expressions
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean hasExpression(NodeTarget target) {
+		return true;
+	}
 
-  @Override
-  public String getReferenceExpression(NodeTarget target) throws Exception {
-    return "this";
-  }
+	@Override
+	public String getReferenceExpression(NodeTarget target) throws Exception {
+		return "this";
+	}
 
-  @Override
-  public String getAccessExpression(NodeTarget target) throws Exception {
-    return "";
-  }
+	@Override
+	public String getAccessExpression(NodeTarget target) throws Exception {
+		return "";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Target
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public StatementTarget getStatementTarget() throws Exception {
-    // check for "forced" method
-    {
-      MethodDeclaration forcedMethod = forced_getMethod(m_javaInfo);
-      // target - begin of "forced" method
-      if (forcedMethod != null) {
-        return new StatementTarget(forcedMethod, true);
-      }
-    }
-    // if first statement in constructor is "super", add after it
-    List<Statement> statements = DomGenerics.statements(m_constructor.getBody());
-    if (!statements.isEmpty()) {
-      Statement statement = statements.get(0);
-      if (statement instanceof SuperConstructorInvocation) {
-        return new StatementTarget(statement, false);
-      }
-    }
-    // in other case add as first statement in constructor
-    return new StatementTarget(m_constructor, true);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Target
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public StatementTarget getStatementTarget() throws Exception {
+		// check for "forced" method
+		{
+			MethodDeclaration forcedMethod = forced_getMethod(m_javaInfo);
+			// target - begin of "forced" method
+			if (forcedMethod != null) {
+				return new StatementTarget(forcedMethod, true);
+			}
+		}
+		// if first statement in constructor is "super", add after it
+		List<Statement> statements = DomGenerics.statements(m_constructor.getBody());
+		if (!statements.isEmpty()) {
+			Statement statement = statements.get(0);
+			if (statement instanceof SuperConstructorInvocation) {
+				return new StatementTarget(statement, false);
+			}
+		}
+		// in other case add as first statement in constructor
+		return new StatementTarget(m_constructor, true);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Forced method/target
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * When there is "forced" method configured, see {@link GenerationSettings#getForcedMethodName()},
-   * we should add new components into this "forced" method.
-   * <p>
-   * When there are no "forced" method yet, we create it, move existing nodes from constructor, and
-   * return {@link StatementTarget} in this "forced" method. If there is already existing "forced"
-   * method, normal {@link JavaInfoUtils#getTarget(JavaInfo, JavaInfo)} can analyze execution flow
-   * and provide valid target, after all components and their nodes.
-   * <p>
-   * Preconditions: all components and their related {@link ASTNode}'s are located in
-   * {@link #m_constructor}.
-   *
-   * @param javaInfo
-   *          the parent to which new component should be added, should be "this" component, or any
-   *          exposed child of "this" component.
-   *
-   * @return the {@link StatementTarget} in "forced" method, or <code>null</code> if "forced" method
-   *         can not be used because preconditions are not satisfied.
-   */
-  public static StatementTarget getForcedTarget(JavaInfo javaInfo) throws Exception {
-    if (!shouldUseForcedTarget(javaInfo)) {
-      return null;
-    }
-    // target - end of new "forced" method
-    MethodDeclaration forcedMethod = forced_getMethod(javaInfo);
-    if (forcedMethod != null) {
-      return new StatementTarget(forcedMethod, false);
-    }
-    // no "forced" method
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Forced method/target
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * When there is "forced" method configured, see {@link GenerationSettings#getForcedMethodName()},
+	 * we should add new components into this "forced" method.
+	 * <p>
+	 * When there are no "forced" method yet, we create it, move existing nodes from constructor, and
+	 * return {@link StatementTarget} in this "forced" method. If there is already existing "forced"
+	 * method, normal {@link JavaInfoUtils#getTarget(JavaInfo, JavaInfo)} can analyze execution flow
+	 * and provide valid target, after all components and their nodes.
+	 * <p>
+	 * Preconditions: all components and their related {@link ASTNode}'s are located in
+	 * {@link #m_constructor}.
+	 *
+	 * @param javaInfo
+	 *          the parent to which new component should be added, should be "this" component, or any
+	 *          exposed child of "this" component.
+	 *
+	 * @return the {@link StatementTarget} in "forced" method, or <code>null</code> if "forced" method
+	 *         can not be used because preconditions are not satisfied.
+	 */
+	public static StatementTarget getForcedTarget(JavaInfo javaInfo) throws Exception {
+		if (!shouldUseForcedTarget(javaInfo)) {
+			return null;
+		}
+		// target - end of new "forced" method
+		MethodDeclaration forcedMethod = forced_getMethod(javaInfo);
+		if (forcedMethod != null) {
+			return new StatementTarget(forcedMethod, false);
+		}
+		// no "forced" method
+		return null;
+	}
 
-  /**
-   * @return <code>true</code> if given container is "this" component or its exposed part.
-   */
-  private static boolean shouldUseForcedTarget(JavaInfo container) {
-    if (container.getVariableSupport() instanceof ThisVariableSupport) {
-      return true;
-    }
-    if (container.getCreationSupport() instanceof IExposedCreationSupport) {
-      IExposedCreationSupport exposedCreationSupport =
-          (IExposedCreationSupport) container.getCreationSupport();
-      JavaInfo host = exposedCreationSupport.getHostJavaInfo();
-      return shouldUseForcedTarget(host);
-    }
-    if (ExposedPropertyCreationSupport.isReplacementForExposed(container)) {
-      JavaInfo host = container.getParentJava();
-      return shouldUseForcedTarget(host);
-    }
-    return false;
-  }
+	/**
+	 * @return <code>true</code> if given container is "this" component or its exposed part.
+	 */
+	private static boolean shouldUseForcedTarget(JavaInfo container) {
+		if (container.getVariableSupport() instanceof ThisVariableSupport) {
+			return true;
+		}
+		if (container.getCreationSupport() instanceof IExposedCreationSupport) {
+			IExposedCreationSupport exposedCreationSupport =
+					(IExposedCreationSupport) container.getCreationSupport();
+			JavaInfo host = exposedCreationSupport.getHostJavaInfo();
+			return shouldUseForcedTarget(host);
+		}
+		if (ExposedPropertyCreationSupport.isReplacementForExposed(container)) {
+			JavaInfo host = container.getParentJava();
+			return shouldUseForcedTarget(host);
+		}
+		return false;
+	}
 
-  /**
-   * If "forced" method is configured, see {@link GenerationSettings#getForcedMethodName()}, we can
-   * return "forced" method in two cases:
-   * <ol>
-   * <li>when last statement of constructor is method invocation (in this type). In this case, we
-   * return this method as "forced".</li>
-   * <li>when all components and their nodes are in constructor, so we can create new "forced"
-   * method using {@link #forced_getNewMethod(JavaInfo)}.</li>
-   * </ol>
-   * <p>
-   * In other cases, we return <code>null</code>, so usual constructor handling should be used.
-   *
-   * @return the "forced" {@link MethodDeclaration}, or <code>null</code>.
-   */
-  private static MethodDeclaration forced_getMethod(JavaInfo javaInfo) throws Exception {
-    javaInfo = javaInfo.getRootJava();
-    if (!(javaInfo.getVariableSupport() instanceof ThisVariableSupport)) {
-      return null;
-    }
-    MethodDeclaration constructor =
-        ((ThisVariableSupport) javaInfo.getVariableSupport()).getConstructor();
-    // prepare "forced" method name
-    String forcedMethodName = forced_getMethodName(javaInfo);
-    if (forcedMethodName == null) {
-      return null;
-    }
-    // try to find existing "forced" method
-    {
-      MethodDeclaration existingMethod =
-          forced_getExistingMethod(javaInfo, constructor, forcedMethodName);
-      if (existingMethod != null) {
-        return existingMethod;
-      }
-    }
-    // try to create new "forced" method
-    return forced_getNewMethod(javaInfo, forcedMethodName);
-  }
+	/**
+	 * If "forced" method is configured, see {@link GenerationSettings#getForcedMethodName()}, we can
+	 * return "forced" method in two cases:
+	 * <ol>
+	 * <li>when last statement of constructor is method invocation (in this type). In this case, we
+	 * return this method as "forced".</li>
+	 * <li>when all components and their nodes are in constructor, so we can create new "forced"
+	 * method using {@link #forced_getNewMethod(JavaInfo)}.</li>
+	 * </ol>
+	 * <p>
+	 * In other cases, we return <code>null</code>, so usual constructor handling should be used.
+	 *
+	 * @return the "forced" {@link MethodDeclaration}, or <code>null</code>.
+	 */
+	private static MethodDeclaration forced_getMethod(JavaInfo javaInfo) throws Exception {
+		javaInfo = javaInfo.getRootJava();
+		if (!(javaInfo.getVariableSupport() instanceof ThisVariableSupport)) {
+			return null;
+		}
+		MethodDeclaration constructor =
+				((ThisVariableSupport) javaInfo.getVariableSupport()).getConstructor();
+		// prepare "forced" method name
+		String forcedMethodName = forced_getMethodName(javaInfo);
+		if (forcedMethodName == null) {
+			return null;
+		}
+		// try to find existing "forced" method
+		{
+			MethodDeclaration existingMethod =
+					forced_getExistingMethod(javaInfo, constructor, forcedMethodName);
+			if (existingMethod != null) {
+				return existingMethod;
+			}
+		}
+		// try to create new "forced" method
+		return forced_getNewMethod(javaInfo, forcedMethodName);
+	}
 
-  /**
-   * @return the {@link MethodDeclaration} which can be considered as "forced". It should be invoked
-   *         as last {@link Statement} in constructor.
-   */
-  private static MethodDeclaration forced_getExistingMethod(JavaInfo javaInfo,
-      MethodDeclaration constructor,
-      String forcedMethodName) {
-    // prepare last statement
-    Statement statement;
-    {
-      Block body = constructor.getBody();
-      while (true) {
-        List<Statement> statements = DomGenerics.statements(body);
-        statement = GenericsUtils.getLastOrNull(statements);
-        // dive into TryStatement
-        if (statement instanceof TryStatement) {
-          body = ((TryStatement) statement).getBody();
-          continue;
-        }
-        // done
-        break;
-      }
-    }
-    // check last statement
-    if (statement instanceof ExpressionStatement) {
-      ExpressionStatement expressionStatement = (ExpressionStatement) statement;
-      if (expressionStatement.getExpression() instanceof MethodInvocation) {
-        MethodInvocation invocation = (MethodInvocation) expressionStatement.getExpression();
-        if (invocation.getName().getIdentifier().equals(forcedMethodName)) {
-          String methodSignature = AstNodeUtils.getMethodSignature(invocation);
-          TypeDeclaration typeDeclaration = (TypeDeclaration) constructor.getParent();
-          MethodDeclaration methodDeclaration =
-              AstNodeUtils.getMethodBySignature(typeDeclaration, methodSignature);
-          if (methodDeclaration != null) {
-            return methodDeclaration;
-          }
-        }
-      }
-    }
-    // invalid statement
-    return null;
-  }
+	/**
+	 * @return the {@link MethodDeclaration} which can be considered as "forced". It should be invoked
+	 *         as last {@link Statement} in constructor.
+	 */
+	private static MethodDeclaration forced_getExistingMethod(JavaInfo javaInfo,
+			MethodDeclaration constructor,
+			String forcedMethodName) {
+		// prepare last statement
+		Statement statement;
+		{
+			Block body = constructor.getBody();
+			while (true) {
+				List<Statement> statements = DomGenerics.statements(body);
+				statement = GenericsUtils.getLastOrNull(statements);
+				// dive into TryStatement
+				if (statement instanceof TryStatement) {
+					body = ((TryStatement) statement).getBody();
+					continue;
+				}
+				// done
+				break;
+			}
+		}
+		// check last statement
+		if (statement instanceof ExpressionStatement) {
+			ExpressionStatement expressionStatement = (ExpressionStatement) statement;
+			if (expressionStatement.getExpression() instanceof MethodInvocation) {
+				MethodInvocation invocation = (MethodInvocation) expressionStatement.getExpression();
+				if (invocation.getName().getIdentifier().equals(forcedMethodName)) {
+					String methodSignature = AstNodeUtils.getMethodSignature(invocation);
+					TypeDeclaration typeDeclaration = (TypeDeclaration) constructor.getParent();
+					MethodDeclaration methodDeclaration =
+							AstNodeUtils.getMethodBySignature(typeDeclaration, methodSignature);
+					if (methodDeclaration != null) {
+						return methodDeclaration;
+					}
+				}
+			}
+		}
+		// invalid statement
+		return null;
+	}
 
-  /**
-   * If "forced" method is configured, see {@link GenerationSettings#getForcedMethodName()}, and all
-   * components and their related {@link ASTNode}'s are located in constructor, we create new
-   * "forced" method and move all related nodes into it. If there is already "forced" method,
-   * <code>null</code> will be returned, we recognize here only one situation - when there are no
-   * forced method.
-   *
-   * @return the new "forced" method.
-   */
-  private static MethodDeclaration forced_getNewMethod(JavaInfo parent, String forcedMethodName)
-      throws Exception {
-    // check that root component is "this" component
-    final JavaInfo root;
-    final MethodDeclaration constructor;
-    {
-      root = parent.getRootJava();
-      if (!(root.getVariableSupport() instanceof ThisVariableSupport)) {
-        return null;
-      }
-      constructor = ((ThisVariableSupport) root.getVariableSupport()).getConstructor();
-    }
-    // check that related nodes of all children JavaInfo's are in constructor
-    {
-      final boolean[] validNodes = new boolean[]{true};
-      root.accept(new ObjectInfoVisitor() {
-        @Override
-        public void endVisit(ObjectInfo objectInfo) throws Exception {
-          if (objectInfo instanceof JavaInfo) {
-            JavaInfo javaInfo = (JavaInfo) objectInfo;
-            for (ASTNode node : javaInfo.getRelatedNodes()) {
-              MethodDeclaration method = AstNodeUtils.getEnclosingMethod(node);
-              if (method != null) {
-                validNodes[0] &= method == constructor;
-              }
-            }
-          }
-        }
-      });
-      // no, there are nodes in other methods than constructor
-      if (!validNodes[0]) {
-        return null;
-      }
-    }
-    // create "forced" method
-    AstEditor editor = root.getEditor();
-    MethodDeclaration forcedMethod =
-        editor.addMethodDeclaration(
-            "private void " + forcedMethodName + "()",
-            Collections.<String>emptyList(),
-            new BodyDeclarationTarget(constructor, false));
-    // move all statements from constructor into "forced" method
-    {
-      List<Statement> statements = new ArrayList<Statement>(DomGenerics.statements(constructor));
-      for (Statement statement : statements) {
-        // ignore "super" constructor
-        if (statement instanceof SuperConstructorInvocation) {
-          continue;
-        }
-        // skip if references parameters
-        if (forced_hasReferenceOnMethodParameter(statement)) {
-          continue;
-        }
-        // do move
-        editor.moveStatement(statement, new StatementTarget(forcedMethod, false));
-      }
-    }
-    // add forced method invocation in constructor
-    editor.addStatement(forcedMethodName + "();", new StatementTarget(constructor, false));
-    return forcedMethod;
-  }
+	/**
+	 * If "forced" method is configured, see {@link GenerationSettings#getForcedMethodName()}, and all
+	 * components and their related {@link ASTNode}'s are located in constructor, we create new
+	 * "forced" method and move all related nodes into it. If there is already "forced" method,
+	 * <code>null</code> will be returned, we recognize here only one situation - when there are no
+	 * forced method.
+	 *
+	 * @return the new "forced" method.
+	 */
+	private static MethodDeclaration forced_getNewMethod(JavaInfo parent, String forcedMethodName)
+			throws Exception {
+		// check that root component is "this" component
+		final JavaInfo root;
+		final MethodDeclaration constructor;
+		{
+			root = parent.getRootJava();
+			if (!(root.getVariableSupport() instanceof ThisVariableSupport)) {
+				return null;
+			}
+			constructor = ((ThisVariableSupport) root.getVariableSupport()).getConstructor();
+		}
+		// check that related nodes of all children JavaInfo's are in constructor
+		{
+			final boolean[] validNodes = new boolean[]{true};
+			root.accept(new ObjectInfoVisitor() {
+				@Override
+				public void endVisit(ObjectInfo objectInfo) throws Exception {
+					if (objectInfo instanceof JavaInfo) {
+						JavaInfo javaInfo = (JavaInfo) objectInfo;
+						for (ASTNode node : javaInfo.getRelatedNodes()) {
+							MethodDeclaration method = AstNodeUtils.getEnclosingMethod(node);
+							if (method != null) {
+								validNodes[0] &= method == constructor;
+							}
+						}
+					}
+				}
+			});
+			// no, there are nodes in other methods than constructor
+			if (!validNodes[0]) {
+				return null;
+			}
+		}
+		// create "forced" method
+		AstEditor editor = root.getEditor();
+		MethodDeclaration forcedMethod =
+				editor.addMethodDeclaration(
+						"private void " + forcedMethodName + "()",
+						Collections.<String>emptyList(),
+						new BodyDeclarationTarget(constructor, false));
+		// move all statements from constructor into "forced" method
+		{
+			List<Statement> statements = new ArrayList<Statement>(DomGenerics.statements(constructor));
+			for (Statement statement : statements) {
+				// ignore "super" constructor
+				if (statement instanceof SuperConstructorInvocation) {
+					continue;
+				}
+				// skip if references parameters
+				if (forced_hasReferenceOnMethodParameter(statement)) {
+					continue;
+				}
+				// do move
+				editor.moveStatement(statement, new StatementTarget(forcedMethod, false));
+			}
+		}
+		// add forced method invocation in constructor
+		editor.addStatement(forcedMethodName + "();", new StatementTarget(constructor, false));
+		return forcedMethod;
+	}
 
-  /**
-   * @return the name of "forced" method, or <code>null</code> if no "forced" method configured for
-   *         toolkit of given {@link JavaInfo}.
-   */
-  private static String forced_getMethodName(JavaInfo javaInfo) {
-    return javaInfo.getDescription().getToolkit().getGenerationSettings().getForcedMethodName();
-  }
+	/**
+	 * @return the name of "forced" method, or <code>null</code> if no "forced" method configured for
+	 *         toolkit of given {@link JavaInfo}.
+	 */
+	private static String forced_getMethodName(JavaInfo javaInfo) {
+		return javaInfo.getDescription().getToolkit().getGenerationSettings().getForcedMethodName();
+	}
 
-  /**
-   * @return <code>true</code> if given {@link Statement} has references on enclosing
-   *         {@link MethodDeclaration} parameters.
-   */
-  private static boolean forced_hasReferenceOnMethodParameter(Statement statement) {
-    final MethodDeclaration method = AstNodeUtils.getEnclosingMethod(statement);
-    final AtomicBoolean result = new AtomicBoolean(false);
-    statement.accept(new ASTVisitor() {
-      @Override
-      public void endVisit(SimpleName node) {
-        if (!result.get() && AstNodeUtils.isVariable(node)) {
-          if (isReferenceOnParameter(node)) {
-            result.set(true);
-          }
-        }
-      }
+	/**
+	 * @return <code>true</code> if given {@link Statement} has references on enclosing
+	 *         {@link MethodDeclaration} parameters.
+	 */
+	private static boolean forced_hasReferenceOnMethodParameter(Statement statement) {
+		final MethodDeclaration method = AstNodeUtils.getEnclosingMethod(statement);
+		final AtomicBoolean result = new AtomicBoolean(false);
+		statement.accept(new ASTVisitor() {
+			@Override
+			public void endVisit(SimpleName node) {
+				if (!result.get() && AstNodeUtils.isVariable(node)) {
+					if (isReferenceOnParameter(node)) {
+						result.set(true);
+					}
+				}
+			}
 
-      private boolean isReferenceOnParameter(SimpleName variable) {
-        IVariableBinding binding = AstNodeUtils.getVariableBinding(variable);
-        for (SingleVariableDeclaration parameter : DomGenerics.parameters(method)) {
-          if (parameter.resolveBinding() == binding) {
-            return true;
-          }
-        }
-        return false;
-      }
-    });
-    return result.get();
-  }
+			private boolean isReferenceOnParameter(SimpleName variable) {
+				IVariableBinding binding = AstNodeUtils.getVariableBinding(variable);
+				for (SingleVariableDeclaration parameter : DomGenerics.parameters(method)) {
+					if (parameter.resolveBinding() == binding) {
+						return true;
+					}
+				}
+				return false;
+			}
+		});
+		return result.get();
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/VariableProperty.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/VariableProperty.java
index 0a38ddf35..0f38b1766 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/VariableProperty.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/VariableProperty.java
@@ -24,96 +24,96 @@
  * @coverage core.model.variable
  */
 public final class VariableProperty extends Property {
-  private final AbstractNamedVariableSupport m_variableSupport;
+	private final AbstractNamedVariableSupport m_variableSupport;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public VariableProperty(AbstractNamedVariableSupport variableSupport) {
-    super(new VariablePropertyEditor());
-    m_variableSupport = variableSupport;
-    setCategory(PropertyCategory.system(0));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public VariableProperty(AbstractNamedVariableSupport variableSupport) {
+		super(new VariablePropertyEditor());
+		m_variableSupport = variableSupport;
+		setCategory(PropertyCategory.system(0));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Property
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getTitle() {
-    return "Variable";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Property
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getTitle() {
+		return "Variable";
+	}
 
-  @Override
-  public Object getValue() throws Exception {
-    return m_variableSupport.getName();
-  }
+	@Override
+	public Object getValue() throws Exception {
+		return m_variableSupport.getName();
+	}
 
-  @Override
-  public boolean isModified() throws Exception {
-    return true;
-  }
+	@Override
+	public boolean isModified() throws Exception {
+		return true;
+	}
 
-  @Override
-  public void setValue(Object value) throws Exception {
-    if (!(value instanceof String)) {
-      return;
-    }
-    String text = ((String) value).trim();
-    // set name
-    JavaInfo javaInfo = m_variableSupport.getJavaInfo();
-    try {
-      javaInfo.startEdit();
-      m_variableSupport.setName(text);
-    } finally {
-      javaInfo.endEdit();
-    }
-  }
+	@Override
+	public void setValue(Object value) throws Exception {
+		if (!(value instanceof String)) {
+			return;
+		}
+		String text = ((String) value).trim();
+		// set name
+		JavaInfo javaInfo = m_variableSupport.getJavaInfo();
+		try {
+			javaInfo.startEdit();
+			m_variableSupport.setName(text);
+		} finally {
+			javaInfo.endEdit();
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // VariablePropertyEditor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final class VariablePropertyEditor extends AbstractTextPropertyEditor {
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Text
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    protected String getText(Property property) throws Exception {
-      return (String) property.getValue();
-    }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// VariablePropertyEditor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final class VariablePropertyEditor extends AbstractTextPropertyEditor {
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Text
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		protected String getText(Property property) throws Exception {
+			return (String) property.getValue();
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // AbstractTextPropertyEditor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    protected String getEditorText(Property property) throws Exception {
-      return getText(property);
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// AbstractTextPropertyEditor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		protected String getEditorText(Property property) throws Exception {
+			return getText(property);
+		}
 
-    @Override
-    protected boolean setEditorText(Property property, String text) throws Exception {
-      text = text.trim();
-      // validate name
-      {
-        VariableProperty variableProperty = (VariableProperty) property;
-        String errorMessage = variableProperty.m_variableSupport.validateName(text);
-        if (errorMessage != null) {
-          UiUtils.openWarning(DesignerPlugin.getShell(), property.getTitle(), errorMessage);
-          return false;
-        }
-      }
-      // OK
-      property.setValue(text);
-      return true;
-    }
-  }
+		@Override
+		protected boolean setEditorText(Property property, String text) throws Exception {
+			text = text.trim();
+			// validate name
+			{
+				VariableProperty variableProperty = (VariableProperty) property;
+				String errorMessage = variableProperty.m_variableSupport.validateName(text);
+				if (errorMessage != null) {
+					UiUtils.openWarning(DesignerPlugin.getShell(), property.getTitle(), errorMessage);
+					return false;
+				}
+			}
+			// OK
+			property.setValue(text);
+			return true;
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/VariableSupport.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/VariableSupport.java
index f65d0d294..01a3d7917 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/VariableSupport.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/VariableSupport.java
@@ -38,186 +38,186 @@
  * @coverage core.model.variable
  */
 public abstract class VariableSupport {
-  protected JavaInfo m_javaInfo;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public VariableSupport(JavaInfo javaInfo) {
-    m_javaInfo = javaInfo;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link JavaInfo} that has this {@link VariableSupport}.
-   */
-  public final JavaInfo getJavaInfo() {
-    return m_javaInfo;
-  }
-
-  /**
-   * Moves {@link VariableSupport} to new {@link JavaInfo}, during morphing.
-   */
-  public final void moveTo(JavaInfo newJavaInfo) throws Exception {
-    newJavaInfo.setVariableSupport(this);
-    m_javaInfo = newJavaInfo;
-  }
-
-  /**
-   * @return <code>true</code> if given {@link ASTNode} represents this {@link JavaInfo}.
-   */
-  public boolean isJavaInfo(ASTNode node) {
-    return false;
-  }
-
-  /**
-   * @return <code>true</code> if this {@link VariableSupport} is "default", i.e. is installed on
-   *         component creation, for example "exposed". But we still can support "real"
-   *         {@link VariableSupport} for it.
-   */
-  public boolean isDefault() {
-    return false;
-  }
-
-  /**
-   * This method should be implemented for variables that have related statements. For example,
-   * virtual variables can not have related statements, so it can omit implementation.
-   *
-   * @return <code>true</code> if given {@link Statement} can be used as reference for adding new
-   *         child.
-   */
-  public boolean isValidStatementForChild(Statement statement) {
-    return true;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Name
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> in there is concept of variable name for this {@link VariableSupport}
-   *         . For example "this" components don't have variable.
-   */
-  public abstract boolean hasName();
-
-  /**
-   * @return the name of variable/field to which this component is assigned first time or
-   *         <code>null</code> if there are no any variable.
-   */
-  public abstract String getName();
-
-  /**
-   * Changes the name of variable/field of object.
-   */
-  public abstract void setName(String newName) throws Exception;
-
-  /**
-   * @return the title to display for user. Usually this is the name of variable.
-   */
-  public abstract String getTitle() throws Exception;
-
-  /**
-   * @return the name of component. Usually this is the name of variable.<br>
-   *
-   *         Difference between {@link #getName()} is that this method can return not only name of
-   *         variable, but also some other, specific string for special {@link VariableSupport}'s,
-   *         for example "this" for {@link ThisVariableSupport}, or name of property for
-   *         {@link ExposedPropertyVariableSupport} .
-   */
-  public String getComponentName() {
-    return "other";
-  }
-
-  /**
-   * Allows {@link VariableSupport} add zero or more {@link Property}'s. Some implementation support
-   * variable property, some - not.
-   */
-  public void addProperties(List<Property> properties) {
-    // don't add any property by default
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Expressions
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if invocations of {@link #getReferenceExpression(NodeTarget)} and
-   *         {@link #getAccessExpression(NodeTarget)} can be used for this {@link VariableSupport}.
-   */
-  public boolean hasExpression(NodeTarget target) {
-    return false;
-  }
-
-  /**
-   * Returns piece of Java code that should be used for passing reference on this object. It can
-   * return different code depending on <code>target</code> argument, i.e. where it will be used.
-   * For example, here is typical code:
-   * <code>parentInfo.addMethodInvocation("add", info.getReferenceExpression(target));</code>
-   *
-   * @param target
-   *          that {@link NodeTarget} that specifies position where expression will be used.
-   */
-  public abstract String getReferenceExpression(NodeTarget target) throws Exception;
-
-  /**
-   * Returns piece of Java code that should be used for calling some method. For example, here is
-   * typical code:
-   * <code>addMethodInvocationCode(info.getAccessExpression(true) + "setExpanded(true)");</code>
-   * <p>
-   * Result is almost same as #getAccessExpression(boolean), but adds "." in most cases. Only
-   * exception are "this" components, where reference expression is "this", but access expression -
-   * empty string.
-   */
-  public abstract String getAccessExpression(NodeTarget target) throws Exception;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Conversion
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if this variable can be converted from local to field. Usually if
-   *         there is variable at all, it is always possible, except case when variable is already
-   *         field.
-   */
-  public abstract boolean canConvertLocalToField();
-
-  /**
-   * Converts local variable into field. If variable is already field, ignore conversion request.
-   */
-  public abstract void convertLocalToField() throws Exception;
-
-  /**
-   * @return <code>true</code> if this variable can be converted from field to local.
-   */
-  public abstract boolean canConvertFieldToLocal();
-
-  /**
-   * Converts field into local variable. If variable is already local variable, ignore conversion
-   * request.
-   */
-  public abstract void convertFieldToLocal() throws Exception;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Target
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Returns the {@link StatementTarget} that describes default location for new {@link Statement}.<br>
-   *
-   * NOTE: in some cases it may change the {@link VariableSupport} instance of the {@link JavaInfo}.
-   * So the example code below is wrong:
-   *
-   * <pre>
+	protected JavaInfo m_javaInfo;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public VariableSupport(JavaInfo javaInfo) {
+		m_javaInfo = javaInfo;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link JavaInfo} that has this {@link VariableSupport}.
+	 */
+	public final JavaInfo getJavaInfo() {
+		return m_javaInfo;
+	}
+
+	/**
+	 * Moves {@link VariableSupport} to new {@link JavaInfo}, during morphing.
+	 */
+	public final void moveTo(JavaInfo newJavaInfo) throws Exception {
+		newJavaInfo.setVariableSupport(this);
+		m_javaInfo = newJavaInfo;
+	}
+
+	/**
+	 * @return <code>true</code> if given {@link ASTNode} represents this {@link JavaInfo}.
+	 */
+	public boolean isJavaInfo(ASTNode node) {
+		return false;
+	}
+
+	/**
+	 * @return <code>true</code> if this {@link VariableSupport} is "default", i.e. is installed on
+	 *         component creation, for example "exposed". But we still can support "real"
+	 *         {@link VariableSupport} for it.
+	 */
+	public boolean isDefault() {
+		return false;
+	}
+
+	/**
+	 * This method should be implemented for variables that have related statements. For example,
+	 * virtual variables can not have related statements, so it can omit implementation.
+	 *
+	 * @return <code>true</code> if given {@link Statement} can be used as reference for adding new
+	 *         child.
+	 */
+	public boolean isValidStatementForChild(Statement statement) {
+		return true;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Name
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> in there is concept of variable name for this {@link VariableSupport}
+	 *         . For example "this" components don't have variable.
+	 */
+	public abstract boolean hasName();
+
+	/**
+	 * @return the name of variable/field to which this component is assigned first time or
+	 *         <code>null</code> if there are no any variable.
+	 */
+	public abstract String getName();
+
+	/**
+	 * Changes the name of variable/field of object.
+	 */
+	public abstract void setName(String newName) throws Exception;
+
+	/**
+	 * @return the title to display for user. Usually this is the name of variable.
+	 */
+	public abstract String getTitle() throws Exception;
+
+	/**
+	 * @return the name of component. Usually this is the name of variable.<br>
+	 *
+	 *         Difference between {@link #getName()} is that this method can return not only name of
+	 *         variable, but also some other, specific string for special {@link VariableSupport}'s,
+	 *         for example "this" for {@link ThisVariableSupport}, or name of property for
+	 *         {@link ExposedPropertyVariableSupport} .
+	 */
+	public String getComponentName() {
+		return "other";
+	}
+
+	/**
+	 * Allows {@link VariableSupport} add zero or more {@link Property}'s. Some implementation support
+	 * variable property, some - not.
+	 */
+	public void addProperties(List<Property> properties) {
+		// don't add any property by default
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Expressions
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if invocations of {@link #getReferenceExpression(NodeTarget)} and
+	 *         {@link #getAccessExpression(NodeTarget)} can be used for this {@link VariableSupport}.
+	 */
+	public boolean hasExpression(NodeTarget target) {
+		return false;
+	}
+
+	/**
+	 * Returns piece of Java code that should be used for passing reference on this object. It can
+	 * return different code depending on <code>target</code> argument, i.e. where it will be used.
+	 * For example, here is typical code:
+	 * <code>parentInfo.addMethodInvocation("add", info.getReferenceExpression(target));</code>
+	 *
+	 * @param target
+	 *          that {@link NodeTarget} that specifies position where expression will be used.
+	 */
+	public abstract String getReferenceExpression(NodeTarget target) throws Exception;
+
+	/**
+	 * Returns piece of Java code that should be used for calling some method. For example, here is
+	 * typical code:
+	 * <code>addMethodInvocationCode(info.getAccessExpression(true) + "setExpanded(true)");</code>
+	 * <p>
+	 * Result is almost same as #getAccessExpression(boolean), but adds "." in most cases. Only
+	 * exception are "this" components, where reference expression is "this", but access expression -
+	 * empty string.
+	 */
+	public abstract String getAccessExpression(NodeTarget target) throws Exception;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Conversion
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if this variable can be converted from local to field. Usually if
+	 *         there is variable at all, it is always possible, except case when variable is already
+	 *         field.
+	 */
+	public abstract boolean canConvertLocalToField();
+
+	/**
+	 * Converts local variable into field. If variable is already field, ignore conversion request.
+	 */
+	public abstract void convertLocalToField() throws Exception;
+
+	/**
+	 * @return <code>true</code> if this variable can be converted from field to local.
+	 */
+	public abstract boolean canConvertFieldToLocal();
+
+	/**
+	 * Converts field into local variable. If variable is already local variable, ignore conversion
+	 * request.
+	 */
+	public abstract void convertFieldToLocal() throws Exception;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Target
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Returns the {@link StatementTarget} that describes default location for new {@link Statement}.<br>
+	 *
+	 * NOTE: in some cases it may change the {@link VariableSupport} instance of the {@link JavaInfo}.
+	 * So the example code below is wrong:
+	 *
+	 * <pre>
 	 * <code>
 	 * 		VariableSupport variableSupport = javaInfo.getVariableSupport();
 	 * 		StatementTarget statementTarget = variableSupport.getStatementTarget();
@@ -225,114 +225,114 @@ public boolean hasExpression(NodeTarget target) {
 	 * 		return variableSupport.getReferenceExpression(new NodeTarget(statementTarget));
 	 * </code>
 	 * </pre>
-   *
-   * @return the {@link StatementTarget} that describes default location for new {@link Statement}.
-   */
-  public abstract StatementTarget getStatementTarget() throws Exception;
-
-  /**
-   * Returns the {@link StatementTarget} that describes location for new child {@link JavaInfo}.
-   * Usually it uses {@link #getStatementTarget()}, but sometimes (for example for exposed
-   * components) special handling required.
-   * <p>
-   * This method is used only when this {@link JavaInfo} has no related {@link Statement}'s, so such
-   * special target should be prepared.
-   *
-   * @return the {@link StatementTarget} for new child {@link JavaInfo}.
-   */
-  public StatementTarget getChildTarget() throws Exception {
-    return getStatementTarget();
-  }
-
-  /**
-   * This method ensures that instance of component is ready at given target. For example in case of
-   * "lazy
-   * creation" we can ask for instance from any place, and method will create it. But for "usual"
-   * variables, for example local, we should move statements of {@link JavaInfo} and return new
-   * {@link StatementTarget} , located after component instance assignment.
-   *
-   * @param target
-   *          the {@link StatementTarget} where instance of component should be ready.
-   *
-   * @return the {@link StatementTarget} for adding association.
-   */
-  public void ensureInstanceReadyAt(StatementTarget target) throws Exception {
-    throw new NotImplementedException();
-  }
-
-  /**
-   * @param target
-   *          the {@link StatementTarget} where instance of component should be ready. For block
-   *          mode this is location where block of component should be placed, and association -
-   *          somewhere inside of this block. For lazy mode this is directly location of
-   *          association.
-   *
-   * @return the {@link StatementTarget} that describes location for adding association
-   *         {@link Statement} during create/move operations. In many cases this is same as
-   *         {@link #getStatementTarget()}, i.e. just any place where instance of component is
-   *         ready. But when some {@link MethodInvocation}'s of component have {@link MethodOrder}
-   *         before/after association, then we need to consider these invocations.
-   */
-  public StatementTarget getAssociationTarget(StatementTarget target) throws Exception {
-    throw new NotImplementedException();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Adding
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @param associationTarget
-   *          the {@link StatementTarget} where component association should be located
-   *
-   * @return the source of statement that should be added as part of new component adding. For local
-   *         variables this is variable declaration, for field - assignment to field. This method
-   *         should also do any operations required to make returned code correct, for example add
-   *         imports, declare field (for variable as field).
-   */
-  public String add_getVariableStatementSource(StatementTarget associationTarget) throws Exception {
-    throw new NotImplementedException();
-  }
-
-  /**
-   * This method accepts {@link Statement} for source returned before from
-   * {@link #add_getVariableStatementSource(StatementTarget)}. It can for example add related nodes
-   * for its {@link JavaInfo}.
-   */
-  public void add_setVariableStatement(Statement statement) throws Exception {
-    throw new NotImplementedException();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Delete
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Allows {@link VariableSupport} do some action before component delete.<br>
-   * For example we can remember {@link VariableDeclaration}, that is not removed yet - in
-   * {@link #deleteAfter()} it can be already removed.
-   */
-  public void deleteBefore() throws Exception {
-  }
-
-  /**
-   * Allows {@link VariableSupport} do some action after component delete.<br>
-   * For example it can delete variable/field declaration.
-   */
-  public void deleteAfter() throws Exception {
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link IPreferenceStore} for accessing this {@link JavaInfo} toolkit preferences.
-   */
-  protected final IPreferenceStore getPreferences() {
-    return m_javaInfo.getDescription().getToolkit().getPreferences();
-  }
+	 *
+	 * @return the {@link StatementTarget} that describes default location for new {@link Statement}.
+	 */
+	public abstract StatementTarget getStatementTarget() throws Exception;
+
+	/**
+	 * Returns the {@link StatementTarget} that describes location for new child {@link JavaInfo}.
+	 * Usually it uses {@link #getStatementTarget()}, but sometimes (for example for exposed
+	 * components) special handling required.
+	 * <p>
+	 * This method is used only when this {@link JavaInfo} has no related {@link Statement}'s, so such
+	 * special target should be prepared.
+	 *
+	 * @return the {@link StatementTarget} for new child {@link JavaInfo}.
+	 */
+	public StatementTarget getChildTarget() throws Exception {
+		return getStatementTarget();
+	}
+
+	/**
+	 * This method ensures that instance of component is ready at given target. For example in case of
+	 * "lazy
+	 * creation" we can ask for instance from any place, and method will create it. But for "usual"
+	 * variables, for example local, we should move statements of {@link JavaInfo} and return new
+	 * {@link StatementTarget} , located after component instance assignment.
+	 *
+	 * @param target
+	 *          the {@link StatementTarget} where instance of component should be ready.
+	 *
+	 * @return the {@link StatementTarget} for adding association.
+	 */
+	public void ensureInstanceReadyAt(StatementTarget target) throws Exception {
+		throw new NotImplementedException();
+	}
+
+	/**
+	 * @param target
+	 *          the {@link StatementTarget} where instance of component should be ready. For block
+	 *          mode this is location where block of component should be placed, and association -
+	 *          somewhere inside of this block. For lazy mode this is directly location of
+	 *          association.
+	 *
+	 * @return the {@link StatementTarget} that describes location for adding association
+	 *         {@link Statement} during create/move operations. In many cases this is same as
+	 *         {@link #getStatementTarget()}, i.e. just any place where instance of component is
+	 *         ready. But when some {@link MethodInvocation}'s of component have {@link MethodOrder}
+	 *         before/after association, then we need to consider these invocations.
+	 */
+	public StatementTarget getAssociationTarget(StatementTarget target) throws Exception {
+		throw new NotImplementedException();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Adding
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @param associationTarget
+	 *          the {@link StatementTarget} where component association should be located
+	 *
+	 * @return the source of statement that should be added as part of new component adding. For local
+	 *         variables this is variable declaration, for field - assignment to field. This method
+	 *         should also do any operations required to make returned code correct, for example add
+	 *         imports, declare field (for variable as field).
+	 */
+	public String add_getVariableStatementSource(StatementTarget associationTarget) throws Exception {
+		throw new NotImplementedException();
+	}
+
+	/**
+	 * This method accepts {@link Statement} for source returned before from
+	 * {@link #add_getVariableStatementSource(StatementTarget)}. It can for example add related nodes
+	 * for its {@link JavaInfo}.
+	 */
+	public void add_setVariableStatement(Statement statement) throws Exception {
+		throw new NotImplementedException();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Delete
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Allows {@link VariableSupport} do some action before component delete.<br>
+	 * For example we can remember {@link VariableDeclaration}, that is not removed yet - in
+	 * {@link #deleteAfter()} it can be already removed.
+	 */
+	public void deleteBefore() throws Exception {
+	}
+
+	/**
+	 * Allows {@link VariableSupport} do some action after component delete.<br>
+	 * For example it can delete variable/field declaration.
+	 */
+	public void deleteAfter() throws Exception {
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link IPreferenceStore} for accessing this {@link JavaInfo} toolkit preferences.
+	 */
+	protected final IPreferenceStore getPreferences() {
+		return m_javaInfo.getDescription().getToolkit().getPreferences();
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/VariableUtils.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/VariableUtils.java
index fc6c87679..5ed048ad2 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/VariableUtils.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/VariableUtils.java
@@ -29,139 +29,139 @@
  * @coverage core.model.variable
  */
 public final class VariableUtils {
-  private final JavaInfo m_javaInfo;
+	private final JavaInfo m_javaInfo;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public VariableUtils(JavaInfo javaInfo) {
-    m_javaInfo = javaInfo;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public VariableUtils(JavaInfo javaInfo) {
+		m_javaInfo = javaInfo;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Prefixes/suffixes
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the unique name of field by given local variable name.
-   */
-  public String getUniqueFieldName(String localName, VariableDeclaration excludedVariable) {
-    return convertName(
-        -1,
-        localName,
-        JavaCore.CODEASSIST_LOCAL_PREFIXES,
-        JavaCore.CODEASSIST_LOCAL_SUFFIXES,
-        JavaCore.CODEASSIST_FIELD_PREFIXES,
-        JavaCore.CODEASSIST_FIELD_SUFFIXES,
-        excludedVariable);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Prefixes/suffixes
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the unique name of field by given local variable name.
+	 */
+	public String getUniqueFieldName(String localName, VariableDeclaration excludedVariable) {
+		return convertName(
+				-1,
+				localName,
+				JavaCore.CODEASSIST_LOCAL_PREFIXES,
+				JavaCore.CODEASSIST_LOCAL_SUFFIXES,
+				JavaCore.CODEASSIST_FIELD_PREFIXES,
+				JavaCore.CODEASSIST_FIELD_SUFFIXES,
+				excludedVariable);
+	}
 
-  /**
-   * Generates unique variable name by converting from local/field to field/local.
-   */
-  public String convertName(int position,
-      String name,
-      String keyPrefixes_source,
-      String keySuffixes_source,
-      String keyPrefixes_target,
-      String keySuffixes_target,
-      VariableDeclaration excludedVariable) {
-    // remove possible _NNN from base name
-    {
-      int index = name.lastIndexOf('_');
-      if (index != -1) {
-        String possibleNumber = name.substring(index + 1);
-        if (StringUtils.isNumeric(possibleNumber)) {
-          name = name.substring(0, index);
-        }
-      }
-    }
-    // remove source prefix/suffix
-    name = stripPrefixSuffix(name, keyPrefixes_source, keySuffixes_source);
-    // add target prefix/suffix
-    name = addPrefixSuffix(name, keyPrefixes_target, keySuffixes_target);
-    // generate unique name
-    return m_javaInfo.getEditor().getUniqueVariableName(position, name, excludedVariable);
-  }
+	/**
+	 * Generates unique variable name by converting from local/field to field/local.
+	 */
+	public String convertName(int position,
+			String name,
+			String keyPrefixes_source,
+			String keySuffixes_source,
+			String keyPrefixes_target,
+			String keySuffixes_target,
+			VariableDeclaration excludedVariable) {
+		// remove possible _NNN from base name
+		{
+			int index = name.lastIndexOf('_');
+			if (index != -1) {
+				String possibleNumber = name.substring(index + 1);
+				if (StringUtils.isNumeric(possibleNumber)) {
+					name = name.substring(0, index);
+				}
+			}
+		}
+		// remove source prefix/suffix
+		name = stripPrefixSuffix(name, keyPrefixes_source, keySuffixes_source);
+		// add target prefix/suffix
+		name = addPrefixSuffix(name, keyPrefixes_target, keySuffixes_target);
+		// generate unique name
+		return m_javaInfo.getEditor().getUniqueVariableName(position, name, excludedVariable);
+	}
 
-  /**
-   * @return the name with added prefix/suffix.
-   *
-   * @param keyPrefixes
-   *          the key of prefixes in {@link IJavaProject} options.
-   * @param keySuffixes
-   *          the key of suffixes in {@link IJavaProject} options.
-   */
-  public String addPrefixSuffix(String name, String keyPrefixes, String keySuffixes) {
-    // add prefix
-    {
-      String[] prefixes = getVariablesPrefixSuffixOptions(keyPrefixes);
-      if (prefixes.length != 0) {
-        String prefix = prefixes[0];
-        if (!name.startsWith(prefix)) {
-          name = prefix + name;
-        }
-      }
-    }
-    // add suffix
-    {
-      String[] suffixes = getVariablesPrefixSuffixOptions(keySuffixes);
-      if (suffixes.length != 0) {
-        String suffix = suffixes[0];
-        if (!name.endsWith(suffix)) {
-          name = name + suffix;
-        }
-      }
-    }
-    // return result
-    return name;
-  }
+	/**
+	 * @return the name with added prefix/suffix.
+	 *
+	 * @param keyPrefixes
+	 *          the key of prefixes in {@link IJavaProject} options.
+	 * @param keySuffixes
+	 *          the key of suffixes in {@link IJavaProject} options.
+	 */
+	public String addPrefixSuffix(String name, String keyPrefixes, String keySuffixes) {
+		// add prefix
+		{
+			String[] prefixes = getVariablesPrefixSuffixOptions(keyPrefixes);
+			if (prefixes.length != 0) {
+				String prefix = prefixes[0];
+				if (!name.startsWith(prefix)) {
+					name = prefix + name;
+				}
+			}
+		}
+		// add suffix
+		{
+			String[] suffixes = getVariablesPrefixSuffixOptions(keySuffixes);
+			if (suffixes.length != 0) {
+				String suffix = suffixes[0];
+				if (!name.endsWith(suffix)) {
+					name = name + suffix;
+				}
+			}
+		}
+		// return result
+		return name;
+	}
 
-  /**
-   * @return the name with removed prefix/suffix.
-   *
-   * @param keyPrefixes
-   *          the key of prefixes in {@link IJavaProject} options.
-   * @param keySuffixes
-   *          the key of suffixes in {@link IJavaProject} options.
-   */
-  public String stripPrefixSuffix(String name, String keyPrefixes, String keySuffixes) {
-    Assert.isNotNull(name);
-    Assert.isNotNull(keyPrefixes);
-    Assert.isNotNull(keySuffixes);
-    // remove prefix
-    {
-      String[] prefixes = getVariablesPrefixSuffixOptions(keyPrefixes);
-      for (String prefix : prefixes) {
-        if (name.startsWith(prefix)) {
-          name = name.substring(prefix.length());
-          break;
-        }
-      }
-    }
-    // remove suffix
-    {
-      String[] suffixes = getVariablesPrefixSuffixOptions(keySuffixes);
-      for (String suffix : suffixes) {
-        if (name.endsWith(suffix)) {
-          name = name.substring(0, name.length() - suffix.length());
-          break;
-        }
-      }
-    }
-    // return result
-    return name;
-  }
+	/**
+	 * @return the name with removed prefix/suffix.
+	 *
+	 * @param keyPrefixes
+	 *          the key of prefixes in {@link IJavaProject} options.
+	 * @param keySuffixes
+	 *          the key of suffixes in {@link IJavaProject} options.
+	 */
+	public String stripPrefixSuffix(String name, String keyPrefixes, String keySuffixes) {
+		Assert.isNotNull(name);
+		Assert.isNotNull(keyPrefixes);
+		Assert.isNotNull(keySuffixes);
+		// remove prefix
+		{
+			String[] prefixes = getVariablesPrefixSuffixOptions(keyPrefixes);
+			for (String prefix : prefixes) {
+				if (name.startsWith(prefix)) {
+					name = name.substring(prefix.length());
+					break;
+				}
+			}
+		}
+		// remove suffix
+		{
+			String[] suffixes = getVariablesPrefixSuffixOptions(keySuffixes);
+			for (String suffix : suffixes) {
+				if (name.endsWith(suffix)) {
+					name = name.substring(0, name.length() - suffix.length());
+					break;
+				}
+			}
+		}
+		// return result
+		return name;
+	}
 
-  /**
-   * @return the array of prefixes or suffixes for given key.
-   */
-  private String[] getVariablesPrefixSuffixOptions(String key) {
-    IJavaProject javaProject = m_javaInfo.getEditor().getJavaProject();
-    Map<String, String> javaOptions = ProjectUtils.getOptions(javaProject);
-    return StringUtils.split(javaOptions.get(key), ",");
-  }
+	/**
+	 * @return the array of prefixes or suffixes for given key.
+	 */
+	private String[] getVariablesPrefixSuffixOptions(String key) {
+		IJavaProject javaProject = m_javaInfo.getEditor().getJavaProject();
+		Map<String, String> javaOptions = ProjectUtils.getOptions(javaProject);
+		return StringUtils.split(javaOptions.get(key), ",");
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/VoidInvocationVariableSupport.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/VoidInvocationVariableSupport.java
index ee6b58a3e..79a5c2e41 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/VoidInvocationVariableSupport.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/VoidInvocationVariableSupport.java
@@ -29,105 +29,105 @@
  * @coverage core.model.variable
  */
 public final class VoidInvocationVariableSupport extends AbstractNoNameVariableSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public VoidInvocationVariableSupport(JavaInfo javaInfo) {
-    super(javaInfo);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public VoidInvocationVariableSupport(JavaInfo javaInfo) {
+		super(javaInfo);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    return "void";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		return "void";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getTitle() throws Exception {
-    MethodInvocation invocation = getInvocation();
-    return AstNodeUtils.getMethodSignature(invocation);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getTitle() throws Exception {
+		MethodInvocation invocation = getInvocation();
+		return AstNodeUtils.getMethodSignature(invocation);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Expressions
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getReferenceExpression(NodeTarget target) throws Exception {
-    throw new IllegalStateException();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Expressions
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getReferenceExpression(NodeTarget target) throws Exception {
+		throw new IllegalStateException();
+	}
 
-  @Override
-  public String getAccessExpression(NodeTarget target) throws Exception {
-    throw new IllegalStateException();
-  }
+	@Override
+	public String getAccessExpression(NodeTarget target) throws Exception {
+		throw new IllegalStateException();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Target
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public StatementTarget getStatementTarget() throws Exception {
-    throw new IllegalStateException();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Target
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public StatementTarget getStatementTarget() throws Exception {
+		throw new IllegalStateException();
+	}
 
-  @Override
-  public void ensureInstanceReadyAt(StatementTarget target) throws Exception {
-    m_javaInfo.getEditor().moveStatement(getStatement(), target);
-  }
+	@Override
+	public void ensureInstanceReadyAt(StatementTarget target) throws Exception {
+		m_javaInfo.getEditor().moveStatement(getStatement(), target);
+	}
 
-  @Override
-  public StatementTarget getAssociationTarget(StatementTarget target) throws Exception {
-    return target;
-  }
+	@Override
+	public StatementTarget getAssociationTarget(StatementTarget target) throws Exception {
+		return target;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Adding
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String add_getVariableStatementSource(StatementTarget associationTarget) throws Exception {
-    NodeTarget creationTarget = new NodeTarget(associationTarget);
-    return m_javaInfo.getCreationSupport().add_getSource(creationTarget) + ";";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Adding
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String add_getVariableStatementSource(StatementTarget associationTarget) throws Exception {
+		NodeTarget creationTarget = new NodeTarget(associationTarget);
+		return m_javaInfo.getCreationSupport().add_getSource(creationTarget) + ";";
+	}
 
-  @Override
-  public void add_setVariableStatement(Statement statement) throws Exception {
-    ExpressionStatement expressionStatement = (ExpressionStatement) statement;
-    m_javaInfo.getCreationSupport().add_setSourceExpression(expressionStatement.getExpression());
-  }
+	@Override
+	public void add_setVariableStatement(Statement statement) throws Exception {
+		ExpressionStatement expressionStatement = (ExpressionStatement) statement;
+		m_javaInfo.getCreationSupport().add_setSourceExpression(expressionStatement.getExpression());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the creation {@link MethodInvocation}.
-   */
-  private MethodInvocation getInvocation() throws Exception {
-    return (MethodInvocation) m_javaInfo.getCreationSupport().getNode();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the creation {@link MethodInvocation}.
+	 */
+	private MethodInvocation getInvocation() throws Exception {
+		return (MethodInvocation) m_javaInfo.getCreationSupport().getNode();
+	}
 
-  /**
-   * @return the {@link Statement} for creation {@link MethodInvocation}.
-   */
-  private Statement getStatement() throws Exception {
-    MethodInvocation invocation = getInvocation();
-    return AstNodeUtils.getEnclosingStatement(invocation);
-  }
+	/**
+	 * @return the {@link Statement} for creation {@link MethodInvocation}.
+	 */
+	private Statement getStatement() throws Exception {
+		MethodInvocation invocation = getInvocation();
+		return AstNodeUtils.getEnclosingStatement(invocation);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/WrapperMethodControlVariableSupport.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/WrapperMethodControlVariableSupport.java
index d9342e99d..24f325d4c 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/WrapperMethodControlVariableSupport.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/WrapperMethodControlVariableSupport.java
@@ -22,68 +22,68 @@
  * @coverage core.model.variable
  */
 public class WrapperMethodControlVariableSupport extends AbstractImplicitVariableSupport {
-  private final WrapperByMethod m_wrapper;
+	private final WrapperByMethod m_wrapper;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public WrapperMethodControlVariableSupport(JavaInfo javaInfo, WrapperByMethod wrapper) {
-    super(javaInfo);
-    m_wrapper = wrapper;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public WrapperMethodControlVariableSupport(JavaInfo javaInfo, WrapperByMethod wrapper) {
+		super(javaInfo);
+		m_wrapper = wrapper;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    return "viewer";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		return "viewer";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean isDefault() {
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean isDefault() {
+		return true;
+	}
 
-  @Override
-  public String getTitle() throws Exception {
-    return m_wrapper.getWrapperInfo().getVariableSupport().getTitle()
-        + "."
-        + m_wrapper.getControlMethod().getName()
-        + "()";
-  }
+	@Override
+	public String getTitle() throws Exception {
+		return m_wrapper.getWrapperInfo().getVariableSupport().getTitle()
+				+ "."
+				+ m_wrapper.getControlMethod().getName()
+				+ "()";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Target
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void ensureInstanceReadyAt(StatementTarget target) throws Exception {
-    m_wrapper.getWrapperInfo().getVariableSupport().ensureInstanceReadyAt(target);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Target
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void ensureInstanceReadyAt(StatementTarget target) throws Exception {
+		m_wrapper.getWrapperInfo().getVariableSupport().ensureInstanceReadyAt(target);
+	}
 
-  @Override
-  public StatementTarget getAssociationTarget(StatementTarget target) throws Exception {
-    return m_wrapper.getWrapperInfo().getVariableSupport().getAssociationTarget(target);
-  }
+	@Override
+	public StatementTarget getAssociationTarget(StatementTarget target) throws Exception {
+		return m_wrapper.getWrapperInfo().getVariableSupport().getAssociationTarget(target);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Materializing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected JavaInfo getParent() {
-    return m_wrapper.getWrapperInfo();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Materializing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected JavaInfo getParent() {
+		return m_wrapper.getWrapperInfo();
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/description/FieldInitializerVariableDescription.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/description/FieldInitializerVariableDescription.java
index f43f574a2..4b1f32741 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/description/FieldInitializerVariableDescription.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/description/FieldInitializerVariableDescription.java
@@ -34,81 +34,81 @@
  * @coverage core.model.variable
  */
 public class FieldInitializerVariableDescription extends VariableSupportDescription {
-  public static final String ID = "org.eclipse.wb.core.model.variable.fieldInitializer";
-  public static final VariableSupportDescription INSTANCE =
-      new FieldInitializerVariableDescription();
+	public static final String ID = "org.eclipse.wb.core.model.variable.fieldInitializer";
+	public static final VariableSupportDescription INSTANCE =
+			new FieldInitializerVariableDescription();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private FieldInitializerVariableDescription() {
-    super(ID,
-        "Init. Field",
-        "declarate unique field with component, initialize directly at field declaration");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private FieldInitializerVariableDescription() {
+		super(ID,
+				"Init. Field",
+				"declarate unique field with component, initialize directly at field declaration");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // VariableSupportDescription
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Class<? extends VariableSupport> getType() {
-    return FieldInitializerVariableSupport.class;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// VariableSupportDescription
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Class<? extends VariableSupport> getType() {
+		return FieldInitializerVariableSupport.class;
+	}
 
-  @Override
-  public VariableSupport createSupport(JavaInfo javaInfo) {
-    return new FieldInitializerVariableSupport(javaInfo);
-  }
+	@Override
+	public VariableSupport createSupport(JavaInfo javaInfo) {
+		return new FieldInitializerVariableSupport(javaInfo);
+	}
 
-  @Override
-  public void configureDefaultPreferences(IPreferenceStore store) {
-    super.configureDefaultPreferences(store);
-    store.setDefault(FieldInitializerVariableSupport.P_PREFIX_THIS, false);
-    store.setDefault(
-        FieldInitializerVariableSupport.P_FIELD_MODIFIER,
-        FieldVariableSupport.V_FIELD_MODIFIER_PRIVATE);
-  }
+	@Override
+	public void configureDefaultPreferences(IPreferenceStore store) {
+		super.configureDefaultPreferences(store);
+		store.setDefault(FieldInitializerVariableSupport.P_PREFIX_THIS, false);
+		store.setDefault(
+				FieldInitializerVariableSupport.P_FIELD_MODIFIER,
+				FieldVariableSupport.V_FIELD_MODIFIER_PRIVATE);
+	}
 
-  @Override
-  public GenerationPropertiesComposite createPropertiesComposite(Composite parent,
-      DataBindManager bindManager,
-      IPreferenceStore store) {
-    return new PropertiesComposite(parent, bindManager, store);
-  }
+	@Override
+	public GenerationPropertiesComposite createPropertiesComposite(Composite parent,
+			DataBindManager bindManager,
+			IPreferenceStore store) {
+		return new PropertiesComposite(parent, bindManager, store);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Properties composite
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static class PropertiesComposite extends GenerationPropertiesComposite {
-    public PropertiesComposite(Composite parent,
-        DataBindManager bindManager,
-        IPreferenceStore preferences) {
-      super(parent, bindManager, preferences);
-      GridLayoutFactory.create(this).columns(2);
-      {
-        Button button =
-            checkButton(
-                this,
-                "Prefix field access with \"this\"",
-                FieldInitializerVariableSupport.P_PREFIX_THIS);
-        GridDataFactory.modify(button).spanH(2).fillH();
-      }
-      {
-        new Label(this, SWT.NONE).setText("Field modifier:");
-        Combo modifierCombo = new Combo(this, SWT.READ_ONLY);
-        GridDataFactory.create(modifierCombo).grabH().fillH();
-        modifierCombo.add("private");
-        modifierCombo.add("package private");
-        modifierCombo.add("protected");
-        modifierCombo.add("public");
-        bindSelection(modifierCombo, FieldInitializerVariableSupport.P_FIELD_MODIFIER);
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Properties composite
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static class PropertiesComposite extends GenerationPropertiesComposite {
+		public PropertiesComposite(Composite parent,
+				DataBindManager bindManager,
+				IPreferenceStore preferences) {
+			super(parent, bindManager, preferences);
+			GridLayoutFactory.create(this).columns(2);
+			{
+				Button button =
+						checkButton(
+								this,
+								"Prefix field access with \"this\"",
+								FieldInitializerVariableSupport.P_PREFIX_THIS);
+				GridDataFactory.modify(button).spanH(2).fillH();
+			}
+			{
+				new Label(this, SWT.NONE).setText("Field modifier:");
+				Combo modifierCombo = new Combo(this, SWT.READ_ONLY);
+				GridDataFactory.create(modifierCombo).grabH().fillH();
+				modifierCombo.add("private");
+				modifierCombo.add("package private");
+				modifierCombo.add("protected");
+				modifierCombo.add("public");
+				bindSelection(modifierCombo, FieldInitializerVariableSupport.P_FIELD_MODIFIER);
+			}
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/description/FieldUniqueVariableDescription.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/description/FieldUniqueVariableDescription.java
index 016168717..bbef52371 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/description/FieldUniqueVariableDescription.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/description/FieldUniqueVariableDescription.java
@@ -33,78 +33,78 @@
  * @coverage core.model.variable
  */
 public class FieldUniqueVariableDescription extends VariableSupportDescription {
-  public static final String ID = "org.eclipse.wb.core.model.variable.fieldUnique";
-  public static final VariableSupportDescription INSTANCE = new FieldUniqueVariableDescription();
+	public static final String ID = "org.eclipse.wb.core.model.variable.fieldUnique";
+	public static final VariableSupportDescription INSTANCE = new FieldUniqueVariableDescription();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private FieldUniqueVariableDescription() {
-    super(ID, "Field", "declarate unique field with component, initialize field later in code");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private FieldUniqueVariableDescription() {
+		super(ID, "Field", "declarate unique field with component, initialize field later in code");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // VariableSupportDescription
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Class<? extends VariableSupport> getType() {
-    return FieldUniqueVariableSupport.class;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// VariableSupportDescription
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Class<? extends VariableSupport> getType() {
+		return FieldUniqueVariableSupport.class;
+	}
 
-  @Override
-  public VariableSupport createSupport(JavaInfo javaInfo) {
-    return new FieldUniqueVariableSupport(javaInfo);
-  }
+	@Override
+	public VariableSupport createSupport(JavaInfo javaInfo) {
+		return new FieldUniqueVariableSupport(javaInfo);
+	}
 
-  @Override
-  public void configureDefaultPreferences(IPreferenceStore store) {
-    super.configureDefaultPreferences(store);
-    store.setDefault(FieldUniqueVariableSupport.P_PREFIX_THIS, false);
-    store.setDefault(
-        FieldUniqueVariableSupport.P_FIELD_MODIFIER,
-        FieldVariableSupport.V_FIELD_MODIFIER_PRIVATE);
-  }
+	@Override
+	public void configureDefaultPreferences(IPreferenceStore store) {
+		super.configureDefaultPreferences(store);
+		store.setDefault(FieldUniqueVariableSupport.P_PREFIX_THIS, false);
+		store.setDefault(
+				FieldUniqueVariableSupport.P_FIELD_MODIFIER,
+				FieldVariableSupport.V_FIELD_MODIFIER_PRIVATE);
+	}
 
-  @Override
-  public GenerationPropertiesComposite createPropertiesComposite(Composite parent,
-      DataBindManager bindManager,
-      IPreferenceStore store) {
-    return new PropertiesComposite(parent, bindManager, store);
-  }
+	@Override
+	public GenerationPropertiesComposite createPropertiesComposite(Composite parent,
+			DataBindManager bindManager,
+			IPreferenceStore store) {
+		return new PropertiesComposite(parent, bindManager, store);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Properties composite
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static class PropertiesComposite extends GenerationPropertiesComposite {
-    public PropertiesComposite(Composite parent,
-        DataBindManager bindManager,
-        IPreferenceStore preferences) {
-      super(parent, bindManager, preferences);
-      GridLayoutFactory.create(this).columns(2);
-      {
-        Button button =
-            checkButton(
-                this,
-                "Prefix field access with \"this\"",
-                FieldUniqueVariableSupport.P_PREFIX_THIS);
-        GridDataFactory.modify(button).spanH(2).fillH();
-      }
-      {
-        new Label(this, SWT.NONE).setText("Field modifier:");
-        Combo modifierCombo = new Combo(this, SWT.READ_ONLY);
-        GridDataFactory.create(modifierCombo).grabH().fillH();
-        modifierCombo.add("private");
-        modifierCombo.add("package private");
-        modifierCombo.add("protected");
-        modifierCombo.add("public");
-        bindSelection(modifierCombo, FieldUniqueVariableSupport.P_FIELD_MODIFIER);
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Properties composite
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static class PropertiesComposite extends GenerationPropertiesComposite {
+		public PropertiesComposite(Composite parent,
+				DataBindManager bindManager,
+				IPreferenceStore preferences) {
+			super(parent, bindManager, preferences);
+			GridLayoutFactory.create(this).columns(2);
+			{
+				Button button =
+						checkButton(
+								this,
+								"Prefix field access with \"this\"",
+								FieldUniqueVariableSupport.P_PREFIX_THIS);
+				GridDataFactory.modify(button).spanH(2).fillH();
+			}
+			{
+				new Label(this, SWT.NONE).setText("Field modifier:");
+				Combo modifierCombo = new Combo(this, SWT.READ_ONLY);
+				GridDataFactory.create(modifierCombo).grabH().fillH();
+				modifierCombo.add("private");
+				modifierCombo.add("package private");
+				modifierCombo.add("protected");
+				modifierCombo.add("public");
+				bindSelection(modifierCombo, FieldUniqueVariableSupport.P_FIELD_MODIFIER);
+			}
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/description/LazyVariableDescription.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/description/LazyVariableDescription.java
index 39b0b893e..5a3b4c56f 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/description/LazyVariableDescription.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/description/LazyVariableDescription.java
@@ -31,69 +31,69 @@
  * @coverage core.model.variable
  */
 public class LazyVariableDescription extends VariableSupportDescription {
-  public static final String ID = "org.eclipse.wb.core.model.variable.lazy";
-  public static final VariableSupportDescription INSTANCE = new LazyVariableDescription();
+	public static final String ID = "org.eclipse.wb.core.model.variable.lazy";
+	public static final VariableSupportDescription INSTANCE = new LazyVariableDescription();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private LazyVariableDescription() {
-    super(ID, "Lazy", "each component in separate getXXX() method");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private LazyVariableDescription() {
+		super(ID, "Lazy", "each component in separate getXXX() method");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // VariableSupportDescription
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Class<? extends VariableSupport> getType() {
-    return LazyVariableSupport.class;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// VariableSupportDescription
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Class<? extends VariableSupport> getType() {
+		return LazyVariableSupport.class;
+	}
 
-  @Override
-  public VariableSupport createSupport(JavaInfo javaInfo) {
-    return new LazyVariableSupport(javaInfo);
-  }
+	@Override
+	public VariableSupport createSupport(JavaInfo javaInfo) {
+		return new LazyVariableSupport(javaInfo);
+	}
 
-  @Override
-  public void configureDefaultPreferences(IPreferenceStore store) {
-    super.configureDefaultPreferences(store);
-    store.setDefault(
-        LazyVariableSupport.P_METHOD_MODIFIER,
-        LazyVariableSupport.V_METHOD_MODIFIER_PRIVATE);
-  }
+	@Override
+	public void configureDefaultPreferences(IPreferenceStore store) {
+		super.configureDefaultPreferences(store);
+		store.setDefault(
+				LazyVariableSupport.P_METHOD_MODIFIER,
+				LazyVariableSupport.V_METHOD_MODIFIER_PRIVATE);
+	}
 
-  @Override
-  public GenerationPropertiesComposite createPropertiesComposite(Composite parent,
-      DataBindManager bindManager,
-      IPreferenceStore store) {
-    return new PropertiesComposite(parent, bindManager, store);
-  }
+	@Override
+	public GenerationPropertiesComposite createPropertiesComposite(Composite parent,
+			DataBindManager bindManager,
+			IPreferenceStore store) {
+		return new PropertiesComposite(parent, bindManager, store);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Properties composite
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static class PropertiesComposite extends GenerationPropertiesComposite {
-    public PropertiesComposite(Composite parent,
-        DataBindManager bindManager,
-        IPreferenceStore preferences) {
-      super(parent, bindManager, preferences);
-      GridLayoutFactory.create(this).columns(2);
-      {
-        new Label(this, SWT.NONE).setText("Method modifier:");
-        Combo modifierCombo = new Combo(this, SWT.READ_ONLY);
-        GridDataFactory.create(modifierCombo).grabH().fillH();
-        modifierCombo.add("private");
-        modifierCombo.add("package private");
-        modifierCombo.add("protected");
-        modifierCombo.add("public");
-        bindSelection(modifierCombo, LazyVariableSupport.P_METHOD_MODIFIER);
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Properties composite
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static class PropertiesComposite extends GenerationPropertiesComposite {
+		public PropertiesComposite(Composite parent,
+				DataBindManager bindManager,
+				IPreferenceStore preferences) {
+			super(parent, bindManager, preferences);
+			GridLayoutFactory.create(this).columns(2);
+			{
+				new Label(this, SWT.NONE).setText("Method modifier:");
+				Combo modifierCombo = new Combo(this, SWT.READ_ONLY);
+				GridDataFactory.create(modifierCombo).grabH().fillH();
+				modifierCombo.add("private");
+				modifierCombo.add("package private");
+				modifierCombo.add("protected");
+				modifierCombo.add("public");
+				bindSelection(modifierCombo, LazyVariableSupport.P_METHOD_MODIFIER);
+			}
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/description/LocalUniqueVariableDescription.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/description/LocalUniqueVariableDescription.java
index 867c52d45..086cb792f 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/description/LocalUniqueVariableDescription.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/description/LocalUniqueVariableDescription.java
@@ -26,56 +26,56 @@
  * @coverage core.model.variable
  */
 public class LocalUniqueVariableDescription extends VariableSupportDescription {
-  public static final String ID = "org.eclipse.wb.core.model.variable.localUnique";
-  public static final VariableSupportDescription INSTANCE = new LocalUniqueVariableDescription();
+	public static final String ID = "org.eclipse.wb.core.model.variable.localUnique";
+	public static final VariableSupportDescription INSTANCE = new LocalUniqueVariableDescription();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private LocalUniqueVariableDescription() {
-    super(ID, "Local", "declare unique local variable with component, initialize at declaration");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private LocalUniqueVariableDescription() {
+		super(ID, "Local", "declare unique local variable with component, initialize at declaration");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // VariableSupportDescription
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Class<? extends VariableSupport> getType() {
-    return LocalUniqueVariableSupport.class;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// VariableSupportDescription
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Class<? extends VariableSupport> getType() {
+		return LocalUniqueVariableSupport.class;
+	}
 
-  @Override
-  public VariableSupport createSupport(JavaInfo javaInfo) {
-    return new LocalUniqueVariableSupport(javaInfo);
-  }
+	@Override
+	public VariableSupport createSupport(JavaInfo javaInfo) {
+		return new LocalUniqueVariableSupport(javaInfo);
+	}
 
-  @Override
-  public void configureDefaultPreferences(IPreferenceStore store) {
-    store.setDefault(LocalUniqueVariableSupport.P_DECLARE_FINAL, false);
-  }
+	@Override
+	public void configureDefaultPreferences(IPreferenceStore store) {
+		store.setDefault(LocalUniqueVariableSupport.P_DECLARE_FINAL, false);
+	}
 
-  @Override
-  public GenerationPropertiesComposite createPropertiesComposite(Composite parent,
-      DataBindManager bindManager,
-      IPreferenceStore store) {
-    return new PropertiesComposite(parent, bindManager, store);
-  }
+	@Override
+	public GenerationPropertiesComposite createPropertiesComposite(Composite parent,
+			DataBindManager bindManager,
+			IPreferenceStore store) {
+		return new PropertiesComposite(parent, bindManager, store);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Properties composite
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static class PropertiesComposite extends GenerationPropertiesComposite {
-    public PropertiesComposite(Composite parent,
-        DataBindManager bindManager,
-        IPreferenceStore preferences) {
-      super(parent, bindManager, preferences);
-      checkButton(this, "Declare variable as \"final\"", LocalUniqueVariableSupport.P_DECLARE_FINAL);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Properties composite
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static class PropertiesComposite extends GenerationPropertiesComposite {
+		public PropertiesComposite(Composite parent,
+				DataBindManager bindManager,
+				IPreferenceStore preferences) {
+			super(parent, bindManager, preferences);
+			checkButton(this, "Declare variable as \"final\"", LocalUniqueVariableSupport.P_DECLARE_FINAL);
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/description/VariableSupportDescription.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/description/VariableSupportDescription.java
index 631968aa4..0bd9ba59b 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/description/VariableSupportDescription.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/model/variable/description/VariableSupportDescription.java
@@ -21,28 +21,28 @@
  * @coverage core.model.variable
  */
 public abstract class VariableSupportDescription extends GenerationDescription {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected VariableSupportDescription(String id, String name, String description) {
-    super(id, name, description);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected VariableSupportDescription(String id, String name, String description) {
+		super(id, name, description);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the type of {@link VariableSupport} that will be created by this
-   *         {@link VariableSupportDescription}.
-   */
-  public abstract Class<? extends VariableSupport> getType();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the type of {@link VariableSupport} that will be created by this
+	 *         {@link VariableSupportDescription}.
+	 */
+	public abstract Class<? extends VariableSupport> getType();
 
-  /**
-   * @return the {@link VariableSupport} for given {@link JavaInfo}.
-   */
-  public abstract VariableSupport createSupport(JavaInfo javaInfo);
+	/**
+	 * @return the {@link VariableSupport} for given {@link JavaInfo}.
+	 */
+	public abstract VariableSupport createSupport(JavaInfo javaInfo);
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/ExternalizeStringsContributionItem.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/ExternalizeStringsContributionItem.java
index 0311b5d3d..a9777d9ee 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/ExternalizeStringsContributionItem.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/ExternalizeStringsContributionItem.java
@@ -45,222 +45,222 @@
  * @coverage core.nls.ui
  */
 public final class ExternalizeStringsContributionItem extends ContributionItem {
-  private JavaInfo m_root;
-  private ToolItem m_toolItem;
-  private Menu m_menu;
+	private JavaInfo m_root;
+	private ToolItem m_toolItem;
+	private Menu m_menu;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets the root {@link JavaInfo} displayed currently in editor.
-   */
-  public void setRoot(JavaInfo root) {
-    m_root = root;
-    displayCurrentLocale();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets the root {@link JavaInfo} displayed currently in editor.
+	 */
+	public void setRoot(JavaInfo root) {
+		m_root = root;
+		displayCurrentLocale();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ContributionItem
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void fill(final ToolBar parent, int index) {
-    m_toolItem = new ToolItem(parent, SWT.DROP_DOWN);
-    if (isSpecialTime()) {
-      m_toolItem.setImage(DesignerPlugin.getImage("nls/ms16.png"));
-      m_toolItem.setToolTipText("Back in USSR");
-    } else {
-      m_toolItem.setImage(DesignerPlugin.getImage("nls/globe3.png"));
-      m_toolItem.setToolTipText(Messages.ExternalizeStringsContributionItem_externalizeToolTip);
-    }
-    // listener
-    m_toolItem.addListener(SWT.Selection, new Listener() {
-      @Override
-      public void handleEvent(Event event) {
-        handleClick(parent, event);
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ContributionItem
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void fill(final ToolBar parent, int index) {
+		m_toolItem = new ToolItem(parent, SWT.DROP_DOWN);
+		if (isSpecialTime()) {
+			m_toolItem.setImage(DesignerPlugin.getImage("nls/ms16.png"));
+			m_toolItem.setToolTipText("Back in USSR");
+		} else {
+			m_toolItem.setImage(DesignerPlugin.getImage("nls/globe3.png"));
+			m_toolItem.setToolTipText(Messages.ExternalizeStringsContributionItem_externalizeToolTip);
+		}
+		// listener
+		m_toolItem.addListener(SWT.Selection, new Listener() {
+			@Override
+			public void handleEvent(Event event) {
+				handleClick(parent, event);
+			}
+		});
+	}
 
-  @Override
-  public void dispose() {
-    super.dispose();
-  }
+	@Override
+	public void dispose() {
+		super.dispose();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Menu
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Handles click on {@link #m_toolItem}, select {@link LocaleInfo} or open {@link NlsDialog}.
-   */
-  private void handleClick(final ToolBar parent, final Event event) {
-    ExecutionUtils.runLog(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        if (event.detail == SWT.ARROW && !ArrayUtils.isEmpty(getLocales())) {
-          Rectangle bounds = m_toolItem.getBounds();
-          Point point = parent.toDisplay(bounds.x, bounds.y + bounds.height);
-          createMenu(parent);
-          m_menu.setLocation(point);
-          m_menu.setVisible(true);
-        } else {
-          openNLSDialog();
-        }
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Menu
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Handles click on {@link #m_toolItem}, select {@link LocaleInfo} or open {@link NlsDialog}.
+	 */
+	private void handleClick(final ToolBar parent, final Event event) {
+		ExecutionUtils.runLog(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				if (event.detail == SWT.ARROW && !ArrayUtils.isEmpty(getLocales())) {
+					Rectangle bounds = m_toolItem.getBounds();
+					Point point = parent.toDisplay(bounds.x, bounds.y + bounds.height);
+					createMenu(parent);
+					m_menu.setLocation(point);
+					m_menu.setVisible(true);
+				} else {
+					openNLSDialog();
+				}
+			}
+		});
+	}
 
-  /**
-   * Creates {@link #m_menu} with {@link MenuItem} for each {@link LocaleInfo}.
-   */
-  private void createMenu(Composite parent) throws Exception {
-    // dispose old menu
-    if (m_menu != null) {
-      m_menu.dispose();
-    }
-    // create new menu
-    m_menu = new Menu(parent);
-    {
-      LocaleInfo currentLocale = AbstractSource.getLocaleInfo(m_root);
-      //
-      LocaleInfo[] locales = getLocales();
-      for (final LocaleInfo locale : locales) {
-        final MenuItem menuItem = new MenuItem(m_menu, SWT.RADIO);
-        // presentation
-        menuItem.setImage(LocaleUtils.getImage(locale));
-        menuItem.setText(locale.getTitle());
-        menuItem.setSelection(locale.equals(currentLocale));
-        // listener
-        menuItem.addListener(SWT.Selection, new Listener() {
-          @Override
-          public void handleEvent(Event event) {
-            if (menuItem.getSelection()) {
-              AbstractSource.setLocaleInfo(m_root, locale);
-              setCurrentLocale(locale);
-            }
-          }
-        });
-      }
-    }
-  }
+	/**
+	 * Creates {@link #m_menu} with {@link MenuItem} for each {@link LocaleInfo}.
+	 */
+	private void createMenu(Composite parent) throws Exception {
+		// dispose old menu
+		if (m_menu != null) {
+			m_menu.dispose();
+		}
+		// create new menu
+		m_menu = new Menu(parent);
+		{
+			LocaleInfo currentLocale = AbstractSource.getLocaleInfo(m_root);
+			//
+			LocaleInfo[] locales = getLocales();
+			for (final LocaleInfo locale : locales) {
+				final MenuItem menuItem = new MenuItem(m_menu, SWT.RADIO);
+				// presentation
+				menuItem.setImage(LocaleUtils.getImage(locale));
+				menuItem.setText(locale.getTitle());
+				menuItem.setSelection(locale.equals(currentLocale));
+				// listener
+				menuItem.addListener(SWT.Selection, new Listener() {
+					@Override
+					public void handleEvent(Event event) {
+						if (menuItem.getSelection()) {
+							AbstractSource.setLocaleInfo(m_root, locale);
+							setCurrentLocale(locale);
+						}
+					}
+				});
+			}
+		}
+	}
 
-  /**
-   * @return the array of {@link LocaleInfo} associated with current root.
-   */
-  private LocaleInfo[] getLocales() throws Exception {
-    NlsSupport support = NlsSupport.get(m_root);
-    return support.getLocales();
-  }
+	/**
+	 * @return the array of {@link LocaleInfo} associated with current root.
+	 */
+	private LocaleInfo[] getLocales() throws Exception {
+		NlsSupport support = NlsSupport.get(m_root);
+		return support.getLocales();
+	}
 
-  /**
-   * Opens {@link NlsDialog}.
-   */
-  private void openNLSDialog() throws Exception {
-    boolean isDefaultPackage =
-        m_root.getEditor().getModelUnit().getPackageDeclarations().length == 0;
-    if (isDefaultPackage) {
-      MessageDialog.openError(
-          DesignerPlugin.getShell(),
-          Messages.ExternalizeStringsContributionItem_defaultPackageTitle,
-          Messages.ExternalizeStringsContributionItem_defaultPackageMessage);
-    } else {
-      NlsDialog dialog = new NlsDialog(DesignerPlugin.getShell(), m_root);
-      // open and expect OK
-      if (dialog.open() != Window.OK) {
-        return;
-      }
-      // may be some error happened, so hierarchy was disposed
-      if (JavaInfoUtils.getState(m_root).isDisposed()) {
-        return;
-      }
-      // do update
-      updateCurrentLocale();
-    }
-  }
+	/**
+	 * Opens {@link NlsDialog}.
+	 */
+	private void openNLSDialog() throws Exception {
+		boolean isDefaultPackage =
+				m_root.getEditor().getModelUnit().getPackageDeclarations().length == 0;
+		if (isDefaultPackage) {
+			MessageDialog.openError(
+					DesignerPlugin.getShell(),
+					Messages.ExternalizeStringsContributionItem_defaultPackageTitle,
+					Messages.ExternalizeStringsContributionItem_defaultPackageMessage);
+		} else {
+			NlsDialog dialog = new NlsDialog(DesignerPlugin.getShell(), m_root);
+			// open and expect OK
+			if (dialog.open() != Window.OK) {
+				return;
+			}
+			// may be some error happened, so hierarchy was disposed
+			if (JavaInfoUtils.getState(m_root).isDisposed()) {
+				return;
+			}
+			// do update
+			updateCurrentLocale();
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Current locale
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Displays current locale on {@link #m_toolItem}.
-   */
-  private void displayCurrentLocale() {
-    ExecutionUtils.runLog(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        if (NlsSupport.get(m_root).getLocales().length == 0) {
-          m_toolItem.setImage(DesignerPlugin.getImage(!isSpecialTime()
-              ? "nls/globe3.png"
-              : "nls/ms16.png"));
-          m_toolItem.setText("");
-        } else {
-          LocaleInfo locale = AbstractSource.getLocaleInfo(m_root);
-          m_toolItem.setImage(LocaleUtils.getImage(locale));
-          m_toolItem.setText(locale.getTitle());
-        }
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Current locale
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Displays current locale on {@link #m_toolItem}.
+	 */
+	private void displayCurrentLocale() {
+		ExecutionUtils.runLog(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				if (NlsSupport.get(m_root).getLocales().length == 0) {
+					m_toolItem.setImage(DesignerPlugin.getImage(!isSpecialTime()
+							? "nls/globe3.png"
+									: "nls/ms16.png"));
+					m_toolItem.setText("");
+				} else {
+					LocaleInfo locale = AbstractSource.getLocaleInfo(m_root);
+					m_toolItem.setImage(LocaleUtils.getImage(locale));
+					m_toolItem.setText(locale.getTitle());
+				}
+			}
+		});
+	}
 
-  /**
-   * Ensures that current locale exists (uses first locale, if current one does not exist).
-   */
-  private void updateCurrentLocale() {
-    ExecutionUtils.runLog(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        NlsSupport support = NlsSupport.get(m_root);
-        // do nothing, if no sources/locales
-        if (support.getSources().length == 0) {
-          return;
-        }
-        // prepare current locale
-        LocaleInfo locale = AbstractSource.getLocaleInfo(m_root);
-        // check that current locale is still alive
-        LocaleInfo[] locales = support.getLocales();
-        if (!ArrayUtils.contains(locales, locale)) {
-          locale = locales[0];
-        }
-        // in any case, show with current locale
-        setCurrentLocale(locale);
-      }
-    });
-  }
+	/**
+	 * Ensures that current locale exists (uses first locale, if current one does not exist).
+	 */
+	private void updateCurrentLocale() {
+		ExecutionUtils.runLog(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				NlsSupport support = NlsSupport.get(m_root);
+				// do nothing, if no sources/locales
+				if (support.getSources().length == 0) {
+					return;
+				}
+				// prepare current locale
+				LocaleInfo locale = AbstractSource.getLocaleInfo(m_root);
+				// check that current locale is still alive
+				LocaleInfo[] locales = support.getLocales();
+				if (!ArrayUtils.contains(locales, locale)) {
+					locale = locales[0];
+				}
+				// in any case, show with current locale
+				setCurrentLocale(locale);
+			}
+		});
+	}
 
-  /**
-   * Sets new current locale.
-   */
-  private void setCurrentLocale(final LocaleInfo locale) {
-    ExecutionUtils.runLog(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        AbstractSource.setLocaleInfo(m_root, locale);
-        displayCurrentLocale();
-        m_root.refresh();
-      }
-    });
-  }
+	/**
+	 * Sets new current locale.
+	 */
+	private void setCurrentLocale(final LocaleInfo locale) {
+		ExecutionUtils.runLog(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				AbstractSource.setLocaleInfo(m_root, locale);
+				displayCurrentLocale();
+				m_root.refresh();
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Egg
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if current date is May, 1st and time after 5:00pm. :-)
-   */
-  private boolean isSpecialTime() {
-    int month = Calendar.getInstance().get(Calendar.MONTH);
-    int day = Calendar.getInstance().get(Calendar.DAY_OF_MONTH);
-    int hour = Calendar.getInstance().get(Calendar.HOUR_OF_DAY);
-    return month == Calendar.MAY && day == 1 && hour > 16;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Egg
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if current date is May, 1st and time after 5:00pm. :-)
+	 */
+	private boolean isSpecialTime() {
+		int month = Calendar.getInstance().get(Calendar.MONTH);
+		int day = Calendar.getInstance().get(Calendar.DAY_OF_MONTH);
+		int hour = Calendar.getInstance().get(Calendar.HOUR_OF_DAY);
+		return month == Calendar.MAY && day == 1 && hour > 16;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/Messages.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/Messages.java
index 88dc49c80..37fb8cbf5 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/Messages.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/Messages.java
@@ -3,125 +3,125 @@
 import org.eclipse.osgi.util.NLS;
 
 public class Messages extends NLS {
-  private static final String BUNDLE_NAME = "org.eclipse.wb.internal.core.nls.messages"; //$NON-NLS-1$
-  public static String AbstractAccessorSourceNewComposite_accessorChooseButton;
-  public static String AbstractAccessorSourceNewComposite_accessorChooseLabel;
-  public static String AbstractAccessorSourceNewComposite_accessorChooseMessage;
-  public static String AbstractAccessorSourceNewComposite_accessorChooseTitle;
-  public static String AbstractAccessorSourceNewComposite_accessorGroup;
-  public static String AbstractAccessorSourceNewComposite_accessorPackage;
-  public static String AbstractAccessorSourceNewComposite_accessorPackageBrowse;
-  public static String AbstractAccessorSourceNewComposite_accessorSourceFolder;
-  public static String AbstractAccessorSourceNewComposite_accessorSourceFolderBrowse;
-  public static String AbstractAccessorSourceNewComposite_validateAccessorClassDot;
-  public static String AbstractAccessorSourceNewComposite_validateAccessorPackageDefault;
-  public static String AbstractAccessorSourceNewComposite_validateAccessorPackageEmpty;
-  public static String AbstractAccessorSourceNewComposite_validateAccessorSourceFolder;
-  public static String AbstractBundleSourceNewComposite_propertiesChooseButton;
-  public static String AbstractBundleSourceNewComposite_propertiesChooseMessage;
-  public static String AbstractBundleSourceNewComposite_propertiesChooseTitle;
-  public static String AbstractBundleSourceNewComposite_propertiesGroup;
-  public static String AbstractBundleSourceNewComposite_propertiesLabel;
-  public static String AbstractBundleSourceNewComposite_propertiesPackage;
-  public static String AbstractBundleSourceNewComposite_propertiesPackageBrowse;
-  public static String AbstractBundleSourceNewComposite_propertiesSourceFolder;
-  public static String AbstractBundleSourceNewComposite_propertiesSourceFolderBrowse;
-  public static String AbstractBundleSourceNewComposite_validatePropertiesFileEmpty;
-  public static String AbstractBundleSourceNewComposite_validatePropertiesFileExtension;
-  public static String AbstractBundleSourceNewComposite_validatePropertiesInvalidPackage;
-  public static String AbstractBundleSourceNewComposite_validatePropertiesInvalidSourceFolder;
-  public static String AbstractFieldsSourceNewComposite_chooseBrowse;
-  public static String AbstractFieldsSourceNewComposite_chooseLabel;
-  public static String AbstractFieldsSourceNewComposite_chooseMessage;
-  public static String AbstractFieldsSourceNewComposite_chooseTitle;
-  public static String AbstractFieldsSourceNewComposite_fieldName;
-  public static String AbstractFieldsSourceNewComposite_package;
-  public static String AbstractFieldsSourceNewComposite_packageBrowse;
-  public static String AbstractFieldsSourceNewComposite_sourceFolder;
-  public static String AbstractFieldsSourceNewComposite_sourceFolderBrowse;
-  public static String AbstractFieldsSourceNewComposite_validateClassDot;
-  public static String AbstractFieldsSourceNewComposite_validateFieldNameUsed;
-  public static String AbstractFieldsSourceNewComposite_validatePackage;
-  public static String AbstractFieldsSourceNewComposite_validatePackageDefault;
-  public static String AbstractFieldsSourceNewComposite_validateSourceFolder;
-  public static String AddKeyValueDialog_keyLabel;
-  public static String AddKeyValueDialog_message;
-  public static String AddKeyValueDialog_title;
-  public static String AddKeyValueDialog_validateEmptyKey;
-  public static String AddKeyValueDialog_valueLabel;
-  public static String ChooseLocaleDialog_allLocalesLabel;
-  public static String ChooseLocaleDialog_countryLabel;
-  public static String ChooseLocaleDialog_languageLabel;
-  public static String ChooseLocaleDialog_localeGroup;
-  public static String ChooseLocaleDialog_message;
-  public static String ChooseLocaleDialog_shellTitle;
-  public static String ChooseLocaleDialog_title;
-  public static String DirectSourceNewComposite_title;
-  public static String ActivatorSourceNewComposite_title;
-  public static String EclipseSourceNewComposite_title;
-  public static String EclipseSourceNewComposite_useDefaultNames;
-  public static String EclipseSourceNewComposite_validateNoBundleNameField;
-  public static String EditableSource_renameConfirmKeepExistingValue;
-  public static String EditableSource_renameConfirmNoUseRenaming;
-  public static String EditableSource_renameConfirmTitle;
-  public static String EditableSource_renameConfirmYesKeep;
-  public static String ExternalizeStringsContributionItem_defaultPackageMessage;
-  public static String ExternalizeStringsContributionItem_defaultPackageTitle;
-  public static String ExternalizeStringsContributionItem_externalizeToolTip;
-  public static String FieldSourceNewComposite_fieldGroup;
-  public static String FieldSourceNewComposite_fieldNameLabel;
-  public static String FieldSourceNewComposite_title;
-  public static String FieldSourceNewComposite_validateFieldExists;
-  public static String ModernEclipseSourceNewComposite_title;
-  public static String NewLocaleDialog_alreadyExists;
-  public static String NewLocaleDialog_copyFrom;
-  public static String NewLocaleDialog_copyGroup;
-  public static String NewLocaleDialog_message;
-  public static String NewLocaleDialog_title;
-  public static String NewSourceDialog_exampleGroup;
-  public static String NewSourceDialog_message;
-  public static String NewSourceDialog_messageOneSource;
-  public static String NewSourceDialog_shellTitle;
-  public static String NewSourceDialog_sourceProperties;
-  public static String NewSourceDialog_sourceTypesGroup;
-  public static String NewSourceDialog_title;
-  public static String NlsDialog_propertiesPage;
-  public static String NlsDialog_title;
-  public static String NlsPreferencePage_alwaysVisibleLocales;
-  public static String NlsPreferencePage_alwaysVisibleLocalesHint;
-  public static String NlsPreferencePage_autoExternalize;
-  public static String NlsPreferencePage_keyHasStringAsValueOnly;
-  public static String NlsPreferencePage_keyHasQualifiedClassName;
-  public static String NlsPreferencePage_keyHasStringAsValue;
-  public static String NlsPreferencePage_keyInValuePrefix;
-  public static String NlsPreferencePage_renameWithVariable;
-  public static String PropertiesComposite_copyButton;
-  public static String PropertiesComposite_disableAllButton;
-  public static String PropertiesComposite_enableAllButton;
-  public static String PropertiesComposite_existingSourcesLabel;
-  public static String PropertiesComposite_externalizeButton;
-  public static String PropertiesComposite_newbutton;
-  public static String PropertiesComposite_propertiesGroup;
-  public static String PropertiesComposite_propertiesLabel;
-  public static String PropertiesComposite_sourceGroup;
-  public static String SourceComposite_addKeyValueAction;
-  public static String SourceComposite_addLocaleAction;
-  public static String SourceComposite_hint;
-  public static String SourceComposite_internalizeKeyAction;
-  public static String SourceComposite_internalizeMessage;
-  public static String SourceComposite_internalizeTitle;
-  public static String SourceComposite_keyColumn;
-  public static String SourceComposite_newLocaleButton;
-  public static String SourceComposite_onlyCurrentFormFlag;
-  public static String SourceComposite_removeLocaleAction;
-  public static String SourceComposite_removeLocaleMessage;
-  public static String SourceComposite_removeLocaleTitle;
-  public static String SourceComposite_stringsLabel;
-  static {
-    // initialize resource bundle
-    NLS.initializeMessages(BUNDLE_NAME, Messages.class);
-  }
+	private static final String BUNDLE_NAME = "org.eclipse.wb.internal.core.nls.messages"; //$NON-NLS-1$
+	public static String AbstractAccessorSourceNewComposite_accessorChooseButton;
+	public static String AbstractAccessorSourceNewComposite_accessorChooseLabel;
+	public static String AbstractAccessorSourceNewComposite_accessorChooseMessage;
+	public static String AbstractAccessorSourceNewComposite_accessorChooseTitle;
+	public static String AbstractAccessorSourceNewComposite_accessorGroup;
+	public static String AbstractAccessorSourceNewComposite_accessorPackage;
+	public static String AbstractAccessorSourceNewComposite_accessorPackageBrowse;
+	public static String AbstractAccessorSourceNewComposite_accessorSourceFolder;
+	public static String AbstractAccessorSourceNewComposite_accessorSourceFolderBrowse;
+	public static String AbstractAccessorSourceNewComposite_validateAccessorClassDot;
+	public static String AbstractAccessorSourceNewComposite_validateAccessorPackageDefault;
+	public static String AbstractAccessorSourceNewComposite_validateAccessorPackageEmpty;
+	public static String AbstractAccessorSourceNewComposite_validateAccessorSourceFolder;
+	public static String AbstractBundleSourceNewComposite_propertiesChooseButton;
+	public static String AbstractBundleSourceNewComposite_propertiesChooseMessage;
+	public static String AbstractBundleSourceNewComposite_propertiesChooseTitle;
+	public static String AbstractBundleSourceNewComposite_propertiesGroup;
+	public static String AbstractBundleSourceNewComposite_propertiesLabel;
+	public static String AbstractBundleSourceNewComposite_propertiesPackage;
+	public static String AbstractBundleSourceNewComposite_propertiesPackageBrowse;
+	public static String AbstractBundleSourceNewComposite_propertiesSourceFolder;
+	public static String AbstractBundleSourceNewComposite_propertiesSourceFolderBrowse;
+	public static String AbstractBundleSourceNewComposite_validatePropertiesFileEmpty;
+	public static String AbstractBundleSourceNewComposite_validatePropertiesFileExtension;
+	public static String AbstractBundleSourceNewComposite_validatePropertiesInvalidPackage;
+	public static String AbstractBundleSourceNewComposite_validatePropertiesInvalidSourceFolder;
+	public static String AbstractFieldsSourceNewComposite_chooseBrowse;
+	public static String AbstractFieldsSourceNewComposite_chooseLabel;
+	public static String AbstractFieldsSourceNewComposite_chooseMessage;
+	public static String AbstractFieldsSourceNewComposite_chooseTitle;
+	public static String AbstractFieldsSourceNewComposite_fieldName;
+	public static String AbstractFieldsSourceNewComposite_package;
+	public static String AbstractFieldsSourceNewComposite_packageBrowse;
+	public static String AbstractFieldsSourceNewComposite_sourceFolder;
+	public static String AbstractFieldsSourceNewComposite_sourceFolderBrowse;
+	public static String AbstractFieldsSourceNewComposite_validateClassDot;
+	public static String AbstractFieldsSourceNewComposite_validateFieldNameUsed;
+	public static String AbstractFieldsSourceNewComposite_validatePackage;
+	public static String AbstractFieldsSourceNewComposite_validatePackageDefault;
+	public static String AbstractFieldsSourceNewComposite_validateSourceFolder;
+	public static String AddKeyValueDialog_keyLabel;
+	public static String AddKeyValueDialog_message;
+	public static String AddKeyValueDialog_title;
+	public static String AddKeyValueDialog_validateEmptyKey;
+	public static String AddKeyValueDialog_valueLabel;
+	public static String ChooseLocaleDialog_allLocalesLabel;
+	public static String ChooseLocaleDialog_countryLabel;
+	public static String ChooseLocaleDialog_languageLabel;
+	public static String ChooseLocaleDialog_localeGroup;
+	public static String ChooseLocaleDialog_message;
+	public static String ChooseLocaleDialog_shellTitle;
+	public static String ChooseLocaleDialog_title;
+	public static String DirectSourceNewComposite_title;
+	public static String ActivatorSourceNewComposite_title;
+	public static String EclipseSourceNewComposite_title;
+	public static String EclipseSourceNewComposite_useDefaultNames;
+	public static String EclipseSourceNewComposite_validateNoBundleNameField;
+	public static String EditableSource_renameConfirmKeepExistingValue;
+	public static String EditableSource_renameConfirmNoUseRenaming;
+	public static String EditableSource_renameConfirmTitle;
+	public static String EditableSource_renameConfirmYesKeep;
+	public static String ExternalizeStringsContributionItem_defaultPackageMessage;
+	public static String ExternalizeStringsContributionItem_defaultPackageTitle;
+	public static String ExternalizeStringsContributionItem_externalizeToolTip;
+	public static String FieldSourceNewComposite_fieldGroup;
+	public static String FieldSourceNewComposite_fieldNameLabel;
+	public static String FieldSourceNewComposite_title;
+	public static String FieldSourceNewComposite_validateFieldExists;
+	public static String ModernEclipseSourceNewComposite_title;
+	public static String NewLocaleDialog_alreadyExists;
+	public static String NewLocaleDialog_copyFrom;
+	public static String NewLocaleDialog_copyGroup;
+	public static String NewLocaleDialog_message;
+	public static String NewLocaleDialog_title;
+	public static String NewSourceDialog_exampleGroup;
+	public static String NewSourceDialog_message;
+	public static String NewSourceDialog_messageOneSource;
+	public static String NewSourceDialog_shellTitle;
+	public static String NewSourceDialog_sourceProperties;
+	public static String NewSourceDialog_sourceTypesGroup;
+	public static String NewSourceDialog_title;
+	public static String NlsDialog_propertiesPage;
+	public static String NlsDialog_title;
+	public static String NlsPreferencePage_alwaysVisibleLocales;
+	public static String NlsPreferencePage_alwaysVisibleLocalesHint;
+	public static String NlsPreferencePage_autoExternalize;
+	public static String NlsPreferencePage_keyHasStringAsValueOnly;
+	public static String NlsPreferencePage_keyHasQualifiedClassName;
+	public static String NlsPreferencePage_keyHasStringAsValue;
+	public static String NlsPreferencePage_keyInValuePrefix;
+	public static String NlsPreferencePage_renameWithVariable;
+	public static String PropertiesComposite_copyButton;
+	public static String PropertiesComposite_disableAllButton;
+	public static String PropertiesComposite_enableAllButton;
+	public static String PropertiesComposite_existingSourcesLabel;
+	public static String PropertiesComposite_externalizeButton;
+	public static String PropertiesComposite_newbutton;
+	public static String PropertiesComposite_propertiesGroup;
+	public static String PropertiesComposite_propertiesLabel;
+	public static String PropertiesComposite_sourceGroup;
+	public static String SourceComposite_addKeyValueAction;
+	public static String SourceComposite_addLocaleAction;
+	public static String SourceComposite_hint;
+	public static String SourceComposite_internalizeKeyAction;
+	public static String SourceComposite_internalizeMessage;
+	public static String SourceComposite_internalizeTitle;
+	public static String SourceComposite_keyColumn;
+	public static String SourceComposite_newLocaleButton;
+	public static String SourceComposite_onlyCurrentFormFlag;
+	public static String SourceComposite_removeLocaleAction;
+	public static String SourceComposite_removeLocaleMessage;
+	public static String SourceComposite_removeLocaleTitle;
+	public static String SourceComposite_stringsLabel;
+	static {
+		// initialize resource bundle
+		NLS.initializeMessages(BUNDLE_NAME, Messages.class);
+	}
 
-  private Messages() {
-  }
+	private Messages() {
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/NlsPreferencePage.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/NlsPreferencePage.java
index 95d757bd3..7ac978c9d 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/NlsPreferencePage.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/NlsPreferencePage.java
@@ -32,100 +32,100 @@
  * @coverage core.nls
  */
 public abstract class NlsPreferencePage extends AbstractBindingPreferencesPage
-    implements
-      IPreferenceConstants {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public NlsPreferencePage(ToolkitDescription toolkit) {
-    super(toolkit);
-  }
+implements
+IPreferenceConstants {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public NlsPreferencePage(ToolkitDescription toolkit) {
+		super(toolkit);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected AbstractBindingComposite createBindingComposite(Composite parent) {
-    return new ContentsComposite(parent, m_bindManager, m_preferences);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected AbstractBindingComposite createBindingComposite(Composite parent) {
+		return new ContentsComposite(parent, m_bindManager, m_preferences);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Contents
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static class ContentsComposite extends AbstractBindingComposite {
-    public ContentsComposite(Composite parent,
-        DataBindManager bindManager,
-        IPreferenceStore preferences) {
-      super(parent, bindManager, preferences);
-      GridLayoutFactory.create(this).columns(2).noMargins();
-      checkButton(this, 2, Messages.NlsPreferencePage_autoExternalize, P_NLS_AUTO_EXTERNALIZE);
-      final Button keyHasStringAsValueOnly = checkButton(
-          this,
-          2,
-          Messages.NlsPreferencePage_keyHasStringAsValueOnly,
-          P_NLS_KEY_AS_STRING_VALUE_ONLY);
-      keyHasStringAsValueOnly.setToolTipText(
-          "The generated keys will have only the string's value that they represent ignoring any other format configuration on them.");
-      final Button keyHasQualifiedClassName = checkButton(
-          this,
-          2,
-          Messages.NlsPreferencePage_keyHasQualifiedClassName,
-          P_NLS_KEY_QUALIFIED_TYPE_NAME);
-      final Button renameWithVariable = checkButton(
-          this,
-          2,
-          Messages.NlsPreferencePage_renameWithVariable,
-          P_NLS_KEY_RENAME_WITH_VARIABLE);
-      final Button keyHasStringAsValue = checkButton(
-          this,
-          2,
-          Messages.NlsPreferencePage_keyHasStringAsValue,
-          P_NLS_KEY_HAS_STRING_VALUE);
-      stringField(this, 2, Messages.NlsPreferencePage_keyInValuePrefix, P_NLS_KEY_AS_VALUE_PREFIX);
-      {
-        Control[] controls = stringField(
-            this,
-            2,
-            Messages.NlsPreferencePage_alwaysVisibleLocales,
-            P_NLS_ALWAYS_VISIBLE_LOCALES);
-        Control labelWidget = controls[0];
-        labelWidget.setToolTipText(Messages.NlsPreferencePage_alwaysVisibleLocalesHint);
-      }
-      keyHasStringAsValueOnly.addSelectionListener(new SelectionAdapter() {
-        @Override
-        public void widgetSelected(SelectionEvent e) {
-          if (keyHasStringAsValueOnly.getSelection()) {
-            keyHasQualifiedClassName.setSelection(false);
-            keyHasQualifiedClassName.setEnabled(false);
-            renameWithVariable.setSelection(false);
-            renameWithVariable.setEnabled(false);
-            keyHasStringAsValue.setSelection(false);
-            keyHasStringAsValue.setEnabled(false);
-          } else {
-            keyHasQualifiedClassName.setEnabled(true);
-            renameWithVariable.setEnabled(true);
-            keyHasStringAsValue.setEnabled(true);
-          }
-        }
-      });
-      if (keyHasStringAsValueOnly.getSelection()) {
-        keyHasQualifiedClassName.setSelection(false);
-        keyHasQualifiedClassName.setEnabled(false);
-        renameWithVariable.setSelection(false);
-        renameWithVariable.setEnabled(false);
-        keyHasStringAsValue.setSelection(false);
-        keyHasStringAsValue.setEnabled(false);
-      } else {
-        keyHasQualifiedClassName.setEnabled(true);
-        renameWithVariable.setEnabled(true);
-        keyHasStringAsValue.setEnabled(true);
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Contents
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static class ContentsComposite extends AbstractBindingComposite {
+		public ContentsComposite(Composite parent,
+				DataBindManager bindManager,
+				IPreferenceStore preferences) {
+			super(parent, bindManager, preferences);
+			GridLayoutFactory.create(this).columns(2).noMargins();
+			checkButton(this, 2, Messages.NlsPreferencePage_autoExternalize, P_NLS_AUTO_EXTERNALIZE);
+			final Button keyHasStringAsValueOnly = checkButton(
+					this,
+					2,
+					Messages.NlsPreferencePage_keyHasStringAsValueOnly,
+					P_NLS_KEY_AS_STRING_VALUE_ONLY);
+			keyHasStringAsValueOnly.setToolTipText(
+					"The generated keys will have only the string's value that they represent ignoring any other format configuration on them.");
+			final Button keyHasQualifiedClassName = checkButton(
+					this,
+					2,
+					Messages.NlsPreferencePage_keyHasQualifiedClassName,
+					P_NLS_KEY_QUALIFIED_TYPE_NAME);
+			final Button renameWithVariable = checkButton(
+					this,
+					2,
+					Messages.NlsPreferencePage_renameWithVariable,
+					P_NLS_KEY_RENAME_WITH_VARIABLE);
+			final Button keyHasStringAsValue = checkButton(
+					this,
+					2,
+					Messages.NlsPreferencePage_keyHasStringAsValue,
+					P_NLS_KEY_HAS_STRING_VALUE);
+			stringField(this, 2, Messages.NlsPreferencePage_keyInValuePrefix, P_NLS_KEY_AS_VALUE_PREFIX);
+			{
+				Control[] controls = stringField(
+						this,
+						2,
+						Messages.NlsPreferencePage_alwaysVisibleLocales,
+						P_NLS_ALWAYS_VISIBLE_LOCALES);
+				Control labelWidget = controls[0];
+				labelWidget.setToolTipText(Messages.NlsPreferencePage_alwaysVisibleLocalesHint);
+			}
+			keyHasStringAsValueOnly.addSelectionListener(new SelectionAdapter() {
+				@Override
+				public void widgetSelected(SelectionEvent e) {
+					if (keyHasStringAsValueOnly.getSelection()) {
+						keyHasQualifiedClassName.setSelection(false);
+						keyHasQualifiedClassName.setEnabled(false);
+						renameWithVariable.setSelection(false);
+						renameWithVariable.setEnabled(false);
+						keyHasStringAsValue.setSelection(false);
+						keyHasStringAsValue.setEnabled(false);
+					} else {
+						keyHasQualifiedClassName.setEnabled(true);
+						renameWithVariable.setEnabled(true);
+						keyHasStringAsValue.setEnabled(true);
+					}
+				}
+			});
+			if (keyHasStringAsValueOnly.getSelection()) {
+				keyHasQualifiedClassName.setSelection(false);
+				keyHasQualifiedClassName.setEnabled(false);
+				renameWithVariable.setSelection(false);
+				renameWithVariable.setEnabled(false);
+				keyHasStringAsValue.setSelection(false);
+				keyHasStringAsValue.setEnabled(false);
+			} else {
+				keyHasQualifiedClassName.setEnabled(true);
+				renameWithVariable.setEnabled(true);
+				keyHasStringAsValue.setEnabled(true);
+			}
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/NlsStringEvaluator.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/NlsStringEvaluator.java
index 258743cab..8c249366d 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/NlsStringEvaluator.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/NlsStringEvaluator.java
@@ -33,34 +33,34 @@
  * @coverage core.nls
  */
 public final class NlsStringEvaluator implements IExpressionEvaluator {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IExpressionEvaluator
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Object evaluate(EvaluationContext context,
-      Expression expression,
-      ITypeBinding typeBinding,
-      String typeQualifiedName) throws Exception {
-    if ("java.lang.String".equals(typeQualifiedName)) {
-      AstEditor editor = (AstEditor) context.getArbitraryValue(JavaInfoEvaluationHelper.KEY_EDITOR);
-      if (editor != null) {
-        JavaInfo root = (JavaInfo) editor.getGlobalValue(JavaInfoParser.KEY_ROOT);
-        if (root != null) {
-          String value = NlsSupport.get(root).getValue(expression);
-          return value != null ? value : AstEvaluationEngine.UNKNOWN;
-        } else if (expression instanceof MethodInvocation || expression instanceof QualifiedName) {
-          @SuppressWarnings("unchecked")
-          List<JavaInfo> components =
-              (List<JavaInfo>) editor.getGlobalValue(JavaInfoParser.KEY_COMPONENTS);
-          Assert.isTrue(!components.isEmpty(), "Components should have at least one JavaInfo.");
-          String value = NlsSupport.getValue(components.get(0), expression);
-          return value != null ? value : AstEvaluationEngine.UNKNOWN;
-        }
-      }
-    }
-    // no ASTEditor or JavaInfo, can not access NLSSupport
-    return AstEvaluationEngine.UNKNOWN;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IExpressionEvaluator
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Object evaluate(EvaluationContext context,
+			Expression expression,
+			ITypeBinding typeBinding,
+			String typeQualifiedName) throws Exception {
+		if ("java.lang.String".equals(typeQualifiedName)) {
+			AstEditor editor = (AstEditor) context.getArbitraryValue(JavaInfoEvaluationHelper.KEY_EDITOR);
+			if (editor != null) {
+				JavaInfo root = (JavaInfo) editor.getGlobalValue(JavaInfoParser.KEY_ROOT);
+				if (root != null) {
+					String value = NlsSupport.get(root).getValue(expression);
+					return value != null ? value : AstEvaluationEngine.UNKNOWN;
+				} else if (expression instanceof MethodInvocation || expression instanceof QualifiedName) {
+					@SuppressWarnings("unchecked")
+					List<JavaInfo> components =
+					(List<JavaInfo>) editor.getGlobalValue(JavaInfoParser.KEY_COMPONENTS);
+					Assert.isTrue(!components.isEmpty(), "Components should have at least one JavaInfo.");
+					String value = NlsSupport.getValue(components.get(0), expression);
+					return value != null ? value : AstEvaluationEngine.UNKNOWN;
+				}
+			}
+		}
+		// no ASTEditor or JavaInfo, can not access NLSSupport
+		return AstEvaluationEngine.UNKNOWN;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/NlsSupport.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/NlsSupport.java
index bf65f2126..84f84ee98 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/NlsSupport.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/NlsSupport.java
@@ -61,516 +61,516 @@
  * @coverage core.nls
  */
 public final class NlsSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final String NLS_SUPPORT = "NLS_SUPPORT";
-
-  /**
-   * @return the {@link NlsSupport} for component of {@link JavaInfo} hierarchy.
-   */
-  public static NlsSupport get(JavaInfo component) throws Exception {
-    AstEditor editor = component.getEditor();
-    NlsSupport support = (NlsSupport) editor.getGlobalValue(NLS_SUPPORT);
-    if (support == null) {
-      support = new NlsSupport(component.getRootJava());
-      editor.putGlobalValue(NLS_SUPPORT, support);
-    }
-    return support;
-  }
-
-  /**
-   * Supports conversion of {@link Expression} into NLS value during parsing, i.e. when no root
-   * {@link JavaInfo} is known.
-   *
-   * @return the {@link String} value or <code>null</code> if given {@link Expression} does not
-   *         represent any known NLS pattern.
-   */
-  public static String getValue(JavaInfo component, Expression expression) throws Exception {
-    for (SourceDescription sourceDescription : getSourceDescriptions(component)) {
-      try {
-        List<AbstractSource> sources = Lists.newArrayList();
-        AbstractSource source = sourceDescription.getSource(component, null, expression, sources);
-        if (source != null) {
-          setSource(expression, source);
-          return source.getValue(expression);
-        }
-      } catch (Throwable e) {
-      }
-    }
-    return null;
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // SourceDescription's
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final String POINT_NLS_SOURCES = "org.eclipse.wb.core.nlsSources";
-  private static Map<String, SourceDescription> m_idToDescription = Maps.newTreeMap();
-  private static Map<String, SourceDescription[]> m_toolkitToDescriptions = Maps.newTreeMap();
-
-  /**
-   * @return the {@link SourceDescription} with given id.
-   */
-  private static SourceDescription getSourceDescription(String id) throws Exception {
-    SourceDescription description = m_idToDescription.get(id);
-    if (description == null) {
-      List<IConfigurationElement> elements =
-          ExternalFactoriesHelper.getElements(POINT_NLS_SOURCES, "description");
-      for (IConfigurationElement element : elements) {
-        // check id
-        if (id.equals(element.getAttribute("id"))) {
-          // prepare classes
-          Bundle bundle = ExternalFactoriesHelper.getExtensionBundle(element);
-          Class<?> sourceClass = bundle.loadClass(element.getAttribute("source"));
-          Class<?> compositeClass = bundle.loadClass(element.getAttribute("composite"));
-          // create description
-          description = new SourceDescription(sourceClass, compositeClass);
-          m_idToDescription.put(id, description);
-        }
-      }
-    }
-    //
-    return description;
-  }
-
-  /**
-   * @return array of {@link SourceDescription}'s for given {@link JavaInfo}.
-   */
-  public static SourceDescription[] getSourceDescriptions(JavaInfo component) throws Exception {
-    // prepare descriptions for toolkit
-    String toolkitId = component.getDescription().getToolkit().getId();
-    SourceDescription[] descriptions = m_toolkitToDescriptions.get(toolkitId);
-    if (descriptions == null) {
-      List<SourceDescription> descriptionList = Lists.newArrayList();
-      // check all binding's
-      List<IConfigurationElement> elements =
-          ExternalFactoriesHelper.getElements(POINT_NLS_SOURCES, "binding");
-      for (IConfigurationElement element : elements) {
-        // check for toolkit
-        if (toolkitId.equals(element.getAttribute("toolkit"))) {
-          String descriptionId = element.getAttribute("description");
-          SourceDescription description = getSourceDescription(descriptionId);
-          if (description != null) {
-            descriptionList.add(description);
-          }
-        }
-      }
-      descriptions = descriptionList.toArray(new SourceDescription[descriptionList.size()]);
-    }
-    //
-    return descriptions;
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance fields
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final JavaInfo m_root;
-  private final SourceDescription[] m_sourceDescriptions;
-  private final List<AbstractSource> m_sources = Lists.newArrayList();
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private NlsSupport(JavaInfo root) throws Exception {
-    m_root = root;
-    m_sourceDescriptions = getSourceDescriptions(m_root);
-    prepareSources(m_root);
-    setDefaultLocaleDuringRefresh();
-    renameKeysOnVariableNameChange();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Broadcast based operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * If user chosen {@link Locale}, then set it as default during refresh.
-   */
-  private void setDefaultLocaleDuringRefresh() {
-    m_root.addBroadcastListener(new ObjectEventListener() {
-      private Locale m_oldDefaultLocale;
-
-      @Override
-      public void refreshBeforeCreate() throws Exception {
-        LocaleInfo localeInfo = AbstractSource.getLocaleInfo(m_root);
-        if (localeInfo != null) {
-          Locale locale = localeInfo.getLocale();
-          if (locale != null) {
-            m_oldDefaultLocale = Locale.getDefault();
-            Locale.setDefault(locale);
-          }
-        }
-      }
-
-      @Override
-      public void refreshFinallyRefresh() {
-        if (m_oldDefaultLocale != null) {
-          Locale.setDefault(m_oldDefaultLocale);
-          m_oldDefaultLocale = null;
-        }
-      }
-    });
-  }
-
-  /**
-   * When user renames component, we should rename associated NLS keys.
-   */
-  private void renameKeysOnVariableNameChange() {
-    m_root.addBroadcastListener(new JavaEventListener() {
-      @Override
-      public void variable_setName(AbstractNamedVariableSupport variableSupport,
-          String oldName,
-          String newName) throws Exception {
-        IPreferenceStore preferences = m_root.getDescription().getToolkit().getPreferences();
-        if (oldName != null
-            && newName != null
-            && preferences.getBoolean(IPreferenceConstants.P_NLS_KEY_RENAME_WITH_VARIABLE)) {
-          IEditableSupport editable = getEditable();
-          for (AbstractSource source : getSources()) {
-            IKeyRenameStrategy keyRenameStrategy = source.getKeyRenameStrategy();
-            IEditableSource editableSource = editable.getEditableSource(source);
-            Set<String> keys = source.getKeys();
-            for (String oldKey : keys) {
-              String newKey = keyRenameStrategy.getNewKey(oldName, newName, oldKey);
-              if (!keys.contains(newKey)) {
-                editableSource.renameKey(oldKey, newKey);
-              }
-            }
-          }
-          applyEditable(editable);
-        }
-      }
-    });
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Initialization
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if given {@link Property} is a string property.
-   */
-  public static boolean isStringProperty(Property property) {
-    return property instanceof GenericProperty
-        && property.getEditor() instanceof StringPropertyEditor;
-  }
-
-  /**
-   * Performs automatic externalize, if applicable and enabled.
-   */
-  public static void autoExternalize(GenericProperty property) throws Exception {
-    if (isStringProperty(property)) {
-      JavaInfo javaInfo = property.getJavaInfo();
-      IPreferenceStore preferences = javaInfo.getDescription().getToolkit().getPreferences();
-      if (preferences.getBoolean(IPreferenceConstants.P_NLS_AUTO_EXTERNALIZE)) {
-        NlsSupport support = NlsSupport.get(javaInfo);
-        if (support.getSources() != null) {
-          support.externalize(javaInfo, property);
-        }
-      }
-    }
-  }
-
-  /**
-   * Visits all components starting from given one and creates {@link AbstractSource} for each
-   * expression of string {@link Property}.
-   */
-  private void prepareSources(JavaInfo component) throws Exception {
-    // analyze properties of current component
-    Property[] properties = component.getProperties();
-    for (Property property : properties) {
-      if (NlsSupport.isStringProperty(property)) {
-        GenericProperty stringProperty = (GenericProperty) property;
-        Expression expression = stringProperty.getExpression();
-        // if property has expression, try to find NLS source
-        if (expression != null) {
-          for (SourceDescription sourceDescription : m_sourceDescriptions) {
-            // try to find source
-            try {
-              AbstractSource source =
-                  sourceDescription.getSource(component, stringProperty, expression, m_sources);
-              if (source != null) {
-                // save source in expression
-                setSource(expression, source);
-                // add new source
-                if (!m_sources.contains(source)) {
-                  m_sources.add(source);
-                }
-                // OK, we found source
-                break;
-              }
-            } catch (Throwable e) {
-              markAsBadExpression(expression);
-            }
-          }
-        }
-      }
-    }
-    // visit children
-    for (JavaInfo child : component.getChildrenJava()) {
-      prepareSources(child);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the root component.
-   */
-  public JavaInfo getRoot() {
-    return m_root;
-  }
-
-  /**
-   * @return the array of all {@link AbstractSource}'s in this this {@link NlsSupport}.
-   */
-  public AbstractSource[] getSources() {
-    return m_sources.toArray(new AbstractSource[m_sources.size()]);
-  }
-
-  /**
-   * @return <code>true</code> if given {@link Expression} is externalized.
-   */
-  public boolean isExternalized(Expression expression) {
-    return expression != null && getSource(expression) != null;
-  }
-
-  /**
-   * @return the {@link AbstractSource} that has value for given key.
-   */
-  public AbstractSource getKeySource(String key) throws Exception {
-    for (AbstractSource source : getSources()) {
-      Set<String> keys = source.getKeys();
-      if (keys.contains(key)) {
-        return source;
-      }
-    }
-    return null;
-  }
-
-  /**
-   * @return the {@link String} value of given {@link Expression}.
-   */
-  public String getValue(Expression expression) throws Exception {
-    AbstractSource source = getSource(expression);
-    if (source != null) {
-      return source.getValue(expression);
-    }
-    return null;
-  }
-
-  /**
-   * Changes value of given externalized {@link Expression} using its {@link AbstractSource}.
-   */
-  public void setValue(Expression expression, String value) throws Exception {
-    AbstractSource source = getSource(expression);
-    source.setValue(expression, value);
-  }
-
-  /**
-   * Externalizes given {@link GenericProperty}. We use this method for auto-externalizing new
-   * properties.
-   */
-  public void externalize(JavaInfo component, GenericProperty property) throws Exception {
-    // if we don't have sources, we can not do auto-externalizing
-    if (!m_sources.isEmpty()) {
-      // prepare source
-      AbstractSource source = m_sources.get(0);
-      String value = (String) property.getValue();
-      // change code to use externalized value
-      source.externalize(component, property, value);
-      // remember externalized value (for example in *.properties file)
-      source.setValue(property.getExpression(), value);
-    }
-  }
-
-  /**
-   * @return <code>true</code> if NLS strings in one or more {@link AbstractSource}'s were
-   *         externally changed. For example, if user changed .properties file in other editor.
-   */
-  public boolean isExternallyChanged() throws Exception {
-    for (AbstractSource source : m_sources) {
-      if (source.isExternallyChanged()) {
-        return true;
-      }
-    }
-    return false;
-  }
-
-  /**
-   * @return the array of all {@link LocaleInfo}'s in all source.
-   */
-  public LocaleInfo[] getLocales() throws Exception {
-    Set<LocaleInfo> locales = Sets.newHashSet();
-    for (AbstractSource source : m_sources) {
-      Collections.addAll(locales, source.getLocales());
-    }
-    addAlwaysVisibleLocales(locales);
-    return locales.toArray(new LocaleInfo[locales.size()]);
-  }
-
-  /**
-   * Adds {@link LocaleInfo} which should be always displayed to user.
-   */
-  private void addAlwaysVisibleLocales(Set<LocaleInfo> locales) {
-    IPreferenceStore preferences = m_root.getDescription().getToolkit().getPreferences();
-    String localesString = preferences.getString(IPreferenceConstants.P_NLS_ALWAYS_VISIBLE_LOCALES);
-    for (String localeString : StringUtils.split(localesString, ", ")) {
-      try {
-        LocaleInfo locale = LocaleInfo.create(localeString, localeString);
-        locales.add(locale);
-      } catch (Throwable e) {
-      }
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Edit support
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the new {@link IEditableSupport} for editing this {@link NlsSupport}.
-   */
-  public IEditableSupport getEditable() throws Exception {
-    return new EditableSupport(this);
-  }
-
-  /**
-   * Applies changes in given {@link IEditableSupport} into this {@link NlsSupport} - executes
-   * prepared {@link AbstractCommand}'s.
-   */
-  public void applyEditable(IEditableSupport editableSupport) throws Exception {
-    EditableSupport editable = (EditableSupport) editableSupport;
-    // apply commands
-    List<AbstractCommand> commands = editable.getCommands();
-    for (AbstractCommand command : commands) {
-      IEditableSource editableSource = command.getEditableSource();
-      // create source
-      if (command instanceof CreateSourceCommand) {
-        // create new source
-        CreateSourceCommand cmd = (CreateSourceCommand) command;
-        AbstractSource newSource =
-            cmd.getSourceDescription().createNewSource(editableSource, m_root, cmd.getParameters());
-        // add new source in containers
-        editable.addEditableToSourceMapping(editableSource, newSource);
-        m_sources.add(newSource);
-        // continue, because other commands require source, but we don't need it already
-        continue;
-      }
-      // prepare source for editable source
-      AbstractSource source = getAttachedSource(editable, editableSource);
-      // set values
-      if (command instanceof SetValuesCommand) {
-        SetValuesCommand cmd = (SetValuesCommand) command;
-        source.apply_setValues(cmd.getLocale(), cmd.getValues());
-      }
-      // rename key
-      if (command instanceof RenameKeyCommand) {
-        RenameKeyCommand cmd = (RenameKeyCommand) command;
-        source.apply_renameKeys(cmd.getOldToNewMap());
-      }
-      // add key
-      if (command instanceof AddKeyCommand) {
-        AddKeyCommand cmd = (AddKeyCommand) command;
-        source.apply_addKey(cmd.getKey());
-      }
-      // externalize property
-      if (command instanceof ExternalizePropertyCommand) {
-        ExternalizePropertyCommand cmd = (ExternalizePropertyCommand) command;
-        source.apply_externalizeProperty(cmd.getProperty(), cmd.getKey());
-      }
-      // internalize keys
-      if (command instanceof InternalizeKeyCommand) {
-        InternalizeKeyCommand cmd = (InternalizeKeyCommand) command;
-        source.apply_internalizeKeys(cmd.getKeys());
-      }
-      // add locale
-      if (command instanceof AddLocaleCommand) {
-        AddLocaleCommand cmd = (AddLocaleCommand) command;
-        source.apply_addLocale(cmd.getLocale(), cmd.getValues());
-      }
-      // remove locale
-      if (command instanceof RemoveLocaleCommand) {
-        RemoveLocaleCommand cmd = (RemoveLocaleCommand) command;
-        source.apply_removeLocale(cmd.getLocale());
-      }
-    }
-    // save, because many NLS operations change compilation unit and external files,
-    // so we should save them to keep consistent state
-    JavaInfoUtils.scheduleSave(m_root);
-  }
-
-  /**
-   * @return the {@link AbstractSource} that corresponds to {@link IEditableSource}. It ensures also
-   *         that if this {@link IEditableSource} does not exists/attached in this compilation unit,
-   *         it becomes attached.
-   */
-  public AbstractSource getAttachedSource(IEditableSupport editable, IEditableSource editableSource)
-      throws Exception {
-    EditableSupport editableImpl = (EditableSupport) editable;
-    // first try to get "real" source
-    AbstractSource source = editableImpl.getSource(editableSource);
-    // if there are no "real" source, try "possible" one
-    if (source == null) {
-      source = editableImpl.getPossibleSource(editableSource);
-      source.attachPossible();
-      // add new source in containers
-      editableImpl.addEditableToSourceMapping(editableSource, source);
-      m_sources.add(source);
-    }
-    return source;
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Expression source access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final String NLS_SOURCE = "NLS_SOURCE";
-
-  /**
-   * Mark given {@link Expression} as externalized using given {@link AbstractSource}.
-   */
-  public static void setSource(Expression expression, AbstractSource source) {
-    expression.setProperty(NLS_SOURCE, source);
-  }
-
-  /**
-   * @return the {@link AbstractSource} for given {@link Expression}.
-   */
-  public static AbstractSource getSource(Expression expression) {
-    return (AbstractSource) expression.getProperty(NLS_SOURCE);
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Bad expression
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final String NLS_BAD_EXPRESSION = "NLS_BAD_EXPRESSION";
-
-  /**
-   * Mark given {@link Expression} is bad, i.e. when we tried to create source, we found exception.
-   */
-  private static void markAsBadExpression(Expression expression) {
-    expression.setProperty(NLS_BAD_EXPRESSION, expression);
-  }
-
-  /**
-   * @return <code>true</code> if given {@link Expression} is bad, i.e. when we tried to create
-   *         source, we found exception.
-   */
-  public static boolean isBadExpression(Expression expression) {
-    return expression.getProperty(NLS_BAD_EXPRESSION) != null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final String NLS_SUPPORT = "NLS_SUPPORT";
+
+	/**
+	 * @return the {@link NlsSupport} for component of {@link JavaInfo} hierarchy.
+	 */
+	public static NlsSupport get(JavaInfo component) throws Exception {
+		AstEditor editor = component.getEditor();
+		NlsSupport support = (NlsSupport) editor.getGlobalValue(NLS_SUPPORT);
+		if (support == null) {
+			support = new NlsSupport(component.getRootJava());
+			editor.putGlobalValue(NLS_SUPPORT, support);
+		}
+		return support;
+	}
+
+	/**
+	 * Supports conversion of {@link Expression} into NLS value during parsing, i.e. when no root
+	 * {@link JavaInfo} is known.
+	 *
+	 * @return the {@link String} value or <code>null</code> if given {@link Expression} does not
+	 *         represent any known NLS pattern.
+	 */
+	public static String getValue(JavaInfo component, Expression expression) throws Exception {
+		for (SourceDescription sourceDescription : getSourceDescriptions(component)) {
+			try {
+				List<AbstractSource> sources = Lists.newArrayList();
+				AbstractSource source = sourceDescription.getSource(component, null, expression, sources);
+				if (source != null) {
+					setSource(expression, source);
+					return source.getValue(expression);
+				}
+			} catch (Throwable e) {
+			}
+		}
+		return null;
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// SourceDescription's
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final String POINT_NLS_SOURCES = "org.eclipse.wb.core.nlsSources";
+	private static Map<String, SourceDescription> m_idToDescription = Maps.newTreeMap();
+	private static Map<String, SourceDescription[]> m_toolkitToDescriptions = Maps.newTreeMap();
+
+	/**
+	 * @return the {@link SourceDescription} with given id.
+	 */
+	private static SourceDescription getSourceDescription(String id) throws Exception {
+		SourceDescription description = m_idToDescription.get(id);
+		if (description == null) {
+			List<IConfigurationElement> elements =
+					ExternalFactoriesHelper.getElements(POINT_NLS_SOURCES, "description");
+			for (IConfigurationElement element : elements) {
+				// check id
+				if (id.equals(element.getAttribute("id"))) {
+					// prepare classes
+					Bundle bundle = ExternalFactoriesHelper.getExtensionBundle(element);
+					Class<?> sourceClass = bundle.loadClass(element.getAttribute("source"));
+					Class<?> compositeClass = bundle.loadClass(element.getAttribute("composite"));
+					// create description
+					description = new SourceDescription(sourceClass, compositeClass);
+					m_idToDescription.put(id, description);
+				}
+			}
+		}
+		//
+		return description;
+	}
+
+	/**
+	 * @return array of {@link SourceDescription}'s for given {@link JavaInfo}.
+	 */
+	public static SourceDescription[] getSourceDescriptions(JavaInfo component) throws Exception {
+		// prepare descriptions for toolkit
+		String toolkitId = component.getDescription().getToolkit().getId();
+		SourceDescription[] descriptions = m_toolkitToDescriptions.get(toolkitId);
+		if (descriptions == null) {
+			List<SourceDescription> descriptionList = Lists.newArrayList();
+			// check all binding's
+			List<IConfigurationElement> elements =
+					ExternalFactoriesHelper.getElements(POINT_NLS_SOURCES, "binding");
+			for (IConfigurationElement element : elements) {
+				// check for toolkit
+				if (toolkitId.equals(element.getAttribute("toolkit"))) {
+					String descriptionId = element.getAttribute("description");
+					SourceDescription description = getSourceDescription(descriptionId);
+					if (description != null) {
+						descriptionList.add(description);
+					}
+				}
+			}
+			descriptions = descriptionList.toArray(new SourceDescription[descriptionList.size()]);
+		}
+		//
+		return descriptions;
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance fields
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final JavaInfo m_root;
+	private final SourceDescription[] m_sourceDescriptions;
+	private final List<AbstractSource> m_sources = Lists.newArrayList();
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private NlsSupport(JavaInfo root) throws Exception {
+		m_root = root;
+		m_sourceDescriptions = getSourceDescriptions(m_root);
+		prepareSources(m_root);
+		setDefaultLocaleDuringRefresh();
+		renameKeysOnVariableNameChange();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Broadcast based operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * If user chosen {@link Locale}, then set it as default during refresh.
+	 */
+	private void setDefaultLocaleDuringRefresh() {
+		m_root.addBroadcastListener(new ObjectEventListener() {
+			private Locale m_oldDefaultLocale;
+
+			@Override
+			public void refreshBeforeCreate() throws Exception {
+				LocaleInfo localeInfo = AbstractSource.getLocaleInfo(m_root);
+				if (localeInfo != null) {
+					Locale locale = localeInfo.getLocale();
+					if (locale != null) {
+						m_oldDefaultLocale = Locale.getDefault();
+						Locale.setDefault(locale);
+					}
+				}
+			}
+
+			@Override
+			public void refreshFinallyRefresh() {
+				if (m_oldDefaultLocale != null) {
+					Locale.setDefault(m_oldDefaultLocale);
+					m_oldDefaultLocale = null;
+				}
+			}
+		});
+	}
+
+	/**
+	 * When user renames component, we should rename associated NLS keys.
+	 */
+	private void renameKeysOnVariableNameChange() {
+		m_root.addBroadcastListener(new JavaEventListener() {
+			@Override
+			public void variable_setName(AbstractNamedVariableSupport variableSupport,
+					String oldName,
+					String newName) throws Exception {
+				IPreferenceStore preferences = m_root.getDescription().getToolkit().getPreferences();
+				if (oldName != null
+						&& newName != null
+						&& preferences.getBoolean(IPreferenceConstants.P_NLS_KEY_RENAME_WITH_VARIABLE)) {
+					IEditableSupport editable = getEditable();
+					for (AbstractSource source : getSources()) {
+						IKeyRenameStrategy keyRenameStrategy = source.getKeyRenameStrategy();
+						IEditableSource editableSource = editable.getEditableSource(source);
+						Set<String> keys = source.getKeys();
+						for (String oldKey : keys) {
+							String newKey = keyRenameStrategy.getNewKey(oldName, newName, oldKey);
+							if (!keys.contains(newKey)) {
+								editableSource.renameKey(oldKey, newKey);
+							}
+						}
+					}
+					applyEditable(editable);
+				}
+			}
+		});
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Initialization
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if given {@link Property} is a string property.
+	 */
+	public static boolean isStringProperty(Property property) {
+		return property instanceof GenericProperty
+				&& property.getEditor() instanceof StringPropertyEditor;
+	}
+
+	/**
+	 * Performs automatic externalize, if applicable and enabled.
+	 */
+	public static void autoExternalize(GenericProperty property) throws Exception {
+		if (isStringProperty(property)) {
+			JavaInfo javaInfo = property.getJavaInfo();
+			IPreferenceStore preferences = javaInfo.getDescription().getToolkit().getPreferences();
+			if (preferences.getBoolean(IPreferenceConstants.P_NLS_AUTO_EXTERNALIZE)) {
+				NlsSupport support = NlsSupport.get(javaInfo);
+				if (support.getSources() != null) {
+					support.externalize(javaInfo, property);
+				}
+			}
+		}
+	}
+
+	/**
+	 * Visits all components starting from given one and creates {@link AbstractSource} for each
+	 * expression of string {@link Property}.
+	 */
+	private void prepareSources(JavaInfo component) throws Exception {
+		// analyze properties of current component
+		Property[] properties = component.getProperties();
+		for (Property property : properties) {
+			if (NlsSupport.isStringProperty(property)) {
+				GenericProperty stringProperty = (GenericProperty) property;
+				Expression expression = stringProperty.getExpression();
+				// if property has expression, try to find NLS source
+				if (expression != null) {
+					for (SourceDescription sourceDescription : m_sourceDescriptions) {
+						// try to find source
+						try {
+							AbstractSource source =
+									sourceDescription.getSource(component, stringProperty, expression, m_sources);
+							if (source != null) {
+								// save source in expression
+								setSource(expression, source);
+								// add new source
+								if (!m_sources.contains(source)) {
+									m_sources.add(source);
+								}
+								// OK, we found source
+								break;
+							}
+						} catch (Throwable e) {
+							markAsBadExpression(expression);
+						}
+					}
+				}
+			}
+		}
+		// visit children
+		for (JavaInfo child : component.getChildrenJava()) {
+			prepareSources(child);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the root component.
+	 */
+	public JavaInfo getRoot() {
+		return m_root;
+	}
+
+	/**
+	 * @return the array of all {@link AbstractSource}'s in this this {@link NlsSupport}.
+	 */
+	public AbstractSource[] getSources() {
+		return m_sources.toArray(new AbstractSource[m_sources.size()]);
+	}
+
+	/**
+	 * @return <code>true</code> if given {@link Expression} is externalized.
+	 */
+	public boolean isExternalized(Expression expression) {
+		return expression != null && getSource(expression) != null;
+	}
+
+	/**
+	 * @return the {@link AbstractSource} that has value for given key.
+	 */
+	public AbstractSource getKeySource(String key) throws Exception {
+		for (AbstractSource source : getSources()) {
+			Set<String> keys = source.getKeys();
+			if (keys.contains(key)) {
+				return source;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * @return the {@link String} value of given {@link Expression}.
+	 */
+	public String getValue(Expression expression) throws Exception {
+		AbstractSource source = getSource(expression);
+		if (source != null) {
+			return source.getValue(expression);
+		}
+		return null;
+	}
+
+	/**
+	 * Changes value of given externalized {@link Expression} using its {@link AbstractSource}.
+	 */
+	public void setValue(Expression expression, String value) throws Exception {
+		AbstractSource source = getSource(expression);
+		source.setValue(expression, value);
+	}
+
+	/**
+	 * Externalizes given {@link GenericProperty}. We use this method for auto-externalizing new
+	 * properties.
+	 */
+	public void externalize(JavaInfo component, GenericProperty property) throws Exception {
+		// if we don't have sources, we can not do auto-externalizing
+		if (!m_sources.isEmpty()) {
+			// prepare source
+			AbstractSource source = m_sources.get(0);
+			String value = (String) property.getValue();
+			// change code to use externalized value
+			source.externalize(component, property, value);
+			// remember externalized value (for example in *.properties file)
+			source.setValue(property.getExpression(), value);
+		}
+	}
+
+	/**
+	 * @return <code>true</code> if NLS strings in one or more {@link AbstractSource}'s were
+	 *         externally changed. For example, if user changed .properties file in other editor.
+	 */
+	public boolean isExternallyChanged() throws Exception {
+		for (AbstractSource source : m_sources) {
+			if (source.isExternallyChanged()) {
+				return true;
+			}
+		}
+		return false;
+	}
+
+	/**
+	 * @return the array of all {@link LocaleInfo}'s in all source.
+	 */
+	public LocaleInfo[] getLocales() throws Exception {
+		Set<LocaleInfo> locales = Sets.newHashSet();
+		for (AbstractSource source : m_sources) {
+			Collections.addAll(locales, source.getLocales());
+		}
+		addAlwaysVisibleLocales(locales);
+		return locales.toArray(new LocaleInfo[locales.size()]);
+	}
+
+	/**
+	 * Adds {@link LocaleInfo} which should be always displayed to user.
+	 */
+	private void addAlwaysVisibleLocales(Set<LocaleInfo> locales) {
+		IPreferenceStore preferences = m_root.getDescription().getToolkit().getPreferences();
+		String localesString = preferences.getString(IPreferenceConstants.P_NLS_ALWAYS_VISIBLE_LOCALES);
+		for (String localeString : StringUtils.split(localesString, ", ")) {
+			try {
+				LocaleInfo locale = LocaleInfo.create(localeString, localeString);
+				locales.add(locale);
+			} catch (Throwable e) {
+			}
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Edit support
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the new {@link IEditableSupport} for editing this {@link NlsSupport}.
+	 */
+	public IEditableSupport getEditable() throws Exception {
+		return new EditableSupport(this);
+	}
+
+	/**
+	 * Applies changes in given {@link IEditableSupport} into this {@link NlsSupport} - executes
+	 * prepared {@link AbstractCommand}'s.
+	 */
+	public void applyEditable(IEditableSupport editableSupport) throws Exception {
+		EditableSupport editable = (EditableSupport) editableSupport;
+		// apply commands
+		List<AbstractCommand> commands = editable.getCommands();
+		for (AbstractCommand command : commands) {
+			IEditableSource editableSource = command.getEditableSource();
+			// create source
+			if (command instanceof CreateSourceCommand) {
+				// create new source
+				CreateSourceCommand cmd = (CreateSourceCommand) command;
+				AbstractSource newSource =
+						cmd.getSourceDescription().createNewSource(editableSource, m_root, cmd.getParameters());
+				// add new source in containers
+				editable.addEditableToSourceMapping(editableSource, newSource);
+				m_sources.add(newSource);
+				// continue, because other commands require source, but we don't need it already
+				continue;
+			}
+			// prepare source for editable source
+			AbstractSource source = getAttachedSource(editable, editableSource);
+			// set values
+			if (command instanceof SetValuesCommand) {
+				SetValuesCommand cmd = (SetValuesCommand) command;
+				source.apply_setValues(cmd.getLocale(), cmd.getValues());
+			}
+			// rename key
+			if (command instanceof RenameKeyCommand) {
+				RenameKeyCommand cmd = (RenameKeyCommand) command;
+				source.apply_renameKeys(cmd.getOldToNewMap());
+			}
+			// add key
+			if (command instanceof AddKeyCommand) {
+				AddKeyCommand cmd = (AddKeyCommand) command;
+				source.apply_addKey(cmd.getKey());
+			}
+			// externalize property
+			if (command instanceof ExternalizePropertyCommand) {
+				ExternalizePropertyCommand cmd = (ExternalizePropertyCommand) command;
+				source.apply_externalizeProperty(cmd.getProperty(), cmd.getKey());
+			}
+			// internalize keys
+			if (command instanceof InternalizeKeyCommand) {
+				InternalizeKeyCommand cmd = (InternalizeKeyCommand) command;
+				source.apply_internalizeKeys(cmd.getKeys());
+			}
+			// add locale
+			if (command instanceof AddLocaleCommand) {
+				AddLocaleCommand cmd = (AddLocaleCommand) command;
+				source.apply_addLocale(cmd.getLocale(), cmd.getValues());
+			}
+			// remove locale
+			if (command instanceof RemoveLocaleCommand) {
+				RemoveLocaleCommand cmd = (RemoveLocaleCommand) command;
+				source.apply_removeLocale(cmd.getLocale());
+			}
+		}
+		// save, because many NLS operations change compilation unit and external files,
+		// so we should save them to keep consistent state
+		JavaInfoUtils.scheduleSave(m_root);
+	}
+
+	/**
+	 * @return the {@link AbstractSource} that corresponds to {@link IEditableSource}. It ensures also
+	 *         that if this {@link IEditableSource} does not exists/attached in this compilation unit,
+	 *         it becomes attached.
+	 */
+	public AbstractSource getAttachedSource(IEditableSupport editable, IEditableSource editableSource)
+			throws Exception {
+		EditableSupport editableImpl = (EditableSupport) editable;
+		// first try to get "real" source
+		AbstractSource source = editableImpl.getSource(editableSource);
+		// if there are no "real" source, try "possible" one
+		if (source == null) {
+			source = editableImpl.getPossibleSource(editableSource);
+			source.attachPossible();
+			// add new source in containers
+			editableImpl.addEditableToSourceMapping(editableSource, source);
+			m_sources.add(source);
+		}
+		return source;
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Expression source access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final String NLS_SOURCE = "NLS_SOURCE";
+
+	/**
+	 * Mark given {@link Expression} as externalized using given {@link AbstractSource}.
+	 */
+	public static void setSource(Expression expression, AbstractSource source) {
+		expression.setProperty(NLS_SOURCE, source);
+	}
+
+	/**
+	 * @return the {@link AbstractSource} for given {@link Expression}.
+	 */
+	public static AbstractSource getSource(Expression expression) {
+		return (AbstractSource) expression.getProperty(NLS_SOURCE);
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Bad expression
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final String NLS_BAD_EXPRESSION = "NLS_BAD_EXPRESSION";
+
+	/**
+	 * Mark given {@link Expression} is bad, i.e. when we tried to create source, we found exception.
+	 */
+	private static void markAsBadExpression(Expression expression) {
+		expression.setProperty(NLS_BAD_EXPRESSION, expression);
+	}
+
+	/**
+	 * @return <code>true</code> if given {@link Expression} is bad, i.e. when we tried to create
+	 *         source, we found exception.
+	 */
+	public static boolean isBadExpression(Expression expression) {
+		return expression.getProperty(NLS_BAD_EXPRESSION) != null;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/SourceDescription.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/SourceDescription.java
index 77b3bc0ab..7119cd8fb 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/SourceDescription.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/SourceDescription.java
@@ -33,109 +33,109 @@
  * @coverage core.nls
  */
 public final class SourceDescription {
-  private final Class<?> m_sourceClass;
-  private final Class<?> m_newCompositeClass;
+	private final Class<?> m_sourceClass;
+	private final Class<?> m_newCompositeClass;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SourceDescription(Class<?> sourceClass, Class<?> newCompositeClass) {
-    m_sourceClass = sourceClass;
-    m_newCompositeClass = newCompositeClass;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SourceDescription(Class<?> sourceClass, Class<?> newCompositeClass) {
+		m_sourceClass = sourceClass;
+		m_newCompositeClass = newCompositeClass;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the class of the NLS source - {@link AbstractSource}
-   */
-  public Class<?> getSourceClass() {
-    return m_sourceClass;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the class of the NLS source - {@link AbstractSource}
+	 */
+	public Class<?> getSourceClass() {
+		return m_sourceClass;
+	}
 
-  /**
-   * @return the class of the new source composite - {@link AbstractSourceNewComposite}
-   */
-  public Class<?> getNewCompositeClass() {
-    return m_newCompositeClass;
-  }
+	/**
+	 * @return the class of the new source composite - {@link AbstractSourceNewComposite}
+	 */
+	public Class<?> getNewCompositeClass() {
+		return m_newCompositeClass;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Methods access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link AbstractSource} for given component, {@link GenericProperty} and
-   *         {@link Expression}.<br>
-   *         Can return <code>null</code> if this source does not recognize such expression.
-   */
-  public AbstractSource getSource(JavaInfo component,
-      GenericProperty property,
-      Expression expression,
-      List<AbstractSource> sources) throws Exception {
-    Method getSourceMethod =
-        m_sourceClass.getMethod("get", new Class[]{
-            JavaInfo.class,
-            GenericProperty.class,
-            Expression.class,
-            List.class});
-    return (AbstractSource) getSourceMethod.invoke(null, new Object[]{
-        component,
-        property,
-        expression,
-        sources});
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Methods access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link AbstractSource} for given component, {@link GenericProperty} and
+	 *         {@link Expression}.<br>
+	 *         Can return <code>null</code> if this source does not recognize such expression.
+	 */
+	public AbstractSource getSource(JavaInfo component,
+			GenericProperty property,
+			Expression expression,
+			List<AbstractSource> sources) throws Exception {
+		Method getSourceMethod =
+				m_sourceClass.getMethod("get", new Class[]{
+						JavaInfo.class,
+						GenericProperty.class,
+						Expression.class,
+						List.class});
+		return (AbstractSource) getSourceMethod.invoke(null, new Object[]{
+				component,
+				property,
+				expression,
+				sources});
+	}
 
-  /**
-   * @return the {@link List} of {@link AbstractSource}'s existing in given package.
-   */
-  @SuppressWarnings("unchecked")
-  public List<AbstractSource> getPossibleSources(JavaInfo root, IPackageFragment pkg)
-      throws Exception {
-    Method getPossibleSourcesMethod =
-        m_sourceClass.getMethod("getPossibleSources", new Class[]{
-            JavaInfo.class,
-            IPackageFragment.class});
-    return (List<AbstractSource>) getPossibleSourcesMethod.invoke(null, new Object[]{root, pkg});
-  }
+	/**
+	 * @return the {@link List} of {@link AbstractSource}'s existing in given package.
+	 */
+	@SuppressWarnings("unchecked")
+	public List<AbstractSource> getPossibleSources(JavaInfo root, IPackageFragment pkg)
+			throws Exception {
+		Method getPossibleSourcesMethod =
+				m_sourceClass.getMethod("getPossibleSources", new Class[]{
+						JavaInfo.class,
+						IPackageFragment.class});
+		return (List<AbstractSource>) getPossibleSourcesMethod.invoke(null, new Object[]{root, pkg});
+	}
 
-  /**
-   * @return the result of static method "getTitle()" in "new source composite" class. Result is
-   *         title that should be displayed for user.
-   */
-  public String getTitle() {
-    return (String) ReflectionUtils.invokeMethodEx(m_newCompositeClass, "getTitle()");
-  }
+	/**
+	 * @return the result of static method "getTitle()" in "new source composite" class. Result is
+	 *         title that should be displayed for user.
+	 */
+	public String getTitle() {
+		return (String) ReflectionUtils.invokeMethodEx(m_newCompositeClass, "getTitle()");
+	}
 
-  /**
-   * @return the new {@link AbstractSourceNewComposite} for requesting new source parameters.
-   */
-  public AbstractSourceNewComposite createNewComposite(Composite parent, JavaInfo root)
-      throws Exception {
-    Constructor<?> constructor =
-        m_newCompositeClass.getConstructor(new Class[]{Composite.class, int.class, JavaInfo.class});
-    return (AbstractSourceNewComposite) constructor.newInstance(new Object[]{parent, SWT.NONE, root});
-  }
+	/**
+	 * @return the new {@link AbstractSourceNewComposite} for requesting new source parameters.
+	 */
+	public AbstractSourceNewComposite createNewComposite(Composite parent, JavaInfo root)
+			throws Exception {
+		Constructor<?> constructor =
+				m_newCompositeClass.getConstructor(new Class[]{Composite.class, int.class, JavaInfo.class});
+		return (AbstractSourceNewComposite) constructor.newInstance(new Object[]{parent, SWT.NONE, root});
+	}
 
-  /**
-   * @return the new {@link AbstractSource} for given root and parameters.
-   */
-  public AbstractSource createNewSource(IEditableSource editableSource,
-      JavaInfo root,
-      Object parameters) throws Exception {
-    Method createMethod =
-        m_sourceClass.getMethod("apply_create", new Class[]{
-            IEditableSource.class,
-            JavaInfo.class,
-            Object.class});
-    return (AbstractSource) createMethod.invoke(
-        null,
-        new Object[]{editableSource, root, parameters});
-  }
+	/**
+	 * @return the new {@link AbstractSource} for given root and parameters.
+	 */
+	public AbstractSource createNewSource(IEditableSource editableSource,
+			JavaInfo root,
+			Object parameters) throws Exception {
+		Method createMethod =
+				m_sourceClass.getMethod("apply_create", new Class[]{
+						IEditableSource.class,
+						JavaInfo.class,
+						Object.class});
+		return (AbstractSource) createMethod.invoke(
+				null,
+				new Object[]{editableSource, root, parameters});
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/bundle/AbstractBundleSource.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/bundle/AbstractBundleSource.java
index ed86bdbcd..31b186a29 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/bundle/AbstractBundleSource.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/bundle/AbstractBundleSource.java
@@ -64,712 +64,712 @@
  * @coverage core.nls
  */
 public abstract class AbstractBundleSource extends AbstractSource {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Static fields
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected static final String NLS_EXPRESSION_INFO = "NLS_EXPRESSION_INFO";
-  private final HashMap<String, String> m_keyToValue = new HashMap<String, String>();
-  /**
-   * Usual key generator for *.properties files based sources.
-   */
-  public static final IKeyGeneratorStrategy KEY_GENERATOR = new IKeyGeneratorStrategy() {
-    @Override
-    public final String generateBaseKey(JavaInfo component, GenericProperty property) {
-      String typeName = getTypeName(component);
-      String componentName = component.getVariableSupport().getComponentName();
-      return typeName + "." + componentName + "." + property.getTitle();
-    }
-  };
-  /**
-   * Usual key rename strategy.
-   */
-  public static final IKeyRenameStrategy KEY_RENAME = new IKeyRenameStrategy() {
-    @Override
-    public String getNewKey(String oldName, String newName, String oldKey) {
-      if (oldName != null && oldKey.contains(oldName)) {
-        String newKey = oldKey;
-        newKey = StringUtils.replace(newKey, "." + oldName + ".", "." + newName + ".");
-        newKey = StringUtils.replace(newKey, "_" + oldName + "_", "_" + newName + "_");
-        {
-          String prefix = oldName + ".";
-          if (newKey.startsWith(prefix)) {
-            newKey = newName + "." + newKey.substring(prefix.length());
-          }
-        }
-        {
-          String prefix = oldName + "_";
-          if (newKey.startsWith(prefix)) {
-            newKey = newName + "_" + newKey.substring(prefix.length());
-          }
-        }
-        return newKey;
-      }
-      return oldKey;
-    }
-  };
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance fields
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected final String m_bundleName;
-  private final IFolder m_bundlesFolder;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractBundleSource(JavaInfo root, String bundleName) throws Exception {
-    super(root);
-    m_bundleName = bundleName;
-    // prepare bundles folder
-    {
-      IFile[] bundleFiles = getBundleFiles();
-      if (bundleFiles.length == 0) {
-        throw new IllegalStateException("At least one bundle file expected for: " + m_bundleName);
-      }
-      IContainer folder = bundleFiles[0].getParent();
-      if (folder instanceof IProject) {
-        // Activator messages located in the project root
-        IProject project = (IProject) folder;
-        m_bundlesFolder = project.getFolder("src");
-      } else {
-        // default: messages inside the src folder
-        m_bundlesFolder = (IFolder) bundleFiles[0].getParent();
-      }
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Comments in bundle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return some comments line that should be used in .properties file.
-   *
-   *         We use this line later during finding "possible" sources, so this line should contain
-   *         enough information for source to detect that this bundle is its one, plus may be some
-   *         additional information (for example field name in case of "ResourceBundle in field").
-   */
-  protected abstract String getBundleComment();
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Value access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the value for given key in current locale or "parent" locale.
-   */
-  protected final String getValue(String key) throws Exception {
-    // prepare locale
-    LocaleInfo localeInfo = getLocaleInfo();
-    // prepare value
-    String value = getValue(key, localeInfo);
-    // if value if null, may be we don't have such bundle or key in bundle, search in parent
-    if (value == null) {
-      LocaleInfo[] locales = getLocales();
-      // try to find key in parent locales, for example for 'ru_RU' we try first 'ru', then default locale
-      while (value == null && !localeInfo.isDefault()) {
-        localeInfo = localeInfo.getParent(locales);
-        return getValue(key, localeInfo);
-      }
-    }
-    //
-    return value;
-  }
-
-  /**
-   * @return the value for given key and locale. Can return <code>null</code> if there are no bundle
-   *         for such locale or no such key in bundle.
-   */
-  private String getValue(String key, LocaleInfo localeInfo) throws Exception {
-    BundleInfo bundleInfo = getBundleInfo(localeInfo);
-    return bundleInfo == null ? null : bundleInfo.getValue(key);
-  }
-
-  /**
-   * Set value of key in bundle for current locale.
-   */
-  protected final void setValueInBundle(String key, String value) throws Exception {
-    LocaleInfo localeInfo = getLocaleInfo();
-    BundleInfo bundleInfo = getBundleInfo(localeInfo);
-    if (bundleInfo != null) {
-      bundleInfo.setValue(key, value);
-      saveBundle(bundleInfo);
-    }
-  }
-
-  @Override
-  public final String getKey(Expression expression) throws Exception {
-    return getBasicExpressionInfo(expression).m_key;
-  }
-
-  @Override
-  public boolean isExternallyChanged() throws Exception {
-    LocaleInfo localeInfo = getLocaleInfo();
-    BundleInfo bundleInfo = getBundleInfo(localeInfo);
-    return bundleInfo.isExternallyChanged();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Auto externalize support
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void externalize(JavaInfo component, GenericProperty property, String value)
-      throws Exception {
-    // prepare key
-    String baseKey = null;
-    String key = null;
-    IPreferenceStore preferences = component.getDescription().getToolkit().getPreferences();
-    if (preferences.getBoolean(IPreferenceConstants.P_NLS_KEY_AS_STRING_VALUE_ONLY)) {
-      baseKey = shrinkText(value);
-    } else {
-      baseKey = getKeyGeneratorStrategy().generateBaseKey(component, property);
-      if (preferences.getBoolean(IPreferenceConstants.P_NLS_KEY_HAS_STRING_VALUE)) {
-        baseKey += "_" + shrinkText(value);
-      }
-    }
-    key = AbstractSource.generateUniqueKey(m_keyToValue, baseKey, value);
-    m_keyToValue.put(key, value);
-    // externalize with prepared key
-    apply_externalizeProperty(property, key);
-  }
-
-  @Override
-  public final void useKey(GenericProperty property, String key) throws Exception {
-    ensureStringLiteral(property);
-    // replace direct string expression with externalization expression
-    BasicExpressionInfo expressionInfo = apply_externalize_replaceExpression(property, key);
-    // ensure that all works correctly
-    Assert.isNotNull(
-        expressionInfo,
-        "Not-null expression information expected for newly externalized property.");
-    // mark expression as externalized using this source
-    onKeyAdd(property.getJavaInfo(), key);
-    NlsSupport.setSource(expressionInfo.m_expression, this);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Edit support
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final IEditableSource getEditable() throws Exception {
-    EditableSource editableSource = new EditableSource();
-    editableSource.setShortTitle(getTitle());
-    editableSource.setLongTitle(getTitle() + " (" + getTypeTitle() + ")");
-    //
-    LocaleInfo[] locales = getLocales();
-    for (int i = 0; i < locales.length; i++) {
-      LocaleInfo locale = locales[i];
-      BundleInfo bundle = getBundleInfo(locale);
-      editableSource.add(locale, bundle.getMap());
-    }
-    //
-    editableSource.setFormKeys(getFormKeys());
-    editableSource.setKeyToComponentsSupport(getKeyToComponentsSupport().getCopy(false));
-    editableSource.setKeyGeneratorStrategy(getKeyGeneratorStrategy());
-    return editableSource;
-  }
-
-  /**
-   * @return the {@link IKeyGeneratorStrategy}. Usually we return {@link #KEY_GENERATOR}, but some
-   *         sources can use other generators.
-   */
-  protected abstract IKeyGeneratorStrategy getKeyGeneratorStrategy();
-
-  /**
-   * @return the {@link IKeyRenameStrategy}, usually standard {@link #KEY_RENAME}.
-   */
-  @Override
-  public IKeyRenameStrategy getKeyRenameStrategy() {
-    return KEY_RENAME;
-  }
-
-  @Override
-  public final void apply_renameKeys(final Map<String, String> oldToNew) throws Exception {
-    final AstEditor editor = m_root.getEditor();
-    // allow subclasses do preparing work
-    apply_renameKeys_pre(oldToNew);
-    // prepare list of expression information objects
-    final List<BasicExpressionInfo> expressionInformationList = Lists.newArrayList();
-    editor.getAstUnit().accept(new ASTVisitor() {
-      @Override
-      public void postVisit(ASTNode node) {
-        if (node instanceof Expression) {
-          Expression expression = (Expression) node;
-          // check that we have expression information with this source
-          BasicExpressionInfo expressionInfo = getBasicExpressionInfo(expression);
-          if (expressionInfo == null) {
-            return;
-          }
-          // remember information
-          expressionInformationList.add(expressionInfo);
-        }
-      }
-    });
-    // replace keys in expressions
-    for (BasicExpressionInfo expressionInfo : expressionInformationList) {
-      // replace key
-      String newKey = oldToNew.get(expressionInfo.m_key);
-      if (newKey != null) {
-        // replace key expression
-        Expression newKeyExpression =
-            apply_renameKey_replaceKeyExpression(editor, expressionInfo.m_keyExpression, newKey);
-        // change expression information
-        expressionInfo.m_keyExpression = newKeyExpression;
-        expressionInfo.m_key = newKey;
-      }
-    }
-    // update collections
-    for (Map.Entry<String, String> entry : oldToNew.entrySet()) {
-      String oldKey = entry.getKey();
-      String newKey = entry.getValue();
-      onKeyRename(oldKey, newKey);
-    }
-  }
-
-  /**
-   * Replaces existing key {@link Expression} with new one, corresponding to new given new key.
-   *
-   * @return the new {@link Expression} for key.
-   */
-  protected abstract Expression apply_renameKey_replaceKeyExpression(AstEditor editor,
-      Expression keyExpression,
-      String newKey) throws Exception;
-
-  /**
-   * This method is invoked before keys rename in compilation unit.
-   *
-   * In most sources we don't need it. But for sources that should change some external compilation
-   * units, we need composite rename method.
-   */
-  protected void apply_renameKeys_pre(Map<String, String> oldToNew) throws Exception {
-  }
-
-  @Override
-  public final void apply_setValues(LocaleInfo locale, Map<String, String> values)
-      throws Exception {
-    BundleInfo bundleInfo = getBundleInfo(locale);
-    bundleInfo.setMap(values);
-    saveBundle(bundleInfo);
-  }
-
-  @Override
-  public void apply_addLocale(LocaleInfo locale, Map<String, String> values) throws Exception {
-    String shortBundleName = CodeUtils.getShortClass(m_bundleName);
-    // create empty file for bundle
-    {
-      String bundleFileName = shortBundleName + "_" + locale.getLocale().toString() + ".properties";
-      createPropertyBundleFile(m_bundlesFolder, bundleFileName, getCharsetForBundleFiles());
-    }
-    // change values in bundle
-    BundleInfo bundleInfo = getBundleInfo(locale);
-    bundleInfo.setMap(values);
-    saveBundle(bundleInfo);
-  }
-
-  /**
-   * In usual *.properties files encoding is ISO-8859-1. But in GWT we can use UTF-8, so we need
-   * this method to specify default encoding for new bundle files.
-   */
-  protected String getCharsetForBundleFiles() {
-    return null;
-  }
-
-  @Override
-  public void apply_removeLocale(LocaleInfo locale) throws Exception {
-    BundleInfo bundleInfo = getBundleInfo(locale);
-    bundleInfo.getFile().delete(true, new NullProgressMonitor());
-    m_localeToBundleMap.remove(locale);
-  }
-
-  @Override
-  public void apply_addKey(String key) throws Exception {
-  }
-
-  @Override
-  public final void apply_externalizeProperty(GenericProperty property, String key)
-      throws Exception {
-    apply_addKey(key);
-    useKey(property, key);
-  }
-
-  /**
-   * Replace given expression with externalized code.
-   */
-  protected abstract BasicExpressionInfo apply_externalize_replaceExpression(
-      GenericProperty property, String key) throws Exception;
-
-  @Override
-  public final void apply_internalizeKeys(final Set<String> keys) throws Exception {
-    // internalize keys in expressions
-    final AstEditor editor = m_root.getEditor();
-    editor.getAstUnit().accept(new AstVisitorEx() {
-      @Override
-      public void postVisitEx(ASTNode node) throws Exception {
-        if (node instanceof Expression) {
-          Expression expression = (Expression) node;
-          // check that we have expression information
-          BasicExpressionInfo expressionInfo = getBasicExpressionInfo(expression);
-          if (expressionInfo == null) {
-            return;
-          }
-          // check for remove
-          if (keys.contains(expressionInfo.m_key)) {
-            // remove // comments for key and may be something else
-            apply_removeNonNLSComments(expressionInfo);
-            // replace NLS expression with current value StringLiteral
-            String currentValue = getValue(expression);
-            String code = StringConverter.INSTANCE.toJavaSource(m_root, currentValue);
-            editor.replaceExpression(expression, code);
-          }
-        }
-      }
-    });
-    // update collections
-    for (String key : keys) {
-      onKeyInternalize(key);
-    }
-    // allow subclasses do more work
-    apply_internalizeKeys_post(keys);
-  }
-
-  /**
-   * This method is invoked during keys internalizing.
-   *
-   * In most sources we don't need it. But for sources that should change some external compilation
-   * units, we need composite internalize method.
-   */
-  protected void apply_internalizeKeys_post(Set<String> keys) throws Exception {
-  }
-
-  /**
-   * This method allows subclasses remove any other NON-NLS comments that they can use. It is used
-   * during internalizing keys. For example "classic" Eclipse NLS style can have default value, so
-   * we should remove comments for it.
-   */
-  protected void apply_removeNonNLSComments(BasicExpressionInfo basicExpressionInfo)
-      throws Exception {
-  }
-
-  /**
-   * Replace given {@link Expression} with new {@link Expression} with given code and return
-   * getExpressionInfo() for this new expression.
-   */
-  protected final Object replaceExpression_getInfo(Expression expression, String code)
-      throws Exception {
-    // replace expression
-    Expression newExpression = m_root.getEditor().replaceExpression(expression, code);
-    // call "private static getExpressionInfo()"
-    {
-      Method getExpressionInfoMethod = getClass().getDeclaredMethod(
-          "getExpressionInfo",
-          new Class[]{JavaInfo.class, Expression.class});
-      getExpressionInfoMethod.setAccessible(true);
-      // side effect of this invocation is that ExpressionInfo placed in newExpression
-      return getExpressionInfoMethod.invoke(null, new Object[]{m_root, newExpression});
-    }
-  }
-
-  /**
-   * If given expression is {@link StringLiteral}, adds "//$NON-NLS-xxx" comment for it.
-   */
-  protected final void addNonNLSComment(Expression stringLiteralExpression) throws Exception {
-    AstEditor editor = m_root.getEditor();
-    if (stringLiteralExpression instanceof StringLiteral) {
-      int index = editor.getStringLiteralNumberOnLine((StringLiteral) stringLiteralExpression);
-      editor.addEndOfLineComment(
-          stringLiteralExpression.getStartPosition(),
-          " //$NON-NLS-" + (1 + index) + "$");
-    }
-  }
-
-  /**
-   * Remove "//$NON-NLS-xxx" comment for given {@link StringLiteral}.
-   */
-  protected final void removeNonNLSComment(StringLiteral literal) throws Exception {
-    AstEditor editor = m_root.getEditor();
-    if (literal != null) {
-      int index = editor.getStringLiteralNumberOnLine(literal);
-      if (index != -1) {
-        String comment = "//$NON-NLS-" + (1 + index) + "$";
-        editor.removeEndOfLineComment(literal.getStartPosition(), comment);
-      }
-    }
-  }
-
-  /**
-   * Creates *.properties file with given name and encoding in given package.
-   */
-  protected static void createPropertyBundleFile(IPackageFragment targetPackage,
-      String propertyFileName,
-      String charset) throws Exception {
-    if (targetPackage instanceof IProject) {
-      IProject project = (IProject) targetPackage;
-      project.getFile(propertyFileName);
-    }
-    IFolder folder = (IFolder) targetPackage.getUnderlyingResource();
-    createPropertyBundleFile(folder, propertyFileName, charset);
-  }
-
-  /**
-   * Creates *.properties file with given name and encoding in given folder.
-   */
-  protected static void createPropertyBundleFile(IFolder folder,
-      String propertyFileName,
-      String charset) throws Exception {
-    IFile propertyFile = createFileIfDoesNotExist(folder, propertyFileName, "");
-    if (propertyFile != null) {
-      if (charset != null) {
-        propertyFile.setCharset(charset, null);
-      }
-    }
-  }
-
-  /**
-   * Creates file with given name and contents in given package.
-   *
-   * @return new {@link IFile} or <code>null</code> if file already exists
-   */
-  protected static IFile createFileIfDoesNotExist(IFolder folder, String fileName, String contents)
-      throws Exception {
-    IFile file = folder.getFile(fileName);
-    if (!file.exists()) {
-      file.create(new ByteArrayInputStream(contents.getBytes()), true, new NullProgressMonitor());
-      return file;
-    }
-    return null;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Replace
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final void replace_toStringLiteral(GenericProperty property, String value)
-      throws Exception {
-    Expression expression = property.getExpression();
-    BasicExpressionInfo expressionInfo = getBasicExpressionInfo(expression);
-    // notify that key is not used by this expression
-    getKeyToComponentsSupport().remove(property.getJavaInfo(), expressionInfo.m_key);
-    // remove // comments for key and may be something else
-    apply_removeNonNLSComments(expressionInfo);
-    // replace NLS expression with StringLiteral of given value
-    String code = StringConverter.INSTANCE.toJavaSource(m_root, value);
-    m_root.getEditor().replaceExpression(expression, code);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final String getTitle() throws Exception {
-    return m_bundleName;
-  }
-
-  @Override
-  public final LocaleInfo[] getLocales() throws Exception {
-    IFile[] bundleFiles = getBundleFiles();
-    return getLocales(bundleFiles);
-  }
-
-  private LocaleInfo[] getLocales(IFile[] bundleFiles) {
-    Set<LocaleInfo> locales = Sets.newHashSet();
-    for (int i = 0; i < bundleFiles.length; i++) {
-      IFile file = bundleFiles[i];
-      locales.add(BundleInfo.getLocale(m_bundleName, file));
-    }
-    return locales.toArray(new LocaleInfo[locales.size()]);
-  }
-
-  @Override
-  public Set<String> getKeys() throws Exception {
-    Set<String> keys = Sets.newHashSet();
-    for (LocaleInfo locale : getLocales()) {
-      BundleInfo bundle = getBundleInfo(locale);
-      keys.addAll(bundle.getKeys());
-    }
-    return keys;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Basic expression information object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Basic information about expression.
-   */
-  protected static class BasicExpressionInfo {
-    private final Expression m_expression;
-    public Expression m_keyExpression;
-    public String m_key;
-
-    public BasicExpressionInfo(Expression expression, Expression keyExpression, String key) {
-      m_expression = expression;
-      m_keyExpression = keyExpression;
-      m_key = key;
-    }
-  }
-
-  /**
-   * Get information from expression. Ensure that this information comes from current source.
-   */
-  protected final BasicExpressionInfo getBasicExpressionInfo(Expression expression) {
-    AbstractSource expressionSource = NlsSupport.getSource(expression);
-    if (expressionSource == this) {
-      return (BasicExpressionInfo) expression.getProperty(NLS_EXPRESSION_INFO);
-    }
-    return null;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Bundle access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final Map<LocaleInfo, BundleInfo> m_localeToBundleMap = Maps.newHashMap();
-
-  /**
-   * Return existing or new information about resource bundle for given locale.
-   */
-  protected final BundleInfo getBundleInfo(LocaleInfo localeInfo) throws Exception {
-    BundleInfo bundleInfo = m_localeToBundleMap.get(localeInfo);
-    if (bundleInfo == null) {
-      IPropertiesAccessor propertiesAccessor = getPropertiesAccessor();
-      IFile[] files = getBundleFiles();
-      bundleInfo = BundleInfo.createBundle(propertiesAccessor, m_bundleName, localeInfo, files);
-      m_localeToBundleMap.put(localeInfo, bundleInfo);
-    }
-    return bundleInfo;
-  }
-
-  /**
-   * @return {@link IPropertiesAccessor} that should be used to read bundles.
-   */
-  protected IPropertiesAccessor getPropertiesAccessor() {
-    return StandardPropertiesAccessor.INSTANCE;
-  }
-
-  /**
-   * Save given bundle.
-   */
-  private void saveBundle(BundleInfo bundleInfo) throws Exception {
-    bundleInfo.save(getBundleComment());
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // *.properties files
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Return list of IResource's that represent bundle files (*.properties) for given bundle name.
-   */
-  protected final IFile[] getBundleFiles() throws Exception {
-    if (getClass().equals(ActivatorSource.class)) {
-      // support for messages in the plugin root
-      return getBundleFilesActivator();
-    }
-    List<IFile> bundleFiles = Lists.newArrayList();
-    String bundlePath = m_bundleName.replace('.', '/');
-    String bundleFileName = new Path(bundlePath).lastSegment();
-    // iterate over all source containers
-    for (IContainer container : getSourceContainers()) {
-      // prepare container children
-      IResource[] resources = new IResource[0];
-      {
-        IPath folderPath = new Path(bundlePath).removeLastSegments(1);
-        IFolder folder = container.getFolder(folderPath);
-        if (folder.exists()) {
-          resources = folder.members();
-        }
-      }
-      // find properties files for given bundle name
-      for (IResource resource : resources) {
-        String fileName = resource.getName();
-        if (fileName.endsWith(".properties")) {
-          if (fileName.startsWith(bundleFileName + "_")
-              || fileName.startsWith(bundleFileName + ".")) {
-            if (!bundleFiles.contains(resource)) {
-              bundleFiles.add((IFile) resource);
-            }
-          }
-        }
-      }
-    }
-    // return resources as array
-    return bundleFiles.toArray(new IFile[bundleFiles.size()]);
-  }
-
-  /**
-   * Return list of IResource's (*.properties) for the Activator type
-   */
-  private IFile[] getBundleFilesActivator() throws Exception, CoreException {
-    List<IFile> bundleFiles = Lists.newArrayList();
-    // locate any messages inside src container
-    for (IContainer container : getSourceContainers()) {
-      IFolder folder = container.getFolder(new Path("."));
-      IResource[] resources = new IResource[0];
-      if (folder.exists()) {
-        resources = folder.members();
-      }
-      for (IResource resource : resources) {
-        String fileName = resource.getName();
-        if (fileName.endsWith(".properties")) {
-          if (fileName.startsWith("plugin_") || fileName.startsWith("plugin.")) {
-            if (!bundleFiles.contains(resource)) {
-              bundleFiles.add((IFile) resource);
-            }
-          }
-        }
-      }
-    }
-    // locate any messages in the project (root) container
-    {
-      for (IContainer container : getSourceContainers()) {
-        IProject project = container.getProject();
-        IResource[] resources2 = project.members();
-        for (IResource resource : resources2) {
-          String fileName = resource.getName();
-          if (fileName.endsWith(".properties")) {
-            if (fileName.startsWith("plugin_")
-                || fileName.startsWith("plugin.")
-                || fileName.startsWith(m_bundleName + "_")
-                || fileName.startsWith(m_bundleName + ".")) {
-              if (!bundleFiles.contains(resource)) {
-                bundleFiles.add((IFile) resource);
-              }
-            }
-          }
-        }
-      }
-    }
-    // return resources as array
-    return bundleFiles.toArray(new IFile[bundleFiles.size()]);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Source containers
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Returns IContainer's for all source directories of current Java project.
-   */
-  private List<IContainer> getSourceContainers() throws Exception {
-    return CodeUtils.getSourceContainers(m_javaProject, true);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Static fields
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected static final String NLS_EXPRESSION_INFO = "NLS_EXPRESSION_INFO";
+	private final HashMap<String, String> m_keyToValue = new HashMap<String, String>();
+	/**
+	 * Usual key generator for *.properties files based sources.
+	 */
+	public static final IKeyGeneratorStrategy KEY_GENERATOR = new IKeyGeneratorStrategy() {
+		@Override
+		public final String generateBaseKey(JavaInfo component, GenericProperty property) {
+			String typeName = getTypeName(component);
+			String componentName = component.getVariableSupport().getComponentName();
+			return typeName + "." + componentName + "." + property.getTitle();
+		}
+	};
+	/**
+	 * Usual key rename strategy.
+	 */
+	public static final IKeyRenameStrategy KEY_RENAME = new IKeyRenameStrategy() {
+		@Override
+		public String getNewKey(String oldName, String newName, String oldKey) {
+			if (oldName != null && oldKey.contains(oldName)) {
+				String newKey = oldKey;
+				newKey = StringUtils.replace(newKey, "." + oldName + ".", "." + newName + ".");
+				newKey = StringUtils.replace(newKey, "_" + oldName + "_", "_" + newName + "_");
+				{
+					String prefix = oldName + ".";
+					if (newKey.startsWith(prefix)) {
+						newKey = newName + "." + newKey.substring(prefix.length());
+					}
+				}
+				{
+					String prefix = oldName + "_";
+					if (newKey.startsWith(prefix)) {
+						newKey = newName + "_" + newKey.substring(prefix.length());
+					}
+				}
+				return newKey;
+			}
+			return oldKey;
+		}
+	};
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance fields
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected final String m_bundleName;
+	private final IFolder m_bundlesFolder;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractBundleSource(JavaInfo root, String bundleName) throws Exception {
+		super(root);
+		m_bundleName = bundleName;
+		// prepare bundles folder
+		{
+			IFile[] bundleFiles = getBundleFiles();
+			if (bundleFiles.length == 0) {
+				throw new IllegalStateException("At least one bundle file expected for: " + m_bundleName);
+			}
+			IContainer folder = bundleFiles[0].getParent();
+			if (folder instanceof IProject) {
+				// Activator messages located in the project root
+				IProject project = (IProject) folder;
+				m_bundlesFolder = project.getFolder("src");
+			} else {
+				// default: messages inside the src folder
+				m_bundlesFolder = (IFolder) bundleFiles[0].getParent();
+			}
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Comments in bundle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return some comments line that should be used in .properties file.
+	 *
+	 *         We use this line later during finding "possible" sources, so this line should contain
+	 *         enough information for source to detect that this bundle is its one, plus may be some
+	 *         additional information (for example field name in case of "ResourceBundle in field").
+	 */
+	protected abstract String getBundleComment();
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Value access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the value for given key in current locale or "parent" locale.
+	 */
+	protected final String getValue(String key) throws Exception {
+		// prepare locale
+		LocaleInfo localeInfo = getLocaleInfo();
+		// prepare value
+		String value = getValue(key, localeInfo);
+		// if value if null, may be we don't have such bundle or key in bundle, search in parent
+		if (value == null) {
+			LocaleInfo[] locales = getLocales();
+			// try to find key in parent locales, for example for 'ru_RU' we try first 'ru', then default locale
+			while (value == null && !localeInfo.isDefault()) {
+				localeInfo = localeInfo.getParent(locales);
+				return getValue(key, localeInfo);
+			}
+		}
+		//
+		return value;
+	}
+
+	/**
+	 * @return the value for given key and locale. Can return <code>null</code> if there are no bundle
+	 *         for such locale or no such key in bundle.
+	 */
+	private String getValue(String key, LocaleInfo localeInfo) throws Exception {
+		BundleInfo bundleInfo = getBundleInfo(localeInfo);
+		return bundleInfo == null ? null : bundleInfo.getValue(key);
+	}
+
+	/**
+	 * Set value of key in bundle for current locale.
+	 */
+	protected final void setValueInBundle(String key, String value) throws Exception {
+		LocaleInfo localeInfo = getLocaleInfo();
+		BundleInfo bundleInfo = getBundleInfo(localeInfo);
+		if (bundleInfo != null) {
+			bundleInfo.setValue(key, value);
+			saveBundle(bundleInfo);
+		}
+	}
+
+	@Override
+	public final String getKey(Expression expression) throws Exception {
+		return getBasicExpressionInfo(expression).m_key;
+	}
+
+	@Override
+	public boolean isExternallyChanged() throws Exception {
+		LocaleInfo localeInfo = getLocaleInfo();
+		BundleInfo bundleInfo = getBundleInfo(localeInfo);
+		return bundleInfo.isExternallyChanged();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Auto externalize support
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void externalize(JavaInfo component, GenericProperty property, String value)
+			throws Exception {
+		// prepare key
+		String baseKey = null;
+		String key = null;
+		IPreferenceStore preferences = component.getDescription().getToolkit().getPreferences();
+		if (preferences.getBoolean(IPreferenceConstants.P_NLS_KEY_AS_STRING_VALUE_ONLY)) {
+			baseKey = shrinkText(value);
+		} else {
+			baseKey = getKeyGeneratorStrategy().generateBaseKey(component, property);
+			if (preferences.getBoolean(IPreferenceConstants.P_NLS_KEY_HAS_STRING_VALUE)) {
+				baseKey += "_" + shrinkText(value);
+			}
+		}
+		key = AbstractSource.generateUniqueKey(m_keyToValue, baseKey, value);
+		m_keyToValue.put(key, value);
+		// externalize with prepared key
+		apply_externalizeProperty(property, key);
+	}
+
+	@Override
+	public final void useKey(GenericProperty property, String key) throws Exception {
+		ensureStringLiteral(property);
+		// replace direct string expression with externalization expression
+		BasicExpressionInfo expressionInfo = apply_externalize_replaceExpression(property, key);
+		// ensure that all works correctly
+		Assert.isNotNull(
+				expressionInfo,
+				"Not-null expression information expected for newly externalized property.");
+		// mark expression as externalized using this source
+		onKeyAdd(property.getJavaInfo(), key);
+		NlsSupport.setSource(expressionInfo.m_expression, this);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Edit support
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final IEditableSource getEditable() throws Exception {
+		EditableSource editableSource = new EditableSource();
+		editableSource.setShortTitle(getTitle());
+		editableSource.setLongTitle(getTitle() + " (" + getTypeTitle() + ")");
+		//
+		LocaleInfo[] locales = getLocales();
+		for (int i = 0; i < locales.length; i++) {
+			LocaleInfo locale = locales[i];
+			BundleInfo bundle = getBundleInfo(locale);
+			editableSource.add(locale, bundle.getMap());
+		}
+		//
+		editableSource.setFormKeys(getFormKeys());
+		editableSource.setKeyToComponentsSupport(getKeyToComponentsSupport().getCopy(false));
+		editableSource.setKeyGeneratorStrategy(getKeyGeneratorStrategy());
+		return editableSource;
+	}
+
+	/**
+	 * @return the {@link IKeyGeneratorStrategy}. Usually we return {@link #KEY_GENERATOR}, but some
+	 *         sources can use other generators.
+	 */
+	protected abstract IKeyGeneratorStrategy getKeyGeneratorStrategy();
+
+	/**
+	 * @return the {@link IKeyRenameStrategy}, usually standard {@link #KEY_RENAME}.
+	 */
+	@Override
+	public IKeyRenameStrategy getKeyRenameStrategy() {
+		return KEY_RENAME;
+	}
+
+	@Override
+	public final void apply_renameKeys(final Map<String, String> oldToNew) throws Exception {
+		final AstEditor editor = m_root.getEditor();
+		// allow subclasses do preparing work
+		apply_renameKeys_pre(oldToNew);
+		// prepare list of expression information objects
+		final List<BasicExpressionInfo> expressionInformationList = Lists.newArrayList();
+		editor.getAstUnit().accept(new ASTVisitor() {
+			@Override
+			public void postVisit(ASTNode node) {
+				if (node instanceof Expression) {
+					Expression expression = (Expression) node;
+					// check that we have expression information with this source
+					BasicExpressionInfo expressionInfo = getBasicExpressionInfo(expression);
+					if (expressionInfo == null) {
+						return;
+					}
+					// remember information
+					expressionInformationList.add(expressionInfo);
+				}
+			}
+		});
+		// replace keys in expressions
+		for (BasicExpressionInfo expressionInfo : expressionInformationList) {
+			// replace key
+			String newKey = oldToNew.get(expressionInfo.m_key);
+			if (newKey != null) {
+				// replace key expression
+				Expression newKeyExpression =
+						apply_renameKey_replaceKeyExpression(editor, expressionInfo.m_keyExpression, newKey);
+				// change expression information
+				expressionInfo.m_keyExpression = newKeyExpression;
+				expressionInfo.m_key = newKey;
+			}
+		}
+		// update collections
+		for (Map.Entry<String, String> entry : oldToNew.entrySet()) {
+			String oldKey = entry.getKey();
+			String newKey = entry.getValue();
+			onKeyRename(oldKey, newKey);
+		}
+	}
+
+	/**
+	 * Replaces existing key {@link Expression} with new one, corresponding to new given new key.
+	 *
+	 * @return the new {@link Expression} for key.
+	 */
+	protected abstract Expression apply_renameKey_replaceKeyExpression(AstEditor editor,
+			Expression keyExpression,
+			String newKey) throws Exception;
+
+	/**
+	 * This method is invoked before keys rename in compilation unit.
+	 *
+	 * In most sources we don't need it. But for sources that should change some external compilation
+	 * units, we need composite rename method.
+	 */
+	protected void apply_renameKeys_pre(Map<String, String> oldToNew) throws Exception {
+	}
+
+	@Override
+	public final void apply_setValues(LocaleInfo locale, Map<String, String> values)
+			throws Exception {
+		BundleInfo bundleInfo = getBundleInfo(locale);
+		bundleInfo.setMap(values);
+		saveBundle(bundleInfo);
+	}
+
+	@Override
+	public void apply_addLocale(LocaleInfo locale, Map<String, String> values) throws Exception {
+		String shortBundleName = CodeUtils.getShortClass(m_bundleName);
+		// create empty file for bundle
+		{
+			String bundleFileName = shortBundleName + "_" + locale.getLocale().toString() + ".properties";
+			createPropertyBundleFile(m_bundlesFolder, bundleFileName, getCharsetForBundleFiles());
+		}
+		// change values in bundle
+		BundleInfo bundleInfo = getBundleInfo(locale);
+		bundleInfo.setMap(values);
+		saveBundle(bundleInfo);
+	}
+
+	/**
+	 * In usual *.properties files encoding is ISO-8859-1. But in GWT we can use UTF-8, so we need
+	 * this method to specify default encoding for new bundle files.
+	 */
+	protected String getCharsetForBundleFiles() {
+		return null;
+	}
+
+	@Override
+	public void apply_removeLocale(LocaleInfo locale) throws Exception {
+		BundleInfo bundleInfo = getBundleInfo(locale);
+		bundleInfo.getFile().delete(true, new NullProgressMonitor());
+		m_localeToBundleMap.remove(locale);
+	}
+
+	@Override
+	public void apply_addKey(String key) throws Exception {
+	}
+
+	@Override
+	public final void apply_externalizeProperty(GenericProperty property, String key)
+			throws Exception {
+		apply_addKey(key);
+		useKey(property, key);
+	}
+
+	/**
+	 * Replace given expression with externalized code.
+	 */
+	protected abstract BasicExpressionInfo apply_externalize_replaceExpression(
+			GenericProperty property, String key) throws Exception;
+
+	@Override
+	public final void apply_internalizeKeys(final Set<String> keys) throws Exception {
+		// internalize keys in expressions
+		final AstEditor editor = m_root.getEditor();
+		editor.getAstUnit().accept(new AstVisitorEx() {
+			@Override
+			public void postVisitEx(ASTNode node) throws Exception {
+				if (node instanceof Expression) {
+					Expression expression = (Expression) node;
+					// check that we have expression information
+					BasicExpressionInfo expressionInfo = getBasicExpressionInfo(expression);
+					if (expressionInfo == null) {
+						return;
+					}
+					// check for remove
+					if (keys.contains(expressionInfo.m_key)) {
+						// remove // comments for key and may be something else
+						apply_removeNonNLSComments(expressionInfo);
+						// replace NLS expression with current value StringLiteral
+						String currentValue = getValue(expression);
+						String code = StringConverter.INSTANCE.toJavaSource(m_root, currentValue);
+						editor.replaceExpression(expression, code);
+					}
+				}
+			}
+		});
+		// update collections
+		for (String key : keys) {
+			onKeyInternalize(key);
+		}
+		// allow subclasses do more work
+		apply_internalizeKeys_post(keys);
+	}
+
+	/**
+	 * This method is invoked during keys internalizing.
+	 *
+	 * In most sources we don't need it. But for sources that should change some external compilation
+	 * units, we need composite internalize method.
+	 */
+	protected void apply_internalizeKeys_post(Set<String> keys) throws Exception {
+	}
+
+	/**
+	 * This method allows subclasses remove any other NON-NLS comments that they can use. It is used
+	 * during internalizing keys. For example "classic" Eclipse NLS style can have default value, so
+	 * we should remove comments for it.
+	 */
+	protected void apply_removeNonNLSComments(BasicExpressionInfo basicExpressionInfo)
+			throws Exception {
+	}
+
+	/**
+	 * Replace given {@link Expression} with new {@link Expression} with given code and return
+	 * getExpressionInfo() for this new expression.
+	 */
+	protected final Object replaceExpression_getInfo(Expression expression, String code)
+			throws Exception {
+		// replace expression
+		Expression newExpression = m_root.getEditor().replaceExpression(expression, code);
+		// call "private static getExpressionInfo()"
+		{
+			Method getExpressionInfoMethod = getClass().getDeclaredMethod(
+					"getExpressionInfo",
+					new Class[]{JavaInfo.class, Expression.class});
+			getExpressionInfoMethod.setAccessible(true);
+			// side effect of this invocation is that ExpressionInfo placed in newExpression
+			return getExpressionInfoMethod.invoke(null, new Object[]{m_root, newExpression});
+		}
+	}
+
+	/**
+	 * If given expression is {@link StringLiteral}, adds "//$NON-NLS-xxx" comment for it.
+	 */
+	protected final void addNonNLSComment(Expression stringLiteralExpression) throws Exception {
+		AstEditor editor = m_root.getEditor();
+		if (stringLiteralExpression instanceof StringLiteral) {
+			int index = editor.getStringLiteralNumberOnLine((StringLiteral) stringLiteralExpression);
+			editor.addEndOfLineComment(
+					stringLiteralExpression.getStartPosition(),
+					" //$NON-NLS-" + (1 + index) + "$");
+		}
+	}
+
+	/**
+	 * Remove "//$NON-NLS-xxx" comment for given {@link StringLiteral}.
+	 */
+	protected final void removeNonNLSComment(StringLiteral literal) throws Exception {
+		AstEditor editor = m_root.getEditor();
+		if (literal != null) {
+			int index = editor.getStringLiteralNumberOnLine(literal);
+			if (index != -1) {
+				String comment = "//$NON-NLS-" + (1 + index) + "$";
+				editor.removeEndOfLineComment(literal.getStartPosition(), comment);
+			}
+		}
+	}
+
+	/**
+	 * Creates *.properties file with given name and encoding in given package.
+	 */
+	protected static void createPropertyBundleFile(IPackageFragment targetPackage,
+			String propertyFileName,
+			String charset) throws Exception {
+		if (targetPackage instanceof IProject) {
+			IProject project = (IProject) targetPackage;
+			project.getFile(propertyFileName);
+		}
+		IFolder folder = (IFolder) targetPackage.getUnderlyingResource();
+		createPropertyBundleFile(folder, propertyFileName, charset);
+	}
+
+	/**
+	 * Creates *.properties file with given name and encoding in given folder.
+	 */
+	protected static void createPropertyBundleFile(IFolder folder,
+			String propertyFileName,
+			String charset) throws Exception {
+		IFile propertyFile = createFileIfDoesNotExist(folder, propertyFileName, "");
+		if (propertyFile != null) {
+			if (charset != null) {
+				propertyFile.setCharset(charset, null);
+			}
+		}
+	}
+
+	/**
+	 * Creates file with given name and contents in given package.
+	 *
+	 * @return new {@link IFile} or <code>null</code> if file already exists
+	 */
+	protected static IFile createFileIfDoesNotExist(IFolder folder, String fileName, String contents)
+			throws Exception {
+		IFile file = folder.getFile(fileName);
+		if (!file.exists()) {
+			file.create(new ByteArrayInputStream(contents.getBytes()), true, new NullProgressMonitor());
+			return file;
+		}
+		return null;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Replace
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final void replace_toStringLiteral(GenericProperty property, String value)
+			throws Exception {
+		Expression expression = property.getExpression();
+		BasicExpressionInfo expressionInfo = getBasicExpressionInfo(expression);
+		// notify that key is not used by this expression
+		getKeyToComponentsSupport().remove(property.getJavaInfo(), expressionInfo.m_key);
+		// remove // comments for key and may be something else
+		apply_removeNonNLSComments(expressionInfo);
+		// replace NLS expression with StringLiteral of given value
+		String code = StringConverter.INSTANCE.toJavaSource(m_root, value);
+		m_root.getEditor().replaceExpression(expression, code);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final String getTitle() throws Exception {
+		return m_bundleName;
+	}
+
+	@Override
+	public final LocaleInfo[] getLocales() throws Exception {
+		IFile[] bundleFiles = getBundleFiles();
+		return getLocales(bundleFiles);
+	}
+
+	private LocaleInfo[] getLocales(IFile[] bundleFiles) {
+		Set<LocaleInfo> locales = Sets.newHashSet();
+		for (int i = 0; i < bundleFiles.length; i++) {
+			IFile file = bundleFiles[i];
+			locales.add(BundleInfo.getLocale(m_bundleName, file));
+		}
+		return locales.toArray(new LocaleInfo[locales.size()]);
+	}
+
+	@Override
+	public Set<String> getKeys() throws Exception {
+		Set<String> keys = Sets.newHashSet();
+		for (LocaleInfo locale : getLocales()) {
+			BundleInfo bundle = getBundleInfo(locale);
+			keys.addAll(bundle.getKeys());
+		}
+		return keys;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Basic expression information object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Basic information about expression.
+	 */
+	protected static class BasicExpressionInfo {
+		private final Expression m_expression;
+		public Expression m_keyExpression;
+		public String m_key;
+
+		public BasicExpressionInfo(Expression expression, Expression keyExpression, String key) {
+			m_expression = expression;
+			m_keyExpression = keyExpression;
+			m_key = key;
+		}
+	}
+
+	/**
+	 * Get information from expression. Ensure that this information comes from current source.
+	 */
+	protected final BasicExpressionInfo getBasicExpressionInfo(Expression expression) {
+		AbstractSource expressionSource = NlsSupport.getSource(expression);
+		if (expressionSource == this) {
+			return (BasicExpressionInfo) expression.getProperty(NLS_EXPRESSION_INFO);
+		}
+		return null;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Bundle access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final Map<LocaleInfo, BundleInfo> m_localeToBundleMap = Maps.newHashMap();
+
+	/**
+	 * Return existing or new information about resource bundle for given locale.
+	 */
+	protected final BundleInfo getBundleInfo(LocaleInfo localeInfo) throws Exception {
+		BundleInfo bundleInfo = m_localeToBundleMap.get(localeInfo);
+		if (bundleInfo == null) {
+			IPropertiesAccessor propertiesAccessor = getPropertiesAccessor();
+			IFile[] files = getBundleFiles();
+			bundleInfo = BundleInfo.createBundle(propertiesAccessor, m_bundleName, localeInfo, files);
+			m_localeToBundleMap.put(localeInfo, bundleInfo);
+		}
+		return bundleInfo;
+	}
+
+	/**
+	 * @return {@link IPropertiesAccessor} that should be used to read bundles.
+	 */
+	protected IPropertiesAccessor getPropertiesAccessor() {
+		return StandardPropertiesAccessor.INSTANCE;
+	}
+
+	/**
+	 * Save given bundle.
+	 */
+	private void saveBundle(BundleInfo bundleInfo) throws Exception {
+		bundleInfo.save(getBundleComment());
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// *.properties files
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Return list of IResource's that represent bundle files (*.properties) for given bundle name.
+	 */
+	protected final IFile[] getBundleFiles() throws Exception {
+		if (getClass().equals(ActivatorSource.class)) {
+			// support for messages in the plugin root
+			return getBundleFilesActivator();
+		}
+		List<IFile> bundleFiles = Lists.newArrayList();
+		String bundlePath = m_bundleName.replace('.', '/');
+		String bundleFileName = new Path(bundlePath).lastSegment();
+		// iterate over all source containers
+		for (IContainer container : getSourceContainers()) {
+			// prepare container children
+			IResource[] resources = new IResource[0];
+			{
+				IPath folderPath = new Path(bundlePath).removeLastSegments(1);
+				IFolder folder = container.getFolder(folderPath);
+				if (folder.exists()) {
+					resources = folder.members();
+				}
+			}
+			// find properties files for given bundle name
+			for (IResource resource : resources) {
+				String fileName = resource.getName();
+				if (fileName.endsWith(".properties")) {
+					if (fileName.startsWith(bundleFileName + "_")
+							|| fileName.startsWith(bundleFileName + ".")) {
+						if (!bundleFiles.contains(resource)) {
+							bundleFiles.add((IFile) resource);
+						}
+					}
+				}
+			}
+		}
+		// return resources as array
+		return bundleFiles.toArray(new IFile[bundleFiles.size()]);
+	}
+
+	/**
+	 * Return list of IResource's (*.properties) for the Activator type
+	 */
+	private IFile[] getBundleFilesActivator() throws Exception, CoreException {
+		List<IFile> bundleFiles = Lists.newArrayList();
+		// locate any messages inside src container
+		for (IContainer container : getSourceContainers()) {
+			IFolder folder = container.getFolder(new Path("."));
+			IResource[] resources = new IResource[0];
+			if (folder.exists()) {
+				resources = folder.members();
+			}
+			for (IResource resource : resources) {
+				String fileName = resource.getName();
+				if (fileName.endsWith(".properties")) {
+					if (fileName.startsWith("plugin_") || fileName.startsWith("plugin.")) {
+						if (!bundleFiles.contains(resource)) {
+							bundleFiles.add((IFile) resource);
+						}
+					}
+				}
+			}
+		}
+		// locate any messages in the project (root) container
+		{
+			for (IContainer container : getSourceContainers()) {
+				IProject project = container.getProject();
+				IResource[] resources2 = project.members();
+				for (IResource resource : resources2) {
+					String fileName = resource.getName();
+					if (fileName.endsWith(".properties")) {
+						if (fileName.startsWith("plugin_")
+								|| fileName.startsWith("plugin.")
+								|| fileName.startsWith(m_bundleName + "_")
+								|| fileName.startsWith(m_bundleName + ".")) {
+							if (!bundleFiles.contains(resource)) {
+								bundleFiles.add((IFile) resource);
+							}
+						}
+					}
+				}
+			}
+		}
+		// return resources as array
+		return bundleFiles.toArray(new IFile[bundleFiles.size()]);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Source containers
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Returns IContainer's for all source directories of current Java project.
+	 */
+	private List<IContainer> getSourceContainers() throws Exception {
+		return CodeUtils.getSourceContainers(m_javaProject, true);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/bundle/AbstractBundleSourceNewComposite.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/bundle/AbstractBundleSourceNewComposite.java
index d97eef604..226bceef4 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/bundle/AbstractBundleSourceNewComposite.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/bundle/AbstractBundleSourceNewComposite.java
@@ -48,202 +48,202 @@
  * @coverage core.nls.ui
  */
 public abstract class AbstractBundleSourceNewComposite extends AbstractFieldsSourceNewComposite {
-  private Group m_propertyGroup;
-  private PackageRootAndPackageSelectionDialogField m_propertyPackageField;
-  private StringButtonDialogField m_propertyFileField;
-
-  /**
-   * Constructor
-   */
-  public AbstractBundleSourceNewComposite(Composite parent, int style, JavaInfo root) {
-    super(parent, style, root);
-  }
-
-  /**
-   * Property group
-   */
-  protected final void createPropertyGroup() {
-    m_propertyGroup = new Group(this, SWT.NONE);
-    GridDataFactory.create(m_propertyGroup).grabH().fillH();
-    GridLayoutFactory.create(m_propertyGroup).columns(3);
-    m_propertyGroup.setText(Messages.AbstractBundleSourceNewComposite_propertiesGroup);
-    {
-      m_propertyPackageField = new PackageRootAndPackageSelectionDialogField(60,
-          Messages.AbstractBundleSourceNewComposite_propertiesSourceFolder,
-          Messages.AbstractBundleSourceNewComposite_propertiesSourceFolderBrowse,
-          Messages.AbstractBundleSourceNewComposite_propertiesPackage,
-          Messages.AbstractBundleSourceNewComposite_propertiesPackageBrowse);
-      m_propertyPackageField.setDialogFieldListener(m_validateListener);
-      m_propertyPackageField.doFillIntoGrid(m_propertyGroup, 3);
-      // create property file field
-      {
-        m_propertyFileField = new StringButtonDialogField(new IStringButtonAdapter() {
-          @Override
-          public void changeControlPressed(DialogField field) {
-            ElementListSelectionDialog dialog =
-                new ElementListSelectionDialog(getShell(), new JavaElementLabelProvider());
-            dialog.setIgnoreCase(false);
-            dialog.setTitle(Messages.AbstractBundleSourceNewComposite_propertiesChooseTitle);
-            dialog.setMessage(Messages.AbstractBundleSourceNewComposite_propertiesChooseMessage);
-            dialog.setElements(createFileListInput());
-            dialog.setFilter("*.properties");
-            // select file
-            if (dialog.open() != Window.OK) {
-              return;
-            }
-            IFile selectedFile = (IFile) dialog.getFirstResult();
-            // update property file field
-            m_propertyFileField.setText(selectedFile.getName());
-          }
-
-          /**
-           * Return list of ".properties" files in current property package.
-           */
-          private Object[] createFileListInput() {
-            try {
-              // prepare current package
-              IPackageFragment currentPackage = m_propertyPackageField.getPackage();
-              if (currentPackage == null) {
-                return ArrayUtils.EMPTY_OBJECT_ARRAY;
-              }
-              // check each non-Java file in current package
-              List<IFile> result = new ArrayList<IFile>(1);
-              Object[] nonJava = currentPackage.getNonJavaResources();
-              for (int i = 0; i < nonJava.length; i++) {
-                if (isPropertyFile(nonJava[i])) {
-                  result.add((IFile) nonJava[i]);
-                }
-              }
-              // return result
-              return result.toArray();
-            } catch (JavaModelException e) {
-              DesignerPlugin.log(e);
-              return new Object[0];
-            }
-          }
-
-          /**
-           * Check that given object if IFile with ".properties" extension.
-           */
-          private boolean isPropertyFile(Object o) {
-            if (o instanceof IFile) {
-              IFile file = (IFile) o;
-              return ".properties".equals('.' + file.getFileExtension());
-            }
-            return false;
-          }
-        });
-        m_propertyFileField.setDialogFieldListener(m_validateListener);
-        m_propertyFileField.setLabelText(Messages.AbstractBundleSourceNewComposite_propertiesLabel);
-        m_propertyFileField.setButtonLabel(
-            Messages.AbstractBundleSourceNewComposite_propertiesChooseButton);
-        createTextFieldControls(m_propertyGroup, m_propertyFileField, 3);
-      }
-    }
-  }
-
-  protected final void initializePropertyGroup() {
-    m_propertyPackageField.setCompilationUnit(m_compilationUnit);
-    m_propertyFileField.setText("messages.properties");
-  }
-
-  protected final void initializePropertyGroupActivator() {
-    m_propertyPackageField.setCompilationUnit(m_compilationUnit);
-    m_propertyFileField.setText("plugin.properties");
-  }
-
-  protected final void setPropertyGroupEnable(boolean enable) {
-    UiUtils.changeControlEnable(m_propertyGroup, enable);
-  }
-
-  /**
-   * Property group: validation
-   */
-  private static final String KEY_PROPERTY_FOLDER = "KEY_PROPERTY_FOLDER";
-  private static final String KEY_PROPERTY_PACKAGE = "KEY_PROPERTY_PACKAGE";
-  private static final String KEY_PROPERTY_FILE = "KEY_PROPERTY_FILE";
-
-  /**
-   * Validate property fields.
-   */
-  protected void validatePropertyFields() {
-    // validate source folder
-    {
-      IPackageFragmentRoot root = m_propertyPackageField.getRoot();
-      if (root == null || !root.exists()) {
-        setInvalid(
-            KEY_PROPERTY_FOLDER,
-            Messages.AbstractBundleSourceNewComposite_validatePropertiesInvalidSourceFolder);
-      } else {
-        setValid(KEY_PROPERTY_FOLDER);
-      }
-    }
-    // validate package
-    {
-      IPackageFragment fragment = m_propertyPackageField.getPackage();
-      if (fragment == null || !fragment.exists()) {
-        setInvalid(
-            KEY_PROPERTY_PACKAGE,
-            Messages.AbstractBundleSourceNewComposite_validatePropertiesInvalidPackage);
-      } else {
-        setValid(KEY_PROPERTY_PACKAGE);
-      }
-    }
-    // validate file name
-    {
-      String fileName = m_propertyFileField.getText();
-      if (fileName.length() == 0) {
-        setInvalid(
-            KEY_PROPERTY_FILE,
-            Messages.AbstractBundleSourceNewComposite_validatePropertiesFileEmpty);
-      } else if (!fileName.endsWith(".properties")) {
-        setInvalid(
-            KEY_PROPERTY_FILE,
-            Messages.AbstractBundleSourceNewComposite_validatePropertiesFileExtension);
-      } else {
-        setValid(KEY_PROPERTY_FILE);
-      }
-    }
-  }
-
-  /**
-   * Validation
-   */
-  @Override
-  protected void validateAll() {
-    validatePropertyFields();
-    super.validateAll();
-  }
-
-  /**
-   * Parameters
-   * @param parameters
-   * @throws Exception
-   */
-  protected final void fillPropertyParameters(AbstractBundleSourceParameters parameters) throws Exception {
-    parameters.m_propertySourceFolder = m_propertyPackageField.getRoot();
-    parameters.m_propertyPackage = m_propertyPackageField.getPackage();
-    parameters.m_propertyFileName = m_propertyFileField.getText();
-    // prepare m_propertyBundleName
-    {
-      IPackageFragment property_package = m_propertyPackageField.getPackage();
-      if (property_package != null) {
-        String property_packageName = property_package.getElementName();
-        String property_fileName = m_propertyFileField.getText();
-        String property_bundleName =
-            StringUtils.substring(property_fileName, 0, -".properties".length());
-        if (property_packageName.length() != 0) {
-          parameters.m_propertyBundleName = property_packageName + "." + property_bundleName;
-        } else {
-          parameters.m_propertyBundleName = property_bundleName;
-        }
-      }
-    }
-    // prepare m_propertyFileExists
-    if (parameters.m_propertyPackage != null) {
-      IFolder property_folder = (IFolder) parameters.m_propertyPackage.getUnderlyingResource();
-      parameters.m_propertyFileExists =
-          property_folder.getFile(parameters.m_propertyFileName).exists();
-    }
-  }
+	private Group m_propertyGroup;
+	private PackageRootAndPackageSelectionDialogField m_propertyPackageField;
+	private StringButtonDialogField m_propertyFileField;
+
+	/**
+	 * Constructor
+	 */
+	public AbstractBundleSourceNewComposite(Composite parent, int style, JavaInfo root) {
+		super(parent, style, root);
+	}
+
+	/**
+	 * Property group
+	 */
+	protected final void createPropertyGroup() {
+		m_propertyGroup = new Group(this, SWT.NONE);
+		GridDataFactory.create(m_propertyGroup).grabH().fillH();
+		GridLayoutFactory.create(m_propertyGroup).columns(3);
+		m_propertyGroup.setText(Messages.AbstractBundleSourceNewComposite_propertiesGroup);
+		{
+			m_propertyPackageField = new PackageRootAndPackageSelectionDialogField(60,
+					Messages.AbstractBundleSourceNewComposite_propertiesSourceFolder,
+					Messages.AbstractBundleSourceNewComposite_propertiesSourceFolderBrowse,
+					Messages.AbstractBundleSourceNewComposite_propertiesPackage,
+					Messages.AbstractBundleSourceNewComposite_propertiesPackageBrowse);
+			m_propertyPackageField.setDialogFieldListener(m_validateListener);
+			m_propertyPackageField.doFillIntoGrid(m_propertyGroup, 3);
+			// create property file field
+			{
+				m_propertyFileField = new StringButtonDialogField(new IStringButtonAdapter() {
+					@Override
+					public void changeControlPressed(DialogField field) {
+						ElementListSelectionDialog dialog =
+								new ElementListSelectionDialog(getShell(), new JavaElementLabelProvider());
+						dialog.setIgnoreCase(false);
+						dialog.setTitle(Messages.AbstractBundleSourceNewComposite_propertiesChooseTitle);
+						dialog.setMessage(Messages.AbstractBundleSourceNewComposite_propertiesChooseMessage);
+						dialog.setElements(createFileListInput());
+						dialog.setFilter("*.properties");
+						// select file
+						if (dialog.open() != Window.OK) {
+							return;
+						}
+						IFile selectedFile = (IFile) dialog.getFirstResult();
+						// update property file field
+						m_propertyFileField.setText(selectedFile.getName());
+					}
+
+					/**
+					 * Return list of ".properties" files in current property package.
+					 */
+					private Object[] createFileListInput() {
+						try {
+							// prepare current package
+							IPackageFragment currentPackage = m_propertyPackageField.getPackage();
+							if (currentPackage == null) {
+								return ArrayUtils.EMPTY_OBJECT_ARRAY;
+							}
+							// check each non-Java file in current package
+							List<IFile> result = new ArrayList<IFile>(1);
+							Object[] nonJava = currentPackage.getNonJavaResources();
+							for (int i = 0; i < nonJava.length; i++) {
+								if (isPropertyFile(nonJava[i])) {
+									result.add((IFile) nonJava[i]);
+								}
+							}
+							// return result
+							return result.toArray();
+						} catch (JavaModelException e) {
+							DesignerPlugin.log(e);
+							return new Object[0];
+						}
+					}
+
+					/**
+					 * Check that given object if IFile with ".properties" extension.
+					 */
+					private boolean isPropertyFile(Object o) {
+						if (o instanceof IFile) {
+							IFile file = (IFile) o;
+							return ".properties".equals('.' + file.getFileExtension());
+						}
+						return false;
+					}
+				});
+				m_propertyFileField.setDialogFieldListener(m_validateListener);
+				m_propertyFileField.setLabelText(Messages.AbstractBundleSourceNewComposite_propertiesLabel);
+				m_propertyFileField.setButtonLabel(
+						Messages.AbstractBundleSourceNewComposite_propertiesChooseButton);
+				createTextFieldControls(m_propertyGroup, m_propertyFileField, 3);
+			}
+		}
+	}
+
+	protected final void initializePropertyGroup() {
+		m_propertyPackageField.setCompilationUnit(m_compilationUnit);
+		m_propertyFileField.setText("messages.properties");
+	}
+
+	protected final void initializePropertyGroupActivator() {
+		m_propertyPackageField.setCompilationUnit(m_compilationUnit);
+		m_propertyFileField.setText("plugin.properties");
+	}
+
+	protected final void setPropertyGroupEnable(boolean enable) {
+		UiUtils.changeControlEnable(m_propertyGroup, enable);
+	}
+
+	/**
+	 * Property group: validation
+	 */
+	private static final String KEY_PROPERTY_FOLDER = "KEY_PROPERTY_FOLDER";
+	private static final String KEY_PROPERTY_PACKAGE = "KEY_PROPERTY_PACKAGE";
+	private static final String KEY_PROPERTY_FILE = "KEY_PROPERTY_FILE";
+
+	/**
+	 * Validate property fields.
+	 */
+	protected void validatePropertyFields() {
+		// validate source folder
+		{
+			IPackageFragmentRoot root = m_propertyPackageField.getRoot();
+			if (root == null || !root.exists()) {
+				setInvalid(
+						KEY_PROPERTY_FOLDER,
+						Messages.AbstractBundleSourceNewComposite_validatePropertiesInvalidSourceFolder);
+			} else {
+				setValid(KEY_PROPERTY_FOLDER);
+			}
+		}
+		// validate package
+		{
+			IPackageFragment fragment = m_propertyPackageField.getPackage();
+			if (fragment == null || !fragment.exists()) {
+				setInvalid(
+						KEY_PROPERTY_PACKAGE,
+						Messages.AbstractBundleSourceNewComposite_validatePropertiesInvalidPackage);
+			} else {
+				setValid(KEY_PROPERTY_PACKAGE);
+			}
+		}
+		// validate file name
+		{
+			String fileName = m_propertyFileField.getText();
+			if (fileName.length() == 0) {
+				setInvalid(
+						KEY_PROPERTY_FILE,
+						Messages.AbstractBundleSourceNewComposite_validatePropertiesFileEmpty);
+			} else if (!fileName.endsWith(".properties")) {
+				setInvalid(
+						KEY_PROPERTY_FILE,
+						Messages.AbstractBundleSourceNewComposite_validatePropertiesFileExtension);
+			} else {
+				setValid(KEY_PROPERTY_FILE);
+			}
+		}
+	}
+
+	/**
+	 * Validation
+	 */
+	@Override
+	protected void validateAll() {
+		validatePropertyFields();
+		super.validateAll();
+	}
+
+	/**
+	 * Parameters
+	 * @param parameters
+	 * @throws Exception
+	 */
+	protected final void fillPropertyParameters(AbstractBundleSourceParameters parameters) throws Exception {
+		parameters.m_propertySourceFolder = m_propertyPackageField.getRoot();
+		parameters.m_propertyPackage = m_propertyPackageField.getPackage();
+		parameters.m_propertyFileName = m_propertyFileField.getText();
+		// prepare m_propertyBundleName
+		{
+			IPackageFragment property_package = m_propertyPackageField.getPackage();
+			if (property_package != null) {
+				String property_packageName = property_package.getElementName();
+				String property_fileName = m_propertyFileField.getText();
+				String property_bundleName =
+						StringUtils.substring(property_fileName, 0, -".properties".length());
+				if (property_packageName.length() != 0) {
+					parameters.m_propertyBundleName = property_packageName + "." + property_bundleName;
+				} else {
+					parameters.m_propertyBundleName = property_bundleName;
+				}
+			}
+		}
+		// prepare m_propertyFileExists
+		if (parameters.m_propertyPackage != null) {
+			IFolder property_folder = (IFolder) parameters.m_propertyPackage.getUnderlyingResource();
+			parameters.m_propertyFileExists =
+					property_folder.getFile(parameters.m_propertyFileName).exists();
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/bundle/AbstractBundleSourceParameters.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/bundle/AbstractBundleSourceParameters.java
index a45e0a82d..74beeb3ad 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/bundle/AbstractBundleSourceParameters.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/bundle/AbstractBundleSourceParameters.java
@@ -20,14 +20,14 @@
  * @coverage core.nls
  */
 public abstract class AbstractBundleSourceParameters {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Bundle parameters
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public IPackageFragmentRoot m_propertySourceFolder;
-  public IPackageFragment m_propertyPackage;
-  public String m_propertyFileName;
-  public String m_propertyBundleName;
-  public boolean m_propertyFileExists;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Bundle parameters
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public IPackageFragmentRoot m_propertySourceFolder;
+	public IPackageFragment m_propertyPackage;
+	public String m_propertyFileName;
+	public String m_propertyBundleName;
+	public boolean m_propertyFileExists;
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/bundle/BundleInfo.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/bundle/BundleInfo.java
index 7bb5c33de..87e349ffd 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/bundle/BundleInfo.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/bundle/BundleInfo.java
@@ -32,235 +32,235 @@
  * @coverage core.nls
  */
 public final class BundleInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Static utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link BundleInfo} for given bundle name and {@link LocaleInfo} using one of the
-   *         {@link IFile} from array. Can return <code>null</code> if there are no {@link IFile}
-   *         for given {@link LocaleInfo}.
-   */
-  public static BundleInfo createBundle(IPropertiesAccessor propertiesAccessor,
-      String bundleName,
-      LocaleInfo localeInfo,
-      IFile files[]) throws Exception {
-    for (int i = 0; i < files.length; i++) {
-      IFile file = files[i];
-      if (localeInfo.equals(getLocale(bundleName, file))) {
-        return new BundleInfo(propertiesAccessor, bundleName, localeInfo, file);
-      }
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Static utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link BundleInfo} for given bundle name and {@link LocaleInfo} using one of the
+	 *         {@link IFile} from array. Can return <code>null</code> if there are no {@link IFile}
+	 *         for given {@link LocaleInfo}.
+	 */
+	public static BundleInfo createBundle(IPropertiesAccessor propertiesAccessor,
+			String bundleName,
+			LocaleInfo localeInfo,
+			IFile files[]) throws Exception {
+		for (int i = 0; i < files.length; i++) {
+			IFile file = files[i];
+			if (localeInfo.equals(getLocale(bundleName, file))) {
+				return new BundleInfo(propertiesAccessor, bundleName, localeInfo, file);
+			}
+		}
+		return null;
+	}
 
-  /**
-   * @return the {@link LocaleInfo} extracted from {@link IFile} using name of bundle. For example,
-   *         return ru_RU locale for bundle "com.mycorp.messages" and file
-   *         "com/mycorp/messages_ru_RU.properties".
-   */
-  public static LocaleInfo getLocale(String bundleName, IFile file) {
-    // prepare name of locale, for example "_ru_RU"
-    String shortBundleName = CodeUtils.getShortClass(bundleName);
-    String localeName = file.getName();
-    localeName = StringUtils.substring(localeName, 0, -".properties".length());
-    localeName = localeName.substring(shortBundleName.length());
-    //
-    if (localeName.length() == 0) {
-      return LocaleInfo.DEFAULT;
-    } else {
-      String localeDescription = "'" + localeName + "' for file '" + file + "'.";
-      // should start with '_'
-      if (!localeName.startsWith("_")) {
-        throw new IllegalArgumentException("'_' expected, but " + localeDescription);
-      }
-      localeName = localeName.substring(1);
-      // create
-      return LocaleInfo.create(localeName, localeDescription);
-    }
-  }
+	/**
+	 * @return the {@link LocaleInfo} extracted from {@link IFile} using name of bundle. For example,
+	 *         return ru_RU locale for bundle "com.mycorp.messages" and file
+	 *         "com/mycorp/messages_ru_RU.properties".
+	 */
+	public static LocaleInfo getLocale(String bundleName, IFile file) {
+		// prepare name of locale, for example "_ru_RU"
+		String shortBundleName = CodeUtils.getShortClass(bundleName);
+		String localeName = file.getName();
+		localeName = StringUtils.substring(localeName, 0, -".properties".length());
+		localeName = localeName.substring(shortBundleName.length());
+		//
+		if (localeName.length() == 0) {
+			return LocaleInfo.DEFAULT;
+		} else {
+			String localeDescription = "'" + localeName + "' for file '" + file + "'.";
+			// should start with '_'
+			if (!localeName.startsWith("_")) {
+				throw new IllegalArgumentException("'_' expected, but " + localeDescription);
+			}
+			localeName = localeName.substring(1);
+			// create
+			return LocaleInfo.create(localeName, localeDescription);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance fields
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final IPropertiesAccessor m_propertiesAccessor;
-  private final String m_bundleName;
-  private final LocaleInfo m_locale;
-  private final IFile m_file;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance fields
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final IPropertiesAccessor m_propertiesAccessor;
+	private final String m_bundleName;
+	private final LocaleInfo m_locale;
+	private final IFile m_file;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private BundleInfo(IPropertiesAccessor propertiesAccessor,
-      String bundleName,
-      LocaleInfo localeInfo,
-      IFile file) throws Exception {
-    m_propertiesAccessor = propertiesAccessor;
-    m_bundleName = bundleName;
-    m_file = file;
-    m_locale = localeInfo;
-    // remember initial stamp
-    m_propertiesStamp = m_file.getModificationStamp();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private BundleInfo(IPropertiesAccessor propertiesAccessor,
+			String bundleName,
+			LocaleInfo localeInfo,
+			IFile file) throws Exception {
+		m_propertiesAccessor = propertiesAccessor;
+		m_bundleName = bundleName;
+		m_file = file;
+		m_locale = localeInfo;
+		// remember initial stamp
+		m_propertiesStamp = m_file.getModificationStamp();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the fully qualified name of bundle.
-   */
-  public String getBundleName() {
-    return m_bundleName;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the fully qualified name of bundle.
+	 */
+	public String getBundleName() {
+		return m_bundleName;
+	}
 
-  /**
-   * @return the {@link LocaleInfo} of this bundle.
-   */
-  public LocaleInfo getLocale() {
-    return m_locale;
-  }
+	/**
+	 * @return the {@link LocaleInfo} of this bundle.
+	 */
+	public LocaleInfo getLocale() {
+		return m_locale;
+	}
 
-  /**
-   * @return the {@link IFile} with *.properties file.
-   */
-  public IFile getFile() {
-    return m_file;
-  }
+	/**
+	 * @return the {@link IFile} with *.properties file.
+	 */
+	public IFile getFile() {
+		return m_file;
+	}
 
-  /**
-   * @return <code>true</code> if properties file was changed externally, for example in other
-   *         editor in Eclipse.
-   */
-  public boolean isExternallyChanged() {
-    return m_file.getModificationStamp() != m_propertiesStamp;
-  }
+	/**
+	 * @return <code>true</code> if properties file was changed externally, for example in other
+	 *         editor in Eclipse.
+	 */
+	public boolean isExternallyChanged() {
+		return m_file.getModificationStamp() != m_propertiesStamp;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Properties
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Map<String, String> m_properties;
-  private long m_propertiesStamp;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Properties
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Map<String, String> m_properties;
+	private long m_propertiesStamp;
 
-  /**
-   * @return the copy of map key -> value.
-   */
-  public Map<String, String> getMap() throws Exception {
-    return new HashMap<String, String>(getProperties());
-  }
+	/**
+	 * @return the copy of map key -> value.
+	 */
+	public Map<String, String> getMap() throws Exception {
+		return new HashMap<String, String>(getProperties());
+	}
 
-  /**
-   * Set map key -> value.
-   */
-  public void setMap(Map<String, String> map) {
-    m_properties = new HashMap<String, String>(map);
-  }
+	/**
+	 * Set map key -> value.
+	 */
+	public void setMap(Map<String, String> map) {
+		m_properties = new HashMap<String, String>(map);
+	}
 
-  /**
-   * @return the cached or reloaded (if changed externally) map key -> value.
-   */
-  private Map<String, String> getProperties() throws Exception {
-    if (m_properties == null || isExternallyChanged() || m_properties.isEmpty()) {
-      InputStream is = m_file.getContents(true);
-      try {
-        String charset = m_file.getCharset();
-        m_properties = m_propertiesAccessor.load(is, charset);
-      } finally {
-        is.close();
-      }
-      //
-      m_propertiesStamp = m_file.getModificationStamp();
-    }
-    return m_properties;
-  }
+	/**
+	 * @return the cached or reloaded (if changed externally) map key -> value.
+	 */
+	private Map<String, String> getProperties() throws Exception {
+		if (m_properties == null || isExternallyChanged() || m_properties.isEmpty()) {
+			InputStream is = m_file.getContents(true);
+			try {
+				String charset = m_file.getCharset();
+				m_properties = m_propertiesAccessor.load(is, charset);
+			} finally {
+				is.close();
+			}
+			//
+			m_propertiesStamp = m_file.getModificationStamp();
+		}
+		return m_properties;
+	}
 
-  /**
-   * Saves current map key -> value into host {@link IFile}.
-   *
-   * @param comments
-   *          the parameters for add in file headers.
-   */
-  public void save(String comments) throws Exception {
-    if (m_properties != null) {
-      // prepare bytes for properties
-      ByteArrayOutputStream baos = new ByteArrayOutputStream();
-      String charset = m_file.getCharset();
-      m_propertiesAccessor.save(baos, charset, m_properties, comments);
-      // set bytes for file
-      {
-        ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
-        m_file.setContents(bais, true, true, null);
-      }
-      // remember new stamp
-      m_propertiesStamp = m_file.getModificationStamp();
-    }
-  }
+	/**
+	 * Saves current map key -> value into host {@link IFile}.
+	 *
+	 * @param comments
+	 *          the parameters for add in file headers.
+	 */
+	public void save(String comments) throws Exception {
+		if (m_properties != null) {
+			// prepare bytes for properties
+			ByteArrayOutputStream baos = new ByteArrayOutputStream();
+			String charset = m_file.getCharset();
+			m_propertiesAccessor.save(baos, charset, m_properties, comments);
+			// set bytes for file
+			{
+				ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
+				m_file.setContents(bais, true, true, null);
+			}
+			// remember new stamp
+			m_propertiesStamp = m_file.getModificationStamp();
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Values and keys
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the value for given key or <code>null</code>, if there are no such key in this bundle.
-   */
-  public String getValue(String key) throws Exception {
-    return getProperties().get(key);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Values and keys
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the value for given key or <code>null</code>, if there are no such key in this bundle.
+	 */
+	public String getValue(String key) throws Exception {
+		return getProperties().get(key);
+	}
 
-  /**
-   * Sets the value for given key. If value is empty string, key will be removed.
-   */
-  public void setValue(String key, String value) throws Exception {
-    Map<String, String> properties = getProperties();
-    if (value.length() == 0) {
-      properties.remove(key);
-    } else {
-      properties.put(key, value);
-    }
-  }
+	/**
+	 * Sets the value for given key. If value is empty string, key will be removed.
+	 */
+	public void setValue(String key, String value) throws Exception {
+		Map<String, String> properties = getProperties();
+		if (value.length() == 0) {
+			properties.remove(key);
+		} else {
+			properties.put(key, value);
+		}
+	}
 
-  /**
-   * Replaces old key with new one, optionally keeping existing value of <code>newKey</code>.
-   */
-  public void replaceKey(String oldKey, String newKey, boolean keepOldValue) throws Exception {
-    // if we should keep existing value, this means that we should just remove old key
-    if (keepOldValue && containsKey(newKey)) {
-      removeKey(oldKey);
-    } else {
-      Map<String, String> properties = getProperties();
-      String value = properties.get(oldKey);
-      properties.remove(oldKey);
-      setValue(newKey, value);
-    }
-  }
+	/**
+	 * Replaces old key with new one, optionally keeping existing value of <code>newKey</code>.
+	 */
+	public void replaceKey(String oldKey, String newKey, boolean keepOldValue) throws Exception {
+		// if we should keep existing value, this means that we should just remove old key
+		if (keepOldValue && containsKey(newKey)) {
+			removeKey(oldKey);
+		} else {
+			Map<String, String> properties = getProperties();
+			String value = properties.get(oldKey);
+			properties.remove(oldKey);
+			setValue(newKey, value);
+		}
+	}
 
-  /**
-   * @return the {@link Set} of keys.
-   */
-  public Set<String> getKeys() throws Exception {
-    return getProperties().keySet();
-  }
+	/**
+	 * @return the {@link Set} of keys.
+	 */
+	public Set<String> getKeys() throws Exception {
+		return getProperties().keySet();
+	}
 
-  /**
-   * @return <code>true</code> if given bundle contains given key.
-   */
-  public boolean containsKey(String key) throws Exception {
-    return getProperties().containsKey(key);
-  }
+	/**
+	 * @return <code>true</code> if given bundle contains given key.
+	 */
+	public boolean containsKey(String key) throws Exception {
+		return getProperties().containsKey(key);
+	}
 
-  /**
-   * Removes given key (and value) from bundle.
-   */
-  public void removeKey(String key) throws Exception {
-    getProperties().remove(key);
-  }
+	/**
+	 * Removes given key (and value) from bundle.
+	 */
+	public void removeKey(String key) throws Exception {
+		getProperties().remove(key);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/bundle/IPropertiesAccessor.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/bundle/IPropertiesAccessor.java
index 96621b4f3..0fd4bab8c 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/bundle/IPropertiesAccessor.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/bundle/IPropertiesAccessor.java
@@ -25,14 +25,14 @@
  * @coverage core.nls
  */
 public interface IPropertiesAccessor {
-  /**
-   * @return {@link Map} loaded from given stream (based on *.properties file)
-   */
-  Map<String, String> load(InputStream is, String charset) throws Exception;
+	/**
+	 * @return {@link Map} loaded from given stream (based on *.properties file)
+	 */
+	Map<String, String> load(InputStream is, String charset) throws Exception;
 
-  /**
-   * Saves given map and comments into given stream.
-   */
-  void save(OutputStream os, String charset, Map<String, String> map, String comments)
-      throws Exception;
+	/**
+	 * Saves given map and comments into given stream.
+	 */
+	void save(OutputStream os, String charset, Map<String, String> map, String comments)
+			throws Exception;
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/bundle/StandardPropertiesAccessor.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/bundle/StandardPropertiesAccessor.java
index 72ca9fdae..b03cd652b 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/bundle/StandardPropertiesAccessor.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/bundle/StandardPropertiesAccessor.java
@@ -34,92 +34,92 @@
  * @coverage core.nls
  */
 public class StandardPropertiesAccessor implements IPropertiesAccessor {
-  public static final StandardPropertiesAccessor INSTANCE = new StandardPropertiesAccessor();
+	public static final StandardPropertiesAccessor INSTANCE = new StandardPropertiesAccessor();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private StandardPropertiesAccessor() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private StandardPropertiesAccessor() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IPropertiesAccessor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  @SuppressWarnings("unchecked")
-  public Map<String, String> load(InputStream is, String charset) throws Exception {
-    Properties properties = new Properties();
-    load0(properties, is, charset);
-    return (Map) properties;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IPropertiesAccessor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	@SuppressWarnings("unchecked")
+	public Map<String, String> load(InputStream is, String charset) throws Exception {
+		Properties properties = new Properties();
+		load0(properties, is, charset);
+		return (Map) properties;
+	}
 
-  @Override
-  public void save(OutputStream os, String charset, Map<String, String> map, String comments)
-      throws Exception {
-    SortedProperties sorted = new SortedProperties();
-    sorted.putAll(map);
-    store0(sorted, os, charset, comments);
-  }
+	@Override
+	public void save(OutputStream os, String charset, Map<String, String> map, String comments)
+			throws Exception {
+		SortedProperties sorted = new SortedProperties();
+		sorted.putAll(map);
+		store0(sorted, os, charset, comments);
+	}
 
-  private static void load0(Properties properties, InputStream is, String charset) throws Exception {
-    if (charset.equals("UTF-8") && SystemUtils.isJavaVersionAtLeast(1.6f)) {
-      Method loadMethod = Properties.class.getMethod("load", Reader.class);
-      Reader reader = new InputStreamReader(is, charset);
-      loadMethod.invoke(properties, reader);
-    } else {
-      properties.load(is);
-    }
-  }
+	private static void load0(Properties properties, InputStream is, String charset) throws Exception {
+		if (charset.equals("UTF-8") && SystemUtils.isJavaVersionAtLeast(1.6f)) {
+			Method loadMethod = Properties.class.getMethod("load", Reader.class);
+			Reader reader = new InputStreamReader(is, charset);
+			loadMethod.invoke(properties, reader);
+		} else {
+			properties.load(is);
+		}
+	}
 
-  private static void store0(Properties properties, OutputStream os, String charset, String comments)
-      throws Exception {
-    if (charset.equals("UTF-8") && SystemUtils.isJavaVersionAtLeast(1.6f)) {
-      Method loadMethod = Properties.class.getMethod("store", Writer.class, String.class);
-      Writer reader = new OutputStreamWriter(os, charset);
-      loadMethod.invoke(properties, reader, comments);
-    } else {
-      properties.store(os, comments);
-    }
-  }
+	private static void store0(Properties properties, OutputStream os, String charset, String comments)
+			throws Exception {
+		if (charset.equals("UTF-8") && SystemUtils.isJavaVersionAtLeast(1.6f)) {
+			Method loadMethod = Properties.class.getMethod("store", Writer.class, String.class);
+			Writer reader = new OutputStreamWriter(os, charset);
+			loadMethod.invoke(properties, reader, comments);
+		} else {
+			properties.store(os, comments);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Stored properties
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static class SortedProperties extends Properties {
-    private static final long serialVersionUID = 0L;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Stored properties
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static class SortedProperties extends Properties {
+		private static final long serialVersionUID = 0L;
 
-    class IteratorWrapper implements Enumeration<String> {
-      Iterator<String> iterator;
+		class IteratorWrapper implements Enumeration<String> {
+			Iterator<String> iterator;
 
-      public IteratorWrapper(Iterator<String> iterator) {
-        this.iterator = iterator;
-      }
+			public IteratorWrapper(Iterator<String> iterator) {
+				this.iterator = iterator;
+			}
 
-      @Override
-      public boolean hasMoreElements() {
-        return iterator.hasNext();
-      }
+			@Override
+			public boolean hasMoreElements() {
+				return iterator.hasNext();
+			}
 
-      @Override
-      public String nextElement() {
-        return iterator.next();
-      }
-    }
+			@Override
+			public String nextElement() {
+				return iterator.next();
+			}
+		}
 
-    @Override
-    @SuppressWarnings("unchecked")
-    public synchronized Enumeration keys() {
-      TreeSet<String> set = Sets.newTreeSet();
-      for (Enumeration e = super.keys(); e.hasMoreElements();) {
-        set.add((String) e.nextElement());
-      }
-      return new IteratorWrapper(set.iterator());
-    }
-  }
+		@Override
+		@SuppressWarnings("unchecked")
+		public synchronized Enumeration keys() {
+			TreeSet<String> set = Sets.newTreeSet();
+			for (Enumeration e = super.keys(); e.hasMoreElements();) {
+				set.add((String) e.nextElement());
+			}
+			return new IteratorWrapper(set.iterator());
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/bundle/eclipse/AbstractAccessorSourceNewComposite.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/bundle/eclipse/AbstractAccessorSourceNewComposite.java
index fffd52703..2030de39e 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/bundle/eclipse/AbstractAccessorSourceNewComposite.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/bundle/eclipse/AbstractAccessorSourceNewComposite.java
@@ -47,188 +47,188 @@
  * @coverage core.nls.ui
  */
 public abstract class AbstractAccessorSourceNewComposite extends AbstractBundleSourceNewComposite {
-  private PackageRootAndPackageSelectionDialogField m_accessorPackageField;
-  private StringButtonDialogField m_accessorClassField;
+	private PackageRootAndPackageSelectionDialogField m_accessorPackageField;
+	private StringButtonDialogField m_accessorClassField;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractAccessorSourceNewComposite(Composite parent, int style, JavaInfo root) {
-    super(parent, style, root);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractAccessorSourceNewComposite(Composite parent, int style, JavaInfo root) {
+		super(parent, style, root);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Accessor group
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected final void createAccessorGroup() {
-    Group accessorGroup = new Group(this, SWT.NONE);
-    GridDataFactory.create(accessorGroup).grabH().fillH();
-    GridLayoutFactory.create(accessorGroup).columns(3);
-    accessorGroup.setText(Messages.AbstractAccessorSourceNewComposite_accessorGroup);
-    // create source folder and package selection field
-    {
-      m_accessorPackageField =
-          new PackageRootAndPackageSelectionDialogField(60,
-              Messages.AbstractAccessorSourceNewComposite_accessorSourceFolder,
-              Messages.AbstractAccessorSourceNewComposite_accessorSourceFolderBrowse,
-              Messages.AbstractAccessorSourceNewComposite_accessorPackage,
-              Messages.AbstractAccessorSourceNewComposite_accessorPackageBrowse);
-      m_accessorPackageField.setDialogFieldListener(m_validateListener);
-      m_accessorPackageField.doFillIntoGrid(accessorGroup, 3);
-    }
-    // create class field
-    {
-      m_accessorClassField = new StringButtonDialogField(new IStringButtonAdapter() {
-        @Override
-        public void changeControlPressed(DialogField field) {
-          try {
-            // prepare dialog parameters
-            IPackageFragmentRoot sourceFolder = m_accessorPackageField.getRoot();
-            ProgressMonitorDialog context = new ProgressMonitorDialog(DesignerPlugin.getShell());
-            IJavaSearchScope scope =
-                sourceFolder != null
-                    ? SearchEngine.createJavaSearchScope(new IJavaElement[]{sourceFolder})
-                    : SearchEngine.createWorkspaceScope();
-            // prepare dialog
-            SelectionDialog dialog =
-                JavaUI.createTypeDialog(
-                    getShell(),
-                    context,
-                    scope,
-                    IJavaElementSearchConstants.CONSIDER_TYPES,
-                    false,
-                    "*Messages<");
-            dialog.setTitle(Messages.AbstractAccessorSourceNewComposite_accessorChooseTitle);
-            dialog.setMessage(Messages.AbstractAccessorSourceNewComposite_accessorChooseMessage);
-            // select type
-            if (dialog.open() != Window.OK) {
-              return;
-            }
-            IType type = (IType) dialog.getResult()[0];
-            // update source folder, package and class fields
-            ICompilationUnit compilationUnit = type.getCompilationUnit();
-            m_accessorPackageField.setCompilationUnit(compilationUnit);
-            m_accessorClassField.setText(type.getElementName());
-          } catch (Throwable e) {
-            DesignerPlugin.log(e);
-          }
-        }
-      });
-      m_accessorClassField.setDialogFieldListener(m_validateListener);
-      m_accessorClassField.setLabelText(Messages.AbstractAccessorSourceNewComposite_accessorChooseLabel);
-      m_accessorClassField.setButtonLabel(Messages.AbstractAccessorSourceNewComposite_accessorChooseButton);
-      createTextFieldControls(accessorGroup, m_accessorClassField, 3);
-    }
-    // create additional fields
-    createAdditionalAccessorFields(accessorGroup);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Accessor group
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected final void createAccessorGroup() {
+		Group accessorGroup = new Group(this, SWT.NONE);
+		GridDataFactory.create(accessorGroup).grabH().fillH();
+		GridLayoutFactory.create(accessorGroup).columns(3);
+		accessorGroup.setText(Messages.AbstractAccessorSourceNewComposite_accessorGroup);
+		// create source folder and package selection field
+		{
+			m_accessorPackageField =
+					new PackageRootAndPackageSelectionDialogField(60,
+							Messages.AbstractAccessorSourceNewComposite_accessorSourceFolder,
+							Messages.AbstractAccessorSourceNewComposite_accessorSourceFolderBrowse,
+							Messages.AbstractAccessorSourceNewComposite_accessorPackage,
+							Messages.AbstractAccessorSourceNewComposite_accessorPackageBrowse);
+			m_accessorPackageField.setDialogFieldListener(m_validateListener);
+			m_accessorPackageField.doFillIntoGrid(accessorGroup, 3);
+		}
+		// create class field
+		{
+			m_accessorClassField = new StringButtonDialogField(new IStringButtonAdapter() {
+				@Override
+				public void changeControlPressed(DialogField field) {
+					try {
+						// prepare dialog parameters
+						IPackageFragmentRoot sourceFolder = m_accessorPackageField.getRoot();
+						ProgressMonitorDialog context = new ProgressMonitorDialog(DesignerPlugin.getShell());
+						IJavaSearchScope scope =
+								sourceFolder != null
+								? SearchEngine.createJavaSearchScope(new IJavaElement[]{sourceFolder})
+										: SearchEngine.createWorkspaceScope();
+						// prepare dialog
+						SelectionDialog dialog =
+								JavaUI.createTypeDialog(
+										getShell(),
+										context,
+										scope,
+										IJavaElementSearchConstants.CONSIDER_TYPES,
+										false,
+										"*Messages<");
+						dialog.setTitle(Messages.AbstractAccessorSourceNewComposite_accessorChooseTitle);
+						dialog.setMessage(Messages.AbstractAccessorSourceNewComposite_accessorChooseMessage);
+						// select type
+						if (dialog.open() != Window.OK) {
+							return;
+						}
+						IType type = (IType) dialog.getResult()[0];
+						// update source folder, package and class fields
+						ICompilationUnit compilationUnit = type.getCompilationUnit();
+						m_accessorPackageField.setCompilationUnit(compilationUnit);
+						m_accessorClassField.setText(type.getElementName());
+					} catch (Throwable e) {
+						DesignerPlugin.log(e);
+					}
+				}
+			});
+			m_accessorClassField.setDialogFieldListener(m_validateListener);
+			m_accessorClassField.setLabelText(Messages.AbstractAccessorSourceNewComposite_accessorChooseLabel);
+			m_accessorClassField.setButtonLabel(Messages.AbstractAccessorSourceNewComposite_accessorChooseButton);
+			createTextFieldControls(accessorGroup, m_accessorClassField, 3);
+		}
+		// create additional fields
+		createAdditionalAccessorFields(accessorGroup);
+	}
 
-  protected void createAdditionalAccessorFields(Composite parent) {
-  }
+	protected void createAdditionalAccessorFields(Composite parent) {
+	}
 
-  protected final void initializeAccessorGroup() {
-    m_accessorPackageField.setCompilationUnit(m_compilationUnit);
-    m_accessorClassField.setText("Messages");
-  }
+	protected final void initializeAccessorGroup() {
+		m_accessorPackageField.setCompilationUnit(m_compilationUnit);
+		m_accessorClassField.setText("Messages");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Accessor group: validation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final String KEY_ACCESSOR_FOLDER = "KEY_ACCESSOR_FOLDER";
-  private static final String KEY_ACCESSOR_PACKAGE = "KEY_ACCESSOR_PACKAGE";
-  protected static final String KEY_ACCESSOR_CLASS = "KEY_ACCESSOR_CLASS";
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Accessor group: validation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final String KEY_ACCESSOR_FOLDER = "KEY_ACCESSOR_FOLDER";
+	private static final String KEY_ACCESSOR_PACKAGE = "KEY_ACCESSOR_PACKAGE";
+	protected static final String KEY_ACCESSOR_CLASS = "KEY_ACCESSOR_CLASS";
 
-  /**
-   * Validate accessor fields.
-   */
-  protected void validateAccessorFields() {
-    // validate source folder
-    {
-      IPackageFragmentRoot root = m_accessorPackageField.getRoot();
-      if (root == null || !root.exists()) {
-        setInvalid(
-            KEY_ACCESSOR_FOLDER,
-            Messages.AbstractAccessorSourceNewComposite_validateAccessorSourceFolder);
-      } else {
-        setValid(KEY_ACCESSOR_FOLDER);
-      }
-    }
-    // validate package
-    String packageName = null;
-    {
-      IPackageFragment pkg = m_accessorPackageField.getPackage();
-      packageName = pkg == null ? null : pkg.getElementName();
-      if (pkg == null || !pkg.exists()) {
-        setInvalid(
-            KEY_ACCESSOR_PACKAGE,
-            Messages.AbstractAccessorSourceNewComposite_validateAccessorPackageEmpty);
-      } else if (pkg.isDefaultPackage()) {
-        setInvalid(
-            KEY_ACCESSOR_PACKAGE,
-            Messages.AbstractAccessorSourceNewComposite_validateAccessorPackageDefault);
-      } else {
-        setValid(KEY_ACCESSOR_PACKAGE);
-      }
-    }
-    // validate class name
-    String className = m_accessorClassField.getText();
-    {
-      IStatus status = JavaConventions.validateJavaTypeName(className);
-      if (className.indexOf('.') != -1) {
-        setInvalid(
-            KEY_ACCESSOR_CLASS,
-            Messages.AbstractAccessorSourceNewComposite_validateAccessorClassDot);
-      } else if (status.getSeverity() != IStatus.OK) {
-        setStatus(KEY_ACCESSOR_CLASS, status);
-      } else {
-        setValid(KEY_ACCESSOR_CLASS);
-      }
-      // if such class already exists, disable property group
-      try {
-        String fullClassName = packageName + "." + className;
-        IType type = m_editor.getJavaProject().findType(fullClassName);
-        setPropertyGroupEnable(type == null);
-      } catch (Throwable e) {
-        setInvalid(KEY_ACCESSOR_CLASS, "Exception: " + e.getMessage());
-      }
-    }
-  }
+	/**
+	 * Validate accessor fields.
+	 */
+	protected void validateAccessorFields() {
+		// validate source folder
+		{
+			IPackageFragmentRoot root = m_accessorPackageField.getRoot();
+			if (root == null || !root.exists()) {
+				setInvalid(
+						KEY_ACCESSOR_FOLDER,
+						Messages.AbstractAccessorSourceNewComposite_validateAccessorSourceFolder);
+			} else {
+				setValid(KEY_ACCESSOR_FOLDER);
+			}
+		}
+		// validate package
+		String packageName = null;
+		{
+			IPackageFragment pkg = m_accessorPackageField.getPackage();
+			packageName = pkg == null ? null : pkg.getElementName();
+			if (pkg == null || !pkg.exists()) {
+				setInvalid(
+						KEY_ACCESSOR_PACKAGE,
+						Messages.AbstractAccessorSourceNewComposite_validateAccessorPackageEmpty);
+			} else if (pkg.isDefaultPackage()) {
+				setInvalid(
+						KEY_ACCESSOR_PACKAGE,
+						Messages.AbstractAccessorSourceNewComposite_validateAccessorPackageDefault);
+			} else {
+				setValid(KEY_ACCESSOR_PACKAGE);
+			}
+		}
+		// validate class name
+		String className = m_accessorClassField.getText();
+		{
+			IStatus status = JavaConventions.validateJavaTypeName(className);
+			if (className.indexOf('.') != -1) {
+				setInvalid(
+						KEY_ACCESSOR_CLASS,
+						Messages.AbstractAccessorSourceNewComposite_validateAccessorClassDot);
+			} else if (status.getSeverity() != IStatus.OK) {
+				setStatus(KEY_ACCESSOR_CLASS, status);
+			} else {
+				setValid(KEY_ACCESSOR_CLASS);
+			}
+			// if such class already exists, disable property group
+			try {
+				String fullClassName = packageName + "." + className;
+				IType type = m_editor.getJavaProject().findType(fullClassName);
+				setPropertyGroupEnable(type == null);
+			} catch (Throwable e) {
+				setInvalid(KEY_ACCESSOR_CLASS, "Exception: " + e.getMessage());
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Validation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void validateAll() {
-    validateAccessorFields();
-    super.validateAll();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Validation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void validateAll() {
+		validateAccessorFields();
+		super.validateAll();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Creating
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected final void fillAccessorParameters(AbstractAccessorSourceParameters parameters)
-      throws Exception {
-    parameters.m_accessorSourceFolder = m_accessorPackageField.getRoot();
-    parameters.m_accessorPackage = m_accessorPackageField.getPackage();
-    parameters.m_accessorPackageName = parameters.m_accessorPackage.getElementName();
-    parameters.m_accessorClassName = m_accessorClassField.getText();
-    parameters.m_accessorFullClassName =
-        parameters.m_accessorPackageName + "." + parameters.m_accessorClassName;
-    // prepare m_accessorExists
-    {
-      IJavaProject javaProject = m_editor.getJavaProject();
-      parameters.m_accessorExists =
-          javaProject.findType(parameters.m_accessorFullClassName) != null;
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Creating
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected final void fillAccessorParameters(AbstractAccessorSourceParameters parameters)
+			throws Exception {
+		parameters.m_accessorSourceFolder = m_accessorPackageField.getRoot();
+		parameters.m_accessorPackage = m_accessorPackageField.getPackage();
+		parameters.m_accessorPackageName = parameters.m_accessorPackage.getElementName();
+		parameters.m_accessorClassName = m_accessorClassField.getText();
+		parameters.m_accessorFullClassName =
+				parameters.m_accessorPackageName + "." + parameters.m_accessorClassName;
+		// prepare m_accessorExists
+		{
+			IJavaProject javaProject = m_editor.getJavaProject();
+			parameters.m_accessorExists =
+					javaProject.findType(parameters.m_accessorFullClassName) != null;
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/bundle/eclipse/AbstractAccessorSourceParameters.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/bundle/eclipse/AbstractAccessorSourceParameters.java
index fc1363908..d300d80e7 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/bundle/eclipse/AbstractAccessorSourceParameters.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/bundle/eclipse/AbstractAccessorSourceParameters.java
@@ -22,15 +22,15 @@
  * @coverage core.nls
  */
 public class AbstractAccessorSourceParameters extends AbstractBundleSourceParameters {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Accessor parameters
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public IPackageFragmentRoot m_accessorSourceFolder;
-  public IPackageFragment m_accessorPackage;
-  public String m_accessorPackageName;
-  public String m_accessorClassName;
-  public String m_accessorFullClassName;
-  public boolean m_accessorExists;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Accessor parameters
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public IPackageFragmentRoot m_accessorSourceFolder;
+	public IPackageFragment m_accessorPackage;
+	public String m_accessorPackageName;
+	public String m_accessorClassName;
+	public String m_accessorFullClassName;
+	public boolean m_accessorExists;
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/bundle/eclipse/modern/ModernEclipseSource.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/bundle/eclipse/modern/ModernEclipseSource.java
index 1f1fd20f9..cc97fefb0 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/bundle/eclipse/modern/ModernEclipseSource.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/bundle/eclipse/modern/ModernEclipseSource.java
@@ -59,348 +59,348 @@
  * @coverage core.nls
  */
 public final class ModernEclipseSource extends AbstractPureBundleSource {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Static fields
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final IKeyGeneratorStrategy MODERN_KEY_GENERATOR = new IKeyGeneratorStrategy() {
-    @Override
-    public final String generateBaseKey(JavaInfo component, GenericProperty property) {
-      String typeName = getTypeName(component).replace('.', '_');
-      String componentName = component.getVariableSupport().getComponentName();
-      String titleName = property.getTitle().replace(' ', '_');
-      return typeName + "_" + componentName + "_" + titleName;
-    }
-  };
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Static fields
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final IKeyGeneratorStrategy MODERN_KEY_GENERATOR = new IKeyGeneratorStrategy() {
+		@Override
+		public final String generateBaseKey(JavaInfo component, GenericProperty property) {
+			String typeName = getTypeName(component).replace('.', '_');
+			String componentName = component.getVariableSupport().getComponentName();
+			String titleName = property.getTitle().replace(' ', '_');
+			return typeName + "_" + componentName + "_" + titleName;
+		}
+	};
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Possible sources
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getBundleComment() {
-    return "Eclipse modern messages class";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Possible sources
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getBundleComment() {
+		return "Eclipse modern messages class";
+	}
 
-  /**
-   * Return "possible" sources that exist in given package.
-   *
-   * "Possible" source is source that exists in current package, but is not used in current unit. We
-   * show "possible" sources only if there are no "real" sources.
-   */
-  public static List<AbstractSource> getPossibleSources(JavaInfo root, IPackageFragment pkg)
-      throws Exception {
-    List<AbstractSource> sources = Lists.newArrayList();
-    // check that there is "NLS" type
-    IType typeNLS = root.getEditor().getJavaProject().findType("org.eclipse.osgi.util.NLS");
-    if (typeNLS != null) {
-      IJavaElement[] packageElements = pkg.getChildren();
-      for (int i = 0; i < packageElements.length; i++) {
-        ICompilationUnit unit = (ICompilationUnit) packageElements[i];
-        IType type = unit.findPrimaryType();
-        if (type != null) {
-          // check that type is is successor of NLS
-          if (CodeUtils.isSuccessorOf(type, typeNLS)) {
-            try {
-              String accessorClassName = type.getFullyQualifiedName();
-              AbstractSource source = new ModernEclipseSource(root, accessorClassName, null);
-              sources.add(source);
-            } catch (Throwable e) {
-              DesignerPlugin.log(e);
-            }
-          }
-        }
-      }
-    }
-    return sources;
-  }
+	/**
+	 * Return "possible" sources that exist in given package.
+	 *
+	 * "Possible" source is source that exists in current package, but is not used in current unit. We
+	 * show "possible" sources only if there are no "real" sources.
+	 */
+	public static List<AbstractSource> getPossibleSources(JavaInfo root, IPackageFragment pkg)
+			throws Exception {
+		List<AbstractSource> sources = Lists.newArrayList();
+		// check that there is "NLS" type
+		IType typeNLS = root.getEditor().getJavaProject().findType("org.eclipse.osgi.util.NLS");
+		if (typeNLS != null) {
+			IJavaElement[] packageElements = pkg.getChildren();
+			for (int i = 0; i < packageElements.length; i++) {
+				ICompilationUnit unit = (ICompilationUnit) packageElements[i];
+				IType type = unit.findPrimaryType();
+				if (type != null) {
+					// check that type is is successor of NLS
+					if (CodeUtils.isSuccessorOf(type, typeNLS)) {
+						try {
+							String accessorClassName = type.getFullyQualifiedName();
+							AbstractSource source = new ModernEclipseSource(root, accessorClassName, null);
+							sources.add(source);
+						} catch (Throwable e) {
+							DesignerPlugin.log(e);
+						}
+					}
+				}
+			}
+		}
+		return sources;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Creation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Parse given expression and return NLSSource for it (new or existing from list).
-   */
-  public static AbstractSource get(JavaInfo component,
-      GenericProperty property,
-      Expression expression,
-      List<AbstractSource> sources) throws Exception {
-    ExpressionInfo expressionInfo = getExpressionInfo(expression);
-    if (expressionInfo != null) {
-      String accessorClassName = expressionInfo.m_accessorClassName;
-      ModernEclipseSource source = getNewOrExistingSource(component, accessorClassName, sources);
-      source.onKeyAdd(component, expressionInfo.m_key);
-      return source;
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Creation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Parse given expression and return NLSSource for it (new or existing from list).
+	 */
+	public static AbstractSource get(JavaInfo component,
+			GenericProperty property,
+			Expression expression,
+			List<AbstractSource> sources) throws Exception {
+		ExpressionInfo expressionInfo = getExpressionInfo(expression);
+		if (expressionInfo != null) {
+			String accessorClassName = expressionInfo.m_accessorClassName;
+			ModernEclipseSource source = getNewOrExistingSource(component, accessorClassName, sources);
+			source.onKeyAdd(component, expressionInfo.m_key);
+			return source;
+		}
+		return null;
+	}
 
-  /**
-   * Find existing source with same accessor or create new one.
-   */
-  private static ModernEclipseSource getNewOrExistingSource(JavaInfo component,
-      String accessorClassName,
-      List<AbstractSource> sources) throws Exception {
-    for (AbstractSource abstractSource : sources) {
-      if (abstractSource instanceof ModernEclipseSource) {
-        ModernEclipseSource source = (ModernEclipseSource) abstractSource;
-        if (source.m_accessorClassName.equals(accessorClassName)) {
-          return source;
-        }
-      }
-    }
-    return new ModernEclipseSource(component.getRootJava(), accessorClassName, null);
-  }
+	/**
+	 * Find existing source with same accessor or create new one.
+	 */
+	private static ModernEclipseSource getNewOrExistingSource(JavaInfo component,
+			String accessorClassName,
+			List<AbstractSource> sources) throws Exception {
+		for (AbstractSource abstractSource : sources) {
+			if (abstractSource instanceof ModernEclipseSource) {
+				ModernEclipseSource source = (ModernEclipseSource) abstractSource;
+				if (source.m_accessorClassName.equals(accessorClassName)) {
+					return source;
+				}
+			}
+		}
+		return new ModernEclipseSource(component.getRootJava(), accessorClassName, null);
+	}
 
-  /**
-   * Parse given expression and if it is valid Eclipse style accessor class access, extract resource
-   * bundle name and key.
-   */
-  private static ExpressionInfo getExpressionInfo(Expression expression) {
-    if (expression instanceof QualifiedName) {
-      QualifiedName qualifiedName = (QualifiedName) expression;
-      Name qualifier = qualifiedName.getQualifier();
-      // check that qualifier is successor of NLS
-      if (!AstNodeUtils.isSuccessorOf(
-          AstNodeUtils.getTypeBinding(qualifier),
-          "org.eclipse.osgi.util.NLS")) {
-        return null;
-      }
-      // prepare parameters
-      String accessorClassName = AstNodeUtils.getFullyQualifiedName(qualifier, true);
-      SimpleName keyExpression = qualifiedName.getName();
-      String key = keyExpression.getIdentifier();
-      //
-      ExpressionInfo expressionInfo =
-          new ExpressionInfo(expression, accessorClassName, keyExpression, key);
-      expression.setProperty(NLS_EXPRESSION_INFO, expressionInfo);
-      return expressionInfo;
-    }
-    return null;
-  }
+	/**
+	 * Parse given expression and if it is valid Eclipse style accessor class access, extract resource
+	 * bundle name and key.
+	 */
+	private static ExpressionInfo getExpressionInfo(Expression expression) {
+		if (expression instanceof QualifiedName) {
+			QualifiedName qualifiedName = (QualifiedName) expression;
+			Name qualifier = qualifiedName.getQualifier();
+			// check that qualifier is successor of NLS
+			if (!AstNodeUtils.isSuccessorOf(
+					AstNodeUtils.getTypeBinding(qualifier),
+					"org.eclipse.osgi.util.NLS")) {
+				return null;
+			}
+			// prepare parameters
+			String accessorClassName = AstNodeUtils.getFullyQualifiedName(qualifier, true);
+			SimpleName keyExpression = qualifiedName.getName();
+			String key = keyExpression.getIdentifier();
+			//
+			ExpressionInfo expressionInfo =
+					new ExpressionInfo(expression, accessorClassName, keyExpression, key);
+			expression.setProperty(NLS_EXPRESSION_INFO, expressionInfo);
+			return expressionInfo;
+		}
+		return null;
+	}
 
-  /**
-   * Get bundle name (value of field BUNDLE_NAME) from given accessor class.
-   */
-  private static String accessor_getBundleName(JavaInfo component, String accessorClassName)
-      throws Exception {
-    ClassLoader editorLoader = EditorState.get(component.getEditor()).getEditorLoader();
-    Class<?> accessorClass = editorLoader.loadClass(accessorClassName);
-    Field bundleNameField = accessorClass.getDeclaredField("BUNDLE_NAME");
-    bundleNameField.setAccessible(true);
-    return (String) bundleNameField.get(null);
-  }
+	/**
+	 * Get bundle name (value of field BUNDLE_NAME) from given accessor class.
+	 */
+	private static String accessor_getBundleName(JavaInfo component, String accessorClassName)
+			throws Exception {
+		ClassLoader editorLoader = EditorState.get(component.getEditor()).getEditorLoader();
+		Class<?> accessorClass = editorLoader.loadClass(accessorClassName);
+		Field bundleNameField = accessorClass.getDeclaredField("BUNDLE_NAME");
+		bundleNameField.setAccessible(true);
+		return (String) bundleNameField.get(null);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Expression information
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Information about expression. We store it in expression property to avoid parsing every time.
-   */
-  private static class ExpressionInfo extends BasicExpressionInfo {
-    private final String m_accessorClassName;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Expression information
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Information about expression. We store it in expression property to avoid parsing every time.
+	 */
+	private static class ExpressionInfo extends BasicExpressionInfo {
+		private final String m_accessorClassName;
 
-    public ExpressionInfo(Expression expression,
-        String accessorClassName,
-        Expression keyExpression,
-        String key) {
-      super(expression, keyExpression, key);
-      m_accessorClassName = accessorClassName;
-    }
-  }
+		public ExpressionInfo(Expression expression,
+				String accessorClassName,
+				Expression keyExpression,
+				String key) {
+			super(expression, keyExpression, key);
+			m_accessorClassName = accessorClassName;
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance fields
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final String m_accessorClassName;
-  private final AstEditor m_accessorEditor;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance fields
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final String m_accessorClassName;
+	private final AstEditor m_accessorEditor;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ModernEclipseSource(JavaInfo root, String accessorClassName, String bundleName)
-      throws Exception {
-    super(root, bundleName != null ? bundleName : accessor_getBundleName(root, accessorClassName));
-    // initialize fields
-    if (accessorClassName != null) {
-      m_accessorClassName = accessorClassName;
-      // prepare AST editor for accessor
-      {
-        IType accessor_type = m_root.getEditor().getJavaProject().findType(m_accessorClassName);
-        ICompilationUnit accessor_unit = accessor_type.getCompilationUnit();
-        m_accessorEditor = new AstEditor(accessor_unit);
-      }
-    } else {
-      m_accessorClassName = null;
-      m_accessorEditor = null;
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ModernEclipseSource(JavaInfo root, String accessorClassName, String bundleName)
+			throws Exception {
+		super(root, bundleName != null ? bundleName : accessor_getBundleName(root, accessorClassName));
+		// initialize fields
+		if (accessorClassName != null) {
+			m_accessorClassName = accessorClassName;
+			// prepare AST editor for accessor
+			{
+				IType accessor_type = m_root.getEditor().getJavaProject().findType(m_accessorClassName);
+				ICompilationUnit accessor_unit = accessor_type.getCompilationUnit();
+				m_accessorEditor = new AstEditor(accessor_unit);
+			}
+		} else {
+			m_accessorClassName = null;
+			m_accessorEditor = null;
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getTypeTitle() throws Exception {
-    return "Modern Eclipse messages class " + m_accessorClassName;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getTypeTitle() throws Exception {
+		return "Modern Eclipse messages class " + m_accessorClassName;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Edit support
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected IKeyGeneratorStrategy getKeyGeneratorStrategy() {
-    return MODERN_KEY_GENERATOR;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Edit support
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected IKeyGeneratorStrategy getKeyGeneratorStrategy() {
+		return MODERN_KEY_GENERATOR;
+	}
 
-  @Override
-  public void apply_addKey(String key) throws Exception {
-    addKey(key);
-    super.apply_addKey(key);
-  }
+	@Override
+	public void apply_addKey(String key) throws Exception {
+		addKey(key);
+		super.apply_addKey(key);
+	}
 
-  @Override
-  protected BasicExpressionInfo apply_externalize_replaceExpression(GenericProperty property,
-      String key) throws Exception {
-    // replace expression
-    Expression expression = property.getExpression();
-    String source = m_accessorClassName + "." + key;
-    Expression newExpression = m_root.getEditor().replaceExpression(expression, source);
-    // side effect of this invocation is that ExpressionInfo placed in newExpression
-    return getExpressionInfo(newExpression);
-  }
+	@Override
+	protected BasicExpressionInfo apply_externalize_replaceExpression(GenericProperty property,
+			String key) throws Exception {
+		// replace expression
+		Expression expression = property.getExpression();
+		String source = m_accessorClassName + "." + key;
+		Expression newExpression = m_root.getEditor().replaceExpression(expression, source);
+		// side effect of this invocation is that ExpressionInfo placed in newExpression
+		return getExpressionInfo(newExpression);
+	}
 
-  @Override
-  protected Expression apply_renameKey_replaceKeyExpression(AstEditor editor,
-      Expression keyExpression,
-      String newKey) throws Exception {
-    editor.setIdentifier((SimpleName) keyExpression, newKey);
-    return keyExpression;
-  }
+	@Override
+	protected Expression apply_renameKey_replaceKeyExpression(AstEditor editor,
+			Expression keyExpression,
+			String newKey) throws Exception {
+		editor.setIdentifier((SimpleName) keyExpression, newKey);
+		return keyExpression;
+	}
 
-  @Override
-  protected void apply_renameKeys_pre(final Map<String, String> oldToNew) throws Exception {
-    m_accessorEditor.getAstUnit().accept(new AstVisitorEx() {
-      @Override
-      public void postVisitEx(ASTNode node) throws Exception {
-        if (node instanceof FieldDeclaration) {
-          FieldDeclaration fieldDeclaration = (FieldDeclaration) node;
-          if (fieldDeclaration.fragments().size() == 1) {
-            VariableDeclarationFragment vdf =
-                (VariableDeclarationFragment) fieldDeclaration.fragments().get(0);
-            String fieldName = vdf.getName().getIdentifier();
-            String newFieldName = oldToNew.get(fieldName);
-            if (newFieldName != null) {
-              m_accessorEditor.setIdentifier(vdf.getName(), newFieldName);
-            }
-          }
-        }
-      }
-    });
-    commitAccessorChanges();
-  }
+	@Override
+	protected void apply_renameKeys_pre(final Map<String, String> oldToNew) throws Exception {
+		m_accessorEditor.getAstUnit().accept(new AstVisitorEx() {
+			@Override
+			public void postVisitEx(ASTNode node) throws Exception {
+				if (node instanceof FieldDeclaration) {
+					FieldDeclaration fieldDeclaration = (FieldDeclaration) node;
+					if (fieldDeclaration.fragments().size() == 1) {
+						VariableDeclarationFragment vdf =
+								(VariableDeclarationFragment) fieldDeclaration.fragments().get(0);
+						String fieldName = vdf.getName().getIdentifier();
+						String newFieldName = oldToNew.get(fieldName);
+						if (newFieldName != null) {
+							m_accessorEditor.setIdentifier(vdf.getName(), newFieldName);
+						}
+					}
+				}
+			}
+		});
+		commitAccessorChanges();
+	}
 
-  @Override
-  protected void apply_internalizeKeys_post(final Set<String> keys) throws Exception {
-    m_accessorEditor.getAstUnit().accept(new AstVisitorEx() {
-      @Override
-      public void postVisitEx(ASTNode node) throws Exception {
-        if (node instanceof FieldDeclaration) {
-          FieldDeclaration fieldDeclaration = (FieldDeclaration) node;
-          if (fieldDeclaration.fragments().size() == 1) {
-            VariableDeclarationFragment vdf =
-                (VariableDeclarationFragment) fieldDeclaration.fragments().get(0);
-            String fieldName = vdf.getName().getIdentifier();
-            if (keys.contains(fieldName)) {
-              m_accessorEditor.removeBodyDeclaration(fieldDeclaration);
-            }
-          }
-        }
-      }
-    });
-    commitAccessorChanges();
-  }
+	@Override
+	protected void apply_internalizeKeys_post(final Set<String> keys) throws Exception {
+		m_accessorEditor.getAstUnit().accept(new AstVisitorEx() {
+			@Override
+			public void postVisitEx(ASTNode node) throws Exception {
+				if (node instanceof FieldDeclaration) {
+					FieldDeclaration fieldDeclaration = (FieldDeclaration) node;
+					if (fieldDeclaration.fragments().size() == 1) {
+						VariableDeclarationFragment vdf =
+								(VariableDeclarationFragment) fieldDeclaration.fragments().get(0);
+						String fieldName = vdf.getName().getIdentifier();
+						if (keys.contains(fieldName)) {
+							m_accessorEditor.removeBodyDeclaration(fieldDeclaration);
+						}
+					}
+				}
+			}
+		});
+		commitAccessorChanges();
+	}
 
-  /**
-   * Create NLS source for given root and parameters.
-   */
-  public static ModernEclipseSource apply_create(IEditableSource editable, JavaInfo root, Object o)
-      throws Exception {
-    // prepare parameters
-    SourceParameters parameters = (SourceParameters) o;
-    // create accessor class file
-    if (!parameters.m_accessorExists) {
-      // prepare accessor class source
-      String template;
-      {
-        template =
-            IOUtils.toString(ModernEclipseSource.class.getResourceAsStream("newAccessor.jvt"));
-        template =
-            StringUtils.replace(
-                template,
-                "%PACKAGE_NAME%",
-                parameters.m_accessorPackage.getElementName());
-        template = StringUtils.replace(template, "%CLASS_NAME%", parameters.m_accessorClassName);
-        template = StringUtils.replace(template, "%BUNDLE_NAME%", parameters.m_propertyBundleName);
-      }
-      // create accessor class file
-      {
-        IFolder accessorFolder = (IFolder) parameters.m_accessorPackage.getUnderlyingResource();
-        IFile accessorFile = accessorFolder.getFile(parameters.m_accessorClassName + ".java");
-        accessorFile.create(
-            new ByteArrayInputStream(template.getBytes()),
-            true,
-            new NullProgressMonitor());
-      }
-      // create property bundle
-      createPropertyBundleFile(parameters.m_propertyPackage, parameters.m_propertyFileName, null);
-      // wait until accessor class will be compiled
-      WorkspaceUtils.waitForClass(root.getEditor(), parameters.m_accessorFullClassName);
-    }
-    // create source
-    return new ModernEclipseSource(root, parameters.m_accessorFullClassName, null);
-  }
+	/**
+	 * Create NLS source for given root and parameters.
+	 */
+	public static ModernEclipseSource apply_create(IEditableSource editable, JavaInfo root, Object o)
+			throws Exception {
+		// prepare parameters
+		SourceParameters parameters = (SourceParameters) o;
+		// create accessor class file
+		if (!parameters.m_accessorExists) {
+			// prepare accessor class source
+			String template;
+			{
+				template =
+						IOUtils.toString(ModernEclipseSource.class.getResourceAsStream("newAccessor.jvt"));
+				template =
+						StringUtils.replace(
+								template,
+								"%PACKAGE_NAME%",
+								parameters.m_accessorPackage.getElementName());
+				template = StringUtils.replace(template, "%CLASS_NAME%", parameters.m_accessorClassName);
+				template = StringUtils.replace(template, "%BUNDLE_NAME%", parameters.m_propertyBundleName);
+			}
+			// create accessor class file
+			{
+				IFolder accessorFolder = (IFolder) parameters.m_accessorPackage.getUnderlyingResource();
+				IFile accessorFile = accessorFolder.getFile(parameters.m_accessorClassName + ".java");
+				accessorFile.create(
+						new ByteArrayInputStream(template.getBytes()),
+						true,
+						new NullProgressMonitor());
+			}
+			// create property bundle
+			createPropertyBundleFile(parameters.m_propertyPackage, parameters.m_propertyFileName, null);
+			// wait until accessor class will be compiled
+			WorkspaceUtils.waitForClass(root.getEditor(), parameters.m_accessorFullClassName);
+		}
+		// create source
+		return new ModernEclipseSource(root, parameters.m_accessorFullClassName, null);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void addKey(String key) throws Exception {
-    // prepare last field declaration
-    FieldDeclaration lastFieldDeclaration;
-    {
-      TypeDeclaration typeDeclaration =
-          (TypeDeclaration) m_accessorEditor.getAstUnit().types().get(0);
-      FieldDeclaration[] fields = typeDeclaration.getFields();
-      lastFieldDeclaration = fields[fields.length - 1];
-    }
-    // add new field declaration
-    m_accessorEditor.addFieldDeclaration(
-        "public static String " + key + ";",
-        new BodyDeclarationTarget(lastFieldDeclaration, false));
-    //
-    commitAccessorChanges();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void addKey(String key) throws Exception {
+		// prepare last field declaration
+		FieldDeclaration lastFieldDeclaration;
+		{
+			TypeDeclaration typeDeclaration =
+					(TypeDeclaration) m_accessorEditor.getAstUnit().types().get(0);
+			FieldDeclaration[] fields = typeDeclaration.getFields();
+			lastFieldDeclaration = fields[fields.length - 1];
+		}
+		// add new field declaration
+		m_accessorEditor.addFieldDeclaration(
+				"public static String " + key + ";",
+				new BodyDeclarationTarget(lastFieldDeclaration, false));
+		//
+		commitAccessorChanges();
+	}
 
-  /**
-   * Commits changes in accessor {@link AstEditor}, including saving {@link ICompilationUnit}
-   * buffer.
-   */
-  private void commitAccessorChanges() throws Exception {
-    m_accessorEditor.saveChanges(true);
-  }
+	/**
+	 * Commits changes in accessor {@link AstEditor}, including saving {@link ICompilationUnit}
+	 * buffer.
+	 */
+	private void commitAccessorChanges() throws Exception {
+		m_accessorEditor.saveChanges(true);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/bundle/eclipse/modern/ModernEclipseSourceNewComposite.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/bundle/eclipse/modern/ModernEclipseSourceNewComposite.java
index 0faa8a04b..573163fdf 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/bundle/eclipse/modern/ModernEclipseSourceNewComposite.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/bundle/eclipse/modern/ModernEclipseSourceNewComposite.java
@@ -24,73 +24,73 @@
  * @coverage core.nls.ui
  */
 public final class ModernEclipseSourceNewComposite extends AbstractAccessorSourceNewComposite {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ModernEclipseSourceNewComposite(Composite parent, int style, JavaInfo root) {
-    super(parent, style, root);
-    // create GUI controls
-    createAccessorGroup();
-    createPropertyGroup();
-    // initialize fields
-    {
-      initializeAccessorGroup();
-      initializePropertyGroup();
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ModernEclipseSourceNewComposite(Composite parent, int style, JavaInfo root) {
+		super(parent, style, root);
+		// create GUI controls
+		createAccessorGroup();
+		createPropertyGroup();
+		// initialize fields
+		{
+			initializeAccessorGroup();
+			initializePropertyGroup();
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Display
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static String getTitle() {
-    return Messages.ModernEclipseSourceNewComposite_title;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Display
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static String getTitle() {
+		return Messages.ModernEclipseSourceNewComposite_title;
+	}
 
-  @Override
-  public String getSample() {
-    return "button.setText( ApplicationMessages.button_text );";
-  }
+	@Override
+	public String getSample() {
+		return "button.setText( ApplicationMessages.button_text );";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Creating
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public IEditableSource createEditableSource(Object o) throws Exception {
-    SourceParameters parameters = (SourceParameters) o;
-    // create editable source
-    IEditableSource editableSource;
-    {
-      // check, may be we already have such accessor or property file
-      if (parameters.m_accessorExists) {
-        // use existing accessor
-        ModernEclipseSource source =
-            new ModernEclipseSource(m_root, parameters.m_accessorFullClassName, null);
-        editableSource = source.getEditable();
-      } else if (parameters.m_propertyFileExists) {
-        // use existing property file
-        ModernEclipseSource source =
-            new ModernEclipseSource(m_root, null, parameters.m_propertyBundleName);
-        editableSource = source.getEditable();
-      } else {
-        editableSource = createEmptyEditable(parameters.m_propertyBundleName);
-      }
-    }
-    // configure editable source and return
-    editableSource.setKeyGeneratorStrategy(ModernEclipseSource.MODERN_KEY_GENERATOR);
-    return editableSource;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Creating
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public IEditableSource createEditableSource(Object o) throws Exception {
+		SourceParameters parameters = (SourceParameters) o;
+		// create editable source
+		IEditableSource editableSource;
+		{
+			// check, may be we already have such accessor or property file
+			if (parameters.m_accessorExists) {
+				// use existing accessor
+				ModernEclipseSource source =
+						new ModernEclipseSource(m_root, parameters.m_accessorFullClassName, null);
+				editableSource = source.getEditable();
+			} else if (parameters.m_propertyFileExists) {
+				// use existing property file
+				ModernEclipseSource source =
+						new ModernEclipseSource(m_root, null, parameters.m_propertyBundleName);
+				editableSource = source.getEditable();
+			} else {
+				editableSource = createEmptyEditable(parameters.m_propertyBundleName);
+			}
+		}
+		// configure editable source and return
+		editableSource.setKeyGeneratorStrategy(ModernEclipseSource.MODERN_KEY_GENERATOR);
+		return editableSource;
+	}
 
-  @Override
-  public Object createParametersObject() throws Exception {
-    SourceParameters parameters = new SourceParameters();
-    fillAccessorParameters(parameters);
-    fillPropertyParameters(parameters);
-    return parameters;
-  }
+	@Override
+	public Object createParametersObject() throws Exception {
+		SourceParameters parameters = new SourceParameters();
+		fillAccessorParameters(parameters);
+		fillPropertyParameters(parameters);
+		return parameters;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/bundle/eclipse/old/EclipseSource.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/bundle/eclipse/old/EclipseSource.java
index 3db18901f..1ac0a408a 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/bundle/eclipse/old/EclipseSource.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/bundle/eclipse/old/EclipseSource.java
@@ -55,395 +55,395 @@
  * @coverage core.nls
  */
 public final class EclipseSource extends AbstractBundleSource {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Possible sources
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getBundleComment() {
-    return "Eclipse messages class";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Possible sources
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getBundleComment() {
+		return "Eclipse messages class";
+	}
 
-  /**
-   * Return "possible" sources that exist in given package.
-   *
-   * "Possible" source is source that exists in current package, but is not used in current unit. We
-   * show "possible" sources only if there are no "real" sources.
-   */
-  public static List<AbstractSource> getPossibleSources(JavaInfo root, IPackageFragment pkg)
-      throws Exception {
-    List<AbstractSource> sources = Lists.newArrayList();
-    IJavaElement[] packageElements = pkg.getChildren();
-    for (int i = 0; i < packageElements.length; i++) {
-      ICompilationUnit unit = (ICompilationUnit) packageElements[i];
-      if (unit.getElementName().endsWith("Messages.java")) {
-        IType type = unit.findPrimaryType();
-        if (type != null) {
-          // check for field BUNDLE_NAME
-          {
-            IField field_bundleName = type.getField("BUNDLE_NAME");
-            if (!field_bundleName.exists()) {
-              continue;
-            }
-          }
-          // check for method getString(key[, default value])
-          {
-            IMethod method_getString_1 =
-                CodeUtils.findMethodSingleType(type, "getString(java.lang.String)");
-            IMethod method_getString_2 =
-                CodeUtils.findMethodSingleType(type, "getString(java.lang.String,java.lang.String)");
-            if (method_getString_1 == null && method_getString_2 == null) {
-              continue;
-            }
-          }
-          // OK, this is probably correct source
-          try {
-            String accessorClassName = pkg.getElementName() + "." + type.getElementName();
-            AbstractSource source = new EclipseSource(root, accessorClassName, null);
-            sources.add(source);
-          } catch (Throwable e) {
-            DesignerPlugin.log(e);
-          }
-        }
-      }
-    }
-    return sources;
-  }
+	/**
+	 * Return "possible" sources that exist in given package.
+	 *
+	 * "Possible" source is source that exists in current package, but is not used in current unit. We
+	 * show "possible" sources only if there are no "real" sources.
+	 */
+	public static List<AbstractSource> getPossibleSources(JavaInfo root, IPackageFragment pkg)
+			throws Exception {
+		List<AbstractSource> sources = Lists.newArrayList();
+		IJavaElement[] packageElements = pkg.getChildren();
+		for (int i = 0; i < packageElements.length; i++) {
+			ICompilationUnit unit = (ICompilationUnit) packageElements[i];
+			if (unit.getElementName().endsWith("Messages.java")) {
+				IType type = unit.findPrimaryType();
+				if (type != null) {
+					// check for field BUNDLE_NAME
+					{
+						IField field_bundleName = type.getField("BUNDLE_NAME");
+						if (!field_bundleName.exists()) {
+							continue;
+						}
+					}
+					// check for method getString(key[, default value])
+					{
+						IMethod method_getString_1 =
+								CodeUtils.findMethodSingleType(type, "getString(java.lang.String)");
+						IMethod method_getString_2 =
+								CodeUtils.findMethodSingleType(type, "getString(java.lang.String,java.lang.String)");
+						if (method_getString_1 == null && method_getString_2 == null) {
+							continue;
+						}
+					}
+					// OK, this is probably correct source
+					try {
+						String accessorClassName = pkg.getElementName() + "." + type.getElementName();
+						AbstractSource source = new EclipseSource(root, accessorClassName, null);
+						sources.add(source);
+					} catch (Throwable e) {
+						DesignerPlugin.log(e);
+					}
+				}
+			}
+		}
+		return sources;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Creation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Parse given expression and return NLSSource for it (new or existing from list).
-   */
-  public static AbstractSource get(JavaInfo component,
-      GenericProperty property,
-      Expression expression,
-      List<AbstractSource> sources) throws Exception {
-    ExpressionInfo expressionInfo = getExpressionInfo(component, expression);
-    if (expressionInfo != null) {
-      String accessorClassName = expressionInfo.m_accessorClassName;
-      EclipseSource source = getNewOrExistingSource(component, accessorClassName, sources);
-      source.onKeyAdd(component, expressionInfo.m_key);
-      return source;
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Creation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Parse given expression and return NLSSource for it (new or existing from list).
+	 */
+	public static AbstractSource get(JavaInfo component,
+			GenericProperty property,
+			Expression expression,
+			List<AbstractSource> sources) throws Exception {
+		ExpressionInfo expressionInfo = getExpressionInfo(component, expression);
+		if (expressionInfo != null) {
+			String accessorClassName = expressionInfo.m_accessorClassName;
+			EclipseSource source = getNewOrExistingSource(component, accessorClassName, sources);
+			source.onKeyAdd(component, expressionInfo.m_key);
+			return source;
+		}
+		return null;
+	}
 
-  /**
-   * Find existing source with same accessor or create new one.
-   */
-  private static EclipseSource getNewOrExistingSource(JavaInfo component,
-      String accessorClassName,
-      List<AbstractSource> sources) throws Exception {
-    for (AbstractSource abstractSource : sources) {
-      if (abstractSource instanceof EclipseSource) {
-        EclipseSource source = (EclipseSource) abstractSource;
-        if (source.m_accessorClassName.equals(accessorClassName)) {
-          return source;
-        }
-      }
-    }
-    // create new source
-    return new EclipseSource(component.getRootJava(), accessorClassName, null);
-  }
+	/**
+	 * Find existing source with same accessor or create new one.
+	 */
+	private static EclipseSource getNewOrExistingSource(JavaInfo component,
+			String accessorClassName,
+			List<AbstractSource> sources) throws Exception {
+		for (AbstractSource abstractSource : sources) {
+			if (abstractSource instanceof EclipseSource) {
+				EclipseSource source = (EclipseSource) abstractSource;
+				if (source.m_accessorClassName.equals(accessorClassName)) {
+					return source;
+				}
+			}
+		}
+		// create new source
+		return new EclipseSource(component.getRootJava(), accessorClassName, null);
+	}
 
-  /**
-   * Parse given expression and if it is valid Eclipse style accessor class access, extract resource
-   * bundle name, key and optional default value.
-   */
-  private static ExpressionInfo getExpressionInfo(JavaInfo component, Expression expression)
-      throws Exception {
-    if (expression instanceof MethodInvocation) {
-      // check for getString(key)
-      MethodInvocation getString_invocation = (MethodInvocation) expression;
-      int argumentCount = getString_invocation.arguments().size();
-      {
-        boolean is_getString =
-            getString_invocation.getName().getIdentifier().equals("getString")
-                && (argumentCount == 1 || argumentCount == 2)
-                && getString_invocation.arguments().get(0) instanceof StringLiteral;
-        if (!is_getString) {
-          return null;
-        }
-      }
-      // check for Messages.getString(key)
-      String accessorClassName;
-      {
-        Expression invocationExpression = getString_invocation.getExpression();
-        if (invocationExpression == null) {
-          return null;
-        }
-        accessorClassName = AstNodeUtils.getFullyQualifiedName(invocationExpression, false);
-      }
-      // check that accessor has BUNDLE_NAME field
-      {
-        String bundleName = accessor_getBundleName(component, accessorClassName);
-        if (bundleName == null) {
-          return null;
-        }
-      }
-      // all was checked, we can create expression information
-      {
-        // prepare key
-        StringLiteral keyLiteral = (StringLiteral) getString_invocation.arguments().get(0);
-        String key = keyLiteral.getLiteralValue();
-        // prepare default value
-        Expression def_argument =
-            argumentCount == 2 ? (Expression) getString_invocation.arguments().get(1) : null;
-        StringLiteral defaultLiteral =
-            def_argument instanceof StringLiteral ? (StringLiteral) def_argument : null;
-        String defaultValue = defaultLiteral != null ? defaultLiteral.getLiteralValue() : null;
-        // return information about expression
-        ExpressionInfo expressionInfo =
-            new ExpressionInfo(expression,
-                accessorClassName,
-                keyLiteral,
-                key,
-                defaultLiteral,
-                defaultValue);
-        expression.setProperty(NLS_EXPRESSION_INFO, expressionInfo);
-        return expressionInfo;
-      }
-    }
-    return null;
-  }
+	/**
+	 * Parse given expression and if it is valid Eclipse style accessor class access, extract resource
+	 * bundle name, key and optional default value.
+	 */
+	private static ExpressionInfo getExpressionInfo(JavaInfo component, Expression expression)
+			throws Exception {
+		if (expression instanceof MethodInvocation) {
+			// check for getString(key)
+			MethodInvocation getString_invocation = (MethodInvocation) expression;
+			int argumentCount = getString_invocation.arguments().size();
+			{
+				boolean is_getString =
+						getString_invocation.getName().getIdentifier().equals("getString")
+						&& (argumentCount == 1 || argumentCount == 2)
+						&& getString_invocation.arguments().get(0) instanceof StringLiteral;
+				if (!is_getString) {
+					return null;
+				}
+			}
+			// check for Messages.getString(key)
+			String accessorClassName;
+			{
+				Expression invocationExpression = getString_invocation.getExpression();
+				if (invocationExpression == null) {
+					return null;
+				}
+				accessorClassName = AstNodeUtils.getFullyQualifiedName(invocationExpression, false);
+			}
+			// check that accessor has BUNDLE_NAME field
+			{
+				String bundleName = accessor_getBundleName(component, accessorClassName);
+				if (bundleName == null) {
+					return null;
+				}
+			}
+			// all was checked, we can create expression information
+			{
+				// prepare key
+				StringLiteral keyLiteral = (StringLiteral) getString_invocation.arguments().get(0);
+				String key = keyLiteral.getLiteralValue();
+				// prepare default value
+				Expression def_argument =
+						argumentCount == 2 ? (Expression) getString_invocation.arguments().get(1) : null;
+				StringLiteral defaultLiteral =
+						def_argument instanceof StringLiteral ? (StringLiteral) def_argument : null;
+				String defaultValue = defaultLiteral != null ? defaultLiteral.getLiteralValue() : null;
+				// return information about expression
+				ExpressionInfo expressionInfo =
+						new ExpressionInfo(expression,
+								accessorClassName,
+								keyLiteral,
+								key,
+								defaultLiteral,
+								defaultValue);
+				expression.setProperty(NLS_EXPRESSION_INFO, expressionInfo);
+				return expressionInfo;
+			}
+		}
+		return null;
+	}
 
-  /**
-   * Get bundle name (value of field BUNDLE_NAME) from given accessor class.
-   */
-  private static String accessor_getBundleName(JavaInfo component, String accessorClassName)
-      throws Exception {
-    Class<?> accessorClass = loadClass(component, accessorClassName);
-    //Field bundleNameField = accessorClass.getDeclaredField("BUNDLE_NAME");
-    Field bundleNameField = ReflectionUtils.getFieldByName(accessorClass, "BUNDLE_NAME");
-    if (bundleNameField != null) {
-      String bundleName = (String) bundleNameField.get(null);
-      return bundleName.replace('/', '.');
-    }
-    return null;
-  }
+	/**
+	 * Get bundle name (value of field BUNDLE_NAME) from given accessor class.
+	 */
+	private static String accessor_getBundleName(JavaInfo component, String accessorClassName)
+			throws Exception {
+		Class<?> accessorClass = loadClass(component, accessorClassName);
+		//Field bundleNameField = accessorClass.getDeclaredField("BUNDLE_NAME");
+		Field bundleNameField = ReflectionUtils.getFieldByName(accessorClass, "BUNDLE_NAME");
+		if (bundleNameField != null) {
+			String bundleName = (String) bundleNameField.get(null);
+			return bundleName.replace('/', '.');
+		}
+		return null;
+	}
 
-  /**
-   * Check if given accessor class has "getString" with default value.
-   */
-  private static boolean accessor_withDefaultValue(JavaInfo component, String accessorClassName)
-      throws Exception {
-    Class<?> accessorClass = loadClass(component, accessorClassName);
-    return ReflectionUtils.getMethodBySignature(
-        accessorClass,
-        "getString(java.lang.String,java.lang.String)") != null;
-  }
+	/**
+	 * Check if given accessor class has "getString" with default value.
+	 */
+	private static boolean accessor_withDefaultValue(JavaInfo component, String accessorClassName)
+			throws Exception {
+		Class<?> accessorClass = loadClass(component, accessorClassName);
+		return ReflectionUtils.getMethodBySignature(
+				accessorClass,
+				"getString(java.lang.String,java.lang.String)") != null;
+	}
 
-  /**
-   * @return the {@link Class} loaded from {@link EditorState} {@link ClassLoader}.
-   */
-  private static Class<?> loadClass(JavaInfo component, String className)
-      throws ClassNotFoundException {
-    EditorState editorState = EditorState.get(component.getEditor());
-    return editorState.getEditorLoader().loadClass(className);
-  }
+	/**
+	 * @return the {@link Class} loaded from {@link EditorState} {@link ClassLoader}.
+	 */
+	private static Class<?> loadClass(JavaInfo component, String className)
+			throws ClassNotFoundException {
+		EditorState editorState = EditorState.get(component.getEditor());
+		return editorState.getEditorLoader().loadClass(className);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Expression information
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Information about expression. We store it in expression property to avoid parsing every time.
-   */
-  private static class ExpressionInfo extends BasicExpressionInfo {
-    private final String m_accessorClassName;
-    private StringLiteral m_defaultExpression;
-    private String m_defaultValue;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Expression information
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Information about expression. We store it in expression property to avoid parsing every time.
+	 */
+	private static class ExpressionInfo extends BasicExpressionInfo {
+		private final String m_accessorClassName;
+		private StringLiteral m_defaultExpression;
+		private String m_defaultValue;
 
-    public ExpressionInfo(Expression expression,
-        String accessorClassName,
-        StringLiteral keyExpression,
-        String key,
-        StringLiteral defaultExpression,
-        String defaultValue) {
-      super(expression, keyExpression, key);
-      m_accessorClassName = accessorClassName;
-      m_defaultExpression = defaultExpression;
-      m_defaultValue = defaultValue;
-    }
-  }
+		public ExpressionInfo(Expression expression,
+				String accessorClassName,
+				StringLiteral keyExpression,
+				String key,
+				StringLiteral defaultExpression,
+				String defaultValue) {
+			super(expression, keyExpression, key);
+			m_accessorClassName = accessorClassName;
+			m_defaultExpression = defaultExpression;
+			m_defaultValue = defaultValue;
+		}
+	}
 
-  /**
-   * Get expression information.
-   */
-  private ExpressionInfo getExpressionInfo(Expression expression) {
-    return (ExpressionInfo) getBasicExpressionInfo(expression);
-  }
+	/**
+	 * Get expression information.
+	 */
+	private ExpressionInfo getExpressionInfo(Expression expression) {
+		return (ExpressionInfo) getBasicExpressionInfo(expression);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance fields
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final String m_accessorClassName;
-  /**
-   * <code>true</code> if method "get(key)" has default value, i.e. "get(key, defaultValue)".
-   */
-  private final boolean m_withDefaultValue;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance fields
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final String m_accessorClassName;
+	/**
+	 * <code>true</code> if method "get(key)" has default value, i.e. "get(key, defaultValue)".
+	 */
+	private final boolean m_withDefaultValue;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public EclipseSource(JavaInfo root, String accessorClassName, String bundleName) throws Exception {
-    super(root, bundleName != null ? bundleName : accessor_getBundleName(root, accessorClassName));
-    // initialize fields
-    if (accessorClassName != null) {
-      m_accessorClassName = accessorClassName;
-      m_withDefaultValue = accessor_withDefaultValue(root, accessorClassName);
-    } else {
-      m_accessorClassName = null;
-      m_withDefaultValue = false;
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public EclipseSource(JavaInfo root, String accessorClassName, String bundleName) throws Exception {
+		super(root, bundleName != null ? bundleName : accessor_getBundleName(root, accessorClassName));
+		// initialize fields
+		if (accessorClassName != null) {
+			m_accessorClassName = accessorClassName;
+			m_withDefaultValue = accessor_withDefaultValue(root, accessorClassName);
+		} else {
+			m_accessorClassName = null;
+			m_withDefaultValue = false;
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getTypeTitle() throws Exception {
-    return "Eclipse messages class " + m_accessorClassName;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getTypeTitle() throws Exception {
+		return "Eclipse messages class " + m_accessorClassName;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Value access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getValue(Expression expression) throws Exception {
-    // prepare key and default value
-    ExpressionInfo expressionInfo = getExpressionInfo(expression);
-    String key = expressionInfo.m_key;
-    String defaultValue = expressionInfo.m_defaultValue;
-    // return value
-    String value = getValue(key);
-    return value != null ? value : defaultValue;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Value access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getValue(Expression expression) throws Exception {
+		// prepare key and default value
+		ExpressionInfo expressionInfo = getExpressionInfo(expression);
+		String key = expressionInfo.m_key;
+		String defaultValue = expressionInfo.m_defaultValue;
+		// return value
+		String value = getValue(key);
+		return value != null ? value : defaultValue;
+	}
 
-  @Override
-  public void setValue(Expression expression, String value) throws Exception {
-    ExpressionInfo expressionInfo = getExpressionInfo(expression);
-    String key = expressionInfo.m_key;
-    LocaleInfo localeInfo = getLocaleInfo();
-    // change value in bundle
-    setValueInBundle(key, value);
-    // if locale is default, change default value in source
-    if (localeInfo.isDefault() && expressionInfo.m_defaultExpression != null) {
-      String code = StringConverter.INSTANCE.toJavaSource(m_root, value);
-      StringLiteral newDefaultLiteral =
-          (StringLiteral) m_root.getEditor().replaceExpression(
-              expressionInfo.m_defaultExpression,
-              code);
-      // change expression information
-      expressionInfo.m_defaultExpression = newDefaultLiteral;
-      expressionInfo.m_defaultValue = value;
-    }
-  }
+	@Override
+	public void setValue(Expression expression, String value) throws Exception {
+		ExpressionInfo expressionInfo = getExpressionInfo(expression);
+		String key = expressionInfo.m_key;
+		LocaleInfo localeInfo = getLocaleInfo();
+		// change value in bundle
+		setValueInBundle(key, value);
+		// if locale is default, change default value in source
+		if (localeInfo.isDefault() && expressionInfo.m_defaultExpression != null) {
+			String code = StringConverter.INSTANCE.toJavaSource(m_root, value);
+			StringLiteral newDefaultLiteral =
+					(StringLiteral) m_root.getEditor().replaceExpression(
+							expressionInfo.m_defaultExpression,
+							code);
+			// change expression information
+			expressionInfo.m_defaultExpression = newDefaultLiteral;
+			expressionInfo.m_defaultValue = value;
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Edit support
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected IKeyGeneratorStrategy getKeyGeneratorStrategy() {
-    return KEY_GENERATOR;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Edit support
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected IKeyGeneratorStrategy getKeyGeneratorStrategy() {
+		return KEY_GENERATOR;
+	}
 
-  @Override
-  protected Expression apply_renameKey_replaceKeyExpression(AstEditor editor,
-      Expression keyExpression,
-      String newKey) throws Exception {
-    String newSource = StringConverter.INSTANCE.toJavaSource(m_root, newKey);
-    return editor.replaceExpression(keyExpression, newSource);
-  }
+	@Override
+	protected Expression apply_renameKey_replaceKeyExpression(AstEditor editor,
+			Expression keyExpression,
+			String newKey) throws Exception {
+		String newSource = StringConverter.INSTANCE.toJavaSource(m_root, newKey);
+		return editor.replaceExpression(keyExpression, newSource);
+	}
 
-  @Override
-  protected BasicExpressionInfo apply_externalize_replaceExpression(GenericProperty property,
-      String key) throws Exception {
-    Expression expression = property.getExpression();
-    // prepare code
-    String code;
-    {
-      code =
-          m_accessorClassName + ".getString(" + StringConverter.INSTANCE.toJavaSource(m_root, key);
-      if (m_withDefaultValue) {
-        String value = (String) property.getValue();
-        code += ", " + StringConverter.INSTANCE.toJavaSource(m_root, value);
-      }
-      code += ")";
-    }
-    // replace expression
-    ExpressionInfo expressionInfo = (ExpressionInfo) replaceExpression_getInfo(expression, code);
-    // add //$NON-NLS-xxx$ comments
-    {
-      addNonNLSComment(expressionInfo.m_keyExpression);
-      if (m_withDefaultValue) {
-        addNonNLSComment(expressionInfo.m_defaultExpression);
-      }
-    }
-    // return expression information
-    return expressionInfo;
-  }
+	@Override
+	protected BasicExpressionInfo apply_externalize_replaceExpression(GenericProperty property,
+			String key) throws Exception {
+		Expression expression = property.getExpression();
+		// prepare code
+		String code;
+		{
+			code =
+					m_accessorClassName + ".getString(" + StringConverter.INSTANCE.toJavaSource(m_root, key);
+			if (m_withDefaultValue) {
+				String value = (String) property.getValue();
+				code += ", " + StringConverter.INSTANCE.toJavaSource(m_root, value);
+			}
+			code += ")";
+		}
+		// replace expression
+		ExpressionInfo expressionInfo = (ExpressionInfo) replaceExpression_getInfo(expression, code);
+		// add //$NON-NLS-xxx$ comments
+		{
+			addNonNLSComment(expressionInfo.m_keyExpression);
+			if (m_withDefaultValue) {
+				addNonNLSComment(expressionInfo.m_defaultExpression);
+			}
+		}
+		// return expression information
+		return expressionInfo;
+	}
 
-  @Override
-  protected void apply_removeNonNLSComments(BasicExpressionInfo basicExpressionInfo)
-      throws Exception {
-    super.apply_removeNonNLSComments(basicExpressionInfo);
-    ExpressionInfo expressionInfo = (ExpressionInfo) basicExpressionInfo;
-    removeNonNLSComment((StringLiteral) expressionInfo.m_keyExpression);
-    removeNonNLSComment(expressionInfo.m_defaultExpression);
-  }
+	@Override
+	protected void apply_removeNonNLSComments(BasicExpressionInfo basicExpressionInfo)
+			throws Exception {
+		super.apply_removeNonNLSComments(basicExpressionInfo);
+		ExpressionInfo expressionInfo = (ExpressionInfo) basicExpressionInfo;
+		removeNonNLSComment((StringLiteral) expressionInfo.m_keyExpression);
+		removeNonNLSComment(expressionInfo.m_defaultExpression);
+	}
 
-  /**
-   * Create NLS source for given root and parameters.
-   */
-  public static EclipseSource apply_create(IEditableSource editable, JavaInfo root, Object o)
-      throws Exception {
-    // prepare parameters
-    SourceParameters parameters = (SourceParameters) o;
-    // check, may be accessor class file exists
-    if (!parameters.m_accessorExists) {
-      // prepare accessor class source
-      String template;
-      {
-        String templateName =
-            parameters.m_withDefaultValue ? "newAccessor_default.jvt" : "newAccessor.jvt";
-        template = IOUtils.toString(EclipseSource.class.getResourceAsStream(templateName));
-        template =
-            StringUtils.replace(template, "%PACKAGE_NAME%", parameters.m_accessorPackageName);
-        template = StringUtils.replace(template, "%CLASS_NAME%", parameters.m_accessorClassName);
-        template = StringUtils.replace(template, "%BUNDLE_NAME%", parameters.m_propertyBundleName);
-      }
-      // create accessor class file
-      {
-        IFolder accessorFolder = (IFolder) parameters.m_accessorPackage.getUnderlyingResource();
-        IFile accessorFile = accessorFolder.getFile(parameters.m_accessorClassName + ".java");
-        accessorFile.create(
-            new ByteArrayInputStream(template.getBytes()),
-            true,
-            new NullProgressMonitor());
-      }
-      // create property bundle
-      createPropertyBundleFile(parameters.m_propertyPackage, parameters.m_propertyFileName, null);
-      // wait until accessor class will be compiled
-      WorkspaceUtils.waitForClass(root.getEditor(), parameters.m_accessorFullClassName);
-    }
-    // create source
-    return new EclipseSource(root, parameters.m_accessorFullClassName, null);
-  }
+	/**
+	 * Create NLS source for given root and parameters.
+	 */
+	public static EclipseSource apply_create(IEditableSource editable, JavaInfo root, Object o)
+			throws Exception {
+		// prepare parameters
+		SourceParameters parameters = (SourceParameters) o;
+		// check, may be accessor class file exists
+		if (!parameters.m_accessorExists) {
+			// prepare accessor class source
+			String template;
+			{
+				String templateName =
+						parameters.m_withDefaultValue ? "newAccessor_default.jvt" : "newAccessor.jvt";
+				template = IOUtils.toString(EclipseSource.class.getResourceAsStream(templateName));
+				template =
+						StringUtils.replace(template, "%PACKAGE_NAME%", parameters.m_accessorPackageName);
+				template = StringUtils.replace(template, "%CLASS_NAME%", parameters.m_accessorClassName);
+				template = StringUtils.replace(template, "%BUNDLE_NAME%", parameters.m_propertyBundleName);
+			}
+			// create accessor class file
+			{
+				IFolder accessorFolder = (IFolder) parameters.m_accessorPackage.getUnderlyingResource();
+				IFile accessorFile = accessorFolder.getFile(parameters.m_accessorClassName + ".java");
+				accessorFile.create(
+						new ByteArrayInputStream(template.getBytes()),
+						true,
+						new NullProgressMonitor());
+			}
+			// create property bundle
+			createPropertyBundleFile(parameters.m_propertyPackage, parameters.m_propertyFileName, null);
+			// wait until accessor class will be compiled
+			WorkspaceUtils.waitForClass(root.getEditor(), parameters.m_accessorFullClassName);
+		}
+		// create source
+		return new EclipseSource(root, parameters.m_accessorFullClassName, null);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/bundle/eclipse/old/EclipseSourceNewComposite.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/bundle/eclipse/old/EclipseSourceNewComposite.java
index 760ba7f78..70ab94146 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/bundle/eclipse/old/EclipseSourceNewComposite.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/bundle/eclipse/old/EclipseSourceNewComposite.java
@@ -29,109 +29,109 @@
  * @coverage core.nls.ui
  */
 public final class EclipseSourceNewComposite extends AbstractAccessorSourceNewComposite {
-  private SelectionButtonDialogFieldGroup m_buttonsGroup;
+	private SelectionButtonDialogFieldGroup m_buttonsGroup;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public EclipseSourceNewComposite(Composite parent, int style, JavaInfo root) {
-    super(parent, style, root);
-    // create GUI controls
-    createAccessorGroup();
-    createPropertyGroup();
-    // initialize fields
-    {
-      initializeAccessorGroup();
-      initializePropertyGroup();
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public EclipseSourceNewComposite(Composite parent, int style, JavaInfo root) {
+		super(parent, style, root);
+		// create GUI controls
+		createAccessorGroup();
+		createPropertyGroup();
+		// initialize fields
+		{
+			initializeAccessorGroup();
+			initializePropertyGroup();
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Accessor group
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createAdditionalAccessorFields(Composite parent) {
-    m_buttonsGroup =
-        new SelectionButtonDialogFieldGroup(SWT.CHECK,
-            new String[]{Messages.EclipseSourceNewComposite_useDefaultNames},
-            3);
-    m_buttonsGroup.doFillIntoGrid(parent, 3);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Accessor group
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createAdditionalAccessorFields(Composite parent) {
+		m_buttonsGroup =
+				new SelectionButtonDialogFieldGroup(SWT.CHECK,
+						new String[]{Messages.EclipseSourceNewComposite_useDefaultNames},
+						3);
+		m_buttonsGroup.doFillIntoGrid(parent, 3);
+	}
 
-  @Override
-  protected void validateAccessorFields() {
-    super.validateAccessorFields();
-    try {
-      SourceParameters parameters = (SourceParameters) createParametersObject();
-      ClassLoader editorLoader = EditorState.get(m_editor).getEditorLoader();
-      Class<?> accessorClass = editorLoader.loadClass(parameters.m_accessorFullClassName);
-      try {
-        accessorClass.getDeclaredField("BUNDLE_NAME");
-      } catch (Throwable e) {
-        setInvalid(KEY_ACCESSOR_CLASS, Messages.EclipseSourceNewComposite_validateNoBundleNameField);
-      }
-    } catch (Throwable e) {
-    }
-  }
+	@Override
+	protected void validateAccessorFields() {
+		super.validateAccessorFields();
+		try {
+			SourceParameters parameters = (SourceParameters) createParametersObject();
+			ClassLoader editorLoader = EditorState.get(m_editor).getEditorLoader();
+			Class<?> accessorClass = editorLoader.loadClass(parameters.m_accessorFullClassName);
+			try {
+				accessorClass.getDeclaredField("BUNDLE_NAME");
+			} catch (Throwable e) {
+				setInvalid(KEY_ACCESSOR_CLASS, Messages.EclipseSourceNewComposite_validateNoBundleNameField);
+			}
+		} catch (Throwable e) {
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Display
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static String getTitle() {
-    return Messages.EclipseSourceNewComposite_title;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Display
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static String getTitle() {
+		return Messages.EclipseSourceNewComposite_title;
+	}
 
-  @Override
-  public String getSample() {
-    return "button.setText( ApplicationMessages.getString(\"some.key\", \"Optional default value\") );";
-  }
+	@Override
+	public String getSample() {
+		return "button.setText( ApplicationMessages.getString(\"some.key\", \"Optional default value\") );";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Creating
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public IEditableSource createEditableSource(Object o) {
-    SourceParameters parameters = (SourceParameters) o;
-    try {
-      // create editable source
-      IEditableSource editableSource;
-      {
-        // check, may be we already have such accessor or property file
-        if (parameters.m_accessorExists) {
-          // use existing accessor
-          EclipseSource source =
-              new EclipseSource(m_root, parameters.m_accessorFullClassName, null);
-          editableSource = source.getEditable();
-        } else if (parameters.m_propertyFileExists) {
-          // use existing property file
-          EclipseSource source = new EclipseSource(m_root, null, parameters.m_propertyBundleName);
-          editableSource = source.getEditable();
-        } else {
-          editableSource = createEmptyEditable(parameters.m_propertyBundleName);
-        }
-      }
-      // configure editable source and return
-      editableSource.setKeyGeneratorStrategy(AbstractBundleSource.KEY_GENERATOR);
-      return editableSource;
-    } catch (Throwable e) {
-      throw ReflectionUtils.propagate(e);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Creating
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public IEditableSource createEditableSource(Object o) {
+		SourceParameters parameters = (SourceParameters) o;
+		try {
+			// create editable source
+			IEditableSource editableSource;
+			{
+				// check, may be we already have such accessor or property file
+				if (parameters.m_accessorExists) {
+					// use existing accessor
+					EclipseSource source =
+							new EclipseSource(m_root, parameters.m_accessorFullClassName, null);
+					editableSource = source.getEditable();
+				} else if (parameters.m_propertyFileExists) {
+					// use existing property file
+					EclipseSource source = new EclipseSource(m_root, null, parameters.m_propertyBundleName);
+					editableSource = source.getEditable();
+				} else {
+					editableSource = createEmptyEditable(parameters.m_propertyBundleName);
+				}
+			}
+			// configure editable source and return
+			editableSource.setKeyGeneratorStrategy(AbstractBundleSource.KEY_GENERATOR);
+			return editableSource;
+		} catch (Throwable e) {
+			throw ReflectionUtils.propagate(e);
+		}
+	}
 
-  @Override
-  public Object createParametersObject() throws Exception {
-    SourceParameters parameters = new SourceParameters();
-    parameters.m_withDefaultValue = m_buttonsGroup.isSelected(0);
-    fillAccessorParameters(parameters);
-    fillPropertyParameters(parameters);
-    return parameters;
-  }
+	@Override
+	public Object createParametersObject() throws Exception {
+		SourceParameters parameters = new SourceParameters();
+		parameters.m_withDefaultValue = m_buttonsGroup.isSelected(0);
+		fillAccessorParameters(parameters);
+		fillPropertyParameters(parameters);
+		return parameters;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/bundle/eclipse/old/SourceParameters.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/bundle/eclipse/old/SourceParameters.java
index cd22efbc9..0b0810923 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/bundle/eclipse/old/SourceParameters.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/bundle/eclipse/old/SourceParameters.java
@@ -19,5 +19,5 @@
  * @coverage core.nls
  */
 public class SourceParameters extends AbstractAccessorSourceParameters {
-  public boolean m_withDefaultValue;
+	public boolean m_withDefaultValue;
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/bundle/pure/AbstractPureBundleSource.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/bundle/pure/AbstractPureBundleSource.java
index 0bf846ab8..7753ea2b2 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/bundle/pure/AbstractPureBundleSource.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/bundle/pure/AbstractPureBundleSource.java
@@ -22,35 +22,35 @@
  * @coverage core.nls
  */
 public abstract class AbstractPureBundleSource extends AbstractBundleSource {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractPureBundleSource(JavaInfo root, String bundleName) throws Exception {
-    super(root, bundleName);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractPureBundleSource(JavaInfo root, String bundleName) throws Exception {
+		super(root, bundleName);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Value access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final String getValue(Expression expression) throws Exception {
-    // prepare key
-    BasicExpressionInfo expressionInfo = getBasicExpressionInfo(expression);
-    String key = expressionInfo.m_key;
-    // return value from bundle
-    return getValue(key);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Value access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final String getValue(Expression expression) throws Exception {
+		// prepare key
+		BasicExpressionInfo expressionInfo = getBasicExpressionInfo(expression);
+		String key = expressionInfo.m_key;
+		// return value from bundle
+		return getValue(key);
+	}
 
-  @Override
-  public final void setValue(Expression expression, String value) throws Exception {
-    // prepare key
-    BasicExpressionInfo expressionInfo = getBasicExpressionInfo(expression);
-    String key = expressionInfo.m_key;
-    // change value in bundle
-    setValueInBundle(key, value);
-  }
+	@Override
+	public final void setValue(Expression expression, String value) throws Exception {
+		// prepare key
+		BasicExpressionInfo expressionInfo = getBasicExpressionInfo(expression);
+		String key = expressionInfo.m_key;
+		// change value in bundle
+		setValueInBundle(key, value);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/bundle/pure/activator/ActivatorSource.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/bundle/pure/activator/ActivatorSource.java
index 40a080607..048a0c8c5 100755
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/bundle/pure/activator/ActivatorSource.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/bundle/pure/activator/ActivatorSource.java
@@ -53,301 +53,301 @@
  * @coverage core.nls
  */
 public final class ActivatorSource extends AbstractPureBundleSource {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Possible sources
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final String BUNDLE_COMMENT = "Activator plugin ResourceBundle";
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Possible sources
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final String BUNDLE_COMMENT = "Activator plugin ResourceBundle";
 
-  @Override
-  protected String getBundleComment() {
-    return BUNDLE_COMMENT;
-  }
+	@Override
+	protected String getBundleComment() {
+		return BUNDLE_COMMENT;
+	}
 
-  /**
-   * Return "possible" sources that exist in given package.
-   *
-   * "Possible" source is source that exists in current package, but is not used in current unit. We
-   * show "possible" sources only if there are no "real" sources.
-   */
-  public static List<AbstractSource> getPossibleSources(JavaInfo root, IPackageFragment pkg)
-      throws Exception {
-    List<AbstractSource> sources = Lists.newArrayList();
-    IJavaElement[] packageElements = pkg.getChildren();
-    for (int i = 0; i < packageElements.length; i++) {
-      ICompilationUnit unit = (ICompilationUnit) packageElements[i];
-      if (unit.getElementName().endsWith("Activator.java")) {
-        IType type = unit.findPrimaryType();
-        if (type != null) {
-          // check for field pluginBundle
-          {
-            IField field_bundleName = type.getField("pluginBundle");
-            if (!field_bundleName.exists()) {
-              continue;
-            }
-          }
-          // check for method getPluginBundle()
-          {
-            IMethod method_getString_0 = CodeUtils.findMethodSingleType(type, "getPluginBundle()");
-            if (method_getString_0 == null) {
-              continue;
-            }
-            if (!method_getString_0.getReturnType().equals("QResourceBundle;")) {
-              continue;
-            }
-          }
-          // OK, this is probably correct source
-          try {
-            //AbstractSource source = new DirectSource(root, pkg.getElementName()+".plugin");
-            AbstractSource source = new ActivatorSource(root, "plugin");
-            sources.add(source);
-          } catch (Exception e) {
-            DesignerPlugin.log(e);
-          }
-        }
-      }
-    }
-    return sources;
-  }
+	/**
+	 * Return "possible" sources that exist in given package.
+	 *
+	 * "Possible" source is source that exists in current package, but is not used in current unit. We
+	 * show "possible" sources only if there are no "real" sources.
+	 */
+	public static List<AbstractSource> getPossibleSources(JavaInfo root, IPackageFragment pkg)
+			throws Exception {
+		List<AbstractSource> sources = Lists.newArrayList();
+		IJavaElement[] packageElements = pkg.getChildren();
+		for (int i = 0; i < packageElements.length; i++) {
+			ICompilationUnit unit = (ICompilationUnit) packageElements[i];
+			if (unit.getElementName().endsWith("Activator.java")) {
+				IType type = unit.findPrimaryType();
+				if (type != null) {
+					// check for field pluginBundle
+					{
+						IField field_bundleName = type.getField("pluginBundle");
+						if (!field_bundleName.exists()) {
+							continue;
+						}
+					}
+					// check for method getPluginBundle()
+					{
+						IMethod method_getString_0 = CodeUtils.findMethodSingleType(type, "getPluginBundle()");
+						if (method_getString_0 == null) {
+							continue;
+						}
+						if (!method_getString_0.getReturnType().equals("QResourceBundle;")) {
+							continue;
+						}
+					}
+					// OK, this is probably correct source
+					try {
+						//AbstractSource source = new DirectSource(root, pkg.getElementName()+".plugin");
+						AbstractSource source = new ActivatorSource(root, "plugin");
+						sources.add(source);
+					} catch (Exception e) {
+						DesignerPlugin.log(e);
+					}
+				}
+			}
+		}
+		return sources;
+	}
 
-  @Override
-  public void attachPossible() throws Exception {
-    addField(m_root, m_bundleName);
-  }
+	@Override
+	public void attachPossible() throws Exception {
+		addField(m_root, m_bundleName);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Creation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Parse given expression and return NLSSource for it (new or existing from list).
-   */
-  public static AbstractSource get(JavaInfo component,
-      GenericProperty property,
-      Expression expression,
-      List<AbstractSource> sources) throws Exception {
-    ExpressionInfo expressionInfo = getExpressionInfo(expression);
-    if (expressionInfo != null) {
-      String bundleName = expressionInfo.m_bundleName;
-      ActivatorSource source = getNewOrExistingSource(component, bundleName, sources);
-      if (source == null) {
-        return null;
-      }
-      source.onKeyAdd(component, expressionInfo.m_key);
-      return source;
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Creation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Parse given expression and return NLSSource for it (new or existing from list).
+	 */
+	public static AbstractSource get(JavaInfo component,
+			GenericProperty property,
+			Expression expression,
+			List<AbstractSource> sources) throws Exception {
+		ExpressionInfo expressionInfo = getExpressionInfo(expression);
+		if (expressionInfo != null) {
+			String bundleName = expressionInfo.m_bundleName;
+			ActivatorSource source = getNewOrExistingSource(component, bundleName, sources);
+			if (source == null) {
+				return null;
+			}
+			source.onKeyAdd(component, expressionInfo.m_key);
+			return source;
+		}
+		return null;
+	}
 
-  /**
-   * Find existing source with same bundle name or create new one.
-   */
-  private static ActivatorSource getNewOrExistingSource(JavaInfo component,
-      String bundleName,
-      List<AbstractSource> sources) throws Exception {
-    for (AbstractSource abstractSource : sources) {
-      if (abstractSource instanceof ActivatorSource) {
-        ActivatorSource source = (ActivatorSource) abstractSource;
-        if (source.m_bundleName.equals(bundleName)) {
-          return source;
-        }
-      }
-    }
-    ActivatorSource result = null;
-    try {
-      result = new ActivatorSource(component.getRootJava(), bundleName);
-    } catch (Exception e) {
-      e.printStackTrace();
-    }
-    return result;
-  }
+	/**
+	 * Find existing source with same bundle name or create new one.
+	 */
+	private static ActivatorSource getNewOrExistingSource(JavaInfo component,
+			String bundleName,
+			List<AbstractSource> sources) throws Exception {
+		for (AbstractSource abstractSource : sources) {
+			if (abstractSource instanceof ActivatorSource) {
+				ActivatorSource source = (ActivatorSource) abstractSource;
+				if (source.m_bundleName.equals(bundleName)) {
+					return source;
+				}
+			}
+		}
+		ActivatorSource result = null;
+		try {
+			result = new ActivatorSource(component.getRootJava(), bundleName);
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		return result;
+	}
 
-  /**
-   * Parse given expression and if it is valid Eclipse style messages class access, extract resource
-   * bundle name, key and optional default value.
-   *
-   * @param abstractSource
-   */
-  private static ExpressionInfo getExpressionInfo(Expression expression) {
-    if (expression instanceof MethodInvocation) {
-      // the invocation is Activator.getPluginBundle().getString("a.b.c")
-      // the default plugin name is 'plugin'
-      String pluginName = "plugin";
-      MethodInvocation getLocalString_invocation = (MethodInvocation) expression;
-      MethodInvocation possible_Activator = null;
-      String activator_bundleName = null;
-      // check for Activator
-      {
-        possible_Activator = (MethodInvocation) getLocalString_invocation.getExpression();
-        Expression possible_Activator_invokation = possible_Activator.getExpression();
-        if (!(possible_Activator_invokation instanceof Expression)) {
-          return null;
-        }
-        String activator_Name =
-            ((SimpleName) possible_Activator_invokation).getFullyQualifiedName();
-        boolean is_Activator = activator_Name.endsWith("Activator");
-        if (!is_Activator) {
-          return null;
-        }
-        if (activator_Name.length() > "Activator".length()) {
-          int pos = activator_Name.length() - "Activator".length();
-          pluginName = activator_Name.substring(0, pos).toLowerCase();
-        }
-        ITypeBinding type = possible_Activator_invokation.resolveTypeBinding();
-        IPackageBinding pkg = type.getPackage();
-        activator_bundleName = pkg.getName();
-      }
-      // check for method getPluginBundle
-      {
-        boolean is_getPluginBundle =
-            possible_Activator.getName().getIdentifier().equals("getPluginBundle");
-        if (!is_getPluginBundle) {
-          return null;
-        }
-      }
-      // check for getString(key)
-      {
-        boolean is_getString =
-            getLocalString_invocation.getName().getIdentifier().equals("getString")
-                && getLocalString_invocation.arguments().size() == 1
-                && getLocalString_invocation.arguments().get(0) instanceof StringLiteral;
-        if (!is_getString) {
-          return null;
-        }
-      }
-      // check that getPluginBundle() returns a ResourceBundle
-      {
-        String varexp = AstNodeUtils.getFullyQualifiedName(possible_Activator, false);
-        if (varexp == null || !varexp.equals("java.util.ResourceBundle")) {
-          return null;
-        }
-      }
-      // all was checked, we can create expression information
-      try {
-        // prepare key
-        StringLiteral nlsStringLiteral =
-            (StringLiteral) getLocalString_invocation.arguments().get(0);
-        String nlsString = nlsStringLiteral.getLiteralValue();
-        // return information about expression
-        ExpressionInfo expressionInfo = new ExpressionInfo(expression,
-            activator_bundleName,
-            pluginName,
-            nlsStringLiteral,
-            nlsString);
-        expression.setProperty(NLS_EXPRESSION_INFO, expressionInfo);
-        return expressionInfo;
-      } catch (Exception e) {
-        e.printStackTrace();
-      }
-    }
-    return null;
-  }
+	/**
+	 * Parse given expression and if it is valid Eclipse style messages class access, extract resource
+	 * bundle name, key and optional default value.
+	 *
+	 * @param abstractSource
+	 */
+	private static ExpressionInfo getExpressionInfo(Expression expression) {
+		if (expression instanceof MethodInvocation) {
+			// the invocation is Activator.getPluginBundle().getString("a.b.c")
+			// the default plugin name is 'plugin'
+			String pluginName = "plugin";
+			MethodInvocation getLocalString_invocation = (MethodInvocation) expression;
+			MethodInvocation possible_Activator = null;
+			String activator_bundleName = null;
+			// check for Activator
+			{
+				possible_Activator = (MethodInvocation) getLocalString_invocation.getExpression();
+				Expression possible_Activator_invokation = possible_Activator.getExpression();
+				if (!(possible_Activator_invokation instanceof Expression)) {
+					return null;
+				}
+				String activator_Name =
+						((SimpleName) possible_Activator_invokation).getFullyQualifiedName();
+				boolean is_Activator = activator_Name.endsWith("Activator");
+				if (!is_Activator) {
+					return null;
+				}
+				if (activator_Name.length() > "Activator".length()) {
+					int pos = activator_Name.length() - "Activator".length();
+					pluginName = activator_Name.substring(0, pos).toLowerCase();
+				}
+				ITypeBinding type = possible_Activator_invokation.resolveTypeBinding();
+				IPackageBinding pkg = type.getPackage();
+				activator_bundleName = pkg.getName();
+			}
+			// check for method getPluginBundle
+			{
+				boolean is_getPluginBundle =
+						possible_Activator.getName().getIdentifier().equals("getPluginBundle");
+				if (!is_getPluginBundle) {
+					return null;
+				}
+			}
+			// check for getString(key)
+			{
+				boolean is_getString =
+						getLocalString_invocation.getName().getIdentifier().equals("getString")
+						&& getLocalString_invocation.arguments().size() == 1
+						&& getLocalString_invocation.arguments().get(0) instanceof StringLiteral;
+				if (!is_getString) {
+					return null;
+				}
+			}
+			// check that getPluginBundle() returns a ResourceBundle
+			{
+				String varexp = AstNodeUtils.getFullyQualifiedName(possible_Activator, false);
+				if (varexp == null || !varexp.equals("java.util.ResourceBundle")) {
+					return null;
+				}
+			}
+			// all was checked, we can create expression information
+			try {
+				// prepare key
+				StringLiteral nlsStringLiteral =
+						(StringLiteral) getLocalString_invocation.arguments().get(0);
+				String nlsString = nlsStringLiteral.getLiteralValue();
+				// return information about expression
+				ExpressionInfo expressionInfo = new ExpressionInfo(expression,
+						activator_bundleName,
+						pluginName,
+						nlsStringLiteral,
+						nlsString);
+				expression.setProperty(NLS_EXPRESSION_INFO, expressionInfo);
+				return expressionInfo;
+			} catch (Exception e) {
+				e.printStackTrace();
+			}
+		}
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Expression information
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Information about expression. We store it in expression property to avoid parsing every time.
-   */
-  protected static class ExpressionInfo extends BasicExpressionInfo {
-    private final String m_bundleName;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Expression information
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Information about expression. We store it in expression property to avoid parsing every time.
+	 */
+	protected static class ExpressionInfo extends BasicExpressionInfo {
+		private final String m_bundleName;
 
-    public ExpressionInfo(Expression expression,
-        String packageName,
-        String pluginName,
-        StringLiteral keyExpression,
-        String key) {
-      super(expression, keyExpression, key);
-      m_bundleName = pluginName;
-    }
-  }
+		public ExpressionInfo(Expression expression,
+				String packageName,
+				String pluginName,
+				StringLiteral keyExpression,
+				String key) {
+			super(expression, keyExpression, key);
+			m_bundleName = pluginName;
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ActivatorSource(JavaInfo root, String bundleName) throws Exception {
-    super(root, bundleName);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ActivatorSource(JavaInfo root, String bundleName) throws Exception {
+		super(root, bundleName);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getTypeTitle() throws Exception {
-    return "Activator Plugin usage";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getTypeTitle() throws Exception {
+		return "Activator Plugin usage";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Edit support
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected IKeyGeneratorStrategy getKeyGeneratorStrategy() {
-    return KEY_GENERATOR;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Edit support
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected IKeyGeneratorStrategy getKeyGeneratorStrategy() {
+		return KEY_GENERATOR;
+	}
 
-  @Override
-  protected Expression apply_renameKey_replaceKeyExpression(AstEditor editor,
-      Expression keyExpression,
-      String newKey) throws Exception {
-    String newSource = StringConverter.INSTANCE.toJavaSource(m_root, newKey);
-    return editor.replaceExpression(keyExpression, newSource);
-  }
+	@Override
+	protected Expression apply_renameKey_replaceKeyExpression(AstEditor editor,
+			Expression keyExpression,
+			String newKey) throws Exception {
+		String newSource = StringConverter.INSTANCE.toJavaSource(m_root, newKey);
+		return editor.replaceExpression(keyExpression, newSource);
+	}
 
-  @Override
-  protected BasicExpressionInfo apply_externalize_replaceExpression(GenericProperty property,
-      String key) throws Exception {
-    // prepare code
-    String code = "Activator.getPluginBundle().getString("
-        + StringConverter.INSTANCE.toJavaSource(m_root, key)
-        + ")";
-    // replace expression
-    Expression expression = property.getExpression();
-    ExpressionInfo expressionInfo = (ExpressionInfo) replaceExpression_getInfo(expression, code);
-    // add //$NON-NLS-xxx$ comments
-    {
-      addNonNLSComment(expressionInfo.m_keyExpression);
-    }
-    // return expression information
-    return expressionInfo;
-  }
+	@Override
+	protected BasicExpressionInfo apply_externalize_replaceExpression(GenericProperty property,
+			String key) throws Exception {
+		// prepare code
+		String code = "Activator.getPluginBundle().getString("
+				+ StringConverter.INSTANCE.toJavaSource(m_root, key)
+				+ ")";
+		// replace expression
+		Expression expression = property.getExpression();
+		ExpressionInfo expressionInfo = (ExpressionInfo) replaceExpression_getInfo(expression, code);
+		// add //$NON-NLS-xxx$ comments
+		{
+			addNonNLSComment(expressionInfo.m_keyExpression);
+		}
+		// return expression information
+		return expressionInfo;
+	}
 
-  @Override
-  protected void apply_removeNonNLSComments(BasicExpressionInfo basicExpressionInfo)
-      throws Exception {
-    ExpressionInfo expressionInfo = (ExpressionInfo) basicExpressionInfo;
-    removeNonNLSComment((StringLiteral) expressionInfo.m_keyExpression);
-  }
+	@Override
+	protected void apply_removeNonNLSComments(BasicExpressionInfo basicExpressionInfo)
+			throws Exception {
+		ExpressionInfo expressionInfo = (ExpressionInfo) basicExpressionInfo;
+		removeNonNLSComment((StringLiteral) expressionInfo.m_keyExpression);
+	}
 
-  public static ActivatorSource apply_create(IEditableSource editable, JavaInfo root, Object o)
-      throws Exception {
-    // prepare parameters
-    SourceParameters parameters = (SourceParameters) o;
-    // create property bundle
-    createPropertyBundleFile(parameters.m_propertyPackage, parameters.m_propertyFileName, null);
-    // create source
-    return new ActivatorSource(root, parameters.m_propertyBundleName);
-  }
+	public static ActivatorSource apply_create(IEditableSource editable, JavaInfo root, Object o)
+			throws Exception {
+		// prepare parameters
+		SourceParameters parameters = (SourceParameters) o;
+		// create property bundle
+		createPropertyBundleFile(parameters.m_propertyPackage, parameters.m_propertyFileName, null);
+		// create source
+		return new ActivatorSource(root, parameters.m_propertyBundleName);
+	}
 
-  /**
-   * Add field with ResourceBundle definition.
-   */
-  private static void addField(JavaInfo root, String bundleName) throws Exception {
-    // prepare code
-    String code = "import " + StringConverter.INSTANCE.toJavaSource(root, bundleName);
-    // add field
-    TypeDeclaration typeDeclaration = JavaInfoUtils.getTypeDeclaration(root);
-    root.getEditor().addInterfaceMethodDeclaration(
-        code,
-        new BodyDeclarationTarget(typeDeclaration, true));
-  }
+	/**
+	 * Add field with ResourceBundle definition.
+	 */
+	private static void addField(JavaInfo root, String bundleName) throws Exception {
+		// prepare code
+		String code = "import " + StringConverter.INSTANCE.toJavaSource(root, bundleName);
+		// add field
+		TypeDeclaration typeDeclaration = JavaInfoUtils.getTypeDeclaration(root);
+		root.getEditor().addInterfaceMethodDeclaration(
+				code,
+				new BodyDeclarationTarget(typeDeclaration, true));
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/bundle/pure/activator/ActivatorSourceNewComposite.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/bundle/pure/activator/ActivatorSourceNewComposite.java
index ac2f316cd..eb77f4496 100755
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/bundle/pure/activator/ActivatorSourceNewComposite.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/bundle/pure/activator/ActivatorSourceNewComposite.java
@@ -27,73 +27,73 @@
  * @coverage core.nls.ui
  */
 public final class ActivatorSourceNewComposite extends AbstractBundleSourceNewComposite {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ActivatorSourceNewComposite(Composite parent, int style, JavaInfo root) {
-    super(parent, style, root);
-    // create GUI controls
-    createPropertyGroup();
-    // initialize fields
-    initializePropertyGroupActivator();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ActivatorSourceNewComposite(Composite parent, int style, JavaInfo root) {
+		super(parent, style, root);
+		// create GUI controls
+		createPropertyGroup();
+		// initialize fields
+		initializePropertyGroupActivator();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Display
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static String getTitle() {
-    return Messages.ActivatorSourceNewComposite_title;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Display
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static String getTitle() {
+		return Messages.ActivatorSourceNewComposite_title;
+	}
 
-  @Override
-  public String getSample() {
-    return "button.setText( Activator.getPluginBundle().getString(\"some.key\") );\r\n"
-        + "\r\n"
-        + "public class Activator { // extends AbstractUIPlugin \r\n"
-        + "   private static ResourceBundle pluginBundle = ResourceBundle.getBundle(\"plugin\");\r\n"
-        + "   public static ResourceBundle getPluginBundle() {\r\n"
-        + "      return pluginBundle;\r\n"
-        + "   }\r\n"
-        + "}";
-  }
+	@Override
+	public String getSample() {
+		return "button.setText( Activator.getPluginBundle().getString(\"some.key\") );\r\n"
+				+ "\r\n"
+				+ "public class Activator { // extends AbstractUIPlugin \r\n"
+				+ "   private static ResourceBundle pluginBundle = ResourceBundle.getBundle(\"plugin\");\r\n"
+				+ "   public static ResourceBundle getPluginBundle() {\r\n"
+				+ "      return pluginBundle;\r\n"
+				+ "   }\r\n"
+				+ "}";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Creating
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public IEditableSource createEditableSource(Object o) {
-    SourceParameters parameters = (SourceParameters) o;
-    try {
-      // create editable source
-      IEditableSource editableSource;
-      {
-        // check, may be we already have such property file
-        if (parameters.m_propertyFileExists) {
-          // use existing property file
-          ActivatorSource source = new ActivatorSource(m_root, parameters.m_propertyBundleName);
-          editableSource = source.getEditable();
-        } else {
-          editableSource = createEmptyEditable(parameters.m_propertyBundleName);
-        }
-      }
-      // configure editable source and return
-      editableSource.setKeyGeneratorStrategy(AbstractBundleSource.KEY_GENERATOR);
-      return editableSource;
-    } catch (Exception e) {
-      throw ReflectionUtils.propagate(e);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Creating
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public IEditableSource createEditableSource(Object o) {
+		SourceParameters parameters = (SourceParameters) o;
+		try {
+			// create editable source
+			IEditableSource editableSource;
+			{
+				// check, may be we already have such property file
+				if (parameters.m_propertyFileExists) {
+					// use existing property file
+					ActivatorSource source = new ActivatorSource(m_root, parameters.m_propertyBundleName);
+					editableSource = source.getEditable();
+				} else {
+					editableSource = createEmptyEditable(parameters.m_propertyBundleName);
+				}
+			}
+			// configure editable source and return
+			editableSource.setKeyGeneratorStrategy(AbstractBundleSource.KEY_GENERATOR);
+			return editableSource;
+		} catch (Exception e) {
+			throw ReflectionUtils.propagate(e);
+		}
+	}
 
-  @Override
-  public Object createParametersObject() throws Exception {
-    SourceParameters parameters = new SourceParameters();
-    fillPropertyParameters(parameters);
-    return parameters;
-  }
+	@Override
+	public Object createParametersObject() throws Exception {
+		SourceParameters parameters = new SourceParameters();
+		fillPropertyParameters(parameters);
+		return parameters;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/bundle/pure/activator/SourceParameters.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/bundle/pure/activator/SourceParameters.java
index 4192c4b71..9e50d0d5c 100755
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/bundle/pure/activator/SourceParameters.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/bundle/pure/activator/SourceParameters.java
@@ -18,5 +18,5 @@
  *
  */
 public class SourceParameters extends AbstractBundleSourceParameters {
-  // inherit default implementation
+	// inherit default implementation
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/bundle/pure/direct/DirectSource.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/bundle/pure/direct/DirectSource.java
index c55afd7ca..7cfdaad67 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/bundle/pure/direct/DirectSource.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/bundle/pure/direct/DirectSource.java
@@ -45,260 +45,260 @@
  * @coverage core.nls
  */
 public final class DirectSource extends AbstractPureBundleSource {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Possible sources
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final String BUNDLE_COMMENT = "Direct ResourceBundle";
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Possible sources
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final String BUNDLE_COMMENT = "Direct ResourceBundle";
 
-  @Override
-  protected String getBundleComment() {
-    return BUNDLE_COMMENT;
-  }
+	@Override
+	protected String getBundleComment() {
+		return BUNDLE_COMMENT;
+	}
 
-  /**
-   * Return "possible" sources that exist in given package.
-   *
-   * "Possible" source is source that exists in current package, but is not used in current unit. We
-   * show "possible" sources only if there are no "real" sources.
-   */
-  public static List<AbstractSource> getPossibleSources(JavaInfo root, IPackageFragment pkg)
-      throws Exception {
-    List<AbstractSource> sources = Lists.newArrayList();
-    //
-    Object[] nonJavaResources = pkg.getNonJavaResources();
-    for (int i = 0; i < nonJavaResources.length; i++) {
-      Object o = nonJavaResources[i];
-      if (o instanceof IFile) {
-        IFile file = (IFile) o;
-        String fileName = file.getName();
-        // we need .properties files
-        if (!fileName.endsWith(".properties")) {
-          continue;
-        }
-        // we need only main (default) bundles
-        if (fileName.indexOf('_') != -1) {
-          continue;
-        }
-        // check first line for required comment
-        InputStream is = file.getContents(true);
-        String firstLine = IOUtils2.readFirstLine(is);
-        if (firstLine == null || !firstLine.startsWith("#" + BUNDLE_COMMENT)) {
-          continue;
-        }
-        // OK, this is probably correct source
-        try {
-          String bundleName =
-              pkg.getElementName()
-                  + "."
-                  + StringUtils.substring(fileName, 0, -".properties".length());
-          AbstractSource source = new DirectSource(root, bundleName);
-          sources.add(source);
-        } catch (Throwable e) {
-          DesignerPlugin.log(e);
-        }
-      }
-    }
-    //
-    return sources;
-  }
+	/**
+	 * Return "possible" sources that exist in given package.
+	 *
+	 * "Possible" source is source that exists in current package, but is not used in current unit. We
+	 * show "possible" sources only if there are no "real" sources.
+	 */
+	public static List<AbstractSource> getPossibleSources(JavaInfo root, IPackageFragment pkg)
+			throws Exception {
+		List<AbstractSource> sources = Lists.newArrayList();
+		//
+		Object[] nonJavaResources = pkg.getNonJavaResources();
+		for (int i = 0; i < nonJavaResources.length; i++) {
+			Object o = nonJavaResources[i];
+			if (o instanceof IFile) {
+				IFile file = (IFile) o;
+				String fileName = file.getName();
+				// we need .properties files
+				if (!fileName.endsWith(".properties")) {
+					continue;
+				}
+				// we need only main (default) bundles
+				if (fileName.indexOf('_') != -1) {
+					continue;
+				}
+				// check first line for required comment
+				InputStream is = file.getContents(true);
+				String firstLine = IOUtils2.readFirstLine(is);
+				if (firstLine == null || !firstLine.startsWith("#" + BUNDLE_COMMENT)) {
+					continue;
+				}
+				// OK, this is probably correct source
+				try {
+					String bundleName =
+							pkg.getElementName()
+							+ "."
+							+ StringUtils.substring(fileName, 0, -".properties".length());
+					AbstractSource source = new DirectSource(root, bundleName);
+					sources.add(source);
+				} catch (Throwable e) {
+					DesignerPlugin.log(e);
+				}
+			}
+		}
+		//
+		return sources;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Creation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Parse given expression and return NLSSource for it (new or existing from list).
-   */
-  public static AbstractSource get(JavaInfo component,
-      GenericProperty property,
-      Expression expression,
-      List<AbstractSource> sources) throws Exception {
-    ExpressionInfo expressionInfo = getExpressionInfo(component, expression);
-    if (expressionInfo != null) {
-      String bundleName = expressionInfo.m_bundleName;
-      DirectSource source = getNewOrExistingSource(component, bundleName, sources);
-      source.onKeyAdd(component, expressionInfo.m_key);
-      return source;
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Creation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Parse given expression and return NLSSource for it (new or existing from list).
+	 */
+	public static AbstractSource get(JavaInfo component,
+			GenericProperty property,
+			Expression expression,
+			List<AbstractSource> sources) throws Exception {
+		ExpressionInfo expressionInfo = getExpressionInfo(component, expression);
+		if (expressionInfo != null) {
+			String bundleName = expressionInfo.m_bundleName;
+			DirectSource source = getNewOrExistingSource(component, bundleName, sources);
+			source.onKeyAdd(component, expressionInfo.m_key);
+			return source;
+		}
+		return null;
+	}
 
-  /**
-   * Find existing source with same bundle name or create new one.
-   */
-  private static DirectSource getNewOrExistingSource(JavaInfo component,
-      String bundleName,
-      List<AbstractSource> sources) throws Exception {
-    for (AbstractSource abstractSource : sources) {
-      if (abstractSource instanceof DirectSource) {
-        DirectSource source = (DirectSource) abstractSource;
-        if (source.m_bundleName.equals(bundleName)) {
-          return source;
-        }
-      }
-    }
-    return new DirectSource(component.getRootJava(), bundleName);
-  }
+	/**
+	 * Find existing source with same bundle name or create new one.
+	 */
+	private static DirectSource getNewOrExistingSource(JavaInfo component,
+			String bundleName,
+			List<AbstractSource> sources) throws Exception {
+		for (AbstractSource abstractSource : sources) {
+			if (abstractSource instanceof DirectSource) {
+				DirectSource source = (DirectSource) abstractSource;
+				if (source.m_bundleName.equals(bundleName)) {
+					return source;
+				}
+			}
+		}
+		return new DirectSource(component.getRootJava(), bundleName);
+	}
 
-  /**
-   * Parse given expression and if it is valid Eclipse style messages class access, extract resource
-   * bundle name, key and optional default value.
-   */
-  private static ExpressionInfo getExpressionInfo(JavaInfo component, Expression expression) {
-    if (expression instanceof MethodInvocation) {
-      // check for getString(key)
-      MethodInvocation getString_invocation = (MethodInvocation) expression;
-      {
-        boolean is_getString =
-            getString_invocation.getName().getIdentifier().equals("getString")
-                && getString_invocation.arguments().size() == 1
-                && getString_invocation.arguments().get(0) instanceof StringLiteral;
-        if (!is_getString) {
-          return null;
-        }
-      }
-      // check for getBundle(bundleName)
-      MethodInvocation getBundle_invocation;
-      {
-        if (!(getString_invocation.getExpression() instanceof MethodInvocation)) {
-          return null;
-        }
-        getBundle_invocation = (MethodInvocation) getString_invocation.getExpression();
-        //
-        boolean is_getBundle =
-            getBundle_invocation.getName().getIdentifier().equals("getBundle")
-                && getBundle_invocation.arguments().size() == 1
-                && getBundle_invocation.arguments().get(0) instanceof StringLiteral;
-        if (!is_getBundle) {
-          return null;
-        }
-      }
-      // check that getBundle_invocation.getExpression() is reference on type ResourceBundle
-      {
-        Expression possible_ResourceBundle = getBundle_invocation.getExpression();
-        String typeName = AstNodeUtils.getFullyQualifiedName(possible_ResourceBundle, false);
-        if (!typeName.equals("java.util.ResourceBundle")) {
-          return null;
-        }
-      }
-      // all was checked, we can create expression information
-      {
-        // prepare bundle name
-        StringLiteral bundleNameLiteral = (StringLiteral) getBundle_invocation.arguments().get(0);
-        String bundleName = bundleNameLiteral.getLiteralValue();
-        // prepare key
-        StringLiteral keyLiteral = (StringLiteral) getString_invocation.arguments().get(0);
-        String key = keyLiteral.getLiteralValue();
-        // return information about expression
-        ExpressionInfo expressionInfo =
-            new ExpressionInfo(expression, bundleNameLiteral, bundleName, keyLiteral, key);
-        expression.setProperty(NLS_EXPRESSION_INFO, expressionInfo);
-        return expressionInfo;
-      }
-    }
-    return null;
-  }
+	/**
+	 * Parse given expression and if it is valid Eclipse style messages class access, extract resource
+	 * bundle name, key and optional default value.
+	 */
+	private static ExpressionInfo getExpressionInfo(JavaInfo component, Expression expression) {
+		if (expression instanceof MethodInvocation) {
+			// check for getString(key)
+			MethodInvocation getString_invocation = (MethodInvocation) expression;
+			{
+				boolean is_getString =
+						getString_invocation.getName().getIdentifier().equals("getString")
+						&& getString_invocation.arguments().size() == 1
+						&& getString_invocation.arguments().get(0) instanceof StringLiteral;
+				if (!is_getString) {
+					return null;
+				}
+			}
+			// check for getBundle(bundleName)
+			MethodInvocation getBundle_invocation;
+			{
+				if (!(getString_invocation.getExpression() instanceof MethodInvocation)) {
+					return null;
+				}
+				getBundle_invocation = (MethodInvocation) getString_invocation.getExpression();
+				//
+				boolean is_getBundle =
+						getBundle_invocation.getName().getIdentifier().equals("getBundle")
+						&& getBundle_invocation.arguments().size() == 1
+						&& getBundle_invocation.arguments().get(0) instanceof StringLiteral;
+				if (!is_getBundle) {
+					return null;
+				}
+			}
+			// check that getBundle_invocation.getExpression() is reference on type ResourceBundle
+			{
+				Expression possible_ResourceBundle = getBundle_invocation.getExpression();
+				String typeName = AstNodeUtils.getFullyQualifiedName(possible_ResourceBundle, false);
+				if (!typeName.equals("java.util.ResourceBundle")) {
+					return null;
+				}
+			}
+			// all was checked, we can create expression information
+			{
+				// prepare bundle name
+				StringLiteral bundleNameLiteral = (StringLiteral) getBundle_invocation.arguments().get(0);
+				String bundleName = bundleNameLiteral.getLiteralValue();
+				// prepare key
+				StringLiteral keyLiteral = (StringLiteral) getString_invocation.arguments().get(0);
+				String key = keyLiteral.getLiteralValue();
+				// return information about expression
+				ExpressionInfo expressionInfo =
+						new ExpressionInfo(expression, bundleNameLiteral, bundleName, keyLiteral, key);
+				expression.setProperty(NLS_EXPRESSION_INFO, expressionInfo);
+				return expressionInfo;
+			}
+		}
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Expression information
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Information about expression. We store it in expression property to avoid parsing every time.
-   */
-  protected static class ExpressionInfo extends BasicExpressionInfo {
-    private final StringLiteral m_bundleNameExpression;
-    private final String m_bundleName;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Expression information
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Information about expression. We store it in expression property to avoid parsing every time.
+	 */
+	protected static class ExpressionInfo extends BasicExpressionInfo {
+		private final StringLiteral m_bundleNameExpression;
+		private final String m_bundleName;
 
-    public ExpressionInfo(Expression expression,
-        StringLiteral bundleNameExpression,
-        String bundleName,
-        StringLiteral keyExpression,
-        String key) {
-      super(expression, keyExpression, key);
-      m_bundleNameExpression = bundleNameExpression;
-      m_bundleName = bundleName;
-    }
-  }
+		public ExpressionInfo(Expression expression,
+				StringLiteral bundleNameExpression,
+				String bundleName,
+				StringLiteral keyExpression,
+				String key) {
+			super(expression, keyExpression, key);
+			m_bundleNameExpression = bundleNameExpression;
+			m_bundleName = bundleName;
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DirectSource(JavaInfo root, String bundleName) throws Exception {
-    super(root, bundleName);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DirectSource(JavaInfo root, String bundleName) throws Exception {
+		super(root, bundleName);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getTypeTitle() throws Exception {
-    return "Direct ResourceBundle usage";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getTypeTitle() throws Exception {
+		return "Direct ResourceBundle usage";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Edit support
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected IKeyGeneratorStrategy getKeyGeneratorStrategy() {
-    return KEY_GENERATOR;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Edit support
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected IKeyGeneratorStrategy getKeyGeneratorStrategy() {
+		return KEY_GENERATOR;
+	}
 
-  @Override
-  protected Expression apply_renameKey_replaceKeyExpression(AstEditor editor,
-      Expression keyExpression,
-      String newKey) throws Exception {
-    String newSource = StringConverter.INSTANCE.toJavaSource(m_root, newKey);
-    return editor.replaceExpression(keyExpression, newSource);
-  }
+	@Override
+	protected Expression apply_renameKey_replaceKeyExpression(AstEditor editor,
+			Expression keyExpression,
+			String newKey) throws Exception {
+		String newSource = StringConverter.INSTANCE.toJavaSource(m_root, newKey);
+		return editor.replaceExpression(keyExpression, newSource);
+	}
 
-  @Override
-  protected BasicExpressionInfo apply_externalize_replaceExpression(GenericProperty property,
-      String key) throws Exception {
-    // prepare code
-    String code =
-        "java.util.ResourceBundle.getBundle("
-            + StringConverter.INSTANCE.toJavaSource(m_root, m_bundleName)
-            + ").getString("
-            + StringConverter.INSTANCE.toJavaSource(m_root, key)
-            + ")";
-    // replace expression
-    Expression expression = property.getExpression();
-    ExpressionInfo expressionInfo = (ExpressionInfo) replaceExpression_getInfo(expression, code);
-    // add //$NON-NLS-xxx$ comments
-    {
-      addNonNLSComment(expressionInfo.m_bundleNameExpression);
-      addNonNLSComment(expressionInfo.m_keyExpression);
-    }
-    // return expression information
-    return expressionInfo;
-  }
+	@Override
+	protected BasicExpressionInfo apply_externalize_replaceExpression(GenericProperty property,
+			String key) throws Exception {
+		// prepare code
+		String code =
+				"java.util.ResourceBundle.getBundle("
+						+ StringConverter.INSTANCE.toJavaSource(m_root, m_bundleName)
+						+ ").getString("
+						+ StringConverter.INSTANCE.toJavaSource(m_root, key)
+						+ ")";
+		// replace expression
+		Expression expression = property.getExpression();
+		ExpressionInfo expressionInfo = (ExpressionInfo) replaceExpression_getInfo(expression, code);
+		// add //$NON-NLS-xxx$ comments
+		{
+			addNonNLSComment(expressionInfo.m_bundleNameExpression);
+			addNonNLSComment(expressionInfo.m_keyExpression);
+		}
+		// return expression information
+		return expressionInfo;
+	}
 
-  @Override
-  protected void apply_removeNonNLSComments(BasicExpressionInfo basicExpressionInfo)
-      throws Exception {
-    ExpressionInfo expressionInfo = (ExpressionInfo) basicExpressionInfo;
-    removeNonNLSComment((StringLiteral) expressionInfo.m_keyExpression);
-    removeNonNLSComment(expressionInfo.m_bundleNameExpression);
-  }
+	@Override
+	protected void apply_removeNonNLSComments(BasicExpressionInfo basicExpressionInfo)
+			throws Exception {
+		ExpressionInfo expressionInfo = (ExpressionInfo) basicExpressionInfo;
+		removeNonNLSComment((StringLiteral) expressionInfo.m_keyExpression);
+		removeNonNLSComment(expressionInfo.m_bundleNameExpression);
+	}
 
-  public static DirectSource apply_create(IEditableSource editable, JavaInfo root, Object o)
-      throws Exception {
-    // prepare parameters
-    SourceParameters parameters = (SourceParameters) o;
-    // create property bundle
-    createPropertyBundleFile(parameters.m_propertyPackage, parameters.m_propertyFileName, null);
-    // create source
-    return new DirectSource(root, parameters.m_propertyBundleName);
-  }
+	public static DirectSource apply_create(IEditableSource editable, JavaInfo root, Object o)
+			throws Exception {
+		// prepare parameters
+		SourceParameters parameters = (SourceParameters) o;
+		// create property bundle
+		createPropertyBundleFile(parameters.m_propertyPackage, parameters.m_propertyFileName, null);
+		// create source
+		return new DirectSource(root, parameters.m_propertyBundleName);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/bundle/pure/direct/DirectSourceNewComposite.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/bundle/pure/direct/DirectSourceNewComposite.java
index db36a6b1d..d9efa651e 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/bundle/pure/direct/DirectSourceNewComposite.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/bundle/pure/direct/DirectSourceNewComposite.java
@@ -26,66 +26,66 @@
  * @coverage core.nls.ui
  */
 public final class DirectSourceNewComposite extends AbstractBundleSourceNewComposite {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DirectSourceNewComposite(Composite parent, int style, JavaInfo root) {
-    super(parent, style, root);
-    // create GUI controls
-    createPropertyGroup();
-    // initialize fields
-    initializePropertyGroup();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DirectSourceNewComposite(Composite parent, int style, JavaInfo root) {
+		super(parent, style, root);
+		// create GUI controls
+		createPropertyGroup();
+		// initialize fields
+		initializePropertyGroup();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Display
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static String getTitle() {
-    return Messages.DirectSourceNewComposite_title;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Display
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static String getTitle() {
+		return Messages.DirectSourceNewComposite_title;
+	}
 
-  @Override
-  public String getSample() {
-    return "button.setText( ResourceBundle.getBundle(\"full.bundle.name\").getString(\"some.key\") );";
-  }
+	@Override
+	public String getSample() {
+		return "button.setText( ResourceBundle.getBundle(\"full.bundle.name\").getString(\"some.key\") );";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Creating
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public IEditableSource createEditableSource(Object o) {
-    SourceParameters parameters = (SourceParameters) o;
-    try {
-      // create editable source
-      IEditableSource editableSource;
-      {
-        // check, may be we already have such property file
-        if (parameters.m_propertyFileExists) {
-          // use existing property file
-          DirectSource source = new DirectSource(m_root, parameters.m_propertyBundleName);
-          editableSource = source.getEditable();
-        } else {
-          editableSource = createEmptyEditable(parameters.m_propertyBundleName);
-        }
-      }
-      // configure editable source and return
-      editableSource.setKeyGeneratorStrategy(AbstractBundleSource.KEY_GENERATOR);
-      return editableSource;
-    } catch (Throwable e) {
-      throw ReflectionUtils.propagate(e);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Creating
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public IEditableSource createEditableSource(Object o) {
+		SourceParameters parameters = (SourceParameters) o;
+		try {
+			// create editable source
+			IEditableSource editableSource;
+			{
+				// check, may be we already have such property file
+				if (parameters.m_propertyFileExists) {
+					// use existing property file
+					DirectSource source = new DirectSource(m_root, parameters.m_propertyBundleName);
+					editableSource = source.getEditable();
+				} else {
+					editableSource = createEmptyEditable(parameters.m_propertyBundleName);
+				}
+			}
+			// configure editable source and return
+			editableSource.setKeyGeneratorStrategy(AbstractBundleSource.KEY_GENERATOR);
+			return editableSource;
+		} catch (Throwable e) {
+			throw ReflectionUtils.propagate(e);
+		}
+	}
 
-  @Override
-  public Object createParametersObject() throws Exception {
-    SourceParameters parameters = new SourceParameters();
-    fillPropertyParameters(parameters);
-    return parameters;
-  }
+	@Override
+	public Object createParametersObject() throws Exception {
+		SourceParameters parameters = new SourceParameters();
+		fillPropertyParameters(parameters);
+		return parameters;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/bundle/pure/field/FieldSource.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/bundle/pure/field/FieldSource.java
index 9efc758cc..83c7eb70a 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/bundle/pure/field/FieldSource.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/bundle/pure/field/FieldSource.java
@@ -56,343 +56,343 @@
  * @coverage core.nls
  */
 public final class FieldSource extends AbstractPureBundleSource {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Possible sources
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final String BUNDLE_COMMENT = "Field ResourceBundle: ";
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Possible sources
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final String BUNDLE_COMMENT = "Field ResourceBundle: ";
 
-  @Override
-  protected String getBundleComment() {
-    return BUNDLE_COMMENT + m_fieldName;
-  }
+	@Override
+	protected String getBundleComment() {
+		return BUNDLE_COMMENT + m_fieldName;
+	}
 
-  /**
-   * Return "possible" sources that exist in given package.
-   *
-   * "Possible" source is source that exists in current package, but is not used in current unit. We
-   * show "possible" sources only if there are no "real" sources.
-   */
-  public static List<AbstractSource> getPossibleSources(JavaInfo root, IPackageFragment pkg)
-      throws Exception {
-    List<AbstractSource> sources = Lists.newArrayList();
-    //
-    Object[] nonJavaResources = pkg.getNonJavaResources();
-    for (Object o : nonJavaResources) {
-      if (o instanceof IFile) {
-        IFile file = (IFile) o;
-        String fileName = file.getName();
-        // we need .properties files
-        if (!fileName.endsWith(".properties")) {
-          continue;
-        }
-        // we need only main (default) bundles
-        if (fileName.indexOf('_') != -1) {
-          continue;
-        }
-        // check first line for required comment
-        String fieldName;
-        {
-          InputStream is = file.getContents(true);
-          String firstLine = IOUtils2.readFirstLine(is);
-          if (firstLine == null || !firstLine.startsWith("#" + BUNDLE_COMMENT)) {
-            continue;
-          }
-          fieldName = firstLine.substring(1 + BUNDLE_COMMENT.length());
-        }
-        // OK, this is probably correct source
-        try {
-          String bundleName =
-              pkg.getElementName()
-                  + "."
-                  + StringUtils.substring(fileName, 0, -".properties".length());
-          AbstractSource source = new FieldSource(root, bundleName, fieldName);
-          sources.add(source);
-        } catch (Throwable e) {
-          DesignerPlugin.log(e);
-        }
-      }
-    }
-    //
-    return sources;
-  }
+	/**
+	 * Return "possible" sources that exist in given package.
+	 *
+	 * "Possible" source is source that exists in current package, but is not used in current unit. We
+	 * show "possible" sources only if there are no "real" sources.
+	 */
+	public static List<AbstractSource> getPossibleSources(JavaInfo root, IPackageFragment pkg)
+			throws Exception {
+		List<AbstractSource> sources = Lists.newArrayList();
+		//
+		Object[] nonJavaResources = pkg.getNonJavaResources();
+		for (Object o : nonJavaResources) {
+			if (o instanceof IFile) {
+				IFile file = (IFile) o;
+				String fileName = file.getName();
+				// we need .properties files
+				if (!fileName.endsWith(".properties")) {
+					continue;
+				}
+				// we need only main (default) bundles
+				if (fileName.indexOf('_') != -1) {
+					continue;
+				}
+				// check first line for required comment
+				String fieldName;
+				{
+					InputStream is = file.getContents(true);
+					String firstLine = IOUtils2.readFirstLine(is);
+					if (firstLine == null || !firstLine.startsWith("#" + BUNDLE_COMMENT)) {
+						continue;
+					}
+					fieldName = firstLine.substring(1 + BUNDLE_COMMENT.length());
+				}
+				// OK, this is probably correct source
+				try {
+					String bundleName =
+							pkg.getElementName()
+							+ "."
+							+ StringUtils.substring(fileName, 0, -".properties".length());
+					AbstractSource source = new FieldSource(root, bundleName, fieldName);
+					sources.add(source);
+				} catch (Throwable e) {
+					DesignerPlugin.log(e);
+				}
+			}
+		}
+		//
+		return sources;
+	}
 
-  @Override
-  public void attachPossible() throws Exception {
-    addField(m_root, m_bundleName, m_fieldName);
-  }
+	@Override
+	public void attachPossible() throws Exception {
+		addField(m_root, m_bundleName, m_fieldName);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Creation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Parse given expression and return NLSSource for it (new or existing from list).
-   */
-  public static AbstractSource get(JavaInfo component,
-      GenericProperty property,
-      Expression expression,
-      List<AbstractSource> sources) throws Exception {
-    ExpressionInfo expressionInfo = getExpressionInfo(component, expression);
-    if (expressionInfo != null) {
-      String bundleName = expressionInfo.m_bundleName;
-      String fieldName = expressionInfo.m_fieldName;
-      FieldSource source = getNewOrExistingSource(component, bundleName, fieldName, sources);
-      source.onKeyAdd(component, expressionInfo.m_key);
-      return source;
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Creation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Parse given expression and return NLSSource for it (new or existing from list).
+	 */
+	public static AbstractSource get(JavaInfo component,
+			GenericProperty property,
+			Expression expression,
+			List<AbstractSource> sources) throws Exception {
+		ExpressionInfo expressionInfo = getExpressionInfo(component, expression);
+		if (expressionInfo != null) {
+			String bundleName = expressionInfo.m_bundleName;
+			String fieldName = expressionInfo.m_fieldName;
+			FieldSource source = getNewOrExistingSource(component, bundleName, fieldName, sources);
+			source.onKeyAdd(component, expressionInfo.m_key);
+			return source;
+		}
+		return null;
+	}
 
-  /**
-   * Find existing source with same bundle name or create new one.
-   */
-  private static FieldSource getNewOrExistingSource(JavaInfo component,
-      String bundleName,
-      String fieldName,
-      List<AbstractSource> sources) throws Exception {
-    for (AbstractSource abstractSource : sources) {
-      if (abstractSource instanceof FieldSource) {
-        FieldSource source = (FieldSource) abstractSource;
-        if (source.m_bundleName.equals(bundleName)) {
-          return source;
-        }
-      }
-    }
-    return new FieldSource(component.getRootJava(), bundleName, fieldName);
-  }
+	/**
+	 * Find existing source with same bundle name or create new one.
+	 */
+	private static FieldSource getNewOrExistingSource(JavaInfo component,
+			String bundleName,
+			String fieldName,
+			List<AbstractSource> sources) throws Exception {
+		for (AbstractSource abstractSource : sources) {
+			if (abstractSource instanceof FieldSource) {
+				FieldSource source = (FieldSource) abstractSource;
+				if (source.m_bundleName.equals(bundleName)) {
+					return source;
+				}
+			}
+		}
+		return new FieldSource(component.getRootJava(), bundleName, fieldName);
+	}
 
-  /**
-   * Parse given expression and if it is valid Eclipse style messages class access, extract resource
-   * bundle name, key and optional default value.
-   */
-  private static ExpressionInfo getExpressionInfo(JavaInfo component, Expression expression) {
-    if (expression instanceof MethodInvocation) {
-      // check for getString(key)
-      MethodInvocation getString_invocation = (MethodInvocation) expression;
-      {
-        boolean is_getString =
-            getString_invocation.getName().getIdentifier().equals("getString")
-                && getString_invocation.arguments().size() == 1
-                && getString_invocation.arguments().get(0) instanceof StringLiteral;
-        if (!is_getString) {
-          return null;
-        }
-      }
-      // check that invocation expression is field
-      if (getString_invocation.getExpression() instanceof SimpleName) {
-        // check that field is used
-        SimpleName fieldExpression = (SimpleName) getString_invocation.getExpression();
-        if (AstNodeUtils.getFullyQualifiedName(fieldExpression, false).equals(
-            "java.util.ResourceBundle")) {
-          // prepare initializer for field
-          Expression fieldInitializer;
-          {
-            EditorState editorState = EditorState.get(component.getEditor());
-            ASTNode assignment =
-                ExecutionFlowUtils.getLastAssignment(
-                    editorState.getFlowDescription(),
-                    fieldExpression);
-            if (!(assignment instanceof VariableDeclarationFragment)) {
-              return null;
-            }
-            VariableDeclarationFragment fieldAssignment = (VariableDeclarationFragment) assignment;
-            fieldInitializer = fieldAssignment.getInitializer();
-          }
-          // prepare bundle name
-          String bundleName = getBundleName_for_getBundle(fieldInitializer);
-          if (bundleName == null) {
-            return null;
-          }
-          // prepare key
-          StringLiteral keyLiteral = (StringLiteral) getString_invocation.arguments().get(0);
-          String key = keyLiteral.getLiteralValue();
-          // return information about expression
-          ExpressionInfo expressionInfo =
-              new ExpressionInfo(expression,
-                  bundleName,
-                  fieldExpression.getIdentifier(),
-                  keyLiteral,
-                  key);
-          expression.setProperty(NLS_EXPRESSION_INFO, expressionInfo);
-          return expressionInfo;
-        }
-      }
-    }
-    return null;
-  }
+	/**
+	 * Parse given expression and if it is valid Eclipse style messages class access, extract resource
+	 * bundle name, key and optional default value.
+	 */
+	private static ExpressionInfo getExpressionInfo(JavaInfo component, Expression expression) {
+		if (expression instanceof MethodInvocation) {
+			// check for getString(key)
+			MethodInvocation getString_invocation = (MethodInvocation) expression;
+			{
+				boolean is_getString =
+						getString_invocation.getName().getIdentifier().equals("getString")
+						&& getString_invocation.arguments().size() == 1
+						&& getString_invocation.arguments().get(0) instanceof StringLiteral;
+				if (!is_getString) {
+					return null;
+				}
+			}
+			// check that invocation expression is field
+			if (getString_invocation.getExpression() instanceof SimpleName) {
+				// check that field is used
+				SimpleName fieldExpression = (SimpleName) getString_invocation.getExpression();
+				if (AstNodeUtils.getFullyQualifiedName(fieldExpression, false).equals(
+						"java.util.ResourceBundle")) {
+					// prepare initializer for field
+					Expression fieldInitializer;
+					{
+						EditorState editorState = EditorState.get(component.getEditor());
+						ASTNode assignment =
+								ExecutionFlowUtils.getLastAssignment(
+										editorState.getFlowDescription(),
+										fieldExpression);
+						if (!(assignment instanceof VariableDeclarationFragment)) {
+							return null;
+						}
+						VariableDeclarationFragment fieldAssignment = (VariableDeclarationFragment) assignment;
+						fieldInitializer = fieldAssignment.getInitializer();
+					}
+					// prepare bundle name
+					String bundleName = getBundleName_for_getBundle(fieldInitializer);
+					if (bundleName == null) {
+						return null;
+					}
+					// prepare key
+					StringLiteral keyLiteral = (StringLiteral) getString_invocation.arguments().get(0);
+					String key = keyLiteral.getLiteralValue();
+					// return information about expression
+					ExpressionInfo expressionInfo =
+							new ExpressionInfo(expression,
+									bundleName,
+									fieldExpression.getIdentifier(),
+									keyLiteral,
+									key);
+					expression.setProperty(NLS_EXPRESSION_INFO, expressionInfo);
+					return expressionInfo;
+				}
+			}
+		}
+		return null;
+	}
 
-  /**
-   * Check that given expression is ResourceBundle.getBundle(bundleName) and return bundle name
-   * (return <code>null</code> in other case).
-   */
-  private static String getBundleName_for_getBundle(Expression expression) {
-    // get Bundle name from @wbp.nls.resourceBundle tag
-    {
-      BodyDeclaration declaration =
-          AstNodeUtils.getEnclosingNode(expression, BodyDeclaration.class);
-      if (declaration != null) {
-        TagElement tagElement = AstNodeUtils.getJavaDocTag(declaration, "@wbp.nls.resourceBundle");
-        if (tagElement != null && tagElement.fragments().size() == 1) {
-          return tagElement.fragments().get(0).toString().trim();
-        }
-      }
-    }
-    // get Bundle name from ResourceBundle.getBundle(String)
-    if (expression instanceof MethodInvocation) {
-      MethodInvocation invocation = (MethodInvocation) expression;
-      // check for: getBundle(bundleName)
-      {
-        boolean is_getBundle =
-            invocation.getName().getIdentifier().equals("getBundle")
-                && invocation.arguments().size() == 1
-                && invocation.arguments().get(0) instanceof StringLiteral;
-        boolean is_getBundleWithLocale =
-            invocation.getName().getIdentifier().equals("getBundle")
-                && invocation.arguments().size() == 2
-                && invocation.arguments().get(0) instanceof StringLiteral
-                && AstNodeUtils.getFullyQualifiedName(
-                    (Expression) invocation.arguments().get(1),
-                    false).equals("java.util.Locale");
-        if (!is_getBundle && !is_getBundleWithLocale) {
-          return null;
-        }
-      }
-      // check for: ResourceBundle
-      {
-        Expression bundleExpression = invocation.getExpression();
-        String bundleTypeName = AstNodeUtils.getFullyQualifiedName(bundleExpression, true);
-        if (!bundleTypeName.equals("java.util.ResourceBundle")) {
-          return null;
-        }
-      }
-      // prepare bundle name
-      StringLiteral bundleNameLiteral = (StringLiteral) invocation.arguments().get(0);
-      return bundleNameLiteral.getLiteralValue();
-    }
-    // no, this is not ResourceBundle.getBundle(bundleName) or ResourceBundle.getBundle(bundleName,Locale)
-    return null;
-  }
+	/**
+	 * Check that given expression is ResourceBundle.getBundle(bundleName) and return bundle name
+	 * (return <code>null</code> in other case).
+	 */
+	private static String getBundleName_for_getBundle(Expression expression) {
+		// get Bundle name from @wbp.nls.resourceBundle tag
+		{
+			BodyDeclaration declaration =
+					AstNodeUtils.getEnclosingNode(expression, BodyDeclaration.class);
+			if (declaration != null) {
+				TagElement tagElement = AstNodeUtils.getJavaDocTag(declaration, "@wbp.nls.resourceBundle");
+				if (tagElement != null && tagElement.fragments().size() == 1) {
+					return tagElement.fragments().get(0).toString().trim();
+				}
+			}
+		}
+		// get Bundle name from ResourceBundle.getBundle(String)
+		if (expression instanceof MethodInvocation) {
+			MethodInvocation invocation = (MethodInvocation) expression;
+			// check for: getBundle(bundleName)
+			{
+				boolean is_getBundle =
+						invocation.getName().getIdentifier().equals("getBundle")
+						&& invocation.arguments().size() == 1
+						&& invocation.arguments().get(0) instanceof StringLiteral;
+				boolean is_getBundleWithLocale =
+						invocation.getName().getIdentifier().equals("getBundle")
+						&& invocation.arguments().size() == 2
+						&& invocation.arguments().get(0) instanceof StringLiteral
+						&& AstNodeUtils.getFullyQualifiedName(
+								(Expression) invocation.arguments().get(1),
+								false).equals("java.util.Locale");
+				if (!is_getBundle && !is_getBundleWithLocale) {
+					return null;
+				}
+			}
+			// check for: ResourceBundle
+			{
+				Expression bundleExpression = invocation.getExpression();
+				String bundleTypeName = AstNodeUtils.getFullyQualifiedName(bundleExpression, true);
+				if (!bundleTypeName.equals("java.util.ResourceBundle")) {
+					return null;
+				}
+			}
+			// prepare bundle name
+			StringLiteral bundleNameLiteral = (StringLiteral) invocation.arguments().get(0);
+			return bundleNameLiteral.getLiteralValue();
+		}
+		// no, this is not ResourceBundle.getBundle(bundleName) or ResourceBundle.getBundle(bundleName,Locale)
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Expression information
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Information about expression. We store it in expression property to avoid parsing every time.
-   */
-  protected static class ExpressionInfo extends BasicExpressionInfo {
-    private final String m_bundleName;
-    private final String m_fieldName;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Expression information
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Information about expression. We store it in expression property to avoid parsing every time.
+	 */
+	protected static class ExpressionInfo extends BasicExpressionInfo {
+		private final String m_bundleName;
+		private final String m_fieldName;
 
-    public ExpressionInfo(Expression expression,
-        String bundleName,
-        String fieldName,
-        StringLiteral keyExpression,
-        String key) {
-      super(expression, keyExpression, key);
-      m_bundleName = bundleName;
-      m_fieldName = fieldName;
-    }
-  }
+		public ExpressionInfo(Expression expression,
+				String bundleName,
+				String fieldName,
+				StringLiteral keyExpression,
+				String key) {
+			super(expression, keyExpression, key);
+			m_bundleName = bundleName;
+			m_fieldName = fieldName;
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance fields
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final String m_fieldName;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance fields
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final String m_fieldName;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FieldSource(JavaInfo root, String bundleName, String fieldName) throws Exception {
-    super(root, bundleName);
-    m_fieldName = fieldName;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FieldSource(JavaInfo root, String bundleName, String fieldName) throws Exception {
+		super(root, bundleName);
+		m_fieldName = fieldName;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getTypeTitle() throws Exception {
-    return "ResourceBundle in field '" + m_fieldName + "'";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getTypeTitle() throws Exception {
+		return "ResourceBundle in field '" + m_fieldName + "'";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Edit support
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected IKeyGeneratorStrategy getKeyGeneratorStrategy() {
-    return KEY_GENERATOR;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Edit support
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected IKeyGeneratorStrategy getKeyGeneratorStrategy() {
+		return KEY_GENERATOR;
+	}
 
-  @Override
-  protected Expression apply_renameKey_replaceKeyExpression(AstEditor editor,
-      Expression keyExpression,
-      String newKey) throws Exception {
-    String newSource = StringConverter.INSTANCE.toJavaSource(m_root, newKey);
-    return editor.replaceExpression(keyExpression, newSource);
-  }
+	@Override
+	protected Expression apply_renameKey_replaceKeyExpression(AstEditor editor,
+			Expression keyExpression,
+			String newKey) throws Exception {
+		String newSource = StringConverter.INSTANCE.toJavaSource(m_root, newKey);
+		return editor.replaceExpression(keyExpression, newSource);
+	}
 
-  @Override
-  protected BasicExpressionInfo apply_externalize_replaceExpression(GenericProperty property,
-      String key) throws Exception {
-    Expression expression = property.getExpression();
-    // prepare code
-    String code =
-        m_fieldName + ".getString(" + StringConverter.INSTANCE.toJavaSource(m_root, key) + ")";
-    // replace expression
-    ExpressionInfo expressionInfo = (ExpressionInfo) replaceExpression_getInfo(expression, code);
-    // add //$NON-NLS-xxx$ comment for key
-    addNonNLSComment(expressionInfo.m_keyExpression);
-    // return expression information
-    return expressionInfo;
-  }
+	@Override
+	protected BasicExpressionInfo apply_externalize_replaceExpression(GenericProperty property,
+			String key) throws Exception {
+		Expression expression = property.getExpression();
+		// prepare code
+		String code =
+				m_fieldName + ".getString(" + StringConverter.INSTANCE.toJavaSource(m_root, key) + ")";
+		// replace expression
+		ExpressionInfo expressionInfo = (ExpressionInfo) replaceExpression_getInfo(expression, code);
+		// add //$NON-NLS-xxx$ comment for key
+		addNonNLSComment(expressionInfo.m_keyExpression);
+		// return expression information
+		return expressionInfo;
+	}
 
-  @Override
-  protected void apply_removeNonNLSComments(BasicExpressionInfo basicExpressionInfo)
-      throws Exception {
-    ExpressionInfo expressionInfo = (ExpressionInfo) basicExpressionInfo;
-    removeNonNLSComment((StringLiteral) expressionInfo.m_keyExpression);
-  }
+	@Override
+	protected void apply_removeNonNLSComments(BasicExpressionInfo basicExpressionInfo)
+			throws Exception {
+		ExpressionInfo expressionInfo = (ExpressionInfo) basicExpressionInfo;
+		removeNonNLSComment((StringLiteral) expressionInfo.m_keyExpression);
+	}
 
-  public static FieldSource apply_create(IEditableSource editable, JavaInfo root, Object o)
-      throws Exception {
-    // prepare parameters
-    SourceParameters parameters = (SourceParameters) o;
-    String bundleName = parameters.m_propertyBundleName;
-    String fieldName = parameters.m_fieldName;
-    // create property bundle
-    createPropertyBundleFile(parameters.m_propertyPackage, parameters.m_propertyFileName, null);
-    // add field
-    addField(root, bundleName, fieldName);
-    // create source
-    return new FieldSource(root, bundleName, fieldName);
-  }
+	public static FieldSource apply_create(IEditableSource editable, JavaInfo root, Object o)
+			throws Exception {
+		// prepare parameters
+		SourceParameters parameters = (SourceParameters) o;
+		String bundleName = parameters.m_propertyBundleName;
+		String fieldName = parameters.m_fieldName;
+		// create property bundle
+		createPropertyBundleFile(parameters.m_propertyPackage, parameters.m_propertyFileName, null);
+		// add field
+		addField(root, bundleName, fieldName);
+		// create source
+		return new FieldSource(root, bundleName, fieldName);
+	}
 
-  /**
-   * Add field with ResourceBundle definition.
-   */
-  private static void addField(JavaInfo root, String bundleName, String fieldName) throws Exception {
-    // prepare code
-    String code =
-        "private static final java.util.ResourceBundle "
-            + fieldName
-            + " = java.util.ResourceBundle.getBundle("
-            + StringConverter.INSTANCE.toJavaSource(root, bundleName)
-            + "); //$NON-NLS-1$";
-    // add field
-    TypeDeclaration typeDeclaration = JavaInfoUtils.getTypeDeclaration(root);
-    root.getEditor().addFieldDeclaration(code, new BodyDeclarationTarget(typeDeclaration, true));
-  }
+	/**
+	 * Add field with ResourceBundle definition.
+	 */
+	private static void addField(JavaInfo root, String bundleName, String fieldName) throws Exception {
+		// prepare code
+		String code =
+				"private static final java.util.ResourceBundle "
+						+ fieldName
+						+ " = java.util.ResourceBundle.getBundle("
+						+ StringConverter.INSTANCE.toJavaSource(root, bundleName)
+						+ "); //$NON-NLS-1$";
+		// add field
+		TypeDeclaration typeDeclaration = JavaInfoUtils.getTypeDeclaration(root);
+		root.getEditor().addFieldDeclaration(code, new BodyDeclarationTarget(typeDeclaration, true));
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/bundle/pure/field/FieldSourceNewComposite.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/bundle/pure/field/FieldSourceNewComposite.java
index 7b48015c5..d311ce5fc 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/bundle/pure/field/FieldSourceNewComposite.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/bundle/pure/field/FieldSourceNewComposite.java
@@ -37,138 +37,138 @@
  * @coverage core.nls.ui
  */
 public class FieldSourceNewComposite extends AbstractBundleSourceNewComposite {
-  private StringDialogField m_fieldNameField;
+	private StringDialogField m_fieldNameField;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FieldSourceNewComposite(Composite parent, int style, JavaInfo root) {
-    super(parent, style, root);
-    // create GUI controls
-    createFieldGroup();
-    createPropertyGroup();
-    // initialize fields
-    m_fieldNameField.setText("BUNDLE");
-    initializePropertyGroup();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FieldSourceNewComposite(Composite parent, int style, JavaInfo root) {
+		super(parent, style, root);
+		// create GUI controls
+		createFieldGroup();
+		createPropertyGroup();
+		// initialize fields
+		m_fieldNameField.setText("BUNDLE");
+		initializePropertyGroup();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Field group
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void createFieldGroup() {
-    Group fieldGroup = new Group(this, SWT.NONE);
-    fieldGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-    fieldGroup.setLayout(new GridLayout(3, false));
-    fieldGroup.setText(Messages.FieldSourceNewComposite_fieldGroup);
-    // create field name field
-    {
-      m_fieldNameField = new StringDialogField();
-      m_fieldNameField.setDialogFieldListener(m_validateListener);
-      m_fieldNameField.setLabelText(Messages.FieldSourceNewComposite_fieldNameLabel);
-      createTextFieldControls(fieldGroup, m_fieldNameField, 3);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Field group
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void createFieldGroup() {
+		Group fieldGroup = new Group(this, SWT.NONE);
+		fieldGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+		fieldGroup.setLayout(new GridLayout(3, false));
+		fieldGroup.setText(Messages.FieldSourceNewComposite_fieldGroup);
+		// create field name field
+		{
+			m_fieldNameField = new StringDialogField();
+			m_fieldNameField.setDialogFieldListener(m_validateListener);
+			m_fieldNameField.setLabelText(Messages.FieldSourceNewComposite_fieldNameLabel);
+			createTextFieldControls(fieldGroup, m_fieldNameField, 3);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Validation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final String KEY_FIELD_NAME = "KEY_FIELD_NAME";
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Validation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final String KEY_FIELD_NAME = "KEY_FIELD_NAME";
 
-  @Override
-  protected void validateAll() {
-    validateFieldName();
-    super.validateAll();
-  }
+	@Override
+	protected void validateAll() {
+		validateFieldName();
+		super.validateAll();
+	}
 
-  private void validateFieldName() {
-    final String fieldName = m_fieldNameField.getText();
-    // check that there are no field or variable with same name
-    {
-      // check, may be there is such name in CU
-      final boolean hasSuchName[] = new boolean[1];
-      m_editor.getAstUnit().accept(new ASTVisitor() {
-        @Override
-        public void endVisit(SimpleName node) {
-          hasSuchName[0] |= node.getIdentifier().equals(fieldName);
-        }
-      });
-      // set status
-      if (hasSuchName[0]) {
-        setInvalid(
-            KEY_FIELD_NAME,
-            MessageFormat.format(Messages.FieldSourceNewComposite_validateFieldExists, fieldName));
-        return;
-      }
-    }
-    // validate that field is valid identifier
-    {
-      IStatus status = JavaConventions.validateFieldName(fieldName);
-      if (!status.isOK()) {
-        setStatus(KEY_FIELD_NAME, status);
-        return;
-      }
-    }
-    // all is good
-    setValid(KEY_FIELD_NAME);
-  }
+	private void validateFieldName() {
+		final String fieldName = m_fieldNameField.getText();
+		// check that there are no field or variable with same name
+		{
+			// check, may be there is such name in CU
+			final boolean hasSuchName[] = new boolean[1];
+			m_editor.getAstUnit().accept(new ASTVisitor() {
+				@Override
+				public void endVisit(SimpleName node) {
+					hasSuchName[0] |= node.getIdentifier().equals(fieldName);
+				}
+			});
+			// set status
+			if (hasSuchName[0]) {
+				setInvalid(
+						KEY_FIELD_NAME,
+						MessageFormat.format(Messages.FieldSourceNewComposite_validateFieldExists, fieldName));
+				return;
+			}
+		}
+		// validate that field is valid identifier
+		{
+			IStatus status = JavaConventions.validateFieldName(fieldName);
+			if (!status.isOK()) {
+				setStatus(KEY_FIELD_NAME, status);
+				return;
+			}
+		}
+		// all is good
+		setValid(KEY_FIELD_NAME);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Display
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static String getTitle() {
-    return Messages.FieldSourceNewComposite_title;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Display
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static String getTitle() {
+		return Messages.FieldSourceNewComposite_title;
+	}
 
-  @Override
-  public String getSample() {
-    return "private static final BUNDLE = ResourceBundle.getBundle(\"full.bundle.name\");\n"
-        + "...\n"
-        + "button.setText( BUNDLE.getString(\"some.key\") );";
-  }
+	@Override
+	public String getSample() {
+		return "private static final BUNDLE = ResourceBundle.getBundle(\"full.bundle.name\");\n"
+				+ "...\n"
+				+ "button.setText( BUNDLE.getString(\"some.key\") );";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Creating
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public IEditableSource createEditableSource(Object o) {
-    SourceParameters parameters = (SourceParameters) o;
-    try {
-      // create editable source
-      IEditableSource editableSource;
-      {
-        // check, may be we already have such property file
-        if (parameters.m_propertyFileExists) {
-          String fieldName = m_fieldNameField.getText();
-          // use existing property file
-          FieldSource source = new FieldSource(m_root, parameters.m_propertyBundleName, fieldName);
-          editableSource = source.getEditable();
-        } else {
-          editableSource = createEmptyEditable(parameters.m_propertyBundleName);
-        }
-      }
-      // configure editable source and return
-      editableSource.setKeyGeneratorStrategy(AbstractBundleSource.KEY_GENERATOR);
-      return editableSource;
-    } catch (Throwable e) {
-      throw ReflectionUtils.propagate(e);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Creating
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public IEditableSource createEditableSource(Object o) {
+		SourceParameters parameters = (SourceParameters) o;
+		try {
+			// create editable source
+			IEditableSource editableSource;
+			{
+				// check, may be we already have such property file
+				if (parameters.m_propertyFileExists) {
+					String fieldName = m_fieldNameField.getText();
+					// use existing property file
+					FieldSource source = new FieldSource(m_root, parameters.m_propertyBundleName, fieldName);
+					editableSource = source.getEditable();
+				} else {
+					editableSource = createEmptyEditable(parameters.m_propertyBundleName);
+				}
+			}
+			// configure editable source and return
+			editableSource.setKeyGeneratorStrategy(AbstractBundleSource.KEY_GENERATOR);
+			return editableSource;
+		} catch (Throwable e) {
+			throw ReflectionUtils.propagate(e);
+		}
+	}
 
-  @Override
-  public Object createParametersObject() throws Exception {
-    SourceParameters parameters = new SourceParameters();
-    parameters.m_fieldName = m_fieldNameField.getText();
-    fillPropertyParameters(parameters);
-    return parameters;
-  }
+	@Override
+	public Object createParametersObject() throws Exception {
+		SourceParameters parameters = new SourceParameters();
+		parameters.m_fieldName = m_fieldNameField.getText();
+		fillPropertyParameters(parameters);
+		return parameters;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/bundle/pure/field/SourceParameters.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/bundle/pure/field/SourceParameters.java
index baaeccff2..8a6ad2221 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/bundle/pure/field/SourceParameters.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/bundle/pure/field/SourceParameters.java
@@ -19,5 +19,5 @@
  * @coverage core.nls
  */
 public class SourceParameters extends AbstractBundleSourceParameters {
-  public String m_fieldName;
+	public String m_fieldName;
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/commands/AbstractCommand.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/commands/AbstractCommand.java
index f328f0490..557aea206 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/commands/AbstractCommand.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/commands/AbstractCommand.java
@@ -25,37 +25,37 @@
  * @coverage core.nls
  */
 public abstract class AbstractCommand {
-  private final IEditableSource m_editableSource;
+	private final IEditableSource m_editableSource;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractCommand(IEditableSource editableSource) {
-    m_editableSource = editableSource;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractCommand(IEditableSource editableSource) {
+		m_editableSource = editableSource;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public IEditableSource getEditableSource() {
-    return m_editableSource;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public IEditableSource getEditableSource() {
+		return m_editableSource;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Adding to queue
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Add command in given list, possible with some optimizations. For example if we have already
-   * "set values" for same locale on top of commands queue, we can remove previous "set values" and
-   * use only current one.
-   */
-  public void addToCommandList(List<AbstractCommand> commands) {
-    commands.add(this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Adding to queue
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Add command in given list, possible with some optimizations. For example if we have already
+	 * "set values" for same locale on top of commands queue, we can remove previous "set values" and
+	 * use only current one.
+	 */
+	public void addToCommandList(List<AbstractCommand> commands) {
+		commands.add(this);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/commands/AddKeyCommand.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/commands/AddKeyCommand.java
index 9b7d3b109..df47ca1b7 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/commands/AddKeyCommand.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/commands/AddKeyCommand.java
@@ -19,24 +19,24 @@
  * @coverage core.nls
  */
 public final class AddKeyCommand extends AbstractCommand {
-  private final String m_key;
+	private final String m_key;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AddKeyCommand(IEditableSource editableSource, String key) {
-    super(editableSource);
-    m_key = key;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AddKeyCommand(IEditableSource editableSource, String key) {
+		super(editableSource);
+		m_key = key;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public String getKey() {
-    return m_key;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public String getKey() {
+		return m_key;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/commands/AddLocaleCommand.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/commands/AddLocaleCommand.java
index b0827eb5f..380eda24f 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/commands/AddLocaleCommand.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/commands/AddLocaleCommand.java
@@ -23,32 +23,32 @@
  * @coverage core.nls
  */
 public final class AddLocaleCommand extends AbstractCommand {
-  private final LocaleInfo m_locale;
-  private final Map<String, String> m_values;
+	private final LocaleInfo m_locale;
+	private final Map<String, String> m_values;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AddLocaleCommand(IEditableSource editableSource,
-      LocaleInfo locale,
-      Map<String, String> values) {
-    super(editableSource);
-    m_locale = locale;
-    m_values = new HashMap<String, String>(values);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AddLocaleCommand(IEditableSource editableSource,
+			LocaleInfo locale,
+			Map<String, String> values) {
+		super(editableSource);
+		m_locale = locale;
+		m_values = new HashMap<String, String>(values);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public LocaleInfo getLocale() {
-    return m_locale;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public LocaleInfo getLocale() {
+		return m_locale;
+	}
 
-  public Map<String, String> getValues() {
-    return m_values;
-  }
+	public Map<String, String> getValues() {
+		return m_values;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/commands/CreateSourceCommand.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/commands/CreateSourceCommand.java
index ce577de88..5f71f1dd9 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/commands/CreateSourceCommand.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/commands/CreateSourceCommand.java
@@ -20,32 +20,32 @@
  * @coverage core.nls
  */
 public final class CreateSourceCommand extends AbstractCommand {
-  private final SourceDescription m_sourceDescription;
-  private final Object m_parameters;
+	private final SourceDescription m_sourceDescription;
+	private final Object m_parameters;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CreateSourceCommand(IEditableSource editableSource,
-      SourceDescription sourceDescription,
-      Object parameters) {
-    super(editableSource);
-    m_sourceDescription = sourceDescription;
-    m_parameters = parameters;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CreateSourceCommand(IEditableSource editableSource,
+			SourceDescription sourceDescription,
+			Object parameters) {
+		super(editableSource);
+		m_sourceDescription = sourceDescription;
+		m_parameters = parameters;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SourceDescription getSourceDescription() {
-    return m_sourceDescription;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SourceDescription getSourceDescription() {
+		return m_sourceDescription;
+	}
 
-  public Object getParameters() {
-    return m_parameters;
-  }
+	public Object getParameters() {
+		return m_parameters;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/commands/ExternalizePropertyCommand.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/commands/ExternalizePropertyCommand.java
index a57665ac7..44590671f 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/commands/ExternalizePropertyCommand.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/commands/ExternalizePropertyCommand.java
@@ -21,39 +21,39 @@
  * @coverage core.nls
  */
 public final class ExternalizePropertyCommand extends AbstractCommand {
-  private final JavaInfo m_component;
-  private final GenericProperty m_property;
-  private final String m_key;
+	private final JavaInfo m_component;
+	private final GenericProperty m_property;
+	private final String m_key;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ExternalizePropertyCommand(IEditableSource editableSource,
-      JavaInfo component,
-      GenericProperty property,
-      String key) {
-    super(editableSource);
-    m_component = component;
-    m_property = property;
-    m_key = key;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ExternalizePropertyCommand(IEditableSource editableSource,
+			JavaInfo component,
+			GenericProperty property,
+			String key) {
+		super(editableSource);
+		m_component = component;
+		m_property = property;
+		m_key = key;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public JavaInfo getComponent() {
-    return m_component;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public JavaInfo getComponent() {
+		return m_component;
+	}
 
-  public GenericProperty getProperty() {
-    return m_property;
-  }
+	public GenericProperty getProperty() {
+		return m_property;
+	}
 
-  public String getKey() {
-    return m_key;
-  }
+	public String getKey() {
+		return m_key;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/commands/ICommandQueue.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/commands/ICommandQueue.java
index 033aa6625..d76938871 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/commands/ICommandQueue.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/commands/ICommandQueue.java
@@ -17,8 +17,8 @@
  * @coverage core.nls
  */
 public interface ICommandQueue {
-  /**
-   * Adds given {@link AbstractCommand} to the command queue.
-   */
-  void addCommand(AbstractCommand command);
+	/**
+	 * Adds given {@link AbstractCommand} to the command queue.
+	 */
+	void addCommand(AbstractCommand command);
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/commands/InternalizeKeyCommand.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/commands/InternalizeKeyCommand.java
index 1a8ef5afa..bb7f99df2 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/commands/InternalizeKeyCommand.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/commands/InternalizeKeyCommand.java
@@ -27,29 +27,29 @@
  * @coverage core.nls
  */
 public final class InternalizeKeyCommand extends AbstractCommand {
-  private final String m_key;
-  private Set<String> m_keys;
+	private final String m_key;
+	private Set<String> m_keys;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public InternalizeKeyCommand(IEditableSource editableSource, String key) {
-    super(editableSource);
-    m_key = key;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public InternalizeKeyCommand(IEditableSource editableSource, String key) {
+		super(editableSource);
+		m_key = key;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public Set<String> getKeys() {
-    if (m_keys == null) {
-      m_keys = Sets.newHashSet();
-      m_keys.add(m_key);
-    }
-    return m_keys;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public Set<String> getKeys() {
+		if (m_keys == null) {
+			m_keys = Sets.newHashSet();
+			m_keys.add(m_key);
+		}
+		return m_keys;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/commands/RemoveLocaleCommand.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/commands/RemoveLocaleCommand.java
index 88bf19ac1..e5e1e808e 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/commands/RemoveLocaleCommand.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/commands/RemoveLocaleCommand.java
@@ -22,67 +22,67 @@
  * @coverage core.nls
  */
 public final class RemoveLocaleCommand extends AbstractCommand {
-  private final LocaleInfo m_locale;
+	private final LocaleInfo m_locale;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public RemoveLocaleCommand(IEditableSource editableSource, LocaleInfo locale) {
-    super(editableSource);
-    m_locale = locale;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public RemoveLocaleCommand(IEditableSource editableSource, LocaleInfo locale) {
+		super(editableSource);
+		m_locale = locale;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public LocaleInfo getLocale() {
-    return m_locale;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public LocaleInfo getLocale() {
+		return m_locale;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Adding to queue
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Do optimizations for "remove locale" command. Remove any existing "set values" and "add locale"
-   * for same locale that existing before (if we don't have other commands on this path).
-   */
-  @Override
-  public void addToCommandList(List<AbstractCommand> m_commands) {
-    LocaleInfo locale = getLocale();
-    for (int index = m_commands.size() - 1; index >= 0; index--) {
-      AbstractCommand oldCommand = m_commands.get(index);
-      // "set values" found
-      if (oldCommand instanceof SetValuesCommand) {
-        SetValuesCommand oldSetValuesCommand = (SetValuesCommand) oldCommand;
-        // if same locale, remove it
-        if (oldSetValuesCommand.getLocale().equals(locale)) {
-          m_commands.remove(index);
-        }
-        // keep looking
-        continue;
-      }
-      // "add locale" found
-      if (oldCommand instanceof AddLocaleCommand) {
-        AddLocaleCommand oldAddLocaleCommand = (AddLocaleCommand) oldCommand;
-        // if same locale, remove it
-        if (oldAddLocaleCommand.getLocale().equals(locale)) {
-          m_commands.remove(index);
-          // after removing "add locale" we can not expect any commands for this locale ;-)
-          return;
-        }
-        // keep looking
-        continue;
-      }
-      // if we found any other command, we can not change anything before it, so stop looking
-      break;
-    }
-    //
-    super.addToCommandList(m_commands);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Adding to queue
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Do optimizations for "remove locale" command. Remove any existing "set values" and "add locale"
+	 * for same locale that existing before (if we don't have other commands on this path).
+	 */
+	@Override
+	public void addToCommandList(List<AbstractCommand> m_commands) {
+		LocaleInfo locale = getLocale();
+		for (int index = m_commands.size() - 1; index >= 0; index--) {
+			AbstractCommand oldCommand = m_commands.get(index);
+			// "set values" found
+			if (oldCommand instanceof SetValuesCommand) {
+				SetValuesCommand oldSetValuesCommand = (SetValuesCommand) oldCommand;
+				// if same locale, remove it
+				if (oldSetValuesCommand.getLocale().equals(locale)) {
+					m_commands.remove(index);
+				}
+				// keep looking
+				continue;
+			}
+			// "add locale" found
+			if (oldCommand instanceof AddLocaleCommand) {
+				AddLocaleCommand oldAddLocaleCommand = (AddLocaleCommand) oldCommand;
+				// if same locale, remove it
+				if (oldAddLocaleCommand.getLocale().equals(locale)) {
+					m_commands.remove(index);
+					// after removing "add locale" we can not expect any commands for this locale ;-)
+					return;
+				}
+				// keep looking
+				continue;
+			}
+			// if we found any other command, we can not change anything before it, so stop looking
+			break;
+		}
+		//
+		super.addToCommandList(m_commands);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/commands/RenameKeyCommand.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/commands/RenameKeyCommand.java
index 234f263a8..7635c3f9a 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/commands/RenameKeyCommand.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/commands/RenameKeyCommand.java
@@ -24,93 +24,93 @@
  * @coverage core.nls
  */
 public final class RenameKeyCommand extends AbstractCommand {
-  private final String m_oldKey;
-  private final String m_newKey;
-  private Map<String, String> m_oldToNewMap;
-  private Map<String, String> m_newToOldMap;
+	private final String m_oldKey;
+	private final String m_newKey;
+	private Map<String, String> m_oldToNewMap;
+	private Map<String, String> m_newToOldMap;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public RenameKeyCommand(IEditableSource editableSource, String oldKey, String newKey) {
-    super(editableSource);
-    m_oldKey = oldKey;
-    m_newKey = newKey;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public RenameKeyCommand(IEditableSource editableSource, String oldKey, String newKey) {
+		super(editableSource);
+		m_oldKey = oldKey;
+		m_newKey = newKey;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public Map<String, String> getOldToNewMap() {
-    if (m_oldToNewMap == null) {
-      m_oldToNewMap = Maps.newHashMap();
-      m_oldToNewMap.put(m_oldKey, m_newKey);
-    }
-    return m_oldToNewMap;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public Map<String, String> getOldToNewMap() {
+		if (m_oldToNewMap == null) {
+			m_oldToNewMap = Maps.newHashMap();
+			m_oldToNewMap.put(m_oldKey, m_newKey);
+		}
+		return m_oldToNewMap;
+	}
 
-  private Map<String, String> getNewToOldMap() {
-    if (m_newToOldMap == null) {
-      m_newToOldMap = Maps.newHashMap();
-      m_newToOldMap.put(m_newKey, m_oldKey);
-    }
-    return m_newToOldMap;
-  }
+	private Map<String, String> getNewToOldMap() {
+		if (m_newToOldMap == null) {
+			m_newToOldMap = Maps.newHashMap();
+			m_newToOldMap.put(m_newKey, m_oldKey);
+		}
+		return m_newToOldMap;
+	}
 
-  private void merge(RenameKeyCommand oldCommand) {
-    m_oldToNewMap = oldCommand.getOldToNewMap();
-    m_newToOldMap = oldCommand.getNewToOldMap();
-    // prepare "original" key for "old" key
-    String oriKey;
-    {
-      // if we already renamed "very old" into "old", we can get "original"
-      oriKey = m_newToOldMap.remove(m_oldKey);
-      // no, this is first time when we rename "old", so use it as "original"
-      if (oriKey == null) {
-        oriKey = m_oldKey;
-      }
-    }
-    // update map's
-    m_oldToNewMap.put(oriKey, m_newKey);
-    m_newToOldMap.put(m_newKey, oriKey);
-  }
+	private void merge(RenameKeyCommand oldCommand) {
+		m_oldToNewMap = oldCommand.getOldToNewMap();
+		m_newToOldMap = oldCommand.getNewToOldMap();
+		// prepare "original" key for "old" key
+		String oriKey;
+		{
+			// if we already renamed "very old" into "old", we can get "original"
+			oriKey = m_newToOldMap.remove(m_oldKey);
+			// no, this is first time when we rename "old", so use it as "original"
+			if (oriKey == null) {
+				oriKey = m_oldKey;
+			}
+		}
+		// update map's
+		m_oldToNewMap.put(oriKey, m_newKey);
+		m_newToOldMap.put(m_newKey, oriKey);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Adding to queue
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Merge with any existing {@link RenameKeyCommand} for same source (if we don't have other
-   * commands on this path).
-   */
-  @Override
-  public void addToCommandList(List<AbstractCommand> commands) {
-    for (int index = commands.size() - 1; index >= 0; index--) {
-      AbstractCommand oldCommand = commands.get(index);
-      // "set values" found
-      if (oldCommand instanceof SetValuesCommand) {
-        continue;
-      }
-      // "rename key" found
-      if (oldCommand instanceof RenameKeyCommand) {
-        RenameKeyCommand oldRenameKeyCommand = (RenameKeyCommand) oldCommand;
-        // merge with "rename key" for same source
-        if (oldRenameKeyCommand.getEditableSource() == getEditableSource()) {
-          merge(oldRenameKeyCommand);
-          commands.remove(index);
-        }
-        // keep looking
-        continue;
-      }
-      // if we found any other command, we can not change anything before it, so stop looking
-      break;
-    }
-    //
-    super.addToCommandList(commands);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Adding to queue
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Merge with any existing {@link RenameKeyCommand} for same source (if we don't have other
+	 * commands on this path).
+	 */
+	@Override
+	public void addToCommandList(List<AbstractCommand> commands) {
+		for (int index = commands.size() - 1; index >= 0; index--) {
+			AbstractCommand oldCommand = commands.get(index);
+			// "set values" found
+			if (oldCommand instanceof SetValuesCommand) {
+				continue;
+			}
+			// "rename key" found
+			if (oldCommand instanceof RenameKeyCommand) {
+				RenameKeyCommand oldRenameKeyCommand = (RenameKeyCommand) oldCommand;
+				// merge with "rename key" for same source
+				if (oldRenameKeyCommand.getEditableSource() == getEditableSource()) {
+					merge(oldRenameKeyCommand);
+					commands.remove(index);
+				}
+				// keep looking
+				continue;
+			}
+			// if we found any other command, we can not change anything before it, so stop looking
+			break;
+		}
+		//
+		super.addToCommandList(commands);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/commands/SetValuesCommand.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/commands/SetValuesCommand.java
index 7fdb89ab5..c5a9b614f 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/commands/SetValuesCommand.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/commands/SetValuesCommand.java
@@ -24,76 +24,76 @@
  * @coverage core.nls
  */
 public final class SetValuesCommand extends AbstractCommand {
-  private final LocaleInfo m_locale;
-  private final Map<String, String> m_values;
+	private final LocaleInfo m_locale;
+	private final Map<String, String> m_values;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SetValuesCommand(IEditableSource editableSource,
-      LocaleInfo locale,
-      Map<String, String> values) {
-    super(editableSource);
-    m_locale = locale;
-    m_values = new HashMap<String, String>(values);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SetValuesCommand(IEditableSource editableSource,
+			LocaleInfo locale,
+			Map<String, String> values) {
+		super(editableSource);
+		m_locale = locale;
+		m_values = new HashMap<String, String>(values);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public LocaleInfo getLocale() {
-    return m_locale;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public LocaleInfo getLocale() {
+		return m_locale;
+	}
 
-  public Map<String, String> getValues() {
-    return m_values;
-  }
+	public Map<String, String> getValues() {
+		return m_values;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Adding to queue
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Remove any existing "set values" for same locale that existing before (if we don't have other
-   * commands on this path).
-   */
-  @Override
-  public void addToCommandList(List<AbstractCommand> commands) {
-    LocaleInfo locale = getLocale();
-    for (int index = commands.size() - 1; index >= 0; index--) {
-      AbstractCommand oldCommand = commands.get(index);
-      // "set values" found
-      if (oldCommand instanceof SetValuesCommand) {
-        SetValuesCommand oldSetValuesCommand = (SetValuesCommand) oldCommand;
-        // if same locale, remove it
-        if (oldSetValuesCommand.getLocale().equals(locale)) {
-          commands.remove(index);
-          // stop, we can not have more than one "set values" to remove
-          break;
-        }
-        // keep looking
-        continue;
-      }
-      // "rename key" found
-      if (oldCommand instanceof RenameKeyCommand) {
-        // skip it, "rename key" will replace key in Java source and "set values" will change bundle
-        continue;
-      }
-      // "externalize property" found
-      if (oldCommand instanceof ExternalizePropertyCommand) {
-        // skip it, "externalize property" will replace direct value in Java source with externalized expression
-        // and "set values" will change bundle
-        continue;
-      }
-      // if we found any other command, we can not change anything before it, so stop looking
-      break;
-    }
-    //
-    super.addToCommandList(commands);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Adding to queue
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Remove any existing "set values" for same locale that existing before (if we don't have other
+	 * commands on this path).
+	 */
+	@Override
+	public void addToCommandList(List<AbstractCommand> commands) {
+		LocaleInfo locale = getLocale();
+		for (int index = commands.size() - 1; index >= 0; index--) {
+			AbstractCommand oldCommand = commands.get(index);
+			// "set values" found
+			if (oldCommand instanceof SetValuesCommand) {
+				SetValuesCommand oldSetValuesCommand = (SetValuesCommand) oldCommand;
+				// if same locale, remove it
+				if (oldSetValuesCommand.getLocale().equals(locale)) {
+					commands.remove(index);
+					// stop, we can not have more than one "set values" to remove
+					break;
+				}
+				// keep looking
+				continue;
+			}
+			// "rename key" found
+			if (oldCommand instanceof RenameKeyCommand) {
+				// skip it, "rename key" will replace key in Java source and "set values" will change bundle
+				continue;
+			}
+			// "externalize property" found
+			if (oldCommand instanceof ExternalizePropertyCommand) {
+				// skip it, "externalize property" will replace direct value in Java source with externalized expression
+				// and "set values" will change bundle
+				continue;
+			}
+			// if we found any other command, we can not change anything before it, so stop looking
+			break;
+		}
+		//
+		super.addToCommandList(commands);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/edit/EditableSource.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/edit/EditableSource.java
index d1184bb39..f2c513de4 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/edit/EditableSource.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/edit/EditableSource.java
@@ -51,434 +51,434 @@
  * @coverage core.nls
  */
 public final class EditableSource implements IEditableSource {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Base information
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private String m_shortTitle;
-  private String m_longTitle;
-  private final Set<String> m_keys = Sets.newHashSet();
-  private final Set<String> m_formKeys = Sets.newHashSet();
-  private final HashMap<String, String> m_keyToValue = new HashMap<String, String>();
-  private KeyToComponentsSupport m_keyToComponentsSupport = new KeyToComponentsSupport(false); // initialize by default for case of new source
-  private final Map<LocaleInfo, EditableLocaleInfo> m_localeToInfo = Maps.newTreeMap();
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public EditableSource() {
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access: prepare for editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void setShortTitle(String shortTitle) {
-    m_shortTitle = shortTitle;
-  }
-
-  public void setLongTitle(String longTitle) {
-    m_longTitle = longTitle;
-  }
-
-  /**
-   * Add new locale with values.
-   */
-  public void add(LocaleInfo locale, Map<String, String> keyToValue) {
-    m_localeToInfo.put(locale, new EditableLocaleInfo(locale, keyToValue));
-    m_keys.addAll(keyToValue.keySet());
-    m_keyToValue.putAll(keyToValue);
-  }
-
-  /**
-   * Set keys used in current form.
-   */
-  public void setFormKeys(Set<String> currentFormKeys) {
-    m_formKeys.clear();
-    m_formKeys.addAll(currentFormKeys);
-  }
-
-  public void setKeyToComponentsSupport(KeyToComponentsSupport keyToComponentsSupport) {
-    m_keyToComponentsSupport = keyToComponentsSupport;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Command queue
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private ICommandQueue m_commandQueue;
-
-  @Override
-  public void setCommandQueue(ICommandQueue commandQueue) {
-    m_commandQueue = commandQueue;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Key generator
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private IKeyGeneratorStrategy m_keyGeneratorStrategy;
-
-  @Override
-  public void setKeyGeneratorStrategy(IKeyGeneratorStrategy keyGeneratorStrategy) {
-    m_keyGeneratorStrategy = keyGeneratorStrategy;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IEditableSource: listener
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final List<IEditableSourceListener> m_listeners = Lists.newArrayList();
-
-  @Override
-  public void addListener(IEditableSourceListener listener) {
-    if (!m_listeners.contains(listener)) {
-      m_listeners.add(listener);
-    }
-  }
-
-  @Override
-  public void removeListener(IEditableSourceListener listener) {
-    m_listeners.remove(listener);
-  }
-
-  private void fire_keyAdded(String key, StringPropertyInfo propertyInfo) {
-    for (IEditableSourceListener listener : m_listeners) {
-      listener.keyAdded(key, propertyInfo);
-    }
-  }
-
-  private void fire_keyRemoved(String key) {
-    for (IEditableSourceListener listener : m_listeners) {
-      listener.keyRemoved(key);
-    }
-  }
-
-  private void fire_keyRenamed(String oldKey, String newKey) {
-    for (IEditableSourceListener listener : m_listeners) {
-      listener.keyRenamed(oldKey, newKey);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IEditableSource: access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getShortTitle() {
-    return m_shortTitle;
-  }
-
-  @Override
-  public String getLongTitle() {
-    return m_longTitle;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IEditableSource: locales
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public LocaleInfo[] getLocales() {
-    return m_localeToInfo.keySet().toArray(new LocaleInfo[m_localeToInfo.keySet().size()]);
-  }
-
-  @Override
-  public void addLocale(LocaleInfo locale, LocaleInfo baseLocale) {
-    // prepare base key -> value map
-    Map<String, String> keyToValue;
-    if (baseLocale != null) {
-      EditableLocaleInfo editableBaseLocale = getEditableLocale(baseLocale);
-      keyToValue = new HashMap<String, String>(editableBaseLocale.m_keyToValue);
-    } else {
-      keyToValue = Maps.newHashMap();
-    }
-    // add new locale
-    add(locale, keyToValue);
-    // add command
-    m_commandQueue.addCommand(new AddLocaleCommand(this, locale, keyToValue));
-  }
-
-  @Override
-  public void removeLocale(LocaleInfo locale) {
-    m_localeToInfo.remove(locale);
-    // add command
-    m_commandQueue.addCommand(new RemoveLocaleCommand(this, locale));
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IEditableSource: keys
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Set<String> getKeys() {
-    return m_keys;
-  }
-
-  @Override
-  public Set<String> getFormKeys() {
-    return m_formKeys;
-  }
-
-  @Override
-  public void renameKey(String oldKey, String newKey) {
-    // if keys are equal, ignore replace request
-    if (oldKey.equals(newKey)) {
-      return;
-    }
-    // check, may be there is already such key in some bundle
-    boolean containsNewKey = false;
-    for (EditableLocaleInfo editableLocale : m_localeToInfo.values()) {
-      containsNewKey |= editableLocale.containsKey(newKey);
-    }
-    // ask user, should we keep value of existing newKey or value of key that is renaming to newKey
-    boolean keepNewKeyValue = false;
-    if (containsNewKey) {
-      MessageDialog dialog = new MessageDialog(DesignerPlugin.getShell(),
-          Messages.EditableSource_renameConfirmTitle,
-          null,
-          MessageFormat.format(Messages.EditableSource_renameConfirmKeepExistingValue, newKey),
-          MessageDialog.QUESTION,
-          new String[]{
-              Messages.EditableSource_renameConfirmYesKeep,
-              Messages.EditableSource_renameConfirmNoUseRenaming},
-          0);
-      int openResult = dialog.open();
-      if (openResult == SWT.DEFAULT) {
-        // cancel pressed
-        return;
-      }
-      keepNewKeyValue = openResult == 0;
-    }
-    // add "rename key" command
-    m_commandQueue.addCommand(new RenameKeyCommand(this, oldKey, newKey));
-    // replace key in locale informations
-    for (EditableLocaleInfo editableLocale : m_localeToInfo.values()) {
-      boolean renamed = editableLocale.renameKey(oldKey, newKey, keepNewKeyValue);
-      // add "set values" command
-      if (renamed) {
-        addLocaleValuesCommand(editableLocale);
-      }
-    }
-    // replace key in form keys
-    m_formKeys.remove(oldKey);
-    m_formKeys.add(newKey);
-    // replace key in all keys
-    m_keys.remove(oldKey);
-    m_keys.add(newKey);
-    String valueOfRenamedKey = m_keyToValue.get(oldKey);
-    m_keyToValue.remove(oldKey);
-    m_keyToValue.put(newKey, valueOfRenamedKey);
-    // replace key in key -> components
-    m_keyToComponentsSupport.rename(oldKey, newKey);
-    // notify listeners that key was renamed
-    fire_keyRenamed(oldKey, newKey);
-  }
-
-  @Override
-  public void externalize(StringPropertyInfo propertyInfo, boolean copyToAllLocales) {
-    // prepare property "properties" ;-)
-    JavaInfo component = propertyInfo.getComponent();
-    GenericProperty property = propertyInfo.getProperty();
-    String value = propertyInfo.getValue();
-    // prepare key
-    String baseKey = null;
-    String key = null;
-    {
-      IPreferenceStore preferences = component.getDescription().getToolkit().getPreferences();
-      if (preferences.getBoolean(IPreferenceConstants.P_NLS_KEY_AS_STRING_VALUE_ONLY)) {
-        baseKey = AbstractSource.shrinkText(value);
-        if (baseKey == null) {
-          return;
-        }
-      } else {
-        baseKey = m_keyGeneratorStrategy.generateBaseKey(component, property);
-        if (preferences.getBoolean(IPreferenceConstants.P_NLS_KEY_HAS_STRING_VALUE)) {
-          baseKey += "_" + AbstractSource.shrinkText(value);
-        }
-      }
-      key = AbstractSource.generateUniqueKey(m_keyToValue, baseKey, value);
-    }
-    // add key to all/current key sets
-    m_keys.add(key);
-    m_formKeys.add(key);
-    m_keyToValue.put(key, value);
-    m_keyToComponentsSupport.add(component, key);
-    // add "externalize property" command
-    m_commandQueue.addCommand(new ExternalizePropertyCommand(this, component, property, key));
-    // add current value to default (or all, if required) locale, this will also add "set values" command
-    for (LocaleInfo locale : m_localeToInfo.keySet()) {
-      if (locale.isDefault() || copyToAllLocales) {
-        setValue(locale, key, value);
-      }
-    }
-    // notify listeners that property was externalized with this key
-    fire_keyAdded(key, propertyInfo);
-  }
-
-  @Override
-  public void internalizeKey(String key) {
-    m_formKeys.remove(key);
-    m_keys.remove(key);
-    m_keyToValue.remove(key);
-    m_keyToComponentsSupport.remove(key);
-    // add "internalize key" command
-    m_commandQueue.addCommand(new InternalizeKeyCommand(this, key));
-    // remove key from locale informations
-    for (EditableLocaleInfo editableLocale : m_localeToInfo.values()) {
-      boolean removed = editableLocale.removeKey(key);
-      // add "set values" command
-      if (removed) {
-        addLocaleValuesCommand(editableLocale);
-      }
-    }
-    // notify listeners that key was removed
-    fire_keyRemoved(key);
-  }
-
-  @Override
-  public void addKey(String key, String value) {
-    // add key to set
-    m_keys.add(key);
-    m_keyToValue.put(key, value);
-    // add "add key" command
-    m_commandQueue.addCommand(new AddKeyCommand(this, key));
-    // add value to  all locales, this will also add "set values" command
-    for (LocaleInfo locale : getLocales()) {
-      setValue(locale, key, value);
-    }
-    // notify listeners that key was added
-    fire_keyAdded(key, null);
-  }
-
-  @Override
-  public Set<JavaInfo> getComponentsByKey(String key) {
-    return m_keyToComponentsSupport.getComponentsByKey(key);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IEditableSource: values
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getValue(LocaleInfo locale, String key) {
-    EditableLocaleInfo editableLocale = getEditableLocale(locale);
-    if (editableLocale != null) {
-      return editableLocale.getValue(key);
-    }
-    return null;
-  }
-
-  @Override
-  public void setValue(LocaleInfo locale, String key, String value) {
-    EditableLocaleInfo editableLocale = getEditableLocale(locale);
-    boolean changed = editableLocale.setValue(key, value);
-    // add command
-    if (changed) {
-      addLocaleValuesCommand(editableLocale);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Get editable locale information for given locale.
-   */
-  private EditableLocaleInfo getEditableLocale(LocaleInfo locale) {
-    return m_localeToInfo.get(locale);
-  }
-
-  /**
-   * Add "set values" command for given editable locale.
-   */
-  private void addLocaleValuesCommand(EditableLocaleInfo editableLocale) {
-    m_commandQueue.addCommand(
-        new SetValuesCommand(this, editableLocale.m_locale, editableLocale.m_keyToValue));
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editable locale information
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Information object for editing single locale.
-   */
-  private static class EditableLocaleInfo {
-    private final LocaleInfo m_locale;
-    private final Map<String, String> m_keyToValue;
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public EditableLocaleInfo(LocaleInfo locale, Map<String, String> keyToValue) {
-      m_locale = locale;
-      m_keyToValue = new HashMap<String, String>(keyToValue);
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Keys
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public boolean containsKey(String key) {
-      return m_keyToValue.containsKey(key);
-    }
-
-    public boolean renameKey(String oldKey, String newKey, boolean keepNewKeyValue) {
-      String value = m_keyToValue.remove(oldKey);
-      if (value != null) {
-        if (!keepNewKeyValue) {
-          m_keyToValue.put(newKey, value);
-        }
-      }
-      return value != null;
-    }
-
-    public boolean removeKey(String key) {
-      return m_keyToValue.remove(key) != null;
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Values
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public String getValue(String key) {
-      return m_keyToValue.get(key);
-    }
-
-    /**
-     * Change value and return <code>true</code> if value was different than previous one.
-     */
-    public boolean setValue(String key, String value) {
-      String oldValue = getValue(key);
-      // check, may be we already have same value
-      if (oldValue == null && StringUtils.isEmpty(value)) {
-        return false;
-      }
-      if (oldValue != null && oldValue.equals(value)) {
-        return false;
-      }
-      // change value and mark locale as changed
-      m_keyToValue.put(key, value);
-      return true;
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Base information
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private String m_shortTitle;
+	private String m_longTitle;
+	private final Set<String> m_keys = Sets.newHashSet();
+	private final Set<String> m_formKeys = Sets.newHashSet();
+	private final HashMap<String, String> m_keyToValue = new HashMap<String, String>();
+	private KeyToComponentsSupport m_keyToComponentsSupport = new KeyToComponentsSupport(false); // initialize by default for case of new source
+	private final Map<LocaleInfo, EditableLocaleInfo> m_localeToInfo = Maps.newTreeMap();
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public EditableSource() {
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access: prepare for editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void setShortTitle(String shortTitle) {
+		m_shortTitle = shortTitle;
+	}
+
+	public void setLongTitle(String longTitle) {
+		m_longTitle = longTitle;
+	}
+
+	/**
+	 * Add new locale with values.
+	 */
+	public void add(LocaleInfo locale, Map<String, String> keyToValue) {
+		m_localeToInfo.put(locale, new EditableLocaleInfo(locale, keyToValue));
+		m_keys.addAll(keyToValue.keySet());
+		m_keyToValue.putAll(keyToValue);
+	}
+
+	/**
+	 * Set keys used in current form.
+	 */
+	public void setFormKeys(Set<String> currentFormKeys) {
+		m_formKeys.clear();
+		m_formKeys.addAll(currentFormKeys);
+	}
+
+	public void setKeyToComponentsSupport(KeyToComponentsSupport keyToComponentsSupport) {
+		m_keyToComponentsSupport = keyToComponentsSupport;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Command queue
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private ICommandQueue m_commandQueue;
+
+	@Override
+	public void setCommandQueue(ICommandQueue commandQueue) {
+		m_commandQueue = commandQueue;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Key generator
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private IKeyGeneratorStrategy m_keyGeneratorStrategy;
+
+	@Override
+	public void setKeyGeneratorStrategy(IKeyGeneratorStrategy keyGeneratorStrategy) {
+		m_keyGeneratorStrategy = keyGeneratorStrategy;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IEditableSource: listener
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final List<IEditableSourceListener> m_listeners = Lists.newArrayList();
+
+	@Override
+	public void addListener(IEditableSourceListener listener) {
+		if (!m_listeners.contains(listener)) {
+			m_listeners.add(listener);
+		}
+	}
+
+	@Override
+	public void removeListener(IEditableSourceListener listener) {
+		m_listeners.remove(listener);
+	}
+
+	private void fire_keyAdded(String key, StringPropertyInfo propertyInfo) {
+		for (IEditableSourceListener listener : m_listeners) {
+			listener.keyAdded(key, propertyInfo);
+		}
+	}
+
+	private void fire_keyRemoved(String key) {
+		for (IEditableSourceListener listener : m_listeners) {
+			listener.keyRemoved(key);
+		}
+	}
+
+	private void fire_keyRenamed(String oldKey, String newKey) {
+		for (IEditableSourceListener listener : m_listeners) {
+			listener.keyRenamed(oldKey, newKey);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IEditableSource: access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getShortTitle() {
+		return m_shortTitle;
+	}
+
+	@Override
+	public String getLongTitle() {
+		return m_longTitle;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IEditableSource: locales
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public LocaleInfo[] getLocales() {
+		return m_localeToInfo.keySet().toArray(new LocaleInfo[m_localeToInfo.keySet().size()]);
+	}
+
+	@Override
+	public void addLocale(LocaleInfo locale, LocaleInfo baseLocale) {
+		// prepare base key -> value map
+		Map<String, String> keyToValue;
+		if (baseLocale != null) {
+			EditableLocaleInfo editableBaseLocale = getEditableLocale(baseLocale);
+			keyToValue = new HashMap<String, String>(editableBaseLocale.m_keyToValue);
+		} else {
+			keyToValue = Maps.newHashMap();
+		}
+		// add new locale
+		add(locale, keyToValue);
+		// add command
+		m_commandQueue.addCommand(new AddLocaleCommand(this, locale, keyToValue));
+	}
+
+	@Override
+	public void removeLocale(LocaleInfo locale) {
+		m_localeToInfo.remove(locale);
+		// add command
+		m_commandQueue.addCommand(new RemoveLocaleCommand(this, locale));
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IEditableSource: keys
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Set<String> getKeys() {
+		return m_keys;
+	}
+
+	@Override
+	public Set<String> getFormKeys() {
+		return m_formKeys;
+	}
+
+	@Override
+	public void renameKey(String oldKey, String newKey) {
+		// if keys are equal, ignore replace request
+		if (oldKey.equals(newKey)) {
+			return;
+		}
+		// check, may be there is already such key in some bundle
+		boolean containsNewKey = false;
+		for (EditableLocaleInfo editableLocale : m_localeToInfo.values()) {
+			containsNewKey |= editableLocale.containsKey(newKey);
+		}
+		// ask user, should we keep value of existing newKey or value of key that is renaming to newKey
+		boolean keepNewKeyValue = false;
+		if (containsNewKey) {
+			MessageDialog dialog = new MessageDialog(DesignerPlugin.getShell(),
+					Messages.EditableSource_renameConfirmTitle,
+					null,
+					MessageFormat.format(Messages.EditableSource_renameConfirmKeepExistingValue, newKey),
+					MessageDialog.QUESTION,
+					new String[]{
+							Messages.EditableSource_renameConfirmYesKeep,
+							Messages.EditableSource_renameConfirmNoUseRenaming},
+					0);
+			int openResult = dialog.open();
+			if (openResult == SWT.DEFAULT) {
+				// cancel pressed
+				return;
+			}
+			keepNewKeyValue = openResult == 0;
+		}
+		// add "rename key" command
+		m_commandQueue.addCommand(new RenameKeyCommand(this, oldKey, newKey));
+		// replace key in locale informations
+		for (EditableLocaleInfo editableLocale : m_localeToInfo.values()) {
+			boolean renamed = editableLocale.renameKey(oldKey, newKey, keepNewKeyValue);
+			// add "set values" command
+			if (renamed) {
+				addLocaleValuesCommand(editableLocale);
+			}
+		}
+		// replace key in form keys
+		m_formKeys.remove(oldKey);
+		m_formKeys.add(newKey);
+		// replace key in all keys
+		m_keys.remove(oldKey);
+		m_keys.add(newKey);
+		String valueOfRenamedKey = m_keyToValue.get(oldKey);
+		m_keyToValue.remove(oldKey);
+		m_keyToValue.put(newKey, valueOfRenamedKey);
+		// replace key in key -> components
+		m_keyToComponentsSupport.rename(oldKey, newKey);
+		// notify listeners that key was renamed
+		fire_keyRenamed(oldKey, newKey);
+	}
+
+	@Override
+	public void externalize(StringPropertyInfo propertyInfo, boolean copyToAllLocales) {
+		// prepare property "properties" ;-)
+		JavaInfo component = propertyInfo.getComponent();
+		GenericProperty property = propertyInfo.getProperty();
+		String value = propertyInfo.getValue();
+		// prepare key
+		String baseKey = null;
+		String key = null;
+		{
+			IPreferenceStore preferences = component.getDescription().getToolkit().getPreferences();
+			if (preferences.getBoolean(IPreferenceConstants.P_NLS_KEY_AS_STRING_VALUE_ONLY)) {
+				baseKey = AbstractSource.shrinkText(value);
+				if (baseKey == null) {
+					return;
+				}
+			} else {
+				baseKey = m_keyGeneratorStrategy.generateBaseKey(component, property);
+				if (preferences.getBoolean(IPreferenceConstants.P_NLS_KEY_HAS_STRING_VALUE)) {
+					baseKey += "_" + AbstractSource.shrinkText(value);
+				}
+			}
+			key = AbstractSource.generateUniqueKey(m_keyToValue, baseKey, value);
+		}
+		// add key to all/current key sets
+		m_keys.add(key);
+		m_formKeys.add(key);
+		m_keyToValue.put(key, value);
+		m_keyToComponentsSupport.add(component, key);
+		// add "externalize property" command
+		m_commandQueue.addCommand(new ExternalizePropertyCommand(this, component, property, key));
+		// add current value to default (or all, if required) locale, this will also add "set values" command
+		for (LocaleInfo locale : m_localeToInfo.keySet()) {
+			if (locale.isDefault() || copyToAllLocales) {
+				setValue(locale, key, value);
+			}
+		}
+		// notify listeners that property was externalized with this key
+		fire_keyAdded(key, propertyInfo);
+	}
+
+	@Override
+	public void internalizeKey(String key) {
+		m_formKeys.remove(key);
+		m_keys.remove(key);
+		m_keyToValue.remove(key);
+		m_keyToComponentsSupport.remove(key);
+		// add "internalize key" command
+		m_commandQueue.addCommand(new InternalizeKeyCommand(this, key));
+		// remove key from locale informations
+		for (EditableLocaleInfo editableLocale : m_localeToInfo.values()) {
+			boolean removed = editableLocale.removeKey(key);
+			// add "set values" command
+			if (removed) {
+				addLocaleValuesCommand(editableLocale);
+			}
+		}
+		// notify listeners that key was removed
+		fire_keyRemoved(key);
+	}
+
+	@Override
+	public void addKey(String key, String value) {
+		// add key to set
+		m_keys.add(key);
+		m_keyToValue.put(key, value);
+		// add "add key" command
+		m_commandQueue.addCommand(new AddKeyCommand(this, key));
+		// add value to  all locales, this will also add "set values" command
+		for (LocaleInfo locale : getLocales()) {
+			setValue(locale, key, value);
+		}
+		// notify listeners that key was added
+		fire_keyAdded(key, null);
+	}
+
+	@Override
+	public Set<JavaInfo> getComponentsByKey(String key) {
+		return m_keyToComponentsSupport.getComponentsByKey(key);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IEditableSource: values
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getValue(LocaleInfo locale, String key) {
+		EditableLocaleInfo editableLocale = getEditableLocale(locale);
+		if (editableLocale != null) {
+			return editableLocale.getValue(key);
+		}
+		return null;
+	}
+
+	@Override
+	public void setValue(LocaleInfo locale, String key, String value) {
+		EditableLocaleInfo editableLocale = getEditableLocale(locale);
+		boolean changed = editableLocale.setValue(key, value);
+		// add command
+		if (changed) {
+			addLocaleValuesCommand(editableLocale);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Get editable locale information for given locale.
+	 */
+	private EditableLocaleInfo getEditableLocale(LocaleInfo locale) {
+		return m_localeToInfo.get(locale);
+	}
+
+	/**
+	 * Add "set values" command for given editable locale.
+	 */
+	private void addLocaleValuesCommand(EditableLocaleInfo editableLocale) {
+		m_commandQueue.addCommand(
+				new SetValuesCommand(this, editableLocale.m_locale, editableLocale.m_keyToValue));
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editable locale information
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Information object for editing single locale.
+	 */
+	private static class EditableLocaleInfo {
+		private final LocaleInfo m_locale;
+		private final Map<String, String> m_keyToValue;
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public EditableLocaleInfo(LocaleInfo locale, Map<String, String> keyToValue) {
+			m_locale = locale;
+			m_keyToValue = new HashMap<String, String>(keyToValue);
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Keys
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public boolean containsKey(String key) {
+			return m_keyToValue.containsKey(key);
+		}
+
+		public boolean renameKey(String oldKey, String newKey, boolean keepNewKeyValue) {
+			String value = m_keyToValue.remove(oldKey);
+			if (value != null) {
+				if (!keepNewKeyValue) {
+					m_keyToValue.put(newKey, value);
+				}
+			}
+			return value != null;
+		}
+
+		public boolean removeKey(String key) {
+			return m_keyToValue.remove(key) != null;
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Values
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public String getValue(String key) {
+			return m_keyToValue.get(key);
+		}
+
+		/**
+		 * Change value and return <code>true</code> if value was different than previous one.
+		 */
+		public boolean setValue(String key, String value) {
+			String oldValue = getValue(key);
+			// check, may be we already have same value
+			if (oldValue == null && StringUtils.isEmpty(value)) {
+				return false;
+			}
+			if (oldValue != null && oldValue.equals(value)) {
+				return false;
+			}
+			// change value and mark locale as changed
+			m_keyToValue.put(key, value);
+			return true;
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/edit/EditableSupport.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/edit/EditableSupport.java
index bf412eb4c..b7905d89a 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/edit/EditableSupport.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/edit/EditableSupport.java
@@ -45,379 +45,379 @@
  * @coverage core.nls
  */
 public final class EditableSupport implements IEditableSupport, ICommandQueue {
-  private final JavaInfo m_root;
-  private final List<IEditableSource> m_newEditableSources = Lists.newArrayList();
-  private final Map<AbstractSource, IEditableSource> m_sourceToEditable = Maps.newHashMap();
-  private final Map<IEditableSource, AbstractSource> m_editableToSource = Maps.newHashMap();
-  private final MultiKeyMap/*<IEditableSource, String, List<StringPropertyInfo>>*/m_externalizedProperties =
-      new MultiKeyMap();
-  private final Map<JavaInfo, List<StringPropertyInfo>> m_componentToPropertyList =
-      Maps.newHashMap();
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public EditableSupport(NlsSupport support) throws Exception {
-    m_root = support.getRoot();
-    // prepare sources
-    AbstractSource[] sources = support.getSources();
-    for (int i = 0; i < sources.length; i++) {
-      AbstractSource source = sources[i];
-      // prepare editable source
-      IEditableSource editableSource = source.getEditable();
-      hookEditableSource(editableSource);
-      // fill mapping
-      addEditableToSourceMapping(editableSource, source);
-    }
-    // initialize containers
-    initializeProperties(support, support.getRoot());
-    initializePossibleSources();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editable sources listener
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void addEditableSourceListener(final IEditableSource editableSource) {
-    editableSource.addListener(new IEditableSourceListener() {
-      @Override
-      public void keyAdded(String key, Object o) {
-        // add externalized property with current source and given key
-        StringPropertyInfo propertyInfo = (StringPropertyInfo) o;
-        m_externalizedProperties.put(editableSource, key, propertyInfo);
-        // notify listeners
-        fire_externalizedPropertiesChanged();
-      }
-
-      @Override
-      public void keyRemoved(String key) {
-        // remove externalized properties with same source and key
-        m_externalizedProperties.remove(editableSource, key);
-        // notify listeners
-        fire_externalizedPropertiesChanged();
-      }
-
-      @Override
-      public void keyRenamed(String oldKey, String newKey) {
-        Object propertyInfo = m_externalizedProperties.remove(editableSource, oldKey);
-        if (propertyInfo != null) {
-          m_externalizedProperties.put(editableSource, newKey, propertyInfo);
-        }
-      }
-    });
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Initialization: properties
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Fill properties containers.
-   */
-  private void initializeProperties(NlsSupport support, JavaInfo component) throws Exception {
-    // add list of properties for current component
-    {
-      List<StringPropertyInfo> componentProperties = Lists.newArrayList();
-      m_componentToPropertyList.put(component, componentProperties);
-      // prepare list of properties
-      List<Property> properties = Lists.newArrayList(component.getProperties());
-      for (Property property : ImmutableList.copyOf(properties)) {
-        PropertyEditor editor = property.getEditor();
-        if (editor instanceof INlsPropertyContributor) {
-          ((INlsPropertyContributor) editor).contributeNlsProperties(property, properties);
-        }
-      }
-      // fill String properties
-      for (Property property : properties) {
-        if (NlsSupport.isStringProperty(property) && property.isModified()) {
-          GenericProperty stringProperty = (GenericProperty) property;
-          StringPropertyInfo propertyInfo = new StringPropertyInfo(stringProperty);
-          Expression expression = stringProperty.getExpression();
-          if (expression != null) {
-            if (expression instanceof StringLiteral) {
-              componentProperties.add(propertyInfo);
-            } else if (support.isExternalized(expression)) {
-              // in any case add in externalizable properties
-              componentProperties.add(propertyInfo);
-              // prepare source and key
-              AbstractSource source = NlsSupport.getSource(expression);
-              IEditableSource editableSource = getEditableSource(source);
-              String key = source.getKey(expression);
-              // add externalized info
-              m_externalizedProperties.put(editableSource, key, propertyInfo);
-            }
-          }
-        }
-      }
-    }
-    // process children
-    for (JavaInfo child : getTreeChildren(component)) {
-      initializeProperties(support, child);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Possible sources
-  //
-  // "Possible" source is source that exists in current package, but is not used
-  // in current unit. We show "possible" sources only if there are no "real" sources.
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final Map<AbstractSource, IEditableSource> m_possibleSourceToEditableSource =
-      Maps.newHashMap();
-  private final Map<IEditableSource, AbstractSource> m_possibleEditableSourceToSource =
-      Maps.newHashMap();
-
-  /**
-   * Fill possible sources containers.
-   */
-  private void initializePossibleSources() throws Exception {
-    IPackageFragment pkg = (IPackageFragment) m_root.getEditor().getModelUnit().getParent();
-    SourceDescription[] sourceDescriptions = NlsSupport.getSourceDescriptions(m_root);
-    for (int i = 0; i < sourceDescriptions.length; i++) {
-      SourceDescription sourceDescription = sourceDescriptions[i];
-      List<AbstractSource> sources = sourceDescription.getPossibleSources(m_root, pkg);
-      // fill maps for source <-> editable source
-      for (AbstractSource source : sources) {
-        // prepare editable source
-        IEditableSource editableSource = source.getEditable();
-        hookEditableSource(editableSource);
-        // fill mapping
-        m_possibleSourceToEditableSource.put(source, editableSource);
-        m_possibleEditableSourceToSource.put(editableSource, source);
-      }
-    }
-  }
-
-  /**
-   * @return the {@link List} of possible {@link IEditableSource}'s.
-   */
-  private List<IEditableSource> getPossibleEditableSources() {
-    return new ArrayList<IEditableSource>(m_possibleEditableSourceToSource.keySet());
-  }
-
-  /**
-   * @return "possible" {@link AbstractSource} for given {@link IEditableSource}.
-   */
-  public AbstractSource getPossibleSource(IEditableSource editableSource) {
-    return m_possibleEditableSourceToSource.get(editableSource);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IEditableSupport: listener
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final List<IEditableSupportListener> m_listeners = Lists.newArrayList();
-
-  @Override
-  public void addListener(IEditableSupportListener listener) {
-    if (!m_listeners.contains(listener)) {
-      m_listeners.add(listener);
-    }
-  }
-
-  @Override
-  public void removeListener(IEditableSupportListener listener) {
-    m_listeners.remove(listener);
-  }
-
-  private void fire_sourceAdded(IEditableSource source) {
-    for (IEditableSupportListener listener : m_listeners) {
-      listener.sourceAdded(source);
-    }
-  }
-
-  private void fire_externalizedPropertiesChanged() {
-    for (IEditableSupportListener listener : m_listeners) {
-      listener.externalizedPropertiesChanged();
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IEditableSupport: access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public JavaInfo getRoot() {
-    return m_root;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IEditableSupport: sources
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean hasExistingSources() {
-    return !m_sourceToEditable.isEmpty();
-  }
-
-  @Override
-  public List<IEditableSource> getEditableSources() {
-    List<IEditableSource> editableSources = Lists.newArrayList();
-    // add existing and new sources
-    editableSources.addAll(m_sourceToEditable.values());
-    editableSources.addAll(m_newEditableSources);
-    // if we have "real" editable sources, return them
-    if (!editableSources.isEmpty()) {
-      return editableSources;
-    }
-    // return "possible" editable sources
-    return getPossibleEditableSources();
-  }
-
-  @Override
-  public void addSource(IEditableSource editableSource,
-      SourceDescription sourceDescription,
-      Object parameters) {
-    CreateSourceCommand command =
-        new CreateSourceCommand(editableSource, sourceDescription, parameters);
-    addCommand(command);
-    // configure new editable source
-    m_newEditableSources.add(editableSource);
-    editableSource.setCommandQueue(this);
-    // configure listeners
-    addEditableSourceListener(editableSource);
-    fire_sourceAdded(editableSource);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Sources: access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public AbstractSource getSource(IEditableSource editableSource) {
-    return m_editableToSource.get(editableSource);
-  }
-
-  /**
-   * Register new mapping from {@link IEditableSource} to {@link AbstractSource}.<br>
-   * We use this method in "new source" command.
-   */
-  public void addEditableToSourceMapping(IEditableSource editableSource, AbstractSource source) {
-    m_sourceToEditable.put(source, editableSource);
-    m_editableToSource.put(editableSource, source);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Sources: private
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link IEditableSource} for given {@link AbstractSource}.
-   *
-   *         We can not just ask {@link IEditableSource} from {@link AbstractSource} because it
-   *         creates new {@link IEditableSource} each time, but we want use only one editable for
-   *         each source during single editing session.
-   */
-  @Override
-  public IEditableSource getEditableSource(AbstractSource source) {
-    return m_sourceToEditable.get(source);
-  }
-
-  /**
-   * Add hooks for given {@link IEditableSource} . Right now this is: set command queue and add
-   * listener.
-   */
-  private void hookEditableSource(IEditableSource editableSource) {
-    editableSource.setCommandQueue(this);
-    addEditableSourceListener(editableSource);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IEditableSupport: properties
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public List<JavaInfo> getComponents() {
-    return new ArrayList<JavaInfo>(m_componentToPropertyList.keySet());
-  }
-
-  @Override
-  public List<JavaInfo> getTreeChildren(JavaInfo component) throws Exception {
-    List<JavaInfo> selectedTreeChildren = Lists.newArrayList();
-    for (ObjectInfo child : component.getPresentation().getChildrenTree()) {
-      if (child instanceof JavaInfo) {
-        // check if child can be visited
-        /*{
+	private final JavaInfo m_root;
+	private final List<IEditableSource> m_newEditableSources = Lists.newArrayList();
+	private final Map<AbstractSource, IEditableSource> m_sourceToEditable = Maps.newHashMap();
+	private final Map<IEditableSource, AbstractSource> m_editableToSource = Maps.newHashMap();
+	private final MultiKeyMap/*<IEditableSource, String, List<StringPropertyInfo>>*/m_externalizedProperties =
+			new MultiKeyMap();
+	private final Map<JavaInfo, List<StringPropertyInfo>> m_componentToPropertyList =
+			Maps.newHashMap();
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public EditableSupport(NlsSupport support) throws Exception {
+		m_root = support.getRoot();
+		// prepare sources
+		AbstractSource[] sources = support.getSources();
+		for (int i = 0; i < sources.length; i++) {
+			AbstractSource source = sources[i];
+			// prepare editable source
+			IEditableSource editableSource = source.getEditable();
+			hookEditableSource(editableSource);
+			// fill mapping
+			addEditableToSourceMapping(editableSource, source);
+		}
+		// initialize containers
+		initializeProperties(support, support.getRoot());
+		initializePossibleSources();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editable sources listener
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void addEditableSourceListener(final IEditableSource editableSource) {
+		editableSource.addListener(new IEditableSourceListener() {
+			@Override
+			public void keyAdded(String key, Object o) {
+				// add externalized property with current source and given key
+				StringPropertyInfo propertyInfo = (StringPropertyInfo) o;
+				m_externalizedProperties.put(editableSource, key, propertyInfo);
+				// notify listeners
+				fire_externalizedPropertiesChanged();
+			}
+
+			@Override
+			public void keyRemoved(String key) {
+				// remove externalized properties with same source and key
+				m_externalizedProperties.remove(editableSource, key);
+				// notify listeners
+				fire_externalizedPropertiesChanged();
+			}
+
+			@Override
+			public void keyRenamed(String oldKey, String newKey) {
+				Object propertyInfo = m_externalizedProperties.remove(editableSource, oldKey);
+				if (propertyInfo != null) {
+					m_externalizedProperties.put(editableSource, newKey, propertyInfo);
+				}
+			}
+		});
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Initialization: properties
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Fill properties containers.
+	 */
+	private void initializeProperties(NlsSupport support, JavaInfo component) throws Exception {
+		// add list of properties for current component
+		{
+			List<StringPropertyInfo> componentProperties = Lists.newArrayList();
+			m_componentToPropertyList.put(component, componentProperties);
+			// prepare list of properties
+			List<Property> properties = Lists.newArrayList(component.getProperties());
+			for (Property property : ImmutableList.copyOf(properties)) {
+				PropertyEditor editor = property.getEditor();
+				if (editor instanceof INlsPropertyContributor) {
+					((INlsPropertyContributor) editor).contributeNlsProperties(property, properties);
+				}
+			}
+			// fill String properties
+			for (Property property : properties) {
+				if (NlsSupport.isStringProperty(property) && property.isModified()) {
+					GenericProperty stringProperty = (GenericProperty) property;
+					StringPropertyInfo propertyInfo = new StringPropertyInfo(stringProperty);
+					Expression expression = stringProperty.getExpression();
+					if (expression != null) {
+						if (expression instanceof StringLiteral) {
+							componentProperties.add(propertyInfo);
+						} else if (support.isExternalized(expression)) {
+							// in any case add in externalizable properties
+							componentProperties.add(propertyInfo);
+							// prepare source and key
+							AbstractSource source = NlsSupport.getSource(expression);
+							IEditableSource editableSource = getEditableSource(source);
+							String key = source.getKey(expression);
+							// add externalized info
+							m_externalizedProperties.put(editableSource, key, propertyInfo);
+						}
+					}
+				}
+			}
+		}
+		// process children
+		for (JavaInfo child : getTreeChildren(component)) {
+			initializeProperties(support, child);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Possible sources
+	//
+	// "Possible" source is source that exists in current package, but is not used
+	// in current unit. We show "possible" sources only if there are no "real" sources.
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final Map<AbstractSource, IEditableSource> m_possibleSourceToEditableSource =
+			Maps.newHashMap();
+	private final Map<IEditableSource, AbstractSource> m_possibleEditableSourceToSource =
+			Maps.newHashMap();
+
+	/**
+	 * Fill possible sources containers.
+	 */
+	private void initializePossibleSources() throws Exception {
+		IPackageFragment pkg = (IPackageFragment) m_root.getEditor().getModelUnit().getParent();
+		SourceDescription[] sourceDescriptions = NlsSupport.getSourceDescriptions(m_root);
+		for (int i = 0; i < sourceDescriptions.length; i++) {
+			SourceDescription sourceDescription = sourceDescriptions[i];
+			List<AbstractSource> sources = sourceDescription.getPossibleSources(m_root, pkg);
+			// fill maps for source <-> editable source
+			for (AbstractSource source : sources) {
+				// prepare editable source
+				IEditableSource editableSource = source.getEditable();
+				hookEditableSource(editableSource);
+				// fill mapping
+				m_possibleSourceToEditableSource.put(source, editableSource);
+				m_possibleEditableSourceToSource.put(editableSource, source);
+			}
+		}
+	}
+
+	/**
+	 * @return the {@link List} of possible {@link IEditableSource}'s.
+	 */
+	private List<IEditableSource> getPossibleEditableSources() {
+		return new ArrayList<IEditableSource>(m_possibleEditableSourceToSource.keySet());
+	}
+
+	/**
+	 * @return "possible" {@link AbstractSource} for given {@link IEditableSource}.
+	 */
+	public AbstractSource getPossibleSource(IEditableSource editableSource) {
+		return m_possibleEditableSourceToSource.get(editableSource);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IEditableSupport: listener
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final List<IEditableSupportListener> m_listeners = Lists.newArrayList();
+
+	@Override
+	public void addListener(IEditableSupportListener listener) {
+		if (!m_listeners.contains(listener)) {
+			m_listeners.add(listener);
+		}
+	}
+
+	@Override
+	public void removeListener(IEditableSupportListener listener) {
+		m_listeners.remove(listener);
+	}
+
+	private void fire_sourceAdded(IEditableSource source) {
+		for (IEditableSupportListener listener : m_listeners) {
+			listener.sourceAdded(source);
+		}
+	}
+
+	private void fire_externalizedPropertiesChanged() {
+		for (IEditableSupportListener listener : m_listeners) {
+			listener.externalizedPropertiesChanged();
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IEditableSupport: access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public JavaInfo getRoot() {
+		return m_root;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IEditableSupport: sources
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean hasExistingSources() {
+		return !m_sourceToEditable.isEmpty();
+	}
+
+	@Override
+	public List<IEditableSource> getEditableSources() {
+		List<IEditableSource> editableSources = Lists.newArrayList();
+		// add existing and new sources
+		editableSources.addAll(m_sourceToEditable.values());
+		editableSources.addAll(m_newEditableSources);
+		// if we have "real" editable sources, return them
+		if (!editableSources.isEmpty()) {
+			return editableSources;
+		}
+		// return "possible" editable sources
+		return getPossibleEditableSources();
+	}
+
+	@Override
+	public void addSource(IEditableSource editableSource,
+			SourceDescription sourceDescription,
+			Object parameters) {
+		CreateSourceCommand command =
+				new CreateSourceCommand(editableSource, sourceDescription, parameters);
+		addCommand(command);
+		// configure new editable source
+		m_newEditableSources.add(editableSource);
+		editableSource.setCommandQueue(this);
+		// configure listeners
+		addEditableSourceListener(editableSource);
+		fire_sourceAdded(editableSource);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Sources: access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public AbstractSource getSource(IEditableSource editableSource) {
+		return m_editableToSource.get(editableSource);
+	}
+
+	/**
+	 * Register new mapping from {@link IEditableSource} to {@link AbstractSource}.<br>
+	 * We use this method in "new source" command.
+	 */
+	public void addEditableToSourceMapping(IEditableSource editableSource, AbstractSource source) {
+		m_sourceToEditable.put(source, editableSource);
+		m_editableToSource.put(editableSource, source);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Sources: private
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link IEditableSource} for given {@link AbstractSource}.
+	 *
+	 *         We can not just ask {@link IEditableSource} from {@link AbstractSource} because it
+	 *         creates new {@link IEditableSource} each time, but we want use only one editable for
+	 *         each source during single editing session.
+	 */
+	@Override
+	public IEditableSource getEditableSource(AbstractSource source) {
+		return m_sourceToEditable.get(source);
+	}
+
+	/**
+	 * Add hooks for given {@link IEditableSource} . Right now this is: set command queue and add
+	 * listener.
+	 */
+	private void hookEditableSource(IEditableSource editableSource) {
+		editableSource.setCommandQueue(this);
+		addEditableSourceListener(editableSource);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IEditableSupport: properties
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public List<JavaInfo> getComponents() {
+		return new ArrayList<JavaInfo>(m_componentToPropertyList.keySet());
+	}
+
+	@Override
+	public List<JavaInfo> getTreeChildren(JavaInfo component) throws Exception {
+		List<JavaInfo> selectedTreeChildren = Lists.newArrayList();
+		for (ObjectInfo child : component.getPresentation().getChildrenTree()) {
+			if (child instanceof JavaInfo) {
+				// check if child can be visited
+				/*{
          INLSTreeProvider treeProvider = (INLSTreeProvider) child.getAdapter(INLSTreeProvider.class);
          if (treeProvider != null && !treeProvider.shouldVisit()) {
          continue;
          }
          }*/
-        // add child
-        selectedTreeChildren.add((JavaInfo) child);
-      }
-    }
-    return selectedTreeChildren;
-  }
-
-  @Override
-  public List<StringPropertyInfo> getProperties(JavaInfo component) {
-    List<StringPropertyInfo> externalizableProperties = Lists.newArrayList();
-    // prepare all properties of component
-    List<StringPropertyInfo> componentProperties = m_componentToPropertyList.get(component);
-    externalizableProperties.addAll(componentProperties);
-    // remove already externalized properties
-    for (MapIterator I = m_externalizedProperties.mapIterator(); I.hasNext();) {
-      I.next();
-      StringPropertyInfo propertyInfo = (StringPropertyInfo) I.getValue();
-      externalizableProperties.remove(propertyInfo);
-    }
-    // return rest properties
-    return externalizableProperties;
-  }
-
-  @Override
-  public boolean hasPropertiesInTree(JavaInfo component) throws Exception {
-    // check current component
-    if (!getProperties(component).isEmpty()) {
-      return true;
-    }
-    // check children
-    for (JavaInfo child : getTreeChildren(component)) {
-      if (hasPropertiesInTree(child)) {
-        return true;
-      }
-    }
-    // no, we don't have properties
-    return false;
-  }
-
-  @Override
-  public void externalizeProperty(StringPropertyInfo propertyInfo,
-      IEditableSource editableSource,
-      boolean copyToAllLocales) {
-    editableSource.externalize(propertyInfo, copyToAllLocales);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ICommandQueue
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final List<AbstractCommand> m_commands = Lists.newArrayList();
-
-  @Override
-  public void addCommand(AbstractCommand command) {
-    command.addToCommandList(m_commands);
-  }
-
-  /**
-   * @return the {@link List} of {@link AbstractCommand}'s that should be executed to complete
-   *         editing.
-   */
-  public List<AbstractCommand> getCommands() {
-    return m_commands;
-  }
+				// add child
+				selectedTreeChildren.add((JavaInfo) child);
+			}
+		}
+		return selectedTreeChildren;
+	}
+
+	@Override
+	public List<StringPropertyInfo> getProperties(JavaInfo component) {
+		List<StringPropertyInfo> externalizableProperties = Lists.newArrayList();
+		// prepare all properties of component
+		List<StringPropertyInfo> componentProperties = m_componentToPropertyList.get(component);
+		externalizableProperties.addAll(componentProperties);
+		// remove already externalized properties
+		for (MapIterator I = m_externalizedProperties.mapIterator(); I.hasNext();) {
+			I.next();
+			StringPropertyInfo propertyInfo = (StringPropertyInfo) I.getValue();
+			externalizableProperties.remove(propertyInfo);
+		}
+		// return rest properties
+		return externalizableProperties;
+	}
+
+	@Override
+	public boolean hasPropertiesInTree(JavaInfo component) throws Exception {
+		// check current component
+		if (!getProperties(component).isEmpty()) {
+			return true;
+		}
+		// check children
+		for (JavaInfo child : getTreeChildren(component)) {
+			if (hasPropertiesInTree(child)) {
+				return true;
+			}
+		}
+		// no, we don't have properties
+		return false;
+	}
+
+	@Override
+	public void externalizeProperty(StringPropertyInfo propertyInfo,
+			IEditableSource editableSource,
+			boolean copyToAllLocales) {
+		editableSource.externalize(propertyInfo, copyToAllLocales);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ICommandQueue
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final List<AbstractCommand> m_commands = Lists.newArrayList();
+
+	@Override
+	public void addCommand(AbstractCommand command) {
+		command.addToCommandList(m_commands);
+	}
+
+	/**
+	 * @return the {@link List} of {@link AbstractCommand}'s that should be executed to complete
+	 *         editing.
+	 */
+	public List<AbstractCommand> getCommands() {
+		return m_commands;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/edit/IEditableSource.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/edit/IEditableSource.java
index c56ff57bd..32b0820b3 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/edit/IEditableSource.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/edit/IEditableSource.java
@@ -27,123 +27,123 @@
  * @coverage core.nls
  */
 public interface IEditableSource {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Command queue
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  void setCommandQueue(ICommandQueue commandQueue);
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Key generator
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  void setKeyGeneratorStrategy(IKeyGeneratorStrategy keyGeneratorStrategy);
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Listener
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Add listener.
-   */
-  void addListener(IEditableSourceListener listener);
-
-  /**
-   * Remove listener.
-   */
-  void removeListener(IEditableSourceListener listener);
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Return "shoft title" that can be used in places where we have litle space.
-   */
-  String getShortTitle();
-
-  /**
-   * Return "long title" that can be used in places where we have much space.
-   */
-  String getLongTitle();
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Locales
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Return all locales in this source.
-   */
-  LocaleInfo[] getLocales();
-
-  /**
-   * Add new locale information based on (possible null) baseLocale.
-   */
-  void addLocale(LocaleInfo locale, LocaleInfo baseLocale);
-
-  /**
-   * Remove locale information.
-   */
-  void removeLocale(LocaleInfo locale);
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Keys
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Return all key's of this source.
-   */
-  Set<String> getKeys();
-
-  /**
-   * Return key's used in in current form.
-   */
-  Set<String> getFormKeys();
-
-  /**
-   * Replace key in all locales.
-   */
-  void renameKey(String oldKey, String newKey);
-
-  /**
-   * Mark passed property as externalized.
-   */
-  void externalize(StringPropertyInfo propertyInfo, boolean copyToAllLocales);
-
-  /**
-   * Internalize key: remove key from all locales and replace externalize expression with default
-   * string literal.
-   */
-  void internalizeKey(String key);
-
-  /**
-   * Set value for given key in all locales.
-   */
-  void addKey(String key, String value);
-
-  /**
-   * @return {@link Set} of components for that have externalized properties with given key.
-   */
-  Set<JavaInfo> getComponentsByKey(String key);
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Values
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Get value for given key and locale.
-   */
-  String getValue(LocaleInfo locale, String key);
-
-  /**
-   * Set value for given key and locale.
-   */
-  void setValue(LocaleInfo locale, String key, String value);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Command queue
+	//
+	////////////////////////////////////////////////////////////////////////////
+	void setCommandQueue(ICommandQueue commandQueue);
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Key generator
+	//
+	////////////////////////////////////////////////////////////////////////////
+	void setKeyGeneratorStrategy(IKeyGeneratorStrategy keyGeneratorStrategy);
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Listener
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Add listener.
+	 */
+	void addListener(IEditableSourceListener listener);
+
+	/**
+	 * Remove listener.
+	 */
+	void removeListener(IEditableSourceListener listener);
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Return "shoft title" that can be used in places where we have litle space.
+	 */
+	String getShortTitle();
+
+	/**
+	 * Return "long title" that can be used in places where we have much space.
+	 */
+	String getLongTitle();
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Locales
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Return all locales in this source.
+	 */
+	LocaleInfo[] getLocales();
+
+	/**
+	 * Add new locale information based on (possible null) baseLocale.
+	 */
+	void addLocale(LocaleInfo locale, LocaleInfo baseLocale);
+
+	/**
+	 * Remove locale information.
+	 */
+	void removeLocale(LocaleInfo locale);
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Keys
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Return all key's of this source.
+	 */
+	Set<String> getKeys();
+
+	/**
+	 * Return key's used in in current form.
+	 */
+	Set<String> getFormKeys();
+
+	/**
+	 * Replace key in all locales.
+	 */
+	void renameKey(String oldKey, String newKey);
+
+	/**
+	 * Mark passed property as externalized.
+	 */
+	void externalize(StringPropertyInfo propertyInfo, boolean copyToAllLocales);
+
+	/**
+	 * Internalize key: remove key from all locales and replace externalize expression with default
+	 * string literal.
+	 */
+	void internalizeKey(String key);
+
+	/**
+	 * Set value for given key in all locales.
+	 */
+	void addKey(String key, String value);
+
+	/**
+	 * @return {@link Set} of components for that have externalized properties with given key.
+	 */
+	Set<JavaInfo> getComponentsByKey(String key);
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Values
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Get value for given key and locale.
+	 */
+	String getValue(LocaleInfo locale, String key);
+
+	/**
+	 * Set value for given key and locale.
+	 */
+	void setValue(LocaleInfo locale, String key, String value);
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/edit/IEditableSourceListener.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/edit/IEditableSourceListener.java
index 47cd8f478..ee47de451 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/edit/IEditableSourceListener.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/edit/IEditableSourceListener.java
@@ -20,18 +20,18 @@
  * @coverage core.nls
  */
 public interface IEditableSourceListener {
-  /**
-   * Sent when new key was added.
-   */
-  void keyAdded(String key, Object o);
+	/**
+	 * Sent when new key was added.
+	 */
+	void keyAdded(String key, Object o);
 
-  /**
-   * Sent when key was removed.
-   */
-  void keyRemoved(String key);
+	/**
+	 * Sent when key was removed.
+	 */
+	void keyRemoved(String key);
 
-  /**
-   * Sent when key was renamed.
-   */
-  void keyRenamed(String oldKey, String newKey);
+	/**
+	 * Sent when key was renamed.
+	 */
+	void keyRenamed(String oldKey, String newKey);
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/edit/IEditableSupport.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/edit/IEditableSupport.java
index 81389c1b7..2d4945999 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/edit/IEditableSupport.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/edit/IEditableSupport.java
@@ -26,96 +26,96 @@
  * @coverage core.nls
  */
 public interface IEditableSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Listener
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Add listener.
-   */
-  void addListener(IEditableSupportListener listener);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Listener
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Add listener.
+	 */
+	void addListener(IEditableSupportListener listener);
 
-  /**
-   * Remove listener.
-   */
-  void removeListener(IEditableSupportListener listener);
+	/**
+	 * Remove listener.
+	 */
+	void removeListener(IEditableSupportListener listener);
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the root {@link JavaInfo}.
-   */
-  JavaInfo getRoot();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the root {@link JavaInfo}.
+	 */
+	JavaInfo getRoot();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Sources
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if there are "real" sources.
-   */
-  boolean hasExistingSources();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Sources
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if there are "real" sources.
+	 */
+	boolean hasExistingSources();
 
-  /**
-   * @return the {@link List} of {@link IEditableSource}'s.
-   */
-  List<IEditableSource> getEditableSources();
+	/**
+	 * @return the {@link List} of {@link IEditableSource}'s.
+	 */
+	List<IEditableSource> getEditableSources();
 
-  /**
-   * @return the {@link IEditableSource} for given {@link AbstractSource}.
-   */
-  IEditableSource getEditableSource(AbstractSource source);
+	/**
+	 * @return the {@link IEditableSource} for given {@link AbstractSource}.
+	 */
+	IEditableSource getEditableSource(AbstractSource source);
 
-  /**
-   * @return the {@link AbstractSource} for given {@link IEditableSource}.
-   */
-  AbstractSource getSource(IEditableSource editableSource);
+	/**
+	 * @return the {@link AbstractSource} for given {@link IEditableSource}.
+	 */
+	AbstractSource getSource(IEditableSource editableSource);
 
-  /**
-   * Add new source with given parameters.
-   */
-  void addSource(IEditableSource editableSource,
-      SourceDescription sourceDescription,
-      Object parameters);
+	/**
+	 * Add new source with given parameters.
+	 */
+	void addSource(IEditableSource editableSource,
+			SourceDescription sourceDescription,
+			Object parameters);
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Properties
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link List} of all components.
-   */
-  List<JavaInfo> getComponents();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Properties
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link List} of all components.
+	 */
+	List<JavaInfo> getComponents();
 
-  /**
-   * @return the list of children of given component that should be displayed for selecting
-   *         properties to externalize.
-   */
-  List<JavaInfo> getTreeChildren(JavaInfo component) throws Exception;
+	/**
+	 * @return the list of children of given component that should be displayed for selecting
+	 *         properties to externalize.
+	 */
+	List<JavaInfo> getTreeChildren(JavaInfo component) throws Exception;
 
-  /**
-   * @return {@link StringPropertyInfo}'s that can be externalized in given component.
-   */
-  List<StringPropertyInfo> getProperties(JavaInfo component);
+	/**
+	 * @return {@link StringPropertyInfo}'s that can be externalized in given component.
+	 */
+	List<StringPropertyInfo> getProperties(JavaInfo component);
 
-  /**
-   * Check that given component or any of its children has externalizable properties.
-   *
-   * For example if we don't have such properties, we don't need to display this component and its
-   * children in tree of externalizable properties.
-   */
-  boolean hasPropertiesInTree(JavaInfo component) throws Exception;
+	/**
+	 * Check that given component or any of its children has externalizable properties.
+	 *
+	 * For example if we don't have such properties, we don't need to display this component and its
+	 * children in tree of externalizable properties.
+	 */
+	boolean hasPropertiesInTree(JavaInfo component) throws Exception;
 
-  /**
-   * Externalize given property in given source.
-   */
-  void externalizeProperty(StringPropertyInfo propertyInfo,
-      IEditableSource source,
-      boolean copyToAllLocales);
+	/**
+	 * Externalize given property in given source.
+	 */
+	void externalizeProperty(StringPropertyInfo propertyInfo,
+			IEditableSource source,
+			boolean copyToAllLocales);
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/edit/IEditableSupportListener.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/edit/IEditableSupportListener.java
index 4c99855a1..7d2800b4e 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/edit/IEditableSupportListener.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/edit/IEditableSupportListener.java
@@ -20,16 +20,16 @@
  * @coverage core.nls
  */
 public abstract class IEditableSupportListener {
-  /**
-   * Sent when new editable source was added.
-   */
-  public void sourceAdded(IEditableSource source) {
-  }
+	/**
+	 * Sent when new editable source was added.
+	 */
+	public void sourceAdded(IEditableSource source) {
+	}
 
-  /**
-   * Sent when set of externalized properties was changed - some property was externalized or
-   * internalized.
-   */
-  public void externalizedPropertiesChanged() {
-  }
+	/**
+	 * Sent when set of externalized properties was changed - some property was externalized or
+	 * internalized.
+	 */
+	public void externalizedPropertiesChanged() {
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/edit/StringPropertyInfo.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/edit/StringPropertyInfo.java
index d43ab0179..90497e659 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/edit/StringPropertyInfo.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/edit/StringPropertyInfo.java
@@ -20,51 +20,51 @@
  * @coverage core.nls
  */
 public final class StringPropertyInfo {
-  private final GenericProperty m_property;
-  private final String m_value;
-  private final String m_title;
+	private final GenericProperty m_property;
+	private final String m_value;
+	private final String m_title;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public StringPropertyInfo(GenericProperty property) throws Exception {
-    m_property = property;
-    m_value = (String) m_property.getValue();
-    m_title = m_property.getTitle() + ": " + m_value;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public StringPropertyInfo(GenericProperty property) throws Exception {
+		m_property = property;
+		m_value = (String) m_property.getValue();
+		m_title = m_property.getTitle() + ": " + m_value;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the component of this property.
-   */
-  public JavaInfo getComponent() {
-    return m_property.getJavaInfo();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the component of this property.
+	 */
+	public JavaInfo getComponent() {
+		return m_property.getJavaInfo();
+	}
 
-  /**
-   * @return the {@link GenericProperty} itself.
-   */
-  public GenericProperty getProperty() {
-    return m_property;
-  }
+	/**
+	 * @return the {@link GenericProperty} itself.
+	 */
+	public GenericProperty getProperty() {
+		return m_property;
+	}
 
-  /**
-   * @return the value of property.
-   */
-  public String getValue() {
-    return m_value;
-  }
+	/**
+	 * @return the value of property.
+	 */
+	public String getValue() {
+		return m_value;
+	}
 
-  /**
-   * @return the title to display in UI.
-   */
-  public String getTitle() {
-    return m_title;
-  }
+	/**
+	 * @return the title to display in UI.
+	 */
+	public String getTitle() {
+		return m_title;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/model/AbstractSource.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/model/AbstractSource.java
index b6fd9f2c9..f848d0228 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/model/AbstractSource.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/model/AbstractSource.java
@@ -41,433 +41,433 @@
  * @coverage core.nls
  */
 public abstract class AbstractSource {
-  protected final JavaInfo m_root;
-  protected final IJavaProject m_javaProject;
-  private final KeyToComponentsSupport m_keyToComponentsSupport = new KeyToComponentsSupport(true);
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractSource(JavaInfo root) {
-    m_root = root;
-    m_javaProject = m_root.getEditor().getJavaProject();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Possible sources
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * This method is invoked when we externalize properties into "possible" source, i.e. source that
-   * was not existed or added to compilation unit, but just existed in same package.
-   *
-   * For example "ResourceBundle in field" source can add field here.
-   */
-  public void attachPossible() throws Exception {
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Current form keys
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final Set<String> m_formKeys = Sets.newTreeSet();
-
-  /**
-   * @return the {@link Set} of keys used on current form.
-   */
-  protected final Set<String> getFormKeys() {
-    return m_formKeys;
-  }
-
-  /**
-   * @return the {@link KeyToComponentsSupport}.
-   */
-  public KeyToComponentsSupport getKeyToComponentsSupport() {
-    return m_keyToComponentsSupport;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the title that can be shown to user.
-   */
-  public abstract String getTitle() throws Exception;
-
-  /**
-   * @return the string that tells about type of this source.
-   */
-  public abstract String getTypeTitle() throws Exception;
-
-  /**
-   * @return the list of {@link LocaleInfo} used in this source.
-   */
-  public abstract LocaleInfo[] getLocales() throws Exception;
-
-  /**
-   * @return all keys existing in this source.
-   */
-  public abstract Set<String> getKeys() throws Exception;
-
-  /**
-   * Externalize {@link Expression} of given {@link GenericProperty}.
-   */
-  public abstract void externalize(JavaInfo component, GenericProperty property, String value)
-      throws Exception;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Locale access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final String KEY_LOCALE = "KEY_LOCALE";
-
-  /**
-   * Sets the {@link LocaleInfo} for given component.
-   */
-  public static void setLocaleInfo(JavaInfo javaInfo, LocaleInfo localeInfo) {
-    javaInfo.getRoot().putArbitraryValue(KEY_LOCALE, localeInfo);
-  }
-
-  /**
-   * @return the {@link LocaleInfo} for given component.
-   */
-  public static LocaleInfo getLocaleInfo(JavaInfo javaInfo) {
-    LocaleInfo localeInfo = (LocaleInfo) javaInfo.getRoot().getArbitraryValue(KEY_LOCALE);
-    if (localeInfo == null) {
-      localeInfo = LocaleInfo.DEFAULT;
-    }
-    return localeInfo;
-  }
-
-  /**
-   * @return the {@link LocaleInfo} for this source.
-   */
-  protected final LocaleInfo getLocaleInfo() {
-    return getLocaleInfo(m_root);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Value access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link String} value of {@link Expression}.
-   */
-  public abstract String getValue(Expression expression) throws Exception;
-
-  /**
-   * Changes value of {@link Expression} in external file (for example in *.properties).
-   */
-  public abstract void setValue(Expression expression, String value) throws Exception;
-
-  /**
-   * @return the key for given {@link Expression} or <code>null</code> if expression is not
-   *         externalized.
-   */
-  public abstract String getKey(Expression expression) throws Exception;
-
-  /**
-   * @return <code>true</code> if NLS strings for current locale were externally changed. For
-   *         example, if user changed *.properties file in other editor.
-   */
-  public abstract boolean isExternallyChanged() throws Exception;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Edit support
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link IEditableSource} for this source.<br>
-   *
-   *         When we open dialog, we have "Ok" and "Cancel" buttons. So, we can not just change
-   *         values directly in source using {@link #setValue(JavaInfo, Expression, String)},
-   *         because user can cancel dialog and expect that this will cancel edit. So, we need some
-   *         temporary storage.
-   */
-  public abstract IEditableSource getEditable() throws Exception;
-
-  /**
-   * @return the {@link IKeyRenameStrategy}.
-   */
-  public abstract IKeyRenameStrategy getKeyRenameStrategy();
-
-  /**
-   * Apply new values map for given locale.
-   */
-  public abstract void apply_setValues(LocaleInfo locale, Map<String, String> values)
-      throws Exception;
-
-  /**
-   * Rename key.
-   */
-  public abstract void apply_renameKeys(Map<String, String> oldToNew) throws Exception;
-
-  /**
-   * Add key.
-   */
-  public abstract void apply_addKey(String key) throws Exception;
-
-  /**
-   * Externalize property.
-   */
-  public abstract void apply_externalizeProperty(GenericProperty property, String key)
-      throws Exception;
-
-  /**
-   * Internalize keys.
-   */
-  public abstract void apply_internalizeKeys(Set<String> keys) throws Exception;
-
-  /**
-   * Add new locale with some initial values.
-   */
-  public abstract void apply_addLocale(LocaleInfo locale, Map<String, String> values)
-      throws Exception;
-
-  /**
-   * Remove locale.
-   */
-  public abstract void apply_removeLocale(LocaleInfo locale) throws Exception;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Replace
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Replaces externalized {@link GenericProperty} with given value.
-   */
-  public abstract void replace_toStringLiteral(GenericProperty property, String value)
-      throws Exception;
-
-  /**
-   * Ensures that given {@link GenericProperty} uses key to get value.
-   */
-  public abstract void useKey(GenericProperty property, String key) throws Exception;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Update source on key operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Subclasses should invoke this method after registering correspondence between given component
-   * and key to allow superclass update its information.
-   */
-  protected final void onKeyAdd(JavaInfo component, String key) {
-    // update form keys
-    {
-      m_formKeys.add(key);
-    }
-    // update key -> components map
-    m_keyToComponentsSupport.add(component, key);
-  }
-
-  /**
-   * Subclasses should invoke this method after key renaming to allow superclass update its
-   * information.
-   */
-  protected final void onKeyRename(String oldKey, String newKey) {
-    // update form keys
-    {
-      m_formKeys.remove(oldKey);
-      m_formKeys.add(newKey);
-    }
-    // update key -> components map
-    m_keyToComponentsSupport.rename(oldKey, newKey);
-  }
-
-  /**
-   * Subclasses should invoke this method after key internalizing to allow superclass update its
-   * information.
-   */
-  protected final void onKeyInternalize(String key) {
-    // update form keys
-    {
-      m_formKeys.remove(key);
-    }
-    // update key -> components map
-    m_keyToComponentsSupport.remove(key);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Generate unique key for the given base key based on the existing keys.
-   * <p>
-   * <b>Note:</b> If the base key and its value are the same with an existing key and its value then
-   * the same key is returned and it is the users responsibility of managing them.
-   * </p>
-   *
-   * @param keyToValue
-   *          The hashmap containing all the previous keys and values
-   * @param baseKey
-   *          The current base key
-   * @param value
-   *          The value that corresponds to the base key
-   *
-   * @return Returns a unique key
-   */
-  public static String generateUniqueKey(HashMap<String, String> keyToValue,
-      String baseKey,
-      String value) {
-    if (keyToValue == null || keyToValue.isEmpty()) {
-      return baseKey;
-    }
-    // check, may be base key is already unique
-    if (!keyToValue.containsKey(baseKey)) {
-      return baseKey;
-    }
-    // if the value of the new key is not equal to the value of the old key then create a different one
-    // else return the same and it will be the users responsibility if there are broken keys
-    if (!keyToValue.get(baseKey).equals(value)) {
-      // try keys base_1, base_2, etc
-      for (int index = 1;; index++) {
-        String key = baseKey + "_" + index;
-        if (!keyToValue.containsKey(key)) {
-          return key;
-        }
-      }
-    } else {
-      return baseKey;
-    }
-  }
-
-  /**
-   * Shrinks a string text, if its required, while keeping it descriptive as to its original value.
-   * This method "behaves" differently according to how many words (or how big) the parameter text
-   * has but it <b>always</b> strips any special chars and spaces from the original value. Any
-   * <i>carriage return and next line chars (in Windows, Mac and Linux OS) will also be stripped</i>
-   * and will be considered as word separators.
-   * <p>
-   * <b>Note:</b> The method considers a distinction between small words (<code>letters <= 3</code>)
-   * and normal words (<code>letters > 3</code>). If the text is too big (see scenarios below) then
-   * the small words will be omitted because probably they are of little importance (e.g. the, at
-   * etc).
-   * </p>
-   * <p>
-   * <b>Scenario 1:</b> If the text has up to 5 total words or up to 4 normal words then it is
-   * returned <i>stripped only</i>.
-   * </p>
-   * <p>
-   * <b> Scenario 2:</b> If the text has <code>4 < normal_words < 10</code> then any small words are
-   * omitted and only the normal ones are shown.
-   * </p>
-   * <p>
-   * <b> Scenario 3:</b> If the text has <code>normal_words >= 10</code> then the distinction
-   * between small and normal words ceases to exist and the first 4 words of the text are shown,
-   * followed by "..." and then the last 4 words.
-   * </p>
-   *
-   * @param text
-   *          The text's original value
-   * @return The shrinked text, stripped of any special chars and spaces that the original text
-   *         could have, with "_" as the word separator char. If the text is empty after it has been
-   *         stripped then <i>null</i> is returned.
-   */
-  public static String shrinkText(String text) {
-    // remove all special chars except spaces
-    text = text.replaceAll("[^a-zA-Z0-9\\s]", "");
-    // consider any enters, tabs and next lines as word separators and replace them with space
-    text = text.replaceAll("\\r\\n|\\r|\\n|\\t", " ");
-    // remove the spaces before and after the text (if any) but leave the in-between spaces
-    text = StringUtils.stripToEmpty(text);
-    // if there are many consecutive spaces in-between the words replace them with one space
-    String strippedOnlyText = text.replaceAll("\\s{2,}", " ");
-    String shrinkedText = strippedOnlyText;
-    if (strippedOnlyText == null || strippedOnlyText.isEmpty()) {
-      // string is empty after stripping
-      return null;
-    }
-    // This list will contain only normal words meaning the ones that have 4 letters or more
-    ArrayList<String> normalWords = new ArrayList<String>();
-    String[] words = strippedOnlyText.split(" ");
-    if (words.length > 5) {
-      for (int i = 0; i < words.length; i++) {
-        if (words[i].length() > 3) {
-          normalWords.add(words[i]);
-        }
-      }
-      if (normalWords.size() < 5) {
-        // the text contains 0 or no more than 4 normal words so it is returned stripped only
-        shrinkedText = strippedOnlyText.replace(" ", "_");
-      } else if (normalWords.size() < 10) {
-        // the text contains more than 4 and less than 10 normal words so only these are shown while the small ones are omitted
-        shrinkedText = StringUtils.join(normalWords, "_");
-      } else {
-        // the text contains 10 or more normal words so the first and the last 4 of the total words are shown
-        StringBuilder sb = new StringBuilder();
-        for (int i = 0; i < 4; i++) {
-          sb.append(words[i]);
-          if (i < 3) {
-            sb.append("_");
-          }
-        }
-        sb.append("...");
-        for (int i = words.length - 4; i < words.length; i++) {
-          sb.append(words[i]);
-          if (i < words.length - 1) {
-            sb.append("_");
-          }
-        }
-        shrinkedText = sb.toString();
-      }
-    } else {
-      // the text contains no more than 5 words so it is returned stripped only
-      shrinkedText = strippedOnlyText.replace(" ", "_");
-    }
-    return shrinkedText;
-  }
-
-  /**
-   * @return the name of enclosing {@link TypeDeclaration}, short or qualified accordingly to
-   *         preferences.
-   */
-  protected static String getTypeName(JavaInfo component) {
-    TypeDeclaration typeDeclaration = JavaInfoUtils.getTypeDeclaration(component);
-    IPreferenceStore preferences = component.getDescription().getToolkit().getPreferences();
-    if (preferences.getBoolean(IPreferenceConstants.P_NLS_KEY_QUALIFIED_TYPE_NAME)) {
-      return AstNodeUtils.getFullyQualifiedName(typeDeclaration, false);
-    } else {
-      return typeDeclaration.getName().getIdentifier();
-    }
-  }
-
-//  /**
-//   * Checks if the "Use the text's value as key" checkbox is checked.
-//   *
-//   * @return True if it is checked, false otherwise.
-//   */
-//  public static Boolean checkUseTextValueAsKeyOnly(JavaInfo component) {
-//    IPreferenceStore preferences = component.getDescription().getToolkit().getPreferences();
-//    return preferences.getBoolean(IPreferenceConstants.P_NLS_KEY_AS_TEXT_VALUE_ONLY);
-//  }
-  /**
-   * Ensures that given {@link GenericProperty} is not externalized and has some
-   * {@link StringLiteral} as expression.
-   */
-  protected static void ensureStringLiteral(GenericProperty property) throws Exception {
-    Expression expression = property.getExpression();
-    if (expression != null) {
-      // ask existing source to "de-externalize" expression
-      AbstractSource oldSource = NlsSupport.getSource(expression);
-      if (oldSource != null) {
-        oldSource.replace_toStringLiteral(property, null);
-      }
-    } else {
-      property.setExpression("(java.lang.String) null", Property.UNKNOWN_VALUE);
-    }
-  }
+	protected final JavaInfo m_root;
+	protected final IJavaProject m_javaProject;
+	private final KeyToComponentsSupport m_keyToComponentsSupport = new KeyToComponentsSupport(true);
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractSource(JavaInfo root) {
+		m_root = root;
+		m_javaProject = m_root.getEditor().getJavaProject();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Possible sources
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * This method is invoked when we externalize properties into "possible" source, i.e. source that
+	 * was not existed or added to compilation unit, but just existed in same package.
+	 *
+	 * For example "ResourceBundle in field" source can add field here.
+	 */
+	public void attachPossible() throws Exception {
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Current form keys
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final Set<String> m_formKeys = Sets.newTreeSet();
+
+	/**
+	 * @return the {@link Set} of keys used on current form.
+	 */
+	protected final Set<String> getFormKeys() {
+		return m_formKeys;
+	}
+
+	/**
+	 * @return the {@link KeyToComponentsSupport}.
+	 */
+	public KeyToComponentsSupport getKeyToComponentsSupport() {
+		return m_keyToComponentsSupport;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the title that can be shown to user.
+	 */
+	public abstract String getTitle() throws Exception;
+
+	/**
+	 * @return the string that tells about type of this source.
+	 */
+	public abstract String getTypeTitle() throws Exception;
+
+	/**
+	 * @return the list of {@link LocaleInfo} used in this source.
+	 */
+	public abstract LocaleInfo[] getLocales() throws Exception;
+
+	/**
+	 * @return all keys existing in this source.
+	 */
+	public abstract Set<String> getKeys() throws Exception;
+
+	/**
+	 * Externalize {@link Expression} of given {@link GenericProperty}.
+	 */
+	public abstract void externalize(JavaInfo component, GenericProperty property, String value)
+			throws Exception;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Locale access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final String KEY_LOCALE = "KEY_LOCALE";
+
+	/**
+	 * Sets the {@link LocaleInfo} for given component.
+	 */
+	public static void setLocaleInfo(JavaInfo javaInfo, LocaleInfo localeInfo) {
+		javaInfo.getRoot().putArbitraryValue(KEY_LOCALE, localeInfo);
+	}
+
+	/**
+	 * @return the {@link LocaleInfo} for given component.
+	 */
+	public static LocaleInfo getLocaleInfo(JavaInfo javaInfo) {
+		LocaleInfo localeInfo = (LocaleInfo) javaInfo.getRoot().getArbitraryValue(KEY_LOCALE);
+		if (localeInfo == null) {
+			localeInfo = LocaleInfo.DEFAULT;
+		}
+		return localeInfo;
+	}
+
+	/**
+	 * @return the {@link LocaleInfo} for this source.
+	 */
+	protected final LocaleInfo getLocaleInfo() {
+		return getLocaleInfo(m_root);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Value access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link String} value of {@link Expression}.
+	 */
+	public abstract String getValue(Expression expression) throws Exception;
+
+	/**
+	 * Changes value of {@link Expression} in external file (for example in *.properties).
+	 */
+	public abstract void setValue(Expression expression, String value) throws Exception;
+
+	/**
+	 * @return the key for given {@link Expression} or <code>null</code> if expression is not
+	 *         externalized.
+	 */
+	public abstract String getKey(Expression expression) throws Exception;
+
+	/**
+	 * @return <code>true</code> if NLS strings for current locale were externally changed. For
+	 *         example, if user changed *.properties file in other editor.
+	 */
+	public abstract boolean isExternallyChanged() throws Exception;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Edit support
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link IEditableSource} for this source.<br>
+	 *
+	 *         When we open dialog, we have "Ok" and "Cancel" buttons. So, we can not just change
+	 *         values directly in source using {@link #setValue(JavaInfo, Expression, String)},
+	 *         because user can cancel dialog and expect that this will cancel edit. So, we need some
+	 *         temporary storage.
+	 */
+	public abstract IEditableSource getEditable() throws Exception;
+
+	/**
+	 * @return the {@link IKeyRenameStrategy}.
+	 */
+	public abstract IKeyRenameStrategy getKeyRenameStrategy();
+
+	/**
+	 * Apply new values map for given locale.
+	 */
+	public abstract void apply_setValues(LocaleInfo locale, Map<String, String> values)
+			throws Exception;
+
+	/**
+	 * Rename key.
+	 */
+	public abstract void apply_renameKeys(Map<String, String> oldToNew) throws Exception;
+
+	/**
+	 * Add key.
+	 */
+	public abstract void apply_addKey(String key) throws Exception;
+
+	/**
+	 * Externalize property.
+	 */
+	public abstract void apply_externalizeProperty(GenericProperty property, String key)
+			throws Exception;
+
+	/**
+	 * Internalize keys.
+	 */
+	public abstract void apply_internalizeKeys(Set<String> keys) throws Exception;
+
+	/**
+	 * Add new locale with some initial values.
+	 */
+	public abstract void apply_addLocale(LocaleInfo locale, Map<String, String> values)
+			throws Exception;
+
+	/**
+	 * Remove locale.
+	 */
+	public abstract void apply_removeLocale(LocaleInfo locale) throws Exception;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Replace
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Replaces externalized {@link GenericProperty} with given value.
+	 */
+	public abstract void replace_toStringLiteral(GenericProperty property, String value)
+			throws Exception;
+
+	/**
+	 * Ensures that given {@link GenericProperty} uses key to get value.
+	 */
+	public abstract void useKey(GenericProperty property, String key) throws Exception;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Update source on key operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Subclasses should invoke this method after registering correspondence between given component
+	 * and key to allow superclass update its information.
+	 */
+	protected final void onKeyAdd(JavaInfo component, String key) {
+		// update form keys
+		{
+			m_formKeys.add(key);
+		}
+		// update key -> components map
+		m_keyToComponentsSupport.add(component, key);
+	}
+
+	/**
+	 * Subclasses should invoke this method after key renaming to allow superclass update its
+	 * information.
+	 */
+	protected final void onKeyRename(String oldKey, String newKey) {
+		// update form keys
+		{
+			m_formKeys.remove(oldKey);
+			m_formKeys.add(newKey);
+		}
+		// update key -> components map
+		m_keyToComponentsSupport.rename(oldKey, newKey);
+	}
+
+	/**
+	 * Subclasses should invoke this method after key internalizing to allow superclass update its
+	 * information.
+	 */
+	protected final void onKeyInternalize(String key) {
+		// update form keys
+		{
+			m_formKeys.remove(key);
+		}
+		// update key -> components map
+		m_keyToComponentsSupport.remove(key);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Generate unique key for the given base key based on the existing keys.
+	 * <p>
+	 * <b>Note:</b> If the base key and its value are the same with an existing key and its value then
+	 * the same key is returned and it is the users responsibility of managing them.
+	 * </p>
+	 *
+	 * @param keyToValue
+	 *          The hashmap containing all the previous keys and values
+	 * @param baseKey
+	 *          The current base key
+	 * @param value
+	 *          The value that corresponds to the base key
+	 *
+	 * @return Returns a unique key
+	 */
+	public static String generateUniqueKey(HashMap<String, String> keyToValue,
+			String baseKey,
+			String value) {
+		if (keyToValue == null || keyToValue.isEmpty()) {
+			return baseKey;
+		}
+		// check, may be base key is already unique
+		if (!keyToValue.containsKey(baseKey)) {
+			return baseKey;
+		}
+		// if the value of the new key is not equal to the value of the old key then create a different one
+		// else return the same and it will be the users responsibility if there are broken keys
+		if (!keyToValue.get(baseKey).equals(value)) {
+			// try keys base_1, base_2, etc
+			for (int index = 1;; index++) {
+				String key = baseKey + "_" + index;
+				if (!keyToValue.containsKey(key)) {
+					return key;
+				}
+			}
+		} else {
+			return baseKey;
+		}
+	}
+
+	/**
+	 * Shrinks a string text, if its required, while keeping it descriptive as to its original value.
+	 * This method "behaves" differently according to how many words (or how big) the parameter text
+	 * has but it <b>always</b> strips any special chars and spaces from the original value. Any
+	 * <i>carriage return and next line chars (in Windows, Mac and Linux OS) will also be stripped</i>
+	 * and will be considered as word separators.
+	 * <p>
+	 * <b>Note:</b> The method considers a distinction between small words (<code>letters <= 3</code>)
+	 * and normal words (<code>letters > 3</code>). If the text is too big (see scenarios below) then
+	 * the small words will be omitted because probably they are of little importance (e.g. the, at
+	 * etc).
+	 * </p>
+	 * <p>
+	 * <b>Scenario 1:</b> If the text has up to 5 total words or up to 4 normal words then it is
+	 * returned <i>stripped only</i>.
+	 * </p>
+	 * <p>
+	 * <b> Scenario 2:</b> If the text has <code>4 < normal_words < 10</code> then any small words are
+	 * omitted and only the normal ones are shown.
+	 * </p>
+	 * <p>
+	 * <b> Scenario 3:</b> If the text has <code>normal_words >= 10</code> then the distinction
+	 * between small and normal words ceases to exist and the first 4 words of the text are shown,
+	 * followed by "..." and then the last 4 words.
+	 * </p>
+	 *
+	 * @param text
+	 *          The text's original value
+	 * @return The shrinked text, stripped of any special chars and spaces that the original text
+	 *         could have, with "_" as the word separator char. If the text is empty after it has been
+	 *         stripped then <i>null</i> is returned.
+	 */
+	public static String shrinkText(String text) {
+		// remove all special chars except spaces
+		text = text.replaceAll("[^a-zA-Z0-9\\s]", "");
+		// consider any enters, tabs and next lines as word separators and replace them with space
+		text = text.replaceAll("\\r\\n|\\r|\\n|\\t", " ");
+		// remove the spaces before and after the text (if any) but leave the in-between spaces
+		text = StringUtils.stripToEmpty(text);
+		// if there are many consecutive spaces in-between the words replace them with one space
+		String strippedOnlyText = text.replaceAll("\\s{2,}", " ");
+		String shrinkedText = strippedOnlyText;
+		if (strippedOnlyText == null || strippedOnlyText.isEmpty()) {
+			// string is empty after stripping
+			return null;
+		}
+		// This list will contain only normal words meaning the ones that have 4 letters or more
+		ArrayList<String> normalWords = new ArrayList<String>();
+		String[] words = strippedOnlyText.split(" ");
+		if (words.length > 5) {
+			for (int i = 0; i < words.length; i++) {
+				if (words[i].length() > 3) {
+					normalWords.add(words[i]);
+				}
+			}
+			if (normalWords.size() < 5) {
+				// the text contains 0 or no more than 4 normal words so it is returned stripped only
+				shrinkedText = strippedOnlyText.replace(" ", "_");
+			} else if (normalWords.size() < 10) {
+				// the text contains more than 4 and less than 10 normal words so only these are shown while the small ones are omitted
+				shrinkedText = StringUtils.join(normalWords, "_");
+			} else {
+				// the text contains 10 or more normal words so the first and the last 4 of the total words are shown
+				StringBuilder sb = new StringBuilder();
+				for (int i = 0; i < 4; i++) {
+					sb.append(words[i]);
+					if (i < 3) {
+						sb.append("_");
+					}
+				}
+				sb.append("...");
+				for (int i = words.length - 4; i < words.length; i++) {
+					sb.append(words[i]);
+					if (i < words.length - 1) {
+						sb.append("_");
+					}
+				}
+				shrinkedText = sb.toString();
+			}
+		} else {
+			// the text contains no more than 5 words so it is returned stripped only
+			shrinkedText = strippedOnlyText.replace(" ", "_");
+		}
+		return shrinkedText;
+	}
+
+	/**
+	 * @return the name of enclosing {@link TypeDeclaration}, short or qualified accordingly to
+	 *         preferences.
+	 */
+	protected static String getTypeName(JavaInfo component) {
+		TypeDeclaration typeDeclaration = JavaInfoUtils.getTypeDeclaration(component);
+		IPreferenceStore preferences = component.getDescription().getToolkit().getPreferences();
+		if (preferences.getBoolean(IPreferenceConstants.P_NLS_KEY_QUALIFIED_TYPE_NAME)) {
+			return AstNodeUtils.getFullyQualifiedName(typeDeclaration, false);
+		} else {
+			return typeDeclaration.getName().getIdentifier();
+		}
+	}
+
+	//  /**
+	//   * Checks if the "Use the text's value as key" checkbox is checked.
+	//   *
+	//   * @return True if it is checked, false otherwise.
+	//   */
+	//  public static Boolean checkUseTextValueAsKeyOnly(JavaInfo component) {
+	//    IPreferenceStore preferences = component.getDescription().getToolkit().getPreferences();
+	//    return preferences.getBoolean(IPreferenceConstants.P_NLS_KEY_AS_TEXT_VALUE_ONLY);
+	//  }
+	/**
+	 * Ensures that given {@link GenericProperty} is not externalized and has some
+	 * {@link StringLiteral} as expression.
+	 */
+	protected static void ensureStringLiteral(GenericProperty property) throws Exception {
+		Expression expression = property.getExpression();
+		if (expression != null) {
+			// ask existing source to "de-externalize" expression
+			AbstractSource oldSource = NlsSupport.getSource(expression);
+			if (oldSource != null) {
+				oldSource.replace_toStringLiteral(property, null);
+			}
+		} else {
+			property.setExpression("(java.lang.String) null", Property.UNKNOWN_VALUE);
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/model/IKeyGeneratorStrategy.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/model/IKeyGeneratorStrategy.java
index 04a303174..177115bb9 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/model/IKeyGeneratorStrategy.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/model/IKeyGeneratorStrategy.java
@@ -25,9 +25,9 @@
  * @coverage core.nls
  */
 public interface IKeyGeneratorStrategy {
-  /**
-   * @return the base key for given component and property. We use this method during externalizing
-   *         property.
-   */
-  String generateBaseKey(JavaInfo component, GenericProperty property);
+	/**
+	 * @return the base key for given component and property. We use this method during externalizing
+	 *         property.
+	 */
+	String generateBaseKey(JavaInfo component, GenericProperty property);
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/model/IKeyRenameStrategy.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/model/IKeyRenameStrategy.java
index 2c9a0e225..a923e5256 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/model/IKeyRenameStrategy.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/model/IKeyRenameStrategy.java
@@ -19,9 +19,9 @@
  * @coverage core.nls
  */
 public interface IKeyRenameStrategy {
-  /**
-   * @return the new key. If it is same as any of existing keys, including returning "oldKey", then
-   *         no rename will be performed.
-   */
-  String getNewKey(String oldName, String newName, String oldKey);
+	/**
+	 * @return the new key. If it is same as any of existing keys, including returning "oldKey", then
+	 *         no rename will be performed.
+	 */
+	String getNewKey(String oldName, String newName, String oldKey);
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/model/INlsPropertyContributor.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/model/INlsPropertyContributor.java
index f1d41acb2..5c79e67ba 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/model/INlsPropertyContributor.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/model/INlsPropertyContributor.java
@@ -22,5 +22,5 @@
  * @coverage core.nls
  */
 public interface INlsPropertyContributor {
-  void contributeNlsProperties(Property property, List<Property> properties) throws Exception;
+	void contributeNlsProperties(Property property, List<Property> properties) throws Exception;
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/model/KeyToComponentsSupport.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/model/KeyToComponentsSupport.java
index 812a9c96a..fa99b29d0 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/model/KeyToComponentsSupport.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/model/KeyToComponentsSupport.java
@@ -28,9 +28,9 @@
  * @coverage core.nls
  */
 public final class KeyToComponentsSupport {
-  private final Map<String, Set<JavaInfo>> m_keyToComponents = Maps.newTreeMap();
+	private final Map<String, Set<JavaInfo>> m_keyToComponents = Maps.newTreeMap();
 
-  /*private final IJavaInfoListener m_javaInfoListener = new IJavaInfoListener() {
+	/*private final IJavaInfoListener m_javaInfoListener = new IJavaInfoListener() {
    public void deleted(JavaInfo component) {
    // remove deleted component from key -> components map
    for (Iterator I = m_keyToComponents.values().iterator(); I.hasNext();) {
@@ -39,96 +39,96 @@ public void deleted(JavaInfo component) {
    }
    }
    };*/
-  //private final boolean m_useListener;
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public KeyToComponentsSupport(boolean useListener) {
-    //m_useListener = useListener;
-  }
+	//private final boolean m_useListener;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public KeyToComponentsSupport(boolean useListener) {
+		//m_useListener = useListener;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the copy of this {@link KeyToComponentsSupport}.
-   */
-  public KeyToComponentsSupport getCopy(boolean useListener) {
-    KeyToComponentsSupport copy = new KeyToComponentsSupport(useListener);
-    for (Map.Entry<String, Set<JavaInfo>> entry : m_keyToComponents.entrySet()) {
-      String key = entry.getKey();
-      Set<JavaInfo> components = entry.getValue();
-      //
-      Set<JavaInfo> componentsCopy = new HashSet<JavaInfo>(components);
-      copy.m_keyToComponents.put(key, componentsCopy);
-    }
-    return copy;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the copy of this {@link KeyToComponentsSupport}.
+	 */
+	public KeyToComponentsSupport getCopy(boolean useListener) {
+		KeyToComponentsSupport copy = new KeyToComponentsSupport(useListener);
+		for (Map.Entry<String, Set<JavaInfo>> entry : m_keyToComponents.entrySet()) {
+			String key = entry.getKey();
+			Set<JavaInfo> components = entry.getValue();
+			//
+			Set<JavaInfo> componentsCopy = new HashSet<JavaInfo>(components);
+			copy.m_keyToComponents.put(key, componentsCopy);
+		}
+		return copy;
+	}
 
-  /**
-   * @return the {@link Set} of components for that have externalized properties with given key.
-   */
-  public Set<JavaInfo> getComponentsByKey(String key) {
-    Set<JavaInfo> components = m_keyToComponents.get(key);
-    if (components != null) {
-      return components;
-    }
-    return Collections.emptySet();
-  }
+	/**
+	 * @return the {@link Set} of components for that have externalized properties with given key.
+	 */
+	public Set<JavaInfo> getComponentsByKey(String key) {
+		Set<JavaInfo> components = m_keyToComponents.get(key);
+		if (components != null) {
+			return components;
+		}
+		return Collections.emptySet();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Update source on key operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds correspondence between given component and key.
-   */
-  public void add(JavaInfo component, String key) {
-    // prepare components
-    Set<JavaInfo> components = m_keyToComponents.get(key);
-    if (components == null) {
-      components = Sets.newHashSet();
-      m_keyToComponents.put(key, components);
-    }
-    // add component
-    components.add(component);
-    /*if (m_useListener) {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Update source on key operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds correspondence between given component and key.
+	 */
+	public void add(JavaInfo component, String key) {
+		// prepare components
+		Set<JavaInfo> components = m_keyToComponents.get(key);
+		if (components == null) {
+			components = Sets.newHashSet();
+			m_keyToComponents.put(key, components);
+		}
+		// add component
+		components.add(component);
+		/*if (m_useListener) {
      component.addListener(m_javaInfoListener);
      }*/
-  }
+	}
 
-  /**
-   * Moves components from one key to another.
-   */
-  public void rename(String oldKey, String newKey) {
-    Set<JavaInfo> sourceComponents = m_keyToComponents.remove(oldKey);
-    if (sourceComponents != null) {
-      Set<JavaInfo> targetComponents = m_keyToComponents.get(newKey);
-      if (targetComponents == null) {
-        m_keyToComponents.put(newKey, sourceComponents);
-      } else {
-        targetComponents.addAll(sourceComponents);
-      }
-    }
-  }
+	/**
+	 * Moves components from one key to another.
+	 */
+	public void rename(String oldKey, String newKey) {
+		Set<JavaInfo> sourceComponents = m_keyToComponents.remove(oldKey);
+		if (sourceComponents != null) {
+			Set<JavaInfo> targetComponents = m_keyToComponents.get(newKey);
+			if (targetComponents == null) {
+				m_keyToComponents.put(newKey, sourceComponents);
+			} else {
+				targetComponents.addAll(sourceComponents);
+			}
+		}
+	}
 
-  /**
-   * Removes key.
-   */
-  public void remove(String key) {
-    m_keyToComponents.remove(key);
-  }
+	/**
+	 * Removes key.
+	 */
+	public void remove(String key) {
+		m_keyToComponents.remove(key);
+	}
 
-  /**
-   * Removes component for key.
-   */
-  public void remove(JavaInfo component, String key) {
-    Set<JavaInfo> components = m_keyToComponents.get(key);
-    components.remove(component);
-  }
+	/**
+	 * Removes component for key.
+	 */
+	public void remove(JavaInfo component, String key) {
+		Set<JavaInfo> components = m_keyToComponents.get(key);
+		components.remove(component);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/model/LocaleInfo.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/model/LocaleInfo.java
index 5bd0da79c..56e323d31 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/model/LocaleInfo.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/model/LocaleInfo.java
@@ -27,168 +27,168 @@
  * @coverage core.nls
  */
 public final class LocaleInfo implements Comparable<LocaleInfo> {
-  /**
-   * The default {@link LocaleInfo}.
-   */
-  public static final LocaleInfo DEFAULT = new LocaleInfo(null);
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance fields
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final Locale m_locale;
+	/**
+	 * The default {@link LocaleInfo}.
+	 */
+	public static final LocaleInfo DEFAULT = new LocaleInfo(null);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance fields
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final Locale m_locale;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public LocaleInfo(Locale locale) {
-    m_locale = locale;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public LocaleInfo(Locale locale) {
+		m_locale = locale;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    return getTitle();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		return getTitle();
+	}
 
-  @Override
-  public boolean equals(Object obj) {
-    if (obj == this) {
-      return true;
-    }
-    if (obj instanceof LocaleInfo) {
-      LocaleInfo localeInfo = (LocaleInfo) obj;
-      if (isDefault()) {
-        return localeInfo.isDefault();
-      }
-      return m_locale.equals(localeInfo.m_locale);
-    }
-    return false;
-  }
+	@Override
+	public boolean equals(Object obj) {
+		if (obj == this) {
+			return true;
+		}
+		if (obj instanceof LocaleInfo) {
+			LocaleInfo localeInfo = (LocaleInfo) obj;
+			if (isDefault()) {
+				return localeInfo.isDefault();
+			}
+			return m_locale.equals(localeInfo.m_locale);
+		}
+		return false;
+	}
 
-  @Override
-  public int hashCode() {
-    if (isDefault()) {
-      return 0;
-    }
-    return m_locale.hashCode();
-  }
+	@Override
+	public int hashCode() {
+		if (isDefault()) {
+			return 0;
+		}
+		return m_locale.hashCode();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Comparable
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public int compareTo(LocaleInfo o) {
-    if (m_locale == null) {
-      if (o.m_locale == null) {
-        return 0;
-      }
-      return -1;
-    }
-    if (o.m_locale == null) {
-      return 1;
-    }
-    String localeNameA = m_locale.toString();
-    String localeNameB = o.m_locale.toString();
-    return localeNameA.compareTo(localeNameB);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Comparable
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public int compareTo(LocaleInfo o) {
+		if (m_locale == null) {
+			if (o.m_locale == null) {
+				return 0;
+			}
+			return -1;
+		}
+		if (o.m_locale == null) {
+			return 1;
+		}
+		String localeNameA = m_locale.toString();
+		String localeNameB = o.m_locale.toString();
+		return localeNameA.compareTo(localeNameB);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return {@link Locale} for this {@link LocaleInfo}.
-   */
-  public Locale getLocale() {
-    return m_locale;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return {@link Locale} for this {@link LocaleInfo}.
+	 */
+	public Locale getLocale() {
+		return m_locale;
+	}
 
-  /**
-   * @return <code>true</code> if that {@link Locale} is default.
-   */
-  public boolean isDefault() {
-    return m_locale == null;
-  }
+	/**
+	 * @return <code>true</code> if that {@link Locale} is default.
+	 */
+	public boolean isDefault() {
+		return m_locale == null;
+	}
 
-  /**
-   * @return the title to display in UI.
-   */
-  public String getTitle() {
-    if (isDefault()) {
-      return "(default)";
-    }
-    return m_locale.toString();
-  }
+	/**
+	 * @return the title to display in UI.
+	 */
+	public String getTitle() {
+		if (isDefault()) {
+			return "(default)";
+		}
+		return m_locale.toString();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the "parent" {@link LocaleInfo} from given array.<br>
-   *         Here "parent" is locale that is more general than current one.<br>
-   *         For example "parent" locale for 'ru_RU' is 'ru'.
-   *
-   *         If there are no parent locale in array, return default locale.<br>
-   */
-  public LocaleInfo getParent(LocaleInfo locales[]) {
-    String localeName = m_locale.toString();
-    int lastSeparatorIndex = localeName.lastIndexOf('_');
-    if (lastSeparatorIndex != -1) {
-      String parentLocaleName = localeName.substring(0, lastSeparatorIndex);
-      // try to find locale with parent name
-      for (LocaleInfo locale : locales) {
-        if (locale.getLocale() != null && locale.getLocale().toString().equals(parentLocaleName)) {
-          return locale;
-        }
-      }
-    }
-    // use default
-    return LocaleInfo.DEFAULT;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the "parent" {@link LocaleInfo} from given array.<br>
+	 *         Here "parent" is locale that is more general than current one.<br>
+	 *         For example "parent" locale for 'ru_RU' is 'ru'.
+	 *
+	 *         If there are no parent locale in array, return default locale.<br>
+	 */
+	public LocaleInfo getParent(LocaleInfo locales[]) {
+		String localeName = m_locale.toString();
+		int lastSeparatorIndex = localeName.lastIndexOf('_');
+		if (lastSeparatorIndex != -1) {
+			String parentLocaleName = localeName.substring(0, lastSeparatorIndex);
+			// try to find locale with parent name
+			for (LocaleInfo locale : locales) {
+				if (locale.getLocale() != null && locale.getLocale().toString().equals(parentLocaleName)) {
+					return locale;
+				}
+			}
+		}
+		// use default
+		return LocaleInfo.DEFAULT;
+	}
 
-  /**
-   * @param localeName
-   *          the name of locale, such as "en" or "ru_RU".
-   * @param localeDescription
-   *          the description of {@link Locale}, used in exception.
-   * @return the {@link LocaleInfo} which wraps {@link Locale}.
-   */
-  public static LocaleInfo create(String localeName, String localeDescription) {
-    // try to find locale in list of available locales
-    Locale[] locales = Locale.getAvailableLocales();
-    for (int i = 0; i < locales.length; i++) {
-      Locale locale = locales[i];
-      if (locale.toString().equals(localeName)) {
-        return new LocaleInfo(locale);
-      }
-    }
-    // try to create new, this constructor is since 1.4, so do this in try/catch
-    try {
-      Locale locale;
-      int separatorIndex = localeName.indexOf('_');
-      if (separatorIndex != -1) {
-        String language = localeName.substring(0, separatorIndex);
-        String country = localeName.substring(separatorIndex + 1);
-        locale = new Locale(language, country);
-      } else {
-        locale = new Locale(localeName);
-      }
-      return new LocaleInfo(locale);
-    } catch (Throwable e) {
-      String msg = "Locale not found for " + localeDescription;
-      throw new IllegalArgumentException(msg);
-    }
-  }
+	/**
+	 * @param localeName
+	 *          the name of locale, such as "en" or "ru_RU".
+	 * @param localeDescription
+	 *          the description of {@link Locale}, used in exception.
+	 * @return the {@link LocaleInfo} which wraps {@link Locale}.
+	 */
+	public static LocaleInfo create(String localeName, String localeDescription) {
+		// try to find locale in list of available locales
+		Locale[] locales = Locale.getAvailableLocales();
+		for (int i = 0; i < locales.length; i++) {
+			Locale locale = locales[i];
+			if (locale.toString().equals(localeName)) {
+				return new LocaleInfo(locale);
+			}
+		}
+		// try to create new, this constructor is since 1.4, so do this in try/catch
+		try {
+			Locale locale;
+			int separatorIndex = localeName.indexOf('_');
+			if (separatorIndex != -1) {
+				String language = localeName.substring(0, separatorIndex);
+				String country = localeName.substring(separatorIndex + 1);
+				locale = new Locale(language, country);
+			} else {
+				locale = new Locale(localeName);
+			}
+			return new LocaleInfo(locale);
+		} catch (Throwable e) {
+			String msg = "Locale not found for " + localeDescription;
+			throw new IllegalArgumentException(msg);
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/model/LocalePartInfo.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/model/LocalePartInfo.java
index 0ab07c50e..120f687db 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/model/LocalePartInfo.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/model/LocalePartInfo.java
@@ -19,64 +19,64 @@
  * @coverage core.nls
  */
 public final class LocalePartInfo implements Comparable<LocalePartInfo> {
-  private final String m_name;
-  private final String m_displayName;
-  private final Image m_flagImage;
+	private final String m_name;
+	private final String m_displayName;
+	private final Image m_flagImage;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public LocalePartInfo(String name, String displayName, Image flagImage) {
-    m_name = name;
-    m_displayName = displayName;
-    m_flagImage = flagImage;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public LocalePartInfo(String name, String displayName, Image flagImage) {
+		m_name = name;
+		m_displayName = displayName;
+		m_flagImage = flagImage;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public String getName() {
-    return m_name;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public String getName() {
+		return m_name;
+	}
 
-  public Image getFlagImage() {
-    return m_flagImage;
-  }
+	public Image getFlagImage() {
+		return m_flagImage;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    if (m_name.length() == 0) {
-      return m_displayName;
-    }
-    return m_name + " - " + m_displayName;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		if (m_name.length() == 0) {
+			return m_displayName;
+		}
+		return m_name + " - " + m_displayName;
+	}
 
-  @Override
-  public int hashCode() {
-    return m_name.hashCode();
-  }
+	@Override
+	public int hashCode() {
+		return m_name.hashCode();
+	}
 
-  @Override
-  public boolean equals(Object obj) {
-    return obj instanceof LocalePartInfo && m_name.equals(((LocalePartInfo) obj).m_name);
-  }
+	@Override
+	public boolean equals(Object obj) {
+		return obj instanceof LocalePartInfo && m_name.equals(((LocalePartInfo) obj).m_name);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Comparable
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public int compareTo(LocalePartInfo o) {
-    return m_name.compareTo(o.m_name);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Comparable
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public int compareTo(LocalePartInfo o) {
+		return m_name.compareTo(o.m_name);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/model/LocalePartInfos.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/model/LocalePartInfos.java
index 9d3404238..3ca2d20c9 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/model/LocalePartInfos.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/model/LocalePartInfos.java
@@ -27,80 +27,80 @@
  * @coverage core.nls
  */
 public final class LocalePartInfos {
-  private static LocalePartInfo m_languages[];
-  private static LocalePartInfo m_countries[];
+	private static LocalePartInfo m_languages[];
+	private static LocalePartInfo m_countries[];
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static LocalePartInfo[] getLanguages() {
-    initLanguagesAndCountries();
-    return m_languages;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static LocalePartInfo[] getLanguages() {
+		initLanguagesAndCountries();
+		return m_languages;
+	}
 
-  public static LocalePartInfo[] getCountries() {
-    initLanguagesAndCountries();
-    return m_countries;
-  }
+	public static LocalePartInfo[] getCountries() {
+		initLanguagesAndCountries();
+		return m_countries;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Find items
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static int indexByName(LocalePartInfo[] parts, String name) {
-    for (int i = 0; i < parts.length; i++) {
-      LocalePartInfo part = parts[i];
-      if (part.getName().equals(name)) {
-        return i;
-      }
-    }
-    return -1;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Find items
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static int indexByName(LocalePartInfo[] parts, String name) {
+		for (int i = 0; i < parts.length; i++) {
+			LocalePartInfo part = parts[i];
+			if (part.getName().equals(name)) {
+				return i;
+			}
+		}
+		return -1;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Initialization
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Prepare arrays of all available languages and countries with titles and flags.
-   */
-  private static void initLanguagesAndCountries() {
-    if (m_languages == null) {
-      // languages
-      {
-        Set<LocalePartInfo> languagesSet = Sets.newHashSet();
-        // fill
-        for (String language : Locale.getISOLanguages()) {
-          Locale locale = new Locale(language);
-          Image flagImage = FlagImagesRepository.getFlagImage(locale);
-          languagesSet.add(new LocalePartInfo(locale.getLanguage(),
-              locale.getDisplayLanguage(),
-              flagImage));
-        }
-        // remember as array
-        m_languages = languagesSet.toArray(new LocalePartInfo[languagesSet.size()]);
-        Arrays.sort(m_languages);
-      }
-      // countries
-      {
-        Set<LocalePartInfo> countriesSet = Sets.newHashSet();
-        countriesSet.add(new LocalePartInfo("", "(none)", FlagImagesRepository.getEmptyFlagImage()));
-        // fill
-        for (String country : Locale.getISOCountries()) {
-          Locale locale = new Locale("", country);
-          Image flagImage = FlagImagesRepository.getFlagImage(locale);
-          countriesSet.add(new LocalePartInfo(locale.getCountry(),
-              locale.getDisplayCountry(),
-              flagImage));
-        }
-        // remember as array
-        m_countries = countriesSet.toArray(new LocalePartInfo[countriesSet.size()]);
-        Arrays.sort(m_countries);
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Initialization
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Prepare arrays of all available languages and countries with titles and flags.
+	 */
+	private static void initLanguagesAndCountries() {
+		if (m_languages == null) {
+			// languages
+			{
+				Set<LocalePartInfo> languagesSet = Sets.newHashSet();
+				// fill
+				for (String language : Locale.getISOLanguages()) {
+					Locale locale = new Locale(language);
+					Image flagImage = FlagImagesRepository.getFlagImage(locale);
+					languagesSet.add(new LocalePartInfo(locale.getLanguage(),
+							locale.getDisplayLanguage(),
+							flagImage));
+				}
+				// remember as array
+				m_languages = languagesSet.toArray(new LocalePartInfo[languagesSet.size()]);
+				Arrays.sort(m_languages);
+			}
+			// countries
+			{
+				Set<LocalePartInfo> countriesSet = Sets.newHashSet();
+				countriesSet.add(new LocalePartInfo("", "(none)", FlagImagesRepository.getEmptyFlagImage()));
+				// fill
+				for (String country : Locale.getISOCountries()) {
+					Locale locale = new Locale("", country);
+					Image flagImage = FlagImagesRepository.getFlagImage(locale);
+					countriesSet.add(new LocalePartInfo(locale.getCountry(),
+							locale.getDisplayCountry(),
+							flagImage));
+				}
+				// remember as array
+				m_countries = countriesSet.toArray(new LocalePartInfo[countriesSet.size()]);
+				Arrays.sort(m_countries);
+			}
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/ui/AbstractSourceNewComposite.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/ui/AbstractSourceNewComposite.java
index db5cd199d..6c55478c9 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/ui/AbstractSourceNewComposite.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/ui/AbstractSourceNewComposite.java
@@ -25,70 +25,70 @@
  * @coverage core.nls.ui
  */
 public abstract class AbstractSourceNewComposite extends Composite {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractSourceNewComposite(Composite parent, int style) {
-    super(parent, style);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractSourceNewComposite(Composite parent, int style) {
+		super(parent, style);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Properties change support
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final PropertyChangeSupport m_propertyChangeSupport = new PropertyChangeSupport(this);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Properties change support
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final PropertyChangeSupport m_propertyChangeSupport = new PropertyChangeSupport(this);
 
-  void addPropertyChangeListener(PropertyChangeListener listener) {
-    m_propertyChangeSupport.addPropertyChangeListener(listener);
-  }
+	void addPropertyChangeListener(PropertyChangeListener listener) {
+		m_propertyChangeSupport.addPropertyChangeListener(listener);
+	}
 
-  void removePropertyChangeListener(PropertyChangeListener listener) {
-    m_propertyChangeSupport.removePropertyChangeListener(listener);
-  }
+	void removePropertyChangeListener(PropertyChangeListener listener) {
+		m_propertyChangeSupport.removePropertyChangeListener(listener);
+	}
 
-  protected final void firePropertyChanged(String property, Object oldValue, Object newValue) {
-    m_propertyChangeSupport.firePropertyChange(property, oldValue, newValue);
-  }
+	protected final void firePropertyChanged(String property, Object oldValue, Object newValue) {
+		m_propertyChangeSupport.firePropertyChange(property, oldValue, newValue);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Check
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * This method is returns <code>true</code> if we have enough information for creating new source.
-   */
-  public abstract IStatus getStatus();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Check
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * This method is returns <code>true</code> if we have enough information for creating new source.
+	 */
+	public abstract IStatus getStatus();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Creating
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Returns editable source that will be used later for editing new source.
-   *
-   * @param o
-   *          the parameters created using {@link #createParametersObject()}
-   */
-  public abstract IEditableSource createEditableSource(Object o) throws Exception;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Creating
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Returns editable source that will be used later for editing new source.
+	 *
+	 * @param o
+	 *          the parameters created using {@link #createParametersObject()}
+	 */
+	public abstract IEditableSource createEditableSource(Object o) throws Exception;
 
-  /**
-   * Returns some object that will be passed later to the static method of source class for adding
-   * new source.
-   */
-  public abstract Object createParametersObject() throws Exception;
+	/**
+	 * Returns some object that will be passed later to the static method of source class for adding
+	 * new source.
+	 */
+	public abstract Object createParametersObject() throws Exception;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Display
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Result is piece of Java code that can be displayed to show how this source style looks like.
-   */
-  public abstract String getSample();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Display
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Result is piece of Java code that can be displayed to show how this source style looks like.
+	 */
+	public abstract String getSample();
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/ui/AddKeyValueDialog.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/ui/AddKeyValueDialog.java
index 1862663f8..6fb3e8998 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/ui/AddKeyValueDialog.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/ui/AddKeyValueDialog.java
@@ -29,89 +29,89 @@
  * @coverage core.nls.ui
  */
 public final class AddKeyValueDialog extends AbstractValidationTitleAreaDialog {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AddKeyValueDialog(Shell parentShell) {
-    super(parentShell,
-        DesignerPlugin.getDefault(),
-        Messages.AddKeyValueDialog_title,
-        Messages.AddKeyValueDialog_message,
-        null,
-        null);
-    setShellStyle(SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AddKeyValueDialog(Shell parentShell) {
+		super(parentShell,
+				DesignerPlugin.getDefault(),
+				Messages.AddKeyValueDialog_title,
+				Messages.AddKeyValueDialog_message,
+				null,
+				null);
+		setShellStyle(SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private StringDialogField m_keyField;
-  private StringDialogField m_valueField;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private StringDialogField m_keyField;
+	private StringDialogField m_valueField;
 
-  @Override
-  protected void createControls(Composite container) {
-    m_fieldsContainer = container;
-    GridLayoutFactory.create(container).columns(2);
-    // key
-    {
-      m_keyField = new StringDialogField();
-      doCreateField(m_keyField, Messages.AddKeyValueDialog_keyLabel);
-    }
-    // value
-    {
-      m_valueField = new StringDialogField();
-      doCreateField(m_valueField, Messages.AddKeyValueDialog_valueLabel);
-    }
-  }
+	@Override
+	protected void createControls(Composite container) {
+		m_fieldsContainer = container;
+		GridLayoutFactory.create(container).columns(2);
+		// key
+		{
+			m_keyField = new StringDialogField();
+			doCreateField(m_keyField, Messages.AddKeyValueDialog_keyLabel);
+		}
+		// value
+		{
+			m_valueField = new StringDialogField();
+			doCreateField(m_valueField, Messages.AddKeyValueDialog_valueLabel);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Validation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected final String validate() {
-    // validate key
-    {
-      String key = m_keyField.getText().trim();
-      if (key.length() == 0) {
-        return Messages.AddKeyValueDialog_validateEmptyKey;
-      }
-    }
-    // OK
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Validation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected final String validate() {
+		// validate key
+		{
+			String key = m_keyField.getText().trim();
+			if (key.length() == 0) {
+				return Messages.AddKeyValueDialog_validateEmptyKey;
+			}
+		}
+		// OK
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Composite m_fieldsContainer;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Composite m_fieldsContainer;
 
-  /**
-   * Configures given {@link DialogField} for specific of this dialog.
-   */
-  protected final void doCreateField(DialogField dialogField, String labelText) {
-    dialogField.setLabelText(labelText);
-    dialogField.setDialogFieldListener(m_validateListener);
-    DialogFieldUtils.fillControls(m_fieldsContainer, dialogField, 2, 60);
-  }
+	/**
+	 * Configures given {@link DialogField} for specific of this dialog.
+	 */
+	protected final void doCreateField(DialogField dialogField, String labelText) {
+		dialogField.setLabelText(labelText);
+		dialogField.setDialogFieldListener(m_validateListener);
+		DialogFieldUtils.fillControls(m_fieldsContainer, dialogField, 2, 60);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public String getKey() {
-    return m_keyField.getText();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public String getKey() {
+		return m_keyField.getText();
+	}
 
-  public String getValue() {
-    return m_valueField.getText();
-  }
+	public String getValue() {
+		return m_valueField.getText();
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/ui/ChooseLocaleDialog.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/ui/ChooseLocaleDialog.java
index 765c1c5e4..ea98ccf1d 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/ui/ChooseLocaleDialog.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/ui/ChooseLocaleDialog.java
@@ -53,276 +53,276 @@
  * @coverage core.nls.ui
  */
 public class ChooseLocaleDialog extends TitleAreaDialog {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ChooseLocaleDialog(Shell parentShell) {
-    this(parentShell, null);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ChooseLocaleDialog(Shell parentShell) {
+		this(parentShell, null);
+	}
 
-  public ChooseLocaleDialog(Shell parentShell, Locale locale) {
-    super(parentShell);
-    m_selectedLocale = new LocaleInfo(locale);
-  }
+	public ChooseLocaleDialog(Shell parentShell, Locale locale) {
+		super(parentShell);
+		m_selectedLocale = new LocaleInfo(locale);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Control createContents(Composite parent) {
-    Control control = super.createContents(parent);
-    // set initial value
-    if (m_selectedLocale != null) {
-      Locale locale = m_selectedLocale.getLocale();
-      if (locale != null) {
-        updateLocalePartCombo(m_languageCombo, LocalePartInfos.getLanguages(), locale.getLanguage());
-        updateLocalePartCombo(m_countryCombo, LocalePartInfos.getCountries(), locale.getCountry());
-      }
-    }
-    updateSelectedLocale();
-    return control;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Control createContents(Composite parent) {
+		Control control = super.createContents(parent);
+		// set initial value
+		if (m_selectedLocale != null) {
+			Locale locale = m_selectedLocale.getLocale();
+			if (locale != null) {
+				updateLocalePartCombo(m_languageCombo, LocalePartInfos.getLanguages(), locale.getLanguage());
+				updateLocalePartCombo(m_countryCombo, LocalePartInfos.getCountries(), locale.getCountry());
+			}
+		}
+		updateSelectedLocale();
+		return control;
+	}
 
-  @Override
-  protected Control createDialogArea(Composite parent) {
-    setTitle(Messages.ChooseLocaleDialog_title);
-    setMessage(Messages.ChooseLocaleDialog_message);
-    // create container
-    Composite container = (Composite) super.createDialogArea(parent);
-    // create groups
-    createLocaleGroup(container);
-    //
-    return container;
-  }
+	@Override
+	protected Control createDialogArea(Composite parent) {
+		setTitle(Messages.ChooseLocaleDialog_title);
+		setMessage(Messages.ChooseLocaleDialog_message);
+		// create container
+		Composite container = (Composite) super.createDialogArea(parent);
+		// create groups
+		createLocaleGroup(container);
+		//
+		return container;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI: locale group
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private CTableCombo m_languageCombo;
-  private CTableCombo m_countryCombo;
-  private TableViewer m_localesViewer;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI: locale group
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private CTableCombo m_languageCombo;
+	private CTableCombo m_countryCombo;
+	private TableViewer m_localesViewer;
 
-  private void createLocaleGroup(Composite parent) {
-    Group localeGroup = new Group(parent, SWT.NONE);
-    localeGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-    localeGroup.setLayout(new GridLayout(2, false));
-    localeGroup.setText(Messages.ChooseLocaleDialog_localeGroup);
-    // language
-    {
-      Label languageLabel = new Label(localeGroup, SWT.NONE);
-      languageLabel.setText(Messages.ChooseLocaleDialog_languageLabel);
-    }
-    {
-      m_languageCombo = new CTableCombo(localeGroup, SWT.BORDER);
-      m_languageCombo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-      // fill languages
-      for (LocalePartInfo language : LocalePartInfos.getLanguages()) {
-        m_languageCombo.add(language.toString(), language.getFlagImage());
-      }
-      // add listener
-      m_languageCombo.addSelectionListener(new SelectionAdapter() {
-        @Override
-        public void widgetSelected(SelectionEvent e) {
-          updateSelectedLocale();
-        }
-      });
-    }
-    // country
-    {
-      Label countryLabel = new Label(localeGroup, SWT.NONE);
-      countryLabel.setText(Messages.ChooseLocaleDialog_countryLabel);
-    }
-    {
-      m_countryCombo = new CTableCombo(localeGroup, SWT.BORDER);
-      m_countryCombo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-      // fill countries
-      for (LocalePartInfo country : LocalePartInfos.getCountries()) {
-        m_countryCombo.add(country.toString(), country.getFlagImage());
-      }
-      m_countryCombo.select(0);
-      // add listener
-      m_countryCombo.addSelectionListener(new SelectionAdapter() {
-        @Override
-        public void widgetSelected(SelectionEvent e) {
-          updateSelectedLocale();
-        }
-      });
-    }
-    // all locales
-    createLocalesViewer(localeGroup);
-  }
+	private void createLocaleGroup(Composite parent) {
+		Group localeGroup = new Group(parent, SWT.NONE);
+		localeGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+		localeGroup.setLayout(new GridLayout(2, false));
+		localeGroup.setText(Messages.ChooseLocaleDialog_localeGroup);
+		// language
+		{
+			Label languageLabel = new Label(localeGroup, SWT.NONE);
+			languageLabel.setText(Messages.ChooseLocaleDialog_languageLabel);
+		}
+		{
+			m_languageCombo = new CTableCombo(localeGroup, SWT.BORDER);
+			m_languageCombo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+			// fill languages
+			for (LocalePartInfo language : LocalePartInfos.getLanguages()) {
+				m_languageCombo.add(language.toString(), language.getFlagImage());
+			}
+			// add listener
+			m_languageCombo.addSelectionListener(new SelectionAdapter() {
+				@Override
+				public void widgetSelected(SelectionEvent e) {
+					updateSelectedLocale();
+				}
+			});
+		}
+		// country
+		{
+			Label countryLabel = new Label(localeGroup, SWT.NONE);
+			countryLabel.setText(Messages.ChooseLocaleDialog_countryLabel);
+		}
+		{
+			m_countryCombo = new CTableCombo(localeGroup, SWT.BORDER);
+			m_countryCombo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+			// fill countries
+			for (LocalePartInfo country : LocalePartInfos.getCountries()) {
+				m_countryCombo.add(country.toString(), country.getFlagImage());
+			}
+			m_countryCombo.select(0);
+			// add listener
+			m_countryCombo.addSelectionListener(new SelectionAdapter() {
+				@Override
+				public void widgetSelected(SelectionEvent e) {
+					updateSelectedLocale();
+				}
+			});
+		}
+		// all locales
+		createLocalesViewer(localeGroup);
+	}
 
-  private void createLocalesViewer(Group localeGroup) {
-    {
-      Label countryLabel = new Label(localeGroup, SWT.NONE);
-      countryLabel.setText(Messages.ChooseLocaleDialog_allLocalesLabel);
-    }
-    {
-      m_localesViewer = new TableViewer(localeGroup, SWT.BORDER | SWT.FULL_SELECTION);
-      // configure table
-      Table table = m_localesViewer.getTable();
-      {
-        GridData gridData = new GridData(GridData.FILL_BOTH);
-        gridData.heightHint = convertHeightInCharsToPixels(12);
-        table.setLayoutData(gridData);
-      }
-      table.setLinesVisible(true);
-      // configure viewer
-      {
-        // set content provider
-        m_localesViewer.setContentProvider(new IStructuredContentProvider() {
-          @Override
-          public Object[] getElements(Object inputElement) {
-            Locale[] locales = Locale.getAvailableLocales();
-            // sort locales by name
-            Arrays.sort(locales, new Comparator<Locale>() {
-              @Override
-              public int compare(Locale locale_1, Locale locale_2) {
-                return locale_1.toString().compareTo(locale_2.toString());
-              }
-            });
-            //
-            return locales;
-          }
+	private void createLocalesViewer(Group localeGroup) {
+		{
+			Label countryLabel = new Label(localeGroup, SWT.NONE);
+			countryLabel.setText(Messages.ChooseLocaleDialog_allLocalesLabel);
+		}
+		{
+			m_localesViewer = new TableViewer(localeGroup, SWT.BORDER | SWT.FULL_SELECTION);
+			// configure table
+			Table table = m_localesViewer.getTable();
+			{
+				GridData gridData = new GridData(GridData.FILL_BOTH);
+				gridData.heightHint = convertHeightInCharsToPixels(12);
+				table.setLayoutData(gridData);
+			}
+			table.setLinesVisible(true);
+			// configure viewer
+			{
+				// set content provider
+				m_localesViewer.setContentProvider(new IStructuredContentProvider() {
+					@Override
+					public Object[] getElements(Object inputElement) {
+						Locale[] locales = Locale.getAvailableLocales();
+						// sort locales by name
+						Arrays.sort(locales, new Comparator<Locale>() {
+							@Override
+							public int compare(Locale locale_1, Locale locale_2) {
+								return locale_1.toString().compareTo(locale_2.toString());
+							}
+						});
+						//
+						return locales;
+					}
 
-          @Override
-          public void dispose() {
-          }
+					@Override
+					public void dispose() {
+					}
 
-          @Override
-          public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
-          }
-        });
-        // set label provider
-        {
-          class LocalesLabelProvider extends LabelProvider implements ITableLabelProvider {
-            @Override
-            public Image getColumnImage(Object element, int columnIndex) {
-              Locale locale = (Locale) element;
-              return FlagImagesRepository.getFlagImage(locale);
-            }
+					@Override
+					public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+					}
+				});
+				// set label provider
+				{
+					class LocalesLabelProvider extends LabelProvider implements ITableLabelProvider {
+						@Override
+						public Image getColumnImage(Object element, int columnIndex) {
+							Locale locale = (Locale) element;
+							return FlagImagesRepository.getFlagImage(locale);
+						}
 
-            @Override
-            public String getColumnText(Object element, int columnIndex) {
-              Locale locale = (Locale) element;
-              return locale.toString() + " - " + locale.getDisplayName();
-            }
-          }
-          m_localesViewer.setLabelProvider(new LocalesLabelProvider());
-        }
-        // fill viewer
-        m_localesViewer.setInput(this);
-        // add selection listener that updates separate language/country combo's
-        m_localesViewer.addSelectionChangedListener(new ISelectionChangedListener() {
-          @Override
-          public void selectionChanged(SelectionChangedEvent event) {
-            IStructuredSelection selection = (IStructuredSelection) m_localesViewer.getSelection();
-            Locale locale = (Locale) selection.getFirstElement();
-            if (locale != null) {
-              onLocaleSelected(locale);
-            }
-          }
-        });
-        // add double click listener for fast select/close
-        m_localesViewer.addDoubleClickListener(new IDoubleClickListener() {
-          @Override
-          public void doubleClick(DoubleClickEvent event) {
-            okPressed();
-          }
-        });
-      }
-    }
-  }
+						@Override
+						public String getColumnText(Object element, int columnIndex) {
+							Locale locale = (Locale) element;
+							return locale.toString() + " - " + locale.getDisplayName();
+						}
+					}
+					m_localesViewer.setLabelProvider(new LocalesLabelProvider());
+				}
+				// fill viewer
+				m_localesViewer.setInput(this);
+				// add selection listener that updates separate language/country combo's
+				m_localesViewer.addSelectionChangedListener(new ISelectionChangedListener() {
+					@Override
+					public void selectionChanged(SelectionChangedEvent event) {
+						IStructuredSelection selection = (IStructuredSelection) m_localesViewer.getSelection();
+						Locale locale = (Locale) selection.getFirstElement();
+						if (locale != null) {
+							onLocaleSelected(locale);
+						}
+					}
+				});
+				// add double click listener for fast select/close
+				m_localesViewer.addDoubleClickListener(new IDoubleClickListener() {
+					@Override
+					public void doubleClick(DoubleClickEvent event) {
+						okPressed();
+					}
+				});
+			}
+		}
+	}
 
-  private void onLocaleSelected(Locale locale) {
-    boolean needLocaleUpdate = false;
-    // select language
-    {
-      String localeLanguage = locale.getLanguage();
-      needLocaleUpdate |=
-          updateLocalePartCombo(m_languageCombo, LocalePartInfos.getLanguages(), localeLanguage);
-    }
-    // select country
-    {
-      String localeCountry = locale.getCountry();
-      needLocaleUpdate |=
-          updateLocalePartCombo(m_countryCombo, LocalePartInfos.getCountries(), localeCountry);
-    }
-    // force update selected locale
-    if (needLocaleUpdate) {
-      updateSelectedLocale();
-    }
-  }
+	private void onLocaleSelected(Locale locale) {
+		boolean needLocaleUpdate = false;
+		// select language
+		{
+			String localeLanguage = locale.getLanguage();
+			needLocaleUpdate |=
+					updateLocalePartCombo(m_languageCombo, LocalePartInfos.getLanguages(), localeLanguage);
+		}
+		// select country
+		{
+			String localeCountry = locale.getCountry();
+			needLocaleUpdate |=
+					updateLocalePartCombo(m_countryCombo, LocalePartInfos.getCountries(), localeCountry);
+		}
+		// force update selected locale
+		if (needLocaleUpdate) {
+			updateSelectedLocale();
+		}
+	}
 
-  private static boolean updateLocalePartCombo(CTableCombo combo,
-      LocalePartInfo[] parts,
-      String name) {
-    int index = LocalePartInfos.indexByName(parts, name);
-    if (index != -1) {
-      if (index != combo.getSelectionIndex()) {
-        combo.select(index);
-        return true;
-      }
-    } else {
-      combo.select(0);
-    }
-    return false;
-  }
+	private static boolean updateLocalePartCombo(CTableCombo combo,
+			LocalePartInfo[] parts,
+			String name) {
+		int index = LocalePartInfos.indexByName(parts, name);
+		if (index != -1) {
+			if (index != combo.getSelectionIndex()) {
+				combo.select(index);
+				return true;
+			}
+		} else {
+			combo.select(0);
+		}
+		return false;
+	}
 
-  protected void updateSelectedLocale() {
-    if (m_languageCombo.getSelectionIndex() == -1) {
-      getButton(IDialogConstants.OK_ID).setEnabled(false);
-      return;
-    }
-    // prepare selected locale
-    {
-      // prepare locale
-      Locale locale;
-      {
-        LocalePartInfo language =
-            LocalePartInfos.getLanguages()[m_languageCombo.getSelectionIndex()];
-        LocalePartInfo country = LocalePartInfos.getCountries()[m_countryCombo.getSelectionIndex()];
-        if (country.getName().length() == 0) {
-          locale = new Locale(language.getName());
-        } else {
-          locale = new Locale(language.getName(), country.getName());
-        }
-      }
-      // create selected locale information
-      m_selectedLocale = new LocaleInfo(locale);
-      // show locale in locales viewer
-      m_localesViewer.setSelection(new StructuredSelection(locale));
-    }
-    // ok, we have good locale name
-    setErrorMessage(null);
-    getButton(IDialogConstants.OK_ID).setEnabled(true);
-  }
+	protected void updateSelectedLocale() {
+		if (m_languageCombo.getSelectionIndex() == -1) {
+			getButton(IDialogConstants.OK_ID).setEnabled(false);
+			return;
+		}
+		// prepare selected locale
+		{
+			// prepare locale
+			Locale locale;
+			{
+				LocalePartInfo language =
+						LocalePartInfos.getLanguages()[m_languageCombo.getSelectionIndex()];
+				LocalePartInfo country = LocalePartInfos.getCountries()[m_countryCombo.getSelectionIndex()];
+				if (country.getName().length() == 0) {
+					locale = new Locale(language.getName());
+				} else {
+					locale = new Locale(language.getName(), country.getName());
+				}
+			}
+			// create selected locale information
+			m_selectedLocale = new LocaleInfo(locale);
+			// show locale in locales viewer
+			m_localesViewer.setSelection(new StructuredSelection(locale));
+		}
+		// ok, we have good locale name
+		setErrorMessage(null);
+		getButton(IDialogConstants.OK_ID).setEnabled(true);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Dialog: shell
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void configureShell(Shell newShell) {
-    super.configureShell(newShell);
-    newShell.setText(Messages.ChooseLocaleDialog_shellTitle);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Dialog: shell
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void configureShell(Shell newShell) {
+		super.configureShell(newShell);
+		newShell.setText(Messages.ChooseLocaleDialog_shellTitle);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected LocaleInfo m_selectedLocale;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected LocaleInfo m_selectedLocale;
 
-  public LocaleInfo getSelectedLocale() {
-    return m_selectedLocale;
-  }
+	public LocaleInfo getSelectedLocale() {
+		return m_selectedLocale;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/ui/FlagImagesRepository.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/ui/FlagImagesRepository.java
index 0f8ca2463..4a39adf8a 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/ui/FlagImagesRepository.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/ui/FlagImagesRepository.java
@@ -32,106 +32,106 @@
  * @coverage core.nls.ui
  */
 public class FlagImagesRepository {
-  private static Map<String, Image> m_countriesFlags = Maps.newHashMap();
-  private static Locale[] m_locales;
+	private static Map<String, Image> m_countriesFlags = Maps.newHashMap();
+	private static Locale[] m_locales;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Initialization
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static void init() {
-    if (m_locales == null) {
-      // prepare sorted Locale's
-      {
-        List<Locale> locales = Lists.newArrayList();
-        Collections.addAll(locales, Locale.getAvailableLocales());
-        Collections.sort(locales, new Comparator<Locale>() {
-          @Override
-          public int compare(Locale o1, Locale o2) {
-            return o1.toString().compareTo(o2.toString());
-          }
-        });
-        m_locales = locales.toArray(new Locale[locales.size()]);
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Initialization
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static void init() {
+		if (m_locales == null) {
+			// prepare sorted Locale's
+			{
+				List<Locale> locales = Lists.newArrayList();
+				Collections.addAll(locales, Locale.getAvailableLocales());
+				Collections.sort(locales, new Comparator<Locale>() {
+					@Override
+					public int compare(Locale o1, Locale o2) {
+						return o1.toString().compareTo(o2.toString());
+					}
+				});
+				m_locales = locales.toArray(new Locale[locales.size()]);
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the array of {@link Locale}'s sorted by title.
-   */
-  public static Locale[] getSortedLocales() {
-    init();
-    return m_locales;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the array of {@link Locale}'s sorted by title.
+	 */
+	public static Locale[] getSortedLocales() {
+		init();
+		return m_locales;
+	}
 
-  /**
-   * @return the {@link Image} of flag for default {@link Locale}.
-   */
-  public static Image getEmptyFlagImage() {
-    return DesignerPlugin.getImage("nls/flags/flag_empty.png");
-  }
+	/**
+	 * @return the {@link Image} of flag for default {@link Locale}.
+	 */
+	public static Image getEmptyFlagImage() {
+		return DesignerPlugin.getImage("nls/flags/flag_empty.png");
+	}
 
-  /**
-   * @return the {@link Image} of flag for given {@link Locale}.
-   */
-  public static Image getFlagImage(Locale locale) {
-    init();
-    String localeCountry = locale.getCountry();
-    String localeLanguage = locale.getLanguage();
-    // if locale has no assosiated country set, try to find the locale with the same language but with the country set
-    if (localeCountry.length() == 0) {
-      // special cases
-      if (localeLanguage.equals("ar")) {
-        localeCountry = "AE";
-      } else if (localeLanguage.equals("zh")) {
-        localeCountry = "CN";
-      } else if (localeLanguage.equals("en")) {
-        localeCountry = "US";
-      } else {
-        // try to guess
-        String localeCountryCandidate = "";
-        for (int i = 0; i < m_locales.length; i++) {
-          Locale lookupLocale = m_locales[i];
-          String lookupLanguage = lookupLocale.getLanguage();
-          if (lookupLanguage.equals(localeLanguage)) {
-            if (lookupLocale.getCountry().length() != 0) {
-              localeCountryCandidate = lookupLocale.getCountry();
-              if (localeCountryCandidate.equalsIgnoreCase(lookupLanguage)) {
-                localeCountry = localeCountryCandidate;
-                break;
-              }
-            }
-          }
-        }
-        if (localeCountry.length() == 0) {
-          localeCountry = localeCountryCandidate;
-        }
-      }
-    }
-    //
-    Image flagImage = m_countriesFlags.get(localeCountry);
-    if (flagImage == null) {
-      try {
-        String flagFileName = null;
-        if (localeCountry.equalsIgnoreCase("YU")) {
-          localeCountry = "CS"; // use Serbia and Montenegro
-        }
-        if (StringUtils.isEmpty(localeCountry)) {
-          return null;
-        }
-        flagFileName = localeCountry.toLowerCase() + ".png";
-        flagImage = DesignerPlugin.getImage("nls/flags/" + flagFileName);
-        m_countriesFlags.put(localeCountry, flagImage);
-      } catch (Throwable e) {
-        return null;
-      }
-    }
-    return flagImage;
-  }
+	/**
+	 * @return the {@link Image} of flag for given {@link Locale}.
+	 */
+	public static Image getFlagImage(Locale locale) {
+		init();
+		String localeCountry = locale.getCountry();
+		String localeLanguage = locale.getLanguage();
+		// if locale has no assosiated country set, try to find the locale with the same language but with the country set
+		if (localeCountry.length() == 0) {
+			// special cases
+			if (localeLanguage.equals("ar")) {
+				localeCountry = "AE";
+			} else if (localeLanguage.equals("zh")) {
+				localeCountry = "CN";
+			} else if (localeLanguage.equals("en")) {
+				localeCountry = "US";
+			} else {
+				// try to guess
+				String localeCountryCandidate = "";
+				for (int i = 0; i < m_locales.length; i++) {
+					Locale lookupLocale = m_locales[i];
+					String lookupLanguage = lookupLocale.getLanguage();
+					if (lookupLanguage.equals(localeLanguage)) {
+						if (lookupLocale.getCountry().length() != 0) {
+							localeCountryCandidate = lookupLocale.getCountry();
+							if (localeCountryCandidate.equalsIgnoreCase(lookupLanguage)) {
+								localeCountry = localeCountryCandidate;
+								break;
+							}
+						}
+					}
+				}
+				if (localeCountry.length() == 0) {
+					localeCountry = localeCountryCandidate;
+				}
+			}
+		}
+		//
+		Image flagImage = m_countriesFlags.get(localeCountry);
+		if (flagImage == null) {
+			try {
+				String flagFileName = null;
+				if (localeCountry.equalsIgnoreCase("YU")) {
+					localeCountry = "CS"; // use Serbia and Montenegro
+				}
+				if (StringUtils.isEmpty(localeCountry)) {
+					return null;
+				}
+				flagFileName = localeCountry.toLowerCase() + ".png";
+				flagImage = DesignerPlugin.getImage("nls/flags/" + flagFileName);
+				m_countriesFlags.put(localeCountry, flagImage);
+			} catch (Throwable e) {
+				return null;
+			}
+		}
+		return flagImage;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/ui/LocaleUtils.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/ui/LocaleUtils.java
index b4e2870b6..fb22bb56a 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/ui/LocaleUtils.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/ui/LocaleUtils.java
@@ -24,39 +24,39 @@
  * @coverage core.nls.ui
  */
 public class LocaleUtils {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private LocaleUtils() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private LocaleUtils() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the flag image for given {@link LocaleInfo}.
-   */
-  public static Image getImage(LocaleInfo localeInfo) {
-    if (localeInfo.isDefault()) {
-      return FlagImagesRepository.getEmptyFlagImage();
-    } else {
-      return FlagImagesRepository.getFlagImage(localeInfo.getLocale());
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the flag image for given {@link LocaleInfo}.
+	 */
+	public static Image getImage(LocaleInfo localeInfo) {
+		if (localeInfo.isDefault()) {
+			return FlagImagesRepository.getEmptyFlagImage();
+		} else {
+			return FlagImagesRepository.getFlagImage(localeInfo.getLocale());
+		}
+	}
 
-  /**
-   * Sorts given array of {@link LocaleInfo}'s by title.
-   */
-  public static void sortByTitle(LocaleInfo locales[]) {
-    Arrays.sort(locales, new Comparator<LocaleInfo>() {
-      @Override
-      public int compare(LocaleInfo locale_1, LocaleInfo locale_2) {
-        return locale_1.getTitle().compareTo(locale_2.getTitle());
-      }
-    });
-  }
+	/**
+	 * Sorts given array of {@link LocaleInfo}'s by title.
+	 */
+	public static void sortByTitle(LocaleInfo locales[]) {
+		Arrays.sort(locales, new Comparator<LocaleInfo>() {
+			@Override
+			public int compare(LocaleInfo locale_1, LocaleInfo locale_2) {
+				return locale_1.getTitle().compareTo(locale_2.getTitle());
+			}
+		});
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/ui/NewLocaleDialog.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/ui/NewLocaleDialog.java
index cdc83304d..b8777b963 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/ui/NewLocaleDialog.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/ui/NewLocaleDialog.java
@@ -35,106 +35,106 @@
  * @coverage core.nls.ui
  */
 public class NewLocaleDialog extends ChooseLocaleDialog {
-  private final LocaleInfo m_locales[];
+	private final LocaleInfo m_locales[];
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public NewLocaleDialog(Shell parentShell, LocaleInfo locales[]) {
-    super(parentShell);
-    // store existing locales
-    m_locales = locales;
-    LocaleUtils.sortByTitle(m_locales);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public NewLocaleDialog(Shell parentShell, LocaleInfo locales[]) {
+		super(parentShell);
+		// store existing locales
+		m_locales = locales;
+		LocaleUtils.sortByTitle(m_locales);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Control createDialogArea(Composite parent) {
-    setTitle(Messages.NewLocaleDialog_title);
-    setMessage(Messages.NewLocaleDialog_message);
-    // create container
-    Composite container = (Composite) super.createDialogArea(parent);
-    Composite composite = new Composite(container, SWT.NONE);
-    composite.setLayoutData(new GridData(GridData.FILL_BOTH));
-    composite.setLayout(new GridLayout());
-    // create groups
-    createCopyGroup(composite);
-    //
-    return container;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Control createDialogArea(Composite parent) {
+		setTitle(Messages.NewLocaleDialog_title);
+		setMessage(Messages.NewLocaleDialog_message);
+		// create container
+		Composite container = (Composite) super.createDialogArea(parent);
+		Composite composite = new Composite(container, SWT.NONE);
+		composite.setLayoutData(new GridData(GridData.FILL_BOTH));
+		composite.setLayout(new GridLayout());
+		// create groups
+		createCopyGroup(composite);
+		//
+		return container;
+	}
 
-  @Override
-  protected void updateSelectedLocale() {
-    super.updateSelectedLocale();
-    // check that we don't have such locale
-    for (int i = 0; i < m_locales.length; i++) {
-      LocaleInfo locale = m_locales[i];
-      if (locale.equals(m_selectedLocale)) {
-        setErrorMessage(MessageFormat.format(
-            Messages.NewLocaleDialog_alreadyExists,
-            m_selectedLocale.getTitle()));
-        getButton(IDialogConstants.OK_ID).setEnabled(false);
-        return;
-      }
-    }
-    // ok, we have good locale name
-    setErrorMessage(null);
-    getButton(IDialogConstants.OK_ID).setEnabled(true);
-  }
+	@Override
+	protected void updateSelectedLocale() {
+		super.updateSelectedLocale();
+		// check that we don't have such locale
+		for (int i = 0; i < m_locales.length; i++) {
+			LocaleInfo locale = m_locales[i];
+			if (locale.equals(m_selectedLocale)) {
+				setErrorMessage(MessageFormat.format(
+						Messages.NewLocaleDialog_alreadyExists,
+						m_selectedLocale.getTitle()));
+				getButton(IDialogConstants.OK_ID).setEnabled(false);
+				return;
+			}
+		}
+		// ok, we have good locale name
+		setErrorMessage(null);
+		getButton(IDialogConstants.OK_ID).setEnabled(true);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI: copy from group
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private CTableCombo m_baseCombo;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI: copy from group
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private CTableCombo m_baseCombo;
 
-  private void createCopyGroup(Composite parent) {
-    Group copyGroup = new Group(parent, SWT.NONE);
-    copyGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-    copyGroup.setLayout(new GridLayout(2, false));
-    copyGroup.setText(Messages.NewLocaleDialog_copyGroup);
-    {
-      Label countryLabel = new Label(copyGroup, SWT.NONE);
-      countryLabel.setText(Messages.NewLocaleDialog_copyFrom);
-    }
-    {
-      m_baseCombo = new CTableCombo(copyGroup, SWT.BORDER);
-      m_baseCombo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-      // fill base combo
-      m_baseCombo.add("(none)", FlagImagesRepository.getEmptyFlagImage());
-      for (int i = 0; i < m_locales.length; i++) {
-        LocaleInfo locale = m_locales[i];
-        m_baseCombo.add(locale.getTitle(), LocaleUtils.getImage(locale));
-      }
-      // add listener
-      m_baseCombo.addSelectionListener(new SelectionAdapter() {
-        @Override
-        public void widgetSelected(SelectionEvent e) {
-          int index = m_baseCombo.getSelectionIndex();
-          m_baseLocale = index == 0 ? null : m_locales[index - 1];
-        }
-      });
-      // select (default) locale
-      m_baseCombo.select(1);
-      m_baseLocale = m_locales[0];
-    }
-  }
+	private void createCopyGroup(Composite parent) {
+		Group copyGroup = new Group(parent, SWT.NONE);
+		copyGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+		copyGroup.setLayout(new GridLayout(2, false));
+		copyGroup.setText(Messages.NewLocaleDialog_copyGroup);
+		{
+			Label countryLabel = new Label(copyGroup, SWT.NONE);
+			countryLabel.setText(Messages.NewLocaleDialog_copyFrom);
+		}
+		{
+			m_baseCombo = new CTableCombo(copyGroup, SWT.BORDER);
+			m_baseCombo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+			// fill base combo
+			m_baseCombo.add("(none)", FlagImagesRepository.getEmptyFlagImage());
+			for (int i = 0; i < m_locales.length; i++) {
+				LocaleInfo locale = m_locales[i];
+				m_baseCombo.add(locale.getTitle(), LocaleUtils.getImage(locale));
+			}
+			// add listener
+			m_baseCombo.addSelectionListener(new SelectionAdapter() {
+				@Override
+				public void widgetSelected(SelectionEvent e) {
+					int index = m_baseCombo.getSelectionIndex();
+					m_baseLocale = index == 0 ? null : m_locales[index - 1];
+				}
+			});
+			// select (default) locale
+			m_baseCombo.select(1);
+			m_baseLocale = m_locales[0];
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private LocaleInfo m_baseLocale;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private LocaleInfo m_baseLocale;
 
-  public LocaleInfo getBaseLocale() {
-    return m_baseLocale;
-  }
+	public LocaleInfo getBaseLocale() {
+		return m_baseLocale;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/ui/NewSourceDialog.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/ui/NewSourceDialog.java
index 7ac96d284..974a5efb0 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/ui/NewSourceDialog.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/ui/NewSourceDialog.java
@@ -51,290 +51,290 @@
  * @coverage core.nls.ui
  */
 public class NewSourceDialog extends TitleAreaDialog {
-  private static final String USUAL_MESSAGE = Messages.NewSourceDialog_message;
-  private static final String ONLY_ONE_SOURCE_MESSAGE = Messages.NewSourceDialog_messageOneSource;
-  private final JavaInfo m_root;
-  private boolean m_hasOneSource;
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // UI objects
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Group m_containerComposite;
-  private StackLayout m_containerCompositeLayout;
-  private Button m_okButton;
+	private static final String USUAL_MESSAGE = Messages.NewSourceDialog_message;
+	private static final String ONLY_ONE_SOURCE_MESSAGE = Messages.NewSourceDialog_messageOneSource;
+	private final JavaInfo m_root;
+	private boolean m_hasOneSource;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// UI objects
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Group m_containerComposite;
+	private StackLayout m_containerCompositeLayout;
+	private Button m_okButton;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public NewSourceDialog(Shell parentShell, JavaInfo root) {
-    super(parentShell);
-    m_root = root;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public NewSourceDialog(Shell parentShell, JavaInfo root) {
+		super(parentShell);
+		m_root = root;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Control createDialogArea(Composite parent) {
-    // configure title area
-    setTitle(Messages.NewSourceDialog_title);
-    setMessage(USUAL_MESSAGE);
-    setTitleImage(DesignerPlugin.getImage("nls/add_source.gif"));
-    // configure container
-    Composite area = (Composite) super.createDialogArea(parent);
-    Composite container = new Composite(area, SWT.NONE);
-    GridDataFactory.create(container).grab().fill();
-    container.setLayout(new GridLayout());
-    // create parts of GUI
-    createTypeGroup(container);
-    createPropertiesGroup(container);
-    // fill for one source
-    if (m_hasOneSource) {
-      createContentsForOneSource();
-    }
-    // done
-    return area;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Control createDialogArea(Composite parent) {
+		// configure title area
+		setTitle(Messages.NewSourceDialog_title);
+		setMessage(USUAL_MESSAGE);
+		setTitleImage(DesignerPlugin.getImage("nls/add_source.gif"));
+		// configure container
+		Composite area = (Composite) super.createDialogArea(parent);
+		Composite container = new Composite(area, SWT.NONE);
+		GridDataFactory.create(container).grab().fill();
+		container.setLayout(new GridLayout());
+		// create parts of GUI
+		createTypeGroup(container);
+		createPropertiesGroup(container);
+		// fill for one source
+		if (m_hasOneSource) {
+			createContentsForOneSource();
+		}
+		// done
+		return area;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI: types
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private SourceDescription[] m_sourceDescriptions;
-  private AbstractSourceNewComposite m_sourceComposites[];
-  private SourceDescription m_currentSourceDescription;
-  private AbstractSourceNewComposite m_currentSourceComposite;
-  private SourceViewer m_sampleViewer;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI: types
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private SourceDescription[] m_sourceDescriptions;
+	private AbstractSourceNewComposite m_sourceComposites[];
+	private SourceDescription m_currentSourceDescription;
+	private AbstractSourceNewComposite m_currentSourceComposite;
+	private SourceViewer m_sampleViewer;
 
-  /**
-   * Creates types composite, prepares source classes and composites.
-   */
-  private void createTypeGroup(final Composite container) {
-    // fill typeGroup with SourceDescription's
-    ExecutionUtils.runLog(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        createDescriptionsControls(container);
-      }
-    });
-    // create sample viewer
-    {
-      Group exampleGroup = new Group(container, SWT.NONE);
-      GridDataFactory.create(exampleGroup).grabH().fillH();
-      exampleGroup.setLayout(new GridLayout());
-      exampleGroup.setText(Messages.NewSourceDialog_exampleGroup);
-      //
-      m_sampleViewer = JdtUiUtils.createJavaSourceViewer(exampleGroup, SWT.BORDER);
-      GridDataFactory.create(m_sampleViewer.getControl()).grab().fill().hintVC(4);
-    }
-  }
+	/**
+	 * Creates types composite, prepares source classes and composites.
+	 */
+	private void createTypeGroup(final Composite container) {
+		// fill typeGroup with SourceDescription's
+		ExecutionUtils.runLog(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				createDescriptionsControls(container);
+			}
+		});
+		// create sample viewer
+		{
+			Group exampleGroup = new Group(container, SWT.NONE);
+			GridDataFactory.create(exampleGroup).grabH().fillH();
+			exampleGroup.setLayout(new GridLayout());
+			exampleGroup.setText(Messages.NewSourceDialog_exampleGroup);
+			//
+			m_sampleViewer = JdtUiUtils.createJavaSourceViewer(exampleGroup, SWT.BORDER);
+			GridDataFactory.create(m_sampleViewer.getControl()).grab().fill().hintVC(4);
+		}
+	}
 
-  /**
-   * Fills given parent with {@link SourceDescription} radio {@link Button}'s.
-   */
-  private void createDescriptionsControls(Composite container) throws Exception {
-    // prepare arrays for sources
-    m_sourceDescriptions = NlsSupport.getSourceDescriptions(m_root);
-    m_sourceComposites = new AbstractSourceNewComposite[m_sourceDescriptions.length];
-    // check, may be only one source
-    m_hasOneSource = m_sourceDescriptions.length == 1;
-    if (m_hasOneSource) {
-      return;
-    }
-    // several sources, create selection group
-    Group typeGroup = new Group(container, SWT.NONE);
-    GridDataFactory.create(typeGroup).grabH().fill();
-    typeGroup.setLayout(new GridLayout());
-    typeGroup.setText(Messages.NewSourceDialog_sourceTypesGroup);
-    // create radio buttons for possible sources
-    for (int i = 0; i < m_sourceDescriptions.length; i++) {
-      SourceDescription sourceDescription = m_sourceDescriptions[i];
-      if (sourceDescription.getNewCompositeClass() == null) {
-        continue;
-      }
-      // prepare title
-      String title = sourceDescription.getTitle();
-      // create button for current class
-      {
-        Button sourceButton = new Button(typeGroup, SWT.RADIO);
-        sourceButton.setText(title);
-        // add selection listener
-        final int index = i;
-        sourceButton.addSelectionListener(new SelectionAdapter() {
-          @Override
-          public void widgetSelected(SelectionEvent e) {
-            ExecutionUtils.runLog(new RunnableEx() {
-              @Override
-              public void run() throws Exception {
-                populateForSourceIndex(index);
-              }
-            });
-          }
-        });
-      }
-    }
-  }
+	/**
+	 * Fills given parent with {@link SourceDescription} radio {@link Button}'s.
+	 */
+	private void createDescriptionsControls(Composite container) throws Exception {
+		// prepare arrays for sources
+		m_sourceDescriptions = NlsSupport.getSourceDescriptions(m_root);
+		m_sourceComposites = new AbstractSourceNewComposite[m_sourceDescriptions.length];
+		// check, may be only one source
+		m_hasOneSource = m_sourceDescriptions.length == 1;
+		if (m_hasOneSource) {
+			return;
+		}
+		// several sources, create selection group
+		Group typeGroup = new Group(container, SWT.NONE);
+		GridDataFactory.create(typeGroup).grabH().fill();
+		typeGroup.setLayout(new GridLayout());
+		typeGroup.setText(Messages.NewSourceDialog_sourceTypesGroup);
+		// create radio buttons for possible sources
+		for (int i = 0; i < m_sourceDescriptions.length; i++) {
+			SourceDescription sourceDescription = m_sourceDescriptions[i];
+			if (sourceDescription.getNewCompositeClass() == null) {
+				continue;
+			}
+			// prepare title
+			String title = sourceDescription.getTitle();
+			// create button for current class
+			{
+				Button sourceButton = new Button(typeGroup, SWT.RADIO);
+				sourceButton.setText(title);
+				// add selection listener
+				final int index = i;
+				sourceButton.addSelectionListener(new SelectionAdapter() {
+					@Override
+					public void widgetSelected(SelectionEvent e) {
+						ExecutionUtils.runLog(new RunnableEx() {
+							@Override
+							public void run() throws Exception {
+								populateForSourceIndex(index);
+							}
+						});
+					}
+				});
+			}
+		}
+	}
 
-  /**
-   * In the case where there is just one source and no radio buttons were generated, this method
-   * populates the contents of the dialog.
-   */
-  private void createContentsForOneSource() {
-    m_currentSourceDescription = m_sourceDescriptions[0];
-    if (m_currentSourceDescription.getNewCompositeClass() == null) {
-      return;
-    }
-    // prepare one-source case title and dialog message
-    String title = m_currentSourceDescription.getTitle();
-    setTitle(title);
-    // show source in async, because Dialog itself manages size during create
-    ExecutionUtils.runAsync(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        populateForSourceIndex(0);
-      }
-    });
-  }
+	/**
+	 * In the case where there is just one source and no radio buttons were generated, this method
+	 * populates the contents of the dialog.
+	 */
+	private void createContentsForOneSource() {
+		m_currentSourceDescription = m_sourceDescriptions[0];
+		if (m_currentSourceDescription.getNewCompositeClass() == null) {
+			return;
+		}
+		// prepare one-source case title and dialog message
+		String title = m_currentSourceDescription.getTitle();
+		setTitle(title);
+		// show source in async, because Dialog itself manages size during create
+		ExecutionUtils.runAsync(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				populateForSourceIndex(0);
+			}
+		});
+	}
 
-  private void populateForSourceIndex(int index) throws Exception {
-    m_currentSourceDescription = m_sourceDescriptions[index];
-    // ensure that we have composite for this source class
-    m_currentSourceComposite = m_sourceComposites[index];
-    if (m_currentSourceComposite == null) {
-      // create new composite
-      m_currentSourceComposite =
-          m_currentSourceDescription.createNewComposite(m_containerComposite, m_root);
-      m_currentSourceComposite.addPropertyChangeListener(m_propertyChangeListener);
-      // store composite
-      m_sourceComposites[index] = m_currentSourceComposite;
-    }
-    // show composite for selected source type
-    m_containerCompositeLayout.topControl = m_currentSourceComposite;
-    m_containerComposite.layout();
-    // show sample for select source type
-    if (m_sampleViewer != null) {
-      String sample = m_currentSourceComposite.getSample();
-      JdtUiUtils.setJavaSourceForViewer(m_sampleViewer, sample);
-    }
-    // change size
-    {
-      Point p = getShell().computeSize(SWT.DEFAULT, SWT.DEFAULT);
-      getShell().setSize(p.x, p.y);
-    }
-    // validate selected composite
-    validateCurrentSourceComposite();
-  }
+	private void populateForSourceIndex(int index) throws Exception {
+		m_currentSourceDescription = m_sourceDescriptions[index];
+		// ensure that we have composite for this source class
+		m_currentSourceComposite = m_sourceComposites[index];
+		if (m_currentSourceComposite == null) {
+			// create new composite
+			m_currentSourceComposite =
+					m_currentSourceDescription.createNewComposite(m_containerComposite, m_root);
+			m_currentSourceComposite.addPropertyChangeListener(m_propertyChangeListener);
+			// store composite
+			m_sourceComposites[index] = m_currentSourceComposite;
+		}
+		// show composite for selected source type
+		m_containerCompositeLayout.topControl = m_currentSourceComposite;
+		m_containerComposite.layout();
+		// show sample for select source type
+		if (m_sampleViewer != null) {
+			String sample = m_currentSourceComposite.getSample();
+			JdtUiUtils.setJavaSourceForViewer(m_sampleViewer, sample);
+		}
+		// change size
+		{
+			Point p = getShell().computeSize(SWT.DEFAULT, SWT.DEFAULT);
+			getShell().setSize(p.x, p.y);
+		}
+		// validate selected composite
+		validateCurrentSourceComposite();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI: properties
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void createPropertiesGroup(Composite parent) {
-    m_containerComposite = new Group(parent, SWT.NONE);
-    GridDataFactory.create(m_containerComposite).grab().fill();
-    {
-      m_containerCompositeLayout = new StackLayout();
-      m_containerComposite.setLayout(m_containerCompositeLayout);
-    }
-    m_containerComposite.setText(Messages.NewSourceDialog_sourceProperties);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI: properties
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void createPropertiesGroup(Composite parent) {
+		m_containerComposite = new Group(parent, SWT.NONE);
+		GridDataFactory.create(m_containerComposite).grab().fill();
+		{
+			m_containerCompositeLayout = new StackLayout();
+			m_containerComposite.setLayout(m_containerCompositeLayout);
+		}
+		m_containerComposite.setText(Messages.NewSourceDialog_sourceProperties);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // New source properties
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final PropertyChangeListener m_propertyChangeListener = new PropertyChangeListener() {
-    @Override
-    public void propertyChange(java.beans.PropertyChangeEvent e) {
-      validateCurrentSourceComposite();
-    }
-  };
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// New source properties
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final PropertyChangeListener m_propertyChangeListener = new PropertyChangeListener() {
+		@Override
+		public void propertyChange(java.beans.PropertyChangeEvent e) {
+			validateCurrentSourceComposite();
+		}
+	};
 
-  private void validateCurrentSourceComposite() {
-    IStatus status = m_currentSourceComposite.getStatus();
-    if (m_hasOneSource) {
-      StatusUtils.applyToTitleAreaDialog(this, status, ONLY_ONE_SOURCE_MESSAGE);
-    } else {
-      StatusUtils.applyToTitleAreaDialog(this, status, USUAL_MESSAGE);
-    }
-    if (m_okButton != null) {
-      m_okButton.setEnabled(status.getSeverity() < IStatus.ERROR);
-    }
-  }
+	private void validateCurrentSourceComposite() {
+		IStatus status = m_currentSourceComposite.getStatus();
+		if (m_hasOneSource) {
+			StatusUtils.applyToTitleAreaDialog(this, status, ONLY_ONE_SOURCE_MESSAGE);
+		} else {
+			StatusUtils.applyToTitleAreaDialog(this, status, USUAL_MESSAGE);
+		}
+		if (m_okButton != null) {
+			m_okButton.setEnabled(status.getSeverity() < IStatus.ERROR);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Dialog: shell
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void configureShell(Shell newShell) {
-    super.configureShell(newShell);
-    newShell.setText(Messages.NewSourceDialog_shellTitle);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Dialog: shell
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void configureShell(Shell newShell) {
+		super.configureShell(newShell);
+		newShell.setText(Messages.NewSourceDialog_shellTitle);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Dialog: buttons
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createButtonsForButtonBar(Composite parent) {
-    {
-      m_okButton = createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true);
-      m_okButton.setEnabled(false);
-    }
-    createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Dialog: buttons
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createButtonsForButtonBar(Composite parent) {
+		{
+			m_okButton = createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true);
+			m_okButton.setEnabled(false);
+		}
+		createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false);
+	}
 
-  @Override
-  protected void okPressed() {
-    try {
-      m_newSourceDescription = m_currentSourceDescription;
-      m_newSourceParameters = m_currentSourceComposite.createParametersObject();
-      m_newEditableSource = m_currentSourceComposite.createEditableSource(m_newSourceParameters);
-    } catch (Throwable e) {
-      DesignerPlugin.log(e);
-      return;
-    }
-    super.okPressed();
-  }
+	@Override
+	protected void okPressed() {
+		try {
+			m_newSourceDescription = m_currentSourceDescription;
+			m_newSourceParameters = m_currentSourceComposite.createParametersObject();
+			m_newEditableSource = m_currentSourceComposite.createEditableSource(m_newSourceParameters);
+		} catch (Throwable e) {
+			DesignerPlugin.log(e);
+			return;
+		}
+		super.okPressed();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Result access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private IEditableSource m_newEditableSource;
-  private SourceDescription m_newSourceDescription;
-  private Object m_newSourceParameters;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Result access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private IEditableSource m_newEditableSource;
+	private SourceDescription m_newSourceDescription;
+	private Object m_newSourceParameters;
 
-  /**
-   * @return created {@link IEditableSource}.
-   */
-  public IEditableSource getNewEditableSource() {
-    return m_newEditableSource;
-  }
+	/**
+	 * @return created {@link IEditableSource}.
+	 */
+	public IEditableSource getNewEditableSource() {
+		return m_newEditableSource;
+	}
 
-  /**
-   * @return the selected {@link SourceDescription}.
-   */
-  public SourceDescription getNewSourceDescription() {
-    return m_newSourceDescription;
-  }
+	/**
+	 * @return the selected {@link SourceDescription}.
+	 */
+	public SourceDescription getNewSourceDescription() {
+		return m_newSourceDescription;
+	}
 
-  /**
-   * @return parameters that needed by {@link AbstractSource} to create its objects.
-   */
-  public Object getNewSourceParameters() {
-    return m_newSourceParameters;
-  }
+	/**
+	 * @return parameters that needed by {@link AbstractSource} to create its objects.
+	 */
+	public Object getNewSourceParameters() {
+		return m_newSourceParameters;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/ui/NlsDialog.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/ui/NlsDialog.java
index ce86764b6..c49021b60 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/ui/NlsDialog.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/ui/NlsDialog.java
@@ -48,173 +48,173 @@
  * @coverage core.nls.ui
  */
 public final class NlsDialog extends ResizableDialog {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Model objects
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final JavaInfo m_root;
-  private final NlsSupport m_support;
-  private final IEditableSupport m_editableSupport;
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // UI objects
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private TabFolder m_tabFolder;
-  private List<SourceComposite> m_composites;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Model objects
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final JavaInfo m_root;
+	private final NlsSupport m_support;
+	private final IEditableSupport m_editableSupport;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// UI objects
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private TabFolder m_tabFolder;
+	private List<SourceComposite> m_composites;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public NlsDialog(Shell parentShell, JavaInfo root) throws Exception {
-    super(parentShell, DesignerPlugin.getDefault());
-    m_root = root;
-    m_support = NlsSupport.get(root);
-    m_editableSupport = m_support.getEditable();
-    m_editableSupport.addListener(new IEditableSupportListener() {
-      @Override
-      public void sourceAdded(final IEditableSource source) {
-        ExecutionUtils.runLog(new RunnableEx() {
-          @Override
-          public void run() throws Exception {
-            int tabIndex = m_tabFolder.getItemCount() - 1;
-            createStringsTab(source, tabIndex);
-          }
-        });
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public NlsDialog(Shell parentShell, JavaInfo root) throws Exception {
+		super(parentShell, DesignerPlugin.getDefault());
+		m_root = root;
+		m_support = NlsSupport.get(root);
+		m_editableSupport = m_support.getEditable();
+		m_editableSupport.addListener(new IEditableSupportListener() {
+			@Override
+			public void sourceAdded(final IEditableSource source) {
+				ExecutionUtils.runLog(new RunnableEx() {
+					@Override
+					public void run() throws Exception {
+						int tabIndex = m_tabFolder.getItemCount() - 1;
+						createStringsTab(source, tabIndex);
+					}
+				});
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Dialog: creation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Control createDialogArea(Composite parent) {
-    Composite area = (Composite) super.createDialogArea(parent);
-    area.setLayout(new GridLayout());
-    //
-    m_tabFolder = new TabFolder(area, SWT.NONE);
-    m_tabFolder.setLayoutData(new GridData(GridData.FILL_BOTH));
-    //
-    ExecutionUtils.runLog(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        createStringsTabs();
-        createPropertiesTab();
-        // if there are no "real" sources, open "Properties" tab
-        if (!m_editableSupport.hasExistingSources()) {
-          m_tabFolder.setSelection(m_tabFolder.getItemCount() - 1);
-        }
-      }
-    });
-    //
-    return area;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Dialog: creation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Control createDialogArea(Composite parent) {
+		Composite area = (Composite) super.createDialogArea(parent);
+		area.setLayout(new GridLayout());
+		//
+		m_tabFolder = new TabFolder(area, SWT.NONE);
+		m_tabFolder.setLayoutData(new GridData(GridData.FILL_BOTH));
+		//
+		ExecutionUtils.runLog(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				createStringsTabs();
+				createPropertiesTab();
+				// if there are no "real" sources, open "Properties" tab
+				if (!m_editableSupport.hasExistingSources()) {
+					m_tabFolder.setSelection(m_tabFolder.getItemCount() - 1);
+				}
+			}
+		});
+		//
+		return area;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Strings tabs
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void createStringsTabs() throws Exception {
-    m_composites = Lists.newArrayList();
-    // create composite for each source
-    List<IEditableSource> sources = getSortedSourcesList();
-    for (IEditableSource editableSource : sources) {
-      int tabIndex = m_tabFolder.getItemCount();
-      SourceComposite composite = createStringsTab(editableSource, tabIndex);
-      m_composites.add(composite);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Strings tabs
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void createStringsTabs() throws Exception {
+		m_composites = Lists.newArrayList();
+		// create composite for each source
+		List<IEditableSource> sources = getSortedSourcesList();
+		for (IEditableSource editableSource : sources) {
+			int tabIndex = m_tabFolder.getItemCount();
+			SourceComposite composite = createStringsTab(editableSource, tabIndex);
+			m_composites.add(composite);
+		}
+	}
 
-  /**
-   * getEditableSources() returns unsorted collection, but we want to show sources sorted by title,
-   * so prepare sorted list.
-   */
-  private List<IEditableSource> getSortedSourcesList() {
-    List<IEditableSource> sources = m_editableSupport.getEditableSources();
-    List<IEditableSource> sourcesList = new ArrayList<IEditableSource>(sources);
-    Collections.sort(sourcesList, new Comparator<IEditableSource>() {
-      @Override
-      public int compare(IEditableSource source_1, IEditableSource source_2) {
-        return source_1.getShortTitle().compareTo(source_2.getShortTitle());
-      }
-    });
-    return sourcesList;
-  }
+	/**
+	 * getEditableSources() returns unsorted collection, but we want to show sources sorted by title,
+	 * so prepare sorted list.
+	 */
+	private List<IEditableSource> getSortedSourcesList() {
+		List<IEditableSource> sources = m_editableSupport.getEditableSources();
+		List<IEditableSource> sourcesList = new ArrayList<IEditableSource>(sources);
+		Collections.sort(sourcesList, new Comparator<IEditableSource>() {
+			@Override
+			public int compare(IEditableSource source_1, IEditableSource source_2) {
+				return source_1.getShortTitle().compareTo(source_2.getShortTitle());
+			}
+		});
+		return sourcesList;
+	}
 
-  private SourceComposite createStringsTab(IEditableSource editableSource, int tabIndex)
-      throws Exception {
-    TabItem item = new TabItem(m_tabFolder, SWT.NONE, tabIndex);
-    item.setText(editableSource.getShortTitle());
-    // create composite for tab
-    SourceComposite composite = new SourceComposite(m_tabFolder, SWT.NONE, editableSource);
-    item.setControl(composite);
-    //
-    return composite;
-  }
+	private SourceComposite createStringsTab(IEditableSource editableSource, int tabIndex)
+			throws Exception {
+		TabItem item = new TabItem(m_tabFolder, SWT.NONE, tabIndex);
+		item.setText(editableSource.getShortTitle());
+		// create composite for tab
+		SourceComposite composite = new SourceComposite(m_tabFolder, SWT.NONE, editableSource);
+		item.setControl(composite);
+		//
+		return composite;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tab: Properties
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void createPropertiesTab() {
-    TabItem item = new TabItem(m_tabFolder, SWT.NONE);
-    item.setText(Messages.NlsDialog_propertiesPage);
-    //
-    PropertiesComposite composite =
-        new PropertiesComposite(m_tabFolder, SWT.NONE, m_editableSupport);
-    item.setControl(composite);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tab: Properties
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void createPropertiesTab() {
+		TabItem item = new TabItem(m_tabFolder, SWT.NONE);
+		item.setText(Messages.NlsDialog_propertiesPage);
+		//
+		PropertiesComposite composite =
+				new PropertiesComposite(m_tabFolder, SWT.NONE, m_editableSupport);
+		item.setControl(composite);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Dialog: shell
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void configureShell(Shell newShell) {
-    super.configureShell(newShell);
-    newShell.setText(Messages.NlsDialog_title);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Dialog: shell
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void configureShell(Shell newShell) {
+		super.configureShell(newShell);
+		newShell.setText(Messages.NlsDialog_title);
+	}
 
-  @Override
-  protected Point getDefaultSize() {
-    Display display = Display.getCurrent();
-    Rectangle displayArea = display.getClientArea();
-    return new Point(displayArea.width / 2, displayArea.height / 2);
-  }
+	@Override
+	protected Point getDefaultSize() {
+		Display display = Display.getCurrent();
+		Rectangle displayArea = display.getClientArea();
+		return new Point(displayArea.width / 2, displayArea.height / 2);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Dialog: buttons
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createButtonsForButtonBar(Composite parent) {
-    createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, false);
-    createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Dialog: buttons
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createButtonsForButtonBar(Composite parent) {
+		createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, false);
+		createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false);
+	}
 
-  @Override
-  protected void okPressed() {
-    getButton(IDialogConstants.OK_ID).setEnabled(false);
-    try {
-      ExecutionUtils.run(m_root, new RunnableEx() {
-        @Override
-        public void run() throws Exception {
-          m_support.applyEditable(m_editableSupport);
-        }
-      });
-    } finally {
-      getButton(IDialogConstants.OK_ID).setEnabled(true);
-    }
-    super.okPressed();
-  }
+	@Override
+	protected void okPressed() {
+		getButton(IDialogConstants.OK_ID).setEnabled(false);
+		try {
+			ExecutionUtils.run(m_root, new RunnableEx() {
+				@Override
+				public void run() throws Exception {
+					m_support.applyEditable(m_editableSupport);
+				}
+			});
+		} finally {
+			getButton(IDialogConstants.OK_ID).setEnabled(true);
+		}
+		super.okPressed();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/ui/PropertiesComposite.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/ui/PropertiesComposite.java
index 5632a7fbb..34d1ed4c1 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/ui/PropertiesComposite.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/ui/PropertiesComposite.java
@@ -65,433 +65,433 @@
  * @coverage core.nls.ui
  */
 public final class PropertiesComposite extends Composite {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Model objects
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final IEditableSupport m_support;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Model objects
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final IEditableSupport m_support;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public PropertiesComposite(Composite parent, int style, IEditableSupport support) {
-    super(parent, style);
-    m_support = support;
-    m_support.addListener(new IEditableSupportListener() {
-      @Override
-      public void sourceAdded(IEditableSource source) {
-        m_sourcesViewer.refresh();
-      }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public PropertiesComposite(Composite parent, int style, IEditableSupport support) {
+		super(parent, style);
+		m_support = support;
+		m_support.addListener(new IEditableSupportListener() {
+			@Override
+			public void sourceAdded(IEditableSource source) {
+				m_sourcesViewer.refresh();
+			}
 
-      @Override
-      public void externalizedPropertiesChanged() {
-        m_propertiesViewer.refresh();
-        m_propertiesViewer.expandAll();
-      }
-    });
-    //
-    setLayout(new GridLayout());
-    createSourcesGroup();
-    createPropertyGroup();
-  }
+			@Override
+			public void externalizedPropertiesChanged() {
+				m_propertiesViewer.refresh();
+				m_propertiesViewer.expandAll();
+			}
+		});
+		//
+		setLayout(new GridLayout());
+		createSourcesGroup();
+		createPropertyGroup();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Sources group
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private ListViewer m_sourcesViewer;
-  private org.eclipse.swt.widgets.List m_sourcesList;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Sources group
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private ListViewer m_sourcesViewer;
+	private org.eclipse.swt.widgets.List m_sourcesList;
 
-  /**
-   * Creates the {@link Group} with {@link IEditableSource}'s.
-   */
-  private void createSourcesGroup() {
-    Group sourceGroup = new Group(this, SWT.NONE);
-    GridDataFactory.create(sourceGroup).alignHF().grabH();
-    GridLayoutFactory.create(sourceGroup).columns(2);
-    sourceGroup.setText(Messages.PropertiesComposite_sourceGroup);
-    {
-      Label label = new Label(sourceGroup, SWT.NONE);
-      GridDataFactory.create(label).fill().grabH().spanH(2);
-      label.setText(Messages.PropertiesComposite_existingSourcesLabel);
-    }
-    {
-      m_sourcesViewer = new ListViewer(sourceGroup, SWT.BORDER);
-      m_sourcesViewer.setContentProvider(new SourcesContentProvider());
-      m_sourcesViewer.setLabelProvider(new SourcesLabelProvider());
-      m_sourcesViewer.setComparator(new ViewerComparator());
-      //
-      m_sourcesList = m_sourcesViewer.getList();
-      GridDataFactory.create(m_sourcesList).fill().grab().hintVC(5);
-      // fill sources list
-      m_sourcesViewer.setInput(this);
-      m_sourcesList.select(0);
-      // install selection listener
-      m_sourcesViewer.addSelectionChangedListener(new ISelectionChangedListener() {
-        @Override
-        public void selectionChanged(SelectionChangedEvent event) {
-          updateExternalizeButton();
-        }
-      });
-    }
-    {
-      Composite buttonsComposite = new Composite(sourceGroup, SWT.NONE);
-      GridDataFactory.create(buttonsComposite).alignVF();
-      GridLayoutFactory.create(buttonsComposite).noMargins();
-      {
-        Button addButton = new Button(buttonsComposite, SWT.NONE);
-        setButtonLayoutData(addButton);
-        addButton.setText(Messages.PropertiesComposite_newbutton);
-        //
-        addButton.addSelectionListener(new SelectionAdapter() {
-          @Override
-          public void widgetSelected(SelectionEvent e) {
-            addNewSource();
-          }
-        });
-      }
-    }
-  }
+	/**
+	 * Creates the {@link Group} with {@link IEditableSource}'s.
+	 */
+	private void createSourcesGroup() {
+		Group sourceGroup = new Group(this, SWT.NONE);
+		GridDataFactory.create(sourceGroup).alignHF().grabH();
+		GridLayoutFactory.create(sourceGroup).columns(2);
+		sourceGroup.setText(Messages.PropertiesComposite_sourceGroup);
+		{
+			Label label = new Label(sourceGroup, SWT.NONE);
+			GridDataFactory.create(label).fill().grabH().spanH(2);
+			label.setText(Messages.PropertiesComposite_existingSourcesLabel);
+		}
+		{
+			m_sourcesViewer = new ListViewer(sourceGroup, SWT.BORDER);
+			m_sourcesViewer.setContentProvider(new SourcesContentProvider());
+			m_sourcesViewer.setLabelProvider(new SourcesLabelProvider());
+			m_sourcesViewer.setComparator(new ViewerComparator());
+			//
+			m_sourcesList = m_sourcesViewer.getList();
+			GridDataFactory.create(m_sourcesList).fill().grab().hintVC(5);
+			// fill sources list
+			m_sourcesViewer.setInput(this);
+			m_sourcesList.select(0);
+			// install selection listener
+			m_sourcesViewer.addSelectionChangedListener(new ISelectionChangedListener() {
+				@Override
+				public void selectionChanged(SelectionChangedEvent event) {
+					updateExternalizeButton();
+				}
+			});
+		}
+		{
+			Composite buttonsComposite = new Composite(sourceGroup, SWT.NONE);
+			GridDataFactory.create(buttonsComposite).alignVF();
+			GridLayoutFactory.create(buttonsComposite).noMargins();
+			{
+				Button addButton = new Button(buttonsComposite, SWT.NONE);
+				setButtonLayoutData(addButton);
+				addButton.setText(Messages.PropertiesComposite_newbutton);
+				//
+				addButton.addSelectionListener(new SelectionAdapter() {
+					@Override
+					public void widgetSelected(SelectionEvent e) {
+						addNewSource();
+					}
+				});
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Properties group
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private CheckboxTreeViewer m_propertiesViewer;
-  private Tree m_propertiesTree;
-  private Button m_externalizeButton;
-  private Button m_copyToAllLocalesButton;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Properties group
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private CheckboxTreeViewer m_propertiesViewer;
+	private Tree m_propertiesTree;
+	private Button m_externalizeButton;
+	private Button m_copyToAllLocalesButton;
 
-  /**
-   * Creates the {@link Group} with components/properties tree.
-   */
-  private void createPropertyGroup() {
-    Group propertyGroup = new Group(this, SWT.NONE);
-    GridDataFactory.create(propertyGroup).grab().fill();
-    GridLayoutFactory.create(propertyGroup).columns(2);
-    propertyGroup.setText(Messages.PropertiesComposite_propertiesGroup);
-    {
-      Label label = new Label(propertyGroup, SWT.NONE);
-      GridDataFactory.create(label).fill().grabH().spanH(2);
-      label.setText(Messages.PropertiesComposite_propertiesLabel);
-    }
-    {
-      m_propertiesViewer = new CheckboxTreeViewer(propertyGroup, SWT.BORDER);
-      m_propertiesViewer.setContentProvider(new PropertiesContentProvider());
-      m_propertiesViewer.setLabelProvider(new PropertiesLabelProvider());
-      // set tree layout data
-      m_propertiesTree = m_propertiesViewer.getTree();
-      GridDataFactory.create(m_propertiesTree).grab().fill();
-      // fill properties viewer
-      m_propertiesViewer.setInput(this);
-      m_propertiesViewer.expandAll();
-      m_propertiesViewer.setGrayedElements(m_support.getComponents().toArray());
-      // install check listener
-      m_propertiesViewer.addCheckStateListener(new ICheckStateListener() {
-        @Override
-        public void checkStateChanged(CheckStateChangedEvent event) {
-          Object element = event.getElement();
-          // if we change "check" state for component, change state for all its properties
-          if (element instanceof JavaInfo) {
-            JavaInfo component = (JavaInfo) element;
-            List<StringPropertyInfo> properties = m_support.getProperties(component);
-            for (StringPropertyInfo property : properties) {
-              m_propertiesViewer.setChecked(property, event.getChecked());
-            }
-          }
-          // in any case update state
-          updateExternalizeButton();
-        }
-      });
-    }
-    //
-    createPropertyButtons(propertyGroup);
-    // create "Copy strings to all locales" check box
-    {
-      m_copyToAllLocalesButton = new Button(propertyGroup, SWT.CHECK);
-      m_copyToAllLocalesButton.setText(Messages.PropertiesComposite_copyButton);
-    }
-  }
+	/**
+	 * Creates the {@link Group} with components/properties tree.
+	 */
+	private void createPropertyGroup() {
+		Group propertyGroup = new Group(this, SWT.NONE);
+		GridDataFactory.create(propertyGroup).grab().fill();
+		GridLayoutFactory.create(propertyGroup).columns(2);
+		propertyGroup.setText(Messages.PropertiesComposite_propertiesGroup);
+		{
+			Label label = new Label(propertyGroup, SWT.NONE);
+			GridDataFactory.create(label).fill().grabH().spanH(2);
+			label.setText(Messages.PropertiesComposite_propertiesLabel);
+		}
+		{
+			m_propertiesViewer = new CheckboxTreeViewer(propertyGroup, SWT.BORDER);
+			m_propertiesViewer.setContentProvider(new PropertiesContentProvider());
+			m_propertiesViewer.setLabelProvider(new PropertiesLabelProvider());
+			// set tree layout data
+			m_propertiesTree = m_propertiesViewer.getTree();
+			GridDataFactory.create(m_propertiesTree).grab().fill();
+			// fill properties viewer
+			m_propertiesViewer.setInput(this);
+			m_propertiesViewer.expandAll();
+			m_propertiesViewer.setGrayedElements(m_support.getComponents().toArray());
+			// install check listener
+			m_propertiesViewer.addCheckStateListener(new ICheckStateListener() {
+				@Override
+				public void checkStateChanged(CheckStateChangedEvent event) {
+					Object element = event.getElement();
+					// if we change "check" state for component, change state for all its properties
+					if (element instanceof JavaInfo) {
+						JavaInfo component = (JavaInfo) element;
+						List<StringPropertyInfo> properties = m_support.getProperties(component);
+						for (StringPropertyInfo property : properties) {
+							m_propertiesViewer.setChecked(property, event.getChecked());
+						}
+					}
+					// in any case update state
+					updateExternalizeButton();
+				}
+			});
+		}
+		//
+		createPropertyButtons(propertyGroup);
+		// create "Copy strings to all locales" check box
+		{
+			m_copyToAllLocalesButton = new Button(propertyGroup, SWT.CHECK);
+			m_copyToAllLocalesButton.setText(Messages.PropertiesComposite_copyButton);
+		}
+	}
 
-  private void createPropertyButtons(final Group propertiesGroup) {
-    Composite buttonsComposite = new Composite(propertiesGroup, SWT.NONE);
-    GridDataFactory.create(buttonsComposite).alignVF();
-    GridLayoutFactory.create(buttonsComposite).noMargins();
-    {
-      Button enableAllButton = new Button(buttonsComposite, SWT.NONE);
-      setButtonLayoutData(enableAllButton);
-      enableAllButton.setText(Messages.PropertiesComposite_enableAllButton);
-      // install handler
-      enableAllButton.addSelectionListener(new SelectionAdapter() {
-        @Override
-        public void widgetSelected(SelectionEvent e) {
-          m_propertiesViewer.setSubtreeChecked(m_support.getRoot(), true);
-          updateExternalizeButton();
-        }
-      });
-    }
-    {
-      Button disableAllButton = new Button(buttonsComposite, SWT.NONE);
-      setButtonLayoutData(disableAllButton);
-      disableAllButton.setText(Messages.PropertiesComposite_disableAllButton);
-      // install handler
-      disableAllButton.addSelectionListener(new SelectionAdapter() {
-        @Override
-        public void widgetSelected(SelectionEvent e) {
-          m_propertiesViewer.setSubtreeChecked(m_support.getRoot(), false);
-          updateExternalizeButton();
-        }
-      });
-    }
-    {
-      Label label = new Label(buttonsComposite, SWT.HORIZONTAL | SWT.SEPARATOR);
-      GridDataFactory.create(label).alignHF();
-      label.setVisible(false);
-    }
-    {
-      m_externalizeButton = new Button(buttonsComposite, SWT.NONE);
-      setButtonLayoutData(m_externalizeButton);
-      m_externalizeButton.setText(Messages.PropertiesComposite_externalizeButton);
-      m_externalizeButton.setEnabled(false);
-      // install handler
-      m_externalizeButton.addSelectionListener(new SelectionAdapter() {
-        @Override
-        public void widgetSelected(SelectionEvent e) {
-          externalizeSelectedProperties();
-        }
-      });
-    }
-  }
+	private void createPropertyButtons(final Group propertiesGroup) {
+		Composite buttonsComposite = new Composite(propertiesGroup, SWT.NONE);
+		GridDataFactory.create(buttonsComposite).alignVF();
+		GridLayoutFactory.create(buttonsComposite).noMargins();
+		{
+			Button enableAllButton = new Button(buttonsComposite, SWT.NONE);
+			setButtonLayoutData(enableAllButton);
+			enableAllButton.setText(Messages.PropertiesComposite_enableAllButton);
+			// install handler
+			enableAllButton.addSelectionListener(new SelectionAdapter() {
+				@Override
+				public void widgetSelected(SelectionEvent e) {
+					m_propertiesViewer.setSubtreeChecked(m_support.getRoot(), true);
+					updateExternalizeButton();
+				}
+			});
+		}
+		{
+			Button disableAllButton = new Button(buttonsComposite, SWT.NONE);
+			setButtonLayoutData(disableAllButton);
+			disableAllButton.setText(Messages.PropertiesComposite_disableAllButton);
+			// install handler
+			disableAllButton.addSelectionListener(new SelectionAdapter() {
+				@Override
+				public void widgetSelected(SelectionEvent e) {
+					m_propertiesViewer.setSubtreeChecked(m_support.getRoot(), false);
+					updateExternalizeButton();
+				}
+			});
+		}
+		{
+			Label label = new Label(buttonsComposite, SWT.HORIZONTAL | SWT.SEPARATOR);
+			GridDataFactory.create(label).alignHF();
+			label.setVisible(false);
+		}
+		{
+			m_externalizeButton = new Button(buttonsComposite, SWT.NONE);
+			setButtonLayoutData(m_externalizeButton);
+			m_externalizeButton.setText(Messages.PropertiesComposite_externalizeButton);
+			m_externalizeButton.setEnabled(false);
+			// install handler
+			m_externalizeButton.addSelectionListener(new SelectionAdapter() {
+				@Override
+				public void widgetSelected(SelectionEvent e) {
+					externalizeSelectedProperties();
+				}
+			});
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Add new source
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected void addNewSource() {
-    NewSourceDialog newSourceDialog = new NewSourceDialog(getShell(), m_support.getRoot());
-    if (newSourceDialog.open() == Window.OK) {
-      // add new source
-      IEditableSource editableSource = newSourceDialog.getNewEditableSource();
-      SourceDescription sourceDescription = newSourceDialog.getNewSourceDescription();
-      Object parameters = newSourceDialog.getNewSourceParameters();
-      // notify support that we have new source, this will also update viewer
-      m_support.addSource(editableSource, sourceDescription, parameters);
-      m_sourcesViewer.setSelection(new StructuredSelection(editableSource));
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Add new source
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected void addNewSource() {
+		NewSourceDialog newSourceDialog = new NewSourceDialog(getShell(), m_support.getRoot());
+		if (newSourceDialog.open() == Window.OK) {
+			// add new source
+			IEditableSource editableSource = newSourceDialog.getNewEditableSource();
+			SourceDescription sourceDescription = newSourceDialog.getNewSourceDescription();
+			Object parameters = newSourceDialog.getNewSourceParameters();
+			// notify support that we have new source, this will also update viewer
+			m_support.addSource(editableSource, sourceDescription, parameters);
+			m_sourcesViewer.setSelection(new StructuredSelection(editableSource));
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Externalize
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Update enable state of "Externalize" button.
-   */
-  private void updateExternalizeButton() {
-    boolean hasSource = !m_sourcesViewer.getSelection().isEmpty();
-    boolean hasProperties = !getSelectedProperties().isEmpty();
-    m_externalizeButton.setEnabled(hasSource && hasProperties);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Externalize
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Update enable state of "Externalize" button.
+	 */
+	private void updateExternalizeButton() {
+		boolean hasSource = !m_sourcesViewer.getSelection().isEmpty();
+		boolean hasProperties = !getSelectedProperties().isEmpty();
+		m_externalizeButton.setEnabled(hasSource && hasProperties);
+	}
 
-  /**
-   * Externalize selected properties in selected source.
-   */
-  private void externalizeSelectedProperties() {
-    IEditableSource source = getSelectedSource();
-    List<StringPropertyInfo> selectedProperties = getSelectedProperties();
-    boolean copyToAllLocales = m_copyToAllLocalesButton.getSelection();
-    // externalize properties in selected source
-    for (StringPropertyInfo propertyInfo : selectedProperties) {
-      m_support.externalizeProperty(propertyInfo, source, copyToAllLocales);
-    }
-    // refresh UI
-    updateExternalizeButton();
-  }
+	/**
+	 * Externalize selected properties in selected source.
+	 */
+	private void externalizeSelectedProperties() {
+		IEditableSource source = getSelectedSource();
+		List<StringPropertyInfo> selectedProperties = getSelectedProperties();
+		boolean copyToAllLocales = m_copyToAllLocalesButton.getSelection();
+		// externalize properties in selected source
+		for (StringPropertyInfo propertyInfo : selectedProperties) {
+			m_support.externalizeProperty(propertyInfo, source, copyToAllLocales);
+		}
+		// refresh UI
+		updateExternalizeButton();
+	}
 
-  /**
-   * Return selected properties.
-   */
-  private List<StringPropertyInfo> getSelectedProperties() {
-    List<StringPropertyInfo> properties = Lists.newArrayList();
-    //
-    Object[] checkedElements = m_propertiesViewer.getCheckedElements();
-    for (Object element : checkedElements) {
-      if (element instanceof StringPropertyInfo) {
-        properties.add((StringPropertyInfo) element);
-      }
-    }
-    //
-    return properties;
-  }
+	/**
+	 * Return selected properties.
+	 */
+	private List<StringPropertyInfo> getSelectedProperties() {
+		List<StringPropertyInfo> properties = Lists.newArrayList();
+		//
+		Object[] checkedElements = m_propertiesViewer.getCheckedElements();
+		for (Object element : checkedElements) {
+			if (element instanceof StringPropertyInfo) {
+				properties.add((StringPropertyInfo) element);
+			}
+		}
+		//
+		return properties;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the selected {@link IEditableSource}.
-   */
-  private IEditableSource getSelectedSource() {
-    IStructuredSelection selection = (IStructuredSelection) m_sourcesViewer.getSelection();
-    return (IEditableSource) selection.getFirstElement();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the selected {@link IEditableSource}.
+	 */
+	private IEditableSource getSelectedSource() {
+		IStructuredSelection selection = (IStructuredSelection) m_sourcesViewer.getSelection();
+		return (IEditableSource) selection.getFirstElement();
+	}
 
-  /**
-   * Sets good layout data for {@link Button}.
-   */
-  private static void setButtonLayoutData(Button button) {
-    GridDataFactory.create(button).hintHU(IDialogConstants.BUTTON_WIDTH);
-  }
+	/**
+	 * Sets good layout data for {@link Button}.
+	 */
+	private static void setButtonLayoutData(Button button) {
+		GridDataFactory.create(button).hintHU(IDialogConstants.BUTTON_WIDTH);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Sources: content provider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private class SourcesContentProvider implements IStructuredContentProvider {
-    @Override
-    public Object[] getElements(Object inputElement) {
-      return m_support.getEditableSources().toArray();
-    }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Sources: content provider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private class SourcesContentProvider implements IStructuredContentProvider {
+		@Override
+		public Object[] getElements(Object inputElement) {
+			return m_support.getEditableSources().toArray();
+		}
 
-    @Override
-    public void dispose() {
-    }
+		@Override
+		public void dispose() {
+		}
 
-    @Override
-    public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
-    }
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Sources: label provider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private class SourcesLabelProvider extends LabelProvider {
-    @Override
-    public String getText(Object element) {
-      IEditableSource source = (IEditableSource) element;
-      return source.getLongTitle();
-    }
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Properties: content provider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private class PropertiesContentProvider
-      implements
-        IStructuredContentProvider,
-        ITreeContentProvider {
-    @Override
-    public Object[] getElements(Object inputElement) {
-      return ExecutionUtils.runObjectLog(new RunnableObjectEx<Object[]>() {
-        @Override
-        public Object[] runObject() throws Exception {
-          JavaInfo root = m_support.getRoot();
-          // show root only if there are properties
-          if (m_support.hasPropertiesInTree(root)) {
-            return new Object[]{root};
-          }
-          // else, show empty tree
-          return ArrayUtils.EMPTY_OBJECT_ARRAY;
-        }
-      }, ArrayUtils.EMPTY_OBJECT_ARRAY);
-    }
+		@Override
+		public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+		}
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Sources: label provider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private class SourcesLabelProvider extends LabelProvider {
+		@Override
+		public String getText(Object element) {
+			IEditableSource source = (IEditableSource) element;
+			return source.getLongTitle();
+		}
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Properties: content provider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private class PropertiesContentProvider
+	implements
+	IStructuredContentProvider,
+	ITreeContentProvider {
+		@Override
+		public Object[] getElements(Object inputElement) {
+			return ExecutionUtils.runObjectLog(new RunnableObjectEx<Object[]>() {
+				@Override
+				public Object[] runObject() throws Exception {
+					JavaInfo root = m_support.getRoot();
+					// show root only if there are properties
+					if (m_support.hasPropertiesInTree(root)) {
+						return new Object[]{root};
+					}
+					// else, show empty tree
+					return ArrayUtils.EMPTY_OBJECT_ARRAY;
+				}
+			}, ArrayUtils.EMPTY_OBJECT_ARRAY);
+		}
 
-    @Override
-    public Object[] getChildren(Object parentElement) {
-      if (parentElement instanceof JavaInfo) {
-        final JavaInfo component = (JavaInfo) parentElement;
-        final List<Object> children = Lists.newArrayList();
-        // add properties
-        children.addAll(m_support.getProperties(component));
-        // add children with properties
-        ExecutionUtils.runLog(new RunnableEx() {
-          @Override
-          public void run() throws Exception {
-            for (JavaInfo child : m_support.getTreeChildren(component)) {
-              if (m_support.hasPropertiesInTree(child)) {
-                children.add(child);
-              }
-            }
-          }
-        });
-        //
-        return children.toArray();
-      }
-      //
-      return ArrayUtils.EMPTY_OBJECT_ARRAY;
-    }
+		@Override
+		public Object[] getChildren(Object parentElement) {
+			if (parentElement instanceof JavaInfo) {
+				final JavaInfo component = (JavaInfo) parentElement;
+				final List<Object> children = Lists.newArrayList();
+				// add properties
+				children.addAll(m_support.getProperties(component));
+				// add children with properties
+				ExecutionUtils.runLog(new RunnableEx() {
+					@Override
+					public void run() throws Exception {
+						for (JavaInfo child : m_support.getTreeChildren(component)) {
+							if (m_support.hasPropertiesInTree(child)) {
+								children.add(child);
+							}
+						}
+					}
+				});
+				//
+				return children.toArray();
+			}
+			//
+			return ArrayUtils.EMPTY_OBJECT_ARRAY;
+		}
 
-    @Override
-    public boolean hasChildren(Object element) {
-      return getChildren(element).length > 0;
-    }
+		@Override
+		public boolean hasChildren(Object element) {
+			return getChildren(element).length > 0;
+		}
 
-    @Override
-    public Object getParent(Object element) {
-      if (element instanceof ObjectInfo) {
-        return ((ObjectInfo) element).getParent();
-      } else {
-        Assert.instanceOf(StringPropertyInfo.class, element);
-        return ((StringPropertyInfo) element).getComponent();
-      }
-    }
+		@Override
+		public Object getParent(Object element) {
+			if (element instanceof ObjectInfo) {
+				return ((ObjectInfo) element).getParent();
+			} else {
+				Assert.instanceOf(StringPropertyInfo.class, element);
+				return ((StringPropertyInfo) element).getComponent();
+			}
+		}
 
-    @Override
-    public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
-    }
+		@Override
+		public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+		}
 
-    @Override
-    public void dispose() {
-    }
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Properties: label provider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private class PropertiesLabelProvider extends LabelProvider {
-    @Override
-    public String getText(final Object element) {
-      return ExecutionUtils.runObjectLog(new RunnableObjectEx<String>() {
-        @Override
-        public String runObject() throws Exception {
-          if (element instanceof JavaInfo) {
-            JavaInfo component = (JavaInfo) element;
-            return component.getPresentation().getText();
-          } else {
-            Assert.instanceOf(StringPropertyInfo.class, element);
-            StringPropertyInfo propertyInfo = (StringPropertyInfo) element;
-            return propertyInfo.getTitle();
-          }
-        }
-      }, null);
-    }
+		@Override
+		public void dispose() {
+		}
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Properties: label provider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private class PropertiesLabelProvider extends LabelProvider {
+		@Override
+		public String getText(final Object element) {
+			return ExecutionUtils.runObjectLog(new RunnableObjectEx<String>() {
+				@Override
+				public String runObject() throws Exception {
+					if (element instanceof JavaInfo) {
+						JavaInfo component = (JavaInfo) element;
+						return component.getPresentation().getText();
+					} else {
+						Assert.instanceOf(StringPropertyInfo.class, element);
+						StringPropertyInfo propertyInfo = (StringPropertyInfo) element;
+						return propertyInfo.getTitle();
+					}
+				}
+			}, null);
+		}
 
-    @Override
-    public Image getImage(final Object element) {
-      return ExecutionUtils.runObjectLog(new RunnableObjectEx<Image>() {
-        @Override
-        public Image runObject() throws Exception {
-          if (element instanceof JavaInfo) {
-            JavaInfo component = (JavaInfo) element;
-            return component.getPresentation().getIcon();
-          } else {
-            Assert.instanceOf(StringPropertyInfo.class, element);
-            return DesignerPlugin.getImage("nls/property.gif");
-          }
-        }
-      }, null);
-    }
-  }
+		@Override
+		public Image getImage(final Object element) {
+			return ExecutionUtils.runObjectLog(new RunnableObjectEx<Image>() {
+				@Override
+				public Image runObject() throws Exception {
+					if (element instanceof JavaInfo) {
+						JavaInfo component = (JavaInfo) element;
+						return component.getPresentation().getIcon();
+					} else {
+						Assert.instanceOf(StringPropertyInfo.class, element);
+						return DesignerPlugin.getImage("nls/property.gif");
+					}
+				}
+			}, null);
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/ui/SourceComposite.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/ui/SourceComposite.java
index 90e88e187..50d0e729f 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/ui/SourceComposite.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/ui/SourceComposite.java
@@ -74,569 +74,569 @@
  * @coverage core.nls.ui
  */
 public final class SourceComposite extends Composite {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Model objects
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final IEditableSource m_source;
-  private LocaleInfo[] m_locales;
-  private final List<String> m_keys = Lists.newArrayList();
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // UI objects
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final PixelConverter m_pixelConverter;
-  private final TableViewer m_viewer;
-  private final Table m_table;
-  private final Button m_currentStringsButton;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Model objects
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final IEditableSource m_source;
+	private LocaleInfo[] m_locales;
+	private final List<String> m_keys = Lists.newArrayList();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// UI objects
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final PixelConverter m_pixelConverter;
+	private final TableViewer m_viewer;
+	private final Table m_table;
+	private final Button m_currentStringsButton;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SourceComposite(Composite parent, int style, IEditableSource source) throws Exception {
-    super(parent, style);
-    m_pixelConverter = new PixelConverter(this);
-    // prepare model
-    {
-      // subscribe on events for this source
-      m_source = source;
-      m_source.addListener(new IEditableSourceListener() {
-        @Override
-        public void keyAdded(String key, Object o) {
-          m_keys.add(key);
-          m_viewer.add(key);
-        }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SourceComposite(Composite parent, int style, IEditableSource source) throws Exception {
+		super(parent, style);
+		m_pixelConverter = new PixelConverter(this);
+		// prepare model
+		{
+			// subscribe on events for this source
+			m_source = source;
+			m_source.addListener(new IEditableSourceListener() {
+				@Override
+				public void keyAdded(String key, Object o) {
+					m_keys.add(key);
+					m_viewer.add(key);
+				}
 
-        @Override
-        public void keyRemoved(String key) {
-          m_keys.remove(key);
-          m_viewer.remove(key);
-        }
+				@Override
+				public void keyRemoved(String key) {
+					m_keys.remove(key);
+					m_viewer.remove(key);
+				}
 
-        @Override
-        public void keyRenamed(String oldKey, String newKey) {
-          if (m_keys.contains(newKey)) {
-            m_viewer.remove(oldKey);
-          } else {
-            int index = m_keys.indexOf(oldKey);
-            m_keys.set(index, newKey);
-            m_viewer.remove(oldKey);
-            m_viewer.insert(newKey, index);
-          }
-          m_viewer.setSelection(new StructuredSelection(newKey));
-        }
-      });
-      // prepare initial keys
-      {
-        m_keys.addAll(m_source.getKeys());
-        Collections.sort(m_keys);
-      }
-    }
-    // create GUI
-    GridLayoutFactory.create(this).columns(2);
-    // create "Strings:" label
-    {
-      Label stringsLabel = new Label(this, SWT.NONE);
-      GridDataFactory.create(stringsLabel).spanH(2).fillH();
-      stringsLabel.setText(Messages.SourceComposite_stringsLabel);
-    }
-    // create viewer
-    {
-      m_viewer = new TableViewer(this, SWT.BORDER | SWT.FULL_SELECTION);
-      m_viewer.setContentProvider(new StringsContentProvider());
-      m_viewer.setLabelProvider(new StringsLabelProvider());
-      m_viewer.setCellModifier(new StringsCellModifier());
-      //
-      m_table = m_viewer.getTable();
-      m_table.setHeaderVisible(true);
-      m_table.setLinesVisible(true);
-      GridDataFactory.create(m_table).spanH(2).grab().fill();
-      //
-      setViewerMenu();
-      setTooltipProvider();
-      // create columns
-      {
-        // create 'key' column
-        {
-          TableColumn keyColumn = new TableColumn(m_table, SWT.NONE);
-          keyColumn.setText(Messages.SourceComposite_keyColumn);
-          keyColumn.setWidth(m_pixelConverter.convertWidthInCharsToPixels(60));
-        }
-        // create locale columns
-        createLocaleColumns();
-      }
-    }
-    // create edit hint label
-    {
-      Label hintLabel = new Label(this, SWT.WRAP);
-      GridDataFactory.create(hintLabel).spanH(2);
-      hintLabel.setText(Messages.SourceComposite_hint);
-    }
-    // create "Show strings only for current form" check box
-    {
-      m_currentStringsButton = new Button(this, SWT.CHECK);
-      m_currentStringsButton.setText(Messages.SourceComposite_onlyCurrentFormFlag);
-      m_currentStringsButton.addSelectionListener(new SelectionAdapter() {
-        @Override
-        public void widgetSelected(SelectionEvent e) {
-          m_viewer.refresh();
-        }
-      });
-    }
-    // create "New locale" button
-    {
-      Button newLocaleButton = new Button(this, SWT.NONE);
-      GridDataFactory.create(newLocaleButton).alignHR();
-      newLocaleButton.setText(Messages.SourceComposite_newLocaleButton);
-      newLocaleButton.addSelectionListener(new SelectionAdapter() {
-        @Override
-        public void widgetSelected(SelectionEvent e) {
-          addNewLocale();
-        }
-      });
-    }
-    // fill viewer
-    m_viewer.setInput(this);
-  }
+				@Override
+				public void keyRenamed(String oldKey, String newKey) {
+					if (m_keys.contains(newKey)) {
+						m_viewer.remove(oldKey);
+					} else {
+						int index = m_keys.indexOf(oldKey);
+						m_keys.set(index, newKey);
+						m_viewer.remove(oldKey);
+						m_viewer.insert(newKey, index);
+					}
+					m_viewer.setSelection(new StructuredSelection(newKey));
+				}
+			});
+			// prepare initial keys
+			{
+				m_keys.addAll(m_source.getKeys());
+				Collections.sort(m_keys);
+			}
+		}
+		// create GUI
+		GridLayoutFactory.create(this).columns(2);
+		// create "Strings:" label
+		{
+			Label stringsLabel = new Label(this, SWT.NONE);
+			GridDataFactory.create(stringsLabel).spanH(2).fillH();
+			stringsLabel.setText(Messages.SourceComposite_stringsLabel);
+		}
+		// create viewer
+		{
+			m_viewer = new TableViewer(this, SWT.BORDER | SWT.FULL_SELECTION);
+			m_viewer.setContentProvider(new StringsContentProvider());
+			m_viewer.setLabelProvider(new StringsLabelProvider());
+			m_viewer.setCellModifier(new StringsCellModifier());
+			//
+			m_table = m_viewer.getTable();
+			m_table.setHeaderVisible(true);
+			m_table.setLinesVisible(true);
+			GridDataFactory.create(m_table).spanH(2).grab().fill();
+			//
+			setViewerMenu();
+			setTooltipProvider();
+			// create columns
+			{
+				// create 'key' column
+				{
+					TableColumn keyColumn = new TableColumn(m_table, SWT.NONE);
+					keyColumn.setText(Messages.SourceComposite_keyColumn);
+					keyColumn.setWidth(m_pixelConverter.convertWidthInCharsToPixels(60));
+				}
+				// create locale columns
+				createLocaleColumns();
+			}
+		}
+		// create edit hint label
+		{
+			Label hintLabel = new Label(this, SWT.WRAP);
+			GridDataFactory.create(hintLabel).spanH(2);
+			hintLabel.setText(Messages.SourceComposite_hint);
+		}
+		// create "Show strings only for current form" check box
+		{
+			m_currentStringsButton = new Button(this, SWT.CHECK);
+			m_currentStringsButton.setText(Messages.SourceComposite_onlyCurrentFormFlag);
+			m_currentStringsButton.addSelectionListener(new SelectionAdapter() {
+				@Override
+				public void widgetSelected(SelectionEvent e) {
+					m_viewer.refresh();
+				}
+			});
+		}
+		// create "New locale" button
+		{
+			Button newLocaleButton = new Button(this, SWT.NONE);
+			GridDataFactory.create(newLocaleButton).alignHR();
+			newLocaleButton.setText(Messages.SourceComposite_newLocaleButton);
+			newLocaleButton.addSelectionListener(new SelectionAdapter() {
+				@Override
+				public void widgetSelected(SelectionEvent e) {
+					addNewLocale();
+				}
+			});
+		}
+		// fill viewer
+		m_viewer.setInput(this);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Columns and cell editors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Disposes all existing columns (except first - for key) and create separate column for each
-   * locale. Sets columns properties and cell editors.
-   */
-  private void createLocaleColumns() {
-    m_locales = m_source.getLocales();
-    LocaleUtils.sortByTitle(m_locales);
-    // dispose existing columns
-    {
-      TableColumn[] columns = m_table.getColumns();
-      for (int i = 1; i < columns.length; i++) {
-        TableColumn column = columns[i];
-        column.dispose();
-      }
-    }
-    // create new columns
-    {
-      for (int i = 0; i < m_locales.length; i++) {
-        LocaleInfo localeInfo = m_locales[i];
-        TableColumn column = new TableColumn(m_table, SWT.NONE);
-        column.setText(localeInfo.getTitle());
-        column.setImage(LocaleUtils.getImage(localeInfo));
-        column.setWidth(m_pixelConverter.convertWidthInCharsToPixels(30));
-      }
-    }
-    // configure viewer
-    {
-      // set column properties
-      {
-        String columnProperties[] = new String[1 + m_locales.length];
-        columnProperties[0] = "key";
-        for (int i = 0; i < m_locales.length; i++) {
-          columnProperties[1 + i] = Integer.toString(i);
-        }
-        m_viewer.setColumnProperties(columnProperties);
-      }
-      // set property editors
-      {
-        CellEditor columnEditors[] = new CellEditor[1 + m_locales.length];
-        for (int i = 0; i < columnEditors.length; i++) {
-          TableTextCellEditor editor = new TableTextCellEditor(m_viewer, i);
-          columnEditors[i] = editor;
-          // support tabbing between columns while editing
-          final int column = i;
-          editor.getText().addTraverseListener(new TraverseListener() {
-            @Override
-            public void keyTraversed(TraverseEvent e) {
-              switch (e.detail) {
-                case SWT.TRAVERSE_TAB_NEXT :
-                  editColumnOrNextPossible(column);
-                  e.detail = SWT.TRAVERSE_NONE;
-                  break;
-                case SWT.TRAVERSE_TAB_PREVIOUS :
-                  editColumnOrPrevPossible(column);
-                  e.detail = SWT.TRAVERSE_NONE;
-                  break;
-              }
-            }
-          });
-        }
-        m_viewer.setCellEditors(columnEditors);
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Columns and cell editors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Disposes all existing columns (except first - for key) and create separate column for each
+	 * locale. Sets columns properties and cell editors.
+	 */
+	private void createLocaleColumns() {
+		m_locales = m_source.getLocales();
+		LocaleUtils.sortByTitle(m_locales);
+		// dispose existing columns
+		{
+			TableColumn[] columns = m_table.getColumns();
+			for (int i = 1; i < columns.length; i++) {
+				TableColumn column = columns[i];
+				column.dispose();
+			}
+		}
+		// create new columns
+		{
+			for (int i = 0; i < m_locales.length; i++) {
+				LocaleInfo localeInfo = m_locales[i];
+				TableColumn column = new TableColumn(m_table, SWT.NONE);
+				column.setText(localeInfo.getTitle());
+				column.setImage(LocaleUtils.getImage(localeInfo));
+				column.setWidth(m_pixelConverter.convertWidthInCharsToPixels(30));
+			}
+		}
+		// configure viewer
+		{
+			// set column properties
+			{
+				String columnProperties[] = new String[1 + m_locales.length];
+				columnProperties[0] = "key";
+				for (int i = 0; i < m_locales.length; i++) {
+					columnProperties[1 + i] = Integer.toString(i);
+				}
+				m_viewer.setColumnProperties(columnProperties);
+			}
+			// set property editors
+			{
+				CellEditor columnEditors[] = new CellEditor[1 + m_locales.length];
+				for (int i = 0; i < columnEditors.length; i++) {
+					TableTextCellEditor editor = new TableTextCellEditor(m_viewer, i);
+					columnEditors[i] = editor;
+					// support tabbing between columns while editing
+					final int column = i;
+					editor.getText().addTraverseListener(new TraverseListener() {
+						@Override
+						public void keyTraversed(TraverseEvent e) {
+							switch (e.detail) {
+							case SWT.TRAVERSE_TAB_NEXT :
+								editColumnOrNextPossible(column);
+								e.detail = SWT.TRAVERSE_NONE;
+								break;
+							case SWT.TRAVERSE_TAB_PREVIOUS :
+								editColumnOrPrevPossible(column);
+								e.detail = SWT.TRAVERSE_NONE;
+								break;
+							}
+						}
+					});
+				}
+				m_viewer.setCellEditors(columnEditors);
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editors navigation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the key selected in viewer.
-   */
-  private String getSelectedKey() {
-    return (String) ((IStructuredSelection) m_viewer.getSelection()).getFirstElement();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editors navigation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the key selected in viewer.
+	 */
+	private String getSelectedKey() {
+		return (String) ((IStructuredSelection) m_viewer.getSelection()).getFirstElement();
+	}
 
-  /**
-   * Activates {@link CellEditor} in next column.
-   */
-  private void editColumnOrNextPossible(int column) {
-    String selectedKey = getSelectedKey();
-    int nextColumn = getNextColumn(column);
-    m_viewer.editElement(selectedKey, nextColumn);
-  }
+	/**
+	 * Activates {@link CellEditor} in next column.
+	 */
+	private void editColumnOrNextPossible(int column) {
+		String selectedKey = getSelectedKey();
+		int nextColumn = getNextColumn(column);
+		m_viewer.editElement(selectedKey, nextColumn);
+	}
 
-  /**
-   * Activates {@link CellEditor} in previous column.
-   */
-  private void editColumnOrPrevPossible(int column) {
-    String selectedKey = getSelectedKey();
-    int prevColumn = getPrevColumn(column);
-    m_viewer.editElement(selectedKey, prevColumn);
-  }
+	/**
+	 * Activates {@link CellEditor} in previous column.
+	 */
+	private void editColumnOrPrevPossible(int column) {
+		String selectedKey = getSelectedKey();
+		int prevColumn = getPrevColumn(column);
+		m_viewer.editElement(selectedKey, prevColumn);
+	}
 
-  /**
-   * @return the index of next column (or first, if given is the last one).
-   */
-  private int getNextColumn(int column) {
-    return column >= m_table.getColumnCount() - 1 ? 0 : column + 1;
-  }
+	/**
+	 * @return the index of next column (or first, if given is the last one).
+	 */
+	private int getNextColumn(int column) {
+		return column >= m_table.getColumnCount() - 1 ? 0 : column + 1;
+	}
 
-  /**
-   * @return the index of previous column (or last, if given is the first one).
-   */
-  private int getPrevColumn(int column) {
-    return column <= 0 ? m_table.getColumnCount() - 1 : column - 1;
-  }
+	/**
+	 * @return the index of previous column (or last, if given is the first one).
+	 */
+	private int getPrevColumn(int column) {
+		return column <= 0 ? m_table.getColumnCount() - 1 : column - 1;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Handlers for actions
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds key/value into all locales.
-   */
-  private void addKeyValue() {
-    AddKeyValueDialog newLocaleDialog = new AddKeyValueDialog(getShell());
-    if (newLocaleDialog.open() == Window.OK) {
-      String key = newLocaleDialog.getKey();
-      String value = newLocaleDialog.getValue();
-      m_source.addKey(key, value);
-      // update UI
-      m_viewer.refresh();
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Handlers for actions
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds key/value into all locales.
+	 */
+	private void addKeyValue() {
+		AddKeyValueDialog newLocaleDialog = new AddKeyValueDialog(getShell());
+		if (newLocaleDialog.open() == Window.OK) {
+			String key = newLocaleDialog.getKey();
+			String value = newLocaleDialog.getValue();
+			m_source.addKey(key, value);
+			// update UI
+			m_viewer.refresh();
+		}
+	}
 
-  /**
-   * Adds new {@link LocaleInfo} using {@link NewLocaleDialog}.
-   */
-  private void addNewLocale() {
-    NewLocaleDialog newLocaleDialog = new NewLocaleDialog(getShell(), m_source.getLocales());
-    if (newLocaleDialog.open() == Window.OK) {
-      // prepare locales information
-      LocaleInfo localeInfo = newLocaleDialog.getSelectedLocale();
-      LocaleInfo baseLocaleInfo = newLocaleDialog.getBaseLocale();
-      // add locale
-      m_source.addLocale(localeInfo, baseLocaleInfo);
-      // update UI
-      createLocaleColumns();
-      m_viewer.refresh();
-    }
-  }
+	/**
+	 * Adds new {@link LocaleInfo} using {@link NewLocaleDialog}.
+	 */
+	private void addNewLocale() {
+		NewLocaleDialog newLocaleDialog = new NewLocaleDialog(getShell(), m_source.getLocales());
+		if (newLocaleDialog.open() == Window.OK) {
+			// prepare locales information
+			LocaleInfo localeInfo = newLocaleDialog.getSelectedLocale();
+			LocaleInfo baseLocaleInfo = newLocaleDialog.getBaseLocale();
+			// add locale
+			m_source.addLocale(localeInfo, baseLocaleInfo);
+			// update UI
+			createLocaleColumns();
+			m_viewer.refresh();
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Popup menu
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void setViewerMenu() {
-    // prepare manager
-    MenuManager menuManager = new MenuManager(null);
-    menuManager.setRemoveAllWhenShown(true);
-    menuManager.addMenuListener(new IMenuListener() {
-      @Override
-      public void menuAboutToShow(IMenuManager manager) {
-        IStructuredSelection selection = (IStructuredSelection) m_viewer.getSelection();
-        // "Internalize key" action
-        if (!selection.isEmpty()) {
-          final String key = (String) selection.getFirstElement();
-          // only keys for current form can be internalized
-          if (m_source.getFormKeys().contains(key)) {
-            manager.add(new Action(Messages.SourceComposite_internalizeKeyAction) {
-              @Override
-              public void run() {
-                // ask confirmation
-                if (!MessageDialog.openConfirm(
-                    getShell(),
-                    Messages.SourceComposite_internalizeTitle,
-                    MessageFormat.format(Messages.SourceComposite_internalizeMessage, key))) {
-                  return;
-                }
-                // do internalize
-                ExecutionUtils.runLog(new RunnableEx() {
-                  @Override
-                  public void run() throws Exception {
-                    m_source.internalizeKey(key);
-                  }
-                });
-              }
-            });
-          }
-        }
-        // "Add key/value" action
-        manager.add(new Action(Messages.SourceComposite_addKeyValueAction) {
-          @Override
-          public void run() {
-            addKeyValue();
-          }
-        });
-        // "Add locale" action
-        manager.add(new Action(Messages.SourceComposite_addLocaleAction) {
-          @Override
-          public void run() {
-            addNewLocale();
-          }
-        });
-        // "Remove locale" action
-        final int column = UiUtils.getColumnUnderCursor(m_table);
-        {
-          Action action = new Action(Messages.SourceComposite_removeLocaleAction) {
-            @Override
-            public void run() {
-              final LocaleInfo locale = m_locales[column - 1];
-              // ask confirmation
-              if (!MessageDialog.openConfirm(
-                  getShell(),
-                  Messages.SourceComposite_removeLocaleTitle,
-                  MessageFormat.format(
-                      Messages.SourceComposite_removeLocaleMessage,
-                      locale.getTitle()))) {
-                return;
-              }
-              // do remove
-              ExecutionUtils.runLog(new RunnableEx() {
-                @Override
-                public void run() throws Exception {
-                  m_source.removeLocale(locale);
-                  createLocaleColumns();
-                  m_viewer.refresh();
-                }
-              });
-            }
-          };
-          action.setEnabled(column > 1 && column < m_table.getColumnCount());
-          manager.add(action);
-        }
-      }
-    });
-    // create menu
-    Menu menu = menuManager.createContextMenu(m_table);
-    m_table.setMenu(menu);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Popup menu
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void setViewerMenu() {
+		// prepare manager
+		MenuManager menuManager = new MenuManager(null);
+		menuManager.setRemoveAllWhenShown(true);
+		menuManager.addMenuListener(new IMenuListener() {
+			@Override
+			public void menuAboutToShow(IMenuManager manager) {
+				IStructuredSelection selection = (IStructuredSelection) m_viewer.getSelection();
+				// "Internalize key" action
+				if (!selection.isEmpty()) {
+					final String key = (String) selection.getFirstElement();
+					// only keys for current form can be internalized
+					if (m_source.getFormKeys().contains(key)) {
+						manager.add(new Action(Messages.SourceComposite_internalizeKeyAction) {
+							@Override
+							public void run() {
+								// ask confirmation
+								if (!MessageDialog.openConfirm(
+										getShell(),
+										Messages.SourceComposite_internalizeTitle,
+										MessageFormat.format(Messages.SourceComposite_internalizeMessage, key))) {
+									return;
+								}
+								// do internalize
+								ExecutionUtils.runLog(new RunnableEx() {
+									@Override
+									public void run() throws Exception {
+										m_source.internalizeKey(key);
+									}
+								});
+							}
+						});
+					}
+				}
+				// "Add key/value" action
+				manager.add(new Action(Messages.SourceComposite_addKeyValueAction) {
+					@Override
+					public void run() {
+						addKeyValue();
+					}
+				});
+				// "Add locale" action
+				manager.add(new Action(Messages.SourceComposite_addLocaleAction) {
+					@Override
+					public void run() {
+						addNewLocale();
+					}
+				});
+				// "Remove locale" action
+				final int column = UiUtils.getColumnUnderCursor(m_table);
+				{
+					Action action = new Action(Messages.SourceComposite_removeLocaleAction) {
+						@Override
+						public void run() {
+							final LocaleInfo locale = m_locales[column - 1];
+							// ask confirmation
+							if (!MessageDialog.openConfirm(
+									getShell(),
+									Messages.SourceComposite_removeLocaleTitle,
+									MessageFormat.format(
+											Messages.SourceComposite_removeLocaleMessage,
+											locale.getTitle()))) {
+								return;
+							}
+							// do remove
+							ExecutionUtils.runLog(new RunnableEx() {
+								@Override
+								public void run() throws Exception {
+									m_source.removeLocale(locale);
+									createLocaleColumns();
+									m_viewer.refresh();
+								}
+							});
+						}
+					};
+					action.setEnabled(column > 1 && column < m_table.getColumnCount());
+					manager.add(action);
+				}
+			}
+		});
+		// create menu
+		Menu menu = menuManager.createContextMenu(m_table);
+		m_table.setMenu(menu);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tooltip
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Installs {@link ITableTooltipProvider} for table.
-   */
-  private void setTooltipProvider() {
-    UiUtils.installTableTooltipProvider(m_table, createTooltipProvider());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tooltip
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Installs {@link ITableTooltipProvider} for table.
+	 */
+	private void setTooltipProvider() {
+		UiUtils.installTableTooltipProvider(m_table, createTooltipProvider());
+	}
 
-  /**
-   * @return the instance of {@link ITableTooltipProvider}.
-   */
-  private ITableTooltipProvider createTooltipProvider() {
-    return new ITableTooltipProvider() {
-      @Override
-      public Control createTooltipControl(TableItem item, Composite parent, int column) {
-        if (column == 0) {
-          // prepare components
-          String key = (String) item.getData();
-          Set<JavaInfo> components = m_source.getComponentsByKey(key);
-          // if we have components, we can create tooltip
-          if (!components.isEmpty()) {
-            // prepare container
-            Composite composite = new Composite(parent, SWT.NONE);
-            setColors(composite);
-            composite.setLayout(new FillLayout(SWT.VERTICAL));
-            // add label for each component
-            for (Iterator<JavaInfo> I = components.iterator(); I.hasNext();) {
-              final JavaInfo component = I.next();
-              final CLabel label = new CLabel(composite, SWT.NONE);
-              setColors(label);
-              ExecutionUtils.runLog(new RunnableEx() {
-                @Override
-                public void run() throws Exception {
-                  IObjectPresentation presentation = component.getPresentation();
-                  label.setImage(presentation.getIcon());
-                  label.setText(presentation.getText());
-                }
-              });
-            }
-            //
-            return composite;
-          }
-        }
-        //
-        return null;
-      }
+	/**
+	 * @return the instance of {@link ITableTooltipProvider}.
+	 */
+	private ITableTooltipProvider createTooltipProvider() {
+		return new ITableTooltipProvider() {
+			@Override
+			public Control createTooltipControl(TableItem item, Composite parent, int column) {
+				if (column == 0) {
+					// prepare components
+					String key = (String) item.getData();
+					Set<JavaInfo> components = m_source.getComponentsByKey(key);
+					// if we have components, we can create tooltip
+					if (!components.isEmpty()) {
+						// prepare container
+						Composite composite = new Composite(parent, SWT.NONE);
+						setColors(composite);
+						composite.setLayout(new FillLayout(SWT.VERTICAL));
+						// add label for each component
+						for (Iterator<JavaInfo> I = components.iterator(); I.hasNext();) {
+							final JavaInfo component = I.next();
+							final CLabel label = new CLabel(composite, SWT.NONE);
+							setColors(label);
+							ExecutionUtils.runLog(new RunnableEx() {
+								@Override
+								public void run() throws Exception {
+									IObjectPresentation presentation = component.getPresentation();
+									label.setImage(presentation.getIcon());
+									label.setText(presentation.getText());
+								}
+							});
+						}
+						//
+						return composite;
+					}
+				}
+				//
+				return null;
+			}
 
-      private void setColors(Control control) {
-        control.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_INFO_BACKGROUND));
-        control.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_INFO_FOREGROUND));
-      }
-    };
-  }
+			private void setColors(Control control) {
+				control.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_INFO_BACKGROUND));
+				control.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_INFO_FOREGROUND));
+			}
+		};
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Content provider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Content provider that returns keys in initial order that keeps same even after renaming. We
-   * don't install any sorter because it is not convenient for user when rows are moved
-   * "under hands".
-   */
-  private class StringsContentProvider implements IStructuredContentProvider {
-    @Override
-    public Object[] getElements(Object inputElement) {
-      if (m_currentStringsButton.getSelection()) {
-        List<String> elements = Lists.newArrayList();
-        Set<String> formKeys = m_source.getFormKeys();
-        for (String key : m_keys) {
-          if (formKeys.contains(key)) {
-            elements.add(key);
-          }
-        }
-        return elements.toArray();
-      } else {
-        return m_keys.toArray();
-      }
-    }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Content provider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Content provider that returns keys in initial order that keeps same even after renaming. We
+	 * don't install any sorter because it is not convenient for user when rows are moved
+	 * "under hands".
+	 */
+	private class StringsContentProvider implements IStructuredContentProvider {
+		@Override
+		public Object[] getElements(Object inputElement) {
+			if (m_currentStringsButton.getSelection()) {
+				List<String> elements = Lists.newArrayList();
+				Set<String> formKeys = m_source.getFormKeys();
+				for (String key : m_keys) {
+					if (formKeys.contains(key)) {
+						elements.add(key);
+					}
+				}
+				return elements.toArray();
+			} else {
+				return m_keys.toArray();
+			}
+		}
 
-    @Override
-    public void dispose() {
-    }
+		@Override
+		public void dispose() {
+		}
 
-    @Override
-    public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
-    }
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Label provider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Implementation of {@link ITableLabelProvider} using values from {@link IEditableSource}.
-   */
-  private class StringsLabelProvider extends LabelProvider implements ITableLabelProvider {
-    @Override
-    public String getColumnText(Object element, int columnIndex) {
-      String key = (String) element;
-      if (columnIndex == 0) {
-        return key;
-      } else {
-        LocaleInfo locale = m_locales[columnIndex - 1];
-        return m_source.getValue(locale, key);
-      }
-    }
+		@Override
+		public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+		}
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Label provider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Implementation of {@link ITableLabelProvider} using values from {@link IEditableSource}.
+	 */
+	private class StringsLabelProvider extends LabelProvider implements ITableLabelProvider {
+		@Override
+		public String getColumnText(Object element, int columnIndex) {
+			String key = (String) element;
+			if (columnIndex == 0) {
+				return key;
+			} else {
+				LocaleInfo locale = m_locales[columnIndex - 1];
+				return m_source.getValue(locale, key);
+			}
+		}
 
-    @Override
-    public Image getColumnImage(Object element, int columnIndex) {
-      if (columnIndex == 0) {
-        // use icon of component that has externalize properties with this key
-        String key = (String) element;
-        Set<JavaInfo> components = m_source.getComponentsByKey(key);
-        if (!components.isEmpty()) {
-          final JavaInfo component = components.iterator().next();
-          return ExecutionUtils.runObjectLog(new RunnableObjectEx<Image>() {
-            @Override
-            public Image runObject() throws Exception {
-              return component.getPresentation().getIcon();
-            }
-          }, null);
-        }
-      }
-      return null;
-    }
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Modifier
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Implementation of {@link ICellModifier} for modifying values and renaming keys.
-   */
-  private class StringsCellModifier implements ICellModifier {
-    @Override
-    public boolean canModify(Object element, String property) {
-      return true;
-    }
+		@Override
+		public Image getColumnImage(Object element, int columnIndex) {
+			if (columnIndex == 0) {
+				// use icon of component that has externalize properties with this key
+				String key = (String) element;
+				Set<JavaInfo> components = m_source.getComponentsByKey(key);
+				if (!components.isEmpty()) {
+					final JavaInfo component = components.iterator().next();
+					return ExecutionUtils.runObjectLog(new RunnableObjectEx<Image>() {
+						@Override
+						public Image runObject() throws Exception {
+							return component.getPresentation().getIcon();
+						}
+					}, null);
+				}
+			}
+			return null;
+		}
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Modifier
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Implementation of {@link ICellModifier} for modifying values and renaming keys.
+	 */
+	private class StringsCellModifier implements ICellModifier {
+		@Override
+		public boolean canModify(Object element, String property) {
+			return true;
+		}
 
-    @Override
-    public Object getValue(Object element, String property) {
-      String key = (String) element;
-      // check for key property
-      if (property.equals("key")) {
-        return key;
-      }
-      // get value for key and locale
-      LocaleInfo locale = getLocaleForProperty(property);
-      String value = m_source.getValue(locale, key);
-      // return value
-      if (value == null) {
-        return "";
-      }
-      return value;
-    }
+		@Override
+		public Object getValue(Object element, String property) {
+			String key = (String) element;
+			// check for key property
+			if (property.equals("key")) {
+				return key;
+			}
+			// get value for key and locale
+			LocaleInfo locale = getLocaleForProperty(property);
+			String value = m_source.getValue(locale, key);
+			// return value
+			if (value == null) {
+				return "";
+			}
+			return value;
+		}
 
-    @Override
-    public void modify(Object element, String property, Object value) {
-      final String stringValue = (String) value;
-      // prepare key
-      final String key;
-      {
-        if (element instanceof Item) {
-          element = ((Item) element).getData();
-        }
-        key = (String) element;
-      }
-      // change key or value
-      if (property.equals("key")) {
-        // key change
-        ExecutionUtils.runLog(new RunnableEx() {
-          @Override
-          public void run() throws Exception {
-            m_source.renameKey(key, stringValue);
-          }
-        });
-      } else {
-        // value change
-        LocaleInfo locale = getLocaleForProperty(property);
-        m_source.setValue(locale, key, stringValue);
-        m_viewer.update(key, new String[]{property});
-      }
-    }
+		@Override
+		public void modify(Object element, String property, Object value) {
+			final String stringValue = (String) value;
+			// prepare key
+			final String key;
+			{
+				if (element instanceof Item) {
+					element = ((Item) element).getData();
+				}
+				key = (String) element;
+			}
+			// change key or value
+			if (property.equals("key")) {
+				// key change
+				ExecutionUtils.runLog(new RunnableEx() {
+					@Override
+					public void run() throws Exception {
+						m_source.renameKey(key, stringValue);
+					}
+				});
+			} else {
+				// value change
+				LocaleInfo locale = getLocaleForProperty(property);
+				m_source.setValue(locale, key, stringValue);
+				m_viewer.update(key, new String[]{property});
+			}
+		}
 
-    private LocaleInfo getLocaleForProperty(String property) {
-      int localeIndex = Integer.parseInt(property);
-      return m_locales[localeIndex];
-    }
-  }
+		private LocaleInfo getLocaleForProperty(String property) {
+			int localeIndex = Integer.parseInt(property);
+			return m_locales[localeIndex];
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/ui/TableTextCellEditor.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/ui/TableTextCellEditor.java
index 61eb25a0f..b00c54db7 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/ui/TableTextCellEditor.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/ui/TableTextCellEditor.java
@@ -44,362 +44,362 @@
  * </ul>
  */
 public class TableTextCellEditor extends CellEditor {
-  private static final int DEFAULT_STYLE = SWT.SINGLE;
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Initial fields
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final TableViewer m_viewer;
-  private final int m_column;
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // UI fields
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * The editor's value on activation. This value is reset to the cell when the editor is left via
-   * ESC key.
-   */
-  private String m_originalValue;
-  private Text m_text;
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // State fields
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private boolean isSelection = false;
-  private boolean isDeleteable = false;
-  private boolean isSelectable = false;
+	private static final int DEFAULT_STYLE = SWT.SINGLE;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Initial fields
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final TableViewer m_viewer;
+	private final int m_column;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// UI fields
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * The editor's value on activation. This value is reset to the cell when the editor is left via
+	 * ESC key.
+	 */
+	private String m_originalValue;
+	private Text m_text;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// State fields
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private boolean isSelection = false;
+	private boolean isDeleteable = false;
+	private boolean isSelectable = false;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public TableTextCellEditor(TableViewer viewer, int column) {
-    super(viewer.getTable(), DEFAULT_STYLE);
-    m_viewer = viewer;
-    m_column = column;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public TableTextCellEditor(TableViewer viewer, int column) {
+		super(viewer.getTable(), DEFAULT_STYLE);
+		m_viewer = viewer;
+		m_column = column;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // CellEditor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void activate() {
-    super.activate();
-    m_originalValue = m_text.getText();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// CellEditor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void activate() {
+		super.activate();
+		m_originalValue = m_text.getText();
+	}
 
-  @Override
-  protected Control createControl(Composite parent) {
-    //workaround for bug 58777: don't accept focus listeners on the text control
-    Composite result = new Composite(parent, SWT.NONE) {
-      @Override
-      public void addListener(int eventType, final Listener listener) {
-        if (eventType != SWT.FocusIn && eventType != SWT.FocusOut) {
-          m_text.addListener(eventType, listener);
-        }
-      }
-    };
-    result.setFont(parent.getFont());
-    result.setBackground(parent.getBackground());
-    result.setLayout(new FillLayout());
-    //
-    m_text = new Text(result, getStyle());
-    m_text.addSelectionListener(new SelectionAdapter() {
-      @Override
-      public void widgetDefaultSelected(SelectionEvent e) {
-        handleDefaultSelection(e);
-      }
-    });
-    m_text.addKeyListener(new KeyAdapter() {
-      @Override
-      public void keyPressed(KeyEvent e) {
-        switch (e.keyCode) {
-          case SWT.ARROW_DOWN :
-            e.doit = false;
-            int nextRow = m_viewer.getTable().getSelectionIndex() + 1;
-            if (nextRow >= m_viewer.getTable().getItemCount()) {
-              break;
-            }
-            editRow(nextRow);
-            break;
-          case SWT.ARROW_UP :
-            e.doit = false;
-            int prevRow = m_viewer.getTable().getSelectionIndex() - 1;
-            if (prevRow < 0) {
-              break;
-            }
-            editRow(prevRow);
-            break;
-        }
-      }
+	@Override
+	protected Control createControl(Composite parent) {
+		//workaround for bug 58777: don't accept focus listeners on the text control
+		Composite result = new Composite(parent, SWT.NONE) {
+			@Override
+			public void addListener(int eventType, final Listener listener) {
+				if (eventType != SWT.FocusIn && eventType != SWT.FocusOut) {
+					m_text.addListener(eventType, listener);
+				}
+			}
+		};
+		result.setFont(parent.getFont());
+		result.setBackground(parent.getBackground());
+		result.setLayout(new FillLayout());
+		//
+		m_text = new Text(result, getStyle());
+		m_text.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetDefaultSelected(SelectionEvent e) {
+				handleDefaultSelection(e);
+			}
+		});
+		m_text.addKeyListener(new KeyAdapter() {
+			@Override
+			public void keyPressed(KeyEvent e) {
+				switch (e.keyCode) {
+				case SWT.ARROW_DOWN :
+					e.doit = false;
+					int nextRow = m_viewer.getTable().getSelectionIndex() + 1;
+					if (nextRow >= m_viewer.getTable().getItemCount()) {
+						break;
+					}
+					editRow(nextRow);
+					break;
+				case SWT.ARROW_UP :
+					e.doit = false;
+					int prevRow = m_viewer.getTable().getSelectionIndex() - 1;
+					if (prevRow < 0) {
+						break;
+					}
+					editRow(prevRow);
+					break;
+				}
+			}
 
-      private void editRow(int row) {
-        m_viewer.getTable().setSelection(row);
-        IStructuredSelection newSelection = (IStructuredSelection) m_viewer.getSelection();
-        if (newSelection.size() == 1) {
-          m_viewer.editElement(newSelection.getFirstElement(), m_column);
-        }
-      }
-    });
-    m_text.addKeyListener(new KeyAdapter() {
-      // hook key pressed - see PR 14201
-      @Override
-      public void keyPressed(KeyEvent e) {
-        keyReleaseOccured(e);
-        // as a result of processing the above call, clients may have
-        // disposed this cell editor
-        if (getControl() == null || getControl().isDisposed()) {
-          return;
-        }
-        checkSelection(); // see explaination below
-        checkDeleteable();
-        checkSelectable();
-      }
-    });
-    m_text.addTraverseListener(new TraverseListener() {
-      @Override
-      public void keyTraversed(TraverseEvent e) {
-        if (e.detail == SWT.TRAVERSE_ESCAPE || e.detail == SWT.TRAVERSE_RETURN) {
-          e.doit = false;
-        }
-      }
-    });
-    // We really want a selection listener but it is not supported so we
-    // use a key listener and a mouse listener to know when selection changes
-    // may have occured
-    m_text.addMouseListener(new MouseAdapter() {
-      @Override
-      public void mouseUp(MouseEvent e) {
-        checkSelection();
-        checkDeleteable();
-        checkSelectable();
-      }
-    });
-    m_text.addFocusListener(new FocusAdapter() {
-      @Override
-      public void focusLost(FocusEvent e) {
-        TableTextCellEditor.this.focusLost();
-      }
-    });
-    m_text.setFont(parent.getFont());
-    m_text.setBackground(parent.getBackground());
-    m_text.setText("");//$NON-NLS-1$
-    //
-    return result;
-  }
+			private void editRow(int row) {
+				m_viewer.getTable().setSelection(row);
+				IStructuredSelection newSelection = (IStructuredSelection) m_viewer.getSelection();
+				if (newSelection.size() == 1) {
+					m_viewer.editElement(newSelection.getFirstElement(), m_column);
+				}
+			}
+		});
+		m_text.addKeyListener(new KeyAdapter() {
+			// hook key pressed - see PR 14201
+			@Override
+			public void keyPressed(KeyEvent e) {
+				keyReleaseOccured(e);
+				// as a result of processing the above call, clients may have
+				// disposed this cell editor
+				if (getControl() == null || getControl().isDisposed()) {
+					return;
+				}
+				checkSelection(); // see explaination below
+				checkDeleteable();
+				checkSelectable();
+			}
+		});
+		m_text.addTraverseListener(new TraverseListener() {
+			@Override
+			public void keyTraversed(TraverseEvent e) {
+				if (e.detail == SWT.TRAVERSE_ESCAPE || e.detail == SWT.TRAVERSE_RETURN) {
+					e.doit = false;
+				}
+			}
+		});
+		// We really want a selection listener but it is not supported so we
+		// use a key listener and a mouse listener to know when selection changes
+		// may have occured
+		m_text.addMouseListener(new MouseAdapter() {
+			@Override
+			public void mouseUp(MouseEvent e) {
+				checkSelection();
+				checkDeleteable();
+				checkSelectable();
+			}
+		});
+		m_text.addFocusListener(new FocusAdapter() {
+			@Override
+			public void focusLost(FocusEvent e) {
+				TableTextCellEditor.this.focusLost();
+			}
+		});
+		m_text.setFont(parent.getFont());
+		m_text.setBackground(parent.getBackground());
+		m_text.setText("");//$NON-NLS-1$
+		//
+		return result;
+	}
 
-  @Override
-  protected void fireCancelEditor() {
-    /* bug 58540: change signature refactoring interaction: validate as you type [refactoring] */
-    m_text.setText(m_originalValue);
-    super.fireApplyEditorValue();
-  }
+	@Override
+	protected void fireCancelEditor() {
+		/* bug 58540: change signature refactoring interaction: validate as you type [refactoring] */
+		m_text.setText(m_originalValue);
+		super.fireApplyEditorValue();
+	}
 
-  /**
-   * The <code>TextCellEditor</code> implementation of this <code>CellEditor</code> framework method
-   * returns the text string.
-   *
-   * @return the text string
-   */
-  @Override
-  protected Object doGetValue() {
-    return m_text.getText();
-  }
+	/**
+	 * The <code>TextCellEditor</code> implementation of this <code>CellEditor</code> framework method
+	 * returns the text string.
+	 *
+	 * @return the text string
+	 */
+	@Override
+	protected Object doGetValue() {
+		return m_text.getText();
+	}
 
-  @Override
-  protected void doSetFocus() {
-    if (m_text != null) {
-      m_text.selectAll();
-      m_text.setFocus();
-      checkSelection();
-      checkDeleteable();
-      checkSelectable();
-    }
-  }
+	@Override
+	protected void doSetFocus() {
+		if (m_text != null) {
+			m_text.selectAll();
+			m_text.setFocus();
+			checkSelection();
+			checkDeleteable();
+			checkSelectable();
+		}
+	}
 
-  /**
-   * The <code>TextCellEditor2</code> implementation of this <code>CellEditor</code> framework
-   * method accepts a text string (type <code>String</code>).
-   *
-   * @param value
-   *          a text string (type <code>String</code>)
-   */
-  @Override
-  protected void doSetValue(Object value) {
-    Assert.isTrue(m_text != null && value instanceof String);
-    m_text.setText((String) value);
-  }
+	/**
+	 * The <code>TextCellEditor2</code> implementation of this <code>CellEditor</code> framework
+	 * method accepts a text string (type <code>String</code>).
+	 *
+	 * @param value
+	 *          a text string (type <code>String</code>)
+	 */
+	@Override
+	protected void doSetValue(Object value) {
+		Assert.isTrue(m_text != null && value instanceof String);
+		m_text.setText((String) value);
+	}
 
-  @Override
-  public LayoutData getLayoutData() {
-    return new LayoutData();
-  }
+	@Override
+	public LayoutData getLayoutData() {
+		return new LayoutData();
+	}
 
-  protected void handleDefaultSelection(SelectionEvent event) {
-    // same with enter-key handling code in keyReleaseOccured(e);
-    fireApplyEditorValue();
-    deactivate();
-  }
+	protected void handleDefaultSelection(SelectionEvent event) {
+		// same with enter-key handling code in keyReleaseOccured(e);
+		fireApplyEditorValue();
+		deactivate();
+	}
 
-  @Override
-  protected void keyReleaseOccured(KeyEvent keyEvent) {
-    if (keyEvent.character == '\r') { // Return key
-      // Enter is handled in handleDefaultSelection.
-      // Do not apply the editor value in response to an Enter key event
-      // since this can be received from the IME when the intent is -not-
-      // to apply the value.
-      // See bug 39074 [CellEditors] [DBCS] canna input mode fires bogus event from Text Control
-      //
-      // An exception is made for Ctrl+Enter for multi-line texts, since
-      // a default selection event is not sent in this case.
-      if (m_text != null && !m_text.isDisposed() && (m_text.getStyle() & SWT.MULTI) != 0) {
-        if ((keyEvent.stateMask & SWT.CTRL) != 0) {
-          super.keyReleaseOccured(keyEvent);
-        }
-      }
-      return;
-    }
-    super.keyReleaseOccured(keyEvent);
-  }
+	@Override
+	protected void keyReleaseOccured(KeyEvent keyEvent) {
+		if (keyEvent.character == '\r') { // Return key
+			// Enter is handled in handleDefaultSelection.
+			// Do not apply the editor value in response to an Enter key event
+			// since this can be received from the IME when the intent is -not-
+			// to apply the value.
+			// See bug 39074 [CellEditors] [DBCS] canna input mode fires bogus event from Text Control
+			//
+			// An exception is made for Ctrl+Enter for multi-line texts, since
+			// a default selection event is not sent in this case.
+			if (m_text != null && !m_text.isDisposed() && (m_text.getStyle() & SWT.MULTI) != 0) {
+				if ((keyEvent.stateMask & SWT.CTRL) != 0) {
+					super.keyReleaseOccured(keyEvent);
+				}
+			}
+			return;
+		}
+		super.keyReleaseOccured(keyEvent);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public Text getText() {
-    return m_text;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public Text getText() {
+		return m_text;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Clipboard operations: check
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected void checkSelection() {
-    boolean oldIsSelection = isSelection;
-    isSelection = m_text.getSelectionCount() > 0;
-    if (oldIsSelection != isSelection) {
-      fireEnablementChanged(COPY);
-      fireEnablementChanged(CUT);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Clipboard operations: check
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected void checkSelection() {
+		boolean oldIsSelection = isSelection;
+		isSelection = m_text.getSelectionCount() > 0;
+		if (oldIsSelection != isSelection) {
+			fireEnablementChanged(COPY);
+			fireEnablementChanged(CUT);
+		}
+	}
 
-  protected void checkDeleteable() {
-    boolean oldIsDeleteable = isDeleteable;
-    isDeleteable = isDeleteEnabled();
-    if (oldIsDeleteable != isDeleteable) {
-      fireEnablementChanged(DELETE);
-    }
-  }
+	protected void checkDeleteable() {
+		boolean oldIsDeleteable = isDeleteable;
+		isDeleteable = isDeleteEnabled();
+		if (oldIsDeleteable != isDeleteable) {
+			fireEnablementChanged(DELETE);
+		}
+	}
 
-  protected void checkSelectable() {
-    boolean oldIsSelectable = isSelectable;
-    isSelectable = isSelectAllEnabled();
-    if (oldIsSelectable != isSelectable) {
-      fireEnablementChanged(SELECT_ALL);
-    }
-  }
+	protected void checkSelectable() {
+		boolean oldIsSelectable = isSelectable;
+		isSelectable = isSelectAllEnabled();
+		if (oldIsSelectable != isSelectable) {
+			fireEnablementChanged(SELECT_ALL);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Clipboard operations: enable
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean isCopyEnabled() {
-    if (m_text == null || m_text.isDisposed()) {
-      return false;
-    }
-    return m_text.getSelectionCount() > 0;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Clipboard operations: enable
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean isCopyEnabled() {
+		if (m_text == null || m_text.isDisposed()) {
+			return false;
+		}
+		return m_text.getSelectionCount() > 0;
+	}
 
-  @Override
-  public boolean isCutEnabled() {
-    if (m_text == null || m_text.isDisposed()) {
-      return false;
-    }
-    return m_text.getSelectionCount() > 0;
-  }
+	@Override
+	public boolean isCutEnabled() {
+		if (m_text == null || m_text.isDisposed()) {
+			return false;
+		}
+		return m_text.getSelectionCount() > 0;
+	}
 
-  @Override
-  public boolean isDeleteEnabled() {
-    if (m_text == null || m_text.isDisposed()) {
-      return false;
-    }
-    return m_text.getSelectionCount() > 0 || m_text.getCaretPosition() < m_text.getCharCount();
-  }
+	@Override
+	public boolean isDeleteEnabled() {
+		if (m_text == null || m_text.isDisposed()) {
+			return false;
+		}
+		return m_text.getSelectionCount() > 0 || m_text.getCaretPosition() < m_text.getCharCount();
+	}
 
-  @Override
-  public boolean isPasteEnabled() {
-    if (m_text == null || m_text.isDisposed()) {
-      return false;
-    }
-    return true;
-  }
+	@Override
+	public boolean isPasteEnabled() {
+		if (m_text == null || m_text.isDisposed()) {
+			return false;
+		}
+		return true;
+	}
 
-  @Override
-  public boolean isSelectAllEnabled() {
-    if (m_text == null || m_text.isDisposed()) {
-      return false;
-    }
-    return m_text.getCharCount() > 0;
-  }
+	@Override
+	public boolean isSelectAllEnabled() {
+		if (m_text == null || m_text.isDisposed()) {
+			return false;
+		}
+		return m_text.getCharCount() > 0;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Clipboard operations: perform
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void performCopy() {
-    m_text.copy();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Clipboard operations: perform
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void performCopy() {
+		m_text.copy();
+	}
 
-  @Override
-  public void performCut() {
-    m_text.cut();
-    checkSelection();
-    checkDeleteable();
-    checkSelectable();
-  }
+	@Override
+	public void performCut() {
+		m_text.cut();
+		checkSelection();
+		checkDeleteable();
+		checkSelectable();
+	}
 
-  @Override
-  public void performDelete() {
-    if (m_text.getSelectionCount() > 0) {
-      // remove the contents of the current selection
-      m_text.insert(""); //$NON-NLS-1$
-    } else {
-      // remove the next character
-      int pos = m_text.getCaretPosition();
-      if (pos < m_text.getCharCount()) {
-        m_text.setSelection(pos, pos + 1);
-        m_text.insert(""); //$NON-NLS-1$
-      }
-    }
-    checkSelection();
-    checkDeleteable();
-    checkSelectable();
-  }
+	@Override
+	public void performDelete() {
+		if (m_text.getSelectionCount() > 0) {
+			// remove the contents of the current selection
+			m_text.insert(""); //$NON-NLS-1$
+		} else {
+			// remove the next character
+			int pos = m_text.getCaretPosition();
+			if (pos < m_text.getCharCount()) {
+				m_text.setSelection(pos, pos + 1);
+				m_text.insert(""); //$NON-NLS-1$
+			}
+		}
+		checkSelection();
+		checkDeleteable();
+		checkSelectable();
+	}
 
-  @Override
-  public void performPaste() {
-    m_text.paste();
-    checkSelection();
-    checkDeleteable();
-    checkSelectable();
-  }
+	@Override
+	public void performPaste() {
+		m_text.paste();
+		checkSelection();
+		checkDeleteable();
+		checkSelectable();
+	}
 
-  @Override
-  public void performSelectAll() {
-    m_text.selectAll();
-    checkSelection();
-    checkDeleteable();
-  }
+	@Override
+	public void performSelectAll() {
+		m_text.selectAll();
+		checkSelection();
+		checkDeleteable();
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/ui/common/AbstractFieldsSourceNewComposite.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/ui/common/AbstractFieldsSourceNewComposite.java
index 5b853d28e..71c5726ef 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/ui/common/AbstractFieldsSourceNewComposite.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/ui/common/AbstractFieldsSourceNewComposite.java
@@ -63,370 +63,370 @@
  * @coverage core.nls.ui
  */
 public abstract class AbstractFieldsSourceNewComposite extends AbstractSourceNewComposite {
-  protected final JavaInfo m_root;
-  protected final AstEditor m_editor;
-  protected final ICompilationUnit m_compilationUnit;
+	protected final JavaInfo m_root;
+	protected final AstEditor m_editor;
+	protected final ICompilationUnit m_compilationUnit;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractFieldsSourceNewComposite(Composite parent, int style, JavaInfo root) {
-    super(parent, style);
-    m_root = root;
-    m_editor = m_root.getEditor();
-    m_compilationUnit = m_editor.getModelUnit();
-    //
-    GridLayoutFactory.create(this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractFieldsSourceNewComposite(Composite parent, int style, JavaInfo root) {
+		super(parent, style);
+		m_root = root;
+		m_editor = m_root.getEditor();
+		m_compilationUnit = m_editor.getModelUnit();
+		//
+		GridLayoutFactory.create(this);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Utility method for creating text field controls and tweaking layout properties.
-   */
-  protected final void createTextFieldControls(Composite parent,
-      StringDialogField field,
-      int nColumns) {
-    DialogFieldUtils.fillControls(parent, field, nColumns, 60);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Utility method for creating text field controls and tweaking layout properties.
+	 */
+	protected final void createTextFieldControls(Composite parent,
+			StringDialogField field,
+			int nColumns) {
+		DialogFieldUtils.fillControls(parent, field, nColumns, 60);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Validation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected final IDialogFieldListener m_validateListener = new IDialogFieldListener() {
-    @Override
-    public void dialogFieldChanged(DialogField field) {
-      validateAll();
-    }
-  };
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Validation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected final IDialogFieldListener m_validateListener = new IDialogFieldListener() {
+		@Override
+		public void dialogFieldChanged(DialogField field) {
+			validateAll();
+		}
+	};
 
-  /**
-   * Validate fields and notify about possible status change.
-   */
-  protected void validateAll() {
-    // force dialog status request
-    firePropertyChanged("status", null, null);
-  }
+	/**
+	 * Validate fields and notify about possible status change.
+	 */
+	protected void validateAll() {
+		// force dialog status request
+		firePropertyChanged("status", null, null);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Validation: utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final Map<String, IStatus> m_statusMap = Maps.newTreeMap();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Validation: utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final Map<String, IStatus> m_statusMap = Maps.newTreeMap();
 
-  protected final void setStatus(String key, IStatus status) {
-    m_statusMap.put(key, status);
-  }
+	protected final void setStatus(String key, IStatus status) {
+		m_statusMap.put(key, status);
+	}
 
-  /**
-   * Mark given status slot as invalid with given message.
-   */
-  protected final void setInvalid(String key, String message) {
-    setStatus(key, StatusUtils.createError(message));
-  }
+	/**
+	 * Mark given status slot as invalid with given message.
+	 */
+	protected final void setInvalid(String key, String message) {
+		setStatus(key, StatusUtils.createError(message));
+	}
 
-  /**
-   * Mark given status slot as valid.
-   */
-  protected final void setValid(String key) {
-    setStatus(key, StatusUtils.OK_STATUS);
-  }
+	/**
+	 * Mark given status slot as valid.
+	 */
+	protected final void setValid(String key) {
+		setStatus(key, StatusUtils.OK_STATUS);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Validation: keys
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static int m_nextKeyId;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Validation: keys
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static int m_nextKeyId;
 
-  /**
-   * @return unique key for validation.
-   */
-  protected final String getUniqueKey() {
-    return Integer.toString(m_nextKeyId++);
-  }
+	/**
+	 * @return unique key for validation.
+	 */
+	protected final String getUniqueKey() {
+		return Integer.toString(m_nextKeyId++);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Check
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final IStatus getStatus() {
-    return StatusUtils.getMostSevere(m_statusMap.values());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Check
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final IStatus getStatus() {
+		return StatusUtils.getMostSevere(m_statusMap.values());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Creating
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Create new empty {@link IEditableSource} with given name.
-   */
-  protected final IEditableSource createEmptyEditable(String name) {
-    EditableSource editableSource = new EditableSource();
-    String title = "NEW: " + name;
-    editableSource.setShortTitle(title);
-    editableSource.setLongTitle(title);
-    editableSource.add(LocaleInfo.DEFAULT, Maps.<String, String>newHashMap());
-    return editableSource;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Creating
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Create new empty {@link IEditableSource} with given name.
+	 */
+	protected final IEditableSource createEmptyEditable(String name) {
+		EditableSource editableSource = new EditableSource();
+		String title = "NEW: " + name;
+		editableSource.setShortTitle(title);
+		editableSource.setLongTitle(title);
+		editableSource.add(LocaleInfo.DEFAULT, Maps.<String, String>newHashMap());
+		return editableSource;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Group for class selection
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected class ClassSelectionGroup {
-    private final PackageRootAndPackageSelectionDialogField m_packageField;
-    private final StringButtonDialogField m_classField;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Group for class selection
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected class ClassSelectionGroup {
+		private final PackageRootAndPackageSelectionDialogField m_packageField;
+		private final StringButtonDialogField m_classField;
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public ClassSelectionGroup(Composite parent, String groupTitle, final String selectPattern) {
-      Group classGroup = new Group(parent, SWT.NONE);
-      GridDataFactory.create(classGroup).grabH().fillH();
-      GridLayoutFactory.create(classGroup).columns(3);
-      classGroup.setText(groupTitle);
-      // create source folder and package selection field
-      {
-        m_packageField =
-            new PackageRootAndPackageSelectionDialogField(60,
-                Messages.AbstractFieldsSourceNewComposite_sourceFolder,
-                Messages.AbstractFieldsSourceNewComposite_sourceFolderBrowse,
-                Messages.AbstractFieldsSourceNewComposite_package,
-                Messages.AbstractFieldsSourceNewComposite_packageBrowse);
-        m_packageField.setDialogFieldListener(m_validateListener);
-        m_packageField.doFillIntoGrid(classGroup, 3);
-      }
-      // create class field
-      {
-        m_classField = new StringButtonDialogField(new IStringButtonAdapter() {
-          @Override
-          public void changeControlPressed(DialogField field) {
-            try {
-              // prepare dialog parameters
-              IPackageFragmentRoot sourceFolder = m_packageField.getRoot();
-              ProgressMonitorDialog context = new ProgressMonitorDialog(DesignerPlugin.getShell());
-              IJavaSearchScope scope =
-                  sourceFolder != null
-                      ? SearchEngine.createJavaSearchScope(new IJavaElement[]{sourceFolder})
-                      : SearchEngine.createWorkspaceScope();
-              // prepare dialog
-              SelectionDialog dialog =
-                  JavaUI.createTypeDialog(
-                      getShell(),
-                      context,
-                      scope,
-                      IJavaElementSearchConstants.CONSIDER_TYPES,
-                      false,
-                      selectPattern);
-              dialog.setTitle(Messages.AbstractFieldsSourceNewComposite_chooseTitle);
-              dialog.setMessage(Messages.AbstractFieldsSourceNewComposite_chooseMessage);
-              // select type
-              if (dialog.open() != Window.OK) {
-                return;
-              }
-              IType type = (IType) dialog.getResult()[0];
-              // update source folder, package and class fields
-              ICompilationUnit compilationUnit = type.getCompilationUnit();
-              m_packageField.setCompilationUnit(compilationUnit);
-              m_classField.setText(type.getElementName());
-            } catch (Throwable e) {
-              DesignerPlugin.log(e);
-            }
-          }
-        });
-        m_classField.setDialogFieldListener(m_validateListener);
-        m_classField.setLabelText(Messages.AbstractFieldsSourceNewComposite_chooseLabel);
-        m_classField.setButtonLabel(Messages.AbstractFieldsSourceNewComposite_chooseBrowse);
-        createTextFieldControls(classGroup, m_classField, 3);
-      }
-      // create additional fields
-      createAdditionalFields(classGroup);
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public ClassSelectionGroup(Composite parent, String groupTitle, final String selectPattern) {
+			Group classGroup = new Group(parent, SWT.NONE);
+			GridDataFactory.create(classGroup).grabH().fillH();
+			GridLayoutFactory.create(classGroup).columns(3);
+			classGroup.setText(groupTitle);
+			// create source folder and package selection field
+			{
+				m_packageField =
+						new PackageRootAndPackageSelectionDialogField(60,
+								Messages.AbstractFieldsSourceNewComposite_sourceFolder,
+								Messages.AbstractFieldsSourceNewComposite_sourceFolderBrowse,
+								Messages.AbstractFieldsSourceNewComposite_package,
+								Messages.AbstractFieldsSourceNewComposite_packageBrowse);
+				m_packageField.setDialogFieldListener(m_validateListener);
+				m_packageField.doFillIntoGrid(classGroup, 3);
+			}
+			// create class field
+			{
+				m_classField = new StringButtonDialogField(new IStringButtonAdapter() {
+					@Override
+					public void changeControlPressed(DialogField field) {
+						try {
+							// prepare dialog parameters
+							IPackageFragmentRoot sourceFolder = m_packageField.getRoot();
+							ProgressMonitorDialog context = new ProgressMonitorDialog(DesignerPlugin.getShell());
+							IJavaSearchScope scope =
+									sourceFolder != null
+									? SearchEngine.createJavaSearchScope(new IJavaElement[]{sourceFolder})
+											: SearchEngine.createWorkspaceScope();
+							// prepare dialog
+							SelectionDialog dialog =
+									JavaUI.createTypeDialog(
+											getShell(),
+											context,
+											scope,
+											IJavaElementSearchConstants.CONSIDER_TYPES,
+											false,
+											selectPattern);
+							dialog.setTitle(Messages.AbstractFieldsSourceNewComposite_chooseTitle);
+							dialog.setMessage(Messages.AbstractFieldsSourceNewComposite_chooseMessage);
+							// select type
+							if (dialog.open() != Window.OK) {
+								return;
+							}
+							IType type = (IType) dialog.getResult()[0];
+							// update source folder, package and class fields
+							ICompilationUnit compilationUnit = type.getCompilationUnit();
+							m_packageField.setCompilationUnit(compilationUnit);
+							m_classField.setText(type.getElementName());
+						} catch (Throwable e) {
+							DesignerPlugin.log(e);
+						}
+					}
+				});
+				m_classField.setDialogFieldListener(m_validateListener);
+				m_classField.setLabelText(Messages.AbstractFieldsSourceNewComposite_chooseLabel);
+				m_classField.setButtonLabel(Messages.AbstractFieldsSourceNewComposite_chooseBrowse);
+				createTextFieldControls(classGroup, m_classField, 3);
+			}
+			// create additional fields
+			createAdditionalFields(classGroup);
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Additional handling
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    protected void createAdditionalFields(Composite parent) {
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Additional handling
+		//
+		////////////////////////////////////////////////////////////////////////////
+		protected void createAdditionalFields(Composite parent) {
+		}
 
-    protected void setClassExists(boolean exists) {
-    }
+		protected void setClassExists(boolean exists) {
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Validation
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    private final String KEY_FOLDER = getUniqueKey();
-    private final String KEY_PACKAGE = getUniqueKey();
-    private final String KEY_CLASS = getUniqueKey();
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Validation
+		//
+		////////////////////////////////////////////////////////////////////////////
+		private final String KEY_FOLDER = getUniqueKey();
+		private final String KEY_PACKAGE = getUniqueKey();
+		private final String KEY_CLASS = getUniqueKey();
 
-    public void validate() {
-      // validate source folder
-      {
-        IPackageFragmentRoot root = m_packageField.getRoot();
-        if (root == null || !root.exists()) {
-          setInvalid(KEY_FOLDER, Messages.AbstractFieldsSourceNewComposite_validateSourceFolder);
-        } else {
-          setValid(KEY_FOLDER);
-        }
-      }
-      // validate package
-      String packageName = null;
-      {
-        IPackageFragment pkg = m_packageField.getPackage();
-        packageName = pkg == null ? null : pkg.getElementName();
-        if (pkg == null || !pkg.exists()) {
-          setInvalid(KEY_PACKAGE, Messages.AbstractFieldsSourceNewComposite_validatePackage);
-        } else if (pkg.getElementName().length() == 0) {
-          setInvalid(KEY_PACKAGE, Messages.AbstractFieldsSourceNewComposite_validatePackageDefault);
-        } else {
-          setValid(KEY_PACKAGE);
-        }
-      }
-      // validate class name
-      String className = m_classField.getText();
-      {
-        IStatus status = JavaConventions.validateJavaTypeName(className);
-        if (className.indexOf('.') != -1) {
-          setInvalid(KEY_CLASS, Messages.AbstractFieldsSourceNewComposite_validateClassDot);
-        } else if (status.getSeverity() != IStatus.OK) {
-          setStatus(KEY_CLASS, status);
-        } else {
-          setValid(KEY_CLASS);
-        }
-        // check such class already exists
-        try {
-          String fullClassName = packageName + "." + className;
-          IType type = m_editor.getJavaProject().findType(fullClassName);
-          setClassExists(type == null);
-        } catch (Throwable e) {
-          setInvalid(KEY_CLASS, "Exception: " + e.getMessage());
-        }
-      }
-    }
+		public void validate() {
+			// validate source folder
+			{
+				IPackageFragmentRoot root = m_packageField.getRoot();
+				if (root == null || !root.exists()) {
+					setInvalid(KEY_FOLDER, Messages.AbstractFieldsSourceNewComposite_validateSourceFolder);
+				} else {
+					setValid(KEY_FOLDER);
+				}
+			}
+			// validate package
+			String packageName = null;
+			{
+				IPackageFragment pkg = m_packageField.getPackage();
+				packageName = pkg == null ? null : pkg.getElementName();
+				if (pkg == null || !pkg.exists()) {
+					setInvalid(KEY_PACKAGE, Messages.AbstractFieldsSourceNewComposite_validatePackage);
+				} else if (pkg.getElementName().length() == 0) {
+					setInvalid(KEY_PACKAGE, Messages.AbstractFieldsSourceNewComposite_validatePackageDefault);
+				} else {
+					setValid(KEY_PACKAGE);
+				}
+			}
+			// validate class name
+			String className = m_classField.getText();
+			{
+				IStatus status = JavaConventions.validateJavaTypeName(className);
+				if (className.indexOf('.') != -1) {
+					setInvalid(KEY_CLASS, Messages.AbstractFieldsSourceNewComposite_validateClassDot);
+				} else if (status.getSeverity() != IStatus.OK) {
+					setStatus(KEY_CLASS, status);
+				} else {
+					setValid(KEY_CLASS);
+				}
+				// check such class already exists
+				try {
+					String fullClassName = packageName + "." + className;
+					IType type = m_editor.getJavaProject().findType(fullClassName);
+					setClassExists(type == null);
+				} catch (Throwable e) {
+					setInvalid(KEY_CLASS, "Exception: " + e.getMessage());
+				}
+			}
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Access
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public final void initialize(String initialClassName) {
-      m_packageField.setCompilationUnit(m_compilationUnit);
-      m_classField.setText(initialClassName);
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Access
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public final void initialize(String initialClassName) {
+			m_packageField.setCompilationUnit(m_compilationUnit);
+			m_classField.setText(initialClassName);
+		}
 
-    public final SourceClassParameters getParameters() throws Exception {
-      SourceClassParameters parameters = new SourceClassParameters();
-      parameters.m_sourceFolder = m_packageField.getRoot();
-      parameters.m_package = m_packageField.getPackage();
-      parameters.m_packageFolder = (IFolder) parameters.m_package.getUnderlyingResource();
-      parameters.m_packageName = parameters.m_package.getElementName();
-      parameters.m_className = m_classField.getText();
-      parameters.m_fullClassName = parameters.m_packageName + "." + parameters.m_className;
-      // prepare m_exists
-      {
-        IJavaProject javaProject = m_editor.getJavaProject();
-        parameters.m_exists = javaProject.findType(parameters.m_fullClassName) != null;
-      }
-      //
-      return parameters;
-    }
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Group for field name
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected final class FieldNameGroup {
-    private final StringDialogField m_field;
+		public final SourceClassParameters getParameters() throws Exception {
+			SourceClassParameters parameters = new SourceClassParameters();
+			parameters.m_sourceFolder = m_packageField.getRoot();
+			parameters.m_package = m_packageField.getPackage();
+			parameters.m_packageFolder = (IFolder) parameters.m_package.getUnderlyingResource();
+			parameters.m_packageName = parameters.m_package.getElementName();
+			parameters.m_className = m_classField.getText();
+			parameters.m_fullClassName = parameters.m_packageName + "." + parameters.m_className;
+			// prepare m_exists
+			{
+				IJavaProject javaProject = m_editor.getJavaProject();
+				parameters.m_exists = javaProject.findType(parameters.m_fullClassName) != null;
+			}
+			//
+			return parameters;
+		}
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Group for field name
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected final class FieldNameGroup {
+		private final StringDialogField m_field;
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public FieldNameGroup(Composite parent, String groupTitle) {
-      Group fieldGroup = new Group(parent, SWT.NONE);
-      GridDataFactory.create(fieldGroup).grabH().fillH();
-      GridLayoutFactory.create(fieldGroup).columns(2);
-      fieldGroup.setText(groupTitle);
-      // create field name field
-      {
-        m_field = new StringDialogField();
-        m_field.setDialogFieldListener(m_validateListener);
-        m_field.setLabelText(Messages.AbstractFieldsSourceNewComposite_fieldName);
-        createTextFieldControls(fieldGroup, m_field, 2);
-      }
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public FieldNameGroup(Composite parent, String groupTitle) {
+			Group fieldGroup = new Group(parent, SWT.NONE);
+			GridDataFactory.create(fieldGroup).grabH().fillH();
+			GridLayoutFactory.create(fieldGroup).columns(2);
+			fieldGroup.setText(groupTitle);
+			// create field name field
+			{
+				m_field = new StringDialogField();
+				m_field.setDialogFieldListener(m_validateListener);
+				m_field.setLabelText(Messages.AbstractFieldsSourceNewComposite_fieldName);
+				createTextFieldControls(fieldGroup, m_field, 2);
+			}
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Validation
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    private final String KEY_FIELD_NAME = getUniqueKey();
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Validation
+		//
+		////////////////////////////////////////////////////////////////////////////
+		private final String KEY_FIELD_NAME = getUniqueKey();
 
-    public void validate() {
-      final String fieldName = m_field.getText();
-      // check that there are no field or variable with same name
-      {
-        // check, may be there is such name in CU
-        final boolean hasSuchName[] = new boolean[1];
-        m_editor.getAstUnit().accept(new ASTVisitor() {
-          @Override
-          public void endVisit(SimpleName node) {
-            hasSuchName[0] |= node.getIdentifier().equals(fieldName);
-          }
-        });
-        // set status
-        if (hasSuchName[0]) {
-          setInvalid(KEY_FIELD_NAME, MessageFormat.format(
-              Messages.AbstractFieldsSourceNewComposite_validateFieldNameUsed,
-              fieldName));
-          return;
-        }
-      }
-      // validate that field is valid identifier
-      {
-        IStatus status = JavaConventions.validateFieldName(fieldName);
-        if (!status.isOK()) {
-          setStatus(KEY_FIELD_NAME, status);
-          return;
-        }
-      }
-      // all is good
-      setValid(KEY_FIELD_NAME);
-    }
+		public void validate() {
+			final String fieldName = m_field.getText();
+			// check that there are no field or variable with same name
+			{
+				// check, may be there is such name in CU
+				final boolean hasSuchName[] = new boolean[1];
+				m_editor.getAstUnit().accept(new ASTVisitor() {
+					@Override
+					public void endVisit(SimpleName node) {
+						hasSuchName[0] |= node.getIdentifier().equals(fieldName);
+					}
+				});
+				// set status
+				if (hasSuchName[0]) {
+					setInvalid(KEY_FIELD_NAME, MessageFormat.format(
+							Messages.AbstractFieldsSourceNewComposite_validateFieldNameUsed,
+							fieldName));
+					return;
+				}
+			}
+			// validate that field is valid identifier
+			{
+				IStatus status = JavaConventions.validateFieldName(fieldName);
+				if (!status.isOK()) {
+					setStatus(KEY_FIELD_NAME, status);
+					return;
+				}
+			}
+			// all is good
+			setValid(KEY_FIELD_NAME);
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Access
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public void initialize(String initialFieldName) {
-      m_field.setText(initialFieldName);
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Access
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public void initialize(String initialFieldName) {
+			m_field.setText(initialFieldName);
+		}
 
-    public String getName() {
-      return m_field.getText();
-    }
-  }
+		public String getName() {
+			return m_field.getText();
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/ui/common/SourceClassParameters.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/ui/common/SourceClassParameters.java
index 5f357f6ef..bd27fafb1 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/ui/common/SourceClassParameters.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/nls/ui/common/SourceClassParameters.java
@@ -23,11 +23,11 @@
  * @coverage core.nls
  */
 public class SourceClassParameters {
-  public IPackageFragmentRoot m_sourceFolder;
-  public IPackageFragment m_package;
-  public IFolder m_packageFolder;
-  public String m_packageName;
-  public String m_className;
-  public String m_fullClassName;
-  public boolean m_exists;
+	public IPackageFragmentRoot m_sourceFolder;
+	public IPackageFragment m_package;
+	public IFolder m_packageFolder;
+	public String m_packageName;
+	public String m_className;
+	public String m_fullClassName;
+	public boolean m_exists;
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/parser/AbstractParseFactory.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/parser/AbstractParseFactory.java
index 9c39a8dc4..46192ab51 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/parser/AbstractParseFactory.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/parser/AbstractParseFactory.java
@@ -96,863 +96,863 @@
  * @coverage core.model.parser
  */
 public abstract class AbstractParseFactory implements IParseFactory {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IParseFactory
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public ParseRootContext getRootContext(AstEditor editor,
-      TypeDeclaration typeDeclaration,
-      ITypeBinding typeBinding) throws Exception {
-    return null;
-  }
-
-  @Override
-  public JavaInfo create(AstEditor editor, Expression expression) throws Exception {
-    // (Type) super.someMethodInvocation()
-    if (expression instanceof CastExpression) {
-      CastExpression castExpression = (CastExpression) expression;
-      if (castExpression.getExpression() instanceof SuperMethodInvocation) {
-        // prepare component Class
-        Class<?> componentClass;
-        {
-          String componentClassName = AstNodeUtils.getFullyQualifiedName(expression, true);
-          componentClass = EditorState.get(editor).getEditorLoader().loadClass(componentClassName);
-        }
-        // create JavaInfo
-        return JavaInfoUtils.createJavaInfo(
-            editor,
-            componentClass,
-            new CastedSuperInvocationCreationSupport(castExpression));
-      }
-    }
-    // super.someMethodInvocation()
-    if (expression instanceof SuperMethodInvocation
-        && expression.getLocationInParent() != CastExpression.EXPRESSION_PROPERTY) {
-      SuperMethodInvocation invocation = (SuperMethodInvocation) expression;
-      ITypeBinding typeBinding = AstNodeUtils.getTypeBinding(invocation);
-      if (isToolkitObject(editor, typeBinding)) {
-        // prepare component Class
-        Class<?> componentClass;
-        {
-          String componentClassName = AstNodeUtils.getFullyQualifiedName(typeBinding, true);
-          componentClass = EditorState.get(editor).getEditorLoader().loadClass(componentClassName);
-        }
-        // create JavaInfo
-        return JavaInfoUtils.createJavaInfo(
-            editor,
-            componentClass,
-            new SuperInvocationCreationSupport(invocation));
-      }
-    }
-    // can not create model
-    return null;
-  }
-
-  @Override
-  public JavaInfo create(final AstEditor editor,
-      ClassInstanceCreation creation,
-      final IMethodBinding methodBinding,
-      ITypeBinding typeBinding,
-      Expression[] arguments,
-      JavaInfo[] argumentInfos) throws Exception {
-    final Class<?> creationClass = getClass(editor, typeBinding);
-    if (creationClass == null) {
-      return null;
-    }
-    // non-visual bean
-    {
-      NonVisualBeanInfo nonVisualInfo = NonVisualBeanContainerInfo.getNonVisualInfo(creation);
-      if (nonVisualInfo != null) {
-        CreationSupport creationSupport = new ConstructorCreationSupport(creation);
-        JavaInfo javaInfo = JavaInfoUtils.createJavaInfo(editor, creationClass, creationSupport);
-        nonVisualInfo.setJavaInfo(javaInfo);
-        return javaInfo;
-      }
-    }
-    // instance
-    {
-      JavaInfo javaInfo =
-          createInstance(
-              editor,
-              typeBinding,
-              new RunnableObjectEx<AbstractInvocationDescription>() {
-                @Override
-                public AbstractInvocationDescription runObject() throws Exception {
-                  ComponentDescription description =
-                      ComponentDescriptionHelper.getDescription(editor, creationClass);
-                  return description.getConstructor(methodBinding);
-                }
-              },
-              argumentInfos,
-              new ConstructorCreationSupport(creation));
-      if (javaInfo != null) {
-        return javaInfo;
-      }
-    }
-    // instance factory
-    if (InstanceFactoryInfo.isFactory(editor, creationClass)) {
-      CreationSupport creationSupport = new ConstructorCreationSupport(creation);
-      return InstanceFactoryInfo.createFactory(editor, creationClass, creationSupport);
-    }
-    // can not create model
-    return null;
-  }
-
-  @Override
-  public JavaInfo create(AstEditor editor,
-      MethodInvocation invocation,
-      IMethodBinding methodBinding,
-      Expression[] arguments,
-      JavaInfo expressionInfo,
-      JavaInfo[] argumentInfos,
-      IJavaInfoParseResolver javaInfoResolver) throws Exception {
-    // check for "implicit factory" component creation
-    if (expressionInfo != null) {
-      MethodDescription methodDescription =
-          expressionInfo.getDescription().getMethod(methodBinding);
-      if (methodDescription != null && methodDescription.hasTrueTag("implicitFactory")) {
-        JavaInfo javaInfo =
-            createImplicitFactory(
-                editor,
-                invocation,
-                expressionInfo,
-                argumentInfos,
-                methodDescription);
-        if (javaInfo != null) {
-          return javaInfo;
-        }
-      }
-    }
-    // check for "invocation chain" pattern
-    {
-      // prepare signatures chain
-      String allSignatures = "";
-      MethodInvocation currentInvocation = invocation;
-      while (true) {
-        allSignatures =
-            AstNodeUtils.getMethodSignature(currentInvocation)
-                + (allSignatures.length() != 0 ? "." : "")
-                + allSignatures;
-        if (currentInvocation.getExpression() instanceof MethodInvocation) {
-          currentInvocation = (MethodInvocation) currentInvocation.getExpression();
-        } else {
-          break;
-        }
-      }
-      // use last Expression as host JavaInfo
-      JavaInfo hostJavaInfo =
-          currentInvocation == invocation
-              ? expressionInfo
-              : javaInfoResolver.getJavaInfo(currentInvocation.getExpression());
-      if (hostJavaInfo != null) {
-        String componentClassName =
-            JavaInfoUtils.getParameter(hostJavaInfo, "invocationChain: " + allSignatures);
-        if (componentClassName != null) {
-          // if no class name, use method return type
-          if (componentClassName.length() == 0) {
-            componentClassName =
-                AstNodeUtils.getFullyQualifiedName(methodBinding.getReturnType(), true);
-          }
-          // create JavaInfo
-          CreationSupport creationSupport =
-              new InvocationChainCreationSupport(invocation, allSignatures);
-          JavaInfo javaInfo =
-              JavaInfoUtils.createJavaInfo(editor, componentClassName, creationSupport);
-          javaInfo.setAssociation(new EmptyAssociation());
-          hostJavaInfo.addChild(javaInfo);
-          return javaInfo;
-        }
-      }
-    }
-    // check for internal "void factory" component creation
-    if (expressionInfo != null) {
-      MethodDescription methodDescription =
-          expressionInfo.getDescription().getMethod(methodBinding);
-      if (methodDescription != null) {
-        String voidCreationSupportClassName =
-            methodDescription.getTag("voidFactory.creationSupport");
-        String voidComponentClassName = methodDescription.getTag("voidFactory.componentClass");
-        if (!StringUtils.isEmpty(voidCreationSupportClassName)
-            && !StringUtils.isEmpty(voidComponentClassName)) {
-          if (!createVoidFactory_hasRequiredJavaInfo(methodDescription, argumentInfos)) {
-            return null;
-          }
-          // prepare CreationSupport
-          CreationSupport creationSupport;
-          {
-            Class<?> voidCreationSupportClass =
-                DescriptionHelper.loadModelClass(voidCreationSupportClassName);
-            Constructor<?> constructor =
-                ReflectionUtils.getConstructor(
-                    voidCreationSupportClass,
-                    JavaInfo.class,
-                    MethodDescription.class,
-                    MethodInvocation.class,
-                    JavaInfo[].class);
-            Assert.isNotNull(constructor, "Can not find constructor "
-                + voidCreationSupportClassName
-                + "(JavaInfo,MethodDescription,MethodInvocation,JavaInfo[])");
-            creationSupport =
-                (CreationSupport) constructor.newInstance(
-                    expressionInfo,
-                    methodDescription,
-                    invocation,
-                    argumentInfos);
-          }
-          Class<?> componentClass =
-              EditorState.get(editor).getEditorLoader().loadClass(voidComponentClassName);
-          //
-          JavaInfo javaInfo =
-              createVoidFactory(
-                  editor,
-                  invocation,
-                  expressionInfo,
-                  argumentInfos,
-                  methodDescription,
-                  componentClass,
-                  creationSupport);
-          if (javaInfo != null) {
-            return javaInfo;
-          }
-        }
-      }
-    }
-    // check for "instance factory" component creation
-    if (expressionInfo instanceof InstanceFactoryInfo) {
-      InstanceFactoryInfo factoryInfo = (InstanceFactoryInfo) expressionInfo;
-      FactoryMethodDescription description = getFactory(editor, methodBinding, false);
-      if (description != null) {
-        JavaInfo javaInfo =
-            createInstanceFactory(
-                editor,
-                invocation,
-                methodBinding,
-                argumentInfos,
-                factoryInfo,
-                description);
-        if (javaInfo != null) {
-          return javaInfo;
-        }
-      }
-    }
-    // check for "static factory" component creation
-    if (AstNodeUtils.isStatic(methodBinding)) {
-      FactoryMethodDescription description = getFactory(editor, methodBinding, true);
-      if (description != null) {
-        JavaInfo javaInfo =
-            createStaticFactory(editor, invocation, methodBinding, argumentInfos, description);
-        if (javaInfo != null) {
-          return javaInfo;
-        }
-      }
-    }
-    // no JavaInfo for MethodInvocation
-    return null;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Class utilities
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link Class} loaded using {@link ClassLoader} of given {@link AstEditor}. May
-   *         return <code>null</code> if class can not be loaded.
-   */
-  protected static Class<?> getClass(AstEditor editor, ITypeBinding typeBinding) {
-    try {
-      ClassLoader classLoader = EditorState.get(editor).getEditorLoader();
-      String componentClassName = AstNodeUtils.getFullyQualifiedName(typeBinding, true);
-      Class<?> clazz = classLoader.loadClass(componentClassName);
-      // we don't need inner Class
-      if (clazz.getEnclosingClass() != null
-          && !java.lang.reflect.Modifier.isStatic(clazz.getModifiers())) {
-        return null;
-      }
-      // good Class
-      return clazz;
-    } catch (Throwable e) {
-      return null;
-    }
-  }
-
-  /**
-   * @return the {@link Class} loaded using {@link ClassLoader} of given {@link AstEditor}. We use
-   *         this method to load "super" {@link Class}, so if any exception happens, we consider it
-   *         as serious and throw fatal exception.
-   */
-  protected static Class<?> getSuperClass(AstEditor editor, ITypeBinding typeBinding) {
-    String componentClassName = AstNodeUtils.getFullyQualifiedName(typeBinding, true);
-    try {
-      ClassLoader classLoader = EditorState.get(editor).getEditorLoader();
-      return classLoader.loadClass(componentClassName);
-    } catch (Throwable e) {
-      throw new DesignerException(ICoreExceptionConstants.PARSER_NO_SUPER_CLASS,
-          e,
-          componentClassName);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Other
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if given {@link ITypeBinding} is Toolkit object.
-   */
-  public boolean isToolkitObject(AstEditor editor, ITypeBinding typeBinding) throws Exception {
-    return false;
-  }
-
-  /**
-   * We don't support parsing static/instance factories. So, we should fail and show explicit
-   * warning.
-   */
-  protected static void failIfFactory(AstEditor editor,
-      TypeDeclaration typeDeclaration,
-      ITypeBinding typeBinding) throws Exception {
-    String typeName = AstNodeUtils.getFullyQualifiedName(typeDeclaration, true);
-    if (FactoryDescriptionHelper.isFactoryClass(editor, typeName)) {
-      throw new DesignerException(ICoreExceptionConstants.PARSER_FACTORY_NOT_SUPPORTED);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the existing constructor or newly added default constructor.
-   */
-  protected static MethodDeclaration getConstructor(AstEditor editor,
-      TypeDeclaration typeDeclaration) throws Exception {
-    MethodDeclaration constructor;
-    try {
-      constructor = ExecutionFlowUtils.getExecutionFlowConstructor(typeDeclaration);
-    } catch (MultipleConstructorsError e) {
-      throw new MultipleConstructorsError(editor, typeDeclaration);
-    }
-    // if no constructor, add default
-    if (constructor == null) {
-      String header = "public " + typeDeclaration.getName().getIdentifier() + "()";
-      constructor =
-          editor.addMethodDeclaration(
-              header,
-              Collections.<String>emptyList(),
-              new BodyDeclarationTarget(typeDeclaration, true));
-      constructor.setConstructor(true);
-      // commit changes into compilation unit
-      editor.commitChanges();
-      // we should also save changes, else IMethod's will have invalid source ranges
-      editor.getModelUnit().save(null, true);
-    }
-    return constructor;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Factories
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return {@link FactoryMethodDescription} for given {@link IMethodBinding} or <code>null</code>
-   *         if there are no valid factory.
-   */
-  public static FactoryMethodDescription getFactory(AstEditor editor,
-      IMethodBinding methodBinding,
-      boolean forStatic) throws Exception {
-    // prepare factory class
-    Class<?> factoryClass;
-    {
-      ITypeBinding declaringClass = methodBinding.getDeclaringClass();
-      factoryClass = getClass(editor, declaringClass);
-      if (factoryClass == null) {
-        return null;
-      }
-    }
-    // prepare method signature
-    String methodSignature = AstNodeUtils.getMethodSignature(methodBinding);
-    // get static factory description
-    FactoryMethodDescription description =
-        FactoryDescriptionHelper.getDescription(editor, factoryClass, methodSignature, forStatic);
-    if (description != null && description.isFactory()) {
-      return description;
-    }
-    // no valid factory
-    return null;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Creating JavaInfo for various Classes
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private JavaInfo createInstance(AstEditor editor,
-      ITypeBinding typeBinding,
-      RunnableObjectEx<AbstractInvocationDescription> methodDescriptionProvider,
-      JavaInfo[] argumentInfos,
-      CreationSupport creationSupport) throws Exception {
-    Class<?> objectClass = getClass(editor, typeBinding);
-    if (objectClass == null) {
-      return null;
-    }
-    // instance factory
-    if (InstanceFactoryInfo.isFactory(editor, objectClass)) {
-      return InstanceFactoryInfo.createFactory(editor, objectClass, creationSupport);
-    }
-    // toolkit
-    if (isToolkitObject(editor, typeBinding)) {
-      return JavaInfoUtils.createJavaInfo(editor, objectClass, creationSupport);
-    }
-    // wrappers
-    if (WrapperMethodInfo.isWrapper(editor, objectClass)) {
-      WrapperMethodInfo wrapperJavaInfo =
-          (WrapperMethodInfo) JavaInfoUtils.createJavaInfo(editor, objectClass, creationSupport);
-      AbstractInvocationDescription methodDescription = methodDescriptionProvider.runObject();
-      wrapperJavaInfo.getWrapper().configureWrapper(methodDescription, argumentInfos);
-      wrapperJavaInfo.setAssociation(new ConstructorParentAssociation());
-      return wrapperJavaInfo;
-    }
-    // unknown type
-    return null;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Creating JavaInfo for various Factories
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Processing void implicit factory
-   */
-  protected JavaInfo createVoidFactory(AstEditor editor,
-      MethodInvocation invocation,
-      JavaInfo expressionInfo,
-      JavaInfo[] argumentInfos,
-      MethodDescription methodDescription,
-      Class<?> componentClass,
-      CreationSupport creationSupport) throws Exception {
-    JavaInfo javaInfo = JavaInfoUtils.createJavaInfo(editor, componentClass, creationSupport);
-    javaInfo.setVariableSupport(new VoidInvocationVariableSupport(javaInfo));
-    javaInfo.setAssociation(new InvocationVoidAssociation(invocation));
-    expressionInfo.addChild(javaInfo);
-    return javaInfo;
-  }
-
-  /**
-   * If parameter should be {@link JavaInfo}, this should be specified in
-   * {@link ParameterDescription} using "voidFactory.requiredJavaInfo" tag.
-   */
-  private static boolean createVoidFactory_hasRequiredJavaInfo(MethodDescription methodDescription,
-      JavaInfo[] argumentInfos) {
-    List<ParameterDescription> parameters = methodDescription.getParameters();
-    for (ParameterDescription parameter : parameters) {
-      if (parameter.hasTrueTag("voidFactory.requiredJavaInfo")) {
-        int index = parameter.getIndex();
-        if (argumentInfos[index] == null) {
-          return false;
-        }
-      }
-    }
-    return true;
-  }
-
-  /**
-   * Processing static factory
-   */
-  protected JavaInfo createStaticFactory(AstEditor editor,
-      MethodInvocation invocation,
-      IMethodBinding methodBinding,
-      JavaInfo[] argumentInfos,
-      FactoryMethodDescription factoryMethodDescription) throws Exception {
-    JavaInfo javaInfo =
-        createStaticFactory_JavaInfo(
-            editor,
-            invocation,
-            methodBinding,
-            argumentInfos,
-            factoryMethodDescription);
-    // check for parent
-    if (javaInfo != null) {
-      for (ParameterDescription parameter : factoryMethodDescription.getParameters()) {
-        if (parameter.isParent()) {
-          JavaInfo parent = argumentInfos[parameter.getIndex()];
-          if (parent != null) {
-            javaInfo.setAssociation(new FactoryParentAssociation(invocation));
-            if (javaInfo.getParent() == null) {
-              parent.addChild(javaInfo);
-            }
-          } else {
-            String message = "No parent model for " + invocation;
-            EditorState.get(editor).addWarning(new EditorWarning(message));
-          }
-        }
-      }
-    }
-    // done
-    return javaInfo;
-  }
-
-  private JavaInfo createStaticFactory_JavaInfo(AstEditor editor,
-      MethodInvocation invocation,
-      IMethodBinding methodBinding,
-      JavaInfo[] argumentInfos,
-      FactoryMethodDescription factoryMethodDescription) throws Exception {
-    Class<?> objectClass = factoryMethodDescription.getReturnClass();
-    CreationSupport creationSupport =
-        new StaticFactoryCreationSupport(factoryMethodDescription, invocation);
-    // instance factory
-    if (InstanceFactoryInfo.isFactory(editor, objectClass)) {
-      return InstanceFactoryInfo.createFactory(editor, objectClass, creationSupport);
-    }
-    // toolkit
-    if (isToolkitObject(editor, methodBinding.getReturnType())) {
-      ComponentDescription componentDescription =
-          ComponentDescriptionHelper.getDescription(editor, factoryMethodDescription);
-      return JavaInfoUtils.createJavaInfo(editor, componentDescription, creationSupport);
-    }
-    // wrappers
-    if (WrapperMethodInfo.isWrapper(editor, objectClass)) {
-      WrapperMethodInfo wrapperJavaInfo =
-          (WrapperMethodInfo) JavaInfoUtils.createJavaInfo(editor, objectClass, creationSupport);
-      wrapperJavaInfo.getWrapper().configureWrapper(factoryMethodDescription, argumentInfos);
-      return wrapperJavaInfo;
-    }
-    // check for non-visual bean
-    NonVisualBeanInfo nonVisualInfo = NonVisualBeanContainerInfo.getNonVisualInfo(invocation);
-    if (nonVisualInfo != null) {
-      JavaInfo javaInfo = JavaInfoUtils.createJavaInfo(editor, objectClass, creationSupport);
-      nonVisualInfo.setJavaInfo(javaInfo);
-      return javaInfo;
-    }
-    // unknown
-    return null;
-  }
-
-  /**
-   * Processing instance factory
-   *
-   * @param methodBinding
-   */
-  protected JavaInfo createInstanceFactory(AstEditor editor,
-      MethodInvocation invocation,
-      IMethodBinding methodBinding,
-      JavaInfo[] argumentInfos,
-      InstanceFactoryInfo factoryInfo,
-      FactoryMethodDescription description) throws Exception {
-    Class<?> returnClass = description.getReturnClass();
-    // ignore interfaces
-    if (returnClass.isInterface()) {
-      return null;
-    }
-    // create JavaInfo
-    JavaInfo javaInfo =
-        JavaInfoUtils.createJavaInfo(
-            editor,
-            returnClass,
-            new InstanceFactoryCreationSupport(factoryInfo, description, invocation));
-    // try to associate with parent
-    for (ParameterDescription parameter : description.getParameters()) {
-      if (parameter.isParent()) {
-        JavaInfo parameterJavaInfo = argumentInfos[parameter.getIndex()];
-        if (parameterJavaInfo != null) {
-          javaInfo.setAssociation(new FactoryParentAssociation(invocation));
-          parameterJavaInfo.addChild(javaInfo);
-        }
-      }
-    }
-    // check for non-visual bean
-    NonVisualBeanInfo nonVisualInfo = NonVisualBeanContainerInfo.getNonVisualInfo(invocation);
-    if (nonVisualInfo != null) {
-      nonVisualInfo.setJavaInfo(javaInfo);
-    }
-    // component created using instance factory
-    return javaInfo;
-  }
-
-  /**
-   * Processing implicit factory
-   */
-  protected JavaInfo createImplicitFactory(AstEditor editor,
-      MethodInvocation invocation,
-      JavaInfo expressionInfo,
-      JavaInfo[] argumentInfos,
-      MethodDescription methodDescription) throws Exception {
-    JavaInfo javaInfo =
-        JavaInfoUtils.createJavaInfo(
-            editor,
-            methodDescription.getReturnClass(),
-            new ImplicitFactoryCreationSupport(methodDescription, invocation));
-    //  try to find parent
-    for (ParameterDescription parameter : methodDescription.getParameters()) {
-      JavaInfo parameterJavaInfo = argumentInfos[parameter.getIndex()];
-      if (parameter.isParent()) {
-        javaInfo.setAssociation(new FactoryParentAssociation(invocation));
-        parameterJavaInfo.addChild(javaInfo);
-      }
-      if (parameter.hasTrueTag("implicitFactory.child")) {
-        Assert.isNotNull(
-            parameterJavaInfo,
-            "Argument %d in %s %s should be not-null JavaInfo.",
-            parameter.getIndex(),
-            methodDescription,
-            invocation);
-        parameterJavaInfo.setAssociation(new ImplicitFactoryArgumentAssociation(invocation,
-            javaInfo));
-        javaInfo.addChild(parameterJavaInfo);
-      }
-    }
-    // if no association yet, associate with "expression"
-    if (javaInfo.getParent() == null) {
-      javaInfo.setAssociation(new InvocationVoidAssociation(invocation));
-      expressionInfo.addChild(javaInfo);
-    }
-    return javaInfo;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ClassLoader
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the toolkit id.
-   */
-  protected abstract String getToolkitId();
-
-  /**
-   * Creates complex {@link ClassLoader} for given {@link AstEditor}.
-   */
-  protected void initializeClassLoader(AstEditor editor) throws Exception {
-    EditorState editorState = EditorState.get(editor);
-    if (editorState.isInitialized()) {
-      return;
-    }
-    String toolkitId = getToolkitId();
-    // set ClassLoader
-    ClassLoader classLoader = getClassLoader(editor);
-    editorState.initialize(toolkitId, classLoader);
-    initializeClassLoader(classLoader, toolkitId);
-    // configure
-    IJavaProject javaProject = editor.getJavaProject();
-    runUserConfigurationScripts(editorState, javaProject);
-    configureDescriptionVersionsProviders(editorState, javaProject);
-  }
-
-  /**
-   * @return the {@link ClassLoader} to use for given {@link AstEditor}.
-   */
-  protected ClassLoader getClassLoader(AstEditor editor) throws Exception {
-    CompositeClassLoader parentClassLoader = createClassLoader_parent(editor);
-    initializeClassLoader_parent(editor, parentClassLoader);
-    ClassLoader projectClassLoader = createClassLoader_project(editor, parentClassLoader);
-    return createCompositeLoader(projectClassLoader, getToolkitId());
-  }
-
-  /**
-   * Create {@link ClassLoader}'s that should be in parent of "project" {@link ClassLoader}.
-   */
-  protected CompositeClassLoader createClassLoader_parent(AstEditor editor) throws Exception {
-    return new CompositeClassLoader();
-  }
-
-  protected void initializeClassLoader_parent(AstEditor editor,
-      CompositeClassLoader parentClassLoader) throws Exception {
-    // add class loader for ByteBuddy enhancement
-    parentClassLoader.add(
-        new BundleClassLoader("org.eclipse.wb.core.java"),
-        List.of("net.bytebuddy.", "org.eclipse.wb.internal.core.model.creation"));;
-    // add class loaders for "classLoader-bundle" contributions
-    List<IConfigurationElement> toolkitElements =
-        DescriptionHelper.getToolkitElements(getToolkitId());
-    for (IConfigurationElement toolkitElement : toolkitElements) {
-      IConfigurationElement[] contributorElements =
-          toolkitElement.getChildren("classLoader-bundle");
-      for (IConfigurationElement contributorElement : contributorElements) {
-        Bundle bundle = getExistingBundle(contributorElement);
-        List<String> namespaces = getBundleClassLoaderNamespaces(contributorElement);
-        ClassLoader classLoader = new BundleClassLoader(bundle);
-        parentClassLoader.add(classLoader, namespaces);
-      }
-    }
-  }
-
-  private static List<String> getBundleClassLoaderNamespaces(IConfigurationElement contributorElement) {
-    String namespacesString = contributorElement.getAttribute("namespaces");
-    if (namespacesString != null) {
-      return ImmutableList.copyOf(StringUtils.split(namespacesString));
-    }
-    return null;
-  }
-
-  /**
-   * Create "project" {@link ClassLoader}.
-   */
-  protected ClassLoader createClassLoader_project(AstEditor editor,
-      CompositeClassLoader parentClassLoader) throws Exception {
-    return ProjectClassLoader.create(parentClassLoader, editor.getJavaProject());
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ClassLoader utilities
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the composite {@link ClassLoader} based on given main {@link ClassLoader} with addition
-   *         of {@link BundleClassLoader}'s and {@link IByteCodeProcessor}'s.
-   */
-  protected static CompositeClassLoader createCompositeLoader(ClassLoader mainClassLoader,
-      String toolkitId) throws Exception {
-    List<IConfigurationElement> toolkitElements = DescriptionHelper.getToolkitElements(toolkitId);
-    CompositeClassLoader compositeClassLoader = new CompositeClassLoader();
-    // add project class loader
-    compositeClassLoader.add(mainClassLoader, null);
-    // add processors for "classPath-byteCode-processor"
-    if (mainClassLoader instanceof ProjectClassLoader) {
-      ProjectClassLoader projectClassLoader = (ProjectClassLoader) mainClassLoader;
-      for (IConfigurationElement toolkitElement : toolkitElements) {
-        IConfigurationElement[] contributorElements =
-            toolkitElement.getChildren("classPath-byteCode-processor");
-        for (IConfigurationElement contributorElement : contributorElements) {
-          IByteCodeProcessor processor =
-              (IByteCodeProcessor) contributorElement.createExecutableExtension("processor");
-          projectClassLoader.add(processor);
-        }
-      }
-    }
-    // add class loaders for "classLoader-library" contributions
-    for (IConfigurationElement toolkitElement : toolkitElements) {
-      IConfigurationElement[] contributorElements =
-          toolkitElement.getChildren("classLoader-library");
-      if (contributorElements.length != 0) {
-        URL[] urls = new URL[contributorElements.length];
-        for (int i = 0; i < contributorElements.length; i++) {
-          IConfigurationElement contributorElement = contributorElements[i];
-          Bundle bundle = getExistingBundle(contributorElement);
-          // prepare URL for JAR
-          String jarPath = contributorElement.getAttribute("jar");
-          URL jarEntry = bundle.getEntry(jarPath);
-          Assert.isNotNull(jarEntry, "Unable to find %s in %s", jarPath, bundle.getSymbolicName());
-          urls[i] = FileLocator.toFileURL(jarEntry);
-        }
-        // add ClassLoader with all libraries
-        compositeClassLoader.add(new URLClassLoader(urls, mainClassLoader), null);
-      }
-    }
-    // return final ClassLoader
-    return compositeClassLoader;
-  }
-
-  /**
-   * @return {@link Bundle} specified in attribute "bundle".
-   */
-  private static Bundle getExistingBundle(IConfigurationElement contributorElement) {
-    String bundleId = ExternalFactoriesHelper.getRequiredAttribute(contributorElement, "bundle");
-    return getExistingBundle(bundleId);
-  }
-
-  private static Bundle getExistingBundle(String bundleId) {
-    Bundle bundle = Platform.getBundle(bundleId);
-    Assert.isNotNull(bundle, "Unable to find Bundle %s", bundleId);
-    return bundle;
-  }
-
-  /**
-   * Initializes {@link ClassLoader} with registered {@link IClassLoaderInitializer}'s.
-   */
-  protected static void initializeClassLoader(ClassLoader classLoader, String toolkitId)
-      throws Exception {
-    List<IConfigurationElement> elements =
-        ExternalFactoriesHelper.getElements(
-            "org.eclipse.wb.core.java.classLoaderInitializers",
-            "initializer");
-    for (IConfigurationElement element : elements) {
-      if (ExternalFactoriesHelper.getRequiredAttribute(element, "toolkit").equals(toolkitId)) {
-        IClassLoaderInitializer initializer =
-            ExternalFactoriesHelper.createExecutableExtension(element, "class");
-        initializer.initialize(classLoader);
-      }
-    }
-  }
-
-  /**
-   * Deinitializes {@link ClassLoader} with registered {@link IClassLoaderInitializer}'s.
-   */
-  public static void deinitializeClassLoader(ClassLoader classLoader, String toolkitId)
-      throws Exception {
-    List<IConfigurationElement> elements =
-        ExternalFactoriesHelper.getElements(
-            "org.eclipse.wb.core.java.classLoaderInitializers",
-            "initializer");
-    for (IConfigurationElement element : elements) {
-      if (ExternalFactoriesHelper.getRequiredAttribute(element, "toolkit").equals(toolkitId)) {
-        IClassLoaderInitializer initializer =
-            ExternalFactoriesHelper.createExecutableExtension(element, "class");
-        initializer.deinitialize(classLoader);
-      }
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IDescriptionVersionsProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Installs {@link IDescriptionVersionsProvider}'s.
-   */
-  protected static void configureDescriptionVersionsProviders(EditorState editorState,
-      IJavaProject javaProject) throws Exception {
-    ClassLoader classLoader = editorState.getEditorLoader();
-    List<IDescriptionVersionsProviderFactory> factories =
-        ExternalFactoriesHelper.getElementsInstances(
-            IDescriptionVersionsProviderFactory.class,
-            "org.eclipse.wb.core.descriptionVersionsProviderFactories",
-            "factory");
-    for (IDescriptionVersionsProviderFactory factory : factories) {
-      // versions
-      editorState.addVersions(factory.getVersions(javaProject, classLoader));
-      // version providers
-      {
-        IDescriptionVersionsProvider provider = factory.getProvider(javaProject, classLoader);
-        if (provider != null) {
-          editorState.addDescriptionVersionsProvider(provider);
-        }
-      }
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Configuration scripts
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Runs all <code>wbp-meta/ConfigureClassLoader.mvel</code> scripts to configure
-   * {@link ClassLoader}.
-   */
-  protected static void runUserConfigurationScripts(EditorState editorState,
-      IJavaProject javaProject) throws Exception {
-    ClassLoader classLoader = editorState.getEditorLoader();
-    List<IFile> scriptFiles =
-        ProjectUtils.findFiles(javaProject, "wbp-meta/ConfigureClassLoader.mvel");
-    for (IFile scriptFile : scriptFiles) {
-      String script = IOUtils2.readString(scriptFile);
-      try {
-        ScriptUtils.evaluate(classLoader, script);
-      } catch (Throwable e) {
-        String message =
-            MessageFormat.format(
-                "Can not execute {0}\n{1}",
-                scriptFile.getFullPath().toPortableString(),
-                script);
-        editorState.addWarning(new EditorWarning(message, e));
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IParseFactory
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public ParseRootContext getRootContext(AstEditor editor,
+			TypeDeclaration typeDeclaration,
+			ITypeBinding typeBinding) throws Exception {
+		return null;
+	}
+
+	@Override
+	public JavaInfo create(AstEditor editor, Expression expression) throws Exception {
+		// (Type) super.someMethodInvocation()
+		if (expression instanceof CastExpression) {
+			CastExpression castExpression = (CastExpression) expression;
+			if (castExpression.getExpression() instanceof SuperMethodInvocation) {
+				// prepare component Class
+				Class<?> componentClass;
+				{
+					String componentClassName = AstNodeUtils.getFullyQualifiedName(expression, true);
+					componentClass = EditorState.get(editor).getEditorLoader().loadClass(componentClassName);
+				}
+				// create JavaInfo
+				return JavaInfoUtils.createJavaInfo(
+						editor,
+						componentClass,
+						new CastedSuperInvocationCreationSupport(castExpression));
+			}
+		}
+		// super.someMethodInvocation()
+		if (expression instanceof SuperMethodInvocation
+				&& expression.getLocationInParent() != CastExpression.EXPRESSION_PROPERTY) {
+			SuperMethodInvocation invocation = (SuperMethodInvocation) expression;
+			ITypeBinding typeBinding = AstNodeUtils.getTypeBinding(invocation);
+			if (isToolkitObject(editor, typeBinding)) {
+				// prepare component Class
+				Class<?> componentClass;
+				{
+					String componentClassName = AstNodeUtils.getFullyQualifiedName(typeBinding, true);
+					componentClass = EditorState.get(editor).getEditorLoader().loadClass(componentClassName);
+				}
+				// create JavaInfo
+				return JavaInfoUtils.createJavaInfo(
+						editor,
+						componentClass,
+						new SuperInvocationCreationSupport(invocation));
+			}
+		}
+		// can not create model
+		return null;
+	}
+
+	@Override
+	public JavaInfo create(final AstEditor editor,
+			ClassInstanceCreation creation,
+			final IMethodBinding methodBinding,
+			ITypeBinding typeBinding,
+			Expression[] arguments,
+			JavaInfo[] argumentInfos) throws Exception {
+		final Class<?> creationClass = getClass(editor, typeBinding);
+		if (creationClass == null) {
+			return null;
+		}
+		// non-visual bean
+		{
+			NonVisualBeanInfo nonVisualInfo = NonVisualBeanContainerInfo.getNonVisualInfo(creation);
+			if (nonVisualInfo != null) {
+				CreationSupport creationSupport = new ConstructorCreationSupport(creation);
+				JavaInfo javaInfo = JavaInfoUtils.createJavaInfo(editor, creationClass, creationSupport);
+				nonVisualInfo.setJavaInfo(javaInfo);
+				return javaInfo;
+			}
+		}
+		// instance
+		{
+			JavaInfo javaInfo =
+					createInstance(
+							editor,
+							typeBinding,
+							new RunnableObjectEx<AbstractInvocationDescription>() {
+								@Override
+								public AbstractInvocationDescription runObject() throws Exception {
+									ComponentDescription description =
+											ComponentDescriptionHelper.getDescription(editor, creationClass);
+									return description.getConstructor(methodBinding);
+								}
+							},
+							argumentInfos,
+							new ConstructorCreationSupport(creation));
+			if (javaInfo != null) {
+				return javaInfo;
+			}
+		}
+		// instance factory
+		if (InstanceFactoryInfo.isFactory(editor, creationClass)) {
+			CreationSupport creationSupport = new ConstructorCreationSupport(creation);
+			return InstanceFactoryInfo.createFactory(editor, creationClass, creationSupport);
+		}
+		// can not create model
+		return null;
+	}
+
+	@Override
+	public JavaInfo create(AstEditor editor,
+			MethodInvocation invocation,
+			IMethodBinding methodBinding,
+			Expression[] arguments,
+			JavaInfo expressionInfo,
+			JavaInfo[] argumentInfos,
+			IJavaInfoParseResolver javaInfoResolver) throws Exception {
+		// check for "implicit factory" component creation
+		if (expressionInfo != null) {
+			MethodDescription methodDescription =
+					expressionInfo.getDescription().getMethod(methodBinding);
+			if (methodDescription != null && methodDescription.hasTrueTag("implicitFactory")) {
+				JavaInfo javaInfo =
+						createImplicitFactory(
+								editor,
+								invocation,
+								expressionInfo,
+								argumentInfos,
+								methodDescription);
+				if (javaInfo != null) {
+					return javaInfo;
+				}
+			}
+		}
+		// check for "invocation chain" pattern
+		{
+			// prepare signatures chain
+			String allSignatures = "";
+			MethodInvocation currentInvocation = invocation;
+			while (true) {
+				allSignatures =
+						AstNodeUtils.getMethodSignature(currentInvocation)
+						+ (allSignatures.length() != 0 ? "." : "")
+						+ allSignatures;
+				if (currentInvocation.getExpression() instanceof MethodInvocation) {
+					currentInvocation = (MethodInvocation) currentInvocation.getExpression();
+				} else {
+					break;
+				}
+			}
+			// use last Expression as host JavaInfo
+			JavaInfo hostJavaInfo =
+					currentInvocation == invocation
+					? expressionInfo
+							: javaInfoResolver.getJavaInfo(currentInvocation.getExpression());
+			if (hostJavaInfo != null) {
+				String componentClassName =
+						JavaInfoUtils.getParameter(hostJavaInfo, "invocationChain: " + allSignatures);
+				if (componentClassName != null) {
+					// if no class name, use method return type
+					if (componentClassName.length() == 0) {
+						componentClassName =
+								AstNodeUtils.getFullyQualifiedName(methodBinding.getReturnType(), true);
+					}
+					// create JavaInfo
+					CreationSupport creationSupport =
+							new InvocationChainCreationSupport(invocation, allSignatures);
+					JavaInfo javaInfo =
+							JavaInfoUtils.createJavaInfo(editor, componentClassName, creationSupport);
+					javaInfo.setAssociation(new EmptyAssociation());
+					hostJavaInfo.addChild(javaInfo);
+					return javaInfo;
+				}
+			}
+		}
+		// check for internal "void factory" component creation
+		if (expressionInfo != null) {
+			MethodDescription methodDescription =
+					expressionInfo.getDescription().getMethod(methodBinding);
+			if (methodDescription != null) {
+				String voidCreationSupportClassName =
+						methodDescription.getTag("voidFactory.creationSupport");
+				String voidComponentClassName = methodDescription.getTag("voidFactory.componentClass");
+				if (!StringUtils.isEmpty(voidCreationSupportClassName)
+						&& !StringUtils.isEmpty(voidComponentClassName)) {
+					if (!createVoidFactory_hasRequiredJavaInfo(methodDescription, argumentInfos)) {
+						return null;
+					}
+					// prepare CreationSupport
+					CreationSupport creationSupport;
+					{
+						Class<?> voidCreationSupportClass =
+								DescriptionHelper.loadModelClass(voidCreationSupportClassName);
+						Constructor<?> constructor =
+								ReflectionUtils.getConstructor(
+										voidCreationSupportClass,
+										JavaInfo.class,
+										MethodDescription.class,
+										MethodInvocation.class,
+										JavaInfo[].class);
+						Assert.isNotNull(constructor, "Can not find constructor "
+								+ voidCreationSupportClassName
+								+ "(JavaInfo,MethodDescription,MethodInvocation,JavaInfo[])");
+						creationSupport =
+								(CreationSupport) constructor.newInstance(
+										expressionInfo,
+										methodDescription,
+										invocation,
+										argumentInfos);
+					}
+					Class<?> componentClass =
+							EditorState.get(editor).getEditorLoader().loadClass(voidComponentClassName);
+					//
+					JavaInfo javaInfo =
+							createVoidFactory(
+									editor,
+									invocation,
+									expressionInfo,
+									argumentInfos,
+									methodDescription,
+									componentClass,
+									creationSupport);
+					if (javaInfo != null) {
+						return javaInfo;
+					}
+				}
+			}
+		}
+		// check for "instance factory" component creation
+		if (expressionInfo instanceof InstanceFactoryInfo) {
+			InstanceFactoryInfo factoryInfo = (InstanceFactoryInfo) expressionInfo;
+			FactoryMethodDescription description = getFactory(editor, methodBinding, false);
+			if (description != null) {
+				JavaInfo javaInfo =
+						createInstanceFactory(
+								editor,
+								invocation,
+								methodBinding,
+								argumentInfos,
+								factoryInfo,
+								description);
+				if (javaInfo != null) {
+					return javaInfo;
+				}
+			}
+		}
+		// check for "static factory" component creation
+		if (AstNodeUtils.isStatic(methodBinding)) {
+			FactoryMethodDescription description = getFactory(editor, methodBinding, true);
+			if (description != null) {
+				JavaInfo javaInfo =
+						createStaticFactory(editor, invocation, methodBinding, argumentInfos, description);
+				if (javaInfo != null) {
+					return javaInfo;
+				}
+			}
+		}
+		// no JavaInfo for MethodInvocation
+		return null;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Class utilities
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link Class} loaded using {@link ClassLoader} of given {@link AstEditor}. May
+	 *         return <code>null</code> if class can not be loaded.
+	 */
+	protected static Class<?> getClass(AstEditor editor, ITypeBinding typeBinding) {
+		try {
+			ClassLoader classLoader = EditorState.get(editor).getEditorLoader();
+			String componentClassName = AstNodeUtils.getFullyQualifiedName(typeBinding, true);
+			Class<?> clazz = classLoader.loadClass(componentClassName);
+			// we don't need inner Class
+			if (clazz.getEnclosingClass() != null
+					&& !java.lang.reflect.Modifier.isStatic(clazz.getModifiers())) {
+				return null;
+			}
+			// good Class
+			return clazz;
+		} catch (Throwable e) {
+			return null;
+		}
+	}
+
+	/**
+	 * @return the {@link Class} loaded using {@link ClassLoader} of given {@link AstEditor}. We use
+	 *         this method to load "super" {@link Class}, so if any exception happens, we consider it
+	 *         as serious and throw fatal exception.
+	 */
+	protected static Class<?> getSuperClass(AstEditor editor, ITypeBinding typeBinding) {
+		String componentClassName = AstNodeUtils.getFullyQualifiedName(typeBinding, true);
+		try {
+			ClassLoader classLoader = EditorState.get(editor).getEditorLoader();
+			return classLoader.loadClass(componentClassName);
+		} catch (Throwable e) {
+			throw new DesignerException(ICoreExceptionConstants.PARSER_NO_SUPER_CLASS,
+					e,
+					componentClassName);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Other
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if given {@link ITypeBinding} is Toolkit object.
+	 */
+	public boolean isToolkitObject(AstEditor editor, ITypeBinding typeBinding) throws Exception {
+		return false;
+	}
+
+	/**
+	 * We don't support parsing static/instance factories. So, we should fail and show explicit
+	 * warning.
+	 */
+	protected static void failIfFactory(AstEditor editor,
+			TypeDeclaration typeDeclaration,
+			ITypeBinding typeBinding) throws Exception {
+		String typeName = AstNodeUtils.getFullyQualifiedName(typeDeclaration, true);
+		if (FactoryDescriptionHelper.isFactoryClass(editor, typeName)) {
+			throw new DesignerException(ICoreExceptionConstants.PARSER_FACTORY_NOT_SUPPORTED);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the existing constructor or newly added default constructor.
+	 */
+	protected static MethodDeclaration getConstructor(AstEditor editor,
+			TypeDeclaration typeDeclaration) throws Exception {
+		MethodDeclaration constructor;
+		try {
+			constructor = ExecutionFlowUtils.getExecutionFlowConstructor(typeDeclaration);
+		} catch (MultipleConstructorsError e) {
+			throw new MultipleConstructorsError(editor, typeDeclaration);
+		}
+		// if no constructor, add default
+		if (constructor == null) {
+			String header = "public " + typeDeclaration.getName().getIdentifier() + "()";
+			constructor =
+					editor.addMethodDeclaration(
+							header,
+							Collections.<String>emptyList(),
+							new BodyDeclarationTarget(typeDeclaration, true));
+			constructor.setConstructor(true);
+			// commit changes into compilation unit
+			editor.commitChanges();
+			// we should also save changes, else IMethod's will have invalid source ranges
+			editor.getModelUnit().save(null, true);
+		}
+		return constructor;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Factories
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return {@link FactoryMethodDescription} for given {@link IMethodBinding} or <code>null</code>
+	 *         if there are no valid factory.
+	 */
+	public static FactoryMethodDescription getFactory(AstEditor editor,
+			IMethodBinding methodBinding,
+			boolean forStatic) throws Exception {
+		// prepare factory class
+		Class<?> factoryClass;
+		{
+			ITypeBinding declaringClass = methodBinding.getDeclaringClass();
+			factoryClass = getClass(editor, declaringClass);
+			if (factoryClass == null) {
+				return null;
+			}
+		}
+		// prepare method signature
+		String methodSignature = AstNodeUtils.getMethodSignature(methodBinding);
+		// get static factory description
+		FactoryMethodDescription description =
+				FactoryDescriptionHelper.getDescription(editor, factoryClass, methodSignature, forStatic);
+		if (description != null && description.isFactory()) {
+			return description;
+		}
+		// no valid factory
+		return null;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Creating JavaInfo for various Classes
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private JavaInfo createInstance(AstEditor editor,
+			ITypeBinding typeBinding,
+			RunnableObjectEx<AbstractInvocationDescription> methodDescriptionProvider,
+			JavaInfo[] argumentInfos,
+			CreationSupport creationSupport) throws Exception {
+		Class<?> objectClass = getClass(editor, typeBinding);
+		if (objectClass == null) {
+			return null;
+		}
+		// instance factory
+		if (InstanceFactoryInfo.isFactory(editor, objectClass)) {
+			return InstanceFactoryInfo.createFactory(editor, objectClass, creationSupport);
+		}
+		// toolkit
+		if (isToolkitObject(editor, typeBinding)) {
+			return JavaInfoUtils.createJavaInfo(editor, objectClass, creationSupport);
+		}
+		// wrappers
+		if (WrapperMethodInfo.isWrapper(editor, objectClass)) {
+			WrapperMethodInfo wrapperJavaInfo =
+					(WrapperMethodInfo) JavaInfoUtils.createJavaInfo(editor, objectClass, creationSupport);
+			AbstractInvocationDescription methodDescription = methodDescriptionProvider.runObject();
+			wrapperJavaInfo.getWrapper().configureWrapper(methodDescription, argumentInfos);
+			wrapperJavaInfo.setAssociation(new ConstructorParentAssociation());
+			return wrapperJavaInfo;
+		}
+		// unknown type
+		return null;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Creating JavaInfo for various Factories
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Processing void implicit factory
+	 */
+	protected JavaInfo createVoidFactory(AstEditor editor,
+			MethodInvocation invocation,
+			JavaInfo expressionInfo,
+			JavaInfo[] argumentInfos,
+			MethodDescription methodDescription,
+			Class<?> componentClass,
+			CreationSupport creationSupport) throws Exception {
+		JavaInfo javaInfo = JavaInfoUtils.createJavaInfo(editor, componentClass, creationSupport);
+		javaInfo.setVariableSupport(new VoidInvocationVariableSupport(javaInfo));
+		javaInfo.setAssociation(new InvocationVoidAssociation(invocation));
+		expressionInfo.addChild(javaInfo);
+		return javaInfo;
+	}
+
+	/**
+	 * If parameter should be {@link JavaInfo}, this should be specified in
+	 * {@link ParameterDescription} using "voidFactory.requiredJavaInfo" tag.
+	 */
+	private static boolean createVoidFactory_hasRequiredJavaInfo(MethodDescription methodDescription,
+			JavaInfo[] argumentInfos) {
+		List<ParameterDescription> parameters = methodDescription.getParameters();
+		for (ParameterDescription parameter : parameters) {
+			if (parameter.hasTrueTag("voidFactory.requiredJavaInfo")) {
+				int index = parameter.getIndex();
+				if (argumentInfos[index] == null) {
+					return false;
+				}
+			}
+		}
+		return true;
+	}
+
+	/**
+	 * Processing static factory
+	 */
+	protected JavaInfo createStaticFactory(AstEditor editor,
+			MethodInvocation invocation,
+			IMethodBinding methodBinding,
+			JavaInfo[] argumentInfos,
+			FactoryMethodDescription factoryMethodDescription) throws Exception {
+		JavaInfo javaInfo =
+				createStaticFactory_JavaInfo(
+						editor,
+						invocation,
+						methodBinding,
+						argumentInfos,
+						factoryMethodDescription);
+		// check for parent
+		if (javaInfo != null) {
+			for (ParameterDescription parameter : factoryMethodDescription.getParameters()) {
+				if (parameter.isParent()) {
+					JavaInfo parent = argumentInfos[parameter.getIndex()];
+					if (parent != null) {
+						javaInfo.setAssociation(new FactoryParentAssociation(invocation));
+						if (javaInfo.getParent() == null) {
+							parent.addChild(javaInfo);
+						}
+					} else {
+						String message = "No parent model for " + invocation;
+						EditorState.get(editor).addWarning(new EditorWarning(message));
+					}
+				}
+			}
+		}
+		// done
+		return javaInfo;
+	}
+
+	private JavaInfo createStaticFactory_JavaInfo(AstEditor editor,
+			MethodInvocation invocation,
+			IMethodBinding methodBinding,
+			JavaInfo[] argumentInfos,
+			FactoryMethodDescription factoryMethodDescription) throws Exception {
+		Class<?> objectClass = factoryMethodDescription.getReturnClass();
+		CreationSupport creationSupport =
+				new StaticFactoryCreationSupport(factoryMethodDescription, invocation);
+		// instance factory
+		if (InstanceFactoryInfo.isFactory(editor, objectClass)) {
+			return InstanceFactoryInfo.createFactory(editor, objectClass, creationSupport);
+		}
+		// toolkit
+		if (isToolkitObject(editor, methodBinding.getReturnType())) {
+			ComponentDescription componentDescription =
+					ComponentDescriptionHelper.getDescription(editor, factoryMethodDescription);
+			return JavaInfoUtils.createJavaInfo(editor, componentDescription, creationSupport);
+		}
+		// wrappers
+		if (WrapperMethodInfo.isWrapper(editor, objectClass)) {
+			WrapperMethodInfo wrapperJavaInfo =
+					(WrapperMethodInfo) JavaInfoUtils.createJavaInfo(editor, objectClass, creationSupport);
+			wrapperJavaInfo.getWrapper().configureWrapper(factoryMethodDescription, argumentInfos);
+			return wrapperJavaInfo;
+		}
+		// check for non-visual bean
+		NonVisualBeanInfo nonVisualInfo = NonVisualBeanContainerInfo.getNonVisualInfo(invocation);
+		if (nonVisualInfo != null) {
+			JavaInfo javaInfo = JavaInfoUtils.createJavaInfo(editor, objectClass, creationSupport);
+			nonVisualInfo.setJavaInfo(javaInfo);
+			return javaInfo;
+		}
+		// unknown
+		return null;
+	}
+
+	/**
+	 * Processing instance factory
+	 *
+	 * @param methodBinding
+	 */
+	protected JavaInfo createInstanceFactory(AstEditor editor,
+			MethodInvocation invocation,
+			IMethodBinding methodBinding,
+			JavaInfo[] argumentInfos,
+			InstanceFactoryInfo factoryInfo,
+			FactoryMethodDescription description) throws Exception {
+		Class<?> returnClass = description.getReturnClass();
+		// ignore interfaces
+		if (returnClass.isInterface()) {
+			return null;
+		}
+		// create JavaInfo
+		JavaInfo javaInfo =
+				JavaInfoUtils.createJavaInfo(
+						editor,
+						returnClass,
+						new InstanceFactoryCreationSupport(factoryInfo, description, invocation));
+		// try to associate with parent
+		for (ParameterDescription parameter : description.getParameters()) {
+			if (parameter.isParent()) {
+				JavaInfo parameterJavaInfo = argumentInfos[parameter.getIndex()];
+				if (parameterJavaInfo != null) {
+					javaInfo.setAssociation(new FactoryParentAssociation(invocation));
+					parameterJavaInfo.addChild(javaInfo);
+				}
+			}
+		}
+		// check for non-visual bean
+		NonVisualBeanInfo nonVisualInfo = NonVisualBeanContainerInfo.getNonVisualInfo(invocation);
+		if (nonVisualInfo != null) {
+			nonVisualInfo.setJavaInfo(javaInfo);
+		}
+		// component created using instance factory
+		return javaInfo;
+	}
+
+	/**
+	 * Processing implicit factory
+	 */
+	protected JavaInfo createImplicitFactory(AstEditor editor,
+			MethodInvocation invocation,
+			JavaInfo expressionInfo,
+			JavaInfo[] argumentInfos,
+			MethodDescription methodDescription) throws Exception {
+		JavaInfo javaInfo =
+				JavaInfoUtils.createJavaInfo(
+						editor,
+						methodDescription.getReturnClass(),
+						new ImplicitFactoryCreationSupport(methodDescription, invocation));
+		//  try to find parent
+		for (ParameterDescription parameter : methodDescription.getParameters()) {
+			JavaInfo parameterJavaInfo = argumentInfos[parameter.getIndex()];
+			if (parameter.isParent()) {
+				javaInfo.setAssociation(new FactoryParentAssociation(invocation));
+				parameterJavaInfo.addChild(javaInfo);
+			}
+			if (parameter.hasTrueTag("implicitFactory.child")) {
+				Assert.isNotNull(
+						parameterJavaInfo,
+						"Argument %d in %s %s should be not-null JavaInfo.",
+						parameter.getIndex(),
+						methodDescription,
+						invocation);
+				parameterJavaInfo.setAssociation(new ImplicitFactoryArgumentAssociation(invocation,
+						javaInfo));
+				javaInfo.addChild(parameterJavaInfo);
+			}
+		}
+		// if no association yet, associate with "expression"
+		if (javaInfo.getParent() == null) {
+			javaInfo.setAssociation(new InvocationVoidAssociation(invocation));
+			expressionInfo.addChild(javaInfo);
+		}
+		return javaInfo;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ClassLoader
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the toolkit id.
+	 */
+	protected abstract String getToolkitId();
+
+	/**
+	 * Creates complex {@link ClassLoader} for given {@link AstEditor}.
+	 */
+	protected void initializeClassLoader(AstEditor editor) throws Exception {
+		EditorState editorState = EditorState.get(editor);
+		if (editorState.isInitialized()) {
+			return;
+		}
+		String toolkitId = getToolkitId();
+		// set ClassLoader
+		ClassLoader classLoader = getClassLoader(editor);
+		editorState.initialize(toolkitId, classLoader);
+		initializeClassLoader(classLoader, toolkitId);
+		// configure
+		IJavaProject javaProject = editor.getJavaProject();
+		runUserConfigurationScripts(editorState, javaProject);
+		configureDescriptionVersionsProviders(editorState, javaProject);
+	}
+
+	/**
+	 * @return the {@link ClassLoader} to use for given {@link AstEditor}.
+	 */
+	protected ClassLoader getClassLoader(AstEditor editor) throws Exception {
+		CompositeClassLoader parentClassLoader = createClassLoader_parent(editor);
+		initializeClassLoader_parent(editor, parentClassLoader);
+		ClassLoader projectClassLoader = createClassLoader_project(editor, parentClassLoader);
+		return createCompositeLoader(projectClassLoader, getToolkitId());
+	}
+
+	/**
+	 * Create {@link ClassLoader}'s that should be in parent of "project" {@link ClassLoader}.
+	 */
+	protected CompositeClassLoader createClassLoader_parent(AstEditor editor) throws Exception {
+		return new CompositeClassLoader();
+	}
+
+	protected void initializeClassLoader_parent(AstEditor editor,
+			CompositeClassLoader parentClassLoader) throws Exception {
+		// add class loader for ByteBuddy enhancement
+		parentClassLoader.add(
+				new BundleClassLoader("org.eclipse.wb.core.java"),
+				List.of("net.bytebuddy.", "org.eclipse.wb.internal.core.model.creation"));;
+				// add class loaders for "classLoader-bundle" contributions
+				List<IConfigurationElement> toolkitElements =
+						DescriptionHelper.getToolkitElements(getToolkitId());
+				for (IConfigurationElement toolkitElement : toolkitElements) {
+					IConfigurationElement[] contributorElements =
+							toolkitElement.getChildren("classLoader-bundle");
+					for (IConfigurationElement contributorElement : contributorElements) {
+						Bundle bundle = getExistingBundle(contributorElement);
+						List<String> namespaces = getBundleClassLoaderNamespaces(contributorElement);
+						ClassLoader classLoader = new BundleClassLoader(bundle);
+						parentClassLoader.add(classLoader, namespaces);
+					}
+				}
+	}
+
+	private static List<String> getBundleClassLoaderNamespaces(IConfigurationElement contributorElement) {
+		String namespacesString = contributorElement.getAttribute("namespaces");
+		if (namespacesString != null) {
+			return ImmutableList.copyOf(StringUtils.split(namespacesString));
+		}
+		return null;
+	}
+
+	/**
+	 * Create "project" {@link ClassLoader}.
+	 */
+	protected ClassLoader createClassLoader_project(AstEditor editor,
+			CompositeClassLoader parentClassLoader) throws Exception {
+		return ProjectClassLoader.create(parentClassLoader, editor.getJavaProject());
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ClassLoader utilities
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the composite {@link ClassLoader} based on given main {@link ClassLoader} with addition
+	 *         of {@link BundleClassLoader}'s and {@link IByteCodeProcessor}'s.
+	 */
+	protected static CompositeClassLoader createCompositeLoader(ClassLoader mainClassLoader,
+			String toolkitId) throws Exception {
+		List<IConfigurationElement> toolkitElements = DescriptionHelper.getToolkitElements(toolkitId);
+		CompositeClassLoader compositeClassLoader = new CompositeClassLoader();
+		// add project class loader
+		compositeClassLoader.add(mainClassLoader, null);
+		// add processors for "classPath-byteCode-processor"
+		if (mainClassLoader instanceof ProjectClassLoader) {
+			ProjectClassLoader projectClassLoader = (ProjectClassLoader) mainClassLoader;
+			for (IConfigurationElement toolkitElement : toolkitElements) {
+				IConfigurationElement[] contributorElements =
+						toolkitElement.getChildren("classPath-byteCode-processor");
+				for (IConfigurationElement contributorElement : contributorElements) {
+					IByteCodeProcessor processor =
+							(IByteCodeProcessor) contributorElement.createExecutableExtension("processor");
+					projectClassLoader.add(processor);
+				}
+			}
+		}
+		// add class loaders for "classLoader-library" contributions
+		for (IConfigurationElement toolkitElement : toolkitElements) {
+			IConfigurationElement[] contributorElements =
+					toolkitElement.getChildren("classLoader-library");
+			if (contributorElements.length != 0) {
+				URL[] urls = new URL[contributorElements.length];
+				for (int i = 0; i < contributorElements.length; i++) {
+					IConfigurationElement contributorElement = contributorElements[i];
+					Bundle bundle = getExistingBundle(contributorElement);
+					// prepare URL for JAR
+					String jarPath = contributorElement.getAttribute("jar");
+					URL jarEntry = bundle.getEntry(jarPath);
+					Assert.isNotNull(jarEntry, "Unable to find %s in %s", jarPath, bundle.getSymbolicName());
+					urls[i] = FileLocator.toFileURL(jarEntry);
+				}
+				// add ClassLoader with all libraries
+				compositeClassLoader.add(new URLClassLoader(urls, mainClassLoader), null);
+			}
+		}
+		// return final ClassLoader
+		return compositeClassLoader;
+	}
+
+	/**
+	 * @return {@link Bundle} specified in attribute "bundle".
+	 */
+	private static Bundle getExistingBundle(IConfigurationElement contributorElement) {
+		String bundleId = ExternalFactoriesHelper.getRequiredAttribute(contributorElement, "bundle");
+		return getExistingBundle(bundleId);
+	}
+
+	private static Bundle getExistingBundle(String bundleId) {
+		Bundle bundle = Platform.getBundle(bundleId);
+		Assert.isNotNull(bundle, "Unable to find Bundle %s", bundleId);
+		return bundle;
+	}
+
+	/**
+	 * Initializes {@link ClassLoader} with registered {@link IClassLoaderInitializer}'s.
+	 */
+	protected static void initializeClassLoader(ClassLoader classLoader, String toolkitId)
+			throws Exception {
+		List<IConfigurationElement> elements =
+				ExternalFactoriesHelper.getElements(
+						"org.eclipse.wb.core.java.classLoaderInitializers",
+						"initializer");
+		for (IConfigurationElement element : elements) {
+			if (ExternalFactoriesHelper.getRequiredAttribute(element, "toolkit").equals(toolkitId)) {
+				IClassLoaderInitializer initializer =
+						ExternalFactoriesHelper.createExecutableExtension(element, "class");
+				initializer.initialize(classLoader);
+			}
+		}
+	}
+
+	/**
+	 * Deinitializes {@link ClassLoader} with registered {@link IClassLoaderInitializer}'s.
+	 */
+	public static void deinitializeClassLoader(ClassLoader classLoader, String toolkitId)
+			throws Exception {
+		List<IConfigurationElement> elements =
+				ExternalFactoriesHelper.getElements(
+						"org.eclipse.wb.core.java.classLoaderInitializers",
+						"initializer");
+		for (IConfigurationElement element : elements) {
+			if (ExternalFactoriesHelper.getRequiredAttribute(element, "toolkit").equals(toolkitId)) {
+				IClassLoaderInitializer initializer =
+						ExternalFactoriesHelper.createExecutableExtension(element, "class");
+				initializer.deinitialize(classLoader);
+			}
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IDescriptionVersionsProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Installs {@link IDescriptionVersionsProvider}'s.
+	 */
+	protected static void configureDescriptionVersionsProviders(EditorState editorState,
+			IJavaProject javaProject) throws Exception {
+		ClassLoader classLoader = editorState.getEditorLoader();
+		List<IDescriptionVersionsProviderFactory> factories =
+				ExternalFactoriesHelper.getElementsInstances(
+						IDescriptionVersionsProviderFactory.class,
+						"org.eclipse.wb.core.descriptionVersionsProviderFactories",
+						"factory");
+		for (IDescriptionVersionsProviderFactory factory : factories) {
+			// versions
+			editorState.addVersions(factory.getVersions(javaProject, classLoader));
+			// version providers
+			{
+				IDescriptionVersionsProvider provider = factory.getProvider(javaProject, classLoader);
+				if (provider != null) {
+					editorState.addDescriptionVersionsProvider(provider);
+				}
+			}
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Configuration scripts
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Runs all <code>wbp-meta/ConfigureClassLoader.mvel</code> scripts to configure
+	 * {@link ClassLoader}.
+	 */
+	protected static void runUserConfigurationScripts(EditorState editorState,
+			IJavaProject javaProject) throws Exception {
+		ClassLoader classLoader = editorState.getEditorLoader();
+		List<IFile> scriptFiles =
+				ProjectUtils.findFiles(javaProject, "wbp-meta/ConfigureClassLoader.mvel");
+		for (IFile scriptFile : scriptFiles) {
+			String script = IOUtils2.readString(scriptFile);
+			try {
+				ScriptUtils.evaluate(classLoader, script);
+			} catch (Throwable e) {
+				String message =
+						MessageFormat.format(
+								"Can not execute {0}\n{1}",
+								scriptFile.getFullPath().toPortableString(),
+								script);
+				editorState.addWarning(new EditorWarning(message, e));
+			}
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/parser/IJavaInfoParseResolver.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/parser/IJavaInfoParseResolver.java
index 4825c5726..f515052de 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/parser/IJavaInfoParseResolver.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/parser/IJavaInfoParseResolver.java
@@ -20,9 +20,9 @@
  * @author scheglov_ke
  */
 public interface IJavaInfoParseResolver {
-  /**
-   * @return the {@link JavaInfo} for given {@link Expression} or <code>null</code> if given
-   *         {@link Expression} does not represent {@link JavaInfo}.
-   */
-  JavaInfo getJavaInfo(Expression expression) throws Exception;
+	/**
+	 * @return the {@link JavaInfo} for given {@link Expression} or <code>null</code> if given
+	 *         {@link Expression} does not represent {@link JavaInfo}.
+	 */
+	JavaInfo getJavaInfo(Expression expression) throws Exception;
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/parser/IParseContextProcessor.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/parser/IParseContextProcessor.java
index 8c349355c..e16867129 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/parser/IParseContextProcessor.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/parser/IParseContextProcessor.java
@@ -23,6 +23,6 @@
  * @coverage core.model.parser
  */
 public interface IParseContextProcessor {
-  void process(AstEditor editor, ExecutionFlowDescription flowDescription, List<JavaInfo> components)
-      throws Exception;
+	void process(AstEditor editor, ExecutionFlowDescription flowDescription, List<JavaInfo> components)
+			throws Exception;
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/parser/IParseFactory.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/parser/IParseFactory.java
index 37317f237..c870f2062 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/parser/IParseFactory.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/parser/IParseFactory.java
@@ -28,44 +28,44 @@
  * @coverage core.model.parser
  */
 public interface IParseFactory {
-  /**
-   * @return the {@link ParseRootContext} - information about root {@link JavaInfo} for given
-   *         {@link TypeDeclaration}.
-   */
-  ParseRootContext getRootContext(AstEditor editor,
-      TypeDeclaration typeDeclaration,
-      ITypeBinding typeBinding) throws Exception;
+	/**
+	 * @return the {@link ParseRootContext} - information about root {@link JavaInfo} for given
+	 *         {@link TypeDeclaration}.
+	 */
+	ParseRootContext getRootContext(AstEditor editor,
+			TypeDeclaration typeDeclaration,
+			ITypeBinding typeBinding) throws Exception;
 
-  /**
-   * Informs {@link IParseFactory} about some {@link Expression}.
-   *
-   * @return {@link JavaInfo} model corresponding to given {@link Expression}, or <code>null</code>.
-   */
-  JavaInfo create(AstEditor editor, Expression expression) throws Exception;
+	/**
+	 * Informs {@link IParseFactory} about some {@link Expression}.
+	 *
+	 * @return {@link JavaInfo} model corresponding to given {@link Expression}, or <code>null</code>.
+	 */
+	JavaInfo create(AstEditor editor, Expression expression) throws Exception;
 
-  /**
-   * Informs {@link IParseFactory} about {@link ClassInstanceCreation}.
-   *
-   * @return {@link JavaInfo} model corresponding to given {@link ClassInstanceCreation}.
-   */
-  JavaInfo create(AstEditor editor,
-      ClassInstanceCreation creation,
-      IMethodBinding methodBinding,
-      ITypeBinding typeBinding,
-      Expression arguments[],
-      JavaInfo argumentInfos[]) throws Exception;
+	/**
+	 * Informs {@link IParseFactory} about {@link ClassInstanceCreation}.
+	 *
+	 * @return {@link JavaInfo} model corresponding to given {@link ClassInstanceCreation}.
+	 */
+	JavaInfo create(AstEditor editor,
+			ClassInstanceCreation creation,
+			IMethodBinding methodBinding,
+			ITypeBinding typeBinding,
+			Expression arguments[],
+			JavaInfo argumentInfos[]) throws Exception;
 
-  /**
-   * Informs {@link IParseFactory} about {@link MethodInvocation}. Factory can create new
-   * {@link JavaInfo}, add new parent/child link, etc.
-   *
-   * @return {@link JavaInfo} model corresponding to given {@link ClassInstanceCreation}.
-   */
-  JavaInfo create(AstEditor editor,
-      MethodInvocation invocation,
-      IMethodBinding methodBinding,
-      Expression arguments[],
-      JavaInfo expressionInfo,
-      JavaInfo argumentInfos[],
-      IJavaInfoParseResolver javaInfoResolver) throws Exception;
+	/**
+	 * Informs {@link IParseFactory} about {@link MethodInvocation}. Factory can create new
+	 * {@link JavaInfo}, add new parent/child link, etc.
+	 *
+	 * @return {@link JavaInfo} model corresponding to given {@link ClassInstanceCreation}.
+	 */
+	JavaInfo create(AstEditor editor,
+			MethodInvocation invocation,
+			IMethodBinding methodBinding,
+			Expression arguments[],
+			JavaInfo expressionInfo,
+			JavaInfo argumentInfos[],
+			IJavaInfoParseResolver javaInfoResolver) throws Exception;
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/parser/IParseFactorySimpleModelCic.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/parser/IParseFactorySimpleModelCic.java
index 0a287f760..d1eaafe23 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/parser/IParseFactorySimpleModelCic.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/parser/IParseFactorySimpleModelCic.java
@@ -24,17 +24,17 @@
  * @coverage core.model.parser
  */
 public interface IParseFactorySimpleModelCic {
-  /**
-   * @return <code>true</code> if this and only this factory should be used to create
-   *         {@link JavaInfo}. If no {@link JavaInfo} returned, then no other factories will be
-   *         checked.
-   */
-  boolean accept(AstEditor editor, ClassInstanceCreation creation, ITypeBinding typeBinding)
-      throws Exception;
+	/**
+	 * @return <code>true</code> if this and only this factory should be used to create
+	 *         {@link JavaInfo}. If no {@link JavaInfo} returned, then no other factories will be
+	 *         checked.
+	 */
+	boolean accept(AstEditor editor, ClassInstanceCreation creation, ITypeBinding typeBinding)
+			throws Exception;
 
-  /**
-   * @return the {@link JavaInfo} for given {@link ClassInstanceCreation}, may be <code>null</code>.
-   */
-  JavaInfo create(AstEditor editor, ClassInstanceCreation creation, ITypeBinding typeBinding)
-      throws Exception;
+	/**
+	 * @return the {@link JavaInfo} for given {@link ClassInstanceCreation}, may be <code>null</code>.
+	 */
+	JavaInfo create(AstEditor editor, ClassInstanceCreation creation, ITypeBinding typeBinding)
+			throws Exception;
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/parser/IParseValidator.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/parser/IParseValidator.java
index 0e8271646..157d5ca5f 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/parser/IParseValidator.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/parser/IParseValidator.java
@@ -22,8 +22,8 @@
  * @coverage core.model.parser
  */
 public interface IParseValidator {
-  /**
-   * Validates {@link AstEditor}, does nothing if OK. Throws some exception in case of any problem.
-   */
-  void validate(AstEditor editor) throws Exception;
+	/**
+	 * Validates {@link AstEditor}, does nothing if OK. Throws some exception in case of any problem.
+	 */
+	void validate(AstEditor editor) throws Exception;
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/parser/JavaInfoParser.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/parser/JavaInfoParser.java
index 2322976bc..a0337b359 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/parser/JavaInfoParser.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/parser/JavaInfoParser.java
@@ -127,1326 +127,1326 @@
  * @coverage core.model.parser
  */
 public final class JavaInfoParser implements IJavaInfoParseResolver {
-  /**
-   * The key for accessing root {@link JavaInfo} using {@link AstEditor#getGlobalValue(String)}.
-   */
-  public static final String KEY_ROOT = "KEY_ROOT";
-  /**
-   * The key for accessing all {@link JavaInfo}'s using {@link AstEditor#getGlobalValue(String)}.
-   */
-  public static final String KEY_COMPONENTS = "KEY_COMPONENTS";
+	/**
+	 * The key for accessing root {@link JavaInfo} using {@link AstEditor#getGlobalValue(String)}.
+	 */
+	public static final String KEY_ROOT = "KEY_ROOT";
+	/**
+	 * The key for accessing all {@link JavaInfo}'s using {@link AstEditor#getGlobalValue(String)}.
+	 */
+	public static final String KEY_COMPONENTS = "KEY_COMPONENTS";
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Parses given compilation unit and returns single root {@link JavaInfo}.
-   */
-  public static JavaInfo parse(ICompilationUnit modelUnit) throws Exception {
-    checkJavaVersion(modelUnit);
-    final JavaInfoParser parser = new JavaInfoParser(modelUnit);
-    return ExecutionUtils.runDesignTime(new RunnableObjectEx<JavaInfo>() {
-      @Override
-      public JavaInfo runObject() throws Exception {
-        return parser.parse();
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Parses given compilation unit and returns single root {@link JavaInfo}.
+	 */
+	public static JavaInfo parse(ICompilationUnit modelUnit) throws Exception {
+		checkJavaVersion(modelUnit);
+		final JavaInfoParser parser = new JavaInfoParser(modelUnit);
+		return ExecutionUtils.runDesignTime(new RunnableObjectEx<JavaInfo>() {
+			@Override
+			public JavaInfo runObject() throws Exception {
+				return parser.parse();
+			}
+		});
+	}
 
-  /**
-   * Parses given {@link MethodDeclaration} in {@link AstEditor}.
-   */
-  public static JavaInfo parse(AstEditor editor, MethodDeclaration rootMethod) throws Exception {
-    final JavaInfoParser parser = new JavaInfoParser(editor);
-    parser.m_editorState.setFlowDescription(new ExecutionFlowDescription(rootMethod));
-    return ExecutionUtils.runDesignTime(new RunnableObjectEx<JavaInfo>() {
-      @Override
-      public JavaInfo runObject() throws Exception {
-        return parser.parseRootMethods();
-      }
-    });
-  }
+	/**
+	 * Parses given {@link MethodDeclaration} in {@link AstEditor}.
+	 */
+	public static JavaInfo parse(AstEditor editor, MethodDeclaration rootMethod) throws Exception {
+		final JavaInfoParser parser = new JavaInfoParser(editor);
+		parser.m_editorState.setFlowDescription(new ExecutionFlowDescription(rootMethod));
+		return ExecutionUtils.runDesignTime(new RunnableObjectEx<JavaInfo>() {
+			@Override
+			public JavaInfo runObject() throws Exception {
+				return parser.parseRootMethods();
+			}
+		});
+	}
 
-  /**
-   * Checks that Java version used to run Eclipse is compatible with Java version of
-   * {@link IJavaProject}.
-   */
-  private static void checkJavaVersion(ICompilationUnit unit) {
-    IJavaProject javaProject = unit.getJavaProject();
-    float projectVersion = ProjectUtils.getJavaVersion(javaProject);
-    float eclipseVersion = EnvironmentUtils.getJavaVersion();
-    if (eclipseVersion < projectVersion) {
-      NumberFormat format = new DecimalFormat("#.###", new DecimalFormatSymbols(Locale.ENGLISH));
-      String projectVersionString = format.format(projectVersion);
-      String eclipseVersionString = format.format(eclipseVersion);
-      throw new DesignerException(ICoreExceptionConstants.PARSER_JAVA_VERSION,
-          projectVersionString,
-          eclipseVersionString);
-    }
-  }
+	/**
+	 * Checks that Java version used to run Eclipse is compatible with Java version of
+	 * {@link IJavaProject}.
+	 */
+	private static void checkJavaVersion(ICompilationUnit unit) {
+		IJavaProject javaProject = unit.getJavaProject();
+		float projectVersion = ProjectUtils.getJavaVersion(javaProject);
+		float eclipseVersion = EnvironmentUtils.getJavaVersion();
+		if (eclipseVersion < projectVersion) {
+			NumberFormat format = new DecimalFormat("#.###", new DecimalFormatSymbols(Locale.ENGLISH));
+			String projectVersionString = format.format(projectVersion);
+			String eclipseVersionString = format.format(eclipseVersion);
+			throw new DesignerException(ICoreExceptionConstants.PARSER_JAVA_VERSION,
+					projectVersionString,
+					eclipseVersionString);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance fields
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final AstEditor m_editor;
-  private final EditorState m_editorState;
-  private final JavaInfoResolver m_javaInfoResolver;
-  private final EvaluationEventListener m_evaluationListener;
-  private final List<IParseFactory> m_parseFactories;
-  private TypeDeclaration m_typeDeclaration;
-  private JavaInfo m_rootComponent;
-  private final List<JavaInfo> m_components;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance fields
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final AstEditor m_editor;
+	private final EditorState m_editorState;
+	private final JavaInfoResolver m_javaInfoResolver;
+	private final EvaluationEventListener m_evaluationListener;
+	private final List<IParseFactory> m_parseFactories;
+	private TypeDeclaration m_typeDeclaration;
+	private JavaInfo m_rootComponent;
+	private final List<JavaInfo> m_components;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private JavaInfoParser(ICompilationUnit modelUnit) throws Exception {
-    this(new AstEditor(modelUnit));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private JavaInfoParser(ICompilationUnit modelUnit) throws Exception {
+		this(new AstEditor(modelUnit));
+	}
 
-  private JavaInfoParser(AstEditor editor) throws Exception {
-    m_editor = editor;
-    m_editorState = EditorState.get(m_editor);
-    m_javaInfoResolver = new JavaInfoResolver(editor);
-    m_components = m_javaInfoResolver.getComponents();
-    m_evaluationListener = m_editorState.getBroadcast().getListener(EvaluationEventListener.class);
-    m_parseFactories = ExternalFactoriesHelper.getElementsInstances(
-        IParseFactory.class,
-        "org.eclipse.wb.core.java.parseFactories",
-        "factory");
-    m_editor.putGlobalValue(KEY_COMPONENTS, m_components);
-    GlobalState.setParsing(true);
-    m_editorState.setExecuting(true);
-  }
+	private JavaInfoParser(AstEditor editor) throws Exception {
+		m_editor = editor;
+		m_editorState = EditorState.get(m_editor);
+		m_javaInfoResolver = new JavaInfoResolver(editor);
+		m_components = m_javaInfoResolver.getComponents();
+		m_evaluationListener = m_editorState.getBroadcast().getListener(EvaluationEventListener.class);
+		m_parseFactories = ExternalFactoriesHelper.getElementsInstances(
+				IParseFactory.class,
+				"org.eclipse.wb.core.java.parseFactories",
+				"factory");
+		m_editor.putGlobalValue(KEY_COMPONENTS, m_components);
+		GlobalState.setParsing(true);
+		m_editorState.setExecuting(true);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parsing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private ExecutionFlowParseVisitor m_visitor;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parsing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private ExecutionFlowParseVisitor m_visitor;
 
-  /**
-   * Parses compilation unit.
-   *
-   * @return single root {@link JavaInfo}.
-   */
-  private JavaInfo parse() throws Exception {
-    validateASTEditor();
-    // prepare parse context
-    {
-      ParseRootContext rootContext = prepareParseContext();
-      // prepare flow description
-      ExecutionFlowDescription flowDescription = rootContext.getFlowDescription();
-      addStartMethodsNVO(flowDescription);
-      // remember root information
-      m_rootComponent = rootContext.getRoot();
-      m_editorState.setFlowDescription(flowDescription);
-      m_editorState.setTmp_visitingContext(new VisitingContext(false));
-      m_editorState.setTmp_Components(m_components);
-      // add root
-      if (rootContext.getRoot() != null) {
-        addJavaInfo(rootContext.getRoot(), null);
-      }
-      // use IParseContextProcessor-s
-      {
-        List<IParseContextProcessor> processors = ExternalFactoriesHelper.getElementsInstances(
-            IParseContextProcessor.class,
-            "org.eclipse.wb.core.java.parseContextProcessors",
-            "processor");
-        for (IParseContextProcessor processor : processors) {
-          processor.process(m_editor, flowDescription, m_components);
-        }
-      }
-    }
-    // parse execution flow
-    return parseRootMethods();
-  }
+	/**
+	 * Parses compilation unit.
+	 *
+	 * @return single root {@link JavaInfo}.
+	 */
+	private JavaInfo parse() throws Exception {
+		validateASTEditor();
+		// prepare parse context
+		{
+			ParseRootContext rootContext = prepareParseContext();
+			// prepare flow description
+			ExecutionFlowDescription flowDescription = rootContext.getFlowDescription();
+			addStartMethodsNVO(flowDescription);
+			// remember root information
+			m_rootComponent = rootContext.getRoot();
+			m_editorState.setFlowDescription(flowDescription);
+			m_editorState.setTmp_visitingContext(new VisitingContext(false));
+			m_editorState.setTmp_Components(m_components);
+			// add root
+			if (rootContext.getRoot() != null) {
+				addJavaInfo(rootContext.getRoot(), null);
+			}
+			// use IParseContextProcessor-s
+			{
+				List<IParseContextProcessor> processors = ExternalFactoriesHelper.getElementsInstances(
+						IParseContextProcessor.class,
+						"org.eclipse.wb.core.java.parseContextProcessors",
+						"processor");
+				for (IParseContextProcessor processor : processors) {
+					processor.process(m_editor, flowDescription, m_components);
+				}
+			}
+		}
+		// parse execution flow
+		return parseRootMethods();
+	}
 
-  /**
-   * Uses {@link IParseValidator}s to validate this {@link AstEditor}.
-   */
-  private void validateASTEditor() throws Exception {
-    List<IParseValidator> validators = ExternalFactoriesHelper.getElementsInstances(
-        IParseValidator.class,
-        "org.eclipse.wb.core.java.parseFactories",
-        "validator");
-    for (IParseValidator validator : validators) {
-      validator.validate(m_editor);
-    }
-  }
+	/**
+	 * Uses {@link IParseValidator}s to validate this {@link AstEditor}.
+	 */
+	private void validateASTEditor() throws Exception {
+		List<IParseValidator> validators = ExternalFactoriesHelper.getElementsInstances(
+				IParseValidator.class,
+				"org.eclipse.wb.core.java.parseFactories",
+				"validator");
+		for (IParseValidator validator : validators) {
+			validator.validate(m_editor);
+		}
+	}
 
-  /**
-   * We don't visit NVO {@link MethodDeclaration}-s, so we should add them forcedly.
-   */
-  private static void addStartMethodsNVO(ExecutionFlowDescription flowDescription)
-      throws Exception {
-    // prepare enclosing type
-    TypeDeclaration typeDeclaration;
-    {
-      MethodDeclaration startMethod = flowDescription.getStartMethods().get(0);
-      typeDeclaration = (TypeDeclaration) startMethod.getParent();
-    }
-    // check all methods
-    for (MethodDeclaration method : typeDeclaration.getMethods()) {
-      NonVisualBeanInfo nonVisualInfo = NonVisualBeanContainerInfo.getNonVisualInfo(method);
-      if (nonVisualInfo != null) {
-        flowDescription.addStartMethod(method);
-      }
-    }
-  }
+	/**
+	 * We don't visit NVO {@link MethodDeclaration}-s, so we should add them forcedly.
+	 */
+	private static void addStartMethodsNVO(ExecutionFlowDescription flowDescription)
+			throws Exception {
+		// prepare enclosing type
+		TypeDeclaration typeDeclaration;
+		{
+			MethodDeclaration startMethod = flowDescription.getStartMethods().get(0);
+			typeDeclaration = (TypeDeclaration) startMethod.getParent();
+		}
+		// check all methods
+		for (MethodDeclaration method : typeDeclaration.getMethods()) {
+			NonVisualBeanInfo nonVisualInfo = NonVisualBeanContainerInfo.getNonVisualInfo(method);
+			if (nonVisualInfo != null) {
+				flowDescription.addStartMethod(method);
+			}
+		}
+	}
 
-  /**
-   * @return the single root {@link JavaInfo} for current root methods from {@link EditorState}.
-   */
-  private JavaInfo parseRootMethods() throws Exception {
-    ExecutionFlowParseVisitor parseVisitor = getParseVisitor();
-    parseVisitor.m_currentStatement = null;
-    try {
-      // visit execution flow
-      ExecutionFlowUtils.visit(
-          m_editorState.getTmp_visitingContext(),
-          m_editorState.getFlowDescription(),
-          parseVisitor);
-      GlobalState.setParsing(false);
-      m_editorState.setExecuting(false);
-      // now we visited execution flow, so lock ExecutionFlowDescription
-      m_editorState.getFlowDescription().lockBinaryFlow();
-      // find root
-      {
-        JavaInfo root = getRoot();
-        if (root != null) {
-          m_javaInfoResolver.setRootJavaInfo(root);
-          return root;
-        }
-      }
-      // fail, no root found
-      if (m_editor.hasCompilationErrors()) {
-        throw new DesignerException(ICoreExceptionConstants.PARSER_NO_ROOT_WHEN_COMPILATION_ERRORS);
-      }
-      throw new NoEntryPointError(m_editor, m_typeDeclaration);
-    } catch (Throwable e) {
-      disposeComponentsHierarchy(m_components, true);
-      // remember position
-      if (parseVisitor.m_currentStatement != null) {
-        int position = AstNodeUtils.getSourceBegin(parseVisitor.m_currentStatement);
-        DesignerExceptionUtils.setSourcePosition(e, position);
-      }
-      // re-throw
-      throw ReflectionUtils.propagate(e);
-    }
-  }
+	/**
+	 * @return the single root {@link JavaInfo} for current root methods from {@link EditorState}.
+	 */
+	private JavaInfo parseRootMethods() throws Exception {
+		ExecutionFlowParseVisitor parseVisitor = getParseVisitor();
+		parseVisitor.m_currentStatement = null;
+		try {
+			// visit execution flow
+			ExecutionFlowUtils.visit(
+					m_editorState.getTmp_visitingContext(),
+					m_editorState.getFlowDescription(),
+					parseVisitor);
+			GlobalState.setParsing(false);
+			m_editorState.setExecuting(false);
+			// now we visited execution flow, so lock ExecutionFlowDescription
+			m_editorState.getFlowDescription().lockBinaryFlow();
+			// find root
+			{
+				JavaInfo root = getRoot();
+				if (root != null) {
+					m_javaInfoResolver.setRootJavaInfo(root);
+					return root;
+				}
+			}
+			// fail, no root found
+			if (m_editor.hasCompilationErrors()) {
+				throw new DesignerException(ICoreExceptionConstants.PARSER_NO_ROOT_WHEN_COMPILATION_ERRORS);
+			}
+			throw new NoEntryPointError(m_editor, m_typeDeclaration);
+		} catch (Throwable e) {
+			disposeComponentsHierarchy(m_components, true);
+			// remember position
+			if (parseVisitor.m_currentStatement != null) {
+				int position = AstNodeUtils.getSourceBegin(parseVisitor.m_currentStatement);
+				DesignerExceptionUtils.setSourcePosition(e, position);
+			}
+			// re-throw
+			throw ReflectionUtils.propagate(e);
+		}
+	}
 
-  /**
-   * In case of exception during parsing we have to dispose all components, because after exception
-   * we don't return any model object to caller.
-   */
-  private static void disposeComponentsHierarchy(List<JavaInfo> components, boolean sendBroadcast)
-      throws Exception {
-    for (JavaInfo component : components) {
-      try {
-        component.refresh_dispose();
-        if (sendBroadcast) {
-          component.getBroadcastObject().dispose();
-        }
-      } catch (Throwable e) {
-        DesignerPlugin.log(e);
-      }
-    }
-  }
+	/**
+	 * In case of exception during parsing we have to dispose all components, because after exception
+	 * we don't return any model object to caller.
+	 */
+	private static void disposeComponentsHierarchy(List<JavaInfo> components, boolean sendBroadcast)
+			throws Exception {
+		for (JavaInfo component : components) {
+			try {
+				component.refresh_dispose();
+				if (sendBroadcast) {
+					component.getBroadcastObject().dispose();
+				}
+			} catch (Throwable e) {
+				DesignerPlugin.log(e);
+			}
+		}
+	}
 
-  /**
-   * If we created {@link JavaInfo} for some {@link Expression} however it was not connected to
-   * hierarchy, then we should remove reference on model, to prevent re-using this value again and
-   * again. We should evaluate this {@link Expression} as any other.
-   */
-  private void clearValuesOfDisconnectedModels(final JavaInfo root) {
-    if (m_editorState.isLiveComponent()) {
-      return;
-    }
-    m_editor.getAstUnit().accept(new ASTVisitor() {
-      @Override
-      public void postVisit(ASTNode node) {
-        if (node instanceof Expression) {
-          Expression expression = (Expression) node;
-          ExpressionValue value = ExecutionFlowUtils2.getValue0(expression);
-          if (value != null) {
-            JavaInfo model = (JavaInfo) value.getModel();
-            if (model != null && !root.isItOrParentOf(model)) {
-              ExecutionFlowUtils2.clearPermanentValue(expression);
-            }
-          }
-        }
-      }
-    });
-  }
+	/**
+	 * If we created {@link JavaInfo} for some {@link Expression} however it was not connected to
+	 * hierarchy, then we should remove reference on model, to prevent re-using this value again and
+	 * again. We should evaluate this {@link Expression} as any other.
+	 */
+	private void clearValuesOfDisconnectedModels(final JavaInfo root) {
+		if (m_editorState.isLiveComponent()) {
+			return;
+		}
+		m_editor.getAstUnit().accept(new ASTVisitor() {
+			@Override
+			public void postVisit(ASTNode node) {
+				if (node instanceof Expression) {
+					Expression expression = (Expression) node;
+					ExpressionValue value = ExecutionFlowUtils2.getValue0(expression);
+					if (value != null) {
+						JavaInfo model = (JavaInfo) value.getModel();
+						if (model != null && !root.isItOrParentOf(model)) {
+							ExecutionFlowUtils2.clearPermanentValue(expression);
+						}
+					}
+				}
+			}
+		});
+	}
 
-  /**
-   * @return the {@link ExecutionFlowParseVisitor} that is used by this {@link JavaInfoParser} for
-   *         parsing.
-   */
-  private ExecutionFlowParseVisitor getParseVisitor() {
-    if (m_visitor == null) {
-      m_visitor = new ExecutionFlowParseVisitor();
-    }
-    return m_visitor;
-  }
+	/**
+	 * @return the {@link ExecutionFlowParseVisitor} that is used by this {@link JavaInfoParser} for
+	 *         parsing.
+	 */
+	private ExecutionFlowParseVisitor getParseVisitor() {
+		if (m_visitor == null) {
+			m_visitor = new ExecutionFlowParseVisitor();
+		}
+		return m_visitor;
+	}
 
-  /**
-   * @return the root {@link JavaInfo} for parsed components.
-   */
-  private JavaInfo getRoot() throws Throwable {
-    m_editorState.getBroadcast().getListener(JavaEventListener.class).bindComponents(m_components);
-    JavaInfoUtils.bindBinaryComponents(m_components);
-    // select root JavaInfo
-    List<JavaInfo> rootComponents = getRootComponents();
-    if (!rootComponents.isEmpty()) {
-      try {
-        // use first component as root
-        JavaInfo root = rootComponents.get(0);
-        GlobalStateJava.activate(root);
-        root.setAssociation(new RootAssociation());
-        // process root
-        callRootProcessors(root);
-        root.getBroadcast(JavaInfoTreeAlmostComplete.class).invoke(root, m_components);
-        m_editor.putGlobalValue(KEY_ROOT, root);
-        root.getBroadcast(ObjectInfoTreeComplete.class).invoke();
-        clearValuesOfDisconnectedModels(root);
-        // prepare NLS
-        {
-          // we do this here because at this point we have objects for all components,
-          // so can safely access all properties (NLSSupport does this at initialization)
-          NlsSupport.get(root);
-        }
-        // do return
-        GenerationSettings.deduce(root);
-        return root;
-      } finally {
-        // We create objects during parsing, so dispose them now.
-        disposeComponentsHierarchy(rootComponents, false);
-      }
-    }
-    // no root found
-    return null;
-  }
+	/**
+	 * @return the root {@link JavaInfo} for parsed components.
+	 */
+	private JavaInfo getRoot() throws Throwable {
+		m_editorState.getBroadcast().getListener(JavaEventListener.class).bindComponents(m_components);
+		JavaInfoUtils.bindBinaryComponents(m_components);
+		// select root JavaInfo
+		List<JavaInfo> rootComponents = getRootComponents();
+		if (!rootComponents.isEmpty()) {
+			try {
+				// use first component as root
+				JavaInfo root = rootComponents.get(0);
+				GlobalStateJava.activate(root);
+				root.setAssociation(new RootAssociation());
+				// process root
+				callRootProcessors(root);
+				root.getBroadcast(JavaInfoTreeAlmostComplete.class).invoke(root, m_components);
+				m_editor.putGlobalValue(KEY_ROOT, root);
+				root.getBroadcast(ObjectInfoTreeComplete.class).invoke();
+				clearValuesOfDisconnectedModels(root);
+				// prepare NLS
+				{
+					// we do this here because at this point we have objects for all components,
+					// so can safely access all properties (NLSSupport does this at initialization)
+					NlsSupport.get(root);
+				}
+				// do return
+				GenerationSettings.deduce(root);
+				return root;
+			} finally {
+				// We create objects during parsing, so dispose them now.
+				disposeComponentsHierarchy(rootComponents, false);
+			}
+		}
+		// no root found
+		return null;
+	}
 
-  /**
-   * Calls {@link IRootProcessor}-s.
-   */
-  private void callRootProcessors(JavaInfo root) throws Exception {
-    List<JavaInfo> components = Lists.newArrayList();
-    // fill components with no duplicates
-    for (JavaInfo javaInfo : m_components) {
-      if (!components.contains(javaInfo)) {
-        components.add(javaInfo);
-      }
-    }
-    // prepare processors
-    List<IRootProcessor> processors = ExternalFactoriesHelper.getElementsInstances(
-        IRootProcessor.class,
-        "org.eclipse.wb.core.java.rootProcessors",
-        "processor");
-    //
-    for (IRootProcessor processor : processors) {
-      processor.process(root, components);
-    }
-  }
+	/**
+	 * Calls {@link IRootProcessor}-s.
+	 */
+	private void callRootProcessors(JavaInfo root) throws Exception {
+		List<JavaInfo> components = Lists.newArrayList();
+		// fill components with no duplicates
+		for (JavaInfo javaInfo : m_components) {
+			if (!components.contains(javaInfo)) {
+				components.add(javaInfo);
+			}
+		}
+		// prepare processors
+		List<IRootProcessor> processors = ExternalFactoriesHelper.getElementsInstances(
+				IRootProcessor.class,
+				"org.eclipse.wb.core.java.rootProcessors",
+				"processor");
+		//
+		for (IRootProcessor processor : processors) {
+			processor.process(root, components);
+		}
+	}
 
-  /**
-   * @return the potential root {@link JavaInfo}'s, sorted by the hierarchy size.
-   */
-  private List<JavaInfo> getRootComponents() throws Exception {
-    List<JavaInfo> rootComponents = new LinkedList<JavaInfo>(m_components);
-    // remove all components that: have parent, or can not be root
-    for (Iterator<JavaInfo> I = rootComponents.iterator(); I.hasNext();) {
-      JavaInfo javaInfo = I.next();
-      // remove component with parent
-      if (javaInfo.getParent() != null) {
-        I.remove();
-        continue;
-      }
-      // remove component that can not be root
-      if (NonVisualBeanInfo.isNVO(javaInfo)) {
-        I.remove();
-        continue;
-      }
-      if (!javaInfo.canBeRoot()) {
-        I.remove();
-        continue;
-      }
-    }
-    // handle "parser.preferredRoot"
-    getRootComponents_preferredRoot(rootComponents);
-    // in general case there are more than one root, select biggest hierarchy
-    Collections.sort(rootComponents, new Comparator<JavaInfo>() {
-      @Override
-      public int compare(JavaInfo o1, JavaInfo o2) {
-        return getComponentsTreeSize(o2) - getComponentsTreeSize(o1);
-      }
-    });
-    // OK, return root components
-    return rootComponents;
-  }
+	/**
+	 * @return the potential root {@link JavaInfo}'s, sorted by the hierarchy size.
+	 */
+	private List<JavaInfo> getRootComponents() throws Exception {
+		List<JavaInfo> rootComponents = new LinkedList<JavaInfo>(m_components);
+		// remove all components that: have parent, or can not be root
+		for (Iterator<JavaInfo> I = rootComponents.iterator(); I.hasNext();) {
+			JavaInfo javaInfo = I.next();
+			// remove component with parent
+			if (javaInfo.getParent() != null) {
+				I.remove();
+				continue;
+			}
+			// remove component that can not be root
+			if (NonVisualBeanInfo.isNVO(javaInfo)) {
+				I.remove();
+				continue;
+			}
+			if (!javaInfo.canBeRoot()) {
+				I.remove();
+				continue;
+			}
+		}
+		// handle "parser.preferredRoot"
+		getRootComponents_preferredRoot(rootComponents);
+		// in general case there are more than one root, select biggest hierarchy
+		Collections.sort(rootComponents, new Comparator<JavaInfo>() {
+			@Override
+			public int compare(JavaInfo o1, JavaInfo o2) {
+				return getComponentsTreeSize(o2) - getComponentsTreeSize(o1);
+			}
+		});
+		// OK, return root components
+		return rootComponents;
+	}
 
-  /**
-   * If one of the root {@link JavaInfo}'s marked as "parser.preferredRoot", keep only these roots.
-   */
-  private static void getRootComponents_preferredRoot(List<JavaInfo> rootComponents) {
-    // check if there is JavaInfo marked with "parser.preferredRoot"
-    boolean hasPreferredRoot = false;
-    for (JavaInfo root : rootComponents) {
-      hasPreferredRoot |= isPreferredRoot(root);
-    }
-    // remove JavaInfo without "parser.preferredRoot"
-    if (hasPreferredRoot) {
-      for (Iterator<JavaInfo> I = rootComponents.iterator(); I.hasNext();) {
-        JavaInfo root = I.next();
-        if (!isPreferredRoot(root)) {
-          I.remove();
-        }
-      }
-    }
-  }
+	/**
+	 * If one of the root {@link JavaInfo}'s marked as "parser.preferredRoot", keep only these roots.
+	 */
+	private static void getRootComponents_preferredRoot(List<JavaInfo> rootComponents) {
+		// check if there is JavaInfo marked with "parser.preferredRoot"
+		boolean hasPreferredRoot = false;
+		for (JavaInfo root : rootComponents) {
+			hasPreferredRoot |= isPreferredRoot(root);
+		}
+		// remove JavaInfo without "parser.preferredRoot"
+		if (hasPreferredRoot) {
+			for (Iterator<JavaInfo> I = rootComponents.iterator(); I.hasNext();) {
+				JavaInfo root = I.next();
+				if (!isPreferredRoot(root)) {
+					I.remove();
+				}
+			}
+		}
+	}
 
-  /**
-   * @return <code>true</code> if given {@link JavaInfo} is marked as "parser.preferredRoot".
-   */
-  private static boolean isPreferredRoot(JavaInfo root) {
-    // check EOL comment
-    {
-      int position = root.getCreationSupport().getNode().getStartPosition();
-      String endOfLineComment = root.getEditor().getEndOfLineComment(position);
-      if (StringUtils.contains(endOfLineComment, "@wbp.parser.preferredRoot")) {
-        return true;
-      }
-    }
-    // check description
-    return JavaInfoUtils.hasTrueParameter(root, "parser.preferredRoot");
-  }
+	/**
+	 * @return <code>true</code> if given {@link JavaInfo} is marked as "parser.preferredRoot".
+	 */
+	private static boolean isPreferredRoot(JavaInfo root) {
+		// check EOL comment
+		{
+			int position = root.getCreationSupport().getNode().getStartPosition();
+			String endOfLineComment = root.getEditor().getEndOfLineComment(position);
+			if (StringUtils.contains(endOfLineComment, "@wbp.parser.preferredRoot")) {
+				return true;
+			}
+		}
+		// check description
+		return JavaInfoUtils.hasTrueParameter(root, "parser.preferredRoot");
+	}
 
-  /**
-   * Visitor for parsing {@link ASTNode}'s on execution flow.
-   *
-   * @author scheglov_ke
-   */
-  private final class ExecutionFlowParseVisitor extends ExecutionFlowFrameVisitor {
-    private final Set<MethodDeclaration> m_visitedLazyMethods = Sets.newHashSet();
+	/**
+	 * Visitor for parsing {@link ASTNode}'s on execution flow.
+	 *
+	 * @author scheglov_ke
+	 */
+	private final class ExecutionFlowParseVisitor extends ExecutionFlowFrameVisitor {
+		private final Set<MethodDeclaration> m_visitedLazyMethods = Sets.newHashSet();
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Frames
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public boolean enterFrame(final ASTNode node) {
-      // send broadcast
-      ExecutionUtils.runRethrow(new RunnableEx() {
-        @Override
-        public void run() throws Exception {
-          m_editorState.getBroadcast().getListener(ExecutionFlowEnterFrame.class).invoke(node);
-        }
-      });
-      // enter in "lazy creation" methods, but only one time
-      if (node instanceof MethodDeclaration) {
-        MethodDeclaration method = (MethodDeclaration) node;
-        if (m_visitedLazyMethods.contains(method)) {
-          return false;
-        }
-        if (LazyVariableSupportUtils.getInformation(method) != null) {
-          m_visitedLazyMethods.add(method);
-          return true;
-        }
-      }
-      // skip factories
-      if (node instanceof MethodDeclaration) {
-        MethodDeclaration method = (MethodDeclaration) node;
-        if (FactoryDescriptionHelper.isFactoryMethod(method)) {
-          return false;
-        }
-      }
-      // continue
-      return super.enterFrame(node);
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Frames
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public boolean enterFrame(final ASTNode node) {
+			// send broadcast
+			ExecutionUtils.runRethrow(new RunnableEx() {
+				@Override
+				public void run() throws Exception {
+					m_editorState.getBroadcast().getListener(ExecutionFlowEnterFrame.class).invoke(node);
+				}
+			});
+			// enter in "lazy creation" methods, but only one time
+			if (node instanceof MethodDeclaration) {
+				MethodDeclaration method = (MethodDeclaration) node;
+				if (m_visitedLazyMethods.contains(method)) {
+					return false;
+				}
+				if (LazyVariableSupportUtils.getInformation(method) != null) {
+					m_visitedLazyMethods.add(method);
+					return true;
+				}
+			}
+			// skip factories
+			if (node instanceof MethodDeclaration) {
+				MethodDeclaration method = (MethodDeclaration) node;
+				if (FactoryDescriptionHelper.isFactoryMethod(method)) {
+					return false;
+				}
+			}
+			// continue
+			return super.enterFrame(node);
+		}
 
-    @Override
-    public void leaveFrame(final ASTNode node) {
-      super.leaveFrame(node);
-      // send broadcast
-      ExecutionUtils.runRethrow(new RunnableEx() {
-        @Override
-        public void run() throws Exception {
-          m_editorState.getBroadcast().getListener(EvaluationEventListener.class).leaveFrame(node);
-        }
-      });
-    }
+		@Override
+		public void leaveFrame(final ASTNode node) {
+			super.leaveFrame(node);
+			// send broadcast
+			ExecutionUtils.runRethrow(new RunnableEx() {
+				@Override
+				public void run() throws Exception {
+					m_editorState.getBroadcast().getListener(EvaluationEventListener.class).leaveFrame(node);
+				}
+			});
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Evaluation
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public void postVisit(final ASTNode node) {
-      ExecutionUtils.runRethrow(new RunnableEx() {
-        @Override
-        public void run() throws Exception {
-          // try to create JavaInfo using generic Expression
-          if (node instanceof Expression
-              && !(node instanceof ClassInstanceCreation)
-              && !(node instanceof MethodInvocation)
-          /*&& !(node instanceof ArrayCreation)*/) {
-            endVisit((Expression) node);
-          }
-          // process related JavaInfo's
-          evaluateNode(node);
-        }
-      });
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Evaluation
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public void postVisit(final ASTNode node) {
+			ExecutionUtils.runRethrow(new RunnableEx() {
+				@Override
+				public void run() throws Exception {
+					// try to create JavaInfo using generic Expression
+					if (node instanceof Expression
+							&& !(node instanceof ClassInstanceCreation)
+							&& !(node instanceof MethodInvocation)
+							/*&& !(node instanceof ArrayCreation)*/) {
+						endVisit((Expression) node);
+					}
+					// process related JavaInfo's
+					evaluateNode(node);
+				}
+			});
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // JavaInfo's creation
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    /**
-     * Attempts to create {@link JavaInfo} based on some abstract {@link Expression}.
-     */
-    private void endVisit(Expression expression) {
-      try {
-        if (createJavaInfo_noModel(expression)) {
-          return;
-        }
-        // ask each factory, may be this creation is JavaInfo creation
-        for (IParseFactory parseFactory : m_parseFactories) {
-          JavaInfo javaInfo = parseFactory.create(m_editor, expression);
-          if (javaInfo != null) {
-            addJavaInfo(javaInfo, expression);
-            break;
-          }
-        }
-      } catch (Throwable e) {
-        ReflectionUtils.propagate(e);
-      }
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// JavaInfo's creation
+		//
+		////////////////////////////////////////////////////////////////////////////
+		/**
+		 * Attempts to create {@link JavaInfo} based on some abstract {@link Expression}.
+		 */
+		private void endVisit(Expression expression) {
+			try {
+				if (createJavaInfo_noModel(expression)) {
+					return;
+				}
+				// ask each factory, may be this creation is JavaInfo creation
+				for (IParseFactory parseFactory : m_parseFactories) {
+					JavaInfo javaInfo = parseFactory.create(m_editor, expression);
+					if (javaInfo != null) {
+						addJavaInfo(javaInfo, expression);
+						break;
+					}
+				}
+			} catch (Throwable e) {
+				ReflectionUtils.propagate(e);
+			}
+		}
 
-    /**
-     * @return <code>true</code> if it is known that this {@link ASTNode} must not have
-     *         {@link JavaInfo} model.
-     */
-    private boolean createJavaInfo_noModel(ASTNode node) {
-      List<ParseFactoryNoModel> validators = ExternalFactoriesHelper.getElementsInstances(
-          ParseFactoryNoModel.class,
-          "org.eclipse.wb.core.java.parseFactories",
-          "noModel");
-      for (ParseFactoryNoModel validator : validators) {
-        if (validator.noModel(node)) {
-          return true;
-        }
-      }
-      return false;
-    }
+		/**
+		 * @return <code>true</code> if it is known that this {@link ASTNode} must not have
+		 *         {@link JavaInfo} model.
+		 */
+		private boolean createJavaInfo_noModel(ASTNode node) {
+			List<ParseFactoryNoModel> validators = ExternalFactoriesHelper.getElementsInstances(
+					ParseFactoryNoModel.class,
+					"org.eclipse.wb.core.java.parseFactories",
+					"noModel");
+			for (ParseFactoryNoModel validator : validators) {
+				if (validator.noModel(node)) {
+					return true;
+				}
+			}
+			return false;
+		}
 
-    @Override
-    public void endVisit(ClassInstanceCreation creation) {
-      try {
-        if (createJavaInfo_noModel(creation)) {
-          return;
-        }
-        // prepare binding
-        IMethodBinding methodBinding = AstNodeUtils.getCreationBinding(creation);
-        ITypeBinding typeBinding = AstNodeUtils.getTypeBinding(creation);
-        if (typeBinding == null) {
-          return;
-        }
-        // may be we know, that there is not model
-        boolean canBeOptimized = !maybeNVO(creation);
-        if (canBeOptimized && createJavaInfo_noModel(creation, typeBinding)) {
-          return;
-        }
-        // prepare JavaInfo arguments
-        Expression arguments[] = getExpressionArray(DomGenerics.arguments(creation));
-        JavaInfo[] argumentInfos = getJavaInfoArray(arguments);
-        JavaInfo javaInfo = null;
-        // ask each "simple" factory
-        if (canBeOptimized) {
-          List<IParseFactorySimpleModelCic> validators =
-              ExternalFactoriesHelper.getElementsInstances(
-                  IParseFactorySimpleModelCic.class,
-                  "org.eclipse.wb.core.java.parseFactories",
-                  "simpleModel_CIC");
-          for (IParseFactorySimpleModelCic factory : validators) {
-            if (factory.accept(m_editor, creation, typeBinding)) {
-              javaInfo = factory.create(m_editor, creation, typeBinding);
-              if (javaInfo == null) {
-                return;
-              }
-              break;
-            }
-          }
-        }
-        // ask each "complex" factory
-        if (javaInfo == null) {
-          for (IParseFactory parseFactory : m_parseFactories) {
-            javaInfo = parseFactory.create(
-                m_editor,
-                creation,
-                methodBinding,
-                typeBinding,
-                arguments,
-                argumentInfos);
-            if (javaInfo != null) {
-              break;
-            }
-          }
-        }
-        // process JavaInfo
-        if (javaInfo != null) {
-          addJavaInfo(javaInfo, creation);
-          // establish parent/child link
-          bindChild_ClassInstanceCreation(creation, methodBinding, javaInfo, argumentInfos);
-          bindChild_SuperConstructorInvocation(creation, javaInfo);
-        }
-      } catch (Throwable e) {
-        ReflectionUtils.propagate(e);
-      }
-    }
+		@Override
+		public void endVisit(ClassInstanceCreation creation) {
+			try {
+				if (createJavaInfo_noModel(creation)) {
+					return;
+				}
+				// prepare binding
+				IMethodBinding methodBinding = AstNodeUtils.getCreationBinding(creation);
+				ITypeBinding typeBinding = AstNodeUtils.getTypeBinding(creation);
+				if (typeBinding == null) {
+					return;
+				}
+				// may be we know, that there is not model
+				boolean canBeOptimized = !maybeNVO(creation);
+				if (canBeOptimized && createJavaInfo_noModel(creation, typeBinding)) {
+					return;
+				}
+				// prepare JavaInfo arguments
+				Expression arguments[] = getExpressionArray(DomGenerics.arguments(creation));
+				JavaInfo[] argumentInfos = getJavaInfoArray(arguments);
+				JavaInfo javaInfo = null;
+				// ask each "simple" factory
+				if (canBeOptimized) {
+					List<IParseFactorySimpleModelCic> validators =
+							ExternalFactoriesHelper.getElementsInstances(
+									IParseFactorySimpleModelCic.class,
+									"org.eclipse.wb.core.java.parseFactories",
+									"simpleModel_CIC");
+					for (IParseFactorySimpleModelCic factory : validators) {
+						if (factory.accept(m_editor, creation, typeBinding)) {
+							javaInfo = factory.create(m_editor, creation, typeBinding);
+							if (javaInfo == null) {
+								return;
+							}
+							break;
+						}
+					}
+				}
+				// ask each "complex" factory
+				if (javaInfo == null) {
+					for (IParseFactory parseFactory : m_parseFactories) {
+						javaInfo = parseFactory.create(
+								m_editor,
+								creation,
+								methodBinding,
+								typeBinding,
+								arguments,
+								argumentInfos);
+						if (javaInfo != null) {
+							break;
+						}
+					}
+				}
+				// process JavaInfo
+				if (javaInfo != null) {
+					addJavaInfo(javaInfo, creation);
+					// establish parent/child link
+					bindChild_ClassInstanceCreation(creation, methodBinding, javaInfo, argumentInfos);
+					bindChild_SuperConstructorInvocation(creation, javaInfo);
+				}
+			} catch (Throwable e) {
+				ReflectionUtils.propagate(e);
+			}
+		}
 
-    /**
-     * @return <code>true</code> if it is known that this {@link ClassInstanceCreation} does not
-     *         have {@link JavaInfo} model.
-     */
-    private boolean createJavaInfo_noModel(ClassInstanceCreation creation,
-        ITypeBinding typeBinding) {
-      List<ParseFactoryNoModel> validators = ExternalFactoriesHelper.getElementsInstances(
-          ParseFactoryNoModel.class,
-          "org.eclipse.wb.core.java.parseFactories",
-          "noModel");
-      for (ParseFactoryNoModel validator : validators) {
-        if (validator.noModel(creation, typeBinding)) {
-          return true;
-        }
-      }
-      return false;
-    }
+		/**
+		 * @return <code>true</code> if it is known that this {@link ClassInstanceCreation} does not
+		 *         have {@link JavaInfo} model.
+		 */
+		private boolean createJavaInfo_noModel(ClassInstanceCreation creation,
+				ITypeBinding typeBinding) {
+			List<ParseFactoryNoModel> validators = ExternalFactoriesHelper.getElementsInstances(
+					ParseFactoryNoModel.class,
+					"org.eclipse.wb.core.java.parseFactories",
+					"noModel");
+			for (ParseFactoryNoModel validator : validators) {
+				if (validator.noModel(creation, typeBinding)) {
+					return true;
+				}
+			}
+			return false;
+		}
 
-    @Override
-    public void endVisit(MethodInvocation invocation) {
-      try {
-        if (createJavaInfo_noModel(invocation)) {
-          return;
-        }
-        // prepare method information
-        IMethodBinding methodBinding = AstNodeUtils.getMethodBinding(invocation);
-        if (methodBinding == null) {
-          return;
-        }
-        Expression arguments[] = getExpressionArray(DomGenerics.arguments(invocation));
-        // prepare JavaInfo's
-        JavaInfo expressionInfo = getJavaInfo(invocation.getExpression());
-        JavaInfo[] argumentInfos = getJavaInfoArray(arguments);
-        // ask each factory, may be this invocation is JavaInfo creation
-        for (IParseFactory parseFactory : m_parseFactories) {
-          JavaInfo javaInfo = parseFactory.create(
-              m_editor,
-              invocation,
-              methodBinding,
-              arguments,
-              expressionInfo,
-              argumentInfos,
-              JavaInfoParser.this);
-          if (javaInfo != null) {
-            addJavaInfo(javaInfo, invocation);
-            break;
-          }
-        }
-        // establish parent/child link
-        bindChild_MethodInvocation(
-            invocation,
-            methodBinding,
-            expressionInfo,
-            arguments,
-            argumentInfos);
-        // support for chain of invocations
-        if (expressionInfo != null) {
-          MethodDescription methodDescription =
-              expressionInfo.getDescription().getMethod(methodBinding);
-          if (methodDescription != null) {
-            if (methodDescription.hasTrueTag("returnThis")) {
-              expressionInfo.bindToExpression(invocation);
-            }
-          }
-        }
-      } catch (Throwable e) {
-        ReflectionUtils.propagate(e);
-      }
-    }
+		@Override
+		public void endVisit(MethodInvocation invocation) {
+			try {
+				if (createJavaInfo_noModel(invocation)) {
+					return;
+				}
+				// prepare method information
+				IMethodBinding methodBinding = AstNodeUtils.getMethodBinding(invocation);
+				if (methodBinding == null) {
+					return;
+				}
+				Expression arguments[] = getExpressionArray(DomGenerics.arguments(invocation));
+				// prepare JavaInfo's
+				JavaInfo expressionInfo = getJavaInfo(invocation.getExpression());
+				JavaInfo[] argumentInfos = getJavaInfoArray(arguments);
+				// ask each factory, may be this invocation is JavaInfo creation
+				for (IParseFactory parseFactory : m_parseFactories) {
+					JavaInfo javaInfo = parseFactory.create(
+							m_editor,
+							invocation,
+							methodBinding,
+							arguments,
+							expressionInfo,
+							argumentInfos,
+							JavaInfoParser.this);
+					if (javaInfo != null) {
+						addJavaInfo(javaInfo, invocation);
+						break;
+					}
+				}
+				// establish parent/child link
+				bindChild_MethodInvocation(
+						invocation,
+						methodBinding,
+						expressionInfo,
+						arguments,
+						argumentInfos);
+				// support for chain of invocations
+				if (expressionInfo != null) {
+					MethodDescription methodDescription =
+							expressionInfo.getDescription().getMethod(methodBinding);
+					if (methodDescription != null) {
+						if (methodDescription.hasTrueTag("returnThis")) {
+							expressionInfo.bindToExpression(invocation);
+						}
+					}
+				}
+			} catch (Throwable e) {
+				ReflectionUtils.propagate(e);
+			}
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Association
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    /**
-     * Sets the {@link Association} between parent/child {@link JavaInfo}'s. If <code>child</code>
-     * already has {@link Association}, then {@link CompoundAssociation} will be installed.
-     */
-    private void bindChild_setAssociation(JavaInfo parent,
-        JavaInfo child,
-        Association newAssociation) throws Exception {
-      Association existingAssociation = child.getAssociation();
-      if (existingAssociation == null) {
-        parent.addChild(child);
-        child.setAssociation(newAssociation);
-      } else {
-        if (child.getParent() != parent) {
-          throwDoubleAssociationException(parent, child, existingAssociation, newAssociation);
-        }
-        child.setAssociation(new CompoundAssociation(existingAssociation, newAssociation));
-      }
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Association
+		//
+		////////////////////////////////////////////////////////////////////////////
+		/**
+		 * Sets the {@link Association} between parent/child {@link JavaInfo}'s. If <code>child</code>
+		 * already has {@link Association}, then {@link CompoundAssociation} will be installed.
+		 */
+		private void bindChild_setAssociation(JavaInfo parent,
+				JavaInfo child,
+				Association newAssociation) throws Exception {
+			Association existingAssociation = child.getAssociation();
+			if (existingAssociation == null) {
+				parent.addChild(child);
+				child.setAssociation(newAssociation);
+			} else {
+				if (child.getParent() != parent) {
+					throwDoubleAssociationException(parent, child, existingAssociation, newAssociation);
+				}
+				child.setAssociation(new CompoundAssociation(existingAssociation, newAssociation));
+			}
+		}
 
-    /**
-     * Establish parent/child {@link Association} using given {@link MethodInvocation}.
-     */
-    private void bindChild_MethodInvocation(MethodInvocation invocation,
-        IMethodBinding methodBinding,
-        JavaInfo expressionInfo,
-        Expression[] arguments,
-        JavaInfo argumentInfos[]) throws Exception {
-      if (expressionInfo != null) {
-        MethodDescription methodDescription =
-            expressionInfo.getDescription().getMethod(methodBinding);
-        if (methodDescription != null) {
-          ITypeBinding[] parameterTypes = methodBinding.getParameterTypes();
-          List<ParameterDescription> parameterDescriptions = methodDescription.getParameters();
-          JavaInfo parent2Info = null;
-          JavaInfo child2Info = null;
-          // add association
-          for (ParameterDescription parameterDescription : parameterDescriptions) {
-            int parameterIndex = parameterDescription.getIndex();
-            if (parameterDescription.isChild()) {
-              JavaInfo parameterJavaInfo = argumentInfos[parameterIndex];
-              if (parameterTypes[parameterIndex].isArray()) {
-                // array parameter
-                Expression parameterExpression = arguments[parameterDescription.getIndex()];
-                if (parameterJavaInfo == null && parameterExpression instanceof ArrayCreation) {
-                  // allow only inline array creation for simple type
-                  ArrayCreation creation = (ArrayCreation) parameterExpression;
-                  if (creation.getType().getComponentType().isSimpleType()) {
-                    // prepare ArrayObjectInfo
-                    bindChild_MethodInvocationParameter_ArrayCreation(
-                        invocation,
-                        methodDescription,
-                        expressionInfo,
-                        parameterDescription,
-                        creation);
-                  }
-                } else if (parameterIndex == parameterDescriptions.size() - 1) {
-                  // ellipsis support
-                  Expression[] arrayArguments = (Expression[]) ArrayUtils.subarray(
-                      arguments,
-                      parameterIndex,
-                      arguments.length);
-                  JavaInfo[] arrayArgumentInfos = (JavaInfo[]) ArrayUtils.subarray(
-                      argumentInfos,
-                      parameterIndex,
-                      argumentInfos.length);
-                  // prepare EllipsisObjectInfo
-                  bindChild_MethodInvocationParameter_ArrayEllipsis(
-                      invocation,
-                      methodDescription,
-                      expressionInfo,
-                      parameterIndex,
-                      parameterDescription,
-                      arrayArguments,
-                      arrayArgumentInfos);
-                }
-              } else if (parameterJavaInfo != null) {
-                // simple parameter
-                bindChild_MethodInvocationParameter(
-                    invocation,
-                    methodDescription,
-                    expressionInfo,
-                    parameterDescription,
-                    parameterJavaInfo);
-              }
-            }
-            // find "secondary" association
-            if (parameterDescription.isParent2()) {
-              parent2Info = argumentInfos[parameterIndex];
-            }
-            if (parameterDescription.isChild2()) {
-              child2Info = argumentInfos[parameterIndex];
-            }
-          }
-          // set "secondary" association
-          if (parent2Info != null && child2Info != null) {
-            bindChild_setAssociation(
-                parent2Info,
-                child2Info,
-                new InvocationSecondaryAssociation(invocation));
-          }
-        }
-      }
-    }
+		/**
+		 * Establish parent/child {@link Association} using given {@link MethodInvocation}.
+		 */
+		private void bindChild_MethodInvocation(MethodInvocation invocation,
+				IMethodBinding methodBinding,
+				JavaInfo expressionInfo,
+				Expression[] arguments,
+				JavaInfo argumentInfos[]) throws Exception {
+			if (expressionInfo != null) {
+				MethodDescription methodDescription =
+						expressionInfo.getDescription().getMethod(methodBinding);
+				if (methodDescription != null) {
+					ITypeBinding[] parameterTypes = methodBinding.getParameterTypes();
+					List<ParameterDescription> parameterDescriptions = methodDescription.getParameters();
+					JavaInfo parent2Info = null;
+					JavaInfo child2Info = null;
+					// add association
+					for (ParameterDescription parameterDescription : parameterDescriptions) {
+						int parameterIndex = parameterDescription.getIndex();
+						if (parameterDescription.isChild()) {
+							JavaInfo parameterJavaInfo = argumentInfos[parameterIndex];
+							if (parameterTypes[parameterIndex].isArray()) {
+								// array parameter
+								Expression parameterExpression = arguments[parameterDescription.getIndex()];
+								if (parameterJavaInfo == null && parameterExpression instanceof ArrayCreation) {
+									// allow only inline array creation for simple type
+									ArrayCreation creation = (ArrayCreation) parameterExpression;
+									if (creation.getType().getComponentType().isSimpleType()) {
+										// prepare ArrayObjectInfo
+										bindChild_MethodInvocationParameter_ArrayCreation(
+												invocation,
+												methodDescription,
+												expressionInfo,
+												parameterDescription,
+												creation);
+									}
+								} else if (parameterIndex == parameterDescriptions.size() - 1) {
+									// ellipsis support
+									Expression[] arrayArguments = (Expression[]) ArrayUtils.subarray(
+											arguments,
+											parameterIndex,
+											arguments.length);
+									JavaInfo[] arrayArgumentInfos = (JavaInfo[]) ArrayUtils.subarray(
+											argumentInfos,
+											parameterIndex,
+											argumentInfos.length);
+									// prepare EllipsisObjectInfo
+									bindChild_MethodInvocationParameter_ArrayEllipsis(
+											invocation,
+											methodDescription,
+											expressionInfo,
+											parameterIndex,
+											parameterDescription,
+											arrayArguments,
+											arrayArgumentInfos);
+								}
+							} else if (parameterJavaInfo != null) {
+								// simple parameter
+								bindChild_MethodInvocationParameter(
+										invocation,
+										methodDescription,
+										expressionInfo,
+										parameterDescription,
+										parameterJavaInfo);
+							}
+						}
+						// find "secondary" association
+						if (parameterDescription.isParent2()) {
+							parent2Info = argumentInfos[parameterIndex];
+						}
+						if (parameterDescription.isChild2()) {
+							child2Info = argumentInfos[parameterIndex];
+						}
+					}
+					// set "secondary" association
+					if (parent2Info != null && child2Info != null) {
+						bindChild_setAssociation(
+								parent2Info,
+								child2Info,
+								new InvocationSecondaryAssociation(invocation));
+					}
+				}
+			}
+		}
 
-    private void bindChild_MethodInvocationParameter(MethodInvocation invocation,
-        MethodDescription methodDescription,
-        JavaInfo expressionInfo,
-        ParameterDescription parameterDescription,
-        JavaInfo parameterJavaInfo) throws Exception {
-      if (parameterDescription.hasTrueTag("associateOnlyFirstTime")
-          && parameterJavaInfo.getParent() != null) {
-        return;
-      }
-      expressionInfo.getBroadcast(JavaInfoMethodAssociationOnParse.class).invoke(
-          expressionInfo,
-          parameterJavaInfo,
-          methodDescription);
-      bindChild_setAssociation(
-          expressionInfo,
-          parameterJavaInfo,
-          new InvocationChildAssociation(invocation));
-    }
+		private void bindChild_MethodInvocationParameter(MethodInvocation invocation,
+				MethodDescription methodDescription,
+				JavaInfo expressionInfo,
+				ParameterDescription parameterDescription,
+				JavaInfo parameterJavaInfo) throws Exception {
+			if (parameterDescription.hasTrueTag("associateOnlyFirstTime")
+					&& parameterJavaInfo.getParent() != null) {
+				return;
+			}
+			expressionInfo.getBroadcast(JavaInfoMethodAssociationOnParse.class).invoke(
+					expressionInfo,
+					parameterJavaInfo,
+					methodDescription);
+			bindChild_setAssociation(
+					expressionInfo,
+					parameterJavaInfo,
+					new InvocationChildAssociation(invocation));
+		}
 
-    @SuppressWarnings("unchecked")
-    private void bindChild_MethodInvocationParameter_ArrayCreation(MethodInvocation invocation,
-        MethodDescription methodDescription,
-        JavaInfo expressionInfo,
-        ParameterDescription parameterDescription,
-        ArrayCreation creation) throws Exception {
-      ArrayObjectInfo arrayInfo =
-          new ArrayObjectInfo(m_editor, methodDescription.getName(), creation);
-      expressionInfo.addChild(arrayInfo);
-      arrayInfo.setRemoveOnEmpty(
-          parameterDescription.hasTrueTag(AbstractArrayObjectInfo.REMOVE_ON_EMPTY_TAG));
-      arrayInfo.setHideInTree(
-          parameterDescription.hasTrueTag(AbstractArrayObjectInfo.HIDE_IN_TREE_TAG));
-      //arrayInfo.setCreationId(parameter.getTag(ArrayObjectInfo.CREATION_ID_TAG));
-      // prepare items
-      Expression[] arrayItems = getExpressionArray(creation.getInitializer().expressions());
-      JavaInfo[] arrayJavaInfos = getJavaInfoArray(arrayItems);
-      // process array items
-      for (int i = 0; i < arrayJavaInfos.length; i++) {
-        JavaInfo arrayJavaInfo = arrayJavaInfos[i];
-        if (arrayJavaInfo != null) {
-          if (parameterDescription.hasTrueTag("associateOnlyFirstTime")
-              && arrayJavaInfo.getParent() != null) {
-            continue;
-          }
-          Assert.isNull(
-              arrayJavaInfo.getParent(),
-              String.format(
-                  "Parent for array item %s already assigned.",
-                  arrayJavaInfo.toString()));
-          arrayInfo.addItem(arrayJavaInfo);
-          expressionInfo.getBroadcast(JavaInfoMethodAssociationOnParse.class).invoke(
-              expressionInfo,
-              arrayJavaInfo,
-              methodDescription);
-          bindChild_setAssociation(
-              expressionInfo,
-              arrayJavaInfo,
-              new InvocationChildArrayAssociation(invocation, arrayInfo));
-        }
-      }
-    }
+		@SuppressWarnings("unchecked")
+		private void bindChild_MethodInvocationParameter_ArrayCreation(MethodInvocation invocation,
+				MethodDescription methodDescription,
+				JavaInfo expressionInfo,
+				ParameterDescription parameterDescription,
+				ArrayCreation creation) throws Exception {
+			ArrayObjectInfo arrayInfo =
+					new ArrayObjectInfo(m_editor, methodDescription.getName(), creation);
+			expressionInfo.addChild(arrayInfo);
+			arrayInfo.setRemoveOnEmpty(
+					parameterDescription.hasTrueTag(AbstractArrayObjectInfo.REMOVE_ON_EMPTY_TAG));
+			arrayInfo.setHideInTree(
+					parameterDescription.hasTrueTag(AbstractArrayObjectInfo.HIDE_IN_TREE_TAG));
+			//arrayInfo.setCreationId(parameter.getTag(ArrayObjectInfo.CREATION_ID_TAG));
+			// prepare items
+			Expression[] arrayItems = getExpressionArray(creation.getInitializer().expressions());
+			JavaInfo[] arrayJavaInfos = getJavaInfoArray(arrayItems);
+			// process array items
+			for (int i = 0; i < arrayJavaInfos.length; i++) {
+				JavaInfo arrayJavaInfo = arrayJavaInfos[i];
+				if (arrayJavaInfo != null) {
+					if (parameterDescription.hasTrueTag("associateOnlyFirstTime")
+							&& arrayJavaInfo.getParent() != null) {
+						continue;
+					}
+					Assert.isNull(
+							arrayJavaInfo.getParent(),
+							String.format(
+									"Parent for array item %s already assigned.",
+									arrayJavaInfo.toString()));
+					arrayInfo.addItem(arrayJavaInfo);
+					expressionInfo.getBroadcast(JavaInfoMethodAssociationOnParse.class).invoke(
+							expressionInfo,
+							arrayJavaInfo,
+							methodDescription);
+					bindChild_setAssociation(
+							expressionInfo,
+							arrayJavaInfo,
+							new InvocationChildArrayAssociation(invocation, arrayInfo));
+				}
+			}
+		}
 
-    @SuppressWarnings("cast")
-    private void bindChild_MethodInvocationParameter_ArrayEllipsis(MethodInvocation invocation,
-        MethodDescription methodDescription,
-        JavaInfo expressionInfo,
-        int parameterIndex,
-        ParameterDescription parameterDescription,
-        Expression[] arrayArguments,
-        JavaInfo arrayJavaInfos[]) throws Exception {
-      Class<?> itemType = parameterDescription.getType();
-      Assert.isTrue(itemType.isArray(), "Ellipsis type not array.");
-      EllipsisObjectInfo arrayInfo = new EllipsisObjectInfo(m_editor,
-          methodDescription.getName(),
-          itemType.getComponentType(),
-          invocation,
-          parameterIndex);
-      expressionInfo.addChild(arrayInfo);
-      arrayInfo.setRemoveOnEmpty(
-          parameterDescription.hasTrueTag(AbstractArrayObjectInfo.REMOVE_ON_EMPTY_TAG));
-      arrayInfo.setHideInTree(
-          parameterDescription.hasTrueTag(AbstractArrayObjectInfo.HIDE_IN_TREE_TAG));
-      arrayInfo.setOnEmptySource(
-          parameterDescription.getTag(EllipsisObjectInfo.ON_EMPTY_SOURCE_TAG));
-      // process array items
-      for (int i = 0; i < arrayJavaInfos.length; i++) {
-        JavaInfo arrayJavaInfo = arrayJavaInfos[i];
-        if (arrayJavaInfo != null) {
-          if (parameterDescription.hasTrueTag("associateOnlyFirstTime")
-              && arrayJavaInfo.getParent() != null) {
-            continue;
-          }
-          Assert.isNull(
-              arrayJavaInfo.getParent(),
-              String.format(
-                  "Parent for array item %s already assigned.",
-                  arrayJavaInfo.toString()));
-          arrayInfo.addItem(arrayJavaInfo);
-          expressionInfo.getBroadcast(JavaInfoMethodAssociationOnParse.class).invoke(
-              expressionInfo,
-              arrayJavaInfo,
-              methodDescription);
-          bindChild_setAssociation(
-              expressionInfo,
-              arrayJavaInfo,
-              new InvocationChildEllipsisAssociation(invocation, arrayInfo));
-        }
-      }
-    }
+		@SuppressWarnings("cast")
+		private void bindChild_MethodInvocationParameter_ArrayEllipsis(MethodInvocation invocation,
+				MethodDescription methodDescription,
+				JavaInfo expressionInfo,
+				int parameterIndex,
+				ParameterDescription parameterDescription,
+				Expression[] arrayArguments,
+				JavaInfo arrayJavaInfos[]) throws Exception {
+			Class<?> itemType = parameterDescription.getType();
+			Assert.isTrue(itemType.isArray(), "Ellipsis type not array.");
+			EllipsisObjectInfo arrayInfo = new EllipsisObjectInfo(m_editor,
+					methodDescription.getName(),
+					itemType.getComponentType(),
+					invocation,
+					parameterIndex);
+			expressionInfo.addChild(arrayInfo);
+			arrayInfo.setRemoveOnEmpty(
+					parameterDescription.hasTrueTag(AbstractArrayObjectInfo.REMOVE_ON_EMPTY_TAG));
+			arrayInfo.setHideInTree(
+					parameterDescription.hasTrueTag(AbstractArrayObjectInfo.HIDE_IN_TREE_TAG));
+			arrayInfo.setOnEmptySource(
+					parameterDescription.getTag(EllipsisObjectInfo.ON_EMPTY_SOURCE_TAG));
+			// process array items
+			for (int i = 0; i < arrayJavaInfos.length; i++) {
+				JavaInfo arrayJavaInfo = arrayJavaInfos[i];
+				if (arrayJavaInfo != null) {
+					if (parameterDescription.hasTrueTag("associateOnlyFirstTime")
+							&& arrayJavaInfo.getParent() != null) {
+						continue;
+					}
+					Assert.isNull(
+							arrayJavaInfo.getParent(),
+							String.format(
+									"Parent for array item %s already assigned.",
+									arrayJavaInfo.toString()));
+					arrayInfo.addItem(arrayJavaInfo);
+					expressionInfo.getBroadcast(JavaInfoMethodAssociationOnParse.class).invoke(
+							expressionInfo,
+							arrayJavaInfo,
+							methodDescription);
+					bindChild_setAssociation(
+							expressionInfo,
+							arrayJavaInfo,
+							new InvocationChildEllipsisAssociation(invocation, arrayInfo));
+				}
+			}
+		}
 
-    /**
-     * Establish parent/child {@link Association} using given {@link ClassInstanceCreation}.
-     */
-    private void bindChild_ClassInstanceCreation(ClassInstanceCreation creation,
-        IMethodBinding methodBinding,
-        JavaInfo javaInfo,
-        JavaInfo argumentInfos[]) throws Exception {
-      if (javaInfo.getParent() == null) {
-        ConstructorDescription constructor =
-            javaInfo.getDescription().getConstructor(methodBinding);
-        if (constructor != null) {
-          for (ParameterDescription parameter : constructor.getParameters()) {
-            // parent passed as constructor argument
-            if (parameter.isParent()) {
-              JavaInfo parentInfo = argumentInfos[parameter.getIndex()];
-              if (parentInfo != null) {
-                parentInfo.addChild(javaInfo);
-                javaInfo.setAssociation(new ConstructorParentAssociation());
-              }
-              break;
-            }
-            // child passed as constructor argument
-            if (parameter.isChild()) {
-              JavaInfo childInfo = argumentInfos[parameter.getIndex()];
-              if (childInfo != null) {
-                javaInfo.addChild(childInfo);
-                childInfo.setAssociation(new ConstructorChildAssociation());
-              }
-              break;
-            }
-          }
-        }
-      }
-    }
+		/**
+		 * Establish parent/child {@link Association} using given {@link ClassInstanceCreation}.
+		 */
+		private void bindChild_ClassInstanceCreation(ClassInstanceCreation creation,
+				IMethodBinding methodBinding,
+				JavaInfo javaInfo,
+				JavaInfo argumentInfos[]) throws Exception {
+			if (javaInfo.getParent() == null) {
+				ConstructorDescription constructor =
+						javaInfo.getDescription().getConstructor(methodBinding);
+				if (constructor != null) {
+					for (ParameterDescription parameter : constructor.getParameters()) {
+						// parent passed as constructor argument
+						if (parameter.isParent()) {
+							JavaInfo parentInfo = argumentInfos[parameter.getIndex()];
+							if (parentInfo != null) {
+								parentInfo.addChild(javaInfo);
+								javaInfo.setAssociation(new ConstructorParentAssociation());
+							}
+							break;
+						}
+						// child passed as constructor argument
+						if (parameter.isChild()) {
+							JavaInfo childInfo = argumentInfos[parameter.getIndex()];
+							if (childInfo != null) {
+								javaInfo.addChild(childInfo);
+								childInfo.setAssociation(new ConstructorChildAssociation());
+							}
+							break;
+						}
+					}
+				}
+			}
+		}
 
-    /**
-     * New {@link JavaInfo} was just created using given {@link Expression}. This method performs
-     * special check, if this {@link Expression} is argument of {@link SuperConstructorInvocation},
-     * so sets object and parent/child link.
-     * <p>
-     * For example: <code><pre>
-     *   public class Test extends JPanel {
-     *     public Test() {
-     *       this(new BorderLayout());
-     *     }
-     *   }
-     * </pre><code>
-     */
-    private void bindChild_SuperConstructorInvocation(Expression expression, JavaInfo javaInfo)
-        throws Exception {
-      if (javaInfo.getParent() == null) {
-        if (expression.getLocationInParent() == SuperConstructorInvocation.ARGUMENTS_PROPERTY) {
-          SuperConstructorInvocation constructorInvocation =
-              (SuperConstructorInvocation) expression.getParent();
-          IMethodBinding constructorBinding = AstNodeUtils.getSuperBinding(constructorInvocation);
-          // set Object
-          {
-            Object object = JavaInfoEvaluationHelper.getValue(expression);
-            javaInfo.setObject(object);
-          }
-          // set parent/child link
-          {
-            JavaInfo thisJavaInfo = getJavaInfo(null);
-            ConstructorDescription constructorDescription =
-                thisJavaInfo.getDescription().getConstructor(constructorBinding);
-            if (constructorDescription != null) {
-              int argumentIndex = constructorInvocation.arguments().indexOf(expression);
-              ParameterDescription parameter = constructorDescription.getParameter(argumentIndex);
-              // child passed as SuperConstructorInvocation argument
-              if (parameter.isChild()) {
-                thisJavaInfo.addChild(javaInfo);
-                Association association =
-                    new SuperConstructorArgumentAssociation(constructorInvocation);
-                javaInfo.setAssociation(association);
-              }
-            }
-          }
-        }
-      }
-    }
+		/**
+		 * New {@link JavaInfo} was just created using given {@link Expression}. This method performs
+		 * special check, if this {@link Expression} is argument of {@link SuperConstructorInvocation},
+		 * so sets object and parent/child link.
+		 * <p>
+		 * For example: <code><pre>
+		 *   public class Test extends JPanel {
+		 *     public Test() {
+		 *       this(new BorderLayout());
+		 *     }
+		 *   }
+		 * </pre><code>
+		 */
+		private void bindChild_SuperConstructorInvocation(Expression expression, JavaInfo javaInfo)
+				throws Exception {
+			if (javaInfo.getParent() == null) {
+				if (expression.getLocationInParent() == SuperConstructorInvocation.ARGUMENTS_PROPERTY) {
+					SuperConstructorInvocation constructorInvocation =
+							(SuperConstructorInvocation) expression.getParent();
+					IMethodBinding constructorBinding = AstNodeUtils.getSuperBinding(constructorInvocation);
+					// set Object
+					{
+						Object object = JavaInfoEvaluationHelper.getValue(expression);
+						javaInfo.setObject(object);
+					}
+					// set parent/child link
+					{
+						JavaInfo thisJavaInfo = getJavaInfo(null);
+						ConstructorDescription constructorDescription =
+								thisJavaInfo.getDescription().getConstructor(constructorBinding);
+						if (constructorDescription != null) {
+							int argumentIndex = constructorInvocation.arguments().indexOf(expression);
+							ParameterDescription parameter = constructorDescription.getParameter(argumentIndex);
+							// child passed as SuperConstructorInvocation argument
+							if (parameter.isChild()) {
+								thisJavaInfo.addChild(javaInfo);
+								Association association =
+										new SuperConstructorArgumentAssociation(constructorInvocation);
+								javaInfo.setAssociation(association);
+							}
+						}
+					}
+				}
+			}
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Variables
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public void endVisit(VariableDeclarationFragment declaration) {
-      if (createJavaInfo_noModel(declaration)) {
-        return;
-      }
-      SimpleName variable = declaration.getName();
-      Expression initializer = declaration.getInitializer();
-      createVariableSupport(variable, initializer);
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Variables
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public void endVisit(VariableDeclarationFragment declaration) {
+			if (createJavaInfo_noModel(declaration)) {
+				return;
+			}
+			SimpleName variable = declaration.getName();
+			Expression initializer = declaration.getInitializer();
+			createVariableSupport(variable, initializer);
+		}
 
-    @Override
-    public void endVisit(Assignment assignment) {
-      if (createJavaInfo_noModel(assignment)) {
-        return;
-      }
-      Expression variable = assignment.getLeftHandSide();
-      if (AstNodeUtils.isVariable(variable)) {
-        Expression initializer = assignment.getRightHandSide();
-        createVariableSupport(variable, initializer);
-      }
-    }
+		@Override
+		public void endVisit(Assignment assignment) {
+			if (createJavaInfo_noModel(assignment)) {
+				return;
+			}
+			Expression variable = assignment.getLeftHandSide();
+			if (AstNodeUtils.isVariable(variable)) {
+				Expression initializer = assignment.getRightHandSide();
+				createVariableSupport(variable, initializer);
+			}
+		}
 
-    private void createVariableSupport(final Expression variable, final Expression initializer) {
-      ExecutionUtils.runRethrow(new RunnableEx() {
-        @Override
-        public void run() throws Exception {
-          JavaInfo javaInfo = getJavaInfo(initializer);
-          if (javaInfo != null) {
-            // check if there is already variable support
-            boolean noVariableSupport;
-            {
-              VariableSupport support = javaInfo.getVariableSupport();
-              noVariableSupport = support == null || support.isDefault();
-            }
-            // only first assignment is variable
-            if (noVariableSupport) {
-              VariableSupport support;
-              // prepare assignments and binding
-              List<Expression> assignments =
-                  ExecutionFlowUtils.getAssignments(m_editorState.getFlowDescription(), variable);
-              IVariableBinding variableBinding = AstNodeUtils.getVariableBinding(variable);
-              // local or field
-              if (variableBinding.isField()) {
-                if (assignments.size() == 1) {
-                  if (variable.getParent() instanceof VariableDeclarationFragment) {
-                    support = new FieldInitializerVariableSupport(javaInfo, variable);
-                  } else {
-                    support = new FieldUniqueVariableSupport(javaInfo, variable);
-                  }
-                } else {
-                  support = new FieldReuseVariableSupport(javaInfo, variable);
-                }
-              } else {
-                SimpleName simpleVariable = (SimpleName) variable;
-                if (assignments.size() == 1) {
-                  support = new LocalUniqueVariableSupport(javaInfo, simpleVariable);
-                } else {
-                  support = new LocalReuseVariableSupport(javaInfo, simpleVariable);
-                }
-              }
-              // set variable support
-              javaInfo.setVariableSupport(support);
-            }
-          }
-        }
-      });
-    }
-  }
+		private void createVariableSupport(final Expression variable, final Expression initializer) {
+			ExecutionUtils.runRethrow(new RunnableEx() {
+				@Override
+				public void run() throws Exception {
+					JavaInfo javaInfo = getJavaInfo(initializer);
+					if (javaInfo != null) {
+						// check if there is already variable support
+						boolean noVariableSupport;
+						{
+							VariableSupport support = javaInfo.getVariableSupport();
+							noVariableSupport = support == null || support.isDefault();
+						}
+						// only first assignment is variable
+						if (noVariableSupport) {
+							VariableSupport support;
+							// prepare assignments and binding
+							List<Expression> assignments =
+									ExecutionFlowUtils.getAssignments(m_editorState.getFlowDescription(), variable);
+							IVariableBinding variableBinding = AstNodeUtils.getVariableBinding(variable);
+							// local or field
+							if (variableBinding.isField()) {
+								if (assignments.size() == 1) {
+									if (variable.getParent() instanceof VariableDeclarationFragment) {
+										support = new FieldInitializerVariableSupport(javaInfo, variable);
+									} else {
+										support = new FieldUniqueVariableSupport(javaInfo, variable);
+									}
+								} else {
+									support = new FieldReuseVariableSupport(javaInfo, variable);
+								}
+							} else {
+								SimpleName simpleVariable = (SimpleName) variable;
+								if (assignments.size() == 1) {
+									support = new LocalUniqueVariableSupport(javaInfo, simpleVariable);
+								} else {
+									support = new LocalReuseVariableSupport(javaInfo, simpleVariable);
+								}
+							}
+							// set variable support
+							javaInfo.setVariableSupport(support);
+						}
+					}
+				}
+			});
+		}
+	}
 
-  /**
-   * @return the {@link ParseRootContext} for beginning parsing
-   */
-  private ParseRootContext prepareParseContext() throws Exception {
-    // prepare type and binding
-    IType primaryType;
-    ITypeBinding typeBinding;
-    {
-      ICompilationUnit modelUnit = m_editor.getModelUnit();
-      String unitPath = modelUnit.getUnderlyingResource().getFullPath().toPortableString();
-      primaryType = CodeUtils.findPrimaryType(modelUnit);
-      Assert.isTrueException(
-          primaryType != null,
-          ICoreExceptionConstants.PARSER_NO_PRIMARY_TYPE,
-          unitPath);
-      String primaryTypeName = primaryType.getElementName();
-      m_typeDeclaration = AstNodeUtils.getTypeByName(m_editor.getAstUnit(), primaryTypeName);
-      Assert.isTrueException(
-          m_typeDeclaration != null,
-          ICoreExceptionConstants.PARSER_NO_TYPE_DECLARATION,
-          unitPath);
-      typeBinding = m_typeDeclaration.resolveBinding();
-      Assert.isNotNull(typeBinding);
-    }
-    // ask each factory for root methods
-    for (IParseFactory parseFactory : m_parseFactories) {
-      ParseRootContext rootContext =
-          parseFactory.getRootContext(m_editor, m_typeDeclaration, typeBinding);
-      if (rootContext != null) {
-        return rootContext;
-      }
-    }
-    // check that one of the parse factories identified toolkit
-    {
-      EditorState editorState = EditorState.get(m_editor);
-      if (editorState.getEditorLoader() == null) {
-        if (!canBeClassWithGUI()) {
-          throw new DesignerException(ICoreExceptionConstants.PARSER_NOT_GUI,
-              primaryType.getFullyQualifiedName());
-        }
-        throw new DesignerException(ICoreExceptionConstants.PARSER_NO_TOOLKIT,
-            primaryType.getFullyQualifiedName());
-      }
-    }
-    // no root context found, try to find "main"
-    {
-      MethodDeclaration mainMethod =
-          AstNodeUtils.getMethodBySignature(m_typeDeclaration, "main(java.lang.String[])");
-      if (mainMethod != null) {
-        return new ParseRootContext(null, new ExecutionFlowDescription(mainMethod));
-      }
-    }
-    // still no entry point, try to use constructor
-    {
-      MethodDeclaration constructor =
-          ExecutionFlowUtils.getExecutionFlowConstructor(m_typeDeclaration);
-      if (constructor != null) {
-        return new ParseRootContext(null, new ExecutionFlowDescription(constructor));
-      }
-    }
-    // special handling for factories
-    AbstractParseFactory.failIfFactory(m_editor, m_typeDeclaration, typeBinding);
-    // can not find root methods, fail
-    m_editorState.getBroadcast().getListener(ObjectEventListener.class).dispose();
-    throw new NoEntryPointError(m_editor, m_typeDeclaration);
-  }
+	/**
+	 * @return the {@link ParseRootContext} for beginning parsing
+	 */
+	private ParseRootContext prepareParseContext() throws Exception {
+		// prepare type and binding
+		IType primaryType;
+		ITypeBinding typeBinding;
+		{
+			ICompilationUnit modelUnit = m_editor.getModelUnit();
+			String unitPath = modelUnit.getUnderlyingResource().getFullPath().toPortableString();
+			primaryType = CodeUtils.findPrimaryType(modelUnit);
+			Assert.isTrueException(
+					primaryType != null,
+					ICoreExceptionConstants.PARSER_NO_PRIMARY_TYPE,
+					unitPath);
+			String primaryTypeName = primaryType.getElementName();
+			m_typeDeclaration = AstNodeUtils.getTypeByName(m_editor.getAstUnit(), primaryTypeName);
+			Assert.isTrueException(
+					m_typeDeclaration != null,
+					ICoreExceptionConstants.PARSER_NO_TYPE_DECLARATION,
+					unitPath);
+			typeBinding = m_typeDeclaration.resolveBinding();
+			Assert.isNotNull(typeBinding);
+		}
+		// ask each factory for root methods
+		for (IParseFactory parseFactory : m_parseFactories) {
+			ParseRootContext rootContext =
+					parseFactory.getRootContext(m_editor, m_typeDeclaration, typeBinding);
+			if (rootContext != null) {
+				return rootContext;
+			}
+		}
+		// check that one of the parse factories identified toolkit
+		{
+			EditorState editorState = EditorState.get(m_editor);
+			if (editorState.getEditorLoader() == null) {
+				if (!canBeClassWithGUI()) {
+					throw new DesignerException(ICoreExceptionConstants.PARSER_NOT_GUI,
+							primaryType.getFullyQualifiedName());
+				}
+				throw new DesignerException(ICoreExceptionConstants.PARSER_NO_TOOLKIT,
+						primaryType.getFullyQualifiedName());
+			}
+		}
+		// no root context found, try to find "main"
+		{
+			MethodDeclaration mainMethod =
+					AstNodeUtils.getMethodBySignature(m_typeDeclaration, "main(java.lang.String[])");
+			if (mainMethod != null) {
+				return new ParseRootContext(null, new ExecutionFlowDescription(mainMethod));
+			}
+		}
+		// still no entry point, try to use constructor
+		{
+			MethodDeclaration constructor =
+					ExecutionFlowUtils.getExecutionFlowConstructor(m_typeDeclaration);
+			if (constructor != null) {
+				return new ParseRootContext(null, new ExecutionFlowDescription(constructor));
+			}
+		}
+		// special handling for factories
+		AbstractParseFactory.failIfFactory(m_editor, m_typeDeclaration, typeBinding);
+		// can not find root methods, fail
+		m_editorState.getBroadcast().getListener(ObjectEventListener.class).dispose();
+		throw new NoEntryPointError(m_editor, m_typeDeclaration);
+	}
 
-  /**
-   * Checks if {@link CompilationUnit} can have GUI, but we were not able no understand it because
-   * of no corresponding GUI toolkit. Right now we just check that there are
-   * {@link ClassInstanceCreation}'s, so for example identify empty classes or data beans.
-   */
-  private boolean canBeClassWithGUI() {
-    final AtomicBoolean result = new AtomicBoolean();
-    m_editor.getAstUnit().accept(new ASTVisitor() {
-      @Override
-      public void endVisit(ClassInstanceCreation node) {
-        result.set(true);
-      }
-    });
-    return result.get();
-  }
+	/**
+	 * Checks if {@link CompilationUnit} can have GUI, but we were not able no understand it because
+	 * of no corresponding GUI toolkit. Right now we just check that there are
+	 * {@link ClassInstanceCreation}'s, so for example identify empty classes or data beans.
+	 */
+	private boolean canBeClassWithGUI() {
+		final AtomicBoolean result = new AtomicBoolean();
+		m_editor.getAstUnit().accept(new ASTVisitor() {
+			@Override
+			public void endVisit(ClassInstanceCreation node) {
+				result.set(true);
+			}
+		});
+		return result.get();
+	}
 
-  /**
-   * Adds new given {@link JavaInfo} to the list of components.
-   */
-  private void addJavaInfo(JavaInfo javaInfo, Expression creation) throws Exception {
-    // add component
-    m_javaInfoResolver.addJavaInfo(javaInfo, creation);
-    javaInfo.addRelatedNode(creation);
-    // activate Java state
-    GlobalStateJava.activate(javaInfo);
-    // set default variable support
-    {
-      // check for "lazy creation" pattern
-      if (javaInfo.getVariableSupport() == null) {
-        LazyVariableSupportUtils.setLazyVariable(javaInfo);
-      }
-      // set "empty" variable support
-      if (javaInfo.getVariableSupport() == null) {
-        Assert.isNotNull(creation);
-        javaInfo.setVariableSupport(new EmptyVariableSupport(javaInfo, creation));
-      }
-    }
-    // evaluate "this"
-    if (!javaInfo.getCreationSupport().canBeEvaluated()) {
-      getEvaluationHelper().evaluateJavaInfoUsingCreationSupport(javaInfo);
-    }
-  }
+	/**
+	 * Adds new given {@link JavaInfo} to the list of components.
+	 */
+	private void addJavaInfo(JavaInfo javaInfo, Expression creation) throws Exception {
+		// add component
+		m_javaInfoResolver.addJavaInfo(javaInfo, creation);
+		javaInfo.addRelatedNode(creation);
+		// activate Java state
+		GlobalStateJava.activate(javaInfo);
+		// set default variable support
+		{
+			// check for "lazy creation" pattern
+			if (javaInfo.getVariableSupport() == null) {
+				LazyVariableSupportUtils.setLazyVariable(javaInfo);
+			}
+			// set "empty" variable support
+			if (javaInfo.getVariableSupport() == null) {
+				Assert.isNotNull(creation);
+				javaInfo.setVariableSupport(new EmptyVariableSupport(javaInfo, creation));
+			}
+		}
+		// evaluate "this"
+		if (!javaInfo.getCreationSupport().canBeEvaluated()) {
+			getEvaluationHelper().evaluateJavaInfoUsingCreationSupport(javaInfo);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Evaluation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final Set<ASTNode> m_evaluatedNodes = Sets.newHashSet();
-  private JavaInfoEvaluationHelper m_evaluationHelper;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Evaluation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final Set<ASTNode> m_evaluatedNodes = Sets.newHashSet();
+	private JavaInfoEvaluationHelper m_evaluationHelper;
 
-  /**
-   * @return the {@link JavaInfoEvaluationHelper} for this {@link AstEditor}.
-   */
-  private JavaInfoEvaluationHelper getEvaluationHelper() {
-    if (m_evaluationHelper == null) {
-      m_evaluationHelper = new JavaInfoEvaluationHelper(m_editor, getParseVisitor()) {
-        @Override
-        protected JavaInfo getRootJavaInfo() {
-          return m_rootComponent;
-        }
+	/**
+	 * @return the {@link JavaInfoEvaluationHelper} for this {@link AstEditor}.
+	 */
+	private JavaInfoEvaluationHelper getEvaluationHelper() {
+		if (m_evaluationHelper == null) {
+			m_evaluationHelper = new JavaInfoEvaluationHelper(m_editor, getParseVisitor()) {
+				@Override
+				protected JavaInfo getRootJavaInfo() {
+					return m_rootComponent;
+				}
 
-        @Override
-        protected JavaInfo getJavaInfoRepresentedBy(Expression expression) {
-          return getJavaInfo(expression);
-        }
+				@Override
+				protected JavaInfo getJavaInfoRepresentedBy(Expression expression) {
+					return getJavaInfo(expression);
+				}
 
-        @Override
-        protected void thisJavaInfoNodeProcessed(JavaInfo javaInfo, ASTNode node) throws Exception {
-          javaInfo.addRelatedNode(node);
-        }
-      };
-    }
-    return m_evaluationHelper;
-  }
+				@Override
+				protected void thisJavaInfoNodeProcessed(JavaInfo javaInfo, ASTNode node) throws Exception {
+					javaInfo.addRelatedNode(node);
+				}
+			};
+		}
+		return m_evaluationHelper;
+	}
 
-  /**
-   * Evaluates given {@link ASTNode} using {@link JavaInfoEvaluationHelper}.
-   */
-  private void evaluateNode(ASTNode node) throws Exception {
-    if (!m_evaluatedNodes.contains(node)) {
-      m_evaluatedNodes.add(node);
-      try {
-        JavaInfoEvaluationHelper evaluationHelper = getEvaluationHelper();
-        // send notifications and evaluate
-        if (shouldNotifyAboutEvaluate(node)) {
-          m_evaluationListener.evaluateBefore(null, node);
-        }
-        evaluationHelper.evaluate(node);
-        if (shouldNotifyAboutEvaluate(node)) {
-          m_evaluationListener.evaluateAfter(null, node);
-        }
-      } catch (Throwable e) {
-        // fail, if fatal
-        if (DesignerExceptionUtils.isFatal(e)) {
-          ReflectionUtils.propagate(e);
-        }
-        // exception during JavaInfo evaluation is serious, so fail
-        if (node instanceof Expression && getJavaInfo((Expression) node) != null) {
-          ReflectionUtils.propagate(e);
-        }
-        // some other exception, log and continue
-        m_editorState.getBadParserNodes().add(node, e);
-      }
-    }
-  }
+	/**
+	 * Evaluates given {@link ASTNode} using {@link JavaInfoEvaluationHelper}.
+	 */
+	private void evaluateNode(ASTNode node) throws Exception {
+		if (!m_evaluatedNodes.contains(node)) {
+			m_evaluatedNodes.add(node);
+			try {
+				JavaInfoEvaluationHelper evaluationHelper = getEvaluationHelper();
+				// send notifications and evaluate
+				if (shouldNotifyAboutEvaluate(node)) {
+					m_evaluationListener.evaluateBefore(null, node);
+				}
+				evaluationHelper.evaluate(node);
+				if (shouldNotifyAboutEvaluate(node)) {
+					m_evaluationListener.evaluateAfter(null, node);
+				}
+			} catch (Throwable e) {
+				// fail, if fatal
+				if (DesignerExceptionUtils.isFatal(e)) {
+					ReflectionUtils.propagate(e);
+				}
+				// exception during JavaInfo evaluation is serious, so fail
+				if (node instanceof Expression && getJavaInfo((Expression) node) != null) {
+					ReflectionUtils.propagate(e);
+				}
+				// some other exception, log and continue
+				m_editorState.getBadParserNodes().add(node, e);
+			}
+		}
+	}
 
-  private static boolean shouldNotifyAboutEvaluate(ASTNode node) {
-    return node instanceof ClassInstanceCreation
-        || node instanceof MethodInvocation
-        || node instanceof Statement;
-  }
+	private static boolean shouldNotifyAboutEvaluate(ASTNode node) {
+		return node instanceof ClassInstanceCreation
+				|| node instanceof MethodInvocation
+				|| node instanceof Statement;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the array of {@link Expression}'s for given list of them.
-   */
-  private static Expression[] getExpressionArray(List<Expression> expressionList) {
-    return expressionList.toArray(new Expression[expressionList.size()]);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the array of {@link Expression}'s for given list of them.
+	 */
+	private static Expression[] getExpressionArray(List<Expression> expressionList) {
+		return expressionList.toArray(new Expression[expressionList.size()]);
+	}
 
-  /**
-   * @return the size (count of elements) in components tree starting from given root.
-   */
-  private static int getComponentsTreeSize(ObjectInfo info) {
-    int size = 1;
-    // add sizes of children
-    for (ObjectInfo child : info.getChildren()) {
-      size += getComponentsTreeSize(child);
-    }
-    // return final size
-    return size;
-  }
+	/**
+	 * @return the size (count of elements) in components tree starting from given root.
+	 */
+	private static int getComponentsTreeSize(ObjectInfo info) {
+		int size = 1;
+		// add sizes of children
+		for (ObjectInfo child : info.getChildren()) {
+			size += getComponentsTreeSize(child);
+		}
+		// return final size
+		return size;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // JavaInfo access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link JavaInfo} for given {@link Expression} or <code>null</code> if given
-   *         {@link Expression} does not represent {@link JavaInfo}.
-   */
-  @Override
-  public JavaInfo getJavaInfo(Expression expression) {
-    return m_javaInfoResolver.getJavaInfo(expression);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// JavaInfo access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link JavaInfo} for given {@link Expression} or <code>null</code> if given
+	 *         {@link Expression} does not represent {@link JavaInfo}.
+	 */
+	@Override
+	public JavaInfo getJavaInfo(Expression expression) {
+		return m_javaInfoResolver.getJavaInfo(expression);
+	}
 
-  /**
-   * @return the array of {@link JavaInfo}'s represented by given array of {@link Expression}'s.
-   */
-  private JavaInfo[] getJavaInfoArray(Expression expressions[]) throws Exception {
-    JavaInfo javaInfos[] = new JavaInfo[expressions.length];
-    for (int i = 0; i < expressions.length; i++) {
-      Expression expression = expressions[i];
-      javaInfos[i] = getJavaInfo(expression);
-    }
-    return javaInfos;
-  }
+	/**
+	 * @return the array of {@link JavaInfo}'s represented by given array of {@link Expression}'s.
+	 */
+	private JavaInfo[] getJavaInfoArray(Expression expressions[]) throws Exception {
+		JavaInfo javaInfos[] = new JavaInfo[expressions.length];
+		for (int i = 0; i < expressions.length; i++) {
+			Expression expression = expressions[i];
+			javaInfos[i] = getJavaInfo(expression);
+		}
+		return javaInfos;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exceptions
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void throwDoubleAssociationException(JavaInfo parent,
-      JavaInfo child,
-      Association existingAssociation,
-      Association newAssociation) throws DesignerException {
-    String existingStatementSource = getAssociationStatementSource(existingAssociation);
-    String newStatementSource = getAssociationStatementSource(newAssociation);
-    String message = MessageFormat.format(
-        "\nChild:                    \n  {0}"
-            + "\nExisting: \n  {1} \n    {2}"
-            + "\nNew: \n  {3} \n    {4}",
-        child,
-        child.getParent(),
-        existingAssociation,
-        parent,
-        newAssociation);
-    DesignerException designerWarning =
-        new DesignerException(ICoreExceptionConstants.PARSER_DOUBLE_ASSOCIATION,
-            getShortComponentName(child),
-            existingStatementSource,
-            newStatementSource,
-            message);
-    designerWarning.setSourcePosition(m_visitor.m_currentStatement.getStartPosition());
-    throw designerWarning;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exceptions
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void throwDoubleAssociationException(JavaInfo parent,
+			JavaInfo child,
+			Association existingAssociation,
+			Association newAssociation) throws DesignerException {
+		String existingStatementSource = getAssociationStatementSource(existingAssociation);
+		String newStatementSource = getAssociationStatementSource(newAssociation);
+		String message = MessageFormat.format(
+				"\nChild:                    \n  {0}"
+						+ "\nExisting: \n  {1} \n    {2}"
+						+ "\nNew: \n  {3} \n    {4}",
+						child,
+						child.getParent(),
+						existingAssociation,
+						parent,
+						newAssociation);
+		DesignerException designerWarning =
+				new DesignerException(ICoreExceptionConstants.PARSER_DOUBLE_ASSOCIATION,
+						getShortComponentName(child),
+						existingStatementSource,
+						newStatementSource,
+						message);
+		designerWarning.setSourcePosition(m_visitor.m_currentStatement.getStartPosition());
+		throw designerWarning;
+	}
 
-  /**
-   * @return the source of {@link Association} statement or <code>"null"</code>.
-   */
-  private String getAssociationStatementSource(Association association) {
-    Statement statement = association.getStatement();
-    return statement != null ? m_editor.getSource(statement) : "<null>";
-  }
+	/**
+	 * @return the source of {@link Association} statement or <code>"null"</code>.
+	 */
+	private String getAssociationStatementSource(Association association) {
+		Statement statement = association.getStatement();
+		return statement != null ? m_editor.getSource(statement) : "<null>";
+	}
 
-  private static String getShortComponentName(JavaInfo javaInfo) {
-    if (javaInfo == null) {
-      return "<null>";
-    }
-    return javaInfo.getVariableSupport().getComponentName();
-  }
+	private static String getShortComponentName(JavaInfo javaInfo) {
+		if (javaInfo == null) {
+			return "<null>";
+		}
+		return javaInfo.getVariableSupport().getComponentName();
+	}
 
-  /**
-   * @return <code>true</code> if given {@link ClassInstanceCreation} may be NVO creation, so sohuld
-   *         be handled without optimizations.
-   */
-  private static boolean maybeNVO(ClassInstanceCreation creation) {
-    BodyDeclaration body = AstNodeUtils.getEnclosingNode(creation, BodyDeclaration.class);
-    if (body != null) {
-      Javadoc doc = body.getJavadoc();
-      return doc != null && doc.toString().contains("@wbp.nonvisual");
-    }
-    return false;
-  }
+	/**
+	 * @return <code>true</code> if given {@link ClassInstanceCreation} may be NVO creation, so sohuld
+	 *         be handled without optimizations.
+	 */
+	private static boolean maybeNVO(ClassInstanceCreation creation) {
+		BodyDeclaration body = AstNodeUtils.getEnclosingNode(creation, BodyDeclaration.class);
+		if (body != null) {
+			Javadoc doc = body.getJavadoc();
+			return doc != null && doc.toString().contains("@wbp.nonvisual");
+		}
+		return false;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/parser/JavaInfoResolver.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/parser/JavaInfoResolver.java
index 8d454e379..441823a70 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/parser/JavaInfoResolver.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/parser/JavaInfoResolver.java
@@ -62,346 +62,346 @@
  * @coverage core.model.parser
  */
 public final class JavaInfoResolver {
-  private final EditorState m_editorState;
-  private final CompilationUnit m_unit;
-  private final List<JavaInfo> m_components = Lists.newArrayList();
-  private boolean m_thisJavaInfoReady = false;
-  private JavaInfo m_thisJavaInfo = null;
-  private JavaInfo m_rootJavaInfo = null;
-  private final Set<Expression> m_expressions = Sets.newHashSet();
+	private final EditorState m_editorState;
+	private final CompilationUnit m_unit;
+	private final List<JavaInfo> m_components = Lists.newArrayList();
+	private boolean m_thisJavaInfoReady = false;
+	private JavaInfo m_thisJavaInfo = null;
+	private JavaInfo m_rootJavaInfo = null;
+	private final Set<Expression> m_expressions = Sets.newHashSet();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public JavaInfoResolver(AstEditor editor) {
-    m_editorState = EditorState.get(editor);
-    m_editorState.setJavaInfoResolver(this);
-    m_unit = editor.getAstUnit();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public JavaInfoResolver(AstEditor editor) {
+		m_editorState = EditorState.get(editor);
+		m_editorState.setJavaInfoResolver(this);
+		m_unit = editor.getAstUnit();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets the root {@link JavaInfo} after parsing. So, after this resolver will track only
-   * {@link JavaInfo} it this hierarchy.
-   */
-  public void setRootJavaInfo(JavaInfo rootJavaInfo) {
-    m_rootJavaInfo = rootJavaInfo;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets the root {@link JavaInfo} after parsing. So, after this resolver will track only
+	 * {@link JavaInfo} it this hierarchy.
+	 */
+	public void setRootJavaInfo(JavaInfo rootJavaInfo) {
+		m_rootJavaInfo = rootJavaInfo;
+	}
 
-  /**
-   * Adds new {@link JavaInfo} during parsing.
-   */
-  public void addJavaInfo(JavaInfo javaInfo, Expression creation) {
-    m_components.add(javaInfo);
-    if (creation != null) {
-      bind(javaInfo, creation);
-    }
-  }
+	/**
+	 * Adds new {@link JavaInfo} during parsing.
+	 */
+	public void addJavaInfo(JavaInfo javaInfo, Expression creation) {
+		m_components.add(javaInfo);
+		if (creation != null) {
+			bind(javaInfo, creation);
+		}
+	}
 
-  /**
-   * Specifies that given {@link Expression} is creation of given {@link JavaInfo}.
-   */
-  public void bind(JavaInfo javaInfo, Expression expression) {
-    ExpressionValue value = ExecutionFlowUtils2.ensurePermanentValue(expression);
-    value.setModel(javaInfo);
-  }
+	/**
+	 * Specifies that given {@link Expression} is creation of given {@link JavaInfo}.
+	 */
+	public void bind(JavaInfo javaInfo, Expression expression) {
+		ExpressionValue value = ExecutionFlowUtils2.ensurePermanentValue(expression);
+		value.setModel(javaInfo);
+	}
 
-  /**
-   * @param someJavaInfo
-   *          some {@link JavaInfo} in same hierarchy.
-   *
-   * @return the {@link JavaInfo} for given {@link Expression}, may be <code>null</code>.
-   */
-  public static JavaInfo getJavaInfo(JavaInfo someJavaInfo, Expression expression) {
-    Assert.isNotNull(someJavaInfo);
-    EditorState editorState = EditorState.get(someJavaInfo.getEditor());
-    JavaInfoResolver resolver = editorState.getJavaInfoResolver();
-    return resolver.getJavaInfo(expression);
-  }
+	/**
+	 * @param someJavaInfo
+	 *          some {@link JavaInfo} in same hierarchy.
+	 *
+	 * @return the {@link JavaInfo} for given {@link Expression}, may be <code>null</code>.
+	 */
+	public static JavaInfo getJavaInfo(JavaInfo someJavaInfo, Expression expression) {
+		Assert.isNotNull(someJavaInfo);
+		EditorState editorState = EditorState.get(someJavaInfo.getEditor());
+		JavaInfoResolver resolver = editorState.getJavaInfoResolver();
+		return resolver.getJavaInfo(expression);
+	}
 
-  /**
-   * @return the {@link JavaInfo} for given {@link Expression} or <code>null</code> if given
-   *         {@link Expression} does not represent {@link JavaInfo}.
-   */
-  public JavaInfo getJavaInfo(Expression expression) {
-    // prevent infinite recursion
-    if (m_expressions.contains(expression)) {
-      return null;
-    }
-    // analyze expression
-    try {
-      m_expressions.add(expression);
-      return getJavaInfo0(expression);
-    } catch (Throwable e) {
-      throw ReflectionUtils.propagate(e);
-    } finally {
-      m_expressions.remove(expression);
-    }
-  }
+	/**
+	 * @return the {@link JavaInfo} for given {@link Expression} or <code>null</code> if given
+	 *         {@link Expression} does not represent {@link JavaInfo}.
+	 */
+	public JavaInfo getJavaInfo(Expression expression) {
+		// prevent infinite recursion
+		if (m_expressions.contains(expression)) {
+			return null;
+		}
+		// analyze expression
+		try {
+			m_expressions.add(expression);
+			return getJavaInfo0(expression);
+		} catch (Throwable e) {
+			throw ReflectionUtils.propagate(e);
+		} finally {
+			m_expressions.remove(expression);
+		}
+	}
 
-  private JavaInfo getJavaInfo0(Expression expression) throws Exception {
-    // check for nodes that can not be JavaInfo
-    if (expression instanceof NullLiteral
-        || expression instanceof BooleanLiteral
-        || expression instanceof NumberLiteral
-        || expression instanceof StringLiteral
-        || expression instanceof TypeLiteral
-        || expression instanceof Assignment
-        || expression instanceof ArrayCreation
-        || expression instanceof ArrayInitializer) {
-      return null;
-    }
-    // "null" or "this"
-    if (expression == null || expression instanceof ThisExpression) {
-      if (!m_thisJavaInfoReady) {
-        m_thisJavaInfoReady = true;
-        for (JavaInfo component : getComponents()) {
-          if (component.getCreationSupport() instanceof ThisCreationSupport) {
-            m_thisJavaInfo = component;
-            break;
-          }
-        }
-      }
-      if (m_thisJavaInfo != null) {
-        m_thisJavaInfo.addRelatedNode(expression);
-      }
-      return m_thisJavaInfo;
-    }
-    // try to find tracked value
-    {
-      ExecutionFlowDescription flowDescription = m_editorState.getFlowDescription();
-      ExpressionValue value = ExecutionFlowUtils2.getValue(flowDescription, expression);
-      if (value != null) {
-        // may be bound JavaInfo creation/access
-        JavaInfo javaInfo = (JavaInfo) value.getModel();
-        if (javaInfo != null) {
-          boolean expressionPartOfCasted =
-              javaInfo.getCreationSupport() instanceof CastedSuperInvocationCreationSupport
-                  && expression.getLocationInParent() == CastExpression.EXPRESSION_PROPERTY;
-          if (!expressionPartOfCasted) {
-            javaInfo.addRelatedNode(expression);
-          }
-          return javaInfo;
-        }
-        // resolve "this"
-        {
-          Expression newExpression = value.getExpression();
-          if (newExpression instanceof ThisExpression && newExpression != expression) {
-            return getJavaInfo0(newExpression);
-          }
-        }
-      }
-    }
-    // XXX special support for RCP FormToolkit
-    if (AstNodeUtils.isSuccessorOf(expression, "org.eclipse.ui.forms.widgets.FormToolkit")) {
-      for (JavaInfo component : getComponents()) {
-        if (component instanceof InstanceFactoryInfo) {
-          if (component.getCreationSupport().isJavaInfo(expression)) {
-            ExecutionFlowUtils2.ensurePermanentValue(expression).setModel(component);
-            component.addRelatedNode(expression);
-            return component;
-          }
-        }
-      }
-    }
-    // invocation
-    if (expression instanceof MethodInvocation) {
-      MethodInvocation invocation = (MethodInvocation) expression;
-      String invName = invocation.getName().getIdentifier();
-      // XXX special support for GWT RootPanel
-      if (invName.equals("get")
-          && AstNodeUtils.isSuccessorOf(invocation, "com.google.gwt.user.client.ui.RootPanel")) {
-        for (JavaInfo component : getComponents()) {
-          if (component.getCreationSupport().isJavaInfo(invocation)) {
-            ExecutionFlowUtils2.ensurePermanentValue(expression).setModel(component);
-            component.addRelatedNode(expression);
-            return component;
-          }
-        }
-      }
-      // generic get()
-      if (invName.startsWith("get")) {
-        JavaInfo expressionJavaInfo = getJavaInfo(invocation.getExpression());
-        // getContentPane()
-        {
-          JavaInfo result = getExposedJavaInfo(expressionJavaInfo, invocation);
-          if (result != null) {
-            return result;
-          }
-        }
-        // viewer.getTable()
-        if (expressionJavaInfo instanceof IWrapperInfo) {
-          IWrapperInfo wrapperInfo = (IWrapperInfo) expressionJavaInfo;
-          IWrapper wrapper = wrapperInfo.getWrapper();
-          JavaInfo javaInfo = wrapper.getWrappedInfo();
-          if (wrapper.isWrappedInfo(invocation)) {
-            ExecutionFlowUtils2.ensurePermanentValue(expression).setModel(javaInfo);
-            javaInfo.addRelatedNode(expression);
-            return javaInfo;
-          }
-        }
-      }
-      return null;
-    }
-    // m_exposedField
-    if (expression instanceof SimpleName) {
-      SimpleName simpleName = (SimpleName) expression;
-      JavaInfo thisJavaInfo = getJavaInfo(null);
-      String fieldName = simpleName.getIdentifier();
-      return getExposedJavaInfo(thisJavaInfo, expression, fieldName);
-    }
-    // someJavaInfo.m_exposedField
-    if (expression instanceof QualifiedName) {
-      QualifiedName qualifiedName = (QualifiedName) expression;
-      JavaInfo hostJavaInfo = getJavaInfo(qualifiedName.getQualifier());
-      String fieldName = qualifiedName.getName().getIdentifier();
-      return getExposedJavaInfo(hostJavaInfo, expression, fieldName);
-    }
-    // no
-    return null;
-  }
+	private JavaInfo getJavaInfo0(Expression expression) throws Exception {
+		// check for nodes that can not be JavaInfo
+		if (expression instanceof NullLiteral
+				|| expression instanceof BooleanLiteral
+				|| expression instanceof NumberLiteral
+				|| expression instanceof StringLiteral
+				|| expression instanceof TypeLiteral
+				|| expression instanceof Assignment
+				|| expression instanceof ArrayCreation
+				|| expression instanceof ArrayInitializer) {
+			return null;
+		}
+		// "null" or "this"
+		if (expression == null || expression instanceof ThisExpression) {
+			if (!m_thisJavaInfoReady) {
+				m_thisJavaInfoReady = true;
+				for (JavaInfo component : getComponents()) {
+					if (component.getCreationSupport() instanceof ThisCreationSupport) {
+						m_thisJavaInfo = component;
+						break;
+					}
+				}
+			}
+			if (m_thisJavaInfo != null) {
+				m_thisJavaInfo.addRelatedNode(expression);
+			}
+			return m_thisJavaInfo;
+		}
+		// try to find tracked value
+		{
+			ExecutionFlowDescription flowDescription = m_editorState.getFlowDescription();
+			ExpressionValue value = ExecutionFlowUtils2.getValue(flowDescription, expression);
+			if (value != null) {
+				// may be bound JavaInfo creation/access
+				JavaInfo javaInfo = (JavaInfo) value.getModel();
+				if (javaInfo != null) {
+					boolean expressionPartOfCasted =
+							javaInfo.getCreationSupport() instanceof CastedSuperInvocationCreationSupport
+							&& expression.getLocationInParent() == CastExpression.EXPRESSION_PROPERTY;
+					if (!expressionPartOfCasted) {
+						javaInfo.addRelatedNode(expression);
+					}
+					return javaInfo;
+				}
+				// resolve "this"
+				{
+					Expression newExpression = value.getExpression();
+					if (newExpression instanceof ThisExpression && newExpression != expression) {
+						return getJavaInfo0(newExpression);
+					}
+				}
+			}
+		}
+		// XXX special support for RCP FormToolkit
+		if (AstNodeUtils.isSuccessorOf(expression, "org.eclipse.ui.forms.widgets.FormToolkit")) {
+			for (JavaInfo component : getComponents()) {
+				if (component instanceof InstanceFactoryInfo) {
+					if (component.getCreationSupport().isJavaInfo(expression)) {
+						ExecutionFlowUtils2.ensurePermanentValue(expression).setModel(component);
+						component.addRelatedNode(expression);
+						return component;
+					}
+				}
+			}
+		}
+		// invocation
+		if (expression instanceof MethodInvocation) {
+			MethodInvocation invocation = (MethodInvocation) expression;
+			String invName = invocation.getName().getIdentifier();
+			// XXX special support for GWT RootPanel
+			if (invName.equals("get")
+					&& AstNodeUtils.isSuccessorOf(invocation, "com.google.gwt.user.client.ui.RootPanel")) {
+				for (JavaInfo component : getComponents()) {
+					if (component.getCreationSupport().isJavaInfo(invocation)) {
+						ExecutionFlowUtils2.ensurePermanentValue(expression).setModel(component);
+						component.addRelatedNode(expression);
+						return component;
+					}
+				}
+			}
+			// generic get()
+			if (invName.startsWith("get")) {
+				JavaInfo expressionJavaInfo = getJavaInfo(invocation.getExpression());
+				// getContentPane()
+				{
+					JavaInfo result = getExposedJavaInfo(expressionJavaInfo, invocation);
+					if (result != null) {
+						return result;
+					}
+				}
+				// viewer.getTable()
+				if (expressionJavaInfo instanceof IWrapperInfo) {
+					IWrapperInfo wrapperInfo = (IWrapperInfo) expressionJavaInfo;
+					IWrapper wrapper = wrapperInfo.getWrapper();
+					JavaInfo javaInfo = wrapper.getWrappedInfo();
+					if (wrapper.isWrappedInfo(invocation)) {
+						ExecutionFlowUtils2.ensurePermanentValue(expression).setModel(javaInfo);
+						javaInfo.addRelatedNode(expression);
+						return javaInfo;
+					}
+				}
+			}
+			return null;
+		}
+		// m_exposedField
+		if (expression instanceof SimpleName) {
+			SimpleName simpleName = (SimpleName) expression;
+			JavaInfo thisJavaInfo = getJavaInfo(null);
+			String fieldName = simpleName.getIdentifier();
+			return getExposedJavaInfo(thisJavaInfo, expression, fieldName);
+		}
+		// someJavaInfo.m_exposedField
+		if (expression instanceof QualifiedName) {
+			QualifiedName qualifiedName = (QualifiedName) expression;
+			JavaInfo hostJavaInfo = getJavaInfo(qualifiedName.getQualifier());
+			String fieldName = qualifiedName.getName().getIdentifier();
+			return getExposedJavaInfo(hostJavaInfo, expression, fieldName);
+		}
+		// no
+		return null;
+	}
 
-  /**
-   * @return the {@link JavaInfo} which is child of "parent" and exposed by given
-   *         {@link MethodInvocation}.
-   */
-  private JavaInfo getExposedJavaInfo(JavaInfo parent, MethodInvocation invocation) {
-    if (parent == null) {
-      return null;
-    }
-    // direct child
-    for (JavaInfo child : parent.getChildrenJava()) {
-      CreationSupport childCreationSupport = child.getCreationSupport();
-      if (childCreationSupport instanceof IImplicitCreationSupport) {
-        if (childCreationSupport.isJavaInfo(invocation)) {
-          ExecutionFlowUtils2.ensurePermanentValue(invocation).setModel(child);
-          child.addRelatedNode(invocation);
-          return child;
-        }
-      }
-    }
-    // logical child
-    for (JavaInfo child : parent.getChildrenJava()) {
-      CreationSupport childCreationSupport = child.getCreationSupport();
-      if (childCreationSupport instanceof IImplicitCreationSupport) {
-        JavaInfo result = getExposedJavaInfo(child, invocation);
-        if (result != null) {
-          return result;
-        }
-      }
-    }
-    // wrapped child
-    for (JavaInfo child : parent.getChildrenJava()) {
-      CreationSupport childCreationSupport = child.getCreationSupport();
-      if (childCreationSupport instanceof WrapperMethodControlCreationSupport) {
-        JavaInfo result = getExposedJavaInfo(child, invocation);
-        if (result != null) {
-          return result;
-        }
-      }
-    }
-    // replaced exposed
-    {
-      String expectedSetName = "set" + invocation.getName().getIdentifier().substring(3);
-      for (MethodInvocation parentInvocation : parent.getMethodInvocations()) {
-        if (parentInvocation.arguments().size() == 1) {
-          String setName = parentInvocation.getName().getIdentifier();
-          if (setName.equals(expectedSetName)) {
-            Expression setExpression = DomGenerics.arguments(parentInvocation).get(0);
-            JavaInfo result = getJavaInfo(setExpression);
-            if (result != null) {
-              ExecutionFlowUtils2.ensurePermanentValue(invocation).setModel(result);
-              result.addRelatedNode(invocation);
-              return result;
-            }
-          }
-        }
-      }
-    }
-    // not found
-    return null;
-  }
+	/**
+	 * @return the {@link JavaInfo} which is child of "parent" and exposed by given
+	 *         {@link MethodInvocation}.
+	 */
+	private JavaInfo getExposedJavaInfo(JavaInfo parent, MethodInvocation invocation) {
+		if (parent == null) {
+			return null;
+		}
+		// direct child
+		for (JavaInfo child : parent.getChildrenJava()) {
+			CreationSupport childCreationSupport = child.getCreationSupport();
+			if (childCreationSupport instanceof IImplicitCreationSupport) {
+				if (childCreationSupport.isJavaInfo(invocation)) {
+					ExecutionFlowUtils2.ensurePermanentValue(invocation).setModel(child);
+					child.addRelatedNode(invocation);
+					return child;
+				}
+			}
+		}
+		// logical child
+		for (JavaInfo child : parent.getChildrenJava()) {
+			CreationSupport childCreationSupport = child.getCreationSupport();
+			if (childCreationSupport instanceof IImplicitCreationSupport) {
+				JavaInfo result = getExposedJavaInfo(child, invocation);
+				if (result != null) {
+					return result;
+				}
+			}
+		}
+		// wrapped child
+		for (JavaInfo child : parent.getChildrenJava()) {
+			CreationSupport childCreationSupport = child.getCreationSupport();
+			if (childCreationSupport instanceof WrapperMethodControlCreationSupport) {
+				JavaInfo result = getExposedJavaInfo(child, invocation);
+				if (result != null) {
+					return result;
+				}
+			}
+		}
+		// replaced exposed
+		{
+			String expectedSetName = "set" + invocation.getName().getIdentifier().substring(3);
+			for (MethodInvocation parentInvocation : parent.getMethodInvocations()) {
+				if (parentInvocation.arguments().size() == 1) {
+					String setName = parentInvocation.getName().getIdentifier();
+					if (setName.equals(expectedSetName)) {
+						Expression setExpression = DomGenerics.arguments(parentInvocation).get(0);
+						JavaInfo result = getJavaInfo(setExpression);
+						if (result != null) {
+							ExecutionFlowUtils2.ensurePermanentValue(invocation).setModel(result);
+							result.addRelatedNode(invocation);
+							return result;
+						}
+					}
+				}
+			}
+		}
+		// not found
+		return null;
+	}
 
-  /**
-   * @return the {@link JavaInfo} which is child of "parent" and exposed by given
-   *         {@link MethodInvocation}.
-   */
-  private JavaInfo getExposedJavaInfo(JavaInfo parent, Expression expression, String fieldName) {
-    if (parent == null) {
-      return null;
-    }
-    // direct child
-    for (JavaInfo child : parent.getChildrenJava()) {
-      if (child.getCreationSupport() instanceof ExposedFieldCreationSupport) {
-        ExposedFieldCreationSupport cs = (ExposedFieldCreationSupport) child.getCreationSupport();
-        if (cs.getField().getName().equals(fieldName)) {
-          child.addRelatedNode(expression);
-          return child;
-        }
-      }
-    }
-    // logical child
-    for (JavaInfo child : parent.getChildrenJava()) {
-      CreationSupport childCreationSupport = child.getCreationSupport();
-      if (childCreationSupport instanceof IImplicitCreationSupport) {
-        JavaInfo result = getExposedJavaInfo(child, expression, fieldName);
-        if (result != null) {
-          return result;
-        }
-      }
-    }
-    // not found
-    return null;
-  }
+	/**
+	 * @return the {@link JavaInfo} which is child of "parent" and exposed by given
+	 *         {@link MethodInvocation}.
+	 */
+	private JavaInfo getExposedJavaInfo(JavaInfo parent, Expression expression, String fieldName) {
+		if (parent == null) {
+			return null;
+		}
+		// direct child
+		for (JavaInfo child : parent.getChildrenJava()) {
+			if (child.getCreationSupport() instanceof ExposedFieldCreationSupport) {
+				ExposedFieldCreationSupport cs = (ExposedFieldCreationSupport) child.getCreationSupport();
+				if (cs.getField().getName().equals(fieldName)) {
+					child.addRelatedNode(expression);
+					return child;
+				}
+			}
+		}
+		// logical child
+		for (JavaInfo child : parent.getChildrenJava()) {
+			CreationSupport childCreationSupport = child.getCreationSupport();
+			if (childCreationSupport instanceof IImplicitCreationSupport) {
+				JavaInfo result = getExposedJavaInfo(child, expression, fieldName);
+				if (result != null) {
+					return result;
+				}
+			}
+		}
+		// not found
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final String KEY_COMPONENTS_STAMP = "JavaInfoResolver.components.stamp";
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final String KEY_COMPONENTS_STAMP = "JavaInfoResolver.components.stamp";
 
-  /**
-   * @return the actual {@link JavaInfo} list, updates {@link #m_components} if AST was changed.
-   */
-  public List<JavaInfo> getComponents() throws Exception {
-    if (m_rootJavaInfo == null) {
-      return m_components;
-    }
-    // refresh m_components if needed
-    Long stampComponents = (Long) m_unit.getProperty(KEY_COMPONENTS_STAMP);
-    long stampAST = m_unit.getAST().modificationCount();
-    if (stampComponents == null || stampAST != stampComponents.longValue()) {
-      m_components.clear();
-      m_rootJavaInfo.accept0(new ObjectInfoVisitor() {
-        @Override
-        public void endVisit(ObjectInfo objectInfo) throws Exception {
-          if (objectInfo instanceof JavaInfo) {
-            JavaInfo javaInfo = (JavaInfo) objectInfo;
-            if (!isExplicitJavaInfo(javaInfo)) {
-              return;
-            }
-            m_components.add(javaInfo);
-          }
-        }
+	/**
+	 * @return the actual {@link JavaInfo} list, updates {@link #m_components} if AST was changed.
+	 */
+	public List<JavaInfo> getComponents() throws Exception {
+		if (m_rootJavaInfo == null) {
+			return m_components;
+		}
+		// refresh m_components if needed
+		Long stampComponents = (Long) m_unit.getProperty(KEY_COMPONENTS_STAMP);
+		long stampAST = m_unit.getAST().modificationCount();
+		if (stampComponents == null || stampAST != stampComponents.longValue()) {
+			m_components.clear();
+			m_rootJavaInfo.accept0(new ObjectInfoVisitor() {
+				@Override
+				public void endVisit(ObjectInfo objectInfo) throws Exception {
+					if (objectInfo instanceof JavaInfo) {
+						JavaInfo javaInfo = (JavaInfo) objectInfo;
+						if (!isExplicitJavaInfo(javaInfo)) {
+							return;
+						}
+						m_components.add(javaInfo);
+					}
+				}
 
-        private boolean isExplicitJavaInfo(JavaInfo javaInfo) {
-          CreationSupport creationSupport = javaInfo.getCreationSupport();
-          if (creationSupport instanceof IImplicitCreationSupport) {
-            return false;
-          }
-          return true;
-        }
-      });
-      m_unit.setProperty(KEY_COMPONENTS_STAMP, stampAST);
-    }
-    // done
-    return m_components;
-  }
+				private boolean isExplicitJavaInfo(JavaInfo javaInfo) {
+					CreationSupport creationSupport = javaInfo.getCreationSupport();
+					if (creationSupport instanceof IImplicitCreationSupport) {
+						return false;
+					}
+					return true;
+				}
+			});
+			m_unit.setProperty(KEY_COMPONENTS_STAMP, stampAST);
+		}
+		// done
+		return m_components;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/parser/ParseFactoryNoModel.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/parser/ParseFactoryNoModel.java
index a6fcdf129..8e0f707b8 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/parser/ParseFactoryNoModel.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/parser/ParseFactoryNoModel.java
@@ -26,17 +26,17 @@
  * @coverage core.model.parser
  */
 public abstract class ParseFactoryNoModel {
-  /**
-   * @return <code>true</code> if given {@link ASTNode} is not {@link JavaInfo}.
-   */
-  public boolean noModel(ASTNode node) {
-    return false;
-  }
+	/**
+	 * @return <code>true</code> if given {@link ASTNode} is not {@link JavaInfo}.
+	 */
+	public boolean noModel(ASTNode node) {
+		return false;
+	}
 
-  /**
-   * @return <code>true</code> if given {@link ClassInstanceCreation} is not {@link JavaInfo}.
-   */
-  public boolean noModel(ClassInstanceCreation creation, ITypeBinding typeBinding) {
-    return false;
-  }
+	/**
+	 * @return <code>true</code> if given {@link ClassInstanceCreation} is not {@link JavaInfo}.
+	 */
+	public boolean noModel(ClassInstanceCreation creation, ITypeBinding typeBinding) {
+		return false;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/parser/ParseFactoryNoModelJava.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/parser/ParseFactoryNoModelJava.java
index a0248d9b6..1cf6ac134 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/parser/ParseFactoryNoModelJava.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/parser/ParseFactoryNoModelJava.java
@@ -22,25 +22,25 @@
  * @coverage core.model.parser
  */
 public final class ParseFactoryNoModelJava extends ParseFactoryNoModel {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ParseFactory_noModel
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean noModel(ClassInstanceCreation creation, ITypeBinding typeBinding) {
-    // classes from standard packages
-    String typeName = AstNodeUtils.getFullyQualifiedName(typeBinding, false);
-    if (typeName.startsWith("java.lang.") || typeName.startsWith("java.util.")) {
-      return true;
-    }
-    // anonymous listener
-    if (creation.getAnonymousClassDeclaration() != null
-        && AstNodeUtils.isSuccessorOf(typeBinding, "java.util.EventListener")) {
-      boolean isPureInterface = typeBinding.getSuperclass().getSuperclass() == null;
-      return isPureInterface;
-    }
-    // something different
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ParseFactory_noModel
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean noModel(ClassInstanceCreation creation, ITypeBinding typeBinding) {
+		// classes from standard packages
+		String typeName = AstNodeUtils.getFullyQualifiedName(typeBinding, false);
+		if (typeName.startsWith("java.lang.") || typeName.startsWith("java.util.")) {
+			return true;
+		}
+		// anonymous listener
+		if (creation.getAnonymousClassDeclaration() != null
+				&& AstNodeUtils.isSuccessorOf(typeBinding, "java.util.EventListener")) {
+			boolean isPureInterface = typeBinding.getSuperclass().getSuperclass() == null;
+			return isPureInterface;
+		}
+		// something different
+		return false;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/parser/ParseRootContext.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/parser/ParseRootContext.java
index 42c2a9c7e..40dadfc07 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/parser/ParseRootContext.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/parser/ParseRootContext.java
@@ -20,35 +20,35 @@
  * @coverage core.model.parser
  */
 public final class ParseRootContext {
-  private final JavaInfo m_root;
-  private final ExecutionFlowDescription m_flowDescription;
+	private final JavaInfo m_root;
+	private final ExecutionFlowDescription m_flowDescription;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ParseRootContext(JavaInfo root, ExecutionFlowDescription flowDescription) {
-    m_root = root;
-    m_flowDescription = flowDescription;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ParseRootContext(JavaInfo root, ExecutionFlowDescription flowDescription) {
+		m_root = root;
+		m_flowDescription = flowDescription;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the root {@link JavaInfo}.
-   */
-  public JavaInfo getRoot() {
-    return m_root;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the root {@link JavaInfo}.
+	 */
+	public JavaInfo getRoot() {
+		return m_root;
+	}
 
-  /**
-   * @return the {@link ExecutionFlowDescription} from which parsing should be started.
-   */
-  public ExecutionFlowDescription getFlowDescription() {
-    return m_flowDescription;
-  }
+	/**
+	 * @return the {@link ExecutionFlowDescription} from which parsing should be started.
+	 */
+	public ExecutionFlowDescription getFlowDescription() {
+		return m_flowDescription;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/preferences/IPreferenceConstants.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/preferences/IPreferenceConstants.java
index 6a5bc03aa..7d3f8931e 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/preferences/IPreferenceConstants.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/preferences/IPreferenceConstants.java
@@ -24,283 +24,283 @@
  * @coverage core.preferences
  */
 public interface IPreferenceConstants {
-  String TOOLKIT_ID = "org.eclipse.wb.core";
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Common
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * When <code>true</code>, we should add {@link ComponentEntryInfo} for any component chosen using
-   * {@link ChooseComponentEntryInfo}.
-   */
-  String P_COMMON_PALETTE_ADD_CHOSEN = "common.addChosenComponentsToPalette";
-  /**
-   * When <code>true</code>, we should accept drop <i>non-visual beans</i> to design canvas.
-   */
-  String P_COMMON_ACCEPT_NON_VISUAL_BEANS = "common.acceptNonVisualBeans";
-  /**
-   * When <code>true</code>, we can show debug information on console.
-   */
-  String P_COMMON_SHOW_DEBUG_INFO = "common.showDebugInfo";
-  /**
-   * When <code>true</code>, we should show warning if version of Eclipse does not corresponds to
-   * the version of Designer.
-   */
-  String P_COMMON_SHOW_VERSION_WARNING = "common.showVersionWarning";
-  /**
-   * Linux only. Troubleshooting option. When enabled, all of the flickering prevention tricks we do
-   * would be disabled.
-   */
-  String P_COMMON_LINUX_DISABLE_SCREENSHOT_WORKAROUNDS =
-      "common.linux.disableScreenshotWorkarounds";
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // General
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * When <code>true</code>, we should highlight containers without borders.
-   */
-  String P_GENERAL_HIGHLIGHT_CONTAINERS = "general.highlightContainersWithoutBorders";
-  /**
-   * When <code>true</code>, we should add "text" property value as suffix for presentation text.
-   */
-  String P_GENERAL_TEXT_SUFFIX = "general.showTextPropertySuffix";
-  /**
-   * When <code>true</code>, we should show property table with important properties after adding
-   * new component.
-   */
-  String P_GENERAL_IMPORTANT_PROPERTIES_AFTER_ADD = "general.importantPropertiesAfterAdd";
-  /**
-   * When <code>true</code>, we automatically activate direct edit after adding new component.
-   */
-  String P_GENERAL_DIRECT_EDIT_AFTER_ADD = "general.directEditAfterAdd";
-  /**
-   * The default width for top level component.
-   */
-  String P_GENERAL_DEFAULT_TOP_WIDTH = "general.topBoundsDefaultWidth";
-  /**
-   * The default height for top level component.
-   */
-  String P_GENERAL_DEFAULT_TOP_HEIGHT = "general.topBoundsDefaultHeight";
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editor layout
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Style of editor layout.
-   */
-  String P_EDITOR_LAYOUT = "editor.layout";
-  /**
-   * Pages mode, "Source" first.
-   */
-  int V_EDITOR_LAYOUT_PAGES_SOURCE = 0;
-  /**
-   * Pages mode, "Design" first.
-   */
-  int V_EDITOR_LAYOUT_PAGES_DESIGN = 1;
-  /**
-   * Split mode, above each other, "Design" first.
-   */
-  int V_EDITOR_LAYOUT_SPLIT_VERTICAL_DESIGN = 2;
-  /**
-   * Split mode, side by side, "Design" first.
-   */
-  int V_EDITOR_LAYOUT_SPLIT_HORIZONTAL_DESIGN = 3;
-  /**
-   * Split mode, above each other, "Source" first.
-   */
-  int V_EDITOR_LAYOUT_SPLIT_VERTICAL_SOURCE = 4;
-  /**
-   * Split mode, side by side, "Source" first.
-   */
-  int V_EDITOR_LAYOUT_SPLIT_HORIZONTAL_SOURCE = 5;
-  /**
-   * Delay (in milliseconds) to refresh design canvas on source change in split mode.
-   */
-  String P_EDITOR_LAYOUT_SYNC_DELAY = "editor.layout.syncDelay";
-  /**
-   * When <code>true</code>, Designer will try to determine if Java file contains GUI source code.
-   */
-  String P_EDITOR_RECOGNIZE_GUI = "editor.recognizeSourceGUI";
-  /**
-   * When <code>true</code>, editor should be maximized when switch to "Design" page.
-   */
-  String P_EDITOR_MAX_DESIGN = "editor.maximizeOnDesignPage";
-  /**
-   * When <code>true</code>, source code should be formatted on editor save.
-   */
-  String P_EDITOR_FORMAT_ON_SAVE = "editor.formatOnSave";
-  /**
-   * When <code>true</code>, automatically go to the component definition in source on component
-   * selection.
-   */
-  String P_EDITOR_GOTO_DEFINITION_ON_SELECTION = "editor.gotoComponentDefinitionOnSelection";
-  /**
-   * Action to be performed by double-clicking on widget in widget tree.
-   */
-  String P_EDITOR_TREE_DBL_CLICK_ACTION = "editor.dblClickOnWidgetInTreeAction";
-  /**
-   * Option of action to be performed by double-clicking on widget in widget tree. Open editor for
-   * selected widget at line of widget creation.
-   */
-  int V_EDITOR_TREE_OPEN_WIDGET_IN_EDITOR = 0;
-  /**
-   * Option of action to be performed by double-clicking on widget in widget tree. Creates
-   * selection/action listener for selected widget if applicable.
-   */
-  int V_EDITOR_TREE_CREATE_LISTENER = 1;
-  /**
-   * Option of action to be performed by double-clicking on widget in widget tree. Initiate variable
-   * rename of widget.
-   */
-  int V_EDITOR_TREE_INITIATE_RENAME = 2;
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Highlight visited lines
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * When <code>true</code>, editor will highlight visited/executed lines.
-   */
-  String P_HIGHLIGHT_VISITED = "editor.highlightVisitedLines";
-  /**
-   * The {@link Color} for highlighting visited/executed lines.
-   */
-  String P_HIGHLIGHT_VISITED_COLOR = "editor.highlightVisitedLines.color";
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code parsing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Comment that begins hidden/ignored code block.
-   */
-  String P_CODE_HIDE_BEGIN = "hiddenCode.begin";
-  /**
-   * Comment that ends hidden/ignored code block.
-   */
-  String P_CODE_HIDE_END = "hiddenCode.end";
-  /**
-   * Comment that specifies that this line of code should be ignored.
-   */
-  String P_CODE_HIDE_LINE = "hiddenCode.singleLine";
-  /**
-   * Strict evaluation mode - if some required parameter is missing, exceptions will be shown. If
-   * not strict, then we will silently use default value.
-   */
-  String P_CODE_STRICT_EVALUATE = "evaluation.strictMode";
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Variables: auto rename
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * The mode that describes how variable should be renamed on "text" property change.
-   */
-  String P_VARIABLE_TEXT_MODE = "textVariable.mode";
-  /**
-   * Always rename variable on "text" property change.
-   */
-  int V_VARIABLE_TEXT_MODE_ALWAYS = 0;
-  /**
-   * Rename variable on "text" property change only if variable has default name.
-   */
-  int V_VARIABLE_TEXT_MODE_DEFAULT = 1;
-  /**
-   * Never rename variable on "text" property change.
-   */
-  int V_VARIABLE_TEXT_MODE_NEVER = 2;
-  /**
-   * The the template for variable name on "text" property change.
-   */
-  String P_VARIABLE_TEXT_TEMPLATE = "textVariable.template";
-  /**
-   * The maximal count of words from "text" property that should be used in template.
-   */
-  String P_VARIABLE_TEXT_WORDS_LIMIT = "textVariable.wordsLimit";
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Variables: type specific
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * The id of preferences for type specific variables information.
-   */
-  String P_VARIABLE_TYPE_SPECIFIC = "typeSpecificVariable.store";
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Variables: mark component
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * If this preference is <code>true</code>, variable name should be placed in component, in GUI
-   * toolkit specific way, if supported at all.
-   */
-  String P_VARIABLE_IN_COMPONENT = "putNameIntoComponent";
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // NLS
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * When <code>true</code> and there are existing {@link AbstractSource}, then when we set value
-   * for {@link String} property, it should be automatically externalized.
-   */
-  String P_NLS_AUTO_EXTERNALIZE = "nls.automaticallyExternalize";
-  /**
-   * When <code>true</code>, then the string's value should be used ONLY for generating a key,
-   * ignoring any other set format on it.
-   */
-  String P_NLS_KEY_AS_STRING_VALUE_ONLY = "nls.useStringValueForKeyOnly";
-  /**
-   * When <code>true</code>, then qualified type name should be used for generating key.
-   */
-  String P_NLS_KEY_QUALIFIED_TYPE_NAME = "nls.useQualifiedTypeNameForKey";
-  /**
-   * When <code>true</code>, then the string's value should be appended in the end of the key.
-   */
-  String P_NLS_KEY_HAS_STRING_VALUE = "nls.useStringValueForKey";
-  /**
-   * Use can enter into property value with this prefix, this should mean that NLS key from some
-   * source should be used instead.
-   */
-  String P_NLS_KEY_AS_VALUE_PREFIX = "nls.prefixOfPropertyValueToSpecifyThatItIsKey";
-  /**
-   * When <code>true</code>, then changes of variable name will cause rename of NLS keys which have
-   * this name inside.
-   */
-  String P_NLS_KEY_RENAME_WITH_VARIABLE = "nls.renameKeysWithVariables";
-  /**
-   * Comma separated list of locale names, such as "en, de, ru_RU", which should be always displayed
-   * in NLS drop-down.
-   */
-  String P_NLS_ALWAYS_VISIBLE_LOCALES = "nls.alwaysVisibleLocales";
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Layouts
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * The id of default {@link LayoutDescription}.
-   */
-  String P_LAYOUT_DEFAULT = "layout.default";
-  /**
-   * If this preference is <code>true</code>, newly dropped container (if it supports layout) will
-   * use layout manager of its parent.
-   */
-  String P_LAYOUT_OF_PARENT = "layout.inheritLayoutOfParent";
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Style
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * When <code>true</code>, we use separate sub-menu for each sub-property (select, enum, macro).
-   * When <code>false</code>, we generate plain "Style" menu with separators between sub-property
-   * items.
-   */
-  String P_STYLE_PROPERTY_CASCADE_POPUP = "styleProperty.cascadePopup";
+	String TOOLKIT_ID = "org.eclipse.wb.core";
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Common
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * When <code>true</code>, we should add {@link ComponentEntryInfo} for any component chosen using
+	 * {@link ChooseComponentEntryInfo}.
+	 */
+	String P_COMMON_PALETTE_ADD_CHOSEN = "common.addChosenComponentsToPalette";
+	/**
+	 * When <code>true</code>, we should accept drop <i>non-visual beans</i> to design canvas.
+	 */
+	String P_COMMON_ACCEPT_NON_VISUAL_BEANS = "common.acceptNonVisualBeans";
+	/**
+	 * When <code>true</code>, we can show debug information on console.
+	 */
+	String P_COMMON_SHOW_DEBUG_INFO = "common.showDebugInfo";
+	/**
+	 * When <code>true</code>, we should show warning if version of Eclipse does not corresponds to
+	 * the version of Designer.
+	 */
+	String P_COMMON_SHOW_VERSION_WARNING = "common.showVersionWarning";
+	/**
+	 * Linux only. Troubleshooting option. When enabled, all of the flickering prevention tricks we do
+	 * would be disabled.
+	 */
+	String P_COMMON_LINUX_DISABLE_SCREENSHOT_WORKAROUNDS =
+			"common.linux.disableScreenshotWorkarounds";
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// General
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * When <code>true</code>, we should highlight containers without borders.
+	 */
+	String P_GENERAL_HIGHLIGHT_CONTAINERS = "general.highlightContainersWithoutBorders";
+	/**
+	 * When <code>true</code>, we should add "text" property value as suffix for presentation text.
+	 */
+	String P_GENERAL_TEXT_SUFFIX = "general.showTextPropertySuffix";
+	/**
+	 * When <code>true</code>, we should show property table with important properties after adding
+	 * new component.
+	 */
+	String P_GENERAL_IMPORTANT_PROPERTIES_AFTER_ADD = "general.importantPropertiesAfterAdd";
+	/**
+	 * When <code>true</code>, we automatically activate direct edit after adding new component.
+	 */
+	String P_GENERAL_DIRECT_EDIT_AFTER_ADD = "general.directEditAfterAdd";
+	/**
+	 * The default width for top level component.
+	 */
+	String P_GENERAL_DEFAULT_TOP_WIDTH = "general.topBoundsDefaultWidth";
+	/**
+	 * The default height for top level component.
+	 */
+	String P_GENERAL_DEFAULT_TOP_HEIGHT = "general.topBoundsDefaultHeight";
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editor layout
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Style of editor layout.
+	 */
+	String P_EDITOR_LAYOUT = "editor.layout";
+	/**
+	 * Pages mode, "Source" first.
+	 */
+	int V_EDITOR_LAYOUT_PAGES_SOURCE = 0;
+	/**
+	 * Pages mode, "Design" first.
+	 */
+	int V_EDITOR_LAYOUT_PAGES_DESIGN = 1;
+	/**
+	 * Split mode, above each other, "Design" first.
+	 */
+	int V_EDITOR_LAYOUT_SPLIT_VERTICAL_DESIGN = 2;
+	/**
+	 * Split mode, side by side, "Design" first.
+	 */
+	int V_EDITOR_LAYOUT_SPLIT_HORIZONTAL_DESIGN = 3;
+	/**
+	 * Split mode, above each other, "Source" first.
+	 */
+	int V_EDITOR_LAYOUT_SPLIT_VERTICAL_SOURCE = 4;
+	/**
+	 * Split mode, side by side, "Source" first.
+	 */
+	int V_EDITOR_LAYOUT_SPLIT_HORIZONTAL_SOURCE = 5;
+	/**
+	 * Delay (in milliseconds) to refresh design canvas on source change in split mode.
+	 */
+	String P_EDITOR_LAYOUT_SYNC_DELAY = "editor.layout.syncDelay";
+	/**
+	 * When <code>true</code>, Designer will try to determine if Java file contains GUI source code.
+	 */
+	String P_EDITOR_RECOGNIZE_GUI = "editor.recognizeSourceGUI";
+	/**
+	 * When <code>true</code>, editor should be maximized when switch to "Design" page.
+	 */
+	String P_EDITOR_MAX_DESIGN = "editor.maximizeOnDesignPage";
+	/**
+	 * When <code>true</code>, source code should be formatted on editor save.
+	 */
+	String P_EDITOR_FORMAT_ON_SAVE = "editor.formatOnSave";
+	/**
+	 * When <code>true</code>, automatically go to the component definition in source on component
+	 * selection.
+	 */
+	String P_EDITOR_GOTO_DEFINITION_ON_SELECTION = "editor.gotoComponentDefinitionOnSelection";
+	/**
+	 * Action to be performed by double-clicking on widget in widget tree.
+	 */
+	String P_EDITOR_TREE_DBL_CLICK_ACTION = "editor.dblClickOnWidgetInTreeAction";
+	/**
+	 * Option of action to be performed by double-clicking on widget in widget tree. Open editor for
+	 * selected widget at line of widget creation.
+	 */
+	int V_EDITOR_TREE_OPEN_WIDGET_IN_EDITOR = 0;
+	/**
+	 * Option of action to be performed by double-clicking on widget in widget tree. Creates
+	 * selection/action listener for selected widget if applicable.
+	 */
+	int V_EDITOR_TREE_CREATE_LISTENER = 1;
+	/**
+	 * Option of action to be performed by double-clicking on widget in widget tree. Initiate variable
+	 * rename of widget.
+	 */
+	int V_EDITOR_TREE_INITIATE_RENAME = 2;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Highlight visited lines
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * When <code>true</code>, editor will highlight visited/executed lines.
+	 */
+	String P_HIGHLIGHT_VISITED = "editor.highlightVisitedLines";
+	/**
+	 * The {@link Color} for highlighting visited/executed lines.
+	 */
+	String P_HIGHLIGHT_VISITED_COLOR = "editor.highlightVisitedLines.color";
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code parsing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Comment that begins hidden/ignored code block.
+	 */
+	String P_CODE_HIDE_BEGIN = "hiddenCode.begin";
+	/**
+	 * Comment that ends hidden/ignored code block.
+	 */
+	String P_CODE_HIDE_END = "hiddenCode.end";
+	/**
+	 * Comment that specifies that this line of code should be ignored.
+	 */
+	String P_CODE_HIDE_LINE = "hiddenCode.singleLine";
+	/**
+	 * Strict evaluation mode - if some required parameter is missing, exceptions will be shown. If
+	 * not strict, then we will silently use default value.
+	 */
+	String P_CODE_STRICT_EVALUATE = "evaluation.strictMode";
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Variables: auto rename
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * The mode that describes how variable should be renamed on "text" property change.
+	 */
+	String P_VARIABLE_TEXT_MODE = "textVariable.mode";
+	/**
+	 * Always rename variable on "text" property change.
+	 */
+	int V_VARIABLE_TEXT_MODE_ALWAYS = 0;
+	/**
+	 * Rename variable on "text" property change only if variable has default name.
+	 */
+	int V_VARIABLE_TEXT_MODE_DEFAULT = 1;
+	/**
+	 * Never rename variable on "text" property change.
+	 */
+	int V_VARIABLE_TEXT_MODE_NEVER = 2;
+	/**
+	 * The the template for variable name on "text" property change.
+	 */
+	String P_VARIABLE_TEXT_TEMPLATE = "textVariable.template";
+	/**
+	 * The maximal count of words from "text" property that should be used in template.
+	 */
+	String P_VARIABLE_TEXT_WORDS_LIMIT = "textVariable.wordsLimit";
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Variables: type specific
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * The id of preferences for type specific variables information.
+	 */
+	String P_VARIABLE_TYPE_SPECIFIC = "typeSpecificVariable.store";
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Variables: mark component
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * If this preference is <code>true</code>, variable name should be placed in component, in GUI
+	 * toolkit specific way, if supported at all.
+	 */
+	String P_VARIABLE_IN_COMPONENT = "putNameIntoComponent";
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// NLS
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * When <code>true</code> and there are existing {@link AbstractSource}, then when we set value
+	 * for {@link String} property, it should be automatically externalized.
+	 */
+	String P_NLS_AUTO_EXTERNALIZE = "nls.automaticallyExternalize";
+	/**
+	 * When <code>true</code>, then the string's value should be used ONLY for generating a key,
+	 * ignoring any other set format on it.
+	 */
+	String P_NLS_KEY_AS_STRING_VALUE_ONLY = "nls.useStringValueForKeyOnly";
+	/**
+	 * When <code>true</code>, then qualified type name should be used for generating key.
+	 */
+	String P_NLS_KEY_QUALIFIED_TYPE_NAME = "nls.useQualifiedTypeNameForKey";
+	/**
+	 * When <code>true</code>, then the string's value should be appended in the end of the key.
+	 */
+	String P_NLS_KEY_HAS_STRING_VALUE = "nls.useStringValueForKey";
+	/**
+	 * Use can enter into property value with this prefix, this should mean that NLS key from some
+	 * source should be used instead.
+	 */
+	String P_NLS_KEY_AS_VALUE_PREFIX = "nls.prefixOfPropertyValueToSpecifyThatItIsKey";
+	/**
+	 * When <code>true</code>, then changes of variable name will cause rename of NLS keys which have
+	 * this name inside.
+	 */
+	String P_NLS_KEY_RENAME_WITH_VARIABLE = "nls.renameKeysWithVariables";
+	/**
+	 * Comma separated list of locale names, such as "en, de, ru_RU", which should be always displayed
+	 * in NLS drop-down.
+	 */
+	String P_NLS_ALWAYS_VISIBLE_LOCALES = "nls.alwaysVisibleLocales";
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Layouts
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * The id of default {@link LayoutDescription}.
+	 */
+	String P_LAYOUT_DEFAULT = "layout.default";
+	/**
+	 * If this preference is <code>true</code>, newly dropped container (if it supports layout) will
+	 * use layout manager of its parent.
+	 */
+	String P_LAYOUT_OF_PARENT = "layout.inheritLayoutOfParent";
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Style
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * When <code>true</code>, we use separate sub-menu for each sub-property (select, enum, macro).
+	 * When <code>false</code>, we generate plain "Style" menu with separators between sub-property
+	 * items.
+	 */
+	String P_STYLE_PROPERTY_CASCADE_POPUP = "styleProperty.cascadePopup";
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/preferences/Messages.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/preferences/Messages.java
index 6ccb3539a..b57bcd705 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/preferences/Messages.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/preferences/Messages.java
@@ -3,96 +3,96 @@
 import org.eclipse.osgi.util.NLS;
 
 public class Messages extends NLS {
-  private static final String BUNDLE_NAME = "org.eclipse.wb.internal.core.preferences.messages"; //$NON-NLS-1$
-  public static String CodeGenerationPreferencePage_deduceFlag;
-  public static String CodeGenerationPreferencePage_defaultGroup;
-  public static String CodeGenerationPreferencePage_descriptionLabel;
-  public static String CodeGenerationPreferencePage_forcedMethod;
-  public static String CodeGenerationPreferencePage_hintStatementSelectingTab;
-  public static String CodeGenerationPreferencePage_hintVariableSelectingTab;
-  public static String CodeGenerationPreferencePage_noPreviewMessage;
-  public static String CodeGenerationPreferencePage_previewLabel;
-  public static String CodeGenerationPreferencePage_statementLabel;
-  public static String CodeGenerationPreferencePage_variableLabel;
-  public static String EventsPreferencePage_decorateIconFlag;
-  public static String EventsPreferencePage_deleteStubsFlag;
-  public static String EventsPreferencePage_finalParametersFlag;
-  public static String EventsPreferencePage_innerPatternHint1;
-  public static String EventsPreferencePage_innerPatternHint10;
-  public static String EventsPreferencePage_innerPatternHint11;
-  public static String EventsPreferencePage_innerPatternHint12;
-  public static String EventsPreferencePage_innerPatternHint13;
-  public static String EventsPreferencePage_innerPatternHint14;
-  public static String EventsPreferencePage_innerPatternHint15;
-  public static String EventsPreferencePage_innerPatternHint2;
-  public static String EventsPreferencePage_innerPatternHint3;
-  public static String EventsPreferencePage_innerPatternHint4;
-  public static String EventsPreferencePage_innerPatternHint5;
-  public static String EventsPreferencePage_innerPatternHint6;
-  public static String EventsPreferencePage_innerPatternHint7;
-  public static String EventsPreferencePage_innerPatternHint8;
-  public static String EventsPreferencePage_innerPatternHint9;
-  public static String EventsPreferencePage_patternHint1;
-  public static String EventsPreferencePage_patternHint2;
-  public static String EventsPreferencePage_patternHint3;
-  public static String EventsPreferencePage_patternHint4;
-  public static String EventsPreferencePage_patternHint5;
-  public static String EventsPreferencePage_patternHint6;
-  public static String EventsPreferencePage_stubLabel;
-  public static String EventsPreferencePage_stubPatternHint1;
-  public static String EventsPreferencePage_stubPatternHint10;
-  public static String EventsPreferencePage_stubPatternHint11;
-  public static String EventsPreferencePage_stubPatternHint12;
-  public static String EventsPreferencePage_stubPatternHint2;
-  public static String EventsPreferencePage_stubPatternHint3;
-  public static String EventsPreferencePage_stubPatternHint4;
-  public static String EventsPreferencePage_stubPatternHint5;
-  public static String EventsPreferencePage_stubPatternHint6;
-  public static String EventsPreferencePage_stubPatternHint7;
-  public static String EventsPreferencePage_stubPatternHint8;
-  public static String EventsPreferencePage_stubPatternHint9;
-  public static String EventsPreferencePage_typeAnonymous;
-  public static String EventsPreferencePage_typeInner;
-  public static String EventsPreferencePage_typeInnerAfterLastListener;
-  public static String EventsPreferencePage_typeInnerBeforeFirstListener;
-  public static String EventsPreferencePage_typeInnerFirstInClass;
-  public static String EventsPreferencePage_typeInnerLastInClass;
-  public static String EventsPreferencePage_typeInterface;
-  public static String EventsPreferencePage_typeLabel;
-  public static String VariablesPreferencePage_arAlways;
-  public static String VariablesPreferencePage_arDefault;
-  public static String VariablesPreferencePage_arHint1;
-  public static String VariablesPreferencePage_arHint2;
-  public static String VariablesPreferencePage_arHint3;
-  public static String VariablesPreferencePage_arHint4;
-  public static String VariablesPreferencePage_arHint5;
-  public static String VariablesPreferencePage_arLabel;
-  public static String VariablesPreferencePage_arLimitWords1;
-  public static String VariablesPreferencePage_arLimitWords2;
-  public static String VariablesPreferencePage_arNever;
-  public static String VariablesPreferencePage_arPatternLabel;
-  public static String VariablesPreferencePage_autoRenameTab;
-  public static String VariablesPreferencePage_miscRememberName;
-  public static String VariablesPreferencePage_miscTab;
-  public static String VariablesPreferencePage_setErrorMessage;
-  public static String VariablesPreferencePage_setErrorTitle;
-  public static String VariablesPreferencePage_tsAcronymColumn;
-  public static String VariablesPreferencePage_tsAddButton;
-  public static String VariablesPreferencePage_tsAddMessage;
-  public static String VariablesPreferencePage_tsAddTitle;
-  public static String VariablesPreferencePage_tsAsFieldColumn;
-  public static String VariablesPreferencePage_tsClassColumn;
-  public static String VariablesPreferencePage_tsDefaultNameColumn;
-  public static String VariablesPreferencePage_tsRemove;
-  public static String VariablesPreferencePage_tsRemoveMessage;
-  public static String VariablesPreferencePage_tsRemoveTitle;
-  public static String VariablesPreferencePage_typeSpecificTab;
-  public static String VariablesPreferencePage_validateVariableNameTemplate;
-  static {
-    // initialize resource bundle
-    NLS.initializeMessages(BUNDLE_NAME, Messages.class);
-  }
+	private static final String BUNDLE_NAME = "org.eclipse.wb.internal.core.preferences.messages"; //$NON-NLS-1$
+	public static String CodeGenerationPreferencePage_deduceFlag;
+	public static String CodeGenerationPreferencePage_defaultGroup;
+	public static String CodeGenerationPreferencePage_descriptionLabel;
+	public static String CodeGenerationPreferencePage_forcedMethod;
+	public static String CodeGenerationPreferencePage_hintStatementSelectingTab;
+	public static String CodeGenerationPreferencePage_hintVariableSelectingTab;
+	public static String CodeGenerationPreferencePage_noPreviewMessage;
+	public static String CodeGenerationPreferencePage_previewLabel;
+	public static String CodeGenerationPreferencePage_statementLabel;
+	public static String CodeGenerationPreferencePage_variableLabel;
+	public static String EventsPreferencePage_decorateIconFlag;
+	public static String EventsPreferencePage_deleteStubsFlag;
+	public static String EventsPreferencePage_finalParametersFlag;
+	public static String EventsPreferencePage_innerPatternHint1;
+	public static String EventsPreferencePage_innerPatternHint10;
+	public static String EventsPreferencePage_innerPatternHint11;
+	public static String EventsPreferencePage_innerPatternHint12;
+	public static String EventsPreferencePage_innerPatternHint13;
+	public static String EventsPreferencePage_innerPatternHint14;
+	public static String EventsPreferencePage_innerPatternHint15;
+	public static String EventsPreferencePage_innerPatternHint2;
+	public static String EventsPreferencePage_innerPatternHint3;
+	public static String EventsPreferencePage_innerPatternHint4;
+	public static String EventsPreferencePage_innerPatternHint5;
+	public static String EventsPreferencePage_innerPatternHint6;
+	public static String EventsPreferencePage_innerPatternHint7;
+	public static String EventsPreferencePage_innerPatternHint8;
+	public static String EventsPreferencePage_innerPatternHint9;
+	public static String EventsPreferencePage_patternHint1;
+	public static String EventsPreferencePage_patternHint2;
+	public static String EventsPreferencePage_patternHint3;
+	public static String EventsPreferencePage_patternHint4;
+	public static String EventsPreferencePage_patternHint5;
+	public static String EventsPreferencePage_patternHint6;
+	public static String EventsPreferencePage_stubLabel;
+	public static String EventsPreferencePage_stubPatternHint1;
+	public static String EventsPreferencePage_stubPatternHint10;
+	public static String EventsPreferencePage_stubPatternHint11;
+	public static String EventsPreferencePage_stubPatternHint12;
+	public static String EventsPreferencePage_stubPatternHint2;
+	public static String EventsPreferencePage_stubPatternHint3;
+	public static String EventsPreferencePage_stubPatternHint4;
+	public static String EventsPreferencePage_stubPatternHint5;
+	public static String EventsPreferencePage_stubPatternHint6;
+	public static String EventsPreferencePage_stubPatternHint7;
+	public static String EventsPreferencePage_stubPatternHint8;
+	public static String EventsPreferencePage_stubPatternHint9;
+	public static String EventsPreferencePage_typeAnonymous;
+	public static String EventsPreferencePage_typeInner;
+	public static String EventsPreferencePage_typeInnerAfterLastListener;
+	public static String EventsPreferencePage_typeInnerBeforeFirstListener;
+	public static String EventsPreferencePage_typeInnerFirstInClass;
+	public static String EventsPreferencePage_typeInnerLastInClass;
+	public static String EventsPreferencePage_typeInterface;
+	public static String EventsPreferencePage_typeLabel;
+	public static String VariablesPreferencePage_arAlways;
+	public static String VariablesPreferencePage_arDefault;
+	public static String VariablesPreferencePage_arHint1;
+	public static String VariablesPreferencePage_arHint2;
+	public static String VariablesPreferencePage_arHint3;
+	public static String VariablesPreferencePage_arHint4;
+	public static String VariablesPreferencePage_arHint5;
+	public static String VariablesPreferencePage_arLabel;
+	public static String VariablesPreferencePage_arLimitWords1;
+	public static String VariablesPreferencePage_arLimitWords2;
+	public static String VariablesPreferencePage_arNever;
+	public static String VariablesPreferencePage_arPatternLabel;
+	public static String VariablesPreferencePage_autoRenameTab;
+	public static String VariablesPreferencePage_miscRememberName;
+	public static String VariablesPreferencePage_miscTab;
+	public static String VariablesPreferencePage_setErrorMessage;
+	public static String VariablesPreferencePage_setErrorTitle;
+	public static String VariablesPreferencePage_tsAcronymColumn;
+	public static String VariablesPreferencePage_tsAddButton;
+	public static String VariablesPreferencePage_tsAddMessage;
+	public static String VariablesPreferencePage_tsAddTitle;
+	public static String VariablesPreferencePage_tsAsFieldColumn;
+	public static String VariablesPreferencePage_tsClassColumn;
+	public static String VariablesPreferencePage_tsDefaultNameColumn;
+	public static String VariablesPreferencePage_tsRemove;
+	public static String VariablesPreferencePage_tsRemoveMessage;
+	public static String VariablesPreferencePage_tsRemoveTitle;
+	public static String VariablesPreferencePage_typeSpecificTab;
+	public static String VariablesPreferencePage_validateVariableNameTemplate;
+	static {
+		// initialize resource bundle
+		NLS.initializeMessages(BUNDLE_NAME, Messages.class);
+	}
 
-  private Messages() {
-  }
+	private Messages() {
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/preferences/PreferenceInitializer2.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/preferences/PreferenceInitializer2.java
index 9a6c507ed..08223f0fd 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/preferences/PreferenceInitializer2.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/preferences/PreferenceInitializer2.java
@@ -22,35 +22,35 @@
  * @coverage core.preferences
  */
 public final class PreferenceInitializer2 extends AbstractPreferenceInitializer
-    implements
-      IPreferenceConstants {
-  @Override
-  public void initializeDefaultPreferences() {
-    IPreferenceStore preferences = DesignerPlugin.getDefault().getPreferenceStore();
-    // common
-    preferences.setDefault(P_COMMON_PALETTE_ADD_CHOSEN, true);
-    preferences.setDefault(P_COMMON_ACCEPT_NON_VISUAL_BEANS, true);
-    preferences.setDefault(P_COMMON_SHOW_DEBUG_INFO, false);
-    preferences.setDefault(P_COMMON_SHOW_VERSION_WARNING, false);
-    // linux only
-    preferences.setDefault(P_COMMON_LINUX_DISABLE_SCREENSHOT_WORKAROUNDS, false);
-    // editor layout
-    preferences.setDefault(P_EDITOR_LAYOUT, V_EDITOR_LAYOUT_PAGES_SOURCE);
-    preferences.setDefault(P_EDITOR_LAYOUT_SYNC_DELAY, 1000);
-    // editor
-    preferences.setDefault(P_EDITOR_RECOGNIZE_GUI, false);
-    preferences.setDefault(P_EDITOR_MAX_DESIGN, false);
-    preferences.setDefault(P_EDITOR_FORMAT_ON_SAVE, false);
-    preferences.setDefault(P_EDITOR_GOTO_DEFINITION_ON_SELECTION, true);
-    preferences.setDefault(P_EDITOR_TREE_DBL_CLICK_ACTION, V_EDITOR_TREE_OPEN_WIDGET_IN_EDITOR);
-    // highlight visited/executed lines
-    preferences.setDefault(P_HIGHLIGHT_VISITED, false);
-    //PreferenceConverter.setDefault(preferences, P_HIGHLIGHT_VISITED_COLOR, new RGB(235, 255, 235));
-    preferences.setDefault(P_HIGHLIGHT_VISITED_COLOR, "235,255,235");
-    // code parsing
-    preferences.setDefault(P_CODE_HIDE_BEGIN, "$hide>>$");
-    preferences.setDefault(P_CODE_HIDE_END, "$hide<<$");
-    preferences.setDefault(P_CODE_HIDE_LINE, "$hide$");
-    preferences.setDefault(P_CODE_STRICT_EVALUATE, false);
-  }
+implements
+IPreferenceConstants {
+	@Override
+	public void initializeDefaultPreferences() {
+		IPreferenceStore preferences = DesignerPlugin.getDefault().getPreferenceStore();
+		// common
+		preferences.setDefault(P_COMMON_PALETTE_ADD_CHOSEN, true);
+		preferences.setDefault(P_COMMON_ACCEPT_NON_VISUAL_BEANS, true);
+		preferences.setDefault(P_COMMON_SHOW_DEBUG_INFO, false);
+		preferences.setDefault(P_COMMON_SHOW_VERSION_WARNING, false);
+		// linux only
+		preferences.setDefault(P_COMMON_LINUX_DISABLE_SCREENSHOT_WORKAROUNDS, false);
+		// editor layout
+		preferences.setDefault(P_EDITOR_LAYOUT, V_EDITOR_LAYOUT_PAGES_SOURCE);
+		preferences.setDefault(P_EDITOR_LAYOUT_SYNC_DELAY, 1000);
+		// editor
+		preferences.setDefault(P_EDITOR_RECOGNIZE_GUI, false);
+		preferences.setDefault(P_EDITOR_MAX_DESIGN, false);
+		preferences.setDefault(P_EDITOR_FORMAT_ON_SAVE, false);
+		preferences.setDefault(P_EDITOR_GOTO_DEFINITION_ON_SELECTION, true);
+		preferences.setDefault(P_EDITOR_TREE_DBL_CLICK_ACTION, V_EDITOR_TREE_OPEN_WIDGET_IN_EDITOR);
+		// highlight visited/executed lines
+		preferences.setDefault(P_HIGHLIGHT_VISITED, false);
+		//PreferenceConverter.setDefault(preferences, P_HIGHLIGHT_VISITED_COLOR, new RGB(235, 255, 235));
+		preferences.setDefault(P_HIGHLIGHT_VISITED_COLOR, "235,255,235");
+		// code parsing
+		preferences.setDefault(P_CODE_HIDE_BEGIN, "$hide>>$");
+		preferences.setDefault(P_CODE_HIDE_END, "$hide<<$");
+		preferences.setDefault(P_CODE_HIDE_LINE, "$hide$");
+		preferences.setDefault(P_CODE_STRICT_EVALUATE, false);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/preferences/code/CodeGenerationPreferencePage.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/preferences/code/CodeGenerationPreferencePage.java
index 05ca049bd..b3baf5e54 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/preferences/code/CodeGenerationPreferencePage.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/preferences/code/CodeGenerationPreferencePage.java
@@ -62,397 +62,397 @@
  * @coverage core.preferences.ui
  */
 public abstract class CodeGenerationPreferencePage extends PreferencePage
-    implements
-      IWorkbenchPreferencePage {
-  private final DataBindManager m_bindManager = new DataBindManager();
-  private final GenerationSettings m_settings;
-  private final IPreferenceStore m_preferences;
+implements
+IWorkbenchPreferencePage {
+	private final DataBindManager m_bindManager = new DataBindManager();
+	private final GenerationSettings m_settings;
+	private final IPreferenceStore m_preferences;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CodeGenerationPreferencePage(ToolkitDescriptionJava toolkit) {
-    m_settings = toolkit.getGenerationSettings();
-    m_preferences = toolkit.getPreferences();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CodeGenerationPreferencePage(ToolkitDescriptionJava toolkit) {
+		m_settings = toolkit.getGenerationSettings();
+		m_preferences = toolkit.getPreferences();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Control createContents(Composite parent) {
-    Composite contents = new Composite(parent, SWT.NONE);
-    GridLayoutFactory.create(contents).noMargins();
-    //
-    {
-      Button deduceSettingsButton = new Button(contents, SWT.CHECK);
-      deduceSettingsButton.setText(Messages.CodeGenerationPreferencePage_deduceFlag);
-      m_bindManager.bind(
-          new CheckButtonEditor(deduceSettingsButton),
-          new BooleanPreferenceProvider(m_preferences, GenerationSettings.P_DEDUCE_SETTINGS),
-          true);
-    }
-    // forced method for new statements/children
-    {
-      Composite composite = new Composite(contents, SWT.NONE);
-      GridDataFactory.create(composite).grabH().fill();
-      GridLayoutFactory.create(composite).columns(2).noMargins();
-      // controls
-      new Label(composite, SWT.NONE).setText(Messages.CodeGenerationPreferencePage_forcedMethod);
-      Combo methodCombo = new Combo(composite, SWT.BORDER);
-      methodCombo.setItems(getMethodForCombo());
-      // bind
-      m_bindManager.bind(
-          new ComboTextEditor(methodCombo),
-          new StringPreferenceProvider(m_preferences, GenerationSettings.P_FORCED_METHOD),
-          true);
-    }
-    createDefaultsComposite(contents);
-    //
-    return contents;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Control createContents(Composite parent) {
+		Composite contents = new Composite(parent, SWT.NONE);
+		GridLayoutFactory.create(contents).noMargins();
+		//
+		{
+			Button deduceSettingsButton = new Button(contents, SWT.CHECK);
+			deduceSettingsButton.setText(Messages.CodeGenerationPreferencePage_deduceFlag);
+			m_bindManager.bind(
+					new CheckButtonEditor(deduceSettingsButton),
+					new BooleanPreferenceProvider(m_preferences, GenerationSettings.P_DEDUCE_SETTINGS),
+					true);
+		}
+		// forced method for new statements/children
+		{
+			Composite composite = new Composite(contents, SWT.NONE);
+			GridDataFactory.create(composite).grabH().fill();
+			GridLayoutFactory.create(composite).columns(2).noMargins();
+			// controls
+			new Label(composite, SWT.NONE).setText(Messages.CodeGenerationPreferencePage_forcedMethod);
+			Combo methodCombo = new Combo(composite, SWT.BORDER);
+			methodCombo.setItems(getMethodForCombo());
+			// bind
+			m_bindManager.bind(
+					new ComboTextEditor(methodCombo),
+					new StringPreferenceProvider(m_preferences, GenerationSettings.P_FORCED_METHOD),
+					true);
+		}
+		createDefaultsComposite(contents);
+		//
+		return contents;
+	}
 
-  protected String[] getMethodForCombo() {
-    return new String[]{"createContents", "initialize", "jbInit", "initComponents", "initGUI"};
-  }
+	protected String[] getMethodForCombo() {
+		return new String[]{"createContents", "initialize", "jbInit", "initComponents", "initGUI"};
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Defaults
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Creates GUI for default variable/statement types.
-   */
-  private void createDefaultsComposite(Composite parent) {
-    Group container = new Group(parent, SWT.NONE);
-    GridDataFactory.create(container).grab().fill();
-    GridLayoutFactory.create(container).columns(2).equalColumns().noMargins();
-    container.setText(Messages.CodeGenerationPreferencePage_defaultGroup);
-    //
-    createVariableComposite(container);
-    createStatementComposite(container);
-    // bind
-    {
-      // variable
-      m_bindManager.bind(
-          new GenerationDescriptionEditor(m_variablesTabFolder),
-          new IDataProvider() {
-            @Override
-            public void setValue(Object value) {
-              m_settings.setVariable((VariableSupportDescription) value);
-            }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Defaults
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Creates GUI for default variable/statement types.
+	 */
+	private void createDefaultsComposite(Composite parent) {
+		Group container = new Group(parent, SWT.NONE);
+		GridDataFactory.create(container).grab().fill();
+		GridLayoutFactory.create(container).columns(2).equalColumns().noMargins();
+		container.setText(Messages.CodeGenerationPreferencePage_defaultGroup);
+		//
+		createVariableComposite(container);
+		createStatementComposite(container);
+		// bind
+		{
+			// variable
+			m_bindManager.bind(
+					new GenerationDescriptionEditor(m_variablesTabFolder),
+					new IDataProvider() {
+						@Override
+						public void setValue(Object value) {
+							m_settings.setVariable((VariableSupportDescription) value);
+						}
 
-            @Override
-            public Object getValue(boolean def) {
-              return def ? m_settings.getDefaultVariable() : m_settings.getVariable();
-            }
-          },
-          true);
-      // statement
-      showCompatibleStatements();
-      m_bindManager.bind(
-          new GenerationDescriptionEditor(m_statementsTabFolder),
-          new IDataProvider() {
-            @Override
-            public void setValue(Object value) {
-              m_settings.setStatement((StatementGeneratorDescription) value);
-            }
+						@Override
+						public Object getValue(boolean def) {
+							return def ? m_settings.getDefaultVariable() : m_settings.getVariable();
+						}
+					},
+					true);
+			// statement
+			showCompatibleStatements();
+			m_bindManager.bind(
+					new GenerationDescriptionEditor(m_statementsTabFolder),
+					new IDataProvider() {
+						@Override
+						public void setValue(Object value) {
+							m_settings.setStatement((StatementGeneratorDescription) value);
+						}
 
-            @Override
-            public Object getValue(boolean def) {
-              return def ? m_settings.getDefaultStatement() : m_settings.getStatement();
-            }
-          },
-          true);
-    }
-    // create preview (here, after binding)
-    createPreviewComposite(container);
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Variable
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private TabFolder m_variablesTabFolder;
+						@Override
+						public Object getValue(boolean def) {
+							return def ? m_settings.getDefaultStatement() : m_settings.getStatement();
+						}
+					},
+					true);
+		}
+		// create preview (here, after binding)
+		createPreviewComposite(container);
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Variable
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private TabFolder m_variablesTabFolder;
 
-  /**
-   * Creates GUI for {@link VariableSupportDescription}.
-   */
-  private void createVariableComposite(Composite parent) {
-    Composite container = new Composite(parent, SWT.NONE);
-    GridDataFactory.create(container).grabH().fill();
-    GridLayoutFactory.create(container);
-    // title
-    new Label(container, SWT.NONE).setText(Messages.CodeGenerationPreferencePage_variableLabel);
-    // tab folder
-    {
-      m_variablesTabFolder = new TabFolder(container, SWT.NONE);
-      GridDataFactory.create(m_variablesTabFolder).grab().fill();
-      // create tab's
-      for (VariableSupportDescription description : m_settings.getVariables()) {
-        TabItem tabItem = new TabItem(m_variablesTabFolder, SWT.NONE);
-        tabItem.setText(description.getName());
-        tabItem.setData(description);
-        //
-        Composite composite = getDescriptionComposite(description, m_variablesTabFolder);
-        tabItem.setControl(composite);
-      }
-    }
-    // hint
-    {
-      Label hintLabel = new Label(container, SWT.WRAP);
-      GridDataFactory.create(hintLabel).hintHC(50);
-      hintLabel.setText(Messages.CodeGenerationPreferencePage_hintVariableSelectingTab);
-    }
-    // selection listener
-    m_variablesTabFolder.addListener(SWT.Selection, new Listener() {
-      @Override
-      public void handleEvent(Event event) {
-        showCompatibleStatements();
-      }
-    });
-  }
+	/**
+	 * Creates GUI for {@link VariableSupportDescription}.
+	 */
+	private void createVariableComposite(Composite parent) {
+		Composite container = new Composite(parent, SWT.NONE);
+		GridDataFactory.create(container).grabH().fill();
+		GridLayoutFactory.create(container);
+		// title
+		new Label(container, SWT.NONE).setText(Messages.CodeGenerationPreferencePage_variableLabel);
+		// tab folder
+		{
+			m_variablesTabFolder = new TabFolder(container, SWT.NONE);
+			GridDataFactory.create(m_variablesTabFolder).grab().fill();
+			// create tab's
+			for (VariableSupportDescription description : m_settings.getVariables()) {
+				TabItem tabItem = new TabItem(m_variablesTabFolder, SWT.NONE);
+				tabItem.setText(description.getName());
+				tabItem.setData(description);
+				//
+				Composite composite = getDescriptionComposite(description, m_variablesTabFolder);
+				tabItem.setControl(composite);
+			}
+		}
+		// hint
+		{
+			Label hintLabel = new Label(container, SWT.WRAP);
+			GridDataFactory.create(hintLabel).hintHC(50);
+			hintLabel.setText(Messages.CodeGenerationPreferencePage_hintVariableSelectingTab);
+		}
+		// selection listener
+		m_variablesTabFolder.addListener(SWT.Selection, new Listener() {
+			@Override
+			public void handleEvent(Event event) {
+				showCompatibleStatements();
+			}
+		});
+	}
 
-  /**
-   * @return the selected {@link VariableSupportDescription}
-   */
-  private VariableSupportDescription getSelectedVariable() {
-    TabItem tabItem = m_variablesTabFolder.getSelection()[0];
-    return (VariableSupportDescription) tabItem.getData();
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Statement
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private TabFolder m_statementsTabFolder;
-  private StatementGeneratorDescription[] m_currentStatementDescriptions;
+	/**
+	 * @return the selected {@link VariableSupportDescription}
+	 */
+	private VariableSupportDescription getSelectedVariable() {
+		TabItem tabItem = m_variablesTabFolder.getSelection()[0];
+		return (VariableSupportDescription) tabItem.getData();
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Statement
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private TabFolder m_statementsTabFolder;
+	private StatementGeneratorDescription[] m_currentStatementDescriptions;
 
-  /**
-   * Creates GUI for {@link StatementGeneratorDescription}.
-   */
-  private void createStatementComposite(Composite parent) {
-    Composite container = new Composite(parent, SWT.NONE);
-    GridDataFactory.create(container).grabH().fill();
-    GridLayoutFactory.create(container);
-    // title
-    new Label(container, SWT.NONE).setText(Messages.CodeGenerationPreferencePage_statementLabel);
-    // tab folder
-    {
-      m_statementsTabFolder = new TabFolder(container, SWT.NONE);
-      GridDataFactory.create(m_statementsTabFolder).grab().fill().hintVC(8);
-    }
-    // hint
-    {
-      Label hintLabel = new Label(container, SWT.WRAP);
-      GridDataFactory.create(hintLabel).hintHC(50);
-      hintLabel.setText(Messages.CodeGenerationPreferencePage_hintStatementSelectingTab);
-    }
-  }
+	/**
+	 * Creates GUI for {@link StatementGeneratorDescription}.
+	 */
+	private void createStatementComposite(Composite parent) {
+		Composite container = new Composite(parent, SWT.NONE);
+		GridDataFactory.create(container).grabH().fill();
+		GridLayoutFactory.create(container);
+		// title
+		new Label(container, SWT.NONE).setText(Messages.CodeGenerationPreferencePage_statementLabel);
+		// tab folder
+		{
+			m_statementsTabFolder = new TabFolder(container, SWT.NONE);
+			GridDataFactory.create(m_statementsTabFolder).grab().fill().hintVC(8);
+		}
+		// hint
+		{
+			Label hintLabel = new Label(container, SWT.WRAP);
+			GridDataFactory.create(hintLabel).hintHC(50);
+			hintLabel.setText(Messages.CodeGenerationPreferencePage_hintStatementSelectingTab);
+		}
+	}
 
-  /**
-   * Shows the list of {@link StatementGeneratorDescription} compatible with given
-   * {@link VariableSupportDescription}.
-   */
-  private void showCompatibleStatements() {
-    VariableSupportDescription variableDescription = getSelectedVariable();
-    // prepare new statements to show
-    StatementGeneratorDescription[] newStatements;
-    {
-      newStatements = m_settings.getStatements(variableDescription);
-      if (Arrays.equals(m_currentStatementDescriptions, newStatements)) {
-        return;
-      }
-      m_currentStatementDescriptions = newStatements;
-    }
-    // dispose existing tab's
-    for (TabItem tabItem : m_statementsTabFolder.getItems()) {
-      tabItem.getControl().setSize(0, 0);
-      tabItem.dispose();
-    }
-    // create tab's
-    for (StatementGeneratorDescription description : newStatements) {
-      TabItem tabItem = new TabItem(m_statementsTabFolder, SWT.NONE);
-      tabItem.setText(description.getName());
-      tabItem.setData(description);
-      //
-      Composite composite = getDescriptionComposite(description, m_statementsTabFolder);
-      tabItem.setControl(composite);
-    }
-    // update preview
-    updatePreview();
-  }
+	/**
+	 * Shows the list of {@link StatementGeneratorDescription} compatible with given
+	 * {@link VariableSupportDescription}.
+	 */
+	private void showCompatibleStatements() {
+		VariableSupportDescription variableDescription = getSelectedVariable();
+		// prepare new statements to show
+		StatementGeneratorDescription[] newStatements;
+		{
+			newStatements = m_settings.getStatements(variableDescription);
+			if (Arrays.equals(m_currentStatementDescriptions, newStatements)) {
+				return;
+			}
+			m_currentStatementDescriptions = newStatements;
+		}
+		// dispose existing tab's
+		for (TabItem tabItem : m_statementsTabFolder.getItems()) {
+			tabItem.getControl().setSize(0, 0);
+			tabItem.dispose();
+		}
+		// create tab's
+		for (StatementGeneratorDescription description : newStatements) {
+			TabItem tabItem = new TabItem(m_statementsTabFolder, SWT.NONE);
+			tabItem.setText(description.getName());
+			tabItem.setData(description);
+			//
+			Composite composite = getDescriptionComposite(description, m_statementsTabFolder);
+			tabItem.setControl(composite);
+		}
+		// update preview
+		updatePreview();
+	}
 
-  /**
-   * @return the selected {@link StatementGeneratorDescription}.
-   */
-  private StatementGeneratorDescription getSelectedStatement() {
-    return (StatementGeneratorDescription) m_statementsTabFolder.getSelection()[0].getData();
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Preview
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private SourceViewer m_previewViewer;
-  /**
-   * {@link Listener} for updates in {@link GenerationPropertiesComposite} of variable/statement.
-   */
-  private final Listener m_descriptionPropertiesListener = new Listener() {
-    @Override
-    public void handleEvent(Event event) {
-      m_descriptionPropertiesRunnable.run();
-    }
-  };
-  /**
-   * {@link Runnable} for updates in {@link GenerationPropertiesComposite} of variable/statement.
-   */
-  private final Runnable m_descriptionPropertiesRunnable = new Runnable() {
-    @Override
-    public void run() {
-      Display.getCurrent().asyncExec(new Runnable() {
-        @Override
-        public void run() {
-          updatePreview();
-        }
-      });
-    }
-  };
+	/**
+	 * @return the selected {@link StatementGeneratorDescription}.
+	 */
+	private StatementGeneratorDescription getSelectedStatement() {
+		return (StatementGeneratorDescription) m_statementsTabFolder.getSelection()[0].getData();
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Preview
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private SourceViewer m_previewViewer;
+	/**
+	 * {@link Listener} for updates in {@link GenerationPropertiesComposite} of variable/statement.
+	 */
+	private final Listener m_descriptionPropertiesListener = new Listener() {
+		@Override
+		public void handleEvent(Event event) {
+			m_descriptionPropertiesRunnable.run();
+		}
+	};
+	/**
+	 * {@link Runnable} for updates in {@link GenerationPropertiesComposite} of variable/statement.
+	 */
+	private final Runnable m_descriptionPropertiesRunnable = new Runnable() {
+		@Override
+		public void run() {
+			Display.getCurrent().asyncExec(new Runnable() {
+				@Override
+				public void run() {
+					updatePreview();
+				}
+			});
+		}
+	};
 
-  /**
-   * Creates GUI for variable/statement combination preview.
-   */
-  private void createPreviewComposite(Group container) {
-    // create GUI
-    {
-      final Composite previewComposite = new Composite(container, SWT.NONE);
-      GridDataFactory.create(previewComposite).spanH(2).grab().fill();
-      GridLayoutFactory.create(previewComposite);
-      // label
-      new Label(previewComposite, SWT.NONE).setText(Messages.CodeGenerationPreferencePage_previewLabel);
-      // source viewer
-      {
-        m_previewViewer =
-            JdtUiUtils.createJavaSourceViewer(previewComposite, SWT.BORDER | SWT.V_SCROLL);
-        GridDataFactory.create(m_previewViewer.getControl()).hintVC(16).grab().fill();
-      }
-    }
-    // update preview on variable/statement selection
-    {
-      m_variablesTabFolder.addListener(SWT.Selection, m_descriptionPropertiesListener);
-      m_statementsTabFolder.addListener(SWT.Selection, m_descriptionPropertiesListener);
-      updatePreview();
-    }
-  }
+	/**
+	 * Creates GUI for variable/statement combination preview.
+	 */
+	private void createPreviewComposite(Group container) {
+		// create GUI
+		{
+			final Composite previewComposite = new Composite(container, SWT.NONE);
+			GridDataFactory.create(previewComposite).spanH(2).grab().fill();
+			GridLayoutFactory.create(previewComposite);
+			// label
+			new Label(previewComposite, SWT.NONE).setText(Messages.CodeGenerationPreferencePage_previewLabel);
+			// source viewer
+			{
+				m_previewViewer =
+						JdtUiUtils.createJavaSourceViewer(previewComposite, SWT.BORDER | SWT.V_SCROLL);
+				GridDataFactory.create(m_previewViewer.getControl()).hintVC(16).grab().fill();
+			}
+		}
+		// update preview on variable/statement selection
+		{
+			m_variablesTabFolder.addListener(SWT.Selection, m_descriptionPropertiesListener);
+			m_statementsTabFolder.addListener(SWT.Selection, m_descriptionPropertiesListener);
+			updatePreview();
+		}
+	}
 
-  /**
-   * Updates preview for variable/statement combination.
-   */
-  private void updatePreview() {
-    if (m_previewViewer == null) {
-      return;
-    }
-    ExecutionUtils.runRethrow(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        // prepare descriptions
-        VariableSupportDescription variableDescription = getSelectedVariable();
-        StatementGeneratorDescription statementDescription = getSelectedStatement();
-        // prepare properties for descriptions
-        GenerationPropertiesComposite variableComposite =
-            getDescriptionPropertiesComposite(variableDescription);
-        GenerationPropertiesComposite statementComposite =
-            getDescriptionPropertiesComposite(statementDescription);
-        // do update
-        GenerationPreview preview =
-            m_settings.getPreview(variableDescription, statementDescription);
-        if (preview != null) {
-          JdtUiUtils.setJavaSourceForViewer(
-              m_previewViewer,
-              preview.getPreview(variableComposite, statementComposite));
-        } else {
-          JdtUiUtils.setJavaSourceForViewer(
-              m_previewViewer,
-              Messages.CodeGenerationPreferencePage_noPreviewMessage);
-        }
-      }
-    });
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final Map<GenerationDescription, Composite> m_descriptionComposites = Maps.newHashMap();
-  private final Map<GenerationDescription, GenerationPropertiesComposite> m_descriptionPropertyComposites =
-      Maps.newHashMap();
+	/**
+	 * Updates preview for variable/statement combination.
+	 */
+	private void updatePreview() {
+		if (m_previewViewer == null) {
+			return;
+		}
+		ExecutionUtils.runRethrow(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				// prepare descriptions
+				VariableSupportDescription variableDescription = getSelectedVariable();
+				StatementGeneratorDescription statementDescription = getSelectedStatement();
+				// prepare properties for descriptions
+				GenerationPropertiesComposite variableComposite =
+						getDescriptionPropertiesComposite(variableDescription);
+				GenerationPropertiesComposite statementComposite =
+						getDescriptionPropertiesComposite(statementDescription);
+				// do update
+				GenerationPreview preview =
+						m_settings.getPreview(variableDescription, statementDescription);
+				if (preview != null) {
+					JdtUiUtils.setJavaSourceForViewer(
+							m_previewViewer,
+							preview.getPreview(variableComposite, statementComposite));
+				} else {
+					JdtUiUtils.setJavaSourceForViewer(
+							m_previewViewer,
+							Messages.CodeGenerationPreferencePage_noPreviewMessage);
+				}
+			}
+		});
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final Map<GenerationDescription, Composite> m_descriptionComposites = Maps.newHashMap();
+	private final Map<GenerationDescription, GenerationPropertiesComposite> m_descriptionPropertyComposites =
+			Maps.newHashMap();
 
-  /**
-   * @return the {@link Composite} for displaying/editing {@link GenerationDescription} properties.
-   */
-  private Composite getDescriptionComposite(GenerationDescription description, Composite parent) {
-    Composite wrapper = m_descriptionComposites.get(description);
-    if (wrapper == null) {
-      wrapper = new Composite(parent, SWT.NONE);
-      GridLayoutFactory.create(wrapper);
-      {
-        Label descriptionLabel = new Label(wrapper, SWT.WRAP);
-        GridDataFactory.create(descriptionLabel).grabH().fillH().hintHC(50);
-        descriptionLabel.setText(MessageFormat.format(
-            Messages.CodeGenerationPreferencePage_descriptionLabel,
-            description.getDescription()));
-      }
-      {
-        GenerationPropertiesComposite composite =
-            description.createPropertiesComposite(wrapper, m_bindManager, m_preferences);
-        GridDataFactory.create(composite).grab().fill();
-        m_descriptionPropertyComposites.put(description, composite);
-        composite.addUpdateListener(m_descriptionPropertiesRunnable);
-      }
-      m_descriptionComposites.put(description, wrapper);
-    }
-    return wrapper;
-  }
+	/**
+	 * @return the {@link Composite} for displaying/editing {@link GenerationDescription} properties.
+	 */
+	private Composite getDescriptionComposite(GenerationDescription description, Composite parent) {
+		Composite wrapper = m_descriptionComposites.get(description);
+		if (wrapper == null) {
+			wrapper = new Composite(parent, SWT.NONE);
+			GridLayoutFactory.create(wrapper);
+			{
+				Label descriptionLabel = new Label(wrapper, SWT.WRAP);
+				GridDataFactory.create(descriptionLabel).grabH().fillH().hintHC(50);
+				descriptionLabel.setText(MessageFormat.format(
+						Messages.CodeGenerationPreferencePage_descriptionLabel,
+						description.getDescription()));
+			}
+			{
+				GenerationPropertiesComposite composite =
+						description.createPropertiesComposite(wrapper, m_bindManager, m_preferences);
+				GridDataFactory.create(composite).grab().fill();
+				m_descriptionPropertyComposites.put(description, composite);
+				composite.addUpdateListener(m_descriptionPropertiesRunnable);
+			}
+			m_descriptionComposites.put(description, wrapper);
+		}
+		return wrapper;
+	}
 
-  /**
-   * @return the existing {@link GenerationPropertiesComposite} for given
-   *         {@link GenerationDescription}.
-   */
-  private GenerationPropertiesComposite getDescriptionPropertiesComposite(GenerationDescription description) {
-    GenerationPropertiesComposite composite = m_descriptionPropertyComposites.get(description);
-    Assert.isNotNull(composite);
-    return composite;
-  }
+	/**
+	 * @return the existing {@link GenerationPropertiesComposite} for given
+	 *         {@link GenerationDescription}.
+	 */
+	private GenerationPropertiesComposite getDescriptionPropertiesComposite(GenerationDescription description) {
+		GenerationPropertiesComposite composite = m_descriptionPropertyComposites.get(description);
+		Assert.isNotNull(composite);
+		return composite;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // State
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean performOk() {
-    m_bindManager.performCommit();
-    return super.performOk();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// State
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean performOk() {
+		m_bindManager.performCommit();
+		return super.performOk();
+	}
 
-  @Override
-  protected void performDefaults() {
-    m_bindManager.performDefault();
-    showCompatibleStatements();
-    super.performDefaults();
-  }
+	@Override
+	protected void performDefaults() {
+		m_bindManager.performDefault();
+		showCompatibleStatements();
+		super.performDefaults();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IWorkbenchPreferencePage
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void init(IWorkbench workbench) {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IWorkbenchPreferencePage
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void init(IWorkbench workbench) {
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/preferences/code/GenerationDescriptionEditor.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/preferences/code/GenerationDescriptionEditor.java
index 26cf1b873..2d3958db9 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/preferences/code/GenerationDescriptionEditor.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/preferences/code/GenerationDescriptionEditor.java
@@ -31,71 +31,71 @@
  * @coverage core.preferences.ui
  */
 public final class GenerationDescriptionEditor implements IDataEditor {
-  private final TabFolder m_tabFolder;
+	private final TabFolder m_tabFolder;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public GenerationDescriptionEditor(TabFolder tabFolder) {
-    m_tabFolder = tabFolder;
-    trackTabFolderSelection();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public GenerationDescriptionEditor(TabFolder tabFolder) {
+		m_tabFolder = tabFolder;
+		trackTabFolderSelection();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IDialogField
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void setValue(Object value) {
-    for (TabItem tabItem : m_tabFolder.getItems()) {
-      if (tabItem.getData() == value) {
-        m_tabFolder.setSelection(tabItem);
-        updateTabFolderSelection();
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IDialogField
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void setValue(Object value) {
+		for (TabItem tabItem : m_tabFolder.getItems()) {
+			if (tabItem.getData() == value) {
+				m_tabFolder.setSelection(tabItem);
+				updateTabFolderSelection();
+			}
+		}
+	}
 
-  @Override
-  public Object getValue() {
-    return m_tabFolder.getSelection()[0].getData();
-  }
+	@Override
+	public Object getValue() {
+		return m_tabFolder.getSelection()[0].getData();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Selected TabItem decoration
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final Image TAB_IMAGE_SELECTION_FALSE =
-      DesignerPlugin.getImage("preferences/tab_selection_false.gif");
-  private static final Image TAB_IMAGE_SELECTION_TRUE =
-      DesignerPlugin.getImage("preferences/tab_selection_true.gif");
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Selected TabItem decoration
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final Image TAB_IMAGE_SELECTION_FALSE =
+			DesignerPlugin.getImage("preferences/tab_selection_false.gif");
+	private static final Image TAB_IMAGE_SELECTION_TRUE =
+			DesignerPlugin.getImage("preferences/tab_selection_true.gif");
 
-  /**
-   * Installs {@link Listener} for highlighting selected {@link TabItem} in given {@link TabFolder}.
-   */
-  private void trackTabFolderSelection() {
-    updateTabFolderSelection();
-    m_tabFolder.addListener(SWT.Selection, new Listener() {
-      @Override
-      public void handleEvent(Event event) {
-        updateTabFolderSelection();
-      }
-    });
-  }
+	/**
+	 * Installs {@link Listener} for highlighting selected {@link TabItem} in given {@link TabFolder}.
+	 */
+	private void trackTabFolderSelection() {
+		updateTabFolderSelection();
+		m_tabFolder.addListener(SWT.Selection, new Listener() {
+			@Override
+			public void handleEvent(Event event) {
+				updateTabFolderSelection();
+			}
+		});
+	}
 
-  /**
-   * Updates images for {@link TabItem}'s of given {@link TabFolder} to highlight selected
-   * {@link TabItem}.
-   */
-  private void updateTabFolderSelection() {
-    TabItem[] selectedItems = m_tabFolder.getSelection();
-    for (TabItem tabItem : m_tabFolder.getItems()) {
-      tabItem.setImage(ArrayUtils.contains(selectedItems, tabItem)
-          ? TAB_IMAGE_SELECTION_TRUE
-          : TAB_IMAGE_SELECTION_FALSE);
-    }
-  }
+	/**
+	 * Updates images for {@link TabItem}'s of given {@link TabFolder} to highlight selected
+	 * {@link TabItem}.
+	 */
+	private void updateTabFolderSelection() {
+		TabItem[] selectedItems = m_tabFolder.getSelection();
+		for (TabItem tabItem : m_tabFolder.getItems()) {
+			tabItem.setImage(ArrayUtils.contains(selectedItems, tabItem)
+					? TAB_IMAGE_SELECTION_TRUE
+							: TAB_IMAGE_SELECTION_FALSE);
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/preferences/code/VariablesPreferencePage.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/preferences/code/VariablesPreferencePage.java
index ac578a515..50e1f3a97 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/preferences/code/VariablesPreferencePage.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/preferences/code/VariablesPreferencePage.java
@@ -63,393 +63,393 @@
  * @coverage core.preferences.ui
  */
 public abstract class VariablesPreferencePage extends AbstractBindingPreferencesPage
-    implements
-      IPreferenceConstants {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public VariablesPreferencePage(ToolkitDescription toolkit) {
-    super(toolkit);
-  }
+implements
+IPreferenceConstants {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public VariablesPreferencePage(ToolkitDescription toolkit) {
+		super(toolkit);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected AbstractBindingComposite createBindingComposite(Composite parent) {
-    return new ContentsComposite(parent, m_bindManager, m_toolkit);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected AbstractBindingComposite createBindingComposite(Composite parent) {
+		return new ContentsComposite(parent, m_bindManager, m_toolkit);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Contents
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static class ContentsComposite extends AbstractBindingComposite {
-    private final ToolkitDescription m_toolkit;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Contents
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static class ContentsComposite extends AbstractBindingComposite {
+		private final ToolkitDescription m_toolkit;
 
-    public ContentsComposite(Composite parent,
-        DataBindManager bindManager,
-        ToolkitDescription toolkit) {
-      super(parent, bindManager, toolkit.getPreferences());
-      m_toolkit = toolkit;
-      GridLayoutFactory.create(this).noMargins();
-      //
-      TabFolder tabFolder = new TabFolder(this, SWT.NONE);
-      GridDataFactory.create(tabFolder).grab().fill();
-      {
-        Composite composite =
-            TabFactory.item(tabFolder).text(Messages.VariablesPreferencePage_typeSpecificTab).composite();
-        createTypeSpecificPage(composite);
-      }
-      {
-        Composite composite =
-            TabFactory.item(tabFolder).text(Messages.VariablesPreferencePage_autoRenameTab).composite();
-        createAutoRenamePage(composite);
-      }
-      {
-        Composite composite =
-            TabFactory.item(tabFolder).text(Messages.VariablesPreferencePage_miscTab).composite();
-        createMiscellaneousPage(composite);
-      }
-    }
+		public ContentsComposite(Composite parent,
+				DataBindManager bindManager,
+				ToolkitDescription toolkit) {
+			super(parent, bindManager, toolkit.getPreferences());
+			m_toolkit = toolkit;
+			GridLayoutFactory.create(this).noMargins();
+			//
+			TabFolder tabFolder = new TabFolder(this, SWT.NONE);
+			GridDataFactory.create(tabFolder).grab().fill();
+			{
+				Composite composite =
+						TabFactory.item(tabFolder).text(Messages.VariablesPreferencePage_typeSpecificTab).composite();
+				createTypeSpecificPage(composite);
+			}
+			{
+				Composite composite =
+						TabFactory.item(tabFolder).text(Messages.VariablesPreferencePage_autoRenameTab).composite();
+				createAutoRenamePage(composite);
+			}
+			{
+				Composite composite =
+						TabFactory.item(tabFolder).text(Messages.VariablesPreferencePage_miscTab).composite();
+				createMiscellaneousPage(composite);
+			}
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Validation
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    protected String validate() throws Exception {
-      // template
-      {
-        String template = getString(P_VARIABLE_TEXT_TEMPLATE);
-        String message = NamesManager.validate(template);
-        if (message != null) {
-          return MessageFormat.format(
-              Messages.VariablesPreferencePage_validateVariableNameTemplate,
-              message);
-        }
-      }
-      // continue
-      return super.validate();
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Validation
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		protected String validate() throws Exception {
+			// template
+			{
+				String template = getString(P_VARIABLE_TEXT_TEMPLATE);
+				String message = NamesManager.validate(template);
+				if (message != null) {
+					return MessageFormat.format(
+							Messages.VariablesPreferencePage_validateVariableNameTemplate,
+							message);
+				}
+			}
+			// continue
+			return super.validate();
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Auto rename
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    /**
-     * Creates page for auto rename on "text" property change.
-     */
-    private void createAutoRenamePage(Composite parent) {
-      GridLayoutFactory.create(parent).columns(2).equalColumns();
-      // mode
-      {
-        new Label(parent, SWT.NONE).setText(Messages.VariablesPreferencePage_arLabel);
-        // control
-        Combo modeCombo = new Combo(parent, SWT.READ_ONLY);
-        GridDataFactory.create(modeCombo).grabH().fillH();
-        modeCombo.setItems(new String[]{
-            Messages.VariablesPreferencePage_arAlways,
-            Messages.VariablesPreferencePage_arDefault,
-            Messages.VariablesPreferencePage_arNever});
-        // bind
-        bindSelection(modeCombo, P_VARIABLE_TEXT_MODE);
-      }
-      // template
-      {
-        new Label(parent, SWT.NONE).setText(Messages.VariablesPreferencePage_arPatternLabel);
-        // control
-        Combo templateCombo = new Combo(parent, SWT.NONE);
-        GridDataFactory.create(templateCombo).grabH().fillH();
-        templateCombo.setItems(new String[]{
-            "${text}${class_name}",
-            "${class_acronym}${text}",
-            "${class_name}${text}"});
-        // bind
-        bindString(templateCombo, P_VARIABLE_TEXT_TEMPLATE);
-      }
-      // words limit
-      {
-        Composite composite = new Composite(parent, SWT.NONE);
-        GridDataFactory.create(composite).spanH(2).fillH();
-        GridLayoutFactory.create(composite).columns(3).noMargins();
-        // initial text
-        new Label(composite, SWT.NONE).setText(Messages.VariablesPreferencePage_arLimitWords1);
-        // control
-        {
-          Text wordsText = new Text(composite, SWT.BORDER);
-          GridDataFactory.create(wordsText).hintHC(3);
-          bindInteger(wordsText, P_VARIABLE_TEXT_WORDS_LIMIT);
-        }
-        // final text
-        new Label(composite, SWT.NONE).setText(Messages.VariablesPreferencePage_arLimitWords2);
-      }
-      // template parts hint
-      {
-        Label templateHint = new Label(parent, SWT.WRAP);
-        GridDataFactory.create(templateHint).spanH(2);
-        templateHint.setText(Messages.VariablesPreferencePage_arHint1
-            + Messages.VariablesPreferencePage_arHint2
-            + Messages.VariablesPreferencePage_arHint3
-            + Messages.VariablesPreferencePage_arHint4
-            + Messages.VariablesPreferencePage_arHint5);
-      }
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Auto rename
+		//
+		////////////////////////////////////////////////////////////////////////////
+		/**
+		 * Creates page for auto rename on "text" property change.
+		 */
+		private void createAutoRenamePage(Composite parent) {
+			GridLayoutFactory.create(parent).columns(2).equalColumns();
+			// mode
+			{
+				new Label(parent, SWT.NONE).setText(Messages.VariablesPreferencePage_arLabel);
+				// control
+				Combo modeCombo = new Combo(parent, SWT.READ_ONLY);
+				GridDataFactory.create(modeCombo).grabH().fillH();
+				modeCombo.setItems(new String[]{
+						Messages.VariablesPreferencePage_arAlways,
+						Messages.VariablesPreferencePage_arDefault,
+						Messages.VariablesPreferencePage_arNever});
+				// bind
+				bindSelection(modeCombo, P_VARIABLE_TEXT_MODE);
+			}
+			// template
+			{
+				new Label(parent, SWT.NONE).setText(Messages.VariablesPreferencePage_arPatternLabel);
+				// control
+				Combo templateCombo = new Combo(parent, SWT.NONE);
+				GridDataFactory.create(templateCombo).grabH().fillH();
+				templateCombo.setItems(new String[]{
+						"${text}${class_name}",
+						"${class_acronym}${text}",
+				"${class_name}${text}"});
+				// bind
+				bindString(templateCombo, P_VARIABLE_TEXT_TEMPLATE);
+			}
+			// words limit
+			{
+				Composite composite = new Composite(parent, SWT.NONE);
+				GridDataFactory.create(composite).spanH(2).fillH();
+				GridLayoutFactory.create(composite).columns(3).noMargins();
+				// initial text
+				new Label(composite, SWT.NONE).setText(Messages.VariablesPreferencePage_arLimitWords1);
+				// control
+				{
+					Text wordsText = new Text(composite, SWT.BORDER);
+					GridDataFactory.create(wordsText).hintHC(3);
+					bindInteger(wordsText, P_VARIABLE_TEXT_WORDS_LIMIT);
+				}
+				// final text
+				new Label(composite, SWT.NONE).setText(Messages.VariablesPreferencePage_arLimitWords2);
+			}
+			// template parts hint
+			{
+				Label templateHint = new Label(parent, SWT.WRAP);
+				GridDataFactory.create(templateHint).spanH(2);
+				templateHint.setText(Messages.VariablesPreferencePage_arHint1
+						+ Messages.VariablesPreferencePage_arHint2
+						+ Messages.VariablesPreferencePage_arHint3
+						+ Messages.VariablesPreferencePage_arHint4
+						+ Messages.VariablesPreferencePage_arHint5);
+			}
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Miscellaneous
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    /**
-     * Creates page for miscellaneous variable preferences.
-     */
-    private void createMiscellaneousPage(Composite parent) {
-      GridLayoutFactory.create(parent).columns(2).equalColumns();
-      // variable in component
-      checkButton(
-          parent,
-          Messages.VariablesPreferencePage_miscRememberName,
-          IPreferenceConstants.P_VARIABLE_IN_COMPONENT);
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Miscellaneous
+		//
+		////////////////////////////////////////////////////////////////////////////
+		/**
+		 * Creates page for miscellaneous variable preferences.
+		 */
+		private void createMiscellaneousPage(Composite parent) {
+			GridLayoutFactory.create(parent).columns(2).equalColumns();
+			// variable in component
+			checkButton(
+					parent,
+					Messages.VariablesPreferencePage_miscRememberName,
+					IPreferenceConstants.P_VARIABLE_IN_COMPONENT);
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Type specific
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    private List<ComponentNameDescription> m_descriptions;
-    private TableViewer m_namesViewer;
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Type specific
+		//
+		////////////////////////////////////////////////////////////////////////////
+		private List<ComponentNameDescription> m_descriptions;
+		private TableViewer m_namesViewer;
 
-    /**
-     * Creates page for type specific variable options.
-     */
-    private void createTypeSpecificPage(Composite parent) {
-      GridLayoutFactory.create(parent).columns(2);
-      // viewer
-      {
-        m_namesViewer = new TableViewer(parent, SWT.BORDER | SWT.SINGLE | SWT.FULL_SELECTION);
-        GridDataFactory.create(m_namesViewer.getTable()).grab().fill();
-        Table table = m_namesViewer.getTable();
-        // columns
-        {
-          TableFactory tableFactory = TableFactory.modify(m_namesViewer);
-          tableFactory.linesVisible(true).headerVisible(true);
-          tableFactory.newColumn().text(Messages.VariablesPreferencePage_tsClassColumn).widthC(35);
-          tableFactory.newColumn().text(Messages.VariablesPreferencePage_tsDefaultNameColumn).widthC(
-              20);
-          tableFactory.newColumn().text(Messages.VariablesPreferencePage_tsAcronymColumn).widthC(15);
-          tableFactory.newColumn().text(Messages.VariablesPreferencePage_tsAsFieldColumn).widthC(15);
-        }
-        // providers
-        m_namesViewer.setContentProvider(new ArrayContentProvider());
-        m_namesViewer.setLabelProvider(new NamesLabelProvider());
-        // editing
-        m_namesViewer.setColumnProperties(new String[]{"class", "name", "acronym", "asField"});
-        m_namesViewer.setCellEditors(new CellEditor[]{
-            null,
-            new TextCellEditor(table),
-            new TextCellEditor(table),
-            new CheckboxCellEditor(table),});
-        m_namesViewer.setCellModifier(new NamesCellModifier());
-      }
-      // buttons
-      {
-        Composite buttonsComposite = new Composite(parent, SWT.NONE);
-        GridDataFactory.create(buttonsComposite).grabV().alignVT();
-        GridLayoutFactory.create(buttonsComposite).noMargins();
-        // add button
-        {
-          Button addButton = new Button(buttonsComposite, SWT.NONE);
-          GridDataFactory.create(addButton).fillH();
-          addButton.setText(Messages.VariablesPreferencePage_tsAddButton);
-          // operation
-          addButton.addListener(SWT.Selection, new Listener() {
-            @Override
-            public void handleEvent(Event event) {
-              InputDialog inputDialog =
-                  new InputDialog(getShell(),
-                      Messages.VariablesPreferencePage_tsAddTitle,
-                      Messages.VariablesPreferencePage_tsAddMessage,
-                      "",
-                      null);
-              if (inputDialog.open() == Window.OK) {
-                String className = inputDialog.getValue();
-                ComponentNameDescription description =
-                    NamesManager.getDefaultNameDescription(className);
-                m_descriptions.add(description);
-                m_namesViewer.add(description);
-                m_namesViewer.setSelection(new StructuredSelection(description));
-              }
-            }
-          });
-        }
-        // remove button
-        {
-          final Button removeButton = new Button(buttonsComposite, SWT.NONE);
-          GridDataFactory.create(removeButton).fillH();
-          removeButton.setText(Messages.VariablesPreferencePage_tsRemove);
-          // operation
-          removeButton.addListener(SWT.Selection, new Listener() {
-            @Override
-            public void handleEvent(Event event) {
-              ComponentNameDescription description =
-                  (ComponentNameDescription) ((IStructuredSelection) m_namesViewer.getSelection()).getFirstElement();
-              if (MessageDialog.openConfirm(
-                  getShell(),
-                  Messages.VariablesPreferencePage_tsRemoveTitle,
-                  MessageFormat.format(
-                      Messages.VariablesPreferencePage_tsRemoveMessage,
-                      description.getClassName()))) {
-                m_descriptions.remove(description);
-                m_namesViewer.remove(description);
-              }
-            }
-          });
-          // enable/disable
-          removeButton.setEnabled(false);
-          m_namesViewer.addSelectionChangedListener(new ISelectionChangedListener() {
-            @Override
-            public void selectionChanged(SelectionChangedEvent event) {
-              removeButton.setEnabled(!event.getSelection().isEmpty());
-            }
-          });
-        }
-      }
-      // set initial descriptions
-      m_descriptions = NamesManager.getNameDescriptions(m_toolkit, false);
-      m_namesViewer.setInput(m_descriptions);
-    }
+		/**
+		 * Creates page for type specific variable options.
+		 */
+		private void createTypeSpecificPage(Composite parent) {
+			GridLayoutFactory.create(parent).columns(2);
+			// viewer
+			{
+				m_namesViewer = new TableViewer(parent, SWT.BORDER | SWT.SINGLE | SWT.FULL_SELECTION);
+				GridDataFactory.create(m_namesViewer.getTable()).grab().fill();
+				Table table = m_namesViewer.getTable();
+				// columns
+				{
+					TableFactory tableFactory = TableFactory.modify(m_namesViewer);
+					tableFactory.linesVisible(true).headerVisible(true);
+					tableFactory.newColumn().text(Messages.VariablesPreferencePage_tsClassColumn).widthC(35);
+					tableFactory.newColumn().text(Messages.VariablesPreferencePage_tsDefaultNameColumn).widthC(
+							20);
+					tableFactory.newColumn().text(Messages.VariablesPreferencePage_tsAcronymColumn).widthC(15);
+					tableFactory.newColumn().text(Messages.VariablesPreferencePage_tsAsFieldColumn).widthC(15);
+				}
+				// providers
+				m_namesViewer.setContentProvider(new ArrayContentProvider());
+				m_namesViewer.setLabelProvider(new NamesLabelProvider());
+				// editing
+				m_namesViewer.setColumnProperties(new String[]{"class", "name", "acronym", "asField"});
+				m_namesViewer.setCellEditors(new CellEditor[]{
+						null,
+						new TextCellEditor(table),
+						new TextCellEditor(table),
+						new CheckboxCellEditor(table),});
+				m_namesViewer.setCellModifier(new NamesCellModifier());
+			}
+			// buttons
+			{
+				Composite buttonsComposite = new Composite(parent, SWT.NONE);
+				GridDataFactory.create(buttonsComposite).grabV().alignVT();
+				GridLayoutFactory.create(buttonsComposite).noMargins();
+				// add button
+				{
+					Button addButton = new Button(buttonsComposite, SWT.NONE);
+					GridDataFactory.create(addButton).fillH();
+					addButton.setText(Messages.VariablesPreferencePage_tsAddButton);
+					// operation
+					addButton.addListener(SWT.Selection, new Listener() {
+						@Override
+						public void handleEvent(Event event) {
+							InputDialog inputDialog =
+									new InputDialog(getShell(),
+											Messages.VariablesPreferencePage_tsAddTitle,
+											Messages.VariablesPreferencePage_tsAddMessage,
+											"",
+											null);
+							if (inputDialog.open() == Window.OK) {
+								String className = inputDialog.getValue();
+								ComponentNameDescription description =
+										NamesManager.getDefaultNameDescription(className);
+								m_descriptions.add(description);
+								m_namesViewer.add(description);
+								m_namesViewer.setSelection(new StructuredSelection(description));
+							}
+						}
+					});
+				}
+				// remove button
+				{
+					final Button removeButton = new Button(buttonsComposite, SWT.NONE);
+					GridDataFactory.create(removeButton).fillH();
+					removeButton.setText(Messages.VariablesPreferencePage_tsRemove);
+					// operation
+					removeButton.addListener(SWT.Selection, new Listener() {
+						@Override
+						public void handleEvent(Event event) {
+							ComponentNameDescription description =
+									(ComponentNameDescription) ((IStructuredSelection) m_namesViewer.getSelection()).getFirstElement();
+							if (MessageDialog.openConfirm(
+									getShell(),
+									Messages.VariablesPreferencePage_tsRemoveTitle,
+									MessageFormat.format(
+											Messages.VariablesPreferencePage_tsRemoveMessage,
+											description.getClassName()))) {
+								m_descriptions.remove(description);
+								m_namesViewer.remove(description);
+							}
+						}
+					});
+					// enable/disable
+					removeButton.setEnabled(false);
+					m_namesViewer.addSelectionChangedListener(new ISelectionChangedListener() {
+						@Override
+						public void selectionChanged(SelectionChangedEvent event) {
+							removeButton.setEnabled(!event.getSelection().isEmpty());
+						}
+					});
+				}
+			}
+			// set initial descriptions
+			m_descriptions = NamesManager.getNameDescriptions(m_toolkit, false);
+			m_namesViewer.setInput(m_descriptions);
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Type specific names: label provider
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    private static final Image IMAGE_FALSE =
-        DesignerPlugin.getImage("preferences/boolean_false.png");
-    private static final Image IMAGE_TRUE = DesignerPlugin.getImage("preferences/boolean_true.png");
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Type specific names: label provider
+		//
+		////////////////////////////////////////////////////////////////////////////
+		private static final Image IMAGE_FALSE =
+				DesignerPlugin.getImage("preferences/boolean_false.png");
+		private static final Image IMAGE_TRUE = DesignerPlugin.getImage("preferences/boolean_true.png");
 
-    /**
-     * Implementation of {@link ITableLabelProvider} for {@link ComponentNameDescription}.
-     */
-    private static class NamesLabelProvider extends LabelProvider implements ITableLabelProvider {
-      @Override
-      public Image getColumnImage(Object element, int columnIndex) {
-        ComponentNameDescription description = (ComponentNameDescription) element;
-        if (columnIndex == 3) {
-          return description.isAsField() ? IMAGE_TRUE : IMAGE_FALSE;
-        }
-        return null;
-      }
+		/**
+		 * Implementation of {@link ITableLabelProvider} for {@link ComponentNameDescription}.
+		 */
+		private static class NamesLabelProvider extends LabelProvider implements ITableLabelProvider {
+			@Override
+			public Image getColumnImage(Object element, int columnIndex) {
+				ComponentNameDescription description = (ComponentNameDescription) element;
+				if (columnIndex == 3) {
+					return description.isAsField() ? IMAGE_TRUE : IMAGE_FALSE;
+				}
+				return null;
+			}
 
-      @Override
-      public String getColumnText(Object element, int columnIndex) {
-        ComponentNameDescription description = (ComponentNameDescription) element;
-        if (columnIndex == 0) {
-          return description.getClassName();
-        }
-        if (columnIndex == 1) {
-          return description.getName();
-        }
-        if (columnIndex == 2) {
-          return description.getAcronym();
-        }
-        return null;
-      }
-    }
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Type specific names: modifier
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    /**
-     * Implementation of {@link ICellModifier} for {@link ComponentNameDescription}.
-     */
-    private class NamesCellModifier implements ICellModifier {
-      @Override
-      public Object getValue(Object element, String property) {
-        ComponentNameDescription description = (ComponentNameDescription) element;
-        if ("name".equals(property)) {
-          return description.getName();
-        }
-        if ("acronym".equals(property)) {
-          return description.getAcronym();
-        }
-        if ("asField".equals(property)) {
-          return description.isAsField() ? Boolean.TRUE : Boolean.FALSE;
-        }
-        return null;
-      }
+			@Override
+			public String getColumnText(Object element, int columnIndex) {
+				ComponentNameDescription description = (ComponentNameDescription) element;
+				if (columnIndex == 0) {
+					return description.getClassName();
+				}
+				if (columnIndex == 1) {
+					return description.getName();
+				}
+				if (columnIndex == 2) {
+					return description.getAcronym();
+				}
+				return null;
+			}
+		}
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Type specific names: modifier
+		//
+		////////////////////////////////////////////////////////////////////////////
+		/**
+		 * Implementation of {@link ICellModifier} for {@link ComponentNameDescription}.
+		 */
+		private class NamesCellModifier implements ICellModifier {
+			@Override
+			public Object getValue(Object element, String property) {
+				ComponentNameDescription description = (ComponentNameDescription) element;
+				if ("name".equals(property)) {
+					return description.getName();
+				}
+				if ("acronym".equals(property)) {
+					return description.getAcronym();
+				}
+				if ("asField".equals(property)) {
+					return description.isAsField() ? Boolean.TRUE : Boolean.FALSE;
+				}
+				return null;
+			}
 
-      @Override
-      public boolean canModify(Object element, String property) {
-        return "name".equals(property) || "acronym".equals(property) || "asField".equals(property);
-      }
+			@Override
+			public boolean canModify(Object element, String property) {
+				return "name".equals(property) || "acronym".equals(property) || "asField".equals(property);
+			}
 
-      @Override
-      public void modify(Object element, String property, Object value) {
-        // prepare description
-        ComponentNameDescription description;
-        {
-          if (element instanceof Item) {
-            element = ((Item) element).getData();
-          }
-          description = (ComponentNameDescription) element;
-        }
-        // update description
-        try {
-          if ("name".equals(property)) {
-            description.setName((String) value);
-          }
-          if ("acronym".equals(property)) {
-            description.setAcronym((String) value);
-          }
-          if ("asField".equals(property)) {
-            description.setAsField(((Boolean) value).booleanValue());
-          }
-          // refresh to display new values
-          m_namesViewer.refresh(description);
-        } catch (Throwable e) {
-          DesignerPlugin.log(e);
-        }
-      }
-    }
+			@Override
+			public void modify(Object element, String property, Object value) {
+				// prepare description
+				ComponentNameDescription description;
+				{
+					if (element instanceof Item) {
+						element = ((Item) element).getData();
+					}
+					description = (ComponentNameDescription) element;
+				}
+				// update description
+				try {
+					if ("name".equals(property)) {
+						description.setName((String) value);
+					}
+					if ("acronym".equals(property)) {
+						description.setAcronym((String) value);
+					}
+					if ("asField".equals(property)) {
+						description.setAsField(((Boolean) value).booleanValue());
+					}
+					// refresh to display new values
+					m_namesViewer.refresh(description);
+				} catch (Throwable e) {
+					DesignerPlugin.log(e);
+				}
+			}
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // State
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public boolean performOk() {
-      try {
-        NamesManager.setNameDescriptions(m_toolkit, m_descriptions);
-      } catch (Throwable e) {
-        DesignerPlugin.log(e);
-        MessageDialog.openError(
-            getShell(),
-            Messages.VariablesPreferencePage_setErrorTitle,
-            Messages.VariablesPreferencePage_setErrorMessage);
-        return false;
-      }
-      return super.performOk();
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// State
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public boolean performOk() {
+			try {
+				NamesManager.setNameDescriptions(m_toolkit, m_descriptions);
+			} catch (Throwable e) {
+				DesignerPlugin.log(e);
+				MessageDialog.openError(
+						getShell(),
+						Messages.VariablesPreferencePage_setErrorTitle,
+						Messages.VariablesPreferencePage_setErrorMessage);
+				return false;
+			}
+			return super.performOk();
+		}
 
-    @Override
-    public void performDefaults() {
-      {
-        m_descriptions = NamesManager.getNameDescriptions(m_toolkit, true);
-        m_namesViewer.setInput(m_descriptions);
-      }
-      super.performDefaults();
-    }
-  }
+		@Override
+		public void performDefaults() {
+			{
+				m_descriptions = NamesManager.getNameDescriptions(m_toolkit, true);
+				m_namesViewer.setInput(m_descriptions);
+			}
+			super.performDefaults();
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/preferences/event/EventsPreferencePage.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/preferences/event/EventsPreferencePage.java
index 5ad2bb9f1..e48daf816 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/preferences/event/EventsPreferencePage.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/preferences/event/EventsPreferencePage.java
@@ -43,241 +43,241 @@
  * @coverage core.preferences.ui
  */
 public abstract class EventsPreferencePage extends PreferencePage
-    implements
-      IPreferenceConstants,
-      IWorkbenchPreferencePage {
-  private final IPreferenceStore m_store;
-  private final DataBindManager m_bindManager = new DataBindManager();
+implements
+IPreferenceConstants,
+IWorkbenchPreferencePage {
+	private final IPreferenceStore m_store;
+	private final DataBindManager m_bindManager = new DataBindManager();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public EventsPreferencePage(IPreferenceStore preferenceStore) {
-    m_store = preferenceStore;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public EventsPreferencePage(IPreferenceStore preferenceStore) {
+		m_store = preferenceStore;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Button m_typeAnonymous;
-  private Button m_typeInnerClass;
-  private Button m_typeInterface;
-  private Combo m_innerClassPosition;
-  private Button m_createStubMethods;
-  private Combo m_stubMethodNameTemplate;
-  private Combo m_innerClassNameTemplate;
-  private Button m_deleteStubMethods;
-  private Button m_finalParameters;
-  private Button m_decorateIcon;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Button m_typeAnonymous;
+	private Button m_typeInnerClass;
+	private Button m_typeInterface;
+	private Combo m_innerClassPosition;
+	private Button m_createStubMethods;
+	private Combo m_stubMethodNameTemplate;
+	private Combo m_innerClassNameTemplate;
+	private Button m_deleteStubMethods;
+	private Button m_finalParameters;
+	private Button m_decorateIcon;
 
-  @Override
-  protected Control createContents(Composite parent) {
-    Composite container = new Composite(parent, SWT.NONE);
-    GridLayoutFactory.create(container).noMargins();
-    createControls(container);
-    return container;
-  }
+	@Override
+	protected Control createContents(Composite parent) {
+		Composite container = new Composite(parent, SWT.NONE);
+		GridLayoutFactory.create(container).noMargins();
+		createControls(container);
+		return container;
+	}
 
-  private void createControls(Composite container) {
-    {
-      Label eventCodeTypeLabel = new Label(container, SWT.NONE);
-      eventCodeTypeLabel.setText(Messages.EventsPreferencePage_typeLabel);
-    }
-    {
-      m_typeAnonymous = new Button(container, SWT.RADIO);
-      GridDataFactory.create(m_typeAnonymous).indentH(20);
-      m_typeAnonymous.setText(Messages.EventsPreferencePage_typeAnonymous);
-    }
-    {
-      m_typeInnerClass = new Button(container, SWT.RADIO);
-      GridDataFactory.create(m_typeInnerClass).indentH(20);
-      m_typeInnerClass.setText(Messages.EventsPreferencePage_typeInner);
-      m_bindManager.addUpdateEvent(m_typeInnerClass, SWT.Selection);
-      //
-      m_innerClassPosition = new Combo(container, SWT.READ_ONLY);
-      GridDataFactory.create(m_innerClassPosition).grabH().fillH().indentH(40);
-      m_innerClassPosition.setItems(new String[]{
-          Messages.EventsPreferencePage_typeInnerFirstInClass,
-          Messages.EventsPreferencePage_typeInnerLastInClass,
-          Messages.EventsPreferencePage_typeInnerBeforeFirstListener,
-          Messages.EventsPreferencePage_typeInnerAfterLastListener,});
-      UiUtils.setVisibleItemCount(m_innerClassPosition, m_innerClassPosition.getItemCount());
-      //
-      {
-        m_innerClassNameTemplate = new Combo(container, SWT.NONE);
-        GridDataFactory.create(m_innerClassNameTemplate).grabH().fill().indentH(40);
-        m_innerClassNameTemplate.setToolTipText(getInnerClassNameToolTipText());
-        m_innerClassNameTemplate.setItems(new String[]{
-            "${Component_name}${Listener_name}",
-            "${Component_name}${Listener_className}"});
-        UiUtils.setVisibleAll(m_innerClassNameTemplate);
-      }
-    }
-    {
-      m_typeInterface = new Button(container, SWT.RADIO);
-      GridDataFactory.create(m_typeInterface).indentH(20);
-      m_typeInterface.setText(Messages.EventsPreferencePage_typeInterface);
-    }
-    {
-      String toolTipText = getStubEventHandlerMethodNameToolTipText();
-      {
-        m_createStubMethods = new Button(container, SWT.CHECK);
-        m_createStubMethods.setText(Messages.EventsPreferencePage_stubLabel);
-        m_createStubMethods.setToolTipText(toolTipText);
-        m_bindManager.addUpdateEvent(m_createStubMethods, SWT.Selection);
-      }
-      {
-        m_stubMethodNameTemplate = new Combo(container, SWT.NONE);
-        GridDataFactory.create(m_stubMethodNameTemplate).grabH().fill().indentH(20);
-        m_stubMethodNameTemplate.setToolTipText(toolTipText);
-        m_stubMethodNameTemplate.setItems(new String[]{
-            "do_${component_name}_${event_name}",
-            "do${Component_name}${Event_name}",
-            "handle_${component_name}_${event_name}",
-            "handle${Component_name}${Event_name}",
-            "${component_name}${Event_name}",
-            "${event_name}${Component_name}",
-            "${event_name}${Component_name}${Component_class_name}"});
-        UiUtils.setVisibleAll(m_stubMethodNameTemplate);
-      }
-      {
-        Label patternsLabel = new Label(container, SWT.WRAP);
-        GridDataFactory.create(patternsLabel).grabH().fillH().indentH(20);
-        patternsLabel.setToolTipText(toolTipText);
-        patternsLabel.setText(Messages.EventsPreferencePage_patternHint1
-            + Messages.EventsPreferencePage_patternHint2
-            + Messages.EventsPreferencePage_patternHint3
-            + Messages.EventsPreferencePage_patternHint4
-            + Messages.EventsPreferencePage_patternHint5
-            + Messages.EventsPreferencePage_patternHint6);
-      }
-    }
-    {
-      m_deleteStubMethods = new Button(container, SWT.CHECK);
-      m_deleteStubMethods.setText(Messages.EventsPreferencePage_deleteStubsFlag);
-    }
-    {
-      m_finalParameters = new Button(container, SWT.CHECK);
-      m_finalParameters.setText(Messages.EventsPreferencePage_finalParametersFlag);
-    }
-    {
-      m_decorateIcon = new Button(container, SWT.CHECK);
-      m_decorateIcon.setText(Messages.EventsPreferencePage_decorateIconFlag);
-    }
-    // create bindings
-    {
-      m_bindManager.addUpdateRunnable(new Runnable() {
-        @Override
-        public void run() {
-          {
-            boolean inner = m_typeInnerClass.getSelection();
-            m_innerClassPosition.setEnabled(inner);
-            m_innerClassNameTemplate.setEnabled(inner);
-            m_createStubMethods.setEnabled(!inner);
-            m_stubMethodNameTemplate.setEnabled(!inner);
-          }
-          m_stubMethodNameTemplate.setEnabled(m_createStubMethods.getSelection());
-        }
-      });
-      m_bindManager.bind(new RadioButtonsEditor(container), new IntegerPreferenceProvider(m_store,
-          P_CODE_TYPE));
-      m_bindManager.bind(
-          new ComboSelectionEditor(m_innerClassPosition),
-          new IntegerPreferenceProvider(m_store, P_INNER_POSITION));
-      m_bindManager.bind(
-          new ComboTextEditor(m_innerClassNameTemplate),
-          new StringPreferenceProvider(m_store, P_INNER_NAME_TEMPLATE));
-      m_bindManager.bind(
-          new CheckButtonEditor(m_createStubMethods),
-          new BooleanPreferenceProvider(m_store, P_CREATE_STUB));
-      m_bindManager.bind(
-          new ComboTextEditor(m_stubMethodNameTemplate),
-          new StringPreferenceProvider(m_store, P_STUB_NAME_TEMPLATE));
-      m_bindManager.bind(
-          new CheckButtonEditor(m_deleteStubMethods),
-          new BooleanPreferenceProvider(m_store, P_DELETE_STUB));
-      m_bindManager.bind(
-          new CheckButtonEditor(m_finalParameters),
-          new BooleanPreferenceProvider(m_store, P_FINAL_PARAMETERS));
-      m_bindManager.bind(
-          new CheckButtonEditor(m_decorateIcon),
-          new BooleanPreferenceProvider(m_store, P_DECORATE_ICON));
-      m_bindManager.performUpdate();
-    }
-  }
+	private void createControls(Composite container) {
+		{
+			Label eventCodeTypeLabel = new Label(container, SWT.NONE);
+			eventCodeTypeLabel.setText(Messages.EventsPreferencePage_typeLabel);
+		}
+		{
+			m_typeAnonymous = new Button(container, SWT.RADIO);
+			GridDataFactory.create(m_typeAnonymous).indentH(20);
+			m_typeAnonymous.setText(Messages.EventsPreferencePage_typeAnonymous);
+		}
+		{
+			m_typeInnerClass = new Button(container, SWT.RADIO);
+			GridDataFactory.create(m_typeInnerClass).indentH(20);
+			m_typeInnerClass.setText(Messages.EventsPreferencePage_typeInner);
+			m_bindManager.addUpdateEvent(m_typeInnerClass, SWT.Selection);
+			//
+			m_innerClassPosition = new Combo(container, SWT.READ_ONLY);
+			GridDataFactory.create(m_innerClassPosition).grabH().fillH().indentH(40);
+			m_innerClassPosition.setItems(new String[]{
+					Messages.EventsPreferencePage_typeInnerFirstInClass,
+					Messages.EventsPreferencePage_typeInnerLastInClass,
+					Messages.EventsPreferencePage_typeInnerBeforeFirstListener,
+					Messages.EventsPreferencePage_typeInnerAfterLastListener,});
+			UiUtils.setVisibleItemCount(m_innerClassPosition, m_innerClassPosition.getItemCount());
+			//
+			{
+				m_innerClassNameTemplate = new Combo(container, SWT.NONE);
+				GridDataFactory.create(m_innerClassNameTemplate).grabH().fill().indentH(40);
+				m_innerClassNameTemplate.setToolTipText(getInnerClassNameToolTipText());
+				m_innerClassNameTemplate.setItems(new String[]{
+						"${Component_name}${Listener_name}",
+				"${Component_name}${Listener_className}"});
+				UiUtils.setVisibleAll(m_innerClassNameTemplate);
+			}
+		}
+		{
+			m_typeInterface = new Button(container, SWT.RADIO);
+			GridDataFactory.create(m_typeInterface).indentH(20);
+			m_typeInterface.setText(Messages.EventsPreferencePage_typeInterface);
+		}
+		{
+			String toolTipText = getStubEventHandlerMethodNameToolTipText();
+			{
+				m_createStubMethods = new Button(container, SWT.CHECK);
+				m_createStubMethods.setText(Messages.EventsPreferencePage_stubLabel);
+				m_createStubMethods.setToolTipText(toolTipText);
+				m_bindManager.addUpdateEvent(m_createStubMethods, SWT.Selection);
+			}
+			{
+				m_stubMethodNameTemplate = new Combo(container, SWT.NONE);
+				GridDataFactory.create(m_stubMethodNameTemplate).grabH().fill().indentH(20);
+				m_stubMethodNameTemplate.setToolTipText(toolTipText);
+				m_stubMethodNameTemplate.setItems(new String[]{
+						"do_${component_name}_${event_name}",
+						"do${Component_name}${Event_name}",
+						"handle_${component_name}_${event_name}",
+						"handle${Component_name}${Event_name}",
+						"${component_name}${Event_name}",
+						"${event_name}${Component_name}",
+				"${event_name}${Component_name}${Component_class_name}"});
+				UiUtils.setVisibleAll(m_stubMethodNameTemplate);
+			}
+			{
+				Label patternsLabel = new Label(container, SWT.WRAP);
+				GridDataFactory.create(patternsLabel).grabH().fillH().indentH(20);
+				patternsLabel.setToolTipText(toolTipText);
+				patternsLabel.setText(Messages.EventsPreferencePage_patternHint1
+						+ Messages.EventsPreferencePage_patternHint2
+						+ Messages.EventsPreferencePage_patternHint3
+						+ Messages.EventsPreferencePage_patternHint4
+						+ Messages.EventsPreferencePage_patternHint5
+						+ Messages.EventsPreferencePage_patternHint6);
+			}
+		}
+		{
+			m_deleteStubMethods = new Button(container, SWT.CHECK);
+			m_deleteStubMethods.setText(Messages.EventsPreferencePage_deleteStubsFlag);
+		}
+		{
+			m_finalParameters = new Button(container, SWT.CHECK);
+			m_finalParameters.setText(Messages.EventsPreferencePage_finalParametersFlag);
+		}
+		{
+			m_decorateIcon = new Button(container, SWT.CHECK);
+			m_decorateIcon.setText(Messages.EventsPreferencePage_decorateIconFlag);
+		}
+		// create bindings
+		{
+			m_bindManager.addUpdateRunnable(new Runnable() {
+				@Override
+				public void run() {
+					{
+						boolean inner = m_typeInnerClass.getSelection();
+						m_innerClassPosition.setEnabled(inner);
+						m_innerClassNameTemplate.setEnabled(inner);
+						m_createStubMethods.setEnabled(!inner);
+						m_stubMethodNameTemplate.setEnabled(!inner);
+					}
+					m_stubMethodNameTemplate.setEnabled(m_createStubMethods.getSelection());
+				}
+			});
+			m_bindManager.bind(new RadioButtonsEditor(container), new IntegerPreferenceProvider(m_store,
+					P_CODE_TYPE));
+			m_bindManager.bind(
+					new ComboSelectionEditor(m_innerClassPosition),
+					new IntegerPreferenceProvider(m_store, P_INNER_POSITION));
+			m_bindManager.bind(
+					new ComboTextEditor(m_innerClassNameTemplate),
+					new StringPreferenceProvider(m_store, P_INNER_NAME_TEMPLATE));
+			m_bindManager.bind(
+					new CheckButtonEditor(m_createStubMethods),
+					new BooleanPreferenceProvider(m_store, P_CREATE_STUB));
+			m_bindManager.bind(
+					new ComboTextEditor(m_stubMethodNameTemplate),
+					new StringPreferenceProvider(m_store, P_STUB_NAME_TEMPLATE));
+			m_bindManager.bind(
+					new CheckButtonEditor(m_deleteStubMethods),
+					new BooleanPreferenceProvider(m_store, P_DELETE_STUB));
+			m_bindManager.bind(
+					new CheckButtonEditor(m_finalParameters),
+					new BooleanPreferenceProvider(m_store, P_FINAL_PARAMETERS));
+			m_bindManager.bind(
+					new CheckButtonEditor(m_decorateIcon),
+					new BooleanPreferenceProvider(m_store, P_DECORATE_ICON));
+			m_bindManager.performUpdate();
+		}
+	}
 
-  /**
-   * @return the tooltip text for stub methods.
-   */
-  private static String getStubEventHandlerMethodNameToolTipText() {
-    StringBuffer buffer;
-    buffer = new StringBuffer();
-    buffer.append(Messages.EventsPreferencePage_stubPatternHint1);
-    buffer.append(Messages.EventsPreferencePage_stubPatternHint2);
-    buffer.append(Messages.EventsPreferencePage_stubPatternHint3);
-    buffer.append(Messages.EventsPreferencePage_stubPatternHint4);
-    buffer.append(Messages.EventsPreferencePage_stubPatternHint5);
-    buffer.append(Messages.EventsPreferencePage_stubPatternHint6);
-    buffer.append(Messages.EventsPreferencePage_stubPatternHint7);
-    buffer.append(Messages.EventsPreferencePage_stubPatternHint8);
-    buffer.append(Messages.EventsPreferencePage_stubPatternHint9);
-    buffer.append(Messages.EventsPreferencePage_stubPatternHint10);
-    buffer.append(Messages.EventsPreferencePage_stubPatternHint11);
-    buffer.append(Messages.EventsPreferencePage_stubPatternHint12);
-    return buffer.toString();
-  }
+	/**
+	 * @return the tooltip text for stub methods.
+	 */
+	private static String getStubEventHandlerMethodNameToolTipText() {
+		StringBuffer buffer;
+		buffer = new StringBuffer();
+		buffer.append(Messages.EventsPreferencePage_stubPatternHint1);
+		buffer.append(Messages.EventsPreferencePage_stubPatternHint2);
+		buffer.append(Messages.EventsPreferencePage_stubPatternHint3);
+		buffer.append(Messages.EventsPreferencePage_stubPatternHint4);
+		buffer.append(Messages.EventsPreferencePage_stubPatternHint5);
+		buffer.append(Messages.EventsPreferencePage_stubPatternHint6);
+		buffer.append(Messages.EventsPreferencePage_stubPatternHint7);
+		buffer.append(Messages.EventsPreferencePage_stubPatternHint8);
+		buffer.append(Messages.EventsPreferencePage_stubPatternHint9);
+		buffer.append(Messages.EventsPreferencePage_stubPatternHint10);
+		buffer.append(Messages.EventsPreferencePage_stubPatternHint11);
+		buffer.append(Messages.EventsPreferencePage_stubPatternHint12);
+		return buffer.toString();
+	}
 
-  /**
-   * @return the tooltip text for inner class name.
-   */
-  private static String getInnerClassNameToolTipText() {
-    StringBuffer buffer;
-    buffer = new StringBuffer();
-    buffer.append(Messages.EventsPreferencePage_innerPatternHint1);
-    buffer.append(Messages.EventsPreferencePage_innerPatternHint2);
-    buffer.append(Messages.EventsPreferencePage_innerPatternHint3);
-    buffer.append(Messages.EventsPreferencePage_innerPatternHint4);
-    buffer.append(Messages.EventsPreferencePage_innerPatternHint5);
-    buffer.append(Messages.EventsPreferencePage_innerPatternHint6);
-    buffer.append(Messages.EventsPreferencePage_innerPatternHint7);
-    buffer.append(Messages.EventsPreferencePage_innerPatternHint8);
-    buffer.append(Messages.EventsPreferencePage_innerPatternHint9);
-    buffer.append(Messages.EventsPreferencePage_innerPatternHint10);
-    buffer.append(Messages.EventsPreferencePage_innerPatternHint11);
-    buffer.append(Messages.EventsPreferencePage_innerPatternHint12);
-    buffer.append(Messages.EventsPreferencePage_innerPatternHint13);
-    buffer.append(Messages.EventsPreferencePage_innerPatternHint14);
-    buffer.append(Messages.EventsPreferencePage_innerPatternHint15);
-    return buffer.toString();
-  }
+	/**
+	 * @return the tooltip text for inner class name.
+	 */
+	private static String getInnerClassNameToolTipText() {
+		StringBuffer buffer;
+		buffer = new StringBuffer();
+		buffer.append(Messages.EventsPreferencePage_innerPatternHint1);
+		buffer.append(Messages.EventsPreferencePage_innerPatternHint2);
+		buffer.append(Messages.EventsPreferencePage_innerPatternHint3);
+		buffer.append(Messages.EventsPreferencePage_innerPatternHint4);
+		buffer.append(Messages.EventsPreferencePage_innerPatternHint5);
+		buffer.append(Messages.EventsPreferencePage_innerPatternHint6);
+		buffer.append(Messages.EventsPreferencePage_innerPatternHint7);
+		buffer.append(Messages.EventsPreferencePage_innerPatternHint8);
+		buffer.append(Messages.EventsPreferencePage_innerPatternHint9);
+		buffer.append(Messages.EventsPreferencePage_innerPatternHint10);
+		buffer.append(Messages.EventsPreferencePage_innerPatternHint11);
+		buffer.append(Messages.EventsPreferencePage_innerPatternHint12);
+		buffer.append(Messages.EventsPreferencePage_innerPatternHint13);
+		buffer.append(Messages.EventsPreferencePage_innerPatternHint14);
+		buffer.append(Messages.EventsPreferencePage_innerPatternHint15);
+		return buffer.toString();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void performDefaults() {
-    super.performDefaults();
-    m_bindManager.performDefault();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void performDefaults() {
+		super.performDefaults();
+		m_bindManager.performDefault();
+	}
 
-  @Override
-  public boolean performOk() {
-    m_bindManager.performCommit();
-    return true;
-  }
+	@Override
+	public boolean performOk() {
+		m_bindManager.performCommit();
+		return true;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Initialization
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void init(IWorkbench workbench) {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Initialization
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void init(IWorkbench workbench) {
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ast/AnonymousTypeDeclaration.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ast/AnonymousTypeDeclaration.java
index e47f1d154..72d3fd124 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ast/AnonymousTypeDeclaration.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ast/AnonymousTypeDeclaration.java
@@ -28,62 +28,62 @@
  * @coverage core.util.ast
  */
 public class AnonymousTypeDeclaration {
-  private static final String KEY = "AnonymousTypeDeclaration";
-  private static Class<?> m_class;
+	private static final String KEY = "AnonymousTypeDeclaration";
+	private static Class<?> m_class;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private AnonymousTypeDeclaration() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private AnonymousTypeDeclaration() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static boolean is(TypeDeclaration node) {
-    return node != null && node.getClass().getName().endsWith("AnonymousTypeDeclaration2");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static boolean is(TypeDeclaration node) {
+		return node != null && node.getClass().getName().endsWith("AnonymousTypeDeclaration2");
+	}
 
-  public static TypeDeclaration get(ASTNode node) {
-    return (TypeDeclaration) node.getProperty(KEY);
-  }
+	public static TypeDeclaration get(ASTNode node) {
+		return (TypeDeclaration) node.getProperty(KEY);
+	}
 
-  public static TypeDeclaration create(AnonymousClassDeclaration acd) {
-    ensureClass();
-    try {
-      Constructor<?> constructor = m_class.getConstructor(AnonymousClassDeclaration.class);
-      return (TypeDeclaration) constructor.newInstance(acd);
-    } catch (Throwable e) {
-      throw ReflectionUtils.propagate(e);
-    }
-  }
+	public static TypeDeclaration create(AnonymousClassDeclaration acd) {
+		ensureClass();
+		try {
+			Constructor<?> constructor = m_class.getConstructor(AnonymousClassDeclaration.class);
+			return (TypeDeclaration) constructor.newInstance(acd);
+		} catch (Throwable e) {
+			throw ReflectionUtils.propagate(e);
+		}
+	}
 
-  private static void ensureClass() {
-    try {
-      if (m_class == null) {
-        Method defineMethod =
-            ClassLoader.class.getDeclaredMethod("defineClass", new Class[]{
-                String.class,
-                byte[].class,
-                int.class,
-                int.class});
-        defineMethod.setAccessible(true);
-        InputStream stream =
-            AnonymousTypeDeclaration.class.getResourceAsStream("AnonymousTypeDeclaration2.clazz");
-        byte[] bytes = IOUtils2.readBytes(stream);
-        m_class =
-            (Class<?>) defineMethod.invoke(TypeDeclaration.class.getClassLoader(), new Object[]{
-                "org.eclipse.jdt.core.dom.AnonymousTypeDeclaration2",
-                bytes,
-                0,
-                bytes.length});
-      }
-    } catch (Throwable e) {
-      throw ReflectionUtils.propagate(e);
-    }
-  }
+	private static void ensureClass() {
+		try {
+			if (m_class == null) {
+				Method defineMethod =
+						ClassLoader.class.getDeclaredMethod("defineClass", new Class[]{
+								String.class,
+								byte[].class,
+								int.class,
+								int.class});
+				defineMethod.setAccessible(true);
+				InputStream stream =
+						AnonymousTypeDeclaration.class.getResourceAsStream("AnonymousTypeDeclaration2.clazz");
+				byte[] bytes = IOUtils2.readBytes(stream);
+				m_class =
+						(Class<?>) defineMethod.invoke(TypeDeclaration.class.getClassLoader(), new Object[]{
+								"org.eclipse.jdt.core.dom.AnonymousTypeDeclaration2",
+								bytes,
+								0,
+								bytes.length});
+			}
+		} catch (Throwable e) {
+			throw ReflectionUtils.propagate(e);
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ast/AstCodeGeneration.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ast/AstCodeGeneration.java
index 2161c1d77..561e8adb0 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ast/AstCodeGeneration.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ast/AstCodeGeneration.java
@@ -33,186 +33,186 @@
  * @coverage core.util.ast
  */
 public final class AstCodeGeneration {
-  private final AstEditor m_editor;
-  private String endOfLine = null;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AstCodeGeneration(AstEditor editor) {
-    m_editor = editor;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Internal access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Forward for {@link AstEditor#getModelUnit()}.
-   */
-  private ICompilationUnit getModelUnit() {
-    return m_editor.getModelUnit();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation constants
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * The default end-of-line marker for the current platform. This value should (almost) never be
-   * used directly. The end-of-line marker should always be queried from the editor because it can
-   * differ from the platform default in some situations. The only exception is if code is being
-   * constructed for a new file, in which case there is no editor to ask.
-   */
-  public static final String DEFAULT_END_OF_LINE = System.getProperty("line.separator", "\n");
-
-  /**
-   * Return the string of characters that is to be used to indent code the given number of levels.
-   *
-   * @param levels
-   *          the number of levels of indentation to be returned
-   *
-   * @return the string of characters that is to be used to indent code
-   */
-  public String getIndentation(int levels) {
-    Assert.isTrue(levels >= 0);
-    if (levels == 0) {
-      return "";
-    }
-    // prepare indentation character and count of them for single level
-    String indentationChar;
-    int count;
-    {
-      String tabChar = getTabChar();
-      if (tabChar != null && tabChar.toLowerCase().equals("space")) {
-        indentationChar = " ";
-        count = 4;
-        try {
-          String tabSize = getTabSize();
-          count = Integer.parseInt(tabSize);
-        } catch (Throwable e) {
-        }
-      } else {
-        indentationChar = "\t";
-        count = 1;
-      }
-    }
-    // return result
-    return StringUtils.repeat(indentationChar, count * levels);
-  }
-
-  /**
-   * @return the end-of-line marker for this compilation unit.
-   */
-  public String getEndOfLine() throws Exception {
-    if (endOfLine == null) {
-      endOfLine = DEFAULT_END_OF_LINE;
-      endOfLine = getEndOfLineForBuffer(m_editor.getBuffer());
-    }
-    return endOfLine;
-  }
-
-  /**
-   * @return the separator between method name and opening brace of method body.
-   */
-  public String getMethodBraceSeparator(String prefix) throws Exception {
-    if (getInsertEndOfLineBeforeOpeningBrace()) {
-      return getEndOfLine() + prefix;
-    } else {
-      return " ";
-    }
-  }
-
-  /**
-   * @return the end-of-line marker for given {@link StringBuffer}.
-   */
-  private static String getEndOfLineForBuffer(Document document) throws Exception {
-    // prepare set of existing EOL's
-    Set<String> existingMarkers = Sets.newTreeSet();
-    {
-      int numberOfLines = document.getNumberOfLines();
-      for (int i = 0; i < numberOfLines; i++) {
-        String delimiter = document.getLineDelimiter(i);
-        if (delimiter != null) {
-          existingMarkers.add(delimiter);
-        }
-      }
-    }
-    // return default or first EOL
-    if (existingMarkers.isEmpty() || existingMarkers.contains(DEFAULT_END_OF_LINE)) {
-      return DEFAULT_END_OF_LINE;
-    } else {
-      return existingMarkers.iterator().next();
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Preference Accessing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Return <code>true</code> if the user wants to have an end-of-line marker inserted before each
-   * opening brace.
-   *
-   * @return <code>true</code> if an end-of-line marker should be inserted before each opening brace
-   */
-  public boolean getInsertEndOfLineBeforeOpeningBrace() {
-    Map<String, String> javaOptions = getJavaOptions();
-    String value =
-        javaOptions.get(DefaultCodeFormatterConstants.FORMATTER_BRACE_POSITION_FOR_METHOD_DECLARATION);
-    return value != null && value.equals(DefaultCodeFormatterConstants.NEXT_LINE);
-  }
-
-  /**
-   * Return a string indicating the number of spaces the user wants to use to indent their code. The
-   * value is either <code>"space"</code> or <code>"tab"</code>.
-   *
-   * @return a string indicating the number of spaces the user wants to use
-   */
-  public String getTabChar() {
-    Map<String, String> javaOptions = getJavaOptions();
-    return javaOptions.get(DefaultCodeFormatterConstants.FORMATTER_TAB_CHAR);
-  }
-
-  /**
-   * Return a string indicating whether the user wants to use spaces or tabs to indent their code.
-   * The value is a sequence of digits encoding a positive integer value.
-   *
-   * @return a string indicating whether the user wants to use spaces or tabs
-   */
-  public String getTabSize() {
-    Map<String, String> javaOptions = getJavaOptions();
-    return javaOptions.get(DefaultCodeFormatterConstants.FORMATTER_TAB_SIZE);
-  }
-
-  /**
-   * Return <code>true</code> if the user wants to have assignments formatted without a space before
-   * the assignment operator.
-   *
-   * @return <code>true</code> assignments should be formatted without a space before the assignment
-   *         operator
-   */
-  public boolean getUseCompactAssignment() {
-    Map<String, String> javaOptions = getJavaOptions();
-    String value =
-        javaOptions.get(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_ASSIGNMENT_OPERATOR);
-    return value != null && !value.equals(JavaCore.INSERT);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Internal
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link Map} with {@link IJavaProject} options.
-   */
-  private Map<String, String> getJavaOptions() {
-    return ProjectUtils.getOptions(getModelUnit().getJavaProject());
-  }
+	private final AstEditor m_editor;
+	private String endOfLine = null;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AstCodeGeneration(AstEditor editor) {
+		m_editor = editor;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Internal access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Forward for {@link AstEditor#getModelUnit()}.
+	 */
+	private ICompilationUnit getModelUnit() {
+		return m_editor.getModelUnit();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation constants
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * The default end-of-line marker for the current platform. This value should (almost) never be
+	 * used directly. The end-of-line marker should always be queried from the editor because it can
+	 * differ from the platform default in some situations. The only exception is if code is being
+	 * constructed for a new file, in which case there is no editor to ask.
+	 */
+	public static final String DEFAULT_END_OF_LINE = System.getProperty("line.separator", "\n");
+
+	/**
+	 * Return the string of characters that is to be used to indent code the given number of levels.
+	 *
+	 * @param levels
+	 *          the number of levels of indentation to be returned
+	 *
+	 * @return the string of characters that is to be used to indent code
+	 */
+	public String getIndentation(int levels) {
+		Assert.isTrue(levels >= 0);
+		if (levels == 0) {
+			return "";
+		}
+		// prepare indentation character and count of them for single level
+		String indentationChar;
+		int count;
+		{
+			String tabChar = getTabChar();
+			if (tabChar != null && tabChar.toLowerCase().equals("space")) {
+				indentationChar = " ";
+				count = 4;
+				try {
+					String tabSize = getTabSize();
+					count = Integer.parseInt(tabSize);
+				} catch (Throwable e) {
+				}
+			} else {
+				indentationChar = "\t";
+				count = 1;
+			}
+		}
+		// return result
+		return StringUtils.repeat(indentationChar, count * levels);
+	}
+
+	/**
+	 * @return the end-of-line marker for this compilation unit.
+	 */
+	public String getEndOfLine() throws Exception {
+		if (endOfLine == null) {
+			endOfLine = DEFAULT_END_OF_LINE;
+			endOfLine = getEndOfLineForBuffer(m_editor.getBuffer());
+		}
+		return endOfLine;
+	}
+
+	/**
+	 * @return the separator between method name and opening brace of method body.
+	 */
+	public String getMethodBraceSeparator(String prefix) throws Exception {
+		if (getInsertEndOfLineBeforeOpeningBrace()) {
+			return getEndOfLine() + prefix;
+		} else {
+			return " ";
+		}
+	}
+
+	/**
+	 * @return the end-of-line marker for given {@link StringBuffer}.
+	 */
+	private static String getEndOfLineForBuffer(Document document) throws Exception {
+		// prepare set of existing EOL's
+		Set<String> existingMarkers = Sets.newTreeSet();
+		{
+			int numberOfLines = document.getNumberOfLines();
+			for (int i = 0; i < numberOfLines; i++) {
+				String delimiter = document.getLineDelimiter(i);
+				if (delimiter != null) {
+					existingMarkers.add(delimiter);
+				}
+			}
+		}
+		// return default or first EOL
+		if (existingMarkers.isEmpty() || existingMarkers.contains(DEFAULT_END_OF_LINE)) {
+			return DEFAULT_END_OF_LINE;
+		} else {
+			return existingMarkers.iterator().next();
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Preference Accessing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Return <code>true</code> if the user wants to have an end-of-line marker inserted before each
+	 * opening brace.
+	 *
+	 * @return <code>true</code> if an end-of-line marker should be inserted before each opening brace
+	 */
+	public boolean getInsertEndOfLineBeforeOpeningBrace() {
+		Map<String, String> javaOptions = getJavaOptions();
+		String value =
+				javaOptions.get(DefaultCodeFormatterConstants.FORMATTER_BRACE_POSITION_FOR_METHOD_DECLARATION);
+		return value != null && value.equals(DefaultCodeFormatterConstants.NEXT_LINE);
+	}
+
+	/**
+	 * Return a string indicating the number of spaces the user wants to use to indent their code. The
+	 * value is either <code>"space"</code> or <code>"tab"</code>.
+	 *
+	 * @return a string indicating the number of spaces the user wants to use
+	 */
+	public String getTabChar() {
+		Map<String, String> javaOptions = getJavaOptions();
+		return javaOptions.get(DefaultCodeFormatterConstants.FORMATTER_TAB_CHAR);
+	}
+
+	/**
+	 * Return a string indicating whether the user wants to use spaces or tabs to indent their code.
+	 * The value is a sequence of digits encoding a positive integer value.
+	 *
+	 * @return a string indicating whether the user wants to use spaces or tabs
+	 */
+	public String getTabSize() {
+		Map<String, String> javaOptions = getJavaOptions();
+		return javaOptions.get(DefaultCodeFormatterConstants.FORMATTER_TAB_SIZE);
+	}
+
+	/**
+	 * Return <code>true</code> if the user wants to have assignments formatted without a space before
+	 * the assignment operator.
+	 *
+	 * @return <code>true</code> assignments should be formatted without a space before the assignment
+	 *         operator
+	 */
+	public boolean getUseCompactAssignment() {
+		Map<String, String> javaOptions = getJavaOptions();
+		String value =
+				javaOptions.get(DefaultCodeFormatterConstants.FORMATTER_INSERT_SPACE_BEFORE_ASSIGNMENT_OPERATOR);
+		return value != null && !value.equals(JavaCore.INSERT);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Internal
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link Map} with {@link IJavaProject} options.
+	 */
+	private Map<String, String> getJavaOptions() {
+		return ProjectUtils.getOptions(getModelUnit().getJavaProject());
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ast/AstEditor.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ast/AstEditor.java
index 8a07f3203..043dff50d 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ast/AstEditor.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ast/AstEditor.java
@@ -101,3594 +101,3594 @@
  * @coverage core.util.ast
  */
 public final class AstEditor {
-  public static final String DEFAULT_END_OF_LINE = System.getProperty("line.separator", "\n");
-  private static final String REMOVED_COMMENT = "ASTEditor.REMOVED_COMMENT";
-  private final ICompilationUnit m_modelUnit;
-  private final CompilationUnit m_astUnit;
-  private String m_oldContent;
-  private final Document m_document;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AstEditor(ICompilationUnit modelUnit) throws Exception {
-    m_modelUnit = modelUnit;
-    m_astUnit = CodeUtils.parseCompilationUnit(modelUnit);
-    m_oldContent = m_modelUnit.getBuffer().getContents();
-    m_document = new Document(m_oldContent);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link IJavaProject}.
-   */
-  public IJavaProject getJavaProject() {
-    return m_modelUnit.getJavaProject();
-  }
-
-  /**
-   * @return the {@link IProject}.
-   */
-  public IProject getProject() {
-    return getJavaProject().getProject();
-  }
-
-  /**
-   * @return {@link ICompilationUnit} - model unit.
-   */
-  public ICompilationUnit getModelUnit() {
-    return m_modelUnit;
-  }
-
-  /**
-   * @return {@link CompilationUnit} - ast unit.
-   */
-  public CompilationUnit getAstUnit() {
-    return m_astUnit;
-  }
-
-  /**
-   * @return <code>true</code> if {@link CompilationUnit} has error problems.
-   */
-  public boolean hasCompilationErrors() {
-    for (IProblem problem : m_astUnit.getProblems()) {
-      if (problem.isError()) {
-        return true;
-      }
-    }
-    return false;
-  }
-
-  /**
-   * @return the primary {@link TypeDeclaration}.
-   */
-  public TypeDeclaration getPrimaryType() {
-    String unitName = m_modelUnit.getElementName();
-    String typeName = StringUtils.removeEnd(unitName, ".java");
-    return AstNodeUtils.getTypeByName(m_astUnit, typeName);
-  }
-
-  /**
-   * @return the {@link IType} of given {@link TypeDeclaration}.
-   */
-  public IType getModelType(TypeDeclaration typeDeclaration) {
-    String name = typeDeclaration.getName().getIdentifier();
-    return m_modelUnit.getType(name);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // "Enclosing" utilities
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link ASTNode} that starts with given source, such that there are no child node
-   *         that also covers same position.
-   */
-  public ASTNode getEnclosingNode(String source) {
-    int position = getSource().indexOf(source);
-    Assert.isTrue(position != -1, "Can not find %s in %s.", source, getSource());
-    return AstNodeUtils.getEnclosingNode(m_astUnit, position);
-  }
-
-  /**
-   * @return the {@link ASTNode} that covers passed position, such that there are no child node that
-   *         also covers same position.
-   */
-  public ASTNode getEnclosingNode(int position) {
-    return AstNodeUtils.getEnclosingNode(m_astUnit, position);
-  }
-
-  /**
-   * @return the {@link Statement} that encloses given position.
-   */
-  public Statement getEnclosingStatement(int position) {
-    return AstNodeUtils.getEnclosingStatement(getEnclosingNode(position));
-  }
-
-  /**
-   * @return the {@link Block} that encloses given position.
-   */
-  public Block getEnclosingBlock(int position) {
-    return AstNodeUtils.getEnclosingBlock(getEnclosingNode(position));
-  }
-
-  /**
-   * @return the {@link MethodDeclaration} that encloses given position.
-   */
-  public MethodDeclaration getEnclosingMethod(int position) {
-    return AstNodeUtils.getEnclosingMethod(getEnclosingNode(position));
-  }
-
-  /**
-   * @return the {@link TypeDeclaration} that encloses given position.
-   */
-  public TypeDeclaration getEnclosingType(int position) {
-    return AstNodeUtils.getEnclosingType(getEnclosingNode(position));
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commit
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private IASTEditorCommitListener m_commitListener;
-
-  /**
-   * Sets the {@link IASTEditorCommitListener}.
-   */
-  public void setCommitListener(IASTEditorCommitListener commitListener) {
-    m_commitListener = commitListener;
-  }
-
-  /**
-   * Saves current source code into underlying {@link ICompilationUnit}.
-   */
-  public void commitChanges() throws Exception {
-    // pre-listener
-    if (m_commitListener != null) {
-      m_commitListener.aboutToCommit();
-    }
-    // set contents, if changed
-    {
-      String newContent = m_document.get();
-      if (!m_oldContent.equals(newContent)
-          && (m_commitListener == null || m_commitListener.canEditBaseFile())) {
-        int[] intervals = StringUtilities.getDifferenceIntervals(m_oldContent, newContent);
-        m_modelUnit.getBuffer().replace(
-            intervals[0],
-            intervals[1],
-            newContent.substring(intervals[2], intervals[2] + intervals[3]));
-        m_oldContent = newContent;
-      }
-    }
-    // post-listener
-    if (m_commitListener != null) {
-      m_commitListener.commitDone();
-    }
-  }
-
-  /**
-   * Commits changes into {@link ICompilationUnit} and saves it, if not opened in editor.
-   */
-  public void saveChanges(boolean forceSave) throws Exception {
-    commitChanges();
-    // save, if not working copy, i.e. not opened in editor
-    if (forceSave || !m_modelUnit.isWorkingCopy()) {
-      m_modelUnit.getBuffer().save(null, false);
-      m_modelUnit.save(null, false);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Text reading
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the character from document.
-   */
-  public char getChar(int position) {
-    try {
-      return m_document.getChar(position);
-    } catch (BadLocationException e) {
-      throw ReflectionUtils.propagate(e);
-    }
-  }
-
-  /**
-   * @return the whitespace substring that ends at given <code>end</code> position and starts
-   *         somewhere before it.
-   *
-   * @param includeEOL
-   *          is <code>true</code> if characters '\r' and '\n' also should be skipped.
-   */
-  public String getWhitespaceToLeft(int end, boolean includeEOL) {
-    // find first non-whitespace index
-    int start = end;
-    while (start != 0) {
-      char c = getChar(start - 1);
-      // in any case we need whitespace
-      if (!Character.isWhitespace(c)) {
-        break;
-      }
-      // if EOL is not enabled, check \r and \n
-      if (!includeEOL && (c == '\r' || c == '\n')) {
-        break;
-      }
-      //
-      start--;
-    }
-    // return result
-    return getSourceBeginEnd(start, end);
-  }
-
-  /**
-   * @return the line number that contains given index.
-   */
-  public int getLineNumber(int index) {
-    try {
-      return m_document.getLineOfOffset(index);
-    } catch (Throwable e) {
-      throw ReflectionUtils.propagate(e);
-    }
-  }
-
-  /**
-   * @return the index of first character of line that contains given index.
-   */
-  public int getLineBegin(int index) {
-    try {
-      IRegion lineInformation = m_document.getLineInformationOfOffset(index);
-      return lineInformation.getOffset();
-    } catch (Throwable e) {
-      throw ReflectionUtils.propagate(e);
-    }
-  }
-
-  /**
-   * @return the index of the first character of the end-of-line marker for the line containing the
-   *         given position, or the length of the source if the position is on the last line and is
-   *         therefore not followed by an end-of-line marker.
-   */
-  public int getLineEnd(int index) {
-    try {
-      IRegion lineInformation = m_document.getLineInformationOfOffset(index);
-      return lineInformation.getOffset() + lineInformation.getLength();
-    } catch (Throwable e) {
-      throw ReflectionUtils.propagate(e);
-    }
-  }
-
-  /**
-   * @return the index of first non-whitespace character.
-   *
-   * @param includeEOL
-   *          is <code>true</code> if characters '\r' and '\n' also should be skipped.
-   */
-  public int skipWhitespaceToLeft(int end, boolean includeEOL) {
-    // find first non-whitespace index
-    int start = end;
-    while (start != 0) {
-      char c = getChar(start - 1);
-      // in any case we need whitespace
-      if (!Character.isWhitespace(c)) {
-        break;
-      }
-      // if EOL is not enabled, check \r and \n
-      if (!includeEOL && (c == '\r' || c == '\n')) {
-        break;
-      }
-      //
-      start--;
-    }
-    // return result
-    return start;
-  }
-
-  /**
-   * @return the index of first non-whitespace character or start of first line that is empty or
-   *         contains only end of line comments (EOLC).
-   */
-  public int skipWhitespaceAndPureEOLCToLeft(int end) throws Exception {
-    // skip whitespace to the left
-    int index = end - getWhitespaceToLeft(end, false).length();
-    if (index == 0) {
-      return index;
-    }
-    // skip lines with pure EOLC
-    while (true) {
-      int line = m_document.getLineOfOffset(index - 1);
-      int lineOffset = m_document.getLineOffset(line);
-      String lineString = getSource(lineOffset, m_document.getLineLength(line));
-      int firstNonWhitespace = StringUtils.indexOfAnyBut(lineString, " \t\r\n");
-      // check for empty line
-      if (firstNonWhitespace == -1) {
-        index = lineOffset;
-        continue;
-      }
-      // check if line starts with EOLC, so contains only it
-      if (lineString.substring(firstNonWhitespace).startsWith("//")) {
-        index = lineOffset;
-        continue;
-      }
-      // previous line was last empty one
-      break;
-    }
-    //
-    return index;
-  }
-
-  /**
-   * If characters at left are EOL, skip one.
-   */
-  public int skipSingleEOLToLeft(int index) throws Exception {
-    if (m_document.getChar(index - 1) == '\n') {
-      index--;
-    }
-    if (m_document.getChar(index - 1) == '\r') {
-      index--;
-    }
-    return index;
-  }
-
-  /**
-   * @return single source {@link String} for given lines of source.
-   *
-   * @param lines
-   *          the lines of source
-   * @param indent
-   *          the "base" indentation
-   * @param singleIndent
-   *          the indentation that to replace each leading "\t"
-   * @param eol
-   *          the EOL string
-   */
-  private static String getIndentedSource(List<String> lines,
-      String indent,
-      String singleIndent,
-      String eol) {
-    StringBuffer buffer = new StringBuffer();
-    for (String line : lines) {
-      // EOL
-      if (buffer.length() != 0) {
-        buffer.append(eol);
-      }
-      // indentation
-      buffer.append(indent);
-      // line
-      if (line.length() != 0) {
-        int tabsCount = StringUtils.indexOfAnyBut(line, "\t");
-        if (tabsCount != -1) {
-          buffer.append(StringUtils.repeat(singleIndent, tabsCount));
-          buffer.append(line.substring(tabsCount));
-        } else {
-          buffer.append(StringUtils.repeat(singleIndent, line.length()));
-        }
-      }
-    }
-    return buffer.toString();
-  }
-
-  /**
-   * @return the first occurrence of given sub-string.
-   *
-   * @throws IllegalArgumentException
-   *           if no such index can be found.
-   */
-  public int indexOf(String subString) {
-    return indexOf(subString, 0);
-  }
-
-  /**
-   * @return the first occurrence of given sub-string.
-   *
-   * @throws IllegalArgumentException
-   *           if no such index can be found.
-   */
-  public int indexOf(String subString, int startPos) {
-    int index = indexOf_noEx(subString, startPos);
-    if (index != -1) {
-      return index;
-    }
-    // not found
-    throw new IllegalArgumentException("Can not find '" + subString + "' starting from " + startPos);
-  }
-
-  /**
-   * @return the first occurrence of given sub-string, may be <code>-1</code> if not found.
-   */
-  private int indexOf_noEx(String subString, int startPos) {
-    return m_document.get().indexOf(subString, startPos);
-  }
-
-  /**
-   * @return the first index of any character in the given set of characters.
-   *
-   * @throws IllegalArgumentException
-   *           if no such index can be found.
-   */
-  private int indexOfAny(String searchChars, int startPos) throws Exception {
-    for (int i = startPos; i < m_document.getLength(); i++) {
-      char c = m_document.getChar(i);
-      for (int j = 0; j < searchChars.length(); j++) {
-        if (searchChars.charAt(j) == c) {
-          return i;
-        }
-      }
-    }
-    // not found
-    throw new IllegalArgumentException("Can not find '"
-        + searchChars
-        + "' starting from "
-        + startPos);
-  }
-
-  /**
-   * @return the first index of any character not in the given set of characters.
-   *
-   * @throws IllegalArgumentException
-   *           if no such index can be found.
-   */
-  private int indexOfAnyBut(String searchChars, int startPos) throws Exception {
-    outer : for (int i = startPos; i < m_document.getLength(); i++) {
-      char c = m_document.getChar(i);
-      for (int j = 0; j < searchChars.length(); j++) {
-        if (searchChars.charAt(j) == c) {
-          continue outer;
-        }
-      }
-      return i;
-    }
-    // not found
-    throw new IllegalArgumentException("Can not find '"
-        + searchChars
-        + "' starting from "
-        + startPos);
-  }
-
-  /**
-   * @return the nearest index of character when move backward from given position.
-   *
-   * @throws IllegalArgumentException
-   *           if no such index can be found.
-   */
-  public int indexOfCharBackward(char searchChar, int endPos) {
-    for (int i = endPos - 1; i != 0; i--) {
-      char c = getChar(i);
-      if (c == searchChar) {
-        return i;
-      }
-    }
-    // not found
-    throw new IllegalArgumentException("Can not find '" + searchChar + "' starting from " + endPos);
-  }
-
-  /**
-   * @return the first index of any character not in the given set of characters.
-   *
-   * @throws IllegalArgumentException
-   *           if no such index can be found.
-   */
-  private int indexOfAnyButBackward(String searchChars, int startPos) throws Exception {
-    outer : for (int i = startPos - 1; i != 0; i--) {
-      char c = m_document.getChar(i);
-      for (int j = 0; j < searchChars.length(); j++) {
-        if (searchChars.charAt(j) == c) {
-          continue outer;
-        }
-      }
-      return i;
-    }
-    // not found
-    throw new IllegalArgumentException("Can not find '"
-        + searchChars
-        + "' starting from "
-        + startPos);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // EOL comments
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the index of passed {@link StringLiteral} on same line.
-   */
-  public int getStringLiteralNumberOnLine(StringLiteral stringLiteral) {
-    final int slLine = getLineNumber(stringLiteral.getStartPosition());
-    // find shortest node that fills full line
-    ASTNode lineNode = stringLiteral;
-    while (getLineNumber(lineNode.getStartPosition()) == slLine
-        && getLineNumber(lineNode.getStartPosition() + lineNode.getLength()) == slLine) {
-      lineNode = lineNode.getParent();
-    }
-    // find all literals on this line
-    final List<StringLiteral> literals = Lists.newArrayList();
-    lineNode.accept(new ASTVisitor() {
-      @Override
-      public void endVisit(StringLiteral literal) {
-        if (getLineNumber(literal.getStartPosition()) == slLine) {
-          literals.add(literal);
-        }
-      }
-    });
-    // find index of given literal
-    return literals.indexOf(stringLiteral);
-  }
-
-  /**
-   * Insert the given EOL comment at the end of the line containing the given position.
-   */
-  public void addEndOfLineComment(int position, String comment) throws Exception {
-    int endOfLinePosition = getLineEnd(position);
-    replaceSubstring(endOfLinePosition, 0, comment);
-  }
-
-  /**
-   * @return the end of line comment (including leading <code>"//"</code>) at the end of the line
-   *         containing the given position.
-   */
-  public String getEndOfLineComment(int position) {
-    int lineBegin = getLineBegin(position);
-    int lineEnd = getLineEnd(position);
-    int commentBegin = indexOf_noEx("//", lineBegin);
-    if (commentBegin != -1 && commentBegin < lineEnd) {
-      return getSource(commentBegin, lineEnd - commentBegin);
-    }
-    return null;
-  }
-
-  /**
-   * Remove the end of line comment at the end of the line containing the given position.
-   */
-  public void removeEndOfLineComment(int position, String commentToRemove) throws Exception {
-    int lineBegin = getLineBegin(position);
-    int lineEnd = getLineEnd(position);
-    int commentBegin = indexOf_noEx(commentToRemove, lineBegin);
-    if (commentBegin != -1 && commentBegin < lineEnd) {
-      int commentEnd = commentBegin + commentToRemove.length();
-      // update comment end
-      commentEnd = indexOfAnyBut(" \t", commentEnd);
-      // replace
-      replaceSubstring(commentBegin, commentEnd - commentBegin, "");
-      // remove leading whitespace (but keep at least one, if there is comment)
-      {
-        int newCommentBegin = indexOfAnyButBackward(" \t", commentBegin) + 1;
-        if (newCommentBegin != commentBegin) {
-          if (m_document.get(commentBegin, 2).equals("//")) {
-            newCommentBegin++;
-          }
-          replaceSubstring(newCommentBegin, commentBegin - newCommentBegin, "");
-        }
-      }
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Text editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the internal {@link Document}, should be used only internally.
-   */
-  Document getBuffer() {
-    return m_document;
-  }
-
-  /**
-   * @return the full source of {@link CompilationUnit}.
-   */
-  public String getSource() {
-    return m_document.get();
-  }
-
-  /**
-   * Sets the full source of {@link CompilationUnit}. Note that it does not update AST, so
-   * practically can be used only to restore some old source as last step of using this
-   * {@link AstEditor}.
-   */
-  public void setSource(String source) {
-    m_document.set(source);
-  }
-
-  /**
-   * @return the source corresponding to the given {@link ASTNode}.
-   */
-  public String getSource(ASTNode node) {
-    return getSource(node.getStartPosition(), node.getLength());
-  }
-
-  /**
-   * @return the substring of source with given start position and length.
-   */
-  public String getSource(int start, int length) {
-    try {
-      return m_document.get(start, length);
-    } catch (Throwable e) {
-      throw ReflectionUtils.propagate(e);
-    }
-  }
-
-  /**
-   * @return the substring of source with given begin/end positions.
-   */
-  public String getSourceBeginEnd(int begin, int end) {
-    return getSource(begin, end - begin);
-  }
-
-  /**
-   * Examples:
-   *
-   * <pre>
+	public static final String DEFAULT_END_OF_LINE = System.getProperty("line.separator", "\n");
+	private static final String REMOVED_COMMENT = "ASTEditor.REMOVED_COMMENT";
+	private final ICompilationUnit m_modelUnit;
+	private final CompilationUnit m_astUnit;
+	private String m_oldContent;
+	private final Document m_document;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AstEditor(ICompilationUnit modelUnit) throws Exception {
+		m_modelUnit = modelUnit;
+		m_astUnit = CodeUtils.parseCompilationUnit(modelUnit);
+		m_oldContent = m_modelUnit.getBuffer().getContents();
+		m_document = new Document(m_oldContent);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link IJavaProject}.
+	 */
+	public IJavaProject getJavaProject() {
+		return m_modelUnit.getJavaProject();
+	}
+
+	/**
+	 * @return the {@link IProject}.
+	 */
+	public IProject getProject() {
+		return getJavaProject().getProject();
+	}
+
+	/**
+	 * @return {@link ICompilationUnit} - model unit.
+	 */
+	public ICompilationUnit getModelUnit() {
+		return m_modelUnit;
+	}
+
+	/**
+	 * @return {@link CompilationUnit} - ast unit.
+	 */
+	public CompilationUnit getAstUnit() {
+		return m_astUnit;
+	}
+
+	/**
+	 * @return <code>true</code> if {@link CompilationUnit} has error problems.
+	 */
+	public boolean hasCompilationErrors() {
+		for (IProblem problem : m_astUnit.getProblems()) {
+			if (problem.isError()) {
+				return true;
+			}
+		}
+		return false;
+	}
+
+	/**
+	 * @return the primary {@link TypeDeclaration}.
+	 */
+	public TypeDeclaration getPrimaryType() {
+		String unitName = m_modelUnit.getElementName();
+		String typeName = StringUtils.removeEnd(unitName, ".java");
+		return AstNodeUtils.getTypeByName(m_astUnit, typeName);
+	}
+
+	/**
+	 * @return the {@link IType} of given {@link TypeDeclaration}.
+	 */
+	public IType getModelType(TypeDeclaration typeDeclaration) {
+		String name = typeDeclaration.getName().getIdentifier();
+		return m_modelUnit.getType(name);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// "Enclosing" utilities
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link ASTNode} that starts with given source, such that there are no child node
+	 *         that also covers same position.
+	 */
+	public ASTNode getEnclosingNode(String source) {
+		int position = getSource().indexOf(source);
+		Assert.isTrue(position != -1, "Can not find %s in %s.", source, getSource());
+		return AstNodeUtils.getEnclosingNode(m_astUnit, position);
+	}
+
+	/**
+	 * @return the {@link ASTNode} that covers passed position, such that there are no child node that
+	 *         also covers same position.
+	 */
+	public ASTNode getEnclosingNode(int position) {
+		return AstNodeUtils.getEnclosingNode(m_astUnit, position);
+	}
+
+	/**
+	 * @return the {@link Statement} that encloses given position.
+	 */
+	public Statement getEnclosingStatement(int position) {
+		return AstNodeUtils.getEnclosingStatement(getEnclosingNode(position));
+	}
+
+	/**
+	 * @return the {@link Block} that encloses given position.
+	 */
+	public Block getEnclosingBlock(int position) {
+		return AstNodeUtils.getEnclosingBlock(getEnclosingNode(position));
+	}
+
+	/**
+	 * @return the {@link MethodDeclaration} that encloses given position.
+	 */
+	public MethodDeclaration getEnclosingMethod(int position) {
+		return AstNodeUtils.getEnclosingMethod(getEnclosingNode(position));
+	}
+
+	/**
+	 * @return the {@link TypeDeclaration} that encloses given position.
+	 */
+	public TypeDeclaration getEnclosingType(int position) {
+		return AstNodeUtils.getEnclosingType(getEnclosingNode(position));
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commit
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private IASTEditorCommitListener m_commitListener;
+
+	/**
+	 * Sets the {@link IASTEditorCommitListener}.
+	 */
+	public void setCommitListener(IASTEditorCommitListener commitListener) {
+		m_commitListener = commitListener;
+	}
+
+	/**
+	 * Saves current source code into underlying {@link ICompilationUnit}.
+	 */
+	public void commitChanges() throws Exception {
+		// pre-listener
+		if (m_commitListener != null) {
+			m_commitListener.aboutToCommit();
+		}
+		// set contents, if changed
+		{
+			String newContent = m_document.get();
+			if (!m_oldContent.equals(newContent)
+					&& (m_commitListener == null || m_commitListener.canEditBaseFile())) {
+				int[] intervals = StringUtilities.getDifferenceIntervals(m_oldContent, newContent);
+				m_modelUnit.getBuffer().replace(
+						intervals[0],
+						intervals[1],
+						newContent.substring(intervals[2], intervals[2] + intervals[3]));
+				m_oldContent = newContent;
+			}
+		}
+		// post-listener
+		if (m_commitListener != null) {
+			m_commitListener.commitDone();
+		}
+	}
+
+	/**
+	 * Commits changes into {@link ICompilationUnit} and saves it, if not opened in editor.
+	 */
+	public void saveChanges(boolean forceSave) throws Exception {
+		commitChanges();
+		// save, if not working copy, i.e. not opened in editor
+		if (forceSave || !m_modelUnit.isWorkingCopy()) {
+			m_modelUnit.getBuffer().save(null, false);
+			m_modelUnit.save(null, false);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Text reading
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the character from document.
+	 */
+	public char getChar(int position) {
+		try {
+			return m_document.getChar(position);
+		} catch (BadLocationException e) {
+			throw ReflectionUtils.propagate(e);
+		}
+	}
+
+	/**
+	 * @return the whitespace substring that ends at given <code>end</code> position and starts
+	 *         somewhere before it.
+	 *
+	 * @param includeEOL
+	 *          is <code>true</code> if characters '\r' and '\n' also should be skipped.
+	 */
+	public String getWhitespaceToLeft(int end, boolean includeEOL) {
+		// find first non-whitespace index
+		int start = end;
+		while (start != 0) {
+			char c = getChar(start - 1);
+			// in any case we need whitespace
+			if (!Character.isWhitespace(c)) {
+				break;
+			}
+			// if EOL is not enabled, check \r and \n
+			if (!includeEOL && (c == '\r' || c == '\n')) {
+				break;
+			}
+			//
+			start--;
+		}
+		// return result
+		return getSourceBeginEnd(start, end);
+	}
+
+	/**
+	 * @return the line number that contains given index.
+	 */
+	public int getLineNumber(int index) {
+		try {
+			return m_document.getLineOfOffset(index);
+		} catch (Throwable e) {
+			throw ReflectionUtils.propagate(e);
+		}
+	}
+
+	/**
+	 * @return the index of first character of line that contains given index.
+	 */
+	public int getLineBegin(int index) {
+		try {
+			IRegion lineInformation = m_document.getLineInformationOfOffset(index);
+			return lineInformation.getOffset();
+		} catch (Throwable e) {
+			throw ReflectionUtils.propagate(e);
+		}
+	}
+
+	/**
+	 * @return the index of the first character of the end-of-line marker for the line containing the
+	 *         given position, or the length of the source if the position is on the last line and is
+	 *         therefore not followed by an end-of-line marker.
+	 */
+	public int getLineEnd(int index) {
+		try {
+			IRegion lineInformation = m_document.getLineInformationOfOffset(index);
+			return lineInformation.getOffset() + lineInformation.getLength();
+		} catch (Throwable e) {
+			throw ReflectionUtils.propagate(e);
+		}
+	}
+
+	/**
+	 * @return the index of first non-whitespace character.
+	 *
+	 * @param includeEOL
+	 *          is <code>true</code> if characters '\r' and '\n' also should be skipped.
+	 */
+	public int skipWhitespaceToLeft(int end, boolean includeEOL) {
+		// find first non-whitespace index
+		int start = end;
+		while (start != 0) {
+			char c = getChar(start - 1);
+			// in any case we need whitespace
+			if (!Character.isWhitespace(c)) {
+				break;
+			}
+			// if EOL is not enabled, check \r and \n
+			if (!includeEOL && (c == '\r' || c == '\n')) {
+				break;
+			}
+			//
+			start--;
+		}
+		// return result
+		return start;
+	}
+
+	/**
+	 * @return the index of first non-whitespace character or start of first line that is empty or
+	 *         contains only end of line comments (EOLC).
+	 */
+	public int skipWhitespaceAndPureEOLCToLeft(int end) throws Exception {
+		// skip whitespace to the left
+		int index = end - getWhitespaceToLeft(end, false).length();
+		if (index == 0) {
+			return index;
+		}
+		// skip lines with pure EOLC
+		while (true) {
+			int line = m_document.getLineOfOffset(index - 1);
+			int lineOffset = m_document.getLineOffset(line);
+			String lineString = getSource(lineOffset, m_document.getLineLength(line));
+			int firstNonWhitespace = StringUtils.indexOfAnyBut(lineString, " \t\r\n");
+			// check for empty line
+			if (firstNonWhitespace == -1) {
+				index = lineOffset;
+				continue;
+			}
+			// check if line starts with EOLC, so contains only it
+			if (lineString.substring(firstNonWhitespace).startsWith("//")) {
+				index = lineOffset;
+				continue;
+			}
+			// previous line was last empty one
+			break;
+		}
+		//
+		return index;
+	}
+
+	/**
+	 * If characters at left are EOL, skip one.
+	 */
+	public int skipSingleEOLToLeft(int index) throws Exception {
+		if (m_document.getChar(index - 1) == '\n') {
+			index--;
+		}
+		if (m_document.getChar(index - 1) == '\r') {
+			index--;
+		}
+		return index;
+	}
+
+	/**
+	 * @return single source {@link String} for given lines of source.
+	 *
+	 * @param lines
+	 *          the lines of source
+	 * @param indent
+	 *          the "base" indentation
+	 * @param singleIndent
+	 *          the indentation that to replace each leading "\t"
+	 * @param eol
+	 *          the EOL string
+	 */
+	private static String getIndentedSource(List<String> lines,
+			String indent,
+			String singleIndent,
+			String eol) {
+		StringBuffer buffer = new StringBuffer();
+		for (String line : lines) {
+			// EOL
+			if (buffer.length() != 0) {
+				buffer.append(eol);
+			}
+			// indentation
+			buffer.append(indent);
+			// line
+			if (line.length() != 0) {
+				int tabsCount = StringUtils.indexOfAnyBut(line, "\t");
+				if (tabsCount != -1) {
+					buffer.append(StringUtils.repeat(singleIndent, tabsCount));
+					buffer.append(line.substring(tabsCount));
+				} else {
+					buffer.append(StringUtils.repeat(singleIndent, line.length()));
+				}
+			}
+		}
+		return buffer.toString();
+	}
+
+	/**
+	 * @return the first occurrence of given sub-string.
+	 *
+	 * @throws IllegalArgumentException
+	 *           if no such index can be found.
+	 */
+	public int indexOf(String subString) {
+		return indexOf(subString, 0);
+	}
+
+	/**
+	 * @return the first occurrence of given sub-string.
+	 *
+	 * @throws IllegalArgumentException
+	 *           if no such index can be found.
+	 */
+	public int indexOf(String subString, int startPos) {
+		int index = indexOf_noEx(subString, startPos);
+		if (index != -1) {
+			return index;
+		}
+		// not found
+		throw new IllegalArgumentException("Can not find '" + subString + "' starting from " + startPos);
+	}
+
+	/**
+	 * @return the first occurrence of given sub-string, may be <code>-1</code> if not found.
+	 */
+	private int indexOf_noEx(String subString, int startPos) {
+		return m_document.get().indexOf(subString, startPos);
+	}
+
+	/**
+	 * @return the first index of any character in the given set of characters.
+	 *
+	 * @throws IllegalArgumentException
+	 *           if no such index can be found.
+	 */
+	private int indexOfAny(String searchChars, int startPos) throws Exception {
+		for (int i = startPos; i < m_document.getLength(); i++) {
+			char c = m_document.getChar(i);
+			for (int j = 0; j < searchChars.length(); j++) {
+				if (searchChars.charAt(j) == c) {
+					return i;
+				}
+			}
+		}
+		// not found
+		throw new IllegalArgumentException("Can not find '"
+				+ searchChars
+				+ "' starting from "
+				+ startPos);
+	}
+
+	/**
+	 * @return the first index of any character not in the given set of characters.
+	 *
+	 * @throws IllegalArgumentException
+	 *           if no such index can be found.
+	 */
+	private int indexOfAnyBut(String searchChars, int startPos) throws Exception {
+		outer : for (int i = startPos; i < m_document.getLength(); i++) {
+			char c = m_document.getChar(i);
+			for (int j = 0; j < searchChars.length(); j++) {
+				if (searchChars.charAt(j) == c) {
+					continue outer;
+				}
+			}
+			return i;
+		}
+		// not found
+		throw new IllegalArgumentException("Can not find '"
+				+ searchChars
+				+ "' starting from "
+				+ startPos);
+	}
+
+	/**
+	 * @return the nearest index of character when move backward from given position.
+	 *
+	 * @throws IllegalArgumentException
+	 *           if no such index can be found.
+	 */
+	public int indexOfCharBackward(char searchChar, int endPos) {
+		for (int i = endPos - 1; i != 0; i--) {
+			char c = getChar(i);
+			if (c == searchChar) {
+				return i;
+			}
+		}
+		// not found
+		throw new IllegalArgumentException("Can not find '" + searchChar + "' starting from " + endPos);
+	}
+
+	/**
+	 * @return the first index of any character not in the given set of characters.
+	 *
+	 * @throws IllegalArgumentException
+	 *           if no such index can be found.
+	 */
+	private int indexOfAnyButBackward(String searchChars, int startPos) throws Exception {
+		outer : for (int i = startPos - 1; i != 0; i--) {
+			char c = m_document.getChar(i);
+			for (int j = 0; j < searchChars.length(); j++) {
+				if (searchChars.charAt(j) == c) {
+					continue outer;
+				}
+			}
+			return i;
+		}
+		// not found
+		throw new IllegalArgumentException("Can not find '"
+				+ searchChars
+				+ "' starting from "
+				+ startPos);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// EOL comments
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the index of passed {@link StringLiteral} on same line.
+	 */
+	public int getStringLiteralNumberOnLine(StringLiteral stringLiteral) {
+		final int slLine = getLineNumber(stringLiteral.getStartPosition());
+		// find shortest node that fills full line
+		ASTNode lineNode = stringLiteral;
+		while (getLineNumber(lineNode.getStartPosition()) == slLine
+				&& getLineNumber(lineNode.getStartPosition() + lineNode.getLength()) == slLine) {
+			lineNode = lineNode.getParent();
+		}
+		// find all literals on this line
+		final List<StringLiteral> literals = Lists.newArrayList();
+		lineNode.accept(new ASTVisitor() {
+			@Override
+			public void endVisit(StringLiteral literal) {
+				if (getLineNumber(literal.getStartPosition()) == slLine) {
+					literals.add(literal);
+				}
+			}
+		});
+		// find index of given literal
+		return literals.indexOf(stringLiteral);
+	}
+
+	/**
+	 * Insert the given EOL comment at the end of the line containing the given position.
+	 */
+	public void addEndOfLineComment(int position, String comment) throws Exception {
+		int endOfLinePosition = getLineEnd(position);
+		replaceSubstring(endOfLinePosition, 0, comment);
+	}
+
+	/**
+	 * @return the end of line comment (including leading <code>"//"</code>) at the end of the line
+	 *         containing the given position.
+	 */
+	public String getEndOfLineComment(int position) {
+		int lineBegin = getLineBegin(position);
+		int lineEnd = getLineEnd(position);
+		int commentBegin = indexOf_noEx("//", lineBegin);
+		if (commentBegin != -1 && commentBegin < lineEnd) {
+			return getSource(commentBegin, lineEnd - commentBegin);
+		}
+		return null;
+	}
+
+	/**
+	 * Remove the end of line comment at the end of the line containing the given position.
+	 */
+	public void removeEndOfLineComment(int position, String commentToRemove) throws Exception {
+		int lineBegin = getLineBegin(position);
+		int lineEnd = getLineEnd(position);
+		int commentBegin = indexOf_noEx(commentToRemove, lineBegin);
+		if (commentBegin != -1 && commentBegin < lineEnd) {
+			int commentEnd = commentBegin + commentToRemove.length();
+			// update comment end
+			commentEnd = indexOfAnyBut(" \t", commentEnd);
+			// replace
+			replaceSubstring(commentBegin, commentEnd - commentBegin, "");
+			// remove leading whitespace (but keep at least one, if there is comment)
+			{
+				int newCommentBegin = indexOfAnyButBackward(" \t", commentBegin) + 1;
+				if (newCommentBegin != commentBegin) {
+					if (m_document.get(commentBegin, 2).equals("//")) {
+						newCommentBegin++;
+					}
+					replaceSubstring(newCommentBegin, commentBegin - newCommentBegin, "");
+				}
+			}
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Text editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the internal {@link Document}, should be used only internally.
+	 */
+	Document getBuffer() {
+		return m_document;
+	}
+
+	/**
+	 * @return the full source of {@link CompilationUnit}.
+	 */
+	public String getSource() {
+		return m_document.get();
+	}
+
+	/**
+	 * Sets the full source of {@link CompilationUnit}. Note that it does not update AST, so
+	 * practically can be used only to restore some old source as last step of using this
+	 * {@link AstEditor}.
+	 */
+	public void setSource(String source) {
+		m_document.set(source);
+	}
+
+	/**
+	 * @return the source corresponding to the given {@link ASTNode}.
+	 */
+	public String getSource(ASTNode node) {
+		return getSource(node.getStartPosition(), node.getLength());
+	}
+
+	/**
+	 * @return the substring of source with given start position and length.
+	 */
+	public String getSource(int start, int length) {
+		try {
+			return m_document.get(start, length);
+		} catch (Throwable e) {
+			throw ReflectionUtils.propagate(e);
+		}
+	}
+
+	/**
+	 * @return the substring of source with given begin/end positions.
+	 */
+	public String getSourceBeginEnd(int begin, int end) {
+		return getSource(begin, end - begin);
+	}
+
+	/**
+	 * Examples:
+	 *
+	 * <pre>
 	 * SWT.NONE = org.eclipse.swt.SWT.NONE
 	 * new JButton() = new javax.swing.JButton()
 	 * </pre>
-   *
-   * @param theNode
-   *          the {@link ASTNode} to get the source.
-   * @param transformer
-   *          the {@link Function} that can participate in node to source transformation by
-   *          providing alternative source for some nodes. Can be <code>null</code>, in not
-   *          additional transformation required. If transformer returns not <code>null</code>, we
-   *          use it instead of its original source; if <code>null</code> - we continue with
-   *          original source.
-   *
-   * @return the source of {@link ASTNode} in "external form", i.e. with fully qualified types.
-   */
-  @SuppressWarnings("restriction")
-  public String getExternalSource(final ASTNode theNode, final Function<ASTNode, String> transformer) {
-    final StringBuffer buffer = new StringBuffer(getSource(theNode));
-    // remember positions for all nodes
-    final Map<ASTNode, Integer> nodePositions = Maps.newHashMap();
-    theNode.accept(new ASTVisitor() {
-      @Override
-      public void postVisit(ASTNode _node) {
-        nodePositions.put(_node, _node.getStartPosition());
-      }
-    });
-    // replace "name" with "qualified name"
-    theNode.accept(new org.eclipse.jdt.internal.corext.dom.GenericVisitor() {
-      @Override
-      protected boolean visitNode(ASTNode node) {
-        if (transformer != null) {
-          String source = transformer.apply(node);
-          if (source != null) {
-            replace(node, source);
-            return false;
-          }
-        }
-        return true;
-      }
-
-      @Override
-      public void endVisit(SimpleName name) {
-        if (!AstNodeUtils.isVariable(name)) {
-          StructuralPropertyDescriptor location = name.getLocationInParent();
-          if (location == SimpleType.NAME_PROPERTY
-              || location == QualifiedName.QUALIFIER_PROPERTY
-              || location == ClassInstanceCreation.NAME_PROPERTY
-              || location == MethodInvocation.EXPRESSION_PROPERTY) {
-            String fullyQualifiedName = AstNodeUtils.getFullyQualifiedName(name, false);
-            replace(name, fullyQualifiedName);
-          }
-        }
-      }
-
-      /**
-       * Replace given ASTNode with different source, with updating positions for other nodes.
-       */
-      private void replace(ASTNode node, String newSource) {
-        int nodePosition = nodePositions.get(node);
-        // update source
-        {
-          int sourceStart = nodePosition - theNode.getStartPosition();
-          int sourceEnd = sourceStart + node.getLength();
-          buffer.replace(sourceStart, sourceEnd, newSource);
-        }
-        // update positions for nodes
-        int lengthDelta = newSource.length() - node.getLength();
-        for (Map.Entry<ASTNode, Integer> entry : nodePositions.entrySet()) {
-          Integer position = entry.getValue();
-          if (position > nodePosition) {
-            entry.setValue(position + lengthDelta);
-          }
-        }
-      }
-    });
-    // OK, we have updated source
-    return buffer.toString();
-  }
-
-  /**
-   * @return the source of given {@link ITypeBinding}, including generics.
-   */
-  public String getTypeBindingSource(ITypeBinding typeBinding) {
-    String genericTypeName = AstNodeUtils.getFullyQualifiedName(typeBinding, false, true);
-    genericTypeName = StringUtils.replace(genericTypeName, ",", ", ");
-    return genericTypeName;
-  }
-
-  /**
-   * @see #replaceSubstring(int, int, String)
-   */
-  public void replaceSubstring(ASTNode node, String replacement) throws Exception {
-    replaceSubstring(node.getStartPosition(), node.getLength(), replacement);
-  }
-
-  /**
-   * Replaces the substring starting at the given start position with the given length by the given
-   * replacement text, modifying the source ranges for the nodes in the AST in the process.
-   *
-   * @param oldStart
-   *          the index of the first character being replaced
-   * @param oldLength
-   *          the number of characters being replaced
-   * @param replacement
-   *          the text with which they are being replaced
-   */
-  public void replaceSubstring(final int oldStart, int oldLength, String replacement)
-      throws Exception {
-    replaceSubstring_markRemovedComments(oldStart, oldLength);
-    List<Comment> commentList = getCommentList();
-    // replace text
-    //System.out.println("|" + m_document.get(oldStart, oldLength) + "| -> |" + replacement + "|");
-    m_document.replace(oldStart, oldLength, replacement);
-    // prepare positions
-    final int newLength = replacement.length();
-    final int difference = newLength - oldLength;
-    final int oldEnd = oldStart + oldLength;
-    // prepare visitor
-    ASTVisitor visitor = new ASTVisitor(true) {
-      @Override
-      public void postVisit(ASTNode node) {
-        int position = node.getStartPosition();
-        int length = node.getLength();
-        int end = position + length;
-        // sanity checks
-        {
-          // we can not start replacement inside of node, but end outside
-          if (position < oldStart && oldStart < end && oldEnd > end) {
-            throw new DesignerException(ICoreExceptionConstants.AST_EDITOR_REPLACE);
-          }
-          // we can not start replacement outside of node, but end inside
-          if (position < oldEnd && oldEnd < end && oldStart < position) {
-            throw new DesignerException(ICoreExceptionConstants.AST_EDITOR_REPLACE);
-          }
-        }
-        //
-        if (end <= oldStart) {
-          // before changed region: no change
-        } else if (position >= oldEnd && !(node instanceof CompilationUnit)) {
-          // after changed region: move
-          node.setSourceRange(position + difference, length);
-        } else if (position <= oldStart && position + length >= oldEnd) {
-          // embraces changed region: change length
-          node.setSourceRange(position, length + difference);
-        }
-        // special handling for AnonymousTypeDeclaration
-        {
-          TypeDeclaration anonymous = AnonymousTypeDeclaration.get(node);
-          if (anonymous != null) {
-            anonymous.setSourceRange(node.getStartPosition(), node.getLength());
-          }
-        }
-      }
-    };
-    // modify position/length for nodes in AST
-    m_astUnit.accept(visitor);
-    // update comments
-    for (Comment comment : commentList) {
-      if (!(comment instanceof Javadoc)) {
-        comment.accept(visitor);
-      }
-    }
-  }
-
-  /**
-   * When we replace region, we should remove {@link Comment} in it. We can not really remove them
-   * (JDT returns unmodifiable list), so we mark them as removed.
-   */
-  private void replaceSubstring_markRemovedComments(int begin, int length) {
-    List<Comment> comments = DomGenerics.getCommentList(m_astUnit);
-    for (Iterator<Comment> I = comments.iterator(); I.hasNext();) {
-      Comment comment = I.next();
-      if (AstNodeUtils.getSourceBegin(comment) >= begin
-          && AstNodeUtils.getSourceEnd(comment) < begin + length) {
-        comment.setProperty(REMOVED_COMMENT, Boolean.TRUE);
-      }
-    }
-  }
-
-  /**
-   * @return the {@link List} of {@link Comment}'s in this {@link CompilationUnit}.
-   */
-  public List<Comment> getCommentList() throws Exception {
-    List<Comment> comments = Lists.newArrayList();
-    comments.addAll(DomGenerics.getCommentList(m_astUnit));
-    // clean up
-    int documentLength = m_document.getLength();
-    for (Iterator<Comment> I = comments.iterator(); I.hasNext();) {
-      Comment comment = I.next();
-      if (comment.getProperty(REMOVED_COMMENT) != null) {
-        I.remove();
-        continue;
-      }
-      if (AstNodeUtils.getSourceBegin(comment) < 0
-          || AstNodeUtils.getSourceEnd(comment) > documentLength) {
-        I.remove();
-      } else if (comment instanceof LineComment) {
-        if (!getSource(comment).startsWith("//")) {
-          I.remove();
-        }
-      } else if (comment instanceof BlockComment) {
-        if (!getSource(comment).startsWith("/*")) {
-          I.remove();
-        }
-      }
-    }
-    // protect from modifications
-    return Collections.unmodifiableList(comments);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ASTNode's replacement
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final Set<Method> m_invalidNodeMethods = Sets.newHashSet();
-
-  /**
-   * Replaces given <code>originalNode</code> with <code>replacementNode</code>. This method uses
-   * "duck type" implementation, i.e. uses names and types to identify location of nodes instead of
-   * direct checks for {@link ASTNode} structures.
-   */
-  @SuppressWarnings("unchecked")
-  public static void replaceNode(ASTNode originalNode, ASTNode replacementNode) throws Exception {
-    ASTNode parent = originalNode.getParent();
-    // special case: QualifiedName -> FieldAccess
-    if (replaceNode_QualifiedName_to_FieldAccess(originalNode, replacementNode)) {
-      return;
-    }
-    // use "duck type"
-    Class<?> parentClass = parent.getClass();
-    for (Method method : parentClass.getMethods()) {
-      if (method.getParameterTypes().length == 0 && !m_invalidNodeMethods.contains(method)) {
-        String methodName = method.getName();
-        Class<?> returnType = method.getReturnType();
-        try {
-          // check for getXXX() and use setXXX()
-          if (methodName.startsWith("get")
-              && returnType.isAssignableFrom(originalNode.getClass())
-              && method.invoke(parent) == originalNode) {
-            String setMethodName = "set" + methodName.substring("get".length());
-            Method setMethod = parentClass.getMethod(setMethodName, new Class[]{returnType});
-            setMethod.invoke(parent, new Object[]{replacementNode});
-            break;
-          }
-          // check for "List xxx()" and use "List.set()"
-          if (returnType == List.class) {
-            List<ASTNode> elements = (List<ASTNode>) method.invoke(parent);
-            int index = elements.indexOf(originalNode);
-            if (index != -1) {
-              elements.set(index, replacementNode);
-              break;
-            }
-          }
-        } catch (InvocationTargetException e) {
-          Assert.isTrue(e.getCause() instanceof UnsupportedOperationException);
-          // it is possible that we will try to call method that is not supported in JLS3 AST,
-          // so we should catch exception and ignore such methods
-          m_invalidNodeMethods.add(method);
-        }
-      }
-    }
-  }
-
-  /**
-   * If we try to replace qualifier of {@link QualifiedName} with generic {@link Expression}, not
-   * just {@link Name}, then {@link QualifiedName} itself should be replaced with
-   * {@link FieldAccess}.
-   */
-  private static boolean replaceNode_QualifiedName_to_FieldAccess(ASTNode originalNode,
-      ASTNode replacementNode) throws Exception {
-    ASTNode parent = originalNode.getParent();
-    if (parent instanceof QualifiedName && !(replacementNode instanceof Name)) {
-      QualifiedName qualifiedName = (QualifiedName) parent;
-      // prepare FieldAccess
-      FieldAccess fieldAccess = originalNode.getAST().newFieldAccess();
-      AstNodeUtils.copySourceRange(fieldAccess, qualifiedName);
-      fieldAccess.setExpression((Expression) replacementNode);
-      // use same "name" node
-      {
-        SimpleName fieldName = qualifiedName.getName();
-        qualifiedName.setName(originalNode.getAST().newSimpleName("__wbp_tmp"));
-        fieldAccess.setName(fieldName);
-      }
-      // replace QualifiedName with FieldAccess
-      replaceNode(qualifiedName, fieldAccess);
-      return true;
-    }
-    return false;
-  }
-
-  /**
-   * Replaces given old {@link Expression} with new {@link Expression} corresponding to the given
-   * Java source. If source contains EOL, it will be indented.
-   *
-   * @return the new {@link Expression}.
-   */
-  public Expression replaceExpression(Expression oldExpression, String source) throws Exception {
-    // check for source with EOL, should be handled as indented
-    if (source.indexOf("\n") != -1) {
-      String[] lines = StringUtils.split(source, "\n");
-      return replaceExpression(oldExpression, Arrays.asList(lines));
-    }
-    // "normal" source, without EOL
-    return replaceExpressionString(oldExpression, source);
-  }
-
-  /**
-   * Replaces given old {@link Expression} with new {@link Expression} corresponding the Java source
-   * given as array of lines.
-   *
-   * @return the new {@link Expression}.
-   */
-  public Expression replaceExpression(Expression oldExpression, List<String> lines)
-      throws Exception {
-    // prepare source
-    String source;
-    {
-      // prepare code generation constants
-      AstCodeGeneration generation = getGeneration();
-      String singleIndent = generation.getIndentation(1);
-      String eol = generation.getEndOfLine();
-      // prepare enclosing node
-      ASTNode enclosingNode = null;
-      {
-        enclosingNode = AstNodeUtils.getEnclosingStatement(oldExpression);
-        if (enclosingNode == null) {
-          enclosingNode = AstNodeUtils.getEnclosingNode(oldExpression, BodyDeclaration.class);
-        }
-        Assert.isNotNull(enclosingNode, "No enclosing node found for " + oldExpression);
-      }
-      // indent source
-      String indent = getWhitespaceToLeft(enclosingNode.getStartPosition(), false);
-      source = getIndentedSource(lines, indent, singleIndent, eol);
-      // remove indentation for first line
-      source = source.trim();
-    }
-    //
-    return replaceExpressionString(oldExpression, source);
-  }
-
-  /**
-   * Replaces given old {@link Expression} with new {@link Expression} corresponding to the given
-   * Java source. Source used as is, without checks for EOL, indentation, etc.
-   *
-   * @return the new {@link Expression}.
-   */
-  private Expression replaceExpressionString(Expression oldExpression, String source)
-      throws Exception {
-    int oldStart = oldExpression.getStartPosition();
-    int oldLength = oldExpression.getLength();
-    // update source
-    source = replaceSourceTemplates(oldStart, source);
-    // replace expression
-    Expression newExpression = getParser().parseExpression(oldStart, source);
-    replaceSubstring(oldStart, oldLength, source);
-    replaceNode(oldExpression, newExpression);
-    // final step
-    resolveImports(newExpression);
-    return newExpression;
-  }
-
-  /**
-   * Replaces single argument of given {@link MethodInvocation}.
-   */
-  public Expression replaceInvocationArgument(MethodInvocation invocation, int index, String source)
-      throws Exception {
-    Expression argument = DomGenerics.arguments(invocation).get(index);
-    return replaceExpression(argument, source);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Type operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Replaces {@link Type} in {@link VariableDeclarationStatement} with new type.<br>
-   * We use this method in morphing.
-   *
-   * @param declaration
-   *          the fragment from {@link VariableDeclarationStatement}. {@link FieldDeclaration}
-   *          should have only one fragment.
-   * @param newTypeName
-   *          the fully qualified name of type to use.
-   */
-  public void replaceVariableType(VariableDeclaration declaration, String newTypeName)
-      throws Exception {
-    Type type;
-    VariableDeclarationStatement declarationStatement = null;
-    FieldDeclaration fieldDeclaration = null;
-    if (declaration.getLocationInParent() == VariableDeclarationStatement.FRAGMENTS_PROPERTY) {
-      declarationStatement = (VariableDeclarationStatement) declaration.getParent();
-      type = declarationStatement.getType();
-    } else if (declaration.getLocationInParent() == FieldDeclaration.FRAGMENTS_PROPERTY) {
-      fieldDeclaration = (FieldDeclaration) declaration.getParent();
-      type = fieldDeclaration.getType();
-    } else {
-      throw new IllegalArgumentException("Unknown argument: " + declaration.getClass());
-    }
-    // do replace
-    {
-      Type newType = getParser().parseQualifiedType(type.getStartPosition(), newTypeName);
-      // replace Type source
-      replaceSubstring(type, newTypeName);
-      // replace Type node
-      if (declarationStatement != null) {
-        declarationStatement.setType(newType);
-      }
-      if (fieldDeclaration != null) {
-        fieldDeclaration.setType(newType);
-      }
-      resolveImports(newType);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Global values
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final Map<String, Object> m_globalMap = Maps.newTreeMap();
-
-  /**
-   * @return the current global value for given key.
-   */
-  public Object getGlobalValue(String key) {
-    return m_globalMap.get(key);
-  }
-
-  /**
-   * Sets new global value for given key.
-   */
-  public void putGlobalValue(String key, Object value) {
-    m_globalMap.put(key, value);
-  }
-
-  /**
-   * Removes global value for given key.
-   */
-  public void removeGlobalValue(String key) {
-    m_globalMap.remove(key);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Unique names generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the unique variable name (for local variable or field).
-   *
-   * @param position
-   *          the position where new variable will be used, <code>-1</code> if all variables of
-   *          {@link CompilationUnit} should be considered
-   * @param baseName
-   *          the base name for generating
-   * @param excludedVariable
-   *          the {@link VariableDeclaration} that should be excluded from checking of uniqueness.
-   *          We need this for example when we convert local variable to field, in this case using
-   *          same unique name of variable as field name is OK. May be <code>null</code>.
-   */
-  public String getUniqueVariableName(int position,
-      String baseName,
-      VariableDeclaration excludedVariable) {
-    // prepare declarations...
-    List<VariableDeclaration> declarations = Lists.newArrayList();
-    if (position != -1) {
-      // ...visible + shadows
-      declarations.addAll(AstNodeUtils.getVariableDeclarationsVisibleAt(m_astUnit, position));
-      declarations.addAll(AstNodeUtils.getVariableDeclarationsAfter(m_astUnit, position));
-    } else {
-      // ...all
-      declarations.addAll(AstNodeUtils.getVariableDeclarationsAll(m_astUnit));
-    }
-    // exclude "excluded"
-    declarations.remove(excludedVariable);
-    // do generation
-    return getUniqueVariableName(declarations, baseName);
-  }
-
-  /**
-   * Generates unique variable name that does not conflict with other variables.
-   *
-   * @param declarations
-   *          the {@link VariableDeclaration}'s that can conflict with new variable.
-   * @param baseName
-   *          the base name for generating
-   *
-   * @return the unique variable name (for local variable or field).
-   */
-  public static String getUniqueVariableName(List<VariableDeclaration> declarations, String baseName) {
-    // prepare set of conflicting variables identifiers
-    final Set<String> existingIdentifiers = Sets.newTreeSet();
-    for (VariableDeclaration declaration : declarations) {
-      existingIdentifiers.add(declaration.getName().getIdentifier());
-    }
-    // generate unique name
-    return CodeUtils.generateUniqueName(baseName, new Predicate<String>() {
-      @Override
-      public boolean apply(String name) {
-        return !existingIdentifiers.contains(name);
-      }
-    });
-  }
-
-  /**
-   * @return the unique method name.
-   */
-  public String getUniqueMethodName(String baseName) {
-    // prepare set of methods names
-    final Set<String> existingMethods = Sets.newTreeSet();
-    m_astUnit.accept(new ASTVisitor() {
-      @Override
-      public void endVisit(MethodDeclaration node) {
-        existingMethods.add(node.getName().getIdentifier());
-      }
-
-      @Override
-      public void endVisit(TypeDeclaration node) {
-        addMethodNames(existingMethods, AstNodeUtils.getTypeBinding(node));
-      }
-    });
-    // generate unique name
-    return CodeUtils.generateUniqueName(baseName, new Predicate<String>() {
-      @Override
-      public boolean apply(String name) {
-        return !existingMethods.contains(name);
-      }
-    });
-  }
-
-  /**
-   * @return the unique inner type name.
-   */
-  public String getUniqueTypeName(String baseName) {
-    // prepare set of methods names
-    final Set<String> existingTypes = Sets.newTreeSet();
-    m_astUnit.accept(new ASTVisitor() {
-      @Override
-      public void endVisit(TypeDeclaration node) {
-        existingTypes.add(node.getName().getIdentifier());
-      }
-    });
-    // generate unique name
-    return CodeUtils.generateUniqueName(baseName, new Predicate<String>() {
-      @Override
-      public boolean apply(String name) {
-        return !existingTypes.contains(name);
-      }
-    });
-  }
-
-  /**
-   * Adds names for methods declared in given {@link ITypeBinding} and its super-classes.
-   */
-  private static void addMethodNames(Set<String> existingMethods, ITypeBinding typeBinding) {
-    if (typeBinding != null) {
-      for (IMethodBinding method : typeBinding.getDeclaredMethods()) {
-        existingMethods.add(method.getName());
-      }
-      addMethodNames(existingMethods, typeBinding.getSuperclass());
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // SimpleName
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets new identifier of given {@link SimpleName}.
-   */
-  public void setIdentifier(SimpleName simpleName, String newIdentifier) throws Exception {
-    replaceSubstring(simpleName, newIdentifier);
-    simpleName.setIdentifier(newIdentifier);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parser
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final BindingContext m_bindingContext = new BindingContext();
-  private final AstParser m_parser = new AstParser(this);
-
-  /**
-   * @return the {@link BindingContext} for this {@link AstEditor}.
-   */
-  public BindingContext getBindingContext() {
-    return m_bindingContext;
-  }
-
-  /**
-   * @return the {@link AstParser} for this {@link AstEditor}.
-   */
-  public AstParser getParser() {
-    return m_parser;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final AstCodeGeneration m_generation = new AstCodeGeneration(this);
-
-  /**
-   * @return the {@link AstCodeGeneration} for this {@link AstEditor}.
-   */
-  public AstCodeGeneration getGeneration() {
-    return m_generation;
-  }
-
-  /**
-   * @return the source with replaced "{wbp_XXX}" templates.
-   */
-  private String replaceSourceTemplates(int position, String src) {
-    // replace {wbp_class} with class reference
-    if (src.indexOf("{wbp_class}") != -1) {
-      String replacement;
-      {
-        ASTNode coveringNode = getEnclosingNode(position);
-        // prepare enclosing method binding
-        IMethodBinding methodBinding;
-        {
-          MethodDeclaration methodDeclaration = AstNodeUtils.getEnclosingMethod(coveringNode);
-          Assert.isNotNull(methodDeclaration);
-          methodBinding = AstNodeUtils.getMethodBinding(methodDeclaration);
-        }
-        // prepare replacement
-        if (AstNodeUtils.isStatic(methodBinding)) {
-          TypeDeclaration typeDeclaration = AstNodeUtils.getEnclosingType(coveringNode);
-          ITypeBinding typeBinding = typeDeclaration.resolveBinding();
-          replacement = AstNodeUtils.getFullyQualifiedName(typeBinding, false) + ".class";
-        } else {
-          replacement = "getClass()";
-        }
-      }
-      // do replace
-      src = StringUtils.replace(src, "{wbp_class}", replacement);
-    }
-    // replace {wbp_classTop} with top-level class reference
-    if (src.indexOf("{wbp_classTop}") != -1) {
-      String replacement;
-      {
-        ASTNode coveringNode = getEnclosingNode(position);
-        TypeDeclaration typeDeclaration = AstNodeUtils.getEnclosingTypeTop(coveringNode);
-        ITypeBinding typeBinding = typeDeclaration.resolveBinding();
-        replacement = AstNodeUtils.getFullyQualifiedName(typeBinding, false) + ".class";
-      }
-      // do replace
-      src = StringUtils.replace(src, "{wbp_classTop}", replacement);
-    }
-    //
-    return src;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ParenthesizedExpression
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Inlines all {@link ParenthesizedExpression} that enclose given {@link Expression}.
-   */
-  public void inlineParenthesizedExpression(Expression expression) throws Exception {
-    while (expression.getParent() instanceof ParenthesizedExpression) {
-      ParenthesizedExpression parent = (ParenthesizedExpression) expression.getParent();
-      parent.setExpression(expression.getAST().newSimpleName("__wbp_tmp"));
-      replaceNode(parent, expression);
-      replaceSubstring(parent.getStartPosition(), parent.getLength(), getSource(expression));
-      AstNodeUtils.setSourceBegin(expression, parent.getStartPosition());
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // TryStatement
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if given {@link Statement} is enclosed into {@link TryStatement} with
-   *         {@link CatchClause} which is same or superclass for given.
-   */
-  public boolean hasEnclosingTryStatement(Statement statement, String requiredException)
-      throws Exception {
-    ITypeHierarchy requiredHierarchy;
-    {
-      IType requiredExceptionType = getJavaProject().findType(requiredException);
-      Assert.isNotNull2(requiredExceptionType, "No such exception type: {0}", requiredException);
-      requiredHierarchy = requiredExceptionType.newSupertypeHierarchy(null);
-    }
-    // visit parents
-    while (true) {
-      ASTNode parent = statement.getParent();
-      // TryStatement
-      if (parent instanceof TryStatement) {
-        TryStatement tryStatement = (TryStatement) parent;
-        List<CatchClause> catchClauses = DomGenerics.catchClauses(tryStatement);
-        for (CatchClause catchClause : catchClauses) {
-          SingleVariableDeclaration exception = catchClause.getException();
-          String exceptionName = AstNodeUtils.getFullyQualifiedName(exception, false);
-          IType exceptionType = getJavaProject().findType(exceptionName);
-          if (requiredHierarchy.contains(exceptionType)) {
-            return true;
-          }
-        }
-      }
-      // enclosing Statement or stop
-      if (parent instanceof Statement) {
-        statement = (Statement) parent;
-      } else {
-        return false;
-      }
-    }
-  }
-
-  /**
-   * Encloses given {@link Statement} in {@link TryStatement}.
-   *
-   * @return the enclosing {@link TryStatement}.
-   */
-  public TryStatement encloseInTryStatement(Statement statement, String catchExceptionType)
-      throws Exception {
-    TryStatement tryStatement;
-    {
-      String line_1 = "try {";
-      String line_2 = "} catch (" + catchExceptionType + " e) {";
-      String line_3 = "}";
-      tryStatement =
-          (TryStatement) addStatement(
-              ImmutableList.of(line_1, line_2, line_3),
-              new StatementTarget(statement, true));
-    }
-    moveStatement(statement, new StatementTarget(tryStatement.getBody(), true));
-    return tryStatement;
-  }
-
-  /**
-   * Removes empty {@link TryStatement}s.
-   */
-  public void removeEmptyTryStatements() {
-    m_astUnit.accept(new AstVisitorEx() {
-      @Override
-      public void endVisitEx(TryStatement node) throws Exception {
-        if (node.getBody().statements().isEmpty()) {
-          removeStatement(node);
-        }
-      }
-    });
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Statement operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Encloses given {@link Statement} in {@link Block}.
-   *
-   * @return the enclosing {@link Block}.
-   */
-  public Block encloseInBlock(Statement statement) throws Exception {
-    // add new Block
-    Block block =
-        (Block) addStatement(ImmutableList.of("{", "}"), new StatementTarget(statement, true));
-    // move Statement into Block
-    moveStatement(statement, new StatementTarget(block, true));
-    // OK, return Block
-    return block;
-  }
-
-  /**
-   * Inlines given {@link Block} into its parent {@link Block}.
-   */
-  public void inlineBlock(Block block) throws Exception {
-    StatementTarget target = new StatementTarget((Statement) block, true);
-    // move Statement's
-    List<Statement> statements = Lists.newArrayList(DomGenerics.statements(block));
-    for (Statement statement : statements) {
-      moveStatement(statement, target);
-    }
-    // remove Block
-    removeStatement(block);
-  }
-
-  /**
-   * Ensures that given {@link Statement} is child of {@link Block}, so we can add new
-   * {@link Statement}s relative given one.
-   */
-  private Block ensureParentBlock(Statement statement) throws Exception {
-    ASTNode parent = statement.getParent();
-    // already in Block
-    if (parent instanceof Block) {
-      return (Block) parent;
-    }
-    // prepare code generation constants
-    AstCodeGeneration generation = getGeneration();
-    String singleIndent = generation.getIndentation(1);
-    String eol = generation.getEndOfLine();
-    String indent = getWhitespaceToLeft(parent.getStartPosition(), false);
-    // initial state
-    boolean statementIsLastInParent =
-        AstNodeUtils.getSourceEnd(parent) == AstNodeUtils.getSourceEnd(statement);
-    // prepare new Block
-    int positionForBlock;
-    int positionForStatement;
-    Block newBlock;
-    {
-      int statementBegin = statement.getStartPosition();
-      positionForBlock = indexOfAnyButBackward(" \t\r\n", statementBegin) + 1;
-      String source = " {" + eol;
-      source += indent + singleIndent;
-      positionForStatement = positionForBlock + source.length();
-      source += eol;
-      source += indent + "}";
-      replaceSubstring(positionForBlock, statementBegin - positionForBlock, source);
-      // parse
-      newBlock = (Block) getParser().parseStatement(positionForBlock, source);
-    }
-    // move Statement into Block: source
-    {
-      int statementBegin = statement.getStartPosition();
-      int statementEnd = getStatementEndIndex(statement);
-      int statementLength = statementEnd - statementBegin;
-      moveSource(positionForStatement, statementBegin, statementLength);
-      AstNodeUtils.setSourceLength(newBlock, newBlock.getLength() + statementLength);
-    }
-    // move Statement into Block: node
-    replaceNode(statement, newBlock);
-    DomGenerics.statements(newBlock).add(statement);
-    // cut parent to Block
-    if (statementIsLastInParent) {
-      AstNodeUtils.setSourceEnd(parent, newBlock);
-    }
-    // done
-    return newBlock;
-  }
-
-  /**
-   * Adds new {@link Statement} with given source in given {@link StatementTarget}.
-   *
-   * @param source
-   *          the source for new {@link Statement} (with trailing ';'). It can contains
-   *          <code>\n</code>, so can be multi-line and will be indented.
-   * @param target
-   *          describes location for new {@link Statement}.
-   */
-  public Statement addStatement(String source, StatementTarget target) throws Exception {
-    String[] lines = StringUtils.split(source, '\n');
-    return addStatement(Arrays.asList(lines), target);
-  }
-
-  /**
-   * Adds new {@link Statement} with given source in given {@link StatementTarget}.
-   *
-   * @param lines
-   *          the lines of source (possible with empty lines) with single statement.
-   * @param target
-   *          describes location for new {@link Statement}.
-   */
-  public Statement addStatement(List<String> lines, StatementTarget target) throws Exception {
-    Assert.isNotNull(lines);
-    // statement or method declaration required
-    Assert.isTrue(target.getBlock() != null || target.getStatement() != null);
-    // prepare code generation constants
-    AstCodeGeneration generation = getGeneration();
-    String singleIndent = generation.getIndentation(1);
-    String eol = generation.getEndOfLine();
-    //
-    if (target.getStatement() != null) {
-      Statement targetStatement = target.getStatement();
-      Block targetBlock = ensureParentBlock(targetStatement);
-      // prepare information about target statement
-      String indent = getWhitespaceToLeft(targetStatement.getStartPosition(), false);
-      int index = targetBlock.statements().indexOf(targetStatement);
-      // prepare source
-      String source = getIndentedSource(lines, indent, singleIndent, eol);
-      source = replaceSourceTemplates(targetStatement.getStartPosition(), source);
-      // add statement
-      Statement newStatement;
-      if (target.isBefore()) {
-        // add before any empty lines and EOLC lines
-        int position = skipWhitespaceAndPureEOLCToLeft(targetStatement.getStartPosition());
-        // add source
-        replaceSubstring(position, 0, source + eol);
-        // parse statement
-        newStatement = getParser().parseStatement(position, source);
-        DomGenerics.statements(targetBlock).add(index, newStatement);
-      } else {
-        // move at the end of target
-        int position = getStatementEndIndex(targetStatement);
-        source = eol + source;
-        // add source
-        replaceSubstring(position, 0, source);
-        // parse statement
-        newStatement = getParser().parseStatement(position, source);
-        DomGenerics.statements(targetBlock).add(index + 1, newStatement);
-      }
-      //
-      resolveImports(newStatement);
-      return newStatement;
-    } else {
-      Block targetBlock = target.getBlock();
-      // prepare indentation
-      String indent;
-      {
-        if (targetBlock.getParent() instanceof MethodDeclaration) {
-          indent = getWhitespaceToLeft(targetBlock.getParent().getStartPosition(), false);
-        } else {
-          indent = getWhitespaceToLeft(targetBlock.getStartPosition(), false);
-        }
-        indent += singleIndent;
-      }
-      // prepare source
-      String source = getIndentedSource(lines, indent, singleIndent, eol);
-      source = replaceSourceTemplates(targetBlock.getStartPosition(), source);
-      // add statement
-      Statement newStatement;
-      if (target.isBefore()) {
-        // prepare position as position after '{' of block
-        int position;
-        {
-          position = targetBlock.getStartPosition();
-          Assert.isTrue(position != -1);
-          position++;
-        }
-        // add source
-        {
-          String prefix = eol;
-          replaceSubstring(position, 0, prefix + source);
-          position += prefix.length();
-        }
-        // parse statement
-        newStatement = getParser().parseStatement(position, source);
-        DomGenerics.statements(targetBlock).add(0, newStatement);
-      } else {
-        // prepare position as position of '}' of block
-        int position = AstNodeUtils.getSourceEnd(targetBlock) - 1;
-        String endMethodIndent = getWhitespaceToLeft(position, false);
-        position -= endMethodIndent.length();
-        // add source
-        replaceSubstring(position, 0, source + eol);
-        // parse statement
-        newStatement = getParser().parseStatement(position, source);
-        DomGenerics.statements(targetBlock).add(newStatement);
-      }
-      //
-      resolveImports(newStatement);
-      return newStatement;
-    }
-  }
-
-  /**
-   * Removes given {@link Statement}. It removes also any whitespace and comments between removing
-   * {@link Statement}.
-   */
-  public void removeStatement(Statement statement) throws Exception {
-    if (AstNodeUtils.isDanglingNode(statement)) {
-      return;
-    }
-    Block block = (Block) statement.getParent();
-    List<Statement> statements = DomGenerics.statements(block);
-    //
-    if (statements.size() == 1 && block.getParent() instanceof Block) {
-      removeStatement(block);
-    } else {
-      // prepare start of source to remove
-      int startIndex;
-      {
-        int index = statements.indexOf(statement);
-        if (index != 0) {
-          Statement prevStatement = statements.get(index - 1);
-          startIndex = AstNodeUtils.getSourceEnd(prevStatement);
-        } else {
-          startIndex = block.getStartPosition() + "{".length();
-        }
-      }
-      // prepare end of source to remove
-      int endIndex = getStatementEndIndex(statement);
-      // remove statement and corresponding source
-      statements.remove(statement);
-      replaceSubstring(startIndex, endIndex - startIndex, "");
-    }
-  }
-
-  /**
-   * Removes the {@link Statement} that encloses given {@link ASTNode}.
-   */
-  public void removeEnclosingStatement(ASTNode node) throws Exception {
-    Statement statement = AstNodeUtils.getEnclosingStatement(node);
-    removeStatement(statement);
-  }
-
-  /**
-   * Re-indents source at place.
-   */
-  private void reindentSource(int sourceStart, int sourceLength, String indent, String eol)
-      throws Exception {
-    // prepare lines
-    String[] lines;
-    {
-      String source = getSource(sourceStart, sourceLength);
-      lines = StringUtils.splitByWholeSeparatorPreserveAllTokens(source, eol);
-    }
-    // change indentation for lines
-    int position = sourceStart;
-    String oldIndent = null;
-    for (String line : lines) {
-      // prepare line indentation
-      String lineIndent = "";
-      {
-        int endOfIndent = StringUtils.indexOfAnyBut(line, "\t ");
-        if (endOfIndent != -1) {
-          lineIndent = line.substring(0, endOfIndent);
-        } else {
-          lineIndent = line;
-        }
-      }
-      // use indentation of first line as base
-      if (oldIndent == null) {
-        oldIndent = lineIndent;
-      }
-      // replace indentation
-      if (lineIndent.startsWith(oldIndent)) {
-        replaceSubstring(position, oldIndent.length(), indent);
-        position += indent.length() - oldIndent.length();
-      }
-      // move position to next line
-      position += line.length() + eol.length();
-    }
-  }
-
-  /**
-   * Move statement to given {@link StatementTarget}.
-   *
-   * @param target
-   *          the new position for statement
-   * @param statement
-   *          the statement to move
-   * @param includePrefixComment
-   *          flag to mark that comment before statement also should be moved
-   */
-  public void moveStatement(Statement statement, StatementTarget target) throws Exception {
-    // statement or method declaration required
-    Assert.isTrue(target.getBlock() != null || target.getStatement() != null);
-    // check for no-op
-    if (target.getStatement() != null) {
-      Statement targetStatement = target.getStatement();
-      // adding relative same statement
-      if (targetStatement == statement) {
-        return;
-      }
-      // adding before current next statement
-      Block targetBlock = (Block) targetStatement.getParent();
-      List<Statement> targetStatements = DomGenerics.statements(targetBlock);
-      if (statement.getParent() == targetStatement.getParent()) {
-        if (target.isBefore()) {
-          // statement before target
-          if (targetStatements.indexOf(statement) == targetStatements.indexOf(targetStatement) - 1) {
-            return;
-          }
-        } else {
-          // statement after target
-          if (targetStatements.indexOf(statement) == targetStatements.indexOf(targetStatement) + 1) {
-            return;
-          }
-        }
-      }
-    } else {
-      Block targetBlock = target.getBlock();
-      List<Statement> targetStatements = DomGenerics.statements(targetBlock);
-      if (statement.getParent() == targetBlock) {
-        if (target.isBefore()) {
-          if (targetStatements.indexOf(statement) == 0) {
-            return;
-          }
-        } else {
-          if (targetStatements.indexOf(statement) == targetStatements.size() - 1) {
-            return;
-          }
-        }
-      }
-    }
-    // prepare code generation constants
-    AstCodeGeneration generation = getGeneration();
-    String singleIndent = generation.getIndentation(1);
-    String eol = generation.getEndOfLine();
-    // prepare source location
-    Block sourceBlock = (Block) statement.getParent();
-    int sourceBegin = skipWhitespaceAndPureEOLCToLeft(statement.getStartPosition());
-    int sourceLength = getStatementEndIndex(statement) - sourceBegin;
-    // remove leading EOL
-    {
-      int leftEOLEnd = sourceBegin;
-      int leftEOLBegin = skipSingleEOLToLeft(leftEOLEnd);
-      int leftEOLLength = leftEOLEnd - leftEOLBegin;
-      //
-      replaceSubstring(leftEOLBegin, leftEOLLength, "");
-      sourceBegin -= leftEOLLength;
-    }
-    //
-    if (target.getStatement() != null) {
-      Statement targetStatement = target.getStatement();
-      String indent = getWhitespaceToLeft(targetStatement.getStartPosition(), false);
-      //
-      int position;
-      if (target.isBefore()) {
-        // move before any empty lines and EOLC lines
-        position = skipWhitespaceAndPureEOLCToLeft(targetStatement.getStartPosition());
-        // move source
-        position = moveSource(position, sourceBegin, sourceLength);
-        // add EOL after statement
-        replaceSubstring(position + sourceLength, 0, eol);
-      } else {
-        // move at the end of target
-        position = getStatementEndIndex(targetStatement);
-        // move source
-        position = moveSource(position, sourceBegin, sourceLength);
-        // add EOL before statement
-        replaceSubstring(position, 0, eol);
-        position += eol.length();
-      }
-      // move node
-      {
-        Block targetBlock = (Block) targetStatement.getParent();
-        int index = targetBlock.statements().indexOf(targetStatement);
-        if (!target.isBefore()) {
-          index++;
-        }
-        if (sourceBlock == targetBlock && sourceBlock.statements().indexOf(statement) < index) {
-          index--;
-        }
-        sourceBlock.statements().remove(statement);
-        DomGenerics.statements(targetBlock).add(index, statement);
-      }
-      // re-indent
-      reindentSource(position, sourceLength, indent, eol);
-    } else {
-      Block targetBlock = target.getBlock();
-      // prepare indentation
-      String indent;
-      {
-        ASTNode indentNode = targetBlock;
-        if (targetBlock.getLocationInParent() == MethodDeclaration.BODY_PROPERTY
-            || targetBlock.getLocationInParent() == TryStatement.BODY_PROPERTY) {
-          indentNode = targetBlock.getParent();
-        }
-        indent = getWhitespaceToLeft(indentNode.getStartPosition(), false);
-        indent += singleIndent;
-      }
-      //
-      int position;
-      if (target.isBefore()) {
-        // prepare position as position after '{' of block
-        {
-          position = targetBlock.getStartPosition();
-          Assert.isTrue(position != -1);
-          position++;
-        }
-        // move source
-        position = moveSource(position, sourceBegin, sourceLength);
-        // add EOL before statement
-        replaceSubstring(position, 0, eol);
-        position += eol.length();
-        // move node
-        sourceBlock.statements().remove(statement);
-        DomGenerics.statements(targetBlock).add(0, statement);
-      } else {
-        // prepare position as position of '}' of block
-        position = AstNodeUtils.getSourceEnd(targetBlock) - 1;
-        String endMethodIndent = getWhitespaceToLeft(position, false);
-        position -= endMethodIndent.length();
-        // move source
-        position = moveSource(position, sourceBegin, sourceLength);
-        // add EOL after statement
-        replaceSubstring(position + sourceLength, 0, eol);
-        // move node
-        sourceBlock.statements().remove(statement);
-        DomGenerics.statements(targetBlock).add(statement);
-      }
-      // re-indent
-      reindentSource(position, sourceLength, indent, eol);
-    }
-  }
-
-  /**
-   * Moves piece of source with given start/length to target position.
-   *
-   * @return the new value of target
-   */
-  private int moveSource(int target, int start, int length) throws Exception {
-    String source = getSource(start, length);
-    // prepare locations
-    final int b_pos = start;
-    final int b_len = length;
-    final int b_end = b_pos + b_len;
-    final int t_pos = target;
-    //
-    if (b_pos > t_pos) {
-      m_document.replace(b_pos, b_len, "");
-      m_document.replace(t_pos, 0, source);
-      // modify source ranges for AST nodes
-      m_astUnit.accept(new ASTVisitor(true) {
-        @Override
-        public void postVisit(ASTNode node) {
-          int n_pos = node.getStartPosition();
-          int n_len = node.getLength();
-          int n_end = n_pos + n_len;
-          while (true) {
-            // node starts after source end
-            if (n_pos >= b_end) {
-              return;
-            }
-            // node ends before target
-            if (n_end <= t_pos) {
-              return;
-            }
-            // node contains source and target
-            if (n_pos < t_pos && n_end > b_end) {
-              return;
-            }
-            // node is inside of block
-            if (n_pos >= b_pos && n_end <= b_end) {
-              node.setSourceRange(t_pos + n_pos - b_pos, n_len);
-              return;
-            }
-            // node is between target and source
-            if (n_pos >= t_pos && n_end <= b_pos) {
-              node.setSourceRange(n_pos + b_len, n_len);
-              return;
-            }
-            // node contains target
-            if (n_pos < t_pos && n_end > t_pos) {
-              node.setSourceRange(n_pos, n_len + b_len);
-              return;
-            }
-            // node contains source
-            /*if (n_pos < b_pos && n_end > b_end)*/{
-              node.setSourceRange(n_pos + b_len, n_len - b_len);
-              return;
-            }
-          }
-        }
-      });
-    } else {
-      m_document.replace(t_pos, 0, source);
-      m_document.replace(b_pos, b_len, "");
-      // modify source ranges for AST nodes
-      m_astUnit.accept(new ASTVisitor(true) {
-        @Override
-        public void postVisit(ASTNode node) {
-          int n_pos = node.getStartPosition();
-          int n_len = node.getLength();
-          int n_end = n_pos + n_len;
-          // node ends before source
-          if (n_end <= b_pos) {
-            return;
-          }
-          // node starts after target
-          if (n_pos >= t_pos) {
-            return;
-          }
-          // node contains source and target
-          if (n_pos < b_pos && n_end > t_pos) {
-            return;
-          }
-          // node was inside of block
-          if (n_pos >= b_pos && n_end <= b_end) {
-            node.setSourceRange(t_pos - b_len + n_pos - b_pos, n_len);
-            return;
-          }
-          // node is between source and target
-          if (n_pos >= b_end && n_end <= t_pos) {
-            node.setSourceRange(n_pos - b_len, n_len);
-            return;
-          }
-          // node contains target
-          if (n_pos < t_pos && n_end > t_pos) {
-            node.setSourceRange(n_pos - b_len, n_len + b_len);
-            return;
-          }
-          // node contains source
-          /*if (n_pos < b_pos && n_end > b_end)*/{
-            node.setSourceRange(n_pos, n_len - b_len);
-            return;
-          }
-        }
-      });
-    }
-    // update target
-    if (start < target) {
-      target -= length;
-    }
-    return target;
-  }
-
-  /**
-   * @return the index of character directly after end of given {@link Statement}. This can be
-   *         beginning of the next statement or EOL. This method skips any whitespace characters and
-   *         end-of-line comments.
-   */
-  public int getStatementEndIndex(Statement statement) {
-    int index = statement.getStartPosition() + statement.getLength();
-    char c;
-    // skip spaces
-    while (true) {
-      c = getChar(index++);
-      if (Character.isWhitespace(c)) {
-        if (c == '\r' || c == '\n') {
-          break;
-        }
-      } else {
-        break;
-      }
-    }
-    // skip end-of-line comment
-    if (c == '/' && getChar(index) == '/') {
-      while (true) {
-        c = getChar(index++);
-        if (c == '\r' || c == '\n') {
-          break;
-        }
-      }
-    }
-    // return result
-    return index - 1;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Fields operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds new {@link FieldDeclaration} with given source.
-   */
-  public FieldDeclaration addFieldDeclaration(String source, BodyDeclarationTarget target)
-      throws Exception {
-    return addFieldDeclaration(ImmutableList.of(source), target);
-  }
-
-  /**
-   * Adds new {@link FieldDeclaration} with given source lines.
-   */
-  public FieldDeclaration addFieldDeclaration(List<String> lines, BodyDeclarationTarget target)
-      throws Exception {
-    return (FieldDeclaration) addBodyDeclaration(lines, target);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Methods operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds new {@link MethodDeclaration} with given source in location of given
-   * {@link StatementTarget}.
-   *
-   * @param header
-   *          the header of method without '{'
-   * @param bodyLines
-   *          the lines of method body
-   * @param target
-   *          describes location for new {@link BodyDeclaration}
-   */
-  public MethodDeclaration addMethodDeclaration(String header,
-      List<String> bodyLines,
-      BodyDeclarationTarget target) throws Exception {
-    return addMethodDeclaration(ImmutableList.<String>of(), header, bodyLines, target);
-  }
-
-  /**
-   * Adds new {@link MethodDeclaration} with given source in location of given
-   * {@link StatementTarget}.
-   *
-   * @param bodyLines
-   *          the lines of method JavaDoc and/or annotations
-   * @param header
-   *          the header of method without '{'
-   * @param bodyLines
-   *          the lines of method body
-   * @param target
-   *          describes location for new {@link BodyDeclaration}
-   */
-  public MethodDeclaration addMethodDeclaration(List<String> annotations,
-      String header,
-      List<String> bodyLines,
-      BodyDeclarationTarget target) throws Exception {
-    // prepare full method lines
-    List<String> lines = Lists.newArrayList();
-    {
-      lines.addAll(annotations);
-      if (bodyLines != null) {
-        lines.add(header + " {");
-        // body
-        String singleIndent = getGeneration().getIndentation(1);
-        for (String bodyLine : bodyLines) {
-          lines.add(singleIndent + bodyLine);
-        }
-        // close method
-        lines.add("}");
-      } else {
-        lines.add(header);
-      }
-    }
-    // add method
-    return (MethodDeclaration) addBodyDeclaration(lines, target);
-  }
-
-  /**
-   * Adds new {@link MethodDeclaration} without body in location of given {@link StatementTarget}.
-   *
-   * @param header
-   *          the header of method.
-   * @param target
-   *          describes location for new {@link BodyDeclaration}
-   */
-  public MethodDeclaration addInterfaceMethodDeclaration(String header, BodyDeclarationTarget target)
-      throws Exception {
-    List<String> lines = ImmutableList.of(header + ";");
-    return (MethodDeclaration) addBodyDeclaration(lines, target);
-  }
-
-  /**
-   * @return the source for parameters of given {@link MethodDeclaration}.<br>
-   *
-   *         <code>public void split(String s, int count)</code> -> <code>String s, int count</code>
-   */
-  public String getParametersSource(MethodDeclaration method) {
-    StringBuffer sb = new StringBuffer();
-    for (SingleVariableDeclaration parameter : DomGenerics.parameters(method)) {
-      if (sb.length() != 0) {
-        sb.append(", ");
-      }
-      sb.append(getSource(parameter));
-    }
-    return sb.toString();
-  }
-
-  /**
-   * @return the array of parameter names of given {@link MethodDeclaration}.
-   *
-   *         <code>public void split(String s, int count)</code> -> <code>{"s", "count"}</code>
-   */
-  public String[] getParameterNames(MethodDeclaration method) {
-    List<SingleVariableDeclaration> parameters = DomGenerics.parameters(method);
-    String names[] = new String[parameters.size()];
-    //
-    for (int i = 0; i < names.length; i++) {
-      SingleVariableDeclaration parameter = parameters.get(i);
-      names[i] = parameter.getName().getIdentifier();
-    }
-    //
-    return names;
-  }
-
-  /**
-   * Replaces the name of {@link MethodDeclaration}.
-   */
-  public void replaceMethodName(MethodDeclaration method, String newName) throws Exception {
-    setIdentifier(method.getName(), newName);
-    replaceMethodBinding(method);
-  }
-
-  /**
-   * Replaces {@link IMethodBinding} for given {@link MethodDeclaration} according to actual source.
-   */
-  private void replaceMethodBinding(MethodDeclaration method) throws Exception {
-    MethodDeclaration parsedMethod = parseExistingMethod(method);
-    replaceMethodBinding(method, parsedMethod);
-  }
-
-  /**
-   * When we parse existing {@link MethodDeclaration} we should ensure that it is not added into
-   * parsing context, or this will cause duplicate method compilation problem
-   */
-  private MethodDeclaration parseExistingMethod(MethodDeclaration method) throws Exception {
-    method.setProperty(AstParser.KEY_IGNORE_THIS_METHOD, Boolean.TRUE);
-    try {
-      return (MethodDeclaration) m_parser.parseBodyDeclaration(method.getStartPosition(), "");
-    } finally {
-      method.setProperty(AstParser.KEY_IGNORE_THIS_METHOD, null);
-    }
-  }
-
-  /**
-   * Replaces the return {@link Type} in {@link MethodDeclaration} with new type.
-   *
-   * @param method
-   *          the {@link MethodDeclaration} to replace return type.
-   * @param newTypeName
-   *          the fully qualified name of type to use.
-   */
-  public void replaceMethodType(MethodDeclaration method, String newTypeName) throws Exception {
-    // replace source/AST
-    {
-      Type oldType = method.getReturnType2();
-      Type newType = getParser().parseQualifiedType(oldType.getStartPosition(), newTypeName);
-      // replace Type source
-      replaceSubstring(oldType, newTypeName);
-      // replace Type node
-      {
-        method.setReturnType2(newType);
-        resolveImports(newType);
-      }
-    }
-    // replace binding
-    replaceMethodBinding(method);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Source utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the source of stub copy of given {@link MethodDeclaration}.
-   */
-  public String getMethodStubSource(MethodDeclaration methodDeclaration) throws Exception {
-    IMethodBinding methodBinding = AstNodeUtils.getMethodBinding(methodDeclaration);
-    // header
-    StringBuilder sb = new StringBuilder();
-    sb.append("\t");
-    sb.append(getMethodHeaderSource(methodDeclaration));
-    sb.append(" {\n");
-    // return stub
-    {
-      ITypeBinding returnType = methodBinding.getReturnType();
-      String returnTypeName = AstNodeUtils.getFullyQualifiedName(returnType, false);
-      if (!returnTypeName.equals("void")) {
-        sb.append("\t\treturn ");
-        sb.append(AstParser.getDefaultValue(returnTypeName));
-        sb.append(";\n");
-      }
-    }
-    // close body
-    sb.append("\t}");
-    return sb.toString();
-  }
-
-  /**
-   * @return the copy of {@link MethodDeclaration} header source, which uses same names for
-   *         parameters and fully qualified names for all types.
-   */
-  public String getMethodHeaderSource(MethodDeclaration method) {
-    StringBuffer sb = new StringBuffer();
-    IMethodBinding methodBinding = AstNodeUtils.getMethodBinding(method);
-    // append modifiers
-    {
-      List<ASTNode> modifiersNodes = DomGenerics.modifiersNodes(method);
-      List<Modifier> modifiers = GenericsUtils.select(modifiersNodes, Modifier.class);
-      for (Modifier modifier : modifiers) {
-        sb.append(modifier);
-        sb.append(" ");
-      }
-    }
-    // append return type
-    {
-      ITypeBinding returnType = methodBinding.getReturnType();
-      String returnTypeName = AstNodeUtils.getFullyQualifiedName(returnType, false);
-      sb.append(returnTypeName);
-      sb.append(" ");
-    }
-    // append name
-    sb.append(method.getName().getIdentifier());
-    sb.append("(");
-    // append parameters
-    {
-      ITypeBinding[] parameterTypes = methodBinding.getParameterTypes();
-      List<SingleVariableDeclaration> parameters = DomGenerics.parameters(method);
-      for (int i = 0; i < parameterTypes.length; i++) {
-        ITypeBinding parameterType = parameterTypes[i];
-        String parameterTypeName = AstNodeUtils.getFullyQualifiedName(parameterType, false);
-        String parameterName = parameters.get(i).getName().getIdentifier();
-        if (i != 0) {
-          sb.append(", ");
-        }
-        sb.append(parameterTypeName);
-        sb.append(" ");
-        sb.append(parameterName);
-      }
-    }
-    // done
-    sb.append(")");
-    return sb.toString();
-  }
-
-  /**
-   * @return the source for list of type arguments.
-   */
-  public String getTypeArgumentsSource(ITypeBinding[] typeArguments) {
-    if (typeArguments.length == 0) {
-      return "";
-    }
-    // prepare type arguments source
-    StringBuilder typeArgumentsBuilder = new StringBuilder();
-    typeArgumentsBuilder.append("<");
-    for (ITypeBinding typeArgument : typeArguments) {
-      if (typeArgumentsBuilder.length() > 1) {
-        typeArgumentsBuilder.append(", ");
-      }
-      typeArgumentsBuilder.append(AstNodeUtils.getFullyQualifiedName(typeArgument, false));
-    }
-    typeArgumentsBuilder.append(">");
-    return typeArgumentsBuilder.toString();
-  }
-
-  /**
-   * @return the source for type arguments of {@link ClassInstanceCreation}, including support for
-   *         possible {@link AnonymousClassDeclaration}
-   */
-  public String getTypeArgumentsSource(ClassInstanceCreation creation) {
-    // prepare ITypeBinding with type arguments
-    ITypeBinding typeBinding;
-    AnonymousClassDeclaration anonymousDeclaration = creation.getAnonymousClassDeclaration();
-    if (anonymousDeclaration != null) {
-      typeBinding = AstNodeUtils.getTypeBinding(anonymousDeclaration).getSuperclass();
-    } else {
-      typeBinding = AstNodeUtils.getTypeBinding(creation);
-    }
-    // prepare type arguments
-    ITypeBinding[] typeArguments = typeBinding.getTypeArguments();
-    return getTypeArgumentsSource(typeArguments);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Classes operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds new {@link TypeDeclaration} with given source in location of given {@link StatementTarget}
-   * .
-   *
-   * @param lines
-   *          the lines of class
-   * @param target
-   *          describes location for new {@link BodyDeclaration}
-   */
-  public TypeDeclaration addTypeDeclaration(List<String> lines, BodyDeclarationTarget target)
-      throws Exception {
-    return (TypeDeclaration) addBodyDeclaration(lines, target);
-  }
-
-  /**
-   * Ensures that given {@link TypeDeclaration} interface with given name.
-   *
-   * @return <code>false</code> if class already implements given interface and <code>true</code> in
-   *         other case.
-   */
-  public boolean ensureInterfaceImplementation(TypeDeclaration type, String interfaceClassName)
-      throws Exception {
-    // find last implement interface and check, may be required interface is already implemented
-    Type lastInterface = null;
-    for (Type interfaceType : DomGenerics.superInterfaces(type)) {
-      String implementedInterface = AstNodeUtils.getFullyQualifiedName(interfaceType, true);
-      if (implementedInterface.equals(interfaceClassName)) {
-        return false;
-      }
-      lastInterface = interfaceType;
-    }
-    // prepare position
-    int pos;
-    String codePrefix;
-    if (lastInterface == null) {
-      ASTNode typeName = type.getName();
-      if (type.getSuperclassType() != null) {
-        typeName = type.getSuperclassType();
-      }
-      pos = typeName.getStartPosition() + typeName.getLength();
-      codePrefix = " implements ";
-    } else {
-      pos = lastInterface.getStartPosition() + lastInterface.getLength();
-      codePrefix = ", ";
-    }
-    // prepare new interfaceType node
-    SimpleType interfaceType;
-    {
-      TypeLiteral typeLiteral =
-          (TypeLiteral) m_parser.parseExpression(type.getStartPosition(), interfaceClassName
-              + ".class");
-      AstNodeUtils.moveNode(typeLiteral, pos + codePrefix.length());
-      interfaceType = (SimpleType) typeLiteral.getType();
-      typeLiteral.setType(typeLiteral.getAST().newPrimitiveType(PrimitiveType.BOOLEAN));
-    }
-    // update source/AST
-    replaceSubstring(pos, 0, codePrefix + interfaceClassName);
-    DomGenerics.superInterfaces(type).add(interfaceType);
-    // update ITypeBinding
-    {
-      ITypeBinding interfaceBinding = AstNodeUtils.getTypeBinding(interfaceType);
-      DesignerTypeBinding typeBinding = getDesignerTypeBinding(type);
-      typeBinding.addInterface(interfaceBinding);
-    }
-    // finalize
-    resolveImports(interfaceType);
-    return true;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // BodyDeclaration operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Ensures that {@link MethodDeclaration} declares as thrown exception with given name, or its
-   * superclass.
-   */
-  public void ensureThrownException(MethodDeclaration method, String requiredException)
-      throws Exception {
-    ITypeHierarchy requiredHierarchy;
-    {
-      IType requiredExceptionType = getJavaProject().findType(requiredException);
-      Assert.isNotNull2(requiredExceptionType, "No such exception type: {0}", requiredException);
-      requiredHierarchy = requiredExceptionType.newSupertypeHierarchy(null);
-    }
-    // find last exception and check, may be required exception is already declared
-    Name lastName = null;
-    for (Name declaredTypeName : DomGenerics.thrownExceptions(method)) {
-      String declaredName = AstNodeUtils.getFullyQualifiedName(declaredTypeName, false);
-      IType declaredType = getJavaProject().findType(declaredName);
-      if (requiredHierarchy.contains(declaredType)) {
-        return;
-      }
-      lastName = declaredTypeName;
-    }
-    // prepare position
-    int pos;
-    String codePrefix;
-    if (lastName == null) {
-      ASTNode name = method.getName();
-      pos = AstNodeUtils.getSourceEnd(name);
-      pos = indexOf(")", pos) + 1;
-      codePrefix = " throws ";
-    } else {
-      pos = AstNodeUtils.getSourceEnd(lastName);
-      codePrefix = ", ";
-    }
-    // prepare new exception nodes
-    SimpleType newExceptionType;
-    Name newExceptionTypeName;
-    {
-      TypeLiteral typeLiteral =
-          (TypeLiteral) m_parser.parseExpression(pos, requiredException + ".class");
-      AstNodeUtils.moveNode(typeLiteral, pos + codePrefix.length());
-      newExceptionType = (SimpleType) typeLiteral.getType();
-      newExceptionTypeName = newExceptionType.getName();
-      newExceptionType.setName(typeLiteral.getAST().newSimpleName("filler"));
-    }
-    // update source/AST
-    replaceSubstring(pos, 0, codePrefix + requiredException);
-    DomGenerics.thrownExceptions(method).add(newExceptionTypeName);
-    // update ITypeBinding
-    {
-      ITypeBinding newExceptionBinding = AstNodeUtils.getTypeBinding(newExceptionType);
-      DesignerMethodBinding methodBinding = getDesignerMethodBinding(method);
-      methodBinding.addExceptionType(newExceptionBinding);
-    }
-    // finalize
-    resolveImports(method);
-  }
-
-  /**
-   * Adds new {@link BodyDeclaration} with given source in location of given {@link StatementTarget}
-   * .
-   *
-   * @param lines
-   *          the lines of source for new {@link BodyDeclaration}.
-   * @param target
-   *          describes location for new {@link BodyDeclaration}.
-   */
-  private BodyDeclaration addBodyDeclaration(List<String> lines, BodyDeclarationTarget target)
-      throws Exception {
-    Assert.isNotNull(lines);
-    Assert.isNotNull(target);
-    // type or body declaration required
-    TypeDeclaration targetType = target.getType();
-    BodyDeclaration targetDecl = target.getDeclaration();
-    Assert.isTrue(targetType != null || targetDecl != null);
-    // prepare code generation constants
-    AstCodeGeneration generation = getGeneration();
-    String singleIndent = generation.getIndentation(1);
-    String eol = generation.getEndOfLine();
-    // relative to BodyDeclaration
-    if (targetDecl != null) {
-      // prepare information about target body declaration
-      targetType = (TypeDeclaration) targetDecl.getParent();
-      String indent = getWhitespaceToLeft(targetDecl.getStartPosition(), false);
-      int index = targetType.bodyDeclarations().indexOf(targetDecl);
-      // add new declaration
-      BodyDeclaration newDeclaration;
-      String source = getIndentedSource(lines, indent, singleIndent, eol);
-      if (target.isBefore()) {
-        // add before any empty lines and EOLC lines
-        int position = skipWhitespaceAndPureEOLCToLeft(targetDecl.getStartPosition());
-        source = source + eol;
-        // parse declaration
-        newDeclaration = getParser().parseBodyDeclaration(position, source);
-        // add source
-        replaceSubstring(position, 0, source);
-        // add declaration
-        DomGenerics.bodyDeclarations(targetType).add(index, newDeclaration);
-      } else {
-        // move at the end of target
-        int position = AstNodeUtils.getSourceEnd(targetDecl);
-        position = skipWhitespaceEOLCToRight(position);
-        source = eol + source;
-        // parse declaration
-        newDeclaration = getParser().parseBodyDeclaration(position, source);
-        // add source
-        replaceSubstring(position, 0, source);
-        // add declaration
-        DomGenerics.bodyDeclarations(targetType).add(index + 1, newDeclaration);
-      }
-      //
-      resolveImports(newDeclaration);
-      return newDeclaration;
-    }
-    // relative to TypeDeclaration
-    {
-      removeDanglingJavadoc();
-      // prepare indent
-      String indent;
-      {
-        ASTNode indentNode;
-        if (AnonymousTypeDeclaration.is(targetType)) {
-          indentNode = AstNodeUtils.getEnclosingStatement(targetType);
-        } else {
-          indentNode = targetType;
-        }
-        indent = getWhitespaceToLeft(indentNode.getStartPosition(), false) + singleIndent;
-      }
-      String source = getIndentedSource(lines, indent, singleIndent, eol);
-      // add new body declaration
-      BodyDeclaration newDeclaration;
-      if (target.isBefore()) {
-        // prepare position as position after '{' of type declaration
-        int position = indexOfAny("{", targetType.getName().getStartPosition()) + 1;
-        source = eol + source;
-        // parse declaration
-        newDeclaration = getParser().parseBodyDeclaration(position, source);
-        // add source
-        replaceSubstring(position, 0, source);
-        // add declaration
-        DomGenerics.bodyDeclarations(targetType).add(0, newDeclaration);
-      } else {
-        // prepare position as position of '}' of type declaration
-        int position = AstNodeUtils.getSourceEnd(targetType) - 1;
-        position -= getWhitespaceToLeft(position, false).length();
-        source = source + eol;
-        // parse declaration
-        newDeclaration = getParser().parseBodyDeclaration(position, source);
-        // add source
-        replaceSubstring(position, 0, source);
-        // add declaration
-        DomGenerics.bodyDeclarations(targetType).add(newDeclaration);
-      }
-      //
-      resolveImports(newDeclaration);
-      return newDeclaration;
-    }
-  }
-
-  /**
-   * Removes given {@link BodyDeclaration}.
-   */
-  public void removeBodyDeclaration(BodyDeclaration declaration) throws Exception {
-    List<BodyDeclaration> declarations;
-    if (declaration.getParent() instanceof TypeDeclaration) {
-      TypeDeclaration typeDeclaration = (TypeDeclaration) declaration.getParent();
-      declarations = DomGenerics.bodyDeclarations(typeDeclaration);
-    } else {
-      declarations =
-          DomGenerics.bodyDeclarations((AnonymousClassDeclaration) declaration.getParent());
-    }
-    // prepare start of source to remove
-    int startIndex;
-    {
-      int index = declarations.indexOf(declaration);
-      if (index != 0) {
-        BodyDeclaration prevDeclaration = declarations.get(index - 1);
-        startIndex = prevDeclaration.getStartPosition() + prevDeclaration.getLength();
-        startIndex = skipWhitespaceEOLCToRight(startIndex);
-      } else {
-        if (declaration.getParent() instanceof TypeDeclaration) {
-          TypeDeclaration typeDeclaration = (TypeDeclaration) declaration.getParent();
-          startIndex = indexOfAny("{", typeDeclaration.getName().getStartPosition()) + 1;
-        } else {
-          startIndex = indexOfAny("{", declaration.getParent().getStartPosition()) + 1;
-        }
-      }
-    }
-    // prepare end of source to remove
-    int endIndex;
-    {
-      endIndex = declaration.getStartPosition() + declaration.getLength();
-      endIndex = skipWhitespaceEOLCToRight(endIndex);
-    }
-    // remove declaration and corresponding source
-    declarations.remove(declaration);
-    replaceSubstring(startIndex, endIndex - startIndex, "");
-  }
-
-  /**
-   * @return the position of first (to right) non whitespace character (excluding EOL) on same line.
-   *         This method also skips EOL comments.
-   */
-  private int skipWhitespaceEOLCToRight(int position) throws BadLocationException, Exception {
-    for (;; position++) {
-      char c = m_document.getChar(position);
-      // stop on EOL
-      if (c == '\r' || c == '\n') {
-        break;
-      }
-      // skip whitespace
-      if (Character.isWhitespace(c)) {
-        continue;
-      }
-      // skip EOL comments
-      if (c == '/' && m_document.getChar(position + 1) == '/') {
-        position = getLineEnd(position);
-        break;
-      }
-      // stop
-      break;
-    }
-    return position;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // VariableDeclaration operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Removes {@link VariableDeclaration}.
-   */
-  public void removeVariableDeclaration(VariableDeclaration declaration) throws Exception {
-    ASTNode parent = declaration.getParent();
-    if (parent instanceof FieldDeclaration) {
-      // field
-      FieldDeclaration fieldDeclaration = (FieldDeclaration) parent;
-      List<VariableDeclarationFragment> fragments = DomGenerics.fragments(fieldDeclaration);
-      if (fragments.size() == 1) {
-        removeBodyDeclaration(fieldDeclaration);
-      } else {
-        removeVariableDeclaration(fieldDeclaration, fragments, fragments.indexOf(declaration));
-      }
-    } else if (parent instanceof VariableDeclarationStatement) {
-      // local variable
-      VariableDeclarationStatement variableDeclaration =
-          (VariableDeclarationStatement) declaration.getParent();
-      List<VariableDeclarationFragment> fragments = DomGenerics.fragments(variableDeclaration);
-      if (fragments.size() == 1) {
-        removeEnclosingStatement(declaration);
-      } else {
-        removeVariableDeclaration(variableDeclaration, fragments, fragments.indexOf(declaration));
-      }
-    } else {
-      // can't remove other cases
-      throw new IllegalArgumentException("Can not remove VariableDeclaration '"
-          + declaration.toString()
-          + "'");
-    }
-  }
-
-  /**
-   * Removes {@link VariableDeclarationFragment} from its parent.
-   */
-  private void removeVariableDeclaration(ASTNode parent,
-      List<VariableDeclarationFragment> fragments,
-      int index) throws Exception {
-    VariableDeclarationFragment declaration = fragments.get(index);
-    Assert.isTrue(
-        fragments.size() > 1,
-        "Last variable must be removed with parent body.",
-        getSource(declaration),
-        getSource(parent));
-    // prepare source interval to remove
-    int sourceBegin;
-    int sourceEnd;
-    {
-      sourceBegin = AstNodeUtils.getSourceBegin(declaration);
-      sourceEnd = AstNodeUtils.getSourceEnd(declaration);
-      if (index == 0) {
-        if (fragments.size() > 1) {
-          sourceEnd = indexOfAnyBut(", \t\r\n", sourceEnd);
-        }
-      } else {
-        sourceBegin = indexOfAnyButBackward(", \t\r\n", sourceBegin) + 1;
-      }
-    }
-    // remove node
-    fragments.remove(index);
-    // remove source
-    replaceSubstring(sourceBegin, sourceEnd - sourceBegin, "");
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Javadoc
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Removes dangling {@link Javadoc} sources at the end of {@link TypeDeclaration}s.
-   */
-  public void removeDanglingJavadoc() {
-    m_astUnit.accept(new AstVisitorEx() {
-      @Override
-      public void endVisitEx(TypeDeclaration node) throws Exception {
-        int typeEnd = AstNodeUtils.getSourceEnd(node) - 1;
-        int trailingJavadocEnd = skipWhitespaceAndPureEOLCToLeft(typeEnd);
-        trailingJavadocEnd = skipWhitespaceToLeft(trailingJavadocEnd, true);
-        // prepare begin/end of last JavaDoc at end of type
-        String source = getSource().substring(0, typeEnd);
-        int javadocBegin = source.lastIndexOf("/**");
-        if (javadocBegin != -1) {
-          int javadocEnd = source.indexOf("*/", javadocBegin) + "*/".length();
-          // if end of last JavaDoc is end of TypeDeclaration, i.e. no BodyDeclaration, remove it
-          if (javadocEnd == trailingJavadocEnd) {
-            javadocBegin = skipWhitespaceToLeft(javadocBegin, false);
-            replaceSubstring(javadocBegin, typeEnd - javadocBegin, "");
-          }
-        }
-      }
-    });
-  }
-
-  /**
-   * Sets new text for JavaDoc {@link TagElement}, i.e. {@link TextElement}.
-   *
-   * @param declaration
-   *          the {@link BodyDeclaration} to update {@link Javadoc}.
-   * @param tagName
-   *          the name of tag, such as <code>"myTag"</code>, with leading <code>"@"</code>.
-   * @param tagText
-   *          the text to set for tag, with leading space, or <code>null</code> if tag should be
-   *          removed.
-   *
-   * @return the {@link TagElement} that has single {@link TextElement} fragment with
-   *         <code>tagText</code> as text; or <code>null</code> if tag was removed.
-   */
-  public TagElement setJavadocTagText(BodyDeclaration declaration, String tagName, String tagText)
-      throws Exception {
-    Assert.isNotNull(tagName);
-    Assert.isLegal(tagName.length() != 0, "Empty name of tag.");
-    Assert.isLegal(tagName.startsWith("@"), "Tag name should start with '@'.");
-    Javadoc javadoc = declaration.getJavadoc();
-    // update/add tag
-    if (tagText != null) {
-      // update existing JavaDoc
-      if (javadoc != null) {
-        // try to find existing tag
-        for (TagElement tagElement : DomGenerics.tags(javadoc)) {
-          if (tagName.equals(tagElement.getTagName())) {
-            setJavadocTagText_replaceFragments(tagElement, tagText);
-            return tagElement;
-          }
-        }
-        // add new tag
-        {
-          List<TagElement> tags = DomGenerics.tags(javadoc);
-          // prepare position for new TagElement
-          int position;
-          {
-            int javadocPosition = javadoc.getStartPosition();
-            String prefix = getWhitespaceToLeft(javadocPosition, false);
-            String endOfLine = getGeneration().getEndOfLine();
-            if (tags.isEmpty()) {
-              position = javadocPosition + "/**".length();
-            } else {
-              position = AstNodeUtils.getSourceEnd(tags.get(tags.size() - 1));
-            }
-            String newCommentLine = endOfLine + prefix + " * ";
-            replaceSubstring(position, 0, newCommentLine);
-            position += newCommentLine.length();
-          }
-          // replace source
-          String tagSource = tagName + tagText;
-          replaceSubstring(position, 0, tagSource);
-          // add TagElement
-          TagElement tagElement = javadoc.getAST().newTagElement();
-          tagElement.setSourceRange(position, tagSource.length());
-          tagElement.setTagName(tagName);
-          tags.add(tagElement);
-          // add TextElement
-          TextElement textElement = javadoc.getAST().newTextElement();
-          textElement.setSourceRange(position + tagName.length(), tagText.length());
-          textElement.setText(tagText);
-          DomGenerics.fragments(tagElement).add(textElement);
-          // new TagElement
-          return tagElement;
-        }
-      } else {
-        javadoc = setJavadoc(declaration, new String[]{tagName + tagText});
-        return DomGenerics.tags(javadoc).get(0);
-      }
-    }
-    // remove tag
-    if (javadoc != null) {
-      for (Iterator<TagElement> I = DomGenerics.tags(javadoc).iterator(); I.hasNext();) {
-        TagElement tagElement = I.next();
-        if (tagName.equals(tagElement.getTagName())) {
-          int begin = AstNodeUtils.getSourceBegin(tagElement);
-          int end = AstNodeUtils.getSourceEnd(tagElement);
-          end = indexOfAnyBut(" \t\r\n*", end + 1);
-          // check for removing last line
-          if (getChar(end) == '/') {
-            begin = indexOfAnyButBackward("*", begin);
-          }
-          // replace source
-          replaceSubstring(begin, end - begin, "");
-          // remove tag
-          I.remove();
-          // remove JavaDoc is empty
-          if (DomGenerics.tags(javadoc).isEmpty()) {
-            setJavadoc(declaration, null);
-          }
-          // done
-          break;
-        }
-      }
-    }
-    return null;
-  }
-
-  private void setJavadocTagText_replaceFragments(TagElement tagElement, String tagText)
-      throws Exception {
-    List<ASTNode> fragments = DomGenerics.fragments(tagElement);
-    // replace source
-    int fragmentsPosition;
-    if (!fragments.isEmpty()) {
-      ASTNode firstFragment = fragments.get(0);
-      fragmentsPosition = AstNodeUtils.getSourceBegin(firstFragment);
-      int fragmentsLength = AstNodeUtils.getSourceEnd(tagElement) - fragmentsPosition;
-      replaceSubstring(fragmentsPosition, fragmentsLength, tagText);
-    } else {
-      fragmentsPosition = AstNodeUtils.getSourceEnd(tagElement);
-      replaceSubstring(fragmentsPosition, 0, tagText);
-      AstNodeUtils.setSourceLength(tagElement, tagElement.getLength() + tagText.length());
-    }
-    // replace fragments
-    fragments.clear();
-    TextElement textElement = tagElement.getAST().newTextElement();
-    textElement.setSourceRange(fragmentsPosition, tagText.length());
-    textElement.setText(tagText);
-    fragments.add(textElement);
-  }
-
-  /**
-   * Sets new {@link Javadoc} comment for {@link BodyDeclaration}.
-   *
-   * @param declaration
-   *          the {@link BodyDeclaration} to adds comment to.
-   * @param lines
-   *          the lines for {@link Javadoc} comment, may be <code>null</code> if {@link Javadoc}
-   *          should be removed.
-   *
-   * @return the added {@link Javadoc} object, or <code>null</code> if {@link Javadoc} was removed.
-   */
-  public Javadoc setJavadoc(BodyDeclaration declaration, String[] lines) throws Exception {
-    Javadoc oldJavadoc = declaration.getJavadoc();
-    // set new JavaDoc
-    if (lines != null) {
-      int position = declaration.getStartPosition();
-      // prepare code generation constants
-      AstCodeGeneration generation = getGeneration();
-      String eol = generation.getEndOfLine();
-      String indent = getWhitespaceToLeft(declaration.getStartPosition(), false);
-      // prepare source for comment
-      String comment;
-      {
-        StringBuilder sb = new StringBuilder();
-        sb.append("/**");
-        sb.append(eol);
-        for (String line : lines) {
-          sb.append(indent);
-          sb.append(" * ");
-          sb.append(line);
-          sb.append(eol);
-        }
-        sb.append(indent);
-        sb.append(" */");
-        comment = sb.toString();
-      }
-      // prepare JavaDoc
-      Javadoc javadoc;
-      {
-        BodyDeclaration tmpMethod =
-            getParser().parseBodyDeclaration(position, comment + " void __wbp_tmpMethod() {}");
-        javadoc = tmpMethod.getJavadoc();
-        tmpMethod.setJavadoc(null);
-      }
-      // set JavaDoc
-      if (oldJavadoc != null) {
-        int oldLength = oldJavadoc.getLength();
-        replaceSubstring(position, oldLength, comment);
-      } else {
-        comment += eol + indent;
-        replaceSubstring(position, 0, comment);
-        declaration.setSourceRange(position, comment.length() + declaration.getLength());
-      }
-      declaration.setJavadoc(javadoc);
-      return javadoc;
-    }
-    // remove existing JavaDoc
-    if (oldJavadoc != null) {
-      int sourceBegin = oldJavadoc.getStartPosition();
-      int sourceEnd = sourceBegin + oldJavadoc.getLength();
-      sourceEnd = indexOfAnyBut(" \t\r\n", sourceEnd);
-      replaceSubstring(sourceBegin, sourceEnd - sourceBegin, "");
-      declaration.setJavadoc(null);
-    }
-    return null;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Import operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private boolean m_resolveImports = true;
-
-  /**
-   * Ensure that the compilation unit includes an import for the given fully-qualified class name,
-   * adding one if it does not already exist.
-   *
-   * @param className
-   *          the fully qualified name of the class that must be imported
-   *
-   * @return the string that should be used as reference on class, can be short name (if import was
-   *         successful) or fully qualified name (if there is already imported class with same short
-   *         name).
-   */
-  public String ensureClassImport2(final String className) throws Exception {
-    final String shortClassName = CodeUtils.getShortClass(className);
-    List<ImportDeclaration> imports = DomGenerics.imports(m_astUnit);
-    // check, may be we don't need to add import
-    {
-      String packageName = CodeUtils.getPackage(className);
-      // check for java.lang
-      if ("java.lang".equals(packageName)) {
-        return shortClassName;
-      }
-      // check for existing import
-      for (Iterator<ImportDeclaration> I = imports.iterator(); I.hasNext();) {
-        ImportDeclaration currentImport = I.next();
-        String importName = currentImport.getName().toString();
-        if (importName.equals(className)
-            || currentImport.isOnDemand()
-            && importName.equals(packageName)) {
-          return shortClassName;
-        }
-      }
-      // check for class in same package
-      {
-        IPackageDeclaration[] packageDeclarations = m_modelUnit.getPackageDeclarations();
-        if (packageDeclarations.length != 0
-            && packageDeclarations[0].getElementName().equals(packageName)) {
-          return shortClassName;
-        }
-      }
-      // check for inner class
-      {
-        final AtomicBoolean hasInner = new AtomicBoolean();
-        m_astUnit.accept(new ASTVisitor() {
-          @Override
-          public boolean visit(Block node) {
-            return false;
-          }
-
-          @Override
-          public void endVisit(TypeDeclaration node) {
-            String qualifiedTypeName = AstNodeUtils.getFullyQualifiedName(node, false);
-            if (qualifiedTypeName.equals(className)) {
-              hasInner.set(true);
-            }
-          }
-        });
-        if (hasInner.get()) {
-          return shortClassName;
-        }
-      }
-    }
-    // check, may be we can not import because of conflict
-    {
-      boolean hasOnDemand = false;
-      // check, may be there is already import for class with same short name
-      for (Iterator<ImportDeclaration> I = imports.iterator(); I.hasNext();) {
-        ImportDeclaration currentImport = I.next();
-        if (currentImport.isOnDemand()) {
-          hasOnDemand = true;
-          break;
-        } else {
-          String importName = currentImport.getName().getFullyQualifiedName();
-          if (CodeUtils.getShortClass(importName).equals(shortClassName)) {
-            return className;
-          }
-        }
-      }
-      // there are on demand imports, we should check AST for imports
-      if (hasOnDemand) {
-        final AtomicBoolean conflict = new AtomicBoolean();
-        m_astUnit.accept(new ASTVisitor() {
-          @Override
-          public void endVisit(SimpleType node) {
-            if (!conflict.get()) {
-              String qualifiedTypeName = AstNodeUtils.getFullyQualifiedName(node, false);
-              boolean isQualified = qualifiedTypeName.equals(getSource(node));
-              boolean hasSameShort =
-                  CodeUtils.getShortClass(qualifiedTypeName).equals(shortClassName);
-              if (!isQualified && hasSameShort) {
-                conflict.set(true);
-              }
-            }
-          }
-        });
-        // if short class name conflicts, use long one
-        if (conflict.get()) {
-          return className;
-        }
-      }
-      // may be has TypeDeclaration with same short name
-      {
-        final AtomicBoolean hasTypeDeclarationWithSameShort = new AtomicBoolean();
-        m_astUnit.accept(new ASTVisitor() {
-          @Override
-          public boolean visit(Block node) {
-            return false;
-          }
-
-          @Override
-          public void endVisit(TypeDeclaration node) {
-            if (node.getName().getIdentifier().equals(shortClassName)) {
-              hasTypeDeclarationWithSameShort.set(true);
-            }
-          }
-        });
-        if (hasTypeDeclarationWithSameShort.get()) {
-          return className;
-        }
-      }
-    }
-    // OK, we need to add new import
-    {
-      String eol = getGeneration().getEndOfLine();
-      String sourcePrefix = "";
-      String sourceSuffix = "";
-      // prepare position for new import
-      int position;
-      if (!imports.isEmpty()) {
-        ImportDeclaration lastImport = imports.get(imports.size() - 1);
-        position = AstNodeUtils.getSourceEnd(lastImport);
-        sourcePrefix = eol;
-      } else if (m_astUnit.getPackage() != null) {
-        position = AstNodeUtils.getSourceEnd(m_astUnit.getPackage());
-        sourcePrefix = eol;
-      } else {
-        position = 0;
-        sourceSuffix = eol;
-      }
-      // add new import
-      {
-        // add import source
-        {
-          String source = sourcePrefix + "import " + className + ";" + sourceSuffix;
-          replaceSubstring(position, 0, source);
-        }
-        // add import node
-        {
-          int importPosition = position + sourcePrefix.length();
-          ImportDeclaration newImport =
-              getParser().parseImportDeclaration(importPosition, className);
-          imports.add(newImport);
-        }
-      }
-      // import successful, return short name
-      return shortClassName;
-    }
-  }
-
-  /**
-   * Sets the flag if imports should be automatically resolved.
-   */
-  public void setResolveImports(boolean resolveImports) {
-    m_resolveImports = resolveImports;
-  }
-
-  /**
-   * Given the {@link ASTNode} that can use fully qualified types, this method tries to import
-   * qualified types and update node/source accordingly. It is expected that node already added to
-   * the AST and source already modified.
-   */
-  public void resolveImports(final ASTNode node) {
-    if (!m_resolveImports) {
-      return;
-    }
-    node.accept(new AstVisitorEx() {
-      @Override
-      public boolean visitEx(QualifiedName qualifiedName) throws Exception {
-        String qualifiedClassName = qualifiedName.getFullyQualifiedName();
-        // if we can find IType with this name, consider it as type name
-        if (getJavaProject().findType(qualifiedClassName) != null) {
-          String shortClassName = ensureClassImport2(qualifiedClassName);
-          if (!shortClassName.equals(qualifiedClassName)) {
-            int sourceBegin = AstNodeUtils.getSourceBegin(qualifiedName);
-            // replace source
-            replaceSubstring(qualifiedName, shortClassName);
-            // replace node
-            {
-              ITypeBinding typeBinding = AstNodeUtils.getTypeBinding(qualifiedName);
-              SimpleName simpleName = m_parser.parseSimpleName(sourceBegin, shortClassName);
-              simpleName.setProperty(AstParser.KEY_TYPE_BINDING, typeBinding);
-              replaceNode(qualifiedName, simpleName);
-            }
-            // done
-            return false;
-          }
-        }
-        return true;
-      }
-    });
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // MethodInvocation operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Removes argument from {@link MethodInvocation}.
-   */
-  public void removeInvocationArgument(MethodInvocation invocation, int index) throws Exception {
-    removeInvocationArgument(invocation, DomGenerics.arguments(invocation), index);
-  }
-
-  /**
-   * Removes argument from {@link ClassInstanceCreation}.
-   */
-  public void removeCreationArgument(ClassInstanceCreation creation, int index) throws Exception {
-    removeInvocationArgument(creation, DomGenerics.arguments(creation), index);
-  }
-
-  /**
-   * Removes argument from {@link MethodInvocation} or {@link ClassInstanceCreation}.
-   */
-  private void removeInvocationArgument(ASTNode parent, List<Expression> arguments, int index)
-      throws Exception {
-    // prepare source interval to remove
-    int sourceBegin;
-    int sourceEnd;
-    {
-      Expression argument = arguments.get(index);
-      sourceBegin = AstNodeUtils.getSourceBegin(argument);
-      sourceEnd = AstNodeUtils.getSourceEnd(argument);
-      if (index == 0) {
-        if (arguments.size() == 1) {
-          sourceEnd = indexOf(")", sourceEnd);
-        } else {
-          sourceEnd = indexOfAnyBut(", \t\r\n", sourceEnd);
-        }
-      } else {
-        sourceBegin = indexOfAnyButBackward(", \t\r\n", sourceBegin) + 1;
-      }
-    }
-    // remove node
-    arguments.remove(index);
-    // remove parameter type from binding
-    DesignerMethodBinding methodBinding = getDesignerMethodBinding(parent);
-    if (index < methodBinding.getParameterTypes().length) {
-      // remove when not ellipsis argument
-      methodBinding.removeParameterType(index);
-    }
-    // remove source
-    replaceSubstring(sourceBegin, sourceEnd - sourceBegin, "");
-  }
-
-  /**
-   * @return the new argument added to the {@link MethodInvocation}.
-   */
-  public Expression addInvocationArgument(MethodInvocation invocation, int index, String source)
-      throws Exception {
-    return addInvocationArgument(invocation, DomGenerics.arguments(invocation), index, source);
-  }
-
-  /**
-   * @return the new argument added to the {@link ClassInstanceCreation}.
-   */
-  public Expression addCreationArgument(ClassInstanceCreation creation, int index, String source)
-      throws Exception {
-    return addInvocationArgument(creation, DomGenerics.arguments(creation), index, source);
-  }
-
-  /**
-   * Move argument from position with index <code>oldIndex</code> to position with index
-   * <code>newIndex</code>.
-   */
-  public Expression moveInvocationArgument(MethodInvocation invocation, int oldIndex, int newIndex)
-      throws Exception {
-    List<Expression> arguments = DomGenerics.arguments(invocation);
-    // prepare move expression
-    Expression expression = arguments.get(oldIndex);
-    // prepare move source
-    String source = getSource(expression);
-    // remove from old array
-    removeInvocationArgument(invocation, oldIndex);
-    // add to new array
-    int position = insertToInvocationBody(invocation, arguments, newIndex, source);
-    // add node
-    arguments.add(newIndex, expression);
-    AstNodeUtils.moveNode(expression, position);
-    return expression;
-  }
-
-  /**
-   * Adds new argument {@link Expression} into {@link MethodInvocation} or
-   * {@link ClassInstanceCreation}.
-   *
-   * @param parent
-   *          the {@link MethodInvocation} or {@link ClassInstanceCreation}.
-   * @param arguments
-   *          the {@link List} of argument {@link Expression}'s.
-   * @param index
-   *          the index for new argument.
-   * @param source
-   *          the source for new argument.
-   *
-   * @return the new argument {@link Expression}.
-   */
-  private Expression addInvocationArgument(Expression parent,
-      List<Expression> arguments,
-      int index,
-      String source) throws Exception {
-    int position = insertToInvocationBody(parent, arguments, index, source);
-    // add node
-    Expression argument = getParser().parseExpression(position, source);
-    arguments.add(index, argument);
-    // replace binding for method
-    replaceInvocationBinding(parent);
-    // return added argument
-    resolveImports(argument);
-    return argument;
-  }
-
-  /**
-   * Add to invocation body of source new argument with given index.
-   *
-   * @return the start position of inserted code.
-   */
-  private int insertToInvocationBody(Expression parent,
-      List<Expression> arguments,
-      int index,
-      String source) throws Exception {
-    int position;
-    String sourcePrefix = "";
-    String sourceSuffix = "";
-    if (index == 0) {
-      if (arguments.size() == 0) {
-        position = AstNodeUtils.getSourceEnd(parent) - 1;
-      } else {
-        Expression firstArgument = arguments.get(index);
-        position = AstNodeUtils.getSourceBegin(firstArgument);
-        sourceSuffix = ", ";
-      }
-    } else {
-      Expression prevArgument = arguments.get(index - 1);
-      position = AstNodeUtils.getSourceEnd(prevArgument);
-      sourcePrefix = ", ";
-    }
-    // add source
-    replaceSubstring(position, 0, sourcePrefix + source + sourceSuffix);
-    position += sourcePrefix.length();
-    return position;
-  }
-
-  /**
-   * Replaces the arguments of given {@link ClassInstanceCreation}.
-   *
-   * @param creation
-   *          the {@link ClassInstanceCreation} to replace arguments.
-   * @param lines
-   *          the {@link String}'s of arguments. Number of lines is not related with number of
-   *          arguments, lines are used to format code better.
-   */
-  public void replaceCreationArguments(ClassInstanceCreation creation, List<String> lines)
-      throws Exception {
-    replaceInvocationArguments(creation, creation.getType(), DomGenerics.arguments(creation), lines);
-  }
-
-  /**
-   * Replaces the arguments of given {@link MethodInvocation}.
-   *
-   * @param invocation
-   *          the {@link MethodInvocation} to replace arguments.
-   * @param lines
-   *          the {@link String}'s of arguments. Number of lines is not related with number of
-   *          arguments, lines are used to format code better.
-   */
-  public void replaceInvocationArguments(MethodInvocation invocation, List<String> lines)
-      throws Exception {
-    replaceInvocationArguments(
-        invocation,
-        invocation.getName(),
-        DomGenerics.arguments(invocation),
-        lines);
-  }
-
-  /**
-   * Replaces the arguments of given {@link ClassInstanceCreation} with new arguments specified as
-   * array of lines. Number of lines is not related with number of arguments, lines are used to
-   * format code better.
-   */
-  /**
-   * Replaces arguments of {@link MethodInvocation} or {@link ClassInstanceCreation}.
-   *
-   * @param parent
-   *          the {@link MethodInvocation} or {@link ClassInstanceCreation}.
-   * @param arguments
-   *          the {@link List} of <code>parent</code> arguments.
-   * @param lines
-   *          the {@link String}'s of arguments. Number of lines is not related with number of
-   *          arguments, lines are used to format code better.
-   */
-  private void replaceInvocationArguments(Expression parent,
-      ASTNode nameNode,
-      List<Expression> arguments,
-      List<String> lines) throws Exception {
-    // prepare new arguments source
-    String source;
-    {
-      // prepare code generation constants
-      AstCodeGeneration generation = getGeneration();
-      String singleIndent = generation.getIndentation(1);
-      String eol = generation.getEndOfLine();
-      //
-      Statement statement = AstNodeUtils.getEnclosingStatement(parent);
-      String indent = getWhitespaceToLeft(statement.getStartPosition(), false);
-      source = getIndentedSource(lines, indent, singleIndent, eol);
-      // remove indentation for first line
-      source = source.trim();
-    }
-    // replace source
-    int sourceBegin = indexOf("(", AstNodeUtils.getSourceBegin(nameNode)) + 1;
-    int sourceEnd = AstNodeUtils.getSourceEnd(parent) - 1;
-    replaceSubstring(sourceBegin, sourceEnd - sourceBegin, source);
-    // replace binding
-    ASTNode newInvocation = replaceInvocationBinding(parent);
-    // replace arguments
-    {
-      List<Expression> newArguments = DomGenerics.arguments(newInvocation);
-      List<Expression> newArgumentsCopy = new ArrayList<Expression>(newArguments);
-      newArguments.clear();
-      arguments.clear();
-      arguments.addAll(newArgumentsCopy);
-    }
-    // finalize
-    resolveImports(parent);
-  }
-
-  /**
-   * Replaces the name of method in given {@link MethodInvocation}.
-   */
-  public void replaceInvocationName(MethodInvocation invocation, String newIdentifier)
-      throws Exception {
-    setIdentifier(invocation.getName(), newIdentifier);
-    replaceInvocationBinding(invocation);
-  }
-
-  /**
-   * Replaces the expression part in given {@link MethodInvocation}.
-   */
-  public void replaceInvocationExpression(MethodInvocation invocation, String newExpressionSource)
-      throws Exception {
-    if (invocation.getExpression() != null) {
-      replaceExpression(invocation.getExpression(), newExpressionSource);
-    } else {
-      int position = invocation.getStartPosition();
-      // insert Expression
-      {
-        Expression newExpression = getParser().parseExpression(position, newExpressionSource);
-        replaceSubstring(position, 0, newExpressionSource + ".");
-        invocation.setExpression(newExpression);
-      }
-      // we inserted Expression, update "begin" for parent nodes
-      {
-        int newInvocationPosition = invocation.getStartPosition();
-        ASTNode node = invocation;
-        while (node.getStartPosition() == newInvocationPosition) {
-          AstNodeUtils.setSourceBegin_keepEnd(node, position);
-          node = node.getParent();
-        }
-      }
-    }
-    replaceInvocationBinding(invocation);
-  }
-
-  /**
-   * Parses the source of given {@link MethodInvocation} or {@link ClassInstanceCreation} and
-   * installs its {@link IMethodBinding} as binding for given invocation.
-   *
-   * @param invocation
-   *          the {@link MethodInvocation} or {@link ClassInstanceCreation} to replace
-   *          {@link IMethodBinding}.
-   *
-   * @return the parsed {@link ASTNode}.
-   */
-  public ASTNode replaceInvocationBinding(Expression invocation) throws Exception {
-    Assert.isLegal(invocation instanceof MethodInvocation
-        || invocation instanceof ClassInstanceCreation);
-    ASTNode parsedInvocation =
-        m_parser.parseExpression(invocation.getStartPosition(), getSource(invocation));
-    replaceMethodBinding(invocation, parsedInvocation);
-    //
-    return parsedInvocation;
-  }
-
-  /**
-   * Replaces {@link IMethodBinding} in of existing {@link ASTNode} by using {@link IMethodBinding}
-   * from equivalent parsed {@link ASTNode}.
-   */
-  private void replaceMethodBinding(ASTNode oldNode, ASTNode parsedNode) {
-    IMethodBinding parsedBinding =
-        (IMethodBinding) parsedNode.getProperty(AstParser.KEY_METHOD_BINDING);
-    Assert.isTrue(parsedBinding instanceof DesignerMethodBinding);
-    oldNode.setProperty(AstParser.KEY_METHOD_BINDING, parsedBinding);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ClassInstanceCreation += AnonymousClassDeclaration
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds {@link AnonymousClassDeclaration} into given {@link ClassInstanceCreation}.
-   */
-  public void addAnonymousClassDeclaration(ClassInstanceCreation creation) throws Exception {
-    Assert.isNull2(creation.getAnonymousClassDeclaration(), "Already has anonymous: {0}", creation);
-    // prepare indent
-    String indent;
-    {
-      Statement statement = AstNodeUtils.getEnclosingStatement(creation);
-      indent = getWhitespaceToLeft(statement.getStartPosition(), false);
-    }
-    // prepare positions
-    int begin = AstNodeUtils.getSourceBegin(creation);
-    int end = AstNodeUtils.getSourceEnd(creation);
-    // prepare source
-    String sourceNewCreation;
-    {
-      String eol = m_generation.getEndOfLine();
-      String sourceInsert = " {" + eol + indent + "}";
-      sourceNewCreation = getSource(creation) + sourceInsert;
-      // insert source
-      replaceSubstring(end, 0, sourceInsert);
-    }
-    // copy AnonymousClassDeclaration
-    ClassInstanceCreation newCreation =
-        (ClassInstanceCreation) getParser().parseExpression(begin, sourceNewCreation);
-    AnonymousClassDeclaration newAnonymous = newCreation.getAnonymousClassDeclaration();
-    newCreation.setAnonymousClassDeclaration(null);
-    creation.setAnonymousClassDeclaration(newAnonymous);
-    // we append {}, so replaceSubstring() will not update length, so we should update it manually
-    {
-      ASTNode enclosingNode = creation;
-      while (AstNodeUtils.getSourceEnd(enclosingNode) == end) {
-        AstNodeUtils.setSourceEnd(enclosingNode, newAnonymous);
-        enclosingNode = enclosingNode.getParent();
-      }
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Bindings
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the new {@link DesignerTypeBinding} for given {@link ASTNode}, which has
-   *         {@link ITypeBinding}.
-   */
-  private DesignerTypeBinding getDesignerTypeBinding(ASTNode node) {
-    // prepare current binding
-    ITypeBinding currentBinding;
-    {
-      currentBinding = AstNodeUtils.getTypeBinding((TypeDeclaration) node);
-    }
-    // set new DesignerTypeBinding
-    DesignerTypeBinding designerBinding = m_bindingContext.getCopy(currentBinding);
-    node.setProperty(AstParser.KEY_TYPE_BINDING, designerBinding);
-    return designerBinding;
-  }
-
-  /**
-   * @return existing or new {@link DesignerMethodBinding} for given {@link MethodInvocation} or
-   *         {@link ClassInstanceCreation}. We use this {@link DesignerMethodBinding} for low-level
-   *         modifications.
-   */
-  private DesignerMethodBinding getDesignerMethodBinding(ASTNode node) {
-    // prepare current binding for method/constructor
-    IMethodBinding currentMethodBinding;
-    if (node instanceof MethodDeclaration) {
-      currentMethodBinding = AstNodeUtils.getMethodBinding((MethodDeclaration) node);
-    } else if (node instanceof MethodInvocation) {
-      currentMethodBinding = AstNodeUtils.getMethodBinding((MethodInvocation) node);
-    } else {
-      currentMethodBinding = AstNodeUtils.getCreationBinding((ClassInstanceCreation) node);
-    }
-    // get existing DesignerMethodBinding, or create new wrapper
-    if (currentMethodBinding instanceof DesignerMethodBinding) {
-      return (DesignerMethodBinding) currentMethodBinding;
-    } else {
-      DesignerMethodBinding designerMethodBinding = m_bindingContext.get(currentMethodBinding);
-      node.setProperty(AstParser.KEY_METHOD_BINDING, designerMethodBinding);
-      return designerMethodBinding;
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Array
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Add element with given <code>index</code> to {@link ArrayInitializer}.
-   */
-  public Expression addArrayElement(ArrayInitializer arrayInitializer, int index, String source)
-      throws Exception {
-    // prepare source
-    int position = insertToArrayBody(arrayInitializer, index, source);
-    // add node
-    Expression element = getParser().parseExpression(position, source);
-    List<Expression> elements = DomGenerics.expressions(arrayInitializer);
-    elements.add(index, element);
-    // return added element
-    resolveImports(element);
-    return element;
-  }
-
-  /**
-   * Move element form old array <code>oldArray</code> with index <code>oldIndex</code> to new array
-   * <code>newArray</code> with index <code>newIndex</code>.
-   */
-  public Expression moveArrayElement(ArrayInitializer oldArray,
-      ArrayInitializer newArray,
-      int oldIndex,
-      int newIndex) throws Exception {
-    // prepare move expression
-    Expression expression = DomGenerics.expressions(oldArray).get(oldIndex);
-    // prepare move source
-    String source = getSource(expression);
-    // remove from old array
-    removeArrayElement(oldArray, oldIndex);
-    // add to new array
-    int position = insertToArrayBody(newArray, newIndex, source);
-    // add node
-    DomGenerics.expressions(newArray).add(newIndex, expression);
-    AstNodeUtils.moveNode(expression, position);
-    return expression;
-  }
-
-  /**
-   * Add to array elements body of source new element with given index.
-   *
-   * @return the start position of inserted code.
-   */
-  private int insertToArrayBody(ArrayInitializer arrayInitializer, int index, String source)
-      throws Exception {
-    // prepare elements
-    List<Expression> elements = DomGenerics.expressions(arrayInitializer);
-    int position;
-    String sourcePrefix = "";
-    String sourceSuffix = "";
-    if (index == 0) {
-      if (elements.size() == 0) {
-        position = AstNodeUtils.getSourceEnd(arrayInitializer) - 1;
-      } else {
-        Expression firstElement = elements.get(index);
-        position = AstNodeUtils.getSourceBegin(firstElement);
-        sourceSuffix = ", ";
-      }
-    } else {
-      Expression prevElement = elements.get(index - 1);
-      position = AstNodeUtils.getSourceEnd(prevElement);
-      sourcePrefix = ", ";
-    }
-    // add source
-    replaceSubstring(position, 0, sourcePrefix + source + sourceSuffix);
-    position += sourcePrefix.length();
-    //
-    return position;
-  }
-
-  /**
-   * Remove element with given <code>index</code> from {@link ArrayInitializer}.
-   */
-  public void removeArrayElement(ArrayInitializer arrayInitializer, int index) throws Exception {
-    // prepare elements
-    List<Expression> elements = DomGenerics.expressions(arrayInitializer);
-    if (index >= elements.size()) {
-      return;
-    }
-    // prepare source interval to remove
-    int sourceBegin;
-    int sourceEnd;
-    {
-      Expression element = elements.get(index);
-      sourceBegin = AstNodeUtils.getSourceBegin(element);
-      sourceEnd = AstNodeUtils.getSourceEnd(element);
-      if (index == 0) {
-        if (elements.size() == 1) {
-          sourceEnd = indexOf("}", sourceEnd);
-        } else {
-          sourceEnd = indexOfAnyBut(", \t\r\n", sourceEnd);
-        }
-      } else {
-        sourceBegin = indexOfAnyButBackward(", \t\r\n", sourceBegin) + 1;
-      }
-    }
-    // remove node
-    elements.remove(index);
-    // remove source
-    replaceSubstring(sourceBegin, sourceEnd - sourceBegin, "");
-  }
-
-  /**
-   * Exchanges elements with given indexes inside of {@link ArrayInitializer}.
-   */
-  public void exchangeArrayElements(ArrayInitializer arrayInitializer, int index_1, int index_2)
-      throws Exception {
-    // prepare elements
-    List<Expression> elements = DomGenerics.expressions(arrayInitializer);
-    Expression element_1 = elements.get(index_1);
-    Expression element_2 = elements.get(index_2);
-    String source_1 = getSource(element_1);
-    String source_2 = getSource(element_2);
-    int position_1 = element_1.getStartPosition();
-    int position_2 = element_2.getStartPosition();
-    int length_1 = element_1.getLength();
-    int length_2 = element_2.getLength();
-    // exchange elements
-    {
-      elements.set(index_1, arrayInitializer.getAST().newSimpleName("foo_1"));
-      elements.set(index_2, arrayInitializer.getAST().newSimpleName("foo_2"));
-      // set source
-      if (position_1 < position_2) {
-        replaceSubstring(position_2, length_2, source_1);
-        replaceSubstring(position_1, length_1, source_2);
-        position_2 += length_2 - length_1;
-      } else {
-        replaceSubstring(position_1, length_1, source_2);
-        replaceSubstring(position_2, length_2, source_1);
-        position_1 += length_1 - length_2;
-      }
-      // set positions
-      AstNodeUtils.moveNode(element_1, position_2);
-      AstNodeUtils.moveNode(element_2, position_1);
-      // set nodes
-      elements.set(index_1, element_2);
-      elements.set(index_2, element_1);
-    }
-  }
+	 *
+	 * @param theNode
+	 *          the {@link ASTNode} to get the source.
+	 * @param transformer
+	 *          the {@link Function} that can participate in node to source transformation by
+	 *          providing alternative source for some nodes. Can be <code>null</code>, in not
+	 *          additional transformation required. If transformer returns not <code>null</code>, we
+	 *          use it instead of its original source; if <code>null</code> - we continue with
+	 *          original source.
+	 *
+	 * @return the source of {@link ASTNode} in "external form", i.e. with fully qualified types.
+	 */
+	@SuppressWarnings("restriction")
+	public String getExternalSource(final ASTNode theNode, final Function<ASTNode, String> transformer) {
+		final StringBuffer buffer = new StringBuffer(getSource(theNode));
+		// remember positions for all nodes
+		final Map<ASTNode, Integer> nodePositions = Maps.newHashMap();
+		theNode.accept(new ASTVisitor() {
+			@Override
+			public void postVisit(ASTNode _node) {
+				nodePositions.put(_node, _node.getStartPosition());
+			}
+		});
+		// replace "name" with "qualified name"
+		theNode.accept(new org.eclipse.jdt.internal.corext.dom.GenericVisitor() {
+			@Override
+			protected boolean visitNode(ASTNode node) {
+				if (transformer != null) {
+					String source = transformer.apply(node);
+					if (source != null) {
+						replace(node, source);
+						return false;
+					}
+				}
+				return true;
+			}
+
+			@Override
+			public void endVisit(SimpleName name) {
+				if (!AstNodeUtils.isVariable(name)) {
+					StructuralPropertyDescriptor location = name.getLocationInParent();
+					if (location == SimpleType.NAME_PROPERTY
+							|| location == QualifiedName.QUALIFIER_PROPERTY
+							|| location == ClassInstanceCreation.NAME_PROPERTY
+							|| location == MethodInvocation.EXPRESSION_PROPERTY) {
+						String fullyQualifiedName = AstNodeUtils.getFullyQualifiedName(name, false);
+						replace(name, fullyQualifiedName);
+					}
+				}
+			}
+
+			/**
+			 * Replace given ASTNode with different source, with updating positions for other nodes.
+			 */
+			private void replace(ASTNode node, String newSource) {
+				int nodePosition = nodePositions.get(node);
+				// update source
+				{
+					int sourceStart = nodePosition - theNode.getStartPosition();
+					int sourceEnd = sourceStart + node.getLength();
+					buffer.replace(sourceStart, sourceEnd, newSource);
+				}
+				// update positions for nodes
+				int lengthDelta = newSource.length() - node.getLength();
+				for (Map.Entry<ASTNode, Integer> entry : nodePositions.entrySet()) {
+					Integer position = entry.getValue();
+					if (position > nodePosition) {
+						entry.setValue(position + lengthDelta);
+					}
+				}
+			}
+		});
+		// OK, we have updated source
+		return buffer.toString();
+	}
+
+	/**
+	 * @return the source of given {@link ITypeBinding}, including generics.
+	 */
+	public String getTypeBindingSource(ITypeBinding typeBinding) {
+		String genericTypeName = AstNodeUtils.getFullyQualifiedName(typeBinding, false, true);
+		genericTypeName = StringUtils.replace(genericTypeName, ",", ", ");
+		return genericTypeName;
+	}
+
+	/**
+	 * @see #replaceSubstring(int, int, String)
+	 */
+	public void replaceSubstring(ASTNode node, String replacement) throws Exception {
+		replaceSubstring(node.getStartPosition(), node.getLength(), replacement);
+	}
+
+	/**
+	 * Replaces the substring starting at the given start position with the given length by the given
+	 * replacement text, modifying the source ranges for the nodes in the AST in the process.
+	 *
+	 * @param oldStart
+	 *          the index of the first character being replaced
+	 * @param oldLength
+	 *          the number of characters being replaced
+	 * @param replacement
+	 *          the text with which they are being replaced
+	 */
+	public void replaceSubstring(final int oldStart, int oldLength, String replacement)
+			throws Exception {
+		replaceSubstring_markRemovedComments(oldStart, oldLength);
+		List<Comment> commentList = getCommentList();
+		// replace text
+		//System.out.println("|" + m_document.get(oldStart, oldLength) + "| -> |" + replacement + "|");
+		m_document.replace(oldStart, oldLength, replacement);
+		// prepare positions
+		final int newLength = replacement.length();
+		final int difference = newLength - oldLength;
+		final int oldEnd = oldStart + oldLength;
+		// prepare visitor
+		ASTVisitor visitor = new ASTVisitor(true) {
+			@Override
+			public void postVisit(ASTNode node) {
+				int position = node.getStartPosition();
+				int length = node.getLength();
+				int end = position + length;
+				// sanity checks
+				{
+					// we can not start replacement inside of node, but end outside
+					if (position < oldStart && oldStart < end && oldEnd > end) {
+						throw new DesignerException(ICoreExceptionConstants.AST_EDITOR_REPLACE);
+					}
+					// we can not start replacement outside of node, but end inside
+					if (position < oldEnd && oldEnd < end && oldStart < position) {
+						throw new DesignerException(ICoreExceptionConstants.AST_EDITOR_REPLACE);
+					}
+				}
+				//
+				if (end <= oldStart) {
+					// before changed region: no change
+				} else if (position >= oldEnd && !(node instanceof CompilationUnit)) {
+					// after changed region: move
+					node.setSourceRange(position + difference, length);
+				} else if (position <= oldStart && position + length >= oldEnd) {
+					// embraces changed region: change length
+					node.setSourceRange(position, length + difference);
+				}
+				// special handling for AnonymousTypeDeclaration
+				{
+					TypeDeclaration anonymous = AnonymousTypeDeclaration.get(node);
+					if (anonymous != null) {
+						anonymous.setSourceRange(node.getStartPosition(), node.getLength());
+					}
+				}
+			}
+		};
+		// modify position/length for nodes in AST
+		m_astUnit.accept(visitor);
+		// update comments
+		for (Comment comment : commentList) {
+			if (!(comment instanceof Javadoc)) {
+				comment.accept(visitor);
+			}
+		}
+	}
+
+	/**
+	 * When we replace region, we should remove {@link Comment} in it. We can not really remove them
+	 * (JDT returns unmodifiable list), so we mark them as removed.
+	 */
+	private void replaceSubstring_markRemovedComments(int begin, int length) {
+		List<Comment> comments = DomGenerics.getCommentList(m_astUnit);
+		for (Iterator<Comment> I = comments.iterator(); I.hasNext();) {
+			Comment comment = I.next();
+			if (AstNodeUtils.getSourceBegin(comment) >= begin
+					&& AstNodeUtils.getSourceEnd(comment) < begin + length) {
+				comment.setProperty(REMOVED_COMMENT, Boolean.TRUE);
+			}
+		}
+	}
+
+	/**
+	 * @return the {@link List} of {@link Comment}'s in this {@link CompilationUnit}.
+	 */
+	public List<Comment> getCommentList() throws Exception {
+		List<Comment> comments = Lists.newArrayList();
+		comments.addAll(DomGenerics.getCommentList(m_astUnit));
+		// clean up
+		int documentLength = m_document.getLength();
+		for (Iterator<Comment> I = comments.iterator(); I.hasNext();) {
+			Comment comment = I.next();
+			if (comment.getProperty(REMOVED_COMMENT) != null) {
+				I.remove();
+				continue;
+			}
+			if (AstNodeUtils.getSourceBegin(comment) < 0
+					|| AstNodeUtils.getSourceEnd(comment) > documentLength) {
+				I.remove();
+			} else if (comment instanceof LineComment) {
+				if (!getSource(comment).startsWith("//")) {
+					I.remove();
+				}
+			} else if (comment instanceof BlockComment) {
+				if (!getSource(comment).startsWith("/*")) {
+					I.remove();
+				}
+			}
+		}
+		// protect from modifications
+		return Collections.unmodifiableList(comments);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ASTNode's replacement
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final Set<Method> m_invalidNodeMethods = Sets.newHashSet();
+
+	/**
+	 * Replaces given <code>originalNode</code> with <code>replacementNode</code>. This method uses
+	 * "duck type" implementation, i.e. uses names and types to identify location of nodes instead of
+	 * direct checks for {@link ASTNode} structures.
+	 */
+	@SuppressWarnings("unchecked")
+	public static void replaceNode(ASTNode originalNode, ASTNode replacementNode) throws Exception {
+		ASTNode parent = originalNode.getParent();
+		// special case: QualifiedName -> FieldAccess
+		if (replaceNode_QualifiedName_to_FieldAccess(originalNode, replacementNode)) {
+			return;
+		}
+		// use "duck type"
+		Class<?> parentClass = parent.getClass();
+		for (Method method : parentClass.getMethods()) {
+			if (method.getParameterTypes().length == 0 && !m_invalidNodeMethods.contains(method)) {
+				String methodName = method.getName();
+				Class<?> returnType = method.getReturnType();
+				try {
+					// check for getXXX() and use setXXX()
+					if (methodName.startsWith("get")
+							&& returnType.isAssignableFrom(originalNode.getClass())
+							&& method.invoke(parent) == originalNode) {
+						String setMethodName = "set" + methodName.substring("get".length());
+						Method setMethod = parentClass.getMethod(setMethodName, new Class[]{returnType});
+						setMethod.invoke(parent, new Object[]{replacementNode});
+						break;
+					}
+					// check for "List xxx()" and use "List.set()"
+					if (returnType == List.class) {
+						List<ASTNode> elements = (List<ASTNode>) method.invoke(parent);
+						int index = elements.indexOf(originalNode);
+						if (index != -1) {
+							elements.set(index, replacementNode);
+							break;
+						}
+					}
+				} catch (InvocationTargetException e) {
+					Assert.isTrue(e.getCause() instanceof UnsupportedOperationException);
+					// it is possible that we will try to call method that is not supported in JLS3 AST,
+					// so we should catch exception and ignore such methods
+					m_invalidNodeMethods.add(method);
+				}
+			}
+		}
+	}
+
+	/**
+	 * If we try to replace qualifier of {@link QualifiedName} with generic {@link Expression}, not
+	 * just {@link Name}, then {@link QualifiedName} itself should be replaced with
+	 * {@link FieldAccess}.
+	 */
+	private static boolean replaceNode_QualifiedName_to_FieldAccess(ASTNode originalNode,
+			ASTNode replacementNode) throws Exception {
+		ASTNode parent = originalNode.getParent();
+		if (parent instanceof QualifiedName && !(replacementNode instanceof Name)) {
+			QualifiedName qualifiedName = (QualifiedName) parent;
+			// prepare FieldAccess
+			FieldAccess fieldAccess = originalNode.getAST().newFieldAccess();
+			AstNodeUtils.copySourceRange(fieldAccess, qualifiedName);
+			fieldAccess.setExpression((Expression) replacementNode);
+			// use same "name" node
+			{
+				SimpleName fieldName = qualifiedName.getName();
+				qualifiedName.setName(originalNode.getAST().newSimpleName("__wbp_tmp"));
+				fieldAccess.setName(fieldName);
+			}
+			// replace QualifiedName with FieldAccess
+			replaceNode(qualifiedName, fieldAccess);
+			return true;
+		}
+		return false;
+	}
+
+	/**
+	 * Replaces given old {@link Expression} with new {@link Expression} corresponding to the given
+	 * Java source. If source contains EOL, it will be indented.
+	 *
+	 * @return the new {@link Expression}.
+	 */
+	public Expression replaceExpression(Expression oldExpression, String source) throws Exception {
+		// check for source with EOL, should be handled as indented
+		if (source.indexOf("\n") != -1) {
+			String[] lines = StringUtils.split(source, "\n");
+			return replaceExpression(oldExpression, Arrays.asList(lines));
+		}
+		// "normal" source, without EOL
+		return replaceExpressionString(oldExpression, source);
+	}
+
+	/**
+	 * Replaces given old {@link Expression} with new {@link Expression} corresponding the Java source
+	 * given as array of lines.
+	 *
+	 * @return the new {@link Expression}.
+	 */
+	public Expression replaceExpression(Expression oldExpression, List<String> lines)
+			throws Exception {
+		// prepare source
+		String source;
+		{
+			// prepare code generation constants
+			AstCodeGeneration generation = getGeneration();
+			String singleIndent = generation.getIndentation(1);
+			String eol = generation.getEndOfLine();
+			// prepare enclosing node
+			ASTNode enclosingNode = null;
+			{
+				enclosingNode = AstNodeUtils.getEnclosingStatement(oldExpression);
+				if (enclosingNode == null) {
+					enclosingNode = AstNodeUtils.getEnclosingNode(oldExpression, BodyDeclaration.class);
+				}
+				Assert.isNotNull(enclosingNode, "No enclosing node found for " + oldExpression);
+			}
+			// indent source
+			String indent = getWhitespaceToLeft(enclosingNode.getStartPosition(), false);
+			source = getIndentedSource(lines, indent, singleIndent, eol);
+			// remove indentation for first line
+			source = source.trim();
+		}
+		//
+		return replaceExpressionString(oldExpression, source);
+	}
+
+	/**
+	 * Replaces given old {@link Expression} with new {@link Expression} corresponding to the given
+	 * Java source. Source used as is, without checks for EOL, indentation, etc.
+	 *
+	 * @return the new {@link Expression}.
+	 */
+	private Expression replaceExpressionString(Expression oldExpression, String source)
+			throws Exception {
+		int oldStart = oldExpression.getStartPosition();
+		int oldLength = oldExpression.getLength();
+		// update source
+		source = replaceSourceTemplates(oldStart, source);
+		// replace expression
+		Expression newExpression = getParser().parseExpression(oldStart, source);
+		replaceSubstring(oldStart, oldLength, source);
+		replaceNode(oldExpression, newExpression);
+		// final step
+		resolveImports(newExpression);
+		return newExpression;
+	}
+
+	/**
+	 * Replaces single argument of given {@link MethodInvocation}.
+	 */
+	public Expression replaceInvocationArgument(MethodInvocation invocation, int index, String source)
+			throws Exception {
+		Expression argument = DomGenerics.arguments(invocation).get(index);
+		return replaceExpression(argument, source);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Type operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Replaces {@link Type} in {@link VariableDeclarationStatement} with new type.<br>
+	 * We use this method in morphing.
+	 *
+	 * @param declaration
+	 *          the fragment from {@link VariableDeclarationStatement}. {@link FieldDeclaration}
+	 *          should have only one fragment.
+	 * @param newTypeName
+	 *          the fully qualified name of type to use.
+	 */
+	public void replaceVariableType(VariableDeclaration declaration, String newTypeName)
+			throws Exception {
+		Type type;
+		VariableDeclarationStatement declarationStatement = null;
+		FieldDeclaration fieldDeclaration = null;
+		if (declaration.getLocationInParent() == VariableDeclarationStatement.FRAGMENTS_PROPERTY) {
+			declarationStatement = (VariableDeclarationStatement) declaration.getParent();
+			type = declarationStatement.getType();
+		} else if (declaration.getLocationInParent() == FieldDeclaration.FRAGMENTS_PROPERTY) {
+			fieldDeclaration = (FieldDeclaration) declaration.getParent();
+			type = fieldDeclaration.getType();
+		} else {
+			throw new IllegalArgumentException("Unknown argument: " + declaration.getClass());
+		}
+		// do replace
+		{
+			Type newType = getParser().parseQualifiedType(type.getStartPosition(), newTypeName);
+			// replace Type source
+			replaceSubstring(type, newTypeName);
+			// replace Type node
+			if (declarationStatement != null) {
+				declarationStatement.setType(newType);
+			}
+			if (fieldDeclaration != null) {
+				fieldDeclaration.setType(newType);
+			}
+			resolveImports(newType);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Global values
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final Map<String, Object> m_globalMap = Maps.newTreeMap();
+
+	/**
+	 * @return the current global value for given key.
+	 */
+	public Object getGlobalValue(String key) {
+		return m_globalMap.get(key);
+	}
+
+	/**
+	 * Sets new global value for given key.
+	 */
+	public void putGlobalValue(String key, Object value) {
+		m_globalMap.put(key, value);
+	}
+
+	/**
+	 * Removes global value for given key.
+	 */
+	public void removeGlobalValue(String key) {
+		m_globalMap.remove(key);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Unique names generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the unique variable name (for local variable or field).
+	 *
+	 * @param position
+	 *          the position where new variable will be used, <code>-1</code> if all variables of
+	 *          {@link CompilationUnit} should be considered
+	 * @param baseName
+	 *          the base name for generating
+	 * @param excludedVariable
+	 *          the {@link VariableDeclaration} that should be excluded from checking of uniqueness.
+	 *          We need this for example when we convert local variable to field, in this case using
+	 *          same unique name of variable as field name is OK. May be <code>null</code>.
+	 */
+	public String getUniqueVariableName(int position,
+			String baseName,
+			VariableDeclaration excludedVariable) {
+		// prepare declarations...
+		List<VariableDeclaration> declarations = Lists.newArrayList();
+		if (position != -1) {
+			// ...visible + shadows
+			declarations.addAll(AstNodeUtils.getVariableDeclarationsVisibleAt(m_astUnit, position));
+			declarations.addAll(AstNodeUtils.getVariableDeclarationsAfter(m_astUnit, position));
+		} else {
+			// ...all
+			declarations.addAll(AstNodeUtils.getVariableDeclarationsAll(m_astUnit));
+		}
+		// exclude "excluded"
+		declarations.remove(excludedVariable);
+		// do generation
+		return getUniqueVariableName(declarations, baseName);
+	}
+
+	/**
+	 * Generates unique variable name that does not conflict with other variables.
+	 *
+	 * @param declarations
+	 *          the {@link VariableDeclaration}'s that can conflict with new variable.
+	 * @param baseName
+	 *          the base name for generating
+	 *
+	 * @return the unique variable name (for local variable or field).
+	 */
+	public static String getUniqueVariableName(List<VariableDeclaration> declarations, String baseName) {
+		// prepare set of conflicting variables identifiers
+		final Set<String> existingIdentifiers = Sets.newTreeSet();
+		for (VariableDeclaration declaration : declarations) {
+			existingIdentifiers.add(declaration.getName().getIdentifier());
+		}
+		// generate unique name
+		return CodeUtils.generateUniqueName(baseName, new Predicate<String>() {
+			@Override
+			public boolean apply(String name) {
+				return !existingIdentifiers.contains(name);
+			}
+		});
+	}
+
+	/**
+	 * @return the unique method name.
+	 */
+	public String getUniqueMethodName(String baseName) {
+		// prepare set of methods names
+		final Set<String> existingMethods = Sets.newTreeSet();
+		m_astUnit.accept(new ASTVisitor() {
+			@Override
+			public void endVisit(MethodDeclaration node) {
+				existingMethods.add(node.getName().getIdentifier());
+			}
+
+			@Override
+			public void endVisit(TypeDeclaration node) {
+				addMethodNames(existingMethods, AstNodeUtils.getTypeBinding(node));
+			}
+		});
+		// generate unique name
+		return CodeUtils.generateUniqueName(baseName, new Predicate<String>() {
+			@Override
+			public boolean apply(String name) {
+				return !existingMethods.contains(name);
+			}
+		});
+	}
+
+	/**
+	 * @return the unique inner type name.
+	 */
+	public String getUniqueTypeName(String baseName) {
+		// prepare set of methods names
+		final Set<String> existingTypes = Sets.newTreeSet();
+		m_astUnit.accept(new ASTVisitor() {
+			@Override
+			public void endVisit(TypeDeclaration node) {
+				existingTypes.add(node.getName().getIdentifier());
+			}
+		});
+		// generate unique name
+		return CodeUtils.generateUniqueName(baseName, new Predicate<String>() {
+			@Override
+			public boolean apply(String name) {
+				return !existingTypes.contains(name);
+			}
+		});
+	}
+
+	/**
+	 * Adds names for methods declared in given {@link ITypeBinding} and its super-classes.
+	 */
+	private static void addMethodNames(Set<String> existingMethods, ITypeBinding typeBinding) {
+		if (typeBinding != null) {
+			for (IMethodBinding method : typeBinding.getDeclaredMethods()) {
+				existingMethods.add(method.getName());
+			}
+			addMethodNames(existingMethods, typeBinding.getSuperclass());
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// SimpleName
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets new identifier of given {@link SimpleName}.
+	 */
+	public void setIdentifier(SimpleName simpleName, String newIdentifier) throws Exception {
+		replaceSubstring(simpleName, newIdentifier);
+		simpleName.setIdentifier(newIdentifier);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parser
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final BindingContext m_bindingContext = new BindingContext();
+	private final AstParser m_parser = new AstParser(this);
+
+	/**
+	 * @return the {@link BindingContext} for this {@link AstEditor}.
+	 */
+	public BindingContext getBindingContext() {
+		return m_bindingContext;
+	}
+
+	/**
+	 * @return the {@link AstParser} for this {@link AstEditor}.
+	 */
+	public AstParser getParser() {
+		return m_parser;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final AstCodeGeneration m_generation = new AstCodeGeneration(this);
+
+	/**
+	 * @return the {@link AstCodeGeneration} for this {@link AstEditor}.
+	 */
+	public AstCodeGeneration getGeneration() {
+		return m_generation;
+	}
+
+	/**
+	 * @return the source with replaced "{wbp_XXX}" templates.
+	 */
+	private String replaceSourceTemplates(int position, String src) {
+		// replace {wbp_class} with class reference
+		if (src.indexOf("{wbp_class}") != -1) {
+			String replacement;
+			{
+				ASTNode coveringNode = getEnclosingNode(position);
+				// prepare enclosing method binding
+				IMethodBinding methodBinding;
+				{
+					MethodDeclaration methodDeclaration = AstNodeUtils.getEnclosingMethod(coveringNode);
+					Assert.isNotNull(methodDeclaration);
+					methodBinding = AstNodeUtils.getMethodBinding(methodDeclaration);
+				}
+				// prepare replacement
+				if (AstNodeUtils.isStatic(methodBinding)) {
+					TypeDeclaration typeDeclaration = AstNodeUtils.getEnclosingType(coveringNode);
+					ITypeBinding typeBinding = typeDeclaration.resolveBinding();
+					replacement = AstNodeUtils.getFullyQualifiedName(typeBinding, false) + ".class";
+				} else {
+					replacement = "getClass()";
+				}
+			}
+			// do replace
+			src = StringUtils.replace(src, "{wbp_class}", replacement);
+		}
+		// replace {wbp_classTop} with top-level class reference
+		if (src.indexOf("{wbp_classTop}") != -1) {
+			String replacement;
+			{
+				ASTNode coveringNode = getEnclosingNode(position);
+				TypeDeclaration typeDeclaration = AstNodeUtils.getEnclosingTypeTop(coveringNode);
+				ITypeBinding typeBinding = typeDeclaration.resolveBinding();
+				replacement = AstNodeUtils.getFullyQualifiedName(typeBinding, false) + ".class";
+			}
+			// do replace
+			src = StringUtils.replace(src, "{wbp_classTop}", replacement);
+		}
+		//
+		return src;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ParenthesizedExpression
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Inlines all {@link ParenthesizedExpression} that enclose given {@link Expression}.
+	 */
+	public void inlineParenthesizedExpression(Expression expression) throws Exception {
+		while (expression.getParent() instanceof ParenthesizedExpression) {
+			ParenthesizedExpression parent = (ParenthesizedExpression) expression.getParent();
+			parent.setExpression(expression.getAST().newSimpleName("__wbp_tmp"));
+			replaceNode(parent, expression);
+			replaceSubstring(parent.getStartPosition(), parent.getLength(), getSource(expression));
+			AstNodeUtils.setSourceBegin(expression, parent.getStartPosition());
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// TryStatement
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if given {@link Statement} is enclosed into {@link TryStatement} with
+	 *         {@link CatchClause} which is same or superclass for given.
+	 */
+	public boolean hasEnclosingTryStatement(Statement statement, String requiredException)
+			throws Exception {
+		ITypeHierarchy requiredHierarchy;
+		{
+			IType requiredExceptionType = getJavaProject().findType(requiredException);
+			Assert.isNotNull2(requiredExceptionType, "No such exception type: {0}", requiredException);
+			requiredHierarchy = requiredExceptionType.newSupertypeHierarchy(null);
+		}
+		// visit parents
+		while (true) {
+			ASTNode parent = statement.getParent();
+			// TryStatement
+			if (parent instanceof TryStatement) {
+				TryStatement tryStatement = (TryStatement) parent;
+				List<CatchClause> catchClauses = DomGenerics.catchClauses(tryStatement);
+				for (CatchClause catchClause : catchClauses) {
+					SingleVariableDeclaration exception = catchClause.getException();
+					String exceptionName = AstNodeUtils.getFullyQualifiedName(exception, false);
+					IType exceptionType = getJavaProject().findType(exceptionName);
+					if (requiredHierarchy.contains(exceptionType)) {
+						return true;
+					}
+				}
+			}
+			// enclosing Statement or stop
+			if (parent instanceof Statement) {
+				statement = (Statement) parent;
+			} else {
+				return false;
+			}
+		}
+	}
+
+	/**
+	 * Encloses given {@link Statement} in {@link TryStatement}.
+	 *
+	 * @return the enclosing {@link TryStatement}.
+	 */
+	public TryStatement encloseInTryStatement(Statement statement, String catchExceptionType)
+			throws Exception {
+		TryStatement tryStatement;
+		{
+			String line_1 = "try {";
+			String line_2 = "} catch (" + catchExceptionType + " e) {";
+			String line_3 = "}";
+			tryStatement =
+					(TryStatement) addStatement(
+							ImmutableList.of(line_1, line_2, line_3),
+							new StatementTarget(statement, true));
+		}
+		moveStatement(statement, new StatementTarget(tryStatement.getBody(), true));
+		return tryStatement;
+	}
+
+	/**
+	 * Removes empty {@link TryStatement}s.
+	 */
+	public void removeEmptyTryStatements() {
+		m_astUnit.accept(new AstVisitorEx() {
+			@Override
+			public void endVisitEx(TryStatement node) throws Exception {
+				if (node.getBody().statements().isEmpty()) {
+					removeStatement(node);
+				}
+			}
+		});
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Statement operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Encloses given {@link Statement} in {@link Block}.
+	 *
+	 * @return the enclosing {@link Block}.
+	 */
+	public Block encloseInBlock(Statement statement) throws Exception {
+		// add new Block
+		Block block =
+				(Block) addStatement(ImmutableList.of("{", "}"), new StatementTarget(statement, true));
+		// move Statement into Block
+		moveStatement(statement, new StatementTarget(block, true));
+		// OK, return Block
+		return block;
+	}
+
+	/**
+	 * Inlines given {@link Block} into its parent {@link Block}.
+	 */
+	public void inlineBlock(Block block) throws Exception {
+		StatementTarget target = new StatementTarget((Statement) block, true);
+		// move Statement's
+		List<Statement> statements = Lists.newArrayList(DomGenerics.statements(block));
+		for (Statement statement : statements) {
+			moveStatement(statement, target);
+		}
+		// remove Block
+		removeStatement(block);
+	}
+
+	/**
+	 * Ensures that given {@link Statement} is child of {@link Block}, so we can add new
+	 * {@link Statement}s relative given one.
+	 */
+	private Block ensureParentBlock(Statement statement) throws Exception {
+		ASTNode parent = statement.getParent();
+		// already in Block
+		if (parent instanceof Block) {
+			return (Block) parent;
+		}
+		// prepare code generation constants
+		AstCodeGeneration generation = getGeneration();
+		String singleIndent = generation.getIndentation(1);
+		String eol = generation.getEndOfLine();
+		String indent = getWhitespaceToLeft(parent.getStartPosition(), false);
+		// initial state
+		boolean statementIsLastInParent =
+				AstNodeUtils.getSourceEnd(parent) == AstNodeUtils.getSourceEnd(statement);
+		// prepare new Block
+		int positionForBlock;
+		int positionForStatement;
+		Block newBlock;
+		{
+			int statementBegin = statement.getStartPosition();
+			positionForBlock = indexOfAnyButBackward(" \t\r\n", statementBegin) + 1;
+			String source = " {" + eol;
+			source += indent + singleIndent;
+			positionForStatement = positionForBlock + source.length();
+			source += eol;
+			source += indent + "}";
+			replaceSubstring(positionForBlock, statementBegin - positionForBlock, source);
+			// parse
+			newBlock = (Block) getParser().parseStatement(positionForBlock, source);
+		}
+		// move Statement into Block: source
+		{
+			int statementBegin = statement.getStartPosition();
+			int statementEnd = getStatementEndIndex(statement);
+			int statementLength = statementEnd - statementBegin;
+			moveSource(positionForStatement, statementBegin, statementLength);
+			AstNodeUtils.setSourceLength(newBlock, newBlock.getLength() + statementLength);
+		}
+		// move Statement into Block: node
+		replaceNode(statement, newBlock);
+		DomGenerics.statements(newBlock).add(statement);
+		// cut parent to Block
+		if (statementIsLastInParent) {
+			AstNodeUtils.setSourceEnd(parent, newBlock);
+		}
+		// done
+		return newBlock;
+	}
+
+	/**
+	 * Adds new {@link Statement} with given source in given {@link StatementTarget}.
+	 *
+	 * @param source
+	 *          the source for new {@link Statement} (with trailing ';'). It can contains
+	 *          <code>\n</code>, so can be multi-line and will be indented.
+	 * @param target
+	 *          describes location for new {@link Statement}.
+	 */
+	public Statement addStatement(String source, StatementTarget target) throws Exception {
+		String[] lines = StringUtils.split(source, '\n');
+		return addStatement(Arrays.asList(lines), target);
+	}
+
+	/**
+	 * Adds new {@link Statement} with given source in given {@link StatementTarget}.
+	 *
+	 * @param lines
+	 *          the lines of source (possible with empty lines) with single statement.
+	 * @param target
+	 *          describes location for new {@link Statement}.
+	 */
+	public Statement addStatement(List<String> lines, StatementTarget target) throws Exception {
+		Assert.isNotNull(lines);
+		// statement or method declaration required
+		Assert.isTrue(target.getBlock() != null || target.getStatement() != null);
+		// prepare code generation constants
+		AstCodeGeneration generation = getGeneration();
+		String singleIndent = generation.getIndentation(1);
+		String eol = generation.getEndOfLine();
+		//
+		if (target.getStatement() != null) {
+			Statement targetStatement = target.getStatement();
+			Block targetBlock = ensureParentBlock(targetStatement);
+			// prepare information about target statement
+			String indent = getWhitespaceToLeft(targetStatement.getStartPosition(), false);
+			int index = targetBlock.statements().indexOf(targetStatement);
+			// prepare source
+			String source = getIndentedSource(lines, indent, singleIndent, eol);
+			source = replaceSourceTemplates(targetStatement.getStartPosition(), source);
+			// add statement
+			Statement newStatement;
+			if (target.isBefore()) {
+				// add before any empty lines and EOLC lines
+				int position = skipWhitespaceAndPureEOLCToLeft(targetStatement.getStartPosition());
+				// add source
+				replaceSubstring(position, 0, source + eol);
+				// parse statement
+				newStatement = getParser().parseStatement(position, source);
+				DomGenerics.statements(targetBlock).add(index, newStatement);
+			} else {
+				// move at the end of target
+				int position = getStatementEndIndex(targetStatement);
+				source = eol + source;
+				// add source
+				replaceSubstring(position, 0, source);
+				// parse statement
+				newStatement = getParser().parseStatement(position, source);
+				DomGenerics.statements(targetBlock).add(index + 1, newStatement);
+			}
+			//
+			resolveImports(newStatement);
+			return newStatement;
+		} else {
+			Block targetBlock = target.getBlock();
+			// prepare indentation
+			String indent;
+			{
+				if (targetBlock.getParent() instanceof MethodDeclaration) {
+					indent = getWhitespaceToLeft(targetBlock.getParent().getStartPosition(), false);
+				} else {
+					indent = getWhitespaceToLeft(targetBlock.getStartPosition(), false);
+				}
+				indent += singleIndent;
+			}
+			// prepare source
+			String source = getIndentedSource(lines, indent, singleIndent, eol);
+			source = replaceSourceTemplates(targetBlock.getStartPosition(), source);
+			// add statement
+			Statement newStatement;
+			if (target.isBefore()) {
+				// prepare position as position after '{' of block
+				int position;
+				{
+					position = targetBlock.getStartPosition();
+					Assert.isTrue(position != -1);
+					position++;
+				}
+				// add source
+				{
+					String prefix = eol;
+					replaceSubstring(position, 0, prefix + source);
+					position += prefix.length();
+				}
+				// parse statement
+				newStatement = getParser().parseStatement(position, source);
+				DomGenerics.statements(targetBlock).add(0, newStatement);
+			} else {
+				// prepare position as position of '}' of block
+				int position = AstNodeUtils.getSourceEnd(targetBlock) - 1;
+				String endMethodIndent = getWhitespaceToLeft(position, false);
+				position -= endMethodIndent.length();
+				// add source
+				replaceSubstring(position, 0, source + eol);
+				// parse statement
+				newStatement = getParser().parseStatement(position, source);
+				DomGenerics.statements(targetBlock).add(newStatement);
+			}
+			//
+			resolveImports(newStatement);
+			return newStatement;
+		}
+	}
+
+	/**
+	 * Removes given {@link Statement}. It removes also any whitespace and comments between removing
+	 * {@link Statement}.
+	 */
+	public void removeStatement(Statement statement) throws Exception {
+		if (AstNodeUtils.isDanglingNode(statement)) {
+			return;
+		}
+		Block block = (Block) statement.getParent();
+		List<Statement> statements = DomGenerics.statements(block);
+		//
+		if (statements.size() == 1 && block.getParent() instanceof Block) {
+			removeStatement(block);
+		} else {
+			// prepare start of source to remove
+			int startIndex;
+			{
+				int index = statements.indexOf(statement);
+				if (index != 0) {
+					Statement prevStatement = statements.get(index - 1);
+					startIndex = AstNodeUtils.getSourceEnd(prevStatement);
+				} else {
+					startIndex = block.getStartPosition() + "{".length();
+				}
+			}
+			// prepare end of source to remove
+			int endIndex = getStatementEndIndex(statement);
+			// remove statement and corresponding source
+			statements.remove(statement);
+			replaceSubstring(startIndex, endIndex - startIndex, "");
+		}
+	}
+
+	/**
+	 * Removes the {@link Statement} that encloses given {@link ASTNode}.
+	 */
+	public void removeEnclosingStatement(ASTNode node) throws Exception {
+		Statement statement = AstNodeUtils.getEnclosingStatement(node);
+		removeStatement(statement);
+	}
+
+	/**
+	 * Re-indents source at place.
+	 */
+	private void reindentSource(int sourceStart, int sourceLength, String indent, String eol)
+			throws Exception {
+		// prepare lines
+		String[] lines;
+		{
+			String source = getSource(sourceStart, sourceLength);
+			lines = StringUtils.splitByWholeSeparatorPreserveAllTokens(source, eol);
+		}
+		// change indentation for lines
+		int position = sourceStart;
+		String oldIndent = null;
+		for (String line : lines) {
+			// prepare line indentation
+			String lineIndent = "";
+			{
+				int endOfIndent = StringUtils.indexOfAnyBut(line, "\t ");
+				if (endOfIndent != -1) {
+					lineIndent = line.substring(0, endOfIndent);
+				} else {
+					lineIndent = line;
+				}
+			}
+			// use indentation of first line as base
+			if (oldIndent == null) {
+				oldIndent = lineIndent;
+			}
+			// replace indentation
+			if (lineIndent.startsWith(oldIndent)) {
+				replaceSubstring(position, oldIndent.length(), indent);
+				position += indent.length() - oldIndent.length();
+			}
+			// move position to next line
+			position += line.length() + eol.length();
+		}
+	}
+
+	/**
+	 * Move statement to given {@link StatementTarget}.
+	 *
+	 * @param target
+	 *          the new position for statement
+	 * @param statement
+	 *          the statement to move
+	 * @param includePrefixComment
+	 *          flag to mark that comment before statement also should be moved
+	 */
+	public void moveStatement(Statement statement, StatementTarget target) throws Exception {
+		// statement or method declaration required
+		Assert.isTrue(target.getBlock() != null || target.getStatement() != null);
+		// check for no-op
+		if (target.getStatement() != null) {
+			Statement targetStatement = target.getStatement();
+			// adding relative same statement
+			if (targetStatement == statement) {
+				return;
+			}
+			// adding before current next statement
+			Block targetBlock = (Block) targetStatement.getParent();
+			List<Statement> targetStatements = DomGenerics.statements(targetBlock);
+			if (statement.getParent() == targetStatement.getParent()) {
+				if (target.isBefore()) {
+					// statement before target
+					if (targetStatements.indexOf(statement) == targetStatements.indexOf(targetStatement) - 1) {
+						return;
+					}
+				} else {
+					// statement after target
+					if (targetStatements.indexOf(statement) == targetStatements.indexOf(targetStatement) + 1) {
+						return;
+					}
+				}
+			}
+		} else {
+			Block targetBlock = target.getBlock();
+			List<Statement> targetStatements = DomGenerics.statements(targetBlock);
+			if (statement.getParent() == targetBlock) {
+				if (target.isBefore()) {
+					if (targetStatements.indexOf(statement) == 0) {
+						return;
+					}
+				} else {
+					if (targetStatements.indexOf(statement) == targetStatements.size() - 1) {
+						return;
+					}
+				}
+			}
+		}
+		// prepare code generation constants
+		AstCodeGeneration generation = getGeneration();
+		String singleIndent = generation.getIndentation(1);
+		String eol = generation.getEndOfLine();
+		// prepare source location
+		Block sourceBlock = (Block) statement.getParent();
+		int sourceBegin = skipWhitespaceAndPureEOLCToLeft(statement.getStartPosition());
+		int sourceLength = getStatementEndIndex(statement) - sourceBegin;
+		// remove leading EOL
+		{
+			int leftEOLEnd = sourceBegin;
+			int leftEOLBegin = skipSingleEOLToLeft(leftEOLEnd);
+			int leftEOLLength = leftEOLEnd - leftEOLBegin;
+			//
+			replaceSubstring(leftEOLBegin, leftEOLLength, "");
+			sourceBegin -= leftEOLLength;
+		}
+		//
+		if (target.getStatement() != null) {
+			Statement targetStatement = target.getStatement();
+			String indent = getWhitespaceToLeft(targetStatement.getStartPosition(), false);
+			//
+			int position;
+			if (target.isBefore()) {
+				// move before any empty lines and EOLC lines
+				position = skipWhitespaceAndPureEOLCToLeft(targetStatement.getStartPosition());
+				// move source
+				position = moveSource(position, sourceBegin, sourceLength);
+				// add EOL after statement
+				replaceSubstring(position + sourceLength, 0, eol);
+			} else {
+				// move at the end of target
+				position = getStatementEndIndex(targetStatement);
+				// move source
+				position = moveSource(position, sourceBegin, sourceLength);
+				// add EOL before statement
+				replaceSubstring(position, 0, eol);
+				position += eol.length();
+			}
+			// move node
+			{
+				Block targetBlock = (Block) targetStatement.getParent();
+				int index = targetBlock.statements().indexOf(targetStatement);
+				if (!target.isBefore()) {
+					index++;
+				}
+				if (sourceBlock == targetBlock && sourceBlock.statements().indexOf(statement) < index) {
+					index--;
+				}
+				sourceBlock.statements().remove(statement);
+				DomGenerics.statements(targetBlock).add(index, statement);
+			}
+			// re-indent
+			reindentSource(position, sourceLength, indent, eol);
+		} else {
+			Block targetBlock = target.getBlock();
+			// prepare indentation
+			String indent;
+			{
+				ASTNode indentNode = targetBlock;
+				if (targetBlock.getLocationInParent() == MethodDeclaration.BODY_PROPERTY
+						|| targetBlock.getLocationInParent() == TryStatement.BODY_PROPERTY) {
+					indentNode = targetBlock.getParent();
+				}
+				indent = getWhitespaceToLeft(indentNode.getStartPosition(), false);
+				indent += singleIndent;
+			}
+			//
+			int position;
+			if (target.isBefore()) {
+				// prepare position as position after '{' of block
+				{
+					position = targetBlock.getStartPosition();
+					Assert.isTrue(position != -1);
+					position++;
+				}
+				// move source
+				position = moveSource(position, sourceBegin, sourceLength);
+				// add EOL before statement
+				replaceSubstring(position, 0, eol);
+				position += eol.length();
+				// move node
+				sourceBlock.statements().remove(statement);
+				DomGenerics.statements(targetBlock).add(0, statement);
+			} else {
+				// prepare position as position of '}' of block
+				position = AstNodeUtils.getSourceEnd(targetBlock) - 1;
+				String endMethodIndent = getWhitespaceToLeft(position, false);
+				position -= endMethodIndent.length();
+				// move source
+				position = moveSource(position, sourceBegin, sourceLength);
+				// add EOL after statement
+				replaceSubstring(position + sourceLength, 0, eol);
+				// move node
+				sourceBlock.statements().remove(statement);
+				DomGenerics.statements(targetBlock).add(statement);
+			}
+			// re-indent
+			reindentSource(position, sourceLength, indent, eol);
+		}
+	}
+
+	/**
+	 * Moves piece of source with given start/length to target position.
+	 *
+	 * @return the new value of target
+	 */
+	private int moveSource(int target, int start, int length) throws Exception {
+		String source = getSource(start, length);
+		// prepare locations
+		final int b_pos = start;
+		final int b_len = length;
+		final int b_end = b_pos + b_len;
+		final int t_pos = target;
+		//
+		if (b_pos > t_pos) {
+			m_document.replace(b_pos, b_len, "");
+			m_document.replace(t_pos, 0, source);
+			// modify source ranges for AST nodes
+			m_astUnit.accept(new ASTVisitor(true) {
+				@Override
+				public void postVisit(ASTNode node) {
+					int n_pos = node.getStartPosition();
+					int n_len = node.getLength();
+					int n_end = n_pos + n_len;
+					while (true) {
+						// node starts after source end
+						if (n_pos >= b_end) {
+							return;
+						}
+						// node ends before target
+						if (n_end <= t_pos) {
+							return;
+						}
+						// node contains source and target
+						if (n_pos < t_pos && n_end > b_end) {
+							return;
+						}
+						// node is inside of block
+						if (n_pos >= b_pos && n_end <= b_end) {
+							node.setSourceRange(t_pos + n_pos - b_pos, n_len);
+							return;
+						}
+						// node is between target and source
+						if (n_pos >= t_pos && n_end <= b_pos) {
+							node.setSourceRange(n_pos + b_len, n_len);
+							return;
+						}
+						// node contains target
+						if (n_pos < t_pos && n_end > t_pos) {
+							node.setSourceRange(n_pos, n_len + b_len);
+							return;
+						}
+						// node contains source
+						/*if (n_pos < b_pos && n_end > b_end)*/{
+							node.setSourceRange(n_pos + b_len, n_len - b_len);
+							return;
+						}
+					}
+				}
+			});
+		} else {
+			m_document.replace(t_pos, 0, source);
+			m_document.replace(b_pos, b_len, "");
+			// modify source ranges for AST nodes
+			m_astUnit.accept(new ASTVisitor(true) {
+				@Override
+				public void postVisit(ASTNode node) {
+					int n_pos = node.getStartPosition();
+					int n_len = node.getLength();
+					int n_end = n_pos + n_len;
+					// node ends before source
+					if (n_end <= b_pos) {
+						return;
+					}
+					// node starts after target
+					if (n_pos >= t_pos) {
+						return;
+					}
+					// node contains source and target
+					if (n_pos < b_pos && n_end > t_pos) {
+						return;
+					}
+					// node was inside of block
+					if (n_pos >= b_pos && n_end <= b_end) {
+						node.setSourceRange(t_pos - b_len + n_pos - b_pos, n_len);
+						return;
+					}
+					// node is between source and target
+					if (n_pos >= b_end && n_end <= t_pos) {
+						node.setSourceRange(n_pos - b_len, n_len);
+						return;
+					}
+					// node contains target
+					if (n_pos < t_pos && n_end > t_pos) {
+						node.setSourceRange(n_pos - b_len, n_len + b_len);
+						return;
+					}
+					// node contains source
+					/*if (n_pos < b_pos && n_end > b_end)*/{
+						node.setSourceRange(n_pos, n_len - b_len);
+						return;
+					}
+				}
+			});
+		}
+		// update target
+		if (start < target) {
+			target -= length;
+		}
+		return target;
+	}
+
+	/**
+	 * @return the index of character directly after end of given {@link Statement}. This can be
+	 *         beginning of the next statement or EOL. This method skips any whitespace characters and
+	 *         end-of-line comments.
+	 */
+	public int getStatementEndIndex(Statement statement) {
+		int index = statement.getStartPosition() + statement.getLength();
+		char c;
+		// skip spaces
+		while (true) {
+			c = getChar(index++);
+			if (Character.isWhitespace(c)) {
+				if (c == '\r' || c == '\n') {
+					break;
+				}
+			} else {
+				break;
+			}
+		}
+		// skip end-of-line comment
+		if (c == '/' && getChar(index) == '/') {
+			while (true) {
+				c = getChar(index++);
+				if (c == '\r' || c == '\n') {
+					break;
+				}
+			}
+		}
+		// return result
+		return index - 1;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Fields operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds new {@link FieldDeclaration} with given source.
+	 */
+	public FieldDeclaration addFieldDeclaration(String source, BodyDeclarationTarget target)
+			throws Exception {
+		return addFieldDeclaration(ImmutableList.of(source), target);
+	}
+
+	/**
+	 * Adds new {@link FieldDeclaration} with given source lines.
+	 */
+	public FieldDeclaration addFieldDeclaration(List<String> lines, BodyDeclarationTarget target)
+			throws Exception {
+		return (FieldDeclaration) addBodyDeclaration(lines, target);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Methods operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds new {@link MethodDeclaration} with given source in location of given
+	 * {@link StatementTarget}.
+	 *
+	 * @param header
+	 *          the header of method without '{'
+	 * @param bodyLines
+	 *          the lines of method body
+	 * @param target
+	 *          describes location for new {@link BodyDeclaration}
+	 */
+	public MethodDeclaration addMethodDeclaration(String header,
+			List<String> bodyLines,
+			BodyDeclarationTarget target) throws Exception {
+		return addMethodDeclaration(ImmutableList.<String>of(), header, bodyLines, target);
+	}
+
+	/**
+	 * Adds new {@link MethodDeclaration} with given source in location of given
+	 * {@link StatementTarget}.
+	 *
+	 * @param bodyLines
+	 *          the lines of method JavaDoc and/or annotations
+	 * @param header
+	 *          the header of method without '{'
+	 * @param bodyLines
+	 *          the lines of method body
+	 * @param target
+	 *          describes location for new {@link BodyDeclaration}
+	 */
+	public MethodDeclaration addMethodDeclaration(List<String> annotations,
+			String header,
+			List<String> bodyLines,
+			BodyDeclarationTarget target) throws Exception {
+		// prepare full method lines
+		List<String> lines = Lists.newArrayList();
+		{
+			lines.addAll(annotations);
+			if (bodyLines != null) {
+				lines.add(header + " {");
+				// body
+				String singleIndent = getGeneration().getIndentation(1);
+				for (String bodyLine : bodyLines) {
+					lines.add(singleIndent + bodyLine);
+				}
+				// close method
+				lines.add("}");
+			} else {
+				lines.add(header);
+			}
+		}
+		// add method
+		return (MethodDeclaration) addBodyDeclaration(lines, target);
+	}
+
+	/**
+	 * Adds new {@link MethodDeclaration} without body in location of given {@link StatementTarget}.
+	 *
+	 * @param header
+	 *          the header of method.
+	 * @param target
+	 *          describes location for new {@link BodyDeclaration}
+	 */
+	public MethodDeclaration addInterfaceMethodDeclaration(String header, BodyDeclarationTarget target)
+			throws Exception {
+		List<String> lines = ImmutableList.of(header + ";");
+		return (MethodDeclaration) addBodyDeclaration(lines, target);
+	}
+
+	/**
+	 * @return the source for parameters of given {@link MethodDeclaration}.<br>
+	 *
+	 *         <code>public void split(String s, int count)</code> -> <code>String s, int count</code>
+	 */
+	public String getParametersSource(MethodDeclaration method) {
+		StringBuffer sb = new StringBuffer();
+		for (SingleVariableDeclaration parameter : DomGenerics.parameters(method)) {
+			if (sb.length() != 0) {
+				sb.append(", ");
+			}
+			sb.append(getSource(parameter));
+		}
+		return sb.toString();
+	}
+
+	/**
+	 * @return the array of parameter names of given {@link MethodDeclaration}.
+	 *
+	 *         <code>public void split(String s, int count)</code> -> <code>{"s", "count"}</code>
+	 */
+	public String[] getParameterNames(MethodDeclaration method) {
+		List<SingleVariableDeclaration> parameters = DomGenerics.parameters(method);
+		String names[] = new String[parameters.size()];
+		//
+		for (int i = 0; i < names.length; i++) {
+			SingleVariableDeclaration parameter = parameters.get(i);
+			names[i] = parameter.getName().getIdentifier();
+		}
+		//
+		return names;
+	}
+
+	/**
+	 * Replaces the name of {@link MethodDeclaration}.
+	 */
+	public void replaceMethodName(MethodDeclaration method, String newName) throws Exception {
+		setIdentifier(method.getName(), newName);
+		replaceMethodBinding(method);
+	}
+
+	/**
+	 * Replaces {@link IMethodBinding} for given {@link MethodDeclaration} according to actual source.
+	 */
+	private void replaceMethodBinding(MethodDeclaration method) throws Exception {
+		MethodDeclaration parsedMethod = parseExistingMethod(method);
+		replaceMethodBinding(method, parsedMethod);
+	}
+
+	/**
+	 * When we parse existing {@link MethodDeclaration} we should ensure that it is not added into
+	 * parsing context, or this will cause duplicate method compilation problem
+	 */
+	private MethodDeclaration parseExistingMethod(MethodDeclaration method) throws Exception {
+		method.setProperty(AstParser.KEY_IGNORE_THIS_METHOD, Boolean.TRUE);
+		try {
+			return (MethodDeclaration) m_parser.parseBodyDeclaration(method.getStartPosition(), "");
+		} finally {
+			method.setProperty(AstParser.KEY_IGNORE_THIS_METHOD, null);
+		}
+	}
+
+	/**
+	 * Replaces the return {@link Type} in {@link MethodDeclaration} with new type.
+	 *
+	 * @param method
+	 *          the {@link MethodDeclaration} to replace return type.
+	 * @param newTypeName
+	 *          the fully qualified name of type to use.
+	 */
+	public void replaceMethodType(MethodDeclaration method, String newTypeName) throws Exception {
+		// replace source/AST
+		{
+			Type oldType = method.getReturnType2();
+			Type newType = getParser().parseQualifiedType(oldType.getStartPosition(), newTypeName);
+			// replace Type source
+			replaceSubstring(oldType, newTypeName);
+			// replace Type node
+			{
+				method.setReturnType2(newType);
+				resolveImports(newType);
+			}
+		}
+		// replace binding
+		replaceMethodBinding(method);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Source utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the source of stub copy of given {@link MethodDeclaration}.
+	 */
+	public String getMethodStubSource(MethodDeclaration methodDeclaration) throws Exception {
+		IMethodBinding methodBinding = AstNodeUtils.getMethodBinding(methodDeclaration);
+		// header
+		StringBuilder sb = new StringBuilder();
+		sb.append("\t");
+		sb.append(getMethodHeaderSource(methodDeclaration));
+		sb.append(" {\n");
+		// return stub
+		{
+			ITypeBinding returnType = methodBinding.getReturnType();
+			String returnTypeName = AstNodeUtils.getFullyQualifiedName(returnType, false);
+			if (!returnTypeName.equals("void")) {
+				sb.append("\t\treturn ");
+				sb.append(AstParser.getDefaultValue(returnTypeName));
+				sb.append(";\n");
+			}
+		}
+		// close body
+		sb.append("\t}");
+		return sb.toString();
+	}
+
+	/**
+	 * @return the copy of {@link MethodDeclaration} header source, which uses same names for
+	 *         parameters and fully qualified names for all types.
+	 */
+	public String getMethodHeaderSource(MethodDeclaration method) {
+		StringBuffer sb = new StringBuffer();
+		IMethodBinding methodBinding = AstNodeUtils.getMethodBinding(method);
+		// append modifiers
+		{
+			List<ASTNode> modifiersNodes = DomGenerics.modifiersNodes(method);
+			List<Modifier> modifiers = GenericsUtils.select(modifiersNodes, Modifier.class);
+			for (Modifier modifier : modifiers) {
+				sb.append(modifier);
+				sb.append(" ");
+			}
+		}
+		// append return type
+		{
+			ITypeBinding returnType = methodBinding.getReturnType();
+			String returnTypeName = AstNodeUtils.getFullyQualifiedName(returnType, false);
+			sb.append(returnTypeName);
+			sb.append(" ");
+		}
+		// append name
+		sb.append(method.getName().getIdentifier());
+		sb.append("(");
+		// append parameters
+		{
+			ITypeBinding[] parameterTypes = methodBinding.getParameterTypes();
+			List<SingleVariableDeclaration> parameters = DomGenerics.parameters(method);
+			for (int i = 0; i < parameterTypes.length; i++) {
+				ITypeBinding parameterType = parameterTypes[i];
+				String parameterTypeName = AstNodeUtils.getFullyQualifiedName(parameterType, false);
+				String parameterName = parameters.get(i).getName().getIdentifier();
+				if (i != 0) {
+					sb.append(", ");
+				}
+				sb.append(parameterTypeName);
+				sb.append(" ");
+				sb.append(parameterName);
+			}
+		}
+		// done
+		sb.append(")");
+		return sb.toString();
+	}
+
+	/**
+	 * @return the source for list of type arguments.
+	 */
+	public String getTypeArgumentsSource(ITypeBinding[] typeArguments) {
+		if (typeArguments.length == 0) {
+			return "";
+		}
+		// prepare type arguments source
+		StringBuilder typeArgumentsBuilder = new StringBuilder();
+		typeArgumentsBuilder.append("<");
+		for (ITypeBinding typeArgument : typeArguments) {
+			if (typeArgumentsBuilder.length() > 1) {
+				typeArgumentsBuilder.append(", ");
+			}
+			typeArgumentsBuilder.append(AstNodeUtils.getFullyQualifiedName(typeArgument, false));
+		}
+		typeArgumentsBuilder.append(">");
+		return typeArgumentsBuilder.toString();
+	}
+
+	/**
+	 * @return the source for type arguments of {@link ClassInstanceCreation}, including support for
+	 *         possible {@link AnonymousClassDeclaration}
+	 */
+	public String getTypeArgumentsSource(ClassInstanceCreation creation) {
+		// prepare ITypeBinding with type arguments
+		ITypeBinding typeBinding;
+		AnonymousClassDeclaration anonymousDeclaration = creation.getAnonymousClassDeclaration();
+		if (anonymousDeclaration != null) {
+			typeBinding = AstNodeUtils.getTypeBinding(anonymousDeclaration).getSuperclass();
+		} else {
+			typeBinding = AstNodeUtils.getTypeBinding(creation);
+		}
+		// prepare type arguments
+		ITypeBinding[] typeArguments = typeBinding.getTypeArguments();
+		return getTypeArgumentsSource(typeArguments);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Classes operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds new {@link TypeDeclaration} with given source in location of given {@link StatementTarget}
+	 * .
+	 *
+	 * @param lines
+	 *          the lines of class
+	 * @param target
+	 *          describes location for new {@link BodyDeclaration}
+	 */
+	public TypeDeclaration addTypeDeclaration(List<String> lines, BodyDeclarationTarget target)
+			throws Exception {
+		return (TypeDeclaration) addBodyDeclaration(lines, target);
+	}
+
+	/**
+	 * Ensures that given {@link TypeDeclaration} interface with given name.
+	 *
+	 * @return <code>false</code> if class already implements given interface and <code>true</code> in
+	 *         other case.
+	 */
+	public boolean ensureInterfaceImplementation(TypeDeclaration type, String interfaceClassName)
+			throws Exception {
+		// find last implement interface and check, may be required interface is already implemented
+		Type lastInterface = null;
+		for (Type interfaceType : DomGenerics.superInterfaces(type)) {
+			String implementedInterface = AstNodeUtils.getFullyQualifiedName(interfaceType, true);
+			if (implementedInterface.equals(interfaceClassName)) {
+				return false;
+			}
+			lastInterface = interfaceType;
+		}
+		// prepare position
+		int pos;
+		String codePrefix;
+		if (lastInterface == null) {
+			ASTNode typeName = type.getName();
+			if (type.getSuperclassType() != null) {
+				typeName = type.getSuperclassType();
+			}
+			pos = typeName.getStartPosition() + typeName.getLength();
+			codePrefix = " implements ";
+		} else {
+			pos = lastInterface.getStartPosition() + lastInterface.getLength();
+			codePrefix = ", ";
+		}
+		// prepare new interfaceType node
+		SimpleType interfaceType;
+		{
+			TypeLiteral typeLiteral =
+					(TypeLiteral) m_parser.parseExpression(type.getStartPosition(), interfaceClassName
+							+ ".class");
+			AstNodeUtils.moveNode(typeLiteral, pos + codePrefix.length());
+			interfaceType = (SimpleType) typeLiteral.getType();
+			typeLiteral.setType(typeLiteral.getAST().newPrimitiveType(PrimitiveType.BOOLEAN));
+		}
+		// update source/AST
+		replaceSubstring(pos, 0, codePrefix + interfaceClassName);
+		DomGenerics.superInterfaces(type).add(interfaceType);
+		// update ITypeBinding
+		{
+			ITypeBinding interfaceBinding = AstNodeUtils.getTypeBinding(interfaceType);
+			DesignerTypeBinding typeBinding = getDesignerTypeBinding(type);
+			typeBinding.addInterface(interfaceBinding);
+		}
+		// finalize
+		resolveImports(interfaceType);
+		return true;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// BodyDeclaration operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Ensures that {@link MethodDeclaration} declares as thrown exception with given name, or its
+	 * superclass.
+	 */
+	public void ensureThrownException(MethodDeclaration method, String requiredException)
+			throws Exception {
+		ITypeHierarchy requiredHierarchy;
+		{
+			IType requiredExceptionType = getJavaProject().findType(requiredException);
+			Assert.isNotNull2(requiredExceptionType, "No such exception type: {0}", requiredException);
+			requiredHierarchy = requiredExceptionType.newSupertypeHierarchy(null);
+		}
+		// find last exception and check, may be required exception is already declared
+		Name lastName = null;
+		for (Name declaredTypeName : DomGenerics.thrownExceptions(method)) {
+			String declaredName = AstNodeUtils.getFullyQualifiedName(declaredTypeName, false);
+			IType declaredType = getJavaProject().findType(declaredName);
+			if (requiredHierarchy.contains(declaredType)) {
+				return;
+			}
+			lastName = declaredTypeName;
+		}
+		// prepare position
+		int pos;
+		String codePrefix;
+		if (lastName == null) {
+			ASTNode name = method.getName();
+			pos = AstNodeUtils.getSourceEnd(name);
+			pos = indexOf(")", pos) + 1;
+			codePrefix = " throws ";
+		} else {
+			pos = AstNodeUtils.getSourceEnd(lastName);
+			codePrefix = ", ";
+		}
+		// prepare new exception nodes
+		SimpleType newExceptionType;
+		Name newExceptionTypeName;
+		{
+			TypeLiteral typeLiteral =
+					(TypeLiteral) m_parser.parseExpression(pos, requiredException + ".class");
+			AstNodeUtils.moveNode(typeLiteral, pos + codePrefix.length());
+			newExceptionType = (SimpleType) typeLiteral.getType();
+			newExceptionTypeName = newExceptionType.getName();
+			newExceptionType.setName(typeLiteral.getAST().newSimpleName("filler"));
+		}
+		// update source/AST
+		replaceSubstring(pos, 0, codePrefix + requiredException);
+		DomGenerics.thrownExceptions(method).add(newExceptionTypeName);
+		// update ITypeBinding
+		{
+			ITypeBinding newExceptionBinding = AstNodeUtils.getTypeBinding(newExceptionType);
+			DesignerMethodBinding methodBinding = getDesignerMethodBinding(method);
+			methodBinding.addExceptionType(newExceptionBinding);
+		}
+		// finalize
+		resolveImports(method);
+	}
+
+	/**
+	 * Adds new {@link BodyDeclaration} with given source in location of given {@link StatementTarget}
+	 * .
+	 *
+	 * @param lines
+	 *          the lines of source for new {@link BodyDeclaration}.
+	 * @param target
+	 *          describes location for new {@link BodyDeclaration}.
+	 */
+	private BodyDeclaration addBodyDeclaration(List<String> lines, BodyDeclarationTarget target)
+			throws Exception {
+		Assert.isNotNull(lines);
+		Assert.isNotNull(target);
+		// type or body declaration required
+		TypeDeclaration targetType = target.getType();
+		BodyDeclaration targetDecl = target.getDeclaration();
+		Assert.isTrue(targetType != null || targetDecl != null);
+		// prepare code generation constants
+		AstCodeGeneration generation = getGeneration();
+		String singleIndent = generation.getIndentation(1);
+		String eol = generation.getEndOfLine();
+		// relative to BodyDeclaration
+		if (targetDecl != null) {
+			// prepare information about target body declaration
+			targetType = (TypeDeclaration) targetDecl.getParent();
+			String indent = getWhitespaceToLeft(targetDecl.getStartPosition(), false);
+			int index = targetType.bodyDeclarations().indexOf(targetDecl);
+			// add new declaration
+			BodyDeclaration newDeclaration;
+			String source = getIndentedSource(lines, indent, singleIndent, eol);
+			if (target.isBefore()) {
+				// add before any empty lines and EOLC lines
+				int position = skipWhitespaceAndPureEOLCToLeft(targetDecl.getStartPosition());
+				source = source + eol;
+				// parse declaration
+				newDeclaration = getParser().parseBodyDeclaration(position, source);
+				// add source
+				replaceSubstring(position, 0, source);
+				// add declaration
+				DomGenerics.bodyDeclarations(targetType).add(index, newDeclaration);
+			} else {
+				// move at the end of target
+				int position = AstNodeUtils.getSourceEnd(targetDecl);
+				position = skipWhitespaceEOLCToRight(position);
+				source = eol + source;
+				// parse declaration
+				newDeclaration = getParser().parseBodyDeclaration(position, source);
+				// add source
+				replaceSubstring(position, 0, source);
+				// add declaration
+				DomGenerics.bodyDeclarations(targetType).add(index + 1, newDeclaration);
+			}
+			//
+			resolveImports(newDeclaration);
+			return newDeclaration;
+		}
+		// relative to TypeDeclaration
+		{
+			removeDanglingJavadoc();
+			// prepare indent
+			String indent;
+			{
+				ASTNode indentNode;
+				if (AnonymousTypeDeclaration.is(targetType)) {
+					indentNode = AstNodeUtils.getEnclosingStatement(targetType);
+				} else {
+					indentNode = targetType;
+				}
+				indent = getWhitespaceToLeft(indentNode.getStartPosition(), false) + singleIndent;
+			}
+			String source = getIndentedSource(lines, indent, singleIndent, eol);
+			// add new body declaration
+			BodyDeclaration newDeclaration;
+			if (target.isBefore()) {
+				// prepare position as position after '{' of type declaration
+				int position = indexOfAny("{", targetType.getName().getStartPosition()) + 1;
+				source = eol + source;
+				// parse declaration
+				newDeclaration = getParser().parseBodyDeclaration(position, source);
+				// add source
+				replaceSubstring(position, 0, source);
+				// add declaration
+				DomGenerics.bodyDeclarations(targetType).add(0, newDeclaration);
+			} else {
+				// prepare position as position of '}' of type declaration
+				int position = AstNodeUtils.getSourceEnd(targetType) - 1;
+				position -= getWhitespaceToLeft(position, false).length();
+				source = source + eol;
+				// parse declaration
+				newDeclaration = getParser().parseBodyDeclaration(position, source);
+				// add source
+				replaceSubstring(position, 0, source);
+				// add declaration
+				DomGenerics.bodyDeclarations(targetType).add(newDeclaration);
+			}
+			//
+			resolveImports(newDeclaration);
+			return newDeclaration;
+		}
+	}
+
+	/**
+	 * Removes given {@link BodyDeclaration}.
+	 */
+	public void removeBodyDeclaration(BodyDeclaration declaration) throws Exception {
+		List<BodyDeclaration> declarations;
+		if (declaration.getParent() instanceof TypeDeclaration) {
+			TypeDeclaration typeDeclaration = (TypeDeclaration) declaration.getParent();
+			declarations = DomGenerics.bodyDeclarations(typeDeclaration);
+		} else {
+			declarations =
+					DomGenerics.bodyDeclarations((AnonymousClassDeclaration) declaration.getParent());
+		}
+		// prepare start of source to remove
+		int startIndex;
+		{
+			int index = declarations.indexOf(declaration);
+			if (index != 0) {
+				BodyDeclaration prevDeclaration = declarations.get(index - 1);
+				startIndex = prevDeclaration.getStartPosition() + prevDeclaration.getLength();
+				startIndex = skipWhitespaceEOLCToRight(startIndex);
+			} else {
+				if (declaration.getParent() instanceof TypeDeclaration) {
+					TypeDeclaration typeDeclaration = (TypeDeclaration) declaration.getParent();
+					startIndex = indexOfAny("{", typeDeclaration.getName().getStartPosition()) + 1;
+				} else {
+					startIndex = indexOfAny("{", declaration.getParent().getStartPosition()) + 1;
+				}
+			}
+		}
+		// prepare end of source to remove
+		int endIndex;
+		{
+			endIndex = declaration.getStartPosition() + declaration.getLength();
+			endIndex = skipWhitespaceEOLCToRight(endIndex);
+		}
+		// remove declaration and corresponding source
+		declarations.remove(declaration);
+		replaceSubstring(startIndex, endIndex - startIndex, "");
+	}
+
+	/**
+	 * @return the position of first (to right) non whitespace character (excluding EOL) on same line.
+	 *         This method also skips EOL comments.
+	 */
+	private int skipWhitespaceEOLCToRight(int position) throws BadLocationException, Exception {
+		for (;; position++) {
+			char c = m_document.getChar(position);
+			// stop on EOL
+			if (c == '\r' || c == '\n') {
+				break;
+			}
+			// skip whitespace
+			if (Character.isWhitespace(c)) {
+				continue;
+			}
+			// skip EOL comments
+			if (c == '/' && m_document.getChar(position + 1) == '/') {
+				position = getLineEnd(position);
+				break;
+			}
+			// stop
+			break;
+		}
+		return position;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// VariableDeclaration operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Removes {@link VariableDeclaration}.
+	 */
+	public void removeVariableDeclaration(VariableDeclaration declaration) throws Exception {
+		ASTNode parent = declaration.getParent();
+		if (parent instanceof FieldDeclaration) {
+			// field
+			FieldDeclaration fieldDeclaration = (FieldDeclaration) parent;
+			List<VariableDeclarationFragment> fragments = DomGenerics.fragments(fieldDeclaration);
+			if (fragments.size() == 1) {
+				removeBodyDeclaration(fieldDeclaration);
+			} else {
+				removeVariableDeclaration(fieldDeclaration, fragments, fragments.indexOf(declaration));
+			}
+		} else if (parent instanceof VariableDeclarationStatement) {
+			// local variable
+			VariableDeclarationStatement variableDeclaration =
+					(VariableDeclarationStatement) declaration.getParent();
+			List<VariableDeclarationFragment> fragments = DomGenerics.fragments(variableDeclaration);
+			if (fragments.size() == 1) {
+				removeEnclosingStatement(declaration);
+			} else {
+				removeVariableDeclaration(variableDeclaration, fragments, fragments.indexOf(declaration));
+			}
+		} else {
+			// can't remove other cases
+			throw new IllegalArgumentException("Can not remove VariableDeclaration '"
+					+ declaration.toString()
+					+ "'");
+		}
+	}
+
+	/**
+	 * Removes {@link VariableDeclarationFragment} from its parent.
+	 */
+	private void removeVariableDeclaration(ASTNode parent,
+			List<VariableDeclarationFragment> fragments,
+			int index) throws Exception {
+		VariableDeclarationFragment declaration = fragments.get(index);
+		Assert.isTrue(
+				fragments.size() > 1,
+				"Last variable must be removed with parent body.",
+				getSource(declaration),
+				getSource(parent));
+		// prepare source interval to remove
+		int sourceBegin;
+		int sourceEnd;
+		{
+			sourceBegin = AstNodeUtils.getSourceBegin(declaration);
+			sourceEnd = AstNodeUtils.getSourceEnd(declaration);
+			if (index == 0) {
+				if (fragments.size() > 1) {
+					sourceEnd = indexOfAnyBut(", \t\r\n", sourceEnd);
+				}
+			} else {
+				sourceBegin = indexOfAnyButBackward(", \t\r\n", sourceBegin) + 1;
+			}
+		}
+		// remove node
+		fragments.remove(index);
+		// remove source
+		replaceSubstring(sourceBegin, sourceEnd - sourceBegin, "");
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Javadoc
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Removes dangling {@link Javadoc} sources at the end of {@link TypeDeclaration}s.
+	 */
+	public void removeDanglingJavadoc() {
+		m_astUnit.accept(new AstVisitorEx() {
+			@Override
+			public void endVisitEx(TypeDeclaration node) throws Exception {
+				int typeEnd = AstNodeUtils.getSourceEnd(node) - 1;
+				int trailingJavadocEnd = skipWhitespaceAndPureEOLCToLeft(typeEnd);
+				trailingJavadocEnd = skipWhitespaceToLeft(trailingJavadocEnd, true);
+				// prepare begin/end of last JavaDoc at end of type
+				String source = getSource().substring(0, typeEnd);
+				int javadocBegin = source.lastIndexOf("/**");
+				if (javadocBegin != -1) {
+					int javadocEnd = source.indexOf("*/", javadocBegin) + "*/".length();
+					// if end of last JavaDoc is end of TypeDeclaration, i.e. no BodyDeclaration, remove it
+					if (javadocEnd == trailingJavadocEnd) {
+						javadocBegin = skipWhitespaceToLeft(javadocBegin, false);
+						replaceSubstring(javadocBegin, typeEnd - javadocBegin, "");
+					}
+				}
+			}
+		});
+	}
+
+	/**
+	 * Sets new text for JavaDoc {@link TagElement}, i.e. {@link TextElement}.
+	 *
+	 * @param declaration
+	 *          the {@link BodyDeclaration} to update {@link Javadoc}.
+	 * @param tagName
+	 *          the name of tag, such as <code>"myTag"</code>, with leading <code>"@"</code>.
+	 * @param tagText
+	 *          the text to set for tag, with leading space, or <code>null</code> if tag should be
+	 *          removed.
+	 *
+	 * @return the {@link TagElement} that has single {@link TextElement} fragment with
+	 *         <code>tagText</code> as text; or <code>null</code> if tag was removed.
+	 */
+	public TagElement setJavadocTagText(BodyDeclaration declaration, String tagName, String tagText)
+			throws Exception {
+		Assert.isNotNull(tagName);
+		Assert.isLegal(tagName.length() != 0, "Empty name of tag.");
+		Assert.isLegal(tagName.startsWith("@"), "Tag name should start with '@'.");
+		Javadoc javadoc = declaration.getJavadoc();
+		// update/add tag
+		if (tagText != null) {
+			// update existing JavaDoc
+			if (javadoc != null) {
+				// try to find existing tag
+				for (TagElement tagElement : DomGenerics.tags(javadoc)) {
+					if (tagName.equals(tagElement.getTagName())) {
+						setJavadocTagText_replaceFragments(tagElement, tagText);
+						return tagElement;
+					}
+				}
+				// add new tag
+				{
+					List<TagElement> tags = DomGenerics.tags(javadoc);
+					// prepare position for new TagElement
+					int position;
+					{
+						int javadocPosition = javadoc.getStartPosition();
+						String prefix = getWhitespaceToLeft(javadocPosition, false);
+						String endOfLine = getGeneration().getEndOfLine();
+						if (tags.isEmpty()) {
+							position = javadocPosition + "/**".length();
+						} else {
+							position = AstNodeUtils.getSourceEnd(tags.get(tags.size() - 1));
+						}
+						String newCommentLine = endOfLine + prefix + " * ";
+						replaceSubstring(position, 0, newCommentLine);
+						position += newCommentLine.length();
+					}
+					// replace source
+					String tagSource = tagName + tagText;
+					replaceSubstring(position, 0, tagSource);
+					// add TagElement
+					TagElement tagElement = javadoc.getAST().newTagElement();
+					tagElement.setSourceRange(position, tagSource.length());
+					tagElement.setTagName(tagName);
+					tags.add(tagElement);
+					// add TextElement
+					TextElement textElement = javadoc.getAST().newTextElement();
+					textElement.setSourceRange(position + tagName.length(), tagText.length());
+					textElement.setText(tagText);
+					DomGenerics.fragments(tagElement).add(textElement);
+					// new TagElement
+					return tagElement;
+				}
+			} else {
+				javadoc = setJavadoc(declaration, new String[]{tagName + tagText});
+				return DomGenerics.tags(javadoc).get(0);
+			}
+		}
+		// remove tag
+		if (javadoc != null) {
+			for (Iterator<TagElement> I = DomGenerics.tags(javadoc).iterator(); I.hasNext();) {
+				TagElement tagElement = I.next();
+				if (tagName.equals(tagElement.getTagName())) {
+					int begin = AstNodeUtils.getSourceBegin(tagElement);
+					int end = AstNodeUtils.getSourceEnd(tagElement);
+					end = indexOfAnyBut(" \t\r\n*", end + 1);
+					// check for removing last line
+					if (getChar(end) == '/') {
+						begin = indexOfAnyButBackward("*", begin);
+					}
+					// replace source
+					replaceSubstring(begin, end - begin, "");
+					// remove tag
+					I.remove();
+					// remove JavaDoc is empty
+					if (DomGenerics.tags(javadoc).isEmpty()) {
+						setJavadoc(declaration, null);
+					}
+					// done
+					break;
+				}
+			}
+		}
+		return null;
+	}
+
+	private void setJavadocTagText_replaceFragments(TagElement tagElement, String tagText)
+			throws Exception {
+		List<ASTNode> fragments = DomGenerics.fragments(tagElement);
+		// replace source
+		int fragmentsPosition;
+		if (!fragments.isEmpty()) {
+			ASTNode firstFragment = fragments.get(0);
+			fragmentsPosition = AstNodeUtils.getSourceBegin(firstFragment);
+			int fragmentsLength = AstNodeUtils.getSourceEnd(tagElement) - fragmentsPosition;
+			replaceSubstring(fragmentsPosition, fragmentsLength, tagText);
+		} else {
+			fragmentsPosition = AstNodeUtils.getSourceEnd(tagElement);
+			replaceSubstring(fragmentsPosition, 0, tagText);
+			AstNodeUtils.setSourceLength(tagElement, tagElement.getLength() + tagText.length());
+		}
+		// replace fragments
+		fragments.clear();
+		TextElement textElement = tagElement.getAST().newTextElement();
+		textElement.setSourceRange(fragmentsPosition, tagText.length());
+		textElement.setText(tagText);
+		fragments.add(textElement);
+	}
+
+	/**
+	 * Sets new {@link Javadoc} comment for {@link BodyDeclaration}.
+	 *
+	 * @param declaration
+	 *          the {@link BodyDeclaration} to adds comment to.
+	 * @param lines
+	 *          the lines for {@link Javadoc} comment, may be <code>null</code> if {@link Javadoc}
+	 *          should be removed.
+	 *
+	 * @return the added {@link Javadoc} object, or <code>null</code> if {@link Javadoc} was removed.
+	 */
+	public Javadoc setJavadoc(BodyDeclaration declaration, String[] lines) throws Exception {
+		Javadoc oldJavadoc = declaration.getJavadoc();
+		// set new JavaDoc
+		if (lines != null) {
+			int position = declaration.getStartPosition();
+			// prepare code generation constants
+			AstCodeGeneration generation = getGeneration();
+			String eol = generation.getEndOfLine();
+			String indent = getWhitespaceToLeft(declaration.getStartPosition(), false);
+			// prepare source for comment
+			String comment;
+			{
+				StringBuilder sb = new StringBuilder();
+				sb.append("/**");
+				sb.append(eol);
+				for (String line : lines) {
+					sb.append(indent);
+					sb.append(" * ");
+					sb.append(line);
+					sb.append(eol);
+				}
+				sb.append(indent);
+				sb.append(" */");
+				comment = sb.toString();
+			}
+			// prepare JavaDoc
+			Javadoc javadoc;
+			{
+				BodyDeclaration tmpMethod =
+						getParser().parseBodyDeclaration(position, comment + " void __wbp_tmpMethod() {}");
+				javadoc = tmpMethod.getJavadoc();
+				tmpMethod.setJavadoc(null);
+			}
+			// set JavaDoc
+			if (oldJavadoc != null) {
+				int oldLength = oldJavadoc.getLength();
+				replaceSubstring(position, oldLength, comment);
+			} else {
+				comment += eol + indent;
+				replaceSubstring(position, 0, comment);
+				declaration.setSourceRange(position, comment.length() + declaration.getLength());
+			}
+			declaration.setJavadoc(javadoc);
+			return javadoc;
+		}
+		// remove existing JavaDoc
+		if (oldJavadoc != null) {
+			int sourceBegin = oldJavadoc.getStartPosition();
+			int sourceEnd = sourceBegin + oldJavadoc.getLength();
+			sourceEnd = indexOfAnyBut(" \t\r\n", sourceEnd);
+			replaceSubstring(sourceBegin, sourceEnd - sourceBegin, "");
+			declaration.setJavadoc(null);
+		}
+		return null;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Import operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private boolean m_resolveImports = true;
+
+	/**
+	 * Ensure that the compilation unit includes an import for the given fully-qualified class name,
+	 * adding one if it does not already exist.
+	 *
+	 * @param className
+	 *          the fully qualified name of the class that must be imported
+	 *
+	 * @return the string that should be used as reference on class, can be short name (if import was
+	 *         successful) or fully qualified name (if there is already imported class with same short
+	 *         name).
+	 */
+	public String ensureClassImport2(final String className) throws Exception {
+		final String shortClassName = CodeUtils.getShortClass(className);
+		List<ImportDeclaration> imports = DomGenerics.imports(m_astUnit);
+		// check, may be we don't need to add import
+		{
+			String packageName = CodeUtils.getPackage(className);
+			// check for java.lang
+			if ("java.lang".equals(packageName)) {
+				return shortClassName;
+			}
+			// check for existing import
+			for (Iterator<ImportDeclaration> I = imports.iterator(); I.hasNext();) {
+				ImportDeclaration currentImport = I.next();
+				String importName = currentImport.getName().toString();
+				if (importName.equals(className)
+						|| currentImport.isOnDemand()
+						&& importName.equals(packageName)) {
+					return shortClassName;
+				}
+			}
+			// check for class in same package
+			{
+				IPackageDeclaration[] packageDeclarations = m_modelUnit.getPackageDeclarations();
+				if (packageDeclarations.length != 0
+						&& packageDeclarations[0].getElementName().equals(packageName)) {
+					return shortClassName;
+				}
+			}
+			// check for inner class
+			{
+				final AtomicBoolean hasInner = new AtomicBoolean();
+				m_astUnit.accept(new ASTVisitor() {
+					@Override
+					public boolean visit(Block node) {
+						return false;
+					}
+
+					@Override
+					public void endVisit(TypeDeclaration node) {
+						String qualifiedTypeName = AstNodeUtils.getFullyQualifiedName(node, false);
+						if (qualifiedTypeName.equals(className)) {
+							hasInner.set(true);
+						}
+					}
+				});
+				if (hasInner.get()) {
+					return shortClassName;
+				}
+			}
+		}
+		// check, may be we can not import because of conflict
+		{
+			boolean hasOnDemand = false;
+			// check, may be there is already import for class with same short name
+			for (Iterator<ImportDeclaration> I = imports.iterator(); I.hasNext();) {
+				ImportDeclaration currentImport = I.next();
+				if (currentImport.isOnDemand()) {
+					hasOnDemand = true;
+					break;
+				} else {
+					String importName = currentImport.getName().getFullyQualifiedName();
+					if (CodeUtils.getShortClass(importName).equals(shortClassName)) {
+						return className;
+					}
+				}
+			}
+			// there are on demand imports, we should check AST for imports
+			if (hasOnDemand) {
+				final AtomicBoolean conflict = new AtomicBoolean();
+				m_astUnit.accept(new ASTVisitor() {
+					@Override
+					public void endVisit(SimpleType node) {
+						if (!conflict.get()) {
+							String qualifiedTypeName = AstNodeUtils.getFullyQualifiedName(node, false);
+							boolean isQualified = qualifiedTypeName.equals(getSource(node));
+							boolean hasSameShort =
+									CodeUtils.getShortClass(qualifiedTypeName).equals(shortClassName);
+							if (!isQualified && hasSameShort) {
+								conflict.set(true);
+							}
+						}
+					}
+				});
+				// if short class name conflicts, use long one
+				if (conflict.get()) {
+					return className;
+				}
+			}
+			// may be has TypeDeclaration with same short name
+			{
+				final AtomicBoolean hasTypeDeclarationWithSameShort = new AtomicBoolean();
+				m_astUnit.accept(new ASTVisitor() {
+					@Override
+					public boolean visit(Block node) {
+						return false;
+					}
+
+					@Override
+					public void endVisit(TypeDeclaration node) {
+						if (node.getName().getIdentifier().equals(shortClassName)) {
+							hasTypeDeclarationWithSameShort.set(true);
+						}
+					}
+				});
+				if (hasTypeDeclarationWithSameShort.get()) {
+					return className;
+				}
+			}
+		}
+		// OK, we need to add new import
+		{
+			String eol = getGeneration().getEndOfLine();
+			String sourcePrefix = "";
+			String sourceSuffix = "";
+			// prepare position for new import
+			int position;
+			if (!imports.isEmpty()) {
+				ImportDeclaration lastImport = imports.get(imports.size() - 1);
+				position = AstNodeUtils.getSourceEnd(lastImport);
+				sourcePrefix = eol;
+			} else if (m_astUnit.getPackage() != null) {
+				position = AstNodeUtils.getSourceEnd(m_astUnit.getPackage());
+				sourcePrefix = eol;
+			} else {
+				position = 0;
+				sourceSuffix = eol;
+			}
+			// add new import
+			{
+				// add import source
+				{
+					String source = sourcePrefix + "import " + className + ";" + sourceSuffix;
+					replaceSubstring(position, 0, source);
+				}
+				// add import node
+				{
+					int importPosition = position + sourcePrefix.length();
+					ImportDeclaration newImport =
+							getParser().parseImportDeclaration(importPosition, className);
+					imports.add(newImport);
+				}
+			}
+			// import successful, return short name
+			return shortClassName;
+		}
+	}
+
+	/**
+	 * Sets the flag if imports should be automatically resolved.
+	 */
+	public void setResolveImports(boolean resolveImports) {
+		m_resolveImports = resolveImports;
+	}
+
+	/**
+	 * Given the {@link ASTNode} that can use fully qualified types, this method tries to import
+	 * qualified types and update node/source accordingly. It is expected that node already added to
+	 * the AST and source already modified.
+	 */
+	public void resolveImports(final ASTNode node) {
+		if (!m_resolveImports) {
+			return;
+		}
+		node.accept(new AstVisitorEx() {
+			@Override
+			public boolean visitEx(QualifiedName qualifiedName) throws Exception {
+				String qualifiedClassName = qualifiedName.getFullyQualifiedName();
+				// if we can find IType with this name, consider it as type name
+				if (getJavaProject().findType(qualifiedClassName) != null) {
+					String shortClassName = ensureClassImport2(qualifiedClassName);
+					if (!shortClassName.equals(qualifiedClassName)) {
+						int sourceBegin = AstNodeUtils.getSourceBegin(qualifiedName);
+						// replace source
+						replaceSubstring(qualifiedName, shortClassName);
+						// replace node
+						{
+							ITypeBinding typeBinding = AstNodeUtils.getTypeBinding(qualifiedName);
+							SimpleName simpleName = m_parser.parseSimpleName(sourceBegin, shortClassName);
+							simpleName.setProperty(AstParser.KEY_TYPE_BINDING, typeBinding);
+							replaceNode(qualifiedName, simpleName);
+						}
+						// done
+						return false;
+					}
+				}
+				return true;
+			}
+		});
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// MethodInvocation operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Removes argument from {@link MethodInvocation}.
+	 */
+	public void removeInvocationArgument(MethodInvocation invocation, int index) throws Exception {
+		removeInvocationArgument(invocation, DomGenerics.arguments(invocation), index);
+	}
+
+	/**
+	 * Removes argument from {@link ClassInstanceCreation}.
+	 */
+	public void removeCreationArgument(ClassInstanceCreation creation, int index) throws Exception {
+		removeInvocationArgument(creation, DomGenerics.arguments(creation), index);
+	}
+
+	/**
+	 * Removes argument from {@link MethodInvocation} or {@link ClassInstanceCreation}.
+	 */
+	private void removeInvocationArgument(ASTNode parent, List<Expression> arguments, int index)
+			throws Exception {
+		// prepare source interval to remove
+		int sourceBegin;
+		int sourceEnd;
+		{
+			Expression argument = arguments.get(index);
+			sourceBegin = AstNodeUtils.getSourceBegin(argument);
+			sourceEnd = AstNodeUtils.getSourceEnd(argument);
+			if (index == 0) {
+				if (arguments.size() == 1) {
+					sourceEnd = indexOf(")", sourceEnd);
+				} else {
+					sourceEnd = indexOfAnyBut(", \t\r\n", sourceEnd);
+				}
+			} else {
+				sourceBegin = indexOfAnyButBackward(", \t\r\n", sourceBegin) + 1;
+			}
+		}
+		// remove node
+		arguments.remove(index);
+		// remove parameter type from binding
+		DesignerMethodBinding methodBinding = getDesignerMethodBinding(parent);
+		if (index < methodBinding.getParameterTypes().length) {
+			// remove when not ellipsis argument
+			methodBinding.removeParameterType(index);
+		}
+		// remove source
+		replaceSubstring(sourceBegin, sourceEnd - sourceBegin, "");
+	}
+
+	/**
+	 * @return the new argument added to the {@link MethodInvocation}.
+	 */
+	public Expression addInvocationArgument(MethodInvocation invocation, int index, String source)
+			throws Exception {
+		return addInvocationArgument(invocation, DomGenerics.arguments(invocation), index, source);
+	}
+
+	/**
+	 * @return the new argument added to the {@link ClassInstanceCreation}.
+	 */
+	public Expression addCreationArgument(ClassInstanceCreation creation, int index, String source)
+			throws Exception {
+		return addInvocationArgument(creation, DomGenerics.arguments(creation), index, source);
+	}
+
+	/**
+	 * Move argument from position with index <code>oldIndex</code> to position with index
+	 * <code>newIndex</code>.
+	 */
+	public Expression moveInvocationArgument(MethodInvocation invocation, int oldIndex, int newIndex)
+			throws Exception {
+		List<Expression> arguments = DomGenerics.arguments(invocation);
+		// prepare move expression
+		Expression expression = arguments.get(oldIndex);
+		// prepare move source
+		String source = getSource(expression);
+		// remove from old array
+		removeInvocationArgument(invocation, oldIndex);
+		// add to new array
+		int position = insertToInvocationBody(invocation, arguments, newIndex, source);
+		// add node
+		arguments.add(newIndex, expression);
+		AstNodeUtils.moveNode(expression, position);
+		return expression;
+	}
+
+	/**
+	 * Adds new argument {@link Expression} into {@link MethodInvocation} or
+	 * {@link ClassInstanceCreation}.
+	 *
+	 * @param parent
+	 *          the {@link MethodInvocation} or {@link ClassInstanceCreation}.
+	 * @param arguments
+	 *          the {@link List} of argument {@link Expression}'s.
+	 * @param index
+	 *          the index for new argument.
+	 * @param source
+	 *          the source for new argument.
+	 *
+	 * @return the new argument {@link Expression}.
+	 */
+	private Expression addInvocationArgument(Expression parent,
+			List<Expression> arguments,
+			int index,
+			String source) throws Exception {
+		int position = insertToInvocationBody(parent, arguments, index, source);
+		// add node
+		Expression argument = getParser().parseExpression(position, source);
+		arguments.add(index, argument);
+		// replace binding for method
+		replaceInvocationBinding(parent);
+		// return added argument
+		resolveImports(argument);
+		return argument;
+	}
+
+	/**
+	 * Add to invocation body of source new argument with given index.
+	 *
+	 * @return the start position of inserted code.
+	 */
+	private int insertToInvocationBody(Expression parent,
+			List<Expression> arguments,
+			int index,
+			String source) throws Exception {
+		int position;
+		String sourcePrefix = "";
+		String sourceSuffix = "";
+		if (index == 0) {
+			if (arguments.size() == 0) {
+				position = AstNodeUtils.getSourceEnd(parent) - 1;
+			} else {
+				Expression firstArgument = arguments.get(index);
+				position = AstNodeUtils.getSourceBegin(firstArgument);
+				sourceSuffix = ", ";
+			}
+		} else {
+			Expression prevArgument = arguments.get(index - 1);
+			position = AstNodeUtils.getSourceEnd(prevArgument);
+			sourcePrefix = ", ";
+		}
+		// add source
+		replaceSubstring(position, 0, sourcePrefix + source + sourceSuffix);
+		position += sourcePrefix.length();
+		return position;
+	}
+
+	/**
+	 * Replaces the arguments of given {@link ClassInstanceCreation}.
+	 *
+	 * @param creation
+	 *          the {@link ClassInstanceCreation} to replace arguments.
+	 * @param lines
+	 *          the {@link String}'s of arguments. Number of lines is not related with number of
+	 *          arguments, lines are used to format code better.
+	 */
+	public void replaceCreationArguments(ClassInstanceCreation creation, List<String> lines)
+			throws Exception {
+		replaceInvocationArguments(creation, creation.getType(), DomGenerics.arguments(creation), lines);
+	}
+
+	/**
+	 * Replaces the arguments of given {@link MethodInvocation}.
+	 *
+	 * @param invocation
+	 *          the {@link MethodInvocation} to replace arguments.
+	 * @param lines
+	 *          the {@link String}'s of arguments. Number of lines is not related with number of
+	 *          arguments, lines are used to format code better.
+	 */
+	public void replaceInvocationArguments(MethodInvocation invocation, List<String> lines)
+			throws Exception {
+		replaceInvocationArguments(
+				invocation,
+				invocation.getName(),
+				DomGenerics.arguments(invocation),
+				lines);
+	}
+
+	/**
+	 * Replaces the arguments of given {@link ClassInstanceCreation} with new arguments specified as
+	 * array of lines. Number of lines is not related with number of arguments, lines are used to
+	 * format code better.
+	 */
+	/**
+	 * Replaces arguments of {@link MethodInvocation} or {@link ClassInstanceCreation}.
+	 *
+	 * @param parent
+	 *          the {@link MethodInvocation} or {@link ClassInstanceCreation}.
+	 * @param arguments
+	 *          the {@link List} of <code>parent</code> arguments.
+	 * @param lines
+	 *          the {@link String}'s of arguments. Number of lines is not related with number of
+	 *          arguments, lines are used to format code better.
+	 */
+	private void replaceInvocationArguments(Expression parent,
+			ASTNode nameNode,
+			List<Expression> arguments,
+			List<String> lines) throws Exception {
+		// prepare new arguments source
+		String source;
+		{
+			// prepare code generation constants
+			AstCodeGeneration generation = getGeneration();
+			String singleIndent = generation.getIndentation(1);
+			String eol = generation.getEndOfLine();
+			//
+			Statement statement = AstNodeUtils.getEnclosingStatement(parent);
+			String indent = getWhitespaceToLeft(statement.getStartPosition(), false);
+			source = getIndentedSource(lines, indent, singleIndent, eol);
+			// remove indentation for first line
+			source = source.trim();
+		}
+		// replace source
+		int sourceBegin = indexOf("(", AstNodeUtils.getSourceBegin(nameNode)) + 1;
+		int sourceEnd = AstNodeUtils.getSourceEnd(parent) - 1;
+		replaceSubstring(sourceBegin, sourceEnd - sourceBegin, source);
+		// replace binding
+		ASTNode newInvocation = replaceInvocationBinding(parent);
+		// replace arguments
+		{
+			List<Expression> newArguments = DomGenerics.arguments(newInvocation);
+			List<Expression> newArgumentsCopy = new ArrayList<Expression>(newArguments);
+			newArguments.clear();
+			arguments.clear();
+			arguments.addAll(newArgumentsCopy);
+		}
+		// finalize
+		resolveImports(parent);
+	}
+
+	/**
+	 * Replaces the name of method in given {@link MethodInvocation}.
+	 */
+	public void replaceInvocationName(MethodInvocation invocation, String newIdentifier)
+			throws Exception {
+		setIdentifier(invocation.getName(), newIdentifier);
+		replaceInvocationBinding(invocation);
+	}
+
+	/**
+	 * Replaces the expression part in given {@link MethodInvocation}.
+	 */
+	public void replaceInvocationExpression(MethodInvocation invocation, String newExpressionSource)
+			throws Exception {
+		if (invocation.getExpression() != null) {
+			replaceExpression(invocation.getExpression(), newExpressionSource);
+		} else {
+			int position = invocation.getStartPosition();
+			// insert Expression
+			{
+				Expression newExpression = getParser().parseExpression(position, newExpressionSource);
+				replaceSubstring(position, 0, newExpressionSource + ".");
+				invocation.setExpression(newExpression);
+			}
+			// we inserted Expression, update "begin" for parent nodes
+			{
+				int newInvocationPosition = invocation.getStartPosition();
+				ASTNode node = invocation;
+				while (node.getStartPosition() == newInvocationPosition) {
+					AstNodeUtils.setSourceBegin_keepEnd(node, position);
+					node = node.getParent();
+				}
+			}
+		}
+		replaceInvocationBinding(invocation);
+	}
+
+	/**
+	 * Parses the source of given {@link MethodInvocation} or {@link ClassInstanceCreation} and
+	 * installs its {@link IMethodBinding} as binding for given invocation.
+	 *
+	 * @param invocation
+	 *          the {@link MethodInvocation} or {@link ClassInstanceCreation} to replace
+	 *          {@link IMethodBinding}.
+	 *
+	 * @return the parsed {@link ASTNode}.
+	 */
+	public ASTNode replaceInvocationBinding(Expression invocation) throws Exception {
+		Assert.isLegal(invocation instanceof MethodInvocation
+				|| invocation instanceof ClassInstanceCreation);
+		ASTNode parsedInvocation =
+				m_parser.parseExpression(invocation.getStartPosition(), getSource(invocation));
+		replaceMethodBinding(invocation, parsedInvocation);
+		//
+		return parsedInvocation;
+	}
+
+	/**
+	 * Replaces {@link IMethodBinding} in of existing {@link ASTNode} by using {@link IMethodBinding}
+	 * from equivalent parsed {@link ASTNode}.
+	 */
+	private void replaceMethodBinding(ASTNode oldNode, ASTNode parsedNode) {
+		IMethodBinding parsedBinding =
+				(IMethodBinding) parsedNode.getProperty(AstParser.KEY_METHOD_BINDING);
+		Assert.isTrue(parsedBinding instanceof DesignerMethodBinding);
+		oldNode.setProperty(AstParser.KEY_METHOD_BINDING, parsedBinding);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ClassInstanceCreation += AnonymousClassDeclaration
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds {@link AnonymousClassDeclaration} into given {@link ClassInstanceCreation}.
+	 */
+	public void addAnonymousClassDeclaration(ClassInstanceCreation creation) throws Exception {
+		Assert.isNull2(creation.getAnonymousClassDeclaration(), "Already has anonymous: {0}", creation);
+		// prepare indent
+		String indent;
+		{
+			Statement statement = AstNodeUtils.getEnclosingStatement(creation);
+			indent = getWhitespaceToLeft(statement.getStartPosition(), false);
+		}
+		// prepare positions
+		int begin = AstNodeUtils.getSourceBegin(creation);
+		int end = AstNodeUtils.getSourceEnd(creation);
+		// prepare source
+		String sourceNewCreation;
+		{
+			String eol = m_generation.getEndOfLine();
+			String sourceInsert = " {" + eol + indent + "}";
+			sourceNewCreation = getSource(creation) + sourceInsert;
+			// insert source
+			replaceSubstring(end, 0, sourceInsert);
+		}
+		// copy AnonymousClassDeclaration
+		ClassInstanceCreation newCreation =
+				(ClassInstanceCreation) getParser().parseExpression(begin, sourceNewCreation);
+		AnonymousClassDeclaration newAnonymous = newCreation.getAnonymousClassDeclaration();
+		newCreation.setAnonymousClassDeclaration(null);
+		creation.setAnonymousClassDeclaration(newAnonymous);
+		// we append {}, so replaceSubstring() will not update length, so we should update it manually
+		{
+			ASTNode enclosingNode = creation;
+			while (AstNodeUtils.getSourceEnd(enclosingNode) == end) {
+				AstNodeUtils.setSourceEnd(enclosingNode, newAnonymous);
+				enclosingNode = enclosingNode.getParent();
+			}
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Bindings
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the new {@link DesignerTypeBinding} for given {@link ASTNode}, which has
+	 *         {@link ITypeBinding}.
+	 */
+	private DesignerTypeBinding getDesignerTypeBinding(ASTNode node) {
+		// prepare current binding
+		ITypeBinding currentBinding;
+		{
+			currentBinding = AstNodeUtils.getTypeBinding((TypeDeclaration) node);
+		}
+		// set new DesignerTypeBinding
+		DesignerTypeBinding designerBinding = m_bindingContext.getCopy(currentBinding);
+		node.setProperty(AstParser.KEY_TYPE_BINDING, designerBinding);
+		return designerBinding;
+	}
+
+	/**
+	 * @return existing or new {@link DesignerMethodBinding} for given {@link MethodInvocation} or
+	 *         {@link ClassInstanceCreation}. We use this {@link DesignerMethodBinding} for low-level
+	 *         modifications.
+	 */
+	private DesignerMethodBinding getDesignerMethodBinding(ASTNode node) {
+		// prepare current binding for method/constructor
+		IMethodBinding currentMethodBinding;
+		if (node instanceof MethodDeclaration) {
+			currentMethodBinding = AstNodeUtils.getMethodBinding((MethodDeclaration) node);
+		} else if (node instanceof MethodInvocation) {
+			currentMethodBinding = AstNodeUtils.getMethodBinding((MethodInvocation) node);
+		} else {
+			currentMethodBinding = AstNodeUtils.getCreationBinding((ClassInstanceCreation) node);
+		}
+		// get existing DesignerMethodBinding, or create new wrapper
+		if (currentMethodBinding instanceof DesignerMethodBinding) {
+			return (DesignerMethodBinding) currentMethodBinding;
+		} else {
+			DesignerMethodBinding designerMethodBinding = m_bindingContext.get(currentMethodBinding);
+			node.setProperty(AstParser.KEY_METHOD_BINDING, designerMethodBinding);
+			return designerMethodBinding;
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Array
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Add element with given <code>index</code> to {@link ArrayInitializer}.
+	 */
+	public Expression addArrayElement(ArrayInitializer arrayInitializer, int index, String source)
+			throws Exception {
+		// prepare source
+		int position = insertToArrayBody(arrayInitializer, index, source);
+		// add node
+		Expression element = getParser().parseExpression(position, source);
+		List<Expression> elements = DomGenerics.expressions(arrayInitializer);
+		elements.add(index, element);
+		// return added element
+		resolveImports(element);
+		return element;
+	}
+
+	/**
+	 * Move element form old array <code>oldArray</code> with index <code>oldIndex</code> to new array
+	 * <code>newArray</code> with index <code>newIndex</code>.
+	 */
+	public Expression moveArrayElement(ArrayInitializer oldArray,
+			ArrayInitializer newArray,
+			int oldIndex,
+			int newIndex) throws Exception {
+		// prepare move expression
+		Expression expression = DomGenerics.expressions(oldArray).get(oldIndex);
+		// prepare move source
+		String source = getSource(expression);
+		// remove from old array
+		removeArrayElement(oldArray, oldIndex);
+		// add to new array
+		int position = insertToArrayBody(newArray, newIndex, source);
+		// add node
+		DomGenerics.expressions(newArray).add(newIndex, expression);
+		AstNodeUtils.moveNode(expression, position);
+		return expression;
+	}
+
+	/**
+	 * Add to array elements body of source new element with given index.
+	 *
+	 * @return the start position of inserted code.
+	 */
+	private int insertToArrayBody(ArrayInitializer arrayInitializer, int index, String source)
+			throws Exception {
+		// prepare elements
+		List<Expression> elements = DomGenerics.expressions(arrayInitializer);
+		int position;
+		String sourcePrefix = "";
+		String sourceSuffix = "";
+		if (index == 0) {
+			if (elements.size() == 0) {
+				position = AstNodeUtils.getSourceEnd(arrayInitializer) - 1;
+			} else {
+				Expression firstElement = elements.get(index);
+				position = AstNodeUtils.getSourceBegin(firstElement);
+				sourceSuffix = ", ";
+			}
+		} else {
+			Expression prevElement = elements.get(index - 1);
+			position = AstNodeUtils.getSourceEnd(prevElement);
+			sourcePrefix = ", ";
+		}
+		// add source
+		replaceSubstring(position, 0, sourcePrefix + source + sourceSuffix);
+		position += sourcePrefix.length();
+		//
+		return position;
+	}
+
+	/**
+	 * Remove element with given <code>index</code> from {@link ArrayInitializer}.
+	 */
+	public void removeArrayElement(ArrayInitializer arrayInitializer, int index) throws Exception {
+		// prepare elements
+		List<Expression> elements = DomGenerics.expressions(arrayInitializer);
+		if (index >= elements.size()) {
+			return;
+		}
+		// prepare source interval to remove
+		int sourceBegin;
+		int sourceEnd;
+		{
+			Expression element = elements.get(index);
+			sourceBegin = AstNodeUtils.getSourceBegin(element);
+			sourceEnd = AstNodeUtils.getSourceEnd(element);
+			if (index == 0) {
+				if (elements.size() == 1) {
+					sourceEnd = indexOf("}", sourceEnd);
+				} else {
+					sourceEnd = indexOfAnyBut(", \t\r\n", sourceEnd);
+				}
+			} else {
+				sourceBegin = indexOfAnyButBackward(", \t\r\n", sourceBegin) + 1;
+			}
+		}
+		// remove node
+		elements.remove(index);
+		// remove source
+		replaceSubstring(sourceBegin, sourceEnd - sourceBegin, "");
+	}
+
+	/**
+	 * Exchanges elements with given indexes inside of {@link ArrayInitializer}.
+	 */
+	public void exchangeArrayElements(ArrayInitializer arrayInitializer, int index_1, int index_2)
+			throws Exception {
+		// prepare elements
+		List<Expression> elements = DomGenerics.expressions(arrayInitializer);
+		Expression element_1 = elements.get(index_1);
+		Expression element_2 = elements.get(index_2);
+		String source_1 = getSource(element_1);
+		String source_2 = getSource(element_2);
+		int position_1 = element_1.getStartPosition();
+		int position_2 = element_2.getStartPosition();
+		int length_1 = element_1.getLength();
+		int length_2 = element_2.getLength();
+		// exchange elements
+		{
+			elements.set(index_1, arrayInitializer.getAST().newSimpleName("foo_1"));
+			elements.set(index_2, arrayInitializer.getAST().newSimpleName("foo_2"));
+			// set source
+			if (position_1 < position_2) {
+				replaceSubstring(position_2, length_2, source_1);
+				replaceSubstring(position_1, length_1, source_2);
+				position_2 += length_2 - length_1;
+			} else {
+				replaceSubstring(position_1, length_1, source_2);
+				replaceSubstring(position_2, length_2, source_1);
+				position_1 += length_1 - length_2;
+			}
+			// set positions
+			AstNodeUtils.moveNode(element_1, position_2);
+			AstNodeUtils.moveNode(element_2, position_1);
+			// set nodes
+			elements.set(index_1, element_2);
+			elements.set(index_2, element_1);
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ast/AstNodeUtils.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ast/AstNodeUtils.java
index e1d0a73be..025cb92af 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ast/AstNodeUtils.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ast/AstNodeUtils.java
@@ -86,2410 +86,2410 @@
  * @coverage core.util.ast
  */
 public class AstNodeUtils {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private AstNodeUtils() {
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Comparators
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * A comparator that can be used to sort {@link ASTNode}'s by their start position, with the
-   * left-most nodes sorting to the front of the list.
-   */
-  public static final Comparator<ASTNode> SORT_BY_POSITION = new Comparator<ASTNode>() {
-    @Override
-    public int compare(ASTNode o1, ASTNode o2) {
-      return o1.getStartPosition() - o2.getStartPosition();
-    }
-  };
-  /**
-   * A comparator that can be used to sort {@link ASTNode}'s by their start position, with the
-   * left-most nodes sorting to the back of the list.
-   */
-  public static final Comparator<ASTNode> SORT_BY_REVERSE_POSITION = new Comparator<ASTNode>() {
-    @Override
-    public int compare(ASTNode o1, ASTNode o2) {
-      return o2.getStartPosition() - o1.getStartPosition();
-    }
-  };
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IMethodBinding access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @param invocation
-   *          the not <code>null</code> {@link MethodInvocation}
-   * @return not <code>null</code> {@link IMethodBinding} for given {@link MethodInvocation}.
-   */
-  public static IMethodBinding getMethodBinding(MethodInvocation invocation) {
-    Assert.isNotNull(invocation);
-    // try to get binding from property (copy of binding added by DesignerAST)
-    {
-      IMethodBinding binding =
-          (IMethodBinding) invocation.getProperty(AstParser.KEY_METHOD_BINDING);
-      if (binding != null) {
-        return binding;
-      }
-    }
-    // get standard binding
-    return invocation.resolveMethodBinding();
-  }
-
-  /**
-   * @param invocation
-   *          the not <code>null</code> {@link SuperMethodInvocation}.
-   *
-   * @return not <code>null</code> {@link IMethodBinding} for given {@link SuperMethodInvocation}.
-   */
-  public static IMethodBinding getMethodBinding(SuperMethodInvocation invocation) {
-    Assert.isNotNull(invocation);
-    // try to get binding from property (copy of binding added earlier)
-    {
-      IMethodBinding binding =
-          (IMethodBinding) invocation.getProperty(AstParser.KEY_METHOD_BINDING);
-      if (binding != null) {
-        return binding;
-      }
-    }
-    // get standard binding
-    return invocation.resolveMethodBinding();
-  }
-
-  /**
-   * @param methodDeclaration
-   *          the not <code>null</code> {@link MethodDeclaration}
-   *
-   * @return the {@link IMethodBinding} for given {@link MethodDeclaration}, may be
-   *         <code>null</code> if compilation errors.
-   */
-  public static IMethodBinding getMethodBinding(MethodDeclaration methodDeclaration) {
-    Assert.isNotNull(methodDeclaration);
-    // try to get binding from property (copy of binding added by DesignerAST)
-    {
-      IMethodBinding binding =
-          (IMethodBinding) methodDeclaration.getProperty(AstParser.KEY_METHOD_BINDING);
-      if (binding != null) {
-        return binding;
-      }
-    }
-    // get standard binding, may be "null" (if compilation errors)
-    return methodDeclaration.resolveBinding();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IVariableBinding access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @param simpleName
-   *          the not <code>null</code> {@link SimpleName}
-   *
-   * @return {@link IVariableBinding} or <code>null</code> for given {@link SimpleName}.
-   */
-  public static IVariableBinding getVariableBinding(ASTNode node) {
-    Assert.isNotNull(node);
-    // try to get binding from property (copy of binding added by DesignerAST)
-    {
-      IVariableBinding binding =
-          (IVariableBinding) node.getProperty(AstParser.KEY_VARIABLE_BINDING);
-      if (binding != null) {
-        return binding;
-      }
-    }
-    // VariableDeclaration
-    if (node instanceof VariableDeclaration) {
-      VariableDeclaration variableDeclaration = (VariableDeclaration) node;
-      IVariableBinding binding = variableDeclaration.resolveBinding();
-      if (binding != null) {
-        return binding;
-      }
-    }
-    // check for SimpleName
-    if (node instanceof SimpleName) {
-      SimpleName simpleName = (SimpleName) node;
-      // get standard binding
-      {
-        IBinding binding = simpleName.resolveBinding();
-        if (binding instanceof IVariableBinding) {
-          return (IVariableBinding) binding;
-        }
-      }
-    }
-    // check for FieldAccess
-    if (node instanceof FieldAccess) {
-      FieldAccess fieldAccess = (FieldAccess) node;
-      return fieldAccess.resolveFieldBinding();
-    }
-    // not a variable
-    return null;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Type binding access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @param expression
-   *          the not <code>null</code> {@link Expression}
-   * @return not <code>null</code> {@link ITypeBinding} for given {@link Expression}.
-   */
-  public static ITypeBinding getTypeBinding(Expression expression) {
-    Assert.isNotNull(expression);
-    // try to get binding from property (copy of binding added by DesignerAST)
-    {
-      ITypeBinding binding = (ITypeBinding) expression.getProperty(AstParser.KEY_TYPE_BINDING);
-      if (binding != null) {
-        return binding;
-      }
-    }
-    // get standard binding
-    return expression.resolveTypeBinding();
-  }
-
-  /**
-   * @param declaration
-   *          the not <code>null</code> {@link AnonymousClassDeclaration}
-   * @return not <code>null</code> {@link ITypeBinding} for given {@link AnonymousClassDeclaration}.
-   */
-  public static ITypeBinding getTypeBinding(AnonymousClassDeclaration declaration) {
-    Assert.isNotNull(declaration);
-    // try to get binding from property (copy of binding added by DesignerAST)
-    {
-      ITypeBinding binding = (ITypeBinding) declaration.getProperty(AstParser.KEY_TYPE_BINDING);
-      if (binding != null) {
-        return binding;
-      }
-    }
-    // get standard binding
-    return declaration.resolveBinding();
-  }
-
-  /**
-   * @param type
-   *          the not <code>null</code> {@link Type}
-   *
-   * @return the {@link ITypeBinding} for given {@link Type}, may be <code>null</code> if unknown.
-   */
-  public static ITypeBinding getTypeBinding(Type type) {
-    Assert.isNotNull(type);
-    // try to get binding from property (copy of binding added by DesignerAST)
-    {
-      ITypeBinding binding = (ITypeBinding) type.getProperty(AstParser.KEY_TYPE_BINDING);
-      if (binding != null) {
-        return binding;
-      }
-    }
-    // get standard binding, may be "null"
-    return type.resolveBinding();
-  }
-
-  /**
-   * @param type
-   *          the not <code>null</code> {@link TypeDeclaration}
-   *
-   * @return not <code>null</code> {@link ITypeBinding} for given {@link TypeDeclaration}.
-   */
-  public static ITypeBinding getTypeBinding(TypeDeclaration typeDeclaration) {
-    return getTypeBinding((AbstractTypeDeclaration) typeDeclaration);
-  }
-
-  /**
-   * @param type
-   *          the not <code>null</code> {@link AbstractTypeDeclaration}
-   *
-   * @return not <code>null</code> {@link ITypeBinding} for given {@link AbstractTypeDeclaration}.
-   */
-  public static ITypeBinding getTypeBinding(AbstractTypeDeclaration typeDeclaration) {
-    Assert.isNotNull(typeDeclaration);
-    // try to get binding from property (copy of binding added by DesignerAST)
-    {
-      ITypeBinding binding = (ITypeBinding) typeDeclaration.getProperty(AstParser.KEY_TYPE_BINDING);
-      if (binding != null) {
-        return binding;
-      }
-    }
-    // get standard binding, should not return "null"
-    {
-      ITypeBinding binding = typeDeclaration.resolveBinding();
-      Assert.isTrueException(
-          binding != null,
-          ICoreExceptionConstants.AST_NO_TYPE_BINDING,
-          typeDeclaration);
-      return binding;
-    }
-  }
-
-  /**
-   * @param parameter
-   *          the not <code>null</code> {@link SingleVariableDeclaration}.
-   *
-   * @return not <code>null</code> {@link ITypeBinding} for given {@link SingleVariableDeclaration}.
-   */
-  public static ITypeBinding getTypeBinding(SingleVariableDeclaration parameter) {
-    Assert.isNotNull(parameter);
-    IVariableBinding variableBinding = getVariableBinding(parameter);
-    if (variableBinding == null) {
-      return null;
-    }
-    return variableBinding.getType();
-  }
-
-  /**
-   * @param variable
-   *          the not <code>null</code> {@link VariableDeclaration}.
-   *
-   * @return not <code>null</code> {@link ITypeBinding} for given {@link VariableDeclaration}.
-   */
-  public static ITypeBinding getTypeBinding(VariableDeclaration variable) {
-    Assert.isNotNull(variable);
-    // may be FieldDeclaration
-    if (variable.getParent() instanceof FieldDeclaration) {
-      FieldDeclaration fieldDeclaration = (FieldDeclaration) variable.getParent();
-      return getTypeBinding(fieldDeclaration.getType());
-    }
-    // may be SingleVariableDeclaration
-    if (variable instanceof SingleVariableDeclaration) {
-      return getTypeBinding((SingleVariableDeclaration) variable);
-    }
-    // may be VariableDeclarationStatement
-    if (variable.getParent() instanceof VariableDeclarationStatement) {
-      VariableDeclarationStatement statement = (VariableDeclarationStatement) variable.getParent();
-      return getTypeBinding(statement.getType());
-    }
-    // only known alternative is VariableDeclarationExpression
-    VariableDeclarationExpression statement = (VariableDeclarationExpression) variable.getParent();
-    return getTypeBinding(statement.getType());
-  }
-
-  /**
-   * @param typeBinding
-   *          the {@link ITypeBinding} for generic type instance.
-   * @param typeArgumentIndex
-   *          the type argument index.
-   * @return the {@link ITypeBinding} for argument (or bound) of generic type instance at specified
-   *         index.
-   */
-  public static ITypeBinding getTypeBindingArgument(ITypeBinding typeBinding, int typeArgumentIndex) {
-    ITypeBinding[] typeArgumentBindings = typeBinding.getTypeArguments();
-    if (typeArgumentBindings.length != 0) {
-      ITypeBinding typeArgumentBinding = typeArgumentBindings[typeArgumentIndex];
-      return typeArgumentBinding;
-    } else {
-      ITypeBinding[] typeParameters = typeBinding.getTypeDeclaration().getTypeParameters();
-      return typeParameters[typeArgumentIndex].getTypeBounds()[0];
-    }
-  }
-
-  /**
-   * @param typeBinding
-   *          the {@link ITypeBinding} for generic type instance.
-   * @param baseClassName
-   *          the super class name (parent) whose parameter is to look.
-   * @param typeParameterIndex
-   *          the parameter index.
-   * @return the {@link ITypeBinding} for argument (or bound) of generic type instance at specified
-   *         index.
-   */
-  public static ITypeBinding getTypeBindingArgument(ITypeBinding typeBinding,
-      String baseClassName,
-      int typeParameterIndex) {
-    while (typeBinding != null) {
-      String qualifiedName = AstNodeUtils.getFullyQualifiedName(typeBinding, false);
-      if (baseClassName.equals(qualifiedName)) {
-        return getTypeBindingArgument(typeBinding, typeParameterIndex);
-      }
-      typeBinding = typeBinding.getSuperclass();
-    }
-    throw new IllegalArgumentException(baseClassName + " is not super class for given binding.");
-  }
-
-  /**
-   * @param typeBinding
-   *          the {@link ITypeBinding} of type variable.
-   *
-   * @return the declared type bounds, may be <code>null</code> if not specified.
-   */
-  private static ITypeBinding getTypeVariableBound(ITypeBinding typeBinding) {
-    Assert.isLegal(typeBinding.isTypeVariable());
-    ITypeBinding[] typeBounds = typeBinding.getTypeBounds();
-    if (typeBounds.length != 0) {
-      return typeBounds[0];
-    } else {
-      return null;
-    }
-  }
-
-  public static ITypeBinding getGenericDeclaringClass(ITypeBinding typeBinding) {
-    ITypeBinding declaringClass = typeBinding.getDeclaringClass();
-    if (declaringClass != null) {
-      return declaringClass.getTypeDeclaration();
-    }
-    return declaringClass;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Type binding operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * The constant to return from {@link #getFullyQualifiedName(ITypeBinding, boolean)} when given
-   * {@link ITypeBinding} is <code>null</code>, i.e. no type binding information found, for example
-   * because of compilation errors.
-   */
-  public static String NO_TYPE_BINDING_NAME = "__WBP_NO_TYPE_BINDING";
-
-  /**
-   * Same as {@link #getFullyQualifiedName(ITypeBinding, boolean)}, but analyzes also
-   * {@link AnonymousClassDeclaration}'s.
-   */
-  public static String getFullyQualifiedName(Expression expression, boolean runtime) {
-    ITypeBinding binding = getTypeBinding(expression);
-    String fullyQualifiedName = getFullyQualifiedName(binding, runtime);
-    if (binding != null && binding.isAnonymous()) {
-      fullyQualifiedName =
-          getFullyQualifiedName_appendAnonymous(expression, runtime, fullyQualifiedName);
-    }
-    return fullyQualifiedName;
-  }
-
-  /**
-   * For {@link AnonymousClassDeclaration} we can not get full name using only {@link ITypeBinding},
-   * so we use AST to find necessary <code>$1</code>, <code>$2</code>, etc suffixes.
-   *
-   * @return the fully qualified name with anonymous suffix.
-   */
-  private static String getFullyQualifiedName_appendAnonymous(Expression expression,
-      final boolean runtime,
-      String fullyQualifiedName) {
-    final AnonymousClassDeclaration acd =
-        ((ClassInstanceCreation) expression).getAnonymousClassDeclaration();
-    final String[] suffix = new String[1];
-    expression.getRoot().accept(new ASTVisitor() {
-      private final int[] m_counts = new int[32];
-      private int m_level = 0;
-
-      @Override
-      public boolean visit(AnonymousClassDeclaration node) {
-        m_counts[m_level]++;
-        if (node == acd) {
-          StringBuilder sb = new StringBuilder();
-          String separator = runtime ? "$" : ".";
-          for (int i = 0; i <= m_level; i++) {
-            sb.append(separator);
-            sb.append(m_counts[i]);
-          }
-          suffix[0] = sb.toString();
-        }
-        m_counts[++m_level] = 0;
-        return suffix[0] == null;
-      }
-
-      @Override
-      public void endVisit(AnonymousClassDeclaration node) {
-        m_level--;
-      }
-    });
-    fullyQualifiedName = StringUtils.stripEnd(fullyQualifiedName, "$.");
-    fullyQualifiedName += suffix[0];
-    return fullyQualifiedName;
-  }
-
-  /**
-   * @see #getFullyQualifiedName(ITypeBinding, boolean).
-   */
-  public static String getFullyQualifiedName(Type type, boolean runtime) {
-    ITypeBinding binding = getTypeBinding(type);
-    return getFullyQualifiedName(binding, runtime);
-  }
-
-  /**
-   * @see #getFullyQualifiedName(ITypeBinding, boolean).
-   */
-  public static String getFullyQualifiedName(final TypeDeclaration typeDeclaration,
-      final boolean runtime) {
-    String key = "getFullyQualifiedName_TypeDeclaration";
-    return getValue(typeDeclaration, key, new RunnableObjectEx<String>() {
-      @Override
-      public String runObject() throws Exception {
-        ITypeBinding binding = getTypeBinding(typeDeclaration);
-        return getFullyQualifiedName(binding, runtime);
-      }
-    });
-  }
-
-  /**
-   * @see #getFullyQualifiedName(ITypeBinding, boolean).
-   */
-  public static String getFullyQualifiedName(SingleVariableDeclaration parameter, boolean runtime) {
-    ITypeBinding binding = getTypeBinding(parameter);
-    return getFullyQualifiedName(binding, runtime);
-  }
-
-  /**
-   * Returns the fully qualified name of given {@link ITypeBinding}, or
-   * {@link #NO_TYPE_BINDING_NAME} if <code>null</code> binding given.
-   *
-   * @param binding
-   *          the binding representing the type.
-   * @param runtime
-   *          flag <code>true</code> if we need name for class loading, <code>false</code> if we
-   *          need name for source generation.
-   *
-   * @return the fully qualified name of given {@link ITypeBinding}, or
-   *         {@link #NO_TYPE_BINDING_NAME}.
-   */
-  public static String getFullyQualifiedName(ITypeBinding binding, boolean runtime) {
-    return getFullyQualifiedName(binding, runtime, false);
-  }
-
-  /**
-   * @param binding
-   *          the {@link ITypeBinding} to analyze.
-   * @param runtime
-   *          flag <code>true</code> if we need name for class loading, <code>false</code> if we
-   *          need name for source generation.
-   * @param withGenerics
-   *          flag <code>true</code> if generics type arguments should be appended.
-   *
-   * @return the fully qualified name of given {@link ITypeBinding}, or
-   *         {@link #NO_TYPE_BINDING_NAME}.
-   */
-  public static String getFullyQualifiedName(ITypeBinding binding,
-      boolean runtime,
-      boolean withGenerics) {
-    // check if no binding
-    if (binding == null) {
-      return NO_TYPE_BINDING_NAME;
-    }
-    // check for primitive type
-    if (binding.isPrimitive()) {
-      return binding.getName();
-    }
-    // array
-    if (binding.isArray()) {
-      StringBuilder sb = new StringBuilder();
-      // append element type qualified name
-      ITypeBinding elementType = binding.getElementType();
-      String elementTypeQualifiedName = getFullyQualifiedName(elementType, runtime);
-      sb.append(elementTypeQualifiedName);
-      // append dimensions
-      for (int i = 0; i < binding.getDimensions(); i++) {
-        sb.append("[]");
-      }
-      // done
-      return sb.toString();
-    }
-    // object
-    {
-      String scope;
-      ITypeBinding declaringType = binding.getDeclaringClass();
-      if (declaringType == null) {
-        IPackageBinding packageBinding = binding.getPackage();
-        if (packageBinding == null || packageBinding.isUnnamed()) {
-          scope = "";
-        } else {
-          scope = packageBinding.getName() + ".";
-        }
-      } else if (binding.isTypeVariable()) {
-        return binding.getName();
-      } else {
-        // use '$', because we use this class name for loading class
-        scope = getFullyQualifiedName(declaringType, runtime);
-        if (runtime) {
-          scope += "$";
-        } else {
-          scope += ".";
-        }
-      }
-      // prepare "simple" name, without scope
-      String jdtName = binding.getName();
-      String name = StringUtils.substringBefore(jdtName, "<");
-      if (withGenerics) {
-        ITypeBinding[] typeArguments = binding.getTypeArguments();
-        if (typeArguments.length != 0) {
-          StringBuilder sb = new StringBuilder(name);
-          sb.append("<");
-          for (ITypeBinding typeArgument : typeArguments) {
-            if (sb.charAt(sb.length() - 1) != '<') {
-              sb.append(",");
-            }
-            String typeArgumentName = getFullyQualifiedName(typeArgument, runtime, withGenerics);
-            sb.append(typeArgumentName);
-          }
-          sb.append(">");
-          name = sb.toString();
-        }
-      }
-      // qualified name is scope plus "simple" name
-      return scope + name;
-    }
-  }
-
-  /**
-   * Checks if given {@link Expression} type is extends/implements given class/interface.
-   */
-  public static boolean isSuccessorOf(Expression expression, Class<?> clazz) {
-    return isSuccessorOf(getTypeBinding(expression), clazz);
-  }
-
-  /**
-   * Checks if given {@link Expression} type is extends/implements given class/interface.
-   */
-  public static boolean isSuccessorOf(Expression expression, ITypeBinding requiredBinding) {
-    return isSuccessorOf(getTypeBinding(expression), requiredBinding);
-  }
-
-  /**
-   * Checks if given {@link Expression} type is extends/implements given class/interface.
-   */
-  public static boolean isSuccessorOf(Expression expression, String className) {
-    return isSuccessorOf(getTypeBinding(expression), className);
-  }
-
-  /**
-   * Checks if given {@link SingleVariableDeclaration} type is extends/implements given
-   * class/interface.
-   */
-  public static boolean isSuccessorOf(SingleVariableDeclaration parameter, String className) {
-    return isSuccessorOf(getTypeBinding(parameter), className);
-  }
-
-  /**
-   * Checks if given {@link Type} type is extends/implements given class/interface.
-   */
-  public static boolean isSuccessorOf(Type type, String className) {
-    return isSuccessorOf(getTypeBinding(type), className);
-  }
-
-  /**
-   * Checks if given {@link TypeDeclaration} is extends/implements given class/interface.
-   */
-  public static boolean isSuccessorOf(TypeDeclaration type, String className) {
-    return isSuccessorOf(getTypeBinding(type), className);
-  }
-
-  /**
-   * Checks if given {@link AnonymousClassDeclaration} is extends/implements given class/interface.
-   */
-  public static boolean isSuccessorOf(AnonymousClassDeclaration declaration, String className) {
-    return isSuccessorOf(getTypeBinding(declaration), className);
-  }
-
-  /**
-   * Checks if given {@link ITypeBinding} is extends/implements given class/interface.
-   */
-  public static boolean isSuccessorOf(ITypeBinding binding, Class<?> clazz) {
-    Assert.isNotNull(clazz);
-    return isSuccessorOf(binding, clazz.getName());
-  }
-
-  /**
-   * Checks if given {@link ITypeBinding} is extends/implements given class/interface.
-   */
-  public static boolean isSuccessorOf(ITypeBinding binding, ITypeBinding requiredBinding) {
-    Assert.isNotNull(requiredBinding);
-    return isSuccessorOf(binding, getFullyQualifiedName(requiredBinding, false));
-  }
-
-  private static final Map<ITypeBinding, Map<String, Boolean>> m_isSuccessorOf =
-      new WeakHashMap<ITypeBinding, Map<String, Boolean>>();
-
-  /**
-   * Checks if given {@link ITypeBinding} is extends class or implements interface with given name.
-   *
-   * @param className
-   *          the class name in source format (i.e. with '.' as packages separator)
-   */
-  public static boolean isSuccessorOf(ITypeBinding binding, String className) {
-    Assert.isNotNull(className);
-    // check for Object
-    if (binding == null) {
-      return "java.lang.Object".equals(className);
-    }
-    // use cache
-    Map<String, Boolean> classNameResults = m_isSuccessorOf.get(binding);
-    if (classNameResults == null) {
-      classNameResults = Maps.newTreeMap();
-      m_isSuccessorOf.put(binding, classNameResults);
-    }
-    Boolean result = classNameResults.get(className);
-    if (result == null) {
-      result = isSuccessorOf0(binding, className);
-      classNameResults.put(className, result);
-    }
-    return result;
-  }
-
-  /**
-   * Implementation for {@link #isSuccessorOf(Expression, String)}.
-   */
-  private static boolean isSuccessorOf0(ITypeBinding binding, String className) {
-    // check this binding
-    if (getFullyQualifiedName(binding, false).equals(className)) {
-      return true;
-    }
-    // check for array and Object
-    if (binding.isArray() && "java.lang.Object".equals(className)) {
-      return true;
-    }
-    // check superclass
-    {
-      boolean result = isSuccessorOf(binding.getSuperclass(), className);
-      if (result) {
-        return true;
-      }
-    }
-    // check interfaces
-    for (ITypeBinding interfaceBinding : binding.getInterfaces()) {
-      if (isSuccessorOf(interfaceBinding, className)) {
-        return true;
-      }
-    }
-    // no
-    return false;
-  }
-
-  /**
-   * Checks if given {@link ITypeBinding} is extends one of the given classes or implements
-   * interface with given name.
-   *
-   * @param classNames
-   *          the array of class names in source format (i.e. with '.' as packages separator).
-   */
-  public static boolean isSuccessorOf(ITypeBinding binding, String... classNames) {
-    for (String className : classNames) {
-      if (isSuccessorOf(binding, className)) {
-        return true;
-      }
-    }
-    return false;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // TypeDeclaration utilities
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @param typeName
-   *          the simple type name.
-   *
-   * @return the top-level {@link TypeDeclaration} with given name from given
-   *         {@link CompilationUnit}.
-   */
-  public static TypeDeclaration getTypeByName(CompilationUnit compilationUnit, String typeName) {
-    Assert.isNotNull(compilationUnit);
-    Assert.isNotNull(typeName);
-    // check each top-level type
-    for (TypeDeclaration typeDeclaration : DomGenerics.types(compilationUnit)) {
-      ITypeBinding typeBinding = typeDeclaration.resolveBinding();
-      if (typeBinding != null && typeBinding.getName().equals(typeName)) {
-        return typeDeclaration;
-      }
-    }
-    // not found
-    return null;
-  }
-
-  /**
-   * @param typeName
-   *          the fully qualified type name.
-   *
-   * @return the {@link TypeDeclaration} with given fully qualified name, or <code>null</code> if
-   *         not found.
-   */
-  public static TypeDeclaration getTypeByQualifiedName(CompilationUnit compilationUnit,
-      final String typeName) {
-    Assert.isNotNull(compilationUnit);
-    Assert.isNotNull(typeName);
-    final TypeDeclaration[] typeDeclaration = new TypeDeclaration[1];
-    compilationUnit.accept(new ASTVisitor() {
-      @Override
-      public void postVisit(ASTNode node) {
-        if (typeDeclaration[0] == null) {
-          if (node.getLocationInParent() == ClassInstanceCreation.TYPE_PROPERTY
-              && ((ClassInstanceCreation) node.getParent()).getAnonymousClassDeclaration() != null) {
-            ClassInstanceCreation creation = (ClassInstanceCreation) node.getParent();
-            String _typeName = getFullyQualifiedName(creation, true);
-            if (_typeName.equals(typeName)) {
-              AnonymousClassDeclaration anonymousClassDeclaration =
-                  creation.getAnonymousClassDeclaration();
-              typeDeclaration[0] = AnonymousTypeDeclaration.create(anonymousClassDeclaration);
-            }
-          }
-        }
-      }
-
-      @Override
-      public boolean visit(SimpleName node) {
-        if (typeDeclaration[0] == null) {
-          if (node.getLocationInParent() == TypeDeclaration.NAME_PROPERTY) {
-            String _typeName = getFullyQualifiedName(node, true);
-            if (_typeName.equals(typeName)) {
-              typeDeclaration[0] = (TypeDeclaration) node.getParent();
-            }
-          }
-        }
-        return typeDeclaration[0] == null;
-      }
-    });
-    // OK, return found TypeDeclaration
-    return typeDeclaration[0];
-  }
-
-  /**
-   * @return the inner {@link TypeDeclaration} for given {@link ClassInstanceCreation} in same
-   *         {@link CompilationUnit}, or <code>null</code> if there is no such
-   *         {@link TypeDeclaration}.
-   */
-  public static TypeDeclaration getTypeDeclaration(ClassInstanceCreation creation) {
-    final String typeName = getFullyQualifiedName(getTypeBinding(creation), false);
-    ListGatherer<TypeDeclaration> gatherer = new ListGatherer<TypeDeclaration>() {
-      @Override
-      public boolean visit(TypeDeclaration node) {
-        if (getFullyQualifiedName(node, false).equals(typeName)) {
-          addResult(node);
-          return false;
-        }
-        return true;
-      }
-    };
-    // visit all types in compilation unit
-    CompilationUnit compilationUnit = (CompilationUnit) creation.getRoot();
-    compilationUnit.accept(gatherer);
-    return gatherer.getUniqueResult();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // MethodDeclaration utilities
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * The constant to return from {@link #getMethodSignature(IMethodBinding)} when given
-   * {@link IMethodBinding} is <code>null</code>, i.e. no method binding information found, for
-   * example because of compilation errors.
-   */
-  public static String NO_METHOD_BINDING_SIGNATURE = "__WBP_NO_METHOD_BINDING";
-
-  /**
-   * @return signature for given {@link MethodDeclaration}. This signature is not same signature as
-   *         in JVM or JDT, just some string that unique identifies method in its
-   *         {@link TypeDeclaration}.
-   */
-  public static String getMethodSignature(MethodInvocation methodInvocation) {
-    Assert.isNotNull(methodInvocation);
-    IMethodBinding methodBinding = getMethodBinding(methodInvocation);
-    return getMethodSignature(methodBinding);
-  }
-
-  /**
-   * @return signature for given {@link MethodDeclaration}. This signature is not same signature as
-   *         in JVM or JDT, just some string that unique identifies method in its
-   *         {@link TypeDeclaration}.
-   */
-  public static String getMethodSignature(MethodDeclaration methodDeclaration) {
-    Assert.isNotNull(methodDeclaration);
-    IMethodBinding methodBinding = getMethodBinding(methodDeclaration);
-    return getMethodSignature(methodBinding);
-  }
-
-  /**
-   * @return signature for given {@link IMethodBinding}. This signature is not same signature as in
-   *         JVM or JDT, just some string that unique identifies method in its
-   *         {@link TypeDeclaration}.
-   */
-  public static String getMethodSignature(IMethodBinding methodBinding) {
-    return getMethodSignature(methodBinding, false);
-  }
-
-  /**
-   * @return signature for given {@link IMethodBinding} with generic type names.
-   */
-  public static String getMethodGenericSignature(IMethodBinding methodBinding) {
-    return getMethodSignature(methodBinding.getMethodDeclaration(), false);
-  }
-
-  /**
-   * @return signature for given {@link IMethodBinding} with base-declaration types.
-   */
-  public static String getMethodDeclarationSignature(IMethodBinding methodBinding) {
-    return getMethodSignature(methodBinding.getMethodDeclaration(), true);
-  }
-
-  /**
-   *
-   * @param methodBinding
-   *          the method binding.
-   * @param declaration
-   *          set <code>true</code> if need type variables replaced with a base types.
-   *
-   * @return signature for given {@link IMethodBinding}.
-   */
-  private static String getMethodSignature(IMethodBinding methodBinding, boolean declaration) {
-    // check if no binding
-    if (methodBinding == null) {
-      return NO_METHOD_BINDING_SIGNATURE;
-    }
-    // signature
-    StringBuilder buffer = new StringBuilder();
-    // name
-    if (methodBinding.isConstructor()) {
-      buffer.append("<init>");
-    } else {
-      buffer.append(methodBinding.getName());
-    }
-    // parameters
-    buffer.append('(');
-    {
-      ITypeBinding[] parameterTypes = methodBinding.getParameterTypes();
-      for (int i = 0; i < parameterTypes.length; i++) {
-        ITypeBinding parameterType = parameterTypes[i];
-        if (i != 0) {
-          buffer.append(',');
-        }
-
-        // We have to unwrap the element type of arrays. Otherwise isTypeVariable()
-        // always returns false.
-        ITypeBinding elementType = parameterType.isArray() ? parameterType.getElementType() : parameterType;
-
-        if (declaration && elementType.isTypeVariable()) {
-          ITypeBinding variableBinding = getTypeVariableBound(elementType);
-          if (variableBinding == null) {
-            buffer.append("java.lang.Object");
-          } else {
-            buffer.append(getFullyQualifiedName(variableBinding, false));
-          }
-          if (parameterType.isArray()) {
-            buffer.append("[]");
-          }
-        } else {
-          buffer.append(getFullyQualifiedName(parameterType, false));
-        }
-      }
-    }
-    buffer.append(')');
-    // return result
-    return buffer.toString();
-  }
-
-  /**
-   * @return signatures for given {@link MethodDeclaration}'s. These signature is not same signature
-   *         as in JVM or JDT, just some string that unique identifies method in its
-   *         {@link TypeDeclaration}.
-   */
-  public static List<String> getMethodSignatures(List<MethodDeclaration> methodDeclarations) {
-    List<String> signatures = Lists.newArrayList();
-    for (MethodDeclaration methodDeclaration : methodDeclarations) {
-      signatures.add(getMethodSignature(methodDeclaration));
-    }
-    return signatures;
-  }
-
-  /**
-   * @param signature
-   *          the signature of method in same format as
-   *          {@link #getMethodSignature(MethodDeclaration)}.
-   *
-   * @return the {@link MethodDeclaration} for given signature or <code>null</code> if not method
-   *         found.
-   */
-  public static MethodDeclaration getMethodBySignature(TypeDeclaration typeDeclaration,
-      String signature) {
-    Assert.isNotNull(typeDeclaration);
-    return getMethodBySignature(DomGenerics.bodyDeclarations(typeDeclaration), signature);
-  }
-
-  /**
-   * @param bodyDeclarations
-   *          the {@link List} of {@link BodyDeclaration} to check
-   * @param signature
-   *          the signature of method in same format as
-   *          {@link #getMethodSignature(MethodDeclaration)}.
-   *
-   * @return the {@link MethodDeclaration} for given signature or <code>null</code> if no method
-   *         found.
-   */
-  public static MethodDeclaration getMethodBySignature(List<BodyDeclaration> bodyDeclarations,
-      String signature) {
-    Assert.isNotNull(bodyDeclarations);
-    Assert.isNotNull(signature);
-    // check each declaration
-    for (BodyDeclaration bodyDeclaration : bodyDeclarations) {
-      if (bodyDeclaration instanceof MethodDeclaration) {
-        MethodDeclaration methodDeclaration = (MethodDeclaration) bodyDeclaration;
-        if (getMethodSignature(methodDeclaration).equals(signature)) {
-          return methodDeclaration;
-        }
-      }
-    }
-    // not found
-    return null;
-  }
-
-  /**
-   * Returns that {@link IMethodBinding} of method declared in given {@link ITypeBinding} or any of
-   * its super-classes.
-   *
-   * @param typeBinding
-   *          the {@link ITypeBinding} to search methods in.
-   * @param signature
-   *          the signature of method in same format as
-   *          {@link #getMethodSignature(MethodDeclaration)}.
-   *
-   * @return the {@link IMethodBinding} with given signature, or <code>null</code> if no method
-   *         found.
-   */
-  public static IMethodBinding getMethodBySignature(ITypeBinding typeBinding, String signature) {
-    for (; typeBinding != null; typeBinding = typeBinding.getSuperclass()) {
-      for (IMethodBinding method : typeBinding.getDeclaredMethods()) {
-        if (getMethodSignature(method).equals(signature)) {
-          return method;
-        }
-      }
-    }
-    // not found
-    return null;
-  }
-
-  /**
-   * @return the local {@link MethodDeclaration} (i.e. declared in same {@link TypeDeclaration})
-   *         that is invoked by given {@link MethodInvocation} or <code>null</code> if this method
-   *         is not local.
-   */
-  public static MethodDeclaration getLocalMethodDeclaration(final MethodInvocation invocation) {
-    // quick check if there is local name with such name (just name, not signature)
-    {
-      ASTNode unit = invocation.getRoot();
-      String key = "getLocalMethodDeclaration.allMethods";
-      Set<String> allNames = getValue(unit, key, new RunnableObjectEx<Set<String>>() {
-        @Override
-        public Set<String> runObject() throws Exception {
-          Set<String> names = Sets.newTreeSet();
-          TypeDeclaration typeDeclaration = getEnclosingType(invocation);
-          MethodDeclaration[] methods = typeDeclaration.getMethods();
-          for (MethodDeclaration method : methods) {
-            names.add(method.getName().getIdentifier());
-          }
-          return names;
-        }
-      });
-      if (!allNames.contains(invocation.getName().getIdentifier())) {
-        return null;
-      }
-    }
-    // perform precise search
-    String key = "getLocalMethodDeclaration";
-    return getValue(invocation, key, new RunnableObjectEx<MethodDeclaration>() {
-      @Override
-      public MethodDeclaration runObject() throws Exception {
-        return getLocalMethodDeclaration0(invocation);
-      }
-    });
-  }
-
-  /**
-   * Implementation for {@link #getLocalMethodDeclaration(MethodInvocation)}.
-   */
-  private static MethodDeclaration getLocalMethodDeclaration0(MethodInvocation invocation) {
-    Assert.isNotNull(invocation);
-    TypeDeclaration typeDeclaration = getEnclosingType(invocation);
-    // check for local method
-    while (true) {
-      Expression targetExpression = invocation.getExpression();
-      // check for unqualified or "this." invocation
-      if (targetExpression == null || targetExpression instanceof ThisExpression) {
-        break;
-      }
-      // check for qualified invocation
-      {
-        String enclosedTypeName = getFullyQualifiedName(typeDeclaration, false);
-        String targetTypeName = getFullyQualifiedName(targetExpression, false);
-        if (enclosedTypeName.equals(targetTypeName)) {
-          break;
-        }
-      }
-      // no, not a local method
-      return null;
-    }
-    // OK, local method
-    {
-      // prepare signature, can be "null", if invalid invocation
-      IMethodBinding methodBinding = getMethodBinding(invocation);
-      if (methodBinding == null) {
-        return null;
-      }
-      // get method by signature
-      String methodSignature = getMethodSignature(methodBinding);
-      return getMethodBySignature(typeDeclaration, methodSignature);
-    }
-  }
-
-  /**
-   * @return {@link List} of {@link MethodInvocation}'s of given method.
-   */
-  public static List<MethodInvocation> getMethodInvocations(final MethodDeclaration methodDeclaration) {
-    String key = "getMethodInvocations";
-    return getValue(methodDeclaration, key, new RunnableObjectEx<List<MethodInvocation>>() {
-      @Override
-      public List<MethodInvocation> runObject() throws Exception {
-        return getMethodInvocations0(methodDeclaration);
-      }
-    });
-  }
-
-  /**
-   * Implementation for {@link #getMethodInvocations(MethodDeclaration)}.
-   */
-  private static List<MethodInvocation> getMethodInvocations0(MethodDeclaration methodDeclaration) {
-    final List<MethodInvocation> invocations = Lists.newArrayList();
-    // prepare required values
-    IMethodBinding requiredBinding = getMethodBinding(methodDeclaration);
-    if (requiredBinding == null) {
-      return invocations;
-    }
-    final String requiredType = getFullyQualifiedName(requiredBinding.getDeclaringClass(), false);
-    final String requiredSignature = getMethodSignature(methodDeclaration);
-    // visit type and check each method invocation
-    TypeDeclaration typeDeclaration = getEnclosingType(methodDeclaration);
-    typeDeclaration.accept(new ASTVisitor() {
-      @Override
-      public void endVisit(MethodInvocation node) {
-        IMethodBinding binding = getMethodBinding(node);
-        if (binding != null) {
-          String signature = getMethodSignature(binding);
-          String type = getFullyQualifiedName(binding.getDeclaringClass(), false);
-          if (signature.equals(requiredSignature) && type.equals(requiredType)) {
-            invocations.add(node);
-          }
-        }
-      }
-    });
-    //
-    return invocations;
-  }
-
-  /**
-   * @param signature
-   *          the signature of method in same format as
-   *          {@link #getMethodSignature(MethodDeclaration)}.
-   *
-   * @return the {@link MethodDeclaration} for given signature or <code>null</code> if not method
-   *         found.
-   */
-  public static MethodDeclaration getMethodByName(TypeDeclaration typeDeclaration, String name) {
-    Assert.isNotNull(typeDeclaration);
-    Assert.isNotNull(name);
-    List<BodyDeclaration> bodyDeclarations = DomGenerics.bodyDeclarations(typeDeclaration);
-    for (BodyDeclaration bodyDeclaration : bodyDeclarations) {
-      if (bodyDeclaration instanceof MethodDeclaration) {
-        MethodDeclaration methodDeclaration = (MethodDeclaration) bodyDeclaration;
-        if (methodDeclaration.getName().getIdentifier().equals(name)) {
-          return methodDeclaration;
-        }
-      }
-    }
-    // not found
-    return null;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ConstructorInvocation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return signature for given {@link ConstructorInvocation}. This signature is not same signature
-   *         as in JVM or JDT, just some string that unique identifies method in its
-   *         {@link TypeDeclaration}.
-   */
-  public static String getSignature(ConstructorInvocation invocation) {
-    Assert.isNotNull(invocation);
-    IMethodBinding methodBinding = getBinding(invocation);
-    return getMethodSignature(methodBinding);
-  }
-
-  /**
-   * @param invocation
-   *          the not <code>null</code> {@link ConstructorInvocation}
-   * @return not <code>null</code> {@link IMethodBinding} for given {@link ConstructorInvocation}.
-   */
-  public static IMethodBinding getBinding(ConstructorInvocation invocation) {
-    Assert.isNotNull(invocation);
-    return invocation.resolveConstructorBinding();
-  }
-
-  /**
-   * @return the {@link MethodDeclaration} that is invoked by given {@link ConstructorInvocation}.
-   */
-  public static MethodDeclaration getConstructor(ConstructorInvocation invocation) {
-    TypeDeclaration typeDeclaration = getEnclosingType(invocation);
-    String signature = getSignature(invocation);
-    return getMethodBySignature(typeDeclaration, signature);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // SuperConstructorInvocation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return signature for given {@link SuperConstructorInvocation}. This signature is not same
-   *         signature as in JVM or JDT, just some string that unique identifies method in its
-   *         {@link TypeDeclaration}.
-   */
-  public static String getSuperSignature(SuperConstructorInvocation invocation) {
-    Assert.isNotNull(invocation);
-    IMethodBinding methodBinding = getSuperBinding(invocation);
-    return getMethodSignature(methodBinding);
-  }
-
-  /**
-   * @param invocation
-   *          the not <code>null</code> {@link SuperConstructorInvocation}
-   * @return not <code>null</code> {@link IMethodBinding} for given
-   *         {@link SuperConstructorInvocation}.
-   */
-  public static IMethodBinding getSuperBinding(SuperConstructorInvocation invocation) {
-    Assert.isNotNull(invocation);
-    // try to get binding from property (copy of binding added by DesignerAST)
-    {
-      IMethodBinding binding =
-          (IMethodBinding) invocation.getProperty(AstParser.KEY_METHOD_BINDING);
-      if (binding != null) {
-        return binding;
-      }
-    }
-    // get standard binding, should not return "null"
-    return invocation.resolveConstructorBinding();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ClassInstanceCreation utilities
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return signature for given {@link ClassInstanceCreation}. This signature is not same signature
-   *         as in JVM or JDT, just some string that unique identifies method in its
-   *         {@link TypeDeclaration}.
-   */
-  public static String getCreationSignature(ClassInstanceCreation creation) {
-    Assert.isNotNull(creation);
-    IMethodBinding methodBinding = getCreationBinding(creation);
-    return getMethodSignature(methodBinding);
-  }
-
-  /**
-   * @param creation
-   *          the not <code>null</code> {@link ClassInstanceCreation}
-   * @return not <code>null</code> {@link IMethodBinding} for given {@link ClassInstanceCreation}.
-   */
-  public static IMethodBinding getCreationBinding(ClassInstanceCreation creation) {
-    Assert.isNotNull(creation);
-    // try to get binding from property (copy of binding added by DesignerAST)
-    {
-      IMethodBinding binding = (IMethodBinding) creation.getProperty(AstParser.KEY_METHOD_BINDING);
-      if (binding != null) {
-        return binding;
-      }
-    }
-    // get standard binding, should not return "null"
-    return creation.resolveConstructorBinding();
-  }
-
-  /**
-   * @return the local constructor {@link MethodDeclaration} (i.e. declared in same
-   *         {@link TypeDeclaration}) that is invoked by given {@link ClassInstanceCreation} or
-   *         <code>null</code> if this method is not local.
-   */
-  public static MethodDeclaration getLocalConstructorDeclaration(final ClassInstanceCreation creation) {
-    String key = "getLocalConstructorDeclaration";
-    return getValue(creation, key, new RunnableObjectEx<MethodDeclaration>() {
-      @Override
-      public MethodDeclaration runObject() throws Exception {
-        return getLocalConstructorDeclaration0(creation);
-      }
-    });
-  }
-
-  /**
-   * Implementation for {@link #getLocalConstructorDeclaration(ClassInstanceCreation)}.
-   */
-  private static MethodDeclaration getLocalConstructorDeclaration0(ClassInstanceCreation creation) {
-    Assert.isNotNull(creation);
-    TypeDeclaration typeDeclaration = getEnclosingType(creation);
-    // check for local
-    {
-      String enclosedTypeName = getFullyQualifiedName(typeDeclaration, false);
-      String createdTypeName = getFullyQualifiedName(creation, false);
-      if (!enclosedTypeName.equals(createdTypeName)) {
-        return null;
-      }
-    }
-    //
-    IMethodBinding constructorBinding = getCreationBinding(creation);
-    String constructorSignature = getMethodSignature(constructorBinding);
-    return getMethodBySignature(typeDeclaration, constructorSignature);
-  }
-
-  /**
-   * @return {@link List} of {@link MethodInvocation}'s of given method.
-   */
-  public static List<ConstructorInvocation> getConstructorInvocations(final MethodDeclaration methodDeclaration) {
-    String key = "getConstructorInvocations";
-    return getValue(methodDeclaration, key, new RunnableObjectEx<List<ConstructorInvocation>>() {
-      @Override
-      public List<ConstructorInvocation> runObject() throws Exception {
-        return getConstructorInvocations0(methodDeclaration);
-      }
-    });
-  }
-
-  /**
-   * Implementation for {@link #getConstructorInvocation2(MethodDeclaration)}.
-   */
-  private static List<ConstructorInvocation> getConstructorInvocations0(MethodDeclaration methodDeclaration) {
-    final List<ConstructorInvocation> invocations = Lists.newArrayList();
-    // prepare required values
-    IMethodBinding requiredBinding = getMethodBinding(methodDeclaration);
-    if (requiredBinding == null) {
-      return invocations;
-    }
-    final String requiredSignature = getMethodSignature(methodDeclaration);
-    // visit type and check each method invocation
-    TypeDeclaration typeDeclaration = getEnclosingType(methodDeclaration);
-    typeDeclaration.accept(new ASTVisitor() {
-      @Override
-      public void endVisit(ConstructorInvocation node) {
-        IMethodBinding binding = getBinding(node);
-        if (binding != null) {
-          String signature = getMethodSignature(binding);
-          if (signature.equals(requiredSignature)) {
-            invocations.add(node);
-          }
-        }
-      }
-    });
-    //
-    return invocations;
-  }
-
-  /**
-   * @return {@link List} of {@link ClassInstanceCreation}'s of given constructor in this
-   *         {@link CompilationUnit}.
-   */
-  public static List<ClassInstanceCreation> getClassInstanceCreations(MethodDeclaration constructor) {
-    final List<ClassInstanceCreation> creations = Lists.newArrayList();
-    final IMethodBinding constructorBinding = getMethodBinding(constructor);
-    constructor.getRoot().accept(new ASTVisitor() {
-      @Override
-      public void endVisit(ClassInstanceCreation node) {
-        IMethodBinding creationBinding = getCreationBinding(node);
-        if (creationBinding == constructorBinding) {
-          creations.add(node);
-        }
-      }
-    });
-    return creations;
-  }
-
-  /**
-   * @return constructor {@link MethodDeclaration}'s of given {@link TypeDeclaration}.
-   */
-  public static List<MethodDeclaration> getConstructors(TypeDeclaration typeDeclaration) {
-    List<MethodDeclaration> constructors = Lists.newArrayList();
-    for (MethodDeclaration method : typeDeclaration.getMethods()) {
-      if (method.isConstructor()) {
-        constructors.add(method);
-      }
-    }
-    return constructors;
-  }
-
-  /**
-   * @return {@link List} of {@link ClassInstanceCreation}'s of given {@link TypeDeclaration} in
-   *         this {@link CompilationUnit}.
-   */
-  public static List<ClassInstanceCreation> getClassInstanceCreations(TypeDeclaration type) {
-    final List<ClassInstanceCreation> creations = Lists.newArrayList();
-    final String typeName = getFullyQualifiedName(type, false);
-    type.getRoot().accept(new ASTVisitor() {
-      @Override
-      public void endVisit(ClassInstanceCreation node) {
-        String nodeName = getFullyQualifiedName(node, false);
-        if (typeName.equals(nodeName)) {
-          creations.add(node);
-        }
-      }
-    });
-    return creations;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // JavaDoc
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if {@link Javadoc} of given {@link BodyDeclaration} has
-   *         {@link TagElement} with given name.
-   */
-  public static boolean hasJavaDocTag(BodyDeclaration declaration, String tagName) {
-    return getJavaDocTag(declaration, tagName) != null;
-  }
-
-  /**
-   * @return the JavaDoc {@link TagElement} with given name, may be <code>null</code>.
-   */
-  public static TagElement getJavaDocTag(BodyDeclaration declaration, String tagName) {
-    Javadoc javadoc = declaration.getJavadoc();
-    if (javadoc != null) {
-      for (TagElement tagElement : DomGenerics.tags(javadoc)) {
-        if (tagName.equals(tagElement.getTagName())) {
-          return tagElement;
-        }
-      }
-    }
-    return null;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Matching
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @param node
-   *          the {@link ASTNode} to check.
-   * @param signature
-   *          the signature of {@link MethodInvocation}.
-   *
-   * @return <code>true</code> if given {@link ASTNode} is {@link MethodInvocation} with given
-   *         signature. Note, no check for type, so use only when really required.
-   */
-  public static boolean isMethodInvocation(ASTNode node, String signature) {
-    if (node instanceof MethodInvocation) {
-      MethodInvocation invocation = (MethodInvocation) node;
-      return getMethodSignature(invocation).equals(signature);
-    }
-    return false;
-  }
-
-  /**
-   * @param node
-   *          the {@link ASTNode} to check.
-   * @param expressionType
-   *          the type of {@link MethodInvocation} {@link Expression}.
-   * @param signature
-   *          the signature of {@link MethodInvocation}.
-   *
-   * @return <code>true</code> if given {@link ASTNode} is {@link MethodInvocation} of given
-   *         {@link Expression} type and signature.
-   */
-  public static boolean isMethodInvocation(ASTNode node, String expressionType, String signature) {
-    if (node instanceof MethodInvocation) {
-      MethodInvocation invocation = (MethodInvocation) node;
-      if (getMethodSignature(invocation).equals(signature)) {
-        Expression expression = invocation.getExpression();
-        if (expression == null) {
-          return expressionType == null;
-        }
-        return isSuccessorOf(expression, expressionType);
-      }
-    }
-    if (node instanceof SuperMethodInvocation) {
-      SuperMethodInvocation invocation = (SuperMethodInvocation) node;
-      IMethodBinding methodBinding = getMethodBinding(invocation);
-      return isSuccessorOf(methodBinding.getDeclaringClass(), expressionType)
-          && getMethodSignature(methodBinding).equals(signature);
-    }
-    return false;
-  }
-
-  /**
-   * @param node
-   *          the {@link ASTNode} to check.
-   * @param expressionType
-   *          the type of {@link MethodInvocation} {@link Expression}.
-   * @param signatures
-   *          the array with signatures of {@link MethodInvocation}.
-   *
-   * @return <code>true</code> if given {@link ASTNode} is {@link MethodInvocation} of given
-   *         {@link Expression} type and and one of the signatures.
-   */
-  public static boolean isMethodInvocation(ASTNode node, String expressionType, String[] signatures) {
-    if (node instanceof MethodInvocation) {
-      MethodInvocation invocation = (MethodInvocation) node;
-      // check Expression
-      {
-        Expression expression = invocation.getExpression();
-        if (expression == null) {
-          if (expressionType != null) {
-            return false;
-          }
-        } else if (!isSuccessorOf(expression, expressionType)) {
-          return false;
-        }
-      }
-      // check signature
-      {
-        String signature = getMethodSignature(invocation);
-        for (String testSignature : signatures) {
-          if (signature.equals(testSignature)) {
-            return true;
-          }
-        }
-      }
-    }
-    return false;
-  }
-
-  /**
-   * @param node
-   *          the {@link ASTNode} to check.
-   * @param typeName
-   *          the name of type instantiated by {@link ClassInstanceCreation}.
-   * @param signature
-   *          the signature of constructor, including "&lt;init&gt;".
-   *
-   * @return <code>true</code> if given {@link ASTNode} is the {@link ClassInstanceCreation} of
-   *         given type using given constructor.
-   */
-  public static boolean isCreation(ASTNode node, String typeName, String signature) {
-    if (node instanceof ClassInstanceCreation) {
-      ClassInstanceCreation creation = (ClassInstanceCreation) node;
-      if (getFullyQualifiedName(creation, false).equals(typeName)) {
-        return getCreationSignature(creation).equals(signature);
-      }
-    }
-    return false;
-  }
-
-  /**
-   * @param node
-   *          the {@link ASTNode} to check.
-   * @param typeName
-   *          the name of type instantiated by {@link ClassInstanceCreation}.
-   * @param signature
-   *          the array of constructor signatures, including "&lt;init&gt;".
-   *
-   * @return <code>true</code> if given {@link ASTNode} is the {@link ClassInstanceCreation} of
-   *         given type using one of the given constructor.
-   */
-  public static boolean isCreation(ASTNode node, String typeName, String[] signatures) {
-    if (node instanceof ClassInstanceCreation) {
-      for (String signature : signatures) {
-        if (isCreation(node, typeName, signature)) {
-          return true;
-        }
-      }
-    }
-    return false;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Modifiers
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final int VISIBILITY_MASK = Modifier.PUBLIC
-      | Modifier.PROTECTED
-      | Modifier.PRIVATE;
-
-  /**
-   * Returns <code>true</code> if given modifiers have one of the required visibility mask. For
-   * example, if <code>modifiers</code> is <code>protected static final</code>, and and
-   * <code>visibilityMask</code> is <code>public | protected</code>, then <code>true</code>
-   * returned.
-   *
-   * @return <code>true</code> if given modifiers have one of the required visibility mask.
-   */
-  public static boolean hasVisibility(int modifiers, int visibilityMask) {
-    return (modifiers & VISIBILITY_MASK & visibilityMask) != 0;
-  }
-
-  /**
-   * @return <code>true</code> if given {@link BodyDeclaration} has "static" modifier.
-   */
-  public static boolean isStatic(BodyDeclaration bodyDeclaration) {
-    int modifiers = bodyDeclaration.getModifiers();
-    return Modifier.isStatic(modifiers);
-  }
-
-  /**
-   * @return <code>true</code> if given {@link IMethodBinding} has "static" modifier.
-   */
-  public static boolean isStatic(IMethodBinding methodBinding) {
-    int modifiers = methodBinding.getModifiers();
-    return Modifier.isStatic(modifiers);
-  }
-
-  /**
-   * @return <code>true</code> if given {@link ITypeBinding} has "static" modifier.
-   */
-  public static boolean isStatic(ITypeBinding typeBinding) {
-    int modifiers = typeBinding.getModifiers();
-    return Modifier.isStatic(modifiers);
-  }
-
-  /**
-   * @return <code>true</code> if given {@link IMethodBinding} has "abstract" modifier.
-   */
-  public static boolean isAbstract(IMethodBinding methodBinding) {
-    int modifiers = methodBinding.getModifiers();
-    return Modifier.isAbstract(modifiers);
-  }
-
-  /**
-   * @return <code>true</code> if given {@link MethodDeclaration} has "abstract" modifier.
-   */
-  public static boolean isAbstract(MethodDeclaration method) {
-    IMethodBinding methodBinding = getMethodBinding(method);
-    return isAbstract(methodBinding);
-  }
-
-  /**
-   * @return <code>true</code> if given {@link ITypeBinding} has "abstract" modifier.
-   */
-  public static boolean isAbstract(ITypeBinding typeBinding) {
-    int modifiers = typeBinding.getModifiers();
-    return Modifier.isAbstract(modifiers);
-  }
-
-  /**
-   * @return <code>true</code> if given {@link TypeDeclaration} has "abstract" modifier.
-   */
-  public static boolean isAbstract(TypeDeclaration type) {
-    ITypeBinding typeBinding = getTypeBinding(type);
-    return isAbstract(typeBinding);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Searching in bindings
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @param typeBinding
-   *          the {@link ITypeBinding} to get methods from.
-   * @param visibilityMask
-   *          the mask of JDT {@link Modifier} flags, to limit methods visibility. If
-   *          {@link Modifier#PRIVATE} is included, it will be used only for given
-   *          {@link ITypeBinding}, but not for its super classes.
-   *
-   * @return the {@link IMethodBinding} for all methods in given {@link ITypeBinding} and its super
-   *         classes.
-   */
-  public static List<IMethodBinding> getMethodBindings(ITypeBinding typeBinding, int visibilityMask) {
-    List<IMethodBinding> methods = Lists.newArrayList();
-    addMethodBindings(methods, typeBinding, visibilityMask);
-    return methods;
-  }
-
-  /**
-   * @param typeBinding
-   *          the {@link ITypeBinding} to get fields from.
-   * @param visibilityMask
-   *          the mask of JDT {@link Modifier} flags, to limit fields visibility. If
-   *          {@link Modifier#PRIVATE} is included, it will be used only for given
-   *          {@link ITypeBinding}, but not for its super classes.
-   *
-   * @return the {@link IVariableBinding} for all fields in given {@link ITypeBinding} and its super
-   *         classes.
-   */
-  public static List<IVariableBinding> getFieldBindings(ITypeBinding typeBinding, int visibilityMask) {
-    List<IVariableBinding> fields = Lists.newArrayList();
-    addFieldBindings(fields, typeBinding, visibilityMask);
-    return fields;
-  }
-
-  /**
-   * @param methods
-   *          the {@link IMethodBinding}'s container to add methods.
-   * @param typeBinding
-   *          the {@link ITypeBinding} to get methods from.
-   * @param visibilityMask
-   *          the mask of JDT {@link Modifier} flags, to limit methods visibility. If
-   *          {@link Modifier#PRIVATE} is included, it will be used only for given
-   *          {@link ITypeBinding}, but not for its super classes.
-   *
-   * @return the {@link IMethodBinding} for all methods in given {@link ITypeBinding} and its super
-   *         classes.
-   */
-  private static void addMethodBindings(List<IMethodBinding> methods,
-      ITypeBinding typeBinding,
-      int visibilityMask) {
-    if (typeBinding != null) {
-      for (IMethodBinding methodBinding : typeBinding.getDeclaredMethods()) {
-        if (hasVisibility(methodBinding.getModifiers(), visibilityMask)) {
-          methods.add(methodBinding);
-        }
-      }
-      // process super Class
-      visibilityMask &= ~Modifier.PRIVATE;
-      addMethodBindings(methods, typeBinding.getSuperclass(), visibilityMask);
-    }
-  }
-
-  /**
-   * @param fields
-   *          the {@link IVariableBinding}'s container to add fields.
-   * @param typeBinding
-   *          the {@link ITypeBinding} to get fields from.
-   * @param visibilityMask
-   *          the mask of JDT {@link Modifier} flags, to limit fields visibility. If
-   *          {@link Modifier#PRIVATE} is included, it will be used only for given
-   *          {@link ITypeBinding}, but not for its super classes.
-   *
-   * @return the {@link IVariableBinding} for all fields in given {@link ITypeBinding} and its super
-   *         classes.
-   */
-  private static void addFieldBindings(List<IVariableBinding> fields,
-      ITypeBinding typeBinding,
-      int visibilityMask) {
-    if (typeBinding != null) {
-      for (IVariableBinding fieldBinding : typeBinding.getDeclaredFields()) {
-        if (hasVisibility(fieldBinding.getModifiers(), visibilityMask)) {
-          fields.add(fieldBinding);
-        }
-      }
-      // process super Class
-      visibilityMask &= ~Modifier.PRIVATE;
-      addFieldBindings(fields, typeBinding.getSuperclass(), visibilityMask);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Field utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @param node
-   *          the {@link ASTNode} that represents should be qualifier of field.
-   *
-   * @return the {@link Expression} ({@link QualifiedName} or {@link FieldAccess}) used as left side
-   *         of {@link Assignment} to some field. May return <code>null</code>, if given node is not
-   *         left part of {@link Assignment}.
-   */
-  public static Expression getFieldAssignment(ASTNode node) {
-    // FieldAccess = value
-    if (node.getLocationInParent() == FieldAccess.EXPRESSION_PROPERTY) {
-      FieldAccess fieldAccess = (FieldAccess) node.getParent();
-      if (fieldAccess.getLocationInParent() == Assignment.LEFT_HAND_SIDE_PROPERTY) {
-        return fieldAccess;
-      }
-    }
-    // QualifiedName = value
-    if (node.getLocationInParent() == QualifiedName.QUALIFIER_PROPERTY) {
-      QualifiedName qualifiedName = (QualifiedName) node.getParent();
-      if (qualifiedName.getLocationInParent() == Assignment.LEFT_HAND_SIDE_PROPERTY) {
-        return qualifiedName;
-      }
-    }
-    // not an Assignment part
-    return null;
-  }
-
-  /**
-   * @param fieldAccess
-   *          the {@link QualifiedName} or {@link FieldAccess} used to access some field.
-   *
-   * @return the "qualifier" part of accessed field.
-   */
-  public static Expression getFieldAccessQualifier(Expression fieldAccess) {
-    if (fieldAccess instanceof FieldAccess) {
-      return ((FieldAccess) fieldAccess).getExpression();
-    } else if (fieldAccess instanceof QualifiedName) {
-      return ((QualifiedName) fieldAccess).getQualifier();
-    }
-    return null;
-  }
-
-  /**
-   * @param fieldAccess
-   *          the {@link QualifiedName} or {@link FieldAccess} used to access some field.
-   *
-   * @return the {@link SimpleName} part of accessed field.
-   */
-  public static SimpleName getFieldAccessName(Expression fieldAccess) {
-    if (fieldAccess instanceof FieldAccess) {
-      return ((FieldAccess) fieldAccess).getName();
-    } else if (fieldAccess instanceof QualifiedName) {
-      return ((QualifiedName) fieldAccess).getName();
-    }
-    return null;
-  }
-
-  /**
-   * @param fieldName
-   *          the name of field.
-   *
-   * @return the {@link VariableDeclarationFragment} for given field name or <code>null</code> if
-   *         not field found.
-   */
-  public static VariableDeclarationFragment getFieldFragmentByName(TypeDeclaration typeDeclaration,
-      String fieldName) {
-    for (FieldDeclaration fieldDeclaration : typeDeclaration.getFields()) {
-      for (VariableDeclarationFragment fragment : DomGenerics.fragments(fieldDeclaration)) {
-        if (fieldName.equals(fragment.getName().getIdentifier())) {
-          return fragment;
-        }
-      }
-    }
-    return null;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // "Enclosing" utilities
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link ASTNode} that encloses given position, such that there are no any child
-   *         {@link ASTNode} that also encloses same position.
-   */
-  public static ASTNode getEnclosingNode(ASTNode root, final int position) {
-    final ASTNode result[] = new ASTNode[1];
-    root.accept(new ASTVisitor() {
-      @Override
-      public void postVisit(ASTNode node) {
-        int start = node.getStartPosition();
-        int length = node.getLength();
-        if (result[0] == null && start <= position && position < start + length) {
-          result[0] = node;
-        }
-      }
-    });
-    return result[0];
-  }
-
-  /**
-   * @return the {@link Statement} that encloses given {@link ASTNode}.
-   */
-  public static Statement getEnclosingStatement(ASTNode node) {
-    return getEnclosingNode(node, Statement.class);
-  }
-
-  /**
-   * @return the {@link Block} that encloses given {@link ASTNode}.
-   */
-  public static Block getEnclosingBlock(ASTNode node) {
-    return getEnclosingNode(node, Block.class);
-  }
-
-  /**
-   * @return the {@link FieldDeclaration} that encloses given {@link ASTNode}.
-   */
-  public static FieldDeclaration getEnclosingFieldDeclaration(ASTNode node) {
-    return getEnclosingNode(node, FieldDeclaration.class);
-  }
-
-  /**
-   * @return the {@link MethodDeclaration} that encloses given {@link ASTNode}.
-   */
-  public static MethodDeclaration getEnclosingMethod(ASTNode node) {
-    return getEnclosingNode(node, MethodDeclaration.class);
-  }
-
-  /**
-   * @return the {@link MethodDeclaration} that encloses given {@link ASTNode} and is child of given
-   *         {@link TypeDeclaration}.
-   */
-  public static MethodDeclaration getEnclosingMethod(TypeDeclaration type, ASTNode node) {
-    MethodDeclaration[] methods = type.getMethods();
-    for (MethodDeclaration method : methods) {
-      if (contains(method, node)) {
-        return method;
-      }
-    }
-    return null;
-  }
-
-  /**
-   * @return the {@link TypeDeclaration} that encloses given {@link ASTNode}.
-   */
-  public static TypeDeclaration getEnclosingType(ASTNode node) {
-    return getEnclosingNode(node, TypeDeclaration.class);
-  }
-
-  /**
-   * @return the top-level {@link TypeDeclaration} that encloses given {@link ASTNode}.
-   */
-  public static TypeDeclaration getEnclosingTypeTop(ASTNode node) {
-    TypeDeclaration typeDeclaration = getEnclosingType(node);
-    while (true) {
-      TypeDeclaration declaringType = getEnclosingType(typeDeclaration.getParent());
-      if (declaringType == null) {
-        break;
-      }
-      typeDeclaration = declaringType;
-    }
-    return typeDeclaration;
-  }
-
-  /**
-   * @return the parent of {@link ASTNode} with given class (or its subclass) or <code>null</code>.
-   */
-  @SuppressWarnings("unchecked")
-  public static <T> T getEnclosingNode(ASTNode node, Class<T> resultClass) {
-    while (node != null) {
-      if (resultClass.isAssignableFrom(node.getClass())) {
-        return (T) node;
-      }
-      node = node.getParent();
-    }
-    return null;
-  }
-
-  /**
-   * @return the {@link TypeDeclaration} that contains given {@link MethodDeclaration}.
-   */
-  public static TypeDeclaration getParentType(MethodDeclaration methodDeclaration) {
-    ASTNode parentNode = methodDeclaration.getParent();
-    if (parentNode instanceof AnonymousClassDeclaration) {
-      return AnonymousTypeDeclaration.create((AnonymousClassDeclaration) parentNode);
-    } else {
-      return (TypeDeclaration) parentNode;
-    }
-  }
-
-  /**
-   * @return the {@link ASTNode} which is parent for both given nodes and not equal either. Can not
-   *         be <code>null</code>.
-   */
-  public static ASTNode getCommonParent(ASTNode node_1, ASTNode node_2) {
-    Assert.isNotNull(node_1, "Null node_1");
-    Assert.isNotNull(node_2, "Null node_2");
-    // prepare path from node_1 to CompilationUnit
-    Set<ASTNode> ancestors = Sets.newHashSet();
-    {
-      ASTNode node = node_1.getParent();
-      while (node != null) {
-        ancestors.add(node);
-        node = node.getParent();
-      }
-    }
-    // find first parent of node_2 on this path
-    ASTNode node = node_2.getParent();
-    while (true) {
-      if (ancestors.contains(node)) {
-        return node;
-      }
-      node = node.getParent();
-    }
-  }
-
-  /**
-   * @return the {@link Block} which contains given nodes and not equal either. May be
-   *         <code>null</code>.
-   */
-  public static Block getCommonBlock(ASTNode node_1, ASTNode node_2) {
-    ASTNode commonParent = getCommonParent(node_1, node_2);
-    return getEnclosingBlock(commonParent);
-  }
-
-  /**
-   * @return the {@link Statement} which is direct child of {@link Block} and contains given node.
-   */
-  public static Statement getStatementWithinBlock(Block block, ASTNode node) {
-    List<Statement> statements = DomGenerics.statements(block);
-    while (node != null) {
-      if (statements.contains(node)) {
-        return (Statement) node;
-      }
-      node = node.getParent();
-    }
-    return null;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Statements
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link Statement} directly after given in same {@link Block}, may be
-   *         <code>null</code>.
-   */
-  public static Statement getNextStatement(Statement statement) {
-    Block block = (Block) statement.getParent();
-    List<Statement> statements = DomGenerics.statements(block);
-    return GenericsUtils.getNextOrNull(statements, statement);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Checks
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if given {@link ASTNode} is dangling, i.e. disconnected from
-   *         {@link CompilationUnit}.
-   */
-  public static boolean isDanglingNode(ASTNode node) {
-    return !(node.getRoot() instanceof CompilationUnit);
-  }
-
-  /**
-   * @return <code>true</code> if <code>node_1</code> contains <code>node_2</code>.
-   */
-  public static boolean contains(ASTNode node_1, ASTNode node_2) {
-    while (node_2 != null) {
-      node_2 = node_2.getParent();
-      if (node_1 == node_2) {
-        return true;
-      }
-    }
-    return false;
-  }
-
-  /**
-   * Removes "dangling" {@link ASTNode}-s.
-   */
-  public static void removeDanglingNodes(Iterable<? extends ASTNode> nodes) {
-    Iterator<? extends ASTNode> I = nodes.iterator();
-    while (I.hasNext()) {
-      ASTNode node = I.next();
-      if (isDanglingNode(node)) {
-        I.remove();
-      }
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Source range utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the index of beginning source for given node.
-   */
-  public static int getSourceBegin(ASTNode node) {
-    return node.getStartPosition();
-  }
-
-  /**
-   * @return the index of ending source for given node.
-   */
-  public static int getSourceEnd(ASTNode node) {
-    return node.getStartPosition() + node.getLength();
-  }
-
-  /**
-   * Sets the index of beginning source for given node.
-   */
-  public static void setSourceBegin(ASTNode node, int begin) {
-    node.setSourceRange(begin, node.getLength());
-  }
-
-  /**
-   * Sets the index of beginning source for given node, with keeping end position (i.e. update also
-   * length).
-   */
-  public static void setSourceBegin_keepEnd(ASTNode node, int begin) {
-    int delta = node.getStartPosition() - begin;
-    int newLength = node.getLength() + delta;
-    node.setSourceRange(begin, newLength);
-  }
-
-  /**
-   * Sets source length to match end position of "source" node.
-   */
-  public static void setSourceEnd(ASTNode targetNode, ASTNode sourceNode) {
-    int begin = targetNode.getStartPosition();
-    int end = getSourceEnd(sourceNode);
-    targetNode.setSourceRange(begin, end - begin);
-  }
-
-  /**
-   * Sets the length of source for given node.
-   */
-  public static void setSourceLength(ASTNode node, int length) {
-    node.setSourceRange(node.getStartPosition(), length);
-  }
-
-  /**
-   * Move given {@link ASTNode} to the new position. This methods just changes start positions for
-   * given node and its children, it does not modifies source.
-   */
-  public static void moveNode(ASTNode nodeToMove, int targetPosition) {
-    int sourcePosition = nodeToMove.getStartPosition();
-    final int moveDelta = targetPosition - sourcePosition;
-    nodeToMove.accept(new ASTVisitor(true) {
-      @Override
-      public void postVisit(ASTNode node) {
-        node.setSourceRange(node.getStartPosition() + moveDelta, node.getLength());
-      }
-    });
-  }
-
-  /**
-   * Copies source range from given source node to the given target {@link ASTNode}.
-   */
-  public static void copySourceRange(ASTNode targetNode, ASTNode sourceNode) {
-    targetNode.setSourceRange(sourceNode.getStartPosition(), sourceNode.getLength());
-  }
-
-  /**
-   * Sets source range for given target node same as beginning of "beginNode" and end of "endNode".
-   */
-  public static void setSourceRange(ASTNode targetNode, ASTNode beginNode, ASTNode endNode) {
-    int beginPosition = getSourceBegin(beginNode);
-    int endPosition = getSourceEnd(endNode);
-    targetNode.setSourceRange(beginPosition, endPosition - beginPosition);
-  }
-
-  /**
-   * Sets beginning of source range for given target node to same as position as given source node,
-   * and length - same as length of source plus given "delta".
-   *
-   * @param delta
-   *          is used mostly for {@link Statement} creation, when we should add ';' at the end.
-   */
-  public static void setSourceRange(ASTNode targetNode, ASTNode sourceNode, int delta) {
-    targetNode.setSourceRange(sourceNode.getStartPosition(), sourceNode.getLength() + delta);
-  }
-
-  /**
-   * Sets beginning of source range for given target node to same as position as given begin node,
-   * and length - same as length of source plus given "delta".
-   *
-   * @param delta
-   *          is used mostly for {@link Statement} creation, when we should add ';' at the end.
-   */
-  public static void setSourceRange(ASTNode targetNode,
-      ASTNode beginNode,
-      ASTNode endNode,
-      int delta) {
-    int begin = getSourceBegin(beginNode);
-    int end = getSourceEnd(endNode) + delta;
-    targetNode.setSourceRange(begin, end - begin);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Variable's
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @param root
-   *          the starting node
-   *
-   * @return all {@link VariableDeclaration}'s that exists in {@link ASTNode}'s hierarchy.
-   */
-  public static List<VariableDeclaration> getVariableDeclarationsAll(ASTNode root) {
-    // prepare gatherer
-    ListGatherer<VariableDeclaration> gatherer = new ListGatherer<VariableDeclaration>() {
-      @Override
-      public void postVisit(ASTNode node) {
-        if (node instanceof VariableDeclaration) {
-          addResult((VariableDeclaration) node);
-        }
-      }
-    };
-    // gather variables
-    root.accept(gatherer);
-    // OK, final result
-    return gatherer.getResultList();
-  }
-
-  /**
-   * Return {@link VariableDeclaration}'s such that at their positions they can see new
-   * {@link VariableDeclaration} declared at given position. So, new {@link VariableDeclaration} can
-   * be shadowed by existing one, if it will have same name.
-   *
-   * @param root
-   *          the starting node
-   * @param position
-   *          the position to search visible variable declarations
-   *
-   * @return an possibly shadowing {@link VariableDeclaration}'s.
-   */
-  public static List<VariableDeclaration> getVariableDeclarationsAfter(ASTNode root, int position) {
-    ASTNode targetNode = getEnclosingNode(root, position);
-    // prepare gatherer
-    ListGatherer<VariableDeclaration> gatherer = new ListGatherer<VariableDeclaration>() {
-      @Override
-      public void postVisit(ASTNode node) {
-        if (node instanceof VariableDeclaration) {
-          addResult((VariableDeclaration) node);
-        }
-      }
-    };
-    // prepare block
-    Block targetBlock = getEnclosingBlock(targetNode);
-    TypeDeclaration targetType = getEnclosingType(targetNode);
-    if (targetBlock != null) {
-      for (Statement statement : DomGenerics.statements(targetBlock)) {
-        if (statement.getStartPosition() >= position) {
-          statement.accept(gatherer);
-        }
-      }
-    } else if (targetType != null) {
-      // when target it type, possible shadows are in methods (with recursion)
-      for (BodyDeclaration bodyDeclaration : DomGenerics.bodyDeclarations(targetType)) {
-        if (!(bodyDeclaration instanceof FieldDeclaration)) {
-          bodyDeclaration.accept(gatherer);
-        }
-      }
-    }
-    // OK, final result
-    return gatherer.getResultList();
-  }
-
-  /**
-   * @param root
-   *          the starting node
-   * @param position
-   *          the position to search visible variable declarations
-   *
-   * @return the {@link VariableDeclaration}'s visible at given position.
-   */
-  public static List<VariableDeclaration> getVariableDeclarationsVisibleAt(ASTNode root,
-      int position) {
-    List<VariableDeclaration> declarations = Lists.newArrayList();
-    ASTNode node = getEnclosingNode(root, position);
-    // if we hit the empty space inside of block, process all statements before given position
-    if (node instanceof Block) {
-      Block block = (Block) node;
-      for (Statement statement : DomGenerics.statements(block)) {
-        if (statement.getStartPosition() < position) {
-          addStatementVariableDeclarations(declarations, statement);
-        }
-      }
-    }
-    // go up along hierarchy and remember variable declarations
-    while (node != null) {
-      // type - add fields
-      if (node instanceof TypeDeclaration) {
-        TypeDeclaration type = (TypeDeclaration) node;
-        for (FieldDeclaration fieldDeclaration : type.getFields()) {
-          declarations.addAll(DomGenerics.fragments(fieldDeclaration));
-        }
-      }
-      // method - add parameters
-      if (node instanceof MethodDeclaration) {
-        MethodDeclaration method = (MethodDeclaration) node;
-        declarations.addAll(DomGenerics.parameters(method));
-      }
-      // statement - process siblings above
-      if (node instanceof Statement && node.getParent() instanceof Block) {
-        Statement statement = (Statement) node;
-        Block block = (Block) statement.getParent();
-        for (Statement siblingStatement : DomGenerics.statements(block)) {
-          if (siblingStatement == statement) {
-            break;
-          }
-          addStatementVariableDeclarations(declarations, siblingStatement);
-        }
-      }
-      // go to parent
-      node = node.getParent();
-    }
-    // OK, final result
-    return declarations;
-  }
-
-  /**
-   * Add {@link VariableDeclarationFragment}'s if given statement is
-   * {@link VariableDeclarationStatement}.
-   */
-  private static void addStatementVariableDeclarations(List<VariableDeclaration> declarations,
-      Statement statement) {
-    if (statement instanceof VariableDeclarationStatement) {
-      VariableDeclarationStatement variableStatement = (VariableDeclarationStatement) statement;
-      declarations.addAll(DomGenerics.fragments(variableStatement));
-    }
-  }
-
-  /**
-   * @return <code>true</code> if given {@link ASTNode} is single variable {@link SimpleName} or
-   *         {@link FieldAccess} like "this.fieldName".
-   */
-  public static boolean isVariable(ASTNode variable) {
-    // FieldAccess
-    if (variable instanceof FieldAccess) {
-      FieldAccess fieldAccess = (FieldAccess) variable;
-      return fieldAccess.getExpression() instanceof ThisExpression;
-    }
-    // SimpleName
-    if (variable instanceof SimpleName) {
-      StructuralPropertyDescriptor locationInParent = variable.getLocationInParent();
-      if (locationInParent == MethodInvocation.NAME_PROPERTY
-          || locationInParent == SimpleType.NAME_PROPERTY
-          || locationInParent == FieldAccess.NAME_PROPERTY
-          || locationInParent == QualifiedName.NAME_PROPERTY
-          || locationInParent == MethodDeclaration.NAME_PROPERTY
-          || locationInParent == TypeDeclaration.NAME_PROPERTY) {
-        return false;
-      }
-      // variable has binding
-      return getVariableBinding(variable) != null;
-    }
-    // unknown ASTNode
-    return false;
-  }
-
-  /**
-   * @return the name of given variable.
-   */
-  public static String getVariableName(ASTNode variable) {
-    return getVariableSimpleName(variable).getIdentifier();
-  }
-
-  /**
-   * @return the {@link SimpleName} of given variable.
-   */
-  public static SimpleName getVariableSimpleName(ASTNode variable) {
-    if (variable instanceof FieldAccess) {
-      return ((FieldAccess) variable).getName();
-    }
-    return (SimpleName) variable;
-  }
-
-  /**
-   * Calculate actual value for reusable variables & fields.
-   *
-   * @param expression
-   *          the {@link Expression} for actualization.
-   * @return the {@link Expression} identified actual value for original expression.
-   */
-  public static Expression getActualVariableExpression(Expression expression) {
-    if (AstNodeUtils.isVariable(expression)) {
-      MethodDeclaration enclosingMethod = AstNodeUtils.getEnclosingMethod(expression);
-      ASTNode lastAssignment =
-          ExecutionFlowUtils.getLastAssignment(
-              new ExecutionFlowDescription(enclosingMethod),
-              expression);
-      if (lastAssignment != null) {
-        MethodDeclaration method = AstNodeUtils.getEnclosingMethod(lastAssignment);
-        // Note: we need assignment from enclosing method or field initializer
-        if (method == null || method == enclosingMethod) {
-          if (lastAssignment instanceof Assignment) {
-            Assignment assignment = (Assignment) lastAssignment;
-            return assignment.getRightHandSide();
-          } else if (lastAssignment instanceof VariableDeclarationFragment) {
-            VariableDeclarationFragment fragment = (VariableDeclarationFragment) lastAssignment;
-            Expression initializer = fragment.getInitializer();
-            if (initializer != null) {
-              return initializer;
-            }
-          }
-        }
-      }
-    }
-    return expression;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Package
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the name of package, may be empty for default package.
-   */
-  public static String getPackageName(CompilationUnit unit) {
-    PackageDeclaration packageDeclaration = unit.getPackage();
-    return packageDeclaration != null ? packageDeclaration.getName().getFullyQualifiedName() : "";
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Literals
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if all given {@link Expression}'s is literals, see
-   *         {@link #isLiteral(Expression)}.
-   */
-  public static boolean areLiterals(List<Expression> expressions) {
-    for (Expression expression : expressions) {
-      if (!isLiteral(expression)) {
-        return false;
-      }
-    }
-    return true;
-  }
-
-  /**
-   * @return <code>true</code> if given {@link Expression} is literal, i.e. may be evaluated without
-   *         outer context.
-   */
-  public static boolean isLiteral(Expression expression) {
-    if (expression instanceof BooleanLiteral
-        || expression instanceof NumberLiteral
-        || expression instanceof StringLiteral
-        || expression instanceof NullLiteral
-        || expression instanceof QualifiedName) {
-      return true;
-    }
-    if (expression instanceof CastExpression) {
-      CastExpression castExpression = (CastExpression) expression;
-      return isLiteral(castExpression.getExpression());
-    }
-    if (expression instanceof PrefixExpression) {
-      PrefixExpression prefixExpression = (PrefixExpression) expression;
-      return isLiteral(prefixExpression.getOperand());
-    }
-    if (expression instanceof InfixExpression) {
-      InfixExpression infixExpression = (InfixExpression) expression;
-      List<Expression> operands = DomGenerics.allOperands(infixExpression);
-      return areLiterals(operands);
-    }
-    return false;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Caching
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @SuppressWarnings("unchecked")
-  private static <T> T getValue(ASTNode node, String key, RunnableObjectEx<T> evaluator) {
-    // if "null", don't use caching
-    if (node == null) {
-      return ExecutionUtils.runObject(evaluator);
-    }
-    // prepare keys
-    String keyValue = "ASTNodeUtilities." + key;
-    String keyHas = keyValue + ".has";
-    // check if has cached value
-    if (node.getProperty(keyHas) == Boolean.TRUE && isCacheUpToDate(node, key)) {
-      T value = (T) node.getProperty(keyValue);
-      return value;
-    }
-    // prepare value
-    T value = ExecutionUtils.runObject(evaluator);
-    node.setProperty(keyValue, value);
-    node.setProperty(keyHas, Boolean.TRUE);
-    // done
-    return value;
-  }
-
-  /**
-   * @return <code>false</code> if {@link AST} was modified since last request. Then marks it as not
-   *         modified, so next call will say that it is not modified.
-   */
-  private static boolean isCacheUpToDate(ASTNode node, String key) {
-    String keyStamp = "ASTNodeUtilities." + key + ".stamp";
-    long currentStamp = node.getAST().modificationCount();
-    Long nodeStamp = (Long) node.getProperty(keyStamp);
-    node.setProperty(keyStamp, currentStamp);
-    return nodeStamp != null && nodeStamp.longValue() == currentStamp;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private AstNodeUtils() {
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Comparators
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * A comparator that can be used to sort {@link ASTNode}'s by their start position, with the
+	 * left-most nodes sorting to the front of the list.
+	 */
+	public static final Comparator<ASTNode> SORT_BY_POSITION = new Comparator<ASTNode>() {
+		@Override
+		public int compare(ASTNode o1, ASTNode o2) {
+			return o1.getStartPosition() - o2.getStartPosition();
+		}
+	};
+	/**
+	 * A comparator that can be used to sort {@link ASTNode}'s by their start position, with the
+	 * left-most nodes sorting to the back of the list.
+	 */
+	public static final Comparator<ASTNode> SORT_BY_REVERSE_POSITION = new Comparator<ASTNode>() {
+		@Override
+		public int compare(ASTNode o1, ASTNode o2) {
+			return o2.getStartPosition() - o1.getStartPosition();
+		}
+	};
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IMethodBinding access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @param invocation
+	 *          the not <code>null</code> {@link MethodInvocation}
+	 * @return not <code>null</code> {@link IMethodBinding} for given {@link MethodInvocation}.
+	 */
+	public static IMethodBinding getMethodBinding(MethodInvocation invocation) {
+		Assert.isNotNull(invocation);
+		// try to get binding from property (copy of binding added by DesignerAST)
+		{
+			IMethodBinding binding =
+					(IMethodBinding) invocation.getProperty(AstParser.KEY_METHOD_BINDING);
+			if (binding != null) {
+				return binding;
+			}
+		}
+		// get standard binding
+		return invocation.resolveMethodBinding();
+	}
+
+	/**
+	 * @param invocation
+	 *          the not <code>null</code> {@link SuperMethodInvocation}.
+	 *
+	 * @return not <code>null</code> {@link IMethodBinding} for given {@link SuperMethodInvocation}.
+	 */
+	public static IMethodBinding getMethodBinding(SuperMethodInvocation invocation) {
+		Assert.isNotNull(invocation);
+		// try to get binding from property (copy of binding added earlier)
+		{
+			IMethodBinding binding =
+					(IMethodBinding) invocation.getProperty(AstParser.KEY_METHOD_BINDING);
+			if (binding != null) {
+				return binding;
+			}
+		}
+		// get standard binding
+		return invocation.resolveMethodBinding();
+	}
+
+	/**
+	 * @param methodDeclaration
+	 *          the not <code>null</code> {@link MethodDeclaration}
+	 *
+	 * @return the {@link IMethodBinding} for given {@link MethodDeclaration}, may be
+	 *         <code>null</code> if compilation errors.
+	 */
+	public static IMethodBinding getMethodBinding(MethodDeclaration methodDeclaration) {
+		Assert.isNotNull(methodDeclaration);
+		// try to get binding from property (copy of binding added by DesignerAST)
+		{
+			IMethodBinding binding =
+					(IMethodBinding) methodDeclaration.getProperty(AstParser.KEY_METHOD_BINDING);
+			if (binding != null) {
+				return binding;
+			}
+		}
+		// get standard binding, may be "null" (if compilation errors)
+		return methodDeclaration.resolveBinding();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IVariableBinding access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @param simpleName
+	 *          the not <code>null</code> {@link SimpleName}
+	 *
+	 * @return {@link IVariableBinding} or <code>null</code> for given {@link SimpleName}.
+	 */
+	public static IVariableBinding getVariableBinding(ASTNode node) {
+		Assert.isNotNull(node);
+		// try to get binding from property (copy of binding added by DesignerAST)
+		{
+			IVariableBinding binding =
+					(IVariableBinding) node.getProperty(AstParser.KEY_VARIABLE_BINDING);
+			if (binding != null) {
+				return binding;
+			}
+		}
+		// VariableDeclaration
+		if (node instanceof VariableDeclaration) {
+			VariableDeclaration variableDeclaration = (VariableDeclaration) node;
+			IVariableBinding binding = variableDeclaration.resolveBinding();
+			if (binding != null) {
+				return binding;
+			}
+		}
+		// check for SimpleName
+		if (node instanceof SimpleName) {
+			SimpleName simpleName = (SimpleName) node;
+			// get standard binding
+			{
+				IBinding binding = simpleName.resolveBinding();
+				if (binding instanceof IVariableBinding) {
+					return (IVariableBinding) binding;
+				}
+			}
+		}
+		// check for FieldAccess
+		if (node instanceof FieldAccess) {
+			FieldAccess fieldAccess = (FieldAccess) node;
+			return fieldAccess.resolveFieldBinding();
+		}
+		// not a variable
+		return null;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Type binding access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @param expression
+	 *          the not <code>null</code> {@link Expression}
+	 * @return not <code>null</code> {@link ITypeBinding} for given {@link Expression}.
+	 */
+	public static ITypeBinding getTypeBinding(Expression expression) {
+		Assert.isNotNull(expression);
+		// try to get binding from property (copy of binding added by DesignerAST)
+		{
+			ITypeBinding binding = (ITypeBinding) expression.getProperty(AstParser.KEY_TYPE_BINDING);
+			if (binding != null) {
+				return binding;
+			}
+		}
+		// get standard binding
+		return expression.resolveTypeBinding();
+	}
+
+	/**
+	 * @param declaration
+	 *          the not <code>null</code> {@link AnonymousClassDeclaration}
+	 * @return not <code>null</code> {@link ITypeBinding} for given {@link AnonymousClassDeclaration}.
+	 */
+	public static ITypeBinding getTypeBinding(AnonymousClassDeclaration declaration) {
+		Assert.isNotNull(declaration);
+		// try to get binding from property (copy of binding added by DesignerAST)
+		{
+			ITypeBinding binding = (ITypeBinding) declaration.getProperty(AstParser.KEY_TYPE_BINDING);
+			if (binding != null) {
+				return binding;
+			}
+		}
+		// get standard binding
+		return declaration.resolveBinding();
+	}
+
+	/**
+	 * @param type
+	 *          the not <code>null</code> {@link Type}
+	 *
+	 * @return the {@link ITypeBinding} for given {@link Type}, may be <code>null</code> if unknown.
+	 */
+	public static ITypeBinding getTypeBinding(Type type) {
+		Assert.isNotNull(type);
+		// try to get binding from property (copy of binding added by DesignerAST)
+		{
+			ITypeBinding binding = (ITypeBinding) type.getProperty(AstParser.KEY_TYPE_BINDING);
+			if (binding != null) {
+				return binding;
+			}
+		}
+		// get standard binding, may be "null"
+		return type.resolveBinding();
+	}
+
+	/**
+	 * @param type
+	 *          the not <code>null</code> {@link TypeDeclaration}
+	 *
+	 * @return not <code>null</code> {@link ITypeBinding} for given {@link TypeDeclaration}.
+	 */
+	public static ITypeBinding getTypeBinding(TypeDeclaration typeDeclaration) {
+		return getTypeBinding((AbstractTypeDeclaration) typeDeclaration);
+	}
+
+	/**
+	 * @param type
+	 *          the not <code>null</code> {@link AbstractTypeDeclaration}
+	 *
+	 * @return not <code>null</code> {@link ITypeBinding} for given {@link AbstractTypeDeclaration}.
+	 */
+	public static ITypeBinding getTypeBinding(AbstractTypeDeclaration typeDeclaration) {
+		Assert.isNotNull(typeDeclaration);
+		// try to get binding from property (copy of binding added by DesignerAST)
+		{
+			ITypeBinding binding = (ITypeBinding) typeDeclaration.getProperty(AstParser.KEY_TYPE_BINDING);
+			if (binding != null) {
+				return binding;
+			}
+		}
+		// get standard binding, should not return "null"
+		{
+			ITypeBinding binding = typeDeclaration.resolveBinding();
+			Assert.isTrueException(
+					binding != null,
+					ICoreExceptionConstants.AST_NO_TYPE_BINDING,
+					typeDeclaration);
+			return binding;
+		}
+	}
+
+	/**
+	 * @param parameter
+	 *          the not <code>null</code> {@link SingleVariableDeclaration}.
+	 *
+	 * @return not <code>null</code> {@link ITypeBinding} for given {@link SingleVariableDeclaration}.
+	 */
+	public static ITypeBinding getTypeBinding(SingleVariableDeclaration parameter) {
+		Assert.isNotNull(parameter);
+		IVariableBinding variableBinding = getVariableBinding(parameter);
+		if (variableBinding == null) {
+			return null;
+		}
+		return variableBinding.getType();
+	}
+
+	/**
+	 * @param variable
+	 *          the not <code>null</code> {@link VariableDeclaration}.
+	 *
+	 * @return not <code>null</code> {@link ITypeBinding} for given {@link VariableDeclaration}.
+	 */
+	public static ITypeBinding getTypeBinding(VariableDeclaration variable) {
+		Assert.isNotNull(variable);
+		// may be FieldDeclaration
+		if (variable.getParent() instanceof FieldDeclaration) {
+			FieldDeclaration fieldDeclaration = (FieldDeclaration) variable.getParent();
+			return getTypeBinding(fieldDeclaration.getType());
+		}
+		// may be SingleVariableDeclaration
+		if (variable instanceof SingleVariableDeclaration) {
+			return getTypeBinding((SingleVariableDeclaration) variable);
+		}
+		// may be VariableDeclarationStatement
+		if (variable.getParent() instanceof VariableDeclarationStatement) {
+			VariableDeclarationStatement statement = (VariableDeclarationStatement) variable.getParent();
+			return getTypeBinding(statement.getType());
+		}
+		// only known alternative is VariableDeclarationExpression
+		VariableDeclarationExpression statement = (VariableDeclarationExpression) variable.getParent();
+		return getTypeBinding(statement.getType());
+	}
+
+	/**
+	 * @param typeBinding
+	 *          the {@link ITypeBinding} for generic type instance.
+	 * @param typeArgumentIndex
+	 *          the type argument index.
+	 * @return the {@link ITypeBinding} for argument (or bound) of generic type instance at specified
+	 *         index.
+	 */
+	public static ITypeBinding getTypeBindingArgument(ITypeBinding typeBinding, int typeArgumentIndex) {
+		ITypeBinding[] typeArgumentBindings = typeBinding.getTypeArguments();
+		if (typeArgumentBindings.length != 0) {
+			ITypeBinding typeArgumentBinding = typeArgumentBindings[typeArgumentIndex];
+			return typeArgumentBinding;
+		} else {
+			ITypeBinding[] typeParameters = typeBinding.getTypeDeclaration().getTypeParameters();
+			return typeParameters[typeArgumentIndex].getTypeBounds()[0];
+		}
+	}
+
+	/**
+	 * @param typeBinding
+	 *          the {@link ITypeBinding} for generic type instance.
+	 * @param baseClassName
+	 *          the super class name (parent) whose parameter is to look.
+	 * @param typeParameterIndex
+	 *          the parameter index.
+	 * @return the {@link ITypeBinding} for argument (or bound) of generic type instance at specified
+	 *         index.
+	 */
+	public static ITypeBinding getTypeBindingArgument(ITypeBinding typeBinding,
+			String baseClassName,
+			int typeParameterIndex) {
+		while (typeBinding != null) {
+			String qualifiedName = AstNodeUtils.getFullyQualifiedName(typeBinding, false);
+			if (baseClassName.equals(qualifiedName)) {
+				return getTypeBindingArgument(typeBinding, typeParameterIndex);
+			}
+			typeBinding = typeBinding.getSuperclass();
+		}
+		throw new IllegalArgumentException(baseClassName + " is not super class for given binding.");
+	}
+
+	/**
+	 * @param typeBinding
+	 *          the {@link ITypeBinding} of type variable.
+	 *
+	 * @return the declared type bounds, may be <code>null</code> if not specified.
+	 */
+	private static ITypeBinding getTypeVariableBound(ITypeBinding typeBinding) {
+		Assert.isLegal(typeBinding.isTypeVariable());
+		ITypeBinding[] typeBounds = typeBinding.getTypeBounds();
+		if (typeBounds.length != 0) {
+			return typeBounds[0];
+		} else {
+			return null;
+		}
+	}
+
+	public static ITypeBinding getGenericDeclaringClass(ITypeBinding typeBinding) {
+		ITypeBinding declaringClass = typeBinding.getDeclaringClass();
+		if (declaringClass != null) {
+			return declaringClass.getTypeDeclaration();
+		}
+		return declaringClass;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Type binding operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * The constant to return from {@link #getFullyQualifiedName(ITypeBinding, boolean)} when given
+	 * {@link ITypeBinding} is <code>null</code>, i.e. no type binding information found, for example
+	 * because of compilation errors.
+	 */
+	public static String NO_TYPE_BINDING_NAME = "__WBP_NO_TYPE_BINDING";
+
+	/**
+	 * Same as {@link #getFullyQualifiedName(ITypeBinding, boolean)}, but analyzes also
+	 * {@link AnonymousClassDeclaration}'s.
+	 */
+	public static String getFullyQualifiedName(Expression expression, boolean runtime) {
+		ITypeBinding binding = getTypeBinding(expression);
+		String fullyQualifiedName = getFullyQualifiedName(binding, runtime);
+		if (binding != null && binding.isAnonymous()) {
+			fullyQualifiedName =
+					getFullyQualifiedName_appendAnonymous(expression, runtime, fullyQualifiedName);
+		}
+		return fullyQualifiedName;
+	}
+
+	/**
+	 * For {@link AnonymousClassDeclaration} we can not get full name using only {@link ITypeBinding},
+	 * so we use AST to find necessary <code>$1</code>, <code>$2</code>, etc suffixes.
+	 *
+	 * @return the fully qualified name with anonymous suffix.
+	 */
+	private static String getFullyQualifiedName_appendAnonymous(Expression expression,
+			final boolean runtime,
+			String fullyQualifiedName) {
+		final AnonymousClassDeclaration acd =
+				((ClassInstanceCreation) expression).getAnonymousClassDeclaration();
+		final String[] suffix = new String[1];
+		expression.getRoot().accept(new ASTVisitor() {
+			private final int[] m_counts = new int[32];
+			private int m_level = 0;
+
+			@Override
+			public boolean visit(AnonymousClassDeclaration node) {
+				m_counts[m_level]++;
+				if (node == acd) {
+					StringBuilder sb = new StringBuilder();
+					String separator = runtime ? "$" : ".";
+					for (int i = 0; i <= m_level; i++) {
+						sb.append(separator);
+						sb.append(m_counts[i]);
+					}
+					suffix[0] = sb.toString();
+				}
+				m_counts[++m_level] = 0;
+				return suffix[0] == null;
+			}
+
+			@Override
+			public void endVisit(AnonymousClassDeclaration node) {
+				m_level--;
+			}
+		});
+		fullyQualifiedName = StringUtils.stripEnd(fullyQualifiedName, "$.");
+		fullyQualifiedName += suffix[0];
+		return fullyQualifiedName;
+	}
+
+	/**
+	 * @see #getFullyQualifiedName(ITypeBinding, boolean).
+	 */
+	public static String getFullyQualifiedName(Type type, boolean runtime) {
+		ITypeBinding binding = getTypeBinding(type);
+		return getFullyQualifiedName(binding, runtime);
+	}
+
+	/**
+	 * @see #getFullyQualifiedName(ITypeBinding, boolean).
+	 */
+	public static String getFullyQualifiedName(final TypeDeclaration typeDeclaration,
+			final boolean runtime) {
+		String key = "getFullyQualifiedName_TypeDeclaration";
+		return getValue(typeDeclaration, key, new RunnableObjectEx<String>() {
+			@Override
+			public String runObject() throws Exception {
+				ITypeBinding binding = getTypeBinding(typeDeclaration);
+				return getFullyQualifiedName(binding, runtime);
+			}
+		});
+	}
+
+	/**
+	 * @see #getFullyQualifiedName(ITypeBinding, boolean).
+	 */
+	public static String getFullyQualifiedName(SingleVariableDeclaration parameter, boolean runtime) {
+		ITypeBinding binding = getTypeBinding(parameter);
+		return getFullyQualifiedName(binding, runtime);
+	}
+
+	/**
+	 * Returns the fully qualified name of given {@link ITypeBinding}, or
+	 * {@link #NO_TYPE_BINDING_NAME} if <code>null</code> binding given.
+	 *
+	 * @param binding
+	 *          the binding representing the type.
+	 * @param runtime
+	 *          flag <code>true</code> if we need name for class loading, <code>false</code> if we
+	 *          need name for source generation.
+	 *
+	 * @return the fully qualified name of given {@link ITypeBinding}, or
+	 *         {@link #NO_TYPE_BINDING_NAME}.
+	 */
+	public static String getFullyQualifiedName(ITypeBinding binding, boolean runtime) {
+		return getFullyQualifiedName(binding, runtime, false);
+	}
+
+	/**
+	 * @param binding
+	 *          the {@link ITypeBinding} to analyze.
+	 * @param runtime
+	 *          flag <code>true</code> if we need name for class loading, <code>false</code> if we
+	 *          need name for source generation.
+	 * @param withGenerics
+	 *          flag <code>true</code> if generics type arguments should be appended.
+	 *
+	 * @return the fully qualified name of given {@link ITypeBinding}, or
+	 *         {@link #NO_TYPE_BINDING_NAME}.
+	 */
+	public static String getFullyQualifiedName(ITypeBinding binding,
+			boolean runtime,
+			boolean withGenerics) {
+		// check if no binding
+		if (binding == null) {
+			return NO_TYPE_BINDING_NAME;
+		}
+		// check for primitive type
+		if (binding.isPrimitive()) {
+			return binding.getName();
+		}
+		// array
+		if (binding.isArray()) {
+			StringBuilder sb = new StringBuilder();
+			// append element type qualified name
+			ITypeBinding elementType = binding.getElementType();
+			String elementTypeQualifiedName = getFullyQualifiedName(elementType, runtime);
+			sb.append(elementTypeQualifiedName);
+			// append dimensions
+			for (int i = 0; i < binding.getDimensions(); i++) {
+				sb.append("[]");
+			}
+			// done
+			return sb.toString();
+		}
+		// object
+		{
+			String scope;
+			ITypeBinding declaringType = binding.getDeclaringClass();
+			if (declaringType == null) {
+				IPackageBinding packageBinding = binding.getPackage();
+				if (packageBinding == null || packageBinding.isUnnamed()) {
+					scope = "";
+				} else {
+					scope = packageBinding.getName() + ".";
+				}
+			} else if (binding.isTypeVariable()) {
+				return binding.getName();
+			} else {
+				// use '$', because we use this class name for loading class
+				scope = getFullyQualifiedName(declaringType, runtime);
+				if (runtime) {
+					scope += "$";
+				} else {
+					scope += ".";
+				}
+			}
+			// prepare "simple" name, without scope
+			String jdtName = binding.getName();
+			String name = StringUtils.substringBefore(jdtName, "<");
+			if (withGenerics) {
+				ITypeBinding[] typeArguments = binding.getTypeArguments();
+				if (typeArguments.length != 0) {
+					StringBuilder sb = new StringBuilder(name);
+					sb.append("<");
+					for (ITypeBinding typeArgument : typeArguments) {
+						if (sb.charAt(sb.length() - 1) != '<') {
+							sb.append(",");
+						}
+						String typeArgumentName = getFullyQualifiedName(typeArgument, runtime, withGenerics);
+						sb.append(typeArgumentName);
+					}
+					sb.append(">");
+					name = sb.toString();
+				}
+			}
+			// qualified name is scope plus "simple" name
+			return scope + name;
+		}
+	}
+
+	/**
+	 * Checks if given {@link Expression} type is extends/implements given class/interface.
+	 */
+	public static boolean isSuccessorOf(Expression expression, Class<?> clazz) {
+		return isSuccessorOf(getTypeBinding(expression), clazz);
+	}
+
+	/**
+	 * Checks if given {@link Expression} type is extends/implements given class/interface.
+	 */
+	public static boolean isSuccessorOf(Expression expression, ITypeBinding requiredBinding) {
+		return isSuccessorOf(getTypeBinding(expression), requiredBinding);
+	}
+
+	/**
+	 * Checks if given {@link Expression} type is extends/implements given class/interface.
+	 */
+	public static boolean isSuccessorOf(Expression expression, String className) {
+		return isSuccessorOf(getTypeBinding(expression), className);
+	}
+
+	/**
+	 * Checks if given {@link SingleVariableDeclaration} type is extends/implements given
+	 * class/interface.
+	 */
+	public static boolean isSuccessorOf(SingleVariableDeclaration parameter, String className) {
+		return isSuccessorOf(getTypeBinding(parameter), className);
+	}
+
+	/**
+	 * Checks if given {@link Type} type is extends/implements given class/interface.
+	 */
+	public static boolean isSuccessorOf(Type type, String className) {
+		return isSuccessorOf(getTypeBinding(type), className);
+	}
+
+	/**
+	 * Checks if given {@link TypeDeclaration} is extends/implements given class/interface.
+	 */
+	public static boolean isSuccessorOf(TypeDeclaration type, String className) {
+		return isSuccessorOf(getTypeBinding(type), className);
+	}
+
+	/**
+	 * Checks if given {@link AnonymousClassDeclaration} is extends/implements given class/interface.
+	 */
+	public static boolean isSuccessorOf(AnonymousClassDeclaration declaration, String className) {
+		return isSuccessorOf(getTypeBinding(declaration), className);
+	}
+
+	/**
+	 * Checks if given {@link ITypeBinding} is extends/implements given class/interface.
+	 */
+	public static boolean isSuccessorOf(ITypeBinding binding, Class<?> clazz) {
+		Assert.isNotNull(clazz);
+		return isSuccessorOf(binding, clazz.getName());
+	}
+
+	/**
+	 * Checks if given {@link ITypeBinding} is extends/implements given class/interface.
+	 */
+	public static boolean isSuccessorOf(ITypeBinding binding, ITypeBinding requiredBinding) {
+		Assert.isNotNull(requiredBinding);
+		return isSuccessorOf(binding, getFullyQualifiedName(requiredBinding, false));
+	}
+
+	private static final Map<ITypeBinding, Map<String, Boolean>> m_isSuccessorOf =
+			new WeakHashMap<ITypeBinding, Map<String, Boolean>>();
+
+	/**
+	 * Checks if given {@link ITypeBinding} is extends class or implements interface with given name.
+	 *
+	 * @param className
+	 *          the class name in source format (i.e. with '.' as packages separator)
+	 */
+	public static boolean isSuccessorOf(ITypeBinding binding, String className) {
+		Assert.isNotNull(className);
+		// check for Object
+		if (binding == null) {
+			return "java.lang.Object".equals(className);
+		}
+		// use cache
+		Map<String, Boolean> classNameResults = m_isSuccessorOf.get(binding);
+		if (classNameResults == null) {
+			classNameResults = Maps.newTreeMap();
+			m_isSuccessorOf.put(binding, classNameResults);
+		}
+		Boolean result = classNameResults.get(className);
+		if (result == null) {
+			result = isSuccessorOf0(binding, className);
+			classNameResults.put(className, result);
+		}
+		return result;
+	}
+
+	/**
+	 * Implementation for {@link #isSuccessorOf(Expression, String)}.
+	 */
+	private static boolean isSuccessorOf0(ITypeBinding binding, String className) {
+		// check this binding
+		if (getFullyQualifiedName(binding, false).equals(className)) {
+			return true;
+		}
+		// check for array and Object
+		if (binding.isArray() && "java.lang.Object".equals(className)) {
+			return true;
+		}
+		// check superclass
+		{
+			boolean result = isSuccessorOf(binding.getSuperclass(), className);
+			if (result) {
+				return true;
+			}
+		}
+		// check interfaces
+		for (ITypeBinding interfaceBinding : binding.getInterfaces()) {
+			if (isSuccessorOf(interfaceBinding, className)) {
+				return true;
+			}
+		}
+		// no
+		return false;
+	}
+
+	/**
+	 * Checks if given {@link ITypeBinding} is extends one of the given classes or implements
+	 * interface with given name.
+	 *
+	 * @param classNames
+	 *          the array of class names in source format (i.e. with '.' as packages separator).
+	 */
+	public static boolean isSuccessorOf(ITypeBinding binding, String... classNames) {
+		for (String className : classNames) {
+			if (isSuccessorOf(binding, className)) {
+				return true;
+			}
+		}
+		return false;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// TypeDeclaration utilities
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @param typeName
+	 *          the simple type name.
+	 *
+	 * @return the top-level {@link TypeDeclaration} with given name from given
+	 *         {@link CompilationUnit}.
+	 */
+	public static TypeDeclaration getTypeByName(CompilationUnit compilationUnit, String typeName) {
+		Assert.isNotNull(compilationUnit);
+		Assert.isNotNull(typeName);
+		// check each top-level type
+		for (TypeDeclaration typeDeclaration : DomGenerics.types(compilationUnit)) {
+			ITypeBinding typeBinding = typeDeclaration.resolveBinding();
+			if (typeBinding != null && typeBinding.getName().equals(typeName)) {
+				return typeDeclaration;
+			}
+		}
+		// not found
+		return null;
+	}
+
+	/**
+	 * @param typeName
+	 *          the fully qualified type name.
+	 *
+	 * @return the {@link TypeDeclaration} with given fully qualified name, or <code>null</code> if
+	 *         not found.
+	 */
+	public static TypeDeclaration getTypeByQualifiedName(CompilationUnit compilationUnit,
+			final String typeName) {
+		Assert.isNotNull(compilationUnit);
+		Assert.isNotNull(typeName);
+		final TypeDeclaration[] typeDeclaration = new TypeDeclaration[1];
+		compilationUnit.accept(new ASTVisitor() {
+			@Override
+			public void postVisit(ASTNode node) {
+				if (typeDeclaration[0] == null) {
+					if (node.getLocationInParent() == ClassInstanceCreation.TYPE_PROPERTY
+							&& ((ClassInstanceCreation) node.getParent()).getAnonymousClassDeclaration() != null) {
+						ClassInstanceCreation creation = (ClassInstanceCreation) node.getParent();
+						String _typeName = getFullyQualifiedName(creation, true);
+						if (_typeName.equals(typeName)) {
+							AnonymousClassDeclaration anonymousClassDeclaration =
+									creation.getAnonymousClassDeclaration();
+							typeDeclaration[0] = AnonymousTypeDeclaration.create(anonymousClassDeclaration);
+						}
+					}
+				}
+			}
+
+			@Override
+			public boolean visit(SimpleName node) {
+				if (typeDeclaration[0] == null) {
+					if (node.getLocationInParent() == TypeDeclaration.NAME_PROPERTY) {
+						String _typeName = getFullyQualifiedName(node, true);
+						if (_typeName.equals(typeName)) {
+							typeDeclaration[0] = (TypeDeclaration) node.getParent();
+						}
+					}
+				}
+				return typeDeclaration[0] == null;
+			}
+		});
+		// OK, return found TypeDeclaration
+		return typeDeclaration[0];
+	}
+
+	/**
+	 * @return the inner {@link TypeDeclaration} for given {@link ClassInstanceCreation} in same
+	 *         {@link CompilationUnit}, or <code>null</code> if there is no such
+	 *         {@link TypeDeclaration}.
+	 */
+	public static TypeDeclaration getTypeDeclaration(ClassInstanceCreation creation) {
+		final String typeName = getFullyQualifiedName(getTypeBinding(creation), false);
+		ListGatherer<TypeDeclaration> gatherer = new ListGatherer<TypeDeclaration>() {
+			@Override
+			public boolean visit(TypeDeclaration node) {
+				if (getFullyQualifiedName(node, false).equals(typeName)) {
+					addResult(node);
+					return false;
+				}
+				return true;
+			}
+		};
+		// visit all types in compilation unit
+		CompilationUnit compilationUnit = (CompilationUnit) creation.getRoot();
+		compilationUnit.accept(gatherer);
+		return gatherer.getUniqueResult();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// MethodDeclaration utilities
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * The constant to return from {@link #getMethodSignature(IMethodBinding)} when given
+	 * {@link IMethodBinding} is <code>null</code>, i.e. no method binding information found, for
+	 * example because of compilation errors.
+	 */
+	public static String NO_METHOD_BINDING_SIGNATURE = "__WBP_NO_METHOD_BINDING";
+
+	/**
+	 * @return signature for given {@link MethodDeclaration}. This signature is not same signature as
+	 *         in JVM or JDT, just some string that unique identifies method in its
+	 *         {@link TypeDeclaration}.
+	 */
+	public static String getMethodSignature(MethodInvocation methodInvocation) {
+		Assert.isNotNull(methodInvocation);
+		IMethodBinding methodBinding = getMethodBinding(methodInvocation);
+		return getMethodSignature(methodBinding);
+	}
+
+	/**
+	 * @return signature for given {@link MethodDeclaration}. This signature is not same signature as
+	 *         in JVM or JDT, just some string that unique identifies method in its
+	 *         {@link TypeDeclaration}.
+	 */
+	public static String getMethodSignature(MethodDeclaration methodDeclaration) {
+		Assert.isNotNull(methodDeclaration);
+		IMethodBinding methodBinding = getMethodBinding(methodDeclaration);
+		return getMethodSignature(methodBinding);
+	}
+
+	/**
+	 * @return signature for given {@link IMethodBinding}. This signature is not same signature as in
+	 *         JVM or JDT, just some string that unique identifies method in its
+	 *         {@link TypeDeclaration}.
+	 */
+	public static String getMethodSignature(IMethodBinding methodBinding) {
+		return getMethodSignature(methodBinding, false);
+	}
+
+	/**
+	 * @return signature for given {@link IMethodBinding} with generic type names.
+	 */
+	public static String getMethodGenericSignature(IMethodBinding methodBinding) {
+		return getMethodSignature(methodBinding.getMethodDeclaration(), false);
+	}
+
+	/**
+	 * @return signature for given {@link IMethodBinding} with base-declaration types.
+	 */
+	public static String getMethodDeclarationSignature(IMethodBinding methodBinding) {
+		return getMethodSignature(methodBinding.getMethodDeclaration(), true);
+	}
+
+	/**
+	 *
+	 * @param methodBinding
+	 *          the method binding.
+	 * @param declaration
+	 *          set <code>true</code> if need type variables replaced with a base types.
+	 *
+	 * @return signature for given {@link IMethodBinding}.
+	 */
+	private static String getMethodSignature(IMethodBinding methodBinding, boolean declaration) {
+		// check if no binding
+		if (methodBinding == null) {
+			return NO_METHOD_BINDING_SIGNATURE;
+		}
+		// signature
+		StringBuilder buffer = new StringBuilder();
+		// name
+		if (methodBinding.isConstructor()) {
+			buffer.append("<init>");
+		} else {
+			buffer.append(methodBinding.getName());
+		}
+		// parameters
+		buffer.append('(');
+		{
+			ITypeBinding[] parameterTypes = methodBinding.getParameterTypes();
+			for (int i = 0; i < parameterTypes.length; i++) {
+				ITypeBinding parameterType = parameterTypes[i];
+				if (i != 0) {
+					buffer.append(',');
+				}
+
+				// We have to unwrap the element type of arrays. Otherwise isTypeVariable()
+				// always returns false.
+				ITypeBinding elementType = parameterType.isArray() ? parameterType.getElementType() : parameterType;
+
+				if (declaration && elementType.isTypeVariable()) {
+					ITypeBinding variableBinding = getTypeVariableBound(elementType);
+					if (variableBinding == null) {
+						buffer.append("java.lang.Object");
+					} else {
+						buffer.append(getFullyQualifiedName(variableBinding, false));
+					}
+					if (parameterType.isArray()) {
+						buffer.append("[]");
+					}
+				} else {
+					buffer.append(getFullyQualifiedName(parameterType, false));
+				}
+			}
+		}
+		buffer.append(')');
+		// return result
+		return buffer.toString();
+	}
+
+	/**
+	 * @return signatures for given {@link MethodDeclaration}'s. These signature is not same signature
+	 *         as in JVM or JDT, just some string that unique identifies method in its
+	 *         {@link TypeDeclaration}.
+	 */
+	public static List<String> getMethodSignatures(List<MethodDeclaration> methodDeclarations) {
+		List<String> signatures = Lists.newArrayList();
+		for (MethodDeclaration methodDeclaration : methodDeclarations) {
+			signatures.add(getMethodSignature(methodDeclaration));
+		}
+		return signatures;
+	}
+
+	/**
+	 * @param signature
+	 *          the signature of method in same format as
+	 *          {@link #getMethodSignature(MethodDeclaration)}.
+	 *
+	 * @return the {@link MethodDeclaration} for given signature or <code>null</code> if not method
+	 *         found.
+	 */
+	public static MethodDeclaration getMethodBySignature(TypeDeclaration typeDeclaration,
+			String signature) {
+		Assert.isNotNull(typeDeclaration);
+		return getMethodBySignature(DomGenerics.bodyDeclarations(typeDeclaration), signature);
+	}
+
+	/**
+	 * @param bodyDeclarations
+	 *          the {@link List} of {@link BodyDeclaration} to check
+	 * @param signature
+	 *          the signature of method in same format as
+	 *          {@link #getMethodSignature(MethodDeclaration)}.
+	 *
+	 * @return the {@link MethodDeclaration} for given signature or <code>null</code> if no method
+	 *         found.
+	 */
+	public static MethodDeclaration getMethodBySignature(List<BodyDeclaration> bodyDeclarations,
+			String signature) {
+		Assert.isNotNull(bodyDeclarations);
+		Assert.isNotNull(signature);
+		// check each declaration
+		for (BodyDeclaration bodyDeclaration : bodyDeclarations) {
+			if (bodyDeclaration instanceof MethodDeclaration) {
+				MethodDeclaration methodDeclaration = (MethodDeclaration) bodyDeclaration;
+				if (getMethodSignature(methodDeclaration).equals(signature)) {
+					return methodDeclaration;
+				}
+			}
+		}
+		// not found
+		return null;
+	}
+
+	/**
+	 * Returns that {@link IMethodBinding} of method declared in given {@link ITypeBinding} or any of
+	 * its super-classes.
+	 *
+	 * @param typeBinding
+	 *          the {@link ITypeBinding} to search methods in.
+	 * @param signature
+	 *          the signature of method in same format as
+	 *          {@link #getMethodSignature(MethodDeclaration)}.
+	 *
+	 * @return the {@link IMethodBinding} with given signature, or <code>null</code> if no method
+	 *         found.
+	 */
+	public static IMethodBinding getMethodBySignature(ITypeBinding typeBinding, String signature) {
+		for (; typeBinding != null; typeBinding = typeBinding.getSuperclass()) {
+			for (IMethodBinding method : typeBinding.getDeclaredMethods()) {
+				if (getMethodSignature(method).equals(signature)) {
+					return method;
+				}
+			}
+		}
+		// not found
+		return null;
+	}
+
+	/**
+	 * @return the local {@link MethodDeclaration} (i.e. declared in same {@link TypeDeclaration})
+	 *         that is invoked by given {@link MethodInvocation} or <code>null</code> if this method
+	 *         is not local.
+	 */
+	public static MethodDeclaration getLocalMethodDeclaration(final MethodInvocation invocation) {
+		// quick check if there is local name with such name (just name, not signature)
+		{
+			ASTNode unit = invocation.getRoot();
+			String key = "getLocalMethodDeclaration.allMethods";
+			Set<String> allNames = getValue(unit, key, new RunnableObjectEx<Set<String>>() {
+				@Override
+				public Set<String> runObject() throws Exception {
+					Set<String> names = Sets.newTreeSet();
+					TypeDeclaration typeDeclaration = getEnclosingType(invocation);
+					MethodDeclaration[] methods = typeDeclaration.getMethods();
+					for (MethodDeclaration method : methods) {
+						names.add(method.getName().getIdentifier());
+					}
+					return names;
+				}
+			});
+			if (!allNames.contains(invocation.getName().getIdentifier())) {
+				return null;
+			}
+		}
+		// perform precise search
+		String key = "getLocalMethodDeclaration";
+		return getValue(invocation, key, new RunnableObjectEx<MethodDeclaration>() {
+			@Override
+			public MethodDeclaration runObject() throws Exception {
+				return getLocalMethodDeclaration0(invocation);
+			}
+		});
+	}
+
+	/**
+	 * Implementation for {@link #getLocalMethodDeclaration(MethodInvocation)}.
+	 */
+	private static MethodDeclaration getLocalMethodDeclaration0(MethodInvocation invocation) {
+		Assert.isNotNull(invocation);
+		TypeDeclaration typeDeclaration = getEnclosingType(invocation);
+		// check for local method
+		while (true) {
+			Expression targetExpression = invocation.getExpression();
+			// check for unqualified or "this." invocation
+			if (targetExpression == null || targetExpression instanceof ThisExpression) {
+				break;
+			}
+			// check for qualified invocation
+			{
+				String enclosedTypeName = getFullyQualifiedName(typeDeclaration, false);
+				String targetTypeName = getFullyQualifiedName(targetExpression, false);
+				if (enclosedTypeName.equals(targetTypeName)) {
+					break;
+				}
+			}
+			// no, not a local method
+			return null;
+		}
+		// OK, local method
+		{
+			// prepare signature, can be "null", if invalid invocation
+			IMethodBinding methodBinding = getMethodBinding(invocation);
+			if (methodBinding == null) {
+				return null;
+			}
+			// get method by signature
+			String methodSignature = getMethodSignature(methodBinding);
+			return getMethodBySignature(typeDeclaration, methodSignature);
+		}
+	}
+
+	/**
+	 * @return {@link List} of {@link MethodInvocation}'s of given method.
+	 */
+	public static List<MethodInvocation> getMethodInvocations(final MethodDeclaration methodDeclaration) {
+		String key = "getMethodInvocations";
+		return getValue(methodDeclaration, key, new RunnableObjectEx<List<MethodInvocation>>() {
+			@Override
+			public List<MethodInvocation> runObject() throws Exception {
+				return getMethodInvocations0(methodDeclaration);
+			}
+		});
+	}
+
+	/**
+	 * Implementation for {@link #getMethodInvocations(MethodDeclaration)}.
+	 */
+	private static List<MethodInvocation> getMethodInvocations0(MethodDeclaration methodDeclaration) {
+		final List<MethodInvocation> invocations = Lists.newArrayList();
+		// prepare required values
+		IMethodBinding requiredBinding = getMethodBinding(methodDeclaration);
+		if (requiredBinding == null) {
+			return invocations;
+		}
+		final String requiredType = getFullyQualifiedName(requiredBinding.getDeclaringClass(), false);
+		final String requiredSignature = getMethodSignature(methodDeclaration);
+		// visit type and check each method invocation
+		TypeDeclaration typeDeclaration = getEnclosingType(methodDeclaration);
+		typeDeclaration.accept(new ASTVisitor() {
+			@Override
+			public void endVisit(MethodInvocation node) {
+				IMethodBinding binding = getMethodBinding(node);
+				if (binding != null) {
+					String signature = getMethodSignature(binding);
+					String type = getFullyQualifiedName(binding.getDeclaringClass(), false);
+					if (signature.equals(requiredSignature) && type.equals(requiredType)) {
+						invocations.add(node);
+					}
+				}
+			}
+		});
+		//
+		return invocations;
+	}
+
+	/**
+	 * @param signature
+	 *          the signature of method in same format as
+	 *          {@link #getMethodSignature(MethodDeclaration)}.
+	 *
+	 * @return the {@link MethodDeclaration} for given signature or <code>null</code> if not method
+	 *         found.
+	 */
+	public static MethodDeclaration getMethodByName(TypeDeclaration typeDeclaration, String name) {
+		Assert.isNotNull(typeDeclaration);
+		Assert.isNotNull(name);
+		List<BodyDeclaration> bodyDeclarations = DomGenerics.bodyDeclarations(typeDeclaration);
+		for (BodyDeclaration bodyDeclaration : bodyDeclarations) {
+			if (bodyDeclaration instanceof MethodDeclaration) {
+				MethodDeclaration methodDeclaration = (MethodDeclaration) bodyDeclaration;
+				if (methodDeclaration.getName().getIdentifier().equals(name)) {
+					return methodDeclaration;
+				}
+			}
+		}
+		// not found
+		return null;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ConstructorInvocation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return signature for given {@link ConstructorInvocation}. This signature is not same signature
+	 *         as in JVM or JDT, just some string that unique identifies method in its
+	 *         {@link TypeDeclaration}.
+	 */
+	public static String getSignature(ConstructorInvocation invocation) {
+		Assert.isNotNull(invocation);
+		IMethodBinding methodBinding = getBinding(invocation);
+		return getMethodSignature(methodBinding);
+	}
+
+	/**
+	 * @param invocation
+	 *          the not <code>null</code> {@link ConstructorInvocation}
+	 * @return not <code>null</code> {@link IMethodBinding} for given {@link ConstructorInvocation}.
+	 */
+	public static IMethodBinding getBinding(ConstructorInvocation invocation) {
+		Assert.isNotNull(invocation);
+		return invocation.resolveConstructorBinding();
+	}
+
+	/**
+	 * @return the {@link MethodDeclaration} that is invoked by given {@link ConstructorInvocation}.
+	 */
+	public static MethodDeclaration getConstructor(ConstructorInvocation invocation) {
+		TypeDeclaration typeDeclaration = getEnclosingType(invocation);
+		String signature = getSignature(invocation);
+		return getMethodBySignature(typeDeclaration, signature);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// SuperConstructorInvocation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return signature for given {@link SuperConstructorInvocation}. This signature is not same
+	 *         signature as in JVM or JDT, just some string that unique identifies method in its
+	 *         {@link TypeDeclaration}.
+	 */
+	public static String getSuperSignature(SuperConstructorInvocation invocation) {
+		Assert.isNotNull(invocation);
+		IMethodBinding methodBinding = getSuperBinding(invocation);
+		return getMethodSignature(methodBinding);
+	}
+
+	/**
+	 * @param invocation
+	 *          the not <code>null</code> {@link SuperConstructorInvocation}
+	 * @return not <code>null</code> {@link IMethodBinding} for given
+	 *         {@link SuperConstructorInvocation}.
+	 */
+	public static IMethodBinding getSuperBinding(SuperConstructorInvocation invocation) {
+		Assert.isNotNull(invocation);
+		// try to get binding from property (copy of binding added by DesignerAST)
+		{
+			IMethodBinding binding =
+					(IMethodBinding) invocation.getProperty(AstParser.KEY_METHOD_BINDING);
+			if (binding != null) {
+				return binding;
+			}
+		}
+		// get standard binding, should not return "null"
+		return invocation.resolveConstructorBinding();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ClassInstanceCreation utilities
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return signature for given {@link ClassInstanceCreation}. This signature is not same signature
+	 *         as in JVM or JDT, just some string that unique identifies method in its
+	 *         {@link TypeDeclaration}.
+	 */
+	public static String getCreationSignature(ClassInstanceCreation creation) {
+		Assert.isNotNull(creation);
+		IMethodBinding methodBinding = getCreationBinding(creation);
+		return getMethodSignature(methodBinding);
+	}
+
+	/**
+	 * @param creation
+	 *          the not <code>null</code> {@link ClassInstanceCreation}
+	 * @return not <code>null</code> {@link IMethodBinding} for given {@link ClassInstanceCreation}.
+	 */
+	public static IMethodBinding getCreationBinding(ClassInstanceCreation creation) {
+		Assert.isNotNull(creation);
+		// try to get binding from property (copy of binding added by DesignerAST)
+		{
+			IMethodBinding binding = (IMethodBinding) creation.getProperty(AstParser.KEY_METHOD_BINDING);
+			if (binding != null) {
+				return binding;
+			}
+		}
+		// get standard binding, should not return "null"
+		return creation.resolveConstructorBinding();
+	}
+
+	/**
+	 * @return the local constructor {@link MethodDeclaration} (i.e. declared in same
+	 *         {@link TypeDeclaration}) that is invoked by given {@link ClassInstanceCreation} or
+	 *         <code>null</code> if this method is not local.
+	 */
+	public static MethodDeclaration getLocalConstructorDeclaration(final ClassInstanceCreation creation) {
+		String key = "getLocalConstructorDeclaration";
+		return getValue(creation, key, new RunnableObjectEx<MethodDeclaration>() {
+			@Override
+			public MethodDeclaration runObject() throws Exception {
+				return getLocalConstructorDeclaration0(creation);
+			}
+		});
+	}
+
+	/**
+	 * Implementation for {@link #getLocalConstructorDeclaration(ClassInstanceCreation)}.
+	 */
+	private static MethodDeclaration getLocalConstructorDeclaration0(ClassInstanceCreation creation) {
+		Assert.isNotNull(creation);
+		TypeDeclaration typeDeclaration = getEnclosingType(creation);
+		// check for local
+		{
+			String enclosedTypeName = getFullyQualifiedName(typeDeclaration, false);
+			String createdTypeName = getFullyQualifiedName(creation, false);
+			if (!enclosedTypeName.equals(createdTypeName)) {
+				return null;
+			}
+		}
+		//
+		IMethodBinding constructorBinding = getCreationBinding(creation);
+		String constructorSignature = getMethodSignature(constructorBinding);
+		return getMethodBySignature(typeDeclaration, constructorSignature);
+	}
+
+	/**
+	 * @return {@link List} of {@link MethodInvocation}'s of given method.
+	 */
+	public static List<ConstructorInvocation> getConstructorInvocations(final MethodDeclaration methodDeclaration) {
+		String key = "getConstructorInvocations";
+		return getValue(methodDeclaration, key, new RunnableObjectEx<List<ConstructorInvocation>>() {
+			@Override
+			public List<ConstructorInvocation> runObject() throws Exception {
+				return getConstructorInvocations0(methodDeclaration);
+			}
+		});
+	}
+
+	/**
+	 * Implementation for {@link #getConstructorInvocation2(MethodDeclaration)}.
+	 */
+	private static List<ConstructorInvocation> getConstructorInvocations0(MethodDeclaration methodDeclaration) {
+		final List<ConstructorInvocation> invocations = Lists.newArrayList();
+		// prepare required values
+		IMethodBinding requiredBinding = getMethodBinding(methodDeclaration);
+		if (requiredBinding == null) {
+			return invocations;
+		}
+		final String requiredSignature = getMethodSignature(methodDeclaration);
+		// visit type and check each method invocation
+		TypeDeclaration typeDeclaration = getEnclosingType(methodDeclaration);
+		typeDeclaration.accept(new ASTVisitor() {
+			@Override
+			public void endVisit(ConstructorInvocation node) {
+				IMethodBinding binding = getBinding(node);
+				if (binding != null) {
+					String signature = getMethodSignature(binding);
+					if (signature.equals(requiredSignature)) {
+						invocations.add(node);
+					}
+				}
+			}
+		});
+		//
+		return invocations;
+	}
+
+	/**
+	 * @return {@link List} of {@link ClassInstanceCreation}'s of given constructor in this
+	 *         {@link CompilationUnit}.
+	 */
+	public static List<ClassInstanceCreation> getClassInstanceCreations(MethodDeclaration constructor) {
+		final List<ClassInstanceCreation> creations = Lists.newArrayList();
+		final IMethodBinding constructorBinding = getMethodBinding(constructor);
+		constructor.getRoot().accept(new ASTVisitor() {
+			@Override
+			public void endVisit(ClassInstanceCreation node) {
+				IMethodBinding creationBinding = getCreationBinding(node);
+				if (creationBinding == constructorBinding) {
+					creations.add(node);
+				}
+			}
+		});
+		return creations;
+	}
+
+	/**
+	 * @return constructor {@link MethodDeclaration}'s of given {@link TypeDeclaration}.
+	 */
+	public static List<MethodDeclaration> getConstructors(TypeDeclaration typeDeclaration) {
+		List<MethodDeclaration> constructors = Lists.newArrayList();
+		for (MethodDeclaration method : typeDeclaration.getMethods()) {
+			if (method.isConstructor()) {
+				constructors.add(method);
+			}
+		}
+		return constructors;
+	}
+
+	/**
+	 * @return {@link List} of {@link ClassInstanceCreation}'s of given {@link TypeDeclaration} in
+	 *         this {@link CompilationUnit}.
+	 */
+	public static List<ClassInstanceCreation> getClassInstanceCreations(TypeDeclaration type) {
+		final List<ClassInstanceCreation> creations = Lists.newArrayList();
+		final String typeName = getFullyQualifiedName(type, false);
+		type.getRoot().accept(new ASTVisitor() {
+			@Override
+			public void endVisit(ClassInstanceCreation node) {
+				String nodeName = getFullyQualifiedName(node, false);
+				if (typeName.equals(nodeName)) {
+					creations.add(node);
+				}
+			}
+		});
+		return creations;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// JavaDoc
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if {@link Javadoc} of given {@link BodyDeclaration} has
+	 *         {@link TagElement} with given name.
+	 */
+	public static boolean hasJavaDocTag(BodyDeclaration declaration, String tagName) {
+		return getJavaDocTag(declaration, tagName) != null;
+	}
+
+	/**
+	 * @return the JavaDoc {@link TagElement} with given name, may be <code>null</code>.
+	 */
+	public static TagElement getJavaDocTag(BodyDeclaration declaration, String tagName) {
+		Javadoc javadoc = declaration.getJavadoc();
+		if (javadoc != null) {
+			for (TagElement tagElement : DomGenerics.tags(javadoc)) {
+				if (tagName.equals(tagElement.getTagName())) {
+					return tagElement;
+				}
+			}
+		}
+		return null;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Matching
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @param node
+	 *          the {@link ASTNode} to check.
+	 * @param signature
+	 *          the signature of {@link MethodInvocation}.
+	 *
+	 * @return <code>true</code> if given {@link ASTNode} is {@link MethodInvocation} with given
+	 *         signature. Note, no check for type, so use only when really required.
+	 */
+	public static boolean isMethodInvocation(ASTNode node, String signature) {
+		if (node instanceof MethodInvocation) {
+			MethodInvocation invocation = (MethodInvocation) node;
+			return getMethodSignature(invocation).equals(signature);
+		}
+		return false;
+	}
+
+	/**
+	 * @param node
+	 *          the {@link ASTNode} to check.
+	 * @param expressionType
+	 *          the type of {@link MethodInvocation} {@link Expression}.
+	 * @param signature
+	 *          the signature of {@link MethodInvocation}.
+	 *
+	 * @return <code>true</code> if given {@link ASTNode} is {@link MethodInvocation} of given
+	 *         {@link Expression} type and signature.
+	 */
+	public static boolean isMethodInvocation(ASTNode node, String expressionType, String signature) {
+		if (node instanceof MethodInvocation) {
+			MethodInvocation invocation = (MethodInvocation) node;
+			if (getMethodSignature(invocation).equals(signature)) {
+				Expression expression = invocation.getExpression();
+				if (expression == null) {
+					return expressionType == null;
+				}
+				return isSuccessorOf(expression, expressionType);
+			}
+		}
+		if (node instanceof SuperMethodInvocation) {
+			SuperMethodInvocation invocation = (SuperMethodInvocation) node;
+			IMethodBinding methodBinding = getMethodBinding(invocation);
+			return isSuccessorOf(methodBinding.getDeclaringClass(), expressionType)
+					&& getMethodSignature(methodBinding).equals(signature);
+		}
+		return false;
+	}
+
+	/**
+	 * @param node
+	 *          the {@link ASTNode} to check.
+	 * @param expressionType
+	 *          the type of {@link MethodInvocation} {@link Expression}.
+	 * @param signatures
+	 *          the array with signatures of {@link MethodInvocation}.
+	 *
+	 * @return <code>true</code> if given {@link ASTNode} is {@link MethodInvocation} of given
+	 *         {@link Expression} type and and one of the signatures.
+	 */
+	public static boolean isMethodInvocation(ASTNode node, String expressionType, String[] signatures) {
+		if (node instanceof MethodInvocation) {
+			MethodInvocation invocation = (MethodInvocation) node;
+			// check Expression
+			{
+				Expression expression = invocation.getExpression();
+				if (expression == null) {
+					if (expressionType != null) {
+						return false;
+					}
+				} else if (!isSuccessorOf(expression, expressionType)) {
+					return false;
+				}
+			}
+			// check signature
+			{
+				String signature = getMethodSignature(invocation);
+				for (String testSignature : signatures) {
+					if (signature.equals(testSignature)) {
+						return true;
+					}
+				}
+			}
+		}
+		return false;
+	}
+
+	/**
+	 * @param node
+	 *          the {@link ASTNode} to check.
+	 * @param typeName
+	 *          the name of type instantiated by {@link ClassInstanceCreation}.
+	 * @param signature
+	 *          the signature of constructor, including "&lt;init&gt;".
+	 *
+	 * @return <code>true</code> if given {@link ASTNode} is the {@link ClassInstanceCreation} of
+	 *         given type using given constructor.
+	 */
+	public static boolean isCreation(ASTNode node, String typeName, String signature) {
+		if (node instanceof ClassInstanceCreation) {
+			ClassInstanceCreation creation = (ClassInstanceCreation) node;
+			if (getFullyQualifiedName(creation, false).equals(typeName)) {
+				return getCreationSignature(creation).equals(signature);
+			}
+		}
+		return false;
+	}
+
+	/**
+	 * @param node
+	 *          the {@link ASTNode} to check.
+	 * @param typeName
+	 *          the name of type instantiated by {@link ClassInstanceCreation}.
+	 * @param signature
+	 *          the array of constructor signatures, including "&lt;init&gt;".
+	 *
+	 * @return <code>true</code> if given {@link ASTNode} is the {@link ClassInstanceCreation} of
+	 *         given type using one of the given constructor.
+	 */
+	public static boolean isCreation(ASTNode node, String typeName, String[] signatures) {
+		if (node instanceof ClassInstanceCreation) {
+			for (String signature : signatures) {
+				if (isCreation(node, typeName, signature)) {
+					return true;
+				}
+			}
+		}
+		return false;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Modifiers
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final int VISIBILITY_MASK = Modifier.PUBLIC
+			| Modifier.PROTECTED
+			| Modifier.PRIVATE;
+
+	/**
+	 * Returns <code>true</code> if given modifiers have one of the required visibility mask. For
+	 * example, if <code>modifiers</code> is <code>protected static final</code>, and and
+	 * <code>visibilityMask</code> is <code>public | protected</code>, then <code>true</code>
+	 * returned.
+	 *
+	 * @return <code>true</code> if given modifiers have one of the required visibility mask.
+	 */
+	public static boolean hasVisibility(int modifiers, int visibilityMask) {
+		return (modifiers & VISIBILITY_MASK & visibilityMask) != 0;
+	}
+
+	/**
+	 * @return <code>true</code> if given {@link BodyDeclaration} has "static" modifier.
+	 */
+	public static boolean isStatic(BodyDeclaration bodyDeclaration) {
+		int modifiers = bodyDeclaration.getModifiers();
+		return Modifier.isStatic(modifiers);
+	}
+
+	/**
+	 * @return <code>true</code> if given {@link IMethodBinding} has "static" modifier.
+	 */
+	public static boolean isStatic(IMethodBinding methodBinding) {
+		int modifiers = methodBinding.getModifiers();
+		return Modifier.isStatic(modifiers);
+	}
+
+	/**
+	 * @return <code>true</code> if given {@link ITypeBinding} has "static" modifier.
+	 */
+	public static boolean isStatic(ITypeBinding typeBinding) {
+		int modifiers = typeBinding.getModifiers();
+		return Modifier.isStatic(modifiers);
+	}
+
+	/**
+	 * @return <code>true</code> if given {@link IMethodBinding} has "abstract" modifier.
+	 */
+	public static boolean isAbstract(IMethodBinding methodBinding) {
+		int modifiers = methodBinding.getModifiers();
+		return Modifier.isAbstract(modifiers);
+	}
+
+	/**
+	 * @return <code>true</code> if given {@link MethodDeclaration} has "abstract" modifier.
+	 */
+	public static boolean isAbstract(MethodDeclaration method) {
+		IMethodBinding methodBinding = getMethodBinding(method);
+		return isAbstract(methodBinding);
+	}
+
+	/**
+	 * @return <code>true</code> if given {@link ITypeBinding} has "abstract" modifier.
+	 */
+	public static boolean isAbstract(ITypeBinding typeBinding) {
+		int modifiers = typeBinding.getModifiers();
+		return Modifier.isAbstract(modifiers);
+	}
+
+	/**
+	 * @return <code>true</code> if given {@link TypeDeclaration} has "abstract" modifier.
+	 */
+	public static boolean isAbstract(TypeDeclaration type) {
+		ITypeBinding typeBinding = getTypeBinding(type);
+		return isAbstract(typeBinding);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Searching in bindings
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @param typeBinding
+	 *          the {@link ITypeBinding} to get methods from.
+	 * @param visibilityMask
+	 *          the mask of JDT {@link Modifier} flags, to limit methods visibility. If
+	 *          {@link Modifier#PRIVATE} is included, it will be used only for given
+	 *          {@link ITypeBinding}, but not for its super classes.
+	 *
+	 * @return the {@link IMethodBinding} for all methods in given {@link ITypeBinding} and its super
+	 *         classes.
+	 */
+	public static List<IMethodBinding> getMethodBindings(ITypeBinding typeBinding, int visibilityMask) {
+		List<IMethodBinding> methods = Lists.newArrayList();
+		addMethodBindings(methods, typeBinding, visibilityMask);
+		return methods;
+	}
+
+	/**
+	 * @param typeBinding
+	 *          the {@link ITypeBinding} to get fields from.
+	 * @param visibilityMask
+	 *          the mask of JDT {@link Modifier} flags, to limit fields visibility. If
+	 *          {@link Modifier#PRIVATE} is included, it will be used only for given
+	 *          {@link ITypeBinding}, but not for its super classes.
+	 *
+	 * @return the {@link IVariableBinding} for all fields in given {@link ITypeBinding} and its super
+	 *         classes.
+	 */
+	public static List<IVariableBinding> getFieldBindings(ITypeBinding typeBinding, int visibilityMask) {
+		List<IVariableBinding> fields = Lists.newArrayList();
+		addFieldBindings(fields, typeBinding, visibilityMask);
+		return fields;
+	}
+
+	/**
+	 * @param methods
+	 *          the {@link IMethodBinding}'s container to add methods.
+	 * @param typeBinding
+	 *          the {@link ITypeBinding} to get methods from.
+	 * @param visibilityMask
+	 *          the mask of JDT {@link Modifier} flags, to limit methods visibility. If
+	 *          {@link Modifier#PRIVATE} is included, it will be used only for given
+	 *          {@link ITypeBinding}, but not for its super classes.
+	 *
+	 * @return the {@link IMethodBinding} for all methods in given {@link ITypeBinding} and its super
+	 *         classes.
+	 */
+	private static void addMethodBindings(List<IMethodBinding> methods,
+			ITypeBinding typeBinding,
+			int visibilityMask) {
+		if (typeBinding != null) {
+			for (IMethodBinding methodBinding : typeBinding.getDeclaredMethods()) {
+				if (hasVisibility(methodBinding.getModifiers(), visibilityMask)) {
+					methods.add(methodBinding);
+				}
+			}
+			// process super Class
+			visibilityMask &= ~Modifier.PRIVATE;
+			addMethodBindings(methods, typeBinding.getSuperclass(), visibilityMask);
+		}
+	}
+
+	/**
+	 * @param fields
+	 *          the {@link IVariableBinding}'s container to add fields.
+	 * @param typeBinding
+	 *          the {@link ITypeBinding} to get fields from.
+	 * @param visibilityMask
+	 *          the mask of JDT {@link Modifier} flags, to limit fields visibility. If
+	 *          {@link Modifier#PRIVATE} is included, it will be used only for given
+	 *          {@link ITypeBinding}, but not for its super classes.
+	 *
+	 * @return the {@link IVariableBinding} for all fields in given {@link ITypeBinding} and its super
+	 *         classes.
+	 */
+	private static void addFieldBindings(List<IVariableBinding> fields,
+			ITypeBinding typeBinding,
+			int visibilityMask) {
+		if (typeBinding != null) {
+			for (IVariableBinding fieldBinding : typeBinding.getDeclaredFields()) {
+				if (hasVisibility(fieldBinding.getModifiers(), visibilityMask)) {
+					fields.add(fieldBinding);
+				}
+			}
+			// process super Class
+			visibilityMask &= ~Modifier.PRIVATE;
+			addFieldBindings(fields, typeBinding.getSuperclass(), visibilityMask);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Field utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @param node
+	 *          the {@link ASTNode} that represents should be qualifier of field.
+	 *
+	 * @return the {@link Expression} ({@link QualifiedName} or {@link FieldAccess}) used as left side
+	 *         of {@link Assignment} to some field. May return <code>null</code>, if given node is not
+	 *         left part of {@link Assignment}.
+	 */
+	public static Expression getFieldAssignment(ASTNode node) {
+		// FieldAccess = value
+		if (node.getLocationInParent() == FieldAccess.EXPRESSION_PROPERTY) {
+			FieldAccess fieldAccess = (FieldAccess) node.getParent();
+			if (fieldAccess.getLocationInParent() == Assignment.LEFT_HAND_SIDE_PROPERTY) {
+				return fieldAccess;
+			}
+		}
+		// QualifiedName = value
+		if (node.getLocationInParent() == QualifiedName.QUALIFIER_PROPERTY) {
+			QualifiedName qualifiedName = (QualifiedName) node.getParent();
+			if (qualifiedName.getLocationInParent() == Assignment.LEFT_HAND_SIDE_PROPERTY) {
+				return qualifiedName;
+			}
+		}
+		// not an Assignment part
+		return null;
+	}
+
+	/**
+	 * @param fieldAccess
+	 *          the {@link QualifiedName} or {@link FieldAccess} used to access some field.
+	 *
+	 * @return the "qualifier" part of accessed field.
+	 */
+	public static Expression getFieldAccessQualifier(Expression fieldAccess) {
+		if (fieldAccess instanceof FieldAccess) {
+			return ((FieldAccess) fieldAccess).getExpression();
+		} else if (fieldAccess instanceof QualifiedName) {
+			return ((QualifiedName) fieldAccess).getQualifier();
+		}
+		return null;
+	}
+
+	/**
+	 * @param fieldAccess
+	 *          the {@link QualifiedName} or {@link FieldAccess} used to access some field.
+	 *
+	 * @return the {@link SimpleName} part of accessed field.
+	 */
+	public static SimpleName getFieldAccessName(Expression fieldAccess) {
+		if (fieldAccess instanceof FieldAccess) {
+			return ((FieldAccess) fieldAccess).getName();
+		} else if (fieldAccess instanceof QualifiedName) {
+			return ((QualifiedName) fieldAccess).getName();
+		}
+		return null;
+	}
+
+	/**
+	 * @param fieldName
+	 *          the name of field.
+	 *
+	 * @return the {@link VariableDeclarationFragment} for given field name or <code>null</code> if
+	 *         not field found.
+	 */
+	public static VariableDeclarationFragment getFieldFragmentByName(TypeDeclaration typeDeclaration,
+			String fieldName) {
+		for (FieldDeclaration fieldDeclaration : typeDeclaration.getFields()) {
+			for (VariableDeclarationFragment fragment : DomGenerics.fragments(fieldDeclaration)) {
+				if (fieldName.equals(fragment.getName().getIdentifier())) {
+					return fragment;
+				}
+			}
+		}
+		return null;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// "Enclosing" utilities
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link ASTNode} that encloses given position, such that there are no any child
+	 *         {@link ASTNode} that also encloses same position.
+	 */
+	public static ASTNode getEnclosingNode(ASTNode root, final int position) {
+		final ASTNode result[] = new ASTNode[1];
+		root.accept(new ASTVisitor() {
+			@Override
+			public void postVisit(ASTNode node) {
+				int start = node.getStartPosition();
+				int length = node.getLength();
+				if (result[0] == null && start <= position && position < start + length) {
+					result[0] = node;
+				}
+			}
+		});
+		return result[0];
+	}
+
+	/**
+	 * @return the {@link Statement} that encloses given {@link ASTNode}.
+	 */
+	public static Statement getEnclosingStatement(ASTNode node) {
+		return getEnclosingNode(node, Statement.class);
+	}
+
+	/**
+	 * @return the {@link Block} that encloses given {@link ASTNode}.
+	 */
+	public static Block getEnclosingBlock(ASTNode node) {
+		return getEnclosingNode(node, Block.class);
+	}
+
+	/**
+	 * @return the {@link FieldDeclaration} that encloses given {@link ASTNode}.
+	 */
+	public static FieldDeclaration getEnclosingFieldDeclaration(ASTNode node) {
+		return getEnclosingNode(node, FieldDeclaration.class);
+	}
+
+	/**
+	 * @return the {@link MethodDeclaration} that encloses given {@link ASTNode}.
+	 */
+	public static MethodDeclaration getEnclosingMethod(ASTNode node) {
+		return getEnclosingNode(node, MethodDeclaration.class);
+	}
+
+	/**
+	 * @return the {@link MethodDeclaration} that encloses given {@link ASTNode} and is child of given
+	 *         {@link TypeDeclaration}.
+	 */
+	public static MethodDeclaration getEnclosingMethod(TypeDeclaration type, ASTNode node) {
+		MethodDeclaration[] methods = type.getMethods();
+		for (MethodDeclaration method : methods) {
+			if (contains(method, node)) {
+				return method;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * @return the {@link TypeDeclaration} that encloses given {@link ASTNode}.
+	 */
+	public static TypeDeclaration getEnclosingType(ASTNode node) {
+		return getEnclosingNode(node, TypeDeclaration.class);
+	}
+
+	/**
+	 * @return the top-level {@link TypeDeclaration} that encloses given {@link ASTNode}.
+	 */
+	public static TypeDeclaration getEnclosingTypeTop(ASTNode node) {
+		TypeDeclaration typeDeclaration = getEnclosingType(node);
+		while (true) {
+			TypeDeclaration declaringType = getEnclosingType(typeDeclaration.getParent());
+			if (declaringType == null) {
+				break;
+			}
+			typeDeclaration = declaringType;
+		}
+		return typeDeclaration;
+	}
+
+	/**
+	 * @return the parent of {@link ASTNode} with given class (or its subclass) or <code>null</code>.
+	 */
+	@SuppressWarnings("unchecked")
+	public static <T> T getEnclosingNode(ASTNode node, Class<T> resultClass) {
+		while (node != null) {
+			if (resultClass.isAssignableFrom(node.getClass())) {
+				return (T) node;
+			}
+			node = node.getParent();
+		}
+		return null;
+	}
+
+	/**
+	 * @return the {@link TypeDeclaration} that contains given {@link MethodDeclaration}.
+	 */
+	public static TypeDeclaration getParentType(MethodDeclaration methodDeclaration) {
+		ASTNode parentNode = methodDeclaration.getParent();
+		if (parentNode instanceof AnonymousClassDeclaration) {
+			return AnonymousTypeDeclaration.create((AnonymousClassDeclaration) parentNode);
+		} else {
+			return (TypeDeclaration) parentNode;
+		}
+	}
+
+	/**
+	 * @return the {@link ASTNode} which is parent for both given nodes and not equal either. Can not
+	 *         be <code>null</code>.
+	 */
+	public static ASTNode getCommonParent(ASTNode node_1, ASTNode node_2) {
+		Assert.isNotNull(node_1, "Null node_1");
+		Assert.isNotNull(node_2, "Null node_2");
+		// prepare path from node_1 to CompilationUnit
+		Set<ASTNode> ancestors = Sets.newHashSet();
+		{
+			ASTNode node = node_1.getParent();
+			while (node != null) {
+				ancestors.add(node);
+				node = node.getParent();
+			}
+		}
+		// find first parent of node_2 on this path
+		ASTNode node = node_2.getParent();
+		while (true) {
+			if (ancestors.contains(node)) {
+				return node;
+			}
+			node = node.getParent();
+		}
+	}
+
+	/**
+	 * @return the {@link Block} which contains given nodes and not equal either. May be
+	 *         <code>null</code>.
+	 */
+	public static Block getCommonBlock(ASTNode node_1, ASTNode node_2) {
+		ASTNode commonParent = getCommonParent(node_1, node_2);
+		return getEnclosingBlock(commonParent);
+	}
+
+	/**
+	 * @return the {@link Statement} which is direct child of {@link Block} and contains given node.
+	 */
+	public static Statement getStatementWithinBlock(Block block, ASTNode node) {
+		List<Statement> statements = DomGenerics.statements(block);
+		while (node != null) {
+			if (statements.contains(node)) {
+				return (Statement) node;
+			}
+			node = node.getParent();
+		}
+		return null;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Statements
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link Statement} directly after given in same {@link Block}, may be
+	 *         <code>null</code>.
+	 */
+	public static Statement getNextStatement(Statement statement) {
+		Block block = (Block) statement.getParent();
+		List<Statement> statements = DomGenerics.statements(block);
+		return GenericsUtils.getNextOrNull(statements, statement);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Checks
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if given {@link ASTNode} is dangling, i.e. disconnected from
+	 *         {@link CompilationUnit}.
+	 */
+	public static boolean isDanglingNode(ASTNode node) {
+		return !(node.getRoot() instanceof CompilationUnit);
+	}
+
+	/**
+	 * @return <code>true</code> if <code>node_1</code> contains <code>node_2</code>.
+	 */
+	public static boolean contains(ASTNode node_1, ASTNode node_2) {
+		while (node_2 != null) {
+			node_2 = node_2.getParent();
+			if (node_1 == node_2) {
+				return true;
+			}
+		}
+		return false;
+	}
+
+	/**
+	 * Removes "dangling" {@link ASTNode}-s.
+	 */
+	public static void removeDanglingNodes(Iterable<? extends ASTNode> nodes) {
+		Iterator<? extends ASTNode> I = nodes.iterator();
+		while (I.hasNext()) {
+			ASTNode node = I.next();
+			if (isDanglingNode(node)) {
+				I.remove();
+			}
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Source range utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the index of beginning source for given node.
+	 */
+	public static int getSourceBegin(ASTNode node) {
+		return node.getStartPosition();
+	}
+
+	/**
+	 * @return the index of ending source for given node.
+	 */
+	public static int getSourceEnd(ASTNode node) {
+		return node.getStartPosition() + node.getLength();
+	}
+
+	/**
+	 * Sets the index of beginning source for given node.
+	 */
+	public static void setSourceBegin(ASTNode node, int begin) {
+		node.setSourceRange(begin, node.getLength());
+	}
+
+	/**
+	 * Sets the index of beginning source for given node, with keeping end position (i.e. update also
+	 * length).
+	 */
+	public static void setSourceBegin_keepEnd(ASTNode node, int begin) {
+		int delta = node.getStartPosition() - begin;
+		int newLength = node.getLength() + delta;
+		node.setSourceRange(begin, newLength);
+	}
+
+	/**
+	 * Sets source length to match end position of "source" node.
+	 */
+	public static void setSourceEnd(ASTNode targetNode, ASTNode sourceNode) {
+		int begin = targetNode.getStartPosition();
+		int end = getSourceEnd(sourceNode);
+		targetNode.setSourceRange(begin, end - begin);
+	}
+
+	/**
+	 * Sets the length of source for given node.
+	 */
+	public static void setSourceLength(ASTNode node, int length) {
+		node.setSourceRange(node.getStartPosition(), length);
+	}
+
+	/**
+	 * Move given {@link ASTNode} to the new position. This methods just changes start positions for
+	 * given node and its children, it does not modifies source.
+	 */
+	public static void moveNode(ASTNode nodeToMove, int targetPosition) {
+		int sourcePosition = nodeToMove.getStartPosition();
+		final int moveDelta = targetPosition - sourcePosition;
+		nodeToMove.accept(new ASTVisitor(true) {
+			@Override
+			public void postVisit(ASTNode node) {
+				node.setSourceRange(node.getStartPosition() + moveDelta, node.getLength());
+			}
+		});
+	}
+
+	/**
+	 * Copies source range from given source node to the given target {@link ASTNode}.
+	 */
+	public static void copySourceRange(ASTNode targetNode, ASTNode sourceNode) {
+		targetNode.setSourceRange(sourceNode.getStartPosition(), sourceNode.getLength());
+	}
+
+	/**
+	 * Sets source range for given target node same as beginning of "beginNode" and end of "endNode".
+	 */
+	public static void setSourceRange(ASTNode targetNode, ASTNode beginNode, ASTNode endNode) {
+		int beginPosition = getSourceBegin(beginNode);
+		int endPosition = getSourceEnd(endNode);
+		targetNode.setSourceRange(beginPosition, endPosition - beginPosition);
+	}
+
+	/**
+	 * Sets beginning of source range for given target node to same as position as given source node,
+	 * and length - same as length of source plus given "delta".
+	 *
+	 * @param delta
+	 *          is used mostly for {@link Statement} creation, when we should add ';' at the end.
+	 */
+	public static void setSourceRange(ASTNode targetNode, ASTNode sourceNode, int delta) {
+		targetNode.setSourceRange(sourceNode.getStartPosition(), sourceNode.getLength() + delta);
+	}
+
+	/**
+	 * Sets beginning of source range for given target node to same as position as given begin node,
+	 * and length - same as length of source plus given "delta".
+	 *
+	 * @param delta
+	 *          is used mostly for {@link Statement} creation, when we should add ';' at the end.
+	 */
+	public static void setSourceRange(ASTNode targetNode,
+			ASTNode beginNode,
+			ASTNode endNode,
+			int delta) {
+		int begin = getSourceBegin(beginNode);
+		int end = getSourceEnd(endNode) + delta;
+		targetNode.setSourceRange(begin, end - begin);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Variable's
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @param root
+	 *          the starting node
+	 *
+	 * @return all {@link VariableDeclaration}'s that exists in {@link ASTNode}'s hierarchy.
+	 */
+	public static List<VariableDeclaration> getVariableDeclarationsAll(ASTNode root) {
+		// prepare gatherer
+		ListGatherer<VariableDeclaration> gatherer = new ListGatherer<VariableDeclaration>() {
+			@Override
+			public void postVisit(ASTNode node) {
+				if (node instanceof VariableDeclaration) {
+					addResult((VariableDeclaration) node);
+				}
+			}
+		};
+		// gather variables
+		root.accept(gatherer);
+		// OK, final result
+		return gatherer.getResultList();
+	}
+
+	/**
+	 * Return {@link VariableDeclaration}'s such that at their positions they can see new
+	 * {@link VariableDeclaration} declared at given position. So, new {@link VariableDeclaration} can
+	 * be shadowed by existing one, if it will have same name.
+	 *
+	 * @param root
+	 *          the starting node
+	 * @param position
+	 *          the position to search visible variable declarations
+	 *
+	 * @return an possibly shadowing {@link VariableDeclaration}'s.
+	 */
+	public static List<VariableDeclaration> getVariableDeclarationsAfter(ASTNode root, int position) {
+		ASTNode targetNode = getEnclosingNode(root, position);
+		// prepare gatherer
+		ListGatherer<VariableDeclaration> gatherer = new ListGatherer<VariableDeclaration>() {
+			@Override
+			public void postVisit(ASTNode node) {
+				if (node instanceof VariableDeclaration) {
+					addResult((VariableDeclaration) node);
+				}
+			}
+		};
+		// prepare block
+		Block targetBlock = getEnclosingBlock(targetNode);
+		TypeDeclaration targetType = getEnclosingType(targetNode);
+		if (targetBlock != null) {
+			for (Statement statement : DomGenerics.statements(targetBlock)) {
+				if (statement.getStartPosition() >= position) {
+					statement.accept(gatherer);
+				}
+			}
+		} else if (targetType != null) {
+			// when target it type, possible shadows are in methods (with recursion)
+			for (BodyDeclaration bodyDeclaration : DomGenerics.bodyDeclarations(targetType)) {
+				if (!(bodyDeclaration instanceof FieldDeclaration)) {
+					bodyDeclaration.accept(gatherer);
+				}
+			}
+		}
+		// OK, final result
+		return gatherer.getResultList();
+	}
+
+	/**
+	 * @param root
+	 *          the starting node
+	 * @param position
+	 *          the position to search visible variable declarations
+	 *
+	 * @return the {@link VariableDeclaration}'s visible at given position.
+	 */
+	public static List<VariableDeclaration> getVariableDeclarationsVisibleAt(ASTNode root,
+			int position) {
+		List<VariableDeclaration> declarations = Lists.newArrayList();
+		ASTNode node = getEnclosingNode(root, position);
+		// if we hit the empty space inside of block, process all statements before given position
+		if (node instanceof Block) {
+			Block block = (Block) node;
+			for (Statement statement : DomGenerics.statements(block)) {
+				if (statement.getStartPosition() < position) {
+					addStatementVariableDeclarations(declarations, statement);
+				}
+			}
+		}
+		// go up along hierarchy and remember variable declarations
+		while (node != null) {
+			// type - add fields
+			if (node instanceof TypeDeclaration) {
+				TypeDeclaration type = (TypeDeclaration) node;
+				for (FieldDeclaration fieldDeclaration : type.getFields()) {
+					declarations.addAll(DomGenerics.fragments(fieldDeclaration));
+				}
+			}
+			// method - add parameters
+			if (node instanceof MethodDeclaration) {
+				MethodDeclaration method = (MethodDeclaration) node;
+				declarations.addAll(DomGenerics.parameters(method));
+			}
+			// statement - process siblings above
+			if (node instanceof Statement && node.getParent() instanceof Block) {
+				Statement statement = (Statement) node;
+				Block block = (Block) statement.getParent();
+				for (Statement siblingStatement : DomGenerics.statements(block)) {
+					if (siblingStatement == statement) {
+						break;
+					}
+					addStatementVariableDeclarations(declarations, siblingStatement);
+				}
+			}
+			// go to parent
+			node = node.getParent();
+		}
+		// OK, final result
+		return declarations;
+	}
+
+	/**
+	 * Add {@link VariableDeclarationFragment}'s if given statement is
+	 * {@link VariableDeclarationStatement}.
+	 */
+	private static void addStatementVariableDeclarations(List<VariableDeclaration> declarations,
+			Statement statement) {
+		if (statement instanceof VariableDeclarationStatement) {
+			VariableDeclarationStatement variableStatement = (VariableDeclarationStatement) statement;
+			declarations.addAll(DomGenerics.fragments(variableStatement));
+		}
+	}
+
+	/**
+	 * @return <code>true</code> if given {@link ASTNode} is single variable {@link SimpleName} or
+	 *         {@link FieldAccess} like "this.fieldName".
+	 */
+	public static boolean isVariable(ASTNode variable) {
+		// FieldAccess
+		if (variable instanceof FieldAccess) {
+			FieldAccess fieldAccess = (FieldAccess) variable;
+			return fieldAccess.getExpression() instanceof ThisExpression;
+		}
+		// SimpleName
+		if (variable instanceof SimpleName) {
+			StructuralPropertyDescriptor locationInParent = variable.getLocationInParent();
+			if (locationInParent == MethodInvocation.NAME_PROPERTY
+					|| locationInParent == SimpleType.NAME_PROPERTY
+					|| locationInParent == FieldAccess.NAME_PROPERTY
+					|| locationInParent == QualifiedName.NAME_PROPERTY
+					|| locationInParent == MethodDeclaration.NAME_PROPERTY
+					|| locationInParent == TypeDeclaration.NAME_PROPERTY) {
+				return false;
+			}
+			// variable has binding
+			return getVariableBinding(variable) != null;
+		}
+		// unknown ASTNode
+		return false;
+	}
+
+	/**
+	 * @return the name of given variable.
+	 */
+	public static String getVariableName(ASTNode variable) {
+		return getVariableSimpleName(variable).getIdentifier();
+	}
+
+	/**
+	 * @return the {@link SimpleName} of given variable.
+	 */
+	public static SimpleName getVariableSimpleName(ASTNode variable) {
+		if (variable instanceof FieldAccess) {
+			return ((FieldAccess) variable).getName();
+		}
+		return (SimpleName) variable;
+	}
+
+	/**
+	 * Calculate actual value for reusable variables & fields.
+	 *
+	 * @param expression
+	 *          the {@link Expression} for actualization.
+	 * @return the {@link Expression} identified actual value for original expression.
+	 */
+	public static Expression getActualVariableExpression(Expression expression) {
+		if (AstNodeUtils.isVariable(expression)) {
+			MethodDeclaration enclosingMethod = AstNodeUtils.getEnclosingMethod(expression);
+			ASTNode lastAssignment =
+					ExecutionFlowUtils.getLastAssignment(
+							new ExecutionFlowDescription(enclosingMethod),
+							expression);
+			if (lastAssignment != null) {
+				MethodDeclaration method = AstNodeUtils.getEnclosingMethod(lastAssignment);
+				// Note: we need assignment from enclosing method or field initializer
+				if (method == null || method == enclosingMethod) {
+					if (lastAssignment instanceof Assignment) {
+						Assignment assignment = (Assignment) lastAssignment;
+						return assignment.getRightHandSide();
+					} else if (lastAssignment instanceof VariableDeclarationFragment) {
+						VariableDeclarationFragment fragment = (VariableDeclarationFragment) lastAssignment;
+						Expression initializer = fragment.getInitializer();
+						if (initializer != null) {
+							return initializer;
+						}
+					}
+				}
+			}
+		}
+		return expression;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Package
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the name of package, may be empty for default package.
+	 */
+	public static String getPackageName(CompilationUnit unit) {
+		PackageDeclaration packageDeclaration = unit.getPackage();
+		return packageDeclaration != null ? packageDeclaration.getName().getFullyQualifiedName() : "";
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Literals
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if all given {@link Expression}'s is literals, see
+	 *         {@link #isLiteral(Expression)}.
+	 */
+	public static boolean areLiterals(List<Expression> expressions) {
+		for (Expression expression : expressions) {
+			if (!isLiteral(expression)) {
+				return false;
+			}
+		}
+		return true;
+	}
+
+	/**
+	 * @return <code>true</code> if given {@link Expression} is literal, i.e. may be evaluated without
+	 *         outer context.
+	 */
+	public static boolean isLiteral(Expression expression) {
+		if (expression instanceof BooleanLiteral
+				|| expression instanceof NumberLiteral
+				|| expression instanceof StringLiteral
+				|| expression instanceof NullLiteral
+				|| expression instanceof QualifiedName) {
+			return true;
+		}
+		if (expression instanceof CastExpression) {
+			CastExpression castExpression = (CastExpression) expression;
+			return isLiteral(castExpression.getExpression());
+		}
+		if (expression instanceof PrefixExpression) {
+			PrefixExpression prefixExpression = (PrefixExpression) expression;
+			return isLiteral(prefixExpression.getOperand());
+		}
+		if (expression instanceof InfixExpression) {
+			InfixExpression infixExpression = (InfixExpression) expression;
+			List<Expression> operands = DomGenerics.allOperands(infixExpression);
+			return areLiterals(operands);
+		}
+		return false;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Caching
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@SuppressWarnings("unchecked")
+	private static <T> T getValue(ASTNode node, String key, RunnableObjectEx<T> evaluator) {
+		// if "null", don't use caching
+		if (node == null) {
+			return ExecutionUtils.runObject(evaluator);
+		}
+		// prepare keys
+		String keyValue = "ASTNodeUtilities." + key;
+		String keyHas = keyValue + ".has";
+		// check if has cached value
+		if (node.getProperty(keyHas) == Boolean.TRUE && isCacheUpToDate(node, key)) {
+			T value = (T) node.getProperty(keyValue);
+			return value;
+		}
+		// prepare value
+		T value = ExecutionUtils.runObject(evaluator);
+		node.setProperty(keyValue, value);
+		node.setProperty(keyHas, Boolean.TRUE);
+		// done
+		return value;
+	}
+
+	/**
+	 * @return <code>false</code> if {@link AST} was modified since last request. Then marks it as not
+	 *         modified, so next call will say that it is not modified.
+	 */
+	private static boolean isCacheUpToDate(ASTNode node, String key) {
+		String keyStamp = "ASTNodeUtilities." + key + ".stamp";
+		long currentStamp = node.getAST().modificationCount();
+		Long nodeStamp = (Long) node.getProperty(keyStamp);
+		node.setProperty(keyStamp, currentStamp);
+		return nodeStamp != null && nodeStamp.longValue() == currentStamp;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ast/AstParser.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ast/AstParser.java
index ce5d5a088..5fb4e45cb 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ast/AstParser.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ast/AstParser.java
@@ -72,893 +72,893 @@
  * @coverage core.util.ast
  */
 public final class AstParser {
-  public static final String KEY_TYPE_BINDING = "TYPE_BINDING";
-  public static final String KEY_METHOD_BINDING = "METHOD_BINDING";
-  public static final String KEY_VARIABLE_BINDING = "VARIABLE_BINDING";
-  public static final String KEY_IGNORE_THIS_METHOD = "Ignore this method for parsing context";
-  private final AstEditor m_editor;
-  private final BindingContext m_context;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  AstParser(AstEditor editor) {
-    m_editor = editor;
-    m_context = m_editor.getBindingContext();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parsing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the new {@link Expression} for given source and position.
-   */
-  public Expression parseExpression(int position, String src) throws Exception {
-    // special handling for "null"
-    if ("null".equals(src)) {
-      Expression expression = getAst().newNullLiteral();
-      expression.setSourceRange(position, "null".length());
-      return expression;
-    }
-    // prepare expression
-    Expression expression;
-    {
-      String source = "java.lang.System.out.println(" + src + ");";
-      ExpressionStatement statement = (ExpressionStatement) parseStatement(position, source);
-      MethodInvocation invocation = (MethodInvocation) statement.getExpression();
-      expression = (Expression) invocation.arguments().get(0);
-      // replace expression to make our expression free
-      {
-        SimpleName fakeExpression = getAst().newSimpleName("foo");
-        DomGenerics.arguments(invocation).set(0, fakeExpression);
-      }
-    }
-    // set correct position
-    AstNodeUtils.moveNode(expression, position);
-    return expression;
-  }
-
-  /**
-   * @return the new {@link Statement} for given source and position.
-   *
-   * @param position
-   *          the position when given <code>src</code> should start
-   * @param src
-   *          the source (possible with leading whitespaces) that contains {@link Statement}
-   */
-  public Statement parseStatement(int position, String src) throws Exception {
-    String source = "";
-    source += getSourceUnitHeader();
-    // open class and constructor
-    {
-      TypeDeclaration typeDeclaration = m_editor.getEnclosingType(position);
-      source += getClassDeclarationHeader(typeDeclaration);
-      source += getOpenConstructorSource(typeDeclaration);
-    }
-    // add visible variables
-    source += getVisibleVariablesCode(position);
-    // open anonymous class instance, if present
-    String anonymousClassSource = getAnonymousClassCode(position);
-    source += anonymousClassSource;
-    // add source of statement
-    int statementPosition = source.length();
-    source += src;
-    // close anonymous class instance, if present
-    if (!StringUtils.isEmpty(anonymousClassSource)) {
-      source += "}};\n";
-    }
-    // close method and class
-    source += "}\n";
-    source += "}";
-    // parse and find
-    try {
-      return (Statement) findNode(source, position, Statement.class, statementPosition);
-    } catch (DesignerException e) {
-      String problems = e.getParameters()[1];
-      throw new DesignerException(ICoreExceptionConstants.AST_PARSE_ERROR, e, src, problems);
-    }
-  }
-
-  /**
-   * @return the new {@link BodyDeclaration} for given source and position.
-   *
-   * @param position
-   *          the position when given <code>src</code> should start
-   * @param src
-   *          the source (possible with leading whitespace) that contains {@link BodyDeclaration}
-   */
-  public BodyDeclaration parseBodyDeclaration(int position, String src) throws Exception {
-    String source = m_editor.getSource();
-    source = source.substring(0, position) + src + source.substring(position);
-    // parse and find
-    try {
-      return (BodyDeclaration) findNode(source, position, BodyDeclaration.class, position);
-    } catch (DesignerException e) {
-      String problems = e.getParameters()[1];
-      throw new DesignerException(ICoreExceptionConstants.AST_PARSE_ERROR, e, src, problems);
-    }
-  }
-
-  /**
-   * @return the new {@link ImportDeclaration} for given name and position.
-   */
-  public ImportDeclaration parseImportDeclaration(int position, String qualifiedName)
-      throws Exception {
-    String source = "import " + qualifiedName + ";";
-    source += "class Clazz {}";
-    return (ImportDeclaration) findNode(source, position, ImportDeclaration.class, 0);
-  }
-
-  /**
-   * @return the {@link Type} for given qualified name.
-   */
-  public Type parseQualifiedType(int position, String name) throws Exception {
-    VariableDeclarationStatement statement =
-        (VariableDeclarationStatement) parseStatement(position, name + " __parseName;");
-    Type type = statement.getType();
-    statement.setType(type.getAST().newPrimitiveType(PrimitiveType.VOID));
-    return type;
-  }
-
-  /**
-   * @return the copy of given {@link Type} on given position.
-   */
-  public Type parseType(int position, Type sourceType) throws Exception {
-    // prepare new type
-    Type newType;
-    if (sourceType instanceof PrimitiveType) {
-      PrimitiveType primitiveSourceType = (PrimitiveType) sourceType;
-      newType = getAst().newPrimitiveType(primitiveSourceType.getPrimitiveTypeCode());
-      newType.setSourceRange(position, newType.toString().length());
-    } else {
-      // prepare name of type
-      Name newTypeName;
-      {
-        String typeString = m_editor.getSource(sourceType);
-        if (typeString.indexOf('.') == -1) {
-          newTypeName = parseSimpleName(position, typeString);
-        } else {
-          newTypeName = parseQualifiedName(position, typeString);
-        }
-      }
-      // create type for name
-      newType = getAst().newSimpleType(newTypeName);
-      AstNodeUtils.copySourceRange(newType, newTypeName);
-    }
-    // copy type binding
-    {
-      ITypeBinding sourceTypeBinding = AstNodeUtils.getTypeBinding(sourceType);
-      ITypeBinding newTypeBinding = m_context.get(sourceTypeBinding);
-      newType.setProperty(KEY_TYPE_BINDING, newTypeBinding);
-    }
-    // return created type
-    return newType;
-  }
-
-  /**
-   * @return the {@link SimpleName} for given identifier.
-   *
-   *         NB! This method should not be used directly, use for example
-   *         {@link #parseVariable(int, String, ITypeBinding, boolean, int)} instead.
-   */
-  public SimpleName parseSimpleName(int position, String identifier) {
-    SimpleName simpleName = getAst().newSimpleName(identifier);
-    simpleName.setSourceRange(position, identifier.length());
-    return simpleName;
-  }
-
-  /**
-   * @return the {@link QualifiedName} for given name.
-   */
-  public QualifiedName parseQualifiedName(int startPosition, String src) {
-    String parts[] = StringUtils.split(src, '.');
-    Assert.isTrue(parts.length >= 2);
-    // build QualifiedName
-    Name result = null;
-    {
-      int currentPosition = startPosition;
-      for (int i = 0; i < parts.length; i++) {
-        String part = parts[i];
-        //
-        if (result == null) {
-          result = parseSimpleName(currentPosition, part);
-        } else {
-          currentPosition++;
-          result = getAst().newQualifiedName(result, parseSimpleName(currentPosition, part));
-        }
-        //
-        currentPosition += part.length();
-        result.setSourceRange(startPosition, currentPosition - startPosition);
-      }
-    }
-    // return result
-    return (QualifiedName) result;
-  }
-
-  /**
-   * @return the {@link SimpleName} for variable with given identifier, type and field/modifiers
-   *         flags.
-   */
-  public SimpleName parseVariable(int position,
-      String identifier,
-      ITypeBinding declaringClass,
-      ITypeBinding type,
-      boolean field,
-      int modifiers) {
-    SimpleName simpleName = parseSimpleName(position, identifier);
-    simpleName.setProperty(KEY_TYPE_BINDING, m_context.get(type));
-    simpleName.setProperty(
-        KEY_VARIABLE_BINDING,
-        m_context.get(identifier, declaringClass, type, field, modifiers));
-    return simpleName;
-  }
-
-  /**
-   * @return the {@link SimpleType} with given identifier and binding.
-   */
-  public SimpleType parseSimpleType(int position, String identifier, ITypeBinding binding) {
-    SimpleName simpleName = parseSimpleName(position, identifier);
-    SimpleType simpleType = getAst().newSimpleType(simpleName);
-    simpleType.setProperty(KEY_TYPE_BINDING, m_context.get(binding));
-    AstNodeUtils.copySourceRange(simpleType, simpleName);
-    return simpleType;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Source utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the "header" of {@link CompilationUnit} source - package and imports.
-   */
-  private String getSourceUnitHeader() throws Exception {
-    CompilationUnit unit = m_editor.getAstUnit();
-    String header = "";
-    // add package
-    if (unit.getPackage() != null) {
-      header = "package " + unit.getPackage().getName().toString() + ";\n";
-    }
-    // add imports
-    for (ImportDeclaration declaration : DomGenerics.imports(unit)) {
-      header += m_editor.getSource(declaration) + "\n";
-    }
-    // return result
-    return header;
-  }
-
-  /**
-   * @return the source with declaring class that has same super-class, interfaces, declared inner
-   *         types, fields and methods.
-   */
-  private String getClassDeclarationHeader(TypeDeclaration typeDeclaration) {
-    String source = "";
-    // class or interface
-    {
-      ITypeBinding binding = AstNodeUtils.getTypeBinding(typeDeclaration);
-      if (binding.isInterface()) {
-        source += "interface ";
-      } else {
-        if (AstNodeUtils.isAbstract(binding)) {
-          source += "abstract ";
-        }
-        source += "class ";
-      }
-    }
-    // declare class
-    {
-      int nameBegin = AstNodeUtils.getSourceBegin(typeDeclaration.getName());
-      int openBrace = m_editor.indexOf("{", nameBegin);
-      source += m_editor.getSourceBeginEnd(nameBegin, openBrace);
-      source = source.trim();
-    }
-    // open class
-    source += " {\n";
-    // add inner types
-    {
-      TypeDeclaration[] innerTypes = typeDeclaration.getTypes();
-      for (TypeDeclaration innerType : innerTypes) {
-        if (AstNodeUtils.isStatic(innerType)) {
-          source += "static ";
-        }
-        source += getClassDeclarationHeader(innerType) + "}\n";
-      }
-    }
-    // add fields
-    {
-      FieldDeclaration[] fields = typeDeclaration.getFields();
-      for (FieldDeclaration field : fields) {
-        // ignore field with invisible type
-        if (!isVisibleType(field.getType())) {
-          continue;
-        }
-        // add source
-        source += getFieldSourceForParsingContext(field) + "\n";
-      }
-    }
-    // add enums (since they are not returned as inner types)
-    {
-      source += getEnumsDeclarations(typeDeclaration);
-    }
-    // add local methods
-    {
-      MethodDeclaration[] methods = typeDeclaration.getMethods();
-      for (MethodDeclaration method : methods) {
-        source += getMethodDeclarationSource(method);
-      }
-    }
-    // return opened type declaration
-    return source;
-  }
-
-  /**
-   * @return the source for declaring {@link MethodDeclaration}.
-   */
-  private String getMethodDeclarationSource(MethodDeclaration method) {
-    IMethodBinding binding = AstNodeUtils.getMethodBinding(method);
-    if (binding == null) {
-      return "";
-    }
-    // check if should be added
-    if (method.getProperty(KEY_IGNORE_THIS_METHOD) == Boolean.TRUE) {
-      return "";
-    }
-    if (binding.isConstructor() && isMethodOfTopType(method)) {
-      return "";
-    }
-    // OK, prepare source
-    String source = "";
-    // declare method
-    {
-      int sourceBegin = getMethodDeclarationSourceBegin(method);
-      int sourceEnd;
-      if (method.getBody() != null) {
-        sourceEnd = AstNodeUtils.getSourceBegin(method.getBody());
-      } else {
-        sourceEnd = AstNodeUtils.getSourceEnd(method);
-      }
-      source += m_editor.getSourceBeginEnd(sourceBegin, sourceEnd);
-      source = StringUtilities.normalizeWhitespaces(source);
-    }
-    // abstract or body
-    if (AstNodeUtils.isAbstract(binding)) {
-      // no body
-      source += "\n";
-    } else {
-      // open method
-      source += "{";
-      // constructor
-      if (binding.isConstructor()) {
-        source += getConstructorBodySource(method);
-      }
-      // add "return"
-      String returnTypeName = AstNodeUtils.getFullyQualifiedName(binding.getReturnType(), false);
-      if (!"void".equals(returnTypeName)) {
-        source += "return " + getDefaultValue(returnTypeName) + ";";
-      }
-      // close method
-      source += "}\n";
-    }
-    // result
-    return source;
-  }
-
-  private static String getConstructorBodySource(MethodDeclaration method) {
-    List<Statement> statements = DomGenerics.statements(method);
-    if (!statements.isEmpty()) {
-      if (statements.get(0) instanceof SuperConstructorInvocation) {
-        SuperConstructorInvocation invocation = (SuperConstructorInvocation) statements.get(0);
-        IMethodBinding binding = AstNodeUtils.getSuperBinding(invocation);
-        return "super" + getMethodArgumentsSource(binding);
-      }
-      if (statements.get(0) instanceof ConstructorInvocation) {
-        ConstructorInvocation invocation = (ConstructorInvocation) statements.get(0);
-        IMethodBinding binding = AstNodeUtils.getBinding(invocation);
-        return "this" + getMethodArgumentsSource(binding);
-      }
-    }
-    return "";
-  }
-
-  private static boolean isMethodOfTopType(MethodDeclaration method) {
-    ASTNode parentType = method.getParent();
-    return parentType.getParent() instanceof CompilationUnit;
-  }
-
-  private int getMethodDeclarationSourceBegin(MethodDeclaration method) {
-    // modifiers
-    {
-      List<ASTNode> modifiers = DomGenerics.modifiersNodes(method);
-      if (!modifiers.isEmpty()) {
-        return modifiers.get(0).getStartPosition();
-      }
-    }
-    // type parameters <T>
-    {
-      List<TypeParameter> parameters = DomGenerics.typeParameters(method);
-      if (!parameters.isEmpty()) {
-        int begin = parameters.get(0).getStartPosition();
-        begin = m_editor.indexOfCharBackward('<', begin);
-        return begin;
-      }
-    }
-    // return type
-    {
-      Type type = method.getReturnType2();
-      if (type != null) {
-        return type.getStartPosition();
-      }
-    }
-    // name
-    return method.getName().getStartPosition();
-  }
-
-  /**
-   * @returns the enum declarations if given {@link TypeDeclaration} has any within.
-   */
-  private String getEnumsDeclarations(TypeDeclaration typeDeclaration) {
-    String source = "";
-    List<EnumDeclaration> enums = DomGenerics.getEnums(typeDeclaration);
-    for (EnumDeclaration enumDeclaration : enums) {
-      source += "enum " + enumDeclaration.getName().getIdentifier();
-      // open enum
-      source += " {";
-      List<ASTNode> enumConstants = DomGenerics.getEnumConstants(enumDeclaration);
-      for (int i = 0; i < enumConstants.size(); i++) {
-        EnumConstantDeclaration declaration = (EnumConstantDeclaration) enumConstants.get(i);
-        source += declaration.getName().getIdentifier();
-        if (i == enumConstants.size() - 1) {
-          source += ";";
-        } else {
-          source += ", ";
-        }
-      }
-      source += "}\n";
-    }
-    return source;
-  }
-
-  /**
-   * @return the source of {@link FieldDeclaration} that can be used as context for parsing some
-   *         source.
-   */
-  private static String getFieldSourceForParsingContext(FieldDeclaration field) {
-    String fieldSource = "";
-    // add modifiers
-    {
-      int modifiers = field.getModifiers();
-      if ((modifiers & Modifier.STATIC) != 0) {
-        fieldSource += "static ";
-      }
-      if ((modifiers & Modifier.FINAL) != 0) {
-        fieldSource += "final ";
-      }
-    }
-    // add type
-    String typeName = AstNodeUtils.getFullyQualifiedName(field.getType(), false);
-    fieldSource += typeName + " ";
-    // add fragments, with default values
-    for (VariableDeclarationFragment fragment : DomGenerics.fragments(field)) {
-      if (!fieldSource.endsWith(" ")) {
-        fieldSource += ", ";
-      }
-      fieldSource += fragment.getName().getIdentifier() + "=" + getDefaultValue(typeName);
-    }
-    // finalize
-    fieldSource += ";";
-    return fieldSource;
-  }
-
-  private String getOpenConstructorSource(TypeDeclaration typeDeclaration) {
-    ITypeBinding typeBinding = AstNodeUtils.getTypeBinding(typeDeclaration);
-    ITypeBinding superTypeBinding = typeBinding.getSuperclass();
-    String constructorCode = typeDeclaration.getName().getIdentifier() + "(Object __wbp_param) {\n";
-    // prepare declared methods
-    IMethodBinding[] declaredMethods;
-    try {
-      declaredMethods = superTypeBinding.getDeclaredMethods();
-    } catch (Throwable e) {
-      declaredMethods = new IMethodBinding[0];
-    }
-    // try to find constructor in superclass
-    for (IMethodBinding methodBinding : declaredMethods) {
-      int modifiers = methodBinding.getModifiers();
-      // handle only public or protected constructor
-      if (methodBinding.isConstructor()
-          && (Modifier.isProtected(modifiers) || Modifier.isPublic(modifiers))) {
-        constructorCode += "super" + getMethodArgumentsSource(methodBinding);
-        break;
-      }
-    }
-    return constructorCode;
-  }
-
-  private static String getMethodArgumentsSource(IMethodBinding methodBinding) {
-    String source = "(";
-    // add parameters for constructor
-    ITypeBinding[] parameterTypes = methodBinding.getParameterTypes();
-    for (int i = 0; i < parameterTypes.length; i++) {
-      ITypeBinding parameterType = parameterTypes[i];
-      // add comma
-      if (i != 0) {
-        source += ", ";
-      }
-      // add default value for parameter
-      String parameterTypeName = AstNodeUtils.getFullyQualifiedName(parameterType, false);
-      source += getDefaultValue(parameterTypeName);
-    }
-    // OK, constructor found
-    source += ");";
-    return source;
-  }
-
-  /**
-   * @return the source that defines local variables with same type/name as all
-   *         {@link VariableDeclaration} 's visible at given position. We need this to be able to
-   *         resolve later type bindings for all expressions.
-   */
-  private String getVisibleVariablesCode(int position) {
-    StringBuffer sb = new StringBuffer();
-    List<VariableDeclaration> declarations =
-        AstNodeUtils.getVariableDeclarationsVisibleAt(m_editor.getAstUnit(), position);
-    for (VariableDeclaration declaration : declarations) {
-      // prepare type of variable
-      Type type = null;
-      if (declaration instanceof SingleVariableDeclaration) {
-        SingleVariableDeclaration parameter = (SingleVariableDeclaration) declaration;
-        type = parameter.getType();
-      } else if (declaration instanceof VariableDeclarationFragment) {
-        VariableDeclarationFragment fragment = (VariableDeclarationFragment) declaration;
-        if (fragment.getParent() instanceof FieldDeclaration) {
-          // we add all fields into TypeDeclaration
-          continue;
-        } else if (fragment.getParent() instanceof VariableDeclarationStatement) {
-          VariableDeclarationStatement statement =
-              (VariableDeclarationStatement) fragment.getParent();
-          type = statement.getType();
-        }
-      }
-      Assert.isNotNull(type);
-      // ignore invisible types
-      if (!isVisibleType(type)) {
-        continue;
-      }
-      // add declaration of local variable
-      {
-        ITypeBinding typeBinding = AstNodeUtils.getTypeBinding(type);
-        String typeName = AstNodeUtils.getFullyQualifiedName(typeBinding, false);
-        //
-        sb.append(typeName);
-        sb.append(' ');
-        sb.append(declaration.getName().getIdentifier());
-        sb.append(" = ");
-        sb.append(getDefaultValue(typeName));
-        sb.append(";\n");
-      }
-    }
-    return sb.toString();
-  }
-
-  /**
-   * @return <code>true</code> if given {@link Type} is visible externally.
-   */
-  private static boolean isVisibleType(Type type) {
-    ITypeBinding fieldTypeBinding = AstNodeUtils.getTypeBinding(type);
-    if (fieldTypeBinding == null) {
-      return false;
-    }
-    return true;
-  }
-
-  /**
-   * @return the source of default value for class with given name ('0' for primitives) and'null'
-   *         for objects.
-   */
-  public static String getDefaultValue(String className) {
-    // check for primitive type
-    if ("boolean".equals(className)) {
-      return "false";
-    } else if ("byte".equals(className)) {
-      return "(byte)0";
-    } else if ("char".equals(className)) {
-      return "'0'";
-    } else if ("short".equals(className)) {
-      return "(short)0";
-    } else if ("int".equals(className)) {
-      return "0";
-    } else if ("long".equals(className)) {
-      return "0L";
-    } else if ("float".equals(className)) {
-      return "0.0f";
-    } else if ("double".equals(className)) {
-      return "0.0";
-    }
-    // use "null" for Object
-    return "(" + className + ") null";
-  }
-
-  /**
-   * @return the source that opens anonymous class instance with initializer.
-   */
-  private String getAnonymousClassCode(int position) {
-    ASTNode node = m_editor.getEnclosingNode(position);
-    Initializer initializer = null;
-    AnonymousClassDeclaration declaration = null;
-    ClassInstanceCreation creation = null;
-    while (node != null) {
-      if (initializer != null && declaration != null && node instanceof Statement) {
-        break;
-      }
-      if (initializer == null && node instanceof Initializer) {
-        initializer = (Initializer) node;
-      }
-      if (declaration == null && node instanceof AnonymousClassDeclaration) {
-        declaration = (AnonymousClassDeclaration) node;
-        creation = (ClassInstanceCreation) declaration.getParent();
-      }
-      node = node.getParent();
-    }
-    // generate source
-    if (initializer != null && declaration != null) {
-      ITypeBinding typeBinding = declaration.resolveBinding().getSuperclass();
-      if (typeBinding != null) {
-        String typeName = AstNodeUtils.getFullyQualifiedName(typeBinding, false);
-        String argumentsSource = "";
-        List<Expression> arguments = DomGenerics.arguments(creation);
-        for (Expression argument : arguments) {
-          if (!StringUtils.isEmpty(argumentsSource)) {
-            argumentsSource += ", ";
-          }
-          argumentsSource += m_editor.getSource(argument);
-        }
-        return "new " + typeName + "(" + argumentsSource + ") { {";
-      }
-    }
-    // TODO
-    return "";
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Compilation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Parses given Java source and returns corresponding {@link CompilationUnit}.
-   */
-  private CompilationUnit parseCompilationUnit(String source) throws Exception {
-    return CodeUtils.parseCompilationUnit(source, m_editor.getJavaProject(), "Fake");
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parsing utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link AST} for this editor.
-   */
-  private AST getAst() {
-    return m_editor.getAstUnit().getAST();
-  }
-
-  /**
-   * Finds in {@link CompilationUnit} with given source an {@link ASTNode} at given position with
-   * given class.
-   *
-   * @param source
-   *          the source of {@link CompilationUnit} to parse
-   * @param targetPosition
-   *          we should selected {@link ASTNode} nearest to this position
-   * @param nodeClass
-   *          the class of {@link ASTNode} to select. We need it because several nodes with
-   *          different classes can begin in one position for example {@link ExpressionStatement}
-   *          and its {@link Expression}.
-   * @param nodePosition
-   *          the position in AST that corresponds <code>targetPosition</code>
-   */
-  private ASTNode findNode(String source,
-      int targetPosition,
-      Class<? extends ASTNode> nodeClass,
-      int nodePosition) throws Exception {
-    CompilationUnit compilationUnit = parseCompilationUnit(source);
-    try {
-      return findNode0(compilationUnit, targetPosition, nodeClass, nodePosition);
-    } catch (Throwable e) {
-      String problemsString = getProblemsString(compilationUnit);
-      throw new DesignerException(ICoreExceptionConstants.AST_PARSE_ERROR,
-          e,
-          source,
-          problemsString);
-    }
-  }
-
-  private static String getProblemsString(CompilationUnit compilationUnit) throws Exception {
-    StringBuilder problemsString = new StringBuilder();
-    for (IProblem problem : compilationUnit.getProblems()) {
-      // we parse in context of "fake" file, so this is expected problem
-      if (problem.getID() == IProblem.PublicClassMustMatchFileName) {
-        continue;
-      }
-      // append line break
-      if (problemsString.length() != 0) {
-        problemsString.append("\r\n");
-      }
-      // append problem
-      problemsString.append("line: ");
-      problemsString.append(problem.getSourceLineNumber());
-      problemsString.append(" ");
-      problemsString.append(problem.getMessage());
-    }
-    return problemsString.toString();
-  }
-
-  // XXX
-  private ASTNode findNode0(CompilationUnit compilationUnit,
-      final int targetPosition,
-      final Class<? extends ASTNode> nodeClass,
-      final int nodePosition) throws Exception {
-    // find node
-    final List<ASTNode> nodes = Lists.newArrayList();
-    compilationUnit.accept(new ASTVisitor(true) {
-      @Override
-      public void preVisit(ASTNode node) {
-        int pos = node.getStartPosition();
-        // check for required node
-        if (nodes.isEmpty() && pos >= nodePosition && nodeClass.isInstance(node)) {
-          nodes.add(node);
-        }
-        // update positions of required (and following) nodes
-        if (pos >= nodePosition) {
-          int length = node.getLength();
-          node.setSourceRange(targetPosition + pos - nodePosition, length);
-        }
-      }
-    });
-    // exactly one node should be found
-    Assert.isTrue(nodes.size() == 1);
-    // get node and copy it into current AST
-    ASTNode externalNode = nodes.get(0);
-    ASTNode internalNode = ASTNode.copySubtree(m_editor.getAstUnit().getAST(), externalNode);
-    copyBindings(externalNode, internalNode);
-    return internalNode;
-  }
-
-  /**
-   * Copies {@link ITypeBinding}'s and {@link IMethodBinding}'s from source to target
-   * {@link ASTNode}'s.
-   */
-  private final void copyBindings(ASTNode source, ASTNode target) {
-    final Map<Integer, IBinding> indexToBinding = Maps.newTreeMap();
-    // fetch original binding information
-    {
-      final int finalIndex[] = new int[]{0};
-      source.accept(new ASTVisitor() {
-        @Override
-        public void postVisit(ASTNode node) {
-          if (node instanceof SimpleName) {
-            SimpleName simpleName = (SimpleName) node;
-            IBinding binding = simpleName.resolveBinding();
-            if (binding instanceof IVariableBinding) {
-              saveBinding(binding);
-            } else {
-              saveBinding(null);
-            }
-          }
-          if (node instanceof VariableDeclaration) {
-            VariableDeclaration variableDeclaration = (VariableDeclaration) node;
-            IVariableBinding binding = variableDeclaration.resolveBinding();
-            saveBinding(binding);
-          }
-          if (node instanceof FieldAccess) {
-            FieldAccess fieldAccess = (FieldAccess) node;
-            saveBinding(fieldAccess.resolveFieldBinding());
-          }
-          // ITypeBinding
-          {
-            if (node instanceof Expression) {
-              Expression expression = (Expression) node;
-              ITypeBinding binding = expression.resolveTypeBinding();
-              saveBinding(binding);
-            }
-            if (node instanceof Type) {
-              Type type = (Type) node;
-              ITypeBinding binding = type.resolveBinding();
-              saveBinding(binding);
-            }
-            if (node instanceof TypeDeclaration) {
-              TypeDeclaration typeDeclaration = (TypeDeclaration) node;
-              ITypeBinding binding = typeDeclaration.resolveBinding();
-              saveBinding(binding);
-            }
-            if (node instanceof AnonymousClassDeclaration) {
-              AnonymousClassDeclaration anonymousClass = (AnonymousClassDeclaration) node;
-              ITypeBinding binding = anonymousClass.resolveBinding();
-              saveBinding(binding);
-            }
-          }
-          // IMethodBinding
-          {
-            if (node instanceof MethodDeclaration) {
-              MethodDeclaration method = (MethodDeclaration) node;
-              IMethodBinding binding = method.resolveBinding();
-              saveBinding(binding);
-            }
-            if (node instanceof MethodInvocation) {
-              MethodInvocation invocation = (MethodInvocation) node;
-              IMethodBinding binding = invocation.resolveMethodBinding();
-              saveBinding(binding);
-            }
-            if (node instanceof SuperConstructorInvocation) {
-              SuperConstructorInvocation invocation = (SuperConstructorInvocation) node;
-              IMethodBinding binding = invocation.resolveConstructorBinding();
-              saveBinding(binding);
-            }
-            if (node instanceof SuperMethodInvocation) {
-              SuperMethodInvocation invocation = (SuperMethodInvocation) node;
-              IMethodBinding binding = invocation.resolveMethodBinding();
-              saveBinding(binding);
-            }
-            if (node instanceof ClassInstanceCreation) {
-              ClassInstanceCreation creation = (ClassInstanceCreation) node;
-              IMethodBinding binding = creation.resolveConstructorBinding();
-              saveBinding(binding);
-            }
-          }
-        }
-
-        public void saveBinding(IBinding binding) {
-          int index = finalIndex[0]++;
-          if (binding != null) {
-            indexToBinding.put(index, binding);
-          }
-        }
-      });
-    }
-    // store binding information to target
-    {
-      final int finalIndex[] = new int[]{0};
-      target.accept(new ASTVisitor() {
-        @Override
-        public void postVisit(ASTNode node) {
-          if (node instanceof SimpleName
-              || node instanceof FieldAccess
-              || node instanceof VariableDeclaration) {
-            int index = finalIndex[0]++;
-            IVariableBinding binding = (IVariableBinding) indexToBinding.get(index);
-            // binding can be null if this is not variable
-            if (binding != null) {
-              node.setProperty(KEY_VARIABLE_BINDING, m_context.get(binding));
-            }
-          }
-          // ITypeBinding
-          if (node instanceof Expression
-              || node instanceof Type
-              || node instanceof TypeDeclaration
-              || node instanceof AnonymousClassDeclaration) {
-            int index = finalIndex[0]++;
-            ITypeBinding binding = (ITypeBinding) indexToBinding.get(index);
-            if (binding != null) {
-              node.setProperty(KEY_TYPE_BINDING, m_context.get(binding, true));
-            }
-          }
-          // IMethodBinding
-          if (node instanceof MethodDeclaration
-              || node instanceof MethodInvocation
-              || node instanceof SuperConstructorInvocation
-              || node instanceof SuperMethodInvocation
-              || node instanceof ClassInstanceCreation) {
-            int index = finalIndex[0]++;
-            IMethodBinding binding = (IMethodBinding) indexToBinding.get(index);
-            Assert.isNotNull(binding);
-            node.setProperty(KEY_METHOD_BINDING, m_context.get(binding));
-          }
-        }
-      });
-    }
-  }
+	public static final String KEY_TYPE_BINDING = "TYPE_BINDING";
+	public static final String KEY_METHOD_BINDING = "METHOD_BINDING";
+	public static final String KEY_VARIABLE_BINDING = "VARIABLE_BINDING";
+	public static final String KEY_IGNORE_THIS_METHOD = "Ignore this method for parsing context";
+	private final AstEditor m_editor;
+	private final BindingContext m_context;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	AstParser(AstEditor editor) {
+		m_editor = editor;
+		m_context = m_editor.getBindingContext();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parsing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the new {@link Expression} for given source and position.
+	 */
+	public Expression parseExpression(int position, String src) throws Exception {
+		// special handling for "null"
+		if ("null".equals(src)) {
+			Expression expression = getAst().newNullLiteral();
+			expression.setSourceRange(position, "null".length());
+			return expression;
+		}
+		// prepare expression
+		Expression expression;
+		{
+			String source = "java.lang.System.out.println(" + src + ");";
+			ExpressionStatement statement = (ExpressionStatement) parseStatement(position, source);
+			MethodInvocation invocation = (MethodInvocation) statement.getExpression();
+			expression = (Expression) invocation.arguments().get(0);
+			// replace expression to make our expression free
+			{
+				SimpleName fakeExpression = getAst().newSimpleName("foo");
+				DomGenerics.arguments(invocation).set(0, fakeExpression);
+			}
+		}
+		// set correct position
+		AstNodeUtils.moveNode(expression, position);
+		return expression;
+	}
+
+	/**
+	 * @return the new {@link Statement} for given source and position.
+	 *
+	 * @param position
+	 *          the position when given <code>src</code> should start
+	 * @param src
+	 *          the source (possible with leading whitespaces) that contains {@link Statement}
+	 */
+	public Statement parseStatement(int position, String src) throws Exception {
+		String source = "";
+		source += getSourceUnitHeader();
+		// open class and constructor
+		{
+			TypeDeclaration typeDeclaration = m_editor.getEnclosingType(position);
+			source += getClassDeclarationHeader(typeDeclaration);
+			source += getOpenConstructorSource(typeDeclaration);
+		}
+		// add visible variables
+		source += getVisibleVariablesCode(position);
+		// open anonymous class instance, if present
+		String anonymousClassSource = getAnonymousClassCode(position);
+		source += anonymousClassSource;
+		// add source of statement
+		int statementPosition = source.length();
+		source += src;
+		// close anonymous class instance, if present
+		if (!StringUtils.isEmpty(anonymousClassSource)) {
+			source += "}};\n";
+		}
+		// close method and class
+		source += "}\n";
+		source += "}";
+		// parse and find
+		try {
+			return (Statement) findNode(source, position, Statement.class, statementPosition);
+		} catch (DesignerException e) {
+			String problems = e.getParameters()[1];
+			throw new DesignerException(ICoreExceptionConstants.AST_PARSE_ERROR, e, src, problems);
+		}
+	}
+
+	/**
+	 * @return the new {@link BodyDeclaration} for given source and position.
+	 *
+	 * @param position
+	 *          the position when given <code>src</code> should start
+	 * @param src
+	 *          the source (possible with leading whitespace) that contains {@link BodyDeclaration}
+	 */
+	public BodyDeclaration parseBodyDeclaration(int position, String src) throws Exception {
+		String source = m_editor.getSource();
+		source = source.substring(0, position) + src + source.substring(position);
+		// parse and find
+		try {
+			return (BodyDeclaration) findNode(source, position, BodyDeclaration.class, position);
+		} catch (DesignerException e) {
+			String problems = e.getParameters()[1];
+			throw new DesignerException(ICoreExceptionConstants.AST_PARSE_ERROR, e, src, problems);
+		}
+	}
+
+	/**
+	 * @return the new {@link ImportDeclaration} for given name and position.
+	 */
+	public ImportDeclaration parseImportDeclaration(int position, String qualifiedName)
+			throws Exception {
+		String source = "import " + qualifiedName + ";";
+		source += "class Clazz {}";
+		return (ImportDeclaration) findNode(source, position, ImportDeclaration.class, 0);
+	}
+
+	/**
+	 * @return the {@link Type} for given qualified name.
+	 */
+	public Type parseQualifiedType(int position, String name) throws Exception {
+		VariableDeclarationStatement statement =
+				(VariableDeclarationStatement) parseStatement(position, name + " __parseName;");
+		Type type = statement.getType();
+		statement.setType(type.getAST().newPrimitiveType(PrimitiveType.VOID));
+		return type;
+	}
+
+	/**
+	 * @return the copy of given {@link Type} on given position.
+	 */
+	public Type parseType(int position, Type sourceType) throws Exception {
+		// prepare new type
+		Type newType;
+		if (sourceType instanceof PrimitiveType) {
+			PrimitiveType primitiveSourceType = (PrimitiveType) sourceType;
+			newType = getAst().newPrimitiveType(primitiveSourceType.getPrimitiveTypeCode());
+			newType.setSourceRange(position, newType.toString().length());
+		} else {
+			// prepare name of type
+			Name newTypeName;
+			{
+				String typeString = m_editor.getSource(sourceType);
+				if (typeString.indexOf('.') == -1) {
+					newTypeName = parseSimpleName(position, typeString);
+				} else {
+					newTypeName = parseQualifiedName(position, typeString);
+				}
+			}
+			// create type for name
+			newType = getAst().newSimpleType(newTypeName);
+			AstNodeUtils.copySourceRange(newType, newTypeName);
+		}
+		// copy type binding
+		{
+			ITypeBinding sourceTypeBinding = AstNodeUtils.getTypeBinding(sourceType);
+			ITypeBinding newTypeBinding = m_context.get(sourceTypeBinding);
+			newType.setProperty(KEY_TYPE_BINDING, newTypeBinding);
+		}
+		// return created type
+		return newType;
+	}
+
+	/**
+	 * @return the {@link SimpleName} for given identifier.
+	 *
+	 *         NB! This method should not be used directly, use for example
+	 *         {@link #parseVariable(int, String, ITypeBinding, boolean, int)} instead.
+	 */
+	public SimpleName parseSimpleName(int position, String identifier) {
+		SimpleName simpleName = getAst().newSimpleName(identifier);
+		simpleName.setSourceRange(position, identifier.length());
+		return simpleName;
+	}
+
+	/**
+	 * @return the {@link QualifiedName} for given name.
+	 */
+	public QualifiedName parseQualifiedName(int startPosition, String src) {
+		String parts[] = StringUtils.split(src, '.');
+		Assert.isTrue(parts.length >= 2);
+		// build QualifiedName
+		Name result = null;
+		{
+			int currentPosition = startPosition;
+			for (int i = 0; i < parts.length; i++) {
+				String part = parts[i];
+				//
+				if (result == null) {
+					result = parseSimpleName(currentPosition, part);
+				} else {
+					currentPosition++;
+					result = getAst().newQualifiedName(result, parseSimpleName(currentPosition, part));
+				}
+				//
+				currentPosition += part.length();
+				result.setSourceRange(startPosition, currentPosition - startPosition);
+			}
+		}
+		// return result
+		return (QualifiedName) result;
+	}
+
+	/**
+	 * @return the {@link SimpleName} for variable with given identifier, type and field/modifiers
+	 *         flags.
+	 */
+	public SimpleName parseVariable(int position,
+			String identifier,
+			ITypeBinding declaringClass,
+			ITypeBinding type,
+			boolean field,
+			int modifiers) {
+		SimpleName simpleName = parseSimpleName(position, identifier);
+		simpleName.setProperty(KEY_TYPE_BINDING, m_context.get(type));
+		simpleName.setProperty(
+				KEY_VARIABLE_BINDING,
+				m_context.get(identifier, declaringClass, type, field, modifiers));
+		return simpleName;
+	}
+
+	/**
+	 * @return the {@link SimpleType} with given identifier and binding.
+	 */
+	public SimpleType parseSimpleType(int position, String identifier, ITypeBinding binding) {
+		SimpleName simpleName = parseSimpleName(position, identifier);
+		SimpleType simpleType = getAst().newSimpleType(simpleName);
+		simpleType.setProperty(KEY_TYPE_BINDING, m_context.get(binding));
+		AstNodeUtils.copySourceRange(simpleType, simpleName);
+		return simpleType;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Source utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the "header" of {@link CompilationUnit} source - package and imports.
+	 */
+	private String getSourceUnitHeader() throws Exception {
+		CompilationUnit unit = m_editor.getAstUnit();
+		String header = "";
+		// add package
+		if (unit.getPackage() != null) {
+			header = "package " + unit.getPackage().getName().toString() + ";\n";
+		}
+		// add imports
+		for (ImportDeclaration declaration : DomGenerics.imports(unit)) {
+			header += m_editor.getSource(declaration) + "\n";
+		}
+		// return result
+		return header;
+	}
+
+	/**
+	 * @return the source with declaring class that has same super-class, interfaces, declared inner
+	 *         types, fields and methods.
+	 */
+	private String getClassDeclarationHeader(TypeDeclaration typeDeclaration) {
+		String source = "";
+		// class or interface
+		{
+			ITypeBinding binding = AstNodeUtils.getTypeBinding(typeDeclaration);
+			if (binding.isInterface()) {
+				source += "interface ";
+			} else {
+				if (AstNodeUtils.isAbstract(binding)) {
+					source += "abstract ";
+				}
+				source += "class ";
+			}
+		}
+		// declare class
+		{
+			int nameBegin = AstNodeUtils.getSourceBegin(typeDeclaration.getName());
+			int openBrace = m_editor.indexOf("{", nameBegin);
+			source += m_editor.getSourceBeginEnd(nameBegin, openBrace);
+			source = source.trim();
+		}
+		// open class
+		source += " {\n";
+		// add inner types
+		{
+			TypeDeclaration[] innerTypes = typeDeclaration.getTypes();
+			for (TypeDeclaration innerType : innerTypes) {
+				if (AstNodeUtils.isStatic(innerType)) {
+					source += "static ";
+				}
+				source += getClassDeclarationHeader(innerType) + "}\n";
+			}
+		}
+		// add fields
+		{
+			FieldDeclaration[] fields = typeDeclaration.getFields();
+			for (FieldDeclaration field : fields) {
+				// ignore field with invisible type
+				if (!isVisibleType(field.getType())) {
+					continue;
+				}
+				// add source
+				source += getFieldSourceForParsingContext(field) + "\n";
+			}
+		}
+		// add enums (since they are not returned as inner types)
+		{
+			source += getEnumsDeclarations(typeDeclaration);
+		}
+		// add local methods
+		{
+			MethodDeclaration[] methods = typeDeclaration.getMethods();
+			for (MethodDeclaration method : methods) {
+				source += getMethodDeclarationSource(method);
+			}
+		}
+		// return opened type declaration
+		return source;
+	}
+
+	/**
+	 * @return the source for declaring {@link MethodDeclaration}.
+	 */
+	private String getMethodDeclarationSource(MethodDeclaration method) {
+		IMethodBinding binding = AstNodeUtils.getMethodBinding(method);
+		if (binding == null) {
+			return "";
+		}
+		// check if should be added
+		if (method.getProperty(KEY_IGNORE_THIS_METHOD) == Boolean.TRUE) {
+			return "";
+		}
+		if (binding.isConstructor() && isMethodOfTopType(method)) {
+			return "";
+		}
+		// OK, prepare source
+		String source = "";
+		// declare method
+		{
+			int sourceBegin = getMethodDeclarationSourceBegin(method);
+			int sourceEnd;
+			if (method.getBody() != null) {
+				sourceEnd = AstNodeUtils.getSourceBegin(method.getBody());
+			} else {
+				sourceEnd = AstNodeUtils.getSourceEnd(method);
+			}
+			source += m_editor.getSourceBeginEnd(sourceBegin, sourceEnd);
+			source = StringUtilities.normalizeWhitespaces(source);
+		}
+		// abstract or body
+		if (AstNodeUtils.isAbstract(binding)) {
+			// no body
+			source += "\n";
+		} else {
+			// open method
+			source += "{";
+			// constructor
+			if (binding.isConstructor()) {
+				source += getConstructorBodySource(method);
+			}
+			// add "return"
+			String returnTypeName = AstNodeUtils.getFullyQualifiedName(binding.getReturnType(), false);
+			if (!"void".equals(returnTypeName)) {
+				source += "return " + getDefaultValue(returnTypeName) + ";";
+			}
+			// close method
+			source += "}\n";
+		}
+		// result
+		return source;
+	}
+
+	private static String getConstructorBodySource(MethodDeclaration method) {
+		List<Statement> statements = DomGenerics.statements(method);
+		if (!statements.isEmpty()) {
+			if (statements.get(0) instanceof SuperConstructorInvocation) {
+				SuperConstructorInvocation invocation = (SuperConstructorInvocation) statements.get(0);
+				IMethodBinding binding = AstNodeUtils.getSuperBinding(invocation);
+				return "super" + getMethodArgumentsSource(binding);
+			}
+			if (statements.get(0) instanceof ConstructorInvocation) {
+				ConstructorInvocation invocation = (ConstructorInvocation) statements.get(0);
+				IMethodBinding binding = AstNodeUtils.getBinding(invocation);
+				return "this" + getMethodArgumentsSource(binding);
+			}
+		}
+		return "";
+	}
+
+	private static boolean isMethodOfTopType(MethodDeclaration method) {
+		ASTNode parentType = method.getParent();
+		return parentType.getParent() instanceof CompilationUnit;
+	}
+
+	private int getMethodDeclarationSourceBegin(MethodDeclaration method) {
+		// modifiers
+		{
+			List<ASTNode> modifiers = DomGenerics.modifiersNodes(method);
+			if (!modifiers.isEmpty()) {
+				return modifiers.get(0).getStartPosition();
+			}
+		}
+		// type parameters <T>
+		{
+			List<TypeParameter> parameters = DomGenerics.typeParameters(method);
+			if (!parameters.isEmpty()) {
+				int begin = parameters.get(0).getStartPosition();
+				begin = m_editor.indexOfCharBackward('<', begin);
+				return begin;
+			}
+		}
+		// return type
+		{
+			Type type = method.getReturnType2();
+			if (type != null) {
+				return type.getStartPosition();
+			}
+		}
+		// name
+		return method.getName().getStartPosition();
+	}
+
+	/**
+	 * @returns the enum declarations if given {@link TypeDeclaration} has any within.
+	 */
+	private String getEnumsDeclarations(TypeDeclaration typeDeclaration) {
+		String source = "";
+		List<EnumDeclaration> enums = DomGenerics.getEnums(typeDeclaration);
+		for (EnumDeclaration enumDeclaration : enums) {
+			source += "enum " + enumDeclaration.getName().getIdentifier();
+			// open enum
+			source += " {";
+			List<ASTNode> enumConstants = DomGenerics.getEnumConstants(enumDeclaration);
+			for (int i = 0; i < enumConstants.size(); i++) {
+				EnumConstantDeclaration declaration = (EnumConstantDeclaration) enumConstants.get(i);
+				source += declaration.getName().getIdentifier();
+				if (i == enumConstants.size() - 1) {
+					source += ";";
+				} else {
+					source += ", ";
+				}
+			}
+			source += "}\n";
+		}
+		return source;
+	}
+
+	/**
+	 * @return the source of {@link FieldDeclaration} that can be used as context for parsing some
+	 *         source.
+	 */
+	private static String getFieldSourceForParsingContext(FieldDeclaration field) {
+		String fieldSource = "";
+		// add modifiers
+		{
+			int modifiers = field.getModifiers();
+			if ((modifiers & Modifier.STATIC) != 0) {
+				fieldSource += "static ";
+			}
+			if ((modifiers & Modifier.FINAL) != 0) {
+				fieldSource += "final ";
+			}
+		}
+		// add type
+		String typeName = AstNodeUtils.getFullyQualifiedName(field.getType(), false);
+		fieldSource += typeName + " ";
+		// add fragments, with default values
+		for (VariableDeclarationFragment fragment : DomGenerics.fragments(field)) {
+			if (!fieldSource.endsWith(" ")) {
+				fieldSource += ", ";
+			}
+			fieldSource += fragment.getName().getIdentifier() + "=" + getDefaultValue(typeName);
+		}
+		// finalize
+		fieldSource += ";";
+		return fieldSource;
+	}
+
+	private String getOpenConstructorSource(TypeDeclaration typeDeclaration) {
+		ITypeBinding typeBinding = AstNodeUtils.getTypeBinding(typeDeclaration);
+		ITypeBinding superTypeBinding = typeBinding.getSuperclass();
+		String constructorCode = typeDeclaration.getName().getIdentifier() + "(Object __wbp_param) {\n";
+		// prepare declared methods
+		IMethodBinding[] declaredMethods;
+		try {
+			declaredMethods = superTypeBinding.getDeclaredMethods();
+		} catch (Throwable e) {
+			declaredMethods = new IMethodBinding[0];
+		}
+		// try to find constructor in superclass
+		for (IMethodBinding methodBinding : declaredMethods) {
+			int modifiers = methodBinding.getModifiers();
+			// handle only public or protected constructor
+			if (methodBinding.isConstructor()
+					&& (Modifier.isProtected(modifiers) || Modifier.isPublic(modifiers))) {
+				constructorCode += "super" + getMethodArgumentsSource(methodBinding);
+				break;
+			}
+		}
+		return constructorCode;
+	}
+
+	private static String getMethodArgumentsSource(IMethodBinding methodBinding) {
+		String source = "(";
+		// add parameters for constructor
+		ITypeBinding[] parameterTypes = methodBinding.getParameterTypes();
+		for (int i = 0; i < parameterTypes.length; i++) {
+			ITypeBinding parameterType = parameterTypes[i];
+			// add comma
+			if (i != 0) {
+				source += ", ";
+			}
+			// add default value for parameter
+			String parameterTypeName = AstNodeUtils.getFullyQualifiedName(parameterType, false);
+			source += getDefaultValue(parameterTypeName);
+		}
+		// OK, constructor found
+		source += ");";
+		return source;
+	}
+
+	/**
+	 * @return the source that defines local variables with same type/name as all
+	 *         {@link VariableDeclaration} 's visible at given position. We need this to be able to
+	 *         resolve later type bindings for all expressions.
+	 */
+	private String getVisibleVariablesCode(int position) {
+		StringBuffer sb = new StringBuffer();
+		List<VariableDeclaration> declarations =
+				AstNodeUtils.getVariableDeclarationsVisibleAt(m_editor.getAstUnit(), position);
+		for (VariableDeclaration declaration : declarations) {
+			// prepare type of variable
+			Type type = null;
+			if (declaration instanceof SingleVariableDeclaration) {
+				SingleVariableDeclaration parameter = (SingleVariableDeclaration) declaration;
+				type = parameter.getType();
+			} else if (declaration instanceof VariableDeclarationFragment) {
+				VariableDeclarationFragment fragment = (VariableDeclarationFragment) declaration;
+				if (fragment.getParent() instanceof FieldDeclaration) {
+					// we add all fields into TypeDeclaration
+					continue;
+				} else if (fragment.getParent() instanceof VariableDeclarationStatement) {
+					VariableDeclarationStatement statement =
+							(VariableDeclarationStatement) fragment.getParent();
+					type = statement.getType();
+				}
+			}
+			Assert.isNotNull(type);
+			// ignore invisible types
+			if (!isVisibleType(type)) {
+				continue;
+			}
+			// add declaration of local variable
+			{
+				ITypeBinding typeBinding = AstNodeUtils.getTypeBinding(type);
+				String typeName = AstNodeUtils.getFullyQualifiedName(typeBinding, false);
+				//
+				sb.append(typeName);
+				sb.append(' ');
+				sb.append(declaration.getName().getIdentifier());
+				sb.append(" = ");
+				sb.append(getDefaultValue(typeName));
+				sb.append(";\n");
+			}
+		}
+		return sb.toString();
+	}
+
+	/**
+	 * @return <code>true</code> if given {@link Type} is visible externally.
+	 */
+	private static boolean isVisibleType(Type type) {
+		ITypeBinding fieldTypeBinding = AstNodeUtils.getTypeBinding(type);
+		if (fieldTypeBinding == null) {
+			return false;
+		}
+		return true;
+	}
+
+	/**
+	 * @return the source of default value for class with given name ('0' for primitives) and'null'
+	 *         for objects.
+	 */
+	public static String getDefaultValue(String className) {
+		// check for primitive type
+		if ("boolean".equals(className)) {
+			return "false";
+		} else if ("byte".equals(className)) {
+			return "(byte)0";
+		} else if ("char".equals(className)) {
+			return "'0'";
+		} else if ("short".equals(className)) {
+			return "(short)0";
+		} else if ("int".equals(className)) {
+			return "0";
+		} else if ("long".equals(className)) {
+			return "0L";
+		} else if ("float".equals(className)) {
+			return "0.0f";
+		} else if ("double".equals(className)) {
+			return "0.0";
+		}
+		// use "null" for Object
+		return "(" + className + ") null";
+	}
+
+	/**
+	 * @return the source that opens anonymous class instance with initializer.
+	 */
+	private String getAnonymousClassCode(int position) {
+		ASTNode node = m_editor.getEnclosingNode(position);
+		Initializer initializer = null;
+		AnonymousClassDeclaration declaration = null;
+		ClassInstanceCreation creation = null;
+		while (node != null) {
+			if (initializer != null && declaration != null && node instanceof Statement) {
+				break;
+			}
+			if (initializer == null && node instanceof Initializer) {
+				initializer = (Initializer) node;
+			}
+			if (declaration == null && node instanceof AnonymousClassDeclaration) {
+				declaration = (AnonymousClassDeclaration) node;
+				creation = (ClassInstanceCreation) declaration.getParent();
+			}
+			node = node.getParent();
+		}
+		// generate source
+		if (initializer != null && declaration != null) {
+			ITypeBinding typeBinding = declaration.resolveBinding().getSuperclass();
+			if (typeBinding != null) {
+				String typeName = AstNodeUtils.getFullyQualifiedName(typeBinding, false);
+				String argumentsSource = "";
+				List<Expression> arguments = DomGenerics.arguments(creation);
+				for (Expression argument : arguments) {
+					if (!StringUtils.isEmpty(argumentsSource)) {
+						argumentsSource += ", ";
+					}
+					argumentsSource += m_editor.getSource(argument);
+				}
+				return "new " + typeName + "(" + argumentsSource + ") { {";
+			}
+		}
+		// TODO
+		return "";
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Compilation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Parses given Java source and returns corresponding {@link CompilationUnit}.
+	 */
+	private CompilationUnit parseCompilationUnit(String source) throws Exception {
+		return CodeUtils.parseCompilationUnit(source, m_editor.getJavaProject(), "Fake");
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parsing utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link AST} for this editor.
+	 */
+	private AST getAst() {
+		return m_editor.getAstUnit().getAST();
+	}
+
+	/**
+	 * Finds in {@link CompilationUnit} with given source an {@link ASTNode} at given position with
+	 * given class.
+	 *
+	 * @param source
+	 *          the source of {@link CompilationUnit} to parse
+	 * @param targetPosition
+	 *          we should selected {@link ASTNode} nearest to this position
+	 * @param nodeClass
+	 *          the class of {@link ASTNode} to select. We need it because several nodes with
+	 *          different classes can begin in one position for example {@link ExpressionStatement}
+	 *          and its {@link Expression}.
+	 * @param nodePosition
+	 *          the position in AST that corresponds <code>targetPosition</code>
+	 */
+	private ASTNode findNode(String source,
+			int targetPosition,
+			Class<? extends ASTNode> nodeClass,
+			int nodePosition) throws Exception {
+		CompilationUnit compilationUnit = parseCompilationUnit(source);
+		try {
+			return findNode0(compilationUnit, targetPosition, nodeClass, nodePosition);
+		} catch (Throwable e) {
+			String problemsString = getProblemsString(compilationUnit);
+			throw new DesignerException(ICoreExceptionConstants.AST_PARSE_ERROR,
+					e,
+					source,
+					problemsString);
+		}
+	}
+
+	private static String getProblemsString(CompilationUnit compilationUnit) throws Exception {
+		StringBuilder problemsString = new StringBuilder();
+		for (IProblem problem : compilationUnit.getProblems()) {
+			// we parse in context of "fake" file, so this is expected problem
+			if (problem.getID() == IProblem.PublicClassMustMatchFileName) {
+				continue;
+			}
+			// append line break
+			if (problemsString.length() != 0) {
+				problemsString.append("\r\n");
+			}
+			// append problem
+			problemsString.append("line: ");
+			problemsString.append(problem.getSourceLineNumber());
+			problemsString.append(" ");
+			problemsString.append(problem.getMessage());
+		}
+		return problemsString.toString();
+	}
+
+	// XXX
+	private ASTNode findNode0(CompilationUnit compilationUnit,
+			final int targetPosition,
+			final Class<? extends ASTNode> nodeClass,
+			final int nodePosition) throws Exception {
+		// find node
+		final List<ASTNode> nodes = Lists.newArrayList();
+		compilationUnit.accept(new ASTVisitor(true) {
+			@Override
+			public void preVisit(ASTNode node) {
+				int pos = node.getStartPosition();
+				// check for required node
+				if (nodes.isEmpty() && pos >= nodePosition && nodeClass.isInstance(node)) {
+					nodes.add(node);
+				}
+				// update positions of required (and following) nodes
+				if (pos >= nodePosition) {
+					int length = node.getLength();
+					node.setSourceRange(targetPosition + pos - nodePosition, length);
+				}
+			}
+		});
+		// exactly one node should be found
+		Assert.isTrue(nodes.size() == 1);
+		// get node and copy it into current AST
+		ASTNode externalNode = nodes.get(0);
+		ASTNode internalNode = ASTNode.copySubtree(m_editor.getAstUnit().getAST(), externalNode);
+		copyBindings(externalNode, internalNode);
+		return internalNode;
+	}
+
+	/**
+	 * Copies {@link ITypeBinding}'s and {@link IMethodBinding}'s from source to target
+	 * {@link ASTNode}'s.
+	 */
+	private final void copyBindings(ASTNode source, ASTNode target) {
+		final Map<Integer, IBinding> indexToBinding = Maps.newTreeMap();
+		// fetch original binding information
+		{
+			final int finalIndex[] = new int[]{0};
+			source.accept(new ASTVisitor() {
+				@Override
+				public void postVisit(ASTNode node) {
+					if (node instanceof SimpleName) {
+						SimpleName simpleName = (SimpleName) node;
+						IBinding binding = simpleName.resolveBinding();
+						if (binding instanceof IVariableBinding) {
+							saveBinding(binding);
+						} else {
+							saveBinding(null);
+						}
+					}
+					if (node instanceof VariableDeclaration) {
+						VariableDeclaration variableDeclaration = (VariableDeclaration) node;
+						IVariableBinding binding = variableDeclaration.resolveBinding();
+						saveBinding(binding);
+					}
+					if (node instanceof FieldAccess) {
+						FieldAccess fieldAccess = (FieldAccess) node;
+						saveBinding(fieldAccess.resolveFieldBinding());
+					}
+					// ITypeBinding
+					{
+						if (node instanceof Expression) {
+							Expression expression = (Expression) node;
+							ITypeBinding binding = expression.resolveTypeBinding();
+							saveBinding(binding);
+						}
+						if (node instanceof Type) {
+							Type type = (Type) node;
+							ITypeBinding binding = type.resolveBinding();
+							saveBinding(binding);
+						}
+						if (node instanceof TypeDeclaration) {
+							TypeDeclaration typeDeclaration = (TypeDeclaration) node;
+							ITypeBinding binding = typeDeclaration.resolveBinding();
+							saveBinding(binding);
+						}
+						if (node instanceof AnonymousClassDeclaration) {
+							AnonymousClassDeclaration anonymousClass = (AnonymousClassDeclaration) node;
+							ITypeBinding binding = anonymousClass.resolveBinding();
+							saveBinding(binding);
+						}
+					}
+					// IMethodBinding
+					{
+						if (node instanceof MethodDeclaration) {
+							MethodDeclaration method = (MethodDeclaration) node;
+							IMethodBinding binding = method.resolveBinding();
+							saveBinding(binding);
+						}
+						if (node instanceof MethodInvocation) {
+							MethodInvocation invocation = (MethodInvocation) node;
+							IMethodBinding binding = invocation.resolveMethodBinding();
+							saveBinding(binding);
+						}
+						if (node instanceof SuperConstructorInvocation) {
+							SuperConstructorInvocation invocation = (SuperConstructorInvocation) node;
+							IMethodBinding binding = invocation.resolveConstructorBinding();
+							saveBinding(binding);
+						}
+						if (node instanceof SuperMethodInvocation) {
+							SuperMethodInvocation invocation = (SuperMethodInvocation) node;
+							IMethodBinding binding = invocation.resolveMethodBinding();
+							saveBinding(binding);
+						}
+						if (node instanceof ClassInstanceCreation) {
+							ClassInstanceCreation creation = (ClassInstanceCreation) node;
+							IMethodBinding binding = creation.resolveConstructorBinding();
+							saveBinding(binding);
+						}
+					}
+				}
+
+				public void saveBinding(IBinding binding) {
+					int index = finalIndex[0]++;
+					if (binding != null) {
+						indexToBinding.put(index, binding);
+					}
+				}
+			});
+		}
+		// store binding information to target
+		{
+			final int finalIndex[] = new int[]{0};
+			target.accept(new ASTVisitor() {
+				@Override
+				public void postVisit(ASTNode node) {
+					if (node instanceof SimpleName
+							|| node instanceof FieldAccess
+							|| node instanceof VariableDeclaration) {
+						int index = finalIndex[0]++;
+						IVariableBinding binding = (IVariableBinding) indexToBinding.get(index);
+						// binding can be null if this is not variable
+						if (binding != null) {
+							node.setProperty(KEY_VARIABLE_BINDING, m_context.get(binding));
+						}
+					}
+					// ITypeBinding
+					if (node instanceof Expression
+							|| node instanceof Type
+							|| node instanceof TypeDeclaration
+							|| node instanceof AnonymousClassDeclaration) {
+						int index = finalIndex[0]++;
+						ITypeBinding binding = (ITypeBinding) indexToBinding.get(index);
+						if (binding != null) {
+							node.setProperty(KEY_TYPE_BINDING, m_context.get(binding, true));
+						}
+					}
+					// IMethodBinding
+					if (node instanceof MethodDeclaration
+							|| node instanceof MethodInvocation
+							|| node instanceof SuperConstructorInvocation
+							|| node instanceof SuperMethodInvocation
+							|| node instanceof ClassInstanceCreation) {
+						int index = finalIndex[0]++;
+						IMethodBinding binding = (IMethodBinding) indexToBinding.get(index);
+						Assert.isNotNull(binding);
+						node.setProperty(KEY_METHOD_BINDING, m_context.get(binding));
+					}
+				}
+			});
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ast/AstReflectionUtils.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ast/AstReflectionUtils.java
index 95863c2ed..e0b5f8097 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ast/AstReflectionUtils.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ast/AstReflectionUtils.java
@@ -31,162 +31,162 @@
  * @coverage core.util.ast
  */
 public class AstReflectionUtils {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private AstReflectionUtils() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private AstReflectionUtils() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Class
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link Class} of given {@link ITypeBinding}.
-   */
-  public static Class<?> getClass(ClassLoader classLoader, ITypeBinding typeBinding)
-      throws Exception {
-    Assert.isNotNull(typeBinding);
-    String className = AstNodeUtils.getFullyQualifiedName(typeBinding, true);
-    return ReflectionUtils.getClassByName(classLoader, className);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Class
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link Class} of given {@link ITypeBinding}.
+	 */
+	public static Class<?> getClass(ClassLoader classLoader, ITypeBinding typeBinding)
+			throws Exception {
+		Assert.isNotNull(typeBinding);
+		String className = AstNodeUtils.getFullyQualifiedName(typeBinding, true);
+		return ReflectionUtils.getClassByName(classLoader, className);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Arguments
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Updates given "raw" values to have "varArgs" arguments as single array, as required for
-   * reflection.
-   */
-  public static Object[] updateForVarArgs(ClassLoader classLoader,
-      IMethodBinding methodBinding,
-      Object[] values) throws Exception {
-    if (methodBinding.isVarargs()) {
-      ITypeBinding[] parameterTypes = methodBinding.getParameterTypes();
-      int parameterCount = parameterTypes.length;
-      // copy arguments before varArgs
-      Object[] newValues = new Object[parameterCount];
-      System.arraycopy(values, 0, newValues, 0, parameterCount - 1);
-      // last argument is varArgs
-      {
-        ITypeBinding varArrayTypeBinding = parameterTypes[parameterCount - 1];
-        Object varArgs =
-            AstReflectionUtils.getVarArgsArgument(
-                classLoader,
-                values,
-                parameterCount - 1,
-                varArrayTypeBinding);
-        newValues[parameterCount - 1] = varArgs;
-      }
-      // final result
-      return newValues;
-    }
-    return values;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Arguments
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Updates given "raw" values to have "varArgs" arguments as single array, as required for
+	 * reflection.
+	 */
+	public static Object[] updateForVarArgs(ClassLoader classLoader,
+			IMethodBinding methodBinding,
+			Object[] values) throws Exception {
+		if (methodBinding.isVarargs()) {
+			ITypeBinding[] parameterTypes = methodBinding.getParameterTypes();
+			int parameterCount = parameterTypes.length;
+			// copy arguments before varArgs
+			Object[] newValues = new Object[parameterCount];
+			System.arraycopy(values, 0, newValues, 0, parameterCount - 1);
+			// last argument is varArgs
+			{
+				ITypeBinding varArrayTypeBinding = parameterTypes[parameterCount - 1];
+				Object varArgs =
+						AstReflectionUtils.getVarArgsArgument(
+								classLoader,
+								values,
+								parameterCount - 1,
+								varArrayTypeBinding);
+				newValues[parameterCount - 1] = varArgs;
+			}
+			// final result
+			return newValues;
+		}
+		return values;
+	}
 
-  /**
-   * Prepares "varArgs" arguments, re-packs existing values from "raw" values.
-   *
-   * @return the single "varArgs" argument as array.
-   */
-  private static Object getVarArgsArgument(ClassLoader classLoader,
-      Object[] values,
-      int varArrayFirstIndex,
-      ITypeBinding varArrayTypeBinding) throws Exception {
-    Class<?> varClass =
-        AstReflectionUtils.getClass(classLoader, varArrayTypeBinding.getElementType());
-    int varArgsLength = values.length - varArrayFirstIndex;
-    // check, may be last argument is already array of required type
-    if (varArgsLength == 1) {
-      Object varArgValue = values[varArrayFirstIndex];
-      if (varArgValue != null && varArgValue.getClass().isArray()) {
-        if (varClass.isAssignableFrom(varArgValue.getClass().getComponentType())) {
-          return varArgValue;
-        }
-      }
-    }
-    // re-pack into array
-    Object varArgs = Array.newInstance(varClass, varArgsLength);
-    for (int i = 0; i < varArgsLength; i++) {
-      Object element = values[varArrayFirstIndex + i];
-      Array.set(varArgs, i, element);
-    }
-    return varArgs;
-  }
+	/**
+	 * Prepares "varArgs" arguments, re-packs existing values from "raw" values.
+	 *
+	 * @return the single "varArgs" argument as array.
+	 */
+	private static Object getVarArgsArgument(ClassLoader classLoader,
+			Object[] values,
+			int varArrayFirstIndex,
+			ITypeBinding varArrayTypeBinding) throws Exception {
+		Class<?> varClass =
+				AstReflectionUtils.getClass(classLoader, varArrayTypeBinding.getElementType());
+		int varArgsLength = values.length - varArrayFirstIndex;
+		// check, may be last argument is already array of required type
+		if (varArgsLength == 1) {
+			Object varArgValue = values[varArrayFirstIndex];
+			if (varArgValue != null && varArgValue.getClass().isArray()) {
+				if (varClass.isAssignableFrom(varArgValue.getClass().getComponentType())) {
+					return varArgValue;
+				}
+			}
+		}
+		// re-pack into array
+		Object varArgs = Array.newInstance(varClass, varArgsLength);
+		for (int i = 0; i < varArgsLength; i++) {
+			Object element = values[varArrayFirstIndex + i];
+			Array.set(varArgs, i, element);
+		}
+		return varArgs;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link Constructor} for given {@link Class} and {@link IMethodBinding}. This
-   *         constructor can have any visibility, i.e. we can find even protected/private
-   *         constructors.
-   */
-  public static Constructor<?> getConstructor(Class<?> clazz, IMethodBinding binding) {
-    Assert.isLegal(binding.isConstructor());
-    String signature = AstNodeUtils.getMethodSignature(binding);
-    Constructor<?> constructor = ReflectionUtils.getConstructorBySignature(clazz, signature);
-    if (constructor == null) {
-      // find by generics
-      signature = AstNodeUtils.getMethodGenericSignature(binding);
-      constructor = ReflectionUtils.getConstructorByGenericSignature(clazz, signature);
-    }
-    return constructor;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link Constructor} for given {@link Class} and {@link IMethodBinding}. This
+	 *         constructor can have any visibility, i.e. we can find even protected/private
+	 *         constructors.
+	 */
+	public static Constructor<?> getConstructor(Class<?> clazz, IMethodBinding binding) {
+		Assert.isLegal(binding.isConstructor());
+		String signature = AstNodeUtils.getMethodSignature(binding);
+		Constructor<?> constructor = ReflectionUtils.getConstructorBySignature(clazz, signature);
+		if (constructor == null) {
+			// find by generics
+			signature = AstNodeUtils.getMethodGenericSignature(binding);
+			constructor = ReflectionUtils.getConstructorByGenericSignature(clazz, signature);
+		}
+		return constructor;
+	}
 
-  /**
-   * @return the {@link Constructor} for given {@link Class} and {@link SuperConstructorInvocation}.
-   *         This constructor can have any visibility, i.e. we can find even protected/private
-   *         constructors.
-   */
-  public static Constructor<?> getConstructor(Class<?> clazz, SuperConstructorInvocation invocation) {
-    IMethodBinding binding = AstNodeUtils.getSuperBinding(invocation);
-    return getConstructor(clazz, binding);
-  }
+	/**
+	 * @return the {@link Constructor} for given {@link Class} and {@link SuperConstructorInvocation}.
+	 *         This constructor can have any visibility, i.e. we can find even protected/private
+	 *         constructors.
+	 */
+	public static Constructor<?> getConstructor(Class<?> clazz, SuperConstructorInvocation invocation) {
+		IMethodBinding binding = AstNodeUtils.getSuperBinding(invocation);
+		return getConstructor(clazz, binding);
+	}
 
-  /**
-   * @return the {@link Constructor} for given {@link Class} and {@link ClassInstanceCreation}. This
-   *         constructor can have any visibility, i.e. we can find even protected/private
-   *         constructors.
-   */
-  public static Constructor<?> getConstructor(Class<?> clazz, ClassInstanceCreation creation) {
-    IMethodBinding binding = AstNodeUtils.getCreationBinding(creation);
-    return getConstructor(clazz, binding);
-  }
+	/**
+	 * @return the {@link Constructor} for given {@link Class} and {@link ClassInstanceCreation}. This
+	 *         constructor can have any visibility, i.e. we can find even protected/private
+	 *         constructors.
+	 */
+	public static Constructor<?> getConstructor(Class<?> clazz, ClassInstanceCreation creation) {
+		IMethodBinding binding = AstNodeUtils.getCreationBinding(creation);
+		return getConstructor(clazz, binding);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Method
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link Method} for given {@link Class} and {@link IMethodBinding}. This method can
-   *         have any visibility, i.e. we can find even protected/private methods.
-   */
-  public static Method getMethod(Class<?> clazz, IMethodBinding binding) {
-    Assert.isLegal(!binding.isConstructor());
-    String signature = AstNodeUtils.getMethodSignature(binding);
-    Method method = ReflectionUtils.getMethodBySignature(clazz, signature);
-    if (method == null) {
-      signature = AstNodeUtils.getMethodGenericSignature(binding);
-      method = ReflectionUtils.getMethodByGenericSignature(clazz, signature);
-    }
-    return method;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Method
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link Method} for given {@link Class} and {@link IMethodBinding}. This method can
+	 *         have any visibility, i.e. we can find even protected/private methods.
+	 */
+	public static Method getMethod(Class<?> clazz, IMethodBinding binding) {
+		Assert.isLegal(!binding.isConstructor());
+		String signature = AstNodeUtils.getMethodSignature(binding);
+		Method method = ReflectionUtils.getMethodBySignature(clazz, signature);
+		if (method == null) {
+			signature = AstNodeUtils.getMethodGenericSignature(binding);
+			method = ReflectionUtils.getMethodByGenericSignature(clazz, signature);
+		}
+		return method;
+	}
 
-  /**
-   * @return the {@link Method} for given {@link Class} and {@link IMethodBinding}. This method can
-   *         have any visibility, i.e. we can find even protected/private methods.
-   */
-  public static Method getMethod(Class<?> clazz, MethodInvocation invocation) {
-    IMethodBinding binding = AstNodeUtils.getMethodBinding(invocation);
-    return getMethod(clazz, binding);
-  }
+	/**
+	 * @return the {@link Method} for given {@link Class} and {@link IMethodBinding}. This method can
+	 *         have any visibility, i.e. we can find even protected/private methods.
+	 */
+	public static Method getMethod(Class<?> clazz, MethodInvocation invocation) {
+		IMethodBinding binding = AstNodeUtils.getMethodBinding(invocation);
+		return getMethod(clazz, binding);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ast/AstVisitorEx.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ast/AstVisitorEx.java
index 57b3b7b3b..68afff852 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ast/AstVisitorEx.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ast/AstVisitorEx.java
@@ -28,134 +28,134 @@
  * @coverage core.util.ast
  */
 public class AstVisitorEx extends ASTVisitor {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Methods to wrap
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final void preVisit(ASTNode node) {
-    try {
-      preVisitEx(node);
-    } catch (Throwable e) {
-      throw ReflectionUtils.propagate(e);
-    }
-  }
-
-  @Override
-  public final void postVisit(ASTNode node) {
-    try {
-      postVisitEx(node);
-    } catch (Throwable e) {
-      throw ReflectionUtils.propagate(e);
-    }
-  }
-
-  @Override
-  public final boolean visit(QualifiedName node) {
-    try {
-      return visitEx(node);
-    } catch (Throwable e) {
-      throw ReflectionUtils.propagate(e);
-    }
-  }
-
-  @Override
-  public final void endVisit(QualifiedName node) {
-    try {
-      endVisitEx(node);
-    } catch (Throwable e) {
-      throw ReflectionUtils.propagate(e);
-    }
-  }
-
-  @Override
-  public final void endVisit(MethodInvocation node) {
-    try {
-      endVisitEx(node);
-    } catch (Throwable e) {
-      throw ReflectionUtils.propagate(e);
-    }
-  }
-
-  @Override
-  public final void endVisit(SuperMethodInvocation node) {
-    try {
-      endVisitEx(node);
-    } catch (Throwable e) {
-      throw ReflectionUtils.propagate(e);
-    }
-  }
-
-  @Override
-  public final void endVisit(TypeDeclaration node) {
-    try {
-      endVisitEx(node);
-    } catch (Throwable e) {
-      throw ReflectionUtils.propagate(e);
-    }
-  }
-
-  @Override
-  public final void endVisit(TryStatement node) {
-    try {
-      endVisitEx(node);
-    } catch (Throwable e) {
-      throw ReflectionUtils.propagate(e);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Methods to implement
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Implementation of {@link #preVisit(ASTNode)}.
-   */
-  public void preVisitEx(ASTNode node) throws Exception {
-  }
-
-  /**
-   * Implementation of {@link #postVisit(ASTNode)}.
-   */
-  public void postVisitEx(ASTNode node) throws Exception {
-  }
-
-  /**
-   * Implementation of {@link #visit(QualifiedName)}.
-   */
-  public boolean visitEx(QualifiedName node) throws Exception {
-    return true;
-  }
-
-  /**
-   * Implementation of {@link #endVisit(QualifiedName)}.
-   */
-  public void endVisitEx(QualifiedName node) throws Exception {
-  }
-
-  /**
-   * Implementation of {@link #endVisit(MethodInvocation)}.
-   */
-  public void endVisitEx(MethodInvocation node) throws Exception {
-  }
-
-  /**
-   * Implementation of {@link #endVisit(SuperMethodInvocation)}.
-   */
-  public void endVisitEx(SuperMethodInvocation node) throws Exception {
-  }
-
-  /**
-   * Implementation of {@link #endVisit(TypeDeclaration)}.
-   */
-  public void endVisitEx(TypeDeclaration node) throws Exception {
-  }
-
-  /**
-   * Implementation of {@link #endVisit(TryStatement)}.
-   */
-  public void endVisitEx(TryStatement node) throws Exception {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Methods to wrap
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final void preVisit(ASTNode node) {
+		try {
+			preVisitEx(node);
+		} catch (Throwable e) {
+			throw ReflectionUtils.propagate(e);
+		}
+	}
+
+	@Override
+	public final void postVisit(ASTNode node) {
+		try {
+			postVisitEx(node);
+		} catch (Throwable e) {
+			throw ReflectionUtils.propagate(e);
+		}
+	}
+
+	@Override
+	public final boolean visit(QualifiedName node) {
+		try {
+			return visitEx(node);
+		} catch (Throwable e) {
+			throw ReflectionUtils.propagate(e);
+		}
+	}
+
+	@Override
+	public final void endVisit(QualifiedName node) {
+		try {
+			endVisitEx(node);
+		} catch (Throwable e) {
+			throw ReflectionUtils.propagate(e);
+		}
+	}
+
+	@Override
+	public final void endVisit(MethodInvocation node) {
+		try {
+			endVisitEx(node);
+		} catch (Throwable e) {
+			throw ReflectionUtils.propagate(e);
+		}
+	}
+
+	@Override
+	public final void endVisit(SuperMethodInvocation node) {
+		try {
+			endVisitEx(node);
+		} catch (Throwable e) {
+			throw ReflectionUtils.propagate(e);
+		}
+	}
+
+	@Override
+	public final void endVisit(TypeDeclaration node) {
+		try {
+			endVisitEx(node);
+		} catch (Throwable e) {
+			throw ReflectionUtils.propagate(e);
+		}
+	}
+
+	@Override
+	public final void endVisit(TryStatement node) {
+		try {
+			endVisitEx(node);
+		} catch (Throwable e) {
+			throw ReflectionUtils.propagate(e);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Methods to implement
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Implementation of {@link #preVisit(ASTNode)}.
+	 */
+	public void preVisitEx(ASTNode node) throws Exception {
+	}
+
+	/**
+	 * Implementation of {@link #postVisit(ASTNode)}.
+	 */
+	public void postVisitEx(ASTNode node) throws Exception {
+	}
+
+	/**
+	 * Implementation of {@link #visit(QualifiedName)}.
+	 */
+	public boolean visitEx(QualifiedName node) throws Exception {
+		return true;
+	}
+
+	/**
+	 * Implementation of {@link #endVisit(QualifiedName)}.
+	 */
+	public void endVisitEx(QualifiedName node) throws Exception {
+	}
+
+	/**
+	 * Implementation of {@link #endVisit(MethodInvocation)}.
+	 */
+	public void endVisitEx(MethodInvocation node) throws Exception {
+	}
+
+	/**
+	 * Implementation of {@link #endVisit(SuperMethodInvocation)}.
+	 */
+	public void endVisitEx(SuperMethodInvocation node) throws Exception {
+	}
+
+	/**
+	 * Implementation of {@link #endVisit(TypeDeclaration)}.
+	 */
+	public void endVisitEx(TypeDeclaration node) throws Exception {
+	}
+
+	/**
+	 * Implementation of {@link #endVisit(TryStatement)}.
+	 */
+	public void endVisitEx(TryStatement node) throws Exception {
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ast/BodyDeclarationTarget.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ast/BodyDeclarationTarget.java
index 0b372258a..67719386c 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ast/BodyDeclarationTarget.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ast/BodyDeclarationTarget.java
@@ -22,79 +22,79 @@
  * @coverage core.util.ast
  */
 public class BodyDeclarationTarget {
-  private final TypeDeclaration m_type;
-  private final BodyDeclaration m_declaration;
-  private final boolean m_before;
+	private final TypeDeclaration m_type;
+	private final BodyDeclaration m_declaration;
+	private final boolean m_before;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public BodyDeclarationTarget(TypeDeclaration type, boolean before) {
-    this(type, null, before);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public BodyDeclarationTarget(TypeDeclaration type, boolean before) {
+		this(type, null, before);
+	}
 
-  public BodyDeclarationTarget(BodyDeclaration declaration, boolean before) {
-    this(null, declaration, before);
-  }
+	public BodyDeclarationTarget(BodyDeclaration declaration, boolean before) {
+		this(null, declaration, before);
+	}
 
-  public BodyDeclarationTarget(TypeDeclaration type, BodyDeclaration declaration, boolean before) {
-    m_type = type;
-    m_declaration = declaration;
-    m_before = before;
-  }
+	public BodyDeclarationTarget(TypeDeclaration type, BodyDeclaration declaration, boolean before) {
+		m_type = type;
+		m_declaration = declaration;
+		m_before = before;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    return (m_before ? "before " : "after ") + (m_declaration != null ? m_declaration : m_type);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		return (m_before ? "before " : "after ") + (m_declaration != null ? m_declaration : m_type);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Accessor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return any target {@link ASTNode} - {@link TypeDeclaration} or {@link BodyDeclaration}.
-   */
-  public ASTNode getNode() {
-    return m_type != null ? m_type : m_declaration;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Accessor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return any target {@link ASTNode} - {@link TypeDeclaration} or {@link BodyDeclaration}.
+	 */
+	public ASTNode getNode() {
+		return m_type != null ? m_type : m_declaration;
+	}
 
-  /**
-   * @return the {@link TypeDeclaration} that should contain new {@link BodyDeclaration}, or
-   *         <code>null</code> if {@link #getDeclaration()} returns not <code>null</code>.
-   */
-  public TypeDeclaration getType() {
-    return m_type;
-  }
+	/**
+	 * @return the {@link TypeDeclaration} that should contain new {@link BodyDeclaration}, or
+	 *         <code>null</code> if {@link #getDeclaration()} returns not <code>null</code>.
+	 */
+	public TypeDeclaration getType() {
+		return m_type;
+	}
 
-  /**
-   * @return the target {@link BodyDeclaration} for new {@link BodyDeclaration}, or
-   *         <code>null</code> if {@link #getType()} returns not <code>null</code>.
-   */
-  public BodyDeclaration getDeclaration() {
-    return m_declaration;
-  }
+	/**
+	 * @return the target {@link BodyDeclaration} for new {@link BodyDeclaration}, or
+	 *         <code>null</code> if {@link #getType()} returns not <code>null</code>.
+	 */
+	public BodyDeclaration getDeclaration() {
+		return m_declaration;
+	}
 
-  /**
-   * @return <code>true</code> if new {@link BodyDeclaration} should be added before target
-   *         {@link BodyDeclaration} or in beginning of {@link TypeDeclaration}.
-   */
-  public boolean isBefore() {
-    return m_before;
-  }
+	/**
+	 * @return <code>true</code> if new {@link BodyDeclaration} should be added before target
+	 *         {@link BodyDeclaration} or in beginning of {@link TypeDeclaration}.
+	 */
+	public boolean isBefore() {
+		return m_before;
+	}
 
-  /**
-   * @return negation of {@link #isBefore()}.
-   */
-  public boolean isAfter() {
-    return !m_before;
-  }
+	/**
+	 * @return negation of {@link #isBefore()}.
+	 */
+	public boolean isAfter() {
+		return !m_before;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ast/DomGenerics.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ast/DomGenerics.java
index 75c032ad6..a4ca9f3f6 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ast/DomGenerics.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ast/DomGenerics.java
@@ -63,307 +63,307 @@
  * @coverage core.util.ast
  */
 public class DomGenerics {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private DomGenerics() {
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // CompilationUnit
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @SuppressWarnings("unchecked")
-  public static List<Comment> getCommentList(CompilationUnit unit) {
-    return unit.getCommentList();
-  }
-
-  @SuppressWarnings("unchecked")
-  public static List<TagElement> tags(Javadoc javadoc) {
-    return javadoc.tags();
-  }
-
-  @SuppressWarnings("unchecked")
-  public static List<ASTNode> fragments(TagElement tagElement) {
-    return tagElement.fragments();
-  }
-
-  @SuppressWarnings("unchecked")
-  public static List<ImportDeclaration> imports(CompilationUnit unit) {
-    return unit.imports();
-  }
-
-  @SuppressWarnings("unchecked")
-  public static List<TypeDeclaration> types(CompilationUnit unit) {
-    return unit.types();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // TypeDeclaration
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @SuppressWarnings("unchecked")
-  public static List<Type> superInterfaces(TypeDeclaration typeDeclaration) {
-    return typeDeclaration.superInterfaceTypes();
-  }
-
-  @SuppressWarnings("unchecked")
-  public static List<BodyDeclaration> bodyDeclarations(TypeDeclaration typeDeclaration) {
-    return typeDeclaration.bodyDeclarations();
-  }
-
-  /**
-   * @return {@link Initializer}'s of given {@link TypeDeclaration}.
-   */
-  public static List<Initializer> initializers(TypeDeclaration typeDeclaration, boolean aStatic) {
-    List<Initializer> initializers = Lists.newArrayList();
-    for (BodyDeclaration bodyDeclaration : bodyDeclarations(typeDeclaration)) {
-      if (bodyDeclaration instanceof Initializer) {
-        Initializer initializer = (Initializer) bodyDeclaration;
-        boolean isStatic = java.lang.reflect.Modifier.isStatic(initializer.getModifiers());
-        if (aStatic && isStatic || !aStatic && !isStatic) {
-          initializers.add(initializer);
-        }
-      }
-    }
-    return initializers;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // MethodDeclaration
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @SuppressWarnings("unchecked")
-  public static List<Name> thrownExceptions(MethodDeclaration methodDeclaration) {
-    return methodDeclaration.thrownExceptions();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AnonymousClassDeclaration
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @SuppressWarnings("unchecked")
-  public static List<BodyDeclaration> bodyDeclarations(AnonymousClassDeclaration anonymousDeclaration) {
-    return anonymousDeclaration.bodyDeclarations();
-  }
-
-  public static List<MethodDeclaration> methodDeclarations(AnonymousClassDeclaration anonymousDeclaration) {
-    List<BodyDeclaration> bodyDeclarations = bodyDeclarations(anonymousDeclaration);
-    return GenericsUtils.select(bodyDeclarations, MethodDeclaration.class);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Block
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @SuppressWarnings("unchecked")
-  public static List<Statement> statements(Block block) {
-    return block.statements();
-  }
-
-  public static List<Statement> statements(MethodDeclaration method) {
-    if (method == null) {
-      return ImmutableList.of();
-    }
-    Block body = method.getBody();
-    if (body == null) {
-      return ImmutableList.of();
-    }
-    return statements(body);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Annotations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @SuppressWarnings("unchecked")
-  public static List<IExtendedModifier> modifiers(BodyDeclaration bodyDeclaration) {
-    return bodyDeclaration.modifiers();
-  }
-
-  @SuppressWarnings("unchecked")
-  public static List<ASTNode> modifiersNodes(BodyDeclaration bodyDeclaration) {
-    return bodyDeclaration.modifiers();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // parameters
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @SuppressWarnings("unchecked")
-  public static List<SingleVariableDeclaration> parameters(MethodDeclaration methodDeclaration) {
-    return methodDeclaration.parameters();
-  }
-
-  @SuppressWarnings("unchecked")
-  public static List<TypeParameter> typeParameters(MethodDeclaration methodDeclaration) {
-    return methodDeclaration.typeParameters();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // arguments
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static List<Expression> arguments(ASTNode node) {
-    if (node instanceof MethodInvocation) {
-      return arguments((MethodInvocation) node);
-    }
-    if (node instanceof SuperMethodInvocation) {
-      return arguments((SuperMethodInvocation) node);
-    }
-    if (node instanceof ClassInstanceCreation) {
-      return arguments((ClassInstanceCreation) node);
-    }
-    if (node instanceof ConstructorInvocation) {
-      return arguments((ConstructorInvocation) node);
-    }
-    if (node instanceof SuperConstructorInvocation) {
-      return arguments((SuperConstructorInvocation) node);
-    }
-    throw new IllegalArgumentException(node + " does not have arguments.");
-  }
-
-  @SuppressWarnings("unchecked")
-  public static List<Expression> arguments(MethodInvocation invocation) {
-    return invocation.arguments();
-  }
-
-  @SuppressWarnings("unchecked")
-  public static List<Expression> arguments(SuperMethodInvocation invocation) {
-    return invocation.arguments();
-  }
-
-  @SuppressWarnings("unchecked")
-  public static List<Expression> arguments(ClassInstanceCreation creation) {
-    return creation.arguments();
-  }
-
-  @SuppressWarnings("unchecked")
-  public static List<Expression> arguments(ConstructorInvocation invocation) {
-    return invocation.arguments();
-  }
-
-  @SuppressWarnings("unchecked")
-  public static List<Expression> arguments(SuperConstructorInvocation invocation) {
-    return invocation.arguments();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // fragments
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @SuppressWarnings("unchecked")
-  public static List<VariableDeclarationFragment> fragments(FieldDeclaration fieldDeclaration) {
-    return fieldDeclaration.fragments();
-  }
-
-  @SuppressWarnings("unchecked")
-  public static List<VariableDeclarationFragment> fragments(VariableDeclarationStatement statement) {
-    return statement.fragments();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Expressions
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @SuppressWarnings("unchecked")
-  public static List<Expression> expressions(ArrayInitializer arrayInitializer) {
-    return arrayInitializer.expressions();
-  }
-
-  @SuppressWarnings("unchecked")
-  public static List<Expression> extendedOperands(InfixExpression infixExpression) {
-    return infixExpression.extendedOperands();
-  }
-
-  public static List<Expression> allOperands(InfixExpression infixExpression) {
-    List<Expression> operands = new ArrayList<Expression>();
-    operands.add(infixExpression.getLeftOperand());
-    operands.add(infixExpression.getRightOperand());
-    operands.addAll(extendedOperands(infixExpression));
-    return operands;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // types
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @SuppressWarnings("unchecked")
-  public static List<Type> typeArguments(ParameterizedType parameterizedType) {
-    return parameterizedType.typeArguments();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ArrayCreation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @SuppressWarnings("unchecked")
-  public static List<Expression> dimensions(ArrayCreation arrayCreation) {
-    return arrayCreation.dimensions();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Enums
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the list of {@link EnumDeclaration}'s if the given {@link TypeDeclaration} has declared
-   *         enums within.
-   */
-  @SuppressWarnings("rawtypes")
-  public static List<EnumDeclaration> getEnums(TypeDeclaration typeDeclaration) {
-    List<EnumDeclaration> enumDeclarations = Lists.newArrayList();
-    List declarations = typeDeclaration.bodyDeclarations();
-    for (Object object : declarations) {
-      if (object instanceof EnumDeclaration) {
-        enumDeclarations.add((EnumDeclaration) object);
-      }
-    }
-    return enumDeclarations;
-  }
-
-  /**
-   * @return the list of enum constants.
-   */
-  @SuppressWarnings("unchecked")
-  public static List<ASTNode> getEnumConstants(EnumDeclaration enumDeclaration) {
-    return enumDeclaration.enumConstants();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // TryStatement
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @SuppressWarnings("unchecked")
-  public static List<CatchClause> catchClauses(TryStatement tryStatement) {
-    return tryStatement.catchClauses();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Misc
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link Expression} of given {@link ExpressionStatement}.
-   */
-  public static Expression getExpression(Statement statement) {
-    return ((ExpressionStatement) statement).getExpression();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private DomGenerics() {
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// CompilationUnit
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@SuppressWarnings("unchecked")
+	public static List<Comment> getCommentList(CompilationUnit unit) {
+		return unit.getCommentList();
+	}
+
+	@SuppressWarnings("unchecked")
+	public static List<TagElement> tags(Javadoc javadoc) {
+		return javadoc.tags();
+	}
+
+	@SuppressWarnings("unchecked")
+	public static List<ASTNode> fragments(TagElement tagElement) {
+		return tagElement.fragments();
+	}
+
+	@SuppressWarnings("unchecked")
+	public static List<ImportDeclaration> imports(CompilationUnit unit) {
+		return unit.imports();
+	}
+
+	@SuppressWarnings("unchecked")
+	public static List<TypeDeclaration> types(CompilationUnit unit) {
+		return unit.types();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// TypeDeclaration
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@SuppressWarnings("unchecked")
+	public static List<Type> superInterfaces(TypeDeclaration typeDeclaration) {
+		return typeDeclaration.superInterfaceTypes();
+	}
+
+	@SuppressWarnings("unchecked")
+	public static List<BodyDeclaration> bodyDeclarations(TypeDeclaration typeDeclaration) {
+		return typeDeclaration.bodyDeclarations();
+	}
+
+	/**
+	 * @return {@link Initializer}'s of given {@link TypeDeclaration}.
+	 */
+	public static List<Initializer> initializers(TypeDeclaration typeDeclaration, boolean aStatic) {
+		List<Initializer> initializers = Lists.newArrayList();
+		for (BodyDeclaration bodyDeclaration : bodyDeclarations(typeDeclaration)) {
+			if (bodyDeclaration instanceof Initializer) {
+				Initializer initializer = (Initializer) bodyDeclaration;
+				boolean isStatic = java.lang.reflect.Modifier.isStatic(initializer.getModifiers());
+				if (aStatic && isStatic || !aStatic && !isStatic) {
+					initializers.add(initializer);
+				}
+			}
+		}
+		return initializers;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// MethodDeclaration
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@SuppressWarnings("unchecked")
+	public static List<Name> thrownExceptions(MethodDeclaration methodDeclaration) {
+		return methodDeclaration.thrownExceptions();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AnonymousClassDeclaration
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@SuppressWarnings("unchecked")
+	public static List<BodyDeclaration> bodyDeclarations(AnonymousClassDeclaration anonymousDeclaration) {
+		return anonymousDeclaration.bodyDeclarations();
+	}
+
+	public static List<MethodDeclaration> methodDeclarations(AnonymousClassDeclaration anonymousDeclaration) {
+		List<BodyDeclaration> bodyDeclarations = bodyDeclarations(anonymousDeclaration);
+		return GenericsUtils.select(bodyDeclarations, MethodDeclaration.class);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Block
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@SuppressWarnings("unchecked")
+	public static List<Statement> statements(Block block) {
+		return block.statements();
+	}
+
+	public static List<Statement> statements(MethodDeclaration method) {
+		if (method == null) {
+			return ImmutableList.of();
+		}
+		Block body = method.getBody();
+		if (body == null) {
+			return ImmutableList.of();
+		}
+		return statements(body);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Annotations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@SuppressWarnings("unchecked")
+	public static List<IExtendedModifier> modifiers(BodyDeclaration bodyDeclaration) {
+		return bodyDeclaration.modifiers();
+	}
+
+	@SuppressWarnings("unchecked")
+	public static List<ASTNode> modifiersNodes(BodyDeclaration bodyDeclaration) {
+		return bodyDeclaration.modifiers();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// parameters
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@SuppressWarnings("unchecked")
+	public static List<SingleVariableDeclaration> parameters(MethodDeclaration methodDeclaration) {
+		return methodDeclaration.parameters();
+	}
+
+	@SuppressWarnings("unchecked")
+	public static List<TypeParameter> typeParameters(MethodDeclaration methodDeclaration) {
+		return methodDeclaration.typeParameters();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// arguments
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static List<Expression> arguments(ASTNode node) {
+		if (node instanceof MethodInvocation) {
+			return arguments((MethodInvocation) node);
+		}
+		if (node instanceof SuperMethodInvocation) {
+			return arguments((SuperMethodInvocation) node);
+		}
+		if (node instanceof ClassInstanceCreation) {
+			return arguments((ClassInstanceCreation) node);
+		}
+		if (node instanceof ConstructorInvocation) {
+			return arguments((ConstructorInvocation) node);
+		}
+		if (node instanceof SuperConstructorInvocation) {
+			return arguments((SuperConstructorInvocation) node);
+		}
+		throw new IllegalArgumentException(node + " does not have arguments.");
+	}
+
+	@SuppressWarnings("unchecked")
+	public static List<Expression> arguments(MethodInvocation invocation) {
+		return invocation.arguments();
+	}
+
+	@SuppressWarnings("unchecked")
+	public static List<Expression> arguments(SuperMethodInvocation invocation) {
+		return invocation.arguments();
+	}
+
+	@SuppressWarnings("unchecked")
+	public static List<Expression> arguments(ClassInstanceCreation creation) {
+		return creation.arguments();
+	}
+
+	@SuppressWarnings("unchecked")
+	public static List<Expression> arguments(ConstructorInvocation invocation) {
+		return invocation.arguments();
+	}
+
+	@SuppressWarnings("unchecked")
+	public static List<Expression> arguments(SuperConstructorInvocation invocation) {
+		return invocation.arguments();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// fragments
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@SuppressWarnings("unchecked")
+	public static List<VariableDeclarationFragment> fragments(FieldDeclaration fieldDeclaration) {
+		return fieldDeclaration.fragments();
+	}
+
+	@SuppressWarnings("unchecked")
+	public static List<VariableDeclarationFragment> fragments(VariableDeclarationStatement statement) {
+		return statement.fragments();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Expressions
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@SuppressWarnings("unchecked")
+	public static List<Expression> expressions(ArrayInitializer arrayInitializer) {
+		return arrayInitializer.expressions();
+	}
+
+	@SuppressWarnings("unchecked")
+	public static List<Expression> extendedOperands(InfixExpression infixExpression) {
+		return infixExpression.extendedOperands();
+	}
+
+	public static List<Expression> allOperands(InfixExpression infixExpression) {
+		List<Expression> operands = new ArrayList<Expression>();
+		operands.add(infixExpression.getLeftOperand());
+		operands.add(infixExpression.getRightOperand());
+		operands.addAll(extendedOperands(infixExpression));
+		return operands;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// types
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@SuppressWarnings("unchecked")
+	public static List<Type> typeArguments(ParameterizedType parameterizedType) {
+		return parameterizedType.typeArguments();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ArrayCreation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@SuppressWarnings("unchecked")
+	public static List<Expression> dimensions(ArrayCreation arrayCreation) {
+		return arrayCreation.dimensions();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Enums
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the list of {@link EnumDeclaration}'s if the given {@link TypeDeclaration} has declared
+	 *         enums within.
+	 */
+	@SuppressWarnings("rawtypes")
+	public static List<EnumDeclaration> getEnums(TypeDeclaration typeDeclaration) {
+		List<EnumDeclaration> enumDeclarations = Lists.newArrayList();
+		List declarations = typeDeclaration.bodyDeclarations();
+		for (Object object : declarations) {
+			if (object instanceof EnumDeclaration) {
+				enumDeclarations.add((EnumDeclaration) object);
+			}
+		}
+		return enumDeclarations;
+	}
+
+	/**
+	 * @return the list of enum constants.
+	 */
+	@SuppressWarnings("unchecked")
+	public static List<ASTNode> getEnumConstants(EnumDeclaration enumDeclaration) {
+		return enumDeclaration.enumConstants();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// TryStatement
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@SuppressWarnings("unchecked")
+	public static List<CatchClause> catchClauses(TryStatement tryStatement) {
+		return tryStatement.catchClauses();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Misc
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link Expression} of given {@link ExpressionStatement}.
+	 */
+	public static Expression getExpression(Statement statement) {
+		return ((ExpressionStatement) statement).getExpression();
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ast/Gatherer.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ast/Gatherer.java
index 861982183..ec2d955d2 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ast/Gatherer.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ast/Gatherer.java
@@ -30,105 +30,105 @@
  * @coverage core.util.ast
  */
 public abstract class Gatherer<T> extends ASTVisitor {
-  /**
-   * A collection of the values that were gathered.
-   */
-  private final Collection<T> results;
+	/**
+	 * A collection of the values that were gathered.
+	 */
+	private final Collection<T> results;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Initialize a newly created gatherer.
-   */
-  public Gatherer() {
-    results = createCollection();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Initialize a newly created gatherer.
+	 */
+	public Gatherer() {
+		results = createCollection();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Accessing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Return <code>true</code> if one or more values have been gathered.
-   *
-   * @return <code>true</code> if one or more values have been gathered
-   */
-  public final boolean hasResults() {
-    return !results.isEmpty();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Accessing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Return <code>true</code> if one or more values have been gathered.
+	 *
+	 * @return <code>true</code> if one or more values have been gathered
+	 */
+	public final boolean hasResults() {
+		return !results.isEmpty();
+	}
 
-  /**
-   * Return the one result value that was gathered, or <code>null</code> if the were either more or
-   * fewer values gathered.
-   *
-   * @return the one result value that was gathered
-   */
-  public final T getUniqueResult() {
-    if (results.size() == 1) {
-      return results.iterator().next();
-    }
-    return null;
-  }
+	/**
+	 * Return the one result value that was gathered, or <code>null</code> if the were either more or
+	 * fewer values gathered.
+	 *
+	 * @return the one result value that was gathered
+	 */
+	public final T getUniqueResult() {
+		if (results.size() == 1) {
+			return results.iterator().next();
+		}
+		return null;
+	}
 
-  /**
-   * Return a list of the values that were gathered.
-   *
-   * @return a list of the values that were gathered
-   */
-  public final List<T> getResultList() {
-    if (results instanceof List<?>) {
-      return (List<T>) results;
-    }
-    return new ArrayList<T>(results);
-  }
+	/**
+	 * Return a list of the values that were gathered.
+	 *
+	 * @return a list of the values that were gathered
+	 */
+	public final List<T> getResultList() {
+		if (results instanceof List<?>) {
+			return (List<T>) results;
+		}
+		return new ArrayList<T>(results);
+	}
 
-  /**
-   * Return a set of the values that were gathered.
-   *
-   * @return a set of the values that were gathered
-   */
-  public final Set<T> getResultSet() {
-    if (results instanceof Set<?>) {
-      return (Set<T>) results;
-    }
-    return new HashSet<T>(results);
-  }
+	/**
+	 * Return a set of the values that were gathered.
+	 *
+	 * @return a set of the values that were gathered
+	 */
+	public final Set<T> getResultSet() {
+		if (results instanceof Set<?>) {
+			return (Set<T>) results;
+		}
+		return new HashSet<T>(results);
+	}
 
-  /**
-   * Assuming that all of the values that were gathered were {@link VariableDeclaration}'s, return
-   * an array of the {@link VariableDeclaration}'s that were gathered.
-   *
-   * @return an array of the variable declarations that were gathered
-   */
-  @SuppressWarnings("unchecked")
-  public final T[] toArray(Class<T> clazz) {
-    T[] array = (T[]) Array.newInstance(clazz, results.size());
-    return results.toArray(array);
-  }
+	/**
+	 * Assuming that all of the values that were gathered were {@link VariableDeclaration}'s, return
+	 * an array of the {@link VariableDeclaration}'s that were gathered.
+	 *
+	 * @return an array of the variable declarations that were gathered
+	 */
+	@SuppressWarnings("unchecked")
+	public final T[] toArray(Class<T> clazz) {
+		T[] array = (T[]) Array.newInstance(clazz, results.size());
+		return results.toArray(array);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Accessing -- internal
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Add the given result value to the collection of result values.
-   *
-   * @param value
-   *          the result value to be added
-   */
-  protected final void addResult(T value) {
-    results.add(value);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Accessing -- internal
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Add the given result value to the collection of result values.
+	 *
+	 * @param value
+	 *          the result value to be added
+	 */
+	protected final void addResult(T value) {
+		results.add(value);
+	}
 
-  /**
-   * Create the collection to which result values will be added.
-   *
-   * @return the collection that was created
-   */
-  protected abstract Collection<T> createCollection();
+	/**
+	 * Create the collection to which result values will be added.
+	 *
+	 * @return the collection that was created
+	 */
+	protected abstract Collection<T> createCollection();
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ast/IASTEditorCommitListener.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ast/IASTEditorCommitListener.java
index 87b8a753d..0d961d003 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ast/IASTEditorCommitListener.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ast/IASTEditorCommitListener.java
@@ -19,20 +19,20 @@
  * @coverage core.util.ast
  */
 public interface IASTEditorCommitListener {
-  /**
-   * Notifies that {@link AstEditor} is going to commit changes to {@link ICompilationUnit} buffer.
-   */
-  void aboutToCommit();
+	/**
+	 * Notifies that {@link AstEditor} is going to commit changes to {@link ICompilationUnit} buffer.
+	 */
+	void aboutToCommit();
 
-  /**
-   * Request editable state for file. When file is in CVS and project configured to use edit/watch
-   * mode, files are read only and we should request edit to change them. {@link AstEditor} calls
-   * this method to ensure that changes made in shadow buffer can be saved in main file buffer.
-   */
-  boolean canEditBaseFile();
+	/**
+	 * Request editable state for file. When file is in CVS and project configured to use edit/watch
+	 * mode, files are read only and we should request edit to change them. {@link AstEditor} calls
+	 * this method to ensure that changes made in shadow buffer can be saved in main file buffer.
+	 */
+	boolean canEditBaseFile();
 
-  /**
-   * Notifies that {@link AstEditor} done commit changes to {@link ICompilationUnit} buffer.
-   */
-  void commitDone();
+	/**
+	 * Notifies that {@link AstEditor} done commit changes to {@link ICompilationUnit} buffer.
+	 */
+	void commitDone();
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ast/ListGatherer.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ast/ListGatherer.java
index 3b0eaec41..09d94b46c 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ast/ListGatherer.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ast/ListGatherer.java
@@ -24,13 +24,13 @@
  * @coverage core.util.ast
  */
 public abstract class ListGatherer<T> extends Gatherer<T> {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Accessing -- internal
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected final Collection<T> createCollection() {
-    return Lists.newArrayList();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Accessing -- internal
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected final Collection<T> createCollection() {
+		return Lists.newArrayList();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ast/NodeTarget.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ast/NodeTarget.java
index ce09fc1f2..a7e787013 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ast/NodeTarget.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ast/NodeTarget.java
@@ -21,46 +21,46 @@
  * @coverage core.util.ast
  */
 public final class NodeTarget {
-  private final StatementTarget m_statementTarget;
-  private final BodyDeclarationTarget m_bodyDeclarationTarget;
+	private final StatementTarget m_statementTarget;
+	private final BodyDeclarationTarget m_bodyDeclarationTarget;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public NodeTarget(StatementTarget statementTarget) {
-    m_statementTarget = statementTarget;
-    m_bodyDeclarationTarget = null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public NodeTarget(StatementTarget statementTarget) {
+		m_statementTarget = statementTarget;
+		m_bodyDeclarationTarget = null;
+	}
 
-  public NodeTarget(BodyDeclarationTarget bodyDeclarationTarget) {
-    m_statementTarget = null;
-    m_bodyDeclarationTarget = bodyDeclarationTarget;
-  }
+	public NodeTarget(BodyDeclarationTarget bodyDeclarationTarget) {
+		m_statementTarget = null;
+		m_bodyDeclarationTarget = bodyDeclarationTarget;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    return m_statementTarget != null
-        ? m_statementTarget.toString()
-        : m_bodyDeclarationTarget.toString();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		return m_statementTarget != null
+				? m_statementTarget.toString()
+						: m_bodyDeclarationTarget.toString();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Accessor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public StatementTarget getStatementTarget() {
-    return m_statementTarget;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Accessor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public StatementTarget getStatementTarget() {
+		return m_statementTarget;
+	}
 
-  public BodyDeclarationTarget getBodyDeclarationTarget() {
-    return m_bodyDeclarationTarget;
-  }
+	public BodyDeclarationTarget getBodyDeclarationTarget() {
+		return m_bodyDeclarationTarget;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ast/OperatorPrecedence.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ast/OperatorPrecedence.java
index 0cd6e7631..a97ca4af6 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ast/OperatorPrecedence.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ast/OperatorPrecedence.java
@@ -30,117 +30,117 @@
  * @author scheglov_ke
  */
 public class OperatorPrecedence {
-  private static final int ASSIGNMENT = 0;
-  private static final int CONDITIONAL = 1;
-  private static final int CONDITIONAL_OR = 2;
-  private static final int CONDITIONAL_AND = 3;
-  private static final int BITWISE_INCLUSIVE_OR = 4;
-  private static final int BITWISE_EXCLUSIVE_OR = 5;
-  private static final int BITWISE_AND = 6;
-  private static final int EQUALITY = 7;
-  private static final int RATIONAL = 8;
-  private static final int SHIFT = 9;
-  private static final int ADDITIVE = 10;
-  private static final int MULTIPLICATIVE = 11;
-  private static final int TYPEGENERATION = 12;
-  private static final int PREFIX = 13;
-  private static final int POSTFIX = 14;
+	private static final int ASSIGNMENT = 0;
+	private static final int CONDITIONAL = 1;
+	private static final int CONDITIONAL_OR = 2;
+	private static final int CONDITIONAL_AND = 3;
+	private static final int BITWISE_INCLUSIVE_OR = 4;
+	private static final int BITWISE_EXCLUSIVE_OR = 5;
+	private static final int BITWISE_AND = 6;
+	private static final int EQUALITY = 7;
+	private static final int RATIONAL = 8;
+	private static final int SHIFT = 9;
+	private static final int ADDITIVE = 10;
+	private static final int MULTIPLICATIVE = 11;
+	private static final int TYPEGENERATION = 12;
+	private static final int PREFIX = 13;
+	private static final int POSTFIX = 14;
 
-  /**
-   * Returns the precedence of the expression. Expression with higher precedence are executed before
-   * expressions with lower precedence. i.e. in: <br>
-   * <code> int a= ++3--;</code></br>
-   *
-   * the precedence order is
-   * <ul>
-   * <li>3</li>
-   * <li>++</li>
-   * <li>--</li>
-   * <li>=</li>
-   * </ul>
-   * 1. 3 -(++)-> 4<br>
-   * 2. 4 -(--)-> 3<br>
-   * 3. 3 -(=)-> a<br>
-   *
-   * @param expression
-   *          the expression to determine the precedence for
-   * @return the precedence the higher to stronger the binding to its operand(s)
-   */
-  public static int getExpressionPrecedence(Expression expression) {
-    if (expression instanceof InfixExpression) {
-      return getOperatorPrecedence(((InfixExpression) expression).getOperator());
-    } else if (expression instanceof Assignment) {
-      return ASSIGNMENT;
-    } else if (expression instanceof ConditionalExpression) {
-      return CONDITIONAL;
-    } else if (expression instanceof InstanceofExpression) {
-      return RATIONAL;
-    } else if (expression instanceof CastExpression) {
-      return TYPEGENERATION;
-    } else if (expression instanceof ClassInstanceCreation) {
-      return POSTFIX;
-    } else if (expression instanceof PrefixExpression) {
-      return PREFIX;
-    } else if (expression instanceof FieldAccess) {
-      return POSTFIX;
-    } else if (expression instanceof MethodInvocation) {
-      return POSTFIX;
-    } else if (expression instanceof ArrayAccess) {
-      return POSTFIX;
-    } else if (expression instanceof PostfixExpression) {
-      return POSTFIX;
-    }
-    return Integer.MAX_VALUE;
-  }
+	/**
+	 * Returns the precedence of the expression. Expression with higher precedence are executed before
+	 * expressions with lower precedence. i.e. in: <br>
+	 * <code> int a= ++3--;</code></br>
+	 *
+	 * the precedence order is
+	 * <ul>
+	 * <li>3</li>
+	 * <li>++</li>
+	 * <li>--</li>
+	 * <li>=</li>
+	 * </ul>
+	 * 1. 3 -(++)-> 4<br>
+	 * 2. 4 -(--)-> 3<br>
+	 * 3. 3 -(=)-> a<br>
+	 *
+	 * @param expression
+	 *          the expression to determine the precedence for
+	 * @return the precedence the higher to stronger the binding to its operand(s)
+	 */
+	public static int getExpressionPrecedence(Expression expression) {
+		if (expression instanceof InfixExpression) {
+			return getOperatorPrecedence(((InfixExpression) expression).getOperator());
+		} else if (expression instanceof Assignment) {
+			return ASSIGNMENT;
+		} else if (expression instanceof ConditionalExpression) {
+			return CONDITIONAL;
+		} else if (expression instanceof InstanceofExpression) {
+			return RATIONAL;
+		} else if (expression instanceof CastExpression) {
+			return TYPEGENERATION;
+		} else if (expression instanceof ClassInstanceCreation) {
+			return POSTFIX;
+		} else if (expression instanceof PrefixExpression) {
+			return PREFIX;
+		} else if (expression instanceof FieldAccess) {
+			return POSTFIX;
+		} else if (expression instanceof MethodInvocation) {
+			return POSTFIX;
+		} else if (expression instanceof ArrayAccess) {
+			return POSTFIX;
+		} else if (expression instanceof PostfixExpression) {
+			return POSTFIX;
+		}
+		return Integer.MAX_VALUE;
+	}
 
-  /**
-   * Returns the precedence of an infix operator. Operators with higher precedence are executed
-   * before expressions with lower precedence. <br>
-   * i.e. in: <br>
-   * <code>3 + 4 - 5 * 6;</code><br>
-   * the precedence order is
-   * <ul>
-   * <li></li>
-   * <li>+</li>
-   * <li>-</li>
-   * </ul>
-   * 1. 5,6 -(*)-> 30<br>
-   * 2. 3,4 -(+)-> 7<br>
-   * 3. 7,30 -(-)-> -23<br>
-   *
-   * @param operator
-   *          the expression to determine the precedence for
-   * @return the precedence the higher to stronger the binding to its operands
-   */
-  public static int getOperatorPrecedence(Operator operator) {
-    if (operator == Operator.CONDITIONAL_OR) {
-      return CONDITIONAL_OR;
-    } else if (operator == Operator.CONDITIONAL_AND) {
-      return CONDITIONAL_AND;
-    } else if (operator == Operator.OR) {
-      return BITWISE_INCLUSIVE_OR;
-    } else if (operator == Operator.XOR) {
-      return BITWISE_EXCLUSIVE_OR;
-    } else if (operator == Operator.AND) {
-      return BITWISE_AND;
-    } else if (operator == Operator.EQUALS || operator == Operator.NOT_EQUALS) {
-      return EQUALITY;
-    } else if (operator == Operator.LESS
-        || operator == Operator.LESS_EQUALS
-        || operator == Operator.GREATER
-        || operator == Operator.GREATER_EQUALS) {
-      return RATIONAL;
-    } else if (operator == Operator.LEFT_SHIFT
-        || operator == Operator.RIGHT_SHIFT_SIGNED
-        || operator == Operator.RIGHT_SHIFT_UNSIGNED) {
-      return SHIFT;
-    } else if (operator == Operator.PLUS || operator == Operator.MINUS) {
-      return ADDITIVE;
-    } else if (operator == Operator.REMAINDER
-        || operator == Operator.DIVIDE
-        || operator == Operator.TIMES) {
-      return MULTIPLICATIVE;
-    }
-    return Integer.MAX_VALUE;
-  }
+	/**
+	 * Returns the precedence of an infix operator. Operators with higher precedence are executed
+	 * before expressions with lower precedence. <br>
+	 * i.e. in: <br>
+	 * <code>3 + 4 - 5 * 6;</code><br>
+	 * the precedence order is
+	 * <ul>
+	 * <li></li>
+	 * <li>+</li>
+	 * <li>-</li>
+	 * </ul>
+	 * 1. 5,6 -(*)-> 30<br>
+	 * 2. 3,4 -(+)-> 7<br>
+	 * 3. 7,30 -(-)-> -23<br>
+	 *
+	 * @param operator
+	 *          the expression to determine the precedence for
+	 * @return the precedence the higher to stronger the binding to its operands
+	 */
+	public static int getOperatorPrecedence(Operator operator) {
+		if (operator == Operator.CONDITIONAL_OR) {
+			return CONDITIONAL_OR;
+		} else if (operator == Operator.CONDITIONAL_AND) {
+			return CONDITIONAL_AND;
+		} else if (operator == Operator.OR) {
+			return BITWISE_INCLUSIVE_OR;
+		} else if (operator == Operator.XOR) {
+			return BITWISE_EXCLUSIVE_OR;
+		} else if (operator == Operator.AND) {
+			return BITWISE_AND;
+		} else if (operator == Operator.EQUALS || operator == Operator.NOT_EQUALS) {
+			return EQUALITY;
+		} else if (operator == Operator.LESS
+				|| operator == Operator.LESS_EQUALS
+				|| operator == Operator.GREATER
+				|| operator == Operator.GREATER_EQUALS) {
+			return RATIONAL;
+		} else if (operator == Operator.LEFT_SHIFT
+				|| operator == Operator.RIGHT_SHIFT_SIGNED
+				|| operator == Operator.RIGHT_SHIFT_UNSIGNED) {
+			return SHIFT;
+		} else if (operator == Operator.PLUS || operator == Operator.MINUS) {
+			return ADDITIVE;
+		} else if (operator == Operator.REMAINDER
+				|| operator == Operator.DIVIDE
+				|| operator == Operator.TIMES) {
+			return MULTIPLICATIVE;
+		}
+		return Integer.MAX_VALUE;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ast/SetGatherer.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ast/SetGatherer.java
index 91363bf64..cc11792f5 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ast/SetGatherer.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ast/SetGatherer.java
@@ -24,13 +24,13 @@
  * @coverage core.util.ast
  */
 public abstract class SetGatherer<T> extends Gatherer<T> {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Accessing -- internal
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected final Collection<T> createCollection() {
-    return Sets.newHashSet();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Accessing -- internal
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected final Collection<T> createCollection() {
+		return Sets.newHashSet();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ast/StatementTarget.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ast/StatementTarget.java
index 6e0b2b0d6..db00ec49f 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ast/StatementTarget.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ast/StatementTarget.java
@@ -22,119 +22,119 @@
  * @coverage core.util.ast
  */
 public final class StatementTarget {
-  private final Block m_block;
-  private Statement m_statement;
-  private final boolean m_before;
+	private final Block m_block;
+	private Statement m_statement;
+	private final boolean m_before;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public StatementTarget(MethodDeclaration method, boolean beginning) {
-    this(method.getBody(), beginning);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public StatementTarget(MethodDeclaration method, boolean beginning) {
+		this(method.getBody(), beginning);
+	}
 
-  public StatementTarget(Block block, boolean beginning) {
-    this(block, null, beginning);
-  }
+	public StatementTarget(Block block, boolean beginning) {
+		this(block, null, beginning);
+	}
 
-  public StatementTarget(Statement statement, boolean before) {
-    this(null, statement, before);
-  }
+	public StatementTarget(Statement statement, boolean before) {
+		this(null, statement, before);
+	}
 
-  public StatementTarget(ASTNode node, boolean before) {
-    this(null, AstNodeUtils.getEnclosingStatement(node), before);
-  }
+	public StatementTarget(ASTNode node, boolean before) {
+		this(null, AstNodeUtils.getEnclosingStatement(node), before);
+	}
 
-  public StatementTarget(Block block, Statement statement, boolean before) {
-    m_block = block;
-    m_statement = statement;
-    m_before = before;
-  }
+	public StatementTarget(Block block, Statement statement, boolean before) {
+		m_block = block;
+		m_statement = statement;
+		m_before = before;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    if (m_statement != null) {
-      return (m_before ? "before " : "after ") + m_statement;
-    } else {
-      return (m_before ? "begin " : "end ") + m_block;
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		if (m_statement != null) {
+			return (m_before ? "before " : "after ") + m_statement;
+		} else {
+			return (m_before ? "begin " : "end ") + m_block;
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the position, associated with this target, i.e. position of {@link Statement} or
-   *         begin/end of {@link Block}.
-   */
-  public int getPosition() {
-    if (m_statement != null) {
-      return m_before
-          ? AstNodeUtils.getSourceBegin(m_statement)
-          : AstNodeUtils.getSourceEnd(m_statement);
-    } else {
-      return m_before
-          ? AstNodeUtils.getSourceBegin(m_block)
-          : AstNodeUtils.getSourceEnd(m_block) - 1;
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the position, associated with this target, i.e. position of {@link Statement} or
+	 *         begin/end of {@link Block}.
+	 */
+	public int getPosition() {
+		if (m_statement != null) {
+			return m_before
+					? AstNodeUtils.getSourceBegin(m_statement)
+							: AstNodeUtils.getSourceEnd(m_statement);
+		} else {
+			return m_before
+					? AstNodeUtils.getSourceBegin(m_block)
+							: AstNodeUtils.getSourceEnd(m_block) - 1;
+		}
+	}
 
-  /**
-   * @return any target {@link ASTNode} - {@link Statement} or {@link Block}.
-   */
-  public ASTNode getNode() {
-    return m_statement != null ? m_statement : m_block;
-  }
+	/**
+	 * @return any target {@link ASTNode} - {@link Statement} or {@link Block}.
+	 */
+	public ASTNode getNode() {
+		return m_statement != null ? m_statement : m_block;
+	}
 
-  /**
-   * @return the {@link Block} that should contain new statement, or <code>null</code> if
-   *         {@link #getStatement()} returns not <code>null</code>.
-   */
-  public Block getBlock() {
-    return m_block;
-  }
+	/**
+	 * @return the {@link Block} that should contain new statement, or <code>null</code> if
+	 *         {@link #getStatement()} returns not <code>null</code>.
+	 */
+	public Block getBlock() {
+		return m_block;
+	}
 
-  /**
-   * @return the target {@link Statement} for new statement, or <code>null</code> if
-   *         {@link #getBlock()} returns not <code>null</code>.
-   */
-  public Statement getStatement() {
-    return m_statement;
-  }
+	/**
+	 * @return the target {@link Statement} for new statement, or <code>null</code> if
+	 *         {@link #getBlock()} returns not <code>null</code>.
+	 */
+	public Statement getStatement() {
+		return m_statement;
+	}
 
-  /**
-   * Sets the target {@link Statement}.
-   * <p>
-   * I know that would be good to keep {@link StatementTarget} immutable. However when
-   * <code>EmptyVariable</code> ensures local variable for code/statement like this
-   * <code>new Button(parent);</code> and target statement is that "expression" statement, we
-   * replace it with "variable declaration" statement, so it <b>have</b> to be replaced.
-   */
-  public void setStatement(Statement statement) {
-    m_statement = statement;
-  }
+	/**
+	 * Sets the target {@link Statement}.
+	 * <p>
+	 * I know that would be good to keep {@link StatementTarget} immutable. However when
+	 * <code>EmptyVariable</code> ensures local variable for code/statement like this
+	 * <code>new Button(parent);</code> and target statement is that "expression" statement, we
+	 * replace it with "variable declaration" statement, so it <b>have</b> to be replaced.
+	 */
+	public void setStatement(Statement statement) {
+		m_statement = statement;
+	}
 
-  /**
-   * @return <code>true</code> if new statement should be added before target statement or in
-   *         beginning of {@link Block}.
-   */
-  public boolean isBefore() {
-    return m_before;
-  }
+	/**
+	 * @return <code>true</code> if new statement should be added before target statement or in
+	 *         beginning of {@link Block}.
+	 */
+	public boolean isBefore() {
+		return m_before;
+	}
 
-  /**
-   * @return negation of {@link #isBefore()}.
-   */
-  public boolean isAfter() {
-    return !m_before;
-  }
+	/**
+	 * @return negation of {@link #isBefore()}.
+	 */
+	public boolean isAfter() {
+		return !m_before;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ast/binding/BindingContext.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ast/binding/BindingContext.java
index 3072b374e..ade4b7109 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ast/binding/BindingContext.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ast/binding/BindingContext.java
@@ -33,91 +33,91 @@
  * @coverage core.util.ast
  */
 public final class BindingContext {
-  private final Map<String, DesignerTypeBinding> m_typeBindings = Maps.newHashMap();
+	private final Map<String, DesignerTypeBinding> m_typeBindings = Maps.newHashMap();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Copy access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the existing (shared by fully qualified name) or new instance of
-   *         {@link DesignerTypeBinding} for given {@link ITypeBinding}.
-   */
-  public ITypeBinding get(ITypeBinding binding) {
-    return get(binding, false);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Copy access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the existing (shared by fully qualified name) or new instance of
+	 *         {@link DesignerTypeBinding} for given {@link ITypeBinding}.
+	 */
+	public ITypeBinding get(ITypeBinding binding) {
+		return get(binding, false);
+	}
 
-  public ITypeBinding get(ITypeBinding binding, boolean withGenerics) {
-    if (binding == null) {
-      return null;
-    }
-    // OK, not-null binding
-    String fullyQualifiedName = AstNodeUtils.getFullyQualifiedName(binding, false, withGenerics);
-    if (binding.isGenericType()) {
-      fullyQualifiedName += "_wbpGeneric";
-    }
-    if (binding.isAnonymous()) {
-      fullyQualifiedName += "_wbpAnonymous_" + binding.getKey();
-    }
-    // try to get existing copy
-    DesignerTypeBinding designerBinding = null;
-    if (!binding.isTypeVariable()) {
-      designerBinding = m_typeBindings.get(fullyQualifiedName);
-    }
-    // if no existing, create new
-    if (designerBinding == null) {
-      designerBinding = new DesignerTypeBinding(this, fullyQualifiedName, binding);
-    }
-    // done
-    return designerBinding;
-  }
+	public ITypeBinding get(ITypeBinding binding, boolean withGenerics) {
+		if (binding == null) {
+			return null;
+		}
+		// OK, not-null binding
+		String fullyQualifiedName = AstNodeUtils.getFullyQualifiedName(binding, false, withGenerics);
+		if (binding.isGenericType()) {
+			fullyQualifiedName += "_wbpGeneric";
+		}
+		if (binding.isAnonymous()) {
+			fullyQualifiedName += "_wbpAnonymous_" + binding.getKey();
+		}
+		// try to get existing copy
+		DesignerTypeBinding designerBinding = null;
+		if (!binding.isTypeVariable()) {
+			designerBinding = m_typeBindings.get(fullyQualifiedName);
+		}
+		// if no existing, create new
+		if (designerBinding == null) {
+			designerBinding = new DesignerTypeBinding(this, fullyQualifiedName, binding);
+		}
+		// done
+		return designerBinding;
+	}
 
-  /**
-   * @return the new instance of {@link DesignerTypeBinding} for given {@link ITypeBinding}.
-   */
-  public DesignerTypeBinding getCopy(ITypeBinding binding) {
-    return new DesignerTypeBinding(this, null, binding);
-  }
+	/**
+	 * @return the new instance of {@link DesignerTypeBinding} for given {@link ITypeBinding}.
+	 */
+	public DesignerTypeBinding getCopy(ITypeBinding binding) {
+		return new DesignerTypeBinding(this, null, binding);
+	}
 
-  /**
-   * @return the new instance of {@link DesignerMethodBinding} for given {@link IMethodBinding}.
-   */
-  public DesignerMethodBinding get(IMethodBinding binding) {
-    return new DesignerMethodBinding(this, binding);
-  }
+	/**
+	 * @return the new instance of {@link DesignerMethodBinding} for given {@link IMethodBinding}.
+	 */
+	public DesignerMethodBinding get(IMethodBinding binding) {
+		return new DesignerMethodBinding(this, binding);
+	}
 
-  /**
-   * @return the new instance of {@link DesignerVariableBinding} for given {@link IVariableBinding}.
-   */
-  public IVariableBinding get(IVariableBinding binding) {
-    return new DesignerVariableBinding(this, binding);
-  }
+	/**
+	 * @return the new instance of {@link DesignerVariableBinding} for given {@link IVariableBinding}.
+	 */
+	public IVariableBinding get(IVariableBinding binding) {
+		return new DesignerVariableBinding(this, binding);
+	}
 
-  /**
-   * @return the new instance of {@link DesignerVariableBinding}.
-   */
-  public IVariableBinding get(String name,
-      ITypeBinding declaringClass,
-      ITypeBinding type,
-      boolean field,
-      int modifiers) {
-    return new DesignerVariableBinding(this, name, declaringClass, type, field, modifiers);
-  }
+	/**
+	 * @return the new instance of {@link DesignerVariableBinding}.
+	 */
+	public IVariableBinding get(String name,
+			ITypeBinding declaringClass,
+			ITypeBinding type,
+			boolean field,
+			int modifiers) {
+		return new DesignerVariableBinding(this, name, declaringClass, type, field, modifiers);
+	}
 
-  /**
-   * @return the new instance of {@link DesignerPackageBinding} for given {@link IPackageBinding}.
-   */
-  public IPackageBinding get(IPackageBinding binding) {
-    return new DesignerPackageBinding(binding);
-  }
+	/**
+	 * @return the new instance of {@link DesignerPackageBinding} for given {@link IPackageBinding}.
+	 */
+	public IPackageBinding get(IPackageBinding binding) {
+		return new DesignerPackageBinding(binding);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Internal registration
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  void register(String fullyQualifiedName, DesignerTypeBinding designerBinding) {
-    m_typeBindings.put(fullyQualifiedName, designerBinding);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Internal registration
+	//
+	////////////////////////////////////////////////////////////////////////////
+	void register(String fullyQualifiedName, DesignerTypeBinding designerBinding) {
+		m_typeBindings.put(fullyQualifiedName, designerBinding);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ast/binding/DesignerMethodBinding.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ast/binding/DesignerMethodBinding.java
index aaa34c6ee..cb5d070b5 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ast/binding/DesignerMethodBinding.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ast/binding/DesignerMethodBinding.java
@@ -30,266 +30,266 @@
  * @coverage core.util.ast
  */
 public final class DesignerMethodBinding implements IMethodBinding {
-  private final String m_name;
-  private final int m_modifiers;
-  private final boolean m_constructor;
-  private final boolean m_varargs;
-  private final ITypeBinding m_declaringClass;
-  private final ITypeBinding m_returnType;
-  private ITypeBinding[] m_parameterTypes;
-  private String[] m_parameterNames;
-  private ITypeBinding[] m_exceptionTypes;
-  private DesignerMethodBinding m_methodDeclaration;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  DesignerMethodBinding(BindingContext context, IMethodBinding binding) {
-    m_name = binding.getName();
-    m_modifiers = binding.getModifiers();
-    m_constructor = binding.isConstructor();
-    m_varargs = binding.isVarargs();
-    m_declaringClass = context.get(binding.getDeclaringClass());
-    m_returnType = context.get(binding.getReturnType());
-    m_parameterNames = binding.getParameterNames();
-    {
-      ITypeBinding[] parameterTypes = binding.getParameterTypes();
-      m_parameterTypes = new ITypeBinding[parameterTypes.length];
-      for (int i = 0; i < parameterTypes.length; i++) {
-        ITypeBinding parameterType = parameterTypes[i];
-        m_parameterTypes[i] = context.get(parameterType);
-      }
-    }
-    {
-      ITypeBinding[] exceptionTypes = binding.getExceptionTypes();
-      m_exceptionTypes = new ITypeBinding[exceptionTypes.length];
-      for (int i = 0; i < exceptionTypes.length; i++) {
-        ITypeBinding exceptionType = exceptionTypes[i];
-        m_exceptionTypes[i] = context.get(exceptionType);
-      }
-    }
-    {
-      IMethodBinding methodDeclaration = binding.getMethodDeclaration();
-      if (methodDeclaration == binding) {
-        m_methodDeclaration = this;
-      } else {
-        m_methodDeclaration = context.get(methodDeclaration);
-      }
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Internal access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Removes parameter type with given index.
-   */
-  public void removeParameterType(int index) {
-    m_parameterTypes = (ITypeBinding[]) ArrayUtils.remove(m_parameterTypes, index);
-    m_parameterNames = (String[]) ArrayUtils.remove(m_parameterNames, index);
-    if (m_methodDeclaration != this) {
-      m_methodDeclaration.removeParameterType(index);
-    }
-  }
-
-  /**
-   * Adds new {@link ITypeBinding} into throws exceptions.
-   */
-  public void addExceptionType(ITypeBinding newException) {
-    m_exceptionTypes = (ITypeBinding[]) ArrayUtils.add(m_exceptionTypes, newException);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    throw new IllegalArgumentException();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IMethodBinding
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public ITypeBinding getDeclaringClass() {
-    return m_declaringClass;
-  }
-
-  @Override
-  public Object getDefaultValue() {
-    throw new IllegalArgumentException();
-  }
-
-  @Override
-  public ITypeBinding[] getExceptionTypes() {
-    return m_exceptionTypes;
-  }
-
-  @Override
-  public IMethodBinding getMethodDeclaration() {
-    return m_methodDeclaration;
-  }
-
-  @Override
-  public String getName() {
-    return m_name;
-  }
-
-  @Override
-  public IAnnotationBinding[] getParameterAnnotations(int paramIndex) {
-    throw new IllegalArgumentException();
-  }
-
-  @Override
-  public ITypeBinding[] getParameterTypes() {
-    return m_parameterTypes;
-  }
-
-  @Override
-  public String[] getParameterNames() {
-    return m_parameterNames;
-  }
-
-  @Override
-  public ITypeBinding getReturnType() {
-    return m_returnType;
-  }
-
-  @Override
-  public ITypeBinding getDeclaredReceiverType() {
-    throw new IllegalArgumentException();
-  }
-
-  @Override
-  public ITypeBinding[] getTypeArguments() {
-    throw new IllegalArgumentException();
-  }
-
-  @Override
-  public ITypeBinding[] getTypeParameters() {
-    throw new IllegalArgumentException();
-  }
-
-  @Override
-  public boolean isAnnotationMember() {
-    throw new IllegalArgumentException();
-  }
-
-  @Override
-  public boolean isConstructor() {
-    return m_constructor;
-  }
-
-  @Override
-  public boolean isDefaultConstructor() {
-    throw new IllegalArgumentException();
-  }
-
-  @Override
-  public boolean isGenericMethod() {
-    throw new IllegalArgumentException();
-  }
-
-  @Override
-  public boolean isParameterizedMethod() {
-    throw new IllegalArgumentException();
-  }
-
-  @Override
-  public boolean isRawMethod() {
-    throw new IllegalArgumentException();
-  }
-
-  @Override
-  public boolean isSubsignature(IMethodBinding otherMethod) {
-    throw new IllegalArgumentException();
-  }
-
-  @Override
-  public boolean isVarargs() {
-    return m_varargs;
-  }
-
-  @Override
-  public boolean overrides(IMethodBinding method) {
-    throw new IllegalArgumentException();
-  }
-
-  @Override
-  public IAnnotationBinding[] getAnnotations() {
-    throw new IllegalArgumentException();
-  }
-
-  @Override
-  public IJavaElement getJavaElement() {
-    throw new IllegalArgumentException();
-  }
-
-  @Override
-  public String getKey() {
-    throw new IllegalArgumentException();
-  }
-
-  @Override
-  public int getKind() {
-    throw new IllegalArgumentException();
-  }
-
-  @Override
-  public int getModifiers() {
-    return m_modifiers;
-  }
-
-  @Override
-  public boolean isDeprecated() {
-    throw new IllegalArgumentException();
-  }
-
-  @Override
-  public boolean isEqualTo(IBinding binding) {
-    throw new IllegalArgumentException();
-  }
-
-  @Override
-  public boolean isSynthetic() {
-    throw new IllegalArgumentException();
-  }
-
-  @Override
-  public boolean isRecovered() {
-    throw new IllegalArgumentException();
-  }
-
-  @Override
-  public IBinding getDeclaringMember() {
-    return null;
-  }
-
-  @Override
-  public IVariableBinding[] getSyntheticOuterLocals() {
-    return null;
-  }
-
-  @Override
-  public boolean isCompactConstructor() {
-    return false;
-  }
-
-  @Override
-  public boolean isCanonicalConstructor() {
-    return false;
-  }
-
-  @Override
-  public boolean isSyntheticRecordMethod() {
-    return false;
-  }
+	private final String m_name;
+	private final int m_modifiers;
+	private final boolean m_constructor;
+	private final boolean m_varargs;
+	private final ITypeBinding m_declaringClass;
+	private final ITypeBinding m_returnType;
+	private ITypeBinding[] m_parameterTypes;
+	private String[] m_parameterNames;
+	private ITypeBinding[] m_exceptionTypes;
+	private DesignerMethodBinding m_methodDeclaration;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	DesignerMethodBinding(BindingContext context, IMethodBinding binding) {
+		m_name = binding.getName();
+		m_modifiers = binding.getModifiers();
+		m_constructor = binding.isConstructor();
+		m_varargs = binding.isVarargs();
+		m_declaringClass = context.get(binding.getDeclaringClass());
+		m_returnType = context.get(binding.getReturnType());
+		m_parameterNames = binding.getParameterNames();
+		{
+			ITypeBinding[] parameterTypes = binding.getParameterTypes();
+			m_parameterTypes = new ITypeBinding[parameterTypes.length];
+			for (int i = 0; i < parameterTypes.length; i++) {
+				ITypeBinding parameterType = parameterTypes[i];
+				m_parameterTypes[i] = context.get(parameterType);
+			}
+		}
+		{
+			ITypeBinding[] exceptionTypes = binding.getExceptionTypes();
+			m_exceptionTypes = new ITypeBinding[exceptionTypes.length];
+			for (int i = 0; i < exceptionTypes.length; i++) {
+				ITypeBinding exceptionType = exceptionTypes[i];
+				m_exceptionTypes[i] = context.get(exceptionType);
+			}
+		}
+		{
+			IMethodBinding methodDeclaration = binding.getMethodDeclaration();
+			if (methodDeclaration == binding) {
+				m_methodDeclaration = this;
+			} else {
+				m_methodDeclaration = context.get(methodDeclaration);
+			}
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Internal access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Removes parameter type with given index.
+	 */
+	public void removeParameterType(int index) {
+		m_parameterTypes = (ITypeBinding[]) ArrayUtils.remove(m_parameterTypes, index);
+		m_parameterNames = (String[]) ArrayUtils.remove(m_parameterNames, index);
+		if (m_methodDeclaration != this) {
+			m_methodDeclaration.removeParameterType(index);
+		}
+	}
+
+	/**
+	 * Adds new {@link ITypeBinding} into throws exceptions.
+	 */
+	public void addExceptionType(ITypeBinding newException) {
+		m_exceptionTypes = (ITypeBinding[]) ArrayUtils.add(m_exceptionTypes, newException);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		throw new IllegalArgumentException();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IMethodBinding
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public ITypeBinding getDeclaringClass() {
+		return m_declaringClass;
+	}
+
+	@Override
+	public Object getDefaultValue() {
+		throw new IllegalArgumentException();
+	}
+
+	@Override
+	public ITypeBinding[] getExceptionTypes() {
+		return m_exceptionTypes;
+	}
+
+	@Override
+	public IMethodBinding getMethodDeclaration() {
+		return m_methodDeclaration;
+	}
+
+	@Override
+	public String getName() {
+		return m_name;
+	}
+
+	@Override
+	public IAnnotationBinding[] getParameterAnnotations(int paramIndex) {
+		throw new IllegalArgumentException();
+	}
+
+	@Override
+	public ITypeBinding[] getParameterTypes() {
+		return m_parameterTypes;
+	}
+
+	@Override
+	public String[] getParameterNames() {
+		return m_parameterNames;
+	}
+
+	@Override
+	public ITypeBinding getReturnType() {
+		return m_returnType;
+	}
+
+	@Override
+	public ITypeBinding getDeclaredReceiverType() {
+		throw new IllegalArgumentException();
+	}
+
+	@Override
+	public ITypeBinding[] getTypeArguments() {
+		throw new IllegalArgumentException();
+	}
+
+	@Override
+	public ITypeBinding[] getTypeParameters() {
+		throw new IllegalArgumentException();
+	}
+
+	@Override
+	public boolean isAnnotationMember() {
+		throw new IllegalArgumentException();
+	}
+
+	@Override
+	public boolean isConstructor() {
+		return m_constructor;
+	}
+
+	@Override
+	public boolean isDefaultConstructor() {
+		throw new IllegalArgumentException();
+	}
+
+	@Override
+	public boolean isGenericMethod() {
+		throw new IllegalArgumentException();
+	}
+
+	@Override
+	public boolean isParameterizedMethod() {
+		throw new IllegalArgumentException();
+	}
+
+	@Override
+	public boolean isRawMethod() {
+		throw new IllegalArgumentException();
+	}
+
+	@Override
+	public boolean isSubsignature(IMethodBinding otherMethod) {
+		throw new IllegalArgumentException();
+	}
+
+	@Override
+	public boolean isVarargs() {
+		return m_varargs;
+	}
+
+	@Override
+	public boolean overrides(IMethodBinding method) {
+		throw new IllegalArgumentException();
+	}
+
+	@Override
+	public IAnnotationBinding[] getAnnotations() {
+		throw new IllegalArgumentException();
+	}
+
+	@Override
+	public IJavaElement getJavaElement() {
+		throw new IllegalArgumentException();
+	}
+
+	@Override
+	public String getKey() {
+		throw new IllegalArgumentException();
+	}
+
+	@Override
+	public int getKind() {
+		throw new IllegalArgumentException();
+	}
+
+	@Override
+	public int getModifiers() {
+		return m_modifiers;
+	}
+
+	@Override
+	public boolean isDeprecated() {
+		throw new IllegalArgumentException();
+	}
+
+	@Override
+	public boolean isEqualTo(IBinding binding) {
+		throw new IllegalArgumentException();
+	}
+
+	@Override
+	public boolean isSynthetic() {
+		throw new IllegalArgumentException();
+	}
+
+	@Override
+	public boolean isRecovered() {
+		throw new IllegalArgumentException();
+	}
+
+	@Override
+	public IBinding getDeclaringMember() {
+		return null;
+	}
+
+	@Override
+	public IVariableBinding[] getSyntheticOuterLocals() {
+		return null;
+	}
+
+	@Override
+	public boolean isCompactConstructor() {
+		return false;
+	}
+
+	@Override
+	public boolean isCanonicalConstructor() {
+		return false;
+	}
+
+	@Override
+	public boolean isSyntheticRecordMethod() {
+		return false;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ast/binding/DesignerPackageBinding.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ast/binding/DesignerPackageBinding.java
index 9556a7bd7..d1aa77dac 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ast/binding/DesignerPackageBinding.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ast/binding/DesignerPackageBinding.java
@@ -25,96 +25,96 @@
  * @coverage core.util.ast
  */
 final class DesignerPackageBinding implements IPackageBinding {
-  private final String m_name;
-  private final boolean m_unnamed;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  DesignerPackageBinding(IPackageBinding binding) {
-    m_name = binding.getName();
-    m_unnamed = binding.isUnnamed();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    throw new IllegalArgumentException();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IPackageBinding methods
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getName() {
-    return m_name;
-  }
-
-  @Override
-  public boolean isUnnamed() {
-    return m_unnamed;
-  }
-
-  @Override
-  public String[] getNameComponents() {
-    throw new IllegalArgumentException();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IBinding methods
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public int getKind() {
-    throw new IllegalArgumentException();
-  }
-
-  @Override
-  public int getModifiers() {
-    throw new IllegalArgumentException();
-  }
-
-  @Override
-  public boolean isDeprecated() {
-    throw new IllegalArgumentException();
-  }
-
-  @Override
-  public boolean isSynthetic() {
-    throw new IllegalArgumentException();
-  }
-
-  @Override
-  public IJavaElement getJavaElement() {
-    throw new IllegalArgumentException();
-  }
-
-  @Override
-  public String getKey() {
-    throw new IllegalArgumentException();
-  }
-
-  @Override
-  public boolean isEqualTo(IBinding binding) {
-    throw new IllegalArgumentException();
-  }
-
-  @Override
-  public boolean isRecovered() {
-    throw new IllegalArgumentException();
-  }
-
-  @Override
-  public org.eclipse.jdt.core.dom.IAnnotationBinding[] getAnnotations() {
-    throw new IllegalArgumentException();
-  }
+	private final String m_name;
+	private final boolean m_unnamed;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	DesignerPackageBinding(IPackageBinding binding) {
+		m_name = binding.getName();
+		m_unnamed = binding.isUnnamed();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		throw new IllegalArgumentException();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IPackageBinding methods
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getName() {
+		return m_name;
+	}
+
+	@Override
+	public boolean isUnnamed() {
+		return m_unnamed;
+	}
+
+	@Override
+	public String[] getNameComponents() {
+		throw new IllegalArgumentException();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IBinding methods
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public int getKind() {
+		throw new IllegalArgumentException();
+	}
+
+	@Override
+	public int getModifiers() {
+		throw new IllegalArgumentException();
+	}
+
+	@Override
+	public boolean isDeprecated() {
+		throw new IllegalArgumentException();
+	}
+
+	@Override
+	public boolean isSynthetic() {
+		throw new IllegalArgumentException();
+	}
+
+	@Override
+	public IJavaElement getJavaElement() {
+		throw new IllegalArgumentException();
+	}
+
+	@Override
+	public String getKey() {
+		throw new IllegalArgumentException();
+	}
+
+	@Override
+	public boolean isEqualTo(IBinding binding) {
+		throw new IllegalArgumentException();
+	}
+
+	@Override
+	public boolean isRecovered() {
+		throw new IllegalArgumentException();
+	}
+
+	@Override
+	public org.eclipse.jdt.core.dom.IAnnotationBinding[] getAnnotations() {
+		throw new IllegalArgumentException();
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ast/binding/DesignerTypeBinding.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ast/binding/DesignerTypeBinding.java
index c7523bd1d..17fadadc8 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ast/binding/DesignerTypeBinding.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ast/binding/DesignerTypeBinding.java
@@ -29,388 +29,388 @@
  * @coverage core.util.ast
  */
 public final class DesignerTypeBinding implements ITypeBinding {
-  private final IPackageBinding m_packageBinding;
-  private final String m_name;
-  private final String m_key;
-  // flags
-  private final boolean m_class;
-  private final boolean m_primitive;
-  private final boolean m_nullType;
-  private final boolean m_interface;
-  private final boolean m_enum;
-  private final boolean m_topLevel;
-  private final boolean m_member;
-  private final boolean m_nested;
-  private final boolean m_local;
-  private final boolean m_anonymous;
-  // generics
-  private final boolean m_genericType;
-  private final boolean m_parameterizedType;
-  private final boolean m_typeVariable;
-  private ITypeBinding m_typeDeclaration;
-  private ITypeBinding[] m_typeArguments;
-  private ITypeBinding[] m_typeParameters;
-  private ITypeBinding[] m_typeBounds;
-  // modifiers
-  private final int m_modifiers;
-  private final int m_declaredModifiers;
-  // array
-  private final boolean m_array;
-  private final ITypeBinding m_elementType;
-  private final int m_dimensions;
-  // elements
-  private final ITypeBinding m_declaringClass;
-  private final ITypeBinding m_superclass;
-  private ITypeBinding[] m_interfaces;
-  private final IMethodBinding[] m_declaredMethods;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  DesignerTypeBinding(BindingContext context, String fullyQualifiedName, ITypeBinding binding) {
-    if (fullyQualifiedName != null) {
-      context.register(fullyQualifiedName, this);
-    }
-    {
-      IPackageBinding jdtPackageBinding = binding.getPackage();
-      if (jdtPackageBinding != null) {
-        m_packageBinding = new DesignerPackageBinding(jdtPackageBinding);
-      } else {
-        m_packageBinding = null;
-      }
-    }
-    m_name = binding.getName();
-    m_key = binding.getKey();
-    // flags
-    m_class = binding.isClass();
-    m_primitive = binding.isPrimitive();
-    m_nullType = binding.isNullType();
-    m_interface = binding.isInterface();
-    m_enum = binding.isEnum();
-    m_topLevel = binding.isTopLevel();
-    m_nested = binding.isNested();
-    m_member = binding.isMember();
-    m_local = binding.isLocal();
-    m_anonymous = binding.isAnonymous();
-    // generics
-    m_genericType = binding.isGenericType();
-    m_parameterizedType = binding.isParameterizedType();
-    m_typeVariable = binding.isTypeVariable();
-    {
-      ITypeBinding typeDeclaration = binding.getTypeDeclaration();
-      if (typeDeclaration == binding) {
-        m_typeDeclaration = this;
-      } else {
-        m_typeDeclaration = context.get(typeDeclaration);
-      }
-    }
-    {
-      ITypeBinding[] typeArguments = binding.getTypeArguments();
-      m_typeArguments = new ITypeBinding[typeArguments.length];
-      for (int i = 0; i < typeArguments.length; i++) {
-        ITypeBinding typeArgument = typeArguments[i];
-        m_typeArguments[i] = context.get(typeArgument, true);
-      }
-    }
-    {
-      ITypeBinding[] typeBounds = binding.getTypeBounds();
-      m_typeBounds = new ITypeBinding[typeBounds.length];
-      for (int i = 0; i < typeBounds.length; i++) {
-        ITypeBinding typeBound = typeBounds[i];
-        m_typeBounds[i] = context.get(typeBound);
-      }
-    }
-    {
-      ITypeBinding[] typeParameters = binding.getTypeParameters();
-      m_typeParameters = new ITypeBinding[typeParameters.length];
-      for (int i = 0; i < typeParameters.length; i++) {
-        ITypeBinding typeParameter = typeParameters[i];
-        m_typeParameters[i] = context.get(typeParameter);
-      }
-    }
-    // modifiers
-    m_modifiers = binding.getModifiers();
-    m_declaredModifiers = binding.getDeclaredModifiers();
-    // array
-    m_array = binding.isArray();
-    if (binding.getElementType() != null) {
-      m_elementType = context.get(binding.getElementType());
-    } else {
-      m_elementType = null;
-    }
-    m_dimensions = binding.getDimensions();
-    // elements
-    m_declaringClass = context.get(binding.getDeclaringClass());
-    m_superclass = context.get(binding.getSuperclass(), true);
-    {
-      ITypeBinding[] jdtInterfaces = binding.getInterfaces();
-      m_interfaces = new ITypeBinding[jdtInterfaces.length];
-      for (int i = 0; i < jdtInterfaces.length; i++) {
-        ITypeBinding jdtInterface = jdtInterfaces[i];
-        m_interfaces[i] = context.get(jdtInterface);
-      }
-    }
-    {
-      IMethodBinding[] methods = binding.getDeclaredMethods();
-      m_declaredMethods = new IMethodBinding[methods.length];
-      for (int i = 0; i < methods.length; i++) {
-        IMethodBinding method = methods[i];
-        m_declaredMethods[i] = context.get(method);
-      }
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Internal access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds new {@link ITypeBinding} into implemented interfaces.
-   */
-  public void addInterface(ITypeBinding typeBinding) {
-    ITypeBinding[] newInterfaces = new ITypeBinding[m_interfaces.length + 1];
-    System.arraycopy(m_interfaces, 0, newInterfaces, 0, m_interfaces.length);
-    newInterfaces[newInterfaces.length - 1] = typeBinding;
-    m_interfaces = newInterfaces;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    throw new IllegalArgumentException();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ITypeBinding
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getBinaryName() {
-    throw new IllegalArgumentException();
-  }
-
-  @Override
-  public boolean isPrimitive() {
-    return m_primitive;
-  }
-
-  @Override
-  public boolean isNullType() {
-    return m_nullType;
-  }
-
-  @Override
-  public boolean isArray() {
-    return m_array;
-  }
-
-  @Override
-  public ITypeBinding getElementType() {
-    return m_elementType;
-  }
-
-  @Override
-  public int getDimensions() {
-    return m_dimensions;
-  }
-
-  @Override
-  public boolean isClass() {
-    return m_class;
-  }
-
-  @Override
-  public boolean isInterface() {
-    return m_interface;
-  }
-
-  @Override
-  public boolean isEnum() {
-    return m_enum;
-  }
-
-  @Override
-  public boolean isAnnotation() {
-    throw new IllegalArgumentException();
-  }
-
-  @Override
-  public ITypeBinding[] getTypeParameters() {
-    return m_typeParameters;
-  }
-
-  @Override
-  public boolean isTypeVariable() {
-    return m_typeVariable;
-  }
-
-  @Override
-  public ITypeBinding[] getTypeBounds() {
-    return m_typeBounds;
-  }
-
-  @Override
-  public boolean isParameterizedType() {
-    return m_parameterizedType;
-  }
-
-  @Override
-  public ITypeBinding[] getTypeArguments() {
-    return m_typeArguments;
-  }
-
-  @Override
-  public ITypeBinding getErasure() {
-    throw new IllegalArgumentException();
-  }
-
-  @Override
-  public boolean isRawType() {
-    throw new IllegalArgumentException();
-  }
-
-  @Override
-  public boolean isWildcardType() {
-    throw new IllegalArgumentException();
-  }
-
-  @Override
-  public ITypeBinding getBound() {
-    throw new IllegalArgumentException();
-  }
-
-  @Override
-  public boolean isUpperbound() {
-    throw new IllegalArgumentException();
-  }
-
-  @Override
-  public String getName() {
-    return m_name;
-  }
-
-  @Override
-  public IPackageBinding getPackage() {
-    return m_packageBinding;
-  }
-
-  @Override
-  public ITypeBinding getDeclaringClass() {
-    return m_declaringClass;
-  }
-
-  @Override
-  public ITypeBinding getSuperclass() {
-    return m_superclass;
-  }
-
-  @Override
-  public ITypeBinding[] getInterfaces() {
-    return m_interfaces;
-  }
-
-  @Override
-  public int getModifiers() {
-    return m_modifiers;
-  }
-
-  @Override
-  public int getDeclaredModifiers() {
-    return m_declaredModifiers;
-  }
-
-  @Override
-  public boolean isTopLevel() {
-    return m_topLevel;
-  }
-
-  @Override
-  public boolean isNested() {
-    return m_nested;
-  }
-
-  @Override
-  public boolean isMember() {
-    return m_member;
-  }
-
-  @Override
-  public boolean isLocal() {
-    return m_local;
-  }
-
-  @Override
-  public boolean isAnonymous() {
-    return m_anonymous;
-  }
-
-  @Override
-  public ITypeBinding[] getDeclaredTypes() {
-    throw new IllegalArgumentException();
-  }
-
-  @Override
-  public IVariableBinding[] getDeclaredFields() {
-    throw new IllegalArgumentException();
-  }
-
-  @Override
-  public IMethodBinding[] getDeclaredMethods() {
-    return m_declaredMethods;
-  }
-
-  @Override
-  public boolean isFromSource() {
-    throw new IllegalArgumentException();
-  }
-
-  @Override
-  public String getQualifiedName() {
-    throw new IllegalArgumentException();
-  }
-
-  @Override
-  public int getKind() {
-    throw new IllegalArgumentException();
-  }
-
-  @Override
-  public boolean isDeprecated() {
-    throw new IllegalArgumentException();
-  }
-
-  @Override
-  public boolean isSynthetic() {
-    throw new IllegalArgumentException();
-  }
-
-  @Override
-  public IJavaElement getJavaElement() {
-    throw new IllegalArgumentException();
-  }
-
-  @Override
-  public String getKey() {
-    return m_key;
-  }
-
-  @Override
-  public boolean isEqualTo(IBinding binding) {
-    throw new IllegalArgumentException();
-  }
-
-  //
-  // For Eclipse 2.0 support
-  //
-  /*public String getQualifiedName(ITypeBinding binding) {
+	private final IPackageBinding m_packageBinding;
+	private final String m_name;
+	private final String m_key;
+	// flags
+	private final boolean m_class;
+	private final boolean m_primitive;
+	private final boolean m_nullType;
+	private final boolean m_interface;
+	private final boolean m_enum;
+	private final boolean m_topLevel;
+	private final boolean m_member;
+	private final boolean m_nested;
+	private final boolean m_local;
+	private final boolean m_anonymous;
+	// generics
+	private final boolean m_genericType;
+	private final boolean m_parameterizedType;
+	private final boolean m_typeVariable;
+	private ITypeBinding m_typeDeclaration;
+	private ITypeBinding[] m_typeArguments;
+	private ITypeBinding[] m_typeParameters;
+	private ITypeBinding[] m_typeBounds;
+	// modifiers
+	private final int m_modifiers;
+	private final int m_declaredModifiers;
+	// array
+	private final boolean m_array;
+	private final ITypeBinding m_elementType;
+	private final int m_dimensions;
+	// elements
+	private final ITypeBinding m_declaringClass;
+	private final ITypeBinding m_superclass;
+	private ITypeBinding[] m_interfaces;
+	private final IMethodBinding[] m_declaredMethods;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	DesignerTypeBinding(BindingContext context, String fullyQualifiedName, ITypeBinding binding) {
+		if (fullyQualifiedName != null) {
+			context.register(fullyQualifiedName, this);
+		}
+		{
+			IPackageBinding jdtPackageBinding = binding.getPackage();
+			if (jdtPackageBinding != null) {
+				m_packageBinding = new DesignerPackageBinding(jdtPackageBinding);
+			} else {
+				m_packageBinding = null;
+			}
+		}
+		m_name = binding.getName();
+		m_key = binding.getKey();
+		// flags
+		m_class = binding.isClass();
+		m_primitive = binding.isPrimitive();
+		m_nullType = binding.isNullType();
+		m_interface = binding.isInterface();
+		m_enum = binding.isEnum();
+		m_topLevel = binding.isTopLevel();
+		m_nested = binding.isNested();
+		m_member = binding.isMember();
+		m_local = binding.isLocal();
+		m_anonymous = binding.isAnonymous();
+		// generics
+		m_genericType = binding.isGenericType();
+		m_parameterizedType = binding.isParameterizedType();
+		m_typeVariable = binding.isTypeVariable();
+		{
+			ITypeBinding typeDeclaration = binding.getTypeDeclaration();
+			if (typeDeclaration == binding) {
+				m_typeDeclaration = this;
+			} else {
+				m_typeDeclaration = context.get(typeDeclaration);
+			}
+		}
+		{
+			ITypeBinding[] typeArguments = binding.getTypeArguments();
+			m_typeArguments = new ITypeBinding[typeArguments.length];
+			for (int i = 0; i < typeArguments.length; i++) {
+				ITypeBinding typeArgument = typeArguments[i];
+				m_typeArguments[i] = context.get(typeArgument, true);
+			}
+		}
+		{
+			ITypeBinding[] typeBounds = binding.getTypeBounds();
+			m_typeBounds = new ITypeBinding[typeBounds.length];
+			for (int i = 0; i < typeBounds.length; i++) {
+				ITypeBinding typeBound = typeBounds[i];
+				m_typeBounds[i] = context.get(typeBound);
+			}
+		}
+		{
+			ITypeBinding[] typeParameters = binding.getTypeParameters();
+			m_typeParameters = new ITypeBinding[typeParameters.length];
+			for (int i = 0; i < typeParameters.length; i++) {
+				ITypeBinding typeParameter = typeParameters[i];
+				m_typeParameters[i] = context.get(typeParameter);
+			}
+		}
+		// modifiers
+		m_modifiers = binding.getModifiers();
+		m_declaredModifiers = binding.getDeclaredModifiers();
+		// array
+		m_array = binding.isArray();
+		if (binding.getElementType() != null) {
+			m_elementType = context.get(binding.getElementType());
+		} else {
+			m_elementType = null;
+		}
+		m_dimensions = binding.getDimensions();
+		// elements
+		m_declaringClass = context.get(binding.getDeclaringClass());
+		m_superclass = context.get(binding.getSuperclass(), true);
+		{
+			ITypeBinding[] jdtInterfaces = binding.getInterfaces();
+			m_interfaces = new ITypeBinding[jdtInterfaces.length];
+			for (int i = 0; i < jdtInterfaces.length; i++) {
+				ITypeBinding jdtInterface = jdtInterfaces[i];
+				m_interfaces[i] = context.get(jdtInterface);
+			}
+		}
+		{
+			IMethodBinding[] methods = binding.getDeclaredMethods();
+			m_declaredMethods = new IMethodBinding[methods.length];
+			for (int i = 0; i < methods.length; i++) {
+				IMethodBinding method = methods[i];
+				m_declaredMethods[i] = context.get(method);
+			}
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Internal access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds new {@link ITypeBinding} into implemented interfaces.
+	 */
+	public void addInterface(ITypeBinding typeBinding) {
+		ITypeBinding[] newInterfaces = new ITypeBinding[m_interfaces.length + 1];
+		System.arraycopy(m_interfaces, 0, newInterfaces, 0, m_interfaces.length);
+		newInterfaces[newInterfaces.length - 1] = typeBinding;
+		m_interfaces = newInterfaces;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		throw new IllegalArgumentException();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ITypeBinding
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getBinaryName() {
+		throw new IllegalArgumentException();
+	}
+
+	@Override
+	public boolean isPrimitive() {
+		return m_primitive;
+	}
+
+	@Override
+	public boolean isNullType() {
+		return m_nullType;
+	}
+
+	@Override
+	public boolean isArray() {
+		return m_array;
+	}
+
+	@Override
+	public ITypeBinding getElementType() {
+		return m_elementType;
+	}
+
+	@Override
+	public int getDimensions() {
+		return m_dimensions;
+	}
+
+	@Override
+	public boolean isClass() {
+		return m_class;
+	}
+
+	@Override
+	public boolean isInterface() {
+		return m_interface;
+	}
+
+	@Override
+	public boolean isEnum() {
+		return m_enum;
+	}
+
+	@Override
+	public boolean isAnnotation() {
+		throw new IllegalArgumentException();
+	}
+
+	@Override
+	public ITypeBinding[] getTypeParameters() {
+		return m_typeParameters;
+	}
+
+	@Override
+	public boolean isTypeVariable() {
+		return m_typeVariable;
+	}
+
+	@Override
+	public ITypeBinding[] getTypeBounds() {
+		return m_typeBounds;
+	}
+
+	@Override
+	public boolean isParameterizedType() {
+		return m_parameterizedType;
+	}
+
+	@Override
+	public ITypeBinding[] getTypeArguments() {
+		return m_typeArguments;
+	}
+
+	@Override
+	public ITypeBinding getErasure() {
+		throw new IllegalArgumentException();
+	}
+
+	@Override
+	public boolean isRawType() {
+		throw new IllegalArgumentException();
+	}
+
+	@Override
+	public boolean isWildcardType() {
+		throw new IllegalArgumentException();
+	}
+
+	@Override
+	public ITypeBinding getBound() {
+		throw new IllegalArgumentException();
+	}
+
+	@Override
+	public boolean isUpperbound() {
+		throw new IllegalArgumentException();
+	}
+
+	@Override
+	public String getName() {
+		return m_name;
+	}
+
+	@Override
+	public IPackageBinding getPackage() {
+		return m_packageBinding;
+	}
+
+	@Override
+	public ITypeBinding getDeclaringClass() {
+		return m_declaringClass;
+	}
+
+	@Override
+	public ITypeBinding getSuperclass() {
+		return m_superclass;
+	}
+
+	@Override
+	public ITypeBinding[] getInterfaces() {
+		return m_interfaces;
+	}
+
+	@Override
+	public int getModifiers() {
+		return m_modifiers;
+	}
+
+	@Override
+	public int getDeclaredModifiers() {
+		return m_declaredModifiers;
+	}
+
+	@Override
+	public boolean isTopLevel() {
+		return m_topLevel;
+	}
+
+	@Override
+	public boolean isNested() {
+		return m_nested;
+	}
+
+	@Override
+	public boolean isMember() {
+		return m_member;
+	}
+
+	@Override
+	public boolean isLocal() {
+		return m_local;
+	}
+
+	@Override
+	public boolean isAnonymous() {
+		return m_anonymous;
+	}
+
+	@Override
+	public ITypeBinding[] getDeclaredTypes() {
+		throw new IllegalArgumentException();
+	}
+
+	@Override
+	public IVariableBinding[] getDeclaredFields() {
+		throw new IllegalArgumentException();
+	}
+
+	@Override
+	public IMethodBinding[] getDeclaredMethods() {
+		return m_declaredMethods;
+	}
+
+	@Override
+	public boolean isFromSource() {
+		throw new IllegalArgumentException();
+	}
+
+	@Override
+	public String getQualifiedName() {
+		throw new IllegalArgumentException();
+	}
+
+	@Override
+	public int getKind() {
+		throw new IllegalArgumentException();
+	}
+
+	@Override
+	public boolean isDeprecated() {
+		throw new IllegalArgumentException();
+	}
+
+	@Override
+	public boolean isSynthetic() {
+		throw new IllegalArgumentException();
+	}
+
+	@Override
+	public IJavaElement getJavaElement() {
+		throw new IllegalArgumentException();
+	}
+
+	@Override
+	public String getKey() {
+		return m_key;
+	}
+
+	@Override
+	public boolean isEqualTo(IBinding binding) {
+		throw new IllegalArgumentException();
+	}
+
+	//
+	// For Eclipse 2.0 support
+	//
+	/*public String getQualifiedName(ITypeBinding binding) {
    ITypeBinding declaringType;
    IPackageBinding packageBinding;
    String scope;
@@ -432,115 +432,115 @@ public boolean isEqualTo(IBinding binding) {
    }
    return scope + "." + binding.getName();
    }*/
-  //
-  // New in Eclipse 3.1
-  //
-  @Override
-  public boolean isAssignmentCompatible(ITypeBinding type) {
-    throw new IllegalArgumentException();
-  }
-
-  @Override
-  public boolean isCastCompatible(ITypeBinding type) {
-    throw new IllegalArgumentException();
-  }
-
-  @Override
-  public boolean isGenericType() {
-    return m_genericType;
-  }
-
-  @Override
-  public boolean isSubTypeCompatible(ITypeBinding type) {
-    throw new IllegalArgumentException();
-  }
-
-  @Override
-  public ITypeBinding getTypeDeclaration() {
-    return m_typeDeclaration;
-  }
-
-  @Override
-  public IMethodBinding getDeclaringMethod() {
-    throw new IllegalArgumentException();
-  }
-
-  @Override
-  public ITypeBinding getWildcard() {
-    throw new IllegalArgumentException();
-  }
-
-  @Override
-  public boolean isCapture() {
-    throw new IllegalArgumentException();
-  }
-
-  //
-  // New in Eclipse 3.2M5
-  //
-  @Override
-  public ITypeBinding getComponentType() {
-    throw new IllegalArgumentException();
-  }
-
-  @Override
-  public IAnnotationBinding[] getAnnotations() {
-    throw new IllegalArgumentException();
-  }
-
-  //
-  // New in Eclipse 3.3M2
-  //
-  @Override
-  public ITypeBinding createArrayType(int dimension) {
-    throw new IllegalArgumentException();
-  }
-
-  //
-  // New in Eclipse 3.3M6
-  //
-  @Override
-  public boolean isRecovered() {
-    throw new IllegalArgumentException();
-  }
-
-  //
-  // New in Eclipse 3.5M4
-  //
-  @Override
-  public int getRank() {
-    throw new IllegalArgumentException();
-  }
-
-  @Override
-  public ITypeBinding getGenericTypeOfWildcardType() {
-    throw new IllegalArgumentException();
-  }
-
-  @Override
-  public IMethodBinding getFunctionalInterfaceMethod() {
-    throw new IllegalArgumentException();
-  }
-
-  @Override
-  public IAnnotationBinding[] getTypeAnnotations() {
-    throw new IllegalArgumentException();
-  }
-
-  @Override
-  public IBinding getDeclaringMember() {
-    return null;
-  }
-
-  @Override
-  public boolean isIntersectionType() {
-    // TODO Auto-generated method stub
-    return false;
-  }
-
-  @Override
-  public boolean isRecord() {
-    // TODO Auto-generated method stub
-    return false;
-  }
+	//
+	// New in Eclipse 3.1
+	//
+	@Override
+	public boolean isAssignmentCompatible(ITypeBinding type) {
+		throw new IllegalArgumentException();
+	}
+
+	@Override
+	public boolean isCastCompatible(ITypeBinding type) {
+		throw new IllegalArgumentException();
+	}
+
+	@Override
+	public boolean isGenericType() {
+		return m_genericType;
+	}
+
+	@Override
+	public boolean isSubTypeCompatible(ITypeBinding type) {
+		throw new IllegalArgumentException();
+	}
+
+	@Override
+	public ITypeBinding getTypeDeclaration() {
+		return m_typeDeclaration;
+	}
+
+	@Override
+	public IMethodBinding getDeclaringMethod() {
+		throw new IllegalArgumentException();
+	}
+
+	@Override
+	public ITypeBinding getWildcard() {
+		throw new IllegalArgumentException();
+	}
+
+	@Override
+	public boolean isCapture() {
+		throw new IllegalArgumentException();
+	}
+
+	//
+	// New in Eclipse 3.2M5
+	//
+	@Override
+	public ITypeBinding getComponentType() {
+		throw new IllegalArgumentException();
+	}
+
+	@Override
+	public IAnnotationBinding[] getAnnotations() {
+		throw new IllegalArgumentException();
+	}
+
+	//
+	// New in Eclipse 3.3M2
+	//
+	@Override
+	public ITypeBinding createArrayType(int dimension) {
+		throw new IllegalArgumentException();
+	}
+
+	//
+	// New in Eclipse 3.3M6
+	//
+	@Override
+	public boolean isRecovered() {
+		throw new IllegalArgumentException();
+	}
+
+	//
+	// New in Eclipse 3.5M4
+	//
+	@Override
+	public int getRank() {
+		throw new IllegalArgumentException();
+	}
+
+	@Override
+	public ITypeBinding getGenericTypeOfWildcardType() {
+		throw new IllegalArgumentException();
+	}
+
+	@Override
+	public IMethodBinding getFunctionalInterfaceMethod() {
+		throw new IllegalArgumentException();
+	}
+
+	@Override
+	public IAnnotationBinding[] getTypeAnnotations() {
+		throw new IllegalArgumentException();
+	}
+
+	@Override
+	public IBinding getDeclaringMember() {
+		return null;
+	}
+
+	@Override
+	public boolean isIntersectionType() {
+		// TODO Auto-generated method stub
+		return false;
+	}
+
+	@Override
+	public boolean isRecord() {
+		// TODO Auto-generated method stub
+		return false;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ast/binding/DesignerVariableBinding.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ast/binding/DesignerVariableBinding.java
index b4d5e0fc2..aa3d22076 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ast/binding/DesignerVariableBinding.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ast/binding/DesignerVariableBinding.java
@@ -28,150 +28,150 @@
  * @coverage core.util.ast
  */
 final class DesignerVariableBinding implements IVariableBinding {
-  private final String m_name;
-  private final ITypeBinding m_declaringClass;
-  private final ITypeBinding m_type;
-  private final boolean m_field;
-  private final int m_modifiers;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  DesignerVariableBinding(BindingContext context, IVariableBinding binding) {
-    m_name = binding.getName();
-    m_type = context.get(binding.getType(), true);
-    m_declaringClass = context.get(binding.getDeclaringClass());
-    m_field = binding.isField();
-    m_modifiers = binding.getModifiers();
-  }
-
-  DesignerVariableBinding(BindingContext context,
-      String name,
-      ITypeBinding declaringClass,
-      ITypeBinding type,
-      boolean field,
-      int modifiers) {
-    m_name = name;
-    m_declaringClass = context.get(declaringClass);
-    m_type = context.get(type, true);
-    m_field = field;
-    m_modifiers = modifiers;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    throw new IllegalArgumentException();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IVariableBinding
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Object getConstantValue() {
-    throw new IllegalArgumentException();
-  }
-
-  @Override
-  public ITypeBinding getDeclaringClass() {
-    return m_declaringClass;
-  }
-
-  @Override
-  public IMethodBinding getDeclaringMethod() {
-    throw new IllegalArgumentException();
-  }
-
-  @Override
-  public String getName() {
-    return m_name;
-  }
-
-  @Override
-  public ITypeBinding getType() {
-    return m_type;
-  }
-
-  @Override
-  public IVariableBinding getVariableDeclaration() {
-    throw new IllegalArgumentException();
-  }
-
-  @Override
-  public int getVariableId() {
-    throw new IllegalArgumentException();
-  }
-
-  @Override
-  public boolean isEnumConstant() {
-    throw new IllegalArgumentException();
-  }
-
-  @Override
-  public boolean isField() {
-    return m_field;
-  }
-
-  @Override
-  public boolean isParameter() {
-    throw new IllegalArgumentException();
-  }
-
-  @Override
-  public IAnnotationBinding[] getAnnotations() {
-    throw new IllegalArgumentException();
-  }
-
-  @Override
-  public IJavaElement getJavaElement() {
-    throw new IllegalArgumentException();
-  }
-
-  @Override
-  public String getKey() {
-    throw new IllegalArgumentException();
-  }
-
-  @Override
-  public int getKind() {
-    throw new IllegalArgumentException();
-  }
-
-  @Override
-  public int getModifiers() {
-    return m_modifiers;
-  }
-
-  @Override
-  public boolean isDeprecated() {
-    throw new IllegalArgumentException();
-  }
-
-  @Override
-  public boolean isEqualTo(IBinding binding) {
-    throw new IllegalArgumentException();
-  }
-
-  @Override
-  public boolean isSynthetic() {
-    throw new IllegalArgumentException();
-  }
-
-  @Override
-  public boolean isRecovered() {
-    throw new IllegalArgumentException();
-  }
-
-  @Override
-  public boolean isEffectivelyFinal() {
-    throw new IllegalArgumentException();
-  }
+	private final String m_name;
+	private final ITypeBinding m_declaringClass;
+	private final ITypeBinding m_type;
+	private final boolean m_field;
+	private final int m_modifiers;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	DesignerVariableBinding(BindingContext context, IVariableBinding binding) {
+		m_name = binding.getName();
+		m_type = context.get(binding.getType(), true);
+		m_declaringClass = context.get(binding.getDeclaringClass());
+		m_field = binding.isField();
+		m_modifiers = binding.getModifiers();
+	}
+
+	DesignerVariableBinding(BindingContext context,
+			String name,
+			ITypeBinding declaringClass,
+			ITypeBinding type,
+			boolean field,
+			int modifiers) {
+		m_name = name;
+		m_declaringClass = context.get(declaringClass);
+		m_type = context.get(type, true);
+		m_field = field;
+		m_modifiers = modifiers;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		throw new IllegalArgumentException();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IVariableBinding
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Object getConstantValue() {
+		throw new IllegalArgumentException();
+	}
+
+	@Override
+	public ITypeBinding getDeclaringClass() {
+		return m_declaringClass;
+	}
+
+	@Override
+	public IMethodBinding getDeclaringMethod() {
+		throw new IllegalArgumentException();
+	}
+
+	@Override
+	public String getName() {
+		return m_name;
+	}
+
+	@Override
+	public ITypeBinding getType() {
+		return m_type;
+	}
+
+	@Override
+	public IVariableBinding getVariableDeclaration() {
+		throw new IllegalArgumentException();
+	}
+
+	@Override
+	public int getVariableId() {
+		throw new IllegalArgumentException();
+	}
+
+	@Override
+	public boolean isEnumConstant() {
+		throw new IllegalArgumentException();
+	}
+
+	@Override
+	public boolean isField() {
+		return m_field;
+	}
+
+	@Override
+	public boolean isParameter() {
+		throw new IllegalArgumentException();
+	}
+
+	@Override
+	public IAnnotationBinding[] getAnnotations() {
+		throw new IllegalArgumentException();
+	}
+
+	@Override
+	public IJavaElement getJavaElement() {
+		throw new IllegalArgumentException();
+	}
+
+	@Override
+	public String getKey() {
+		throw new IllegalArgumentException();
+	}
+
+	@Override
+	public int getKind() {
+		throw new IllegalArgumentException();
+	}
+
+	@Override
+	public int getModifiers() {
+		return m_modifiers;
+	}
+
+	@Override
+	public boolean isDeprecated() {
+		throw new IllegalArgumentException();
+	}
+
+	@Override
+	public boolean isEqualTo(IBinding binding) {
+		throw new IllegalArgumentException();
+	}
+
+	@Override
+	public boolean isSynthetic() {
+		throw new IllegalArgumentException();
+	}
+
+	@Override
+	public boolean isRecovered() {
+		throw new IllegalArgumentException();
+	}
+
+	@Override
+	public boolean isEffectivelyFinal() {
+		throw new IllegalArgumentException();
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/exception/MultipleConstructorsError.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/exception/MultipleConstructorsError.java
index ac68906c3..9edbe6c48 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/exception/MultipleConstructorsError.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/exception/MultipleConstructorsError.java
@@ -23,39 +23,39 @@
  */
 @SuppressWarnings("serial")
 public final class MultipleConstructorsError extends Error {
-  private final AstEditor m_editor;
-  private final TypeDeclaration m_typeDeclaration;
+	private final AstEditor m_editor;
+	private final TypeDeclaration m_typeDeclaration;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Constructor to use this exception as marker.
-   */
-  public MultipleConstructorsError() {
-    this(null, null);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Constructor to use this exception as marker.
+	 */
+	public MultipleConstructorsError() {
+		this(null, null);
+	}
 
-  /**
-   * Constructor with all required information.
-   */
-  public MultipleConstructorsError(AstEditor editor, TypeDeclaration typeDeclaration) {
-    m_editor = editor;
-    m_typeDeclaration = typeDeclaration;
-  }
+	/**
+	 * Constructor with all required information.
+	 */
+	public MultipleConstructorsError(AstEditor editor, TypeDeclaration typeDeclaration) {
+		m_editor = editor;
+		m_typeDeclaration = typeDeclaration;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AstEditor getEditor() {
-    return m_editor;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AstEditor getEditor() {
+		return m_editor;
+	}
 
-  public TypeDeclaration getTypeDeclaration() {
-    return m_typeDeclaration;
-  }
+	public TypeDeclaration getTypeDeclaration() {
+		return m_typeDeclaration;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/exception/NoEntryPointError.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/exception/NoEntryPointError.java
index 2bbe1241f..4cdbbb7a6 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/exception/NoEntryPointError.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/exception/NoEntryPointError.java
@@ -22,29 +22,29 @@
  */
 @SuppressWarnings("serial")
 public final class NoEntryPointError extends Error {
-  private final AstEditor m_editor;
-  private final TypeDeclaration m_typeDeclaration;
+	private final AstEditor m_editor;
+	private final TypeDeclaration m_typeDeclaration;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public NoEntryPointError(AstEditor editor, TypeDeclaration typeDeclaration) {
-    m_editor = editor;
-    m_typeDeclaration = typeDeclaration;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public NoEntryPointError(AstEditor editor, TypeDeclaration typeDeclaration) {
+		m_editor = editor;
+		m_typeDeclaration = typeDeclaration;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AstEditor getEditor() {
-    return m_editor;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AstEditor getEditor() {
+		return m_editor;
+	}
 
-  public TypeDeclaration getTypeDeclaration() {
-    return m_typeDeclaration;
-  }
+	public TypeDeclaration getTypeDeclaration() {
+		return m_typeDeclaration;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/jdt/core/CodeUtils.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/jdt/core/CodeUtils.java
index 137d3073f..e028bec5c 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/jdt/core/CodeUtils.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/jdt/core/CodeUtils.java
@@ -72,792 +72,792 @@
  * @coverage core.util.jdt
  */
 public class CodeUtils {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private CodeUtils() {
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parsing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Parses given {@link ICompilationUnit} (model) into {@link CompilationUnit} (ast).
-   */
-  public static CompilationUnit parseCompilationUnit(ICompilationUnit unit) throws Exception {
-    String source = unit.getBuffer().getContents();
-    source = clearHiddenCode(source);
-    return parseCompilationUnit(source, unit.getJavaProject(), unit.getElementName());
-  }
-
-  /**
-   * Parses given Java source into {@link CompilationUnit}.
-   */
-  public static CompilationUnit parseCompilationUnit(String source,
-      IJavaProject javaProject,
-      String unitName) {
-    org.eclipse.jdt.core.dom.ASTParser parser =
-        org.eclipse.jdt.core.dom.ASTParser.newParser(AST.JLS3);
-    parser.setSource(source.toCharArray());
-    parser.setProject(javaProject);
-    parser.setCompilerOptions(ProjectUtils.getOptions(javaProject));
-    parser.setUnitName(unitName);
-    parser.setResolveBindings(true);
-    return (CompilationUnit) parser.createAST(null);
-  }
-
-  /**
-   * Replaces in given Java source hidden parts of code with spaces.
-   *
-   * @return the cleared Java source.
-   */
-  private static String clearHiddenCode(String source) throws Exception {
-    // remove hidden code blocks
-    {
-      String beginTag = clearHiddenCode_getTag(IPreferenceConstants.P_CODE_HIDE_BEGIN);
-      String endTag = clearHiddenCode_getTag(IPreferenceConstants.P_CODE_HIDE_END);
-      while (true) {
-        int beginIndex = source.indexOf(beginTag);
-        int endIndex = source.indexOf(endTag);
-        // validate begin/end indexes
-        if (beginIndex == -1 && endIndex == -1) {
-          break;
-        }
-        if (beginIndex == -1 && endIndex != -1) {
-          throw new IllegalStateException("Unexpected state - no hide start and hide stop found.");
-        }
-        if (beginIndex != -1 && endIndex == -1) {
-          throw new IllegalStateException("Unexpected state - no hide stop and hide start found.");
-        }
-        if (beginIndex >= endIndex) {
-          throw new IllegalStateException("Unexpected state - hide start after hide stop.");
-        }
-        // do replace, line by line
-        {
-          Document document = new Document(source);
-          int beginLine = document.getLineOfOffset(beginIndex);
-          int endLine = document.getLineOfOffset(endIndex);
-          for (int line = beginLine; line <= endLine; line++) {
-            IRegion info = document.getLineInformation(line);
-            int beginOffset = line == beginLine ? beginIndex : info.getOffset();
-            //int endOffset = line == endLine ? endIndex : info.getOffset() + info.getLength();
-            int endOffset = info.getOffset() + info.getLength();
-            // replace inside of single line
-            int length = endOffset - beginOffset;
-            document.replace(beginOffset, length, StringUtils.repeat(" ", length));
-          }
-          // get updated source
-          source = document.get();
-        }
-      }
-    }
-    // remove single line hidden code
-    {
-      String lineTag = clearHiddenCode_getTag(IPreferenceConstants.P_CODE_HIDE_LINE);
-      while (true) {
-        // find hide comment
-        int hideIndex = source.indexOf(lineTag);
-        if (hideIndex == -1) {
-          break;
-        }
-        // replace with whitespace using Document
-        Document document = new Document(source);
-        IRegion lineInformation = document.getLineInformationOfOffset(hideIndex);
-        document.replace(
-            lineInformation.getOffset(),
-            lineInformation.getLength(),
-            StringUtils.repeat(" ", lineInformation.getLength()));
-        // get updated source
-        source = document.get();
-      }
-    }
-    return source;
-  }
-
-  private static String clearHiddenCode_getTag(String name) {
-    IPreferenceStore preferences = DesignerPlugin.getPreferences();
-    String tag = preferences.getString(name);
-    tag = tag.trim();
-    // remove leading "//" prefix to search even "// $hide" - formatted line comments
-    tag = StringUtils.removeStart(tag, "//");
-    return tag;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Search
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return primary {@link IType} in given {@link ICompilationUnit}, i.e. type with name of unit.
-   *         Can return <code>null</code> if no such type found.
-   */
-  public static IType findPrimaryType(ICompilationUnit compilationUnit) {
-    String unitName = compilationUnit.getElementName();
-    String typeName = StringUtils.chomp(unitName, ".java");
-    IType primaryType = compilationUnit.getType(typeName);
-    if (primaryType.exists()) {
-      return primaryType;
-    }
-    return null;
-  }
-
-  /**
-   * @return {@link IType} associated with given {@link IJavaElement}.
-   */
-  public static IType getType(IJavaElement element) throws JavaModelException {
-    if (element instanceof IType) {
-      return (IType) element;
-    } else if (element instanceof IMember) {
-      return ((IMember) element).getDeclaringType();
-    } else if (element instanceof ICompilationUnit) {
-      return ((ICompilationUnit) element).findPrimaryType();
-    } else if (element instanceof IClassFile) {
-      return ((IClassFile) element).getType();
-    }
-    return null;
-  }
-
-  /**
-   * @return references of given {@link IType} in {@link IJavaProject}.
-   */
-  public static List<IJavaElement> searchReferences(IType type) throws Exception {
-    IJavaSearchScope scope = prepareSearchScope(type);
-    return searchReferences(scope, type);
-  }
-
-  /**
-   * @return references of given {@link IField} in {@link IJavaProject}.
-   */
-  public static List<IJavaElement> searchReferences(IField field) throws Exception {
-    IJavaSearchScope scope = prepareSearchScope(field);
-    return searchReferences(scope, field);
-  }
-
-  /**
-   * @return references of given {@link IField} in given {@link IJavaSearchScope}.
-   */
-  public static List<IJavaElement> searchReferences(IJavaSearchScope scope, IType type)
-      throws Exception {
-    return searchReferences(scope, (IJavaElement) type);
-  }
-
-  /**
-   * @return references of given {@link IJavaElement} in given {@link IJavaSearchScope}.
-   */
-  private static List<IJavaElement> searchReferences(IJavaSearchScope scope, IJavaElement element)
-      throws Exception {
-    final List<IJavaElement> references = Lists.newArrayList();
-    SearchRequestor requestor = new SearchRequestor() {
-      @Override
-      public void acceptSearchMatch(SearchMatch match) {
-        if (match instanceof ReferenceMatch) {
-          ReferenceMatch refMatch = (ReferenceMatch) match;
-          IJavaElement matchElement = (IJavaElement) refMatch.getElement();
-          {
-            IJavaElement localElement = refMatch.getLocalElement();
-            if (localElement != null) {
-              matchElement = localElement;
-            }
-          }
-          references.add(matchElement);
-        }
-      }
-    };
-    // do search
-    SearchPattern pattern = SearchPattern.createPattern(element, IJavaSearchConstants.REFERENCES);
-    SearchEngine searchEngine = new SearchEngine();
-    searchEngine.search(
-        pattern,
-        new SearchParticipant[]{SearchEngine.getDefaultSearchParticipant()},
-        scope,
-        requestor,
-        new NullProgressMonitor());
-    // done
-    return references;
-  }
-
-  /**
-   * @return the {@link IJavaSearchScope} for full {@link IJavaProject}.
-   */
-  private static IJavaSearchScope prepareSearchScope(IJavaElement element) {
-    IJavaProject javaProject = element.getJavaProject();
-    return SearchEngine.createJavaSearchScope(
-        new IJavaElement[]{javaProject},
-        IJavaSearchScope.SOURCES);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Strings
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Returns the short name of fully qualified class name, or same name for simple type name.
-   *
-   * <pre>
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private CodeUtils() {
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parsing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Parses given {@link ICompilationUnit} (model) into {@link CompilationUnit} (ast).
+	 */
+	public static CompilationUnit parseCompilationUnit(ICompilationUnit unit) throws Exception {
+		String source = unit.getBuffer().getContents();
+		source = clearHiddenCode(source);
+		return parseCompilationUnit(source, unit.getJavaProject(), unit.getElementName());
+	}
+
+	/**
+	 * Parses given Java source into {@link CompilationUnit}.
+	 */
+	public static CompilationUnit parseCompilationUnit(String source,
+			IJavaProject javaProject,
+			String unitName) {
+		org.eclipse.jdt.core.dom.ASTParser parser =
+				org.eclipse.jdt.core.dom.ASTParser.newParser(AST.JLS3);
+		parser.setSource(source.toCharArray());
+		parser.setProject(javaProject);
+		parser.setCompilerOptions(ProjectUtils.getOptions(javaProject));
+		parser.setUnitName(unitName);
+		parser.setResolveBindings(true);
+		return (CompilationUnit) parser.createAST(null);
+	}
+
+	/**
+	 * Replaces in given Java source hidden parts of code with spaces.
+	 *
+	 * @return the cleared Java source.
+	 */
+	private static String clearHiddenCode(String source) throws Exception {
+		// remove hidden code blocks
+		{
+			String beginTag = clearHiddenCode_getTag(IPreferenceConstants.P_CODE_HIDE_BEGIN);
+			String endTag = clearHiddenCode_getTag(IPreferenceConstants.P_CODE_HIDE_END);
+			while (true) {
+				int beginIndex = source.indexOf(beginTag);
+				int endIndex = source.indexOf(endTag);
+				// validate begin/end indexes
+				if (beginIndex == -1 && endIndex == -1) {
+					break;
+				}
+				if (beginIndex == -1 && endIndex != -1) {
+					throw new IllegalStateException("Unexpected state - no hide start and hide stop found.");
+				}
+				if (beginIndex != -1 && endIndex == -1) {
+					throw new IllegalStateException("Unexpected state - no hide stop and hide start found.");
+				}
+				if (beginIndex >= endIndex) {
+					throw new IllegalStateException("Unexpected state - hide start after hide stop.");
+				}
+				// do replace, line by line
+				{
+					Document document = new Document(source);
+					int beginLine = document.getLineOfOffset(beginIndex);
+					int endLine = document.getLineOfOffset(endIndex);
+					for (int line = beginLine; line <= endLine; line++) {
+						IRegion info = document.getLineInformation(line);
+						int beginOffset = line == beginLine ? beginIndex : info.getOffset();
+						//int endOffset = line == endLine ? endIndex : info.getOffset() + info.getLength();
+						int endOffset = info.getOffset() + info.getLength();
+						// replace inside of single line
+						int length = endOffset - beginOffset;
+						document.replace(beginOffset, length, StringUtils.repeat(" ", length));
+					}
+					// get updated source
+					source = document.get();
+				}
+			}
+		}
+		// remove single line hidden code
+		{
+			String lineTag = clearHiddenCode_getTag(IPreferenceConstants.P_CODE_HIDE_LINE);
+			while (true) {
+				// find hide comment
+				int hideIndex = source.indexOf(lineTag);
+				if (hideIndex == -1) {
+					break;
+				}
+				// replace with whitespace using Document
+				Document document = new Document(source);
+				IRegion lineInformation = document.getLineInformationOfOffset(hideIndex);
+				document.replace(
+						lineInformation.getOffset(),
+						lineInformation.getLength(),
+						StringUtils.repeat(" ", lineInformation.getLength()));
+				// get updated source
+				source = document.get();
+			}
+		}
+		return source;
+	}
+
+	private static String clearHiddenCode_getTag(String name) {
+		IPreferenceStore preferences = DesignerPlugin.getPreferences();
+		String tag = preferences.getString(name);
+		tag = tag.trim();
+		// remove leading "//" prefix to search even "// $hide" - formatted line comments
+		tag = StringUtils.removeStart(tag, "//");
+		return tag;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Search
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return primary {@link IType} in given {@link ICompilationUnit}, i.e. type with name of unit.
+	 *         Can return <code>null</code> if no such type found.
+	 */
+	public static IType findPrimaryType(ICompilationUnit compilationUnit) {
+		String unitName = compilationUnit.getElementName();
+		String typeName = StringUtils.chomp(unitName, ".java");
+		IType primaryType = compilationUnit.getType(typeName);
+		if (primaryType.exists()) {
+			return primaryType;
+		}
+		return null;
+	}
+
+	/**
+	 * @return {@link IType} associated with given {@link IJavaElement}.
+	 */
+	public static IType getType(IJavaElement element) throws JavaModelException {
+		if (element instanceof IType) {
+			return (IType) element;
+		} else if (element instanceof IMember) {
+			return ((IMember) element).getDeclaringType();
+		} else if (element instanceof ICompilationUnit) {
+			return ((ICompilationUnit) element).findPrimaryType();
+		} else if (element instanceof IClassFile) {
+			return ((IClassFile) element).getType();
+		}
+		return null;
+	}
+
+	/**
+	 * @return references of given {@link IType} in {@link IJavaProject}.
+	 */
+	public static List<IJavaElement> searchReferences(IType type) throws Exception {
+		IJavaSearchScope scope = prepareSearchScope(type);
+		return searchReferences(scope, type);
+	}
+
+	/**
+	 * @return references of given {@link IField} in {@link IJavaProject}.
+	 */
+	public static List<IJavaElement> searchReferences(IField field) throws Exception {
+		IJavaSearchScope scope = prepareSearchScope(field);
+		return searchReferences(scope, field);
+	}
+
+	/**
+	 * @return references of given {@link IField} in given {@link IJavaSearchScope}.
+	 */
+	public static List<IJavaElement> searchReferences(IJavaSearchScope scope, IType type)
+			throws Exception {
+		return searchReferences(scope, (IJavaElement) type);
+	}
+
+	/**
+	 * @return references of given {@link IJavaElement} in given {@link IJavaSearchScope}.
+	 */
+	private static List<IJavaElement> searchReferences(IJavaSearchScope scope, IJavaElement element)
+			throws Exception {
+		final List<IJavaElement> references = Lists.newArrayList();
+		SearchRequestor requestor = new SearchRequestor() {
+			@Override
+			public void acceptSearchMatch(SearchMatch match) {
+				if (match instanceof ReferenceMatch) {
+					ReferenceMatch refMatch = (ReferenceMatch) match;
+					IJavaElement matchElement = (IJavaElement) refMatch.getElement();
+					{
+						IJavaElement localElement = refMatch.getLocalElement();
+						if (localElement != null) {
+							matchElement = localElement;
+						}
+					}
+					references.add(matchElement);
+				}
+			}
+		};
+		// do search
+		SearchPattern pattern = SearchPattern.createPattern(element, IJavaSearchConstants.REFERENCES);
+		SearchEngine searchEngine = new SearchEngine();
+		searchEngine.search(
+				pattern,
+				new SearchParticipant[]{SearchEngine.getDefaultSearchParticipant()},
+				scope,
+				requestor,
+				new NullProgressMonitor());
+		// done
+		return references;
+	}
+
+	/**
+	 * @return the {@link IJavaSearchScope} for full {@link IJavaProject}.
+	 */
+	private static IJavaSearchScope prepareSearchScope(IJavaElement element) {
+		IJavaProject javaProject = element.getJavaProject();
+		return SearchEngine.createJavaSearchScope(
+				new IJavaElement[]{javaProject},
+				IJavaSearchScope.SOURCES);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Strings
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Returns the short name of fully qualified class name, or same name for simple type name.
+	 *
+	 * <pre>
 	 * CodeUtils.getShortClass("javax.swing.JPanel")  = "JPanel"
 	 * CodeUtils.getShortClass("test.MyPanel$Inner")  = "Inner"
 	 * CodeUtils.getShortClass("boolean")             = "boolean"
 	 * </pre>
-   *
-   * @param className
-   *          the fully qualified class name.
-   *
-   * @return the short name of given class name.
-   */
-  public static String getShortClass(String className) {
-    int index = StringUtils.lastIndexOfAny(className, new String[]{".", "$"});
-    if (index != -1) {
-      return className.substring(index + 1);
-    }
-    return className;
-  }
-
-  /**
-   * @return the name of package for given fully qualified class name.
-   */
-  public static String getPackage(String className) {
-    int lastDotIndex = className.lastIndexOf('.');
-    if (lastDotIndex == -1) {
-      return "";
-    } else {
-      return className.substring(0, lastDotIndex);
-    }
-  }
-
-  /**
-   * @return <code>true</code> if two classes are in same.
-   */
-  public static boolean isSamePackage(String className_1, String className_2) {
-    String package_1 = getPackage(className_1);
-    String package_2 = getPackage(className_2);
-    return package_1.equals(package_2);
-  }
-
-  /**
-   * @return the array of {@link String}'s that contains given strings plus on additional string.
-   *
-   * @param baseStrings
-   *          optional base array of strings (can be <code>null</code>)
-   * @param add
-   *          additional string to add
-   */
-  public static String[] join(String[] baseStrings, String add) {
-    // simple case - no base strings
-    if (baseStrings == null) {
-      return new String[]{add};
-    }
-    // complex case
-    String[] strings = new String[baseStrings.length + 1];
-    System.arraycopy(baseStrings, 0, strings, 0, baseStrings.length);
-    strings[baseStrings.length] = add;
-    return strings;
-  }
-
-  /**
-   * @return the array of {@link String}'s that contains strings from two given arrays.
-   */
-  public static String[] join(String[] strings_1, String[] strings_2) {
-    // check if one of the arrays is null
-    if (strings_1 == null) {
-      return strings_2;
-    }
-    if (strings_2 == null) {
-      return strings_1;
-    }
-    // do join
-    String[] strings = new String[strings_1.length + strings_2.length];
-    System.arraycopy(strings_1, 0, strings, 0, strings_1.length);
-    System.arraycopy(strings_2, 0, strings, strings_1.length, strings_2.length);
-    return strings;
-  }
-
-  /**
-   * @return the array of {@link String}'s that contains strings from two given arrays.
-   */
-  public static String[] join(String[] strings_1, String[] strings_2, String[] strings_3) {
-    String[] strings_1_2 = join(strings_1, strings_2);
-    return join(strings_1_2, strings_3);
-  }
-
-  /**
-   * @return the source as single {@link String}, lines joined using "\n".
-   */
-  public static String getSource(String... lines) {
-    return StringUtils.join(lines, "\n");
-  }
-
-  /**
-   * Generates unique name, checking name in following order:
-   *
-   * <ul>
-   * <li>baseName;</li>
-   * <li>baseName_1;</li>
-   * <li>baseName_2;</li>
-   * <li>etc...</li>
-   * <ul>
-   *
-   * @param baseName
-   *          the base name.
-   * @param validator
-   *          the {@link Predicate} to check uniqueness.
-   * @return the unique name based on given base name.
-   */
-  public static String generateUniqueName(String baseName, Predicate<String> validator) {
-    for (int index = 0;; index++) {
-      // prepare name
-      String name = baseName;
-      if (index != 0) {
-        name += "_" + index;
-      }
-      // if name is unique, return it
-      if (validator.apply(name)) {
-        return name;
-      }
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Class loader
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link ProjectClassLoader} for given {@link IJavaProject}.
-   */
-  public static ProjectClassLoader getProjectClassLoader(IJavaProject project) throws Exception {
-    ClassLoader parentClassLoader = CodeUtils.class.getClassLoader();
-    return ProjectClassLoader.create(parentClassLoader, project);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // JDT model utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if given <code>type</code> is successor of
-   *         <code>superTypeToCheck</code>.
-   */
-  public static boolean isSuccessorOf(IType type, String superTypeName) throws JavaModelException {
-    ITypeHierarchy supertypeHierarchy = type.newSupertypeHierarchy(null);
-    for (IType superType : supertypeHierarchy.getAllTypes()) {
-      if (superType.getFullyQualifiedName().equals(superTypeName)) {
-        return true;
-      }
-    }
-    return false;
-  }
-
-  /**
-   * @return <code>true</code> if given <code>type</code> is successor of
-   *         <code>superTypeToCheck</code>.
-   */
-  public static boolean isSuccessorOf(IType type, IType superType) throws JavaModelException {
-    return isSuccessorOf(type, superType.getFullyQualifiedName());
-  }
-
-  /**
-   * @return the {@link IMethod} in super class for given {@link IMethod}.
-   */
-  public static IMethod findSuperMethod(IMethod method) throws Exception {
-    String signature = getMethodSignature(method);
-    IType type = method.getDeclaringType();
-    return findMethodInSuperTypes(type, signature);
-  }
-
-  /**
-   * @return the {@link IMethod} for given {@link IMethodBinding} or <code>null</code> if not found.
-   */
-  public static IMethod findMethod(IJavaProject project, IMethodBinding methodBinding)
-      throws Exception {
-    String declaringTypeName =
-        AstNodeUtils.getFullyQualifiedName(methodBinding.getDeclaringClass(), false);
-    String signature = AstNodeUtils.getMethodSignature(methodBinding);
-    return findMethod(project, declaringTypeName, signature);
-  }
-
-  /**
-   * @return the {@link IMethod} with given signature or <code>null</code> if not found.
-   */
-  public static IMethod findMethod(IJavaProject project, String typeName, String signature)
-      throws Exception {
-    IType type = project.findType(typeName);
-    return findMethod(type, signature);
-  }
-
-  /**
-   * @return the {@link IMethod} with given signature or <code>null</code> if not found.
-   */
-  public static IMethod findMethod(IType type, String signature) throws Exception {
-    if (type == null) {
-      return null;
-    }
-    // check single type
-    {
-      IMethod method = findMethodSingleType(type, signature);
-      if (method != null) {
-        return method;
-      }
-    }
-    // check super types
-    return findMethodInSuperTypes(type, signature);
-  }
-
-  /**
-   * @return the {@link IMethod} with given signature in super types of given {@link IType}.
-   */
-  private static IMethod findMethodInSuperTypes(IType type, String signature)
-      throws JavaModelException {
-    // check each type for method
-    ITypeHierarchy hierarchy = type.newSupertypeHierarchy(null);
-    IType[] allSupertypes = hierarchy.getAllSupertypes(type);
-    for (int i = allSupertypes.length - 1; i >= 0; i--) {
-      IType superType = allSupertypes[i];
-      IMethod superMethod = findMethodSingleType(superType, signature);
-      if (superMethod != null) {
-        return superMethod;
-      }
-    }
-    // not found
-    return null;
-  }
-
-  /**
-   * @return the {@link IMethod} with given signature exactly in given {@link IType} or
-   *         <code>null</code>.
-   */
-  public static IMethod findMethodSingleType(IType type, String signature)
-      throws JavaModelException {
-    String name = StringUtils.substringBefore(signature, "(");
-    boolean wantConstructor = "<init>".equals(name);
-    for (IMethod method : type.getMethods()) {
-      if (method.getElementName().equals(name) || wantConstructor && method.isConstructor()) {
-        if (getMethodSignature(method).equals(signature)) {
-          return method;
-        }
-      }
-    }
-    // not found
-    return null;
-  }
-
-  /**
-   * @param signatures
-   *          the array with signatures, can have <code>null</code> elements.
-   *
-   * @return the {@link IMethod}'s for given method signatures, with <code>null</code> elements if
-   *         corresponding signature is <code>null</code>.
-   */
-  public static List<IMethod> findMethods(IType type, List<String> signatures)
-      throws JavaModelException {
-    IMethod[] methods = findMethods(type, signatures.toArray(new String[signatures.size()]));
-    return Lists.newArrayList(methods);
-  }
-
-  /**
-   * @param signatures
-   *          the array with signatures, can have <code>null</code> elements.
-   *
-   * @return the array of {@link IMethod} for given array of method signatures, with
-   *         <code>null</code> elements if corresponding signature is <code>null</code>.
-   */
-  public static IMethod[] findMethods(IType type, String[] signatures) throws JavaModelException {
-    // prepare map: signature -> IMethod
-    Map<String, IMethod> signatureToMethod = Maps.newTreeMap();
-    for (IMethod method : type.getMethods()) {
-      signatureToMethod.put(getMethodSignature(method), method);
-    }
-    // fill methods array
-    IMethod[] methods = new IMethod[signatures.length];
-    for (int i = 0; i < signatures.length; i++) {
-      String signature = signatures[i];
-      if (signature != null) {
-        methods[i] = signatureToMethod.get(signature);
-      }
-    }
-    return methods;
-  }
-
-  /**
-   * @return the signature for given {@link IMethod}.
-   */
-  public static String getMethodSignature(IMethod method) throws JavaModelException {
-    Assert.isNotNull(method);
-    StringBuffer buffer = new StringBuffer();
-    // name
-    if (method.isConstructor()) {
-      buffer.append("<init>");
-    } else {
-      buffer.append(method.getElementName());
-    }
-    // parameters
-    buffer.append('(');
-    {
-      IType contextType = method.getDeclaringType();
-      String[] parameterTypes = method.getParameterTypes();
-      for (int i = 0; i < parameterTypes.length; i++) {
-        String shortParameterType = parameterTypes[i];
-        if (i != 0) {
-          buffer.append(',');
-        }
-        String parameterType = getResolvedTypeName(contextType, shortParameterType);
-        buffer.append(parameterType);
-      }
-    }
-    buffer.append(')');
-    // return result
-    return buffer.toString();
-  }
-
-  /**
-   * Resolves the given type name within the context of given {@link IType} (depending on the type
-   * hierarchy and its imports).
-   */
-  public static String getResolvedTypeName(IType context, String typeSignature)
-      throws JavaModelException {
-    // remove generic
-    if (typeSignature.indexOf(Signature.C_GENERIC_START) != -1) {
-      typeSignature = Signature.getTypeErasure(typeSignature);
-    }
-    //
-    int arrayCount = Signature.getArrayCount(typeSignature);
-    char type = typeSignature.charAt(arrayCount);
-    if (type == Signature.C_UNRESOLVED || type == Signature.C_TYPE_VARIABLE) {
-      int semi = typeSignature.indexOf(Signature.C_SEMICOLON, arrayCount + 1);
-      String name = typeSignature.substring(arrayCount + 1, semi);
-      name = getResolvedTypeName_resolveTypeVariable(context, name);
-      // resolve type
-      String[][] resolvedNames = context.resolveType(name);
-      if (resolvedNames != null && resolvedNames.length > 0) {
-        return concatenateName(resolvedNames[0][0], resolvedNames[0][1])
-            + StringUtils.repeat("[]", arrayCount);
-      }
-      // can not resolve
-      return null;
-    }
-    // resolved
-    {
-      String name = Signature.toString(typeSignature);
-      name = getResolvedTypeName_resolveTypeVariable(context, name);
-      // done
-      return name;
-    }
-  }
-
-  /**
-   * If given name is name of generic {@link TypeVariable}, returns its bounds.
-   */
-  private static String getResolvedTypeName_resolveTypeVariable(IType context, String name)
-      throws JavaModelException {
-    ITypeParameter typeParameter = context.getTypeParameter(name);
-    if (typeParameter.exists()) {
-      String[] bounds = typeParameter.getBounds();
-      if (bounds.length != 0) {
-        name = bounds[0];
-      } else {
-        name = "java.lang.Object";
-      }
-    }
-    return name;
-  }
-
-  /**
-   * Concatenates two names. Uses a dot for separation. Both strings can be empty or
-   * <code>null</code>.
-   *
-   * @param name1
-   *          the first name
-   * @param name2
-   *          the second name
-   * @return the concatenated name
-   */
-  private static String concatenateName(String name1, String name2) {
-    StringBuffer buf = new StringBuffer();
-    if (name1 != null && name1.length() > 0) {
-      buf.append(name1);
-    }
-    if (name2 != null && name2.length() > 0) {
-      if (buf.length() > 0) {
-        buf.append('.');
-      }
-      buf.append(name2);
-    }
-    return buf.toString();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // JDT IField utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link IField} with given name or <code>null</code> if not found.
-   */
-  public static IField findField(IJavaProject project, String typeName, String fieldName)
-      throws Exception {
-    IType type = project.findType(typeName);
-    if (type == null) {
-      return null;
-    }
-    // check single type
-    {
-      IField field = findFieldSingleType(type, fieldName);
-      if (field != null) {
-        return field;
-      }
-    }
-    // check super types
-    {
-      ITypeHierarchy hierarchy = type.newSupertypeHierarchy(null);
-      IType[] allSupertypes = hierarchy.getAllSupertypes(type);
-      for (int i = allSupertypes.length - 1; i >= 0; i--) {
-        IType superType = allSupertypes[i];
-        IField field = findFieldSingleType(superType, fieldName);
-        if (field != null) {
-          return field;
-        }
-      }
-    }
-    // not found
-    return null;
-  }
-
-  /**
-   * @return the {@link IField} with given name exactly in given {@link IType} or <code>null</code>.
-   */
-  private static IField findFieldSingleType(IType type, String fieldName) throws JavaModelException {
-    for (IField field : type.getFields()) {
-      if (field.getElementName().equals(fieldName)) {
-        return field;
-      }
-    }
-    // not found
-    return null;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Source containers
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the array {@link IContainer}'s for all source directories of given {@link IJavaProject}
-   *         .
-   */
-  public static List<IContainer> getSourceContainers(IJavaProject javaProject,
-      boolean includeRequiredProjects) throws Exception {
-    List<IContainer> containers = Lists.newArrayList();
-    addSourceContainers(
-        containers,
-        Sets.<IJavaProject>newHashSet(),
-        javaProject,
-        includeRequiredProjects);
-    return containers;
-  }
-
-  /**
-   * Adds {@link IContainer}'s for all source directories of given {@link IJavaProject} and its
-   * required projects.
-   */
-  private static void addSourceContainers(List<IContainer> containers,
-      Set<IJavaProject> visitedProjects,
-      IJavaProject javaProject,
-      boolean includeRequiredProjects) throws Exception {
-    // check for existence
-    if (!javaProject.exists()) {
-      return;
-    }
-    // check for recursion
-    if (visitedProjects.contains(javaProject)) {
-      return;
-    }
-    visitedProjects.add(javaProject);
-    // prepare information
-    IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
-    IProject project = javaProject.getProject();
-    // add source folders
-    for (IClasspathEntry entry : javaProject.getResolvedClasspath(true)) {
-      if (entry.getEntryKind() == IClasspathEntry.CPE_SOURCE) {
-        IContainer container = (IContainer) root.findMember(entry.getPath());
-        if (container != null) {
-          containers.add(container);
-        }
-      }
-    }
-    // source folders of required projects
-    if (includeRequiredProjects) {
-      for (String requiredProjectName : javaProject.getRequiredProjectNames()) {
-        addSourceContainers(containers, visitedProjects, requiredProjectName);
-      }
-    }
-    // source folders for fragments
-    if (includeRequiredProjects) {
-      Object model = ReflectivePDE.findModel(project);
-      if (model != null) {
-        BundleDescription bundleDescription = ReflectivePDE.getPluginModelBundleDescription(model);
-        if (bundleDescription != null) {
-          BundleDescription[] fragments = bundleDescription.getFragments();
-          for (BundleDescription fragment : fragments) {
-            String fragmentProjectName = fragment.getSymbolicName();
-            addSourceContainers(containers, visitedProjects, fragmentProjectName);
-          }
-        }
-      }
-    }
-  }
-
-  /**
-   * Adds {@link IContainer}'s for all source directories of given {@link IJavaProject} and its
-   * required projects.
-   */
-  private static void addSourceContainers(List<IContainer> containers,
-      Set<IJavaProject> visitedProjects,
-      String projectName) throws Exception {
-    IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
-    IProject project = root.getProject(projectName);
-    IJavaProject javaProject = JavaCore.create(project);
-    addSourceContainers(containers, visitedProjects, javaProject, true);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IPackageFragmentRoot
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link IPackageFragmentRoot} that is parent of given {@link IJavaElement} or first
-   *         {@link IPackageFragmentRoot} of {@link IJavaProject}.
-   */
-  public static IPackageFragmentRoot getPackageFragmentRoot(IJavaElement element)
-      throws JavaModelException {
-    if (element != null) {
-      // try to find valid parent IPackageFragmentRoot
-      {
-        IPackageFragmentRoot root =
-            (IPackageFragmentRoot) element.getAncestor(IJavaElement.PACKAGE_FRAGMENT_ROOT);
-        if (root != null && root.getKind() == IPackageFragmentRoot.K_SOURCE) {
-          return root;
-        }
-      }
-      // use IPackageFragmentRoot of IJavaProject
-      {
-        IJavaProject javaProject = element.getJavaProject();
-        if (javaProject != null && javaProject.exists()) {
-          for (IPackageFragmentRoot root : javaProject.getPackageFragmentRoots()) {
-            if (root.getKind() == IPackageFragmentRoot.K_SOURCE) {
-              return root;
-            }
-          }
-        }
-      }
-    }
-    // invalid element
-    return null;
-  }
+	 *
+	 * @param className
+	 *          the fully qualified class name.
+	 *
+	 * @return the short name of given class name.
+	 */
+	public static String getShortClass(String className) {
+		int index = StringUtils.lastIndexOfAny(className, new String[]{".", "$"});
+		if (index != -1) {
+			return className.substring(index + 1);
+		}
+		return className;
+	}
+
+	/**
+	 * @return the name of package for given fully qualified class name.
+	 */
+	public static String getPackage(String className) {
+		int lastDotIndex = className.lastIndexOf('.');
+		if (lastDotIndex == -1) {
+			return "";
+		} else {
+			return className.substring(0, lastDotIndex);
+		}
+	}
+
+	/**
+	 * @return <code>true</code> if two classes are in same.
+	 */
+	public static boolean isSamePackage(String className_1, String className_2) {
+		String package_1 = getPackage(className_1);
+		String package_2 = getPackage(className_2);
+		return package_1.equals(package_2);
+	}
+
+	/**
+	 * @return the array of {@link String}'s that contains given strings plus on additional string.
+	 *
+	 * @param baseStrings
+	 *          optional base array of strings (can be <code>null</code>)
+	 * @param add
+	 *          additional string to add
+	 */
+	public static String[] join(String[] baseStrings, String add) {
+		// simple case - no base strings
+		if (baseStrings == null) {
+			return new String[]{add};
+		}
+		// complex case
+		String[] strings = new String[baseStrings.length + 1];
+		System.arraycopy(baseStrings, 0, strings, 0, baseStrings.length);
+		strings[baseStrings.length] = add;
+		return strings;
+	}
+
+	/**
+	 * @return the array of {@link String}'s that contains strings from two given arrays.
+	 */
+	public static String[] join(String[] strings_1, String[] strings_2) {
+		// check if one of the arrays is null
+		if (strings_1 == null) {
+			return strings_2;
+		}
+		if (strings_2 == null) {
+			return strings_1;
+		}
+		// do join
+		String[] strings = new String[strings_1.length + strings_2.length];
+		System.arraycopy(strings_1, 0, strings, 0, strings_1.length);
+		System.arraycopy(strings_2, 0, strings, strings_1.length, strings_2.length);
+		return strings;
+	}
+
+	/**
+	 * @return the array of {@link String}'s that contains strings from two given arrays.
+	 */
+	public static String[] join(String[] strings_1, String[] strings_2, String[] strings_3) {
+		String[] strings_1_2 = join(strings_1, strings_2);
+		return join(strings_1_2, strings_3);
+	}
+
+	/**
+	 * @return the source as single {@link String}, lines joined using "\n".
+	 */
+	public static String getSource(String... lines) {
+		return StringUtils.join(lines, "\n");
+	}
+
+	/**
+	 * Generates unique name, checking name in following order:
+	 *
+	 * <ul>
+	 * <li>baseName;</li>
+	 * <li>baseName_1;</li>
+	 * <li>baseName_2;</li>
+	 * <li>etc...</li>
+	 * <ul>
+	 *
+	 * @param baseName
+	 *          the base name.
+	 * @param validator
+	 *          the {@link Predicate} to check uniqueness.
+	 * @return the unique name based on given base name.
+	 */
+	public static String generateUniqueName(String baseName, Predicate<String> validator) {
+		for (int index = 0;; index++) {
+			// prepare name
+			String name = baseName;
+			if (index != 0) {
+				name += "_" + index;
+			}
+			// if name is unique, return it
+			if (validator.apply(name)) {
+				return name;
+			}
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Class loader
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link ProjectClassLoader} for given {@link IJavaProject}.
+	 */
+	public static ProjectClassLoader getProjectClassLoader(IJavaProject project) throws Exception {
+		ClassLoader parentClassLoader = CodeUtils.class.getClassLoader();
+		return ProjectClassLoader.create(parentClassLoader, project);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// JDT model utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if given <code>type</code> is successor of
+	 *         <code>superTypeToCheck</code>.
+	 */
+	public static boolean isSuccessorOf(IType type, String superTypeName) throws JavaModelException {
+		ITypeHierarchy supertypeHierarchy = type.newSupertypeHierarchy(null);
+		for (IType superType : supertypeHierarchy.getAllTypes()) {
+			if (superType.getFullyQualifiedName().equals(superTypeName)) {
+				return true;
+			}
+		}
+		return false;
+	}
+
+	/**
+	 * @return <code>true</code> if given <code>type</code> is successor of
+	 *         <code>superTypeToCheck</code>.
+	 */
+	public static boolean isSuccessorOf(IType type, IType superType) throws JavaModelException {
+		return isSuccessorOf(type, superType.getFullyQualifiedName());
+	}
+
+	/**
+	 * @return the {@link IMethod} in super class for given {@link IMethod}.
+	 */
+	public static IMethod findSuperMethod(IMethod method) throws Exception {
+		String signature = getMethodSignature(method);
+		IType type = method.getDeclaringType();
+		return findMethodInSuperTypes(type, signature);
+	}
+
+	/**
+	 * @return the {@link IMethod} for given {@link IMethodBinding} or <code>null</code> if not found.
+	 */
+	public static IMethod findMethod(IJavaProject project, IMethodBinding methodBinding)
+			throws Exception {
+		String declaringTypeName =
+				AstNodeUtils.getFullyQualifiedName(methodBinding.getDeclaringClass(), false);
+		String signature = AstNodeUtils.getMethodSignature(methodBinding);
+		return findMethod(project, declaringTypeName, signature);
+	}
+
+	/**
+	 * @return the {@link IMethod} with given signature or <code>null</code> if not found.
+	 */
+	public static IMethod findMethod(IJavaProject project, String typeName, String signature)
+			throws Exception {
+		IType type = project.findType(typeName);
+		return findMethod(type, signature);
+	}
+
+	/**
+	 * @return the {@link IMethod} with given signature or <code>null</code> if not found.
+	 */
+	public static IMethod findMethod(IType type, String signature) throws Exception {
+		if (type == null) {
+			return null;
+		}
+		// check single type
+		{
+			IMethod method = findMethodSingleType(type, signature);
+			if (method != null) {
+				return method;
+			}
+		}
+		// check super types
+		return findMethodInSuperTypes(type, signature);
+	}
+
+	/**
+	 * @return the {@link IMethod} with given signature in super types of given {@link IType}.
+	 */
+	private static IMethod findMethodInSuperTypes(IType type, String signature)
+			throws JavaModelException {
+		// check each type for method
+		ITypeHierarchy hierarchy = type.newSupertypeHierarchy(null);
+		IType[] allSupertypes = hierarchy.getAllSupertypes(type);
+		for (int i = allSupertypes.length - 1; i >= 0; i--) {
+			IType superType = allSupertypes[i];
+			IMethod superMethod = findMethodSingleType(superType, signature);
+			if (superMethod != null) {
+				return superMethod;
+			}
+		}
+		// not found
+		return null;
+	}
+
+	/**
+	 * @return the {@link IMethod} with given signature exactly in given {@link IType} or
+	 *         <code>null</code>.
+	 */
+	public static IMethod findMethodSingleType(IType type, String signature)
+			throws JavaModelException {
+		String name = StringUtils.substringBefore(signature, "(");
+		boolean wantConstructor = "<init>".equals(name);
+		for (IMethod method : type.getMethods()) {
+			if (method.getElementName().equals(name) || wantConstructor && method.isConstructor()) {
+				if (getMethodSignature(method).equals(signature)) {
+					return method;
+				}
+			}
+		}
+		// not found
+		return null;
+	}
+
+	/**
+	 * @param signatures
+	 *          the array with signatures, can have <code>null</code> elements.
+	 *
+	 * @return the {@link IMethod}'s for given method signatures, with <code>null</code> elements if
+	 *         corresponding signature is <code>null</code>.
+	 */
+	public static List<IMethod> findMethods(IType type, List<String> signatures)
+			throws JavaModelException {
+		IMethod[] methods = findMethods(type, signatures.toArray(new String[signatures.size()]));
+		return Lists.newArrayList(methods);
+	}
+
+	/**
+	 * @param signatures
+	 *          the array with signatures, can have <code>null</code> elements.
+	 *
+	 * @return the array of {@link IMethod} for given array of method signatures, with
+	 *         <code>null</code> elements if corresponding signature is <code>null</code>.
+	 */
+	public static IMethod[] findMethods(IType type, String[] signatures) throws JavaModelException {
+		// prepare map: signature -> IMethod
+		Map<String, IMethod> signatureToMethod = Maps.newTreeMap();
+		for (IMethod method : type.getMethods()) {
+			signatureToMethod.put(getMethodSignature(method), method);
+		}
+		// fill methods array
+		IMethod[] methods = new IMethod[signatures.length];
+		for (int i = 0; i < signatures.length; i++) {
+			String signature = signatures[i];
+			if (signature != null) {
+				methods[i] = signatureToMethod.get(signature);
+			}
+		}
+		return methods;
+	}
+
+	/**
+	 * @return the signature for given {@link IMethod}.
+	 */
+	public static String getMethodSignature(IMethod method) throws JavaModelException {
+		Assert.isNotNull(method);
+		StringBuffer buffer = new StringBuffer();
+		// name
+		if (method.isConstructor()) {
+			buffer.append("<init>");
+		} else {
+			buffer.append(method.getElementName());
+		}
+		// parameters
+		buffer.append('(');
+		{
+			IType contextType = method.getDeclaringType();
+			String[] parameterTypes = method.getParameterTypes();
+			for (int i = 0; i < parameterTypes.length; i++) {
+				String shortParameterType = parameterTypes[i];
+				if (i != 0) {
+					buffer.append(',');
+				}
+				String parameterType = getResolvedTypeName(contextType, shortParameterType);
+				buffer.append(parameterType);
+			}
+		}
+		buffer.append(')');
+		// return result
+		return buffer.toString();
+	}
+
+	/**
+	 * Resolves the given type name within the context of given {@link IType} (depending on the type
+	 * hierarchy and its imports).
+	 */
+	public static String getResolvedTypeName(IType context, String typeSignature)
+			throws JavaModelException {
+		// remove generic
+		if (typeSignature.indexOf(Signature.C_GENERIC_START) != -1) {
+			typeSignature = Signature.getTypeErasure(typeSignature);
+		}
+		//
+		int arrayCount = Signature.getArrayCount(typeSignature);
+		char type = typeSignature.charAt(arrayCount);
+		if (type == Signature.C_UNRESOLVED || type == Signature.C_TYPE_VARIABLE) {
+			int semi = typeSignature.indexOf(Signature.C_SEMICOLON, arrayCount + 1);
+			String name = typeSignature.substring(arrayCount + 1, semi);
+			name = getResolvedTypeName_resolveTypeVariable(context, name);
+			// resolve type
+			String[][] resolvedNames = context.resolveType(name);
+			if (resolvedNames != null && resolvedNames.length > 0) {
+				return concatenateName(resolvedNames[0][0], resolvedNames[0][1])
+						+ StringUtils.repeat("[]", arrayCount);
+			}
+			// can not resolve
+			return null;
+		}
+		// resolved
+		{
+			String name = Signature.toString(typeSignature);
+			name = getResolvedTypeName_resolveTypeVariable(context, name);
+			// done
+			return name;
+		}
+	}
+
+	/**
+	 * If given name is name of generic {@link TypeVariable}, returns its bounds.
+	 */
+	private static String getResolvedTypeName_resolveTypeVariable(IType context, String name)
+			throws JavaModelException {
+		ITypeParameter typeParameter = context.getTypeParameter(name);
+		if (typeParameter.exists()) {
+			String[] bounds = typeParameter.getBounds();
+			if (bounds.length != 0) {
+				name = bounds[0];
+			} else {
+				name = "java.lang.Object";
+			}
+		}
+		return name;
+	}
+
+	/**
+	 * Concatenates two names. Uses a dot for separation. Both strings can be empty or
+	 * <code>null</code>.
+	 *
+	 * @param name1
+	 *          the first name
+	 * @param name2
+	 *          the second name
+	 * @return the concatenated name
+	 */
+	private static String concatenateName(String name1, String name2) {
+		StringBuffer buf = new StringBuffer();
+		if (name1 != null && name1.length() > 0) {
+			buf.append(name1);
+		}
+		if (name2 != null && name2.length() > 0) {
+			if (buf.length() > 0) {
+				buf.append('.');
+			}
+			buf.append(name2);
+		}
+		return buf.toString();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// JDT IField utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link IField} with given name or <code>null</code> if not found.
+	 */
+	public static IField findField(IJavaProject project, String typeName, String fieldName)
+			throws Exception {
+		IType type = project.findType(typeName);
+		if (type == null) {
+			return null;
+		}
+		// check single type
+		{
+			IField field = findFieldSingleType(type, fieldName);
+			if (field != null) {
+				return field;
+			}
+		}
+		// check super types
+		{
+			ITypeHierarchy hierarchy = type.newSupertypeHierarchy(null);
+			IType[] allSupertypes = hierarchy.getAllSupertypes(type);
+			for (int i = allSupertypes.length - 1; i >= 0; i--) {
+				IType superType = allSupertypes[i];
+				IField field = findFieldSingleType(superType, fieldName);
+				if (field != null) {
+					return field;
+				}
+			}
+		}
+		// not found
+		return null;
+	}
+
+	/**
+	 * @return the {@link IField} with given name exactly in given {@link IType} or <code>null</code>.
+	 */
+	private static IField findFieldSingleType(IType type, String fieldName) throws JavaModelException {
+		for (IField field : type.getFields()) {
+			if (field.getElementName().equals(fieldName)) {
+				return field;
+			}
+		}
+		// not found
+		return null;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Source containers
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the array {@link IContainer}'s for all source directories of given {@link IJavaProject}
+	 *         .
+	 */
+	public static List<IContainer> getSourceContainers(IJavaProject javaProject,
+			boolean includeRequiredProjects) throws Exception {
+		List<IContainer> containers = Lists.newArrayList();
+		addSourceContainers(
+				containers,
+				Sets.<IJavaProject>newHashSet(),
+				javaProject,
+				includeRequiredProjects);
+		return containers;
+	}
+
+	/**
+	 * Adds {@link IContainer}'s for all source directories of given {@link IJavaProject} and its
+	 * required projects.
+	 */
+	private static void addSourceContainers(List<IContainer> containers,
+			Set<IJavaProject> visitedProjects,
+			IJavaProject javaProject,
+			boolean includeRequiredProjects) throws Exception {
+		// check for existence
+		if (!javaProject.exists()) {
+			return;
+		}
+		// check for recursion
+		if (visitedProjects.contains(javaProject)) {
+			return;
+		}
+		visitedProjects.add(javaProject);
+		// prepare information
+		IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
+		IProject project = javaProject.getProject();
+		// add source folders
+		for (IClasspathEntry entry : javaProject.getResolvedClasspath(true)) {
+			if (entry.getEntryKind() == IClasspathEntry.CPE_SOURCE) {
+				IContainer container = (IContainer) root.findMember(entry.getPath());
+				if (container != null) {
+					containers.add(container);
+				}
+			}
+		}
+		// source folders of required projects
+		if (includeRequiredProjects) {
+			for (String requiredProjectName : javaProject.getRequiredProjectNames()) {
+				addSourceContainers(containers, visitedProjects, requiredProjectName);
+			}
+		}
+		// source folders for fragments
+		if (includeRequiredProjects) {
+			Object model = ReflectivePDE.findModel(project);
+			if (model != null) {
+				BundleDescription bundleDescription = ReflectivePDE.getPluginModelBundleDescription(model);
+				if (bundleDescription != null) {
+					BundleDescription[] fragments = bundleDescription.getFragments();
+					for (BundleDescription fragment : fragments) {
+						String fragmentProjectName = fragment.getSymbolicName();
+						addSourceContainers(containers, visitedProjects, fragmentProjectName);
+					}
+				}
+			}
+		}
+	}
+
+	/**
+	 * Adds {@link IContainer}'s for all source directories of given {@link IJavaProject} and its
+	 * required projects.
+	 */
+	private static void addSourceContainers(List<IContainer> containers,
+			Set<IJavaProject> visitedProjects,
+			String projectName) throws Exception {
+		IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
+		IProject project = root.getProject(projectName);
+		IJavaProject javaProject = JavaCore.create(project);
+		addSourceContainers(containers, visitedProjects, javaProject, true);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IPackageFragmentRoot
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link IPackageFragmentRoot} that is parent of given {@link IJavaElement} or first
+	 *         {@link IPackageFragmentRoot} of {@link IJavaProject}.
+	 */
+	public static IPackageFragmentRoot getPackageFragmentRoot(IJavaElement element)
+			throws JavaModelException {
+		if (element != null) {
+			// try to find valid parent IPackageFragmentRoot
+			{
+				IPackageFragmentRoot root =
+						(IPackageFragmentRoot) element.getAncestor(IJavaElement.PACKAGE_FRAGMENT_ROOT);
+				if (root != null && root.getKind() == IPackageFragmentRoot.K_SOURCE) {
+					return root;
+				}
+			}
+			// use IPackageFragmentRoot of IJavaProject
+			{
+				IJavaProject javaProject = element.getJavaProject();
+				if (javaProject != null && javaProject.exists()) {
+					for (IPackageFragmentRoot root : javaProject.getPackageFragmentRoots()) {
+						if (root.getKind() == IPackageFragmentRoot.K_SOURCE) {
+							return root;
+						}
+					}
+				}
+			}
+		}
+		// invalid element
+		return null;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/jdt/core/IProjectClasspathListener.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/jdt/core/IProjectClasspathListener.java
index f33d990d1..3438e4acb 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/jdt/core/IProjectClasspathListener.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/jdt/core/IProjectClasspathListener.java
@@ -19,16 +19,16 @@
  * @coverage core.util.jdt
  */
 public interface IProjectClasspathListener {
-  /**
-   * Adding JAR with ZIP source attachment to the {@link IJavaProject}.
-   *
-   * @param javaProject
-   *          the {@link IJavaProject} to add JAR to.
-   * @param jarPathString
-   *          the JAR file name relative to project.
-   * @param srcPathString
-   *          the path to ZIP file of sources, relative to project. May be <code>null</code>.
-   */
-  void addClasspathEntry(IJavaProject javaProject, String jarPathString, String srcPathString)
-      throws Exception;
+	/**
+	 * Adding JAR with ZIP source attachment to the {@link IJavaProject}.
+	 *
+	 * @param javaProject
+	 *          the {@link IJavaProject} to add JAR to.
+	 * @param jarPathString
+	 *          the JAR file name relative to project.
+	 * @param srcPathString
+	 *          the path to ZIP file of sources, relative to project. May be <code>null</code>.
+	 */
+	void addClasspathEntry(IJavaProject javaProject, String jarPathString, String srcPathString)
+			throws Exception;
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/jdt/core/JavaDocUtils.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/jdt/core/JavaDocUtils.java
index e7f5a6ef6..b8adacbe4 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/jdt/core/JavaDocUtils.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/jdt/core/JavaDocUtils.java
@@ -31,118 +31,118 @@
  * @coverage core.util.jdt
  */
 public class JavaDocUtils {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private JavaDocUtils() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private JavaDocUtils() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tooltip
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the JavaDoc for method with given {@link IMethodBinding} or <code>null</code> if no
-   *         source found.
-   */
-  public static String getTooltip(IJavaProject project, IMethodBinding methodBinding)
-      throws Exception {
-    String declaringTypeName =
-        AstNodeUtils.getFullyQualifiedName(methodBinding.getDeclaringClass(), false);
-    String signature = AstNodeUtils.getMethodSignature(methodBinding);
-    return getTooltip(project, declaringTypeName, signature);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tooltip
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the JavaDoc for method with given {@link IMethodBinding} or <code>null</code> if no
+	 *         source found.
+	 */
+	public static String getTooltip(IJavaProject project, IMethodBinding methodBinding)
+			throws Exception {
+		String declaringTypeName =
+				AstNodeUtils.getFullyQualifiedName(methodBinding.getDeclaringClass(), false);
+		String signature = AstNodeUtils.getMethodSignature(methodBinding);
+		return getTooltip(project, declaringTypeName, signature);
+	}
 
-  /**
-   * @return the JavaDoc for given method signature or <code>null</code> if no source found.
-   */
-  public static String getTooltip(IJavaProject project, String declaringTypeName, String signature)
-      throws Exception {
-    IMethod method = CodeUtils.findMethod(project, declaringTypeName, signature);
-    return getTooltip(method);
-  }
+	/**
+	 * @return the JavaDoc for given method signature or <code>null</code> if no source found.
+	 */
+	public static String getTooltip(IJavaProject project, String declaringTypeName, String signature)
+			throws Exception {
+		IMethod method = CodeUtils.findMethod(project, declaringTypeName, signature);
+		return getTooltip(method);
+	}
 
-  /**
-   * @return the tooltip for given {@link IMethod} or <code>null</code> if no source found.
-   */
-  public static String getTooltip(IMember method) throws Exception {
-    List<String> javaDocLines = getJavaDocLines(method, true);
-    if (javaDocLines == null) {
-      return null;
-    }
-    // read tooltip
-    String tooltip = StringUtils.join(javaDocLines.iterator(), " ");
-    tooltip = StringUtilities.normalizeWhitespaces(tooltip);
-    // remove other meta data
-    tooltip = StringUtils.replace(tooltip, "{@inheritDoc}", "");
-    tooltip = StringUtils.substringBefore(tooltip, "@param");
-    tooltip = StringUtils.substringBefore(tooltip, "@since");
-    tooltip = StringUtils.substringBefore(tooltip, "@see");
-    tooltip = StringUtils.substringBefore(tooltip, "@author");
-    tooltip = getTooltip_useShortTypeNames(tooltip);
-    tooltip = tooltip.trim();
-    // done
-    return tooltip;
-  }
+	/**
+	 * @return the tooltip for given {@link IMethod} or <code>null</code> if no source found.
+	 */
+	public static String getTooltip(IMember method) throws Exception {
+		List<String> javaDocLines = getJavaDocLines(method, true);
+		if (javaDocLines == null) {
+			return null;
+		}
+		// read tooltip
+		String tooltip = StringUtils.join(javaDocLines.iterator(), " ");
+		tooltip = StringUtilities.normalizeWhitespaces(tooltip);
+		// remove other meta data
+		tooltip = StringUtils.replace(tooltip, "{@inheritDoc}", "");
+		tooltip = StringUtils.substringBefore(tooltip, "@param");
+		tooltip = StringUtils.substringBefore(tooltip, "@since");
+		tooltip = StringUtils.substringBefore(tooltip, "@see");
+		tooltip = StringUtils.substringBefore(tooltip, "@author");
+		tooltip = getTooltip_useShortTypeNames(tooltip);
+		tooltip = tooltip.trim();
+		// done
+		return tooltip;
+	}
 
-  private static String getTooltip_useShortTypeNames(String tooltip) {
-    int index = 0;
-    while (true) {
-      index = tooltip.indexOf("{@link", index);
-      if (index == -1) {
-        break;
-      }
-      int endIndex = tooltip.indexOf("}", index);
-      if (endIndex == -1) {
-        break;
-      }
-      index += "{@link".length();
-      String link = tooltip.substring(index, endIndex).trim();
-      {
-        int lastDot = -1;
-        for (int i = 0; i < link.length(); i++) {
-          char c = link.charAt(i);
-          // '.'
-          if (c == '.') {
-            lastDot = i;
-            continue;
-          }
-          // part of identifier
-          if (c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z') {
-            continue;
-          }
-          // end of qualified type
-          break;
-        }
-        if (lastDot != -1) {
-          link = link.substring(lastDot + 1);
-        }
-      }
-      tooltip = tooltip.substring(0, index) + " " + link + tooltip.substring(endIndex);
-      index = endIndex;
-    }
-    return tooltip;
-  }
+	private static String getTooltip_useShortTypeNames(String tooltip) {
+		int index = 0;
+		while (true) {
+			index = tooltip.indexOf("{@link", index);
+			if (index == -1) {
+				break;
+			}
+			int endIndex = tooltip.indexOf("}", index);
+			if (endIndex == -1) {
+				break;
+			}
+			index += "{@link".length();
+			String link = tooltip.substring(index, endIndex).trim();
+			{
+				int lastDot = -1;
+				for (int i = 0; i < link.length(); i++) {
+					char c = link.charAt(i);
+					// '.'
+					if (c == '.') {
+						lastDot = i;
+						continue;
+					}
+					// part of identifier
+					if (c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z') {
+						continue;
+					}
+					// end of qualified type
+					break;
+				}
+				if (lastDot != -1) {
+					link = link.substring(lastDot + 1);
+				}
+			}
+			tooltip = tooltip.substring(0, index) + " " + link + tooltip.substring(endIndex);
+			index = endIndex;
+		}
+		return tooltip;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // JavaDoc
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the JavaDoc for given {@link IMember} or <code>null</code> if no source found.
-   */
-  public static List<String> getJavaDocLines(IMember member, boolean allowInherited)
-      throws Exception {
-    // prepare reader
-    Reader reader = JavadocContentAccess.getContentReader(member, allowInherited);
-    if (reader == null) {
-      return null;
-    }
-    // read JavaDoc
-    return IOUtils.readLines(reader);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// JavaDoc
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the JavaDoc for given {@link IMember} or <code>null</code> if no source found.
+	 */
+	public static List<String> getJavaDocLines(IMember member, boolean allowInherited)
+			throws Exception {
+		// prepare reader
+		Reader reader = JavadocContentAccess.getContentReader(member, allowInherited);
+		if (reader == null) {
+			return null;
+		}
+		// read JavaDoc
+		return IOUtils.readLines(reader);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/jdt/core/JavadocContentAccess.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/jdt/core/JavadocContentAccess.java
index cdf78bf7e..a469bc75e 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/jdt/core/JavadocContentAccess.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/jdt/core/JavadocContentAccess.java
@@ -29,76 +29,76 @@
  * @coverage core.util.jdt
  */
 public class JavadocContentAccess {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private JavadocContentAccess() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private JavadocContentAccess() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link Reader} for an {@link IMember}'s Javadoc comment content from the source
-   *         attachment.
-   */
-  public static Reader getContentReader(IMember member, boolean allowInherited) throws Exception {
-    // check current type
-    {
-      IBuffer buffer =
-          member.isBinary()
-              ? member.getClassFile().getBuffer()
-              : member.getCompilationUnit().getBuffer();
-      // no source attachment found
-      if (buffer == null) {
-        return null;
-      }
-      //
-      ISourceRange range = member.getSourceRange();
-      int start = range.getOffset();
-      int length = range.getLength();
-      if (length > 0 && buffer.getChar(start) == '/') {
-        // prepare scanner
-        IScanner scanner;
-        {
-          scanner = ToolFactory.createScanner(true, false, false, false);
-          scanner.setSource(buffer.getCharacters());
-          scanner.resetTo(start, start + length - 1);
-        }
-        // find last JavaDoc comment
-        {
-          int docOffset = -1;
-          int docEnd = -1;
-          {
-            int terminal = scanner.getNextToken();
-            while (org.eclipse.jdt.internal.corext.dom.TokenScanner.isComment(terminal)) {
-              if (terminal == ITerminalSymbols.TokenNameCOMMENT_JAVADOC) {
-                docOffset = scanner.getCurrentTokenStartPosition();
-                docEnd = scanner.getCurrentTokenEndPosition() + 1;
-              }
-              terminal = scanner.getNextToken();
-            }
-          }
-          // if comment found, return it
-          if (docOffset != -1) {
-            return new JavaDocCommentReader(buffer, docOffset, docEnd);
-          }
-        }
-      }
-    }
-    // check inherited
-    if (allowInherited && member.getElementType() == IJavaElement.METHOD) {
-      IMethod method = (IMethod) member;
-      IMethod superMethod = CodeUtils.findSuperMethod(method);
-      if (superMethod != null) {
-        return getContentReader(superMethod, allowInherited);
-      }
-    }
-    // not found
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link Reader} for an {@link IMember}'s Javadoc comment content from the source
+	 *         attachment.
+	 */
+	public static Reader getContentReader(IMember member, boolean allowInherited) throws Exception {
+		// check current type
+		{
+			IBuffer buffer =
+					member.isBinary()
+					? member.getClassFile().getBuffer()
+							: member.getCompilationUnit().getBuffer();
+			// no source attachment found
+			if (buffer == null) {
+				return null;
+			}
+			//
+			ISourceRange range = member.getSourceRange();
+			int start = range.getOffset();
+			int length = range.getLength();
+			if (length > 0 && buffer.getChar(start) == '/') {
+				// prepare scanner
+				IScanner scanner;
+				{
+					scanner = ToolFactory.createScanner(true, false, false, false);
+					scanner.setSource(buffer.getCharacters());
+					scanner.resetTo(start, start + length - 1);
+				}
+				// find last JavaDoc comment
+				{
+					int docOffset = -1;
+					int docEnd = -1;
+					{
+						int terminal = scanner.getNextToken();
+						while (org.eclipse.jdt.internal.corext.dom.TokenScanner.isComment(terminal)) {
+							if (terminal == ITerminalSymbols.TokenNameCOMMENT_JAVADOC) {
+								docOffset = scanner.getCurrentTokenStartPosition();
+								docEnd = scanner.getCurrentTokenEndPosition() + 1;
+							}
+							terminal = scanner.getNextToken();
+						}
+					}
+					// if comment found, return it
+							if (docOffset != -1) {
+								return new JavaDocCommentReader(buffer, docOffset, docEnd);
+							}
+				}
+			}
+		}
+		// check inherited
+		if (allowInherited && member.getElementType() == IJavaElement.METHOD) {
+			IMethod method = (IMethod) member;
+			IMethod superMethod = CodeUtils.findSuperMethod(method);
+			if (superMethod != null) {
+				return getContentReader(superMethod, allowInherited);
+			}
+		}
+		// not found
+		return null;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/jdt/core/ProjectUtils.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/jdt/core/ProjectUtils.java
index 14f23cbdc..cf3c314af 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/jdt/core/ProjectUtils.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/jdt/core/ProjectUtils.java
@@ -67,513 +67,513 @@
  * @coverage core.util.jdt
  */
 public final class ProjectUtils {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private ProjectUtils() {
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the Java version compliance level.
-   */
-  public static float getJavaVersion(IJavaProject javaProject) {
-    String complianceString = getJavaVersionString(javaProject);
-    return Float.parseFloat(complianceString);
-  }
-
-  /**
-   * @return the {@link String} name of Java version.
-   */
-  public static String getJavaVersionString(IJavaProject javaProject) {
-    return javaProject.getOption(JavaCore.COMPILER_COMPLIANCE, true);
-  }
-
-  /**
-   * @return <code>true</code> if the project has JDK 1.5 or higher compiler compliance turned on.
-   */
-  public static boolean isJDK15(IJavaProject project) {
-    return isAtLeastJDKVersion(project, 1.5f);
-  }
-
-  /**
-   * Tests if a projects java version is at least the version passed.
-   *
-   * @param project
-   *          the project to check
-   * @param minimumVersion
-   *          the version we are looking for
-   * @return <code>true</code> if the project has JDK <code>minimumVersion</code> compiler
-   *         compliance turned on.
-   */
-  public static boolean isAtLeastJDKVersion(IJavaProject project, Float minimumVersion) {
-    if (project != null) {
-      String complianceString = getJavaVersionString(project);
-      if (complianceString != null) {
-        float compliance = Float.parseFloat(complianceString);
-        return compliance >= minimumVersion;
-      }
-    }
-    return false;
-  }
-
-  /**
-   * @return the {@link IJavaProject} options {@link Map}.
-   */
-  public static Map<String, String> getOptions(IJavaProject project) {
-    return project.getOptions(true);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Building
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Wait for auto-build notification to occur, that is for the auto-build to finish.
-   */
-  public static void waitForAutoBuild() {
-    while (true) {
-      boolean success = ExecutionUtils.runIgnore(new RunnableEx() {
-        @Override
-        public void run() throws Exception {
-          IJobManager jobManager = Job.getJobManager();
-          jobManager.wakeUp(ResourcesPlugin.FAMILY_AUTO_BUILD);
-          jobManager.wakeUp(ResourcesPlugin.FAMILY_AUTO_BUILD);
-          jobManager.wakeUp(ResourcesPlugin.FAMILY_AUTO_BUILD);
-          jobManager.join(ResourcesPlugin.FAMILY_AUTO_BUILD, new NoOpProgressMonitor());
-        }
-      });
-      if (success) {
-        break;
-      }
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Resource
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Ensures that {@link IJavaProject} has type with given name.
-   *
-   * @param javaProject
-   *          the target {@link IJavaProject} to add resource type to.
-   * @param bundle
-   *          then bundle {@link Bundle} to access to original resource.
-   * @param typeName
-   *          the name of required type.
-   */
-  public static void ensureResourceType(IJavaProject javaProject, Bundle bundle, String typeName)
-      throws Exception {
-    // prepare required contents
-    String contents;
-    {
-      String versionString = getVersionString(javaProject);
-      String path = "/resources/" + versionString + "/" + typeName.replace('.', '/') + ".java";
-      contents = BundleResourceProvider.get(bundle).getFileString(path);
-    }
-    // prepare type
-    IType type = javaProject.findType(typeName);
-    // if no type, create in given project
-    if (type == null) {
-      createCompilationUnitWithType(javaProject, typeName, contents);
-      return;
-    }
-    // has type, check unit
-    {
-      ICompilationUnit compilationUnit = type.getCompilationUnit();
-      // binary type, can not update
-      if (compilationUnit == null) {
-        return;
-      }
-      // update, if up to date
-      if (!compilationUnit.getSource().equals(contents)) {
-        updateCompilationUnitWithType(compilationUnit, contents);
-      }
-    }
-  }
-
-  private static String getVersionString(IJavaProject javaProject) {
-    String versionString = "1.5";
-    if (!isJDK15(javaProject)) {
-      versionString = "1.4";
-    } else if (isAtLeastJDKVersion(javaProject, 1.8f)) {
-      versionString = "1.8";
-    }
-    return versionString;
-  }
-
-  private static void createCompilationUnitWithType(IJavaProject javaProject,
-      String typeName,
-      String contents) throws Exception {
-    ICompilationUnit unit;
-    {
-      String packageName = CodeUtils.getPackage(typeName);
-      String unitName = CodeUtils.getShortClass(typeName) + ".java";
-      IContainer sourceContainer = CodeUtils.getSourceContainers(javaProject, false).get(0);
-      IPackageFragmentRoot packageFragmentRoot =
-          javaProject.getPackageFragmentRoot(sourceContainer);
-      IPackageFragment packageFragment =
-          packageFragmentRoot.createPackageFragment(packageName, true, null);
-      unit = packageFragment.createCompilationUnit(unitName, contents, true, null);
-    }
-    saveCompilationUnitWithType(unit);
-  }
-
-  private static void updateCompilationUnitWithType(ICompilationUnit unit, String contents)
-      throws Exception {
-    // ignore if read-only
-    if (unit.getResource().getResourceAttributes().isReadOnly()) {
-      return;
-    }
-    // do update
-    unit.getBuffer().setContents(contents);
-    saveCompilationUnitWithType(unit);
-  }
-
-  private static void saveCompilationUnitWithType(ICompilationUnit unit) throws Exception {
-    // save, required if type already exists and open in editor
-    unit.getBuffer().save(null, true);
-    // wait for auto-build, added type should be compiled
-    waitForAutoBuild();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Classpath
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if {@link IJavaProject} has type with given name.
-   */
-  public static boolean hasType(final IJavaProject project, final String className) {
-    return ExecutionUtils.runObjectIgnore(new RunnableObjectEx<Boolean>() {
-      @Override
-      public Boolean runObject() throws Exception {
-        return project.findType(className) != null;
-      }
-    }, false);
-  }
-
-  /**
-   * Adds JAR and (optional) attached source to the {@link IJavaProject}.
-   *
-   * @param javaProject
-   *          the {@link IJavaProject} to add JAR to.
-   * @param bundle
-   *          the {@link Bundle} to read JAR/source from.
-   * @param jarName
-   *          the path of JAR in {@link Bundle}.
-   * @param srcName
-   *          the path of source ZIP in {@link Bundle}, optional, may be <code>null</code>.
-   */
-  public static void addJar(IJavaProject javaProject, Bundle bundle, String jarPath, String srcPath)
-      throws Exception {
-    String jarName = copyFile(javaProject, bundle, jarPath);
-    String srcName = copyFile(javaProject, bundle, srcPath);
-    // OK, now JAR/source are in project, add classpath entry
-    addClasspathEntry(javaProject, jarName, srcName);
-  }
-
-  /**
-   * Copies file from {@link Bundle} into {@link IProject}.
-   */
-  public static String copyFile(IJavaProject javaProject, Bundle bundle, String path)
-      throws Exception {
-    if (path == null) {
-      return null;
-    }
-    String name = FilenameUtils.getName(path);
-    IFile file = javaProject.getProject().getFile(name);
-    InputStream stream = bundle.getEntry(path).openStream();
-    IOUtils2.setFileContents(file, stream);
-    return name;
-  }
-
-  /**
-   * Adds JAR and (optional) attached source to the {@link IJavaProject} using JAR file anywhere at
-   * file system. The JAR file would be copied to project's folder if needed.
-   *
-   * @param javaProject
-   *          the {@link IJavaProject} to add JAR to.
-   * @param jarPathString
-   *          the full absolute path to JAR file.
-   * @param srcPathString
-   *          the full absolute path to ZIP file of sources. May be <code>null</code>.
-   */
-  public static void addJar(IJavaProject javaProject, String jarPathString, String srcPathString)
-      throws Exception {
-    IProject project = javaProject.getProject();
-    String jarFileName = FilenameUtils.getName(jarPathString);
-    String srcFileName = FilenameUtils.getName(srcPathString);
-    // copy JAR
-    {
-      IFile jarFile = project.getFile(jarFileName);
-      if (!jarFile.exists()) {
-        InputStream jarStream = new FileInputStream(jarPathString);
-        IOUtils2.setFileContents(jarFile, jarStream);
-      }
-    }
-    // copy source
-    if (srcPathString != null) {
-      IFile srcFile = project.getFile(srcFileName);
-      if (!srcFile.exists()) {
-        InputStream srcStream = new FileInputStream(srcPathString);
-        IOUtils2.setFileContents(srcFile, srcStream);
-      }
-    }
-    addClasspathEntry(javaProject, jarFileName, srcFileName);
-  }
-
-  /**
-   * Adds given external JAR into classpath. Does not copy it into {@link IProject}.
-   *
-   * @param javaProject
-   *          the {@link IJavaProject} to add JAR to.
-   * @param jarPathString
-   *          the full absolute path to JAR file.
-   * @param srcPathString
-   *          the full absolute path to ZIP file of sources. May be <code>null</code>.
-   */
-  public static void addExternalJar(IJavaProject javaProject,
-      String jarPathString,
-      String srcPathString) throws Exception {
-    IPath jarPath = new Path(jarPathString);
-    IPath srcPath = srcPathString != null ? new Path(srcPathString) : null;
-    IClasspathEntry newEntry = JavaCore.newLibraryEntry(jarPath, srcPath, null);
-    addClasspathEntry(javaProject, newEntry);
-  }
-
-  /**
-   * Adds {@link IClasspathEntry} to the {@link IJavaProject}.
-   *
-   * @param javaProject
-   *          the {@link IJavaProject} to add JAR to.
-   * @param entry
-   *          the {@link IClasspathEntry} to add.
-   */
-  public static void addClasspathEntry(IJavaProject javaProject, IClasspathEntry entry)
-      throws CoreException {
-    IClasspathEntry[] entries = javaProject.getRawClasspath();
-    entries = (IClasspathEntry[]) ArrayUtils.add(entries, entry);
-    javaProject.setRawClasspath(entries, null);
-  }
-
-  /**
-   * Adds {@link IClasspathEntry} to the {@link IJavaProject}.
-   *
-   * @param javaProject
-   *          the {@link IJavaProject} to add JAR to.
-   * @param jarPathString
-   *          the JAR file name relative to project.
-   * @param srcPathString
-   *          the path to ZIP file of sources, relative to project. May be <code>null</code>.
-   */
-  public static void addClasspathEntry(IJavaProject javaProject,
-      String jarPathString,
-      String srcPathString) throws Exception {
-    // prepare entry
-    IClasspathEntry entry;
-    {
-      IProject project = javaProject.getProject();
-      IPath jarPath = project.getFullPath().append(jarPathString);
-      IPath srcPath = srcPathString != null ? project.getFullPath().append(srcPathString) : null;
-      entry = JavaCore.newLibraryEntry(jarPath, srcPath, null);
-    }
-    // add entry
-    addClasspathEntry(javaProject, entry);
-    // notify listeners
-    {
-      List<IProjectClasspathListener> listeners = ExternalFactoriesHelper.getElementsInstances(
-          IProjectClasspathListener.class,
-          "org.eclipse.wb.core.projectClasspathListeners",
-          "listener");
-      for (IProjectClasspathListener listener : listeners) {
-        listener.addClasspathEntry(javaProject, jarPathString, srcPathString);
-      }
-    }
-  }
-
-  /**
-   * Add libraries of given plugin to the classpath of {@link IJavaProject}.
-   *
-   * @param javaProject
-   *          the {@link IJavaProject} to add libraries to.
-   * @param pluginId
-   *          the plugin id.
-   */
-  public static void addPluginLibraries(IJavaProject javaProject, String pluginId)
-      throws Exception {
-    List<IClasspathEntry> entries = Lists.newArrayList();
-    // add existing entries
-    CollectionUtils.addAll(entries, javaProject.getRawClasspath());
-    // add plugin entries
-    ReflectivePDE.addPluginLibraries(pluginId, entries);
-    // set new entries
-    setRawClasspath(javaProject, entries);
-  }
-
-  /**
-   * Adds SWT plugin library to the classpath of {@link IJavaProject}.
-   */
-  public static void addSWTLibrary(IJavaProject javaProject) throws Exception {
-    String pluginId = "org.eclipse.swt." + SWT.getPlatform() + "." + Platform.getOS();
-    boolean isMacCocoa64 = EnvironmentUtils.IS_MAC;
-    if (isMacCocoa64 || !EnvironmentUtils.IS_MAC) {
-      pluginId += "." + Platform.getOSArch();
-    }
-    addPluginLibraries(javaProject, pluginId);
-  }
-
-  /**
-   * Requires <code>requiredProject</code> in <code>project</code>.
-   */
-  public static void requireProject(IJavaProject project, IJavaProject requiredProject)
-      throws JavaModelException {
-    IClasspathEntry[] rawClasspath = project.getRawClasspath();
-    rawClasspath = (IClasspathEntry[]) ArrayUtils.add(
-        rawClasspath,
-        JavaCore.newProjectEntry(requiredProject.getPath()));
-    project.setRawClasspath(rawClasspath, null);
-  }
-
-  /**
-   * Removes {@link IClasspathEntry} for which {@link Predicate} returns <code>true</code>.
-   */
-  public static void removeClasspathEntries(IJavaProject javaProject,
-      Predicate<IClasspathEntry> predicate) throws CoreException {
-    List<IClasspathEntry> newEntries = Lists.newArrayList();
-    IClasspathEntry[] existingEntries = javaProject.getRawClasspath();
-    for (IClasspathEntry entry : existingEntries) {
-      if (!predicate.apply(entry)) {
-        newEntries.add(entry);
-      }
-    }
-    setRawClasspath(javaProject, newEntries);
-  }
-
-  /**
-   * Calls {@link IJavaProject#setRawClasspath(IClasspathEntry[], IProgressMonitor)}.
-   */
-  private static void setRawClasspath(IJavaProject javaProject, List<IClasspathEntry> entries)
-      throws JavaModelException {
-    javaProject.setRawClasspath(entries.toArray(new IClasspathEntry[entries.size()]), null);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Nature
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if {@link IProject} has nature.
-   */
-  public static boolean hasNature(final IProject project, final String natureId) {
-    return ExecutionUtils.runObjectIgnore(new RunnableObjectEx<Boolean>() {
-      @Override
-      public Boolean runObject() throws Exception {
-        return project.hasNature(natureId);
-      }
-    }, false);
-  }
-
-  /**
-   * Adds nature to the {@link IProject}.
-   */
-  public static void addNature(IProject project, String natureId) throws Exception {
-    IProjectDescription description = project.getDescription();
-    //
-    List<String> natureIds = Lists.newArrayList();
-    CollectionUtils.addAll(natureIds, description.getNatureIds());
-    natureIds.add(natureId);
-    description.setNatureIds(natureIds.toArray(new String[natureIds.size()]));
-    //
-    project.setDescription(description, null);
-  }
-
-  /**
-   * Removes nature to the {@link IProject}.
-   */
-  public static void removeNature(IProject project, String natureId) throws Exception {
-    IProjectDescription description = project.getDescription();
-    //
-    List<String> natureIds = Lists.newArrayList();
-    CollectionUtils.addAll(natureIds, description.getNatureIds());
-    natureIds.remove(natureId);
-    description.setNatureIds(natureIds.toArray(new String[natureIds.size()]));
-    //
-    project.setDescription(description, null);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Resources
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Resolves workspace relative {@link IPath} into absolute file system {@link IPath}.
-   *
-   * @return the resolved {@link IPath}, may be <code>null</code> if no such resource.
-   */
-  public static IPath getOSPath(IPath path) {
-    IWorkspaceRoot workspaceRoot = ResourcesPlugin.getWorkspace().getRoot();
-    IResource resource = workspaceRoot.findMember(path);
-    return resource != null ? resource.getLocation() : null;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Files
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Finds {@link IFile}'s with given path in {@link IJavaProject} and required {@link IJavaProject}
-   * 's.
-   */
-  public static List<IFile> findFiles(IJavaProject javaProject, String filePath) throws Exception {
-    List<IFile> files = Lists.newArrayList();
-    findFiles(files, javaProject, filePath, Sets.<IJavaProject>newHashSet());
-    return files;
-  }
-
-  /**
-   * Finds {@link IFile}'s with given path in {@link IJavaProject} and required {@link IJavaProject}
-   * 's.
-   */
-  private static void findFiles(List<IFile> files,
-      IJavaProject javaProject,
-      String filePath,
-      Set<IJavaProject> visitedProjects) throws Exception {
-    // may be not exists
-    if (!javaProject.exists()) {
-      return;
-    }
-    // may be already visited
-    if (visitedProjects.contains(javaProject)) {
-      return;
-    }
-    visitedProjects.add(javaProject);
-    // check required projects
-    IWorkspaceRoot workspaceRoot = ResourcesPlugin.getWorkspace().getRoot();
-    for (String projectName : javaProject.getRequiredProjectNames()) {
-      IJavaProject requiredJavaProject = JavaCore.create(workspaceRoot.getProject(projectName));
-      findFiles(files, requiredJavaProject, filePath, visitedProjects);
-    }
-    // check current project
-    {
-      IProject project = javaProject.getProject();
-      IFile file = project.getFile(new Path(filePath));
-      if (file.exists()) {
-        files.add(file);
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private ProjectUtils() {
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the Java version compliance level.
+	 */
+	public static float getJavaVersion(IJavaProject javaProject) {
+		String complianceString = getJavaVersionString(javaProject);
+		return Float.parseFloat(complianceString);
+	}
+
+	/**
+	 * @return the {@link String} name of Java version.
+	 */
+	public static String getJavaVersionString(IJavaProject javaProject) {
+		return javaProject.getOption(JavaCore.COMPILER_COMPLIANCE, true);
+	}
+
+	/**
+	 * @return <code>true</code> if the project has JDK 1.5 or higher compiler compliance turned on.
+	 */
+	public static boolean isJDK15(IJavaProject project) {
+		return isAtLeastJDKVersion(project, 1.5f);
+	}
+
+	/**
+	 * Tests if a projects java version is at least the version passed.
+	 *
+	 * @param project
+	 *          the project to check
+	 * @param minimumVersion
+	 *          the version we are looking for
+	 * @return <code>true</code> if the project has JDK <code>minimumVersion</code> compiler
+	 *         compliance turned on.
+	 */
+	public static boolean isAtLeastJDKVersion(IJavaProject project, Float minimumVersion) {
+		if (project != null) {
+			String complianceString = getJavaVersionString(project);
+			if (complianceString != null) {
+				float compliance = Float.parseFloat(complianceString);
+				return compliance >= minimumVersion;
+			}
+		}
+		return false;
+	}
+
+	/**
+	 * @return the {@link IJavaProject} options {@link Map}.
+	 */
+	public static Map<String, String> getOptions(IJavaProject project) {
+		return project.getOptions(true);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Building
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Wait for auto-build notification to occur, that is for the auto-build to finish.
+	 */
+	public static void waitForAutoBuild() {
+		while (true) {
+			boolean success = ExecutionUtils.runIgnore(new RunnableEx() {
+				@Override
+				public void run() throws Exception {
+					IJobManager jobManager = Job.getJobManager();
+					jobManager.wakeUp(ResourcesPlugin.FAMILY_AUTO_BUILD);
+					jobManager.wakeUp(ResourcesPlugin.FAMILY_AUTO_BUILD);
+					jobManager.wakeUp(ResourcesPlugin.FAMILY_AUTO_BUILD);
+					jobManager.join(ResourcesPlugin.FAMILY_AUTO_BUILD, new NoOpProgressMonitor());
+				}
+			});
+			if (success) {
+				break;
+			}
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Resource
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Ensures that {@link IJavaProject} has type with given name.
+	 *
+	 * @param javaProject
+	 *          the target {@link IJavaProject} to add resource type to.
+	 * @param bundle
+	 *          then bundle {@link Bundle} to access to original resource.
+	 * @param typeName
+	 *          the name of required type.
+	 */
+	public static void ensureResourceType(IJavaProject javaProject, Bundle bundle, String typeName)
+			throws Exception {
+		// prepare required contents
+		String contents;
+		{
+			String versionString = getVersionString(javaProject);
+			String path = "/resources/" + versionString + "/" + typeName.replace('.', '/') + ".java";
+			contents = BundleResourceProvider.get(bundle).getFileString(path);
+		}
+		// prepare type
+		IType type = javaProject.findType(typeName);
+		// if no type, create in given project
+		if (type == null) {
+			createCompilationUnitWithType(javaProject, typeName, contents);
+			return;
+		}
+		// has type, check unit
+		{
+			ICompilationUnit compilationUnit = type.getCompilationUnit();
+			// binary type, can not update
+			if (compilationUnit == null) {
+				return;
+			}
+			// update, if up to date
+			if (!compilationUnit.getSource().equals(contents)) {
+				updateCompilationUnitWithType(compilationUnit, contents);
+			}
+		}
+	}
+
+	private static String getVersionString(IJavaProject javaProject) {
+		String versionString = "1.5";
+		if (!isJDK15(javaProject)) {
+			versionString = "1.4";
+		} else if (isAtLeastJDKVersion(javaProject, 1.8f)) {
+			versionString = "1.8";
+		}
+		return versionString;
+	}
+
+	private static void createCompilationUnitWithType(IJavaProject javaProject,
+			String typeName,
+			String contents) throws Exception {
+		ICompilationUnit unit;
+		{
+			String packageName = CodeUtils.getPackage(typeName);
+			String unitName = CodeUtils.getShortClass(typeName) + ".java";
+			IContainer sourceContainer = CodeUtils.getSourceContainers(javaProject, false).get(0);
+			IPackageFragmentRoot packageFragmentRoot =
+					javaProject.getPackageFragmentRoot(sourceContainer);
+			IPackageFragment packageFragment =
+					packageFragmentRoot.createPackageFragment(packageName, true, null);
+			unit = packageFragment.createCompilationUnit(unitName, contents, true, null);
+		}
+		saveCompilationUnitWithType(unit);
+	}
+
+	private static void updateCompilationUnitWithType(ICompilationUnit unit, String contents)
+			throws Exception {
+		// ignore if read-only
+		if (unit.getResource().getResourceAttributes().isReadOnly()) {
+			return;
+		}
+		// do update
+		unit.getBuffer().setContents(contents);
+		saveCompilationUnitWithType(unit);
+	}
+
+	private static void saveCompilationUnitWithType(ICompilationUnit unit) throws Exception {
+		// save, required if type already exists and open in editor
+		unit.getBuffer().save(null, true);
+		// wait for auto-build, added type should be compiled
+		waitForAutoBuild();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Classpath
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if {@link IJavaProject} has type with given name.
+	 */
+	public static boolean hasType(final IJavaProject project, final String className) {
+		return ExecutionUtils.runObjectIgnore(new RunnableObjectEx<Boolean>() {
+			@Override
+			public Boolean runObject() throws Exception {
+				return project.findType(className) != null;
+			}
+		}, false);
+	}
+
+	/**
+	 * Adds JAR and (optional) attached source to the {@link IJavaProject}.
+	 *
+	 * @param javaProject
+	 *          the {@link IJavaProject} to add JAR to.
+	 * @param bundle
+	 *          the {@link Bundle} to read JAR/source from.
+	 * @param jarName
+	 *          the path of JAR in {@link Bundle}.
+	 * @param srcName
+	 *          the path of source ZIP in {@link Bundle}, optional, may be <code>null</code>.
+	 */
+	public static void addJar(IJavaProject javaProject, Bundle bundle, String jarPath, String srcPath)
+			throws Exception {
+		String jarName = copyFile(javaProject, bundle, jarPath);
+		String srcName = copyFile(javaProject, bundle, srcPath);
+		// OK, now JAR/source are in project, add classpath entry
+		addClasspathEntry(javaProject, jarName, srcName);
+	}
+
+	/**
+	 * Copies file from {@link Bundle} into {@link IProject}.
+	 */
+	public static String copyFile(IJavaProject javaProject, Bundle bundle, String path)
+			throws Exception {
+		if (path == null) {
+			return null;
+		}
+		String name = FilenameUtils.getName(path);
+		IFile file = javaProject.getProject().getFile(name);
+		InputStream stream = bundle.getEntry(path).openStream();
+		IOUtils2.setFileContents(file, stream);
+		return name;
+	}
+
+	/**
+	 * Adds JAR and (optional) attached source to the {@link IJavaProject} using JAR file anywhere at
+	 * file system. The JAR file would be copied to project's folder if needed.
+	 *
+	 * @param javaProject
+	 *          the {@link IJavaProject} to add JAR to.
+	 * @param jarPathString
+	 *          the full absolute path to JAR file.
+	 * @param srcPathString
+	 *          the full absolute path to ZIP file of sources. May be <code>null</code>.
+	 */
+	public static void addJar(IJavaProject javaProject, String jarPathString, String srcPathString)
+			throws Exception {
+		IProject project = javaProject.getProject();
+		String jarFileName = FilenameUtils.getName(jarPathString);
+		String srcFileName = FilenameUtils.getName(srcPathString);
+		// copy JAR
+		{
+			IFile jarFile = project.getFile(jarFileName);
+			if (!jarFile.exists()) {
+				InputStream jarStream = new FileInputStream(jarPathString);
+				IOUtils2.setFileContents(jarFile, jarStream);
+			}
+		}
+		// copy source
+		if (srcPathString != null) {
+			IFile srcFile = project.getFile(srcFileName);
+			if (!srcFile.exists()) {
+				InputStream srcStream = new FileInputStream(srcPathString);
+				IOUtils2.setFileContents(srcFile, srcStream);
+			}
+		}
+		addClasspathEntry(javaProject, jarFileName, srcFileName);
+	}
+
+	/**
+	 * Adds given external JAR into classpath. Does not copy it into {@link IProject}.
+	 *
+	 * @param javaProject
+	 *          the {@link IJavaProject} to add JAR to.
+	 * @param jarPathString
+	 *          the full absolute path to JAR file.
+	 * @param srcPathString
+	 *          the full absolute path to ZIP file of sources. May be <code>null</code>.
+	 */
+	public static void addExternalJar(IJavaProject javaProject,
+			String jarPathString,
+			String srcPathString) throws Exception {
+		IPath jarPath = new Path(jarPathString);
+		IPath srcPath = srcPathString != null ? new Path(srcPathString) : null;
+		IClasspathEntry newEntry = JavaCore.newLibraryEntry(jarPath, srcPath, null);
+		addClasspathEntry(javaProject, newEntry);
+	}
+
+	/**
+	 * Adds {@link IClasspathEntry} to the {@link IJavaProject}.
+	 *
+	 * @param javaProject
+	 *          the {@link IJavaProject} to add JAR to.
+	 * @param entry
+	 *          the {@link IClasspathEntry} to add.
+	 */
+	public static void addClasspathEntry(IJavaProject javaProject, IClasspathEntry entry)
+			throws CoreException {
+		IClasspathEntry[] entries = javaProject.getRawClasspath();
+		entries = (IClasspathEntry[]) ArrayUtils.add(entries, entry);
+		javaProject.setRawClasspath(entries, null);
+	}
+
+	/**
+	 * Adds {@link IClasspathEntry} to the {@link IJavaProject}.
+	 *
+	 * @param javaProject
+	 *          the {@link IJavaProject} to add JAR to.
+	 * @param jarPathString
+	 *          the JAR file name relative to project.
+	 * @param srcPathString
+	 *          the path to ZIP file of sources, relative to project. May be <code>null</code>.
+	 */
+	public static void addClasspathEntry(IJavaProject javaProject,
+			String jarPathString,
+			String srcPathString) throws Exception {
+		// prepare entry
+		IClasspathEntry entry;
+		{
+			IProject project = javaProject.getProject();
+			IPath jarPath = project.getFullPath().append(jarPathString);
+			IPath srcPath = srcPathString != null ? project.getFullPath().append(srcPathString) : null;
+			entry = JavaCore.newLibraryEntry(jarPath, srcPath, null);
+		}
+		// add entry
+		addClasspathEntry(javaProject, entry);
+		// notify listeners
+		{
+			List<IProjectClasspathListener> listeners = ExternalFactoriesHelper.getElementsInstances(
+					IProjectClasspathListener.class,
+					"org.eclipse.wb.core.projectClasspathListeners",
+					"listener");
+			for (IProjectClasspathListener listener : listeners) {
+				listener.addClasspathEntry(javaProject, jarPathString, srcPathString);
+			}
+		}
+	}
+
+	/**
+	 * Add libraries of given plugin to the classpath of {@link IJavaProject}.
+	 *
+	 * @param javaProject
+	 *          the {@link IJavaProject} to add libraries to.
+	 * @param pluginId
+	 *          the plugin id.
+	 */
+	public static void addPluginLibraries(IJavaProject javaProject, String pluginId)
+			throws Exception {
+		List<IClasspathEntry> entries = Lists.newArrayList();
+		// add existing entries
+		CollectionUtils.addAll(entries, javaProject.getRawClasspath());
+		// add plugin entries
+		ReflectivePDE.addPluginLibraries(pluginId, entries);
+		// set new entries
+		setRawClasspath(javaProject, entries);
+	}
+
+	/**
+	 * Adds SWT plugin library to the classpath of {@link IJavaProject}.
+	 */
+	public static void addSWTLibrary(IJavaProject javaProject) throws Exception {
+		String pluginId = "org.eclipse.swt." + SWT.getPlatform() + "." + Platform.getOS();
+		boolean isMacCocoa64 = EnvironmentUtils.IS_MAC;
+		if (isMacCocoa64 || !EnvironmentUtils.IS_MAC) {
+			pluginId += "." + Platform.getOSArch();
+		}
+		addPluginLibraries(javaProject, pluginId);
+	}
+
+	/**
+	 * Requires <code>requiredProject</code> in <code>project</code>.
+	 */
+	public static void requireProject(IJavaProject project, IJavaProject requiredProject)
+			throws JavaModelException {
+		IClasspathEntry[] rawClasspath = project.getRawClasspath();
+		rawClasspath = (IClasspathEntry[]) ArrayUtils.add(
+				rawClasspath,
+				JavaCore.newProjectEntry(requiredProject.getPath()));
+		project.setRawClasspath(rawClasspath, null);
+	}
+
+	/**
+	 * Removes {@link IClasspathEntry} for which {@link Predicate} returns <code>true</code>.
+	 */
+	public static void removeClasspathEntries(IJavaProject javaProject,
+			Predicate<IClasspathEntry> predicate) throws CoreException {
+		List<IClasspathEntry> newEntries = Lists.newArrayList();
+		IClasspathEntry[] existingEntries = javaProject.getRawClasspath();
+		for (IClasspathEntry entry : existingEntries) {
+			if (!predicate.apply(entry)) {
+				newEntries.add(entry);
+			}
+		}
+		setRawClasspath(javaProject, newEntries);
+	}
+
+	/**
+	 * Calls {@link IJavaProject#setRawClasspath(IClasspathEntry[], IProgressMonitor)}.
+	 */
+	private static void setRawClasspath(IJavaProject javaProject, List<IClasspathEntry> entries)
+			throws JavaModelException {
+		javaProject.setRawClasspath(entries.toArray(new IClasspathEntry[entries.size()]), null);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Nature
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if {@link IProject} has nature.
+	 */
+	public static boolean hasNature(final IProject project, final String natureId) {
+		return ExecutionUtils.runObjectIgnore(new RunnableObjectEx<Boolean>() {
+			@Override
+			public Boolean runObject() throws Exception {
+				return project.hasNature(natureId);
+			}
+		}, false);
+	}
+
+	/**
+	 * Adds nature to the {@link IProject}.
+	 */
+	public static void addNature(IProject project, String natureId) throws Exception {
+		IProjectDescription description = project.getDescription();
+		//
+		List<String> natureIds = Lists.newArrayList();
+		CollectionUtils.addAll(natureIds, description.getNatureIds());
+		natureIds.add(natureId);
+		description.setNatureIds(natureIds.toArray(new String[natureIds.size()]));
+		//
+		project.setDescription(description, null);
+	}
+
+	/**
+	 * Removes nature to the {@link IProject}.
+	 */
+	public static void removeNature(IProject project, String natureId) throws Exception {
+		IProjectDescription description = project.getDescription();
+		//
+		List<String> natureIds = Lists.newArrayList();
+		CollectionUtils.addAll(natureIds, description.getNatureIds());
+		natureIds.remove(natureId);
+		description.setNatureIds(natureIds.toArray(new String[natureIds.size()]));
+		//
+		project.setDescription(description, null);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Resources
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Resolves workspace relative {@link IPath} into absolute file system {@link IPath}.
+	 *
+	 * @return the resolved {@link IPath}, may be <code>null</code> if no such resource.
+	 */
+	public static IPath getOSPath(IPath path) {
+		IWorkspaceRoot workspaceRoot = ResourcesPlugin.getWorkspace().getRoot();
+		IResource resource = workspaceRoot.findMember(path);
+		return resource != null ? resource.getLocation() : null;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Files
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Finds {@link IFile}'s with given path in {@link IJavaProject} and required {@link IJavaProject}
+	 * 's.
+	 */
+	public static List<IFile> findFiles(IJavaProject javaProject, String filePath) throws Exception {
+		List<IFile> files = Lists.newArrayList();
+		findFiles(files, javaProject, filePath, Sets.<IJavaProject>newHashSet());
+		return files;
+	}
+
+	/**
+	 * Finds {@link IFile}'s with given path in {@link IJavaProject} and required {@link IJavaProject}
+	 * 's.
+	 */
+	private static void findFiles(List<IFile> files,
+			IJavaProject javaProject,
+			String filePath,
+			Set<IJavaProject> visitedProjects) throws Exception {
+		// may be not exists
+		if (!javaProject.exists()) {
+			return;
+		}
+		// may be already visited
+		if (visitedProjects.contains(javaProject)) {
+			return;
+		}
+		visitedProjects.add(javaProject);
+		// check required projects
+		IWorkspaceRoot workspaceRoot = ResourcesPlugin.getWorkspace().getRoot();
+		for (String projectName : javaProject.getRequiredProjectNames()) {
+			IJavaProject requiredJavaProject = JavaCore.create(workspaceRoot.getProject(projectName));
+			findFiles(files, requiredJavaProject, filePath, visitedProjects);
+		}
+		// check current project
+		{
+			IProject project = javaProject.getProject();
+			IFile file = project.getFile(new Path(filePath));
+			if (file.exists()) {
+				files.add(file);
+			}
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/jdt/core/SubtypesScope.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/jdt/core/SubtypesScope.java
index 8d5e62c96..8af6ee630 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/jdt/core/SubtypesScope.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/jdt/core/SubtypesScope.java
@@ -31,83 +31,83 @@
  * @coverage core.util.jdt
  */
 public final class SubtypesScope implements IJavaSearchScope {
-  private final IType[] m_subtypes;
-  private final IJavaSearchScope m_hierarchyScope;
-  private final Set<String> m_enclosingResourcePaths = Sets.newHashSet();
+	private final IType[] m_subtypes;
+	private final IJavaSearchScope m_hierarchyScope;
+	private final Set<String> m_enclosingResourcePaths = Sets.newHashSet();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SubtypesScope(IType type) throws JavaModelException {
-    m_hierarchyScope = SearchEngine.createHierarchyScope(type);
-    m_subtypes = type.newTypeHierarchy(null).getAllSubtypes(type);
-    for (IType subType : m_subtypes) {
-      IResource resource = subType.getUnderlyingResource();
-      if (resource != null) {
-        m_enclosingResourcePaths.add(resource.getFullPath().toString());
-      } else {
-        m_enclosingResourcePaths.add(subType.getFullyQualifiedName().replace('.', '/') + ".class");
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SubtypesScope(IType type) throws JavaModelException {
+		m_hierarchyScope = SearchEngine.createHierarchyScope(type);
+		m_subtypes = type.newTypeHierarchy(null).getAllSubtypes(type);
+		for (IType subType : m_subtypes) {
+			IResource resource = subType.getUnderlyingResource();
+			if (resource != null) {
+				m_enclosingResourcePaths.add(resource.getFullPath().toString());
+			} else {
+				m_enclosingResourcePaths.add(subType.getFullyQualifiedName().replace('.', '/') + ".class");
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Enclosing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean encloses(String resourcePath) {
-    // prepare name of class, without leading "jar" path
-    String classPath = resourcePath;
-    {
-      int index = classPath.indexOf("|");
-      if (index != -1) {
-        classPath = classPath.substring(index + 1);
-      }
-    }
-    // check in prepared resource
-    return m_enclosingResourcePaths.contains(classPath);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Enclosing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean encloses(String resourcePath) {
+		// prepare name of class, without leading "jar" path
+		String classPath = resourcePath;
+		{
+			int index = classPath.indexOf("|");
+			if (index != -1) {
+				classPath = classPath.substring(index + 1);
+			}
+		}
+		// check in prepared resource
+		return m_enclosingResourcePaths.contains(classPath);
+	}
 
-  @Override
-  public boolean encloses(IJavaElement element) {
-    IType type = (IType) element.getAncestor(IJavaElement.TYPE);
-    if (type != null) {
-      return ArrayUtils.contains(m_subtypes, type);
-    }
-    return false;
-  }
+	@Override
+	public boolean encloses(IJavaElement element) {
+		IType type = (IType) element.getAncestor(IJavaElement.TYPE);
+		if (type != null) {
+			return ArrayUtils.contains(m_subtypes, type);
+		}
+		return false;
+	}
 
-  @Override
-  public IPath[] enclosingProjectsAndJars() {
-    return m_hierarchyScope.enclosingProjectsAndJars();
-  }
+	@Override
+	public IPath[] enclosingProjectsAndJars() {
+		return m_hierarchyScope.enclosingProjectsAndJars();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Unused methods
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean includesBinaries() {
-    return m_hierarchyScope.includesBinaries();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Unused methods
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean includesBinaries() {
+		return m_hierarchyScope.includesBinaries();
+	}
 
-  @Override
-  public boolean includesClasspaths() {
-    return m_hierarchyScope.includesClasspaths();
-  }
+	@Override
+	public boolean includesClasspaths() {
+		return m_hierarchyScope.includesClasspaths();
+	}
 
-  @Override
-  public void setIncludesBinaries(boolean includesBinaries) {
-    m_hierarchyScope.setIncludesBinaries(includesBinaries);
-  }
+	@Override
+	public void setIncludesBinaries(boolean includesBinaries) {
+		m_hierarchyScope.setIncludesBinaries(includesBinaries);
+	}
 
-  @Override
-  public void setIncludesClasspaths(boolean includesClasspaths) {
-    m_hierarchyScope.setIncludesClasspaths(includesClasspaths);
-  }
+	@Override
+	public void setIncludesClasspaths(boolean includesClasspaths) {
+		m_hierarchyScope.setIncludesClasspaths(includesClasspaths);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/jdt/ui/IPackageRootChangeListener.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/jdt/ui/IPackageRootChangeListener.java
index 1d33bc68f..6e72129d3 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/jdt/ui/IPackageRootChangeListener.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/jdt/ui/IPackageRootChangeListener.java
@@ -19,5 +19,5 @@
  * @coverage core.util.jdt.ui
  */
 public interface IPackageRootChangeListener {
-  void rootChanged(IPackageFragmentRoot newRoot);
+	void rootChanged(IPackageFragmentRoot newRoot);
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/jdt/ui/IPackageRootFilter.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/jdt/ui/IPackageRootFilter.java
index c615ecdf9..032fa126a 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/jdt/ui/IPackageRootFilter.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/jdt/ui/IPackageRootFilter.java
@@ -20,13 +20,13 @@
  * @coverage core.util.jdt.ui
  */
 public interface IPackageRootFilter {
-  /**
-   * @return <code>true</code> if given {@link IJavaProject} can be selected.
-   */
-  boolean select(IJavaProject javaProject);
+	/**
+	 * @return <code>true</code> if given {@link IJavaProject} can be selected.
+	 */
+	boolean select(IJavaProject javaProject);
 
-  /**
-   * @return <code>true</code> if given {@link IPackageFragmentRoot} can be selected.
-   */
-  boolean select(IPackageFragmentRoot packageFragmentRoot);
+	/**
+	 * @return <code>true</code> if given {@link IPackageFragmentRoot} can be selected.
+	 */
+	boolean select(IPackageFragmentRoot packageFragmentRoot);
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/jdt/ui/JdtUiUtils.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/jdt/ui/JdtUiUtils.java
index 393798c76..db5956a11 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/jdt/ui/JdtUiUtils.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/jdt/ui/JdtUiUtils.java
@@ -53,198 +53,198 @@
  * @coverage core.util.jdt.ui
  */
 public final class JdtUiUtils {
-  private static IPreferenceStore m_combinedPreferenceStore;
-  private static JavaTextTools m_javaTextTools;
-  private static AbstractUIPlugin m_javaPlugin;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Source viewer
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Set given Java source for given source viewer.
-   */
-  public static void setJavaSourceForViewer(SourceViewer viewer, String source) {
-    IDocument doc = new Document(source);
-    getJavaTextTools().setupJavaDocumentPartitioner(doc);
-    viewer.setInput(doc);
-  }
-
-  /**
-   * Create Java source viewer (with highlighting) for given source.
-   */
-  public static SourceViewer createJavaSourceViewer(Composite parent, int style) {
-    // create viewer
-    SourceViewer viewer = null;
-    IPreferenceStore store = getCombinedPreferenceStore();
-    viewer = new SourceViewer(parent, null, style);
-    // configure viewer
-    IColorManager colorManager = getJavaTextTools().getColorManager();
-    viewer.configure(new JavaSourceViewerConfiguration(colorManager, store, null, null));
-    viewer.setEditable(false);
-    // return viewer
-    return viewer;
-  }
-
-  /**
-   * @return the instance of "org.eclipse.jdt.ui" activator class, which is the instance of
-   *         org.eclipse.jdt.internal.ui.JavaPlugin when version > 3.2
-   */
-  private static AbstractUIPlugin getJavaPlugin() {
-    if (m_javaPlugin == null) {
-      m_javaPlugin = ExecutionUtils.runObject(new RunnableObjectEx<AbstractUIPlugin>() {
-        @Override
-        public AbstractUIPlugin runObject() throws Exception {
-          return getJavaPlugin0();
-        }
-      });
-    }
-    return m_javaPlugin;
-  }
-
-  /**
-   * @return the JavaPlugin instance depending on eclipse version (using preprocessor).
-   */
-  private static AbstractUIPlugin getJavaPlugin0() throws Exception {
-    return getBundleActivator("org.eclipse.jdt.ui");
-  }
-
-  /**
-   * @return the combined preference store as "IPreferenceStore
-   *         org.eclipse.jdt.internal.ui.JavaPlugin.getCombinedPreferenceStore()".
-   */
-  private static IPreferenceStore getCombinedPreferenceStore() {
-    if (m_combinedPreferenceStore == null) {
-      IPreferenceStore generalTextStore = EditorsUI.getPreferenceStore();
-      m_combinedPreferenceStore =
-          new ChainedPreferenceStore(new IPreferenceStore[]{
-              getJavaPlugin().getPreferenceStore(),
-              new PreferencesAdapter(JavaCore.getPlugin().getPluginPreferences()),
-              generalTextStore});
-    }
-    return m_combinedPreferenceStore;
-  }
-
-  /**
-   * @return {@link JavaTextTools} instance, like as "IPreferenceStore
-   *         org.eclipse.jdt.internal.ui.JavaPlugin.getJavaTextTools()".
-   */
-  private static JavaTextTools getJavaTextTools() {
-    if (m_javaTextTools == null) {
-      m_javaTextTools =
-          new JavaTextTools(getJavaPlugin().getPreferenceStore(),
-              JavaCore.getPlugin().getPluginPreferences());
-    }
-    return m_javaTextTools;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Type selection
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Selects any {@link IType} (class or interface) in {@link IJavaProject}.
-   *
-   * @param superTypeName
-   *          the name of superclass of {@link IType} to select.
-   *
-   * @return the selected {@link IType}, or <code>null</code> is no type selected.
-   */
-  public static IType selectSubType(final Shell shell,
-      final IJavaProject javaProject,
-      final String superTypeName) {
-    return ExecutionUtils.runObjectLog(new RunnableObjectEx<IType>() {
-      @Override
-      public IType runObject() throws Exception {
-        IType actionType = javaProject.findType(superTypeName);
-        SubtypesScope scope = new SubtypesScope(actionType);
-        return JdtUiUtils.selectType(DesignerPlugin.getShell(), scope);
-      }
-    }, null);
-  }
-
-  /**
-   * Selects any {@link IType} (class or interface) in {@link IJavaProject}.
-   *
-   * @return the selected {@link IType}, or <code>null</code> is no type selected.
-   */
-  public static IType selectType(Shell shell, IJavaProject javaProject) throws Exception {
-    IJavaSearchScope scope = SearchEngine.createJavaSearchScope(new IJavaProject[]{javaProject});
-    return selectType(shell, scope, IJavaElementSearchConstants.CONSIDER_ALL_TYPES);
-  }
-
-  /**
-   * Selects any class (not interface) in {@link IJavaProject}.
-   *
-   * @return the selected {@link IType}, or <code>null</code> is no type selected.
-   */
-  public static IType selectClassType(Shell shell, IJavaProject javaProject) throws Exception {
-    IJavaSearchScope scope = SearchEngine.createJavaSearchScope(new IJavaProject[]{javaProject});
-    return selectType(shell, scope);
-  }
-
-  /**
-   * Selects any class (not interface) in inside of {@link IJavaSearchScope}.
-   *
-   * @return the selected {@link IType}, or <code>null</code> is no type selected.
-   */
-  public static IType selectType(Shell shell, IJavaSearchScope scope) throws Exception {
-    return selectType(shell, scope, IJavaElementSearchConstants.CONSIDER_CLASSES);
-  }
-
-  /**
-   * Selects any class (not interface) in inside of {@link IJavaSearchScope}.
-   *
-   * @param shell
-   *          the parent {@link Shell} for dialog.
-   * @param scope
-   *          the {@link IJavaSearchScope} to limit types.
-   * @param style
-   *          the style of the dialog, see
-   *          {@link JavaUI#createTypeDialog(Shell, org.eclipse.jface.operation.IRunnableContext, IJavaSearchScope, int, boolean)}
-   *          .
-   *
-   * @return the selected {@link IType}, or <code>null</code> is no type selected.
-   */
-  public static IType selectType(Shell shell, IJavaSearchScope scope, int style) throws Exception {
-    ProgressMonitorDialog context = new ProgressMonitorDialog(shell);
-    SelectionDialog dialog = JavaUI.createTypeDialog(shell, context, scope, style, false);
-    dialog.setTitle(Messages.JdtUiUtils_selectTypeTitle);
-    dialog.setMessage(Messages.JdtUiUtils_selectTypeMessage);
-    // open dialog
-    if (dialog.open() == Window.OK) {
-      return (IType) dialog.getResult()[0];
-    }
-    // no type selected
-    return null;
-  }
-
-  /**
-   * Selects any class (not interface) in {@link IJavaProject}.
-   *
-   * @return the fully qualified name of selected {@link IType}.
-   */
-  public static String selectTypeName(Shell shell, IJavaProject javaProject) throws Exception {
-    IType type = selectClassType(shell, javaProject);
-    return type != null ? type.getFullyQualifiedName() : null;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Misc
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the bundle activator by "getDefault()" method using reflection.
-   */
-  public static AbstractUIPlugin getBundleActivator(String bundleName) throws Exception {
-    Bundle bundle = Platform.getBundle(bundleName);
-    String pluginActivatorClassName = (String) bundle.getHeaders().get(Constants.BUNDLE_ACTIVATOR);
-    Class<?> pluginClass = bundle.loadClass(pluginActivatorClassName);
-    // get the it's instance using "getDefault" method. Possibly it is the usage of internal API :)
-    Method getDefaultMethod = pluginClass.getMethod("getDefault", new Class[0]);
-    return (AbstractUIPlugin) getDefaultMethod.invoke(null, new Object[0]);
-  }
+	private static IPreferenceStore m_combinedPreferenceStore;
+	private static JavaTextTools m_javaTextTools;
+	private static AbstractUIPlugin m_javaPlugin;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Source viewer
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Set given Java source for given source viewer.
+	 */
+	public static void setJavaSourceForViewer(SourceViewer viewer, String source) {
+		IDocument doc = new Document(source);
+		getJavaTextTools().setupJavaDocumentPartitioner(doc);
+		viewer.setInput(doc);
+	}
+
+	/**
+	 * Create Java source viewer (with highlighting) for given source.
+	 */
+	public static SourceViewer createJavaSourceViewer(Composite parent, int style) {
+		// create viewer
+		SourceViewer viewer = null;
+		IPreferenceStore store = getCombinedPreferenceStore();
+		viewer = new SourceViewer(parent, null, style);
+		// configure viewer
+		IColorManager colorManager = getJavaTextTools().getColorManager();
+		viewer.configure(new JavaSourceViewerConfiguration(colorManager, store, null, null));
+		viewer.setEditable(false);
+		// return viewer
+		return viewer;
+	}
+
+	/**
+	 * @return the instance of "org.eclipse.jdt.ui" activator class, which is the instance of
+	 *         org.eclipse.jdt.internal.ui.JavaPlugin when version > 3.2
+	 */
+	private static AbstractUIPlugin getJavaPlugin() {
+		if (m_javaPlugin == null) {
+			m_javaPlugin = ExecutionUtils.runObject(new RunnableObjectEx<AbstractUIPlugin>() {
+				@Override
+				public AbstractUIPlugin runObject() throws Exception {
+					return getJavaPlugin0();
+				}
+			});
+		}
+		return m_javaPlugin;
+	}
+
+	/**
+	 * @return the JavaPlugin instance depending on eclipse version (using preprocessor).
+	 */
+	private static AbstractUIPlugin getJavaPlugin0() throws Exception {
+		return getBundleActivator("org.eclipse.jdt.ui");
+	}
+
+	/**
+	 * @return the combined preference store as "IPreferenceStore
+	 *         org.eclipse.jdt.internal.ui.JavaPlugin.getCombinedPreferenceStore()".
+	 */
+	private static IPreferenceStore getCombinedPreferenceStore() {
+		if (m_combinedPreferenceStore == null) {
+			IPreferenceStore generalTextStore = EditorsUI.getPreferenceStore();
+			m_combinedPreferenceStore =
+					new ChainedPreferenceStore(new IPreferenceStore[]{
+							getJavaPlugin().getPreferenceStore(),
+							new PreferencesAdapter(JavaCore.getPlugin().getPluginPreferences()),
+							generalTextStore});
+		}
+		return m_combinedPreferenceStore;
+	}
+
+	/**
+	 * @return {@link JavaTextTools} instance, like as "IPreferenceStore
+	 *         org.eclipse.jdt.internal.ui.JavaPlugin.getJavaTextTools()".
+	 */
+	private static JavaTextTools getJavaTextTools() {
+		if (m_javaTextTools == null) {
+			m_javaTextTools =
+					new JavaTextTools(getJavaPlugin().getPreferenceStore(),
+							JavaCore.getPlugin().getPluginPreferences());
+		}
+		return m_javaTextTools;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Type selection
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Selects any {@link IType} (class or interface) in {@link IJavaProject}.
+	 *
+	 * @param superTypeName
+	 *          the name of superclass of {@link IType} to select.
+	 *
+	 * @return the selected {@link IType}, or <code>null</code> is no type selected.
+	 */
+	public static IType selectSubType(final Shell shell,
+			final IJavaProject javaProject,
+			final String superTypeName) {
+		return ExecutionUtils.runObjectLog(new RunnableObjectEx<IType>() {
+			@Override
+			public IType runObject() throws Exception {
+				IType actionType = javaProject.findType(superTypeName);
+				SubtypesScope scope = new SubtypesScope(actionType);
+				return JdtUiUtils.selectType(DesignerPlugin.getShell(), scope);
+			}
+		}, null);
+	}
+
+	/**
+	 * Selects any {@link IType} (class or interface) in {@link IJavaProject}.
+	 *
+	 * @return the selected {@link IType}, or <code>null</code> is no type selected.
+	 */
+	public static IType selectType(Shell shell, IJavaProject javaProject) throws Exception {
+		IJavaSearchScope scope = SearchEngine.createJavaSearchScope(new IJavaProject[]{javaProject});
+		return selectType(shell, scope, IJavaElementSearchConstants.CONSIDER_ALL_TYPES);
+	}
+
+	/**
+	 * Selects any class (not interface) in {@link IJavaProject}.
+	 *
+	 * @return the selected {@link IType}, or <code>null</code> is no type selected.
+	 */
+	public static IType selectClassType(Shell shell, IJavaProject javaProject) throws Exception {
+		IJavaSearchScope scope = SearchEngine.createJavaSearchScope(new IJavaProject[]{javaProject});
+		return selectType(shell, scope);
+	}
+
+	/**
+	 * Selects any class (not interface) in inside of {@link IJavaSearchScope}.
+	 *
+	 * @return the selected {@link IType}, or <code>null</code> is no type selected.
+	 */
+	public static IType selectType(Shell shell, IJavaSearchScope scope) throws Exception {
+		return selectType(shell, scope, IJavaElementSearchConstants.CONSIDER_CLASSES);
+	}
+
+	/**
+	 * Selects any class (not interface) in inside of {@link IJavaSearchScope}.
+	 *
+	 * @param shell
+	 *          the parent {@link Shell} for dialog.
+	 * @param scope
+	 *          the {@link IJavaSearchScope} to limit types.
+	 * @param style
+	 *          the style of the dialog, see
+	 *          {@link JavaUI#createTypeDialog(Shell, org.eclipse.jface.operation.IRunnableContext, IJavaSearchScope, int, boolean)}
+	 *          .
+	 *
+	 * @return the selected {@link IType}, or <code>null</code> is no type selected.
+	 */
+	public static IType selectType(Shell shell, IJavaSearchScope scope, int style) throws Exception {
+		ProgressMonitorDialog context = new ProgressMonitorDialog(shell);
+		SelectionDialog dialog = JavaUI.createTypeDialog(shell, context, scope, style, false);
+		dialog.setTitle(Messages.JdtUiUtils_selectTypeTitle);
+		dialog.setMessage(Messages.JdtUiUtils_selectTypeMessage);
+		// open dialog
+		if (dialog.open() == Window.OK) {
+			return (IType) dialog.getResult()[0];
+		}
+		// no type selected
+		return null;
+	}
+
+	/**
+	 * Selects any class (not interface) in {@link IJavaProject}.
+	 *
+	 * @return the fully qualified name of selected {@link IType}.
+	 */
+	public static String selectTypeName(Shell shell, IJavaProject javaProject) throws Exception {
+		IType type = selectClassType(shell, javaProject);
+		return type != null ? type.getFullyQualifiedName() : null;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Misc
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the bundle activator by "getDefault()" method using reflection.
+	 */
+	public static AbstractUIPlugin getBundleActivator(String bundleName) throws Exception {
+		Bundle bundle = Platform.getBundle(bundleName);
+		String pluginActivatorClassName = (String) bundle.getHeaders().get(Constants.BUNDLE_ACTIVATOR);
+		Class<?> pluginClass = bundle.loadClass(pluginActivatorClassName);
+		// get the it's instance using "getDefault" method. Possibly it is the usage of internal API :)
+		Method getDefaultMethod = pluginClass.getMethod("getDefault", new Class[0]);
+		return (AbstractUIPlugin) getDefaultMethod.invoke(null, new Object[0]);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/jdt/ui/PackageRootAndPackageSelectionDialogField.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/jdt/ui/PackageRootAndPackageSelectionDialogField.java
index 73d1f574d..92a3e53fa 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/jdt/ui/PackageRootAndPackageSelectionDialogField.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/jdt/ui/PackageRootAndPackageSelectionDialogField.java
@@ -29,138 +29,138 @@
  * @coverage core.util.jdt.ui
  */
 public class PackageRootAndPackageSelectionDialogField extends DialogField {
-  private final int m_textFieldWidth;
-  private final PackageRootSelectionDialogField m_rootField;
-  private final PackageSelectionDialogField m_packageField;
-  private boolean m_dialogFieldChanging;
-  private final IDialogFieldListener m_validateListener = new IDialogFieldListener() {
-    @Override
-    public void dialogFieldChanged(DialogField field) {
-      if (!m_dialogFieldChanging) {
-        PackageRootAndPackageSelectionDialogField.this.dialogFieldChanged();
-      }
-    }
-  };
-  private PixelConverter m_pixelConverter;
+	private final int m_textFieldWidth;
+	private final PackageRootSelectionDialogField m_rootField;
+	private final PackageSelectionDialogField m_packageField;
+	private boolean m_dialogFieldChanging;
+	private final IDialogFieldListener m_validateListener = new IDialogFieldListener() {
+		@Override
+		public void dialogFieldChanged(DialogField field) {
+			if (!m_dialogFieldChanging) {
+				PackageRootAndPackageSelectionDialogField.this.dialogFieldChanged();
+			}
+		}
+	};
+	private PixelConverter m_pixelConverter;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public PackageRootAndPackageSelectionDialogField(int textFieldWidth,
-      String rootLabel,
-      String rootButtonLabel,
-      String packageLabel,
-      String packageButtonLabel) {
-    m_textFieldWidth = textFieldWidth;
-    // create source folder field
-    {
-      m_rootField = PackageRootSelectionDialogField.create(rootLabel, rootButtonLabel);
-      m_rootField.setUpdateListener(m_validateListener);
-      m_rootField.setListener(new IPackageRootChangeListener() {
-        @Override
-        public void rootChanged(IPackageFragmentRoot newRoot) {
-          m_packageField.setRoot(m_rootField.getRoot());
-        }
-      });
-    }
-    // create package field
-    {
-      m_packageField = PackageSelectionDialogField.create(packageLabel, packageButtonLabel);
-      m_packageField.setUpdateListener(m_validateListener);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public PackageRootAndPackageSelectionDialogField(int textFieldWidth,
+			String rootLabel,
+			String rootButtonLabel,
+			String packageLabel,
+			String packageButtonLabel) {
+		m_textFieldWidth = textFieldWidth;
+		// create source folder field
+		{
+			m_rootField = PackageRootSelectionDialogField.create(rootLabel, rootButtonLabel);
+			m_rootField.setUpdateListener(m_validateListener);
+			m_rootField.setListener(new IPackageRootChangeListener() {
+				@Override
+				public void rootChanged(IPackageFragmentRoot newRoot) {
+					m_packageField.setRoot(m_rootField.getRoot());
+				}
+			});
+		}
+		// create package field
+		{
+			m_packageField = PackageSelectionDialogField.create(packageLabel, packageButtonLabel);
+			m_packageField.setUpdateListener(m_validateListener);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets filter for package fragment root selection.
-   */
-  public void setPackageRootFilter(IPackageRootFilter packageRootFilter) {
-    m_rootField.setPackageRootFilter(packageRootFilter);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets filter for package fragment root selection.
+	 */
+	public void setPackageRootFilter(IPackageRootFilter packageRootFilter) {
+		m_rootField.setPackageRootFilter(packageRootFilter);
+	}
 
-  /**
-   * Update fields using given compilation unit.
-   */
-  public void setCompilationUnit(ICompilationUnit compilationUnit) {
-    m_dialogFieldChanging = true;
-    try {
-      m_rootField.setCompilationUnit(compilationUnit);
-      m_packageField.setCompilationUnit(compilationUnit);
-    } finally {
-      m_dialogFieldChanging = false;
-    }
-    dialogFieldChanged();
-  }
+	/**
+	 * Update fields using given compilation unit.
+	 */
+	public void setCompilationUnit(ICompilationUnit compilationUnit) {
+		m_dialogFieldChanging = true;
+		try {
+			m_rootField.setCompilationUnit(compilationUnit);
+			m_packageField.setCompilationUnit(compilationUnit);
+		} finally {
+			m_dialogFieldChanging = false;
+		}
+		dialogFieldChanged();
+	}
 
-  /**
-   * Return selected source folder (package root).
-   */
-  public IPackageFragmentRoot getRoot() {
-    return m_rootField.getRoot();
-  }
+	/**
+	 * Return selected source folder (package root).
+	 */
+	public IPackageFragmentRoot getRoot() {
+		return m_rootField.getRoot();
+	}
 
-  /**
-   * Set source folder (package root).
-   */
-  public void setRoot(IPackageFragmentRoot root) {
-    m_rootField.setRoot(root);
-  }
+	/**
+	 * Set source folder (package root).
+	 */
+	public void setRoot(IPackageFragmentRoot root) {
+		m_rootField.setRoot(root);
+	}
 
-  /**
-   * Return selected package.
-   */
-  public IPackageFragment getPackage() {
-    return m_packageField.getPackage();
-  }
+	/**
+	 * Return selected package.
+	 */
+	public IPackageFragment getPackage() {
+		return m_packageField.getPackage();
+	}
 
-  /**
-   * Set package.
-   */
-  public void setPackage(IPackageFragment pkg) {
-    if (pkg != null) {
-      m_packageField.setPackage(pkg);
-      m_rootField.setRoot((IPackageFragmentRoot) pkg.getAncestor(IJavaElement.PACKAGE_FRAGMENT_ROOT));
-    } else {
-      m_packageField.setPackage(null);
-      m_rootField.setRoot(null);
-    }
-  }
+	/**
+	 * Set package.
+	 */
+	public void setPackage(IPackageFragment pkg) {
+		if (pkg != null) {
+			m_packageField.setPackage(pkg);
+			m_rootField.setRoot((IPackageFragmentRoot) pkg.getAncestor(IJavaElement.PACKAGE_FRAGMENT_ROOT));
+		} else {
+			m_packageField.setPackage(null);
+			m_rootField.setRoot(null);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Controls creation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public int getNumberOfControls() {
-    return 1;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Controls creation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public int getNumberOfControls() {
+		return 1;
+	}
 
-  @Override
-  public Control[] doFillIntoGrid(Composite parent, int nColumns) {
-    assertEnoughColumns(nColumns);
-    m_pixelConverter = new PixelConverter(parent);
-    // create root field controls
-    m_rootField.doFillIntoGrid(parent, nColumns);
-    m_rootField.getTextControl(null).setLayoutData(createDataForText());
-    // create package field controls
-    m_packageField.doFillIntoGrid(parent, nColumns);
-    m_packageField.getTextControl(null).setLayoutData(createDataForText());
-    // we don't want return controls (does anybody use them?)
-    return null;
-  }
+	@Override
+	public Control[] doFillIntoGrid(Composite parent, int nColumns) {
+		assertEnoughColumns(nColumns);
+		m_pixelConverter = new PixelConverter(parent);
+		// create root field controls
+		m_rootField.doFillIntoGrid(parent, nColumns);
+		m_rootField.getTextControl(null).setLayoutData(createDataForText());
+		// create package field controls
+		m_packageField.doFillIntoGrid(parent, nColumns);
+		m_packageField.getTextControl(null).setLayoutData(createDataForText());
+		// we don't want return controls (does anybody use them?)
+		return null;
+	}
 
-  private GridData createDataForText() {
-    GridData gridData = new GridData();
-    gridData.grabExcessHorizontalSpace = true;
-    gridData.horizontalAlignment = GridData.FILL;
-    gridData.widthHint = m_pixelConverter.convertWidthInCharsToPixels(m_textFieldWidth);
-    return gridData;
-  }
+	private GridData createDataForText() {
+		GridData gridData = new GridData();
+		gridData.grabExcessHorizontalSpace = true;
+		gridData.horizontalAlignment = GridData.FILL;
+		gridData.widthHint = m_pixelConverter.convertWidthInCharsToPixels(m_textFieldWidth);
+		return gridData;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/jdt/ui/PackageRootSelectionDialogField.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/jdt/ui/PackageRootSelectionDialogField.java
index a62ca5d05..a656771a5 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/jdt/ui/PackageRootSelectionDialogField.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/jdt/ui/PackageRootSelectionDialogField.java
@@ -51,285 +51,285 @@
  * @coverage core.util.jdt.ui
  */
 public final class PackageRootSelectionDialogField extends StringButtonDialogField
-    implements
-      IDialogFieldListener {
-  private IPackageRootFilter m_packageRootFilter;
-  private IDialogFieldListener m_updateListener;
-  private IPackageRootChangeListener m_listener;
-  private IPackageFragmentRoot m_root;
+implements
+IDialogFieldListener {
+	private IPackageRootFilter m_packageRootFilter;
+	private IDialogFieldListener m_updateListener;
+	private IPackageRootChangeListener m_listener;
+	private IPackageFragmentRoot m_root;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Creation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return source folder selection field with given field and button labels.
-   */
-  public static PackageRootSelectionDialogField create(String label, String buttonLabel) {
-    ButtonAdapter adapter = new ButtonAdapter();
-    PackageRootSelectionDialogField field =
-        new PackageRootSelectionDialogField(label, buttonLabel, adapter);
-    adapter.setReceiver(field);
-    return field;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Creation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return source folder selection field with given field and button labels.
+	 */
+	public static PackageRootSelectionDialogField create(String label, String buttonLabel) {
+		ButtonAdapter adapter = new ButtonAdapter();
+		PackageRootSelectionDialogField field =
+				new PackageRootSelectionDialogField(label, buttonLabel, adapter);
+		adapter.setReceiver(field);
+		return field;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private PackageRootSelectionDialogField(String label,
-      String buttonLabel,
-      IStringButtonAdapter adapter) {
-    super(adapter);
-    setLabelText(label);
-    setButtonLabel(buttonLabel);
-    setDialogFieldListener(this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private PackageRootSelectionDialogField(String label,
+			String buttonLabel,
+			IStringButtonAdapter adapter) {
+		super(adapter);
+		setLabelText(label);
+		setButtonLabel(buttonLabel);
+		setDialogFieldListener(this);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets filter for package fragment root selection.
-   */
-  public void setPackageRootFilter(IPackageRootFilter packageRootFilter) {
-    m_packageRootFilter = packageRootFilter;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets filter for package fragment root selection.
+	 */
+	public void setPackageRootFilter(IPackageRootFilter packageRootFilter) {
+		m_packageRootFilter = packageRootFilter;
+	}
 
-  public void setCompilationUnit(ICompilationUnit unit) {
-    IPackageFragment pkg = (IPackageFragment) unit.getParent();
-    IPackageFragmentRoot root = (IPackageFragmentRoot) pkg.getParent();
-    setRoot(root);
-  }
+	public void setCompilationUnit(ICompilationUnit unit) {
+		IPackageFragment pkg = (IPackageFragment) unit.getParent();
+		IPackageFragmentRoot root = (IPackageFragmentRoot) pkg.getParent();
+		setRoot(root);
+	}
 
-  public void setUpdateListener(IDialogFieldListener updateListener) {
-    m_updateListener = updateListener;
-  }
+	public void setUpdateListener(IDialogFieldListener updateListener) {
+		m_updateListener = updateListener;
+	}
 
-  public void setListener(IPackageRootChangeListener changeListener) {
-    m_listener = changeListener;
-  }
+	public void setListener(IPackageRootChangeListener changeListener) {
+		m_listener = changeListener;
+	}
 
-  public IPackageFragmentRoot getRoot() {
-    return m_root;
-  }
+	public IPackageFragmentRoot getRoot() {
+		return m_root;
+	}
 
-  public void setRoot(IPackageFragmentRoot packageFragmentRoot) {
-    m_root = packageFragmentRoot;
-    if (m_root != null) {
-      String newText = getRootString(m_root);
-      if (!getText().equals(newText)) {
-        setText(newText);
-      }
-    }
-    //
-    if (m_listener != null) {
-      m_listener.rootChanged(m_root);
-    }
-    if (m_updateListener != null) {
-      m_updateListener.dialogFieldChanged(this);
-    }
-  }
+	public void setRoot(IPackageFragmentRoot packageFragmentRoot) {
+		m_root = packageFragmentRoot;
+		if (m_root != null) {
+			String newText = getRootString(m_root);
+			if (!getText().equals(newText)) {
+				setText(newText);
+			}
+		}
+		//
+		if (m_listener != null) {
+			m_listener.rootChanged(m_root);
+		}
+		if (m_updateListener != null) {
+			m_updateListener.dialogFieldChanged(this);
+		}
+	}
 
-  public void setRootWithoutUpdate(IPackageFragmentRoot packageFragmentRoot) {
-    m_root = packageFragmentRoot;
-    if (m_root != null) {
-      String newText = getRootString(m_root);
-      if (!getText().equals(newText)) {
-        setTextWithoutUpdate(newText);
-      }
-    }
-    //
-    if (m_listener != null) {
-      m_listener.rootChanged(m_root);
-    }
-  }
+	public void setRootWithoutUpdate(IPackageFragmentRoot packageFragmentRoot) {
+		m_root = packageFragmentRoot;
+		if (m_root != null) {
+			String newText = getRootString(m_root);
+			if (!getText().equals(newText)) {
+				setTextWithoutUpdate(newText);
+			}
+		}
+		//
+		if (m_listener != null) {
+			m_listener.rootChanged(m_root);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IDialogFieldListener
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void dialogFieldChanged(DialogField field) {
-    setRoot(getRootFromString(getText()));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IDialogFieldListener
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void dialogFieldChanged(DialogField field) {
+		setRoot(getRootFromString(getText()));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Return string presentation of package root.
-   */
-  private static String getRootString(IPackageFragmentRoot root) {
-    return root == null ? "" : root.getPath().makeRelative().toString();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Return string presentation of package root.
+	 */
+	private static String getRootString(IPackageFragmentRoot root) {
+		return root == null ? "" : root.getPath().makeRelative().toString();
+	}
 
-  /**
-   * Tries to build a package fragment root out of a string and sets the string into this package
-   * fragment root.
-   */
-  private static IPackageFragmentRoot getRootFromString(String rootString) {
-    if (rootString.length() == 0) {
-      return null;
-    }
-    // prepare resource for given string
-    IPath path = new Path(rootString);
-    IWorkspaceRoot workspaceRoot = ResourcesPlugin.getWorkspace().getRoot();
-    IResource resource = workspaceRoot.findMember(path);
-    if (resource == null) {
-      return null;
-    }
-    // resource should be project or source folder
-    int resourceType = resource.getType();
-    if (resourceType == IResource.PROJECT || resourceType == IResource.FOLDER) {
-      // check project
-      IProject project = resource.getProject();
-      if (!project.isOpen()) {
-        return null;
-      }
-      // try to convert resource into package fragment root
-      IJavaProject javaProject = JavaCore.create(project);
-      IPackageFragmentRoot root = javaProject.getPackageFragmentRoot(resource);
-      if (root.exists()) {
-        return root;
-      }
-    }
-    return null;
-  }
+	/**
+	 * Tries to build a package fragment root out of a string and sets the string into this package
+	 * fragment root.
+	 */
+	private static IPackageFragmentRoot getRootFromString(String rootString) {
+		if (rootString.length() == 0) {
+			return null;
+		}
+		// prepare resource for given string
+		IPath path = new Path(rootString);
+		IWorkspaceRoot workspaceRoot = ResourcesPlugin.getWorkspace().getRoot();
+		IResource resource = workspaceRoot.findMember(path);
+		if (resource == null) {
+			return null;
+		}
+		// resource should be project or source folder
+		int resourceType = resource.getType();
+		if (resourceType == IResource.PROJECT || resourceType == IResource.FOLDER) {
+			// check project
+			IProject project = resource.getProject();
+			if (!project.isOpen()) {
+				return null;
+			}
+			// try to convert resource into package fragment root
+			IJavaProject javaProject = JavaCore.create(project);
+			IPackageFragmentRoot root = javaProject.getPackageFragmentRoot(resource);
+			if (root.exists()) {
+				return root;
+			}
+		}
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Button adapter
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static class ButtonAdapter implements IStringButtonAdapter {
-    private PackageRootSelectionDialogField m_receiver;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Button adapter
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static class ButtonAdapter implements IStringButtonAdapter {
+		private PackageRootSelectionDialogField m_receiver;
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Access
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public void setReceiver(PackageRootSelectionDialogField receiver) {
-      m_receiver = receiver;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Access
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public void setReceiver(PackageRootSelectionDialogField receiver) {
+			m_receiver = receiver;
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // IStringButtonAdapter
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public void changeControlPressed(DialogField field) {
-      IPackageFragmentRoot root = selectSourceFolder(m_receiver.m_root);
-      if (root != null) {
-        m_receiver.setRoot(root);
-      }
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// IStringButtonAdapter
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public void changeControlPressed(DialogField field) {
+			IPackageFragmentRoot root = selectSourceFolder(m_receiver.m_root);
+			if (root != null) {
+				m_receiver.setRoot(root);
+			}
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Select source folder
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    private IPackageFragmentRoot selectSourceFolder(IPackageFragmentRoot initialSelection) {
-      Shell shell = Display.getCurrent().getActiveShell();
-      ILabelProvider labelProvider =
-          new JavaElementLabelProvider(JavaElementLabelProvider.SHOW_DEFAULT);
-      ITreeContentProvider contentProvider = new StandardJavaElementContentProvider();
-      ElementTreeSelectionDialog dialog =
-          new ElementTreeSelectionDialog(shell, labelProvider, contentProvider);
-      //
-      dialog.setTitle(Messages.PackageRootSelectionDialogField_dialogTitle);
-      dialog.setMessage(Messages.PackageRootSelectionDialogField_dialogMessage);
-      dialog.setComparator(new JavaElementComparator());
-      //
-      dialog.setValidator(new ISelectionStatusValidator() {
-        @Override
-        public IStatus validate(Object[] selection) {
-          if (selection.length == 1) {
-            Object element = selection[0];
-            if (isElementValid(element)) {
-              return StatusUtils.OK_STATUS;
-            }
-          }
-          return StatusUtils.ERROR_STATUS;
-        }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Select source folder
+		//
+		////////////////////////////////////////////////////////////////////////////
+		private IPackageFragmentRoot selectSourceFolder(IPackageFragmentRoot initialSelection) {
+			Shell shell = Display.getCurrent().getActiveShell();
+			ILabelProvider labelProvider =
+					new JavaElementLabelProvider(JavaElementLabelProvider.SHOW_DEFAULT);
+			ITreeContentProvider contentProvider = new StandardJavaElementContentProvider();
+			ElementTreeSelectionDialog dialog =
+					new ElementTreeSelectionDialog(shell, labelProvider, contentProvider);
+			//
+			dialog.setTitle(Messages.PackageRootSelectionDialogField_dialogTitle);
+			dialog.setMessage(Messages.PackageRootSelectionDialogField_dialogMessage);
+			dialog.setComparator(new JavaElementComparator());
+			//
+			dialog.setValidator(new ISelectionStatusValidator() {
+				@Override
+				public IStatus validate(Object[] selection) {
+					if (selection.length == 1) {
+						Object element = selection[0];
+						if (isElementValid(element)) {
+							return StatusUtils.OK_STATUS;
+						}
+					}
+					return StatusUtils.ERROR_STATUS;
+				}
 
-        public boolean isElementValid(Object element) {
-          try {
-            if (element instanceof IJavaProject) {
-              IJavaProject project = (IJavaProject) element;
-              IPath path = project.getProject().getFullPath();
-              return project.findPackageFragmentRoot(path) != null;
-            } else if (element instanceof IPackageFragmentRoot) {
-              return ((IPackageFragmentRoot) element).getKind() == IPackageFragmentRoot.K_SOURCE;
-            }
-            return true;
-          } catch (JavaModelException e) {
-            DesignerPlugin.log(e);
-          }
-          return false;
-        }
-      });
-      //
-      dialog.addFilter(m_javaFilter);
-      //
-      dialog.setInput(JavaCore.create(ResourcesPlugin.getWorkspace().getRoot()));
-      dialog.setInitialSelection(initialSelection);
-      //
-      if (dialog.open() == Window.OK) {
-        Object element = dialog.getFirstResult();
-        if (element instanceof IJavaProject) {
-          IJavaProject javaProject = (IJavaProject) element;
-          return javaProject.getPackageFragmentRoot(javaProject.getProject());
-        } else if (element instanceof IPackageFragmentRoot) {
-          return (IPackageFragmentRoot) element;
-        }
-        return null;
-      }
-      return null;
-    }
+				public boolean isElementValid(Object element) {
+					try {
+						if (element instanceof IJavaProject) {
+							IJavaProject project = (IJavaProject) element;
+							IPath path = project.getProject().getFullPath();
+							return project.findPackageFragmentRoot(path) != null;
+						} else if (element instanceof IPackageFragmentRoot) {
+							return ((IPackageFragmentRoot) element).getKind() == IPackageFragmentRoot.K_SOURCE;
+						}
+						return true;
+					} catch (JavaModelException e) {
+						DesignerPlugin.log(e);
+					}
+					return false;
+				}
+			});
+			//
+			dialog.addFilter(m_javaFilter);
+			//
+			dialog.setInput(JavaCore.create(ResourcesPlugin.getWorkspace().getRoot()));
+			dialog.setInitialSelection(initialSelection);
+			//
+			if (dialog.open() == Window.OK) {
+				Object element = dialog.getFirstResult();
+				if (element instanceof IJavaProject) {
+					IJavaProject javaProject = (IJavaProject) element;
+					return javaProject.getPackageFragmentRoot(javaProject.getProject());
+				} else if (element instanceof IPackageFragmentRoot) {
+					return (IPackageFragmentRoot) element;
+				}
+				return null;
+			}
+			return null;
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Filter
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    private final ViewerFilter m_javaFilter = new ViewerFilter() {
-      @Override
-      public boolean select(Viewer viewer, Object parentElement, Object element) {
-        // check project
-        if (element instanceof IJavaProject) {
-          if (m_receiver.m_packageRootFilter != null) {
-            return m_receiver.m_packageRootFilter.select((IJavaProject) element);
-          }
-          return true;
-        }
-        // check package fragment root
-        if (element instanceof IPackageFragmentRoot) {
-          try {
-            IPackageFragmentRoot packageFragmentRoot = (IPackageFragmentRoot) element;
-            if (packageFragmentRoot.getKind() == IPackageFragmentRoot.K_SOURCE) {
-              if (m_receiver.m_packageRootFilter != null) {
-                return m_receiver.m_packageRootFilter.select(packageFragmentRoot);
-              }
-              return true;
-            }
-          } catch (JavaModelException e) {
-            DesignerPlugin.log(e);
-            return false;
-          }
-        }
-        return false;
-      }
-    };
-  }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Filter
+		//
+		////////////////////////////////////////////////////////////////////////////
+		private final ViewerFilter m_javaFilter = new ViewerFilter() {
+			@Override
+			public boolean select(Viewer viewer, Object parentElement, Object element) {
+				// check project
+				if (element instanceof IJavaProject) {
+					if (m_receiver.m_packageRootFilter != null) {
+						return m_receiver.m_packageRootFilter.select((IJavaProject) element);
+					}
+					return true;
+				}
+				// check package fragment root
+				if (element instanceof IPackageFragmentRoot) {
+					try {
+						IPackageFragmentRoot packageFragmentRoot = (IPackageFragmentRoot) element;
+						if (packageFragmentRoot.getKind() == IPackageFragmentRoot.K_SOURCE) {
+							if (m_receiver.m_packageRootFilter != null) {
+								return m_receiver.m_packageRootFilter.select(packageFragmentRoot);
+							}
+							return true;
+						}
+					} catch (JavaModelException e) {
+						DesignerPlugin.log(e);
+						return false;
+					}
+				}
+				return false;
+			}
+		};
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/jdt/ui/PackageSelectionDialogField.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/jdt/ui/PackageSelectionDialogField.java
index 280274bb8..de2f12636 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/jdt/ui/PackageSelectionDialogField.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/jdt/ui/PackageSelectionDialogField.java
@@ -41,263 +41,263 @@
  * @coverage core.util.jdt.ui
  */
 public final class PackageSelectionDialogField extends StringButtonDialogField
-    implements
-      IDialogFieldListener {
-  private IDialogFieldListener m_updateListener;
-  private IPackageFragmentRoot m_root;
-  private IPackageFragment m_package;
+implements
+IDialogFieldListener {
+	private IDialogFieldListener m_updateListener;
+	private IPackageFragmentRoot m_root;
+	private IPackageFragment m_package;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Creation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static PackageSelectionDialogField create(String label, String buttonLabel) {
-    ButtonAdapter adapter = new ButtonAdapter();
-    PackageSelectionDialogField field =
-        new PackageSelectionDialogField(label, buttonLabel, adapter);
-    adapter.setReceiver(field);
-    return field;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Creation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static PackageSelectionDialogField create(String label, String buttonLabel) {
+		ButtonAdapter adapter = new ButtonAdapter();
+		PackageSelectionDialogField field =
+				new PackageSelectionDialogField(label, buttonLabel, adapter);
+		adapter.setReceiver(field);
+		return field;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private PackageSelectionDialogField(String label, String buttonLabel, IStringButtonAdapter adapter) {
-    super(adapter);
-    setLabelText(label);
-    setButtonLabel(buttonLabel);
-    setDialogFieldListener(this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private PackageSelectionDialogField(String label, String buttonLabel, IStringButtonAdapter adapter) {
+		super(adapter);
+		setLabelText(label);
+		setButtonLabel(buttonLabel);
+		setDialogFieldListener(this);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Update listener
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void setUpdateListener(IDialogFieldListener updateListener) {
-    m_updateListener = updateListener;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Update listener
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void setUpdateListener(IDialogFieldListener updateListener) {
+		m_updateListener = updateListener;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void setCompilationUnit(ICompilationUnit unit) {
-    IPackageFragment pkg = (IPackageFragment) unit.getParent();
-    setPackage(pkg);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void setCompilationUnit(ICompilationUnit unit) {
+		IPackageFragment pkg = (IPackageFragment) unit.getParent();
+		setPackage(pkg);
+	}
 
-  public IPackageFragmentRoot getRoot() {
-    return m_root;
-  }
+	public IPackageFragmentRoot getRoot() {
+		return m_root;
+	}
 
-  public void setRoot(IPackageFragmentRoot root) {
-    m_root = root;
-    updatePackage();
-  }
+	public void setRoot(IPackageFragmentRoot root) {
+		m_root = root;
+		updatePackage();
+	}
 
-  public IPackageFragment getPackage() {
-    return m_package;
-  }
+	public IPackageFragment getPackage() {
+		return m_package;
+	}
 
-  public void setPackage(IPackageFragment pkg) {
-    m_package = pkg;
-    if (m_package != null) {
-      String newText = getPackageString(m_package);
-      if (!getText().equals(newText)) {
-        setText(newText);
-      }
-    }
-    //
-    if (m_updateListener != null) {
-      m_updateListener.dialogFieldChanged(this);
-    }
-  }
+	public void setPackage(IPackageFragment pkg) {
+		m_package = pkg;
+		if (m_package != null) {
+			String newText = getPackageString(m_package);
+			if (!getText().equals(newText)) {
+				setText(newText);
+			}
+		}
+		//
+		if (m_updateListener != null) {
+			m_updateListener.dialogFieldChanged(this);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IDialogFieldListener
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void dialogFieldChanged(DialogField field) {
-    updatePackage();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IDialogFieldListener
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void dialogFieldChanged(DialogField field) {
+		updatePackage();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Update package after any change (for example when user edits text or when root was changed).
-   */
-  private void updatePackage() {
-    IPackageFragment pkg = getPackageFromString(getText());
-    setPackage(pkg);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Update package after any change (for example when user edits text or when root was changed).
+	 */
+	private void updatePackage() {
+		IPackageFragment pkg = getPackageFromString(getText());
+		setPackage(pkg);
+	}
 
-  /**
-   * Return strings presentation of package.
-   */
-  private static String getPackageString(IPackageFragment pkg) {
-    return pkg == null ? "" : pkg.getElementName();
-  }
+	/**
+	 * Return strings presentation of package.
+	 */
+	private static String getPackageString(IPackageFragment pkg) {
+		return pkg == null ? "" : pkg.getElementName();
+	}
 
-  /**
-   * Tries to build a package fragment root out of a string and sets the string into this package
-   * fragment root.
-   */
-  private IPackageFragment getPackageFromString(String packageString) {
-    if (m_root == null) {
-      return null;
-    }
-    // try to get existing package in current root
-    IPackageFragment packageFragment = m_root.getPackageFragment(packageString);
-    if (packageFragment.exists()) {
-      return packageFragment;
-    }
-    //
-    return null;
-  }
+	/**
+	 * Tries to build a package fragment root out of a string and sets the string into this package
+	 * fragment root.
+	 */
+	private IPackageFragment getPackageFromString(String packageString) {
+		if (m_root == null) {
+			return null;
+		}
+		// try to get existing package in current root
+		IPackageFragment packageFragment = m_root.getPackageFragment(packageString);
+		if (packageFragment.exists()) {
+			return packageFragment;
+		}
+		//
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Button adapter
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static class ButtonAdapter implements IStringButtonAdapter {
-    private PackageSelectionDialogField m_receiver;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Button adapter
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static class ButtonAdapter implements IStringButtonAdapter {
+		private PackageSelectionDialogField m_receiver;
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Access
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public void setReceiver(PackageSelectionDialogField receiver) {
-      m_receiver = receiver;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Access
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public void setReceiver(PackageSelectionDialogField receiver) {
+			m_receiver = receiver;
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // IStringButtonAdapter
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public void changeControlPressed(DialogField field) {
-      ElementListSelectionDialog dialog =
-          new ElementListSelectionDialog(Display.getCurrent().getActiveShell(),
-              new JavaElementLabelProvider());
-      // configure dialog
-      dialog.setIgnoreCase(false);
-      dialog.setTitle(Messages.PackageSelectionDialogField_dialogTitle);
-      dialog.setMessage(Messages.PackageSelectionDialogField_dialogMessage);
-      dialog.setElements(getPackagesList().toArray());
-      // select package
-      if (dialog.open() == Window.OK) {
-        IPackageFragment selectedPackage = (IPackageFragment) dialog.getFirstResult();
-        if (selectedPackage != null) {
-          m_receiver.setPackage(selectedPackage);
-        }
-      }
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// IStringButtonAdapter
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public void changeControlPressed(DialogField field) {
+			ElementListSelectionDialog dialog =
+					new ElementListSelectionDialog(Display.getCurrent().getActiveShell(),
+							new JavaElementLabelProvider());
+			// configure dialog
+			dialog.setIgnoreCase(false);
+			dialog.setTitle(Messages.PackageSelectionDialogField_dialogTitle);
+			dialog.setMessage(Messages.PackageSelectionDialogField_dialogMessage);
+			dialog.setElements(getPackagesList().toArray());
+			// select package
+			if (dialog.open() == Window.OK) {
+				IPackageFragment selectedPackage = (IPackageFragment) dialog.getFirstResult();
+				if (selectedPackage != null) {
+					m_receiver.setPackage(selectedPackage);
+				}
+			}
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Packages
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    /**
-     * Return list of valid packages.
-     */
-    private List<IPackageFragment> getPackagesList() {
-      try {
-        List<IPackageFragment> packages = Lists.newArrayList();
-        // add packages for selected root
-        if (m_receiver.m_root != null) {
-          addValidPackages(m_receiver.m_root, packages, Sets.<String>newTreeSet());
-        }
-        //
-        return packages;
-      } catch (JavaModelException e) {
-        DesignerPlugin.log(e);
-        return Collections.emptyList();
-      }
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Packages
+		//
+		////////////////////////////////////////////////////////////////////////////
+		/**
+		 * Return list of valid packages.
+		 */
+		private List<IPackageFragment> getPackagesList() {
+			try {
+				List<IPackageFragment> packages = Lists.newArrayList();
+				// add packages for selected root
+				if (m_receiver.m_root != null) {
+					addValidPackages(m_receiver.m_root, packages, Sets.<String>newTreeSet());
+				}
+				//
+				return packages;
+			} catch (JavaModelException e) {
+				DesignerPlugin.log(e);
+				return Collections.emptyList();
+			}
+		}
 
-    /**
-     * Add valid unique packages.
-     */
-    private static void addValidPackages(IPackageFragmentRoot root,
-        List<IPackageFragment> packages,
-        Set<String> addedPackageNames) throws JavaModelException {
-      // prepare package root children
-      IJavaElement[] children = null;
-      try {
-        children = root.getChildren();
-      } catch (JavaModelException e) {
-        return;
-      }
-      // iterate over children and add valid packages
-      for (int i = 0; i < children.length; i++) {
-        if (children[i] instanceof IPackageFragment) {
-          IPackageFragment packageFragment = (IPackageFragment) children[i];
-          String packageName = packageFragment.getElementName();
-          // check for unique package name
-          if (addedPackageNames != null && addedPackageNames.contains(packageName)) {
-            continue;
-          }
-          // add valid package
-          if (canAddPackage(packageFragment)) {
-            packages.add(packageFragment);
-            if (addedPackageNames != null) {
-              addedPackageNames.add(packageName);
-            }
-          }
-        }
-      }
-    }
+		/**
+		 * Add valid unique packages.
+		 */
+		private static void addValidPackages(IPackageFragmentRoot root,
+				List<IPackageFragment> packages,
+				Set<String> addedPackageNames) throws JavaModelException {
+			// prepare package root children
+			IJavaElement[] children = null;
+			try {
+				children = root.getChildren();
+			} catch (JavaModelException e) {
+				return;
+			}
+			// iterate over children and add valid packages
+			for (int i = 0; i < children.length; i++) {
+				if (children[i] instanceof IPackageFragment) {
+					IPackageFragment packageFragment = (IPackageFragment) children[i];
+					String packageName = packageFragment.getElementName();
+					// check for unique package name
+					if (addedPackageNames != null && addedPackageNames.contains(packageName)) {
+						continue;
+					}
+					// add valid package
+					if (canAddPackage(packageFragment)) {
+						packages.add(packageFragment);
+						if (addedPackageNames != null) {
+							addedPackageNames.add(packageName);
+						}
+					}
+				}
+			}
+		}
 
-    /**
-     * Check that passed package fragment root is valid.
-     */
-    public static boolean canAddPackageRoot(IPackageFragmentRoot root) throws JavaModelException {
-      if (!root.exists()) {
-        return false;
-      }
-      if (root.isArchive()) {
-        return false;
-      }
-      if (root.isExternal()) {
-        return false;
-      }
-      if (root.isReadOnly()) {
-        return false;
-      }
-      if (!root.isStructureKnown()) {
-        return false;
-      }
-      return true;
-    }
+		/**
+		 * Check that passed package fragment root is valid.
+		 */
+		public static boolean canAddPackageRoot(IPackageFragmentRoot root) throws JavaModelException {
+			if (!root.exists()) {
+				return false;
+			}
+			if (root.isArchive()) {
+				return false;
+			}
+			if (root.isExternal()) {
+				return false;
+			}
+			if (root.isReadOnly()) {
+				return false;
+			}
+			if (!root.isStructureKnown()) {
+				return false;
+			}
+			return true;
+		}
 
-    /**
-     * Check that passed package fragment is valid.
-     */
-    private static boolean canAddPackage(IPackageFragment pkg) throws JavaModelException {
-      if (!pkg.exists()) {
-        return false;
-      }
-      if (pkg.isReadOnly()) {
-        return false;
-      }
-      if (!pkg.isStructureKnown()) {
-        return false;
-      }
-      return true;
-    }
-  }
+		/**
+		 * Check that passed package fragment is valid.
+		 */
+		private static boolean canAddPackage(IPackageFragment pkg) throws JavaModelException {
+			if (!pkg.exists()) {
+				return false;
+			}
+			if (pkg.isReadOnly()) {
+				return false;
+			}
+			if (!pkg.isStructureKnown()) {
+				return false;
+			}
+			return true;
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/jdt/ui/PreferencesAdapter.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/jdt/ui/PreferencesAdapter.java
index 66468e2e3..178adb649 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/jdt/ui/PreferencesAdapter.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/jdt/ui/PreferencesAdapter.java
@@ -27,331 +27,331 @@
  * @coverage core.util.jdt.ui
  */
 public class PreferencesAdapter implements IPreferenceStore {
-  /**
-   * Property change listener. Listens for events of type
-   * {@link org.eclipse.core.runtime.Preferences.PropertyChangeEvent} and fires a
-   * {@link org.eclipse.jface.util.PropertyChangeEvent} on the adapter with arguments from the
-   * received event.
-   */
-  private class PropertyChangeListener implements Preferences.IPropertyChangeListener {
-    /*
-     * @see org.eclipse.core.runtime.Preferences.IPropertyChangeListener#propertyChange(org.eclipse.core.runtime.Preferences.PropertyChangeEvent)
-     */
-    @Override
-    public void propertyChange(Preferences.PropertyChangeEvent event) {
-      firePropertyChangeEvent(event.getProperty(), event.getOldValue(), event.getNewValue());
-    }
-  }
-
-  /** Listeners on the adapter */
-  private final ListenerList fListeners = new ListenerList(ListenerList.IDENTITY);
-  /** Listener on the adapted Preferences */
-  private final PropertyChangeListener fListener = new PropertyChangeListener();
-  /** Adapted Preferences */
-  private final Preferences fPreferences;
-  /** True iff no events should be forwarded */
-  private boolean fSilent;
-
-  /**
-   * Initialize with empty Preferences.
-   */
-  public PreferencesAdapter() {
-    this(new Preferences());
-  }
-
-  /**
-   * Initialize with the given Preferences.
-   *
-   * @param preferences
-   *          The preferences to wrap.
-   */
-  public PreferencesAdapter(Preferences preferences) {
-    fPreferences = preferences;
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public void addPropertyChangeListener(IPropertyChangeListener listener) {
-    if (fListeners.size() == 0) {
-      fPreferences.addPropertyChangeListener(fListener);
-    }
-    fListeners.add(listener);
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public void removePropertyChangeListener(IPropertyChangeListener listener) {
-    fListeners.remove(listener);
-    if (fListeners.size() == 0) {
-      fPreferences.removePropertyChangeListener(fListener);
-    }
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public boolean contains(String name) {
-    return fPreferences.contains(name);
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public void firePropertyChangeEvent(String name, Object oldValue, Object newValue) {
-    if (!fSilent) {
-      final PropertyChangeEvent event = new PropertyChangeEvent(this, name, oldValue, newValue);
-      Object[] listeners = fListeners.getListeners();
-      for (int i = 0; i < listeners.length; i++) {
-        final IPropertyChangeListener listener = (IPropertyChangeListener) listeners[i];
-        Runnable runnable = new Runnable() {
-          @Override
-          public void run() {
-            listener.propertyChange(event);
-          }
-        };
-        if (Display.getCurrent() != null) {
-          runnable.run();
-        } else {
-          // Post runnable into UI thread
-          Display display = DesignerPlugin.getStandardDisplay();
-          display.asyncExec(runnable);
-        }
-      }
-    }
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public boolean getBoolean(String name) {
-    return fPreferences.getBoolean(name);
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public boolean getDefaultBoolean(String name) {
-    return fPreferences.getDefaultBoolean(name);
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public double getDefaultDouble(String name) {
-    return fPreferences.getDefaultDouble(name);
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public float getDefaultFloat(String name) {
-    return fPreferences.getDefaultFloat(name);
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public int getDefaultInt(String name) {
-    return fPreferences.getDefaultInt(name);
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public long getDefaultLong(String name) {
-    return fPreferences.getDefaultLong(name);
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public String getDefaultString(String name) {
-    return fPreferences.getDefaultString(name);
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public double getDouble(String name) {
-    return fPreferences.getDouble(name);
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public float getFloat(String name) {
-    return fPreferences.getFloat(name);
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public int getInt(String name) {
-    return fPreferences.getInt(name);
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public long getLong(String name) {
-    return fPreferences.getLong(name);
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public String getString(String name) {
-    return fPreferences.getString(name);
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public boolean isDefault(String name) {
-    return fPreferences.isDefault(name);
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public boolean needsSaving() {
-    return fPreferences.needsSaving();
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public void putValue(String name, String value) {
-    try {
-      fSilent = true;
-      fPreferences.setValue(name, value);
-    } finally {
-      fSilent = false;
-    }
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public void setDefault(String name, double value) {
-    fPreferences.setDefault(name, value);
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public void setDefault(String name, float value) {
-    fPreferences.setDefault(name, value);
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public void setDefault(String name, int value) {
-    fPreferences.setDefault(name, value);
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public void setDefault(String name, long value) {
-    fPreferences.setDefault(name, value);
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public void setDefault(String name, String defaultObject) {
-    fPreferences.setDefault(name, defaultObject);
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public void setDefault(String name, boolean value) {
-    fPreferences.setDefault(name, value);
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public void setToDefault(String name) {
-    fPreferences.setToDefault(name);
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public void setValue(String name, double value) {
-    fPreferences.setValue(name, value);
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public void setValue(String name, float value) {
-    fPreferences.setValue(name, value);
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public void setValue(String name, int value) {
-    fPreferences.setValue(name, value);
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public void setValue(String name, long value) {
-    fPreferences.setValue(name, value);
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public void setValue(String name, String value) {
-    fPreferences.setValue(name, value);
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public void setValue(String name, boolean value) {
-    fPreferences.setValue(name, value);
-  }
+	/**
+	 * Property change listener. Listens for events of type
+	 * {@link org.eclipse.core.runtime.Preferences.PropertyChangeEvent} and fires a
+	 * {@link org.eclipse.jface.util.PropertyChangeEvent} on the adapter with arguments from the
+	 * received event.
+	 */
+	private class PropertyChangeListener implements Preferences.IPropertyChangeListener {
+		/*
+		 * @see org.eclipse.core.runtime.Preferences.IPropertyChangeListener#propertyChange(org.eclipse.core.runtime.Preferences.PropertyChangeEvent)
+		 */
+		@Override
+		public void propertyChange(Preferences.PropertyChangeEvent event) {
+			firePropertyChangeEvent(event.getProperty(), event.getOldValue(), event.getNewValue());
+		}
+	}
+
+	/** Listeners on the adapter */
+	private final ListenerList fListeners = new ListenerList(ListenerList.IDENTITY);
+	/** Listener on the adapted Preferences */
+	private final PropertyChangeListener fListener = new PropertyChangeListener();
+	/** Adapted Preferences */
+	private final Preferences fPreferences;
+	/** True iff no events should be forwarded */
+	private boolean fSilent;
+
+	/**
+	 * Initialize with empty Preferences.
+	 */
+	public PreferencesAdapter() {
+		this(new Preferences());
+	}
+
+	/**
+	 * Initialize with the given Preferences.
+	 *
+	 * @param preferences
+	 *          The preferences to wrap.
+	 */
+	public PreferencesAdapter(Preferences preferences) {
+		fPreferences = preferences;
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public void addPropertyChangeListener(IPropertyChangeListener listener) {
+		if (fListeners.size() == 0) {
+			fPreferences.addPropertyChangeListener(fListener);
+		}
+		fListeners.add(listener);
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public void removePropertyChangeListener(IPropertyChangeListener listener) {
+		fListeners.remove(listener);
+		if (fListeners.size() == 0) {
+			fPreferences.removePropertyChangeListener(fListener);
+		}
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public boolean contains(String name) {
+		return fPreferences.contains(name);
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public void firePropertyChangeEvent(String name, Object oldValue, Object newValue) {
+		if (!fSilent) {
+			final PropertyChangeEvent event = new PropertyChangeEvent(this, name, oldValue, newValue);
+			Object[] listeners = fListeners.getListeners();
+			for (int i = 0; i < listeners.length; i++) {
+				final IPropertyChangeListener listener = (IPropertyChangeListener) listeners[i];
+				Runnable runnable = new Runnable() {
+					@Override
+					public void run() {
+						listener.propertyChange(event);
+					}
+				};
+				if (Display.getCurrent() != null) {
+					runnable.run();
+				} else {
+					// Post runnable into UI thread
+					Display display = DesignerPlugin.getStandardDisplay();
+					display.asyncExec(runnable);
+				}
+			}
+		}
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public boolean getBoolean(String name) {
+		return fPreferences.getBoolean(name);
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public boolean getDefaultBoolean(String name) {
+		return fPreferences.getDefaultBoolean(name);
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public double getDefaultDouble(String name) {
+		return fPreferences.getDefaultDouble(name);
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public float getDefaultFloat(String name) {
+		return fPreferences.getDefaultFloat(name);
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public int getDefaultInt(String name) {
+		return fPreferences.getDefaultInt(name);
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public long getDefaultLong(String name) {
+		return fPreferences.getDefaultLong(name);
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public String getDefaultString(String name) {
+		return fPreferences.getDefaultString(name);
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public double getDouble(String name) {
+		return fPreferences.getDouble(name);
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public float getFloat(String name) {
+		return fPreferences.getFloat(name);
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public int getInt(String name) {
+		return fPreferences.getInt(name);
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public long getLong(String name) {
+		return fPreferences.getLong(name);
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public String getString(String name) {
+		return fPreferences.getString(name);
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public boolean isDefault(String name) {
+		return fPreferences.isDefault(name);
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public boolean needsSaving() {
+		return fPreferences.needsSaving();
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public void putValue(String name, String value) {
+		try {
+			fSilent = true;
+			fPreferences.setValue(name, value);
+		} finally {
+			fSilent = false;
+		}
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public void setDefault(String name, double value) {
+		fPreferences.setDefault(name, value);
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public void setDefault(String name, float value) {
+		fPreferences.setDefault(name, value);
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public void setDefault(String name, int value) {
+		fPreferences.setDefault(name, value);
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public void setDefault(String name, long value) {
+		fPreferences.setDefault(name, value);
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public void setDefault(String name, String defaultObject) {
+		fPreferences.setDefault(name, defaultObject);
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public void setDefault(String name, boolean value) {
+		fPreferences.setDefault(name, value);
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public void setToDefault(String name) {
+		fPreferences.setToDefault(name);
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public void setValue(String name, double value) {
+		fPreferences.setValue(name, value);
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public void setValue(String name, float value) {
+		fPreferences.setValue(name, value);
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public void setValue(String name, int value) {
+		fPreferences.setValue(name, value);
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public void setValue(String name, long value) {
+		fPreferences.setValue(name, value);
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public void setValue(String name, String value) {
+		fPreferences.setValue(name, value);
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public void setValue(String name, boolean value) {
+		fPreferences.setValue(name, value);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/jdt/ui/ProjectSelectionDialogField.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/jdt/ui/ProjectSelectionDialogField.java
index f4efd12d2..61709a750 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/jdt/ui/ProjectSelectionDialogField.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/jdt/ui/ProjectSelectionDialogField.java
@@ -38,167 +38,167 @@
  * @coverage core.util.jdt.ui
  */
 public final class ProjectSelectionDialogField extends StringButtonDialogField
-    implements
-      IDialogFieldListener {
-  private IJavaProject m_project;
-  private IDialogFieldListener m_updateListener;
+implements
+IDialogFieldListener {
+	private IJavaProject m_project;
+	private IDialogFieldListener m_updateListener;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Creation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return {@link ProjectSelectionDialogField}.
-   */
-  public static ProjectSelectionDialogField create() {
-    ButtonAdapter adapter = new ButtonAdapter();
-    ProjectSelectionDialogField field = new ProjectSelectionDialogField(adapter);
-    adapter.setReceiver(field);
-    return field;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Creation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return {@link ProjectSelectionDialogField}.
+	 */
+	public static ProjectSelectionDialogField create() {
+		ButtonAdapter adapter = new ButtonAdapter();
+		ProjectSelectionDialogField field = new ProjectSelectionDialogField(adapter);
+		adapter.setReceiver(field);
+		return field;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private ProjectSelectionDialogField(IStringButtonAdapter adapter) {
-    super(adapter);
-    setDialogFieldListener(this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private ProjectSelectionDialogField(IStringButtonAdapter adapter) {
+		super(adapter);
+		setDialogFieldListener(this);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the selected {@link IJavaProject}.
-   */
-  public IJavaProject getProject() {
-    return m_project;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the selected {@link IJavaProject}.
+	 */
+	public IJavaProject getProject() {
+		return m_project;
+	}
 
-  /**
-   * Sets the selected {@link IJavaProject}.
-   */
-  public void setProject(IJavaProject project) {
-    m_project = project;
-    if (m_project != null) {
-      String newText = getProjectString(m_project);
-      if (!getText().equals(newText)) {
-        setText(newText);
-      }
-    }
-    // notify listener
-    if (m_updateListener != null) {
-      m_updateListener.dialogFieldChanged(this);
-    }
-  }
+	/**
+	 * Sets the selected {@link IJavaProject}.
+	 */
+	public void setProject(IJavaProject project) {
+		m_project = project;
+		if (m_project != null) {
+			String newText = getProjectString(m_project);
+			if (!getText().equals(newText)) {
+				setText(newText);
+			}
+		}
+		// notify listener
+		if (m_updateListener != null) {
+			m_updateListener.dialogFieldChanged(this);
+		}
+	}
 
-  /**
-   * Sets the {@link IDialogFieldListener} to listen for {@link IJavaProject} updates in this field.
-   */
-  public void setUpdateListener(IDialogFieldListener updateListener) {
-    m_updateListener = updateListener;
-    setDialogFieldListener(this);
-  }
+	/**
+	 * Sets the {@link IDialogFieldListener} to listen for {@link IJavaProject} updates in this field.
+	 */
+	public void setUpdateListener(IDialogFieldListener updateListener) {
+		m_updateListener = updateListener;
+		setDialogFieldListener(this);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IDialogFieldListener
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void dialogFieldChanged(DialogField field) {
-    setProject(getProjectFromString(getText()));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IDialogFieldListener
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void dialogFieldChanged(DialogField field) {
+		setProject(getProjectFromString(getText()));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return string presentation of {@link IJavaProject}..
-   */
-  private static String getProjectString(IJavaProject project) {
-    return project == null ? "" : project.getPath().makeRelative().toString();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return string presentation of {@link IJavaProject}..
+	 */
+	private static String getProjectString(IJavaProject project) {
+		return project == null ? "" : project.getPath().makeRelative().toString();
+	}
 
-  /**
-   * @return the {@link IJavaProject} for a string.
-   */
-  private static IJavaProject getProjectFromString(String projectString) {
-    if (projectString.length() == 0) {
-      return null;
-    }
-    // check project
-    IWorkspaceRoot workspaceRoot = ResourcesPlugin.getWorkspace().getRoot();
-    IProject project = workspaceRoot.getProject(projectString);
-    IJavaProject javaProject = JavaCore.create(project);
-    return javaProject.exists() ? javaProject : null;
-  }
+	/**
+	 * @return the {@link IJavaProject} for a string.
+	 */
+	private static IJavaProject getProjectFromString(String projectString) {
+		if (projectString.length() == 0) {
+			return null;
+		}
+		// check project
+		IWorkspaceRoot workspaceRoot = ResourcesPlugin.getWorkspace().getRoot();
+		IProject project = workspaceRoot.getProject(projectString);
+		IJavaProject javaProject = JavaCore.create(project);
+		return javaProject.exists() ? javaProject : null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Button adapter
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static class ButtonAdapter implements IStringButtonAdapter {
-    private ProjectSelectionDialogField m_receiver;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Button adapter
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static class ButtonAdapter implements IStringButtonAdapter {
+		private ProjectSelectionDialogField m_receiver;
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Access
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public void setReceiver(ProjectSelectionDialogField receiver) {
-      m_receiver = receiver;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Access
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public void setReceiver(ProjectSelectionDialogField receiver) {
+			m_receiver = receiver;
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // IStringButtonAdapter
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public void changeControlPressed(DialogField field) {
-      IJavaProject project = selectProject(m_receiver.m_project);
-      if (project != null) {
-        m_receiver.setProject(project);
-      }
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// IStringButtonAdapter
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public void changeControlPressed(DialogField field) {
+			IJavaProject project = selectProject(m_receiver.m_project);
+			if (project != null) {
+				m_receiver.setProject(project);
+			}
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Selection
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    private IJavaProject selectProject(IJavaProject initialSelection) {
-      Shell shell = Display.getCurrent().getActiveShell();
-      ILabelProvider labelProvider =
-          new JavaElementLabelProvider(JavaElementLabelProvider.SHOW_DEFAULT);
-      ITreeContentProvider contentProvider = new StandardJavaElementContentProvider();
-      // prepare dialog
-      ListDialog dialog = new ListDialog(shell);
-      dialog.setContentProvider(contentProvider);
-      dialog.setLabelProvider(labelProvider);
-      dialog.setTitle(Messages.ProjectSelectionDialogField_dialogTitle);
-      dialog.setMessage(Messages.ProjectSelectionDialogField_dialogMessage);
-      // show projects
-      dialog.setInput(JavaCore.create(ResourcesPlugin.getWorkspace().getRoot()));
-      dialog.setInitialSelections(new Object[]{initialSelection});
-      // select project
-      if (dialog.open() == Window.OK) {
-        Object[] objects = dialog.getResult();
-        if (objects != null && objects.length == 1) {
-          return (IJavaProject) objects[0];
-        }
-      }
-      // no project selected
-      return null;
-    }
-  }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Selection
+		//
+		////////////////////////////////////////////////////////////////////////////
+		private IJavaProject selectProject(IJavaProject initialSelection) {
+			Shell shell = Display.getCurrent().getActiveShell();
+			ILabelProvider labelProvider =
+					new JavaElementLabelProvider(JavaElementLabelProvider.SHOW_DEFAULT);
+			ITreeContentProvider contentProvider = new StandardJavaElementContentProvider();
+			// prepare dialog
+			ListDialog dialog = new ListDialog(shell);
+			dialog.setContentProvider(contentProvider);
+			dialog.setLabelProvider(labelProvider);
+			dialog.setTitle(Messages.ProjectSelectionDialogField_dialogTitle);
+			dialog.setMessage(Messages.ProjectSelectionDialogField_dialogMessage);
+			// show projects
+			dialog.setInput(JavaCore.create(ResourcesPlugin.getWorkspace().getRoot()));
+			dialog.setInitialSelections(new Object[]{initialSelection});
+			// select project
+			if (dialog.open() == Window.OK) {
+				Object[] objects = dialog.getResult();
+				if (objects != null && objects.length == 1) {
+					return (IJavaProject) objects[0];
+				}
+			}
+			// no project selected
+			return null;
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/pde/ReflectivePDE.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/pde/ReflectivePDE.java
index c1dd68e47..eacdc1d47 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/pde/ReflectivePDE.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/pde/ReflectivePDE.java
@@ -28,70 +28,70 @@
  * @coverage core.util.pde
  */
 public class ReflectivePDE {
-  /**
-   * Adds plugin libraries into the list.
-   */
-  public static void addPluginLibraries(String pluginId, List<IClasspathEntry> entries)
-      throws Exception {
-    Object model = findModel(pluginId);
-    if (model != null) {
-      invokeStatic(
-          "org.eclipse.pde.internal.core.ClasspathUtilCore",
-          "addLibraries(org.eclipse.pde.core.plugin.IPluginModelBase,java.util.ArrayList)",
-          model,
-          entries);
-    }
-  }
+	/**
+	 * Adds plugin libraries into the list.
+	 */
+	public static void addPluginLibraries(String pluginId, List<IClasspathEntry> entries)
+			throws Exception {
+		Object model = findModel(pluginId);
+		if (model != null) {
+			invokeStatic(
+					"org.eclipse.pde.internal.core.ClasspathUtilCore",
+					"addLibraries(org.eclipse.pde.core.plugin.IPluginModelBase,java.util.ArrayList)",
+					model,
+					entries);
+		}
+	}
 
-  /**
-   * Calls {@link org.eclipse.pde.core.plugin.PluginRegistry#findModel(String)}.
-   */
-  public static Object findModel(String pluginId) throws Exception {
-    try {
-      return invokeStatic(
-          "org.eclipse.pde.core.plugin.PluginRegistry",
-          "findModel(java.lang.String)",
-          pluginId);
-    } catch (Throwable e) {
-      return null;
-    }
-  }
+	/**
+	 * Calls {@link org.eclipse.pde.core.plugin.PluginRegistry#findModel(String)}.
+	 */
+	public static Object findModel(String pluginId) throws Exception {
+		try {
+			return invokeStatic(
+					"org.eclipse.pde.core.plugin.PluginRegistry",
+					"findModel(java.lang.String)",
+					pluginId);
+		} catch (Throwable e) {
+			return null;
+		}
+	}
 
-  /**
-   * Calls {@link org.eclipse.pde.core.plugin.PluginRegistry#findModel(IProject)}.
-   */
-  public static Object findModel(IProject project) {
-    try {
-      return invokeStatic(
-          "org.eclipse.pde.core.plugin.PluginRegistry",
-          "findModel(org.eclipse.core.resources.IProject)",
-          project);
-    } catch (Throwable e) {
-      return null;
-    }
-  }
+	/**
+	 * Calls {@link org.eclipse.pde.core.plugin.PluginRegistry#findModel(IProject)}.
+	 */
+	public static Object findModel(IProject project) {
+		try {
+			return invokeStatic(
+					"org.eclipse.pde.core.plugin.PluginRegistry",
+					"findModel(org.eclipse.core.resources.IProject)",
+					project);
+		} catch (Throwable e) {
+			return null;
+		}
+	}
 
-  /**
-   * Calls {@link org.eclipse.pde.core.plugin.IPluginModelBase#getBundleDescription()}.
-   */
-  public static BundleDescription getPluginModelBundleDescription(Object pluginModel)
-      throws Exception {
-    return (BundleDescription) ReflectionUtils.invokeMethod(pluginModel, "getBundleDescription()");
-  }
+	/**
+	 * Calls {@link org.eclipse.pde.core.plugin.IPluginModelBase#getBundleDescription()}.
+	 */
+	public static BundleDescription getPluginModelBundleDescription(Object pluginModel)
+			throws Exception {
+		return (BundleDescription) ReflectionUtils.invokeMethod(pluginModel, "getBundleDescription()");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Internal
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static Object invokeStatic(String className, String signature, Object... args)
-      throws Exception {
-    Class<?> clazz = loadClass(className);
-    return ReflectionUtils.invokeMethod(clazz, signature, args);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Internal
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static Object invokeStatic(String className, String signature, Object... args)
+			throws Exception {
+		Class<?> clazz = loadClass(className);
+		return ReflectionUtils.invokeMethod(clazz, signature, args);
+	}
 
-  private static Class<?> loadClass(String name) throws Exception {
-    Bundle bundle = Platform.getBundle("org.eclipse.pde.core");
-    return bundle.loadClass(name);
-  }
+	private static Class<?> loadClass(String name) throws Exception {
+		Bundle bundle = Platform.getBundle("org.eclipse.pde.core");
+		return bundle.loadClass(name);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/refactoring/CompilationUnitChange.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/refactoring/CompilationUnitChange.java
index c5021539a..a3d2f9630 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/refactoring/CompilationUnitChange.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/refactoring/CompilationUnitChange.java
@@ -31,95 +31,95 @@
  * @coverage core.util.refactoring
  */
 public class CompilationUnitChange extends TextFileChange {
-  private final ICompilationUnit fCUnit;
+	private final ICompilationUnit fCUnit;
 
-  /**
-   * Creates a new <code>CompilationUnitChange</code>.
-   *
-   * @param name
-   *          the change's name mainly used to render the change in the UI
-   * @param cunit
-   *          the compilation unit this text change works on
-   */
-  public CompilationUnitChange(String name, ICompilationUnit cunit) {
-    super(name, getFile(cunit));
-    Assert.isNotNull(cunit);
-    fCUnit = cunit;
-    setTextType("java"); //$NON-NLS-1$
-  }
+	/**
+	 * Creates a new <code>CompilationUnitChange</code>.
+	 *
+	 * @param name
+	 *          the change's name mainly used to render the change in the UI
+	 * @param cunit
+	 *          the compilation unit this text change works on
+	 */
+	public CompilationUnitChange(String name, ICompilationUnit cunit) {
+		super(name, getFile(cunit));
+		Assert.isNotNull(cunit);
+		fCUnit = cunit;
+		setTextType("java"); //$NON-NLS-1$
+	}
 
-  private static IFile getFile(ICompilationUnit cunit) {
-    return (IFile) cunit.getResource();
-  }
+	private static IFile getFile(ICompilationUnit cunit) {
+		return (IFile) cunit.getResource();
+	}
 
-  /* non java-doc
-   * Method declared in IChange.
-   */
-  @Override
-  public Object getModifiedElement() {
-    return fCUnit;
-  }
+	/* non java-doc
+	 * Method declared in IChange.
+	 */
+	@Override
+	public Object getModifiedElement() {
+		return fCUnit;
+	}
 
-  /**
-   * Returns the compilation unit this change works on.
-   *
-   * @return the compilation unit this change works on
-   */
-  public ICompilationUnit getCompilationUnit() {
-    return fCUnit;
-  }
+	/**
+	 * Returns the compilation unit this change works on.
+	 *
+	 * @return the compilation unit this change works on
+	 */
+	public ICompilationUnit getCompilationUnit() {
+		return fCUnit;
+	}
 
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  protected IDocument acquireDocument(IProgressMonitor pm) throws CoreException {
-    pm.beginTask("", 2); //$NON-NLS-1$
-    fCUnit.becomeWorkingCopy(null, new SubProgressMonitor(pm, 1));
-    return super.acquireDocument(new SubProgressMonitor(pm, 1));
-  }
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	protected IDocument acquireDocument(IProgressMonitor pm) throws CoreException {
+		pm.beginTask("", 2); //$NON-NLS-1$
+		fCUnit.becomeWorkingCopy(null, new SubProgressMonitor(pm, 1));
+		return super.acquireDocument(new SubProgressMonitor(pm, 1));
+	}
 
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  protected void releaseDocument(IDocument document, IProgressMonitor pm) throws CoreException {
-    boolean isModified = isDocumentModified();
-    super.releaseDocument(document, pm);
-    try {
-      fCUnit.discardWorkingCopy();
-    } finally {
-      if (isModified && !isDocumentAcquired()) {
-        if (fCUnit.isWorkingCopy()) {
-          fCUnit.reconcile(ICompilationUnit.NO_AST, false, null, null);
-        } else {
-          fCUnit.makeConsistent(pm);
-        }
-      }
-    }
-  }
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	protected void releaseDocument(IDocument document, IProgressMonitor pm) throws CoreException {
+		boolean isModified = isDocumentModified();
+		super.releaseDocument(document, pm);
+		try {
+			fCUnit.discardWorkingCopy();
+		} finally {
+			if (isModified && !isDocumentAcquired()) {
+				if (fCUnit.isWorkingCopy()) {
+					fCUnit.reconcile(ICompilationUnit.NO_AST, false, null, null);
+				} else {
+					fCUnit.makeConsistent(pm);
+				}
+			}
+		}
+	}
 
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  protected Change createUndoChange(UndoEdit edit, ContentStamp stampToRestore) {
-    try {
-      return new UndoCompilationUnitChange(getName(), fCUnit, edit, stampToRestore, getSaveMode());
-    } catch (CoreException e) {
-      DesignerPlugin.log(e);
-      return null;
-    }
-  }
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	protected Change createUndoChange(UndoEdit edit, ContentStamp stampToRestore) {
+		try {
+			return new UndoCompilationUnitChange(getName(), fCUnit, edit, stampToRestore, getSaveMode());
+		} catch (CoreException e) {
+			DesignerPlugin.log(e);
+			return null;
+		}
+	}
 
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public <T> T getAdapter(Class<T> adapter) {
-    if (ICompilationUnit.class.equals(adapter)) {
-      return adapter.cast(fCUnit);
-    }
-    return super.getAdapter(adapter);
-  }
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public <T> T getAdapter(Class<T> adapter) {
+		if (ICompilationUnit.class.equals(adapter)) {
+			return adapter.cast(fCUnit);
+		}
+		return super.getAdapter(adapter);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/refactoring/DeleteFileChange.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/refactoring/DeleteFileChange.java
index 351ea1ced..954dc7d92 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/refactoring/DeleteFileChange.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/refactoring/DeleteFileChange.java
@@ -30,50 +30,50 @@
  * @coverage core.util.refactoring
  */
 public class DeleteFileChange extends Change {
-  private final IFile m_file;
+	private final IFile m_file;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DeleteFileChange(IFile file) {
-    m_file = file;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DeleteFileChange(IFile file) {
+		m_file = file;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Change
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Object getModifiedElement() {
-    return m_file;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Change
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Object getModifiedElement() {
+		return m_file;
+	}
 
-  @Override
-  public String getName() {
-    return MessageFormat.format(Messages.DeleteFileChange_name, m_file.getLocation().lastSegment());
-  }
+	@Override
+	public String getName() {
+		return MessageFormat.format(Messages.DeleteFileChange_name, m_file.getLocation().lastSegment());
+	}
 
-  @Override
-  public void initializeValidationData(IProgressMonitor pm) {
-  }
+	@Override
+	public void initializeValidationData(IProgressMonitor pm) {
+	}
 
-  @Override
-  public RefactoringStatus isValid(IProgressMonitor pm) throws CoreException {
-    RefactoringStatus status = new RefactoringStatus();
-    if (!m_file.exists()) {
-      status.addError(MessageFormat.format(
-          Messages.DeleteFileChange_errNoFile,
-          m_file.getLocation().lastSegment()));
-    }
-    return status;
-  }
+	@Override
+	public RefactoringStatus isValid(IProgressMonitor pm) throws CoreException {
+		RefactoringStatus status = new RefactoringStatus();
+		if (!m_file.exists()) {
+			status.addError(MessageFormat.format(
+					Messages.DeleteFileChange_errNoFile,
+					m_file.getLocation().lastSegment()));
+		}
+		return status;
+	}
 
-  @Override
-  public Change perform(IProgressMonitor pm) throws CoreException {
-    m_file.delete(false, pm);
-    return null;
-  }
+	@Override
+	public Change perform(IProgressMonitor pm) throws CoreException {
+		m_file.delete(false, pm);
+		return null;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/refactoring/RefactoringUtils.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/refactoring/RefactoringUtils.java
index 5f00e2021..98c0f4652 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/refactoring/RefactoringUtils.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/refactoring/RefactoringUtils.java
@@ -51,260 +51,260 @@
  * @coverage core.util.refactoring
  */
 public class RefactoringUtils {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Generic refactoring utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return {@link Change} for renaming given {@link IType}.
-   */
-  public static Change createRenameTypeChange(IType type, String newName, IProgressMonitor pm)
-      throws CoreException {
-    int flags =
-        org.eclipse.jdt.core.refactoring.descriptors.JavaRefactoringDescriptor.JAR_MIGRATION
-            | org.eclipse.jdt.core.refactoring.descriptors.JavaRefactoringDescriptor.JAR_REFACTORING
-            | RefactoringDescriptor.STRUCTURAL_CHANGE;
-    if (!Flags.isPrivate(type.getFlags())) {
-      flags |= RefactoringDescriptor.MULTI_CHANGE;
-    }
-    //
-    org.eclipse.jdt.core.refactoring.descriptors.RenameJavaElementDescriptor descriptor =
-        new org.eclipse.jdt.core.refactoring.descriptors.RenameJavaElementDescriptor(org.eclipse.jdt.core.refactoring.IJavaRefactorings.RENAME_TYPE);
-    descriptor.setProject(type.getJavaProject().getElementName());
-    descriptor.setFlags(flags);
-    descriptor.setJavaElement(type);
-    descriptor.setNewName(newName);
-    descriptor.setUpdateQualifiedNames(false);
-    descriptor.setUpdateTextualOccurrences(false);
-    descriptor.setUpdateReferences(true);
-    // prepare Refactoring
-    RefactoringStatus refactoringStatus = new RefactoringStatus();
-    Refactoring refactoring = descriptor.createRefactoring(refactoringStatus);
-    // prepare Change
-    CreateChangeOperation createChangeOperation =
-        new CreateChangeOperation(new CheckConditionsOperation(refactoring,
-            CheckConditionsOperation.ALL_CONDITIONS), RefactoringStatus.FATAL);
-    createChangeOperation.run(new SubProgressMonitor(pm, 6));
-    return createChangeOperation.getChange();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Generic refactoring utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return {@link Change} for renaming given {@link IType}.
+	 */
+	public static Change createRenameTypeChange(IType type, String newName, IProgressMonitor pm)
+			throws CoreException {
+		int flags =
+				org.eclipse.jdt.core.refactoring.descriptors.JavaRefactoringDescriptor.JAR_MIGRATION
+				| org.eclipse.jdt.core.refactoring.descriptors.JavaRefactoringDescriptor.JAR_REFACTORING
+				| RefactoringDescriptor.STRUCTURAL_CHANGE;
+		if (!Flags.isPrivate(type.getFlags())) {
+			flags |= RefactoringDescriptor.MULTI_CHANGE;
+		}
+		//
+		org.eclipse.jdt.core.refactoring.descriptors.RenameJavaElementDescriptor descriptor =
+				new org.eclipse.jdt.core.refactoring.descriptors.RenameJavaElementDescriptor(org.eclipse.jdt.core.refactoring.IJavaRefactorings.RENAME_TYPE);
+		descriptor.setProject(type.getJavaProject().getElementName());
+		descriptor.setFlags(flags);
+		descriptor.setJavaElement(type);
+		descriptor.setNewName(newName);
+		descriptor.setUpdateQualifiedNames(false);
+		descriptor.setUpdateTextualOccurrences(false);
+		descriptor.setUpdateReferences(true);
+		// prepare Refactoring
+		RefactoringStatus refactoringStatus = new RefactoringStatus();
+		Refactoring refactoring = descriptor.createRefactoring(refactoringStatus);
+		// prepare Change
+		CreateChangeOperation createChangeOperation =
+				new CreateChangeOperation(new CheckConditionsOperation(refactoring,
+						CheckConditionsOperation.ALL_CONDITIONS), RefactoringStatus.FATAL);
+		createChangeOperation.run(new SubProgressMonitor(pm, 6));
+		return createChangeOperation.getChange();
+	}
 
-  /**
-   * @return {@link Change} for removing given {@link IType}.
-   */
-  public static Change createDeleteTypeChange(IType type) throws JavaModelException {
-    IFile file = (IFile) type.getUnderlyingResource();
-    return new DeleteFileChange(file);
-  }
+	/**
+	 * @return {@link Change} for removing given {@link IType}.
+	 */
+	public static Change createDeleteTypeChange(IType type) throws JavaModelException {
+		IFile file = (IFile) type.getUnderlyingResource();
+		return new DeleteFileChange(file);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // TextChange utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Moves {@link TextFileChange} for same {@link IFile}'s from given <code>sourceChange</code> to
-   * <code>targetChange</code>.
-   */
-  public static void mergeTextChanges(Change targetChange, Change sourceChange) {
-    Map<IFile, TextFileChange> sourceFileChanges = getTextFileChanges(targetChange);
-    Map<IFile, TextFileChange> targetFileChanges = getTextFileChanges(sourceChange);
-    // iterate over source changes
-    for (Map.Entry<IFile, TextFileChange> entry : sourceFileChanges.entrySet()) {
-      IFile file = entry.getKey();
-      // check if there is change for same file in target change
-      TextFileChange targetFileChange = targetFileChanges.get(file);
-      if (targetFileChange != null) {
-        TextFileChange sourceFileChange = entry.getValue();
-        mergeTextChanges(targetFileChange, sourceFileChange);
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// TextChange utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Moves {@link TextFileChange} for same {@link IFile}'s from given <code>sourceChange</code> to
+	 * <code>targetChange</code>.
+	 */
+	public static void mergeTextChanges(Change targetChange, Change sourceChange) {
+		Map<IFile, TextFileChange> sourceFileChanges = getTextFileChanges(targetChange);
+		Map<IFile, TextFileChange> targetFileChanges = getTextFileChanges(sourceChange);
+		// iterate over source changes
+		for (Map.Entry<IFile, TextFileChange> entry : sourceFileChanges.entrySet()) {
+			IFile file = entry.getKey();
+			// check if there is change for same file in target change
+			TextFileChange targetFileChange = targetFileChanges.get(file);
+			if (targetFileChange != null) {
+				TextFileChange sourceFileChange = entry.getValue();
+				mergeTextChanges(targetFileChange, sourceFileChange);
+			}
+		}
+	}
 
-  /**
-   * Merges children of given composite {@link Change} with currently existing
-   * {@link TextFileChange}'s (from main refactoring).
-   */
-  public static void mergeTextChange(RefactoringParticipant participant, Change change) {
-    if (change instanceof CompositeChange) {
-      CompositeChange compositeChange = (CompositeChange) change;
-      for (Change changeChild : compositeChange.getChildren()) {
-        mergeTextChange(participant, changeChild);
-      }
-    } else if (change instanceof TextFileChange) {
-      TextFileChange textFileChange = (TextFileChange) change;
-      // if we have existing change for this file, merge text edits
-      TextChange existingChange = participant.getTextChange(textFileChange.getFile());
-      if (existingChange != null) {
-        mergeTextChanges(existingChange, textFileChange);
-      }
-    }
-  }
+	/**
+	 * Merges children of given composite {@link Change} with currently existing
+	 * {@link TextFileChange}'s (from main refactoring).
+	 */
+	public static void mergeTextChange(RefactoringParticipant participant, Change change) {
+		if (change instanceof CompositeChange) {
+			CompositeChange compositeChange = (CompositeChange) change;
+			for (Change changeChild : compositeChange.getChildren()) {
+				mergeTextChange(participant, changeChild);
+			}
+		} else if (change instanceof TextFileChange) {
+			TextFileChange textFileChange = (TextFileChange) change;
+			// if we have existing change for this file, merge text edits
+			TextChange existingChange = participant.getTextChange(textFileChange.getFile());
+			if (existingChange != null) {
+				mergeTextChanges(existingChange, textFileChange);
+			}
+		}
+	}
 
-  /**
-   * Moves <code>sourceTextChange</code> into <code>targetTextChange</code> {@link TextEdit}.
-   */
-  private static void mergeTextChanges(TextChange targetTextChange, TextChange sourceTextChange) {
-    // do merge TextEdit
-    {
-      TextEdit rootEdit = sourceTextChange.getEdit();
-      mergeTextEdit(targetTextChange, rootEdit);
-    }
-    // remove "source" change
-    {
-      Change parent = sourceTextChange.getParent();
-      if (parent instanceof CompositeChange) {
-        ((CompositeChange) parent).remove(sourceTextChange);
-      }
-    }
-  }
+	/**
+	 * Moves <code>sourceTextChange</code> into <code>targetTextChange</code> {@link TextEdit}.
+	 */
+	private static void mergeTextChanges(TextChange targetTextChange, TextChange sourceTextChange) {
+		// do merge TextEdit
+		{
+			TextEdit rootEdit = sourceTextChange.getEdit();
+			mergeTextEdit(targetTextChange, rootEdit);
+		}
+		// remove "source" change
+		{
+			Change parent = sourceTextChange.getParent();
+			if (parent instanceof CompositeChange) {
+				((CompositeChange) parent).remove(sourceTextChange);
+			}
+		}
+	}
 
-  /**
-   * Separate {@link TextEdit}'s are grouped using {@link MultiTextEdit}, but we can not just use
-   * {@link TextChange#addEdit(TextEdit)} because sometimes "multi" edit consists of changes in
-   * beginning and ending of file, so its range is full file, so "multi" edit will conflict with
-   * other edits, but individual edits - not.
-   */
-  private static void mergeTextEdit(TextChange targetTextChange, TextEdit textEdit) {
-    if (textEdit instanceof MultiTextEdit) {
-      MultiTextEdit multiTextEdit = (MultiTextEdit) textEdit;
-      for (TextEdit child : multiTextEdit.getChildren()) {
-        mergeTextEdit(targetTextChange, child);
-      }
-    } else {
-      ensureMultiTextEdit(targetTextChange);
-      ReflectionUtils.invokeMethodEx(
-          textEdit,
-          "internalSetParent(org.eclipse.text.edits.TextEdit)",
-          (Object) null);
-      targetTextChange.addEdit(textEdit);
-    }
-  }
+	/**
+	 * Separate {@link TextEdit}'s are grouped using {@link MultiTextEdit}, but we can not just use
+	 * {@link TextChange#addEdit(TextEdit)} because sometimes "multi" edit consists of changes in
+	 * beginning and ending of file, so its range is full file, so "multi" edit will conflict with
+	 * other edits, but individual edits - not.
+	 */
+	private static void mergeTextEdit(TextChange targetTextChange, TextEdit textEdit) {
+		if (textEdit instanceof MultiTextEdit) {
+			MultiTextEdit multiTextEdit = (MultiTextEdit) textEdit;
+			for (TextEdit child : multiTextEdit.getChildren()) {
+				mergeTextEdit(targetTextChange, child);
+			}
+		} else {
+			ensureMultiTextEdit(targetTextChange);
+			ReflectionUtils.invokeMethodEx(
+					textEdit,
+					"internalSetParent(org.eclipse.text.edits.TextEdit)",
+					(Object) null);
+			targetTextChange.addEdit(textEdit);
+		}
+	}
 
-  /**
-   * Ensures that given {@link TextChange} uses {@link MultiTextEdit}, wraps into it if this is not
-   * so.
-   */
-  private static void ensureMultiTextEdit(TextChange textChange) {
-    TextEdit textEdit = textChange.getEdit();
-    if (!(textEdit instanceof MultiTextEdit)) {
-      MultiTextEdit multiTextEdit = new MultiTextEdit();
-      multiTextEdit.addChild(textEdit);
-      //
-      ReflectionUtils.setField(textChange, "fEdit", null);
-      textChange.setEdit(multiTextEdit);
-    }
-  }
+	/**
+	 * Ensures that given {@link TextChange} uses {@link MultiTextEdit}, wraps into it if this is not
+	 * so.
+	 */
+	private static void ensureMultiTextEdit(TextChange textChange) {
+		TextEdit textEdit = textChange.getEdit();
+		if (!(textEdit instanceof MultiTextEdit)) {
+			MultiTextEdit multiTextEdit = new MultiTextEdit();
+			multiTextEdit.addChild(textEdit);
+			//
+			ReflectionUtils.setField(textChange, "fEdit", null);
+			textChange.setEdit(multiTextEdit);
+		}
+	}
 
-  /**
-   * @return map of all {@link TextFileChange}-s in given composite {@link Change}.
-   */
-  private static Map<IFile, TextFileChange> getTextFileChanges(Change change) {
-    Map<IFile, TextFileChange> textFileChanges = Maps.newHashMap();
-    addTextFileChanges(textFileChanges, change);
-    return textFileChanges;
-  }
+	/**
+	 * @return map of all {@link TextFileChange}-s in given composite {@link Change}.
+	 */
+	private static Map<IFile, TextFileChange> getTextFileChanges(Change change) {
+		Map<IFile, TextFileChange> textFileChanges = Maps.newHashMap();
+		addTextFileChanges(textFileChanges, change);
+		return textFileChanges;
+	}
 
-  /**
-   * Adds entries for {@link TextFileChange}-s in given composite {@link Change}.
-   */
-  private static void addTextFileChanges(Map<IFile, TextFileChange> textFileChanges, Change change) {
-    if (change instanceof CompositeChange) {
-      CompositeChange compositeChange = (CompositeChange) change;
-      for (Change child : compositeChange.getChildren()) {
-        addTextFileChanges(textFileChanges, child);
-      }
-    } else if (change instanceof TextFileChange) {
-      TextFileChange textFileChange = (TextFileChange) change;
-      textFileChanges.put(textFileChange.getFile(), textFileChange);
-    }
-  }
+	/**
+	 * Adds entries for {@link TextFileChange}-s in given composite {@link Change}.
+	 */
+	private static void addTextFileChanges(Map<IFile, TextFileChange> textFileChanges, Change change) {
+		if (change instanceof CompositeChange) {
+			CompositeChange compositeChange = (CompositeChange) change;
+			for (Change child : compositeChange.getChildren()) {
+				addTextFileChanges(textFileChanges, child);
+			}
+		} else if (change instanceof TextFileChange) {
+			TextFileChange textFileChange = (TextFileChange) change;
+			textFileChanges.put(textFileChange.getFile(), textFileChange);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // XML change internal utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return {@link Change} for modifications in XML file done by {@link DocumentModelVisitor}.
-   */
-  public static Change modifyXML(IFile file,
-      DocumentModelVisitor visitor,
-      AbstractDocumentEditContext context) throws Exception {
-    try {
-      // fetch initial information
-      String oldContents = context.getText();
-      DocumentElement root = context.getRoot();
-      // visit nodes
-      root.accept(visitor);
-      // prepare change
-      String newContents = context.getText();
-      if (!newContents.equals(oldContents)) {
-        // prepare TextEdit as minimal list of replace changes
-        MultiTextEdit multiTextEdit = new MultiTextEdit();
-        {
-          RangeDifference[] differences =
-              RangeDifferencer.findDifferences(
-                  new StringRangeComparator(oldContents),
-                  new StringRangeComparator(newContents));
-          for (RangeDifference difference : differences) {
-            int rightStart = difference.rightStart();
-            int rightEnd = difference.rightEnd();
-            String text = newContents.substring(rightStart, rightEnd);
-            int leftStart = difference.leftStart();
-            int leftLength = difference.leftLength();
-            multiTextEdit.addChild(new ReplaceEdit(leftStart, leftLength, text));
-          }
-        }
-        // create text file change
-        TextFileChange change = new TextFileChange("", file);
-        change.setEdit(multiTextEdit);
-        return change;
-      }
-      // no changes
-      return null;
-    } finally {
-      context.disconnect();
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// XML change internal utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return {@link Change} for modifications in XML file done by {@link DocumentModelVisitor}.
+	 */
+	public static Change modifyXML(IFile file,
+			DocumentModelVisitor visitor,
+			AbstractDocumentEditContext context) throws Exception {
+		try {
+			// fetch initial information
+			String oldContents = context.getText();
+			DocumentElement root = context.getRoot();
+			// visit nodes
+			root.accept(visitor);
+			// prepare change
+			String newContents = context.getText();
+			if (!newContents.equals(oldContents)) {
+				// prepare TextEdit as minimal list of replace changes
+				MultiTextEdit multiTextEdit = new MultiTextEdit();
+				{
+					RangeDifference[] differences =
+							RangeDifferencer.findDifferences(
+									new StringRangeComparator(oldContents),
+									new StringRangeComparator(newContents));
+					for (RangeDifference difference : differences) {
+						int rightStart = difference.rightStart();
+						int rightEnd = difference.rightEnd();
+						String text = newContents.substring(rightStart, rightEnd);
+						int leftStart = difference.leftStart();
+						int leftLength = difference.leftLength();
+						multiTextEdit.addChild(new ReplaceEdit(leftStart, leftLength, text));
+					}
+				}
+				// create text file change
+				TextFileChange change = new TextFileChange("", file);
+				change.setEdit(multiTextEdit);
+				return change;
+			}
+			// no changes
+			return null;
+		} finally {
+			context.disconnect();
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // StringRangeComparator
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static class StringRangeComparator implements IRangeComparator {
-    private final String m_string;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// StringRangeComparator
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static class StringRangeComparator implements IRangeComparator {
+		private final String m_string;
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public StringRangeComparator(String string) {
-      m_string = string;
-      Assert.isTrue(!skipRangeComparison(0, 0, null));
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public StringRangeComparator(String string) {
+			m_string = string;
+			Assert.isTrue(!skipRangeComparison(0, 0, null));
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // IRangeComparator
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public int getRangeCount() {
-      return m_string.length();
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// IRangeComparator
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public int getRangeCount() {
+			return m_string.length();
+		}
 
-    @Override
-    public boolean rangesEqual(int thisIndex, IRangeComparator other, int otherIndex) {
-      StringRangeComparator otherComparator = (StringRangeComparator) other;
-      return m_string.charAt(thisIndex) == otherComparator.m_string.charAt(otherIndex);
-    }
+		@Override
+		public boolean rangesEqual(int thisIndex, IRangeComparator other, int otherIndex) {
+			StringRangeComparator otherComparator = (StringRangeComparator) other;
+			return m_string.charAt(thisIndex) == otherComparator.m_string.charAt(otherIndex);
+		}
 
-    @Override
-    public boolean skipRangeComparison(int length, int maxLength, IRangeComparator other) {
-      return false;
-    }
-  }
+		@Override
+		public boolean skipRangeComparison(int length, int maxLength, IRangeComparator other) {
+			return false;
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/refactoring/UndoCompilationUnitChange.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/refactoring/UndoCompilationUnitChange.java
index 9f6229814..0690c992b 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/refactoring/UndoCompilationUnitChange.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/refactoring/UndoCompilationUnitChange.java
@@ -34,57 +34,57 @@
  * @coverage core.util.refactoring
  */
 /* package */class UndoCompilationUnitChange extends UndoTextFileChange {
-  private final ICompilationUnit fCUnit;
+	private final ICompilationUnit fCUnit;
 
-  public UndoCompilationUnitChange(String name,
-      ICompilationUnit unit,
-      UndoEdit undo,
-      ContentStamp stampToRestore,
-      int saveMode) throws CoreException {
-    super(name, getFile(unit), undo, stampToRestore, saveMode);
-    fCUnit = unit;
-  }
+	public UndoCompilationUnitChange(String name,
+			ICompilationUnit unit,
+			UndoEdit undo,
+			ContentStamp stampToRestore,
+			int saveMode) throws CoreException {
+		super(name, getFile(unit), undo, stampToRestore, saveMode);
+		fCUnit = unit;
+	}
 
-  private static IFile getFile(ICompilationUnit cunit) throws CoreException {
-    IFile file = (IFile) cunit.getResource();
-    if (file == null) {
-      throw new CoreException(new Status(IStatus.ERROR,
-          DesignerPlugin.PLUGIN_ID,
-          IStatus.OK,
-          MessageFormat.format(Messages.UndoCompilationUnitChange_noFile, cunit.getElementName()),
-          null));
-    }
-    return file;
-  }
+	private static IFile getFile(ICompilationUnit cunit) throws CoreException {
+		IFile file = (IFile) cunit.getResource();
+		if (file == null) {
+			throw new CoreException(new Status(IStatus.ERROR,
+					DesignerPlugin.PLUGIN_ID,
+					IStatus.OK,
+					MessageFormat.format(Messages.UndoCompilationUnitChange_noFile, cunit.getElementName()),
+					null));
+		}
+		return file;
+	}
 
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public Object getModifiedElement() {
-    return fCUnit;
-  }
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public Object getModifiedElement() {
+		return fCUnit;
+	}
 
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  protected Change createUndoChange(UndoEdit edit, ContentStamp stampToRestore)
-      throws CoreException {
-    return new UndoCompilationUnitChange(getName(), fCUnit, edit, stampToRestore, getSaveMode());
-  }
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	protected Change createUndoChange(UndoEdit edit, ContentStamp stampToRestore)
+			throws CoreException {
+		return new UndoCompilationUnitChange(getName(), fCUnit, edit, stampToRestore, getSaveMode());
+	}
 
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public Change perform(IProgressMonitor pm) throws CoreException {
-    pm.beginTask("", 2); //$NON-NLS-1$
-    fCUnit.becomeWorkingCopy(null, new SubProgressMonitor(pm, 1));
-    try {
-      return super.perform(new SubProgressMonitor(pm, 1));
-    } finally {
-      fCUnit.discardWorkingCopy();
-    }
-  }
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public Change perform(IProgressMonitor pm) throws CoreException {
+		pm.beginTask("", 2); //$NON-NLS-1$
+		fCUnit.becomeWorkingCopy(null, new SubProgressMonitor(pm, 1));
+		try {
+			return super.perform(new SubProgressMonitor(pm, 1));
+		} finally {
+			fCUnit.discardWorkingCopy();
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/reflect/IByteCodeProcessor.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/reflect/IByteCodeProcessor.java
index 400a365cd..d6c58726b 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/reflect/IByteCodeProcessor.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/reflect/IByteCodeProcessor.java
@@ -18,13 +18,13 @@
  * @coverage core.util
  */
 public interface IByteCodeProcessor {
-  /**
-   * This method invoked during add this processor to class loader.
-   */
-  void initialize(ProjectClassLoader classLoader);
+	/**
+	 * This method invoked during add this processor to class loader.
+	 */
+	void initialize(ProjectClassLoader classLoader);
 
-  /**
-   * @return the possibly modified bytes for given class.
-   */
-  byte[] process(String className, byte[] bytes);
+	/**
+	 * @return the possibly modified bytes for given class.
+	 */
+	byte[] process(String className, byte[] bytes);
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/reflect/ProjectClassLoader.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/reflect/ProjectClassLoader.java
index c3274c1d0..5bd38adfb 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/reflect/ProjectClassLoader.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/reflect/ProjectClassLoader.java
@@ -51,373 +51,373 @@
  * @coverage core.util
  */
 public class ProjectClassLoader extends URLClassLoader {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Creation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link ProjectClassLoader} for given {@link IJavaProject}.
-   */
-  public static ProjectClassLoader create(ClassLoader parentClassLoader, IJavaProject javaProject)
-      throws Exception {
-    URL[] urls = getClasspathUrls(javaProject);
-    return new ProjectClassLoader(urls, parentClassLoader, javaProject);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Creation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link ProjectClassLoader} for given {@link IJavaProject}.
+	 */
+	public static ProjectClassLoader create(ClassLoader parentClassLoader, IJavaProject javaProject)
+			throws Exception {
+		URL[] urls = getClasspathUrls(javaProject);
+		return new ProjectClassLoader(urls, parentClassLoader, javaProject);
+	}
 
-  /**
-   * @return {@link URL}s for each classpath entry of given {@link IJavaProject}.
-   */
-  public static URL[] getClasspathUrls(IJavaProject javaProject) throws Exception {
-    List<String> entries = Lists.newArrayList();
-    addRuntimeClassPathEntries(entries, javaProject, Sets.<IJavaProject>newHashSet(), true);
-    return toURLs(entries);
-  }
+	/**
+	 * @return {@link URL}s for each classpath entry of given {@link IJavaProject}.
+	 */
+	public static URL[] getClasspathUrls(IJavaProject javaProject) throws Exception {
+		List<String> entries = Lists.newArrayList();
+		addRuntimeClassPathEntries(entries, javaProject, Sets.<IJavaProject>newHashSet(), true);
+		return toURLs(entries);
+	}
 
-  /**
-   * @return the {@link URL}s for given locations in file system.
-   */
-  public static URL[] toURLs(List<String> locations) throws Exception {
-    URL urls[] = new URL[locations.size()];
-    for (int i = 0; i < locations.size(); i++) {
-      String location = locations.get(i);
-      urls[i] = new File(location).toURI().toURL();
-    }
-    return urls;
-  }
+	/**
+	 * @return the {@link URL}s for given locations in file system.
+	 */
+	public static URL[] toURLs(List<String> locations) throws Exception {
+		URL urls[] = new URL[locations.size()];
+		for (int i = 0; i < locations.size(); i++) {
+			String location = locations.get(i);
+			urls[i] = new File(location).toURI().toURL();
+		}
+		return urls;
+	}
 
-  /**
-   * @return the {@link ProjectClassLoader} for given {@link URL}'s with given parent
-   *         {@link ClassLoader}.
-   */
-  public static ProjectClassLoader create(ClassLoader parentClassLoader,
-      URL[] urls,
-      IJavaProject javaProject) throws Exception {
-    return new ProjectClassLoader(urls, parentClassLoader, javaProject);
-  }
+	/**
+	 * @return the {@link ProjectClassLoader} for given {@link URL}'s with given parent
+	 *         {@link ClassLoader}.
+	 */
+	public static ProjectClassLoader create(ClassLoader parentClassLoader,
+			URL[] urls,
+			IJavaProject javaProject) throws Exception {
+		return new ProjectClassLoader(urls, parentClassLoader, javaProject);
+	}
 
-  private static void addRuntimeClassPathEntries(List<String> entries,
-      IJavaProject javaProject,
-      Set<IJavaProject> visitedProjects,
-      boolean fullClassPath) throws Exception {
-    IProject project = javaProject.getProject();
-    // not Java project
-    if (!javaProject.exists()) {
-      // add its location for resources
-      if (project.exists()) {
-        String path = project.getLocation().toPortableString();
-        entries.add(path);
-      }
-      // done
-      return;
-    }
-    // check for recursion
-    if (visitedProjects.contains(javaProject)) {
-      return;
-    }
-    visitedProjects.add(javaProject);
-    // do add classpath entries
-    if (fullClassPath) {
-      CollectionUtils.addAll(entries, getClasspath(javaProject));
-    } else {
-      IPath outputLocation = javaProject.getOutputLocation();
-      addAbsoluteLocation(entries, outputLocation);
-    }
-    // include fragments
-    addFragments(entries, project, visitedProjects);
-  }
+	private static void addRuntimeClassPathEntries(List<String> entries,
+			IJavaProject javaProject,
+			Set<IJavaProject> visitedProjects,
+			boolean fullClassPath) throws Exception {
+		IProject project = javaProject.getProject();
+		// not Java project
+		if (!javaProject.exists()) {
+			// add its location for resources
+			if (project.exists()) {
+				String path = project.getLocation().toPortableString();
+				entries.add(path);
+			}
+			// done
+			return;
+		}
+		// check for recursion
+		if (visitedProjects.contains(javaProject)) {
+			return;
+		}
+		visitedProjects.add(javaProject);
+		// do add classpath entries
+		if (fullClassPath) {
+			CollectionUtils.addAll(entries, getClasspath(javaProject));
+		} else {
+			IPath outputLocation = javaProject.getOutputLocation();
+			addAbsoluteLocation(entries, outputLocation);
+		}
+		// include fragments
+		addFragments(entries, project, visitedProjects);
+	}
 
-  private static void addFragments(List<String> entries,
-      IProject project,
-      Set<IJavaProject> visitedProjects) throws Exception {
-    IJavaProject javaProject = JavaCore.create(project);
-    if (!javaProject.exists()) {
-      return;
-    }
-    // add fragments of this project
-    {
-      Object model = ReflectivePDE.findModel(project);
-      if (model != null) {
-        org.eclipse.osgi.service.resolver.BundleDescription modelBundleDescription =
-            ReflectivePDE.getPluginModelBundleDescription(model);
-        if (modelBundleDescription != null) {
-          org.eclipse.osgi.service.resolver.BundleDescription[] fragments =
-              modelBundleDescription.getFragments();
-          for (org.eclipse.osgi.service.resolver.BundleDescription fragment : fragments) {
-            String fragmentProjectName = fragment.getSymbolicName();
-            addFragment_runtimeClassPathEntries(entries, fragmentProjectName, visitedProjects);
-          }
-        }
-      }
-    }
-    // add also fragments of required projects
-    {
-      String[] requiredProjectNames = javaProject.getRequiredProjectNames();
-      for (String requiredProjectName : requiredProjectNames) {
-        addFragment_runtimeClassPathEntries(entries, requiredProjectName, visitedProjects);
-      }
-    }
-  }
+	private static void addFragments(List<String> entries,
+			IProject project,
+			Set<IJavaProject> visitedProjects) throws Exception {
+		IJavaProject javaProject = JavaCore.create(project);
+		if (!javaProject.exists()) {
+			return;
+		}
+		// add fragments of this project
+		{
+			Object model = ReflectivePDE.findModel(project);
+			if (model != null) {
+				org.eclipse.osgi.service.resolver.BundleDescription modelBundleDescription =
+						ReflectivePDE.getPluginModelBundleDescription(model);
+				if (modelBundleDescription != null) {
+					org.eclipse.osgi.service.resolver.BundleDescription[] fragments =
+							modelBundleDescription.getFragments();
+					for (org.eclipse.osgi.service.resolver.BundleDescription fragment : fragments) {
+						String fragmentProjectName = fragment.getSymbolicName();
+						addFragment_runtimeClassPathEntries(entries, fragmentProjectName, visitedProjects);
+					}
+				}
+			}
+		}
+		// add also fragments of required projects
+		{
+			String[] requiredProjectNames = javaProject.getRequiredProjectNames();
+			for (String requiredProjectName : requiredProjectNames) {
+				addFragment_runtimeClassPathEntries(entries, requiredProjectName, visitedProjects);
+			}
+		}
+	}
 
-  private static void addFragment_runtimeClassPathEntries(List<String> entries,
-      String projectName,
-      Set<IJavaProject> visitedProjects) throws Exception {
-    IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
-    IProject project = root.getProject(projectName);
-    IJavaProject javaProject = JavaCore.create(project);
-    addRuntimeClassPathEntries(entries, javaProject, visitedProjects, false);
-  }
+	private static void addFragment_runtimeClassPathEntries(List<String> entries,
+			String projectName,
+			Set<IJavaProject> visitedProjects) throws Exception {
+		IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
+		IProject project = root.getProject(projectName);
+		IJavaProject javaProject = JavaCore.create(project);
+		addRuntimeClassPathEntries(entries, javaProject, visitedProjects, false);
+	}
 
-  /**
-   * @return the locations of classpath entries of given {@link IJavaProject}. It does not support
-   *         advanced features of JDT/PDE such as "Import-Package" statement, and adding fragments.
-   *         However if does <em>not</em> fail when there is reference on not existing required
-   *         {@link IProject}. We need this to play safe in GWT.
-   */
-  public static String[] getClasspath(IJavaProject javaProject) throws Exception {
-    List<String> locations = Lists.newArrayList();
-    // prepare unresolved class path
-    IRuntimeClasspathEntry[] unresolvedEntries =
-        JavaRuntime.computeUnresolvedRuntimeClasspath(javaProject);
-    // resolve each entry
-    for (int unresolvedIndex = 0; unresolvedIndex < unresolvedEntries.length; unresolvedIndex++) {
-      IRuntimeClasspathEntry enresolvedEntry = unresolvedEntries[unresolvedIndex];
-      IRuntimeClasspathEntry[] resolvedEntries =
-          JavaRuntime.resolveRuntimeClasspathEntry(enresolvedEntry, javaProject);
-      for (int resolvedIndex = 0; resolvedIndex < resolvedEntries.length; resolvedIndex++) {
-        IRuntimeClasspathEntry resolvedEntry = resolvedEntries[resolvedIndex];
-        String location = resolvedEntry.getLocation();
-        if (location != null) {
-          location = location.replace('\\', '/');
-          locations.add(location);
-        }
-      }
-    }
-    // convert into array
-    return locations.toArray(new String[locations.size()]);
-  }
+	/**
+	 * @return the locations of classpath entries of given {@link IJavaProject}. It does not support
+	 *         advanced features of JDT/PDE such as "Import-Package" statement, and adding fragments.
+	 *         However if does <em>not</em> fail when there is reference on not existing required
+	 *         {@link IProject}. We need this to play safe in GWT.
+	 */
+	public static String[] getClasspath(IJavaProject javaProject) throws Exception {
+		List<String> locations = Lists.newArrayList();
+		// prepare unresolved class path
+		IRuntimeClasspathEntry[] unresolvedEntries =
+				JavaRuntime.computeUnresolvedRuntimeClasspath(javaProject);
+		// resolve each entry
+		for (int unresolvedIndex = 0; unresolvedIndex < unresolvedEntries.length; unresolvedIndex++) {
+			IRuntimeClasspathEntry enresolvedEntry = unresolvedEntries[unresolvedIndex];
+			IRuntimeClasspathEntry[] resolvedEntries =
+					JavaRuntime.resolveRuntimeClasspathEntry(enresolvedEntry, javaProject);
+			for (int resolvedIndex = 0; resolvedIndex < resolvedEntries.length; resolvedIndex++) {
+				IRuntimeClasspathEntry resolvedEntry = resolvedEntries[resolvedIndex];
+				String location = resolvedEntry.getLocation();
+				if (location != null) {
+					location = location.replace('\\', '/');
+					locations.add(location);
+				}
+			}
+		}
+		// convert into array
+		return locations.toArray(new String[locations.size()]);
+	}
 
-  /**
-   * Adds absolute locations (in file system) of output folders for given and required projects.
-   */
-  public static void addOutputLocations(Set<IProject> visitedProjects,
-      List<String> locations,
-      IProject project) throws Exception {
-    // may be not exists
-    if (!project.exists()) {
-      return;
-    }
-    // check for recursion
-    if (visitedProjects.contains(project)) {
-      return;
-    }
-    visitedProjects.add(project);
-    // add output folders for IJavaProject
-    {
-      IJavaProject javaProject = JavaCore.create(project);
-      if (javaProject.exists()) {
-        // default output location
-        {
-          IPath outputPath = javaProject.getOutputLocation();
-          addAbsoluteLocation(locations, outputPath);
-        }
-        // source folder specific output locations
-        for (IClasspathEntry entry : javaProject.getResolvedClasspath(true)) {
-          if (entry.getEntryKind() == IClasspathEntry.CPE_SOURCE) {
-            IPath outputPath = entry.getOutputLocation();
-            addAbsoluteLocation(locations, outputPath);
-          }
-        }
-      }
-    }
-    // process required projects
-    IProject[] referencedProjects = project.getReferencedProjects();
-    for (IProject referencedProject : referencedProjects) {
-      addOutputLocations(visitedProjects, locations, referencedProject);
-    }
-  }
+	/**
+	 * Adds absolute locations (in file system) of output folders for given and required projects.
+	 */
+	public static void addOutputLocations(Set<IProject> visitedProjects,
+			List<String> locations,
+			IProject project) throws Exception {
+		// may be not exists
+		if (!project.exists()) {
+			return;
+		}
+		// check for recursion
+		if (visitedProjects.contains(project)) {
+			return;
+		}
+		visitedProjects.add(project);
+		// add output folders for IJavaProject
+		{
+			IJavaProject javaProject = JavaCore.create(project);
+			if (javaProject.exists()) {
+				// default output location
+				{
+					IPath outputPath = javaProject.getOutputLocation();
+					addAbsoluteLocation(locations, outputPath);
+				}
+				// source folder specific output locations
+				for (IClasspathEntry entry : javaProject.getResolvedClasspath(true)) {
+					if (entry.getEntryKind() == IClasspathEntry.CPE_SOURCE) {
+						IPath outputPath = entry.getOutputLocation();
+						addAbsoluteLocation(locations, outputPath);
+					}
+				}
+			}
+		}
+		// process required projects
+		IProject[] referencedProjects = project.getReferencedProjects();
+		for (IProject referencedProject : referencedProjects) {
+			addOutputLocations(visitedProjects, locations, referencedProject);
+		}
+	}
 
-  /**
-   * Adds absolute locations (in file system) of source folders for given and required projects.
-   */
-  public static void addSourceLocations(Set<IProject> visitedProjects,
-      List<String> locations,
-      IProject project) throws Exception {
-    // may be not exists
-    if (!project.exists()) {
-      return;
-    }
-    // check for recursion
-    if (visitedProjects.contains(project)) {
-      return;
-    }
-    visitedProjects.add(project);
-    // add source folders for IJavaProject
-    {
-      IJavaProject javaProject = JavaCore.create(project);
-      if (javaProject.exists()) {
-        for (IClasspathEntry entry : javaProject.getResolvedClasspath(true)) {
-          if (entry.getEntryKind() == IClasspathEntry.CPE_SOURCE) {
-            IPath entryPath = entry.getPath();
-            addAbsoluteLocation(locations, entryPath);
-          }
-        }
-      }
-    }
-    // process required projects
-    IProject[] referencedProjects = project.getReferencedProjects();
-    for (IProject referencedProject : referencedProjects) {
-      addSourceLocations(visitedProjects, locations, referencedProject);
-    }
-  }
+	/**
+	 * Adds absolute locations (in file system) of source folders for given and required projects.
+	 */
+	public static void addSourceLocations(Set<IProject> visitedProjects,
+			List<String> locations,
+			IProject project) throws Exception {
+		// may be not exists
+		if (!project.exists()) {
+			return;
+		}
+		// check for recursion
+		if (visitedProjects.contains(project)) {
+			return;
+		}
+		visitedProjects.add(project);
+		// add source folders for IJavaProject
+		{
+			IJavaProject javaProject = JavaCore.create(project);
+			if (javaProject.exists()) {
+				for (IClasspathEntry entry : javaProject.getResolvedClasspath(true)) {
+					if (entry.getEntryKind() == IClasspathEntry.CPE_SOURCE) {
+						IPath entryPath = entry.getPath();
+						addAbsoluteLocation(locations, entryPath);
+					}
+				}
+			}
+		}
+		// process required projects
+		IProject[] referencedProjects = project.getReferencedProjects();
+		for (IProject referencedProject : referencedProjects) {
+			addSourceLocations(visitedProjects, locations, referencedProject);
+		}
+	}
 
-  /**
-   * Resolves given {@link IPath} to absolute location in file system and adds to the {@link List}.
-   */
-  private static void addAbsoluteLocation(List<String> locations, IPath outputPath) {
-    if (outputPath != null) {
-      IWorkspaceRoot workspaceRoot = ResourcesPlugin.getWorkspace().getRoot();
-      // prepare location
-      IPath entryLocation;
-      if (outputPath.segmentCount() == 1) {
-        String projectName = outputPath.lastSegment();
-        IProject project = workspaceRoot.getProject(projectName);
-        entryLocation = project.getLocation();
-      } else {
-        IFolder entryFolder = workspaceRoot.getFolder(outputPath);
-        entryLocation = entryFolder.getLocation();
-      }
-      // add location
-      locations.add(entryLocation.toPortableString());
-    }
-  }
+	/**
+	 * Resolves given {@link IPath} to absolute location in file system and adds to the {@link List}.
+	 */
+	private static void addAbsoluteLocation(List<String> locations, IPath outputPath) {
+		if (outputPath != null) {
+			IWorkspaceRoot workspaceRoot = ResourcesPlugin.getWorkspace().getRoot();
+			// prepare location
+			IPath entryLocation;
+			if (outputPath.segmentCount() == 1) {
+				String projectName = outputPath.lastSegment();
+				IProject project = workspaceRoot.getProject(projectName);
+				entryLocation = project.getLocation();
+			} else {
+				IFolder entryFolder = workspaceRoot.getFolder(outputPath);
+				entryLocation = entryFolder.getLocation();
+			}
+			// add location
+			locations.add(entryLocation.toPortableString());
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Clean up
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Remove any static references for JIDE, see (Case 4713).
-   */
-  private static void cleanUpJIDE() {
-    UIDefaults defaults = UIManager.getDefaults();
-    for (Iterator<?> I = defaults.keySet().iterator(); I.hasNext();) {
-      Object key = I.next();
-      if (key.toString().toLowerCase().indexOf("jide") != -1) {
-        I.remove();
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Clean up
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Remove any static references for JIDE, see (Case 4713).
+	 */
+	private static void cleanUpJIDE() {
+		UIDefaults defaults = UIManager.getDefaults();
+		for (Iterator<?> I = defaults.keySet().iterator(); I.hasNext();) {
+			Object key = I.next();
+			if (key.toString().toLowerCase().indexOf("jide") != -1) {
+				I.remove();
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance fields
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * {@link List} of additional {@link IByteCodeProcessor}'s that should be applied to each loaded
-   * class.
-   */
-  private final List<IByteCodeProcessor> m_processors = Lists.newArrayList();
-  /**
-   * {@link Set} of classes names that should be made non-abstract.
-   */
-  private final Set<String> m_nonAbstractClasses = Sets.newTreeSet();
-  private final IJavaProject m_javaProject;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance fields
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * {@link List} of additional {@link IByteCodeProcessor}'s that should be applied to each loaded
+	 * class.
+	 */
+	private final List<IByteCodeProcessor> m_processors = Lists.newArrayList();
+	/**
+	 * {@link Set} of classes names that should be made non-abstract.
+	 */
+	private final Set<String> m_nonAbstractClasses = Sets.newTreeSet();
+	private final IJavaProject m_javaProject;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ProjectClassLoader(URL[] urls, ClassLoader parent, IJavaProject javaProject) {
-    super(urls, parent);
-    m_javaProject = javaProject;
-    cleanUpJIDE();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ProjectClassLoader(URL[] urls, ClassLoader parent, IJavaProject javaProject) {
+		super(urls, parent);
+		m_javaProject = javaProject;
+		cleanUpJIDE();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds given {@link IByteCodeProcessor}.
-   */
-  public void add(IByteCodeProcessor processor) {
-    m_processors.add(processor);
-    processor.initialize(this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds given {@link IByteCodeProcessor}.
+	 */
+	public void add(IByteCodeProcessor processor) {
+		m_processors.add(processor);
+		processor.initialize(this);
+	}
 
-  /**
-   * Adds the name of class that should be made non-abstract.
-   */
-  public void addNonAbstractClass(String className) {
-    m_nonAbstractClasses.add(className);
-  }
+	/**
+	 * Adds the name of class that should be made non-abstract.
+	 */
+	public void addNonAbstractClass(String className) {
+		m_nonAbstractClasses.add(className);
+	}
 
-  @Override
-  public void addURL(URL url) {
-    // make addURL() method public
-    super.addURL(url);
-  }
+	@Override
+	public void addURL(URL url) {
+		// make addURL() method public
+		super.addURL(url);
+	}
 
-  public IJavaProject getJavaProject() {
-    return m_javaProject;
-  }
+	public IJavaProject getJavaProject() {
+		return m_javaProject;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Loading
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static CodeSource m_fakeCodeSource;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Loading
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static CodeSource m_fakeCodeSource;
 
-  @Override
-  protected Class<?> findClass(String className) throws ClassNotFoundException {
-    String classResourceName = className.replace('.', '/') + ".class";
-    InputStream input = getResourceAsStream(classResourceName);
-    if (input == null) {
-      throw new ClassNotFoundException(className);
-    } else {
-      try {
-        // read class bytes
-        byte[] bytes = IOUtils2.readBytes(input);
-        // apply processors
-        for (IByteCodeProcessor processor : m_processors) {
-          bytes = processor.process(className, bytes);
-        }
-        // implement abstract methods (only for required classes)
-        if (m_nonAbstractClasses.contains(className)) {
-          ClassReader classReader = new ClassReader(bytes);
-          AbstractMethodsImplementorVisitor rewriter =
-              new AbstractMethodsImplementorVisitor(className);
-          classReader.accept(rewriter, 0);
-          bytes = rewriter.toByteArray();
-        }
-        // define package
-        {
-          String pkgName = StringUtils.substringBeforeLast(className, ".");
-          if (getPackage(pkgName) == null) {
-            definePackage(pkgName, null, null, null, null, null, null, null);
-          }
-        }
-        // return (possibly modified) class
-        ensureCodeSource();
-        return defineClass(className, bytes, 0, bytes.length, m_fakeCodeSource);
-      } catch (Throwable e) {
-        throw new ClassNotFoundException("Error loading class " + className, e);
-      }
-    }
-  }
+	@Override
+	protected Class<?> findClass(String className) throws ClassNotFoundException {
+		String classResourceName = className.replace('.', '/') + ".class";
+		InputStream input = getResourceAsStream(classResourceName);
+		if (input == null) {
+			throw new ClassNotFoundException(className);
+		} else {
+			try {
+				// read class bytes
+				byte[] bytes = IOUtils2.readBytes(input);
+				// apply processors
+				for (IByteCodeProcessor processor : m_processors) {
+					bytes = processor.process(className, bytes);
+				}
+				// implement abstract methods (only for required classes)
+				if (m_nonAbstractClasses.contains(className)) {
+					ClassReader classReader = new ClassReader(bytes);
+					AbstractMethodsImplementorVisitor rewriter =
+							new AbstractMethodsImplementorVisitor(className);
+					classReader.accept(rewriter, 0);
+					bytes = rewriter.toByteArray();
+				}
+				// define package
+				{
+					String pkgName = StringUtils.substringBeforeLast(className, ".");
+					if (getPackage(pkgName) == null) {
+						definePackage(pkgName, null, null, null, null, null, null, null);
+					}
+				}
+				// return (possibly modified) class
+				ensureCodeSource();
+				return defineClass(className, bytes, 0, bytes.length, m_fakeCodeSource);
+			} catch (Throwable e) {
+				throw new ClassNotFoundException("Error loading class " + className, e);
+			}
+		}
+	}
 
-  private static void ensureCodeSource() {
-    if (m_fakeCodeSource == null) {
-      try {
-        m_fakeCodeSource = new CodeSource(new URL("file:/"), (Certificate[]) null);
-      } catch (Throwable e) {
-      }
-    }
-  }
+	private static void ensureCodeSource() {
+		if (m_fakeCodeSource == null) {
+			try {
+				m_fakeCodeSource = new CodeSource(new URL("file:/"), (Certificate[]) null);
+			} catch (Throwable e) {
+			}
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/state/EditorState.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/state/EditorState.java
index 1c997123a..ac4b5a2b1 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/state/EditorState.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/state/EditorState.java
@@ -53,654 +53,654 @@
  * @coverage core.model
  */
 public final class EditorState {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Global
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static JavaInfo m_activeJavaInfo;
-
-  /**
-   * @return some {@link JavaInfo} of active editor.
-   */
-  public static JavaInfo getActiveJavaInfo() {
-    return m_activeJavaInfo;
-  }
-
-  /**
-   * Sets some {@link JavaInfo} of active editor.
-   * <p>
-   * We use this {@link JavaInfo} to understand context in which Designer operates, for example
-   * RCP/eRCP uses same model classes for widgets, but access for bounds/image/etc is specific to
-   * the toolkit.
-   */
-  public static void setActiveJavaInfo(JavaInfo rootInfo) {
-    m_activeJavaInfo = rootInfo;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance fields
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private boolean m_disposed;
-  private final AstEditor m_editor;
-  private final VisitedNodes m_visitedNodes;
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final String KEY_EDITOR_STATE = "KEY_EDITOR_STATE";
-
-  /**
-   * @return the {@link EditorState} instance for given {@link AstEditor}.
-   */
-  public static EditorState get(AstEditor editor) {
-    EditorState state = (EditorState) editor.getGlobalValue(KEY_EDITOR_STATE);
-    if (state == null) {
-      state = new EditorState(editor);
-      editor.putGlobalValue(KEY_EDITOR_STATE, state);
-    }
-    return state;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private EditorState(AstEditor editor) {
-    m_editor = editor;
-    m_visitedNodes = new VisitedNodes();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Broadcast
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private BroadcastSupport m_broadcastSupport;
-
-  /**
-   * @return the {@link BroadcastSupport} for this editor.
-   */
-  public BroadcastSupport getBroadcast() {
-    if (m_broadcastSupport == null) {
-      m_broadcastSupport = new BroadcastSupport();
-    }
-    return m_broadcastSupport;
-  }
-
-  /**
-   * Sets the {@link BroadcastSupport} for this editor.<br>
-   *
-   * Usually we don't need this method, however when we create "live image", we should use separate
-   * {@link BroadcastSupport}.
-   */
-  public void setBroadcastSupport(BroadcastSupport broadcastSupport) {
-    m_broadcastSupport = broadcastSupport;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link AstEditor} for unit under design.
-   */
-  public AstEditor getEditor() {
-    return m_editor;
-  }
-
-  /**
-   * @return the holder for visited nodes.
-   */
-  public VisitedNodes getVisitedNodes() {
-    return m_visitedNodes;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // JavaInfo Resolver
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private JavaInfoResolver m_javaInfoResolver;
-
-  /**
-   * @return the {@link JavaInfoResolver} for this editor.
-   */
-  public JavaInfoResolver getJavaInfoResolver() {
-    return m_javaInfoResolver;
-  }
-
-  /**
-   * Sets the {@link JavaInfoResolver} for this editor.
-   */
-  public void setJavaInfoResolver(JavaInfoResolver javaInfoResolver) {
-    m_javaInfoResolver = javaInfoResolver;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Dispose
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if hierarchy was disposed.
-   */
-  public boolean isDisposed() {
-    return m_disposed;
-  }
-
-  /**
-   * Disposes any resource allocated globally for current editor.
-   */
-  public void dispose() {
-    // dispose Image's
-    {
-      for (Image image : m_disposableImages) {
-        if (image != null && !image.isDisposed()) {
-          image.dispose();
-        }
-      }
-      m_disposableImages.clear();
-    }
-    // dispose the IDisposable's
-    {
-      for (IDisposable disposable : m_disposableList) {
-        disposable.dispose();
-      }
-      m_disposableList.clear();
-    }
-    // clear Java internals
-    dispose_PropertyEditorManager();
-    dispose_UIManager();
-    // dispose class loader
-    ExecutionUtils.runIgnore(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        AbstractParseFactory.deinitializeClassLoader(m_editorLoader, m_toolkitId);
-      }
-    });
-    // done
-    m_disposed = true;
-  }
-
-  /**
-   * Removes cached {@link Class}-s to prevent memory leak and {@link ClassCastException}'s.
-   * <p>
-   * We can not use <code>entrySet()</code> method, because of bug - it does not call
-   * <code>super()</code>.
-   */
-  private void dispose_UIManager() {
-    ExecutionUtils.runIgnore(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        UIDefaults defaults = UIManager.getDefaults();
-        Collection<Object> values = defaults.values();
-        for (Iterator<?> I = values.iterator(); I.hasNext();) {
-          Object value = I.next();
-          if (value instanceof Class<?>) {
-            if (isLoadedFrom((Class<?>) value)) {
-              I.remove();
-            }
-          }
-        }
-      }
-    });
-  }
-
-  /**
-   * Clear {@link PropertyEditorManager} cache to prevent {@link Class} and {@link ClassLoader}
-   * leaks.
-   */
-  private void dispose_PropertyEditorManager() {
-    ExecutionUtils.runIgnore(new RunnableEx() {
-      @Override
-      @SuppressWarnings("rawtypes")
-      public void run() throws Exception {
-        Map registry =
-            (Map) ReflectionUtils.getFieldObject(PropertyEditorManager.class, "registry");
-        if (registry != null) {
-          for (Iterator I = registry.entrySet().iterator(); I.hasNext();) {
-            Map.Entry entry = (Map.Entry) I.next();
-            Class editorClass = (Class) entry.getValue();
-            if (isLoadedFrom(editorClass)) {
-              I.remove();
-            }
-          }
-        }
-      }
-    });
-  }
-
-  /**
-   * @return <code>true</code> if given {@link Class} was loaded using this {@link EditorState}.
-   */
-  public boolean isLoadedFrom(Class<?> clazz) {
-    return isLoadedFrom(clazz, m_editorLoader);
-  }
-
-  /**
-   * @return <code>true</code> if given {@link Class} was loaded using this {@link EditorState}.
-   */
-  private static boolean isLoadedFrom(Class<?> clazz, ClassLoader loader) {
-    // check for this ClassLoader
-    if (clazz.getClassLoader() == loader) {
-      return true;
-    }
-    // check parts of CompositeClassLoader
-    if (loader instanceof CompositeClassLoader) {
-      CompositeClassLoader compositeClassLoader = (CompositeClassLoader) loader;
-      for (Iterator<?> I = compositeClassLoader.getClassLoaders().iterator(); I.hasNext();) {
-        ClassLoader classLoader = (ClassLoader) I.next();
-        if (isLoadedFrom(clazz, classLoader)) {
-          return true;
-        }
-      }
-    }
-    // generic case
-    return false;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ExecutionFlowDescription
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private ExecutionFlowDescription m_flowDescription;
-
-  /**
-   * @return the {@link ExecutionFlowDescription} of current editor.
-   */
-  public ExecutionFlowDescription getFlowDescription() {
-    return m_flowDescription;
-  }
-
-  /**
-   * Sets new {@link ExecutionFlowDescription}, can be called only one time.
-   */
-  public void setFlowDescription(ExecutionFlowDescription flowDescription) {
-    Assert.isNotNull(flowDescription);
-    m_flowDescription = flowDescription;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Executing flag
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private boolean m_isExecuting;
-
-  /**
-   * @return <code>true</code> if we visit/execute AST now. Some methods may be intercepted during
-   *         fetching, we don't need them.
-   */
-  public boolean isExecuting() {
-    return m_isExecuting;
-  }
-
-  /**
-   * Specifies if in visit/execute AST.
-   */
-  public void setExecuting(boolean isExecuting) {
-    m_isExecuting = isExecuting;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // "Live component" flag
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private boolean m_isLiveComponent;
-
-  /**
-   * @return <code>true</code> if model hierarchy is in process of "live component" operation.
-   */
-  public boolean isLiveComponent() {
-    return m_isLiveComponent;
-  }
-
-  /**
-   * Specifies if model hierarchy is in process of "live component".
-   */
-  public void setLiveComponent(boolean isLiveComponent) {
-    m_isLiveComponent = isLiveComponent;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Temporary parse/execution time values
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private VisitingContext m_tmp_visitingContext;
-  private List<JavaInfo> m_tmp_Components;
-  private final Set<MethodDeclaration> m_tmp_InterceptedMethods = Sets.newHashSet();
-
-  /**
-   * Sets the parse/execution time {@link VisitingContext}.
-   */
-  public void setTmp_visitingContext(VisitingContext tmp_visitingContext) {
-    m_tmp_visitingContext = tmp_visitingContext;
-  }
-
-  /**
-   * @return the parse/execution time {@link VisitingContext}.
-   */
-  public VisitingContext getTmp_visitingContext() {
-    return m_tmp_visitingContext;
-  }
-
-  /**
-   * Sets the parse time components {@link List}.
-   */
-  public void setTmp_Components(List<JavaInfo> components) {
-    m_tmp_Components = components;
-  }
-
-  /**
-   * @return the parse time components {@link List}.
-   */
-  public List<JavaInfo> getTmp_Components() {
-    return m_tmp_Components;
-  }
-
-  /**
-   * @return the {@link MethodDeclaration} that were already intercepted during parsing.
-   */
-  public Set<MethodDeclaration> getTmp_InterceptedMethods() {
-    return m_tmp_InterceptedMethods;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Initialization
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private String m_toolkitId;
-  private ClassLoader m_editorLoader;
-
-  /**
-   * @return the id of "main" toolkit, i.e. toolkit that created {@link ClassLoader}.
-   */
-  public String getToolkitId() {
-    return m_toolkitId;
-  }
-
-  /**
-   * @return the {@link ClassLoader} for editor.
-   */
-  public ClassLoader getEditorLoader() {
-    return m_editorLoader;
-  }
-
-  /**
-   * @return <code>true</code> if this {@link EditorState} was already initialized.
-   */
-  public boolean isInitialized() {
-    return m_editorLoader != null;
-  }
-
-  /**
-   * Specifies that this {@link EditorState} created for some toolkit and given {@link ClassLoader}
-   * should be used to load classes.
-   *
-   * @param toolkitId
-   *          the id of "main" toolkit.
-   * @param loader
-   *          the {@link ClassLoader} to load classes from project.
-   */
-  public void initialize(String toolkitId, ClassLoader loader) {
-    m_toolkitId = toolkitId;
-    // class loader can be set only one time
-    Assert.isNull(m_editorLoader);
-    // check new class loader and set
-    Assert.isNotNull(loader);
-    m_editorLoader = loader;
-    GlobalState.setClassLoader(loader);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IDescriptionVersionsProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final Map<String, Object> m_versions = Maps.newHashMap();
-  private final List<IDescriptionVersionsProvider> m_descriptionVersionsProviders =
-      Lists.newArrayList();
-
-  /**
-   * @return the {@link Map} of versions for toolkit in this {@link EditorState}.
-   */
-  public Map<String, Object> getVersions() {
-    return m_versions;
-  }
-
-  /**
-   * @see IDescriptionVersionsProvider
-   */
-  public List<IDescriptionVersionsProvider> getDescriptionVersionsProviders() {
-    return m_descriptionVersionsProviders;
-  }
-
-  public void addVersions(Map<String, ?> versions) {
-    m_versions.putAll(versions);
-  }
-
-  public void addDescriptionVersionsProvider(IDescriptionVersionsProvider provider) {
-    Assert.isNotNull(provider);
-    if (!m_descriptionVersionsProviders.contains(provider)) {
-      m_descriptionVersionsProviders.add(provider);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Static FactoryMethodDescription's cache
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final MultiKeyMap/*<Class,boolean,Map<String, FactoryMethodDescription>>*/m_staticSignatures =
-      new MultiKeyMap();
-
-  /**
-   * @return the cached map: signature -> {@link FactoryMethodDescription}.
-   *
-   * @param factoryClass
-   *          the name of class that contains factory method
-   */
-  @SuppressWarnings("unchecked")
-  public Map<String, FactoryMethodDescription> getFactorySignatures(Class<?> factoryClass,
-      boolean forStatic) {
-    return (Map<String, FactoryMethodDescription>) m_staticSignatures.get(factoryClass, forStatic);
-  }
-
-  /**
-   * Sets the cached map: signature -> {@link FactoryMethodDescription}.
-   *
-   * @param factoryClass
-   *          the class with factory methods
-   * @param signaturesMap
-   *          the map: signature -> {@link FactoryMethodDescription}
-   */
-  public void putFactorySignatures(Class<?> factoryClass,
-      boolean forStatic,
-      Map<String, FactoryMethodDescription> signaturesMap) {
-    m_staticSignatures.put(factoryClass, forStatic, signaturesMap);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Icons
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final List<Image> m_disposableImages = Lists.newArrayList();
-
-  /**
-   * Adds {@link Image} for further disposing during disposing the editor.
-   */
-  public void addDisposableImage(Image image) {
-    if (image != null && !m_disposableImages.contains(image)) {
-      m_disposableImages.add(image);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Handling of IDisposable's
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final List<IDisposable> m_disposableList = Lists.newArrayList();
-
-  /**
-   * Remembers the instances of {@link IDisposable} for further disposing during disposing the
-   * editor.
-   */
-  public void addDisposable(IDisposable disposable) {
-    if (disposable != null && !m_disposableList.contains(disposable)) {
-      m_disposableList.add(disposable);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // BadNodeInformation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Information about "bad" {@link ASTNode} and exception that caused marking it as "bad".
-   *
-   * @author scheglov_ke
-   */
-  public static final class BadNodeInformation {
-    private final ASTNode m_node;
-    private final Throwable m_exception;
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public BadNodeInformation(ASTNode node, Throwable exception) {
-      Assert.isNotNull(node);
-      m_node = node;
-      m_exception = exception;
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Access
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    /**
-     * @return the "bad" {@link ASTNode}.
-     */
-    public ASTNode getNode() {
-      return m_node;
-    }
-
-    /**
-     * @return the cause exception.
-     */
-    public Throwable getException() {
-      return m_exception;
-    }
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // BadNodesCollection
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Collection of {@link BadNodeInformation}.
-   */
-  public static final class BadNodesCollection {
-    private final List<BadNodeInformation> m_nodes = Lists.newArrayList();
-
-    /**
-     * Removes all nodes.
-     */
-    public void clear() {
-      m_nodes.clear();
-    }
-
-    /**
-     * Adds new bad {@link ASTNode} and its exception.
-     */
-    public void add(ASTNode node, Throwable e) {
-      m_nodes.add(new BadNodeInformation(node, e));
-    }
-
-    /**
-     * @return <code>true</code> is there are no bad nodes.
-     */
-    public boolean isEmpty() {
-      return m_nodes.isEmpty();
-    }
-
-    /**
-     * @return the {@link List} of {@link BadNodeInformation}.
-     */
-    public List<BadNodeInformation> nodes() {
-      return m_nodes;
-    }
-
-    public void print() {
-      for (BadNodeInformation node : m_nodes) {
-        System.out.flush();
-        System.err.flush();
-        System.out.println("------------------ bad node ------------------");
-        System.out.println(node.getNode());
-        System.out.flush();
-        System.err.flush();
-        node.getException().printStackTrace();
-        System.out.flush();
-        System.err.flush();
-      }
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Bad nodes
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final BadNodesCollection m_badParserNodes = new BadNodesCollection();
-  private final BadNodesCollection m_badRefreshNodes = new BadNodesCollection();
-
-  /**
-   * @return the {@link BadNodesCollection} for parser.
-   */
-  public BadNodesCollection getBadParserNodes() {
-    return m_badParserNodes;
-  }
-
-  /**
-   * @return the {@link BadNodesCollection} for refresh process.
-   */
-  public BadNodesCollection getBadRefreshNodes() {
-    return m_badRefreshNodes;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Warnings
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final List<EditorWarning> m_warnings = Lists.newArrayList();
-
-  /**
-   * @return the {@link List} of {@link EditorWarning}'s.
-   */
-  public List<EditorWarning> getWarnings() {
-    return m_warnings;
-  }
-
-  /**
-   * Adds new {@link EditorWarning}.
-   */
-  public void addWarning(EditorWarning warning) {
-    m_warnings.add(warning);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Global
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static JavaInfo m_activeJavaInfo;
+
+	/**
+	 * @return some {@link JavaInfo} of active editor.
+	 */
+	public static JavaInfo getActiveJavaInfo() {
+		return m_activeJavaInfo;
+	}
+
+	/**
+	 * Sets some {@link JavaInfo} of active editor.
+	 * <p>
+	 * We use this {@link JavaInfo} to understand context in which Designer operates, for example
+	 * RCP/eRCP uses same model classes for widgets, but access for bounds/image/etc is specific to
+	 * the toolkit.
+	 */
+	public static void setActiveJavaInfo(JavaInfo rootInfo) {
+		m_activeJavaInfo = rootInfo;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance fields
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private boolean m_disposed;
+	private final AstEditor m_editor;
+	private final VisitedNodes m_visitedNodes;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final String KEY_EDITOR_STATE = "KEY_EDITOR_STATE";
+
+	/**
+	 * @return the {@link EditorState} instance for given {@link AstEditor}.
+	 */
+	public static EditorState get(AstEditor editor) {
+		EditorState state = (EditorState) editor.getGlobalValue(KEY_EDITOR_STATE);
+		if (state == null) {
+			state = new EditorState(editor);
+			editor.putGlobalValue(KEY_EDITOR_STATE, state);
+		}
+		return state;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private EditorState(AstEditor editor) {
+		m_editor = editor;
+		m_visitedNodes = new VisitedNodes();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Broadcast
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private BroadcastSupport m_broadcastSupport;
+
+	/**
+	 * @return the {@link BroadcastSupport} for this editor.
+	 */
+	public BroadcastSupport getBroadcast() {
+		if (m_broadcastSupport == null) {
+			m_broadcastSupport = new BroadcastSupport();
+		}
+		return m_broadcastSupport;
+	}
+
+	/**
+	 * Sets the {@link BroadcastSupport} for this editor.<br>
+	 *
+	 * Usually we don't need this method, however when we create "live image", we should use separate
+	 * {@link BroadcastSupport}.
+	 */
+	public void setBroadcastSupport(BroadcastSupport broadcastSupport) {
+		m_broadcastSupport = broadcastSupport;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link AstEditor} for unit under design.
+	 */
+	public AstEditor getEditor() {
+		return m_editor;
+	}
+
+	/**
+	 * @return the holder for visited nodes.
+	 */
+	public VisitedNodes getVisitedNodes() {
+		return m_visitedNodes;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// JavaInfo Resolver
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private JavaInfoResolver m_javaInfoResolver;
+
+	/**
+	 * @return the {@link JavaInfoResolver} for this editor.
+	 */
+	public JavaInfoResolver getJavaInfoResolver() {
+		return m_javaInfoResolver;
+	}
+
+	/**
+	 * Sets the {@link JavaInfoResolver} for this editor.
+	 */
+	public void setJavaInfoResolver(JavaInfoResolver javaInfoResolver) {
+		m_javaInfoResolver = javaInfoResolver;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Dispose
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if hierarchy was disposed.
+	 */
+	public boolean isDisposed() {
+		return m_disposed;
+	}
+
+	/**
+	 * Disposes any resource allocated globally for current editor.
+	 */
+	public void dispose() {
+		// dispose Image's
+		{
+			for (Image image : m_disposableImages) {
+				if (image != null && !image.isDisposed()) {
+					image.dispose();
+				}
+			}
+			m_disposableImages.clear();
+		}
+		// dispose the IDisposable's
+		{
+			for (IDisposable disposable : m_disposableList) {
+				disposable.dispose();
+			}
+			m_disposableList.clear();
+		}
+		// clear Java internals
+		dispose_PropertyEditorManager();
+		dispose_UIManager();
+		// dispose class loader
+		ExecutionUtils.runIgnore(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				AbstractParseFactory.deinitializeClassLoader(m_editorLoader, m_toolkitId);
+			}
+		});
+		// done
+		m_disposed = true;
+	}
+
+	/**
+	 * Removes cached {@link Class}-s to prevent memory leak and {@link ClassCastException}'s.
+	 * <p>
+	 * We can not use <code>entrySet()</code> method, because of bug - it does not call
+	 * <code>super()</code>.
+	 */
+	private void dispose_UIManager() {
+		ExecutionUtils.runIgnore(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				UIDefaults defaults = UIManager.getDefaults();
+				Collection<Object> values = defaults.values();
+				for (Iterator<?> I = values.iterator(); I.hasNext();) {
+					Object value = I.next();
+					if (value instanceof Class<?>) {
+						if (isLoadedFrom((Class<?>) value)) {
+							I.remove();
+						}
+					}
+				}
+			}
+		});
+	}
+
+	/**
+	 * Clear {@link PropertyEditorManager} cache to prevent {@link Class} and {@link ClassLoader}
+	 * leaks.
+	 */
+	private void dispose_PropertyEditorManager() {
+		ExecutionUtils.runIgnore(new RunnableEx() {
+			@Override
+			@SuppressWarnings("rawtypes")
+			public void run() throws Exception {
+				Map registry =
+						(Map) ReflectionUtils.getFieldObject(PropertyEditorManager.class, "registry");
+				if (registry != null) {
+					for (Iterator I = registry.entrySet().iterator(); I.hasNext();) {
+						Map.Entry entry = (Map.Entry) I.next();
+						Class editorClass = (Class) entry.getValue();
+						if (isLoadedFrom(editorClass)) {
+							I.remove();
+						}
+					}
+				}
+			}
+		});
+	}
+
+	/**
+	 * @return <code>true</code> if given {@link Class} was loaded using this {@link EditorState}.
+	 */
+	public boolean isLoadedFrom(Class<?> clazz) {
+		return isLoadedFrom(clazz, m_editorLoader);
+	}
+
+	/**
+	 * @return <code>true</code> if given {@link Class} was loaded using this {@link EditorState}.
+	 */
+	private static boolean isLoadedFrom(Class<?> clazz, ClassLoader loader) {
+		// check for this ClassLoader
+		if (clazz.getClassLoader() == loader) {
+			return true;
+		}
+		// check parts of CompositeClassLoader
+		if (loader instanceof CompositeClassLoader) {
+			CompositeClassLoader compositeClassLoader = (CompositeClassLoader) loader;
+			for (Iterator<?> I = compositeClassLoader.getClassLoaders().iterator(); I.hasNext();) {
+				ClassLoader classLoader = (ClassLoader) I.next();
+				if (isLoadedFrom(clazz, classLoader)) {
+					return true;
+				}
+			}
+		}
+		// generic case
+		return false;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ExecutionFlowDescription
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private ExecutionFlowDescription m_flowDescription;
+
+	/**
+	 * @return the {@link ExecutionFlowDescription} of current editor.
+	 */
+	public ExecutionFlowDescription getFlowDescription() {
+		return m_flowDescription;
+	}
+
+	/**
+	 * Sets new {@link ExecutionFlowDescription}, can be called only one time.
+	 */
+	public void setFlowDescription(ExecutionFlowDescription flowDescription) {
+		Assert.isNotNull(flowDescription);
+		m_flowDescription = flowDescription;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Executing flag
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private boolean m_isExecuting;
+
+	/**
+	 * @return <code>true</code> if we visit/execute AST now. Some methods may be intercepted during
+	 *         fetching, we don't need them.
+	 */
+	public boolean isExecuting() {
+		return m_isExecuting;
+	}
+
+	/**
+	 * Specifies if in visit/execute AST.
+	 */
+	public void setExecuting(boolean isExecuting) {
+		m_isExecuting = isExecuting;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// "Live component" flag
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private boolean m_isLiveComponent;
+
+	/**
+	 * @return <code>true</code> if model hierarchy is in process of "live component" operation.
+	 */
+	public boolean isLiveComponent() {
+		return m_isLiveComponent;
+	}
+
+	/**
+	 * Specifies if model hierarchy is in process of "live component".
+	 */
+	public void setLiveComponent(boolean isLiveComponent) {
+		m_isLiveComponent = isLiveComponent;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Temporary parse/execution time values
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private VisitingContext m_tmp_visitingContext;
+	private List<JavaInfo> m_tmp_Components;
+	private final Set<MethodDeclaration> m_tmp_InterceptedMethods = Sets.newHashSet();
+
+	/**
+	 * Sets the parse/execution time {@link VisitingContext}.
+	 */
+	public void setTmp_visitingContext(VisitingContext tmp_visitingContext) {
+		m_tmp_visitingContext = tmp_visitingContext;
+	}
+
+	/**
+	 * @return the parse/execution time {@link VisitingContext}.
+	 */
+	public VisitingContext getTmp_visitingContext() {
+		return m_tmp_visitingContext;
+	}
+
+	/**
+	 * Sets the parse time components {@link List}.
+	 */
+	public void setTmp_Components(List<JavaInfo> components) {
+		m_tmp_Components = components;
+	}
+
+	/**
+	 * @return the parse time components {@link List}.
+	 */
+	public List<JavaInfo> getTmp_Components() {
+		return m_tmp_Components;
+	}
+
+	/**
+	 * @return the {@link MethodDeclaration} that were already intercepted during parsing.
+	 */
+	public Set<MethodDeclaration> getTmp_InterceptedMethods() {
+		return m_tmp_InterceptedMethods;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Initialization
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private String m_toolkitId;
+	private ClassLoader m_editorLoader;
+
+	/**
+	 * @return the id of "main" toolkit, i.e. toolkit that created {@link ClassLoader}.
+	 */
+	public String getToolkitId() {
+		return m_toolkitId;
+	}
+
+	/**
+	 * @return the {@link ClassLoader} for editor.
+	 */
+	public ClassLoader getEditorLoader() {
+		return m_editorLoader;
+	}
+
+	/**
+	 * @return <code>true</code> if this {@link EditorState} was already initialized.
+	 */
+	public boolean isInitialized() {
+		return m_editorLoader != null;
+	}
+
+	/**
+	 * Specifies that this {@link EditorState} created for some toolkit and given {@link ClassLoader}
+	 * should be used to load classes.
+	 *
+	 * @param toolkitId
+	 *          the id of "main" toolkit.
+	 * @param loader
+	 *          the {@link ClassLoader} to load classes from project.
+	 */
+	public void initialize(String toolkitId, ClassLoader loader) {
+		m_toolkitId = toolkitId;
+		// class loader can be set only one time
+		Assert.isNull(m_editorLoader);
+		// check new class loader and set
+		Assert.isNotNull(loader);
+		m_editorLoader = loader;
+		GlobalState.setClassLoader(loader);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IDescriptionVersionsProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final Map<String, Object> m_versions = Maps.newHashMap();
+	private final List<IDescriptionVersionsProvider> m_descriptionVersionsProviders =
+			Lists.newArrayList();
+
+	/**
+	 * @return the {@link Map} of versions for toolkit in this {@link EditorState}.
+	 */
+	public Map<String, Object> getVersions() {
+		return m_versions;
+	}
+
+	/**
+	 * @see IDescriptionVersionsProvider
+	 */
+	public List<IDescriptionVersionsProvider> getDescriptionVersionsProviders() {
+		return m_descriptionVersionsProviders;
+	}
+
+	public void addVersions(Map<String, ?> versions) {
+		m_versions.putAll(versions);
+	}
+
+	public void addDescriptionVersionsProvider(IDescriptionVersionsProvider provider) {
+		Assert.isNotNull(provider);
+		if (!m_descriptionVersionsProviders.contains(provider)) {
+			m_descriptionVersionsProviders.add(provider);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Static FactoryMethodDescription's cache
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final MultiKeyMap/*<Class,boolean,Map<String, FactoryMethodDescription>>*/m_staticSignatures =
+			new MultiKeyMap();
+
+	/**
+	 * @return the cached map: signature -> {@link FactoryMethodDescription}.
+	 *
+	 * @param factoryClass
+	 *          the name of class that contains factory method
+	 */
+	@SuppressWarnings("unchecked")
+	public Map<String, FactoryMethodDescription> getFactorySignatures(Class<?> factoryClass,
+			boolean forStatic) {
+		return (Map<String, FactoryMethodDescription>) m_staticSignatures.get(factoryClass, forStatic);
+	}
+
+	/**
+	 * Sets the cached map: signature -> {@link FactoryMethodDescription}.
+	 *
+	 * @param factoryClass
+	 *          the class with factory methods
+	 * @param signaturesMap
+	 *          the map: signature -> {@link FactoryMethodDescription}
+	 */
+	public void putFactorySignatures(Class<?> factoryClass,
+			boolean forStatic,
+			Map<String, FactoryMethodDescription> signaturesMap) {
+		m_staticSignatures.put(factoryClass, forStatic, signaturesMap);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Icons
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final List<Image> m_disposableImages = Lists.newArrayList();
+
+	/**
+	 * Adds {@link Image} for further disposing during disposing the editor.
+	 */
+	public void addDisposableImage(Image image) {
+		if (image != null && !m_disposableImages.contains(image)) {
+			m_disposableImages.add(image);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Handling of IDisposable's
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final List<IDisposable> m_disposableList = Lists.newArrayList();
+
+	/**
+	 * Remembers the instances of {@link IDisposable} for further disposing during disposing the
+	 * editor.
+	 */
+	public void addDisposable(IDisposable disposable) {
+		if (disposable != null && !m_disposableList.contains(disposable)) {
+			m_disposableList.add(disposable);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// BadNodeInformation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Information about "bad" {@link ASTNode} and exception that caused marking it as "bad".
+	 *
+	 * @author scheglov_ke
+	 */
+	public static final class BadNodeInformation {
+		private final ASTNode m_node;
+		private final Throwable m_exception;
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public BadNodeInformation(ASTNode node, Throwable exception) {
+			Assert.isNotNull(node);
+			m_node = node;
+			m_exception = exception;
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Access
+		//
+		////////////////////////////////////////////////////////////////////////////
+		/**
+		 * @return the "bad" {@link ASTNode}.
+		 */
+		public ASTNode getNode() {
+			return m_node;
+		}
+
+		/**
+		 * @return the cause exception.
+		 */
+		public Throwable getException() {
+			return m_exception;
+		}
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// BadNodesCollection
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Collection of {@link BadNodeInformation}.
+	 */
+	public static final class BadNodesCollection {
+		private final List<BadNodeInformation> m_nodes = Lists.newArrayList();
+
+		/**
+		 * Removes all nodes.
+		 */
+		public void clear() {
+			m_nodes.clear();
+		}
+
+		/**
+		 * Adds new bad {@link ASTNode} and its exception.
+		 */
+		public void add(ASTNode node, Throwable e) {
+			m_nodes.add(new BadNodeInformation(node, e));
+		}
+
+		/**
+		 * @return <code>true</code> is there are no bad nodes.
+		 */
+		public boolean isEmpty() {
+			return m_nodes.isEmpty();
+		}
+
+		/**
+		 * @return the {@link List} of {@link BadNodeInformation}.
+		 */
+		public List<BadNodeInformation> nodes() {
+			return m_nodes;
+		}
+
+		public void print() {
+			for (BadNodeInformation node : m_nodes) {
+				System.out.flush();
+				System.err.flush();
+				System.out.println("------------------ bad node ------------------");
+				System.out.println(node.getNode());
+				System.out.flush();
+				System.err.flush();
+				node.getException().printStackTrace();
+				System.out.flush();
+				System.err.flush();
+			}
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Bad nodes
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final BadNodesCollection m_badParserNodes = new BadNodesCollection();
+	private final BadNodesCollection m_badRefreshNodes = new BadNodesCollection();
+
+	/**
+	 * @return the {@link BadNodesCollection} for parser.
+	 */
+	public BadNodesCollection getBadParserNodes() {
+		return m_badParserNodes;
+	}
+
+	/**
+	 * @return the {@link BadNodesCollection} for refresh process.
+	 */
+	public BadNodesCollection getBadRefreshNodes() {
+		return m_badRefreshNodes;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Warnings
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final List<EditorWarning> m_warnings = Lists.newArrayList();
+
+	/**
+	 * @return the {@link List} of {@link EditorWarning}'s.
+	 */
+	public List<EditorWarning> getWarnings() {
+		return m_warnings;
+	}
+
+	/**
+	 * Adds new {@link EditorWarning}.
+	 */
+	public void addWarning(EditorWarning warning) {
+		m_warnings.add(warning);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/state/VisitedNodes.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/state/VisitedNodes.java
index 4e7855343..bec20d0ca 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/state/VisitedNodes.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/state/VisitedNodes.java
@@ -24,31 +24,31 @@
  * @coverage core.model
  */
 public final class VisitedNodes {
-  private final Set<ASTNode> m_nodes = Sets.newHashSet();
+	private final Set<ASTNode> m_nodes = Sets.newHashSet();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Clears visited nodes before performing new visiting operation.
-   */
-  public void clear() {
-    m_nodes.clear();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Clears visited nodes before performing new visiting operation.
+	 */
+	public void clear() {
+		m_nodes.clear();
+	}
 
-  /**
-   * Adds {@link ASTNode} which was visited or evaluated.
-   */
-  public void add(ASTNode node) {
-    m_nodes.add(node);
-  }
+	/**
+	 * Adds {@link ASTNode} which was visited or evaluated.
+	 */
+	public void add(ASTNode node) {
+		m_nodes.add(node);
+	}
 
-  /**
-   * @return the visited {@link ASTNode}s.
-   */
-  public Collection<ASTNode> getNodes() {
-    return m_nodes;
-  }
+	/**
+	 * @return the visited {@link ASTNode}s.
+	 */
+	public Collection<ASTNode> getNodes() {
+		return m_nodes;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/AbstractImageDialog.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/AbstractImageDialog.java
index 213321553..ae5e27be1 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/AbstractImageDialog.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/AbstractImageDialog.java
@@ -39,182 +39,182 @@
  * @coverage core.ui
  */
 public abstract class AbstractImageDialog extends ResizableDialog {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected AbstractImageDialog(Shell parentShell, AbstractUIPlugin plugin) {
-    super(parentShell, plugin);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private ImageInfo m_imageInfo;
-  private String m_input_pageId;
-  private Object m_input_pageData;
-
-  /**
-   * Sets the initial page and data for it.
-   */
-  public final void setInput(String pageId, Object pageData) {
-    m_input_pageId = pageId;
-    m_input_pageData = pageData;
-    if (m_input_pageId != null) {
-      AbstractImagePage page = m_idToPage.get(m_input_pageId);
-      if (page != null) {
-        page.init(m_input_pageData);
-      }
-    }
-  }
-
-  /**
-   * @return the resulting {@link ImageInfo}.
-   */
-  public final ImageInfo getImageInfo() {
-    return m_imageInfo;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Group m_pageButtonsGroup;
-  private Group m_pagesGroup;
-  private ImagePreviewComposite m_previewComposite;
-
-  @Override
-  protected final Control createDialogArea(Composite parent) {
-    Composite area = new Composite(parent, SWT.NONE);
-    GridDataFactory.create(area).grab().fill();
-    GridLayoutFactory.create(area).columns(2).equalColumns();
-    // create Group for Button's with page titles
-    {
-      m_pageButtonsGroup = new Group(area, SWT.NONE);
-      GridDataFactory.create(m_pageButtonsGroup).spanH(2).grabH().fill();
-      GridLayoutFactory.create(m_pageButtonsGroup);
-      m_pageButtonsGroup.setText(Messages.AbstractImageDialog_modeLabel);
-    }
-    // create Group for page content
-    {
-      m_pagesGroup = new Group(area, SWT.NONE);
-      GridDataFactory.create(m_pagesGroup).grab().fill();
-      m_pagesGroup.setLayout(new StackLayout());
-      m_pagesGroup.setText(Messages.AbstractImageDialog_parametersGroup);
-    }
-    // create Group for preview
-    {
-      Group previewGroup = new Group(area, SWT.NONE);
-      GridDataFactory.create(previewGroup).hint(300, 350).fill();
-      previewGroup.setLayout(new FillLayout());
-      previewGroup.setText(Messages.AbstractImageDialog_previewGroup);
-      //
-      m_previewComposite = new ImagePreviewComposite(previewGroup, SWT.NONE);
-    }
-    // add pages
-    addPages(m_pagesGroup);
-    return area;
-  }
-
-  @Override
-  protected Control createContents(Composite parent) {
-    Control contents = super.createContents(parent);
-    // try to set initial page
-    if (m_input_pageId != null) {
-      AbstractImagePage page = m_idToPage.get(m_input_pageId);
-      if (page != null) {
-        // set selected button
-        Button button = m_idToButton.get(m_input_pageId);
-        button.setSelection(true);
-        // activate page
-        setActivePage(page);
-        page.setInput(m_input_pageData);
-      }
-    }
-    //
-    return contents;
-  }
-
-  @Override
-  protected final void configureShell(Shell newShell) {
-    super.configureShell(newShell);
-    newShell.setText(Messages.AbstractImageDialog_title);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Pages
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final Map<String, AbstractImagePage> m_idToPage = Maps.newTreeMap();
-  private final Map<String, Button> m_idToButton = Maps.newTreeMap();
-
-  protected final void addPage(AbstractImagePage page) {
-    String id = page.getId();
-    String title = page.getTitle();
-    //
-    m_idToPage.put(id, page);
-    // add radio button
-    final Button button = new Button(m_pageButtonsGroup, SWT.RADIO);
-    m_idToButton.put(id, button);
-    button.setText(title);
-    button.setData(page);
-    button.addListener(SWT.Selection, new Listener() {
-      @Override
-      public void handleEvent(Event event) {
-        if (button.getSelection()) {
-          AbstractImagePage newPage = (AbstractImagePage) button.getData();
-          setActivePage(newPage);
-        }
-      }
-    });
-  }
-
-  /**
-   * Activates given {@link AbstractImagePage}.
-   */
-  private void setActivePage(AbstractImagePage page) {
-    // notify page
-    page.activate();
-    // show page
-    StackLayout stackLayout = (StackLayout) m_pagesGroup.getLayout();
-    stackLayout.topControl = page.getPageControl();
-    m_pagesGroup.layout();
-  }
-
-  /**
-   * Adds {@link AbstractImagePage}'s.
-   */
-  protected abstract void addPages(Composite parent);
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Internal access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets that {@link ImageInfo} result.
-   */
-  public final void setResultImageInfo(ImageInfo imageInfo) {
-    m_imageInfo = imageInfo;
-    if (m_previewComposite != null) {
-      m_previewComposite.setImageInfo(m_imageInfo);
-    }
-    // update Ok button
-    getButton(IDialogConstants.OK_ID).setEnabled(m_imageInfo != null);
-  }
-
-  /**
-   * Closes dialog with "OK" result.
-   */
-  public final void closeOk() {
-    if (m_imageInfo != null) {
-      setReturnCode(IDialogConstants.OK_ID);
-      close();
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected AbstractImageDialog(Shell parentShell, AbstractUIPlugin plugin) {
+		super(parentShell, plugin);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private ImageInfo m_imageInfo;
+	private String m_input_pageId;
+	private Object m_input_pageData;
+
+	/**
+	 * Sets the initial page and data for it.
+	 */
+	public final void setInput(String pageId, Object pageData) {
+		m_input_pageId = pageId;
+		m_input_pageData = pageData;
+		if (m_input_pageId != null) {
+			AbstractImagePage page = m_idToPage.get(m_input_pageId);
+			if (page != null) {
+				page.init(m_input_pageData);
+			}
+		}
+	}
+
+	/**
+	 * @return the resulting {@link ImageInfo}.
+	 */
+	public final ImageInfo getImageInfo() {
+		return m_imageInfo;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Group m_pageButtonsGroup;
+	private Group m_pagesGroup;
+	private ImagePreviewComposite m_previewComposite;
+
+	@Override
+	protected final Control createDialogArea(Composite parent) {
+		Composite area = new Composite(parent, SWT.NONE);
+		GridDataFactory.create(area).grab().fill();
+		GridLayoutFactory.create(area).columns(2).equalColumns();
+		// create Group for Button's with page titles
+		{
+			m_pageButtonsGroup = new Group(area, SWT.NONE);
+			GridDataFactory.create(m_pageButtonsGroup).spanH(2).grabH().fill();
+			GridLayoutFactory.create(m_pageButtonsGroup);
+			m_pageButtonsGroup.setText(Messages.AbstractImageDialog_modeLabel);
+		}
+		// create Group for page content
+		{
+			m_pagesGroup = new Group(area, SWT.NONE);
+			GridDataFactory.create(m_pagesGroup).grab().fill();
+			m_pagesGroup.setLayout(new StackLayout());
+			m_pagesGroup.setText(Messages.AbstractImageDialog_parametersGroup);
+		}
+		// create Group for preview
+		{
+			Group previewGroup = new Group(area, SWT.NONE);
+			GridDataFactory.create(previewGroup).hint(300, 350).fill();
+			previewGroup.setLayout(new FillLayout());
+			previewGroup.setText(Messages.AbstractImageDialog_previewGroup);
+			//
+			m_previewComposite = new ImagePreviewComposite(previewGroup, SWT.NONE);
+		}
+		// add pages
+		addPages(m_pagesGroup);
+		return area;
+	}
+
+	@Override
+	protected Control createContents(Composite parent) {
+		Control contents = super.createContents(parent);
+		// try to set initial page
+		if (m_input_pageId != null) {
+			AbstractImagePage page = m_idToPage.get(m_input_pageId);
+			if (page != null) {
+				// set selected button
+				Button button = m_idToButton.get(m_input_pageId);
+				button.setSelection(true);
+				// activate page
+				setActivePage(page);
+				page.setInput(m_input_pageData);
+			}
+		}
+		//
+		return contents;
+	}
+
+	@Override
+	protected final void configureShell(Shell newShell) {
+		super.configureShell(newShell);
+		newShell.setText(Messages.AbstractImageDialog_title);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Pages
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final Map<String, AbstractImagePage> m_idToPage = Maps.newTreeMap();
+	private final Map<String, Button> m_idToButton = Maps.newTreeMap();
+
+	protected final void addPage(AbstractImagePage page) {
+		String id = page.getId();
+		String title = page.getTitle();
+		//
+		m_idToPage.put(id, page);
+		// add radio button
+		final Button button = new Button(m_pageButtonsGroup, SWT.RADIO);
+		m_idToButton.put(id, button);
+		button.setText(title);
+		button.setData(page);
+		button.addListener(SWT.Selection, new Listener() {
+			@Override
+			public void handleEvent(Event event) {
+				if (button.getSelection()) {
+					AbstractImagePage newPage = (AbstractImagePage) button.getData();
+					setActivePage(newPage);
+				}
+			}
+		});
+	}
+
+	/**
+	 * Activates given {@link AbstractImagePage}.
+	 */
+	private void setActivePage(AbstractImagePage page) {
+		// notify page
+		page.activate();
+		// show page
+		StackLayout stackLayout = (StackLayout) m_pagesGroup.getLayout();
+		stackLayout.topControl = page.getPageControl();
+		m_pagesGroup.layout();
+	}
+
+	/**
+	 * Adds {@link AbstractImagePage}'s.
+	 */
+	protected abstract void addPages(Composite parent);
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Internal access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets that {@link ImageInfo} result.
+	 */
+	public final void setResultImageInfo(ImageInfo imageInfo) {
+		m_imageInfo = imageInfo;
+		if (m_previewComposite != null) {
+			m_previewComposite.setImageInfo(m_imageInfo);
+		}
+		// update Ok button
+		getButton(IDialogConstants.OK_ID).setEnabled(m_imageInfo != null);
+	}
+
+	/**
+	 * Closes dialog with "OK" result.
+	 */
+	public final void closeOk() {
+		if (m_imageInfo != null) {
+			setReturnCode(IDialogConstants.OK_ID);
+			close();
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/AbstractImagePage.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/AbstractImagePage.java
index f683c124b..13f063007 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/AbstractImagePage.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/AbstractImagePage.java
@@ -20,65 +20,65 @@
  * @coverage core.ui
  */
 public abstract class AbstractImagePage extends Composite {
-  protected final AbstractImageDialog m_imageDialog;
+	protected final AbstractImageDialog m_imageDialog;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractImagePage(Composite parent, int style, AbstractImageDialog imageDialog) {
-    super(parent, style);
-    m_imageDialog = imageDialog;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractImagePage(Composite parent, int style, AbstractImageDialog imageDialog) {
+		super(parent, style);
+		m_imageDialog = imageDialog;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * This method is invoked when user activates this {@link AbstractImagePage}.
-   */
-  public abstract void activate();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * This method is invoked when user activates this {@link AbstractImagePage}.
+	 */
+	public abstract void activate();
 
-  /**
-   * Sets the initial data for page. It is expected that page will use method
-   * {@link AbstractImageDialog#setResultImageInfo(ImageInfo)} to display image corresponding to
-   * given data.
-   */
-  public abstract void setInput(Object data);
+	/**
+	 * Sets the initial data for page. It is expected that page will use method
+	 * {@link AbstractImageDialog#setResultImageInfo(ImageInfo)} to display image corresponding to
+	 * given data.
+	 */
+	public abstract void setInput(Object data);
 
-  /**
-   * XXX
-   */
-  public void init(Object data) {
-  }
+	/**
+	 * XXX
+	 */
+	public void init(Object data) {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the id of this page.
-   */
-  public abstract String getId();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the id of this page.
+	 */
+	public abstract String getId();
 
-  /**
-   * @return the title of this page.
-   */
-  public abstract String getTitle();
+	/**
+	 * @return the title of this page.
+	 */
+	public abstract String getTitle();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return {@link Control} represented this page.
-   */
-  protected Control getPageControl() {
-    return this;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return {@link Control} represented this page.
+	 */
+	protected Control getPageControl() {
+		return this;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/ImageInfo.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/ImageInfo.java
index ccef928ec..e8890bbeb 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/ImageInfo.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/ImageInfo.java
@@ -19,53 +19,53 @@
  * @coverage core.ui
  */
 public final class ImageInfo {
-  private final String m_pageId;
-  private final Object m_data;
-  private final Image m_image;
-  private final long m_size;
+	private final String m_pageId;
+	private final Object m_data;
+	private final Image m_image;
+	private final long m_size;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ImageInfo(String pageId, Object data, Image image, long size) {
-    m_pageId = pageId;
-    m_data = data;
-    m_image = image;
-    m_size = size;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ImageInfo(String pageId, Object data, Image image, long size) {
+		m_pageId = pageId;
+		m_data = data;
+		m_image = image;
+		m_size = size;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the id of page that provided this {@link ImageInfo}.
-   */
-  public String getPageId() {
-    return m_pageId;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the id of page that provided this {@link ImageInfo}.
+	 */
+	public String getPageId() {
+		return m_pageId;
+	}
 
-  /**
-   * @return the page specific data abound image, usually string with path.
-   */
-  public Object getData() {
-    return m_data;
-  }
+	/**
+	 * @return the page specific data abound image, usually string with path.
+	 */
+	public Object getData() {
+		return m_data;
+	}
 
-  /**
-   * @return the SWT {@link Image} of this {@link ImageInfo}.
-   */
-  public Image getImage() {
-    return m_image;
-  }
+	/**
+	 * @return the SWT {@link Image} of this {@link ImageInfo}.
+	 */
+	public Image getImage() {
+		return m_image;
+	}
 
-  /**
-   * @return the size of image in bytes.
-   */
-  public long getSize() {
-    return m_size;
-  }
+	/**
+	 * @return the size of image in bytes.
+	 */
+	public long getSize() {
+		return m_size;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/ImagePreviewComposite.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/ImagePreviewComposite.java
index 87ad67560..0b260e88a 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/ImagePreviewComposite.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/ImagePreviewComposite.java
@@ -35,85 +35,85 @@
  * @coverage core.ui
  */
 public class ImagePreviewComposite extends Composite {
-  private final Label m_dimensionLabel;
-  private final Label m_sizeLabel;
-  private final Canvas m_imageCanvas;
-  private ImageInfo m_imageInfo;
+	private final Label m_dimensionLabel;
+	private final Label m_sizeLabel;
+	private final Canvas m_imageCanvas;
+	private ImageInfo m_imageInfo;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ImagePreviewComposite(Composite parent, int style) {
-    super(parent, style);
-    GridLayoutFactory.create(this);
-    // dimension label
-    {
-      m_dimensionLabel = new Label(this, SWT.NONE);
-      GridDataFactory.create(m_dimensionLabel).grabH().fillH();
-    }
-    // size label
-    {
-      m_sizeLabel = new Label(this, SWT.NONE);
-      GridDataFactory.create(m_sizeLabel).grabH().fillH();
-    }
-    // image canvas
-    {
-      m_imageCanvas = new Canvas(this, SWT.NONE);
-      GridDataFactory.create(m_imageCanvas).grab().fill();
-      // paint listener
-      m_imageCanvas.addListener(SWT.Paint, new Listener() {
-        @Override
-        public void handleEvent(Event event) {
-          Rectangle clientArea = m_imageCanvas.getClientArea();
-          GC gc = event.gc;
-          if (m_imageInfo != null && m_imageInfo.getImage() != null) {
-            Image image = m_imageInfo.getImage();
-            UiUtils.drawScaledImage(gc, image, clientArea);
-          } else {
-            String text = Messages.ImagePreviewComposite_noPreview;
-            Point extent = gc.textExtent(text);
-            int x = clientArea.x + (clientArea.width - extent.x) / 2;
-            int y = clientArea.y + (clientArea.height - extent.y) / 2;
-            gc.setForeground(m_imageCanvas.getDisplay().getSystemColor(SWT.COLOR_DARK_GRAY));
-            gc.drawText(text, x, y);
-          }
-        }
-      });
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ImagePreviewComposite(Composite parent, int style) {
+		super(parent, style);
+		GridLayoutFactory.create(this);
+		// dimension label
+		{
+			m_dimensionLabel = new Label(this, SWT.NONE);
+			GridDataFactory.create(m_dimensionLabel).grabH().fillH();
+		}
+		// size label
+		{
+			m_sizeLabel = new Label(this, SWT.NONE);
+			GridDataFactory.create(m_sizeLabel).grabH().fillH();
+		}
+		// image canvas
+		{
+			m_imageCanvas = new Canvas(this, SWT.NONE);
+			GridDataFactory.create(m_imageCanvas).grab().fill();
+			// paint listener
+			m_imageCanvas.addListener(SWT.Paint, new Listener() {
+				@Override
+				public void handleEvent(Event event) {
+					Rectangle clientArea = m_imageCanvas.getClientArea();
+					GC gc = event.gc;
+					if (m_imageInfo != null && m_imageInfo.getImage() != null) {
+						Image image = m_imageInfo.getImage();
+						UiUtils.drawScaledImage(gc, image, clientArea);
+					} else {
+						String text = Messages.ImagePreviewComposite_noPreview;
+						Point extent = gc.textExtent(text);
+						int x = clientArea.x + (clientArea.width - extent.x) / 2;
+						int y = clientArea.y + (clientArea.height - extent.y) / 2;
+						gc.setForeground(m_imageCanvas.getDisplay().getSystemColor(SWT.COLOR_DARK_GRAY));
+						gc.drawText(text, x, y);
+					}
+				}
+			});
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void setImageInfo(ImageInfo imageInfo) {
-    m_imageInfo = imageInfo;
-    if (m_imageInfo != null && m_imageInfo.getImage() != null) {
-      // update dimension
-      {
-        Rectangle bounds = m_imageInfo.getImage().getBounds();
-        m_dimensionLabel.setText(MessageFormat.format(
-            Messages.ImagePreviewComposite_dimension,
-            bounds.width,
-            bounds.height));
-      }
-      // update size
-      {
-        long size = m_imageInfo.getSize();
-        if (size != -1) {
-          m_sizeLabel.setText(MessageFormat.format(Messages.ImagePreviewComposite_size, size));
-        } else {
-          m_sizeLabel.setText(Messages.ImagePreviewComposite_sizeNA);
-        }
-      }
-    } else {
-      m_dimensionLabel.setText("");
-      m_sizeLabel.setText("");
-    }
-    // update image
-    m_imageCanvas.redraw();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void setImageInfo(ImageInfo imageInfo) {
+		m_imageInfo = imageInfo;
+		if (m_imageInfo != null && m_imageInfo.getImage() != null) {
+			// update dimension
+			{
+				Rectangle bounds = m_imageInfo.getImage().getBounds();
+				m_dimensionLabel.setText(MessageFormat.format(
+						Messages.ImagePreviewComposite_dimension,
+						bounds.width,
+						bounds.height));
+			}
+			// update size
+			{
+				long size = m_imageInfo.getSize();
+				if (size != -1) {
+					m_sizeLabel.setText(MessageFormat.format(Messages.ImagePreviewComposite_size, size));
+				} else {
+					m_sizeLabel.setText(Messages.ImagePreviewComposite_sizeNA);
+				}
+			}
+		} else {
+			m_dimensionLabel.setText("");
+			m_sizeLabel.setText("");
+		}
+		// update image
+		m_imageCanvas.redraw();
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/pages/ClasspathImagePage.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/pages/ClasspathImagePage.java
index 0409c9a50..0843654db 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/pages/ClasspathImagePage.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/pages/ClasspathImagePage.java
@@ -26,32 +26,32 @@
  * @coverage core.ui
  */
 public final class ClasspathImagePage extends AbstractBrowseImagePage {
-  public static final String ID = "CLASSPATH";
+	public static final String ID = "CLASSPATH";
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ClasspathImagePage(Composite parent,
-      int style,
-      AbstractImageDialog imageDialog,
-      IJavaProject javaProject) {
-    super(parent, style, imageDialog, new ClasspathImageRoot(ID, javaProject));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ClasspathImagePage(Composite parent,
+			int style,
+			AbstractImageDialog imageDialog,
+			IJavaProject javaProject) {
+		super(parent, style, imageDialog, new ClasspathImageRoot(ID, javaProject));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getId() {
-    return ID;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getId() {
+		return ID;
+	}
 
-  @Override
-  public String getTitle() {
-    return Messages.ClasspathImagePage_title;
-  }
+	@Override
+	public String getTitle() {
+		return Messages.ClasspathImagePage_title;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/pages/DefaultImagePage.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/pages/DefaultImagePage.java
index b781f32b3..816304d87 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/pages/DefaultImagePage.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/pages/DefaultImagePage.java
@@ -24,43 +24,43 @@
  * @coverage core.ui
  */
 public final class DefaultImagePage extends AbstractImagePage {
-  public static final String ID = "DEFAULT";
+	public static final String ID = "DEFAULT";
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DefaultImagePage(Composite parent, int style, AbstractImageDialog imageDialog) {
-    super(parent, style, imageDialog);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DefaultImagePage(Composite parent, int style, AbstractImageDialog imageDialog) {
+		super(parent, style, imageDialog);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getId() {
-    return ID;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getId() {
+		return ID;
+	}
 
-  @Override
-  public String getTitle() {
-    return Messages.DefaultImagePage_title;
-  }
+	@Override
+	public String getTitle() {
+		return Messages.DefaultImagePage_title;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AbstractImagePage
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void activate() {
-    m_imageDialog.setResultImageInfo(new ImageInfo(ID, null, null, -1));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AbstractImagePage
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void activate() {
+		m_imageDialog.setResultImageInfo(new ImageInfo(ID, null, null, -1));
+	}
 
-  @Override
-  public void setInput(Object data) {
-  }
+	@Override
+	public void setInput(Object data) {
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/pages/FileImagePage.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/pages/FileImagePage.java
index cb00e33a9..befefa2be 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/pages/FileImagePage.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/pages/FileImagePage.java
@@ -42,122 +42,122 @@
  * @coverage core.ui
  */
 public final class FileImagePage extends AbstractImagePage {
-  public static final String ID = "FILE";
-  private final Map<String, ImageInfo> m_pathToImageInfo = Maps.newTreeMap();
-  private final Text m_pathText;
+	public static final String ID = "FILE";
+	private final Map<String, ImageInfo> m_pathToImageInfo = Maps.newTreeMap();
+	private final Text m_pathText;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FileImagePage(Composite parent, int style, AbstractImageDialog imageDialog) {
-    super(parent, style, imageDialog);
-    GridLayoutFactory.create(this).columns(2);
-    // add dispose listener
-    addListener(SWT.Dispose, new Listener() {
-      @Override
-      public void handleEvent(Event event) {
-        for (ImageInfo imageInfo : m_pathToImageInfo.values()) {
-          imageInfo.getImage().dispose();
-        }
-      }
-    });
-    // path
-    {
-      m_pathText = new Text(this, SWT.BORDER);
-      GridDataFactory.create(m_pathText).grabH().hintHC(50).fillH();
-      // add listener
-      m_pathText.addListener(SWT.Modify, new Listener() {
-        @Override
-        public void handleEvent(Event event) {
-          updateImageInfo();
-        }
-      });
-    }
-    // "Browse" button
-    {
-      Button button = new Button(this, SWT.NONE);
-      GridDataFactory.create(button).hintHU(IDialogConstants.BUTTON_WIDTH).fill();
-      button.setText(Messages.FileImagePage_browseButton);
-      button.addListener(SWT.Selection, new Listener() {
-        @Override
-        public void handleEvent(Event event) {
-          FileDialog fileDialog = new FileDialog(getShell(), SWT.OPEN);
-          fileDialog.setFilterPath(m_pathText.getText());
-          String newPath = fileDialog.open();
-          if (newPath != null) {
-            m_pathText.setText(newPath);
-          }
-        }
-      });
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FileImagePage(Composite parent, int style, AbstractImageDialog imageDialog) {
+		super(parent, style, imageDialog);
+		GridLayoutFactory.create(this).columns(2);
+		// add dispose listener
+		addListener(SWT.Dispose, new Listener() {
+			@Override
+			public void handleEvent(Event event) {
+				for (ImageInfo imageInfo : m_pathToImageInfo.values()) {
+					imageInfo.getImage().dispose();
+				}
+			}
+		});
+		// path
+		{
+			m_pathText = new Text(this, SWT.BORDER);
+			GridDataFactory.create(m_pathText).grabH().hintHC(50).fillH();
+			// add listener
+			m_pathText.addListener(SWT.Modify, new Listener() {
+				@Override
+				public void handleEvent(Event event) {
+					updateImageInfo();
+				}
+			});
+		}
+		// "Browse" button
+		{
+			Button button = new Button(this, SWT.NONE);
+			GridDataFactory.create(button).hintHU(IDialogConstants.BUTTON_WIDTH).fill();
+			button.setText(Messages.FileImagePage_browseButton);
+			button.addListener(SWT.Selection, new Listener() {
+				@Override
+				public void handleEvent(Event event) {
+					FileDialog fileDialog = new FileDialog(getShell(), SWT.OPEN);
+					fileDialog.setFilterPath(m_pathText.getText());
+					String newPath = fileDialog.open();
+					if (newPath != null) {
+						m_pathText.setText(newPath);
+					}
+				}
+			});
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Internal
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Updates {@link ImageInfo} according selected path.
-   */
-  private void updateImageInfo() {
-    String path = m_pathText.getText();
-    ImageInfo imageInfo = m_pathToImageInfo.get(path);
-    if (imageInfo == null) {
-      File file = new File(path);
-      if (file.exists() && !file.isDirectory()) {
-        // prepare image
-        Image image;
-        try {
-          FileInputStream is = new FileInputStream(file);
-          try {
-            image = new Image(getDisplay(), is);
-          } finally {
-            IOUtils.closeQuietly(is);
-          }
-        } catch (Throwable e) {
-          m_imageDialog.setResultImageInfo(null);
-          return;
-        }
-        // prepare ImageInfo
-        imageInfo = new ImageInfo(ID, path, image, file.length());
-        m_pathToImageInfo.put(path, imageInfo);
-      }
-    }
-    // set image to dialog
-    m_imageDialog.setResultImageInfo(imageInfo);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Internal
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Updates {@link ImageInfo} according selected path.
+	 */
+	private void updateImageInfo() {
+		String path = m_pathText.getText();
+		ImageInfo imageInfo = m_pathToImageInfo.get(path);
+		if (imageInfo == null) {
+			File file = new File(path);
+			if (file.exists() && !file.isDirectory()) {
+				// prepare image
+				Image image;
+				try {
+					FileInputStream is = new FileInputStream(file);
+					try {
+						image = new Image(getDisplay(), is);
+					} finally {
+						IOUtils.closeQuietly(is);
+					}
+				} catch (Throwable e) {
+					m_imageDialog.setResultImageInfo(null);
+					return;
+				}
+				// prepare ImageInfo
+				imageInfo = new ImageInfo(ID, path, image, file.length());
+				m_pathToImageInfo.put(path, imageInfo);
+			}
+		}
+		// set image to dialog
+		m_imageDialog.setResultImageInfo(imageInfo);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getId() {
-    return ID;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getId() {
+		return ID;
+	}
 
-  @Override
-  public String getTitle() {
-    return Messages.FileImagePage_title;
-  }
+	@Override
+	public String getTitle() {
+		return Messages.FileImagePage_title;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AbstractImagePage
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void activate() {
-    updateImageInfo();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AbstractImagePage
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void activate() {
+		updateImageInfo();
+	}
 
-  @Override
-  public void setInput(Object data) {
-    String path = (String) data;
-    m_pathText.setText(path);
-  }
+	@Override
+	public void setInput(Object data) {
+		String path = (String) data;
+		m_pathText.setText(path);
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/pages/NullImagePage.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/pages/NullImagePage.java
index 944bb32e7..289699beb 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/pages/NullImagePage.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/pages/NullImagePage.java
@@ -24,43 +24,43 @@
  * @coverage core.ui
  */
 public final class NullImagePage extends AbstractImagePage {
-  public static final String ID = "NULL";
+	public static final String ID = "NULL";
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public NullImagePage(Composite parent, int style, AbstractImageDialog imageDialog) {
-    super(parent, style, imageDialog);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public NullImagePage(Composite parent, int style, AbstractImageDialog imageDialog) {
+		super(parent, style, imageDialog);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getId() {
-    return ID;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getId() {
+		return ID;
+	}
 
-  @Override
-  public String getTitle() {
-    return Messages.NullImagePage_title;
-  }
+	@Override
+	public String getTitle() {
+		return Messages.NullImagePage_title;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AbstractImagePage
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void activate() {
-    m_imageDialog.setResultImageInfo(new ImageInfo(ID, null, null, -1));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AbstractImagePage
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void activate() {
+		m_imageDialog.setResultImageInfo(new ImageInfo(ID, null, null, -1));
+	}
 
-  @Override
-  public void setInput(Object data) {
-  }
+	@Override
+	public void setInput(Object data) {
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/pages/browse/AbstractBrowseImagePage.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/pages/browse/AbstractBrowseImagePage.java
index 5c9575382..214164c04 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/pages/browse/AbstractBrowseImagePage.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/pages/browse/AbstractBrowseImagePage.java
@@ -45,191 +45,191 @@
  * @coverage core.ui
  */
 public abstract class AbstractBrowseImagePage extends AbstractImagePage {
-  private final TreeViewer m_viewer;
-  private final IImageRoot m_root;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractBrowseImagePage(Composite parent,
-      int style,
-      AbstractImageDialog imageDialog,
-      IImageRoot root) {
-    super(parent, style, imageDialog);
-    m_root = root;
-    //
-    GridLayoutFactory.create(this);
-    addListener(SWT.Dispose, new Listener() {
-      @Override
-      public void handleEvent(Event event) {
-        m_root.dispose();
-      }
-    });
-    // create viewer
-    {
-      m_viewer = new TreeViewer(this, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
-      GridDataFactory.create(m_viewer.getTree()).hintC(50, 20).grab().fill();
-      m_viewer.getTree().setData("org.eclipse.jface.viewers.TreeViewer", m_viewer);
-      // set providers
-      m_viewer.setContentProvider(new ImageContentProvider());
-      m_viewer.setLabelProvider(new ImageLabelProvider());
-      // add listeners
-      m_viewer.addSelectionChangedListener(new ISelectionChangedListener() {
-        @Override
-        public void selectionChanged(SelectionChangedEvent event) {
-          IStructuredSelection selection = (IStructuredSelection) m_viewer.getSelection();
-          if (selection.getFirstElement() instanceof IImageResource) {
-            IImageResource resource = (IImageResource) selection.getFirstElement();
-            m_imageDialog.setResultImageInfo(resource.getImageInfo());
-          } else {
-            m_imageDialog.setResultImageInfo(null);
-          }
-        }
-      });
-      m_viewer.addDoubleClickListener(new IDoubleClickListener() {
-        @Override
-        public void doubleClick(DoubleClickEvent event) {
-          m_imageDialog.closeOk();
-        }
-      });
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AbstractImagePage
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void activate() {
-    m_viewer.setInput(m_root);
-    m_imageDialog.setResultImageInfo(null);
-  }
-
-  @Override
-  public void setInput(Object data) {
-    Object[] selectionPath = m_root.getSelectionPath(data);
-    if (selectionPath != null) {
-      m_viewer.setExpandedElements(selectionPath);
-      m_viewer.setSelection(new StructuredSelection(selectionPath[selectionPath.length - 1]));
-    }
-  }
-
-  protected final void refresh() {
-    m_viewer.refresh();
-  }
-
-  protected final TreeViewer getViewer() {
-    return m_viewer;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Content provider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * {@link ITreeContentProvider} for {@link IImageElement}.
-   *
-   * @author scheglov_ke
-   */
-  private static final class ImageContentProvider implements ITreeContentProvider {
-    @Override
-    public Object[] getElements(Object inputElement) {
-      try {
-        IImageRoot root = (IImageRoot) inputElement;
-        return root.elements();
-      } catch (Throwable e) {
-      }
-      return ArrayUtils.EMPTY_OBJECT_ARRAY;
-    }
-
-    @Override
-    public boolean hasChildren(Object element) {
-      if (element instanceof IHasChildren) {
-        IHasChildren tester = (IHasChildren) element;
-        return tester.hasChildren();
-      }
-      return getChildren(element).length != 0;
-    }
-
-    @Override
-    public Object[] getChildren(Object parentElement) {
-      try {
-        if (parentElement instanceof IImageContainer) {
-          IImageContainer container = (IImageContainer) parentElement;
-          return container.elements();
-        }
-      } catch (Throwable e) {
-      }
-      return ArrayUtils.EMPTY_OBJECT_ARRAY;
-    }
-
-    @Override
-    public Object getParent(Object element) {
-      return null;
-    }
-
-    @Override
-    public void dispose() {
-    }
-
-    @Override
-    public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
-    }
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Label provider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * {@link LabelProvider} for {@link IImageElement}.
-   *
-   * @author scheglov_ke
-   */
-  private static final class ImageLabelProvider extends LabelProvider {
-    @Override
-    public Image getImage(Object element) {
-      if (element instanceof IImageElement) {
-        IImageElement imageElement = (IImageElement) element;
-        return imageElement.getImage();
-      }
-      return null;
-    }
-
-    @Override
-    public String getText(Object element) {
-      if (element instanceof IImageContainer) {
-        IImageContainer container = (IImageContainer) element;
-        return container.getName();
-      } else if (element instanceof IImageResource) {
-        IImageResource resource = (IImageResource) element;
-        return resource.getName();
-      }
-      return "???";
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if given extension is valid image extension.
-   */
-  public static boolean isImageExtension(String extension) {
-    if (extension == null) {
-      return false;
-    }
-    return extension.equalsIgnoreCase("gif")
-        || extension.equalsIgnoreCase("png")
-        || extension.equalsIgnoreCase("jpg")
-        || extension.equalsIgnoreCase("jpeg")
-        || extension.equalsIgnoreCase("bmp")
-        || extension.equalsIgnoreCase("ico");
-  }
+	private final TreeViewer m_viewer;
+	private final IImageRoot m_root;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractBrowseImagePage(Composite parent,
+			int style,
+			AbstractImageDialog imageDialog,
+			IImageRoot root) {
+		super(parent, style, imageDialog);
+		m_root = root;
+		//
+		GridLayoutFactory.create(this);
+		addListener(SWT.Dispose, new Listener() {
+			@Override
+			public void handleEvent(Event event) {
+				m_root.dispose();
+			}
+		});
+		// create viewer
+		{
+			m_viewer = new TreeViewer(this, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
+			GridDataFactory.create(m_viewer.getTree()).hintC(50, 20).grab().fill();
+			m_viewer.getTree().setData("org.eclipse.jface.viewers.TreeViewer", m_viewer);
+			// set providers
+			m_viewer.setContentProvider(new ImageContentProvider());
+			m_viewer.setLabelProvider(new ImageLabelProvider());
+			// add listeners
+			m_viewer.addSelectionChangedListener(new ISelectionChangedListener() {
+				@Override
+				public void selectionChanged(SelectionChangedEvent event) {
+					IStructuredSelection selection = (IStructuredSelection) m_viewer.getSelection();
+					if (selection.getFirstElement() instanceof IImageResource) {
+						IImageResource resource = (IImageResource) selection.getFirstElement();
+						m_imageDialog.setResultImageInfo(resource.getImageInfo());
+					} else {
+						m_imageDialog.setResultImageInfo(null);
+					}
+				}
+			});
+			m_viewer.addDoubleClickListener(new IDoubleClickListener() {
+				@Override
+				public void doubleClick(DoubleClickEvent event) {
+					m_imageDialog.closeOk();
+				}
+			});
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AbstractImagePage
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void activate() {
+		m_viewer.setInput(m_root);
+		m_imageDialog.setResultImageInfo(null);
+	}
+
+	@Override
+	public void setInput(Object data) {
+		Object[] selectionPath = m_root.getSelectionPath(data);
+		if (selectionPath != null) {
+			m_viewer.setExpandedElements(selectionPath);
+			m_viewer.setSelection(new StructuredSelection(selectionPath[selectionPath.length - 1]));
+		}
+	}
+
+	protected final void refresh() {
+		m_viewer.refresh();
+	}
+
+	protected final TreeViewer getViewer() {
+		return m_viewer;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Content provider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * {@link ITreeContentProvider} for {@link IImageElement}.
+	 *
+	 * @author scheglov_ke
+	 */
+	private static final class ImageContentProvider implements ITreeContentProvider {
+		@Override
+		public Object[] getElements(Object inputElement) {
+			try {
+				IImageRoot root = (IImageRoot) inputElement;
+				return root.elements();
+			} catch (Throwable e) {
+			}
+			return ArrayUtils.EMPTY_OBJECT_ARRAY;
+		}
+
+		@Override
+		public boolean hasChildren(Object element) {
+			if (element instanceof IHasChildren) {
+				IHasChildren tester = (IHasChildren) element;
+				return tester.hasChildren();
+			}
+			return getChildren(element).length != 0;
+		}
+
+		@Override
+		public Object[] getChildren(Object parentElement) {
+			try {
+				if (parentElement instanceof IImageContainer) {
+					IImageContainer container = (IImageContainer) parentElement;
+					return container.elements();
+				}
+			} catch (Throwable e) {
+			}
+			return ArrayUtils.EMPTY_OBJECT_ARRAY;
+		}
+
+		@Override
+		public Object getParent(Object element) {
+			return null;
+		}
+
+		@Override
+		public void dispose() {
+		}
+
+		@Override
+		public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+		}
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Label provider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * {@link LabelProvider} for {@link IImageElement}.
+	 *
+	 * @author scheglov_ke
+	 */
+	private static final class ImageLabelProvider extends LabelProvider {
+		@Override
+		public Image getImage(Object element) {
+			if (element instanceof IImageElement) {
+				IImageElement imageElement = (IImageElement) element;
+				return imageElement.getImage();
+			}
+			return null;
+		}
+
+		@Override
+		public String getText(Object element) {
+			if (element instanceof IImageContainer) {
+				IImageContainer container = (IImageContainer) element;
+				return container.getName();
+			} else if (element instanceof IImageResource) {
+				IImageResource resource = (IImageResource) element;
+				return resource.getName();
+			}
+			return "???";
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if given extension is valid image extension.
+	 */
+	public static boolean isImageExtension(String extension) {
+		if (extension == null) {
+			return false;
+		}
+		return extension.equalsIgnoreCase("gif")
+				|| extension.equalsIgnoreCase("png")
+				|| extension.equalsIgnoreCase("jpg")
+				|| extension.equalsIgnoreCase("jpeg")
+				|| extension.equalsIgnoreCase("bmp")
+				|| extension.equalsIgnoreCase("ico");
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/pages/browse/classpath/AbstractJarImageElement.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/pages/browse/classpath/AbstractJarImageElement.java
index e984c7c70..1db916938 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/pages/browse/classpath/AbstractJarImageElement.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/pages/browse/classpath/AbstractJarImageElement.java
@@ -21,16 +21,16 @@
  * @coverage core.ui
  */
 public abstract class AbstractJarImageElement implements IImageElement {
-  protected final JarImageContainer m_jarContainer;
-  protected final IPath m_entryPath;
+	protected final JarImageContainer m_jarContainer;
+	protected final IPath m_entryPath;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractJarImageElement(JarImageContainer jarContainer, IPath entryPath) {
-    m_jarContainer = jarContainer;
-    m_entryPath = entryPath;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractJarImageElement(JarImageContainer jarContainer, IPath entryPath) {
+		m_jarContainer = jarContainer;
+		m_entryPath = entryPath;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/pages/browse/classpath/ClasspathImageRoot.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/pages/browse/classpath/ClasspathImageRoot.java
index d697e2b1f..1f41773b8 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/pages/browse/classpath/ClasspathImageRoot.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/pages/browse/classpath/ClasspathImageRoot.java
@@ -33,96 +33,96 @@
  * @coverage core.ui
  */
 public final class ClasspathImageRoot implements IImageRoot {
-  private final IJavaProject m_project;
-  private final IClasspathImageContainer m_containers[];
+	private final IJavaProject m_project;
+	private final IClasspathImageContainer m_containers[];
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ClasspathImageRoot(String id, IJavaProject project) {
-    m_project = project;
-    //
-    List<IImageContainer> containers = Lists.newArrayList();
-    try {
-      IPackageFragmentRoot[] roots = m_project.getAllPackageFragmentRoots();
-      for (int i = 0; i < roots.length; i++) {
-        IPackageFragmentRoot root = roots[i];
-        try {
-          if (root.isArchive()) {
-            JarImageContainer jarContainer = new JarImageContainer(id, root);
-            String iconClasspaths = InstanceScope.INSTANCE.getNode(
-                IEditorPreferenceConstants.WB_BASIC_UI_PREFERENCE_NODE).get(
-                    IEditorPreferenceConstants.WB_CLASSPATH_ICONS,
-                    null);
-            if (iconClasspaths == null || jarContainer.getName().equals(iconClasspaths)) {
-              if (!jarContainer.isEmpty()) {
-                containers.add(jarContainer);
-              }
-            }
-          } else {
-            SrcImageContainer srcContainer = new SrcImageContainer(id, root);
-            if (!srcContainer.isEmpty()) {
-              containers.add(srcContainer);
-            }
-          }
-        } catch (Throwable e) {
-        }
-      }
-    } catch (Throwable e) {
-    }
-    m_containers = containers.toArray(new IClasspathImageContainer[containers.size()]);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ClasspathImageRoot(String id, IJavaProject project) {
+		m_project = project;
+		//
+		List<IImageContainer> containers = Lists.newArrayList();
+		try {
+			IPackageFragmentRoot[] roots = m_project.getAllPackageFragmentRoots();
+			for (int i = 0; i < roots.length; i++) {
+				IPackageFragmentRoot root = roots[i];
+				try {
+					if (root.isArchive()) {
+						JarImageContainer jarContainer = new JarImageContainer(id, root);
+						String iconClasspaths = InstanceScope.INSTANCE.getNode(
+								IEditorPreferenceConstants.WB_BASIC_UI_PREFERENCE_NODE).get(
+										IEditorPreferenceConstants.WB_CLASSPATH_ICONS,
+										null);
+						if (iconClasspaths == null || jarContainer.getName().equals(iconClasspaths)) {
+							if (!jarContainer.isEmpty()) {
+								containers.add(jarContainer);
+							}
+						}
+					} else {
+						SrcImageContainer srcContainer = new SrcImageContainer(id, root);
+						if (!srcContainer.isEmpty()) {
+							containers.add(srcContainer);
+						}
+					}
+				} catch (Throwable e) {
+				}
+			}
+		} catch (Throwable e) {
+		}
+		m_containers = containers.toArray(new IClasspathImageContainer[containers.size()]);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IImageRoot
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void dispose() {
-    for (IClasspathImageContainer container : m_containers) {
-      container.dispose();
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IImageRoot
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void dispose() {
+		for (IClasspathImageContainer container : m_containers) {
+			container.dispose();
+		}
+	}
 
-  @Override
-  public IClasspathImageContainer[] elements() {
-    return m_containers;
-  }
+	@Override
+	public IClasspathImageContainer[] elements() {
+		return m_containers;
+	}
 
-  @Override
-  public Object[] getSelectionPath(Object data) {
-    if (data instanceof String) {
-      // prepare path
-      String path = (String) data;
-      if (!path.startsWith("/")) {
-        return null;
-      }
-      path = path.substring(1);
-      // prepare package and resource names
-      IPath pathObject = new Path(path);
-      String packageName = pathObject.removeLastSegments(1).toPortableString().replace('/', '.');
-      String resourceName = pathObject.lastSegment();
-      // try each root container
-      for (IClasspathImageContainer rootContainer : m_containers) {
-        // try each package container
-        IImageContainer[] packageContainers = rootContainer.elements();
-        for (IImageContainer packageContainer : packageContainers) {
-          if (packageContainer.getName().equals(packageName)) {
-            // try each resource in package
-            IImageElement[] elements = packageContainer.elements();
-            for (IImageElement element : elements) {
-              if (element.getName().equals(resourceName)) {
-                return new Object[]{rootContainer, packageContainer, element};
-              }
-            }
-          }
-        }
-      }
-    }
-    // don't know
-    return null;
-  }
+	@Override
+	public Object[] getSelectionPath(Object data) {
+		if (data instanceof String) {
+			// prepare path
+			String path = (String) data;
+			if (!path.startsWith("/")) {
+				return null;
+			}
+			path = path.substring(1);
+			// prepare package and resource names
+			IPath pathObject = new Path(path);
+			String packageName = pathObject.removeLastSegments(1).toPortableString().replace('/', '.');
+			String resourceName = pathObject.lastSegment();
+			// try each root container
+			for (IClasspathImageContainer rootContainer : m_containers) {
+				// try each package container
+				IImageContainer[] packageContainers = rootContainer.elements();
+				for (IImageContainer packageContainer : packageContainers) {
+					if (packageContainer.getName().equals(packageName)) {
+						// try each resource in package
+						IImageElement[] elements = packageContainer.elements();
+						for (IImageElement element : elements) {
+							if (element.getName().equals(resourceName)) {
+								return new Object[]{rootContainer, packageContainer, element};
+							}
+						}
+					}
+				}
+			}
+		}
+		// don't know
+		return null;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/pages/browse/classpath/IClasspathImageContainer.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/pages/browse/classpath/IClasspathImageContainer.java
index 3e6afae7c..36c6721ec 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/pages/browse/classpath/IClasspathImageContainer.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/pages/browse/classpath/IClasspathImageContainer.java
@@ -19,19 +19,19 @@
  * @coverage core.ui
  */
 interface IClasspathImageContainer extends IImageContainer {
-  /**
-   * @return the children {@link IImageContainer}'s.
-   */
-  @Override
-  IImageContainer[] elements();
+	/**
+	 * @return the children {@link IImageContainer}'s.
+	 */
+	@Override
+	IImageContainer[] elements();
 
-  /**
-   * @return <code>true</code> if this jar does not have any images.
-   */
-  boolean isEmpty();
+	/**
+	 * @return <code>true</code> if this jar does not have any images.
+	 */
+	boolean isEmpty();
 
-  /**
-   * Disposes any allocated resources.
-   */
-  void dispose();
+	/**
+	 * Disposes any allocated resources.
+	 */
+	void dispose();
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/pages/browse/classpath/JarImageContainer.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/pages/browse/classpath/JarImageContainer.java
index 236fda31a..e6eb16c60 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/pages/browse/classpath/JarImageContainer.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/pages/browse/classpath/JarImageContainer.java
@@ -38,138 +38,138 @@
  * @coverage core.ui
  */
 final class JarImageContainer implements IClasspathImageContainer {
-  private final String m_id;
-  private final IPackageFragmentRoot m_root;
-  private final JarFile m_jarFile;
-  private final Map<IPath, JarPackageImageContainer> m_packagePathToEntryMap = Maps.newHashMap();
+	private final String m_id;
+	private final IPackageFragmentRoot m_root;
+	private final JarFile m_jarFile;
+	private final Map<IPath, JarPackageImageContainer> m_packagePathToEntryMap = Maps.newHashMap();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public JarImageContainer(String id, IPackageFragmentRoot packageFragmentRoot) throws Exception {
-    m_id = id;
-    m_root = packageFragmentRoot;
-    // open jar file
-    {
-      IPath jarPath = m_root.isExternal() ? m_root.getPath() : m_root.getResource().getLocation();
-      m_jarFile = new JarFile(jarPath.toOSString());
-    }
-    //
-    for (Enumeration<JarEntry> E = m_jarFile.entries(); E.hasMoreElements();) {
-      JarEntry entry = E.nextElement();
-      // prepare entry information
-      String entryName = entry.getName();
-      IPath entryPath = new Path(entryName);
-      // add image
-      if (AbstractBrowseImagePage.isImageExtension(entryPath.getFileExtension())) {
-        // prepare package container
-        JarPackageImageContainer packageEntry;
-        {
-          IPath packagePath = entryPath.removeLastSegments(1);
-          packageEntry = m_packagePathToEntryMap.get(packagePath);
-          if (packageEntry == null) {
-            packageEntry = new JarPackageImageContainer(this, packagePath);
-            m_packagePathToEntryMap.put(packagePath, packageEntry);
-          }
-        }
-        // add resource to package
-        packageEntry.addImageEntry(new JarImageResource(this, entryPath));
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public JarImageContainer(String id, IPackageFragmentRoot packageFragmentRoot) throws Exception {
+		m_id = id;
+		m_root = packageFragmentRoot;
+		// open jar file
+		{
+			IPath jarPath = m_root.isExternal() ? m_root.getPath() : m_root.getResource().getLocation();
+			m_jarFile = new JarFile(jarPath.toOSString());
+		}
+		//
+		for (Enumeration<JarEntry> E = m_jarFile.entries(); E.hasMoreElements();) {
+			JarEntry entry = E.nextElement();
+			// prepare entry information
+			String entryName = entry.getName();
+			IPath entryPath = new Path(entryName);
+			// add image
+			if (AbstractBrowseImagePage.isImageExtension(entryPath.getFileExtension())) {
+				// prepare package container
+				JarPackageImageContainer packageEntry;
+				{
+					IPath packagePath = entryPath.removeLastSegments(1);
+					packageEntry = m_packagePathToEntryMap.get(packagePath);
+					if (packageEntry == null) {
+						packageEntry = new JarPackageImageContainer(this, packagePath);
+						m_packagePathToEntryMap.put(packagePath, packageEntry);
+					}
+				}
+				// add resource to package
+				packageEntry.addImageEntry(new JarImageResource(this, entryPath));
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IImageElement
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Image getImage() {
-    return JavaUI.getSharedImages().getImage(ISharedImages.IMG_OBJS_JAR);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IImageElement
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Image getImage() {
+		return JavaUI.getSharedImages().getImage(ISharedImages.IMG_OBJS_JAR);
+	}
 
-  @Override
-  public String getName() {
-    return m_root.getElementName();
-  }
+	@Override
+	public String getName() {
+		return m_root.getElementName();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IImageContainer
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public IImageContainer[] elements() {
-    return m_packagePathToEntryMap.values().toArray(
-        new IImageContainer[m_packagePathToEntryMap.size()]);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IImageContainer
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public IImageContainer[] elements() {
+		return m_packagePathToEntryMap.values().toArray(
+				new IImageContainer[m_packagePathToEntryMap.size()]);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Internal access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean isEmpty() {
-    return m_packagePathToEntryMap.isEmpty();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Internal access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean isEmpty() {
+		return m_packagePathToEntryMap.isEmpty();
+	}
 
-  @Override
-  public void dispose() {
-    try {
-      m_jarFile.close();
-    } catch (Throwable e) {
-    }
-    disposeJarImages();
-  }
+	@Override
+	public void dispose() {
+		try {
+			m_jarFile.close();
+		} catch (Throwable e) {
+		}
+		disposeJarImages();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Images
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Map<String, ImageInfo> m_nameToImageInfo = Maps.newHashMap();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Images
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Map<String, ImageInfo> m_nameToImageInfo = Maps.newHashMap();
 
-  /**
-   * Disposes images loaded from jar.
-   */
-  private void disposeJarImages() {
-    for (ImageInfo imageInfo : m_nameToImageInfo.values()) {
-      imageInfo.getImage().dispose();
-    }
-    m_nameToImageInfo = null;
-  }
+	/**
+	 * Disposes images loaded from jar.
+	 */
+	private void disposeJarImages() {
+		for (ImageInfo imageInfo : m_nameToImageInfo.values()) {
+			imageInfo.getImage().dispose();
+		}
+		m_nameToImageInfo = null;
+	}
 
-  /**
-   * @return the {@link Image} for {@link ZipEntry} with given name.
-   */
-  ImageInfo getImage(String entryName) {
-    ImageInfo imageInfo = m_nameToImageInfo.get(entryName);
-    if (imageInfo == null) {
-      // prepare entry in jar
-      ZipEntry entry = m_jarFile.getEntry(entryName);
-      if (entry == null) {
-        return null;
-      }
-      // load image
-      Image image;
-      try {
-        InputStream inputStream = m_jarFile.getInputStream(entry);
-        try {
-          image = new Image(Display.getCurrent(), inputStream);
-        } finally {
-          inputStream.close();
-        }
-      } catch (Throwable e) {
-        return null;
-      }
-      // add to cache
-      imageInfo = new ImageInfo(m_id, entryName, image, entry.getSize());
-      m_nameToImageInfo.put(entryName, imageInfo);
-    }
-    //
-    return imageInfo;
-  }
+	/**
+	 * @return the {@link Image} for {@link ZipEntry} with given name.
+	 */
+	ImageInfo getImage(String entryName) {
+		ImageInfo imageInfo = m_nameToImageInfo.get(entryName);
+		if (imageInfo == null) {
+			// prepare entry in jar
+			ZipEntry entry = m_jarFile.getEntry(entryName);
+			if (entry == null) {
+				return null;
+			}
+			// load image
+			Image image;
+			try {
+				InputStream inputStream = m_jarFile.getInputStream(entry);
+				try {
+					image = new Image(Display.getCurrent(), inputStream);
+				} finally {
+					inputStream.close();
+				}
+			} catch (Throwable e) {
+				return null;
+			}
+			// add to cache
+			imageInfo = new ImageInfo(m_id, entryName, image, entry.getSize());
+			m_nameToImageInfo.put(entryName, imageInfo);
+		}
+		//
+		return imageInfo;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/pages/browse/classpath/JarImageResource.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/pages/browse/classpath/JarImageResource.java
index ecd9efdaf..2751a5180 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/pages/browse/classpath/JarImageResource.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/pages/browse/classpath/JarImageResource.java
@@ -23,38 +23,38 @@
  * @coverage core.ui
  */
 final class JarImageResource extends AbstractJarImageElement implements IImageResource {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public JarImageResource(JarImageContainer jarContainer, IPath entryPath) {
-    super(jarContainer, entryPath);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public JarImageResource(JarImageContainer jarContainer, IPath entryPath) {
+		super(jarContainer, entryPath);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IImageElement
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Image getImage() {
-    ImageInfo imageInfo = getImageInfo();
-    return imageInfo != null ? imageInfo.getImage() : null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IImageElement
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Image getImage() {
+		ImageInfo imageInfo = getImageInfo();
+		return imageInfo != null ? imageInfo.getImage() : null;
+	}
 
-  @Override
-  public String getName() {
-    return m_entryPath.lastSegment();
-  }
+	@Override
+	public String getName() {
+		return m_entryPath.lastSegment();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IImageResource
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public ImageInfo getImageInfo() {
-    return m_jarContainer.getImage(m_entryPath.toOSString().replace('\\', '/'));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IImageResource
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public ImageInfo getImageInfo() {
+		return m_jarContainer.getImage(m_entryPath.toOSString().replace('\\', '/'));
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/pages/browse/classpath/JarPackageImageContainer.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/pages/browse/classpath/JarPackageImageContainer.java
index 0ac95f45a..1b99667f2 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/pages/browse/classpath/JarPackageImageContainer.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/pages/browse/classpath/JarPackageImageContainer.java
@@ -29,51 +29,51 @@
  * @coverage core.ui
  */
 final class JarPackageImageContainer extends AbstractJarImageElement implements IImageContainer {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public JarPackageImageContainer(JarImageContainer jarContainer, IPath entryPath) {
-    super(jarContainer, entryPath);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public JarPackageImageContainer(JarImageContainer jarContainer, IPath entryPath) {
+		super(jarContainer, entryPath);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IImageContainer
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public IImageElement[] elements() {
-    return m_imageEntryList.toArray(new IImageElement[m_imageEntryList.size()]);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IImageContainer
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public IImageElement[] elements() {
+		return m_imageEntryList.toArray(new IImageElement[m_imageEntryList.size()]);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IImageElement
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Image getImage() {
-    return JavaUI.getSharedImages().getImage(ISharedImages.IMG_OBJS_PACKAGE);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IImageElement
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Image getImage() {
+		return JavaUI.getSharedImages().getImage(ISharedImages.IMG_OBJS_PACKAGE);
+	}
 
-  @Override
-  public String getName() {
-    return m_entryPath.toString().replace('/', '.');
-  }
+	@Override
+	public String getName() {
+		return m_entryPath.toString().replace('/', '.');
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Image resources
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final List<JarImageResource> m_imageEntryList = Lists.newArrayList();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Image resources
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final List<JarImageResource> m_imageEntryList = Lists.newArrayList();
 
-  /**
-   * Adds given {@link JarImageResource} to this package.
-   */
-  void addImageEntry(JarImageResource resource) {
-    m_imageEntryList.add(resource);
-  }
+	/**
+	 * Adds given {@link JarImageResource} to this package.
+	 */
+	void addImageEntry(JarImageResource resource) {
+		m_imageEntryList.add(resource);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/pages/browse/classpath/SrcImageContainer.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/pages/browse/classpath/SrcImageContainer.java
index 4814aea73..47a7bcaa8 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/pages/browse/classpath/SrcImageContainer.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/pages/browse/classpath/SrcImageContainer.java
@@ -29,74 +29,74 @@
  * @coverage core.ui
  */
 final class SrcImageContainer implements IImageContainer, IClasspathImageContainer {
-  private final IPackageFragmentRoot m_packageFragmentRoot;
-  private final SrcPackageImageContainer[] m_packageContainers;
+	private final IPackageFragmentRoot m_packageFragmentRoot;
+	private final SrcPackageImageContainer[] m_packageContainers;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SrcImageContainer(String id, IPackageFragmentRoot packageFragmentRoot) throws Exception {
-    m_packageFragmentRoot = packageFragmentRoot;
-    //
-    List<SrcPackageImageContainer> packageContainers = Lists.newArrayList();
-    {
-      IJavaElement[] children = m_packageFragmentRoot.getChildren();
-      for (IJavaElement child : children) {
-        if (child instanceof IPackageFragment) {
-          IPackageFragment packageFragment = (IPackageFragment) child;
-          SrcPackageImageContainer container =
-              new SrcPackageImageContainer(id, packageFragmentRoot, packageFragment);
-          if (!container.isEmpty()) {
-            packageContainers.add(container);
-          }
-        }
-      }
-    }
-    m_packageContainers =
-        packageContainers.toArray(new SrcPackageImageContainer[packageContainers.size()]);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SrcImageContainer(String id, IPackageFragmentRoot packageFragmentRoot) throws Exception {
+		m_packageFragmentRoot = packageFragmentRoot;
+		//
+		List<SrcPackageImageContainer> packageContainers = Lists.newArrayList();
+		{
+			IJavaElement[] children = m_packageFragmentRoot.getChildren();
+			for (IJavaElement child : children) {
+				if (child instanceof IPackageFragment) {
+					IPackageFragment packageFragment = (IPackageFragment) child;
+					SrcPackageImageContainer container =
+							new SrcPackageImageContainer(id, packageFragmentRoot, packageFragment);
+					if (!container.isEmpty()) {
+						packageContainers.add(container);
+					}
+				}
+			}
+		}
+		m_packageContainers =
+				packageContainers.toArray(new SrcPackageImageContainer[packageContainers.size()]);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IImageElement
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Image getImage() {
-    return DesignerPlugin.getImage("folder_package.gif");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IImageElement
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Image getImage() {
+		return DesignerPlugin.getImage("folder_package.gif");
+	}
 
-  @Override
-  public String getName() {
-    return m_packageFragmentRoot.getElementName();
-  }
+	@Override
+	public String getName() {
+		return m_packageFragmentRoot.getElementName();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IImageContainer
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public IImageContainer[] elements() {
-    return m_packageContainers;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IImageContainer
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public IImageContainer[] elements() {
+		return m_packageContainers;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Internal access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean isEmpty() {
-    return m_packageContainers.length == 0;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Internal access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean isEmpty() {
+		return m_packageContainers.length == 0;
+	}
 
-  @Override
-  public void dispose() {
-    for (SrcPackageImageContainer container : m_packageContainers) {
-      container.dispose();
-    }
-  }
+	@Override
+	public void dispose() {
+		for (SrcPackageImageContainer container : m_packageContainers) {
+			container.dispose();
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/pages/browse/classpath/SrcImageResource.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/pages/browse/classpath/SrcImageResource.java
index fb2fdb2d3..468cbb60d 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/pages/browse/classpath/SrcImageResource.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/pages/browse/classpath/SrcImageResource.java
@@ -30,86 +30,86 @@
  * @coverage core.ui
  */
 final class SrcImageResource implements IImageResource {
-  private final String m_id;
-  private final IPackageFragmentRoot m_packageFragmentRoot;
-  private final IFile m_file;
+	private final String m_id;
+	private final IPackageFragmentRoot m_packageFragmentRoot;
+	private final IFile m_file;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SrcImageResource(String id, IPackageFragmentRoot packageFragmentRoot, IFile file) {
-    m_id = id;
-    m_packageFragmentRoot = packageFragmentRoot;
-    m_file = file;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SrcImageResource(String id, IPackageFragmentRoot packageFragmentRoot, IFile file) {
+		m_id = id;
+		m_packageFragmentRoot = packageFragmentRoot;
+		m_file = file;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IImageElement
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Image getImage() {
-    ImageInfo imageInfo = getImageInfo();
-    return imageInfo != null ? imageInfo.getImage() : null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IImageElement
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Image getImage() {
+		ImageInfo imageInfo = getImageInfo();
+		return imageInfo != null ? imageInfo.getImage() : null;
+	}
 
-  @Override
-  public String getName() {
-    return m_file.getFullPath().lastSegment();
-  }
+	@Override
+	public String getName() {
+		return m_file.getFullPath().lastSegment();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IImageResource
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private ImageInfo m_imageInfo;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IImageResource
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private ImageInfo m_imageInfo;
 
-  @Override
-  public ImageInfo getImageInfo() {
-    if (m_imageInfo == null) {
-      try {
-        // prepare path in class path
-        String path;
-        {
-          int srcSegments = m_packageFragmentRoot.getResource().getFullPath().segmentCount();
-          path = m_file.getFullPath().removeFirstSegments(srcSegments).toOSString();
-          path = path.replace('\\', '/');
-        }
-        // load image
-        Image image;
-        try {
-          InputStream inputStream = m_file.getContents();
-          try {
-            image = new Image(Display.getCurrent(), inputStream);
-          } finally {
-            inputStream.close();
-          }
-        } catch (Throwable e) {
-          return null;
-        }
-        // add to cache
-        m_imageInfo = new ImageInfo(m_id, path, image, -1);
-      } catch (Throwable e) {
-      }
-    }
-    return m_imageInfo;
-  }
+	@Override
+	public ImageInfo getImageInfo() {
+		if (m_imageInfo == null) {
+			try {
+				// prepare path in class path
+				String path;
+				{
+					int srcSegments = m_packageFragmentRoot.getResource().getFullPath().segmentCount();
+					path = m_file.getFullPath().removeFirstSegments(srcSegments).toOSString();
+					path = path.replace('\\', '/');
+				}
+				// load image
+				Image image;
+				try {
+					InputStream inputStream = m_file.getContents();
+					try {
+						image = new Image(Display.getCurrent(), inputStream);
+					} finally {
+						inputStream.close();
+					}
+				} catch (Throwable e) {
+					return null;
+				}
+				// add to cache
+				m_imageInfo = new ImageInfo(m_id, path, image, -1);
+			} catch (Throwable e) {
+			}
+		}
+		return m_imageInfo;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Internal access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Disposes {@link Image} in {@link ImageInfo}.
-   */
-  void dispose() {
-    if (m_imageInfo != null) {
-      m_imageInfo.getImage().dispose();
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Internal access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Disposes {@link Image} in {@link ImageInfo}.
+	 */
+	void dispose() {
+		if (m_imageInfo != null) {
+			m_imageInfo.getImage().dispose();
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/pages/browse/classpath/SrcPackageImageContainer.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/pages/browse/classpath/SrcPackageImageContainer.java
index 0c093e470..276fa0e39 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/pages/browse/classpath/SrcPackageImageContainer.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/pages/browse/classpath/SrcPackageImageContainer.java
@@ -32,80 +32,80 @@
  * @coverage core.ui
  */
 final class SrcPackageImageContainer implements IImageContainer {
-  private final IPackageFragment m_packageFragment;
-  private final SrcImageResource[] m_resources;
+	private final IPackageFragment m_packageFragment;
+	private final SrcImageResource[] m_resources;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SrcPackageImageContainer(String id,
-      IPackageFragmentRoot packageFragmentRoot,
-      IPackageFragment packageFragment) throws Exception {
-    m_packageFragment = packageFragment;
-    //
-    List<SrcImageResource> resources = Lists.newArrayList();
-    {
-      Object[] nonJavaResources = m_packageFragment.getNonJavaResources();
-      for (Object nonJavaResource : nonJavaResources) {
-        if (nonJavaResource instanceof IFile) {
-          IFile resource = (IFile) nonJavaResource;
-          String extension = resource.getLocation().getFileExtension();
-          if (AbstractBrowseImagePage.isImageExtension(extension)) {
-            SrcImageResource imageResource =
-                new SrcImageResource(id, packageFragmentRoot, resource);
-            resources.add(imageResource);
-          }
-        }
-      }
-    }
-    m_resources = resources.toArray(new SrcImageResource[resources.size()]);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SrcPackageImageContainer(String id,
+			IPackageFragmentRoot packageFragmentRoot,
+			IPackageFragment packageFragment) throws Exception {
+		m_packageFragment = packageFragment;
+		//
+		List<SrcImageResource> resources = Lists.newArrayList();
+		{
+			Object[] nonJavaResources = m_packageFragment.getNonJavaResources();
+			for (Object nonJavaResource : nonJavaResources) {
+				if (nonJavaResource instanceof IFile) {
+					IFile resource = (IFile) nonJavaResource;
+					String extension = resource.getLocation().getFileExtension();
+					if (AbstractBrowseImagePage.isImageExtension(extension)) {
+						SrcImageResource imageResource =
+								new SrcImageResource(id, packageFragmentRoot, resource);
+						resources.add(imageResource);
+					}
+				}
+			}
+		}
+		m_resources = resources.toArray(new SrcImageResource[resources.size()]);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IImageElement
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Image getImage() {
-    return JavaUI.getSharedImages().getImage(ISharedImages.IMG_OBJS_PACKAGE);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IImageElement
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Image getImage() {
+		return JavaUI.getSharedImages().getImage(ISharedImages.IMG_OBJS_PACKAGE);
+	}
 
-  @Override
-  public String getName() {
-    return m_packageFragment.getElementName();
-  }
+	@Override
+	public String getName() {
+		return m_packageFragment.getElementName();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IImageContainer
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public IImageElement[] elements() {
-    return m_resources;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IImageContainer
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public IImageElement[] elements() {
+		return m_resources;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Internal access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if this jar does not have any images.
-   */
-  boolean isEmpty() {
-    return m_resources.length == 0;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Internal access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if this jar does not have any images.
+	 */
+	boolean isEmpty() {
+		return m_resources.length == 0;
+	}
 
-  /**
-   * Disposes any allocated resources.
-   */
-  void dispose() {
-    for (SrcImageResource resource : m_resources) {
-      resource.dispose();
-    }
-  }
+	/**
+	 * Disposes any allocated resources.
+	 */
+	void dispose() {
+		for (SrcImageResource resource : m_resources) {
+			resource.dispose();
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/pages/browse/model/IHasChildren.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/pages/browse/model/IHasChildren.java
index 9b89ce325..f755c9e8d 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/pages/browse/model/IHasChildren.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/pages/browse/model/IHasChildren.java
@@ -15,8 +15,8 @@
  * @coverage core.ui
  */
 public interface IHasChildren {
-  /**
-   * @return <code>true</code> if container contains elements and <code>false</code> otherwise.
-   */
-  boolean hasChildren();
+	/**
+	 * @return <code>true</code> if container contains elements and <code>false</code> otherwise.
+	 */
+	boolean hasChildren();
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/pages/browse/model/IImageContainer.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/pages/browse/model/IImageContainer.java
index cc98dae8b..1fe80b106 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/pages/browse/model/IImageContainer.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/pages/browse/model/IImageContainer.java
@@ -17,8 +17,8 @@
  * @coverage core.ui
  */
 public interface IImageContainer extends IImageElement {
-  /**
-   * @return the children {@link IImageElement}'s.
-   */
-  IImageElement[] elements();
+	/**
+	 * @return the children {@link IImageElement}'s.
+	 */
+	IImageElement[] elements();
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/pages/browse/model/IImageElement.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/pages/browse/model/IImageElement.java
index b030a8089..e31560bcf 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/pages/browse/model/IImageElement.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/pages/browse/model/IImageElement.java
@@ -19,13 +19,13 @@
  * @coverage core.ui
  */
 public interface IImageElement {
-  /**
-   * @return the image to display.
-   */
-  Image getImage();
+	/**
+	 * @return the image to display.
+	 */
+	Image getImage();
 
-  /**
-   * @return the text to display.
-   */
-  String getName();
+	/**
+	 * @return the text to display.
+	 */
+	String getName();
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/pages/browse/model/IImageResource.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/pages/browse/model/IImageResource.java
index 809e0ccaa..0f698e21b 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/pages/browse/model/IImageResource.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/pages/browse/model/IImageResource.java
@@ -19,8 +19,8 @@
  * @coverage core.ui
  */
 public interface IImageResource extends IImageElement {
-  /**
-   * @return the {@link ImageInfo} for this resource.
-   */
-  ImageInfo getImageInfo();
+	/**
+	 * @return the {@link ImageInfo} for this resource.
+	 */
+	ImageInfo getImageInfo();
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/pages/browse/model/IImageRoot.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/pages/browse/model/IImageRoot.java
index 553defbda..9b4937247 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/pages/browse/model/IImageRoot.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/utils/ui/dialogs/image/pages/browse/model/IImageRoot.java
@@ -19,19 +19,19 @@
  * @coverage core.ui
  */
 public interface IImageRoot {
-  /**
-   * @return the top level {@link IImageElement}'s.
-   */
-  IImageElement[] elements();
+	/**
+	 * @return the top level {@link IImageElement}'s.
+	 */
+	IImageElement[] elements();
 
-  /**
-   * Allows {@link IImageRoot} dispose any resources allocated for browsing.
-   */
-  void dispose();
+	/**
+	 * Allows {@link IImageRoot} dispose any resources allocated for browsing.
+	 */
+	void dispose();
 
-  /**
-   * @return the array of models that should be expanded/selected to show object specified by given
-   *         data.
-   */
-  Object[] getSelectionPath(Object data);
+	/**
+	 * @return the array of models that should be expanded/selected to show object specified by given
+	 *         data.
+	 */
+	Object[] getSelectionPath(Object data);
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/wizards/AbstractActionDelegate.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/wizards/AbstractActionDelegate.java
index 77decdcd0..22286c41e 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/wizards/AbstractActionDelegate.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/wizards/AbstractActionDelegate.java
@@ -25,60 +25,60 @@
  * @coverage core.wizards.ui
  */
 public abstract class AbstractActionDelegate
-    implements
-      IWorkbenchWindowActionDelegate,
-      IObjectActionDelegate {
-  private IWorkbenchWindow m_window;
-  private IStructuredSelection m_selection;
+implements
+IWorkbenchWindowActionDelegate,
+IObjectActionDelegate {
+	private IWorkbenchWindow m_window;
+	private IStructuredSelection m_selection;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IWorkbenchWindowActionDelegate
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void init(IWorkbenchWindow window) {
-    m_window = window;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IWorkbenchWindowActionDelegate
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void init(IWorkbenchWindow window) {
+		m_window = window;
+	}
 
-  @Override
-  public void dispose() {
-  }
+	@Override
+	public void dispose() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IObjectActionDelegate
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void setActivePart(IAction action, IWorkbenchPart targetPart) {
-    m_window = targetPart.getSite().getWorkbenchWindow();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IObjectActionDelegate
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void setActivePart(IAction action, IWorkbenchPart targetPart) {
+		m_window = targetPart.getSite().getWorkbenchWindow();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IWorkbenchWindowActionDelegate + IObjectActionDelegate
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void selectionChanged(IAction action, ISelection selection) {
-    if (selection instanceof IStructuredSelection) {
-      m_selection = (IStructuredSelection) selection;
-    } else {
-      m_selection = null;
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IWorkbenchWindowActionDelegate + IObjectActionDelegate
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void selectionChanged(IAction action, ISelection selection) {
+		if (selection instanceof IStructuredSelection) {
+			m_selection = (IStructuredSelection) selection;
+		} else {
+			m_selection = null;
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Internal access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected final IWorkbenchWindow getWorkbenchWindow() {
-    return m_window;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Internal access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected final IWorkbenchWindow getWorkbenchWindow() {
+		return m_window;
+	}
 
-  protected final IStructuredSelection getSelection() {
-    return m_selection;
-  }
+	protected final IStructuredSelection getSelection() {
+		return m_selection;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/wizards/AbstractDesignWizard.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/wizards/AbstractDesignWizard.java
index 81d8660a3..833b3d331 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/wizards/AbstractDesignWizard.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/wizards/AbstractDesignWizard.java
@@ -24,86 +24,86 @@
  * @coverage core.wizards.ui
  */
 public abstract class AbstractDesignWizard extends DesignerNewElementWizard {
-  // TODO(scheglov) move to shared place
-  private static final String EDITOR_ID = "org.eclipse.wb.core.guiEditor";
-  protected AbstractDesignWizardPage m_mainPage;
+	// TODO(scheglov) move to shared place
+	private static final String EDITOR_ID = "org.eclipse.wb.core.guiEditor";
+	protected AbstractDesignWizardPage m_mainPage;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Pages
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void addPages() {
-    if (!validateSelection()) {
-      return;
-    }
-    m_mainPage = createMainPage();
-    addPage(m_mainPage);
-    m_mainPage.setInitialSelection(getSelection());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Pages
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void addPages() {
+		if (!validateSelection()) {
+			return;
+		}
+		m_mainPage = createMainPage();
+		addPage(m_mainPage);
+		m_mainPage.setInitialSelection(getSelection());
+	}
 
-  /**
-   * Create main wizard page for this wizard.
-   */
-  protected abstract AbstractDesignWizardPage createMainPage();
+	/**
+	 * Create main wizard page for this wizard.
+	 */
+	protected abstract AbstractDesignWizardPage createMainPage();
 
-  /**
-   * @return <code>true</code> if current selection is valid, or adds error {@link WizardPage} and
-   *         return <code>false</code>.
-   */
-  protected boolean validateSelection() {
-    return true;
-  }
+	/**
+	 * @return <code>true</code> if current selection is valid, or adds error {@link WizardPage} and
+	 *         return <code>false</code>.
+	 */
+	protected boolean validateSelection() {
+		return true;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Finish
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean performFinish() {
-    boolean canFinish = super.performFinish();
-    if (canFinish) {
-      openEditor();
-    }
-    return canFinish;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Finish
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean performFinish() {
+		boolean canFinish = super.performFinish();
+		if (canFinish) {
+			openEditor();
+		}
+		return canFinish;
+	}
 
-  @Override
-  protected void finishPage(IProgressMonitor monitor) throws Exception {
-    m_mainPage.createType(monitor);
-  }
+	@Override
+	protected void finishPage(IProgressMonitor monitor) throws Exception {
+		m_mainPage.createType(monitor);
+	}
 
-  public final IJavaElement getCreatedElement() {
-    return m_mainPage.getCreatedType();
-  }
+	public final IJavaElement getCreatedElement() {
+		return m_mainPage.getCreatedType();
+	}
 
-  /**
-   * Opens creates UI in editor.
-   */
-  protected void openEditor() {
-    IFile file = (IFile) m_mainPage.getModifiedResource();
-    openEditor(file);
-  }
+	/**
+	 * Opens creates UI in editor.
+	 */
+	protected void openEditor() {
+		IFile file = (IFile) m_mainPage.getModifiedResource();
+		openEditor(file);
+	}
 
-  /**
-   * Opens created {@link IFile} in editor.
-   */
-  protected void openEditor(IFile file) {
-    openResource(file, EDITOR_ID);
-  }
+	/**
+	 * Opens created {@link IFile} in editor.
+	 */
+	protected void openEditor(IFile file) {
+		openResource(file, EDITOR_ID);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link IJavaProject} of selection, may be <code>null</code>.
-   */
-  protected final IJavaProject getJavaProject() {
-    IStructuredSelection selection = getSelection();
-    return WizardUtils.getJavaProject(selection);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link IJavaProject} of selection, may be <code>null</code>.
+	 */
+	protected final IJavaProject getJavaProject() {
+		IStructuredSelection selection = getSelection();
+		return WizardUtils.getJavaProject(selection);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/wizards/AbstractDesignWizardPage.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/wizards/AbstractDesignWizardPage.java
index 634bf8e69..829b408c1 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/wizards/AbstractDesignWizardPage.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/wizards/AbstractDesignWizardPage.java
@@ -27,95 +27,95 @@
  * @coverage core.wizards.ui
  */
 public abstract class AbstractDesignWizardPage extends NewTypeWizardPage {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractDesignWizardPage() {
-    super(true, "");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractDesignWizardPage() {
+		super(true, "");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Selection
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * The wizard owning this page is responsible for calling this method with the current selection.
-   * The selection is used to initialize the fields of the wizard page.
-   */
-  public void setInitialSelection(IStructuredSelection selection) {
-    IJavaElement element = getInitialJavaElement(selection);
-    initContainerPage(element);
-    initTypePage(element);
-    doStatusUpdate();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Selection
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * The wizard owning this page is responsible for calling this method with the current selection.
+	 * The selection is used to initialize the fields of the wizard page.
+	 */
+	public void setInitialSelection(IStructuredSelection selection) {
+		IJavaElement element = getInitialJavaElement(selection);
+		initContainerPage(element);
+		initTypePage(element);
+		doStatusUpdate();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Validation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected void doStatusUpdate() {
-    DesignerPlugin.getStandardDisplay().asyncExec(new Runnable() {
-      @Override
-      public void run() {
-        doPageStatusUpdate();
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Validation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected void doStatusUpdate() {
+		DesignerPlugin.getStandardDisplay().asyncExec(new Runnable() {
+			@Override
+			public void run() {
+				doPageStatusUpdate();
+			}
+		});
+	}
 
-  protected void doPageStatusUpdate() {
-    updateStatus(new IStatus[]{fContainerStatus, fPackageStatus, fTypeNameStatus, fSuperClassStatus});
-  }
+	protected void doPageStatusUpdate() {
+		updateStatus(new IStatus[]{fContainerStatus, fPackageStatus, fTypeNameStatus, fSuperClassStatus});
+	}
 
-  @Override
-  protected void handleFieldChanged(String fieldName) {
-    super.handleFieldChanged(fieldName);
-    doStatusUpdate();
-  }
+	@Override
+	protected void handleFieldChanged(String fieldName) {
+		super.handleFieldChanged(fieldName);
+		doStatusUpdate();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void createControl(Composite parent) {
-    initializeDialogUnits(parent);
-    // create page control
-    int nColumns = 4;
-    Composite composite = new Composite(parent, SWT.NONE);
-    GridLayoutFactory.create(composite).columns(nColumns);
-    // create page fields
-    createContainerControls(composite, nColumns);
-    createPackageControls(composite, nColumns);
-    createTypeNameControls(composite, nColumns);
-    createDesignSuperClassControls(composite, nColumns);
-    createSeparator(composite, nColumns);
-    createLocalControls(composite, nColumns);
-    // set page control
-    setControl(composite);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void createControl(Composite parent) {
+		initializeDialogUnits(parent);
+		// create page control
+		int nColumns = 4;
+		Composite composite = new Composite(parent, SWT.NONE);
+		GridLayoutFactory.create(composite).columns(nColumns);
+		// create page fields
+		createContainerControls(composite, nColumns);
+		createPackageControls(composite, nColumns);
+		createTypeNameControls(composite, nColumns);
+		createDesignSuperClassControls(composite, nColumns);
+		createSeparator(composite, nColumns);
+		createLocalControls(composite, nColumns);
+		// set page control
+		setControl(composite);
+	}
 
-  /**
-   * Creates the controls for the superclass name field.
-   */
-  protected void createDesignSuperClassControls(Composite composite, int nColumns) {
-  }
+	/**
+	 * Creates the controls for the superclass name field.
+	 */
+	protected void createDesignSuperClassControls(Composite composite, int nColumns) {
+	}
 
-  /**
-   * Create the another controls.
-   */
-  protected void createLocalControls(Composite parent, int nColumns) {
-  }
+	/**
+	 * Create the another controls.
+	 */
+	protected void createLocalControls(Composite parent, int nColumns) {
+	}
 
-  @Override
-  public void setVisible(boolean visible) {
-    super.setVisible(visible);
-    if (visible) {
-      setFocus();
-    }
-  }
+	@Override
+	public void setVisible(boolean visible) {
+		super.setVisible(visible);
+		if (visible) {
+			setFocus();
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/wizards/AbstractOpenWizardDelegate.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/wizards/AbstractOpenWizardDelegate.java
index 72297b72f..164fcfcc5 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/wizards/AbstractOpenWizardDelegate.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/wizards/AbstractOpenWizardDelegate.java
@@ -23,40 +23,40 @@
  * @coverage core.wizards.ui
  */
 public abstract class AbstractOpenWizardDelegate extends AbstractActionDelegate {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IActionDelegate
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void run(IAction action) {
-    openWizard();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IActionDelegate
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void run(IAction action) {
+		openWizard();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Wizard
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected final void openWizard() {
-    IWorkbenchWindow workbenchWindow = getWorkbenchWindow();
-    IWizard wizard = createWizard();
-    // initialize IWorkbenchWizard
-    if (wizard instanceof IWorkbenchWizard) {
-      ((IWorkbenchWizard) wizard).init(workbenchWindow.getWorkbench(), getSelection());
-    }
-    // open Wizard UI
-    WizardDialog dialog = new WizardDialog(workbenchWindow.getShell(), wizard);
-    dialog.create();
-    String title = wizard.getWindowTitle();
-    if (title != null) {
-      dialog.getShell().setText(title);
-    }
-    dialog.open();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Wizard
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected final void openWizard() {
+		IWorkbenchWindow workbenchWindow = getWorkbenchWindow();
+		IWizard wizard = createWizard();
+		// initialize IWorkbenchWizard
+		if (wizard instanceof IWorkbenchWizard) {
+			((IWorkbenchWizard) wizard).init(workbenchWindow.getWorkbench(), getSelection());
+		}
+		// open Wizard UI
+		WizardDialog dialog = new WizardDialog(workbenchWindow.getShell(), wizard);
+		dialog.create();
+		String title = wizard.getWindowTitle();
+		if (title != null) {
+			dialog.getShell().setText(title);
+		}
+		dialog.open();
+	}
 
-  /**
-   * Creates the specific wizard (to be implemented by a subclass).
-   */
-  protected abstract IWizard createWizard();
+	/**
+	 * Creates the specific wizard (to be implemented by a subclass).
+	 */
+	protected abstract IWizard createWizard();
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/wizards/DesignerJavaProjectWizard.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/wizards/DesignerJavaProjectWizard.java
index d28ea9655..2c4be7259 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/wizards/DesignerJavaProjectWizard.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/wizards/DesignerJavaProjectWizard.java
@@ -32,98 +32,98 @@
  * @coverage core.wizards.ui
  */
 public class DesignerJavaProjectWizard extends DesignerNewElementWizard
-    implements
-      IExecutableExtension {
-  private NewJavaProjectWizardPageOne fFirstPage;
-  private NewJavaProjectWizardPageTwo fSecondPage;
-  private IConfigurationElement fConfigElement;
+implements
+IExecutableExtension {
+	private NewJavaProjectWizardPageOne fFirstPage;
+	private NewJavaProjectWizardPageTwo fSecondPage;
+	private IConfigurationElement fConfigElement;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DesignerJavaProjectWizard() {
-    setDialogSettings(DesignerPlugin.getDefault().getDialogSettings());
-    setWindowTitle(Messages.DesignerJavaProjectWizard_title);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DesignerJavaProjectWizard() {
+		setDialogSettings(DesignerPlugin.getDefault().getDialogSettings());
+		setWindowTitle(Messages.DesignerJavaProjectWizard_title);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Pages
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void addPages() {
-    {
-      fFirstPage = new NewJavaProjectWizardPageOne();
-      addPage(fFirstPage);
-    }
-    {
-      fSecondPage = new NewJavaProjectWizardPageTwo(fFirstPage);
-      addPage(fSecondPage);
-    }
-    fFirstPage.init(getSelection(), getActivePart());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Pages
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void addPages() {
+		{
+			fFirstPage = new NewJavaProjectWizardPageOne();
+			addPage(fFirstPage);
+		}
+		{
+			fSecondPage = new NewJavaProjectWizardPageTwo(fFirstPage);
+			addPage(fSecondPage);
+		}
+		fFirstPage.init(getSelection(), getActivePart());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // DesignerNewElementWizard
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void finishPage(IProgressMonitor monitor) throws InterruptedException, CoreException {
-    fSecondPage.performFinish(monitor);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// DesignerNewElementWizard
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void finishPage(IProgressMonitor monitor) throws InterruptedException, CoreException {
+		fSecondPage.performFinish(monitor);
+	}
 
-  @Override
-  public boolean performFinish() {
-    boolean res = super.performFinish();
-    if (res) {
-      {
-        org.eclipse.ui.IWorkingSet[] workingSets = fFirstPage.getWorkingSets();
-        if (workingSets.length > 0) {
-          IJavaProject newElement = getCreatedElement();
-          org.eclipse.ui.PlatformUI.getWorkbench().getWorkingSetManager().addToWorkingSets(
-              newElement,
-              workingSets);
-        }
-      }
-      BasicNewProjectResourceWizard.updatePerspective(fConfigElement);
-      BasicNewResourceWizard.selectAndReveal(
-          fSecondPage.getJavaProject().getProject(),
-          DesignerPlugin.getActiveWorkbenchWindow());
-    }
-    return res;
-  }
+	@Override
+	public boolean performFinish() {
+		boolean res = super.performFinish();
+		if (res) {
+			{
+				org.eclipse.ui.IWorkingSet[] workingSets = fFirstPage.getWorkingSets();
+				if (workingSets.length > 0) {
+					IJavaProject newElement = getCreatedElement();
+					org.eclipse.ui.PlatformUI.getWorkbench().getWorkingSetManager().addToWorkingSets(
+							newElement,
+							workingSets);
+				}
+			}
+			BasicNewProjectResourceWizard.updatePerspective(fConfigElement);
+			BasicNewResourceWizard.selectAndReveal(
+					fSecondPage.getJavaProject().getProject(),
+					DesignerPlugin.getActiveWorkbenchWindow());
+		}
+		return res;
+	}
 
-  private org.eclipse.ui.IWorkbenchPart getActivePart() {
-    org.eclipse.ui.IWorkbenchPage activePage = DesignerPlugin.getActivePage();
-    if (activePage != null) {
-      return activePage.getActivePart();
-    }
-    return null;
-  }
+	private org.eclipse.ui.IWorkbenchPart getActivePart() {
+		org.eclipse.ui.IWorkbenchPage activePage = DesignerPlugin.getActivePage();
+		if (activePage != null) {
+			return activePage.getActivePart();
+		}
+		return null;
+	}
 
-  @Override
-  protected void handleFinishException(Shell shell, InvocationTargetException e) {
-    String title = Messages.DesignerJavaProjectWizard_errorTitle;
-    String message = Messages.DesignerJavaProjectWizard_errorMessage;
-    ExceptionHandler.perform(e, getShell(), title, message);
-  }
+	@Override
+	protected void handleFinishException(Shell shell, InvocationTargetException e) {
+		String title = Messages.DesignerJavaProjectWizard_errorTitle;
+		String message = Messages.DesignerJavaProjectWizard_errorMessage;
+		ExceptionHandler.perform(e, getShell(), title, message);
+	}
 
-  @Override
-  public void setInitializationData(IConfigurationElement cfig, String propertyName, Object data) {
-    fConfigElement = cfig;
-  }
+	@Override
+	public void setInitializationData(IConfigurationElement cfig, String propertyName, Object data) {
+		fConfigElement = cfig;
+	}
 
-  @Override
-  public boolean performCancel() {
-    fSecondPage.performCancel();
-    return super.performCancel();
-  }
+	@Override
+	public boolean performCancel() {
+		fSecondPage.performCancel();
+		return super.performCancel();
+	}
 
-  public IJavaProject getCreatedElement() {
-    return fSecondPage.getJavaProject();
-  }
+	public IJavaProject getCreatedElement() {
+		return fSecondPage.getJavaProject();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/wizards/DesignerNewElementWizard.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/wizards/DesignerNewElementWizard.java
index daf6d3ba3..1542c8802 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/wizards/DesignerNewElementWizard.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/wizards/DesignerNewElementWizard.java
@@ -49,224 +49,224 @@
  * @coverage core.wizards.ui
  */
 public abstract class DesignerNewElementWizard extends Wizard implements INewWizard {
-  private IWorkbench fWorkbench;
-  private IStructuredSelection fSelection;
+	private IWorkbench fWorkbench;
+	private IStructuredSelection fSelection;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DesignerNewElementWizard() {
-    setNeedsProgressMonitor(true);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DesignerNewElementWizard() {
+		setNeedsProgressMonitor(true);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // DesignerNewElementWizard
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected final void openResource(final IFile resource, final String editorId) {
-    final IWorkbenchPage activePage = DesignerPlugin.getActivePage();
-    if (activePage != null) {
-      final Display display = getShell().getDisplay();
-      if (display != null) {
-        display.asyncExec(new Runnable() {
-          @Override
-          public void run() {
-            try {
-              IDE.setDefaultEditor(resource, editorId);
-              BasicNewResourceWizard.selectAndReveal(
-                  resource,
-                  DesignerPlugin.getActiveWorkbenchWindow());
-              activePage.openEditor(new FileEditorInput(resource), editorId);
-            } catch (PartInitException e) {
-              DesignerPlugin.log(e);
-            }
-          }
-        });
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// DesignerNewElementWizard
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected final void openResource(final IFile resource, final String editorId) {
+		final IWorkbenchPage activePage = DesignerPlugin.getActivePage();
+		if (activePage != null) {
+			final Display display = getShell().getDisplay();
+			if (display != null) {
+				display.asyncExec(new Runnable() {
+					@Override
+					public void run() {
+						try {
+							IDE.setDefaultEditor(resource, editorId);
+							BasicNewResourceWizard.selectAndReveal(
+									resource,
+									DesignerPlugin.getActiveWorkbenchWindow());
+							activePage.openEditor(new FileEditorInput(resource), editorId);
+						} catch (PartInitException e) {
+							DesignerPlugin.log(e);
+						}
+					}
+				});
+			}
+		}
+	}
 
-  /**
-   * Subclasses should override to perform the actions of the wizard. This method is run in the
-   * wizard container's context as a workspace runnable.
-   */
-  protected abstract void finishPage(IProgressMonitor monitor) throws Exception;
+	/**
+	 * Subclasses should override to perform the actions of the wizard. This method is run in the
+	 * wizard container's context as a workspace runnable.
+	 */
+	protected abstract void finishPage(IProgressMonitor monitor) throws Exception;
 
-  protected boolean canRunForked() {
-    return true;
-  }
+	protected boolean canRunForked() {
+		return true;
+	}
 
-  protected void handleFinishException(Shell shell, InvocationTargetException e) {
-    ExceptionHandler.perform(
-        e,
-        shell,
-        Messages.DesignerNewElementWizard_errorTitle,
-        Messages.DesignerNewElementWizard_errorMessage);
-  }
+	protected void handleFinishException(Shell shell, InvocationTargetException e) {
+		ExceptionHandler.perform(
+				e,
+				shell,
+				Messages.DesignerNewElementWizard_errorTitle,
+				Messages.DesignerNewElementWizard_errorMessage);
+	}
 
-  @Override
-  public boolean performFinish() {
-    IWorkspaceRunnable op = new IWorkspaceRunnable() {
-      @Override
-      public void run(IProgressMonitor monitor) throws CoreException {
-        try {
-          finishPage(monitor);
-        } catch (Throwable e) {
-          throw new CoreException(new Status(IStatus.ERROR,
-              DesignerPlugin.PLUGIN_ID,
-              IStatus.OK,
-              e.getMessage(),
-              e));
-        }
-      }
-    };
-    try {
-      ISchedulingRule rule = null;
-      {
-        Job job = Job.getJobManager().currentJob();
-        if (job != null) {
-          rule = job.getRule();
-        }
-      }
-      IRunnableWithProgress runnable = null;
-      if (rule == null) {
-        runnable = new WorkbenchRunnableAdapter(op, ResourcesPlugin.getWorkspace().getRoot());
-      } else {
-        runnable = new WorkbenchRunnableAdapter(op, rule, true);
-      }
-      getContainer().run(canRunForked(), true, runnable);
-    } catch (InvocationTargetException e) {
-      handleFinishException(getShell(), e);
-      return false;
-    } catch (InterruptedException e) {
-      return false;
-    }
-    return true;
-  }
+	@Override
+	public boolean performFinish() {
+		IWorkspaceRunnable op = new IWorkspaceRunnable() {
+			@Override
+			public void run(IProgressMonitor monitor) throws CoreException {
+				try {
+					finishPage(monitor);
+				} catch (Throwable e) {
+					throw new CoreException(new Status(IStatus.ERROR,
+							DesignerPlugin.PLUGIN_ID,
+							IStatus.OK,
+							e.getMessage(),
+							e));
+				}
+			}
+		};
+		try {
+			ISchedulingRule rule = null;
+			{
+				Job job = Job.getJobManager().currentJob();
+				if (job != null) {
+					rule = job.getRule();
+				}
+			}
+			IRunnableWithProgress runnable = null;
+			if (rule == null) {
+				runnable = new WorkbenchRunnableAdapter(op, ResourcesPlugin.getWorkspace().getRoot());
+			} else {
+				runnable = new WorkbenchRunnableAdapter(op, rule, true);
+			}
+			getContainer().run(canRunForked(), true, runnable);
+		} catch (InvocationTargetException e) {
+			handleFinishException(getShell(), e);
+			return false;
+		} catch (InterruptedException e) {
+			return false;
+		}
+		return true;
+	}
 
-  @Override
-  public void init(IWorkbench workbench, IStructuredSelection currentSelection) {
-    fWorkbench = workbench;
-    fSelection = currentSelection;
-  }
+	@Override
+	public void init(IWorkbench workbench, IStructuredSelection currentSelection) {
+		fWorkbench = workbench;
+		fSelection = currentSelection;
+	}
 
-  public final IStructuredSelection getSelection() {
-    return fSelection;
-  }
+	public final IStructuredSelection getSelection() {
+		return fSelection;
+	}
 
-  public final IWorkbench getWorkbench() {
-    return fWorkbench;
-  }
+	public final IWorkbench getWorkbench() {
+		return fWorkbench;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Job Runnable
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static class WorkbenchRunnableAdapter implements IRunnableWithProgress, IThreadListener {
-    private boolean fTransfer = false;
-    private final IWorkspaceRunnable fWorkspaceRunnable;
-    private final ISchedulingRule fRule;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Job Runnable
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static class WorkbenchRunnableAdapter implements IRunnableWithProgress, IThreadListener {
+		private boolean fTransfer = false;
+		private final IWorkspaceRunnable fWorkspaceRunnable;
+		private final ISchedulingRule fRule;
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructors
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public WorkbenchRunnableAdapter(IWorkspaceRunnable runnable, ISchedulingRule rule) {
-      fWorkspaceRunnable = runnable;
-      fRule = rule;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructors
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public WorkbenchRunnableAdapter(IWorkspaceRunnable runnable, ISchedulingRule rule) {
+			fWorkspaceRunnable = runnable;
+			fRule = rule;
+		}
 
-    public WorkbenchRunnableAdapter(IWorkspaceRunnable runnable,
-        ISchedulingRule rule,
-        boolean transfer) {
-      fWorkspaceRunnable = runnable;
-      fRule = rule;
-      fTransfer = transfer;
-    }
+		public WorkbenchRunnableAdapter(IWorkspaceRunnable runnable,
+				ISchedulingRule rule,
+				boolean transfer) {
+			fWorkspaceRunnable = runnable;
+			fRule = rule;
+			fTransfer = transfer;
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // IThreadListener
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public void threadChange(Thread thread) {
-      if (fTransfer) {
-        Job.getJobManager().transferRule(fRule, thread);
-      }
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// IThreadListener
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public void threadChange(Thread thread) {
+			if (fTransfer) {
+				Job.getJobManager().transferRule(fRule, thread);
+			}
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // IRunnableWithProgress
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public void run(IProgressMonitor monitor) throws InvocationTargetException,
-        InterruptedException {
-      try {
-        JavaCore.run(fWorkspaceRunnable, fRule, monitor);
-      } catch (OperationCanceledException e) {
-        throw new InterruptedException(e.getMessage());
-      } catch (CoreException e) {
-        throw new InvocationTargetException(e);
-      }
-    }
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Error Dialog
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected static final class ExceptionHandler {
-    public static void perform(InvocationTargetException e,
-        Shell shell,
-        String title,
-        String message) {
-      Throwable target = e.getTargetException();
-      if (target instanceof CoreException) {
-        perform((CoreException) target, shell, title, message);
-      } else {
-        DesignerPlugin.log(e);
-        if (e.getMessage() != null && e.getMessage().length() > 0) {
-          displayMessageDialog(e, e.getMessage(), shell, title, message);
-        } else {
-          displayMessageDialog(e, target.getMessage(), shell, title, message);
-        }
-      }
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// IRunnableWithProgress
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public void run(IProgressMonitor monitor) throws InvocationTargetException,
+		InterruptedException {
+			try {
+				JavaCore.run(fWorkspaceRunnable, fRule, monitor);
+			} catch (OperationCanceledException e) {
+				throw new InterruptedException(e.getMessage());
+			} catch (CoreException e) {
+				throw new InvocationTargetException(e);
+			}
+		}
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Error Dialog
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected static final class ExceptionHandler {
+		public static void perform(InvocationTargetException e,
+				Shell shell,
+				String title,
+				String message) {
+			Throwable target = e.getTargetException();
+			if (target instanceof CoreException) {
+				perform((CoreException) target, shell, title, message);
+			} else {
+				DesignerPlugin.log(e);
+				if (e.getMessage() != null && e.getMessage().length() > 0) {
+					displayMessageDialog(e, e.getMessage(), shell, title, message);
+				} else {
+					displayMessageDialog(e, target.getMessage(), shell, title, message);
+				}
+			}
+		}
 
-    private static void perform(CoreException e, Shell shell, String title, String message) {
-      DesignerPlugin.log(e);
-      IStatus status = e.getStatus();
-      if (status == null) {
-        displayMessageDialog(e, e.getMessage(), shell, title, message);
-      } else {
-        ErrorDialog.openError(shell, title, message, status);
-      }
-    }
+		private static void perform(CoreException e, Shell shell, String title, String message) {
+			DesignerPlugin.log(e);
+			IStatus status = e.getStatus();
+			if (status == null) {
+				displayMessageDialog(e, e.getMessage(), shell, title, message);
+			} else {
+				ErrorDialog.openError(shell, title, message, status);
+			}
+		}
 
-    private static void displayMessageDialog(Throwable t,
-        String exceptionMessage,
-        Shell shell,
-        String title,
-        String message) {
-      StringWriter msg = new StringWriter();
-      if (message != null) {
-        msg.write(message);
-        msg.write("\n\n");
-      }
-      if (exceptionMessage == null || exceptionMessage.length() == 0) {
-        msg.write(Messages.DesignerNewElementWizard_errorSeeLog);
-      } else {
-        msg.write(exceptionMessage);
-      }
-      MessageDialog.openError(shell, title, msg.toString());
-    }
-  }
+		private static void displayMessageDialog(Throwable t,
+				String exceptionMessage,
+				Shell shell,
+				String title,
+				String message) {
+			StringWriter msg = new StringWriter();
+			if (message != null) {
+				msg.write(message);
+				msg.write("\n\n");
+			}
+			if (exceptionMessage == null || exceptionMessage.length() == 0) {
+				msg.write(Messages.DesignerNewElementWizard_errorSeeLog);
+			} else {
+				msg.write(exceptionMessage);
+			}
+			MessageDialog.openError(shell, title, msg.toString());
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/wizards/DesignerNewProjectCreationWizardPage.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/wizards/DesignerNewProjectCreationWizardPage.java
index 12d4e64f6..0f087b6ea 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/wizards/DesignerNewProjectCreationWizardPage.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/wizards/DesignerNewProjectCreationWizardPage.java
@@ -56,409 +56,409 @@
  * @coverage core.wizards.ui
  */
 public class DesignerNewProjectCreationWizardPage extends JavaCapabilityConfigurationPage {
-  private final WizardNewProjectCreationPage fMainPage;
-  private IPath fCurrProjectLocation;
-  protected IProject fCurrProject;
-  protected boolean fCanRemoveContent;
+	private final WizardNewProjectCreationPage fMainPage;
+	private IPath fCurrProjectLocation;
+	protected IProject fCurrProject;
+	protected boolean fCanRemoveContent;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DesignerNewProjectCreationWizardPage(WizardNewProjectCreationPage mainPage) {
-    super();
-    fMainPage = mainPage;
-    fCurrProjectLocation = null;
-    fCurrProject = null;
-    fCanRemoveContent = false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DesignerNewProjectCreationWizardPage(WizardNewProjectCreationPage mainPage) {
+		super();
+		fMainPage = mainPage;
+		fCurrProjectLocation = null;
+		fCurrProject = null;
+		fCanRemoveContent = false;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // NewProjectCreationWizardPage
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void setVisible(boolean visible) {
-    if (visible) {
-      changeToNewProject();
-    } else {
-      removeProject();
-    }
-    super.setVisible(visible);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// NewProjectCreationWizardPage
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void setVisible(boolean visible) {
+		if (visible) {
+			changeToNewProject();
+		} else {
+			removeProject();
+		}
+		super.setVisible(visible);
+	}
 
-  private void changeToNewProject() {
-    IProject newProjectHandle = fMainPage.getProjectHandle();
-    IPath newProjectLocation = fMainPage.getLocationPath();
-    if (fMainPage.useDefaults()) {
-      fCanRemoveContent = !newProjectLocation.append(fMainPage.getProjectName()).toFile().exists();
-    } else {
-      fCanRemoveContent = !newProjectLocation.toFile().exists();
-    }
-    final boolean initialize =
-        !(newProjectHandle.equals(fCurrProject) && newProjectLocation.equals(fCurrProjectLocation));
-    IRunnableWithProgress op = new IRunnableWithProgress() {
-      @Override
-      public void run(IProgressMonitor monitor) throws InvocationTargetException,
-          InterruptedException {
-        try {
-          updateProject(initialize, monitor);
-        } catch (CoreException e) {
-          throw new InvocationTargetException(e);
-        }
-      }
-    };
-    try {
-      getContainer().run(false, true, op);
-    } catch (InvocationTargetException e) {
-      String title = Messages.DesignerNewProjectCreationWizardPage_title;
-      String message = Messages.DesignerNewProjectCreationWizardPage_message;
-      DesignerNewElementWizard.ExceptionHandler.perform(e, getShell(), title, message);
-    } catch (InterruptedException e) {
-      // cancel pressed
-    }
-  }
+	private void changeToNewProject() {
+		IProject newProjectHandle = fMainPage.getProjectHandle();
+		IPath newProjectLocation = fMainPage.getLocationPath();
+		if (fMainPage.useDefaults()) {
+			fCanRemoveContent = !newProjectLocation.append(fMainPage.getProjectName()).toFile().exists();
+		} else {
+			fCanRemoveContent = !newProjectLocation.toFile().exists();
+		}
+		final boolean initialize =
+				!(newProjectHandle.equals(fCurrProject) && newProjectLocation.equals(fCurrProjectLocation));
+		IRunnableWithProgress op = new IRunnableWithProgress() {
+			@Override
+			public void run(IProgressMonitor monitor) throws InvocationTargetException,
+			InterruptedException {
+				try {
+					updateProject(initialize, monitor);
+				} catch (CoreException e) {
+					throw new InvocationTargetException(e);
+				}
+			}
+		};
+		try {
+			getContainer().run(false, true, op);
+		} catch (InvocationTargetException e) {
+			String title = Messages.DesignerNewProjectCreationWizardPage_title;
+			String message = Messages.DesignerNewProjectCreationWizardPage_message;
+			DesignerNewElementWizard.ExceptionHandler.perform(e, getShell(), title, message);
+		} catch (InterruptedException e) {
+			// cancel pressed
+		}
+	}
 
-  protected void updateProject(boolean initialize, IProgressMonitor monitor) throws CoreException,
-      InterruptedException {
-    fCurrProject = fMainPage.getProjectHandle();
-    fCurrProjectLocation = fMainPage.getLocationPath();
-    boolean noProgressMonitor = !initialize && fCanRemoveContent;
-    if (monitor == null || noProgressMonitor) {
-      monitor = new NullProgressMonitor();
-    }
-    try {
-      monitor.beginTask("Creating project and examining existing resources...", 2); //$NON-NLS-1$
-      createProject(fCurrProject, fCurrProjectLocation, new SubProgressMonitor(monitor, 1));
-      if (initialize) {
-        IClasspathEntry[] entries = null;
-        IPath outputLocation = null;
-        if (fCurrProjectLocation.toFile().exists()
-            && !Platform.getLocation().equals(fCurrProjectLocation)) {
-          // detect classpath
-          if (!fCurrProject.getFile(".classpath").exists()) { //$NON-NLS-1$
-            // if .classpath exists noneed to look for files
-            ClassPathDetector detector = new ClassPathDetector(fCurrProject);
-            entries = detector.getClasspath();
-            outputLocation = detector.getOutputLocation();
-          }
-        }
-        init(JavaCore.create(fCurrProject), outputLocation, entries, false);
-      }
-      monitor.worked(1);
-    } finally {
-      monitor.done();
-    }
-  }
+	protected void updateProject(boolean initialize, IProgressMonitor monitor) throws CoreException,
+	InterruptedException {
+		fCurrProject = fMainPage.getProjectHandle();
+		fCurrProjectLocation = fMainPage.getLocationPath();
+		boolean noProgressMonitor = !initialize && fCanRemoveContent;
+		if (monitor == null || noProgressMonitor) {
+			monitor = new NullProgressMonitor();
+		}
+		try {
+			monitor.beginTask("Creating project and examining existing resources...", 2); //$NON-NLS-1$
+			createProject(fCurrProject, fCurrProjectLocation, new SubProgressMonitor(monitor, 1));
+			if (initialize) {
+				IClasspathEntry[] entries = null;
+				IPath outputLocation = null;
+				if (fCurrProjectLocation.toFile().exists()
+						&& !Platform.getLocation().equals(fCurrProjectLocation)) {
+					// detect classpath
+					if (!fCurrProject.getFile(".classpath").exists()) { //$NON-NLS-1$
+						// if .classpath exists noneed to look for files
+						ClassPathDetector detector = new ClassPathDetector(fCurrProject);
+						entries = detector.getClasspath();
+						outputLocation = detector.getOutputLocation();
+					}
+				}
+				init(JavaCore.create(fCurrProject), outputLocation, entries, false);
+			}
+			monitor.worked(1);
+		} finally {
+			monitor.done();
+		}
+	}
 
-  /**
-   * Called from the wizard on finish.
-   */
-  public void performFinish(IProgressMonitor monitor) throws CoreException, InterruptedException {
-    try {
-      monitor.beginTask("Creating project...", 3); //$NON-NLS-1$
-      if (fCurrProject == null) {
-        updateProject(true, new SubProgressMonitor(monitor, 1));
-      }
-      configureJavaProject(new SubProgressMonitor(monitor, 2));
-    } finally {
-      monitor.done();
-      fCurrProject = null;
-    }
-  }
+	/**
+	 * Called from the wizard on finish.
+	 */
+	public void performFinish(IProgressMonitor monitor) throws CoreException, InterruptedException {
+		try {
+			monitor.beginTask("Creating project...", 3); //$NON-NLS-1$
+			if (fCurrProject == null) {
+				updateProject(true, new SubProgressMonitor(monitor, 1));
+			}
+			configureJavaProject(new SubProgressMonitor(monitor, 2));
+		} finally {
+			monitor.done();
+			fCurrProject = null;
+		}
+	}
 
-  private void removeProject() {
-    if (fCurrProject == null || !fCurrProject.exists()) {
-      return;
-    }
-    IRunnableWithProgress op = new IRunnableWithProgress() {
-      @Override
-      public void run(IProgressMonitor monitor) throws InvocationTargetException,
-          InterruptedException {
-        boolean noProgressMonitor = Platform.getLocation().equals(fCurrProjectLocation);
-        if (monitor == null || noProgressMonitor) {
-          monitor = new NullProgressMonitor();
-        }
-        monitor.beginTask(Messages.DesignerNewProjectCreationWizardPage_removeProgress, 3);
-        try {
-          fCurrProject.delete(fCanRemoveContent, false, monitor);
-        } catch (CoreException e) {
-          throw new InvocationTargetException(e);
-        } finally {
-          monitor.done();
-          fCurrProject = null;
-          fCanRemoveContent = false;
-        }
-      }
-    };
-    try {
-      getContainer().run(false, true, op);
-    } catch (InvocationTargetException e) {
-      String title = Messages.DesignerNewProjectCreationWizardPage_removeErrorTitle;
-      String message = Messages.DesignerNewProjectCreationWizardPage_removeErrorMessage;
-      DesignerNewElementWizard.ExceptionHandler.perform(e, getShell(), title, message);
-    } catch (InterruptedException e) {
-      // cancel pressed
-    }
-  }
+	private void removeProject() {
+		if (fCurrProject == null || !fCurrProject.exists()) {
+			return;
+		}
+		IRunnableWithProgress op = new IRunnableWithProgress() {
+			@Override
+			public void run(IProgressMonitor monitor) throws InvocationTargetException,
+			InterruptedException {
+				boolean noProgressMonitor = Platform.getLocation().equals(fCurrProjectLocation);
+				if (monitor == null || noProgressMonitor) {
+					monitor = new NullProgressMonitor();
+				}
+				monitor.beginTask(Messages.DesignerNewProjectCreationWizardPage_removeProgress, 3);
+				try {
+					fCurrProject.delete(fCanRemoveContent, false, monitor);
+				} catch (CoreException e) {
+					throw new InvocationTargetException(e);
+				} finally {
+					monitor.done();
+					fCurrProject = null;
+					fCanRemoveContent = false;
+				}
+			}
+		};
+		try {
+			getContainer().run(false, true, op);
+		} catch (InvocationTargetException e) {
+			String title = Messages.DesignerNewProjectCreationWizardPage_removeErrorTitle;
+			String message = Messages.DesignerNewProjectCreationWizardPage_removeErrorMessage;
+			DesignerNewElementWizard.ExceptionHandler.perform(e, getShell(), title, message);
+		} catch (InterruptedException e) {
+			// cancel pressed
+		}
+	}
 
-  /**
-   * Called from the wizard on cancel.
-   */
-  public void performCancel() {
-    removeProject();
-  }
+	/**
+	 * Called from the wizard on cancel.
+	 */
+	public void performCancel() {
+		removeProject();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static class ClassPathDetector implements IResourceProxyVisitor {
-    private final Map<IPath, List<IPath>> fSourceFolders = new HashMap<IPath, List<IPath>>();
-    private final List<IFile> fClassFiles = new ArrayList<IFile>();
-    private final Set<IPath> fJARFiles = new HashSet<IPath>();
-    private final IProject fProject;
-    private IPath fResultOutputFolder;
-    private IClasspathEntry[] fResultClasspath;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static class ClassPathDetector implements IResourceProxyVisitor {
+		private final Map<IPath, List<IPath>> fSourceFolders = new HashMap<IPath, List<IPath>>();
+		private final List<IFile> fClassFiles = new ArrayList<IFile>();
+		private final Set<IPath> fJARFiles = new HashSet<IPath>();
+		private final IProject fProject;
+		private IPath fResultOutputFolder;
+		private IClasspathEntry[] fResultClasspath;
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public ClassPathDetector(IProject project) throws CoreException {
-      fProject = project;
-      project.accept(this, IResource.NONE);
-      fResultClasspath = null;
-      fResultOutputFolder = null;
-      detectClasspath();
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public ClassPathDetector(IProject project) throws CoreException {
+			fProject = project;
+			project.accept(this, IResource.NONE);
+			fResultClasspath = null;
+			fResultOutputFolder = null;
+			detectClasspath();
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // ClassPathDetector
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    private boolean isNested(IPath path, Iterator<IPath> iter) {
-      while (iter.hasNext()) {
-        IPath other = iter.next();
-        if (other.isPrefixOf(path)) {
-          return true;
-        }
-      }
-      return false;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// ClassPathDetector
+		//
+		////////////////////////////////////////////////////////////////////////////
+		private boolean isNested(IPath path, Iterator<IPath> iter) {
+			while (iter.hasNext()) {
+				IPath other = iter.next();
+				if (other.isPrefixOf(path)) {
+					return true;
+				}
+			}
+			return false;
+		}
 
-    /**
-     * Method detectClasspath.
-     */
-    private void detectClasspath() {
-      List<IClasspathEntry> cpEntries = new ArrayList<IClasspathEntry>();
-      detectSourceFolders(cpEntries);
-      IPath outputLocation = detectOutputFolder(cpEntries);
-      detectLibraries(cpEntries, outputLocation);
-      if (cpEntries.isEmpty() && fClassFiles.isEmpty()) {
-        return;
-      }
-      IClasspathEntry[] jreEntries = PreferenceConstants.getDefaultJRELibrary();
-      for (int i = 0; i < jreEntries.length; i++) {
-        cpEntries.add(jreEntries[i]);
-      }
-      IClasspathEntry[] entries = cpEntries.toArray(new IClasspathEntry[cpEntries.size()]);
-      if (!JavaConventions.validateClasspath(JavaCore.create(fProject), entries, outputLocation).isOK()) {
-        return;
-      }
-      fResultClasspath = entries;
-      fResultOutputFolder = outputLocation;
-    }
+		/**
+		 * Method detectClasspath.
+		 */
+		private void detectClasspath() {
+			List<IClasspathEntry> cpEntries = new ArrayList<IClasspathEntry>();
+			detectSourceFolders(cpEntries);
+			IPath outputLocation = detectOutputFolder(cpEntries);
+			detectLibraries(cpEntries, outputLocation);
+			if (cpEntries.isEmpty() && fClassFiles.isEmpty()) {
+				return;
+			}
+			IClasspathEntry[] jreEntries = PreferenceConstants.getDefaultJRELibrary();
+			for (int i = 0; i < jreEntries.length; i++) {
+				cpEntries.add(jreEntries[i]);
+			}
+			IClasspathEntry[] entries = cpEntries.toArray(new IClasspathEntry[cpEntries.size()]);
+			if (!JavaConventions.validateClasspath(JavaCore.create(fProject), entries, outputLocation).isOK()) {
+				return;
+			}
+			fResultClasspath = entries;
+			fResultOutputFolder = outputLocation;
+		}
 
-    private IPath findInSourceFolders(IPath path) {
-      Iterator<IPath> iter = fSourceFolders.keySet().iterator();
-      while (iter.hasNext()) {
-        IPath key = iter.next();
-        List<IPath> cus = fSourceFolders.get(key);
-        if (cus.contains(path)) {
-          return key;
-        }
-      }
-      return null;
-    }
+		private IPath findInSourceFolders(IPath path) {
+			Iterator<IPath> iter = fSourceFolders.keySet().iterator();
+			while (iter.hasNext()) {
+				IPath key = iter.next();
+				List<IPath> cus = fSourceFolders.get(key);
+				if (cus.contains(path)) {
+					return key;
+				}
+			}
+			return null;
+		}
 
-    private IPath detectOutputFolder(List<IClasspathEntry> entries) {
-      Set<IPath> classFolders = new HashSet<IPath>();
-      for (Iterator<IFile> iter = fClassFiles.iterator(); iter.hasNext();) {
-        IFile file = iter.next();
-        IPath location = file.getLocation();
-        if (location == null) {
-          continue;
-        }
-        IClassFileReader reader =
-            ToolFactory.createDefaultClassFileReader(
-                location.toOSString(),
-                IClassFileReader.CLASSFILE_ATTRIBUTES);
-        if (reader == null) {
-          continue; // problematic class file
-        }
-        char[] className = reader.getClassName();
-        ISourceAttribute sourceAttribute = reader.getSourceFileAttribute();
-        if (className != null
-            && sourceAttribute != null
-            && sourceAttribute.getSourceFileName() != null) {
-          IPath packPath = file.getParent().getFullPath();
-          int idx = CharOperation.lastIndexOf('/', className) + 1;
-          IPath relPath = new Path(new String(className, 0, idx));
-          IPath cuPath = relPath.append(new String(sourceAttribute.getSourceFileName()));
-          IPath resPath = null;
-          if (idx == 0) {
-            resPath = packPath;
-          } else {
-            IPath folderPath = getFolderPath(packPath, relPath);
-            if (folderPath != null) {
-              resPath = folderPath;
-            }
-          }
-          if (resPath != null) {
-            IPath path = findInSourceFolders(cuPath);
-            if (path != null) {
-              return resPath;
-            } else {
-              classFolders.add(resPath);
-            }
-          }
-        }
-      }
-      IPath projPath = fProject.getFullPath();
-      if (fSourceFolders.size() == 1
-          && classFolders.isEmpty()
-          && fSourceFolders.get(projPath) != null) {
-        return projPath;
-      } else {
-        IPath path =
-            projPath.append(PreferenceConstants.getPreferenceStore().getString(
-                PreferenceConstants.SRCBIN_BINNAME));
-        while (classFolders.contains(path)) {
-          path = new Path(path.toString() + '1');
-        }
-        return path;
-      }
-    }
+		private IPath detectOutputFolder(List<IClasspathEntry> entries) {
+			Set<IPath> classFolders = new HashSet<IPath>();
+			for (Iterator<IFile> iter = fClassFiles.iterator(); iter.hasNext();) {
+				IFile file = iter.next();
+				IPath location = file.getLocation();
+				if (location == null) {
+					continue;
+				}
+				IClassFileReader reader =
+						ToolFactory.createDefaultClassFileReader(
+								location.toOSString(),
+								IClassFileReader.CLASSFILE_ATTRIBUTES);
+				if (reader == null) {
+					continue; // problematic class file
+				}
+				char[] className = reader.getClassName();
+				ISourceAttribute sourceAttribute = reader.getSourceFileAttribute();
+				if (className != null
+						&& sourceAttribute != null
+						&& sourceAttribute.getSourceFileName() != null) {
+					IPath packPath = file.getParent().getFullPath();
+					int idx = CharOperation.lastIndexOf('/', className) + 1;
+					IPath relPath = new Path(new String(className, 0, idx));
+					IPath cuPath = relPath.append(new String(sourceAttribute.getSourceFileName()));
+					IPath resPath = null;
+					if (idx == 0) {
+						resPath = packPath;
+					} else {
+						IPath folderPath = getFolderPath(packPath, relPath);
+						if (folderPath != null) {
+							resPath = folderPath;
+						}
+					}
+					if (resPath != null) {
+						IPath path = findInSourceFolders(cuPath);
+						if (path != null) {
+							return resPath;
+						} else {
+							classFolders.add(resPath);
+						}
+					}
+				}
+			}
+			IPath projPath = fProject.getFullPath();
+			if (fSourceFolders.size() == 1
+					&& classFolders.isEmpty()
+					&& fSourceFolders.get(projPath) != null) {
+				return projPath;
+			} else {
+				IPath path =
+						projPath.append(PreferenceConstants.getPreferenceStore().getString(
+								PreferenceConstants.SRCBIN_BINNAME));
+				while (classFolders.contains(path)) {
+					path = new Path(path.toString() + '1');
+				}
+				return path;
+			}
+		}
 
-    private void detectLibraries(List<IClasspathEntry> cpEntries, IPath outputLocation) {
-      Set<IPath> sourceFolderSet = fSourceFolders.keySet();
-      for (Iterator<IPath> iter = fJARFiles.iterator(); iter.hasNext();) {
-        IPath path = iter.next();
-        if (isNested(path, sourceFolderSet.iterator())) {
-          continue;
-        }
-        if (outputLocation != null && outputLocation.isPrefixOf(path)) {
-          continue;
-        }
-        IClasspathEntry entry = JavaCore.newLibraryEntry(path, null, null);
-        cpEntries.add(entry);
-      }
-    }
+		private void detectLibraries(List<IClasspathEntry> cpEntries, IPath outputLocation) {
+			Set<IPath> sourceFolderSet = fSourceFolders.keySet();
+			for (Iterator<IPath> iter = fJARFiles.iterator(); iter.hasNext();) {
+				IPath path = iter.next();
+				if (isNested(path, sourceFolderSet.iterator())) {
+					continue;
+				}
+				if (outputLocation != null && outputLocation.isPrefixOf(path)) {
+					continue;
+				}
+				IClasspathEntry entry = JavaCore.newLibraryEntry(path, null, null);
+				cpEntries.add(entry);
+			}
+		}
 
-    private void detectSourceFolders(List<IClasspathEntry> resEntries) {
-      Set<IPath> sourceFolderSet = fSourceFolders.keySet();
-      for (Iterator<IPath> iter = sourceFolderSet.iterator(); iter.hasNext();) {
-        IPath path = iter.next();
-        List<IPath> excluded = new ArrayList<IPath>();
-        for (Iterator<IPath> inner = sourceFolderSet.iterator(); inner.hasNext();) {
-          IPath other = inner.next();
-          if (!path.equals(other) && path.isPrefixOf(other)) {
-            IPath pathToExclude =
-                other.removeFirstSegments(path.segmentCount()).addTrailingSeparator();
-            excluded.add(pathToExclude);
-          }
-        }
-        IPath[] excludedPaths = excluded.toArray(new IPath[excluded.size()]);
-        IClasspathEntry entry = JavaCore.newSourceEntry(path, excludedPaths);
-        resEntries.add(entry);
-      }
-    }
+		private void detectSourceFolders(List<IClasspathEntry> resEntries) {
+			Set<IPath> sourceFolderSet = fSourceFolders.keySet();
+			for (Iterator<IPath> iter = sourceFolderSet.iterator(); iter.hasNext();) {
+				IPath path = iter.next();
+				List<IPath> excluded = new ArrayList<IPath>();
+				for (Iterator<IPath> inner = sourceFolderSet.iterator(); inner.hasNext();) {
+					IPath other = inner.next();
+					if (!path.equals(other) && path.isPrefixOf(other)) {
+						IPath pathToExclude =
+								other.removeFirstSegments(path.segmentCount()).addTrailingSeparator();
+						excluded.add(pathToExclude);
+					}
+				}
+				IPath[] excludedPaths = excluded.toArray(new IPath[excluded.size()]);
+				IClasspathEntry entry = JavaCore.newSourceEntry(path, excludedPaths);
+				resEntries.add(entry);
+			}
+		}
 
-    private void visitCompilationUnit(IFile file) throws JavaModelException {
-      ICompilationUnit cu = JavaCore.createCompilationUnitFrom(file);
-      if (cu != null) {
-        ICompilationUnit workingCopy = null;
-        try {
-          workingCopy = (ICompilationUnit) cu.getWorkingCopy();
-          synchronized (workingCopy) {
-            workingCopy.reconcile();
-          }
-          IPath packPath = file.getParent().getFullPath();
-          IPackageDeclaration[] decls = workingCopy.getPackageDeclarations();
-          String cuName = file.getName();
-          if (decls.length == 0) {
-            addToMap(fSourceFolders, packPath, new Path(cuName));
-          } else {
-            IPath relpath = new Path(decls[0].getElementName().replace('.', '/'));
-            IPath folderPath = getFolderPath(packPath, relpath);
-            if (folderPath != null) {
-              addToMap(fSourceFolders, folderPath, relpath.append(cuName));
-            }
-          }
-        } finally {
-          if (workingCopy != null) {
-            workingCopy.destroy();
-          }
-        }
-      }
-    }
+		private void visitCompilationUnit(IFile file) throws JavaModelException {
+			ICompilationUnit cu = JavaCore.createCompilationUnitFrom(file);
+			if (cu != null) {
+				ICompilationUnit workingCopy = null;
+				try {
+					workingCopy = (ICompilationUnit) cu.getWorkingCopy();
+					synchronized (workingCopy) {
+						workingCopy.reconcile();
+					}
+					IPath packPath = file.getParent().getFullPath();
+					IPackageDeclaration[] decls = workingCopy.getPackageDeclarations();
+					String cuName = file.getName();
+					if (decls.length == 0) {
+						addToMap(fSourceFolders, packPath, new Path(cuName));
+					} else {
+						IPath relpath = new Path(decls[0].getElementName().replace('.', '/'));
+						IPath folderPath = getFolderPath(packPath, relpath);
+						if (folderPath != null) {
+							addToMap(fSourceFolders, folderPath, relpath.append(cuName));
+						}
+					}
+				} finally {
+					if (workingCopy != null) {
+						workingCopy.destroy();
+					}
+				}
+			}
+		}
 
-    private void addToMap(Map<IPath, List<IPath>> map, IPath folderPath, IPath relPath) {
-      List<IPath> list = map.get(folderPath);
-      if (list == null) {
-        list = new ArrayList<IPath>(50);
-        map.put(folderPath, list);
-      }
-      list.add(relPath);
-    }
+		private void addToMap(Map<IPath, List<IPath>> map, IPath folderPath, IPath relPath) {
+			List<IPath> list = map.get(folderPath);
+			if (list == null) {
+				list = new ArrayList<IPath>(50);
+				map.put(folderPath, list);
+			}
+			list.add(relPath);
+		}
 
-    private IPath getFolderPath(IPath packPath, IPath relpath) {
-      int remainingSegments = packPath.segmentCount() - relpath.segmentCount();
-      if (remainingSegments >= 0) {
-        IPath common = packPath.removeFirstSegments(remainingSegments);
-        if (common.equals(relpath)) {
-          return packPath.uptoSegment(remainingSegments);
-        }
-      }
-      return null;
-    }
+		private IPath getFolderPath(IPath packPath, IPath relpath) {
+			int remainingSegments = packPath.segmentCount() - relpath.segmentCount();
+			if (remainingSegments >= 0) {
+				IPath common = packPath.removeFirstSegments(remainingSegments);
+				if (common.equals(relpath)) {
+					return packPath.uptoSegment(remainingSegments);
+				}
+			}
+			return null;
+		}
 
-    private boolean hasExtension(String name, String ext) {
-      return name.endsWith(ext) && ext.length() != name.length();
-    }
+		private boolean hasExtension(String name, String ext) {
+			return name.endsWith(ext) && ext.length() != name.length();
+		}
 
-    private boolean isValidCUName(String name) {
-      return !JavaConventions.validateCompilationUnitName(name).matches(IStatus.ERROR);
-    }
+		private boolean isValidCUName(String name) {
+			return !JavaConventions.validateCompilationUnitName(name).matches(IStatus.ERROR);
+		}
 
-    @Override
-    public boolean visit(IResourceProxy proxy) throws CoreException {
-      if (proxy.getType() == IResource.FILE) {
-        String name = proxy.getName();
-        if (hasExtension(name, ".java") && isValidCUName(name)) { //$NON-NLS-1$
-          visitCompilationUnit((IFile) proxy.requestResource());
-        } else if (hasExtension(name, ".class")) { //$NON-NLS-1$
-          fClassFiles.add((IFile) proxy.requestResource());
-        } else if (hasExtension(name, ".jar")) { //$NON-NLS-1$
-          fJARFiles.add(proxy.requestFullPath());
-        }
-        return false;
-      }
-      return true;
-    }
+		@Override
+		public boolean visit(IResourceProxy proxy) throws CoreException {
+			if (proxy.getType() == IResource.FILE) {
+				String name = proxy.getName();
+				if (hasExtension(name, ".java") && isValidCUName(name)) { //$NON-NLS-1$
+					visitCompilationUnit((IFile) proxy.requestResource());
+				} else if (hasExtension(name, ".class")) { //$NON-NLS-1$
+					fClassFiles.add((IFile) proxy.requestResource());
+				} else if (hasExtension(name, ".jar")) { //$NON-NLS-1$
+					fJARFiles.add(proxy.requestFullPath());
+				}
+				return false;
+			}
+			return true;
+		}
 
-    public IPath getOutputLocation() {
-      return fResultOutputFolder;
-    }
+		public IPath getOutputLocation() {
+			return fResultOutputFolder;
+		}
 
-    public IClasspathEntry[] getClasspath() {
-      return fResultClasspath;
-    }
-  }
+		public IClasspathEntry[] getClasspath() {
+			return fResultClasspath;
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/wizards/ErrorMessageWizardPage.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/wizards/ErrorMessageWizardPage.java
index 5ff64e4d8..ec3e64e53 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/wizards/ErrorMessageWizardPage.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/wizards/ErrorMessageWizardPage.java
@@ -21,30 +21,30 @@
  * @coverage core.wizards.ui
  */
 public class ErrorMessageWizardPage extends WizardPage {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ErrorMessageWizardPage(String title, String message) {
-    super("ErrorMessagePage");
-    setTitle(title);
-    setErrorMessage(message);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ErrorMessageWizardPage(String title, String message) {
+		super("ErrorMessagePage");
+		setTitle(title);
+		setErrorMessage(message);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void createControl(Composite parent) {
-    Composite composite = new Composite(parent, SWT.NONE);
-    setControl(composite);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void createControl(Composite parent) {
+		Composite composite = new Composite(parent, SWT.NONE);
+		setControl(composite);
+	}
 
-  @Override
-  public boolean isPageComplete() {
-    return false;
-  }
+	@Override
+	public boolean isPageComplete() {
+		return false;
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/wizards/Messages.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/wizards/Messages.java
index 13f2c8dd2..4f94b44aa 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/wizards/Messages.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/wizards/Messages.java
@@ -3,23 +3,23 @@
 import org.eclipse.osgi.util.NLS;
 
 public class Messages extends NLS {
-  private static final String BUNDLE_NAME = "org.eclipse.wb.internal.core.wizards.messages"; //$NON-NLS-1$
-  public static String DesignerJavaProjectWizard_errorMessage;
-  public static String DesignerJavaProjectWizard_errorTitle;
-  public static String DesignerJavaProjectWizard_title;
-  public static String DesignerNewElementWizard_errorMessage;
-  public static String DesignerNewElementWizard_errorSeeLog;
-  public static String DesignerNewElementWizard_errorTitle;
-  public static String DesignerNewProjectCreationWizardPage_message;
-  public static String DesignerNewProjectCreationWizardPage_removeErrorMessage;
-  public static String DesignerNewProjectCreationWizardPage_removeErrorTitle;
-  public static String DesignerNewProjectCreationWizardPage_removeProgress;
-  public static String DesignerNewProjectCreationWizardPage_title;
-  static {
-    // initialize resource bundle
-    NLS.initializeMessages(BUNDLE_NAME, Messages.class);
-  }
+	private static final String BUNDLE_NAME = "org.eclipse.wb.internal.core.wizards.messages"; //$NON-NLS-1$
+	public static String DesignerJavaProjectWizard_errorMessage;
+	public static String DesignerJavaProjectWizard_errorTitle;
+	public static String DesignerJavaProjectWizard_title;
+	public static String DesignerNewElementWizard_errorMessage;
+	public static String DesignerNewElementWizard_errorSeeLog;
+	public static String DesignerNewElementWizard_errorTitle;
+	public static String DesignerNewProjectCreationWizardPage_message;
+	public static String DesignerNewProjectCreationWizardPage_removeErrorMessage;
+	public static String DesignerNewProjectCreationWizardPage_removeErrorTitle;
+	public static String DesignerNewProjectCreationWizardPage_removeProgress;
+	public static String DesignerNewProjectCreationWizardPage_title;
+	static {
+		// initialize resource bundle
+		NLS.initializeMessages(BUNDLE_NAME, Messages.class);
+	}
 
-  private Messages() {
-  }
+	private Messages() {
+	}
 }
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/wizards/TemplateDesignWizardPage.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/wizards/TemplateDesignWizardPage.java
index ba91d6cff..fbb387bea 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/wizards/TemplateDesignWizardPage.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/wizards/TemplateDesignWizardPage.java
@@ -41,193 +41,193 @@
  * @coverage core.wizards.ui
  */
 public abstract class TemplateDesignWizardPage extends AbstractDesignWizardPage {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Template
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Add to <code>newType</code> imports, fields, methods and constructor from special template file
-   * <code>file</code>.
-   */
-  protected void fillTypeFromTemplate(IType newType,
-      ImportsManager imports,
-      IProgressMonitor monitor,
-      InputStream file) throws CoreException {
-    try {
-      StringBuffer method = null;
-      StringBuffer constructor = null;
-      boolean isMethod = false;
-      boolean isConstructor = false;
-      //
-      List<String> lines = IOUtils.readLines(file);
-      for (Iterator<String> I = lines.iterator(); I.hasNext();) {
-        String line = I.next();
-        // handle import
-        if (line.startsWith("import ")) {
-          int start = 7;
-          int end = line.indexOf(';', start + 1);
-          if (end != -1) {
-            imports.addImport(line.substring(start, end));
-          }
-        }
-        // handle start of constructor
-        if (line.startsWith("constructor")) {
-          isMethod = false;
-          isConstructor = true;
-          constructor = new StringBuffer();
-          method = null;
-          continue;
-        }
-        // handle start of method
-        if (line.startsWith("method")) {
-          isMethod = true;
-          isConstructor = false;
-          method = new StringBuffer();
-          constructor = null;
-          continue;
-        }
-        // handle field
-        if (line.startsWith("field")) {
-          line = I.next();
-          StringBuffer field = new StringBuffer(line);
-          field = performSubstitutions(field, imports);
-          String string = field.toString();
-          newType.createField(string, null, false, null);
-          continue;
-        }
-        // handle inner type
-        if (line.startsWith("innerTypeLine")) {
-          line = I.next();
-          StringBuffer buffer = new StringBuffer(line);
-          buffer = performSubstitutions(buffer, imports);
-          String content = buffer.toString();
-          newType.createType(content, null, false, null);
-          continue;
-        }
-        // handle separator
-        if (line.length() == 0) {
-          // replace special keys (%...%) on values
-          if (method != null) {
-            method = performSubstitutions(method, imports);
-          }
-          if (constructor != null) {
-            constructor = performSubstitutions(constructor, imports);
-          }
-          // add line to method or constructor body
-          if (isMethod && method != null && method.length() > 0) {
-            newType.createMethod(method.toString(), null, false, null);
-          } else if (isConstructor && constructor != null && constructor.length() > 0) {
-            newType.createMethod(
-                "public " + getTypeName() + constructor.toString(),
-                null,
-                false,
-                null);
-          }
-          // reset state
-          isMethod = false;
-          isConstructor = false;
-          method = null;
-          constructor = null;
-          continue;
-        }
-        // add method or constructor
-        if (isMethod && method != null) {
-          if (ProjectUtils.isJDK15(newType.getJavaProject()) || !line.trim().equals("@Override")) {
-            method.append(line + AstEditor.DEFAULT_END_OF_LINE);
-          }
-        } else if (isConstructor && constructor != null) {
-          constructor.append(line + AstEditor.DEFAULT_END_OF_LINE);
-        }
-        // check handle last line
-        if (!I.hasNext() && isMethod && method != null && method.length() > 0) {
-          newType.createMethod(method.toString(), null, false, null);
-        }
-      }
-    } catch (Throwable e) {
-      DesignerPlugin.log(e);
-    } finally {
-      IOUtils.closeQuietly(file);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Template
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Add to <code>newType</code> imports, fields, methods and constructor from special template file
+	 * <code>file</code>.
+	 */
+	protected void fillTypeFromTemplate(IType newType,
+			ImportsManager imports,
+			IProgressMonitor monitor,
+			InputStream file) throws CoreException {
+		try {
+			StringBuffer method = null;
+			StringBuffer constructor = null;
+			boolean isMethod = false;
+			boolean isConstructor = false;
+			//
+			List<String> lines = IOUtils.readLines(file);
+			for (Iterator<String> I = lines.iterator(); I.hasNext();) {
+				String line = I.next();
+				// handle import
+				if (line.startsWith("import ")) {
+					int start = 7;
+					int end = line.indexOf(';', start + 1);
+					if (end != -1) {
+						imports.addImport(line.substring(start, end));
+					}
+				}
+				// handle start of constructor
+				if (line.startsWith("constructor")) {
+					isMethod = false;
+					isConstructor = true;
+					constructor = new StringBuffer();
+					method = null;
+					continue;
+				}
+				// handle start of method
+				if (line.startsWith("method")) {
+					isMethod = true;
+					isConstructor = false;
+					method = new StringBuffer();
+					constructor = null;
+					continue;
+				}
+				// handle field
+				if (line.startsWith("field")) {
+					line = I.next();
+					StringBuffer field = new StringBuffer(line);
+					field = performSubstitutions(field, imports);
+					String string = field.toString();
+					newType.createField(string, null, false, null);
+					continue;
+				}
+				// handle inner type
+				if (line.startsWith("innerTypeLine")) {
+					line = I.next();
+					StringBuffer buffer = new StringBuffer(line);
+					buffer = performSubstitutions(buffer, imports);
+					String content = buffer.toString();
+					newType.createType(content, null, false, null);
+					continue;
+				}
+				// handle separator
+				if (line.length() == 0) {
+					// replace special keys (%...%) on values
+					if (method != null) {
+						method = performSubstitutions(method, imports);
+					}
+					if (constructor != null) {
+						constructor = performSubstitutions(constructor, imports);
+					}
+					// add line to method or constructor body
+					if (isMethod && method != null && method.length() > 0) {
+						newType.createMethod(method.toString(), null, false, null);
+					} else if (isConstructor && constructor != null && constructor.length() > 0) {
+						newType.createMethod(
+								"public " + getTypeName() + constructor.toString(),
+								null,
+								false,
+								null);
+					}
+					// reset state
+					isMethod = false;
+					isConstructor = false;
+					method = null;
+					constructor = null;
+					continue;
+				}
+				// add method or constructor
+				if (isMethod && method != null) {
+					if (ProjectUtils.isJDK15(newType.getJavaProject()) || !line.trim().equals("@Override")) {
+						method.append(line + AstEditor.DEFAULT_END_OF_LINE);
+					}
+				} else if (isConstructor && constructor != null) {
+					constructor.append(line + AstEditor.DEFAULT_END_OF_LINE);
+				}
+				// check handle last line
+				if (!I.hasNext() && isMethod && method != null && method.length() > 0) {
+					newType.createMethod(method.toString(), null, false, null);
+				}
+			}
+		} catch (Throwable e) {
+			DesignerPlugin.log(e);
+		} finally {
+			IOUtils.closeQuietly(file);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Substitution support
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private StringBuffer performSubstitutions(StringBuffer buffer, ImportsManager imports) {
-    String code = performSubstitutions(buffer.toString(), imports);
-    return new StringBuffer(code);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Substitution support
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private StringBuffer performSubstitutions(StringBuffer buffer, ImportsManager imports) {
+		String code = performSubstitutions(buffer.toString(), imports);
+		return new StringBuffer(code);
+	}
 
-  /**
-   * Replace special keys (%...%) on values.
-   */
-  protected String performSubstitutions(String code, ImportsManager imports) {
-    loadUIClasses();
-    code = StringUtils.replace(code, "%TypeName%", getTypeName());
-    code = StringUtils.replace(code, "%DefaultFormSize%", getDefaultFormSize());
-    code = StringUtils.replace(code, "%this%", getInstanceFieldQualification());
-    code = performFieldPrefixesSubstitutions(code);
-    return code;
-  }
+	/**
+	 * Replace special keys (%...%) on values.
+	 */
+	protected String performSubstitutions(String code, ImportsManager imports) {
+		loadUIClasses();
+		code = StringUtils.replace(code, "%TypeName%", getTypeName());
+		code = StringUtils.replace(code, "%DefaultFormSize%", getDefaultFormSize());
+		code = StringUtils.replace(code, "%this%", getInstanceFieldQualification());
+		code = performFieldPrefixesSubstitutions(code);
+		return code;
+	}
 
-  protected static String performFieldPrefixesSubstitutions(String code) {
-    code = StringUtils.replace(
-        code,
-        "%field-prefix%",
-        JavaCore.getOption(JavaCore.CODEASSIST_FIELD_PREFIXES));
-    code = StringUtils.replace(
-        code,
-        "%static-field-prefix%",
-        JavaCore.getOption(JavaCore.CODEASSIST_STATIC_FIELD_PREFIXES));
-    return code;
-  }
+	protected static String performFieldPrefixesSubstitutions(String code) {
+		code = StringUtils.replace(
+				code,
+				"%field-prefix%",
+				JavaCore.getOption(JavaCore.CODEASSIST_FIELD_PREFIXES));
+		code = StringUtils.replace(
+				code,
+				"%static-field-prefix%",
+				JavaCore.getOption(JavaCore.CODEASSIST_STATIC_FIELD_PREFIXES));
+		return code;
+	}
 
-  /**
-   * Load classes what need UI thread.
-   */
-  protected void loadUIClasses() {
-    Display.getDefault().syncExec(new Runnable() {
-      @Override
-      public void run() {
-        try {
-          Class.forName("org.eclipse.wb.internal.draw2d.IColorConstants");
-        } catch (Throwable e) {
-        }
-      }
-    });
-  }
+	/**
+	 * Load classes what need UI thread.
+	 */
+	protected void loadUIClasses() {
+		Display.getDefault().syncExec(new Runnable() {
+			@Override
+			public void run() {
+				try {
+					Class.forName("org.eclipse.wb.internal.draw2d.IColorConstants");
+				} catch (Throwable e) {
+				}
+			}
+		});
+	}
 
-  public String getDefaultFormSize() {
-    IPreferenceStore preferences = getToolkitDescription().getPreferences();
-    int width = preferences.getInt(IPreferenceConstants.P_GENERAL_DEFAULT_TOP_WIDTH);
-    int height = preferences.getInt(IPreferenceConstants.P_GENERAL_DEFAULT_TOP_HEIGHT);
-    return Integer.toString(width) + ", " + Integer.toString(height);
-  }
+	public String getDefaultFormSize() {
+		IPreferenceStore preferences = getToolkitDescription().getPreferences();
+		int width = preferences.getInt(IPreferenceConstants.P_GENERAL_DEFAULT_TOP_WIDTH);
+		int height = preferences.getInt(IPreferenceConstants.P_GENERAL_DEFAULT_TOP_HEIGHT);
+		return Integer.toString(width) + ", " + Integer.toString(height);
+	}
 
-  public String getInstanceFieldQualification() {
-    IPreferenceStore preferences = getToolkitDescription().getPreferences();
-    return preferences.getBoolean(FieldUniqueVariableSupport.P_PREFIX_THIS) ? "this." : "";
-  }
+	public String getInstanceFieldQualification() {
+		IPreferenceStore preferences = getToolkitDescription().getPreferences();
+		return preferences.getBoolean(FieldUniqueVariableSupport.P_PREFIX_THIS) ? "this." : "";
+	}
 
-  public final String getCreateMethod(String defaultMethod) {
-    String forcedMethodName = getToolkitDescription().getGenerationSettings().getForcedMethodName();
-    return StringUtils.isEmpty(forcedMethodName) ? defaultMethod : forcedMethodName;
-  }
+	public final String getCreateMethod(String defaultMethod) {
+		String forcedMethodName = getToolkitDescription().getGenerationSettings().getForcedMethodName();
+		return StringUtils.isEmpty(forcedMethodName) ? defaultMethod : forcedMethodName;
+	}
 
-  public final String getLayoutCode(String codePrefix, ImportsManager imports) {
-    ToolkitDescription toolkit = getToolkitDescription();
-    LayoutDescription layoutDescription = LayoutDescriptionHelper.get(
-        toolkit,
-        toolkit.getPreferences().getString(IPreferenceConstants.P_LAYOUT_DEFAULT));
-    if (layoutDescription != null) {
-      imports.addImport(layoutDescription.getLayoutClassName());
-      return codePrefix + "setLayout(" + layoutDescription.getSourceSmart() + ");";
-    }
-    return "";
-  }
+	public final String getLayoutCode(String codePrefix, ImportsManager imports) {
+		ToolkitDescription toolkit = getToolkitDescription();
+		LayoutDescription layoutDescription = LayoutDescriptionHelper.get(
+				toolkit,
+				toolkit.getPreferences().getString(IPreferenceConstants.P_LAYOUT_DEFAULT));
+		if (layoutDescription != null) {
+			imports.addImport(layoutDescription.getLayoutClassName());
+			return codePrefix + "setLayout(" + layoutDescription.getSourceSmart() + ");";
+		}
+		return "";
+	}
 
-  protected abstract ToolkitDescriptionJava getToolkitDescription();
+	protected abstract ToolkitDescriptionJava getToolkitDescription();
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/wizards/WizardUtils.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/wizards/WizardUtils.java
index bab749109..ddcad216a 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/wizards/WizardUtils.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/wizards/WizardUtils.java
@@ -26,30 +26,30 @@
  * @coverage core.wizards.ui
  */
 public class WizardUtils {
-  /**
-   * @return the {@link IJavaProject} of selection, may be <code>null</code>.
-   */
-  public static IJavaProject getJavaProject(IStructuredSelection selection) {
-    IJavaElement javaElement = getJavaElement(selection);
-    return javaElement == null ? null : javaElement.getJavaProject();
-  }
+	/**
+	 * @return the {@link IJavaProject} of selection, may be <code>null</code>.
+	 */
+	public static IJavaProject getJavaProject(IStructuredSelection selection) {
+		IJavaElement javaElement = getJavaElement(selection);
+		return javaElement == null ? null : javaElement.getJavaProject();
+	}
 
-  /**
-   * @return the {@link IJavaElement} of selection, may be <code>null</code>.
-   */
-  public static IJavaElement getJavaElement(IStructuredSelection selection) {
-    NewContainerWizardPage tmp = new NewContainerWizardPage("__tmp") {
-      @Override
-      public void createControl(Composite parent) {
-      }
-    };
-    try {
-      return (IJavaElement) ReflectionUtils.invokeMethodEx(
-          tmp,
-          "getInitialJavaElement(org.eclipse.jface.viewers.IStructuredSelection)",
-          selection);
-    } finally {
-      tmp.dispose();
-    }
-  }
+	/**
+	 * @return the {@link IJavaElement} of selection, may be <code>null</code>.
+	 */
+	public static IJavaElement getJavaElement(IStructuredSelection selection) {
+		NewContainerWizardPage tmp = new NewContainerWizardPage("__tmp") {
+			@Override
+			public void createControl(Composite parent) {
+			}
+		};
+		try {
+			return (IJavaElement) ReflectionUtils.invokeMethodEx(
+					tmp,
+					"getInitialJavaElement(org.eclipse.jface.viewers.IStructuredSelection)",
+					selection);
+		} finally {
+			tmp.dispose();
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.ui/src/org/eclipse/wb/internal/core/UiMessages.java b/org.eclipse.wb.core.ui/src/org/eclipse/wb/internal/core/UiMessages.java
index 69c2aca34..03214b779 100644
--- a/org.eclipse.wb.core.ui/src/org/eclipse/wb/internal/core/UiMessages.java
+++ b/org.eclipse.wb.core.ui/src/org/eclipse/wb/internal/core/UiMessages.java
@@ -3,55 +3,55 @@
 import org.eclipse.osgi.util.NLS;
 
 public class UiMessages extends NLS {
-  private static final String BUNDLE_NAME = "org.eclipse.wb.internal.core.UiMessages"; //$NON-NLS-1$
-  public static String AbstractOpenWizardAction_emptyWorkspaceMessage;
-  public static String AbstractOpenWizardAction_emptyWorkspaceTitle;
-  public static String LayoutsPreferencePage_availableLayouts;
-  public static String LayoutsPreferencePage_defaultLayout;
-  public static String LayoutsPreferencePage_implicitLayout;
-  public static String LayoutsPreferencePage_inheritLayout;
-  public static String MainPreferencePage_associateWithWB;
-  public static String MainPreferencePage_autoCustomOnChoose;
-  public static String MainPreferencePage_checkVersions;
-  public static String MainPreferencePage_closeEditorsWarning;
-  public static String MainPreferencePage_disableLinuxWorkaround;
-  public static String MainPreferencePage_doubleClick;
-  public static String MainPreferencePage_doubleClickOpenEditor;
-  public static String MainPreferencePage_doubleClickOpenEventListener;
-  public static String MainPreferencePage_doubleClickRename;
-  public static String MainPreferencePage_editorLayout;
-  public static String MainPreferencePage_editorLayoutSplitAbove;
-  public static String MainPreferencePage_editorLayoutSplitSide;
-  public static String MainPreferencePage_editorLayoutTabsDesign;
-  public static String MainPreferencePage_editorLayoutTabsSource;
-  public static String MainPreferencePage_formatOnSave;
-  public static String MainPreferencePage_formattingLink;
-  public static String MainPreferencePage_goInSourceOnSelection;
-  public static String MainPreferencePage_maximizeEditorOndesign;
-  public static String MainPreferencePage_showDebugOnConsole;
-  public static String MainPreferencePage_supportNonVisualBeans;
-  public static String MainPreferencePage_syncDelay;
-  public static String MainPreferencePage_syncDelayHint;
-  public static String MainPreferencePage_syncDelayMessage;
-  public static String NewProjectPalettePage_description;
-  public static String NewProjectPalettePage_projectBrowse;
-  public static String NewProjectPalettePage_projectLabel;
-  public static String NewProjectPalettePage_title;
-  public static String NewProjectPalettePage_toolkitLabel;
-  public static String NewProjectPalettePage_validateHasToolkit;
-  public static String NewProjectPalettePage_validateNoProject;
-  public static String NewProjectPaletteWizard_title;
-  public static String ParsingPreferencePage_hideBlockBegin;
-  public static String ParsingPreferencePage_hideBlockEnd;
-  public static String ParsingPreferencePage_hideSingle;
-  public static String ParsingPreferencePage_highlightVisitedLines;
-  public static String ParsingPreferencePage_highlightVisitedLinesColor;
-  public static String ParsingPreferencePage_strictEvaluate;
-  static {
-    // initialize resource bundle
-    NLS.initializeMessages(BUNDLE_NAME, UiMessages.class);
-  }
+	private static final String BUNDLE_NAME = "org.eclipse.wb.internal.core.UiMessages"; //$NON-NLS-1$
+	public static String AbstractOpenWizardAction_emptyWorkspaceMessage;
+	public static String AbstractOpenWizardAction_emptyWorkspaceTitle;
+	public static String LayoutsPreferencePage_availableLayouts;
+	public static String LayoutsPreferencePage_defaultLayout;
+	public static String LayoutsPreferencePage_implicitLayout;
+	public static String LayoutsPreferencePage_inheritLayout;
+	public static String MainPreferencePage_associateWithWB;
+	public static String MainPreferencePage_autoCustomOnChoose;
+	public static String MainPreferencePage_checkVersions;
+	public static String MainPreferencePage_closeEditorsWarning;
+	public static String MainPreferencePage_disableLinuxWorkaround;
+	public static String MainPreferencePage_doubleClick;
+	public static String MainPreferencePage_doubleClickOpenEditor;
+	public static String MainPreferencePage_doubleClickOpenEventListener;
+	public static String MainPreferencePage_doubleClickRename;
+	public static String MainPreferencePage_editorLayout;
+	public static String MainPreferencePage_editorLayoutSplitAbove;
+	public static String MainPreferencePage_editorLayoutSplitSide;
+	public static String MainPreferencePage_editorLayoutTabsDesign;
+	public static String MainPreferencePage_editorLayoutTabsSource;
+	public static String MainPreferencePage_formatOnSave;
+	public static String MainPreferencePage_formattingLink;
+	public static String MainPreferencePage_goInSourceOnSelection;
+	public static String MainPreferencePage_maximizeEditorOndesign;
+	public static String MainPreferencePage_showDebugOnConsole;
+	public static String MainPreferencePage_supportNonVisualBeans;
+	public static String MainPreferencePage_syncDelay;
+	public static String MainPreferencePage_syncDelayHint;
+	public static String MainPreferencePage_syncDelayMessage;
+	public static String NewProjectPalettePage_description;
+	public static String NewProjectPalettePage_projectBrowse;
+	public static String NewProjectPalettePage_projectLabel;
+	public static String NewProjectPalettePage_title;
+	public static String NewProjectPalettePage_toolkitLabel;
+	public static String NewProjectPalettePage_validateHasToolkit;
+	public static String NewProjectPalettePage_validateNoProject;
+	public static String NewProjectPaletteWizard_title;
+	public static String ParsingPreferencePage_hideBlockBegin;
+	public static String ParsingPreferencePage_hideBlockEnd;
+	public static String ParsingPreferencePage_hideSingle;
+	public static String ParsingPreferencePage_highlightVisitedLines;
+	public static String ParsingPreferencePage_highlightVisitedLinesColor;
+	public static String ParsingPreferencePage_strictEvaluate;
+	static {
+		// initialize resource bundle
+		NLS.initializeMessages(BUNDLE_NAME, UiMessages.class);
+	}
 
-  private UiMessages() {
-  }
+	private UiMessages() {
+	}
 }
diff --git a/org.eclipse.wb.core.ui/src/org/eclipse/wb/internal/core/preferences/LayoutsPreferencePage.java b/org.eclipse.wb.core.ui/src/org/eclipse/wb/internal/core/preferences/LayoutsPreferencePage.java
index c97334303..1ea9a4487 100644
--- a/org.eclipse.wb.core.ui/src/org/eclipse/wb/internal/core/preferences/LayoutsPreferencePage.java
+++ b/org.eclipse.wb.core.ui/src/org/eclipse/wb/internal/core/preferences/LayoutsPreferencePage.java
@@ -52,162 +52,162 @@
  * @coverage core.preferences.ui
  */
 public abstract class LayoutsPreferencePage extends AbstractBindingPreferencesPage {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public LayoutsPreferencePage(ToolkitDescription toolkit) {
-    super(toolkit);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected AbstractBindingComposite createBindingComposite(Composite parent) {
-    return new ContentsComposite(parent, m_bindManager, m_preferences);
-  }
-
-  @Override
-  public boolean performOk() {
-    try {
-      InstanceScope.INSTANCE.getNode(IEditorPreferenceConstants.P_AVAILABLE_LAYOUTS_NODE).flush();
-    } catch (BackingStoreException e) {
-      e.printStackTrace();
-    }
-    return super.performOk();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Contents
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected class ContentsComposite extends AbstractBindingComposite {
-    public ContentsComposite(Composite parent,
-        DataBindManager bindManager,
-        IPreferenceStore preferences) {
-      super(parent, bindManager, preferences);
-      int gridLayoutColumns = 2;
-      GridLayoutFactory.create(this).noMargins().columns(gridLayoutColumns);
-      // default layout
-      {
-        new Label(this, SWT.NONE).setText(UiMessages.LayoutsPreferencePage_defaultLayout);
-        final Combo layoutCombo = new Combo(this, SWT.READ_ONLY);
-        GridDataFactory.create(layoutCombo).grabH().fillH();
-        UiUtils.setVisibleItemCount(layoutCombo, 15);
-        // prepare layouts
-        final List<LayoutDescription> layouts = LayoutDescriptionHelper.get(m_toolkit);
-        Collections.sort(layouts, new Comparator<LayoutDescription>() {
-          @Override
-          public int compare(LayoutDescription layout_1, LayoutDescription layout_2) {
-            return layout_1.getName().compareTo(layout_2.getName());
-          }
-        });
-        // add items for layouts
-        {
-          layoutCombo.add(UiMessages.LayoutsPreferencePage_implicitLayout);
-          for (LayoutDescription layoutDescription : layouts) {
-            layoutCombo.add(layoutDescription.getName());
-          }
-        }
-
-		layoutCombo.addSelectionListener(new SelectionListener() {
-
-			@Override
-			public void widgetSelected(SelectionEvent e) {
-				// If a layout is specified as a default layout but the layout is not specified
-				// to be available in the table
-				// the default layout is set back to implicit layout
-				int index = layoutCombo.getSelectionIndex();
-				LayoutDescription layout = layouts.get(index - 1);
-				if (!isLayoutAvailable(layout)) {
-					layoutCombo.select(0);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public LayoutsPreferencePage(ToolkitDescription toolkit) {
+		super(toolkit);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected AbstractBindingComposite createBindingComposite(Composite parent) {
+		return new ContentsComposite(parent, m_bindManager, m_preferences);
+	}
+
+	@Override
+	public boolean performOk() {
+		try {
+			InstanceScope.INSTANCE.getNode(IEditorPreferenceConstants.P_AVAILABLE_LAYOUTS_NODE).flush();
+		} catch (BackingStoreException e) {
+			e.printStackTrace();
+		}
+		return super.performOk();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Contents
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected class ContentsComposite extends AbstractBindingComposite {
+		public ContentsComposite(Composite parent,
+				DataBindManager bindManager,
+				IPreferenceStore preferences) {
+			super(parent, bindManager, preferences);
+			int gridLayoutColumns = 2;
+			GridLayoutFactory.create(this).noMargins().columns(gridLayoutColumns);
+			// default layout
+			{
+				new Label(this, SWT.NONE).setText(UiMessages.LayoutsPreferencePage_defaultLayout);
+				final Combo layoutCombo = new Combo(this, SWT.READ_ONLY);
+				GridDataFactory.create(layoutCombo).grabH().fillH();
+				UiUtils.setVisibleItemCount(layoutCombo, 15);
+				// prepare layouts
+				final List<LayoutDescription> layouts = LayoutDescriptionHelper.get(m_toolkit);
+				Collections.sort(layouts, new Comparator<LayoutDescription>() {
+					@Override
+					public int compare(LayoutDescription layout_1, LayoutDescription layout_2) {
+						return layout_1.getName().compareTo(layout_2.getName());
+					}
+				});
+				// add items for layouts
+				{
+					layoutCombo.add(UiMessages.LayoutsPreferencePage_implicitLayout);
+					for (LayoutDescription layoutDescription : layouts) {
+						layoutCombo.add(layoutDescription.getName());
+					}
 				}
-			}
-			@Override
-			public void widgetDefaultSelected(SelectionEvent e) {
 
-			}
+				layoutCombo.addSelectionListener(new SelectionListener() {
+
+					@Override
+					public void widgetSelected(SelectionEvent e) {
+						// If a layout is specified as a default layout but the layout is not specified
+						// to be available in the table
+						// the default layout is set back to implicit layout
+						int index = layoutCombo.getSelectionIndex();
+						LayoutDescription layout = layouts.get(index - 1);
+						if (!isLayoutAvailable(layout)) {
+							layoutCombo.select(0);
+						}
+					}
+					@Override
+					public void widgetDefaultSelected(SelectionEvent e) {
+
+					}
 
-		});
-        // bind
-        m_bindManager.bind(new IDataEditor() {
-          @Override
-          public void setValue(Object value) {
-            String id = (String) value;
-            // implicit layout
-            if (StringUtils.isEmpty(id)) {
-              layoutCombo.select(0);
-              return;
-            }
-            // find layout by id
-            for (int index = 0; index < layouts.size(); index++) {
-              LayoutDescription layout = layouts.get(index);
-              if (layout.getId().equals(id)) {
-                layoutCombo.select(1 + index);
-              }
-            }
-          }
-
-          @Override
-          public Object getValue() {
-            int index = layoutCombo.getSelectionIndex();
-            if (index <= 0) {
-              // implicit layout
-              return null;
-            } else {
-              LayoutDescription layout = layouts.get(index - 1);
-					if (isLayoutAvailable(layout)) {
-						return layout.getId();
+				});
+				// bind
+				m_bindManager.bind(new IDataEditor() {
+					@Override
+					public void setValue(Object value) {
+						String id = (String) value;
+						// implicit layout
+						if (StringUtils.isEmpty(id)) {
+							layoutCombo.select(0);
+							return;
+						}
+						// find layout by id
+						for (int index = 0; index < layouts.size(); index++) {
+							LayoutDescription layout = layouts.get(index);
+							if (layout.getId().equals(id)) {
+								layoutCombo.select(1 + index);
+							}
+						}
 					}
-					return null;
-
-            }
-          }
-        },
-            new StringPreferenceProvider(m_preferences, IPreferenceConstants.P_LAYOUT_DEFAULT), true);
-        new Label(this, SWT.NONE).setText(UiMessages.LayoutsPreferencePage_availableLayouts);
-        Table table = new Table(this, SWT.CHECK | SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL);
-        for (LayoutDescription layout : layouts) {
-          TableItem checkItem = new TableItem(table, SWT.NONE);
-          checkItem.setText(layout.getName());
-          checkItem.setData(layout);
-          checkItem.setChecked(
-              InstanceScope.INSTANCE.getNode(
-                  IEditorPreferenceConstants.P_AVAILABLE_LAYOUTS_NODE).getBoolean(
-                      layout.getLayoutClassName(),
-                      true));
-        }
-        table.addListener(SWT.Selection, event -> {
-          if (event.detail == SWT.CHECK) {
-            InstanceScope.INSTANCE.getNode(
-                IEditorPreferenceConstants.P_AVAILABLE_LAYOUTS_NODE).putBoolean(
-                    ((LayoutDescription) ((TableItem) event.item).getData()).getLayoutClassName(),
-                    ((TableItem) event.item).getChecked());
-          }
-			// If default was set to a layoiut that is deselcted from available layouts. The
-			// default layout is set back to implicit layout
-			if (!((TableItem) event.item).getChecked()
-					&& ((LayoutDescription) ((TableItem) event.item).getData()).getName()
-					.contentEquals(layoutCombo.getText())) {
-				layoutCombo.select(0);
 
+					@Override
+					public Object getValue() {
+						int index = layoutCombo.getSelectionIndex();
+						if (index <= 0) {
+							// implicit layout
+							return null;
+						} else {
+							LayoutDescription layout = layouts.get(index - 1);
+							if (isLayoutAvailable(layout)) {
+								return layout.getId();
+							}
+							return null;
+
+						}
+					}
+				},
+						new StringPreferenceProvider(m_preferences, IPreferenceConstants.P_LAYOUT_DEFAULT), true);
+				new Label(this, SWT.NONE).setText(UiMessages.LayoutsPreferencePage_availableLayouts);
+				Table table = new Table(this, SWT.CHECK | SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL);
+				for (LayoutDescription layout : layouts) {
+					TableItem checkItem = new TableItem(table, SWT.NONE);
+					checkItem.setText(layout.getName());
+					checkItem.setData(layout);
+					checkItem.setChecked(
+							InstanceScope.INSTANCE.getNode(
+									IEditorPreferenceConstants.P_AVAILABLE_LAYOUTS_NODE).getBoolean(
+											layout.getLayoutClassName(),
+											true));
+				}
+				table.addListener(SWT.Selection, event -> {
+					if (event.detail == SWT.CHECK) {
+						InstanceScope.INSTANCE.getNode(
+								IEditorPreferenceConstants.P_AVAILABLE_LAYOUTS_NODE).putBoolean(
+										((LayoutDescription) ((TableItem) event.item).getData()).getLayoutClassName(),
+										((TableItem) event.item).getChecked());
+					}
+					// If default was set to a layoiut that is deselcted from available layouts. The
+					// default layout is set back to implicit layout
+					if (!((TableItem) event.item).getChecked()
+							&& ((LayoutDescription) ((TableItem) event.item).getData()).getName()
+							.contentEquals(layoutCombo.getText())) {
+						layoutCombo.select(0);
+
+					}
+				});
+				GridDataFactory.create(table).fillH().spanH(gridLayoutColumns);
 			}
-        });
-        GridDataFactory.create(table).fillH().spanH(gridLayoutColumns);
-      }
-      // boolean preferences
-      checkButton(
-          this,
-          2,
-          UiMessages.LayoutsPreferencePage_inheritLayout,
-          IPreferenceConstants.P_LAYOUT_OF_PARENT);
-    }
-  }
+			// boolean preferences
+			checkButton(
+					this,
+					2,
+					UiMessages.LayoutsPreferencePage_inheritLayout,
+					IPreferenceConstants.P_LAYOUT_OF_PARENT);
+		}
+	}
 
 	private static boolean isLayoutAvailable(LayoutDescription layout) {
 		return InstanceScope.INSTANCE.getNode(IEditorPreferenceConstants.P_AVAILABLE_LAYOUTS_NODE)
diff --git a/org.eclipse.wb.core.ui/src/org/eclipse/wb/internal/core/preferences/MainPreferencePage.java b/org.eclipse.wb.core.ui/src/org/eclipse/wb/internal/core/preferences/MainPreferencePage.java
index 0b158405b..a5b350e5c 100644
--- a/org.eclipse.wb.core.ui/src/org/eclipse/wb/internal/core/preferences/MainPreferencePage.java
+++ b/org.eclipse.wb.core.ui/src/org/eclipse/wb/internal/core/preferences/MainPreferencePage.java
@@ -35,138 +35,138 @@
  * @coverage core.preferences.ui
  */
 public final class MainPreferencePage extends FieldEditorPreferencePage
-    implements
-      IWorkbenchPreferencePage,
-      IPreferenceConstants {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public MainPreferencePage() {
-    super(GRID);
-    setPreferenceStore(DesignerPlugin.getPreferences());
-  }
+implements
+IWorkbenchPreferencePage,
+IPreferenceConstants {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public MainPreferencePage() {
+		super(GRID);
+		setPreferenceStore(DesignerPlugin.getPreferences());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // FieldEditorPreferencePage
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createFieldEditors() {
-    // hint
-    {
-      Label label = new Label(getFieldEditorParent(), SWT.NONE);
-      label.setText(UiMessages.MainPreferencePage_closeEditorsWarning);
-      GridDataFactory.create(label).spanH(2).alignHF();
-      PreferenceLinkArea link =
-          new PreferenceLinkArea(getFieldEditorParent(),
-              SWT.NONE,
-              "org.eclipse.jdt.ui.preferences.CodeFormatterPreferencePage",
-              UiMessages.MainPreferencePage_formattingLink,
-              (IWorkbenchPreferenceContainer) getContainer(),
-              null);
-      GridDataFactory.create(link.getControl()).spanH(2).alignHF();
-    }
-    // editor layout mode
-    {
-      ComboFieldEditor editorLayout =
-          new ComboFieldEditor(P_EDITOR_LAYOUT, "Editor layout:", new String[][]{
-              new String[]{
-                  "On separate notebook tabs (Source first)",
-                  "" + V_EDITOR_LAYOUT_PAGES_SOURCE},
-              new String[]{
-                  "On separate notebook tabs (Design first)",
-                  "" + V_EDITOR_LAYOUT_PAGES_DESIGN},
-              new String[]{
-                  "Above each other with a split pane (Source first)",
-                  "" + V_EDITOR_LAYOUT_SPLIT_VERTICAL_SOURCE},
-              new String[]{
-                  "Above each other with a split pane (Design first)",
-                  "" + V_EDITOR_LAYOUT_SPLIT_VERTICAL_DESIGN},
-              new String[]{
-                  "Side by side with a split pane (Source first)",
-                  "" + V_EDITOR_LAYOUT_SPLIT_HORIZONTAL_SOURCE},
-              new String[]{
-                  "Side by side with a split pane (Design first)",
-                  "" + V_EDITOR_LAYOUT_SPLIT_HORIZONTAL_DESIGN},}, getFieldEditorParent());
-      addField(editorLayout);
-      // sync delay
-      IntegerFieldEditor syncDelay =
-          new IntegerFieldEditor(P_EDITOR_LAYOUT_SYNC_DELAY,
-              UiMessages.MainPreferencePage_syncDelay,
-              getFieldEditorParent());
-      syncDelay.setErrorMessage(UiMessages.MainPreferencePage_syncDelayMessage);
-      syncDelay.setEmptyStringAllowed(false);
-      syncDelay.setValidRange(-1, Integer.MAX_VALUE);
-      syncDelay.getTextControl(getFieldEditorParent()).setToolTipText(
-          UiMessages.MainPreferencePage_syncDelayHint);
-      addField(syncDelay);
-    }
-    // other
-    ComboFieldEditor widgetTreeDblClickActionEditor =
-        new ComboFieldEditor(P_EDITOR_TREE_DBL_CLICK_ACTION,
-            UiMessages.MainPreferencePage_doubleClick,
-            new String[][]{
-                new String[]{
-                    UiMessages.MainPreferencePage_doubleClickOpenEditor,
-                    "" + V_EDITOR_TREE_OPEN_WIDGET_IN_EDITOR},
-                new String[]{
-                    UiMessages.MainPreferencePage_doubleClickOpenEventListener,
-                    "" + V_EDITOR_TREE_CREATE_LISTENER},
-                new String[]{
-                    UiMessages.MainPreferencePage_doubleClickRename,
-                    "" + V_EDITOR_TREE_INITIATE_RENAME},},
-            getFieldEditorParent());
-    addField(widgetTreeDblClickActionEditor);
-    //
-    addField(new BooleanFieldEditor(P_EDITOR_RECOGNIZE_GUI,
-        UiMessages.MainPreferencePage_associateWithWB,
-        getFieldEditorParent()));
-    addField(new BooleanFieldEditor(P_EDITOR_MAX_DESIGN,
-        UiMessages.MainPreferencePage_maximizeEditorOndesign,
-        getFieldEditorParent()));
-    addField(new BooleanFieldEditor(P_EDITOR_FORMAT_ON_SAVE,
-        UiMessages.MainPreferencePage_formatOnSave,
-        getFieldEditorParent()));
-    addField(new BooleanFieldEditor(P_EDITOR_GOTO_DEFINITION_ON_SELECTION,
-        UiMessages.MainPreferencePage_goInSourceOnSelection,
-        getFieldEditorParent()));
-    //
-    addField(new BooleanFieldEditor(P_COMMON_PALETTE_ADD_CHOSEN,
-        UiMessages.MainPreferencePage_autoCustomOnChoose,
-        getFieldEditorParent()));
-    addField(new BooleanFieldEditor(P_COMMON_ACCEPT_NON_VISUAL_BEANS,
-        UiMessages.MainPreferencePage_supportNonVisualBeans,
-        getFieldEditorParent()));
-    addField(new BooleanFieldEditor(P_COMMON_SHOW_DEBUG_INFO,
-        UiMessages.MainPreferencePage_showDebugOnConsole,
-        getFieldEditorParent()));
-    addField(new BooleanFieldEditor(P_COMMON_SHOW_VERSION_WARNING,
-        UiMessages.MainPreferencePage_checkVersions,
-        getFieldEditorParent()));
-    if (EnvironmentUtils.IS_LINUX) {
-      addField(new BooleanFieldEditor(P_COMMON_LINUX_DISABLE_SCREENSHOT_WORKAROUNDS,
-          UiMessages.MainPreferencePage_disableLinuxWorkaround,
-          getFieldEditorParent()));
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// FieldEditorPreferencePage
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createFieldEditors() {
+		// hint
+		{
+			Label label = new Label(getFieldEditorParent(), SWT.NONE);
+			label.setText(UiMessages.MainPreferencePage_closeEditorsWarning);
+			GridDataFactory.create(label).spanH(2).alignHF();
+			PreferenceLinkArea link =
+					new PreferenceLinkArea(getFieldEditorParent(),
+							SWT.NONE,
+							"org.eclipse.jdt.ui.preferences.CodeFormatterPreferencePage",
+							UiMessages.MainPreferencePage_formattingLink,
+							(IWorkbenchPreferenceContainer) getContainer(),
+							null);
+			GridDataFactory.create(link.getControl()).spanH(2).alignHF();
+		}
+		// editor layout mode
+		{
+			ComboFieldEditor editorLayout =
+					new ComboFieldEditor(P_EDITOR_LAYOUT, "Editor layout:", new String[][]{
+						new String[]{
+								"On separate notebook tabs (Source first)",
+								"" + V_EDITOR_LAYOUT_PAGES_SOURCE},
+						new String[]{
+								"On separate notebook tabs (Design first)",
+								"" + V_EDITOR_LAYOUT_PAGES_DESIGN},
+						new String[]{
+								"Above each other with a split pane (Source first)",
+								"" + V_EDITOR_LAYOUT_SPLIT_VERTICAL_SOURCE},
+						new String[]{
+								"Above each other with a split pane (Design first)",
+								"" + V_EDITOR_LAYOUT_SPLIT_VERTICAL_DESIGN},
+						new String[]{
+								"Side by side with a split pane (Source first)",
+								"" + V_EDITOR_LAYOUT_SPLIT_HORIZONTAL_SOURCE},
+						new String[]{
+								"Side by side with a split pane (Design first)",
+								"" + V_EDITOR_LAYOUT_SPLIT_HORIZONTAL_DESIGN},}, getFieldEditorParent());
+			addField(editorLayout);
+			// sync delay
+			IntegerFieldEditor syncDelay =
+					new IntegerFieldEditor(P_EDITOR_LAYOUT_SYNC_DELAY,
+							UiMessages.MainPreferencePage_syncDelay,
+							getFieldEditorParent());
+			syncDelay.setErrorMessage(UiMessages.MainPreferencePage_syncDelayMessage);
+			syncDelay.setEmptyStringAllowed(false);
+			syncDelay.setValidRange(-1, Integer.MAX_VALUE);
+			syncDelay.getTextControl(getFieldEditorParent()).setToolTipText(
+					UiMessages.MainPreferencePage_syncDelayHint);
+			addField(syncDelay);
+		}
+		// other
+		ComboFieldEditor widgetTreeDblClickActionEditor =
+				new ComboFieldEditor(P_EDITOR_TREE_DBL_CLICK_ACTION,
+						UiMessages.MainPreferencePage_doubleClick,
+						new String[][]{
+					new String[]{
+							UiMessages.MainPreferencePage_doubleClickOpenEditor,
+							"" + V_EDITOR_TREE_OPEN_WIDGET_IN_EDITOR},
+					new String[]{
+							UiMessages.MainPreferencePage_doubleClickOpenEventListener,
+							"" + V_EDITOR_TREE_CREATE_LISTENER},
+					new String[]{
+							UiMessages.MainPreferencePage_doubleClickRename,
+							"" + V_EDITOR_TREE_INITIATE_RENAME},},
+						getFieldEditorParent());
+		addField(widgetTreeDblClickActionEditor);
+		//
+		addField(new BooleanFieldEditor(P_EDITOR_RECOGNIZE_GUI,
+				UiMessages.MainPreferencePage_associateWithWB,
+				getFieldEditorParent()));
+		addField(new BooleanFieldEditor(P_EDITOR_MAX_DESIGN,
+				UiMessages.MainPreferencePage_maximizeEditorOndesign,
+				getFieldEditorParent()));
+		addField(new BooleanFieldEditor(P_EDITOR_FORMAT_ON_SAVE,
+				UiMessages.MainPreferencePage_formatOnSave,
+				getFieldEditorParent()));
+		addField(new BooleanFieldEditor(P_EDITOR_GOTO_DEFINITION_ON_SELECTION,
+				UiMessages.MainPreferencePage_goInSourceOnSelection,
+				getFieldEditorParent()));
+		//
+		addField(new BooleanFieldEditor(P_COMMON_PALETTE_ADD_CHOSEN,
+				UiMessages.MainPreferencePage_autoCustomOnChoose,
+				getFieldEditorParent()));
+		addField(new BooleanFieldEditor(P_COMMON_ACCEPT_NON_VISUAL_BEANS,
+				UiMessages.MainPreferencePage_supportNonVisualBeans,
+				getFieldEditorParent()));
+		addField(new BooleanFieldEditor(P_COMMON_SHOW_DEBUG_INFO,
+				UiMessages.MainPreferencePage_showDebugOnConsole,
+				getFieldEditorParent()));
+		addField(new BooleanFieldEditor(P_COMMON_SHOW_VERSION_WARNING,
+				UiMessages.MainPreferencePage_checkVersions,
+				getFieldEditorParent()));
+		if (EnvironmentUtils.IS_LINUX) {
+			addField(new BooleanFieldEditor(P_COMMON_LINUX_DISABLE_SCREENSHOT_WORKAROUNDS,
+					UiMessages.MainPreferencePage_disableLinuxWorkaround,
+					getFieldEditorParent()));
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // PreferencePage
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void init(IWorkbench workbench) {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// PreferencePage
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void init(IWorkbench workbench) {
+	}
 
-  @Override
-  protected void performDefaults() {
-    super.performDefaults();
-    IPreferenceStore store = DesignerPlugin.getDefault().getPreferenceStore();
-    store.setToDefault(P_EDITOR_LAYOUT);
-    store.setToDefault(P_EDITOR_LAYOUT_SYNC_DELAY);
-  }
+	@Override
+	protected void performDefaults() {
+		super.performDefaults();
+		IPreferenceStore store = DesignerPlugin.getDefault().getPreferenceStore();
+		store.setToDefault(P_EDITOR_LAYOUT);
+		store.setToDefault(P_EDITOR_LAYOUT_SYNC_DELAY);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.ui/src/org/eclipse/wb/internal/core/preferences/ParsingPreferencePage.java b/org.eclipse.wb.core.ui/src/org/eclipse/wb/internal/core/preferences/ParsingPreferencePage.java
index b69164b06..343ba591a 100644
--- a/org.eclipse.wb.core.ui/src/org/eclipse/wb/internal/core/preferences/ParsingPreferencePage.java
+++ b/org.eclipse.wb.core.ui/src/org/eclipse/wb/internal/core/preferences/ParsingPreferencePage.java
@@ -28,67 +28,67 @@
  * @coverage core.preferences.ui
  */
 public final class ParsingPreferencePage extends FieldEditorPreferencePage
-    implements
-      IWorkbenchPreferencePage,
-      IPreferenceConstants {
-  private StringFieldEditor m_hideBeginEditor;
-  private StringFieldEditor m_hideEndEditor;
-  private StringFieldEditor m_hideLineEditor;
+implements
+IWorkbenchPreferencePage,
+IPreferenceConstants {
+	private StringFieldEditor m_hideBeginEditor;
+	private StringFieldEditor m_hideEndEditor;
+	private StringFieldEditor m_hideLineEditor;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ParsingPreferencePage() {
-    super(GRID);
-    setPreferenceStore(DesignerPlugin.getDefault().getPreferenceStore());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ParsingPreferencePage() {
+		super(GRID);
+		setPreferenceStore(DesignerPlugin.getDefault().getPreferenceStore());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // FieldEditorPreferencePage
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createFieldEditors() {
-    m_hideBeginEditor =
-        new StringFieldEditor(P_CODE_HIDE_BEGIN,
-            UiMessages.ParsingPreferencePage_hideBlockBegin,
-            getFieldEditorParent());
-    m_hideEndEditor =
-        new StringFieldEditor(P_CODE_HIDE_END,
-            UiMessages.ParsingPreferencePage_hideBlockEnd,
-            getFieldEditorParent());
-    m_hideLineEditor =
-        new StringFieldEditor(P_CODE_HIDE_LINE,
-            UiMessages.ParsingPreferencePage_hideSingle,
-            getFieldEditorParent());
-    m_hideBeginEditor.setEmptyStringAllowed(false);
-    m_hideEndEditor.setEmptyStringAllowed(false);
-    m_hideLineEditor.setEmptyStringAllowed(false);
-    addField(m_hideBeginEditor);
-    addField(m_hideEndEditor);
-    addField(m_hideLineEditor);
-    // evaluation
-    addField(new BooleanFieldEditor(P_CODE_STRICT_EVALUATE,
-        UiMessages.ParsingPreferencePage_strictEvaluate,
-        getFieldEditorParent()));
-    // highlight visited/executed lines
-    addField(new BooleanFieldEditor(P_HIGHLIGHT_VISITED,
-        UiMessages.ParsingPreferencePage_highlightVisitedLines,
-        getFieldEditorParent()));
-    addField(new ColorFieldEditor(P_HIGHLIGHT_VISITED_COLOR,
-        UiMessages.ParsingPreferencePage_highlightVisitedLinesColor,
-        getFieldEditorParent()));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// FieldEditorPreferencePage
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createFieldEditors() {
+		m_hideBeginEditor =
+				new StringFieldEditor(P_CODE_HIDE_BEGIN,
+						UiMessages.ParsingPreferencePage_hideBlockBegin,
+						getFieldEditorParent());
+		m_hideEndEditor =
+				new StringFieldEditor(P_CODE_HIDE_END,
+						UiMessages.ParsingPreferencePage_hideBlockEnd,
+						getFieldEditorParent());
+		m_hideLineEditor =
+				new StringFieldEditor(P_CODE_HIDE_LINE,
+						UiMessages.ParsingPreferencePage_hideSingle,
+						getFieldEditorParent());
+		m_hideBeginEditor.setEmptyStringAllowed(false);
+		m_hideEndEditor.setEmptyStringAllowed(false);
+		m_hideLineEditor.setEmptyStringAllowed(false);
+		addField(m_hideBeginEditor);
+		addField(m_hideEndEditor);
+		addField(m_hideLineEditor);
+		// evaluation
+		addField(new BooleanFieldEditor(P_CODE_STRICT_EVALUATE,
+				UiMessages.ParsingPreferencePage_strictEvaluate,
+				getFieldEditorParent()));
+		// highlight visited/executed lines
+		addField(new BooleanFieldEditor(P_HIGHLIGHT_VISITED,
+				UiMessages.ParsingPreferencePage_highlightVisitedLines,
+				getFieldEditorParent()));
+		addField(new ColorFieldEditor(P_HIGHLIGHT_VISITED_COLOR,
+				UiMessages.ParsingPreferencePage_highlightVisitedLinesColor,
+				getFieldEditorParent()));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // PreferencePage
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void init(IWorkbench workbench) {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// PreferencePage
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void init(IWorkbench workbench) {
+	}
 }
diff --git a/org.eclipse.wb.core.ui/src/org/eclipse/wb/internal/core/preferences/PreferencePageFactory.java b/org.eclipse.wb.core.ui/src/org/eclipse/wb/internal/core/preferences/PreferencePageFactory.java
index 85b1e12d9..f707d51de 100644
--- a/org.eclipse.wb.core.ui/src/org/eclipse/wb/internal/core/preferences/PreferencePageFactory.java
+++ b/org.eclipse.wb.core.ui/src/org/eclipse/wb/internal/core/preferences/PreferencePageFactory.java
@@ -32,44 +32,44 @@
  * @coverage core.preferences.ui
  */
 public final class PreferencePageFactory
-    implements
-      IExecutableExtension,
-      IExecutableExtensionFactory {
-  private String m_pageClassName;
-  private String m_toolkitId;
+implements
+IExecutableExtension,
+IExecutableExtensionFactory {
+	private String m_pageClassName;
+	private String m_toolkitId;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IExecutableExtension
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void setInitializationData(IConfigurationElement config, String propertyName, Object data)
-      throws CoreException {
-    try {
-      String[] parameters = StringUtils.split((String) data);
-      m_pageClassName = parameters[0];
-      m_toolkitId = parameters[1];
-    } catch (Throwable e) {
-      throw new CoreException(StatusUtils.createError(e.getMessage()));
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IExecutableExtension
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void setInitializationData(IConfigurationElement config, String propertyName, Object data)
+			throws CoreException {
+		try {
+			String[] parameters = StringUtils.split((String) data);
+			m_pageClassName = parameters[0];
+			m_toolkitId = parameters[1];
+		} catch (Throwable e) {
+			throw new CoreException(StatusUtils.createError(e.getMessage()));
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IExecutableExtensionFactory
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Object create() throws CoreException {
-    try {
-      Class<?> pageClass = Class.forName(m_pageClassName);
-      Constructor<?> constructor = pageClass.getConstructor(ToolkitDescription.class);
-      //
-      ToolkitDescription toolkit = DescriptionHelper.getToolkit(m_toolkitId);
-      return constructor.newInstance(toolkit);
-    } catch (Throwable e) {
-      throw new CoreException(StatusUtils.createError(e.getMessage()));
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IExecutableExtensionFactory
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Object create() throws CoreException {
+		try {
+			Class<?> pageClass = Class.forName(m_pageClassName);
+			Constructor<?> constructor = pageClass.getConstructor(ToolkitDescription.class);
+			//
+			ToolkitDescription toolkit = DescriptionHelper.getToolkit(m_toolkitId);
+			return constructor.newInstance(toolkit);
+		} catch (Throwable e) {
+			throw new CoreException(StatusUtils.createError(e.getMessage()));
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.ui/src/org/eclipse/wb/internal/core/wizards/actions/AbstractOpenWizardAction.java b/org.eclipse.wb.core.ui/src/org/eclipse/wb/internal/core/wizards/actions/AbstractOpenWizardAction.java
index 4acff2e98..900e3b5d4 100644
--- a/org.eclipse.wb.core.ui/src/org/eclipse/wb/internal/core/wizards/actions/AbstractOpenWizardAction.java
+++ b/org.eclipse.wb.core.ui/src/org/eclipse/wb/internal/core/wizards/actions/AbstractOpenWizardAction.java
@@ -38,219 +38,219 @@
 import java.util.Iterator;
 
 public abstract class AbstractOpenWizardAction extends Action
-    implements
-      IWorkbenchWindowActionDelegate {
-  private final Class<?>[] fActivatedOnTypes;
-  private final boolean fAcceptEmptySelection;
-  private final boolean fNoChecking;
+implements
+IWorkbenchWindowActionDelegate {
+	private final Class<?>[] fActivatedOnTypes;
+	private final boolean fAcceptEmptySelection;
+	private final boolean fNoChecking;
 
-  /**
-   * Creates a AbstractOpenWizardAction.
-   *
-   * @param label
-   *          The label of the action
-   * @param acceptEmptySelection
-   *          Specifies if the action allows an empty selection
-   */
-  public AbstractOpenWizardAction(String label, boolean acceptEmptySelection) {
-    this(label, null, acceptEmptySelection);
-  }
+	/**
+	 * Creates a AbstractOpenWizardAction.
+	 *
+	 * @param label
+	 *          The label of the action
+	 * @param acceptEmptySelection
+	 *          Specifies if the action allows an empty selection
+	 */
+	public AbstractOpenWizardAction(String label, boolean acceptEmptySelection) {
+		this(label, null, acceptEmptySelection);
+	}
 
-  /**
-   * Creates a AbstractOpenWizardAction.
-   *
-   * @param label
-   *          The label of the action
-   * @param activatedOnTypes
-   *          The action is only enabled when all objects in the selection are of the given types.
-   *          <code>null</code> will allow all types.
-   * @param acceptEmptySelection
-   *          Specifies if the action allows an empty selection
-   */
-  public AbstractOpenWizardAction(String label,
-      Class<?>[] activatedOnTypes,
-      boolean acceptEmptySelection) {
-    super(label);
-    fActivatedOnTypes = activatedOnTypes;
-    fAcceptEmptySelection = acceptEmptySelection;
-    fNoChecking = false;
-  }
+	/**
+	 * Creates a AbstractOpenWizardAction.
+	 *
+	 * @param label
+	 *          The label of the action
+	 * @param activatedOnTypes
+	 *          The action is only enabled when all objects in the selection are of the given types.
+	 *          <code>null</code> will allow all types.
+	 * @param acceptEmptySelection
+	 *          Specifies if the action allows an empty selection
+	 */
+	public AbstractOpenWizardAction(String label,
+			Class<?>[] activatedOnTypes,
+			boolean acceptEmptySelection) {
+		super(label);
+		fActivatedOnTypes = activatedOnTypes;
+		fAcceptEmptySelection = acceptEmptySelection;
+		fNoChecking = false;
+	}
 
-  /**
-   * Creates a AbstractOpenWizardAction with no restrictions on types, and does allow an empty
-   * selection.
-   */
-  protected AbstractOpenWizardAction() {
-    fActivatedOnTypes = null;
-    fAcceptEmptySelection = true;
-    fNoChecking = true;
-  }
+	/**
+	 * Creates a AbstractOpenWizardAction with no restrictions on types, and does allow an empty
+	 * selection.
+	 */
+	protected AbstractOpenWizardAction() {
+		fActivatedOnTypes = null;
+		fAcceptEmptySelection = true;
+		fNoChecking = true;
+	}
 
-  /**
-   * Answer the window for the currently active workbench or null if no workbench windows are open
-   */
-  public IWorkbenchWindow getWorkbenchWindow() {
-    IWorkbench workbench = getWorkbench();
-    IWorkbenchWindow window = workbench.getActiveWorkbenchWindow();
-    if (window == null) {
-      IWorkbenchWindow[] openWindows = workbench.getWorkbenchWindows();
-      for (int i = 0; i < openWindows.length; i++) {
-        if (!openWindows[i].getShell().isDisposed()) {
-          window = openWindows[i];
-          break;
-        }
-      }
-    }
-    return window;
-  }
+	/**
+	 * Answer the window for the currently active workbench or null if no workbench windows are open
+	 */
+	public IWorkbenchWindow getWorkbenchWindow() {
+		IWorkbench workbench = getWorkbench();
+		IWorkbenchWindow window = workbench.getActiveWorkbenchWindow();
+		if (window == null) {
+			IWorkbenchWindow[] openWindows = workbench.getWorkbenchWindows();
+			for (int i = 0; i < openWindows.length; i++) {
+				if (!openWindows[i].getShell().isDisposed()) {
+					window = openWindows[i];
+					break;
+				}
+			}
+		}
+		return window;
+	}
 
-  protected IWorkbench getWorkbench() {
-    return PlatformUI.getWorkbench();
-  }
+	protected IWorkbench getWorkbench() {
+		return PlatformUI.getWorkbench();
+	}
 
-  private boolean isOfAcceptedType(Object obj) {
-    if (fActivatedOnTypes != null) {
-      for (int i = 0; i < fActivatedOnTypes.length; i++) {
-        if (fActivatedOnTypes[i].isInstance(obj)) {
-          return true;
-        }
-      }
-      return false;
-    }
-    return true;
-  }
+	private boolean isOfAcceptedType(Object obj) {
+		if (fActivatedOnTypes != null) {
+			for (int i = 0; i < fActivatedOnTypes.length; i++) {
+				if (fActivatedOnTypes[i].isInstance(obj)) {
+					return true;
+				}
+			}
+			return false;
+		}
+		return true;
+	}
 
-  private boolean isEnabled(IStructuredSelection selection) {
-    Iterator<?> iter = selection.iterator();
-    while (iter.hasNext()) {
-      Object obj = iter.next();
-      if (!isOfAcceptedType(obj) || !shouldAcceptElement(obj)) {
-        return false;
-      }
-    }
-    return true;
-  }
+	private boolean isEnabled(IStructuredSelection selection) {
+		Iterator<?> iter = selection.iterator();
+		while (iter.hasNext()) {
+			Object obj = iter.next();
+			if (!isOfAcceptedType(obj) || !shouldAcceptElement(obj)) {
+				return false;
+			}
+		}
+		return true;
+	}
 
-  /**
-   * Can be overridden to add more checks. obj is guaranteed to be instance of one of the accepted
-   * types
-   */
-  protected boolean shouldAcceptElement(Object obj) {
-    return true;
-  }
+	/**
+	 * Can be overridden to add more checks. obj is guaranteed to be instance of one of the accepted
+	 * types
+	 */
+	protected boolean shouldAcceptElement(Object obj) {
+		return true;
+	}
 
-  /**
-   * Creates the specific wizard. (to be implemented by a subclass)
-   */
-  abstract protected Wizard createWizard();
+	/**
+	 * Creates the specific wizard. (to be implemented by a subclass)
+	 */
+	abstract protected Wizard createWizard();
 
-  protected IStructuredSelection getCurrentSelection() {
-    IWorkbenchWindow window = getWorkbenchWindow();
-    if (window != null) {
-      ISelection selection = window.getSelectionService().getSelection();
-      if (selection instanceof IStructuredSelection) {
-        return (IStructuredSelection) selection;
-      }
-      if (selection instanceof ITextSelection) {
-        IEditorPart activeEditor = DesignerPlugin.getActiveEditor();
-        if (activeEditor != null) {
-          IEditorInput editorInput = activeEditor.getEditorInput();
-          if (editorInput instanceof IFileEditorInput) {
-            IFileEditorInput fileEditorInput = (IFileEditorInput) editorInput;
-            return new StructuredSelection(fileEditorInput.getFile());
-          }
-        }
-      }
-    }
-    return StructuredSelection.EMPTY;
-  }
+	protected IStructuredSelection getCurrentSelection() {
+		IWorkbenchWindow window = getWorkbenchWindow();
+		if (window != null) {
+			ISelection selection = window.getSelectionService().getSelection();
+			if (selection instanceof IStructuredSelection) {
+				return (IStructuredSelection) selection;
+			}
+			if (selection instanceof ITextSelection) {
+				IEditorPart activeEditor = DesignerPlugin.getActiveEditor();
+				if (activeEditor != null) {
+					IEditorInput editorInput = activeEditor.getEditorInput();
+					if (editorInput instanceof IFileEditorInput) {
+						IFileEditorInput fileEditorInput = (IFileEditorInput) editorInput;
+						return new StructuredSelection(fileEditorInput.getFile());
+					}
+				}
+			}
+		}
+		return StructuredSelection.EMPTY;
+	}
 
-  /**
-   * The user has invoked this action.
-   */
-  @Override
-  public void run() {
-    if (!fNoChecking && !canActionBeAdded()) {
-      return;
-    }
-    if (!checkWorkspace()) {
-      return;
-    }
-    Wizard wizard = createWizard();
-    if (wizard instanceof IWorkbenchWizard) {
-      ((IWorkbenchWizard) wizard).init(getWorkbench(), getCurrentSelection());
-    }
-    WizardDialog dialog = new WizardDialog(getWorkbenchWindow().getShell(), wizard);
-    dialog.create();
-    String title = wizard.getWindowTitle();
-    if (title != null) {
-      dialog.getShell().setText(title);
-    }
-    //$NON-NLS-1$
-    dialog.open();
-  }
+	/**
+	 * The user has invoked this action.
+	 */
+	@Override
+	public void run() {
+		if (!fNoChecking && !canActionBeAdded()) {
+			return;
+		}
+		if (!checkWorkspace()) {
+			return;
+		}
+		Wizard wizard = createWizard();
+		if (wizard instanceof IWorkbenchWizard) {
+			((IWorkbenchWizard) wizard).init(getWorkbench(), getCurrentSelection());
+		}
+		WizardDialog dialog = new WizardDialog(getWorkbenchWindow().getShell(), wizard);
+		dialog.create();
+		String title = wizard.getWindowTitle();
+		if (title != null) {
+			dialog.getShell().setText(title);
+		}
+		//$NON-NLS-1$
+		dialog.open();
+	}
 
-  /**
-   * Tests if the action can be run on the current selection.
-   */
-  public boolean canActionBeAdded() {
-    IStructuredSelection selection = getCurrentSelection();
-    if (selection == null || selection.isEmpty()) {
-      return fAcceptEmptySelection;
-    }
-    return isEnabled(selection);
-  }
+	/**
+	 * Tests if the action can be run on the current selection.
+	 */
+	public boolean canActionBeAdded() {
+		IStructuredSelection selection = getCurrentSelection();
+		if (selection == null || selection.isEmpty()) {
+			return fAcceptEmptySelection;
+		}
+		return isEnabled(selection);
+	}
 
-  /*
-   * @see IActionDelegate#run(IAction)
-   */
-  @Override
-  public void run(IAction action) {
-    run();
-  }
+	/*
+	 * @see IActionDelegate#run(IAction)
+	 */
+	@Override
+	public void run(IAction action) {
+		run();
+	}
 
-  /*
-   * @see IWorkbenchWindowActionDelegate#dispose()
-   */
-  @Override
-  public void dispose() {
-  }
+	/*
+	 * @see IWorkbenchWindowActionDelegate#dispose()
+	 */
+	@Override
+	public void dispose() {
+	}
 
-  /*
-   * @see IWorkbenchWindowActionDelegate#init(IWorkbenchWindow)
-   */
-  @Override
-  public void init(IWorkbenchWindow window) {
-  }
+	/*
+	 * @see IWorkbenchWindowActionDelegate#init(IWorkbenchWindow)
+	 */
+	@Override
+	public void init(IWorkbenchWindow window) {
+	}
 
-  /*
-   * @see IActionDelegate#selectionChanged(IAction, ISelection)
-   */
-  @Override
-  public void selectionChanged(IAction action, ISelection selection) {
-    // selection taken from selectionprovider
-  }
+	/*
+	 * @see IActionDelegate#selectionChanged(IAction, ISelection)
+	 */
+	@Override
+	public void selectionChanged(IAction action, ISelection selection) {
+		// selection taken from selectionprovider
+	}
 
-  /**
-   * Check that workspace is in correct state (for example there are projects). Do nothing by
-   * default.
-   */
-  protected boolean checkWorkspace() {
-    return true;
-  }
+	/**
+	 * Check that workspace is in correct state (for example there are projects). Do nothing by
+	 * default.
+	 */
+	protected boolean checkWorkspace() {
+		return true;
+	}
 
-  protected final boolean checkWorkspaceNotEmpty() {
-    IWorkspace workspace = ResourcesPlugin.getWorkspace();
-    if (workspace.getRoot().getProjects().length == 0) {
-      Shell shell = getWorkbenchWindow().getShell();
-      String title = UiMessages.AbstractOpenWizardAction_emptyWorkspaceTitle;
-      String message = UiMessages.AbstractOpenWizardAction_emptyWorkspaceMessage;
-      if (MessageDialog.openQuestion(shell, title, message)) {
-        new NewProjectAction().run();
-        return workspace.getRoot().getProjects().length != 0;
-      }
-      return false;
-    }
-    return true;
-  }
+	protected final boolean checkWorkspaceNotEmpty() {
+		IWorkspace workspace = ResourcesPlugin.getWorkspace();
+		if (workspace.getRoot().getProjects().length == 0) {
+			Shell shell = getWorkbenchWindow().getShell();
+			String title = UiMessages.AbstractOpenWizardAction_emptyWorkspaceTitle;
+			String message = UiMessages.AbstractOpenWizardAction_emptyWorkspaceMessage;
+			if (MessageDialog.openQuestion(shell, title, message)) {
+				new NewProjectAction().run();
+				return workspace.getRoot().getProjects().length != 0;
+			}
+			return false;
+		}
+		return true;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.ui/src/org/eclipse/wb/internal/core/wizards/actions/NewDesignerTypeDropDownAction.java b/org.eclipse.wb.core.ui/src/org/eclipse/wb/internal/core/wizards/actions/NewDesignerTypeDropDownAction.java
index 640e6ffe0..c312d8628 100644
--- a/org.eclipse.wb.core.ui/src/org/eclipse/wb/internal/core/wizards/actions/NewDesignerTypeDropDownAction.java
+++ b/org.eclipse.wb.core.ui/src/org/eclipse/wb/internal/core/wizards/actions/NewDesignerTypeDropDownAction.java
@@ -41,217 +41,217 @@
  * @coverage core.wizards.ui
  */
 public class NewDesignerTypeDropDownAction extends Action
-    implements
-      IWorkbenchWindowPulldownDelegate,
-      IActionDelegate2 {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance fields
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Menu m_menu;
+implements
+IWorkbenchWindowPulldownDelegate,
+IActionDelegate2 {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance fields
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Menu m_menu;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public NewDesignerTypeDropDownAction() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public NewDesignerTypeDropDownAction() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IMenuCreator
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void dispose() {
-    if (m_menu != null) {
-      m_menu.dispose();
-      m_menu = null;
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IMenuCreator
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void dispose() {
+		if (m_menu != null) {
+			m_menu.dispose();
+			m_menu = null;
+		}
+	}
 
-  @Override
-  public Menu getMenu(Control parent) {
-    m_menu = null;
-    if (m_menu == null) {
-      m_menu = new Menu(parent);
-      createCategoryItems(m_menu, "org.eclipse.wb");
-      disposeExtraSeparators(m_menu);
-    }
-    return m_menu;
-  }
+	@Override
+	public Menu getMenu(Control parent) {
+		m_menu = null;
+		if (m_menu == null) {
+			m_menu = new Menu(parent);
+			createCategoryItems(m_menu, "org.eclipse.wb");
+			disposeExtraSeparators(m_menu);
+		}
+		return m_menu;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Implementation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static void createCategoryItems(Menu parent, String parentCategoryId) {
-    // process wizards
-    for (IConfigurationElement wizard : getWizardWizards(parentCategoryId)) {
-      if (isWizardVisibleInMenu(wizard)) {
-        IAction action = new OpenTypeWizardAction(wizard);
-        ActionContributionItem item = new ActionContributionItem(action);
-        item.fill(parent, -1);
-      }
-    }
-    // process sub-categories
-    for (IConfigurationElement category : getWizardCategories(parentCategoryId)) {
-      boolean isInline = "true".equals(category.getAttribute("wbp-menu-inline"));
-      // prepare Menu for category items
-      Menu categoryMenu;
-      if (isInline) {
-        addSeparator(parent);
-        categoryMenu = parent;
-      } else {
-        MenuItem categoryItem = new MenuItem(parent, SWT.CASCADE);
-        categoryItem.setText(getCategoryName(category));
-        categoryMenu = new Menu(categoryItem);
-        categoryItem.setMenu(categoryMenu);
-      }
-      // process children
-      createCategoryItems(categoryMenu, parentCategoryId + "/" + category.getAttribute("id"));
-      // add separator after inlined category
-      if (isInline) {
-        addSeparator(parent);
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Implementation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static void createCategoryItems(Menu parent, String parentCategoryId) {
+		// process wizards
+		for (IConfigurationElement wizard : getWizardWizards(parentCategoryId)) {
+			if (isWizardVisibleInMenu(wizard)) {
+				IAction action = new OpenTypeWizardAction(wizard);
+				ActionContributionItem item = new ActionContributionItem(action);
+				item.fill(parent, -1);
+			}
+		}
+		// process sub-categories
+		for (IConfigurationElement category : getWizardCategories(parentCategoryId)) {
+			boolean isInline = "true".equals(category.getAttribute("wbp-menu-inline"));
+			// prepare Menu for category items
+			Menu categoryMenu;
+			if (isInline) {
+				addSeparator(parent);
+				categoryMenu = parent;
+			} else {
+				MenuItem categoryItem = new MenuItem(parent, SWT.CASCADE);
+				categoryItem.setText(getCategoryName(category));
+				categoryMenu = new Menu(categoryItem);
+				categoryItem.setMenu(categoryMenu);
+			}
+			// process children
+			createCategoryItems(categoryMenu, parentCategoryId + "/" + category.getAttribute("id"));
+			// add separator after inlined category
+			if (isInline) {
+				addSeparator(parent);
+			}
+		}
+	}
 
-  private static void addSeparator(Menu parent) {
-    new MenuItem(parent, SWT.SEPARATOR);
-  }
+	private static void addSeparator(Menu parent) {
+		new MenuItem(parent, SWT.SEPARATOR);
+	}
 
-  private static void disposeExtraSeparators(Menu menu) {
-    if (menu == null) {
-      return;
-    }
-    // dispose adjacent separators
-    boolean separator = false;
-    for (MenuItem item : menu.getItems()) {
-      if (isSeparator(item)) {
-        if (separator) {
-          item.dispose();
-        }
-        separator = true;
-      } else {
-        separator = false;
-        disposeExtraSeparators(item.getMenu());
-      }
-    }
-    // dispose first separator
-    {
-      MenuItem[] items = menu.getItems();
-      if (items.length != 0) {
-        MenuItem firstItem = items[0];
-        if (isSeparator(firstItem)) {
-          firstItem.dispose();
-        }
-      }
-    }
-    // dispose last separator
-    {
-      MenuItem[] items = menu.getItems();
-      if (items.length != 0) {
-        MenuItem lastItem = items[items.length - 1];
-        if (isSeparator(lastItem)) {
-          lastItem.dispose();
-        }
-      }
-    }
-  }
+	private static void disposeExtraSeparators(Menu menu) {
+		if (menu == null) {
+			return;
+		}
+		// dispose adjacent separators
+		boolean separator = false;
+		for (MenuItem item : menu.getItems()) {
+			if (isSeparator(item)) {
+				if (separator) {
+					item.dispose();
+				}
+				separator = true;
+			} else {
+				separator = false;
+				disposeExtraSeparators(item.getMenu());
+			}
+		}
+		// dispose first separator
+		{
+			MenuItem[] items = menu.getItems();
+			if (items.length != 0) {
+				MenuItem firstItem = items[0];
+				if (isSeparator(firstItem)) {
+					firstItem.dispose();
+				}
+			}
+		}
+		// dispose last separator
+		{
+			MenuItem[] items = menu.getItems();
+			if (items.length != 0) {
+				MenuItem lastItem = items[items.length - 1];
+				if (isSeparator(lastItem)) {
+					lastItem.dispose();
+				}
+			}
+		}
+	}
 
-  private static boolean isSeparator(MenuItem item) {
-    return (item.getStyle() & SWT.SEPARATOR) != 0;
-  }
+	private static boolean isSeparator(MenuItem item) {
+		return (item.getStyle() & SWT.SEPARATOR) != 0;
+	}
 
-  /**
-   * @return the name of category to display in menu.
-   */
-  private static String getCategoryName(IConfigurationElement category) {
-    {
-      String attribute = category.getAttribute("wbp-menu-name");
-      if (attribute != null) {
-        return attribute;
-      }
-    }
-    return category.getAttribute("name");
-  }
+	/**
+	 * @return the name of category to display in menu.
+	 */
+	private static String getCategoryName(IConfigurationElement category) {
+		{
+			String attribute = category.getAttribute("wbp-menu-name");
+			if (attribute != null) {
+				return attribute;
+			}
+		}
+		return category.getAttribute("name");
+	}
 
-  private static boolean isWizardVisibleInMenu(IConfigurationElement wizard) {
-    String visible = wizard.getAttribute("wbp-menu-visible");
-    return visible != null ? "true".equals(visible) : true;
-  }
+	private static boolean isWizardVisibleInMenu(IConfigurationElement wizard) {
+		String visible = wizard.getAttribute("wbp-menu-visible");
+		return visible != null ? "true".equals(visible) : true;
+	}
 
-  private static Iterable<IConfigurationElement> getWizardWizards(String parentCategoryId) {
-    return getWizardElements("wizard", "category", parentCategoryId);
-  }
+	private static Iterable<IConfigurationElement> getWizardWizards(String parentCategoryId) {
+		return getWizardElements("wizard", "category", parentCategoryId);
+	}
 
-  private static Iterable<IConfigurationElement> getWizardCategories(String parentCategoryId) {
-    return getWizardElements("category", "parentCategory", parentCategoryId);
-  }
+	private static Iterable<IConfigurationElement> getWizardCategories(String parentCategoryId) {
+		return getWizardElements("category", "parentCategory", parentCategoryId);
+	}
 
-  private static Iterable<IConfigurationElement> getWizardElements(String elementName,
-      final String attributeName,
-      final String parentCategoryId) {
-    List<IConfigurationElement> allCategories =
-        ExternalFactoriesHelper.getElements("org.eclipse.ui.newWizards", elementName);
-    return Iterables.filter(allCategories, new Predicate<IConfigurationElement>() {
-      @Override
-      public boolean apply(IConfigurationElement t) {
-        return parentCategoryId.equals(t.getAttribute(attributeName));
-      }
-    });
-  }
+	private static Iterable<IConfigurationElement> getWizardElements(String elementName,
+			final String attributeName,
+			final String parentCategoryId) {
+		List<IConfigurationElement> allCategories =
+				ExternalFactoriesHelper.getElements("org.eclipse.ui.newWizards", elementName);
+		return Iterables.filter(allCategories, new Predicate<IConfigurationElement>() {
+			@Override
+			public boolean apply(IConfigurationElement t) {
+				return parentCategoryId.equals(t.getAttribute(attributeName));
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IActionDelegate2
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void init(IAction action) {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IActionDelegate2
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void init(IAction action) {
+	}
 
-  @Override
-  public void runWithEvent(IAction action, Event event) {
-    // this action is represented as ToolItem
-    Widget widget = event.widget;
-    if (widget instanceof ToolItem) {
-      ToolItem toolItem = (ToolItem) widget;
-      Listener[] listeners = toolItem.getListeners(SWT.Selection);
-      if (listeners.length > 0) {
-        Listener listener = listeners[0];
-        // prepare DropDown click event
-        Event e = new Event();
-        e.type = SWT.Selection;
-        e.widget = toolItem;
-        e.detail = SWT.DROP_DOWN;
-        e.x = toolItem.getBounds().x;
-        e.y = toolItem.getBounds().height;
-        // send event to the widget
-        listener.handleEvent(e);
-      }
-    }
-  }
+	@Override
+	public void runWithEvent(IAction action, Event event) {
+		// this action is represented as ToolItem
+		Widget widget = event.widget;
+		if (widget instanceof ToolItem) {
+			ToolItem toolItem = (ToolItem) widget;
+			Listener[] listeners = toolItem.getListeners(SWT.Selection);
+			if (listeners.length > 0) {
+				Listener listener = listeners[0];
+				// prepare DropDown click event
+				Event e = new Event();
+				e.type = SWT.Selection;
+				e.widget = toolItem;
+				e.detail = SWT.DROP_DOWN;
+				e.x = toolItem.getBounds().x;
+				e.y = toolItem.getBounds().height;
+				// send event to the widget
+				listener.handleEvent(e);
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IWorkbenchWindowActionDelegate
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void init(IWorkbenchWindow window) {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IWorkbenchWindowActionDelegate
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void init(IWorkbenchWindow window) {
+	}
 
-  @Override
-  public void run(IAction action) {
-    run();
-  }
+	@Override
+	public void run(IAction action) {
+		run();
+	}
 
-  @Override
-  public void selectionChanged(IAction action, ISelection selection) {
-  }
+	@Override
+	public void selectionChanged(IAction action, ISelection selection) {
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.ui/src/org/eclipse/wb/internal/core/wizards/actions/OpenTypeWizardAction.java b/org.eclipse.wb.core.ui/src/org/eclipse/wb/internal/core/wizards/actions/OpenTypeWizardAction.java
index f89c17b44..189ad6a72 100644
--- a/org.eclipse.wb.core.ui/src/org/eclipse/wb/internal/core/wizards/actions/OpenTypeWizardAction.java
+++ b/org.eclipse.wb.core.ui/src/org/eclipse/wb/internal/core/wizards/actions/OpenTypeWizardAction.java
@@ -25,61 +25,61 @@
  * @coverage core.wizards.ui
  */
 public class OpenTypeWizardAction extends AbstractOpenWizardAction {
-  private static final String ATT_NAME = "name";
-  private static final String ATT_ICON = "icon";
-  private static final String ATT_CLASS = "class";
-  private static final String TAG_DESCRIPTION = "description";
-  private final IConfigurationElement fConfigurationElement;
+	private static final String ATT_NAME = "name";
+	private static final String ATT_ICON = "icon";
+	private static final String ATT_CLASS = "class";
+	private static final String TAG_DESCRIPTION = "description";
+	private final IConfigurationElement fConfigurationElement;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public OpenTypeWizardAction(IConfigurationElement element) {
-    fConfigurationElement = element;
-    setText(element.getAttribute(ATT_NAME));
-    setImageDescriptor(getIconFromConfig(fConfigurationElement));
-    {
-      String description = getDescriptionFromConfig(fConfigurationElement);
-      setDescription(description);
-      setToolTipText(description);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public OpenTypeWizardAction(IConfigurationElement element) {
+		fConfigurationElement = element;
+		setText(element.getAttribute(ATT_NAME));
+		setImageDescriptor(getIconFromConfig(fConfigurationElement));
+		{
+			String description = getDescriptionFromConfig(fConfigurationElement);
+			setDescription(description);
+			setToolTipText(description);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private String getDescriptionFromConfig(IConfigurationElement config) {
-    IConfigurationElement[] children = config.getChildren(TAG_DESCRIPTION);
-    if (children.length >= 1) {
-      return children[0].getValue();
-    }
-    return "";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private String getDescriptionFromConfig(IConfigurationElement config) {
+		IConfigurationElement[] children = config.getChildren(TAG_DESCRIPTION);
+		if (children.length >= 1) {
+			return children[0].getValue();
+		}
+		return "";
+	}
 
-  private ImageDescriptor getIconFromConfig(IConfigurationElement config) {
-    try {
-      return ExternalFactoriesHelper.getImageDescriptor(config, ATT_ICON);
-    } catch (Throwable e) {
-      DesignerPlugin.log("Unable to load wizard icon", e);
-    }
-    return ImageDescriptor.getMissingImageDescriptor();
-  }
+	private ImageDescriptor getIconFromConfig(IConfigurationElement config) {
+		try {
+			return ExternalFactoriesHelper.getImageDescriptor(config, ATT_ICON);
+		} catch (Throwable e) {
+			DesignerPlugin.log("Unable to load wizard icon", e);
+		}
+		return ImageDescriptor.getMissingImageDescriptor();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Wizard
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Wizard createWizard() {
-    try {
-      return (Wizard) fConfigurationElement.createExecutableExtension(ATT_CLASS);
-    } catch (Exception e) {
-      return null;
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Wizard
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Wizard createWizard() {
+		try {
+			return (Wizard) fConfigurationElement.createExecutableExtension(ATT_CLASS);
+		} catch (Exception e) {
+			return null;
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.ui/src/org/eclipse/wb/internal/core/wizards/palette/NewProjectPalettePage.java b/org.eclipse.wb.core.ui/src/org/eclipse/wb/internal/core/wizards/palette/NewProjectPalettePage.java
index dd877cfb4..c94906347 100644
--- a/org.eclipse.wb.core.ui/src/org/eclipse/wb/internal/core/wizards/palette/NewProjectPalettePage.java
+++ b/org.eclipse.wb.core.ui/src/org/eclipse/wb/internal/core/wizards/palette/NewProjectPalettePage.java
@@ -48,194 +48,194 @@
  * @coverage core.wizards.ui
  */
 public final class NewProjectPalettePage extends WizardPage {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public NewProjectPalettePage() {
-    super("main");
-    setTitle(UiMessages.NewProjectPalettePage_title);
-    setDescription(UiMessages.NewProjectPalettePage_description);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public NewProjectPalettePage() {
+		super("main");
+		setTitle(UiMessages.NewProjectPalettePage_title);
+		setDescription(UiMessages.NewProjectPalettePage_description);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Initializing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private IJavaProject m_initialProject;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Initializing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private IJavaProject m_initialProject;
 
-  /**
-   * Initializes this page with current selection.
-   */
-  public void init(IStructuredSelection selection) {
-    // initial IJavaProject
-    {
-      IJavaElement javaElement = null;
-      Object selectedElement = selection.getFirstElement();
-      if (selectedElement instanceof IAdaptable) {
-        IAdaptable adaptable = (IAdaptable) selectedElement;
-        javaElement = (IJavaElement) adaptable.getAdapter(IJavaElement.class);
-        if (javaElement == null) {
-          IResource resource = (IResource) adaptable.getAdapter(IResource.class);
-          if (resource != null && resource.getType() != IResource.ROOT) {
-            while (javaElement == null && resource.getType() != IResource.PROJECT) {
-              resource = resource.getParent();
-              javaElement = (IJavaElement) resource.getAdapter(IJavaElement.class);
-            }
-            if (javaElement == null) {
-              javaElement = JavaCore.create(resource);
-            }
-          }
-        }
-      }
-      // get IJavaProject
-      if (javaElement != null) {
-        m_initialProject = (IJavaProject) javaElement.getAncestor(IJavaElement.JAVA_PROJECT);
-      }
-    }
-  }
+	/**
+	 * Initializes this page with current selection.
+	 */
+	public void init(IStructuredSelection selection) {
+		// initial IJavaProject
+		{
+			IJavaElement javaElement = null;
+			Object selectedElement = selection.getFirstElement();
+			if (selectedElement instanceof IAdaptable) {
+				IAdaptable adaptable = (IAdaptable) selectedElement;
+				javaElement = (IJavaElement) adaptable.getAdapter(IJavaElement.class);
+				if (javaElement == null) {
+					IResource resource = (IResource) adaptable.getAdapter(IResource.class);
+					if (resource != null && resource.getType() != IResource.ROOT) {
+						while (javaElement == null && resource.getType() != IResource.PROJECT) {
+							resource = resource.getParent();
+							javaElement = (IJavaElement) resource.getAdapter(IJavaElement.class);
+						}
+						if (javaElement == null) {
+							javaElement = JavaCore.create(resource);
+						}
+					}
+				}
+			}
+			// get IJavaProject
+			if (javaElement != null) {
+				m_initialProject = (IJavaProject) javaElement.getAncestor(IJavaElement.JAVA_PROJECT);
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the selected {@link IJavaProject}.
-   */
-  IJavaProject getJavaProject() {
-    return m_projectField.getProject();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the selected {@link IJavaProject}.
+	 */
+	IJavaProject getJavaProject() {
+		return m_projectField.getProject();
+	}
 
-  /**
-   * @return the selected {@link ToolkitDescription}.
-   */
-  ToolkitDescription getToolkit() {
-    return m_toolkits.get(m_toolkitField.getSelectionIndex());
-  }
+	/**
+	 * @return the selected {@link ToolkitDescription}.
+	 */
+	ToolkitDescription getToolkit() {
+		return m_toolkits.get(m_toolkitField.getSelectionIndex());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private ProjectSelectionDialogField m_projectField;
-  private ComboDialogField m_toolkitField;
-  private final List<ToolkitDescription> m_toolkits = Lists.newArrayList();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private ProjectSelectionDialogField m_projectField;
+	private ComboDialogField m_toolkitField;
+	private final List<ToolkitDescription> m_toolkits = Lists.newArrayList();
 
-  @Override
-  public void createControl(Composite parent) {
-    Composite container = new Composite(parent, SWT.NONE);
-    setControl(container);
-    GridLayoutFactory.create(container).columns(3);
-    // create fields
-    {
-      m_projectField = ProjectSelectionDialogField.create();
-      m_projectField.setButtonLabel(UiMessages.NewProjectPalettePage_projectBrowse);
-      m_projectField.setProject(m_initialProject);
-      doCreateField(m_projectField, UiMessages.NewProjectPalettePage_projectLabel);
-      m_projectField.setUpdateListener(m_validateListener);
-    }
-    {
-      m_toolkitField = new ComboDialogField(SWT.READ_ONLY);
-      m_toolkitField.setVisibleItemCount(10);
-      ExecutionUtils.runLog(new RunnableEx() {
-        @Override
-        public void run() throws Exception {
-          Collections.addAll(m_toolkits, DescriptionHelper.getToolkits());
-          // sort by name
-          Collections.sort(m_toolkits, new Comparator<ToolkitDescription>() {
-            @Override
-            public int compare(ToolkitDescription o1, ToolkitDescription o2) {
-              return o1.getName().compareTo(o2.getName());
-            }
-          });
-          // add items
-          for (ToolkitDescription toolkit : m_toolkits) {
-            m_toolkitField.addItem(toolkit.getName());
-          }
-        }
-      });
-      m_toolkitField.selectItem(1); // select second, because first is "Core Java"
-      doCreateField(m_toolkitField, UiMessages.NewProjectPalettePage_toolkitLabel);
-    }
-    m_projectField.setFocus();
-    // initial validation
-    m_validationEnabled = true;
-    validateAll();
-  }
+	@Override
+	public void createControl(Composite parent) {
+		Composite container = new Composite(parent, SWT.NONE);
+		setControl(container);
+		GridLayoutFactory.create(container).columns(3);
+		// create fields
+		{
+			m_projectField = ProjectSelectionDialogField.create();
+			m_projectField.setButtonLabel(UiMessages.NewProjectPalettePage_projectBrowse);
+			m_projectField.setProject(m_initialProject);
+			doCreateField(m_projectField, UiMessages.NewProjectPalettePage_projectLabel);
+			m_projectField.setUpdateListener(m_validateListener);
+		}
+		{
+			m_toolkitField = new ComboDialogField(SWT.READ_ONLY);
+			m_toolkitField.setVisibleItemCount(10);
+			ExecutionUtils.runLog(new RunnableEx() {
+				@Override
+				public void run() throws Exception {
+					Collections.addAll(m_toolkits, DescriptionHelper.getToolkits());
+					// sort by name
+					Collections.sort(m_toolkits, new Comparator<ToolkitDescription>() {
+						@Override
+						public int compare(ToolkitDescription o1, ToolkitDescription o2) {
+							return o1.getName().compareTo(o2.getName());
+						}
+					});
+					// add items
+					for (ToolkitDescription toolkit : m_toolkits) {
+						m_toolkitField.addItem(toolkit.getName());
+					}
+				}
+			});
+			m_toolkitField.selectItem(1); // select second, because first is "Core Java"
+			doCreateField(m_toolkitField, UiMessages.NewProjectPalettePage_toolkitLabel);
+		}
+		m_projectField.setFocus();
+		// initial validation
+		m_validationEnabled = true;
+		validateAll();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Validation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private boolean m_validationEnabled;
-  /**
-   * Implementation of {@link IDialogFieldListener} for {@link DialogField}'s validation.
-   */
-  protected final IDialogFieldListener m_validateListener = new IDialogFieldListener() {
-    @Override
-    public void dialogFieldChanged(DialogField field) {
-      validateAll();
-    }
-  };
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Validation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private boolean m_validationEnabled;
+	/**
+	 * Implementation of {@link IDialogFieldListener} for {@link DialogField}'s validation.
+	 */
+	protected final IDialogFieldListener m_validateListener = new IDialogFieldListener() {
+		@Override
+		public void dialogFieldChanged(DialogField field) {
+			validateAll();
+		}
+	};
 
-  /**
-   * Validate all and disable/enable page.
-   */
-  private void validateAll() {
-    if (m_validationEnabled) {
-      String errorMessage = validate();
-      setErrorMessage(errorMessage);
-      setPageComplete(errorMessage == null);
-    }
-  }
+	/**
+	 * Validate all and disable/enable page.
+	 */
+	private void validateAll() {
+		if (m_validationEnabled) {
+			String errorMessage = validate();
+			setErrorMessage(errorMessage);
+			setPageComplete(errorMessage == null);
+		}
+	}
 
-  /**
-   * Validate {@link DialogField}'s and returns error message or <code>null</code>.
-   */
-  private String validate() {
-    // validate project
-    IJavaProject javaProject;
-    {
-      javaProject = m_projectField.getProject();
-      if (javaProject == null) {
-        return UiMessages.NewProjectPalettePage_validateNoProject;
-      }
-    }
-    // validate toolkit
-    {
-      int toolkitIndex = m_toolkitField.getSelectionIndex();
-      ToolkitDescription toolkit = m_toolkits.get(toolkitIndex);
-      IFile paletteFile =
-          javaProject.getProject().getFile(
-              new Path("wbp-meta/" + toolkit.getId() + ".wbp-palette.xml"));
-      if (paletteFile.exists()) {
-        return MessageFormat.format(
-            UiMessages.NewProjectPalettePage_validateHasToolkit,
-            toolkit.getName(),
-            paletteFile.getFullPath());
-      }
-    }
-    // no error
-    return null;
-  }
+	/**
+	 * Validate {@link DialogField}'s and returns error message or <code>null</code>.
+	 */
+	private String validate() {
+		// validate project
+		IJavaProject javaProject;
+		{
+			javaProject = m_projectField.getProject();
+			if (javaProject == null) {
+				return UiMessages.NewProjectPalettePage_validateNoProject;
+			}
+		}
+		// validate toolkit
+		{
+			int toolkitIndex = m_toolkitField.getSelectionIndex();
+			ToolkitDescription toolkit = m_toolkits.get(toolkitIndex);
+			IFile paletteFile =
+					javaProject.getProject().getFile(
+							new Path("wbp-meta/" + toolkit.getId() + ".wbp-palette.xml"));
+			if (paletteFile.exists()) {
+				return MessageFormat.format(
+						UiMessages.NewProjectPalettePage_validateHasToolkit,
+						toolkit.getName(),
+						paletteFile.getFullPath());
+			}
+		}
+		// no error
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Configures given {@link DialogField}.
-   */
-  private void doCreateField(DialogField dialogField, String labelText) {
-    dialogField.setLabelText(labelText);
-    dialogField.setDialogFieldListener(m_validateListener);
-    Composite parent = (Composite) getControl();
-    DialogFieldUtils.fillControls(parent, dialogField, 3, 40);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Configures given {@link DialogField}.
+	 */
+	private void doCreateField(DialogField dialogField, String labelText) {
+		dialogField.setLabelText(labelText);
+		dialogField.setDialogFieldListener(m_validateListener);
+		Composite parent = (Composite) getControl();
+		DialogFieldUtils.fillControls(parent, dialogField, 3, 40);
+	}
 }
diff --git a/org.eclipse.wb.core.ui/src/org/eclipse/wb/internal/core/wizards/palette/NewProjectPaletteWizard.java b/org.eclipse.wb.core.ui/src/org/eclipse/wb/internal/core/wizards/palette/NewProjectPaletteWizard.java
index e272dc914..2ee4df09d 100644
--- a/org.eclipse.wb.core.ui/src/org/eclipse/wb/internal/core/wizards/palette/NewProjectPaletteWizard.java
+++ b/org.eclipse.wb.core.ui/src/org/eclipse/wb/internal/core/wizards/palette/NewProjectPaletteWizard.java
@@ -34,82 +34,82 @@
  * @coverage core.wizards.ui
  */
 public final class NewProjectPaletteWizard extends Wizard implements INewWizard {
-  private IStructuredSelection m_selection;
-  private NewProjectPalettePage m_page;
+	private IStructuredSelection m_selection;
+	private NewProjectPalettePage m_page;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public NewProjectPaletteWizard() {
-    setWindowTitle(UiMessages.NewProjectPaletteWizard_title);
-    setNeedsProgressMonitor(true);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public NewProjectPaletteWizard() {
+		setWindowTitle(UiMessages.NewProjectPaletteWizard_title);
+		setNeedsProgressMonitor(true);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Pages
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void addPages() {
-    {
-      m_page = new NewProjectPalettePage();
-      m_page.init(m_selection);
-      addPage(m_page);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Pages
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void addPages() {
+		{
+			m_page = new NewProjectPalettePage();
+			m_page.init(m_selection);
+			addPage(m_page);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Finish
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean performFinish() {
-    try {
-      IProject project = m_page.getJavaProject().getProject();
-      ToolkitDescription toolkit = m_page.getToolkit();
-      // prepare "wbp-meta" folder
-      IFolder metaFolder = project.getFolder("wbp-meta");
-      if (!metaFolder.exists()) {
-        metaFolder.create(true, true, null);
-      }
-      // create palette file
-      IFile paletteFile;
-      {
-        paletteFile = metaFolder.getFile(toolkit.getId() + ".wbp-palette.xml");
-        String content =
-            StringUtils.join(
-                new String[]{
-                    "<?xml version=\"1.0\" encoding=\"UTF-8\"?>",
-                    "<palette>",
-                    "\t<category id=\"someUniqueId\" name=\"Custom category\" description=\"Category added for project "
-                        + project.getName()
-                        + "\" open=\"true\">",
-                    "\t\t<component class=\"javax.swing.JButton\"/>",
-                    "\t\t<component class=\"javax.swing.JRadioButton\" name=\"Your name\" description=\"You can write any description here.\"/>",
-                    "\t</category>",
-                    "</palette>",},
-                "\n");
-        paletteFile.create(new ByteArrayInputStream(content.getBytes()), true, null);
-      }
-      // open palette file in editor
-      IDE.openEditor(DesignerPlugin.getActivePage(), paletteFile);
-    } catch (Throwable e) {
-      DesignerPlugin.log(e);
-    }
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Finish
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean performFinish() {
+		try {
+			IProject project = m_page.getJavaProject().getProject();
+			ToolkitDescription toolkit = m_page.getToolkit();
+			// prepare "wbp-meta" folder
+			IFolder metaFolder = project.getFolder("wbp-meta");
+			if (!metaFolder.exists()) {
+				metaFolder.create(true, true, null);
+			}
+			// create palette file
+			IFile paletteFile;
+			{
+				paletteFile = metaFolder.getFile(toolkit.getId() + ".wbp-palette.xml");
+				String content =
+						StringUtils.join(
+								new String[]{
+										"<?xml version=\"1.0\" encoding=\"UTF-8\"?>",
+										"<palette>",
+										"\t<category id=\"someUniqueId\" name=\"Custom category\" description=\"Category added for project "
+												+ project.getName()
+												+ "\" open=\"true\">",
+												"\t\t<component class=\"javax.swing.JButton\"/>",
+												"\t\t<component class=\"javax.swing.JRadioButton\" name=\"Your name\" description=\"You can write any description here.\"/>",
+												"\t</category>",
+												"</palette>",},
+								"\n");
+				paletteFile.create(new ByteArrayInputStream(content.getBytes()), true, null);
+			}
+			// open palette file in editor
+			IDE.openEditor(DesignerPlugin.getActivePage(), paletteFile);
+		} catch (Throwable e) {
+			DesignerPlugin.log(e);
+		}
+		return true;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IWorkbenchWizard
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void init(IWorkbench workbench, IStructuredSelection selection) {
-    m_selection = selection;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IWorkbenchWizard
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void init(IWorkbench workbench, IStructuredSelection selection) {
+		m_selection = selection;
+	}
 }
diff --git a/org.eclipse.wb.core.ui/src/org/eclipse/wb/internal/core/wizards/palette/Utils.java b/org.eclipse.wb.core.ui/src/org/eclipse/wb/internal/core/wizards/palette/Utils.java
index 948db7bdc..f8f9d6935 100644
--- a/org.eclipse.wb.core.ui/src/org/eclipse/wb/internal/core/wizards/palette/Utils.java
+++ b/org.eclipse.wb.core.ui/src/org/eclipse/wb/internal/core/wizards/palette/Utils.java
@@ -19,51 +19,51 @@
  * @coverage core.wizards.ui
  */
 public final class Utils {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ID
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Valid composite ID contains only alpha-numeric characters and <code>'.'</code> as parts
-   * separator.
-   *
-   * @return <code>true</code> if given composite ID is valid or <code>false</code> in other case.
-   */
-  public static boolean isValidCompositeID(String id) {
-    if (id.length() <= 0) {
-      return false;
-    }
-    // check separate characters
-    for (int i = 0; i < id.length(); i++) {
-      char c = id.charAt(i);
-      if ((c < 'A' || 'Z' < c)
-          && (c < 'a' || 'z' < c)
-          && (c < '0' || '9' < c)
-          && c != '_'
-          && c != '.') {
-        return false;
-      }
-    }
-    // OK, valid
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ID
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Valid composite ID contains only alpha-numeric characters and <code>'.'</code> as parts
+	 * separator.
+	 *
+	 * @return <code>true</code> if given composite ID is valid or <code>false</code> in other case.
+	 */
+	public static boolean isValidCompositeID(String id) {
+		if (id.length() <= 0) {
+			return false;
+		}
+		// check separate characters
+		for (int i = 0; i < id.length(); i++) {
+			char c = id.charAt(i);
+			if ((c < 'A' || 'Z' < c)
+					&& (c < 'a' || 'z' < c)
+					&& (c < '0' || '9' < c)
+					&& c != '_'
+					&& c != '.') {
+				return false;
+			}
+		}
+		// OK, valid
+		return true;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Version
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if given version string is valid.
-   */
-  public static boolean isValidVersion(String version) {
-    try {
-      new Version(version.trim());
-    } catch (IllegalArgumentException e) {
-      return false;
-    }
-    // OK, valid
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Version
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if given version string is valid.
+	 */
+	public static boolean isValidVersion(String version) {
+		try {
+			new Version(version.trim());
+		} catch (IllegalArgumentException e) {
+			return false;
+		}
+		// OK, valid
+		return true;
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/Activator.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/Activator.java
index 267f6c497..2de943c20 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/Activator.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/Activator.java
@@ -33,90 +33,90 @@
  * @coverage XML
  */
 public class Activator extends AbstractUIPlugin {
-  public static final String PLUGIN_ID = "org.eclipse.wb.core.xml";
-  private static Activator m_plugin;
+	public static final String PLUGIN_ID = "org.eclipse.wb.core.xml";
+	private static Activator m_plugin;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Life cycle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void stop(BundleContext context) throws Exception {
-    m_plugin = null;
-    super.stop(context);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Life cycle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void stop(BundleContext context) throws Exception {
+		m_plugin = null;
+		super.stop(context);
+	}
 
-  @Override
-  public void start(BundleContext context) throws Exception {
-    super.start(context);
-    m_plugin = this;
-  }
+	@Override
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+		m_plugin = this;
+	}
 
-  /**
-   * Returns the shared instance.
-   */
-  public static Activator getDefault() {
-    return m_plugin;
-  }
+	/**
+	 * Returns the shared instance.
+	 */
+	public static Activator getDefault() {
+		return m_plugin;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Resources
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final BundleResourceProvider m_resourceProvider =
-      BundleResourceProvider.get(PLUGIN_ID);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Resources
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final BundleResourceProvider m_resourceProvider =
+			BundleResourceProvider.get(PLUGIN_ID);
 
-  /**
-   * @return the {@link InputStream} for file from plugin directory.
-   */
-  public static InputStream getFile(String path) {
-    return m_resourceProvider.getFile(path);
-  }
+	/**
+	 * @return the {@link InputStream} for file from plugin directory.
+	 */
+	public static InputStream getFile(String path) {
+		return m_resourceProvider.getFile(path);
+	}
 
-  /**
-   * @return the {@link Image} from "icons" directory, with caching.
-   */
-  public static Image getImage(String path) {
-    return m_resourceProvider.getImage("icons/" + path);
-  }
+	/**
+	 * @return the {@link Image} from "icons" directory, with caching.
+	 */
+	public static Image getImage(String path) {
+		return m_resourceProvider.getImage("icons/" + path);
+	}
 
-  /**
-   * @return the {@link ImageDescriptor} from "icons" directory.
-   */
-  public static ImageDescriptor getImageDescriptor(String path) {
-    return m_resourceProvider.getImageDescriptor("icons/" + path);
-  }
+	/**
+	 * @return the {@link ImageDescriptor} from "icons" directory.
+	 */
+	public static ImageDescriptor getImageDescriptor(String path) {
+		return m_resourceProvider.getImageDescriptor("icons/" + path);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Early start up
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static boolean m_cachesLoaded = false;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Early start up
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static boolean m_cachesLoaded = false;
 
-  /**
-   * This is fast method which scheduled jobs for pre-loading caches. If jobs where already
-   * scheduled in this Eclipse session, second and following invocations are ignored.
-   */
-  public static synchronized void scheduleCachesLoading() {
-    if (m_cachesLoaded) {
-      return;
-    }
-    m_cachesLoaded = true;
-    // pre-load palette
-    if (System.getProperty(DesignerPalette.FLAG_NO_PALETTE) == null) {
-      ExecutionUtils.runLog(new RunnableEx() {
-        @Override
-        public void run() throws Exception {
-          ToolkitDescription[] toolkits = DescriptionHelper.getToolkits();
-          for (ToolkitDescription toolkitDescription : toolkits) {
-            String toolkitId = toolkitDescription.getId();
-            ComponentPresentationHelper.scheduleFillingPresentationCache(toolkitId);
-          }
-        }
-      });
-    }
-  }
+	/**
+	 * This is fast method which scheduled jobs for pre-loading caches. If jobs where already
+	 * scheduled in this Eclipse session, second and following invocations are ignored.
+	 */
+	public static synchronized void scheduleCachesLoading() {
+		if (m_cachesLoaded) {
+			return;
+		}
+		m_cachesLoaded = true;
+		// pre-load palette
+		if (System.getProperty(DesignerPalette.FLAG_NO_PALETTE) == null) {
+			ExecutionUtils.runLog(new RunnableEx() {
+				@Override
+				public void run() throws Exception {
+					ToolkitDescription[] toolkits = DescriptionHelper.getToolkits();
+					for (ToolkitDescription toolkitDescription : toolkits) {
+						String toolkitId = toolkitDescription.getId();
+						ComponentPresentationHelper.scheduleFillingPresentationCache(toolkitId);
+					}
+				}
+			});
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/IExceptionConstants.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/IExceptionConstants.java
index 1ed54b1c7..5a863b4bb 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/IExceptionConstants.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/IExceptionConstants.java
@@ -19,10 +19,10 @@
  * @coverage XML
  */
 public interface IExceptionConstants {
-  int DESCRIPTION_NO_DESCRIPTIONS = 5000;
-  int DESCRIPTION_LOADING = 5001;
-  int DESCRIPTION_NO_TOOLKIT = 5002;
-  int DESCRIPTION_EDITOR_STATIC_FIELD = 5003;
-  int NOT_JAVA_PROJECT = 5004;
-  int __FORCE_EXECUTION = Math.abs(0);
+	int DESCRIPTION_NO_DESCRIPTIONS = 5000;
+	int DESCRIPTION_LOADING = 5001;
+	int DESCRIPTION_NO_TOOLKIT = 5002;
+	int DESCRIPTION_EDITOR_STATIC_FIELD = 5003;
+	int NOT_JAVA_PROJECT = 5004;
+	int __FORCE_EXECUTION = Math.abs(0);
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/Messages.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/Messages.java
index 53ad03241..3375c73e4 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/Messages.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/Messages.java
@@ -3,103 +3,103 @@
 import org.eclipse.osgi.util.NLS;
 
 public class Messages extends NLS {
-  private static final String BUNDLE_NAME = "org.eclipse.wb.internal.core.xml.messages"; //$NON-NLS-1$
-  public static String AbstractLiveManager_errorMessage;
-  public static String CategoryAbstractDialog_descriptionLabel;
-  public static String CategoryAbstractDialog_idLabel;
-  public static String CategoryAbstractDialog_message;
-  public static String CategoryAbstractDialog_nameLabel;
-  public static String CategoryAbstractDialog_stateLabel;
-  public static String CategoryAbstractDialog_stateOpen;
-  public static String CategoryAbstractDialog_stateVisible;
-  public static String CategoryAbstractDialog_validateEmptyName;
-  public static String CategoryAddDialog_message;
-  public static String CategoryAddDialog_targetBefore;
-  public static String CategoryAddDialog_targetCategoryLabel;
-  public static String CategoryAddDialog_targetEnd;
-  public static String CategoryAddDialog_title;
-  public static String CategoryEditDialog_description;
-  public static String CategoryEditDialog_title;
-  public static String ChooseComponentEntryInfo_customCategoryDescription;
-  public static String ChooseComponentEntryInfo_description;
-  public static String ChooseComponentEntryInfo_name;
-  public static String ChooseComponentEntryInfo_newDescription;
-  public static String ComponentAbstractDialog_classChoose;
-  public static String ComponentAbstractDialog_classLabel;
-  public static String ComponentAbstractDialog_descriptionLabel;
-  public static String ComponentAbstractDialog_idLabel;
-  public static String ComponentAbstractDialog_message;
-  public static String ComponentAbstractDialog_nameLabel;
-  public static String ComponentAbstractDialog_validationEmptyClass;
-  public static String ComponentAbstractDialog_validationEmptyName;
-  public static String ComponentAbstractDialog_visibleLabel;
-  public static String ComponentAddDialog_categoryLabel;
-  public static String ComponentAddDialog_message;
-  public static String ComponentAddDialog_title;
-  public static String ComponentEditDialog_message;
-  public static String ComponentEditDialog_title;
-  public static String DesignerPalettePopupActions_addCategory;
-  public static String DesignerPalettePopupActions_addComponent;
-  public static String DesignerPalettePopupActions_edit;
-  public static String DesignerPalettePopupActions_exportAction;
-  public static String DesignerPalettePopupActions_filterCommandsName;
-  public static String DesignerPalettePopupActions_importAction;
-  public static String DesignerPalettePopupActions_managerAction;
-  public static String DesignerPalettePopupActions_remove;
-  public static String DesignerPalettePopupActions_removeCategoryMessage;
-  public static String DesignerPalettePopupActions_removeCategoryText;
-  public static String DesignerPalettePopupActions_removeEntryMessage;
-  public static String DesignerPalettePopupActions_removeEntryText;
-  public static String DesignerPalettePopupActions_restoreDefault;
-  public static String DesignerPalettePopupActions_restoreMessage;
-  public static String DesignerPalettePopupActions_restoreText;
-  public static String DesignerPalettePopupActions_settingsAction;
-  public static String EventsProperty_addEventHandlerManager;
-  public static String MarqueeSelectionToolEntryInfo_name;
-  public static String PaletteManagerDialog_addCategoryButton;
-  public static String PaletteManagerDialog_addEntryButton;
-  public static String PaletteManagerDialog_clearFilter;
-  public static String PaletteManagerDialog_collapseAllButton;
-  public static String PaletteManagerDialog_componentAction;
-  public static String PaletteManagerDialog_downButton;
-  public static String PaletteManagerDialog_editButton;
-  public static String PaletteManagerDialog_expandAllButton;
-  public static String PaletteManagerDialog_message;
-  public static String PaletteManagerDialog_removeButton;
-  public static String PaletteManagerDialog_removeMessage;
-  public static String PaletteManagerDialog_removeTitle;
-  public static String PaletteManagerDialog_shellTitle;
-  public static String PaletteManagerDialog_title;
-  public static String PaletteManagerDialog_upButton;
-  public static String PalettePreferencesDialog_categoryFont;
-  public static String PalettePreferencesDialog_categoryFontChoose;
-  public static String PalettePreferencesDialog_categoryFontSystem;
-  public static String PalettePreferencesDialog_entryFont;
-  public static String PalettePreferencesDialog_entryFontChoose;
-  public static String PalettePreferencesDialog_entryFontSystem;
-  public static String PalettePreferencesDialog_message;
-  public static String PalettePreferencesDialog_minColumnsNumber;
-  public static String PalettePreferencesDialog_onlyIcons;
-  public static String PalettePreferencesDialog_shellTitle;
-  public static String PalettePreferencesDialog_title;
-  public static String RefreshAction_toolTip;
-  public static String SelectionToolEntryInfo_name;
-  public static String SourcePage_name;
-  public static String TestAction_text;
-  public static String TestAction_toolTip;
-  public static String XmlDesignComposite_statucPalette;
-  public static String XmlDesignComposite_statusGef;
-  public static String XmlDesignComposite_statusProperties;
-  public static String XmlDesignPage_name;
-  public static String XmlDesignPage_progressInitialing;
-  public static String XmlDesignPage_progressParsing;
-  public static String XmlDesignPage_progressRefreshing;
-  public static String XmlDesignPage_progressTitle;
-  static {
-    // initialize resource bundle
-    NLS.initializeMessages(BUNDLE_NAME, Messages.class);
-  }
+	private static final String BUNDLE_NAME = "org.eclipse.wb.internal.core.xml.messages"; //$NON-NLS-1$
+	public static String AbstractLiveManager_errorMessage;
+	public static String CategoryAbstractDialog_descriptionLabel;
+	public static String CategoryAbstractDialog_idLabel;
+	public static String CategoryAbstractDialog_message;
+	public static String CategoryAbstractDialog_nameLabel;
+	public static String CategoryAbstractDialog_stateLabel;
+	public static String CategoryAbstractDialog_stateOpen;
+	public static String CategoryAbstractDialog_stateVisible;
+	public static String CategoryAbstractDialog_validateEmptyName;
+	public static String CategoryAddDialog_message;
+	public static String CategoryAddDialog_targetBefore;
+	public static String CategoryAddDialog_targetCategoryLabel;
+	public static String CategoryAddDialog_targetEnd;
+	public static String CategoryAddDialog_title;
+	public static String CategoryEditDialog_description;
+	public static String CategoryEditDialog_title;
+	public static String ChooseComponentEntryInfo_customCategoryDescription;
+	public static String ChooseComponentEntryInfo_description;
+	public static String ChooseComponentEntryInfo_name;
+	public static String ChooseComponentEntryInfo_newDescription;
+	public static String ComponentAbstractDialog_classChoose;
+	public static String ComponentAbstractDialog_classLabel;
+	public static String ComponentAbstractDialog_descriptionLabel;
+	public static String ComponentAbstractDialog_idLabel;
+	public static String ComponentAbstractDialog_message;
+	public static String ComponentAbstractDialog_nameLabel;
+	public static String ComponentAbstractDialog_validationEmptyClass;
+	public static String ComponentAbstractDialog_validationEmptyName;
+	public static String ComponentAbstractDialog_visibleLabel;
+	public static String ComponentAddDialog_categoryLabel;
+	public static String ComponentAddDialog_message;
+	public static String ComponentAddDialog_title;
+	public static String ComponentEditDialog_message;
+	public static String ComponentEditDialog_title;
+	public static String DesignerPalettePopupActions_addCategory;
+	public static String DesignerPalettePopupActions_addComponent;
+	public static String DesignerPalettePopupActions_edit;
+	public static String DesignerPalettePopupActions_exportAction;
+	public static String DesignerPalettePopupActions_filterCommandsName;
+	public static String DesignerPalettePopupActions_importAction;
+	public static String DesignerPalettePopupActions_managerAction;
+	public static String DesignerPalettePopupActions_remove;
+	public static String DesignerPalettePopupActions_removeCategoryMessage;
+	public static String DesignerPalettePopupActions_removeCategoryText;
+	public static String DesignerPalettePopupActions_removeEntryMessage;
+	public static String DesignerPalettePopupActions_removeEntryText;
+	public static String DesignerPalettePopupActions_restoreDefault;
+	public static String DesignerPalettePopupActions_restoreMessage;
+	public static String DesignerPalettePopupActions_restoreText;
+	public static String DesignerPalettePopupActions_settingsAction;
+	public static String EventsProperty_addEventHandlerManager;
+	public static String MarqueeSelectionToolEntryInfo_name;
+	public static String PaletteManagerDialog_addCategoryButton;
+	public static String PaletteManagerDialog_addEntryButton;
+	public static String PaletteManagerDialog_clearFilter;
+	public static String PaletteManagerDialog_collapseAllButton;
+	public static String PaletteManagerDialog_componentAction;
+	public static String PaletteManagerDialog_downButton;
+	public static String PaletteManagerDialog_editButton;
+	public static String PaletteManagerDialog_expandAllButton;
+	public static String PaletteManagerDialog_message;
+	public static String PaletteManagerDialog_removeButton;
+	public static String PaletteManagerDialog_removeMessage;
+	public static String PaletteManagerDialog_removeTitle;
+	public static String PaletteManagerDialog_shellTitle;
+	public static String PaletteManagerDialog_title;
+	public static String PaletteManagerDialog_upButton;
+	public static String PalettePreferencesDialog_categoryFont;
+	public static String PalettePreferencesDialog_categoryFontChoose;
+	public static String PalettePreferencesDialog_categoryFontSystem;
+	public static String PalettePreferencesDialog_entryFont;
+	public static String PalettePreferencesDialog_entryFontChoose;
+	public static String PalettePreferencesDialog_entryFontSystem;
+	public static String PalettePreferencesDialog_message;
+	public static String PalettePreferencesDialog_minColumnsNumber;
+	public static String PalettePreferencesDialog_onlyIcons;
+	public static String PalettePreferencesDialog_shellTitle;
+	public static String PalettePreferencesDialog_title;
+	public static String RefreshAction_toolTip;
+	public static String SelectionToolEntryInfo_name;
+	public static String SourcePage_name;
+	public static String TestAction_text;
+	public static String TestAction_toolTip;
+	public static String XmlDesignComposite_statucPalette;
+	public static String XmlDesignComposite_statusGef;
+	public static String XmlDesignComposite_statusProperties;
+	public static String XmlDesignPage_name;
+	public static String XmlDesignPage_progressInitialing;
+	public static String XmlDesignPage_progressParsing;
+	public static String XmlDesignPage_progressRefreshing;
+	public static String XmlDesignPage_progressTitle;
+	static {
+		// initialize resource bundle
+		NLS.initializeMessages(BUNDLE_NAME, Messages.class);
+	}
 
-  private Messages() {
-  }
+	private Messages() {
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/AbstractXmlEditor.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/AbstractXmlEditor.java
index 0cde4e64d..80328cdeb 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/AbstractXmlEditor.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/AbstractXmlEditor.java
@@ -57,660 +57,660 @@
  * @coverage XML.editor
  */
 public abstract class AbstractXmlEditor extends MultiPageEditorPart
-    implements
-      IDesignCompositeProvider {
-  private static final String CONTEXT_ID = "org.eclipse.wb.core.xml.editorScope";
-  protected StructuredTextEditor m_xmlEditor;
-  private SourcePage m_sourcePage;
-  private XmlDesignPage m_designPage;
-  private final List<IXmlEditorPage> m_additionalPages = Lists.newArrayList();
-  private IXmlEditorPage m_activePage;
-  private String m_cleanSource;
-  private Control m_partControl;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractXmlEditor() {
-    Activator.scheduleCachesLoading();
-    DesignerPlugin.configurePreEditor();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Life cycle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void dispose() {
-    // dispose pages
-    m_sourcePage.dispose();
-    m_designPage.dispose();
-    for (IXmlEditorPage page : m_additionalPages) {
-      page.dispose();
-    }
-    // clear page references (sometimes top level editor leaks)
-    {
-      m_activePage = null;
-      m_sourcePage = null;
-      m_designPage = null;
-      m_additionalPages.clear();
-    }
-    // continue
-    super.dispose();
-  }
-
-  @Override
-  protected void setInput(IEditorInput input) {
-    super.setInput(input);
-    initializeTitle(input);
-  }
-
-  private void initializeTitle(IEditorInput input) {
-    if (input != null) {
-      String title = input.getName();
-      setPartName(title);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // EditorPart
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void init(IEditorSite site, IEditorInput editorInput) throws PartInitException {
-    if (!(editorInput instanceof IFileEditorInput)) {
-      throw new PartInitException("Invalid Input: Must be IFileEditorInput");
-    }
-    super.init(site, editorInput);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link IDocument} from XML editor.
-   */
-  public final IDocument getDocument() {
-    return m_xmlEditor.getTextViewer().getDocument();
-  }
-
-  /**
-   * @return the {@link SourcePage} which is used as "Source" page.
-   */
-  public final SourcePage getSourcePage() {
-    return m_sourcePage;
-  }
-
-  /**
-   * @return the {@link XmlDesignPage} which is used as "Design" page.
-   */
-  public final XmlDesignPage getDesignPage() {
-    return m_designPage;
-  }
-
-  /**
-   * @return the top level {@link Control} of this {@link AbstractXmlEditor} part.
-   */
-  public Control getPartControl() {
-    return m_partControl;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IAdaptable
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public <T> T getAdapter(Class<T> adapter) {
-    if (adapter == StructuredTextEditor.class) {
-      return adapter.cast(m_xmlEditor);
-    }
-    return super.getAdapter(adapter);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IDesignCompositeProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public DesignComposite getDesignComposite() {
-    return m_designPage.getDesignComposite();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Save
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void doSave(IProgressMonitor monitor) {
-    rememberSourceContent();
-    m_xmlEditor.doSave(monitor);
-    if (m_splitRefreshStrategy.shouldOnSave()) {
-      m_designPage.updateGEF();
-    }
-  }
-
-  @Override
-  public boolean isSaveAsAllowed() {
-    return false;
-  }
-
-  @Override
-  public void doSaveAs() {
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> "Source" page should be first.
-   */
-  private boolean isSourceFirst() {
-    int layout = DesignerPlugin.getPreferences().getInt(IPreferenceConstants.P_EDITOR_LAYOUT);
-    return layout == IPreferenceConstants.V_EDITOR_LAYOUT_PAGES_SOURCE
-        || layout == IPreferenceConstants.V_EDITOR_LAYOUT_SPLIT_HORIZONTAL_SOURCE
-        || layout == IPreferenceConstants.V_EDITOR_LAYOUT_SPLIT_VERTICAL_SOURCE;
-  }
-
-  /**
-   * @return <code>true</code> if "page mode".
-   */
-  private boolean isPagesMode() {
-    int layout = DesignerPlugin.getPreferences().getInt(IPreferenceConstants.P_EDITOR_LAYOUT);
-    return layout == IPreferenceConstants.V_EDITOR_LAYOUT_PAGES_SOURCE
-        || layout == IPreferenceConstants.V_EDITOR_LAYOUT_PAGES_DESIGN;
-  }
-
-  /**
-   * @return <code>true</code> "split mode".
-   */
-  private boolean isSplitMode() {
-    int layout = DesignerPlugin.getPreferences().getInt(IPreferenceConstants.P_EDITOR_LAYOUT);
-    return layout == IPreferenceConstants.V_EDITOR_LAYOUT_SPLIT_HORIZONTAL_DESIGN
-        || layout == IPreferenceConstants.V_EDITOR_LAYOUT_SPLIT_HORIZONTAL_SOURCE
-        || layout == IPreferenceConstants.V_EDITOR_LAYOUT_SPLIT_VERTICAL_DESIGN
-        || layout == IPreferenceConstants.V_EDITOR_LAYOUT_SPLIT_VERTICAL_SOURCE;
-  }
-
-  /**
-   * @return <code>true</code> horizontal "split mode".
-   */
-  private boolean isSplitModeHorizontal() {
-    int layout = DesignerPlugin.getPreferences().getInt(IPreferenceConstants.P_EDITOR_LAYOUT);
-    return layout == IPreferenceConstants.V_EDITOR_LAYOUT_SPLIT_HORIZONTAL_DESIGN
-        || layout == IPreferenceConstants.V_EDITOR_LAYOUT_SPLIT_HORIZONTAL_SOURCE;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Pages
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Composite m_splitSourceContainer;
-  private SashForm m_splitSashForm;
-  private final IRefreshStrategy m_splitRefreshStrategy = new IRefreshStrategy() {
-    @Override
-    public boolean shouldImmediately() {
-      return false;
-    }
-
-    @Override
-    public boolean shouldWithDelay() {
-      return getPreferenceDelay() > 0;
-    }
-
-    @Override
-    public boolean shouldOnSave() {
-      return getPreferenceDelay() <= 0;
-    }
-
-    @Override
-    public int getDelay() {
-      int delay = getPreferenceDelay();
-      return Math.max(delay, 250);
-    }
-
-    private int getPreferenceDelay() {
-      IPreferenceStore preferences = DesignerPlugin.getPreferences();
-      return preferences.getInt(IPreferenceConstants.P_EDITOR_LAYOUT_SYNC_DELAY);
-    }
-  };
-
-  @Override
-  protected Composite createPageContainer(Composite parent) {
-    m_partControl = parent;
-    parent = super.createPageContainer(parent);
-    if (isPagesMode()) {
-      return parent;
-    } else {
-      int style = isSplitModeHorizontal() ? SWT.HORIZONTAL : SWT.VERTICAL;
-      m_splitSashForm = new SashForm(parent, style);
-      return m_splitSashForm;
-    }
-  }
-
-  @Override
-  protected void createPages() {
-    // decorate CTabFolder
-    {
-      CTabFolder tabFolder = (CTabFolder) getContainer();
-      TabFolderDecorator.decorate(this, tabFolder);
-    }
-    // do create pages
-    if (isSourceFirst()) {
-      createPageXml();
-      createPageDesign(1);
-      m_sourcePage.setPageIndex(0);
-      m_designPage.setPageIndex(1);
-    } else {
-      createPageXml();
-      createPageDesign(0);
-      m_designPage.getControl().moveAbove(null);
-      m_sourcePage.setPageIndex(1);
-      m_designPage.setPageIndex(0);
-    }
-    createAdditionalPages();
-    // activate page
-    activateEditorContext();
-    // tweak for "split mode"
-    if (isSplitMode()) {
-      createPageSplit();
-    }
-  }
-
-  /**
-   * Updates UI for "split mode".
-   */
-  private void createPageSplit() {
-    trackSourceActivation();
-    // prepare Composite for "Source" control
-    {
-      m_splitSourceContainer = new Composite(m_splitSashForm, SWT.NONE);
-      // layout and separator
-      if (isSplitModeHorizontal()) {
-        GridLayoutFactory.create(m_splitSourceContainer).columns(2).noMargins().noSpacing();
-        {
-          LineControl separator = new LineControl(m_splitSourceContainer, SWT.VERTICAL);
-          GridDataFactory.create(separator).grabV().fillV();
-        }
-      } else {
-        GridLayoutFactory.create(m_splitSourceContainer).columns(1).noMargins().noSpacing();
-        {
-          LineControl separator = new LineControl(m_splitSourceContainer, SWT.HORIZONTAL);
-          GridDataFactory.create(separator).grabH().fillH();
-        }
-      }
-      // sash
-      m_splitSashForm.setWeights(new int[]{60, 40});
-    }
-    // move "Source" control to "sash"
-    int sourceIndex = m_sourcePage.getPageIndex();
-    Control control = getControl(sourceIndex);
-    {
-      control.setParent(m_splitSourceContainer);
-      control.setVisible(true);
-      GridDataFactory.create(control).grab().fill();
-    }
-    // if "Source" first, then move it
-    if (isSourceFirst()) {
-      control.moveAbove(null);
-      m_splitSourceContainer.moveAbove(null);
-    }
-    // remove "Source" tab
-    {
-      CTabFolder tabFolder = (CTabFolder) getContainer();
-      // dispose "Source" item
-      CTabItem item = tabFolder.getItem(sourceIndex);
-      item.dispose();
-      // show "Design" tab
-      tabFolder.setSelection(0);
-      // if only one tab, don't show tabs
-      if (tabFolder.getItems().length == 1) {
-        tabFolder.setTabHeight(0);
-      }
-    }
-    // "Design" is always active
-    {
-      m_designPage.setActive(true);
-      m_designPage.forceDocumentListener();
-      m_designPage.setRefreshStrategy(m_splitRefreshStrategy);
-      m_designPage.setActive(false);
-    }
-    // activate "Source"
-    pageChange(m_sourcePage.getPageIndex());
-    m_xmlEditor.setFocus();
-  }
-
-  private void trackSourceActivation() {
-    final Display display = Display.getDefault();
-    display.addFilter(SWT.MouseDown, new Listener() {
-      @Override
-      public void handleEvent(Event event) {
-        // editor was disposed
-        if (m_sourcePage == null) {
-          display.removeFilter(SWT.MouseDown, this);
-          return;
-        }
-        // track location in "source" or "design"
-        Composite sourceControl = (Composite) m_sourcePage.getControl();
-        Composite designControl = getContainer();
-        if (UiUtils.isChildOf(sourceControl, event.widget)) {
-          int pageIndex = m_sourcePage.getPageIndex();
-          pageChange(pageIndex);
-          m_designPage.setRefreshStrategy(m_splitRefreshStrategy);
-        }
-        if (UiUtils.isChildOf(designControl, event.widget)) {
-          int pageIndex = m_designPage.getPageIndex();
-          pageChange(pageIndex);
-          m_designPage.setRefreshStrategy(IRefreshStrategy.IMMEDIATELY);
-        }
-      }
-    });
-  }
-
-  @Override
-  public int getActivePage() {
-    int pageIndex = super.getActivePage();
-    if (isSplitMode() && m_sourcePage != null) {
-      int sourcePageIndex = m_sourcePage.getPageIndex();
-      if (m_activePage == m_sourcePage) {
-        return sourcePageIndex;
-      }
-      if (pageIndex >= sourcePageIndex) {
-        pageIndex++;
-      }
-    }
-    return pageIndex;
-  }
-
-  @Override
-  protected int getPageCount() {
-    int pageCount = super.getPageCount();
-    if (isSplitMode() && m_sourcePage != null) {
-      boolean isSourceExtracted = !UiUtils.isChildOf(getContainer(), m_sourcePage.getControl());
-      if (isSourceExtracted) {
-        pageCount++;
-      }
-    }
-    return pageCount;
-  }
-
-  @Override
-  protected Control getControl(int pageIndex) {
-    if (isSplitMode() && m_sourcePage != null) {
-      int sourcePageIndex = m_sourcePage.getPageIndex();
-      if (pageIndex == sourcePageIndex) {
-        return m_sourcePage.getControl();
-      }
-      if (pageIndex > sourcePageIndex) {
-        pageIndex--;
-      }
-    }
-    return super.getControl(pageIndex);
-  }
-
-  @Override
-  protected IEditorPart getEditor(int pageIndex) {
-    if (isSplitMode() && m_sourcePage != null) {
-      int sourcePageIndex = m_sourcePage.getPageIndex();
-      if (pageIndex == sourcePageIndex) {
-        return m_xmlEditor;
-      }
-      if (pageIndex > sourcePageIndex) {
-        pageIndex--;
-      }
-    }
-    return super.getEditor(pageIndex);
-  }
-
-  /**
-   * Activates context of our XML editor.
-   */
-  private void activateEditorContext() {
-    IContextService contextService = getSite().getService(IContextService.class);
-    if (contextService != null) {
-      contextService.activateContext(CONTEXT_ID);
-    }
-  }
-
-  /**
-   * Creates "XML Source" page of multi-page editor.
-   */
-  private void createPageXml() {
-    ExecutionUtils.runLog(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        m_xmlEditor = createEditorXml();
-        int pageIndex = addPage(m_xmlEditor, getEditorInput());
-        Control control = getControl(pageIndex);
-        // create XML page
-        m_sourcePage = new SourcePage(m_xmlEditor, control);
-        m_sourcePage.initialize(AbstractXmlEditor.this);
-        m_sourcePage.setPageIndex(pageIndex);
-        // configure page tab
-        setPageText(pageIndex, m_sourcePage.getName());
-        setPageImage(pageIndex, m_sourcePage.getImage());
-        // track changes and update dirty flag
-        trackDirty();
-      }
-    });
-  }
-
-  /**
-   * @return the {@link StructuredTextEditor} to use as XML editor.
-   */
-  protected StructuredTextEditor createEditorXml() {
-    return new StructuredTextEditor();
-  }
-
-  /**
-   * Creates "Design" page of multi-page editor.
-   */
-  private void createPageDesign(int pageIndex) {
-    m_designPage = createDesignPage();
-    addPage(pageIndex, m_designPage);
-  }
-
-  /**
-   * Create additional pages.
-   */
-  private void createAdditionalPages() {
-    List<IXmlEditorPageFactory> factories = ExternalFactoriesHelper.getElementsInstances(
-        IXmlEditorPageFactory.class,
-        "org.eclipse.wb.core.xml.XMLEditorPageFactories",
-        "factory");
-    for (IXmlEditorPageFactory factory : factories) {
-      factory.createPages(this, m_additionalPages);
-    }
-    // initialize created pages
-    for (IXmlEditorPage page : m_additionalPages) {
-      page.initialize(this);
-      addPage(page);
-    }
-  }
-
-  /**
-   * Add {@link IXmlEditorPage} page to this editor.
-   */
-  private void addPage(IXmlEditorPage page) {
-    int index = getPageCount();
-    addPage(index, page);
-  }
-
-  /**
-   * Add {@link IXmlEditorPage} page to this editor.
-   */
-  private void addPage(int pageIndex, IXmlEditorPage page) {
-    page.initialize(this);
-    // create/add control
-    Control control = page.createControl(getContainer());
-    addPage(pageIndex, control);
-    page.setPageIndex(pageIndex);
-    // presentation
-    setPageText(pageIndex, page.getName());
-    setPageImage(pageIndex, page.getImage());
-  }
-
-  /**
-   * @return the {@link XmlDesignPage} to be used as "Design" page.
-   */
-  protected abstract XmlDesignPage createDesignPage();
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Dirty flag tracking
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * WST SSE has bug with undo/redo and "dirty" flag. So, we need to track "dirty" flag manually.
-   * <p>
-   * https://bugs.eclipse.org/bugs/show_bug.cgi?id=138100
-   */
-  private void trackDirty() {
-    rememberSourceContent();
-    getDocument().addDocumentListener(new IDocumentListener() {
-      @Override
-      public void documentChanged(DocumentEvent event) {
-        firePropertyChange(PROP_DIRTY);
-      }
-
-      @Override
-      public void documentAboutToBeChanged(DocumentEvent event) {
-      }
-    });
-  }
-
-  private void rememberSourceContent() {
-    m_cleanSource = getDocument().get();
-  }
-
-  @Override
-  public boolean isDirty() {
-    return !getDocument().get().equals(m_cleanSource);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Page access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void pageChange(int pageIndex) {
-    // tweak page index
-    if (isSplitMode() && pageIndex >= m_sourcePage.getPageIndex()) {
-      String callerMethodName = Thread.currentThread().getStackTrace()[2].getMethodName();
-      boolean isUserPageChangeRequest = callerMethodName.equals("widgetSelected");
-      if (isUserPageChangeRequest) {
-        pageIndex++;
-      }
-    }
-    // prepare new active page
-    IXmlEditorPage activePage = m_activePage;
-    if (pageIndex == m_sourcePage.getPageIndex()) {
-      activePage = m_sourcePage;
-    } else if (pageIndex == m_designPage.getPageIndex()) {
-      activePage = m_designPage;
-    } else {
-      for (IXmlEditorPage page : m_additionalPages) {
-        if (pageIndex == page.getPageIndex()) {
-          activePage = page;
-          break;
-        }
-      }
-    }
-    // do nothing, if this page is already active
-    // else this will cause loosing "..." button clicking in properties table
-    if (activePage == m_activePage) {
-      return;
-    }
-    // deactivate active page
-    if (m_activePage != null) {
-      m_activePage.setActive(false);
-      m_activePage = null;
-    }
-    // activate new active page
-    m_activePage = activePage;
-    // We use "fake" item because we can not override private getItem() method.
-    // Currently (20110623) this item is not used for anything useful for WindowBuilder.
-    {
-      CTabItem fakeItem =
-          isSplitMode() ? new CTabItem((CTabFolder) getContainer(), SWT.NONE) : null;
-      try {
-        super.pageChange(pageIndex);
-      } finally {
-        if (fakeItem != null) {
-          fakeItem.dispose();
-        }
-      }
-    }
-    // activate new active page
-    m_activePage = activePage;
-    if (m_activePage != null) {
-      m_activePage.setActive(true);
-    }
-  }
-
-  /**
-   * Switches between "Source" and "Design" pages.
-   */
-  public void switchSourceDesign() {
-    if (m_activePage == m_sourcePage) {
-      setActivePage(m_designPage);
-    } else {
-      setActivePage(m_sourcePage);
-    }
-  }
-
-  /**
-   * Shows "XML Source" page.
-   */
-  public void showSource() {
-    if (m_activePage != m_sourcePage) {
-      setActivePage(m_sourcePage);
-    }
-  }
-
-  /**
-   * Shows "Design" page.
-   */
-  public void showDesign() {
-    if (m_activePage != m_designPage) {
-      setActivePage(m_designPage);
-    }
-  }
-
-  /**
-   * Shows given {@link IXmlEditorPage}.
-   */
-  private void setActivePage(IXmlEditorPage page) {
-    int pageIndex = page.getPageIndex();
-    if (isPagesMode()) {
-      setActivePage(pageIndex);
-    } else {
-      pageChange(pageIndex);
-    }
-    page.getControl().setFocus();
-  }
-
-  /**
-   * Moves cursor to given position in "XML Source" editor.
-   */
-  public void showSourcePosition(final int position) {
-    ExecutionUtils.runLogLater(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        m_xmlEditor.selectAndReveal(position, 0);
-      }
-    });
-  }
+implements
+IDesignCompositeProvider {
+	private static final String CONTEXT_ID = "org.eclipse.wb.core.xml.editorScope";
+	protected StructuredTextEditor m_xmlEditor;
+	private SourcePage m_sourcePage;
+	private XmlDesignPage m_designPage;
+	private final List<IXmlEditorPage> m_additionalPages = Lists.newArrayList();
+	private IXmlEditorPage m_activePage;
+	private String m_cleanSource;
+	private Control m_partControl;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractXmlEditor() {
+		Activator.scheduleCachesLoading();
+		DesignerPlugin.configurePreEditor();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Life cycle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void dispose() {
+		// dispose pages
+		m_sourcePage.dispose();
+		m_designPage.dispose();
+		for (IXmlEditorPage page : m_additionalPages) {
+			page.dispose();
+		}
+		// clear page references (sometimes top level editor leaks)
+		{
+			m_activePage = null;
+			m_sourcePage = null;
+			m_designPage = null;
+			m_additionalPages.clear();
+		}
+		// continue
+		super.dispose();
+	}
+
+	@Override
+	protected void setInput(IEditorInput input) {
+		super.setInput(input);
+		initializeTitle(input);
+	}
+
+	private void initializeTitle(IEditorInput input) {
+		if (input != null) {
+			String title = input.getName();
+			setPartName(title);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// EditorPart
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void init(IEditorSite site, IEditorInput editorInput) throws PartInitException {
+		if (!(editorInput instanceof IFileEditorInput)) {
+			throw new PartInitException("Invalid Input: Must be IFileEditorInput");
+		}
+		super.init(site, editorInput);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link IDocument} from XML editor.
+	 */
+	public final IDocument getDocument() {
+		return m_xmlEditor.getTextViewer().getDocument();
+	}
+
+	/**
+	 * @return the {@link SourcePage} which is used as "Source" page.
+	 */
+	public final SourcePage getSourcePage() {
+		return m_sourcePage;
+	}
+
+	/**
+	 * @return the {@link XmlDesignPage} which is used as "Design" page.
+	 */
+	public final XmlDesignPage getDesignPage() {
+		return m_designPage;
+	}
+
+	/**
+	 * @return the top level {@link Control} of this {@link AbstractXmlEditor} part.
+	 */
+	public Control getPartControl() {
+		return m_partControl;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IAdaptable
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public <T> T getAdapter(Class<T> adapter) {
+		if (adapter == StructuredTextEditor.class) {
+			return adapter.cast(m_xmlEditor);
+		}
+		return super.getAdapter(adapter);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IDesignCompositeProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public DesignComposite getDesignComposite() {
+		return m_designPage.getDesignComposite();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Save
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void doSave(IProgressMonitor monitor) {
+		rememberSourceContent();
+		m_xmlEditor.doSave(monitor);
+		if (m_splitRefreshStrategy.shouldOnSave()) {
+			m_designPage.updateGEF();
+		}
+	}
+
+	@Override
+	public boolean isSaveAsAllowed() {
+		return false;
+	}
+
+	@Override
+	public void doSaveAs() {
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> "Source" page should be first.
+	 */
+	private boolean isSourceFirst() {
+		int layout = DesignerPlugin.getPreferences().getInt(IPreferenceConstants.P_EDITOR_LAYOUT);
+		return layout == IPreferenceConstants.V_EDITOR_LAYOUT_PAGES_SOURCE
+				|| layout == IPreferenceConstants.V_EDITOR_LAYOUT_SPLIT_HORIZONTAL_SOURCE
+				|| layout == IPreferenceConstants.V_EDITOR_LAYOUT_SPLIT_VERTICAL_SOURCE;
+	}
+
+	/**
+	 * @return <code>true</code> if "page mode".
+	 */
+	private boolean isPagesMode() {
+		int layout = DesignerPlugin.getPreferences().getInt(IPreferenceConstants.P_EDITOR_LAYOUT);
+		return layout == IPreferenceConstants.V_EDITOR_LAYOUT_PAGES_SOURCE
+				|| layout == IPreferenceConstants.V_EDITOR_LAYOUT_PAGES_DESIGN;
+	}
+
+	/**
+	 * @return <code>true</code> "split mode".
+	 */
+	private boolean isSplitMode() {
+		int layout = DesignerPlugin.getPreferences().getInt(IPreferenceConstants.P_EDITOR_LAYOUT);
+		return layout == IPreferenceConstants.V_EDITOR_LAYOUT_SPLIT_HORIZONTAL_DESIGN
+				|| layout == IPreferenceConstants.V_EDITOR_LAYOUT_SPLIT_HORIZONTAL_SOURCE
+				|| layout == IPreferenceConstants.V_EDITOR_LAYOUT_SPLIT_VERTICAL_DESIGN
+				|| layout == IPreferenceConstants.V_EDITOR_LAYOUT_SPLIT_VERTICAL_SOURCE;
+	}
+
+	/**
+	 * @return <code>true</code> horizontal "split mode".
+	 */
+	private boolean isSplitModeHorizontal() {
+		int layout = DesignerPlugin.getPreferences().getInt(IPreferenceConstants.P_EDITOR_LAYOUT);
+		return layout == IPreferenceConstants.V_EDITOR_LAYOUT_SPLIT_HORIZONTAL_DESIGN
+				|| layout == IPreferenceConstants.V_EDITOR_LAYOUT_SPLIT_HORIZONTAL_SOURCE;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Pages
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Composite m_splitSourceContainer;
+	private SashForm m_splitSashForm;
+	private final IRefreshStrategy m_splitRefreshStrategy = new IRefreshStrategy() {
+		@Override
+		public boolean shouldImmediately() {
+			return false;
+		}
+
+		@Override
+		public boolean shouldWithDelay() {
+			return getPreferenceDelay() > 0;
+		}
+
+		@Override
+		public boolean shouldOnSave() {
+			return getPreferenceDelay() <= 0;
+		}
+
+		@Override
+		public int getDelay() {
+			int delay = getPreferenceDelay();
+			return Math.max(delay, 250);
+		}
+
+		private int getPreferenceDelay() {
+			IPreferenceStore preferences = DesignerPlugin.getPreferences();
+			return preferences.getInt(IPreferenceConstants.P_EDITOR_LAYOUT_SYNC_DELAY);
+		}
+	};
+
+	@Override
+	protected Composite createPageContainer(Composite parent) {
+		m_partControl = parent;
+		parent = super.createPageContainer(parent);
+		if (isPagesMode()) {
+			return parent;
+		} else {
+			int style = isSplitModeHorizontal() ? SWT.HORIZONTAL : SWT.VERTICAL;
+			m_splitSashForm = new SashForm(parent, style);
+			return m_splitSashForm;
+		}
+	}
+
+	@Override
+	protected void createPages() {
+		// decorate CTabFolder
+		{
+			CTabFolder tabFolder = (CTabFolder) getContainer();
+			TabFolderDecorator.decorate(this, tabFolder);
+		}
+		// do create pages
+		if (isSourceFirst()) {
+			createPageXml();
+			createPageDesign(1);
+			m_sourcePage.setPageIndex(0);
+			m_designPage.setPageIndex(1);
+		} else {
+			createPageXml();
+			createPageDesign(0);
+			m_designPage.getControl().moveAbove(null);
+			m_sourcePage.setPageIndex(1);
+			m_designPage.setPageIndex(0);
+		}
+		createAdditionalPages();
+		// activate page
+		activateEditorContext();
+		// tweak for "split mode"
+		if (isSplitMode()) {
+			createPageSplit();
+		}
+	}
+
+	/**
+	 * Updates UI for "split mode".
+	 */
+	private void createPageSplit() {
+		trackSourceActivation();
+		// prepare Composite for "Source" control
+		{
+			m_splitSourceContainer = new Composite(m_splitSashForm, SWT.NONE);
+			// layout and separator
+			if (isSplitModeHorizontal()) {
+				GridLayoutFactory.create(m_splitSourceContainer).columns(2).noMargins().noSpacing();
+				{
+					LineControl separator = new LineControl(m_splitSourceContainer, SWT.VERTICAL);
+					GridDataFactory.create(separator).grabV().fillV();
+				}
+			} else {
+				GridLayoutFactory.create(m_splitSourceContainer).columns(1).noMargins().noSpacing();
+				{
+					LineControl separator = new LineControl(m_splitSourceContainer, SWT.HORIZONTAL);
+					GridDataFactory.create(separator).grabH().fillH();
+				}
+			}
+			// sash
+			m_splitSashForm.setWeights(new int[]{60, 40});
+		}
+		// move "Source" control to "sash"
+		int sourceIndex = m_sourcePage.getPageIndex();
+		Control control = getControl(sourceIndex);
+		{
+			control.setParent(m_splitSourceContainer);
+			control.setVisible(true);
+			GridDataFactory.create(control).grab().fill();
+		}
+		// if "Source" first, then move it
+		if (isSourceFirst()) {
+			control.moveAbove(null);
+			m_splitSourceContainer.moveAbove(null);
+		}
+		// remove "Source" tab
+		{
+			CTabFolder tabFolder = (CTabFolder) getContainer();
+			// dispose "Source" item
+			CTabItem item = tabFolder.getItem(sourceIndex);
+			item.dispose();
+			// show "Design" tab
+			tabFolder.setSelection(0);
+			// if only one tab, don't show tabs
+			if (tabFolder.getItems().length == 1) {
+				tabFolder.setTabHeight(0);
+			}
+		}
+		// "Design" is always active
+		{
+			m_designPage.setActive(true);
+			m_designPage.forceDocumentListener();
+			m_designPage.setRefreshStrategy(m_splitRefreshStrategy);
+			m_designPage.setActive(false);
+		}
+		// activate "Source"
+		pageChange(m_sourcePage.getPageIndex());
+		m_xmlEditor.setFocus();
+	}
+
+	private void trackSourceActivation() {
+		final Display display = Display.getDefault();
+		display.addFilter(SWT.MouseDown, new Listener() {
+			@Override
+			public void handleEvent(Event event) {
+				// editor was disposed
+				if (m_sourcePage == null) {
+					display.removeFilter(SWT.MouseDown, this);
+					return;
+				}
+				// track location in "source" or "design"
+				Composite sourceControl = (Composite) m_sourcePage.getControl();
+				Composite designControl = getContainer();
+				if (UiUtils.isChildOf(sourceControl, event.widget)) {
+					int pageIndex = m_sourcePage.getPageIndex();
+					pageChange(pageIndex);
+					m_designPage.setRefreshStrategy(m_splitRefreshStrategy);
+				}
+				if (UiUtils.isChildOf(designControl, event.widget)) {
+					int pageIndex = m_designPage.getPageIndex();
+					pageChange(pageIndex);
+					m_designPage.setRefreshStrategy(IRefreshStrategy.IMMEDIATELY);
+				}
+			}
+		});
+	}
+
+	@Override
+	public int getActivePage() {
+		int pageIndex = super.getActivePage();
+		if (isSplitMode() && m_sourcePage != null) {
+			int sourcePageIndex = m_sourcePage.getPageIndex();
+			if (m_activePage == m_sourcePage) {
+				return sourcePageIndex;
+			}
+			if (pageIndex >= sourcePageIndex) {
+				pageIndex++;
+			}
+		}
+		return pageIndex;
+	}
+
+	@Override
+	protected int getPageCount() {
+		int pageCount = super.getPageCount();
+		if (isSplitMode() && m_sourcePage != null) {
+			boolean isSourceExtracted = !UiUtils.isChildOf(getContainer(), m_sourcePage.getControl());
+			if (isSourceExtracted) {
+				pageCount++;
+			}
+		}
+		return pageCount;
+	}
+
+	@Override
+	protected Control getControl(int pageIndex) {
+		if (isSplitMode() && m_sourcePage != null) {
+			int sourcePageIndex = m_sourcePage.getPageIndex();
+			if (pageIndex == sourcePageIndex) {
+				return m_sourcePage.getControl();
+			}
+			if (pageIndex > sourcePageIndex) {
+				pageIndex--;
+			}
+		}
+		return super.getControl(pageIndex);
+	}
+
+	@Override
+	protected IEditorPart getEditor(int pageIndex) {
+		if (isSplitMode() && m_sourcePage != null) {
+			int sourcePageIndex = m_sourcePage.getPageIndex();
+			if (pageIndex == sourcePageIndex) {
+				return m_xmlEditor;
+			}
+			if (pageIndex > sourcePageIndex) {
+				pageIndex--;
+			}
+		}
+		return super.getEditor(pageIndex);
+	}
+
+	/**
+	 * Activates context of our XML editor.
+	 */
+	private void activateEditorContext() {
+		IContextService contextService = getSite().getService(IContextService.class);
+		if (contextService != null) {
+			contextService.activateContext(CONTEXT_ID);
+		}
+	}
+
+	/**
+	 * Creates "XML Source" page of multi-page editor.
+	 */
+	private void createPageXml() {
+		ExecutionUtils.runLog(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				m_xmlEditor = createEditorXml();
+				int pageIndex = addPage(m_xmlEditor, getEditorInput());
+				Control control = getControl(pageIndex);
+				// create XML page
+				m_sourcePage = new SourcePage(m_xmlEditor, control);
+				m_sourcePage.initialize(AbstractXmlEditor.this);
+				m_sourcePage.setPageIndex(pageIndex);
+				// configure page tab
+				setPageText(pageIndex, m_sourcePage.getName());
+				setPageImage(pageIndex, m_sourcePage.getImage());
+				// track changes and update dirty flag
+				trackDirty();
+			}
+		});
+	}
+
+	/**
+	 * @return the {@link StructuredTextEditor} to use as XML editor.
+	 */
+	protected StructuredTextEditor createEditorXml() {
+		return new StructuredTextEditor();
+	}
+
+	/**
+	 * Creates "Design" page of multi-page editor.
+	 */
+	private void createPageDesign(int pageIndex) {
+		m_designPage = createDesignPage();
+		addPage(pageIndex, m_designPage);
+	}
+
+	/**
+	 * Create additional pages.
+	 */
+	private void createAdditionalPages() {
+		List<IXmlEditorPageFactory> factories = ExternalFactoriesHelper.getElementsInstances(
+				IXmlEditorPageFactory.class,
+				"org.eclipse.wb.core.xml.XMLEditorPageFactories",
+				"factory");
+		for (IXmlEditorPageFactory factory : factories) {
+			factory.createPages(this, m_additionalPages);
+		}
+		// initialize created pages
+		for (IXmlEditorPage page : m_additionalPages) {
+			page.initialize(this);
+			addPage(page);
+		}
+	}
+
+	/**
+	 * Add {@link IXmlEditorPage} page to this editor.
+	 */
+	private void addPage(IXmlEditorPage page) {
+		int index = getPageCount();
+		addPage(index, page);
+	}
+
+	/**
+	 * Add {@link IXmlEditorPage} page to this editor.
+	 */
+	private void addPage(int pageIndex, IXmlEditorPage page) {
+		page.initialize(this);
+		// create/add control
+		Control control = page.createControl(getContainer());
+		addPage(pageIndex, control);
+		page.setPageIndex(pageIndex);
+		// presentation
+		setPageText(pageIndex, page.getName());
+		setPageImage(pageIndex, page.getImage());
+	}
+
+	/**
+	 * @return the {@link XmlDesignPage} to be used as "Design" page.
+	 */
+	protected abstract XmlDesignPage createDesignPage();
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Dirty flag tracking
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * WST SSE has bug with undo/redo and "dirty" flag. So, we need to track "dirty" flag manually.
+	 * <p>
+	 * https://bugs.eclipse.org/bugs/show_bug.cgi?id=138100
+	 */
+	private void trackDirty() {
+		rememberSourceContent();
+		getDocument().addDocumentListener(new IDocumentListener() {
+			@Override
+			public void documentChanged(DocumentEvent event) {
+				firePropertyChange(PROP_DIRTY);
+			}
+
+			@Override
+			public void documentAboutToBeChanged(DocumentEvent event) {
+			}
+		});
+	}
+
+	private void rememberSourceContent() {
+		m_cleanSource = getDocument().get();
+	}
+
+	@Override
+	public boolean isDirty() {
+		return !getDocument().get().equals(m_cleanSource);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Page access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void pageChange(int pageIndex) {
+		// tweak page index
+		if (isSplitMode() && pageIndex >= m_sourcePage.getPageIndex()) {
+			String callerMethodName = Thread.currentThread().getStackTrace()[2].getMethodName();
+			boolean isUserPageChangeRequest = callerMethodName.equals("widgetSelected");
+			if (isUserPageChangeRequest) {
+				pageIndex++;
+			}
+		}
+		// prepare new active page
+		IXmlEditorPage activePage = m_activePage;
+		if (pageIndex == m_sourcePage.getPageIndex()) {
+			activePage = m_sourcePage;
+		} else if (pageIndex == m_designPage.getPageIndex()) {
+			activePage = m_designPage;
+		} else {
+			for (IXmlEditorPage page : m_additionalPages) {
+				if (pageIndex == page.getPageIndex()) {
+					activePage = page;
+					break;
+				}
+			}
+		}
+		// do nothing, if this page is already active
+		// else this will cause loosing "..." button clicking in properties table
+		if (activePage == m_activePage) {
+			return;
+		}
+		// deactivate active page
+		if (m_activePage != null) {
+			m_activePage.setActive(false);
+			m_activePage = null;
+		}
+		// activate new active page
+		m_activePage = activePage;
+		// We use "fake" item because we can not override private getItem() method.
+		// Currently (20110623) this item is not used for anything useful for WindowBuilder.
+		{
+			CTabItem fakeItem =
+					isSplitMode() ? new CTabItem((CTabFolder) getContainer(), SWT.NONE) : null;
+			try {
+				super.pageChange(pageIndex);
+			} finally {
+				if (fakeItem != null) {
+					fakeItem.dispose();
+				}
+			}
+		}
+		// activate new active page
+		m_activePage = activePage;
+		if (m_activePage != null) {
+			m_activePage.setActive(true);
+		}
+	}
+
+	/**
+	 * Switches between "Source" and "Design" pages.
+	 */
+	public void switchSourceDesign() {
+		if (m_activePage == m_sourcePage) {
+			setActivePage(m_designPage);
+		} else {
+			setActivePage(m_sourcePage);
+		}
+	}
+
+	/**
+	 * Shows "XML Source" page.
+	 */
+	public void showSource() {
+		if (m_activePage != m_sourcePage) {
+			setActivePage(m_sourcePage);
+		}
+	}
+
+	/**
+	 * Shows "Design" page.
+	 */
+	public void showDesign() {
+		if (m_activePage != m_designPage) {
+			setActivePage(m_designPage);
+		}
+	}
+
+	/**
+	 * Shows given {@link IXmlEditorPage}.
+	 */
+	private void setActivePage(IXmlEditorPage page) {
+		int pageIndex = page.getPageIndex();
+		if (isPagesMode()) {
+			setActivePage(pageIndex);
+		} else {
+			pageChange(pageIndex);
+		}
+		page.getControl().setFocus();
+	}
+
+	/**
+	 * Moves cursor to given position in "XML Source" editor.
+	 */
+	public void showSourcePosition(final int position) {
+		ExecutionUtils.runLogLater(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				m_xmlEditor.selectAndReveal(position, 0);
+			}
+		});
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/AbstractXmlEditorContributor.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/AbstractXmlEditorContributor.java
index e08b0f7e3..71b3ead6c 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/AbstractXmlEditorContributor.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/AbstractXmlEditorContributor.java
@@ -28,73 +28,73 @@
  * @coverage XML.editor
  */
 public class AbstractXmlEditorContributor extends MultiPageEditorActionBarContributor {
-  private IEditorPart m_activeEditor;
-  private AbstractXmlEditor m_designerEditor;
+	private IEditorPart m_activeEditor;
+	private AbstractXmlEditor m_designerEditor;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // MultiPageEditorActionBarContributor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void setActiveEditor(IEditorPart part) {
-    if (part instanceof MultiPageEditorPart) {
-      m_designerEditor = (AbstractXmlEditor) part;
-    }
-    super.setActiveEditor(part);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// MultiPageEditorActionBarContributor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void setActiveEditor(IEditorPart part) {
+		if (part instanceof MultiPageEditorPart) {
+			m_designerEditor = (AbstractXmlEditor) part;
+		}
+		super.setActiveEditor(part);
+	}
 
-  @Override
-  public void setActivePage(IEditorPart part) {
-    if (m_activeEditor == part) {
-      return;
-    }
-    m_activeEditor = part;
-    // update IActionBars
-    IActionBars actionBars = getActionBars();
-    if (actionBars != null) {
-      redirectTextActions(actionBars);
-    }
-  }
+	@Override
+	public void setActivePage(IEditorPart part) {
+		if (m_activeEditor == part) {
+			return;
+		}
+		m_activeEditor = part;
+		// update IActionBars
+		IActionBars actionBars = getActionBars();
+		if (actionBars != null) {
+			redirectTextActions(actionBars);
+		}
+	}
 
-  /**
-   * Configures {@link IActionBars} to use global action handlers from {@link ITextEditor}.
-   */
-  private void redirectTextActions(IActionBars actionBars) {
-    ITextEditor editor =
-        m_activeEditor instanceof ITextEditor ? (ITextEditor) m_activeEditor : null;
-    redirectTextAction(actionBars, editor, ITextEditorActionConstants.DELETE);
-    redirectTextAction(actionBars, editor, ITextEditorActionConstants.CUT);
-    redirectTextAction(actionBars, editor, ITextEditorActionConstants.COPY);
-    redirectTextAction(actionBars, editor, ITextEditorActionConstants.PASTE);
-    redirectTextAction(actionBars, editor, ITextEditorActionConstants.SELECT_ALL);
-    redirectTextAction(actionBars, editor, ITextEditorActionConstants.FIND);
-    redirectTextAction(actionBars, editor, ITextEditorActionConstants.DELETE_LINE);
-    //redirectTextAction(actionBars, editor, ITextEditorActionConstants.DELETE_LINE_TO_BEGINNING);
-    //redirectTextAction(actionBars, editor, ITextEditorActionConstants.DELETE_LINE_TO_END);
-    redirectTextAction(actionBars, editor, IDEActionFactory.BOOKMARK.getId());
-    // UNDO and REDO should be handled by XML editor
-    if (m_activeEditor == null && m_designerEditor != null) {
-      ITextEditor xmlEditor = m_designerEditor.getSourcePage().getXmlEditor();
-      redirectTextAction(actionBars, xmlEditor, ITextEditorActionConstants.UNDO);
-      redirectTextAction(actionBars, xmlEditor, ITextEditorActionConstants.REDO);
-    }
-    // update
-    actionBars.updateActionBars();
-  }
+	/**
+	 * Configures {@link IActionBars} to use global action handlers from {@link ITextEditor}.
+	 */
+	private void redirectTextActions(IActionBars actionBars) {
+		ITextEditor editor =
+				m_activeEditor instanceof ITextEditor ? (ITextEditor) m_activeEditor : null;
+		redirectTextAction(actionBars, editor, ITextEditorActionConstants.DELETE);
+		redirectTextAction(actionBars, editor, ITextEditorActionConstants.CUT);
+		redirectTextAction(actionBars, editor, ITextEditorActionConstants.COPY);
+		redirectTextAction(actionBars, editor, ITextEditorActionConstants.PASTE);
+		redirectTextAction(actionBars, editor, ITextEditorActionConstants.SELECT_ALL);
+		redirectTextAction(actionBars, editor, ITextEditorActionConstants.FIND);
+		redirectTextAction(actionBars, editor, ITextEditorActionConstants.DELETE_LINE);
+		//redirectTextAction(actionBars, editor, ITextEditorActionConstants.DELETE_LINE_TO_BEGINNING);
+		//redirectTextAction(actionBars, editor, ITextEditorActionConstants.DELETE_LINE_TO_END);
+		redirectTextAction(actionBars, editor, IDEActionFactory.BOOKMARK.getId());
+		// UNDO and REDO should be handled by XML editor
+		if (m_activeEditor == null && m_designerEditor != null) {
+			ITextEditor xmlEditor = m_designerEditor.getSourcePage().getXmlEditor();
+			redirectTextAction(actionBars, xmlEditor, ITextEditorActionConstants.UNDO);
+			redirectTextAction(actionBars, xmlEditor, ITextEditorActionConstants.REDO);
+		}
+		// update
+		actionBars.updateActionBars();
+	}
 
-  /**
-   * Configures {@link IActionBars} to use global action handler from {@link ITextEditor}.
-   */
-  private static void redirectTextAction(IActionBars actionBars, ITextEditor editor, String id) {
-    actionBars.setGlobalActionHandler(id, getTextAction(editor, id));
-  }
+	/**
+	 * Configures {@link IActionBars} to use global action handler from {@link ITextEditor}.
+	 */
+	private static void redirectTextAction(IActionBars actionBars, ITextEditor editor, String id) {
+		actionBars.setGlobalActionHandler(id, getTextAction(editor, id));
+	}
 
-  /**
-   * @return the {@link IAction} registered with the given text {@link ITextEditor}, may be
-   *         <code>null</code>.
-   */
-  private static IAction getTextAction(ITextEditor editor, String actionID) {
-    return editor == null ? null : editor.getAction(actionID);
-  }
+	/**
+	 * @return the {@link IAction} registered with the given text {@link ITextEditor}, may be
+	 *         <code>null</code>.
+	 */
+	private static IAction getTextAction(ITextEditor editor, String actionID) {
+		return editor == null ? null : editor.getAction(actionID);
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/DesignContextMenuProvider.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/DesignContextMenuProvider.java
index c427504cb..ef7da60ff 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/DesignContextMenuProvider.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/DesignContextMenuProvider.java
@@ -33,97 +33,97 @@
  * @coverage XML.editor
  */
 public final class DesignContextMenuProvider extends MultiSelectionContextMenuProvider {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Groups
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final String GROUP_BASE = "org.eclipse.wb.popup.group.";
-  public static final String GROUP_TOP = GROUP_BASE + "top";
-  public static final String GROUP_EDIT = GROUP_BASE + "edit";
-  public static final String GROUP_EDIT2 = GROUP_BASE + "edit2";
-  public static final String GROUP_EVENTS = GROUP_BASE + "events";
-  public static final String GROUP_EVENTS2 = GROUP_BASE + "events2";
-  public static final String GROUP_LAYOUT = GROUP_BASE + "layout";
-  public static final String GROUP_CONSTRAINTS = GROUP_BASE + "constraints";
-  public static final String GROUP_INHERITANCE = GROUP_BASE + "inheritance";
-  public static final String GROUP_ADDITIONAL = GROUP_BASE + "additional";
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Groups
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final String GROUP_BASE = "org.eclipse.wb.popup.group.";
+	public static final String GROUP_TOP = GROUP_BASE + "top";
+	public static final String GROUP_EDIT = GROUP_BASE + "edit";
+	public static final String GROUP_EDIT2 = GROUP_BASE + "edit2";
+	public static final String GROUP_EVENTS = GROUP_BASE + "events";
+	public static final String GROUP_EVENTS2 = GROUP_BASE + "events2";
+	public static final String GROUP_LAYOUT = GROUP_BASE + "layout";
+	public static final String GROUP_CONSTRAINTS = GROUP_BASE + "constraints";
+	public static final String GROUP_INHERITANCE = GROUP_BASE + "inheritance";
+	public static final String GROUP_ADDITIONAL = GROUP_BASE + "additional";
 
-  /**
-   * Adds standard groups into given {@link IMenuManager}.
-   */
-  public static void addGroups(IMenuManager manager) {
-    manager.add(new Separator(GROUP_TOP));
-    manager.add(new Separator(GROUP_EDIT));
-    manager.add(new Separator(GROUP_EDIT2));
-    manager.add(new Separator(GROUP_EVENTS));
-    manager.add(new Separator(GROUP_EVENTS2));
-    manager.add(new Separator(GROUP_LAYOUT));
-    manager.add(new Separator(GROUP_CONSTRAINTS));
-    manager.add(new Separator(GROUP_INHERITANCE));
-    manager.add(new Separator(GROUP_ADDITIONAL));
-  }
+	/**
+	 * Adds standard groups into given {@link IMenuManager}.
+	 */
+	public static void addGroups(IMenuManager manager) {
+		manager.add(new Separator(GROUP_TOP));
+		manager.add(new Separator(GROUP_EDIT));
+		manager.add(new Separator(GROUP_EDIT2));
+		manager.add(new Separator(GROUP_EVENTS));
+		manager.add(new Separator(GROUP_EVENTS2));
+		manager.add(new Separator(GROUP_LAYOUT));
+		manager.add(new Separator(GROUP_CONSTRAINTS));
+		manager.add(new Separator(GROUP_INHERITANCE));
+		manager.add(new Separator(GROUP_ADDITIONAL));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance fields
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final DesignPageActions m_pageActions;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance fields
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final DesignPageActions m_pageActions;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DesignContextMenuProvider(IEditPartViewer viewer, DesignPageActions pageActions) {
-    super(viewer);
-    m_pageActions = pageActions;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DesignContextMenuProvider(IEditPartViewer viewer, DesignPageActions pageActions) {
+		super(viewer);
+		m_pageActions = pageActions;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // MultiSelectionContextMenuProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private List<ObjectInfo> m_selectedObjects;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// MultiSelectionContextMenuProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private List<ObjectInfo> m_selectedObjects;
 
-  @Override
-  protected void preprocessSelection(List<EditPart> editParts) {
-    super.preprocessSelection(editParts);
-    // prepare selected ObjectInfo's
-    m_selectedObjects = Lists.newArrayList();
-    for (EditPart editPart : editParts) {
-      if (editPart.getModel() instanceof ObjectInfo) {
-        m_selectedObjects.add((ObjectInfo) editPart.getModel());
-      }
-    }
-  }
+	@Override
+	protected void preprocessSelection(List<EditPart> editParts) {
+		super.preprocessSelection(editParts);
+		// prepare selected ObjectInfo's
+		m_selectedObjects = Lists.newArrayList();
+		for (EditPart editPart : editParts) {
+			if (editPart.getModel() instanceof ObjectInfo) {
+				m_selectedObjects.add((ObjectInfo) editPart.getModel());
+			}
+		}
+	}
 
-  @Override
-  protected void buildContextMenu(final EditPart editPart, final IMenuManager manager) {
-    addGroups(manager);
-    // edit
-    {
-      manager.appendToGroup(GROUP_EDIT, m_pageActions.getCutAction());
-      manager.appendToGroup(GROUP_EDIT, m_pageActions.getCopyAction());
-      manager.appendToGroup(GROUP_EDIT, m_pageActions.getPasteAction());
-      manager.appendToGroup(GROUP_EDIT, m_pageActions.getDeleteAction());
-    }
-    // edit2
-    {
-      manager.appendToGroup(GROUP_EDIT2, m_pageActions.getTestAction());
-      manager.appendToGroup(GROUP_EDIT2, m_pageActions.getRefreshAction());
-    }
-    // send notification
-    if (editPart.getModel() instanceof ObjectInfo) {
-      ExecutionUtils.runLog(new RunnableEx() {
-        @Override
-        public void run() throws Exception {
-          ObjectInfo object = (ObjectInfo) editPart.getModel();
-          object.getBroadcastObject().addContextMenu(m_selectedObjects, object, manager);
-        }
-      });
-    }
-  }
+	@Override
+	protected void buildContextMenu(final EditPart editPart, final IMenuManager manager) {
+		addGroups(manager);
+		// edit
+		{
+			manager.appendToGroup(GROUP_EDIT, m_pageActions.getCutAction());
+			manager.appendToGroup(GROUP_EDIT, m_pageActions.getCopyAction());
+			manager.appendToGroup(GROUP_EDIT, m_pageActions.getPasteAction());
+			manager.appendToGroup(GROUP_EDIT, m_pageActions.getDeleteAction());
+		}
+		// edit2
+		{
+			manager.appendToGroup(GROUP_EDIT2, m_pageActions.getTestAction());
+			manager.appendToGroup(GROUP_EDIT2, m_pageActions.getRefreshAction());
+		}
+		// send notification
+		if (editPart.getModel() instanceof ObjectInfo) {
+			ExecutionUtils.runLog(new RunnableEx() {
+				@Override
+				public void run() throws Exception {
+					ObjectInfo object = (ObjectInfo) editPart.getModel();
+					object.getBroadcastObject().addContextMenu(m_selectedObjects, object, manager);
+				}
+			});
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/IRefreshStrategy.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/IRefreshStrategy.java
index f58414ae5..fced6917c 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/IRefreshStrategy.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/IRefreshStrategy.java
@@ -19,45 +19,45 @@
  * @coverage XML.editor
  */
 public interface IRefreshStrategy {
-  /**
-   * @return <code>true</code> if UI should be refreshed immediately after change.
-   */
-  boolean shouldImmediately();
-
-  /**
-   * @return <code>true</code> if UI should be refreshed after {@link #getDelay()} ms.
-   */
-  boolean shouldWithDelay();
-
-  /**
-   * @return <code>true</code> if UI should be refreshed on editor save.
-   */
-  boolean shouldOnSave();
-
-  /**
-   * @return the delay in milliseconds for refreshing UI.
-   */
-  int getDelay();
-
-  IRefreshStrategy IMMEDIATELY = new IRefreshStrategy() {
-    @Override
-    public boolean shouldImmediately() {
-      return true;
-    }
-
-    @Override
-    public boolean shouldWithDelay() {
-      return false;
-    }
-
-    @Override
-    public boolean shouldOnSave() {
-      return false;
-    }
-
-    @Override
-    public int getDelay() {
-      return 0;
-    }
-  };
+	/**
+	 * @return <code>true</code> if UI should be refreshed immediately after change.
+	 */
+	boolean shouldImmediately();
+
+	/**
+	 * @return <code>true</code> if UI should be refreshed after {@link #getDelay()} ms.
+	 */
+	boolean shouldWithDelay();
+
+	/**
+	 * @return <code>true</code> if UI should be refreshed on editor save.
+	 */
+	boolean shouldOnSave();
+
+	/**
+	 * @return the delay in milliseconds for refreshing UI.
+	 */
+	int getDelay();
+
+	IRefreshStrategy IMMEDIATELY = new IRefreshStrategy() {
+		@Override
+		public boolean shouldImmediately() {
+			return true;
+		}
+
+		@Override
+		public boolean shouldWithDelay() {
+			return false;
+		}
+
+		@Override
+		public boolean shouldOnSave() {
+			return false;
+		}
+
+		@Override
+		public int getDelay() {
+			return 0;
+		}
+	};
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/IXmlEditorPage.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/IXmlEditorPage.java
index 617bb447a..8fec2c08c 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/IXmlEditorPage.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/IXmlEditorPage.java
@@ -21,68 +21,68 @@
  * @coverage XML.editor
  */
 public interface IXmlEditorPage {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Life cycle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Initialize this page for given {@link AbstractXmlEditor}.
-   */
-  void initialize(AbstractXmlEditor editor);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Life cycle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Initialize this page for given {@link AbstractXmlEditor}.
+	 */
+	void initialize(AbstractXmlEditor editor);
 
-  /**
-   * Disposes this page.
-   */
-  void dispose();
+	/**
+	 * Disposes this page.
+	 */
+	void dispose();
 
-  /**
-   * Notifies when this page become active or inactive.
-   */
-  void setActive(boolean active);
+	/**
+	 * Notifies when this page become active or inactive.
+	 */
+	void setActive(boolean active);
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Page
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the index of this page into multi-page editor.
-   */
-  int getPageIndex();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Page
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the index of this page into multi-page editor.
+	 */
+	int getPageIndex();
 
-  /**
-   * Sets index of this page into multi-page editor.
-   */
-  void setPageIndex(int index);
+	/**
+	 * Sets index of this page into multi-page editor.
+	 */
+	void setPageIndex(int index);
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Creates the {@link Control} for this page.
-   */
-  Control createControl(Composite parent);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Creates the {@link Control} for this page.
+	 */
+	Control createControl(Composite parent);
 
-  /**
-   * @return the {@link Control} of this page.
-   */
-  Control getControl();
+	/**
+	 * @return the {@link Control} of this page.
+	 */
+	Control getControl();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the display name for this page.
-   */
-  String getName();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the display name for this page.
+	 */
+	String getName();
 
-  /**
-   * @return the display {@link Image} image for this page.
-   */
-  Image getImage();
+	/**
+	 * @return the display {@link Image} image for this page.
+	 */
+	Image getImage();
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/IXmlEditorPageFactory.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/IXmlEditorPageFactory.java
index d54c19000..1787a40da 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/IXmlEditorPageFactory.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/IXmlEditorPageFactory.java
@@ -20,8 +20,8 @@
  * @coverage XML.editor
  */
 public interface IXmlEditorPageFactory {
-  /**
-   * Create {@link IXmlEditorPage} pages for given {@link AbstractXmlEditor} editor.
-   */
-  void createPages(AbstractXmlEditor editor, List<IXmlEditorPage> pages);
+	/**
+	 * Create {@link IXmlEditorPage} pages for given {@link AbstractXmlEditor} editor.
+	 */
+	void createPages(AbstractXmlEditor editor, List<IXmlEditorPage> pages);
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/LineControl.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/LineControl.java
index b1db1c885..9a8d334fe 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/LineControl.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/LineControl.java
@@ -26,42 +26,42 @@
  * @coverage XML.editor
  */
 public final class LineControl extends Canvas {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public LineControl(Composite parent, int style) {
-    super(parent, style);
-    addListener(SWT.Paint, new Listener() {
-      @Override
-      public void handleEvent(Event event) {
-        GC gc = event.gc;
-        gc.setForeground(getDisplay().getSystemColor(SWT.COLOR_WIDGET_NORMAL_SHADOW));
-        if (isHorizontal()) {
-          gc.drawLine(0, 0, getSize().x, 0);
-        } else {
-          gc.drawLine(0, 0, 0, getSize().y);
-        }
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public LineControl(Composite parent, int style) {
+		super(parent, style);
+		addListener(SWT.Paint, new Listener() {
+			@Override
+			public void handleEvent(Event event) {
+				GC gc = event.gc;
+				gc.setForeground(getDisplay().getSystemColor(SWT.COLOR_WIDGET_NORMAL_SHADOW));
+				if (isHorizontal()) {
+					gc.drawLine(0, 0, getSize().x, 0);
+				} else {
+					gc.drawLine(0, 0, 0, getSize().y);
+				}
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Control
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Point computeSize(int wHint, int hHint, boolean changed) {
-    if (isHorizontal()) {
-      return new Point(wHint, 1);
-    } else {
-      return new Point(1, hHint);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Control
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Point computeSize(int wHint, int hHint, boolean changed) {
+		if (isHorizontal()) {
+			return new Point(wHint, 1);
+		} else {
+			return new Point(1, hHint);
+		}
+	}
 
-  private boolean isHorizontal() {
-    return (getStyle() & SWT.HORIZONTAL) == SWT.HORIZONTAL;
-  }
+	private boolean isHorizontal() {
+		return (getStyle() & SWT.HORIZONTAL) == SWT.HORIZONTAL;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/SourcePage.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/SourcePage.java
index b8f9623cb..39dd852ee 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/SourcePage.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/SourcePage.java
@@ -25,58 +25,58 @@
  * @coverage XML.editor
  */
 public final class SourcePage extends XmlEditorPage {
-  private final Control m_control;
-  private final StructuredTextEditor m_xmlEditor;
+	private final Control m_control;
+	private final StructuredTextEditor m_xmlEditor;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SourcePage(StructuredTextEditor xmlEditor, Control control) {
-    m_xmlEditor = xmlEditor;
-    m_control = control;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SourcePage(StructuredTextEditor xmlEditor, Control control) {
+		m_xmlEditor = xmlEditor;
+		m_control = control;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the underlying XML editor.
-   */
-  public StructuredTextEditor getXmlEditor() {
-    return m_xmlEditor;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the underlying XML editor.
+	 */
+	public StructuredTextEditor getXmlEditor() {
+		return m_xmlEditor;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Control createControl(Composite parent) {
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Control createControl(Composite parent) {
+		return null;
+	}
 
-  @Override
-  public Control getControl() {
-    return m_control;
-  }
+	@Override
+	public Control getControl() {
+		return m_control;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getName() {
-    return Messages.SourcePage_name;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getName() {
+		return Messages.SourcePage_name;
+	}
 
-  @Override
-  public Image getImage() {
-    return Activator.getImage("editor_page_xml.png");
-  }
+	@Override
+	public Image getImage() {
+		return Activator.getImage("editor_page_xml.png");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/UndoManager.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/UndoManager.java
index ea773726a..eddeed528 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/UndoManager.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/UndoManager.java
@@ -44,321 +44,321 @@
  * @coverage XML.editor
  */
 public final class UndoManager {
-  private final XmlDesignPage m_designPage;
-  private final IDocument m_document;
-  private String m_currentSource;
-  private String m_currentDump;
-  private IComponentsTree m_componentsTree;
-  private ISelectionProvider m_selectionProvider;
-  private ITreeContentProvider m_componentsProvider;
-  private ObjectPathHelper m_objectPathHelper;
-  @SuppressWarnings("unchecked")
-  private final Map<String, int[][]> m_dumpToSelection = new LRUMap(32);
-  @SuppressWarnings("unchecked")
-  private final Map<String, int[][]> m_dumpToExpanded = new LRUMap(32);
+	private final XmlDesignPage m_designPage;
+	private final IDocument m_document;
+	private String m_currentSource;
+	private String m_currentDump;
+	private IComponentsTree m_componentsTree;
+	private ISelectionProvider m_selectionProvider;
+	private ITreeContentProvider m_componentsProvider;
+	private ObjectPathHelper m_objectPathHelper;
+	@SuppressWarnings("unchecked")
+	private final Map<String, int[][]> m_dumpToSelection = new LRUMap(32);
+	@SuppressWarnings("unchecked")
+	private final Map<String, int[][]> m_dumpToExpanded = new LRUMap(32);
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public UndoManager(XmlDesignPage designPage, IDocument document) {
-    m_designPage = designPage;
-    m_document = document;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public UndoManager(XmlDesignPage designPage, IDocument document) {
+		m_designPage = designPage;
+		m_document = document;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private boolean m_active;
-  private XmlObjectInfo m_rootObject;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private boolean m_active;
+	private XmlObjectInfo m_rootObject;
 
-  /**
-   * Activates {@link UndoManager}, so it starts listening for document changes.
-   */
-  public void activate() {
-    if (!m_active) {
-      m_active = true;
-      if (!StringUtils.equals(m_currentSource, m_document.get())) {
-        refreshDesignerEditor();
-      }
-      addDocumentListener();
-    }
-  }
+	/**
+	 * Activates {@link UndoManager}, so it starts listening for document changes.
+	 */
+	public void activate() {
+		if (!m_active) {
+			m_active = true;
+			if (!StringUtils.equals(m_currentSource, m_document.get())) {
+				refreshDesignerEditor();
+			}
+			addDocumentListener();
+		}
+	}
 
-  /**
-   * Deactivates {@link UndoManager}, so it stops listening for document changes.
-   */
-  public void deactivate() {
-    m_active = false;
-    removeDocumentListener();
-  }
+	/**
+	 * Deactivates {@link UndoManager}, so it stops listening for document changes.
+	 */
+	public void deactivate() {
+		m_active = false;
+		removeDocumentListener();
+	}
 
-  /**
-   * Sets the new root {@link XmlObjectInfo} in editor.
-   */
-  public void setRoot(XmlObjectInfo rootObject) {
-    m_rootObject = rootObject;
-    rootObject.addBroadcastListener(m_commitListener);
-    rootObject.addBroadcastListener(m_refreshListener);
-    // get components tree
-    {
-      DesignPageSite site = DesignPageSite.Helper.getSite(rootObject);
-      m_componentsTree = site.getComponentTree();
-      m_componentsProvider = m_componentsTree.getContentProvider();
-      m_selectionProvider = m_componentsTree.getSelectionProvider();
-      m_objectPathHelper = new ObjectPathHelper(m_componentsProvider);
-      // listen for tree expansion state
-      m_componentsTree.setExpandListener(new Runnable() {
-        @Override
-        public void run() {
-          Display.getCurrent().asyncExec(new Runnable() {
-            @Override
-            public void run() {
-              rememberState();
-            }
-          });
-        }
-      });
-    }
-  }
+	/**
+	 * Sets the new root {@link XmlObjectInfo} in editor.
+	 */
+	public void setRoot(XmlObjectInfo rootObject) {
+		m_rootObject = rootObject;
+		rootObject.addBroadcastListener(m_commitListener);
+		rootObject.addBroadcastListener(m_refreshListener);
+		// get components tree
+		{
+			DesignPageSite site = DesignPageSite.Helper.getSite(rootObject);
+			m_componentsTree = site.getComponentTree();
+			m_componentsProvider = m_componentsTree.getContentProvider();
+			m_selectionProvider = m_componentsTree.getSelectionProvider();
+			m_objectPathHelper = new ObjectPathHelper(m_componentsProvider);
+			// listen for tree expansion state
+			m_componentsTree.setExpandListener(new Runnable() {
+				@Override
+				public void run() {
+					Display.getCurrent().asyncExec(new Runnable() {
+						@Override
+						public void run() {
+							rememberState();
+						}
+					});
+				}
+			});
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IDocument listener
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private int m_bufferChangeCount = 0;
-  private IRefreshStrategy m_refreshStrategy = IRefreshStrategy.IMMEDIATELY;
-  private final IDocumentListener m_documentListener = new IDocumentListener() {
-    @Override
-    public void documentChanged(DocumentEvent event) {
-      if (event.getText() != null || event.getLength() != 0) {
-        scheduleRefresh_onBufferChange();
-      }
-    }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IDocument listener
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private int m_bufferChangeCount = 0;
+	private IRefreshStrategy m_refreshStrategy = IRefreshStrategy.IMMEDIATELY;
+	private final IDocumentListener m_documentListener = new IDocumentListener() {
+		@Override
+		public void documentChanged(DocumentEvent event) {
+			if (event.getText() != null || event.getLength() != 0) {
+				scheduleRefresh_onBufferChange();
+			}
+		}
 
-    @Override
-    public void documentAboutToBeChanged(DocumentEvent event) {
-    }
+		@Override
+		public void documentAboutToBeChanged(DocumentEvent event) {
+		}
 
-    private void scheduleRefresh_onBufferChange() {
-      final int bufferChangeCount = ++m_bufferChangeCount;
-      Runnable runnable = new Runnable() {
-        @Override
-        public void run() {
-          if (bufferChangeCount == m_bufferChangeCount) {
-            refreshDesignerEditor();
-          }
-        }
-      };
-      if (m_refreshStrategy.shouldImmediately()) {
-        runnable.run();
-      } else if (m_refreshStrategy.shouldWithDelay()) {
-        int delay = m_refreshStrategy.getDelay();
-        Display.getDefault().timerExec(delay, runnable);
-      }
-    }
-  };
+		private void scheduleRefresh_onBufferChange() {
+			final int bufferChangeCount = ++m_bufferChangeCount;
+			Runnable runnable = new Runnable() {
+				@Override
+				public void run() {
+					if (bufferChangeCount == m_bufferChangeCount) {
+						refreshDesignerEditor();
+					}
+				}
+			};
+			if (m_refreshStrategy.shouldImmediately()) {
+				runnable.run();
+			} else if (m_refreshStrategy.shouldWithDelay()) {
+				int delay = m_refreshStrategy.getDelay();
+				Display.getDefault().timerExec(delay, runnable);
+			}
+		}
+	};
 
-  void setRefreshStrategy(IRefreshStrategy refreshStrategy) {
-    m_refreshStrategy = refreshStrategy;
-  }
+	void setRefreshStrategy(IRefreshStrategy refreshStrategy) {
+		m_refreshStrategy = refreshStrategy;
+	}
 
-  /**
-   * Adds {@link IDocumentListener}.
-   */
-  private void addDocumentListener() {
-    m_document.addDocumentListener(m_documentListener);
-  }
+	/**
+	 * Adds {@link IDocumentListener}.
+	 */
+	private void addDocumentListener() {
+		m_document.addDocumentListener(m_documentListener);
+	}
 
-  /**
-   * Removes {@link IDocumentListener}.
-   */
-  private void removeDocumentListener() {
-    m_document.removeDocumentListener(m_documentListener);
-  }
+	/**
+	 * Removes {@link IDocumentListener}.
+	 */
+	private void removeDocumentListener() {
+		m_document.removeDocumentListener(m_documentListener);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh listener
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Remove IDocument listeners during commit.
-   */
-  private final EditorContextCommitListener m_commitListener = new EditorContextCommitListener() {
-    @Override
-    public void aboutToCommit() {
-      removeDocumentListener();
-    }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh listener
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Remove IDocument listeners during commit.
+	 */
+	private final EditorContextCommitListener m_commitListener = new EditorContextCommitListener() {
+		@Override
+		public void aboutToCommit() {
+			removeDocumentListener();
+		}
 
-    @Override
-    public void doneCommit() {
-      addDocumentListener();
-    }
-  };
-  /**
-   * Remember new state after refresh.
-   */
-  private final ObjectEventListener m_refreshListener = new ObjectEventListener() {
-    @Override
-    public void refreshBeforeCreate() throws Exception {
-      removeSelectionListener();
-    }
+		@Override
+		public void doneCommit() {
+			addDocumentListener();
+		}
+	};
+	/**
+	 * Remember new state after refresh.
+	 */
+	private final ObjectEventListener m_refreshListener = new ObjectEventListener() {
+		@Override
+		public void refreshBeforeCreate() throws Exception {
+			removeSelectionListener();
+		}
 
-    @Override
-    public void refreshed2() throws Exception {
-      addSelectionListener();
-      rememberSource();
-      rememberDump();
-      rememberState();
-    }
-  };
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Selection listener
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final ISelectionChangedListener m_selectionListener = new ISelectionChangedListener() {
-    @Override
-    public void selectionChanged(SelectionChangedEvent event) {
-      rememberState();
-    }
-  };
+		@Override
+		public void refreshed2() throws Exception {
+			addSelectionListener();
+			rememberSource();
+			rememberDump();
+			rememberState();
+		}
+	};
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Selection listener
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final ISelectionChangedListener m_selectionListener = new ISelectionChangedListener() {
+		@Override
+		public void selectionChanged(SelectionChangedEvent event) {
+			rememberState();
+		}
+	};
 
-  /**
-   * Adds {@link ISelectionChangedListener}.
-   */
-  private void addSelectionListener() {
-    m_selectionProvider.addSelectionChangedListener(m_selectionListener);
-  }
+	/**
+	 * Adds {@link ISelectionChangedListener}.
+	 */
+	private void addSelectionListener() {
+		m_selectionProvider.addSelectionChangedListener(m_selectionListener);
+	}
 
-  /**
-   * Removes {@link ISelectionChangedListener}
-   */
-  private void removeSelectionListener() {
-    if (m_selectionProvider != null) {
-      m_selectionProvider.removeSelectionChangedListener(m_selectionListener);
-    }
-  }
+	/**
+	 * Removes {@link ISelectionChangedListener}
+	 */
+	private void removeSelectionListener() {
+		if (m_selectionProvider != null) {
+			m_selectionProvider.removeSelectionChangedListener(m_selectionListener);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Informs {@link DesignPage} that buffer was changed and reparse required.
-   */
-  void refreshDesignerEditor() {
-    rememberSource();
-    // refresh viewer
-    removeSelectionListener();
-    if (m_designPage.internal_refreshGEF()) {
-      addSelectionListener();
-      // restore state
-      rememberDump();
-      restoreState();
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Informs {@link DesignPage} that buffer was changed and reparse required.
+	 */
+	void refreshDesignerEditor() {
+		rememberSource();
+		// refresh viewer
+		removeSelectionListener();
+		if (m_designPage.internal_refreshGEF()) {
+			addSelectionListener();
+			// restore state
+			rememberDump();
+			restoreState();
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // State
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Remembers current source.
-   */
-  private void rememberSource() {
-    m_currentSource = m_document.get();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// State
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Remembers current source.
+	 */
+	private void rememberSource() {
+		m_currentSource = m_document.get();
+	}
 
-  /**
-   * Remembers current dump.
-   */
-  private void rememberDump() {
-    m_currentDump = ObjectPathHelper.getObjectsDump(m_rootObject, 0);
-  }
+	/**
+	 * Remembers current dump.
+	 */
+	private void rememberDump() {
+		m_currentDump = ObjectPathHelper.getObjectsDump(m_rootObject, 0);
+	}
 
-  /**
-   * Remembers selected/expanded elements for current source.
-   */
-  private void rememberState() {
-    // selection
-    {
-      // prepare selected objects
-      Object[] selectedObjects;
-      {
-        IStructuredSelection structuredSelection =
-            (IStructuredSelection) m_selectionProvider.getSelection();
-        selectedObjects = structuredSelection.toArray();
-      }
-      // remember
-      int[][] paths = m_objectPathHelper.getObjectsPaths(selectedObjects);
-      //m_sourceToSelection.put(m_currentSource, paths);
-      m_dumpToSelection.put(m_currentDump, paths);
-    }
-    // expanded
-    {
-      Object[] expandedObjects = m_componentsTree.getExpandedElements();
-      int[][] paths = m_objectPathHelper.getObjectsPaths(expandedObjects);
-      m_dumpToExpanded.put(m_currentDump, paths);
-    }
-  }
+	/**
+	 * Remembers selected/expanded elements for current source.
+	 */
+	private void rememberState() {
+		// selection
+		{
+			// prepare selected objects
+			Object[] selectedObjects;
+			{
+				IStructuredSelection structuredSelection =
+						(IStructuredSelection) m_selectionProvider.getSelection();
+				selectedObjects = structuredSelection.toArray();
+			}
+			// remember
+			int[][] paths = m_objectPathHelper.getObjectsPaths(selectedObjects);
+			//m_sourceToSelection.put(m_currentSource, paths);
+			m_dumpToSelection.put(m_currentDump, paths);
+		}
+		// expanded
+		{
+			Object[] expandedObjects = m_componentsTree.getExpandedElements();
+			int[][] paths = m_objectPathHelper.getObjectsPaths(expandedObjects);
+			m_dumpToExpanded.put(m_currentDump, paths);
+		}
+	}
 
-  /**
-   * Tries to restore selected/expanded elements for current source.
-   */
-  private void restoreState() {
-    restoreSelection();
-    restoreExpanded();
-  }
+	/**
+	 * Tries to restore selected/expanded elements for current source.
+	 */
+	private void restoreState() {
+		restoreSelection();
+		restoreExpanded();
+	}
 
-  /**
-   * Tries to restore selected elements for current source.
-   */
-  private void restoreSelection() {
-    // prepare selection
-    int[][] paths = m_dumpToSelection.get(m_currentDump);
-    // do restore
-    if (paths != null) {
-      removeSelectionListener();
-      try {
-        Object[] objects = m_objectPathHelper.getObjectsForPaths(paths);
-        m_selectionProvider.setSelection(new StructuredSelection(objects));
-      } finally {
-        addSelectionListener();
-      }
-    }
-  }
+	/**
+	 * Tries to restore selected elements for current source.
+	 */
+	private void restoreSelection() {
+		// prepare selection
+		int[][] paths = m_dumpToSelection.get(m_currentDump);
+		// do restore
+		if (paths != null) {
+			removeSelectionListener();
+			try {
+				Object[] objects = m_objectPathHelper.getObjectsForPaths(paths);
+				m_selectionProvider.setSelection(new StructuredSelection(objects));
+			} finally {
+				addSelectionListener();
+			}
+		}
+	}
 
-  /**
-   * Tries to restore expanded elements for current dump.
-   */
-  private void restoreExpanded() {
-    int[][] paths = m_dumpToExpanded.get(m_currentDump);
-    // do restore
-    if (paths != null) {
-      Object[] objects = m_objectPathHelper.getObjectsForPaths(paths);
-      m_componentsTree.setExpandedElements(objects);
-    }
-    // if no expanded element, perform default expanding
-    if (m_componentsTree.getExpandedElements().length == 0) {
-      List<Object> expandedElements = Lists.newArrayList();
-      Object element = m_rootObject;
-      while (true) {
-        expandedElements.add(element);
-        Object[] children = m_componentsProvider.getChildren(element);
-        if (children.length != 1) {
-          break;
-        }
-        element = children[0];
-      }
-      m_componentsTree.setExpandedElements(expandedElements.toArray());
-    }
-  }
+	/**
+	 * Tries to restore expanded elements for current dump.
+	 */
+	private void restoreExpanded() {
+		int[][] paths = m_dumpToExpanded.get(m_currentDump);
+		// do restore
+		if (paths != null) {
+			Object[] objects = m_objectPathHelper.getObjectsForPaths(paths);
+			m_componentsTree.setExpandedElements(objects);
+		}
+		// if no expanded element, perform default expanding
+		if (m_componentsTree.getExpandedElements().length == 0) {
+			List<Object> expandedElements = Lists.newArrayList();
+			Object element = m_rootObject;
+			while (true) {
+				expandedElements.add(element);
+				Object[] children = m_componentsProvider.getChildren(element);
+				if (children.length != 1) {
+					break;
+				}
+				element = children[0];
+			}
+			m_componentsTree.setExpandedElements(expandedElements.toArray());
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/XmlDesignComposite.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/XmlDesignComposite.java
index 15d7a36c4..d04a82746 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/XmlDesignComposite.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/XmlDesignComposite.java
@@ -36,127 +36,127 @@
  * @coverage XML.editor
  */
 public class XmlDesignComposite extends DesignComposite {
-  private DesignPageActions m_pageActions;
-  private XmlDesignToolbarHelper m_toolbarHelper;
-  private DesignerPalette m_designerPalette;
-  private XmlObjectInfo m_rootObject;
+	private DesignPageActions m_pageActions;
+	private XmlDesignToolbarHelper m_toolbarHelper;
+	private DesignerPalette m_designerPalette;
+	private XmlObjectInfo m_rootObject;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public XmlDesignComposite(Composite parent,
-      int style,
-      IEditorPart editorPart,
-      ICommandExceptionHandler exceptionHandler) {
-    super(parent, style, editorPart, exceptionHandler);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public XmlDesignComposite(Composite parent,
+			int style,
+			IEditorPart editorPart,
+			ICommandExceptionHandler exceptionHandler) {
+		super(parent, style, editorPart, exceptionHandler);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Creation of UI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createDesignActions() {
-    IEditPartViewer treeViewer = m_componentsComposite.getTreeViewer();
-    m_pageActions = new DesignPageActions(m_editorPart, treeViewer);
-    m_viewer.setContextMenu(new DesignContextMenuProvider(m_viewer, m_pageActions));
-    // install dispose listener
-    addDisposeListener(new DisposeListener() {
-      @Override
-      public void widgetDisposed(DisposeEvent e) {
-        m_pageActions.dispose();
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Creation of UI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createDesignActions() {
+		IEditPartViewer treeViewer = m_componentsComposite.getTreeViewer();
+		m_pageActions = new DesignPageActions(m_editorPart, treeViewer);
+		m_viewer.setContextMenu(new DesignContextMenuProvider(m_viewer, m_pageActions));
+		// install dispose listener
+		addDisposeListener(new DisposeListener() {
+			@Override
+			public void widgetDisposed(DisposeEvent e) {
+				m_pageActions.dispose();
+			}
+		});
+	}
 
-  @Override
-  protected void createDesignToolbarHelper() {
-    m_toolbarHelper = new XmlDesignToolbarHelper(m_toolBar);
-    m_toolbarHelper.initialize(m_pageActions, m_viewer);
-    m_toolbarHelper.fill();
-  }
+	@Override
+	protected void createDesignToolbarHelper() {
+		m_toolbarHelper = new XmlDesignToolbarHelper(m_toolBar);
+		m_toolbarHelper.initialize(m_pageActions, m_viewer);
+		m_toolbarHelper.fill();
+	}
 
-  @Override
-  protected void createPalette(FlyoutControlComposite gefComposite) {
-    m_designerPalette = new DesignerPalette(gefComposite.getFlyoutParent(), SWT.NONE, true);
-  }
+	@Override
+	protected void createPalette(FlyoutControlComposite gefComposite) {
+		m_designerPalette = new DesignerPalette(gefComposite.getFlyoutParent(), SWT.NONE, true);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Life cycle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Notifies that "Design" page was activated.
-   */
-  public void onActivate() {
-    m_pageActions.installActions();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Life cycle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Notifies that "Design" page was activated.
+	 */
+	public void onActivate() {
+		m_pageActions.installActions();
+	}
 
-  /**
-   * Notifies that "Design" page was deactivated.
-   */
-  public void onDeActivate() {
-    m_pageActions.uninstallActions();
-  }
+	/**
+	 * Notifies that "Design" page was deactivated.
+	 */
+	public void onDeActivate() {
+		m_pageActions.uninstallActions();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Design access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void refresh(ObjectInfo rootObject, IProgressMonitor monitor) {
-    m_rootObject = (XmlObjectInfo) rootObject;
-    // refresh viewer's
-    {
-      monitor.subTask(Messages.XmlDesignComposite_statusGef);
-      monitor.worked(1);
-      m_viewer.setInput(m_rootObject);
-      m_viewer.getControl().setDrawCached(false);
-    }
-    {
-      monitor.subTask(Messages.XmlDesignComposite_statusProperties);
-      monitor.worked(1);
-      m_componentsComposite.setInput(m_viewer, m_rootObject);
-    }
-    {
-      long start = System.currentTimeMillis();
-      monitor.subTask(Messages.XmlDesignComposite_statucPalette);
-      monitor.worked(1);
-      {
-        String toolkitId = m_rootObject.getDescription().getToolkit().getId();
-        m_designerPalette.setInput(m_viewer, m_rootObject, toolkitId);
-      }
-      Debug.println("palette: " + (System.currentTimeMillis() - start));
-    }
-    /*{
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Design access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void refresh(ObjectInfo rootObject, IProgressMonitor monitor) {
+		m_rootObject = (XmlObjectInfo) rootObject;
+		// refresh viewer's
+		{
+			monitor.subTask(Messages.XmlDesignComposite_statusGef);
+			monitor.worked(1);
+			m_viewer.setInput(m_rootObject);
+			m_viewer.getControl().setDrawCached(false);
+		}
+		{
+			monitor.subTask(Messages.XmlDesignComposite_statusProperties);
+			monitor.worked(1);
+			m_componentsComposite.setInput(m_viewer, m_rootObject);
+		}
+		{
+			long start = System.currentTimeMillis();
+			monitor.subTask(Messages.XmlDesignComposite_statucPalette);
+			monitor.worked(1);
+			{
+				String toolkitId = m_rootObject.getDescription().getToolkit().getId();
+				m_designerPalette.setInput(m_viewer, m_rootObject, toolkitId);
+			}
+			Debug.println("palette: " + (System.currentTimeMillis() - start));
+		}
+		/*{
     	monitor.subTask("Configuring errors action...");
     	monitor.worked(1);
     	m_pageActions.getErrorsAction().setRoot(m_rootObject);
     }*/
-    // configure helpers
-    m_pageActions.setRoot(m_rootObject);
-    m_toolbarHelper.setRoot(m_rootObject);
-    m_viewersComposite.setRoot(m_rootObject);
-    new SelectSupport(rootObject, m_viewer, m_componentsComposite.getTreeViewer());
-  }
+		// configure helpers
+		m_pageActions.setRoot(m_rootObject);
+		m_toolbarHelper.setRoot(m_rootObject);
+		m_viewersComposite.setRoot(m_rootObject);
+		new SelectSupport(rootObject, m_viewer, m_componentsComposite.getTreeViewer());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Structure/Palette reparenting access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private IExtractableControl m_extractablePalette;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Structure/Palette reparenting access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private IExtractableControl m_extractablePalette;
 
-  @Override
-  public IExtractableControl getExtractablePalette() {
-    if (m_extractablePalette == null) {
-      m_extractablePalette = new ExtractableControl(m_designerPalette.getControl(), this);
-    }
-    return m_extractablePalette;
-  }
+	@Override
+	public IExtractableControl getExtractablePalette() {
+		if (m_extractablePalette == null) {
+			m_extractablePalette = new ExtractableControl(m_designerPalette.getControl(), this);
+		}
+		return m_extractablePalette;
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/XmlDesignPage.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/XmlDesignPage.java
index 9bc977578..b3352cc80 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/XmlDesignPage.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/XmlDesignPage.java
@@ -62,479 +62,479 @@
  * @coverage XML.editor
  */
 public abstract class XmlDesignPage extends XmlEditorPage {
-  protected IFile m_file;
-  protected IDocument m_document;
-  protected Composite m_composite;
-  private PageBook m_pageBook;
-  private XmlDesignComposite m_designComposite;
-  private final Map<Class<?>, Composite> m_errorCompositesMap = Maps.newHashMap();
-  private UndoManager m_undoManager;
-  protected XmlObjectInfo m_rootObject;
-  private DesignerState m_designerState = DesignerState.Undefined;
-  private boolean m_forceDocumentListener;
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Life cycle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final IPartListener m_partListener = new PartListenerAdapter() {
-    @Override
-    public void partActivated(IWorkbenchPart part) {
-      if (part == m_editor) {
-        ExecutionUtils.runAsync(new RunnableEx() {
-          @Override
-          public void run() throws Exception {
-            GlobalStateXml.activate(m_rootObject);
-            if (m_active) {
-              checkDependenciesOnDesignPageActivation();
-            }
-          }
-        });
-      }
-    }
-  };
-
-  @Override
-  public void initialize(AbstractXmlEditor editor) {
-    super.initialize(editor);
-    m_file = ((IFileEditorInput) editor.getEditorInput()).getFile();
-    m_document = editor.getDocument();
-    m_undoManager = new UndoManager(this, m_document);
-    m_editor.getEditorSite().getPage().addPartListener(m_partListener);
-  }
-
-  @Override
-  public void dispose() {
-    super.dispose();
-    m_undoManager.deactivate();
-    m_editor.getEditorSite().getPage().removePartListener(m_partListener);
-    disposeAll(true);
-  }
-
-  /**
-   * Disposes design and model.
-   */
-  private void disposeAll(final boolean force) {
-    // dispose design
-    if (!m_composite.isDisposed()) {
-      dispose_beforePresentation();
-      m_designComposite.disposeDesign();
-    }
-    // dispose model
-    if (m_rootObject != null) {
-      ExecutionUtils.runLog(new RunnableEx() {
-        @Override
-        public void run() throws Exception {
-          m_rootObject.refresh_dispose();
-          m_rootObject.getBroadcastObject().dispose();
-          disposeContext(force);
-          GlobalStateXml.deactivate(m_rootObject);
-        }
-      });
-      m_rootObject = null;
-    }
-  }
-
-  /**
-   * Sends notification that presentation will be disposed.
-   */
-  private void dispose_beforePresentation() {
-    if (m_rootObject != null) {
-      ExecutionUtils.runLog(new RunnableEx() {
-        @Override
-        public void run() throws Exception {
-          m_rootObject.getBroadcastObject().dispose_beforePresentation();
-        }
-      });
-    }
-  }
-
-  /**
-   * Disposes {@link EditorContext} of current hierarchy.
-   * <p>
-   * It is not guarantied that hierarchy exists, may be parsing was failed.
-   *
-   * @param force
-   *          is <code>true</code> if user closes editor or explicitly requests re-parsing.
-   */
-  protected void disposeContext(boolean force) {
-    if (m_rootObject != null) {
-      ExecutionUtils.runLog(new RunnableEx() {
-        @Override
-        public void run() throws Exception {
-          m_rootObject.getContext().dispose();
-        }
-      });
-    }
-  }
-
-  @Override
-  public void setActive(boolean active) {
-    super.setActive(active);
-    if (active) {
-      m_undoManager.activate();
-      m_designComposite.onActivate();
-      checkDependenciesOnDesignPageActivation();
-    } else {
-      if (!m_forceDocumentListener) {
-        m_undoManager.deactivate();
-      }
-      m_designComposite.onDeActivate();
-    }
-  }
-
-  /**
-   * This editor and its "Design" page are activated. Check if some external dependencies are
-   * changed so that reparse or refresh should be performed.
-   */
-  private void checkDependenciesOnDesignPageActivation() {
-    if (m_rootObject != null) {
-      ExecutionUtils.runLog(new RunnableEx() {
-        @Override
-        public void run() throws Exception {
-          EditorActivatedRequest request = new EditorActivatedRequest();
-          m_rootObject.getBroadcast(EditorActivatedListener.class).invoke(request);
-          if (request.isReparseRequested()) {
-            refreshGEF();
-          } else if (request.isRefreshRequested()) {
-            m_rootObject.refresh();
-          }
-        }
-      });
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the internal {@link DesignComposite}.
-   */
-  public final DesignComposite getDesignComposite() {
-    return m_designComposite;
-  }
-
-  /**
-   * @return the current {@link DesignerState} of editor.
-   */
-  public DesignerState getDesignerState() {
-    return m_designerState;
-  }
-
-  /**
-   * @return the {@link UndoManager} of this editor.
-   */
-  public UndoManager getUndoManager() {
-    return m_undoManager;
-  }
-
-  /**
-   * Ensure that page always listens for {@link IDocument} changes, even if it is not active. We
-   * need this for "split mode", when updates on "Source" page should cause delayed UI refresh.
-   */
-  public void forceDocumentListener() {
-    m_forceDocumentListener = true;
-  }
-
-  /**
-   * Sets {@link IRefreshStrategy} to respond to {@link IDocument} changes.
-   */
-  public void setRefreshStrategy(IRefreshStrategy refreshStrategy) {
-    m_undoManager.setRefreshStrategy(refreshStrategy);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Control
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Control createControl(Composite parent) {
-    m_composite = new Composite(parent, SWT.NONE);
-    m_composite.setLayout(new FillLayout());
-    // page book
-    m_pageBook = new PageBook(m_composite, SWT.NONE);
-    // design composite
-    ICommandExceptionHandler exceptionHandler = new ICommandExceptionHandler() {
-      @Override
-      public void handleException(Throwable exception) {
-        handleDesignException(exception);
-      }
-    };
-    m_designComposite = createDesignComposite(m_pageBook, exceptionHandler);
-    // show "design" initially
-    m_pageBook.showPage(m_designComposite);
-    return m_composite;
-  }
-
-  /**
-   * @return the toolkit specific {@link XmlDesignComposite} instance.
-   */
-  protected XmlDesignComposite createDesignComposite(Composite parent,
-      ICommandExceptionHandler exceptionHandler) {
-    return new XmlDesignComposite(parent, SWT.NONE, m_editor, exceptionHandler);
-  }
-
-  @Override
-  public Control getControl() {
-    return m_composite;
-  }
-
-  /**
-   * Creates and caches the composites for displaying some error/warning messages.
-   */
-  @SuppressWarnings("unchecked")
-  private <T extends Composite> T getErrorComposite(Class<T> compositeClass) throws Exception {
-    T composite = (T) m_errorCompositesMap.get(compositeClass);
-    if (composite == null) {
-      Constructor<T> constructor = compositeClass.getConstructor(Composite.class, int.class);
-      composite = constructor.newInstance(m_pageBook, SWT.NONE);
-      m_errorCompositesMap.put(compositeClass, composite);
-    }
-    return composite;
-  }
-
-  /**
-   * Handles any exception happened on "Design" page, such as exceptions in GEF commands, property
-   * table, components tree.
-   */
-  private void handleDesignException(Throwable e) {
-    // at first, try to make post-mortem screenshot
-    Image screenshot;
-    try {
-      screenshot = DesignerExceptionUtils.makeScreenshot();
-    } catch (Throwable ex) {
-      screenshot = null;
-    }
-    // dispose current state to prevent any further exceptions
-    disposeAll(true);
-    // show exception
-    if (EnvironmentUtils.isTestingTime()) {
-      e.printStackTrace();
-    }
-    showExceptionOnDesignPane(e, screenshot);
-  }
-
-  /**
-   * Makes this page disabled (during refresh) and again enabled.
-   */
-  private void setEnabled(boolean enabled) {
-    m_composite.setRedraw(enabled);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getName() {
-    return Messages.XmlDesignPage_name;
-  }
-
-  @Override
-  public Image getImage() {
-    return Activator.getImage("editor_page_design.png");
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Render
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if parsing operation is slow, so should be performed with progress.
-   */
-  protected boolean shouldShowProgress() {
-    return false;
-  }
-
-  /**
-   * Performs toolkit specific parsing.
-   */
-  protected abstract XmlObjectInfo parse() throws Exception;
-
-  /**
-   * Disposes context and {@link #updateGEF()}.
-   */
-  public void refreshGEF() {
-    disposeContext(true);
-    updateGEF();
-  }
-
-  /**
-   * Parses XML and displays it in GEF.
-   */
-  void updateGEF() {
-    m_undoManager.refreshDesignerEditor();
-  }
-
-  /**
-   * Parses {@link ICompilationUnit} and displays it in GEF.
-   *
-   * @return <code>true</code> if parsing was successful.
-   */
-  boolean internal_refreshGEF() {
-    // XXX
-    // if "split mode", then try to parse, but expect that if may fail
-    if (m_forceDocumentListener) {
-      m_designComposite.setEnabled(false);
-      try {
-        parse();
-      } catch (Throwable e) {
-        return false;
-      }
-      m_designComposite.setEnabled(true);
-    }
-    // OK, do real parsing
-    setEnabled(false);
-    try {
-      m_designerState = DesignerState.Parsing;
-      disposeAll(false);
-      // do parse
-      if (shouldShowProgress()) {
-        internal_refreshGEF_withProgress();
-      } else {
-        internal_refreshGEF(new NullProgressMonitor());
-      }
-      // success, show Design
-      m_pageBook.showPage(m_designComposite);
-      m_designerState = DesignerState.Successful;
-      return true;
-    } catch (Throwable e) {
-      // show exception in editor
-      showExceptionOnDesignPane(e, null);
-      // failure
-      return false;
-    } finally {
-      setEnabled(true);
-    }
-  }
-
-  private void internal_refreshGEF_withProgress() throws Exception {
-    final Display display = Display.getCurrent();
-    IRunnableWithProgress runnable = new IRunnableWithProgress() {
-      @Override
-      public void run(final IProgressMonitor monitor) {
-        monitor.beginTask(Messages.XmlDesignPage_progressTitle, 6);
-        //
-        try {
-          DesignPageSite.setProgressMonitor(monitor);
-          display.syncExec(new Runnable() {
-            @Override
-            public void run() {
-              try {
-                internal_refreshGEF(monitor);
-              } catch (Throwable e) {
-                ReflectionUtils.propagate(e);
-              }
-            }
-          });
-        } catch (Throwable e) {
-          ReflectionUtils.propagate(e);
-        } finally {
-          DesignPageSite.setProgressMonitor(null);
-        }
-        // done progress monitor
-        monitor.subTask(null);
-        ExecutionUtils.waitEventLoop(100);
-        monitor.done();
-      }
-    };
-    try {
-      new ProgressMonitorDialog(DesignerPlugin.getShell()).run(false, false, runnable);
-    } catch (InvocationTargetException e) {
-      ReflectionUtils.propagate(e.getCause());
-    } catch (Throwable e) {
-      ReflectionUtils.propagate(e);
-    }
-  }
-
-  private void internal_refreshGEF(IProgressMonitor monitor) throws Exception {
-    monitor.subTask(Messages.XmlDesignPage_progressInitialing);
-    monitor.worked(1);
-    // do parse
-    {
-      long start = System.currentTimeMillis();
-      monitor.subTask(Messages.XmlDesignPage_progressParsing);
-      Debug.print("Parsing...");
-      m_rootObject = parse();
-      monitor.worked(1);
-      Debug.println("done: " + (System.currentTimeMillis() - start));
-    }
-    // refresh model (create GUI)
-    {
-      long start = System.currentTimeMillis();
-      monitor.subTask(Messages.XmlDesignPage_progressRefreshing);
-      m_rootObject.refresh();
-      monitor.worked(1);
-      Debug.println("refresh: " + (System.currentTimeMillis() - start));
-    }
-    // site
-    installDesignPageSite();
-    // refresh design
-    m_designComposite.refresh(m_rootObject, monitor);
-    // configure helpers
-    m_undoManager.setRoot(m_rootObject);
-  }
-
-  private void installDesignPageSite() {
-    IDesignPageSite designPageSite = new DesignPageSite() {
-      @Override
-      public void showSourcePosition(int position) {
-        m_editor.showSourcePosition(position);
-      }
-
-      @Override
-      public void openSourcePosition(int position) {
-        m_editor.showSourcePosition(position);
-        m_editor.showSource();
-      }
-
-      @Override
-      public void handleException(Throwable e) {
-        handleDesignException(e);
-      }
-
-      @Override
-      public void reparse() {
-        refreshGEF();
-      }
-    };
-    DesignPageSite.Helper.setSite(m_rootObject, designPageSite);
-  }
-
-  /**
-   * Displays the error information on Design Pane.
-   *
-   * @param e
-   *          the {@link Throwable} to display.
-   * @param screenshot
-   *          the {@link Image} of entire shell just before error. Can be <code>null</code> in case
-   *          of parse error when no screenshot needed.
-   *
-   */
-  private void showExceptionOnDesignPane(Throwable e, Image screenshot) {
-    m_designerState = DesignerState.Error;
-    // dispose context, because it may be already allocated some resources before parsing failed
-    disposeContext(true);
-    // show Throwable
-    try {
-      e = DesignerExceptionUtils.rewriteException(e);
-      if (DesignerExceptionUtils.isWarning(e)) {
-        XmlWarningComposite composite = getErrorComposite(XmlWarningComposite.class);
-        composite.setException(e);
-        m_pageBook.showPage(composite);
-      } else {
-        DesignerPlugin.log(e);
-        XmlExceptionComposite composite = getErrorComposite(XmlExceptionComposite.class);
-        composite.setException(e, screenshot, m_file, m_document);
-        m_pageBook.showPage(composite);
-      }
-    } catch (Throwable ex) {
-      // ignore, prevent error while showing the error
-    }
-  }
+	protected IFile m_file;
+	protected IDocument m_document;
+	protected Composite m_composite;
+	private PageBook m_pageBook;
+	private XmlDesignComposite m_designComposite;
+	private final Map<Class<?>, Composite> m_errorCompositesMap = Maps.newHashMap();
+	private UndoManager m_undoManager;
+	protected XmlObjectInfo m_rootObject;
+	private DesignerState m_designerState = DesignerState.Undefined;
+	private boolean m_forceDocumentListener;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Life cycle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final IPartListener m_partListener = new PartListenerAdapter() {
+		@Override
+		public void partActivated(IWorkbenchPart part) {
+			if (part == m_editor) {
+				ExecutionUtils.runAsync(new RunnableEx() {
+					@Override
+					public void run() throws Exception {
+						GlobalStateXml.activate(m_rootObject);
+						if (m_active) {
+							checkDependenciesOnDesignPageActivation();
+						}
+					}
+				});
+			}
+		}
+	};
+
+	@Override
+	public void initialize(AbstractXmlEditor editor) {
+		super.initialize(editor);
+		m_file = ((IFileEditorInput) editor.getEditorInput()).getFile();
+		m_document = editor.getDocument();
+		m_undoManager = new UndoManager(this, m_document);
+		m_editor.getEditorSite().getPage().addPartListener(m_partListener);
+	}
+
+	@Override
+	public void dispose() {
+		super.dispose();
+		m_undoManager.deactivate();
+		m_editor.getEditorSite().getPage().removePartListener(m_partListener);
+		disposeAll(true);
+	}
+
+	/**
+	 * Disposes design and model.
+	 */
+	private void disposeAll(final boolean force) {
+		// dispose design
+		if (!m_composite.isDisposed()) {
+			dispose_beforePresentation();
+			m_designComposite.disposeDesign();
+		}
+		// dispose model
+		if (m_rootObject != null) {
+			ExecutionUtils.runLog(new RunnableEx() {
+				@Override
+				public void run() throws Exception {
+					m_rootObject.refresh_dispose();
+					m_rootObject.getBroadcastObject().dispose();
+					disposeContext(force);
+					GlobalStateXml.deactivate(m_rootObject);
+				}
+			});
+			m_rootObject = null;
+		}
+	}
+
+	/**
+	 * Sends notification that presentation will be disposed.
+	 */
+	private void dispose_beforePresentation() {
+		if (m_rootObject != null) {
+			ExecutionUtils.runLog(new RunnableEx() {
+				@Override
+				public void run() throws Exception {
+					m_rootObject.getBroadcastObject().dispose_beforePresentation();
+				}
+			});
+		}
+	}
+
+	/**
+	 * Disposes {@link EditorContext} of current hierarchy.
+	 * <p>
+	 * It is not guarantied that hierarchy exists, may be parsing was failed.
+	 *
+	 * @param force
+	 *          is <code>true</code> if user closes editor or explicitly requests re-parsing.
+	 */
+	protected void disposeContext(boolean force) {
+		if (m_rootObject != null) {
+			ExecutionUtils.runLog(new RunnableEx() {
+				@Override
+				public void run() throws Exception {
+					m_rootObject.getContext().dispose();
+				}
+			});
+		}
+	}
+
+	@Override
+	public void setActive(boolean active) {
+		super.setActive(active);
+		if (active) {
+			m_undoManager.activate();
+			m_designComposite.onActivate();
+			checkDependenciesOnDesignPageActivation();
+		} else {
+			if (!m_forceDocumentListener) {
+				m_undoManager.deactivate();
+			}
+			m_designComposite.onDeActivate();
+		}
+	}
+
+	/**
+	 * This editor and its "Design" page are activated. Check if some external dependencies are
+	 * changed so that reparse or refresh should be performed.
+	 */
+	private void checkDependenciesOnDesignPageActivation() {
+		if (m_rootObject != null) {
+			ExecutionUtils.runLog(new RunnableEx() {
+				@Override
+				public void run() throws Exception {
+					EditorActivatedRequest request = new EditorActivatedRequest();
+					m_rootObject.getBroadcast(EditorActivatedListener.class).invoke(request);
+					if (request.isReparseRequested()) {
+						refreshGEF();
+					} else if (request.isRefreshRequested()) {
+						m_rootObject.refresh();
+					}
+				}
+			});
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the internal {@link DesignComposite}.
+	 */
+	public final DesignComposite getDesignComposite() {
+		return m_designComposite;
+	}
+
+	/**
+	 * @return the current {@link DesignerState} of editor.
+	 */
+	public DesignerState getDesignerState() {
+		return m_designerState;
+	}
+
+	/**
+	 * @return the {@link UndoManager} of this editor.
+	 */
+	public UndoManager getUndoManager() {
+		return m_undoManager;
+	}
+
+	/**
+	 * Ensure that page always listens for {@link IDocument} changes, even if it is not active. We
+	 * need this for "split mode", when updates on "Source" page should cause delayed UI refresh.
+	 */
+	public void forceDocumentListener() {
+		m_forceDocumentListener = true;
+	}
+
+	/**
+	 * Sets {@link IRefreshStrategy} to respond to {@link IDocument} changes.
+	 */
+	public void setRefreshStrategy(IRefreshStrategy refreshStrategy) {
+		m_undoManager.setRefreshStrategy(refreshStrategy);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Control
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Control createControl(Composite parent) {
+		m_composite = new Composite(parent, SWT.NONE);
+		m_composite.setLayout(new FillLayout());
+		// page book
+		m_pageBook = new PageBook(m_composite, SWT.NONE);
+		// design composite
+		ICommandExceptionHandler exceptionHandler = new ICommandExceptionHandler() {
+			@Override
+			public void handleException(Throwable exception) {
+				handleDesignException(exception);
+			}
+		};
+		m_designComposite = createDesignComposite(m_pageBook, exceptionHandler);
+		// show "design" initially
+		m_pageBook.showPage(m_designComposite);
+		return m_composite;
+	}
+
+	/**
+	 * @return the toolkit specific {@link XmlDesignComposite} instance.
+	 */
+	protected XmlDesignComposite createDesignComposite(Composite parent,
+			ICommandExceptionHandler exceptionHandler) {
+		return new XmlDesignComposite(parent, SWT.NONE, m_editor, exceptionHandler);
+	}
+
+	@Override
+	public Control getControl() {
+		return m_composite;
+	}
+
+	/**
+	 * Creates and caches the composites for displaying some error/warning messages.
+	 */
+	@SuppressWarnings("unchecked")
+	private <T extends Composite> T getErrorComposite(Class<T> compositeClass) throws Exception {
+		T composite = (T) m_errorCompositesMap.get(compositeClass);
+		if (composite == null) {
+			Constructor<T> constructor = compositeClass.getConstructor(Composite.class, int.class);
+			composite = constructor.newInstance(m_pageBook, SWT.NONE);
+			m_errorCompositesMap.put(compositeClass, composite);
+		}
+		return composite;
+	}
+
+	/**
+	 * Handles any exception happened on "Design" page, such as exceptions in GEF commands, property
+	 * table, components tree.
+	 */
+	private void handleDesignException(Throwable e) {
+		// at first, try to make post-mortem screenshot
+		Image screenshot;
+		try {
+			screenshot = DesignerExceptionUtils.makeScreenshot();
+		} catch (Throwable ex) {
+			screenshot = null;
+		}
+		// dispose current state to prevent any further exceptions
+		disposeAll(true);
+		// show exception
+		if (EnvironmentUtils.isTestingTime()) {
+			e.printStackTrace();
+		}
+		showExceptionOnDesignPane(e, screenshot);
+	}
+
+	/**
+	 * Makes this page disabled (during refresh) and again enabled.
+	 */
+	private void setEnabled(boolean enabled) {
+		m_composite.setRedraw(enabled);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getName() {
+		return Messages.XmlDesignPage_name;
+	}
+
+	@Override
+	public Image getImage() {
+		return Activator.getImage("editor_page_design.png");
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Render
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if parsing operation is slow, so should be performed with progress.
+	 */
+	protected boolean shouldShowProgress() {
+		return false;
+	}
+
+	/**
+	 * Performs toolkit specific parsing.
+	 */
+	protected abstract XmlObjectInfo parse() throws Exception;
+
+	/**
+	 * Disposes context and {@link #updateGEF()}.
+	 */
+	public void refreshGEF() {
+		disposeContext(true);
+		updateGEF();
+	}
+
+	/**
+	 * Parses XML and displays it in GEF.
+	 */
+	void updateGEF() {
+		m_undoManager.refreshDesignerEditor();
+	}
+
+	/**
+	 * Parses {@link ICompilationUnit} and displays it in GEF.
+	 *
+	 * @return <code>true</code> if parsing was successful.
+	 */
+	boolean internal_refreshGEF() {
+		// XXX
+		// if "split mode", then try to parse, but expect that if may fail
+		if (m_forceDocumentListener) {
+			m_designComposite.setEnabled(false);
+			try {
+				parse();
+			} catch (Throwable e) {
+				return false;
+			}
+			m_designComposite.setEnabled(true);
+		}
+		// OK, do real parsing
+		setEnabled(false);
+		try {
+			m_designerState = DesignerState.Parsing;
+			disposeAll(false);
+			// do parse
+			if (shouldShowProgress()) {
+				internal_refreshGEF_withProgress();
+			} else {
+				internal_refreshGEF(new NullProgressMonitor());
+			}
+			// success, show Design
+			m_pageBook.showPage(m_designComposite);
+			m_designerState = DesignerState.Successful;
+			return true;
+		} catch (Throwable e) {
+			// show exception in editor
+			showExceptionOnDesignPane(e, null);
+			// failure
+			return false;
+		} finally {
+			setEnabled(true);
+		}
+	}
+
+	private void internal_refreshGEF_withProgress() throws Exception {
+		final Display display = Display.getCurrent();
+		IRunnableWithProgress runnable = new IRunnableWithProgress() {
+			@Override
+			public void run(final IProgressMonitor monitor) {
+				monitor.beginTask(Messages.XmlDesignPage_progressTitle, 6);
+				//
+				try {
+					DesignPageSite.setProgressMonitor(monitor);
+					display.syncExec(new Runnable() {
+						@Override
+						public void run() {
+							try {
+								internal_refreshGEF(monitor);
+							} catch (Throwable e) {
+								ReflectionUtils.propagate(e);
+							}
+						}
+					});
+				} catch (Throwable e) {
+					ReflectionUtils.propagate(e);
+				} finally {
+					DesignPageSite.setProgressMonitor(null);
+				}
+				// done progress monitor
+				monitor.subTask(null);
+				ExecutionUtils.waitEventLoop(100);
+				monitor.done();
+			}
+		};
+		try {
+			new ProgressMonitorDialog(DesignerPlugin.getShell()).run(false, false, runnable);
+		} catch (InvocationTargetException e) {
+			ReflectionUtils.propagate(e.getCause());
+		} catch (Throwable e) {
+			ReflectionUtils.propagate(e);
+		}
+	}
+
+	private void internal_refreshGEF(IProgressMonitor monitor) throws Exception {
+		monitor.subTask(Messages.XmlDesignPage_progressInitialing);
+		monitor.worked(1);
+		// do parse
+		{
+			long start = System.currentTimeMillis();
+			monitor.subTask(Messages.XmlDesignPage_progressParsing);
+			Debug.print("Parsing...");
+			m_rootObject = parse();
+			monitor.worked(1);
+			Debug.println("done: " + (System.currentTimeMillis() - start));
+		}
+		// refresh model (create GUI)
+		{
+			long start = System.currentTimeMillis();
+			monitor.subTask(Messages.XmlDesignPage_progressRefreshing);
+			m_rootObject.refresh();
+			monitor.worked(1);
+			Debug.println("refresh: " + (System.currentTimeMillis() - start));
+		}
+		// site
+		installDesignPageSite();
+		// refresh design
+		m_designComposite.refresh(m_rootObject, monitor);
+		// configure helpers
+		m_undoManager.setRoot(m_rootObject);
+	}
+
+	private void installDesignPageSite() {
+		IDesignPageSite designPageSite = new DesignPageSite() {
+			@Override
+			public void showSourcePosition(int position) {
+				m_editor.showSourcePosition(position);
+			}
+
+			@Override
+			public void openSourcePosition(int position) {
+				m_editor.showSourcePosition(position);
+				m_editor.showSource();
+			}
+
+			@Override
+			public void handleException(Throwable e) {
+				handleDesignException(e);
+			}
+
+			@Override
+			public void reparse() {
+				refreshGEF();
+			}
+		};
+		DesignPageSite.Helper.setSite(m_rootObject, designPageSite);
+	}
+
+	/**
+	 * Displays the error information on Design Pane.
+	 *
+	 * @param e
+	 *          the {@link Throwable} to display.
+	 * @param screenshot
+	 *          the {@link Image} of entire shell just before error. Can be <code>null</code> in case
+	 *          of parse error when no screenshot needed.
+	 *
+	 */
+	private void showExceptionOnDesignPane(Throwable e, Image screenshot) {
+		m_designerState = DesignerState.Error;
+		// dispose context, because it may be already allocated some resources before parsing failed
+		disposeContext(true);
+		// show Throwable
+		try {
+			e = DesignerExceptionUtils.rewriteException(e);
+			if (DesignerExceptionUtils.isWarning(e)) {
+				XmlWarningComposite composite = getErrorComposite(XmlWarningComposite.class);
+				composite.setException(e);
+				m_pageBook.showPage(composite);
+			} else {
+				DesignerPlugin.log(e);
+				XmlExceptionComposite composite = getErrorComposite(XmlExceptionComposite.class);
+				composite.setException(e, screenshot, m_file, m_document);
+				m_pageBook.showPage(composite);
+			}
+		} catch (Throwable ex) {
+			// ignore, prevent error while showing the error
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/XmlDesignToolbarHelper.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/XmlDesignToolbarHelper.java
index fcd9c8dc6..df693e9ca 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/XmlDesignToolbarHelper.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/XmlDesignToolbarHelper.java
@@ -26,61 +26,61 @@
  * @coverage XML.editor
  */
 public final class XmlDesignToolbarHelper extends DesignToolbarHelper {
-  private DesignPageActions m_pageActions;
+	private DesignPageActions m_pageActions;
 
-  //private ExternalizeStringsContributionItem m_externalizeItem;
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public XmlDesignToolbarHelper(ToolBar toolBar) {
-    super(toolBar);
-  }
+	//private ExternalizeStringsContributionItem m_externalizeItem;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public XmlDesignToolbarHelper(ToolBar toolBar) {
+		super(toolBar);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Initializes with {@link DesignPageActions} and {@link IEditPartViewer}.
-   */
-  public void initialize(DesignPageActions pageActions, IEditPartViewer viewer) {
-    super.initialize(viewer);
-    m_pageActions = pageActions;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Initializes with {@link DesignPageActions} and {@link IEditPartViewer}.
+	 */
+	public void initialize(DesignPageActions pageActions, IEditPartViewer viewer) {
+		super.initialize(viewer);
+		m_pageActions = pageActions;
+	}
 
-  /**
-   * Fills {@link ToolBar} with actions.
-   */
-  @Override
-  public void fill() {
-    /*{
+	/**
+	 * Fills {@link ToolBar} with actions.
+	 */
+	@Override
+	public void fill() {
+		/*{
     	m_toolBarManager.add(m_pageActions.getErrorsAction());
     	m_toolBarManager.add(new Separator());
     }*/
-    {
-      m_toolBarManager.add(m_pageActions.getTestAction());
-      m_toolBarManager.add(m_pageActions.getRefreshAction());
-      m_toolBarManager.add(new Separator());
-    }
-    super.fill();
-    {
-      m_toolBarManager.add(m_pageActions.getAssistantAction());
-      m_toolBarManager.add(new Separator());
-    }
-    /*{
+		{
+			m_toolBarManager.add(m_pageActions.getTestAction());
+			m_toolBarManager.add(m_pageActions.getRefreshAction());
+			m_toolBarManager.add(new Separator());
+		}
+		super.fill();
+		{
+			m_toolBarManager.add(m_pageActions.getAssistantAction());
+			m_toolBarManager.add(new Separator());
+		}
+		/*{
     	m_externalizeItem = new ExternalizeStringsContributionItem();
     	m_toolBarManager.add(m_externalizeItem);
     }*/
-    super.fill2();
-  }
+		super.fill2();
+	}
 
-  @Override
-  public void setRoot(ObjectInfo rootObject) {
-    super.setRoot(rootObject);
-    //m_externalizeItem.setRoot((JavaInfo) rootObject);
-    m_toolBarManager.getControl().getParent().layout();
-  }
+	@Override
+	public void setRoot(ObjectInfo rootObject) {
+		super.setRoot(rootObject);
+		//m_externalizeItem.setRoot((JavaInfo) rootObject);
+		m_toolBarManager.getControl().getParent().layout();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/XmlEditorPage.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/XmlEditorPage.java
index 511ed14d6..4560b5cd5 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/XmlEditorPage.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/XmlEditorPage.java
@@ -17,42 +17,42 @@
  * @coverage XML.editor
  */
 public abstract class XmlEditorPage implements IXmlEditorPage {
-  protected AbstractXmlEditor m_editor;
-  protected boolean m_active;
+	protected AbstractXmlEditor m_editor;
+	protected boolean m_active;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Life cycle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void initialize(AbstractXmlEditor editor) {
-    m_editor = editor;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Life cycle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void initialize(AbstractXmlEditor editor) {
+		m_editor = editor;
+	}
 
-  @Override
-  public void dispose() {
-  }
+	@Override
+	public void dispose() {
+	}
 
-  @Override
-  public void setActive(boolean active) {
-    m_active = active;
-  }
+	@Override
+	public void setActive(boolean active) {
+		m_active = active;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Page
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private int m_pageIndex;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Page
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private int m_pageIndex;
 
-  @Override
-  public int getPageIndex() {
-    return m_pageIndex;
-  }
+	@Override
+	public int getPageIndex() {
+		return m_pageIndex;
+	}
 
-  @Override
-  public void setPageIndex(int index) {
-    m_pageIndex = index;
-  }
+	@Override
+	public void setPageIndex(int index) {
+		m_pageIndex = index;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/XmlExceptionComposite.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/XmlExceptionComposite.java
index 073c74ddc..b406a91e7 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/XmlExceptionComposite.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/XmlExceptionComposite.java
@@ -30,80 +30,80 @@
  * @coverage XML.editor
  */
 public final class XmlExceptionComposite extends ExceptionComposite {
-  private IFile m_file;
-  private IDocument m_document;
+	private IFile m_file;
+	private IDocument m_document;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public XmlExceptionComposite(Composite parent, int style) {
-    super(parent, style);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public XmlExceptionComposite(Composite parent, int style) {
+		super(parent, style);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ExceptionComposite
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected ZipFileErrorReport getZipFileErrorReport() {
-    IProject project = m_file.getProject();
-    return new ZipFileErrorReport(getScreenshotImage(), project, getSourceFileReport(
-        m_file,
-        m_document));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ExceptionComposite
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected ZipFileErrorReport getZipFileErrorReport() {
+		IProject project = m_file.getProject();
+		return new ZipFileErrorReport(getScreenshotImage(), project, getSourceFileReport(
+				m_file,
+				m_document));
+	}
 
-  @Override
-  protected void doShowSource(int sourcePosition) {
-    SwitchAction.showSource(sourcePosition);
-  }
+	@Override
+	protected void doShowSource(int sourcePosition) {
+		SwitchAction.showSource(sourcePosition);
+	}
 
-  @Override
-  protected void doRefresh() {
-    new RefreshAction().run();
-  }
+	@Override
+	protected void doRefresh() {
+		new RefreshAction().run();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Error Report related.
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the report info containing actual source of editing XML.
-   */
-  private static IReportEntry getSourceFileReport(IFile file, IDocument document) {
-    try {
-      return new StringFileReportEntry(file.getName(), document.get());
-    } catch (Throwable e) {
-      // ignore, just send nothing
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Error Report related.
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the report info containing actual source of editing XML.
+	 */
+	private static IReportEntry getSourceFileReport(IFile file, IDocument document) {
+		try {
+			return new StringFileReportEntry(file.getName(), document.get());
+		} catch (Throwable e) {
+			// ignore, just send nothing
+		}
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets the {@link Throwable} to display with additional information which may be included into
-   * problem report.
-   *
-   * @param e
-   *          the {@link Throwable} to display.
-   * @param screenshot
-   *          the {@link Image} of entire shell just before error. Can be <code>null</code> in case
-   *          of parse error when no screenshot needed.
-   * @param file
-   *          the IFile instance of editing document.
-   * @param document
-   *          the currently editing document, may be modified.
-   */
-  public void setException(Throwable e, Image screenshot, IFile file, IDocument document) {
-    m_file = file;
-    m_document = document;
-    setException0(e, screenshot);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets the {@link Throwable} to display with additional information which may be included into
+	 * problem report.
+	 *
+	 * @param e
+	 *          the {@link Throwable} to display.
+	 * @param screenshot
+	 *          the {@link Image} of entire shell just before error. Can be <code>null</code> in case
+	 *          of parse error when no screenshot needed.
+	 * @param file
+	 *          the IFile instance of editing document.
+	 * @param document
+	 *          the currently editing document, may be modified.
+	 */
+	public void setException(Throwable e, Image screenshot, IFile file, IDocument document) {
+		m_file = file;
+		m_document = document;
+		setException0(e, screenshot);
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/XmlPropertiesToolBarContributor.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/XmlPropertiesToolBarContributor.java
index 07a6a473f..9b933dddb 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/XmlPropertiesToolBarContributor.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/XmlPropertiesToolBarContributor.java
@@ -20,42 +20,42 @@
  * @coverage XML.editor
  */
 public final class XmlPropertiesToolBarContributor implements IPropertiesToolBarContributor {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final IPropertiesToolBarContributor INSTANCE =
-      new XmlPropertiesToolBarContributor();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final IPropertiesToolBarContributor INSTANCE =
+			new XmlPropertiesToolBarContributor();
 
-  private XmlPropertiesToolBarContributor() {
-  }
+	private XmlPropertiesToolBarContributor() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IPropertiesToolBarContributor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void contributeToolBar(IToolBarManager manager, final List<ObjectInfo> objects)
-      throws Exception {
-    addGotoDefinitionAction(manager, objects);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IPropertiesToolBarContributor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void contributeToolBar(IToolBarManager manager, final List<ObjectInfo> objects)
+			throws Exception {
+		addGotoDefinitionAction(manager, objects);
+	}
 
-  private void addGotoDefinitionAction(IToolBarManager manager, List<ObjectInfo> objects) {
-    if (objects.size() == 1 && objects.get(0) instanceof XmlObjectInfo) {
-      final XmlObjectInfo javaInfo = (XmlObjectInfo) objects.get(0);
-      IAction gotoDefinitionAction = new Action() {
-        @Override
-        public void run() {
-          int position = javaInfo.getElement().getOffset();
-          IDesignPageSite site = IDesignPageSite.Helper.getSite(javaInfo);
-          site.openSourcePosition(position);
-        }
-      };
-      gotoDefinitionAction.setImageDescriptor(DesignerPlugin.getImageDescriptor("structure/goto_definition.gif"));
-      gotoDefinitionAction.setToolTipText(Messages.ComponentsPropertiesPage_goDefinition);
-      manager.appendToGroup(GROUP_EDIT, gotoDefinitionAction);
-    }
-  }
+	private void addGotoDefinitionAction(IToolBarManager manager, List<ObjectInfo> objects) {
+		if (objects.size() == 1 && objects.get(0) instanceof XmlObjectInfo) {
+			final XmlObjectInfo javaInfo = (XmlObjectInfo) objects.get(0);
+			IAction gotoDefinitionAction = new Action() {
+				@Override
+				public void run() {
+					int position = javaInfo.getElement().getOffset();
+					IDesignPageSite site = IDesignPageSite.Helper.getSite(javaInfo);
+					site.openSourcePosition(position);
+				}
+			};
+			gotoDefinitionAction.setImageDescriptor(DesignerPlugin.getImageDescriptor("structure/goto_definition.gif"));
+			gotoDefinitionAction.setToolTipText(Messages.ComponentsPropertiesPage_goDefinition);
+			manager.appendToGroup(GROUP_EDIT, gotoDefinitionAction);
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/XmlWarningComposite.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/XmlWarningComposite.java
index c908fce7d..af205291b 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/XmlWarningComposite.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/XmlWarningComposite.java
@@ -23,27 +23,27 @@
  * @coverage XML.editor
  */
 public final class XmlWarningComposite extends WarningComposite {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public XmlWarningComposite(Composite parent, int style) {
-    super(parent, style);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public XmlWarningComposite(Composite parent, int style) {
+		super(parent, style);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void doRefresh() {
-    new RefreshAction().run();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void doRefresh() {
+		new RefreshAction().run();
+	}
 
-  @Override
-  protected void doShowSource(int sourcePosition) {
-    SwitchAction.showSource(sourcePosition);
-  }
+	@Override
+	protected void doShowSource(int sourcePosition) {
+		SwitchAction.showSource(sourcePosition);
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/actions/CopyAction.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/actions/CopyAction.java
index d86e22fdf..78eb585cb 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/actions/CopyAction.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/actions/CopyAction.java
@@ -40,146 +40,146 @@
  * @coverage XML.editor.action
  */
 public class CopyAction extends Action {
-  private final IEditPartViewer m_viewer;
+	private final IEditPartViewer m_viewer;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CopyAction(IEditPartViewer viewer) {
-    m_viewer = viewer;
-    m_viewer.addSelectionChangedListener(new ISelectionChangedListener() {
-      @Override
-      public void selectionChanged(SelectionChangedEvent event) {
-        firePropertyChange(ENABLED, null, isEnabled() ? Boolean.TRUE : Boolean.FALSE);
-      }
-    });
-    // copy presentation
-    ActionUtils.copyPresentation(this, ActionFactory.COPY);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CopyAction(IEditPartViewer viewer) {
+		m_viewer = viewer;
+		m_viewer.addSelectionChangedListener(new ISelectionChangedListener() {
+			@Override
+			public void selectionChanged(SelectionChangedEvent event) {
+				firePropertyChange(ENABLED, null, isEnabled() ? Boolean.TRUE : Boolean.FALSE);
+			}
+		});
+		// copy presentation
+		ActionUtils.copyPresentation(this, ActionFactory.COPY);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Action
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private List<XmlObjectMemento> m_mementos;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Action
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private List<XmlObjectMemento> m_mementos;
 
-  @Override
-  public void run() {
-    ExecutionUtils.runLog(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        List<EditPart> editParts = m_viewer.getSelectedEditParts();
-        m_mementos = getMementos(editParts);
-        doCopy(m_mementos);
-      }
-    });
-  }
+	@Override
+	public void run() {
+		ExecutionUtils.runLog(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				List<EditPart> editParts = m_viewer.getSelectedEditParts();
+				m_mementos = getMementos(editParts);
+				doCopy(m_mementos);
+			}
+		});
+	}
 
-  @Override
-  public boolean isEnabled() {
-    List<EditPart> editParts = m_viewer.getSelectedEditParts();
-    return hasMementos(editParts);
-  }
+	@Override
+	public boolean isEnabled() {
+		List<EditPart> editParts = m_viewer.getSelectedEditParts();
+		return hasMementos(editParts);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Memento
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Copies {@link XmlObjectMemento}'s into {@link Clipboard}.
-   */
-  static void doCopy(List<XmlObjectMemento> mementos) {
-    if (mementos != null) {
-      Clipboard clipboard = new Clipboard(Display.getCurrent());
-      try {
-        clipboard.setContents(
-            new Object[]{mementos},
-            new Transfer[]{XmlObjectMementoTransfer.getInstance()});
-      } finally {
-        clipboard.dispose();
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Memento
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Copies {@link XmlObjectMemento}'s into {@link Clipboard}.
+	 */
+	static void doCopy(List<XmlObjectMemento> mementos) {
+		if (mementos != null) {
+			Clipboard clipboard = new Clipboard(Display.getCurrent());
+			try {
+				clipboard.setContents(
+						new Object[]{mementos},
+						new Transfer[]{XmlObjectMementoTransfer.getInstance()});
+			} finally {
+				clipboard.dispose();
+			}
+		}
+	}
 
-  /**
-   * @return <code>true</code> if given {@link XmlObjectInfo}'s can be copy/pasted.
-   */
-  static boolean hasMementos(final List<EditPart> editParts) {
-    return ExecutionUtils.runObjectLog(new RunnableObjectEx<Boolean>() {
-      @Override
-      public Boolean runObject() throws Exception {
-        // selection required
-        if (editParts.isEmpty()) {
-          return false;
-        }
-        // check that JavaInfoMemento's can be created
-        for (EditPart editPart : editParts) {
-          // prepare model
-          XmlObjectInfo object;
-          {
-            Object model = editPart.getModel();
-            if (model instanceof XmlObjectInfo) {
-              object = (XmlObjectInfo) model;
-            } else {
-              return false;
-            }
-          }
-          // check for memento
-          if (!XmlObjectMemento.hasMemento(object)) {
-            return false;
-          }
-        }
-        // OK
-        return true;
-      }
-    }, false);
-  }
+	/**
+	 * @return <code>true</code> if given {@link XmlObjectInfo}'s can be copy/pasted.
+	 */
+	static boolean hasMementos(final List<EditPart> editParts) {
+		return ExecutionUtils.runObjectLog(new RunnableObjectEx<Boolean>() {
+			@Override
+			public Boolean runObject() throws Exception {
+				// selection required
+				if (editParts.isEmpty()) {
+					return false;
+				}
+				// check that JavaInfoMemento's can be created
+				for (EditPart editPart : editParts) {
+					// prepare model
+					XmlObjectInfo object;
+					{
+						Object model = editPart.getModel();
+						if (model instanceof XmlObjectInfo) {
+							object = (XmlObjectInfo) model;
+						} else {
+							return false;
+						}
+					}
+					// check for memento
+					if (!XmlObjectMemento.hasMemento(object)) {
+						return false;
+					}
+				}
+				// OK
+				return true;
+			}
+		}, false);
+	}
 
-  /**
-   * @return the {@link XmlObjectMemento}'s with copy/paste information for given
-   *         {@link XmlObjectInfo}'s.
-   */
-  @SuppressWarnings({"unchecked", "rawtypes"})
-  static List<XmlObjectMemento> getMementos(final List<EditPart> editParts) {
-    return (List<XmlObjectMemento>) ExecutionUtils.runObjectLog(new RunnableObjectEx() {
-      @Override
-      public Object runObject() throws Exception {
-        return getMementoEx(editParts);
-      }
-    }, null);
-  }
+	/**
+	 * @return the {@link XmlObjectMemento}'s with copy/paste information for given
+	 *         {@link XmlObjectInfo}'s.
+	 */
+	@SuppressWarnings({"unchecked", "rawtypes"})
+	static List<XmlObjectMemento> getMementos(final List<EditPart> editParts) {
+		return (List<XmlObjectMemento>) ExecutionUtils.runObjectLog(new RunnableObjectEx() {
+			@Override
+			public Object runObject() throws Exception {
+				return getMementoEx(editParts);
+			}
+		}, null);
+	}
 
-  /**
-   * Implementation of {@link #getMementos(List)}.
-   */
-  private static List<XmlObjectMemento> getMementoEx(List<EditPart> editParts) throws Exception {
-    // prepare objects
-    List<XmlObjectInfo> objects = Lists.newArrayList();
-    for (EditPart editPart : editParts) {
-      Object model = editPart.getModel();
-      if (model instanceof XmlObjectInfo) {
-        XmlObjectInfo object = (XmlObjectInfo) model;
-        objects.add(object);
-      }
-    }
-    // don't copy child, if we copy its parent
-    for (Iterator<XmlObjectInfo> I = objects.iterator(); I.hasNext();) {
-      XmlObjectInfo object = I.next();
-      if (object.getParent(objects) != null) {
-        I.remove();
-      }
-    }
-    // prepare mementos
-    List<XmlObjectMemento> mementos = Lists.newArrayList();
-    for (XmlObjectInfo object : objects) {
-      XmlObjectMemento memento = XmlObjectMemento.createMemento(object);
-      mementos.add(memento);
-    }
-    // OK, final result
-    return mementos;
-  }
+	/**
+	 * Implementation of {@link #getMementos(List)}.
+	 */
+	private static List<XmlObjectMemento> getMementoEx(List<EditPart> editParts) throws Exception {
+		// prepare objects
+		List<XmlObjectInfo> objects = Lists.newArrayList();
+		for (EditPart editPart : editParts) {
+			Object model = editPart.getModel();
+			if (model instanceof XmlObjectInfo) {
+				XmlObjectInfo object = (XmlObjectInfo) model;
+				objects.add(object);
+			}
+		}
+		// don't copy child, if we copy its parent
+		for (Iterator<XmlObjectInfo> I = objects.iterator(); I.hasNext();) {
+			XmlObjectInfo object = I.next();
+			if (object.getParent(objects) != null) {
+				I.remove();
+			}
+		}
+		// prepare mementos
+		List<XmlObjectMemento> mementos = Lists.newArrayList();
+		for (XmlObjectInfo object : objects) {
+			XmlObjectMemento memento = XmlObjectMemento.createMemento(object);
+			mementos.add(memento);
+		}
+		// OK, final result
+		return mementos;
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/actions/CutAction.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/actions/CutAction.java
index 4437c5f74..6a0e1355a 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/actions/CutAction.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/actions/CutAction.java
@@ -33,53 +33,53 @@
  * @coverage XML.editor.action
  */
 public class CutAction extends Action {
-  private final IEditPartViewer m_viewer;
+	private final IEditPartViewer m_viewer;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CutAction(IEditPartViewer viewer) {
-    m_viewer = viewer;
-    m_viewer.addSelectionChangedListener(new ISelectionChangedListener() {
-      @Override
-      public void selectionChanged(SelectionChangedEvent event) {
-        firePropertyChange(ENABLED, null, isEnabled() ? Boolean.TRUE : Boolean.FALSE);
-      }
-    });
-    // copy presentation
-    ActionUtils.copyPresentation(this, ActionFactory.CUT);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CutAction(IEditPartViewer viewer) {
+		m_viewer = viewer;
+		m_viewer.addSelectionChangedListener(new ISelectionChangedListener() {
+			@Override
+			public void selectionChanged(SelectionChangedEvent event) {
+				firePropertyChange(ENABLED, null, isEnabled() ? Boolean.TRUE : Boolean.FALSE);
+			}
+		});
+		// copy presentation
+		ActionUtils.copyPresentation(this, ActionFactory.CUT);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Action
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Command m_command;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Action
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Command m_command;
 
-  @Override
-  public void run() {
-    ExecutionUtils.runLog(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        // copy
-        {
-          List<EditPart> editParts = m_viewer.getSelectedEditParts();
-          List<XmlObjectMemento> m_mementos = CopyAction.getMementos(editParts);
-          CopyAction.doCopy(m_mementos);
-        }
-        // delete
-        m_viewer.getEditDomain().executeCommand(m_command);
-      }
-    });
-  }
+	@Override
+	public void run() {
+		ExecutionUtils.runLog(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				// copy
+				{
+					List<EditPart> editParts = m_viewer.getSelectedEditParts();
+					List<XmlObjectMemento> m_mementos = CopyAction.getMementos(editParts);
+					CopyAction.doCopy(m_mementos);
+				}
+				// delete
+				m_viewer.getEditDomain().executeCommand(m_command);
+			}
+		});
+	}
 
-  @Override
-  public boolean isEnabled() {
-    List<EditPart> editParts = m_viewer.getSelectedEditParts();
-    m_command = DeleteAction.getCommand(editParts);
-    return CopyAction.hasMementos(editParts) && m_command != null;
-  }
+	@Override
+	public boolean isEnabled() {
+		List<EditPart> editParts = m_viewer.getSelectedEditParts();
+		m_command = DeleteAction.getCommand(editParts);
+		return CopyAction.hasMementos(editParts) && m_command != null;
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/actions/DesignPageAction.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/actions/DesignPageAction.java
index 52dad6357..4d1832f48 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/actions/DesignPageAction.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/actions/DesignPageAction.java
@@ -21,29 +21,29 @@
  * @coverage XML.editor.action
  */
 public abstract class DesignPageAction extends EditorRelatedAction {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IAction
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final void run() {
-    AbstractXmlEditor editor = getEditor();
-    if (editor != null) {
-      IXmlEditorPage designPage = editor.getDesignPage();
-      if (designPage instanceof XmlDesignPage) {
-        run((XmlDesignPage) designPage);
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IAction
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final void run() {
+		AbstractXmlEditor editor = getEditor();
+		if (editor != null) {
+			IXmlEditorPage designPage = editor.getDesignPage();
+			if (designPage instanceof XmlDesignPage) {
+				run((XmlDesignPage) designPage);
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // DesignPageAction
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Runs the action with given {@link XmlDesignPage}.
-   */
-  protected abstract void run(XmlDesignPage designPage);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// DesignPageAction
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Runs the action with given {@link XmlDesignPage}.
+	 */
+	protected abstract void run(XmlDesignPage designPage);
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/actions/DesignPageActions.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/actions/DesignPageActions.java
index 8546aaef7..1c566a7eb 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/actions/DesignPageActions.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/actions/DesignPageActions.java
@@ -32,136 +32,136 @@
  * @coverage XML.editor.action
  */
 public final class DesignPageActions {
-  private final IEditPartViewer m_viewer;
-  private final IActionBars m_actionBars;
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Actions
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final IAction m_cutAction;
-  private final IAction m_copyAction;
-  private final IAction m_pasteAction;
-  private final IAction m_deleteAction;
-  private final TestAction m_testAction;
-  private final IAction m_refreshAction;
-  private final LayoutAssistantAction m_assistantAction;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Initializes new {@link DesignPageActions}.
-   *
-   * @param viewer
-   *          the {@link IEditPartViewer} of {@link XmlEditorPage}.
-   * @param actionBars
-   *          the editor site {@link IActionBars}.
-   */
-  public DesignPageActions(IEditorPart editor, IEditPartViewer viewer) {
-    m_viewer = viewer;
-    m_actionBars = editor.getEditorSite().getActionBars();
-    m_cutAction = new CutAction(m_viewer);
-    m_copyAction = new CopyAction(m_viewer);
-    m_pasteAction = new PasteAction(m_viewer);
-    m_deleteAction = new DeleteAction(m_viewer);
-    m_testAction = new TestAction();
-    m_refreshAction = new RefreshAction();
-    m_assistantAction = new LayoutAssistantAction(editor, viewer);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void setRoot(ObjectInfo root) {
-    m_testAction.setRoot(root);
-    m_assistantAction.setRoot(root);
-  }
-
-  public IAction getCutAction() {
-    return m_cutAction;
-  }
-
-  public IAction getCopyAction() {
-    return m_copyAction;
-  }
-
-  public IAction getPasteAction() {
-    return m_pasteAction;
-  }
-
-  public IAction getDeleteAction() {
-    return m_deleteAction;
-  }
-
-  public IAction getTestAction() {
-    return m_testAction;
-  }
-
-  public IAction getRefreshAction() {
-    return m_refreshAction;
-  }
-
-  public LayoutAssistantAction getAssistantAction() {
-    return m_assistantAction;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Life cycle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final Map<String, IAction> m_originalActions = Maps.newTreeMap();
-
-  /**
-   * Installs Designer handlers for global actions.
-   */
-  public void installActions() {
-    m_assistantAction.showWindow();
-    installAction(m_cutAction);
-    installAction(m_copyAction);
-    installAction(m_pasteAction);
-    installAction(m_deleteAction);
-    installAction(m_refreshAction);
-    m_actionBars.updateActionBars();
-  }
-
-  /**
-   * Installs single handler for global action with given <code>id</code>.
-   */
-  private void installAction(IAction action) {
-    String id = action.getId();
-    IAction oldAction = m_actionBars.getGlobalActionHandler(id);
-    if (!m_originalActions.containsKey(id)) {
-      m_originalActions.put(id, oldAction);
-      m_actionBars.setGlobalActionHandler(id, action);
-    }
-  }
-
-  /**
-   * Uninstalls actions installed by {@link #installActions()} and restores original ones.
-   */
-  public void uninstallActions() {
-    m_assistantAction.hideWindow();
-    //
-    for (Map.Entry<String, IAction> entry : m_originalActions.entrySet()) {
-      String id = entry.getKey();
-      IAction action = entry.getValue();
-      m_actionBars.setGlobalActionHandler(id, action);
-    }
-    m_originalActions.clear();
-    //
-    m_actionBars.updateActionBars();
-  }
-
-  /**
-   * Disposed actions created for this {@link XmlEditorPage}.
-   */
-  public void dispose() {
-    m_assistantAction.closeWindow();
-  }
+	private final IEditPartViewer m_viewer;
+	private final IActionBars m_actionBars;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Actions
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final IAction m_cutAction;
+	private final IAction m_copyAction;
+	private final IAction m_pasteAction;
+	private final IAction m_deleteAction;
+	private final TestAction m_testAction;
+	private final IAction m_refreshAction;
+	private final LayoutAssistantAction m_assistantAction;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Initializes new {@link DesignPageActions}.
+	 *
+	 * @param viewer
+	 *          the {@link IEditPartViewer} of {@link XmlEditorPage}.
+	 * @param actionBars
+	 *          the editor site {@link IActionBars}.
+	 */
+	public DesignPageActions(IEditorPart editor, IEditPartViewer viewer) {
+		m_viewer = viewer;
+		m_actionBars = editor.getEditorSite().getActionBars();
+		m_cutAction = new CutAction(m_viewer);
+		m_copyAction = new CopyAction(m_viewer);
+		m_pasteAction = new PasteAction(m_viewer);
+		m_deleteAction = new DeleteAction(m_viewer);
+		m_testAction = new TestAction();
+		m_refreshAction = new RefreshAction();
+		m_assistantAction = new LayoutAssistantAction(editor, viewer);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void setRoot(ObjectInfo root) {
+		m_testAction.setRoot(root);
+		m_assistantAction.setRoot(root);
+	}
+
+	public IAction getCutAction() {
+		return m_cutAction;
+	}
+
+	public IAction getCopyAction() {
+		return m_copyAction;
+	}
+
+	public IAction getPasteAction() {
+		return m_pasteAction;
+	}
+
+	public IAction getDeleteAction() {
+		return m_deleteAction;
+	}
+
+	public IAction getTestAction() {
+		return m_testAction;
+	}
+
+	public IAction getRefreshAction() {
+		return m_refreshAction;
+	}
+
+	public LayoutAssistantAction getAssistantAction() {
+		return m_assistantAction;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Life cycle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final Map<String, IAction> m_originalActions = Maps.newTreeMap();
+
+	/**
+	 * Installs Designer handlers for global actions.
+	 */
+	public void installActions() {
+		m_assistantAction.showWindow();
+		installAction(m_cutAction);
+		installAction(m_copyAction);
+		installAction(m_pasteAction);
+		installAction(m_deleteAction);
+		installAction(m_refreshAction);
+		m_actionBars.updateActionBars();
+	}
+
+	/**
+	 * Installs single handler for global action with given <code>id</code>.
+	 */
+	private void installAction(IAction action) {
+		String id = action.getId();
+		IAction oldAction = m_actionBars.getGlobalActionHandler(id);
+		if (!m_originalActions.containsKey(id)) {
+			m_originalActions.put(id, oldAction);
+			m_actionBars.setGlobalActionHandler(id, action);
+		}
+	}
+
+	/**
+	 * Uninstalls actions installed by {@link #installActions()} and restores original ones.
+	 */
+	public void uninstallActions() {
+		m_assistantAction.hideWindow();
+		//
+		for (Map.Entry<String, IAction> entry : m_originalActions.entrySet()) {
+			String id = entry.getKey();
+			IAction action = entry.getValue();
+			m_actionBars.setGlobalActionHandler(id, action);
+		}
+		m_originalActions.clear();
+		//
+		m_actionBars.updateActionBars();
+	}
+
+	/**
+	 * Disposed actions created for this {@link XmlEditorPage}.
+	 */
+	public void dispose() {
+		m_assistantAction.closeWindow();
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/actions/EditorRelatedAction.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/actions/EditorRelatedAction.java
index 93ace86fd..cde3857a5 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/actions/EditorRelatedAction.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/actions/EditorRelatedAction.java
@@ -26,61 +26,61 @@
  * @coverage XML.editor.action
  */
 public abstract class EditorRelatedAction extends Action implements IEditorActionDelegate {
-  private AbstractXmlEditor m_editor;
+	private AbstractXmlEditor m_editor;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IEditorActionDelegate
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final void setActiveEditor(IAction action, IEditorPart editor) {
-    m_editor = null;
-    if (editor instanceof AbstractXmlEditor) {
-      m_editor = (AbstractXmlEditor) editor;
-    }
-    setEnabled(m_editor != null);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IEditorActionDelegate
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final void setActiveEditor(IAction action, IEditorPart editor) {
+		m_editor = null;
+		if (editor instanceof AbstractXmlEditor) {
+			m_editor = (AbstractXmlEditor) editor;
+		}
+		setEnabled(m_editor != null);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IActionDelegate
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void selectionChanged(IAction action, ISelection selection) {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IActionDelegate
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void selectionChanged(IAction action, ISelection selection) {
+	}
 
-  @Override
-  public void run(IAction action) {
-    run();
-  }
+	@Override
+	public void run(IAction action) {
+		run();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the active {@link AbstractXmlEditor}.
-   */
-  protected final AbstractXmlEditor getEditor() {
-    AbstractXmlEditor designerEditor = m_editor;
-    if (designerEditor == null) {
-      designerEditor = getActiveEditor();
-    }
-    return designerEditor;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the active {@link AbstractXmlEditor}.
+	 */
+	protected final AbstractXmlEditor getEditor() {
+		AbstractXmlEditor designerEditor = m_editor;
+		if (designerEditor == null) {
+			designerEditor = getActiveEditor();
+		}
+		return designerEditor;
+	}
 
-  /**
-   * @return the active {@link AbstractXmlEditor}.
-   */
-  public static AbstractXmlEditor getActiveEditor() {
-    IEditorPart editor =
-        DesignerPlugin.getActiveWorkbenchWindow().getActivePage().getActiveEditor();
-    if (editor != null && editor instanceof AbstractXmlEditor) {
-      return (AbstractXmlEditor) editor;
-    }
-    return null;
-  }
+	/**
+	 * @return the active {@link AbstractXmlEditor}.
+	 */
+	public static AbstractXmlEditor getActiveEditor() {
+		IEditorPart editor =
+				DesignerPlugin.getActiveWorkbenchWindow().getActivePage().getActiveEditor();
+		if (editor != null && editor instanceof AbstractXmlEditor) {
+			return (AbstractXmlEditor) editor;
+		}
+		return null;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/actions/IPairResourceProvider.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/actions/IPairResourceProvider.java
index 951b002de..688103f02 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/actions/IPairResourceProvider.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/actions/IPairResourceProvider.java
@@ -21,8 +21,8 @@
  * @coverage XML.editor.action
  */
 public interface IPairResourceProvider {
-  /**
-   * @return the {@link IFile} pair for given {@link IFile}, may be <code>null</code>.
-   */
-  IFile getPair(IFile file);
+	/**
+	 * @return the {@link IFile} pair for given {@link IFile}, may be <code>null</code>.
+	 */
+	IFile getPair(IFile file);
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/actions/PasteAction.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/actions/PasteAction.java
index 31eb4321f..e5d23c8eb 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/actions/PasteAction.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/actions/PasteAction.java
@@ -32,56 +32,56 @@
  * @coverage XML.editor.action
  */
 public class PasteAction extends Action {
-  private final IEditPartViewer m_viewer;
+	private final IEditPartViewer m_viewer;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public PasteAction(IEditPartViewer viewer) {
-    m_viewer = viewer;
-    // copy presentation
-    ActionUtils.copyPresentation(this, ActionFactory.PASTE);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public PasteAction(IEditPartViewer viewer) {
+		m_viewer = viewer;
+		// copy presentation
+		ActionUtils.copyPresentation(this, ActionFactory.PASTE);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Action
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void run() {
-    // check for SWT paste
-    {
-      Control focusControl = Display.getCurrent().getFocusControl();
-      if (focusControl instanceof Text) {
-        ((Text) focusControl).paste();
-        return;
-      }
-    }
-    // do JavaInfo paste
-    List<XmlObjectMemento> mementos = getMementos();
-    if (mementos != null) {
-      m_viewer.getEditDomain().setActiveTool(new PasteTool(mementos));
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Action
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void run() {
+		// check for SWT paste
+		{
+			Control focusControl = Display.getCurrent().getFocusControl();
+			if (focusControl instanceof Text) {
+				((Text) focusControl).paste();
+				return;
+			}
+		}
+		// do JavaInfo paste
+		List<XmlObjectMemento> mementos = getMementos();
+		if (mementos != null) {
+			m_viewer.getEditDomain().setActiveTool(new PasteTool(mementos));
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the array of {@link XmlObjectMemento} in {@link Clipboard}.
-   */
-  @SuppressWarnings("unchecked")
-  private static List<XmlObjectMemento> getMementos() {
-    Clipboard clipboard = new Clipboard(Display.getCurrent());
-    try {
-      return (List<XmlObjectMemento>) clipboard.getContents(XmlObjectMementoTransfer.getInstance());
-    } finally {
-      clipboard.dispose();
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the array of {@link XmlObjectMemento} in {@link Clipboard}.
+	 */
+	@SuppressWarnings("unchecked")
+	private static List<XmlObjectMemento> getMementos() {
+		Clipboard clipboard = new Clipboard(Display.getCurrent());
+		try {
+			return (List<XmlObjectMemento>) clipboard.getContents(XmlObjectMementoTransfer.getInstance());
+		} finally {
+			clipboard.dispose();
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/actions/RefreshAction.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/actions/RefreshAction.java
index 89d226d42..87d369df7 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/actions/RefreshAction.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/actions/RefreshAction.java
@@ -24,26 +24,26 @@
  * @coverage XML.editor.action
  */
 public final class RefreshAction extends DesignPageAction {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public RefreshAction() {
-    // copy presentation
-    ActionUtils.copyPresentation(this, ActionFactory.REFRESH);
-    // override presentation
-    setToolTipText(Messages.RefreshAction_toolTip);
-    setImageDescriptor(DesignerPlugin.getImageDescriptor("editor_refresh.png"));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public RefreshAction() {
+		// copy presentation
+		ActionUtils.copyPresentation(this, ActionFactory.REFRESH);
+		// override presentation
+		setToolTipText(Messages.RefreshAction_toolTip);
+		setImageDescriptor(DesignerPlugin.getImageDescriptor("editor_refresh.png"));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // DesignPageAction
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void run(XmlDesignPage designPage) {
-    designPage.refreshGEF();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// DesignPageAction
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void run(XmlDesignPage designPage) {
+		designPage.refreshGEF();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/actions/SwitchAction.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/actions/SwitchAction.java
index 67d348cce..4eab27252 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/actions/SwitchAction.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/actions/SwitchAction.java
@@ -19,44 +19,44 @@
  * @coverage XML.editor.action
  */
 public class SwitchAction extends EditorRelatedAction {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IActionDelegate
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void run() {
-    AbstractXmlEditor editor = getEditor();
-    if (editor != null) {
-      editor.switchSourceDesign();
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IActionDelegate
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void run() {
+		AbstractXmlEditor editor = getEditor();
+		if (editor != null) {
+			editor.switchSourceDesign();
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Shows "Source" page.
-   */
-  public static void showSource() {
-    showSource(-1);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Shows "Source" page.
+	 */
+	public static void showSource() {
+		showSource(-1);
+	}
 
-  /**
-   * Shows "Source" page and at given source position.
-   *
-   * @param position
-   *          the position to show in source, if <code>-1</code>, then ignored.
-   */
-  public static void showSource(int position) {
-    AbstractXmlEditor editor = getActiveEditor();
-    if (editor != null) {
-      editor.showSource();
-      if (position != -1) {
-        editor.showSourcePosition(position);
-      }
-    }
-  }
+	/**
+	 * Shows "Source" page and at given source position.
+	 *
+	 * @param position
+	 *          the position to show in source, if <code>-1</code>, then ignored.
+	 */
+	public static void showSource(int position) {
+		AbstractXmlEditor editor = getActiveEditor();
+		if (editor != null) {
+			editor.showSource();
+			if (position != -1) {
+				editor.showSourcePosition(position);
+			}
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/actions/SwitchPairEditorAction.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/actions/SwitchPairEditorAction.java
index 8bed2746b..709bed1fe 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/actions/SwitchPairEditorAction.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/actions/SwitchPairEditorAction.java
@@ -33,73 +33,73 @@
  * @coverage XML.editor.action
  */
 public class SwitchPairEditorAction extends Action implements IEditorActionDelegate {
-  private IEditorPart m_editor;
-  private IFile m_pairFile;
+	private IEditorPart m_editor;
+	private IFile m_pairFile;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IEditorActionDelegate
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final void setActiveEditor(IAction action, IEditorPart editor) {
-    m_editor = editor;
-    m_pairFile = null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IEditorActionDelegate
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final void setActiveEditor(IAction action, IEditorPart editor) {
+		m_editor = editor;
+		m_pairFile = null;
+	}
 
-  private void preparePairFile() {
-    if (m_pairFile != null) {
-      return;
-    }
-    // may be no current editor
-    if (m_editor == null) {
-      return;
-    }
-    // prepare current file
-    IFile editorFile;
-    if (!(m_editor.getEditorInput() instanceof IFileEditorInput)) {
-      return;
-    }
-    editorFile = ((IFileEditorInput) m_editor.getEditorInput()).getFile();
-    // ask providers for pair
-    List<IPairResourceProvider> providers =
-        ExternalFactoriesHelper.getElementsInstances(
-            IPairResourceProvider.class,
-            "org.eclipse.wb.core.xml.pairResourceProviders",
-            "provider");
-    for (IPairResourceProvider provider : providers) {
-      IFile pairFile = provider.getPair(editorFile);
-      if (pairFile != null && pairFile.exists()) {
-        m_pairFile = pairFile;
-        break;
-      }
-    }
-  }
+	private void preparePairFile() {
+		if (m_pairFile != null) {
+			return;
+		}
+		// may be no current editor
+		if (m_editor == null) {
+			return;
+		}
+		// prepare current file
+		IFile editorFile;
+		if (!(m_editor.getEditorInput() instanceof IFileEditorInput)) {
+			return;
+		}
+		editorFile = ((IFileEditorInput) m_editor.getEditorInput()).getFile();
+		// ask providers for pair
+		List<IPairResourceProvider> providers =
+				ExternalFactoriesHelper.getElementsInstances(
+						IPairResourceProvider.class,
+						"org.eclipse.wb.core.xml.pairResourceProviders",
+						"provider");
+		for (IPairResourceProvider provider : providers) {
+			IFile pairFile = provider.getPair(editorFile);
+			if (pairFile != null && pairFile.exists()) {
+				m_pairFile = pairFile;
+				break;
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IActionDelegate
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void selectionChanged(IAction action, ISelection selection) {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IActionDelegate
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void selectionChanged(IAction action, ISelection selection) {
+	}
 
-  @Override
-  public void run(IAction action) {
-    run();
-  }
+	@Override
+	public void run(IAction action) {
+		run();
+	}
 
-  @Override
-  public void run() {
-    ExecutionUtils.runLog(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        preparePairFile();
-        if (m_pairFile != null) {
-          IDE.openEditor(DesignerPlugin.getActivePage(), m_pairFile);
-        }
-      }
-    });
-  }
+	@Override
+	public void run() {
+		ExecutionUtils.runLog(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				preparePairFile();
+				if (m_pairFile != null) {
+					IDE.openEditor(DesignerPlugin.getActivePage(), m_pairFile);
+				}
+			}
+		});
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/actions/TestAction.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/actions/TestAction.java
index c9d930402..9486b557c 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/actions/TestAction.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/actions/TestAction.java
@@ -28,60 +28,60 @@
  * @coverage XML.editor.action
  */
 public final class TestAction extends Action {
-  private ObjectInfo m_rootObject;
+	private ObjectInfo m_rootObject;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public TestAction() {
-    setText(Messages.TestAction_text);
-    setToolTipText(Messages.TestAction_toolTip);
-    setImageDescriptor(DesignerPlugin.getImageDescriptor("test.png"));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public TestAction() {
+		setText(Messages.TestAction_text);
+		setToolTipText(Messages.TestAction_toolTip);
+		setImageDescriptor(DesignerPlugin.getImageDescriptor("test.png"));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets the root {@link ObjectInfo} on {@link DesignPage}.
-   */
-  public void setRoot(ObjectInfo rootObject) {
-    m_rootObject = rootObject;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets the root {@link ObjectInfo} on {@link DesignPage}.
+	 */
+	public void setRoot(ObjectInfo rootObject) {
+		m_rootObject = rootObject;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Action
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void run() {
-    ExecutionUtils.runLog(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        ExecutionUtils.runDesignTime(new RunnableEx() {
-          @Override
-          public void run() throws Exception {
-            run0();
-          }
-        });
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Action
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void run() {
+		ExecutionUtils.runLog(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				ExecutionUtils.runDesignTime(new RunnableEx() {
+					@Override
+					public void run() throws Exception {
+						run0();
+					}
+				});
+			}
+		});
+	}
 
-  private void run0() throws Exception {
-    if (m_rootObject instanceof AbstractComponentInfo) {
-      AbstractComponentInfo component = (AbstractComponentInfo) m_rootObject;
-      TopBoundsSupport topSupport = component.getTopBoundsSupport();
-      boolean doReparse = topSupport.show();
-      // refresh because user can change something
-      if (doReparse) {
-        m_rootObject.refresh();
-      }
-    }
-  }
+	private void run0() throws Exception {
+		if (m_rootObject instanceof AbstractComponentInfo) {
+			AbstractComponentInfo component = (AbstractComponentInfo) m_rootObject;
+			TopBoundsSupport topSupport = component.getTopBoundsSupport();
+			boolean doReparse = topSupport.show();
+			// refresh because user can change something
+			if (doReparse) {
+				m_rootObject.refresh();
+			}
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/DesignerPalette.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/DesignerPalette.java
index f80e1ec6d..d356536ec 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/DesignerPalette.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/DesignerPalette.java
@@ -71,523 +71,523 @@
  * @coverage XML.editor.palette.ui
  */
 public class DesignerPalette {
-  public static final String FLAG_NO_PALETTE = "FLAG_NO_PALETTE"; // Don't load palette during testing
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance fields
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final boolean m_isMainPalette;
-  private final PluginPalettePreferences m_preferences;
-  private final PaletteComposite m_paletteComposite;
-  private final DesignerPaletteOperations m_operations;
-  private IEditPartViewer m_editPartViewer;
-  private XmlObjectInfo m_rootObject;
-  private PaletteManager m_manager;
-  private IEntry m_defaultEntry;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DesignerPalette(Composite parent, int style, boolean isMainPalette) {
-    m_isMainPalette = isMainPalette;
-    m_operations = new DesignerPaletteOperations();
-    m_preferences = new PluginPalettePreferences(DesignerPlugin.getPreferences());
-    m_paletteComposite = new PaletteComposite(parent, SWT.NONE);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public Control getControl() {
-    return m_paletteComposite;
-  }
-
-  /**
-   * Sets information about editor.
-   */
-  public void setInput(IEditPartViewer editPartViewer,
-      final XmlObjectInfo rootObject,
-      String toolkitId) {
-    m_editPartViewer = editPartViewer;
-    m_rootObject = rootObject;
-    //
-    if (m_rootObject != null) {
-      // cancel cache pre-loading jobs possibly scheduled and/or running
-      {
-        IJobManager manager = Job.getJobManager();
-        manager.cancel(ComponentPresentationHelper.PALETTE_PRELOAD_JOBS);
-        try {
-          manager.join(ComponentPresentationHelper.PALETTE_PRELOAD_JOBS, null);
-        } catch (Throwable e) {
-          // don't care
-        }
-      }
-      // configure palette
-      m_manager = new PaletteManager(m_rootObject, toolkitId);
-      reloadPalette();
-      // configure preferences
-      {
-        m_preferences.setPrefix(toolkitId);
-        m_paletteComposite.setPreferences(m_preferences);
-      }
-      // set site
-      IPaletteSite.Helper.setSite(m_rootObject, m_paletteSite);
-      // refresh palette on JavaInfo hierarchy refresh
-      rootObject.addBroadcastListener(new ObjectEventListener() {
-        @Override
-        public void refreshed() throws Exception {
-          if (m_paletteComposite.isDisposed()) {
-            rootObject.removeBroadcastListener(this);
-            return;
-          }
-          refreshVisualPalette();
-        }
-      });
-    }
-  }
-
-  /**
-   * @return the {@link PaletteEventListener} for hierarchy.
-   */
-  private PaletteEventListener getBroadcastPalette() throws Exception {
-    return m_rootObject.getBroadcast(PaletteEventListener.class);
-  }
-
-  /**
-   * Loads new base palette, applies commands and shows.
-   */
-  private void reloadPalette() {
-    m_manager.reloadPalette();
-    showPalette();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds given {@link Command} to the list and writes commands.
-   */
-  private void commands_addWrite(Command command) {
-    commands_addWrite(ImmutableList.of(command));
-  }
-
-  /**
-   * Adds given {@link Command}s to the list and writes commands.
-   */
-  private void commands_addWrite(List<Command> commands) {
-    for (Command command : commands) {
-      m_manager.commands_add(command);
-    }
-    m_manager.commands_write();
-    refreshVisualPalette();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IPaletteSite
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final IPaletteSite m_paletteSite = new IPaletteSite() {
-    @Override
-    public Shell getShell() {
-      return getOperations().getShell();
-    }
-
-    @Override
-    public PaletteInfo getPalette() {
-      return m_manager.getPalette();
-    }
-
-    @Override
-    public void addCommand(Command command) {
-      commands_addWrite(command);
-    }
-
-    @Override
-    public void editPalette() {
-      getOperations().editPalette();
-    }
-  };
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Palette displaying
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final Map<CategoryInfo, ICategory> m_categoryInfoToVisual = Maps.newHashMap();
-  private final Map<ICategory, CategoryInfo> m_visualToCategoryInfo = Maps.newHashMap();
-  private final Map<String, Boolean> m_openCategories = Maps.newHashMap();
-  private final Set<EntryInfo> m_knownEntryInfos = Sets.newHashSet();
-  private final Set<EntryInfo> m_goodEntryInfos = Sets.newHashSet();
-  private final Map<EntryInfo, IEntry> m_entryInfoToVisual = Maps.newHashMap();
-  private final Map<IEntry, EntryInfo> m_visualToEntryInfo = Maps.newHashMap();
-
-  /**
-   * Clears all caches for {@link EntryInfo}, {@link IEntry}, etc.
-   */
-  private void clearEntryCaches() {
-    m_categoryInfoToVisual.clear();
-    m_visualToCategoryInfo.clear();
-    m_knownEntryInfos.clear();
-    m_goodEntryInfos.clear();
-    m_entryInfoToVisual.clear();
-    m_visualToEntryInfo.clear();
-    m_defaultEntry = null;
-  }
-
-  /**
-   * @return the {@link IEntry} for given {@link EntryInfo}.
-   */
-  private IEntry getVisualEntry(final EntryInfo entryInfo) {
-    IEntry entry = m_entryInfoToVisual.get(entryInfo);
-    if (entry == null && !m_knownEntryInfos.contains(entryInfo)) {
-      m_knownEntryInfos.add(entryInfo);
-      if (entryInfo.initialize(m_editPartViewer, m_rootObject)) {
-        entry = new IEntry() {
-          ////////////////////////////////////////////////////////////////////////////
-          //
-          // Access
-          //
-          ////////////////////////////////////////////////////////////////////////////
-          @Override
-          public boolean isEnabled() {
-            return entryInfo.isEnabled();
-          }
-
-          @Override
-          public Image getIcon() {
-            return entryInfo.getIcon();
-          }
-
-          @Override
-          public String getText() {
-            return entryInfo.getName();
-          }
-
-          @Override
-          public String getToolTipText() {
-            return entryInfo.getDescription();
-          }
-
-          ////////////////////////////////////////////////////////////////////////////
-          //
-          // Activation
-          //
-          ////////////////////////////////////////////////////////////////////////////
-          @Override
-          public boolean activate(boolean reload) {
-            return entryInfo.activate(reload);
-          }
-        };
-        m_goodEntryInfos.add(entryInfo);
-        m_entryInfoToVisual.put(entryInfo, entry);
-        m_visualToEntryInfo.put(entry, entryInfo);
-        // initialize default entry
-        if (m_defaultEntry == null) {
-          if (entryInfo instanceof IDefaultEntryInfo) {
-            m_defaultEntry = entry;
-          }
-        }
-      }
-    }
-    return entry;
-  }
-
-  /**
-   * @return the {@link ICategory} for given {@link CategoryInfo}.
-   */
-  private ICategory getVisualCategory(final CategoryInfo categoryInfo) {
-    ICategory category = m_categoryInfoToVisual.get(categoryInfo);
-    if (category == null) {
-      final String categoryId = categoryInfo.getId();
-      category = new ICategory() {
-        private boolean m_open;
-
-        @Override
-        public List<IEntry> getEntries() {
-          final List<EntryInfo> entryInfoList = Lists.newArrayList(categoryInfo.getEntries());
-          // add new EntryInfo's using broadcast
-          ExecutionUtils.runIgnore(new RunnableEx() {
-            @Override
-            public void run() throws Exception {
-              getBroadcastPalette().entries(categoryInfo, entryInfoList);
-            }
-          });
-          // convert EntryInfo's into IEntry's
-          List<IEntry> entries = Lists.newArrayList();
-          for (EntryInfo entryInfo : entryInfoList) {
-            if (entryInfo.isVisible()) {
-              IEntry entry = getVisualEntry(entryInfo);
-              if (entry != null) {
-                entries.add(entry);
-              }
-            }
-          }
-          return entries;
-        }
-
-        @Override
-        public String getText() {
-          return categoryInfo.getName();
-        }
-
-        @Override
-        public String getToolTipText() {
-          return categoryInfo.getDescription();
-        }
-
-        @Override
-        public boolean isOpen() {
-          return m_open;
-        }
-
-        @Override
-        public void setOpen(boolean open) {
-          m_open = open;
-          m_openCategories.put(categoryId, open);
-        }
-      };
-      m_categoryInfoToVisual.put(categoryInfo, category);
-      m_visualToCategoryInfo.put(category, categoryInfo);
-      // set "open" state: from map, or default
-      if (m_openCategories.containsKey(categoryId)) {
-        category.setOpen(m_openCategories.get(categoryId));
-      } else {
-        category.setOpen(categoryInfo.isOpen());
-      }
-    }
-    return category;
-  }
-
-  /**
-   * Shows current {@link PaletteInfo}.
-   */
-  private void showPalette() {
-    clearEntryCaches();
-    // set IPalette
-    IPalette palette = new IPalette() {
-      @Override
-      public List<ICategory> getCategories() {
-        // check for skipping palette during tests
-        if (System.getProperty(FLAG_NO_PALETTE) != null) {
-          return ImmutableList.of();
-        }
-        // get categories for palette model
-        final List<CategoryInfo> categoryInfoList;
-        {
-          List<CategoryInfo> pristineCategories = m_manager.getPalette().getCategories();
-          categoryInfoList = Lists.newArrayList(pristineCategories);
-        }
-        // add new CategoryInfo's using broadcast
-        ExecutionUtils.runLog(new RunnableEx() {
-          @Override
-          public void run() throws Exception {
-            getBroadcastPalette().categories(categoryInfoList);
-            getBroadcastPalette().categories2(categoryInfoList);
-          }
-        });
-        // convert CategoryInfo's into ICategory's
-        List<ICategory> categories = Lists.newArrayList();
-        for (CategoryInfo categoryInfo : categoryInfoList) {
-          if (shouldBeDisplayed(categoryInfo)) {
-            ICategory category = getVisualCategory(categoryInfo);
-            categories.add(category);
-          }
-        }
-        return categories;
-      }
-
-      @Override
-		public void addPopupActions(IMenuManager menuManager, Object target, int iconsType) {
-        new DesignerPalettePopupActions(getOperations()).addPopupActions(menuManager, target);
-      }
-
-      @Override
-      public void selectDefault() {
-        m_editPartViewer.getEditDomain().loadDefaultTool();
-      }
-
-      @Override
-      public void moveCategory(ICategory _category, ICategory _nextCategory) {
-        CategoryInfo category = m_visualToCategoryInfo.get(_category);
-        CategoryInfo nextCategory = m_visualToCategoryInfo.get(_nextCategory);
-        commands_addWrite(new CategoryMoveCommand(category, nextCategory));
-      }
-
-      @Override
-      public void moveEntry(IEntry _entry, ICategory _targetCategory, IEntry _nextEntry) {
-        EntryInfo entry = m_visualToEntryInfo.get(_entry);
-        CategoryInfo category = m_visualToCategoryInfo.get(_targetCategory);
-        EntryInfo nextEntry = m_visualToEntryInfo.get(_nextEntry);
-        commands_addWrite(new EntryMoveCommand(entry, category, nextEntry));
-      }
-    };
-    m_paletteComposite.setPalette(palette);
-    configure_EditDomain_DefaultTool();
-  }
-
-  private DesignerPaletteOperations getOperations() {
-    return m_operations;
-  }
-
-  /**
-   * @return <code>true</code> if given {@link CategoryInfo} should be displayed.
-   */
-  private boolean shouldBeDisplayed(CategoryInfo category) {
-    if (!category.isVisible()) {
-      return false;
-    }
-    if (category.isOptional()) {
-      return !getVisualCategory(category).getEntries().isEmpty();
-    }
-    return true;
-  }
-
-  private void configure_EditDomain_DefaultTool() {
-    if (m_isMainPalette) {
-      final EditDomain editDomain = m_editPartViewer.getEditDomain();
-      editDomain.setDefaultToolProvider(new IDefaultToolProvider() {
-        @Override
-        public void loadDefaultTool() {
-          if (m_defaultEntry != null) {
-            m_paletteComposite.selectEntry(m_defaultEntry, false);
-          } else {
-            editDomain.setActiveTool(new SelectionTool());
-          }
-        }
-      });
-      editDomain.loadDefaultTool();
-    }
-  }
-
-  /**
-   * Refreshes visual palette.
-   */
-  private void refreshVisualPalette() {
-    m_paletteComposite.refreshPalette();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Palette operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  final class DesignerPaletteOperations {
-    /**
-     * Edits palette using {@link PaletteManagerDialog}.
-     */
-    public void editPalette() {
-      PaletteManagerDialog dialog =
-          new PaletteManagerDialog(m_rootObject.getContext(),
-              m_manager.getPalette(),
-              m_goodEntryInfos);
-      // reload in any case
-      reloadPalette();
-      // add commands used to update palette in dialog
-      if (dialog.open() == Window.OK) {
-        commands_addWrite(dialog.getCommands());
-      }
-    }
-
-    public void defaultPalette() {
-      m_manager.commands_clear();
-      m_manager.commands_write();
-      m_openCategories.clear();
-      reloadPalette();
-    }
-
-    /**
-     * Changes palette preferences.
-     */
-    public void editPreferences() {
-      PalettePreferencesDialog dialog = new PalettePreferencesDialog(getShell(), m_preferences);
-      if (dialog.open() == Window.OK) {
-        dialog.commit();
-        m_paletteComposite.setPreferences(m_preferences);
-      }
-    }
-
-    public EntryInfo getEntry(Object target) {
-      return m_visualToEntryInfo.get(target);
-    }
-
-    public CategoryInfo getCategory(Object target) {
-      return m_visualToCategoryInfo.get(target);
-    }
-
-    public void addComponent(CategoryInfo category) {
-      ComponentAddDialog dialog =
-          new ComponentAddDialog(getShell(),
-              m_rootObject.getContext(),
-              m_manager.getPalette(),
-              category);
-      if (dialog.open() == Window.OK) {
-        commands_addWrite(dialog.getCommand());
-      }
-    }
-
-    public void editEntry(ToolEntryInfo targetEntry) {
-      AbstractPaletteElementDialog dialog = null;
-      // prepare editing dialog
-      if (targetEntry instanceof ComponentEntryInfo) {
-        ComponentEntryInfo entryInfo = (ComponentEntryInfo) targetEntry;
-        dialog = new ComponentEditDialog(getShell(), m_rootObject.getContext(), entryInfo);
-      }
-      // execute dialog
-      if (dialog != null && dialog.open() == Window.OK) {
-        // remove visual for component, so re-initialize them
-        m_entryInfoToVisual.remove(targetEntry);
-        m_knownEntryInfos.remove(targetEntry);
-        m_goodEntryInfos.remove(targetEntry);
-        // do updates
-        commands_addWrite(dialog.getCommand());
-      }
-    }
-
-    public void removeEntry(EntryInfo targetEntry) {
-      commands_addWrite(new EntryRemoveCommand(targetEntry));
-    }
-
-    public void addCategory(CategoryInfo nextCategory) {
-      CategoryAddDialog dialog =
-          new CategoryAddDialog(getShell(), m_manager.getPalette(), nextCategory);
-      if (dialog.open() == Window.OK) {
-        commands_addWrite(dialog.getCommand());
-      }
-    }
-
-    public void editCategory(CategoryInfo targetCategory) {
-      CategoryEditDialog dialog = new CategoryEditDialog(getShell(), targetCategory);
-      if (dialog.open() == Window.OK) {
-        commands_addWrite(dialog.getCommand());
-      }
-    }
-
-    public void removeCategory(CategoryInfo targetCategory) {
-      commands_addWrite(new CategoryRemoveCommand(targetCategory));
-    }
-
-    public void importPalette(String path) throws Exception {
-      m_manager.importFrom(path);
-      reloadPalette();
-    }
-
-    public void exportPalette(String path) throws Exception {
-      m_manager.exportTo(path);
-    }
-
-    public String getToolkitId() {
-      return m_manager.getToolkitId();
-    }
-
-    public Shell getShell() {
-      return m_paletteComposite.getShell();
-    }
-  }
+	public static final String FLAG_NO_PALETTE = "FLAG_NO_PALETTE"; // Don't load palette during testing
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance fields
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final boolean m_isMainPalette;
+	private final PluginPalettePreferences m_preferences;
+	private final PaletteComposite m_paletteComposite;
+	private final DesignerPaletteOperations m_operations;
+	private IEditPartViewer m_editPartViewer;
+	private XmlObjectInfo m_rootObject;
+	private PaletteManager m_manager;
+	private IEntry m_defaultEntry;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DesignerPalette(Composite parent, int style, boolean isMainPalette) {
+		m_isMainPalette = isMainPalette;
+		m_operations = new DesignerPaletteOperations();
+		m_preferences = new PluginPalettePreferences(DesignerPlugin.getPreferences());
+		m_paletteComposite = new PaletteComposite(parent, SWT.NONE);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public Control getControl() {
+		return m_paletteComposite;
+	}
+
+	/**
+	 * Sets information about editor.
+	 */
+	public void setInput(IEditPartViewer editPartViewer,
+			final XmlObjectInfo rootObject,
+			String toolkitId) {
+		m_editPartViewer = editPartViewer;
+		m_rootObject = rootObject;
+		//
+		if (m_rootObject != null) {
+			// cancel cache pre-loading jobs possibly scheduled and/or running
+			{
+				IJobManager manager = Job.getJobManager();
+				manager.cancel(ComponentPresentationHelper.PALETTE_PRELOAD_JOBS);
+				try {
+					manager.join(ComponentPresentationHelper.PALETTE_PRELOAD_JOBS, null);
+				} catch (Throwable e) {
+					// don't care
+				}
+			}
+			// configure palette
+			m_manager = new PaletteManager(m_rootObject, toolkitId);
+			reloadPalette();
+			// configure preferences
+			{
+				m_preferences.setPrefix(toolkitId);
+				m_paletteComposite.setPreferences(m_preferences);
+			}
+			// set site
+			IPaletteSite.Helper.setSite(m_rootObject, m_paletteSite);
+			// refresh palette on JavaInfo hierarchy refresh
+			rootObject.addBroadcastListener(new ObjectEventListener() {
+				@Override
+				public void refreshed() throws Exception {
+					if (m_paletteComposite.isDisposed()) {
+						rootObject.removeBroadcastListener(this);
+						return;
+					}
+					refreshVisualPalette();
+				}
+			});
+		}
+	}
+
+	/**
+	 * @return the {@link PaletteEventListener} for hierarchy.
+	 */
+	private PaletteEventListener getBroadcastPalette() throws Exception {
+		return m_rootObject.getBroadcast(PaletteEventListener.class);
+	}
+
+	/**
+	 * Loads new base palette, applies commands and shows.
+	 */
+	private void reloadPalette() {
+		m_manager.reloadPalette();
+		showPalette();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds given {@link Command} to the list and writes commands.
+	 */
+	private void commands_addWrite(Command command) {
+		commands_addWrite(ImmutableList.of(command));
+	}
+
+	/**
+	 * Adds given {@link Command}s to the list and writes commands.
+	 */
+	private void commands_addWrite(List<Command> commands) {
+		for (Command command : commands) {
+			m_manager.commands_add(command);
+		}
+		m_manager.commands_write();
+		refreshVisualPalette();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IPaletteSite
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final IPaletteSite m_paletteSite = new IPaletteSite() {
+		@Override
+		public Shell getShell() {
+			return getOperations().getShell();
+		}
+
+		@Override
+		public PaletteInfo getPalette() {
+			return m_manager.getPalette();
+		}
+
+		@Override
+		public void addCommand(Command command) {
+			commands_addWrite(command);
+		}
+
+		@Override
+		public void editPalette() {
+			getOperations().editPalette();
+		}
+	};
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Palette displaying
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final Map<CategoryInfo, ICategory> m_categoryInfoToVisual = Maps.newHashMap();
+	private final Map<ICategory, CategoryInfo> m_visualToCategoryInfo = Maps.newHashMap();
+	private final Map<String, Boolean> m_openCategories = Maps.newHashMap();
+	private final Set<EntryInfo> m_knownEntryInfos = Sets.newHashSet();
+	private final Set<EntryInfo> m_goodEntryInfos = Sets.newHashSet();
+	private final Map<EntryInfo, IEntry> m_entryInfoToVisual = Maps.newHashMap();
+	private final Map<IEntry, EntryInfo> m_visualToEntryInfo = Maps.newHashMap();
+
+	/**
+	 * Clears all caches for {@link EntryInfo}, {@link IEntry}, etc.
+	 */
+	private void clearEntryCaches() {
+		m_categoryInfoToVisual.clear();
+		m_visualToCategoryInfo.clear();
+		m_knownEntryInfos.clear();
+		m_goodEntryInfos.clear();
+		m_entryInfoToVisual.clear();
+		m_visualToEntryInfo.clear();
+		m_defaultEntry = null;
+	}
+
+	/**
+	 * @return the {@link IEntry} for given {@link EntryInfo}.
+	 */
+	private IEntry getVisualEntry(final EntryInfo entryInfo) {
+		IEntry entry = m_entryInfoToVisual.get(entryInfo);
+		if (entry == null && !m_knownEntryInfos.contains(entryInfo)) {
+			m_knownEntryInfos.add(entryInfo);
+			if (entryInfo.initialize(m_editPartViewer, m_rootObject)) {
+				entry = new IEntry() {
+					////////////////////////////////////////////////////////////////////////////
+					//
+					// Access
+					//
+					////////////////////////////////////////////////////////////////////////////
+					@Override
+					public boolean isEnabled() {
+						return entryInfo.isEnabled();
+					}
+
+					@Override
+					public Image getIcon() {
+						return entryInfo.getIcon();
+					}
+
+					@Override
+					public String getText() {
+						return entryInfo.getName();
+					}
+
+					@Override
+					public String getToolTipText() {
+						return entryInfo.getDescription();
+					}
+
+					////////////////////////////////////////////////////////////////////////////
+					//
+					// Activation
+					//
+					////////////////////////////////////////////////////////////////////////////
+					@Override
+					public boolean activate(boolean reload) {
+						return entryInfo.activate(reload);
+					}
+				};
+				m_goodEntryInfos.add(entryInfo);
+				m_entryInfoToVisual.put(entryInfo, entry);
+				m_visualToEntryInfo.put(entry, entryInfo);
+				// initialize default entry
+				if (m_defaultEntry == null) {
+					if (entryInfo instanceof IDefaultEntryInfo) {
+						m_defaultEntry = entry;
+					}
+				}
+			}
+		}
+		return entry;
+	}
+
+	/**
+	 * @return the {@link ICategory} for given {@link CategoryInfo}.
+	 */
+	private ICategory getVisualCategory(final CategoryInfo categoryInfo) {
+		ICategory category = m_categoryInfoToVisual.get(categoryInfo);
+		if (category == null) {
+			final String categoryId = categoryInfo.getId();
+			category = new ICategory() {
+				private boolean m_open;
+
+				@Override
+				public List<IEntry> getEntries() {
+					final List<EntryInfo> entryInfoList = Lists.newArrayList(categoryInfo.getEntries());
+					// add new EntryInfo's using broadcast
+					ExecutionUtils.runIgnore(new RunnableEx() {
+						@Override
+						public void run() throws Exception {
+							getBroadcastPalette().entries(categoryInfo, entryInfoList);
+						}
+					});
+					// convert EntryInfo's into IEntry's
+					List<IEntry> entries = Lists.newArrayList();
+					for (EntryInfo entryInfo : entryInfoList) {
+						if (entryInfo.isVisible()) {
+							IEntry entry = getVisualEntry(entryInfo);
+							if (entry != null) {
+								entries.add(entry);
+							}
+						}
+					}
+					return entries;
+				}
+
+				@Override
+				public String getText() {
+					return categoryInfo.getName();
+				}
+
+				@Override
+				public String getToolTipText() {
+					return categoryInfo.getDescription();
+				}
+
+				@Override
+				public boolean isOpen() {
+					return m_open;
+				}
+
+				@Override
+				public void setOpen(boolean open) {
+					m_open = open;
+					m_openCategories.put(categoryId, open);
+				}
+			};
+			m_categoryInfoToVisual.put(categoryInfo, category);
+			m_visualToCategoryInfo.put(category, categoryInfo);
+			// set "open" state: from map, or default
+			if (m_openCategories.containsKey(categoryId)) {
+				category.setOpen(m_openCategories.get(categoryId));
+			} else {
+				category.setOpen(categoryInfo.isOpen());
+			}
+		}
+		return category;
+	}
+
+	/**
+	 * Shows current {@link PaletteInfo}.
+	 */
+	private void showPalette() {
+		clearEntryCaches();
+		// set IPalette
+		IPalette palette = new IPalette() {
+			@Override
+			public List<ICategory> getCategories() {
+				// check for skipping palette during tests
+				if (System.getProperty(FLAG_NO_PALETTE) != null) {
+					return ImmutableList.of();
+				}
+				// get categories for palette model
+				final List<CategoryInfo> categoryInfoList;
+				{
+					List<CategoryInfo> pristineCategories = m_manager.getPalette().getCategories();
+					categoryInfoList = Lists.newArrayList(pristineCategories);
+				}
+				// add new CategoryInfo's using broadcast
+				ExecutionUtils.runLog(new RunnableEx() {
+					@Override
+					public void run() throws Exception {
+						getBroadcastPalette().categories(categoryInfoList);
+						getBroadcastPalette().categories2(categoryInfoList);
+					}
+				});
+				// convert CategoryInfo's into ICategory's
+				List<ICategory> categories = Lists.newArrayList();
+				for (CategoryInfo categoryInfo : categoryInfoList) {
+					if (shouldBeDisplayed(categoryInfo)) {
+						ICategory category = getVisualCategory(categoryInfo);
+						categories.add(category);
+					}
+				}
+				return categories;
+			}
+
+			@Override
+			public void addPopupActions(IMenuManager menuManager, Object target, int iconsType) {
+				new DesignerPalettePopupActions(getOperations()).addPopupActions(menuManager, target);
+			}
+
+			@Override
+			public void selectDefault() {
+				m_editPartViewer.getEditDomain().loadDefaultTool();
+			}
+
+			@Override
+			public void moveCategory(ICategory _category, ICategory _nextCategory) {
+				CategoryInfo category = m_visualToCategoryInfo.get(_category);
+				CategoryInfo nextCategory = m_visualToCategoryInfo.get(_nextCategory);
+				commands_addWrite(new CategoryMoveCommand(category, nextCategory));
+			}
+
+			@Override
+			public void moveEntry(IEntry _entry, ICategory _targetCategory, IEntry _nextEntry) {
+				EntryInfo entry = m_visualToEntryInfo.get(_entry);
+				CategoryInfo category = m_visualToCategoryInfo.get(_targetCategory);
+				EntryInfo nextEntry = m_visualToEntryInfo.get(_nextEntry);
+				commands_addWrite(new EntryMoveCommand(entry, category, nextEntry));
+			}
+		};
+		m_paletteComposite.setPalette(palette);
+		configure_EditDomain_DefaultTool();
+	}
+
+	private DesignerPaletteOperations getOperations() {
+		return m_operations;
+	}
+
+	/**
+	 * @return <code>true</code> if given {@link CategoryInfo} should be displayed.
+	 */
+	private boolean shouldBeDisplayed(CategoryInfo category) {
+		if (!category.isVisible()) {
+			return false;
+		}
+		if (category.isOptional()) {
+			return !getVisualCategory(category).getEntries().isEmpty();
+		}
+		return true;
+	}
+
+	private void configure_EditDomain_DefaultTool() {
+		if (m_isMainPalette) {
+			final EditDomain editDomain = m_editPartViewer.getEditDomain();
+			editDomain.setDefaultToolProvider(new IDefaultToolProvider() {
+				@Override
+				public void loadDefaultTool() {
+					if (m_defaultEntry != null) {
+						m_paletteComposite.selectEntry(m_defaultEntry, false);
+					} else {
+						editDomain.setActiveTool(new SelectionTool());
+					}
+				}
+			});
+			editDomain.loadDefaultTool();
+		}
+	}
+
+	/**
+	 * Refreshes visual palette.
+	 */
+	private void refreshVisualPalette() {
+		m_paletteComposite.refreshPalette();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Palette operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	final class DesignerPaletteOperations {
+		/**
+		 * Edits palette using {@link PaletteManagerDialog}.
+		 */
+		public void editPalette() {
+			PaletteManagerDialog dialog =
+					new PaletteManagerDialog(m_rootObject.getContext(),
+							m_manager.getPalette(),
+							m_goodEntryInfos);
+			// reload in any case
+			reloadPalette();
+			// add commands used to update palette in dialog
+			if (dialog.open() == Window.OK) {
+				commands_addWrite(dialog.getCommands());
+			}
+		}
+
+		public void defaultPalette() {
+			m_manager.commands_clear();
+			m_manager.commands_write();
+			m_openCategories.clear();
+			reloadPalette();
+		}
+
+		/**
+		 * Changes palette preferences.
+		 */
+		public void editPreferences() {
+			PalettePreferencesDialog dialog = new PalettePreferencesDialog(getShell(), m_preferences);
+			if (dialog.open() == Window.OK) {
+				dialog.commit();
+				m_paletteComposite.setPreferences(m_preferences);
+			}
+		}
+
+		public EntryInfo getEntry(Object target) {
+			return m_visualToEntryInfo.get(target);
+		}
+
+		public CategoryInfo getCategory(Object target) {
+			return m_visualToCategoryInfo.get(target);
+		}
+
+		public void addComponent(CategoryInfo category) {
+			ComponentAddDialog dialog =
+					new ComponentAddDialog(getShell(),
+							m_rootObject.getContext(),
+							m_manager.getPalette(),
+							category);
+			if (dialog.open() == Window.OK) {
+				commands_addWrite(dialog.getCommand());
+			}
+		}
+
+		public void editEntry(ToolEntryInfo targetEntry) {
+			AbstractPaletteElementDialog dialog = null;
+			// prepare editing dialog
+			if (targetEntry instanceof ComponentEntryInfo) {
+				ComponentEntryInfo entryInfo = (ComponentEntryInfo) targetEntry;
+				dialog = new ComponentEditDialog(getShell(), m_rootObject.getContext(), entryInfo);
+			}
+			// execute dialog
+			if (dialog != null && dialog.open() == Window.OK) {
+				// remove visual for component, so re-initialize them
+				m_entryInfoToVisual.remove(targetEntry);
+				m_knownEntryInfos.remove(targetEntry);
+				m_goodEntryInfos.remove(targetEntry);
+				// do updates
+				commands_addWrite(dialog.getCommand());
+			}
+		}
+
+		public void removeEntry(EntryInfo targetEntry) {
+			commands_addWrite(new EntryRemoveCommand(targetEntry));
+		}
+
+		public void addCategory(CategoryInfo nextCategory) {
+			CategoryAddDialog dialog =
+					new CategoryAddDialog(getShell(), m_manager.getPalette(), nextCategory);
+			if (dialog.open() == Window.OK) {
+				commands_addWrite(dialog.getCommand());
+			}
+		}
+
+		public void editCategory(CategoryInfo targetCategory) {
+			CategoryEditDialog dialog = new CategoryEditDialog(getShell(), targetCategory);
+			if (dialog.open() == Window.OK) {
+				commands_addWrite(dialog.getCommand());
+			}
+		}
+
+		public void removeCategory(CategoryInfo targetCategory) {
+			commands_addWrite(new CategoryRemoveCommand(targetCategory));
+		}
+
+		public void importPalette(String path) throws Exception {
+			m_manager.importFrom(path);
+			reloadPalette();
+		}
+
+		public void exportPalette(String path) throws Exception {
+			m_manager.exportTo(path);
+		}
+
+		public String getToolkitId() {
+			return m_manager.getToolkitId();
+		}
+
+		public Shell getShell() {
+			return m_paletteComposite.getShell();
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/DesignerPalettePopupActions.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/DesignerPalettePopupActions.java
index 223d9cc8b..82dbfb36b 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/DesignerPalettePopupActions.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/DesignerPalettePopupActions.java
@@ -39,245 +39,245 @@
  * @coverage XML.editor.palette.ui
  */
 final class DesignerPalettePopupActions {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constants
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final ImageDescriptor ID_ADD_CATEGORY = getImageDescription("add_category.gif");
-  private static final ImageDescriptor ID_ADD_COMPONENT = getImageDescription("add_component.gif");
-  private static final ImageDescriptor ID_REMOVE = getImageDescription("remove.gif");
-  private static final ImageDescriptor ID_MANAGER = getImageDescription("manager.gif");
-  private static final ImageDescriptor ID_SETTINGS = getImageDescription("settings.png");
-  private static final ImageDescriptor ID_IMPORT = getImageDescription("import.png");
-  private static final ImageDescriptor ID_EXPORT = getImageDescription("export.png");
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance fields
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final DesignerPaletteOperations m_operations;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constants
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final ImageDescriptor ID_ADD_CATEGORY = getImageDescription("add_category.gif");
+	private static final ImageDescriptor ID_ADD_COMPONENT = getImageDescription("add_component.gif");
+	private static final ImageDescriptor ID_REMOVE = getImageDescription("remove.gif");
+	private static final ImageDescriptor ID_MANAGER = getImageDescription("manager.gif");
+	private static final ImageDescriptor ID_SETTINGS = getImageDescription("settings.png");
+	private static final ImageDescriptor ID_IMPORT = getImageDescription("import.png");
+	private static final ImageDescriptor ID_EXPORT = getImageDescription("export.png");
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance fields
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final DesignerPaletteOperations m_operations;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DesignerPalettePopupActions(DesignerPaletteOperations operations) {
-    m_operations = operations;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DesignerPalettePopupActions(DesignerPaletteOperations operations) {
+		m_operations = operations;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Popup
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link ImageDescriptor} for palette image.
-   */
-  private static ImageDescriptor getImageDescription(String path) {
-    return DesignerPlugin.getImageDescriptor("palette/" + path);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Popup
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link ImageDescriptor} for palette image.
+	 */
+	private static ImageDescriptor getImageDescription(String path) {
+		return DesignerPlugin.getImageDescriptor("palette/" + path);
+	}
 
-  /**
-   * @see IPalette#addPopupActions(IMenuManager, Object)
-   */
-  void addPopupActions(IMenuManager menuManager, Object target) {
-    final EntryInfo targetEntry = getEntry(target);
-    final CategoryInfo targetCategory = getCategory(target);
-    // add category
-    {
-      Action addCategoryAction =
-          new Action(Messages.DesignerPalettePopupActions_addCategory, ID_ADD_CATEGORY) {
-            @Override
-            public void run() {
-              // prepare initial "next category"
-              CategoryInfo nextCategory = null;
-              if (targetCategory != null) {
-                nextCategory = targetCategory;
-              } else if (targetEntry != null) {
-                nextCategory = targetEntry.getCategory();
-              }
-              m_operations.addCategory(nextCategory);
-            }
-          };
-      menuManager.add(addCategoryAction);
-    }
-    // add component
-    {
-      Action addComponentAction =
-          new Action(Messages.DesignerPalettePopupActions_addComponent, ID_ADD_COMPONENT) {
-            @Override
-            public void run() {
-              // prepare category for new component
-              CategoryInfo category = targetCategory;
-              if (targetEntry != null) {
-                category = targetEntry.getCategory();
-              }
-              m_operations.addComponent(category);
-            }
-          };
-      menuManager.add(addComponentAction);
-    }
-    // separator
-    menuManager.add(new Separator());
-    // edit
-    {
-      Action editAction = new Action(Messages.DesignerPalettePopupActions_edit) {
-        @Override
-        public void run() {
-          if (targetCategory != null) {
-            m_operations.editCategory(targetCategory);
-          } else if (targetEntry instanceof ToolEntryInfo) {
-            m_operations.editEntry((ToolEntryInfo) targetEntry);
-          }
-        }
-      };
-      menuManager.add(editAction);
-      editAction.setEnabled(targetCategory != null || targetEntry instanceof ComponentEntryInfo);
-    }
-    // remove
-    {
-      Action removeAction = new Action(Messages.DesignerPalettePopupActions_remove, ID_REMOVE) {
-        @Override
-        public void run() {
-          if (targetEntry != null) {
-            if (MessageDialog.openConfirm(
-                getShell(),
-                Messages.DesignerPalettePopupActions_removeEntryText,
-                MessageFormat.format(
-                    Messages.DesignerPalettePopupActions_removeEntryMessage,
-                    targetEntry.getName()))) {
-              m_operations.removeEntry(targetEntry);
-            }
-          } else if (targetCategory != null) {
-            if (MessageDialog.openConfirm(
-                getShell(),
-                Messages.DesignerPalettePopupActions_removeCategoryText,
-                MessageFormat.format(
-                    Messages.DesignerPalettePopupActions_removeCategoryMessage,
-                    targetCategory.getName()))) {
-              m_operations.removeCategory(targetCategory);
-            }
-          }
-        }
-      };
-      menuManager.add(removeAction);
-      removeAction.setEnabled(targetEntry != null || targetCategory != null);
-    }
-    // separator
-    menuManager.add(new Separator());
-    // default
-    {
-      Action defaultAction = new Action(Messages.DesignerPalettePopupActions_restoreDefault) {
-        @Override
-        public void run() {
-          if (MessageDialog.openConfirm(
-              getShell(),
-              Messages.DesignerPalettePopupActions_restoreText,
-              Messages.DesignerPalettePopupActions_restoreMessage)) {
-            m_operations.defaultPalette();
-          }
-        }
-      };
-      menuManager.add(defaultAction);
-    }
-    // palette manager
-    {
-      Action managerAction =
-          new Action(Messages.DesignerPalettePopupActions_managerAction, ID_MANAGER) {
-            @Override
-            public void run() {
-              m_operations.editPalette();
-            }
-          };
-      menuManager.add(managerAction);
-    }
-    // import/export
-    addImportExport(menuManager);
-    //
-    menuManager.add(new Separator());
-    // settings
-    {
-      Action settingsAction =
-          new Action(Messages.DesignerPalettePopupActions_settingsAction, ID_SETTINGS) {
-            @Override
-            public void run() {
-              m_operations.editPreferences();
-            }
-          };
-      menuManager.add(settingsAction);
-    }
-  }
+	/**
+	 * @see IPalette#addPopupActions(IMenuManager, Object)
+	 */
+	void addPopupActions(IMenuManager menuManager, Object target) {
+		final EntryInfo targetEntry = getEntry(target);
+		final CategoryInfo targetCategory = getCategory(target);
+		// add category
+		{
+			Action addCategoryAction =
+					new Action(Messages.DesignerPalettePopupActions_addCategory, ID_ADD_CATEGORY) {
+				@Override
+				public void run() {
+					// prepare initial "next category"
+					CategoryInfo nextCategory = null;
+					if (targetCategory != null) {
+						nextCategory = targetCategory;
+					} else if (targetEntry != null) {
+						nextCategory = targetEntry.getCategory();
+					}
+					m_operations.addCategory(nextCategory);
+				}
+			};
+			menuManager.add(addCategoryAction);
+		}
+		// add component
+		{
+			Action addComponentAction =
+					new Action(Messages.DesignerPalettePopupActions_addComponent, ID_ADD_COMPONENT) {
+				@Override
+				public void run() {
+					// prepare category for new component
+					CategoryInfo category = targetCategory;
+					if (targetEntry != null) {
+						category = targetEntry.getCategory();
+					}
+					m_operations.addComponent(category);
+				}
+			};
+			menuManager.add(addComponentAction);
+		}
+		// separator
+		menuManager.add(new Separator());
+		// edit
+		{
+			Action editAction = new Action(Messages.DesignerPalettePopupActions_edit) {
+				@Override
+				public void run() {
+					if (targetCategory != null) {
+						m_operations.editCategory(targetCategory);
+					} else if (targetEntry instanceof ToolEntryInfo) {
+						m_operations.editEntry((ToolEntryInfo) targetEntry);
+					}
+				}
+			};
+			menuManager.add(editAction);
+			editAction.setEnabled(targetCategory != null || targetEntry instanceof ComponentEntryInfo);
+		}
+		// remove
+		{
+			Action removeAction = new Action(Messages.DesignerPalettePopupActions_remove, ID_REMOVE) {
+				@Override
+				public void run() {
+					if (targetEntry != null) {
+						if (MessageDialog.openConfirm(
+								getShell(),
+								Messages.DesignerPalettePopupActions_removeEntryText,
+								MessageFormat.format(
+										Messages.DesignerPalettePopupActions_removeEntryMessage,
+										targetEntry.getName()))) {
+							m_operations.removeEntry(targetEntry);
+						}
+					} else if (targetCategory != null) {
+						if (MessageDialog.openConfirm(
+								getShell(),
+								Messages.DesignerPalettePopupActions_removeCategoryText,
+								MessageFormat.format(
+										Messages.DesignerPalettePopupActions_removeCategoryMessage,
+										targetCategory.getName()))) {
+							m_operations.removeCategory(targetCategory);
+						}
+					}
+				}
+			};
+			menuManager.add(removeAction);
+			removeAction.setEnabled(targetEntry != null || targetCategory != null);
+		}
+		// separator
+		menuManager.add(new Separator());
+		// default
+		{
+			Action defaultAction = new Action(Messages.DesignerPalettePopupActions_restoreDefault) {
+				@Override
+				public void run() {
+					if (MessageDialog.openConfirm(
+							getShell(),
+							Messages.DesignerPalettePopupActions_restoreText,
+							Messages.DesignerPalettePopupActions_restoreMessage)) {
+						m_operations.defaultPalette();
+					}
+				}
+			};
+			menuManager.add(defaultAction);
+		}
+		// palette manager
+		{
+			Action managerAction =
+					new Action(Messages.DesignerPalettePopupActions_managerAction, ID_MANAGER) {
+				@Override
+				public void run() {
+					m_operations.editPalette();
+				}
+			};
+			menuManager.add(managerAction);
+		}
+		// import/export
+		addImportExport(menuManager);
+		//
+		menuManager.add(new Separator());
+		// settings
+		{
+			Action settingsAction =
+					new Action(Messages.DesignerPalettePopupActions_settingsAction, ID_SETTINGS) {
+				@Override
+				public void run() {
+					m_operations.editPreferences();
+				}
+			};
+			menuManager.add(settingsAction);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Import/export
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void addImportExport(IMenuManager menuManager) {
-    Action importAction = new Action(Messages.DesignerPalettePopupActions_importAction, ID_IMPORT) {
-      @Override
-      public void run() {
-        importPalette();
-      }
-    };
-    Action exportAction = new Action(Messages.DesignerPalettePopupActions_exportAction, ID_EXPORT) {
-      @Override
-      public void run() {
-        exportPalette();
-      }
-    };
-    menuManager.add(importAction);
-    menuManager.add(exportAction);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Import/export
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void addImportExport(IMenuManager menuManager) {
+		Action importAction = new Action(Messages.DesignerPalettePopupActions_importAction, ID_IMPORT) {
+			@Override
+			public void run() {
+				importPalette();
+			}
+		};
+		Action exportAction = new Action(Messages.DesignerPalettePopupActions_exportAction, ID_EXPORT) {
+			@Override
+			public void run() {
+				exportPalette();
+			}
+		};
+		menuManager.add(importAction);
+		menuManager.add(exportAction);
+	}
 
-  private void exportPalette() {
-    final String path = getImportExportPath(SWT.SAVE);
-    if (path != null) {
-      ExecutionUtils.runLog(new RunnableEx() {
-        @Override
-        public void run() throws Exception {
-          m_operations.exportPalette(path);
-        }
-      });
-    }
-  }
+	private void exportPalette() {
+		final String path = getImportExportPath(SWT.SAVE);
+		if (path != null) {
+			ExecutionUtils.runLog(new RunnableEx() {
+				@Override
+				public void run() throws Exception {
+					m_operations.exportPalette(path);
+				}
+			});
+		}
+	}
 
-  private void importPalette() {
-    final String path = getImportExportPath(SWT.OPEN);
-    if (path != null) {
-      ExecutionUtils.runLog(new RunnableEx() {
-        @Override
-        public void run() throws Exception {
-          m_operations.importPalette(path);
-        }
-      });
-    }
-  }
+	private void importPalette() {
+		final String path = getImportExportPath(SWT.OPEN);
+		if (path != null) {
+			ExecutionUtils.runLog(new RunnableEx() {
+				@Override
+				public void run() throws Exception {
+					m_operations.importPalette(path);
+				}
+			});
+		}
+	}
 
-  private String getImportExportPath(int style) {
-    FileDialog fileDialog = new FileDialog(getShell(), style);
-    fileDialog.setFilterExtensions(new String[]{"*.xml"});
-    fileDialog.setFilterNames(new String[]{Messages.DesignerPalettePopupActions_filterCommandsName});
-    fileDialog.setFileName(m_operations.getToolkitId() + ".xml");
-    return fileDialog.open();
-  }
+	private String getImportExportPath(int style) {
+		FileDialog fileDialog = new FileDialog(getShell(), style);
+		fileDialog.setFilterExtensions(new String[]{"*.xml"});
+		fileDialog.setFilterNames(new String[]{Messages.DesignerPalettePopupActions_filterCommandsName});
+		fileDialog.setFileName(m_operations.getToolkitId() + ".xml");
+		return fileDialog.open();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Misc
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Shell getShell() {
-    return m_operations.getShell();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Misc
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Shell getShell() {
+		return m_operations.getShell();
+	}
 
-  private CategoryInfo getCategory(Object target) {
-    return m_operations.getCategory(target);
-  }
+	private CategoryInfo getCategory(Object target) {
+		return m_operations.getCategory(target);
+	}
 
-  private EntryInfo getEntry(Object target) {
-    return m_operations.getEntry(target);
-  }
+	private EntryInfo getEntry(Object target) {
+		return m_operations.getEntry(target);
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/PaletteEventListener.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/PaletteEventListener.java
index a6719bd51..61086959b 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/PaletteEventListener.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/PaletteEventListener.java
@@ -22,27 +22,27 @@
  * @coverage XML.editor.palette.ui
  */
 public abstract class PaletteEventListener {
-  /**
-   * Listener can update list of {@link CategoryInfo}'s.
-   */
-  public void categories(List<CategoryInfo> categories) throws Exception {
-  }
+	/**
+	 * Listener can update list of {@link CategoryInfo}'s.
+	 */
+	public void categories(List<CategoryInfo> categories) throws Exception {
+	}
 
-  /**
-   * Listener can update list of {@link CategoryInfo}'s.<br>
-   * This method is invoked after {@link #categories(List)}. Sometimes one method is not enough, for
-   * example there may be two listeners, both add categories, order of these listeners is not known,
-   * but one of them knows, that it wants to place its categories after others.
-   */
-  public void categories2(List<CategoryInfo> categories) throws Exception {
-  }
+	/**
+	 * Listener can update list of {@link CategoryInfo}'s.<br>
+	 * This method is invoked after {@link #categories(List)}. Sometimes one method is not enough, for
+	 * example there may be two listeners, both add categories, order of these listeners is not known,
+	 * but one of them knows, that it wants to place its categories after others.
+	 */
+	public void categories2(List<CategoryInfo> categories) throws Exception {
+	}
 
-  /**
-   * Listener can update list of {@link EntryInfo}'s.<br>
-   * This event is useful, if you want to add new {@link EntryInfo}'s into existing
-   * {@link CategoryInfo}'s. If to want to add new {@link CategoryInfo} with {@link EntryInfo}'s, it
-   * is better to use {@link #categories(List)}.
-   */
-  public void entries(CategoryInfo category, List<EntryInfo> entries) throws Exception {
-  }
+	/**
+	 * Listener can update list of {@link EntryInfo}'s.<br>
+	 * This event is useful, if you want to add new {@link EntryInfo}'s into existing
+	 * {@link CategoryInfo}'s. If to want to add new {@link CategoryInfo} with {@link EntryInfo}'s, it
+	 * is better to use {@link #categories(List)}.
+	 */
+	public void entries(CategoryInfo category, List<EntryInfo> entries) throws Exception {
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/PaletteManager.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/PaletteManager.java
index 63074d421..334058f76 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/PaletteManager.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/PaletteManager.java
@@ -77,494 +77,494 @@
  * @coverage XML.editor.palette
  */
 public final class PaletteManager {
-  private final XmlObjectInfo m_rootObject;
-  private final EditorContext m_context;
-  private final ClassLoader m_classLoader;
-  private final IJavaProject m_javaProject;
-  private final IProject m_project;
-  private final String m_toolkitId;
-  private PaletteInfo m_paletteInfo;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public PaletteManager(XmlObjectInfo rootObject, String toolkitId) {
-    m_rootObject = rootObject;
-    m_context = rootObject.getContext();
-    m_classLoader = m_context.getClassLoader();
-    m_javaProject = m_context.getJavaProject();
-    m_project = m_javaProject.getProject();
-    m_toolkitId = toolkitId;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the ID of toolkit.
-   */
-  public String getToolkitId() {
-    return m_toolkitId;
-  }
-
-  /**
-   * @return the current palette.
-   */
-  public PaletteInfo getPalette() {
-    return m_paletteInfo;
-  }
-
-  /**
-   * @return the copy of current palette.
-   */
-  public PaletteInfo getPaletteCopy() {
-    PaletteManager manager = new PaletteManager(m_rootObject, m_toolkitId);
-    manager.reloadPalette();
-    return manager.getPalette();
-  }
-
-  /**
-   * Loads new base palette, applies commands.
-   */
-  public void reloadPalette() {
-    m_paletteInfo = new PaletteInfo();
-    if (m_toolkitId != null) {
-      ExecutionUtils.runLog(new RunnableEx() {
-        @Override
-        public void run() throws Exception {
-          parseExtensionPalette();
-          parseCustomPalette();
-          processReorderRequests();
-          // apply commands
-          commands_apply();
-        }
-      });
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Import/export
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void exportTo(String path) throws Exception {
-    File commandsFile = commands_getFile();
-    FileUtils.copyFile(commandsFile, new File(path));
-  }
-
-  public void importFrom(String path) throws Exception {
-    File commandsFile = commands_getFile();
-    FileUtils.copyFile(new File(path), commandsFile);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final List<Class<? extends Command>> m_commandClasses = Lists.newArrayList();
-  static {
-    m_commandClasses.add(ElementVisibilityCommand.class);
-    m_commandClasses.add(CategoryAddCommand.class);
-    m_commandClasses.add(CategoryEditCommand.class);
-    m_commandClasses.add(CategoryMoveCommand.class);
-    m_commandClasses.add(CategoryRemoveCommand.class);
-    m_commandClasses.add(EntryMoveCommand.class);
-    m_commandClasses.add(EntryRemoveCommand.class);
-    m_commandClasses.add(ComponentAddCommand.class);
-    m_commandClasses.add(ComponentEditCommand.class);
-  }
-  private static final Map<String, Class<? extends Command>> m_idToCommandClass = Maps.newTreeMap();
-  private List<Command> m_commands;
-
-  /**
-   * Applies commands for modifying palette.
-   */
-  private void commands_apply() throws Exception {
-    // prepare mapping: id -> command class
-    if (m_idToCommandClass.isEmpty()) {
-      for (Class<? extends Command> commandClass : m_commandClasses) {
-        String id = (String) commandClass.getField("ID").get(null);
-        m_idToCommandClass.put(id, commandClass);
-      }
-    }
-    // read commands
-    commandsRead();
-  }
-
-  private void commandsRead() throws Exception {
-    m_commands = Lists.newArrayList();
-    // read-only "wbp-meta" from classpath, for example from jar's
-    {
-      String commandsPath = "wbp-meta/" + m_toolkitId + ".wbp-palette-commands.xml";
-      Enumeration<URL> resources = m_classLoader.getResources(commandsPath);
-      while (resources.hasMoreElements()) {
-        InputStream inputStream = resources.nextElement().openStream();
-        commandsRead_fromStream(inputStream);
-      }
-    }
-    // from read-write file
-    File commandsFile = commands_getFile();
-    if (commandsFile.exists()) {
-      InputStream inputStream = new FileInputStream(commandsFile);
-      commandsRead_fromStream(inputStream);
-    }
-  }
-
-  private void commandsRead_fromStream(final InputStream inputStream) throws Exception {
-    try {
-      ExecutionUtils.runIgnore(new RunnableEx() {
-        @Override
-        public void run() throws Exception {
-          commandsRead_fromStream0(inputStream);
-        }
-      });
-    } finally {
-      IOUtils.closeQuietly(inputStream);
-    }
-  }
-
-  private void commandsRead_fromStream0(InputStream inputStream) throws Exception {
-    SAXParser parser = SAXParserFactory.newInstance().newSAXParser();
-    parser.parse(inputStream, new DefaultHandler() {
-      @Override
-      public void startElement(String uri,
-          String localName,
-          final String name,
-          final Attributes attributes) {
-        ExecutionUtils.runIgnore(new RunnableEx() {
-          @Override
-          public void run() throws Exception {
-            commandsRead_singleCommand(name, attributes);
-          }
-        });
-      }
-    });
-  }
-
-  private void commandsRead_singleCommand(String name, Attributes attributes) throws Exception {
-    // prepare command class
-    Class<? extends Command> commandClass;
-    {
-      commandClass = m_idToCommandClass.get(name);
-      if (commandClass == null) {
-        return;
-      }
-    }
-    // create command
-    Command command;
-    {
-      Constructor<? extends Command> constructor =
-          commandClass.getConstructor(new Class[]{Attributes.class});
-      command = constructor.newInstance(new Object[]{attributes});
-    }
-    // add command
-    commands_add(command);
-  }
-
-  /**
-   * Removes all saved commands, so rollbacks palette into initial state.
-   */
-  public void commands_clear() {
-    m_commands.clear();
-  }
-
-  /**
-   * Adds given {@link Command} to the list (and executes it).
-   */
-  public void commands_add(final Command command) {
-    ExecutionUtils.runIgnore(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        command.execute(m_paletteInfo);
-        command.addToCommandList(m_commands);
-      }
-    });
-  }
-
-  /**
-   * Stores current {@link Command}'s {@link List}.
-   */
-  public void commands_write() {
-    ExecutionUtils.runLog(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        File commandsFile = commands_getFile();
-        PrintWriter writer = new PrintWriter(new FileOutputStream(commandsFile));
-        try {
-          writer.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
-          writer.println("<commands>");
-          // write separate commands
-          for (Command command : m_commands) {
-            writer.println(command.toString());
-          }
-          // close
-          writer.println("</commands>");
-        } finally {
-          writer.close();
-        }
-        // we may be saved something in "wbp-meta", so refresh it
-        m_project.getFolder("wbp-meta").refreshLocal(IResource.DEPTH_INFINITE, null);
-      }
-    });
-  }
-
-  /**
-   * @return the {@link File} with {@link Command}'s for current GUI toolkit.
-   */
-  private File commands_getFile() throws Exception {
-    // check for palette commands file in project "wbp-meta"
-    {
-      Path commandsFilePath = new Path("wbp-meta/" + m_toolkitId + ".wbp-palette-commands.xml");
-      IFile commandsFile = m_project.getFile(commandsFilePath);
-      if (commandsFile.exists()) {
-        return commandsFile.getLocation().toFile();
-      }
-    }
-    // save commands in plugin state
-    File stateDirectory = DesignerPlugin.getDefault().getStateLocation().toFile();
-    File palettesDirectory = new File(stateDirectory, "palettes");
-    FileUtils.forceMkdir(palettesDirectory);
-    return new File(palettesDirectory, m_toolkitId + ".commands");
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Extensions parsing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final Set<Pair<String, String>> m_categoryReorderRequests = Sets.newHashSet();
-
-  /**
-   * Fills {@link #m_paletteInfo} using contributed extensions.
-   */
-  private void parseExtensionPalette() {
-    // prepare <toolkit>/<palette> elements
-    List<IConfigurationElement> paletteElements = Lists.newArrayList();
-    for (IConfigurationElement toolkitElement : DescriptionHelper.getToolkitElements(m_toolkitId)) {
-      for (IConfigurationElement paletteElement : toolkitElement.getChildren("palette")) {
-        if (isConditionTrue(paletteElement)) {
-          paletteElements.add(paletteElement);
-        }
-      }
-    }
-    // add all categories first, order of contributions is undetermined
-    for (IConfigurationElement paletteElement : paletteElements) {
-      IConfigurationElement[] categoryElements = paletteElement.getChildren("category");
-      for (IConfigurationElement categoryElement : categoryElements) {
-        if (isConditionTrue(categoryElement)) {
-          processCategory(categoryElement);
-        }
-      }
-    }
-    // add other elements
-    for (IConfigurationElement paletteElement : paletteElements) {
-      processPaletteChildren(m_paletteInfo, null, paletteElement);
-    }
-  }
-
-  /**
-   * Process single category contribution.
-   */
-  private void processCategory(IConfigurationElement categoryElement) {
-    AttributesProvider attributesProvider = AttributesProviders.get(categoryElement);
-    CategoryInfo categoryInfo = new CategoryInfo(attributesProvider);
-    m_paletteInfo.addCategory(categoryInfo);
-    addReorderRequest(categoryInfo, attributesProvider);
-    processPaletteChildren(m_paletteInfo, categoryInfo, categoryElement);
-  }
-
-  /**
-   * Check if given {@link CategoryInfo} has "next" attribute to put it before some other category.
-   */
-  private void addReorderRequest(CategoryInfo categoryInfo, AttributesProvider attributesProvider) {
-    String nextCategoryId = attributesProvider.getAttribute("next");
-    if (nextCategoryId != null) {
-      m_categoryReorderRequests.add(Pair.create(categoryInfo.getId(), nextCategoryId));
-    }
-  }
-
-  /**
-   * Executes delayed {@link #m_categoryReorderRequests}.
-   */
-  private void processReorderRequests() {
-    for (Pair<String, String> reorder : m_categoryReorderRequests) {
-      m_paletteInfo.moveCategory(reorder.getLeft(), reorder.getRight());
-    }
-  }
-
-  /**
-   * Process all contributions in given parent {@link IConfigurationElement} for "palette".
-   */
-  private void processPaletteChildren(PaletteInfo paletteInfo,
-      CategoryInfo categoryInfo,
-      IConfigurationElement parentElement) {
-    for (IConfigurationElement element : parentElement.getChildren()) {
-      if (!element.getName().equals("category")) {
-        processCategoryChild(paletteInfo, categoryInfo, element);
-      }
-    }
-  }
-
-  /**
-   * Process single child of category contribution.
-   */
-  private void processCategoryChild(final PaletteInfo paletteInfo,
-      final CategoryInfo _categoryInfo,
-      final IConfigurationElement element) {
-    ExecutionUtils.runLog(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        // prepare category
-        CategoryInfo categoryInfo = _categoryInfo;
-        if (categoryInfo == null) {
-          String categoryId = element.getAttribute("category");
-          Assert.isNotNull(
-              categoryId,
-              "Element defined outside of category, so requires 'category' attribute.");
-          categoryInfo = paletteInfo.getCategory(categoryId);
-          Assert.isNotNull(categoryInfo, "No category with id '" + categoryId + "' found.");
-        }
-        // generic entry
-        if ("x-entry".equals(element.getName())) {
-          EntryInfo entryInfo = (EntryInfo) element.createExecutableExtension("class");
-          // set id
-          {
-            String id = element.getAttribute("id");
-            if (id != null) {
-              entryInfo.setId(id);
-            }
-          }
-          // set optional name
-          {
-            String name = element.getAttribute("name");
-            if (name != null) {
-              entryInfo.setName(name);
-            }
-          }
-          // add
-          categoryInfo.addEntry(entryInfo);
-        }
-        // component entry
-        if ("component".equals(element.getName())) {
-          if (isConditionTrue(element)) {
-            EntryInfo entryInfo = new ComponentEntryInfo(categoryInfo, element);
-            categoryInfo.addEntry(entryInfo);
-          }
-        }
-      }
-    });
-  }
-
-  /**
-   * @return <code>true</code> if "condition" attribute is empty or evaluates to <code>true</code>.
-   */
-  private boolean isConditionTrue(IConfigurationElement element) {
-    String condition = element.getAttribute("condition");
-    // no condition
-    if (condition == null) {
-      return true;
-    }
-    // evaluate condition
-    Map<String, Object> variables = Maps.newHashMap();
-    variables.put("rootModel", m_rootObject);
-    variables.putAll(m_context.getVersions());
-    Object result = ScriptUtils.evaluate(condition, variables);
-    return result instanceof Boolean ? (Boolean) result : false;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // "wbp-meta" parsing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Parses custom palettes in "wbp-meta".
-   */
-  private void parseCustomPalette() throws Exception {
-    String palettePath = "wbp-meta/" + m_toolkitId + ".wbp-palette.xml";
-    // parse "wbp-meta" from classpath, for example from jar's
-    {
-      Enumeration<URL> resources = m_classLoader.getResources(palettePath);
-      while (resources.hasMoreElements()) {
-        URL url = resources.nextElement();
-        parseCustomPalette(url.openStream(), url.toString());
-      }
-    }
-    // parse "wbp-meta" from IJavaProject's
-    {
-      List<IFile> files = ProjectUtils.findFiles(m_javaProject, palettePath);
-      for (IFile file : files) {
-        String sourceDescription = file.toString();
-        try {
-          parseCustomPalette(file.getContents(true), sourceDescription);
-        } catch (Throwable e) {
-          m_context.addWarning(new EditorWarning("Can not parse " + sourceDescription, e));
-        }
-      }
-    }
-  }
-
-  /**
-   * Parses single custom palette contribution.
-   *
-   * @param inputStream
-   *          the {@link InputStream} with palette XML.
-   * @param sourceDescription
-   *          the textual description to show for user, that can help in detecting palette XML in
-   *          case of any error.
-   */
-  private void parseCustomPalette(InputStream inputStream, String sourceDescription)
-      throws Exception {
-    try {
-      SAXParser parser = SAXParserFactory.newInstance().newSAXParser();
-      parser.parse(inputStream, new DefaultHandler() {
-        private CategoryInfo m_category;
-
-        @Override
-        public void startElement(String uri, String localTag, String tag, Attributes attributes)
-            throws SAXException {
-          if ("category".equals(tag)) {
-            AttributesProvider attributesProvider = AttributesProviders.get(attributes);
-            m_category = new CategoryInfo(attributesProvider);
-            m_paletteInfo.addCategory(m_category);
-            addReorderRequest(m_category, attributesProvider);
-          } else if ("component".equals(tag)) {
-            CategoryInfo category = getTargetCategory(attributes);
-            AttributesProvider attributesProvider = AttributesProviders.get(attributes);
-            ComponentEntryInfo component = new ComponentEntryInfo(category, attributesProvider);
-            category.addEntry(component);
-          }
-        }
-
-        private CategoryInfo getTargetCategory(Attributes attributes) {
-          CategoryInfo category = m_category;
-          if (category == null) {
-            String categoryId = attributes.getValue("category");
-            Assert.isNotNull(
-                categoryId,
-                "Element defined outside of category, so requires 'category' attribute.");
-            category = m_paletteInfo.getCategory(categoryId);
-            Assert.isNotNull(category, "No category with id '" + categoryId + "' found.");
-          }
-          return category;
-        }
-
-        @Override
-        public void endElement(String uri, String localName, String tag) throws SAXException {
-          if ("category".equals(tag)) {
-            m_category = null;
-          }
-        }
-      });
-    } catch (Throwable e) {
-      DesignerPlugin.log("Exception during loading project palette: " + sourceDescription, e);
-    } finally {
-      IOUtils.closeQuietly(inputStream);
-    }
-  }
+	private final XmlObjectInfo m_rootObject;
+	private final EditorContext m_context;
+	private final ClassLoader m_classLoader;
+	private final IJavaProject m_javaProject;
+	private final IProject m_project;
+	private final String m_toolkitId;
+	private PaletteInfo m_paletteInfo;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public PaletteManager(XmlObjectInfo rootObject, String toolkitId) {
+		m_rootObject = rootObject;
+		m_context = rootObject.getContext();
+		m_classLoader = m_context.getClassLoader();
+		m_javaProject = m_context.getJavaProject();
+		m_project = m_javaProject.getProject();
+		m_toolkitId = toolkitId;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the ID of toolkit.
+	 */
+	public String getToolkitId() {
+		return m_toolkitId;
+	}
+
+	/**
+	 * @return the current palette.
+	 */
+	public PaletteInfo getPalette() {
+		return m_paletteInfo;
+	}
+
+	/**
+	 * @return the copy of current palette.
+	 */
+	public PaletteInfo getPaletteCopy() {
+		PaletteManager manager = new PaletteManager(m_rootObject, m_toolkitId);
+		manager.reloadPalette();
+		return manager.getPalette();
+	}
+
+	/**
+	 * Loads new base palette, applies commands.
+	 */
+	public void reloadPalette() {
+		m_paletteInfo = new PaletteInfo();
+		if (m_toolkitId != null) {
+			ExecutionUtils.runLog(new RunnableEx() {
+				@Override
+				public void run() throws Exception {
+					parseExtensionPalette();
+					parseCustomPalette();
+					processReorderRequests();
+					// apply commands
+					commands_apply();
+				}
+			});
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Import/export
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void exportTo(String path) throws Exception {
+		File commandsFile = commands_getFile();
+		FileUtils.copyFile(commandsFile, new File(path));
+	}
+
+	public void importFrom(String path) throws Exception {
+		File commandsFile = commands_getFile();
+		FileUtils.copyFile(new File(path), commandsFile);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final List<Class<? extends Command>> m_commandClasses = Lists.newArrayList();
+	static {
+		m_commandClasses.add(ElementVisibilityCommand.class);
+		m_commandClasses.add(CategoryAddCommand.class);
+		m_commandClasses.add(CategoryEditCommand.class);
+		m_commandClasses.add(CategoryMoveCommand.class);
+		m_commandClasses.add(CategoryRemoveCommand.class);
+		m_commandClasses.add(EntryMoveCommand.class);
+		m_commandClasses.add(EntryRemoveCommand.class);
+		m_commandClasses.add(ComponentAddCommand.class);
+		m_commandClasses.add(ComponentEditCommand.class);
+	}
+	private static final Map<String, Class<? extends Command>> m_idToCommandClass = Maps.newTreeMap();
+	private List<Command> m_commands;
+
+	/**
+	 * Applies commands for modifying palette.
+	 */
+	private void commands_apply() throws Exception {
+		// prepare mapping: id -> command class
+		if (m_idToCommandClass.isEmpty()) {
+			for (Class<? extends Command> commandClass : m_commandClasses) {
+				String id = (String) commandClass.getField("ID").get(null);
+				m_idToCommandClass.put(id, commandClass);
+			}
+		}
+		// read commands
+		commandsRead();
+	}
+
+	private void commandsRead() throws Exception {
+		m_commands = Lists.newArrayList();
+		// read-only "wbp-meta" from classpath, for example from jar's
+		{
+			String commandsPath = "wbp-meta/" + m_toolkitId + ".wbp-palette-commands.xml";
+			Enumeration<URL> resources = m_classLoader.getResources(commandsPath);
+			while (resources.hasMoreElements()) {
+				InputStream inputStream = resources.nextElement().openStream();
+				commandsRead_fromStream(inputStream);
+			}
+		}
+		// from read-write file
+		File commandsFile = commands_getFile();
+		if (commandsFile.exists()) {
+			InputStream inputStream = new FileInputStream(commandsFile);
+			commandsRead_fromStream(inputStream);
+		}
+	}
+
+	private void commandsRead_fromStream(final InputStream inputStream) throws Exception {
+		try {
+			ExecutionUtils.runIgnore(new RunnableEx() {
+				@Override
+				public void run() throws Exception {
+					commandsRead_fromStream0(inputStream);
+				}
+			});
+		} finally {
+			IOUtils.closeQuietly(inputStream);
+		}
+	}
+
+	private void commandsRead_fromStream0(InputStream inputStream) throws Exception {
+		SAXParser parser = SAXParserFactory.newInstance().newSAXParser();
+		parser.parse(inputStream, new DefaultHandler() {
+			@Override
+			public void startElement(String uri,
+					String localName,
+					final String name,
+					final Attributes attributes) {
+				ExecutionUtils.runIgnore(new RunnableEx() {
+					@Override
+					public void run() throws Exception {
+						commandsRead_singleCommand(name, attributes);
+					}
+				});
+			}
+		});
+	}
+
+	private void commandsRead_singleCommand(String name, Attributes attributes) throws Exception {
+		// prepare command class
+		Class<? extends Command> commandClass;
+		{
+			commandClass = m_idToCommandClass.get(name);
+			if (commandClass == null) {
+				return;
+			}
+		}
+		// create command
+		Command command;
+		{
+			Constructor<? extends Command> constructor =
+					commandClass.getConstructor(new Class[]{Attributes.class});
+			command = constructor.newInstance(new Object[]{attributes});
+		}
+		// add command
+		commands_add(command);
+	}
+
+	/**
+	 * Removes all saved commands, so rollbacks palette into initial state.
+	 */
+	public void commands_clear() {
+		m_commands.clear();
+	}
+
+	/**
+	 * Adds given {@link Command} to the list (and executes it).
+	 */
+	public void commands_add(final Command command) {
+		ExecutionUtils.runIgnore(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				command.execute(m_paletteInfo);
+				command.addToCommandList(m_commands);
+			}
+		});
+	}
+
+	/**
+	 * Stores current {@link Command}'s {@link List}.
+	 */
+	public void commands_write() {
+		ExecutionUtils.runLog(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				File commandsFile = commands_getFile();
+				PrintWriter writer = new PrintWriter(new FileOutputStream(commandsFile));
+				try {
+					writer.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
+					writer.println("<commands>");
+					// write separate commands
+					for (Command command : m_commands) {
+						writer.println(command.toString());
+					}
+					// close
+					writer.println("</commands>");
+				} finally {
+					writer.close();
+				}
+				// we may be saved something in "wbp-meta", so refresh it
+				m_project.getFolder("wbp-meta").refreshLocal(IResource.DEPTH_INFINITE, null);
+			}
+		});
+	}
+
+	/**
+	 * @return the {@link File} with {@link Command}'s for current GUI toolkit.
+	 */
+	private File commands_getFile() throws Exception {
+		// check for palette commands file in project "wbp-meta"
+		{
+			Path commandsFilePath = new Path("wbp-meta/" + m_toolkitId + ".wbp-palette-commands.xml");
+			IFile commandsFile = m_project.getFile(commandsFilePath);
+			if (commandsFile.exists()) {
+				return commandsFile.getLocation().toFile();
+			}
+		}
+		// save commands in plugin state
+		File stateDirectory = DesignerPlugin.getDefault().getStateLocation().toFile();
+		File palettesDirectory = new File(stateDirectory, "palettes");
+		FileUtils.forceMkdir(palettesDirectory);
+		return new File(palettesDirectory, m_toolkitId + ".commands");
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Extensions parsing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final Set<Pair<String, String>> m_categoryReorderRequests = Sets.newHashSet();
+
+	/**
+	 * Fills {@link #m_paletteInfo} using contributed extensions.
+	 */
+	private void parseExtensionPalette() {
+		// prepare <toolkit>/<palette> elements
+		List<IConfigurationElement> paletteElements = Lists.newArrayList();
+		for (IConfigurationElement toolkitElement : DescriptionHelper.getToolkitElements(m_toolkitId)) {
+			for (IConfigurationElement paletteElement : toolkitElement.getChildren("palette")) {
+				if (isConditionTrue(paletteElement)) {
+					paletteElements.add(paletteElement);
+				}
+			}
+		}
+		// add all categories first, order of contributions is undetermined
+		for (IConfigurationElement paletteElement : paletteElements) {
+			IConfigurationElement[] categoryElements = paletteElement.getChildren("category");
+			for (IConfigurationElement categoryElement : categoryElements) {
+				if (isConditionTrue(categoryElement)) {
+					processCategory(categoryElement);
+				}
+			}
+		}
+		// add other elements
+		for (IConfigurationElement paletteElement : paletteElements) {
+			processPaletteChildren(m_paletteInfo, null, paletteElement);
+		}
+	}
+
+	/**
+	 * Process single category contribution.
+	 */
+	private void processCategory(IConfigurationElement categoryElement) {
+		AttributesProvider attributesProvider = AttributesProviders.get(categoryElement);
+		CategoryInfo categoryInfo = new CategoryInfo(attributesProvider);
+		m_paletteInfo.addCategory(categoryInfo);
+		addReorderRequest(categoryInfo, attributesProvider);
+		processPaletteChildren(m_paletteInfo, categoryInfo, categoryElement);
+	}
+
+	/**
+	 * Check if given {@link CategoryInfo} has "next" attribute to put it before some other category.
+	 */
+	private void addReorderRequest(CategoryInfo categoryInfo, AttributesProvider attributesProvider) {
+		String nextCategoryId = attributesProvider.getAttribute("next");
+		if (nextCategoryId != null) {
+			m_categoryReorderRequests.add(Pair.create(categoryInfo.getId(), nextCategoryId));
+		}
+	}
+
+	/**
+	 * Executes delayed {@link #m_categoryReorderRequests}.
+	 */
+	private void processReorderRequests() {
+		for (Pair<String, String> reorder : m_categoryReorderRequests) {
+			m_paletteInfo.moveCategory(reorder.getLeft(), reorder.getRight());
+		}
+	}
+
+	/**
+	 * Process all contributions in given parent {@link IConfigurationElement} for "palette".
+	 */
+	private void processPaletteChildren(PaletteInfo paletteInfo,
+			CategoryInfo categoryInfo,
+			IConfigurationElement parentElement) {
+		for (IConfigurationElement element : parentElement.getChildren()) {
+			if (!element.getName().equals("category")) {
+				processCategoryChild(paletteInfo, categoryInfo, element);
+			}
+		}
+	}
+
+	/**
+	 * Process single child of category contribution.
+	 */
+	private void processCategoryChild(final PaletteInfo paletteInfo,
+			final CategoryInfo _categoryInfo,
+			final IConfigurationElement element) {
+		ExecutionUtils.runLog(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				// prepare category
+				CategoryInfo categoryInfo = _categoryInfo;
+				if (categoryInfo == null) {
+					String categoryId = element.getAttribute("category");
+					Assert.isNotNull(
+							categoryId,
+							"Element defined outside of category, so requires 'category' attribute.");
+					categoryInfo = paletteInfo.getCategory(categoryId);
+					Assert.isNotNull(categoryInfo, "No category with id '" + categoryId + "' found.");
+				}
+				// generic entry
+				if ("x-entry".equals(element.getName())) {
+					EntryInfo entryInfo = (EntryInfo) element.createExecutableExtension("class");
+					// set id
+					{
+						String id = element.getAttribute("id");
+						if (id != null) {
+							entryInfo.setId(id);
+						}
+					}
+					// set optional name
+					{
+						String name = element.getAttribute("name");
+						if (name != null) {
+							entryInfo.setName(name);
+						}
+					}
+					// add
+					categoryInfo.addEntry(entryInfo);
+				}
+				// component entry
+				if ("component".equals(element.getName())) {
+					if (isConditionTrue(element)) {
+						EntryInfo entryInfo = new ComponentEntryInfo(categoryInfo, element);
+						categoryInfo.addEntry(entryInfo);
+					}
+				}
+			}
+		});
+	}
+
+	/**
+	 * @return <code>true</code> if "condition" attribute is empty or evaluates to <code>true</code>.
+	 */
+	private boolean isConditionTrue(IConfigurationElement element) {
+		String condition = element.getAttribute("condition");
+		// no condition
+		if (condition == null) {
+			return true;
+		}
+		// evaluate condition
+		Map<String, Object> variables = Maps.newHashMap();
+		variables.put("rootModel", m_rootObject);
+		variables.putAll(m_context.getVersions());
+		Object result = ScriptUtils.evaluate(condition, variables);
+		return result instanceof Boolean ? (Boolean) result : false;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// "wbp-meta" parsing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Parses custom palettes in "wbp-meta".
+	 */
+	private void parseCustomPalette() throws Exception {
+		String palettePath = "wbp-meta/" + m_toolkitId + ".wbp-palette.xml";
+		// parse "wbp-meta" from classpath, for example from jar's
+		{
+			Enumeration<URL> resources = m_classLoader.getResources(palettePath);
+			while (resources.hasMoreElements()) {
+				URL url = resources.nextElement();
+				parseCustomPalette(url.openStream(), url.toString());
+			}
+		}
+		// parse "wbp-meta" from IJavaProject's
+		{
+			List<IFile> files = ProjectUtils.findFiles(m_javaProject, palettePath);
+			for (IFile file : files) {
+				String sourceDescription = file.toString();
+				try {
+					parseCustomPalette(file.getContents(true), sourceDescription);
+				} catch (Throwable e) {
+					m_context.addWarning(new EditorWarning("Can not parse " + sourceDescription, e));
+				}
+			}
+		}
+	}
+
+	/**
+	 * Parses single custom palette contribution.
+	 *
+	 * @param inputStream
+	 *          the {@link InputStream} with palette XML.
+	 * @param sourceDescription
+	 *          the textual description to show for user, that can help in detecting palette XML in
+	 *          case of any error.
+	 */
+	private void parseCustomPalette(InputStream inputStream, String sourceDescription)
+			throws Exception {
+		try {
+			SAXParser parser = SAXParserFactory.newInstance().newSAXParser();
+			parser.parse(inputStream, new DefaultHandler() {
+				private CategoryInfo m_category;
+
+				@Override
+				public void startElement(String uri, String localTag, String tag, Attributes attributes)
+						throws SAXException {
+					if ("category".equals(tag)) {
+						AttributesProvider attributesProvider = AttributesProviders.get(attributes);
+						m_category = new CategoryInfo(attributesProvider);
+						m_paletteInfo.addCategory(m_category);
+						addReorderRequest(m_category, attributesProvider);
+					} else if ("component".equals(tag)) {
+						CategoryInfo category = getTargetCategory(attributes);
+						AttributesProvider attributesProvider = AttributesProviders.get(attributes);
+						ComponentEntryInfo component = new ComponentEntryInfo(category, attributesProvider);
+						category.addEntry(component);
+					}
+				}
+
+				private CategoryInfo getTargetCategory(Attributes attributes) {
+					CategoryInfo category = m_category;
+					if (category == null) {
+						String categoryId = attributes.getValue("category");
+						Assert.isNotNull(
+								categoryId,
+								"Element defined outside of category, so requires 'category' attribute.");
+						category = m_paletteInfo.getCategory(categoryId);
+						Assert.isNotNull(category, "No category with id '" + categoryId + "' found.");
+					}
+					return category;
+				}
+
+				@Override
+				public void endElement(String uri, String localName, String tag) throws SAXException {
+					if ("category".equals(tag)) {
+						m_category = null;
+					}
+				}
+			});
+		} catch (Throwable e) {
+			DesignerPlugin.log("Exception during loading project palette: " + sourceDescription, e);
+		} finally {
+			IOUtils.closeQuietly(inputStream);
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/PluginPalettePreferences.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/PluginPalettePreferences.java
index 4a34b08e9..c620a11de 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/PluginPalettePreferences.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/PluginPalettePreferences.java
@@ -29,122 +29,122 @@
  * @coverage XML.editor.palette.ui
  */
 public final class PluginPalettePreferences implements IPalettePreferences {
-  private final IPreferenceStore m_store;
-  private FontDescriptor m_categoryFont;
-  private FontDescriptor m_entryFont;
+	private final IPreferenceStore m_store;
+	private FontDescriptor m_categoryFont;
+	private FontDescriptor m_entryFont;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public PluginPalettePreferences(IPreferenceStore store) {
-    m_store = store;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public PluginPalettePreferences(IPreferenceStore store) {
+		m_store = store;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Keys
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private String m_categoryFontKey;
-  private String m_entryFontKey;
-  private String m_onlyIconsKey;
-  private String m_minColumnsKey;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Keys
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private String m_categoryFontKey;
+	private String m_entryFontKey;
+	private String m_onlyIconsKey;
+	private String m_minColumnsKey;
 	private String m_layoutsKey;
-  /**
-   * Sets the prefix for preference keys.
-   */
-  public void setPrefix(String prefix) {
-    // prepare keys
-    m_categoryFontKey = prefix + ".category.font";
-    m_entryFontKey = prefix + ".entry.font";
-    m_onlyIconsKey = prefix + ".onlyIcons";
-    m_minColumnsKey = prefix + ".columns.min";
-	m_layoutsKey = prefix + ".layouts.type";
-    // set default values
-    {
-      {
-        FontData defaultFontData = Display.getDefault().getSystemFont().getFontData()[0];
-        FontData boldFontData =
-            new FontData(defaultFontData.getName(), defaultFontData.getHeight(), SWT.BOLD);
-        PreferenceConverter.setDefault(m_store, m_categoryFontKey, boldFontData);
-      }
-      {
-        FontData[] defaultFontData = Display.getDefault().getSystemFont().getFontData();
-        PreferenceConverter.setDefault(m_store, m_entryFontKey, defaultFontData);
-      }
-    }
-    m_store.setDefault(m_onlyIconsKey, false);
-    m_store.setDefault(m_minColumnsKey, 2);
-	m_store.setDefault(m_layoutsKey, DesignerPalette.LIST_ICONS_TYPE);
-  }
+	/**
+	 * Sets the prefix for preference keys.
+	 */
+	public void setPrefix(String prefix) {
+		// prepare keys
+		m_categoryFontKey = prefix + ".category.font";
+		m_entryFontKey = prefix + ".entry.font";
+		m_onlyIconsKey = prefix + ".onlyIcons";
+		m_minColumnsKey = prefix + ".columns.min";
+		m_layoutsKey = prefix + ".layouts.type";
+		// set default values
+		{
+			{
+				FontData defaultFontData = Display.getDefault().getSystemFont().getFontData()[0];
+				FontData boldFontData =
+						new FontData(defaultFontData.getName(), defaultFontData.getHeight(), SWT.BOLD);
+				PreferenceConverter.setDefault(m_store, m_categoryFontKey, boldFontData);
+			}
+			{
+				FontData[] defaultFontData = Display.getDefault().getSystemFont().getFontData();
+				PreferenceConverter.setDefault(m_store, m_entryFontKey, defaultFontData);
+			}
+		}
+		m_store.setDefault(m_onlyIconsKey, false);
+		m_store.setDefault(m_minColumnsKey, 2);
+		m_store.setDefault(m_layoutsKey, DesignerPalette.LIST_ICONS_TYPE);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IPalettePreferences
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public FontDescriptor getCategoryFontDescriptor() {
-    if (m_categoryFont == null) {
-      FontData[] fontDataArray = PreferenceConverter.getFontDataArray(m_store, m_categoryFontKey);
-      m_categoryFont = FontDescriptor.createFrom(fontDataArray);
-    }
-    return m_categoryFont;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IPalettePreferences
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public FontDescriptor getCategoryFontDescriptor() {
+		if (m_categoryFont == null) {
+			FontData[] fontDataArray = PreferenceConverter.getFontDataArray(m_store, m_categoryFontKey);
+			m_categoryFont = FontDescriptor.createFrom(fontDataArray);
+		}
+		return m_categoryFont;
+	}
 
-  @Override
-  public FontDescriptor getEntryFontDescriptor() {
-    if (m_entryFont == null) {
-      FontData[] fontDataArray = PreferenceConverter.getFontDataArray(m_store, m_entryFontKey);
-      m_entryFont = FontDescriptor.createFrom(fontDataArray);
-    }
-    return m_entryFont;
-  }
+	@Override
+	public FontDescriptor getEntryFontDescriptor() {
+		if (m_entryFont == null) {
+			FontData[] fontDataArray = PreferenceConverter.getFontDataArray(m_store, m_entryFontKey);
+			m_entryFont = FontDescriptor.createFrom(fontDataArray);
+		}
+		return m_entryFont;
+	}
 
-  @Override
-  public boolean isOnlyIcons() {
-    return m_store.getBoolean(m_onlyIconsKey);
-  }
+	@Override
+	public boolean isOnlyIcons() {
+		return m_store.getBoolean(m_onlyIconsKey);
+	}
 
-  @Override
-  public int getMinColumns() {
-    return m_store.getInt(m_minColumnsKey);
-  }
+	@Override
+	public int getMinColumns() {
+		return m_store.getInt(m_minColumnsKey);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets the {@link FontData} for {@link ICategory}.
-   */
-  public void setCategoryFont(FontData[] fontDataArray) {
-    PreferenceConverter.setValue(m_store, m_categoryFontKey, fontDataArray);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets the {@link FontData} for {@link ICategory}.
+	 */
+	public void setCategoryFont(FontData[] fontDataArray) {
+		PreferenceConverter.setValue(m_store, m_categoryFontKey, fontDataArray);
+	}
 
-  /**
-   * Sets the {@link FontData} for {@link IEntry}.
-   */
-  public void setEntryFont(FontData[] fontDataArray) {
-    PreferenceConverter.setValue(m_store, m_entryFontKey, fontDataArray);
-  }
+	/**
+	 * Sets the {@link FontData} for {@link IEntry}.
+	 */
+	public void setEntryFont(FontData[] fontDataArray) {
+		PreferenceConverter.setValue(m_store, m_entryFontKey, fontDataArray);
+	}
 
-  /**
-   * Specifies if only icons should be displayed for {@link IEntry}'s.
-   */
-  public void setOnlyIcons(boolean onlyIcons) {
-    m_store.setValue(m_onlyIconsKey, onlyIcons);
-  }
+	/**
+	 * Specifies if only icons should be displayed for {@link IEntry}'s.
+	 */
+	public void setOnlyIcons(boolean onlyIcons) {
+		m_store.setValue(m_onlyIconsKey, onlyIcons);
+	}
 
-  /**
-   * Sets the minimal number of columns for {@link ICategory}.
-   */
-  public void setMinColumns(int minColumns) {
-    m_store.setValue(m_minColumnsKey, minColumns);
-  }
+	/**
+	 * Sets the minimal number of columns for {@link ICategory}.
+	 */
+	public void setMinColumns(int minColumns) {
+		m_store.setValue(m_minColumnsKey, minColumns);
+	}
 
 	@Override
 	public int getLayoutType() {
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/command/AbstractElementCommand.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/command/AbstractElementCommand.java
index 84d30b9ad..c4fcd1595 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/command/AbstractElementCommand.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/command/AbstractElementCommand.java
@@ -21,54 +21,54 @@
  * @coverage XML.editor.palette
  */
 public abstract class AbstractElementCommand extends Command {
-  protected final String m_id;
-  protected final String m_name;
-  protected final String m_description;
-  protected final boolean m_visible;
+	protected final String m_id;
+	protected final String m_name;
+	protected final String m_description;
+	protected final boolean m_visible;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractElementCommand(String id, String name, String description, boolean visible) {
-    m_id = id;
-    m_name = name;
-    m_description = description;
-    m_visible = visible;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractElementCommand(String id, String name, String description, boolean visible) {
+		m_id = id;
+		m_name = name;
+		m_description = description;
+		m_visible = visible;
+	}
 
-  public AbstractElementCommand(Attributes attributes) {
-    m_id = attributes.getValue("id");
-    m_name = attributes.getValue("name");
-    m_description = attributes.getValue("description");
-    m_visible = "true".equals(attributes.getValue("visible"));
-  }
+	public AbstractElementCommand(Attributes attributes) {
+		m_id = attributes.getValue("id");
+		m_name = attributes.getValue("name");
+		m_description = attributes.getValue("description");
+		m_visible = "true".equals(attributes.getValue("visible"));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Execution
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Updates given {@link AbstractElementInfo}.
-   */
-  protected void updateElement(AbstractElementInfo element) {
-    element.setName(m_name);
-    element.setDescription(m_description);
-    element.setVisible(m_visible);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Execution
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Updates given {@link AbstractElementInfo}.
+	 */
+	protected void updateElement(AbstractElementInfo element) {
+		element.setName(m_name);
+		element.setDescription(m_description);
+		element.setVisible(m_visible);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void addAttributes() {
-    addAttribute("id", m_id);
-    addAttribute("name", m_name);
-    addAttribute("description", m_description);
-    addAttribute("visible", m_visible);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void addAttributes() {
+		addAttribute("id", m_id);
+		addAttribute("name", m_name);
+		addAttribute("description", m_description);
+		addAttribute("visible", m_visible);
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/command/CategoryAbstractCommand.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/command/CategoryAbstractCommand.java
index 475d95389..1b32cd145 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/command/CategoryAbstractCommand.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/command/CategoryAbstractCommand.java
@@ -22,47 +22,47 @@
  * @coverage XML.editor.palette
  */
 public abstract class CategoryAbstractCommand extends AbstractElementCommand {
-  protected final boolean m_open;
+	protected final boolean m_open;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CategoryAbstractCommand(String id,
-      String name,
-      String description,
-      boolean hidden,
-      boolean open) {
-    super(id, name, description, hidden);
-    m_open = open;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CategoryAbstractCommand(String id,
+			String name,
+			String description,
+			boolean hidden,
+			boolean open) {
+		super(id, name, description, hidden);
+		m_open = open;
+	}
 
-  public CategoryAbstractCommand(Attributes attributes) {
-    super(attributes);
-    m_open = "true".equals(attributes.getValue("open"));
-  }
+	public CategoryAbstractCommand(Attributes attributes) {
+		super(attributes);
+		m_open = "true".equals(attributes.getValue("open"));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Execution
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected final void updateElement(AbstractElementInfo element) {
-    super.updateElement(element);
-    CategoryInfo category = (CategoryInfo) element;
-    category.setOpen(m_open);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Execution
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected final void updateElement(AbstractElementInfo element) {
+		super.updateElement(element);
+		CategoryInfo category = (CategoryInfo) element;
+		category.setOpen(m_open);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void addAttributes() {
-    super.addAttributes();
-    addAttribute("open", m_open);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void addAttributes() {
+		super.addAttributes();
+		addAttribute("open", m_open);
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/command/CategoryAddCommand.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/command/CategoryAddCommand.java
index cc7ffa7bb..836f466a9 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/command/CategoryAddCommand.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/command/CategoryAddCommand.java
@@ -24,59 +24,59 @@
  * @coverage XML.editor.palette
  */
 public final class CategoryAddCommand extends CategoryAbstractCommand {
-  public static final String ID = "addCategory";
-  private final String m_nextCategoryId;
+	public static final String ID = "addCategory";
+	private final String m_nextCategoryId;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CategoryAddCommand(String id,
-      String name,
-      String description,
-      boolean visible,
-      boolean open,
-      String nextCategoryId) {
-    super(id, name, description, visible, open);
-    m_nextCategoryId = nextCategoryId;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CategoryAddCommand(String id,
+			String name,
+			String description,
+			boolean visible,
+			boolean open,
+			String nextCategoryId) {
+		super(id, name, description, visible, open);
+		m_nextCategoryId = nextCategoryId;
+	}
 
-  public CategoryAddCommand(Attributes attributes) {
-    super(attributes);
-    m_nextCategoryId = attributes.getValue("nextCategory");
-  }
+	public CategoryAddCommand(Attributes attributes) {
+		super(attributes);
+		m_nextCategoryId = attributes.getValue("nextCategory");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Execution
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void execute(PaletteInfo palette) {
-    // create category
-    CategoryInfo category = new CategoryInfo();
-    category.setId(m_id);
-    updateElement(category);
-    // add category
-    List<CategoryInfo> categories = palette.getCategories();
-    CategoryInfo nextCategory = palette.getCategory(m_nextCategoryId);
-    int index = categories.indexOf(nextCategory);
-    if (index != -1) {
-      categories.add(index, category);
-    } else {
-      categories.add(category);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Execution
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void execute(PaletteInfo palette) {
+		// create category
+		CategoryInfo category = new CategoryInfo();
+		category.setId(m_id);
+		updateElement(category);
+		// add category
+		List<CategoryInfo> categories = palette.getCategories();
+		CategoryInfo nextCategory = palette.getCategory(m_nextCategoryId);
+		int index = categories.indexOf(nextCategory);
+		if (index != -1) {
+			categories.add(index, category);
+		} else {
+			categories.add(category);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void addAttributes() {
-    super.addAttributes();
-    addAttribute("nextCategory", m_nextCategoryId);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void addAttributes() {
+		super.addAttributes();
+		addAttribute("nextCategory", m_nextCategoryId);
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/command/CategoryEditCommand.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/command/CategoryEditCommand.java
index 7aa09ee12..f3fc5098b 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/command/CategoryEditCommand.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/command/CategoryEditCommand.java
@@ -26,51 +26,51 @@
  * @coverage XML.editor.palette
  */
 public final class CategoryEditCommand extends CategoryAbstractCommand {
-  public static final String ID = "editCategory";
+	public static final String ID = "editCategory";
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CategoryEditCommand(String id,
-      String name,
-      String description,
-      boolean visible,
-      boolean open) {
-    super(id, name, description, visible, open);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CategoryEditCommand(String id,
+			String name,
+			String description,
+			boolean visible,
+			boolean open) {
+		super(id, name, description, visible, open);
+	}
 
-  public CategoryEditCommand(Attributes attributes) {
-    super(attributes);
-  }
+	public CategoryEditCommand(Attributes attributes) {
+		super(attributes);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Execution
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void execute(PaletteInfo palette) {
-    CategoryInfo category = palette.getCategory(m_id);
-    if (category != null) {
-      updateElement(category);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Execution
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void execute(PaletteInfo palette) {
+		CategoryInfo category = palette.getCategory(m_id);
+		if (category != null) {
+			updateElement(category);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void addToCommandList(final List<Command> commands) {
-    ExecutionUtils.runIgnore(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        removeCommands(commands, CategoryEditCommand.class, m_id);
-      }
-    });
-    commands.add(this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void addToCommandList(final List<Command> commands) {
+		ExecutionUtils.runIgnore(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				removeCommands(commands, CategoryEditCommand.class, m_id);
+			}
+		});
+		commands.add(this);
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/command/CategoryMoveCommand.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/command/CategoryMoveCommand.java
index 9f08002f0..69f0f8078 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/command/CategoryMoveCommand.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/command/CategoryMoveCommand.java
@@ -22,43 +22,43 @@
  * @coverage XML.editor.palette
  */
 public final class CategoryMoveCommand extends Command {
-  public static final String ID = "moveCategory";
-  private final String m_id;
-  private final String m_nextCategoryId;
+	public static final String ID = "moveCategory";
+	private final String m_id;
+	private final String m_nextCategoryId;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CategoryMoveCommand(CategoryInfo category, CategoryInfo nextCategory) {
-    m_id = category.getId();
-    m_nextCategoryId = nextCategory != null ? nextCategory.getId() : null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CategoryMoveCommand(CategoryInfo category, CategoryInfo nextCategory) {
+		m_id = category.getId();
+		m_nextCategoryId = nextCategory != null ? nextCategory.getId() : null;
+	}
 
-  public CategoryMoveCommand(Attributes attributes) {
-    m_id = attributes.getValue("id");
-    m_nextCategoryId = attributes.getValue("nextCategory");
-  }
+	public CategoryMoveCommand(Attributes attributes) {
+		m_id = attributes.getValue("id");
+		m_nextCategoryId = attributes.getValue("nextCategory");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Execution
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void execute(PaletteInfo palette) {
-    palette.moveCategory(m_id, m_nextCategoryId);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Execution
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void execute(PaletteInfo palette) {
+		palette.moveCategory(m_id, m_nextCategoryId);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void addAttributes() {
-    addAttribute("id", m_id);
-    addAttribute("nextCategory", m_nextCategoryId);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void addAttributes() {
+		addAttribute("id", m_id);
+		addAttribute("nextCategory", m_nextCategoryId);
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/command/CategoryRemoveCommand.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/command/CategoryRemoveCommand.java
index b3e49f091..00fad71d8 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/command/CategoryRemoveCommand.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/command/CategoryRemoveCommand.java
@@ -22,42 +22,42 @@
  * @coverage XML.editor.palette
  */
 public final class CategoryRemoveCommand extends Command {
-  public static final String ID = "removeCategory";
-  private final String m_id;
+	public static final String ID = "removeCategory";
+	private final String m_id;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CategoryRemoveCommand(CategoryInfo category) {
-    m_id = category.getId();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CategoryRemoveCommand(CategoryInfo category) {
+		m_id = category.getId();
+	}
 
-  public CategoryRemoveCommand(Attributes attributes) {
-    m_id = attributes.getValue("id");
-  }
+	public CategoryRemoveCommand(Attributes attributes) {
+		m_id = attributes.getValue("id");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Execution
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void execute(PaletteInfo palette) {
-    CategoryInfo category = palette.getCategory(m_id);
-    if (category != null) {
-      palette.getCategories().remove(category);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Execution
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void execute(PaletteInfo palette) {
+		CategoryInfo category = palette.getCategory(m_id);
+		if (category != null) {
+			palette.getCategories().remove(category);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void addAttributes() {
-    addAttribute("id", m_id);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void addAttributes() {
+		addAttribute("id", m_id);
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/command/Command.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/command/Command.java
index feb59c975..bf07af06a 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/command/Command.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/command/Command.java
@@ -28,117 +28,117 @@
  * @coverage XML.editor.palette
  */
 public abstract class Command {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Execution
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Executes this {@link Command}.
-   */
-  public abstract void execute(PaletteInfo palette);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Execution
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Executes this {@link Command}.
+	 */
+	public abstract void execute(PaletteInfo palette);
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Writing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private StringBuffer m_stringBuffer;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Writing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private StringBuffer m_stringBuffer;
 
-  /**
-   * @return the {@link String} that contains information about this {@link Command}. It will be
-   *         passed back to constructor during reading.
-   */
-  @Override
-  public final String toString() {
-    m_stringBuffer = new StringBuffer();
-    m_stringBuffer.append("\t<");
-    // use ID as tag
-    ExecutionUtils.runRethrow(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        String id = (String) Command.this.getClass().getField("ID").get(null);
-        m_stringBuffer.append(id);
-      }
-    });
-    //
-    addAttributes();
-    m_stringBuffer.append("/>");
-    return m_stringBuffer.toString();
-  }
+	/**
+	 * @return the {@link String} that contains information about this {@link Command}. It will be
+	 *         passed back to constructor during reading.
+	 */
+	@Override
+	public final String toString() {
+		m_stringBuffer = new StringBuffer();
+		m_stringBuffer.append("\t<");
+		// use ID as tag
+		ExecutionUtils.runRethrow(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				String id = (String) Command.this.getClass().getField("ID").get(null);
+				m_stringBuffer.append(id);
+			}
+		});
+		//
+		addAttributes();
+		m_stringBuffer.append("/>");
+		return m_stringBuffer.toString();
+	}
 
-  /**
-   * Adds single attribute.
-   */
-  protected final void addAttribute(String name, boolean value) {
-    addAttribute(name, value ? "true" : "false");
-  }
+	/**
+	 * Adds single attribute.
+	 */
+	protected final void addAttribute(String name, boolean value) {
+		addAttribute(name, value ? "true" : "false");
+	}
 
-  /**
-   * Adds single attribute.
-   */
-  protected final void addAttribute(String name, String value) {
-    if (value != null) {
-      m_stringBuffer.append("\n\t\t");
-      m_stringBuffer.append(name);
-      m_stringBuffer.append("=\"");
-      //
-      value = StringEscapeUtils.escapeXml(value);
-      {
-        String escaped = "";
-        for (int i = 0; i < value.length(); i++) {
-          char c = value.charAt(i);
-          if (c < 0x20) {
-            escaped += "&#" + (int) c + ";";
-          } else {
-            escaped += c;
-          }
-        }
-        value = escaped;
-      }
-      m_stringBuffer.append(value);
-      //
-      m_stringBuffer.append("\"");
-    }
-  }
+	/**
+	 * Adds single attribute.
+	 */
+	protected final void addAttribute(String name, String value) {
+		if (value != null) {
+			m_stringBuffer.append("\n\t\t");
+			m_stringBuffer.append(name);
+			m_stringBuffer.append("=\"");
+			//
+			value = StringEscapeUtils.escapeXml(value);
+			{
+				String escaped = "";
+				for (int i = 0; i < value.length(); i++) {
+					char c = value.charAt(i);
+					if (c < 0x20) {
+						escaped += "&#" + (int) c + ";";
+					} else {
+						escaped += c;
+					}
+				}
+				value = escaped;
+			}
+			m_stringBuffer.append(value);
+			//
+			m_stringBuffer.append("\"");
+		}
+	}
 
-  /**
-   * Subclasses should implement this methods and use {@link #addAttribute(String, String)} to add
-   * separate attributes.
-   */
-  protected abstract void addAttributes();
+	/**
+	 * Subclasses should implement this methods and use {@link #addAttribute(String, String)} to add
+	 * separate attributes.
+	 */
+	protected abstract void addAttributes();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Add command in given list, possible with some optimizations.
-   */
-  public void addToCommandList(List<Command> commands) {
-    commands.add(this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Add command in given list, possible with some optimizations.
+	 */
+	public void addToCommandList(List<Command> commands) {
+		commands.add(this);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Removes all {@link Command}'s with given class and "id".
-   */
-  protected final void removeCommands(List<Command> commands,
-      Class<? extends Command> commandClass,
-      String id) throws Exception {
-    // prepare "id" field
-    Field idField = ReflectionUtils.getFieldByName(commandClass, "m_id");
-    // check commands
-    for (Iterator<Command> I = commands.iterator(); I.hasNext();) {
-      Command command = I.next();
-      if (command.getClass() == commandClass && idField.get(command).equals(id)) {
-        I.remove();
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Removes all {@link Command}'s with given class and "id".
+	 */
+	protected final void removeCommands(List<Command> commands,
+			Class<? extends Command> commandClass,
+			String id) throws Exception {
+		// prepare "id" field
+		Field idField = ReflectionUtils.getFieldByName(commandClass, "m_id");
+		// check commands
+		for (Iterator<Command> I = commands.iterator(); I.hasNext();) {
+			Command command = I.next();
+			if (command.getClass() == commandClass && idField.get(command).equals(id)) {
+				I.remove();
+			}
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/command/ComponentAbstractCommand.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/command/ComponentAbstractCommand.java
index 143cee8d7..a486a8633 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/command/ComponentAbstractCommand.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/command/ComponentAbstractCommand.java
@@ -22,47 +22,47 @@
  * @coverage XML.editor.palette
  */
 public abstract class ComponentAbstractCommand extends AbstractElementCommand {
-  protected final String m_className;
+	protected final String m_className;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ComponentAbstractCommand(String id,
-      String name,
-      String description,
-      boolean visible,
-      String className) {
-    super(id, name, description, visible);
-    m_className = className;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ComponentAbstractCommand(String id,
+			String name,
+			String description,
+			boolean visible,
+			String className) {
+		super(id, name, description, visible);
+		m_className = className;
+	}
 
-  public ComponentAbstractCommand(Attributes attributes) {
-    super(attributes);
-    m_className = attributes.getValue("class");
-  }
+	public ComponentAbstractCommand(Attributes attributes) {
+		super(attributes);
+		m_className = attributes.getValue("class");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Execution
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected final void updateElement(AbstractElementInfo element) {
-    super.updateElement(element);
-    ComponentEntryInfo component = (ComponentEntryInfo) element;
-    component.setComponentClassName(m_className);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Execution
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected final void updateElement(AbstractElementInfo element) {
+		super.updateElement(element);
+		ComponentEntryInfo component = (ComponentEntryInfo) element;
+		component.setComponentClassName(m_className);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void addAttributes() {
-    super.addAttributes();
-    addAttribute("class", m_className);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void addAttributes() {
+		super.addAttributes();
+		addAttribute("class", m_className);
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/command/ComponentAddCommand.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/command/ComponentAddCommand.java
index 45150f232..496422c33 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/command/ComponentAddCommand.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/command/ComponentAddCommand.java
@@ -23,53 +23,53 @@
  * @coverage XML.editor.palette
  */
 public final class ComponentAddCommand extends ComponentAbstractCommand {
-  public static final String ID = "addComponent";
-  private final String m_categoryId;
+	public static final String ID = "addComponent";
+	private final String m_categoryId;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ComponentAddCommand(String id,
-      String name,
-      String description,
-      boolean visible,
-      String className,
-      CategoryInfo category) {
-    super(id, name, description, visible, className);
-    m_categoryId = category.getId();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ComponentAddCommand(String id,
+			String name,
+			String description,
+			boolean visible,
+			String className,
+			CategoryInfo category) {
+		super(id, name, description, visible, className);
+		m_categoryId = category.getId();
+	}
 
-  public ComponentAddCommand(Attributes attributes) {
-    super(attributes);
-    m_categoryId = attributes.getValue("category");
-  }
+	public ComponentAddCommand(Attributes attributes) {
+		super(attributes);
+		m_categoryId = attributes.getValue("category");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Execution
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void execute(PaletteInfo palette) {
-    // create component entry
-    ComponentEntryInfo component = new ComponentEntryInfo();
-    component.setId(m_id);
-    updateElement(component);
-    // prepare category
-    CategoryInfo category = palette.getCategory(m_categoryId);
-    category.addEntry(component);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Execution
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void execute(PaletteInfo palette) {
+		// create component entry
+		ComponentEntryInfo component = new ComponentEntryInfo();
+		component.setId(m_id);
+		updateElement(component);
+		// prepare category
+		CategoryInfo category = palette.getCategory(m_categoryId);
+		category.addEntry(component);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void addAttributes() {
-    super.addAttributes();
-    addAttribute("category", m_categoryId);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void addAttributes() {
+		super.addAttributes();
+		addAttribute("category", m_categoryId);
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/command/ComponentEditCommand.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/command/ComponentEditCommand.java
index a0c2de59e..75f02b2c3 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/command/ComponentEditCommand.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/command/ComponentEditCommand.java
@@ -27,51 +27,51 @@
  * @coverage XML.editor.palette
  */
 public final class ComponentEditCommand extends ComponentAbstractCommand {
-  public static final String ID = "editComponent";
+	public static final String ID = "editComponent";
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ComponentEditCommand(String id,
-      String name,
-      String description,
-      boolean visible,
-      String className) {
-    super(id, name, description, visible, className);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ComponentEditCommand(String id,
+			String name,
+			String description,
+			boolean visible,
+			String className) {
+		super(id, name, description, visible, className);
+	}
 
-  public ComponentEditCommand(Attributes attributes) {
-    super(attributes);
-  }
+	public ComponentEditCommand(Attributes attributes) {
+		super(attributes);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Execution
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void execute(PaletteInfo palette) {
-    EntryInfo entry = palette.getEntry(m_id);
-    if (entry instanceof ComponentEntryInfo) {
-      updateElement(entry);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Execution
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void execute(PaletteInfo palette) {
+		EntryInfo entry = palette.getEntry(m_id);
+		if (entry instanceof ComponentEntryInfo) {
+			updateElement(entry);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void addToCommandList(final List<Command> commands) {
-    ExecutionUtils.runIgnore(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        removeCommands(commands, ComponentEditCommand.class, m_id);
-      }
-    });
-    commands.add(this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void addToCommandList(final List<Command> commands) {
+		ExecutionUtils.runIgnore(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				removeCommands(commands, ComponentEditCommand.class, m_id);
+			}
+		});
+		commands.add(this);
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/command/ElementVisibilityCommand.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/command/ElementVisibilityCommand.java
index 189d0b190..24ddcdfb5 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/command/ElementVisibilityCommand.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/command/ElementVisibilityCommand.java
@@ -28,67 +28,67 @@
  * @coverage XML.editor.palette
  */
 public final class ElementVisibilityCommand extends Command {
-  public static final String ID = "visibleElement";
-  private final String m_id;
-  private final boolean m_visible;
+	public static final String ID = "visibleElement";
+	private final String m_id;
+	private final boolean m_visible;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ElementVisibilityCommand(AbstractElementInfo element, boolean visible) {
-    m_id = element.getId();
-    m_visible = visible;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ElementVisibilityCommand(AbstractElementInfo element, boolean visible) {
+		m_id = element.getId();
+		m_visible = visible;
+	}
 
-  public ElementVisibilityCommand(Attributes attributes) {
-    m_id = attributes.getValue("id");
-    m_visible = "true".equals(attributes.getValue("visible"));
-  }
+	public ElementVisibilityCommand(Attributes attributes) {
+		m_id = attributes.getValue("id");
+		m_visible = "true".equals(attributes.getValue("visible"));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Execution
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void execute(PaletteInfo palette) {
-    // try category
-    {
-      CategoryInfo category = palette.getCategory(m_id);
-      if (category != null) {
-        category.setVisible(m_visible);
-      }
-    }
-    // try entry
-    {
-      EntryInfo entry = palette.getEntry(m_id);
-      if (entry != null) {
-        entry.setVisible(m_visible);
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Execution
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void execute(PaletteInfo palette) {
+		// try category
+		{
+			CategoryInfo category = palette.getCategory(m_id);
+			if (category != null) {
+				category.setVisible(m_visible);
+			}
+		}
+		// try entry
+		{
+			EntryInfo entry = palette.getEntry(m_id);
+			if (entry != null) {
+				entry.setVisible(m_visible);
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void addAttributes() {
-    addAttribute("id", m_id);
-    addAttribute("visible", m_visible);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void addAttributes() {
+		addAttribute("id", m_id);
+		addAttribute("visible", m_visible);
+	}
 
-  @Override
-  public void addToCommandList(final List<Command> commands) {
-    ExecutionUtils.runIgnore(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        removeCommands(commands, ElementVisibilityCommand.class, m_id);
-      }
-    });
-    commands.add(this);
-  }
+	@Override
+	public void addToCommandList(final List<Command> commands) {
+		ExecutionUtils.runIgnore(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				removeCommands(commands, ElementVisibilityCommand.class, m_id);
+			}
+		});
+		commands.add(this);
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/command/EntryMoveCommand.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/command/EntryMoveCommand.java
index 9f9f0cd28..42bceda20 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/command/EntryMoveCommand.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/command/EntryMoveCommand.java
@@ -26,90 +26,90 @@
  * @coverage XML.editor.palette
  */
 public final class EntryMoveCommand extends Command {
-  public static final String ID = "moveEntry";
-  private final String m_id;
-  private final String m_categoryId;
-  private final String m_nextEntryId;
+	public static final String ID = "moveEntry";
+	private final String m_id;
+	private final String m_categoryId;
+	private final String m_nextEntryId;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public EntryMoveCommand(EntryInfo entry, CategoryInfo category, EntryInfo nextEntry) {
-    m_id = entry.getId();
-    m_categoryId = category.getId();
-    m_nextEntryId = nextEntry != null ? nextEntry.getId() : null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public EntryMoveCommand(EntryInfo entry, CategoryInfo category, EntryInfo nextEntry) {
+		m_id = entry.getId();
+		m_categoryId = category.getId();
+		m_nextEntryId = nextEntry != null ? nextEntry.getId() : null;
+	}
 
-  public EntryMoveCommand(Attributes attributes) {
-    m_id = attributes.getValue("id");
-    m_categoryId = attributes.getValue("category");
-    m_nextEntryId = attributes.getValue("nextEntry");
-  }
+	public EntryMoveCommand(Attributes attributes) {
+		m_id = attributes.getValue("id");
+		m_categoryId = attributes.getValue("category");
+		m_nextEntryId = attributes.getValue("nextEntry");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Execution
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void execute(PaletteInfo palette) {
-    // prepare entry to move
-    EntryInfo entry = palette.getEntry(m_id);
-    if (entry == null) {
-      return;
-    }
-    // prepare target category
-    CategoryInfo category = palette.getCategory(m_categoryId);
-    if (category == null) {
-      return;
-    }
-    // don't move before itself, this is no-op
-    if (m_id.equals(m_nextEntryId)) {
-      return;
-    }
-    // remove source entry
-    entry.getCategory().removeEntry(entry);
-    // add to new location
-    EntryInfo nextEntry = palette.getEntry(m_nextEntryId);
-    if (nextEntry != null) {
-      int index = category.getEntries().indexOf(nextEntry);
-      category.addEntry(index, entry);
-    } else {
-      category.addEntry(entry);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Execution
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void execute(PaletteInfo palette) {
+		// prepare entry to move
+		EntryInfo entry = palette.getEntry(m_id);
+		if (entry == null) {
+			return;
+		}
+		// prepare target category
+		CategoryInfo category = palette.getCategory(m_categoryId);
+		if (category == null) {
+			return;
+		}
+		// don't move before itself, this is no-op
+		if (m_id.equals(m_nextEntryId)) {
+			return;
+		}
+		// remove source entry
+		entry.getCategory().removeEntry(entry);
+		// add to new location
+		EntryInfo nextEntry = palette.getEntry(m_nextEntryId);
+		if (nextEntry != null) {
+			int index = category.getEntries().indexOf(nextEntry);
+			category.addEntry(index, entry);
+		} else {
+			category.addEntry(entry);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void addAttributes() {
-    addAttribute("id", m_id);
-    addAttribute("category", m_categoryId);
-    addAttribute("nextEntry", m_nextEntryId);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void addAttributes() {
+		addAttribute("id", m_id);
+		addAttribute("category", m_categoryId);
+		addAttribute("nextEntry", m_nextEntryId);
+	}
 
-  @Override
-  public void addToCommandList(List<Command> commands) {
-    ListIterator<Command> I = commands.listIterator(commands.size());
-    while (I.hasPrevious()) {
-      Command command = I.previous();
-      if (command instanceof EntryMoveCommand) {
-        EntryMoveCommand moveCommand = (EntryMoveCommand) command;
-        if (m_id.equals(moveCommand.m_id)) {
-          // remove moves of source entry
-          I.remove();
-        } else if (m_id.equals(moveCommand.m_nextEntryId)) {
-          // if source entry used as target, stop optimizing
-          break;
-        }
-      }
-    }
-    // add command
-    commands.add(this);
-  }
+	@Override
+	public void addToCommandList(List<Command> commands) {
+		ListIterator<Command> I = commands.listIterator(commands.size());
+		while (I.hasPrevious()) {
+			Command command = I.previous();
+			if (command instanceof EntryMoveCommand) {
+				EntryMoveCommand moveCommand = (EntryMoveCommand) command;
+				if (m_id.equals(moveCommand.m_id)) {
+					// remove moves of source entry
+					I.remove();
+				} else if (m_id.equals(moveCommand.m_nextEntryId)) {
+					// if source entry used as target, stop optimizing
+					break;
+				}
+			}
+		}
+		// add command
+		commands.add(this);
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/command/EntryRemoveCommand.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/command/EntryRemoveCommand.java
index bf35dac53..693501a95 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/command/EntryRemoveCommand.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/command/EntryRemoveCommand.java
@@ -23,43 +23,43 @@
  * @coverage XML.editor.palette
  */
 public final class EntryRemoveCommand extends Command {
-  public static final String ID = "removeEntry";
-  private final String m_id;
+	public static final String ID = "removeEntry";
+	private final String m_id;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public EntryRemoveCommand(EntryInfo entry) {
-    m_id = entry.getId();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public EntryRemoveCommand(EntryInfo entry) {
+		m_id = entry.getId();
+	}
 
-  public EntryRemoveCommand(Attributes attributes) {
-    m_id = attributes.getValue("id");
-  }
+	public EntryRemoveCommand(Attributes attributes) {
+		m_id = attributes.getValue("id");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Execution
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void execute(PaletteInfo palette) {
-    EntryInfo entry = palette.getEntry(m_id);
-    if (entry != null) {
-      CategoryInfo category = entry.getCategory();
-      category.removeEntry(entry);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Execution
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void execute(PaletteInfo palette) {
+		EntryInfo entry = palette.getEntry(m_id);
+		if (entry != null) {
+			CategoryInfo category = entry.getCategory();
+			category.removeEntry(entry);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void addAttributes() {
-    addAttribute("id", m_id);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void addAttributes() {
+		addAttribute("id", m_id);
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/dialogs/AbstractPaletteDialog.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/dialogs/AbstractPaletteDialog.java
index b522182fa..35ac8571e 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/dialogs/AbstractPaletteDialog.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/dialogs/AbstractPaletteDialog.java
@@ -30,53 +30,53 @@
  * @coverage XML.editor.palette.ui
  */
 public abstract class AbstractPaletteDialog extends AbstractValidationTitleAreaDialog {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractPaletteDialog(Shell parentShell,
-      String shellText,
-      String titleText,
-      Image titleImage,
-      String titleMessage) {
-    super(parentShell, DesignerPlugin.getDefault(), shellText, titleText, titleImage, titleMessage);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractPaletteDialog(Shell parentShell,
+			String shellText,
+			String titleText,
+			Image titleImage,
+			String titleMessage) {
+		super(parentShell, DesignerPlugin.getDefault(), shellText, titleText, titleImage, titleMessage);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link ComboDialogField} for selecting {@link CategoryInfo}.
-   */
-  protected static ComboDialogField createCategoryField(PaletteInfo palette,
-      CategoryInfo initialCategory) {
-    final ComboDialogField categoryField = new ComboDialogField(SWT.READ_ONLY);
-    // add categories
-    boolean categorySelected = false;
-    for (CategoryInfo category : palette.getCategories()) {
-      categoryField.addItem(category.getName());
-      if (category == initialCategory) {
-        categoryField.selectItem(categoryField.getItemCount() - 1);
-        categorySelected = true;
-      }
-    }
-    // select default category
-    if (!categorySelected) {
-      categoryField.selectItem(categoryField.getItemCount() - 1);
-    }
-    // show all items
-    Display.getCurrent().asyncExec(new Runnable() {
-      @Override
-      public void run() {
-        UiUtils.setVisibleItemCount(
-            categoryField.getComboControl(null),
-            categoryField.getItemCount());
-      }
-    });
-    //
-    return categoryField;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link ComboDialogField} for selecting {@link CategoryInfo}.
+	 */
+	protected static ComboDialogField createCategoryField(PaletteInfo palette,
+			CategoryInfo initialCategory) {
+		final ComboDialogField categoryField = new ComboDialogField(SWT.READ_ONLY);
+		// add categories
+		boolean categorySelected = false;
+		for (CategoryInfo category : palette.getCategories()) {
+			categoryField.addItem(category.getName());
+			if (category == initialCategory) {
+				categoryField.selectItem(categoryField.getItemCount() - 1);
+				categorySelected = true;
+			}
+		}
+		// select default category
+		if (!categorySelected) {
+			categoryField.selectItem(categoryField.getItemCount() - 1);
+		}
+		// show all items
+		Display.getCurrent().asyncExec(new Runnable() {
+			@Override
+			public void run() {
+				UiUtils.setVisibleItemCount(
+						categoryField.getComboControl(null),
+						categoryField.getItemCount());
+			}
+		});
+		//
+		return categoryField;
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/dialogs/AbstractPaletteElementDialog.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/dialogs/AbstractPaletteElementDialog.java
index 6bd982be3..ecdd0c8e0 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/dialogs/AbstractPaletteElementDialog.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/dialogs/AbstractPaletteElementDialog.java
@@ -25,47 +25,47 @@
  * @coverage XML.editor.palette.ui
  */
 public abstract class AbstractPaletteElementDialog extends AbstractPaletteDialog {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractPaletteElementDialog(Shell parentShell,
-      String shellText,
-      String titleText,
-      Image titleImage,
-      String titleMessage) {
-    super(parentShell, shellText, titleText, titleImage, titleMessage);
-    setShellStyle(SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractPaletteElementDialog(Shell parentShell,
+			String shellText,
+			String titleText,
+			Image titleImage,
+			String titleMessage) {
+		super(parentShell, shellText, titleText, titleImage, titleMessage);
+		setShellStyle(SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Buttons
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void okPressed() {
-    m_command = createCommand();
-    super.okPressed();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Buttons
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void okPressed() {
+		m_command = createCommand();
+		super.okPressed();
+	}
 
-  /**
-   * @return new {@link Command} for modifying {@link PaletteInfo}.
-   */
-  protected abstract Command createCommand();
+	/**
+	 * @return new {@link Command} for modifying {@link PaletteInfo}.
+	 */
+	protected abstract Command createCommand();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Command m_command;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Command m_command;
 
-  /**
-   * @return the {@link Command} generated by this dialog.
-   */
-  public final Command getCommand() {
-    return m_command;
-  }
+	/**
+	 * @return the {@link Command} generated by this dialog.
+	 */
+	public final Command getCommand() {
+		return m_command;
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/dialogs/CategoryAbstractDialog.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/dialogs/CategoryAbstractDialog.java
index de8542e55..cb21a9bd2 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/dialogs/CategoryAbstractDialog.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/dialogs/CategoryAbstractDialog.java
@@ -31,96 +31,96 @@
  * @coverage XML.editor.palette.ui
  */
 public abstract class CategoryAbstractDialog extends AbstractPaletteElementDialog {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CategoryAbstractDialog(Shell parentShell, String shellText, String titleText) {
-    super(parentShell, shellText, titleText, null, Messages.CategoryAbstractDialog_message);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CategoryAbstractDialog(Shell parentShell, String shellText, String titleText) {
+		super(parentShell, shellText, titleText, null, Messages.CategoryAbstractDialog_message);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected StringDialogField m_idField;
-  protected StringDialogField m_nameField;
-  protected StringAreaDialogField m_descriptionField;
-  protected SelectionButtonDialogFieldGroup m_stateField;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected StringDialogField m_idField;
+	protected StringDialogField m_nameField;
+	protected StringAreaDialogField m_descriptionField;
+	protected SelectionButtonDialogFieldGroup m_stateField;
 
-  @Override
-  protected void createControls(Composite container) {
-    m_fieldsContainer = container;
-    GridLayoutFactory.create(container).columns(2);
-    // id
-    {
-      m_idField = new StringDialogField();
-      m_idField.setEditable(false);
-      doCreateField(m_idField, Messages.CategoryAbstractDialog_idLabel);
-    }
-    // name
-    {
-      m_nameField = new StringDialogField();
-      doCreateField(m_nameField, Messages.CategoryAbstractDialog_nameLabel);
-      m_nameField.setFocus();
-    }
-    // description
-    {
-      m_descriptionField = new StringAreaDialogField(5);
-      doCreateField(m_descriptionField, Messages.CategoryAbstractDialog_descriptionLabel);
-      GridDataFactory.modify(m_descriptionField.getTextControl(null)).grabV();
-    }
-    // state
-    {
-      m_stateField =
-          new SelectionButtonDialogFieldGroup(SWT.CHECK, new String[]{
-              Messages.CategoryAbstractDialog_stateVisible,
-              Messages.CategoryAbstractDialog_stateOpen}, 1, SWT.SHADOW_ETCHED_IN);
-      doCreateField(m_stateField, Messages.CategoryAbstractDialog_stateLabel);
-    }
-    // allow to add more controls
-    createAdditionalControls(container);
-  }
+	@Override
+	protected void createControls(Composite container) {
+		m_fieldsContainer = container;
+		GridLayoutFactory.create(container).columns(2);
+		// id
+		{
+			m_idField = new StringDialogField();
+			m_idField.setEditable(false);
+			doCreateField(m_idField, Messages.CategoryAbstractDialog_idLabel);
+		}
+		// name
+		{
+			m_nameField = new StringDialogField();
+			doCreateField(m_nameField, Messages.CategoryAbstractDialog_nameLabel);
+			m_nameField.setFocus();
+		}
+		// description
+		{
+			m_descriptionField = new StringAreaDialogField(5);
+			doCreateField(m_descriptionField, Messages.CategoryAbstractDialog_descriptionLabel);
+			GridDataFactory.modify(m_descriptionField.getTextControl(null)).grabV();
+		}
+		// state
+		{
+			m_stateField =
+					new SelectionButtonDialogFieldGroup(SWT.CHECK, new String[]{
+							Messages.CategoryAbstractDialog_stateVisible,
+							Messages.CategoryAbstractDialog_stateOpen}, 1, SWT.SHADOW_ETCHED_IN);
+			doCreateField(m_stateField, Messages.CategoryAbstractDialog_stateLabel);
+		}
+		// allow to add more controls
+		createAdditionalControls(container);
+	}
 
-  /**
-   * Creates additional controls.
-   */
-  protected void createAdditionalControls(Composite container) {
-  }
+	/**
+	 * Creates additional controls.
+	 */
+	protected void createAdditionalControls(Composite container) {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Validation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String validate() {
-    // validate name
-    {
-      String name = m_nameField.getText();
-      if (name.length() == 0) {
-        return Messages.CategoryAbstractDialog_validateEmptyName;
-      }
-    }
-    // OK
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Validation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String validate() {
+		// validate name
+		{
+			String name = m_nameField.getText();
+			if (name.length() == 0) {
+				return Messages.CategoryAbstractDialog_validateEmptyName;
+			}
+		}
+		// OK
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Composite m_fieldsContainer;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Composite m_fieldsContainer;
 
-  /**
-   * Configures given {@link DialogField} for specific of this dialog.
-   */
-  protected final void doCreateField(DialogField dialogField, String labelText) {
-    dialogField.setLabelText(labelText);
-    dialogField.setDialogFieldListener(m_validateListener);
-    DialogFieldUtils.fillControls(m_fieldsContainer, dialogField, 2, 60);
-  }
+	/**
+	 * Configures given {@link DialogField} for specific of this dialog.
+	 */
+	protected final void doCreateField(DialogField dialogField, String labelText) {
+		dialogField.setLabelText(labelText);
+		dialogField.setDialogFieldListener(m_validateListener);
+		DialogFieldUtils.fillControls(m_fieldsContainer, dialogField, 2, 60);
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/dialogs/CategoryAddDialog.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/dialogs/CategoryAddDialog.java
index 8bc8ae286..ee53811e9 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/dialogs/CategoryAddDialog.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/dialogs/CategoryAddDialog.java
@@ -32,85 +32,85 @@
  * @coverage XML.editor.palette.ui
  */
 public final class CategoryAddDialog extends CategoryAbstractDialog {
-  private final PaletteInfo m_palette;
-  private final CategoryInfo m_initialNextCategory;
+	private final PaletteInfo m_palette;
+	private final CategoryInfo m_initialNextCategory;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CategoryAddDialog(Shell parentShell, PaletteInfo palette, CategoryInfo initialNextCategory) {
-    super(parentShell, Messages.CategoryAddDialog_title, Messages.CategoryAddDialog_message);
-    m_palette = palette;
-    m_initialNextCategory = initialNextCategory;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CategoryAddDialog(Shell parentShell, PaletteInfo palette, CategoryInfo initialNextCategory) {
+		super(parentShell, Messages.CategoryAddDialog_title, Messages.CategoryAddDialog_message);
+		m_palette = palette;
+		m_initialNextCategory = initialNextCategory;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private ComboDialogField m_locationField;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private ComboDialogField m_locationField;
 
-  @Override
-  protected void createAdditionalControls(Composite container) {
-    m_stateField.setSelection(0, true);
-    m_stateField.setSelection(1, true);
-    // id
-    {
-      String id = "custom_" + System.currentTimeMillis();
-      m_idField.setTextWithoutUpdate(id);
-    }
-    // location
-    {
-      m_locationField = new ComboDialogField(SWT.READ_ONLY);
-      doCreateField(m_locationField, Messages.CategoryAddDialog_targetCategoryLabel);
-      // add categories
-      boolean categorySelected = false;
-      for (CategoryInfo category : m_palette.getCategories()) {
-        m_locationField.addItem(MessageFormat.format(
-            Messages.CategoryAddDialog_targetBefore,
-            category.getName()));
-        if (category == m_initialNextCategory) {
-          m_locationField.selectItem(m_locationField.getItemCount() - 1);
-          categorySelected = true;
-        }
-      }
-      // add end
-      m_locationField.addItem(Messages.CategoryAddDialog_targetEnd);
-      if (!categorySelected) {
-        m_locationField.selectItem(m_locationField.getItemCount() - 1);
-      }
-      // show all items
-      UiUtils.setVisibleItemCount(
-          m_locationField.getComboControl(null),
-          m_locationField.getItemCount());
-    }
-  }
+	@Override
+	protected void createAdditionalControls(Composite container) {
+		m_stateField.setSelection(0, true);
+		m_stateField.setSelection(1, true);
+		// id
+		{
+			String id = "custom_" + System.currentTimeMillis();
+			m_idField.setTextWithoutUpdate(id);
+		}
+		// location
+		{
+			m_locationField = new ComboDialogField(SWT.READ_ONLY);
+			doCreateField(m_locationField, Messages.CategoryAddDialog_targetCategoryLabel);
+			// add categories
+			boolean categorySelected = false;
+			for (CategoryInfo category : m_palette.getCategories()) {
+				m_locationField.addItem(MessageFormat.format(
+						Messages.CategoryAddDialog_targetBefore,
+						category.getName()));
+				if (category == m_initialNextCategory) {
+					m_locationField.selectItem(m_locationField.getItemCount() - 1);
+					categorySelected = true;
+				}
+			}
+			// add end
+			m_locationField.addItem(Messages.CategoryAddDialog_targetEnd);
+			if (!categorySelected) {
+				m_locationField.selectItem(m_locationField.getItemCount() - 1);
+			}
+			// show all items
+			UiUtils.setVisibleItemCount(
+					m_locationField.getComboControl(null),
+					m_locationField.getItemCount());
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Command
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Command createCommand() {
-    String id = m_idField.getText();
-    String name = m_nameField.getText();
-    String description = m_descriptionField.getText();
-    boolean hidden = m_stateField.isSelected(0);
-    boolean open = m_stateField.isSelected(1);
-    // prepare next category
-    String nextCategoryId = null;
-    {
-      int index = m_locationField.getSelectionIndex();
-      List<CategoryInfo> categories = m_palette.getCategories();
-      if (index < categories.size()) {
-        nextCategoryId = categories.get(index).getId();
-      }
-    }
-    // create command
-    return new CategoryAddCommand(id, name, description, hidden, open, nextCategoryId);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Command
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Command createCommand() {
+		String id = m_idField.getText();
+		String name = m_nameField.getText();
+		String description = m_descriptionField.getText();
+		boolean hidden = m_stateField.isSelected(0);
+		boolean open = m_stateField.isSelected(1);
+		// prepare next category
+		String nextCategoryId = null;
+		{
+			int index = m_locationField.getSelectionIndex();
+			List<CategoryInfo> categories = m_palette.getCategories();
+			if (index < categories.size()) {
+				nextCategoryId = categories.get(index).getId();
+			}
+		}
+		// create command
+		return new CategoryAddCommand(id, name, description, hidden, open, nextCategoryId);
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/dialogs/CategoryEditDialog.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/dialogs/CategoryEditDialog.java
index e16593fb2..6c0baac97 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/dialogs/CategoryEditDialog.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/dialogs/CategoryEditDialog.java
@@ -25,44 +25,44 @@
  * @coverage XML.editor.palette.ui
  */
 public final class CategoryEditDialog extends CategoryAbstractDialog {
-  private final CategoryInfo m_category;
+	private final CategoryInfo m_category;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CategoryEditDialog(Shell parentShell, CategoryInfo category) {
-    super(parentShell, Messages.CategoryEditDialog_title, Messages.CategoryEditDialog_description);
-    m_category = category;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CategoryEditDialog(Shell parentShell, CategoryInfo category) {
+		super(parentShell, Messages.CategoryEditDialog_title, Messages.CategoryEditDialog_description);
+		m_category = category;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createControls(Composite container) {
-    super.createControls(container);
-    m_idField.setText(m_category.getId());
-    m_nameField.setText(m_category.getName());
-    m_descriptionField.setText(m_category.getDescription());
-    m_stateField.setSelection(0, m_category.isVisible());
-    m_stateField.setSelection(1, m_category.isOpen());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createControls(Composite container) {
+		super.createControls(container);
+		m_idField.setText(m_category.getId());
+		m_nameField.setText(m_category.getName());
+		m_descriptionField.setText(m_category.getDescription());
+		m_stateField.setSelection(0, m_category.isVisible());
+		m_stateField.setSelection(1, m_category.isOpen());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Command
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Command createCommand() {
-    String name = m_nameField.getText();
-    String description = m_descriptionField.getText();
-    boolean hidden = m_stateField.isSelected(0);
-    boolean open = m_stateField.isSelected(1);
-    return new CategoryEditCommand(m_category.getId(), name, description, hidden, open);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Command
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Command createCommand() {
+		String name = m_nameField.getText();
+		String description = m_descriptionField.getText();
+		boolean hidden = m_stateField.isSelected(0);
+		boolean open = m_stateField.isSelected(1);
+		return new CategoryEditCommand(m_category.getId(), name, description, hidden, open);
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/dialogs/ComponentAbstractDialog.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/dialogs/ComponentAbstractDialog.java
index 89e8dd16e..abf312a77 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/dialogs/ComponentAbstractDialog.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/dialogs/ComponentAbstractDialog.java
@@ -40,173 +40,173 @@
  * @coverage XML.editor.palette.ui
  */
 public abstract class ComponentAbstractDialog extends AbstractPaletteElementDialog {
-  private final EditorContext m_context;
-  private ComponentDescription m_componentDescription;
+	private final EditorContext m_context;
+	private ComponentDescription m_componentDescription;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ComponentAbstractDialog(Shell parentShell,
-      EditorContext context,
-      String shellText,
-      String titleText) {
-    super(parentShell, shellText, titleText, null, Messages.ComponentAbstractDialog_message);
-    m_context = context;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ComponentAbstractDialog(Shell parentShell,
+			EditorContext context,
+			String shellText,
+			String titleText) {
+		super(parentShell, shellText, titleText, null, Messages.ComponentAbstractDialog_message);
+		m_context = context;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected StringDialogField m_idField;
-  protected StringDialogField m_nameField;
-  protected StringButtonDialogField m_classField;
-  protected StringAreaDialogField m_descriptionField;
-  protected BooleanDialogField m_visibleField;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected StringDialogField m_idField;
+	protected StringDialogField m_nameField;
+	protected StringButtonDialogField m_classField;
+	protected StringAreaDialogField m_descriptionField;
+	protected BooleanDialogField m_visibleField;
 
-  @Override
-  protected void createControls(Composite container) {
-    m_fieldsContainer = container;
-    GridLayoutFactory.create(container).columns(3);
-    // id
-    {
-      m_idField = new StringDialogField();
-      m_idField.setEditable(false);
-      doCreateField(m_idField, Messages.ComponentAbstractDialog_idLabel);
-    }
-    // name
-    {
-      m_nameField = new StringDialogField();
-      doCreateField(m_nameField, Messages.ComponentAbstractDialog_nameLabel);
-      m_nameField.setFocus();
-    }
-    // class
-    {
-      m_classField = new StringButtonDialogField(new IStringButtonAdapter() {
-        @Override
-        public void changeControlPressed(DialogField field) {
-          try {
-            String componentClassName =
-                JdtUiUtils.selectTypeName(getShell(), m_context.getJavaProject());
-            if (componentClassName != null) {
-              m_classField.setText(componentClassName);
-              prepareComponentDescription();
-              m_nameField.setText(CodeUtils.getShortClass(componentClassName));
-              if (m_componentDescription != null) {
-                m_descriptionField.setText(m_componentDescription.getDescription());
-              } else {
-                m_descriptionField.setText(componentClassName);
-              }
-            }
-          } catch (Throwable e) {
-            DesignerPlugin.log(e);
-          }
-        }
-      });
-      m_classField.setButtonLabel(Messages.ComponentAbstractDialog_classChoose);
-      doCreateField(m_classField, Messages.ComponentAbstractDialog_classLabel);
-      m_classField.getTextControl(null).setEditable(false);
-    }
-    // description
-    {
-      m_descriptionField = new StringAreaDialogField(5);
-      doCreateField(m_descriptionField, Messages.ComponentAbstractDialog_descriptionLabel);
-      GridDataFactory.modify(m_descriptionField.getTextControl(null)).grabV();
-    }
-    // state
-    {
-      m_visibleField = new BooleanDialogField();
-      doCreateField(m_visibleField, Messages.ComponentAbstractDialog_visibleLabel);
-    }
-  }
+	@Override
+	protected void createControls(Composite container) {
+		m_fieldsContainer = container;
+		GridLayoutFactory.create(container).columns(3);
+		// id
+		{
+			m_idField = new StringDialogField();
+			m_idField.setEditable(false);
+			doCreateField(m_idField, Messages.ComponentAbstractDialog_idLabel);
+		}
+		// name
+		{
+			m_nameField = new StringDialogField();
+			doCreateField(m_nameField, Messages.ComponentAbstractDialog_nameLabel);
+			m_nameField.setFocus();
+		}
+		// class
+		{
+			m_classField = new StringButtonDialogField(new IStringButtonAdapter() {
+				@Override
+				public void changeControlPressed(DialogField field) {
+					try {
+						String componentClassName =
+								JdtUiUtils.selectTypeName(getShell(), m_context.getJavaProject());
+						if (componentClassName != null) {
+							m_classField.setText(componentClassName);
+							prepareComponentDescription();
+							m_nameField.setText(CodeUtils.getShortClass(componentClassName));
+							if (m_componentDescription != null) {
+								m_descriptionField.setText(m_componentDescription.getDescription());
+							} else {
+								m_descriptionField.setText(componentClassName);
+							}
+						}
+					} catch (Throwable e) {
+						DesignerPlugin.log(e);
+					}
+				}
+			});
+			m_classField.setButtonLabel(Messages.ComponentAbstractDialog_classChoose);
+			doCreateField(m_classField, Messages.ComponentAbstractDialog_classLabel);
+			m_classField.getTextControl(null).setEditable(false);
+		}
+		// description
+		{
+			m_descriptionField = new StringAreaDialogField(5);
+			doCreateField(m_descriptionField, Messages.ComponentAbstractDialog_descriptionLabel);
+			GridDataFactory.modify(m_descriptionField.getTextControl(null)).grabV();
+		}
+		// state
+		{
+			m_visibleField = new BooleanDialogField();
+			doCreateField(m_visibleField, Messages.ComponentAbstractDialog_visibleLabel);
+		}
+	}
 
-  @Override
-  protected void okPressed() {
-    prepareComponentDescription();
-    super.okPressed();
-  }
+	@Override
+	protected void okPressed() {
+		prepareComponentDescription();
+		super.okPressed();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Validation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected final String validate() {
-    // validate class
-    {
-      String className = m_classField.getText().trim();
-      if (className.length() == 0) {
-        return Messages.ComponentAbstractDialog_validationEmptyClass;
-      }
-      // check for existence
-      try {
-        m_context.getClassLoader().loadClass(className);
-      } catch (Throwable e) {
-        return e.getClass().getName() + ": " + e.getMessage();
-      }
-    }
-    // validate name
-    {
-      String name = m_nameField.getText().trim();
-      if (name.length() == 0) {
-        return Messages.ComponentAbstractDialog_validationEmptyName;
-      }
-    }
-    // OK
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Validation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected final String validate() {
+		// validate class
+		{
+			String className = m_classField.getText().trim();
+			if (className.length() == 0) {
+				return Messages.ComponentAbstractDialog_validationEmptyClass;
+			}
+			// check for existence
+			try {
+				m_context.getClassLoader().loadClass(className);
+			} catch (Throwable e) {
+				return e.getClass().getName() + ": " + e.getMessage();
+			}
+		}
+		// validate name
+		{
+			String name = m_nameField.getText().trim();
+			if (name.length() == 0) {
+				return Messages.ComponentAbstractDialog_validationEmptyName;
+			}
+		}
+		// OK
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Composite m_fieldsContainer;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Composite m_fieldsContainer;
 
-  /**
-   * Configures given {@link DialogField} for specific of this dialog.
-   */
-  protected final void doCreateField(DialogField dialogField, String labelText) {
-    dialogField.setLabelText(labelText);
-    dialogField.setDialogFieldListener(m_validateListener);
-    DialogFieldUtils.fillControls(m_fieldsContainer, dialogField, 3, 60);
-  }
+	/**
+	 * Configures given {@link DialogField} for specific of this dialog.
+	 */
+	protected final void doCreateField(DialogField dialogField, String labelText) {
+		dialogField.setLabelText(labelText);
+		dialogField.setDialogFieldListener(m_validateListener);
+		DialogFieldUtils.fillControls(m_fieldsContainer, dialogField, 3, 60);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ComponentDescription utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Tries to load {@link ComponentDescription}, may be set <code>null</code>.
-   */
-  private void prepareComponentDescription() {
-    m_componentDescription = null;
-    try {
-      String componentClassName = m_classField.getText();
-      m_componentDescription =
-          ComponentDescriptionHelper.getDescription(m_context, componentClassName);
-    } catch (Throwable e) {
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ComponentDescription utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Tries to load {@link ComponentDescription}, may be set <code>null</code>.
+	 */
+	private void prepareComponentDescription() {
+		m_componentDescription = null;
+		try {
+			String componentClassName = m_classField.getText();
+			m_componentDescription =
+					ComponentDescriptionHelper.getDescription(m_context, componentClassName);
+		} catch (Throwable e) {
+		}
+	}
 
-  /**
-   * @return the description text to use in command, may be <code>null</code> if entered text is
-   *         default, so description from metadata should be used.
-   */
-  protected String getDescriptionText() {
-    String text = m_descriptionField.getText();
-    boolean isEmpty = StringUtils.isEmpty(text);
-    boolean isClassName = m_classField.getText().equals(text);
-    boolean isSameAsMetadata =
-        m_componentDescription != null && text.equals(m_componentDescription.getDescription());
-    if (isEmpty || isClassName || isSameAsMetadata) {
-      text = null;
-    }
-    return text;
-  }
+	/**
+	 * @return the description text to use in command, may be <code>null</code> if entered text is
+	 *         default, so description from metadata should be used.
+	 */
+	protected String getDescriptionText() {
+		String text = m_descriptionField.getText();
+		boolean isEmpty = StringUtils.isEmpty(text);
+		boolean isClassName = m_classField.getText().equals(text);
+		boolean isSameAsMetadata =
+				m_componentDescription != null && text.equals(m_componentDescription.getDescription());
+		if (isEmpty || isClassName || isSameAsMetadata) {
+			text = null;
+		}
+		return text;
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/dialogs/ComponentAddDialog.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/dialogs/ComponentAddDialog.java
index 56b951353..10fe56ac5 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/dialogs/ComponentAddDialog.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/dialogs/ComponentAddDialog.java
@@ -29,57 +29,57 @@
  * @coverage XML.editor.palette.ui
  */
 public final class ComponentAddDialog extends ComponentAbstractDialog {
-  private final PaletteInfo m_palette;
-  private final CategoryInfo m_initialCategory;
+	private final PaletteInfo m_palette;
+	private final CategoryInfo m_initialCategory;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ComponentAddDialog(Shell parentShell,
-      EditorContext context,
-      PaletteInfo palette,
-      CategoryInfo initialCategory) {
-    super(parentShell,
-        context,
-        Messages.ComponentAddDialog_title,
-        Messages.ComponentAddDialog_message);
-    m_palette = palette;
-    m_initialCategory = initialCategory;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ComponentAddDialog(Shell parentShell,
+			EditorContext context,
+			PaletteInfo palette,
+			CategoryInfo initialCategory) {
+		super(parentShell,
+				context,
+				Messages.ComponentAddDialog_title,
+				Messages.ComponentAddDialog_message);
+		m_palette = palette;
+		m_initialCategory = initialCategory;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private ComboDialogField m_categoryField;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private ComboDialogField m_categoryField;
 
-  @Override
-  protected void createControls(Composite container) {
-    super.createControls(container);
-    m_visibleField.setSelection(true);
-    // category
-    {
-      m_categoryField = createCategoryField(m_palette, m_initialCategory);
-      doCreateField(m_categoryField, Messages.ComponentAddDialog_categoryLabel);
-    }
-  }
+	@Override
+	protected void createControls(Composite container) {
+		super.createControls(container);
+		m_visibleField.setSelection(true);
+		// category
+		{
+			m_categoryField = createCategoryField(m_palette, m_initialCategory);
+			doCreateField(m_categoryField, Messages.ComponentAddDialog_categoryLabel);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Command
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Command createCommand() {
-    String id = "custom_" + System.currentTimeMillis();
-    String name = m_nameField.getText().trim();
-    String description = getDescriptionText();
-    boolean hidden = m_visibleField.getSelection();
-    String className = m_classField.getText();
-    CategoryInfo category = m_palette.getCategories().get(m_categoryField.getSelectionIndex());
-    return new ComponentAddCommand(id, name, description, hidden, className, category);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Command
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Command createCommand() {
+		String id = "custom_" + System.currentTimeMillis();
+		String name = m_nameField.getText().trim();
+		String description = getDescriptionText();
+		boolean hidden = m_visibleField.getSelection();
+		String className = m_classField.getText();
+		CategoryInfo category = m_palette.getCategories().get(m_categoryField.getSelectionIndex());
+		return new ComponentAddCommand(id, name, description, hidden, className, category);
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/dialogs/ComponentEditDialog.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/dialogs/ComponentEditDialog.java
index 7e624722a..bc566e7de 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/dialogs/ComponentEditDialog.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/dialogs/ComponentEditDialog.java
@@ -26,47 +26,47 @@
  * @coverage XML.editor.palette.ui
  */
 public final class ComponentEditDialog extends ComponentAbstractDialog {
-  private final ComponentEntryInfo m_component;
+	private final ComponentEntryInfo m_component;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ComponentEditDialog(Shell parentShell, EditorContext context, ComponentEntryInfo component) {
-    super(parentShell,
-        context,
-        Messages.ComponentEditDialog_title,
-        Messages.ComponentEditDialog_message);
-    m_component = component;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ComponentEditDialog(Shell parentShell, EditorContext context, ComponentEntryInfo component) {
+		super(parentShell,
+				context,
+				Messages.ComponentEditDialog_title,
+				Messages.ComponentEditDialog_message);
+		m_component = component;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createControls(Composite container) {
-    super.createControls(container);
-    m_idField.setText(m_component.getId());
-    m_nameField.setText(m_component.getName());
-    m_classField.setText(m_component.getClassName());
-    m_descriptionField.setText(m_component.getDescription());
-    m_visibleField.setSelection(m_component.isVisible());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createControls(Composite container) {
+		super.createControls(container);
+		m_idField.setText(m_component.getId());
+		m_nameField.setText(m_component.getName());
+		m_classField.setText(m_component.getClassName());
+		m_descriptionField.setText(m_component.getDescription());
+		m_visibleField.setSelection(m_component.isVisible());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Command
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Command createCommand() {
-    String name = m_nameField.getText().trim();
-    String description = getDescriptionText();
-    boolean hidden = m_visibleField.getSelection();
-    String className = m_classField.getText();
-    return new ComponentEditCommand(m_component.getId(), name, description, hidden, className);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Command
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Command createCommand() {
+		String name = m_nameField.getText().trim();
+		String description = getDescriptionText();
+		boolean hidden = m_visibleField.getSelection();
+		String className = m_classField.getText();
+		return new ComponentEditCommand(m_component.getId(), name, description, hidden, className);
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/dialogs/PaletteManagerDialog.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/dialogs/PaletteManagerDialog.java
index 38fedb26d..a6e750035 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/dialogs/PaletteManagerDialog.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/dialogs/PaletteManagerDialog.java
@@ -88,749 +88,749 @@
  * @coverage XML.editor.palette.ui
  */
 public final class PaletteManagerDialog extends ResizableTitleAreaDialog {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Static images
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final Image IMAGE_CLEAR_FILTER =
-      DesignerPlugin.getImage("palette/clear_filter.gif");
-  private static final Image IMAGE_CATEGORY = DesignerPlugin.getImage("palette/category.gif");
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance fields
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final EditorContext m_context;
-  private final PaletteInfo m_palette;
-  private final Set<EntryInfo> m_goodEntryInfos;
-  private final List<Command> m_commands = Lists.newArrayList();
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public PaletteManagerDialog(EditorContext context,
-      PaletteInfo palette,
-      Set<EntryInfo> goodEntryInfos) {
-    super(DesignerPlugin.getShell(), DesignerPlugin.getDefault());
-    m_context = context;
-    m_palette = palette;
-    m_goodEntryInfos = goodEntryInfos;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private CheckboxTreeViewer m_viewer;
-
-  @Override
-  public void create() {
-    super.create();
-    // configure title area
-    getShell().setText(Messages.PaletteManagerDialog_shellTitle);
-    setTitle(Messages.PaletteManagerDialog_title);
-    setMessage(Messages.PaletteManagerDialog_message);
-  }
-
-  @Override
-  protected final Control createDialogArea(Composite parent) {
-    Composite area = (Composite) super.createDialogArea(parent);
-    //
-    Composite container = new Composite(area, SWT.NONE);
-    GridDataFactory.create(container).grab().fill();
-    createControls(container);
-    //
-    return area;
-  }
-
-  /**
-   * Creates controls on this dialog.
-   */
-  private void createControls(Composite container) {
-    GridLayoutFactory.create(container).columns(2);
-    createFilterComposite(container);
-    new Label(container, SWT.NONE);
-    createViewer(container);
-    createButtonsComposite(container);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI: filter
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final PaletteViewerFilter m_filter = new PaletteViewerFilter();
-  private Text m_filterText;
-  private ToolItem m_filterClearItem;
-
-  /**
-   * Creates {@link Composite} with filter for {@link #m_viewer}.
-   */
-  private void createFilterComposite(Composite container) {
-    Composite filterComposite = new Composite(container, SWT.NONE);
-    GridDataFactory.create(filterComposite).fillH();
-    GridLayoutFactory.create(filterComposite).columns(2).noMargins().noSpacing();
-    {
-      m_filterText = new Text(filterComposite, SWT.BORDER);
-      GridDataFactory.create(m_filterText).grabH().fillH();
-      // listener
-      m_filterText.addListener(SWT.Modify, new Listener() {
-        @Override
-        public void handleEvent(Event event) {
-          refreshFilter();
-        }
-      });
-    }
-    {
-      ToolBar toolBar = new ToolBar(filterComposite, SWT.FLAT);
-      m_filterClearItem = new ToolItem(toolBar, SWT.NONE);
-      m_filterClearItem.setImage(IMAGE_CLEAR_FILTER);
-      m_filterClearItem.setToolTipText(Messages.PaletteManagerDialog_clearFilter);
-      m_filterClearItem.setEnabled(false);
-      // listener
-      m_filterClearItem.addListener(SWT.Selection, new Listener() {
-        @Override
-        public void handleEvent(Event event) {
-          m_filterText.setText("");
-        }
-      });
-    }
-  }
-
-  /**
-   * Updates filter and viewer.
-   */
-  private void refreshFilter() {
-    m_viewer.getTree().setRedraw(false);
-    try {
-      String pattern = m_filterText.getText();
-      if (pattern.length() == 0) {
-        m_filterClearItem.setEnabled(false);
-        m_viewer.resetFilters();
-      } else {
-        m_filterClearItem.setEnabled(true);
-        // set updated filter
-        m_filter.setPattern(pattern);
-        m_viewer.resetFilters();
-        m_viewer.addFilter(m_filter);
-        // expand to show entries
-        m_viewer.expandAll();
-      }
-      // do refresh to update visibility state
-      refreshViewer();
-    } finally {
-      m_viewer.getTree().setRedraw(true);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Palette filter
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Implementation of {@link ViewerFilter} for filtering {@link PaletteInfo} elements.
-   */
-  private static class PaletteViewerFilter extends ViewerFilter {
-    private SearchPattern m_pattern;
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Access
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    /**
-     * Sets new pattern to match.
-     */
-    public void setPattern(String pattern) {
-      if (pattern.indexOf('*') == -1) {
-        pattern += '*';
-      }
-      m_pattern = new SearchPattern();
-      m_pattern.setPattern(pattern);
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // ViewerFilter
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public boolean select(Viewer viewer, Object parent, Object element) {
-      if (element instanceof CategoryInfo) {
-        CategoryInfo category = (CategoryInfo) element;
-        for (EntryInfo entry : category.getEntries()) {
-          if (select(viewer, category, entry)) {
-            return true;
-          }
-        }
-      } else if (element instanceof EntryInfo) {
-        EntryInfo entry = (EntryInfo) element;
-        return m_pattern.matches(entry.getName());
-      }
-      return false;
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI: viewer
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final ITreeContentProvider m_contentProvider = new ITreeContentProvider() {
-    @Override
-    public Object[] getElements(Object inputElement) {
-      return getCategoriesWithGoodEntries().toArray();
-    }
-
-    @Override
-    public Object[] getChildren(Object parentElement) {
-      if (parentElement instanceof CategoryInfo) {
-        return ((CategoryInfo) parentElement).getEntries().toArray();
-      }
-      return ArrayUtils.EMPTY_OBJECT_ARRAY;
-    }
-
-    @Override
-    public Object getParent(Object element) {
-      if (element instanceof EntryInfo) {
-        return ((EntryInfo) element).getCategory();
-      }
-      return null;
-    }
-
-    @Override
-    public boolean hasChildren(Object element) {
-      return getChildren(element).length != 0;
-    }
-
-    @Override
-    public void dispose() {
-    }
-
-    @Override
-    public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Utils
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    private List<CategoryInfo> getCategoriesWithGoodEntries() {
-      List<CategoryInfo> goodCategories = Lists.newArrayList();
-      for (CategoryInfo category : m_palette.getCategories()) {
-        if (!category.isOptional() || hasGoodEntries(category)) {
-          goodCategories.add(category);
-        }
-      }
-      return goodCategories;
-    }
-
-    private boolean hasGoodEntries(CategoryInfo category) {
-      List<EntryInfo> entries = category.getEntries();
-      for (EntryInfo entry : entries) {
-        if (m_goodEntryInfos.contains(entry)) {
-          return true;
-        }
-      }
-      return false;
-    }
-  };
-
-  /**
-   * Creates {@link CheckboxTreeViewer} for palette categories/entries.
-   */
-  private void createViewer(Composite parent) {
-    m_viewer = new CheckboxTreeViewer(parent, SWT.BORDER | SWT.MULTI);
-    GridDataFactory.create(m_viewer.getTree()).hintC(60, 20).grab().fill();
-    // providers
-    m_viewer.setContentProvider(m_contentProvider);
-    m_viewer.setLabelProvider(new LabelProvider() {
-      @Override
-      public Image getImage(Object element) {
-        if (element instanceof EntryInfo) {
-          return ((EntryInfo) element).getIcon();
-        }
-        return IMAGE_CATEGORY;
-      }
-
-      @Override
-      public String getText(Object element) {
-        return ((AbstractElementInfo) element).getName();
-      }
-    });
-    // set input
-    m_viewer.setInput(m_palette);
-    refreshViewer();
-    // listeners
-    m_viewer.addCheckStateListener(new ICheckStateListener() {
-      @Override
-      public void checkStateChanged(CheckStateChangedEvent event) {
-        AbstractElementInfo elementInfo = (AbstractElementInfo) event.getElement();
-        commands_add(new ElementVisibilityCommand(elementInfo, event.getChecked()));
-      }
-    });
-    m_viewer.addSelectionChangedListener(new ISelectionChangedListener() {
-      @Override
-      public void selectionChanged(SelectionChangedEvent event) {
-        updateButtons();
-      }
-    });
-    m_viewer.addDoubleClickListener(new IDoubleClickListener() {
-      @Override
-      public void doubleClick(DoubleClickEvent event) {
-        onEdit();
-      }
-    });
-    // DND
-    configureDND();
-  }
-
-  /**
-   * Shows actual state of palette in {@link #m_viewer}.
-   */
-  private void refreshViewer() {
-    m_viewer.refresh();
-    // update "visible"
-    {
-      List<Object> visibleElements = Lists.newArrayList();
-      for (CategoryInfo category : m_palette.getCategories()) {
-        if (category.isVisible()) {
-          visibleElements.add(category);
-        }
-        for (EntryInfo entry : category.getEntries()) {
-          if (entry.isVisible()) {
-            visibleElements.add(entry);
-          }
-        }
-      }
-      // update viewer
-      m_viewer.setCheckedElements(visibleElements.toArray());
-    }
-  }
-
-  /**
-   * @return the {@link List} of selected palette elements.
-   */
-  @SuppressWarnings("unchecked")
-  private List<Object> getSelectedElements() {
-    IStructuredSelection selection = (IStructuredSelection) m_viewer.getSelection();
-    return selection.toList();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI: buttons
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Button m_addEntryButton;
-  private Button m_editButton;
-  private Button m_removeButton;
-  private Button m_moveUpButton;
-  private Button m_moveDownButton;
-
-  /**
-   * Creates {@link Composite} with buttons to modify palette.
-   */
-  private void createButtonsComposite(Composite parent) {
-    Composite buttonsComposite = new Composite(parent, SWT.NONE);
-    GridDataFactory.create(buttonsComposite).grabV().fill();
-    GridLayoutFactory.create(buttonsComposite).noMargins();
-    //
-    createButton(buttonsComposite, Messages.PaletteManagerDialog_addCategoryButton, new Listener() {
-      @Override
-      public void handleEvent(Event event) {
-        onAddCategory();
-      }
-    });
-    m_addEntryButton =
-        createButton(
-            buttonsComposite,
-            Messages.PaletteManagerDialog_addEntryButton,
-            new Listener() {
-              @Override
-              public void handleEvent(Event event) {
-                onAddEntry();
-              }
-            });
-    //
-    createButtonSeparator(buttonsComposite);
-    m_editButton =
-        createButton(buttonsComposite, Messages.PaletteManagerDialog_editButton, new Listener() {
-          @Override
-          public void handleEvent(Event event) {
-            onEdit();
-          }
-        });
-    m_removeButton =
-        createButton(buttonsComposite, Messages.PaletteManagerDialog_removeButton, new Listener() {
-          @Override
-          public void handleEvent(Event event) {
-            onRemove();
-          }
-        });
-    //
-    createButtonSeparator(buttonsComposite);
-    m_moveUpButton =
-        createButton(buttonsComposite, Messages.PaletteManagerDialog_upButton, new Listener() {
-          @Override
-          public void handleEvent(Event event) {
-            onMove(-1);
-          }
-        });
-    m_moveDownButton =
-        createButton(buttonsComposite, Messages.PaletteManagerDialog_downButton, new Listener() {
-          @Override
-          public void handleEvent(Event event) {
-            onMove(+2);
-          }
-        });
-    //
-    createButtonSeparator(buttonsComposite);
-    createButton(buttonsComposite, Messages.PaletteManagerDialog_collapseAllButton, new Listener() {
-      @Override
-      public void handleEvent(Event event) {
-        m_viewer.collapseAll();
-      }
-    });
-    createButton(buttonsComposite, Messages.PaletteManagerDialog_expandAllButton, new Listener() {
-      @Override
-      public void handleEvent(Event event) {
-        m_viewer.expandAll();
-      }
-    });
-    // update buttons first time
-    updateButtons();
-  }
-
-  /**
-   * Creates {@link Button} with given text and {@link SWT#Selection} listener.
-   */
-  private static Button createButton(Composite parent, String text, Listener selectionListener) {
-    Button button = new Button(parent, SWT.NONE);
-    GridDataFactory.create(button).grabH().fillH();
-    button.setText(text);
-    button.addListener(SWT.Selection, selectionListener);
-    return button;
-  }
-
-  /**
-   * Creates separator between buttons on vertical buttons bar.
-   */
-  private static void createButtonSeparator(Composite parent) {
-    Label separator = new Label(parent, SWT.NONE);
-    GridDataFactory.create(separator).hintV(7);
-  }
-
-  /**
-   * Updates buttons according to selection in {@link #m_viewer}.
-   */
-  private void updateButtons() {
-    List<Object> selection = getSelectedElements();
-    m_addEntryButton.setEnabled(!selection.isEmpty());
-    m_editButton.setEnabled(selection.size() == 1);
-    m_removeButton.setEnabled(!selection.isEmpty());
-    // move up/down
-    List<CategoryInfo> categories = m_palette.getCategories();
-    {
-      boolean upEnabled = !selection.isEmpty();
-      boolean downEnabled = !selection.isEmpty();
-      for (Object element : selection) {
-        if (element instanceof CategoryInfo) {
-          upEnabled &= categories.indexOf(element) != 0;
-          downEnabled &= categories.indexOf(element) != categories.size() - 1;
-        } else if (element instanceof EntryInfo) {
-          EntryInfo entry = (EntryInfo) element;
-          List<EntryInfo> entries = entry.getCategory().getEntries();
-          upEnabled &= entries.indexOf(entry) != 0;
-          downEnabled &= entries.indexOf(entry) != entries.size() - 1;
-        }
-      }
-      m_moveUpButton.setEnabled(upEnabled);
-      m_moveDownButton.setEnabled(downEnabled);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds new {@link CategoryInfo}.
-   */
-  private void onAddCategory() {
-    CategoryAddDialog dialog = new CategoryAddDialog(getShell(), m_palette, null);
-    if (dialog.open() == Window.OK) {
-      commands_add(dialog.getCommand());
-      refreshViewer();
-    }
-  }
-
-  /**
-   * Adds new {@link EntryInfo}.
-   */
-  private void onAddEntry() {
-    final CategoryInfo targetCategory;
-    {
-      Object element = getSelectedElements().get(0);
-      if (element instanceof CategoryInfo) {
-        targetCategory = (CategoryInfo) element;
-      } else if (element instanceof EntryInfo) {
-        targetCategory = ((EntryInfo) element).getCategory();
-      } else {
-        return;
-      }
-    }
-    // prepare menu
-    MenuManager menuManager = new MenuManager();
-    // component
-    {
-      IAction action = new Action(Messages.PaletteManagerDialog_componentAction) {
-        @Override
-        public void run() {
-          ComponentAddDialog dialog =
-              new ComponentAddDialog(getShell(), m_context, m_palette, targetCategory);
-          if (dialog.open() == Window.OK) {
-            commands_add(dialog.getCommand());
-            refreshViewer();
-          }
-        }
-      };
-      menuManager.add(action);
-    }
-    // open menu
-    {
-      m_addEntryButton.setData("menuManager", menuManager);
-      Point location = m_addEntryButton.toDisplay(0, m_addEntryButton.getSize().y);
-      Menu menu = menuManager.createContextMenu(getShell());
-      menu.setLocation(location);
-      menu.setVisible(true);
-    }
-  }
-
-  /**
-   * Edits palette element.
-   */
-  private void onEdit() {
-    Object element = getSelectedElements().get(0);
-    if (element instanceof CategoryInfo) {
-      CategoryInfo category = (CategoryInfo) element;
-      CategoryEditDialog dialog = new CategoryEditDialog(getShell(), category);
-      if (dialog.open() == Window.OK) {
-        commands_add(dialog.getCommand());
-        refreshViewer();
-      }
-    } else if (element instanceof ToolEntryInfo) {
-      AbstractPaletteElementDialog dialog = null;
-      // prepare editing dialog
-      if (element instanceof ComponentEntryInfo) {
-        ComponentEntryInfo entryInfo = (ComponentEntryInfo) element;
-        dialog = new ComponentEditDialog(getShell(), m_context, entryInfo);
-      }
-      // execute dialog
-      if (dialog != null && dialog.open() == Window.OK) {
-        commands_add(dialog.getCommand());
-        refreshViewer();
-      }
-    }
-  }
-
-  /**
-   * Removes palette element.
-   */
-  private void onRemove() {
-    List<Object> selection = getSelectedElements();
-    if (MessageDialog.openConfirm(
-        getShell(),
-        Messages.PaletteManagerDialog_removeTitle,
-        MessageFormat.format(Messages.PaletteManagerDialog_removeMessage, selection.size()))) {
-      for (Object element : selection) {
-        if (element instanceof CategoryInfo) {
-          commands_add(new CategoryRemoveCommand((CategoryInfo) element));
-        } else if (element instanceof EntryInfo) {
-          commands_add(new EntryRemoveCommand((EntryInfo) element));
-        }
-      }
-      refreshViewer();
-    }
-  }
-
-  /**
-   * Moves selected elements up/down.
-   */
-  private void onMove(int delta) {
-    m_viewer.getTree().setRedraw(false);
-    try {
-      for (Object element : getSelectedElements()) {
-        if (element instanceof CategoryInfo) {
-          CategoryInfo category = (CategoryInfo) element;
-          List<CategoryInfo> categories = m_palette.getCategories();
-          int index = categories.indexOf(element);
-          int targetIndex = index + delta;
-          CategoryInfo nextCategory =
-              targetIndex < categories.size() ? (CategoryInfo) categories.get(targetIndex) : null;
-          commands_add(new CategoryMoveCommand(category, nextCategory));
-        } else if (element instanceof EntryInfo) {
-          EntryInfo entry = (EntryInfo) element;
-          CategoryInfo category = entry.getCategory();
-          List<EntryInfo> entries = category.getEntries();
-          int index = entries.indexOf(entry);
-          commands_add(new EntryMoveCommand(entry, category, entries.get(index + delta)));
-        }
-      }
-      refreshViewer();
-      updateButtons();
-    } finally {
-      m_viewer.getTree().setRedraw(true);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // DND
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private List<Object> m_dragElements;
-  private boolean m_dragCategory;
-
-  /**
-   * Configures DND in {@link #m_viewer}.
-   */
-  private void configureDND() {
-    Transfer[] transfers = new Transfer[]{EmptyTransfer.INSTANCE};
-    m_viewer.addDragSupport(DND.DROP_MOVE, transfers, new DragSourceListener() {
-      @Override
-      public void dragStart(DragSourceEvent event) {
-        m_dragElements = getSelectedElements();
-        m_dragCategory = m_dragElements.get(0) instanceof CategoryInfo;
-        // check that we drag only categories or only entries
-        for (Object element : m_dragElements) {
-          if (m_dragCategory != element instanceof CategoryInfo) {
-            event.doit = false;
-          }
-        }
-      }
-
-      @Override
-      public void dragSetData(DragSourceEvent event) {
-      }
-
-      @Override
-      public void dragFinished(DragSourceEvent event) {
-      }
-    });
-    ViewerDropAdapter dropAdapter = new ViewerDropAdapter(m_viewer) {
-      @Override
-      protected int determineLocation(DropTargetEvent event) {
-        if (event.item instanceof Item) {
-          Item item = (Item) event.item;
-          Point coordinates = m_viewer.getControl().toControl(event.x, event.y);
-          Rectangle bounds = getBounds(item);
-          // when drag entry, relation with category can be only ON
-          if (!m_dragCategory && determineTarget(event) instanceof CategoryInfo) {
-            return LOCATION_ON;
-          }
-          // in all other cases, drop before/after
-          return coordinates.y < bounds.y + bounds.height / 2 ? LOCATION_BEFORE : LOCATION_AFTER;
-        }
-        return LOCATION_NONE;
-      }
-
-      @Override
-      public boolean validateDrop(Object target, int operation, TransferData transferType) {
-        // category can be dragged only relative other category
-        if (m_dragCategory) {
-          return target instanceof CategoryInfo;
-        }
-        // all other cases are valid
-        return true;
-      }
-
-      @Override
-      public boolean performDrop(Object data) {
-        Object target = getCurrentTarget();
-        int location = getCurrentLocation();
-        if (m_dragCategory) {
-          Assert.instanceOf(CategoryInfo.class, target);
-          Assert.isTrue(location == LOCATION_BEFORE || location == LOCATION_AFTER);
-          // prepare next category
-          CategoryInfo nextCategory;
-          {
-            List<CategoryInfo> categories = m_palette.getCategories();
-            int index = categories.indexOf(target);
-            if (location == LOCATION_BEFORE) {
-              nextCategory = categories.get(index);
-            } else {
-              nextCategory = GenericsUtils.getNextOrNull(categories, index);
-            }
-          }
-          // add commands
-          for (Object element : m_dragElements) {
-            CategoryInfo category = (CategoryInfo) element;
-            commands_add(new CategoryMoveCommand(category, nextCategory));
-          }
-        } else if (target instanceof CategoryInfo) {
-          Assert.isTrue(location == LOCATION_ON);
-          CategoryInfo targetCategory = (CategoryInfo) target;
-          for (Object element : m_dragElements) {
-            EntryInfo entry = (EntryInfo) element;
-            commands_add(new EntryMoveCommand(entry, targetCategory, null));
-          }
-        } else {
-          EntryInfo targetEntry = (EntryInfo) target;
-          CategoryInfo targetCategory = targetEntry.getCategory();
-          // prepare next entry
-          EntryInfo nextEntry;
-          {
-            List<EntryInfo> entries = targetCategory.getEntries();
-            int index = entries.indexOf(targetEntry);
-            if (location == LOCATION_BEFORE) {
-              nextEntry = entries.get(index);
-            } else {
-              nextEntry = GenericsUtils.getNextOrNull(entries, index);
-            }
-          }
-          // add commands
-          for (Object element : m_dragElements) {
-            EntryInfo entry = (EntryInfo) element;
-            commands_add(new EntryMoveCommand(entry, targetCategory, nextEntry));
-          }
-        }
-        // refresh viewer to show result of applying commands
-        refreshViewer();
-        return true;
-      }
-    };
-    dropAdapter.setScrollExpandEnabled(false);
-    m_viewer.addDropSupport(DND.DROP_MOVE, transfers, dropAdapter);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link List} of {@link Command}'s to edit palette.
-   */
-  public List<Command> getCommands() {
-    return m_commands;
-  }
-
-  /**
-   * Adds given {@link Command} to the list (and executes it).
-   */
-  private void commands_add(Command command) {
-    try {
-      command.execute(m_palette);
-      command.addToCommandList(m_commands);
-    } catch (Throwable e) {
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Static images
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final Image IMAGE_CLEAR_FILTER =
+			DesignerPlugin.getImage("palette/clear_filter.gif");
+	private static final Image IMAGE_CATEGORY = DesignerPlugin.getImage("palette/category.gif");
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance fields
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final EditorContext m_context;
+	private final PaletteInfo m_palette;
+	private final Set<EntryInfo> m_goodEntryInfos;
+	private final List<Command> m_commands = Lists.newArrayList();
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public PaletteManagerDialog(EditorContext context,
+			PaletteInfo palette,
+			Set<EntryInfo> goodEntryInfos) {
+		super(DesignerPlugin.getShell(), DesignerPlugin.getDefault());
+		m_context = context;
+		m_palette = palette;
+		m_goodEntryInfos = goodEntryInfos;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private CheckboxTreeViewer m_viewer;
+
+	@Override
+	public void create() {
+		super.create();
+		// configure title area
+		getShell().setText(Messages.PaletteManagerDialog_shellTitle);
+		setTitle(Messages.PaletteManagerDialog_title);
+		setMessage(Messages.PaletteManagerDialog_message);
+	}
+
+	@Override
+	protected final Control createDialogArea(Composite parent) {
+		Composite area = (Composite) super.createDialogArea(parent);
+		//
+		Composite container = new Composite(area, SWT.NONE);
+		GridDataFactory.create(container).grab().fill();
+		createControls(container);
+		//
+		return area;
+	}
+
+	/**
+	 * Creates controls on this dialog.
+	 */
+	private void createControls(Composite container) {
+		GridLayoutFactory.create(container).columns(2);
+		createFilterComposite(container);
+		new Label(container, SWT.NONE);
+		createViewer(container);
+		createButtonsComposite(container);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI: filter
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final PaletteViewerFilter m_filter = new PaletteViewerFilter();
+	private Text m_filterText;
+	private ToolItem m_filterClearItem;
+
+	/**
+	 * Creates {@link Composite} with filter for {@link #m_viewer}.
+	 */
+	private void createFilterComposite(Composite container) {
+		Composite filterComposite = new Composite(container, SWT.NONE);
+		GridDataFactory.create(filterComposite).fillH();
+		GridLayoutFactory.create(filterComposite).columns(2).noMargins().noSpacing();
+		{
+			m_filterText = new Text(filterComposite, SWT.BORDER);
+			GridDataFactory.create(m_filterText).grabH().fillH();
+			// listener
+			m_filterText.addListener(SWT.Modify, new Listener() {
+				@Override
+				public void handleEvent(Event event) {
+					refreshFilter();
+				}
+			});
+		}
+		{
+			ToolBar toolBar = new ToolBar(filterComposite, SWT.FLAT);
+			m_filterClearItem = new ToolItem(toolBar, SWT.NONE);
+			m_filterClearItem.setImage(IMAGE_CLEAR_FILTER);
+			m_filterClearItem.setToolTipText(Messages.PaletteManagerDialog_clearFilter);
+			m_filterClearItem.setEnabled(false);
+			// listener
+			m_filterClearItem.addListener(SWT.Selection, new Listener() {
+				@Override
+				public void handleEvent(Event event) {
+					m_filterText.setText("");
+				}
+			});
+		}
+	}
+
+	/**
+	 * Updates filter and viewer.
+	 */
+	private void refreshFilter() {
+		m_viewer.getTree().setRedraw(false);
+		try {
+			String pattern = m_filterText.getText();
+			if (pattern.length() == 0) {
+				m_filterClearItem.setEnabled(false);
+				m_viewer.resetFilters();
+			} else {
+				m_filterClearItem.setEnabled(true);
+				// set updated filter
+				m_filter.setPattern(pattern);
+				m_viewer.resetFilters();
+				m_viewer.addFilter(m_filter);
+				// expand to show entries
+				m_viewer.expandAll();
+			}
+			// do refresh to update visibility state
+			refreshViewer();
+		} finally {
+			m_viewer.getTree().setRedraw(true);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Palette filter
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Implementation of {@link ViewerFilter} for filtering {@link PaletteInfo} elements.
+	 */
+	private static class PaletteViewerFilter extends ViewerFilter {
+		private SearchPattern m_pattern;
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Access
+		//
+		////////////////////////////////////////////////////////////////////////////
+		/**
+		 * Sets new pattern to match.
+		 */
+		public void setPattern(String pattern) {
+			if (pattern.indexOf('*') == -1) {
+				pattern += '*';
+			}
+			m_pattern = new SearchPattern();
+			m_pattern.setPattern(pattern);
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// ViewerFilter
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public boolean select(Viewer viewer, Object parent, Object element) {
+			if (element instanceof CategoryInfo) {
+				CategoryInfo category = (CategoryInfo) element;
+				for (EntryInfo entry : category.getEntries()) {
+					if (select(viewer, category, entry)) {
+						return true;
+					}
+				}
+			} else if (element instanceof EntryInfo) {
+				EntryInfo entry = (EntryInfo) element;
+				return m_pattern.matches(entry.getName());
+			}
+			return false;
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI: viewer
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final ITreeContentProvider m_contentProvider = new ITreeContentProvider() {
+		@Override
+		public Object[] getElements(Object inputElement) {
+			return getCategoriesWithGoodEntries().toArray();
+		}
+
+		@Override
+		public Object[] getChildren(Object parentElement) {
+			if (parentElement instanceof CategoryInfo) {
+				return ((CategoryInfo) parentElement).getEntries().toArray();
+			}
+			return ArrayUtils.EMPTY_OBJECT_ARRAY;
+		}
+
+		@Override
+		public Object getParent(Object element) {
+			if (element instanceof EntryInfo) {
+				return ((EntryInfo) element).getCategory();
+			}
+			return null;
+		}
+
+		@Override
+		public boolean hasChildren(Object element) {
+			return getChildren(element).length != 0;
+		}
+
+		@Override
+		public void dispose() {
+		}
+
+		@Override
+		public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Utils
+		//
+		////////////////////////////////////////////////////////////////////////////
+		private List<CategoryInfo> getCategoriesWithGoodEntries() {
+			List<CategoryInfo> goodCategories = Lists.newArrayList();
+			for (CategoryInfo category : m_palette.getCategories()) {
+				if (!category.isOptional() || hasGoodEntries(category)) {
+					goodCategories.add(category);
+				}
+			}
+			return goodCategories;
+		}
+
+		private boolean hasGoodEntries(CategoryInfo category) {
+			List<EntryInfo> entries = category.getEntries();
+			for (EntryInfo entry : entries) {
+				if (m_goodEntryInfos.contains(entry)) {
+					return true;
+				}
+			}
+			return false;
+		}
+	};
+
+	/**
+	 * Creates {@link CheckboxTreeViewer} for palette categories/entries.
+	 */
+	private void createViewer(Composite parent) {
+		m_viewer = new CheckboxTreeViewer(parent, SWT.BORDER | SWT.MULTI);
+		GridDataFactory.create(m_viewer.getTree()).hintC(60, 20).grab().fill();
+		// providers
+		m_viewer.setContentProvider(m_contentProvider);
+		m_viewer.setLabelProvider(new LabelProvider() {
+			@Override
+			public Image getImage(Object element) {
+				if (element instanceof EntryInfo) {
+					return ((EntryInfo) element).getIcon();
+				}
+				return IMAGE_CATEGORY;
+			}
+
+			@Override
+			public String getText(Object element) {
+				return ((AbstractElementInfo) element).getName();
+			}
+		});
+		// set input
+		m_viewer.setInput(m_palette);
+		refreshViewer();
+		// listeners
+		m_viewer.addCheckStateListener(new ICheckStateListener() {
+			@Override
+			public void checkStateChanged(CheckStateChangedEvent event) {
+				AbstractElementInfo elementInfo = (AbstractElementInfo) event.getElement();
+				commands_add(new ElementVisibilityCommand(elementInfo, event.getChecked()));
+			}
+		});
+		m_viewer.addSelectionChangedListener(new ISelectionChangedListener() {
+			@Override
+			public void selectionChanged(SelectionChangedEvent event) {
+				updateButtons();
+			}
+		});
+		m_viewer.addDoubleClickListener(new IDoubleClickListener() {
+			@Override
+			public void doubleClick(DoubleClickEvent event) {
+				onEdit();
+			}
+		});
+		// DND
+		configureDND();
+	}
+
+	/**
+	 * Shows actual state of palette in {@link #m_viewer}.
+	 */
+	private void refreshViewer() {
+		m_viewer.refresh();
+		// update "visible"
+		{
+			List<Object> visibleElements = Lists.newArrayList();
+			for (CategoryInfo category : m_palette.getCategories()) {
+				if (category.isVisible()) {
+					visibleElements.add(category);
+				}
+				for (EntryInfo entry : category.getEntries()) {
+					if (entry.isVisible()) {
+						visibleElements.add(entry);
+					}
+				}
+			}
+			// update viewer
+			m_viewer.setCheckedElements(visibleElements.toArray());
+		}
+	}
+
+	/**
+	 * @return the {@link List} of selected palette elements.
+	 */
+	@SuppressWarnings("unchecked")
+	private List<Object> getSelectedElements() {
+		IStructuredSelection selection = (IStructuredSelection) m_viewer.getSelection();
+		return selection.toList();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI: buttons
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Button m_addEntryButton;
+	private Button m_editButton;
+	private Button m_removeButton;
+	private Button m_moveUpButton;
+	private Button m_moveDownButton;
+
+	/**
+	 * Creates {@link Composite} with buttons to modify palette.
+	 */
+	private void createButtonsComposite(Composite parent) {
+		Composite buttonsComposite = new Composite(parent, SWT.NONE);
+		GridDataFactory.create(buttonsComposite).grabV().fill();
+		GridLayoutFactory.create(buttonsComposite).noMargins();
+		//
+		createButton(buttonsComposite, Messages.PaletteManagerDialog_addCategoryButton, new Listener() {
+			@Override
+			public void handleEvent(Event event) {
+				onAddCategory();
+			}
+		});
+		m_addEntryButton =
+				createButton(
+						buttonsComposite,
+						Messages.PaletteManagerDialog_addEntryButton,
+						new Listener() {
+							@Override
+							public void handleEvent(Event event) {
+								onAddEntry();
+							}
+						});
+		//
+		createButtonSeparator(buttonsComposite);
+		m_editButton =
+				createButton(buttonsComposite, Messages.PaletteManagerDialog_editButton, new Listener() {
+					@Override
+					public void handleEvent(Event event) {
+						onEdit();
+					}
+				});
+		m_removeButton =
+				createButton(buttonsComposite, Messages.PaletteManagerDialog_removeButton, new Listener() {
+					@Override
+					public void handleEvent(Event event) {
+						onRemove();
+					}
+				});
+		//
+		createButtonSeparator(buttonsComposite);
+		m_moveUpButton =
+				createButton(buttonsComposite, Messages.PaletteManagerDialog_upButton, new Listener() {
+					@Override
+					public void handleEvent(Event event) {
+						onMove(-1);
+					}
+				});
+		m_moveDownButton =
+				createButton(buttonsComposite, Messages.PaletteManagerDialog_downButton, new Listener() {
+					@Override
+					public void handleEvent(Event event) {
+						onMove(+2);
+					}
+				});
+		//
+		createButtonSeparator(buttonsComposite);
+		createButton(buttonsComposite, Messages.PaletteManagerDialog_collapseAllButton, new Listener() {
+			@Override
+			public void handleEvent(Event event) {
+				m_viewer.collapseAll();
+			}
+		});
+		createButton(buttonsComposite, Messages.PaletteManagerDialog_expandAllButton, new Listener() {
+			@Override
+			public void handleEvent(Event event) {
+				m_viewer.expandAll();
+			}
+		});
+		// update buttons first time
+		updateButtons();
+	}
+
+	/**
+	 * Creates {@link Button} with given text and {@link SWT#Selection} listener.
+	 */
+	private static Button createButton(Composite parent, String text, Listener selectionListener) {
+		Button button = new Button(parent, SWT.NONE);
+		GridDataFactory.create(button).grabH().fillH();
+		button.setText(text);
+		button.addListener(SWT.Selection, selectionListener);
+		return button;
+	}
+
+	/**
+	 * Creates separator between buttons on vertical buttons bar.
+	 */
+	private static void createButtonSeparator(Composite parent) {
+		Label separator = new Label(parent, SWT.NONE);
+		GridDataFactory.create(separator).hintV(7);
+	}
+
+	/**
+	 * Updates buttons according to selection in {@link #m_viewer}.
+	 */
+	private void updateButtons() {
+		List<Object> selection = getSelectedElements();
+		m_addEntryButton.setEnabled(!selection.isEmpty());
+		m_editButton.setEnabled(selection.size() == 1);
+		m_removeButton.setEnabled(!selection.isEmpty());
+		// move up/down
+		List<CategoryInfo> categories = m_palette.getCategories();
+		{
+			boolean upEnabled = !selection.isEmpty();
+			boolean downEnabled = !selection.isEmpty();
+			for (Object element : selection) {
+				if (element instanceof CategoryInfo) {
+					upEnabled &= categories.indexOf(element) != 0;
+					downEnabled &= categories.indexOf(element) != categories.size() - 1;
+				} else if (element instanceof EntryInfo) {
+					EntryInfo entry = (EntryInfo) element;
+					List<EntryInfo> entries = entry.getCategory().getEntries();
+					upEnabled &= entries.indexOf(entry) != 0;
+					downEnabled &= entries.indexOf(entry) != entries.size() - 1;
+				}
+			}
+			m_moveUpButton.setEnabled(upEnabled);
+			m_moveDownButton.setEnabled(downEnabled);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds new {@link CategoryInfo}.
+	 */
+	private void onAddCategory() {
+		CategoryAddDialog dialog = new CategoryAddDialog(getShell(), m_palette, null);
+		if (dialog.open() == Window.OK) {
+			commands_add(dialog.getCommand());
+			refreshViewer();
+		}
+	}
+
+	/**
+	 * Adds new {@link EntryInfo}.
+	 */
+	private void onAddEntry() {
+		final CategoryInfo targetCategory;
+		{
+			Object element = getSelectedElements().get(0);
+			if (element instanceof CategoryInfo) {
+				targetCategory = (CategoryInfo) element;
+			} else if (element instanceof EntryInfo) {
+				targetCategory = ((EntryInfo) element).getCategory();
+			} else {
+				return;
+			}
+		}
+		// prepare menu
+		MenuManager menuManager = new MenuManager();
+		// component
+		{
+			IAction action = new Action(Messages.PaletteManagerDialog_componentAction) {
+				@Override
+				public void run() {
+					ComponentAddDialog dialog =
+							new ComponentAddDialog(getShell(), m_context, m_palette, targetCategory);
+					if (dialog.open() == Window.OK) {
+						commands_add(dialog.getCommand());
+						refreshViewer();
+					}
+				}
+			};
+			menuManager.add(action);
+		}
+		// open menu
+		{
+			m_addEntryButton.setData("menuManager", menuManager);
+			Point location = m_addEntryButton.toDisplay(0, m_addEntryButton.getSize().y);
+			Menu menu = menuManager.createContextMenu(getShell());
+			menu.setLocation(location);
+			menu.setVisible(true);
+		}
+	}
+
+	/**
+	 * Edits palette element.
+	 */
+	private void onEdit() {
+		Object element = getSelectedElements().get(0);
+		if (element instanceof CategoryInfo) {
+			CategoryInfo category = (CategoryInfo) element;
+			CategoryEditDialog dialog = new CategoryEditDialog(getShell(), category);
+			if (dialog.open() == Window.OK) {
+				commands_add(dialog.getCommand());
+				refreshViewer();
+			}
+		} else if (element instanceof ToolEntryInfo) {
+			AbstractPaletteElementDialog dialog = null;
+			// prepare editing dialog
+			if (element instanceof ComponentEntryInfo) {
+				ComponentEntryInfo entryInfo = (ComponentEntryInfo) element;
+				dialog = new ComponentEditDialog(getShell(), m_context, entryInfo);
+			}
+			// execute dialog
+			if (dialog != null && dialog.open() == Window.OK) {
+				commands_add(dialog.getCommand());
+				refreshViewer();
+			}
+		}
+	}
+
+	/**
+	 * Removes palette element.
+	 */
+	private void onRemove() {
+		List<Object> selection = getSelectedElements();
+		if (MessageDialog.openConfirm(
+				getShell(),
+				Messages.PaletteManagerDialog_removeTitle,
+				MessageFormat.format(Messages.PaletteManagerDialog_removeMessage, selection.size()))) {
+			for (Object element : selection) {
+				if (element instanceof CategoryInfo) {
+					commands_add(new CategoryRemoveCommand((CategoryInfo) element));
+				} else if (element instanceof EntryInfo) {
+					commands_add(new EntryRemoveCommand((EntryInfo) element));
+				}
+			}
+			refreshViewer();
+		}
+	}
+
+	/**
+	 * Moves selected elements up/down.
+	 */
+	private void onMove(int delta) {
+		m_viewer.getTree().setRedraw(false);
+		try {
+			for (Object element : getSelectedElements()) {
+				if (element instanceof CategoryInfo) {
+					CategoryInfo category = (CategoryInfo) element;
+					List<CategoryInfo> categories = m_palette.getCategories();
+					int index = categories.indexOf(element);
+					int targetIndex = index + delta;
+					CategoryInfo nextCategory =
+							targetIndex < categories.size() ? (CategoryInfo) categories.get(targetIndex) : null;
+					commands_add(new CategoryMoveCommand(category, nextCategory));
+				} else if (element instanceof EntryInfo) {
+					EntryInfo entry = (EntryInfo) element;
+					CategoryInfo category = entry.getCategory();
+					List<EntryInfo> entries = category.getEntries();
+					int index = entries.indexOf(entry);
+					commands_add(new EntryMoveCommand(entry, category, entries.get(index + delta)));
+				}
+			}
+			refreshViewer();
+			updateButtons();
+		} finally {
+			m_viewer.getTree().setRedraw(true);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// DND
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private List<Object> m_dragElements;
+	private boolean m_dragCategory;
+
+	/**
+	 * Configures DND in {@link #m_viewer}.
+	 */
+	private void configureDND() {
+		Transfer[] transfers = new Transfer[]{EmptyTransfer.INSTANCE};
+		m_viewer.addDragSupport(DND.DROP_MOVE, transfers, new DragSourceListener() {
+			@Override
+			public void dragStart(DragSourceEvent event) {
+				m_dragElements = getSelectedElements();
+				m_dragCategory = m_dragElements.get(0) instanceof CategoryInfo;
+				// check that we drag only categories or only entries
+				for (Object element : m_dragElements) {
+					if (m_dragCategory != element instanceof CategoryInfo) {
+						event.doit = false;
+					}
+				}
+			}
+
+			@Override
+			public void dragSetData(DragSourceEvent event) {
+			}
+
+			@Override
+			public void dragFinished(DragSourceEvent event) {
+			}
+		});
+		ViewerDropAdapter dropAdapter = new ViewerDropAdapter(m_viewer) {
+			@Override
+			protected int determineLocation(DropTargetEvent event) {
+				if (event.item instanceof Item) {
+					Item item = (Item) event.item;
+					Point coordinates = m_viewer.getControl().toControl(event.x, event.y);
+					Rectangle bounds = getBounds(item);
+					// when drag entry, relation with category can be only ON
+					if (!m_dragCategory && determineTarget(event) instanceof CategoryInfo) {
+						return LOCATION_ON;
+					}
+					// in all other cases, drop before/after
+					return coordinates.y < bounds.y + bounds.height / 2 ? LOCATION_BEFORE : LOCATION_AFTER;
+				}
+				return LOCATION_NONE;
+			}
+
+			@Override
+			public boolean validateDrop(Object target, int operation, TransferData transferType) {
+				// category can be dragged only relative other category
+				if (m_dragCategory) {
+					return target instanceof CategoryInfo;
+				}
+				// all other cases are valid
+				return true;
+			}
+
+			@Override
+			public boolean performDrop(Object data) {
+				Object target = getCurrentTarget();
+				int location = getCurrentLocation();
+				if (m_dragCategory) {
+					Assert.instanceOf(CategoryInfo.class, target);
+					Assert.isTrue(location == LOCATION_BEFORE || location == LOCATION_AFTER);
+					// prepare next category
+					CategoryInfo nextCategory;
+					{
+						List<CategoryInfo> categories = m_palette.getCategories();
+						int index = categories.indexOf(target);
+						if (location == LOCATION_BEFORE) {
+							nextCategory = categories.get(index);
+						} else {
+							nextCategory = GenericsUtils.getNextOrNull(categories, index);
+						}
+					}
+					// add commands
+					for (Object element : m_dragElements) {
+						CategoryInfo category = (CategoryInfo) element;
+						commands_add(new CategoryMoveCommand(category, nextCategory));
+					}
+				} else if (target instanceof CategoryInfo) {
+					Assert.isTrue(location == LOCATION_ON);
+					CategoryInfo targetCategory = (CategoryInfo) target;
+					for (Object element : m_dragElements) {
+						EntryInfo entry = (EntryInfo) element;
+						commands_add(new EntryMoveCommand(entry, targetCategory, null));
+					}
+				} else {
+					EntryInfo targetEntry = (EntryInfo) target;
+					CategoryInfo targetCategory = targetEntry.getCategory();
+					// prepare next entry
+					EntryInfo nextEntry;
+					{
+						List<EntryInfo> entries = targetCategory.getEntries();
+						int index = entries.indexOf(targetEntry);
+						if (location == LOCATION_BEFORE) {
+							nextEntry = entries.get(index);
+						} else {
+							nextEntry = GenericsUtils.getNextOrNull(entries, index);
+						}
+					}
+					// add commands
+					for (Object element : m_dragElements) {
+						EntryInfo entry = (EntryInfo) element;
+						commands_add(new EntryMoveCommand(entry, targetCategory, nextEntry));
+					}
+				}
+				// refresh viewer to show result of applying commands
+				refreshViewer();
+				return true;
+			}
+		};
+		dropAdapter.setScrollExpandEnabled(false);
+		m_viewer.addDropSupport(DND.DROP_MOVE, transfers, dropAdapter);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link List} of {@link Command}'s to edit palette.
+	 */
+	public List<Command> getCommands() {
+		return m_commands;
+	}
+
+	/**
+	 * Adds given {@link Command} to the list (and executes it).
+	 */
+	private void commands_add(Command command) {
+		try {
+			command.execute(m_palette);
+			command.addToCommandList(m_commands);
+		} catch (Throwable e) {
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/dialogs/PalettePreferencesDialog.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/dialogs/PalettePreferencesDialog.java
index 2ea5b62ef..e6eb67af4 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/dialogs/PalettePreferencesDialog.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/dialogs/PalettePreferencesDialog.java
@@ -30,102 +30,102 @@
  * @coverage XML.editor.palette.ui
  */
 public final class PalettePreferencesDialog extends AbstractPaletteDialog {
-  private final PluginPalettePreferences m_preferences;
+	private final PluginPalettePreferences m_preferences;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public PalettePreferencesDialog(Shell parentShell, PluginPalettePreferences preferences) {
-    super(parentShell,
-        Messages.PalettePreferencesDialog_shellTitle,
-        Messages.PalettePreferencesDialog_title,
-        null,
-        Messages.PalettePreferencesDialog_message);
-    m_preferences = preferences;
-    setShellStyle(SWT.APPLICATION_MODAL | SWT.DIALOG_TRIM);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public PalettePreferencesDialog(Shell parentShell, PluginPalettePreferences preferences) {
+		super(parentShell,
+				Messages.PalettePreferencesDialog_shellTitle,
+				Messages.PalettePreferencesDialog_title,
+				null,
+				Messages.PalettePreferencesDialog_message);
+		m_preferences = preferences;
+		setShellStyle(SWT.APPLICATION_MODAL | SWT.DIALOG_TRIM);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Commits settings from dialog to the preferences.
-   */
-  public void commit() {
-    m_preferences.setOnlyIcons(m_onlyIconsField.getSelection());
-    m_preferences.setMinColumns(1 + m_minColumnsField.getSelection()[0]);
-    m_preferences.setCategoryFont(m_categoryFontField.getFontDataArray());
-    m_preferences.setEntryFont(m_entryFontField.getFontDataArray());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Commits settings from dialog to the preferences.
+	 */
+	public void commit() {
+		m_preferences.setOnlyIcons(m_onlyIconsField.getSelection());
+		m_preferences.setMinColumns(1 + m_minColumnsField.getSelection()[0]);
+		m_preferences.setCategoryFont(m_categoryFontField.getFontDataArray());
+		m_preferences.setEntryFont(m_entryFontField.getFontDataArray());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private BooleanDialogField m_onlyIconsField;
-  private SelectionButtonDialogFieldGroup m_minColumnsField;
-  private FontDialogField m_categoryFontField;
-  private FontDialogField m_entryFontField;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private BooleanDialogField m_onlyIconsField;
+	private SelectionButtonDialogFieldGroup m_minColumnsField;
+	private FontDialogField m_categoryFontField;
+	private FontDialogField m_entryFontField;
 
-  @Override
-  protected void createControls(Composite container) {
-    m_fieldsContainer = container;
-    GridLayoutFactory.create(container).columns(2);
-    // only icons
-    {
-      m_onlyIconsField = new BooleanDialogField();
-      doCreateField(m_onlyIconsField, Messages.PalettePreferencesDialog_onlyIcons);
-    }
-    // min columns
-    {
-      m_minColumnsField =
-          new SelectionButtonDialogFieldGroup(SWT.RADIO, new String[]{
-              "1 (one)",
-              "2 (two)",
-              "3 (three)",
-              "4 (four)",
-              "5 (five)"}, 5, SWT.SHADOW_ETCHED_IN);
-      doCreateField(m_minColumnsField, Messages.PalettePreferencesDialog_minColumnsNumber);
-    }
-    // category font
-    {
-      m_categoryFontField = new FontDialogField();
-      doCreateField(m_categoryFontField, Messages.PalettePreferencesDialog_categoryFont);
-      m_categoryFontField.setChooseButtonText(Messages.PalettePreferencesDialog_categoryFontChoose);
-      m_categoryFontField.setDefaultButtonText(Messages.PalettePreferencesDialog_categoryFontSystem);
-    }
-    // entry font
-    {
-      m_entryFontField = new FontDialogField();
-      doCreateField(m_entryFontField, Messages.PalettePreferencesDialog_entryFont);
-      m_entryFontField.setChooseButtonText(Messages.PalettePreferencesDialog_entryFontChoose);
-      m_entryFontField.setDefaultButtonText(Messages.PalettePreferencesDialog_entryFontSystem);
-    }
-    // initialize fields
-    m_onlyIconsField.setSelection(m_preferences.isOnlyIcons());
-    m_minColumnsField.setSelection(new int[]{m_preferences.getMinColumns() - 1});
-    m_categoryFontField.setFontDataArray(m_preferences.getCategoryFontDescriptor().getFontData());
-    m_entryFontField.setFontDataArray(m_preferences.getEntryFontDescriptor().getFontData());
-  }
+	@Override
+	protected void createControls(Composite container) {
+		m_fieldsContainer = container;
+		GridLayoutFactory.create(container).columns(2);
+		// only icons
+		{
+			m_onlyIconsField = new BooleanDialogField();
+			doCreateField(m_onlyIconsField, Messages.PalettePreferencesDialog_onlyIcons);
+		}
+		// min columns
+		{
+			m_minColumnsField =
+					new SelectionButtonDialogFieldGroup(SWT.RADIO, new String[]{
+							"1 (one)",
+							"2 (two)",
+							"3 (three)",
+							"4 (four)",
+					"5 (five)"}, 5, SWT.SHADOW_ETCHED_IN);
+			doCreateField(m_minColumnsField, Messages.PalettePreferencesDialog_minColumnsNumber);
+		}
+		// category font
+		{
+			m_categoryFontField = new FontDialogField();
+			doCreateField(m_categoryFontField, Messages.PalettePreferencesDialog_categoryFont);
+			m_categoryFontField.setChooseButtonText(Messages.PalettePreferencesDialog_categoryFontChoose);
+			m_categoryFontField.setDefaultButtonText(Messages.PalettePreferencesDialog_categoryFontSystem);
+		}
+		// entry font
+		{
+			m_entryFontField = new FontDialogField();
+			doCreateField(m_entryFontField, Messages.PalettePreferencesDialog_entryFont);
+			m_entryFontField.setChooseButtonText(Messages.PalettePreferencesDialog_entryFontChoose);
+			m_entryFontField.setDefaultButtonText(Messages.PalettePreferencesDialog_entryFontSystem);
+		}
+		// initialize fields
+		m_onlyIconsField.setSelection(m_preferences.isOnlyIcons());
+		m_minColumnsField.setSelection(new int[]{m_preferences.getMinColumns() - 1});
+		m_categoryFontField.setFontDataArray(m_preferences.getCategoryFontDescriptor().getFontData());
+		m_entryFontField.setFontDataArray(m_preferences.getEntryFontDescriptor().getFontData());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Composite m_fieldsContainer;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Composite m_fieldsContainer;
 
-  /**
-   * Configures given {@link DialogField} for specific of this dialog.
-   */
-  protected final void doCreateField(DialogField dialogField, String labelText) {
-    dialogField.setLabelText(labelText);
-    dialogField.setDialogFieldListener(m_validateListener);
-    DialogFieldUtils.fillControls(m_fieldsContainer, dialogField, 2, 60);
-  }
+	/**
+	 * Configures given {@link DialogField} for specific of this dialog.
+	 */
+	protected final void doCreateField(DialogField dialogField, String labelText) {
+		dialogField.setLabelText(labelText);
+		dialogField.setDialogFieldListener(m_validateListener);
+		DialogFieldUtils.fillControls(m_fieldsContainer, dialogField, 2, 60);
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/model/AbstractElementInfo.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/model/AbstractElementInfo.java
index b718a92ac..03534d9e5 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/model/AbstractElementInfo.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/model/AbstractElementInfo.java
@@ -19,147 +19,147 @@
  * @coverage XML.editor.palette
  */
 public abstract class AbstractElementInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final int hashCode() {
-    return m_id.hashCode();
-  }
-
-  @Override
-  public final boolean equals(Object obj) {
-    if (obj == this) {
-      return true;
-    }
-    if (obj instanceof AbstractElementInfo) {
-      AbstractElementInfo element = (AbstractElementInfo) obj;
-      return m_id.equals(element.m_id);
-    }
-    return false;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Id
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private String m_id;
-
-  /**
-   * Sets the id of this element, can be used only one time.
-   */
-  public final void setId(String id) {
-    Assert.isNull(m_id);
-    Assert.isNotNull(id);
-    m_id = id;
-  }
-
-  /**
-   * @return the id of this element.
-   */
-  public final String getId() {
-    return m_id;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Visible
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private boolean m_visible = true;
-
-  /**
-   * @return <code>true</code> if this element is visible.
-   */
-  public final boolean isVisible() {
-    return m_visible;
-  }
-
-  /**
-   * Sets visibility flag.
-   */
-  public final void setVisible(boolean visible) {
-    m_visible = visible;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Name
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private String m_name;
-
-  /**
-   * @return the name of this element.
-   */
-  public final String getName() {
-    if (m_name == null) {
-      return getNameDefault();
-    }
-    return m_name;
-  }
-
-  /**
-   * @return the "raw" name, without default.
-   */
-  protected String getNameRaw() {
-    return m_name;
-  }
-
-  /**
-   * @return the default name, instead of <code>null</code>.
-   */
-  protected String getNameDefault() {
-    return "(unknown)";
-  }
-
-  /**
-   * Sets the name of this element.
-   */
-  public final void setName(String name) {
-    m_name = name;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Description
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private String m_description;
-
-  /**
-   * @return the description of this element.
-   */
-  public final String getDescription() {
-    return m_description;
-  }
-
-  /**
-   * Sets the description of this element.
-   */
-  public final void setDescription(String description) {
-    m_description = description;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if given {@link AttributesProvider} has attribute with value "true",
-   *         or return <code>defaultValue</code> if there are no such attribute.
-   */
-  protected static boolean getBoolean(AttributesProvider attributes,
-      String attribute,
-      boolean defaultValue) {
-    String text = attributes.getAttribute(attribute);
-    if (text != null) {
-      return "true".equals(text);
-    }
-    return defaultValue;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final int hashCode() {
+		return m_id.hashCode();
+	}
+
+	@Override
+	public final boolean equals(Object obj) {
+		if (obj == this) {
+			return true;
+		}
+		if (obj instanceof AbstractElementInfo) {
+			AbstractElementInfo element = (AbstractElementInfo) obj;
+			return m_id.equals(element.m_id);
+		}
+		return false;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Id
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private String m_id;
+
+	/**
+	 * Sets the id of this element, can be used only one time.
+	 */
+	public final void setId(String id) {
+		Assert.isNull(m_id);
+		Assert.isNotNull(id);
+		m_id = id;
+	}
+
+	/**
+	 * @return the id of this element.
+	 */
+	public final String getId() {
+		return m_id;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Visible
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private boolean m_visible = true;
+
+	/**
+	 * @return <code>true</code> if this element is visible.
+	 */
+	public final boolean isVisible() {
+		return m_visible;
+	}
+
+	/**
+	 * Sets visibility flag.
+	 */
+	public final void setVisible(boolean visible) {
+		m_visible = visible;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Name
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private String m_name;
+
+	/**
+	 * @return the name of this element.
+	 */
+	public final String getName() {
+		if (m_name == null) {
+			return getNameDefault();
+		}
+		return m_name;
+	}
+
+	/**
+	 * @return the "raw" name, without default.
+	 */
+	protected String getNameRaw() {
+		return m_name;
+	}
+
+	/**
+	 * @return the default name, instead of <code>null</code>.
+	 */
+	protected String getNameDefault() {
+		return "(unknown)";
+	}
+
+	/**
+	 * Sets the name of this element.
+	 */
+	public final void setName(String name) {
+		m_name = name;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Description
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private String m_description;
+
+	/**
+	 * @return the description of this element.
+	 */
+	public final String getDescription() {
+		return m_description;
+	}
+
+	/**
+	 * Sets the description of this element.
+	 */
+	public final void setDescription(String description) {
+		m_description = description;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if given {@link AttributesProvider} has attribute with value "true",
+	 *         or return <code>defaultValue</code> if there are no such attribute.
+	 */
+	protected static boolean getBoolean(AttributesProvider attributes,
+			String attribute,
+			boolean defaultValue) {
+		String text = attributes.getAttribute(attribute);
+		if (text != null) {
+			return "true".equals(text);
+		}
+		return defaultValue;
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/model/AttributesProvider.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/model/AttributesProvider.java
index 2af6d29fa..74d6e3f33 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/model/AttributesProvider.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/model/AttributesProvider.java
@@ -17,5 +17,5 @@
  * @coverage XML.editor.palette
  */
 public interface AttributesProvider {
-  String getAttribute(String name);
+	String getAttribute(String name);
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/model/AttributesProviders.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/model/AttributesProviders.java
index bced0ef10..d77adf57b 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/model/AttributesProviders.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/model/AttributesProviders.java
@@ -23,30 +23,30 @@
  * @coverage XML.editor.palette
  */
 public final class AttributesProviders {
-  public static AttributesProvider get(final IConfigurationElement element) {
-    return new AttributesProvider() {
-      @Override
-      public String getAttribute(String name) {
-        return element.getAttribute(name);
-      }
-    };
-  }
+	public static AttributesProvider get(final IConfigurationElement element) {
+		return new AttributesProvider() {
+			@Override
+			public String getAttribute(String name) {
+				return element.getAttribute(name);
+			}
+		};
+	}
 
-  public static AttributesProvider get(final Attributes attributes) {
-    return new AttributesProvider() {
-      @Override
-      public String getAttribute(String name) {
-        return attributes.getValue(name);
-      }
-    };
-  }
+	public static AttributesProvider get(final Attributes attributes) {
+		return new AttributesProvider() {
+			@Override
+			public String getAttribute(String name) {
+				return attributes.getValue(name);
+			}
+		};
+	}
 
-  public static AttributesProvider get(final Map<String, String> attributes) {
-    return new AttributesProvider() {
-      @Override
-      public String getAttribute(String name) {
-        return attributes.get(name);
-      }
-    };
-  }
+	public static AttributesProvider get(final Map<String, String> attributes) {
+		return new AttributesProvider() {
+			@Override
+			public String getAttribute(String name) {
+				return attributes.get(name);
+			}
+		};
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/model/CategoryInfo.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/model/CategoryInfo.java
index c03f2884d..898c15e3a 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/model/CategoryInfo.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/model/CategoryInfo.java
@@ -23,119 +23,119 @@
  * @coverage XML.editor.palette
  */
 public final class CategoryInfo extends AbstractElementInfo {
-  private final List<EntryInfo> m_entries = Lists.newArrayList();
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CategoryInfo() {
-  }
-
-  public CategoryInfo(String id) {
-    setId(id);
-  }
-
-  public CategoryInfo(AttributesProvider attributes) {
-    // id
-    {
-      String id = attributes.getAttribute("id");
-      Assert.isNotNull(id);
-      setId(id);
-    }
-    // name
-    {
-      String name = attributes.getAttribute("name");
-      Assert.isNotNull(name);
-      setName(name);
-    }
-    // description
-    setDescription(attributes.getAttribute("description"));
-    // state
-    setVisible(getBoolean(attributes, "visible", true));
-    setOpen(getBoolean(attributes, "open", true));
-    m_optional = getBoolean(attributes, "optional", false);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    return "Category(id='" + getId() + "', name='" + getName() + "', entries=" + m_entries + ")";
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Entries
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link List} of {@link EntryInfo}.
-   */
-  public List<EntryInfo> getEntries() {
-    return m_entries;
-  }
-
-  /**
-   * Adds given {@link EntryInfo}.
-   */
-  public void addEntry(EntryInfo entry) {
-    addEntry(m_entries.size(), entry);
-  }
-
-  /**
-   * Adds given {@link EntryInfo}.
-   */
-  public void addEntry(int index, EntryInfo entry) {
-    m_entries.add(index, entry);
-    entry.setCategory(this);
-  }
-
-  /**
-   * Removes given {@link EntryInfo}.
-   */
-  public void removeEntry(EntryInfo entry) {
-    m_entries.remove(entry);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Open
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private boolean m_open;
-
-  /**
-   * @return <code>true</code> if this category in open.
-   */
-  public boolean isOpen() {
-    return m_open;
-  }
-
-  /**
-   * Sets flag if this category in open.
-   */
-  public void setOpen(boolean open) {
-    m_open = open;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Optional
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private boolean m_optional;
-
-  /**
-   * @return <code>true</code> if this category is optional, i.e. for some additional set of
-   *         components and should be hidden is these components are not available. Currently we
-   *         check this by checking that category is empty.
-   */
-  public boolean isOptional() {
-    return m_optional;
-  }
+	private final List<EntryInfo> m_entries = Lists.newArrayList();
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CategoryInfo() {
+	}
+
+	public CategoryInfo(String id) {
+		setId(id);
+	}
+
+	public CategoryInfo(AttributesProvider attributes) {
+		// id
+		{
+			String id = attributes.getAttribute("id");
+			Assert.isNotNull(id);
+			setId(id);
+		}
+		// name
+		{
+			String name = attributes.getAttribute("name");
+			Assert.isNotNull(name);
+			setName(name);
+		}
+		// description
+		setDescription(attributes.getAttribute("description"));
+		// state
+		setVisible(getBoolean(attributes, "visible", true));
+		setOpen(getBoolean(attributes, "open", true));
+		m_optional = getBoolean(attributes, "optional", false);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		return "Category(id='" + getId() + "', name='" + getName() + "', entries=" + m_entries + ")";
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Entries
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link List} of {@link EntryInfo}.
+	 */
+	public List<EntryInfo> getEntries() {
+		return m_entries;
+	}
+
+	/**
+	 * Adds given {@link EntryInfo}.
+	 */
+	public void addEntry(EntryInfo entry) {
+		addEntry(m_entries.size(), entry);
+	}
+
+	/**
+	 * Adds given {@link EntryInfo}.
+	 */
+	public void addEntry(int index, EntryInfo entry) {
+		m_entries.add(index, entry);
+		entry.setCategory(this);
+	}
+
+	/**
+	 * Removes given {@link EntryInfo}.
+	 */
+	public void removeEntry(EntryInfo entry) {
+		m_entries.remove(entry);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Open
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private boolean m_open;
+
+	/**
+	 * @return <code>true</code> if this category in open.
+	 */
+	public boolean isOpen() {
+		return m_open;
+	}
+
+	/**
+	 * Sets flag if this category in open.
+	 */
+	public void setOpen(boolean open) {
+		m_open = open;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Optional
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private boolean m_optional;
+
+	/**
+	 * @return <code>true</code> if this category is optional, i.e. for some additional set of
+	 *         components and should be hidden is these components are not available. Currently we
+	 *         check this by checking that category is empty.
+	 */
+	public boolean isOptional() {
+		return m_optional;
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/model/ChooseComponentEntryInfo.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/model/ChooseComponentEntryInfo.java
index d9bea448c..b7fc8fc78 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/model/ChooseComponentEntryInfo.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/model/ChooseComponentEntryInfo.java
@@ -34,97 +34,97 @@
  * @coverage XML.editor.palette
  */
 public final class ChooseComponentEntryInfo extends ToolEntryInfo {
-  private static final Image ICON = DesignerPlugin.getImage("palette/ChooseComponent.gif");
+	private static final Image ICON = DesignerPlugin.getImage("palette/ChooseComponent.gif");
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ChooseComponentEntryInfo() {
-    setName(Messages.ChooseComponentEntryInfo_name);
-    setDescription(Messages.ChooseComponentEntryInfo_description);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ChooseComponentEntryInfo() {
+		setName(Messages.ChooseComponentEntryInfo_name);
+		setDescription(Messages.ChooseComponentEntryInfo_description);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // EntryInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Image getIcon() {
-    return ICON;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// EntryInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Image getIcon() {
+		return ICON;
+	}
 
-  @Override
-  public Tool createTool() throws Exception {
-    Shell parentShell = IPaletteSite.Helper.getSite(m_rootJavaInfo).getShell();
-    String componentClassName = JdtUiUtils.selectTypeName(parentShell, m_javaProject);
-    if (componentClassName != null) {
-      ComponentEntryInfo componentEntry = new ComponentEntryInfo();
-      // configure component entry
-      {
-        componentEntry.setId("custom_" + System.currentTimeMillis());
-        componentEntry.setName(CodeUtils.getShortClass(componentClassName));
-        componentEntry.setDescription(MessageFormat.format(
-            Messages.ChooseComponentEntryInfo_newDescription,
-            componentClassName));
-        componentEntry.setComponentClassName(componentClassName);
-      }
-      // try to initialize
-      if (componentEntry.initialize(m_editPartViewer, m_rootJavaInfo)) {
-        addChosenComponent(componentEntry);
-        return componentEntry.createTool();
-      }
-    }
-    return null;
-  }
+	@Override
+	public Tool createTool() throws Exception {
+		Shell parentShell = IPaletteSite.Helper.getSite(m_rootJavaInfo).getShell();
+		String componentClassName = JdtUiUtils.selectTypeName(parentShell, m_javaProject);
+		if (componentClassName != null) {
+			ComponentEntryInfo componentEntry = new ComponentEntryInfo();
+			// configure component entry
+			{
+				componentEntry.setId("custom_" + System.currentTimeMillis());
+				componentEntry.setName(CodeUtils.getShortClass(componentClassName));
+				componentEntry.setDescription(MessageFormat.format(
+						Messages.ChooseComponentEntryInfo_newDescription,
+						componentClassName));
+				componentEntry.setComponentClassName(componentClassName);
+			}
+			// try to initialize
+			if (componentEntry.initialize(m_editPartViewer, m_rootJavaInfo)) {
+				addChosenComponent(componentEntry);
+				return componentEntry.createTool();
+			}
+		}
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds chosen {@link ComponentEntryInfo} to the palette.
-   */
-  private void addChosenComponent(ComponentEntryInfo entry) {
-    if (DesignerPlugin.getPreferences().getBoolean(IPreferenceConstants.P_COMMON_PALETTE_ADD_CHOSEN)) {
-      CategoryInfo category = getCustomCategory();
-      Command command =
-          new ComponentAddCommand(entry.getId(),
-              entry.getName(),
-              entry.getDescription(),
-              true,
-              entry.getClassName(),
-              category);
-      getSite().addCommand(command);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds chosen {@link ComponentEntryInfo} to the palette.
+	 */
+	private void addChosenComponent(ComponentEntryInfo entry) {
+		if (DesignerPlugin.getPreferences().getBoolean(IPreferenceConstants.P_COMMON_PALETTE_ADD_CHOSEN)) {
+			CategoryInfo category = getCustomCategory();
+			Command command =
+					new ComponentAddCommand(entry.getId(),
+							entry.getName(),
+							entry.getDescription(),
+							true,
+							entry.getClassName(),
+							category);
+			getSite().addCommand(command);
+		}
+	}
 
-  /**
-   * @return the {@link CategoryInfo} with name "Custom", existing one, or newly added.
-   */
-  private CategoryInfo getCustomCategory() {
-    PaletteInfo palette = getSite().getPalette();
-    // try to find "Custom" category
-    List<CategoryInfo> categories = palette.getCategories();
-    for (CategoryInfo category : categories) {
-      if ("Custom".equals(category.getName())) {
-        return category;
-      }
-    }
-    // no "Custom" category, add it
-    {
-      getSite().addCommand(
-          new CategoryAddCommand("category_" + System.currentTimeMillis(),
-              "Custom",
-              Messages.ChooseComponentEntryInfo_customCategoryDescription,
-              true,
-              true,
-              null));
-    }
-    // now, after command, we should be able to find "Custom"
-    return getCustomCategory();
-  }
+	/**
+	 * @return the {@link CategoryInfo} with name "Custom", existing one, or newly added.
+	 */
+	private CategoryInfo getCustomCategory() {
+		PaletteInfo palette = getSite().getPalette();
+		// try to find "Custom" category
+		List<CategoryInfo> categories = palette.getCategories();
+		for (CategoryInfo category : categories) {
+			if ("Custom".equals(category.getName())) {
+				return category;
+			}
+		}
+		// no "Custom" category, add it
+		{
+			getSite().addCommand(
+					new CategoryAddCommand("category_" + System.currentTimeMillis(),
+							"Custom",
+							Messages.ChooseComponentEntryInfo_customCategoryDescription,
+							true,
+							true,
+							null));
+		}
+		// now, after command, we should be able to find "Custom"
+		return getCustomCategory();
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/model/ComponentEntryInfo.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/model/ComponentEntryInfo.java
index d88bccde3..216a60958 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/model/ComponentEntryInfo.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/model/ComponentEntryInfo.java
@@ -57,372 +57,372 @@
  * @coverage XML.editor.palette
  */
 public final class ComponentEntryInfo extends ToolEntryInfo {
-  public static final String KEY_SIMULATE_PRESENTATION = "ComponentEntryInfo.simulatePresentation";
-  public static final Image DEFAULT_ICON = DesignerPlugin.getImage("palette/Object.png");
-  private String m_className;
-  private String m_creationId;
-  private String m_enabledScript;
-  private Image m_icon;
+	public static final String KEY_SIMULATE_PRESENTATION = "ComponentEntryInfo.simulatePresentation";
+	public static final Image DEFAULT_ICON = DesignerPlugin.getImage("palette/Object.png");
+	private String m_className;
+	private String m_creationId;
+	private String m_enabledScript;
+	private Image m_icon;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ComponentEntryInfo() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ComponentEntryInfo() {
+	}
 
-  public ComponentEntryInfo(CategoryInfo categoryInfo, IConfigurationElement element)
-      throws Exception {
-    this(categoryInfo, AttributesProviders.get(element));
-    m_icon = ExternalFactoriesHelper.getImage(element, "icon");
-    addLibraries(element);
-  }
+	public ComponentEntryInfo(CategoryInfo categoryInfo, IConfigurationElement element)
+			throws Exception {
+		this(categoryInfo, AttributesProviders.get(element));
+		m_icon = ExternalFactoriesHelper.getImage(element, "icon");
+		addLibraries(element);
+	}
 
-  public ComponentEntryInfo(CategoryInfo categoryInfo, AttributesProvider attributes) {
-    // class
-    {
-      m_className = attributes.getAttribute("class");
-      Assert.isNotNull(m_className, "Component must have 'class' attribute.");
-    }
-    // creationId
-    {
-      m_creationId = attributes.getAttribute("creationId");
-    }
-    // id
-    {
-      String id = attributes.getAttribute("id");
-      if (id == null) {
-        id = categoryInfo.getId() + " " + m_className;
-        if (m_creationId != null) {
-          id += " " + m_creationId;
-        }
-      }
-      setId(id);
-    }
-    // other
-    setName(attributes.getAttribute("name"));
-    setDescription(attributes.getAttribute("description"));
-    setVisible(getBoolean(attributes, "visible", true));
-    m_enabledScript = attributes.getAttribute("enabled");
-  }
+	public ComponentEntryInfo(CategoryInfo categoryInfo, AttributesProvider attributes) {
+		// class
+		{
+			m_className = attributes.getAttribute("class");
+			Assert.isNotNull(m_className, "Component must have 'class' attribute.");
+		}
+		// creationId
+		{
+			m_creationId = attributes.getAttribute("creationId");
+		}
+		// id
+		{
+			String id = attributes.getAttribute("id");
+			if (id == null) {
+				id = categoryInfo.getId() + " " + m_className;
+				if (m_creationId != null) {
+					id += " " + m_creationId;
+				}
+			}
+			setId(id);
+		}
+		// other
+		setName(attributes.getAttribute("name"));
+		setDescription(attributes.getAttribute("description"));
+		setVisible(getBoolean(attributes, "visible", true));
+		m_enabledScript = attributes.getAttribute("enabled");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    return "Component(class='" + m_className + "')";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		return "Component(class='" + m_className + "')";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Creation id
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the "id" for {@link ConstructorCreationSupport}, may be <code>null</code>.
-   */
-  public String getCreationId() {
-    return m_creationId;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Creation id
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the "id" for {@link ConstructorCreationSupport}, may be <code>null</code>.
+	 */
+	public String getCreationId() {
+		return m_creationId;
+	}
 
-  /**
-   * Sets the "id" for {@link ConstructorCreationSupport}, may be <code>null</code>.
-   */
-  public void setCreationId(String creationId) {
-    m_creationId = creationId;
-  }
+	/**
+	 * Sets the "id" for {@link ConstructorCreationSupport}, may be <code>null</code>.
+	 */
+	public void setCreationId(String creationId) {
+		m_creationId = creationId;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Component class name
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the name of component class.
-   */
-  public String getClassName() {
-    return m_className;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Component class name
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the name of component class.
+	 */
+	public String getClassName() {
+		return m_className;
+	}
 
-  /**
-   * Sets the name of component class.
-   */
-  public void setComponentClassName(String componentClassName) {
-    m_className = componentClassName;
-  }
+	/**
+	 * Sets the name of component class.
+	 */
+	public void setComponentClassName(String componentClassName) {
+		m_className = componentClassName;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Libraries
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final List<LibraryInfo> m_libraries = Lists.newArrayList();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Libraries
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final List<LibraryInfo> m_libraries = Lists.newArrayList();
 
-  /**
-   * Adds new {@link LibraryInfo} to ensure.
-   */
-  private void addLibraries(IConfigurationElement componentElement) {
-    for (IConfigurationElement libraryElement : componentElement.getChildren("library")) {
-      m_libraries.add(new LibraryInfo(libraryElement));
-    }
-  }
+	/**
+	 * Adds new {@link LibraryInfo} to ensure.
+	 */
+	private void addLibraries(IConfigurationElement componentElement) {
+		for (IConfigurationElement libraryElement : componentElement.getChildren("library")) {
+			m_libraries.add(new LibraryInfo(libraryElement));
+		}
+	}
 
-  /**
-   * Ensures all {@link LibraryInfo}'s.
-   */
-  private void ensureLibraries() throws Exception {
-    for (LibraryInfo library : m_libraries) {
-      library.ensure(m_javaProject);
-    }
-  }
+	/**
+	 * Ensures all {@link LibraryInfo}'s.
+	 */
+	private void ensureLibraries() throws Exception {
+		for (LibraryInfo library : m_libraries) {
+			library.ensure(m_javaProject);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Name
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getNameDefault() {
-    return m_className;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Name
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getNameDefault() {
+		return m_className;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // EntryInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Class<?> m_class;
-  private ComponentPresentation m_presentation;
-  private ComponentDescription m_description;
-  private CreationDescription m_creation;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// EntryInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Class<?> m_class;
+	private ComponentPresentation m_presentation;
+	private ComponentDescription m_description;
+	private CreationDescription m_creation;
 
-  @Override
-  public boolean initialize(IEditPartViewer editPartViewer, XmlObjectInfo rootObject) {
-    super.initialize(editPartViewer, rootObject);
-    // prepare presentation
-    if (!preparePresentation()) {
-      return false;
-    }
-    // updates
-    {
-      // update entry icon
-      if (m_icon == null) {
-        m_icon = m_presentation.getIcon();
-      }
-      // update entry name
-      if (getNameRaw() == null) {
-        setName(m_presentation.getName());
-      }
-      // update entry description text
-      {
-        String description = getDescription();
-        if (StringUtils.isEmpty(description) || m_className.equals(description)) {
-          setDescription(m_presentation.getDescription());
-        }
-      }
-    }
-    // OK, initialized
-    return true;
-  }
+	@Override
+	public boolean initialize(IEditPartViewer editPartViewer, XmlObjectInfo rootObject) {
+		super.initialize(editPartViewer, rootObject);
+		// prepare presentation
+		if (!preparePresentation()) {
+			return false;
+		}
+		// updates
+		{
+			// update entry icon
+			if (m_icon == null) {
+				m_icon = m_presentation.getIcon();
+			}
+			// update entry name
+			if (getNameRaw() == null) {
+				setName(m_presentation.getName());
+			}
+			// update entry description text
+			{
+				String description = getDescription();
+				if (StringUtils.isEmpty(description) || m_className.equals(description)) {
+					setDescription(m_presentation.getDescription());
+				}
+			}
+		}
+		// OK, initialized
+		return true;
+	}
 
-  /**
-   * Prepares {@link #m_presentation}.
-   */
-  private boolean preparePresentation() {
-    if (m_rootJavaInfo.getArbitraryValue(KEY_SIMULATE_PRESENTATION) != null) {
-      m_presentation =
-          new ComponentPresentation("key", "toolkitId", m_className, m_className, (Image) null);
-      return true;
-    }
-    // check if Class exists (may be optimized by loading only "witness Class")
-    if (!hasClass()) {
-      return false;
-    }
-    // prepare presentation
-    try {
-      m_presentation =
-          ComponentPresentationHelper.getPresentation(m_context, m_className, m_creationId);
-      if (m_presentation == null) {
-        String message = "Palette: no presentation for component " + m_className;
-        m_context.addWarning(new EditorWarning(message));
-        return false;
-      }
-    } catch (Throwable e) {
-      String message = "Palette: can not load component " + m_className;
-      m_context.addWarning(new EditorWarning(message, e));
-      return false;
-    }
-    // done
-    return true;
-  }
+	/**
+	 * Prepares {@link #m_presentation}.
+	 */
+	private boolean preparePresentation() {
+		if (m_rootJavaInfo.getArbitraryValue(KEY_SIMULATE_PRESENTATION) != null) {
+			m_presentation =
+					new ComponentPresentation("key", "toolkitId", m_className, m_className, (Image) null);
+			return true;
+		}
+		// check if Class exists (may be optimized by loading only "witness Class")
+		if (!hasClass()) {
+			return false;
+		}
+		// prepare presentation
+		try {
+			m_presentation =
+					ComponentPresentationHelper.getPresentation(m_context, m_className, m_creationId);
+			if (m_presentation == null) {
+				String message = "Palette: no presentation for component " + m_className;
+				m_context.addWarning(new EditorWarning(message));
+				return false;
+			}
+		} catch (Throwable e) {
+			String message = "Palette: can not load component " + m_className;
+			m_context.addWarning(new EditorWarning(message, e));
+			return false;
+		}
+		// done
+		return true;
+	}
 
-  private boolean ensureDescriptions() {
-    if (m_creation == null) {
-      try {
-        m_class = m_context.getClassLoader().loadClass(m_className);
-        m_description = ComponentDescriptionHelper.getDescription(m_context, m_class);
-        m_creation = m_description.getCreation(m_creationId);
-      } catch (Throwable e) {
-        String message = "Palette: can not load component " + m_className;
-        m_context.addWarning(new EditorWarning(message, e));
-        return false;
-      }
-    }
-    // OK, can activate
-    return true;
-  }
+	private boolean ensureDescriptions() {
+		if (m_creation == null) {
+			try {
+				m_class = m_context.getClassLoader().loadClass(m_className);
+				m_description = ComponentDescriptionHelper.getDescription(m_context, m_class);
+				m_creation = m_description.getCreation(m_creationId);
+			} catch (Throwable e) {
+				String message = "Palette: can not load component " + m_className;
+				m_context.addWarning(new EditorWarning(message, e));
+				return false;
+			}
+		}
+		// OK, can activate
+		return true;
+	}
 
-  @Override
-  public boolean isEnabled() {
-    // try "enabled"
-    if (m_enabledScript != null) {
-      boolean enabled = ExecutionUtils.runObjectIgnore(new RunnableObjectEx<Boolean>() {
-        @Override
-        public Boolean runObject() throws Exception {
-          ClassLoader classLoader = m_context.getClassLoader();
-          return (Boolean) ScriptUtils.evaluate(classLoader, m_enabledScript);
-        }
-      }, false);
-      if (!enabled) {
-        return false;
-      }
-    }
-    // OK
-    return true;
-  }
+	@Override
+	public boolean isEnabled() {
+		// try "enabled"
+		if (m_enabledScript != null) {
+			boolean enabled = ExecutionUtils.runObjectIgnore(new RunnableObjectEx<Boolean>() {
+				@Override
+				public Boolean runObject() throws Exception {
+					ClassLoader classLoader = m_context.getClassLoader();
+					return (Boolean) ScriptUtils.evaluate(classLoader, m_enabledScript);
+				}
+			}, false);
+			if (!enabled) {
+				return false;
+			}
+		}
+		// OK
+		return true;
+	}
 
-  @Override
-  public Image getIcon() {
-    if (m_icon == null) {
-      return DEFAULT_ICON;
-    }
-    return m_icon;
-  }
+	@Override
+	public Image getIcon() {
+		if (m_icon == null) {
+			return DEFAULT_ICON;
+		}
+		return m_icon;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static Map<ClassLoader, Set<String>> m_contextHasClasses =
-      new WeakHashMap<ClassLoader, Set<String>>();
-  private static Map<ClassLoader, Set<String>> m_contextNoClasses =
-      new WeakHashMap<ClassLoader, Set<String>>();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static Map<ClassLoader, Set<String>> m_contextHasClasses =
+			new WeakHashMap<ClassLoader, Set<String>>();
+	private static Map<ClassLoader, Set<String>> m_contextNoClasses =
+			new WeakHashMap<ClassLoader, Set<String>>();
 
-  /**
-   * @return <code>true</code> if {@link #m_className} most probably exists in {@link ClassLoader}.
-   */
-  private boolean hasClass() {
-    // try to optimize
-    List<IConfigurationElement> elements =
-        ExternalFactoriesHelper.getElements(
-            "org.eclipse.wb.core.paletteComponentExists",
-            "component");
-    for (IConfigurationElement element : elements) {
-      String pkg = element.getAttribute("package");
-      if (pkg != null && m_className.startsWith(pkg)) {
-        // witness
-        {
-          String witnessClassName = element.getAttribute("witness");
-          if (witnessClassName != null) {
-            return hasClass0(witnessClassName);
-          }
-        }
-        // hasType
-        if (element.getAttribute("hasType") != null) {
-          return ProjectUtils.hasType(m_javaProject, m_className);
-        }
-        // always
-        if (element.getAttribute("always") != null) {
-          return true;
-        }
-      }
-    }
-    // check Class directly
-    return hasClass0(m_className);
-  }
+	/**
+	 * @return <code>true</code> if {@link #m_className} most probably exists in {@link ClassLoader}.
+	 */
+	private boolean hasClass() {
+		// try to optimize
+		List<IConfigurationElement> elements =
+				ExternalFactoriesHelper.getElements(
+						"org.eclipse.wb.core.paletteComponentExists",
+						"component");
+		for (IConfigurationElement element : elements) {
+			String pkg = element.getAttribute("package");
+			if (pkg != null && m_className.startsWith(pkg)) {
+				// witness
+				{
+					String witnessClassName = element.getAttribute("witness");
+					if (witnessClassName != null) {
+						return hasClass0(witnessClassName);
+					}
+				}
+				// hasType
+				if (element.getAttribute("hasType") != null) {
+					return ProjectUtils.hasType(m_javaProject, m_className);
+				}
+				// always
+				if (element.getAttribute("always") != null) {
+					return true;
+				}
+			}
+		}
+		// check Class directly
+		return hasClass0(m_className);
+	}
 
-  /**
-   * @return <code>true</code> if {@link Class} with given name exists in {@link ClassLoader}.
-   */
-  private boolean hasClass0(String className) {
-    ClassLoader classLoader = m_context.getClassLoader();
-    // prepare "has" cache
-    Set<String> hasClasses;
-    {
-      hasClasses = m_contextHasClasses.get(classLoader);
-      if (hasClasses == null) {
-        hasClasses = Sets.newHashSet();
-        m_contextHasClasses.put(classLoader, hasClasses);
-      }
-    }
-    // may be we already know that there is such Class
-    if (hasClasses.contains(className)) {
-      return true;
-    }
-    // prepare "no" cache
-    Set<String> noClasses;
-    {
-      noClasses = m_contextNoClasses.get(classLoader);
-      if (noClasses == null) {
-        noClasses = Sets.newHashSet();
-        m_contextNoClasses.put(classLoader, noClasses);
-      }
-    }
-    // may be we already know that there are no such Class
-    if (noClasses.contains(className)) {
-      return false;
-    }
-    // ask ClassLoader
-    try {
-      classLoader.loadClass(className);
-      hasClasses.add(className);
-      return true;
-    } catch (ClassNotFoundException e) {
-    }
-    // remember that there are no such Class
-    noClasses.add(className);
-    return false;
-  }
+	/**
+	 * @return <code>true</code> if {@link Class} with given name exists in {@link ClassLoader}.
+	 */
+	private boolean hasClass0(String className) {
+		ClassLoader classLoader = m_context.getClassLoader();
+		// prepare "has" cache
+		Set<String> hasClasses;
+		{
+			hasClasses = m_contextHasClasses.get(classLoader);
+			if (hasClasses == null) {
+				hasClasses = Sets.newHashSet();
+				m_contextHasClasses.put(classLoader, hasClasses);
+			}
+		}
+		// may be we already know that there is such Class
+		if (hasClasses.contains(className)) {
+			return true;
+		}
+		// prepare "no" cache
+		Set<String> noClasses;
+		{
+			noClasses = m_contextNoClasses.get(classLoader);
+			if (noClasses == null) {
+				noClasses = Sets.newHashSet();
+				m_contextNoClasses.put(classLoader, noClasses);
+			}
+		}
+		// may be we already know that there are no such Class
+		if (noClasses.contains(className)) {
+			return false;
+		}
+		// ask ClassLoader
+		try {
+			classLoader.loadClass(className);
+			hasClasses.add(className);
+			return true;
+		} catch (ClassNotFoundException e) {
+		}
+		// remember that there are no such Class
+		noClasses.add(className);
+		return false;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ToolEntryInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Tool createTool() throws Exception {
-    if (!ensureDescriptions()) {
-      return null;
-    }
-    if (ReflectionUtils.isAbstract(m_class)) {
-      Shell parentShell = IPaletteSite.Helper.getSite(m_rootJavaInfo).getShell();
-      UiUtils.openError(parentShell, "Error", "You can not drop abstract component.");
-      return null;
-    }
-    // prepare factory
-    ICreationFactory factory = new ICreationFactory() {
-      private XmlObjectInfo m_object;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ToolEntryInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Tool createTool() throws Exception {
+		if (!ensureDescriptions()) {
+			return null;
+		}
+		if (ReflectionUtils.isAbstract(m_class)) {
+			Shell parentShell = IPaletteSite.Helper.getSite(m_rootJavaInfo).getShell();
+			UiUtils.openError(parentShell, "Error", "You can not drop abstract component.");
+			return null;
+		}
+		// prepare factory
+		ICreationFactory factory = new ICreationFactory() {
+			private XmlObjectInfo m_object;
 
-      @Override
-      public void activate() throws Exception {
-        CreationSupport creationSupport = new ElementCreationSupport(m_creationId);
-        m_object = XmlObjectUtils.createObject(m_context, m_class, creationSupport);
-        m_object = XmlObjectUtils.getWrapped(m_object);
-        m_object.putArbitraryValue(XmlObjectInfo.FLAG_MANUAL_COMPONENT, Boolean.TRUE);
-      }
+			@Override
+			public void activate() throws Exception {
+				CreationSupport creationSupport = new ElementCreationSupport(m_creationId);
+				m_object = XmlObjectUtils.createObject(m_context, m_class, creationSupport);
+				m_object = XmlObjectUtils.getWrapped(m_object);
+				m_object.putArbitraryValue(XmlObjectInfo.FLAG_MANUAL_COMPONENT, Boolean.TRUE);
+			}
 
-      @Override
-      public Object getNewObject() {
-        return m_object;
-      }
-    };
-    // return tool
-    ensureLibraries();
-    return new CreationTool(factory);
-  }
+			@Override
+			public Object getNewObject() {
+				return m_object;
+			}
+		};
+		// return tool
+		ensureLibraries();
+		return new CreationTool(factory);
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/model/EntryInfo.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/model/EntryInfo.java
index df4438172..8d20164ae 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/model/EntryInfo.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/model/EntryInfo.java
@@ -24,88 +24,88 @@
  * @coverage XML.editor.palette
  */
 public abstract class EntryInfo extends AbstractElementInfo {
-  protected IEditPartViewer m_editPartViewer;
-  protected XmlObjectInfo m_rootJavaInfo;
-  protected EditorContext m_context;
-  protected IJavaProject m_javaProject;
+	protected IEditPartViewer m_editPartViewer;
+	protected XmlObjectInfo m_rootJavaInfo;
+	protected EditorContext m_context;
+	protected IJavaProject m_javaProject;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Life cycle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Initializes this {@link EntryInfo}, prepares it for future calls of methods.
-   *
-   * @return <code>true</code> if this {@link EntryInfo} is successfully activated.
-   */
-  public boolean initialize(IEditPartViewer editPartViewer, XmlObjectInfo rootObject) {
-    m_editPartViewer = editPartViewer;
-    m_rootJavaInfo = rootObject;
-    m_context = rootObject.getContext();
-    m_javaProject = m_context.getJavaProject();
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Life cycle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Initializes this {@link EntryInfo}, prepares it for future calls of methods.
+	 *
+	 * @return <code>true</code> if this {@link EntryInfo} is successfully activated.
+	 */
+	public boolean initialize(IEditPartViewer editPartViewer, XmlObjectInfo rootObject) {
+		m_editPartViewer = editPartViewer;
+		m_rootJavaInfo = rootObject;
+		m_context = rootObject.getContext();
+		m_javaProject = m_context.getJavaProject();
+		return true;
+	}
 
-  /**
-   * Sometimes we want to show entry, but don't allow to select it.
-   *
-   * @return <code>true</code> if this {@link EntryInfo} is enabled.
-   */
-  public boolean isEnabled() {
-    return true;
-  }
+	/**
+	 * Sometimes we want to show entry, but don't allow to select it.
+	 *
+	 * @return <code>true</code> if this {@link EntryInfo} is enabled.
+	 */
+	public boolean isEnabled() {
+		return true;
+	}
 
-  /**
-   * @return the icon for visual.
-   */
-  public abstract Image getIcon();
+	/**
+	 * @return the icon for visual.
+	 */
+	public abstract Image getIcon();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Activation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Performs operation when user selects this entry on palette.
-   *
-   * @param reload
-   *          is <code>true</code> if entry should be automatically reloaded after successful using.
-   *
-   * @return <code>true</code> if entry was successfully activated.
-   */
-  public abstract boolean activate(boolean reload);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Activation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Performs operation when user selects this entry on palette.
+	 *
+	 * @param reload
+	 *          is <code>true</code> if entry should be automatically reloaded after successful using.
+	 *
+	 * @return <code>true</code> if entry was successfully activated.
+	 */
+	public abstract boolean activate(boolean reload);
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link IPaletteSite} for palette of this entry.
-   */
-  protected final IPaletteSite getSite() {
-    return IPaletteSite.Helper.getSite(m_rootJavaInfo);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link IPaletteSite} for palette of this entry.
+	 */
+	protected final IPaletteSite getSite() {
+		return IPaletteSite.Helper.getSite(m_rootJavaInfo);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Category
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private CategoryInfo m_category;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Category
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private CategoryInfo m_category;
 
-  /**
-   * @return the parent {@link CategoryInfo}.
-   */
-  public final CategoryInfo getCategory() {
-    return m_category;
-  }
+	/**
+	 * @return the parent {@link CategoryInfo}.
+	 */
+	public final CategoryInfo getCategory() {
+		return m_category;
+	}
 
-  /**
-   * Sets the parent {@link CategoryInfo}.
-   */
-  public final void setCategory(CategoryInfo category) {
-    m_category = category;
-  }
+	/**
+	 * Sets the parent {@link CategoryInfo}.
+	 */
+	public final void setCategory(CategoryInfo category) {
+		m_category = category;
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/model/IPaletteSite.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/model/IPaletteSite.java
index 2e5d430c4..c16016a7c 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/model/IPaletteSite.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/model/IPaletteSite.java
@@ -22,77 +22,77 @@
  * @coverage XML.editor.palette
  */
 public interface IPaletteSite {
-  /**
-   * @return the {@link Shell} that contains palette widget.
-   */
-  Shell getShell();
+	/**
+	 * @return the {@link Shell} that contains palette widget.
+	 */
+	Shell getShell();
 
-  /**
-   * @return the {@link PaletteInfo} displayed currently in this {@link IPaletteSite}.
-   */
-  PaletteInfo getPalette();
+	/**
+	 * @return the {@link PaletteInfo} displayed currently in this {@link IPaletteSite}.
+	 */
+	PaletteInfo getPalette();
 
-  /**
-   * Adds some external palette {@link Command}.
-   */
-  void addCommand(Command command);
+	/**
+	 * Adds some external palette {@link Command}.
+	 */
+	void addCommand(Command command);
 
-  /**
-   * Opens palette editing dialog.<br>
-   * Note, that after this method {@link #getPalette()} may return different instance of
-   * {@link PaletteInfo} .
-   */
-  void editPalette();
+	/**
+	 * Opens palette editing dialog.<br>
+	 * Note, that after this method {@link #getPalette()} may return different instance of
+	 * {@link PaletteInfo} .
+	 */
+	void editPalette();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Helper
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Helper for accessing {@link IPaletteSite}.
-   *
-   * @author scheglov_ke
-   */
-  public static class Helper {
-    private static final String KEY = "key_IPaletteSite";
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Helper
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Helper for accessing {@link IPaletteSite}.
+	 *
+	 * @author scheglov_ke
+	 */
+	public static class Helper {
+		private static final String KEY = "key_IPaletteSite";
 
-    /**
-     * @return {@link IPaletteSite} for given {@link ObjectInfo}.
-     */
-    public static IPaletteSite getSite(ObjectInfo objectInfo) {
-      return (IPaletteSite) objectInfo.getRoot().getArbitraryValue(KEY);
-    }
+		/**
+		 * @return {@link IPaletteSite} for given {@link ObjectInfo}.
+		 */
+		public static IPaletteSite getSite(ObjectInfo objectInfo) {
+			return (IPaletteSite) objectInfo.getRoot().getArbitraryValue(KEY);
+		}
 
-    /**
-     * Sets the {@link IPaletteSite} for given {@link ObjectInfo}.
-     */
-    public static void setSite(ObjectInfo objectInfo, IPaletteSite site) {
-      objectInfo.getRoot().putArbitraryValue(KEY, site);
-    }
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Empty implementation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static class Empty implements IPaletteSite {
-    @Override
-    public void addCommand(Command command) {
-    }
+		/**
+		 * Sets the {@link IPaletteSite} for given {@link ObjectInfo}.
+		 */
+		public static void setSite(ObjectInfo objectInfo, IPaletteSite site) {
+			objectInfo.getRoot().putArbitraryValue(KEY, site);
+		}
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Empty implementation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static class Empty implements IPaletteSite {
+		@Override
+		public void addCommand(Command command) {
+		}
 
-    @Override
-    public void editPalette() {
-    }
+		@Override
+		public void editPalette() {
+		}
 
-    @Override
-    public PaletteInfo getPalette() {
-      return null;
-    }
+		@Override
+		public PaletteInfo getPalette() {
+			return null;
+		}
 
-    @Override
-    public Shell getShell() {
-      return null;
-    }
-  }
+		@Override
+		public Shell getShell() {
+			return null;
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/model/MarqueeSelectionToolEntryInfo.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/model/MarqueeSelectionToolEntryInfo.java
index cc8f7e0fb..e861511b6 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/model/MarqueeSelectionToolEntryInfo.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/model/MarqueeSelectionToolEntryInfo.java
@@ -24,30 +24,30 @@
  * @coverage XML.editor.palette
  */
 public final class MarqueeSelectionToolEntryInfo extends ToolEntryInfo {
-  private static final Image ICON = DesignerPlugin.getImage("palette/MarqueeSelectionTool.png");
-  private final MarqueeSelectionTool m_marqueeSelectionTool = new MarqueeSelectionTool();
+	private static final Image ICON = DesignerPlugin.getImage("palette/MarqueeSelectionTool.png");
+	private final MarqueeSelectionTool m_marqueeSelectionTool = new MarqueeSelectionTool();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public MarqueeSelectionToolEntryInfo() {
-    setName(Messages.MarqueeSelectionToolEntryInfo_name);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public MarqueeSelectionToolEntryInfo() {
+		setName(Messages.MarqueeSelectionToolEntryInfo_name);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // EntryInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Image getIcon() {
-    return ICON;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// EntryInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Image getIcon() {
+		return ICON;
+	}
 
-  @Override
-  public Tool createTool() throws Exception {
-    return m_marqueeSelectionTool;
-  }
+	@Override
+	public Tool createTool() throws Exception {
+		return m_marqueeSelectionTool;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/model/PaletteInfo.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/model/PaletteInfo.java
index 74be181d2..172d67192 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/model/PaletteInfo.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/model/PaletteInfo.java
@@ -25,92 +25,92 @@
  * @coverage XML.editor.palette
  */
 public final class PaletteInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    return StringUtils.join(m_categories.iterator(), ",\n\t");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		return StringUtils.join(m_categories.iterator(), ",\n\t");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Categories
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final List<CategoryInfo> m_categories = Lists.newArrayList();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Categories
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final List<CategoryInfo> m_categories = Lists.newArrayList();
 
-  /**
-   * @return the {@link List} of {@link CategoryInfo}.
-   */
-  public List<CategoryInfo> getCategories() {
-    return m_categories;
-  }
+	/**
+	 * @return the {@link List} of {@link CategoryInfo}.
+	 */
+	public List<CategoryInfo> getCategories() {
+		return m_categories;
+	}
 
-  /**
-   * Adds new {@link CategoryInfo}.
-   */
-  public void addCategory(CategoryInfo category) {
-    Assert.isLegal(
-        !m_categories.contains(category),
-        "Duplicate category with id = " + category.getId());
-    m_categories.add(category);
-  }
+	/**
+	 * Adds new {@link CategoryInfo}.
+	 */
+	public void addCategory(CategoryInfo category) {
+		Assert.isLegal(
+				!m_categories.contains(category),
+				"Duplicate category with id = " + category.getId());
+		m_categories.add(category);
+	}
 
-  public void moveCategory(String id, String nextId) {
-    // don't move before itself, this is no-op
-    if (id.equals(nextId)) {
-      return;
-    }
-    // prepare category to move
-    CategoryInfo category = getCategory(id);
-    if (category == null) {
-      return;
-    }
-    // remove source
-    m_categories.remove(category);
-    // add to new location
-    CategoryInfo nextCategory = getCategory(nextId);
-    if (nextCategory != null) {
-      int index = m_categories.indexOf(nextCategory);
-      m_categories.add(index, category);
-    } else {
-      m_categories.add(category);
-    }
-  }
+	public void moveCategory(String id, String nextId) {
+		// don't move before itself, this is no-op
+		if (id.equals(nextId)) {
+			return;
+		}
+		// prepare category to move
+		CategoryInfo category = getCategory(id);
+		if (category == null) {
+			return;
+		}
+		// remove source
+		m_categories.remove(category);
+		// add to new location
+		CategoryInfo nextCategory = getCategory(nextId);
+		if (nextCategory != null) {
+			int index = m_categories.indexOf(nextCategory);
+			m_categories.add(index, category);
+		} else {
+			m_categories.add(category);
+		}
+	}
 
-  /**
-   * @return the {@link CategoryInfo} with given id.
-   */
-  public CategoryInfo getCategory(String id) {
-    for (CategoryInfo category : m_categories) {
-      if (category.getId().equals(id)) {
-        return category;
-      }
-    }
-    // not found
-    return null;
-  }
+	/**
+	 * @return the {@link CategoryInfo} with given id.
+	 */
+	public CategoryInfo getCategory(String id) {
+		for (CategoryInfo category : m_categories) {
+			if (category.getId().equals(id)) {
+				return category;
+			}
+		}
+		// not found
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link EntryInfo} with given <code>id</code> or <code>null</code> if not found.
-   */
-  public EntryInfo getEntry(String id) {
-    for (CategoryInfo category : m_categories) {
-      for (EntryInfo entry : category.getEntries()) {
-        if (entry.getId().equals(id)) {
-          return entry;
-        }
-      }
-    }
-    // not found
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link EntryInfo} with given <code>id</code> or <code>null</code> if not found.
+	 */
+	public EntryInfo getEntry(String id) {
+		for (CategoryInfo category : m_categories) {
+			for (EntryInfo entry : category.getEntries()) {
+				if (entry.getId().equals(id)) {
+					return entry;
+				}
+			}
+		}
+		// not found
+		return null;
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/model/SelectionToolEntryInfo.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/model/SelectionToolEntryInfo.java
index 31311bc8d..802c71673 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/model/SelectionToolEntryInfo.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/model/SelectionToolEntryInfo.java
@@ -25,30 +25,30 @@
  * @coverage XML.editor.palette
  */
 public class SelectionToolEntryInfo extends ToolEntryInfo implements IDefaultEntryInfo {
-  private static final Image ICON = DesignerPlugin.getImage("palette/SelectionTool.gif");
-  private final SelectionTool m_selectionTool = new SelectionTool();
+	private static final Image ICON = DesignerPlugin.getImage("palette/SelectionTool.gif");
+	private final SelectionTool m_selectionTool = new SelectionTool();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SelectionToolEntryInfo() {
-    setName(Messages.SelectionToolEntryInfo_name);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SelectionToolEntryInfo() {
+		setName(Messages.SelectionToolEntryInfo_name);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // EntryInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Image getIcon() {
-    return ICON;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// EntryInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Image getIcon() {
+		return ICON;
+	}
 
-  @Override
-  public Tool createTool() throws Exception {
-    return m_selectionTool;
-  }
+	@Override
+	public Tool createTool() throws Exception {
+		return m_selectionTool;
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/model/ToolEntryInfo.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/model/ToolEntryInfo.java
index 0c769c90e..323e4c946 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/model/ToolEntryInfo.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/model/ToolEntryInfo.java
@@ -22,35 +22,35 @@
  * @coverage XML.editor.palette
  */
 public abstract class ToolEntryInfo extends EntryInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // EntryInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final boolean activate(final boolean reload) {
-    return ExecutionUtils.runObjectLog(new RunnableObjectEx<Boolean>() {
-      @Override
-      public Boolean runObject() throws Exception {
-        // prepare tool
-        Tool tool;
-        {
-          tool = createTool();
-          if (tool == null) {
-            return false;
-          }
-          tool.setUnloadWhenFinished(!reload);
-        }
-        // OK
-        m_editPartViewer.getEditDomain().setActiveTool(tool);
-        return true;
-      }
-    }, false);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// EntryInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final boolean activate(final boolean reload) {
+		return ExecutionUtils.runObjectLog(new RunnableObjectEx<Boolean>() {
+			@Override
+			public Boolean runObject() throws Exception {
+				// prepare tool
+				Tool tool;
+				{
+					tool = createTool();
+					if (tool == null) {
+						return false;
+					}
+					tool.setUnloadWhenFinished(!reload);
+				}
+				// OK
+				m_editPartViewer.getEditDomain().setActiveTool(tool);
+				return true;
+			}
+		}, false);
+	}
 
-  /**
-   * @return the {@link Tool} that should be set on activation, or <code>null</code> if no
-   *         {@link Tool} can be activated.
-   */
-  public abstract Tool createTool() throws Exception;
+	/**
+	 * @return the {@link Tool} that should be set on activation, or <code>null</code> if no
+	 *         {@link Tool} can be activated.
+	 */
+	public abstract Tool createTool() throws Exception;
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/gef/CoreEditPartConfigurator.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/gef/CoreEditPartConfigurator.java
index 8fd956816..a19a2bf49 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/gef/CoreEditPartConfigurator.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/gef/CoreEditPartConfigurator.java
@@ -28,49 +28,49 @@
  * @coverage XML.gef
  */
 public final class CoreEditPartConfigurator implements IEditPartConfigurator {
-  @Override
-  public void configure(EditPart context, EditPart editPart) {
-    Object model = editPart.getModel();
-    // double click
-    if (GlobalState.isComponent(model)) {
-      ObjectInfo component = (ObjectInfo) model;
-      configureFlipBooleanProperty(editPart, component);
-      configure_onDoubleClick_runScript(editPart, component);
-    }
-    // direct edit
-    if (model instanceof AbstractComponentInfo) {
-      AbstractComponentInfo item = (AbstractComponentInfo) model;
-      DirectTextPropertyEditPolicy.install(editPart, item);
-    }
-  }
+	@Override
+	public void configure(EditPart context, EditPart editPart) {
+		Object model = editPart.getModel();
+		// double click
+		if (GlobalState.isComponent(model)) {
+			ObjectInfo component = (ObjectInfo) model;
+			configureFlipBooleanProperty(editPart, component);
+			configure_onDoubleClick_runScript(editPart, component);
+		}
+		// direct edit
+		if (model instanceof AbstractComponentInfo) {
+			AbstractComponentInfo item = (AbstractComponentInfo) model;
+			DirectTextPropertyEditPolicy.install(editPart, item);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Allows to use <code>double-click.flipBooleanProperty</code> parameter to flip some boolean
-   * property between <code>true/false</code> states, for example "expanded" property.
-   */
-  private void configureFlipBooleanProperty(EditPart editPart, ObjectInfo component) {
-    String propertyPath =
-        GlobalState.getParametersProvider().getParameter(
-            component,
-            "double-click.flipBooleanProperty");
-    if (!StringUtils.isEmpty(propertyPath)) {
-      editPart.installEditPolicy(new FlipBooleanPropertyEditPolicy(component, propertyPath));
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Allows to use <code>double-click.flipBooleanProperty</code> parameter to flip some boolean
+	 * property between <code>true/false</code> states, for example "expanded" property.
+	 */
+	private void configureFlipBooleanProperty(EditPart editPart, ObjectInfo component) {
+		String propertyPath =
+				GlobalState.getParametersProvider().getParameter(
+						component,
+						"double-click.flipBooleanProperty");
+		if (!StringUtils.isEmpty(propertyPath)) {
+			editPart.installEditPolicy(new FlipBooleanPropertyEditPolicy(component, propertyPath));
+		}
+	}
 
-  /**
-   * If has "double-click.runScript", then run this MVEL script with component as context.
-   */
-  private void configure_onDoubleClick_runScript(EditPart editPart, ObjectInfo component) {
-    String propertyPath =
-        GlobalState.getParametersProvider().getParameter(component, "double-click.runScript");
-    if (!StringUtils.isEmpty(propertyPath)) {
-      editPart.installEditPolicy(new DblClickRunScriptEditPolicy(component, propertyPath));
-    }
-  }
+	/**
+	 * If has "double-click.runScript", then run this MVEL script with component as context.
+	 */
+	private void configure_onDoubleClick_runScript(EditPart editPart, ObjectInfo component) {
+		String propertyPath =
+				GlobalState.getParametersProvider().getParameter(component, "double-click.runScript");
+		if (!StringUtils.isEmpty(propertyPath)) {
+			editPart.installEditPolicy(new DblClickRunScriptEditPolicy(component, propertyPath));
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/gef/EditPartFactory.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/gef/EditPartFactory.java
index afa9ba9a0..1b48cacb9 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/gef/EditPartFactory.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/gef/EditPartFactory.java
@@ -23,18 +23,18 @@
  * @coverage XML.gef
  */
 public final class EditPartFactory implements IEditPartFactory {
-  private final static IEditPartFactory MATCHING_FACTORY =
-      new MatchingEditPartFactory(ImmutableList.of("org.eclipse.wb.internal.core.xml.model"),
-          ImmutableList.of("org.eclipse.wb.internal.core.xml.gef.part"));
+	private final static IEditPartFactory MATCHING_FACTORY =
+			new MatchingEditPartFactory(ImmutableList.of("org.eclipse.wb.internal.core.xml.model"),
+					ImmutableList.of("org.eclipse.wb.internal.core.xml.gef.part"));
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IEditPartFactory
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public EditPart createEditPart(EditPart context, Object model) {
-    // most EditPart's can be created using matching
-    return MATCHING_FACTORY.createEditPart(context, model);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IEditPartFactory
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public EditPart createEditPart(EditPart context, Object model) {
+		// most EditPart's can be created using matching
+		return MATCHING_FACTORY.createEditPart(context, model);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/gef/GenericContainersConfigurator.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/gef/GenericContainersConfigurator.java
index 56a132fb1..bfa583756 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/gef/GenericContainersConfigurator.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/gef/GenericContainersConfigurator.java
@@ -30,48 +30,48 @@
  * @coverage XML.gef
  */
 public final class GenericContainersConfigurator implements IEditPartConfigurator {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IEditPartConfigurator
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void configure(EditPart context, EditPart editPart) {
-    if (editPart.getModel() instanceof XmlObjectInfo) {
-      XmlObjectInfo component = (XmlObjectInfo) editPart.getModel();
-      configureComponent(editPart, component);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IEditPartConfigurator
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void configure(EditPart context, EditPart editPart) {
+		if (editPart.getModel() instanceof XmlObjectInfo) {
+			XmlObjectInfo component = (XmlObjectInfo) editPart.getModel();
+			configureComponent(editPart, component);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Configuring
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void configureComponent(EditPart editPart, XmlObjectInfo component) {
-    configureSimpleContainer(editPart, component);
-    configureFlowContainer(editPart, component);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Configuring
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void configureComponent(EditPart editPart, XmlObjectInfo component) {
+		configureSimpleContainer(editPart, component);
+		configureFlowContainer(editPart, component);
+	}
 
-  /**
-   * Simple containers: SimplePanel, CaptionPanel, etc.
-   */
-  private void configureSimpleContainer(EditPart editPart, XmlObjectInfo component) {
-    List<SimpleContainer> containers = new SimpleContainerFactory(component, true).get();
-    for (SimpleContainer container : containers) {
-      EditPolicy layoutPolicy = new SimpleContainerLayoutEditPolicy(component, container);
-      editPart.installEditPolicy(container, layoutPolicy);
-    }
-  }
+	/**
+	 * Simple containers: SimplePanel, CaptionPanel, etc.
+	 */
+	private void configureSimpleContainer(EditPart editPart, XmlObjectInfo component) {
+		List<SimpleContainer> containers = new SimpleContainerFactory(component, true).get();
+		for (SimpleContainer container : containers) {
+			EditPolicy layoutPolicy = new SimpleContainerLayoutEditPolicy(component, container);
+			editPart.installEditPolicy(container, layoutPolicy);
+		}
+	}
 
-  /**
-   * Flow containers: FlowPanel, HorizontalPanel, VerticalPanel, etc.
-   */
-  private void configureFlowContainer(EditPart editPart, XmlObjectInfo component) {
-    List<FlowContainer> containers = new FlowContainerFactory(component, true).get();
-    for (FlowContainer container : containers) {
-      EditPolicy layoutPolicy = new FlowContainerLayoutEditPolicy(component, container);
-      editPart.installEditPolicy(container, layoutPolicy);
-    }
-  }
+	/**
+	 * Flow containers: FlowPanel, HorizontalPanel, VerticalPanel, etc.
+	 */
+	private void configureFlowContainer(EditPart editPart, XmlObjectInfo component) {
+		List<FlowContainer> containers = new FlowContainerFactory(component, true).get();
+		for (FlowContainer container : containers) {
+			EditPolicy layoutPolicy = new FlowContainerLayoutEditPolicy(component, container);
+			editPart.installEditPolicy(container, layoutPolicy);
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/gef/GenericContainersLayoutEditPolicyFactory.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/gef/GenericContainersLayoutEditPolicyFactory.java
index a12ca51b0..d59c59ca4 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/gef/GenericContainersLayoutEditPolicyFactory.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/gef/GenericContainersLayoutEditPolicyFactory.java
@@ -30,31 +30,31 @@
  * @coverage XML.gef
  */
 public final class GenericContainersLayoutEditPolicyFactory implements ILayoutEditPolicyFactory {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ILayoutEditPolicyFactory
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public LayoutEditPolicy createLayoutEditPolicy(EditPart context, Object model) {
-    if (model instanceof XmlObjectInfo) {
-      XmlObjectInfo layout = (XmlObjectInfo) model;
-      // simple containers
-      {
-        List<SimpleContainer> containers = new SimpleContainerFactory(layout, true).get();
-        for (SimpleContainer container : containers) {
-          return new SimpleContainerLayoutEditPolicy(layout, container);
-        }
-      }
-      // flow containers
-      {
-        List<FlowContainer> containers = new FlowContainerFactory(layout, true).get();
-        for (FlowContainer container : containers) {
-          return new FlowContainerLayoutEditPolicy(layout, container);
-        }
-      }
-    }
-    // not found
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ILayoutEditPolicyFactory
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public LayoutEditPolicy createLayoutEditPolicy(EditPart context, Object model) {
+		if (model instanceof XmlObjectInfo) {
+			XmlObjectInfo layout = (XmlObjectInfo) model;
+			// simple containers
+			{
+				List<SimpleContainer> containers = new SimpleContainerFactory(layout, true).get();
+				for (SimpleContainer container : containers) {
+					return new SimpleContainerLayoutEditPolicy(layout, container);
+				}
+			}
+			// flow containers
+			{
+				List<FlowContainer> containers = new FlowContainerFactory(layout, true).get();
+				for (FlowContainer container : containers) {
+					return new FlowContainerLayoutEditPolicy(layout, container);
+				}
+			}
+		}
+		// not found
+		return null;
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/gef/part/AbstractComponentEditPart.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/gef/part/AbstractComponentEditPart.java
index d48916015..ac6283145 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/gef/part/AbstractComponentEditPart.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/gef/part/AbstractComponentEditPart.java
@@ -43,191 +43,191 @@
  * @coverage XML.gef
  */
 public class AbstractComponentEditPart extends GraphicalEditPart {
-  public static final Point TOP_LOCATION = EnvironmentUtils.IS_MAC
-      ? new Point(20, 28)
-      : new Point(20, 20);
-  private final AbstractComponentInfo m_component;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractComponentEditPart(AbstractComponentInfo component) {
-    m_component = component;
-    setModel(m_component);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link AbstractComponentInfo} for this {@link AbstractComponentEditPart}.
-   */
-  public final AbstractComponentInfo getComponent() {
-    return m_component;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Life cycle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void activate() {
-    refreshVisualsOnModelRefresh();
-    super.activate();
-  }
-
-  private void refreshVisualsOnModelRefresh() {
-    if (!m_component.isRoot()) {
-      return;
-    }
-    m_component.addBroadcastListener(new ObjectEventListener() {
-      @Override
-      public void refreshDispose() throws Exception {
-        if (isActive()) {
-          getFigureCanvas().setDrawCached(true);
-        }
-      }
-
-      @Override
-      public void refreshed() throws Exception {
-        getFigureCanvas().setDrawCached(false);
-        getFigureCanvas().redraw();
-        refresh();
-      }
-
-      private FigureCanvas getFigureCanvas() {
-        return (FigureCanvas) getViewer().getControl();
-      }
-    });
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Figure
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Figure createFigure() {
-    return new Figure() {
-      @Override
-      protected void paintClientArea(Graphics graphics) {
-        if (m_component.isRoot()) {
-          Image image = m_component.getImage();
-          graphics.drawImage(image, 0, 0);
-        }
-        drawCustomBorder(this, graphics);
-      }
-    };
-  }
-
-  /**
-   * Draw custom "control specific" graphics objects for given {@link Figure}.
-   */
-  protected void drawCustomBorder(Figure figure, Graphics graphics) {
-    if (shouldDrawDotsBorder()) {
-      graphics.setForegroundColor(IColorConstants.gray);
-      graphics.setLineStyle(SWT.LINE_DOT);
-      Rectangle area = figure.getClientArea();
-      graphics.drawRectangle(0, 0, area.width - 1, area.height - 1);
-    }
-  }
-
-  private boolean shouldDrawDotsBorder() {
-    return ExecutionUtils.runObjectIgnore(new RunnableObjectEx<Boolean>() {
-      @Override
-      public Boolean runObject() throws Exception {
-        return m_component.shouldDrawDotsBorder();
-      }
-    }, false);
-  }
-
-  @Override
-  protected void refreshVisuals() {
-    Rectangle bounds = m_component.getBounds();
-    // prevent NPE if bounds for some component were not fetched
-    if (bounds == null) {
-      bounds = new Rectangle();
-    }
-    // root
-    if (m_component.isRoot()) {
-      Point rootLocation = getRootLocation();
-      bounds = bounds.getCopy().setLocation(rootLocation);
-    }
-    // apply bounds
-    getFigure().setBounds(bounds);
-  }
-
-  /**
-   * @return the location to use, if this {@link AbstractComponentInfo} is root.
-   */
-  protected Point getRootLocation() {
-    return TOP_LOCATION;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Policies
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createEditPolicies() {
-    if (m_component.isRoot()) {
-      installEditPolicy(EditPolicy.SELECTION_ROLE, new TopSelectionEditPolicy(m_component));
-    } else {
-      installEditPolicy(EditPolicy.SELECTION_ROLE, new NonResizableSelectionEditPolicy());
-    }
-    //
-    installEditPolicy(new OpenListenerEditPolicy(m_component));
-    /*OpenErrorLog_EditPolicy.install(this);
+	public static final Point TOP_LOCATION = EnvironmentUtils.IS_MAC
+			? new Point(20, 28)
+					: new Point(20, 20);
+	private final AbstractComponentInfo m_component;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractComponentEditPart(AbstractComponentInfo component) {
+		m_component = component;
+		setModel(m_component);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link AbstractComponentInfo} for this {@link AbstractComponentEditPart}.
+	 */
+	public final AbstractComponentInfo getComponent() {
+		return m_component;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Life cycle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void activate() {
+		refreshVisualsOnModelRefresh();
+		super.activate();
+	}
+
+	private void refreshVisualsOnModelRefresh() {
+		if (!m_component.isRoot()) {
+			return;
+		}
+		m_component.addBroadcastListener(new ObjectEventListener() {
+			@Override
+			public void refreshDispose() throws Exception {
+				if (isActive()) {
+					getFigureCanvas().setDrawCached(true);
+				}
+			}
+
+			@Override
+			public void refreshed() throws Exception {
+				getFigureCanvas().setDrawCached(false);
+				getFigureCanvas().redraw();
+				refresh();
+			}
+
+			private FigureCanvas getFigureCanvas() {
+				return (FigureCanvas) getViewer().getControl();
+			}
+		});
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Figure
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Figure createFigure() {
+		return new Figure() {
+			@Override
+			protected void paintClientArea(Graphics graphics) {
+				if (m_component.isRoot()) {
+					Image image = m_component.getImage();
+					graphics.drawImage(image, 0, 0);
+				}
+				drawCustomBorder(this, graphics);
+			}
+		};
+	}
+
+	/**
+	 * Draw custom "control specific" graphics objects for given {@link Figure}.
+	 */
+	protected void drawCustomBorder(Figure figure, Graphics graphics) {
+		if (shouldDrawDotsBorder()) {
+			graphics.setForegroundColor(IColorConstants.gray);
+			graphics.setLineStyle(SWT.LINE_DOT);
+			Rectangle area = figure.getClientArea();
+			graphics.drawRectangle(0, 0, area.width - 1, area.height - 1);
+		}
+	}
+
+	private boolean shouldDrawDotsBorder() {
+		return ExecutionUtils.runObjectIgnore(new RunnableObjectEx<Boolean>() {
+			@Override
+			public Boolean runObject() throws Exception {
+				return m_component.shouldDrawDotsBorder();
+			}
+		}, false);
+	}
+
+	@Override
+	protected void refreshVisuals() {
+		Rectangle bounds = m_component.getBounds();
+		// prevent NPE if bounds for some component were not fetched
+		if (bounds == null) {
+			bounds = new Rectangle();
+		}
+		// root
+		if (m_component.isRoot()) {
+			Point rootLocation = getRootLocation();
+			bounds = bounds.getCopy().setLocation(rootLocation);
+		}
+		// apply bounds
+		getFigure().setBounds(bounds);
+	}
+
+	/**
+	 * @return the location to use, if this {@link AbstractComponentInfo} is root.
+	 */
+	protected Point getRootLocation() {
+		return TOP_LOCATION;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Policies
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createEditPolicies() {
+		if (m_component.isRoot()) {
+			installEditPolicy(EditPolicy.SELECTION_ROLE, new TopSelectionEditPolicy(m_component));
+		} else {
+			installEditPolicy(EditPolicy.SELECTION_ROLE, new NonResizableSelectionEditPolicy());
+		}
+		//
+		installEditPolicy(new OpenListenerEditPolicy(m_component));
+		/*OpenErrorLog_EditPolicy.install(this);
     refreshEditPolicies();*/
-  }
-
-  /**
-   * Installs {@link EditPolicy}'s after model refresh. For example we should install new
-   * {@link LayoutEditPolicy} if component has now new layout.
-   */
-  protected void refreshEditPolicies() {
-    //OpenErrorLog_EditPolicy.refresh(this);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Requests/Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public CompoundCommand createCompoundCommand() {
-    return new CompoundEditCommand(m_component);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void refresh() {
-    refreshEditPolicies();
-    super.refresh();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Children
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected List<?> getModelChildren() {
-    return ExecutionUtils.runObjectLog(new RunnableObjectEx<List<?>>() {
-      @Override
-      public List<?> runObject() throws Exception {
-        return m_component.getPresentation().getChildrenGraphical();
-      }
-    }, Collections.emptyList());
-  }
+	}
+
+	/**
+	 * Installs {@link EditPolicy}'s after model refresh. For example we should install new
+	 * {@link LayoutEditPolicy} if component has now new layout.
+	 */
+	protected void refreshEditPolicies() {
+		//OpenErrorLog_EditPolicy.refresh(this);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Requests/Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public CompoundCommand createCompoundCommand() {
+		return new CompoundEditCommand(m_component);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void refresh() {
+		refreshEditPolicies();
+		super.refresh();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Children
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected List<?> getModelChildren() {
+		return ExecutionUtils.runObjectLog(new RunnableObjectEx<List<?>>() {
+			@Override
+			public List<?> runObject() throws Exception {
+				return m_component.getPresentation().getChildrenGraphical();
+			}
+		}, Collections.emptyList());
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/gef/policy/DirectTextPropertyEditPolicy.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/gef/policy/DirectTextPropertyEditPolicy.java
index 688498f76..68687f066 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/gef/policy/DirectTextPropertyEditPolicy.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/gef/policy/DirectTextPropertyEditPolicy.java
@@ -44,200 +44,200 @@
  * @coverage XML.gef.policy
  */
 public final class DirectTextPropertyEditPolicy extends DirectTextEditPolicy {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Installation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * If given {@link AbstractComponentInfo} has path to the property in parameter
-   * <code>directEdit.property</code>, installs {@link DirectTextPropertyEditPolicy} for this
-   * property.
-   */
-  public static void install(AbstractComponentEditPart editPart) {
-    AbstractComponentInfo component = editPart.getComponent();
-    install(editPart, component);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Installation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * If given {@link AbstractComponentInfo} has path to the property in parameter
+	 * <code>directEdit.property</code>, installs {@link DirectTextPropertyEditPolicy} for this
+	 * property.
+	 */
+	public static void install(AbstractComponentEditPart editPart) {
+		AbstractComponentInfo component = editPart.getComponent();
+		install(editPart, component);
+	}
 
-  /**
-   * If given {@link AbstractComponentInfo} has path to the property in parameter
-   * <code>directEdit.property</code>, installs {@link DirectTextPropertyEditPolicy} for this
-   * property.
-   */
-  public static void install(final EditPart editPart, final AbstractComponentInfo component) {
-    ExecutionUtils.runLog(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        installEx(editPart, component);
-      }
-    });
-  }
+	/**
+	 * If given {@link AbstractComponentInfo} has path to the property in parameter
+	 * <code>directEdit.property</code>, installs {@link DirectTextPropertyEditPolicy} for this
+	 * property.
+	 */
+	public static void install(final EditPart editPart, final AbstractComponentInfo component) {
+		ExecutionUtils.runLog(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				installEx(editPart, component);
+			}
+		});
+	}
 
-  /**
-   * Implementation for {@link #install(EditPart, AbstractComponentInfo)}.
-   */
-  private static void installEx(EditPart editPart, AbstractComponentInfo component)
-      throws Exception {
-    // try to find property with "isText" tag
-    for (Property property : component.getProperties()) {
-      if (property instanceof GenericPropertyImpl) {
-        GenericPropertyImpl genericProperty = (GenericPropertyImpl) property;
-        GenericPropertyDescription description = genericProperty.getDescription();
-        if (genericProperty.getObject() == component
-            && description != null
-            && description.hasTrueTag("isText")) {
-          EditPolicy policy = new DirectTextPropertyEditPolicy(component, property);
-          editPart.installEditPolicy(policy);
-          return;
-        }
-      }
-    }
-    // try to find property using full path
-    {
-      String propertyPath = component.getDescription().getParameter("directEdit.x-property");
-      if (propertyPath != null) {
-        Property property = PropertyUtils.getByPath(component, propertyPath);
-        if (property != null) {
-          EditPolicy policy = new DirectTextPropertyEditPolicy(component, property);
-          editPart.installEditPolicy(policy);
-          return;
-        }
-      }
-    }
-  }
+	/**
+	 * Implementation for {@link #install(EditPart, AbstractComponentInfo)}.
+	 */
+	private static void installEx(EditPart editPart, AbstractComponentInfo component)
+			throws Exception {
+		// try to find property with "isText" tag
+		for (Property property : component.getProperties()) {
+			if (property instanceof GenericPropertyImpl) {
+				GenericPropertyImpl genericProperty = (GenericPropertyImpl) property;
+				GenericPropertyDescription description = genericProperty.getDescription();
+				if (genericProperty.getObject() == component
+						&& description != null
+						&& description.hasTrueTag("isText")) {
+					EditPolicy policy = new DirectTextPropertyEditPolicy(component, property);
+					editPart.installEditPolicy(policy);
+					return;
+				}
+			}
+		}
+		// try to find property using full path
+		{
+			String propertyPath = component.getDescription().getParameter("directEdit.x-property");
+			if (propertyPath != null) {
+				Property property = PropertyUtils.getByPath(component, propertyPath);
+				if (property != null) {
+					EditPolicy policy = new DirectTextPropertyEditPolicy(component, property);
+					editPart.installEditPolicy(policy);
+					return;
+				}
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance fields
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final AbstractComponentInfo m_component;
-  private final Property m_property;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance fields
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final AbstractComponentInfo m_component;
+	private final Property m_property;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private DirectTextPropertyEditPolicy(AbstractComponentInfo component, Property property) {
-    m_component = component;
-    m_property = property;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private DirectTextPropertyEditPolicy(AbstractComponentInfo component, Property property) {
+		m_component = component;
+		m_property = property;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getText() {
-    return ExecutionUtils.runObjectIgnore(new RunnableObjectEx<String>() {
-      @Override
-      public String runObject() throws Exception {
-        return (String) m_property.getValue();
-      }
-    }, StringUtils.EMPTY);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getText() {
+		return ExecutionUtils.runObjectIgnore(new RunnableObjectEx<String>() {
+			@Override
+			public String runObject() throws Exception {
+				return (String) m_property.getValue();
+			}
+		}, StringUtils.EMPTY);
+	}
 
-  @Override
-  protected void setText(final String text) {
-    ExecutionUtils.runLog(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        m_property.setValue(text);
-      }
-    });
-  }
+	@Override
+	protected void setText(final String text) {
+		ExecutionUtils.runLog(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				m_property.setValue(text);
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Location
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Point getTextWidgetLocation(Rectangle hostBounds, Dimension textSize) {
-    try {
-      // apply insets
-      {
-        String insetsString =
-            XmlObjectUtils.getParameter(m_component, "directEdit.location.insets");
-        if (insetsString != null) {
-          String insetsElements[] = StringUtils.split(insetsString);
-          Assert.equals(4, insetsElements.length);
-          hostBounds.y += Integer.parseInt(insetsElements[0]);
-          hostBounds.x += Integer.parseInt(insetsElements[1]);
-          hostBounds.height -= Integer.parseInt(insetsElements[2]);
-          hostBounds.width -= Integer.parseInt(insetsElements[3]);
-        }
-      }
-      // prepare "x"
-      int x;
-      {
-        String horizontalAlignment =
-            XmlObjectUtils.getParameter(m_component, "directEdit.location.horizontalAlignment");
-        if (horizontalAlignment == null || "center".equals(horizontalAlignment)) {
-          x = hostBounds.getCenter().x - textSize.width / 2;
-        } else if ("left".equals(horizontalAlignment)) {
-          x = hostBounds.left();
-        } else {
-          throw new IllegalArgumentException(
-              "Unknown horizontal alignment: " + horizontalAlignment);
-        }
-      }
-      // prepare "y"
-      int y;
-      {
-        String verticalAlignment =
-            XmlObjectUtils.getParameter(m_component, "directEdit.location.verticalAlignment");
-        if (verticalAlignment == null || "center".equals(verticalAlignment)) {
-          y = hostBounds.getCenter().y - textSize.height / 2;
-        } else if ("top".equals(verticalAlignment)) {
-          y = hostBounds.top();
-        } else {
-          throw new IllegalArgumentException("Unknown vertical alignment: " + verticalAlignment);
-        }
-      }
-      // final location
-      return new Point(x, y);
-    } catch (Throwable e) {
-      throw new Error("Direct edit location for " + m_component, e);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Location
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Point getTextWidgetLocation(Rectangle hostBounds, Dimension textSize) {
+		try {
+			// apply insets
+			{
+				String insetsString =
+						XmlObjectUtils.getParameter(m_component, "directEdit.location.insets");
+				if (insetsString != null) {
+					String insetsElements[] = StringUtils.split(insetsString);
+					Assert.equals(4, insetsElements.length);
+					hostBounds.y += Integer.parseInt(insetsElements[0]);
+					hostBounds.x += Integer.parseInt(insetsElements[1]);
+					hostBounds.height -= Integer.parseInt(insetsElements[2]);
+					hostBounds.width -= Integer.parseInt(insetsElements[3]);
+				}
+			}
+			// prepare "x"
+			int x;
+			{
+				String horizontalAlignment =
+						XmlObjectUtils.getParameter(m_component, "directEdit.location.horizontalAlignment");
+				if (horizontalAlignment == null || "center".equals(horizontalAlignment)) {
+					x = hostBounds.getCenter().x - textSize.width / 2;
+				} else if ("left".equals(horizontalAlignment)) {
+					x = hostBounds.left();
+				} else {
+					throw new IllegalArgumentException(
+							"Unknown horizontal alignment: " + horizontalAlignment);
+				}
+			}
+			// prepare "y"
+			int y;
+			{
+				String verticalAlignment =
+						XmlObjectUtils.getParameter(m_component, "directEdit.location.verticalAlignment");
+				if (verticalAlignment == null || "center".equals(verticalAlignment)) {
+					y = hostBounds.getCenter().y - textSize.height / 2;
+				} else if ("top".equals(verticalAlignment)) {
+					y = hostBounds.top();
+				} else {
+					throw new IllegalArgumentException("Unknown vertical alignment: " + verticalAlignment);
+				}
+			}
+			// final location
+			return new Point(x, y);
+		} catch (Throwable e) {
+			throw new Error("Direct edit location for " + m_component, e);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Activation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final String KEY_ALREADY_EDITED = "alreadyDirectEdited";
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Activation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final String KEY_ALREADY_EDITED = "alreadyDirectEdited";
 
-  @Override
-  public void activate() {
-    super.activate();
-    // try automatically activate direct edit
-    IPreferenceStore preferences = m_component.getDescription().getToolkit().getPreferences();
-    if (preferences.getBoolean(IPreferenceConstants.P_GENERAL_DIRECT_EDIT_AFTER_ADD)
-        && m_component.getArbitraryValue(XmlObjectInfo.FLAG_MANUAL_COMPONENT) == Boolean.TRUE
-        && m_component.getArbitraryValue(KEY_ALREADY_EDITED) == null) {
-      m_component.putArbitraryValue(KEY_ALREADY_EDITED, Boolean.TRUE);
-      beginEdit();
-    }
-  }
+	@Override
+	public void activate() {
+		super.activate();
+		// try automatically activate direct edit
+		IPreferenceStore preferences = m_component.getDescription().getToolkit().getPreferences();
+		if (preferences.getBoolean(IPreferenceConstants.P_GENERAL_DIRECT_EDIT_AFTER_ADD)
+				&& m_component.getArbitraryValue(XmlObjectInfo.FLAG_MANUAL_COMPONENT) == Boolean.TRUE
+				&& m_component.getArbitraryValue(KEY_ALREADY_EDITED) == null) {
+			m_component.putArbitraryValue(KEY_ALREADY_EDITED, Boolean.TRUE);
+			beginEdit();
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Request
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void performRequest(Request request) {
-    if (request instanceof KeyRequest) {
-      KeyRequest keyRequest = (KeyRequest) request;
-      if (keyRequest.isPressed() && keyRequest.getCharacter() == ' ' //
-          || keyRequest.getKeyCode() == SWT.F2) {//
-        beginEdit();
-      }
-    }
-    super.performRequest(request);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Request
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void performRequest(Request request) {
+		if (request instanceof KeyRequest) {
+			KeyRequest keyRequest = (KeyRequest) request;
+			if (keyRequest.isPressed() && keyRequest.getCharacter() == ' ' //
+					|| keyRequest.getKeyCode() == SWT.F2) {//
+				beginEdit();
+			}
+		}
+		super.performRequest(request);
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/gef/policy/OpenListenerEditPolicy.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/gef/policy/OpenListenerEditPolicy.java
index adaf5bab8..5717c388b 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/gef/policy/OpenListenerEditPolicy.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/gef/policy/OpenListenerEditPolicy.java
@@ -35,41 +35,41 @@
  * @coverage XML.gef.policy
  */
 public final class OpenListenerEditPolicy extends EditPolicy {
-  private static final String DOUBLE_CLICK_LISTENER = "x.double-click.listener";
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance fields
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final String m_listenerName;
-  private final XmlObjectInfo m_object;
+	private static final String DOUBLE_CLICK_LISTENER = "x.double-click.listener";
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance fields
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final String m_listenerName;
+	private final XmlObjectInfo m_object;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public OpenListenerEditPolicy(XmlObjectInfo object) {
-    m_object = object;
-    m_listenerName = XmlObjectUtils.getParameter(object, DOUBLE_CLICK_LISTENER);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public OpenListenerEditPolicy(XmlObjectInfo object) {
+		m_object = object;
+		m_listenerName = XmlObjectUtils.getParameter(object, DOUBLE_CLICK_LISTENER);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Request
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void performRequest(Request request) {
-    if (m_listenerName != null && Request.REQ_OPEN.equals(request.getType())) {
-      ExecutionUtils.run(m_object, new RunnableEx() {
-        @Override
-        public void run() throws Exception {
-          EventsProperty eventsProperty = (EventsProperty) m_object.getPropertyByTitle("Events");
-          eventsProperty.openListener(m_listenerName);
-        }
-      });
-    }
-    super.performRequest(request);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Request
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void performRequest(Request request) {
+		if (m_listenerName != null && Request.REQ_OPEN.equals(request.getType())) {
+			ExecutionUtils.run(m_object, new RunnableEx() {
+				@Override
+				public void run() throws Exception {
+					EventsProperty eventsProperty = (EventsProperty) m_object.getPropertyByTitle("Events");
+					eventsProperty.openListener(m_listenerName);
+				}
+			});
+		}
+		super.performRequest(request);
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/gef/policy/TopSelectionEditPolicy.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/gef/policy/TopSelectionEditPolicy.java
index eb2612485..d29f4edb3 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/gef/policy/TopSelectionEditPolicy.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/gef/policy/TopSelectionEditPolicy.java
@@ -39,131 +39,131 @@
  * @coverage XML.gef.policy
  */
 public final class TopSelectionEditPolicy extends SelectionEditPolicy {
-  private static final String REQ_RESIZE = "resize";
-  private final AbstractComponentInfo m_component;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public TopSelectionEditPolicy(AbstractComponentInfo component) {
-    m_component = component;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Handles
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected List<Handle> createSelectionHandles() {
-    List<Handle> handles = Lists.newArrayList();
-    handles.add(new MoveHandle(getHost()));
-    handles.add(createResizeHandle(IPositionConstants.EAST));
-    handles.add(createResizeHandle(IPositionConstants.SOUTH_EAST));
-    handles.add(createResizeHandle(IPositionConstants.SOUTH));
-    return handles;
-  }
-
-  private Handle createResizeHandle(int direction) {
-    ResizeHandle handle = new ResizeHandle(getHost(), direction);
-    handle.setDragTrackerTool(new ResizeTracker(direction, REQ_RESIZE));
-    return handle;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Routing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean understandsRequest(Request request) {
-    return super.understandsRequest(request) || request.getType() == REQ_RESIZE;
-  }
-
-  @Override
-  public Command getCommand(Request request) {
-    return getResizeCommand((ChangeBoundsRequest) request);
-  }
-
-  @Override
-  public void showSourceFeedback(Request request) {
-    showResizeFeedback((ChangeBoundsRequest) request);
-  }
-
-  @Override
-  public void eraseSourceFeedback(Request request) {
-    eraseResizeFeedback((ChangeBoundsRequest) request);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Resize
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private TopResizeFigure m_resizeFeedback;
-
-  /**
-   * @return the {@link Command} for resize.
-   */
-  private Command getResizeCommand(ChangeBoundsRequest request) {
-    final Rectangle oldBounds = getHost().getFigure().getBounds();
-    final Rectangle newBounds = request.getTransformedRectangle(oldBounds);
-    sanitizeBounds(newBounds);
-    return new EditCommand(m_component) {
-      @Override
-      protected void executeEdit() throws Exception {
-        TopBoundsSupport topBoundsSupport = m_component.getTopBoundsSupport();
-        topBoundsSupport.setSize(newBounds.width, newBounds.height);
-      }
-    };
-  }
-
-  /**
-   * Shows resize feedback.
-   */
-  protected void showResizeFeedback(ChangeBoundsRequest request) {
-    if (m_resizeFeedback == null) {
-      // create feedback
-      {
-        m_resizeFeedback = new TopResizeFigure();
-        addFeedback(m_resizeFeedback);
-      }
-    }
-    // update feedback
-    {
-      // prepare feedback bounds
-      Rectangle bounds;
-      {
-        Figure hostFigure = getHostFigure();
-        bounds = request.getTransformedRectangle(hostFigure.getBounds());
-        sanitizeBounds(bounds);
-        FigureUtils.translateFigureToAbsolute(hostFigure, bounds);
-      }
-      String sizeText =
-          "[" + Integer.toString(bounds.width) + " x " + Integer.toString(bounds.height) + "]";
-      m_resizeFeedback.setSizeText(sizeText);
-      // set bounds for feedback
-      m_resizeFeedback.setBounds(bounds);
-    }
-  }
-
-  /**
-   * Erases resize feedback.
-   */
-  private void eraseResizeFeedback(ChangeBoundsRequest request) {
-    if (m_resizeFeedback != null) {
-      removeFeedback(m_resizeFeedback);
-      m_resizeFeedback = null;
-    }
-  }
-
-  /**
-   * Ensure that given {@link Rectangle} has reasonable width/height.
-   */
-  private static void sanitizeBounds(Rectangle bounds) {
-    bounds.width = Math.max(bounds.width, 10);
-    bounds.height = Math.max(bounds.height, 10);
-  }
+	private static final String REQ_RESIZE = "resize";
+	private final AbstractComponentInfo m_component;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public TopSelectionEditPolicy(AbstractComponentInfo component) {
+		m_component = component;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Handles
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected List<Handle> createSelectionHandles() {
+		List<Handle> handles = Lists.newArrayList();
+		handles.add(new MoveHandle(getHost()));
+		handles.add(createResizeHandle(IPositionConstants.EAST));
+		handles.add(createResizeHandle(IPositionConstants.SOUTH_EAST));
+		handles.add(createResizeHandle(IPositionConstants.SOUTH));
+		return handles;
+	}
+
+	private Handle createResizeHandle(int direction) {
+		ResizeHandle handle = new ResizeHandle(getHost(), direction);
+		handle.setDragTrackerTool(new ResizeTracker(direction, REQ_RESIZE));
+		return handle;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Routing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean understandsRequest(Request request) {
+		return super.understandsRequest(request) || request.getType() == REQ_RESIZE;
+	}
+
+	@Override
+	public Command getCommand(Request request) {
+		return getResizeCommand((ChangeBoundsRequest) request);
+	}
+
+	@Override
+	public void showSourceFeedback(Request request) {
+		showResizeFeedback((ChangeBoundsRequest) request);
+	}
+
+	@Override
+	public void eraseSourceFeedback(Request request) {
+		eraseResizeFeedback((ChangeBoundsRequest) request);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Resize
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private TopResizeFigure m_resizeFeedback;
+
+	/**
+	 * @return the {@link Command} for resize.
+	 */
+	private Command getResizeCommand(ChangeBoundsRequest request) {
+		final Rectangle oldBounds = getHost().getFigure().getBounds();
+		final Rectangle newBounds = request.getTransformedRectangle(oldBounds);
+		sanitizeBounds(newBounds);
+		return new EditCommand(m_component) {
+			@Override
+			protected void executeEdit() throws Exception {
+				TopBoundsSupport topBoundsSupport = m_component.getTopBoundsSupport();
+				topBoundsSupport.setSize(newBounds.width, newBounds.height);
+			}
+		};
+	}
+
+	/**
+	 * Shows resize feedback.
+	 */
+	protected void showResizeFeedback(ChangeBoundsRequest request) {
+		if (m_resizeFeedback == null) {
+			// create feedback
+			{
+				m_resizeFeedback = new TopResizeFigure();
+				addFeedback(m_resizeFeedback);
+			}
+		}
+		// update feedback
+		{
+			// prepare feedback bounds
+			Rectangle bounds;
+			{
+				Figure hostFigure = getHostFigure();
+				bounds = request.getTransformedRectangle(hostFigure.getBounds());
+				sanitizeBounds(bounds);
+				FigureUtils.translateFigureToAbsolute(hostFigure, bounds);
+			}
+			String sizeText =
+					"[" + Integer.toString(bounds.width) + " x " + Integer.toString(bounds.height) + "]";
+			m_resizeFeedback.setSizeText(sizeText);
+			// set bounds for feedback
+			m_resizeFeedback.setBounds(bounds);
+		}
+	}
+
+	/**
+	 * Erases resize feedback.
+	 */
+	private void eraseResizeFeedback(ChangeBoundsRequest request) {
+		if (m_resizeFeedback != null) {
+			removeFeedback(m_resizeFeedback);
+			m_resizeFeedback = null;
+		}
+	}
+
+	/**
+	 * Ensure that given {@link Rectangle} has reasonable width/height.
+	 */
+	private static void sanitizeBounds(Rectangle bounds) {
+		bounds.width = Math.max(bounds.width, 10);
+		bounds.height = Math.max(bounds.height, 10);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/gefTree/EditPartFactory.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/gefTree/EditPartFactory.java
index 10d1abb15..e1b1f5302 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/gefTree/EditPartFactory.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/gefTree/EditPartFactory.java
@@ -23,17 +23,17 @@
  * @coverage XML.gefTree
  */
 public final class EditPartFactory implements IEditPartFactory {
-  private final static IEditPartFactory MATCHING_FACTORY =
-      new MatchingEditPartFactory(ImmutableList.of("org.eclipse.wb.internal.core.xml.model"),
-          ImmutableList.of("org.eclipse.wb.internal.core.xml.gefTree.part"));
+	private final static IEditPartFactory MATCHING_FACTORY =
+			new MatchingEditPartFactory(ImmutableList.of("org.eclipse.wb.internal.core.xml.model"),
+					ImmutableList.of("org.eclipse.wb.internal.core.xml.gefTree.part"));
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IEditPartFactory
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public EditPart createEditPart(EditPart context, Object model) {
-    return MATCHING_FACTORY.createEditPart(context, model);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IEditPartFactory
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public EditPart createEditPart(EditPart context, Object model) {
+		return MATCHING_FACTORY.createEditPart(context, model);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/gefTree/GenericContainersConfigurator.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/gefTree/GenericContainersConfigurator.java
index 8ee064643..c1b44ad70 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/gefTree/GenericContainersConfigurator.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/gefTree/GenericContainersConfigurator.java
@@ -30,48 +30,48 @@
  * @coverage XML.gefTree
  */
 public final class GenericContainersConfigurator implements IEditPartConfigurator {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IEditPartConfigurator
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void configure(EditPart context, EditPart editPart) {
-    if (editPart.getModel() instanceof XmlObjectInfo) {
-      XmlObjectInfo component = (XmlObjectInfo) editPart.getModel();
-      configureComponent(editPart, component);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IEditPartConfigurator
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void configure(EditPart context, EditPart editPart) {
+		if (editPart.getModel() instanceof XmlObjectInfo) {
+			XmlObjectInfo component = (XmlObjectInfo) editPart.getModel();
+			configureComponent(editPart, component);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Configuring
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void configureComponent(EditPart editPart, XmlObjectInfo component) {
-    configureSimpleContainer(editPart, component);
-    configureFlowContainer(editPart, component);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Configuring
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void configureComponent(EditPart editPart, XmlObjectInfo component) {
+		configureSimpleContainer(editPart, component);
+		configureFlowContainer(editPart, component);
+	}
 
-  /**
-   * Simple containers: SimplePanel, CaptionPanel, etc.
-   */
-  private void configureSimpleContainer(EditPart editPart, XmlObjectInfo component) {
-    List<SimpleContainer> containers = new SimpleContainerFactory(component, false).get();
-    for (SimpleContainer container : containers) {
-      EditPolicy layoutPolicy = new SimpleContainerLayoutEditPolicy(component, container);
-      editPart.installEditPolicy(container, layoutPolicy);
-    }
-  }
+	/**
+	 * Simple containers: SimplePanel, CaptionPanel, etc.
+	 */
+	private void configureSimpleContainer(EditPart editPart, XmlObjectInfo component) {
+		List<SimpleContainer> containers = new SimpleContainerFactory(component, false).get();
+		for (SimpleContainer container : containers) {
+			EditPolicy layoutPolicy = new SimpleContainerLayoutEditPolicy(component, container);
+			editPart.installEditPolicy(container, layoutPolicy);
+		}
+	}
 
-  /**
-   * Flow containers: FlowPanel, HorizontalPanel, VerticalPanel, etc.
-   */
-  private void configureFlowContainer(EditPart editPart, XmlObjectInfo component) {
-    List<FlowContainer> containers = new FlowContainerFactory(component, false).get();
-    for (FlowContainer container : containers) {
-      EditPolicy layoutPolicy = new FlowContainerLayoutEditPolicy(component, container);
-      editPart.installEditPolicy(container, layoutPolicy);
-    }
-  }
+	/**
+	 * Flow containers: FlowPanel, HorizontalPanel, VerticalPanel, etc.
+	 */
+	private void configureFlowContainer(EditPart editPart, XmlObjectInfo component) {
+		List<FlowContainer> containers = new FlowContainerFactory(component, false).get();
+		for (FlowContainer container : containers) {
+			EditPolicy layoutPolicy = new FlowContainerLayoutEditPolicy(component, container);
+			editPart.installEditPolicy(container, layoutPolicy);
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/gefTree/GenericContainersLayoutEditPolicyFactory.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/gefTree/GenericContainersLayoutEditPolicyFactory.java
index 2aaa2b130..6eb66407f 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/gefTree/GenericContainersLayoutEditPolicyFactory.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/gefTree/GenericContainersLayoutEditPolicyFactory.java
@@ -30,31 +30,31 @@
  * @coverage XML.gefTree
  */
 public final class GenericContainersLayoutEditPolicyFactory implements ILayoutEditPolicyFactory {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ILayoutEditPolicyFactory
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public LayoutEditPolicy createLayoutEditPolicy(EditPart context, Object model) {
-    if (model instanceof XmlObjectInfo) {
-      XmlObjectInfo layout = (XmlObjectInfo) model;
-      // simple containers
-      {
-        List<SimpleContainer> containers = new SimpleContainerFactory(layout, true).get();
-        for (SimpleContainer container : containers) {
-          return new SimpleContainerLayoutEditPolicy(layout, container);
-        }
-      }
-      // flow containers
-      {
-        List<FlowContainer> containers = new FlowContainerFactory(layout, false).get();
-        for (FlowContainer container : containers) {
-          return new FlowContainerLayoutEditPolicy(layout, container);
-        }
-      }
-    }
-    // not found
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ILayoutEditPolicyFactory
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public LayoutEditPolicy createLayoutEditPolicy(EditPart context, Object model) {
+		if (model instanceof XmlObjectInfo) {
+			XmlObjectInfo layout = (XmlObjectInfo) model;
+			// simple containers
+			{
+				List<SimpleContainer> containers = new SimpleContainerFactory(layout, true).get();
+				for (SimpleContainer container : containers) {
+					return new SimpleContainerLayoutEditPolicy(layout, container);
+				}
+			}
+			// flow containers
+			{
+				List<FlowContainer> containers = new FlowContainerFactory(layout, false).get();
+				for (FlowContainer container : containers) {
+					return new FlowContainerLayoutEditPolicy(layout, container);
+				}
+			}
+		}
+		// not found
+		return null;
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/gefTree/part/XmlObjectEditPart.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/gefTree/part/XmlObjectEditPart.java
index cc0b2a218..0e3987ccc 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/gefTree/part/XmlObjectEditPart.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/gefTree/part/XmlObjectEditPart.java
@@ -21,26 +21,26 @@
  * @coverage XML.gefTree
  */
 public class XmlObjectEditPart extends ObjectEditPart {
-  private final XmlObjectInfo m_object;
+	private final XmlObjectInfo m_object;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public XmlObjectEditPart(XmlObjectInfo object) {
-    super(object);
-    m_object = object;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public XmlObjectEditPart(XmlObjectInfo object) {
+		super(object);
+		m_object = object;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Policies
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createEditPolicies() {
-    super.createEditPolicies();
-    //DoubleClickLayoutEditPolicy.install(this);TODO
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Policies
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createEditPolicies() {
+		super.createEditPolicies();
+		//DoubleClickLayoutEditPolicy.install(this);TODO
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/AbstractComponentInfo.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/AbstractComponentInfo.java
index 75d782951..101938465 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/AbstractComponentInfo.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/AbstractComponentInfo.java
@@ -30,274 +30,274 @@
  * @coverage XML.model
  */
 public abstract class AbstractComponentInfo extends XmlObjectInfo implements IAbstractComponentInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractComponentInfo(EditorContext context,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(context, description, creationSupport);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Bounds
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Rectangle m_bounds;
-  private Rectangle m_modelBounds;
-
-  @Override
-  public final Rectangle getBounds() {
-    return m_bounds;
-  }
-
-  @Override
-  public final void setBounds(Rectangle bounds) {
-    m_bounds = bounds;
-  }
-
-  @Override
-  public final Rectangle getModelBounds() {
-    return m_modelBounds;
-  }
-
-  @Override
-  public final void setModelBounds(Rectangle bounds) {
-    m_modelBounds = bounds;
-    // set "shot" bounds
-    m_bounds = m_modelBounds.getCopy();
-    if (getParent() instanceof AbstractComponentInfo) {
-      AbstractComponentInfo parentComponent = (AbstractComponentInfo) getParent();
-      m_bounds.performTranslate(parentComponent.getClientAreaInsets());
-    }
-  }
-
-  /**
-   * @return the absolute bounds, i.e. bounds relative to the top-left point of root component.
-   */
-  public Rectangle getAbsoluteBounds() {
-    Rectangle bounds = getBounds().getCopy();
-    // make relative to screen
-    {
-      AbstractComponentInfo parent = (AbstractComponentInfo) getParent();
-      while (parent != null) {
-        bounds.performTranslate(parent.getBounds().getLocation());
-        parent = (AbstractComponentInfo) parent.getParent();
-      }
-    }
-    // make relative to root component
-    {
-      AbstractComponentInfo rootComponent = (AbstractComponentInfo) getRoot();
-      bounds.performTranslate(rootComponent.getBounds().getLocation().getNegated());
-    }
-    // OK, final result
-    return bounds;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if need draw dots border for this component.
-   */
-  public boolean shouldDrawDotsBorder() throws Exception {
-    return false;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Preferred size
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Dimension m_preferredSize;
-
-  @Override
-  public final Dimension getPreferredSize() {
-    if (m_preferredSize == null) {
-      return getLivePreferredSize();
-    }
-    return m_preferredSize;
-  }
-
-  /**
-   * Sets preferred size of this component.
-   *
-   * This method should be used by subclasses during fetching visual information.
-   */
-  public final void setPreferredSize(Dimension preferredSize) {
-    m_preferredSize = preferredSize;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Baseline
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final int getBaseline() {
-    Object object = getObject();
-    if (object == null) {
-      return getLiveBaseline();
-    }
-    return BaselineSupportHelper.getBaseline(object);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Insets
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Insets m_clientAreaInsets = IFigure.NO_INSETS;
-
-  @Override
-  public final Insets getClientAreaInsets() {
-    return m_clientAreaInsets;
-  }
-
-  @Override
-  public final void setClientAreaInsets(Insets clientAreaInsets) {
-    m_clientAreaInsets = clientAreaInsets;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Right-to-left
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if this container uses right-to-left orientation.
-   */
-  @Override
-  public boolean isRTL() {
-    return false;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Image
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Image m_image;
-
-  @Override
-  public final Image getImage() {
-    if (m_image == null && getParent() == null) {
-      return getLiveImage();
-    }
-    return m_image;
-  }
-
-  /**
-   * Sets new image of this component.<br>
-   * This method should be used by subclasses during fetching visual information.
-   */
-  public final void setImage(Image image) {
-    m_image = image;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // "Live" support
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the image of this component that should be used during creation.
-   */
-  protected Image getLiveImage() {
-    return null;
-  }
-
-  /**
-   * @return the preferred size of this component that should be used during creation.
-   */
-  protected Dimension getLivePreferredSize() {
-    Image liveImage = getLiveImage();
-    if (liveImage != null) {
-      return new Dimension(liveImage.getBounds().width, liveImage.getBounds().height);
-    }
-    return null;
-  }
-
-  /**
-   * @return the baseline of this component that should be used during creation.
-   */
-  protected int getLiveBaseline() {
-    return -1;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Delete
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void delete() throws Exception {
-    refresh_dispose();
-    super.delete();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void refresh_dispose() throws Exception {
-    // dispose image
-    if (m_image != null) {
-      m_image.dispose();
-      m_image = null;
-    }
-    // call "super"
-    super.refresh_dispose();
-  }
-
-  @Override
-  protected void refresh_afterCreate() throws Exception {
-    // call "super"
-    super.refresh_afterCreate();
-    // apply top bounds for root component
-    if (isRoot()) {
-      getTopBoundsSupport().apply();
-    }
-  }
-
-  /**
-   * @return the visual object for this {@link AbstractComponentInfo}. In most cases this is same
-   *         object as {@link #getObject()}, but sometimes component is not visual itself, but has
-   *         visual presentation.
-   */
-  public Object getComponentObject() {
-    return getObject();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // TopBoundsSupport
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private TopBoundsSupport m_topBoundsSupport;
-
-  /**
-   * @return the {@link TopBoundsSupport} for this component.
-   */
-  @Override
-  public final TopBoundsSupport getTopBoundsSupport() {
-    if (m_topBoundsSupport == null) {
-      m_topBoundsSupport = createTopBoundsSupport();
-    }
-    return m_topBoundsSupport;
-  }
-
-  /**
-   * @return the new {@link TopBoundsSupport} instance for this component.
-   */
-  protected TopBoundsSupport createTopBoundsSupport() {
-    throw new NotImplementedException();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractComponentInfo(EditorContext context,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(context, description, creationSupport);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Bounds
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Rectangle m_bounds;
+	private Rectangle m_modelBounds;
+
+	@Override
+	public final Rectangle getBounds() {
+		return m_bounds;
+	}
+
+	@Override
+	public final void setBounds(Rectangle bounds) {
+		m_bounds = bounds;
+	}
+
+	@Override
+	public final Rectangle getModelBounds() {
+		return m_modelBounds;
+	}
+
+	@Override
+	public final void setModelBounds(Rectangle bounds) {
+		m_modelBounds = bounds;
+		// set "shot" bounds
+		m_bounds = m_modelBounds.getCopy();
+		if (getParent() instanceof AbstractComponentInfo) {
+			AbstractComponentInfo parentComponent = (AbstractComponentInfo) getParent();
+			m_bounds.performTranslate(parentComponent.getClientAreaInsets());
+		}
+	}
+
+	/**
+	 * @return the absolute bounds, i.e. bounds relative to the top-left point of root component.
+	 */
+	public Rectangle getAbsoluteBounds() {
+		Rectangle bounds = getBounds().getCopy();
+		// make relative to screen
+		{
+			AbstractComponentInfo parent = (AbstractComponentInfo) getParent();
+			while (parent != null) {
+				bounds.performTranslate(parent.getBounds().getLocation());
+				parent = (AbstractComponentInfo) parent.getParent();
+			}
+		}
+		// make relative to root component
+		{
+			AbstractComponentInfo rootComponent = (AbstractComponentInfo) getRoot();
+			bounds.performTranslate(rootComponent.getBounds().getLocation().getNegated());
+		}
+		// OK, final result
+		return bounds;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if need draw dots border for this component.
+	 */
+	public boolean shouldDrawDotsBorder() throws Exception {
+		return false;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Preferred size
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Dimension m_preferredSize;
+
+	@Override
+	public final Dimension getPreferredSize() {
+		if (m_preferredSize == null) {
+			return getLivePreferredSize();
+		}
+		return m_preferredSize;
+	}
+
+	/**
+	 * Sets preferred size of this component.
+	 *
+	 * This method should be used by subclasses during fetching visual information.
+	 */
+	public final void setPreferredSize(Dimension preferredSize) {
+		m_preferredSize = preferredSize;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Baseline
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final int getBaseline() {
+		Object object = getObject();
+		if (object == null) {
+			return getLiveBaseline();
+		}
+		return BaselineSupportHelper.getBaseline(object);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Insets
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Insets m_clientAreaInsets = IFigure.NO_INSETS;
+
+	@Override
+	public final Insets getClientAreaInsets() {
+		return m_clientAreaInsets;
+	}
+
+	@Override
+	public final void setClientAreaInsets(Insets clientAreaInsets) {
+		m_clientAreaInsets = clientAreaInsets;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Right-to-left
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if this container uses right-to-left orientation.
+	 */
+	@Override
+	public boolean isRTL() {
+		return false;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Image
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Image m_image;
+
+	@Override
+	public final Image getImage() {
+		if (m_image == null && getParent() == null) {
+			return getLiveImage();
+		}
+		return m_image;
+	}
+
+	/**
+	 * Sets new image of this component.<br>
+	 * This method should be used by subclasses during fetching visual information.
+	 */
+	public final void setImage(Image image) {
+		m_image = image;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// "Live" support
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the image of this component that should be used during creation.
+	 */
+	protected Image getLiveImage() {
+		return null;
+	}
+
+	/**
+	 * @return the preferred size of this component that should be used during creation.
+	 */
+	protected Dimension getLivePreferredSize() {
+		Image liveImage = getLiveImage();
+		if (liveImage != null) {
+			return new Dimension(liveImage.getBounds().width, liveImage.getBounds().height);
+		}
+		return null;
+	}
+
+	/**
+	 * @return the baseline of this component that should be used during creation.
+	 */
+	protected int getLiveBaseline() {
+		return -1;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Delete
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void delete() throws Exception {
+		refresh_dispose();
+		super.delete();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void refresh_dispose() throws Exception {
+		// dispose image
+		if (m_image != null) {
+			m_image.dispose();
+			m_image = null;
+		}
+		// call "super"
+		super.refresh_dispose();
+	}
+
+	@Override
+	protected void refresh_afterCreate() throws Exception {
+		// call "super"
+		super.refresh_afterCreate();
+		// apply top bounds for root component
+		if (isRoot()) {
+			getTopBoundsSupport().apply();
+		}
+	}
+
+	/**
+	 * @return the visual object for this {@link AbstractComponentInfo}. In most cases this is same
+	 *         object as {@link #getObject()}, but sometimes component is not visual itself, but has
+	 *         visual presentation.
+	 */
+	public Object getComponentObject() {
+		return getObject();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// TopBoundsSupport
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private TopBoundsSupport m_topBoundsSupport;
+
+	/**
+	 * @return the {@link TopBoundsSupport} for this component.
+	 */
+	@Override
+	public final TopBoundsSupport getTopBoundsSupport() {
+		if (m_topBoundsSupport == null) {
+			m_topBoundsSupport = createTopBoundsSupport();
+		}
+		return m_topBoundsSupport;
+	}
+
+	/**
+	 * @return the new {@link TopBoundsSupport} instance for this component.
+	 */
+	protected TopBoundsSupport createTopBoundsSupport() {
+		throw new NotImplementedException();
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/EditorContext.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/EditorContext.java
index df0c9da45..3485b162a 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/EditorContext.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/EditorContext.java
@@ -56,348 +56,348 @@
  * @coverage XML.model
  */
 public abstract class EditorContext {
-  private final BroadcastSupport m_broadcastSupport = new BroadcastSupport();
-  private final ToolkitDescription m_toolkit;
-  private final String m_toolkitId;
-  private final IDocument m_document;
-  protected final IFile m_file;
-  protected final IProject m_project;
-  protected final IJavaProject m_javaProject;
-  protected ClassLoader m_classLoader;
-  private ILoadingContext m_loadingContext;
-  private DocumentEditContext m_documentEditContext;
-  private DocumentElement m_rootElement;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public EditorContext(ToolkitDescription toolkit, IFile file, IDocument document) throws Exception {
-    m_toolkit = toolkit;
-    m_toolkitId = toolkit.getId();
-    m_document = document;
-    m_file = file;
-    m_project = file.getProject();
-    // Java project
-    m_javaProject = JavaCore.create(m_project);
-    if (!m_javaProject.exists()) {
-      throw new DesignerException(IExceptionConstants.NOT_JAVA_PROJECT,
-          m_file.getFullPath().toPortableString(),
-          m_project.getFullPath().toPortableString());
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Life cycle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Performs heavy initialization.
-   */
-  public void initialize() throws Exception {
-    createClassLoader();
-    m_loadingContext = new XmlLoadingContext(this);
-    m_documentEditContext = new DocumentEditContext(m_document) {
-      @Override
-      protected AbstractDocumentHandler createDocumentHandler() {
-        return new AbstractDocumentHandler();
-      }
-    };
-    m_rootElement = m_documentEditContext.getRoot();
-    // set charset
-    {
-      String charset = m_file.getCharset();
-      m_rootElement.getModel().setCharset(charset);
-    }
-  }
-
-  /**
-   * Commits changes into underlying XML.
-   */
-  public void commit() throws Exception {
-    m_broadcastSupport.getListener(EditorContextCommitListener.class).aboutToCommit();
-    m_documentEditContext.commit();
-    m_broadcastSupport.getListener(EditorContextCommitListener.class).doneCommit();
-  }
-
-  /**
-   * Disposes resources allocated globally for this editor.
-   */
-  public void dispose() throws Exception {
-    m_documentEditContext.disconnect();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ClassLoader
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Creates {@link ClassLoader} in {@link #m_classLoader}.
-   */
-  protected void createClassLoader() throws Exception {
-    // prepare "project" ClassLoader
-    ClassLoader projectClassLoader;
-    {
-      CompositeClassLoader parentClassLoader = new CompositeClassLoader();
-      addParentClassLoaders(parentClassLoader);
-      projectClassLoader = createProjectClassLoader(parentClassLoader);
-    }
-    // fill CompositeClassLoader
-    CompositeClassLoader compositeClassLoader = new CompositeClassLoader();
-    compositeClassLoader.add(projectClassLoader, null);
-    addLibraryClassLoaders(compositeClassLoader, projectClassLoader);
-    // done
-    m_classLoader = compositeClassLoader;
-  }
-
-  /**
-   * Creates {@link ClassLoader} that includes classes of {@link IJavaProject}.
-   */
-  protected ClassLoader createProjectClassLoader(CompositeClassLoader parentClassLoader)
-      throws Exception {
-    return ProjectClassLoader.create(parentClassLoader, m_javaProject);
-  }
-
-  /**
-   * Adds {@link ClassLoader}s to use as parent for project {@link ClassLoader}.
-   */
-  protected void addParentClassLoaders(CompositeClassLoader parentClassLoader) throws Exception {
-    // add class loaders for "classLoader-bundle" contributions
-    List<IConfigurationElement> toolkitElements = DescriptionHelper.getToolkitElements(m_toolkitId);
-    for (IConfigurationElement toolkitElement : toolkitElements) {
-      IConfigurationElement[] contributorElements =
-          toolkitElement.getChildren("classLoader-bundle");
-      for (IConfigurationElement contributorElement : contributorElements) {
-        Bundle bundle = getExistingBundle(contributorElement);
-        List<String> namespaces = getBundleClassLoaderNamespaces(contributorElement);
-        ClassLoader classLoader = BundleClassLoader.create(bundle);
-        parentClassLoader.add(classLoader, namespaces);
-      }
-    }
-  }
-
-  /**
-   * @return the namespaces for {@link CompositeClassLoader} from "namespaces" attribute.
-   */
-  private static List<String> getBundleClassLoaderNamespaces(IConfigurationElement contributorElement) {
-    String namespacesString = contributorElement.getAttribute("namespaces");
-    if (namespacesString != null) {
-      return ImmutableList.copyOf(StringUtils.split(namespacesString));
-    }
-    return null;
-  }
-
-  /**
-   * @return the composite {@link ClassLoader} based on given main {@link ClassLoader} with addition
-   *         of {@link BundleClassLoader}'s and {@link IByteCodeProcessor}'s.
-   */
-  private void addLibraryClassLoaders(CompositeClassLoader compositeClassLoader,
-      ClassLoader mainClassLoader) throws Exception {
-    List<IConfigurationElement> toolkitElements = DescriptionHelper.getToolkitElements(m_toolkitId);
-    for (IConfigurationElement toolkitElement : toolkitElements) {
-      IConfigurationElement[] contributorElements =
-          toolkitElement.getChildren("classLoader-library");
-      if (contributorElements.length != 0) {
-        URL[] urls = new URL[contributorElements.length];
-        for (int i = 0; i < contributorElements.length; i++) {
-          IConfigurationElement contributorElement = contributorElements[i];
-          Bundle bundle = getExistingBundle(contributorElement);
-          // prepare URL for JAR
-          String jarPath = contributorElement.getAttribute("jar");
-          URL jarEntry = bundle.getEntry(jarPath);
-          Assert.isNotNull(jarEntry, "Unable to find %s in %s", jarPath, bundle.getSymbolicName());
-          urls[i] = FileLocator.toFileURL(jarEntry);
-        }
-        // add ClassLoader with all libraries
-        compositeClassLoader.add(new URLClassLoader(urls, mainClassLoader), null);
-      }
-    }
-  }
-
-  /**
-   * @return {@link Bundle} specified in attribute "bundle".
-   */
-  private static Bundle getExistingBundle(IConfigurationElement contributorElement) {
-    String bundleId = ExternalFactoriesHelper.getRequiredAttribute(contributorElement, "bundle");
-    return ExternalFactoriesHelper.getRequiredBundle(bundleId);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link ToolkitDescription} of UI in this editor.
-   */
-  public ToolkitDescription getToolkit() {
-    return m_toolkit;
-  }
-
-  /**
-   * @return the {@link BroadcastSupport} for editor.
-   */
-  public BroadcastSupport getBroadcastSupport() {
-    return m_broadcastSupport;
-  }
-
-  /**
-   * @return the {@link ClassLoader} for loading classes in this editing context.
-   */
-  public ClassLoader getClassLoader() {
-    return m_classLoader;
-  }
-
-  /**
-   * @return the {@link ILoadingContext} to use in D2Core helpers.
-   */
-  public ILoadingContext getLoadingContext() {
-    return m_loadingContext;
-  }
-
-  /**
-   * @return the XML file.
-   */
-  public IFile getFile() {
-    return m_file;
-  }
-
-  /**
-   * @return the enclosing {@link IJavaProject}.
-   */
-  public IJavaProject getJavaProject() {
-    return m_javaProject;
-  }
-
-  /**
-   * @return the {@link IDocument} to commit changes to.
-   */
-  public IDocument getDocument() {
-    return m_document;
-  }
-
-  /**
-   * @return the the content of XML file.
-   */
-  public String getContent() {
-    return m_documentEditContext.getText();
-  }
-
-  /**
-   * @return the root {@link DocumentElement} in XML.
-   */
-  public DocumentElement getRootElement() {
-    return m_rootElement;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parsing flag
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private boolean m_parsing;
-
-  /**
-   * @return <code>true</code> if model hierarchy is in process of parsing.
-   */
-  public boolean isParsing() {
-    return m_parsing;
-  }
-
-  /**
-   * Specifies if model hierarchy is in process of parsing.
-   */
-  public void setParsing(boolean parsing) {
-    m_parsing = parsing;
-    GlobalState.setParsing(parsing);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IDescriptionVersionsProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final Map<String, Object> m_versions = Maps.newHashMap();
-  private final List<IDescriptionVersionsProvider> m_descriptionVersionsProviders =
-      Lists.newArrayList();
-
-  /**
-   * @return the {@link Map} of versions for toolkit in this {@link EditorContext}.
-   */
-  public Map<String, Object> getVersions() {
-    return m_versions;
-  }
-
-  /**
-   * @see IDescriptionVersionsProvider
-   */
-  public List<IDescriptionVersionsProvider> getDescriptionVersionsProviders() {
-    return m_descriptionVersionsProviders;
-  }
-
-  public void addVersions(Map<String, ?> versions) {
-    m_versions.putAll(versions);
-  }
-
-  public void addDescriptionVersionsProvider(IDescriptionVersionsProvider provider) {
-    Assert.isNotNull(provider);
-    if (!m_descriptionVersionsProviders.contains(provider)) {
-      m_descriptionVersionsProviders.add(provider);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Warnings
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final List<EditorWarning> m_warnings = Lists.newArrayList();
-
-  /**
-   * @return the {@link List} of {@link EditorWarning}'s.
-   */
-  public List<EditorWarning> getWarnings() {
-    return m_warnings;
-  }
-
-  /**
-   * Adds new {@link EditorWarning}.
-   */
-  public void addWarning(EditorWarning warning) {
-    m_warnings.add(warning);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // "Live component" flag
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private boolean m_isLiveComponent;
-
-  /**
-   * @return <code>true</code> if model hierarchy is in process of "live component" operation.
-   */
-  public boolean isLiveComponent() {
-    return m_isLiveComponent;
-  }
-
-  /**
-   * Specifies if model hierarchy is in process of "live component".
-   */
-  public void setLiveComponent(boolean isLiveComponent) {
-    m_isLiveComponent = isLiveComponent;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ILiveEditorContext
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link ILiveEditorContext} for current toolkit.
-   */
-  public abstract ILiveEditorContext getLiveContext();
+	private final BroadcastSupport m_broadcastSupport = new BroadcastSupport();
+	private final ToolkitDescription m_toolkit;
+	private final String m_toolkitId;
+	private final IDocument m_document;
+	protected final IFile m_file;
+	protected final IProject m_project;
+	protected final IJavaProject m_javaProject;
+	protected ClassLoader m_classLoader;
+	private ILoadingContext m_loadingContext;
+	private DocumentEditContext m_documentEditContext;
+	private DocumentElement m_rootElement;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public EditorContext(ToolkitDescription toolkit, IFile file, IDocument document) throws Exception {
+		m_toolkit = toolkit;
+		m_toolkitId = toolkit.getId();
+		m_document = document;
+		m_file = file;
+		m_project = file.getProject();
+		// Java project
+		m_javaProject = JavaCore.create(m_project);
+		if (!m_javaProject.exists()) {
+			throw new DesignerException(IExceptionConstants.NOT_JAVA_PROJECT,
+					m_file.getFullPath().toPortableString(),
+					m_project.getFullPath().toPortableString());
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Life cycle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Performs heavy initialization.
+	 */
+	public void initialize() throws Exception {
+		createClassLoader();
+		m_loadingContext = new XmlLoadingContext(this);
+		m_documentEditContext = new DocumentEditContext(m_document) {
+			@Override
+			protected AbstractDocumentHandler createDocumentHandler() {
+				return new AbstractDocumentHandler();
+			}
+		};
+		m_rootElement = m_documentEditContext.getRoot();
+		// set charset
+		{
+			String charset = m_file.getCharset();
+			m_rootElement.getModel().setCharset(charset);
+		}
+	}
+
+	/**
+	 * Commits changes into underlying XML.
+	 */
+	public void commit() throws Exception {
+		m_broadcastSupport.getListener(EditorContextCommitListener.class).aboutToCommit();
+		m_documentEditContext.commit();
+		m_broadcastSupport.getListener(EditorContextCommitListener.class).doneCommit();
+	}
+
+	/**
+	 * Disposes resources allocated globally for this editor.
+	 */
+	public void dispose() throws Exception {
+		m_documentEditContext.disconnect();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ClassLoader
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Creates {@link ClassLoader} in {@link #m_classLoader}.
+	 */
+	protected void createClassLoader() throws Exception {
+		// prepare "project" ClassLoader
+		ClassLoader projectClassLoader;
+		{
+			CompositeClassLoader parentClassLoader = new CompositeClassLoader();
+			addParentClassLoaders(parentClassLoader);
+			projectClassLoader = createProjectClassLoader(parentClassLoader);
+		}
+		// fill CompositeClassLoader
+		CompositeClassLoader compositeClassLoader = new CompositeClassLoader();
+		compositeClassLoader.add(projectClassLoader, null);
+		addLibraryClassLoaders(compositeClassLoader, projectClassLoader);
+		// done
+		m_classLoader = compositeClassLoader;
+	}
+
+	/**
+	 * Creates {@link ClassLoader} that includes classes of {@link IJavaProject}.
+	 */
+	protected ClassLoader createProjectClassLoader(CompositeClassLoader parentClassLoader)
+			throws Exception {
+		return ProjectClassLoader.create(parentClassLoader, m_javaProject);
+	}
+
+	/**
+	 * Adds {@link ClassLoader}s to use as parent for project {@link ClassLoader}.
+	 */
+	protected void addParentClassLoaders(CompositeClassLoader parentClassLoader) throws Exception {
+		// add class loaders for "classLoader-bundle" contributions
+		List<IConfigurationElement> toolkitElements = DescriptionHelper.getToolkitElements(m_toolkitId);
+		for (IConfigurationElement toolkitElement : toolkitElements) {
+			IConfigurationElement[] contributorElements =
+					toolkitElement.getChildren("classLoader-bundle");
+			for (IConfigurationElement contributorElement : contributorElements) {
+				Bundle bundle = getExistingBundle(contributorElement);
+				List<String> namespaces = getBundleClassLoaderNamespaces(contributorElement);
+				ClassLoader classLoader = BundleClassLoader.create(bundle);
+				parentClassLoader.add(classLoader, namespaces);
+			}
+		}
+	}
+
+	/**
+	 * @return the namespaces for {@link CompositeClassLoader} from "namespaces" attribute.
+	 */
+	private static List<String> getBundleClassLoaderNamespaces(IConfigurationElement contributorElement) {
+		String namespacesString = contributorElement.getAttribute("namespaces");
+		if (namespacesString != null) {
+			return ImmutableList.copyOf(StringUtils.split(namespacesString));
+		}
+		return null;
+	}
+
+	/**
+	 * @return the composite {@link ClassLoader} based on given main {@link ClassLoader} with addition
+	 *         of {@link BundleClassLoader}'s and {@link IByteCodeProcessor}'s.
+	 */
+	private void addLibraryClassLoaders(CompositeClassLoader compositeClassLoader,
+			ClassLoader mainClassLoader) throws Exception {
+		List<IConfigurationElement> toolkitElements = DescriptionHelper.getToolkitElements(m_toolkitId);
+		for (IConfigurationElement toolkitElement : toolkitElements) {
+			IConfigurationElement[] contributorElements =
+					toolkitElement.getChildren("classLoader-library");
+			if (contributorElements.length != 0) {
+				URL[] urls = new URL[contributorElements.length];
+				for (int i = 0; i < contributorElements.length; i++) {
+					IConfigurationElement contributorElement = contributorElements[i];
+					Bundle bundle = getExistingBundle(contributorElement);
+					// prepare URL for JAR
+					String jarPath = contributorElement.getAttribute("jar");
+					URL jarEntry = bundle.getEntry(jarPath);
+					Assert.isNotNull(jarEntry, "Unable to find %s in %s", jarPath, bundle.getSymbolicName());
+					urls[i] = FileLocator.toFileURL(jarEntry);
+				}
+				// add ClassLoader with all libraries
+				compositeClassLoader.add(new URLClassLoader(urls, mainClassLoader), null);
+			}
+		}
+	}
+
+	/**
+	 * @return {@link Bundle} specified in attribute "bundle".
+	 */
+	private static Bundle getExistingBundle(IConfigurationElement contributorElement) {
+		String bundleId = ExternalFactoriesHelper.getRequiredAttribute(contributorElement, "bundle");
+		return ExternalFactoriesHelper.getRequiredBundle(bundleId);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link ToolkitDescription} of UI in this editor.
+	 */
+	public ToolkitDescription getToolkit() {
+		return m_toolkit;
+	}
+
+	/**
+	 * @return the {@link BroadcastSupport} for editor.
+	 */
+	public BroadcastSupport getBroadcastSupport() {
+		return m_broadcastSupport;
+	}
+
+	/**
+	 * @return the {@link ClassLoader} for loading classes in this editing context.
+	 */
+	public ClassLoader getClassLoader() {
+		return m_classLoader;
+	}
+
+	/**
+	 * @return the {@link ILoadingContext} to use in D2Core helpers.
+	 */
+	public ILoadingContext getLoadingContext() {
+		return m_loadingContext;
+	}
+
+	/**
+	 * @return the XML file.
+	 */
+	public IFile getFile() {
+		return m_file;
+	}
+
+	/**
+	 * @return the enclosing {@link IJavaProject}.
+	 */
+	public IJavaProject getJavaProject() {
+		return m_javaProject;
+	}
+
+	/**
+	 * @return the {@link IDocument} to commit changes to.
+	 */
+	public IDocument getDocument() {
+		return m_document;
+	}
+
+	/**
+	 * @return the the content of XML file.
+	 */
+	public String getContent() {
+		return m_documentEditContext.getText();
+	}
+
+	/**
+	 * @return the root {@link DocumentElement} in XML.
+	 */
+	public DocumentElement getRootElement() {
+		return m_rootElement;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parsing flag
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private boolean m_parsing;
+
+	/**
+	 * @return <code>true</code> if model hierarchy is in process of parsing.
+	 */
+	public boolean isParsing() {
+		return m_parsing;
+	}
+
+	/**
+	 * Specifies if model hierarchy is in process of parsing.
+	 */
+	public void setParsing(boolean parsing) {
+		m_parsing = parsing;
+		GlobalState.setParsing(parsing);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IDescriptionVersionsProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final Map<String, Object> m_versions = Maps.newHashMap();
+	private final List<IDescriptionVersionsProvider> m_descriptionVersionsProviders =
+			Lists.newArrayList();
+
+	/**
+	 * @return the {@link Map} of versions for toolkit in this {@link EditorContext}.
+	 */
+	public Map<String, Object> getVersions() {
+		return m_versions;
+	}
+
+	/**
+	 * @see IDescriptionVersionsProvider
+	 */
+	public List<IDescriptionVersionsProvider> getDescriptionVersionsProviders() {
+		return m_descriptionVersionsProviders;
+	}
+
+	public void addVersions(Map<String, ?> versions) {
+		m_versions.putAll(versions);
+	}
+
+	public void addDescriptionVersionsProvider(IDescriptionVersionsProvider provider) {
+		Assert.isNotNull(provider);
+		if (!m_descriptionVersionsProviders.contains(provider)) {
+			m_descriptionVersionsProviders.add(provider);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Warnings
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final List<EditorWarning> m_warnings = Lists.newArrayList();
+
+	/**
+	 * @return the {@link List} of {@link EditorWarning}'s.
+	 */
+	public List<EditorWarning> getWarnings() {
+		return m_warnings;
+	}
+
+	/**
+	 * Adds new {@link EditorWarning}.
+	 */
+	public void addWarning(EditorWarning warning) {
+		m_warnings.add(warning);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// "Live component" flag
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private boolean m_isLiveComponent;
+
+	/**
+	 * @return <code>true</code> if model hierarchy is in process of "live component" operation.
+	 */
+	public boolean isLiveComponent() {
+		return m_isLiveComponent;
+	}
+
+	/**
+	 * Specifies if model hierarchy is in process of "live component".
+	 */
+	public void setLiveComponent(boolean isLiveComponent) {
+		m_isLiveComponent = isLiveComponent;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ILiveEditorContext
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link ILiveEditorContext} for current toolkit.
+	 */
+	public abstract ILiveEditorContext getLiveContext();
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/EditorContextCommitListener.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/EditorContextCommitListener.java
index df544fe6a..4df0703ed 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/EditorContextCommitListener.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/EditorContextCommitListener.java
@@ -19,13 +19,13 @@
  * @coverage XML.model
  */
 public interface EditorContextCommitListener {
-  /**
-   * Notifies that commit is about to be performed, so {@link IDocument} will be changed.
-   */
-  void aboutToCommit();
+	/**
+	 * Notifies that commit is about to be performed, so {@link IDocument} will be changed.
+	 */
+	void aboutToCommit();
 
-  /**
-   * Notifies that commit into {@link IDocument} was done.
-   */
-  void doneCommit();
+	/**
+	 * Notifies that commit into {@link IDocument} was done.
+	 */
+	void doneCommit();
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/ILiveEditorContext.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/ILiveEditorContext.java
index 39d7aa78b..2ac2f4e93 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/ILiveEditorContext.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/ILiveEditorContext.java
@@ -17,14 +17,14 @@
  * @coverage XML.model
  */
 public interface ILiveEditorContext {
-  /**
-   * Parses given source.
-   */
-  XmlObjectInfo parse(String[] sourceLines) throws Exception;
+	/**
+	 * Parses given source.
+	 */
+	XmlObjectInfo parse(String[] sourceLines) throws Exception;
 
-  /**
-   * Performs clean up of {@link EditorContext} back to the state which was before
-   * {@link #parse(String[])}.
-   */
-  void dispose() throws Exception;
+	/**
+	 * Performs clean up of {@link EditorContext} back to the state which was before
+	 * {@link #parse(String[])}.
+	 */
+	void dispose() throws Exception;
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/IRootProcessor.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/IRootProcessor.java
index 182a7134a..52dd75120 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/IRootProcessor.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/IRootProcessor.java
@@ -17,8 +17,8 @@
  * @coverage XML.model
  */
 public interface IRootProcessor {
-  /**
-   * Last step after building {@link XmlObjectInfo} tree.
-   */
-  void process(XmlObjectInfo root) throws Exception;
+	/**
+	 * Last step after building {@link XmlObjectInfo} tree.
+	 */
+	void process(XmlObjectInfo root) throws Exception;
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/IWrapperInfo.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/IWrapperInfo.java
index f429c030f..10884d251 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/IWrapperInfo.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/IWrapperInfo.java
@@ -17,8 +17,8 @@
  * @coverage XML.model
  */
 public interface IWrapperInfo {
-  /**
-   * @return the wrapped {@link XmlObjectInfo}.
-   */
-  public XmlObjectInfo getWrapped() throws Exception;
+	/**
+	 * @return the wrapped {@link XmlObjectInfo}.
+	 */
+	public XmlObjectInfo getWrapped() throws Exception;
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/IXMLObjectInitializationParticipator.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/IXMLObjectInitializationParticipator.java
index 10b11a9c4..798eeb9b8 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/IXMLObjectInitializationParticipator.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/IXMLObjectInitializationParticipator.java
@@ -18,8 +18,8 @@
  * @coverage XML.model
  */
 public interface IXMLObjectInitializationParticipator {
-  /**
-   * Participates in given {@link XmlObjectInfo} initialization.
-   */
-  void process(XmlObjectInfo object) throws Exception;
+	/**
+	 * Participates in given {@link XmlObjectInfo} initialization.
+	 */
+	void process(XmlObjectInfo object) throws Exception;
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/TopBoundsSupport.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/TopBoundsSupport.java
index 437c3a9ae..10f219cc7 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/TopBoundsSupport.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/TopBoundsSupport.java
@@ -33,102 +33,102 @@
  * @coverage XML.model
  */
 public abstract class TopBoundsSupport implements ITopBoundsSupport {
-  private static final QualifiedName KEY_DESIGN_BOUNDS =
-      new QualifiedName(DesignerPlugin.PLUGIN_ID, "designBounds");
-  protected final AbstractComponentInfo m_component;
+	private static final QualifiedName KEY_DESIGN_BOUNDS =
+			new QualifiedName(DesignerPlugin.PLUGIN_ID, "designBounds");
+	protected final AbstractComponentInfo m_component;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public TopBoundsSupport(AbstractComponentInfo componentInfo) {
-    m_component = componentInfo;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public TopBoundsSupport(AbstractComponentInfo componentInfo) {
+		m_component = componentInfo;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Size
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Applies size to component.
-   */
-  public abstract void apply() throws Exception;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Size
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Applies size to component.
+	 */
+	public abstract void apply() throws Exception;
 
-  /**
-   * Sets new size of component.
-   */
-  @Override
-  public abstract void setSize(int width, int height) throws Exception;
+	/**
+	 * Sets new size of component.
+	 */
+	@Override
+	public abstract void setSize(int width, int height) throws Exception;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Test
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Shows component for testing/preview.
-   *
-   * @return <code>true</code> if something really was shown, so reparse required.
-   */
-  public abstract boolean show() throws Exception;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Test
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Shows component for testing/preview.
+	 *
+	 * @return <code>true</code> if something really was shown, so reparse required.
+	 */
+	public abstract boolean show() throws Exception;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link IResource} for this component.
-   */
-  protected final IResource getUnderlyingResource() throws Exception {
-    return m_component.getContext().getFile();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link IResource} for this component.
+	 */
+	protected final IResource getUnderlyingResource() throws Exception {
+		return m_component.getContext().getFile();
+	}
 
-  /**
-   * @return the size remembered in {@link IResource} properties for this component.
-   */
-  protected final Dimension getResourceSize() throws Exception {
-    int width;
-    int height;
-    // set defaults
-    {
-      Dimension defaultSize = getDefaultSize();
-      width = defaultSize.width;
-      height = defaultSize.height;
-    }
-    // check for size from resource properties
-    {
-      String designBoundsString = getUnderlyingResource().getPersistentProperty(KEY_DESIGN_BOUNDS);
-      if (designBoundsString != null) {
-        String[] parts = StringUtils.split(designBoundsString);
-        width = Integer.parseInt(parts[0]);
-        height = Integer.parseInt(parts[1]);
-      }
-    }
-    // ensure positive size
-    width = Math.max(width, 1);
-    height = Math.max(height, 1);
-    // final size
-    return new Dimension(width, height);
-  }
+	/**
+	 * @return the size remembered in {@link IResource} properties for this component.
+	 */
+	protected final Dimension getResourceSize() throws Exception {
+		int width;
+		int height;
+		// set defaults
+		{
+			Dimension defaultSize = getDefaultSize();
+			width = defaultSize.width;
+			height = defaultSize.height;
+		}
+		// check for size from resource properties
+		{
+			String designBoundsString = getUnderlyingResource().getPersistentProperty(KEY_DESIGN_BOUNDS);
+			if (designBoundsString != null) {
+				String[] parts = StringUtils.split(designBoundsString);
+				width = Integer.parseInt(parts[0]);
+				height = Integer.parseInt(parts[1]);
+			}
+		}
+		// ensure positive size
+		width = Math.max(width, 1);
+		height = Math.max(height, 1);
+		// final size
+		return new Dimension(width, height);
+	}
 
-  /**
-   * Remembers the size of component into {@link IResource} properties for this component.
-   */
-  protected final void setResourceSize(int width, int height) throws Exception {
-    String designBoundsString = width + " " + height;
-    getUnderlyingResource().setPersistentProperty(KEY_DESIGN_BOUNDS, designBoundsString);
-  }
+	/**
+	 * Remembers the size of component into {@link IResource} properties for this component.
+	 */
+	protected final void setResourceSize(int width, int height) throws Exception {
+		String designBoundsString = width + " " + height;
+		getUnderlyingResource().setPersistentProperty(KEY_DESIGN_BOUNDS, designBoundsString);
+	}
 
-  /**
-   * @return the default size for this component.
-   */
-  protected Dimension getDefaultSize() {
-    IPreferenceStore preferences = m_component.getDescription().getToolkit().getPreferences();
-    int width = preferences.getInt(IPreferenceConstants.P_GENERAL_DEFAULT_TOP_WIDTH);
-    int height = preferences.getInt(IPreferenceConstants.P_GENERAL_DEFAULT_TOP_HEIGHT);
-    return new Dimension(width, height);
-  }
+	/**
+	 * @return the default size for this component.
+	 */
+	protected Dimension getDefaultSize() {
+		IPreferenceStore preferences = m_component.getDescription().getToolkit().getPreferences();
+		int width = preferences.getInt(IPreferenceConstants.P_GENERAL_DEFAULT_TOP_WIDTH);
+		int height = preferences.getInt(IPreferenceConstants.P_GENERAL_DEFAULT_TOP_HEIGHT);
+		return new Dimension(width, height);
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/UseModelIfNotAlready.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/UseModelIfNotAlready.java
index 9e074d154..9cc2afc8e 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/UseModelIfNotAlready.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/UseModelIfNotAlready.java
@@ -27,5 +27,5 @@
 @Retention(RetentionPolicy.RUNTIME)
 @Target(ElementType.TYPE)
 public @interface UseModelIfNotAlready {
-  Class<?> value();
+	Class<?> value();
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/XmlLoadingContext.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/XmlLoadingContext.java
index 81d6b2949..cc97cffea 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/XmlLoadingContext.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/XmlLoadingContext.java
@@ -30,89 +30,89 @@
  * @coverage XML.model
  */
 public final class XmlLoadingContext implements ILoadingContext {
-  private final EditorContext m_editorContext;
+	private final EditorContext m_editorContext;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public XmlLoadingContext(EditorContext editorContext) {
-    m_editorContext = editorContext;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public XmlLoadingContext(EditorContext editorContext) {
+		m_editorContext = editorContext;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getToolkitId() {
-    return m_editorContext.getToolkit().getId();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getToolkitId() {
+		return m_editorContext.getToolkit().getId();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Resources
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public URL getResource(String name) throws Exception {
-    // try editor class loader
-    {
-      URL resource = m_editorContext.getClassLoader().getResource(name);
-      if (resource != null) {
-        return resource;
-      }
-    }
-    // try "wbp-meta" of IJavaProject
-    {
-      URL resource = getResource(m_editorContext.getJavaProject(), name);
-      if (resource != null) {
-        return resource;
-      }
-    }
-    // not found
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Resources
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public URL getResource(String name) throws Exception {
+		// try editor class loader
+		{
+			URL resource = m_editorContext.getClassLoader().getResource(name);
+			if (resource != null) {
+				return resource;
+			}
+		}
+		// try "wbp-meta" of IJavaProject
+		{
+			URL resource = getResource(m_editorContext.getJavaProject(), name);
+			if (resource != null) {
+				return resource;
+			}
+		}
+		// not found
+		return null;
+	}
 
-  @Override
-  public List<IDescriptionVersionsProvider> getDescriptionVersionsProviders() {
-    return m_editorContext.getDescriptionVersionsProviders();
-  }
+	@Override
+	public List<IDescriptionVersionsProvider> getDescriptionVersionsProviders() {
+		return m_editorContext.getDescriptionVersionsProviders();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Global values
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final Map<String, Object> m_globalMap = Maps.newHashMap();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Global values
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final Map<String, Object> m_globalMap = Maps.newHashMap();
 
-  @Override
-  public Object getGlobalValue(String key) {
-    return m_globalMap.get(key);
-  }
+	@Override
+	public Object getGlobalValue(String key) {
+		return m_globalMap.get(key);
+	}
 
-  @Override
-  public void putGlobalValue(String key, Object value) {
-    m_globalMap.put(key, value);
-  }
+	@Override
+	public void putGlobalValue(String key, Object value) {
+		m_globalMap.put(key, value);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link URL} with <code>*.wbp-component.xml</code> file for given name, in
-   *         {@link IJavaProject} itself or any required project.
-   */
-  private static URL getResource(IJavaProject javaProject, String name) throws Exception {
-    List<IFile> files = ProjectUtils.findFiles(javaProject, "wbp-meta/" + name);
-    if (!files.isEmpty()) {
-      IFile file = files.get(0);
-      return file.getLocation().toFile().toURI().toURL();
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link URL} with <code>*.wbp-component.xml</code> file for given name, in
+	 *         {@link IJavaProject} itself or any required project.
+	 */
+	private static URL getResource(IJavaProject javaProject, String name) throws Exception {
+		List<IFile> files = ProjectUtils.findFiles(javaProject, "wbp-meta/" + name);
+		if (!files.isEmpty()) {
+			IFile file = files.get(0);
+			return file.getLocation().toFile().toURI().toURL();
+		}
+		return null;
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/XmlMenuMenuObject.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/XmlMenuMenuObject.java
index 710d9fad8..6324c7c99 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/XmlMenuMenuObject.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/XmlMenuMenuObject.java
@@ -22,28 +22,28 @@
  * @coverage XML.model
  */
 public abstract class XmlMenuMenuObject extends AbstractMenuMenuObject {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public XmlMenuMenuObject(XmlObjectInfo component) {
-    super(component);
-    m_component.addBroadcastListener(new ObjectInfoDelete() {
-      private int m_level = 0;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public XmlMenuMenuObject(XmlObjectInfo component) {
+		super(component);
+		m_component.addBroadcastListener(new ObjectInfoDelete() {
+			private int m_level = 0;
 
-      @Override
-      public void before(ObjectInfo parent, ObjectInfo child) throws Exception {
-        if (m_level == 0 && isRootFor(child)) {
-          fireDeleteListeners(child);
-        }
-        m_level++;
-      }
+			@Override
+			public void before(ObjectInfo parent, ObjectInfo child) throws Exception {
+				if (m_level == 0 && isRootFor(child)) {
+					fireDeleteListeners(child);
+				}
+				m_level++;
+			}
 
-      @Override
-      public void after(ObjectInfo parent, ObjectInfo child) throws Exception {
-        m_level--;
-      }
-    });
-  }
+			@Override
+			public void after(ObjectInfo parent, ObjectInfo child) throws Exception {
+				m_level--;
+			}
+		});
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/XmlObjectInfo.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/XmlObjectInfo.java
index 4e9d99850..f4a07819c 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/XmlObjectInfo.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/XmlObjectInfo.java
@@ -50,408 +50,408 @@
  * @coverage XML.model
  */
 public class XmlObjectInfo extends ObjectInfo implements HasSourcePosition {
-  /**
-   * We mark components that user drops from palette with this flag to be able distinguish them from
-   * objects that created as consequence of user operation.
-   */
-  public static final String FLAG_MANUAL_COMPONENT = "manuallyCreatedComponent";
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance fields
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final EditorContext m_context;
-  private final ComponentDescription m_description;
-  private CreationSupport m_creationSupport;
-  private Object m_object;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public XmlObjectInfo(EditorContext context,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    m_context = context;
-    m_description = description;
-    m_creationSupport = creationSupport;
-    setBroadcastSupport(context.getBroadcastSupport());
-    m_creationSupport.setObject(this);
-    // properties
-    {
-      Class<?> componentClass = description.getComponentClass();
-      if (componentClass == null) {
-        m_componentClassProperty = null;
-        m_eventsProperty = null;
-      } else {
-        IJavaProject javaProject = context.getJavaProject();
-        m_componentClassProperty = new ComponentClassProperty(javaProject, componentClass);
-        m_eventsProperty = new EventsProperty(this);
-      }
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public IObjectPresentation getPresentation() {
-    return new XmlObjectPresentation(this);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link EditorState}.
-   */
-  public EditorContext getContext() {
-    return m_context;
-  }
-
-  /**
-   * @return the {@link ComponentDescription}.
-   */
-  public final ComponentDescription getDescription() {
-    return m_description;
-  }
-
-  /**
-   * @return the {@link CreationSupport}.
-   */
-  public final CreationSupport getCreationSupport() {
-    return m_creationSupport;
-  }
-
-  /**
-   * Sets new {@link CreationSupport}.
-   * <p>
-   * This rare operation, for example we use it to "materialize" implicit object.
-   */
-  public final void setCreationSupport(CreationSupport creationSupport) throws Exception {
-    m_creationSupport = creationSupport;
-    m_creationSupport.setObject(this);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // XML hierarchy
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link XmlObjectInfo} parent.
-   */
-  public final XmlObjectInfo getParentXML() {
-    return (XmlObjectInfo) getParent();
-  }
-
-  /**
-   * @return the {@link XmlObjectInfo} root.
-   */
-  public final XmlObjectInfo getRootXML() {
-    return (XmlObjectInfo) getRoot();
-  }
-
-  /**
-   * @return the list of {@link XmlObjectInfo} children.
-   */
-  public final List<XmlObjectInfo> getChildrenXML() {
-    return getChildren(XmlObjectInfo.class);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // HasSourcePosition
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public int getSourcePosition() {
-    return getCreationSupport().getElement().getOffset();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Properties
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private List<GenericProperty> m_descriptionBasedProperties;
-  private final EventsProperty m_eventsProperty;
-  private final ComponentClassProperty m_componentClassProperty;
-
-  @Override
-  protected List<Property> getPropertyList() throws Exception {
-    List<Property> properties = Lists.newArrayList();
-    // add description based properties
-    if (m_descriptionBasedProperties == null) {
-      m_descriptionBasedProperties = Lists.newArrayList();
-      for (GenericPropertyDescription description : getDescription().getProperties()) {
-        GenericProperty property = new GenericPropertyImpl(this, description);
-        m_descriptionBasedProperties.add(property);
-      }
-    }
-    properties.addAll(m_descriptionBasedProperties);
-    // add class property
-    if (m_componentClassProperty != null) {
-      properties.add(m_componentClassProperty);
-    }
-    // add events (only if there are events)
-    if (PropertyUtils.getChildren(m_eventsProperty).length != 0) {
-      properties.add(m_eventsProperty);
-    }
-    // add hierarchy properties
-    getBroadcast(ObjectInfoAddProperties.class).invoke(this, properties);
-    getBroadcast(XmlObjectAddProperties.class).invoke(this, properties);
-    // return properties
-    return properties;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Life cycle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void saveEdit() throws Exception {
-    m_context.commit();
-  }
-
-  /**
-   * This method is invoked as response on {@link ObjectEventListener#dispose()}, i.e. when we close
-   * editor and dispose this model hierarchy.
-   */
-  protected void onHierarchyDispose() throws Exception {
-    if (isRoot()) {
-      m_context.dispose();
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private boolean m_objectReadySent = false;
-
-  /**
-   * @return the {@link Object} created for this {@link XmlObjectInfo}.
-   */
-  public final Object getObject() {
-    return m_object;
-  }
-
-  /**
-   * Sets the {@link Object} created for this {@link XmlObjectInfo}.
-   */
-  public final void setObject(Object object) throws Exception {
-    m_object = object;
-    // send "ready" to description
-    if (!isObjectReadySent()) {
-      setObjectReadySent(true);
-      m_description.visit(this, AbstractDescription.STATE_OBJECT_READY);
-    }
-    // initialize
-    if (!m_initialized) {
-      initialize();
-    }
-    // notify
-    getBroadcast(XmlObjectSetObjectAfter.class).invoke(this, m_object);
-  }
-
-  /**
-   * @return the {@link XmlObjectInfo} with same object as given.
-   */
-  public final XmlObjectInfo getChildByObject(final Object o) {
-    if (o == null) {
-      return null;
-    }
-    if (o == m_object) {
-      return this;
-    }
-    for (ObjectInfo child : getChildren()) {
-      if (child instanceof XmlObjectInfo) {
-        XmlObjectInfo xmlChild = (XmlObjectInfo) child;
-        XmlObjectInfo result = xmlChild.getChildByObject(o);
-        if (result != null) {
-          return result;
-        }
-      }
-    }
-    return null;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Initializing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Is <code>true</code> if this {@link XmlObjectInfo} already initialized. We check this flag in
-   * {@link #setObject(Object)} and do initialization if needed.
-   */
-  private boolean m_initialized;
-
-  /**
-   * Initializes newly created {@link XmlObjectInfo} (it should have "live" object). This is good
-   * place to create any exposed or implicit components.
-   */
-  protected void initialize() throws Exception {
-    m_initialized = true;
-    createExposedChildren();
-    // external participators
-    {
-      List<IXMLObjectInitializationParticipator> participators =
-          ExternalFactoriesHelper.getElementsInstances(
-              IXMLObjectInitializationParticipator.class,
-              "org.eclipse.wb.core.xml.initializationParticipators",
-              "participator");
-      for (IXMLObjectInitializationParticipator participator : participators) {
-        participator.process(this);
-      }
-    }
-  }
-
-  /**
-   * Adds any exposed components as direct or indirect children of this {@link XmlObjectInfo}.
-   */
-  protected void createExposedChildren() throws Exception {
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Attributes
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final Map<String, Object> m_attributeValues = Maps.newHashMap();
-
-  /**
-   * Registers value for attribute during rendering. Resolves the attribute (adds namespace
-   * qualifier if applicable).
-   */
-  public final void registerAttributeValue(String attribute, Object value) {
-    m_attributeValues.put(attribute, value);
-  }
-
-  /**
-   * @return the attribute value, remembered earlier during rendering. Value <code>null</code> is
-   *         just value, not flag that there are no value. If no value for attribute, then
-   *         {@link Property#UNKNOWN_VALUE} will be returned.
-   */
-  public final Object getAttributeValue(String attribute) {
-    if (m_attributeValues.containsKey(attribute)) {
-      return m_attributeValues.get(attribute);
-    }
-    return Property.UNKNOWN_VALUE;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Attributes raw
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the underlying {@link DocumentElement}.
-   */
-  public final DocumentElement getElement() {
-    return getCreationSupport().getElement();
-  }
-
-  /**
-   * @return the raw attribute value, same as {@link DocumentElement#getAttribute(String)}.
-   */
-  public String getAttribute(String name) {
-    return getElement().getAttribute(name);
-  }
-
-  /**
-   * Sets the raw attribute value, same as {@link DocumentElement#setAttribute(String, String)}.
-   */
-  public void setAttribute(String name, String value) {
-    getElement().setAttribute(name, value);
-  }
-
-  /**
-   * Removes raw attribute from {@link DocumentElement}.
-   */
-  public void removeAttribute(String name) {
-    getElement().setAttribute(name, null);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void refresh_dispose() throws Exception {
-    m_object = null;
-    m_attributeValues.clear();
-    setObjectReadySent(false);
-    super.refresh_dispose();
-  }
-
-  @Override
-  protected void refresh_afterCreate() throws Exception {
-    super.refresh_afterCreate();
-    XmlObjectUtils.executeScriptParameter(this, "refresh_afterCreate");
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Print
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    return getCreationSupport().toString();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Delete
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean canDelete() {
-    // check if CreationSupport can delete
-    if (!m_creationSupport.canDelete()) {
-      return false;
-    }
-    // OK
-    return true;
-  }
-
-  @Override
-  public void delete() throws Exception {
-    final ObjectInfo parent = getParent();
-    ObjectInfo hierarchyObject = parent != null ? parent : this;
-    ExecutionUtils.run(hierarchyObject, new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        putArbitraryValue(FLAG_DELETING, Boolean.TRUE);
-        try {
-          // broadcast "before"
-          getBroadcast(ObjectInfoDelete.class).before(parent, XmlObjectInfo.this);
-          // delete creation
-          m_creationSupport.delete();
-          // broadcast "after"
-          getBroadcast(ObjectInfoDelete.class).after(parent, XmlObjectInfo.this);
-        } finally {
-          removeArbitraryValue(FLAG_DELETING);
-        }
-      }
-    });
-  }
-
-  public final void setObjectReadySent(boolean value) {
-    m_objectReadySent = value;
-  }
-
-  public final boolean isObjectReadySent() {
-    return m_objectReadySent;
-  }
+	/**
+	 * We mark components that user drops from palette with this flag to be able distinguish them from
+	 * objects that created as consequence of user operation.
+	 */
+	public static final String FLAG_MANUAL_COMPONENT = "manuallyCreatedComponent";
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance fields
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final EditorContext m_context;
+	private final ComponentDescription m_description;
+	private CreationSupport m_creationSupport;
+	private Object m_object;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public XmlObjectInfo(EditorContext context,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		m_context = context;
+		m_description = description;
+		m_creationSupport = creationSupport;
+		setBroadcastSupport(context.getBroadcastSupport());
+		m_creationSupport.setObject(this);
+		// properties
+		{
+			Class<?> componentClass = description.getComponentClass();
+			if (componentClass == null) {
+				m_componentClassProperty = null;
+				m_eventsProperty = null;
+			} else {
+				IJavaProject javaProject = context.getJavaProject();
+				m_componentClassProperty = new ComponentClassProperty(javaProject, componentClass);
+				m_eventsProperty = new EventsProperty(this);
+			}
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public IObjectPresentation getPresentation() {
+		return new XmlObjectPresentation(this);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link EditorState}.
+	 */
+	public EditorContext getContext() {
+		return m_context;
+	}
+
+	/**
+	 * @return the {@link ComponentDescription}.
+	 */
+	public final ComponentDescription getDescription() {
+		return m_description;
+	}
+
+	/**
+	 * @return the {@link CreationSupport}.
+	 */
+	public final CreationSupport getCreationSupport() {
+		return m_creationSupport;
+	}
+
+	/**
+	 * Sets new {@link CreationSupport}.
+	 * <p>
+	 * This rare operation, for example we use it to "materialize" implicit object.
+	 */
+	public final void setCreationSupport(CreationSupport creationSupport) throws Exception {
+		m_creationSupport = creationSupport;
+		m_creationSupport.setObject(this);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// XML hierarchy
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link XmlObjectInfo} parent.
+	 */
+	public final XmlObjectInfo getParentXML() {
+		return (XmlObjectInfo) getParent();
+	}
+
+	/**
+	 * @return the {@link XmlObjectInfo} root.
+	 */
+	public final XmlObjectInfo getRootXML() {
+		return (XmlObjectInfo) getRoot();
+	}
+
+	/**
+	 * @return the list of {@link XmlObjectInfo} children.
+	 */
+	public final List<XmlObjectInfo> getChildrenXML() {
+		return getChildren(XmlObjectInfo.class);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// HasSourcePosition
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public int getSourcePosition() {
+		return getCreationSupport().getElement().getOffset();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Properties
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private List<GenericProperty> m_descriptionBasedProperties;
+	private final EventsProperty m_eventsProperty;
+	private final ComponentClassProperty m_componentClassProperty;
+
+	@Override
+	protected List<Property> getPropertyList() throws Exception {
+		List<Property> properties = Lists.newArrayList();
+		// add description based properties
+		if (m_descriptionBasedProperties == null) {
+			m_descriptionBasedProperties = Lists.newArrayList();
+			for (GenericPropertyDescription description : getDescription().getProperties()) {
+				GenericProperty property = new GenericPropertyImpl(this, description);
+				m_descriptionBasedProperties.add(property);
+			}
+		}
+		properties.addAll(m_descriptionBasedProperties);
+		// add class property
+		if (m_componentClassProperty != null) {
+			properties.add(m_componentClassProperty);
+		}
+		// add events (only if there are events)
+		if (PropertyUtils.getChildren(m_eventsProperty).length != 0) {
+			properties.add(m_eventsProperty);
+		}
+		// add hierarchy properties
+		getBroadcast(ObjectInfoAddProperties.class).invoke(this, properties);
+		getBroadcast(XmlObjectAddProperties.class).invoke(this, properties);
+		// return properties
+		return properties;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Life cycle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void saveEdit() throws Exception {
+		m_context.commit();
+	}
+
+	/**
+	 * This method is invoked as response on {@link ObjectEventListener#dispose()}, i.e. when we close
+	 * editor and dispose this model hierarchy.
+	 */
+	protected void onHierarchyDispose() throws Exception {
+		if (isRoot()) {
+			m_context.dispose();
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private boolean m_objectReadySent = false;
+
+	/**
+	 * @return the {@link Object} created for this {@link XmlObjectInfo}.
+	 */
+	public final Object getObject() {
+		return m_object;
+	}
+
+	/**
+	 * Sets the {@link Object} created for this {@link XmlObjectInfo}.
+	 */
+	public final void setObject(Object object) throws Exception {
+		m_object = object;
+		// send "ready" to description
+		if (!isObjectReadySent()) {
+			setObjectReadySent(true);
+			m_description.visit(this, AbstractDescription.STATE_OBJECT_READY);
+		}
+		// initialize
+		if (!m_initialized) {
+			initialize();
+		}
+		// notify
+		getBroadcast(XmlObjectSetObjectAfter.class).invoke(this, m_object);
+	}
+
+	/**
+	 * @return the {@link XmlObjectInfo} with same object as given.
+	 */
+	public final XmlObjectInfo getChildByObject(final Object o) {
+		if (o == null) {
+			return null;
+		}
+		if (o == m_object) {
+			return this;
+		}
+		for (ObjectInfo child : getChildren()) {
+			if (child instanceof XmlObjectInfo) {
+				XmlObjectInfo xmlChild = (XmlObjectInfo) child;
+				XmlObjectInfo result = xmlChild.getChildByObject(o);
+				if (result != null) {
+					return result;
+				}
+			}
+		}
+		return null;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Initializing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Is <code>true</code> if this {@link XmlObjectInfo} already initialized. We check this flag in
+	 * {@link #setObject(Object)} and do initialization if needed.
+	 */
+	private boolean m_initialized;
+
+	/**
+	 * Initializes newly created {@link XmlObjectInfo} (it should have "live" object). This is good
+	 * place to create any exposed or implicit components.
+	 */
+	protected void initialize() throws Exception {
+		m_initialized = true;
+		createExposedChildren();
+		// external participators
+		{
+			List<IXMLObjectInitializationParticipator> participators =
+					ExternalFactoriesHelper.getElementsInstances(
+							IXMLObjectInitializationParticipator.class,
+							"org.eclipse.wb.core.xml.initializationParticipators",
+							"participator");
+			for (IXMLObjectInitializationParticipator participator : participators) {
+				participator.process(this);
+			}
+		}
+	}
+
+	/**
+	 * Adds any exposed components as direct or indirect children of this {@link XmlObjectInfo}.
+	 */
+	protected void createExposedChildren() throws Exception {
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Attributes
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final Map<String, Object> m_attributeValues = Maps.newHashMap();
+
+	/**
+	 * Registers value for attribute during rendering. Resolves the attribute (adds namespace
+	 * qualifier if applicable).
+	 */
+	public final void registerAttributeValue(String attribute, Object value) {
+		m_attributeValues.put(attribute, value);
+	}
+
+	/**
+	 * @return the attribute value, remembered earlier during rendering. Value <code>null</code> is
+	 *         just value, not flag that there are no value. If no value for attribute, then
+	 *         {@link Property#UNKNOWN_VALUE} will be returned.
+	 */
+	public final Object getAttributeValue(String attribute) {
+		if (m_attributeValues.containsKey(attribute)) {
+			return m_attributeValues.get(attribute);
+		}
+		return Property.UNKNOWN_VALUE;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Attributes raw
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the underlying {@link DocumentElement}.
+	 */
+	public final DocumentElement getElement() {
+		return getCreationSupport().getElement();
+	}
+
+	/**
+	 * @return the raw attribute value, same as {@link DocumentElement#getAttribute(String)}.
+	 */
+	public String getAttribute(String name) {
+		return getElement().getAttribute(name);
+	}
+
+	/**
+	 * Sets the raw attribute value, same as {@link DocumentElement#setAttribute(String, String)}.
+	 */
+	public void setAttribute(String name, String value) {
+		getElement().setAttribute(name, value);
+	}
+
+	/**
+	 * Removes raw attribute from {@link DocumentElement}.
+	 */
+	public void removeAttribute(String name) {
+		getElement().setAttribute(name, null);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void refresh_dispose() throws Exception {
+		m_object = null;
+		m_attributeValues.clear();
+		setObjectReadySent(false);
+		super.refresh_dispose();
+	}
+
+	@Override
+	protected void refresh_afterCreate() throws Exception {
+		super.refresh_afterCreate();
+		XmlObjectUtils.executeScriptParameter(this, "refresh_afterCreate");
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Print
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		return getCreationSupport().toString();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Delete
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean canDelete() {
+		// check if CreationSupport can delete
+		if (!m_creationSupport.canDelete()) {
+			return false;
+		}
+		// OK
+		return true;
+	}
+
+	@Override
+	public void delete() throws Exception {
+		final ObjectInfo parent = getParent();
+		ObjectInfo hierarchyObject = parent != null ? parent : this;
+		ExecutionUtils.run(hierarchyObject, new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				putArbitraryValue(FLAG_DELETING, Boolean.TRUE);
+				try {
+					// broadcast "before"
+					getBroadcast(ObjectInfoDelete.class).before(parent, XmlObjectInfo.this);
+					// delete creation
+					m_creationSupport.delete();
+					// broadcast "after"
+					getBroadcast(ObjectInfoDelete.class).after(parent, XmlObjectInfo.this);
+				} finally {
+					removeArbitraryValue(FLAG_DELETING);
+				}
+			}
+		});
+	}
+
+	public final void setObjectReadySent(boolean value) {
+		m_objectReadySent = value;
+	}
+
+	public final boolean isObjectReadySent() {
+		return m_objectReadySent;
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/XmlObjectPresentation.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/XmlObjectPresentation.java
index 81e0f3590..b8ac4ffa5 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/XmlObjectPresentation.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/XmlObjectPresentation.java
@@ -21,30 +21,30 @@
  * @coverage XML.model
  */
 public class XmlObjectPresentation extends DefaultObjectPresentation {
-  private final XmlObjectInfo m_object;
+	private final XmlObjectInfo m_object;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public XmlObjectPresentation(XmlObjectInfo object) {
-    super(object);
-    m_object = object;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public XmlObjectPresentation(XmlObjectInfo object) {
+		super(object);
+		m_object = object;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Image getIcon() throws Exception {
-    return m_object.getDescription().getIcon();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Image getIcon() throws Exception {
+		return m_object.getDescription().getIcon();
+	}
 
-  @Override
-  public String getText() throws Exception {
-    return m_object.getCreationSupport().getTitle();
-  }
+	@Override
+	public String getText() throws Exception {
+		return m_object.getCreationSupport().getTitle();
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/XmlObjectRootProcessor.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/XmlObjectRootProcessor.java
index ac99b264d..cd1cecbbe 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/XmlObjectRootProcessor.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/XmlObjectRootProcessor.java
@@ -29,96 +29,96 @@
  * @coverage XML.model
  */
 public final class XmlObjectRootProcessor implements IRootProcessor {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final IRootProcessor INSTANCE = new XmlObjectRootProcessor();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final IRootProcessor INSTANCE = new XmlObjectRootProcessor();
 
-  private XmlObjectRootProcessor() {
-  }
+	private XmlObjectRootProcessor() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IRootProcessor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void process(final XmlObjectInfo root) throws Exception {
-    root.addBroadcastListener(new ObjectEventListener() {
-      @Override
-      public void dispose() throws Exception {
-        root.onHierarchyDispose();
-      }
-    });
-    // visibility in tree/GEF
-    root.addBroadcastListener(new ObjectInfoChildTree() {
-      @Override
-      public void invoke(ObjectInfo object, boolean[] visible) throws Exception {
-        if (object instanceof XmlObjectInfo) {
-          XmlObjectInfo xObject = (XmlObjectInfo) object;
-          String visibilityTreeString = XmlObjectUtils.getParameter(xObject, "visible.inTree");
-          if (visibilityTreeString != null) {
-            visible[0] = Boolean.parseBoolean(visibilityTreeString);
-          } else {
-            String visibilityString = XmlObjectUtils.getParameter(xObject, "visible");
-            if (visibilityString != null) {
-              visible[0] = Boolean.parseBoolean(visibilityString);
-            }
-          }
-        }
-      }
-    });
-    root.addBroadcastListener(new ObjectInfoChildGraphical() {
-      @Override
-      public void invoke(ObjectInfo object, boolean[] visible) throws Exception {
-        if (object instanceof XmlObjectInfo) {
-          XmlObjectInfo xObject = (XmlObjectInfo) object;
-          String visibilityGraphString =
-              XmlObjectUtils.getParameter(xObject, "visible.inGraphical");
-          if (visibilityGraphString != null) {
-            visible[0] = Boolean.parseBoolean(visibilityGraphString);
-          } else {
-            String visibilityString = XmlObjectUtils.getParameter(xObject, "visible");
-            if (visibilityString != null) {
-              visible[0] = Boolean.parseBoolean(visibilityString);
-            }
-          }
-        }
-      }
-    });
-    // text decoration
-    root.addBroadcastListener(new ObjectInfoPresentationDecorateText() {
-      @Override
-      public void invoke(ObjectInfo object, String[] text) throws Exception {
-        if (object instanceof XmlObjectInfo) {
-          XmlObjectInfo xObject = (XmlObjectInfo) object;
-          IPreferenceStore preferences = xObject.getDescription().getToolkit().getPreferences();
-          if (preferences.getBoolean(IPreferenceConstants.P_GENERAL_TEXT_SUFFIX)) {
-            broadcast_presentation_decorateText(xObject, text);
-          }
-        }
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IRootProcessor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void process(final XmlObjectInfo root) throws Exception {
+		root.addBroadcastListener(new ObjectEventListener() {
+			@Override
+			public void dispose() throws Exception {
+				root.onHierarchyDispose();
+			}
+		});
+		// visibility in tree/GEF
+		root.addBroadcastListener(new ObjectInfoChildTree() {
+			@Override
+			public void invoke(ObjectInfo object, boolean[] visible) throws Exception {
+				if (object instanceof XmlObjectInfo) {
+					XmlObjectInfo xObject = (XmlObjectInfo) object;
+					String visibilityTreeString = XmlObjectUtils.getParameter(xObject, "visible.inTree");
+					if (visibilityTreeString != null) {
+						visible[0] = Boolean.parseBoolean(visibilityTreeString);
+					} else {
+						String visibilityString = XmlObjectUtils.getParameter(xObject, "visible");
+						if (visibilityString != null) {
+							visible[0] = Boolean.parseBoolean(visibilityString);
+						}
+					}
+				}
+			}
+		});
+		root.addBroadcastListener(new ObjectInfoChildGraphical() {
+			@Override
+			public void invoke(ObjectInfo object, boolean[] visible) throws Exception {
+				if (object instanceof XmlObjectInfo) {
+					XmlObjectInfo xObject = (XmlObjectInfo) object;
+					String visibilityGraphString =
+							XmlObjectUtils.getParameter(xObject, "visible.inGraphical");
+					if (visibilityGraphString != null) {
+						visible[0] = Boolean.parseBoolean(visibilityGraphString);
+					} else {
+						String visibilityString = XmlObjectUtils.getParameter(xObject, "visible");
+						if (visibilityString != null) {
+							visible[0] = Boolean.parseBoolean(visibilityString);
+						}
+					}
+				}
+			}
+		});
+		// text decoration
+		root.addBroadcastListener(new ObjectInfoPresentationDecorateText() {
+			@Override
+			public void invoke(ObjectInfo object, String[] text) throws Exception {
+				if (object instanceof XmlObjectInfo) {
+					XmlObjectInfo xObject = (XmlObjectInfo) object;
+					IPreferenceStore preferences = xObject.getDescription().getToolkit().getPreferences();
+					if (preferences.getBoolean(IPreferenceConstants.P_GENERAL_TEXT_SUFFIX)) {
+						broadcast_presentation_decorateText(xObject, text);
+					}
+				}
+			}
+		});
+	}
 
-  /**
-   * Adds "text" property prefix to the given presentation text of this {@link ObjectInfo}.
-   */
-  private static void broadcast_presentation_decorateText(XmlObjectInfo object, String[] text)
-      throws Exception {
-    for (Property property : object.getProperties()) {
-      if (property instanceof GenericPropertyImpl) {
-        GenericPropertyImpl genericProperty = (GenericPropertyImpl) property;
-        if (genericProperty.hasTrueTag("isText")
-            && genericProperty.getObject() == object
-            && genericProperty.isModified()) {
-          String suffix = (String) genericProperty.getValue();
-          text[0] = text[0] + " - \"" + suffix + "\"";
-          break;
-        }
-      }
-    }
-  }
+	/**
+	 * Adds "text" property prefix to the given presentation text of this {@link ObjectInfo}.
+	 */
+	private static void broadcast_presentation_decorateText(XmlObjectInfo object, String[] text)
+			throws Exception {
+		for (Property property : object.getProperties()) {
+			if (property instanceof GenericPropertyImpl) {
+				GenericPropertyImpl genericProperty = (GenericPropertyImpl) property;
+				if (genericProperty.hasTrueTag("isText")
+						&& genericProperty.getObject() == object
+						&& genericProperty.isModified()) {
+					String suffix = (String) genericProperty.getValue();
+					text[0] = text[0] + " - \"" + suffix + "\"";
+					break;
+				}
+			}
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/association/Association.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/association/Association.java
index 521015d11..6f0499561 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/association/Association.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/association/Association.java
@@ -21,21 +21,21 @@
  * @coverage XML.model.association
  */
 public abstract class Association {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds {@link DocumentElement} of new {@link XmlObjectInfo}.
-   */
-  public abstract void add(XmlObjectInfo object, ElementTarget target) throws Exception;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds {@link DocumentElement} of new {@link XmlObjectInfo}.
+	 */
+	public abstract void add(XmlObjectInfo object, ElementTarget target) throws Exception;
 
-  /**
-   * Moves {@link DocumentElement} of existing {@link XmlObjectInfo}.
-   */
-  public abstract void move(XmlObjectInfo object,
-      ElementTarget target,
-      XmlObjectInfo oldParent,
-      XmlObjectInfo newParent) throws Exception;
+	/**
+	 * Moves {@link DocumentElement} of existing {@link XmlObjectInfo}.
+	 */
+	public abstract void move(XmlObjectInfo object,
+			ElementTarget target,
+			XmlObjectInfo oldParent,
+			XmlObjectInfo newParent) throws Exception;
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/association/Associations.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/association/Associations.java
index a01255e0f..423d29302 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/association/Associations.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/association/Associations.java
@@ -19,35 +19,35 @@
  * @coverage XML.model.association
  */
 public final class Associations {
-  /**
-   * @return the {@link DirectAssociation}.
-   */
-  public static Association direct() {
-    return DirectAssociation.INSTANCE;
-  }
+	/**
+	 * @return the {@link DirectAssociation}.
+	 */
+	public static Association direct() {
+		return DirectAssociation.INSTANCE;
+	}
 
-  /**
-   * @return the {@link PropertyAssociation}.
-   */
-  public static Association property(String property) {
-    return new PropertyAssociation(property);
-  }
+	/**
+	 * @return the {@link PropertyAssociation}.
+	 */
+	public static Association property(String property) {
+		return new PropertyAssociation(property);
+	}
 
-  /**
-   * @return the {@link IntermediateAssociation} without attributes.
-   */
-  public static Association name(String name) {
-    return new IntermediateAssociation(name);
-  }
+	/**
+	 * @return the {@link IntermediateAssociation} without attributes.
+	 */
+	public static Association name(String name) {
+		return new IntermediateAssociation(name);
+	}
 
-  /**
-   * @return the {@link IntermediateAssociation} with attributes.
-   */
-  public static Association intermediate(String name, Map<String, String> attributes) {
-    IntermediateAssociation association = new IntermediateAssociation(name);
-    if (attributes != null && !attributes.isEmpty()) {
-      association.setAttributes(attributes);
-    }
-    return association;
-  }
+	/**
+	 * @return the {@link IntermediateAssociation} with attributes.
+	 */
+	public static Association intermediate(String name, Map<String, String> attributes) {
+		IntermediateAssociation association = new IntermediateAssociation(name);
+		if (attributes != null && !attributes.isEmpty()) {
+			association.setAttributes(attributes);
+		}
+		return association;
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/association/DirectAssociation.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/association/DirectAssociation.java
index 676028c90..02bc863db 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/association/DirectAssociation.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/association/DirectAssociation.java
@@ -22,55 +22,55 @@
  * @coverage XML.model.association
  */
 public class DirectAssociation extends Association {
-  public static final Association INSTANCE = new DirectAssociation();
+	public static final Association INSTANCE = new DirectAssociation();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected DirectAssociation() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected DirectAssociation() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    return "direct";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		return "direct";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void add(XmlObjectInfo object, ElementTarget target) throws Exception {
-    DocumentElement targetElement = target.getElement();
-    int targetIndex = target.getIndex();
-    object.getCreationSupport().addElement(targetElement, targetIndex);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void add(XmlObjectInfo object, ElementTarget target) throws Exception {
+		DocumentElement targetElement = target.getElement();
+		int targetIndex = target.getIndex();
+		object.getCreationSupport().addElement(targetElement, targetIndex);
+	}
 
-  @Override
-  public void move(XmlObjectInfo object,
-      ElementTarget target,
-      XmlObjectInfo oldParent,
-      XmlObjectInfo newParent) throws Exception {
-    DocumentElement objectElement = object.getCreationSupport().getElementMove();
-    DocumentElement elementInOldParent =
-        XmlObjectUtils.getElementInParent(oldParent, objectElement);
-    // move element
-    {
-      DocumentElement targetElement = target.getElement();
-      int targetIndex = target.getIndex();
-      targetElement.moveChild(objectElement, targetIndex);
-    }
-    // remove intermediate element(s)
-    if (objectElement != elementInOldParent) {
-      elementInOldParent.remove();
-    }
-  }
+	@Override
+	public void move(XmlObjectInfo object,
+			ElementTarget target,
+			XmlObjectInfo oldParent,
+			XmlObjectInfo newParent) throws Exception {
+		DocumentElement objectElement = object.getCreationSupport().getElementMove();
+		DocumentElement elementInOldParent =
+				XmlObjectUtils.getElementInParent(oldParent, objectElement);
+		// move element
+		{
+			DocumentElement targetElement = target.getElement();
+			int targetIndex = target.getIndex();
+			targetElement.moveChild(objectElement, targetIndex);
+		}
+		// remove intermediate element(s)
+		if (objectElement != elementInOldParent) {
+			elementInOldParent.remove();
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/association/IntermediateAssociation.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/association/IntermediateAssociation.java
index 54cf77cb7..d33832f4f 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/association/IntermediateAssociation.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/association/IntermediateAssociation.java
@@ -25,100 +25,100 @@
  * @coverage XML.model.association
  */
 public final class IntermediateAssociation extends DirectAssociation {
-  private final String m_name;
-  private Map<String, String> m_attributes;
+	private final String m_name;
+	private Map<String, String> m_attributes;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public IntermediateAssociation(String name) {
-    m_name = name;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public IntermediateAssociation(String name) {
+		m_name = name;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    String s = "inter " + m_name;
-    if (m_attributes != null) {
-      s += " " + m_attributes;
-    }
-    return s;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		String s = "inter " + m_name;
+		if (m_attributes != null) {
+			s += " " + m_attributes;
+		}
+		return s;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets attributes which should be set for new "intermediate" element.
-   */
-  public void setAttributes(Map<String, String> attributes) {
-    m_attributes = attributes;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets attributes which should be set for new "intermediate" element.
+	 */
+	public void setAttributes(Map<String, String> attributes) {
+		m_attributes = attributes;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void add(XmlObjectInfo object, ElementTarget target) throws Exception {
-    target = prepareTarget(target);
-    super.add(object, target);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void add(XmlObjectInfo object, ElementTarget target) throws Exception {
+		target = prepareTarget(target);
+		super.add(object, target);
+	}
 
-  @Override
-  public void move(XmlObjectInfo object,
-      ElementTarget target,
-      XmlObjectInfo oldParent,
-      XmlObjectInfo newParent) throws Exception {
-    // if reorder, move with enclosing element
-    if (newParent == oldParent) {
-      DocumentElement targetElement = target.getElement();
-      int targetIndex = target.getIndex();
-      targetElement.moveChild(object.getElement().getParent(), targetIndex);
-      return;
-    }
-    // create new "intermediate" element
-    target = prepareTarget(target);
-    super.move(object, target, oldParent, newParent);
-  }
+	@Override
+	public void move(XmlObjectInfo object,
+			ElementTarget target,
+			XmlObjectInfo oldParent,
+			XmlObjectInfo newParent) throws Exception {
+		// if reorder, move with enclosing element
+		if (newParent == oldParent) {
+			DocumentElement targetElement = target.getElement();
+			int targetIndex = target.getIndex();
+			targetElement.moveChild(object.getElement().getParent(), targetIndex);
+			return;
+		}
+		// create new "intermediate" element
+		target = prepareTarget(target);
+		super.move(object, target, oldParent, newParent);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private ElementTarget prepareTarget(ElementTarget target) {
-    // prepare "intermediate" element
-    DocumentElement interElement;
-    {
-      DocumentElement targetElement = target.getElement();
-      int targetIndex = target.getIndex();
-      // create "intermediate" element
-      interElement = new DocumentElement();
-      {
-        String tag = m_name;
-        tag = StringUtils.replace(tag, "{parentNS}", targetElement.getTagNS());
-        interElement.setTag(tag);
-      }
-      // add it
-      targetElement.addChild(interElement, targetIndex);
-      // add attributes
-      if (m_attributes != null) {
-        for (Map.Entry<String, String> entry : m_attributes.entrySet()) {
-          interElement.setAttribute(entry.getKey(), entry.getValue());
-        }
-      }
-    }
-    // prepare new target
-    return new ElementTarget(interElement, 0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private ElementTarget prepareTarget(ElementTarget target) {
+		// prepare "intermediate" element
+		DocumentElement interElement;
+		{
+			DocumentElement targetElement = target.getElement();
+			int targetIndex = target.getIndex();
+			// create "intermediate" element
+			interElement = new DocumentElement();
+			{
+				String tag = m_name;
+				tag = StringUtils.replace(tag, "{parentNS}", targetElement.getTagNS());
+				interElement.setTag(tag);
+			}
+			// add it
+			targetElement.addChild(interElement, targetIndex);
+			// add attributes
+			if (m_attributes != null) {
+				for (Map.Entry<String, String> entry : m_attributes.entrySet()) {
+					interElement.setAttribute(entry.getKey(), entry.getValue());
+				}
+			}
+		}
+		// prepare new target
+		return new ElementTarget(interElement, 0);
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/association/OrderAssociation.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/association/OrderAssociation.java
index f662aa9d1..25bab4f06 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/association/OrderAssociation.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/association/OrderAssociation.java
@@ -25,50 +25,50 @@
  * @coverage XML.model.association
  */
 public class OrderAssociation extends Association {
-  public static final Association INSTANCE = new OrderAssociation();
+	public static final Association INSTANCE = new OrderAssociation();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  OrderAssociation() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	OrderAssociation() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    return "order";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		return "order";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void add(XmlObjectInfo object, ElementTarget target) throws Exception {
-    throw new NotImplementedException();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void add(XmlObjectInfo object, ElementTarget target) throws Exception {
+		throw new NotImplementedException();
+	}
 
-  @Override
-  public void move(XmlObjectInfo object,
-      ElementTarget target,
-      XmlObjectInfo oldParent,
-      XmlObjectInfo newParent) throws Exception {
-    Assert.isTrue(newParent == oldParent, "Only reorder is supported.");
-    DocumentElement objectElement = object.getCreationSupport().getElementMove();
-    DocumentElement elementInOldParent =
-        XmlObjectUtils.getElementInParent(oldParent, objectElement);
-    // move element
-    {
-      DocumentElement targetElement = target.getElement();
-      int targetIndex = target.getIndex();
-      targetElement.moveChild(elementInOldParent, targetIndex);
-    }
-  }
+	@Override
+	public void move(XmlObjectInfo object,
+			ElementTarget target,
+			XmlObjectInfo oldParent,
+			XmlObjectInfo newParent) throws Exception {
+		Assert.isTrue(newParent == oldParent, "Only reorder is supported.");
+		DocumentElement objectElement = object.getCreationSupport().getElementMove();
+		DocumentElement elementInOldParent =
+				XmlObjectUtils.getElementInParent(oldParent, objectElement);
+		// move element
+		{
+			DocumentElement targetElement = target.getElement();
+			int targetIndex = target.getIndex();
+			targetElement.moveChild(elementInOldParent, targetIndex);
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/association/PropertyAssociation.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/association/PropertyAssociation.java
index 8e103052a..51aab1968 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/association/PropertyAssociation.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/association/PropertyAssociation.java
@@ -21,65 +21,65 @@
  * @coverage XML.model.association
  */
 public final class PropertyAssociation extends DirectAssociation {
-  private final String m_property;
+	private final String m_property;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public PropertyAssociation(String property) {
-    m_property = property;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public PropertyAssociation(String property) {
+		m_property = property;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    return "property " + m_property;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		return "property " + m_property;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void add(XmlObjectInfo object, ElementTarget target) throws Exception {
-    target = preparePropertyTarget(target);
-    super.add(object, target);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void add(XmlObjectInfo object, ElementTarget target) throws Exception {
+		target = preparePropertyTarget(target);
+		super.add(object, target);
+	}
 
-  @Override
-  public void move(XmlObjectInfo object,
-      ElementTarget target,
-      XmlObjectInfo oldParent,
-      XmlObjectInfo newParent) throws Exception {
-    target = preparePropertyTarget(target);
-    super.move(object, target, oldParent, newParent);
-  }
+	@Override
+	public void move(XmlObjectInfo object,
+			ElementTarget target,
+			XmlObjectInfo oldParent,
+			XmlObjectInfo newParent) throws Exception {
+		target = preparePropertyTarget(target);
+		super.move(object, target, oldParent, newParent);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private ElementTarget preparePropertyTarget(ElementTarget target) {
-    // prepare "property" element
-    DocumentElement propertyElement;
-    {
-      DocumentElement targetElement = target.getElement();
-      int targetIndex = target.getIndex();
-      // create "property" element
-      propertyElement = new DocumentElement();
-      propertyElement.setTag(targetElement.getTag() + "." + m_property);
-      // add it
-      targetElement.addChild(propertyElement, targetIndex);
-    }
-    // prepare new target
-    return new ElementTarget(propertyElement, 0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private ElementTarget preparePropertyTarget(ElementTarget target) {
+		// prepare "property" element
+		DocumentElement propertyElement;
+		{
+			DocumentElement targetElement = target.getElement();
+			int targetIndex = target.getIndex();
+			// create "property" element
+			propertyElement = new DocumentElement();
+			propertyElement.setTag(targetElement.getTag() + "." + m_property);
+			// add it
+			targetElement.addChild(propertyElement, targetIndex);
+		}
+		// prepare new target
+		return new ElementTarget(propertyElement, 0);
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/broadcast/GenericPropertyGetValue.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/broadcast/GenericPropertyGetValue.java
index 27e060869..a62eacd1d 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/broadcast/GenericPropertyGetValue.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/broadcast/GenericPropertyGetValue.java
@@ -25,17 +25,17 @@
  * @coverage XML.model
  */
 public interface GenericPropertyGetValue {
-  /**
-   * Subscribers can use this method to unconditionally return the property value. This is
-   * applicable for cases when property should unconditionally return certain value without using
-   * any expression evaluating related to this property. For example, the property may return value
-   * of another property.
-   *
-   * @param property
-   *          the {@link GenericPropertyImpl} that sends this event.
-   * @param value
-   *          the single element array to return property value. Initially it has <code>null</code>
-   *          value.
-   */
-  void invoke(GenericPropertyImpl property, Object[] value) throws Exception;
+	/**
+	 * Subscribers can use this method to unconditionally return the property value. This is
+	 * applicable for cases when property should unconditionally return certain value without using
+	 * any expression evaluating related to this property. For example, the property may return value
+	 * of another property.
+	 *
+	 * @param property
+	 *          the {@link GenericPropertyImpl} that sends this event.
+	 * @param value
+	 *          the single element array to return property value. Initially it has <code>null</code>
+	 *          value.
+	 */
+	void invoke(GenericPropertyImpl property, Object[] value) throws Exception;
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/broadcast/GenericPropertySetExpression.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/broadcast/GenericPropertySetExpression.java
index 3e4b1cb58..af567786b 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/broadcast/GenericPropertySetExpression.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/broadcast/GenericPropertySetExpression.java
@@ -24,18 +24,18 @@
  * @coverage XML.model
  */
 public interface GenericPropertySetExpression {
-  /**
-   * @param property
-   *          the {@link GenericPropertyImpl} that sends this event.
-   * @param expression
-   *          the single element array with new expression.
-   * @param value
-   *          the single element array with new value, may be {@link Property#UNKNOWN_VALUE}.
-   * @param shouldSet
-   *          the single element array that specifies if expression can be set, subscriber may set
-   *          it to <code>false</code> if it did required modification itself, or thinks that value
-   *          of this property should not be modified at all.
-   */
-  void invoke(GenericPropertyImpl property, String[] expression, Object[] value, boolean[] shouldSet)
-      throws Exception;
+	/**
+	 * @param property
+	 *          the {@link GenericPropertyImpl} that sends this event.
+	 * @param expression
+	 *          the single element array with new expression.
+	 * @param value
+	 *          the single element array with new value, may be {@link Property#UNKNOWN_VALUE}.
+	 * @param shouldSet
+	 *          the single element array that specifies if expression can be set, subscriber may set
+	 *          it to <code>false</code> if it did required modification itself, or thinks that value
+	 *          of this property should not be modified at all.
+	 */
+	void invoke(GenericPropertyImpl property, String[] expression, Object[] value, boolean[] shouldSet)
+			throws Exception;
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/broadcast/GenericPropertySetValue.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/broadcast/GenericPropertySetValue.java
index 889d11b1d..4e6839be9 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/broadcast/GenericPropertySetValue.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/broadcast/GenericPropertySetValue.java
@@ -23,16 +23,16 @@
  * @coverage XML.model
  */
 public interface GenericPropertySetValue {
-  /**
-   * @param property
-   *          the {@link GenericPropertyImpl} that sends this event.
-   * @param value
-   *          the single element array with new value.
-   * @param shouldSetValue
-   *          the single element array that specifies if value can be set, subscriber may set it to
-   *          <code>false</code> if it did required modification itself, or thinks that value of
-   *          this property should not be modified at all.
-   */
-  void invoke(GenericPropertyImpl property, Object[] value, boolean[] shouldSetValue)
-      throws Exception;
+	/**
+	 * @param property
+	 *          the {@link GenericPropertyImpl} that sends this event.
+	 * @param value
+	 *          the single element array with new value.
+	 * @param shouldSetValue
+	 *          the single element array that specifies if value can be set, subscriber may set it to
+	 *          <code>false</code> if it did required modification itself, or thinks that value of
+	 *          this property should not be modified at all.
+	 */
+	void invoke(GenericPropertyImpl property, Object[] value, boolean[] shouldSetValue)
+			throws Exception;
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/broadcast/XmlObjectAdd.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/broadcast/XmlObjectAdd.java
index 87d9926ca..941abac69 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/broadcast/XmlObjectAdd.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/broadcast/XmlObjectAdd.java
@@ -20,15 +20,15 @@
  * @coverage XML.model
  */
 public abstract class XmlObjectAdd {
-  /**
-   * Before {@link XmlObjectInfo} added to its parent.
-   */
-  public void before(ObjectInfo parent, XmlObjectInfo child) throws Exception {
-  }
+	/**
+	 * Before {@link XmlObjectInfo} added to its parent.
+	 */
+	public void before(ObjectInfo parent, XmlObjectInfo child) throws Exception {
+	}
 
-  /**
-   * After {@link XmlObjectInfo} add to its parent.
-   */
-  public void after(ObjectInfo parent, XmlObjectInfo child) throws Exception {
-  }
+	/**
+	 * After {@link XmlObjectInfo} add to its parent.
+	 */
+	public void after(ObjectInfo parent, XmlObjectInfo child) throws Exception {
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/broadcast/XmlObjectAddProperties.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/broadcast/XmlObjectAddProperties.java
index 676537aea..396afda47 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/broadcast/XmlObjectAddProperties.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/broadcast/XmlObjectAddProperties.java
@@ -24,5 +24,5 @@
  * @coverage XML.model
  */
 public interface XmlObjectAddProperties {
-  void invoke(XmlObjectInfo object, List<Property> properties) throws Exception;
+	void invoke(XmlObjectInfo object, List<Property> properties) throws Exception;
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/broadcast/XmlObjectAllProperties.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/broadcast/XmlObjectAllProperties.java
index 11ad05d5e..8131f1ed6 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/broadcast/XmlObjectAllProperties.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/broadcast/XmlObjectAllProperties.java
@@ -26,5 +26,5 @@
  * @coverage XML.model
  */
 public interface XmlObjectAllProperties {
-  void invoke(XmlObjectInfo object, List<Property> properties) throws Exception;
+	void invoke(XmlObjectInfo object, List<Property> properties) throws Exception;
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/broadcast/XmlObjectClipboardCopy.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/broadcast/XmlObjectClipboardCopy.java
index 8e12b9fd7..a64e2f246 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/broadcast/XmlObjectClipboardCopy.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/broadcast/XmlObjectClipboardCopy.java
@@ -25,11 +25,11 @@
  * @coverage XML.model
  */
 public interface XmlObjectClipboardCopy {
-  /**
-   * @param object
-   *          the {@link XmlObjectInfo} that is in process of copying.
-   * @param commands
-   *          the {@link List} of {@link ClipboardCommand}'s to add new commands.
-   */
-  void invoke(XmlObjectInfo object, List<ClipboardCommand> commands) throws Exception;
+	/**
+	 * @param object
+	 *          the {@link XmlObjectInfo} that is in process of copying.
+	 * @param commands
+	 *          the {@link List} of {@link ClipboardCommand}'s to add new commands.
+	 */
+	void invoke(XmlObjectInfo object, List<ClipboardCommand> commands) throws Exception;
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/broadcast/XmlObjectEventListeners.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/broadcast/XmlObjectEventListeners.java
index b24fadb36..5bb224efd 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/broadcast/XmlObjectEventListeners.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/broadcast/XmlObjectEventListeners.java
@@ -22,5 +22,5 @@
  * @coverage XML.model
  */
 public interface XmlObjectEventListeners {
-  void invoke(XmlObjectInfo object, List<AbstractListenerProperty> properties) throws Exception;
+	void invoke(XmlObjectInfo object, List<AbstractListenerProperty> properties) throws Exception;
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/broadcast/XmlObjectMove.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/broadcast/XmlObjectMove.java
index 91953307a..13c8779b4 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/broadcast/XmlObjectMove.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/broadcast/XmlObjectMove.java
@@ -20,17 +20,17 @@
  * @coverage XML.model
  */
 public abstract class XmlObjectMove {
-  /**
-   * Before {@link XmlObjectInfo} moved.
-   */
-  public void before(XmlObjectInfo child, ObjectInfo oldParent, ObjectInfo newParent)
-      throws Exception {
-  }
+	/**
+	 * Before {@link XmlObjectInfo} moved.
+	 */
+	public void before(XmlObjectInfo child, ObjectInfo oldParent, ObjectInfo newParent)
+			throws Exception {
+	}
 
-  /**
-   * After {@link XmlObjectInfo} moved.
-   */
-  public void after(XmlObjectInfo child, ObjectInfo oldParent, ObjectInfo newParent)
-      throws Exception {
-  }
+	/**
+	 * After {@link XmlObjectInfo} moved.
+	 */
+	public void after(XmlObjectInfo child, ObjectInfo oldParent, ObjectInfo newParent)
+			throws Exception {
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/broadcast/XmlObjectResolveTag.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/broadcast/XmlObjectResolveTag.java
index f12cb7e2e..fcde4b74d 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/broadcast/XmlObjectResolveTag.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/broadcast/XmlObjectResolveTag.java
@@ -19,18 +19,18 @@
  * @coverage XML.model
  */
 public interface XmlObjectResolveTag {
-  /**
-   * Fills namespace and tag.
-   *
-   * @param object
-   *          some {@link XmlObjectInfo} in hierarchy.
-   * @param clazz
-   *          the {@link Class} to create namespace/tag for.
-   * @param namespace
-   *          the array with single element, initially <code>null</code>.
-   * @param tag
-   *          the array with single element, initially <code>null</code>.
-   */
-  void invoke(XmlObjectInfo object, Class<?> claz, String[] namespace, String[] tag)
-      throws Exception;
+	/**
+	 * Fills namespace and tag.
+	 *
+	 * @param object
+	 *          some {@link XmlObjectInfo} in hierarchy.
+	 * @param clazz
+	 *          the {@link Class} to create namespace/tag for.
+	 * @param namespace
+	 *          the array with single element, initially <code>null</code>.
+	 * @param tag
+	 *          the array with single element, initially <code>null</code>.
+	 */
+	void invoke(XmlObjectInfo object, Class<?> claz, String[] namespace, String[] tag)
+			throws Exception;
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/broadcast/XmlObjectSetObjectAfter.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/broadcast/XmlObjectSetObjectAfter.java
index 87c6f9735..8d8be5c48 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/broadcast/XmlObjectSetObjectAfter.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/broadcast/XmlObjectSetObjectAfter.java
@@ -22,5 +22,5 @@
  * @coverage XML.model
  */
 public interface XmlObjectSetObjectAfter {
-  void invoke(XmlObjectInfo target, Object o) throws Exception;
+	void invoke(XmlObjectInfo target, Object o) throws Exception;
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/clipboard/ClipboardCommand.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/clipboard/ClipboardCommand.java
index 75ab98e34..567cc0277 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/clipboard/ClipboardCommand.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/clipboard/ClipboardCommand.java
@@ -21,15 +21,15 @@
  * @coverage XML.model.clipboard
  */
 public abstract class ClipboardCommand implements Serializable {
-  private static final long serialVersionUID = 0L;
+	private static final long serialVersionUID = 0L;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Execute
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Executes this {@link ClipboardCommand} in context of its {@link XmlObjectInfo}.
-   */
-  public abstract void execute(XmlObjectInfo object) throws Exception;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Execute
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Executes this {@link ClipboardCommand} in context of its {@link XmlObjectInfo}.
+	 */
+	public abstract void execute(XmlObjectInfo object) throws Exception;
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/clipboard/ComponentInfoMemento.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/clipboard/ComponentInfoMemento.java
index eb92ceb94..507ef2d70 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/clipboard/ComponentInfoMemento.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/clipboard/ComponentInfoMemento.java
@@ -26,82 +26,82 @@
  * @coverage XML.model.clipboard
  */
 public final class ComponentInfoMemento extends XmlObjectMemento {
-  private static final long serialVersionUID = 0L;
-  private final Rectangle m_bounds;
-  private final byte[] m_imageBytes;
-  private transient Image m_image;
+	private static final long serialVersionUID = 0L;
+	private final Rectangle m_bounds;
+	private final byte[] m_imageBytes;
+	private transient Image m_image;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected ComponentInfoMemento(AbstractComponentInfo component) throws Exception {
-    super(component);
-    m_bounds = component.getAbsoluteBounds();
-    // prepare bytes for image
-    {
-      Image image = component.getImage();
-      if (image != null) {
-        m_imageBytes = ImageUtils.getBytesPNG(image);
-      } else {
-        m_imageBytes = null;
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected ComponentInfoMemento(AbstractComponentInfo component) throws Exception {
+		super(component);
+		m_bounds = component.getAbsoluteBounds();
+		// prepare bytes for image
+		{
+			Image image = component.getImage();
+			if (image != null) {
+				m_imageBytes = ImageUtils.getBytesPNG(image);
+			} else {
+				m_imageBytes = null;
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the image of component, recorded from source component.
-   */
-  public Image getImage() {
-    if (m_image == null && m_imageBytes != null) {
-      m_image = new Image(null, new ByteArrayInputStream(m_imageBytes));
-    }
-    return m_image;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the image of component, recorded from source component.
+	 */
+	public Image getImage() {
+		if (m_image == null && m_imageBytes != null) {
+			m_image = new Image(null, new ByteArrayInputStream(m_imageBytes));
+		}
+		return m_image;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Creation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public XmlObjectInfo create(XmlObjectInfo existingHierarchyObject) throws Exception {
-    AbstractComponentInfo component = (AbstractComponentInfo) super.create(existingHierarchyObject);
-    component.setBounds(m_bounds);
-    component.setModelBounds(m_bounds);
-    return component;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Creation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public XmlObjectInfo create(XmlObjectInfo existingHierarchyObject) throws Exception {
+		AbstractComponentInfo component = (AbstractComponentInfo) super.create(existingHierarchyObject);
+		component.setBounds(m_bounds);
+		component.setModelBounds(m_bounds);
+		return component;
+	}
 
-  @Override
-  public void apply() throws Exception {
-    super.apply();
-    // now operation in finished and we can dispose image
-    if (m_image != null) {
-      m_image.dispose();
-    }
-  }
+	@Override
+	public void apply() throws Exception {
+		super.apply();
+		// now operation in finished and we can dispose image
+		if (m_image != null) {
+			m_image.dispose();
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the associated {@link Image} of given <code>component</code> if this component has the
-   *         associated {@link ComponentInfoMemento}. Otherwise returns <code>null</code>.
-   */
-  public static Image getImage(AbstractComponentInfo component) {
-    ComponentInfoMemento memento =
-        (ComponentInfoMemento) component.getArbitraryValue(XmlObjectMemento.KEY_MEMENTO);
-    if (memento != null) {
-      return memento.getImage();
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the associated {@link Image} of given <code>component</code> if this component has the
+	 *         associated {@link ComponentInfoMemento}. Otherwise returns <code>null</code>.
+	 */
+	public static Image getImage(AbstractComponentInfo component) {
+		ComponentInfoMemento memento =
+				(ComponentInfoMemento) component.getArbitraryValue(XmlObjectMemento.KEY_MEMENTO);
+		if (memento != null) {
+			return memento.getImage();
+		}
+		return null;
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/clipboard/IClipboardCreationSupport.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/clipboard/IClipboardCreationSupport.java
index 8b28a0a95..981184d8d 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/clipboard/IClipboardCreationSupport.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/clipboard/IClipboardCreationSupport.java
@@ -23,19 +23,19 @@
  * @coverage XML.model.clipboard
  */
 public abstract class IClipboardCreationSupport implements Serializable {
-  private static final long serialVersionUID = 0L;
+	private static final long serialVersionUID = 0L;
 
-  /**
-   * @param rootObject
-   *          the root {@link XmlObjectInfo} to which new {@link XmlObjectInfo} will be added.
-   *
-   * @return the {@link CreationSupport} for creating {@link XmlObjectInfo}.
-   */
-  public abstract CreationSupport create(XmlObjectInfo rootObject) throws Exception;
+	/**
+	 * @param rootObject
+	 *          the root {@link XmlObjectInfo} to which new {@link XmlObjectInfo} will be added.
+	 *
+	 * @return the {@link CreationSupport} for creating {@link XmlObjectInfo}.
+	 */
+	public abstract CreationSupport create(XmlObjectInfo rootObject) throws Exception;
 
-  /**
-   * Notification that {@link XmlObjectInfo} was created using this {@link CreationSupport}.
-   */
-  public void apply(XmlObjectInfo object) throws Exception {
-  }
+	/**
+	 * Notification that {@link XmlObjectInfo} was created using this {@link CreationSupport}.
+	 */
+	public void apply(XmlObjectInfo object) throws Exception {
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/clipboard/IClipboardObjectProperty.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/clipboard/IClipboardObjectProperty.java
index a554fa8f6..077b43814 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/clipboard/IClipboardObjectProperty.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/clipboard/IClipboardObjectProperty.java
@@ -19,14 +19,14 @@
  * @coverage XML.model.clipboard
  */
 public interface IClipboardObjectProperty {
-  /**
-   * @return the {@link Object} that can be used later to set same value, or
-   *         {@link Property#UNKNOWN_VALUE} if no such object can be provided.
-   */
-  Object getClipboardObject() throws Exception;
+	/**
+	 * @return the {@link Object} that can be used later to set same value, or
+	 *         {@link Property#UNKNOWN_VALUE} if no such object can be provided.
+	 */
+	Object getClipboardObject() throws Exception;
 
-  /**
-   * Applies {@link Object} during paste and attempt to set {@link Property} corresponding value.
-   */
-  void setClipboardObject(Object value) throws Exception;
+	/**
+	 * Applies {@link Object} during paste and attempt to set {@link Property} corresponding value.
+	 */
+	void setClipboardObject(Object value) throws Exception;
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/clipboard/IClipboardSourceProvider.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/clipboard/IClipboardSourceProvider.java
index c77afac3d..638d15706 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/clipboard/IClipboardSourceProvider.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/clipboard/IClipboardSourceProvider.java
@@ -20,9 +20,9 @@
  * @coverage XML.model.clipboard
  */
 public interface IClipboardSourceProvider {
-  /**
-   * @return the Java source that that has same value as current value of given
-   *         {@link GenericProperty}, or <code>null</code> if no such source can be provided.
-   */
-  String getClipboardSource(GenericProperty property) throws Exception;
+	/**
+	 * @return the Java source that that has same value as current value of given
+	 *         {@link GenericProperty}, or <code>null</code> if no such source can be provided.
+	 */
+	String getClipboardSource(GenericProperty property) throws Exception;
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/clipboard/PropertiesClipboardCommand.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/clipboard/PropertiesClipboardCommand.java
index ef50b4a28..a6f75e887 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/clipboard/PropertiesClipboardCommand.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/clipboard/PropertiesClipboardCommand.java
@@ -26,58 +26,58 @@
  * @coverage XML.model.clipboard
  */
 public final class PropertiesClipboardCommand extends ClipboardCommand {
-  private static final long serialVersionUID = 0L;
-  private final Map<String, String> m_propertyTitleToSource = Maps.newTreeMap();
-  private final Map<String, Object> m_propertyTitleToObject = Maps.newTreeMap();
+	private static final long serialVersionUID = 0L;
+	private final Map<String, String> m_propertyTitleToSource = Maps.newTreeMap();
+	private final Map<String, Object> m_propertyTitleToObject = Maps.newTreeMap();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public PropertiesClipboardCommand(XmlObjectInfo object) throws Exception {
-    for (Property property : object.getProperties()) {
-      String title = property.getTitle();
-      if (property instanceof GenericProperty && property.isModified()) {
-        GenericPropertyImpl genericProperty = (GenericPropertyImpl) property;
-        String clipboardSource = genericProperty.getClipboardSource();
-        if (clipboardSource != null) {
-          m_propertyTitleToSource.put(title, clipboardSource);
-        }
-      }
-      if (property instanceof IClipboardObjectProperty) {
-        IClipboardObjectProperty objectProperty = (IClipboardObjectProperty) property;
-        Object value = objectProperty.getClipboardObject();
-        if (value != Property.UNKNOWN_VALUE) {
-          m_propertyTitleToObject.put(title, value);
-        }
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public PropertiesClipboardCommand(XmlObjectInfo object) throws Exception {
+		for (Property property : object.getProperties()) {
+			String title = property.getTitle();
+			if (property instanceof GenericProperty && property.isModified()) {
+				GenericPropertyImpl genericProperty = (GenericPropertyImpl) property;
+				String clipboardSource = genericProperty.getClipboardSource();
+				if (clipboardSource != null) {
+					m_propertyTitleToSource.put(title, clipboardSource);
+				}
+			}
+			if (property instanceof IClipboardObjectProperty) {
+				IClipboardObjectProperty objectProperty = (IClipboardObjectProperty) property;
+				Object value = objectProperty.getClipboardObject();
+				if (value != Property.UNKNOWN_VALUE) {
+					m_propertyTitleToObject.put(title, value);
+				}
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Command
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void execute(XmlObjectInfo object) throws Exception {
-    for (Property property : object.getProperties()) {
-      String title = property.getTitle();
-      if (property instanceof GenericPropertyImpl) {
-        GenericPropertyImpl genericProperty = (GenericPropertyImpl) property;
-        String clipboardSource = m_propertyTitleToSource.get(title);
-        if (clipboardSource != null) {
-          genericProperty.setExpression(clipboardSource, Property.UNKNOWN_VALUE);
-        }
-      }
-      if (property instanceof IClipboardObjectProperty) {
-        IClipboardObjectProperty objectProperty = (IClipboardObjectProperty) property;
-        Object value = m_propertyTitleToObject.get(title);
-        if (value != null) {
-          objectProperty.setClipboardObject(value);
-        }
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Command
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void execute(XmlObjectInfo object) throws Exception {
+		for (Property property : object.getProperties()) {
+			String title = property.getTitle();
+			if (property instanceof GenericPropertyImpl) {
+				GenericPropertyImpl genericProperty = (GenericPropertyImpl) property;
+				String clipboardSource = m_propertyTitleToSource.get(title);
+				if (clipboardSource != null) {
+					genericProperty.setExpression(clipboardSource, Property.UNKNOWN_VALUE);
+				}
+			}
+			if (property instanceof IClipboardObjectProperty) {
+				IClipboardObjectProperty objectProperty = (IClipboardObjectProperty) property;
+				Object value = m_propertyTitleToObject.get(title);
+				if (value != null) {
+					objectProperty.setClipboardObject(value);
+				}
+			}
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/clipboard/XmlObjectMemento.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/clipboard/XmlObjectMemento.java
index 108bc5c4a..72a0aa8ca 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/clipboard/XmlObjectMemento.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/clipboard/XmlObjectMemento.java
@@ -46,188 +46,188 @@
  * @coverage XML.model.clipboard
  */
 public class XmlObjectMemento implements Serializable {
-  private static final long serialVersionUID = 0L;
-  /**
-   * The key under which {@link XmlObjectMemento} registers itself in created {@link XmlObjectInfo}
-   * .
-   */
-  public static final String KEY_MEMENTO = "KEY_MEMENTO";
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Creation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link XmlObjectMemento} for given {@link XmlObjectInfo}.
-   */
-  public static XmlObjectMemento createMemento(XmlObjectInfo javaInfo) throws Exception {
-    if (javaInfo instanceof AbstractComponentInfo) {
-      return new ComponentInfoMemento((AbstractComponentInfo) javaInfo);
-    }
-    return new XmlObjectMemento(javaInfo);
-  }
-
-  /**
-   * Checks that component can be copy/paste, i.e. {@link XmlObjectMemento} can be created, but
-   * don't really create it. We use this to enable/disable copy/cut actions on selection change.
-   *
-   * @return <code>true</code> if {@link XmlObjectMemento} can be created for given
-   *         {@link XmlObjectInfo}.
-   */
-  public static boolean hasMemento(XmlObjectInfo javaInfo) {
-    if (javaInfo.isRoot()) {
-      return false;
-    }
-    return javaInfo.getCreationSupport().getClipboard() != null;
-  }
-
-  /**
-   * If given {@link XmlObjectInfo} was create from some {@link XmlObjectMemento}, then applies this
-   * memento.
-   */
-  public static void apply(XmlObjectInfo object) throws Exception {
-    XmlObjectMemento memento = (XmlObjectMemento) object.getArbitraryValue(KEY_MEMENTO);
-    memento.apply();
-  }
-
-  /**
-   * @return <code>true</code> if given {@link XmlObjectInfo} is in process for pasting.
-   */
-  public static boolean isApplying(XmlObjectInfo object) {
-    return (XmlObjectMemento) object.getArbitraryValue(KEY_MEMENTO) != null;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance fields
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final String m_componentClassName;
-  private final IClipboardCreationSupport m_creationSupport;
-  private final List<ClipboardCommand> m_commands = Lists.newArrayList();
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected XmlObjectMemento(XmlObjectInfo javaInfo) throws Exception {
-    m_componentClassName = javaInfo.getDescription().getComponentClass().getName();
-    // creation
-    {
-      m_creationSupport = javaInfo.getCreationSupport().getClipboard();
-      Assert.isNotNull(m_creationSupport, "No clipboard CreationSupport for %s", javaInfo);
-      cleanUpAnonymous(m_creationSupport);
-    }
-    // prepare commands
-    addCommands(javaInfo, m_commands);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Copy utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds {@link ClipboardCommand}'s for restoring properties, children, etc for given
-   * {@link XmlObjectInfo}.
-   *
-   * @param javaInfo
-   *          the {@link XmlObjectInfo} to add commands for.
-   * @param commands
-   *          the container to add commands to.
-   */
-  static void addCommands(XmlObjectInfo javaInfo, List<ClipboardCommand> commands) throws Exception {
-    // properties command
-    commands.add(new PropertiesClipboardCommand(javaInfo));
-    // broadcast commands
-    javaInfo.getBroadcast(XmlObjectClipboardCopy.class).invoke(javaInfo, commands);
-    // clean up anonymous commands
-    for (ClipboardCommand command : commands) {
-      cleanUpAnonymous(command);
-    }
-  }
-
-  /**
-   * Clears "this$0", "this$1", etc, because it is convenient to use clipboard anonymous classes,
-   * and we sure that they don't reference enclosing classes, even if Java thinks that they do this.
-   */
-  static void cleanUpAnonymous(Object o) throws Exception {
-    for (int i = 0; i < 10; i++) {
-      Field field = ReflectionUtils.getFieldByName(o.getClass(), "this$" + i);
-      if (field != null) {
-        field.set(o, null);
-      }
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Creation/paste
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private transient XmlObjectInfo m_javaInfo;
-  private transient boolean m_applied;
-
-  /**
-   * @return the class of component represented by this {@link XmlObjectMemento}. This can be used
-   *         to check component class/model in more light way than creating real
-   *         {@link XmlObjectInfo}.
-   */
-  public String getComponentClassName() {
-    return m_componentClassName;
-  }
-
-  /**
-   * Creates new {@link XmlObjectInfo} using remembered values.
-   *
-   * @param existingHierarchyObject
-   *          some {@link XmlObjectInfo} in model hierarchy.
-   *
-   * @return the new {@link XmlObjectInfo}.
-   */
-  public XmlObjectInfo create(XmlObjectInfo existingHierarchyObject) throws Exception {
-    Assert.isLegal(!m_applied, "This memento already applied.");
-    if (m_javaInfo == null) {
-      XmlObjectInfo rootObject = existingHierarchyObject.getRootXML();
-      EditorContext context = rootObject.getContext();
-      // prepare creation
-      CreationSupport creationSupport = m_creationSupport.create(rootObject);
-      // create XMLObject_Info
-      m_javaInfo = XmlObjectUtils.createObject(context, m_componentClassName, creationSupport);
-      m_javaInfo.putArbitraryValue(KEY_MEMENTO, this);
-    }
-    return m_javaInfo;
-  }
-
-  /**
-   * Performs configuring for this {@link XmlObjectInfo}.
-   */
-  public void apply() throws Exception {
-    Assert.isNotNull(m_javaInfo, "XMLObject_Info should be already created using create().");
-    Assert.isLegal(
-        m_javaInfo.getParent() != null,
-        "XMLObject_Info should be already bounds to the hierarchy.");
-    Assert.isLegal(!m_applied, "This memento already applied.");
-    m_applied = true;
-    // do apply
-    if (XmlObjectUtils.hasTrueParameter(m_javaInfo, "clipboard.lightRefresh")) {
-      m_javaInfo.getRootXML().refreshLight();
-    }
-    m_creationSupport.apply(m_javaInfo);
-    // execute commands
-    executeCommands();
-    // done
-    m_javaInfo.removeArbitraryValue(KEY_MEMENTO);
-  }
-
-  /**
-   * Executes remembered {@link ClipboardCommand}'s for this {@link XmlObjectInfo}.
-   */
-  private void executeCommands() throws Exception {
-    for (ClipboardCommand command : m_commands) {
-      command.execute(m_javaInfo);
-    }
-  }
+	private static final long serialVersionUID = 0L;
+	/**
+	 * The key under which {@link XmlObjectMemento} registers itself in created {@link XmlObjectInfo}
+	 * .
+	 */
+	public static final String KEY_MEMENTO = "KEY_MEMENTO";
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Creation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link XmlObjectMemento} for given {@link XmlObjectInfo}.
+	 */
+	public static XmlObjectMemento createMemento(XmlObjectInfo javaInfo) throws Exception {
+		if (javaInfo instanceof AbstractComponentInfo) {
+			return new ComponentInfoMemento((AbstractComponentInfo) javaInfo);
+		}
+		return new XmlObjectMemento(javaInfo);
+	}
+
+	/**
+	 * Checks that component can be copy/paste, i.e. {@link XmlObjectMemento} can be created, but
+	 * don't really create it. We use this to enable/disable copy/cut actions on selection change.
+	 *
+	 * @return <code>true</code> if {@link XmlObjectMemento} can be created for given
+	 *         {@link XmlObjectInfo}.
+	 */
+	public static boolean hasMemento(XmlObjectInfo javaInfo) {
+		if (javaInfo.isRoot()) {
+			return false;
+		}
+		return javaInfo.getCreationSupport().getClipboard() != null;
+	}
+
+	/**
+	 * If given {@link XmlObjectInfo} was create from some {@link XmlObjectMemento}, then applies this
+	 * memento.
+	 */
+	public static void apply(XmlObjectInfo object) throws Exception {
+		XmlObjectMemento memento = (XmlObjectMemento) object.getArbitraryValue(KEY_MEMENTO);
+		memento.apply();
+	}
+
+	/**
+	 * @return <code>true</code> if given {@link XmlObjectInfo} is in process for pasting.
+	 */
+	public static boolean isApplying(XmlObjectInfo object) {
+		return (XmlObjectMemento) object.getArbitraryValue(KEY_MEMENTO) != null;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance fields
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final String m_componentClassName;
+	private final IClipboardCreationSupport m_creationSupport;
+	private final List<ClipboardCommand> m_commands = Lists.newArrayList();
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected XmlObjectMemento(XmlObjectInfo javaInfo) throws Exception {
+		m_componentClassName = javaInfo.getDescription().getComponentClass().getName();
+		// creation
+		{
+			m_creationSupport = javaInfo.getCreationSupport().getClipboard();
+			Assert.isNotNull(m_creationSupport, "No clipboard CreationSupport for %s", javaInfo);
+			cleanUpAnonymous(m_creationSupport);
+		}
+		// prepare commands
+		addCommands(javaInfo, m_commands);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Copy utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds {@link ClipboardCommand}'s for restoring properties, children, etc for given
+	 * {@link XmlObjectInfo}.
+	 *
+	 * @param javaInfo
+	 *          the {@link XmlObjectInfo} to add commands for.
+	 * @param commands
+	 *          the container to add commands to.
+	 */
+	static void addCommands(XmlObjectInfo javaInfo, List<ClipboardCommand> commands) throws Exception {
+		// properties command
+		commands.add(new PropertiesClipboardCommand(javaInfo));
+		// broadcast commands
+		javaInfo.getBroadcast(XmlObjectClipboardCopy.class).invoke(javaInfo, commands);
+		// clean up anonymous commands
+		for (ClipboardCommand command : commands) {
+			cleanUpAnonymous(command);
+		}
+	}
+
+	/**
+	 * Clears "this$0", "this$1", etc, because it is convenient to use clipboard anonymous classes,
+	 * and we sure that they don't reference enclosing classes, even if Java thinks that they do this.
+	 */
+	static void cleanUpAnonymous(Object o) throws Exception {
+		for (int i = 0; i < 10; i++) {
+			Field field = ReflectionUtils.getFieldByName(o.getClass(), "this$" + i);
+			if (field != null) {
+				field.set(o, null);
+			}
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Creation/paste
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private transient XmlObjectInfo m_javaInfo;
+	private transient boolean m_applied;
+
+	/**
+	 * @return the class of component represented by this {@link XmlObjectMemento}. This can be used
+	 *         to check component class/model in more light way than creating real
+	 *         {@link XmlObjectInfo}.
+	 */
+	public String getComponentClassName() {
+		return m_componentClassName;
+	}
+
+	/**
+	 * Creates new {@link XmlObjectInfo} using remembered values.
+	 *
+	 * @param existingHierarchyObject
+	 *          some {@link XmlObjectInfo} in model hierarchy.
+	 *
+	 * @return the new {@link XmlObjectInfo}.
+	 */
+	public XmlObjectInfo create(XmlObjectInfo existingHierarchyObject) throws Exception {
+		Assert.isLegal(!m_applied, "This memento already applied.");
+		if (m_javaInfo == null) {
+			XmlObjectInfo rootObject = existingHierarchyObject.getRootXML();
+			EditorContext context = rootObject.getContext();
+			// prepare creation
+			CreationSupport creationSupport = m_creationSupport.create(rootObject);
+			// create XMLObject_Info
+			m_javaInfo = XmlObjectUtils.createObject(context, m_componentClassName, creationSupport);
+			m_javaInfo.putArbitraryValue(KEY_MEMENTO, this);
+		}
+		return m_javaInfo;
+	}
+
+	/**
+	 * Performs configuring for this {@link XmlObjectInfo}.
+	 */
+	public void apply() throws Exception {
+		Assert.isNotNull(m_javaInfo, "XMLObject_Info should be already created using create().");
+		Assert.isLegal(
+				m_javaInfo.getParent() != null,
+				"XMLObject_Info should be already bounds to the hierarchy.");
+		Assert.isLegal(!m_applied, "This memento already applied.");
+		m_applied = true;
+		// do apply
+		if (XmlObjectUtils.hasTrueParameter(m_javaInfo, "clipboard.lightRefresh")) {
+			m_javaInfo.getRootXML().refreshLight();
+		}
+		m_creationSupport.apply(m_javaInfo);
+		// execute commands
+		executeCommands();
+		// done
+		m_javaInfo.removeArbitraryValue(KEY_MEMENTO);
+	}
+
+	/**
+	 * Executes remembered {@link ClipboardCommand}'s for this {@link XmlObjectInfo}.
+	 */
+	private void executeCommands() throws Exception {
+		for (ClipboardCommand command : m_commands) {
+			command.execute(m_javaInfo);
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/clipboard/XmlObjectMementoTransfer.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/clipboard/XmlObjectMementoTransfer.java
index 8bf69f586..f63b5a11f 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/clipboard/XmlObjectMementoTransfer.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/clipboard/XmlObjectMementoTransfer.java
@@ -37,135 +37,135 @@
  * @coverage XML.model.clipboard
  */
 public class XmlObjectMementoTransfer extends ByteArrayTransfer {
-  private static final String TYPE_NAME = "DESIGNER_TYPE_NAME-XML";
-  private static final int TYPE_ID = registerType(TYPE_NAME);
-  private static XmlObjectMementoTransfer _instance = new XmlObjectMementoTransfer();
+	private static final String TYPE_NAME = "DESIGNER_TYPE_NAME-XML";
+	private static final int TYPE_ID = registerType(TYPE_NAME);
+	private static XmlObjectMementoTransfer _instance = new XmlObjectMementoTransfer();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private XmlObjectMementoTransfer() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private XmlObjectMementoTransfer() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static XmlObjectMementoTransfer getInstance() {
-    return _instance;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static XmlObjectMementoTransfer getInstance() {
+		return _instance;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Transfer
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String[] getTypeNames() {
-    return new String[]{TYPE_NAME};
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Transfer
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String[] getTypeNames() {
+		return new String[]{TYPE_NAME};
+	}
 
-  @Override
-  protected int[] getTypeIds() {
-    return new int[]{TYPE_ID};
-  }
+	@Override
+	protected int[] getTypeIds() {
+		return new int[]{TYPE_ID};
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ByteArrayTransfer
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void javaToNative(final Object object, final TransferData transferData) {
-    if (isSupportedType(transferData)) {
-      ExecutionUtils.runRethrow(new RunnableEx() {
-        @Override
-        public void run() throws Exception {
-          byte[] bytes = convertObjectToBytes(object);
-          XmlObjectMementoTransfer.super.javaToNative(bytes, transferData);
-        }
-      });
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ByteArrayTransfer
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void javaToNative(final Object object, final TransferData transferData) {
+		if (isSupportedType(transferData)) {
+			ExecutionUtils.runRethrow(new RunnableEx() {
+				@Override
+				public void run() throws Exception {
+					byte[] bytes = convertObjectToBytes(object);
+					XmlObjectMementoTransfer.super.javaToNative(bytes, transferData);
+				}
+			});
+		}
+	}
 
-  @Override
-  public Object nativeToJava(final TransferData transferData) {
-    if (isSupportedType(transferData)) {
-      return ExecutionUtils.runObject(new RunnableObjectEx<Object>() {
-        @Override
-        public Object runObject() throws Exception {
-          byte[] bytes = (byte[]) XmlObjectMementoTransfer.super.nativeToJava(transferData);
-          return convertBytesToObject(bytes);
-        }
-      });
-    }
-    return null;
-  }
+	@Override
+	public Object nativeToJava(final TransferData transferData) {
+		if (isSupportedType(transferData)) {
+			return ExecutionUtils.runObject(new RunnableObjectEx<Object>() {
+				@Override
+				public Object runObject() throws Exception {
+					byte[] bytes = (byte[]) XmlObjectMementoTransfer.super.nativeToJava(transferData);
+					return convertBytesToObject(bytes);
+				}
+			});
+		}
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Implementation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the bytes that correspond to the serialized object.
-   */
-  public static byte[] convertObjectToBytes(Object object) throws IOException {
-    // write object to stream
-    ByteArrayOutputStream baos;
-    {
-      baos = new ByteArrayOutputStream();
-      ObjectOutputStream oos = new ObjectOutputStream(new GZIPOutputStream(baos));
-      oos.writeObject(object);
-      oos.close();
-    }
-    // return as bytes
-    return baos.toByteArray();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Implementation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the bytes that correspond to the serialized object.
+	 */
+	public static byte[] convertObjectToBytes(Object object) throws IOException {
+		// write object to stream
+		ByteArrayOutputStream baos;
+		{
+			baos = new ByteArrayOutputStream();
+			ObjectOutputStream oos = new ObjectOutputStream(new GZIPOutputStream(baos));
+			oos.writeObject(object);
+			oos.close();
+		}
+		// return as bytes
+		return baos.toByteArray();
+	}
 
-  public static Object convertBytesToObject(byte[] bytes) throws Exception {
-    ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
-    ObjectInputStream ois = new BundleObjectInputStream(new GZIPInputStream(bais));
-    try {
-      return ois.readObject();
-    } finally {
-      ois.close();
-    }
-  }
+	public static Object convertBytesToObject(byte[] bytes) throws Exception {
+		ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
+		ObjectInputStream ois = new BundleObjectInputStream(new GZIPInputStream(bais));
+		try {
+			return ois.readObject();
+		} finally {
+			ois.close();
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // BundleObjectInputStream
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Implementation of {@link ObjectInputStream} that resolves classes using {@link Bundle}'s.
-   *
-   * @author scheglov_ke
-   */
-  private static final class BundleObjectInputStream extends ObjectInputStream {
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public BundleObjectInputStream(InputStream in) throws IOException {
-      super(in);
-    }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// BundleObjectInputStream
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Implementation of {@link ObjectInputStream} that resolves classes using {@link Bundle}'s.
+	 *
+	 * @author scheglov_ke
+	 */
+	private static final class BundleObjectInputStream extends ObjectInputStream {
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public BundleObjectInputStream(InputStream in) throws IOException {
+			super(in);
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Resolve
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    protected Class<?> resolveClass(ObjectStreamClass desc) throws IOException,
-        ClassNotFoundException {
-      String className = desc.getName();
-      return ExternalFactoriesHelper.loadBundleClass(className);
-    }
-  }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Resolve
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		protected Class<?> resolveClass(ObjectStreamClass desc) throws IOException,
+		ClassNotFoundException {
+			String className = desc.getName();
+			return ExternalFactoriesHelper.loadBundleClass(className);
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/creation/CreationSupport.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/creation/CreationSupport.java
index 26c133e90..e8a062cc3 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/creation/CreationSupport.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/creation/CreationSupport.java
@@ -23,91 +23,91 @@
  * @coverage XML.model.creation
  */
 public abstract class CreationSupport {
-  protected XmlObjectInfo m_object;
+	protected XmlObjectInfo m_object;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link DocumentElement} in XML model.
-   */
-  public DocumentElement getElement() {
-    throw new NotImplementedException();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link DocumentElement} in XML model.
+	 */
+	public DocumentElement getElement() {
+		throw new NotImplementedException();
+	}
 
-  /**
-   * @return the existing {@link DocumentElement} in XML model, or <code>null</code> if
-   *         corresponding {@link XmlObjectInfo} is virtual, not existing yet.
-   */
-  public DocumentElement getExistingElement() {
-    return getElement();
-  }
+	/**
+	 * @return the existing {@link DocumentElement} in XML model, or <code>null</code> if
+	 *         corresponding {@link XmlObjectInfo} is virtual, not existing yet.
+	 */
+	public DocumentElement getExistingElement() {
+		return getElement();
+	}
 
-  /**
-   * @return the {@link DocumentElement} which should be moved, usually same as
-   *         {@link #getElement()}.
-   */
-  public DocumentElement getElementMove() {
-    return getElement();
-  }
+	/**
+	 * @return the {@link DocumentElement} which should be moved, usually same as
+	 *         {@link #getElement()}.
+	 */
+	public DocumentElement getElementMove() {
+		return getElement();
+	}
 
-  /**
-   * @return the title to display to user, usually name of tag.
-   */
-  public String getTitle() {
-    throw new NotImplementedException();
-  }
+	/**
+	 * @return the title to display to user, usually name of tag.
+	 */
+	public String getTitle() {
+		throw new NotImplementedException();
+	}
 
-  /**
-   * Sets the {@link XmlObjectInfo} that has this {@link CreationSupport}.
-   */
-  public void setObject(XmlObjectInfo object) throws Exception {
-    m_object = object;
-  }
+	/**
+	 * Sets the {@link XmlObjectInfo} that has this {@link CreationSupport}.
+	 */
+	public void setObject(XmlObjectInfo object) throws Exception {
+		m_object = object;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Delete
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if this {@link XmlObjectInfo} can be deleted.
-   */
-  public boolean canDelete() {
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Delete
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if this {@link XmlObjectInfo} can be deleted.
+	 */
+	public boolean canDelete() {
+		return true;
+	}
 
-  /**
-   * Deletes this {@link XmlObjectInfo}.
-   */
-  public void delete() throws Exception {
-  }
+	/**
+	 * Deletes this {@link XmlObjectInfo}.
+	 */
+	public void delete() throws Exception {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Add
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds new {@link DocumentElement} for creating this {@link XmlObjectInfo}.
-   */
-  public void addElement(DocumentElement parent, int index) throws Exception {
-    throw new NotImplementedException();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Add
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds new {@link DocumentElement} for creating this {@link XmlObjectInfo}.
+	 */
+	public void addElement(DocumentElement parent, int index) throws Exception {
+		throw new NotImplementedException();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Clipboard
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link IClipboardCreationSupport} that can be used during paste to create
-   *         {@link CreationSupport} for pasted {@link XmlObjectInfo}. Can return <code>null</code>
-   *         , if copy/paste is not available.
-   */
-  public IClipboardCreationSupport getClipboard() {
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Clipboard
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link IClipboardCreationSupport} that can be used during paste to create
+	 *         {@link CreationSupport} for pasted {@link XmlObjectInfo}. Can return <code>null</code>
+	 *         , if copy/paste is not available.
+	 */
+	public IClipboardCreationSupport getClipboard() {
+		return null;
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/creation/ElementCreationSupport.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/creation/ElementCreationSupport.java
index 8d995072a..44d3824f7 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/creation/ElementCreationSupport.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/creation/ElementCreationSupport.java
@@ -38,229 +38,229 @@
  * @coverage XML.model.creation
  */
 public class ElementCreationSupport extends CreationSupport implements ILiveCreationSupport {
-  private DocumentElement m_element;
-  private String m_creationId;
-  private boolean m_addAttributes;
+	private DocumentElement m_element;
+	private String m_creationId;
+	private boolean m_addAttributes;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ElementCreationSupport(DocumentElement element) {
-    m_element = element;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ElementCreationSupport(DocumentElement element) {
+		m_element = element;
+	}
 
-  public ElementCreationSupport() {
-    this((String) null);
-  }
+	public ElementCreationSupport() {
+		this((String) null);
+	}
 
-  public ElementCreationSupport(String creationId) {
-    this(creationId, true);
-  }
+	public ElementCreationSupport(String creationId) {
+		this(creationId, true);
+	}
 
-  public ElementCreationSupport(String creationId, boolean addAttributes) {
-    m_creationId = creationId;
-    m_addAttributes = addAttributes;
-  }
+	public ElementCreationSupport(String creationId, boolean addAttributes) {
+		m_creationId = creationId;
+		m_addAttributes = addAttributes;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    if (m_element == null) {
-      return m_creationId + " " + m_addAttributes;
-    }
-    return getElementString(m_element);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		if (m_element == null) {
+			return m_creationId + " " + m_addAttributes;
+		}
+		return getElementString(m_element);
+	}
 
-  /**
-   * @return the "toString()" version of {@link DocumentElement}.
-   */
-  public static String getElementString(DocumentElement element) {
-    // use XML source
-    String result;
-    {
-      StringWriter stringWriter = new StringWriter();
-      PrintWriter printWriter = new PrintWriter(stringWriter);
-      element.writeShort(printWriter);
-      result = stringWriter.toString();
-    }
-    // remove "xmlns" declarations
-    result = result.replaceAll("\\s*xmlns:*\\w*=\"[^\"]*\"", "");
-    // done
-    return result;
-  }
+	/**
+	 * @return the "toString()" version of {@link DocumentElement}.
+	 */
+	public static String getElementString(DocumentElement element) {
+		// use XML source
+		String result;
+		{
+			StringWriter stringWriter = new StringWriter();
+			PrintWriter printWriter = new PrintWriter(stringWriter);
+			element.writeShort(printWriter);
+			result = stringWriter.toString();
+		}
+		// remove "xmlns" declarations
+		result = result.replaceAll("\\s*xmlns:*\\w*=\"[^\"]*\"", "");
+		// done
+		return result;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public DocumentElement getElement() {
-    return m_element;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public DocumentElement getElement() {
+		return m_element;
+	}
 
-  @Override
-  public String getTitle() {
-    return m_element.getTag();
-  }
+	@Override
+	public String getTitle() {
+		return m_element.getTag();
+	}
 
-  @Override
-  public void setObject(XmlObjectInfo object) throws Exception {
-    super.setObject(object);
-    // apply parameters from CreationDescription
-    {
-      CreationDescription creation = m_object.getDescription().getCreation(m_creationId);
-      if (creation != null) {
-        for (Map.Entry<String, String> entry : creation.getParameters().entrySet()) {
-          XmlObjectUtils.setParameter(m_object, entry.getKey(), entry.getValue());
-        }
-      }
-    }
-  }
+	@Override
+	public void setObject(XmlObjectInfo object) throws Exception {
+		super.setObject(object);
+		// apply parameters from CreationDescription
+		{
+			CreationDescription creation = m_object.getDescription().getCreation(m_creationId);
+			if (creation != null) {
+				for (Map.Entry<String, String> entry : creation.getParameters().entrySet()) {
+					XmlObjectUtils.setParameter(m_object, entry.getKey(), entry.getValue());
+				}
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Delete
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Deletes this {@link XmlObjectInfo}.
-   */
-  @Override
-  public void delete() throws Exception {
-    // delete children
-    List<ObjectInfo> children = ImmutableList.copyOf(m_object.getChildren());
-    for (ObjectInfo child : children) {
-      child.delete();
-    }
-    // we can really "delete" object only if it is not root
-    if (m_object.isRoot()) {
-      return;
-    }
-    // remove element
-    {
-      DocumentElement elementToRemove = getElementToRemove();
-      elementToRemove.remove();
-    }
-    // remove from parent
-    m_object.getParent().removeChild(m_object);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Delete
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Deletes this {@link XmlObjectInfo}.
+	 */
+	@Override
+	public void delete() throws Exception {
+		// delete children
+		List<ObjectInfo> children = ImmutableList.copyOf(m_object.getChildren());
+		for (ObjectInfo child : children) {
+			child.delete();
+		}
+		// we can really "delete" object only if it is not root
+		if (m_object.isRoot()) {
+			return;
+		}
+		// remove element
+		{
+			DocumentElement elementToRemove = getElementToRemove();
+			elementToRemove.remove();
+		}
+		// remove from parent
+		m_object.getParent().removeChild(m_object);
+	}
 
-  private DocumentElement getElementToRemove() {
-    if (m_object instanceof IWrapperInfo) {
-      return m_element;
-    } else {
-      XmlObjectInfo parent = m_object.getParentXML();
-      return XmlObjectUtils.getElementInParent(parent, m_element);
-    }
-  }
+	private DocumentElement getElementToRemove() {
+		if (m_object instanceof IWrapperInfo) {
+			return m_element;
+		} else {
+			XmlObjectInfo parent = m_object.getParentXML();
+			return XmlObjectUtils.getElementInParent(parent, m_element);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Add
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds new {@link DocumentElement} for creating this {@link XmlObjectInfo}.
-   */
-  @Override
-  public void addElement(DocumentElement parent, int index) throws Exception {
-    ComponentDescription description = m_object.getDescription();
-    Class<?> componentClass = description.getComponentClass();
-    // prepare creation
-    CreationDescription creation;
-    {
-      creation = description.getCreation(m_creationId);
-      Assert.isNotNull2(creation, "No creation: {0} {1}", componentClass, m_creationId);
-    }
-    // new DocumentElement
-    m_element = new DocumentElement();
-    // tag
-    {
-      String tag = XmlObjectUtils.getTagForClass(m_object, componentClass);
-      m_element.setTag(tag);
-    }
-    // add DocumentElement
-    parent.addChild(m_element, index);
-    // set attributes
-    if (m_addAttributes) {
-      for (CreationAttributeDescription attribute : creation.getAttributes()) {
-        new AddAttributeHelper(m_element).addAttribute(attribute);
-      }
-    }
-    // set content
-    if (m_addAttributes) {
-      String content = creation.getContent();
-      if (content != null) {
-        m_element.setText(content, false);
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Add
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds new {@link DocumentElement} for creating this {@link XmlObjectInfo}.
+	 */
+	@Override
+	public void addElement(DocumentElement parent, int index) throws Exception {
+		ComponentDescription description = m_object.getDescription();
+		Class<?> componentClass = description.getComponentClass();
+		// prepare creation
+		CreationDescription creation;
+		{
+			creation = description.getCreation(m_creationId);
+			Assert.isNotNull2(creation, "No creation: {0} {1}", componentClass, m_creationId);
+		}
+		// new DocumentElement
+		m_element = new DocumentElement();
+		// tag
+		{
+			String tag = XmlObjectUtils.getTagForClass(m_object, componentClass);
+			m_element.setTag(tag);
+		}
+		// add DocumentElement
+		parent.addChild(m_element, index);
+		// set attributes
+		if (m_addAttributes) {
+			for (CreationAttributeDescription attribute : creation.getAttributes()) {
+				new AddAttributeHelper(m_element).addAttribute(attribute);
+			}
+		}
+		// set content
+		if (m_addAttributes) {
+			String content = creation.getContent();
+			if (content != null) {
+				m_element.setText(content, false);
+			}
+		}
+	}
 
-  private static class AddAttributeHelper extends NamespacesHelper {
-    private final DocumentElement m_element;
+	private static class AddAttributeHelper extends NamespacesHelper {
+		private final DocumentElement m_element;
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public AddAttributeHelper(DocumentElement element) {
-      super(element.getRoot());
-      m_element = element;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public AddAttributeHelper(DocumentElement element) {
+			super(element.getRoot());
+			m_element = element;
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Access
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    void addAttribute(CreationAttributeDescription attribute) {
-      String prefix = getNamespacePrefix(attribute);
-      m_element.setAttribute(prefix + attribute.getName(), attribute.getValue());
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Access
+		//
+		////////////////////////////////////////////////////////////////////////////
+		void addAttribute(CreationAttributeDescription attribute) {
+			String prefix = getNamespacePrefix(attribute);
+			m_element.setAttribute(prefix + attribute.getName(), attribute.getValue());
+		}
 
-    private String getNamespacePrefix(CreationAttributeDescription attribute) {
-      String namespace = attribute.getNamespace();
-      // no namespace
-      if (StringUtils.isEmpty(namespace)) {
-        return "";
-      }
-      // prepare name of namespace
-      return ensureName(namespace, "a") + ":";
-    }
-  }
+		private String getNamespacePrefix(CreationAttributeDescription attribute) {
+			String namespace = attribute.getNamespace();
+			// no namespace
+			if (StringUtils.isEmpty(namespace)) {
+				return "";
+			}
+			// prepare name of namespace
+			return ensureName(namespace, "a") + ":";
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Clipboard
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public IClipboardCreationSupport getClipboard() {
-    return new IClipboardCreationSupport() {
-      private static final long serialVersionUID = 0L;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Clipboard
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public IClipboardCreationSupport getClipboard() {
+		return new IClipboardCreationSupport() {
+			private static final long serialVersionUID = 0L;
 
-      @Override
-      public CreationSupport create(XmlObjectInfo rootObject) throws Exception {
-        return new ElementCreationSupport(null, false);
-      }
-    };
-  }
+			@Override
+			public CreationSupport create(XmlObjectInfo rootObject) throws Exception {
+				return new ElementCreationSupport(null, false);
+			}
+		};
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ILiveCreationSupport
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public CreationSupport getLiveComponentCreation() {
-    return new ElementCreationSupport(m_creationId, m_addAttributes);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ILiveCreationSupport
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public CreationSupport getLiveComponentCreation() {
+		return new ElementCreationSupport(m_creationId, m_addAttributes);
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/creation/ILiveCreationSupport.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/creation/ILiveCreationSupport.java
index 7e6676e97..8744999be 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/creation/ILiveCreationSupport.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/creation/ILiveCreationSupport.java
@@ -27,5 +27,5 @@
  * @coverage XML.model.creation
  */
 public interface ILiveCreationSupport {
-  CreationSupport getLiveComponentCreation();
+	CreationSupport getLiveComponentCreation();
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/creation/TagCreationSupport.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/creation/TagCreationSupport.java
index 3be222cf9..2203b71ef 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/creation/TagCreationSupport.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/creation/TagCreationSupport.java
@@ -30,111 +30,111 @@
  * @coverage XML.model.creation
  */
 public final class TagCreationSupport extends CreationSupport {
-  private DocumentElement m_element;
-  private String m_tag;
+	private DocumentElement m_element;
+	private String m_tag;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public TagCreationSupport(DocumentElement element) {
-    m_element = element;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public TagCreationSupport(DocumentElement element) {
+		m_element = element;
+	}
 
-  public TagCreationSupport(String tag) {
-    m_tag = tag;
-  }
+	public TagCreationSupport(String tag) {
+		m_tag = tag;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    if (m_element == null) {
-      return m_tag;
-    }
-    return getElementString(m_element);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		if (m_element == null) {
+			return m_tag;
+		}
+		return getElementString(m_element);
+	}
 
-  /**
-   * @return the "toString()" version of {@link DocumentElement}.
-   */
-  public static String getElementString(DocumentElement element) {
-    // use XML source
-    String result;
-    {
-      StringWriter stringWriter = new StringWriter();
-      PrintWriter printWriter = new PrintWriter(stringWriter);
-      element.writeShort(printWriter);
-      result = stringWriter.toString();
-    }
-    // remove "xmlns" declarations
-    result = result.replaceAll("\\s*xmlns:*\\w*=\"[^\"]*\"", "");
-    // done
-    return result;
-  }
+	/**
+	 * @return the "toString()" version of {@link DocumentElement}.
+	 */
+	public static String getElementString(DocumentElement element) {
+		// use XML source
+		String result;
+		{
+			StringWriter stringWriter = new StringWriter();
+			PrintWriter printWriter = new PrintWriter(stringWriter);
+			element.writeShort(printWriter);
+			result = stringWriter.toString();
+		}
+		// remove "xmlns" declarations
+		result = result.replaceAll("\\s*xmlns:*\\w*=\"[^\"]*\"", "");
+		// done
+		return result;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public DocumentElement getElement() {
-    return m_element;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public DocumentElement getElement() {
+		return m_element;
+	}
 
-  @Override
-  public String getTitle() {
-    return m_element.getTag();
-  }
+	@Override
+	public String getTitle() {
+		return m_element.getTag();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Delete
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Deletes this {@link XmlObjectInfo}.
-   */
-  @Override
-  public void delete() throws Exception {
-    // delete children
-    List<ObjectInfo> children = ImmutableList.copyOf(m_object.getChildren());
-    for (ObjectInfo child : children) {
-      child.delete();
-    }
-    // remove element
-    {
-      DocumentElement elementToRemove = getElementToRemove();
-      elementToRemove.remove();
-    }
-    // remove from parent
-    m_object.getParent().removeChild(m_object);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Delete
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Deletes this {@link XmlObjectInfo}.
+	 */
+	@Override
+	public void delete() throws Exception {
+		// delete children
+		List<ObjectInfo> children = ImmutableList.copyOf(m_object.getChildren());
+		for (ObjectInfo child : children) {
+			child.delete();
+		}
+		// remove element
+		{
+			DocumentElement elementToRemove = getElementToRemove();
+			elementToRemove.remove();
+		}
+		// remove from parent
+		m_object.getParent().removeChild(m_object);
+	}
 
-  private DocumentElement getElementToRemove() {
-    XmlObjectInfo parent = m_object.getParentXML();
-    return XmlObjectUtils.getElementInParent(parent, m_element);
-  }
+	private DocumentElement getElementToRemove() {
+		XmlObjectInfo parent = m_object.getParentXML();
+		return XmlObjectUtils.getElementInParent(parent, m_element);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Add
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds new {@link DocumentElement} for creating this {@link XmlObjectInfo}.
-   */
-  @Override
-  public void addElement(DocumentElement parent, int index) throws Exception {
-    // new DocumentElement
-    m_element = new DocumentElement();
-    m_element.setTag(m_tag);
-    // add DocumentElement
-    parent.addChild(m_element, index);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Add
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds new {@link DocumentElement} for creating this {@link XmlObjectInfo}.
+	 */
+	@Override
+	public void addElement(DocumentElement parent, int index) throws Exception {
+		// new DocumentElement
+		m_element = new DocumentElement();
+		m_element.setTag(m_tag);
+		// add DocumentElement
+		parent.addChild(m_element, index);
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/AbstractDescription.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/AbstractDescription.java
index 2c84ac0bd..30961741b 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/AbstractDescription.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/AbstractDescription.java
@@ -25,102 +25,102 @@
  * @coverage XML.model.description
  */
 public abstract class AbstractDescription implements IAdaptable {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Visiting
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * {@link XmlObjectInfo} toolkit object was initialized and ready to be used. For example, it is
-   * possible to get default values for properties.
-   */
-  public static final int STATE_OBJECT_READY = 1;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Visiting
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * {@link XmlObjectInfo} toolkit object was initialized and ready to be used. For example, it is
+	 * possible to get default values for properties.
+	 */
+	public static final int STATE_OBJECT_READY = 1;
 
-  /**
-   * Sends this {@link AbstractDescription} message that given {@link XmlObjectInfo} is now in given
-   * state, so some action can be done. This message will be also transmitted to all children of
-   * this description object.
-   */
-  public void visit(XmlObjectInfo object, int state) throws Exception {
-  }
+	/**
+	 * Sends this {@link AbstractDescription} message that given {@link XmlObjectInfo} is now in given
+	 * state, so some action can be done. This message will be also transmitted to all children of
+	 * this description object.
+	 */
+	public void visit(XmlObjectInfo object, int state) throws Exception {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IAdaptable
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public <T> T getAdapter(Class<T> adapter) {
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IAdaptable
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public <T> T getAdapter(Class<T> adapter) {
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tags
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Map<String, String> m_tags;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tags
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Map<String, String> m_tags;
 
-  /**
-   * @return the {@link Map} of "tag name" to "tag value". Can return empty {@link Map}, but not
-   *         <code>null</code>.
-   */
-  public final Map<String, String> getTags() {
-    if (m_tags == null) {
-      return Collections.emptyMap();
-    }
-    return m_tags;
-  }
+	/**
+	 * @return the {@link Map} of "tag name" to "tag value". Can return empty {@link Map}, but not
+	 *         <code>null</code>.
+	 */
+	public final Map<String, String> getTags() {
+		if (m_tags == null) {
+			return Collections.emptyMap();
+		}
+		return m_tags;
+	}
 
-  /**
-   * @return the value of given tag, may be <code>null</code>.
-   */
-  public final String getTag(String tag) {
-    return getTags().get(tag);
-  }
+	/**
+	 * @return the value of given tag, may be <code>null</code>.
+	 */
+	public final String getTag(String tag) {
+		return getTags().get(tag);
+	}
 
-  /**
-   * @return <code>true</code> if this {@link AbstractDescription} has given tag with value
-   *         <code>"true"</code>.
-   */
-  public final boolean hasTrueTag(String tag) {
-    return "true".equals(getTag(tag));
-  }
+	/**
+	 * @return <code>true</code> if this {@link AbstractDescription} has given tag with value
+	 *         <code>"true"</code>.
+	 */
+	public final boolean hasTrueTag(String tag) {
+		return "true".equals(getTag(tag));
+	}
 
-  /**
-   * Sets the value of tag.
-   */
-  public final void putTag(String tag, String value) {
-    if (m_tags == null) {
-      m_tags = Maps.newTreeMap();
-    }
-    m_tags.put(tag, value);
-  }
+	/**
+	 * Sets the value of tag.
+	 */
+	public final void putTag(String tag, String value) {
+		if (m_tags == null) {
+			m_tags = Maps.newTreeMap();
+		}
+		m_tags.put(tag, value);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Arbitrary values map
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Map<Object, Object> m_arbitraryMap;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Arbitrary values map
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Map<Object, Object> m_arbitraryMap;
 
-  /**
-   * Associates the given value with the given key.
-   */
-  public final void putArbitraryValue(Object key, Object value) {
-    if (m_arbitraryMap == null) {
-      m_arbitraryMap = Maps.newHashMap();
-    }
-    m_arbitraryMap.put(key, value);
-  }
+	/**
+	 * Associates the given value with the given key.
+	 */
+	public final void putArbitraryValue(Object key, Object value) {
+		if (m_arbitraryMap == null) {
+			m_arbitraryMap = Maps.newHashMap();
+		}
+		m_arbitraryMap.put(key, value);
+	}
 
-  /**
-   * @return the value to which the given key is mapped, or <code>null</code>.
-   */
-  public final Object getArbitraryValue(Object key) {
-    if (m_arbitraryMap != null) {
-      return m_arbitraryMap.get(key);
-    }
-    return null;
-  }
+	/**
+	 * @return the value to which the given key is mapped, or <code>null</code>.
+	 */
+	public final Object getArbitraryValue(Object key) {
+		if (m_arbitraryMap != null) {
+			return m_arbitraryMap.get(key);
+		}
+		return null;
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/ComponentDescription.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/ComponentDescription.java
index 14d76945c..af01abc6d 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/ComponentDescription.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/ComponentDescription.java
@@ -38,300 +38,300 @@
  * @coverage XML.model.description
  */
 public final class ComponentDescription extends AbstractDescription
-    implements
-      IComponentDescription {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ComponentDescription(Class<?> componentClass) {
-    m_componentClass = componentClass;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Component class
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final Class<?> m_componentClass;
-
-  @Override
-  public Class<?> getComponentClass() {
-    return m_componentClass;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI toolkit
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private ToolkitDescription m_toolkit;
-
-  @Override
-  public ToolkitDescription getToolkit() {
-    return m_toolkit;
-  }
-
-  /**
-   * Sets the {@link ToolkitDescription} for this component.
-   */
-  public void setToolkit(ToolkitDescription toolkit) {
-    m_toolkit = toolkit;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Model class
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Class<?> m_modelClass;
-
-  @Override
-  public Class<?> getModelClass() {
-    return m_modelClass;
-  }
-
-  /**
-   * Sets the {@link Class} of {@link ObjectInfo} that should be used for this component.
-   */
-  public void setModelClass(Class<?> modelClass) {
-    m_modelClass = modelClass;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Icon
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Image m_icon;
-
-  @Override
-  public Image getIcon() {
-    return m_icon;
-  }
-
-  /**
-   * Sets the icon for this component.
-   */
-  public void setIcon(Image icon) {
-    m_icon = icon;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Description
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private String m_description;
-
-  /**
-   * @return the description text for this component.
-   */
-  public String getDescription() {
-    return m_description;
-  }
-
-  /**
-   * Sets the description text for this component.
-   */
-  public void setDescription(String description) {
-    if (description != null) {
-      m_description = StringUtilities.normalizeWhitespaces(description);
-      m_description = StringUtils.replace(m_description, "\\n", "\n");
-    } else {
-      m_description = m_componentClass.getName();
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Caching presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private boolean m_presentationCached;
-
-  /**
-   * @return <code>true</code> if {@link ComponentPresentation} for this
-   *         {@link ComponentDescription} can be cached.
-   */
-  public boolean isPresentationCached() {
-    return m_presentationCached;
-  }
-
-  /**
-   * Specifies if {@link ComponentPresentation} for this {@link ComponentDescription} can be cached.
-   */
-  public void setPresentationCached(boolean presentationCached) {
-    m_presentationCached = presentationCached;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Generic properties
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final List<GenericPropertyDescription> m_properties = Lists.newArrayList();
-  private final Map<String, GenericPropertyDescription> m_idToProperty = Maps.newHashMap();
-
-  /**
-   * @return the {@link GenericPropertyDescription}'s of this component.
-   */
-  public List<GenericPropertyDescription> getProperties() {
-    return Collections.unmodifiableList(m_properties);
-  }
-
-  /**
-   * @return the {@link GenericPropertyDescription} with given id.
-   */
-  public GenericPropertyDescription getProperty(String id) {
-    return m_idToProperty.get(id);
-  }
-
-  /**
-   * Adds new {@link GenericPropertyDescription}.
-   */
-  public void addProperty(GenericPropertyDescription property) {
-    String id = property.getId();
-    if (!m_idToProperty.containsKey(id)) {
-      m_idToProperty.put(id, property);
-      m_properties.add(property);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Creation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final Map<String, CreationDescription> m_creations = Maps.newHashMap();
-
-  /**
-   * @return all {@link CreationDescription}'s.
-   */
-  public List<CreationDescription> getCreations() {
-    return ImmutableList.copyOf(m_creations.values());
-  }
-
-  /**
-   * @return the {@link CreationDescription} for this component with given ID.
-   */
-  public CreationDescription getCreation(String id) {
-    return m_creations.get(id);
-  }
-
-  /**
-   * Adds the {@link CreationDescription} for component with exactly same class.
-   */
-  public void addCreation(CreationDescription creation) {
-    m_creations.put(creation.getId(), creation);
-  }
-
-  /**
-   * Removes all existing {@link CreationDescription}'s.
-   */
-  public void clearCreations() {
-    m_creations.clear();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parameters
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final Map<String, String> m_parameters = Maps.newTreeMap();
-
-  /**
-   * Adds new parameter.
-   */
-  public void addParameter(String name, String value) {
-    m_parameters.put(name, value);
-  }
-
-  /**
-   * @return the read only {@link Map} of parameters.
-   */
-  public Map<String, String> getParameters() {
-    return Collections.unmodifiableMap(m_parameters);
-  }
-
-  /**
-   * @return the value of parameter with given name.
-   */
-  public String getParameter(String name) {
-    return m_parameters.get(name);
-  }
-
-  /**
-   * @return <code>true</code> description has parameter with value "true".
-   */
-  public boolean hasTrueParameter(String name) {
-    String parameter = getParameter(name);
-    return "true".equals(parameter);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Morphing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final List<MorphingTargetDescription> m_morphingTargets = Lists.newArrayList();
-
-  /**
-   * @return the {@link MorphingTargetDescription}'s registered for this component.
-   */
-  public List<MorphingTargetDescription> getMorphingTargets() {
-    return m_morphingTargets;
-  }
-
-  /**
-   * Registers new {@link MorphingTargetDescription}.
-   */
-  public void addMorphingTarget(MorphingTargetDescription morphingTarget) {
-    m_morphingTargets.add(morphingTarget);
-  }
-
-  /**
-   * Clear registered {@link MorphingTargetDescription}'s list.
-   */
-  public void clearMorphingTargets() {
-    m_morphingTargets.clear();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Post processing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Post processing after loading complete.
-   */
-  public void postProcess() throws Exception {
-    // remove properties without editors
-    for (Iterator<GenericPropertyDescription> I = m_properties.iterator(); I.hasNext();) {
-      GenericPropertyDescription property = I.next();
-      if (property.getEditor() == null) {
-        I.remove();
-        m_idToProperty.remove(property.getId());
-      }
-    }
-    // ensure default creation
-    if (m_creations.isEmpty()) {
-      CreationDescription defaultCreation = new CreationDescription(this, null, null);
-      addCreation(defaultCreation);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Visiting
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void visit(XmlObjectInfo object, int state) throws Exception {
-    super.visit(object, state);
-    for (GenericPropertyDescription property : m_idToProperty.values()) {
-      property.visit(object, state);
-    }
-  }
+implements
+IComponentDescription {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ComponentDescription(Class<?> componentClass) {
+		m_componentClass = componentClass;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Component class
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final Class<?> m_componentClass;
+
+	@Override
+	public Class<?> getComponentClass() {
+		return m_componentClass;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI toolkit
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private ToolkitDescription m_toolkit;
+
+	@Override
+	public ToolkitDescription getToolkit() {
+		return m_toolkit;
+	}
+
+	/**
+	 * Sets the {@link ToolkitDescription} for this component.
+	 */
+	public void setToolkit(ToolkitDescription toolkit) {
+		m_toolkit = toolkit;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Model class
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Class<?> m_modelClass;
+
+	@Override
+	public Class<?> getModelClass() {
+		return m_modelClass;
+	}
+
+	/**
+	 * Sets the {@link Class} of {@link ObjectInfo} that should be used for this component.
+	 */
+	public void setModelClass(Class<?> modelClass) {
+		m_modelClass = modelClass;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Icon
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Image m_icon;
+
+	@Override
+	public Image getIcon() {
+		return m_icon;
+	}
+
+	/**
+	 * Sets the icon for this component.
+	 */
+	public void setIcon(Image icon) {
+		m_icon = icon;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Description
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private String m_description;
+
+	/**
+	 * @return the description text for this component.
+	 */
+	public String getDescription() {
+		return m_description;
+	}
+
+	/**
+	 * Sets the description text for this component.
+	 */
+	public void setDescription(String description) {
+		if (description != null) {
+			m_description = StringUtilities.normalizeWhitespaces(description);
+			m_description = StringUtils.replace(m_description, "\\n", "\n");
+		} else {
+			m_description = m_componentClass.getName();
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Caching presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private boolean m_presentationCached;
+
+	/**
+	 * @return <code>true</code> if {@link ComponentPresentation} for this
+	 *         {@link ComponentDescription} can be cached.
+	 */
+	public boolean isPresentationCached() {
+		return m_presentationCached;
+	}
+
+	/**
+	 * Specifies if {@link ComponentPresentation} for this {@link ComponentDescription} can be cached.
+	 */
+	public void setPresentationCached(boolean presentationCached) {
+		m_presentationCached = presentationCached;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Generic properties
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final List<GenericPropertyDescription> m_properties = Lists.newArrayList();
+	private final Map<String, GenericPropertyDescription> m_idToProperty = Maps.newHashMap();
+
+	/**
+	 * @return the {@link GenericPropertyDescription}'s of this component.
+	 */
+	public List<GenericPropertyDescription> getProperties() {
+		return Collections.unmodifiableList(m_properties);
+	}
+
+	/**
+	 * @return the {@link GenericPropertyDescription} with given id.
+	 */
+	public GenericPropertyDescription getProperty(String id) {
+		return m_idToProperty.get(id);
+	}
+
+	/**
+	 * Adds new {@link GenericPropertyDescription}.
+	 */
+	public void addProperty(GenericPropertyDescription property) {
+		String id = property.getId();
+		if (!m_idToProperty.containsKey(id)) {
+			m_idToProperty.put(id, property);
+			m_properties.add(property);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Creation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final Map<String, CreationDescription> m_creations = Maps.newHashMap();
+
+	/**
+	 * @return all {@link CreationDescription}'s.
+	 */
+	public List<CreationDescription> getCreations() {
+		return ImmutableList.copyOf(m_creations.values());
+	}
+
+	/**
+	 * @return the {@link CreationDescription} for this component with given ID.
+	 */
+	public CreationDescription getCreation(String id) {
+		return m_creations.get(id);
+	}
+
+	/**
+	 * Adds the {@link CreationDescription} for component with exactly same class.
+	 */
+	public void addCreation(CreationDescription creation) {
+		m_creations.put(creation.getId(), creation);
+	}
+
+	/**
+	 * Removes all existing {@link CreationDescription}'s.
+	 */
+	public void clearCreations() {
+		m_creations.clear();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parameters
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final Map<String, String> m_parameters = Maps.newTreeMap();
+
+	/**
+	 * Adds new parameter.
+	 */
+	public void addParameter(String name, String value) {
+		m_parameters.put(name, value);
+	}
+
+	/**
+	 * @return the read only {@link Map} of parameters.
+	 */
+	public Map<String, String> getParameters() {
+		return Collections.unmodifiableMap(m_parameters);
+	}
+
+	/**
+	 * @return the value of parameter with given name.
+	 */
+	public String getParameter(String name) {
+		return m_parameters.get(name);
+	}
+
+	/**
+	 * @return <code>true</code> description has parameter with value "true".
+	 */
+	public boolean hasTrueParameter(String name) {
+		String parameter = getParameter(name);
+		return "true".equals(parameter);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Morphing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final List<MorphingTargetDescription> m_morphingTargets = Lists.newArrayList();
+
+	/**
+	 * @return the {@link MorphingTargetDescription}'s registered for this component.
+	 */
+	public List<MorphingTargetDescription> getMorphingTargets() {
+		return m_morphingTargets;
+	}
+
+	/**
+	 * Registers new {@link MorphingTargetDescription}.
+	 */
+	public void addMorphingTarget(MorphingTargetDescription morphingTarget) {
+		m_morphingTargets.add(morphingTarget);
+	}
+
+	/**
+	 * Clear registered {@link MorphingTargetDescription}'s list.
+	 */
+	public void clearMorphingTargets() {
+		m_morphingTargets.clear();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Post processing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Post processing after loading complete.
+	 */
+	public void postProcess() throws Exception {
+		// remove properties without editors
+		for (Iterator<GenericPropertyDescription> I = m_properties.iterator(); I.hasNext();) {
+			GenericPropertyDescription property = I.next();
+			if (property.getEditor() == null) {
+				I.remove();
+				m_idToProperty.remove(property.getId());
+			}
+		}
+		// ensure default creation
+		if (m_creations.isEmpty()) {
+			CreationDescription defaultCreation = new CreationDescription(this, null, null);
+			addCreation(defaultCreation);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Visiting
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void visit(XmlObjectInfo object, int state) throws Exception {
+		super.visit(object, state);
+		for (GenericPropertyDescription property : m_idToProperty.values()) {
+			property.visit(object, state);
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/ComponentPresentationHelper.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/ComponentPresentationHelper.java
index ea5fb6e21..4d6281aa5 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/ComponentPresentationHelper.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/ComponentPresentationHelper.java
@@ -70,583 +70,583 @@
  * @coverage XML.model.description
  */
 public final class ComponentPresentationHelper {
-  public static final String PALETTE_PRELOAD_JOBS = "palette pre-load";
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private ComponentPresentationHelper() {
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final Map<String, ComponentPresentationCache> m_presentationCaches =
-      Maps.newHashMap();
-
-  /**
-   * @return the {@link ComponentPresentation} for component with given {@link Class}.
-   */
-  public static ComponentPresentation getPresentation(EditorContext context,
-      String componentClassName,
-      String creationId) throws Exception {
-    String key = getKey(componentClassName, creationId);
-    // try to find cached presentation
-    ComponentPresentation presentation = null;
-    {
-      ComponentPresentationCache cache = getCache(context);
-      presentation = cache.get(key);
-      if (presentation != null) {
-        return presentation;
-      }
-    }
-    Class<?> componentClass = context.getClassLoader().loadClass(componentClassName);
-    presentation = getFastPresentation(context, componentClass, creationId);
-    if (presentation != null) {
-      return presentation;
-    }
-    // fall back to slow implementation
-    return getSlowPresentation(context, componentClass, key);
-  }
-
-  private static ComponentPresentation getFastPresentation(EditorContext context,
-      Class<?> componentClass,
-      String creationId) throws Exception {
-    ILoadingContext loadingContext = context.getLoadingContext();
-    String componentClassName = componentClass.getName();
-    ResourceInfo resource =
-        DescriptionHelper.getComponentDescriptionResource(loadingContext, componentClass);
-    if (resource != null) {
-      // parse name and descriptions
-      ComponentParseHelper parseHelper = parseResource(resource.getURL());
-      if (creationId != null && !parseHelper.hasCreation(creationId)) {
-        return null;
-      }
-      // done, create presentation
-      String desc = parseHelper.getDescription(creationId);
-      String name = parseHelper.getName(componentClassName, creationId);
-      String key = getKey(componentClassName, creationId);
-      String toolkitId = getToolkitId(context, resource);
-      Image icon = getComponentImage(componentClass, creationId, loadingContext);
-      ComponentPresentation presentation =
-          new ComponentPresentation(key, toolkitId, name, desc, icon);
-      if (shouldCacheFast(resource.getBundle())) {
-        ComponentPresentationCache cache = getCache(context);
-        cache.put(presentation);
-      }
-      return presentation;
-    }
-    return null;
-  }
-
-  private static String getToolkitId(EditorContext context, ResourceInfo resource) {
-    ToolkitDescription toolkit = resource.getToolkit();
-    return toolkit == null ? context.getToolkit().getId() : toolkit.getId();
-  }
-
-  private static boolean shouldCacheFast(Bundle bundle) {
-    if (bundle != null) {
-      return bundle.getEntry("wbp-meta/.wbp-cache-presentations") != null;
-    }
-    return false;
-  }
-
-  private static Image getComponentImage(Class<?> clazz, String creationId, ILoadingContext context)
-      throws Exception {
-    String iconPath = getImageName(clazz.getName(), creationId);
-    Image image = DescriptionHelper.getIconImage(context, iconPath);
-    if (image == null) {
-      // no image for this type, use super type
-      return getComponentImage(clazz.getSuperclass(), null/*use default id*/, context);
-    }
-    return image;
-  }
-
-  private static Image getComponentImage(Bundle bundle, String componentClassName, String creationId)
-      throws Exception {
-    String iconPath = "/wbp-meta/" + getImageName(componentClassName, creationId);
-    for (String ext : DescriptionHelper.ICON_EXTS) {
-      String iconName = iconPath + ext;
-      URL entry = bundle.getEntry(iconName);
-      if (entry != null) {
-        InputStream stream = entry.openStream();
-        try {
-          return new Image(null, stream);
-        } finally {
-          stream.close();
-        }
-      }
-    }
-    // not found
-    return null;
-  }
-
-  private static String getImageName(String componentClassName, String creationId) {
-    String imageName = componentClassName.replace('.', '/');
-    String iconPath = creationId == null ? imageName : imageName + "_" + creationId;
-    return iconPath;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Slow way
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static ComponentPresentation getSlowPresentation(EditorContext context,
-      Class<?> componentClass,
-      String requiredKey) throws Exception {
-    ComponentPresentation presentationForKey = null;
-    ComponentDescription componentDescription =
-        ComponentDescriptionHelper.getDescription(context, componentClass);
-    for (CreationDescription creationDescription : componentDescription.getCreations()) {
-      ComponentPresentation presentation =
-          createPresentation(componentDescription, creationDescription);
-      // cache if allowed
-      if (componentDescription.isPresentationCached()) {
-        ComponentPresentationCache cache = getCache(context);
-        cache.put(presentation);
-      }
-      // check for required presentation
-      if (requiredKey.equals(presentation.getKey())) {
-        presentationForKey = presentation;
-      }
-    }
-    // done
-    return presentationForKey;
-  }
-
-  private static ComponentPresentation createPresentation(ComponentDescription componentDescription,
-      CreationDescription creationDescription) {
-    String componentKey = componentDescription.getComponentClass().getName();
-    String key = componentKey + " " + creationDescription.getId();
-    String toolkitId = componentDescription.getToolkit().getId();
-    String name = creationDescription.getName();
-    String description = creationDescription.getDescription();
-    Image icon = UiUtils.getCopy(creationDescription.getIcon());
-    return new ComponentPresentation(key, toolkitId, name, description, icon);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parsing component-related resources
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static ComponentParseHelper parseResource(URL url) throws Exception {
-    String xml = IOUtils2.readString(url.openStream());
-    ComponentParseHelper parseHelper = new ComponentParseHelper(xml);
-    QParser.parse(new StringReader(xml), parseHelper);
-    return parseHelper;
-  }
-
-  private static final class ComponentParseHelper extends QHandlerAdapter {
-    private String m_currentId = null;
-    private final Map<String, String> m_descriptions = Maps.newHashMap();
-    private final Map<String, String> m_names = Maps.newHashMap();
-    //
-    private final String m_xml;
-    private int m_descStart;
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public ComponentParseHelper(String xml) {
-      m_xml = xml;
-    }
-
-    @Override
-    public void startElement(int offset,
-        int length,
-        String name,
-        Map<String, String> attributes,
-        List<QAttribute> attrList,
-        boolean closed) throws Exception {
-      if ("description".equals(name)) {
-        m_descStart = offset + length;
-      }
-      if ("creation".equals(name)) {
-        String id = attributes.get("id");
-        m_currentId = id;
-        String compName = attributes.get("name");
-        m_names.put(id, compName);
-      }
-    }
-
-    @Override
-    public void endElement(int offset, int endOffset, String name) throws Exception {
-      if ("description".equals(name)) {
-        String description = m_xml.substring(m_descStart, offset);
-        description = StringUtilities.normalizeWhitespaces(description);
-        description = StringUtils.replace(description, "\\n", "\n");
-        m_descriptions.put(m_currentId, description);
-      }
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Access
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public boolean hasCreation(String creationId) {
-      return m_names.containsKey(creationId);
-    }
-
-    public String getName(String className, String creationId) {
-      String name = m_names.get(creationId);
-      if (name == null) {
-        name = CodeUtils.getShortClass(className);
-      }
-      return name;
-    }
-
-    public String getDescription(String creationId) {
-      String desc = m_descriptions.get(creationId);
-      if (desc == null) {
-        return "";
-      }
-      return desc;
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Cache
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static String getKey(String componentClassName, String creationId) {
-    return componentClassName + " " + creationId;
-  }
-
-  private static ComponentPresentationCache getCache(EditorContext context) throws Exception {
-    String toolkitId = context.getToolkit().getId();
-    return getCache(toolkitId);
-  }
-
-  private static ComponentPresentationCache getCache(String toolkitId) throws Exception {
-    synchronized (m_presentationCaches) {
-      ComponentPresentationCache cache = m_presentationCaches.get(toolkitId);
-      if (cache == null) {
-        cache = new ComponentPresentationCache(toolkitId);
-        m_presentationCaches.put(toolkitId, cache);
-        cache.load();
-      }
-      return cache;
-    }
-  }
-
-  /**
-   * Cache for {@link ComponentPresentation}s.
-   */
-  private static class ComponentPresentationCache {
-    private final String m_toolkitId;
-    private final List<Bundle> m_bundles = Lists.newArrayList();
-    private final Set<String> m_bundleCheckSums = Sets.newHashSet();
-    private final File m_cacheFile;
-    private final Map<String, ComponentPresentation> m_presentations = Maps.newHashMap();
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public ComponentPresentationCache(String toolkitId) throws Exception {
-      m_toolkitId = toolkitId;
-      m_cacheFile = getCacheFile();
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Access
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public ComponentPresentation get(String key) {
-      return m_presentations.get(key);
-    }
-
-    public void put(ComponentPresentation presentation) throws Exception {
-      m_presentations.put(presentation.getKey(), presentation);
-      writeCacheEntry(presentation);
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Loading
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public void load() {
-      try {
-        prepareBundles();
-        prepareBundleCheckSums();
-        ensureCacheExistsAndNotStale();
-        loadFromCacheFile();
-      } catch (Throwable e) {
-        DesignerPlugin.log(e);
-        try {
-          m_cacheFile.delete();
-        } catch (Throwable e2) {
-        }
-      }
-    }
-
-    private void loadFromCacheFile() throws Exception {
-      InputStream stream = new FileInputStream(m_cacheFile);
-      try {
-        stream = new BufferedInputStream(stream);
-        loadFromStream(stream);
-      } finally {
-        IOUtils.closeQuietly(stream);
-      }
-    }
-
-    private void loadFromStream(InputStream inputStream) throws Exception {
-      DataInputStream dataInput = new DataInputStream(inputStream);
-      // skip check sums
-      readCheckSums(dataInput);
-      // read records
-      while (true) {
-        try {
-          String key = dataInput.readUTF();
-          String toolkitId = dataInput.readUTF();
-          String name = dataInput.readUTF();
-          String description = dataInput.readUTF();
-          byte[] iconBytes;
-          {
-            int bytesLength = dataInput.readInt();
-            iconBytes = new byte[bytesLength];
-            dataInput.readFully(iconBytes);
-          }
-          ComponentPresentation presentation =
-              new ComponentPresentation(key, toolkitId, name, description, iconBytes);
-          m_presentations.put(key, presentation);
-        } catch (EOFException e) {
-          break;
-        }
-      }
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Writing
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    private void writeCacheEntry(ComponentPresentation presentation) throws Exception {
-      RandomAccessFile randomAccessFile = new RandomAccessFile(m_cacheFile, "rw");
-      try {
-        randomAccessFile.seek(randomAccessFile.length());
-        randomAccessFile.writeUTF(presentation.getKey());
-        randomAccessFile.writeUTF(presentation.getToolkitId());
-        randomAccessFile.writeUTF(presentation.getName());
-        randomAccessFile.writeUTF(presentation.getDescription());
-        {
-          byte[] bytes = ImageUtils.getBytesPNG(presentation.getIcon());
-          randomAccessFile.writeInt(bytes.length);
-          randomAccessFile.write(bytes);
-        }
-      } finally {
-        randomAccessFile.close();
-      }
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Bundles
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    private void prepareBundles() {
-      for (IConfigurationElement toolkitElement : DescriptionHelper.getToolkitElements(m_toolkitId)) {
-        Bundle bundle = ExternalFactoriesHelper.getExtensionBundle(toolkitElement);
-        m_bundles.add(bundle);
-      }
-    }
-
-    private void prepareBundleCheckSums() throws Exception {
-      for (Bundle bundle : m_bundles) {
-        URL presentationsResource = bundle.getEntry("wbp-meta/.wbp-cache-presentations");
-        if (presentationsResource != null) {
-          String checkSum = IOUtils2.readString(presentationsResource.openStream());
-          m_bundleCheckSums.add(checkSum);
-        }
-      }
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Cache file management
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    private File getCacheFile() throws Exception {
-      File stateDirectory = DesignerPlugin.getDefault().getStateLocation().toFile();
-      File descriptionsDirectory = new File(stateDirectory, "descriptions");
-      FileUtils.forceMkdir(descriptionsDirectory);
-      return new File(descriptionsDirectory, m_toolkitId + ".cached-presentations-xml.dat");
-    }
-
-    private boolean cacheExistsAndNotStale() {
-      try {
-        if (m_cacheFile.exists()) {
-          // check that not stale
-          Set<String> cacheCheckSums = getCacheCheckSums();
-          if (m_bundleCheckSums.equals(cacheCheckSums)) {
-            return true;
-          }
-        }
-      } catch (Throwable e) {
-      }
-      return false;
-    }
-
-    private void ensureCacheExistsAndNotStale() throws Exception {
-      if (!cacheExistsAndNotStale()) {
-        try {
-          m_cacheFile.delete();
-        } catch (Throwable e2) {
-        }
-      }
-      // create new
-      if (!m_cacheFile.exists()) {
-        createNewCacheFile();
-      }
-    }
-
-    private void createNewCacheFile() throws Exception {
-      OutputStream outputStream = new BufferedOutputStream(new FileOutputStream(m_cacheFile));
-      DataOutputStream dataOutput = new DataOutputStream(outputStream);
-      try {
-        dataOutput.writeInt(m_bundleCheckSums.size());
-        for (String checkSum : m_bundleCheckSums) {
-          dataOutput.writeUTF(checkSum);
-        }
-      } finally {
-        IOUtils.closeQuietly(dataOutput);
-      }
-    }
-
-    private Set<String> getCacheCheckSums() throws Exception {
-      InputStream inputStream = new FileInputStream(m_cacheFile);
-      try {
-        inputStream = new BufferedInputStream(inputStream);
-        DataInputStream dataInput = new DataInputStream(inputStream);
-        return readCheckSums(dataInput);
-      } finally {
-        IOUtils.closeQuietly(inputStream);
-      }
-    }
-
-    private static Set<String> readCheckSums(DataInputStream dataInput) throws IOException {
-      Set<String> checkSums = Sets.newHashSet();
-      int sumCount = dataInput.readInt();
-      for (int i = 0; i < sumCount; i++) {
-        String checkSum = dataInput.readUTF();
-        checkSums.add(checkSum);
-      }
-      return checkSums;
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Perform light scanning and fill cache for all available entries
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Creates and schedules the job for pre-loading the cache of presentations based on toolkit name.
-   */
-  public static void scheduleFillingPresentationCache(final String toolkitId) {
-    Job job = new Job("Updating WindowBuilder palette...") {
-      @Override
-      protected IStatus run(IProgressMonitor monitor) {
-        try {
-          // ensure cache
-          ComponentPresentationCache cache = getCache(toolkitId);
-          if (monitor.isCanceled()) {
-            // it OK
-            return Status.OK_STATUS;
-          }
-          // proceed with presentations
-          fillPresentations(cache, toolkitId, monitor);
-        } catch (Exception e) {
-          DesignerPlugin.log(e);
-        }
-        return Status.OK_STATUS;
-      }
-
-      @Override
-      public boolean belongsTo(Object family) {
-        return PALETTE_PRELOAD_JOBS.equals(family);
-      }
-    };
-    job.schedule();
-  }
-
-  private static void fillPresentations(ComponentPresentationCache cache,
-      String toolkitId,
-      IProgressMonitor monitor) throws Exception {
-    Map<Bundle, List<IConfigurationElement>> bundles = Maps.newHashMap();
-    // prepare bundles and entries
-    for (IConfigurationElement toolkitElement : DescriptionHelper.getToolkitElements(toolkitId)) {
-      IConfigurationElement[] elements = toolkitElement.getChildren("palette");
-      List<IConfigurationElement> paletteElements = Lists.newArrayList();
-      Collections.addAll(paletteElements, elements);
-      bundles.put(ExternalFactoriesHelper.getExtensionBundle(toolkitElement), paletteElements);
-    }
-    // traverse and fetch presentations
-    for (Map.Entry<Bundle, List<IConfigurationElement>> entry : bundles.entrySet()) {
-      Bundle bundle = entry.getKey();
-      for (IConfigurationElement paletteElement : entry.getValue()) {
-        for (IConfigurationElement categoryElement : paletteElement.getChildren("category")) {
-          for (IConfigurationElement element : categoryElement.getChildren()) {
-            // get 'component's only
-            if ("component".equals(element.getName())) {
-              String className = ExternalFactoriesHelper.getRequiredAttribute(element, "class");
-              String creationId = element.getAttribute("creationId");
-              if (monitor.isCanceled()) {
-                return;
-              }
-              fetchLightPresentation(bundle, cache, toolkitId, className, creationId);
-            }
-          }
-        }
-      }
-    }
-  }
-
-  /**
-   * Finds and parses *.wbp-component.xml files. If none found or an icon is absent then does
-   * nothing.
-   */
-  private static void fetchLightPresentation(Bundle bundle,
-      ComponentPresentationCache cache,
-      String toolkitId,
-      String componentClassName,
-      String creationId) throws Exception {
-    if (cache.get(getKey(componentClassName, creationId)) != null) {
-      // already in cache, don't parse
-      return;
-    }
-    // parse name and descriptions
-    String resourceName =
-        "/wbp-meta/" + componentClassName.replace('.', '/') + ".wbp-component.xml";
-    URL resourceEntry = bundle.getEntry(resourceName);
-    if (resourceEntry != null) {
-      // parse
-      ComponentParseHelper parseHelper = parseResource(resourceEntry);
-      // done, create presentation
-      String desc = parseHelper.getDescription(creationId);
-      String name = parseHelper.getName(componentClassName, creationId);
-      String key = getKey(componentClassName, creationId);
-      Image icon = getComponentImage(bundle, componentClassName, creationId);
-      if (icon == null) {
-        // no image -- no presentation ;)
-        return;
-      }
-      ComponentPresentation presentation =
-          new ComponentPresentation(key, toolkitId, name, desc, icon);
-      cache.put(presentation);
-    }
-  }
+	public static final String PALETTE_PRELOAD_JOBS = "palette pre-load";
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private ComponentPresentationHelper() {
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final Map<String, ComponentPresentationCache> m_presentationCaches =
+			Maps.newHashMap();
+
+	/**
+	 * @return the {@link ComponentPresentation} for component with given {@link Class}.
+	 */
+	public static ComponentPresentation getPresentation(EditorContext context,
+			String componentClassName,
+			String creationId) throws Exception {
+		String key = getKey(componentClassName, creationId);
+		// try to find cached presentation
+		ComponentPresentation presentation = null;
+		{
+			ComponentPresentationCache cache = getCache(context);
+			presentation = cache.get(key);
+			if (presentation != null) {
+				return presentation;
+			}
+		}
+		Class<?> componentClass = context.getClassLoader().loadClass(componentClassName);
+		presentation = getFastPresentation(context, componentClass, creationId);
+		if (presentation != null) {
+			return presentation;
+		}
+		// fall back to slow implementation
+		return getSlowPresentation(context, componentClass, key);
+	}
+
+	private static ComponentPresentation getFastPresentation(EditorContext context,
+			Class<?> componentClass,
+			String creationId) throws Exception {
+		ILoadingContext loadingContext = context.getLoadingContext();
+		String componentClassName = componentClass.getName();
+		ResourceInfo resource =
+				DescriptionHelper.getComponentDescriptionResource(loadingContext, componentClass);
+		if (resource != null) {
+			// parse name and descriptions
+			ComponentParseHelper parseHelper = parseResource(resource.getURL());
+			if (creationId != null && !parseHelper.hasCreation(creationId)) {
+				return null;
+			}
+			// done, create presentation
+			String desc = parseHelper.getDescription(creationId);
+			String name = parseHelper.getName(componentClassName, creationId);
+			String key = getKey(componentClassName, creationId);
+			String toolkitId = getToolkitId(context, resource);
+			Image icon = getComponentImage(componentClass, creationId, loadingContext);
+			ComponentPresentation presentation =
+					new ComponentPresentation(key, toolkitId, name, desc, icon);
+			if (shouldCacheFast(resource.getBundle())) {
+				ComponentPresentationCache cache = getCache(context);
+				cache.put(presentation);
+			}
+			return presentation;
+		}
+		return null;
+	}
+
+	private static String getToolkitId(EditorContext context, ResourceInfo resource) {
+		ToolkitDescription toolkit = resource.getToolkit();
+		return toolkit == null ? context.getToolkit().getId() : toolkit.getId();
+	}
+
+	private static boolean shouldCacheFast(Bundle bundle) {
+		if (bundle != null) {
+			return bundle.getEntry("wbp-meta/.wbp-cache-presentations") != null;
+		}
+		return false;
+	}
+
+	private static Image getComponentImage(Class<?> clazz, String creationId, ILoadingContext context)
+			throws Exception {
+		String iconPath = getImageName(clazz.getName(), creationId);
+		Image image = DescriptionHelper.getIconImage(context, iconPath);
+		if (image == null) {
+			// no image for this type, use super type
+			return getComponentImage(clazz.getSuperclass(), null/*use default id*/, context);
+		}
+		return image;
+	}
+
+	private static Image getComponentImage(Bundle bundle, String componentClassName, String creationId)
+			throws Exception {
+		String iconPath = "/wbp-meta/" + getImageName(componentClassName, creationId);
+		for (String ext : DescriptionHelper.ICON_EXTS) {
+			String iconName = iconPath + ext;
+			URL entry = bundle.getEntry(iconName);
+			if (entry != null) {
+				InputStream stream = entry.openStream();
+				try {
+					return new Image(null, stream);
+				} finally {
+					stream.close();
+				}
+			}
+		}
+		// not found
+		return null;
+	}
+
+	private static String getImageName(String componentClassName, String creationId) {
+		String imageName = componentClassName.replace('.', '/');
+		String iconPath = creationId == null ? imageName : imageName + "_" + creationId;
+		return iconPath;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Slow way
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static ComponentPresentation getSlowPresentation(EditorContext context,
+			Class<?> componentClass,
+			String requiredKey) throws Exception {
+		ComponentPresentation presentationForKey = null;
+		ComponentDescription componentDescription =
+				ComponentDescriptionHelper.getDescription(context, componentClass);
+		for (CreationDescription creationDescription : componentDescription.getCreations()) {
+			ComponentPresentation presentation =
+					createPresentation(componentDescription, creationDescription);
+			// cache if allowed
+			if (componentDescription.isPresentationCached()) {
+				ComponentPresentationCache cache = getCache(context);
+				cache.put(presentation);
+			}
+			// check for required presentation
+			if (requiredKey.equals(presentation.getKey())) {
+				presentationForKey = presentation;
+			}
+		}
+		// done
+		return presentationForKey;
+	}
+
+	private static ComponentPresentation createPresentation(ComponentDescription componentDescription,
+			CreationDescription creationDescription) {
+		String componentKey = componentDescription.getComponentClass().getName();
+		String key = componentKey + " " + creationDescription.getId();
+		String toolkitId = componentDescription.getToolkit().getId();
+		String name = creationDescription.getName();
+		String description = creationDescription.getDescription();
+		Image icon = UiUtils.getCopy(creationDescription.getIcon());
+		return new ComponentPresentation(key, toolkitId, name, description, icon);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parsing component-related resources
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static ComponentParseHelper parseResource(URL url) throws Exception {
+		String xml = IOUtils2.readString(url.openStream());
+		ComponentParseHelper parseHelper = new ComponentParseHelper(xml);
+		QParser.parse(new StringReader(xml), parseHelper);
+		return parseHelper;
+	}
+
+	private static final class ComponentParseHelper extends QHandlerAdapter {
+		private String m_currentId = null;
+		private final Map<String, String> m_descriptions = Maps.newHashMap();
+		private final Map<String, String> m_names = Maps.newHashMap();
+		//
+		private final String m_xml;
+		private int m_descStart;
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public ComponentParseHelper(String xml) {
+			m_xml = xml;
+		}
+
+		@Override
+		public void startElement(int offset,
+				int length,
+				String name,
+				Map<String, String> attributes,
+				List<QAttribute> attrList,
+				boolean closed) throws Exception {
+			if ("description".equals(name)) {
+				m_descStart = offset + length;
+			}
+			if ("creation".equals(name)) {
+				String id = attributes.get("id");
+				m_currentId = id;
+				String compName = attributes.get("name");
+				m_names.put(id, compName);
+			}
+		}
+
+		@Override
+		public void endElement(int offset, int endOffset, String name) throws Exception {
+			if ("description".equals(name)) {
+				String description = m_xml.substring(m_descStart, offset);
+				description = StringUtilities.normalizeWhitespaces(description);
+				description = StringUtils.replace(description, "\\n", "\n");
+				m_descriptions.put(m_currentId, description);
+			}
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Access
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public boolean hasCreation(String creationId) {
+			return m_names.containsKey(creationId);
+		}
+
+		public String getName(String className, String creationId) {
+			String name = m_names.get(creationId);
+			if (name == null) {
+				name = CodeUtils.getShortClass(className);
+			}
+			return name;
+		}
+
+		public String getDescription(String creationId) {
+			String desc = m_descriptions.get(creationId);
+			if (desc == null) {
+				return "";
+			}
+			return desc;
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Cache
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static String getKey(String componentClassName, String creationId) {
+		return componentClassName + " " + creationId;
+	}
+
+	private static ComponentPresentationCache getCache(EditorContext context) throws Exception {
+		String toolkitId = context.getToolkit().getId();
+		return getCache(toolkitId);
+	}
+
+	private static ComponentPresentationCache getCache(String toolkitId) throws Exception {
+		synchronized (m_presentationCaches) {
+			ComponentPresentationCache cache = m_presentationCaches.get(toolkitId);
+			if (cache == null) {
+				cache = new ComponentPresentationCache(toolkitId);
+				m_presentationCaches.put(toolkitId, cache);
+				cache.load();
+			}
+			return cache;
+		}
+	}
+
+	/**
+	 * Cache for {@link ComponentPresentation}s.
+	 */
+	private static class ComponentPresentationCache {
+		private final String m_toolkitId;
+		private final List<Bundle> m_bundles = Lists.newArrayList();
+		private final Set<String> m_bundleCheckSums = Sets.newHashSet();
+		private final File m_cacheFile;
+		private final Map<String, ComponentPresentation> m_presentations = Maps.newHashMap();
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public ComponentPresentationCache(String toolkitId) throws Exception {
+			m_toolkitId = toolkitId;
+			m_cacheFile = getCacheFile();
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Access
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public ComponentPresentation get(String key) {
+			return m_presentations.get(key);
+		}
+
+		public void put(ComponentPresentation presentation) throws Exception {
+			m_presentations.put(presentation.getKey(), presentation);
+			writeCacheEntry(presentation);
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Loading
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public void load() {
+			try {
+				prepareBundles();
+				prepareBundleCheckSums();
+				ensureCacheExistsAndNotStale();
+				loadFromCacheFile();
+			} catch (Throwable e) {
+				DesignerPlugin.log(e);
+				try {
+					m_cacheFile.delete();
+				} catch (Throwable e2) {
+				}
+			}
+		}
+
+		private void loadFromCacheFile() throws Exception {
+			InputStream stream = new FileInputStream(m_cacheFile);
+			try {
+				stream = new BufferedInputStream(stream);
+				loadFromStream(stream);
+			} finally {
+				IOUtils.closeQuietly(stream);
+			}
+		}
+
+		private void loadFromStream(InputStream inputStream) throws Exception {
+			DataInputStream dataInput = new DataInputStream(inputStream);
+			// skip check sums
+			readCheckSums(dataInput);
+			// read records
+			while (true) {
+				try {
+					String key = dataInput.readUTF();
+					String toolkitId = dataInput.readUTF();
+					String name = dataInput.readUTF();
+					String description = dataInput.readUTF();
+					byte[] iconBytes;
+					{
+						int bytesLength = dataInput.readInt();
+						iconBytes = new byte[bytesLength];
+						dataInput.readFully(iconBytes);
+					}
+					ComponentPresentation presentation =
+							new ComponentPresentation(key, toolkitId, name, description, iconBytes);
+					m_presentations.put(key, presentation);
+				} catch (EOFException e) {
+					break;
+				}
+			}
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Writing
+		//
+		////////////////////////////////////////////////////////////////////////////
+		private void writeCacheEntry(ComponentPresentation presentation) throws Exception {
+			RandomAccessFile randomAccessFile = new RandomAccessFile(m_cacheFile, "rw");
+			try {
+				randomAccessFile.seek(randomAccessFile.length());
+				randomAccessFile.writeUTF(presentation.getKey());
+				randomAccessFile.writeUTF(presentation.getToolkitId());
+				randomAccessFile.writeUTF(presentation.getName());
+				randomAccessFile.writeUTF(presentation.getDescription());
+				{
+					byte[] bytes = ImageUtils.getBytesPNG(presentation.getIcon());
+					randomAccessFile.writeInt(bytes.length);
+					randomAccessFile.write(bytes);
+				}
+			} finally {
+				randomAccessFile.close();
+			}
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Bundles
+		//
+		////////////////////////////////////////////////////////////////////////////
+		private void prepareBundles() {
+			for (IConfigurationElement toolkitElement : DescriptionHelper.getToolkitElements(m_toolkitId)) {
+				Bundle bundle = ExternalFactoriesHelper.getExtensionBundle(toolkitElement);
+				m_bundles.add(bundle);
+			}
+		}
+
+		private void prepareBundleCheckSums() throws Exception {
+			for (Bundle bundle : m_bundles) {
+				URL presentationsResource = bundle.getEntry("wbp-meta/.wbp-cache-presentations");
+				if (presentationsResource != null) {
+					String checkSum = IOUtils2.readString(presentationsResource.openStream());
+					m_bundleCheckSums.add(checkSum);
+				}
+			}
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Cache file management
+		//
+		////////////////////////////////////////////////////////////////////////////
+		private File getCacheFile() throws Exception {
+			File stateDirectory = DesignerPlugin.getDefault().getStateLocation().toFile();
+			File descriptionsDirectory = new File(stateDirectory, "descriptions");
+			FileUtils.forceMkdir(descriptionsDirectory);
+			return new File(descriptionsDirectory, m_toolkitId + ".cached-presentations-xml.dat");
+		}
+
+		private boolean cacheExistsAndNotStale() {
+			try {
+				if (m_cacheFile.exists()) {
+					// check that not stale
+					Set<String> cacheCheckSums = getCacheCheckSums();
+					if (m_bundleCheckSums.equals(cacheCheckSums)) {
+						return true;
+					}
+				}
+			} catch (Throwable e) {
+			}
+			return false;
+		}
+
+		private void ensureCacheExistsAndNotStale() throws Exception {
+			if (!cacheExistsAndNotStale()) {
+				try {
+					m_cacheFile.delete();
+				} catch (Throwable e2) {
+				}
+			}
+			// create new
+			if (!m_cacheFile.exists()) {
+				createNewCacheFile();
+			}
+		}
+
+		private void createNewCacheFile() throws Exception {
+			OutputStream outputStream = new BufferedOutputStream(new FileOutputStream(m_cacheFile));
+			DataOutputStream dataOutput = new DataOutputStream(outputStream);
+			try {
+				dataOutput.writeInt(m_bundleCheckSums.size());
+				for (String checkSum : m_bundleCheckSums) {
+					dataOutput.writeUTF(checkSum);
+				}
+			} finally {
+				IOUtils.closeQuietly(dataOutput);
+			}
+		}
+
+		private Set<String> getCacheCheckSums() throws Exception {
+			InputStream inputStream = new FileInputStream(m_cacheFile);
+			try {
+				inputStream = new BufferedInputStream(inputStream);
+				DataInputStream dataInput = new DataInputStream(inputStream);
+				return readCheckSums(dataInput);
+			} finally {
+				IOUtils.closeQuietly(inputStream);
+			}
+		}
+
+		private static Set<String> readCheckSums(DataInputStream dataInput) throws IOException {
+			Set<String> checkSums = Sets.newHashSet();
+			int sumCount = dataInput.readInt();
+			for (int i = 0; i < sumCount; i++) {
+				String checkSum = dataInput.readUTF();
+				checkSums.add(checkSum);
+			}
+			return checkSums;
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Perform light scanning and fill cache for all available entries
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Creates and schedules the job for pre-loading the cache of presentations based on toolkit name.
+	 */
+	public static void scheduleFillingPresentationCache(final String toolkitId) {
+		Job job = new Job("Updating WindowBuilder palette...") {
+			@Override
+			protected IStatus run(IProgressMonitor monitor) {
+				try {
+					// ensure cache
+					ComponentPresentationCache cache = getCache(toolkitId);
+					if (monitor.isCanceled()) {
+						// it OK
+						return Status.OK_STATUS;
+					}
+					// proceed with presentations
+					fillPresentations(cache, toolkitId, monitor);
+				} catch (Exception e) {
+					DesignerPlugin.log(e);
+				}
+				return Status.OK_STATUS;
+			}
+
+			@Override
+			public boolean belongsTo(Object family) {
+				return PALETTE_PRELOAD_JOBS.equals(family);
+			}
+		};
+		job.schedule();
+	}
+
+	private static void fillPresentations(ComponentPresentationCache cache,
+			String toolkitId,
+			IProgressMonitor monitor) throws Exception {
+		Map<Bundle, List<IConfigurationElement>> bundles = Maps.newHashMap();
+		// prepare bundles and entries
+		for (IConfigurationElement toolkitElement : DescriptionHelper.getToolkitElements(toolkitId)) {
+			IConfigurationElement[] elements = toolkitElement.getChildren("palette");
+			List<IConfigurationElement> paletteElements = Lists.newArrayList();
+			Collections.addAll(paletteElements, elements);
+			bundles.put(ExternalFactoriesHelper.getExtensionBundle(toolkitElement), paletteElements);
+		}
+		// traverse and fetch presentations
+		for (Map.Entry<Bundle, List<IConfigurationElement>> entry : bundles.entrySet()) {
+			Bundle bundle = entry.getKey();
+			for (IConfigurationElement paletteElement : entry.getValue()) {
+				for (IConfigurationElement categoryElement : paletteElement.getChildren("category")) {
+					for (IConfigurationElement element : categoryElement.getChildren()) {
+						// get 'component's only
+						if ("component".equals(element.getName())) {
+							String className = ExternalFactoriesHelper.getRequiredAttribute(element, "class");
+							String creationId = element.getAttribute("creationId");
+							if (monitor.isCanceled()) {
+								return;
+							}
+							fetchLightPresentation(bundle, cache, toolkitId, className, creationId);
+						}
+					}
+				}
+			}
+		}
+	}
+
+	/**
+	 * Finds and parses *.wbp-component.xml files. If none found or an icon is absent then does
+	 * nothing.
+	 */
+	private static void fetchLightPresentation(Bundle bundle,
+			ComponentPresentationCache cache,
+			String toolkitId,
+			String componentClassName,
+			String creationId) throws Exception {
+		if (cache.get(getKey(componentClassName, creationId)) != null) {
+			// already in cache, don't parse
+			return;
+		}
+		// parse name and descriptions
+		String resourceName =
+				"/wbp-meta/" + componentClassName.replace('.', '/') + ".wbp-component.xml";
+		URL resourceEntry = bundle.getEntry(resourceName);
+		if (resourceEntry != null) {
+			// parse
+			ComponentParseHelper parseHelper = parseResource(resourceEntry);
+			// done, create presentation
+			String desc = parseHelper.getDescription(creationId);
+			String name = parseHelper.getName(componentClassName, creationId);
+			String key = getKey(componentClassName, creationId);
+			Image icon = getComponentImage(bundle, componentClassName, creationId);
+			if (icon == null) {
+				// no image -- no presentation ;)
+				return;
+			}
+			ComponentPresentation presentation =
+					new ComponentPresentation(key, toolkitId, name, desc, icon);
+			cache.put(presentation);
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/CreationAttributeDescription.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/CreationAttributeDescription.java
index 7b8463825..eac228a0c 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/CreationAttributeDescription.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/CreationAttributeDescription.java
@@ -19,46 +19,46 @@
  * @coverage XML.model.description
  */
 public final class CreationAttributeDescription extends AbstractDescription {
-  private final String m_namespace;
-  private final String m_name;
-  private final String m_value;
+	private final String m_namespace;
+	private final String m_name;
+	private final String m_value;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CreationAttributeDescription(String namespace, String name, String value) {
-    m_namespace = namespace;
-    m_name = name;
-    m_value = value;
-    Assert.isNotNull(name, "No x-attribute name.");
-    Assert.isNotNull(value, "No x-attribute value.");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CreationAttributeDescription(String namespace, String name, String value) {
+		m_namespace = namespace;
+		m_name = name;
+		m_value = value;
+		Assert.isNotNull(name, "No x-attribute name.");
+		Assert.isNotNull(value, "No x-attribute value.");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the optional namespace, may be <code>null</code>.
-   */
-  public String getNamespace() {
-    return m_namespace;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the optional namespace, may be <code>null</code>.
+	 */
+	public String getNamespace() {
+		return m_namespace;
+	}
 
-  /**
-   * @return the simple name of attribute, not <code>null</code>.
-   */
-  public String getName() {
-    return m_name;
-  }
+	/**
+	 * @return the simple name of attribute, not <code>null</code>.
+	 */
+	public String getName() {
+		return m_name;
+	}
 
-  /**
-   * @return the name of attribute, not <code>null</code>.
-   */
-  public String getValue() {
-    return m_value;
-  }
+	/**
+	 * @return the name of attribute, not <code>null</code>.
+	 */
+	public String getValue() {
+		return m_value;
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/CreationDescription.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/CreationDescription.java
index 006edb47f..7040e07de 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/CreationDescription.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/CreationDescription.java
@@ -29,151 +29,151 @@
  * @coverage XML.model.description
  */
 public final class CreationDescription extends AbstractDescription {
-  private final ComponentDescription m_componentDescription;
-  private final Class<?> m_componentClass;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CreationDescription(ComponentDescription componentDescription, String id, String name) {
-    m_componentDescription = componentDescription;
-    m_componentClass = componentDescription.getComponentClass();
-    m_id = id;
-    m_name = name != null ? name : CodeUtils.getShortClass(m_componentClass.getName());
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // id
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final String m_id;
-
-  /**
-   * @return identifier of this creation.
-   */
-  public String getId() {
-    return m_id;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // icon
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Image m_icon;
-
-  /**
-   * @return the icon of this creation for displaying for user.
-   */
-  public Image getIcon() {
-    return m_icon != null ? m_icon : m_componentDescription.getIcon();
-  }
-
-  /**
-   * Sets the icon of this creation for displaying for user.
-   */
-  public void setIcon(Image icon) {
-    m_icon = icon;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // name
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final String m_name;
-
-  /**
-   * @return the name of this creation for displaying for user.
-   */
-  public String getName() {
-    return m_name;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // description
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private String m_description;
-
-  /**
-   * @return the description of this creation for displaying for user.
-   */
-  public String getDescription() {
-    return m_description != null ? m_description : m_componentDescription.getDescription();
-  }
-
-  /**
-   * Sets the description of this creation for displaying for user.
-   */
-  public void setDescription(String description) {
-    m_description = description != null ? StringUtilities.normalizeWhitespaces(description) : null;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Attributes
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final List<CreationAttributeDescription> m_attributes = Lists.newArrayList();
-
-  /**
-   * @return attributes to set on creation.
-   */
-  public List<CreationAttributeDescription> getAttributes() {
-    return m_attributes;
-  }
-
-  /**
-   * Adds new {@link CreationAttributeDescription}.
-   */
-  public void addAttribute(CreationAttributeDescription attribute) {
-    m_attributes.add(attribute);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Content
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private String m_content;
-
-  /**
-   * @return the text to use as content of element on creation.
-   */
-  public String getContent() {
-    return m_content;
-  }
-
-  /**
-   * Sets the text to use as content of element on creation.
-   */
-  public void setContent(String content) {
-    m_content = content;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parameters
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final Map<String, String> m_parameters = Maps.newTreeMap();
-
-  /**
-   * @return the {@link CreationDescription} specific parameters.
-   */
-  public Map<String, String> getParameters() {
-    return Collections.unmodifiableMap(m_parameters);
-  }
-
-  /**
-   * Adds new parameter.
-   */
-  public void addParameter(String name, String value) {
-    m_parameters.put(name, value);
-  }
+	private final ComponentDescription m_componentDescription;
+	private final Class<?> m_componentClass;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CreationDescription(ComponentDescription componentDescription, String id, String name) {
+		m_componentDescription = componentDescription;
+		m_componentClass = componentDescription.getComponentClass();
+		m_id = id;
+		m_name = name != null ? name : CodeUtils.getShortClass(m_componentClass.getName());
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// id
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final String m_id;
+
+	/**
+	 * @return identifier of this creation.
+	 */
+	public String getId() {
+		return m_id;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// icon
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Image m_icon;
+
+	/**
+	 * @return the icon of this creation for displaying for user.
+	 */
+	public Image getIcon() {
+		return m_icon != null ? m_icon : m_componentDescription.getIcon();
+	}
+
+	/**
+	 * Sets the icon of this creation for displaying for user.
+	 */
+	public void setIcon(Image icon) {
+		m_icon = icon;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// name
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final String m_name;
+
+	/**
+	 * @return the name of this creation for displaying for user.
+	 */
+	public String getName() {
+		return m_name;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// description
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private String m_description;
+
+	/**
+	 * @return the description of this creation for displaying for user.
+	 */
+	public String getDescription() {
+		return m_description != null ? m_description : m_componentDescription.getDescription();
+	}
+
+	/**
+	 * Sets the description of this creation for displaying for user.
+	 */
+	public void setDescription(String description) {
+		m_description = description != null ? StringUtilities.normalizeWhitespaces(description) : null;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Attributes
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final List<CreationAttributeDescription> m_attributes = Lists.newArrayList();
+
+	/**
+	 * @return attributes to set on creation.
+	 */
+	public List<CreationAttributeDescription> getAttributes() {
+		return m_attributes;
+	}
+
+	/**
+	 * Adds new {@link CreationAttributeDescription}.
+	 */
+	public void addAttribute(CreationAttributeDescription attribute) {
+		m_attributes.add(attribute);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Content
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private String m_content;
+
+	/**
+	 * @return the text to use as content of element on creation.
+	 */
+	public String getContent() {
+		return m_content;
+	}
+
+	/**
+	 * Sets the text to use as content of element on creation.
+	 */
+	public void setContent(String content) {
+		m_content = content;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parameters
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final Map<String, String> m_parameters = Maps.newTreeMap();
+
+	/**
+	 * @return the {@link CreationDescription} specific parameters.
+	 */
+	public Map<String, String> getParameters() {
+		return Collections.unmodifiableMap(m_parameters);
+	}
+
+	/**
+	 * Adds new parameter.
+	 */
+	public void addParameter(String name, String value) {
+		m_parameters.put(name, value);
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/DescriptionPropertiesHelper.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/DescriptionPropertiesHelper.java
index 6c30da85c..a3f9efde1 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/DescriptionPropertiesHelper.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/DescriptionPropertiesHelper.java
@@ -29,84 +29,84 @@
  * @coverage XML.model.description
  */
 public class DescriptionPropertiesHelper {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private DescriptionPropertiesHelper() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private DescriptionPropertiesHelper() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Property editors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final String POINT_PROPERTY_EDITORS = "org.eclipse.wb.core.xml.propertyEditors";
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Property editors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final String POINT_PROPERTY_EDITORS = "org.eclipse.wb.core.xml.propertyEditors";
 
-  /**
-   * @return the {@link PropertyEditor} for given type.
-   */
-  public static PropertyEditor getEditorForType(Class<?> type) throws Exception {
-    // try to find editor using type name
-    {
-      String typeName = ReflectionUtils.getFullyQualifiedName(type, false);
-      List<IConfigurationElement> elements =
-          ExternalFactoriesHelper.getElements(POINT_PROPERTY_EDITORS, "editor");
-      for (IConfigurationElement element : elements) {
-        if (typeName.equals(element.getAttribute("type"))) {
-          return ExternalFactoriesHelper.createExecutableExtension(element, "class");
-        }
-      }
-    }
-    // Enum editor
-    if (type.isEnum()) {
-      return EnumPropertyEditor.INSTANCE;
-    }
-    // not found
-    return null;
-  }
+	/**
+	 * @return the {@link PropertyEditor} for given type.
+	 */
+	public static PropertyEditor getEditorForType(Class<?> type) throws Exception {
+		// try to find editor using type name
+		{
+			String typeName = ReflectionUtils.getFullyQualifiedName(type, false);
+			List<IConfigurationElement> elements =
+					ExternalFactoriesHelper.getElements(POINT_PROPERTY_EDITORS, "editor");
+			for (IConfigurationElement element : elements) {
+				if (typeName.equals(element.getAttribute("type"))) {
+					return ExternalFactoriesHelper.createExecutableExtension(element, "class");
+				}
+			}
+		}
+		// Enum editor
+		if (type.isEnum()) {
+			return EnumPropertyEditor.INSTANCE;
+		}
+		// not found
+		return null;
+	}
 
-  /**
-   * @return the configurable {@link PropertyEditor} for given <code>id</code>.
-   */
-  public static PropertyEditor getConfigurableEditor(String id) throws Exception {
-    List<IConfigurationElement> elements =
-        ExternalFactoriesHelper.getElements(POINT_PROPERTY_EDITORS, "configurableEditor");
-    for (IConfigurationElement element : elements) {
-      if (id.equals(element.getAttribute("id"))) {
-        return ExternalFactoriesHelper.createExecutableExtension(element, "class");
-      }
-    }
-    // not found
-    return null;
-  }
+	/**
+	 * @return the configurable {@link PropertyEditor} for given <code>id</code>.
+	 */
+	public static PropertyEditor getConfigurableEditor(String id) throws Exception {
+		List<IConfigurationElement> elements =
+				ExternalFactoriesHelper.getElements(POINT_PROPERTY_EDITORS, "configurableEditor");
+		for (IConfigurationElement element : elements) {
+			if (id.equals(element.getAttribute("id"))) {
+				return ExternalFactoriesHelper.createExecutableExtension(element, "class");
+			}
+		}
+		// not found
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Converters
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final String POINT_PROPERTY_CONVERTERS =
-      "org.eclipse.wb.core.xml.propertyConverters";
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Converters
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final String POINT_PROPERTY_CONVERTERS =
+			"org.eclipse.wb.core.xml.propertyConverters";
 
-  /**
-   * @return the {@link ExpressionConverter} for given type.
-   */
-  public static ExpressionConverter getConverterForType(Class<?> type) throws Exception {
-    String typeName = ReflectionUtils.getFullyQualifiedName(type, false);
-    List<IConfigurationElement> elements =
-        ExternalFactoriesHelper.getElements(POINT_PROPERTY_CONVERTERS, "converter");
-    for (IConfigurationElement element : elements) {
-      if (typeName.equals(element.getAttribute("type"))) {
-        return ExternalFactoriesHelper.createExecutableExtension(element, "class");
-      }
-    }
-    // Enum converter
-    if (type.isEnum()) {
-      return EnumConverter.INSTANCE;
-    }
-    // not found
-    return null;
-  }
+	/**
+	 * @return the {@link ExpressionConverter} for given type.
+	 */
+	public static ExpressionConverter getConverterForType(Class<?> type) throws Exception {
+		String typeName = ReflectionUtils.getFullyQualifiedName(type, false);
+		List<IConfigurationElement> elements =
+				ExternalFactoriesHelper.getElements(POINT_PROPERTY_CONVERTERS, "converter");
+		for (IConfigurationElement element : elements) {
+			if (typeName.equals(element.getAttribute("type"))) {
+				return ExternalFactoriesHelper.createExecutableExtension(element, "class");
+			}
+		}
+		// Enum converter
+		if (type.isEnum()) {
+			return EnumConverter.INSTANCE;
+		}
+		// not found
+		return null;
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/GenericPropertyDescription.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/GenericPropertyDescription.java
index 1ed23b0a0..79e87d863 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/GenericPropertyDescription.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/GenericPropertyDescription.java
@@ -24,192 +24,192 @@
  * @coverage XML.model.description
  */
 public final class GenericPropertyDescription extends AbstractDescription {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public GenericPropertyDescription(String id,
-      String name,
-      Class<?> type,
-      ExpressionAccessor accessor) {
-    m_id = id;
-    m_name = name;
-    m_title = name;
-    m_type = type;
-    m_accessor = accessor;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Id
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final String m_id;
-
-  /**
-   * @return the id of this property.
-   */
-  public String getId() {
-    return m_id;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Name
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final String m_name;
-
-  /**
-   * @return the name of this property.
-   */
-  public String getName() {
-    return m_name;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Title
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final String m_title;
-
-  /**
-   * @return the title of this property.
-   */
-  public String getTitle() {
-    // try to find "title" tag
-    {
-      String title = getTag("title");
-      if (title != null) {
-        return title;
-      }
-    }
-    // use default title
-    return m_title;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Type
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final Class<?> m_type;
-
-  /**
-   * @return the type of this property.
-   */
-  public Class<?> getType() {
-    return m_type;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Category
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private PropertyCategory m_category = PropertyCategory.NORMAL;
-
-  /**
-   * Sets the {@link PropertyCategory} for this property.
-   */
-  public void setCategory(PropertyCategory category) {
-    m_category = category;
-  }
-
-  /**
-   * @return the {@link PropertyCategory} of this property.
-   */
-  public PropertyCategory getCategory() {
-    return m_category;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Default value
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Object m_defaultValue = Property.UNKNOWN_VALUE;
-
-  /**
-   * @return the forced default value.
-   */
-  public Object getDefaultValue() {
-    return m_defaultValue;
-  }
-
-  /**
-   * Sets the forced default value.
-   */
-  public void setDefaultValue(Object defaultValue) {
-    m_defaultValue = defaultValue;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Accessor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final ExpressionAccessor m_accessor;
-
-  /**
-   * @return the {@link ExpressionAccessor} for this property.
-   */
-  public ExpressionAccessor getAccessor() {
-    return m_accessor;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Converter
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private ExpressionConverter m_converter;
-
-  /**
-   * Sets the {@link ExpressionConverter} for this property.
-   */
-  public void setConverter(ExpressionConverter converter) {
-    m_converter = converter;
-  }
-
-  /**
-   * @return the {@link ExpressionConverter} for this property.
-   */
-  public ExpressionConverter getConverter() {
-    return m_converter;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private PropertyEditor m_editor;
-
-  /**
-   * Sets the {@link PropertyEditor} for this property.
-   */
-  public void setEditor(PropertyEditor editor) {
-    m_editor = editor;
-  }
-
-  /**
-   * @return the {@link PropertyEditor} for this property.
-   */
-  public PropertyEditor getEditor() {
-    return m_editor;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Visiting
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void visit(XmlObjectInfo object, int state) throws Exception {
-    super.visit(object, state);
-    m_accessor.visit(object, state);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public GenericPropertyDescription(String id,
+			String name,
+			Class<?> type,
+			ExpressionAccessor accessor) {
+		m_id = id;
+		m_name = name;
+		m_title = name;
+		m_type = type;
+		m_accessor = accessor;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Id
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final String m_id;
+
+	/**
+	 * @return the id of this property.
+	 */
+	public String getId() {
+		return m_id;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Name
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final String m_name;
+
+	/**
+	 * @return the name of this property.
+	 */
+	public String getName() {
+		return m_name;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Title
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final String m_title;
+
+	/**
+	 * @return the title of this property.
+	 */
+	public String getTitle() {
+		// try to find "title" tag
+		{
+			String title = getTag("title");
+			if (title != null) {
+				return title;
+			}
+		}
+		// use default title
+		return m_title;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Type
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final Class<?> m_type;
+
+	/**
+	 * @return the type of this property.
+	 */
+	public Class<?> getType() {
+		return m_type;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Category
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private PropertyCategory m_category = PropertyCategory.NORMAL;
+
+	/**
+	 * Sets the {@link PropertyCategory} for this property.
+	 */
+	public void setCategory(PropertyCategory category) {
+		m_category = category;
+	}
+
+	/**
+	 * @return the {@link PropertyCategory} of this property.
+	 */
+	public PropertyCategory getCategory() {
+		return m_category;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Default value
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Object m_defaultValue = Property.UNKNOWN_VALUE;
+
+	/**
+	 * @return the forced default value.
+	 */
+	public Object getDefaultValue() {
+		return m_defaultValue;
+	}
+
+	/**
+	 * Sets the forced default value.
+	 */
+	public void setDefaultValue(Object defaultValue) {
+		m_defaultValue = defaultValue;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Accessor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final ExpressionAccessor m_accessor;
+
+	/**
+	 * @return the {@link ExpressionAccessor} for this property.
+	 */
+	public ExpressionAccessor getAccessor() {
+		return m_accessor;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Converter
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private ExpressionConverter m_converter;
+
+	/**
+	 * Sets the {@link ExpressionConverter} for this property.
+	 */
+	public void setConverter(ExpressionConverter converter) {
+		m_converter = converter;
+	}
+
+	/**
+	 * @return the {@link ExpressionConverter} for this property.
+	 */
+	public ExpressionConverter getConverter() {
+		return m_converter;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private PropertyEditor m_editor;
+
+	/**
+	 * Sets the {@link PropertyEditor} for this property.
+	 */
+	public void setEditor(PropertyEditor editor) {
+		m_editor = editor;
+	}
+
+	/**
+	 * @return the {@link PropertyEditor} for this property.
+	 */
+	public PropertyEditor getEditor() {
+		return m_editor;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Visiting
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void visit(XmlObjectInfo object, int state) throws Exception {
+		super.visit(object, state);
+		m_accessor.visit(object, state);
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/IDescriptionProcessor.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/IDescriptionProcessor.java
index de248da24..d51b4a7f2 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/IDescriptionProcessor.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/IDescriptionProcessor.java
@@ -19,8 +19,8 @@
  * @coverage XML.model.description
  */
 public interface IDescriptionProcessor {
-  /**
-   * Processes given {@link ComponentDescription}.
-   */
-  void process(EditorContext context, ComponentDescription componentDescription) throws Exception;
+	/**
+	 * Processes given {@link ComponentDescription}.
+	 */
+	void process(EditorContext context, ComponentDescription componentDescription) throws Exception;
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/IDescriptionRulesProvider.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/IDescriptionRulesProvider.java
index 13044bb92..1088df2fc 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/IDescriptionRulesProvider.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/IDescriptionRulesProvider.java
@@ -22,5 +22,5 @@
  * @coverage XML.model.description
  */
 public interface IDescriptionRulesProvider {
-  void addRules(Digester digester, EditorContext context, Class<?> componentClass);
+	void addRules(Digester digester, EditorContext context, Class<?> componentClass);
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/internal/AbstractConfigurableDescription.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/internal/AbstractConfigurableDescription.java
index 67cf567f7..fd5ac704a 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/internal/AbstractConfigurableDescription.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/internal/AbstractConfigurableDescription.java
@@ -28,41 +28,41 @@
  * @coverage XML.model.description
  */
 public abstract class AbstractConfigurableDescription {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parameters
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final Map<String, Object> m_parameters = Maps.newHashMap();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parameters
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final Map<String, Object> m_parameters = Maps.newHashMap();
 
-  /**
-   * Adds new parameter.
-   */
-  public final void addParameter(String name, String value) {
-    Assert.isTrue(
-        !m_parameters.containsKey(name),
-        MessageFormat.format("Duplicate declaration of parameter ''{0}''.", name));
-    m_parameters.put(name, value);
-  }
+	/**
+	 * Adds new parameter.
+	 */
+	public final void addParameter(String name, String value) {
+		Assert.isTrue(
+				!m_parameters.containsKey(name),
+				MessageFormat.format("Duplicate declaration of parameter ''{0}''.", name));
+		m_parameters.put(name, value);
+	}
 
-  /**
-   * Adds new list parameter.
-   */
-  @SuppressWarnings("unchecked")
-  public final void addListParameter(String name, String value) {
-    List<String> list = (List<String>) m_parameters.get(name);
-    if (list == null) {
-      list = Lists.newArrayList();
-      m_parameters.put(name, list);
-    }
-    list.add(value);
-  }
+	/**
+	 * Adds new list parameter.
+	 */
+	@SuppressWarnings("unchecked")
+	public final void addListParameter(String name, String value) {
+		List<String> list = (List<String>) m_parameters.get(name);
+		if (list == null) {
+			list = Lists.newArrayList();
+			m_parameters.put(name, list);
+		}
+		list.add(value);
+	}
 
-  /**
-   * Configures given {@link IConfigurablePropertyObject} with current parameters.
-   */
-  public final void configure(EditorContext context, IConfigurablePropertyObject configurableObject)
-      throws Exception {
-    configurableObject.configure(context, m_parameters);
-  }
+	/**
+	 * Configures given {@link IConfigurablePropertyObject} with current parameters.
+	 */
+	public final void configure(EditorContext context, IConfigurablePropertyObject configurableObject)
+			throws Exception {
+		configurableObject.configure(context, m_parameters);
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/internal/PropertyEditorDescription.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/internal/PropertyEditorDescription.java
index 8029c26a4..225581f79 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/internal/PropertyEditorDescription.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/internal/PropertyEditorDescription.java
@@ -21,31 +21,31 @@
  * @coverage XML.model.description
  */
 public final class PropertyEditorDescription extends AbstractConfigurableDescription {
-  private final EditorContext m_context;
-  private final PropertyEditor m_editor;
+	private final EditorContext m_context;
+	private final PropertyEditor m_editor;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public PropertyEditorDescription(EditorContext context, PropertyEditor editor) {
-    m_context = context;
-    m_editor = editor;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public PropertyEditorDescription(EditorContext context, PropertyEditor editor) {
+		m_context = context;
+		m_editor = editor;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return configured {@link PropertyEditor}.
-   */
-  public PropertyEditor getConfiguredEditor() throws Exception {
-    if (m_editor instanceof IConfigurablePropertyObject) {
-      configure(m_context, (IConfigurablePropertyObject) m_editor);
-    }
-    return m_editor;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return configured {@link PropertyEditor}.
+	 */
+	public PropertyEditor getConfiguredEditor() throws Exception {
+		if (m_editor instanceof IConfigurablePropertyObject) {
+			configure(m_context, (IConfigurablePropertyObject) m_editor);
+		}
+		return m_editor;
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/rules/ConfigurableObjectListParameterRule.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/rules/ConfigurableObjectListParameterRule.java
index 41d68996e..e932423d7 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/rules/ConfigurableObjectListParameterRule.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/rules/ConfigurableObjectListParameterRule.java
@@ -24,29 +24,29 @@
  * @coverage XML.model.description
  */
 public final class ConfigurableObjectListParameterRule extends AbstractDesignerRule {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Rule
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private String m_name;
-  private String m_value;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Rule
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private String m_name;
+	private String m_value;
 
-  @Override
-  public void begin(String namespace, String name, Attributes attributes) throws Exception {
-    m_name = getRequiredAttribute(name, attributes, "name");
-  }
+	@Override
+	public void begin(String namespace, String name, Attributes attributes) throws Exception {
+		m_name = getRequiredAttribute(name, attributes, "name");
+	}
 
-  @Override
-  public void body(String namespace, String name, String text) throws Exception {
-    m_value = text;
-    Assert.isNotNull(m_value, "Body text for <" + name + "> required.");
-  }
+	@Override
+	public void body(String namespace, String name, String text) throws Exception {
+		m_value = text;
+		Assert.isNotNull(m_value, "Body text for <" + name + "> required.");
+	}
 
-  @Override
-  public void end(String namespace, String name) throws Exception {
-    AbstractConfigurableDescription description =
-        (AbstractConfigurableDescription) getDigester().peek();
-    description.addListParameter(m_name, m_value);
-  }
+	@Override
+	public void end(String namespace, String name) throws Exception {
+		AbstractConfigurableDescription description =
+				(AbstractConfigurableDescription) getDigester().peek();
+		description.addListParameter(m_name, m_value);
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/rules/CreatePropertiesFieldRule.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/rules/CreatePropertiesFieldRule.java
index 43fbfebea..72169e1ad 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/rules/CreatePropertiesFieldRule.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/rules/CreatePropertiesFieldRule.java
@@ -31,41 +31,41 @@
  * @coverage XML.model.description
  */
 public final class CreatePropertiesFieldRule extends Rule {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Rule
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void begin(String namespace, String name, Attributes attributes) throws Exception {
-    ComponentDescription componentDescription = (ComponentDescription) getDigester().peek();
-    Class<?> componentClass = componentDescription.getComponentClass();
-    for (Field field : componentClass.getFields()) {
-      int modifiers = field.getModifiers();
-      if (!Modifier.isStatic(modifiers) && !Modifier.isFinal(modifiers)) {
-        addSingleProperty(componentDescription, field);
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Rule
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void begin(String namespace, String name, Attributes attributes) throws Exception {
+		ComponentDescription componentDescription = (ComponentDescription) getDigester().peek();
+		Class<?> componentClass = componentDescription.getComponentClass();
+		for (Field field : componentClass.getFields()) {
+			int modifiers = field.getModifiers();
+			if (!Modifier.isStatic(modifiers) && !Modifier.isFinal(modifiers)) {
+				addSingleProperty(componentDescription, field);
+			}
+		}
+	}
 
-  /**
-   * Adds single {@link GenericPropertyDescription} for given field.
-   */
-  private static void addSingleProperty(ComponentDescription componentDescription, Field field)
-      throws Exception {
-    String id = field.getName();
-    String propertyName = field.getName();
-    Class<?> propertyType = field.getType();
-    // prepare property parts
-    ExpressionAccessor accessor = new FieldExpressionAccessor(field);
-    ExpressionConverter converter = DescriptionPropertiesHelper.getConverterForType(propertyType);
-    PropertyEditor editor = DescriptionPropertiesHelper.getEditorForType(propertyType);
-    // create property
-    GenericPropertyDescription property =
-        new GenericPropertyDescription(id, propertyName, propertyType, accessor);
-    property.setConverter(converter);
-    property.setEditor(editor);
-    // add property
-    componentDescription.addProperty(property);
-  }
+	/**
+	 * Adds single {@link GenericPropertyDescription} for given field.
+	 */
+	private static void addSingleProperty(ComponentDescription componentDescription, Field field)
+			throws Exception {
+		String id = field.getName();
+		String propertyName = field.getName();
+		Class<?> propertyType = field.getType();
+		// prepare property parts
+		ExpressionAccessor accessor = new FieldExpressionAccessor(field);
+		ExpressionConverter converter = DescriptionPropertiesHelper.getConverterForType(propertyType);
+		PropertyEditor editor = DescriptionPropertiesHelper.getEditorForType(propertyType);
+		// create property
+		GenericPropertyDescription property =
+				new GenericPropertyDescription(id, propertyName, propertyType, accessor);
+		property.setConverter(converter);
+		property.setEditor(editor);
+		// add property
+		componentDescription.addProperty(property);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/rules/ModelClassRule.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/rules/ModelClassRule.java
index abbe351e5..2c1914fb6 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/rules/ModelClassRule.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/rules/ModelClassRule.java
@@ -24,32 +24,32 @@
  * @coverage XML.model.description
  */
 public final class ModelClassRule extends Rule {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Rule
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void begin(String namespace, String name, Attributes attributes) throws Exception {
-    // prepare model Class
-    String className = attributes.getValue("class");
-    Class<?> modelClass = DescriptionHelper.loadModelClass(className);
-    // set model Class
-    {
-      ComponentDescription componentDescription = (ComponentDescription) getDigester().peek();
-      // check, may be this is "secondary" model
-      {
-        UseModelIfNotAlready annotation = modelClass.getAnnotation(UseModelIfNotAlready.class);
-        if (annotation != null) {
-          Class<?> currentModelClass = componentDescription.getModelClass();
-          Class<?> baseModelClass = annotation.value();
-          if (baseModelClass.isAssignableFrom(currentModelClass)) {
-            return;
-          }
-        }
-      }
-      // OK, do set
-      componentDescription.setModelClass(modelClass);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Rule
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void begin(String namespace, String name, Attributes attributes) throws Exception {
+		// prepare model Class
+		String className = attributes.getValue("class");
+		Class<?> modelClass = DescriptionHelper.loadModelClass(className);
+		// set model Class
+		{
+			ComponentDescription componentDescription = (ComponentDescription) getDigester().peek();
+			// check, may be this is "secondary" model
+			{
+				UseModelIfNotAlready annotation = modelClass.getAnnotation(UseModelIfNotAlready.class);
+				if (annotation != null) {
+					Class<?> currentModelClass = componentDescription.getModelClass();
+					Class<?> baseModelClass = annotation.value();
+					if (baseModelClass.isAssignableFrom(currentModelClass)) {
+						return;
+					}
+				}
+			}
+			// OK, do set
+			componentDescription.setModelClass(modelClass);
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/rules/MorphingNoInheritRule.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/rules/MorphingNoInheritRule.java
index 516368fde..421d76b00 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/rules/MorphingNoInheritRule.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/rules/MorphingNoInheritRule.java
@@ -24,15 +24,15 @@
  * @coverage core.model.description
  */
 public final class MorphingNoInheritRule extends Rule {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Rule
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void begin(String namespace, String name, Attributes attributes) throws Exception {
-    // clear morphing targets
-    ComponentDescription componentDescription = (ComponentDescription) getDigester().peek();
-    componentDescription.clearMorphingTargets();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Rule
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void begin(String namespace, String name, Attributes attributes) throws Exception {
+		// clear morphing targets
+		ComponentDescription componentDescription = (ComponentDescription) getDigester().peek();
+		componentDescription.clearMorphingTargets();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/rules/MorphingTargetRule.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/rules/MorphingTargetRule.java
index 0bc5f556e..a4693ccb0 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/rules/MorphingTargetRule.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/rules/MorphingTargetRule.java
@@ -24,41 +24,41 @@
  * @coverage core.model.description
  */
 public final class MorphingTargetRule extends Rule {
-  private final ClassLoader m_classLoader;
+	private final ClassLoader m_classLoader;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public MorphingTargetRule(ClassLoader classLoader) {
-    m_classLoader = classLoader;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public MorphingTargetRule(ClassLoader classLoader) {
+		m_classLoader = classLoader;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Rule
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void begin(String namespace, String name, Attributes attributes) throws Exception {
-    try {
-      addTarget(attributes);
-    } catch (ClassNotFoundException e) {
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Rule
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void begin(String namespace, String name, Attributes attributes) throws Exception {
+		try {
+			addTarget(attributes);
+		} catch (ClassNotFoundException e) {
+		}
+	}
 
-  private void addTarget(Attributes attributes) throws ClassNotFoundException {
-    String creationId = attributes.getValue("creationId");
-    // prepare class
-    Class<?> clazz;
-    {
-      String className = attributes.getValue("class");
-      Assert.isNotNull(className);
-      clazz = m_classLoader.loadClass(className);
-    }
-    // add morphing target
-    ComponentDescription componentDescription = (ComponentDescription) getDigester().peek();
-    componentDescription.addMorphingTarget(new MorphingTargetDescription(clazz, creationId));
-  }
+	private void addTarget(Attributes attributes) throws ClassNotFoundException {
+		String creationId = attributes.getValue("creationId");
+		// prepare class
+		Class<?> clazz;
+		{
+			String className = attributes.getValue("class");
+			Assert.isNotNull(className);
+			clazz = m_classLoader.loadClass(className);
+		}
+		// add morphing target
+		ComponentDescription componentDescription = (ComponentDescription) getDigester().peek();
+		componentDescription.addMorphingTarget(new MorphingTargetDescription(clazz, creationId));
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/rules/PropertiesCategoryRule.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/rules/PropertiesCategoryRule.java
index 57b47ac57..9fdf40600 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/rules/PropertiesCategoryRule.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/rules/PropertiesCategoryRule.java
@@ -23,24 +23,24 @@
  * @coverage XML.model.description
  */
 public final class PropertiesCategoryRule extends PropertiesFlagRule {
-  private final PropertyCategory m_category;
+	private final PropertyCategory m_category;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public PropertiesCategoryRule(PropertyCategory category) {
-    m_category = category;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public PropertiesCategoryRule(PropertyCategory category) {
+		m_category = category;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Configure
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void configure(GenericPropertyDescription propertyDescription, Attributes attributes) {
-    propertyDescription.setCategory(m_category);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Configure
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void configure(GenericPropertyDescription propertyDescription, Attributes attributes) {
+		propertyDescription.setCategory(m_category);
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/rules/PropertiesFlagRule.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/rules/PropertiesFlagRule.java
index 63bf37956..5b9dbb259 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/rules/PropertiesFlagRule.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/rules/PropertiesFlagRule.java
@@ -25,82 +25,82 @@
  * @coverage XML.model.description
  */
 public abstract class PropertiesFlagRule extends AbstractDesignerRule {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Rule
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final void begin(String namespace, String tagName, Attributes attributes) throws Exception {
-    ComponentDescription componentDescription = (ComponentDescription) getDigester().peek();
-    // prepare names
-    String[] names;
-    {
-      String namesString = getRequiredAttribute(tagName, attributes, "names");
-      names = StringUtils.split(namesString);
-    }
-    // check names
-    for (String name : names) {
-      for (GenericPropertyDescription propertyDescription : componentDescription.getProperties()) {
-        String id = propertyDescription.getId();
-        if (matchPropertyId(id, name)) {
-          configure(propertyDescription, attributes);
-        }
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Rule
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final void begin(String namespace, String tagName, Attributes attributes) throws Exception {
+		ComponentDescription componentDescription = (ComponentDescription) getDigester().peek();
+		// prepare names
+		String[] names;
+		{
+			String namesString = getRequiredAttribute(tagName, attributes, "names");
+			names = StringUtils.split(namesString);
+		}
+		// check names
+		for (String name : names) {
+			for (GenericPropertyDescription propertyDescription : componentDescription.getProperties()) {
+				String id = propertyDescription.getId();
+				if (matchPropertyId(id, name)) {
+					configure(propertyDescription, attributes);
+				}
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Configuring
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Configures given {@link GenericPropertyDescription}.
-   */
-  protected abstract void configure(GenericPropertyDescription propertyDescription,
-      Attributes attributes);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Configuring
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Configures given {@link GenericPropertyDescription}.
+	 */
+	protected abstract void configure(GenericPropertyDescription propertyDescription,
+			Attributes attributes);
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Match
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static boolean matchPropertyId(String id, String name) {
-    // check for explicit method name
-    if (name.startsWith("m:")) {
-      String signaturePrefix = "set" + StringUtils.capitalize(name.substring(2)) + "(";
-      return matchAsSetter(id, signaturePrefix);
-    }
-    // check for explicit field name
-    if (name.startsWith("f:")) {
-      String fieldName = name.substring(2);
-      return matchAsField(id, fieldName);
-    }
-    // check for full method signature
-    if (name.indexOf('(') != -1) {
-      return matchAsSetter(id, name);
-    }
-    // try setter
-    {
-      String signaturePrefix = "set" + StringUtils.capitalize(name) + "(";
-      if (matchAsSetter(id, signaturePrefix)) {
-        return true;
-      }
-    }
-    // try field name
-    if (matchAsField(id, name)) {
-      return true;
-    }
-    // no
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Match
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static boolean matchPropertyId(String id, String name) {
+		// check for explicit method name
+		if (name.startsWith("m:")) {
+			String signaturePrefix = "set" + StringUtils.capitalize(name.substring(2)) + "(";
+			return matchAsSetter(id, signaturePrefix);
+		}
+		// check for explicit field name
+		if (name.startsWith("f:")) {
+			String fieldName = name.substring(2);
+			return matchAsField(id, fieldName);
+		}
+		// check for full method signature
+		if (name.indexOf('(') != -1) {
+			return matchAsSetter(id, name);
+		}
+		// try setter
+		{
+			String signaturePrefix = "set" + StringUtils.capitalize(name) + "(";
+			if (matchAsSetter(id, signaturePrefix)) {
+				return true;
+			}
+		}
+		// try field name
+		if (matchAsField(id, name)) {
+			return true;
+		}
+		// no
+		return false;
+	}
 
-  private static boolean matchAsSetter(String id, String signaturePrefix) {
-    return id.startsWith(signaturePrefix);
-  }
+	private static boolean matchAsSetter(String id, String signaturePrefix) {
+		return id.startsWith(signaturePrefix);
+	}
 
-  private static boolean matchAsField(String id, String fieldName) {
-    return id.equals(fieldName);
-  }
+	private static boolean matchAsField(String id, String fieldName) {
+		return id.equals(fieldName);
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/rules/PropertiesNoDefaultValueRule.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/rules/PropertiesNoDefaultValueRule.java
index 65c2726db..f1e926b1b 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/rules/PropertiesNoDefaultValueRule.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/rules/PropertiesNoDefaultValueRule.java
@@ -24,8 +24,8 @@
  * @coverage XML.model.description
  */
 public final class PropertiesNoDefaultValueRule extends PropertiesFlagRule {
-  @Override
-  protected void configure(GenericPropertyDescription propertyDescription, Attributes attributes) {
-    propertyDescription.putTag(ExpressionAccessor.NO_DEFAULT_VALUE_TAG, "true");
-  }
+	@Override
+	protected void configure(GenericPropertyDescription propertyDescription, Attributes attributes) {
+		propertyDescription.putTag(ExpressionAccessor.NO_DEFAULT_VALUE_TAG, "true");
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/rules/PropertyAccessRule.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/rules/PropertyAccessRule.java
index 309cb94a0..a3db4fe38 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/rules/PropertyAccessRule.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/rules/PropertyAccessRule.java
@@ -23,21 +23,21 @@
  * @coverage XML.model.description
  */
 public final class PropertyAccessRule extends Rule {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Rule
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void begin(String namespace, String name, Attributes attributes) throws Exception {
-    String id = attributes.getValue("id");
-    ComponentDescription componentDescription = (ComponentDescription) getDigester().peek();
-    GenericPropertyDescription propertyDescription = componentDescription.getProperty(id);
-    getDigester().push(propertyDescription);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Rule
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void begin(String namespace, String name, Attributes attributes) throws Exception {
+		String id = attributes.getValue("id");
+		ComponentDescription componentDescription = (ComponentDescription) getDigester().peek();
+		GenericPropertyDescription propertyDescription = componentDescription.getProperty(id);
+		getDigester().push(propertyDescription);
+	}
 
-  @Override
-  public void end(String namespace, String name) throws Exception {
-    getDigester().pop();
-  }
+	@Override
+	public void end(String namespace, String name) throws Exception {
+		getDigester().pop();
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/rules/PropertyCategoryRule.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/rules/PropertyCategoryRule.java
index f3a544644..9fb88d5ca 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/rules/PropertyCategoryRule.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/rules/PropertyCategoryRule.java
@@ -23,21 +23,21 @@
  * @coverage XML.model.description
  */
 public final class PropertyCategoryRule extends Rule {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Rule
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void begin(String namespace, String name, Attributes attributes) throws Exception {
-    // prepare category
-    PropertyCategory category;
-    {
-      String categoryText = attributes.getValue("value");
-      category = PropertyCategory.get(categoryText, null);
-    }
-    // set category
-    GenericPropertyDescription property = (GenericPropertyDescription) getDigester().peek();
-    property.setCategory(category);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Rule
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void begin(String namespace, String name, Attributes attributes) throws Exception {
+		// prepare category
+		PropertyCategory category;
+		{
+			String categoryText = attributes.getValue("value");
+			category = PropertyCategory.get(categoryText, null);
+		}
+		// set category
+		GenericPropertyDescription property = (GenericPropertyDescription) getDigester().peek();
+		property.setCategory(category);
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/rules/PropertyDefaultRule.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/rules/PropertyDefaultRule.java
index 9fcccccd3..b294567f5 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/rules/PropertyDefaultRule.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/rules/PropertyDefaultRule.java
@@ -23,30 +23,30 @@
  * @coverage XML.model.description
  */
 public final class PropertyDefaultRule extends Rule {
-  private final ClassLoader m_classLoader;
+	private final ClassLoader m_classLoader;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public PropertyDefaultRule(ClassLoader classLoader) {
-    m_classLoader = classLoader;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public PropertyDefaultRule(ClassLoader classLoader) {
+		m_classLoader = classLoader;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Rule
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void begin(String namespace, String name, Attributes attributes) throws Exception {
-    GenericPropertyDescription propertyDescription =
-        (GenericPropertyDescription) getDigester().peek();
-    if (propertyDescription != null) {
-      String text = attributes.getValue("value");
-      Object value = ScriptUtils.evaluate(m_classLoader, text);
-      propertyDescription.setDefaultValue(value);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Rule
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void begin(String namespace, String name, Attributes attributes) throws Exception {
+		GenericPropertyDescription propertyDescription =
+				(GenericPropertyDescription) getDigester().peek();
+		if (propertyDescription != null) {
+			String text = attributes.getValue("value");
+			Object value = ScriptUtils.evaluate(m_classLoader, text);
+			propertyDescription.setDefaultValue(value);
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/rules/PropertyEditorRule.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/rules/PropertyEditorRule.java
index 552f1e70c..d9b0b5f37 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/rules/PropertyEditorRule.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/description/rules/PropertyEditorRule.java
@@ -26,42 +26,42 @@
  * @coverage XML.model.description
  */
 public final class PropertyEditorRule extends Rule {
-  private final EditorContext m_context;
+	private final EditorContext m_context;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public PropertyEditorRule(EditorContext context) {
-    m_context = context;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public PropertyEditorRule(EditorContext context) {
+		m_context = context;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Rule
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void begin(String namespace, String name, Attributes attributes) throws Exception {
-    String id = attributes.getValue("id");
-    PropertyEditor editor = DescriptionPropertiesHelper.getConfigurableEditor(id);
-    getDigester().push(new PropertyEditorDescription(m_context, editor));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Rule
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void begin(String namespace, String name, Attributes attributes) throws Exception {
+		String id = attributes.getValue("id");
+		PropertyEditor editor = DescriptionPropertiesHelper.getConfigurableEditor(id);
+		getDigester().push(new PropertyEditorDescription(m_context, editor));
+	}
 
-  @Override
-  public void end(String namespace, String name) throws Exception {
-    // prepare editor
-    PropertyEditor editor;
-    {
-      PropertyEditorDescription editorDescription = (PropertyEditorDescription) getDigester().pop();
-      editor = editorDescription.getConfiguredEditor();
-    }
-    // set editor for current property
-    GenericPropertyDescription propertyDescription =
-        (GenericPropertyDescription) getDigester().peek();
-    if (propertyDescription != null) {
-      propertyDescription.setEditor(editor);
-    }
-  }
+	@Override
+	public void end(String namespace, String name) throws Exception {
+		// prepare editor
+		PropertyEditor editor;
+		{
+			PropertyEditorDescription editorDescription = (PropertyEditorDescription) getDigester().pop();
+			editor = editorDescription.getConfiguredEditor();
+		}
+		// set editor for current property
+		GenericPropertyDescription propertyDescription =
+				(GenericPropertyDescription) getDigester().peek();
+		if (propertyDescription != null) {
+			propertyDescription.setEditor(editor);
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/generic/FlowContainerConfigurable.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/generic/FlowContainerConfigurable.java
index 203990ea5..5462b26fc 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/generic/FlowContainerConfigurable.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/generic/FlowContainerConfigurable.java
@@ -28,125 +28,125 @@
  * @coverage XML.model.generic
  */
 public final class FlowContainerConfigurable implements FlowContainer {
-  private final XmlObjectInfo m_container;
-  private final FlowContainerConfiguration m_configuration;
+	private final XmlObjectInfo m_container;
+	private final FlowContainerConfiguration m_configuration;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FlowContainerConfigurable(XmlObjectInfo container, FlowContainerConfiguration configuration) {
-    m_container = container;
-    m_configuration = configuration;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FlowContainerConfigurable(XmlObjectInfo container, FlowContainerConfiguration configuration) {
+		m_container = container;
+		m_configuration = configuration;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean isHorizontal() {
-    return m_configuration.getHorizontalPredicate().apply(m_container);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean isHorizontal() {
+		return m_configuration.getHorizontalPredicate().apply(m_container);
+	}
 
-  @Override
-  public boolean isRtl() {
-    return m_configuration.getRtlPredicate().apply(m_container);
-  }
+	@Override
+	public boolean isRtl() {
+		return m_configuration.getRtlPredicate().apply(m_container);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Validation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean validateComponent(Object component) {
-    return m_configuration.getComponentValidator().validate(m_container, component);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Validation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean validateComponent(Object component) {
+		return m_configuration.getComponentValidator().validate(m_container, component);
+	}
 
-  @Override
-  public boolean validateReference(Object reference) {
-    return m_configuration.getReferenceValidator().validate(m_container, reference);
-  }
+	@Override
+	public boolean validateReference(Object reference) {
+		return m_configuration.getReferenceValidator().validate(m_container, reference);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void command_CREATE(Object newObject, Object referenceObject) throws Exception {
-    if (!tryDuckTyping("command_CREATE", newObject, referenceObject)) {
-      command_CREATE_default(newObject, referenceObject);
-    }
-    tryDuckTyping("command_CREATE_after", newObject, referenceObject);
-    tryDuckTyping("command_APPEND_after", newObject, referenceObject);
-    tryDuckTyping("command_TARGET_after", newObject, referenceObject);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void command_CREATE(Object newObject, Object referenceObject) throws Exception {
+		if (!tryDuckTyping("command_CREATE", newObject, referenceObject)) {
+			command_CREATE_default(newObject, referenceObject);
+		}
+		tryDuckTyping("command_CREATE_after", newObject, referenceObject);
+		tryDuckTyping("command_APPEND_after", newObject, referenceObject);
+		tryDuckTyping("command_TARGET_after", newObject, referenceObject);
+	}
 
-  @Override
-  public void command_MOVE(Object moveObject, Object referenceObject) throws Exception {
-    if (!tryDuckTyping("command_MOVE", moveObject, referenceObject)) {
-      command_MOVE_default(moveObject, referenceObject);
-    }
-    tryDuckTyping("command_MOVE_after", moveObject, referenceObject);
-    tryDuckTyping("command_TARGET_after", moveObject, referenceObject);
-  }
+	@Override
+	public void command_MOVE(Object moveObject, Object referenceObject) throws Exception {
+		if (!tryDuckTyping("command_MOVE", moveObject, referenceObject)) {
+			command_MOVE_default(moveObject, referenceObject);
+		}
+		tryDuckTyping("command_MOVE_after", moveObject, referenceObject);
+		tryDuckTyping("command_TARGET_after", moveObject, referenceObject);
+	}
 
-  private void command_CREATE_default(Object newObject, Object referenceObject) throws Exception {
-    XmlObjectInfo component = (XmlObjectInfo) newObject;
-    XmlObjectInfo nextComponent = (XmlObjectInfo) referenceObject;
-    Association association = m_configuration.getAssociation();
-    XmlObjectUtils.add(component, association, m_container, nextComponent);
-  }
+	private void command_CREATE_default(Object newObject, Object referenceObject) throws Exception {
+		XmlObjectInfo component = (XmlObjectInfo) newObject;
+		XmlObjectInfo nextComponent = (XmlObjectInfo) referenceObject;
+		Association association = m_configuration.getAssociation();
+		XmlObjectUtils.add(component, association, m_container, nextComponent);
+	}
 
-  private void command_MOVE_default(Object moveObject, Object referenceObject) throws Exception {
-    XmlObjectInfo component = (XmlObjectInfo) moveObject;
-    XmlObjectInfo oldParent = (XmlObjectInfo) component.getParent();
-    XmlObjectInfo nextComponent = (XmlObjectInfo) referenceObject;
-    if (System.getProperty("flowContainer.simulateMove") == null) {
-      Association association = m_configuration.getAssociation();
-      XmlObjectUtils.move(component, association, m_container, nextComponent);
-    }
-    if (oldParent != m_container) {
-      tryDuckTyping("command_ADD_after", component, referenceObject);
-      tryDuckTyping("command_APPEND_after", component, referenceObject);
-    }
-  }
+	private void command_MOVE_default(Object moveObject, Object referenceObject) throws Exception {
+		XmlObjectInfo component = (XmlObjectInfo) moveObject;
+		XmlObjectInfo oldParent = (XmlObjectInfo) component.getParent();
+		XmlObjectInfo nextComponent = (XmlObjectInfo) referenceObject;
+		if (System.getProperty("flowContainer.simulateMove") == null) {
+			Association association = m_configuration.getAssociation();
+			XmlObjectUtils.move(component, association, m_container, nextComponent);
+		}
+		if (oldParent != m_container) {
+			tryDuckTyping("command_ADD_after", component, referenceObject);
+			tryDuckTyping("command_APPEND_after", component, referenceObject);
+		}
+	}
 
-  private boolean tryDuckTyping(String methodName, Object object, Object referenceObject)
-      throws Exception {
-    Method method = getCommandMethod(methodName, object, referenceObject);
-    if (method != null) {
-      method.invoke(m_container, object, referenceObject);
-      return true;
-    }
-    return false;
-  }
+	private boolean tryDuckTyping(String methodName, Object object, Object referenceObject)
+			throws Exception {
+		Method method = getCommandMethod(methodName, object, referenceObject);
+		if (method != null) {
+			method.invoke(m_container, object, referenceObject);
+			return true;
+		}
+		return false;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link Method} with given name that can be invoked with object/referenceObject.
-   */
-  private Method getCommandMethod(String methodName, Object object, Object referenceObject) {
-    List<Method> methods = Lists.newArrayList();
-    for (Method method : m_container.getClass().getMethods()) {
-      if (method.getName().equals(methodName)) {
-        Class<?>[] parameterTypes = method.getParameterTypes();
-        if (parameterTypes.length == 2) {
-          if (ReflectionUtils.isAssignableFrom(parameterTypes[0], object)
-              && ReflectionUtils.isAssignableFrom(parameterTypes[1], referenceObject)) {
-            methods.add(method);
-          }
-        }
-      }
-    }
-    return ReflectionUtils.getMostSpecific(methods);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link Method} with given name that can be invoked with object/referenceObject.
+	 */
+	private Method getCommandMethod(String methodName, Object object, Object referenceObject) {
+		List<Method> methods = Lists.newArrayList();
+		for (Method method : m_container.getClass().getMethods()) {
+			if (method.getName().equals(methodName)) {
+				Class<?>[] parameterTypes = method.getParameterTypes();
+				if (parameterTypes.length == 2) {
+					if (ReflectionUtils.isAssignableFrom(parameterTypes[0], object)
+							&& ReflectionUtils.isAssignableFrom(parameterTypes[1], referenceObject)) {
+						methods.add(method);
+					}
+				}
+			}
+		}
+		return ReflectionUtils.getMostSpecific(methods);
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/generic/FlowContainerConfiguration.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/generic/FlowContainerConfiguration.java
index 8fb819dc1..e6d87ed70 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/generic/FlowContainerConfiguration.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/generic/FlowContainerConfiguration.java
@@ -22,51 +22,51 @@
  * @coverage XML.model.generic
  */
 public class FlowContainerConfiguration {
-  private final Predicate<Object> m_horizontalPredicate;
-  private final Predicate<Object> m_rtlPredicate;
-  private final Association m_association;
-  private final ContainerObjectValidator m_componentValidator;
-  private final ContainerObjectValidator m_referenceValidator;
+	private final Predicate<Object> m_horizontalPredicate;
+	private final Predicate<Object> m_rtlPredicate;
+	private final Association m_association;
+	private final ContainerObjectValidator m_componentValidator;
+	private final ContainerObjectValidator m_referenceValidator;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FlowContainerConfiguration(Predicate<Object> horizontalPredicate,
-      Predicate<Object> rtlPredicate,
-      Association association,
-      ContainerObjectValidator componentValidator,
-      ContainerObjectValidator referenceValidator) {
-    m_horizontalPredicate = horizontalPredicate;
-    m_rtlPredicate = rtlPredicate;
-    m_association = association;
-    m_componentValidator = componentValidator;
-    m_referenceValidator = referenceValidator;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FlowContainerConfiguration(Predicate<Object> horizontalPredicate,
+			Predicate<Object> rtlPredicate,
+			Association association,
+			ContainerObjectValidator componentValidator,
+			ContainerObjectValidator referenceValidator) {
+		m_horizontalPredicate = horizontalPredicate;
+		m_rtlPredicate = rtlPredicate;
+		m_association = association;
+		m_componentValidator = componentValidator;
+		m_referenceValidator = referenceValidator;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public Predicate<Object> getHorizontalPredicate() {
-    return m_horizontalPredicate;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public Predicate<Object> getHorizontalPredicate() {
+		return m_horizontalPredicate;
+	}
 
-  public Predicate<Object> getRtlPredicate() {
-    return m_rtlPredicate;
-  }
+	public Predicate<Object> getRtlPredicate() {
+		return m_rtlPredicate;
+	}
 
-  public Association getAssociation() {
-    return m_association;
-  }
+	public Association getAssociation() {
+		return m_association;
+	}
 
-  public ContainerObjectValidator getComponentValidator() {
-    return m_componentValidator;
-  }
+	public ContainerObjectValidator getComponentValidator() {
+		return m_componentValidator;
+	}
 
-  public ContainerObjectValidator getReferenceValidator() {
-    return m_referenceValidator;
-  }
+	public ContainerObjectValidator getReferenceValidator() {
+		return m_referenceValidator;
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/generic/FlowContainerFactory.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/generic/FlowContainerFactory.java
index b3d02a1ef..31cc98465 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/generic/FlowContainerFactory.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/generic/FlowContainerFactory.java
@@ -39,200 +39,200 @@
  * @coverage XML.model.generic
  */
 public final class FlowContainerFactory {
-  private final XmlObjectInfo m_object;
-  private final boolean m_forCanvas;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FlowContainerFactory(XmlObjectInfo object, boolean forCanvas) {
-    m_object = object;
-    m_forCanvas = forCanvas;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public List<FlowContainer> get() {
-    List<FlowContainer> containers = Lists.newArrayList();
-    addConfigurableContainers(containers);
-    return containers;
-  }
-
-  private void addConfigurableContainers(List<FlowContainer> containers) {
-    List<FlowContainerConfiguration> configurations = getConfigurations();
-    for (FlowContainerConfiguration configuration : configurations) {
-      FlowContainer container = new FlowContainerConfigurable(m_object, configuration);
-      containers.add(container);
-    }
-  }
-
-  public List<FlowContainerConfiguration> getConfigurations() {
-    return ExecutionUtils.runObject(new RunnableObjectEx<List<FlowContainerConfiguration>>() {
-      @Override
-      public List<FlowContainerConfiguration> runObject() throws Exception {
-        return getConfigurationsEx();
-      }
-    }, "Exception during reading flow container configurations for %s", m_object);
-  }
-
-  private List<FlowContainerConfiguration> getConfigurationsEx() {
-    List<FlowContainerConfiguration> configurations = Lists.newArrayList();
-    for (String prefix : getConfigurationPrefixes()) {
-      FlowContainerConfiguration configuration = createConfiguration(prefix);
-      configurations.add(configuration);
-    }
-    return configurations;
-  }
-
-  private List<String> getConfigurationPrefixes() {
-    List<String> prefixes = Lists.newArrayList();
-    addConfigurationPrefixes(prefixes, "flowContainer");
-    if (m_forCanvas) {
-      addConfigurationPrefixes(prefixes, "flowContainer.canvas");
-    } else {
-      addConfigurationPrefixes(prefixes, "flowContainer.tree");
-    }
-    return prefixes;
-  }
-
-  private void addConfigurationPrefixes(List<String> prefixes, String basePrefix) {
-    for (int i = 0; i < 10; i++) {
-      String prefix = basePrefix + (i == 0 ? "" : "." + i);
-      if ("true".equals(getParameter(prefix))) {
-        prefixes.add(prefix);
-      }
-    }
-  }
-
-  private FlowContainerConfiguration createConfiguration(String prefix) {
-    return new FlowContainerConfiguration(getHorizontalPredicate(prefix, true), getRtlPredicate(
-        prefix,
-        true), getAssociation(prefix), getComponentValidator(prefix), getReferenceValidator(prefix));
-  }
-
-  private ContainerObjectValidator getComponentValidator(String prefix) {
-    // try to find "component-validator"
-    {
-      String validatorExpression = getParameter(prefix + ".component-validator");
-      if (validatorExpression != null) {
-        return ContainerObjectValidators.forComponentExpression(validatorExpression);
-      }
-    }
-    // component should be list of types
-    {
-      String componentString = getComponentString(prefix);
-      Assert.isNotNull(componentString, "No 'component' validator.");
-      String[] componentTypes = StringUtils.split(componentString);
-      return ContainerObjectValidators.forList(componentTypes);
-    }
-  }
-
-  private String getComponentString(String prefix) {
-    String componentString = getParameter(prefix + ".component");
-    // if no "component", try to get from "defaultComponent"
-    if (componentString == null) {
-      componentString = getParameter("flowContainer.defaultComponent");
-    }
-    // return what we have
-    return componentString;
-  }
-
-  private ContainerObjectValidator getReferenceValidator(String prefix) {
-    // try to find "reference-validator"
-    {
-      String validatorExpression = getParameter(prefix + ".reference-validator");
-      if (validatorExpression != null) {
-        return ContainerObjectValidators.forReferenceExpression(validatorExpression);
-      }
-    }
-    // reference should be list of types
-    {
-      String referenceString = getReferenceString(prefix);
-      Assert.isNotNull(referenceString, "No 'reference' validator.");
-      String[] referenceTypes = StringUtils.split(referenceString);
-      return ContainerObjectValidators.forList(referenceTypes);
-    }
-  }
-
-  private String getReferenceString(String prefix) {
-    String referenceString = getParameter(prefix + ".reference");
-    // if no specific "reference" for this container, use same as "component"
-    if (referenceString == null) {
-      referenceString = getParameter(prefix + ".component");
-    }
-    // try to get from "defaultReference"
-    if (referenceString == null) {
-      referenceString = getParameter("flowContainer.defaultReference");
-    }
-    // return what we have
-    return referenceString;
-  }
-
-  private Predicate<Object> getHorizontalPredicate(String prefix, boolean def) {
-    String horizontalString = getParameter(prefix + ".horizontal");
-    if (horizontalString == null) {
-      return Predicates.alwaysTrue();
-    }
-    return new ExpressionPredicate<Object>(horizontalString);
-  }
-
-  private Predicate<Object> getRtlPredicate(String prefix, boolean def) {
-    String rtlString = getParameter(prefix + ".rtl");
-    if (rtlString == null) {
-      return Predicates.alwaysFalse();
-    }
-    return new ExpressionPredicate<Object>(rtlString);
-  }
-
-  private Association getAssociation(String prefix) {
-    String associationString = getParameter(prefix + ".x-association");
-    if (StringUtils.isEmpty(associationString)) {
-      return Associations.direct();
-    } else if (associationString.startsWith("inter ")) {
-      associationString = StringUtils.removeStart(associationString, "inter ");
-      // extract tag
-      String tag = StringUtils.substringBefore(associationString, " ");
-      associationString = StringUtils.substringAfter(associationString, " ");
-      // extract attributes
-      Map<String, String> attributes = parseAttributes(associationString);
-      return Associations.intermediate(tag, attributes);
-    } else {
-      Assert.isTrue(associationString.startsWith("property "));
-      String property = StringUtils.removeStart(associationString, "property ");
-      return Associations.property(property);
-    }
-  }
-
-  /**
-   * Parses attributes in format: attrA='a' attrB='b b'
-   */
-  private static Map<String, String> parseAttributes(String s) {
-    Map<String, String> attributes = Maps.newHashMap();
-    while (s.length() != 0) {
-      s = s.trim();
-      // extract name/value
-      int attrNameEnd = s.indexOf("='");
-      int attrValueEnd = s.indexOf("'", attrNameEnd + 2);
-      String attrName = s.substring(0, attrNameEnd);
-      String attrValue = s.substring(attrNameEnd + 2, attrValueEnd);
-      attributes.put(attrName, attrValue);
-      // next attribute
-      s = s.substring(attrValueEnd + 1);
-    }
-    return attributes;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private String getParameter(String name) {
-    return XmlObjectUtils.getParameter(m_object, name);
-  }
+	private final XmlObjectInfo m_object;
+	private final boolean m_forCanvas;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FlowContainerFactory(XmlObjectInfo object, boolean forCanvas) {
+		m_object = object;
+		m_forCanvas = forCanvas;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public List<FlowContainer> get() {
+		List<FlowContainer> containers = Lists.newArrayList();
+		addConfigurableContainers(containers);
+		return containers;
+	}
+
+	private void addConfigurableContainers(List<FlowContainer> containers) {
+		List<FlowContainerConfiguration> configurations = getConfigurations();
+		for (FlowContainerConfiguration configuration : configurations) {
+			FlowContainer container = new FlowContainerConfigurable(m_object, configuration);
+			containers.add(container);
+		}
+	}
+
+	public List<FlowContainerConfiguration> getConfigurations() {
+		return ExecutionUtils.runObject(new RunnableObjectEx<List<FlowContainerConfiguration>>() {
+			@Override
+			public List<FlowContainerConfiguration> runObject() throws Exception {
+				return getConfigurationsEx();
+			}
+		}, "Exception during reading flow container configurations for %s", m_object);
+	}
+
+	private List<FlowContainerConfiguration> getConfigurationsEx() {
+		List<FlowContainerConfiguration> configurations = Lists.newArrayList();
+		for (String prefix : getConfigurationPrefixes()) {
+			FlowContainerConfiguration configuration = createConfiguration(prefix);
+			configurations.add(configuration);
+		}
+		return configurations;
+	}
+
+	private List<String> getConfigurationPrefixes() {
+		List<String> prefixes = Lists.newArrayList();
+		addConfigurationPrefixes(prefixes, "flowContainer");
+		if (m_forCanvas) {
+			addConfigurationPrefixes(prefixes, "flowContainer.canvas");
+		} else {
+			addConfigurationPrefixes(prefixes, "flowContainer.tree");
+		}
+		return prefixes;
+	}
+
+	private void addConfigurationPrefixes(List<String> prefixes, String basePrefix) {
+		for (int i = 0; i < 10; i++) {
+			String prefix = basePrefix + (i == 0 ? "" : "." + i);
+			if ("true".equals(getParameter(prefix))) {
+				prefixes.add(prefix);
+			}
+		}
+	}
+
+	private FlowContainerConfiguration createConfiguration(String prefix) {
+		return new FlowContainerConfiguration(getHorizontalPredicate(prefix, true), getRtlPredicate(
+				prefix,
+				true), getAssociation(prefix), getComponentValidator(prefix), getReferenceValidator(prefix));
+	}
+
+	private ContainerObjectValidator getComponentValidator(String prefix) {
+		// try to find "component-validator"
+		{
+			String validatorExpression = getParameter(prefix + ".component-validator");
+			if (validatorExpression != null) {
+				return ContainerObjectValidators.forComponentExpression(validatorExpression);
+			}
+		}
+		// component should be list of types
+		{
+			String componentString = getComponentString(prefix);
+			Assert.isNotNull(componentString, "No 'component' validator.");
+			String[] componentTypes = StringUtils.split(componentString);
+			return ContainerObjectValidators.forList(componentTypes);
+		}
+	}
+
+	private String getComponentString(String prefix) {
+		String componentString = getParameter(prefix + ".component");
+		// if no "component", try to get from "defaultComponent"
+		if (componentString == null) {
+			componentString = getParameter("flowContainer.defaultComponent");
+		}
+		// return what we have
+		return componentString;
+	}
+
+	private ContainerObjectValidator getReferenceValidator(String prefix) {
+		// try to find "reference-validator"
+		{
+			String validatorExpression = getParameter(prefix + ".reference-validator");
+			if (validatorExpression != null) {
+				return ContainerObjectValidators.forReferenceExpression(validatorExpression);
+			}
+		}
+		// reference should be list of types
+		{
+			String referenceString = getReferenceString(prefix);
+			Assert.isNotNull(referenceString, "No 'reference' validator.");
+			String[] referenceTypes = StringUtils.split(referenceString);
+			return ContainerObjectValidators.forList(referenceTypes);
+		}
+	}
+
+	private String getReferenceString(String prefix) {
+		String referenceString = getParameter(prefix + ".reference");
+		// if no specific "reference" for this container, use same as "component"
+		if (referenceString == null) {
+			referenceString = getParameter(prefix + ".component");
+		}
+		// try to get from "defaultReference"
+		if (referenceString == null) {
+			referenceString = getParameter("flowContainer.defaultReference");
+		}
+		// return what we have
+		return referenceString;
+	}
+
+	private Predicate<Object> getHorizontalPredicate(String prefix, boolean def) {
+		String horizontalString = getParameter(prefix + ".horizontal");
+		if (horizontalString == null) {
+			return Predicates.alwaysTrue();
+		}
+		return new ExpressionPredicate<Object>(horizontalString);
+	}
+
+	private Predicate<Object> getRtlPredicate(String prefix, boolean def) {
+		String rtlString = getParameter(prefix + ".rtl");
+		if (rtlString == null) {
+			return Predicates.alwaysFalse();
+		}
+		return new ExpressionPredicate<Object>(rtlString);
+	}
+
+	private Association getAssociation(String prefix) {
+		String associationString = getParameter(prefix + ".x-association");
+		if (StringUtils.isEmpty(associationString)) {
+			return Associations.direct();
+		} else if (associationString.startsWith("inter ")) {
+			associationString = StringUtils.removeStart(associationString, "inter ");
+			// extract tag
+			String tag = StringUtils.substringBefore(associationString, " ");
+			associationString = StringUtils.substringAfter(associationString, " ");
+			// extract attributes
+			Map<String, String> attributes = parseAttributes(associationString);
+			return Associations.intermediate(tag, attributes);
+		} else {
+			Assert.isTrue(associationString.startsWith("property "));
+			String property = StringUtils.removeStart(associationString, "property ");
+			return Associations.property(property);
+		}
+	}
+
+	/**
+	 * Parses attributes in format: attrA='a' attrB='b b'
+	 */
+	private static Map<String, String> parseAttributes(String s) {
+		Map<String, String> attributes = Maps.newHashMap();
+		while (s.length() != 0) {
+			s = s.trim();
+			// extract name/value
+			int attrNameEnd = s.indexOf("='");
+			int attrValueEnd = s.indexOf("'", attrNameEnd + 2);
+			String attrName = s.substring(0, attrNameEnd);
+			String attrValue = s.substring(attrNameEnd + 2, attrValueEnd);
+			attributes.put(attrName, attrValue);
+			// next attribute
+			s = s.substring(attrValueEnd + 1);
+		}
+		return attributes;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private String getParameter(String name) {
+		return XmlObjectUtils.getParameter(m_object, name);
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/generic/SimpleContainerClipboardSupport.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/generic/SimpleContainerClipboardSupport.java
index 2b98d80f3..a197c9a6d 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/generic/SimpleContainerClipboardSupport.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/generic/SimpleContainerClipboardSupport.java
@@ -26,60 +26,60 @@
  * @coverage XML.model.generic
  */
 public final class SimpleContainerClipboardSupport implements IRootProcessor {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final IRootProcessor INSTANCE = new SimpleContainerClipboardSupport();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final IRootProcessor INSTANCE = new SimpleContainerClipboardSupport();
 
-  private SimpleContainerClipboardSupport() {
-  }
+	private SimpleContainerClipboardSupport() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IRootProcessor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void process(final XmlObjectInfo root) throws Exception {
-    root.addBroadcastListener(new XmlObjectClipboardCopy() {
-      @Override
-      public void invoke(XmlObjectInfo object, List<ClipboardCommand> commands) throws Exception {
-        List<SimpleContainer> containers = getSimpleContainers(object);
-        for (int i = 0; i < containers.size(); i++) {
-          SimpleContainer container = containers.get(i);
-          Object child = container.getChild();
-          if (child instanceof XmlObjectInfo) {
-            ClipboardCommand command = createCommand(i, (XmlObjectInfo) child);
-            commands.add(command);
-          }
-        }
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IRootProcessor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void process(final XmlObjectInfo root) throws Exception {
+		root.addBroadcastListener(new XmlObjectClipboardCopy() {
+			@Override
+			public void invoke(XmlObjectInfo object, List<ClipboardCommand> commands) throws Exception {
+				List<SimpleContainer> containers = getSimpleContainers(object);
+				for (int i = 0; i < containers.size(); i++) {
+					SimpleContainer container = containers.get(i);
+					Object child = container.getChild();
+					if (child instanceof XmlObjectInfo) {
+						ClipboardCommand command = createCommand(i, (XmlObjectInfo) child);
+						commands.add(command);
+					}
+				}
+			}
+		});
+	}
 
-  private static List<SimpleContainer> getSimpleContainers(XmlObjectInfo object) {
-    return new SimpleContainerFactory(object, true).get();
-  }
+	private static List<SimpleContainer> getSimpleContainers(XmlObjectInfo object) {
+		return new SimpleContainerFactory(object, true).get();
+	}
 
-  /**
-   * @return the {@link ClipboardCommand} for creating given child on simple container, during
-   *         paste.
-   */
-  private static ClipboardCommand createCommand(final int containerIndex, XmlObjectInfo child)
-      throws Exception {
-    final XmlObjectMemento memento = XmlObjectMemento.createMemento(child);
-    ClipboardCommand command = new ClipboardCommand() {
-      private static final long serialVersionUID = 0L;
+	/**
+	 * @return the {@link ClipboardCommand} for creating given child on simple container, during
+	 *         paste.
+	 */
+	private static ClipboardCommand createCommand(final int containerIndex, XmlObjectInfo child)
+			throws Exception {
+		final XmlObjectMemento memento = XmlObjectMemento.createMemento(child);
+		ClipboardCommand command = new ClipboardCommand() {
+			private static final long serialVersionUID = 0L;
 
-      @Override
-      public void execute(XmlObjectInfo newContainer) throws Exception {
-        XmlObjectInfo newChild = memento.create(newContainer);
-        getSimpleContainers(newContainer).get(containerIndex).command_CREATE(newChild);
-        memento.apply();
-      }
-    };
-    return command;
-  }
+			@Override
+			public void execute(XmlObjectInfo newContainer) throws Exception {
+				XmlObjectInfo newChild = memento.create(newContainer);
+				getSimpleContainers(newContainer).get(containerIndex).command_CREATE(newChild);
+				memento.apply();
+			}
+		};
+		return command;
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/generic/SimpleContainerConfigurable.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/generic/SimpleContainerConfigurable.java
index 26047606b..f06921145 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/generic/SimpleContainerConfigurable.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/generic/SimpleContainerConfigurable.java
@@ -26,123 +26,123 @@
  * @coverage XML.model.generic
  */
 public final class SimpleContainerConfigurable implements SimpleContainer {
-  private final XmlObjectInfo m_container;
-  private final SimpleContainerConfiguration m_configuration;
+	private final XmlObjectInfo m_container;
+	private final SimpleContainerConfiguration m_configuration;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SimpleContainerConfigurable(XmlObjectInfo container,
-      SimpleContainerConfiguration configuration) {
-    m_container = container;
-    m_configuration = configuration;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SimpleContainerConfigurable(XmlObjectInfo container,
+			SimpleContainerConfiguration configuration) {
+		m_container = container;
+		m_configuration = configuration;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean isEmpty() {
-    return getChild() == null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean isEmpty() {
+		return getChild() == null;
+	}
 
-  @Override
-  public Object getChild() {
-    for (ObjectInfo child : getContainerChildren()) {
-      if (validateComponent(child)) {
-        return child;
-      }
-    }
-    return null;
-  }
+	@Override
+	public Object getChild() {
+		for (ObjectInfo child : getContainerChildren()) {
+			if (validateComponent(child)) {
+				return child;
+			}
+		}
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Validation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean validateComponent(Object component) {
-    return m_configuration.getComponentValidator().validate(m_container, component);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Validation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean validateComponent(Object component) {
+		return m_configuration.getComponentValidator().validate(m_container, component);
+	}
 
-  @SuppressWarnings("unchecked")
-  private List<ObjectInfo> getContainerChildren() {
-    {
-      String signature = "getSimpleContainerChildren()";
-      Method method = ReflectionUtils.getMethodBySignature(m_container.getClass(), signature);
-      if (method != null) {
-        return (List<ObjectInfo>) ReflectionUtils.invokeMethodEx(m_container, signature);
-      }
-    }
-    return m_container.getChildren();
-  }
+	@SuppressWarnings("unchecked")
+	private List<ObjectInfo> getContainerChildren() {
+		{
+			String signature = "getSimpleContainerChildren()";
+			Method method = ReflectionUtils.getMethodBySignature(m_container.getClass(), signature);
+			if (method != null) {
+				return (List<ObjectInfo>) ReflectionUtils.invokeMethodEx(m_container, signature);
+			}
+		}
+		return m_container.getChildren();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void command_CREATE(Object newObject) throws Exception {
-    if (!tryDuckTyping("command_CREATE", newObject)) {
-      command_CREATE_default(newObject);
-    }
-    tryDuckTyping("command_CREATE_after", newObject);
-    tryDuckTyping("command_TARGET_after", newObject);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void command_CREATE(Object newObject) throws Exception {
+		if (!tryDuckTyping("command_CREATE", newObject)) {
+			command_CREATE_default(newObject);
+		}
+		tryDuckTyping("command_CREATE_after", newObject);
+		tryDuckTyping("command_TARGET_after", newObject);
+	}
 
-  @Override
-  public void command_ADD(Object moveObject) throws Exception {
-    if (!tryDuckTyping("command_ADD", moveObject)) {
-      command_ADD_default(moveObject);
-    }
-    tryDuckTyping("command_ADD_after", moveObject);
-    tryDuckTyping("command_TARGET_after", moveObject);
-  }
+	@Override
+	public void command_ADD(Object moveObject) throws Exception {
+		if (!tryDuckTyping("command_ADD", moveObject)) {
+			command_ADD_default(moveObject);
+		}
+		tryDuckTyping("command_ADD_after", moveObject);
+		tryDuckTyping("command_TARGET_after", moveObject);
+	}
 
-  private void command_CREATE_default(Object newObject) throws Exception {
-    XmlObjectInfo component = (XmlObjectInfo) newObject;
-    XmlObjectUtils.add(component, m_configuration.getAssociation(), m_container, null);
-  }
+	private void command_CREATE_default(Object newObject) throws Exception {
+		XmlObjectInfo component = (XmlObjectInfo) newObject;
+		XmlObjectUtils.add(component, m_configuration.getAssociation(), m_container, null);
+	}
 
-  private void command_ADD_default(Object moveObject) throws Exception {
-    XmlObjectInfo component = (XmlObjectInfo) moveObject;
-    XmlObjectUtils.move(component, m_configuration.getAssociation(), m_container, null);
-  }
+	private void command_ADD_default(Object moveObject) throws Exception {
+		XmlObjectInfo component = (XmlObjectInfo) moveObject;
+		XmlObjectUtils.move(component, m_configuration.getAssociation(), m_container, null);
+	}
 
-  private boolean tryDuckTyping(String methodName, Object object) throws Exception {
-    Method method = getCommandMethod(methodName, object);
-    if (method != null) {
-      method.invoke(m_container, object);
-      return true;
-    }
-    return false;
-  }
+	private boolean tryDuckTyping(String methodName, Object object) throws Exception {
+		Method method = getCommandMethod(methodName, object);
+		if (method != null) {
+			method.invoke(m_container, object);
+			return true;
+		}
+		return false;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link Method} with given name that can be invoked with given parameter object.
-   */
-  private Method getCommandMethod(String methodName, Object object) {
-    for (Method method : m_container.getClass().getMethods()) {
-      if (method.getName().equals(methodName)) {
-        Class<?>[] parameterTypes = method.getParameterTypes();
-        if (parameterTypes.length == 1) {
-          if (ReflectionUtils.isAssignableFrom(parameterTypes[0], object)) {
-            return method;
-          }
-        }
-      }
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link Method} with given name that can be invoked with given parameter object.
+	 */
+	private Method getCommandMethod(String methodName, Object object) {
+		for (Method method : m_container.getClass().getMethods()) {
+			if (method.getName().equals(methodName)) {
+				Class<?>[] parameterTypes = method.getParameterTypes();
+				if (parameterTypes.length == 1) {
+					if (ReflectionUtils.isAssignableFrom(parameterTypes[0], object)) {
+						return method;
+					}
+				}
+			}
+		}
+		return null;
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/generic/SimpleContainerConfiguration.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/generic/SimpleContainerConfiguration.java
index 5e8dabb95..c8e0a54ec 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/generic/SimpleContainerConfiguration.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/generic/SimpleContainerConfiguration.java
@@ -20,30 +20,30 @@
  * @coverage XML.model.generic
  */
 public class SimpleContainerConfiguration {
-  private final ContainerObjectValidator m_componentValidator;
-  private final Association m_association;
+	private final ContainerObjectValidator m_componentValidator;
+	private final Association m_association;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SimpleContainerConfiguration(ContainerObjectValidator componentValidator,
-      Association association) {
-    m_componentValidator = componentValidator;
-    m_association = association;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SimpleContainerConfiguration(ContainerObjectValidator componentValidator,
+			Association association) {
+		m_componentValidator = componentValidator;
+		m_association = association;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ContainerObjectValidator getComponentValidator() {
-    return m_componentValidator;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ContainerObjectValidator getComponentValidator() {
+		return m_componentValidator;
+	}
 
-  public Association getAssociation() {
-    return m_association;
-  }
+	public Association getAssociation() {
+		return m_association;
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/generic/SimpleContainerFactory.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/generic/SimpleContainerFactory.java
index 267f913c1..6f5ff5cf4 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/generic/SimpleContainerFactory.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/generic/SimpleContainerFactory.java
@@ -34,145 +34,145 @@
  * @coverage XML.model.generic
  */
 public final class SimpleContainerFactory {
-  private final XmlObjectInfo m_object;
-  private final boolean m_forCanvas;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SimpleContainerFactory(XmlObjectInfo object, boolean forCanvas) {
-    m_object = object;
-    m_forCanvas = forCanvas;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public List<SimpleContainer> get() {
-    List<SimpleContainer> containers = Lists.newArrayList();
-    addConfigurableContainers(containers);
-    return containers;
-  }
-
-  private void addConfigurableContainers(List<SimpleContainer> containers) {
-    List<SimpleContainerConfiguration> configurations = getConfigurations();
-    for (SimpleContainerConfiguration configuration : configurations) {
-      SimpleContainer container = new SimpleContainerConfigurable(m_object, configuration);
-      containers.add(container);
-    }
-  }
-
-  public List<SimpleContainerConfiguration> getConfigurations() {
-    List<SimpleContainerConfiguration> configurations = Lists.newArrayList();
-    for (String prefix : getConfigurationPrefixes()) {
-      SimpleContainerConfiguration configuration = createConfiguration(prefix);
-      configurations.add(configuration);
-    }
-    return configurations;
-  }
-
-  private List<String> getConfigurationPrefixes() {
-    List<String> prefixes = Lists.newArrayList();
-    addConfigurationPrefixes(prefixes, "simpleContainer");
-    if (m_forCanvas) {
-      addConfigurationPrefixes(prefixes, "simpleContainer.canvas");
-    } else {
-      addConfigurationPrefixes(prefixes, "simpleContainer.tree");
-    }
-    return prefixes;
-  }
-
-  private void addConfigurationPrefixes(List<String> prefixes, String basePrefix) {
-    for (int i = 0; i < 10; i++) {
-      String prefix = basePrefix + (i == 0 ? "" : "." + i);
-      String validatorText = getParameter(prefix);
-      if (validatorText != null) {
-        if (ContainerObjectValidators.validateContainer(m_object, validatorText)) {
-          prefixes.add(prefix);
-        }
-      }
-    }
-  }
-
-  private SimpleContainerConfiguration createConfiguration(String prefix) {
-    return new SimpleContainerConfiguration(getComponentValidator(prefix), getAssociation(prefix));
-  }
-
-  private ContainerObjectValidator getComponentValidator(String prefix) {
-    // try to find "component-validator"
-    {
-      String validatorExpression = getParameter(prefix + ".component-validator");
-      if (validatorExpression != null) {
-        return ContainerObjectValidators.forComponentExpression(validatorExpression);
-      }
-    }
-    // component should be list of types
-    {
-      String componentString = getComponentString(prefix);
-      Assert.isNotNull(componentString, "No 'component' validator.");
-      String[] componentTypes = StringUtils.split(componentString);
-      return ContainerObjectValidators.forList(componentTypes);
-    }
-  }
-
-  private String getComponentString(String prefix) {
-    String componentString = getParameter(prefix + ".component");
-    // if no "component", try to get from "defaultComponent"
-    if (componentString == null) {
-      componentString = getParameter("simpleContainer.defaultComponent");
-    }
-    // return what we have
-    return componentString;
-  }
-
-  private Association getAssociation(String prefix) {
-    String associationString = getParameter(prefix + ".x-association");
-    if (associationString == null) {
-      return Associations.direct();
-    } else if (associationString.startsWith("inter ")) {
-      associationString = StringUtils.removeStart(associationString, "inter ");
-      // extract tag
-      String tag = StringUtils.substringBefore(associationString, " ");
-      associationString = StringUtils.substringAfter(associationString, " ");
-      // extract attributes
-      Map<String, String> attributes = parseAttributes(associationString);
-      return Associations.intermediate(tag, attributes);
-    } else {
-      Assert.isTrue(associationString.startsWith("property "));
-      String property = StringUtils.removeStart(associationString, "property ");
-      return Associations.property(property);
-    }
-  }
-
-  /**
-   * Parses attributes in format: attrA='a' attrB='b b'
-   */
-  private static Map<String, String> parseAttributes(String s) {
-    Map<String, String> attributes = Maps.newHashMap();
-    while (s.length() != 0) {
-      s = s.trim();
-      // extract name/value
-      int attrNameEnd = s.indexOf("='");
-      int attrValueEnd = s.indexOf("'", attrNameEnd + 2);
-      String attrName = s.substring(0, attrNameEnd);
-      String attrValue = s.substring(attrNameEnd + 2, attrValueEnd);
-      attributes.put(attrName, attrValue);
-      // next attribute
-      s = s.substring(attrValueEnd + 1);
-    }
-    return attributes;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private String getParameter(String name) {
-    return XmlObjectUtils.getParameter(m_object, name);
-  }
+	private final XmlObjectInfo m_object;
+	private final boolean m_forCanvas;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SimpleContainerFactory(XmlObjectInfo object, boolean forCanvas) {
+		m_object = object;
+		m_forCanvas = forCanvas;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public List<SimpleContainer> get() {
+		List<SimpleContainer> containers = Lists.newArrayList();
+		addConfigurableContainers(containers);
+		return containers;
+	}
+
+	private void addConfigurableContainers(List<SimpleContainer> containers) {
+		List<SimpleContainerConfiguration> configurations = getConfigurations();
+		for (SimpleContainerConfiguration configuration : configurations) {
+			SimpleContainer container = new SimpleContainerConfigurable(m_object, configuration);
+			containers.add(container);
+		}
+	}
+
+	public List<SimpleContainerConfiguration> getConfigurations() {
+		List<SimpleContainerConfiguration> configurations = Lists.newArrayList();
+		for (String prefix : getConfigurationPrefixes()) {
+			SimpleContainerConfiguration configuration = createConfiguration(prefix);
+			configurations.add(configuration);
+		}
+		return configurations;
+	}
+
+	private List<String> getConfigurationPrefixes() {
+		List<String> prefixes = Lists.newArrayList();
+		addConfigurationPrefixes(prefixes, "simpleContainer");
+		if (m_forCanvas) {
+			addConfigurationPrefixes(prefixes, "simpleContainer.canvas");
+		} else {
+			addConfigurationPrefixes(prefixes, "simpleContainer.tree");
+		}
+		return prefixes;
+	}
+
+	private void addConfigurationPrefixes(List<String> prefixes, String basePrefix) {
+		for (int i = 0; i < 10; i++) {
+			String prefix = basePrefix + (i == 0 ? "" : "." + i);
+			String validatorText = getParameter(prefix);
+			if (validatorText != null) {
+				if (ContainerObjectValidators.validateContainer(m_object, validatorText)) {
+					prefixes.add(prefix);
+				}
+			}
+		}
+	}
+
+	private SimpleContainerConfiguration createConfiguration(String prefix) {
+		return new SimpleContainerConfiguration(getComponentValidator(prefix), getAssociation(prefix));
+	}
+
+	private ContainerObjectValidator getComponentValidator(String prefix) {
+		// try to find "component-validator"
+		{
+			String validatorExpression = getParameter(prefix + ".component-validator");
+			if (validatorExpression != null) {
+				return ContainerObjectValidators.forComponentExpression(validatorExpression);
+			}
+		}
+		// component should be list of types
+		{
+			String componentString = getComponentString(prefix);
+			Assert.isNotNull(componentString, "No 'component' validator.");
+			String[] componentTypes = StringUtils.split(componentString);
+			return ContainerObjectValidators.forList(componentTypes);
+		}
+	}
+
+	private String getComponentString(String prefix) {
+		String componentString = getParameter(prefix + ".component");
+		// if no "component", try to get from "defaultComponent"
+		if (componentString == null) {
+			componentString = getParameter("simpleContainer.defaultComponent");
+		}
+		// return what we have
+		return componentString;
+	}
+
+	private Association getAssociation(String prefix) {
+		String associationString = getParameter(prefix + ".x-association");
+		if (associationString == null) {
+			return Associations.direct();
+		} else if (associationString.startsWith("inter ")) {
+			associationString = StringUtils.removeStart(associationString, "inter ");
+			// extract tag
+			String tag = StringUtils.substringBefore(associationString, " ");
+			associationString = StringUtils.substringAfter(associationString, " ");
+			// extract attributes
+			Map<String, String> attributes = parseAttributes(associationString);
+			return Associations.intermediate(tag, attributes);
+		} else {
+			Assert.isTrue(associationString.startsWith("property "));
+			String property = StringUtils.removeStart(associationString, "property ");
+			return Associations.property(property);
+		}
+	}
+
+	/**
+	 * Parses attributes in format: attrA='a' attrB='b b'
+	 */
+	private static Map<String, String> parseAttributes(String s) {
+		Map<String, String> attributes = Maps.newHashMap();
+		while (s.length() != 0) {
+			s = s.trim();
+			// extract name/value
+			int attrNameEnd = s.indexOf("='");
+			int attrValueEnd = s.indexOf("'", attrNameEnd + 2);
+			String attrName = s.substring(0, attrNameEnd);
+			String attrValue = s.substring(attrNameEnd + 2, attrValueEnd);
+			attributes.put(attrName, attrValue);
+			// next attribute
+			s = s.substring(attrValueEnd + 1);
+		}
+		return attributes;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private String getParameter(String name) {
+		return XmlObjectUtils.getParameter(m_object, name);
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/EmptyXmlProperty.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/EmptyXmlProperty.java
index 41bd20a4a..0553117f9 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/EmptyXmlProperty.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/EmptyXmlProperty.java
@@ -21,35 +21,35 @@
  * @coverage XML.model.property
  */
 public class EmptyXmlProperty extends XmlProperty {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public EmptyXmlProperty(XmlObjectInfo object) {
-    super(object, null, StringPropertyEditor.INSTANCE);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public EmptyXmlProperty(XmlObjectInfo object) {
+		super(object, null, StringPropertyEditor.INSTANCE);
+	}
 
-  public EmptyXmlProperty(XmlObjectInfo object, PropertyCategory category) {
-    super(object, null, category, StringPropertyEditor.INSTANCE);
-  }
+	public EmptyXmlProperty(XmlObjectInfo object, PropertyCategory category) {
+		super(object, null, category, StringPropertyEditor.INSTANCE);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean isModified() throws Exception {
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean isModified() throws Exception {
+		return false;
+	}
 
-  @Override
-  public Object getValue() throws Exception {
-    return null;
-  }
+	@Override
+	public Object getValue() throws Exception {
+		return null;
+	}
 
-  @Override
-  public void setValue(Object value) throws Exception {
-  }
+	@Override
+	public void setValue(Object value) throws Exception {
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/GenericProperty.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/GenericProperty.java
index 06bf7e75b..c82b95a40 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/GenericProperty.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/GenericProperty.java
@@ -23,39 +23,39 @@
  * @coverage XML.model.property
  */
 public abstract class GenericProperty extends XmlProperty implements ITypedProperty {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public GenericProperty(XmlObjectInfo object, String title, PropertyEditor propertyEditor) {
-    super(object, title, propertyEditor);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public GenericProperty(XmlObjectInfo object, String title, PropertyEditor propertyEditor) {
+		super(object, title, propertyEditor);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if this {@link GenericProperty} has given tag with value
-   *         <code>"true"</code>.
-   */
-  public abstract boolean hasTrueTag(String tag);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if this {@link GenericProperty} has given tag with value
+	 *         <code>"true"</code>.
+	 */
+	public abstract boolean hasTrueTag(String tag);
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Expression
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the attribute {@link String} expression, may be <code>null</code>.
-   */
-  public abstract String getExpression();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Expression
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the attribute {@link String} expression, may be <code>null</code>.
+	 */
+	public abstract String getExpression();
 
-  /**
-   * Updates attribute of {@link XmlObjectInfo} to have given string expression. If given value
-   * equals default, then attribute will be removed.
-   */
-  public abstract void setExpression(String expression, Object value) throws Exception;
+	/**
+	 * Updates attribute of {@link XmlObjectInfo} to have given string expression. If given value
+	 * equals default, then attribute will be removed.
+	 */
+	public abstract void setExpression(String expression, Object value) throws Exception;
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/GenericPropertyComposite.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/GenericPropertyComposite.java
index 35fe149bd..f4a24cb07 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/GenericPropertyComposite.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/GenericPropertyComposite.java
@@ -24,174 +24,174 @@
  * @coverage XML.model.property
  */
 public final class GenericPropertyComposite extends GenericProperty {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Creation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static GenericPropertyComposite create(Property... properties) {
-    // prepare GenericProperty's array
-    GenericProperty[] genericProperties = new GenericProperty[properties.length];
-    for (int i = 0; i < properties.length; i++) {
-      Property property = properties[i];
-      genericProperties[i] = (GenericProperty) property;
-    }
-    // create composite
-    GenericPropertyComposite composite = new GenericPropertyComposite(genericProperties);
-    composite.setCategory(genericProperties[0].getCategory());
-    return composite;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Creation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static GenericPropertyComposite create(Property... properties) {
+		// prepare GenericProperty's array
+		GenericProperty[] genericProperties = new GenericProperty[properties.length];
+		for (int i = 0; i < properties.length; i++) {
+			Property property = properties[i];
+			genericProperties[i] = (GenericProperty) property;
+		}
+		// create composite
+		GenericPropertyComposite composite = new GenericPropertyComposite(genericProperties);
+		composite.setCategory(genericProperties[0].getCategory());
+		return composite;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance fields
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final GenericProperty[] m_properties;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance fields
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final GenericProperty[] m_properties;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public GenericPropertyComposite(GenericProperty[] properties) {
-    super(properties[0].getObject(), properties[0].getTitle(), properties[0].getEditor());
-    m_properties = properties;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public GenericPropertyComposite(GenericProperty[] properties) {
+		super(properties[0].getObject(), properties[0].getTitle(), properties[0].getEditor());
+		m_properties = properties;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public int hashCode() {
-    return m_properties.length;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public int hashCode() {
+		return m_properties.length;
+	}
 
-  @Override
-  public boolean equals(Object obj) {
-    if (obj == this) {
-      return true;
-    }
-    //
-    if (obj instanceof GenericPropertyComposite) {
-      GenericPropertyComposite property = (GenericPropertyComposite) obj;
-      return ArrayUtils.isEquals(m_properties, property.m_properties);
-    }
-    //
-    return false;
-  }
+	@Override
+	public boolean equals(Object obj) {
+		if (obj == this) {
+			return true;
+		}
+		//
+		if (obj instanceof GenericPropertyComposite) {
+			GenericPropertyComposite property = (GenericPropertyComposite) obj;
+			return ArrayUtils.isEquals(m_properties, property.m_properties);
+		}
+		//
+		return false;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Property
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final Object NO_VALUE = new Object();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Property
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final Object NO_VALUE = new Object();
 
-  @Override
-  public boolean isModified() throws Exception {
-    for (GenericProperty property : m_properties) {
-      if (property.isModified()) {
-        return true;
-      }
-    }
-    // no modified properties
-    return false;
-  }
+	@Override
+	public boolean isModified() throws Exception {
+		for (GenericProperty property : m_properties) {
+			if (property.isModified()) {
+				return true;
+			}
+		}
+		// no modified properties
+		return false;
+	}
 
-  @Override
-  public Object getValue() throws Exception {
-    Object value = NO_VALUE;
-    for (GenericProperty property : m_properties) {
-      Object propertyValue = property.getValue();
-      if (value == NO_VALUE) {
-        value = propertyValue;
-      } else if (!ObjectUtils.equals(value, propertyValue)) {
-        return UNKNOWN_VALUE;
-      }
-    }
-    // return common value
-    return value;
-  }
+	@Override
+	public Object getValue() throws Exception {
+		Object value = NO_VALUE;
+		for (GenericProperty property : m_properties) {
+			Object propertyValue = property.getValue();
+			if (value == NO_VALUE) {
+				value = propertyValue;
+			} else if (!ObjectUtils.equals(value, propertyValue)) {
+				return UNKNOWN_VALUE;
+			}
+		}
+		// return common value
+		return value;
+	}
 
-  @Override
-  public void setValue(final Object value) throws Exception {
-    ExecutionUtils.run(m_object, new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        for (GenericProperty property : m_properties) {
-          property.setValue(value);
-        }
-      }
-    });
-  }
+	@Override
+	public void setValue(final Object value) throws Exception {
+		ExecutionUtils.run(m_object, new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				for (GenericProperty property : m_properties) {
+					property.setValue(value);
+				}
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Class<?> getType() {
-    Class<?> commonType = null;
-    for (GenericProperty property : m_properties) {
-      Class<?> type = property.getType();
-      // check that type is same
-      if (commonType == null) {
-        commonType = type;
-      } else if (type != commonType) {
-        return null;
-      }
-    }
-    // return type
-    return commonType;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Class<?> getType() {
+		Class<?> commonType = null;
+		for (GenericProperty property : m_properties) {
+			Class<?> type = property.getType();
+			// check that type is same
+			if (commonType == null) {
+				commonType = type;
+			} else if (type != commonType) {
+				return null;
+			}
+		}
+		// return type
+		return commonType;
+	}
 
-  @Override
-  public boolean hasTrueTag(String tag) {
-    for (GenericProperty property : m_properties) {
-      if (!property.hasTrueTag(tag)) {
-        return false;
-      }
-    }
-    return true;
-  }
+	@Override
+	public boolean hasTrueTag(String tag) {
+		for (GenericProperty property : m_properties) {
+			if (!property.hasTrueTag(tag)) {
+				return false;
+			}
+		}
+		return true;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Expression
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getExpression() {
-    String commonExpression = null;
-    for (GenericProperty property : m_properties) {
-      // prepare expression
-      String expression = property.getExpression();
-      if (expression == null) {
-        return null;
-      }
-      // check source
-      if (commonExpression == null) {
-        commonExpression = expression;
-      } else if (!commonExpression.equals(expression)) {
-        return null;
-      }
-    }
-    return commonExpression;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Expression
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getExpression() {
+		String commonExpression = null;
+		for (GenericProperty property : m_properties) {
+			// prepare expression
+			String expression = property.getExpression();
+			if (expression == null) {
+				return null;
+			}
+			// check source
+			if (commonExpression == null) {
+				commonExpression = expression;
+			} else if (!commonExpression.equals(expression)) {
+				return null;
+			}
+		}
+		return commonExpression;
+	}
 
-  @Override
-  public void setExpression(final String expression, final Object value) throws Exception {
-    ExecutionUtils.run(m_object, new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        for (GenericProperty property : m_properties) {
-          property.setExpression(expression, value);
-        }
-      }
-    });
-  }
+	@Override
+	public void setExpression(final String expression, final Object value) throws Exception {
+		ExecutionUtils.run(m_object, new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				for (GenericProperty property : m_properties) {
+					property.setExpression(expression, value);
+				}
+			}
+		});
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/GenericPropertyImpl.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/GenericPropertyImpl.java
index d7966b587..3d7d2ca04 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/GenericPropertyImpl.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/GenericPropertyImpl.java
@@ -35,266 +35,266 @@
  * @coverage XML.model.property
  */
 public final class GenericPropertyImpl extends GenericProperty {
-  private final GenericPropertyDescription m_description;
-  private final ExpressionConverter m_converter;
+	private final GenericPropertyDescription m_description;
+	private final ExpressionConverter m_converter;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public GenericPropertyImpl(XmlObjectInfo object, GenericPropertyDescription description) {
-    this(object, description, description.getTitle());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public GenericPropertyImpl(XmlObjectInfo object, GenericPropertyDescription description) {
+		this(object, description, description.getTitle());
+	}
 
-  /**
-   * Creates identical copy of given {@link GenericPropertyImpl}, but with different title.
-   */
-  public GenericPropertyImpl(GenericPropertyImpl property, String title) {
-    this(property.getObject(), property.getDescription(), title);
-  }
+	/**
+	 * Creates identical copy of given {@link GenericPropertyImpl}, but with different title.
+	 */
+	public GenericPropertyImpl(GenericPropertyImpl property, String title) {
+		this(property.getObject(), property.getDescription(), title);
+	}
 
-  private GenericPropertyImpl(XmlObjectInfo object,
-      GenericPropertyDescription description,
-      String title) {
-    super(object, title, description.getEditor());
-    m_description = description;
-    setCategory(description.getCategory());
-    m_converter = m_description.getConverter();
-  }
+	private GenericPropertyImpl(XmlObjectInfo object,
+			GenericPropertyDescription description,
+			String title) {
+		super(object, title, description.getEditor());
+		m_description = description;
+		setCategory(description.getCategory());
+		m_converter = m_description.getConverter();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the underlying {@link GenericPropertyDescription}.
-   */
-  public GenericPropertyDescription getDescription() {
-    return m_description;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the underlying {@link GenericPropertyDescription}.
+	 */
+	public GenericPropertyDescription getDescription() {
+		return m_description;
+	}
 
-  @Override
-  public Class<?> getType() {
-    return m_description.getType();
-  }
+	@Override
+	public Class<?> getType() {
+		return m_description.getType();
+	}
 
-  /**
-   * @return <code>true</code> if this {@link GenericPropertyImpl} has given tag with value
-   *         <code>"true"</code>.
-   */
-  @Override
-  public boolean hasTrueTag(String tag) {
-    return m_description.hasTrueTag(tag);
-  }
+	/**
+	 * @return <code>true</code> if this {@link GenericPropertyImpl} has given tag with value
+	 *         <code>"true"</code>.
+	 */
+	@Override
+	public boolean hasTrueTag(String tag) {
+		return m_description.hasTrueTag(tag);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean isModified() throws Exception {
-    for (ExpressionAccessor accessor : getAccessors()) {
-      if (accessor.isModified(m_object)) {
-        return true;
-      }
-    }
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean isModified() throws Exception {
+		for (ExpressionAccessor accessor : getAccessors()) {
+			if (accessor.isModified(m_object)) {
+				return true;
+			}
+		}
+		return false;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Value
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Object getValue() throws Exception {
-    // allow broadcast listeners to set value
-    {
-      Object[] valueArray = new Object[]{UNKNOWN_VALUE};
-      m_object.getBroadcast(GenericPropertyGetValue.class).invoke(this, valueArray);
-      if (valueArray[0] != UNKNOWN_VALUE) {
-        return valueArray[0];
-      }
-    }
-    // get value from accessor
-    {
-      Object value = m_description.getAccessor().getValue(m_object);
-      if (value != UNKNOWN_VALUE) {
-        return value;
-      }
-    }
-    // default value
-    return getDefaultValue();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Value
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Object getValue() throws Exception {
+		// allow broadcast listeners to set value
+		{
+			Object[] valueArray = new Object[]{UNKNOWN_VALUE};
+			m_object.getBroadcast(GenericPropertyGetValue.class).invoke(this, valueArray);
+			if (valueArray[0] != UNKNOWN_VALUE) {
+				return valueArray[0];
+			}
+		}
+		// get value from accessor
+		{
+			Object value = m_description.getAccessor().getValue(m_object);
+			if (value != UNKNOWN_VALUE) {
+				return value;
+			}
+		}
+		// default value
+		return getDefaultValue();
+	}
 
-  @Override
-  protected void setValueEx(Object value) throws Exception {
-    // validate value
-    {
-      Object[] valueToValidate = new Object[]{value};
-      boolean[] validationStatus = new boolean[]{true};
-      m_object.getBroadcast(GenericPropertySetValue.class).invoke(
-          this,
-          valueToValidate,
-          validationStatus);
-      if (!validationStatus[0]) {
-        return;
-      }
-      value = valueToValidate[0];
-    }
-    // may be editor wants to handle it
-    if (m_editor instanceof ISetValuePropertyEditor) {
-      ((ISetValuePropertyEditor) m_editor).setValue(this, value);
-      return;
-    }
-    // prepare expression
-    String expression;
-    Object defaultValue = getDefaultValue();
-    if (value == UNKNOWN_VALUE || ObjectUtils.equals(value, defaultValue)) {
-      if (hasTrueTag("x-keepDefault")) {
-        expression = m_converter.toSource(m_object, defaultValue);
-      } else {
-        expression = null;
-      }
-    } else if (m_editor instanceof IExpressionPropertyEditor) {
-      expression = ((IExpressionPropertyEditor) m_editor).getValueExpression(this, value);
-    } else {
-      expression = m_converter.toSource(m_object, value);
-    }
-    // set expression
-    setExpression(expression, value);
-  }
+	@Override
+	protected void setValueEx(Object value) throws Exception {
+		// validate value
+		{
+			Object[] valueToValidate = new Object[]{value};
+			boolean[] validationStatus = new boolean[]{true};
+			m_object.getBroadcast(GenericPropertySetValue.class).invoke(
+					this,
+					valueToValidate,
+					validationStatus);
+			if (!validationStatus[0]) {
+				return;
+			}
+			value = valueToValidate[0];
+		}
+		// may be editor wants to handle it
+		if (m_editor instanceof ISetValuePropertyEditor) {
+			((ISetValuePropertyEditor) m_editor).setValue(this, value);
+			return;
+		}
+		// prepare expression
+		String expression;
+		Object defaultValue = getDefaultValue();
+		if (value == UNKNOWN_VALUE || ObjectUtils.equals(value, defaultValue)) {
+			if (hasTrueTag("x-keepDefault")) {
+				expression = m_converter.toSource(m_object, defaultValue);
+			} else {
+				expression = null;
+			}
+		} else if (m_editor instanceof IExpressionPropertyEditor) {
+			expression = ((IExpressionPropertyEditor) m_editor).getValueExpression(this, value);
+		} else {
+			expression = m_converter.toSource(m_object, value);
+		}
+		// set expression
+		setExpression(expression, value);
+	}
 
-  @Override
-  public String getExpression() {
-    for (ExpressionAccessor accessor : getAccessors()) {
-      String expression = accessor.getExpression(m_object);
-      if (expression != null) {
-        return expression;
-      }
-    }
-    return null;
-  }
+	@Override
+	public String getExpression() {
+		for (ExpressionAccessor accessor : getAccessors()) {
+			String expression = accessor.getExpression(m_object);
+			if (expression != null) {
+				return expression;
+			}
+		}
+		return null;
+	}
 
-  @Override
-  public void setExpression(String expression, Object value) throws Exception {
-    // validate expression
-    {
-      String[] expressionToValidate = new String[]{expression};
-      Object[] valueToValidate = new Object[]{value};
-      boolean[] validationStatus = new boolean[]{true};
-      m_object.getBroadcast(GenericPropertySetExpression.class).invoke(
-          this,
-          expressionToValidate,
-          valueToValidate,
-          validationStatus);
-      if (!validationStatus[0]) {
-        return;
-      }
-      expression = expressionToValidate[0];
-      value = valueToValidate[0];
-    }
-    // set expression
-    if (value != UNKNOWN_VALUE
-        && !hasTrueTag("x-keepDefault")
-        && ObjectUtils.equals(value, getDefaultValue())) {
-      expression = null;
-    }
-    setExpression0(expression);
-  }
+	@Override
+	public void setExpression(String expression, Object value) throws Exception {
+		// validate expression
+		{
+			String[] expressionToValidate = new String[]{expression};
+			Object[] valueToValidate = new Object[]{value};
+			boolean[] validationStatus = new boolean[]{true};
+			m_object.getBroadcast(GenericPropertySetExpression.class).invoke(
+					this,
+					expressionToValidate,
+					valueToValidate,
+					validationStatus);
+			if (!validationStatus[0]) {
+				return;
+			}
+			expression = expressionToValidate[0];
+			value = valueToValidate[0];
+		}
+		// set expression
+		if (value != UNKNOWN_VALUE
+				&& !hasTrueTag("x-keepDefault")
+				&& ObjectUtils.equals(value, getDefaultValue())) {
+			expression = null;
+		}
+		setExpression0(expression);
+	}
 
-  /**
-   * Sets attribute {@link String} value.
-   */
-  private void setExpression0(String expression) throws Exception {
-    List<ExpressionAccessor> accessors = getAccessors();
-    // try to use modified accessor
-    for (ExpressionAccessor accessor : accessors) {
-      if (accessor.isModified(m_object)) {
-        accessor.setExpression(m_object, expression);
-        return;
-      }
-    }
-    // use first accessor
-    accessors.get(0).setExpression(m_object, expression);
-  }
+	/**
+	 * Sets attribute {@link String} value.
+	 */
+	private void setExpression0(String expression) throws Exception {
+		List<ExpressionAccessor> accessors = getAccessors();
+		// try to use modified accessor
+		for (ExpressionAccessor accessor : accessors) {
+			if (accessor.isModified(m_object)) {
+				accessor.setExpression(m_object, expression);
+				return;
+			}
+		}
+		// use first accessor
+		accessors.get(0).setExpression(m_object, expression);
+	}
 
-  /**
-   * @return all {@link ExpressionAccessor} which can be used.
-   */
-  public List<ExpressionAccessor> getAccessors() {
-    List<ExpressionAccessor> accessors = Lists.newArrayList();
-    // content accessor first
-    if (m_description.hasTrueTag("isContent")) {
-      accessors.add(ContentExpressionAccessor.INSTANCE);
-    }
-    // default accessor
-    accessors.add(m_description.getAccessor());
-    // done
-    return accessors;
-  }
+	/**
+	 * @return all {@link ExpressionAccessor} which can be used.
+	 */
+	public List<ExpressionAccessor> getAccessors() {
+		List<ExpressionAccessor> accessors = Lists.newArrayList();
+		// content accessor first
+		if (m_description.hasTrueTag("isContent")) {
+			accessors.add(ContentExpressionAccessor.INSTANCE);
+		}
+		// default accessor
+		accessors.add(m_description.getAccessor());
+		// done
+		return accessors;
+	}
 
-  /**
-   * @return the default value of this {@link GenericPropertyImpl}.
-   */
-  private Object getDefaultValue() throws Exception {
-    // if has forced default value in description, use it
-    {
-      Object defaultValue = m_description.getDefaultValue();
-      if (defaultValue != UNKNOWN_VALUE) {
-        return defaultValue;
-      }
-    }
-    // use default value from accessor
-    return m_description.getAccessor().getDefaultValue(m_object);
-  }
+	/**
+	 * @return the default value of this {@link GenericPropertyImpl}.
+	 */
+	private Object getDefaultValue() throws Exception {
+		// if has forced default value in description, use it
+		{
+			Object defaultValue = m_description.getDefaultValue();
+			if (defaultValue != UNKNOWN_VALUE) {
+				return defaultValue;
+			}
+		}
+		// use default value from accessor
+		return m_description.getAccessor().getDefaultValue(m_object);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Composite
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Property getComposite(Property[] properties) {
-    return GenericPropertyComposite.create(properties);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Composite
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Property getComposite(Property[] properties) {
+		return GenericPropertyComposite.create(properties);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IAdaptable
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public <T> T getAdapter(Class<T> adapter) {
-    if (adapter == PropertyTooltipProvider.class) {
-      return m_description.getAccessor().getAdapter(adapter);
-    }
-    return super.getAdapter(adapter);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IAdaptable
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public <T> T getAdapter(Class<T> adapter) {
+		if (adapter == PropertyTooltipProvider.class) {
+			return m_description.getAccessor().getAdapter(adapter);
+		}
+		return super.getAdapter(adapter);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Clipboard
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the value of XML attribute that has same value as current value of this
-   *         {@link GenericPropertyImpl}, or <code>null</code> if no such value can be provided.
-   */
-  public String getClipboardSource() throws Exception {
-    if (!isModified()) {
-      return null;
-    }
-    if (m_editor instanceof IClipboardSourceProvider) {
-      return ((IClipboardSourceProvider) m_editor).getClipboardSource(this);
-    }
-    if (m_converter != null) {
-      return m_converter.toSource(m_object, getValue());
-    }
-    // no clipboard source
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Clipboard
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the value of XML attribute that has same value as current value of this
+	 *         {@link GenericPropertyImpl}, or <code>null</code> if no such value can be provided.
+	 */
+	public String getClipboardSource() throws Exception {
+		if (!isModified()) {
+			return null;
+		}
+		if (m_editor instanceof IClipboardSourceProvider) {
+			return ((IClipboardSourceProvider) m_editor).getClipboardSource(this);
+		}
+		if (m_converter != null) {
+			return m_converter.toSource(m_object, getValue());
+		}
+		// no clipboard source
+		return null;
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/IConfigurablePropertyObject.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/IConfigurablePropertyObject.java
index 3e2d65f2f..8e1e692ea 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/IConfigurablePropertyObject.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/IConfigurablePropertyObject.java
@@ -21,8 +21,8 @@
  * @coverage XML.model.property
  */
 public interface IConfigurablePropertyObject {
-  /**
-   * Configures object with given {@link Map} of parameters.
-   */
-  void configure(EditorContext context, Map<String, Object> parameters) throws Exception;
+	/**
+	 * Configures object with given {@link Map} of parameters.
+	 */
+	void configure(EditorContext context, Map<String, Object> parameters) throws Exception;
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/IExpressionPropertyEditor.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/IExpressionPropertyEditor.java
index 290596376..0da55a938 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/IExpressionPropertyEditor.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/IExpressionPropertyEditor.java
@@ -20,8 +20,8 @@
  * @coverage XML.model.property
  */
 public interface IExpressionPropertyEditor {
-  /**
-   * @return the {@link String} to set into attribute.
-   */
-  String getValueExpression(GenericProperty property, Object value) throws Exception;
+	/**
+	 * @return the {@link String} to set into attribute.
+	 */
+	String getValueExpression(GenericProperty property, Object value) throws Exception;
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/ISetValuePropertyEditor.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/ISetValuePropertyEditor.java
index 84abad773..e7e73cc99 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/ISetValuePropertyEditor.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/ISetValuePropertyEditor.java
@@ -20,5 +20,5 @@
  * @coverage XML.model.property
  */
 public interface ISetValuePropertyEditor {
-  void setValue(GenericProperty property, Object value) throws Exception;
+	void setValue(GenericProperty property, Object value) throws Exception;
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/XmlAttributeProperty.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/XmlAttributeProperty.java
index 8e33f94c2..05af5504b 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/XmlAttributeProperty.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/XmlAttributeProperty.java
@@ -21,43 +21,43 @@
  * @coverage XML.model.property
  */
 public class XmlAttributeProperty extends XmlProperty {
-  private final String m_attribute;
+	private final String m_attribute;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public XmlAttributeProperty(XmlObjectInfo object,
-      String title,
-      PropertyEditor propertyEditor,
-      String attribute) {
-    super(object, title, propertyEditor);
-    m_attribute = attribute;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public XmlAttributeProperty(XmlObjectInfo object,
+			String title,
+			PropertyEditor propertyEditor,
+			String attribute) {
+		super(object, title, propertyEditor);
+		m_attribute = attribute;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Property
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean isModified() throws Exception {
-    return getValue() != null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Property
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean isModified() throws Exception {
+		return getValue() != null;
+	}
 
-  @Override
-  public Object getValue() throws Exception {
-    return m_object.getAttribute(m_attribute);
-  }
+	@Override
+	public Object getValue() throws Exception {
+		return m_object.getAttribute(m_attribute);
+	}
 
-  @Override
-  protected void setValueEx(Object value) throws Exception {
-    if (value == UNKNOWN_VALUE) {
-      m_object.removeAttribute(m_attribute);
-    }
-    if (value instanceof String) {
-      m_object.setAttribute(m_attribute, (String) value);
-    }
-  }
+	@Override
+	protected void setValueEx(Object value) throws Exception {
+		if (value == UNKNOWN_VALUE) {
+			m_object.removeAttribute(m_attribute);
+		}
+		if (value instanceof String) {
+			m_object.setAttribute(m_attribute, (String) value);
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/XmlProperty.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/XmlProperty.java
index 85624262a..0071dabc6 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/XmlProperty.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/XmlProperty.java
@@ -28,89 +28,89 @@
  * @coverage XML.model.property
  */
 public abstract class XmlProperty extends ObjectProperty {
-  protected final XmlObjectInfo m_object;
-  private final String m_title;
+	protected final XmlObjectInfo m_object;
+	private final String m_title;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public XmlProperty(XmlObjectInfo object, String title, PropertyEditor propertyEditor) {
-    this(object, title, PropertyCategory.NORMAL, propertyEditor);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public XmlProperty(XmlObjectInfo object, String title, PropertyEditor propertyEditor) {
+		this(object, title, PropertyCategory.NORMAL, propertyEditor);
+	}
 
-  public XmlProperty(XmlObjectInfo object,
-      String title,
-      PropertyCategory category,
-      PropertyEditor propertyEditor) {
-    super(propertyEditor);
-    m_object = object;
-    m_title = title;
-    setCategory(category);
-  }
+	public XmlProperty(XmlObjectInfo object,
+			String title,
+			PropertyCategory category,
+			PropertyEditor propertyEditor) {
+		super(propertyEditor);
+		m_object = object;
+		m_title = title;
+		setCategory(category);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final String getTitle() {
-    return m_title;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final String getTitle() {
+		return m_title;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final ObjectInfo getObjectInfo() {
-    return m_object;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final ObjectInfo getObjectInfo() {
+		return m_object;
+	}
 
-  /**
-   * @return the {@link XmlObjectInfo} of this property.
-   */
-  public final XmlObjectInfo getObject() {
-    return m_object;
-  }
+	/**
+	 * @return the {@link XmlObjectInfo} of this property.
+	 */
+	public final XmlObjectInfo getObject() {
+		return m_object;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Value
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void setValue(final Object value) throws Exception {
-    ExecutionUtils.run(m_object, new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        setValueEx(value);
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Value
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void setValue(final Object value) throws Exception {
+		ExecutionUtils.run(m_object, new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				setValueEx(value);
+			}
+		});
+	}
 
-  /**
-   * Implementation of {@link #setValue(Object)} executed in edit operation.
-   */
-  protected void setValueEx(Object value) throws Exception {
-  }
+	/**
+	 * Implementation of {@link #setValue(Object)} executed in edit operation.
+	 */
+	protected void setValueEx(Object value) throws Exception {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IAdaptable
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public <T> T getAdapter(Class<T> adapter) {
-    if (adapter == IJavaProject.class) {
-      return adapter.cast(m_object.getContext().getJavaProject());
-    }
-    if (adapter == ObjectInfo.class) {
-      return adapter.cast(m_object);
-    }
-    return super.getAdapter(adapter);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IAdaptable
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public <T> T getAdapter(Class<T> adapter) {
+		if (adapter == IJavaProject.class) {
+			return adapter.cast(m_object.getContext().getJavaProject());
+		}
+		if (adapter == ObjectInfo.class) {
+			return adapter.cast(m_object);
+		}
+		return super.getAdapter(adapter);
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/accessor/ContentExpressionAccessor.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/accessor/ContentExpressionAccessor.java
index 6811d703e..e697338f9 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/accessor/ContentExpressionAccessor.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/accessor/ContentExpressionAccessor.java
@@ -20,35 +20,35 @@
  * @coverage XML.model.property
  */
 public final class ContentExpressionAccessor extends ExpressionAccessor {
-  public static final ExpressionAccessor INSTANCE = new ContentExpressionAccessor();
+	public static final ExpressionAccessor INSTANCE = new ContentExpressionAccessor();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private ContentExpressionAccessor() {
-    super(null);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private ContentExpressionAccessor() {
+		super(null);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Value
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean isModified(XmlObjectInfo object) throws Exception {
-    return object.getElement().getTextNode() != null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Value
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean isModified(XmlObjectInfo object) throws Exception {
+		return object.getElement().getTextNode() != null;
+	}
 
-  @Override
-  public String getExpression(XmlObjectInfo object) {
-    DocumentTextNode textNode = object.getElement().getTextNode();
-    return textNode != null ? textNode.getText() : null;
-  }
+	@Override
+	public String getExpression(XmlObjectInfo object) {
+		DocumentTextNode textNode = object.getElement().getTextNode();
+		return textNode != null ? textNode.getText() : null;
+	}
 
-  @Override
-  public void setExpression(XmlObjectInfo object, String expression) throws Exception {
-    object.getElement().setText(expression, false);
-  }
+	@Override
+	public void setExpression(XmlObjectInfo object, String expression) throws Exception {
+		object.getElement().setText(expression, false);
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/accessor/EmptyExpressionAccessor.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/accessor/EmptyExpressionAccessor.java
index 31b502af7..0208593df 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/accessor/EmptyExpressionAccessor.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/accessor/EmptyExpressionAccessor.java
@@ -20,29 +20,29 @@
  * @coverage XML.model.property
  */
 public class EmptyExpressionAccessor extends ExpressionAccessor {
-  public static final ExpressionAccessor INSTANCE = new EmptyExpressionAccessor();
+	public static final ExpressionAccessor INSTANCE = new EmptyExpressionAccessor();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public EmptyExpressionAccessor() {
-    super("no-attribute");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public EmptyExpressionAccessor() {
+		super("no-attribute");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Value
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Object getValue(XmlObjectInfo object) throws Exception {
-    return Property.UNKNOWN_VALUE;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Value
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Object getValue(XmlObjectInfo object) throws Exception {
+		return Property.UNKNOWN_VALUE;
+	}
 
-  @Override
-  public Object getDefaultValue(XmlObjectInfo object) throws Exception {
-    return Property.UNKNOWN_VALUE;
-  }
+	@Override
+	public Object getDefaultValue(XmlObjectInfo object) throws Exception {
+		return Property.UNKNOWN_VALUE;
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/accessor/ExpressionAccessor.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/accessor/ExpressionAccessor.java
index 9a0a5cd5e..ebe9d2489 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/accessor/ExpressionAccessor.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/accessor/ExpressionAccessor.java
@@ -27,124 +27,124 @@
  * @coverage XML.model.property
  */
 public abstract class ExpressionAccessor extends AbstractDescription {
-  protected final String m_attribute;
+	protected final String m_attribute;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ExpressionAccessor(String attribute) {
-    m_attribute = attribute;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ExpressionAccessor(String attribute) {
+		m_attribute = attribute;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  /////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the name of attribute.
-   */
-  public final String getAttribute() {
-    return m_attribute;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	/////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the name of attribute.
+	 */
+	public final String getAttribute() {
+		return m_attribute;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Value
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if this attribute is set.
-   */
-  public boolean isModified(XmlObjectInfo object) throws Exception {
-    // attribute
-    if (getExpression(object) != null) {
-      return true;
-    }
-    // sub-element
-    {
-      DocumentElement element = getExistingElement(object);
-      if (element != null) {
-        String propertyName = element.getTag() + "." + m_attribute;
-        if (element.getChild(propertyName, true) != null) {
-          return true;
-        }
-      }
-    }
-    // no value
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Value
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if this attribute is set.
+	 */
+	public boolean isModified(XmlObjectInfo object) throws Exception {
+		// attribute
+		if (getExpression(object) != null) {
+			return true;
+		}
+		// sub-element
+		{
+			DocumentElement element = getExistingElement(object);
+			if (element != null) {
+				String propertyName = element.getTag() + "." + m_attribute;
+				if (element.getChild(propertyName, true) != null) {
+					return true;
+				}
+			}
+		}
+		// no value
+		return false;
+	}
 
-  /**
-   * @return the {@link String} expression of attribute, may be <code>null</code> if not set.
-   */
-  public String getExpression(XmlObjectInfo object) {
-    DocumentElement element = getExistingElement(object);
-    if (element != null) {
-      return element.getAttribute(m_attribute);
-    }
-    return null;
-  }
+	/**
+	 * @return the {@link String} expression of attribute, may be <code>null</code> if not set.
+	 */
+	public String getExpression(XmlObjectInfo object) {
+		DocumentElement element = getExistingElement(object);
+		if (element != null) {
+			return element.getAttribute(m_attribute);
+		}
+		return null;
+	}
 
-  /**
-   * Updates attribute of given {@link XmlObjectInfo} to have given expression.
-   *
-   * @param expression
-   *          the new expression of attribute, may be <code>null</code> to remove attribute.
-   */
-  public void setExpression(XmlObjectInfo object, String expression) throws Exception {
-    DocumentElement element = getElement(object);
-    element.setAttribute(m_attribute, expression);
-    ExecutionUtils.refresh(object);
-  }
+	/**
+	 * Updates attribute of given {@link XmlObjectInfo} to have given expression.
+	 *
+	 * @param expression
+	 *          the new expression of attribute, may be <code>null</code> to remove attribute.
+	 */
+	public void setExpression(XmlObjectInfo object, String expression) throws Exception {
+		DocumentElement element = getElement(object);
+		element.setAttribute(m_attribute, expression);
+		ExecutionUtils.refresh(object);
+	}
 
-  /**
-   * @return the {@link DocumentElement} to use to get attribute.
-   */
-  protected DocumentElement getExistingElement(XmlObjectInfo object) {
-    return object.getCreationSupport().getExistingElement();
-  }
+	/**
+	 * @return the {@link DocumentElement} to use to get attribute.
+	 */
+	protected DocumentElement getExistingElement(XmlObjectInfo object) {
+		return object.getCreationSupport().getExistingElement();
+	}
 
-  /**
-   * @return the {@link DocumentElement} to use to set attribute.
-   */
-  protected DocumentElement getElement(XmlObjectInfo object) {
-    return object.getCreationSupport().getElement();
-  }
+	/**
+	 * @return the {@link DocumentElement} to use to set attribute.
+	 */
+	protected DocumentElement getElement(XmlObjectInfo object) {
+		return object.getCreationSupport().getElement();
+	}
 
-  /**
-   * @return the value of property in given {@link XmlObjectInfo}, may be
-   *         {@link Property#UNKNOWN_VALUE} if attribute was not set.
-   */
-  public Object getValue(XmlObjectInfo object) throws Exception {
-    if (hasTrueTag("x-rawValue")) {
-      String value = object.getAttribute(m_attribute);
-      if (value != null) {
-        return value;
-      }
-    }
-    return object.getAttributeValue(m_attribute);
-  }
+	/**
+	 * @return the value of property in given {@link XmlObjectInfo}, may be
+	 *         {@link Property#UNKNOWN_VALUE} if attribute was not set.
+	 */
+	public Object getValue(XmlObjectInfo object) throws Exception {
+		if (hasTrueTag("x-rawValue")) {
+			String value = object.getAttribute(m_attribute);
+			if (value != null) {
+				return value;
+			}
+		}
+		return object.getAttributeValue(m_attribute);
+	}
 
-  /**
-   * @return the default value of property in given {@link XmlObjectInfo}.
-   */
-  public Object getDefaultValue(XmlObjectInfo object) throws Exception {
-    return Property.UNKNOWN_VALUE;
-  }
+	/**
+	 * @return the default value of property in given {@link XmlObjectInfo}.
+	 */
+	public Object getDefaultValue(XmlObjectInfo object) throws Exception {
+		return Property.UNKNOWN_VALUE;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Default value
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Property can be marked with this tag (with value "true") to specify, that
-   * {@link ExpressionAccessor} should not try to fetch default value. For example in eSWT
-   * <code>Menu.getVisible()</code> contains bug - infinite recursion, so we should prevent its
-   * invocation.
-   */
-  public static final String NO_DEFAULT_VALUE_TAG = "noDefaultValue";
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Default value
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Property can be marked with this tag (with value "true") to specify, that
+	 * {@link ExpressionAccessor} should not try to fetch default value. For example in eSWT
+	 * <code>Menu.getVisible()</code> contains bug - infinite recursion, so we should prevent its
+	 * invocation.
+	 */
+	public static final String NO_DEFAULT_VALUE_TAG = "noDefaultValue";
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/accessor/FieldExpressionAccessor.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/accessor/FieldExpressionAccessor.java
index 25f24d46a..10a99d52b 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/accessor/FieldExpressionAccessor.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/accessor/FieldExpressionAccessor.java
@@ -27,73 +27,73 @@
  * @coverage XML.model.property
  */
 public final class FieldExpressionAccessor extends ExpressionAccessor {
-  private final Field m_field;
+	private final Field m_field;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FieldExpressionAccessor(Field field) {
-    super(field.getName());
-    m_field = field;
-    m_tooltipProvider = AccessorUtils.PropertyTooltipProvider_forField(field);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FieldExpressionAccessor(Field field) {
+		super(field.getName());
+		m_field = field;
+		m_tooltipProvider = AccessorUtils.PropertyTooltipProvider_forField(field);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Value
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Object getDefaultValue(XmlObjectInfo object) throws Exception {
-    if (XmlObjectUtils.isImplicit(object) && object.getParent() instanceof XmlObjectInfo) {
-      XmlObjectInfo xmlParent = (XmlObjectInfo) object.getParent();
-      DocumentElement objectElement = getExistingElement(object);
-      if (objectElement == getExistingElement(xmlParent)) {
-        return Property.UNKNOWN_VALUE;
-      }
-    }
-    return object.getArbitraryValue(this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Value
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Object getDefaultValue(XmlObjectInfo object) throws Exception {
+		if (XmlObjectUtils.isImplicit(object) && object.getParent() instanceof XmlObjectInfo) {
+			XmlObjectInfo xmlParent = (XmlObjectInfo) object.getParent();
+			DocumentElement objectElement = getExistingElement(object);
+			if (objectElement == getExistingElement(xmlParent)) {
+				return Property.UNKNOWN_VALUE;
+			}
+		}
+		return object.getArbitraryValue(this);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Visiting
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void visit(XmlObjectInfo object, int state) throws Exception {
-    super.visit(object, state);
-    if (state == STATE_OBJECT_READY) {
-      Object toolkitObject = object.getObject();
-      Object value = ReflectionUtils.getFieldObject(toolkitObject, m_field.getName());
-      object.putArbitraryValue(this, value);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Visiting
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void visit(XmlObjectInfo object, int state) throws Exception {
+		super.visit(object, state);
+		if (state == STATE_OBJECT_READY) {
+			Object toolkitObject = object.getObject();
+			Object value = ReflectionUtils.getFieldObject(toolkitObject, m_field.getName());
+			object.putArbitraryValue(this, value);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IAdaptable
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final PropertyTooltipProvider m_tooltipProvider;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IAdaptable
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final PropertyTooltipProvider m_tooltipProvider;
 
-  @Override
-  public <T> T getAdapter(Class<T> adapter) {
-    if (adapter == PropertyTooltipProvider.class) {
-      return adapter.cast(m_tooltipProvider);
-    }
-    // other
-    return super.getAdapter(adapter);
-  }
+	@Override
+	public <T> T getAdapter(Class<T> adapter) {
+		if (adapter == PropertyTooltipProvider.class) {
+			return adapter.cast(m_tooltipProvider);
+		}
+		// other
+		return super.getAdapter(adapter);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public Field getField() {
-    return m_field;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public Field getField() {
+		return m_field;
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/accessor/MethodExpressionAccessor.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/accessor/MethodExpressionAccessor.java
index 1c94093f4..12b41f393 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/accessor/MethodExpressionAccessor.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/accessor/MethodExpressionAccessor.java
@@ -26,93 +26,93 @@
  * @coverage XML.model.property
  */
 public final class MethodExpressionAccessor extends ExpressionAccessor {
-  private final Method m_setter;
-  private final Method m_getter;
+	private final Method m_setter;
+	private final Method m_getter;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public MethodExpressionAccessor(String attribute, Method setter, Method getter) {
-    super(attribute);
-    m_setter = setter;
-    m_getter = getter;
-    m_tooltipProvider = AccessorUtils.PropertyTooltipProvider_forMethod(setter);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public MethodExpressionAccessor(String attribute, Method setter, Method getter) {
+		super(attribute);
+		m_setter = setter;
+		m_getter = getter;
+		m_tooltipProvider = AccessorUtils.PropertyTooltipProvider_forMethod(setter);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Value
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Object getDefaultValue(XmlObjectInfo object) throws Exception {
-    return object.getArbitraryValue(this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Value
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Object getDefaultValue(XmlObjectInfo object) throws Exception {
+		return object.getArbitraryValue(this);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Visiting
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void visit(XmlObjectInfo object, int state) throws Exception {
-    super.visit(object, state);
-    if (state == STATE_OBJECT_READY) {
-      object.putArbitraryValue(this, askDefaultValue(object));
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Visiting
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void visit(XmlObjectInfo object, int state) throws Exception {
+		super.visit(object, state);
+		if (state == STATE_OBJECT_READY) {
+			object.putArbitraryValue(this, askDefaultValue(object));
+		}
+	}
 
-  /**
-   * @return the default value to remember, may be {@link Property#UNKNOWN_VALUE}.
-   */
-  private Object askDefaultValue(final XmlObjectInfo object) {
-    if (m_getter != null) {
-      return ExecutionUtils.runObjectIgnore(new RunnableObjectEx<Object>() {
-        @Override
-        public Object runObject() throws Exception {
-          Object toolkitObject = object.getObject();
-          return m_getter.invoke(toolkitObject);
-        }
-      }, Property.UNKNOWN_VALUE);
-    } else {
-      return Property.UNKNOWN_VALUE;
-    }
-  }
+	/**
+	 * @return the default value to remember, may be {@link Property#UNKNOWN_VALUE}.
+	 */
+	private Object askDefaultValue(final XmlObjectInfo object) {
+		if (m_getter != null) {
+			return ExecutionUtils.runObjectIgnore(new RunnableObjectEx<Object>() {
+				@Override
+				public Object runObject() throws Exception {
+					Object toolkitObject = object.getObject();
+					return m_getter.invoke(toolkitObject);
+				}
+			}, Property.UNKNOWN_VALUE);
+		} else {
+			return Property.UNKNOWN_VALUE;
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IAdaptable
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final PropertyTooltipProvider m_tooltipProvider;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IAdaptable
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final PropertyTooltipProvider m_tooltipProvider;
 
-  @Override
-  public <T> T getAdapter(Class<T> adapter) {
-    if (adapter == PropertyTooltipProvider.class) {
-      return adapter.cast(m_tooltipProvider);
-    }
-    // other
-    return super.getAdapter(adapter);
-  }
+	@Override
+	public <T> T getAdapter(Class<T> adapter) {
+		if (adapter == PropertyTooltipProvider.class) {
+			return adapter.cast(m_tooltipProvider);
+		}
+		// other
+		return super.getAdapter(adapter);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the setter of the property.
-   */
-  public Method getSetter() {
-    return m_setter;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the setter of the property.
+	 */
+	public Method getSetter() {
+		return m_setter;
+	}
 
-  /**
-   * @return the getter of the property.
-   */
-  public Method getGetter() {
-    return m_getter;
-  }
+	/**
+	 * @return the getter of the property.
+	 */
+	public Method getGetter() {
+		return m_getter;
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/converter/BooleanConverter.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/converter/BooleanConverter.java
index 49c38a876..a9cfd40ed 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/converter/BooleanConverter.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/converter/BooleanConverter.java
@@ -19,27 +19,27 @@
  * @coverage XML.model.property
  */
 public final class BooleanConverter extends ExpressionConverter {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final ExpressionConverter INSTANCE = new BooleanConverter();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final ExpressionConverter INSTANCE = new BooleanConverter();
 
-  private BooleanConverter() {
-  }
+	private BooleanConverter() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ExpressionConverter
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toSource(XmlObjectInfo object, Object value) throws Exception {
-    if (value instanceof Boolean) {
-      Boolean valueBoolean = (Boolean) value;
-      return valueBoolean.toString();
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ExpressionConverter
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toSource(XmlObjectInfo object, Object value) throws Exception {
+		if (value instanceof Boolean) {
+			Boolean valueBoolean = (Boolean) value;
+			return valueBoolean.toString();
+		}
+		return null;
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/converter/DoubleConverter.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/converter/DoubleConverter.java
index a63c85446..0fce5bb63 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/converter/DoubleConverter.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/converter/DoubleConverter.java
@@ -22,28 +22,28 @@
  * @coverage XML.model.property
  */
 public final class DoubleConverter extends ExpressionConverter {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final ExpressionConverter INSTANCE = new DoubleConverter();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final ExpressionConverter INSTANCE = new DoubleConverter();
 
-  private DoubleConverter() {
-  }
+	private DoubleConverter() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ExpressionConverter
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toSource(XmlObjectInfo object, Object value) throws Exception {
-    if (value instanceof Double) {
-      String source = Double.toString((Double) value);
-      source = StringUtils.removeEnd(source, ".0");
-      return source;
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ExpressionConverter
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toSource(XmlObjectInfo object, Object value) throws Exception {
+		if (value instanceof Double) {
+			String source = Double.toString((Double) value);
+			source = StringUtils.removeEnd(source, ".0");
+			return source;
+		}
+		return null;
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/converter/EnumConverter.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/converter/EnumConverter.java
index d1ed7b603..ecba1bf00 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/converter/EnumConverter.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/converter/EnumConverter.java
@@ -19,27 +19,27 @@
  * @coverage XML.model.property
  */
 public final class EnumConverter extends ExpressionConverter {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final ExpressionConverter INSTANCE = new EnumConverter();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final ExpressionConverter INSTANCE = new EnumConverter();
 
-  private EnumConverter() {
-  }
+	private EnumConverter() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ExpressionConverter
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toSource(XmlObjectInfo object, Object value) throws Exception {
-    if (value instanceof Enum<?>) {
-      Enum<?> enumValue = (Enum<?>) value;
-      return enumValue.name();
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ExpressionConverter
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toSource(XmlObjectInfo object, Object value) throws Exception {
+		if (value instanceof Enum<?>) {
+			Enum<?> enumValue = (Enum<?>) value;
+			return enumValue.name();
+		}
+		return null;
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/converter/ExpressionConverter.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/converter/ExpressionConverter.java
index 2ab66200d..63ceb1e55 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/converter/ExpressionConverter.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/converter/ExpressionConverter.java
@@ -19,8 +19,8 @@
  * @coverage XML.model.property
  */
 public abstract class ExpressionConverter {
-  /**
-   * @return the value of XML attribute with given value.
-   */
-  public abstract String toSource(XmlObjectInfo object, Object value) throws Exception;
+	/**
+	 * @return the value of XML attribute with given value.
+	 */
+	public abstract String toSource(XmlObjectInfo object, Object value) throws Exception;
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/converter/FloatConverter.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/converter/FloatConverter.java
index e34bd5da8..73caecfe8 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/converter/FloatConverter.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/converter/FloatConverter.java
@@ -20,26 +20,26 @@
  * @coverage XML.model.property
  */
 public final class FloatConverter extends ExpressionConverter {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final ExpressionConverter INSTANCE = new FloatConverter();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final ExpressionConverter INSTANCE = new FloatConverter();
 
-  private FloatConverter() {
-  }
+	private FloatConverter() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ExpressionConverter
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toSource(XmlObjectInfo object, Object value) throws Exception {
-    if (value instanceof Float) {
-      return Float.toString((Float) value);
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ExpressionConverter
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toSource(XmlObjectInfo object, Object value) throws Exception {
+		if (value instanceof Float) {
+			return Float.toString((Float) value);
+		}
+		return null;
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/converter/IntegerConverter.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/converter/IntegerConverter.java
index c78a059b0..ba82d4465 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/converter/IntegerConverter.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/converter/IntegerConverter.java
@@ -19,27 +19,27 @@
  * @coverage XML.model.property
  */
 public final class IntegerConverter extends ExpressionConverter {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final ExpressionConverter INSTANCE = new IntegerConverter();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final ExpressionConverter INSTANCE = new IntegerConverter();
 
-  private IntegerConverter() {
-  }
+	private IntegerConverter() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ExpressionConverter
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toSource(XmlObjectInfo object, Object value) throws Exception {
-    if (value instanceof Integer) {
-      Integer valueInteger = (Integer) value;
-      return valueInteger.toString();
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ExpressionConverter
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toSource(XmlObjectInfo object, Object value) throws Exception {
+		if (value instanceof Integer) {
+			Integer valueInteger = (Integer) value;
+			return valueInteger.toString();
+		}
+		return null;
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/converter/StringConverter.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/converter/StringConverter.java
index 5937c8e59..1d01bf0d1 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/converter/StringConverter.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/converter/StringConverter.java
@@ -19,23 +19,23 @@
  * @coverage XML.model.property
  */
 public final class StringConverter extends ExpressionConverter {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final ExpressionConverter INSTANCE = new StringConverter();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final ExpressionConverter INSTANCE = new StringConverter();
 
-  private StringConverter() {
-  }
+	private StringConverter() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ExpressionConverter
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toSource(XmlObjectInfo object, Object value) throws Exception {
-    return (String) value;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ExpressionConverter
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toSource(XmlObjectInfo object, Object value) throws Exception {
+		return (String) value;
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/editor/EnumPropertyEditor.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/editor/EnumPropertyEditor.java
index 6c753efcb..362ea9ee6 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/editor/EnumPropertyEditor.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/editor/EnumPropertyEditor.java
@@ -27,120 +27,120 @@
  * @coverage XML.model.property.editor
  */
 public final class EnumPropertyEditor extends AbstractComboPropertyEditor
-    implements
-      IExpressionPropertyEditor,
-      IClipboardSourceProvider {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final EnumPropertyEditor INSTANCE = new EnumPropertyEditor();
+implements
+IExpressionPropertyEditor,
+IClipboardSourceProvider {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final EnumPropertyEditor INSTANCE = new EnumPropertyEditor();
 
-  private EnumPropertyEditor() {
-  }
+	private EnumPropertyEditor() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // TextDisplayPropertyEditor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getText(Property property) throws Exception {
-    Object value = property.getValue();
-    // return title for value
-    if (value instanceof Enum<?>) {
-      Enum<?> element = (Enum<?>) value;
-      return element.toString();
-    }
-    // unknown value
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// TextDisplayPropertyEditor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getText(Property property) throws Exception {
+		Object value = property.getValue();
+		// return title for value
+		if (value instanceof Enum<?>) {
+			Enum<?> element = (Enum<?>) value;
+			return element.toString();
+		}
+		// unknown value
+		return null;
+	}
 
-  public void setText(Property property, String text) throws Exception {
-    for (Enum<?> element : getElements(property)) {
-      if (element.toString().equals(text)) {
-        setPropertyValue(property, element);
-        break;
-      }
-    }
-  }
+	public void setText(Property property, String text) throws Exception {
+		for (Enum<?> element : getElements(property)) {
+			if (element.toString().equals(text)) {
+				setPropertyValue(property, element);
+				break;
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Combo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void addItems(Property property, CCombo3 combo) throws Exception {
-    Enum<?>[] elements = getElements(property);
-    for (Enum<?> element : elements) {
-      combo.add(element.toString());
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Combo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void addItems(Property property, CCombo3 combo) throws Exception {
+		Enum<?>[] elements = getElements(property);
+		for (Enum<?> element : elements) {
+			combo.add(element.toString());
+		}
+	}
 
-  @Override
-  protected void selectItem(Property property, CCombo3 combo) throws Exception {
-    combo.setText(getText(property));
-  }
+	@Override
+	protected void selectItem(Property property, CCombo3 combo) throws Exception {
+		combo.setText(getText(property));
+	}
 
-  @Override
-  protected void toPropertyEx(Property property, CCombo3 combo, int index) throws Exception {
-    Enum<?>[] elements = getElements(property);
-    Enum<?> element = elements[index];
-    setPropertyValue(property, element);
-  }
+	@Override
+	protected void toPropertyEx(Property property, CCombo3 combo, int index) throws Exception {
+		Enum<?>[] elements = getElements(property);
+		Enum<?> element = elements[index];
+		setPropertyValue(property, element);
+	}
 
-  /**
-   * @return array of available values.
-   */
-  private Enum<?>[] getElements(Property property) throws Exception {
-    Enum<?>[] elements = null;
-    if (property instanceof ITypedProperty) {
-      Class<?> typeClass = ((ITypedProperty) property).getType();
-      if (typeClass.isEnum()) {
-        elements = (Enum<?>[]) typeClass.getEnumConstants();
-      }
-    }
-    return elements == null ? new Enum<?>[0] : elements;
-  }
+	/**
+	 * @return array of available values.
+	 */
+	private Enum<?>[] getElements(Property property) throws Exception {
+		Enum<?>[] elements = null;
+		if (property instanceof ITypedProperty) {
+			Class<?> typeClass = ((ITypedProperty) property).getType();
+			if (typeClass.isEnum()) {
+				elements = (Enum<?>[]) typeClass.getEnumConstants();
+			}
+		}
+		return elements == null ? new Enum<?>[0] : elements;
+	}
 
-  /**
-   * Apply new selected value to {@link Property}.
-   */
-  private void setPropertyValue(Property property, Enum<?> element) throws Exception {
-    if (property instanceof GenericProperty) {
-      GenericProperty genericProperty = (GenericProperty) property;
-      String source = getValueExpression(genericProperty, element);
-      genericProperty.setExpression(source, element);
-    } else {
-      property.setValue(element);
-    }
-  }
+	/**
+	 * Apply new selected value to {@link Property}.
+	 */
+	private void setPropertyValue(Property property, Enum<?> element) throws Exception {
+		if (property instanceof GenericProperty) {
+			GenericProperty genericProperty = (GenericProperty) property;
+			String source = getValueExpression(genericProperty, element);
+			genericProperty.setExpression(source, element);
+		} else {
+			property.setValue(element);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IExpressionPropertyEditor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getValueExpression(GenericProperty property, Object value) throws Exception {
-    if (value instanceof Enum<?>) {
-      Enum<?> element = (Enum<?>) value;
-      return element.name();
-    }
-    // unknown value
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IExpressionPropertyEditor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getValueExpression(GenericProperty property, Object value) throws Exception {
+		if (value instanceof Enum<?>) {
+			Enum<?> element = (Enum<?>) value;
+			return element.name();
+		}
+		// unknown value
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IClipboardSourceProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getClipboardSource(GenericProperty property) throws Exception {
-    Object value = property.getValue();
-    return getValueExpression(property, value);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IClipboardSourceProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getClipboardSource(GenericProperty property) throws Exception {
+		Object value = property.getValue();
+		return getValueExpression(property, value);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/editor/StaticFieldPropertyEditor.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/editor/StaticFieldPropertyEditor.java
index f4f5ab45d..76efb9cd3 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/editor/StaticFieldPropertyEditor.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/editor/StaticFieldPropertyEditor.java
@@ -40,244 +40,244 @@
  * @coverage XML.model.property.editor
  */
 public final class StaticFieldPropertyEditor extends AbstractComboPropertyEditor
-    implements
-      IConfigurablePropertyObject,
-      IExpressionPropertyEditor,
-      IClipboardSourceProvider {
-  private Class<?> m_class;
-  private String[] m_names;
-  private String[] m_titles;
-  private Object[] m_values;
+implements
+IConfigurablePropertyObject,
+IExpressionPropertyEditor,
+IClipboardSourceProvider {
+	private Class<?> m_class;
+	private String[] m_names;
+	private String[] m_titles;
+	private Object[] m_values;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getText(Property property) throws Exception {
-    Object value = property.getValue();
-    // return title for value
-    if (value != Property.UNKNOWN_VALUE) {
-      for (int i = 0; i < m_values.length; i++) {
-        Object fieldValue = m_values[i];
-        if (ObjectUtils.equals(fieldValue, value)) {
-          return m_titles[i];
-        }
-      }
-    }
-    // unknown value
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getText(Property property) throws Exception {
+		Object value = property.getValue();
+		// return title for value
+		if (value != Property.UNKNOWN_VALUE) {
+			for (int i = 0; i < m_values.length; i++) {
+				Object fieldValue = m_values[i];
+				if (ObjectUtils.equals(fieldValue, value)) {
+					return m_titles[i];
+				}
+			}
+		}
+		// unknown value
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IExpressionPropertyEditor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getValueExpression(GenericProperty property, Object value) throws Exception {
-    if (value != Property.UNKNOWN_VALUE) {
-      for (int i = 0; i < m_values.length; i++) {
-        if (ObjectUtils.equals(m_values[i], value)) {
-          return getExpression(property, i);
-        }
-      }
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IExpressionPropertyEditor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getValueExpression(GenericProperty property, Object value) throws Exception {
+		if (value != Property.UNKNOWN_VALUE) {
+			for (int i = 0; i < m_values.length; i++) {
+				if (ObjectUtils.equals(m_values[i], value)) {
+					return getExpression(property, i);
+				}
+			}
+		}
+		return null;
+	}
 
-  /**
-   * @return the attribute {@link String} to use for field with given index.
-   */
-  private String getExpression(GenericProperty property, int index) throws Exception {
-    String fieldName = m_names[index];
-    // support for *remove
-    if (fieldName == null) {
-      return null;
-    }
-    // get expression from toolkit
-    String[] expression = {null};
-    property.getObject().getBroadcast(StaticFieldPropertyEditorGetExpression.class).invoke(
-        m_class,
-        fieldName,
-        expression);
-    Assert.isNotNull2(expression[0], "Can not resolve {0} {1}", m_class, fieldName);
-    return expression[0];
-  }
+	/**
+	 * @return the attribute {@link String} to use for field with given index.
+	 */
+	private String getExpression(GenericProperty property, int index) throws Exception {
+		String fieldName = m_names[index];
+		// support for *remove
+		if (fieldName == null) {
+			return null;
+		}
+		// get expression from toolkit
+		String[] expression = {null};
+		property.getObject().getBroadcast(StaticFieldPropertyEditorGetExpression.class).invoke(
+				m_class,
+				fieldName,
+				expression);
+		Assert.isNotNull2(expression[0], "Can not resolve {0} {1}", m_class, fieldName);
+		return expression[0];
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IClipboardSourceProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getClipboardSource(GenericProperty property) throws Exception {
-    Object value = property.getValue();
-    return getValueExpression(property, value);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IClipboardSourceProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getClipboardSource(GenericProperty property) throws Exception {
+		Object value = property.getValue();
+		return getValueExpression(property, value);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Combo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void addItems(Property property, CCombo3 combo) throws Exception {
-    for (String title : m_titles) {
-      combo.add(title);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Combo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void addItems(Property property, CCombo3 combo) throws Exception {
+		for (String title : m_titles) {
+			combo.add(title);
+		}
+	}
 
-  @Override
-  protected void selectItem(Property property, CCombo3 combo) throws Exception {
-    combo.setText(getText(property));
-  }
+	@Override
+	protected void selectItem(Property property, CCombo3 combo) throws Exception {
+		combo.setText(getText(property));
+	}
 
-  @Override
-  protected void toPropertyEx(Property property, CCombo3 combo, int index) throws Exception {
-    if (property instanceof GenericProperty) {
-      GenericProperty genericProperty = (GenericProperty) property;
-      String expression = getExpression(genericProperty, index);
-      Object value = m_values[index];
-      genericProperty.setExpression(expression, value);
-    }
-  }
+	@Override
+	protected void toPropertyEx(Property property, CCombo3 combo, int index) throws Exception {
+		if (property instanceof GenericProperty) {
+			GenericProperty genericProperty = (GenericProperty) property;
+			String expression = getExpression(genericProperty, index);
+			Object value = m_values[index];
+			genericProperty.setExpression(expression, value);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IConfigurablePropertyObject
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Configures this {@link StaticFieldPropertyEditor} with class and fields. This is same as
-   * {@link #configure(EditorContext, Map)}, but for access from code, not from component
-   * description.
-   */
-  public void configure(Class<?> clazz, String[] fieldDescriptions) throws Exception {
-    m_class = clazz;
-    initialize(fieldDescriptions);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IConfigurablePropertyObject
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Configures this {@link StaticFieldPropertyEditor} with class and fields. This is same as
+	 * {@link #configure(EditorContext, Map)}, but for access from code, not from component
+	 * description.
+	 */
+	public void configure(Class<?> clazz, String[] fieldDescriptions) throws Exception {
+		m_class = clazz;
+		initialize(fieldDescriptions);
+	}
 
-  @Override
-  public void configure(EditorContext context, Map<String, Object> parameters) throws Exception {
-    // prepare class
-    {
-      String classBinaryName = (String) parameters.get("class");
-      if (classBinaryName == null) {
-        throw new DesignerException(IExceptionConstants.DESCRIPTION_EDITOR_STATIC_FIELD,
-            "No class.");
-      }
-      m_class = context.getClassLoader().loadClass(classBinaryName);
-    }
-    // prepare fields
-    String[] fieldDescriptions;
-    if (parameters.containsKey("fields")) {
-      Object fieldsObject = parameters.get("fields");
-      if (fieldsObject instanceof List<?>) {
-        @SuppressWarnings("unchecked")
-        List<String> fieldDescriptionList = (List<String>) fieldsObject;
-        fieldDescriptions = fieldDescriptionList.toArray(new String[fieldDescriptionList.size()]);
-      } else {
-        fieldDescriptions = StringUtils.split((String) fieldsObject);
-      }
-    } else {
-      throw new DesignerException(IExceptionConstants.DESCRIPTION_EDITOR_STATIC_FIELD, "No fields.");
-    }
-    // set fields
-    initialize(fieldDescriptions);
-  }
+	@Override
+	public void configure(EditorContext context, Map<String, Object> parameters) throws Exception {
+		// prepare class
+		{
+			String classBinaryName = (String) parameters.get("class");
+			if (classBinaryName == null) {
+				throw new DesignerException(IExceptionConstants.DESCRIPTION_EDITOR_STATIC_FIELD,
+						"No class.");
+			}
+			m_class = context.getClassLoader().loadClass(classBinaryName);
+		}
+		// prepare fields
+		String[] fieldDescriptions;
+		if (parameters.containsKey("fields")) {
+			Object fieldsObject = parameters.get("fields");
+			if (fieldsObject instanceof List<?>) {
+				@SuppressWarnings("unchecked")
+				List<String> fieldDescriptionList = (List<String>) fieldsObject;
+				fieldDescriptions = fieldDescriptionList.toArray(new String[fieldDescriptionList.size()]);
+			} else {
+				fieldDescriptions = StringUtils.split((String) fieldsObject);
+			}
+		} else {
+			throw new DesignerException(IExceptionConstants.DESCRIPTION_EDITOR_STATIC_FIELD, "No fields.");
+		}
+		// set fields
+		initialize(fieldDescriptions);
+	}
 
-  /**
-   * Fills arrays using given field descriptions.
-   */
-  private void initialize(String[] fieldDescriptions) throws Exception {
-    fieldDescriptions = cleanUpFieldDescriptions(m_class, fieldDescriptions);
-    int count = fieldDescriptions.length;
-    // prepare arrays
-    m_names = new String[count];
-    m_titles = new String[count];
-    m_values = new Object[count];
-    // fill arrays
-    for (int i = 0; i < count; i++) {
-      String fieldDescription = fieldDescriptions[i];
-      // special cases
-      if ("*remove".equals(fieldDescription)) {
-        m_titles[i] = "";
-        continue;
-      }
-      // fill name/title
-      m_names[i] = getFieldName(fieldDescription);
-      m_titles[i] = getFieldTitle(fieldDescription);
-      // fill value
-      {
-        Field field = m_class.getField(m_names[i]);
-        Assert.isTrue(Modifier.isStatic(field.getModifiers()), "Field %s is not static.", field);
-        m_values[i] = field.get(null);
-      }
-    }
-  }
+	/**
+	 * Fills arrays using given field descriptions.
+	 */
+	private void initialize(String[] fieldDescriptions) throws Exception {
+		fieldDescriptions = cleanUpFieldDescriptions(m_class, fieldDescriptions);
+		int count = fieldDescriptions.length;
+		// prepare arrays
+		m_names = new String[count];
+		m_titles = new String[count];
+		m_values = new Object[count];
+		// fill arrays
+		for (int i = 0; i < count; i++) {
+			String fieldDescription = fieldDescriptions[i];
+			// special cases
+			if ("*remove".equals(fieldDescription)) {
+				m_titles[i] = "";
+				continue;
+			}
+			// fill name/title
+			m_names[i] = getFieldName(fieldDescription);
+			m_titles[i] = getFieldTitle(fieldDescription);
+			// fill value
+			{
+				Field field = m_class.getField(m_names[i]);
+				Assert.isTrue(Modifier.isStatic(field.getModifiers()), "Field %s is not static.", field);
+				m_values[i] = field.get(null);
+			}
+		}
+	}
 
-  /**
-   * Check field's, if field does not exist, then remove it from array.
-   */
-  private static String[] cleanUpFieldDescriptions(Class<?> m_class, String[] fieldDescriptions)
-      throws Exception {
-    List<String> newFieldDescriptions = Lists.newArrayList();
-    // check all fields
-    for (String fieldDescription : fieldDescriptions) {
-      // skip special cases
-      if ("*remove".equals(fieldDescription)) {
-        newFieldDescriptions.add(fieldDescription);
-        continue;
-      }
-      // prepare field name
-      String name = getFieldName(fieldDescription);
-      // check exist field
-      try {
-        m_class.getField(name);
-      } catch (NoSuchFieldException e) {
-        continue;
-      }
-      // OK, valid field
-      newFieldDescriptions.add(fieldDescription);
-    }
-    // return as array
-    return newFieldDescriptions.toArray(new String[newFieldDescriptions.size()]);
-  }
+	/**
+	 * Check field's, if field does not exist, then remove it from array.
+	 */
+	private static String[] cleanUpFieldDescriptions(Class<?> m_class, String[] fieldDescriptions)
+			throws Exception {
+		List<String> newFieldDescriptions = Lists.newArrayList();
+		// check all fields
+		for (String fieldDescription : fieldDescriptions) {
+			// skip special cases
+			if ("*remove".equals(fieldDescription)) {
+				newFieldDescriptions.add(fieldDescription);
+				continue;
+			}
+			// prepare field name
+			String name = getFieldName(fieldDescription);
+			// check exist field
+			try {
+				m_class.getField(name);
+			} catch (NoSuchFieldException e) {
+				continue;
+			}
+			// OK, valid field
+			newFieldDescriptions.add(fieldDescription);
+		}
+		// return as array
+		return newFieldDescriptions.toArray(new String[newFieldDescriptions.size()]);
+	}
 
-  /**
-   * @return the name of field from given field description.
-   */
-  private static String getFieldName(String fieldDescription) {
-    // simple case - just name of field
-    if (!fieldDescription.contains(":")) {
-      return fieldDescription;
-    }
-    // name:title
-    return getTwoParts(fieldDescription)[0];
-  }
+	/**
+	 * @return the name of field from given field description.
+	 */
+	private static String getFieldName(String fieldDescription) {
+		// simple case - just name of field
+		if (!fieldDescription.contains(":")) {
+			return fieldDescription;
+		}
+		// name:title
+		return getTwoParts(fieldDescription)[0];
+	}
 
-  /**
-   * @return the title of field from given field description.
-   */
-  private static String getFieldTitle(String fieldDescription) {
-    // simple case - use name of field
-    if (!fieldDescription.contains(":")) {
-      return fieldDescription;
-    }
-    // name:title
-    return getTwoParts(fieldDescription)[1];
-  }
+	/**
+	 * @return the title of field from given field description.
+	 */
+	private static String getFieldTitle(String fieldDescription) {
+		// simple case - use name of field
+		if (!fieldDescription.contains(":")) {
+			return fieldDescription;
+		}
+		// name:title
+		return getTwoParts(fieldDescription)[1];
+	}
 
-  /**
-   * Splits field description into exactly two parts - "name:title".
-   */
-  private static String[] getTwoParts(String fieldDescription) {
-    String[] parts = StringUtils.split(fieldDescription, ":");
-    String message =
-        "Exactly one ':' expected in description name:title, but found " + fieldDescription;
-    Assert.equals(2, parts.length, message);
-    return parts;
-  }
+	/**
+	 * Splits field description into exactly two parts - "name:title".
+	 */
+	private static String[] getTwoParts(String fieldDescription) {
+		String[] parts = StringUtils.split(fieldDescription, ":");
+		String message =
+				"Exactly one ':' expected in description name:title, but found " + fieldDescription;
+		Assert.equals(2, parts.length, message);
+		return parts;
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/editor/StaticFieldPropertyEditorGetExpression.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/editor/StaticFieldPropertyEditorGetExpression.java
index b3d356571..1d251914d 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/editor/StaticFieldPropertyEditorGetExpression.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/editor/StaticFieldPropertyEditorGetExpression.java
@@ -17,13 +17,13 @@
  * @coverage XML.model.property.editor
  */
 public interface StaticFieldPropertyEditorGetExpression {
-  /**
-   * @param clazz
-   *          the {@link Class} with fields.
-   * @param field
-   *          the name of field.
-   * @param expression
-   *          the array with single element, initially <code>null</code>.
-   */
-  void invoke(Class<?> clazz, String field, String[] expression) throws Exception;
+	/**
+	 * @param clazz
+	 *          the {@link Class} with fields.
+	 * @param field
+	 *          the name of field.
+	 * @param expression
+	 *          the array with single element, initially <code>null</code>.
+	 */
+	void invoke(Class<?> clazz, String field, String[] expression) throws Exception;
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/event/AbstractEventProperty.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/event/AbstractEventProperty.java
index 24f93f890..cb99756e7 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/event/AbstractEventProperty.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/event/AbstractEventProperty.java
@@ -21,22 +21,22 @@
  * @coverage XWT.model.property
  */
 abstract class AbstractEventProperty extends XmlProperty {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractEventProperty(XmlObjectInfo object, String title, PropertyEditor propertyEditor) {
-    super(object, title, propertyEditor);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractEventProperty(XmlObjectInfo object, String title, PropertyEditor propertyEditor) {
+		super(object, title, propertyEditor);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Property
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final Object getValue() throws Exception {
-    return UNKNOWN_VALUE;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Property
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final Object getValue() throws Exception {
+		return UNKNOWN_VALUE;
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/event/AbstractListenerProperty.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/event/AbstractListenerProperty.java
index 01921307a..5d6949608 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/event/AbstractListenerProperty.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/event/AbstractListenerProperty.java
@@ -23,33 +23,33 @@
  * @coverage XML.model.property
  */
 public abstract class AbstractListenerProperty extends AbstractEventProperty {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractListenerProperty(XmlObjectInfo object, String title, PropertyEditor propertyEditor) {
-    super(object, title, propertyEditor);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractListenerProperty(XmlObjectInfo object, String title, PropertyEditor propertyEditor) {
+		super(object, title, propertyEditor);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Opens Java editor with event listener, creates it if needed and possible.
-   */
-  protected abstract void openListener() throws Exception;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Opens Java editor with event listener, creates it if needed and possible.
+	 */
+	protected abstract void openListener() throws Exception;
 
-  /**
-   * Removes listener for this event.
-   */
-  protected abstract void removeListener() throws Exception;
+	/**
+	 * Removes listener for this event.
+	 */
+	protected abstract void removeListener() throws Exception;
 
-  /**
-   * Contributes actions into context menu.
-   */
-  protected abstract void addListenerActions(IMenuManager manager, IMenuManager implementMenuManager)
-      throws Exception;
+	/**
+	 * Contributes actions into context menu.
+	 */
+	protected abstract void addListenerActions(IMenuManager manager, IMenuManager implementMenuManager)
+			throws Exception;
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/event/EventsProperty.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/event/EventsProperty.java
index 8e177fba7..e14411602 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/event/EventsProperty.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/event/EventsProperty.java
@@ -39,148 +39,148 @@
  * @coverage XWT.model.property
  */
 public final class EventsProperty extends AbstractEventProperty {
-  private final XmlObjectInfo m_object;
+	private final XmlObjectInfo m_object;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public EventsProperty(XmlObjectInfo object) {
-    super(object, "Events", EventsPropertyEditor.INSTANCE);
-    m_object = object;
-    setCategory(PropertyCategory.HIDDEN);
-    installDecoratorListener();
-    installContextMenuListener();
-    installDeleteListener();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public EventsProperty(XmlObjectInfo object) {
+		super(object, "Events", EventsPropertyEditor.INSTANCE);
+		m_object = object;
+		setCategory(PropertyCategory.HIDDEN);
+		installDecoratorListener();
+		installContextMenuListener();
+		installDeleteListener();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Broadcasts
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Installs listener for decorating icon of component with event listener.
-   */
-  private void installDecoratorListener() {
-    m_object.addBroadcastListener(new ObjectInfoPresentationDecorateIcon() {
-      @Override
-      public void invoke(ObjectInfo object, Image[] icon) throws Exception {
-        if (object == m_object) {
-          IPreferenceStore preferences = m_object.getDescription().getToolkit().getPreferences();
-          if (preferences.getBoolean(IPreferenceConstants.P_DECORATE_ICON) && isModified()) {
-            Image decorator = DesignerPlugin.getImage("events/decorator.gif");
-            icon[0] =
-                SwtResourceManager.decorateImage(icon[0], decorator, SwtResourceManager.TOP_LEFT);
-          }
-        }
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Broadcasts
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Installs listener for decorating icon of component with event listener.
+	 */
+	private void installDecoratorListener() {
+		m_object.addBroadcastListener(new ObjectInfoPresentationDecorateIcon() {
+			@Override
+			public void invoke(ObjectInfo object, Image[] icon) throws Exception {
+				if (object == m_object) {
+					IPreferenceStore preferences = m_object.getDescription().getToolkit().getPreferences();
+					if (preferences.getBoolean(IPreferenceConstants.P_DECORATE_ICON) && isModified()) {
+						Image decorator = DesignerPlugin.getImage("events/decorator.gif");
+						icon[0] =
+								SwtResourceManager.decorateImage(icon[0], decorator, SwtResourceManager.TOP_LEFT);
+					}
+				}
+			}
+		});
+	}
 
-  /**
-   * Installs listener for adding {@link EventsProperty} menu into component context menu.
-   */
-  private void installContextMenuListener() {
-    m_object.addBroadcastListener(new ObjectEventListener() {
-      @Override
-      public void addContextMenu(List<? extends ObjectInfo> objects,
-          ObjectInfo object,
-          IMenuManager manager) throws Exception {
-        if (object == m_object) {
-          contributeActions(manager, Messages.EventsProperty_addEventHandlerManager);
-        }
-      }
-    });
-  }
+	/**
+	 * Installs listener for adding {@link EventsProperty} menu into component context menu.
+	 */
+	private void installContextMenuListener() {
+		m_object.addBroadcastListener(new ObjectEventListener() {
+			@Override
+			public void addContextMenu(List<? extends ObjectInfo> objects,
+					ObjectInfo object,
+					IMenuManager manager) throws Exception {
+				if (object == m_object) {
+					contributeActions(manager, Messages.EventsProperty_addEventHandlerManager);
+				}
+			}
+		});
+	}
 
-  /**
-   * Installs listener for deleting listeners during component delete.
-   */
-  private void installDeleteListener() {
-    m_object.addBroadcastListener(new ObjectInfoDelete() {
-      @Override
-      public void before(ObjectInfo parent, ObjectInfo child) throws Exception {
-        if (child == m_object) {
-          for (AbstractListenerProperty listenerProperty : getSubProperties()) {
-            if (listenerProperty.isModified()) {
-              listenerProperty.removeListener();
-            }
-          }
-        }
-      }
-    });
-  }
+	/**
+	 * Installs listener for deleting listeners during component delete.
+	 */
+	private void installDeleteListener() {
+		m_object.addBroadcastListener(new ObjectInfoDelete() {
+			@Override
+			public void before(ObjectInfo parent, ObjectInfo child) throws Exception {
+				if (child == m_object) {
+					for (AbstractListenerProperty listenerProperty : getSubProperties()) {
+						if (listenerProperty.isModified()) {
+							listenerProperty.removeListener();
+						}
+					}
+				}
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Property
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean isModified() throws Exception {
-    // check if there are listeners
-    Property[] properties = getSubProperties();
-    for (Property property : properties) {
-      if (property.isModified()) {
-        return true;
-      }
-    }
-    // not modified
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Property
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean isModified() throws Exception {
+		// check if there are listeners
+		Property[] properties = getSubProperties();
+		for (Property property : properties) {
+			if (property.isModified()) {
+				return true;
+			}
+		}
+		// not modified
+		return false;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link AbstractListenerProperty}'s of this {@link EventsProperty}.
-   */
-  private AbstractListenerProperty[] getSubProperties() throws Exception {
-    return EventsPropertyEditor.INSTANCE.getProperties(this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link AbstractListenerProperty}'s of this {@link EventsProperty}.
+	 */
+	private AbstractListenerProperty[] getSubProperties() throws Exception {
+		return EventsPropertyEditor.INSTANCE.getProperties(this);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Context menu
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Contributes actions into context menu.
-   */
-  private void contributeActions(IMenuManager manager, String implementTitle) throws Exception {
-    // prepare "implement" menu
-    IMenuManager implementMenuManager = new MenuManager(implementTitle);
-    // add separate actions
-    AbstractListenerProperty[] listenerProperties = getSubProperties();
-    for (AbstractListenerProperty listenerProperty : listenerProperties) {
-      listenerProperty.addListenerActions(manager, implementMenuManager);
-    }
-    // add "implement" menu
-    manager.appendToGroup(IContextMenuConstants.GROUP_EVENTS, implementMenuManager);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Context menu
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Contributes actions into context menu.
+	 */
+	private void contributeActions(IMenuManager manager, String implementTitle) throws Exception {
+		// prepare "implement" menu
+		IMenuManager implementMenuManager = new MenuManager(implementTitle);
+		// add separate actions
+		AbstractListenerProperty[] listenerProperties = getSubProperties();
+		for (AbstractListenerProperty listenerProperty : listenerProperties) {
+			listenerProperty.addListenerActions(manager, implementMenuManager);
+		}
+		// add "implement" menu
+		manager.appendToGroup(IContextMenuConstants.GROUP_EVENTS, implementMenuManager);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Open stub
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Creates and/or opens in Java editor method for listener. Used to create and open listener with
-   * known info, for example on double click.
-   *
-   * @param listenerPath
-   *          the '/' separated name of listener, for example <code>key/pressed</code>.
-   */
-  public void openListener(String listenerPath) throws Exception {
-    String eventListenerPath = "Events/" + listenerPath;
-    AbstractListenerProperty property =
-        (AbstractListenerProperty) PropertyUtils.getByPath(m_object, eventListenerPath);
-    if (property != null) {
-      property.openListener();
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Open stub
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Creates and/or opens in Java editor method for listener. Used to create and open listener with
+	 * known info, for example on double click.
+	 *
+	 * @param listenerPath
+	 *          the '/' separated name of listener, for example <code>key/pressed</code>.
+	 */
+	public void openListener(String listenerPath) throws Exception {
+		String eventListenerPath = "Events/" + listenerPath;
+		AbstractListenerProperty property =
+				(AbstractListenerProperty) PropertyUtils.getByPath(m_object, eventListenerPath);
+		if (property != null) {
+			property.openListener();
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/event/EventsPropertyEditor.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/event/EventsPropertyEditor.java
index c82fa8a47..f67850dc6 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/event/EventsPropertyEditor.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/property/event/EventsPropertyEditor.java
@@ -27,38 +27,38 @@
  * @coverage XWT.model.property
  */
 final class EventsPropertyEditor extends AbstractComplexEventPropertyEditor {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final EventsPropertyEditor INSTANCE = new EventsPropertyEditor();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final EventsPropertyEditor INSTANCE = new EventsPropertyEditor();
 
-  private EventsPropertyEditor() {
-  }
+	private EventsPropertyEditor() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IComplexPropertyEditor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public AbstractListenerProperty[] getProperties(Property property) throws Exception {
-    EventsProperty eventsProperty = (EventsProperty) property;
-    XmlObjectInfo javaInfo = eventsProperty.getObject();
-    // get from cache or create
-    AbstractListenerProperty[] properties =
-        (AbstractListenerProperty[]) javaInfo.getArbitraryValue(eventsProperty);
-    if (properties == null) {
-      properties = createProperties(javaInfo);
-      javaInfo.putArbitraryValue(eventsProperty, properties);
-    }
-    return properties;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IComplexPropertyEditor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public AbstractListenerProperty[] getProperties(Property property) throws Exception {
+		EventsProperty eventsProperty = (EventsProperty) property;
+		XmlObjectInfo javaInfo = eventsProperty.getObject();
+		// get from cache or create
+		AbstractListenerProperty[] properties =
+				(AbstractListenerProperty[]) javaInfo.getArbitraryValue(eventsProperty);
+		if (properties == null) {
+			properties = createProperties(javaInfo);
+			javaInfo.putArbitraryValue(eventsProperty, properties);
+		}
+		return properties;
+	}
 
-  private AbstractListenerProperty[] createProperties(XmlObjectInfo object) throws Exception {
-    List<AbstractListenerProperty> properties = Lists.newArrayList();
-    object.getBroadcast(XmlObjectEventListeners.class).invoke(object, properties);
-    return properties.toArray(new AbstractListenerProperty[properties.size()]);
-  }
+	private AbstractListenerProperty[] createProperties(XmlObjectInfo object) throws Exception {
+		List<AbstractListenerProperty> properties = Lists.newArrayList();
+		object.getBroadcast(XmlObjectEventListeners.class).invoke(object, properties);
+		return properties.toArray(new AbstractListenerProperty[properties.size()]);
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/utils/AbstractLiveManager.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/utils/AbstractLiveManager.java
index dc28ba2ff..a64e786ca 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/utils/AbstractLiveManager.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/utils/AbstractLiveManager.java
@@ -43,159 +43,159 @@
  * @coverage XML.model.utils
  */
 public abstract class AbstractLiveManager {
-  protected final AbstractComponentInfo m_component;
-  private final EditorContext m_context;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractLiveManager(AbstractComponentInfo component) {
-    m_component = component;
-    m_context = component.getContext();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the filled {@link ILiveCacheEntry} instance. Creates "live" component, fill cache entry
-   *         and removes "live" component.
-   */
-  protected final ILiveCacheEntry createCacheEntry() {
-    try {
-      return createCacheEntryEx();
-    } catch (Throwable e) {
-      DesignerPlugin.log(e);
-      return createComponentCacheEntryEx(e);
-    }
-  }
-
-  private ILiveCacheEntry createCacheEntryEx() throws Exception {
-    BroadcastSupport oldBroadcast = m_context.getBroadcastSupport();
-    XmlObjectInfo oldActiveObject = (XmlObjectInfo) GlobalState.getActiveObject();
-    oldBroadcast.getListener(DisplayEventListener.class).beforeMessagesLoop();
-    //
-    AbstractComponentInfo liveComponentInfo = null;
-    try {
-      liveComponentInfo = createLiveComponent();
-      // finish edit operation
-      liveComponentInfo.getRoot().endEdit();
-      // fill cache
-      return createComponentCacheEntry(liveComponentInfo);
-    } finally {
-      GlobalStateXml.activate(oldActiveObject);
-      // do clean up
-      cleanupLiveComponent(liveComponentInfo);
-      m_context.getLiveContext().dispose();
-      // we finished inner operation
-      oldBroadcast.getListener(DisplayEventListener.class).afterMessagesLoop();
-    }
-  }
-
-  /**
-   * @return the key for {@link ILiveCacheEntry} in cache.
-   */
-  protected String getKey() {
-    return m_component.getCreationSupport().toString();
-  }
-
-  /**
-   * @return the {@link AbstractComponentInfo} of "live component" after parsing.
-   */
-  protected abstract AbstractComponentInfo createLiveComponent() throws Exception;
-
-  /**
-   * Does some clean up for "live" component created earlier.
-   */
-  protected void cleanupLiveComponent(AbstractComponentInfo liveComponentInfo) throws Exception {
-    if (liveComponentInfo != null) {
-      liveComponentInfo.getRoot().refresh_dispose();
-    }
-  }
-
-  /**
-   * Creates {@link ILiveCacheEntry} instance and fills it with required data.
-   */
-  protected abstract ILiveCacheEntry createComponentCacheEntry(AbstractComponentInfo liveComponentInfo);
-
-  /**
-   * Creates {@link ILiveCacheEntry} instance when exception happens.
-   */
-  protected abstract ILiveCacheEntry createComponentCacheEntryEx(Throwable e);
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Parses given statements source in temporary type/method, but in same {@link AstEditor}, so with
-   * same {@link EditorState}, {@link ClassLoader}, etc. Ensures that new parsed
-   * {@link XmlObjectInfo} hierarchy does not interacts with "main" hierarchy.
-   *
-   * @param sourceLines
-   *          that source for {@link Statement}'s to parse.
-   *
-   * @return the root {@link XmlObjectInfo} for parsed source.
-   */
-  protected final XmlObjectInfo parse(String[] sourceLines) throws Exception {
-    XmlObjectInfo root = m_context.getLiveContext().parse(sourceLines);
-    root.startEdit();
-    return root;
-  }
-
-  /**
-   * @return the {@link Image} to use as "live" for given {@link Throwable}.
-   */
-  protected static Image createImageForException(Throwable e) {
-    int width = 200;
-    int height = 50;
-    Image image = new Image(null, width, height);
-    GC gc = new GC(image);
-    try {
-      gc.setBackground(SwtResourceManager.getColor(255, 220, 220));
-      gc.fillRectangle(0, 0, width, height);
-      String text = Messages.AbstractLiveManager_errorMessage;
-      DrawUtils.drawTextWrap(gc, text, 0, 0, width, height);
-    } finally {
-      gc.dispose();
-    }
-    return image;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Cached info
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final ClassMap<Map<String, ILiveCacheEntry>> CACHE = ClassMap.create();
-
-  /**
-   * @return the cached {@link ILiveCacheEntry} for this component. If no cached entry found then it
-   *         creates one.
-   */
-  protected final ILiveCacheEntry getCachedEntry() {
-    // prepare creation-specific cache
-    Map<String, ILiveCacheEntry> cache;
-    {
-      Class<?> clazz = m_component.getDescription().getComponentClass();
-      cache = CACHE.get(clazz);
-      if (cache == null) {
-        cache = Maps.newTreeMap();
-        CACHE.put(clazz, cache);
-      }
-    }
-    // get/put entry from cache
-    String key = getKey();
-    ILiveCacheEntry entry = cache.get(key);
-    if (entry == null) {
-      entry = createCacheEntry();
-      cache.put(key, entry);
-    }
-    return entry;
-  }
+	protected final AbstractComponentInfo m_component;
+	private final EditorContext m_context;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractLiveManager(AbstractComponentInfo component) {
+		m_component = component;
+		m_context = component.getContext();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the filled {@link ILiveCacheEntry} instance. Creates "live" component, fill cache entry
+	 *         and removes "live" component.
+	 */
+	protected final ILiveCacheEntry createCacheEntry() {
+		try {
+			return createCacheEntryEx();
+		} catch (Throwable e) {
+			DesignerPlugin.log(e);
+			return createComponentCacheEntryEx(e);
+		}
+	}
+
+	private ILiveCacheEntry createCacheEntryEx() throws Exception {
+		BroadcastSupport oldBroadcast = m_context.getBroadcastSupport();
+		XmlObjectInfo oldActiveObject = (XmlObjectInfo) GlobalState.getActiveObject();
+		oldBroadcast.getListener(DisplayEventListener.class).beforeMessagesLoop();
+		//
+		AbstractComponentInfo liveComponentInfo = null;
+		try {
+			liveComponentInfo = createLiveComponent();
+			// finish edit operation
+			liveComponentInfo.getRoot().endEdit();
+			// fill cache
+			return createComponentCacheEntry(liveComponentInfo);
+		} finally {
+			GlobalStateXml.activate(oldActiveObject);
+			// do clean up
+			cleanupLiveComponent(liveComponentInfo);
+			m_context.getLiveContext().dispose();
+			// we finished inner operation
+			oldBroadcast.getListener(DisplayEventListener.class).afterMessagesLoop();
+		}
+	}
+
+	/**
+	 * @return the key for {@link ILiveCacheEntry} in cache.
+	 */
+	protected String getKey() {
+		return m_component.getCreationSupport().toString();
+	}
+
+	/**
+	 * @return the {@link AbstractComponentInfo} of "live component" after parsing.
+	 */
+	protected abstract AbstractComponentInfo createLiveComponent() throws Exception;
+
+	/**
+	 * Does some clean up for "live" component created earlier.
+	 */
+	protected void cleanupLiveComponent(AbstractComponentInfo liveComponentInfo) throws Exception {
+		if (liveComponentInfo != null) {
+			liveComponentInfo.getRoot().refresh_dispose();
+		}
+	}
+
+	/**
+	 * Creates {@link ILiveCacheEntry} instance and fills it with required data.
+	 */
+	protected abstract ILiveCacheEntry createComponentCacheEntry(AbstractComponentInfo liveComponentInfo);
+
+	/**
+	 * Creates {@link ILiveCacheEntry} instance when exception happens.
+	 */
+	protected abstract ILiveCacheEntry createComponentCacheEntryEx(Throwable e);
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Parses given statements source in temporary type/method, but in same {@link AstEditor}, so with
+	 * same {@link EditorState}, {@link ClassLoader}, etc. Ensures that new parsed
+	 * {@link XmlObjectInfo} hierarchy does not interacts with "main" hierarchy.
+	 *
+	 * @param sourceLines
+	 *          that source for {@link Statement}'s to parse.
+	 *
+	 * @return the root {@link XmlObjectInfo} for parsed source.
+	 */
+	protected final XmlObjectInfo parse(String[] sourceLines) throws Exception {
+		XmlObjectInfo root = m_context.getLiveContext().parse(sourceLines);
+		root.startEdit();
+		return root;
+	}
+
+	/**
+	 * @return the {@link Image} to use as "live" for given {@link Throwable}.
+	 */
+	protected static Image createImageForException(Throwable e) {
+		int width = 200;
+		int height = 50;
+		Image image = new Image(null, width, height);
+		GC gc = new GC(image);
+		try {
+			gc.setBackground(SwtResourceManager.getColor(255, 220, 220));
+			gc.fillRectangle(0, 0, width, height);
+			String text = Messages.AbstractLiveManager_errorMessage;
+			DrawUtils.drawTextWrap(gc, text, 0, 0, width, height);
+		} finally {
+			gc.dispose();
+		}
+		return image;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Cached info
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final ClassMap<Map<String, ILiveCacheEntry>> CACHE = ClassMap.create();
+
+	/**
+	 * @return the cached {@link ILiveCacheEntry} for this component. If no cached entry found then it
+	 *         creates one.
+	 */
+	protected final ILiveCacheEntry getCachedEntry() {
+		// prepare creation-specific cache
+		Map<String, ILiveCacheEntry> cache;
+		{
+			Class<?> clazz = m_component.getDescription().getComponentClass();
+			cache = CACHE.get(clazz);
+			if (cache == null) {
+				cache = Maps.newTreeMap();
+				CACHE.put(clazz, cache);
+			}
+		}
+		// get/put entry from cache
+		String key = getKey();
+		ILiveCacheEntry entry = cache.get(key);
+		if (entry == null) {
+			entry = createCacheEntry();
+			cache.put(key, entry);
+		}
+		return entry;
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/utils/CopyPropertyTopAbstractSupport.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/utils/CopyPropertyTopAbstractSupport.java
index 83db44f91..bf8c56d13 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/utils/CopyPropertyTopAbstractSupport.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/utils/CopyPropertyTopAbstractSupport.java
@@ -35,136 +35,136 @@
  * @coverage XML.model.util
  */
 public abstract class CopyPropertyTopAbstractSupport {
-  private final String m_prefix;
-  private final Map<XmlObjectInfo, List<CopyProcessor>> processorsMap =
-      new MapMaker().weakKeys().makeMap();
+	private final String m_prefix;
+	private final Map<XmlObjectInfo, List<CopyProcessor>> processorsMap =
+			new MapMaker().weakKeys().makeMap();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected CopyPropertyTopAbstractSupport(ObjectInfo root, String prefix) {
-    m_prefix = prefix;
-    root.addBroadcastListener(new XmlObjectAddProperties() {
-      @Override
-      public void invoke(XmlObjectInfo object, List<Property> properties) throws Exception {
-        // Prepare copy processors.
-        List<CopyProcessor> processors = processorsMap.get(object);
-        if (processors == null) {
-          processors = createProcessors(object);
-          processorsMap.put(object, processors);
-        }
-        // Run copy processors.
-        for (CopyProcessor processor : processors) {
-          processor.addCopy(object, properties);
-        }
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected CopyPropertyTopAbstractSupport(ObjectInfo root, String prefix) {
+		m_prefix = prefix;
+		root.addBroadcastListener(new XmlObjectAddProperties() {
+			@Override
+			public void invoke(XmlObjectInfo object, List<Property> properties) throws Exception {
+				// Prepare copy processors.
+				List<CopyProcessor> processors = processorsMap.get(object);
+				if (processors == null) {
+					processors = createProcessors(object);
+					processorsMap.put(object, processors);
+				}
+				// Run copy processors.
+				for (CopyProcessor processor : processors) {
+					processor.addCopy(object, properties);
+				}
+			}
+		});
+	}
 
-  private List<CopyProcessor> createProcessors(XmlObjectInfo object) {
-    List<CopyProcessor> processors = Lists.newArrayList();
-    Predicate<XmlObjectInfo> targetPredicate = createTargetPredicate(object);
-    for (String parameter : object.getDescription().getParameters().keySet()) {
-      String sourcePath = null;
-      String copyTitle = null;
-      PropertyCategory category = PropertyCategory.NORMAL;
-      if (parameter.startsWith(m_prefix)) {
-        String[] parts = StringUtils.split(parameter);
-        for (String part : parts) {
-          if (part.startsWith("from=")) {
-            sourcePath = StringUtils.removeStart(part, "from=");
-          }
-          if (part.startsWith("to=")) {
-            copyTitle = StringUtils.removeStart(part, "to=");
-          }
-          if (part.startsWith("category=")) {
-            String categoryText = StringUtils.removeStart(part, "category=");
-            category = PropertyCategory.get(categoryText, category);
-          }
-        }
-        // validate
-        if (sourcePath == null || copyTitle == null) {
-          continue;
-        }
-        // OK, create copy processor
-        processors.add(new CopyProcessor(object, targetPredicate, sourcePath, copyTitle, category));
-      }
-    }
-    return processors;
-  }
+	private List<CopyProcessor> createProcessors(XmlObjectInfo object) {
+		List<CopyProcessor> processors = Lists.newArrayList();
+		Predicate<XmlObjectInfo> targetPredicate = createTargetPredicate(object);
+		for (String parameter : object.getDescription().getParameters().keySet()) {
+			String sourcePath = null;
+			String copyTitle = null;
+			PropertyCategory category = PropertyCategory.NORMAL;
+			if (parameter.startsWith(m_prefix)) {
+				String[] parts = StringUtils.split(parameter);
+				for (String part : parts) {
+					if (part.startsWith("from=")) {
+						sourcePath = StringUtils.removeStart(part, "from=");
+					}
+					if (part.startsWith("to=")) {
+						copyTitle = StringUtils.removeStart(part, "to=");
+					}
+					if (part.startsWith("category=")) {
+						String categoryText = StringUtils.removeStart(part, "category=");
+						category = PropertyCategory.get(categoryText, category);
+					}
+				}
+				// validate
+				if (sourcePath == null || copyTitle == null) {
+					continue;
+				}
+				// OK, create copy processor
+				processors.add(new CopyProcessor(object, targetPredicate, sourcePath, copyTitle, category));
+			}
+		}
+		return processors;
+	}
 
-  /**
-   * @param object
-   *          the {@link XmlObjectInfo} passed into {@link #install(XmlObjectInfo, String)}.
-   *
-   * @return the {@link Predicate} to check if property of some {@link XmlObjectInfo} should be
-   *         copied to its top properties.
-   */
-  protected abstract Predicate<XmlObjectInfo> createTargetPredicate(XmlObjectInfo object);
+	/**
+	 * @param object
+	 *          the {@link XmlObjectInfo} passed into {@link #install(XmlObjectInfo, String)}.
+	 *
+	 * @return the {@link Predicate} to check if property of some {@link XmlObjectInfo} should be
+	 *         copied to its top properties.
+	 */
+	protected abstract Predicate<XmlObjectInfo> createTargetPredicate(XmlObjectInfo object);
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Copy processor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  static class CopyProcessor {
-    private final Predicate<XmlObjectInfo> m_targetPredicate;
-    private final String m_sourcePath;
-    private final String m_copyTitle;
-    private final PropertyCategory m_category;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Copy processor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	static class CopyProcessor {
+		private final Predicate<XmlObjectInfo> m_targetPredicate;
+		private final String m_sourcePath;
+		private final String m_copyTitle;
+		private final PropertyCategory m_category;
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    CopyProcessor(XmlObjectInfo hierarchyObject,
-        Predicate<XmlObjectInfo> targetPredicate,
-        String sourcePath,
-        String copyTitle,
-        PropertyCategory category) {
-      m_targetPredicate = targetPredicate;
-      m_sourcePath = sourcePath;
-      m_copyTitle = copyTitle;
-      m_category = category;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		CopyProcessor(XmlObjectInfo hierarchyObject,
+				Predicate<XmlObjectInfo> targetPredicate,
+				String sourcePath,
+				String copyTitle,
+				PropertyCategory category) {
+			m_targetPredicate = targetPredicate;
+			m_sourcePath = sourcePath;
+			m_copyTitle = copyTitle;
+			m_category = category;
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Implementation
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    private Property m_oldSource;
-    private Property m_oldCopy;
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Implementation
+		//
+		////////////////////////////////////////////////////////////////////////////
+		private Property m_oldSource;
+		private Property m_oldCopy;
 
-    public void addCopy(XmlObjectInfo object, List<Property> properties) throws Exception {
-      if (m_targetPredicate.apply(object)) {
-        Property copy = getCopy(properties);
-        if (copy != null) {
-          properties.add(copy);
-        }
-      }
-    }
+		public void addCopy(XmlObjectInfo object, List<Property> properties) throws Exception {
+			if (m_targetPredicate.apply(object)) {
+				Property copy = getCopy(properties);
+				if (copy != null) {
+					properties.add(copy);
+				}
+			}
+		}
 
-    private Property getCopy(List<Property> properties) throws Exception {
-      Property source = PropertyUtils.getByPath(properties, m_sourcePath);
-      if (m_oldSource != source) {
-        m_oldSource = source;
-        m_oldCopy = createCopy(source);
-      }
-      return m_oldCopy;
-    }
+		private Property getCopy(List<Property> properties) throws Exception {
+			Property source = PropertyUtils.getByPath(properties, m_sourcePath);
+			if (m_oldSource != source) {
+				m_oldSource = source;
+				m_oldCopy = createCopy(source);
+			}
+			return m_oldCopy;
+		}
 
-    private Property createCopy(Property source) {
-      if (source instanceof GenericPropertyImpl) {
-        GenericPropertyImpl genericProperty = (GenericPropertyImpl) source;
-        Property copy = new GenericPropertyImpl(genericProperty, m_copyTitle);
-        copy.setCategory(m_category);
-        return copy;
-      }
-      return null;
-    }
-  }
+		private Property createCopy(Property source) {
+			if (source instanceof GenericPropertyImpl) {
+				GenericPropertyImpl genericProperty = (GenericPropertyImpl) source;
+				Property copy = new GenericPropertyImpl(genericProperty, m_copyTitle);
+				copy.setCategory(m_category);
+				return copy;
+			}
+			return null;
+		}
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/utils/CopyPropertyTopSupport.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/utils/CopyPropertyTopSupport.java
index 04e844d7f..f2eae1f54 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/utils/CopyPropertyTopSupport.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/utils/CopyPropertyTopSupport.java
@@ -32,30 +32,30 @@
  * @coverage XML.model.util
  */
 public final class CopyPropertyTopSupport extends CopyPropertyTopAbstractSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Configures hierarchy to copy properties according parameters in description.
-   */
-  public CopyPropertyTopSupport(ObjectInfo root) {
-    super(root, "x-copyPropertyTop ");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Configures hierarchy to copy properties according parameters in description.
+	 */
+	public CopyPropertyTopSupport(ObjectInfo root) {
+		super(root, "x-copyPropertyTop ");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Implementation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Predicate<XmlObjectInfo> createTargetPredicate(final XmlObjectInfo object) {
-    return new Predicate<XmlObjectInfo>() {
-      @Override
-      public boolean apply(XmlObjectInfo t) {
-        return t == object;
-      }
-    };
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Implementation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Predicate<XmlObjectInfo> createTargetPredicate(final XmlObjectInfo object) {
+		return new Predicate<XmlObjectInfo>() {
+			@Override
+			public boolean apply(XmlObjectInfo t) {
+				return t == object;
+			}
+		};
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/utils/DescriptionDrivenFeatures.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/utils/DescriptionDrivenFeatures.java
index 4325b3844..a1ed55bed 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/utils/DescriptionDrivenFeatures.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/utils/DescriptionDrivenFeatures.java
@@ -24,16 +24,16 @@
  * @coverage XML.model.util
  */
 public final class DescriptionDrivenFeatures implements IRootProcessor {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IRootProcessor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void process(XmlObjectInfo object) throws Exception {
-    new CopyPropertyTopSupport(object);
-    //CopyPropertyTop_ChildSupport.install(javaInfo);
-    ModelMethodPropertySupport.install(object, "x-modelMethodProperty ");
-    ModelMethodPropertyChildSupport.install(object, "x-modelMethodChildProperty ");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IRootProcessor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void process(XmlObjectInfo object) throws Exception {
+		new CopyPropertyTopSupport(object);
+		//CopyPropertyTop_ChildSupport.install(javaInfo);
+		ModelMethodPropertySupport.install(object, "x-modelMethodProperty ");
+		ModelMethodPropertyChildSupport.install(object, "x-modelMethodChildProperty ");
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/utils/ElementTarget.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/utils/ElementTarget.java
index a5628600d..c482d8686 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/utils/ElementTarget.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/utils/ElementTarget.java
@@ -19,35 +19,35 @@
  * @coverage XML.model.utils
  */
 public final class ElementTarget {
-  private final DocumentElement m_element;
-  private final int m_index;
+	private final DocumentElement m_element;
+	private final int m_index;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ElementTarget(DocumentElement element, int index) {
-    m_element = element;
-    m_index = index;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ElementTarget(DocumentElement element, int index) {
+		m_element = element;
+		m_index = index;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the target (i.e. parent) {@link DocumentElement}.
-   */
-  public DocumentElement getElement() {
-    return m_element;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the target (i.e. parent) {@link DocumentElement}.
+	 */
+	public DocumentElement getElement() {
+		return m_element;
+	}
 
-  /**
-   * @return the index to add new {@link DocumentElement} at.
-   */
-  public int getIndex() {
-    return m_index;
-  }
+	/**
+	 * @return the index to add new {@link DocumentElement} at.
+	 */
+	public int getIndex() {
+		return m_index;
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/utils/GlobalStateXml.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/utils/GlobalStateXml.java
index a8c66cf21..c3054d344 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/utils/GlobalStateXml.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/utils/GlobalStateXml.java
@@ -52,255 +52,255 @@
  * @coverage XML.model.util
  */
 public final class GlobalStateXml {
-  private static EditorContext m_context;
+	private static EditorContext m_context;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Activates this {@link GlobalState}.
-   */
-  public static void activate(XmlObjectInfo object) {
-    GlobalState.setActiveObject(object);
-    if (object != null) {
-      GlobalState.setToolkit(object.getDescription().getToolkit());
-      GlobalState.setClassLoader(object.getContext().getClassLoader());
-      setEditorContext(object.getContext());
-    } else {
-      GlobalState.setToolkit(null);
-      GlobalState.setClassLoader(null);
-      setEditorContext(null);
-    }
-    GlobalState.setParametersProvider(m_parametersProvider);
-    GlobalState.setDescriptionHelper(m_descriptionHelper);
-    GlobalState.setValidatorHelper(m_validatorHelper);
-    GlobalState.setPasteRequestProcessor(m_pasteRequestProcessor);
-    GlobalState.setOrderProcessor(m_orderProcessor);
-    GlobalState.setOtherHelper(m_otherHelper);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Activates this {@link GlobalState}.
+	 */
+	public static void activate(XmlObjectInfo object) {
+		GlobalState.setActiveObject(object);
+		if (object != null) {
+			GlobalState.setToolkit(object.getDescription().getToolkit());
+			GlobalState.setClassLoader(object.getContext().getClassLoader());
+			setEditorContext(object.getContext());
+		} else {
+			GlobalState.setToolkit(null);
+			GlobalState.setClassLoader(null);
+			setEditorContext(null);
+		}
+		GlobalState.setParametersProvider(m_parametersProvider);
+		GlobalState.setDescriptionHelper(m_descriptionHelper);
+		GlobalState.setValidatorHelper(m_validatorHelper);
+		GlobalState.setPasteRequestProcessor(m_pasteRequestProcessor);
+		GlobalState.setOrderProcessor(m_orderProcessor);
+		GlobalState.setOtherHelper(m_otherHelper);
+	}
 
-  /**
-   * Deactivates this {@link GlobalState}, if given {@link XmlObjectInfo} is active.
-   */
-  public static void deactivate(XmlObjectInfo object) {
-    if (GlobalState.getActiveObject() == object) {
-      deactivate();
-    }
-  }
+	/**
+	 * Deactivates this {@link GlobalState}, if given {@link XmlObjectInfo} is active.
+	 */
+	public static void deactivate(XmlObjectInfo object) {
+		if (GlobalState.getActiveObject() == object) {
+			deactivate();
+		}
+	}
 
-  /**
-   * Deactivates {@link GlobalState}.
-   */
-  public static void deactivate() {
-    GlobalState.setActiveObject(null);
-    GlobalState.setToolkit(null);
-    GlobalState.setClassLoader(null);
-    GlobalState.setParametersProvider(null);
-    GlobalState.setDescriptionHelper(null);
-    GlobalState.setValidatorHelper(null);
-    GlobalState.setPasteRequestProcessor(null);
-    GlobalState.setOrderProcessor(null);
-    GlobalState.setOtherHelper(null);
-    setEditorContext(null);
-  }
+	/**
+	 * Deactivates {@link GlobalState}.
+	 */
+	public static void deactivate() {
+		GlobalState.setActiveObject(null);
+		GlobalState.setToolkit(null);
+		GlobalState.setClassLoader(null);
+		GlobalState.setParametersProvider(null);
+		GlobalState.setDescriptionHelper(null);
+		GlobalState.setValidatorHelper(null);
+		GlobalState.setPasteRequestProcessor(null);
+		GlobalState.setOrderProcessor(null);
+		GlobalState.setOtherHelper(null);
+		setEditorContext(null);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editor context
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Set the editor context instance.
-   */
-  public static void setEditorContext(EditorContext context) {
-    m_context = context;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editor context
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Set the editor context instance.
+	 */
+	public static void setEditorContext(EditorContext context) {
+		m_context = context;
+	}
 
-  /**
-   * @return the current editor context. Cannot be <code>null</code> if the GlobalState activated.
-   */
-  public static EditorContext getEditorContext() {
-    return m_context;
-  }
+	/**
+	 * @return the current editor context. Cannot be <code>null</code> if the GlobalState activated.
+	 */
+	public static EditorContext getEditorContext() {
+		return m_context;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Implementations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final IParametersProvider m_parametersProvider = new IParametersProvider() {
-    @Override
-    public Map<String, String> getParameters(Object object) {
-      if (object instanceof XmlObjectInfo) {
-        return XmlObjectUtils.getParameters((XmlObjectInfo) object);
-      }
-      if (object instanceof ComponentDescription) {
-        return ((ComponentDescription) object).getParameters();
-      }
-      return ImmutableMap.of();
-    }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Implementations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final IParametersProvider m_parametersProvider = new IParametersProvider() {
+		@Override
+		public Map<String, String> getParameters(Object object) {
+			if (object instanceof XmlObjectInfo) {
+				return XmlObjectUtils.getParameters((XmlObjectInfo) object);
+			}
+			if (object instanceof ComponentDescription) {
+				return ((ComponentDescription) object).getParameters();
+			}
+			return ImmutableMap.of();
+		}
 
-    @Override
-    public String getParameter(Object object, String name) {
-      if (object instanceof XmlObjectInfo) {
-        return XmlObjectUtils.getParameter((XmlObjectInfo) object, name);
-      }
-      if (object instanceof ComponentDescription) {
-        return ((ComponentDescription) object).getParameter(name);
-      }
-      return null;
-    }
+		@Override
+		public String getParameter(Object object, String name) {
+			if (object instanceof XmlObjectInfo) {
+				return XmlObjectUtils.getParameter((XmlObjectInfo) object, name);
+			}
+			if (object instanceof ComponentDescription) {
+				return ((ComponentDescription) object).getParameter(name);
+			}
+			return null;
+		}
 
-    @Override
-    public boolean hasTrueParameter(Object object, String name) {
-      if (object instanceof XmlObjectInfo) {
-        return XmlObjectUtils.hasTrueParameter((XmlObjectInfo) object, name);
-      }
-      return false;
-    }
-  };
-  private static final IDescriptionHelper m_descriptionHelper = new IDescriptionHelper() {
-    @Override
-    public PropertyEditor getEditorForType(Class<?> type) throws Exception {
-      return DescriptionPropertiesHelper.getEditorForType(type);
-    }
+		@Override
+		public boolean hasTrueParameter(Object object, String name) {
+			if (object instanceof XmlObjectInfo) {
+				return XmlObjectUtils.hasTrueParameter((XmlObjectInfo) object, name);
+			}
+			return false;
+		}
+	};
+	private static final IDescriptionHelper m_descriptionHelper = new IDescriptionHelper() {
+		@Override
+		public PropertyEditor getEditorForType(Class<?> type) throws Exception {
+			return DescriptionPropertiesHelper.getEditorForType(type);
+		}
 
-    @Override
-    public IComponentDescription getDescription(Object object) {
-      if (object instanceof XmlObjectInfo) {
-        return ((XmlObjectInfo) object).getDescription();
-      }
-      return null;
-    }
-  };
-  private static final ILayoutRequestValidatorHelper m_validatorHelper =
-      new ILayoutRequestValidatorHelper() {
-        @Override
-        public boolean isComponent(Object object) {
-          return object instanceof XmlObjectInfo;
-        }
+		@Override
+		public IComponentDescription getDescription(Object object) {
+			if (object instanceof XmlObjectInfo) {
+				return ((XmlObjectInfo) object).getDescription();
+			}
+			return null;
+		}
+	};
+	private static final ILayoutRequestValidatorHelper m_validatorHelper =
+			new ILayoutRequestValidatorHelper() {
+		@Override
+		public boolean isComponent(Object object) {
+			return object instanceof XmlObjectInfo;
+		}
 
-        @Override
-        public IComponentDescription getPasteComponentDescription(Object _memento) throws Exception {
-          XmlObjectMemento memento = (XmlObjectMemento) _memento;
-          XmlObjectInfo activeObject = (XmlObjectInfo) GlobalState.getActiveObject();
-          return ComponentDescriptionHelper.getDescription(
-              activeObject.getContext(),
-              memento.getComponentClassName());
-        }
+		@Override
+		public IComponentDescription getPasteComponentDescription(Object _memento) throws Exception {
+			XmlObjectMemento memento = (XmlObjectMemento) _memento;
+			XmlObjectInfo activeObject = (XmlObjectInfo) GlobalState.getActiveObject();
+			return ComponentDescriptionHelper.getDescription(
+					activeObject.getContext(),
+					memento.getComponentClassName());
+		}
 
-        @Override
-        public Object getPasteComponent(Object _memento) throws Exception {
-          XmlObjectMemento memento = (XmlObjectMemento) _memento;
-          XmlObjectInfo activeObject = (XmlObjectInfo) GlobalState.getActiveObject();
-          return memento.create(activeObject);
-        }
+		@Override
+		public Object getPasteComponent(Object _memento) throws Exception {
+			XmlObjectMemento memento = (XmlObjectMemento) _memento;
+			XmlObjectInfo activeObject = (XmlObjectInfo) GlobalState.getActiveObject();
+			return memento.create(activeObject);
+		}
 
-        @Override
-        public boolean canUseParentForChild(Object parent, Object child) throws Exception {
-          return true;
-        }
+		@Override
+		public boolean canUseParentForChild(Object parent, Object child) throws Exception {
+			return true;
+		}
 
-        @Override
-        public boolean canReference(Object object) {
-          if (object instanceof XmlObjectInfo) {
-            XmlObjectInfo xmlObject = (XmlObjectInfo) object;
-            return !(xmlObject.getCreationSupport() instanceof IImplicitCreationSupport);
-          }
-          return false;
-        }
+		@Override
+		public boolean canReference(Object object) {
+			if (object instanceof XmlObjectInfo) {
+				XmlObjectInfo xmlObject = (XmlObjectInfo) object;
+				return !(xmlObject.getCreationSupport() instanceof IImplicitCreationSupport);
+			}
+			return false;
+		}
 
-        @Override
-        public boolean canReorder(ObjectInfo component) {
-          return true;
-        }
+		@Override
+		public boolean canReorder(ObjectInfo component) {
+			return true;
+		}
 
-        @Override
-        public boolean canReparent(ObjectInfo component) {
-          return true;
-        }
-      };
-  private static final IPasteRequestProcessor m_pasteRequestProcessor =
-      new IPasteRequestProcessor() {
-        @Override
-        public Command getPasteCommand(PasteRequest request,
-            final IPasteComponentProcessor componentProcessor) {
-          final List<IObjectInfo> components = getPastingComponents(request);
-          if (components.isEmpty()) {
-            return null;
-          }
-          // create command
-          ObjectInfo hierarchyObject = GlobalState.getActiveObject();
-          return new EditCommand(hierarchyObject) {
-            @Override
-            protected void executeEdit() throws Exception {
-              for (IObjectInfo component : components) {
-                componentProcessor.process(component);
-                XmlObjectMemento.apply((XmlObjectInfo) component.getUnderlyingModel());
-              }
-            }
-          };
-        }
+		@Override
+		public boolean canReparent(ObjectInfo component) {
+			return true;
+		}
+	};
+	private static final IPasteRequestProcessor m_pasteRequestProcessor =
+			new IPasteRequestProcessor() {
+		@Override
+		public Command getPasteCommand(PasteRequest request,
+				final IPasteComponentProcessor componentProcessor) {
+			final List<IObjectInfo> components = getPastingComponents(request);
+			if (components.isEmpty()) {
+				return null;
+			}
+			// create command
+			ObjectInfo hierarchyObject = GlobalState.getActiveObject();
+			return new EditCommand(hierarchyObject) {
+				@Override
+				protected void executeEdit() throws Exception {
+					for (IObjectInfo component : components) {
+						componentProcessor.process(component);
+						XmlObjectMemento.apply((XmlObjectInfo) component.getUnderlyingModel());
+					}
+				}
+			};
+		}
 
-        @Override
-        public List<IObjectInfo> getPastingComponents(PasteRequest request) {
-          @SuppressWarnings("unchecked")
-          final List<XmlObjectMemento> mementos = (List<XmlObjectMemento>) request.getMemento();
-          final List<IObjectInfo> components = Lists.newArrayList();
-          // prepare models
-          ExecutionUtils.runLog(new RunnableEx() {
-            @Override
-            public void run() throws Exception {
-              XmlObjectInfo hierarchyModel = (XmlObjectInfo) GlobalState.getActiveObject();
-              for (XmlObjectMemento memento : mementos) {
-                XmlObjectInfo component = memento.create(hierarchyModel);
-                components.add(component);
-              }
-            }
-          });
-          // set objects for selection
-          request.setObjects(components);
-          return components;
-        }
-      };
-  private static final IOrderProcessor m_orderProcessor = new IOrderProcessor() {
-    @Override
-    public void move(Object _component, Object _nextComponent) throws Exception {
-      XmlObjectInfo component = (XmlObjectInfo) _component;
-      XmlObjectInfo nextComponent = (XmlObjectInfo) _nextComponent;
-      XmlObjectInfo container = (XmlObjectInfo) component.getParent();
-      XmlObjectUtils.move(component, OrderAssociation.INSTANCE, container, nextComponent);
-    }
-  };
-  private static final IOtherHelper m_otherHelper = new IOtherHelper() {
-    @Override
-    public IJavaProject getJavaProject() {
-      XmlObjectInfo object = (XmlObjectInfo) GlobalState.getActiveObject();
-      return object.getContext().getJavaProject();
-    }
+		@Override
+		public List<IObjectInfo> getPastingComponents(PasteRequest request) {
+			@SuppressWarnings("unchecked")
+			final List<XmlObjectMemento> mementos = (List<XmlObjectMemento>) request.getMemento();
+			final List<IObjectInfo> components = Lists.newArrayList();
+			// prepare models
+			ExecutionUtils.runLog(new RunnableEx() {
+				@Override
+				public void run() throws Exception {
+					XmlObjectInfo hierarchyModel = (XmlObjectInfo) GlobalState.getActiveObject();
+					for (XmlObjectMemento memento : mementos) {
+						XmlObjectInfo component = memento.create(hierarchyModel);
+						components.add(component);
+					}
+				}
+			});
+			// set objects for selection
+			request.setObjects(components);
+			return components;
+		}
+	};
+	private static final IOrderProcessor m_orderProcessor = new IOrderProcessor() {
+		@Override
+		public void move(Object _component, Object _nextComponent) throws Exception {
+			XmlObjectInfo component = (XmlObjectInfo) _component;
+			XmlObjectInfo nextComponent = (XmlObjectInfo) _nextComponent;
+			XmlObjectInfo container = (XmlObjectInfo) component.getParent();
+			XmlObjectUtils.move(component, OrderAssociation.INSTANCE, container, nextComponent);
+		}
+	};
+	private static final IOtherHelper m_otherHelper = new IOtherHelper() {
+		@Override
+		public IJavaProject getJavaProject() {
+			XmlObjectInfo object = (XmlObjectInfo) GlobalState.getActiveObject();
+			return object.getContext().getJavaProject();
+		}
 
-    @Override
-    public Object getObject(ObjectInfo model) {
-      if (model instanceof XmlObjectInfo) {
-        return ((XmlObjectInfo) model).getObject();
-      }
-      return null;
-    }
+		@Override
+		public Object getObject(ObjectInfo model) {
+			if (model instanceof XmlObjectInfo) {
+				return ((XmlObjectInfo) model).getObject();
+			}
+			return null;
+		}
 
-    @Override
-    public List<EditorWarning> getWarnings() {
-      return getContext().getWarnings();
-    }
+		@Override
+		public List<EditorWarning> getWarnings() {
+			return getContext().getWarnings();
+		}
 
-    @Override
-    public void addWarning(EditorWarning warning) {
-      getContext().addWarning(warning);
-    }
+		@Override
+		public void addWarning(EditorWarning warning) {
+			getContext().addWarning(warning);
+		}
 
-    private EditorContext getContext() {
-      return ((XmlObjectInfo) GlobalState.getActiveObject()).getContext();
-    }
-  };
+		private EditorContext getContext() {
+			return ((XmlObjectInfo) GlobalState.getActiveObject()).getContext();
+		}
+	};
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/utils/MorphingSupport.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/utils/MorphingSupport.java
index da828031c..029a8c0d0 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/utils/MorphingSupport.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/utils/MorphingSupport.java
@@ -38,207 +38,207 @@
  * @coverage core.model.util
  */
 public abstract class MorphingSupport<T extends XmlObjectInfo> extends AbstractMorphingSupport<T> {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance fields
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final EditorContext m_editor;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected MorphingSupport(String toolkitClassName, T component) {
-    super(toolkitClassName, component);
-    m_editor = m_component.getContext();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected IJavaProject getJavaProject() {
-    return m_editor.getJavaProject();
-  }
-
-  @Override
-  protected ClassLoader getClassLoader() {
-    return m_editor.getClassLoader();
-  }
-
-  @Override
-  protected Class<?> getComponentClass() {
-    return m_component.getDescription().getComponentClass();
-  }
-
-  @Override
-  protected List<MorphingTargetDescription> getMorphingTargets() {
-    return m_component.getDescription().getMorphingTargets();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getTargetText(MorphingTargetDescription target) throws Exception {
-    return getComponentPresentation(target).getName();
-  }
-
-  @Override
-  protected ImageDescriptor getTargetImageDescriptor(MorphingTargetDescription target)
-      throws Exception {
-    ComponentPresentation presentation = getComponentPresentation(target);
-    return new ImageImageDescriptor(presentation.getIcon());
-  }
-
-  private ComponentPresentation getComponentPresentation(MorphingTargetDescription target)
-      throws Exception {
-    return ComponentPresentationHelper.getPresentation(
-        m_editor,
-        target.getComponentClass().getName(),
-        target.getCreationId());
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Contribution
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * If possible, contributes "morph" actions.
-   *
-   * @param toolkitClassName
-   *          the name of base class for "Other..." action, for example
-   *          <code>"org.eclipse.swt.widgets.Control"</code> as SWT.
-   * @param component
-   *          the {@link XmlObjectInfo} that should be morphed.
-   * @param manager
-   *          the {@link IContributionManager} to add action to.
-   */
-  public static void contribute(String toolkitClassName,
-      XmlObjectInfo component,
-      IContributionManager manager) throws Exception {
-    if (component.isRoot()) {
-      // TODO not supported yet
-      return;
-    }
-    // add "morph" actions
-    MorphingSupport<XmlObjectInfo> morphingSupport =
-        new MorphingSupport<XmlObjectInfo>(toolkitClassName, component) {
-        };
-    contribute(morphingSupport, manager);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Morphing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void morph(MorphingTargetDescription target) throws Exception {
-    if (m_component.getCreationSupport() instanceof ElementCreationSupport) {
-      super.morph(target);
-    }
-  }
-
-  @Override
-  @SuppressWarnings("unchecked")
-  protected T morph_create(MorphingTargetDescription target) throws Exception {
-    Class<?> componentClass = target.getComponentClass();
-    ComponentDescription newDescription =
-        ComponentDescriptionHelper.getDescription(m_editor, componentClass);
-    // prepare new component
-    CreationSupport creationSupport =
-        new ElementCreationSupport(m_component.getCreationSupport().getElement());
-    T newComponent = (T) XmlObjectUtils.createObject(m_editor, newDescription, creationSupport);
-    GlobalStateXml.activate(newComponent);
-    return newComponent;
-  }
-
-  @Override
-  protected void morph_replace(T newComponent) throws Exception {
-    /* TODO m_component.getBroadcastJava().replaceChildBefore(
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance fields
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final EditorContext m_editor;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected MorphingSupport(String toolkitClassName, T component) {
+		super(toolkitClassName, component);
+		m_editor = m_component.getContext();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected IJavaProject getJavaProject() {
+		return m_editor.getJavaProject();
+	}
+
+	@Override
+	protected ClassLoader getClassLoader() {
+		return m_editor.getClassLoader();
+	}
+
+	@Override
+	protected Class<?> getComponentClass() {
+		return m_component.getDescription().getComponentClass();
+	}
+
+	@Override
+	protected List<MorphingTargetDescription> getMorphingTargets() {
+		return m_component.getDescription().getMorphingTargets();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getTargetText(MorphingTargetDescription target) throws Exception {
+		return getComponentPresentation(target).getName();
+	}
+
+	@Override
+	protected ImageDescriptor getTargetImageDescriptor(MorphingTargetDescription target)
+			throws Exception {
+		ComponentPresentation presentation = getComponentPresentation(target);
+		return new ImageImageDescriptor(presentation.getIcon());
+	}
+
+	private ComponentPresentation getComponentPresentation(MorphingTargetDescription target)
+			throws Exception {
+		return ComponentPresentationHelper.getPresentation(
+				m_editor,
+				target.getComponentClass().getName(),
+				target.getCreationId());
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Contribution
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * If possible, contributes "morph" actions.
+	 *
+	 * @param toolkitClassName
+	 *          the name of base class for "Other..." action, for example
+	 *          <code>"org.eclipse.swt.widgets.Control"</code> as SWT.
+	 * @param component
+	 *          the {@link XmlObjectInfo} that should be morphed.
+	 * @param manager
+	 *          the {@link IContributionManager} to add action to.
+	 */
+	public static void contribute(String toolkitClassName,
+			XmlObjectInfo component,
+			IContributionManager manager) throws Exception {
+		if (component.isRoot()) {
+			// TODO not supported yet
+			return;
+		}
+		// add "morph" actions
+		MorphingSupport<XmlObjectInfo> morphingSupport =
+				new MorphingSupport<XmlObjectInfo>(toolkitClassName, component) {
+		};
+		contribute(morphingSupport, manager);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Morphing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void morph(MorphingTargetDescription target) throws Exception {
+		if (m_component.getCreationSupport() instanceof ElementCreationSupport) {
+			super.morph(target);
+		}
+	}
+
+	@Override
+	@SuppressWarnings("unchecked")
+	protected T morph_create(MorphingTargetDescription target) throws Exception {
+		Class<?> componentClass = target.getComponentClass();
+		ComponentDescription newDescription =
+				ComponentDescriptionHelper.getDescription(m_editor, componentClass);
+		// prepare new component
+		CreationSupport creationSupport =
+				new ElementCreationSupport(m_component.getCreationSupport().getElement());
+		T newComponent = (T) XmlObjectUtils.createObject(m_editor, newDescription, creationSupport);
+		GlobalStateXml.activate(newComponent);
+		return newComponent;
+	}
+
+	@Override
+	protected void morph_replace(T newComponent) throws Exception {
+		/* TODO m_component.getBroadcastJava().replaceChildBefore(
     m_component.getParentJava(),
     m_component,
     newComponent);*/
-    ObjectInfo parent = m_component.getParent();
-    if (parent == null) {
-      // replace root
-      // TODO
-    } else {
-      // replace component in parent (following operations may require parent)
-      parent.replaceChild(m_component, newComponent);
-    }
-  }
-
-  @Override
-  protected void morph_properties(T newComponent) throws Exception {
-    for (Property property : m_component.getProperties()) {
-      if (newComponent.getPropertyByTitle(property.getTitle()) != null) {
-        // keep property value
-        continue;
-      }
-      if (property.isModified()) {
-        // reset to default
-        property.setValue(Property.UNKNOWN_VALUE);
-      }
-    }
-  }
-
-  @Override
-  protected void morph_children(T newComponent) throws Exception {
-    for (XmlObjectInfo child : m_component.getChildrenXML()) {
-      newComponent.addChild(child);
-    }
-  }
-
-  @Override
-  protected void morph_source(T newComponent) throws Exception {
-    // replace element type
-    CreationSupport creationSupport = newComponent.getCreationSupport();
-    Class<?> componentClass = newComponent.getDescription().getComponentClass();
-    String newComponentTag = XmlObjectUtils.getTagForClass(newComponent, componentClass);
-    creationSupport.getElement().setTag(newComponentTag);
-  }
-
-  @Override
-  protected void morph_finish(T newComponent) throws Exception {
-    if (m_component.isRoot()) {
-      m_component.getContext().commit();
-      DesignPageSite.Helper.getSite(m_component).reparse();
-    }
-    /* TODO m_component.getBroadcastJava().replaceChildAfter(
+		ObjectInfo parent = m_component.getParent();
+		if (parent == null) {
+			// replace root
+			// TODO
+		} else {
+			// replace component in parent (following operations may require parent)
+			parent.replaceChild(m_component, newComponent);
+		}
+	}
+
+	@Override
+	protected void morph_properties(T newComponent) throws Exception {
+		for (Property property : m_component.getProperties()) {
+			if (newComponent.getPropertyByTitle(property.getTitle()) != null) {
+				// keep property value
+				continue;
+			}
+			if (property.isModified()) {
+				// reset to default
+				property.setValue(Property.UNKNOWN_VALUE);
+			}
+		}
+	}
+
+	@Override
+	protected void morph_children(T newComponent) throws Exception {
+		for (XmlObjectInfo child : m_component.getChildrenXML()) {
+			newComponent.addChild(child);
+		}
+	}
+
+	@Override
+	protected void morph_source(T newComponent) throws Exception {
+		// replace element type
+		CreationSupport creationSupport = newComponent.getCreationSupport();
+		Class<?> componentClass = newComponent.getDescription().getComponentClass();
+		String newComponentTag = XmlObjectUtils.getTagForClass(newComponent, componentClass);
+		creationSupport.getElement().setTag(newComponentTag);
+	}
+
+	@Override
+	protected void morph_finish(T newComponent) throws Exception {
+		if (m_component.isRoot()) {
+			m_component.getContext().commit();
+			DesignPageSite.Helper.getSite(m_component).reparse();
+		}
+		/* TODO m_component.getBroadcastJava().replaceChildAfter(
         m_component.getParentJava(),
         m_component,
         newComponent);*/
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utility access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static String validate(String toolkitClassName,
-      XmlObjectInfo component,
-      MorphingTargetDescription target) throws Exception {
-    MorphingSupport<XmlObjectInfo> morphingSupport =
-        new MorphingSupport<XmlObjectInfo>(toolkitClassName, component) {
-        };
-    return morphingSupport.validate(target);
-  }
-
-  public static void morph(String toolkitClassName,
-      XmlObjectInfo component,
-      MorphingTargetDescription target) throws Exception {
-    MorphingSupport<XmlObjectInfo> morphingSupport =
-        new MorphingSupport<XmlObjectInfo>(toolkitClassName, component) {
-        };
-    morphingSupport.morph(target);
-  }
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utility access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static String validate(String toolkitClassName,
+			XmlObjectInfo component,
+			MorphingTargetDescription target) throws Exception {
+		MorphingSupport<XmlObjectInfo> morphingSupport =
+				new MorphingSupport<XmlObjectInfo>(toolkitClassName, component) {
+		};
+		return morphingSupport.validate(target);
+	}
+
+	public static void morph(String toolkitClassName,
+			XmlObjectInfo component,
+			MorphingTargetDescription target) throws Exception {
+		MorphingSupport<XmlObjectInfo> morphingSupport =
+				new MorphingSupport<XmlObjectInfo>(toolkitClassName, component) {
+		};
+		morphingSupport.morph(target);
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/utils/NamespacesHelper.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/utils/NamespacesHelper.java
index ebd8bc427..d7ebf2a67 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/utils/NamespacesHelper.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/utils/NamespacesHelper.java
@@ -28,150 +28,150 @@
  * @coverage XML.model.utils
  */
 public class NamespacesHelper {
-  protected final DocumentElement m_rootElement;
-  protected final Set<String> m_names = Sets.newHashSet();
-  protected final Map<String, String> m_nameForURI = Maps.newHashMap();
-  protected final Map<String, String> m_uriForName = Maps.newHashMap();
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public NamespacesHelper(DocumentElement element) {
-    m_rootElement = element;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Prepares information about existing namespaces.
-   */
-  public void prepareNamespaces() {
-    m_names.clear();
-    m_nameForURI.clear();
-    for (DocumentAttribute attribute : m_rootElement.getDocumentAttributes()) {
-      String name = attribute.getName();
-      if (name.startsWith("xmlns")) {
-        name = StringUtils.removeStart(name, "xmlns");
-        name = StringUtils.removeStart(name, ":");
-        m_nameForURI.put(attribute.getValue(), name);
-        m_uriForName.put(name, attribute.getValue());
-        m_names.add(name);
-      }
-    }
-  }
-
-  /**
-   * @return the unique name for new namespace.
-   */
-  public String generateUniqueName(String base) {
-    String name;
-    int index = 1;
-    do {
-      name = base + index;
-      index++;
-    } while (m_names.contains(name));
-    return name;
-  }
-
-  /**
-   * Adds new namespace declaration.
-   */
-  public void add(String name, String uri) {
-    m_rootElement.setAttribute("xmlns:" + name, uri);
-  }
-
-  /**
-   * @return the URI of given namespace
-   */
-  public String getURI(String name) {
-    prepareNamespaces();
-    return m_uriForName.get(name);
-  }
-
-  /**
-   * @return the existing name given given URI, may be <code>null</code> if does not exist.
-   */
-  public String getName(String uri) {
-    prepareNamespaces();
-    return m_nameForURI.get(uri);
-  }
-
-  /**
-   * @return the existing name given given URI or generate and add new name.
-   */
-  public String ensureName(String uri, String base) {
-    prepareNamespaces();
-    // try to find existing namespace declaration
-    {
-      String name = m_nameForURI.get(uri);
-      if (name != null) {
-        return name;
-      }
-    }
-    // add new namespace
-    {
-      String name = getNewName(uri, base);
-      add(name, uri);
-      return name;
-    }
-  }
-
-  /**
-   * @return the new name of namespace of given URI. Subclasses can override this to provide better
-   *         names for known toolkit packages.
-   */
-  protected String getNewName(String uri, String base) {
-    return generateUniqueName(base);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Static utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @param element
-   *          some {@link DocumentElement} attached to root.
-   * @param name
-   *          the name of namespace.
-   *
-   * @return the URI of given namespace name.
-   */
-  public static String getURI(DocumentElement element, String name) {
-    NamespacesHelper helper = new NamespacesHelper(element.getRoot());
-    return helper.getURI(name);
-  }
-
-  /**
-   * @param element
-   *          some {@link DocumentElement} attached to root.
-   * @param uri
-   *          the URI of namespace.
-   *
-   * @return the existing name of given URI, may be <code>null</code> if does not exist.
-   */
-  public static String getName(DocumentElement element, String uri) {
-    NamespacesHelper helper = new NamespacesHelper(element.getRoot());
-    return helper.getName(uri);
-  }
-
-  /**
-   * @param element
-   *          some {@link DocumentElement} attached to root.
-   * @param uri
-   *          the URI of namespace.
-   * @param base
-   *          the base of name to generate.
-   *
-   * @return the existing name of given URI or generate and add new name.
-   */
-  public static String ensureName(DocumentElement element, String uri, String base) {
-    NamespacesHelper helper = new NamespacesHelper(element.getRoot());
-    return helper.ensureName(uri, base);
-  }
+	protected final DocumentElement m_rootElement;
+	protected final Set<String> m_names = Sets.newHashSet();
+	protected final Map<String, String> m_nameForURI = Maps.newHashMap();
+	protected final Map<String, String> m_uriForName = Maps.newHashMap();
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public NamespacesHelper(DocumentElement element) {
+		m_rootElement = element;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Prepares information about existing namespaces.
+	 */
+	public void prepareNamespaces() {
+		m_names.clear();
+		m_nameForURI.clear();
+		for (DocumentAttribute attribute : m_rootElement.getDocumentAttributes()) {
+			String name = attribute.getName();
+			if (name.startsWith("xmlns")) {
+				name = StringUtils.removeStart(name, "xmlns");
+				name = StringUtils.removeStart(name, ":");
+				m_nameForURI.put(attribute.getValue(), name);
+				m_uriForName.put(name, attribute.getValue());
+				m_names.add(name);
+			}
+		}
+	}
+
+	/**
+	 * @return the unique name for new namespace.
+	 */
+	public String generateUniqueName(String base) {
+		String name;
+		int index = 1;
+		do {
+			name = base + index;
+			index++;
+		} while (m_names.contains(name));
+		return name;
+	}
+
+	/**
+	 * Adds new namespace declaration.
+	 */
+	public void add(String name, String uri) {
+		m_rootElement.setAttribute("xmlns:" + name, uri);
+	}
+
+	/**
+	 * @return the URI of given namespace
+	 */
+	public String getURI(String name) {
+		prepareNamespaces();
+		return m_uriForName.get(name);
+	}
+
+	/**
+	 * @return the existing name given given URI, may be <code>null</code> if does not exist.
+	 */
+	public String getName(String uri) {
+		prepareNamespaces();
+		return m_nameForURI.get(uri);
+	}
+
+	/**
+	 * @return the existing name given given URI or generate and add new name.
+	 */
+	public String ensureName(String uri, String base) {
+		prepareNamespaces();
+		// try to find existing namespace declaration
+		{
+			String name = m_nameForURI.get(uri);
+			if (name != null) {
+				return name;
+			}
+		}
+		// add new namespace
+		{
+			String name = getNewName(uri, base);
+			add(name, uri);
+			return name;
+		}
+	}
+
+	/**
+	 * @return the new name of namespace of given URI. Subclasses can override this to provide better
+	 *         names for known toolkit packages.
+	 */
+	protected String getNewName(String uri, String base) {
+		return generateUniqueName(base);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Static utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @param element
+	 *          some {@link DocumentElement} attached to root.
+	 * @param name
+	 *          the name of namespace.
+	 *
+	 * @return the URI of given namespace name.
+	 */
+	public static String getURI(DocumentElement element, String name) {
+		NamespacesHelper helper = new NamespacesHelper(element.getRoot());
+		return helper.getURI(name);
+	}
+
+	/**
+	 * @param element
+	 *          some {@link DocumentElement} attached to root.
+	 * @param uri
+	 *          the URI of namespace.
+	 *
+	 * @return the existing name of given URI, may be <code>null</code> if does not exist.
+	 */
+	public static String getName(DocumentElement element, String uri) {
+		NamespacesHelper helper = new NamespacesHelper(element.getRoot());
+		return helper.getName(uri);
+	}
+
+	/**
+	 * @param element
+	 *          some {@link DocumentElement} attached to root.
+	 * @param uri
+	 *          the URI of namespace.
+	 * @param base
+	 *          the base of name to generate.
+	 *
+	 * @return the existing name of given URI or generate and add new name.
+	 */
+	public static String ensureName(DocumentElement element, String uri, String base) {
+		NamespacesHelper helper = new NamespacesHelper(element.getRoot());
+		return helper.ensureName(uri, base);
+	}
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/utils/TagResolverProvider.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/utils/TagResolverProvider.java
index 8b9a02409..3c303cfe9 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/utils/TagResolverProvider.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/utils/TagResolverProvider.java
@@ -20,8 +20,8 @@
  * @coverage XML.model.utils
  */
 public interface TagResolverProvider {
-  /**
-   * Analyzes given {@link XmlObjectInfo} and may be adds {@link XmlObjectResolveTag} broadcast.
-   */
-  void register(XmlObjectInfo rootObject) throws Exception;
+	/**
+	 * Analyzes given {@link XmlObjectInfo} and may be adds {@link XmlObjectResolveTag} broadcast.
+	 */
+	void register(XmlObjectInfo rootObject) throws Exception;
 }
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/utils/XmlObjectUtils.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/utils/XmlObjectUtils.java
index 95984af8d..4d6bd7b45 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/utils/XmlObjectUtils.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/model/utils/XmlObjectUtils.java
@@ -49,395 +49,395 @@
  * @coverage XML.model.utils
  */
 public final class XmlObjectUtils {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Checks
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if given {@link XmlObjectInfo} is implicit, i.e. has not real
-   *         element.
-   */
-  public static boolean isImplicit(XmlObjectInfo object) {
-    return object.getCreationSupport() instanceof IImplicitCreationSupport;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Checks
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if given {@link XmlObjectInfo} is implicit, i.e. has not real
+	 *         element.
+	 */
+	public static boolean isImplicit(XmlObjectInfo object) {
+		return object.getCreationSupport() instanceof IImplicitCreationSupport;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parameters
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final String KEY_PARAMETER_PREFIX = "Instance-level parameter: ";
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parameters
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final String KEY_PARAMETER_PREFIX = "Instance-level parameter: ";
 
-  /**
-   * Sets the {@link XmlObjectInfo} instance level parameter value, can be accesses later using
-   * {@link #getParameter(XmlObjectInfo, String)}.
-   */
-  public static void setParameter(XmlObjectInfo object, String name, String value) {
-    String key = KEY_PARAMETER_PREFIX + name;
-    object.putArbitraryValue(key, value);
-  }
+	/**
+	 * Sets the {@link XmlObjectInfo} instance level parameter value, can be accesses later using
+	 * {@link #getParameter(XmlObjectInfo, String)}.
+	 */
+	public static void setParameter(XmlObjectInfo object, String name, String value) {
+		String key = KEY_PARAMETER_PREFIX + name;
+		object.putArbitraryValue(key, value);
+	}
 
-  /**
-   * Returns the value of {@link XmlObjectInfo} parameter.
-   * <p>
-   * Usually returns just {@link ComponentDescription#getParameter(String)}, but checks also
-   * instance level parameters.
-   *
-   * @return the value of {@link XmlObjectInfo} parameter.
-   */
-  public static String getParameter(XmlObjectInfo object, String name) {
-    // try to key from XMLObject_Info instance
-    {
-      String key = KEY_PARAMETER_PREFIX + name;
-      String value = (String) object.getArbitraryValue(key);
-      if (value != null) {
-        return value;
-      }
-    }
-    // get from ComponentDescription
-    return object.getDescription().getParameter(name);
-  }
+	/**
+	 * Returns the value of {@link XmlObjectInfo} parameter.
+	 * <p>
+	 * Usually returns just {@link ComponentDescription#getParameter(String)}, but checks also
+	 * instance level parameters.
+	 *
+	 * @return the value of {@link XmlObjectInfo} parameter.
+	 */
+	public static String getParameter(XmlObjectInfo object, String name) {
+		// try to key from XMLObject_Info instance
+		{
+			String key = KEY_PARAMETER_PREFIX + name;
+			String value = (String) object.getArbitraryValue(key);
+			if (value != null) {
+				return value;
+			}
+		}
+		// get from ComponentDescription
+		return object.getDescription().getParameter(name);
+	}
 
-  /**
-   * Checks if {@link XmlObjectInfo} has parameter with value <code>"true"</code>.
-   */
-  public static boolean hasTrueParameter(XmlObjectInfo object, String name) {
-    String parameter = getParameter(object, name);
-    return "true".equals(parameter);
-  }
+	/**
+	 * Checks if {@link XmlObjectInfo} has parameter with value <code>"true"</code>.
+	 */
+	public static boolean hasTrueParameter(XmlObjectInfo object, String name) {
+		String parameter = getParameter(object, name);
+		return "true".equals(parameter);
+	}
 
-  /**
-   * @return mapped {@link XmlObjectInfo} parameters.
-   */
-  public static Map<String, String> getParameters(XmlObjectInfo object) {
-    Map<String, String> parameters = Maps.newHashMap();
-    parameters.putAll(extractArbitraryParameters(object));
-    parameters.putAll(object.getDescription().getParameters());
-    return parameters;
-  }
+	/**
+	 * @return mapped {@link XmlObjectInfo} parameters.
+	 */
+	public static Map<String, String> getParameters(XmlObjectInfo object) {
+		Map<String, String> parameters = Maps.newHashMap();
+		parameters.putAll(extractArbitraryParameters(object));
+		parameters.putAll(object.getDescription().getParameters());
+		return parameters;
+	}
 
-  /**
-   * @return the {@link Map} of parameters set using
-   *         {@link #setParameter(XmlObjectInfo, String, String)}.
-   */
-  private static Map<String, String> extractArbitraryParameters(XmlObjectInfo object) {
-    Map<String, String> parameters = Maps.newHashMap();
-    for (Entry<Object, Object> arbitrary : object.getArbitraries().entrySet()) {
-      Object key = arbitrary.getKey();
-      Object value = arbitrary.getValue();
-      if (key instanceof String && value instanceof String) {
-        String stringKey = (String) key;
-        if (stringKey.startsWith(KEY_PARAMETER_PREFIX)) {
-          parameters.put(stringKey.substring(KEY_PARAMETER_PREFIX.length()), (String) value);
-        }
-      }
-    }
-    return parameters;
-  }
+	/**
+	 * @return the {@link Map} of parameters set using
+	 *         {@link #setParameter(XmlObjectInfo, String, String)}.
+	 */
+	private static Map<String, String> extractArbitraryParameters(XmlObjectInfo object) {
+		Map<String, String> parameters = Maps.newHashMap();
+		for (Entry<Object, Object> arbitrary : object.getArbitraries().entrySet()) {
+			Object key = arbitrary.getKey();
+			Object value = arbitrary.getValue();
+			if (key instanceof String && value instanceof String) {
+				String stringKey = (String) key;
+				if (stringKey.startsWith(KEY_PARAMETER_PREFIX)) {
+					parameters.put(stringKey.substring(KEY_PARAMETER_PREFIX.length()), (String) value);
+				}
+			}
+		}
+		return parameters;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Script
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * If given {@link XmlObjectInfo} has parameter with script, execute it with "model" and "object"
-   * variables.
-   */
-  public static Object executeScriptParameter(XmlObjectInfo model, String scriptName)
-      throws Exception {
-    String script = getParameter(model, scriptName);
-    if (script == null) {
-      return null;
-    }
-    return executeScript(model, script);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Script
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * If given {@link XmlObjectInfo} has parameter with script, execute it with "model" and "object"
+	 * variables.
+	 */
+	public static Object executeScriptParameter(XmlObjectInfo model, String scriptName)
+			throws Exception {
+		String script = getParameter(model, scriptName);
+		if (script == null) {
+			return null;
+		}
+		return executeScript(model, script);
+	}
 
-  /**
-   * Execute script with "model" and "object" variables.
-   */
-  public static Object executeScript(XmlObjectInfo model, String script) throws Exception {
-    ClassLoader classLoader = model.getContext().getClassLoader();
-    Map<String, Object> variables = Maps.newHashMap();
-    variables.put("model", model);
-    variables.put("object", model.getObject());
-    return ScriptUtils.evaluate(classLoader, script, variables);
-  }
+	/**
+	 * Execute script with "model" and "object" variables.
+	 */
+	public static Object executeScript(XmlObjectInfo model, String script) throws Exception {
+		ClassLoader classLoader = model.getContext().getClassLoader();
+		Map<String, Object> variables = Maps.newHashMap();
+		variables.put("model", model);
+		variables.put("object", model.getObject());
+		return ScriptUtils.evaluate(classLoader, script, variables);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Calls {@link IRootProcessor} for given {@link XmlObjectInfo}.
-   */
-  public static void callRootProcessors(XmlObjectInfo root) throws Exception {
-    List<IRootProcessor> processors =
-        ExternalFactoriesHelper.getElementsInstances(
-            IRootProcessor.class,
-            "org.eclipse.wb.core.xml.rootProcessors",
-            "processor");
-    for (IRootProcessor processor : processors) {
-      processor.process(root);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Calls {@link IRootProcessor} for given {@link XmlObjectInfo}.
+	 */
+	public static void callRootProcessors(XmlObjectInfo root) throws Exception {
+		List<IRootProcessor> processors =
+				ExternalFactoriesHelper.getElementsInstances(
+						IRootProcessor.class,
+						"org.eclipse.wb.core.xml.rootProcessors",
+						"processor");
+		for (IRootProcessor processor : processors) {
+			processor.process(root);
+		}
+	}
 
-  /**
-   * Sometimes real component is created using some wrapper, for example as {@link Viewer} creates
-   * {@link Control}. We should drop {@link Viewer} in code, but layout policies should see that we
-   * drop {@link Control}. So we should "extract" {@link Control} {@link XmlObjectInfo} from
-   * {@link Viewer} {@link XmlObjectInfo}.
-   *
-   * @return the wrapped {@link XmlObjectInfo} or original {@link XmlObjectInfo} if there are no
-   *         wrapping.
-   */
-  public static XmlObjectInfo getWrapped(XmlObjectInfo original) throws Exception {
-    if (original instanceof IWrapperInfo) {
-      IWrapperInfo wrapperInfo = (IWrapperInfo) original;
-      return wrapperInfo.getWrapped();
-    }
-    return original;
-  }
+	/**
+	 * Sometimes real component is created using some wrapper, for example as {@link Viewer} creates
+	 * {@link Control}. We should drop {@link Viewer} in code, but layout policies should see that we
+	 * drop {@link Control}. So we should "extract" {@link Control} {@link XmlObjectInfo} from
+	 * {@link Viewer} {@link XmlObjectInfo}.
+	 *
+	 * @return the wrapped {@link XmlObjectInfo} or original {@link XmlObjectInfo} if there are no
+	 *         wrapping.
+	 */
+	public static XmlObjectInfo getWrapped(XmlObjectInfo original) throws Exception {
+		if (original instanceof IWrapperInfo) {
+			IWrapperInfo wrapperInfo = (IWrapperInfo) original;
+			return wrapperInfo.getWrapped();
+		}
+		return original;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Model creation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return new {@link XmlObjectInfo} for given component {@link Class} name and
-   *         {@link CreationSupport}.
-   */
-  public static XmlObjectInfo createObject(EditorContext context,
-      String componentClassName,
-      CreationSupport creationSupport) throws Exception {
-    Class<?> componentClass = context.getClassLoader().loadClass(componentClassName);
-    return createObject(context, componentClass, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Model creation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return new {@link XmlObjectInfo} for given component {@link Class} name and
+	 *         {@link CreationSupport}.
+	 */
+	public static XmlObjectInfo createObject(EditorContext context,
+			String componentClassName,
+			CreationSupport creationSupport) throws Exception {
+		Class<?> componentClass = context.getClassLoader().loadClass(componentClassName);
+		return createObject(context, componentClass, creationSupport);
+	}
 
-  /**
-   * @return new {@link XmlObjectInfo} for given component {@link Class} and {@link CreationSupport}
-   *         .
-   */
-  public static XmlObjectInfo createObject(EditorContext context,
-      Class<?> componentClass,
-      CreationSupport creationSupport) throws Exception {
-    // prepare description
-    ComponentDescription componentDescription =
-        ComponentDescriptionHelper.getDescription(context, componentClass);
-    // create model
-    return createObject(context, componentDescription, creationSupport);
-  }
+	/**
+	 * @return new {@link XmlObjectInfo} for given component {@link Class} and {@link CreationSupport}
+	 *         .
+	 */
+	public static XmlObjectInfo createObject(EditorContext context,
+			Class<?> componentClass,
+			CreationSupport creationSupport) throws Exception {
+		// prepare description
+		ComponentDescription componentDescription =
+				ComponentDescriptionHelper.getDescription(context, componentClass);
+		// create model
+		return createObject(context, componentDescription, creationSupport);
+	}
 
-  /**
-   * @return new {@link XmlObjectInfo} for given {@link ComponentDescription} and
-   *         {@link CreationSupport}.
-   */
-  public static XmlObjectInfo createObject(EditorContext context,
-      ComponentDescription componentDescription,
-      CreationSupport creationSupport) throws Exception {
-    // prepare constructor of model
-    Constructor<?> modelConstructor;
-    {
-      Class<?> modelClass = componentDescription.getModelClass();
-      modelConstructor =
-          modelClass.getConstructor(new Class[]{
-              EditorContext.class,
-              ComponentDescription.class,
-              CreationSupport.class});
-    }
-    // create model
-    return (XmlObjectInfo) modelConstructor.newInstance(new Object[]{
-        context,
-        componentDescription,
-        creationSupport});
-  }
+	/**
+	 * @return new {@link XmlObjectInfo} for given {@link ComponentDescription} and
+	 *         {@link CreationSupport}.
+	 */
+	public static XmlObjectInfo createObject(EditorContext context,
+			ComponentDescription componentDescription,
+			CreationSupport creationSupport) throws Exception {
+		// prepare constructor of model
+		Constructor<?> modelConstructor;
+		{
+			Class<?> modelClass = componentDescription.getModelClass();
+			modelConstructor =
+					modelClass.getConstructor(new Class[]{
+							EditorContext.class,
+							ComponentDescription.class,
+							CreationSupport.class});
+		}
+		// create model
+		return (XmlObjectInfo) modelConstructor.newInstance(new Object[]{
+				context,
+				componentDescription,
+				creationSupport});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Creates new {@link XmlObjectInfo} as first child.
-   */
-  public static void addFirst(XmlObjectInfo component,
-      Association association,
-      XmlObjectInfo container) throws Exception {
-    // add model
-    container.addChildFirst(component);
-    // add element
-    {
-      ElementTarget target = new ElementTarget(container.getCreationSupport().getElement(), 0);
-      association.add(component, target);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Creates new {@link XmlObjectInfo} as first child.
+	 */
+	public static void addFirst(XmlObjectInfo component,
+			Association association,
+			XmlObjectInfo container) throws Exception {
+		// add model
+		container.addChildFirst(component);
+		// add element
+		{
+			ElementTarget target = new ElementTarget(container.getCreationSupport().getElement(), 0);
+			association.add(component, target);
+		}
+	}
 
-  /**
-   * Creates new {@link XmlObjectInfo}.
-   */
-  public static void add(XmlObjectInfo component,
-      Association association,
-      XmlObjectInfo container,
-      XmlObjectInfo nextComponent) throws Exception {
-    container.getBroadcast(XmlObjectAdd.class).before(container, component);
-    // add model
-    container.addChild(component, nextComponent);
-    // add element
-    {
-      ElementTarget target = getTarget(container, nextComponent);
-      association.add(component, target);
-    }
-    // done
-    container.getBroadcast(XmlObjectAdd.class).after(container, component);
-  }
+	/**
+	 * Creates new {@link XmlObjectInfo}.
+	 */
+	public static void add(XmlObjectInfo component,
+			Association association,
+			XmlObjectInfo container,
+			XmlObjectInfo nextComponent) throws Exception {
+		container.getBroadcast(XmlObjectAdd.class).before(container, component);
+		// add model
+		container.addChild(component, nextComponent);
+		// add element
+		{
+			ElementTarget target = getTarget(container, nextComponent);
+			association.add(component, target);
+		}
+		// done
+		container.getBroadcast(XmlObjectAdd.class).after(container, component);
+	}
 
-  /**
-   * Move existing {@link XmlObjectInfo}.
-   */
-  public static void move(XmlObjectInfo component,
-      Association association,
-      XmlObjectInfo container,
-      XmlObjectInfo nextComponent) throws Exception {
-    XmlObjectInfo oldParent = component.getParentXML();
-    container.getBroadcast(XmlObjectMove.class).before(component, oldParent, container);
-    // move model
-    if (oldParent == container) {
-      container.moveChild(component, nextComponent);
-    } else {
-      component.getParent().removeChild(component);
-      container.addChild(component, nextComponent);
-    }
-    // move element
-    if (association != null) {
-      ElementTarget target = getTarget(container, nextComponent);
-      association.move(component, target, oldParent, container);
-    } else {
-      Assert.isTrue(oldParent == container, "Without association only reorder is possible");
-      DocumentElement containerElement = container.getElement();
-      DocumentElement componentElement = getElementInParent(container, component.getElement());
-      int targetIndex = getTargetIndex(containerElement, nextComponent);
-      containerElement.moveChild(componentElement, targetIndex);
-    }
-    // end move operation
-    container.getBroadcast(XmlObjectMove.class).after(component, oldParent, container);
-  }
+	/**
+	 * Move existing {@link XmlObjectInfo}.
+	 */
+	public static void move(XmlObjectInfo component,
+			Association association,
+			XmlObjectInfo container,
+			XmlObjectInfo nextComponent) throws Exception {
+		XmlObjectInfo oldParent = component.getParentXML();
+		container.getBroadcast(XmlObjectMove.class).before(component, oldParent, container);
+		// move model
+		if (oldParent == container) {
+			container.moveChild(component, nextComponent);
+		} else {
+			component.getParent().removeChild(component);
+			container.addChild(component, nextComponent);
+		}
+		// move element
+		if (association != null) {
+			ElementTarget target = getTarget(container, nextComponent);
+			association.move(component, target, oldParent, container);
+		} else {
+			Assert.isTrue(oldParent == container, "Without association only reorder is possible");
+			DocumentElement containerElement = container.getElement();
+			DocumentElement componentElement = getElementInParent(container, component.getElement());
+			int targetIndex = getTargetIndex(containerElement, nextComponent);
+			containerElement.moveChild(componentElement, targetIndex);
+		}
+		// end move operation
+		container.getBroadcast(XmlObjectMove.class).after(component, oldParent, container);
+	}
 
-  /**
-   * @return the {@link ElementTarget} to add new {@link XmlObjectInfo} before given one.
-   */
-  private static ElementTarget getTarget(XmlObjectInfo container, XmlObjectInfo nextComponent) {
-    DocumentElement containerElement = container.getCreationSupport().getElement();
-    int index = getTargetIndex(containerElement, nextComponent);
-    return new ElementTarget(containerElement, index);
-  }
+	/**
+	 * @return the {@link ElementTarget} to add new {@link XmlObjectInfo} before given one.
+	 */
+	private static ElementTarget getTarget(XmlObjectInfo container, XmlObjectInfo nextComponent) {
+		DocumentElement containerElement = container.getCreationSupport().getElement();
+		int index = getTargetIndex(containerElement, nextComponent);
+		return new ElementTarget(containerElement, index);
+	}
 
-  /**
-   * @return the index of <code>component</code> element in <code>container</code> element.
-   */
-  private static int getTargetIndex(DocumentElement containerElement, XmlObjectInfo component) {
-    List<DocumentElement> children = containerElement.getChildren();
-    if (component == null) {
-      return children.size();
-    } else {
-      DocumentElement componentElement = component.getCreationSupport().getElement();
-      componentElement = containerElement.getDirectChild(componentElement);
-      return children.indexOf(componentElement);
-    }
-  }
+	/**
+	 * @return the index of <code>component</code> element in <code>container</code> element.
+	 */
+	private static int getTargetIndex(DocumentElement containerElement, XmlObjectInfo component) {
+		List<DocumentElement> children = containerElement.getChildren();
+		if (component == null) {
+			return children.size();
+		} else {
+			DocumentElement componentElement = component.getCreationSupport().getElement();
+			componentElement = containerElement.getDirectChild(componentElement);
+			return children.indexOf(componentElement);
+		}
+	}
 
-  /**
-   * @return the {@link DocumentElement} which is "element" or its parent and is direct child of
-   *         {@link DocumentElement} of "parent".
-   */
-  public static DocumentElement getElementInParent(XmlObjectInfo parent, DocumentElement element) {
-    DocumentElement parentElement = parent.getCreationSupport().getElement();
-    return parentElement.getDirectChild(element);
-  }
+	/**
+	 * @return the {@link DocumentElement} which is "element" or its parent and is direct child of
+	 *         {@link DocumentElement} of "parent".
+	 */
+	public static DocumentElement getElementInParent(XmlObjectInfo parent, DocumentElement element) {
+		DocumentElement parentElement = parent.getCreationSupport().getElement();
+		return parentElement.getDirectChild(element);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Class
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Asks every {@link TagResolverProvider} to register {@link XmlObjectResolveTag} broadcast.
-   */
-  public static void registerTagResolvers(XmlObjectInfo rootObject) throws Exception {
-    List<TagResolverProvider> providers =
-        ExternalFactoriesHelper.getElementsInstances(
-            TagResolverProvider.class,
-            "org.eclipse.wb.core.xml.tagResolverProviders",
-            "provider");
-    for (TagResolverProvider provider : providers) {
-      provider.register(rootObject);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Class
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Asks every {@link TagResolverProvider} to register {@link XmlObjectResolveTag} broadcast.
+	 */
+	public static void registerTagResolvers(XmlObjectInfo rootObject) throws Exception {
+		List<TagResolverProvider> providers =
+				ExternalFactoriesHelper.getElementsInstances(
+						TagResolverProvider.class,
+						"org.eclipse.wb.core.xml.tagResolverProviders",
+						"provider");
+		for (TagResolverProvider provider : providers) {
+			provider.register(rootObject);
+		}
+	}
 
-  /**
-   * @param object
-   *          some {@link XmlObjectInfo} in hierarchy.
-   * @param clazz
-   *          the {@link Class} to use for tag.
-   * @return the name of tag to use, required namespaces already added to the root
-   *         {@link DocumentElement}.
-   */
-  public static String getTagForClass(XmlObjectInfo object, Class<?> clazz) throws Exception {
-    // prepare namespace and tag
-    String namespace;
-    String tag;
-    {
-      String[] namespaceArray = new String[1];
-      String[] tagArray = new String[1];
-      object.getBroadcast(XmlObjectResolveTag.class).invoke(object, clazz, namespaceArray, tagArray);
-      namespace = namespaceArray[0];
-      tag = tagArray[0];
-      Assert.isTrue2(namespace != null && tag != null, "Can not resolve tag for {0}", clazz);
-    }
-    // prepare full tag
-    if (StringUtils.isEmpty(namespace)) {
-      return tag;
-    } else {
-      return namespace + ":" + tag;
-    }
-  }
+	/**
+	 * @param object
+	 *          some {@link XmlObjectInfo} in hierarchy.
+	 * @param clazz
+	 *          the {@link Class} to use for tag.
+	 * @return the name of tag to use, required namespaces already added to the root
+	 *         {@link DocumentElement}.
+	 */
+	public static String getTagForClass(XmlObjectInfo object, Class<?> clazz) throws Exception {
+		// prepare namespace and tag
+		String namespace;
+		String tag;
+		{
+			String[] namespaceArray = new String[1];
+			String[] tagArray = new String[1];
+			object.getBroadcast(XmlObjectResolveTag.class).invoke(object, clazz, namespaceArray, tagArray);
+			namespace = namespaceArray[0];
+			tag = tagArray[0];
+			Assert.isTrue2(namespace != null && tag != null, "Can not resolve tag for {0}", clazz);
+		}
+		// prepare full tag
+		if (StringUtils.isEmpty(namespace)) {
+			return tag;
+		} else {
+			return namespace + ":" + tag;
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // FlowContainer
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Uses first {@link FlowContainer} which accepts given component for creation.
-   */
-  public static void flowContainerCreate(XmlObjectInfo container,
-      XmlObjectInfo component,
-      XmlObjectInfo nextComponent) throws Exception {
-    List<FlowContainer> flowContainers = new FlowContainerFactory(container, false).get();
-    for (FlowContainer flowContainer : flowContainers) {
-      if (flowContainer.validateComponent(component)) {
-        flowContainer.command_CREATE(component, nextComponent);
-        ExecutionUtils.refresh(container);
-        break;
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// FlowContainer
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Uses first {@link FlowContainer} which accepts given component for creation.
+	 */
+	public static void flowContainerCreate(XmlObjectInfo container,
+			XmlObjectInfo component,
+			XmlObjectInfo nextComponent) throws Exception {
+		List<FlowContainer> flowContainers = new FlowContainerFactory(container, false).get();
+		for (FlowContainer flowContainer : flowContainers) {
+			if (flowContainer.validateComponent(component)) {
+				flowContainer.command_CREATE(component, nextComponent);
+				ExecutionUtils.refresh(container);
+				break;
+			}
+		}
+	}
 
-  /**
-   * Uses first {@link FlowContainer} which accepts given component for move.
-   */
-  public static void flowContainerMove(XmlObjectInfo container,
-      XmlObjectInfo component,
-      XmlObjectInfo nextComponent) throws Exception {
-    List<FlowContainer> flowContainers = new FlowContainerFactory(container, false).get();
-    for (FlowContainer flowContainer : flowContainers) {
-      if (flowContainer.validateComponent(component)) {
-        flowContainer.command_MOVE(component, nextComponent);
-        ExecutionUtils.refresh(container);
-        break;
-      }
-    }
-  }
+	/**
+	 * Uses first {@link FlowContainer} which accepts given component for move.
+	 */
+	public static void flowContainerMove(XmlObjectInfo container,
+			XmlObjectInfo component,
+			XmlObjectInfo nextComponent) throws Exception {
+		List<FlowContainer> flowContainers = new FlowContainerFactory(container, false).get();
+		for (FlowContainer flowContainer : flowContainers) {
+			if (flowContainer.validateComponent(component)) {
+				flowContainer.command_MOVE(component, nextComponent);
+				ExecutionUtils.refresh(container);
+				break;
+			}
+		}
+	}
 }
diff --git a/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/AbstractRelativeLocator.java b/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/AbstractRelativeLocator.java
index 7725feded..047c3cb99 100644
--- a/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/AbstractRelativeLocator.java
+++ b/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/AbstractRelativeLocator.java
@@ -26,79 +26,79 @@
  * @coverage gef.draw2d
  */
 public abstract class AbstractRelativeLocator implements ILocator, IPositionConstants {
-  private final double m_relativeX;
-  private final double m_relativeY;
+	private final double m_relativeX;
+	private final double m_relativeY;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Constructs a {@link AbstractRelativeLocator} with the given offset ratios.
-   */
-  public AbstractRelativeLocator(double relativeX, double relativeY) {
-    m_relativeX = relativeX;
-    m_relativeY = relativeY;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Constructs a {@link AbstractRelativeLocator} with the given offset ratios.
+	 */
+	public AbstractRelativeLocator(double relativeX, double relativeY) {
+		m_relativeX = relativeX;
+		m_relativeY = relativeY;
+	}
 
-  /**
-   * Constructs a {@link AbstractRelativeLocator} with the given relative location. The location is
-   * a constant from {@link IPositionConstants} used as a convenient and readable way to set both
-   * the relativeX and relativeY values.
-   */
-  public AbstractRelativeLocator(int location) {
-    switch (location & NORTH_SOUTH) {
-      case NORTH :
-        m_relativeY = 0;
-        break;
-      case SOUTH :
-        m_relativeY = 1.0;
-        break;
-      default :
-        m_relativeY = 0.5;
-    }
-    //
-    switch (location & EAST_WEST) {
-      case WEST :
-        m_relativeX = 0;
-        break;
-      case EAST :
-        m_relativeX = 1.0;
-        break;
-      default :
-        m_relativeX = 0.5;
-    }
-  }
+	/**
+	 * Constructs a {@link AbstractRelativeLocator} with the given relative location. The location is
+	 * a constant from {@link IPositionConstants} used as a convenient and readable way to set both
+	 * the relativeX and relativeY values.
+	 */
+	public AbstractRelativeLocator(int location) {
+		switch (location & NORTH_SOUTH) {
+		case NORTH :
+			m_relativeY = 0;
+			break;
+		case SOUTH :
+			m_relativeY = 1.0;
+			break;
+		default :
+			m_relativeY = 0.5;
+		}
+		//
+		switch (location & EAST_WEST) {
+		case WEST :
+			m_relativeX = 0;
+			break;
+		case EAST :
+			m_relativeX = 1.0;
+			break;
+		default :
+			m_relativeX = 0.5;
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ILocator
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Relocates the target using the relative offset locations.
-   */
-  @Override
-  public final void relocate(Figure target) {
-    // prepare reference
-    Rectangle reference = getReferenceRectangle();
-    FigureUtils.translateAbsoluteToFigure(target, reference);
-    // prepare target location
-    Dimension targetSize = target.getSize();
-    int x = reference.x + (int) (reference.width * m_relativeX) - (targetSize.width + 1) / 2;
-    int y = reference.y + (int) (reference.height * m_relativeY) - (targetSize.height + 1) / 2;
-    // set target location
-    target.setLocation(x, y);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ILocator
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Relocates the target using the relative offset locations.
+	 */
+	@Override
+	public final void relocate(Figure target) {
+		// prepare reference
+		Rectangle reference = getReferenceRectangle();
+		FigureUtils.translateAbsoluteToFigure(target, reference);
+		// prepare target location
+		Dimension targetSize = target.getSize();
+		int x = reference.x + (int) (reference.width * m_relativeX) - (targetSize.width + 1) / 2;
+		int y = reference.y + (int) (reference.height * m_relativeY) - (targetSize.height + 1) / 2;
+		// set target location
+		target.setLocation(x, y);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AbstractRelativeLocator
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the reference {@link Rectangle} in absolute coordinates.
-   */
-  protected abstract Rectangle getReferenceRectangle();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AbstractRelativeLocator
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the reference {@link Rectangle} in absolute coordinates.
+	 */
+	protected abstract Rectangle getReferenceRectangle();
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/Figure.java b/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/Figure.java
index b4dff64f3..dc74e5ff2 100644
--- a/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/Figure.java
+++ b/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/Figure.java
@@ -45,832 +45,832 @@
  * @coverage gef.draw2d
  */
 public class Figure {
-  private EventTable m_eventTable;
-  private AncestorEventTable m_ancestorEventTable;
-  private Figure m_parent;
-  private final Rectangle m_bounds = new Rectangle();
-  private List<Figure> m_children;
-  private Border m_border;
-  private Color m_background;
-  private Color m_foreground;
-  private Font m_font = Display.getCurrent().getSystemFont();
-  private Cursor m_cursor;
-  private boolean m_opaque;
-  private boolean m_visible = true;
-  private Object m_data;
-  private String m_toolTipText;
-  private ICustomTooltipProvider m_customTooltipProvider;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Events: mouse
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Registers the given listener as a {@link IMouseListener} of this {@link Figure}.
-   */
-  public void addMouseListener(IMouseListener listener) {
-    getEnsureEventTable().addListener(IMouseListener.class, listener);
-  }
-
-  /**
-   * Unregisters the given listener, so that it will no longer receive notification of mouse events.
-   */
-  public void removeMouseListener(IMouseListener listener) {
-    getEnsureEventTable().removeListener(IMouseListener.class, listener);
-  }
-
-  /**
-   * Registers the given listener as a {@link IMouseMoveListener} of this {@link Figure}.
-   */
-  public void addMouseMoveListener(IMouseMoveListener listener) {
-    getEnsureEventTable().addListener(IMouseMoveListener.class, listener);
-  }
-
-  /**
-   * Unregisters the given listener, so that it will no longer receive notification of mouse move
-   * events.
-   */
-  public void removeMouseMoveListener(IMouseMoveListener listener) {
-    getEnsureEventTable().removeListener(IMouseMoveListener.class, listener);
-  }
-
-  /**
-   * Registers the given listener as a {@link IMouseTrackListener} of this {@link Figure}.
-   */
-  public void addMouseTrackListener(IMouseTrackListener listener) {
-    getEnsureEventTable().addListener(IMouseTrackListener.class, listener);
-  }
-
-  /**
-   * Unregisters the given listener, so that it will no longer receive notification of mouse move
-   * events.
-   */
-  public void removeMouseTrackListener(IMouseTrackListener listener) {
-    getEnsureEventTable().removeListener(IMouseTrackListener.class, listener);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Events: ancestor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Registers the given listener as an {@link IAncestorListener} of this {@link Figure}.
-   */
-  public void addAncestorListener(IAncestorListener listener) {
-    if (m_ancestorEventTable == null) {
-      m_ancestorEventTable = new AncestorEventTable(this);
-    }
-    //
-    m_ancestorEventTable.addAncestorListener(listener);
-  }
-
-  /**
-   * Unregisters the given listener, so that it will no longer receive notification of ancestor
-   * events.
-   */
-  public void removeAncestorListener(IAncestorListener listener) {
-    if (m_ancestorEventTable != null) {
-      m_ancestorEventTable.removeAncestorListener(listener);
-      //
-      if (m_ancestorEventTable.isEmpty()) {
-        m_ancestorEventTable.unhookFigure();
-        m_ancestorEventTable = null;
-      }
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Events: figure
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Registers the given listener as a {@link IFigureListener} of this {@link Figure}.
-   */
-  public void addFigureListener(IFigureListener listener) {
-    getEnsureEventTable().addListener(IFigureListener.class, listener);
-  }
-
-  /**
-   * Unregisters the given listener, so that it will no longer receive notification of
-   * {@link Figure} events.
-   */
-  public void removeFigureListener(IFigureListener listener) {
-    getEnsureEventTable().removeListener(IFigureListener.class, listener);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Events support
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Return all registers listeners for given class or <code>null</code>.
-   */
-  public <T extends Object> List<T> getListeners(Class<T> listenerClass) {
-    return m_eventTable == null ? null : m_eventTable.getListeners(listenerClass);
-  }
-
-  /**
-   * Access to <code>{@link EventTable}</code> use lazy creation mechanism.
-   */
-  private EventTable getEnsureEventTable() {
-    if (m_eventTable == null) {
-      m_eventTable = new EventTable();
-    }
-    return m_eventTable;
-  }
-
-  /**
-   * Notifies any {@link IFigureListener IFigureListeners} listening to this {@link Figure} that it
-   * has moved.
-   */
-  private void fireMoved() {
-    List<IFigureListener> listeners = getListeners(IFigureListener.class);
-    if (listeners != null) {
-      for (IFigureListener figureListener : listeners) {
-        figureListener.figureMoved(this);
-      }
-    }
-  }
-
-  /**
-   * Notifies any {@link IFigureListener IFigureListeners} listening to this {@link Figure} that it
-   * has set new parent.
-   */
-  private void fireReparent(Figure oldParent, Figure newParent) {
-    List<IFigureListener> listeners = getListeners(IFigureListener.class);
-    if (listeners != null) {
-      for (IFigureListener figureListener : listeners) {
-        figureListener.figureReparent(this, oldParent, newParent);
-      }
-    }
-  }
-
-  /**
-   * Called after the receiver's parent has been set and it has been added to its parent.
-   */
-  protected void addNotify() {
-    for (Figure childFigure : getChildren()) {
-      childFigure.addNotify();
-    }
-  }
-
-  /**
-   * Called prior to this figure's removal from its parent.
-   */
-  protected void removeNotify() {
-    for (Figure childFigure : getChildren()) {
-      childFigure.removeNotify();
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Visiting
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Visits this {@link Figure} and its children using given {@link FigureVisitor}.
-   */
-  public final void accept(FigureVisitor visitor, boolean forward) {
-    if (visitor.visit(this)) {
-      List<Figure> children = getChildren();
-      int size = children.size();
-      //
-      if (forward) {
-        for (int i = 0; i < size; i++) {
-          Figure childFigure = children.get(i);
-          childFigure.accept(visitor, forward);
-        }
-      } else {
-        for (int i = size - 1; i >= 0; i--) {
-          Figure childFigure = children.get(i);
-          childFigure.accept(visitor, forward);
-        }
-      }
-      visitor.endVisit(this);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parent/Children
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds the given Figure as a child of this Figure.
-   */
-  public void add(Figure childFigure) {
-    add(childFigure, null, -1);
-  }
-
-  /**
-   * Adds the given Figure as a child of this Figure at the given index.
-   */
-  public void add(Figure childFigure, int index) {
-    add(childFigure, null, index);
-  }
-
-  /**
-   * Adds the given Figure as a child of this Figure with the given bounds.
-   */
-  public void add(Figure childFigure, Rectangle bounds) {
-    add(childFigure, bounds, -1);
-  }
-
-  /**
-   * Adds the child Figure using the specified index and bounds.
-   */
-  public void add(Figure childFigure, Rectangle bounds, int index) {
-    // check figure parent
-    if (childFigure.getParent() != null) {
-      throw new IllegalArgumentException("Figure.add(...) Figure already added to parent");
-    }
-    // check figure
-    for (Figure f = this; f != null; f = f.getParent()) {
-      if (childFigure == f) {
-        throw new IllegalArgumentException("IWAG0002E Figure.add(...) Cycle created in figure heirarchy");
-      }
-    }
-    // check container
-    if (m_children == null) {
-      m_children = Lists.newArrayList();
-    }
-    // check index
-    if (index < -1 || index > m_children.size()) {
-      throw new IndexOutOfBoundsException("IWAG0001E Figure.add(...) invalid index");
-    }
-    // add to child list
-    if (index == -1) {
-      m_children.add(childFigure);
-    } else {
-      m_children.add(index, childFigure);
-    }
-    // set parent
-    childFigure.setParent(this);
-    // notify child of change
-    childFigure.addNotify();
-    // set bounds
-    if (bounds != null) {
-      childFigure.setBounds(bounds);
-    }
-    // notify of change
-    resetState(childFigure);
-  }
-
-  /**
-   * @return the {@link List} of children {@link Figure}'s.
-   */
-  public List<Figure> getChildren() {
-    return m_children == null ? Collections.<Figure>emptyList() : m_children;
-  }
-
-  /**
-   * Removes the given child Figure from this Figure's hierarchy.
-   */
-  public void remove(Figure childFigure) {
-    // check child
-    if (m_children == null || m_children.isEmpty()) {
-      throw new IllegalArgumentException("This parent is empty");
-    }
-    if (childFigure.getParent() != this || !m_children.contains(childFigure)) {
-      throw new IllegalArgumentException("IWAG0003E Figure is not a child of this parent");
-    }
-    // notify child of change
-    childFigure.removeNotify();
-    // remove child
-    m_children.remove(childFigure);
-    childFigure.setParent(null);
-    // notify of change
-    resetState(childFigure);
-  }
-
-  /**
-   * Removes all children from this Figure.
-   */
-  public void removeAll() {
-    // remove all children
-    for (Figure childFigure : getChildren()) {
-      childFigure.removeNotify();
-      childFigure.setParent(null);
-    }
-    // notify of change
-    if (m_children != null && !m_children.isEmpty()) {
-      resetState();
-    }
-    // reset container
-    m_children = null;
-  }
-
-  /**
-   * @return the {@link FigureCanvas} that contains this {@link Figure}.
-   * @noreference @nooverride
-   */
-  public FigureCanvas getFigureCanvas() {
-    return m_parent.getFigureCanvas();
-  }
-
-  /**
-   * Returns the Figure that is the current parent of this Figure or <code>null</code> if there is
-   * no parent.
-   */
-  public Figure getParent() {
-    return m_parent;
-  }
-
-  /**
-   * Sets this Figure's parent.
-   */
-  public void setParent(Figure parent) {
-    Figure oldParent = m_parent;
-    m_parent = parent;
-    // send reparent event
-    fireReparent(oldParent, m_parent);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Figure
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Updates the cursor.
-   */
-  protected void updateCursor() {
-    Figure parent = getParent();
-    if (parent != null && isVisible()) {
-      parent.updateCursor();
-    }
-  }
-
-  /**
-   * If the argument is <code>true</code>, causes the receiver to have all mouse events delivered to
-   * it until the method is called with <code>false</code> as the argument.
-   */
-  protected final void setCapture(boolean capture) {
-    if (capture) {
-      setCapture(this);
-    } else {
-      setCapture(null);
-    }
-  }
-
-  /**
-   * Sets capture to the given figure.
-   *
-   * @noreference @nooverride
-   */
-  public void setCapture(Figure figure) {
-    Figure parent = getParent();
-    if (parent != null) {
-      parent.setCapture(figure);
-    }
-  }
-
-  /**
-   * Request of change bounds and repaint this Figure. Use when bounds change is indirectly (change
-   * visible, font, etc.).
-   */
-  public final void resetState() {
-    resetState(getBounds());
-  }
-
-  /**
-   * Request of change bounds and repaints the rectangular area within this Figure. Use into
-   * <code>setBounds()</code> where <code>area</code> is union of <i>old</i> and <i>new</i> bounds.
-   */
-  public final void resetState(Rectangle area) {
-    if (isVisible()) {
-      repaint(true, area.x, area.y, area.width, area.height);
-    }
-  }
-
-  /**
-   * Request of change bounds and repaints the rectangular area within this Figure. Rectangular area
-   * <code>childFigure</code>'s bounds. Use into {@link #add(Figure, Rectangle, int)} and
-   * {@link #remove(Figure)}.
-   */
-  protected final void resetState(Figure childFigure) {
-    if (isVisible() && childFigure.isVisible()) {
-      Rectangle bounds = getBounds();
-      Insets insets = getInsets();
-      Rectangle childBounds = childFigure.getBounds();
-      repaint(
-          true,
-          bounds.x + insets.left + childBounds.x,
-          bounds.y + insets.top + childBounds.y,
-          childBounds.width,
-          childBounds.height);
-    }
-  }
-
-  /**
-   * Repaints this Figure.
-   */
-  public final void repaint() {
-    if (isVisible()) {
-      Rectangle bounds = getBounds();
-      repaint(false, bounds.x, bounds.y, bounds.width, bounds.height);
-    }
-  }
-
-  /**
-   * Repaints the rectangular area within this Figure whose upper-left corner is located at the
-   * point <code>(x,y)</code> and whose width and height are <code>w</code> and <code>h</code>,
-   * respectively. If parameter <code>reset</code> is <code>true</code> then request of change
-   * bounds and reconfigure scrolling.
-   */
-  protected void repaint(boolean reset, int x, int y, int width, int height) {
-    Figure parent = getParent();
-    if (parent != null) {
-      Rectangle bounds = parent.getBounds();
-      Insets insets = parent.getInsets();
-      parent.repaint(reset, bounds.x + insets.left + x, bounds.y + insets.top + y, width, height);
-    }
-  }
-
-  /**
-   * Paints this Figure and its children.
-   *
-   * @noreference @nooverride
-   */
-  public final void paint(Graphics graphics) {
-    // set figure state
-    if (m_background != null) {
-      graphics.setBackgroundColor(m_background);
-    }
-    if (m_foreground != null) {
-      graphics.setForegroundColor(m_foreground);
-    }
-    if (m_font != null) {
-      graphics.setFont(m_font);
-    }
-    graphics.pushState();
-    //
-    try {
-      // paint figure
-      paintFigure(graphics);
-      // paint all children
-      paintChildren(graphics);
-      // paint border
-      paintBorder(graphics);
-    } finally {
-      graphics.popState();
-    }
-  }
-
-  private void paintFigure(Graphics graphics) {
-    // fill all figure before any painting clientArea, clilds, and border.
-    if (m_opaque) {
-      Rectangle bounds = getBounds();
-      graphics.fillRectangle(0, 0, bounds.width, bounds.height);
-    }
-    //
-    Insets insets = getInsets();
-    graphics.translate(insets.left, insets.top);
-    paintClientArea(graphics);
-    graphics.restoreState();
-  }
-
-  private void paintChildren(Graphics graphics) {
-    List<Figure> children = getChildren();
-    if (children.isEmpty()) {
-      return;
-    }
-    // set children state
-    Insets insets = getInsets();
-    graphics.translate(insets.left, insets.top);
-    graphics.pushState();
-    // paint all
-    for (Figure childFigure : children) {
-      if (childFigure.isVisible() && childFigure.intersects(graphics.getClip())) {
-        Rectangle childBounds = childFigure.getBounds();
-        graphics.clipRect(childBounds);
-        graphics.translate(childBounds.x, childBounds.y);
-        childFigure.paint(graphics);
-        graphics.restoreState();
-      }
-    }
-    // reset state
-    graphics.popState();
-    graphics.restoreState();
-  }
-
-  /**
-   * Paints this Figure's primary representation.
-   */
-  protected void paintClientArea(Graphics graphics) {
-  }
-
-  /**
-   * Paints the border associated with this Figure, if one exists.
-   */
-  protected void paintBorder(Graphics graphics) {
-    if (m_border != null) {
-      m_border.paint(this, graphics);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Bounds
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Returns the current location.
-   */
-  public Point getLocation() {
-    return m_bounds.getLocation();
-  }
-
-  /**
-   * Returns the current size.
-   */
-  public Dimension getSize() {
-    return m_bounds.getSize();
-  }
-
-  /**
-   * Returns the smallest rectangle completely enclosing the figure. Returns Reactangle by
-   * reference. DO NOT Modify returned value.
-   */
-  public Rectangle getBounds() {
-    return m_bounds;
-  }
-
-  /**
-   * Sets the location of this Figure.
-   */
-  public void setLocation(int x, int y) {
-    if (m_bounds.x != x || m_bounds.y != y) {
-      setBounds(new Rectangle(getBounds()).setLocation(x, y));
-    }
-  }
-
-  /**
-   * Sets the location of this Figure.
-   */
-  public void setLocation(Point location) {
-    setLocation(location.x, location.y);
-  }
-
-  /**
-   * Sets this Figure's size.
-   */
-  public void setSize(int width, int height) {
-    if (m_bounds.width != width || m_bounds.height != height) {
-      setBounds(new Rectangle(getBounds()).setSize(width, height));
-    }
-  }
-
-  /**
-   * Sets this Figure's size.
-   */
-  public void setSize(Dimension size) {
-    setSize(size.width, size.height);
-  }
-
-  /**
-   * Sets the bounds of this Figure to the Rectangle <i>rect</i>.
-   */
-  public void setBounds(Rectangle bounds) {
-    if (!m_bounds.equals(bounds)) {
-      // calc repaint rectangle
-      Rectangle dirtyArea = m_bounds.getUnion(bounds);
-      // change bounds
-      m_bounds.setBounds(bounds);
-      // send move event
-      fireMoved();
-      // reset state
-      resetState(dirtyArea);
-    }
-  }
-
-  /**
-   * Returns the border's Insets if the border is set. Otherwise returns NO_INSETS, an instance of
-   * Insets with all 0s. Returns Insets by reference. DO NOT Modify returned value.
-   */
-  public Insets getInsets() {
-    if (m_border == null) {
-      return IFigure.NO_INSETS;
-    }
-    return m_border.getInsets();
-  }
-
-  /**
-   * Returns the rectangular area within this Figure's bounds in which children will be placed and
-   * the painting of children will be clipped.
-   */
-  public Rectangle getClientArea() {
-    return getClientArea(new Rectangle());
-  }
-
-  /**
-   * Copies the client area into the specified {@link Rectangle}, and returns that rectangle for
-   * convenience.
-   */
-  public Rectangle getClientArea(Rectangle rectangle) {
-    rectangle.setBounds(getBounds());
-    rectangle.crop(getInsets());
-    rectangle.setLocation(0, 0);
-    return rectangle;
-  }
-
-  /**
-   * Returns <code>true</code> if this Figure's bounds intersect with the given Rectangle. Figure is
-   * asked so that non-rectangular Figures can reduce the frequency of paints.
-   */
-  public boolean intersects(Rectangle rectangle) {
-    return getBounds().intersects(rectangle);
-  }
-
-  /**
-   * Returns <code>true</code> if the {@link Point} <code>p</code> is contained within this
-   * {@link Figure}'s bounds.
-   */
-  public boolean containsPoint(Point point) {
-    return containsPoint(point.x, point.y);
-  }
-
-  /**
-   * Returns <code>true</code> if the point <code>(x, y)</code> is contained within this
-   * {@link Figure}'s bounds.
-   */
-  public boolean containsPoint(int x, int y) {
-    return getBounds().contains(x, y);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Properties
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Get user define data.
-   */
-  public Object getData() {
-    return m_data;
-  }
-
-  /**
-   * Set user define data.
-   */
-  public void setData(Object data) {
-    m_data = data;
-  }
-
-  /**
-   * Returns the current border by reference.
-   */
-  public Border getBorder() {
-    return m_border;
-  }
-
-  /**
-   * Sets the border.
-   */
-  public void setBorder(Border border) {
-    if (m_border != border) {
-      m_border = border;
-      resetState();
-    }
-  }
-
-  /**
-   * Returns the background Color of this Figure.
-   */
-  public Color getBackground() {
-    return m_background;
-  }
-
-  /**
-   * Sets the background color.
-   */
-  public void setBackground(Color background) {
-    if (m_background != background) {
-      m_background = background;
-      repaint();
-    }
-  }
-
-  /**
-   * Returns the local foreground Color of this Figure.
-   */
-  public Color getForeground() {
-    return m_foreground;
-  }
-
-  /**
-   * Sets the foreground color.
-   */
-  public void setForeground(Color foreground) {
-    if (m_foreground != foreground) {
-      m_foreground = foreground;
-      repaint();
-    }
-  }
-
-  /**
-   * Returns the current Font by reference.
-   */
-  public Font getFont() {
-    return m_font;
-  }
-
-  /**
-   * Sets the font.
-   */
-  public void setFont(Font font) {
-    if (m_font != font) {
-      m_font = font;
-      resetState();
-    }
-  }
-
-  /**
-   * @return The Cursor used when the mouse is over this Figure
-   */
-  public Cursor getCursor() {
-    return m_cursor;
-  }
-
-  /**
-   * Sets the cursor.
-   */
-  public void setCursor(Cursor cursor) {
-    if (m_cursor != cursor) {
-      m_cursor = cursor;
-      updateCursor();
-    }
-  }
-
-  /**
-   * Returns <code>true</code> if this Figure is opaque.
-   */
-  public boolean isOpaque() {
-    return m_opaque;
-  }
-
-  /**
-   * Sets this Figure to be opaque if <i>opaque</i> is <code>true</code> and transparent if
-   * <i>opaque</i> is <code>false</code>.
-   */
-  public void setOpaque(boolean opaque) {
-    if (m_opaque != opaque) {
-      m_opaque = opaque;
-      repaint();
-    }
-  }
-
-  /**
-   * @return <code>true</code> if the figure's visibility flag is set
-   */
-  public boolean isVisible() {
-    return m_visible;
-  }
-
-  /**
-   * Sets this Figure's visibility.
-   */
-  public void setVisible(boolean visible) {
-    if (m_visible != visible) {
-      resetState();
-      m_visible = visible;
-      resetState();
-    }
-  }
-
-  /**
-   * Returns the receiver's tool tip text, or <code>null</code> if it has not been set.
-   */
-  public String getToolTipText() {
-    return m_toolTipText;
-  }
-
-  /**
-   * Sets the receiver's tool tip text to the argument, which may be <code>null</code> indicating
-   * that no tool tip text should be shown.
-   */
-  public void setToolTipText(String toolTipText) {
-    m_toolTipText = toolTipText;
-  }
-
-  /**
-   * @return custom tool tip provider {@link ICustomTooltipProvider}, or <code>null</code> if it has
-   *         not been set.
-   */
-  public ICustomTooltipProvider getCustomTooltipProvider() {
-    return m_customTooltipProvider;
-  }
-
-  /**
-   * Sets the custom tool tip provider {@link ICustomTooltipProvider} to the argument, which may be
-   * <code>null</code> indicating that no tool tip text should be shown.
-   */
-  public void setCustomTooltipProvider(ICustomTooltipProvider provider) {
-    m_customTooltipProvider = provider;
-  }
+	private EventTable m_eventTable;
+	private AncestorEventTable m_ancestorEventTable;
+	private Figure m_parent;
+	private final Rectangle m_bounds = new Rectangle();
+	private List<Figure> m_children;
+	private Border m_border;
+	private Color m_background;
+	private Color m_foreground;
+	private Font m_font = Display.getCurrent().getSystemFont();
+	private Cursor m_cursor;
+	private boolean m_opaque;
+	private boolean m_visible = true;
+	private Object m_data;
+	private String m_toolTipText;
+	private ICustomTooltipProvider m_customTooltipProvider;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Events: mouse
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Registers the given listener as a {@link IMouseListener} of this {@link Figure}.
+	 */
+	public void addMouseListener(IMouseListener listener) {
+		getEnsureEventTable().addListener(IMouseListener.class, listener);
+	}
+
+	/**
+	 * Unregisters the given listener, so that it will no longer receive notification of mouse events.
+	 */
+	public void removeMouseListener(IMouseListener listener) {
+		getEnsureEventTable().removeListener(IMouseListener.class, listener);
+	}
+
+	/**
+	 * Registers the given listener as a {@link IMouseMoveListener} of this {@link Figure}.
+	 */
+	public void addMouseMoveListener(IMouseMoveListener listener) {
+		getEnsureEventTable().addListener(IMouseMoveListener.class, listener);
+	}
+
+	/**
+	 * Unregisters the given listener, so that it will no longer receive notification of mouse move
+	 * events.
+	 */
+	public void removeMouseMoveListener(IMouseMoveListener listener) {
+		getEnsureEventTable().removeListener(IMouseMoveListener.class, listener);
+	}
+
+	/**
+	 * Registers the given listener as a {@link IMouseTrackListener} of this {@link Figure}.
+	 */
+	public void addMouseTrackListener(IMouseTrackListener listener) {
+		getEnsureEventTable().addListener(IMouseTrackListener.class, listener);
+	}
+
+	/**
+	 * Unregisters the given listener, so that it will no longer receive notification of mouse move
+	 * events.
+	 */
+	public void removeMouseTrackListener(IMouseTrackListener listener) {
+		getEnsureEventTable().removeListener(IMouseTrackListener.class, listener);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Events: ancestor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Registers the given listener as an {@link IAncestorListener} of this {@link Figure}.
+	 */
+	public void addAncestorListener(IAncestorListener listener) {
+		if (m_ancestorEventTable == null) {
+			m_ancestorEventTable = new AncestorEventTable(this);
+		}
+		//
+		m_ancestorEventTable.addAncestorListener(listener);
+	}
+
+	/**
+	 * Unregisters the given listener, so that it will no longer receive notification of ancestor
+	 * events.
+	 */
+	public void removeAncestorListener(IAncestorListener listener) {
+		if (m_ancestorEventTable != null) {
+			m_ancestorEventTable.removeAncestorListener(listener);
+			//
+			if (m_ancestorEventTable.isEmpty()) {
+				m_ancestorEventTable.unhookFigure();
+				m_ancestorEventTable = null;
+			}
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Events: figure
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Registers the given listener as a {@link IFigureListener} of this {@link Figure}.
+	 */
+	public void addFigureListener(IFigureListener listener) {
+		getEnsureEventTable().addListener(IFigureListener.class, listener);
+	}
+
+	/**
+	 * Unregisters the given listener, so that it will no longer receive notification of
+	 * {@link Figure} events.
+	 */
+	public void removeFigureListener(IFigureListener listener) {
+		getEnsureEventTable().removeListener(IFigureListener.class, listener);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Events support
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Return all registers listeners for given class or <code>null</code>.
+	 */
+	public <T extends Object> List<T> getListeners(Class<T> listenerClass) {
+		return m_eventTable == null ? null : m_eventTable.getListeners(listenerClass);
+	}
+
+	/**
+	 * Access to <code>{@link EventTable}</code> use lazy creation mechanism.
+	 */
+	private EventTable getEnsureEventTable() {
+		if (m_eventTable == null) {
+			m_eventTable = new EventTable();
+		}
+		return m_eventTable;
+	}
+
+	/**
+	 * Notifies any {@link IFigureListener IFigureListeners} listening to this {@link Figure} that it
+	 * has moved.
+	 */
+	private void fireMoved() {
+		List<IFigureListener> listeners = getListeners(IFigureListener.class);
+		if (listeners != null) {
+			for (IFigureListener figureListener : listeners) {
+				figureListener.figureMoved(this);
+			}
+		}
+	}
+
+	/**
+	 * Notifies any {@link IFigureListener IFigureListeners} listening to this {@link Figure} that it
+	 * has set new parent.
+	 */
+	private void fireReparent(Figure oldParent, Figure newParent) {
+		List<IFigureListener> listeners = getListeners(IFigureListener.class);
+		if (listeners != null) {
+			for (IFigureListener figureListener : listeners) {
+				figureListener.figureReparent(this, oldParent, newParent);
+			}
+		}
+	}
+
+	/**
+	 * Called after the receiver's parent has been set and it has been added to its parent.
+	 */
+	protected void addNotify() {
+		for (Figure childFigure : getChildren()) {
+			childFigure.addNotify();
+		}
+	}
+
+	/**
+	 * Called prior to this figure's removal from its parent.
+	 */
+	protected void removeNotify() {
+		for (Figure childFigure : getChildren()) {
+			childFigure.removeNotify();
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Visiting
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Visits this {@link Figure} and its children using given {@link FigureVisitor}.
+	 */
+	public final void accept(FigureVisitor visitor, boolean forward) {
+		if (visitor.visit(this)) {
+			List<Figure> children = getChildren();
+			int size = children.size();
+			//
+			if (forward) {
+				for (int i = 0; i < size; i++) {
+					Figure childFigure = children.get(i);
+					childFigure.accept(visitor, forward);
+				}
+			} else {
+				for (int i = size - 1; i >= 0; i--) {
+					Figure childFigure = children.get(i);
+					childFigure.accept(visitor, forward);
+				}
+			}
+			visitor.endVisit(this);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parent/Children
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds the given Figure as a child of this Figure.
+	 */
+	public void add(Figure childFigure) {
+		add(childFigure, null, -1);
+	}
+
+	/**
+	 * Adds the given Figure as a child of this Figure at the given index.
+	 */
+	public void add(Figure childFigure, int index) {
+		add(childFigure, null, index);
+	}
+
+	/**
+	 * Adds the given Figure as a child of this Figure with the given bounds.
+	 */
+	public void add(Figure childFigure, Rectangle bounds) {
+		add(childFigure, bounds, -1);
+	}
+
+	/**
+	 * Adds the child Figure using the specified index and bounds.
+	 */
+	public void add(Figure childFigure, Rectangle bounds, int index) {
+		// check figure parent
+		if (childFigure.getParent() != null) {
+			throw new IllegalArgumentException("Figure.add(...) Figure already added to parent");
+		}
+		// check figure
+		for (Figure f = this; f != null; f = f.getParent()) {
+			if (childFigure == f) {
+				throw new IllegalArgumentException("IWAG0002E Figure.add(...) Cycle created in figure heirarchy");
+			}
+		}
+		// check container
+		if (m_children == null) {
+			m_children = Lists.newArrayList();
+		}
+		// check index
+		if (index < -1 || index > m_children.size()) {
+			throw new IndexOutOfBoundsException("IWAG0001E Figure.add(...) invalid index");
+		}
+		// add to child list
+		if (index == -1) {
+			m_children.add(childFigure);
+		} else {
+			m_children.add(index, childFigure);
+		}
+		// set parent
+		childFigure.setParent(this);
+		// notify child of change
+		childFigure.addNotify();
+		// set bounds
+		if (bounds != null) {
+			childFigure.setBounds(bounds);
+		}
+		// notify of change
+		resetState(childFigure);
+	}
+
+	/**
+	 * @return the {@link List} of children {@link Figure}'s.
+	 */
+	public List<Figure> getChildren() {
+		return m_children == null ? Collections.<Figure>emptyList() : m_children;
+	}
+
+	/**
+	 * Removes the given child Figure from this Figure's hierarchy.
+	 */
+	public void remove(Figure childFigure) {
+		// check child
+		if (m_children == null || m_children.isEmpty()) {
+			throw new IllegalArgumentException("This parent is empty");
+		}
+		if (childFigure.getParent() != this || !m_children.contains(childFigure)) {
+			throw new IllegalArgumentException("IWAG0003E Figure is not a child of this parent");
+		}
+		// notify child of change
+		childFigure.removeNotify();
+		// remove child
+		m_children.remove(childFigure);
+		childFigure.setParent(null);
+		// notify of change
+		resetState(childFigure);
+	}
+
+	/**
+	 * Removes all children from this Figure.
+	 */
+	public void removeAll() {
+		// remove all children
+		for (Figure childFigure : getChildren()) {
+			childFigure.removeNotify();
+			childFigure.setParent(null);
+		}
+		// notify of change
+		if (m_children != null && !m_children.isEmpty()) {
+			resetState();
+		}
+		// reset container
+		m_children = null;
+	}
+
+	/**
+	 * @return the {@link FigureCanvas} that contains this {@link Figure}.
+	 * @noreference @nooverride
+	 */
+	public FigureCanvas getFigureCanvas() {
+		return m_parent.getFigureCanvas();
+	}
+
+	/**
+	 * Returns the Figure that is the current parent of this Figure or <code>null</code> if there is
+	 * no parent.
+	 */
+	public Figure getParent() {
+		return m_parent;
+	}
+
+	/**
+	 * Sets this Figure's parent.
+	 */
+	public void setParent(Figure parent) {
+		Figure oldParent = m_parent;
+		m_parent = parent;
+		// send reparent event
+		fireReparent(oldParent, m_parent);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Figure
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Updates the cursor.
+	 */
+	protected void updateCursor() {
+		Figure parent = getParent();
+		if (parent != null && isVisible()) {
+			parent.updateCursor();
+		}
+	}
+
+	/**
+	 * If the argument is <code>true</code>, causes the receiver to have all mouse events delivered to
+	 * it until the method is called with <code>false</code> as the argument.
+	 */
+	protected final void setCapture(boolean capture) {
+		if (capture) {
+			setCapture(this);
+		} else {
+			setCapture(null);
+		}
+	}
+
+	/**
+	 * Sets capture to the given figure.
+	 *
+	 * @noreference @nooverride
+	 */
+	public void setCapture(Figure figure) {
+		Figure parent = getParent();
+		if (parent != null) {
+			parent.setCapture(figure);
+		}
+	}
+
+	/**
+	 * Request of change bounds and repaint this Figure. Use when bounds change is indirectly (change
+	 * visible, font, etc.).
+	 */
+	public final void resetState() {
+		resetState(getBounds());
+	}
+
+	/**
+	 * Request of change bounds and repaints the rectangular area within this Figure. Use into
+	 * <code>setBounds()</code> where <code>area</code> is union of <i>old</i> and <i>new</i> bounds.
+	 */
+	public final void resetState(Rectangle area) {
+		if (isVisible()) {
+			repaint(true, area.x, area.y, area.width, area.height);
+		}
+	}
+
+	/**
+	 * Request of change bounds and repaints the rectangular area within this Figure. Rectangular area
+	 * <code>childFigure</code>'s bounds. Use into {@link #add(Figure, Rectangle, int)} and
+	 * {@link #remove(Figure)}.
+	 */
+	protected final void resetState(Figure childFigure) {
+		if (isVisible() && childFigure.isVisible()) {
+			Rectangle bounds = getBounds();
+			Insets insets = getInsets();
+			Rectangle childBounds = childFigure.getBounds();
+			repaint(
+					true,
+					bounds.x + insets.left + childBounds.x,
+					bounds.y + insets.top + childBounds.y,
+					childBounds.width,
+					childBounds.height);
+		}
+	}
+
+	/**
+	 * Repaints this Figure.
+	 */
+	public final void repaint() {
+		if (isVisible()) {
+			Rectangle bounds = getBounds();
+			repaint(false, bounds.x, bounds.y, bounds.width, bounds.height);
+		}
+	}
+
+	/**
+	 * Repaints the rectangular area within this Figure whose upper-left corner is located at the
+	 * point <code>(x,y)</code> and whose width and height are <code>w</code> and <code>h</code>,
+	 * respectively. If parameter <code>reset</code> is <code>true</code> then request of change
+	 * bounds and reconfigure scrolling.
+	 */
+	protected void repaint(boolean reset, int x, int y, int width, int height) {
+		Figure parent = getParent();
+		if (parent != null) {
+			Rectangle bounds = parent.getBounds();
+			Insets insets = parent.getInsets();
+			parent.repaint(reset, bounds.x + insets.left + x, bounds.y + insets.top + y, width, height);
+		}
+	}
+
+	/**
+	 * Paints this Figure and its children.
+	 *
+	 * @noreference @nooverride
+	 */
+	public final void paint(Graphics graphics) {
+		// set figure state
+		if (m_background != null) {
+			graphics.setBackgroundColor(m_background);
+		}
+		if (m_foreground != null) {
+			graphics.setForegroundColor(m_foreground);
+		}
+		if (m_font != null) {
+			graphics.setFont(m_font);
+		}
+		graphics.pushState();
+		//
+		try {
+			// paint figure
+			paintFigure(graphics);
+			// paint all children
+			paintChildren(graphics);
+			// paint border
+			paintBorder(graphics);
+		} finally {
+			graphics.popState();
+		}
+	}
+
+	private void paintFigure(Graphics graphics) {
+		// fill all figure before any painting clientArea, clilds, and border.
+		if (m_opaque) {
+			Rectangle bounds = getBounds();
+			graphics.fillRectangle(0, 0, bounds.width, bounds.height);
+		}
+		//
+		Insets insets = getInsets();
+		graphics.translate(insets.left, insets.top);
+		paintClientArea(graphics);
+		graphics.restoreState();
+	}
+
+	private void paintChildren(Graphics graphics) {
+		List<Figure> children = getChildren();
+		if (children.isEmpty()) {
+			return;
+		}
+		// set children state
+		Insets insets = getInsets();
+		graphics.translate(insets.left, insets.top);
+		graphics.pushState();
+		// paint all
+		for (Figure childFigure : children) {
+			if (childFigure.isVisible() && childFigure.intersects(graphics.getClip())) {
+				Rectangle childBounds = childFigure.getBounds();
+				graphics.clipRect(childBounds);
+				graphics.translate(childBounds.x, childBounds.y);
+				childFigure.paint(graphics);
+				graphics.restoreState();
+			}
+		}
+		// reset state
+		graphics.popState();
+		graphics.restoreState();
+	}
+
+	/**
+	 * Paints this Figure's primary representation.
+	 */
+	protected void paintClientArea(Graphics graphics) {
+	}
+
+	/**
+	 * Paints the border associated with this Figure, if one exists.
+	 */
+	protected void paintBorder(Graphics graphics) {
+		if (m_border != null) {
+			m_border.paint(this, graphics);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Bounds
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Returns the current location.
+	 */
+	public Point getLocation() {
+		return m_bounds.getLocation();
+	}
+
+	/**
+	 * Returns the current size.
+	 */
+	public Dimension getSize() {
+		return m_bounds.getSize();
+	}
+
+	/**
+	 * Returns the smallest rectangle completely enclosing the figure. Returns Reactangle by
+	 * reference. DO NOT Modify returned value.
+	 */
+	public Rectangle getBounds() {
+		return m_bounds;
+	}
+
+	/**
+	 * Sets the location of this Figure.
+	 */
+	public void setLocation(int x, int y) {
+		if (m_bounds.x != x || m_bounds.y != y) {
+			setBounds(new Rectangle(getBounds()).setLocation(x, y));
+		}
+	}
+
+	/**
+	 * Sets the location of this Figure.
+	 */
+	public void setLocation(Point location) {
+		setLocation(location.x, location.y);
+	}
+
+	/**
+	 * Sets this Figure's size.
+	 */
+	public void setSize(int width, int height) {
+		if (m_bounds.width != width || m_bounds.height != height) {
+			setBounds(new Rectangle(getBounds()).setSize(width, height));
+		}
+	}
+
+	/**
+	 * Sets this Figure's size.
+	 */
+	public void setSize(Dimension size) {
+		setSize(size.width, size.height);
+	}
+
+	/**
+	 * Sets the bounds of this Figure to the Rectangle <i>rect</i>.
+	 */
+	public void setBounds(Rectangle bounds) {
+		if (!m_bounds.equals(bounds)) {
+			// calc repaint rectangle
+			Rectangle dirtyArea = m_bounds.getUnion(bounds);
+			// change bounds
+			m_bounds.setBounds(bounds);
+			// send move event
+			fireMoved();
+			// reset state
+			resetState(dirtyArea);
+		}
+	}
+
+	/**
+	 * Returns the border's Insets if the border is set. Otherwise returns NO_INSETS, an instance of
+	 * Insets with all 0s. Returns Insets by reference. DO NOT Modify returned value.
+	 */
+	public Insets getInsets() {
+		if (m_border == null) {
+			return IFigure.NO_INSETS;
+		}
+		return m_border.getInsets();
+	}
+
+	/**
+	 * Returns the rectangular area within this Figure's bounds in which children will be placed and
+	 * the painting of children will be clipped.
+	 */
+	public Rectangle getClientArea() {
+		return getClientArea(new Rectangle());
+	}
+
+	/**
+	 * Copies the client area into the specified {@link Rectangle}, and returns that rectangle for
+	 * convenience.
+	 */
+	public Rectangle getClientArea(Rectangle rectangle) {
+		rectangle.setBounds(getBounds());
+		rectangle.crop(getInsets());
+		rectangle.setLocation(0, 0);
+		return rectangle;
+	}
+
+	/**
+	 * Returns <code>true</code> if this Figure's bounds intersect with the given Rectangle. Figure is
+	 * asked so that non-rectangular Figures can reduce the frequency of paints.
+	 */
+	public boolean intersects(Rectangle rectangle) {
+		return getBounds().intersects(rectangle);
+	}
+
+	/**
+	 * Returns <code>true</code> if the {@link Point} <code>p</code> is contained within this
+	 * {@link Figure}'s bounds.
+	 */
+	public boolean containsPoint(Point point) {
+		return containsPoint(point.x, point.y);
+	}
+
+	/**
+	 * Returns <code>true</code> if the point <code>(x, y)</code> is contained within this
+	 * {@link Figure}'s bounds.
+	 */
+	public boolean containsPoint(int x, int y) {
+		return getBounds().contains(x, y);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Properties
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Get user define data.
+	 */
+	public Object getData() {
+		return m_data;
+	}
+
+	/**
+	 * Set user define data.
+	 */
+	public void setData(Object data) {
+		m_data = data;
+	}
+
+	/**
+	 * Returns the current border by reference.
+	 */
+	public Border getBorder() {
+		return m_border;
+	}
+
+	/**
+	 * Sets the border.
+	 */
+	public void setBorder(Border border) {
+		if (m_border != border) {
+			m_border = border;
+			resetState();
+		}
+	}
+
+	/**
+	 * Returns the background Color of this Figure.
+	 */
+	public Color getBackground() {
+		return m_background;
+	}
+
+	/**
+	 * Sets the background color.
+	 */
+	public void setBackground(Color background) {
+		if (m_background != background) {
+			m_background = background;
+			repaint();
+		}
+	}
+
+	/**
+	 * Returns the local foreground Color of this Figure.
+	 */
+	public Color getForeground() {
+		return m_foreground;
+	}
+
+	/**
+	 * Sets the foreground color.
+	 */
+	public void setForeground(Color foreground) {
+		if (m_foreground != foreground) {
+			m_foreground = foreground;
+			repaint();
+		}
+	}
+
+	/**
+	 * Returns the current Font by reference.
+	 */
+	public Font getFont() {
+		return m_font;
+	}
+
+	/**
+	 * Sets the font.
+	 */
+	public void setFont(Font font) {
+		if (m_font != font) {
+			m_font = font;
+			resetState();
+		}
+	}
+
+	/**
+	 * @return The Cursor used when the mouse is over this Figure
+	 */
+	public Cursor getCursor() {
+		return m_cursor;
+	}
+
+	/**
+	 * Sets the cursor.
+	 */
+	public void setCursor(Cursor cursor) {
+		if (m_cursor != cursor) {
+			m_cursor = cursor;
+			updateCursor();
+		}
+	}
+
+	/**
+	 * Returns <code>true</code> if this Figure is opaque.
+	 */
+	public boolean isOpaque() {
+		return m_opaque;
+	}
+
+	/**
+	 * Sets this Figure to be opaque if <i>opaque</i> is <code>true</code> and transparent if
+	 * <i>opaque</i> is <code>false</code>.
+	 */
+	public void setOpaque(boolean opaque) {
+		if (m_opaque != opaque) {
+			m_opaque = opaque;
+			repaint();
+		}
+	}
+
+	/**
+	 * @return <code>true</code> if the figure's visibility flag is set
+	 */
+	public boolean isVisible() {
+		return m_visible;
+	}
+
+	/**
+	 * Sets this Figure's visibility.
+	 */
+	public void setVisible(boolean visible) {
+		if (m_visible != visible) {
+			resetState();
+			m_visible = visible;
+			resetState();
+		}
+	}
+
+	/**
+	 * Returns the receiver's tool tip text, or <code>null</code> if it has not been set.
+	 */
+	public String getToolTipText() {
+		return m_toolTipText;
+	}
+
+	/**
+	 * Sets the receiver's tool tip text to the argument, which may be <code>null</code> indicating
+	 * that no tool tip text should be shown.
+	 */
+	public void setToolTipText(String toolTipText) {
+		m_toolTipText = toolTipText;
+	}
+
+	/**
+	 * @return custom tool tip provider {@link ICustomTooltipProvider}, or <code>null</code> if it has
+	 *         not been set.
+	 */
+	public ICustomTooltipProvider getCustomTooltipProvider() {
+		return m_customTooltipProvider;
+	}
+
+	/**
+	 * Sets the custom tool tip provider {@link ICustomTooltipProvider} to the argument, which may be
+	 * <code>null</code> indicating that no tool tip text should be shown.
+	 */
+	public void setCustomTooltipProvider(ICustomTooltipProvider provider) {
+		m_customTooltipProvider = provider;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/FigureUtils.java b/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/FigureUtils.java
index 49c6b2b40..7b18ef987 100644
--- a/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/FigureUtils.java
+++ b/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/FigureUtils.java
@@ -28,148 +28,148 @@
  * @coverage gef.draw2d
  */
 public class FigureUtils {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Manipulations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Removes given {@link Figure} from its parent.
-   */
-  public static void removeFigure(Figure figure) {
-    if (figure != null && figure.getParent() != null) {
-      figure.getParent().remove(figure);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Manipulations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Removes given {@link Figure} from its parent.
+	 */
+	public static void removeFigure(Figure figure) {
+		if (figure != null && figure.getParent() != null) {
+			figure.getParent().remove(figure);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Coordinates
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Translates given {@link Translatable} from <code>source</code> {@link Figure} bounds
-   * coordinates to bounds coordinates from <code>target</code> {@link Figure}.
-   */
-  public static final void translateFigureToFigure(Figure source,
-      Figure target,
-      Translatable translatable) {
-    translateFigureToAbsolute(source, translatable);
-    translateAbsoluteToFigure(target, translatable);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Coordinates
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Translates given {@link Translatable} from <code>source</code> {@link Figure} bounds
+	 * coordinates to bounds coordinates from <code>target</code> {@link Figure}.
+	 */
+	public static final void translateFigureToFigure(Figure source,
+			Figure target,
+			Translatable translatable) {
+		translateFigureToAbsolute(source, translatable);
+		translateAbsoluteToFigure(target, translatable);
+	}
 
-  /**
-   * Translates given {@link Translatable} from <code>source</code> {@link Figure} local coordinates
-   * to local coordinates from <code>target</code> {@link Figure}.
-   */
-  public static final void translateFigureToFigure2(Figure source,
-      Figure target,
-      Translatable translatable) {
-    translateFigureToAbsolute2(source, translatable);
-    translateAbsoluteToFigure2(target, translatable);
-  }
+	/**
+	 * Translates given {@link Translatable} from <code>source</code> {@link Figure} local coordinates
+	 * to local coordinates from <code>target</code> {@link Figure}.
+	 */
+	public static final void translateFigureToFigure2(Figure source,
+			Figure target,
+			Translatable translatable) {
+		translateFigureToAbsolute2(source, translatable);
+		translateAbsoluteToFigure2(target, translatable);
+	}
 
-  /**
-   * Translates given {@link Translatable} from this {@link Figure} bounds coordinates to absolute (
-   * {@link RootFigure} relative) coordinates.
-   */
-  public static final void translateFigureToAbsolute(Figure figure, Translatable translatable) {
-    for (Figure parent = figure.getParent(); parent != null; parent = parent.getParent()) {
-      translatable.performTranslate(parent.getInsets());
-      translatable.performTranslate(parent.getLocation());
-    }
-  }
+	/**
+	 * Translates given {@link Translatable} from this {@link Figure} bounds coordinates to absolute (
+	 * {@link RootFigure} relative) coordinates.
+	 */
+	public static final void translateFigureToAbsolute(Figure figure, Translatable translatable) {
+		for (Figure parent = figure.getParent(); parent != null; parent = parent.getParent()) {
+			translatable.performTranslate(parent.getInsets());
+			translatable.performTranslate(parent.getLocation());
+		}
+	}
 
-  /**
-   * Translates given {@link Translatable} from this {@link Figure} local coordinates to absolute (
-   * {@link RootFigure} relative) coordinates.
-   */
-  public static final void translateFigureToAbsolute2(Figure figure, Translatable translatable) {
-    for (; figure != null; figure = figure.getParent()) {
-      translatable.performTranslate(figure.getInsets());
-      translatable.performTranslate(figure.getLocation());
-    }
-  }
+	/**
+	 * Translates given {@link Translatable} from this {@link Figure} local coordinates to absolute (
+	 * {@link RootFigure} relative) coordinates.
+	 */
+	public static final void translateFigureToAbsolute2(Figure figure, Translatable translatable) {
+		for (; figure != null; figure = figure.getParent()) {
+			translatable.performTranslate(figure.getInsets());
+			translatable.performTranslate(figure.getLocation());
+		}
+	}
 
-  /**
-   * Translates given {@link Translatable} from this {@link Figure} local coordinates to absolute (
-   * {@link RootFigure} relative) coordinates.
-   */
-  public static final void translateFigureToCanvas(Figure figure, Translatable translatable) {
-    translateFigureToAbsolute2(figure, translatable);
-    FigureCanvas figureCanvas = figure.getFigureCanvas();
-    translatable.performTranslate(
-        -figureCanvas.getHorizontalScrollModel().getSelection(),
-        -figureCanvas.getVerticalScrollModel().getSelection());
-  }
+	/**
+	 * Translates given {@link Translatable} from this {@link Figure} local coordinates to absolute (
+	 * {@link RootFigure} relative) coordinates.
+	 */
+	public static final void translateFigureToCanvas(Figure figure, Translatable translatable) {
+		translateFigureToAbsolute2(figure, translatable);
+		FigureCanvas figureCanvas = figure.getFigureCanvas();
+		translatable.performTranslate(
+				-figureCanvas.getHorizontalScrollModel().getSelection(),
+				-figureCanvas.getVerticalScrollModel().getSelection());
+	}
 
-  /**
-   * Translates given {@link Translatable} from this absolute ({@link RootFigure} relative)
-   * coordinates to bounds {@link Figure} coordinates.
-   */
-  public static final void translateAbsoluteToFigure(Figure figure, Translatable translatable) {
-    for (Figure parent = figure.getParent(); parent != null; parent = parent.getParent()) {
-      translatable.performTranslate(parent.getLocation().negate());
-      translatable.performTranslate(parent.getInsets().getNegated());
-    }
-  }
+	/**
+	 * Translates given {@link Translatable} from this absolute ({@link RootFigure} relative)
+	 * coordinates to bounds {@link Figure} coordinates.
+	 */
+	public static final void translateAbsoluteToFigure(Figure figure, Translatable translatable) {
+		for (Figure parent = figure.getParent(); parent != null; parent = parent.getParent()) {
+			translatable.performTranslate(parent.getLocation().negate());
+			translatable.performTranslate(parent.getInsets().getNegated());
+		}
+	}
 
-  /**
-   * Translates given {@link Translatable} from this absolute ({@link RootFigure} relative)
-   * coordinates to local {@link Figure} coordinates.
-   */
-  public static final void translateAbsoluteToFigure2(Figure figure, Translatable translatable) {
-    for (; figure != null; figure = figure.getParent()) {
-      translatable.performTranslate(figure.getLocation().negate());
-      translatable.performTranslate(figure.getInsets().getNegated());
-    }
-  }
+	/**
+	 * Translates given {@link Translatable} from this absolute ({@link RootFigure} relative)
+	 * coordinates to local {@link Figure} coordinates.
+	 */
+	public static final void translateAbsoluteToFigure2(Figure figure, Translatable translatable) {
+		for (; figure != null; figure = figure.getParent()) {
+			translatable.performTranslate(figure.getLocation().negate());
+			translatable.performTranslate(figure.getInsets().getNegated());
+		}
+	}
 
-  /**
-   * @return the bounds of given {@link Figure} on screen.
-   */
-  public static Rectangle getScreenBounds(Figure figure) {
-    FigureCanvas figureCanvas = figure.getFigureCanvas();
-    Rectangle bounds = figure.getBounds();
-    translateFigureToCanvas(figure.getParent(), bounds);
-    org.eclipse.swt.graphics.Point location = figureCanvas.toDisplay(bounds.x, bounds.y);
-    return new Rectangle(location.x, location.y, bounds.width, bounds.height);
-  }
+	/**
+	 * @return the bounds of given {@link Figure} on screen.
+	 */
+	public static Rectangle getScreenBounds(Figure figure) {
+		FigureCanvas figureCanvas = figure.getFigureCanvas();
+		Rectangle bounds = figure.getBounds();
+		translateFigureToCanvas(figure.getParent(), bounds);
+		org.eclipse.swt.graphics.Point location = figureCanvas.toDisplay(bounds.x, bounds.y);
+		return new Rectangle(location.x, location.y, bounds.width, bounds.height);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Text Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link Dimension} of text for given {@link Font}.
-   */
-  public static Dimension calculateTextSize(String text, Font font) {
-    GC gc = createGC();
-    try {
-      gc.setFont(font);
-      org.eclipse.swt.graphics.Point size = gc.textExtent(text);
-      return new Dimension(size);
-    } finally {
-      gc.dispose();
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Text Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link Dimension} of text for given {@link Font}.
+	 */
+	public static Dimension calculateTextSize(String text, Font font) {
+		GC gc = createGC();
+		try {
+			gc.setFont(font);
+			org.eclipse.swt.graphics.Point size = gc.textExtent(text);
+			return new Dimension(size);
+		} finally {
+			gc.dispose();
+		}
+	}
 
-  /**
-   * @return the new {@link GC} for active {@link Shell}.
-   */
-  public static GC createGC() {
-    // prepare Display
-    Display display = Display.getCurrent();
-    if (display == null) {
-      return new GC(Display.getDefault());
-    }
-    // prepare Shell
-    Shell shell = display.getActiveShell();
-    if (shell == null) {
-      return new GC(display);
-    }
-    // create GC
-    return new GC(shell);
-  }
+	/**
+	 * @return the new {@link GC} for active {@link Shell}.
+	 */
+	public static GC createGC() {
+		// prepare Display
+		Display display = Display.getCurrent();
+		if (display == null) {
+			return new GC(Display.getDefault());
+		}
+		// prepare Shell
+		Shell shell = display.getActiveShell();
+		if (shell == null) {
+			return new GC(display);
+		}
+		// create GC
+		return new GC(shell);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/Graphics.java b/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/Graphics.java
index 019930e82..6b56bae96 100644
--- a/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/Graphics.java
+++ b/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/Graphics.java
@@ -33,988 +33,988 @@
  * @coverage gef.draw2d
  */
 public class Graphics {
-  public final GC gc;
-  public int m_translateX;
-  public int m_translateY;
-  private final State m_appliedState = new State();
-  private final State m_currentState = new State();
-  private final List<State> m_stack = Lists.newArrayList();
-  private int m_stackPointer = 0;
-  private final Rectangle m_clipping;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public Graphics(GC gc) {
-    this.gc = gc;
-    this.gc.setLineWidth(1);
-    // initializes clipping
-    m_clipping = new Rectangle(gc.getClipping());
-    // initializes all State information for currentState
-    m_currentState.fill(gc, m_clipping);
-    m_appliedState.fill(gc, m_clipping);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Graphics
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Draws the outline of an arc located at (<i>r.x</i>, <i>r.y</i>) with width <i>r.width</i> and
-   * height <i>r.height</i>. The starting angle of the arc (specified in degrees) is <i>offset</i>
-   * and <i>length</i> is the arc's angle (specified in degrees).
-   */
-  public final void drawArc(Rectangle r, int offset, int length) {
-    drawArc(r.x, r.y, r.width, r.height, offset, length);
-  }
-
-  /**
-   * Draws the outline of an arc located at (<i>x</i>,<i>y</i>) with width <i>w</i> and height
-   * <i>h</i>. The starting angle of the arc (specified in degrees) is <i>offset</i> and
-   * <i>length</i> is the arc's angle (specified in degrees).
-   *
-   * @param x
-   *          the x coordinate
-   * @param y
-   *          the y coordinate
-   * @param width
-   *          the width
-   * @param height
-   *          the height
-   * @param offset
-   *          the start angle
-   * @param length
-   *          the length of the arc
-   */
-  public void drawArc(int x, int y, int width, int height, int offset, int length) {
-    checkPaint();
-    gc.drawArc(x + m_translateX, y + m_translateY, width, height, offset, length);
-  }
-
-  /**
-   * Fills the interior of an arc located at (<i>x</i>,<i>y</i>) with width <i>w</i> and height
-   * <i>h</i>. The starting angle of the arc (specified in degrees) is <i>offset</i> and
-   * <i>length</i> is the arc's angle (specified in degrees).
-   *
-   * @param x
-   *          the x coordinate
-   * @param y
-   *          the y coordinate
-   * @param width
-   *          the width
-   * @param height
-   *          the height
-   * @param offset
-   *          the start angle
-   * @param length
-   *          the length of the arc
-   */
-  public void fillArc(int x, int y, int width, int height, int offset, int length) {
-    checkFill();
-    gc.fillArc(x + m_translateX, y + m_translateY, width, height, offset, length);
-  }
-
-  /**
-   * Fills the interior of an arc located at (<i>r.x</i>, <i>r.y</i>) with width <i>r.width</i> and
-   * height <i>r.height</i>. The starting angle of the arc (specified in degrees) is <i>offset</i>
-   * and <i>length</i> is the arc's angle (specified in degrees).
-   */
-  public final void fillArc(Rectangle r, int offset, int length) {
-    fillArc(r.x, r.y, r.width, r.height, offset, length);
-  }
-
-  /**
-   * Fills the the given rectangle with a gradient from the foreground color to the background
-   * color. If <i>vertical</i> is <code>true</code>, the gradient will go from top to bottom.
-   * Otherwise, it will go from left to right. background color.
-   */
-  public final void fillGradient(Rectangle r, boolean vertical) {
-    fillGradient(r.x, r.y, r.width, r.height, vertical);
-  }
-
-  /**
-   * Fills the the given rectangle with a gradient from the foreground color to the background
-   * color. If <i>vertical</i> is <code>true</code>, the gradient will go from top to bottom.
-   * Otherwise, it will go from left to right. background color.
-   *
-   * @param x
-   *          the x coordinate
-   * @param y
-   *          the y coordinate
-   * @param width
-   *          the width
-   * @param height
-   *          the height
-   * @param vertical
-   *          whether the gradient should be vertical
-   */
-  public void fillGradient(int x, int y, int width, int height, boolean vertical) {
-    checkFill();
-    checkPaint();
-    gc.fillGradientRectangle(x + m_translateX, y + m_translateY, width, height, vertical);
-  }
-
-  /**
-   * Draws a focus rectangle.
-   */
-  public final void drawFocus(Rectangle r) {
-    drawFocus(r.x, r.y, r.width, r.height);
-  }
-
-  /**
-   * Draws a focus rectangle.
-   *
-   * @param x
-   *          the x coordinate
-   * @param y
-   *          the y coordinate
-   * @param w
-   *          the width
-   * @param h
-   *          the height
-   */
-  public void drawFocus(int x, int y, int w, int h) {
-    checkPaint();
-    checkFill();
-    gc.drawFocus(x + m_translateX, y + m_translateY, w + 1, h + 1);
-  }
-
-  /**
-   * Draws the given Image at the location (p.x, p.y).
-   */
-  public final void drawImage(Image srcImage, Point p) {
-    drawImage(srcImage, p.x, p.y);
-  }
-
-  /**
-   * Draws the given Image at the location (x,y).
-   *
-   * @param srcImage
-   *          the Image
-   * @param x
-   *          the x coordinate
-   * @param y
-   *          the y coordinate
-   */
-  public void drawImage(Image srcImage, int x, int y) {
-    checkGC();
-    gc.drawImage(srcImage, x + m_translateX, y + m_translateY);
-  }
-
-  /**
-   * Draws a rectangular section of the given Image to the specified rectangular reagion on the
-   * canvas. The section of the image bounded by the rectangle (src.x,src.y,src.w,src.h) is copied
-   * to the section of the canvas bounded by the rectangle (dest.x,dest.y,dest.w,dest.h). If these
-   * two sizes are different, scaling will occur.
-   */
-  public final void drawImage(Image srcImage, Rectangle src, Rectangle dest) {
-    drawImage(
-        srcImage,
-        src.x,
-        src.y,
-        src.width,
-        src.height,
-        dest.x,
-        dest.y,
-        dest.width,
-        dest.height);
-  }
-
-  /**
-   * Draws a rectangular section of the given Image to the specified rectangular reagion on the
-   * canvas. The section of the image bounded by the rectangle (x1,y1,w1,h1) is copied to the
-   * section of the canvas bounded by the rectangle (x2,y2,w2,h2). If these two sizes are different,
-   * scaling will occur.
-   *
-   * @param srcImage
-   *          the image
-   * @param x1
-   *          the x coordinate of the source
-   * @param y1
-   *          the y coordinate of the source
-   * @param w1
-   *          the width of the source
-   * @param h1
-   *          the height of the source
-   * @param x2
-   *          the x coordinate of the destination
-   * @param y2
-   *          the y coordinate of the destination
-   * @param w2
-   *          the width of the destination
-   * @param h2
-   *          the height of the destination
-   */
-  public void drawImage(Image srcImage,
-      int x1,
-      int y1,
-      int w1,
-      int h1,
-      int x2,
-      int y2,
-      int w2,
-      int h2) {
-    checkGC();
-    gc.drawImage(srcImage, x1, y1, w1, h1, x2 + m_translateX, y2 + m_translateY, w2, h2);
-  }
-
-  /**
-   * Draws a line between the points <code>(p1.x,p1.y)</code> and <code>(p2.x,p2.y)</code> using the
-   * foreground color.
-   */
-  public final void drawLine(Point p1, Point p2) {
-    drawLine(p1.x, p1.y, p2.x, p2.y);
-  }
-
-  /**
-   * Draws a line between the points <code>(x1,y1)</code> and <code>(x2,y2)</code> using the
-   * foreground color.
-   *
-   * @param x1
-   *          the x coordinate for the first point
-   * @param y1
-   *          the y coordinate for the first point
-   * @param x2
-   *          the x coordinate for the second point
-   * @param y2
-   *          the y coordinate for the second point
-   */
-  public void drawLine(int x1, int y1, int x2, int y2) {
-    checkPaint();
-    gc.drawLine(x1 + m_translateX, y1 + m_translateY, x2 + m_translateX, y2 + m_translateY);
-  }
-
-  /**
-   * Draws a pixel, using the foreground color, at the specified point (<code>x</code>,
-   * <code>y</code>).
-   * <p>
-   * Note that the receiver's line attributes do not affect this operation.
-   * </p>
-   *
-   * @param x
-   *          the point's x coordinate
-   * @param y
-   *          the point's y coordinate
-   */
-  public void drawPoint(int x, int y) {
-    checkPaint();
-    gc.drawPoint(x + m_translateX, y + m_translateY);
-  }
-
-  /**
-   * Draws the outline of an ellipse that fits inside the rectangle with the given properties using
-   * the foreground color.
-   */
-  public final void drawOval(Rectangle r) {
-    drawOval(r.x, r.y, r.width, r.height);
-  }
-
-  /**
-   * Draws the outline of an ellipse that fits inside the rectangle with the given properties using
-   * the foreground color.
-   *
-   * @param x
-   *          the x coordinate
-   * @param y
-   *          the y coordinate
-   * @param width
-   *          the width
-   * @param height
-   *          the height
-   */
-  public void drawOval(int x, int y, int width, int height) {
-    checkPaint();
-    gc.drawOval(x + m_translateX, y + m_translateY, width, height);
-  }
-
-  /**
-   * Fills an ellipse that fits inside the rectangle with the given properties using the background
-   * color.
-   */
-  public final void fillOval(Rectangle r) {
-    fillOval(r.x, r.y, r.width, r.height);
-  }
-
-  /**
-   * Fills an ellipse that fits inside the rectangle with the given properties using the background
-   * color.
-   *
-   * @param x
-   *          the x coordinate
-   * @param y
-   *          the y coordinate
-   * @param w
-   *          the width
-   * @param h
-   *          the height
-   */
-  public void fillOval(int x, int y, int w, int h) {
-    checkFill();
-    gc.fillOval(x + m_translateX, y + m_translateY, w, h);
-  }
-
-  /**
-   * Draws a closed polygon defined by the given <code>PointList</code> containing the vertices. The
-   * first and last points in the list will be connected.
-   *
-   * @param points
-   *          the vertices
-   */
-  public void drawPolygon(PointList points) {
-    checkPaint();
-    points.performTranslate(m_translateX, m_translateY);
-    gc.drawPolygon(points.toIntArray());
-    points.performTranslate(-m_translateX, -m_translateY);
-  }
-
-  /**
-   * Fills a closed polygon defined by the given <code>PointList</code> containing the vertices. The
-   * first and last points in the list will be connected.
-   *
-   * @param points
-   *          the vertices
-   */
-  public void fillPolygon(PointList points) {
-    checkFill();
-    points.performTranslate(m_translateX, m_translateY);
-    gc.fillPolygon(points.toIntArray());
-    points.performTranslate(-m_translateX, -m_translateY);
-  }
-
-  /**
-   * Draws a polyline defined by the given <code>PointList</code> containing the vertices. The first
-   * and last points in the list will <b>not</b> be connected.
-   *
-   * @param points
-   *          the vertices
-   */
-  public void drawPolyline(PointList points) {
-    checkPaint();
-    points.performTranslate(m_translateX, m_translateY);
-    int array[] = points.toIntArray();
-    gc.drawPolyline(array);
-    if (getLineWidth() == 1 && array.length >= 2) {
-      int x = array[array.length - 2];
-      int y = array[array.length - 1];
-      gc.drawLine(x, y, x, y);
-    }
-    points.performTranslate(-m_translateX, -m_translateY);
-  }
-
-  /**
-   * Draws a rectangle whose top-left corner is located at the point (r.x,r.y) with the given
-   * r.width and r.height.
-   */
-  public final void drawRectangle(Rectangle r) {
-    drawRectangle(r.x, r.y, r.width, r.height);
-  }
-
-  /**
-   * Draws a rectangle whose top-left corner is located at the point (x,y) with the given width and
-   * height.
-   *
-   * @param x
-   *          the x coordinate
-   * @param y
-   *          the y coordinate
-   * @param width
-   *          the width
-   * @param height
-   *          the height
-   */
-  public void drawRectangle(int x, int y, int width, int height) {
-    checkPaint();
-    gc.drawRectangle(x + m_translateX, y + m_translateY, width, height);
-  }
-
-  /**
-   * Fills a rectangle whose top-left corner is located at the point (r.x,r.y) with the given
-   * r.width and r.height.
-   */
-  public final void fillRectangle(Rectangle r) {
-    fillRectangle(r.x, r.y, r.width, r.height);
-  }
-
-  /**
-   * Fills a rectangle whose top-left corner is located at the point (x,y) with the given width and
-   * height.
-   *
-   * @param x
-   *          the x coordinate
-   * @param y
-   *          the y coordinate
-   * @param width
-   *          the width
-   * @param height
-   *          the height
-   */
-  public void fillRectangle(int x, int y, int width, int height) {
-    checkFill();
-    gc.fillRectangle(x + m_translateX, y + m_translateY, width, height);
-  }
-
-  /**
-   * Draws a rectangle with rounded corners using the foreground color. <i>arcWidth</i> and
-   * <i>arcHeight</i> represent the horizontal and vertical diameter of the corners.
-   *
-   * @param r
-   *          the rectangle
-   * @param arcWidth
-   *          the arc width
-   * @param arcHeight
-   *          the arc height
-   */
-  public void drawRoundRectangle(Rectangle r, int arcWidth, int arcHeight) {
-    checkPaint();
-    gc.drawRoundRectangle(
-        r.x + m_translateX,
-        r.y + m_translateY,
-        r.width,
-        r.height,
-        arcWidth,
-        arcHeight);
-  }
-
-  /**
-   * Fills a rectangle with rounded corners using the background color. <i>arcWidth</i> and
-   * <i>arcHeight</i> represent the horizontal and vertical diameter of the corners.
-   *
-   * @param r
-   *          the rectangle
-   * @param arcWidth
-   *          the arc width
-   * @param arcHeight
-   *          the arc height
-   */
-  public void fillRoundRectangle(Rectangle r, int arcWidth, int arcHeight) {
-    checkFill();
-    gc.fillRoundRectangle(
-        r.x + m_translateX,
-        r.y + m_translateY,
-        r.width,
-        r.height,
-        arcWidth,
-        arcHeight);
-  }
-
-  /**
-   * Draws the given string using the current font and foreground color. Tab expansion and carriage
-   * return processing are performed. The background of the text will be transparent.
-   *
-   * @param s
-   *          the text
-   * @param x
-   *          the x coordinate
-   * @param y
-   *          the y coordinate
-   */
-  public void drawText(String s, int x, int y) {
-    checkText();
-    gc.drawText(s, x + m_translateX, y + m_translateY, true);
-  }
-
-  /**
-   * Draws the given string using the current font and foreground color. No tab expansion or
-   * carriage return processing will be performed. The background of the string will be transparent.
-   *
-   * @param s
-   *          the string
-   * @param x
-   *          the x coordinate
-   * @param y
-   *          the y coordinate
-   */
-  public void drawString(String s, int x, int y) {
-    checkText();
-    gc.drawString(s, x + m_translateX, y + m_translateY, true);
-  }
-
-  /**
-   * Draws the given string using the current font and foreground color. No tab expansion or
-   * carriage return processing will be performed. The background of the string will be transparent.
-   */
-  public final void drawString(String s, Point p) {
-    drawString(s, p.x, p.y);
-  }
-
-  /**
-   * Draws the given string using the current font and foreground color. Tab expansion and carriage
-   * return processing are performed. The background of the text will be transparent.
-   */
-  public final void drawText(String s, Point p) {
-    drawText(s, p.x, p.y);
-  }
-
-  /**
-   * Draws the given string using the current font and foreground color. No tab expansion or
-   * carriage return processing will be performed. The background of the string will be filled with
-   * the current background color.
-   */
-  public final void fillString(String s, Point p) {
-    fillString(s, p.x, p.y);
-  }
-
-  /**
-   * Draws the given string using the current font and foreground color. No tab expansion or
-   * carriage return processing will be performed. The background of the string will be filled with
-   * the current background color.
-   *
-   * @param s
-   *          the string
-   * @param x
-   *          the x coordinate
-   * @param y
-   *          the y coordinate
-   */
-  public void fillString(String s, int x, int y) {
-    checkText();
-    gc.drawString(s, x + m_translateX, y + m_translateY, false);
-  }
-
-  /**
-   * Draws the given string using the current font and foreground color. Tab expansion and carriage
-   * return processing are performed. The background of the text will be filled with the current
-   * background color.
-   */
-  public final void fillText(String s, Point p) {
-    fillText(s, p.x, p.y);
-  }
-
-  /**
-   * Draws the given string using the current font and foreground color. Tab expansion and carriage
-   * return processing are performed. The background of the text will be filled with the current
-   * background color.
-   *
-   * @param s
-   *          the text
-   * @param x
-   *          the x coordinate
-   * @param y
-   *          the y coordinate
-   */
-  public void fillText(String s, int x, int y) {
-    checkText();
-    gc.drawText(s, x + m_translateX, y + m_translateY, false);
-  }
-
-  /**
-   * Returns the extent of the given string. Tab expansion and carriage return processing are
-   * performed.
-   */
-  public Dimension getTextExtent(String s) {
-    checkText();
-    org.eclipse.swt.graphics.Point extent = gc.textExtent(s);
-    return new Dimension(extent.x, extent.y);
-  }
-
-  /**
-   * Returns the background color used for filling.
-   *
-   * @return the background color
-   */
-  public Color getBackgroundColor() {
-    return m_currentState.background;
-  }
-
-  /**
-   * Returns the font used to draw and fill text.
-   *
-   * @return the font
-   */
-  public Font getFont() {
-    return m_currentState.font;
-  }
-
-  /**
-   * Returns the font metrics for the current font.
-   *
-   * @return the font metrics
-   */
-  public FontMetrics getFontMetrics() {
-    checkText();
-    return gc.getFontMetrics();
-  }
-
-  /**
-   * Returns the foreground color used to draw lines and text.
-   *
-   * @return the foreground color
-   */
-  public Color getForegroundColor() {
-    return m_currentState.foreground;
-  }
-
-  /**
-   * Returns the line style.
-   *
-   * @return the line style
-   */
-  public int getLineStyle() {
-    return m_currentState.lineStyle;
-  }
-
-  /**
-   * Returns the current line width.
-   *
-   * @return the line width
-   */
-  public int getLineWidth() {
-    return m_currentState.lineWidth;
-  }
-
-  /**
-   * Returns <code>true</code> if this graphics object should use XOR mode with painting.
-   *
-   * @return whether XOR mode is turned on
-   */
-  public boolean getXORMode() {
-    return m_currentState.xor;
-  }
-
-  /**
-   * Sets the background color.
-   *
-   * @param color
-   *          the new background color
-   */
-  public void setBackgroundColor(Color color) {
-    if (!m_currentState.background.equals(color)) {
-      m_currentState.background = color;
-    }
-  }
-
-  /**
-   * Modifies the given rectangle to match the clip region and returns that rectangle.
-   *
-   * @param rectangle
-   *          the rectangle to hold the clip region
-   * @return the clip rectangle
-   */
-  public Rectangle getClip() {
-    return new Rectangle(m_clipping);
-  }
-
-  /**
-   * Sets the clip region to the given rectangle. Anything outside this rectangle will not be drawn.
-   */
-  public void clipRect(Rectangle rectangle) {
-    m_clipping.intersect(rectangle);
-    m_currentState.clippingX = m_clipping.x + m_translateX;
-    m_currentState.clippingY = m_clipping.y + m_translateY;
-    m_currentState.clippingWidth = m_clipping.width;
-    m_currentState.clippingHeight = m_clipping.height;
-  }
-
-  /**
-   * Sets the font.
-   *
-   * @param font
-   *          the new font
-   */
-  public void setFont(Font font) {
-    if (m_currentState.font != font) {
-      m_currentState.font = font;
-    }
-  }
-
-  /**
-   * Sets the foreground color.
-   *
-   * @param color
-   *          the new foreground color
-   */
-  public void setForegroundColor(Color color) {
-    if (!m_currentState.foreground.equals(color)) {
-      m_currentState.foreground = color;
-    }
-  }
-
-  /**
-   * Sets the line style.
-   *
-   * @param style
-   *          the new style
-   */
-  public void setLineStyle(int style) {
-    if (m_currentState.lineStyle != style) {
-      m_currentState.lineStyle = style;
-    }
-  }
-
-  /**
-   * Sets the line width.
-   *
-   * @param width
-   *          the new width
-   */
-  public void setLineWidth(int width) {
-    if (m_currentState.lineWidth != width) {
-      m_currentState.lineWidth = width;
-    }
-  }
-
-  /**
-   * Sets the XOR mode.
-   *
-   * @param b
-   *          the new XOR mode
-   */
-  public void setXORMode(boolean b) {
-    if (m_currentState.xor != b) {
-      m_currentState.xor = b;
-    }
-  }
-
-  /**
-   * Translates this graphics object so that its origin is offset horizontally by <i>p.x</i> and
-   * vertically by <i>p.y</i>.
-   */
-  public final void translate(Point p) {
-    translate(p.x, p.y);
-  }
-
-  /**
-   * Translates this graphics object so that its origin is offset horizontally by <i>dx</i> and
-   * vertically by <i>dy</i>.
-   *
-   * @param dx
-   *          the horizontal offset
-   * @param dy
-   *          the vertical offset
-   */
-  public void translate(int dx, int dy) {
-    setTranslation(m_translateX + dx, m_translateY + dy);
-    m_clipping.x -= dx;
-    m_clipping.y -= dy;
-  }
-
-  /**
-   * Sets the translation values of this to the given values
-   *
-   * @param x
-   *          The x value
-   * @param y
-   *          The y value
-   */
-  protected void setTranslation(int x, int y) {
-    m_translateX = m_currentState.translateX = x;
-    m_translateY = m_currentState.translateY = y;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Check state's
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * If the background color has changed, this change will be pushed to the GC. Also calls
-   * {@link #checkGC()}.
-   */
-  protected final void checkFill() {
-    if (!m_appliedState.background.equals(m_currentState.background)) {
-      gc.setBackground(m_appliedState.background = m_currentState.background);
-    }
-    checkGC();
-  }
-
-  /**
-   * If the XOR or the clip region has change, these changes will be pushed to the GC.
-   */
-  protected final void checkGC() {
-    if (m_appliedState.xor != m_currentState.xor) {
-      gc.setXORMode(m_appliedState.xor = m_currentState.xor);
-    }
-    if (m_appliedState.clippingX != m_currentState.clippingX
-        || m_appliedState.clippingY != m_currentState.clippingY
-        || m_appliedState.clippingWidth != m_currentState.clippingWidth
-        || m_appliedState.clippingHeight != m_currentState.clippingHeight) {
-      gc.setClipping(
-          m_appliedState.clippingX = m_currentState.clippingX,
-          m_appliedState.clippingY = m_currentState.clippingY,
-          m_appliedState.clippingWidth = m_currentState.clippingWidth,
-          m_appliedState.clippingHeight = m_currentState.clippingHeight);
-    }
-  }
-
-  /**
-   * If the line width, line style, foreground or background colors have changed, these changes will
-   * be pushed to the GC. Also calls {@link #checkGC()}.
-   */
-  protected final void checkPaint() {
-    checkGC();
-    if (!m_appliedState.foreground.equals(m_currentState.foreground)) {
-      gc.setForeground(m_appliedState.foreground = m_currentState.foreground);
-    }
-    if (m_appliedState.lineStyle != m_currentState.lineStyle) {
-      gc.setLineStyle(m_appliedState.lineStyle = m_currentState.lineStyle);
-    }
-    if (m_appliedState.lineWidth != m_currentState.lineWidth) {
-      gc.setLineWidth(m_appliedState.lineWidth = m_currentState.lineWidth);
-    }
-    if (!m_appliedState.background.equals(m_currentState.background)) {
-      gc.setBackground(m_appliedState.background = m_currentState.background);
-    }
-  }
-
-  /**
-   * If the font has changed, this change will be pushed to the GC. Also calls {@link #checkPaint()}
-   * and {@link #checkFill()}.
-   */
-  protected final void checkText() {
-    checkPaint();
-    checkFill();
-    if (!m_appliedState.font.equals(m_currentState.font)) {
-      gc.setFont(m_appliedState.font = m_currentState.font);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // State
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Pushes the current state of this graphics object onto a stack.
-   */
-  public void pushState() {
-    if (m_stackPointer < m_stack.size()) {
-      State state = m_stack.get(m_stackPointer);
-      state.fill(m_currentState);
-    } else {
-      m_stack.add(m_currentState.copy());
-    }
-    m_stackPointer++;
-  }
-
-  /**
-   * Pops the previous state of this graphics object off the stack (if {@link #pushState()} has
-   * previously been called) and restores the current state to that popped state.
-   */
-  public void popState() {
-    restoreState(--m_stackPointer);
-  }
-
-  /**
-   * Restores the previous state of this graphics object.
-   */
-  public void restoreState() {
-    restoreState(m_stackPointer - 1);
-  }
-
-  /**
-   * Sets all State information to that of the given State, called by restoreState()
-   *
-   * @param s
-   *          the State
-   */
-  private void restoreState(int index) {
-    State state = m_stack.get(index);
-    // restore graphics info
-    state.fillTo(this);
-    // restore translate
-    m_translateX = m_currentState.translateX = state.translateX;
-    m_translateY = m_currentState.translateY = state.translateY;
-    // restore absolute clipping
-    m_currentState.clippingX = state.clippingX;
-    m_currentState.clippingY = state.clippingY;
-    m_currentState.clippingWidth = state.clippingWidth;
-    m_currentState.clippingHeight = state.clippingHeight;
-    // restore clipping
-    m_clipping.x = state.clippingX - m_translateX;
-    m_clipping.y = state.clippingY - m_translateY;
-    m_clipping.width = state.clippingWidth;
-    m_clipping.height = state.clippingHeight;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // State inner class
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Contains the state variables of this SWTGraphics object
-   */
-  private static class State {
-    /**
-     * Background and foreground colors.
-     */
-    public Color background;
-    public Color foreground;
-    /**
-     * Clip values
-     */
-    public int clippingX; // X and Y are absolute here.
-    public int clippingY;
-    public int clippingWidth;
-    public int clippingHeight;
-    /**
-     * Font value.
-     */
-    public Font font;
-    /**
-     * Line values.
-     */
-    public int lineWidth;
-    public int lineStyle;
-    public int translateX;
-    public int translateY;
-    /**
-     * XOR value.
-     */
-    public boolean xor;
-
-    /**
-     * A clone of this instance.
-     */
-    public State copy() {
-      return new State().fill(this);
-    }
-
-    /**
-     * Copies all state information from the given State to this State.
-     */
-    public State fill(State state) {
-      background = state.background;
-      foreground = state.foreground;
-      clippingX = state.clippingX;
-      clippingY = state.clippingY;
-      clippingWidth = state.clippingWidth;
-      clippingHeight = state.clippingHeight;
-      lineStyle = state.lineStyle;
-      lineWidth = state.lineWidth;
-      translateX = state.translateX;
-      translateY = state.translateY;
-      font = state.font;
-      xor = state.xor;
-      return this;
-    }
-
-    /**
-     * Copies all state information from the given SWT {@link GC} to this State.
-     */
-    public void fill(GC gc, Rectangle clipping) {
-      background = gc.getBackground();
-      foreground = gc.getForeground();
-      clippingX = clipping.x;
-      clippingY = clipping.y;
-      clippingWidth = clipping.width;
-      clippingHeight = clipping.height;
-      font = gc.getFont();
-      lineWidth = gc.getLineWidth();
-      lineStyle = gc.getLineStyle();
-      xor = gc.getXORMode();
-    }
-
-    public void fillTo(Graphics graphics) {
-      graphics.setBackgroundColor(background);
-      graphics.setForegroundColor(foreground);
-      graphics.setLineStyle(lineStyle);
-      graphics.setLineWidth(lineWidth);
-      graphics.setFont(font);
-      graphics.setXORMode(xor);
-    }
-  }
+	public final GC gc;
+	public int m_translateX;
+	public int m_translateY;
+	private final State m_appliedState = new State();
+	private final State m_currentState = new State();
+	private final List<State> m_stack = Lists.newArrayList();
+	private int m_stackPointer = 0;
+	private final Rectangle m_clipping;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public Graphics(GC gc) {
+		this.gc = gc;
+		this.gc.setLineWidth(1);
+		// initializes clipping
+		m_clipping = new Rectangle(gc.getClipping());
+		// initializes all State information for currentState
+		m_currentState.fill(gc, m_clipping);
+		m_appliedState.fill(gc, m_clipping);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Graphics
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Draws the outline of an arc located at (<i>r.x</i>, <i>r.y</i>) with width <i>r.width</i> and
+	 * height <i>r.height</i>. The starting angle of the arc (specified in degrees) is <i>offset</i>
+	 * and <i>length</i> is the arc's angle (specified in degrees).
+	 */
+	public final void drawArc(Rectangle r, int offset, int length) {
+		drawArc(r.x, r.y, r.width, r.height, offset, length);
+	}
+
+	/**
+	 * Draws the outline of an arc located at (<i>x</i>,<i>y</i>) with width <i>w</i> and height
+	 * <i>h</i>. The starting angle of the arc (specified in degrees) is <i>offset</i> and
+	 * <i>length</i> is the arc's angle (specified in degrees).
+	 *
+	 * @param x
+	 *          the x coordinate
+	 * @param y
+	 *          the y coordinate
+	 * @param width
+	 *          the width
+	 * @param height
+	 *          the height
+	 * @param offset
+	 *          the start angle
+	 * @param length
+	 *          the length of the arc
+	 */
+	public void drawArc(int x, int y, int width, int height, int offset, int length) {
+		checkPaint();
+		gc.drawArc(x + m_translateX, y + m_translateY, width, height, offset, length);
+	}
+
+	/**
+	 * Fills the interior of an arc located at (<i>x</i>,<i>y</i>) with width <i>w</i> and height
+	 * <i>h</i>. The starting angle of the arc (specified in degrees) is <i>offset</i> and
+	 * <i>length</i> is the arc's angle (specified in degrees).
+	 *
+	 * @param x
+	 *          the x coordinate
+	 * @param y
+	 *          the y coordinate
+	 * @param width
+	 *          the width
+	 * @param height
+	 *          the height
+	 * @param offset
+	 *          the start angle
+	 * @param length
+	 *          the length of the arc
+	 */
+	public void fillArc(int x, int y, int width, int height, int offset, int length) {
+		checkFill();
+		gc.fillArc(x + m_translateX, y + m_translateY, width, height, offset, length);
+	}
+
+	/**
+	 * Fills the interior of an arc located at (<i>r.x</i>, <i>r.y</i>) with width <i>r.width</i> and
+	 * height <i>r.height</i>. The starting angle of the arc (specified in degrees) is <i>offset</i>
+	 * and <i>length</i> is the arc's angle (specified in degrees).
+	 */
+	public final void fillArc(Rectangle r, int offset, int length) {
+		fillArc(r.x, r.y, r.width, r.height, offset, length);
+	}
+
+	/**
+	 * Fills the the given rectangle with a gradient from the foreground color to the background
+	 * color. If <i>vertical</i> is <code>true</code>, the gradient will go from top to bottom.
+	 * Otherwise, it will go from left to right. background color.
+	 */
+	public final void fillGradient(Rectangle r, boolean vertical) {
+		fillGradient(r.x, r.y, r.width, r.height, vertical);
+	}
+
+	/**
+	 * Fills the the given rectangle with a gradient from the foreground color to the background
+	 * color. If <i>vertical</i> is <code>true</code>, the gradient will go from top to bottom.
+	 * Otherwise, it will go from left to right. background color.
+	 *
+	 * @param x
+	 *          the x coordinate
+	 * @param y
+	 *          the y coordinate
+	 * @param width
+	 *          the width
+	 * @param height
+	 *          the height
+	 * @param vertical
+	 *          whether the gradient should be vertical
+	 */
+	public void fillGradient(int x, int y, int width, int height, boolean vertical) {
+		checkFill();
+		checkPaint();
+		gc.fillGradientRectangle(x + m_translateX, y + m_translateY, width, height, vertical);
+	}
+
+	/**
+	 * Draws a focus rectangle.
+	 */
+	public final void drawFocus(Rectangle r) {
+		drawFocus(r.x, r.y, r.width, r.height);
+	}
+
+	/**
+	 * Draws a focus rectangle.
+	 *
+	 * @param x
+	 *          the x coordinate
+	 * @param y
+	 *          the y coordinate
+	 * @param w
+	 *          the width
+	 * @param h
+	 *          the height
+	 */
+	public void drawFocus(int x, int y, int w, int h) {
+		checkPaint();
+		checkFill();
+		gc.drawFocus(x + m_translateX, y + m_translateY, w + 1, h + 1);
+	}
+
+	/**
+	 * Draws the given Image at the location (p.x, p.y).
+	 */
+	public final void drawImage(Image srcImage, Point p) {
+		drawImage(srcImage, p.x, p.y);
+	}
+
+	/**
+	 * Draws the given Image at the location (x,y).
+	 *
+	 * @param srcImage
+	 *          the Image
+	 * @param x
+	 *          the x coordinate
+	 * @param y
+	 *          the y coordinate
+	 */
+	public void drawImage(Image srcImage, int x, int y) {
+		checkGC();
+		gc.drawImage(srcImage, x + m_translateX, y + m_translateY);
+	}
+
+	/**
+	 * Draws a rectangular section of the given Image to the specified rectangular reagion on the
+	 * canvas. The section of the image bounded by the rectangle (src.x,src.y,src.w,src.h) is copied
+	 * to the section of the canvas bounded by the rectangle (dest.x,dest.y,dest.w,dest.h). If these
+	 * two sizes are different, scaling will occur.
+	 */
+	public final void drawImage(Image srcImage, Rectangle src, Rectangle dest) {
+		drawImage(
+				srcImage,
+				src.x,
+				src.y,
+				src.width,
+				src.height,
+				dest.x,
+				dest.y,
+				dest.width,
+				dest.height);
+	}
+
+	/**
+	 * Draws a rectangular section of the given Image to the specified rectangular reagion on the
+	 * canvas. The section of the image bounded by the rectangle (x1,y1,w1,h1) is copied to the
+	 * section of the canvas bounded by the rectangle (x2,y2,w2,h2). If these two sizes are different,
+	 * scaling will occur.
+	 *
+	 * @param srcImage
+	 *          the image
+	 * @param x1
+	 *          the x coordinate of the source
+	 * @param y1
+	 *          the y coordinate of the source
+	 * @param w1
+	 *          the width of the source
+	 * @param h1
+	 *          the height of the source
+	 * @param x2
+	 *          the x coordinate of the destination
+	 * @param y2
+	 *          the y coordinate of the destination
+	 * @param w2
+	 *          the width of the destination
+	 * @param h2
+	 *          the height of the destination
+	 */
+	public void drawImage(Image srcImage,
+			int x1,
+			int y1,
+			int w1,
+			int h1,
+			int x2,
+			int y2,
+			int w2,
+			int h2) {
+		checkGC();
+		gc.drawImage(srcImage, x1, y1, w1, h1, x2 + m_translateX, y2 + m_translateY, w2, h2);
+	}
+
+	/**
+	 * Draws a line between the points <code>(p1.x,p1.y)</code> and <code>(p2.x,p2.y)</code> using the
+	 * foreground color.
+	 */
+	public final void drawLine(Point p1, Point p2) {
+		drawLine(p1.x, p1.y, p2.x, p2.y);
+	}
+
+	/**
+	 * Draws a line between the points <code>(x1,y1)</code> and <code>(x2,y2)</code> using the
+	 * foreground color.
+	 *
+	 * @param x1
+	 *          the x coordinate for the first point
+	 * @param y1
+	 *          the y coordinate for the first point
+	 * @param x2
+	 *          the x coordinate for the second point
+	 * @param y2
+	 *          the y coordinate for the second point
+	 */
+	public void drawLine(int x1, int y1, int x2, int y2) {
+		checkPaint();
+		gc.drawLine(x1 + m_translateX, y1 + m_translateY, x2 + m_translateX, y2 + m_translateY);
+	}
+
+	/**
+	 * Draws a pixel, using the foreground color, at the specified point (<code>x</code>,
+	 * <code>y</code>).
+	 * <p>
+	 * Note that the receiver's line attributes do not affect this operation.
+	 * </p>
+	 *
+	 * @param x
+	 *          the point's x coordinate
+	 * @param y
+	 *          the point's y coordinate
+	 */
+	public void drawPoint(int x, int y) {
+		checkPaint();
+		gc.drawPoint(x + m_translateX, y + m_translateY);
+	}
+
+	/**
+	 * Draws the outline of an ellipse that fits inside the rectangle with the given properties using
+	 * the foreground color.
+	 */
+	public final void drawOval(Rectangle r) {
+		drawOval(r.x, r.y, r.width, r.height);
+	}
+
+	/**
+	 * Draws the outline of an ellipse that fits inside the rectangle with the given properties using
+	 * the foreground color.
+	 *
+	 * @param x
+	 *          the x coordinate
+	 * @param y
+	 *          the y coordinate
+	 * @param width
+	 *          the width
+	 * @param height
+	 *          the height
+	 */
+	public void drawOval(int x, int y, int width, int height) {
+		checkPaint();
+		gc.drawOval(x + m_translateX, y + m_translateY, width, height);
+	}
+
+	/**
+	 * Fills an ellipse that fits inside the rectangle with the given properties using the background
+	 * color.
+	 */
+	public final void fillOval(Rectangle r) {
+		fillOval(r.x, r.y, r.width, r.height);
+	}
+
+	/**
+	 * Fills an ellipse that fits inside the rectangle with the given properties using the background
+	 * color.
+	 *
+	 * @param x
+	 *          the x coordinate
+	 * @param y
+	 *          the y coordinate
+	 * @param w
+	 *          the width
+	 * @param h
+	 *          the height
+	 */
+	public void fillOval(int x, int y, int w, int h) {
+		checkFill();
+		gc.fillOval(x + m_translateX, y + m_translateY, w, h);
+	}
+
+	/**
+	 * Draws a closed polygon defined by the given <code>PointList</code> containing the vertices. The
+	 * first and last points in the list will be connected.
+	 *
+	 * @param points
+	 *          the vertices
+	 */
+	public void drawPolygon(PointList points) {
+		checkPaint();
+		points.performTranslate(m_translateX, m_translateY);
+		gc.drawPolygon(points.toIntArray());
+		points.performTranslate(-m_translateX, -m_translateY);
+	}
+
+	/**
+	 * Fills a closed polygon defined by the given <code>PointList</code> containing the vertices. The
+	 * first and last points in the list will be connected.
+	 *
+	 * @param points
+	 *          the vertices
+	 */
+	public void fillPolygon(PointList points) {
+		checkFill();
+		points.performTranslate(m_translateX, m_translateY);
+		gc.fillPolygon(points.toIntArray());
+		points.performTranslate(-m_translateX, -m_translateY);
+	}
+
+	/**
+	 * Draws a polyline defined by the given <code>PointList</code> containing the vertices. The first
+	 * and last points in the list will <b>not</b> be connected.
+	 *
+	 * @param points
+	 *          the vertices
+	 */
+	public void drawPolyline(PointList points) {
+		checkPaint();
+		points.performTranslate(m_translateX, m_translateY);
+		int array[] = points.toIntArray();
+		gc.drawPolyline(array);
+		if (getLineWidth() == 1 && array.length >= 2) {
+			int x = array[array.length - 2];
+			int y = array[array.length - 1];
+			gc.drawLine(x, y, x, y);
+		}
+		points.performTranslate(-m_translateX, -m_translateY);
+	}
+
+	/**
+	 * Draws a rectangle whose top-left corner is located at the point (r.x,r.y) with the given
+	 * r.width and r.height.
+	 */
+	public final void drawRectangle(Rectangle r) {
+		drawRectangle(r.x, r.y, r.width, r.height);
+	}
+
+	/**
+	 * Draws a rectangle whose top-left corner is located at the point (x,y) with the given width and
+	 * height.
+	 *
+	 * @param x
+	 *          the x coordinate
+	 * @param y
+	 *          the y coordinate
+	 * @param width
+	 *          the width
+	 * @param height
+	 *          the height
+	 */
+	public void drawRectangle(int x, int y, int width, int height) {
+		checkPaint();
+		gc.drawRectangle(x + m_translateX, y + m_translateY, width, height);
+	}
+
+	/**
+	 * Fills a rectangle whose top-left corner is located at the point (r.x,r.y) with the given
+	 * r.width and r.height.
+	 */
+	public final void fillRectangle(Rectangle r) {
+		fillRectangle(r.x, r.y, r.width, r.height);
+	}
+
+	/**
+	 * Fills a rectangle whose top-left corner is located at the point (x,y) with the given width and
+	 * height.
+	 *
+	 * @param x
+	 *          the x coordinate
+	 * @param y
+	 *          the y coordinate
+	 * @param width
+	 *          the width
+	 * @param height
+	 *          the height
+	 */
+	public void fillRectangle(int x, int y, int width, int height) {
+		checkFill();
+		gc.fillRectangle(x + m_translateX, y + m_translateY, width, height);
+	}
+
+	/**
+	 * Draws a rectangle with rounded corners using the foreground color. <i>arcWidth</i> and
+	 * <i>arcHeight</i> represent the horizontal and vertical diameter of the corners.
+	 *
+	 * @param r
+	 *          the rectangle
+	 * @param arcWidth
+	 *          the arc width
+	 * @param arcHeight
+	 *          the arc height
+	 */
+	public void drawRoundRectangle(Rectangle r, int arcWidth, int arcHeight) {
+		checkPaint();
+		gc.drawRoundRectangle(
+				r.x + m_translateX,
+				r.y + m_translateY,
+				r.width,
+				r.height,
+				arcWidth,
+				arcHeight);
+	}
+
+	/**
+	 * Fills a rectangle with rounded corners using the background color. <i>arcWidth</i> and
+	 * <i>arcHeight</i> represent the horizontal and vertical diameter of the corners.
+	 *
+	 * @param r
+	 *          the rectangle
+	 * @param arcWidth
+	 *          the arc width
+	 * @param arcHeight
+	 *          the arc height
+	 */
+	public void fillRoundRectangle(Rectangle r, int arcWidth, int arcHeight) {
+		checkFill();
+		gc.fillRoundRectangle(
+				r.x + m_translateX,
+				r.y + m_translateY,
+				r.width,
+				r.height,
+				arcWidth,
+				arcHeight);
+	}
+
+	/**
+	 * Draws the given string using the current font and foreground color. Tab expansion and carriage
+	 * return processing are performed. The background of the text will be transparent.
+	 *
+	 * @param s
+	 *          the text
+	 * @param x
+	 *          the x coordinate
+	 * @param y
+	 *          the y coordinate
+	 */
+	public void drawText(String s, int x, int y) {
+		checkText();
+		gc.drawText(s, x + m_translateX, y + m_translateY, true);
+	}
+
+	/**
+	 * Draws the given string using the current font and foreground color. No tab expansion or
+	 * carriage return processing will be performed. The background of the string will be transparent.
+	 *
+	 * @param s
+	 *          the string
+	 * @param x
+	 *          the x coordinate
+	 * @param y
+	 *          the y coordinate
+	 */
+	public void drawString(String s, int x, int y) {
+		checkText();
+		gc.drawString(s, x + m_translateX, y + m_translateY, true);
+	}
+
+	/**
+	 * Draws the given string using the current font and foreground color. No tab expansion or
+	 * carriage return processing will be performed. The background of the string will be transparent.
+	 */
+	public final void drawString(String s, Point p) {
+		drawString(s, p.x, p.y);
+	}
+
+	/**
+	 * Draws the given string using the current font and foreground color. Tab expansion and carriage
+	 * return processing are performed. The background of the text will be transparent.
+	 */
+	public final void drawText(String s, Point p) {
+		drawText(s, p.x, p.y);
+	}
+
+	/**
+	 * Draws the given string using the current font and foreground color. No tab expansion or
+	 * carriage return processing will be performed. The background of the string will be filled with
+	 * the current background color.
+	 */
+	public final void fillString(String s, Point p) {
+		fillString(s, p.x, p.y);
+	}
+
+	/**
+	 * Draws the given string using the current font and foreground color. No tab expansion or
+	 * carriage return processing will be performed. The background of the string will be filled with
+	 * the current background color.
+	 *
+	 * @param s
+	 *          the string
+	 * @param x
+	 *          the x coordinate
+	 * @param y
+	 *          the y coordinate
+	 */
+	public void fillString(String s, int x, int y) {
+		checkText();
+		gc.drawString(s, x + m_translateX, y + m_translateY, false);
+	}
+
+	/**
+	 * Draws the given string using the current font and foreground color. Tab expansion and carriage
+	 * return processing are performed. The background of the text will be filled with the current
+	 * background color.
+	 */
+	public final void fillText(String s, Point p) {
+		fillText(s, p.x, p.y);
+	}
+
+	/**
+	 * Draws the given string using the current font and foreground color. Tab expansion and carriage
+	 * return processing are performed. The background of the text will be filled with the current
+	 * background color.
+	 *
+	 * @param s
+	 *          the text
+	 * @param x
+	 *          the x coordinate
+	 * @param y
+	 *          the y coordinate
+	 */
+	public void fillText(String s, int x, int y) {
+		checkText();
+		gc.drawText(s, x + m_translateX, y + m_translateY, false);
+	}
+
+	/**
+	 * Returns the extent of the given string. Tab expansion and carriage return processing are
+	 * performed.
+	 */
+	public Dimension getTextExtent(String s) {
+		checkText();
+		org.eclipse.swt.graphics.Point extent = gc.textExtent(s);
+		return new Dimension(extent.x, extent.y);
+	}
+
+	/**
+	 * Returns the background color used for filling.
+	 *
+	 * @return the background color
+	 */
+	public Color getBackgroundColor() {
+		return m_currentState.background;
+	}
+
+	/**
+	 * Returns the font used to draw and fill text.
+	 *
+	 * @return the font
+	 */
+	public Font getFont() {
+		return m_currentState.font;
+	}
+
+	/**
+	 * Returns the font metrics for the current font.
+	 *
+	 * @return the font metrics
+	 */
+	public FontMetrics getFontMetrics() {
+		checkText();
+		return gc.getFontMetrics();
+	}
+
+	/**
+	 * Returns the foreground color used to draw lines and text.
+	 *
+	 * @return the foreground color
+	 */
+	public Color getForegroundColor() {
+		return m_currentState.foreground;
+	}
+
+	/**
+	 * Returns the line style.
+	 *
+	 * @return the line style
+	 */
+	public int getLineStyle() {
+		return m_currentState.lineStyle;
+	}
+
+	/**
+	 * Returns the current line width.
+	 *
+	 * @return the line width
+	 */
+	public int getLineWidth() {
+		return m_currentState.lineWidth;
+	}
+
+	/**
+	 * Returns <code>true</code> if this graphics object should use XOR mode with painting.
+	 *
+	 * @return whether XOR mode is turned on
+	 */
+	public boolean getXORMode() {
+		return m_currentState.xor;
+	}
+
+	/**
+	 * Sets the background color.
+	 *
+	 * @param color
+	 *          the new background color
+	 */
+	public void setBackgroundColor(Color color) {
+		if (!m_currentState.background.equals(color)) {
+			m_currentState.background = color;
+		}
+	}
+
+	/**
+	 * Modifies the given rectangle to match the clip region and returns that rectangle.
+	 *
+	 * @param rectangle
+	 *          the rectangle to hold the clip region
+	 * @return the clip rectangle
+	 */
+	public Rectangle getClip() {
+		return new Rectangle(m_clipping);
+	}
+
+	/**
+	 * Sets the clip region to the given rectangle. Anything outside this rectangle will not be drawn.
+	 */
+	public void clipRect(Rectangle rectangle) {
+		m_clipping.intersect(rectangle);
+		m_currentState.clippingX = m_clipping.x + m_translateX;
+		m_currentState.clippingY = m_clipping.y + m_translateY;
+		m_currentState.clippingWidth = m_clipping.width;
+		m_currentState.clippingHeight = m_clipping.height;
+	}
+
+	/**
+	 * Sets the font.
+	 *
+	 * @param font
+	 *          the new font
+	 */
+	public void setFont(Font font) {
+		if (m_currentState.font != font) {
+			m_currentState.font = font;
+		}
+	}
+
+	/**
+	 * Sets the foreground color.
+	 *
+	 * @param color
+	 *          the new foreground color
+	 */
+	public void setForegroundColor(Color color) {
+		if (!m_currentState.foreground.equals(color)) {
+			m_currentState.foreground = color;
+		}
+	}
+
+	/**
+	 * Sets the line style.
+	 *
+	 * @param style
+	 *          the new style
+	 */
+	public void setLineStyle(int style) {
+		if (m_currentState.lineStyle != style) {
+			m_currentState.lineStyle = style;
+		}
+	}
+
+	/**
+	 * Sets the line width.
+	 *
+	 * @param width
+	 *          the new width
+	 */
+	public void setLineWidth(int width) {
+		if (m_currentState.lineWidth != width) {
+			m_currentState.lineWidth = width;
+		}
+	}
+
+	/**
+	 * Sets the XOR mode.
+	 *
+	 * @param b
+	 *          the new XOR mode
+	 */
+	public void setXORMode(boolean b) {
+		if (m_currentState.xor != b) {
+			m_currentState.xor = b;
+		}
+	}
+
+	/**
+	 * Translates this graphics object so that its origin is offset horizontally by <i>p.x</i> and
+	 * vertically by <i>p.y</i>.
+	 */
+	public final void translate(Point p) {
+		translate(p.x, p.y);
+	}
+
+	/**
+	 * Translates this graphics object so that its origin is offset horizontally by <i>dx</i> and
+	 * vertically by <i>dy</i>.
+	 *
+	 * @param dx
+	 *          the horizontal offset
+	 * @param dy
+	 *          the vertical offset
+	 */
+	public void translate(int dx, int dy) {
+		setTranslation(m_translateX + dx, m_translateY + dy);
+		m_clipping.x -= dx;
+		m_clipping.y -= dy;
+	}
+
+	/**
+	 * Sets the translation values of this to the given values
+	 *
+	 * @param x
+	 *          The x value
+	 * @param y
+	 *          The y value
+	 */
+	protected void setTranslation(int x, int y) {
+		m_translateX = m_currentState.translateX = x;
+		m_translateY = m_currentState.translateY = y;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Check state's
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * If the background color has changed, this change will be pushed to the GC. Also calls
+	 * {@link #checkGC()}.
+	 */
+	protected final void checkFill() {
+		if (!m_appliedState.background.equals(m_currentState.background)) {
+			gc.setBackground(m_appliedState.background = m_currentState.background);
+		}
+		checkGC();
+	}
+
+	/**
+	 * If the XOR or the clip region has change, these changes will be pushed to the GC.
+	 */
+	protected final void checkGC() {
+		if (m_appliedState.xor != m_currentState.xor) {
+			gc.setXORMode(m_appliedState.xor = m_currentState.xor);
+		}
+		if (m_appliedState.clippingX != m_currentState.clippingX
+				|| m_appliedState.clippingY != m_currentState.clippingY
+				|| m_appliedState.clippingWidth != m_currentState.clippingWidth
+				|| m_appliedState.clippingHeight != m_currentState.clippingHeight) {
+			gc.setClipping(
+					m_appliedState.clippingX = m_currentState.clippingX,
+					m_appliedState.clippingY = m_currentState.clippingY,
+					m_appliedState.clippingWidth = m_currentState.clippingWidth,
+					m_appliedState.clippingHeight = m_currentState.clippingHeight);
+		}
+	}
+
+	/**
+	 * If the line width, line style, foreground or background colors have changed, these changes will
+	 * be pushed to the GC. Also calls {@link #checkGC()}.
+	 */
+	protected final void checkPaint() {
+		checkGC();
+		if (!m_appliedState.foreground.equals(m_currentState.foreground)) {
+			gc.setForeground(m_appliedState.foreground = m_currentState.foreground);
+		}
+		if (m_appliedState.lineStyle != m_currentState.lineStyle) {
+			gc.setLineStyle(m_appliedState.lineStyle = m_currentState.lineStyle);
+		}
+		if (m_appliedState.lineWidth != m_currentState.lineWidth) {
+			gc.setLineWidth(m_appliedState.lineWidth = m_currentState.lineWidth);
+		}
+		if (!m_appliedState.background.equals(m_currentState.background)) {
+			gc.setBackground(m_appliedState.background = m_currentState.background);
+		}
+	}
+
+	/**
+	 * If the font has changed, this change will be pushed to the GC. Also calls {@link #checkPaint()}
+	 * and {@link #checkFill()}.
+	 */
+	protected final void checkText() {
+		checkPaint();
+		checkFill();
+		if (!m_appliedState.font.equals(m_currentState.font)) {
+			gc.setFont(m_appliedState.font = m_currentState.font);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// State
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Pushes the current state of this graphics object onto a stack.
+	 */
+	public void pushState() {
+		if (m_stackPointer < m_stack.size()) {
+			State state = m_stack.get(m_stackPointer);
+			state.fill(m_currentState);
+		} else {
+			m_stack.add(m_currentState.copy());
+		}
+		m_stackPointer++;
+	}
+
+	/**
+	 * Pops the previous state of this graphics object off the stack (if {@link #pushState()} has
+	 * previously been called) and restores the current state to that popped state.
+	 */
+	public void popState() {
+		restoreState(--m_stackPointer);
+	}
+
+	/**
+	 * Restores the previous state of this graphics object.
+	 */
+	public void restoreState() {
+		restoreState(m_stackPointer - 1);
+	}
+
+	/**
+	 * Sets all State information to that of the given State, called by restoreState()
+	 *
+	 * @param s
+	 *          the State
+	 */
+	private void restoreState(int index) {
+		State state = m_stack.get(index);
+		// restore graphics info
+		state.fillTo(this);
+		// restore translate
+		m_translateX = m_currentState.translateX = state.translateX;
+		m_translateY = m_currentState.translateY = state.translateY;
+		// restore absolute clipping
+		m_currentState.clippingX = state.clippingX;
+		m_currentState.clippingY = state.clippingY;
+		m_currentState.clippingWidth = state.clippingWidth;
+		m_currentState.clippingHeight = state.clippingHeight;
+		// restore clipping
+		m_clipping.x = state.clippingX - m_translateX;
+		m_clipping.y = state.clippingY - m_translateY;
+		m_clipping.width = state.clippingWidth;
+		m_clipping.height = state.clippingHeight;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// State inner class
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Contains the state variables of this SWTGraphics object
+	 */
+	private static class State {
+		/**
+		 * Background and foreground colors.
+		 */
+		public Color background;
+		public Color foreground;
+		/**
+		 * Clip values
+		 */
+		public int clippingX; // X and Y are absolute here.
+		public int clippingY;
+		public int clippingWidth;
+		public int clippingHeight;
+		/**
+		 * Font value.
+		 */
+		public Font font;
+		/**
+		 * Line values.
+		 */
+		public int lineWidth;
+		public int lineStyle;
+		public int translateX;
+		public int translateY;
+		/**
+		 * XOR value.
+		 */
+		public boolean xor;
+
+		/**
+		 * A clone of this instance.
+		 */
+		public State copy() {
+			return new State().fill(this);
+		}
+
+		/**
+		 * Copies all state information from the given State to this State.
+		 */
+		public State fill(State state) {
+			background = state.background;
+			foreground = state.foreground;
+			clippingX = state.clippingX;
+			clippingY = state.clippingY;
+			clippingWidth = state.clippingWidth;
+			clippingHeight = state.clippingHeight;
+			lineStyle = state.lineStyle;
+			lineWidth = state.lineWidth;
+			translateX = state.translateX;
+			translateY = state.translateY;
+			font = state.font;
+			xor = state.xor;
+			return this;
+		}
+
+		/**
+		 * Copies all state information from the given SWT {@link GC} to this State.
+		 */
+		public void fill(GC gc, Rectangle clipping) {
+			background = gc.getBackground();
+			foreground = gc.getForeground();
+			clippingX = clipping.x;
+			clippingY = clipping.y;
+			clippingWidth = clipping.width;
+			clippingHeight = clipping.height;
+			font = gc.getFont();
+			lineWidth = gc.getLineWidth();
+			lineStyle = gc.getLineStyle();
+			xor = gc.getXORMode();
+		}
+
+		public void fillTo(Graphics graphics) {
+			graphics.setBackgroundColor(background);
+			graphics.setForegroundColor(foreground);
+			graphics.setLineStyle(lineStyle);
+			graphics.setLineWidth(lineWidth);
+			graphics.setFont(font);
+			graphics.setXORMode(xor);
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/IColorConstants.java b/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/IColorConstants.java
index 2c5d14401..e5e7d0329 100644
--- a/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/IColorConstants.java
+++ b/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/IColorConstants.java
@@ -21,128 +21,128 @@
  * @coverage gef.draw2d
  */
 public interface IColorConstants {
-  /**
-   * System color used to paint highlight shadow areas.
-   */
-  Color buttonLightest = Utils.getSystemColor(SWT.COLOR_WIDGET_HIGHLIGHT_SHADOW);
-  /**
-   * System color used to paint background areas.
-   */
-  Color button = Utils.getSystemColor(SWT.COLOR_WIDGET_BACKGROUND);
-  /**
-   * System color used to paint normal shadow areas.
-   */
-  Color buttonDarker = Utils.getSystemColor(SWT.COLOR_WIDGET_NORMAL_SHADOW);
-  /**
-   * System color used to paint dark shadow areas.
-   */
-  Color buttonDarkest = Utils.getSystemColor(SWT.COLOR_WIDGET_DARK_SHADOW);
-  /**
-   * System color used to paint list background areas.
-   */
-  Color listBackground = Utils.getSystemColor(SWT.COLOR_LIST_BACKGROUND);
-  /**
-   * System color used to paint list foreground areas.
-   */
-  Color listForeground = Utils.getSystemColor(SWT.COLOR_LIST_FOREGROUND);
-  /**
-   * System color used to paint list selection area.
-   */
-  Color listSelection = Utils.getSystemColor(SWT.COLOR_LIST_SELECTION);
-  /**
-   * System color used to paint list selection text.
-   */
-  Color listSelectionText = Utils.getSystemColor(SWT.COLOR_LIST_SELECTION_TEXT);
-  /**
-   * System color used to paint background areas.
-   */
-  Color menuBackground = Utils.getSystemColor(SWT.COLOR_WIDGET_BACKGROUND);
-  /**
-   * System color used to paint foreground areas.
-   */
-  Color menuForeground = Utils.getSystemColor(SWT.COLOR_WIDGET_FOREGROUND);
-  /**
-   * System color used to paint list selection background areas.
-   */
-  Color menuBackgroundSelected = Utils.getSystemColor(SWT.COLOR_LIST_SELECTION);
-  /**
-   * System color used to paint list selected text.
-   */
-  Color menuForegroundSelected = Utils.getSystemColor(SWT.COLOR_LIST_SELECTION_TEXT);
-  /**
-   * System color used to paint title background areas.
-   */
-  Color titleBackground = Utils.getSystemColor(SWT.COLOR_TITLE_BACKGROUND);
-  /**
-   * System color used to paint title background gradient.
-   */
-  Color titleGradient = Utils.getSystemColor(SWT.COLOR_TITLE_BACKGROUND_GRADIENT);
-  /**
-   * System color used to paint title text.
-   */
-  Color titleForeground = Utils.getSystemColor(SWT.COLOR_TITLE_FOREGROUND);
-  /**
-   * System color used to paint inactive title text.
-   */
-  Color titleInactiveForeground = Utils.getSystemColor(SWT.COLOR_TITLE_INACTIVE_FOREGROUND);
-  /**
-   * System color used to paint inactive title text.
-   */
-  Color titleInactiveBackground = Utils.getSystemColor(SWT.COLOR_TITLE_INACTIVE_FOREGROUND);
-  /**
-   * System color used to paint inactive title text.
-   */
-  Color titleInactiveGradient = Utils.getSystemColor(SWT.COLOR_TITLE_INACTIVE_FOREGROUND);
-  /**
-   * System color used to paint tooltip text.
-   */
-  Color tooltipForeground = Utils.getSystemColor(SWT.COLOR_INFO_FOREGROUND);
-  /**
-   * System color used to paint tooltip background areas.
-   */
-  Color tooltipBackground = Utils.getSystemColor(SWT.COLOR_INFO_BACKGROUND);
-  /**
-   * Miscellaneous colors.
-   */
-  Color white = new Color(null, 255, 255, 255);
-  Color lightGray = new Color(null, 192, 192, 192);
-  Color gray = new Color(null, 128, 128, 128);
-  Color darkGray = new Color(null, 64, 64, 64);
-  Color black = new Color(null, 0, 0, 0);
-  Color red = new Color(null, 255, 0, 0);
-  Color orange = new Color(null, 255, 196, 0);
-  Color yellow = new Color(null, 255, 255, 0);
-  Color green = new Color(null, 0, 255, 0);
-  Color lightGreen = new Color(null, 96, 255, 96);
-  Color darkGreen = new Color(null, 0, 127, 0);
-  Color cyan = new Color(null, 0, 255, 255);
-  Color lightBlue = new Color(null, 127, 127, 255);
-  Color blue = new Color(null, 0, 0, 255);
-  Color darkBlue = new Color(null, 0, 0, 127);
-  Color ghostFillColor = new Color(null, 31, 31, 31);
+	/**
+	 * System color used to paint highlight shadow areas.
+	 */
+	Color buttonLightest = Utils.getSystemColor(SWT.COLOR_WIDGET_HIGHLIGHT_SHADOW);
+	/**
+	 * System color used to paint background areas.
+	 */
+	Color button = Utils.getSystemColor(SWT.COLOR_WIDGET_BACKGROUND);
+	/**
+	 * System color used to paint normal shadow areas.
+	 */
+	Color buttonDarker = Utils.getSystemColor(SWT.COLOR_WIDGET_NORMAL_SHADOW);
+	/**
+	 * System color used to paint dark shadow areas.
+	 */
+	Color buttonDarkest = Utils.getSystemColor(SWT.COLOR_WIDGET_DARK_SHADOW);
+	/**
+	 * System color used to paint list background areas.
+	 */
+	Color listBackground = Utils.getSystemColor(SWT.COLOR_LIST_BACKGROUND);
+	/**
+	 * System color used to paint list foreground areas.
+	 */
+	Color listForeground = Utils.getSystemColor(SWT.COLOR_LIST_FOREGROUND);
+	/**
+	 * System color used to paint list selection area.
+	 */
+	Color listSelection = Utils.getSystemColor(SWT.COLOR_LIST_SELECTION);
+	/**
+	 * System color used to paint list selection text.
+	 */
+	Color listSelectionText = Utils.getSystemColor(SWT.COLOR_LIST_SELECTION_TEXT);
+	/**
+	 * System color used to paint background areas.
+	 */
+	Color menuBackground = Utils.getSystemColor(SWT.COLOR_WIDGET_BACKGROUND);
+	/**
+	 * System color used to paint foreground areas.
+	 */
+	Color menuForeground = Utils.getSystemColor(SWT.COLOR_WIDGET_FOREGROUND);
+	/**
+	 * System color used to paint list selection background areas.
+	 */
+	Color menuBackgroundSelected = Utils.getSystemColor(SWT.COLOR_LIST_SELECTION);
+	/**
+	 * System color used to paint list selected text.
+	 */
+	Color menuForegroundSelected = Utils.getSystemColor(SWT.COLOR_LIST_SELECTION_TEXT);
+	/**
+	 * System color used to paint title background areas.
+	 */
+	Color titleBackground = Utils.getSystemColor(SWT.COLOR_TITLE_BACKGROUND);
+	/**
+	 * System color used to paint title background gradient.
+	 */
+	Color titleGradient = Utils.getSystemColor(SWT.COLOR_TITLE_BACKGROUND_GRADIENT);
+	/**
+	 * System color used to paint title text.
+	 */
+	Color titleForeground = Utils.getSystemColor(SWT.COLOR_TITLE_FOREGROUND);
+	/**
+	 * System color used to paint inactive title text.
+	 */
+	Color titleInactiveForeground = Utils.getSystemColor(SWT.COLOR_TITLE_INACTIVE_FOREGROUND);
+	/**
+	 * System color used to paint inactive title text.
+	 */
+	Color titleInactiveBackground = Utils.getSystemColor(SWT.COLOR_TITLE_INACTIVE_FOREGROUND);
+	/**
+	 * System color used to paint inactive title text.
+	 */
+	Color titleInactiveGradient = Utils.getSystemColor(SWT.COLOR_TITLE_INACTIVE_FOREGROUND);
+	/**
+	 * System color used to paint tooltip text.
+	 */
+	Color tooltipForeground = Utils.getSystemColor(SWT.COLOR_INFO_FOREGROUND);
+	/**
+	 * System color used to paint tooltip background areas.
+	 */
+	Color tooltipBackground = Utils.getSystemColor(SWT.COLOR_INFO_BACKGROUND);
+	/**
+	 * Miscellaneous colors.
+	 */
+	Color white = new Color(null, 255, 255, 255);
+	Color lightGray = new Color(null, 192, 192, 192);
+	Color gray = new Color(null, 128, 128, 128);
+	Color darkGray = new Color(null, 64, 64, 64);
+	Color black = new Color(null, 0, 0, 0);
+	Color red = new Color(null, 255, 0, 0);
+	Color orange = new Color(null, 255, 196, 0);
+	Color yellow = new Color(null, 255, 255, 0);
+	Color green = new Color(null, 0, 255, 0);
+	Color lightGreen = new Color(null, 96, 255, 96);
+	Color darkGreen = new Color(null, 0, 127, 0);
+	Color cyan = new Color(null, 0, 255, 255);
+	Color lightBlue = new Color(null, 127, 127, 255);
+	Color blue = new Color(null, 0, 0, 255);
+	Color darkBlue = new Color(null, 0, 0, 127);
+	Color ghostFillColor = new Color(null, 31, 31, 31);
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Internal helper.
-   */
-  public static class Utils {
-    /**
-     * Invokes {@link Display#getSystemColor(int)} in UI thread.
-     */
-    private static Color getSystemColor(final int id) {
-      final Color[] color = new Color[1];
-      final Display display = Display.getDefault();
-      display.syncExec(new Runnable() {
-        @Override
-        public void run() {
-          color[0] = display.getSystemColor(id);
-        }
-      });
-      return color[0];
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Internal helper.
+	 */
+	public static class Utils {
+		/**
+		 * Invokes {@link Display#getSystemColor(int)} in UI thread.
+		 */
+		private static Color getSystemColor(final int id) {
+			final Color[] color = new Color[1];
+			final Display display = Display.getDefault();
+			display.syncExec(new Runnable() {
+				@Override
+				public void run() {
+					color[0] = display.getSystemColor(id);
+				}
+			});
+			return color[0];
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/ICursorConstants.java b/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/ICursorConstants.java
index 138a23454..754ceaabd 100644
--- a/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/ICursorConstants.java
+++ b/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/ICursorConstants.java
@@ -20,121 +20,121 @@
  * @coverage gef.draw2d
  */
 public interface ICursorConstants {
-  /**
-   * System arrow cursor.
-   */
-  Cursor ARROW = new Cursor(null, SWT.CURSOR_ARROW);
-  /**
-   * System resize north cursor.
-   */
-  Cursor SIZEN = new Cursor(null, SWT.CURSOR_SIZEN);
-  /**
-   * System resize north-east cursor.
-   */
-  Cursor SIZENE = new Cursor(null, SWT.CURSOR_SIZENE);
-  /**
-   * System resize east cursor.
-   */
-  Cursor SIZEE = new Cursor(null, SWT.CURSOR_SIZEE);
-  /**
-   * System resize south-east cursor.
-   */
-  Cursor SIZESE = new Cursor(null, SWT.CURSOR_SIZESE);
-  /**
-   * System resize south cursor.
-   */
-  Cursor SIZES = new Cursor(null, SWT.CURSOR_SIZES);
-  /**
-   * System resize south-west cursor.
-   */
-  Cursor SIZESW = new Cursor(null, SWT.CURSOR_SIZESW);
-  /**
-   * System resize west cursor.
-   */
-  Cursor SIZEW = new Cursor(null, SWT.CURSOR_SIZEW);
-  /**
-   * System resize north-west cursor.
-   */
-  Cursor SIZENW = new Cursor(null, SWT.CURSOR_SIZENW);
-  /**
-   * System resize north-south cursor
-   */
-  Cursor SIZENS = new Cursor(null, SWT.CURSOR_SIZENS);
-  /**
-   * System resize west-east cursor
-   */
-  Cursor SIZEWE = new Cursor(null, SWT.CURSOR_SIZEWE);
-  /**
-   * System app startup cursor.
-   */
-  Cursor APPSTARTING = new Cursor(null, SWT.CURSOR_APPSTARTING);
-  /**
-   * System cross hair cursor.
-   */
-  Cursor CROSS = new Cursor(null, SWT.CURSOR_CROSS);
-  /**
-   * System hand cursor.
-   */
-  Cursor HAND = new Cursor(null, SWT.CURSOR_HAND);
-  /**
-   * System help cursor.
-   */
-  Cursor HELP = new Cursor(null, SWT.CURSOR_HELP);
-  /**
-   * System i-beam cursor.
-   */
-  Cursor IBEAM = new Cursor(null, SWT.CURSOR_IBEAM);
-  /**
-   * System "not allowed" cursor.
-   */
-  Cursor NO = new Cursor(null, SWT.CURSOR_NO);
-  /**
-   * System resize all directions cursor.
-   */
-  Cursor SIZEALL = new Cursor(null, SWT.CURSOR_SIZEALL);
-  /**
-   * System resize north-east-south-west cursor.
-   */
-  Cursor SIZENESW = new Cursor(null, SWT.CURSOR_SIZENESW);
-  /**
-   * System resize north-west-south-east cursor.
-   */
-  Cursor SIZENWSE = new Cursor(null, SWT.CURSOR_SIZENWSE);
-  /**
-   * System up arrow cursor.
-   */
-  Cursor UPARROW = new Cursor(null, SWT.CURSOR_UPARROW);
-  /**
-   * System wait cursor.
-   */
-  Cursor WAIT = new Cursor(null, SWT.CURSOR_WAIT);
+	/**
+	 * System arrow cursor.
+	 */
+	Cursor ARROW = new Cursor(null, SWT.CURSOR_ARROW);
+	/**
+	 * System resize north cursor.
+	 */
+	Cursor SIZEN = new Cursor(null, SWT.CURSOR_SIZEN);
+	/**
+	 * System resize north-east cursor.
+	 */
+	Cursor SIZENE = new Cursor(null, SWT.CURSOR_SIZENE);
+	/**
+	 * System resize east cursor.
+	 */
+	Cursor SIZEE = new Cursor(null, SWT.CURSOR_SIZEE);
+	/**
+	 * System resize south-east cursor.
+	 */
+	Cursor SIZESE = new Cursor(null, SWT.CURSOR_SIZESE);
+	/**
+	 * System resize south cursor.
+	 */
+	Cursor SIZES = new Cursor(null, SWT.CURSOR_SIZES);
+	/**
+	 * System resize south-west cursor.
+	 */
+	Cursor SIZESW = new Cursor(null, SWT.CURSOR_SIZESW);
+	/**
+	 * System resize west cursor.
+	 */
+	Cursor SIZEW = new Cursor(null, SWT.CURSOR_SIZEW);
+	/**
+	 * System resize north-west cursor.
+	 */
+	Cursor SIZENW = new Cursor(null, SWT.CURSOR_SIZENW);
+	/**
+	 * System resize north-south cursor
+	 */
+	Cursor SIZENS = new Cursor(null, SWT.CURSOR_SIZENS);
+	/**
+	 * System resize west-east cursor
+	 */
+	Cursor SIZEWE = new Cursor(null, SWT.CURSOR_SIZEWE);
+	/**
+	 * System app startup cursor.
+	 */
+	Cursor APPSTARTING = new Cursor(null, SWT.CURSOR_APPSTARTING);
+	/**
+	 * System cross hair cursor.
+	 */
+	Cursor CROSS = new Cursor(null, SWT.CURSOR_CROSS);
+	/**
+	 * System hand cursor.
+	 */
+	Cursor HAND = new Cursor(null, SWT.CURSOR_HAND);
+	/**
+	 * System help cursor.
+	 */
+	Cursor HELP = new Cursor(null, SWT.CURSOR_HELP);
+	/**
+	 * System i-beam cursor.
+	 */
+	Cursor IBEAM = new Cursor(null, SWT.CURSOR_IBEAM);
+	/**
+	 * System "not allowed" cursor.
+	 */
+	Cursor NO = new Cursor(null, SWT.CURSOR_NO);
+	/**
+	 * System resize all directions cursor.
+	 */
+	Cursor SIZEALL = new Cursor(null, SWT.CURSOR_SIZEALL);
+	/**
+	 * System resize north-east-south-west cursor.
+	 */
+	Cursor SIZENESW = new Cursor(null, SWT.CURSOR_SIZENESW);
+	/**
+	 * System resize north-west-south-east cursor.
+	 */
+	Cursor SIZENWSE = new Cursor(null, SWT.CURSOR_SIZENWSE);
+	/**
+	 * System up arrow cursor.
+	 */
+	Cursor UPARROW = new Cursor(null, SWT.CURSOR_UPARROW);
+	/**
+	 * System wait cursor.
+	 */
+	Cursor WAIT = new Cursor(null, SWT.CURSOR_WAIT);
 
-  /**
-   * Returns the cursor corresponding to the given direction.
-   */
-  class Directional implements IPositionConstants {
-    public static final Cursor getCursor(int direction) {
-      switch (direction) {
-        case NORTH :
-          return SIZEN;
-        case SOUTH :
-          return SIZES;
-        case EAST :
-          return SIZEE;
-        case WEST :
-          return SIZEW;
-        case SOUTH_EAST :
-          return SIZESE;
-        case SOUTH_WEST :
-          return SIZESW;
-        case NORTH_EAST :
-          return SIZENE;
-        case NORTH_WEST :
-          return SIZENW;
-        default :
-          break;
-      }
-      return null;
-    }
-  }
+	/**
+	 * Returns the cursor corresponding to the given direction.
+	 */
+	class Directional implements IPositionConstants {
+		public static final Cursor getCursor(int direction) {
+			switch (direction) {
+			case NORTH :
+				return SIZEN;
+			case SOUTH :
+				return SIZES;
+			case EAST :
+				return SIZEE;
+			case WEST :
+				return SIZEW;
+			case SOUTH_EAST :
+				return SIZESE;
+			case SOUTH_WEST :
+				return SIZESW;
+			case NORTH_EAST :
+				return SIZENE;
+			case NORTH_WEST :
+				return SIZENW;
+			default :
+				break;
+			}
+			return null;
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/ILocator.java b/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/ILocator.java
index dc03b38e4..5132f4fec 100644
--- a/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/ILocator.java
+++ b/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/ILocator.java
@@ -17,8 +17,8 @@
  * @coverage gef.draw2d
  */
 public interface ILocator {
-  /**
-   * Relocates the given {@link Figure}.
-   */
-  void relocate(Figure target);
+	/**
+	 * Relocates the given {@link Figure}.
+	 */
+	void relocate(Figure target);
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/IPositionConstants.java b/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/IPositionConstants.java
index acf403296..0759413a6 100644
--- a/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/IPositionConstants.java
+++ b/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/IPositionConstants.java
@@ -15,84 +15,84 @@
  * @coverage gef.draw2d
  */
 public interface IPositionConstants {
-  /**
-   * Left.
-   */
-  public static final int LEFT = 1;
-  /**
-   * Center (Horizontal).
-   */
-  public static final int CENTER = 2;
-  /**
-   * Right.
-   */
-  public static final int RIGHT = 4;
-  /**
-   * Bit-wise OR of LEFT, CENTER, and RIGHT.
-   */
-  public static final int LEFT_CENTER_RIGHT = LEFT | CENTER | RIGHT;
-  /**
-   * Top.
-   */
-  public static final int TOP = 8;
-  /**
-   * Middle (Vertical).
-   */
-  public static final int MIDDLE = 16;
-  /**
-   * Bottom.
-   */
-  public static final int BOTTOM = 32;
-  /**
-   * Baseline.
-   */
-  public static final int BASELINE = 64;
-  /**
-   * Bit-wise OR of TOP, MIDDLE, and BOTTOM.
-   */
-  public static final int TOP_MIDDLE_BOTTOM = TOP | MIDDLE | BOTTOM;
-  /**
-   * None.
-   */
-  int NONE = 0;
-  /**
-   * North.
-   */
-  int NORTH = 1 << 0;
-  /**
-   * South.
-   */
-  int SOUTH = 1 << 2;
-  /**
-   * West.
-   */
-  int WEST = 1 << 3;
-  /**
-   * East.
-   */
-  int EAST = 1 << 4;
-  /**
-   * North-East: a bit-wise OR of {@link #NORTH} and {@link #EAST}
-   */
-  int NORTH_EAST = NORTH | EAST;
-  /**
-   * North-West: a bit-wise OR of {@link #NORTH} and {@link #WEST}
-   */
-  int NORTH_WEST = NORTH | WEST;
-  /**
-   * South-East: a bit-wise OR of {@link #SOUTH} and {@link #EAST}
-   */
-  int SOUTH_EAST = SOUTH | EAST;
-  /**
-   * South-West: a bit-wise OR of {@link #SOUTH} and {@link #WEST}
-   */
-  int SOUTH_WEST = SOUTH | WEST;
-  /**
-   * North-South: a bit-wise OR of {@link #NORTH} and {@link #SOUTH}
-   */
-  int NORTH_SOUTH = NORTH | SOUTH;
-  /**
-   * East-West: a bit-wise OR of {@link #EAST} and {@link #WEST}
-   */
-  int EAST_WEST = EAST | WEST;
+	/**
+	 * Left.
+	 */
+	public static final int LEFT = 1;
+	/**
+	 * Center (Horizontal).
+	 */
+	public static final int CENTER = 2;
+	/**
+	 * Right.
+	 */
+	public static final int RIGHT = 4;
+	/**
+	 * Bit-wise OR of LEFT, CENTER, and RIGHT.
+	 */
+	public static final int LEFT_CENTER_RIGHT = LEFT | CENTER | RIGHT;
+	/**
+	 * Top.
+	 */
+	public static final int TOP = 8;
+	/**
+	 * Middle (Vertical).
+	 */
+	public static final int MIDDLE = 16;
+	/**
+	 * Bottom.
+	 */
+	public static final int BOTTOM = 32;
+	/**
+	 * Baseline.
+	 */
+	public static final int BASELINE = 64;
+	/**
+	 * Bit-wise OR of TOP, MIDDLE, and BOTTOM.
+	 */
+	public static final int TOP_MIDDLE_BOTTOM = TOP | MIDDLE | BOTTOM;
+	/**
+	 * None.
+	 */
+	int NONE = 0;
+	/**
+	 * North.
+	 */
+	int NORTH = 1 << 0;
+	/**
+	 * South.
+	 */
+	int SOUTH = 1 << 2;
+	/**
+	 * West.
+	 */
+	int WEST = 1 << 3;
+	/**
+	 * East.
+	 */
+	int EAST = 1 << 4;
+	/**
+	 * North-East: a bit-wise OR of {@link #NORTH} and {@link #EAST}
+	 */
+	int NORTH_EAST = NORTH | EAST;
+	/**
+	 * North-West: a bit-wise OR of {@link #NORTH} and {@link #WEST}
+	 */
+	int NORTH_WEST = NORTH | WEST;
+	/**
+	 * South-East: a bit-wise OR of {@link #SOUTH} and {@link #EAST}
+	 */
+	int SOUTH_EAST = SOUTH | EAST;
+	/**
+	 * South-West: a bit-wise OR of {@link #SOUTH} and {@link #WEST}
+	 */
+	int SOUTH_WEST = SOUTH | WEST;
+	/**
+	 * North-South: a bit-wise OR of {@link #NORTH} and {@link #SOUTH}
+	 */
+	int NORTH_SOUTH = NORTH | SOUTH;
+	/**
+	 * East-West: a bit-wise OR of {@link #EAST} and {@link #WEST}
+	 */
+	int EAST_WEST = EAST | WEST;
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/Layer.java b/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/Layer.java
index 9c3256a98..5c38d8524 100644
--- a/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/Layer.java
+++ b/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/Layer.java
@@ -21,60 +21,60 @@
  * @coverage gef.draw2d
  */
 public class Layer extends Figure {
-  private final String m_name;
+	private final String m_name;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public Layer(String name) {
-    m_name = name;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public Layer(String name) {
+		m_name = name;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Bounds
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Direct set bounds from {@link IRootFigure} without notification.
-   */
-  @Override
-  public void setBounds(Rectangle bounds) {
-    getBounds().setBounds(bounds);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Bounds
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Direct set bounds from {@link IRootFigure} without notification.
+	 */
+	@Override
+	public void setBounds(Rectangle bounds) {
+		getBounds().setBounds(bounds);
+	}
 
-  /**
-   * If children not contains given point <code>(x, y)</code> then {@link Layer} just as not
-   * contains it.
-   */
-  @Override
-  public boolean containsPoint(int x, int y) {
-    for (Figure childFigure : getChildren()) {
-      if (childFigure.containsPoint(x, y)) {
-        return true;
-      }
-    }
-    return false;
-  }
+	/**
+	 * If children not contains given point <code>(x, y)</code> then {@link Layer} just as not
+	 * contains it.
+	 */
+	@Override
+	public boolean containsPoint(int x, int y) {
+		for (Figure childFigure : getChildren()) {
+			if (childFigure.containsPoint(x, y)) {
+				return true;
+			}
+		}
+		return false;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Properties
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Return identification name.
-   */
-  public String getName() {
-    return m_name;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Properties
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Return identification name.
+	 */
+	public String getName() {
+		return m_name;
+	}
 
-  /**
-   * For this figure opaque is missing.
-   */
-  @Override
-  public void setOpaque(boolean opaque) {
-  }
+	/**
+	 * For this figure opaque is missing.
+	 */
+	@Override
+	public void setOpaque(boolean opaque) {
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/Polyline.java b/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/Polyline.java
index 88ab8e5cd..489bb19b1 100644
--- a/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/Polyline.java
+++ b/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/Polyline.java
@@ -20,283 +20,283 @@
  * @coverage gef.draw2d
  */
 public class Polyline extends Figure {
-  private boolean m_xorMode;
-  private int m_lineStyle = SWT.LINE_SOLID;
-  private int m_lineWidth = 1;
-  private PointList m_points = new PointList();
-  private Rectangle m_pointsBounds;
+	private boolean m_xorMode;
+	private int m_lineStyle = SWT.LINE_SOLID;
+	private int m_lineWidth = 1;
+	private PointList m_points = new PointList();
+	private Rectangle m_pointsBounds;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Add/Remove/Get Point's
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds the passed point to the {@link Polyline}.
-   */
-  public void addPoint(Point point) {
-    m_points.addPoint(point);
-    resetState();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Add/Remove/Get Point's
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds the passed point to the {@link Polyline}.
+	 */
+	public void addPoint(Point point) {
+		m_points.addPoint(point);
+		resetState();
+	}
 
-  /**
-   * Inserts a given point at a specified index in the {@link Polyline}.
-   */
-  public void insertPoint(Point point, int index) {
-    m_points.insertPoint(point, index);
-    resetState();
-  }
+	/**
+	 * Inserts a given point at a specified index in the {@link Polyline}.
+	 */
+	public void insertPoint(Point point, int index) {
+		m_points.insertPoint(point, index);
+		resetState();
+	}
 
-  /**
-   * Removes a point from the {@link Polyline}.
-   */
-  public void removePoint(int index) {
-    m_points.removePoint(index);
-    resetState();
-  }
+	/**
+	 * Removes a point from the {@link Polyline}.
+	 */
+	public void removePoint(int index) {
+		m_points.removePoint(index);
+		resetState();
+	}
 
-  /**
-   * Erases the {@link Polyline} and removes all of its {@link Point Points}.
-   */
-  public void removeAllPoints() {
-    m_points.removeAllPoints();
-    resetState();
-  }
+	/**
+	 * Erases the {@link Polyline} and removes all of its {@link Point Points}.
+	 */
+	public void removeAllPoints() {
+		m_points.removeAllPoints();
+		resetState();
+	}
 
-  /**
-   * Returns the points in this {@link Polyline} <B>by reference</B>. If the returned list is
-   * modified, this {@link Polyline} must be informed by calling {@link #setPoints(PointList)}.
-   * Failure to do so will result in layout and paint problems.
-   */
-  public PointList getPoints() {
-    return m_points;
-  }
+	/**
+	 * Returns the points in this {@link Polyline} <B>by reference</B>. If the returned list is
+	 * modified, this {@link Polyline} must be informed by calling {@link #setPoints(PointList)}.
+	 * Failure to do so will result in layout and paint problems.
+	 */
+	public PointList getPoints() {
+		return m_points;
+	}
 
-  /**
-   * Sets the list of points to be used by this polyline connection. Removes any previously existing
-   * points.
-   */
-  public void setPoints(PointList points) {
-    m_points = points;
-    resetState();
-  }
+	/**
+	 * Sets the list of points to be used by this polyline connection. Removes any previously existing
+	 * points.
+	 */
+	public void setPoints(PointList points) {
+		m_points = points;
+		resetState();
+	}
 
-  /**
-   * Returns the first point in the {@link Polyline}.
-   */
-  public Point getStart() {
-    return m_points.getFirstPoint();
-  }
+	/**
+	 * Returns the first point in the {@link Polyline}.
+	 */
+	public Point getStart() {
+		return m_points.getFirstPoint();
+	}
 
-  /**
-   * Sets the start point of the {@link Polyline}.
-   */
-  public void setStart(Point point) {
-    if (m_points.size() == 0) {
-      addPoint(point);
-    } else {
-      setPoint(point, 0);
-    }
-  }
+	/**
+	 * Sets the start point of the {@link Polyline}.
+	 */
+	public void setStart(Point point) {
+		if (m_points.size() == 0) {
+			addPoint(point);
+		} else {
+			setPoint(point, 0);
+		}
+	}
 
-  /**
-   * Sets the end point of the {@link Polyline}.
-   */
-  public void setEnd(Point point) {
-    int size = m_points.size();
-    if (size < 2) {
-      addPoint(point);
-    } else {
-      setPoint(point, size - 1);
-    }
-  }
+	/**
+	 * Sets the end point of the {@link Polyline}.
+	 */
+	public void setEnd(Point point) {
+		int size = m_points.size();
+		if (size < 2) {
+			addPoint(point);
+		} else {
+			setPoint(point, size - 1);
+		}
+	}
 
-  /**
-   * Returns the last point in the {@link Polyline}.
-   */
-  public Point getEnd() {
-    return m_points.getLastPoint();
-  }
+	/**
+	 * Returns the last point in the {@link Polyline}.
+	 */
+	public Point getEnd() {
+		return m_points.getLastPoint();
+	}
 
-  /**
-   * Sets the points at both extremes of the {@link Polyline}.
-   */
-  public void setEndpoints(Point start, Point end) {
-    setStart(start);
-    setEnd(end);
-  }
+	/**
+	 * Sets the points at both extremes of the {@link Polyline}.
+	 */
+	public void setEndpoints(Point start, Point end) {
+		setStart(start);
+		setEnd(end);
+	}
 
-  /**
-   * Sets the point at <code>index</code> to the {@link Point} <code>pt</code>. Calling this method
-   * results in a recalculation of the polyline's bounding box. If you're going to set multiple
-   * Points, use {@link #setPoints(PointList)}.
-   */
-  public void setPoint(Point point, int index) {
-    m_points.setPoint(point, index);
-    resetState();
-  }
+	/**
+	 * Sets the point at <code>index</code> to the {@link Point} <code>pt</code>. Calling this method
+	 * results in a recalculation of the polyline's bounding box. If you're going to set multiple
+	 * Points, use {@link #setPoints(PointList)}.
+	 */
+	public void setPoint(Point point, int index) {
+		m_points.setPoint(point, index);
+		resetState();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Bounds
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Rectangle getBounds() {
-    Rectangle bounds = super.getBounds();
-    if (m_pointsBounds != m_points.getBounds()) {
-      m_pointsBounds = m_points.getBounds();
-      bounds.setBounds(m_pointsBounds);
-      bounds.expand(m_lineWidth / 2, m_lineWidth / 2);
-    }
-    return bounds;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Bounds
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Rectangle getBounds() {
+		Rectangle bounds = super.getBounds();
+		if (m_pointsBounds != m_points.getBounds()) {
+			m_pointsBounds = m_points.getBounds();
+			bounds.setBounds(m_pointsBounds);
+			bounds.expand(m_lineWidth / 2, m_lineWidth / 2);
+		}
+		return bounds;
+	}
 
-  /**
-   * For this figure bounds is calculate value.
-   */
-  @Override
-  public void setBounds(Rectangle bounds) {
-  }
+	/**
+	 * For this figure bounds is calculate value.
+	 */
+	@Override
+	public void setBounds(Rectangle bounds) {
+	}
 
-  /**
-   * Returns <code>true</code> if the point <code>(x, y)</code> is contained within this
-   * {@link Figure}'s bounds. For {@link Polyline} check containts every polyline sections.
-   */
-  @Override
-  public boolean containsPoint(int x, int y) {
-    TEMP_BOUNDS.setBounds(getBounds());
-    int tolerance = m_lineWidth / 2 + 2;
-    TEMP_BOUNDS.expand(tolerance, tolerance);
-    if (!TEMP_BOUNDS.contains(x, y)) {
-      return false;
-    }
-    //
-    int points[] = m_points.toIntArray();
-    for (int index = 0; index < points.length - 3; index += 2) {
-      if (lineContainsPoint(
-          points[index],
-          points[index + 1],
-          points[index + 2],
-          points[index + 3],
-          x,
-          y,
-          tolerance)) {
-        return true;
-      }
-    }
-    return false;
-  }
+	/**
+	 * Returns <code>true</code> if the point <code>(x, y)</code> is contained within this
+	 * {@link Figure}'s bounds. For {@link Polyline} check containts every polyline sections.
+	 */
+	@Override
+	public boolean containsPoint(int x, int y) {
+		TEMP_BOUNDS.setBounds(getBounds());
+		int tolerance = m_lineWidth / 2 + 2;
+		TEMP_BOUNDS.expand(tolerance, tolerance);
+		if (!TEMP_BOUNDS.contains(x, y)) {
+			return false;
+		}
+		//
+		int points[] = m_points.toIntArray();
+		for (int index = 0; index < points.length - 3; index += 2) {
+			if (lineContainsPoint(
+					points[index],
+					points[index + 1],
+					points[index + 2],
+					points[index + 3],
+					x,
+					y,
+					tolerance)) {
+				return true;
+			}
+		}
+		return false;
+	}
 
-  private static final Rectangle TEMP_BOUNDS = new Rectangle();
+	private static final Rectangle TEMP_BOUNDS = new Rectangle();
 
-  //
-  private static final boolean lineContainsPoint(int x1,
-      int y1,
-      int x2,
-      int y2,
-      int px,
-      int py,
-      int tolerance) {
-    TEMP_BOUNDS.setBounds(x1, y1, 0, 0);
-    TEMP_BOUNDS.union(x2, y2);
-    TEMP_BOUNDS.expand(tolerance, tolerance);
-    //
-    if (!TEMP_BOUNDS.contains(px, py)) {
-      return false;
-    }
-    int result = 0;
-    // calculates the length squared of the cross product of two vectors, v1 & v2.
-    if (x1 != x2 && y1 != y2) {
-      int v1x = x2 - x1;
-      int v1y = y2 - y1;
-      int v2x = px - x1;
-      int v2y = py - y1;
-      int numerator = v2x * v1y - v1x * v2y;
-      int denominator = v1x * v1x + v1y * v1y;
-      result = (int) ((long) numerator * numerator / denominator);
-    }
-    // if it is the same point, and it passes the bounding box test,
-    // the result is always true.
-    return result <= tolerance * tolerance;
-  }
+	//
+	private static final boolean lineContainsPoint(int x1,
+			int y1,
+			int x2,
+			int y2,
+			int px,
+			int py,
+			int tolerance) {
+		TEMP_BOUNDS.setBounds(x1, y1, 0, 0);
+		TEMP_BOUNDS.union(x2, y2);
+		TEMP_BOUNDS.expand(tolerance, tolerance);
+		//
+		if (!TEMP_BOUNDS.contains(px, py)) {
+			return false;
+		}
+		int result = 0;
+		// calculates the length squared of the cross product of two vectors, v1 & v2.
+		if (x1 != x2 && y1 != y2) {
+			int v1x = x2 - x1;
+			int v1y = y2 - y1;
+			int v2x = px - x1;
+			int v2y = py - y1;
+			int numerator = v2x * v1y - v1x * v2y;
+			int denominator = v1x * v1x + v1y * v1y;
+			result = (int) ((long) numerator * numerator / denominator);
+		}
+		// if it is the same point, and it passes the bounding box test,
+		// the result is always true.
+		return result <= tolerance * tolerance;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Figure
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * For this figure opaque is missing.
-   */
-  @Override
-  public void setOpaque(boolean opaque) {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Figure
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * For this figure opaque is missing.
+	 */
+	@Override
+	public void setOpaque(boolean opaque) {
+	}
 
-  @Override
-  protected void paintClientArea(Graphics graphics) {
-    Rectangle bounds = super.getBounds();
-    graphics.translate(-bounds.x, -bounds.y);
-    graphics.setXORMode(m_xorMode);
-    graphics.setLineStyle(m_lineStyle);
-    graphics.setLineWidth(m_lineWidth);
-    graphics.drawPolyline(m_points);
-  }
+	@Override
+	protected void paintClientArea(Graphics graphics) {
+		Rectangle bounds = super.getBounds();
+		graphics.translate(-bounds.x, -bounds.y);
+		graphics.setXORMode(m_xorMode);
+		graphics.setLineStyle(m_lineStyle);
+		graphics.setLineWidth(m_lineWidth);
+		graphics.drawPolyline(m_points);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Properties
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Returns the line style.
-   */
-  public int getLineStyle() {
-    return m_lineStyle;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Properties
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Returns the line style.
+	 */
+	public int getLineStyle() {
+		return m_lineStyle;
+	}
 
-  /**
-   * Sets the style of line.
-   */
-  public void setLineStyle(int lineStyle) {
-    if (m_lineStyle != lineStyle) {
-      m_lineStyle = lineStyle;
-      repaint();
-    }
-  }
+	/**
+	 * Sets the style of line.
+	 */
+	public void setLineStyle(int lineStyle) {
+		if (m_lineStyle != lineStyle) {
+			m_lineStyle = lineStyle;
+			repaint();
+		}
+	}
 
-  /**
-   * Returns the line width.
-   */
-  public int getLineWidth() {
-    return m_lineWidth;
-  }
+	/**
+	 * Returns the line width.
+	 */
+	public int getLineWidth() {
+		return m_lineWidth;
+	}
 
-  /**
-   * Sets the line width.
-   */
-  public void setLineWidth(int lineWidth) {
-    if (m_lineWidth != lineWidth) {
-      m_lineWidth = lineWidth;
-      m_pointsBounds = null;
-      resetState();
-    }
-  }
+	/**
+	 * Sets the line width.
+	 */
+	public void setLineWidth(int lineWidth) {
+		if (m_lineWidth != lineWidth) {
+			m_lineWidth = lineWidth;
+			m_pointsBounds = null;
+			resetState();
+		}
+	}
 
-  /**
-   * Gets whether XOR based outline should be used for this {@link Polyline}.
-   */
-  public boolean isXorMode() {
-    return m_xorMode;
-  }
+	/**
+	 * Gets whether XOR based outline should be used for this {@link Polyline}.
+	 */
+	public boolean isXorMode() {
+		return m_xorMode;
+	}
 
-  /**
-   * Sets whether XOR based outline should be used for this {@link Polyline}.
-   */
-  public void setXorMode(boolean xorMode) {
-    if (m_xorMode != xorMode) {
-      m_xorMode = xorMode;
-      repaint();
-    }
-  }
+	/**
+	 * Sets whether XOR based outline should be used for this {@link Polyline}.
+	 */
+	public void setXorMode(boolean xorMode) {
+		if (m_xorMode != xorMode) {
+			m_xorMode = xorMode;
+			repaint();
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/RectangleFigure.java b/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/RectangleFigure.java
index 239221599..74b7996bc 100644
--- a/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/RectangleFigure.java
+++ b/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/RectangleFigure.java
@@ -17,13 +17,13 @@
  * @coverage gef.draw2d
  */
 public final class RectangleFigure extends Figure {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Paint
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void paintClientArea(Graphics graphics) {
-    graphics.drawRectangle(getClientArea().getResized(-1, -1));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Paint
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void paintClientArea(Graphics graphics) {
+		graphics.drawRectangle(getClientArea().getResized(-1, -1));
+	}
 }
diff --git a/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/RelativeLocator.java b/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/RelativeLocator.java
index f38929346..f8c05e222 100644
--- a/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/RelativeLocator.java
+++ b/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/RelativeLocator.java
@@ -19,32 +19,32 @@
  * @coverage gef.draw2d
  */
 public final class RelativeLocator extends AbstractRelativeLocator {
-  private final Figure m_reference;
+	private final Figure m_reference;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public RelativeLocator(Figure reference, double relativeX, double relativeY) {
-    super(relativeX, relativeY);
-    m_reference = reference;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public RelativeLocator(Figure reference, double relativeX, double relativeY) {
+		super(relativeX, relativeY);
+		m_reference = reference;
+	}
 
-  public RelativeLocator(Figure reference, int location) {
-    super(location);
-    m_reference = reference;
-  }
+	public RelativeLocator(Figure reference, int location) {
+		super(location);
+		m_reference = reference;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AbstractRelativeLocator
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Rectangle getReferenceRectangle() {
-    Rectangle bounds = m_reference.getBounds().getCopy();
-    FigureUtils.translateFigureToAbsolute(m_reference, bounds);
-    return bounds;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AbstractRelativeLocator
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Rectangle getReferenceRectangle() {
+		Rectangle bounds = m_reference.getBounds().getCopy();
+		FigureUtils.translateFigureToAbsolute(m_reference, bounds);
+		return bounds;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/border/Border.java b/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/border/Border.java
index ad3294c33..9cf917861 100644
--- a/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/border/Border.java
+++ b/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/border/Border.java
@@ -24,44 +24,44 @@
  * @coverage gef.draw2d
  */
 public abstract class Border {
-  private final Insets m_insets;
+	private final Insets m_insets;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Constructor {@link Border} with border insets.
-   */
-  public Border(Insets insets) {
-    m_insets = insets;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Constructor {@link Border} with border insets.
+	 */
+	public Border(Insets insets) {
+		m_insets = insets;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Border
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Get border insets.
-   */
-  public Insets getInsets() {
-    return m_insets;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Border
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Get border insets.
+	 */
+	public Insets getInsets() {
+		return m_insets;
+	}
 
-  /**
-   * Paint border for <code>owner</code> {@link Figure}.
-   */
-  public final void paint(Figure owner, Graphics graphics) {
-    Rectangle bounds = owner.getBounds();
-    paint(bounds.width, bounds.height, graphics);
-  }
+	/**
+	 * Paint border for <code>owner</code> {@link Figure}.
+	 */
+	public final void paint(Figure owner, Graphics graphics) {
+		Rectangle bounds = owner.getBounds();
+		paint(bounds.width, bounds.height, graphics);
+	}
 
-  /**
-   * Paint border for {@link Figure}. Coordinate (0, 0) correspond with {@link Figure} (0, 0) and
-   * <code>onwerWidth</code>, <code>ownerHeight</code> correspond with {@link Figure}
-   * <code>width</code>, <code>height</code>.
-   */
-  protected abstract void paint(int ownerWidth, int ownerHeight, Graphics graphics);
+	/**
+	 * Paint border for {@link Figure}. Coordinate (0, 0) correspond with {@link Figure} (0, 0) and
+	 * <code>onwerWidth</code>, <code>ownerHeight</code> correspond with {@link Figure}
+	 * <code>width</code>, <code>height</code>.
+	 */
+	protected abstract void paint(int ownerWidth, int ownerHeight, Graphics graphics);
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/border/CompoundBorder.java b/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/border/CompoundBorder.java
index 38c326ed3..360dec724 100644
--- a/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/border/CompoundBorder.java
+++ b/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/border/CompoundBorder.java
@@ -22,88 +22,88 @@
  * @coverage gef.draw2d
  */
 public class CompoundBorder extends Border {
-  private final Border m_outer;
-  private final Border m_inner;
+	private final Border m_outer;
+	private final Border m_inner;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Constructs a default {@link CompoundBorder} with no borders under it.
-   */
-  public CompoundBorder() {
-    this(null, null);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Constructs a default {@link CompoundBorder} with no borders under it.
+	 */
+	public CompoundBorder() {
+		this(null, null);
+	}
 
-  /**
-   * Constructs a {@link CompoundBorder} with the two borders specified as input.
-   */
-  public CompoundBorder(Border outer, Border inner) {
-    super(null);
-    m_outer = outer;
-    m_inner = inner;
-  }
+	/**
+	 * Constructs a {@link CompoundBorder} with the two borders specified as input.
+	 */
+	public CompoundBorder(Border outer, Border inner) {
+		super(null);
+		m_outer = outer;
+		m_inner = inner;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Assess
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Returns the inner border of this {@link CompoundBorder}.
-   */
-  public Border getInnerBorder() {
-    return m_inner;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Assess
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Returns the inner border of this {@link CompoundBorder}.
+	 */
+	public Border getInnerBorder() {
+		return m_inner;
+	}
 
-  /**
-   * Returns the outer border of this {@link CompoundBorder}.
-   */
-  public Border getOuterBorder() {
-    return m_outer;
-  }
+	/**
+	 * Returns the outer border of this {@link CompoundBorder}.
+	 */
+	public Border getOuterBorder() {
+		return m_outer;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Border
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Get border insets.
-   */
-  @Override
-  public Insets getInsets() {
-    Insets insets = new Insets();
-    if (m_inner != null) {
-      insets.add(m_inner.getInsets());
-    }
-    if (m_outer != null) {
-      insets.add(m_outer.getInsets());
-    }
-    return insets;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Border
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Get border insets.
+	 */
+	@Override
+	public Insets getInsets() {
+		Insets insets = new Insets();
+		if (m_inner != null) {
+			insets.add(m_inner.getInsets());
+		}
+		if (m_outer != null) {
+			insets.add(m_outer.getInsets());
+		}
+		return insets;
+	}
 
-  @Override
-  protected void paint(int ownerWidth, int ownerHeight, Graphics graphics) {
-    if (m_outer != null) {
-      // paint outer
-      {
-        graphics.pushState();
-        m_outer.paint(ownerWidth, ownerHeight, graphics);
-        graphics.popState();
-      }
-      // update bounds for inner
-      {
-        Insets insets = m_outer.getInsets();
-        graphics.translate(insets.left, insets.top);
-        ownerWidth -= insets.getWidth();
-        ownerHeight -= insets.getHeight();
-      }
-    }
-    if (m_inner != null) {
-      m_inner.paint(ownerWidth, ownerHeight, graphics);
-    }
-  }
+	@Override
+	protected void paint(int ownerWidth, int ownerHeight, Graphics graphics) {
+		if (m_outer != null) {
+			// paint outer
+			{
+				graphics.pushState();
+				m_outer.paint(ownerWidth, ownerHeight, graphics);
+				graphics.popState();
+			}
+			// update bounds for inner
+			{
+				Insets insets = m_outer.getInsets();
+				graphics.translate(insets.left, insets.top);
+				ownerWidth -= insets.getWidth();
+				ownerHeight -= insets.getHeight();
+			}
+		}
+		if (m_inner != null) {
+			m_inner.paint(ownerWidth, ownerHeight, graphics);
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/border/LineBorder.java b/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/border/LineBorder.java
index 94b4bb6f0..0cffa8382 100644
--- a/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/border/LineBorder.java
+++ b/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/border/LineBorder.java
@@ -23,82 +23,82 @@
  * @coverage gef.draw2d
  */
 public class LineBorder extends Border {
-  private final Color m_color;
-  private final int m_width;
+	private final Color m_color;
+	private final int m_width;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Constructs a {@link LineBorder} with the specified color and of the specified width.
-   */
-  public LineBorder(Color color, int width) {
-    super(new Insets(width));
-    m_color = color;
-    m_width = width;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Constructs a {@link LineBorder} with the specified color and of the specified width.
+	 */
+	public LineBorder(Color color, int width) {
+		super(new Insets(width));
+		m_color = color;
+		m_width = width;
+	}
 
-  /**
-   * Constructs a default black {@link LineBorder} with a width of one pixel.
-   */
-  public LineBorder() {
-    this(null, 1);
-  }
+	/**
+	 * Constructs a default black {@link LineBorder} with a width of one pixel.
+	 */
+	public LineBorder() {
+		this(null, 1);
+	}
 
-  /**
-   * Constructs a black {@link LineBorder} with the specified width.
-   */
-  public LineBorder(int width) {
-    this(null, width);
-  }
+	/**
+	 * Constructs a black {@link LineBorder} with the specified width.
+	 */
+	public LineBorder(int width) {
+		this(null, width);
+	}
 
-  /**
-   * Constructs a {@link LineBorder} with the specified color and a width of 1 pixel.
-   */
-  public LineBorder(Color color) {
-    this(color, 1);
-  }
+	/**
+	 * Constructs a {@link LineBorder} with the specified color and a width of 1 pixel.
+	 */
+	public LineBorder(Color color) {
+		this(color, 1);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Properties
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Returns the line color of this border.
-   */
-  public Color getColor() {
-    return m_color;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Properties
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Returns the line color of this border.
+	 */
+	public Color getColor() {
+		return m_color;
+	}
 
-  /**
-   * Returns the line width of this border.
-   */
-  public int getWidth() {
-    return m_width;
-  }
+	/**
+	 * Returns the line width of this border.
+	 */
+	public int getWidth() {
+		return m_width;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Border
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void paint(int ownerWidth, int ownerHeight, Graphics graphics) {
-    // prepare border rectangle
-    Rectangle paintBorderRectangle = new Rectangle(0, 0, ownerWidth, ownerHeight);
-    if (m_width % 2 != 0) {
-      paintBorderRectangle.width--;
-      paintBorderRectangle.height--;
-    }
-    paintBorderRectangle.shrink(m_width / 2, m_width / 2);
-    // draw border
-    graphics.setLineWidth(m_width);
-    if (m_color != null) {
-      graphics.setForegroundColor(m_color);
-    }
-    graphics.drawRectangle(paintBorderRectangle);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Border
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void paint(int ownerWidth, int ownerHeight, Graphics graphics) {
+		// prepare border rectangle
+		Rectangle paintBorderRectangle = new Rectangle(0, 0, ownerWidth, ownerHeight);
+		if (m_width % 2 != 0) {
+			paintBorderRectangle.width--;
+			paintBorderRectangle.height--;
+		}
+		paintBorderRectangle.shrink(m_width / 2, m_width / 2);
+		// draw border
+		graphics.setLineWidth(m_width);
+		if (m_color != null) {
+			graphics.setForegroundColor(m_color);
+		}
+		graphics.drawRectangle(paintBorderRectangle);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/border/MarginBorder.java b/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/border/MarginBorder.java
index fbc6866a5..b2c23c230 100644
--- a/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/border/MarginBorder.java
+++ b/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/border/MarginBorder.java
@@ -21,34 +21,34 @@
  * @coverage gef.draw2d
  */
 public class MarginBorder extends Border {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Constructs a {@link MarginBorder} with dimensions specified by <i>insets</i>.
-   */
-  public MarginBorder(Insets insets) {
-    super(insets);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Constructs a {@link MarginBorder} with dimensions specified by <i>insets</i>.
+	 */
+	public MarginBorder(Insets insets) {
+		super(insets);
+	}
 
-  /**
-   * Constructs a {@link MarginBorder} with padding specified by the passed values.
-   */
-  public MarginBorder(int allsides) {
-    this(new Insets(allsides));
-  }
+	/**
+	 * Constructs a {@link MarginBorder} with padding specified by the passed values.
+	 */
+	public MarginBorder(int allsides) {
+		this(new Insets(allsides));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Border
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * This method does nothing, since this border is just for spacing.
-   */
-  @Override
-  protected void paint(int ownerWidth, int ownerHeight, Graphics graphics) {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Border
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * This method does nothing, since this border is just for spacing.
+	 */
+	@Override
+	protected void paint(int ownerWidth, int ownerHeight, Graphics graphics) {
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/events/IAncestorListener.java b/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/events/IAncestorListener.java
index e86fc5cfe..af3ad744e 100644
--- a/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/events/IAncestorListener.java
+++ b/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/events/IAncestorListener.java
@@ -20,8 +20,8 @@
  * @coverage gef.draw2d
  */
 public interface IAncestorListener {
-  /**
-   * Called when an ancestor has moved to a new location.
-   */
-  void ancestorMoved(Figure ancestor);
+	/**
+	 * Called when an ancestor has moved to a new location.
+	 */
+	void ancestorMoved(Figure ancestor);
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/events/IFigureListener.java b/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/events/IFigureListener.java
index fdfd003d1..e75e3a947 100644
--- a/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/events/IFigureListener.java
+++ b/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/events/IFigureListener.java
@@ -19,13 +19,13 @@
  * @coverage gef.draw2d
  */
 public interface IFigureListener {
-  /**
-   * Called when the given {@link Figure} has moved.
-   */
-  void figureMoved(Figure source);
+	/**
+	 * Called when the given {@link Figure} has moved.
+	 */
+	void figureMoved(Figure source);
 
-  /**
-   * Called when the given {@link Figure} has change parent.
-   */
-  void figureReparent(Figure source, Figure oldParent, Figure newParent);
+	/**
+	 * Called when the given {@link Figure} has change parent.
+	 */
+	void figureReparent(Figure source, Figure oldParent, Figure newParent);
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/events/IMouseListener.java b/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/events/IMouseListener.java
index d901946c3..52ced8d66 100644
--- a/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/events/IMouseListener.java
+++ b/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/events/IMouseListener.java
@@ -17,18 +17,18 @@
  * @coverage gef.draw2d
  */
 public interface IMouseListener {
-  /**
-   * Sent when a mouse button is pressed.
-   */
-  void mouseDown(MouseEvent event);
+	/**
+	 * Sent when a mouse button is pressed.
+	 */
+	void mouseDown(MouseEvent event);
 
-  /**
-   * Sent when a mouse button is released.
-   */
-  void mouseUp(MouseEvent event);
+	/**
+	 * Sent when a mouse button is released.
+	 */
+	void mouseUp(MouseEvent event);
 
-  /**
-   * Called when a mouse button has been double clicked.
-   */
-  void mouseDoubleClick(MouseEvent event);
+	/**
+	 * Called when a mouse button has been double clicked.
+	 */
+	void mouseDoubleClick(MouseEvent event);
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/events/IMouseMoveListener.java b/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/events/IMouseMoveListener.java
index 04c5f6cec..51ab21bf0 100644
--- a/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/events/IMouseMoveListener.java
+++ b/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/events/IMouseMoveListener.java
@@ -17,8 +17,8 @@
  * @coverage gef.draw2d
  */
 public interface IMouseMoveListener {
-  /**
-   * Sent when the mouse moves.
-   */
-  void mouseMove(MouseEvent event);
+	/**
+	 * Sent when the mouse moves.
+	 */
+	void mouseMove(MouseEvent event);
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/events/IMouseTrackListener.java b/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/events/IMouseTrackListener.java
index 3c96e9dbd..748e2b9f3 100644
--- a/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/events/IMouseTrackListener.java
+++ b/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/events/IMouseTrackListener.java
@@ -19,18 +19,18 @@
  * @coverage gef.draw2d
  */
 public interface IMouseTrackListener {
-  /**
-   * Sent when a mouse enters this {@link Figure}.
-   */
-  void mouseEnter(MouseEvent event);
+	/**
+	 * Sent when a mouse enters this {@link Figure}.
+	 */
+	void mouseEnter(MouseEvent event);
 
-  /**
-   * Sent when a mouse exists this {@link Figure}.
-   */
-  void mouseExit(MouseEvent event);
+	/**
+	 * Sent when a mouse exists this {@link Figure}.
+	 */
+	void mouseExit(MouseEvent event);
 
-  /**
-   * Sent when a mouse hovers this {@link Figure}.
-   */
-  void mouseHover(MouseEvent event);
+	/**
+	 * Sent when a mouse hovers this {@link Figure}.
+	 */
+	void mouseHover(MouseEvent event);
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/events/MouseEvent.java b/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/events/MouseEvent.java
index 4f1bcc5f4..1f0f9f49f 100644
--- a/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/events/MouseEvent.java
+++ b/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/events/MouseEvent.java
@@ -26,89 +26,89 @@
  * @coverage gef.draw2d
  */
 public final class MouseEvent {
-  /**
-   * the button that was pressed or released; 1 for the first button, 2 for the second button, and 3
-   * for the third button, etc.
-   */
-  public final int button;
-  /**
-   * the state of the keyboard modifier keys at the time the event was generated
-   */
-  public final int stateMask;
-  /**
-   * the widget-relative, x coordinate of the pointer at the time the mouse button was pressed or
-   * released
-   */
-  public final int x;
-  /**
-   * the widget-relative, y coordinate of the pointer at the time the mouse button was pressed or
-   * released
-   */
-  public final int y;
-  /**
-   * the {@link Figure} that issued the event
-   */
-  public final Figure source;
+	/**
+	 * the button that was pressed or released; 1 for the first button, 2 for the second button, and 3
+	 * for the third button, etc.
+	 */
+	public final int button;
+	/**
+	 * the state of the keyboard modifier keys at the time the event was generated
+	 */
+	public final int stateMask;
+	/**
+	 * the widget-relative, x coordinate of the pointer at the time the mouse button was pressed or
+	 * released
+	 */
+	public final int x;
+	/**
+	 * the widget-relative, y coordinate of the pointer at the time the mouse button was pressed or
+	 * released
+	 */
+	public final int y;
+	/**
+	 * the {@link Figure} that issued the event
+	 */
+	public final Figure source;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public MouseEvent(FigureCanvas canvas, org.eclipse.swt.events.MouseEvent event, Figure source) {
-    button = event.button;
-    stateMask = event.stateMask;
-    this.source = source;
-    //
-    Rectangle bounds = source.getBounds();
-    Point location = new Point(event.x - bounds.x, event.y - bounds.y);
-    location.x += canvas.getHorizontalScrollModel().getSelection();
-    location.y += canvas.getVerticalScrollModel().getSelection();
-    FigureUtils.translateAbsoluteToFigure(source, location);
-    //
-    x = location.x;
-    y = location.y;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public MouseEvent(FigureCanvas canvas, org.eclipse.swt.events.MouseEvent event, Figure source) {
+		button = event.button;
+		stateMask = event.stateMask;
+		this.source = source;
+		//
+		Rectangle bounds = source.getBounds();
+		Point location = new Point(event.x - bounds.x, event.y - bounds.y);
+		location.x += canvas.getHorizontalScrollModel().getSelection();
+		location.y += canvas.getVerticalScrollModel().getSelection();
+		FigureUtils.translateAbsoluteToFigure(source, location);
+		//
+		x = location.x;
+		y = location.y;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Consume
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private boolean m_consumed;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Consume
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private boolean m_consumed;
 
-  /**
-   * Marks this event as consumed so that it doesn't get passed on to other listeners.
-   */
-  public void consume() {
-    m_consumed = true;
-  }
+	/**
+	 * Marks this event as consumed so that it doesn't get passed on to other listeners.
+	 */
+	public void consume() {
+		m_consumed = true;
+	}
 
-  /**
-   * Return whether this event has been consumed.
-   */
-  public boolean isConsumed() {
-    return m_consumed;
-  }
+	/**
+	 * Return whether this event has been consumed.
+	 */
+	public boolean isConsumed() {
+		return m_consumed;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    StringBuffer buffer = new StringBuffer("MouseEvent{source=");
-    buffer.append(source);
-    buffer.append(" button=");
-    buffer.append(button);
-    buffer.append(" stateMask=");
-    buffer.append(stateMask);
-    buffer.append(" x=");
-    buffer.append(x);
-    buffer.append(" y=");
-    buffer.append(y);
-    buffer.append('}');
-    return buffer.toString();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		StringBuffer buffer = new StringBuffer("MouseEvent{source=");
+		buffer.append(source);
+		buffer.append(" button=");
+		buffer.append(button);
+		buffer.append(" stateMask=");
+		buffer.append(stateMask);
+		buffer.append(" x=");
+		buffer.append(x);
+		buffer.append(" y=");
+		buffer.append(y);
+		buffer.append('}');
+		return buffer.toString();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/internal/draw2d/CustomTooltipManager.java b/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/internal/draw2d/CustomTooltipManager.java
index 00cd2d94f..0faf79ed5 100644
--- a/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/internal/draw2d/CustomTooltipManager.java
+++ b/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/internal/draw2d/CustomTooltipManager.java
@@ -35,156 +35,156 @@
  * @coverage gef.draw2d
  */
 public final class CustomTooltipManager implements ICustomTooltipSite {
-  private final FigureCanvas m_canvas;
-  private final EventManager m_eventManager;
-  private Shell m_tooltipShell;
-  private Figure m_tooltipFigure;
+	private final FigureCanvas m_canvas;
+	private final EventManager m_eventManager;
+	private Shell m_tooltipShell;
+	private Figure m_tooltipFigure;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CustomTooltipManager(FigureCanvas canvas, EventManager eventManager) {
-    m_canvas = canvas;
-    m_eventManager = eventManager;
-    // tooltip show/hide behavior listeners
-    m_canvas.addMouseTrackListener(new MouseTrackListener() {
-      @Override
-      public void mouseHover(MouseEvent event) {
-        if (event.stateMask == 0
-            && (m_tooltipFigure == null || m_tooltipFigure != m_eventManager.getCursorFigure())) {
-          handleShowCustomTooltip(event.x, event.y);
-        }
-      }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CustomTooltipManager(FigureCanvas canvas, EventManager eventManager) {
+		m_canvas = canvas;
+		m_eventManager = eventManager;
+		// tooltip show/hide behavior listeners
+		m_canvas.addMouseTrackListener(new MouseTrackListener() {
+			@Override
+			public void mouseHover(MouseEvent event) {
+				if (event.stateMask == 0
+						&& (m_tooltipFigure == null || m_tooltipFigure != m_eventManager.getCursorFigure())) {
+					handleShowCustomTooltip(event.x, event.y);
+				}
+			}
 
-      @Override
-      public void mouseExit(MouseEvent event) {
-        Control cursorControl = Display.getCurrent().getCursorControl();
-        if (cursorControl == null || cursorControl.getShell() != m_tooltipShell) {
-          hideTooltip();
-        }
-      }
+			@Override
+			public void mouseExit(MouseEvent event) {
+				Control cursorControl = Display.getCurrent().getCursorControl();
+				if (cursorControl == null || cursorControl.getShell() != m_tooltipShell) {
+					hideTooltip();
+				}
+			}
 
-      @Override
-      public void mouseEnter(MouseEvent event) {
-      }
-    });
-    ScrollBar verticalBar = m_canvas.getVerticalBar();
-    if (verticalBar != null) {
-      verticalBar.addListener(SWT.Selection, new Listener() {
-        @Override
-        public void handleEvent(Event event) {
-          hideTooltip();
-        }
-      });
-    }
-    m_canvas.addDisposeListener(new DisposeListener() {
-      @Override
-      public void widgetDisposed(DisposeEvent e) {
-        hideTooltip();
-      }
-    });
-  }
+			@Override
+			public void mouseEnter(MouseEvent event) {
+			}
+		});
+		ScrollBar verticalBar = m_canvas.getVerticalBar();
+		if (verticalBar != null) {
+			verticalBar.addListener(SWT.Selection, new Listener() {
+				@Override
+				public void handleEvent(Event event) {
+					hideTooltip();
+				}
+			});
+		}
+		m_canvas.addDisposeListener(new DisposeListener() {
+			@Override
+			public void widgetDisposed(DisposeEvent e) {
+				hideTooltip();
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ICustomTooltipSide
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void hideTooltip() {
-    if (m_tooltipShell != null && !m_tooltipShell.isDisposed()) {
-      m_tooltipShell.close();
-      m_tooltipShell.dispose();
-    }
-    m_tooltipShell = null;
-    m_tooltipFigure = null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ICustomTooltipSide
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void hideTooltip() {
+		if (m_tooltipShell != null && !m_tooltipShell.isDisposed()) {
+			m_tooltipShell.close();
+			m_tooltipShell.dispose();
+		}
+		m_tooltipShell = null;
+		m_tooltipFigure = null;
+	}
 
-  @Override
-  public Listener getHideListener() {
-    return m_hideListener;
-  }
+	@Override
+	public Listener getHideListener() {
+		return m_hideListener;
+	}
 
-  private final Listener m_hideListener = new Listener() {
-    @Override
-    public void handleEvent(Event event) {
-      Control tooltipControl = (Control) event.widget;
-      switch (event.type) {
-        case SWT.MouseDown : {
-          // convert location from tooltip to canvas
-          Point p = tooltipControl.toDisplay(event.x, event.y);
-          p = m_canvas.toControl(p);
-          // send MouseDown to canvas
-          Event newEvent = new Event();
-          newEvent.x = p.x;
-          newEvent.y = p.y;
-          m_canvas.notifyListeners(SWT.MouseDown, newEvent);
-          // hide tooltip
-          hideTooltip();
-          break;
-        }
-        case SWT.MouseExit :
-          hideTooltip();
-          break;
-      }
-    }
-  };
+	private final Listener m_hideListener = new Listener() {
+		@Override
+		public void handleEvent(Event event) {
+			Control tooltipControl = (Control) event.widget;
+			switch (event.type) {
+			case SWT.MouseDown : {
+				// convert location from tooltip to canvas
+				Point p = tooltipControl.toDisplay(event.x, event.y);
+				p = m_canvas.toControl(p);
+				// send MouseDown to canvas
+				Event newEvent = new Event();
+				newEvent.x = p.x;
+				newEvent.y = p.y;
+				m_canvas.notifyListeners(SWT.MouseDown, newEvent);
+				// hide tooltip
+				hideTooltip();
+				break;
+			}
+			case SWT.MouseExit :
+				hideTooltip();
+				break;
+			}
+		}
+	};
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Custom Tooltip
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected final void handleShowCustomTooltip(int mouseX, int mouseY) {
-    hideTooltip();
-    Figure cursorFigure = m_eventManager.getCursorFigure();
-    if (cursorFigure != null) {
-      ICustomTooltipProvider tooltipProvider = cursorFigure.getCustomTooltipProvider();
-      if (tooltipProvider != null) {
-        m_tooltipFigure = cursorFigure;
-        //
-        m_tooltipShell =
-            new Shell(m_canvas.getShell(), SWT.NO_FOCUS | SWT.ON_TOP | SWT.TOOL | SWT.SINGLE);
-        GridLayoutFactory.create(m_tooltipShell).noMargins();
-        //
-        m_tooltipShell.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_INFO_FOREGROUND));
-        m_tooltipShell.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_INFO_BACKGROUND));
-        //
-        Control tooltipControl =
-            tooltipProvider.createTooltipControl(m_tooltipShell, this, cursorFigure);
-        //
-        if (tooltipControl == null) {
-          hideTooltip();
-        } else {
-          // calculate tooltip size
-          // for non-windows systems the tooltip may have invalid tooltip bounds
-          // because some widget's API functions may fail if tooltip content is not visible
-          // ex., on MacOSX tree widget's items has zero bounds since they are not yet visible.
-          // the workaround is to preset tooltip size to big values before any computeSize called.
-          if (!EnvironmentUtils.IS_WINDOWS) {
-            m_tooltipShell.setSize(1000, 1000);
-          }
-          Point tooltipSize = m_tooltipShell.computeSize(SWT.DEFAULT, SWT.DEFAULT);
-          // calculate tooltip location
-          Point tooltipLocation = m_canvas.toDisplay(mouseX - 5, mouseY + 10);
-          Rectangle clientArea = Display.getCurrent().getClientArea();
-          if (tooltipLocation.x + tooltipSize.x >= clientArea.width) {
-            tooltipLocation.x = clientArea.width - tooltipSize.x - 1;
-          }
-          if (tooltipLocation.y + tooltipSize.y >= clientArea.height) {
-            tooltipLocation.y = clientArea.height - tooltipSize.y - 1;
-          }
-          // set location/size and open
-          m_tooltipShell.setBounds(
-              tooltipLocation.x,
-              tooltipLocation.y,
-              tooltipSize.x,
-              tooltipSize.y);
-          tooltipProvider.show(m_tooltipShell);
-        }
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Custom Tooltip
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected final void handleShowCustomTooltip(int mouseX, int mouseY) {
+		hideTooltip();
+		Figure cursorFigure = m_eventManager.getCursorFigure();
+		if (cursorFigure != null) {
+			ICustomTooltipProvider tooltipProvider = cursorFigure.getCustomTooltipProvider();
+			if (tooltipProvider != null) {
+				m_tooltipFigure = cursorFigure;
+				//
+				m_tooltipShell =
+						new Shell(m_canvas.getShell(), SWT.NO_FOCUS | SWT.ON_TOP | SWT.TOOL | SWT.SINGLE);
+				GridLayoutFactory.create(m_tooltipShell).noMargins();
+				//
+				m_tooltipShell.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_INFO_FOREGROUND));
+				m_tooltipShell.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_INFO_BACKGROUND));
+				//
+				Control tooltipControl =
+						tooltipProvider.createTooltipControl(m_tooltipShell, this, cursorFigure);
+				//
+				if (tooltipControl == null) {
+					hideTooltip();
+				} else {
+					// calculate tooltip size
+					// for non-windows systems the tooltip may have invalid tooltip bounds
+					// because some widget's API functions may fail if tooltip content is not visible
+					// ex., on MacOSX tree widget's items has zero bounds since they are not yet visible.
+					// the workaround is to preset tooltip size to big values before any computeSize called.
+					if (!EnvironmentUtils.IS_WINDOWS) {
+						m_tooltipShell.setSize(1000, 1000);
+					}
+					Point tooltipSize = m_tooltipShell.computeSize(SWT.DEFAULT, SWT.DEFAULT);
+					// calculate tooltip location
+					Point tooltipLocation = m_canvas.toDisplay(mouseX - 5, mouseY + 10);
+					Rectangle clientArea = Display.getCurrent().getClientArea();
+					if (tooltipLocation.x + tooltipSize.x >= clientArea.width) {
+						tooltipLocation.x = clientArea.width - tooltipSize.x - 1;
+					}
+					if (tooltipLocation.y + tooltipSize.y >= clientArea.height) {
+						tooltipLocation.y = clientArea.height - tooltipSize.y - 1;
+					}
+					// set location/size and open
+					m_tooltipShell.setBounds(
+							tooltipLocation.x,
+							tooltipLocation.y,
+							tooltipSize.x,
+							tooltipSize.y);
+					tooltipProvider.show(m_tooltipShell);
+				}
+			}
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/internal/draw2d/CustomTooltipProvider.java b/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/internal/draw2d/CustomTooltipProvider.java
index 828511de5..38789b5fb 100644
--- a/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/internal/draw2d/CustomTooltipProvider.java
+++ b/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/internal/draw2d/CustomTooltipProvider.java
@@ -25,33 +25,33 @@
  * @coverage gef.draw2d
  */
 public abstract class CustomTooltipProvider implements ICustomTooltipProvider {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ICustomTooltipProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final Control createTooltipControl(Composite parent, ICustomTooltipSite site, Figure figure) {
-    FigureCanvas canvas = new FigureCanvas(parent, SWT.NONE);
-    GridDataFactory.create(canvas).fill().grab();
-    canvas.addListener(SWT.MouseDown, site.getHideListener());
-    canvas.addListener(SWT.MouseExit, site.getHideListener());
-    //
-    RootFigure rootFigure = canvas.getRootFigure();
-    rootFigure.setForeground(parent.getForeground());
-    rootFigure.setBackground(parent.getBackground());
-    //
-    Layer layer = new Layer("Tooltip");
-    layer.add(createTooltipFigure(figure));
-    rootFigure.addLayer(layer);
-    //
-    return canvas;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ICustomTooltipProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final Control createTooltipControl(Composite parent, ICustomTooltipSite site, Figure figure) {
+		FigureCanvas canvas = new FigureCanvas(parent, SWT.NONE);
+		GridDataFactory.create(canvas).fill().grab();
+		canvas.addListener(SWT.MouseDown, site.getHideListener());
+		canvas.addListener(SWT.MouseExit, site.getHideListener());
+		//
+		RootFigure rootFigure = canvas.getRootFigure();
+		rootFigure.setForeground(parent.getForeground());
+		rootFigure.setBackground(parent.getBackground());
+		//
+		Layer layer = new Layer("Tooltip");
+		layer.add(createTooltipFigure(figure));
+		rootFigure.addLayer(layer);
+		//
+		return canvas;
+	}
 
-  @Override
-  public void show(Shell shell) {
-    shell.setVisible(true);
-  }
+	@Override
+	public void show(Shell shell) {
+		shell.setVisible(true);
+	}
 
-  protected abstract Figure createTooltipFigure(Figure hostFigure);
+	protected abstract Figure createTooltipFigure(Figure hostFigure);
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/internal/draw2d/EventManager.java b/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/internal/draw2d/EventManager.java
index da65fce4f..9ea3408b4 100644
--- a/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/internal/draw2d/EventManager.java
+++ b/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/internal/draw2d/EventManager.java
@@ -39,398 +39,398 @@
  * @coverage gef.draw2d
  */
 public class EventManager implements MouseListener, MouseMoveListener, MouseTrackListener {
-  public static final int ANY_BUTTON = SWT.BUTTON1 | SWT.BUTTON2 | SWT.BUTTON3;
-  //
-  private final FigureCanvas m_canvas;
-  private final RootFigure m_root;
-  private Figure m_cursorFigure;
-  private Figure m_captureFigure;
-  private Cursor m_cursor;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public EventManager(FigureCanvas canvas) {
-    m_canvas = canvas;
-    m_root = m_canvas.getRootFigure();
-    // custom tooltip
-    new CustomTooltipManager(canvas, this);
-    // add listeners
-    Object listener = createListenerProxy(
-        this,
-        new Class[]{MouseListener.class, MouseMoveListener.class, MouseTrackListener.class});
-    m_canvas.addMouseListener((MouseListener) listener);
-    m_canvas.addMouseMoveListener((MouseMoveListener) listener);
-    m_canvas.addMouseTrackListener((MouseTrackListener) listener);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Cursor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Updates the Cursor.
-   */
-  public void updateCursor() {
-    if (m_cursorFigure == null) {
-      setCursor(null);
-    } else {
-      setCursor(m_cursorFigure.getCursor());
-    }
-  }
-
-  /**
-   * Set the Cursor.
-   */
-  public void setCursor(Cursor cursor) {
-    if (m_cursor == null) {
-      if (cursor == null) {
-        return;
-      }
-    } else if (m_cursor == cursor || m_cursor.equals(cursor)) {
-      return;
-    }
-    //
-    m_cursor = cursor;
-    m_canvas.setCursor(m_cursor);
-  }
-
-  protected void updateFigureToolTipText() {
-    if (m_cursorFigure == null) {
-      m_canvas.setToolTipText(null);
-    } else {
-      m_canvas.setToolTipText(m_cursorFigure.getToolTipText());
-    }
-  }
-
-  private void setFigureUnderCursor(Figure figure, org.eclipse.swt.events.MouseEvent event) {
-    if (m_cursorFigure != figure) {
-      sendEvent(MOUSE_EXIT_INVOKER, IMouseTrackListener.class, event);
-      //
-      m_cursorFigure = figure;
-      sendEvent(MOUSE_ENTER_INVOKER, IMouseTrackListener.class, event);
-      // finish
-      updateCursor();
-      updateFigureToolTipText();
-    }
-  }
-
-  public final Figure getCursorFigure() {
-    return m_cursorFigure;
-  }
-
-  /**
-   * Update the {@link Figure} located at the given location which will accept mouse events.
-   */
-  protected final void updateFigureUnderCursor(org.eclipse.swt.events.MouseEvent event) {
-    TargetFigureFindVisitor visitor = new TargetFigureFindVisitor(m_canvas, event.x, event.y);
-    m_root.accept(visitor, false);
-    setFigureUnderCursor(visitor.getTargetFigure(), event);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Capture
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets capture to the given figure. All subsequent events will be sent to the given figure until
-   * {@link #setCapture(null)} is called.
-   */
-  public void setCapture(Figure captureFigure) {
-    m_captureFigure = captureFigure;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Consume
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private boolean m_eventConsumed;
-
-  /**
-   * Return whether this event has been consumed.
-   */
-  protected boolean isEventConsumed() {
-    return m_eventConsumed;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // MouseEvent listener's
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void mouseDoubleClick(org.eclipse.swt.events.MouseEvent event) {
-    handleMouseEvent(MOUSE_DOUBLE_CLICK_INVOKER, IMouseListener.class, event);
-  }
-
-  @Override
-  public void mouseDown(org.eclipse.swt.events.MouseEvent event) {
-    if (m_canvas.getToolTipText() != null) {
-      m_canvas.setToolTipText(null);
-    }
-    handleMouseEvent(MOUSE_DOWN_INVOKER, IMouseListener.class, event);
-  }
-
-  @Override
-  public void mouseUp(org.eclipse.swt.events.MouseEvent event) {
-    handleMouseEvent(MOUSE_UP_INVOKER, IMouseListener.class, event);
-  }
-
-  @Override
-  public void mouseMove(org.eclipse.swt.events.MouseEvent event) {
-    handleMouseEvent(MOUSE_MOVE_INVOKER, IMouseMoveListener.class, event);
-  }
-
-  private void handleMouseEvent(IListenerInvoker invoker,
-      Class<?> listenerClass,
-      org.eclipse.swt.events.MouseEvent event) {
-    updateFigureUnderCursor(event);
-    sendEvent(invoker, listenerClass, event);
-  }
-
-  private <T extends Object> void sendEvent(IListenerInvoker invoker,
-      Class<T> listenerClass,
-      org.eclipse.swt.events.MouseEvent e) {
-    m_eventConsumed = false;
-    Figure figure = m_captureFigure == null ? m_cursorFigure : m_captureFigure;
-    //
-    if (figure != null) {
-      List<T> listeners = figure.getListeners(listenerClass);
-      if (listeners != null && !listeners.isEmpty()) {
-        MouseEvent event = new MouseEvent(m_canvas, e, figure);
-        for (Iterator<T> I = listeners.iterator(); !event.isConsumed() && I.hasNext();) {
-          invoker.invokeListener(I.next(), event);
-        }
-        m_eventConsumed = event.isConsumed();
-      }
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // MouseTrackListener
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void mouseEnter(org.eclipse.swt.events.MouseEvent event) {
-    handleMouseEvent(MOUSE_ENTER_INVOKER, IMouseTrackListener.class, event);
-  }
-
-  @Override
-  public void mouseExit(org.eclipse.swt.events.MouseEvent event) {
-    handleMouseEvent(MOUSE_EXIT_INVOKER, IMouseTrackListener.class, event);
-  }
-
-  @Override
-  public void mouseHover(org.eclipse.swt.events.MouseEvent event) {
-    handleMouseEvent(MOUSE_HOVER_INVOKER, IMouseTrackListener.class, event);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Invoke
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Invoke <code>mouseDown()</code>.
-   */
-  private static final IListenerInvoker MOUSE_DOWN_INVOKER = (listener, event) -> {
-    IMouseListener mouseListener = (IMouseListener) listener;
-    mouseListener.mouseDown(event);
-  };
-  /**
-   * Invoke <code>mouseUp()</code>.
-   */
-  private static final IListenerInvoker MOUSE_UP_INVOKER = (listener, event) -> {
-    IMouseListener mouseListener = (IMouseListener) listener;
-    mouseListener.mouseUp(event);
-  };
-  /**
-   * Invoke <code>mouseDoubleClick()</code>.
-   */
-  private static final IListenerInvoker MOUSE_DOUBLE_CLICK_INVOKER = (listener, event) -> {
-    IMouseListener mouseListener = (IMouseListener) listener;
-    mouseListener.mouseDoubleClick(event);
-  };
-  /**
-   * Invoke <code>mouseMove()</code>.
-   */
-  private static final IListenerInvoker MOUSE_MOVE_INVOKER = (listener, event) -> {
-    IMouseMoveListener mouseListener = (IMouseMoveListener) listener;
-    mouseListener.mouseMove(event);
-  };
-  /**
-   * Invoke <code>mouseEnter()</code>.
-   */
-  private static final IListenerInvoker MOUSE_ENTER_INVOKER = (listener, event) -> {
-    IMouseTrackListener mouseListener = (IMouseTrackListener) listener;
-    mouseListener.mouseEnter(event);
-  };
-  /**
-   * Invoke <code>mouseExit()</code>.
-   */
-  private static final IListenerInvoker MOUSE_EXIT_INVOKER = (listener, event) -> {
-    IMouseTrackListener mouseListener = (IMouseTrackListener) listener;
-    mouseListener.mouseExit(event);
-  };
-  /**
-   * Invoke <code>mouseHover()</code>.
-   */
-  private static final IListenerInvoker MOUSE_HOVER_INVOKER = (listener, event) -> {
-    IMouseTrackListener mouseListener = (IMouseTrackListener) listener;
-    mouseListener.mouseHover(event);
-  };
-
-  private static interface IListenerInvoker {
-    /**
-     * This method use to invoke any listeners.
-     */
-    void invokeListener(Object listener, MouseEvent event);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Event listener helper
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the dynamic proxy implementation for given interfaces.
-   */
-  public static final Object createListenerProxy(final Object owner, Class<?>[] interfaces) {
-    return Proxy.newProxyInstance(
-        owner.getClass().getClassLoader(),
-        interfaces,
-        new InvocationHandler() {
-          @Override
-          public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
-            // check for delay
-            if (delayEvent(this, proxy, method, args)) {
-              return null;
-            }
-            // process event now
-            try {
-              return method.invoke(owner, args);
-            } catch (InvocationTargetException e) {
-              if (e.getCause() instanceof CancelOperationError) {
-                // ignore
-              } else {
-                throw e;
-              }
-            }
-            // no return expected
-            return null;
-          }
-        });
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Events queue
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static String FLAG_DELAY_EVENTS = "Flag that events to this Control should be delayed";
-  private static String KEY_DELAYED_EVENTS = "List of delayed events";
-
-  /**
-   * Specifies if events to given {@link Control} should be delayed or not.
-   */
-  public static void delayEvents(Control control, boolean delay) {
-    if (delay) {
-      control.setData(FLAG_DELAY_EVENTS, Boolean.TRUE);
-    } else {
-      control.setData(FLAG_DELAY_EVENTS, null);
-    }
-  }
-
-  /**
-   * If arguments contain {@link TypedEvent} and target {@link Control} is disabled, then puts this
-   * event into {@link List} with key {@link #KEY_DELAYED_EVENTS}.
-   *
-   * @return <code>true</code> if event was delayed.
-   */
-  private static boolean delayEvent(InvocationHandler handler,
-      Object proxy,
-      Method method,
-      Object args[]) {
-    if (args[0] instanceof TypedEvent) {
-      TypedEvent event = (TypedEvent) args[0];
-      if (event.widget instanceof Control) {
-        Control control = (Control) event.widget;
-        if (!control.isDisposed() && control.getData(FLAG_DELAY_EVENTS) != null) {
-          // prepare delay queue
-          @SuppressWarnings("unchecked")
-          List<DelayedEvent> eventQueue = (List<DelayedEvent>) control.getData(KEY_DELAYED_EVENTS);
-          if (eventQueue == null) {
-            eventQueue = new ArrayList<>();
-            control.setData(KEY_DELAYED_EVENTS, eventQueue);
-          }
-          // put event into queue
-          eventQueue.add(new DelayedEvent(handler, proxy, method, args));
-          // event was delayed
-          return true;
-        }
-      }
-    }
-    // no delay
-    return false;
-  }
-
-  /**
-   * Runs events delayed before because given {@link Control} was disabled.
-   */
-  public static void runDelayedEvents(Control control) {
-    // prepare delay queue
-    @SuppressWarnings("unchecked")
-    List<DelayedEvent> eventQueue = (List<DelayedEvent>) control.getData(KEY_DELAYED_EVENTS);
-    control.setData(KEY_DELAYED_EVENTS, null);
-    // run all events
-    if (eventQueue != null) {
-      for (DelayedEvent event : eventQueue) {
-        event.run();
-      }
-    }
-  }
-
-  /**
-   * Container for information about single event that was delayed because of disabled target.
-   */
-  private static final class DelayedEvent {
-    private final InvocationHandler m_handler;
-    private final Object m_proxy;
-    private final Method m_method;
-    private final Object[] m_args;
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    DelayedEvent(InvocationHandler handler, Object proxy, Method method, Object[] args) {
-      m_handler = handler;
-      m_proxy = proxy;
-      m_method = method;
-      m_args = args;
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Access
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    /**
-     * Invokes same event listener as was used when target of this event was disabled.
-     */
-    void run() {
-      try {
-        m_handler.invoke(m_proxy, m_method, m_args);
-      } catch (Throwable e) {
-        throw ReflectionUtils.propagate(e);
-      }
-    }
-  }
+	public static final int ANY_BUTTON = SWT.BUTTON1 | SWT.BUTTON2 | SWT.BUTTON3;
+	//
+	private final FigureCanvas m_canvas;
+	private final RootFigure m_root;
+	private Figure m_cursorFigure;
+	private Figure m_captureFigure;
+	private Cursor m_cursor;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public EventManager(FigureCanvas canvas) {
+		m_canvas = canvas;
+		m_root = m_canvas.getRootFigure();
+		// custom tooltip
+		new CustomTooltipManager(canvas, this);
+		// add listeners
+		Object listener = createListenerProxy(
+				this,
+				new Class[]{MouseListener.class, MouseMoveListener.class, MouseTrackListener.class});
+		m_canvas.addMouseListener((MouseListener) listener);
+		m_canvas.addMouseMoveListener((MouseMoveListener) listener);
+		m_canvas.addMouseTrackListener((MouseTrackListener) listener);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Cursor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Updates the Cursor.
+	 */
+	public void updateCursor() {
+		if (m_cursorFigure == null) {
+			setCursor(null);
+		} else {
+			setCursor(m_cursorFigure.getCursor());
+		}
+	}
+
+	/**
+	 * Set the Cursor.
+	 */
+	public void setCursor(Cursor cursor) {
+		if (m_cursor == null) {
+			if (cursor == null) {
+				return;
+			}
+		} else if (m_cursor == cursor || m_cursor.equals(cursor)) {
+			return;
+		}
+		//
+		m_cursor = cursor;
+		m_canvas.setCursor(m_cursor);
+	}
+
+	protected void updateFigureToolTipText() {
+		if (m_cursorFigure == null) {
+			m_canvas.setToolTipText(null);
+		} else {
+			m_canvas.setToolTipText(m_cursorFigure.getToolTipText());
+		}
+	}
+
+	private void setFigureUnderCursor(Figure figure, org.eclipse.swt.events.MouseEvent event) {
+		if (m_cursorFigure != figure) {
+			sendEvent(MOUSE_EXIT_INVOKER, IMouseTrackListener.class, event);
+			//
+			m_cursorFigure = figure;
+			sendEvent(MOUSE_ENTER_INVOKER, IMouseTrackListener.class, event);
+			// finish
+			updateCursor();
+			updateFigureToolTipText();
+		}
+	}
+
+	public final Figure getCursorFigure() {
+		return m_cursorFigure;
+	}
+
+	/**
+	 * Update the {@link Figure} located at the given location which will accept mouse events.
+	 */
+	protected final void updateFigureUnderCursor(org.eclipse.swt.events.MouseEvent event) {
+		TargetFigureFindVisitor visitor = new TargetFigureFindVisitor(m_canvas, event.x, event.y);
+		m_root.accept(visitor, false);
+		setFigureUnderCursor(visitor.getTargetFigure(), event);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Capture
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets capture to the given figure. All subsequent events will be sent to the given figure until
+	 * {@link #setCapture(null)} is called.
+	 */
+	public void setCapture(Figure captureFigure) {
+		m_captureFigure = captureFigure;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Consume
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private boolean m_eventConsumed;
+
+	/**
+	 * Return whether this event has been consumed.
+	 */
+	protected boolean isEventConsumed() {
+		return m_eventConsumed;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// MouseEvent listener's
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void mouseDoubleClick(org.eclipse.swt.events.MouseEvent event) {
+		handleMouseEvent(MOUSE_DOUBLE_CLICK_INVOKER, IMouseListener.class, event);
+	}
+
+	@Override
+	public void mouseDown(org.eclipse.swt.events.MouseEvent event) {
+		if (m_canvas.getToolTipText() != null) {
+			m_canvas.setToolTipText(null);
+		}
+		handleMouseEvent(MOUSE_DOWN_INVOKER, IMouseListener.class, event);
+	}
+
+	@Override
+	public void mouseUp(org.eclipse.swt.events.MouseEvent event) {
+		handleMouseEvent(MOUSE_UP_INVOKER, IMouseListener.class, event);
+	}
+
+	@Override
+	public void mouseMove(org.eclipse.swt.events.MouseEvent event) {
+		handleMouseEvent(MOUSE_MOVE_INVOKER, IMouseMoveListener.class, event);
+	}
+
+	private void handleMouseEvent(IListenerInvoker invoker,
+			Class<?> listenerClass,
+			org.eclipse.swt.events.MouseEvent event) {
+		updateFigureUnderCursor(event);
+		sendEvent(invoker, listenerClass, event);
+	}
+
+	private <T extends Object> void sendEvent(IListenerInvoker invoker,
+			Class<T> listenerClass,
+			org.eclipse.swt.events.MouseEvent e) {
+		m_eventConsumed = false;
+		Figure figure = m_captureFigure == null ? m_cursorFigure : m_captureFigure;
+		//
+		if (figure != null) {
+			List<T> listeners = figure.getListeners(listenerClass);
+			if (listeners != null && !listeners.isEmpty()) {
+				MouseEvent event = new MouseEvent(m_canvas, e, figure);
+				for (Iterator<T> I = listeners.iterator(); !event.isConsumed() && I.hasNext();) {
+					invoker.invokeListener(I.next(), event);
+				}
+				m_eventConsumed = event.isConsumed();
+			}
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// MouseTrackListener
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void mouseEnter(org.eclipse.swt.events.MouseEvent event) {
+		handleMouseEvent(MOUSE_ENTER_INVOKER, IMouseTrackListener.class, event);
+	}
+
+	@Override
+	public void mouseExit(org.eclipse.swt.events.MouseEvent event) {
+		handleMouseEvent(MOUSE_EXIT_INVOKER, IMouseTrackListener.class, event);
+	}
+
+	@Override
+	public void mouseHover(org.eclipse.swt.events.MouseEvent event) {
+		handleMouseEvent(MOUSE_HOVER_INVOKER, IMouseTrackListener.class, event);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Invoke
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Invoke <code>mouseDown()</code>.
+	 */
+	private static final IListenerInvoker MOUSE_DOWN_INVOKER = (listener, event) -> {
+		IMouseListener mouseListener = (IMouseListener) listener;
+		mouseListener.mouseDown(event);
+	};
+	/**
+	 * Invoke <code>mouseUp()</code>.
+	 */
+	private static final IListenerInvoker MOUSE_UP_INVOKER = (listener, event) -> {
+		IMouseListener mouseListener = (IMouseListener) listener;
+		mouseListener.mouseUp(event);
+	};
+	/**
+	 * Invoke <code>mouseDoubleClick()</code>.
+	 */
+	private static final IListenerInvoker MOUSE_DOUBLE_CLICK_INVOKER = (listener, event) -> {
+		IMouseListener mouseListener = (IMouseListener) listener;
+		mouseListener.mouseDoubleClick(event);
+	};
+	/**
+	 * Invoke <code>mouseMove()</code>.
+	 */
+	private static final IListenerInvoker MOUSE_MOVE_INVOKER = (listener, event) -> {
+		IMouseMoveListener mouseListener = (IMouseMoveListener) listener;
+		mouseListener.mouseMove(event);
+	};
+	/**
+	 * Invoke <code>mouseEnter()</code>.
+	 */
+	private static final IListenerInvoker MOUSE_ENTER_INVOKER = (listener, event) -> {
+		IMouseTrackListener mouseListener = (IMouseTrackListener) listener;
+		mouseListener.mouseEnter(event);
+	};
+	/**
+	 * Invoke <code>mouseExit()</code>.
+	 */
+	private static final IListenerInvoker MOUSE_EXIT_INVOKER = (listener, event) -> {
+		IMouseTrackListener mouseListener = (IMouseTrackListener) listener;
+		mouseListener.mouseExit(event);
+	};
+	/**
+	 * Invoke <code>mouseHover()</code>.
+	 */
+	private static final IListenerInvoker MOUSE_HOVER_INVOKER = (listener, event) -> {
+		IMouseTrackListener mouseListener = (IMouseTrackListener) listener;
+		mouseListener.mouseHover(event);
+	};
+
+	private static interface IListenerInvoker {
+		/**
+		 * This method use to invoke any listeners.
+		 */
+		void invokeListener(Object listener, MouseEvent event);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Event listener helper
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the dynamic proxy implementation for given interfaces.
+	 */
+	public static final Object createListenerProxy(final Object owner, Class<?>[] interfaces) {
+		return Proxy.newProxyInstance(
+				owner.getClass().getClassLoader(),
+				interfaces,
+				new InvocationHandler() {
+					@Override
+					public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
+						// check for delay
+						if (delayEvent(this, proxy, method, args)) {
+							return null;
+						}
+						// process event now
+						try {
+							return method.invoke(owner, args);
+						} catch (InvocationTargetException e) {
+							if (e.getCause() instanceof CancelOperationError) {
+								// ignore
+							} else {
+								throw e;
+							}
+						}
+						// no return expected
+						return null;
+					}
+				});
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Events queue
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static String FLAG_DELAY_EVENTS = "Flag that events to this Control should be delayed";
+	private static String KEY_DELAYED_EVENTS = "List of delayed events";
+
+	/**
+	 * Specifies if events to given {@link Control} should be delayed or not.
+	 */
+	public static void delayEvents(Control control, boolean delay) {
+		if (delay) {
+			control.setData(FLAG_DELAY_EVENTS, Boolean.TRUE);
+		} else {
+			control.setData(FLAG_DELAY_EVENTS, null);
+		}
+	}
+
+	/**
+	 * If arguments contain {@link TypedEvent} and target {@link Control} is disabled, then puts this
+	 * event into {@link List} with key {@link #KEY_DELAYED_EVENTS}.
+	 *
+	 * @return <code>true</code> if event was delayed.
+	 */
+	private static boolean delayEvent(InvocationHandler handler,
+			Object proxy,
+			Method method,
+			Object args[]) {
+		if (args[0] instanceof TypedEvent) {
+			TypedEvent event = (TypedEvent) args[0];
+			if (event.widget instanceof Control) {
+				Control control = (Control) event.widget;
+				if (!control.isDisposed() && control.getData(FLAG_DELAY_EVENTS) != null) {
+					// prepare delay queue
+					@SuppressWarnings("unchecked")
+					List<DelayedEvent> eventQueue = (List<DelayedEvent>) control.getData(KEY_DELAYED_EVENTS);
+					if (eventQueue == null) {
+						eventQueue = new ArrayList<>();
+						control.setData(KEY_DELAYED_EVENTS, eventQueue);
+					}
+					// put event into queue
+					eventQueue.add(new DelayedEvent(handler, proxy, method, args));
+					// event was delayed
+					return true;
+				}
+			}
+		}
+		// no delay
+		return false;
+	}
+
+	/**
+	 * Runs events delayed before because given {@link Control} was disabled.
+	 */
+	public static void runDelayedEvents(Control control) {
+		// prepare delay queue
+		@SuppressWarnings("unchecked")
+		List<DelayedEvent> eventQueue = (List<DelayedEvent>) control.getData(KEY_DELAYED_EVENTS);
+		control.setData(KEY_DELAYED_EVENTS, null);
+		// run all events
+		if (eventQueue != null) {
+			for (DelayedEvent event : eventQueue) {
+				event.run();
+			}
+		}
+	}
+
+	/**
+	 * Container for information about single event that was delayed because of disabled target.
+	 */
+	private static final class DelayedEvent {
+		private final InvocationHandler m_handler;
+		private final Object m_proxy;
+		private final Method m_method;
+		private final Object[] m_args;
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		DelayedEvent(InvocationHandler handler, Object proxy, Method method, Object[] args) {
+			m_handler = handler;
+			m_proxy = proxy;
+			m_method = method;
+			m_args = args;
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Access
+		//
+		////////////////////////////////////////////////////////////////////////////
+		/**
+		 * Invokes same event listener as was used when target of this event was disabled.
+		 */
+		void run() {
+			try {
+				m_handler.invoke(m_proxy, m_method, m_args);
+			} catch (Throwable e) {
+				throw ReflectionUtils.propagate(e);
+			}
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/internal/draw2d/FigureCanvas.java b/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/internal/draw2d/FigureCanvas.java
index d7ca27319..294cc8b0e 100644
--- a/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/internal/draw2d/FigureCanvas.java
+++ b/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/internal/draw2d/FigureCanvas.java
@@ -34,195 +34,195 @@
  * @coverage gef.draw2d
  */
 public class FigureCanvas extends Canvas {
-  private RootFigure m_rootFigure;
-  private final Dimension m_rootPreferredSize = new Dimension();
-  private ScrollModel m_horizontalModel;
-  private ScrollModel m_verticalModel;
-  private Image m_bufferedImage;
-  private boolean m_drawCached;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FigureCanvas(Composite parent, int style) {
-    super(parent, style | SWT.NO_BACKGROUND | SWT.NO_REDRAW_RESIZE);
-    // initialize scroll begin state
-    initScrolling();
-    // add all listeners
-    hookControlEvents();
-    // create root figure
-    createRootFigure();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // FigureCanvas
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void initScrolling() {
-    m_horizontalModel = new HorizontalScrollModel(this);
-    m_verticalModel = new VerticalScrollModel(this);
-  }
-
-  private void createRootFigure() {
-    m_rootFigure = new RootFigure(this, new RefreshManager(this));
-    m_rootFigure.setBackground(getBackground());
-    m_rootFigure.setForeground(getForeground());
-    m_rootFigure.setFont(getFont());
-    setDefaultEventManager();
-  }
-
-  protected void setDefaultEventManager() {
-    m_rootFigure.setEventManager(new EventManager(this));
-  }
-
-  private void disposeBufferedImage() {
-    if (m_bufferedImage != null) {
-      m_bufferedImage.dispose();
-      m_bufferedImage = null;
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Returns the {@link ScrollModel} what support the horizontal scrolling.
-   */
-  public ScrollModel getHorizontalScrollModel() {
-    return m_horizontalModel;
-  }
-
-  /**
-   * Returns the {@link ScrollModel} what support the vertical scrolling.
-   */
-  public ScrollModel getVerticalScrollModel() {
-    return m_verticalModel;
-  }
-
-  /**
-   * Returns figures container.
-   */
-  public RootFigure getRootFigure() {
-    return m_rootFigure;
-  }
-
-  /**
-   * Sets draw cached mode.
-   */
-  public void setDrawCached(boolean value) {
-    m_drawCached = value;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Control
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Point computeSize(int wHint, int hHint, boolean changed) {
-    Dimension size = m_rootFigure.getPreferredSize().getUnioned(wHint, hHint);
-    return new Point(size.width, size.height);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Handle events
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void hookControlEvents() {
-    addListener(SWT.Dispose, new Listener() {
-      @Override
-      public void handleEvent(Event event) {
-        disposeBufferedImage();
-      }
-    });
-    addListener(SWT.Resize, new Listener() {
-      @Override
-      public void handleEvent(Event event) {
-        handleResize();
-      }
-    });
-    addListener(SWT.Paint, new Listener() {
-      @Override
-      public void handleEvent(Event event) {
-        handlePaint(event.gc, event.x, event.y, event.width, event.height);
-      }
-    });
-  }
-
-  private void handleResize() {
-    disposeBufferedImage();
-    configureScrollingAndRedraw();
-  }
-
-  private void handlePaint(GC paintGC, int x, int y, int width, int height) {
-    // check draw cached mode
-    if (m_drawCached) {
-      if (m_bufferedImage == null) {
-        paintGC.fillRectangle(x, y, width, height);
-      } else {
-        paintGC.drawImage(m_bufferedImage, 0, 0);
-      }
-      return;
-    }
-    // check double buffered image
-    if (m_bufferedImage == null) {
-      Point size = getSize();
-      m_bufferedImage = new Image(null, size.x, size.y);
-    }
-    // prepare double buffered Graphics
-    GC bufferedGC = new GC(m_bufferedImage);
-    try {
-      bufferedGC.setClipping(x, y, width, height);
-      bufferedGC.setBackground(paintGC.getBackground());
-      bufferedGC.setForeground(paintGC.getForeground());
-      bufferedGC.setFont(paintGC.getFont());
-      bufferedGC.setLineStyle(paintGC.getLineStyle());
-      bufferedGC.setLineWidth(paintGC.getLineWidth());
-      bufferedGC.setXORMode(paintGC.getXORMode());
-      // draw content
-      Graphics graphics = new Graphics(bufferedGC);
-      graphics.translate(-m_horizontalModel.getSelection(), -m_verticalModel.getSelection());
-      m_rootFigure.paint(graphics);
-    } finally {
-      bufferedGC.dispose();
-    }
-    // flush painting
-    paintGC.drawImage(m_bufferedImage, 0, 0);
-  }
-
-  private void configureScrollingAndRedraw() {
-    // cache figures preferred size
-    m_rootPreferredSize.setSize(m_rootFigure.getPreferredSize());
-    // get client area
-    org.eclipse.swt.graphics.Rectangle clientArea = getClientArea();
-    // set new figures bounds (thereof or resize window or resize/relocate figure)
-    m_rootFigure.setBounds(new Rectangle(clientArea).setLocation(0, 0));
-    // configure horizontal and vertical scroll bar's
-    m_horizontalModel.configure(clientArea.width, m_rootPreferredSize.width);
-    m_verticalModel.configure(clientArea.height, m_rootPreferredSize.height);
-    // set repaint
-    redraw();
-  }
-
-  /**
-   * Check bounds and reconfigure scroll bar's if needed and repaint client area.
-   */
-  public void handleRefresh(int x, int y, int width, int height) {
-    if (m_rootPreferredSize.equals(m_rootFigure.getPreferredSize())) {
-      // calculate paint area
-      Point size = getSize();
-      Rectangle paintArea = new Rectangle(0, 0, size.x, size.y);
-      paintArea.intersect(new Rectangle(x, y, width, height));
-      // set repaint
-      redraw(paintArea.x, paintArea.y, paintArea.width, paintArea.height, true);
-    } else {
-      configureScrollingAndRedraw();
-    }
-  }
+	private RootFigure m_rootFigure;
+	private final Dimension m_rootPreferredSize = new Dimension();
+	private ScrollModel m_horizontalModel;
+	private ScrollModel m_verticalModel;
+	private Image m_bufferedImage;
+	private boolean m_drawCached;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FigureCanvas(Composite parent, int style) {
+		super(parent, style | SWT.NO_BACKGROUND | SWT.NO_REDRAW_RESIZE);
+		// initialize scroll begin state
+		initScrolling();
+		// add all listeners
+		hookControlEvents();
+		// create root figure
+		createRootFigure();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// FigureCanvas
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void initScrolling() {
+		m_horizontalModel = new HorizontalScrollModel(this);
+		m_verticalModel = new VerticalScrollModel(this);
+	}
+
+	private void createRootFigure() {
+		m_rootFigure = new RootFigure(this, new RefreshManager(this));
+		m_rootFigure.setBackground(getBackground());
+		m_rootFigure.setForeground(getForeground());
+		m_rootFigure.setFont(getFont());
+		setDefaultEventManager();
+	}
+
+	protected void setDefaultEventManager() {
+		m_rootFigure.setEventManager(new EventManager(this));
+	}
+
+	private void disposeBufferedImage() {
+		if (m_bufferedImage != null) {
+			m_bufferedImage.dispose();
+			m_bufferedImage = null;
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Returns the {@link ScrollModel} what support the horizontal scrolling.
+	 */
+	public ScrollModel getHorizontalScrollModel() {
+		return m_horizontalModel;
+	}
+
+	/**
+	 * Returns the {@link ScrollModel} what support the vertical scrolling.
+	 */
+	public ScrollModel getVerticalScrollModel() {
+		return m_verticalModel;
+	}
+
+	/**
+	 * Returns figures container.
+	 */
+	public RootFigure getRootFigure() {
+		return m_rootFigure;
+	}
+
+	/**
+	 * Sets draw cached mode.
+	 */
+	public void setDrawCached(boolean value) {
+		m_drawCached = value;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Control
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Point computeSize(int wHint, int hHint, boolean changed) {
+		Dimension size = m_rootFigure.getPreferredSize().getUnioned(wHint, hHint);
+		return new Point(size.width, size.height);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Handle events
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void hookControlEvents() {
+		addListener(SWT.Dispose, new Listener() {
+			@Override
+			public void handleEvent(Event event) {
+				disposeBufferedImage();
+			}
+		});
+		addListener(SWT.Resize, new Listener() {
+			@Override
+			public void handleEvent(Event event) {
+				handleResize();
+			}
+		});
+		addListener(SWT.Paint, new Listener() {
+			@Override
+			public void handleEvent(Event event) {
+				handlePaint(event.gc, event.x, event.y, event.width, event.height);
+			}
+		});
+	}
+
+	private void handleResize() {
+		disposeBufferedImage();
+		configureScrollingAndRedraw();
+	}
+
+	private void handlePaint(GC paintGC, int x, int y, int width, int height) {
+		// check draw cached mode
+		if (m_drawCached) {
+			if (m_bufferedImage == null) {
+				paintGC.fillRectangle(x, y, width, height);
+			} else {
+				paintGC.drawImage(m_bufferedImage, 0, 0);
+			}
+			return;
+		}
+		// check double buffered image
+		if (m_bufferedImage == null) {
+			Point size = getSize();
+			m_bufferedImage = new Image(null, size.x, size.y);
+		}
+		// prepare double buffered Graphics
+		GC bufferedGC = new GC(m_bufferedImage);
+		try {
+			bufferedGC.setClipping(x, y, width, height);
+			bufferedGC.setBackground(paintGC.getBackground());
+			bufferedGC.setForeground(paintGC.getForeground());
+			bufferedGC.setFont(paintGC.getFont());
+			bufferedGC.setLineStyle(paintGC.getLineStyle());
+			bufferedGC.setLineWidth(paintGC.getLineWidth());
+			bufferedGC.setXORMode(paintGC.getXORMode());
+			// draw content
+			Graphics graphics = new Graphics(bufferedGC);
+			graphics.translate(-m_horizontalModel.getSelection(), -m_verticalModel.getSelection());
+			m_rootFigure.paint(graphics);
+		} finally {
+			bufferedGC.dispose();
+		}
+		// flush painting
+		paintGC.drawImage(m_bufferedImage, 0, 0);
+	}
+
+	private void configureScrollingAndRedraw() {
+		// cache figures preferred size
+		m_rootPreferredSize.setSize(m_rootFigure.getPreferredSize());
+		// get client area
+		org.eclipse.swt.graphics.Rectangle clientArea = getClientArea();
+		// set new figures bounds (thereof or resize window or resize/relocate figure)
+		m_rootFigure.setBounds(new Rectangle(clientArea).setLocation(0, 0));
+		// configure horizontal and vertical scroll bar's
+		m_horizontalModel.configure(clientArea.width, m_rootPreferredSize.width);
+		m_verticalModel.configure(clientArea.height, m_rootPreferredSize.height);
+		// set repaint
+		redraw();
+	}
+
+	/**
+	 * Check bounds and reconfigure scroll bar's if needed and repaint client area.
+	 */
+	public void handleRefresh(int x, int y, int width, int height) {
+		if (m_rootPreferredSize.equals(m_rootFigure.getPreferredSize())) {
+			// calculate paint area
+			Point size = getSize();
+			Rectangle paintArea = new Rectangle(0, 0, size.x, size.y);
+			paintArea.intersect(new Rectangle(x, y, width, height));
+			// set repaint
+			redraw(paintArea.x, paintArea.y, paintArea.width, paintArea.height, true);
+		} else {
+			configureScrollingAndRedraw();
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/internal/draw2d/FigureVisitor.java b/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/internal/draw2d/FigureVisitor.java
index e60b9c622..9200278fb 100644
--- a/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/internal/draw2d/FigureVisitor.java
+++ b/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/internal/draw2d/FigureVisitor.java
@@ -19,16 +19,16 @@
  * @coverage gef.draw2d
  */
 public class FigureVisitor {
-  /**
-   * This method is invoked to check if given {@link Figure} and its children should be visited.
-   */
-  public boolean visit(Figure figure) {
-    return true;
-  }
+	/**
+	 * This method is invoked to check if given {@link Figure} and its children should be visited.
+	 */
+	public boolean visit(Figure figure) {
+		return true;
+	}
 
-  /**
-   * This method is invoked when all children of given {@link Figure} were visited.
-   */
-  public void endVisit(Figure figure) {
-  }
+	/**
+	 * This method is invoked when all children of given {@link Figure} were visited.
+	 */
+	public void endVisit(Figure figure) {
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/internal/draw2d/ICustomTooltipProvider.java b/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/internal/draw2d/ICustomTooltipProvider.java
index 68c297b10..4985ea2f4 100644
--- a/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/internal/draw2d/ICustomTooltipProvider.java
+++ b/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/internal/draw2d/ICustomTooltipProvider.java
@@ -23,10 +23,10 @@
  * @coverage gef.draw2d
  */
 public interface ICustomTooltipProvider {
-  /**
-   * Create tooltip control.
-   */
-  Control createTooltipControl(Composite parent, ICustomTooltipSite site, Figure figure);
+	/**
+	 * Create tooltip control.
+	 */
+	Control createTooltipControl(Composite parent, ICustomTooltipSite site, Figure figure);
 
-  void show(Shell shell);
+	void show(Shell shell);
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/internal/draw2d/ICustomTooltipSite.java b/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/internal/draw2d/ICustomTooltipSite.java
index 7d0774fe3..f91ad0b09 100644
--- a/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/internal/draw2d/ICustomTooltipSite.java
+++ b/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/internal/draw2d/ICustomTooltipSite.java
@@ -20,13 +20,13 @@
  * @coverage gef.draw2d
  */
 public interface ICustomTooltipSite {
-  /**
-   * Hides current tooltip.
-   */
-  void hideTooltip();
+	/**
+	 * Hides current tooltip.
+	 */
+	void hideTooltip();
 
-  /**
-   * @return {@link Listener} that hides tooltip on mouse exit or click.
-   */
-  Listener getHideListener();
+	/**
+	 * @return {@link Listener} that hides tooltip on mouse exit or click.
+	 */
+	Listener getHideListener();
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/internal/draw2d/IPreferredSizeProvider.java b/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/internal/draw2d/IPreferredSizeProvider.java
index b296edfd4..a4ec7a6c4 100644
--- a/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/internal/draw2d/IPreferredSizeProvider.java
+++ b/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/internal/draw2d/IPreferredSizeProvider.java
@@ -19,8 +19,8 @@
  * @coverage gef.draw2d
  */
 public interface IPreferredSizeProvider {
-  /**
-   * Calculate new preferred size use original preferred size.
-   */
-  Dimension getPreferredSize(Dimension originalPreferredSize);
+	/**
+	 * Calculate new preferred size use original preferred size.
+	 */
+	Dimension getPreferredSize(Dimension originalPreferredSize);
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/internal/draw2d/IRootFigure.java b/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/internal/draw2d/IRootFigure.java
index 1b0368996..e2b26b017 100644
--- a/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/internal/draw2d/IRootFigure.java
+++ b/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/internal/draw2d/IRootFigure.java
@@ -25,78 +25,78 @@
  * @coverage gef.draw2d
  */
 public interface IRootFigure {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Layer's
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds the given layer as a child of this {@link IRootFigure}.
-   */
-  void addLayer(Layer layer);
-
-  /**
-   * Adds the given layer as a child of this {@link IRootFigure} with given index.
-   */
-  void addLayer(Layer layer, int index);
-
-  /**
-   * Returns the layer identified by the <code>name</code> given in the input.
-   */
-  Layer getLayer(String name);
-
-  /**
-   * Return all layer's from this {@link IRootFigure}.
-   */
-  List<Layer> getLayers();
-
-  /**
-   * Removes the layer identified by the given key from this {@link IRootFigure}.
-   */
-  void removeLayer(String name);
-
-  /**
-   * Removes the given layer from this {@link IRootFigure}.
-   */
-  void removeLayer(Layer layer);
-
-  /**
-   * Remove all layer's from this {@link IRootFigure}.
-   */
-  void removeAll();
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Properties
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Returns the background Color of this Figure.
-   */
-  Color getBackground();
-
-  /**
-   * Sets the background color.
-   */
-  void setBackground(Color background);
-
-  /**
-   * Returns the local foreground Color of this Figure.
-   */
-  Color getForeground();
-
-  /**
-   * Sets the foreground color.
-   */
-  void setForeground(Color foreground);
-
-  /**
-   * Returns the current Font by reference.
-   */
-  Font getFont();
-
-  /**
-   * Sets the font.
-   */
-  void setFont(Font font);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Layer's
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds the given layer as a child of this {@link IRootFigure}.
+	 */
+	void addLayer(Layer layer);
+
+	/**
+	 * Adds the given layer as a child of this {@link IRootFigure} with given index.
+	 */
+	void addLayer(Layer layer, int index);
+
+	/**
+	 * Returns the layer identified by the <code>name</code> given in the input.
+	 */
+	Layer getLayer(String name);
+
+	/**
+	 * Return all layer's from this {@link IRootFigure}.
+	 */
+	List<Layer> getLayers();
+
+	/**
+	 * Removes the layer identified by the given key from this {@link IRootFigure}.
+	 */
+	void removeLayer(String name);
+
+	/**
+	 * Removes the given layer from this {@link IRootFigure}.
+	 */
+	void removeLayer(Layer layer);
+
+	/**
+	 * Remove all layer's from this {@link IRootFigure}.
+	 */
+	void removeAll();
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Properties
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Returns the background Color of this Figure.
+	 */
+	Color getBackground();
+
+	/**
+	 * Sets the background color.
+	 */
+	void setBackground(Color background);
+
+	/**
+	 * Returns the local foreground Color of this Figure.
+	 */
+	Color getForeground();
+
+	/**
+	 * Sets the foreground color.
+	 */
+	void setForeground(Color foreground);
+
+	/**
+	 * Returns the current Font by reference.
+	 */
+	Font getFont();
+
+	/**
+	 * Sets the font.
+	 */
+	void setFont(Font font);
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/internal/draw2d/JustifyLabel.java b/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/internal/draw2d/JustifyLabel.java
index ee877bcba..c6759cfe2 100644
--- a/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/internal/draw2d/JustifyLabel.java
+++ b/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/internal/draw2d/JustifyLabel.java
@@ -35,314 +35,314 @@
  * @coverage gef.draw2d
  */
 public class JustifyLabel extends Figure {
-  private String m_text = "";
-  private int m_wrapChars = 50;
-  private int m_lineWidth;
-  private boolean m_isCharMode = true;
-  private List<Line> m_lines = Collections.emptyList();
-  private Dimension m_preferredSize = new Dimension();
+	private String m_text = "";
+	private int m_wrapChars = 50;
+	private int m_lineWidth;
+	private boolean m_isCharMode = true;
+	private List<Line> m_lines = Collections.emptyList();
+	private Dimension m_preferredSize = new Dimension();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public JustifyLabel() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public JustifyLabel() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Returns the desirable size for this label's text.
-   */
-  public Dimension getPreferredSize() {
-    return m_preferredSize;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Returns the desirable size for this label's text.
+	 */
+	public Dimension getPreferredSize() {
+		return m_preferredSize;
+	}
 
-  /**
-   * Returns the text of the label.
-   */
-  public String getText() {
-    return m_text;
-  }
+	/**
+	 * Returns the text of the label.
+	 */
+	public String getText() {
+		return m_text;
+	}
 
-  /**
-   * Sets the label's text.
-   */
-  public void setText(String text) {
-    m_text = text;
-    updateContent();
-  }
+	/**
+	 * Sets the label's text.
+	 */
+	public void setText(String text) {
+		m_text = text;
+		updateContent();
+	}
 
-  /**
-   * Returns chars count for wrap one line.
-   */
-  public int getWrapChars() {
-    return m_wrapChars;
-  }
+	/**
+	 * Returns chars count for wrap one line.
+	 */
+	public int getWrapChars() {
+		return m_wrapChars;
+	}
 
-  /**
-   * Sets chars count for wrap one line.
-   */
-  public void setWrapChars(int wrapChars) {
-    m_wrapChars = wrapChars;
-    m_lineWidth = 0;
-    m_isCharMode = true;
-    updateContent();
-  }
+	/**
+	 * Sets chars count for wrap one line.
+	 */
+	public void setWrapChars(int wrapChars) {
+		m_wrapChars = wrapChars;
+		m_lineWidth = 0;
+		m_isCharMode = true;
+		updateContent();
+	}
 
-  /**
-   * Returns width in pixels for wrap one line.
-   */
-  public int getWrapPixels() {
-    return m_lineWidth;
-  }
+	/**
+	 * Returns width in pixels for wrap one line.
+	 */
+	public int getWrapPixels() {
+		return m_lineWidth;
+	}
 
-  /**
-   * Sets width in pixels for wrap one line.
-   */
-  public void setWrapPixels(int width) {
-    m_lineWidth = width;
-    m_wrapChars = 0;
-    m_isCharMode = false;
-    updateContent();
-  }
+	/**
+	 * Sets width in pixels for wrap one line.
+	 */
+	public void setWrapPixels(int width) {
+		m_lineWidth = width;
+		m_wrapChars = 0;
+		m_isCharMode = false;
+		updateContent();
+	}
 
-  /**
-   * @return <code>true</code> if figure work on char wrap mode.
-   */
-  public boolean isCharMode() {
-    return m_isCharMode;
-  }
+	/**
+	 * @return <code>true</code> if figure work on char wrap mode.
+	 */
+	public boolean isCharMode() {
+		return m_isCharMode;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Figure
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void paintClientArea(Graphics graphics) {
-    for (Line line : m_lines) {
-      float currentX = 0;
-      for (int i = 0; i < line.words.length; i++) {
-        graphics.drawString(line.words[i], Math.round(currentX), line.startY);
-        currentX += line.wordsSeparatorWidth + line.widths[i];
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Figure
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void paintClientArea(Graphics graphics) {
+		for (Line line : m_lines) {
+			float currentX = 0;
+			for (int i = 0; i < line.words.length; i++) {
+				graphics.drawString(line.words[i], Math.round(currentX), line.startY);
+				currentX += line.wordsSeparatorWidth + line.widths[i];
+			}
+		}
+	}
 
-  @Override
-  public void setFont(Font font) {
-    super.setFont(font);
-    updateContent();
-  }
+	@Override
+	public void setFont(Font font) {
+		super.setFont(font);
+		updateContent();
+	}
 
-  @Override
-  public void setBorder(Border border) {
-    super.setBorder(border);
-    GC gc = FigureUtils.createGC();
-    try {
-      // prepare metrics
-      gc.setFont(getFont());
-      FontMetrics fontMetrics = gc.getFontMetrics();
-      int lineWidth = m_isCharMode ? fontMetrics.getAverageCharWidth() * m_wrapChars : m_lineWidth;
-      int lineHeight = fontMetrics.getHeight();
-      // calculate preferred size
-      calculatePreferredSize(lineWidth, lineHeight);
-    } finally {
-      gc.dispose();
-    }
-  }
+	@Override
+	public void setBorder(Border border) {
+		super.setBorder(border);
+		GC gc = FigureUtils.createGC();
+		try {
+			// prepare metrics
+			gc.setFont(getFont());
+			FontMetrics fontMetrics = gc.getFontMetrics();
+			int lineWidth = m_isCharMode ? fontMetrics.getAverageCharWidth() * m_wrapChars : m_lineWidth;
+			int lineHeight = fontMetrics.getHeight();
+			// calculate preferred size
+			calculatePreferredSize(lineWidth, lineHeight);
+		} finally {
+			gc.dispose();
+		}
+	}
 
-  private void updateContent() {
-    m_lines = Lists.newArrayList();
-    GC gc = FigureUtils.createGC();
-    try {
-      // prepare metrics
-      gc.setFont(getFont());
-      FontMetrics fontMetrics = gc.getFontMetrics();
-      int lineWidth = m_isCharMode ? fontMetrics.getAverageCharWidth() * m_wrapChars : m_lineWidth;
-      int lineHeight = fontMetrics.getHeight();
-      int wordsSeparatorWidth = gc.getAdvanceWidth(' ');
-      int textLength = m_text.length();
-      //
-      for (int lineIndex = 0, startIndex = 0; startIndex < textLength; lineIndex++) {
-        // calculate text line
-        int endIndex = m_text.indexOf('\n', startIndex);
-        if (startIndex == endIndex) {
-          startIndex++;
-          continue;
-        }
-        if (endIndex == -1) {
-          endIndex = textLength;
-        }
-        // separate text line to words
-        String[] words = StringUtils.split(m_text.substring(startIndex, endIndex));
-        int[] widths = new int[words.length];
-        for (int i = 0; i < widths.length; i++) {
-          widths[i] = gc.stringExtent(words[i]).x;
-        }
-        // calculate internal lines
-        int calculateLineWidth = 0;
-        int startWordIndex = 0;
-        boolean isStartWordIndex = true;
-        for (int i = 0; i < widths.length; i++) {
-          int nextWidth = isStartWordIndex ? widths[i] : wordsSeparatorWidth + widths[i];
-          isStartWordIndex = false;
-          int delta = lineWidth - calculateLineWidth - nextWidth;
-          if (delta > 0) {
-            calculateLineWidth += nextWidth;
-          } else if (delta == 0) {
-            Line line = new Line(words, widths, startWordIndex, i + 1 - startWordIndex);
-            line.wordsSeparatorWidth = wordsSeparatorWidth;
-            line.startY = lineIndex * lineHeight;
-            m_lines.add(line);
-            // reset state
-            lineIndex++;
-            calculateLineWidth = 0;
-            isStartWordIndex = true;
-            startWordIndex = i + 1;
-          } else {
-            int length = i - startWordIndex;
-            //
-            if (widths[i] > lineWidth) {
-              if (length == 0) {
-                length = 1;
-              } else {
-                length++;
-              }
-              Line line = new Line(words, widths, startWordIndex, length);
-              line.startY = lineIndex * lineHeight;
-              m_lines.add(line);
-              //
-              int remainderWidth = lineWidth - calculateLineWidth;
-              if (length > 1) {
-                remainderWidth -= wordsSeparatorWidth;
-              }
-              //
-              int lineLastIndex = line.widths.length - 1;
-              String splitWord = line.words[lineLastIndex];
-              String splitWordBeforePart = null;
-              int splitWordBeforeWidth = 0;
-              int splitCharCount = splitWord.length();
-              while (splitCharCount > 0) {
-                splitWordBeforePart = splitWord.substring(0, splitCharCount);
-                splitWordBeforeWidth = gc.stringExtent(splitWordBeforePart).x;
-                if (splitWordBeforeWidth <= remainderWidth) {
-                  break;
-                }
-                splitCharCount--;
-              }
-              //
-              line.words[lineLastIndex] = splitWordBeforePart;
-              line.widths[lineLastIndex] = splitWordBeforeWidth;
-              //
-              words[i] = words[i].substring(splitCharCount);
-              widths[i] = gc.stringExtent(words[i]).x;
-              //
-              line.calculateWordsSeparatorWidth(lineWidth);
-              // reset state
-              lineIndex++;
-              calculateLineWidth = 0;
-              isStartWordIndex = true;
-              startWordIndex = i--;
-            } else {
-              if (length == 0) {
-                length = 1;
-              }
-              Line line = new Line(words, widths, startWordIndex, length);
-              line.calculateWordsSeparatorWidth(lineWidth);
-              line.startY = lineIndex * lineHeight;
-              m_lines.add(line);
-              // reset state
-              lineIndex++;
-              calculateLineWidth = 0;
-              isStartWordIndex = true;
-              if (i == startWordIndex) {
-                startWordIndex = i + 1;
-              } else {
-                startWordIndex = i--;
-              }
-            }
-          }
-        }
-        //
-        if (calculateLineWidth > 0) {
-          Line line = new Line(words, widths, startWordIndex, widths.length - startWordIndex);
-          line.wordsSeparatorWidth = wordsSeparatorWidth;
-          line.startY = lineIndex * lineHeight;
-          m_lines.add(line);
-        }
-        //
-        startIndex = endIndex + 1;
-      }
-      // calculate preferred size
-      calculatePreferredSize(lineWidth, lineHeight);
-    } finally {
-      gc.dispose();
-    }
-  }
+	private void updateContent() {
+		m_lines = Lists.newArrayList();
+		GC gc = FigureUtils.createGC();
+		try {
+			// prepare metrics
+			gc.setFont(getFont());
+			FontMetrics fontMetrics = gc.getFontMetrics();
+			int lineWidth = m_isCharMode ? fontMetrics.getAverageCharWidth() * m_wrapChars : m_lineWidth;
+			int lineHeight = fontMetrics.getHeight();
+			int wordsSeparatorWidth = gc.getAdvanceWidth(' ');
+			int textLength = m_text.length();
+			//
+			for (int lineIndex = 0, startIndex = 0; startIndex < textLength; lineIndex++) {
+				// calculate text line
+				int endIndex = m_text.indexOf('\n', startIndex);
+				if (startIndex == endIndex) {
+					startIndex++;
+					continue;
+				}
+				if (endIndex == -1) {
+					endIndex = textLength;
+				}
+				// separate text line to words
+				String[] words = StringUtils.split(m_text.substring(startIndex, endIndex));
+				int[] widths = new int[words.length];
+				for (int i = 0; i < widths.length; i++) {
+					widths[i] = gc.stringExtent(words[i]).x;
+				}
+				// calculate internal lines
+				int calculateLineWidth = 0;
+				int startWordIndex = 0;
+				boolean isStartWordIndex = true;
+				for (int i = 0; i < widths.length; i++) {
+					int nextWidth = isStartWordIndex ? widths[i] : wordsSeparatorWidth + widths[i];
+					isStartWordIndex = false;
+					int delta = lineWidth - calculateLineWidth - nextWidth;
+					if (delta > 0) {
+						calculateLineWidth += nextWidth;
+					} else if (delta == 0) {
+						Line line = new Line(words, widths, startWordIndex, i + 1 - startWordIndex);
+						line.wordsSeparatorWidth = wordsSeparatorWidth;
+						line.startY = lineIndex * lineHeight;
+						m_lines.add(line);
+						// reset state
+						lineIndex++;
+						calculateLineWidth = 0;
+						isStartWordIndex = true;
+						startWordIndex = i + 1;
+					} else {
+						int length = i - startWordIndex;
+						//
+						if (widths[i] > lineWidth) {
+							if (length == 0) {
+								length = 1;
+							} else {
+								length++;
+							}
+							Line line = new Line(words, widths, startWordIndex, length);
+							line.startY = lineIndex * lineHeight;
+							m_lines.add(line);
+							//
+							int remainderWidth = lineWidth - calculateLineWidth;
+							if (length > 1) {
+								remainderWidth -= wordsSeparatorWidth;
+							}
+							//
+							int lineLastIndex = line.widths.length - 1;
+							String splitWord = line.words[lineLastIndex];
+							String splitWordBeforePart = null;
+							int splitWordBeforeWidth = 0;
+							int splitCharCount = splitWord.length();
+							while (splitCharCount > 0) {
+								splitWordBeforePart = splitWord.substring(0, splitCharCount);
+								splitWordBeforeWidth = gc.stringExtent(splitWordBeforePart).x;
+								if (splitWordBeforeWidth <= remainderWidth) {
+									break;
+								}
+								splitCharCount--;
+							}
+							//
+							line.words[lineLastIndex] = splitWordBeforePart;
+							line.widths[lineLastIndex] = splitWordBeforeWidth;
+							//
+							words[i] = words[i].substring(splitCharCount);
+							widths[i] = gc.stringExtent(words[i]).x;
+							//
+							line.calculateWordsSeparatorWidth(lineWidth);
+							// reset state
+							lineIndex++;
+							calculateLineWidth = 0;
+							isStartWordIndex = true;
+							startWordIndex = i--;
+						} else {
+							if (length == 0) {
+								length = 1;
+							}
+							Line line = new Line(words, widths, startWordIndex, length);
+							line.calculateWordsSeparatorWidth(lineWidth);
+							line.startY = lineIndex * lineHeight;
+							m_lines.add(line);
+							// reset state
+							lineIndex++;
+							calculateLineWidth = 0;
+							isStartWordIndex = true;
+							if (i == startWordIndex) {
+								startWordIndex = i + 1;
+							} else {
+								startWordIndex = i--;
+							}
+						}
+					}
+				}
+				//
+				if (calculateLineWidth > 0) {
+					Line line = new Line(words, widths, startWordIndex, widths.length - startWordIndex);
+					line.wordsSeparatorWidth = wordsSeparatorWidth;
+					line.startY = lineIndex * lineHeight;
+					m_lines.add(line);
+				}
+				//
+				startIndex = endIndex + 1;
+			}
+			// calculate preferred size
+			calculatePreferredSize(lineWidth, lineHeight);
+		} finally {
+			gc.dispose();
+		}
+	}
 
-  private void calculatePreferredSize(int lineWidth, int lineHeight) {
-    m_preferredSize = new Dimension();
-    if (!m_lines.isEmpty()) {
-      int size = m_lines.size();
-      Line line = m_lines.get(size - 1);
-      if (size == 1) {
-        int length = line.widths.length;
-        for (int i = 0; i < length; i++) {
-          m_preferredSize.width += line.widths[i];
-        }
-        m_preferredSize.width += Math.round(line.wordsSeparatorWidth * (length - 1));
-      } else {
-        m_preferredSize.width = lineWidth;
-      }
-      m_preferredSize.height = line.startY + lineHeight;
-    }
-    //
-    Insets insets = getInsets();
-    m_preferredSize.expand(insets.getWidth(), insets.getHeight());
-  }
+	private void calculatePreferredSize(int lineWidth, int lineHeight) {
+		m_preferredSize = new Dimension();
+		if (!m_lines.isEmpty()) {
+			int size = m_lines.size();
+			Line line = m_lines.get(size - 1);
+			if (size == 1) {
+				int length = line.widths.length;
+				for (int i = 0; i < length; i++) {
+					m_preferredSize.width += line.widths[i];
+				}
+				m_preferredSize.width += Math.round(line.wordsSeparatorWidth * (length - 1));
+			} else {
+				m_preferredSize.width = lineWidth;
+			}
+			m_preferredSize.height = line.startY + lineHeight;
+		}
+		//
+		Insets insets = getInsets();
+		m_preferredSize.expand(insets.getWidth(), insets.getHeight());
+	}
 
-  /**
-   * Internal information about one line.
-   */
-  private static final class Line {
-    final String[] words;
-    final int[] widths;
-    int startY;
-    float wordsSeparatorWidth;
+	/**
+	 * Internal information about one line.
+	 */
+	private static final class Line {
+		final String[] words;
+		final int[] widths;
+		int startY;
+		float wordsSeparatorWidth;
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public Line(String[] words, int[] widths, int startIndex, int length) {
-      // copy words
-      this.words = new String[length];
-      System.arraycopy(words, startIndex, this.words, 0, length);
-      // copy widths
-      this.widths = new int[length];
-      System.arraycopy(widths, startIndex, this.widths, 0, length);
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public Line(String[] words, int[] widths, int startIndex, int length) {
+			// copy words
+			this.words = new String[length];
+			System.arraycopy(words, startIndex, this.words, 0, length);
+			// copy widths
+			this.widths = new int[length];
+			System.arraycopy(widths, startIndex, this.widths, 0, length);
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Access
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public void calculateWordsSeparatorWidth(int lineWidth) {
-      if (widths.length > 1) {
-        float lineWordsSeparatorWidth = 0;
-        for (int i = 0; i < widths.length; i++) {
-          lineWordsSeparatorWidth += widths[i];
-        }
-        wordsSeparatorWidth = (lineWidth - lineWordsSeparatorWidth) / (widths.length - 1);
-      }
-    }
-  }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Access
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public void calculateWordsSeparatorWidth(int lineWidth) {
+			if (widths.length > 1) {
+				float lineWordsSeparatorWidth = 0;
+				for (int i = 0; i < widths.length; i++) {
+					lineWordsSeparatorWidth += widths[i];
+				}
+				wordsSeparatorWidth = (lineWidth - lineWordsSeparatorWidth) / (widths.length - 1);
+			}
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/internal/draw2d/Label.java b/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/internal/draw2d/Label.java
index 78c12c26a..11c7f0047 100644
--- a/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/internal/draw2d/Label.java
+++ b/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/internal/draw2d/Label.java
@@ -24,84 +24,84 @@
  * @coverage gef.draw2d
  */
 public class Label extends Figure {
-  private String m_text = "";
-  private Dimension m_preferredSize;
+	private String m_text = "";
+	private Dimension m_preferredSize;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Construct an empty {@link Label}.
-   */
-  public Label() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Construct an empty {@link Label}.
+	 */
+	public Label() {
+	}
 
-  /**
-   * Construct a {@link Label} with passed String as its text.
-   */
-  public Label(String text) {
-    setText(text);
-  }
+	/**
+	 * Construct a {@link Label} with passed String as its text.
+	 */
+	public Label(String text) {
+		setText(text);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Label
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Returns the desirable size for this label's text.
-   */
-  public Dimension getPreferredSize() {
-    if (m_preferredSize == null) {
-      m_preferredSize = FigureUtils.calculateTextSize(m_text, getFont());
-      Insets insets = getInsets();
-      m_preferredSize.expand(insets.getWidth(), insets.getHeight());
-    }
-    return m_preferredSize;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Label
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Returns the desirable size for this label's text.
+	 */
+	public Dimension getPreferredSize() {
+		if (m_preferredSize == null) {
+			m_preferredSize = FigureUtils.calculateTextSize(m_text, getFont());
+			Insets insets = getInsets();
+			m_preferredSize.expand(insets.getWidth(), insets.getHeight());
+		}
+		return m_preferredSize;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Properties
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Returns the text of the label.
-   */
-  public String getText() {
-    return m_text;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Properties
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Returns the text of the label.
+	 */
+	public String getText() {
+		return m_text;
+	}
 
-  /**
-   * Sets the label's text.
-   */
-  public void setText(String text) {
-    if (text == null) {
-      text = "";
-    }
-    if (!m_text.equals(text)) {
-      m_text = text;
-      resetState();
-    }
-  }
+	/**
+	 * Sets the label's text.
+	 */
+	public void setText(String text) {
+		if (text == null) {
+			text = "";
+		}
+		if (!m_text.equals(text)) {
+			m_text = text;
+			resetState();
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Figure
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void repaint(boolean reset, int x, int y, int width, int height) {
-    if (reset) {
-      m_preferredSize = null;
-    }
-    super.repaint(reset, x, y, width, height);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Figure
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void repaint(boolean reset, int x, int y, int width, int height) {
+		if (reset) {
+			m_preferredSize = null;
+		}
+		super.repaint(reset, x, y, width, height);
+	}
 
-  @Override
-  protected void paintClientArea(Graphics graphics) {
-    graphics.drawText(m_text, 0, 0);
-  }
+	@Override
+	protected void paintClientArea(Graphics graphics) {
+		graphics.drawText(m_text, 0, 0);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/internal/draw2d/RefreshManager.java b/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/internal/draw2d/RefreshManager.java
index ee3cbd7dd..61b0b9a04 100644
--- a/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/internal/draw2d/RefreshManager.java
+++ b/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/internal/draw2d/RefreshManager.java
@@ -21,65 +21,65 @@
  * @coverage gef.draw2d
  */
 public class RefreshManager implements Runnable {
-  private final FigureCanvas m_canvas;
-  private final Rectangle m_dirtyRegion = new Rectangle();
-  private boolean m_refreshWork;
-  private boolean m_requestWork;
+	private final FigureCanvas m_canvas;
+	private final Rectangle m_dirtyRegion = new Rectangle();
+	private boolean m_refreshWork;
+	private boolean m_requestWork;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public RefreshManager(FigureCanvas canvas) {
-    m_canvas = canvas;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public RefreshManager(FigureCanvas canvas) {
+		m_canvas = canvas;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refreshing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private synchronized void refresh() {
-    // check if refresh already works
-    if (m_refreshWork || m_canvas.isDisposed()) {
-      return;
-    }
-    // work refresh
-    try {
-      m_refreshWork = true;
-      m_requestWork = false;
-      m_canvas.handleRefresh(
-          m_dirtyRegion.x,
-          m_dirtyRegion.y,
-          m_dirtyRegion.width,
-          m_dirtyRegion.height);
-      m_dirtyRegion.setBounds(0, 0, 0, 0);
-    } finally {
-      m_refreshWork = false;
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refreshing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private synchronized void refresh() {
+		// check if refresh already works
+		if (m_refreshWork || m_canvas.isDisposed()) {
+			return;
+		}
+		// work refresh
+		try {
+			m_refreshWork = true;
+			m_requestWork = false;
+			m_canvas.handleRefresh(
+					m_dirtyRegion.x,
+					m_dirtyRegion.y,
+					m_dirtyRegion.width,
+					m_dirtyRegion.height);
+			m_dirtyRegion.setBounds(0, 0, 0, 0);
+		} finally {
+			m_refreshWork = false;
+		}
+	}
 
-  /**
-   * Send repaint request for <code>FigureCanvas</code>. Adds a dirty region (defined by the
-   * rectangle <i>x, y, w, h</i>) to the update queue.
-   */
-  public synchronized void refreshRequest(int x, int y, int width, int height) {
-    m_dirtyRegion.union(x, y, width, height);
-    //
-    if (!m_requestWork) {
-      Display.getCurrent().asyncExec(this);
-      m_requestWork = true;
-    }
-  }
+	/**
+	 * Send repaint request for <code>FigureCanvas</code>. Adds a dirty region (defined by the
+	 * rectangle <i>x, y, w, h</i>) to the update queue.
+	 */
+	public synchronized void refreshRequest(int x, int y, int width, int height) {
+		m_dirtyRegion.union(x, y, width, height);
+		//
+		if (!m_requestWork) {
+			Display.getCurrent().asyncExec(this);
+			m_requestWork = true;
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Runnable
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void run() {
-    refresh();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Runnable
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void run() {
+		refresh();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/internal/draw2d/RootFigure.java b/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/internal/draw2d/RootFigure.java
index 519533d66..3e4abbbbd 100644
--- a/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/internal/draw2d/RootFigure.java
+++ b/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/internal/draw2d/RootFigure.java
@@ -27,197 +27,197 @@
  * @coverage gef.draw2d
  */
 public class RootFigure extends Figure implements IRootFigure {
-  private final FigureCanvas m_figureCanvas;
-  private final RefreshManager m_refreshManager;
-  private EventManager m_eventManager;
-  private Dimension m_preferredSize;
-  private Map<String, Layer> m_nameToLayer = new HashMap<>();
-  private IPreferredSizeProvider m_preferredSizeProvider;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public RootFigure(FigureCanvas figureCanvas, RefreshManager refreshManager) {
-    m_figureCanvas = figureCanvas;
-    m_refreshManager = refreshManager;
-    setOpaque(true);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets events handler.
-   */
-  public void setEventManager(EventManager eventManager) {
-    m_eventManager = eventManager;
-  }
-
-  /**
-   * Sets figure preferred size provider.
-   */
-  public void setPreferredSizeProvider(IPreferredSizeProvider provider) {
-    m_preferredSizeProvider = provider;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // RootFigure
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @noreference @nooverride
-   */
-  @Override
-  public FigureCanvas getFigureCanvas() {
-    return m_figureCanvas;
-  }
-
-  /**
-   * Returns the desirable size for this container figure.
-   */
-  public Dimension getPreferredSize() {
-    // check preferred size
-    if (m_preferredSize == null) {
-      // calculate preferred size
-      Rectangle preferred = new Rectangle();
-      // layer's loop
-      for (Layer layer : getLayers()) {
-        // figure's loop
-        for (Figure figure : layer.getChildren()) {
-          if (figure.isVisible()) {
-            if (figure instanceof IPreferredSizeProvider) {
-              IPreferredSizeProvider provider = (IPreferredSizeProvider) figure;
-              Dimension figurePreferredSize = provider.getPreferredSize(null);
-              preferred.union(0, 0, figurePreferredSize.width, figurePreferredSize.height);
-            } else {
-              preferred.union(figure.getBounds());
-            }
-          }
-        }
-      }
-      // set preferred size
-      if (m_preferredSizeProvider == null) {
-        m_preferredSize = preferred.getSize();
-      } else {
-        m_preferredSize = m_preferredSizeProvider.getPreferredSize(preferred.getSize());
-      }
-    }
-    return m_preferredSize;
-  }
-
-  /**
-   * Sets the bounds of this Figure to the Rectangle <i>rect</i>. Bounds set of union FigureCanvas
-   * <code>bounds</code> and preferred size.
-   */
-  @Override
-  public void setBounds(Rectangle bounds) {
-    Rectangle value = getBounds().setBounds(bounds).union(getPreferredSize());
-    for (Layer layer : getLayers()) {
-      layer.setBounds(value);
-    }
-  }
-
-  /**
-   * Send repaint request for <code>RefreshManager</code>. Adds a dirty region (defined by the
-   * rectangle <i>x, y, w, h</i>) to the update queue. If <code>reset</code> is <code>true</code>
-   * then <code>RootFigure</code> recalculate preferred size and <code>FigureCanvas</code> make
-   * reconfigure scrolling.
-   */
-  @Override
-  protected void repaint(boolean reset, int x, int y, int width, int height) {
-    if (reset) {
-      m_preferredSize = null;
-    }
-    m_refreshManager.refreshRequest(x, y, width, height);
-  }
-
-  /**
-   * Updates the cursor over {@link EventManager}.
-   */
-  @Override
-  protected void updateCursor() {
-    m_eventManager.updateCursor();
-  }
-
-  /**
-   * Sets capture figure over {@link EventManager}.
-   */
-  @Override
-  public void setCapture(Figure figure) {
-    m_eventManager.setCapture(figure);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Layer's
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds the given layer as a child of this {@link IRootFigure}.
-   */
-  @Override
-  public void addLayer(Layer layer) {
-    m_nameToLayer.put(layer.getName(), layer);
-    add(layer, null, -1);
-  }
-
-  /**
-   * Adds the given layer as a child of this {@link IRootFigure} with given index.
-   */
-  @Override
-  public void addLayer(Layer layer, int index) {
-    m_nameToLayer.put(layer.getName(), layer);
-    add(layer, null, index);
-  }
-
-  /**
-   * Returns the layer identified by the <code>name</code> given in the input.
-   */
-  @Override
-  public Layer getLayer(String name) {
-    return m_nameToLayer.get(name);
-  }
-
-  /**
-   * Return all layer's from this {@link IRootFigure}.
-   */
-  @Override
-  public List<Layer> getLayers() {
-    List<Layer> layers = Lists.newArrayList();
-    for (Figure childFigure : getChildren()) {
-      layers.add((Layer) childFigure);
-    }
-    return layers;
-  }
-
-  /**
-   * Removes the layer identified by the given key from this {@link IRootFigure}.
-   */
-  @Override
-  public void removeLayer(String name) {
-    removeLayer(getLayer(name));
-  }
-
-  /**
-   * Removes the given layer from this {@link IRootFigure}.
-   */
-  @Override
-  public void removeLayer(Layer layer) {
-    m_nameToLayer.remove(layer.getName());
-    remove(layer);
-  }
-
-  /**
-   * Remove all layer's from this {@link IRootFigure}.
-   */
-  @Override
-  public void removeAll() {
-    m_nameToLayer = new HashMap<>();
-    super.removeAll();
-  }
+	private final FigureCanvas m_figureCanvas;
+	private final RefreshManager m_refreshManager;
+	private EventManager m_eventManager;
+	private Dimension m_preferredSize;
+	private Map<String, Layer> m_nameToLayer = new HashMap<>();
+	private IPreferredSizeProvider m_preferredSizeProvider;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public RootFigure(FigureCanvas figureCanvas, RefreshManager refreshManager) {
+		m_figureCanvas = figureCanvas;
+		m_refreshManager = refreshManager;
+		setOpaque(true);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets events handler.
+	 */
+	public void setEventManager(EventManager eventManager) {
+		m_eventManager = eventManager;
+	}
+
+	/**
+	 * Sets figure preferred size provider.
+	 */
+	public void setPreferredSizeProvider(IPreferredSizeProvider provider) {
+		m_preferredSizeProvider = provider;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// RootFigure
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @noreference @nooverride
+	 */
+	@Override
+	public FigureCanvas getFigureCanvas() {
+		return m_figureCanvas;
+	}
+
+	/**
+	 * Returns the desirable size for this container figure.
+	 */
+	public Dimension getPreferredSize() {
+		// check preferred size
+		if (m_preferredSize == null) {
+			// calculate preferred size
+			Rectangle preferred = new Rectangle();
+			// layer's loop
+			for (Layer layer : getLayers()) {
+				// figure's loop
+				for (Figure figure : layer.getChildren()) {
+					if (figure.isVisible()) {
+						if (figure instanceof IPreferredSizeProvider) {
+							IPreferredSizeProvider provider = (IPreferredSizeProvider) figure;
+							Dimension figurePreferredSize = provider.getPreferredSize(null);
+							preferred.union(0, 0, figurePreferredSize.width, figurePreferredSize.height);
+						} else {
+							preferred.union(figure.getBounds());
+						}
+					}
+				}
+			}
+			// set preferred size
+			if (m_preferredSizeProvider == null) {
+				m_preferredSize = preferred.getSize();
+			} else {
+				m_preferredSize = m_preferredSizeProvider.getPreferredSize(preferred.getSize());
+			}
+		}
+		return m_preferredSize;
+	}
+
+	/**
+	 * Sets the bounds of this Figure to the Rectangle <i>rect</i>. Bounds set of union FigureCanvas
+	 * <code>bounds</code> and preferred size.
+	 */
+	@Override
+	public void setBounds(Rectangle bounds) {
+		Rectangle value = getBounds().setBounds(bounds).union(getPreferredSize());
+		for (Layer layer : getLayers()) {
+			layer.setBounds(value);
+		}
+	}
+
+	/**
+	 * Send repaint request for <code>RefreshManager</code>. Adds a dirty region (defined by the
+	 * rectangle <i>x, y, w, h</i>) to the update queue. If <code>reset</code> is <code>true</code>
+	 * then <code>RootFigure</code> recalculate preferred size and <code>FigureCanvas</code> make
+	 * reconfigure scrolling.
+	 */
+	@Override
+	protected void repaint(boolean reset, int x, int y, int width, int height) {
+		if (reset) {
+			m_preferredSize = null;
+		}
+		m_refreshManager.refreshRequest(x, y, width, height);
+	}
+
+	/**
+	 * Updates the cursor over {@link EventManager}.
+	 */
+	@Override
+	protected void updateCursor() {
+		m_eventManager.updateCursor();
+	}
+
+	/**
+	 * Sets capture figure over {@link EventManager}.
+	 */
+	@Override
+	public void setCapture(Figure figure) {
+		m_eventManager.setCapture(figure);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Layer's
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds the given layer as a child of this {@link IRootFigure}.
+	 */
+	@Override
+	public void addLayer(Layer layer) {
+		m_nameToLayer.put(layer.getName(), layer);
+		add(layer, null, -1);
+	}
+
+	/**
+	 * Adds the given layer as a child of this {@link IRootFigure} with given index.
+	 */
+	@Override
+	public void addLayer(Layer layer, int index) {
+		m_nameToLayer.put(layer.getName(), layer);
+		add(layer, null, index);
+	}
+
+	/**
+	 * Returns the layer identified by the <code>name</code> given in the input.
+	 */
+	@Override
+	public Layer getLayer(String name) {
+		return m_nameToLayer.get(name);
+	}
+
+	/**
+	 * Return all layer's from this {@link IRootFigure}.
+	 */
+	@Override
+	public List<Layer> getLayers() {
+		List<Layer> layers = Lists.newArrayList();
+		for (Figure childFigure : getChildren()) {
+			layers.add((Layer) childFigure);
+		}
+		return layers;
+	}
+
+	/**
+	 * Removes the layer identified by the given key from this {@link IRootFigure}.
+	 */
+	@Override
+	public void removeLayer(String name) {
+		removeLayer(getLayer(name));
+	}
+
+	/**
+	 * Removes the given layer from this {@link IRootFigure}.
+	 */
+	@Override
+	public void removeLayer(Layer layer) {
+		m_nameToLayer.remove(layer.getName());
+		remove(layer);
+	}
+
+	/**
+	 * Remove all layer's from this {@link IRootFigure}.
+	 */
+	@Override
+	public void removeAll() {
+		m_nameToLayer = new HashMap<>();
+		super.removeAll();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/internal/draw2d/SemiTransparentFigure.java b/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/internal/draw2d/SemiTransparentFigure.java
index 06a0ae9a8..f87761dac 100644
--- a/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/internal/draw2d/SemiTransparentFigure.java
+++ b/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/internal/draw2d/SemiTransparentFigure.java
@@ -25,38 +25,38 @@
  * @coverage gef.draw2d
  */
 public class SemiTransparentFigure extends Figure {
-  private final int m_alpha;
+	private final int m_alpha;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SemiTransparentFigure(int alpha) {
-    m_alpha = alpha;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SemiTransparentFigure(int alpha) {
+		m_alpha = alpha;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Figure
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void paintClientArea(Graphics graphics) {
-    Rectangle clientArea = getClientArea();
-    // prepare image 1x1
-    Image image;
-    {
-      PaletteData palette = new PaletteData(0xFF, 0xFF00, 0xFF0000);
-      ImageData data = new ImageData(1, 1, 32, palette);
-      int pixel = palette.getPixel(getBackground().getRGB());
-      data.setPixel(0, 0, pixel);
-      data.setAlpha(0, 0, m_alpha);
-      //
-      image = new Image(null, data);
-    }
-    // stretch image on client area
-    graphics.drawImage(image, 0, 0, 1, 1, 0, 0, clientArea.width, clientArea.height);
-    image.dispose();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Figure
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void paintClientArea(Graphics graphics) {
+		Rectangle clientArea = getClientArea();
+		// prepare image 1x1
+		Image image;
+		{
+			PaletteData palette = new PaletteData(0xFF, 0xFF00, 0xFF0000);
+			ImageData data = new ImageData(1, 1, 32, palette);
+			int pixel = palette.getPixel(getBackground().getRGB());
+			data.setPixel(0, 0, pixel);
+			data.setAlpha(0, 0, m_alpha);
+			//
+			image = new Image(null, data);
+		}
+		// stretch image on client area
+		graphics.drawImage(image, 0, 0, 1, 1, 0, 0, clientArea.width, clientArea.height);
+		image.dispose();
+	}
 }
diff --git a/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/internal/draw2d/TargetFigureFindVisitor.java b/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/internal/draw2d/TargetFigureFindVisitor.java
index f8aed684c..7335bb2e5 100644
--- a/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/internal/draw2d/TargetFigureFindVisitor.java
+++ b/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/internal/draw2d/TargetFigureFindVisitor.java
@@ -21,80 +21,80 @@
  * @coverage gef.draw2d
  */
 public class TargetFigureFindVisitor extends FigureVisitor {
-  private final Point m_location;
-  private Figure m_result;
+	private final Point m_location;
+	private Figure m_result;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public TargetFigureFindVisitor(FigureCanvas canvas, int x, int y) {
-    m_location = new Point(x, y);
-    m_location.x += canvas.getHorizontalScrollModel().getSelection();
-    m_location.y += canvas.getVerticalScrollModel().getSelection();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public TargetFigureFindVisitor(FigureCanvas canvas, int x, int y) {
+		m_location = new Point(x, y);
+		m_location.x += canvas.getHorizontalScrollModel().getSelection();
+		m_location.y += canvas.getVerticalScrollModel().getSelection();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Visitor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean visit(Figure figure) {
-    boolean canAccept =
-        m_result == null
-            && figure.isVisible()
-            && figure.containsPoint(m_location)
-            && acceptVisit(figure);
-    if (canAccept) {
-      // found result, but we need to check child figure's
-      m_location.performTranslate(figure.getLocation().getNegated());
-      m_location.performTranslate(figure.getInsets().getNegated());
-      return true;
-    }
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Visitor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean visit(Figure figure) {
+		boolean canAccept =
+				m_result == null
+				&& figure.isVisible()
+				&& figure.containsPoint(m_location)
+				&& acceptVisit(figure);
+		if (canAccept) {
+			// found result, but we need to check child figure's
+			m_location.performTranslate(figure.getLocation().getNegated());
+			m_location.performTranslate(figure.getInsets().getNegated());
+			return true;
+		}
+		return false;
+	}
 
-  @Override
-  public void endVisit(Figure figure) {
-    // OK, this location last child figure under mouse
-    if (m_result == null) {
-      if (acceptResult(figure)) {
-        m_result = figure;
-      } else {
-        // if figure was visited, but NOT accepted, we should restore location
-        m_location.performTranslate(figure.getLocation());
-        m_location.performTranslate(figure.getInsets());
-      }
-    }
-  }
+	@Override
+	public void endVisit(Figure figure) {
+		// OK, this location last child figure under mouse
+		if (m_result == null) {
+			if (acceptResult(figure)) {
+				m_result = figure;
+			} else {
+				// if figure was visited, but NOT accepted, we should restore location
+				m_location.performTranslate(figure.getLocation());
+				m_location.performTranslate(figure.getInsets());
+			}
+		}
+	}
 
-  /**
-   * Returns <code>true</code> if given {@link Figure} can involve to search.<br>
-   * By default return <code>true</code>.
-   */
-  protected boolean acceptVisit(Figure figure) {
-    return true;
-  }
+	/**
+	 * Returns <code>true</code> if given {@link Figure} can involve to search.<br>
+	 * By default return <code>true</code>.
+	 */
+	protected boolean acceptVisit(Figure figure) {
+		return true;
+	}
 
-  /**
-   * Returns <code>true</code> if given {@link Figure} is result.<br>
-   * By default return <code>true</code>.
-   */
-  protected boolean acceptResult(Figure figure) {
-    return true;
-  }
+	/**
+	 * Returns <code>true</code> if given {@link Figure} is result.<br>
+	 * By default return <code>true</code>.
+	 */
+	protected boolean acceptResult(Figure figure) {
+		return true;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Return mouse target {@link Figure}.
-   */
-  public Figure getTargetFigure() {
-    return m_result;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Return mouse target {@link Figure}.
+	 */
+	public Figure getTargetFigure() {
+		return m_result;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/internal/draw2d/VerticalLabel.java b/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/internal/draw2d/VerticalLabel.java
index 1d03ddf46..1ab18e738 100644
--- a/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/internal/draw2d/VerticalLabel.java
+++ b/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/internal/draw2d/VerticalLabel.java
@@ -28,101 +28,101 @@
  * @author mitin_aa
  */
 public final class VerticalLabel extends Label {
-  private Dimension m_preferredSize;
+	private Dimension m_preferredSize;
 
-  @Override
-  protected void paintClientArea(Graphics graphics) {
-    drawVerticalText(getText(), 0, 0, graphics, false);
-  }
+	@Override
+	protected void paintClientArea(Graphics graphics) {
+		drawVerticalText(getText(), 0, 0, graphics, false);
+	}
 
-  /**
-   * Returns the desirable size for this label's text.
-   */
-  @Override
-  public Dimension getPreferredSize() {
-    if (m_preferredSize == null) {
-      m_preferredSize = FigureUtils.calculateTextSize(getText(), getFont());
-      Insets insets = getInsets();
-      m_preferredSize.expand(insets.getWidth(), insets.getHeight());
-      m_preferredSize.transpose();
-    }
-    return m_preferredSize;
-  }
+	/**
+	 * Returns the desirable size for this label's text.
+	 */
+	@Override
+	public Dimension getPreferredSize() {
+		if (m_preferredSize == null) {
+			m_preferredSize = FigureUtils.calculateTextSize(getText(), getFont());
+			Insets insets = getInsets();
+			m_preferredSize.expand(insets.getWidth(), insets.getHeight());
+			m_preferredSize.transpose();
+		}
+		return m_preferredSize;
+	}
 
-  @Override
-  protected void repaint(boolean reset, int x, int y, int width, int height) {
-    if (reset) {
-      m_preferredSize = null;
-    }
-    super.repaint(reset, x, y, width, height);
-  }
+	@Override
+	protected void repaint(boolean reset, int x, int y, int width, int height) {
+		if (reset) {
+			m_preferredSize = null;
+		}
+		super.repaint(reset, x, y, width, height);
+	}
 
-  /**
-   * Draws text vertically (rotates plus or minus 90 degrees). Uses the current font, color, and
-   * background.
-   *
-   * @param string
-   *          the text to draw
-   * @param x
-   *          the x coordinate of the top left corner of the drawing rectangle
-   * @param y
-   *          the y coordinate of the top left corner of the drawing rectangle
-   * @param graphics
-   *          the GC on which to draw the text
-   */
-  private static void drawVerticalText(String string, int x, int y, Graphics graphics, boolean isUp) {
-    // Get the current display
-    Display display = Display.getCurrent();
-    if (display == null) {
-      SWT.error(SWT.ERROR_THREAD_INVALID_ACCESS);
-    }
-    // Determine string's dimensions
-    Point pt = graphics.gc.textExtent(string);
-    // Create an image the same size as the string
-    Image stringImage = new Image(display, pt.x, pt.y);
-    // Create a GC so we can draw the image
-    GC stringGc = new GC(stringImage);
-    // Set attributes from the original GC to the new GC
-    stringGc.setForeground(graphics.getForegroundColor());
-    stringGc.setBackground(graphics.getBackgroundColor());
-    stringGc.setFont(graphics.getFont());
-    // Draw the text onto the image
-    stringGc.drawText(string, 0, 0);
-    // Draw the image vertically onto the original GC
-    Image rotatedImage = rotateImage(stringImage, isUp);
-    // Draw the vertical image onto the original GC
-    graphics.drawImage(rotatedImage, x, y);
-    // Dispose
-    rotatedImage.dispose();
-    stringGc.dispose();
-    stringImage.dispose();
-  }
+	/**
+	 * Draws text vertically (rotates plus or minus 90 degrees). Uses the current font, color, and
+	 * background.
+	 *
+	 * @param string
+	 *          the text to draw
+	 * @param x
+	 *          the x coordinate of the top left corner of the drawing rectangle
+	 * @param y
+	 *          the y coordinate of the top left corner of the drawing rectangle
+	 * @param graphics
+	 *          the GC on which to draw the text
+	 */
+	private static void drawVerticalText(String string, int x, int y, Graphics graphics, boolean isUp) {
+		// Get the current display
+		Display display = Display.getCurrent();
+		if (display == null) {
+			SWT.error(SWT.ERROR_THREAD_INVALID_ACCESS);
+		}
+		// Determine string's dimensions
+		Point pt = graphics.gc.textExtent(string);
+		// Create an image the same size as the string
+		Image stringImage = new Image(display, pt.x, pt.y);
+		// Create a GC so we can draw the image
+		GC stringGc = new GC(stringImage);
+		// Set attributes from the original GC to the new GC
+		stringGc.setForeground(graphics.getForegroundColor());
+		stringGc.setBackground(graphics.getBackgroundColor());
+		stringGc.setFont(graphics.getFont());
+		// Draw the text onto the image
+		stringGc.drawText(string, 0, 0);
+		// Draw the image vertically onto the original GC
+		Image rotatedImage = rotateImage(stringImage, isUp);
+		// Draw the vertical image onto the original GC
+		graphics.drawImage(rotatedImage, x, y);
+		// Dispose
+		rotatedImage.dispose();
+		stringGc.dispose();
+		stringImage.dispose();
+	}
 
-  /**
-   * Rotates an image vertically (rotates plus or minus 90 degrees)
-   */
-  private static Image rotateImage(Image image, boolean up) {
-    // Get the current display
-    Display display = Display.getCurrent();
-    if (display == null) {
-      SWT.error(SWT.ERROR_THREAD_INVALID_ACCESS);
-    }
-    // Use the image's data to create a rotated image's data
-    ImageData sd = image.getImageData();
-    ImageData dd = new ImageData(sd.height, sd.width, sd.depth, sd.palette);
-    // Determine which way to rotate, depending on up or down
-    // Run through the horizontal pixels
-    for (int sx = 0; sx < sd.width; sx++) {
-      // Run through the vertical pixels
-      for (int sy = 0; sy < sd.height; sy++) {
-        // Determine where to move pixel to in destination image data
-        int dx = up ? sy : sd.height - sy - 1;
-        int dy = up ? sd.width - sx - 1 : sx;
-        // Swap the x, y source data to y, x in the destination
-        dd.setPixel(dx, dy, sd.getPixel(sx, sy));
-      }
-    }
-    // Create the vertical image
-    return new Image(display, dd);
-  }
+	/**
+	 * Rotates an image vertically (rotates plus or minus 90 degrees)
+	 */
+	private static Image rotateImage(Image image, boolean up) {
+		// Get the current display
+		Display display = Display.getCurrent();
+		if (display == null) {
+			SWT.error(SWT.ERROR_THREAD_INVALID_ACCESS);
+		}
+		// Use the image's data to create a rotated image's data
+		ImageData sd = image.getImageData();
+		ImageData dd = new ImageData(sd.height, sd.width, sd.depth, sd.palette);
+		// Determine which way to rotate, depending on up or down
+		// Run through the horizontal pixels
+		for (int sx = 0; sx < sd.width; sx++) {
+			// Run through the vertical pixels
+			for (int sy = 0; sy < sd.height; sy++) {
+				// Determine where to move pixel to in destination image data
+				int dx = up ? sy : sd.height - sy - 1;
+				int dy = up ? sd.width - sx - 1 : sx;
+				// Swap the x, y source data to y, x in the destination
+				dd.setPixel(dx, dy, sd.getPixel(sx, sy));
+			}
+		}
+		// Create the vertical image
+		return new Image(display, dd);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/internal/draw2d/events/AncestorEventTable.java b/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/internal/draw2d/events/AncestorEventTable.java
index 53c0c7997..18cfe479b 100644
--- a/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/internal/draw2d/events/AncestorEventTable.java
+++ b/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/internal/draw2d/events/AncestorEventTable.java
@@ -25,92 +25,92 @@
  * @coverage gef.draw2d
  */
 public class AncestorEventTable implements IFigureListener {
-  private final Figure m_figure;
-  private List<IAncestorListener> m_listeners;
+	private final Figure m_figure;
+	private List<IAncestorListener> m_listeners;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AncestorEventTable(Figure figure) {
-    m_figure = figure;
-    hookFigure(m_figure);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AncestorEventTable(Figure figure) {
+		m_figure = figure;
+		hookFigure(m_figure);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IFigureListener
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void figureMoved(Figure source) {
-    for (IAncestorListener listener : m_listeners) {
-      listener.ancestorMoved(source);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IFigureListener
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void figureMoved(Figure source) {
+		for (IAncestorListener listener : m_listeners) {
+			listener.ancestorMoved(source);
+		}
+	}
 
-  @Override
-  public void figureReparent(Figure source, Figure oldParent, Figure newParent) {
-    if (oldParent != null) {
-      unhookFigure(oldParent);
-    }
-    if (newParent != null) {
-      hookFigure(newParent);
-    }
-  }
+	@Override
+	public void figureReparent(Figure source, Figure oldParent, Figure newParent) {
+		if (oldParent != null) {
+			unhookFigure(oldParent);
+		}
+		if (newParent != null) {
+			hookFigure(newParent);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Ancestor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void hookFigure(Figure figure) {
-    for (Figure ancestor = figure; ancestor != null; ancestor = ancestor.getParent()) {
-      ancestor.addFigureListener(this);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Ancestor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void hookFigure(Figure figure) {
+		for (Figure ancestor = figure; ancestor != null; ancestor = ancestor.getParent()) {
+			ancestor.addFigureListener(this);
+		}
+	}
 
-  private void unhookFigure(Figure figure) {
-    for (Figure ancestor = figure; ancestor != null; ancestor = ancestor.getParent()) {
-      ancestor.removeFigureListener(this);
-    }
-  }
+	private void unhookFigure(Figure figure) {
+		for (Figure ancestor = figure; ancestor != null; ancestor = ancestor.getParent()) {
+			ancestor.removeFigureListener(this);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Unregisters figure listeners, so that this class will no longer receive notification of
-   * ancestor events.
-   */
-  public void unhookFigure() {
-    unhookFigure(m_figure);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Unregisters figure listeners, so that this class will no longer receive notification of
+	 * ancestor events.
+	 */
+	public void unhookFigure() {
+		unhookFigure(m_figure);
+	}
 
-  /**
-   * Return <code>true</code> if this event table contains no listeners.
-   */
-  public boolean isEmpty() {
-    return m_listeners.isEmpty();
-  }
+	/**
+	 * Return <code>true</code> if this event table contains no listeners.
+	 */
+	public boolean isEmpty() {
+		return m_listeners.isEmpty();
+	}
 
-  /**
-   * Add {@link IAncestorListener} listener.
-   */
-  public void addAncestorListener(IAncestorListener listener) {
-    if (m_listeners == null) {
-      m_listeners = Lists.newArrayList();
-    }
-    m_listeners.add(listener);
-  }
+	/**
+	 * Add {@link IAncestorListener} listener.
+	 */
+	public void addAncestorListener(IAncestorListener listener) {
+		if (m_listeners == null) {
+			m_listeners = Lists.newArrayList();
+		}
+		m_listeners.add(listener);
+	}
 
-  /**
-   * Remove {@link IAncestorListener} listener.
-   */
-  public void removeAncestorListener(IAncestorListener listener) {
-    m_listeners.remove(listener);
-  }
+	/**
+	 * Remove {@link IAncestorListener} listener.
+	 */
+	public void removeAncestorListener(IAncestorListener listener) {
+		m_listeners.remove(listener);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/internal/draw2d/events/EventTable.java b/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/internal/draw2d/events/EventTable.java
index 793d51759..06b2e5153 100644
--- a/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/internal/draw2d/events/EventTable.java
+++ b/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/internal/draw2d/events/EventTable.java
@@ -23,58 +23,58 @@
  * @coverage gef.draw2d
  */
 public class EventTable {
-  private final Map<Class<?>, List<?>> m_listenerClassToListener = new HashMap<>();
+	private final Map<Class<?>, List<?>> m_listenerClassToListener = new HashMap<>();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Registers the given listener for given class.
-   */
-  public <T extends Object> void addListener(Class<T> listenerClass, T listener) {
-    List<T> listeners = getListenersImpl(listenerClass);
-    if (listeners == null) {
-      listeners = Lists.newArrayList();
-      m_listenerClassToListener.put(listenerClass, listeners);
-    }
-    if (!listeners.contains(listener)) {
-      listeners.add(listener);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Registers the given listener for given class.
+	 */
+	public <T extends Object> void addListener(Class<T> listenerClass, T listener) {
+		List<T> listeners = getListenersImpl(listenerClass);
+		if (listeners == null) {
+			listeners = Lists.newArrayList();
+			m_listenerClassToListener.put(listenerClass, listeners);
+		}
+		if (!listeners.contains(listener)) {
+			listeners.add(listener);
+		}
+	}
 
-  /**
-   * Unregisters the given listener.
-   */
-  public <T extends Object> void removeListener(Class<T> listenerClass, T listener) {
-    List<T> listeners = getListenersImpl(listenerClass);
-    if (listeners != null) {
-      listeners.remove(listener);
-    }
-  }
+	/**
+	 * Unregisters the given listener.
+	 */
+	public <T extends Object> void removeListener(Class<T> listenerClass, T listener) {
+		List<T> listeners = getListenersImpl(listenerClass);
+		if (listeners != null) {
+			listeners.remove(listener);
+		}
+	}
 
-  /**
-   * @return the unmodifiable {@link List} of registered listeners for given class or
-   *         <code>null</code>.
-   */
-  public <T extends Object> List<T> getListeners(Class<T> listenerClass) {
-    List<T> listeners = getListenersImpl(listenerClass);
-    return listeners == null
-        ? Collections.<T>emptyList()
-        : Collections.unmodifiableList(new ArrayList<T>(listeners));
-  }
+	/**
+	 * @return the unmodifiable {@link List} of registered listeners for given class or
+	 *         <code>null</code>.
+	 */
+	public <T extends Object> List<T> getListeners(Class<T> listenerClass) {
+		List<T> listeners = getListenersImpl(listenerClass);
+		return listeners == null
+				? Collections.<T>emptyList()
+						: Collections.unmodifiableList(new ArrayList<T>(listeners));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link List} of registered listeners for given class or <code>null</code>.
-   */
-  @SuppressWarnings("unchecked")
-  private <T extends Object> List<T> getListenersImpl(Class<T> listenerClass) {
-    return (List<T>) m_listenerClassToListener.get(listenerClass);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link List} of registered listeners for given class or <code>null</code>.
+	 */
+	@SuppressWarnings("unchecked")
+	private <T extends Object> List<T> getListenersImpl(Class<T> listenerClass) {
+		return (List<T>) m_listenerClassToListener.get(listenerClass);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/internal/draw2d/scroll/HorizontalScrollModel.java b/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/internal/draw2d/scroll/HorizontalScrollModel.java
index 640656258..f2af06ef9 100644
--- a/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/internal/draw2d/scroll/HorizontalScrollModel.java
+++ b/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/internal/draw2d/scroll/HorizontalScrollModel.java
@@ -20,42 +20,42 @@
  * @coverage gef.draw2d
  */
 public class HorizontalScrollModel extends ScrollModel {
-  private final Canvas m_canvas;
+	private final Canvas m_canvas;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public HorizontalScrollModel(Canvas canvas) {
-    super(canvas.getHorizontalBar());
-    m_canvas = canvas;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public HorizontalScrollModel(Canvas canvas) {
+		super(canvas.getHorizontalBar());
+		m_canvas = canvas;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ScrollModel
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Scroll to left part of window area.
-   */
-  @Override
-  protected void handlePositiveScrolling(int delta, int newSelection) {
-    Rectangle clientArea = m_canvas.getClientArea();
-    m_canvas.scroll(0, 0, delta, 0, clientArea.width - delta, clientArea.height, true);
-    m_selection = newSelection;
-    m_canvas.redraw(clientArea.width - delta, 0, delta, clientArea.height, true);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ScrollModel
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Scroll to left part of window area.
+	 */
+	@Override
+	protected void handlePositiveScrolling(int delta, int newSelection) {
+		Rectangle clientArea = m_canvas.getClientArea();
+		m_canvas.scroll(0, 0, delta, 0, clientArea.width - delta, clientArea.height, true);
+		m_selection = newSelection;
+		m_canvas.redraw(clientArea.width - delta, 0, delta, clientArea.height, true);
+	}
 
-  /**
-   * Scroll to right part of window area.
-   */
-  @Override
-  protected void handleNegativeScrolling(int delta, int newSelection) {
-    Rectangle clientArea = m_canvas.getClientArea();
-    m_canvas.scroll(delta, 0, 0, 0, clientArea.width - delta, clientArea.height, true);
-    m_selection = newSelection;
-    m_canvas.redraw(0, 0, delta, clientArea.height, true);
-  }
+	/**
+	 * Scroll to right part of window area.
+	 */
+	@Override
+	protected void handleNegativeScrolling(int delta, int newSelection) {
+		Rectangle clientArea = m_canvas.getClientArea();
+		m_canvas.scroll(delta, 0, 0, 0, clientArea.width - delta, clientArea.height, true);
+		m_selection = newSelection;
+		m_canvas.redraw(0, 0, delta, clientArea.height, true);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/internal/draw2d/scroll/ScrollModel.java b/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/internal/draw2d/scroll/ScrollModel.java
index e481fe2e5..31eed9ffc 100644
--- a/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/internal/draw2d/scroll/ScrollModel.java
+++ b/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/internal/draw2d/scroll/ScrollModel.java
@@ -26,183 +26,183 @@
  * @coverage gef.draw2d
  */
 public abstract class ScrollModel implements Listener {
-  private final ScrollBar m_scrollBar;
-  protected int m_selection;
-  private int m_extent;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ScrollModel(ScrollBar scrollBar) {
-    if (scrollBar != null) {
-      scrollBar.setMinimum(0);
-      scrollBar.setIncrement(1);
-      scrollBar.setEnabled(false);
-      scrollBar.setVisible(false);
-      scrollBar.addListener(SWT.Selection, this);
-    }
-    m_scrollBar = scrollBar;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ScrollModel
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Returns selection <code>ScrollBar</code> value.
-   */
-  public int getSelection() {
-    return m_selection;
-  }
-
-  /**
-   * Sets selection value.
-   */
-  public void setSelection(int selection) {
-    m_selection = selection;
-  }
-
-  /**
-   * Configure <code>ScrollBar</code> when change window size of figure's bounds.
-   *
-   * @param available
-   *          real window size
-   * @param preferred
-   *          needful figure's size
-   */
-  public void configure(int available, int preferred) {
-    if (m_scrollBar == null) {
-      return;
-    }
-    try {
-      if (preferred > available) {
-        m_extent = preferred - available;
-        m_selection = Math.max(0, Math.min(m_extent, m_selection));
-        m_scrollBar.setValues(
-            m_selection,
-            0,
-            preferred,
-            available,
-            available / 20,
-            available * 3 / 4);
-        if (m_scrollBar.getEnabled()) {
-          return;
-        }
-        m_scrollBar.setSelection(0);
-        m_scrollBar.setEnabled(true);
-        m_scrollBar.setVisible(true);
-      } else {
-        m_scrollBar.setVisible(false);
-        m_scrollBar.setEnabled(false);
-        m_scrollBar.setSelection(0);
-      }
-      m_selection = 0;
-    } finally {
-      // notify selection change
-      fireSetSelection(m_selection);
-    }
-  }
-
-  /**
-   * Handle positive change <code>ScrollBar</code> selection. Scroll client area and repaint part of
-   * area.
-   *
-   * @param delta
-   *          is absolute distance between <i>newSelection</i> and <i>oldSelection</i>
-   * @param newSelection
-   *          see comment into {@link ScrollModel#handleEvent(Event)}
-   */
-  protected abstract void handlePositiveScrolling(int delta, int newSelection);
-
-  /**
-   * Handle negative change <code>ScrollBar</code> selection. Scroll client area and repaint part of
-   * area.
-   *
-   * @param delta
-   *          is absolute distance between <i>newSelection</i> and <i>oldSelection</i>
-   * @param newSelection
-   *          see comment into {@link ScrollModel#handleEvent(Event)}
-   */
-  protected abstract void handleNegativeScrolling(int delta, int newSelection);
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Handle scrolling
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void handleEvent(Event event) {
-    if (m_scrollBar.getEnabled()) {
-      int selection = Math.max(0, Math.min(m_extent, m_scrollBar.getSelection()));
-      m_scrollBar.setSelection(selection);
-      int delta = selection - m_selection;
-      if (delta == 0) {
-        return;
-      }
-      /*
-       * Method scroll() flushes all deferred paint events and we can't update
-       * selection until all of these outstanding events processed.
-       * So, new selection value should be stored between scroll() and draw() method invocations.
-       */
-      if (delta > 0) {
-        handlePositiveScrolling(delta, selection);
-      } else {
-        handleNegativeScrolling(-delta, selection);
-      }
-      // notify selection change
-      fireSetSelection(selection);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Listener
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private List<ISelectionListener> m_listeners;
-
-  /**
-   * Registers the given listener as a {@link ISelectionListener} of this {@link ScrollModel}.
-   */
-  public void addSelectionListener(ISelectionListener listener) {
-    if (m_listeners == null) {
-      m_listeners = Lists.newArrayList();
-    }
-    m_listeners.add(listener);
-  }
-
-  /**
-   * Unregisters the given listener, so that it will no longer receive notification of
-   * {@link ScrollModel} selection events.
-   */
-  public void removeSelectionListener(ISelectionListener listener) {
-    m_listeners.remove(listener);
-  }
-
-  private void fireSetSelection(int selection) {
-    if (m_listeners != null) {
-      for (ISelectionListener listener : m_listeners) {
-        listener.setSelection(selection);
-      }
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Listener class
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * A listener interface for receiving notification that an {@link ScrollModel} selection has
-   * change.
-   */
-  public static interface ISelectionListener {
-    /**
-     * Called when change selection value.
-     */
-    void setSelection(int newSelection);
-  }
+	private final ScrollBar m_scrollBar;
+	protected int m_selection;
+	private int m_extent;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ScrollModel(ScrollBar scrollBar) {
+		if (scrollBar != null) {
+			scrollBar.setMinimum(0);
+			scrollBar.setIncrement(1);
+			scrollBar.setEnabled(false);
+			scrollBar.setVisible(false);
+			scrollBar.addListener(SWT.Selection, this);
+		}
+		m_scrollBar = scrollBar;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ScrollModel
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Returns selection <code>ScrollBar</code> value.
+	 */
+	public int getSelection() {
+		return m_selection;
+	}
+
+	/**
+	 * Sets selection value.
+	 */
+	public void setSelection(int selection) {
+		m_selection = selection;
+	}
+
+	/**
+	 * Configure <code>ScrollBar</code> when change window size of figure's bounds.
+	 *
+	 * @param available
+	 *          real window size
+	 * @param preferred
+	 *          needful figure's size
+	 */
+	public void configure(int available, int preferred) {
+		if (m_scrollBar == null) {
+			return;
+		}
+		try {
+			if (preferred > available) {
+				m_extent = preferred - available;
+				m_selection = Math.max(0, Math.min(m_extent, m_selection));
+				m_scrollBar.setValues(
+						m_selection,
+						0,
+						preferred,
+						available,
+						available / 20,
+						available * 3 / 4);
+				if (m_scrollBar.getEnabled()) {
+					return;
+				}
+				m_scrollBar.setSelection(0);
+				m_scrollBar.setEnabled(true);
+				m_scrollBar.setVisible(true);
+			} else {
+				m_scrollBar.setVisible(false);
+				m_scrollBar.setEnabled(false);
+				m_scrollBar.setSelection(0);
+			}
+			m_selection = 0;
+		} finally {
+			// notify selection change
+			fireSetSelection(m_selection);
+		}
+	}
+
+	/**
+	 * Handle positive change <code>ScrollBar</code> selection. Scroll client area and repaint part of
+	 * area.
+	 *
+	 * @param delta
+	 *          is absolute distance between <i>newSelection</i> and <i>oldSelection</i>
+	 * @param newSelection
+	 *          see comment into {@link ScrollModel#handleEvent(Event)}
+	 */
+	protected abstract void handlePositiveScrolling(int delta, int newSelection);
+
+	/**
+	 * Handle negative change <code>ScrollBar</code> selection. Scroll client area and repaint part of
+	 * area.
+	 *
+	 * @param delta
+	 *          is absolute distance between <i>newSelection</i> and <i>oldSelection</i>
+	 * @param newSelection
+	 *          see comment into {@link ScrollModel#handleEvent(Event)}
+	 */
+	protected abstract void handleNegativeScrolling(int delta, int newSelection);
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Handle scrolling
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void handleEvent(Event event) {
+		if (m_scrollBar.getEnabled()) {
+			int selection = Math.max(0, Math.min(m_extent, m_scrollBar.getSelection()));
+			m_scrollBar.setSelection(selection);
+			int delta = selection - m_selection;
+			if (delta == 0) {
+				return;
+			}
+			/*
+			 * Method scroll() flushes all deferred paint events and we can't update
+			 * selection until all of these outstanding events processed.
+			 * So, new selection value should be stored between scroll() and draw() method invocations.
+			 */
+			if (delta > 0) {
+				handlePositiveScrolling(delta, selection);
+			} else {
+				handleNegativeScrolling(-delta, selection);
+			}
+			// notify selection change
+			fireSetSelection(selection);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Listener
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private List<ISelectionListener> m_listeners;
+
+	/**
+	 * Registers the given listener as a {@link ISelectionListener} of this {@link ScrollModel}.
+	 */
+	public void addSelectionListener(ISelectionListener listener) {
+		if (m_listeners == null) {
+			m_listeners = Lists.newArrayList();
+		}
+		m_listeners.add(listener);
+	}
+
+	/**
+	 * Unregisters the given listener, so that it will no longer receive notification of
+	 * {@link ScrollModel} selection events.
+	 */
+	public void removeSelectionListener(ISelectionListener listener) {
+		m_listeners.remove(listener);
+	}
+
+	private void fireSetSelection(int selection) {
+		if (m_listeners != null) {
+			for (ISelectionListener listener : m_listeners) {
+				listener.setSelection(selection);
+			}
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Listener class
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * A listener interface for receiving notification that an {@link ScrollModel} selection has
+	 * change.
+	 */
+	public static interface ISelectionListener {
+		/**
+		 * Called when change selection value.
+		 */
+		void setSelection(int newSelection);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/internal/draw2d/scroll/VerticalScrollModel.java b/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/internal/draw2d/scroll/VerticalScrollModel.java
index 0dab7b024..8e407e856 100644
--- a/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/internal/draw2d/scroll/VerticalScrollModel.java
+++ b/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/internal/draw2d/scroll/VerticalScrollModel.java
@@ -20,42 +20,42 @@
  * @coverage gef.draw2d
  */
 public class VerticalScrollModel extends ScrollModel {
-  private final Canvas m_canvas;
+	private final Canvas m_canvas;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public VerticalScrollModel(Canvas canvas) {
-    super(canvas.getVerticalBar());
-    m_canvas = canvas;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public VerticalScrollModel(Canvas canvas) {
+		super(canvas.getVerticalBar());
+		m_canvas = canvas;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ScrollModel
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Scroll to top part of window area.
-   */
-  @Override
-  protected void handlePositiveScrolling(int delta, int newSelection) {
-    Rectangle clientArea = m_canvas.getClientArea();
-    m_canvas.scroll(0, 0, 0, delta, clientArea.width, clientArea.height - delta, true);
-    m_selection = newSelection;
-    m_canvas.redraw(0, clientArea.height - delta, clientArea.width, delta, true);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ScrollModel
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Scroll to top part of window area.
+	 */
+	@Override
+	protected void handlePositiveScrolling(int delta, int newSelection) {
+		Rectangle clientArea = m_canvas.getClientArea();
+		m_canvas.scroll(0, 0, 0, delta, clientArea.width, clientArea.height - delta, true);
+		m_selection = newSelection;
+		m_canvas.redraw(0, clientArea.height - delta, clientArea.width, delta, true);
+	}
 
-  /**
-   * Scroll to bottom part of window area.
-   */
-  @Override
-  protected void handleNegativeScrolling(int delta, int newSelection) {
-    Rectangle clientArea = m_canvas.getClientArea();
-    m_canvas.scroll(0, delta, 0, 0, clientArea.width, clientArea.height - delta, true);
-    m_selection = newSelection;
-    m_canvas.redraw(0, 0, clientArea.width, delta, true);
-  }
+	/**
+	 * Scroll to bottom part of window area.
+	 */
+	@Override
+	protected void handleNegativeScrolling(int delta, int newSelection) {
+		Rectangle clientArea = m_canvas.getClientArea();
+		m_canvas.scroll(0, delta, 0, 0, clientArea.width, clientArea.height - delta, true);
+		m_selection = newSelection;
+		m_canvas.redraw(0, 0, clientArea.width, delta, true);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/Command.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/Command.java
index 4fa51bbed..58b03953b 100644
--- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/Command.java
+++ b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/Command.java
@@ -17,22 +17,22 @@
  * @coverage gef.core
  */
 public abstract class Command {
-  /**
-   * {@link Command} that does nothing.
-   */
-  public static final Command EMPTY = new Command() {
-    @Override
-    public void execute() {
-    }
-  };
+	/**
+	 * {@link Command} that does nothing.
+	 */
+	public static final Command EMPTY = new Command() {
+		@Override
+		public void execute() {
+		}
+	};
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Command
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Executes this {@link Command}.
-   */
-  public abstract void execute() throws Exception;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Command
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Executes this {@link Command}.
+	 */
+	public abstract void execute() throws Exception;
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/EditPart.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/EditPart.java
index 912f182ce..0741ecfbc 100644
--- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/EditPart.java
+++ b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/EditPart.java
@@ -43,804 +43,804 @@
  * @coverage gef.core
  */
 public abstract class EditPart {
-  /**
-   * Used to indicate no selection.
-   */
-  public static final int SELECTED_NONE = 0;
-  /**
-   * Used to indicate non-primary selection.
-   */
-  public static final int SELECTED = 1;
-  /**
-   * Used to indicate primary selection, or "Anchor" selection. Primary selection is defined as the
-   * last object selected.
-   */
-  public static final int SELECTED_PRIMARY = 2;
-  //
-  private EditPart m_parent;
-  private List<EditPart> m_children;
-  private boolean m_isActive;
-  private final List<EditPolicy> m_policies = Lists.newArrayList();
-  private final List<Object> m_keyPolicies = Lists.newArrayList();
-  private int m_selected;
-  private Object m_model;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Activate/Deactivate
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Activates the {@link EditPart}. EditParts that observe a dynamic model or support editing must
-   * be <i>active</i>. Called by the managing {@link EditPart}, or the Viewer in the case of the
-   * {@link IRootContainer}. This method may be called again once {@link #deactivate()} has been
-   * called.
-   * <P>
-   * During activation the receiver should:
-   * <UL>
-   * <LI>begin to observe its model if appropriate, and should continue the observation until
-   * {@link #deactivate()} is called.
-   * <LI>activate all of its EditPolicies. EditPolicies may also observe the model, although this is
-   * rare. But it is common for EditPolicies to contribute additional visuals, such as selection
-   * handles or feedback during interactions. Therefore it is necessary to tell the EditPolicies
-   * when to start doing this, and when to stop.
-   * <LI>call activate() on the EditParts it manages. This includes its children.
-   * </UL>
-   */
-  public void activate() {
-    m_isActive = true;
-    activateEditPolicies();
-    for (EditPart childPart : getChildren()) {
-      childPart.activate();
-    }
-  }
-
-  /**
-   * Deactivates the {@link EditPart}. EditParts that observe a dynamic model or support editing
-   * must be <i>active</i>. <code>deactivate()</code> is guaranteed to be called when an EditPart
-   * will no longer be used. Called by the managing EditPart, or the Viewer in the case of the
-   * {@link IRootContainer}. This method may be called multiple times.
-   * <P>
-   * During deactivation the receiver should:
-   * <UL>
-   * <LI>remove all listeners that were added in {@link #activate}
-   * <LI>deactivate all of its EditPolicies. EditPolicies may be contributing additional visuals,
-   * such as selection handles or feedback during interactions. Therefore it is necessary to tell
-   * the EditPolicies when to start doing this, and when to stop.
-   * <LI>call deactivate() on the EditParts it manages. This includes its children.
-   * </UL>
-   */
-  public void deactivate() {
-    for (EditPart childPart : getChildren()) {
-      childPart.deactivate();
-    }
-    deactivateEditPolicies();
-    m_isActive = false;
-  }
-
-  /**
-   * Returns <code>true</code> if the {@link EditPart} is active. Editparts are active after
-   * {@link #activate()} is called, and until {@link #deactivate()} is called.
-   */
-  public boolean isActive() {
-    return m_isActive;
-  }
-
-  /**
-   * Called <em>after</em> the {@link EditPart} has been added to its parent. This is used to
-   * indicate to the {@link EditPart} that it should refresh itself for the first time.
-   */
-  public void addNotify() {
-    getViewer().registerEditPart(this);
-    createEditPolicies();
-    for (EditPart childPart : getChildren()) {
-      childPart.addNotify();
-    }
-    refresh();
-  }
-
-  /**
-   * Called when the {@link EditPart} is being permanently removed from its {@link EditPartViewer}.
-   * This indicates that the {@link EditPart} will no longer be in the Viewer, and therefore should
-   * remove itself from the Viewer. This method is <EM>not</EM> called when a Viewer is disposed. It
-   * is only called when the EditPart is removed from its parent. This method is the inverse of
-   * {@link #addNotify()}
-   */
-  public void removeNotify() {
-    if (getSelected() != SELECTED_NONE) {
-      getViewer().deselect(this);
-    }
-    for (EditPart childPart : getChildren()) {
-      childPart.removeNotify();
-    }
-    getViewer().unregisterEditPart(this);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parent/Children
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Returns the List of children <code>EditParts</code>. This method should rarely be called, and
-   * is only made public so that helper objects of this EditPart, such as EditPolicies, can obtain
-   * the children. The returned List may be by reference, and should never be modified.
-   */
-  public List<EditPart> getChildren() {
-    return m_children == null ? Collections.<EditPart>emptyList() : m_children;
-  }
-
-  /**
-   * Returns the parent <code>{@link EditPart}</code>. This method should only be called internally
-   * or by helpers such as EditPolicies.
-   */
-  public EditPart getParent() {
-    return m_parent;
-  }
-
-  /**
-   * Sets the parent. This should only be called by the parent {@link EditPart}.
-   */
-  public void setParent(EditPart parent) {
-    m_parent = parent;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Model
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Returns the primary model object that this {@link EditPart} represents. EditParts may
-   * correspond to more than one model object, or even no model object. In practice, the Object
-   * returned is used by other EditParts to identify this EditPart. In addition, EditPolicies
-   * probably rely on this method to build Commands that operate on the model.
-   */
-  public Object getModel() {
-    return m_model;
-  }
-
-  /**
-   * Sets the model. This method is made public to facilitate the use of {@link IEditPartFactory
-   * EditPartFactories}.
-   * <P>
-   * IMPORTANT: This method should only be called once.
-   */
-  public void setModel(Object model) {
-    m_model = model;
-  }
-
-  /**
-   * When existing {@link EditPart} reused for new model, this method will be invoked.
-   */
-  protected void updateModel() {
-  }
-
-  /**
-   * Returns a <code>List</code> containing the children model objects. If this {@link EditPart}'s
-   * model is a container, this method should be overridden to returns its children. This is what
-   * causes children EditParts to be created.
-   * <P>
-   * Called by {@link #refreshChildren()}. Must not return <code>null</code>.
-   */
-  protected List<?> getModelChildren() {
-    return Collections.EMPTY_LIST;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Selection
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Returns the selected state of this {@link EditPart}. This method should only be called
-   * internally or by helpers such as EditPolicies.
-   *
-   * @return one of:
-   *         <UL>
-   *         <LI>{@link #SELECTED}
-   *         <LI>{@link #SELECTED_NONE}
-   *         <LI>{@link #SELECTED_PRIMARY}
-   *         </UL>
-   */
-  public int getSelected() {
-    return m_selected;
-  }
-
-  /**
-   * Sets the selected state property to reflect the selection in the EditPartViewer. Fires
-   * selectionChanged(EditPart) to any {@link IEditPartSelectionListener}s. Selection is maintained
-   * by the {@link EditPartViewer}.
-   * <P>
-   * IMPORTANT: This method should only be called by the {@link EditPartViewer}.
-   */
-  public void setSelected(int selected) {
-    if (m_selected != selected) {
-      m_selected = selected;
-      fireSelection();
-    }
-  }
-
-  /**
-   * Reserved for future use.
-   */
-  public boolean isSelectable() {
-    return true;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Visiting
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Visits this {@link EditPart} and its children using given {@link EditPartVisitor}.
-   */
-  public final void accept(EditPartVisitor visitor) {
-    if (visitor.visit(this)) {
-      for (EditPart childPart : getChildren()) {
-        childPart.accept(visitor);
-      }
-      visitor.endVisit(this);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Events
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private EventTable m_eventTable;
-
-  /**
-   * Adds a listener to the {@link EditPart}.
-   */
-  public void addEditPartListener(IEditPartListener listener) {
-    getEnsureEventTable().addListener(IEditPartListener.class, listener);
-  }
-
-  /**
-   * Removes the first occurrence of the specified listener from the list of listeners. Does nothing
-   * if the listener was not present.
-   */
-  public void removeEditPartListener(IEditPartListener listener) {
-    getEnsureEventTable().removeListener(IEditPartListener.class, listener);
-  }
-
-  /**
-   * Registers the given listener as a {@link IEditPartSelectionListener} of this {@link EditPart}.
-   */
-  public void addSelectionListener(IEditPartSelectionListener listener) {
-    getEnsureEventTable().addListener(IEditPartSelectionListener.class, listener);
-  }
-
-  /**
-   * Unregisters the given listener, so that it will no longer receive notification of selection.
-   */
-  public void removeSelectionListener(IEditPartSelectionListener listener) {
-    getEnsureEventTable().removeListener(IEditPartSelectionListener.class, listener);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Events support
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Return all registers listeners for given class or <code>null</code>.
-   */
-  public <T extends Object> List<T> getListeners(Class<T> listenerClass) {
-    return m_eventTable == null ? null : m_eventTable.getListeners(listenerClass);
-  }
-
-  /**
-   * Access to <code>{@link EventTable}</code> use lazy creation mechanism.
-   */
-  private EventTable getEnsureEventTable() {
-    if (m_eventTable == null) {
-      m_eventTable = new EventTable();
-    }
-    return m_eventTable;
-  }
-
-  private void fireChildAdded(EditPart child, int index) {
-    List<IEditPartListener> listeners = getListeners(IEditPartListener.class);
-    if (listeners != null && !listeners.isEmpty()) {
-      for (IEditPartListener listener : listeners) {
-        listener.childAdded(child, index);
-      }
-    }
-  }
-
-  private void fireRemovingChild(EditPart child, int index) {
-    List<IEditPartListener> listeners = getListeners(IEditPartListener.class);
-    if (listeners != null && !listeners.isEmpty()) {
-      for (IEditPartListener listener : listeners) {
-        listener.removingChild(child, index);
-      }
-    }
-  }
-
-  private void fireSelection() {
-    List<IEditPartSelectionListener> listeners = getListeners(IEditPartSelectionListener.class);
-    if (listeners != null && !listeners.isEmpty()) {
-      for (IEditPartSelectionListener listener : listeners) {
-        listener.selectionChanged(this);
-      }
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // EditPart
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Refreshes all properties visually displayed by this EditPart. The default implementation will
-   * call {@link #refreshChildren()} to update its structural features. It also calls
-   * {@link #refreshVisuals()} to update its own displayed properties. Subclasses should extend this
-   * method to handle additional types of structural refreshing.
-   */
-  public void refresh() {
-    refreshChildren();
-    refreshVisuals();
-  }
-
-  /**
-   * Refreshes this EditPart's <i>visuals</i>. This method is called by {@link #refresh()}, and may
-   * also be called in response to notifications from the model.
-   */
-  protected void refreshVisuals() {
-  }
-
-  protected void refreshChildren() {
-    // prepare map[model, currentPart]
-    Map<Object, EditPart> modelToPart = new HashMap<>();
-    List<EditPart> children = getChildren();
-    for (EditPart editPart : children) {
-      modelToPart.put(editPart.getModel(), editPart);
-    }
-    // add new child EditPart's or reorder current EditPart's
-    List<?> modelChildren = getModelChildren();
-    int modelCount = modelChildren.size();
-    int partCount = children.size();
-    int index = 0;
-    for (int modelIndex = 0; modelIndex < modelCount; index++, modelIndex++) {
-      Object model = modelChildren.get(modelIndex);
-      // do a quick check to see if editPart[i] == model[i]
-      if (index < partCount) {
-        EditPart part = children.get(index);
-        if (part.getModel() == model) {
-          updateChildVisual(part, index);
-          continue;
-        }
-      }
-      //
-      EditPart childPart = modelToPart.get(model);
-      if (childPart == null) {
-        EditPart createEditPart = createEditPart(model);
-        if (createEditPart != null) {
-          addChild(createEditPart, index);
-        } else {
-          index--;
-        }
-      } else {
-        if (model != childPart.getModel()) {
-          getViewer().unregisterEditPart(childPart);
-          childPart.setModel(model);
-          getViewer().registerEditPart(childPart);
-          childPart.updateModel();
-        }
-        // reorder child EditPart
-        removeChildVisual(childPart);
-        children.remove(childPart);
-        children.add(index, childPart);
-        addChildVisual(childPart, index);
-      }
-    }
-    //
-    int newPartCount = children.size();
-    if (newPartCount - index > 1) {
-      // deselect old child EditPart's
-      List<EditPart> deselectList = Lists.newArrayList();
-      Iterators.addAll(deselectList, children.listIterator(index));
-      getViewer().deselect(deselectList);
-    }
-    // remove old child EditPart's
-    for (int i = index; i < newPartCount; i++) {
-      EditPart childPart = children.get(index);
-      removeChild(childPart);
-    }
-    // recurse refresh()
-    for (EditPart child : getChildren()) {
-      child.refresh();
-    }
-  }
-
-  /**
-   * Create the child <code>{@link EditPart}</code> for the given model object. This method is
-   * called from {@link #refreshChildren()}. By default, the implementation will delegate to the
-   * <code>{@link
-   * IEditPartViewer}</code> 's {@link IEditPartFactory}.
-   */
-  protected EditPart createEditPart(Object model) {
-    IEditPartFactory factory = getViewer().getEditPartFactory();
-    return factory.createEditPart(this, model);
-  }
-
-  /**
-   * Removes a child <code>{@link EditPart}</code>. This method is called from
-   * {@link #refreshChildren()}. The following events occur in the order listed:
-   * <OL>
-   * <LI><code>deactivate()</code> is called if the child is active
-   * <LI>{@link EditPart#removeNotify()} is called on the child.
-   * <LI>The child's parent is set to <code>null</code>
-   * </OL>
-   * <P>
-   */
-  protected final void removeChild(EditPart childPart) {
-    int index = getChildren().indexOf(childPart);
-    if (index == -1) {
-      return;
-    }
-    fireRemovingChild(childPart, index);
-    if (isActive()) {
-      childPart.deactivate();
-    }
-    childPart.removeNotify();
-    removeChildVisual(childPart);
-    getChildren().remove(childPart);
-    childPart.setParent(null);
-  }
-
-  /**
-   * Adds a child <code>{@link EditPart}</code> to this {@link EditPart}. This method is called from
-   * {@link #refreshChildren()}. The following events occur in the order listed:
-   * <OL>
-   * <LI>The child is added to the {@link #children} List, and its parent is set to
-   * <code>this</code>
-   * <LI>{@link EditPart#addNotify()} is called on the child.
-   * <LI><code>activate()</code> is called if this part is active
-   * </OL>
-   * <P>
-   */
-  protected final void addChild(EditPart childPart, int index) {
-    // check EditPart
-    Assert.isNotNull(childPart);
-    // check container
-    if (m_children == null) {
-      m_children = Lists.newArrayList();
-    }
-    // add to child list
-    if (index == -1) {
-      index = m_children.size();
-      m_children.add(childPart);
-    } else {
-      m_children.add(index, childPart);
-    }
-    // set parent
-    childPart.setParent(this);
-    // add child figure
-    addChildVisual(childPart, index);
-    // notify new child
-    childPart.addNotify();
-    // notify listeners
-    fireChildAdded(childPart, index);
-    // activate if necessary
-    if (isActive()) {
-      childPart.activate();
-    }
-  }
-
-  /**
-   * Convenience method for returning the <code>{@link IEditPartViewer}</code> for this part.
-   */
-  public IEditPartViewer getViewer() {
-    return getParent().getViewer();
-  }
-
-  /**
-   * Performs the addition of the child's <i>visual</i> to this EditPart's Visual. The provided
-   * subclasses {@link GraphicalEditPart} and {@link TreeEditPart} already implement this method
-   * correctly, so it is unlikely that this method should be overridden.
-   *
-   * @param childPart
-   *          The EditPart being added.
-   * @param index
-   *          The child's position.
-   * @see #addChild(EditPart, int)
-   */
-  protected abstract void addChildVisual(EditPart childPart, int index);
-
-  /**
-   * Removes the childs visual from this EditPart's visual. Subclasses should implement this method
-   * to support the visual type they introduce, such as Figures or TreeItems.
-   *
-   * @param childPart
-   *          the child EditPart
-   */
-  protected abstract void removeChildVisual(EditPart childPart);
-
-  /**
-   * When existing {@link EditPart} is not touched in its parent, i.e. has same model and index,
-   * this method will be invoked.
-   * <p>
-   * We need this for "tree" GEF, to re-create items after parent item dispose/re-create.
-   */
-  protected void updateChildVisual(EditPart childPart, int index) {
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Policy
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Return all installed {@link EditPolicy EditPolicies}.
-   */
-  public List<EditPolicy> getEditPolicies() {
-    return m_policies;
-  }
-
-  /**
-   * Return <code>null</code> or the {@link EditPolicy} installed with the given key.
-   */
-  public EditPolicy getEditPolicy(Object key) {
-    int index = m_keyPolicies.indexOf(key);
-    return index == -1 ? null : m_policies.get(index);
-  }
-
-  /**
-   * Installs an {@link EditPolicy}, using its class as <i>key</i>.
-   */
-  public void installEditPolicy(EditPolicy policy) {
-    installEditPolicy(policy.getClass(), policy);
-  }
-
-  /**
-   * Installs an {@link EditPolicy} for a specified <i>role</i>. A <i>role</i> is is simply an
-   * Object used to identify the {@link EditPolicy}.
-   */
-  public void installEditPolicy(Object key, EditPolicy policy) {
-    Assert.isNotNull(key, "Edit Policies must be installed with keys");
-    int index = m_keyPolicies.indexOf(key);
-    //
-    if (index == -1) {
-      if (policy != null) {
-        m_keyPolicies.add(key);
-        m_policies.add(policy);
-      }
-    } else {
-      EditPolicy oldPolicy = m_policies.get(index);
-      //
-      if (isActive()) {
-        oldPolicy.deactivate();
-      }
-      //
-      if (policy == null) {
-        m_keyPolicies.remove(index);
-        m_policies.remove(index);
-      } else {
-        m_policies.set(index, policy);
-      }
-      //
-      oldPolicy.dispose();
-    }
-    //
-    if (policy != null) {
-      policy.setHost(this);
-      //
-      if (isActive()) {
-        policy.activate();
-      }
-    }
-  }
-
-  private void activateEditPolicies() {
-    for (EditPolicy editPolicy : m_policies) {
-      editPolicy.activate();
-    }
-  }
-
-  private void deactivateEditPolicies() {
-    for (EditPolicy editPolicy : m_policies) {
-      editPolicy.deactivate();
-    }
-  }
-
-  /**
-   * Creates the initial EditPolicies and/or reserves slots for dynamic ones. Should be implemented
-   * to install the initial EditPolicies based on the model's initial state.
-   */
-  protected void createEditPolicies() {
-  }
-
-  /**
-   * @return the instances of {@link EditPolicy} which understand given {@link Request}, may be
-   *         empty {@link List}.
-   */
-  private List<EditPolicy> getUnderstandingPolicies(Request request) {
-    List<EditPolicy> policies = Lists.newArrayList();
-    for (EditPolicy editPolicy : m_policies) {
-      if (editPolicy.understandsRequest(request)) {
-        policies.add(editPolicy);
-      }
-    }
-    return policies;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Request processors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final List<RequestProcessor> m_requestProcessors = Lists.newArrayList();
-
-  /**
-   * Adds the {@link RequestProcessor}, if not added yet.
-   */
-  public final void addRequestProcessor(RequestProcessor processor) {
-    if (!m_requestProcessors.contains(processor)) {
-      m_requestProcessors.add(processor);
-    }
-  }
-
-  /**
-   * Removes the {@link RequestProcessor}.
-   */
-  public final void removeRequestProcessor(RequestProcessor processor) {
-    m_requestProcessors.remove(processor);
-  }
-
-  /**
-   * @return the {@link Request} processed with registered {@link RequestProcessor}'s.
-   */
-  protected final Request processRequestProcessors(Request request) {
-    try {
-      for (RequestProcessor processor : m_requestProcessors) {
-        request = processor.process(this, request);
-      }
-    } catch (Throwable e) {
-    }
-    return request;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // DragTracking
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Returns a {@link Tool} for dragging this {@link EditPart}. The SelectionTool is the only
-   * {@link Tool} by default that calls this method. The SelectionTool will use a SelectionRequest
-   * to provide information such as which mouse button is down, and what modifier keys are pressed.
-   */
-  public abstract Tool getDragTrackerTool(Request request);
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Request/Command
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Returns the {@link Command} to perform the specified {@link Request} or <code>null</code>.
-   */
-  public Command getCommand(Request request) {
-    request = processRequestProcessors(request);
-    for (EditPolicy editPolicy : getUnderstandingPolicies(request)) {
-      Command command = editPolicy.getCommand(request);
-      if (command != null) {
-        return command;
-      }
-    }
-    return null;
-  }
-
-  /**
-   * @return new instance of {@link CompoundCommand} for further wrapping commands usage.
-   */
-  public CompoundCommand createCompoundCommand() {
-    return new CompoundCommand();
-  }
-
-  /**
-   * Return the <code>{@link EditPart}</code> that should be used as the <i>target</i> for the
-   * specified <code>{@link Request}</code>. Tools will generally call this method with the mouse
-   * location so that the receiver can implement drop targeting. Typically, if this {@link EditPart}
-   * is not the requested target (for example, this EditPart is not a composite), it will forward
-   * the call to its parent.
-   */
-  public EditPart getTargetEditPart(Request request) {
-    request = processRequestProcessors(request);
-    EditPart target = null;
-    // update target using any understanding EditPolicy
-    for (EditPolicy editPolicy : getUnderstandingPolicies(request)) {
-      EditPart newTarget = editPolicy.getTargetEditPart(request);
-      if (newTarget != null) {
-        target = newTarget;
-      }
-    }
-    // OK, we (probably) have target
-    return target;
-  }
-
-  /**
-   * Performs the specified Request. This method can be used to send a generic message to an
-   * EditPart. Subclasses should extend this method to handle Requests. For now, the default
-   * implementation forward request to all EditPolicies.
-   */
-  public void performRequest(Request request) {
-    request = processRequestProcessors(request);
-    for (EditPolicy editPolicy : m_policies) {
-      editPolicy.performRequest(request);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Source Feedback
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Shows or updates source feedback for the given request. This method may be called multiple
-   * times so that the feedback can be updated for changes in the request, such as the mouse
-   * location changing.
-   */
-  public void showSourceFeedback(Request request) {
-    request = processRequestProcessors(request);
-    if (isActive()) {
-      for (EditPolicy editPolicy : getUnderstandingPolicies(request)) {
-        editPolicy.showSourceFeedback(request);
-      }
-    }
-  }
-
-  /**
-   * Erases <i>source</i> feedback for the specified {@link Request}. A {@link Request} is used to
-   * describe the type of source feedback that should be erased. This method should only be called
-   * once to erase feedback. It should only be called in conjunction with a prior call to
-   * {@link #showSourceFeedback(Request)}.
-   */
-  public void eraseSourceFeedback(Request request) {
-    request = processRequestProcessors(request);
-    if (isActive()) {
-      for (EditPolicy editPolicy : getUnderstandingPolicies(request)) {
-        editPolicy.eraseSourceFeedback(request);
-      }
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Target Feedback
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Shows or updates target feedback for the given request. This method can be called multiple
-   * times so that the feedback can be updated for changes in the request, such as the mouse
-   * location changing.
-   */
-  public void showTargetFeedback(Request request) {
-    request = processRequestProcessors(request);
-    if (isActive()) {
-      for (EditPolicy editPolicy : getUnderstandingPolicies(request)) {
-        editPolicy.showTargetFeedback(request);
-      }
-    }
-  }
-
-  /**
-   * Erases <i>target</i> feedback for the specified {@link Request}. A {@link Request} is used to
-   * describe the type of target feedback that should be erased. This method should only be called
-   * once to erase feedback. It should only be called in conjunction with a prior call to
-   * {@link #showTargetFeedback(Request)}.
-   */
-  public void eraseTargetFeedback(Request request) {
-    request = processRequestProcessors(request);
-    if (isActive()) {
-      for (EditPolicy editPolicy : getUnderstandingPolicies(request)) {
-        editPolicy.eraseTargetFeedback(request);
-      }
-    }
-  }
+	/**
+	 * Used to indicate no selection.
+	 */
+	public static final int SELECTED_NONE = 0;
+	/**
+	 * Used to indicate non-primary selection.
+	 */
+	public static final int SELECTED = 1;
+	/**
+	 * Used to indicate primary selection, or "Anchor" selection. Primary selection is defined as the
+	 * last object selected.
+	 */
+	public static final int SELECTED_PRIMARY = 2;
+	//
+	private EditPart m_parent;
+	private List<EditPart> m_children;
+	private boolean m_isActive;
+	private final List<EditPolicy> m_policies = Lists.newArrayList();
+	private final List<Object> m_keyPolicies = Lists.newArrayList();
+	private int m_selected;
+	private Object m_model;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Activate/Deactivate
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Activates the {@link EditPart}. EditParts that observe a dynamic model or support editing must
+	 * be <i>active</i>. Called by the managing {@link EditPart}, or the Viewer in the case of the
+	 * {@link IRootContainer}. This method may be called again once {@link #deactivate()} has been
+	 * called.
+	 * <P>
+	 * During activation the receiver should:
+	 * <UL>
+	 * <LI>begin to observe its model if appropriate, and should continue the observation until
+	 * {@link #deactivate()} is called.
+	 * <LI>activate all of its EditPolicies. EditPolicies may also observe the model, although this is
+	 * rare. But it is common for EditPolicies to contribute additional visuals, such as selection
+	 * handles or feedback during interactions. Therefore it is necessary to tell the EditPolicies
+	 * when to start doing this, and when to stop.
+	 * <LI>call activate() on the EditParts it manages. This includes its children.
+	 * </UL>
+	 */
+	public void activate() {
+		m_isActive = true;
+		activateEditPolicies();
+		for (EditPart childPart : getChildren()) {
+			childPart.activate();
+		}
+	}
+
+	/**
+	 * Deactivates the {@link EditPart}. EditParts that observe a dynamic model or support editing
+	 * must be <i>active</i>. <code>deactivate()</code> is guaranteed to be called when an EditPart
+	 * will no longer be used. Called by the managing EditPart, or the Viewer in the case of the
+	 * {@link IRootContainer}. This method may be called multiple times.
+	 * <P>
+	 * During deactivation the receiver should:
+	 * <UL>
+	 * <LI>remove all listeners that were added in {@link #activate}
+	 * <LI>deactivate all of its EditPolicies. EditPolicies may be contributing additional visuals,
+	 * such as selection handles or feedback during interactions. Therefore it is necessary to tell
+	 * the EditPolicies when to start doing this, and when to stop.
+	 * <LI>call deactivate() on the EditParts it manages. This includes its children.
+	 * </UL>
+	 */
+	public void deactivate() {
+		for (EditPart childPart : getChildren()) {
+			childPart.deactivate();
+		}
+		deactivateEditPolicies();
+		m_isActive = false;
+	}
+
+	/**
+	 * Returns <code>true</code> if the {@link EditPart} is active. Editparts are active after
+	 * {@link #activate()} is called, and until {@link #deactivate()} is called.
+	 */
+	public boolean isActive() {
+		return m_isActive;
+	}
+
+	/**
+	 * Called <em>after</em> the {@link EditPart} has been added to its parent. This is used to
+	 * indicate to the {@link EditPart} that it should refresh itself for the first time.
+	 */
+	public void addNotify() {
+		getViewer().registerEditPart(this);
+		createEditPolicies();
+		for (EditPart childPart : getChildren()) {
+			childPart.addNotify();
+		}
+		refresh();
+	}
+
+	/**
+	 * Called when the {@link EditPart} is being permanently removed from its {@link EditPartViewer}.
+	 * This indicates that the {@link EditPart} will no longer be in the Viewer, and therefore should
+	 * remove itself from the Viewer. This method is <EM>not</EM> called when a Viewer is disposed. It
+	 * is only called when the EditPart is removed from its parent. This method is the inverse of
+	 * {@link #addNotify()}
+	 */
+	public void removeNotify() {
+		if (getSelected() != SELECTED_NONE) {
+			getViewer().deselect(this);
+		}
+		for (EditPart childPart : getChildren()) {
+			childPart.removeNotify();
+		}
+		getViewer().unregisterEditPart(this);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parent/Children
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Returns the List of children <code>EditParts</code>. This method should rarely be called, and
+	 * is only made public so that helper objects of this EditPart, such as EditPolicies, can obtain
+	 * the children. The returned List may be by reference, and should never be modified.
+	 */
+	public List<EditPart> getChildren() {
+		return m_children == null ? Collections.<EditPart>emptyList() : m_children;
+	}
+
+	/**
+	 * Returns the parent <code>{@link EditPart}</code>. This method should only be called internally
+	 * or by helpers such as EditPolicies.
+	 */
+	public EditPart getParent() {
+		return m_parent;
+	}
+
+	/**
+	 * Sets the parent. This should only be called by the parent {@link EditPart}.
+	 */
+	public void setParent(EditPart parent) {
+		m_parent = parent;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Model
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Returns the primary model object that this {@link EditPart} represents. EditParts may
+	 * correspond to more than one model object, or even no model object. In practice, the Object
+	 * returned is used by other EditParts to identify this EditPart. In addition, EditPolicies
+	 * probably rely on this method to build Commands that operate on the model.
+	 */
+	public Object getModel() {
+		return m_model;
+	}
+
+	/**
+	 * Sets the model. This method is made public to facilitate the use of {@link IEditPartFactory
+	 * EditPartFactories}.
+	 * <P>
+	 * IMPORTANT: This method should only be called once.
+	 */
+	public void setModel(Object model) {
+		m_model = model;
+	}
+
+	/**
+	 * When existing {@link EditPart} reused for new model, this method will be invoked.
+	 */
+	protected void updateModel() {
+	}
+
+	/**
+	 * Returns a <code>List</code> containing the children model objects. If this {@link EditPart}'s
+	 * model is a container, this method should be overridden to returns its children. This is what
+	 * causes children EditParts to be created.
+	 * <P>
+	 * Called by {@link #refreshChildren()}. Must not return <code>null</code>.
+	 */
+	protected List<?> getModelChildren() {
+		return Collections.EMPTY_LIST;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Selection
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Returns the selected state of this {@link EditPart}. This method should only be called
+	 * internally or by helpers such as EditPolicies.
+	 *
+	 * @return one of:
+	 *         <UL>
+	 *         <LI>{@link #SELECTED}
+	 *         <LI>{@link #SELECTED_NONE}
+	 *         <LI>{@link #SELECTED_PRIMARY}
+	 *         </UL>
+	 */
+	public int getSelected() {
+		return m_selected;
+	}
+
+	/**
+	 * Sets the selected state property to reflect the selection in the EditPartViewer. Fires
+	 * selectionChanged(EditPart) to any {@link IEditPartSelectionListener}s. Selection is maintained
+	 * by the {@link EditPartViewer}.
+	 * <P>
+	 * IMPORTANT: This method should only be called by the {@link EditPartViewer}.
+	 */
+	public void setSelected(int selected) {
+		if (m_selected != selected) {
+			m_selected = selected;
+			fireSelection();
+		}
+	}
+
+	/**
+	 * Reserved for future use.
+	 */
+	public boolean isSelectable() {
+		return true;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Visiting
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Visits this {@link EditPart} and its children using given {@link EditPartVisitor}.
+	 */
+	public final void accept(EditPartVisitor visitor) {
+		if (visitor.visit(this)) {
+			for (EditPart childPart : getChildren()) {
+				childPart.accept(visitor);
+			}
+			visitor.endVisit(this);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Events
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private EventTable m_eventTable;
+
+	/**
+	 * Adds a listener to the {@link EditPart}.
+	 */
+	public void addEditPartListener(IEditPartListener listener) {
+		getEnsureEventTable().addListener(IEditPartListener.class, listener);
+	}
+
+	/**
+	 * Removes the first occurrence of the specified listener from the list of listeners. Does nothing
+	 * if the listener was not present.
+	 */
+	public void removeEditPartListener(IEditPartListener listener) {
+		getEnsureEventTable().removeListener(IEditPartListener.class, listener);
+	}
+
+	/**
+	 * Registers the given listener as a {@link IEditPartSelectionListener} of this {@link EditPart}.
+	 */
+	public void addSelectionListener(IEditPartSelectionListener listener) {
+		getEnsureEventTable().addListener(IEditPartSelectionListener.class, listener);
+	}
+
+	/**
+	 * Unregisters the given listener, so that it will no longer receive notification of selection.
+	 */
+	public void removeSelectionListener(IEditPartSelectionListener listener) {
+		getEnsureEventTable().removeListener(IEditPartSelectionListener.class, listener);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Events support
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Return all registers listeners for given class or <code>null</code>.
+	 */
+	public <T extends Object> List<T> getListeners(Class<T> listenerClass) {
+		return m_eventTable == null ? null : m_eventTable.getListeners(listenerClass);
+	}
+
+	/**
+	 * Access to <code>{@link EventTable}</code> use lazy creation mechanism.
+	 */
+	private EventTable getEnsureEventTable() {
+		if (m_eventTable == null) {
+			m_eventTable = new EventTable();
+		}
+		return m_eventTable;
+	}
+
+	private void fireChildAdded(EditPart child, int index) {
+		List<IEditPartListener> listeners = getListeners(IEditPartListener.class);
+		if (listeners != null && !listeners.isEmpty()) {
+			for (IEditPartListener listener : listeners) {
+				listener.childAdded(child, index);
+			}
+		}
+	}
+
+	private void fireRemovingChild(EditPart child, int index) {
+		List<IEditPartListener> listeners = getListeners(IEditPartListener.class);
+		if (listeners != null && !listeners.isEmpty()) {
+			for (IEditPartListener listener : listeners) {
+				listener.removingChild(child, index);
+			}
+		}
+	}
+
+	private void fireSelection() {
+		List<IEditPartSelectionListener> listeners = getListeners(IEditPartSelectionListener.class);
+		if (listeners != null && !listeners.isEmpty()) {
+			for (IEditPartSelectionListener listener : listeners) {
+				listener.selectionChanged(this);
+			}
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// EditPart
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Refreshes all properties visually displayed by this EditPart. The default implementation will
+	 * call {@link #refreshChildren()} to update its structural features. It also calls
+	 * {@link #refreshVisuals()} to update its own displayed properties. Subclasses should extend this
+	 * method to handle additional types of structural refreshing.
+	 */
+	public void refresh() {
+		refreshChildren();
+		refreshVisuals();
+	}
+
+	/**
+	 * Refreshes this EditPart's <i>visuals</i>. This method is called by {@link #refresh()}, and may
+	 * also be called in response to notifications from the model.
+	 */
+	protected void refreshVisuals() {
+	}
+
+	protected void refreshChildren() {
+		// prepare map[model, currentPart]
+		Map<Object, EditPart> modelToPart = new HashMap<>();
+		List<EditPart> children = getChildren();
+		for (EditPart editPart : children) {
+			modelToPart.put(editPart.getModel(), editPart);
+		}
+		// add new child EditPart's or reorder current EditPart's
+		List<?> modelChildren = getModelChildren();
+		int modelCount = modelChildren.size();
+		int partCount = children.size();
+		int index = 0;
+		for (int modelIndex = 0; modelIndex < modelCount; index++, modelIndex++) {
+			Object model = modelChildren.get(modelIndex);
+			// do a quick check to see if editPart[i] == model[i]
+			if (index < partCount) {
+				EditPart part = children.get(index);
+				if (part.getModel() == model) {
+					updateChildVisual(part, index);
+					continue;
+				}
+			}
+			//
+			EditPart childPart = modelToPart.get(model);
+			if (childPart == null) {
+				EditPart createEditPart = createEditPart(model);
+				if (createEditPart != null) {
+					addChild(createEditPart, index);
+				} else {
+					index--;
+				}
+			} else {
+				if (model != childPart.getModel()) {
+					getViewer().unregisterEditPart(childPart);
+					childPart.setModel(model);
+					getViewer().registerEditPart(childPart);
+					childPart.updateModel();
+				}
+				// reorder child EditPart
+				removeChildVisual(childPart);
+				children.remove(childPart);
+				children.add(index, childPart);
+				addChildVisual(childPart, index);
+			}
+		}
+		//
+		int newPartCount = children.size();
+		if (newPartCount - index > 1) {
+			// deselect old child EditPart's
+			List<EditPart> deselectList = Lists.newArrayList();
+			Iterators.addAll(deselectList, children.listIterator(index));
+			getViewer().deselect(deselectList);
+		}
+		// remove old child EditPart's
+		for (int i = index; i < newPartCount; i++) {
+			EditPart childPart = children.get(index);
+			removeChild(childPart);
+		}
+		// recurse refresh()
+		for (EditPart child : getChildren()) {
+			child.refresh();
+		}
+	}
+
+	/**
+	 * Create the child <code>{@link EditPart}</code> for the given model object. This method is
+	 * called from {@link #refreshChildren()}. By default, the implementation will delegate to the
+	 * <code>{@link
+	 * IEditPartViewer}</code> 's {@link IEditPartFactory}.
+	 */
+	protected EditPart createEditPart(Object model) {
+		IEditPartFactory factory = getViewer().getEditPartFactory();
+		return factory.createEditPart(this, model);
+	}
+
+	/**
+	 * Removes a child <code>{@link EditPart}</code>. This method is called from
+	 * {@link #refreshChildren()}. The following events occur in the order listed:
+	 * <OL>
+	 * <LI><code>deactivate()</code> is called if the child is active
+	 * <LI>{@link EditPart#removeNotify()} is called on the child.
+	 * <LI>The child's parent is set to <code>null</code>
+	 * </OL>
+	 * <P>
+	 */
+	protected final void removeChild(EditPart childPart) {
+		int index = getChildren().indexOf(childPart);
+		if (index == -1) {
+			return;
+		}
+		fireRemovingChild(childPart, index);
+		if (isActive()) {
+			childPart.deactivate();
+		}
+		childPart.removeNotify();
+		removeChildVisual(childPart);
+		getChildren().remove(childPart);
+		childPart.setParent(null);
+	}
+
+	/**
+	 * Adds a child <code>{@link EditPart}</code> to this {@link EditPart}. This method is called from
+	 * {@link #refreshChildren()}. The following events occur in the order listed:
+	 * <OL>
+	 * <LI>The child is added to the {@link #children} List, and its parent is set to
+	 * <code>this</code>
+	 * <LI>{@link EditPart#addNotify()} is called on the child.
+	 * <LI><code>activate()</code> is called if this part is active
+	 * </OL>
+	 * <P>
+	 */
+	protected final void addChild(EditPart childPart, int index) {
+		// check EditPart
+		Assert.isNotNull(childPart);
+		// check container
+		if (m_children == null) {
+			m_children = Lists.newArrayList();
+		}
+		// add to child list
+		if (index == -1) {
+			index = m_children.size();
+			m_children.add(childPart);
+		} else {
+			m_children.add(index, childPart);
+		}
+		// set parent
+		childPart.setParent(this);
+		// add child figure
+		addChildVisual(childPart, index);
+		// notify new child
+		childPart.addNotify();
+		// notify listeners
+		fireChildAdded(childPart, index);
+		// activate if necessary
+		if (isActive()) {
+			childPart.activate();
+		}
+	}
+
+	/**
+	 * Convenience method for returning the <code>{@link IEditPartViewer}</code> for this part.
+	 */
+	public IEditPartViewer getViewer() {
+		return getParent().getViewer();
+	}
+
+	/**
+	 * Performs the addition of the child's <i>visual</i> to this EditPart's Visual. The provided
+	 * subclasses {@link GraphicalEditPart} and {@link TreeEditPart} already implement this method
+	 * correctly, so it is unlikely that this method should be overridden.
+	 *
+	 * @param childPart
+	 *          The EditPart being added.
+	 * @param index
+	 *          The child's position.
+	 * @see #addChild(EditPart, int)
+	 */
+	protected abstract void addChildVisual(EditPart childPart, int index);
+
+	/**
+	 * Removes the childs visual from this EditPart's visual. Subclasses should implement this method
+	 * to support the visual type they introduce, such as Figures or TreeItems.
+	 *
+	 * @param childPart
+	 *          the child EditPart
+	 */
+	protected abstract void removeChildVisual(EditPart childPart);
+
+	/**
+	 * When existing {@link EditPart} is not touched in its parent, i.e. has same model and index,
+	 * this method will be invoked.
+	 * <p>
+	 * We need this for "tree" GEF, to re-create items after parent item dispose/re-create.
+	 */
+	protected void updateChildVisual(EditPart childPart, int index) {
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Policy
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Return all installed {@link EditPolicy EditPolicies}.
+	 */
+	public List<EditPolicy> getEditPolicies() {
+		return m_policies;
+	}
+
+	/**
+	 * Return <code>null</code> or the {@link EditPolicy} installed with the given key.
+	 */
+	public EditPolicy getEditPolicy(Object key) {
+		int index = m_keyPolicies.indexOf(key);
+		return index == -1 ? null : m_policies.get(index);
+	}
+
+	/**
+	 * Installs an {@link EditPolicy}, using its class as <i>key</i>.
+	 */
+	public void installEditPolicy(EditPolicy policy) {
+		installEditPolicy(policy.getClass(), policy);
+	}
+
+	/**
+	 * Installs an {@link EditPolicy} for a specified <i>role</i>. A <i>role</i> is is simply an
+	 * Object used to identify the {@link EditPolicy}.
+	 */
+	public void installEditPolicy(Object key, EditPolicy policy) {
+		Assert.isNotNull(key, "Edit Policies must be installed with keys");
+		int index = m_keyPolicies.indexOf(key);
+		//
+		if (index == -1) {
+			if (policy != null) {
+				m_keyPolicies.add(key);
+				m_policies.add(policy);
+			}
+		} else {
+			EditPolicy oldPolicy = m_policies.get(index);
+			//
+			if (isActive()) {
+				oldPolicy.deactivate();
+			}
+			//
+			if (policy == null) {
+				m_keyPolicies.remove(index);
+				m_policies.remove(index);
+			} else {
+				m_policies.set(index, policy);
+			}
+			//
+			oldPolicy.dispose();
+		}
+		//
+		if (policy != null) {
+			policy.setHost(this);
+			//
+			if (isActive()) {
+				policy.activate();
+			}
+		}
+	}
+
+	private void activateEditPolicies() {
+		for (EditPolicy editPolicy : m_policies) {
+			editPolicy.activate();
+		}
+	}
+
+	private void deactivateEditPolicies() {
+		for (EditPolicy editPolicy : m_policies) {
+			editPolicy.deactivate();
+		}
+	}
+
+	/**
+	 * Creates the initial EditPolicies and/or reserves slots for dynamic ones. Should be implemented
+	 * to install the initial EditPolicies based on the model's initial state.
+	 */
+	protected void createEditPolicies() {
+	}
+
+	/**
+	 * @return the instances of {@link EditPolicy} which understand given {@link Request}, may be
+	 *         empty {@link List}.
+	 */
+	private List<EditPolicy> getUnderstandingPolicies(Request request) {
+		List<EditPolicy> policies = Lists.newArrayList();
+		for (EditPolicy editPolicy : m_policies) {
+			if (editPolicy.understandsRequest(request)) {
+				policies.add(editPolicy);
+			}
+		}
+		return policies;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Request processors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final List<RequestProcessor> m_requestProcessors = Lists.newArrayList();
+
+	/**
+	 * Adds the {@link RequestProcessor}, if not added yet.
+	 */
+	public final void addRequestProcessor(RequestProcessor processor) {
+		if (!m_requestProcessors.contains(processor)) {
+			m_requestProcessors.add(processor);
+		}
+	}
+
+	/**
+	 * Removes the {@link RequestProcessor}.
+	 */
+	public final void removeRequestProcessor(RequestProcessor processor) {
+		m_requestProcessors.remove(processor);
+	}
+
+	/**
+	 * @return the {@link Request} processed with registered {@link RequestProcessor}'s.
+	 */
+	protected final Request processRequestProcessors(Request request) {
+		try {
+			for (RequestProcessor processor : m_requestProcessors) {
+				request = processor.process(this, request);
+			}
+		} catch (Throwable e) {
+		}
+		return request;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// DragTracking
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Returns a {@link Tool} for dragging this {@link EditPart}. The SelectionTool is the only
+	 * {@link Tool} by default that calls this method. The SelectionTool will use a SelectionRequest
+	 * to provide information such as which mouse button is down, and what modifier keys are pressed.
+	 */
+	public abstract Tool getDragTrackerTool(Request request);
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Request/Command
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Returns the {@link Command} to perform the specified {@link Request} or <code>null</code>.
+	 */
+	public Command getCommand(Request request) {
+		request = processRequestProcessors(request);
+		for (EditPolicy editPolicy : getUnderstandingPolicies(request)) {
+			Command command = editPolicy.getCommand(request);
+			if (command != null) {
+				return command;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * @return new instance of {@link CompoundCommand} for further wrapping commands usage.
+	 */
+	public CompoundCommand createCompoundCommand() {
+		return new CompoundCommand();
+	}
+
+	/**
+	 * Return the <code>{@link EditPart}</code> that should be used as the <i>target</i> for the
+	 * specified <code>{@link Request}</code>. Tools will generally call this method with the mouse
+	 * location so that the receiver can implement drop targeting. Typically, if this {@link EditPart}
+	 * is not the requested target (for example, this EditPart is not a composite), it will forward
+	 * the call to its parent.
+	 */
+	public EditPart getTargetEditPart(Request request) {
+		request = processRequestProcessors(request);
+		EditPart target = null;
+		// update target using any understanding EditPolicy
+		for (EditPolicy editPolicy : getUnderstandingPolicies(request)) {
+			EditPart newTarget = editPolicy.getTargetEditPart(request);
+			if (newTarget != null) {
+				target = newTarget;
+			}
+		}
+		// OK, we (probably) have target
+		return target;
+	}
+
+	/**
+	 * Performs the specified Request. This method can be used to send a generic message to an
+	 * EditPart. Subclasses should extend this method to handle Requests. For now, the default
+	 * implementation forward request to all EditPolicies.
+	 */
+	public void performRequest(Request request) {
+		request = processRequestProcessors(request);
+		for (EditPolicy editPolicy : m_policies) {
+			editPolicy.performRequest(request);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Source Feedback
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Shows or updates source feedback for the given request. This method may be called multiple
+	 * times so that the feedback can be updated for changes in the request, such as the mouse
+	 * location changing.
+	 */
+	public void showSourceFeedback(Request request) {
+		request = processRequestProcessors(request);
+		if (isActive()) {
+			for (EditPolicy editPolicy : getUnderstandingPolicies(request)) {
+				editPolicy.showSourceFeedback(request);
+			}
+		}
+	}
+
+	/**
+	 * Erases <i>source</i> feedback for the specified {@link Request}. A {@link Request} is used to
+	 * describe the type of source feedback that should be erased. This method should only be called
+	 * once to erase feedback. It should only be called in conjunction with a prior call to
+	 * {@link #showSourceFeedback(Request)}.
+	 */
+	public void eraseSourceFeedback(Request request) {
+		request = processRequestProcessors(request);
+		if (isActive()) {
+			for (EditPolicy editPolicy : getUnderstandingPolicies(request)) {
+				editPolicy.eraseSourceFeedback(request);
+			}
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Target Feedback
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Shows or updates target feedback for the given request. This method can be called multiple
+	 * times so that the feedback can be updated for changes in the request, such as the mouse
+	 * location changing.
+	 */
+	public void showTargetFeedback(Request request) {
+		request = processRequestProcessors(request);
+		if (isActive()) {
+			for (EditPolicy editPolicy : getUnderstandingPolicies(request)) {
+				editPolicy.showTargetFeedback(request);
+			}
+		}
+	}
+
+	/**
+	 * Erases <i>target</i> feedback for the specified {@link Request}. A {@link Request} is used to
+	 * describe the type of target feedback that should be erased. This method should only be called
+	 * once to erase feedback. It should only be called in conjunction with a prior call to
+	 * {@link #showTargetFeedback(Request)}.
+	 */
+	public void eraseTargetFeedback(Request request) {
+		request = processRequestProcessors(request);
+		if (isActive()) {
+			for (EditPolicy editPolicy : getUnderstandingPolicies(request)) {
+				editPolicy.eraseTargetFeedback(request);
+			}
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/ICommandExceptionHandler.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/ICommandExceptionHandler.java
index f0718d586..fff422f03 100644
--- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/ICommandExceptionHandler.java
+++ b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/ICommandExceptionHandler.java
@@ -18,8 +18,8 @@
  * @coverage gef.core
  */
 public interface ICommandExceptionHandler {
-  /**
-   * Notifies that exception was happened.
-   */
-  void handleException(Throwable exception);
+	/**
+	 * Notifies that exception was happened.
+	 */
+	void handleException(Throwable exception);
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/IEditPartFactory.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/IEditPartFactory.java
index 9427b9139..4feb56dd4 100644
--- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/IEditPartFactory.java
+++ b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/IEditPartFactory.java
@@ -20,8 +20,8 @@
  * @coverage gef.core
  */
 public interface IEditPartFactory {
-  /**
-   * Creates a new {@link EditPart} given the specified <i>context</i> and <i>model</i>.
-   */
-  EditPart createEditPart(EditPart context, Object model);
+	/**
+	 * Creates a new {@link EditPart} given the specified <i>context</i> and <i>model</i>.
+	 */
+	EditPart createEditPart(EditPart context, Object model);
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/IEditPartViewer.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/IEditPartViewer.java
index dd84135fd..d25fa81e5 100644
--- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/IEditPartViewer.java
+++ b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/IEditPartViewer.java
@@ -33,280 +33,280 @@
  * @coverage gef.core
  */
 public interface IEditPartViewer extends ISelectionProvider {
-  /**
-   * The layer directly below {@link #PRIMARY_LAYER}.
-   */
-  String PRIMARY_LAYER_SUB_1 = "Primary Layer Sub 1";
-  /**
-   * Identifies the layer containing the primary pieces of the application.
-   */
-  String PRIMARY_LAYER = "Primary Layer";
-  /**
-   * The layer directly below {@link #HANDLE_LAYER}.
-   */
-  String HANDLE_LAYER_SUB_1 = "Handle Layer Sub 1";
-  /**
-   * The layer directly below {@link #HANDLE_LAYER}.
-   */
-  String HANDLE_LAYER_SUB_2 = "Handle Layer Sub 2";
-  /**
-   * Identifies the layer containing handles, which are typically editing decorations that appear on
-   * top of any model representations.
-   */
-  String HANDLE_LAYER = "Handle Layer";
-  /**
-   * The layer directly below {@link #HANDLE_LAYER}.
-   */
-  String HANDLE_LAYER_STATIC = "Handle Layer Static";
-  /**
-   * The layer directly above {@link #FEEDBACK_LAYER}.
-   */
-  String FEEDBACK_LAYER_ABV_1 = "Feedback Layer Abv 1";
-  /**
-   * The layer directly below {@link #FEEDBACK_LAYER}.
-   */
-  String FEEDBACK_LAYER_SUB_1 = "Feedback Layer Sub 1";
-  /**
-   * The layer directly below {@link #FEEDBACK_LAYER}.
-   */
-  String FEEDBACK_LAYER_SUB_2 = "Feedback Layer Sub 2";
-  /**
-   * The layer containing feedback, which generally temporary visuals that appear on top of all
-   * other visuals.
-   */
-  String FEEDBACK_LAYER = "Feedback Layer";
-  /**
-   * The layer containing feedback figures that can accept clicks.
-   */
-  String CLICKABLE_LAYER = "Clickable Layer";
-  /**
-   * Identifies the layer containing the menu.
-   */
-  String MENU_PRIMARY_LAYER = "Menu Primary Layer";
-  /**
-   * The special layer containing {@link Handle}'s for menu.
-   */
-  String MENU_HANDLE_LAYER = "Menu Handle Layer";
-  /**
-   * The special layer containing static {@link Handle}'s for menu.
-   */
-  String MENU_HANDLE_LAYER_STATIC = "Menu Handle Layer static";
-  /**
-   * The special layer containing feedback for menu.
-   */
-  String MENU_FEEDBACK_LAYER = "Menu Feedback Layer";
-  /**
-   * The most top layer.
-   */
-  String TOP_LAYER = "Top Layer";
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Returns the SWT <code>Control</code> for this viewer.
-   */
-  Control getControl();
-
-  /**
-   * @return viewer horizontal scroll offset.
-   */
-  int getHOffset();
-
-  /**
-   * @return viewer vertical scroll offset.
-   */
-  int getVOffset();
-
-  /**
-   * Returns the {@link IRootContainer}.
-   */
-  IRootContainer getRootContainer();
-
-  /**
-   * Returns root {@link EditPart}.
-   */
-  EditPart getRootEditPart();
-
-  /**
-   * Returns root {@link Figure} use for access to {@link Layer}'s.
-   */
-  IRootFigure getRootFigure();
-
-  /**
-   * Returns the layer identified by the <code>name</code> given in the input.
-   */
-  Layer getLayer(String name);
-
-  /**
-   * Get factory for creating new EditParts.
-   */
-  IEditPartFactory getEditPartFactory();
-
-  /**
-   * Register given {@link EditPart} into this viewer.
-   */
-  void registerEditPart(EditPart editPart);
-
-  /**
-   * Unregister given {@link EditPart} into this viewer.
-   */
-  void unregisterEditPart(EditPart editPart);
-
-  /**
-   * Returns {@link EditPart} register into this viewer associate given model.
-   */
-  EditPart getEditPartByModel(Object model);
-
-  /**
-   * Returns the {@link EditDomain EditDomain} to which this viewer belongs.
-   */
-  EditDomain getEditDomain();
-
-  /**
-   * Set the Cursor.
-   */
-  void setCursor(Cursor cursor);
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Context menu
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the context {@link MenuManager} for this viewer.
-   */
-  MenuManager getContextMenu();
-
-  /**
-   * Sets the context {@link MenuManager} for this viewer. The {@link MenuManager} will be asked to
-   * create a {@link Menu}, which will be used as the context menu for this viewer's control.
-   */
-  void setContextMenu(MenuManager manager);
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Selection
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Appends the specified <code>{@link EditPart}</code> to the viewer's <i>selection</i>. The
-   * {@link EditPart} becomes the new primary selection.
-   */
-  void appendSelection(EditPart part);
-
-  /**
-   * Replaces the current selection with the specified <code>{@link EditPart EditParts}</code>.
-   */
-  void setSelection(List<EditPart> editParts);
-
-  /**
-   * Replaces the current selection with the specified <code>{@link EditPart}</code>. That part
-   * becomes the primary selection.
-   */
-  void select(EditPart part);
-
-  /**
-   * Removes the specified <code>{@link EditPart}</code> from the current selection. The last
-   * EditPart in the new selection is made {@link EditPart#SELECTED_PRIMARY primary}.
-   */
-  void deselect(EditPart part);
-
-  /**
-   * Removes the specified <code>{@link List}</code> of <code>{@link EditPart}</code>'s from the
-   * current selection. The last EditPart in the new selection is made
-   * {@link EditPart#SELECTED_PRIMARY primary}.
-   */
-  void deselect(List<EditPart> editParts);
-
-  /**
-   * Deselects all EditParts.
-   */
-  void deselectAll();
-
-  /**
-   * Returns an unmodifiable <code>List</code> containing zero or more selected editparts. This list
-   * may be empty. This list can be modified indirectly by calling other methods on the viewer.
-   */
-  List<EditPart> getSelectedEditParts();
-
-  /**
-   * Returns the {@link EditPart} which is being selected during selection listeners firing. IOW,
-   * this will allow to track where the selection goes during deselecting another EditPart. After
-   * all selection listeners fired this method returns <code>null</code>.
-   */
-  EditPart getSelectingEditPart();
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Click
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds a listener on click {@link EditPart}.
-   */
-  void addEditPartClickListener(IEditPartClickListener listener);
-
-  /**
-   * Removes a listener on click {@link EditPart}.
-   */
-  void removeEditPartClickListener(IEditPartClickListener listener);
-
-  /**
-   * Notify listeners on click given {@link EditPart}.
-   */
-  void fireEditPartClick(EditPart editPart);
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Finding
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Returns <code>null</code> or the <code>{@link EditPart}</code> at the specified location, using
-   * the given exclusion set and conditional.
-   */
-  EditPart findTargetEditPart(int x,
-      int y,
-      final Collection<EditPart> exclude,
-      final IConditional conditional);
-
-  /**
-   * Returns <code>null</code> or the <code>{@link EditPart}</code> at the specified location on
-   * specified given layer, using the given exclusion set and conditional.
-   */
-  EditPart findTargetEditPart(int x,
-      int y,
-      final Collection<EditPart> exclude,
-      final IConditional conditional,
-      String layer);
-
-  /**
-   * @return the <code>{@link Handle}</code> at the specified location.
-   */
-  Handle findTargetHandle(Point location);
-
-  /**
-   * Returns the <code>{@link Handle}</code> at the specified location <code>(x, y)</code>. Returns
-   * <code>null</code> if no handle exists at the given location <code>(x, y)</code>.
-   */
-  Handle findTargetHandle(int x, int y);
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Finding Inner class
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * An object which evaluates an {@link EditPart} for an arbitrary property. Conditionals are used
-   * when querying a viewer for an {@link EditPart}.
-   */
-  interface IConditional {
-    /**
-     * Returns <code>true</code> if the editPart meets this condition.
-     */
-    boolean evaluate(EditPart editPart);
-  }
+	/**
+	 * The layer directly below {@link #PRIMARY_LAYER}.
+	 */
+	String PRIMARY_LAYER_SUB_1 = "Primary Layer Sub 1";
+	/**
+	 * Identifies the layer containing the primary pieces of the application.
+	 */
+	String PRIMARY_LAYER = "Primary Layer";
+	/**
+	 * The layer directly below {@link #HANDLE_LAYER}.
+	 */
+	String HANDLE_LAYER_SUB_1 = "Handle Layer Sub 1";
+	/**
+	 * The layer directly below {@link #HANDLE_LAYER}.
+	 */
+	String HANDLE_LAYER_SUB_2 = "Handle Layer Sub 2";
+	/**
+	 * Identifies the layer containing handles, which are typically editing decorations that appear on
+	 * top of any model representations.
+	 */
+	String HANDLE_LAYER = "Handle Layer";
+	/**
+	 * The layer directly below {@link #HANDLE_LAYER}.
+	 */
+	String HANDLE_LAYER_STATIC = "Handle Layer Static";
+	/**
+	 * The layer directly above {@link #FEEDBACK_LAYER}.
+	 */
+	String FEEDBACK_LAYER_ABV_1 = "Feedback Layer Abv 1";
+	/**
+	 * The layer directly below {@link #FEEDBACK_LAYER}.
+	 */
+	String FEEDBACK_LAYER_SUB_1 = "Feedback Layer Sub 1";
+	/**
+	 * The layer directly below {@link #FEEDBACK_LAYER}.
+	 */
+	String FEEDBACK_LAYER_SUB_2 = "Feedback Layer Sub 2";
+	/**
+	 * The layer containing feedback, which generally temporary visuals that appear on top of all
+	 * other visuals.
+	 */
+	String FEEDBACK_LAYER = "Feedback Layer";
+	/**
+	 * The layer containing feedback figures that can accept clicks.
+	 */
+	String CLICKABLE_LAYER = "Clickable Layer";
+	/**
+	 * Identifies the layer containing the menu.
+	 */
+	String MENU_PRIMARY_LAYER = "Menu Primary Layer";
+	/**
+	 * The special layer containing {@link Handle}'s for menu.
+	 */
+	String MENU_HANDLE_LAYER = "Menu Handle Layer";
+	/**
+	 * The special layer containing static {@link Handle}'s for menu.
+	 */
+	String MENU_HANDLE_LAYER_STATIC = "Menu Handle Layer static";
+	/**
+	 * The special layer containing feedback for menu.
+	 */
+	String MENU_FEEDBACK_LAYER = "Menu Feedback Layer";
+	/**
+	 * The most top layer.
+	 */
+	String TOP_LAYER = "Top Layer";
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Returns the SWT <code>Control</code> for this viewer.
+	 */
+	Control getControl();
+
+	/**
+	 * @return viewer horizontal scroll offset.
+	 */
+	int getHOffset();
+
+	/**
+	 * @return viewer vertical scroll offset.
+	 */
+	int getVOffset();
+
+	/**
+	 * Returns the {@link IRootContainer}.
+	 */
+	IRootContainer getRootContainer();
+
+	/**
+	 * Returns root {@link EditPart}.
+	 */
+	EditPart getRootEditPart();
+
+	/**
+	 * Returns root {@link Figure} use for access to {@link Layer}'s.
+	 */
+	IRootFigure getRootFigure();
+
+	/**
+	 * Returns the layer identified by the <code>name</code> given in the input.
+	 */
+	Layer getLayer(String name);
+
+	/**
+	 * Get factory for creating new EditParts.
+	 */
+	IEditPartFactory getEditPartFactory();
+
+	/**
+	 * Register given {@link EditPart} into this viewer.
+	 */
+	void registerEditPart(EditPart editPart);
+
+	/**
+	 * Unregister given {@link EditPart} into this viewer.
+	 */
+	void unregisterEditPart(EditPart editPart);
+
+	/**
+	 * Returns {@link EditPart} register into this viewer associate given model.
+	 */
+	EditPart getEditPartByModel(Object model);
+
+	/**
+	 * Returns the {@link EditDomain EditDomain} to which this viewer belongs.
+	 */
+	EditDomain getEditDomain();
+
+	/**
+	 * Set the Cursor.
+	 */
+	void setCursor(Cursor cursor);
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Context menu
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the context {@link MenuManager} for this viewer.
+	 */
+	MenuManager getContextMenu();
+
+	/**
+	 * Sets the context {@link MenuManager} for this viewer. The {@link MenuManager} will be asked to
+	 * create a {@link Menu}, which will be used as the context menu for this viewer's control.
+	 */
+	void setContextMenu(MenuManager manager);
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Selection
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Appends the specified <code>{@link EditPart}</code> to the viewer's <i>selection</i>. The
+	 * {@link EditPart} becomes the new primary selection.
+	 */
+	void appendSelection(EditPart part);
+
+	/**
+	 * Replaces the current selection with the specified <code>{@link EditPart EditParts}</code>.
+	 */
+	void setSelection(List<EditPart> editParts);
+
+	/**
+	 * Replaces the current selection with the specified <code>{@link EditPart}</code>. That part
+	 * becomes the primary selection.
+	 */
+	void select(EditPart part);
+
+	/**
+	 * Removes the specified <code>{@link EditPart}</code> from the current selection. The last
+	 * EditPart in the new selection is made {@link EditPart#SELECTED_PRIMARY primary}.
+	 */
+	void deselect(EditPart part);
+
+	/**
+	 * Removes the specified <code>{@link List}</code> of <code>{@link EditPart}</code>'s from the
+	 * current selection. The last EditPart in the new selection is made
+	 * {@link EditPart#SELECTED_PRIMARY primary}.
+	 */
+	void deselect(List<EditPart> editParts);
+
+	/**
+	 * Deselects all EditParts.
+	 */
+	void deselectAll();
+
+	/**
+	 * Returns an unmodifiable <code>List</code> containing zero or more selected editparts. This list
+	 * may be empty. This list can be modified indirectly by calling other methods on the viewer.
+	 */
+	List<EditPart> getSelectedEditParts();
+
+	/**
+	 * Returns the {@link EditPart} which is being selected during selection listeners firing. IOW,
+	 * this will allow to track where the selection goes during deselecting another EditPart. After
+	 * all selection listeners fired this method returns <code>null</code>.
+	 */
+	EditPart getSelectingEditPart();
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Click
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds a listener on click {@link EditPart}.
+	 */
+	void addEditPartClickListener(IEditPartClickListener listener);
+
+	/**
+	 * Removes a listener on click {@link EditPart}.
+	 */
+	void removeEditPartClickListener(IEditPartClickListener listener);
+
+	/**
+	 * Notify listeners on click given {@link EditPart}.
+	 */
+	void fireEditPartClick(EditPart editPart);
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Finding
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Returns <code>null</code> or the <code>{@link EditPart}</code> at the specified location, using
+	 * the given exclusion set and conditional.
+	 */
+	EditPart findTargetEditPart(int x,
+			int y,
+			final Collection<EditPart> exclude,
+			final IConditional conditional);
+
+	/**
+	 * Returns <code>null</code> or the <code>{@link EditPart}</code> at the specified location on
+	 * specified given layer, using the given exclusion set and conditional.
+	 */
+	EditPart findTargetEditPart(int x,
+			int y,
+			final Collection<EditPart> exclude,
+			final IConditional conditional,
+			String layer);
+
+	/**
+	 * @return the <code>{@link Handle}</code> at the specified location.
+	 */
+	Handle findTargetHandle(Point location);
+
+	/**
+	 * Returns the <code>{@link Handle}</code> at the specified location <code>(x, y)</code>. Returns
+	 * <code>null</code> if no handle exists at the given location <code>(x, y)</code>.
+	 */
+	Handle findTargetHandle(int x, int y);
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Finding Inner class
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * An object which evaluates an {@link EditPart} for an arbitrary property. Conditionals are used
+	 * when querying a viewer for an {@link EditPart}.
+	 */
+	interface IConditional {
+		/**
+		 * Returns <code>true</code> if the editPart meets this condition.
+		 */
+		boolean evaluate(EditPart editPart);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/RequestProcessor.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/RequestProcessor.java
index 25d281a72..e9d17e413 100644
--- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/RequestProcessor.java
+++ b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/RequestProcessor.java
@@ -27,15 +27,15 @@
  * @coverage gef.core
  */
 public abstract class RequestProcessor {
-  /**
-   * Processes given {@link Request}.
-   *
-   * @param editPart
-   *          the {@link EditPart} which initiates {@link Request} processing.
-   * @param request
-   *          the {@link Request} to process.
-   *
-   * @return a new {@link Request}, or same {@link Request}.
-   */
-  public abstract Request process(EditPart editPart, Request request) throws Exception;
+	/**
+	 * Processes given {@link Request}.
+	 *
+	 * @param editPart
+	 *          the {@link EditPart} which initiates {@link Request} processing.
+	 * @param request
+	 *          the {@link Request} to process.
+	 *
+	 * @return a new {@link Request}, or same {@link Request}.
+	 */
+	public abstract Request process(EditPart editPart, Request request) throws Exception;
 }
diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/events/IEditPartClickListener.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/events/IEditPartClickListener.java
index 960ce4d67..30c617257 100644
--- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/events/IEditPartClickListener.java
+++ b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/events/IEditPartClickListener.java
@@ -19,9 +19,9 @@
  * @coverage gef.core
  */
 public interface IEditPartClickListener {
-  /**
-   * Called when user does left-click on given {@link EditPart} (only click, i.e. down/up, without
-   * drag) and part is selected (become selected, or already was selected before click).
-   */
-  void clickNotify(EditPart editPart);
+	/**
+	 * Called when user does left-click on given {@link EditPart} (only click, i.e. down/up, without
+	 * drag) and part is selected (become selected, or already was selected before click).
+	 */
+	void clickNotify(EditPart editPart);
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/events/IEditPartListener.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/events/IEditPartListener.java
index 60ad320dd..513588643 100644
--- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/events/IEditPartListener.java
+++ b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/events/IEditPartListener.java
@@ -19,13 +19,13 @@
  * @coverage gef.core
  */
 public interface IEditPartListener {
-  /**
-   * Called after a child {@link EditPart} has been added to its parent.
-   */
-  void childAdded(EditPart child, int index);
+	/**
+	 * Called after a child {@link EditPart} has been added to its parent.
+	 */
+	void childAdded(EditPart child, int index);
 
-  /**
-   * Called before a child {@link EditPart} is removed from its parent.
-   */
-  void removingChild(EditPart child, int index);
+	/**
+	 * Called before a child {@link EditPart} is removed from its parent.
+	 */
+	void removingChild(EditPart child, int index);
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/events/IEditPartSelectionListener.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/events/IEditPartSelectionListener.java
index ca37b008c..ebcb8f17a 100644
--- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/events/IEditPartSelectionListener.java
+++ b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/events/IEditPartSelectionListener.java
@@ -19,8 +19,8 @@
  * @coverage gef.core
  */
 public interface IEditPartSelectionListener {
-  /**
-   * Called when the selected state of an {@link EditPart} has changed.
-   */
-  void selectionChanged(EditPart editPart);
+	/**
+	 * Called when the selected state of an {@link EditPart} has changed.
+	 */
+	void selectionChanged(EditPart editPart);
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/events/IEditPolicyListener.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/events/IEditPolicyListener.java
index 737ec05f8..2c2b63f41 100644
--- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/events/IEditPolicyListener.java
+++ b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/events/IEditPolicyListener.java
@@ -19,13 +19,13 @@
  * @coverage gef.core
  */
 public interface IEditPolicyListener {
-  /**
-   * Called when given {@link EditPolicy} has activate.
-   */
-  void activatePolicy(EditPolicy policy);
+	/**
+	 * Called when given {@link EditPolicy} has activate.
+	 */
+	void activatePolicy(EditPolicy policy);
 
-  /**
-   * Called when given {@link EditPolicy} has deactivate.
-   */
-  void deactivatePolicy(EditPolicy policy);
+	/**
+	 * Called when given {@link EditPolicy} has deactivate.
+	 */
+	void deactivatePolicy(EditPolicy policy);
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/policies/EditPolicy.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/policies/EditPolicy.java
index 50cc4b5bf..ff21af570 100644
--- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/policies/EditPolicy.java
+++ b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/policies/EditPolicy.java
@@ -23,255 +23,255 @@
  * @coverage gef.core
  */
 public abstract class EditPolicy {
-  /**
-   * The key used to install a <i>selection</i> {@link EditPolicy}.
-   */
-  public static final String SELECTION_ROLE = "Selection Feedback";
-  /**
-   * The key used to install a <i>layout</i> {@link EditPolicy}.
-   */
-  public static final String LAYOUT_ROLE = "LayoutEditPolicy";
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance fields
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private EditPart m_host;
-  private boolean m_isActive;
+	/**
+	 * The key used to install a <i>selection</i> {@link EditPolicy}.
+	 */
+	public static final String SELECTION_ROLE = "Selection Feedback";
+	/**
+	 * The key used to install a <i>layout</i> {@link EditPolicy}.
+	 */
+	public static final String LAYOUT_ROLE = "LayoutEditPolicy";
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance fields
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private EditPart m_host;
+	private boolean m_isActive;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Activates this {@link EditPolicy}. The {@link EditPolicy} might need to hook listeners. These
-   * listeners should be unhooked in <code>deactivate()</code>. The {@link EditPolicy} might also
-   * contribute feedback/visuals immediately, such as <i>selection handles</i> if the
-   * {@link EditPart} was selected at the time of activation.
-   * <P>
-   * Activate is called after the <i>host</i> has been set, and that host has been activated.
-   */
-  public void activate() {
-    m_isActive = true;
-    fireActivate();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Activates this {@link EditPolicy}. The {@link EditPolicy} might need to hook listeners. These
+	 * listeners should be unhooked in <code>deactivate()</code>. The {@link EditPolicy} might also
+	 * contribute feedback/visuals immediately, such as <i>selection handles</i> if the
+	 * {@link EditPart} was selected at the time of activation.
+	 * <P>
+	 * Activate is called after the <i>host</i> has been set, and that host has been activated.
+	 */
+	public void activate() {
+		m_isActive = true;
+		fireActivate();
+	}
 
-  /**
-   * Deactivates the {@link EditPolicy}, the inverse of {@link #activate()}. Deactivate is called
-   * when the <i>host</i> is deactivated, or when the {@link EditPolicy} is uninstalled from an
-   * active host. Deactivate unhooks any listeners, and removes all feedback.
-   */
-  public void deactivate() {
-    fireDeactivate();
-    m_isActive = false;
-  }
+	/**
+	 * Deactivates the {@link EditPolicy}, the inverse of {@link #activate()}. Deactivate is called
+	 * when the <i>host</i> is deactivated, or when the {@link EditPolicy} is uninstalled from an
+	 * active host. Deactivate unhooks any listeners, and removes all feedback.
+	 */
+	public void deactivate() {
+		fireDeactivate();
+		m_isActive = false;
+	}
 
-  /**
-   * Returns <code>true</code> if the {@link EditPolicy} is active. {@link EditPolicy} are active
-   * after {@link #activate()} is called, and until {@link #deactivate()} is called.
-   */
-  public boolean isActive() {
-    return m_isActive;
-  }
+	/**
+	 * Returns <code>true</code> if the {@link EditPolicy} is active. {@link EditPolicy} are active
+	 * after {@link #activate()} is called, and until {@link #deactivate()} is called.
+	 */
+	public boolean isActive() {
+		return m_isActive;
+	}
 
-  /**
-   * Method called after this {@link EditPolicy} deleted from host {@link EditPart}.
-   */
-  public void dispose() {
-  }
+	/**
+	 * Method called after this {@link EditPolicy} deleted from host {@link EditPart}.
+	 */
+	public void dispose() {
+	}
 
-  /**
-   * @return the <i>host</i> {@link EditPart} on which this policy is installed.
-   */
-  public EditPart getHost() {
-    return m_host;
-  }
+	/**
+	 * @return the <i>host</i> {@link EditPart} on which this policy is installed.
+	 */
+	public EditPart getHost() {
+		return m_host;
+	}
 
-  /**
-   * Sets the host in which this {@link EditPolicy} is installed.
-   *
-   * @param editpart
-   *          the host {@link EditPart}
-   */
-  public void setHost(EditPart host) {
-    m_host = host;
-  }
+	/**
+	 * Sets the host in which this {@link EditPolicy} is installed.
+	 *
+	 * @param editpart
+	 *          the host {@link EditPart}
+	 */
+	public void setHost(EditPart host) {
+		m_host = host;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Request/Command
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Returns the <code>{@link Command}</code> contribution for the given
-   * <code>{@link Request}</code>, or <code>null</code>. <code>null</code> is treated as a no-op by
-   * the caller, or an empty contribution.
-   */
-  public Command getCommand(Request request) {
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Request/Command
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Returns the <code>{@link Command}</code> contribution for the given
+	 * <code>{@link Request}</code>, or <code>null</code>. <code>null</code> is treated as a no-op by
+	 * the caller, or an empty contribution.
+	 */
+	public Command getCommand(Request request) {
+		return null;
+	}
 
-  /**
-   * Returns <code>null</code> or the appropriate <code>{@link EditPart}</code> for the specified
-   * <code>{@link Request}</code>. In general, this {@link EditPolicy} will return its <i>host</i>
-   * {@link EditPart} if it understands the {@link Request}. Otherwise, it will return
-   * <code>null</code>.
-   * <P>
-   * This method is declared on {@link EditPart#getTargetEditPart(Request) EditPart}, and is
-   * redeclared here so that {@link EditPart} can delegate its implementation to each of its
-   * EditPolicies. The first non- <code>null</code> result returned by an {@link EditPolicy} is
-   * returned by the {@link EditPart}.
-   */
-  public EditPart getTargetEditPart(Request request) {
-    return null;
-  }
+	/**
+	 * Returns <code>null</code> or the appropriate <code>{@link EditPart}</code> for the specified
+	 * <code>{@link Request}</code>. In general, this {@link EditPolicy} will return its <i>host</i>
+	 * {@link EditPart} if it understands the {@link Request}. Otherwise, it will return
+	 * <code>null</code>.
+	 * <P>
+	 * This method is declared on {@link EditPart#getTargetEditPart(Request) EditPart}, and is
+	 * redeclared here so that {@link EditPart} can delegate its implementation to each of its
+	 * EditPolicies. The first non- <code>null</code> result returned by an {@link EditPolicy} is
+	 * returned by the {@link EditPart}.
+	 */
+	public EditPart getTargetEditPart(Request request) {
+		return null;
+	}
 
-  /**
-   * Returns <code>true</code> if this {@link EditPolicy} understand the specified request.
-   */
-  public boolean understandsRequest(Request request) {
-    return false;
-  }
+	/**
+	 * Returns <code>true</code> if this {@link EditPolicy} understand the specified request.
+	 */
+	public boolean understandsRequest(Request request) {
+		return false;
+	}
 
-  /**
-   * Performs the specified Request. This method can be used to send a generic message to an
-   * EditPolicy. Subclasses should extend this method to handle Requests. For now, the default
-   * implementation does not handle any requests.
-   */
-  public void performRequest(Request request) {
-  }
+	/**
+	 * Performs the specified Request. This method can be used to send a generic message to an
+	 * EditPolicy. Subclasses should extend this method to handle Requests. For now, the default
+	 * implementation does not handle any requests.
+	 */
+	public void performRequest(Request request) {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Source Feedback
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Shows or updates <i>source feedback</i> for the specified <code>{@link Request}</code>. This
-   * method may be called repeatedly for the purpose of updating feedback based on changes to the
-   * {@link Request}.
-   * <P>
-   * Does nothing if the EditPolicy does not recognize the given {@link Request}.
-   * <P>
-   * This method is declared on {@link EditPart#showSourceFeedback(Request) EditPart}, and is
-   * redeclared here so that EditPart can delegate its implementation to each of its EditPolicies.
-   */
-  public void showSourceFeedback(Request request) {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Source Feedback
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Shows or updates <i>source feedback</i> for the specified <code>{@link Request}</code>. This
+	 * method may be called repeatedly for the purpose of updating feedback based on changes to the
+	 * {@link Request}.
+	 * <P>
+	 * Does nothing if the EditPolicy does not recognize the given {@link Request}.
+	 * <P>
+	 * This method is declared on {@link EditPart#showSourceFeedback(Request) EditPart}, and is
+	 * redeclared here so that EditPart can delegate its implementation to each of its EditPolicies.
+	 */
+	public void showSourceFeedback(Request request) {
+	}
 
-  /**
-   * Erases source feedback based on the given <code>{@link Request}</code>. Does nothing if the
-   * {@link EditPolicy} does not apply to the given {@link Request}.
-   * <P>
-   * This method is declared on {@link EditPart#eraseSourceFeedback(Request) EditPart}, and is
-   * redeclared here so that {@link EditPart} can delegate its implementation to each of its
-   * EditPolicies.
-   */
-  public void eraseSourceFeedback(Request request) {
-  }
+	/**
+	 * Erases source feedback based on the given <code>{@link Request}</code>. Does nothing if the
+	 * {@link EditPolicy} does not apply to the given {@link Request}.
+	 * <P>
+	 * This method is declared on {@link EditPart#eraseSourceFeedback(Request) EditPart}, and is
+	 * redeclared here so that {@link EditPart} can delegate its implementation to each of its
+	 * EditPolicies.
+	 */
+	public void eraseSourceFeedback(Request request) {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Target Feedback
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Shows or updates <i>target feedback</i> for the specified <code>{@link Request}</code>. This
-   * method may be called repeatedly for the purpose of updating feedback based on changes to the
-   * {@link Request}.
-   * <P>
-   * Does nothing if the EditPolicy does not recognize the given request.
-   * <P>
-   * This method is declared on {@link EditPart#showTargetFeedback(Request) EditPart}, and is
-   * redeclared here so that {@link EditPart} can delegate its implementation to each of its
-   * EditPolicies.
-   */
-  public void showTargetFeedback(Request request) {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Target Feedback
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Shows or updates <i>target feedback</i> for the specified <code>{@link Request}</code>. This
+	 * method may be called repeatedly for the purpose of updating feedback based on changes to the
+	 * {@link Request}.
+	 * <P>
+	 * Does nothing if the EditPolicy does not recognize the given request.
+	 * <P>
+	 * This method is declared on {@link EditPart#showTargetFeedback(Request) EditPart}, and is
+	 * redeclared here so that {@link EditPart} can delegate its implementation to each of its
+	 * EditPolicies.
+	 */
+	public void showTargetFeedback(Request request) {
+	}
 
-  /**
-   * Erases target feedback based on the given <code>{@link Request}</code>. Does nothing if the
-   * {@link EditPolicy} does not apply to the given {@link Request}.
-   * <P>
-   * This method is declared on {@link EditPart#eraseTargetFeedback(Request) EditPart}, and is
-   * redeclared here so that {@link EditPart} can delegate its implementation to each of its
-   * EditPolicies.
-   */
-  public void eraseTargetFeedback(Request request) {
-  }
+	/**
+	 * Erases target feedback based on the given <code>{@link Request}</code>. Does nothing if the
+	 * {@link EditPolicy} does not apply to the given {@link Request}.
+	 * <P>
+	 * This method is declared on {@link EditPart#eraseTargetFeedback(Request) EditPart}, and is
+	 * redeclared here so that {@link EditPart} can delegate its implementation to each of its
+	 * EditPolicies.
+	 */
+	public void eraseTargetFeedback(Request request) {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Events
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private EventTable m_eventTable;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Events
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private EventTable m_eventTable;
 
-  /**
-   * Adds a listener to the {@link EditPolicy}.
-   */
-  public void addEditPolicyListener(IEditPolicyListener listener) {
-    getEnsureEventTable().addListener(IEditPolicyListener.class, listener);
-  }
+	/**
+	 * Adds a listener to the {@link EditPolicy}.
+	 */
+	public void addEditPolicyListener(IEditPolicyListener listener) {
+		getEnsureEventTable().addListener(IEditPolicyListener.class, listener);
+	}
 
-  /**
-   * Removes the first occurrence of the specified listener from the list of listeners. Does nothing
-   * if the listener was not present.
-   */
-  public void removeEditPolicyListener(IEditPolicyListener listener) {
-    getEnsureEventTable().removeListener(IEditPolicyListener.class, listener);
-  }
+	/**
+	 * Removes the first occurrence of the specified listener from the list of listeners. Does nothing
+	 * if the listener was not present.
+	 */
+	public void removeEditPolicyListener(IEditPolicyListener listener) {
+		getEnsureEventTable().removeListener(IEditPolicyListener.class, listener);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Events support
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Return all registers listeners for given class or <code>null</code>.
-   */
-  public <L extends Object> List<L> getListeners(Class<L> listenerClass) {
-    return m_eventTable == null ? null : m_eventTable.getListeners(listenerClass);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Events support
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Return all registers listeners for given class or <code>null</code>.
+	 */
+	public <L extends Object> List<L> getListeners(Class<L> listenerClass) {
+		return m_eventTable == null ? null : m_eventTable.getListeners(listenerClass);
+	}
 
-  /**
-   * Access to <code>{@link EventTable}</code> use lazy creation mechanism.
-   */
-  protected EventTable getEnsureEventTable() {
-    if (m_eventTable == null) {
-      m_eventTable = new EventTable();
-    }
-    return m_eventTable;
-  }
+	/**
+	 * Access to <code>{@link EventTable}</code> use lazy creation mechanism.
+	 */
+	protected EventTable getEnsureEventTable() {
+		if (m_eventTable == null) {
+			m_eventTable = new EventTable();
+		}
+		return m_eventTable;
+	}
 
-  private void fireActivate() {
-    List<IEditPolicyListener> listeners = getListeners(IEditPolicyListener.class);
-    if (listeners != null && !listeners.isEmpty()) {
-      for (IEditPolicyListener listener : listeners) {
-        listener.activatePolicy(this);
-      }
-    }
-  }
+	private void fireActivate() {
+		List<IEditPolicyListener> listeners = getListeners(IEditPolicyListener.class);
+		if (listeners != null && !listeners.isEmpty()) {
+			for (IEditPolicyListener listener : listeners) {
+				listener.activatePolicy(this);
+			}
+		}
+	}
 
-  private void fireDeactivate() {
-    List<IEditPolicyListener> listeners = getListeners(IEditPolicyListener.class);
-    if (listeners != null && !listeners.isEmpty()) {
-      for (IEditPolicyListener listener : listeners) {
-        listener.deactivatePolicy(this);
-      }
-    }
-  }
+	private void fireDeactivate() {
+		List<IEditPolicyListener> listeners = getListeners(IEditPolicyListener.class);
+		if (listeners != null && !listeners.isEmpty()) {
+			for (IEditPolicyListener listener : listeners) {
+				listener.deactivatePolicy(this);
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Model Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Convenience method to return the host's model.
-   */
-  protected final Object getHostModel() {
-    return getHost().getModel();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Model Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Convenience method to return the host's model.
+	 */
+	protected final Object getHostModel() {
+		return getHost().getModel();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/policies/IEditPartDecorationListener.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/policies/IEditPartDecorationListener.java
index 5e98c016a..0b80c0dfa 100644
--- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/policies/IEditPartDecorationListener.java
+++ b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/policies/IEditPartDecorationListener.java
@@ -20,13 +20,13 @@
  * @coverage gef.core
  */
 public interface IEditPartDecorationListener {
-  /**
-   * Notifies that {@link EditPart} should be decorated.
-   */
-  void decorate(EditPart child);
+	/**
+	 * Notifies that {@link EditPart} should be decorated.
+	 */
+	void decorate(EditPart child);
 
-  /**
-   * Notifies that {@link EditPart} should be undecorated.
-   */
-  void undecorate(EditPart child);
+	/**
+	 * Notifies that {@link EditPart} should be undecorated.
+	 */
+	void undecorate(EditPart child);
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/policies/ILayoutRequestValidator.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/policies/ILayoutRequestValidator.java
index 4c41065f3..ec0e44047 100644
--- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/policies/ILayoutRequestValidator.java
+++ b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/policies/ILayoutRequestValidator.java
@@ -28,98 +28,98 @@
  * @coverage gef.core
  */
 public interface ILayoutRequestValidator {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Validation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if {@link Request#REQ_CREATE} {@link Request} is valid.
-   */
-  boolean validateCreateRequest(EditPart host, CreateRequest request);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Validation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if {@link Request#REQ_CREATE} {@link Request} is valid.
+	 */
+	boolean validateCreateRequest(EditPart host, CreateRequest request);
 
-  /**
-   * @return <code>true</code> if {@link Request#REQ_PASTE} {@link Request} is valid.
-   */
-  boolean validatePasteRequest(EditPart host, PasteRequest request);
+	/**
+	 * @return <code>true</code> if {@link Request#REQ_PASTE} {@link Request} is valid.
+	 */
+	boolean validatePasteRequest(EditPart host, PasteRequest request);
 
-  /**
-   * @return <code>true</code> if {@link Request#REQ_MOVE} {@link Request} is valid.
-   */
-  boolean validateMoveRequest(EditPart host, ChangeBoundsRequest request);
+	/**
+	 * @return <code>true</code> if {@link Request#REQ_MOVE} {@link Request} is valid.
+	 */
+	boolean validateMoveRequest(EditPart host, ChangeBoundsRequest request);
 
-  /**
-   * @return <code>true</code> if {@link Request#REQ_ADD} {@link Request} is valid.
-   */
-  boolean validateAddRequest(EditPart host, ChangeBoundsRequest request);
+	/**
+	 * @return <code>true</code> if {@link Request#REQ_ADD} {@link Request} is valid.
+	 */
+	boolean validateAddRequest(EditPart host, ChangeBoundsRequest request);
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // LITERALS
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Instance of validator allowing all requests.
-   */
-  ILayoutRequestValidator TRUE = new LayoutRequestValidatorStubTrue() {
-  };
-  /**
-   * Instance of validator disallowing all requests.
-   */
-  ILayoutRequestValidator FALSE = new LayoutRequestValidatorStubFalse() {
-  };
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// LITERALS
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Instance of validator allowing all requests.
+	 */
+	ILayoutRequestValidator TRUE = new LayoutRequestValidatorStubTrue() {
+	};
+	/**
+	 * Instance of validator disallowing all requests.
+	 */
+	ILayoutRequestValidator FALSE = new LayoutRequestValidatorStubFalse() {
+	};
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Default validator stubs
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Implementation of {@link ILayoutRequestValidator} that allows all requests.
-   */
-  public abstract class LayoutRequestValidatorStubTrue implements ILayoutRequestValidator {
-    @Override
-    public boolean validateCreateRequest(EditPart host, CreateRequest request) {
-      return true;
-    }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Default validator stubs
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Implementation of {@link ILayoutRequestValidator} that allows all requests.
+	 */
+	public abstract class LayoutRequestValidatorStubTrue implements ILayoutRequestValidator {
+		@Override
+		public boolean validateCreateRequest(EditPart host, CreateRequest request) {
+			return true;
+		}
 
-    @Override
-    public boolean validatePasteRequest(EditPart host, PasteRequest request) {
-      return true;
-    }
+		@Override
+		public boolean validatePasteRequest(EditPart host, PasteRequest request) {
+			return true;
+		}
 
-    @Override
-    public boolean validateMoveRequest(EditPart host, ChangeBoundsRequest request) {
-      return true;
-    }
+		@Override
+		public boolean validateMoveRequest(EditPart host, ChangeBoundsRequest request) {
+			return true;
+		}
 
-    @Override
-    public boolean validateAddRequest(EditPart host, ChangeBoundsRequest request) {
-      return true;
-    }
-  }
-  /**
-   * Implementation of {@link ILayoutRequestValidator} which denies all requests.
-   */
-  public abstract class LayoutRequestValidatorStubFalse implements ILayoutRequestValidator {
-    @Override
-    public boolean validateCreateRequest(EditPart host, CreateRequest request) {
-      return false;
-    }
+		@Override
+		public boolean validateAddRequest(EditPart host, ChangeBoundsRequest request) {
+			return true;
+		}
+	}
+	/**
+	 * Implementation of {@link ILayoutRequestValidator} which denies all requests.
+	 */
+	public abstract class LayoutRequestValidatorStubFalse implements ILayoutRequestValidator {
+		@Override
+		public boolean validateCreateRequest(EditPart host, CreateRequest request) {
+			return false;
+		}
 
-    @Override
-    public boolean validatePasteRequest(EditPart host, PasteRequest request) {
-      return false;
-    }
+		@Override
+		public boolean validatePasteRequest(EditPart host, PasteRequest request) {
+			return false;
+		}
 
-    @Override
-    public boolean validateMoveRequest(EditPart host, ChangeBoundsRequest request) {
-      return false;
-    }
+		@Override
+		public boolean validateMoveRequest(EditPart host, ChangeBoundsRequest request) {
+			return false;
+		}
 
-    @Override
-    public boolean validateAddRequest(EditPart host, ChangeBoundsRequest request) {
-      return false;
-    }
-  }
+		@Override
+		public boolean validateAddRequest(EditPart host, ChangeBoundsRequest request) {
+			return false;
+		}
+	}
 }
diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/policies/IRefreshableEditPolicy.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/policies/IRefreshableEditPolicy.java
index 56b01f0bf..bd3640233 100644
--- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/policies/IRefreshableEditPolicy.java
+++ b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/policies/IRefreshableEditPolicy.java
@@ -20,5 +20,5 @@
  * @coverage gef.core
  */
 public interface IRefreshableEditPolicy {
-  void refreshEditPolicy();
+	void refreshEditPolicy();
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/requests/AbstractCreateRequest.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/requests/AbstractCreateRequest.java
index 5bb04fbde..ad6132067 100644
--- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/requests/AbstractCreateRequest.java
+++ b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/requests/AbstractCreateRequest.java
@@ -17,53 +17,53 @@
  * @coverage gef.core
  */
 public abstract class AbstractCreateRequest extends LocationRequest implements IDropRequest {
-  private Dimension m_size;
+	private Dimension m_size;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractCreateRequest() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractCreateRequest() {
+	}
 
-  public AbstractCreateRequest(Object type) {
-    super(type);
-  }
+	public AbstractCreateRequest(Object type) {
+		super(type);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Returns the size of the object to be created.
-   */
-  public Dimension getSize() {
-    return m_size;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Returns the size of the object to be created.
+	 */
+	public Dimension getSize() {
+		return m_size;
+	}
 
-  /**
-   * Sets the size of the new object.
-   */
-  public void setSize(Dimension size) {
-    m_size = size;
-  }
+	/**
+	 * Sets the size of the new object.
+	 */
+	public void setSize(Dimension size) {
+		m_size = size;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // State
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Copies state from given {@link Request} into this one.
-   */
-  public void copyStateFrom(Request _source) {
-    if (_source instanceof AbstractCreateRequest) {
-      AbstractCreateRequest source = (AbstractCreateRequest) _source;
-      setLocation(source.getLocation());
-      setSize(source.getSize());
-      setStateMask(source.getStateMask());
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// State
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Copies state from given {@link Request} into this one.
+	 */
+	public void copyStateFrom(Request _source) {
+		if (_source instanceof AbstractCreateRequest) {
+			AbstractCreateRequest source = (AbstractCreateRequest) _source;
+			setLocation(source.getLocation());
+			setSize(source.getSize());
+			setStateMask(source.getStateMask());
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/requests/ChangeBoundsRequest.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/requests/ChangeBoundsRequest.java
index 85d958296..885c29db6 100644
--- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/requests/ChangeBoundsRequest.java
+++ b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/requests/ChangeBoundsRequest.java
@@ -23,136 +23,136 @@
  * @coverage gef.core
  */
 public class ChangeBoundsRequest extends GroupRequest implements IDropRequest {
-  private Point m_mouseLocation;
-  private Point m_moveDelta = new Point();
-  private Dimension m_resizeDelta = new Dimension();
-  private int m_resizeDirection;
+	private Point m_mouseLocation;
+	private Point m_moveDelta = new Point();
+	private Dimension m_resizeDelta = new Dimension();
+	private int m_resizeDirection;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Constructs an empty {@link ChangeBoundsRequest}.
-   */
-  public ChangeBoundsRequest() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Constructs an empty {@link ChangeBoundsRequest}.
+	 */
+	public ChangeBoundsRequest() {
+	}
 
-  /**
-   * Constructs a {@link ChangeBoundsRequest} with the specified <i>type</i>.
-   */
-  public ChangeBoundsRequest(Object type) {
-    super(type);
-  }
+	/**
+	 * Constructs a {@link ChangeBoundsRequest} with the specified <i>type</i>.
+	 */
+	public ChangeBoundsRequest(Object type) {
+		super(type);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Returns the location of the mouse pointer.
-   */
-  @Override
-  public Point getLocation() {
-    return m_mouseLocation;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Returns the location of the mouse pointer.
+	 */
+	@Override
+	public Point getLocation() {
+		return m_mouseLocation;
+	}
 
-  /**
-   * Sets the location of the mouse pointer.
-   */
-  public void setLocation(Point location) {
-    m_mouseLocation = location;
-  }
+	/**
+	 * Sets the location of the mouse pointer.
+	 */
+	public void setLocation(Point location) {
+		m_mouseLocation = location;
+	}
 
-  /**
-   * Returns a {@link Point} representing the distance the {@link EditPart} has moved.
-   */
-  public Point getMoveDelta() {
-    return m_moveDelta;
-  }
+	/**
+	 * Returns a {@link Point} representing the distance the {@link EditPart} has moved.
+	 */
+	public Point getMoveDelta() {
+		return m_moveDelta;
+	}
 
-  /**
-   * Sets the move delta.
-   */
-  public void setMoveDelta(Point moveDelta) {
-    m_moveDelta = moveDelta;
-  }
+	/**
+	 * Sets the move delta.
+	 */
+	public void setMoveDelta(Point moveDelta) {
+		m_moveDelta = moveDelta;
+	}
 
-  /**
-   * Returns a {@link Dimension} representing how much the {@link EditPart} has been resized.
-   */
-  public Dimension getSizeDelta() {
-    return m_resizeDelta;
-  }
+	/**
+	 * Returns a {@link Dimension} representing how much the {@link EditPart} has been resized.
+	 */
+	public Dimension getSizeDelta() {
+		return m_resizeDelta;
+	}
 
-  /**
-   * Sets the size delta.
-   */
-  public void setSizeDelta(Dimension sizeDelta) {
-    m_resizeDelta = sizeDelta;
-  }
+	/**
+	 * Sets the size delta.
+	 */
+	public void setSizeDelta(Dimension sizeDelta) {
+		m_resizeDelta = sizeDelta;
+	}
 
-  /**
-   * Returns the direction the figure is being resized. Possible values are
-   * <ul>
-   * <li>{@link org.eclipse.wb.draw2d.IPositionConstants#EAST}
-   * <li>{@link org.eclipse.wb.draw2d.IPositionConstants#WEST}
-   * <li>{@link org.eclipse.wb.draw2d.IPositionConstants#NORTH}
-   * <li>{@link org.eclipse.wb.draw2d.IPositionConstants#SOUTH}
-   * <li>{@link org.eclipse.wb.draw2d.IPositionConstants#NORTH_EAST}
-   * <li>{@link org.eclipse.wb.draw2d.IPositionConstants#NORTH_WEST}
-   * <li>{@link org.eclipse.wb.draw2d.IPositionConstants#SOUTH_EAST}
-   * <li>{@link org.eclipse.wb.draw2d.IPositionConstants#SOUTH_WEST}
-   * </ul>
-   */
-  public int getResizeDirection() {
-    return m_resizeDirection;
-  }
+	/**
+	 * Returns the direction the figure is being resized. Possible values are
+	 * <ul>
+	 * <li>{@link org.eclipse.wb.draw2d.IPositionConstants#EAST}
+	 * <li>{@link org.eclipse.wb.draw2d.IPositionConstants#WEST}
+	 * <li>{@link org.eclipse.wb.draw2d.IPositionConstants#NORTH}
+	 * <li>{@link org.eclipse.wb.draw2d.IPositionConstants#SOUTH}
+	 * <li>{@link org.eclipse.wb.draw2d.IPositionConstants#NORTH_EAST}
+	 * <li>{@link org.eclipse.wb.draw2d.IPositionConstants#NORTH_WEST}
+	 * <li>{@link org.eclipse.wb.draw2d.IPositionConstants#SOUTH_EAST}
+	 * <li>{@link org.eclipse.wb.draw2d.IPositionConstants#SOUTH_WEST}
+	 * </ul>
+	 */
+	public int getResizeDirection() {
+		return m_resizeDirection;
+	}
 
-  /**
-   * Sets the direction the figure is being resized.
-   *
-   * @see #getResizeDirection()
-   */
-  public void setResizeDirection(int direction) {
-    m_resizeDirection = direction;
-  }
+	/**
+	 * Sets the direction the figure is being resized.
+	 *
+	 * @see #getResizeDirection()
+	 */
+	public void setResizeDirection(int direction) {
+		m_resizeDirection = direction;
+	}
 
-  /**
-   * Transforms a copy of the passed in rectangle to account for the move and/or resize deltas and
-   * returns this copy.
-   */
-  public Rectangle getTransformedRectangle(Rectangle rectangle) {
-    Rectangle result = rectangle.getCopy();
-    result.performTranslate(m_moveDelta);
-    result.resize(m_resizeDelta);
-    return result;
-  }
+	/**
+	 * Transforms a copy of the passed in rectangle to account for the move and/or resize deltas and
+	 * returns this copy.
+	 */
+	public Rectangle getTransformedRectangle(Rectangle rectangle) {
+		Rectangle result = rectangle.getCopy();
+		result.performTranslate(m_moveDelta);
+		result.resize(m_resizeDelta);
+		return result;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    StringBuffer buffer = new StringBuffer("ChangeBoundsRequest(type=");
-    buffer.append(getType());
-    buffer.append(", editParts=");
-    buffer.append(getEditParts());
-    buffer.append(", stateMask=");
-    buffer.append(getStateMask());
-    buffer.append(", location=");
-    buffer.append(m_mouseLocation);
-    buffer.append(", resizeDelta=");
-    buffer.append(m_resizeDelta);
-    buffer.append(", moveDelta=");
-    buffer.append(m_moveDelta);
-    buffer.append(", direction=");
-    buffer.append(m_resizeDirection);
-    buffer.append(")");
-    return buffer.toString();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		StringBuffer buffer = new StringBuffer("ChangeBoundsRequest(type=");
+		buffer.append(getType());
+		buffer.append(", editParts=");
+		buffer.append(getEditParts());
+		buffer.append(", stateMask=");
+		buffer.append(getStateMask());
+		buffer.append(", location=");
+		buffer.append(m_mouseLocation);
+		buffer.append(", resizeDelta=");
+		buffer.append(m_resizeDelta);
+		buffer.append(", moveDelta=");
+		buffer.append(m_moveDelta);
+		buffer.append(", direction=");
+		buffer.append(m_resizeDirection);
+		buffer.append(")");
+		return buffer.toString();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/requests/CreateRequest.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/requests/CreateRequest.java
index cdc0272f2..4818bfb5d 100644
--- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/requests/CreateRequest.java
+++ b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/requests/CreateRequest.java
@@ -17,77 +17,77 @@
  * @coverage gef.core
  */
 public class CreateRequest extends AbstractCreateRequest {
-  private final ICreationFactory m_factory;
-  private Object m_newObject;
-  private Object m_selectObject;
+	private final ICreationFactory m_factory;
+	private Object m_newObject;
+	private Object m_selectObject;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Constructs a {@link CreateRequest} with the specified <i>type</i> and <i>factory</i>.
-   */
-  public CreateRequest(ICreationFactory factory) {
-    super(Request.REQ_CREATE);
-    m_factory = factory;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Constructs a {@link CreateRequest} with the specified <i>type</i> and <i>factory</i>.
+	 */
+	public CreateRequest(ICreationFactory factory) {
+		super(Request.REQ_CREATE);
+		m_factory = factory;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Gets the new object from the factory and returns that object.
-   */
-  public Object getNewObject() {
-    if (m_newObject == null) {
-      m_newObject = m_factory.getNewObject();
-      m_selectObject = m_newObject;
-    }
-    return m_newObject;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Gets the new object from the factory and returns that object.
+	 */
+	public Object getNewObject() {
+		if (m_newObject == null) {
+			m_newObject = m_factory.getNewObject();
+			m_selectObject = m_newObject;
+		}
+		return m_newObject;
+	}
 
-  /**
-   * @return the object that should be selected after finishing create operation. By default return
-   *         same as {@link #getNewObject()}.
-   */
-  public Object getSelectObject() {
-    return m_selectObject;
-  }
+	/**
+	 * @return the object that should be selected after finishing create operation. By default return
+	 *         same as {@link #getNewObject()}.
+	 */
+	public Object getSelectObject() {
+		return m_selectObject;
+	}
 
-  /**
-   * Sets the object that should be selected after finishing create operation.
-   */
-  public void setSelectObject(Object object) {
-    m_selectObject = object;
-  }
+	/**
+	 * Sets the object that should be selected after finishing create operation.
+	 */
+	public void setSelectObject(Object object) {
+		m_selectObject = object;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    StringBuffer buffer = new StringBuffer("CreateRequest(type=");
-    buffer.append(getType());
-    buffer.append(", stateMask=");
-    buffer.append(getStateMask());
-    buffer.append(", location=");
-    buffer.append(getLocation());
-    buffer.append(", size=");
-    buffer.append(getSize());
-    buffer.append(", factory=");
-    buffer.append(m_factory);
-    if (m_factory != null) {
-      buffer.append("[object=");
-      buffer.append(safeToString(m_factory.getNewObject()));
-      buffer.append("]");
-    }
-    buffer.append(")");
-    return buffer.toString();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		StringBuffer buffer = new StringBuffer("CreateRequest(type=");
+		buffer.append(getType());
+		buffer.append(", stateMask=");
+		buffer.append(getStateMask());
+		buffer.append(", location=");
+		buffer.append(getLocation());
+		buffer.append(", size=");
+		buffer.append(getSize());
+		buffer.append(", factory=");
+		buffer.append(m_factory);
+		if (m_factory != null) {
+			buffer.append("[object=");
+			buffer.append(safeToString(m_factory.getNewObject()));
+			buffer.append("]");
+		}
+		buffer.append(")");
+		return buffer.toString();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/requests/DragPermissionRequest.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/requests/DragPermissionRequest.java
index b35009e18..dbb8320b4 100644
--- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/requests/DragPermissionRequest.java
+++ b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/requests/DragPermissionRequest.java
@@ -19,49 +19,49 @@
  * @coverage gef.core
  */
 public final class DragPermissionRequest extends Request {
-  private boolean m_canMove = true;
-  private boolean m_canReparent = true;
+	private boolean m_canMove = true;
+	private boolean m_canReparent = true;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Permissions
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if move can be performed.
-   */
-  public boolean canMove() {
-    return m_canMove;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Permissions
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if move can be performed.
+	 */
+	public boolean canMove() {
+		return m_canMove;
+	}
 
-  /**
-   * Enable/disable move.
-   */
-  public void setMove(boolean canMove) {
-    m_canMove &= canMove;
-  }
+	/**
+	 * Enable/disable move.
+	 */
+	public void setMove(boolean canMove) {
+		m_canMove &= canMove;
+	}
 
-  /**
-   * @return <code>true</code> if reparenting can be performed.
-   */
-  public boolean canReparent() {
-    return m_canReparent;
-  }
+	/**
+	 * @return <code>true</code> if reparenting can be performed.
+	 */
+	public boolean canReparent() {
+		return m_canReparent;
+	}
 
-  /**
-   * Enable/disable reparent.
-   */
-  public void setReparent(boolean canReparent) {
-    m_canReparent &= canReparent;
-  }
+	/**
+	 * Enable/disable reparent.
+	 */
+	public void setReparent(boolean canReparent) {
+		m_canReparent &= canReparent;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    return "DragPermissionRequest(move=" + m_canMove + ", reparent=" + m_canReparent + ")";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		return "DragPermissionRequest(move=" + m_canMove + ", reparent=" + m_canReparent + ")";
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/requests/GroupRequest.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/requests/GroupRequest.java
index c606edf4b..ef8942ba5 100644
--- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/requests/GroupRequest.java
+++ b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/requests/GroupRequest.java
@@ -23,52 +23,52 @@
  * @coverage gef.core
  */
 public class GroupRequest extends Request {
-  private List<EditPart> m_editParts;
+	private List<EditPart> m_editParts;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Constructs an empty {@link GroupRequest}.
-   */
-  public GroupRequest() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Constructs an empty {@link GroupRequest}.
+	 */
+	public GroupRequest() {
+	}
 
-  /**
-   * Constructs a {@link GroupRequest} with the specified <i>type</i>.
-   */
-  public GroupRequest(Object type) {
-    super(type);
-  }
+	/**
+	 * Constructs a {@link GroupRequest} with the specified <i>type</i>.
+	 */
+	public GroupRequest(Object type) {
+		super(type);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Returns all {@link EditPart}s making this {@link Request}.
-   */
-  public List<EditPart> getEditParts() {
-    return m_editParts;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Returns all {@link EditPart}s making this {@link Request}.
+	 */
+	public List<EditPart> getEditParts() {
+		return m_editParts;
+	}
 
-  /**
-   * Sets the {@link EditPart}s making this {@link Request}.
-   */
-  public void setEditParts(List<EditPart> editParts) {
-    m_editParts = editParts;
-  }
+	/**
+	 * Sets the {@link EditPart}s making this {@link Request}.
+	 */
+	public void setEditParts(List<EditPart> editParts) {
+		m_editParts = editParts;
+	}
 
-  /**
-   * Add {@link EditPart} to this {@link Request}.
-   */
-  public void addEditPart(EditPart editPart) {
-    if (m_editParts == null) {
-      m_editParts = Lists.newArrayList();
-    }
-    m_editParts.add(editPart);
-  }
+	/**
+	 * Add {@link EditPart} to this {@link Request}.
+	 */
+	public void addEditPart(EditPart editPart) {
+		if (m_editParts == null) {
+			m_editParts = Lists.newArrayList();
+		}
+		m_editParts.add(editPart);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/requests/ICreationFactory.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/requests/ICreationFactory.java
index 8d5903a57..05d718bd0 100644
--- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/requests/ICreationFactory.java
+++ b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/requests/ICreationFactory.java
@@ -19,17 +19,17 @@
  * @coverage gef.core
  */
 public interface ICreationFactory {
-  /**
-   * Activates this factory, during {@link CreationTool} activation (including reloading). This
-   * allows factory do any operations that are too expensive to perform them in
-   * {@link #getNewObject()}.
-   *
-   * If any exception thrown, then {@link CreationTool} will be unloaded.
-   */
-  void activate() throws Exception;
+	/**
+	 * Activates this factory, during {@link CreationTool} activation (including reloading). This
+	 * allows factory do any operations that are too expensive to perform them in
+	 * {@link #getNewObject()}.
+	 *
+	 * If any exception thrown, then {@link CreationTool} will be unloaded.
+	 */
+	void activate() throws Exception;
 
-  /**
-   * @return the new object.
-   */
-  Object getNewObject();
+	/**
+	 * @return the new object.
+	 */
+	Object getNewObject();
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/requests/IDropRequest.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/requests/IDropRequest.java
index 3beab09ed..6bba2e042 100644
--- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/requests/IDropRequest.java
+++ b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/requests/IDropRequest.java
@@ -19,8 +19,8 @@
  * @coverage gef.core
  */
 public interface IDropRequest {
-  /**
-   * Returns the current mouse location.
-   */
-  Point getLocation();
+	/**
+	 * Returns the current mouse location.
+	 */
+	Point getLocation();
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/requests/KeyRequest.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/requests/KeyRequest.java
index 2d68a424b..53851b5e6 100644
--- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/requests/KeyRequest.java
+++ b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/requests/KeyRequest.java
@@ -19,72 +19,72 @@
  * @coverage gef.core
  */
 public class KeyRequest extends Request {
-  private final boolean m_pressed;
-  private final char m_character;
-  private final int m_keyCode;
+	private final boolean m_pressed;
+	private final char m_character;
+	private final int m_keyCode;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public KeyRequest(boolean pressed, KeyEvent event) {
-    super(REQ_KEY_EVENT);
-    m_pressed = pressed;
-    m_character = event.character;
-    m_keyCode = event.keyCode;
-    setStateMask(event.stateMask);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public KeyRequest(boolean pressed, KeyEvent event) {
+		super(REQ_KEY_EVENT);
+		m_pressed = pressed;
+		m_character = event.character;
+		m_keyCode = event.keyCode;
+		setStateMask(event.stateMask);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if this key pressed event.
-   */
-  public boolean isPressed() {
-    return m_pressed;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if this key pressed event.
+	 */
+	public boolean isPressed() {
+		return m_pressed;
+	}
 
-  /**
-   * @return the character represented by the key that was typed.
-   */
-  public char getCharacter() {
-    return m_character;
-  }
+	/**
+	 * @return the character represented by the key that was typed.
+	 */
+	public char getCharacter() {
+		return m_character;
+	}
 
-  /**
-   * @return the key code of the key that was typed, as defined by the key code constants in class
-   *         <code>SWT</code>.
-   */
-  public int getKeyCode() {
-    return m_keyCode;
-  }
+	/**
+	 * @return the key code of the key that was typed, as defined by the key code constants in class
+	 *         <code>SWT</code>.
+	 */
+	public int getKeyCode() {
+		return m_keyCode;
+	}
 
-  /**
-   * @return the state of the keyboard modifier keys at the time the event was generated, as defined
-   *         by the key code constants in class <code>SWT</code>.
-   */
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    StringBuffer buffer = new StringBuffer("KeyRequest(type=");
-    buffer.append(getType());
-    buffer.append(", pressed=");
-    buffer.append(m_pressed);
-    buffer.append(", character=");
-    buffer.append(m_character);
-    buffer.append(", keyCode=");
-    buffer.append(m_keyCode);
-    buffer.append(", stateMask=");
-    buffer.append(getStateMask());
-    buffer.append(")");
-    return buffer.toString();
-  }
+	/**
+	 * @return the state of the keyboard modifier keys at the time the event was generated, as defined
+	 *         by the key code constants in class <code>SWT</code>.
+	 */
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		StringBuffer buffer = new StringBuffer("KeyRequest(type=");
+		buffer.append(getType());
+		buffer.append(", pressed=");
+		buffer.append(m_pressed);
+		buffer.append(", character=");
+		buffer.append(m_character);
+		buffer.append(", keyCode=");
+		buffer.append(m_keyCode);
+		buffer.append(", stateMask=");
+		buffer.append(getStateMask());
+		buffer.append(")");
+		return buffer.toString();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/requests/LocationRequest.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/requests/LocationRequest.java
index c62d11c1f..1ea1cdb45 100644
--- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/requests/LocationRequest.java
+++ b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/requests/LocationRequest.java
@@ -19,42 +19,42 @@
  * @coverage gef.core
  */
 public class LocationRequest extends Request {
-  private Point m_location;
+	private Point m_location;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Constructs an empty {@link LocationRequest}.
-   */
-  public LocationRequest() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Constructs an empty {@link LocationRequest}.
+	 */
+	public LocationRequest() {
+	}
 
-  /**
-   * Constructs a {@link LocationRequest} with the specified <i>type</i>.
-   */
-  public LocationRequest(Object type) {
-    super(type);
-  }
+	/**
+	 * Constructs a {@link LocationRequest} with the specified <i>type</i>.
+	 */
+	public LocationRequest(Object type) {
+		super(type);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Returns the current location.
-   */
-  public Point getLocation() {
-    return m_location;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Returns the current location.
+	 */
+	public Point getLocation() {
+		return m_location;
+	}
 
-  /**
-   * Sets the current location.
-   */
-  public void setLocation(Point location) {
-    m_location = location;
-  }
+	/**
+	 * Sets the current location.
+	 */
+	public void setLocation(Point location) {
+		m_location = location;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/requests/PasteRequest.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/requests/PasteRequest.java
index dc14f5a47..0b87f4d6a 100644
--- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/requests/PasteRequest.java
+++ b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/requests/PasteRequest.java
@@ -20,79 +20,79 @@
  * @coverage gef.core
  */
 public class PasteRequest extends AbstractCreateRequest {
-  private final Object m_memento;
+	private final Object m_memento;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public PasteRequest(Object memento) {
-    super(Request.REQ_PASTE);
-    m_memento = memento;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public PasteRequest(Object memento) {
+		super(Request.REQ_PASTE);
+		m_memento = memento;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Returns object with paste info.
-   */
-  public Object getMemento() {
-    return m_memento;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Returns object with paste info.
+	 */
+	public Object getMemento() {
+		return m_memento;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Created objects
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private List<?> m_objects = Collections.emptyList();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Created objects
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private List<?> m_objects = Collections.emptyList();
 
-  /**
-   * @return the {@link List} of pasted objects.
-   */
-  public List<?> getObjects() {
-    return m_objects;
-  }
+	/**
+	 * @return the {@link List} of pasted objects.
+	 */
+	public List<?> getObjects() {
+		return m_objects;
+	}
 
-  /**
-   * Sets the {@link List} of pasted objects, these objects will be selected after paste.<br>
-   * It is expected that handler for {@link PasteRequest} will invoke this method.
-   */
-  public void setObjects(List<?> objects) {
-    m_objects = objects;
-  }
+	/**
+	 * Sets the {@link List} of pasted objects, these objects will be selected after paste.<br>
+	 * It is expected that handler for {@link PasteRequest} will invoke this method.
+	 */
+	public void setObjects(List<?> objects) {
+		m_objects = objects;
+	}
 
-  /**
-   * Shortcut for {@link #setObjects(List)} for single object.
-   */
-  public void setObject(Object object) {
-    List<Object> objects = Lists.newArrayList();
-    objects.add(object);
-    setObjects(objects);
-  }
+	/**
+	 * Shortcut for {@link #setObjects(List)} for single object.
+	 */
+	public void setObject(Object object) {
+		List<Object> objects = Lists.newArrayList();
+		objects.add(object);
+		setObjects(objects);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    StringBuffer buffer = new StringBuffer("PasteRequest(type=");
-    buffer.append(getType());
-    buffer.append(", stateMask=");
-    buffer.append(getStateMask());
-    buffer.append(", location=");
-    buffer.append(getLocation());
-    buffer.append(", size=");
-    buffer.append(getSize());
-    buffer.append(", memento=");
-    buffer.append(m_memento);
-    buffer.append(")");
-    return buffer.toString();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		StringBuffer buffer = new StringBuffer("PasteRequest(type=");
+		buffer.append(getType());
+		buffer.append(", stateMask=");
+		buffer.append(getStateMask());
+		buffer.append(", location=");
+		buffer.append(getLocation());
+		buffer.append(", size=");
+		buffer.append(getSize());
+		buffer.append(", memento=");
+		buffer.append(m_memento);
+		buffer.append(")");
+		return buffer.toString();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/requests/Request.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/requests/Request.java
index c39e9f102..5c3aaa689 100644
--- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/requests/Request.java
+++ b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/requests/Request.java
@@ -26,260 +26,260 @@
  * @coverage gef.core
  */
 public class Request {
-  /**
-   * Indicates that the user has double-clicked on the receiver. "Open" means different things for
-   * different applications. Sometimes it means open a popup dialog of properties, or the
-   * Workbench's properties view. Sometimes it means open a sub-diagram.
-   */
-  public static final String REQ_OPEN = "open";
-  /**
-   * Indicates selection Requests.
-   */
-  public static final String REQ_SELECTION = "selection";
-  /**
-   * Indicates that the receiver of the request is being moved.
-   */
-  public static final String REQ_MOVE = "move";
-  /**
-   * Constant used to indicate that a group of existing children are being added to the receiver of
-   * the Request.
-   */
-  public static final String REQ_ADD = "add children";
-  /**
-   * Indicates that a group of children are being removed from the receiver of the Request.
-   */
-  public static final String REQ_ORPHAN = "orphan children"; //$NON-NLS-1$
-  /**
-   * Indicates that an object is to be created by the receiver of the Request.
-   */
-  public static final String REQ_CREATE = "create child";
-  /**
-   * Constant used to indicate that the receiver of the Request is being deleted.
-   */
-  public static final String REQ_DELETE = "delete";
-  /**
-   * Indicates that an object is to be pasted by the receiver of the Request.
-   */
-  public static final String REQ_PASTE = "paste";
-  /**
-   * Constant used to indicate key event request.
-   */
-  public static final String REQ_KEY_EVENT = "key event";
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Constructs an empty {@link Request}.
-   */
-  public Request() {
-  }
-
-  /**
-   * Constructs a {@link Request} with the specified <i>type</i>.
-   */
-  public Request(Object type) {
-    setType(type);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Type
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Object m_type;
-
-  /**
-   * Returns the type of the request. The type is often used as a quick way to filter recognized
-   * Requests. Once the type is identified, the Request is usually cast to a more specific subclass
-   * containing additional data.
-   */
-  public final Object getType() {
-    return m_type;
-  }
-
-  /**
-   * Sets the type of the Request.
-   */
-  public final void setType(Object type) {
-    m_type = type;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Target
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private EditPart m_target;
-
-  /**
-   * Returns the new target that caused sending this {@link Request}.<br>
-   * It may be useful to know in old target why it receives "erase target feedback" notification.
-   *
-   * @return the new target {@link EditPart}.
-   */
-  public EditPart getTarget() {
-    return m_target;
-  }
-
-  /**
-   * Sets the new target {@link EditPart}.
-   */
-  public void setTarget(EditPart target) {
-    m_target = target;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // State mask
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private int m_stateMask;
-
-  /**
-   * Returns <code>true</code> if the ALT key is currently pressed.
-   */
-  public final boolean isAltKeyPressed() {
-    return (m_stateMask & SWT.ALT) != 0;
-  }
-
-  /**
-   * Returns <code>true</code> if the CTRL key is currently pressed.
-   */
-  public final boolean isControlKeyPressed() {
-    return (m_stateMask & SWT.CONTROL) != 0;
-  }
-
-  /**
-   * Returns <code>true</code> if the SHIFT key is currently pressed.
-   */
-  public final boolean isShiftKeyPressed() {
-    return (m_stateMask & SWT.SHIFT) != 0;
-  }
-
-  /**
-   * Returns <code>true</code> if the left mouse button is pressed.
-   */
-  public final boolean isLeftMouseButtonPressed() {
-    return (m_stateMask & SWT.BUTTON1) != 0;
-  }
-
-  /**
-   * Returns <code>true</code> if the right mouse button is pressed.
-   */
-  public final boolean isRightMouseButtonPressed() {
-    return (m_stateMask & SWT.BUTTON3) != 0;
-  }
-
-  /**
-   * Returns <code>true</code> if any mouse button is currently pressed.
-   */
-  public final boolean isAnyMouseButtonPressed() {
-    return (m_stateMask & (SWT.BUTTON1 | SWT.BUTTON2 | SWT.BUTTON3)) != 0;
-  }
-
-  /**
-   * Returns statemask for this request.
-   */
-  public final int getStateMask() {
-    return m_stateMask;
-  }
-
-  /**
-   * Sets statemask for this request.
-   */
-  public final void setStateMask(int stateMask) {
-    m_stateMask = stateMask;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    return "Request(type=" + m_type + ", stateMask=" + m_stateMask + ")";
-  }
-
-  /**
-   * @return the string presentation of given {@link Object} or "<exception>" if any exception
-   *         happened.
-   */
-  protected static String safeToString(Object o) {
-    try {
-      return o == null ? null : o.toString();
-    } catch (Throwable e) {
-      return "<exception>";
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Erase feedback flag
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private boolean m_eraseFeedback;
-
-  /**
-   * @return <code>true</code> if this {@link Request} is sent as part of erasing feedback. So, we
-   *         may skip some checks, for example for mouse location.
-   */
-  public boolean isEraseFeedback() {
-    return m_eraseFeedback;
-  }
-
-  public void setEraseFeedback(boolean eraseFeedback) {
-    m_eraseFeedback = eraseFeedback;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // DND Feedback
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private int m_dndFeedback;
-
-  /**
-   * @return additional DND feedback flags.
-   */
-  public int getDNDFeedback() {
-    return m_dndFeedback;
-  }
-
-  /**
-   * Sets additional DND feedback flags.
-   */
-  public void setDNDFeedback(int dndFeedback) {
-    m_dndFeedback = dndFeedback;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Arbitrary values map
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Map<Object, Object> m_arbitraryMap;
-
-  /**
-   * Associates the given value with the given key.
-   */
-  public final void putArbitraryValue(Object key, Object value) {
-    if (m_arbitraryMap == null) {
-      m_arbitraryMap = new HashMap<>();
-    }
-    m_arbitraryMap.put(key, value);
-  }
-
-  /**
-   * @return the value to which the given key is mapped, or <code>null</code>.
-   */
-  public final Object getArbitraryValue(Object key) {
-    if (m_arbitraryMap != null) {
-      return m_arbitraryMap.get(key);
-    }
-    return null;
-  }
+	/**
+	 * Indicates that the user has double-clicked on the receiver. "Open" means different things for
+	 * different applications. Sometimes it means open a popup dialog of properties, or the
+	 * Workbench's properties view. Sometimes it means open a sub-diagram.
+	 */
+	public static final String REQ_OPEN = "open";
+	/**
+	 * Indicates selection Requests.
+	 */
+	public static final String REQ_SELECTION = "selection";
+	/**
+	 * Indicates that the receiver of the request is being moved.
+	 */
+	public static final String REQ_MOVE = "move";
+	/**
+	 * Constant used to indicate that a group of existing children are being added to the receiver of
+	 * the Request.
+	 */
+	public static final String REQ_ADD = "add children";
+	/**
+	 * Indicates that a group of children are being removed from the receiver of the Request.
+	 */
+	public static final String REQ_ORPHAN = "orphan children"; //$NON-NLS-1$
+	/**
+	 * Indicates that an object is to be created by the receiver of the Request.
+	 */
+	public static final String REQ_CREATE = "create child";
+	/**
+	 * Constant used to indicate that the receiver of the Request is being deleted.
+	 */
+	public static final String REQ_DELETE = "delete";
+	/**
+	 * Indicates that an object is to be pasted by the receiver of the Request.
+	 */
+	public static final String REQ_PASTE = "paste";
+	/**
+	 * Constant used to indicate key event request.
+	 */
+	public static final String REQ_KEY_EVENT = "key event";
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Constructs an empty {@link Request}.
+	 */
+	public Request() {
+	}
+
+	/**
+	 * Constructs a {@link Request} with the specified <i>type</i>.
+	 */
+	public Request(Object type) {
+		setType(type);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Type
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Object m_type;
+
+	/**
+	 * Returns the type of the request. The type is often used as a quick way to filter recognized
+	 * Requests. Once the type is identified, the Request is usually cast to a more specific subclass
+	 * containing additional data.
+	 */
+	public final Object getType() {
+		return m_type;
+	}
+
+	/**
+	 * Sets the type of the Request.
+	 */
+	public final void setType(Object type) {
+		m_type = type;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Target
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private EditPart m_target;
+
+	/**
+	 * Returns the new target that caused sending this {@link Request}.<br>
+	 * It may be useful to know in old target why it receives "erase target feedback" notification.
+	 *
+	 * @return the new target {@link EditPart}.
+	 */
+	public EditPart getTarget() {
+		return m_target;
+	}
+
+	/**
+	 * Sets the new target {@link EditPart}.
+	 */
+	public void setTarget(EditPart target) {
+		m_target = target;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// State mask
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private int m_stateMask;
+
+	/**
+	 * Returns <code>true</code> if the ALT key is currently pressed.
+	 */
+	public final boolean isAltKeyPressed() {
+		return (m_stateMask & SWT.ALT) != 0;
+	}
+
+	/**
+	 * Returns <code>true</code> if the CTRL key is currently pressed.
+	 */
+	public final boolean isControlKeyPressed() {
+		return (m_stateMask & SWT.CONTROL) != 0;
+	}
+
+	/**
+	 * Returns <code>true</code> if the SHIFT key is currently pressed.
+	 */
+	public final boolean isShiftKeyPressed() {
+		return (m_stateMask & SWT.SHIFT) != 0;
+	}
+
+	/**
+	 * Returns <code>true</code> if the left mouse button is pressed.
+	 */
+	public final boolean isLeftMouseButtonPressed() {
+		return (m_stateMask & SWT.BUTTON1) != 0;
+	}
+
+	/**
+	 * Returns <code>true</code> if the right mouse button is pressed.
+	 */
+	public final boolean isRightMouseButtonPressed() {
+		return (m_stateMask & SWT.BUTTON3) != 0;
+	}
+
+	/**
+	 * Returns <code>true</code> if any mouse button is currently pressed.
+	 */
+	public final boolean isAnyMouseButtonPressed() {
+		return (m_stateMask & (SWT.BUTTON1 | SWT.BUTTON2 | SWT.BUTTON3)) != 0;
+	}
+
+	/**
+	 * Returns statemask for this request.
+	 */
+	public final int getStateMask() {
+		return m_stateMask;
+	}
+
+	/**
+	 * Sets statemask for this request.
+	 */
+	public final void setStateMask(int stateMask) {
+		m_stateMask = stateMask;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		return "Request(type=" + m_type + ", stateMask=" + m_stateMask + ")";
+	}
+
+	/**
+	 * @return the string presentation of given {@link Object} or "<exception>" if any exception
+	 *         happened.
+	 */
+	protected static String safeToString(Object o) {
+		try {
+			return o == null ? null : o.toString();
+		} catch (Throwable e) {
+			return "<exception>";
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Erase feedback flag
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private boolean m_eraseFeedback;
+
+	/**
+	 * @return <code>true</code> if this {@link Request} is sent as part of erasing feedback. So, we
+	 *         may skip some checks, for example for mouse location.
+	 */
+	public boolean isEraseFeedback() {
+		return m_eraseFeedback;
+	}
+
+	public void setEraseFeedback(boolean eraseFeedback) {
+		m_eraseFeedback = eraseFeedback;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// DND Feedback
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private int m_dndFeedback;
+
+	/**
+	 * @return additional DND feedback flags.
+	 */
+	public int getDNDFeedback() {
+		return m_dndFeedback;
+	}
+
+	/**
+	 * Sets additional DND feedback flags.
+	 */
+	public void setDNDFeedback(int dndFeedback) {
+		m_dndFeedback = dndFeedback;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Arbitrary values map
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Map<Object, Object> m_arbitraryMap;
+
+	/**
+	 * Associates the given value with the given key.
+	 */
+	public final void putArbitraryValue(Object key, Object value) {
+		if (m_arbitraryMap == null) {
+			m_arbitraryMap = new HashMap<>();
+		}
+		m_arbitraryMap.put(key, value);
+	}
+
+	/**
+	 * @return the value to which the given key is mapped, or <code>null</code>.
+	 */
+	public final Object getArbitraryValue(Object key) {
+		if (m_arbitraryMap != null) {
+			return m_arbitraryMap.get(key);
+		}
+		return null;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/requests/SelectionRequest.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/requests/SelectionRequest.java
index 91a41d6ab..7dde1631f 100644
--- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/requests/SelectionRequest.java
+++ b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/requests/SelectionRequest.java
@@ -19,62 +19,62 @@
  * @coverage gef.core
  */
 public class SelectionRequest extends LocationRequest {
-  private int m_lastButtonPressed;
+	private int m_lastButtonPressed;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Constructs an empty {@link SelectionRequest}.
-   */
-  public SelectionRequest() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Constructs an empty {@link SelectionRequest}.
+	 */
+	public SelectionRequest() {
+	}
 
-  /**
-   * Constructs a {@link SelectionRequest} with the specified <i>type</i>.
-   */
-  public SelectionRequest(Object type) {
-    super(type);
-  }
+	/**
+	 * Constructs a {@link SelectionRequest} with the specified <i>type</i>.
+	 */
+	public SelectionRequest(Object type) {
+		super(type);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Returns the last button that was pressed. This is useful if there is more than one mouse button
-   * pressed and the most recent button pressed needs to be identified.
-   */
-  public int getLastButtonPressed() {
-    return m_lastButtonPressed;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Returns the last button that was pressed. This is useful if there is more than one mouse button
+	 * pressed and the most recent button pressed needs to be identified.
+	 */
+	public int getLastButtonPressed() {
+		return m_lastButtonPressed;
+	}
 
-  /**
-   * Sets the last mouse button that was pressed.
-   */
-  public void setLastButtonPressed(int lastButtonPressed) {
-    m_lastButtonPressed = lastButtonPressed;
-  }
+	/**
+	 * Sets the last mouse button that was pressed.
+	 */
+	public void setLastButtonPressed(int lastButtonPressed) {
+		m_lastButtonPressed = lastButtonPressed;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    StringBuffer buffer = new StringBuffer("SelectionRequest(type=");
-    buffer.append(getType());
-    buffer.append(", location=");
-    buffer.append(getLocation());
-    buffer.append(", stateMask=");
-    buffer.append(getStateMask());
-    buffer.append(", button=");
-    buffer.append(m_lastButtonPressed);
-    buffer.append(")");
-    return buffer.toString();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		StringBuffer buffer = new StringBuffer("SelectionRequest(type=");
+		buffer.append(getType());
+		buffer.append(", location=");
+		buffer.append(getLocation());
+		buffer.append(", stateMask=");
+		buffer.append(getStateMask());
+		buffer.append(", button=");
+		buffer.append(m_lastButtonPressed);
+		buffer.append(")");
+		return buffer.toString();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/tools/AbstractCreationTool.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/tools/AbstractCreationTool.java
index 8a07ce636..a63e2ac06 100644
--- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/tools/AbstractCreationTool.java
+++ b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/tools/AbstractCreationTool.java
@@ -25,120 +25,120 @@
  * @coverage gef.core
  */
 public abstract class AbstractCreationTool extends TargetingTool {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractCreationTool() {
-    setDefaultCursor(ISharedCursors.CURSOR_ADD);
-    setDisabledCursor(ISharedCursors.CURSOR_NO);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractCreationTool() {
+		setDefaultCursor(ISharedCursors.CURSOR_ADD);
+		setDisabledCursor(ISharedCursors.CURSOR_NO);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // High-Level handle MouseEvent
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void handleButtonDown(int button) {
-    if (button == 1) {
-      if (m_state == STATE_INIT) {
-        m_state = STATE_DRAG;
-        ((AbstractCreateRequest) getTargetRequest()).setLocation(getLocation());
-        lockTargetEditPart(getTargetEditPart());
-      }
-    } else {
-      m_state = STATE_INVALID;
-      handleInvalidInput();
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// High-Level handle MouseEvent
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void handleButtonDown(int button) {
+		if (button == 1) {
+			if (m_state == STATE_INIT) {
+				m_state = STATE_DRAG;
+				((AbstractCreateRequest) getTargetRequest()).setLocation(getLocation());
+				lockTargetEditPart(getTargetEditPart());
+			}
+		} else {
+			m_state = STATE_INVALID;
+			handleInvalidInput();
+		}
+	}
 
-  @Override
-  protected void handleButtonUp(int button) {
-    if (m_state == STATE_DRAG || m_state == STATE_DRAG_IN_PROGRESS) {
-      eraseTargetFeedback();
-      unlockTargetEditPart();
-      executeCommand();
-      selectAddedObjects();
-    }
-    //
-    m_state = STATE_NONE;
-    handleFinished();
-  }
+	@Override
+	protected void handleButtonUp(int button) {
+		if (m_state == STATE_DRAG || m_state == STATE_DRAG_IN_PROGRESS) {
+			eraseTargetFeedback();
+			unlockTargetEditPart();
+			executeCommand();
+			selectAddedObjects();
+		}
+		//
+		m_state = STATE_NONE;
+		handleFinished();
+	}
 
-  @Override
-  protected void handleMove() {
-    updateTargetRequest();
-    updateTargetUnderMouse();
-    showTargetFeedback();
-    updateCommand();
-  }
+	@Override
+	protected void handleMove() {
+		updateTargetRequest();
+		updateTargetUnderMouse();
+		showTargetFeedback();
+		updateCommand();
+	}
 
-  @Override
-  protected void handleDragStarted() {
-    if (m_state == STATE_DRAG) {
-      m_state = STATE_DRAG_IN_PROGRESS;
-    }
-  }
+	@Override
+	protected void handleDragStarted() {
+		if (m_state == STATE_DRAG) {
+			m_state = STATE_DRAG_IN_PROGRESS;
+		}
+	}
 
-  @Override
-  protected void handleDragInProgress() {
-    if (m_state == STATE_DRAG_IN_PROGRESS) {
-      updateTargetRequest();
-      showTargetFeedback();
-      updateCommand();
-    }
-  }
+	@Override
+	protected void handleDragInProgress() {
+		if (m_state == STATE_DRAG_IN_PROGRESS) {
+			updateTargetRequest();
+			showTargetFeedback();
+			updateCommand();
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Request
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Creates a {@link ICreateRequest} and sets this tool's factory on the request.
-   */
-  @Override
-  protected abstract Request createTargetRequest();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Request
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Creates a {@link ICreateRequest} and sets this tool's factory on the request.
+	 */
+	@Override
+	protected abstract Request createTargetRequest();
 
-  /**
-   * Sets the location (and size if the user is performing size-on-drop) of the request.
-   */
-  @Override
-  protected void updateTargetRequest() {
-    super.updateTargetRequest();
-    AbstractCreateRequest request = (AbstractCreateRequest) getTargetRequest();
-    if (m_state == STATE_DRAG_IN_PROGRESS) {
-      Point start = getStartLocation();
-      Rectangle bounds = new Rectangle(start, getDragMoveDelta());
-      request.setLocation(bounds.getLocation());
-      request.setSize(bounds.getSize());
-    } else {
-      request.setSize(null);
-      request.setLocation(getLocation());
-    }
-  }
+	/**
+	 * Sets the location (and size if the user is performing size-on-drop) of the request.
+	 */
+	@Override
+	protected void updateTargetRequest() {
+		super.updateTargetRequest();
+		AbstractCreateRequest request = (AbstractCreateRequest) getTargetRequest();
+		if (m_state == STATE_DRAG_IN_PROGRESS) {
+			Point start = getStartLocation();
+			Rectangle bounds = new Rectangle(start, getDragMoveDelta());
+			request.setLocation(bounds.getLocation());
+			request.setSize(bounds.getSize());
+		} else {
+			request.setSize(null);
+			request.setLocation(getLocation());
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Selection
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Add the newly created object to the viewer's selected objects.
-   */
-  protected abstract void selectAddedObjects();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Selection
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Add the newly created object to the viewer's selected objects.
+	 */
+	protected abstract void selectAddedObjects();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Handle KeyEvent
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void keyPressed(KeyEvent event, IEditPartViewer viewer) {
-    if (event.keyCode == SWT.ESC) {
-      viewer.getEditDomain().loadDefaultTool();
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Handle KeyEvent
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void keyPressed(KeyEvent event, IEditPartViewer viewer) {
+		if (event.keyCode == SWT.ESC) {
+			viewer.getEditDomain().loadDefaultTool();
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/tools/CreationTool.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/tools/CreationTool.java
index 25e777139..8101f83ec 100644
--- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/tools/CreationTool.java
+++ b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/tools/CreationTool.java
@@ -26,69 +26,69 @@
  * @coverage gef.core
  */
 public class CreationTool extends AbstractCreationTool {
-  private final ICreationFactory m_factory;
+	private final ICreationFactory m_factory;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CreationTool(ICreationFactory factory) {
-    m_factory = factory;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CreationTool(ICreationFactory factory) {
+		m_factory = factory;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void activate() {
-    super.activate();
-    try {
-      m_factory.activate();
-    } catch (Throwable e) {
-      getDomain().loadDefaultTool();
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void activate() {
+		super.activate();
+		try {
+			m_factory.activate();
+		} catch (Throwable e) {
+			getDomain().loadDefaultTool();
+		}
+	}
 
-  /**
-   * @return the {@link ICreationFactory} used to create the new {@link EditPart}'s.
-   */
-  public final ICreationFactory getFactory() {
-    return m_factory;
-  }
+	/**
+	 * @return the {@link ICreationFactory} used to create the new {@link EditPart}'s.
+	 */
+	public final ICreationFactory getFactory() {
+		return m_factory;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Request
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Creates a {@link CreateRequest} and sets this tool's factory on the request.
-   */
-  @Override
-  protected Request createTargetRequest() {
-    return new CreateRequest(m_factory);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Request
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Creates a {@link CreateRequest} and sets this tool's factory on the request.
+	 */
+	@Override
+	protected Request createTargetRequest() {
+		return new CreateRequest(m_factory);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Selection
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void selectAddedObjects() {
-    CreateRequest request = (CreateRequest) getTargetRequest();
-    Object model = request.getSelectObject();
-    if (model != null) {
-      IEditPartViewer viewer = getViewer();
-      if (viewer != null) {
-        EditPart editPart = viewer.getEditPartByModel(model);
-        if (editPart != null) {
-          viewer.select(editPart);
-        }
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Selection
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void selectAddedObjects() {
+		CreateRequest request = (CreateRequest) getTargetRequest();
+		Object model = request.getSelectObject();
+		if (model != null) {
+			IEditPartViewer viewer = getViewer();
+			if (viewer != null) {
+				EditPart editPart = viewer.getEditPartByModel(model);
+				if (editPart != null) {
+					viewer.select(editPart);
+				}
+			}
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/tools/DragEditPartTracker.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/tools/DragEditPartTracker.java
index c3a54dca0..7d2a41f7e 100644
--- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/tools/DragEditPartTracker.java
+++ b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/tools/DragEditPartTracker.java
@@ -36,127 +36,127 @@
  * @coverage gef.core
  */
 public class DragEditPartTracker extends SelectEditPartTracker {
-  private boolean m_canMove;
-  private boolean m_canReparent;
+	private boolean m_canMove;
+	private boolean m_canReparent;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DragEditPartTracker(EditPart sourceEditPart) {
-    super(sourceEditPart);
-    setDefaultCursor(ISharedCursors.CURSOR_MOVE);
-    setDisabledCursor(ISharedCursors.CURSOR_NO);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DragEditPartTracker(EditPart sourceEditPart) {
+		super(sourceEditPart);
+		setDefaultCursor(ISharedCursors.CURSOR_MOVE);
+		setDisabledCursor(ISharedCursors.CURSOR_NO);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tool
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void deactivate() {
-    super.deactivate();
-    m_exclusionSet = null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tool
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void deactivate() {
+		super.deactivate();
+		m_exclusionSet = null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // High-Level handle MouseEvent
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void handleButtonUp(int button) {
-    if (m_state == STATE_DRAG_IN_PROGRESS) {
-      // prepare models if restoring selection
-      List<Object> models = getOperationSetModels();
-      eraseTargetFeedback();
-      executeCommand();
-      m_state = STATE_NONE;
-      // restore selection
-      restoreSelectionFromModels(models);
-    } else {
-      super.handleButtonUp(button);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// High-Level handle MouseEvent
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void handleButtonUp(int button) {
+		if (m_state == STATE_DRAG_IN_PROGRESS) {
+			// prepare models if restoring selection
+			List<Object> models = getOperationSetModels();
+			eraseTargetFeedback();
+			executeCommand();
+			m_state = STATE_NONE;
+			// restore selection
+			restoreSelectionFromModels(models);
+		} else {
+			super.handleButtonUp(button);
+		}
+	}
 
-  @Override
-  protected void handleDragStarted() {
-    super.handleDragStarted();
-    if (m_state == STATE_DRAG_IN_PROGRESS) {
-      updateTargetRequest();
-      updateTargetUnderMouse();
-    }
-  }
+	@Override
+	protected void handleDragStarted() {
+		super.handleDragStarted();
+		if (m_state == STATE_DRAG_IN_PROGRESS) {
+			updateTargetRequest();
+			updateTargetUnderMouse();
+		}
+	}
 
-  @Override
-  protected void handleDragInProgress() {
-    if (m_state == STATE_DRAG_IN_PROGRESS) {
-      updateTargetRequest();
-      updateTargetUnderMouse();
-      showTargetFeedback();
-      updateCommand();
-    }
-  }
+	@Override
+	protected void handleDragInProgress() {
+		if (m_state == STATE_DRAG_IN_PROGRESS) {
+			updateTargetRequest();
+			updateTargetUnderMouse();
+			showTargetFeedback();
+			updateCommand();
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Handling operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Collection<EditPart> m_exclusionSet;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Handling operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Collection<EditPart> m_exclusionSet;
 
-  /**
-   * Returns a list of all the edit parts in the {@link Tool#getOperationSet() operation set}.
-   */
-  @Override
-  protected Collection<EditPart> getExclusionSet() {
-    if (m_exclusionSet == null) {
-      m_exclusionSet = new ArrayList<EditPart>(getOperationSet());
-    }
-    return m_exclusionSet;
-  }
+	/**
+	 * Returns a list of all the edit parts in the {@link Tool#getOperationSet() operation set}.
+	 */
+	@Override
+	protected Collection<EditPart> getExclusionSet() {
+		if (m_exclusionSet == null) {
+			m_exclusionSet = new ArrayList<EditPart>(getOperationSet());
+		}
+		return m_exclusionSet;
+	}
 
-  /**
-   * Returns "all ignore" {@link IConditional} if <code>OperationSet</code> is empty.
-   */
-  @Override
-  protected IConditional getTargetingConditional() {
-    if (!getViewer().getSelectedEditParts().isEmpty() && getOperationSet().isEmpty()) {
-      return new IConditional() {
-        @Override
-        public boolean evaluate(EditPart editPart) {
-          return false;
-        }
-      };
-    }
-    return super.getTargetingConditional();
-  }
+	/**
+	 * Returns "all ignore" {@link IConditional} if <code>OperationSet</code> is empty.
+	 */
+	@Override
+	protected IConditional getTargetingConditional() {
+		if (!getViewer().getSelectedEditParts().isEmpty() && getOperationSet().isEmpty()) {
+			return new IConditional() {
+				@Override
+				public boolean evaluate(EditPart editPart) {
+					return false;
+				}
+			};
+		}
+		return super.getTargetingConditional();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // OperationSet
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Returns a {@link List} of top-level edit parts excluding dependants that understand the current
-   * target request.
-   */
-  @Override
-  protected List<EditPart> createOperationSet() {
-    // extract OperationSet from selection
-    List<EditPart> operationSet = ToolUtilities.getSelectionWithoutDependants(getViewer());
-    // check understandsRequest() from parent
-    // FIXME Kosta.20071115 I don't understand, why we should ask parent _here_
-    // Yes, if parent does not support move, we should not allow operation.
-    // However even if parent does not support move, we still can _reparent_ from it on different parent.
-    {
-      // XXX just to set "operationSet", probably there is better place
-      ChangeBoundsRequest request = (ChangeBoundsRequest) getTargetRequest();
-      request.setEditParts(operationSet);
-    }
-    /*if (!operationSet.isEmpty()) {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// OperationSet
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Returns a {@link List} of top-level edit parts excluding dependants that understand the current
+	 * target request.
+	 */
+	@Override
+	protected List<EditPart> createOperationSet() {
+		// extract OperationSet from selection
+		List<EditPart> operationSet = ToolUtilities.getSelectionWithoutDependants(getViewer());
+		// check understandsRequest() from parent
+		// FIXME Kosta.20071115 I don't understand, why we should ask parent _here_
+		// Yes, if parent does not support move, we should not allow operation.
+		// However even if parent does not support move, we still can _reparent_ from it on different parent.
+		{
+			// XXX just to set "operationSet", probably there is better place
+			ChangeBoundsRequest request = (ChangeBoundsRequest) getTargetRequest();
+			request.setEditParts(operationSet);
+		}
+		/*if (!operationSet.isEmpty()) {
     	EditPart firstPart = operationSet.get(0);
     	ChangeBoundsRequest request = (ChangeBoundsRequest) getTargetRequest();
     	request.setEditParts(operationSet);
@@ -165,133 +165,133 @@ protected List<EditPart> createOperationSet() {
     		return Collections.emptyList();
     	}
     }*/
-    // check permission for move and reparenting
-    {
-      DragPermissionRequest request = new DragPermissionRequest();
-      for (EditPart editPart : operationSet) {
-        editPart.performRequest(request);
-      }
-      m_canMove = request.canMove();
-      m_canReparent = request.canReparent();
-    }
-    //
-    return operationSet;
-  }
+		// check permission for move and reparenting
+		{
+			DragPermissionRequest request = new DragPermissionRequest();
+			for (EditPart editPart : operationSet) {
+				editPart.performRequest(request);
+			}
+			m_canMove = request.canMove();
+			m_canReparent = request.canReparent();
+		}
+		//
+		return operationSet;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Request
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Creates a {@link ChangeBoundsRequest}. The type is {@link Request#REQ_MOVE}.
-   */
-  @Override
-  protected Request createTargetRequest() {
-    return new ChangeBoundsRequest(Request.REQ_MOVE);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Request
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Creates a {@link ChangeBoundsRequest}. The type is {@link Request#REQ_MOVE}.
+	 */
+	@Override
+	protected Request createTargetRequest() {
+		return new ChangeBoundsRequest(Request.REQ_MOVE);
+	}
 
-  /**
-   * Updates the request with the current {@link Tool#getOperationSet() operation set}, move delta,
-   * location and type.
-   */
-  @Override
-  protected void updateTargetRequest() {
-    super.updateTargetRequest();
-    ChangeBoundsRequest request = (ChangeBoundsRequest) getTargetRequest();
-    request.setEditParts(getOperationSet());
-    request.setMoveDelta(new Point(getDragMoveDelta()));
-    request.setLocation(getLocation());
-  }
+	/**
+	 * Updates the request with the current {@link Tool#getOperationSet() operation set}, move delta,
+	 * location and type.
+	 */
+	@Override
+	protected void updateTargetRequest() {
+		super.updateTargetRequest();
+		ChangeBoundsRequest request = (ChangeBoundsRequest) getTargetRequest();
+		request.setEditParts(getOperationSet());
+		request.setMoveDelta(new Point(getDragMoveDelta()));
+		request.setLocation(getLocation());
+	}
 
-  @Override
-  protected void updateTargetRequest(EditPart target) {
-    super.updateTargetRequest(target);
-    ChangeBoundsRequest request = (ChangeBoundsRequest) getTargetRequest();
-    List<EditPart> editParts = request.getEditParts();
-    if (!editParts.isEmpty()) {
-      if (editParts.get(0).getParent() == target) {
-        request.setType(Request.REQ_MOVE);
-      } else {
-        request.setType(Request.REQ_ADD);
-      }
-    }
-  }
+	@Override
+	protected void updateTargetRequest(EditPart target) {
+		super.updateTargetRequest(target);
+		ChangeBoundsRequest request = (ChangeBoundsRequest) getTargetRequest();
+		List<EditPart> editParts = request.getEditParts();
+		if (!editParts.isEmpty()) {
+			if (editParts.get(0).getParent() == target) {
+				request.setType(Request.REQ_MOVE);
+			} else {
+				request.setType(Request.REQ_ADD);
+			}
+		}
+	}
 
-  /**
-   * @return <code>true</code> if current {@link #getTargetRequest()} has {@link Request#REQ_MOVE}
-   *         type.
-   */
-  private boolean isMove() {
-    return getTargetRequest().getType() == Request.REQ_MOVE;
-  }
+	/**
+	 * @return <code>true</code> if current {@link #getTargetRequest()} has {@link Request#REQ_MOVE}
+	 *         type.
+	 */
+	private boolean isMove() {
+		return getTargetRequest().getType() == Request.REQ_MOVE;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Command
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Return collection model's of operation set.
-   */
-  private List<Object> getOperationSetModels() {
-    List<Object> models = Lists.newArrayList();
-    for (EditPart part : getOperationSet()) {
-      models.add(part.getModel());
-    }
-    return models;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Command
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Return collection model's of operation set.
+	 */
+	private List<Object> getOperationSetModels() {
+		List<Object> models = Lists.newArrayList();
+		for (EditPart part : getOperationSet()) {
+			models.add(part.getModel());
+		}
+		return models;
+	}
 
-  /**
-   * Select {@link EditPart} by their model's.
-   */
-  private void restoreSelectionFromModels(List<Object> models) {
-    if (models != null) {
-      IEditPartViewer viewer = getViewer();
-      // prepare new EditPart's
-      List<EditPart> newEditParts = Lists.newArrayList();
-      for (Object model : models) {
-        EditPart newEditPart = viewer.getEditPartByModel(model);
-        if (newEditPart != null) {
-          newEditParts.add(newEditPart);
-        }
-      }
-      // set new selection
-      viewer.setSelection(newEditParts);
-    }
-  }
+	/**
+	 * Select {@link EditPart} by their model's.
+	 */
+	private void restoreSelectionFromModels(List<Object> models) {
+		if (models != null) {
+			IEditPartViewer viewer = getViewer();
+			// prepare new EditPart's
+			List<EditPart> newEditParts = Lists.newArrayList();
+			for (Object model : models) {
+				EditPart newEditPart = viewer.getEditPartByModel(model);
+				if (newEditPart != null) {
+					newEditParts.add(newEditPart);
+				}
+			}
+			// set new selection
+			viewer.setSelection(newEditParts);
+		}
+	}
 
-  @Override
-  protected Command getCommand() {
-    Request request = getTargetRequest();
-    List<EditPart> operationSet = getOperationSet();
-    //
-    if (isMove()) {
-      if (m_canMove && !operationSet.isEmpty()) {
-        // if move get command from parent
-        EditPart firstPart = operationSet.get(0);
-        //
-        return firstPart.getParent().getCommand(request);
-      }
-    } else if (m_canReparent) {
-      // if change parent get command from new parent and notify old parent for orphans
-      EditPart targetEditPart = getTargetEditPart();
-      //
-      if (targetEditPart != null) {
-        CompoundCommand compoundCommand = targetEditPart.createCompoundCommand();
-        if (!operationSet.isEmpty()) {
-          EditPart firstPart = operationSet.get(0);
-          GroupRequest orphanRequest = new GroupRequest(Request.REQ_ORPHAN);
-          orphanRequest.setEditParts(operationSet);
-          compoundCommand.add(firstPart.getParent().getCommand(orphanRequest));
-        }
-        Command reparentCommand = targetEditPart.getCommand(request);
-        if (reparentCommand != null) {
-          compoundCommand.add(reparentCommand);
-          return compoundCommand;
-        }
-      }
-    }
-    return null;
-  }
+	@Override
+	protected Command getCommand() {
+		Request request = getTargetRequest();
+		List<EditPart> operationSet = getOperationSet();
+		//
+		if (isMove()) {
+			if (m_canMove && !operationSet.isEmpty()) {
+				// if move get command from parent
+				EditPart firstPart = operationSet.get(0);
+				//
+				return firstPart.getParent().getCommand(request);
+			}
+		} else if (m_canReparent) {
+			// if change parent get command from new parent and notify old parent for orphans
+			EditPart targetEditPart = getTargetEditPart();
+			//
+			if (targetEditPart != null) {
+				CompoundCommand compoundCommand = targetEditPart.createCompoundCommand();
+				if (!operationSet.isEmpty()) {
+					EditPart firstPart = operationSet.get(0);
+					GroupRequest orphanRequest = new GroupRequest(Request.REQ_ORPHAN);
+					orphanRequest.setEditParts(operationSet);
+					compoundCommand.add(firstPart.getParent().getCommand(orphanRequest));
+				}
+				Command reparentCommand = targetEditPart.getCommand(request);
+				if (reparentCommand != null) {
+					compoundCommand.add(reparentCommand);
+					return compoundCommand;
+				}
+			}
+		}
+		return null;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/tools/ParentTargetDragEditPartTracker.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/tools/ParentTargetDragEditPartTracker.java
index df70c0390..baf304c0f 100644
--- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/tools/ParentTargetDragEditPartTracker.java
+++ b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/tools/ParentTargetDragEditPartTracker.java
@@ -22,35 +22,35 @@
  * @coverage gef.core
  */
 public class ParentTargetDragEditPartTracker extends DragEditPartTracker {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ParentTargetDragEditPartTracker(EditPart sourceEditPart) {
-    super(sourceEditPart);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ParentTargetDragEditPartTracker(EditPart sourceEditPart) {
+		super(sourceEditPart);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // High-Level handle MouseEvent
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void handleButtonUp(int button) {
-    if (m_state == STATE_DRAG_IN_PROGRESS) {
-      unlockTargetEditPart();
-    }
-    super.handleButtonUp(button);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// High-Level handle MouseEvent
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void handleButtonUp(int button) {
+		if (m_state == STATE_DRAG_IN_PROGRESS) {
+			unlockTargetEditPart();
+		}
+		super.handleButtonUp(button);
+	}
 
-  @Override
-  protected void handleDragStarted() {
-    super.handleDragStarted();
-    if (m_state == STATE_DRAG_IN_PROGRESS) {
-      ChangeBoundsRequest request = (ChangeBoundsRequest) getTargetRequest();
-      List<EditPart> editParts = request.getEditParts();
-      lockTargetEditPart(editParts.get(0).getParent());
-    }
-  }
+	@Override
+	protected void handleDragStarted() {
+		super.handleDragStarted();
+		if (m_state == STATE_DRAG_IN_PROGRESS) {
+			ChangeBoundsRequest request = (ChangeBoundsRequest) getTargetRequest();
+			List<EditPart> editParts = request.getEditParts();
+			lockTargetEditPart(editParts.get(0).getParent());
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/tools/PasteTool.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/tools/PasteTool.java
index 1db914a29..1cfe2a1d9 100644
--- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/tools/PasteTool.java
+++ b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/tools/PasteTool.java
@@ -27,54 +27,54 @@
  * @coverage gef.core
  */
 public class PasteTool extends AbstractCreationTool {
-  private final Object m_memento;
+	private final Object m_memento;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public PasteTool(Object memento) {
-    m_memento = memento;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public PasteTool(Object memento) {
+		m_memento = memento;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Returns object with paste info.
-   */
-  public final Object getMemento() {
-    return m_memento;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Returns object with paste info.
+	 */
+	public final Object getMemento() {
+		return m_memento;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Request
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Creates a {@link PasteRequest} and sets this memento object on the request.
-   */
-  @Override
-  protected Request createTargetRequest() {
-    return new PasteRequest(m_memento);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Request
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Creates a {@link PasteRequest} and sets this memento object on the request.
+	 */
+	@Override
+	protected Request createTargetRequest() {
+		return new PasteRequest(m_memento);
+	}
 
-  @Override
-  protected void selectAddedObjects() {
-    final IEditPartViewer viewer = getViewer();
-    // prepare pasted EditPart's
-    List<EditPart> editParts = Lists.newArrayList();
-    {
-      PasteRequest request = (PasteRequest) getTargetRequest();
-      for (Object model : request.getObjects()) {
-        editParts.add(viewer.getEditPartByModel(model));
-      }
-    }
-    // select EditPart's
-    viewer.setSelection(editParts);
-  }
+	@Override
+	protected void selectAddedObjects() {
+		final IEditPartViewer viewer = getViewer();
+		// prepare pasted EditPart's
+		List<EditPart> editParts = Lists.newArrayList();
+		{
+			PasteRequest request = (PasteRequest) getTargetRequest();
+			for (Object model : request.getObjects()) {
+				editParts.add(viewer.getEditPartByModel(model));
+			}
+		}
+		// select EditPart's
+		viewer.setSelection(editParts);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/tools/SelectEditPartTracker.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/tools/SelectEditPartTracker.java
index 0485d8be3..fd8e19b99 100644
--- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/tools/SelectEditPartTracker.java
+++ b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/tools/SelectEditPartTracker.java
@@ -25,132 +25,132 @@
  * @coverage gef.core
  */
 public class SelectEditPartTracker extends TargetingTool {
-  private final EditPart m_sourceEditPart;
-  private boolean m_isSelected;
+	private final EditPart m_sourceEditPart;
+	private boolean m_isSelected;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SelectEditPartTracker(EditPart sourceEditPart) {
-    m_sourceEditPart = sourceEditPart;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SelectEditPartTracker(EditPart sourceEditPart) {
+		m_sourceEditPart = sourceEditPart;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Drop Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void resetState() {
-    super.resetState();
-    m_isSelected = false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Drop Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void resetState() {
+		super.resetState();
+		m_isSelected = false;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Cursor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Cursor calculateCursor() {
-    return m_state == STATE_INIT || m_state == STATE_DRAG
-        ? getDefaultCursor()
-        : super.calculateCursor();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Cursor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Cursor calculateCursor() {
+		return m_state == STATE_INIT || m_state == STATE_DRAG
+				? getDefaultCursor()
+						: super.calculateCursor();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // High-Level handle MouseEvent
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void handleButtonDown(int button) {
-    if ((button == 1 || button == 3)
-        && m_state == STATE_INIT
-        && m_sourceEditPart.getSelected() == EditPart.SELECTED_NONE) {
-      performSelection();
-    }
-    if (button == 1) {
-      if (m_state == STATE_INIT) {
-        m_state = STATE_DRAG;
-      }
-    } else {
-      if (button == 3) {
-        m_state = STATE_NONE;
-      } else {
-        m_state = STATE_INVALID;
-      }
-      handleInvalidInput();
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// High-Level handle MouseEvent
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void handleButtonDown(int button) {
+		if ((button == 1 || button == 3)
+				&& m_state == STATE_INIT
+				&& m_sourceEditPart.getSelected() == EditPart.SELECTED_NONE) {
+			performSelection();
+		}
+		if (button == 1) {
+			if (m_state == STATE_INIT) {
+				m_state = STATE_DRAG;
+			}
+		} else {
+			if (button == 3) {
+				m_state = STATE_NONE;
+			} else {
+				m_state = STATE_INVALID;
+			}
+			handleInvalidInput();
+		}
+	}
 
-  @Override
-  protected void handleButtonUp(int button) {
-    if (m_state == STATE_DRAG) {
-      performSelection();
-      performClick();
-      m_state = STATE_NONE;
-    }
-  }
+	@Override
+	protected void handleButtonUp(int button) {
+		if (m_state == STATE_DRAG) {
+			performSelection();
+			performClick();
+			m_state = STATE_NONE;
+		}
+	}
 
-  @Override
-  protected void handleDragStarted() {
-    if (m_state == STATE_DRAG) {
-      m_state = STATE_DRAG_IN_PROGRESS;
-    }
-  }
+	@Override
+	protected void handleDragStarted() {
+		if (m_state == STATE_DRAG) {
+			m_state = STATE_DRAG_IN_PROGRESS;
+		}
+	}
 
-  @Override
-  protected void handleDoubleClick(int button) {
-    if (button == 1) {
-      SelectionRequest request = new SelectionRequest(Request.REQ_OPEN);
-      request.setLocation(getLocation());
-      m_sourceEditPart.performRequest(request);
-    }
-  }
+	@Override
+	protected void handleDoubleClick(int button) {
+		if (button == 1) {
+			SelectionRequest request = new SelectionRequest(Request.REQ_OPEN);
+			request.setLocation(getLocation());
+			m_sourceEditPart.performRequest(request);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Selection
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Performs the appropriate selection action based on the selection state of the source and the
-   * modifiers (CTRL and SHIFT). If no modifier key is pressed, the source will be set as the only
-   * selection. If the CTRL key is pressed and the edit part is already selected, it will be
-   * deselected. If the CTRL key is pressed and the edit part is not selected, it will be appended
-   * to the selection set. If the SHIFT key is pressed, the source will be appended to the
-   * selection.
-   */
-  private void performSelection() {
-    if (!m_isSelected) {
-      m_isSelected = true;
-      IEditPartViewer viewer = getViewer();
-      //
-      if ((m_stateMask & SWT.CONTROL) != 0) {
-        if (viewer.getSelectedEditParts().contains(m_sourceEditPart)) {
-          viewer.deselect(m_sourceEditPart);
-        } else {
-          viewer.appendSelection(m_sourceEditPart);
-        }
-      } else if ((m_stateMask & SWT.SHIFT) != 0) {
-        viewer.appendSelection(m_sourceEditPart);
-      } else {
-        viewer.select(m_sourceEditPart);
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Selection
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Performs the appropriate selection action based on the selection state of the source and the
+	 * modifiers (CTRL and SHIFT). If no modifier key is pressed, the source will be set as the only
+	 * selection. If the CTRL key is pressed and the edit part is already selected, it will be
+	 * deselected. If the CTRL key is pressed and the edit part is not selected, it will be appended
+	 * to the selection set. If the SHIFT key is pressed, the source will be appended to the
+	 * selection.
+	 */
+	private void performSelection() {
+		if (!m_isSelected) {
+			m_isSelected = true;
+			IEditPartViewer viewer = getViewer();
+			//
+			if ((m_stateMask & SWT.CONTROL) != 0) {
+				if (viewer.getSelectedEditParts().contains(m_sourceEditPart)) {
+					viewer.deselect(m_sourceEditPart);
+				} else {
+					viewer.appendSelection(m_sourceEditPart);
+				}
+			} else if ((m_stateMask & SWT.SHIFT) != 0) {
+				viewer.appendSelection(m_sourceEditPart);
+			} else {
+				viewer.select(m_sourceEditPart);
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Click
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void performClick() {
-    if (m_sourceEditPart.getSelected() != EditPart.SELECTED_NONE) {
-      getViewer().fireEditPartClick(m_sourceEditPart);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Click
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void performClick() {
+		if (m_sourceEditPart.getSelected() != EditPart.SELECTED_NONE) {
+			getViewer().fireEditPartClick(m_sourceEditPart);
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/tools/TargetingTool.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/tools/TargetingTool.java
index 78132d984..401dd50fe 100644
--- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/tools/TargetingTool.java
+++ b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/tools/TargetingTool.java
@@ -30,241 +30,241 @@
  * @coverage gef.core
  */
 public abstract class TargetingTool extends Tool {
-  private EditPart m_target;
-  private Request m_request;
-  private boolean m_isLockTarget;
+	private EditPart m_target;
+	private Request m_request;
+	private boolean m_isLockTarget;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tool
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void deactivate() {
-    eraseTargetFeedback();
-    m_isLockTarget = false;
-    m_target = null;
-    m_request = null;
-    super.deactivate();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tool
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void deactivate() {
+		eraseTargetFeedback();
+		m_isLockTarget = false;
+		m_target = null;
+		m_request = null;
+		super.deactivate();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // EditPart
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Returns the current target {@link EditPart}.
-   */
-  protected EditPart getTargetEditPart() {
-    return m_target;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// EditPart
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Returns the current target {@link EditPart}.
+	 */
+	protected EditPart getTargetEditPart() {
+		return m_target;
+	}
 
-  /**
-   * Sets the target {@link EditPart}. If the target editpart is changing, this method will call
-   * {@link #handleExitingEditPart()} for the previous target if not <code>null</code>, and
-   * {@link #handleEnteredEditPart()} for the new target, if not <code>null</code>.
-   */
-  protected void setTargetEditPart(EditPart target) {
-    if (m_target != target) {
-      getTargetRequest().setTarget(target);
-      if (m_target != null) {
-        handleExitingEditPart();
-      }
-      //
-      m_target = target;
-      handleEnteredEditPart();
-    }
-  }
+	/**
+	 * Sets the target {@link EditPart}. If the target editpart is changing, this method will call
+	 * {@link #handleExitingEditPart()} for the previous target if not <code>null</code>, and
+	 * {@link #handleEnteredEditPart()} for the new target, if not <code>null</code>.
+	 */
+	protected void setTargetEditPart(EditPart target) {
+		if (m_target != target) {
+			getTargetRequest().setTarget(target);
+			if (m_target != null) {
+				handleExitingEditPart();
+			}
+			//
+			m_target = target;
+			handleEnteredEditPart();
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Handling Operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Called whenever the target editpart is about to change. By default, the target being exited is
-   * asked to erase its feedback.
-   */
-  protected void handleExitingEditPart() {
-    eraseTargetFeedback();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Handling Operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Called whenever the target editpart is about to change. By default, the target being exited is
+	 * asked to erase its feedback.
+	 */
+	protected void handleExitingEditPart() {
+		eraseTargetFeedback();
+	}
 
-  /**
-   * Called whenever the target editpart has changed. By default, the new target is asked to show
-   * feedback.
-   */
-  protected void handleEnteredEditPart() {
-    updateTargetRequest();
-    showTargetFeedback();
-  }
+	/**
+	 * Called whenever the target editpart has changed. By default, the new target is asked to show
+	 * feedback.
+	 */
+	protected void handleEnteredEditPart() {
+		updateTargetRequest();
+		showTargetFeedback();
+	}
 
-  /**
-   * Called when invalid input is encountered. By default, feedback is erased, and the current
-   * command is set to <code>null</code>. The state does not change, so the caller must set the
-   * state to {@link Tool#STATE_INVALID}.
-   */
-  protected void handleInvalidInput() {
-    eraseTargetFeedback();
-    setCommand(null);
-  }
+	/**
+	 * Called when invalid input is encountered. By default, feedback is erased, and the current
+	 * command is set to <code>null</code>. The state does not change, so the caller must set the
+	 * state to {@link Tool#STATE_INVALID}.
+	 */
+	protected void handleInvalidInput() {
+		eraseTargetFeedback();
+		setCommand(null);
+	}
 
-  @Override
-  protected void handleViewerExited() {
-    setTargetEditPart(null);
-  }
+	@Override
+	protected void handleViewerExited() {
+		setTargetEditPart(null);
+	}
 
-  /**
-   * Locks-in the given editpart as the target. Updating of the target will not occur until
-   * {@link #unlockTargetEditPart()} is called.
-   */
-  protected void lockTargetEditPart(EditPart editpart) {
-    if (editpart == null) {
-      unlockTargetEditPart();
-    } else {
-      m_isLockTarget = true;
-      setTargetEditPart(editpart);
-    }
-  }
+	/**
+	 * Locks-in the given editpart as the target. Updating of the target will not occur until
+	 * {@link #unlockTargetEditPart()} is called.
+	 */
+	protected void lockTargetEditPart(EditPart editpart) {
+		if (editpart == null) {
+			unlockTargetEditPart();
+		} else {
+			m_isLockTarget = true;
+			setTargetEditPart(editpart);
+		}
+	}
 
-  /**
-   * Releases the targeting lock, and updates the target in case the mouse is already over a new
-   * target.
-   */
-  protected void unlockTargetEditPart() {
-    m_isLockTarget = false;
-    updateTargetUnderMouse();
-  }
+	/**
+	 * Releases the targeting lock, and updates the target in case the mouse is already over a new
+	 * target.
+	 */
+	protected void unlockTargetEditPart() {
+		m_isLockTarget = false;
+		updateTargetUnderMouse();
+	}
 
-  /**
-   * Returns a List of objects that should be excluded as potential targets for the operation.
-   */
-  protected Collection<EditPart> getExclusionSet() {
-    return Collections.emptyList();
-  }
+	/**
+	 * Returns a List of objects that should be excluded as potential targets for the operation.
+	 */
+	protected Collection<EditPart> getExclusionSet() {
+		return Collections.emptyList();
+	}
 
-  /**
-   * Returns the conditional object used for obtaining the target editpart from the viewer. By
-   * default, a conditional is returned that tests whether an editpart at the current mouse location
-   * indicates a target for the operation's request, using
-   * {@link EditPart#getTargetEditPart(Request)}. If <code>null</code> is returned, then the
-   * conditional fails, and the search continues.
-   */
-  protected IConditional getTargetingConditional() {
-    return new IConditional() {
-      @Override
-      public boolean evaluate(EditPart target) {
-        updateTargetRequest(target);
-        return target.getTargetEditPart(getTargetRequest()) != null;
-      }
-    };
-  }
+	/**
+	 * Returns the conditional object used for obtaining the target editpart from the viewer. By
+	 * default, a conditional is returned that tests whether an editpart at the current mouse location
+	 * indicates a target for the operation's request, using
+	 * {@link EditPart#getTargetEditPart(Request)}. If <code>null</code> is returned, then the
+	 * conditional fails, and the search continues.
+	 */
+	protected IConditional getTargetingConditional() {
+		return new IConditional() {
+			@Override
+			public boolean evaluate(EditPart target) {
+				updateTargetRequest(target);
+				return target.getTargetEditPart(getTargetRequest()) != null;
+			}
+		};
+	}
 
-  /**
-   * Updates the target {@link EditPart}. The target is updated by using the target conditional and
-   * the target request. If the target has been locked, this method does nothing.
-   */
-  protected void updateTargetUnderMouse() {
-    if (!m_isLockTarget) {
-      EditPart editPart =
-          getViewer().findTargetEditPart(
-              m_currentScreenX,
-              m_currentScreenY,
-              getExclusionSet(),
-              getTargetingConditional());
-      if (editPart != null) {
-        editPart = editPart.getTargetEditPart(getTargetRequest());
-      }
-      setTargetEditPart(editPart);
-    }
-  }
+	/**
+	 * Updates the target {@link EditPart}. The target is updated by using the target conditional and
+	 * the target request. If the target has been locked, this method does nothing.
+	 */
+	protected void updateTargetUnderMouse() {
+		if (!m_isLockTarget) {
+			EditPart editPart =
+					getViewer().findTargetEditPart(
+							m_currentScreenX,
+							m_currentScreenY,
+							getExclusionSet(),
+							getTargetingConditional());
+			if (editPart != null) {
+				editPart = editPart.getTargetEditPart(getTargetRequest());
+			}
+			setTargetEditPart(editPart);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Request
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Lazily creates and returns the request used when communicating with the target editpart.
-   */
-  protected Request getTargetRequest() {
-    if (m_request == null) {
-      m_request = createTargetRequest();
-    }
-    return m_request;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Request
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Lazily creates and returns the request used when communicating with the target editpart.
+	 */
+	protected Request getTargetRequest() {
+		if (m_request == null) {
+			m_request = createTargetRequest();
+		}
+		return m_request;
+	}
 
-  /**
-   * Creates the target request that will be used with the target editpart. This request will be
-   * cached and updated as needed.
-   */
-  protected Request createTargetRequest() {
-    return new Request();
-  }
+	/**
+	 * Creates the target request that will be used with the target editpart. This request will be
+	 * cached and updated as needed.
+	 */
+	protected Request createTargetRequest() {
+		return new Request();
+	}
 
-  /**
-   * Subclasses should override to update the target request.
-   */
-  protected void updateTargetRequest() {
-    getTargetRequest().setStateMask(m_stateMask);
-  }
+	/**
+	 * Subclasses should override to update the target request.
+	 */
+	protected void updateTargetRequest() {
+		getTargetRequest().setStateMask(m_stateMask);
+	}
 
-  /**
-   * Subclasses should override to update the target request depending on potential target.
-   */
-  protected void updateTargetRequest(EditPart target) {
-  }
+	/**
+	 * Subclasses should override to update the target request depending on potential target.
+	 */
+	protected void updateTargetRequest(EditPart target) {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Command
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Queries the target editpart for a command.
-   */
-  @Override
-  protected Command getCommand() {
-    return m_target == null ? null : m_target.getCommand(getTargetRequest());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Command
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Queries the target editpart for a command.
+	 */
+	@Override
+	protected Command getCommand() {
+		return m_target == null ? null : m_target.getCommand(getTargetRequest());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Feedback
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private boolean m_isShowingFeedback;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Feedback
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private boolean m_isShowingFeedback;
 
-  /**
-   * Asks the target editpart to show target feedback and sets the target feedback flag.
-   */
-  protected void showTargetFeedback() {
-    if (m_target != null) {
-      m_target.showTargetFeedback(getTargetRequest());
-    }
-    //
-    m_isShowingFeedback = true;
-  }
+	/**
+	 * Asks the target editpart to show target feedback and sets the target feedback flag.
+	 */
+	protected void showTargetFeedback() {
+		if (m_target != null) {
+			m_target.showTargetFeedback(getTargetRequest());
+		}
+		//
+		m_isShowingFeedback = true;
+	}
 
-  /**
-   * Asks the current target editpart to erase target feedback using the target request. If target
-   * feedback is not being shown, this method does nothing and returns. Otherwise, the target
-   * feedback flag is reset to false, and the target editpart is asked to erase target feedback.
-   * This methods should rarely be overridden.
-   */
-  protected void eraseTargetFeedback() {
-    if (m_isShowingFeedback) {
-      m_isShowingFeedback = false;
-      //
-      if (m_target != null) {
-        Request targetRequest = getTargetRequest();
-        targetRequest.setEraseFeedback(true);
-        try {
-          m_target.eraseTargetFeedback(targetRequest);
-        } finally {
-          targetRequest.setEraseFeedback(false);
-        }
-      }
-    }
-  }
+	/**
+	 * Asks the current target editpart to erase target feedback using the target request. If target
+	 * feedback is not being shown, this method does nothing and returns. Otherwise, the target
+	 * feedback flag is reset to false, and the target editpart is asked to erase target feedback.
+	 * This methods should rarely be overridden.
+	 */
+	protected void eraseTargetFeedback() {
+		if (m_isShowingFeedback) {
+			m_isShowingFeedback = false;
+			//
+			if (m_target != null) {
+				Request targetRequest = getTargetRequest();
+				targetRequest.setEraseFeedback(true);
+				try {
+					m_target.eraseTargetFeedback(targetRequest);
+				} finally {
+					targetRequest.setEraseFeedback(false);
+				}
+			}
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/tools/Tool.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/tools/Tool.java
index 2f0ad0ed1..b881548fe 100644
--- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/tools/Tool.java
+++ b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/tools/Tool.java
@@ -32,572 +32,572 @@
  * @coverage gef.core
  */
 public abstract class Tool {
-  private boolean m_active;
-  private IEditPartViewer m_viewer;
-  private EditDomain m_domain;
-  private boolean m_canUnload = true;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Called when this tool becomes the active tool for the {@link EditDomain}. Implementors can
-   * perform any necessary initialization here.
-   */
-  public void activate() {
-    resetState();
-    m_state = STATE_INIT;
-    m_active = true;
-  }
-
-  /**
-   * Called when another Tool becomes the active tool for the {@link EditDomain}. Implementors can
-   * perform state clean-up or to free resources.
-   */
-  public void deactivate() {
-    m_active = false;
-    setCommand(null);
-    m_operationSet = null;
-  }
-
-  /**
-   * Returns <code>true</code> if the tool is active.
-   */
-  public final boolean isActive() {
-    return m_active;
-  }
-
-  /**
-   * Get {@link IEditPartViewer}.
-   */
-  public final IEditPartViewer getViewer() {
-    return m_viewer;
-  }
-
-  /**
-   * Set {@link IEditPartViewer} into {@link Tool}.
-   */
-  public final void setViewer(IEditPartViewer viewer) {
-    if (m_viewer != viewer) {
-      setCursor(null);
-      m_viewer = viewer;
-      //
-      if (m_viewer != null) {
-        org.eclipse.swt.graphics.Point mouseLocation =
-            m_viewer.getControl().toControl(Display.getCurrent().getCursorLocation());
-        m_currentScreenX = mouseLocation.x;
-        m_currentScreenY = mouseLocation.y;
-      }
-      //
-      refreshCursor();
-    }
-  }
-
-  /**
-   * Returns the {@link EditDomain}.
-   */
-  public final EditDomain getDomain() {
-    return m_domain;
-  }
-
-  /**
-   * Set {@link EditDomain} into {@link Tool}.
-   */
-  public final void setDomain(EditDomain domain) {
-    m_domain = domain;
-  }
-
-  /**
-   * Returns <code>true</code> if the tool is set to unload when its current operation is complete.
-   */
-  protected final boolean unloadWhenFinished() {
-    return m_canUnload;
-  }
-
-  /**
-   * Setting this to <code>true</code> will cause the tool to be unloaded after one operation has
-   * completed. The default value is <code>true</code>. The tool is unloaded, and the edit domains
-   * default tool will be activated.
-   */
-  public final void setUnloadWhenFinished(boolean value) {
-    m_canUnload = value;
-  }
-
-  /**
-   * Called when the current tool operation is to be completed. In other words, the "state machine"
-   * and has accepted the sequence of input (i.e. the mouse gesture). By default, the tool will
-   * either reactivate itself, or ask the edit domain to load the default tool.
-   * <P>
-   * Subclasses should extend this method to first do whatever it is that the tool does, and then
-   * call <code>super</code>.
-   *
-   * @see #unloadWhenFinished()
-   */
-  protected void handleFinished() {
-    if (m_canUnload) {
-      m_domain.loadDefaultTool();
-    } else {
-      // create emulate event
-      Event event = null;
-      //
-      if (m_viewer != null) {
-        event = new Event();
-        event.display = Display.getCurrent();
-        event.widget = m_viewer.getControl();
-        event.type = SWT.MouseMove;
-        event.x = m_currentScreenX;
-        event.y = m_currentScreenY;
-        event.button = m_button;
-        event.stateMask = m_stateMask;
-      }
-      // reload tool
-      deactivate();
-      activate();
-      // send emulate event
-      if (m_viewer != null) {
-        mouseMove(new MouseEvent(event), m_viewer);
-      }
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // OperationSet
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private List<EditPart> m_operationSet;
-
-  /**
-   * Lazily creates and returns the list of {@link EditPart}'s on which the tool operates. The list
-   * is initially <code>null</code>, in which case {@link #createOperationSet()} is called, and its
-   * results cached until the tool is deactivated.
-   */
-  protected final List<EditPart> getOperationSet() {
-    if (m_operationSet == null) {
-      m_operationSet = createOperationSet();
-    }
-    return m_operationSet;
-  }
-
-  /**
-   * Returns a new List of {@link EditPart}'s that this tool is operating on. This method is called
-   * once during {@link #getOperationSet()}, and its result is cached.
-   * <P>
-   * By default, the operations set is the current viewer's entire selection. Subclasses may
-   * override this method to filter or alter the operation set as necessary.
-   */
-  protected List<EditPart> createOperationSet() {
-    return new ArrayList<EditPart>(m_viewer.getSelectedEditParts());
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Command
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Command m_command;
-
-  /**
-   * Execute the currently active command.
-   */
-  protected final void executeCommand() {
-    if (m_command != null) {
-      Command command = m_command;
-      setCommand(null);
-      m_domain.executeCommand(command);
-    }
-  }
-
-  /**
-   * Sets the currently active command.
-   */
-  protected final void setCommand(Command command) {
-    m_command = command;
-    refreshCursor();
-  }
-
-  /**
-   * Returns a new, updated command based on the tools current properties.
-   */
-  protected Command getCommand() {
-    return null;
-  }
-
-  /**
-   * Updates currently command.
-   */
-  protected final void updateCommand() {
-    setCommand(getCommand());
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Cursor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Cursor m_defaultCursor;
-  private Cursor m_disabledCursor;
-
-  /**
-   * Returns the cursor used under normal conditions.
-   */
-  protected Cursor getDefaultCursor() {
-    return m_defaultCursor;
-  }
-
-  /**
-   * Sets the default cursor.
-   */
-  public void setDefaultCursor(Cursor cursor) {
-    if (m_defaultCursor != cursor) {
-      m_defaultCursor = cursor;
-      refreshCursor();
-    }
-  }
-
-  /**
-   * Returns the cursor used under abnormal conditions.
-   */
-  protected Cursor getDisabledCursor() {
-    return m_disabledCursor == null ? getDefaultCursor() : m_disabledCursor;
-  }
-
-  /**
-   * Sets the disabled cursor.
-   */
-  public void setDisabledCursor(Cursor cursor) {
-    if (m_disabledCursor != cursor) {
-      m_disabledCursor = cursor;
-      refreshCursor();
-    }
-  }
-
-  /**
-   * Returns the appropriate cursor for the tools current state. If the tool is in its terminal
-   * state, <code>null</code> is returned. Otherwise, either the default or disabled cursor is
-   * returned, based on the existence of a current command, and whether that current command is
-   * executable.
-   * <P>
-   * Subclasses may override or extend this method to calculate the appropriate cursor based on
-   * other conditions.
-   */
-  protected Cursor calculateCursor() {
-    if (m_state == STATE_NONE) {
-      return null;
-    }
-    if (m_command == null) {
-      return getDisabledCursor();
-    }
-    return getDefaultCursor();
-  }
-
-  /**
-   * Shows the given cursor on the viewer.
-   */
-  protected void setCursor(Cursor cursor) {
-    if (m_viewer != null) {
-      m_viewer.setCursor(cursor);
-    }
-  }
-
-  /**
-   * Sets the cursor being displayed to the appropriate cursor. If the tool is active, the current
-   * cursor being displayed is updates by calling {@link #calculateCursor()}.
-   */
-  public void refreshCursor() {
-    if (isActive()) {
-      setCursor(calculateCursor());
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Low-Level handle MouseEvent
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * The final state for a tool to be in. Once a tool reaches this state, it will not change states
-   * until it is activated() again.
-   */
-  protected static final int STATE_NONE = 0;
-  /**
-   * The first state that a tool is in. The tool will generally be in this state immediately
-   * following {@link #activate()}.
-   */
-  protected static final int STATE_INIT = 1;
-  /**
-   * The state indicating that one or more buttons is pressed, but the user has not moved past the
-   * drag threshold. Many tools will do nothing during this state but wait until
-   * {@link #STATE_DRAG_IN_PROGRESS} is entered.
-   */
-  protected static final int STATE_DRAG = 2;
-  /**
-   * The state indicating that the drag detection theshold has been passed, and a drag is in
-   * progress.
-   */
-  protected static final int STATE_DRAG_IN_PROGRESS = 3;
-  /**
-   * The state indicating that an input event has invalidated the interaction. For example, during a
-   * mouse drag, pressing additional mouse button might invalidate the drag.
-   */
-  protected static final int STATE_INVALID = 4;
-  //
-  private static final int DRAG_THRESHOLD = 5;
-  // mouse event info
-  protected int m_currentScreenX;
-  protected int m_currentScreenY;
-  protected int m_stateMask;
-  protected int m_button;
-  // drag info
-  protected int m_startScreenX;
-  protected int m_startScreenY;
-  protected int m_state;
-  private boolean m_canPastThreshold;
-
-  //
-  private void setEvent(MouseEvent event) {
-    m_currentScreenX = event.x;
-    m_currentScreenY = event.y;
-    m_stateMask = event.stateMask;
-    m_button = event.button;
-  }
-
-  private boolean movedPastThreshold() {
-    if (!m_canPastThreshold) {
-      m_canPastThreshold =
-          Math.abs(m_startScreenX - m_currentScreenX) > DRAG_THRESHOLD
-              || Math.abs(m_startScreenY - m_currentScreenY) > DRAG_THRESHOLD;
-    }
-    return m_canPastThreshold;
-  }
-
-  /**
-   * Handles mouse down events within a viewer. Subclasses wanting to handle this event should
-   * override {@link #handleButtonDown(int)}.
-   */
-  public void mouseDown(MouseEvent event, IEditPartViewer viewer) {
-    setViewer(viewer);
-    setEvent(event);
-    m_startScreenX = event.x;
-    m_startScreenY = event.y;
-    handleButtonDown(event.button);
-  }
-
-  /**
-   * Handles mouse up within a viewer. Subclasses wanting to handle this event should override
-   * {@link #handleButtonUp(int)}.
-   */
-  public void mouseUp(MouseEvent event, IEditPartViewer viewer) {
-    setViewer(viewer);
-    setEvent(event);
-    handleButtonUp(event.button);
-  }
-
-  /**
-   * Handles mouse drag events within a viewer. Subclasses wanting to handle this event should
-   * override {@link #handleDrag()} and/or {@link #handleDragInProgress()}.
-   */
-  public void mouseDrag(MouseEvent event, IEditPartViewer viewer) {
-    setViewer(viewer);
-    boolean wasDragging = movedPastThreshold();
-    setEvent(event);
-    handleDrag();
-    //
-    if (movedPastThreshold()) {
-      if (!wasDragging) {
-        handleDragStarted();
-      }
-      handleDragInProgress();
-    }
-  }
-
-  /**
-   * Handles mouse moves (if the mouse button is up) within a viewer. Subclasses wanting to handle
-   * this event should override {@link #handleMove()}.
-   */
-  public void mouseMove(MouseEvent event, IEditPartViewer viewer) {
-    setViewer(viewer);
-    setEvent(event);
-    if (m_state == STATE_DRAG_IN_PROGRESS) {
-      handleDragInProgress();
-    } else {
-      handleMove();
-    }
-  }
-
-  /**
-   * Handles mouse double click events within a viewer. Subclasses wanting to handle this event
-   * should override {@link #handleDoubleClick(int)}.
-   */
-  public void mouseDoubleClick(MouseEvent event, IEditPartViewer viewer) {
-    setViewer(viewer);
-    setEvent(event);
-    handleDoubleClick(event.button);
-  }
-
-  /**
-   * Receives the mouse entered event.
-   * <p>
-   * FEATURE in SWT: mouseExit comes after mouseEntered on the new . Therefore, if the current
-   * viewer is not <code>null</code>, it means the exit has not been sent yet by SWT. To maintain
-   * proper ordering, GEF fakes the exit and calls {@link #handleViewerExited()}. The real exit will
-   * then be ignored.
-   */
-  public void viewerEntered(MouseEvent event, IEditPartViewer viewer) {
-    setEvent(event);
-    //
-    if (m_viewer != null) {
-      handleViewerExited();
-    }
-    //
-    setViewer(viewer);
-    handleViewerEntered();
-  }
-
-  /**
-   * Handles the mouse exited event. Subclasses wanting to handle this event should override
-   * {@link #handleViewerExited()}.
-   */
-  public void viewerExited(MouseEvent event, IEditPartViewer viewer) {
-    if (m_viewer == viewer) {
-      setEvent(event);
-      handleViewerExited();
-      setViewer(null);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // High-Level handle MouseEvent
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Called when the mouse button has been pressed. Subclasses may override this method to interpret
-   * the meaning of a mouse down.
-   */
-  protected void handleButtonDown(int button) {
-  }
-
-  /**
-   * Called when the mouse button has been released. Subclasses may override this method to
-   * interpret the mouse up.
-   */
-  protected void handleButtonUp(int button) {
-  }
-
-  /**
-   * Handles high-level processing of a mouse move. Subclasses may extend this method to process
-   * mouse moves.
-   */
-  protected void handleMove() {
-  }
-
-  /**
-   * Called whenever the mouse is being dragged. This method continues to be called even once
-   * {@link #handleDragInProgress()} starts getting called. Subclasses may override this method to
-   * interpret a drag.
-   */
-  protected void handleDrag() {
-  }
-
-  /**
-   * Called only one time during a drag when the drag threshold has been exceeded. Subclasses may
-   * override to interpret the drag starting.
-   */
-  protected void handleDragStarted() {
-  }
-
-  /**
-   * Called whenever a mouse is being dragged and the drag threshold has been exceeded. Prior to the
-   * drag threshold being exceeded, only {@link #handleDrag()} is called. This method gets called
-   * repeatedly for every mouse move during the drag. Subclasses may override this method to
-   * interpret the drag.
-   */
-  protected void handleDragInProgress() {
-  }
-
-  /**
-   * Called when a mouse double-click occurs. Subclasses may override this method to interpret
-   * double-clicks.
-   */
-  protected void handleDoubleClick(int button) {
-  }
-
-  /**
-   * Called when the mouse enters an {@link IEditPartViewer}. Subclasses may extend this method to
-   * process the viewer enter.
-   */
-  protected void handleViewerEntered() {
-  }
-
-  /**
-   * Called when the mouse exits an {@link IEditPartViewer}. Subclasses may extend this method to
-   * process the viewer enter.
-   */
-  protected void handleViewerExited() {
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Drop Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Returns the current x, y <b>*absolute*</b> position of the mouse cursor.
-   */
-  public final Point getLocation() {
-    return new Point(m_currentScreenX + m_viewer.getHOffset(), m_currentScreenY
-        + m_viewer.getVOffset());
-  }
-
-  /**
-   * Returns the starting mouse <b>*absolute*</b> location for the current tool operation. This is
-   * typically the mouse location where the user first pressed a mouse button. This is important for
-   * tools that interpret mouse drags.
-   */
-  protected Point getStartLocation() {
-    return new Point(m_startScreenX + m_viewer.getHOffset(), m_startScreenY + m_viewer.getVOffset());
-  }
-
-  /**
-   * Return the number of pixels that the mouse has been moved since that drag was started. The drag
-   * start is determined by where the mouse button was first pressed.
-   */
-  protected Dimension getDragMoveDelta() {
-    return getLocation().getDifference(getStartLocation());
-  }
-
-  /**
-   * Resets all state fields to default values.
-   */
-  protected void resetState() {
-    m_currentScreenX = 0;
-    m_currentScreenY = 0;
-    m_stateMask = 0;
-    m_button = 0;
-    //
-    m_startScreenX = 0;
-    m_startScreenY = 0;
-    //
-    m_canPastThreshold = false;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Handle KeyEvent
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Called when the key has been pressed on a viewer.
-   */
-  public void keyPressed(KeyEvent event, IEditPartViewer viewer) {
-  }
-
-  /**
-   * Called when the key has been released on a viewer.
-   */
-  public void keyReleased(KeyEvent event, IEditPartViewer viewer) {
-  }
+	private boolean m_active;
+	private IEditPartViewer m_viewer;
+	private EditDomain m_domain;
+	private boolean m_canUnload = true;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Called when this tool becomes the active tool for the {@link EditDomain}. Implementors can
+	 * perform any necessary initialization here.
+	 */
+	public void activate() {
+		resetState();
+		m_state = STATE_INIT;
+		m_active = true;
+	}
+
+	/**
+	 * Called when another Tool becomes the active tool for the {@link EditDomain}. Implementors can
+	 * perform state clean-up or to free resources.
+	 */
+	public void deactivate() {
+		m_active = false;
+		setCommand(null);
+		m_operationSet = null;
+	}
+
+	/**
+	 * Returns <code>true</code> if the tool is active.
+	 */
+	public final boolean isActive() {
+		return m_active;
+	}
+
+	/**
+	 * Get {@link IEditPartViewer}.
+	 */
+	public final IEditPartViewer getViewer() {
+		return m_viewer;
+	}
+
+	/**
+	 * Set {@link IEditPartViewer} into {@link Tool}.
+	 */
+	public final void setViewer(IEditPartViewer viewer) {
+		if (m_viewer != viewer) {
+			setCursor(null);
+			m_viewer = viewer;
+			//
+			if (m_viewer != null) {
+				org.eclipse.swt.graphics.Point mouseLocation =
+						m_viewer.getControl().toControl(Display.getCurrent().getCursorLocation());
+				m_currentScreenX = mouseLocation.x;
+				m_currentScreenY = mouseLocation.y;
+			}
+			//
+			refreshCursor();
+		}
+	}
+
+	/**
+	 * Returns the {@link EditDomain}.
+	 */
+	public final EditDomain getDomain() {
+		return m_domain;
+	}
+
+	/**
+	 * Set {@link EditDomain} into {@link Tool}.
+	 */
+	public final void setDomain(EditDomain domain) {
+		m_domain = domain;
+	}
+
+	/**
+	 * Returns <code>true</code> if the tool is set to unload when its current operation is complete.
+	 */
+	protected final boolean unloadWhenFinished() {
+		return m_canUnload;
+	}
+
+	/**
+	 * Setting this to <code>true</code> will cause the tool to be unloaded after one operation has
+	 * completed. The default value is <code>true</code>. The tool is unloaded, and the edit domains
+	 * default tool will be activated.
+	 */
+	public final void setUnloadWhenFinished(boolean value) {
+		m_canUnload = value;
+	}
+
+	/**
+	 * Called when the current tool operation is to be completed. In other words, the "state machine"
+	 * and has accepted the sequence of input (i.e. the mouse gesture). By default, the tool will
+	 * either reactivate itself, or ask the edit domain to load the default tool.
+	 * <P>
+	 * Subclasses should extend this method to first do whatever it is that the tool does, and then
+	 * call <code>super</code>.
+	 *
+	 * @see #unloadWhenFinished()
+	 */
+	protected void handleFinished() {
+		if (m_canUnload) {
+			m_domain.loadDefaultTool();
+		} else {
+			// create emulate event
+			Event event = null;
+			//
+			if (m_viewer != null) {
+				event = new Event();
+				event.display = Display.getCurrent();
+				event.widget = m_viewer.getControl();
+				event.type = SWT.MouseMove;
+				event.x = m_currentScreenX;
+				event.y = m_currentScreenY;
+				event.button = m_button;
+				event.stateMask = m_stateMask;
+			}
+			// reload tool
+			deactivate();
+			activate();
+			// send emulate event
+			if (m_viewer != null) {
+				mouseMove(new MouseEvent(event), m_viewer);
+			}
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// OperationSet
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private List<EditPart> m_operationSet;
+
+	/**
+	 * Lazily creates and returns the list of {@link EditPart}'s on which the tool operates. The list
+	 * is initially <code>null</code>, in which case {@link #createOperationSet()} is called, and its
+	 * results cached until the tool is deactivated.
+	 */
+	protected final List<EditPart> getOperationSet() {
+		if (m_operationSet == null) {
+			m_operationSet = createOperationSet();
+		}
+		return m_operationSet;
+	}
+
+	/**
+	 * Returns a new List of {@link EditPart}'s that this tool is operating on. This method is called
+	 * once during {@link #getOperationSet()}, and its result is cached.
+	 * <P>
+	 * By default, the operations set is the current viewer's entire selection. Subclasses may
+	 * override this method to filter or alter the operation set as necessary.
+	 */
+	protected List<EditPart> createOperationSet() {
+		return new ArrayList<EditPart>(m_viewer.getSelectedEditParts());
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Command
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Command m_command;
+
+	/**
+	 * Execute the currently active command.
+	 */
+	protected final void executeCommand() {
+		if (m_command != null) {
+			Command command = m_command;
+			setCommand(null);
+			m_domain.executeCommand(command);
+		}
+	}
+
+	/**
+	 * Sets the currently active command.
+	 */
+	protected final void setCommand(Command command) {
+		m_command = command;
+		refreshCursor();
+	}
+
+	/**
+	 * Returns a new, updated command based on the tools current properties.
+	 */
+	protected Command getCommand() {
+		return null;
+	}
+
+	/**
+	 * Updates currently command.
+	 */
+	protected final void updateCommand() {
+		setCommand(getCommand());
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Cursor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Cursor m_defaultCursor;
+	private Cursor m_disabledCursor;
+
+	/**
+	 * Returns the cursor used under normal conditions.
+	 */
+	protected Cursor getDefaultCursor() {
+		return m_defaultCursor;
+	}
+
+	/**
+	 * Sets the default cursor.
+	 */
+	public void setDefaultCursor(Cursor cursor) {
+		if (m_defaultCursor != cursor) {
+			m_defaultCursor = cursor;
+			refreshCursor();
+		}
+	}
+
+	/**
+	 * Returns the cursor used under abnormal conditions.
+	 */
+	protected Cursor getDisabledCursor() {
+		return m_disabledCursor == null ? getDefaultCursor() : m_disabledCursor;
+	}
+
+	/**
+	 * Sets the disabled cursor.
+	 */
+	public void setDisabledCursor(Cursor cursor) {
+		if (m_disabledCursor != cursor) {
+			m_disabledCursor = cursor;
+			refreshCursor();
+		}
+	}
+
+	/**
+	 * Returns the appropriate cursor for the tools current state. If the tool is in its terminal
+	 * state, <code>null</code> is returned. Otherwise, either the default or disabled cursor is
+	 * returned, based on the existence of a current command, and whether that current command is
+	 * executable.
+	 * <P>
+	 * Subclasses may override or extend this method to calculate the appropriate cursor based on
+	 * other conditions.
+	 */
+	protected Cursor calculateCursor() {
+		if (m_state == STATE_NONE) {
+			return null;
+		}
+		if (m_command == null) {
+			return getDisabledCursor();
+		}
+		return getDefaultCursor();
+	}
+
+	/**
+	 * Shows the given cursor on the viewer.
+	 */
+	protected void setCursor(Cursor cursor) {
+		if (m_viewer != null) {
+			m_viewer.setCursor(cursor);
+		}
+	}
+
+	/**
+	 * Sets the cursor being displayed to the appropriate cursor. If the tool is active, the current
+	 * cursor being displayed is updates by calling {@link #calculateCursor()}.
+	 */
+	public void refreshCursor() {
+		if (isActive()) {
+			setCursor(calculateCursor());
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Low-Level handle MouseEvent
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * The final state for a tool to be in. Once a tool reaches this state, it will not change states
+	 * until it is activated() again.
+	 */
+	protected static final int STATE_NONE = 0;
+	/**
+	 * The first state that a tool is in. The tool will generally be in this state immediately
+	 * following {@link #activate()}.
+	 */
+	protected static final int STATE_INIT = 1;
+	/**
+	 * The state indicating that one or more buttons is pressed, but the user has not moved past the
+	 * drag threshold. Many tools will do nothing during this state but wait until
+	 * {@link #STATE_DRAG_IN_PROGRESS} is entered.
+	 */
+	protected static final int STATE_DRAG = 2;
+	/**
+	 * The state indicating that the drag detection theshold has been passed, and a drag is in
+	 * progress.
+	 */
+	protected static final int STATE_DRAG_IN_PROGRESS = 3;
+	/**
+	 * The state indicating that an input event has invalidated the interaction. For example, during a
+	 * mouse drag, pressing additional mouse button might invalidate the drag.
+	 */
+	protected static final int STATE_INVALID = 4;
+	//
+	private static final int DRAG_THRESHOLD = 5;
+	// mouse event info
+	protected int m_currentScreenX;
+	protected int m_currentScreenY;
+	protected int m_stateMask;
+	protected int m_button;
+	// drag info
+	protected int m_startScreenX;
+	protected int m_startScreenY;
+	protected int m_state;
+	private boolean m_canPastThreshold;
+
+	//
+	private void setEvent(MouseEvent event) {
+		m_currentScreenX = event.x;
+		m_currentScreenY = event.y;
+		m_stateMask = event.stateMask;
+		m_button = event.button;
+	}
+
+	private boolean movedPastThreshold() {
+		if (!m_canPastThreshold) {
+			m_canPastThreshold =
+					Math.abs(m_startScreenX - m_currentScreenX) > DRAG_THRESHOLD
+					|| Math.abs(m_startScreenY - m_currentScreenY) > DRAG_THRESHOLD;
+		}
+		return m_canPastThreshold;
+	}
+
+	/**
+	 * Handles mouse down events within a viewer. Subclasses wanting to handle this event should
+	 * override {@link #handleButtonDown(int)}.
+	 */
+	public void mouseDown(MouseEvent event, IEditPartViewer viewer) {
+		setViewer(viewer);
+		setEvent(event);
+		m_startScreenX = event.x;
+		m_startScreenY = event.y;
+		handleButtonDown(event.button);
+	}
+
+	/**
+	 * Handles mouse up within a viewer. Subclasses wanting to handle this event should override
+	 * {@link #handleButtonUp(int)}.
+	 */
+	public void mouseUp(MouseEvent event, IEditPartViewer viewer) {
+		setViewer(viewer);
+		setEvent(event);
+		handleButtonUp(event.button);
+	}
+
+	/**
+	 * Handles mouse drag events within a viewer. Subclasses wanting to handle this event should
+	 * override {@link #handleDrag()} and/or {@link #handleDragInProgress()}.
+	 */
+	public void mouseDrag(MouseEvent event, IEditPartViewer viewer) {
+		setViewer(viewer);
+		boolean wasDragging = movedPastThreshold();
+		setEvent(event);
+		handleDrag();
+		//
+		if (movedPastThreshold()) {
+			if (!wasDragging) {
+				handleDragStarted();
+			}
+			handleDragInProgress();
+		}
+	}
+
+	/**
+	 * Handles mouse moves (if the mouse button is up) within a viewer. Subclasses wanting to handle
+	 * this event should override {@link #handleMove()}.
+	 */
+	public void mouseMove(MouseEvent event, IEditPartViewer viewer) {
+		setViewer(viewer);
+		setEvent(event);
+		if (m_state == STATE_DRAG_IN_PROGRESS) {
+			handleDragInProgress();
+		} else {
+			handleMove();
+		}
+	}
+
+	/**
+	 * Handles mouse double click events within a viewer. Subclasses wanting to handle this event
+	 * should override {@link #handleDoubleClick(int)}.
+	 */
+	public void mouseDoubleClick(MouseEvent event, IEditPartViewer viewer) {
+		setViewer(viewer);
+		setEvent(event);
+		handleDoubleClick(event.button);
+	}
+
+	/**
+	 * Receives the mouse entered event.
+	 * <p>
+	 * FEATURE in SWT: mouseExit comes after mouseEntered on the new . Therefore, if the current
+	 * viewer is not <code>null</code>, it means the exit has not been sent yet by SWT. To maintain
+	 * proper ordering, GEF fakes the exit and calls {@link #handleViewerExited()}. The real exit will
+	 * then be ignored.
+	 */
+	public void viewerEntered(MouseEvent event, IEditPartViewer viewer) {
+		setEvent(event);
+		//
+		if (m_viewer != null) {
+			handleViewerExited();
+		}
+		//
+		setViewer(viewer);
+		handleViewerEntered();
+	}
+
+	/**
+	 * Handles the mouse exited event. Subclasses wanting to handle this event should override
+	 * {@link #handleViewerExited()}.
+	 */
+	public void viewerExited(MouseEvent event, IEditPartViewer viewer) {
+		if (m_viewer == viewer) {
+			setEvent(event);
+			handleViewerExited();
+			setViewer(null);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// High-Level handle MouseEvent
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Called when the mouse button has been pressed. Subclasses may override this method to interpret
+	 * the meaning of a mouse down.
+	 */
+	protected void handleButtonDown(int button) {
+	}
+
+	/**
+	 * Called when the mouse button has been released. Subclasses may override this method to
+	 * interpret the mouse up.
+	 */
+	protected void handleButtonUp(int button) {
+	}
+
+	/**
+	 * Handles high-level processing of a mouse move. Subclasses may extend this method to process
+	 * mouse moves.
+	 */
+	protected void handleMove() {
+	}
+
+	/**
+	 * Called whenever the mouse is being dragged. This method continues to be called even once
+	 * {@link #handleDragInProgress()} starts getting called. Subclasses may override this method to
+	 * interpret a drag.
+	 */
+	protected void handleDrag() {
+	}
+
+	/**
+	 * Called only one time during a drag when the drag threshold has been exceeded. Subclasses may
+	 * override to interpret the drag starting.
+	 */
+	protected void handleDragStarted() {
+	}
+
+	/**
+	 * Called whenever a mouse is being dragged and the drag threshold has been exceeded. Prior to the
+	 * drag threshold being exceeded, only {@link #handleDrag()} is called. This method gets called
+	 * repeatedly for every mouse move during the drag. Subclasses may override this method to
+	 * interpret the drag.
+	 */
+	protected void handleDragInProgress() {
+	}
+
+	/**
+	 * Called when a mouse double-click occurs. Subclasses may override this method to interpret
+	 * double-clicks.
+	 */
+	protected void handleDoubleClick(int button) {
+	}
+
+	/**
+	 * Called when the mouse enters an {@link IEditPartViewer}. Subclasses may extend this method to
+	 * process the viewer enter.
+	 */
+	protected void handleViewerEntered() {
+	}
+
+	/**
+	 * Called when the mouse exits an {@link IEditPartViewer}. Subclasses may extend this method to
+	 * process the viewer enter.
+	 */
+	protected void handleViewerExited() {
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Drop Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Returns the current x, y <b>*absolute*</b> position of the mouse cursor.
+	 */
+	public final Point getLocation() {
+		return new Point(m_currentScreenX + m_viewer.getHOffset(), m_currentScreenY
+				+ m_viewer.getVOffset());
+	}
+
+	/**
+	 * Returns the starting mouse <b>*absolute*</b> location for the current tool operation. This is
+	 * typically the mouse location where the user first pressed a mouse button. This is important for
+	 * tools that interpret mouse drags.
+	 */
+	protected Point getStartLocation() {
+		return new Point(m_startScreenX + m_viewer.getHOffset(), m_startScreenY + m_viewer.getVOffset());
+	}
+
+	/**
+	 * Return the number of pixels that the mouse has been moved since that drag was started. The drag
+	 * start is determined by where the mouse button was first pressed.
+	 */
+	protected Dimension getDragMoveDelta() {
+		return getLocation().getDifference(getStartLocation());
+	}
+
+	/**
+	 * Resets all state fields to default values.
+	 */
+	protected void resetState() {
+		m_currentScreenX = 0;
+		m_currentScreenY = 0;
+		m_stateMask = 0;
+		m_button = 0;
+		//
+		m_startScreenX = 0;
+		m_startScreenY = 0;
+		//
+		m_canPastThreshold = false;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Handle KeyEvent
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Called when the key has been pressed on a viewer.
+	 */
+	public void keyPressed(KeyEvent event, IEditPartViewer viewer) {
+	}
+
+	/**
+	 * Called when the key has been released on a viewer.
+	 */
+	public void keyReleased(KeyEvent event, IEditPartViewer viewer) {
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/tools/ToolUtilities.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/tools/ToolUtilities.java
index 9c195db3c..7beaa1790 100644
--- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/tools/ToolUtilities.java
+++ b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/tools/ToolUtilities.java
@@ -25,52 +25,52 @@
  * @coverage gef.core
  */
 public class ToolUtilities {
-  /**
-   * Returns a list containing the top level selected {@link EditPart}'s based on the viewer's
-   * selection. If selection parents of edit parts is differed returns empty list.
-   */
-  public static List<EditPart> getSelectionWithoutDependants(IEditPartViewer viewer) {
-    List<EditPart> operationSet = Lists.newArrayList();
-    // add selected EditPart's only if their parent is not added yet
-    {
-      List<EditPart> selectedParts = viewer.getSelectedEditParts();
-      for (EditPart part : selectedParts) {
-        if (!isAncestorContainedIn(selectedParts, part)) {
-          operationSet.add(part);
-        }
-      }
-    }
-    // check that all EditPart's have same parent
-    {
-      EditPart commonParent = null;
-      for (EditPart editPart : operationSet) {
-        if (commonParent == null) {
-          commonParent = editPart.getParent();
-        } else if (editPart.getParent() != commonParent) {
-          return Collections.emptyList();
-        }
-      }
-    }
-    // OK, we have valid set
-    return operationSet;
-  }
+	/**
+	 * Returns a list containing the top level selected {@link EditPart}'s based on the viewer's
+	 * selection. If selection parents of edit parts is differed returns empty list.
+	 */
+	public static List<EditPart> getSelectionWithoutDependants(IEditPartViewer viewer) {
+		List<EditPart> operationSet = Lists.newArrayList();
+		// add selected EditPart's only if their parent is not added yet
+		{
+			List<EditPart> selectedParts = viewer.getSelectedEditParts();
+			for (EditPart part : selectedParts) {
+				if (!isAncestorContainedIn(selectedParts, part)) {
+					operationSet.add(part);
+				}
+			}
+		}
+		// check that all EditPart's have same parent
+		{
+			EditPart commonParent = null;
+			for (EditPart editPart : operationSet) {
+				if (commonParent == null) {
+					commonParent = editPart.getParent();
+				} else if (editPart.getParent() != commonParent) {
+					return Collections.emptyList();
+				}
+			}
+		}
+		// OK, we have valid set
+		return operationSet;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Internal
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if <code>containers</code> contains parent of given {@link EditPart}.
-   */
-  private static boolean isAncestorContainedIn(List<EditPart> container, EditPart part) {
-    EditPart parent = part.getParent();
-    while (parent != null) {
-      if (container.contains(parent)) {
-        return true;
-      }
-      parent = parent.getParent();
-    }
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Internal
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if <code>containers</code> contains parent of given {@link EditPart}.
+	 */
+	private static boolean isAncestorContainedIn(List<EditPart> container, EditPart part) {
+		EditPart parent = part.getParent();
+		while (parent != null) {
+			if (container.contains(parent)) {
+				return true;
+			}
+			parent = parent.getParent();
+		}
+		return false;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/graphical/GraphicalEditPart.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/graphical/GraphicalEditPart.java
index cce1fc3fc..e1c2fa0c1 100644
--- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/graphical/GraphicalEditPart.java
+++ b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/graphical/GraphicalEditPart.java
@@ -21,97 +21,97 @@
  * @coverage gef.graphical
  */
 public abstract class GraphicalEditPart extends EditPart {
-  private Figure m_figure;
+	private Figure m_figure;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Figure
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * The default implementation calls {@link #createFigure()} if the figure is currently
-   * <code>null</code>.
-   */
-  public Figure getFigure() {
-    if (m_figure == null) {
-      m_figure = createFigure();
-    }
-    return m_figure;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Figure
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * The default implementation calls {@link #createFigure()} if the figure is currently
+	 * <code>null</code>.
+	 */
+	public Figure getFigure() {
+		if (m_figure == null) {
+			m_figure = createFigure();
+		}
+		return m_figure;
+	}
 
-  /**
-   * The {@link Figure} into which childrens' {@link Figure}s will be added.
-   */
-  public Figure getContentPane() {
-    return getFigure();
-  }
+	/**
+	 * The {@link Figure} into which childrens' {@link Figure}s will be added.
+	 */
+	public Figure getContentPane() {
+		return getFigure();
+	}
 
-  /**
-   * Creates the <code>{@link Figure}</code> to be used as this part's <i>visuals</i>. This is
-   * called from {@link #getFigure()} if the figure has not been created.
-   */
-  protected abstract Figure createFigure();
+	/**
+	 * Creates the <code>{@link Figure}</code> to be used as this part's <i>visuals</i>. This is
+	 * called from {@link #getFigure()} if the figure has not been created.
+	 */
+	protected abstract Figure createFigure();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // EditPart
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds the child's {@link Figure} to the {@link #getContentPane() contentPane}.
-   */
-  @Override
-  protected void addChildVisual(EditPart childPart, int index) {
-    GraphicalEditPart graphicalChildPart = (GraphicalEditPart) childPart;
-    if (!graphicalChildPart.addSelfVisual(index)) {
-      getContentPane().add(graphicalChildPart.getFigure(), index);
-    }
-    graphicalChildPart.getFigure().setData(childPart);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// EditPart
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds the child's {@link Figure} to the {@link #getContentPane() contentPane}.
+	 */
+	@Override
+	protected void addChildVisual(EditPart childPart, int index) {
+		GraphicalEditPart graphicalChildPart = (GraphicalEditPart) childPart;
+		if (!graphicalChildPart.addSelfVisual(index)) {
+			getContentPane().add(graphicalChildPart.getFigure(), index);
+		}
+		graphicalChildPart.getFigure().setData(childPart);
+	}
 
-  /**
-   * Allows the child to manage graphical adding by itself.
-   *
-   * @return <code>true</code> if edit part added it's figure itself.
-   */
-  protected boolean addSelfVisual(int index) {
-    return false;
-  }
+	/**
+	 * Allows the child to manage graphical adding by itself.
+	 *
+	 * @return <code>true</code> if edit part added it's figure itself.
+	 */
+	protected boolean addSelfVisual(int index) {
+		return false;
+	}
 
-  /**
-   * Remove the child's {@link Figure} to the {@link #getContentPane() contentPane}.
-   */
-  @Override
-  protected void removeChildVisual(EditPart childPart) {
-    GraphicalEditPart graphicalChildPart = (GraphicalEditPart) childPart;
-    if (!graphicalChildPart.removeSelfVisual()) {
-      getContentPane().remove(graphicalChildPart.getFigure());
-    }
-    graphicalChildPart.getFigure().setData(null);
-  }
+	/**
+	 * Remove the child's {@link Figure} to the {@link #getContentPane() contentPane}.
+	 */
+	@Override
+	protected void removeChildVisual(EditPart childPart) {
+		GraphicalEditPart graphicalChildPart = (GraphicalEditPart) childPart;
+		if (!graphicalChildPart.removeSelfVisual()) {
+			getContentPane().remove(graphicalChildPart.getFigure());
+		}
+		graphicalChildPart.getFigure().setData(null);
+	}
 
-  /**
-   * Allows the child to manage graphical removing by itself. In the most cases, edit part which
-   * added itself should remove itself as well.
-   *
-   * @return <code>true</code> if edit part removed it's figure itself.
-   */
-  protected boolean removeSelfVisual() {
-    return false;
-  }
+	/**
+	 * Allows the child to manage graphical removing by itself. In the most cases, edit part which
+	 * added itself should remove itself as well.
+	 *
+	 * @return <code>true</code> if edit part removed it's figure itself.
+	 */
+	protected boolean removeSelfVisual() {
+		return false;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // DragTracking
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Returns a {@link Tool} for dragging this {@link EditPart}. The SelectionTool is the only
-   * {@link Tool} by default that calls this method. The SelectionTool will use a SelectionRequest
-   * to provide information such as which mouse button is down, and what modifier keys are pressed.
-   */
-  @Override
-  public Tool getDragTrackerTool(Request request) {
-    return new DragEditPartTracker(this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// DragTracking
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Returns a {@link Tool} for dragging this {@link EditPart}. The SelectionTool is the only
+	 * {@link Tool} by default that calls this method. The SelectionTool will use a SelectionRequest
+	 * to provide information such as which mouse button is down, and what modifier keys are pressed.
+	 */
+	@Override
+	public Tool getDragTrackerTool(Request request) {
+		return new DragEditPartTracker(this);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/graphical/handles/Handle.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/graphical/handles/Handle.java
index fb20d8290..b0ee7c31e 100644
--- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/graphical/handles/Handle.java
+++ b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/graphical/handles/Handle.java
@@ -24,115 +24,115 @@
  * @coverage gef.graphical
  */
 public abstract class Handle extends Figure implements IAncestorListener {
-  private final GraphicalEditPart m_owner;
-  private final ILocator m_locator;
+	private final GraphicalEditPart m_owner;
+	private final ILocator m_locator;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Creates a handle for the given <code>{@link GraphicalEditPart}</code> using the given
-   * <code>{@link ILocator}</code>.
-   */
-  public Handle(GraphicalEditPart owner, ILocator locator) {
-    m_owner = owner;
-    m_locator = locator;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Creates a handle for the given <code>{@link GraphicalEditPart}</code> using the given
+	 * <code>{@link ILocator}</code>.
+	 */
+	public Handle(GraphicalEditPart owner, ILocator locator) {
+		m_owner = owner;
+		m_locator = locator;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Figure
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void addNotify() {
-    super.addNotify();
-    getOwnerFigure().addAncestorListener(this);
-    revalidate();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Figure
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void addNotify() {
+		super.addNotify();
+		getOwnerFigure().addAncestorListener(this);
+		revalidate();
+	}
 
-  @Override
-  protected void removeNotify() {
-    getOwnerFigure().removeAncestorListener(this);
-    super.removeNotify();
-  }
+	@Override
+	protected void removeNotify() {
+		getOwnerFigure().removeAncestorListener(this);
+		super.removeNotify();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IAncestorListener
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void ancestorMoved(Figure ancestor) {
-    revalidate();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IAncestorListener
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void ancestorMoved(Figure ancestor) {
+		revalidate();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Revalidate
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void revalidate() {
-    getLocator().relocate(this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Revalidate
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void revalidate() {
+		getLocator().relocate(this);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Returns the <code>{@link GraphicalEditPart}</code> associated with this handle.
-   */
-  protected final GraphicalEditPart getOwner() {
-    return m_owner;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Returns the <code>{@link GraphicalEditPart}</code> associated with this handle.
+	 */
+	protected final GraphicalEditPart getOwner() {
+		return m_owner;
+	}
 
-  /**
-   * Convenience method to return the owner's figure.
-   */
-  protected final Figure getOwnerFigure() {
-    return getOwner().getFigure();
-  }
+	/**
+	 * Convenience method to return the owner's figure.
+	 */
+	protected final Figure getOwnerFigure() {
+		return getOwner().getFigure();
+	}
 
-  /**
-   * Returns the <code>{@link ILocator}</code> used to position this handle.
-   */
-  protected final ILocator getLocator() {
-    return m_locator;
-  }
+	/**
+	 * Returns the <code>{@link ILocator}</code> used to position this handle.
+	 */
+	protected final ILocator getLocator() {
+		return m_locator;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // DragTracker
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Tool m_dragTracker;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// DragTracker
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Tool m_dragTracker;
 
-  /**
-   * Returns the drag tracker {@link Tool} to use when the user clicks on this handle. If the drag
-   * tracker has not been set, it will be lazily created by calling {@link #createDragTracker()}.
-   */
-  public Tool getDragTrackerTool() {
-    if (m_dragTracker == null) {
-      m_dragTracker = createDragTrackerTool();
-    }
-    return m_dragTracker;
-  }
+	/**
+	 * Returns the drag tracker {@link Tool} to use when the user clicks on this handle. If the drag
+	 * tracker has not been set, it will be lazily created by calling {@link #createDragTracker()}.
+	 */
+	public Tool getDragTrackerTool() {
+		if (m_dragTracker == null) {
+			m_dragTracker = createDragTrackerTool();
+		}
+		return m_dragTracker;
+	}
 
-  /**
-   * Sets the drag tracker {@link Tool} for this handle.
-   */
-  public void setDragTrackerTool(Tool dragTracker) {
-    m_dragTracker = dragTracker;
-  }
+	/**
+	 * Sets the drag tracker {@link Tool} for this handle.
+	 */
+	public void setDragTrackerTool(Tool dragTracker) {
+		m_dragTracker = dragTracker;
+	}
 
-  /**
-   * Creates a new drag tracker {@link Tool} to be returned by {@link #getDragTracker()}.
-   */
-  protected final Tool createDragTrackerTool() {
-    return null;
-  }
+	/**
+	 * Creates a new drag tracker {@link Tool} to be returned by {@link #getDragTracker()}.
+	 */
+	protected final Tool createDragTrackerTool() {
+		return null;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/graphical/handles/MoveHandle.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/graphical/handles/MoveHandle.java
index ce8dfa517..02d743533 100644
--- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/graphical/handles/MoveHandle.java
+++ b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/graphical/handles/MoveHandle.java
@@ -25,45 +25,45 @@
  * @coverage gef.graphical
  */
 public class MoveHandle extends Handle {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Creates a handle for the given <code>{@link GraphicalEditPart}</code> using
-   * <code>{@link MoveHandleLocator}</code>.
-   */
-  public MoveHandle(GraphicalEditPart owner) {
-    this(owner, new MoveHandleLocator(owner.getFigure()));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Creates a handle for the given <code>{@link GraphicalEditPart}</code> using
+	 * <code>{@link MoveHandleLocator}</code>.
+	 */
+	public MoveHandle(GraphicalEditPart owner) {
+		this(owner, new MoveHandleLocator(owner.getFigure()));
+	}
 
-  /**
-   * Creates a handle for the given <code>{@link EditPart}</code> using the given
-   * <code>{@link ILocator}</code>.
-   */
-  public MoveHandle(GraphicalEditPart owner, ILocator locator) {
-    super(owner, locator);
-    setBorder(new LineBorder(1));
-    setCursor(ICursorConstants.SIZEALL);
-    // set drag tracker
-    {
-      Tool tracker = new DragEditPartTracker(owner);
-      tracker.setDefaultCursor(getCursor());
-      setDragTrackerTool(tracker);
-    }
-  }
+	/**
+	 * Creates a handle for the given <code>{@link EditPart}</code> using the given
+	 * <code>{@link ILocator}</code>.
+	 */
+	public MoveHandle(GraphicalEditPart owner, ILocator locator) {
+		super(owner, locator);
+		setBorder(new LineBorder(1));
+		setCursor(ICursorConstants.SIZEALL);
+		// set drag tracker
+		{
+			Tool tracker = new DragEditPartTracker(owner);
+			tracker.setDefaultCursor(getCursor());
+			setDragTrackerTool(tracker);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Figure
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean containsPoint(int x, int y) {
-    if (!super.containsPoint(x, y)) {
-      return false;
-    }
-    return !getBounds().getCopy().shrink(2, 2).contains(x, y);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Figure
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean containsPoint(int x, int y) {
+		if (!super.containsPoint(x, y)) {
+			return false;
+		}
+		return !getBounds().getCopy().shrink(2, 2).contains(x, y);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/graphical/handles/MoveHandleLocator.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/graphical/handles/MoveHandleLocator.java
index 36c0dea85..dbbe9440f 100644
--- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/graphical/handles/MoveHandleLocator.java
+++ b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/graphical/handles/MoveHandleLocator.java
@@ -25,37 +25,37 @@
  * @coverage gef.graphical
  */
 public class MoveHandleLocator implements ILocator {
-  private final Figure m_reference;
+	private final Figure m_reference;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Creates a new {@link MoveHandleLocator} and sets its reference figure to <code>ref</code>. The
-   * reference figure should be the handle's owner figure.
-   */
-  public MoveHandleLocator(Figure reference) {
-    m_reference = reference;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Creates a new {@link MoveHandleLocator} and sets its reference figure to <code>ref</code>. The
+	 * reference figure should be the handle's owner figure.
+	 */
+	public MoveHandleLocator(Figure reference) {
+		m_reference = reference;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ILocator
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets the handle's bounds to that of its owner figure's bounds, expanded by the handle's
-   * {@link Insets}.
-   */
-  @Override
-  public void relocate(Figure target) {
-    Rectangle bounds = m_reference.getBounds().getResized(-1, -1);
-    FigureUtils.translateFigureToFigure(m_reference, target, bounds);
-    //
-    bounds.expand(target.getInsets());
-    bounds.resize(1, 1);
-    target.setBounds(bounds);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ILocator
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets the handle's bounds to that of its owner figure's bounds, expanded by the handle's
+	 * {@link Insets}.
+	 */
+	@Override
+	public void relocate(Figure target) {
+		Rectangle bounds = m_reference.getBounds().getResized(-1, -1);
+		FigureUtils.translateFigureToFigure(m_reference, target, bounds);
+		//
+		bounds.expand(target.getInsets());
+		bounds.resize(1, 1);
+		target.setBounds(bounds);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/graphical/handles/ResizeHandle.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/graphical/handles/ResizeHandle.java
index 9c0b26b45..142b4943d 100644
--- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/graphical/handles/ResizeHandle.java
+++ b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/graphical/handles/ResizeHandle.java
@@ -23,37 +23,37 @@
  * @coverage gef.graphical
  */
 public class ResizeHandle extends SquareHandle {
-  private final int m_direction;
+	private final int m_direction;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Creates a new ResizeHandle for the given {@link GraphicalEditPart}. The <code>direction</code>
-   * is the relative direction from the center of the owner figure.
-   */
-  public ResizeHandle(GraphicalEditPart owner, int direction) {
-    this(owner, direction, new RelativeLocator(owner.getFigure(), direction));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Creates a new ResizeHandle for the given {@link GraphicalEditPart}. The <code>direction</code>
+	 * is the relative direction from the center of the owner figure.
+	 */
+	public ResizeHandle(GraphicalEditPart owner, int direction) {
+		this(owner, direction, new RelativeLocator(owner.getFigure(), direction));
+	}
 
-  /**
-   * Creates a new ResizeHandle for the given {@link GraphicalEditPart}. The <code>direction</code>
-   * is the relative direction from the center of the owner figure.
-   */
-  public ResizeHandle(GraphicalEditPart owner, int direction, ILocator locator) {
-    super(owner, locator);
-    m_direction = direction;
-    setCursor(ICursorConstants.Directional.getCursor(direction));
-  }
+	/**
+	 * Creates a new ResizeHandle for the given {@link GraphicalEditPart}. The <code>direction</code>
+	 * is the relative direction from the center of the owner figure.
+	 */
+	public ResizeHandle(GraphicalEditPart owner, int direction, ILocator locator) {
+		super(owner, locator);
+		m_direction = direction;
+		setCursor(ICursorConstants.Directional.getCursor(direction));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public int getDirection() {
-    return m_direction;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public int getDirection() {
+		return m_direction;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/graphical/handles/SideResizeHandle.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/graphical/handles/SideResizeHandle.java
index c6631649e..b8d783aea 100644
--- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/graphical/handles/SideResizeHandle.java
+++ b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/graphical/handles/SideResizeHandle.java
@@ -26,68 +26,68 @@
  * @coverage gef.graphical
  */
 public class SideResizeHandle extends Handle {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SideResizeHandle(GraphicalEditPart owner, int side, int width, boolean center) {
-    super(owner, new ResizeHandleLocator(owner.getFigure(), side, width, center));
-    if (side == IPositionConstants.LEFT || side == IPositionConstants.RIGHT) {
-      setCursor(ICursorConstants.SIZEE);
-    } else {
-      setCursor(ICursorConstants.SIZEN);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SideResizeHandle(GraphicalEditPart owner, int side, int width, boolean center) {
+		super(owner, new ResizeHandleLocator(owner.getFigure(), side, width, center));
+		if (side == IPositionConstants.LEFT || side == IPositionConstants.RIGHT) {
+			setCursor(ICursorConstants.SIZEE);
+		} else {
+			setCursor(ICursorConstants.SIZEN);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Locator
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static class ResizeHandleLocator implements ILocator {
-    private final Figure m_reference;
-    private final int m_side;
-    private final int m_width;
-    private final boolean m_center;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Locator
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static class ResizeHandleLocator implements ILocator {
+		private final Figure m_reference;
+		private final int m_side;
+		private final int m_width;
+		private final boolean m_center;
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public ResizeHandleLocator(Figure reference, int side, int width, boolean center) {
-      m_reference = reference;
-      m_side = side;
-      m_width = width;
-      m_center = center;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public ResizeHandleLocator(Figure reference, int side, int width, boolean center) {
+			m_reference = reference;
+			m_side = side;
+			m_width = width;
+			m_center = center;
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // ILocator
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public void relocate(Figure target) {
-      Rectangle bounds = m_reference.getBounds().getCopy();
-      FigureUtils.translateFigureToFigure(m_reference, target, bounds);
-      //
-      int locationOffset = m_center ? m_width / 2 : m_width;
-      if (m_side == IPositionConstants.LEFT) {
-        bounds.x -= locationOffset;
-        bounds.width = m_width;
-      } else if (m_side == IPositionConstants.RIGHT) {
-        bounds.x = bounds.right() - locationOffset;
-        bounds.width = m_width;
-      } else if (m_side == IPositionConstants.TOP) {
-        bounds.y -= locationOffset;
-        bounds.height = m_width;
-      } else {
-        bounds.y = bounds.bottom() - locationOffset;
-        bounds.height = m_width;
-      }
-      target.setBounds(bounds);
-    }
-  }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// ILocator
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public void relocate(Figure target) {
+			Rectangle bounds = m_reference.getBounds().getCopy();
+			FigureUtils.translateFigureToFigure(m_reference, target, bounds);
+			//
+			int locationOffset = m_center ? m_width / 2 : m_width;
+			if (m_side == IPositionConstants.LEFT) {
+				bounds.x -= locationOffset;
+				bounds.width = m_width;
+			} else if (m_side == IPositionConstants.RIGHT) {
+				bounds.x = bounds.right() - locationOffset;
+				bounds.width = m_width;
+			} else if (m_side == IPositionConstants.TOP) {
+				bounds.y -= locationOffset;
+				bounds.height = m_width;
+			} else {
+				bounds.y = bounds.bottom() - locationOffset;
+				bounds.height = m_width;
+			}
+			target.setBounds(bounds);
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/graphical/handles/SquareHandle.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/graphical/handles/SquareHandle.java
index d27c527f4..ec0ff4209 100644
--- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/graphical/handles/SquareHandle.java
+++ b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/graphical/handles/SquareHandle.java
@@ -26,65 +26,65 @@
  * @coverage gef.graphical
  */
 public abstract class SquareHandle extends Handle {
-  /**
-   * The default size for square handles.
-   */
-  protected static final int DEFAULT_HANDLE_SIZE = 7;
+	/**
+	 * The default size for square handles.
+	 */
+	protected static final int DEFAULT_HANDLE_SIZE = 7;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Creates a handle for the given <code>{@link GraphicalEditPart}</code> using the given
-   * <code>{@link ILocator}</code>.
-   */
-  public SquareHandle(GraphicalEditPart owner, ILocator locator) {
-    super(owner, locator);
-    setSize(DEFAULT_HANDLE_SIZE, DEFAULT_HANDLE_SIZE);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Creates a handle for the given <code>{@link GraphicalEditPart}</code> using the given
+	 * <code>{@link ILocator}</code>.
+	 */
+	public SquareHandle(GraphicalEditPart owner, ILocator locator) {
+		super(owner, locator);
+		setSize(DEFAULT_HANDLE_SIZE, DEFAULT_HANDLE_SIZE);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // SquareHandle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Returns <code>true</code> if the handle's owner is the primary selection.
-   */
-  protected boolean isPrimary() {
-    return getOwner().getSelected() == EditPart.SELECTED_PRIMARY;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// SquareHandle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Returns <code>true</code> if the handle's owner is the primary selection.
+	 */
+	protected boolean isPrimary() {
+		return getOwner().getSelected() == EditPart.SELECTED_PRIMARY;
+	}
 
-  /**
-   * Returns the color for the outside of the handle.
-   */
-  protected Color getBorderColor() {
-    return isPrimary() ? IColorConstants.white : IColorConstants.black;
-  }
+	/**
+	 * Returns the color for the outside of the handle.
+	 */
+	protected Color getBorderColor() {
+		return isPrimary() ? IColorConstants.white : IColorConstants.black;
+	}
 
-  /**
-   * Returns the color for the inside of the handle.
-   */
-  protected Color getFillColor() {
-    return isPrimary() ? IColorConstants.black : IColorConstants.white;
-  }
+	/**
+	 * Returns the color for the inside of the handle.
+	 */
+	protected Color getFillColor() {
+		return isPrimary() ? IColorConstants.black : IColorConstants.white;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Figure
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void paintClientArea(Graphics graphics) {
-    Rectangle area = getClientArea();
-    area.shrink(1, 1);
-    //
-    graphics.setBackgroundColor(getFillColor());
-    graphics.fillRectangle(area);
-    //
-    graphics.setForegroundColor(getBorderColor());
-    graphics.drawRectangle(area);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Figure
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void paintClientArea(Graphics graphics) {
+		Rectangle area = getClientArea();
+		area.shrink(1, 1);
+		//
+		graphics.setBackgroundColor(getFillColor());
+		graphics.fillRectangle(area);
+		//
+		graphics.setForegroundColor(getBorderColor());
+		graphics.drawRectangle(area);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/graphical/policies/CompoundSelectionEditPolicy.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/graphical/policies/CompoundSelectionEditPolicy.java
index b656b13c5..6da7f27dd 100644
--- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/graphical/policies/CompoundSelectionEditPolicy.java
+++ b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/graphical/policies/CompoundSelectionEditPolicy.java
@@ -26,109 +26,109 @@
  * @coverage gef.graphical
  */
 public class CompoundSelectionEditPolicy extends SelectionEditPolicy {
-  private final List<SelectionEditPolicy> m_policies;
+	private final List<SelectionEditPolicy> m_policies;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CompoundSelectionEditPolicy(List<SelectionEditPolicy> policies) {
-    m_policies = policies;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CompoundSelectionEditPolicy(List<SelectionEditPolicy> policies) {
+		m_policies = policies;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // SelectionEditPolicy
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void setHost(EditPart host) {
-    super.setHost(host);
-    for (SelectionEditPolicy policy : m_policies) {
-      policy.setHost(host);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// SelectionEditPolicy
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void setHost(EditPart host) {
+		super.setHost(host);
+		for (SelectionEditPolicy policy : m_policies) {
+			policy.setHost(host);
+		}
+	}
 
-  @Override
-  protected List<Handle> createSelectionHandles() {
-    List<Handle> handles = Lists.newArrayList();
-    for (SelectionEditPolicy policy : m_policies) {
-      policy.createSelectionHandles();
-    }
-    return handles;
-  }
+	@Override
+	protected List<Handle> createSelectionHandles() {
+		List<Handle> handles = Lists.newArrayList();
+		for (SelectionEditPolicy policy : m_policies) {
+			policy.createSelectionHandles();
+		}
+		return handles;
+	}
 
-  @Override
-  protected void showSelection() {
-    for (SelectionEditPolicy policy : m_policies) {
-      policy.showSelection();
-    }
-  }
+	@Override
+	protected void showSelection() {
+		for (SelectionEditPolicy policy : m_policies) {
+			policy.showSelection();
+		}
+	}
 
-  @Override
-  protected void hideSelection() {
-    for (SelectionEditPolicy policy : m_policies) {
-      policy.hideSelection();
-    }
-  }
+	@Override
+	protected void hideSelection() {
+		for (SelectionEditPolicy policy : m_policies) {
+			policy.hideSelection();
+		}
+	}
 
-  @Override
-  public void showSourceFeedback(Request request) {
-    for (SelectionEditPolicy policy : m_policies) {
-      if (policy.understandsRequest(request)) {
-        policy.showSourceFeedback(request);
-      }
-    }
-  }
+	@Override
+	public void showSourceFeedback(Request request) {
+		for (SelectionEditPolicy policy : m_policies) {
+			if (policy.understandsRequest(request)) {
+				policy.showSourceFeedback(request);
+			}
+		}
+	}
 
-  @Override
-  public void eraseSourceFeedback(Request request) {
-    for (SelectionEditPolicy policy : m_policies) {
-      if (policy.understandsRequest(request)) {
-        policy.eraseSourceFeedback(request);
-      }
-    }
-  }
+	@Override
+	public void eraseSourceFeedback(Request request) {
+		for (SelectionEditPolicy policy : m_policies) {
+			if (policy.understandsRequest(request)) {
+				policy.eraseSourceFeedback(request);
+			}
+		}
+	}
 
-  @Override
-  public void performRequest(Request request) {
-    for (SelectionEditPolicy policy : m_policies) {
-      policy.performRequest(request);
-    }
-  }
+	@Override
+	public void performRequest(Request request) {
+		for (SelectionEditPolicy policy : m_policies) {
+			policy.performRequest(request);
+		}
+	}
 
-  @Override
-  public boolean understandsRequest(Request request) {
-    for (SelectionEditPolicy policy : m_policies) {
-      if (policy.understandsRequest(request)) {
-        return true;
-      }
-    }
-    return false;
-  }
+	@Override
+	public boolean understandsRequest(Request request) {
+		for (SelectionEditPolicy policy : m_policies) {
+			if (policy.understandsRequest(request)) {
+				return true;
+			}
+		}
+		return false;
+	}
 
-  @Override
-  public EditPart getTargetEditPart(Request request) {
-    for (SelectionEditPolicy policy : m_policies) {
-      EditPart targetEditPart = policy.getTargetEditPart(request);
-      if (targetEditPart != null) {
-        return targetEditPart;
-      }
-    }
-    return null;
-  }
+	@Override
+	public EditPart getTargetEditPart(Request request) {
+		for (SelectionEditPolicy policy : m_policies) {
+			EditPart targetEditPart = policy.getTargetEditPart(request);
+			if (targetEditPart != null) {
+				return targetEditPart;
+			}
+		}
+		return null;
+	}
 
-  @Override
-  public Command getCommand(Request request) {
-    for (SelectionEditPolicy policy : m_policies) {
-      if (policy.understandsRequest(request)) {
-        Command command = policy.getCommand(request);
-        if (command != null) {
-          return command;
-        }
-      }
-    }
-    return null;
-  }
+	@Override
+	public Command getCommand(Request request) {
+		for (SelectionEditPolicy policy : m_policies) {
+			if (policy.understandsRequest(request)) {
+				Command command = policy.getCommand(request);
+				if (command != null) {
+					return command;
+				}
+			}
+		}
+		return null;
+	}
 }
diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/graphical/policies/DirectTextEditPolicy.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/graphical/policies/DirectTextEditPolicy.java
index 030cfbf56..cacf0360f 100644
--- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/graphical/policies/DirectTextEditPolicy.java
+++ b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/graphical/policies/DirectTextEditPolicy.java
@@ -33,167 +33,167 @@
  * @coverage gef.graphical
  */
 public abstract class DirectTextEditPolicy extends GraphicalEditPolicy {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the text to edit.
-   */
-  protected abstract String getText();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the text to edit.
+	 */
+	protected abstract String getText();
 
-  /**
-   * Sets new text after edit.
-   */
-  protected abstract void setText(String text);
+	/**
+	 * Sets new text after edit.
+	 */
+	protected abstract void setText(String text);
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Life cycle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void deactivate() {
-    endEdit();
-    super.deactivate();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Life cycle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void deactivate() {
+		endEdit();
+		super.deactivate();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Direct edit
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Text m_textWidget;
-  private org.eclipse.swt.graphics.Point m_initialSize;
-  private final Listener m_mouseDownFilter = new Listener() {
-    @Override
-    public void handleEvent(Event event) {
-      if (event.widget != m_textWidget) {
-        commitEdit();
-      }
-    }
-  };
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Direct edit
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Text m_textWidget;
+	private org.eclipse.swt.graphics.Point m_initialSize;
+	private final Listener m_mouseDownFilter = new Listener() {
+		@Override
+		public void handleEvent(Event event) {
+			if (event.widget != m_textWidget) {
+				commitEdit();
+			}
+		}
+	};
 
-  /**
-   * Commits currently done text modifications.
-   */
-  private void commitEdit() {
-    String text = m_textWidget.getText();
-    endEdit();
-    setText(text);
-  }
+	/**
+	 * Commits currently done text modifications.
+	 */
+	private void commitEdit() {
+		String text = m_textWidget.getText();
+		endEdit();
+		setText(text);
+	}
 
-  /**
-   * Begins direct edit using {@link Text} widget.
-   */
-  protected final void beginEdit() {
-    m_textWidget = new Text((Composite) getHost().getViewer().getControl(), SWT.BORDER);
-    // initial text/location
-    {
-      String text = getText();
-      text = StringUtils.defaultString(text);
-      m_textWidget.setText(text);
-      m_textWidget.selectAll();
-      m_textWidget.setFocus();
-    }
-    // set initial location
-    relocateTextWidget();
-    // listeners
-    m_textWidget.addListener(SWT.KeyDown, new Listener() {
-      @Override
-      public void handleEvent(Event event) {
-        if (event.keyCode == SWT.ESC) {
-          endEdit();
-        } else if (event.keyCode == SWT.CR) {
-          commitEdit();
-        }
-      }
-    });
-    m_textWidget.addListener(SWT.Modify, new Listener() {
-      @Override
-      public void handleEvent(Event event) {
-        relocateTextWidget();
-      }
-    });
-    m_textWidget.addListener(SWT.FocusOut, new Listener() {
-      @Override
-      public void handleEvent(Event event) {
-        commitEdit();
-      }
-    });
-    m_textWidget.getDisplay().addFilter(SWT.MouseDown, m_mouseDownFilter);
-  }
+	/**
+	 * Begins direct edit using {@link Text} widget.
+	 */
+	protected final void beginEdit() {
+		m_textWidget = new Text((Composite) getHost().getViewer().getControl(), SWT.BORDER);
+		// initial text/location
+		{
+			String text = getText();
+			text = StringUtils.defaultString(text);
+			m_textWidget.setText(text);
+			m_textWidget.selectAll();
+			m_textWidget.setFocus();
+		}
+		// set initial location
+		relocateTextWidget();
+		// listeners
+		m_textWidget.addListener(SWT.KeyDown, new Listener() {
+			@Override
+			public void handleEvent(Event event) {
+				if (event.keyCode == SWT.ESC) {
+					endEdit();
+				} else if (event.keyCode == SWT.CR) {
+					commitEdit();
+				}
+			}
+		});
+		m_textWidget.addListener(SWT.Modify, new Listener() {
+			@Override
+			public void handleEvent(Event event) {
+				relocateTextWidget();
+			}
+		});
+		m_textWidget.addListener(SWT.FocusOut, new Listener() {
+			@Override
+			public void handleEvent(Event event) {
+				commitEdit();
+			}
+		});
+		m_textWidget.getDisplay().addFilter(SWT.MouseDown, m_mouseDownFilter);
+	}
 
-  /**
-   * Ends current direct edit.
-   */
-  private void endEdit() {
-    if (isEditing()) {
-      m_textWidget.getDisplay().removeFilter(SWT.MouseDown, m_mouseDownFilter);
-      m_textWidget.dispose();
-      m_textWidget = null;
-      m_initialSize = null;
-      // restore focus
-      Display.getCurrent().asyncExec(new Runnable() {
-        @Override
-        public void run() {
-          if (getHost().isActive()) {
-            getHost().getViewer().getControl().setFocus();
-          }
-        }
-      });
-    }
-  }
+	/**
+	 * Ends current direct edit.
+	 */
+	private void endEdit() {
+		if (isEditing()) {
+			m_textWidget.getDisplay().removeFilter(SWT.MouseDown, m_mouseDownFilter);
+			m_textWidget.dispose();
+			m_textWidget = null;
+			m_initialSize = null;
+			// restore focus
+			Display.getCurrent().asyncExec(new Runnable() {
+				@Override
+				public void run() {
+					if (getHost().isActive()) {
+						getHost().getViewer().getControl().setFocus();
+					}
+				}
+			});
+		}
+	}
 
-  /**
-   * @return <code>true</code> if we in process of direct edit.
-   */
-  private boolean isEditing() {
-    return m_textWidget != null;
-  }
+	/**
+	 * @return <code>true</code> if we in process of direct edit.
+	 */
+	private boolean isEditing() {
+		return m_textWidget != null;
+	}
 
-  /**
-   * Updates location of {@link Text} widget in host {@link Figure}.
-   */
-  private void relocateTextWidget() {
-    // prepare absolute bounds of host figure
-    Rectangle hostBounds;
-    {
-      hostBounds = getHostFigure().getBounds().getCopy();
-      FigureUtils.translateFigureToCanvas(getHostFigure().getParent(), hostBounds);
-    }
-    // prepare text size
-    org.eclipse.swt.graphics.Point textSize;
-    {
-      textSize = m_textWidget.computeSize(SWT.DEFAULT, SWT.DEFAULT);
-      if (m_initialSize != null) {
-        textSize.x = Math.max(textSize.x, m_initialSize.x);
-        textSize.y = Math.max(textSize.y, m_initialSize.y);
-      } else {
-        m_initialSize = textSize;
-      }
-    }
-    // set bounds for Text
-    {
-      Point textLocation = getTextWidgetLocation(hostBounds, new Dimension(textSize.x, textSize.y));
-      m_textWidget.setBounds(textLocation.x, textLocation.y, textSize.x, textSize.y);
-    }
-    // ensure that full text is visible
-    {
-      org.eclipse.swt.graphics.Point oldSelection = m_textWidget.getSelection();
-      m_textWidget.setSelection(0);
-      m_textWidget.setSelection(oldSelection);
-    }
-  }
+	/**
+	 * Updates location of {@link Text} widget in host {@link Figure}.
+	 */
+	private void relocateTextWidget() {
+		// prepare absolute bounds of host figure
+		Rectangle hostBounds;
+		{
+			hostBounds = getHostFigure().getBounds().getCopy();
+			FigureUtils.translateFigureToCanvas(getHostFigure().getParent(), hostBounds);
+		}
+		// prepare text size
+		org.eclipse.swt.graphics.Point textSize;
+		{
+			textSize = m_textWidget.computeSize(SWT.DEFAULT, SWT.DEFAULT);
+			if (m_initialSize != null) {
+				textSize.x = Math.max(textSize.x, m_initialSize.x);
+				textSize.y = Math.max(textSize.y, m_initialSize.y);
+			} else {
+				m_initialSize = textSize;
+			}
+		}
+		// set bounds for Text
+		{
+			Point textLocation = getTextWidgetLocation(hostBounds, new Dimension(textSize.x, textSize.y));
+			m_textWidget.setBounds(textLocation.x, textLocation.y, textSize.x, textSize.y);
+		}
+		// ensure that full text is visible
+		{
+			org.eclipse.swt.graphics.Point oldSelection = m_textWidget.getSelection();
+			m_textWidget.setSelection(0);
+			m_textWidget.setSelection(oldSelection);
+		}
+	}
 
-  /**
-   * @param hostBounds
-   *          the absolute bounds of host {@link Figure}.
-   * @param textSize
-   *          the size of {@link Text} widget.
-   *
-   * @return the absolute location of {@link Text} widget.
-   */
-  protected abstract Point getTextWidgetLocation(Rectangle hostBounds, Dimension textSize);
+	/**
+	 * @param hostBounds
+	 *          the absolute bounds of host {@link Figure}.
+	 * @param textSize
+	 *          the size of {@link Text} widget.
+	 *
+	 * @return the absolute location of {@link Text} widget.
+	 */
+	protected abstract Point getTextWidgetLocation(Rectangle hostBounds, Dimension textSize);
 }
diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/graphical/policies/GraphicalEditPolicy.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/graphical/policies/GraphicalEditPolicy.java
index 63ca29e60..4a39c4ac3 100644
--- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/graphical/policies/GraphicalEditPolicy.java
+++ b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/graphical/policies/GraphicalEditPolicy.java
@@ -22,87 +22,87 @@
  * @coverage gef.graphical
  */
 public class GraphicalEditPolicy extends EditPolicy {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the <i>host</i> {@link GraphicalEditPart} on which this policy is installed.
-   */
-  @Override
-  public GraphicalEditPart getHost() {
-    return (GraphicalEditPart) super.getHost();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the <i>host</i> {@link GraphicalEditPart} on which this policy is installed.
+	 */
+	@Override
+	public GraphicalEditPart getHost() {
+		return (GraphicalEditPart) super.getHost();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Figure
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Convenience method to return the host's {@link Figure}.
-   */
-  protected final Figure getHostFigure() {
-    return getHost().getFigure();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Figure
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Convenience method to return the host's {@link Figure}.
+	 */
+	protected final Figure getHostFigure() {
+		return getHost().getFigure();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Layer's
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Obtains the specified layer.
-   */
-  //@edu.umd.cs.findbugs.annotations.SuppressWarnings(value = "ES_COMPARING_PARAMETER_STRING_WITH_EQ")
-  protected final Layer getLayer(String name) {
-    if (isOnMenuLayer()) {
-      if (name == IEditPartViewer.HANDLE_LAYER) {
-        name = IEditPartViewer.MENU_HANDLE_LAYER;
-      } else if (name == IEditPartViewer.HANDLE_LAYER_STATIC) {
-        name = IEditPartViewer.MENU_HANDLE_LAYER_STATIC;
-      } else if (name == IEditPartViewer.FEEDBACK_LAYER) {
-        name = IEditPartViewer.MENU_FEEDBACK_LAYER;
-      }
-    }
-    return getHost().getViewer().getLayer(name);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Layer's
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Obtains the specified layer.
+	 */
+	//@edu.umd.cs.findbugs.annotations.SuppressWarnings(value = "ES_COMPARING_PARAMETER_STRING_WITH_EQ")
+	protected final Layer getLayer(String name) {
+		if (isOnMenuLayer()) {
+			if (name == IEditPartViewer.HANDLE_LAYER) {
+				name = IEditPartViewer.MENU_HANDLE_LAYER;
+			} else if (name == IEditPartViewer.HANDLE_LAYER_STATIC) {
+				name = IEditPartViewer.MENU_HANDLE_LAYER_STATIC;
+			} else if (name == IEditPartViewer.FEEDBACK_LAYER) {
+				name = IEditPartViewer.MENU_FEEDBACK_LAYER;
+			}
+		}
+		return getHost().getViewer().getLayer(name);
+	}
 
-  /**
-   * @return the {@link Layer} for {@link IEditPartViewer#FEEDBACK_LAYER}.
-   */
-  protected Layer getFeedbackLayer() {
-    return getLayer(IEditPartViewer.FEEDBACK_LAYER);
-  }
+	/**
+	 * @return the {@link Layer} for {@link IEditPartViewer#FEEDBACK_LAYER}.
+	 */
+	protected Layer getFeedbackLayer() {
+		return getLayer(IEditPartViewer.FEEDBACK_LAYER);
+	}
 
-  /**
-   * Adds the specified <code>{@link Figure}</code> to the {@link IEditPartViewer#FEEDBACK_LAYER}.
-   */
-  protected final void addFeedback(Figure figure) {
-    getFeedbackLayer().add(figure);
-  }
+	/**
+	 * Adds the specified <code>{@link Figure}</code> to the {@link IEditPartViewer#FEEDBACK_LAYER}.
+	 */
+	protected final void addFeedback(Figure figure) {
+		getFeedbackLayer().add(figure);
+	}
 
-  /**
-   * Removes the specified <code>{@link Figure}</code> to the {@link IEditPartViewer#FEEDBACK_LAYER}
-   * .
-   */
-  protected final void removeFeedback(Figure figure) {
-    getFeedbackLayer().remove(figure);
-  }
+	/**
+	 * Removes the specified <code>{@link Figure}</code> to the {@link IEditPartViewer#FEEDBACK_LAYER}
+	 * .
+	 */
+	protected final void removeFeedback(Figure figure) {
+		getFeedbackLayer().remove(figure);
+	}
 
-  /**
-   * @return <code>true</code> if host {@link EditPart} is located on
-   *         {@link IEditPartViewer#MENU_PRIMARY_LAYER}.
-   */
-  private boolean isOnMenuLayer() {
-    Layer menuPrimaryLayer = getHost().getViewer().getLayer(IEditPartViewer.MENU_PRIMARY_LAYER);
-    for (Figure figure = getHostFigure(); figure != null; figure = figure.getParent()) {
-      if (figure == menuPrimaryLayer) {
-        return true;
-      }
-    }
-    // no, probably normal PRIMARY_LAYER
-    return false;
-  }
+	/**
+	 * @return <code>true</code> if host {@link EditPart} is located on
+	 *         {@link IEditPartViewer#MENU_PRIMARY_LAYER}.
+	 */
+	private boolean isOnMenuLayer() {
+		Layer menuPrimaryLayer = getHost().getViewer().getLayer(IEditPartViewer.MENU_PRIMARY_LAYER);
+		for (Figure figure = getHostFigure(); figure != null; figure = figure.getParent()) {
+			if (figure == menuPrimaryLayer) {
+				return true;
+			}
+		}
+		// no, probably normal PRIMARY_LAYER
+		return false;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/graphical/policies/ISelectionEditPolicyListener.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/graphical/policies/ISelectionEditPolicyListener.java
index c443a22d5..e3670bba6 100644
--- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/graphical/policies/ISelectionEditPolicyListener.java
+++ b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/graphical/policies/ISelectionEditPolicyListener.java
@@ -17,13 +17,13 @@
  * @coverage gef.graphical
  */
 public interface ISelectionEditPolicyListener {
-  /**
-   * Notifies that {@link SelectionEditPolicy#showSelection()} was executed.
-   */
-  void showSelection(SelectionEditPolicy policy);
+	/**
+	 * Notifies that {@link SelectionEditPolicy#showSelection()} was executed.
+	 */
+	void showSelection(SelectionEditPolicy policy);
 
-  /**
-   * Notifies that {@link SelectionEditPolicy#hideSelection()} was executed.
-   */
-  void hideSelection(SelectionEditPolicy policy);
+	/**
+	 * Notifies that {@link SelectionEditPolicy#hideSelection()} was executed.
+	 */
+	void hideSelection(SelectionEditPolicy policy);
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/graphical/policies/LayoutEditPolicy.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/graphical/policies/LayoutEditPolicy.java
index 90247c1cd..f537a7e78 100644
--- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/graphical/policies/LayoutEditPolicy.java
+++ b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/graphical/policies/LayoutEditPolicy.java
@@ -28,250 +28,250 @@
  * @coverage gef.graphical
  */
 public abstract class LayoutEditPolicy extends GraphicalEditPolicy {
-  private final IEditPartListener m_listener = new IEditPartListener() {
-    @Override
-    public void childAdded(EditPart child, int index) {
-      decorateChild(child);
-    }
+	private final IEditPartListener m_listener = new IEditPartListener() {
+		@Override
+		public void childAdded(EditPart child, int index) {
+			decorateChild(child);
+		}
 
-    @Override
-    public void removingChild(EditPart child, int index) {
-      undecorateChild(child);
-    }
-  };
+		@Override
+		public void removingChild(EditPart child, int index) {
+			undecorateChild(child);
+		}
+	};
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // EditPolicy
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void activate() {
-    getHost().addEditPartListener(m_listener);
-    for (EditPart child : getHost().getChildren()) {
-      decorateChild(child);
-    }
-    super.activate();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// EditPolicy
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void activate() {
+		getHost().addEditPartListener(m_listener);
+		for (EditPart child : getHost().getChildren()) {
+			decorateChild(child);
+		}
+		super.activate();
+	}
 
-  @Override
-  public void deactivate() {
-    for (EditPart child : getHost().getChildren()) {
-      undecorateChild(child);
-    }
-    getHost().removeEditPartListener(m_listener);
-    eraseLayoutTargetFeedback(null);
-    super.deactivate();
-  }
+	@Override
+	public void deactivate() {
+		for (EditPart child : getHost().getChildren()) {
+			undecorateChild(child);
+		}
+		getHost().removeEditPartListener(m_listener);
+		eraseLayoutTargetFeedback(null);
+		super.deactivate();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Decorate child
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * This method allows {@link LayoutEditPolicy} decorate each child {@link EditPart}, usually set
-   * {@link SelectionEditPolicy}.
-   */
-  protected void decorateChild(EditPart child) {
-    fire_decorateChild(child);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Decorate child
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * This method allows {@link LayoutEditPolicy} decorate each child {@link EditPart}, usually set
+	 * {@link SelectionEditPolicy}.
+	 */
+	protected void decorateChild(EditPart child) {
+		fire_decorateChild(child);
+	}
 
-  /**
-   * This method allows {@link LayoutEditPolicy} undo decoration done by
-   * {@link #decorateChild(EditPart)}.
-   */
-  protected void undecorateChild(EditPart child) {
-    fire_undecorateChild(child);
-  }
+	/**
+	 * This method allows {@link LayoutEditPolicy} undo decoration done by
+	 * {@link #decorateChild(EditPart)}.
+	 */
+	protected void undecorateChild(EditPart child) {
+		fire_undecorateChild(child);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Request/Command
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link ILayoutRequestValidator} for validating {@link Request#REQ_CREATE},
-   *         {@link Request#REQ_PASTE}, {@link Request#REQ_MOVE} and {@link Request#REQ_ADD}
-   *         requests.
-   */
-  protected ILayoutRequestValidator getRequestValidator() {
-    return ILayoutRequestValidator.TRUE;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Request/Command
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link ILayoutRequestValidator} for validating {@link Request#REQ_CREATE},
+	 *         {@link Request#REQ_PASTE}, {@link Request#REQ_MOVE} and {@link Request#REQ_ADD}
+	 *         requests.
+	 */
+	protected ILayoutRequestValidator getRequestValidator() {
+		return ILayoutRequestValidator.TRUE;
+	}
 
-  /**
-   * @return <code>true</code> if the {@link Request} is an {@link Request#REQ_CREATE},
-   *         {@link Request#REQ_PASTE}, {@link Request#REQ_MOVE} or {@link Request#REQ_ADD}.
-   */
-  protected boolean isRequestCondition(Request request) {
-    Object type = request.getType();
-    ILayoutRequestValidator validator = getRequestValidator();
-    EditPart host = getHost();
-    if (type == Request.REQ_CREATE) {
-      return validator.validateCreateRequest(host, (CreateRequest) request);
-    }
-    if (type == Request.REQ_PASTE) {
-      return validator.validatePasteRequest(host, (PasteRequest) request);
-    }
-    if (type == Request.REQ_MOVE) {
-      return validator.validateMoveRequest(host, (ChangeBoundsRequest) request);
-    }
-    if (type == Request.REQ_ADD) {
-      return validator.validateAddRequest(host, (ChangeBoundsRequest) request);
-    }
-    return false;
-  }
+	/**
+	 * @return <code>true</code> if the {@link Request} is an {@link Request#REQ_CREATE},
+	 *         {@link Request#REQ_PASTE}, {@link Request#REQ_MOVE} or {@link Request#REQ_ADD}.
+	 */
+	protected boolean isRequestCondition(Request request) {
+		Object type = request.getType();
+		ILayoutRequestValidator validator = getRequestValidator();
+		EditPart host = getHost();
+		if (type == Request.REQ_CREATE) {
+			return validator.validateCreateRequest(host, (CreateRequest) request);
+		}
+		if (type == Request.REQ_PASTE) {
+			return validator.validatePasteRequest(host, (PasteRequest) request);
+		}
+		if (type == Request.REQ_MOVE) {
+			return validator.validateMoveRequest(host, (ChangeBoundsRequest) request);
+		}
+		if (type == Request.REQ_ADD) {
+			return validator.validateAddRequest(host, (ChangeBoundsRequest) request);
+		}
+		return false;
+	}
 
-  @Override
-  public boolean understandsRequest(Request request) {
-    return isRequestCondition(request);
-  }
+	@Override
+	public boolean understandsRequest(Request request) {
+		return isRequestCondition(request);
+	}
 
-  /**
-   * Returns the <i>host</i> if the {@link Request} is an {@link Request#REQ_CREATE},
-   * {@link Request#REQ_PASTE}, {@link Request#REQ_MOVE} or {@link Request#REQ_ADD}.
-   */
-  @Override
-  public EditPart getTargetEditPart(Request request) {
-    return isRequestCondition(request) ? getHost() : null;
-  }
+	/**
+	 * Returns the <i>host</i> if the {@link Request} is an {@link Request#REQ_CREATE},
+	 * {@link Request#REQ_PASTE}, {@link Request#REQ_MOVE} or {@link Request#REQ_ADD}.
+	 */
+	@Override
+	public EditPart getTargetEditPart(Request request) {
+		return isRequestCondition(request) ? getHost() : null;
+	}
 
-  /**
-   * Factors incoming requests into various specific methods.
-   */
-  @Override
-  //@edu.umd.cs.findbugs.annotations.SuppressWarnings(value = "BC_UNCONFIRMED_CAST")
-  public Command getCommand(Request request) {
-    Object type = request.getType();
-    if (type == Request.REQ_CREATE) {
-      return getCreateCommand((CreateRequest) request);
-    }
-    if (type == Request.REQ_PASTE) {
-      return getPasteCommand((PasteRequest) request);
-    }
-    if (type == Request.REQ_MOVE) {
-      return getMoveCommand((ChangeBoundsRequest) request);
-    }
-    if (type == Request.REQ_ADD) {
-      return getAddCommand((ChangeBoundsRequest) request);
-    }
-    if (type == Request.REQ_ORPHAN) {
-      return getOrphanCommand((GroupRequest) request);
-    }
-    return null;
-  }
+	/**
+	 * Factors incoming requests into various specific methods.
+	 */
+	@Override
+	//@edu.umd.cs.findbugs.annotations.SuppressWarnings(value = "BC_UNCONFIRMED_CAST")
+	public Command getCommand(Request request) {
+		Object type = request.getType();
+		if (type == Request.REQ_CREATE) {
+			return getCreateCommand((CreateRequest) request);
+		}
+		if (type == Request.REQ_PASTE) {
+			return getPasteCommand((PasteRequest) request);
+		}
+		if (type == Request.REQ_MOVE) {
+			return getMoveCommand((ChangeBoundsRequest) request);
+		}
+		if (type == Request.REQ_ADD) {
+			return getAddCommand((ChangeBoundsRequest) request);
+		}
+		if (type == Request.REQ_ORPHAN) {
+			return getOrphanCommand((GroupRequest) request);
+		}
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link Command} for {@link Request#REQ_CREATE}.
-   */
-  protected Command getCreateCommand(CreateRequest request) {
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link Command} for {@link Request#REQ_CREATE}.
+	 */
+	protected Command getCreateCommand(CreateRequest request) {
+		return null;
+	}
 
-  /**
-   * @return the {@link Command} for {@link Request#REQ_PASTE}.
-   */
-  protected Command getPasteCommand(PasteRequest request) {
-    return null;
-  }
+	/**
+	 * @return the {@link Command} for {@link Request#REQ_PASTE}.
+	 */
+	protected Command getPasteCommand(PasteRequest request) {
+		return null;
+	}
 
-  /**
-   * @return the {@link Command} for {@link Request#REQ_MOVE}.
-   */
-  protected Command getMoveCommand(ChangeBoundsRequest request) {
-    return null;
-  }
+	/**
+	 * @return the {@link Command} for {@link Request#REQ_MOVE}.
+	 */
+	protected Command getMoveCommand(ChangeBoundsRequest request) {
+		return null;
+	}
 
-  /**
-   * @return the {@link Command} for {@link Request#REQ_ADD}.
-   */
-  protected Command getAddCommand(ChangeBoundsRequest request) {
-    return null;
-  }
+	/**
+	 * @return the {@link Command} for {@link Request#REQ_ADD}.
+	 */
+	protected Command getAddCommand(ChangeBoundsRequest request) {
+		return null;
+	}
 
-  /**
-   * @return the {@link Command} for {@link Request#REQ_ORPHAN}.
-   */
-  protected Command getOrphanCommand(GroupRequest request) {
-    return null;
-  }
+	/**
+	 * @return the {@link Command} for {@link Request#REQ_ORPHAN}.
+	 */
+	protected Command getOrphanCommand(GroupRequest request) {
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Feedback
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void showTargetFeedback(Request request) {
-    if (isRequestCondition(request)) {
-      showLayoutTargetFeedback(request);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Feedback
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void showTargetFeedback(Request request) {
+		if (isRequestCondition(request)) {
+			showLayoutTargetFeedback(request);
+		}
+	}
 
-  @Override
-  public void eraseTargetFeedback(Request request) {
-    eraseLayoutTargetFeedback(request);
-  }
+	@Override
+	public void eraseTargetFeedback(Request request) {
+		eraseLayoutTargetFeedback(request);
+	}
 
-  /**
-   * Shows target feedback for {@link Request#REQ_ADD}, {@link Request#REQ_MOVE},
-   * {@link Request#REQ_CREATE} or {@link Request#REQ_PASTE}.
-   */
-  protected void showLayoutTargetFeedback(Request request) {
-  }
+	/**
+	 * Shows target feedback for {@link Request#REQ_ADD}, {@link Request#REQ_MOVE},
+	 * {@link Request#REQ_CREATE} or {@link Request#REQ_PASTE}.
+	 */
+	protected void showLayoutTargetFeedback(Request request) {
+	}
 
-  /**
-   * Erases target feedback for {@link Request#REQ_ADD}, {@link Request#REQ_MOVE},
-   * {@link Request#REQ_CREATE} or {@link Request#REQ_PASTE}.
-   */
-  protected void eraseLayoutTargetFeedback(Request request) {
-  }
+	/**
+	 * Erases target feedback for {@link Request#REQ_ADD}, {@link Request#REQ_MOVE},
+	 * {@link Request#REQ_CREATE} or {@link Request#REQ_PASTE}.
+	 */
+	protected void eraseLayoutTargetFeedback(Request request) {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Events
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds a {@link IEditPartDecorationListener} to this policy.
-   */
-  public void addEditPartListener(IEditPartDecorationListener listener) {
-    getEnsureEventTable().addListener(IEditPartDecorationListener.class, listener);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Events
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds a {@link IEditPartDecorationListener} to this policy.
+	 */
+	public void addEditPartListener(IEditPartDecorationListener listener) {
+		getEnsureEventTable().addListener(IEditPartDecorationListener.class, listener);
+	}
 
-  /**
-   * Removes the first occurrence of the specified listener from the list of listeners.
-   */
-  public void removeEditPartListener(IEditPartDecorationListener listener) {
-    getEnsureEventTable().removeListener(IEditPartDecorationListener.class, listener);
-  }
+	/**
+	 * Removes the first occurrence of the specified listener from the list of listeners.
+	 */
+	public void removeEditPartListener(IEditPartDecorationListener listener) {
+		getEnsureEventTable().removeListener(IEditPartDecorationListener.class, listener);
+	}
 
-  /**
-   * Fires {@link IEditPartDecorationListener#decorate(EditPart)}.
-   */
-  private void fire_decorateChild(EditPart child) {
-    List<IEditPartDecorationListener> listeners = getListeners(IEditPartDecorationListener.class);
-    if (listeners != null && !listeners.isEmpty()) {
-      for (IEditPartDecorationListener listener : listeners) {
-        listener.decorate(child);
-      }
-    }
-  }
+	/**
+	 * Fires {@link IEditPartDecorationListener#decorate(EditPart)}.
+	 */
+	private void fire_decorateChild(EditPart child) {
+		List<IEditPartDecorationListener> listeners = getListeners(IEditPartDecorationListener.class);
+		if (listeners != null && !listeners.isEmpty()) {
+			for (IEditPartDecorationListener listener : listeners) {
+				listener.decorate(child);
+			}
+		}
+	}
 
-  /**
-   * Fires {@link IEditPartDecorationListener#undecorate(EditPart)}.
-   */
-  private void fire_undecorateChild(EditPart child) {
-    List<IEditPartDecorationListener> listeners = getListeners(IEditPartDecorationListener.class);
-    if (listeners != null && !listeners.isEmpty()) {
-      for (IEditPartDecorationListener listener : listeners) {
-        listener.undecorate(child);
-      }
-    }
-  }
+	/**
+	 * Fires {@link IEditPartDecorationListener#undecorate(EditPart)}.
+	 */
+	private void fire_undecorateChild(EditPart child) {
+		List<IEditPartDecorationListener> listeners = getListeners(IEditPartDecorationListener.class);
+		if (listeners != null && !listeners.isEmpty()) {
+			for (IEditPartDecorationListener listener : listeners) {
+				listener.undecorate(child);
+			}
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/graphical/policies/SelectionEditPolicy.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/graphical/policies/SelectionEditPolicy.java
index c8ed9f0bf..a314b0d92 100644
--- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/graphical/policies/SelectionEditPolicy.java
+++ b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/graphical/policies/SelectionEditPolicy.java
@@ -33,185 +33,185 @@
  * @coverage gef.graphical
  */
 public abstract class SelectionEditPolicy extends GraphicalEditPolicy
-    implements
-      IEditPartSelectionListener {
-  private int m_selection = EditPart.SELECTED_NONE;
-  private List<Handle> m_staticHandles;
-  private List<Handle> m_handles;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // EditPolicy
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void activate() {
-    super.activate();
-    getHost().addSelectionListener(this);
-    showStaticHandles();
-    selectionChanged(getHost());
-  }
-
-  @Override
-  public void deactivate() {
-    getHost().removeSelectionListener(this);
-    selectionChanged(EditPart.SELECTED_NONE);
-    hideStaticHandles();
-    super.deactivate();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Selection
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void selectionChanged(EditPart editPart) {
-    selectionChanged(editPart.getSelected());
-  }
-
-  private void selectionChanged(int selection) {
-    if (m_selection != selection) {
-      m_selection = selection;
-      //
-      if (m_selection == EditPart.SELECTED_NONE) {
-        hideSelection();
-      } else {
-        showSelection();
-      }
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Handles
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds "static" handles to static_handle layer. This handle's always visible independently of
-   * selection.
-   */
-  protected void showStaticHandles() {
-    Layer layer = getLayer(IEditPartViewer.HANDLE_LAYER_STATIC);
-    m_staticHandles = createStaticHandles();
-    for (Handle handle : m_staticHandles) {
-      layer.add(handle);
-    }
-  }
-
-  /**
-   * Removes "static" handles from static_handle layer.
-   */
-  protected void hideStaticHandles() {
-    if (m_staticHandles != null && !m_staticHandles.isEmpty()) {
-      Layer layer = getLayer(IEditPartViewer.HANDLE_LAYER_STATIC);
-      for (Handle handle : m_staticHandles) {
-        layer.remove(handle);
-      }
-      m_staticHandles = null;
-    }
-  }
-
-  /**
-   * Shows selection. Default implementation adds {@link Handle}s.
-   */
-  protected void showSelection() {
-    hideSelection();
-    Layer layer = getLayer(IEditPartViewer.HANDLE_LAYER);
-    m_handles = createSelectionHandles();
-    for (Handle handle : m_handles) {
-      layer.add(handle);
-    }
-    fire_showSelection();
-  }
-
-  /**
-   * Hides selection. Default implementation removes {@link Handle}s.
-   */
-  protected void hideSelection() {
-    fire_hideSelection();
-    if (m_handles != null) {
-      for (Handle handle : m_handles) {
-        FigureUtils.removeFigure(handle);
-      }
-      m_handles = null;
-    }
-  }
-
-  /**
-   * Hides/shows selection, useful when selection presentation should be updated.
-   */
-  public void refreshSelection() {
-    showSelection();
-  }
-
-  /**
-   * Subclasses must implement to provide the list of "static" handles.
-   */
-  protected List<Handle> createStaticHandles() {
-    return Collections.<Handle>emptyList();
-  }
-
-  /**
-   * Subclasses must implement to provide the list of handles.
-   */
-  protected abstract List<Handle> createSelectionHandles();
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Request
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean understandsRequest(Request request) {
-    return request.getType() == Request.REQ_SELECTION;
-  }
-
-  @Override
-  public EditPart getTargetEditPart(Request request) {
-    return getHost();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Listener
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds {@link ISelectionEditPolicyListener} for listening {@link SelectionEditPolicy} events.
-   */
-  public void addSelectionPolicyListener(ISelectionEditPolicyListener listener) {
-    getEnsureEventTable().addListener(ISelectionEditPolicyListener.class, listener);
-  }
-
-  /**
-   * Removes {@link ISelectionEditPolicyListener} for listening {@link SelectionEditPolicy} events.
-   */
-  public void removeSelectionPolicyListener(ISelectionEditPolicyListener listener) {
-    getEnsureEventTable().removeListener(ISelectionEditPolicyListener.class, listener);
-  }
-
-  /**
-   * Notifies {@link ISelectionEditPolicyListener}s that {@link #showSelection()} was executed.
-   */
-  private void fire_showSelection() {
-    List<ISelectionEditPolicyListener> listeners = getListeners(ISelectionEditPolicyListener.class);
-    if (listeners != null && !listeners.isEmpty()) {
-      for (ISelectionEditPolicyListener listener : listeners) {
-        listener.showSelection(this);
-      }
-    }
-  }
-
-  /**
-   * Notifies {@link ISelectionEditPolicyListener}s that {@link #hideSelection()} was executed.
-   */
-  private void fire_hideSelection() {
-    List<ISelectionEditPolicyListener> listeners = getListeners(ISelectionEditPolicyListener.class);
-    if (listeners != null && !listeners.isEmpty()) {
-      for (ISelectionEditPolicyListener listener : listeners) {
-        listener.hideSelection(this);
-      }
-    }
-  }
+implements
+IEditPartSelectionListener {
+	private int m_selection = EditPart.SELECTED_NONE;
+	private List<Handle> m_staticHandles;
+	private List<Handle> m_handles;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// EditPolicy
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void activate() {
+		super.activate();
+		getHost().addSelectionListener(this);
+		showStaticHandles();
+		selectionChanged(getHost());
+	}
+
+	@Override
+	public void deactivate() {
+		getHost().removeSelectionListener(this);
+		selectionChanged(EditPart.SELECTED_NONE);
+		hideStaticHandles();
+		super.deactivate();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Selection
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void selectionChanged(EditPart editPart) {
+		selectionChanged(editPart.getSelected());
+	}
+
+	private void selectionChanged(int selection) {
+		if (m_selection != selection) {
+			m_selection = selection;
+			//
+			if (m_selection == EditPart.SELECTED_NONE) {
+				hideSelection();
+			} else {
+				showSelection();
+			}
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Handles
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds "static" handles to static_handle layer. This handle's always visible independently of
+	 * selection.
+	 */
+	protected void showStaticHandles() {
+		Layer layer = getLayer(IEditPartViewer.HANDLE_LAYER_STATIC);
+		m_staticHandles = createStaticHandles();
+		for (Handle handle : m_staticHandles) {
+			layer.add(handle);
+		}
+	}
+
+	/**
+	 * Removes "static" handles from static_handle layer.
+	 */
+	protected void hideStaticHandles() {
+		if (m_staticHandles != null && !m_staticHandles.isEmpty()) {
+			Layer layer = getLayer(IEditPartViewer.HANDLE_LAYER_STATIC);
+			for (Handle handle : m_staticHandles) {
+				layer.remove(handle);
+			}
+			m_staticHandles = null;
+		}
+	}
+
+	/**
+	 * Shows selection. Default implementation adds {@link Handle}s.
+	 */
+	protected void showSelection() {
+		hideSelection();
+		Layer layer = getLayer(IEditPartViewer.HANDLE_LAYER);
+		m_handles = createSelectionHandles();
+		for (Handle handle : m_handles) {
+			layer.add(handle);
+		}
+		fire_showSelection();
+	}
+
+	/**
+	 * Hides selection. Default implementation removes {@link Handle}s.
+	 */
+	protected void hideSelection() {
+		fire_hideSelection();
+		if (m_handles != null) {
+			for (Handle handle : m_handles) {
+				FigureUtils.removeFigure(handle);
+			}
+			m_handles = null;
+		}
+	}
+
+	/**
+	 * Hides/shows selection, useful when selection presentation should be updated.
+	 */
+	public void refreshSelection() {
+		showSelection();
+	}
+
+	/**
+	 * Subclasses must implement to provide the list of "static" handles.
+	 */
+	protected List<Handle> createStaticHandles() {
+		return Collections.<Handle>emptyList();
+	}
+
+	/**
+	 * Subclasses must implement to provide the list of handles.
+	 */
+	protected abstract List<Handle> createSelectionHandles();
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Request
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean understandsRequest(Request request) {
+		return request.getType() == Request.REQ_SELECTION;
+	}
+
+	@Override
+	public EditPart getTargetEditPart(Request request) {
+		return getHost();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Listener
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds {@link ISelectionEditPolicyListener} for listening {@link SelectionEditPolicy} events.
+	 */
+	public void addSelectionPolicyListener(ISelectionEditPolicyListener listener) {
+		getEnsureEventTable().addListener(ISelectionEditPolicyListener.class, listener);
+	}
+
+	/**
+	 * Removes {@link ISelectionEditPolicyListener} for listening {@link SelectionEditPolicy} events.
+	 */
+	public void removeSelectionPolicyListener(ISelectionEditPolicyListener listener) {
+		getEnsureEventTable().removeListener(ISelectionEditPolicyListener.class, listener);
+	}
+
+	/**
+	 * Notifies {@link ISelectionEditPolicyListener}s that {@link #showSelection()} was executed.
+	 */
+	private void fire_showSelection() {
+		List<ISelectionEditPolicyListener> listeners = getListeners(ISelectionEditPolicyListener.class);
+		if (listeners != null && !listeners.isEmpty()) {
+			for (ISelectionEditPolicyListener listener : listeners) {
+				listener.showSelection(this);
+			}
+		}
+	}
+
+	/**
+	 * Notifies {@link ISelectionEditPolicyListener}s that {@link #hideSelection()} was executed.
+	 */
+	private void fire_hideSelection() {
+		List<ISelectionEditPolicyListener> listeners = getListeners(ISelectionEditPolicyListener.class);
+		if (listeners != null && !listeners.isEmpty()) {
+			for (ISelectionEditPolicyListener listener : listeners) {
+				listener.hideSelection(this);
+			}
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/graphical/tools/MarqueeDragTracker.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/graphical/tools/MarqueeDragTracker.java
index 82ec78c8a..4ede3e59a 100644
--- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/graphical/tools/MarqueeDragTracker.java
+++ b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/graphical/tools/MarqueeDragTracker.java
@@ -19,11 +19,11 @@
  * @coverage gef.graphical
  */
 public class MarqueeDragTracker extends MarqueeSelectionTool {
-  /**
-   * Called when the mouse button is released. Overridden to do nothing, since a drag tracker does
-   * not need to unload when finished.
-   */
-  @Override
-  protected void handleFinished() {
-  }
+	/**
+	 * Called when the mouse button is released. Overridden to do nothing, since a drag tracker does
+	 * not need to unload when finished.
+	 */
+	@Override
+	protected void handleFinished() {
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/graphical/tools/MarqueeSelectionTool.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/graphical/tools/MarqueeSelectionTool.java
index c0778ebff..8336c605d 100644
--- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/graphical/tools/MarqueeSelectionTool.java
+++ b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/graphical/tools/MarqueeSelectionTool.java
@@ -43,264 +43,264 @@
  * @coverage gef.graphical
  */
 public class MarqueeSelectionTool extends Tool {
-  private static final int TOGGLE_MODE = 1;
-  private static final int APPEND_MODE = 2;
-  private static final Request REQUEST = new Request(Request.REQ_SELECTION);
-  //
-  private int m_selectionMode;
-  private List<EditPart> m_allChildren;
-  private List<EditPart> m_selectedEditParts;
-  private Figure m_marqueeFeedbackFigure;
+	private static final int TOGGLE_MODE = 1;
+	private static final int APPEND_MODE = 2;
+	private static final Request REQUEST = new Request(Request.REQ_SELECTION);
+	//
+	private int m_selectionMode;
+	private List<EditPart> m_allChildren;
+	private List<EditPart> m_selectedEditParts;
+	private Figure m_marqueeFeedbackFigure;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public MarqueeSelectionTool() {
-    setDefaultCursor(ICursorConstants.CROSS);
-    setDisabledCursor(ICursorConstants.NO);
-    setUnloadWhenFinished(false);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public MarqueeSelectionTool() {
+		setDefaultCursor(ICursorConstants.CROSS);
+		setDisabledCursor(ICursorConstants.NO);
+		setUnloadWhenFinished(false);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tool
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void deactivate() {
-    if (m_state == STATE_DRAG_IN_PROGRESS) {
-      eraseMarqueeFeedback();
-      eraseTargetFeedback();
-    }
-    super.deactivate();
-    m_allChildren = null;
-    m_selectedEditParts = null;
-    m_state = STATE_NONE;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tool
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void deactivate() {
+		if (m_state == STATE_DRAG_IN_PROGRESS) {
+			eraseMarqueeFeedback();
+			eraseTargetFeedback();
+		}
+		super.deactivate();
+		m_allChildren = null;
+		m_selectedEditParts = null;
+		m_state = STATE_NONE;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Cursor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Cursor calculateCursor() {
-    switch (m_state) {
-      case STATE_INIT :
-      case STATE_DRAG :
-      case STATE_DRAG_IN_PROGRESS :
-        return getDefaultCursor();
-      case STATE_INVALID :
-        return getDisabledCursor();
-      default :
-        return super.calculateCursor();
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Cursor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Cursor calculateCursor() {
+		switch (m_state) {
+		case STATE_INIT :
+		case STATE_DRAG :
+		case STATE_DRAG_IN_PROGRESS :
+			return getDefaultCursor();
+		case STATE_INVALID :
+			return getDisabledCursor();
+		default :
+			return super.calculateCursor();
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // High-Level handle MouseEvent
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void handleButtonDown(int button) {
-    if (button == 1) {
-      if (m_state == STATE_INIT) {
-        m_state = STATE_DRAG_IN_PROGRESS;
-        if ((m_stateMask & SWT.CONTROL) != 0) {
-          m_selectionMode = TOGGLE_MODE;
-        } else if ((m_stateMask & SWT.SHIFT) != 0) {
-          m_selectionMode = APPEND_MODE;
-        }
-      }
-    } else {
-      m_state = STATE_INVALID;
-      eraseTargetFeedback();
-      eraseMarqueeFeedback();
-    }
-    refreshCursor();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// High-Level handle MouseEvent
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void handleButtonDown(int button) {
+		if (button == 1) {
+			if (m_state == STATE_INIT) {
+				m_state = STATE_DRAG_IN_PROGRESS;
+				if ((m_stateMask & SWT.CONTROL) != 0) {
+					m_selectionMode = TOGGLE_MODE;
+				} else if ((m_stateMask & SWT.SHIFT) != 0) {
+					m_selectionMode = APPEND_MODE;
+				}
+			}
+		} else {
+			m_state = STATE_INVALID;
+			eraseTargetFeedback();
+			eraseMarqueeFeedback();
+		}
+		refreshCursor();
+	}
 
-  @Override
-  protected void handleButtonUp(int button) {
-    if (m_state == STATE_DRAG_IN_PROGRESS) {
-      m_state = STATE_NONE;
-      eraseTargetFeedback();
-      eraseMarqueeFeedback();
-      performMarqueeSelect();
-    }
-    //
-    //setUnloadWhenFinished(false);
-    handleFinished();
-  }
+	@Override
+	protected void handleButtonUp(int button) {
+		if (m_state == STATE_DRAG_IN_PROGRESS) {
+			m_state = STATE_NONE;
+			eraseTargetFeedback();
+			eraseMarqueeFeedback();
+			performMarqueeSelect();
+		}
+		//
+		//setUnloadWhenFinished(false);
+		handleFinished();
+	}
 
-  @Override
-  protected void handleDragInProgress() {
-    if (m_state == STATE_DRAG || m_state == STATE_DRAG_IN_PROGRESS) {
-      showMarqueeFeedback();
-      eraseTargetFeedback();
-      m_selectedEditParts = calculateNewSelection();
-      showTargetFeedback();
-    }
-  }
+	@Override
+	protected void handleDragInProgress() {
+		if (m_state == STATE_DRAG || m_state == STATE_DRAG_IN_PROGRESS) {
+			showMarqueeFeedback();
+			eraseTargetFeedback();
+			m_selectedEditParts = calculateNewSelection();
+			showTargetFeedback();
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Selection
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * If in multi select mode, add the new selections to the already selected group; otherwise, clear
-   * the selection and select the new group
-   */
-  private void performMarqueeSelect() {
-    IEditPartViewer viewer = getViewer();
-    List<EditPart> newSelections = calculateNewSelection();
-    //
-    if (m_selectionMode == APPEND_MODE) {
-      // append all new selection elements
-      for (EditPart editPart : newSelections) {
-        viewer.appendSelection(editPart);
-      }
-    } else if (m_selectionMode == TOGGLE_MODE) {
-      List<EditPart> selected = new ArrayList<EditPart>(viewer.getSelectedEditParts());
-      //
-      for (EditPart editPart : newSelections) {
-        if (editPart.getSelected() == EditPart.SELECTED_NONE) {
-          selected.add(editPart);
-        } else {
-          selected.remove(editPart);
-        }
-      }
-      //
-      viewer.setSelection(selected);
-    } else {
-      // replace selection to all new selection elements
-      viewer.setSelection(newSelections);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Selection
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * If in multi select mode, add the new selections to the already selected group; otherwise, clear
+	 * the selection and select the new group
+	 */
+	private void performMarqueeSelect() {
+		IEditPartViewer viewer = getViewer();
+		List<EditPart> newSelections = calculateNewSelection();
+		//
+		if (m_selectionMode == APPEND_MODE) {
+			// append all new selection elements
+			for (EditPart editPart : newSelections) {
+				viewer.appendSelection(editPart);
+			}
+		} else if (m_selectionMode == TOGGLE_MODE) {
+			List<EditPart> selected = new ArrayList<EditPart>(viewer.getSelectedEditParts());
+			//
+			for (EditPart editPart : newSelections) {
+				if (editPart.getSelected() == EditPart.SELECTED_NONE) {
+					selected.add(editPart);
+				} else {
+					selected.remove(editPart);
+				}
+			}
+			//
+			viewer.setSelection(selected);
+		} else {
+			// replace selection to all new selection elements
+			viewer.setSelection(newSelections);
+		}
+	}
 
-  /**
-   * Calculate new selections based on which children fall inside the marquee selection rectangle.
-   * Do not select children who are not visible.
-   */
-  private List<EditPart> calculateNewSelection() {
-    List<EditPart> newSelections = Lists.newArrayList();
-    // loop of all editparts
-    for (EditPart editPart : getAllChildren()) {
-      if (!editPart.isSelectable()) {
-        continue;
-      }
-      // prepare figure info
-      GraphicalEditPart graphicalPart = (GraphicalEditPart) editPart;
-      Figure figure = graphicalPart.getFigure();
-      Rectangle r = figure.getBounds().getCopy();
-      FigureUtils.translateFigureToAbsolute(figure, r);
-      // compare bounds and selection bounds
-      Rectangle marqueeSelectionRectangle = getMarqueeSelectionRectangle();
-      if (marqueeSelectionRectangle.contains(r.getTopLeft())
-          && marqueeSelectionRectangle.contains(r.getBottomRight())
-          && figure.isVisible()
-          && editPart.getTargetEditPart(REQUEST) == editPart) {
-        newSelections.add(editPart);
-      }
-    }
-    return newSelections;
-  }
+	/**
+	 * Calculate new selections based on which children fall inside the marquee selection rectangle.
+	 * Do not select children who are not visible.
+	 */
+	private List<EditPart> calculateNewSelection() {
+		List<EditPart> newSelections = Lists.newArrayList();
+		// loop of all editparts
+		for (EditPart editPart : getAllChildren()) {
+			if (!editPart.isSelectable()) {
+				continue;
+			}
+			// prepare figure info
+			GraphicalEditPart graphicalPart = (GraphicalEditPart) editPart;
+			Figure figure = graphicalPart.getFigure();
+			Rectangle r = figure.getBounds().getCopy();
+			FigureUtils.translateFigureToAbsolute(figure, r);
+			// compare bounds and selection bounds
+			Rectangle marqueeSelectionRectangle = getMarqueeSelectionRectangle();
+			if (marqueeSelectionRectangle.contains(r.getTopLeft())
+					&& marqueeSelectionRectangle.contains(r.getBottomRight())
+					&& figure.isVisible()
+					&& editPart.getTargetEditPart(REQUEST) == editPart) {
+				newSelections.add(editPart);
+			}
+		}
+		return newSelections;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Target Feedback
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void showTargetFeedback() {
-    for (EditPart editPart : m_selectedEditParts) {
-      editPart.showTargetFeedback(REQUEST);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Target Feedback
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void showTargetFeedback() {
+		for (EditPart editPart : m_selectedEditParts) {
+			editPart.showTargetFeedback(REQUEST);
+		}
+	}
 
-  private void eraseTargetFeedback() {
-    if (m_selectedEditParts != null) {
-      for (EditPart editPart : m_selectedEditParts) {
-        editPart.eraseTargetFeedback(REQUEST);
-      }
-    }
-  }
+	private void eraseTargetFeedback() {
+		if (m_selectedEditParts != null) {
+			for (EditPart editPart : m_selectedEditParts) {
+				editPart.eraseTargetFeedback(REQUEST);
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Marquee Feedback
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void showMarqueeFeedback() {
-    // check create feedback figure
-    if (m_marqueeFeedbackFigure == null) {
-      m_marqueeFeedbackFigure = new Figure() {
-        @Override
-        protected void paintClientArea(Graphics graphics) {
-          graphics.setLineStyle(SWT.LINE_DASHDOT);
-          graphics.setXORMode(true);
-          Rectangle r = getClientArea();
-          graphics.drawRectangle(0, 0, r.width - 1, r.height - 1);
-        }
-      };
-      m_marqueeFeedbackFigure.setForeground(IColorConstants.white);
-      m_marqueeFeedbackFigure.setBackground(IColorConstants.black);
-      getFeedbackPane().add(m_marqueeFeedbackFigure);
-    }
-    // update feedback figure
-    Rectangle bounds = getMarqueeSelectionRectangle();
-    FigureUtils.translateAbsoluteToFigure(m_marqueeFeedbackFigure, bounds);
-    m_marqueeFeedbackFigure.setBounds(bounds);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Marquee Feedback
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void showMarqueeFeedback() {
+		// check create feedback figure
+		if (m_marqueeFeedbackFigure == null) {
+			m_marqueeFeedbackFigure = new Figure() {
+				@Override
+				protected void paintClientArea(Graphics graphics) {
+					graphics.setLineStyle(SWT.LINE_DASHDOT);
+					graphics.setXORMode(true);
+					Rectangle r = getClientArea();
+					graphics.drawRectangle(0, 0, r.width - 1, r.height - 1);
+				}
+			};
+			m_marqueeFeedbackFigure.setForeground(IColorConstants.white);
+			m_marqueeFeedbackFigure.setBackground(IColorConstants.black);
+			getFeedbackPane().add(m_marqueeFeedbackFigure);
+		}
+		// update feedback figure
+		Rectangle bounds = getMarqueeSelectionRectangle();
+		FigureUtils.translateAbsoluteToFigure(m_marqueeFeedbackFigure, bounds);
+		m_marqueeFeedbackFigure.setBounds(bounds);
+	}
 
-  private void eraseMarqueeFeedback() {
-    if (m_marqueeFeedbackFigure != null) {
-      getFeedbackPane().remove(m_marqueeFeedbackFigure);
-      m_marqueeFeedbackFigure = null;
-    }
-  }
+	private void eraseMarqueeFeedback() {
+		if (m_marqueeFeedbackFigure != null) {
+			getFeedbackPane().remove(m_marqueeFeedbackFigure);
+			m_marqueeFeedbackFigure = null;
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Returns feedback layer.
-   */
-  private Figure getFeedbackPane() {
-    return getViewer().getLayer(IEditPartViewer.FEEDBACK_LAYER);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Returns feedback layer.
+	 */
+	private Figure getFeedbackPane() {
+		return getViewer().getLayer(IEditPartViewer.FEEDBACK_LAYER);
+	}
 
-  /**
-   * Returns rectangular area between left-top corner <code>(m_startX, m_startY)</code> and
-   * bottom-right corner <code>(m_currentX, m_currentY)</code>.
-   */
-  private Rectangle getMarqueeSelectionRectangle() {
-    return new Rectangle(getStartLocation(), getLocation());
-  }
+	/**
+	 * Returns rectangular area between left-top corner <code>(m_startX, m_startY)</code> and
+	 * bottom-right corner <code>(m_currentX, m_currentY)</code>.
+	 */
+	private Rectangle getMarqueeSelectionRectangle() {
+		return new Rectangle(getStartLocation(), getLocation());
+	}
 
-  /**
-   * Return a {@link List} including all of the children of the root {@link EditPart}.
-   */
-  private List<EditPart> getAllChildren() {
-    if (m_allChildren == null || m_allChildren.isEmpty()) {
-      m_allChildren = Lists.newArrayList();
-      getAllChildren(m_allChildren, getViewer().getRootEditPart());
-    }
-    return m_allChildren;
-  }
+	/**
+	 * Return a {@link List} including all of the children of the root {@link EditPart}.
+	 */
+	private List<EditPart> getAllChildren() {
+		if (m_allChildren == null || m_allChildren.isEmpty()) {
+			m_allChildren = Lists.newArrayList();
+			getAllChildren(m_allChildren, getViewer().getRootEditPart());
+		}
+		return m_allChildren;
+	}
 
-  /**
-   * Returns a {@link List} including all of the children of the {@link EditPart} passed in.
-   */
-  private static void getAllChildren(List<EditPart> children, EditPart editPart) {
-    for (EditPart childEditPart : editPart.getChildren()) {
-      children.add(childEditPart);
-      getAllChildren(children, childEditPart);
-    }
-  }
+	/**
+	 * Returns a {@link List} including all of the children of the {@link EditPart} passed in.
+	 */
+	private static void getAllChildren(List<EditPart> children, EditPart editPart) {
+		for (EditPart childEditPart : editPart.getChildren()) {
+			children.add(childEditPart);
+			getAllChildren(children, childEditPart);
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/graphical/tools/ResizeTracker.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/graphical/tools/ResizeTracker.java
index 726e9f3f9..6d26045f4 100644
--- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/graphical/tools/ResizeTracker.java
+++ b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/graphical/tools/ResizeTracker.java
@@ -41,286 +41,286 @@
  * @coverage gef.graphical
  */
 public class ResizeTracker extends Tool {
-  private final List<EditPart> m_operationSet;
-  private final int m_direction;
-  private final Object m_requestType;
-  private ChangeBoundsRequest m_request;
+	private final List<EditPart> m_operationSet;
+	private final int m_direction;
+	private final Object m_requestType;
+	private ChangeBoundsRequest m_request;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ResizeTracker(int direction, Object requestType) {
-    this(null, direction, requestType);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ResizeTracker(int direction, Object requestType) {
+		this(null, direction, requestType);
+	}
 
-  public ResizeTracker(EditPart selectionEditPart, int direction, Object requestType) {
-    if (selectionEditPart == null) {
-      m_operationSet = null;
-    } else {
-      m_operationSet = Lists.newArrayList();
-      m_operationSet.add(selectionEditPart);
-    }
-    m_direction = direction;
-    m_requestType = requestType;
-    setDefaultCursor(ICursorConstants.Directional.getCursor(direction));
-  }
+	public ResizeTracker(EditPart selectionEditPart, int direction, Object requestType) {
+		if (selectionEditPart == null) {
+			m_operationSet = null;
+		} else {
+			m_operationSet = Lists.newArrayList();
+			m_operationSet.add(selectionEditPart);
+		}
+		m_direction = direction;
+		m_requestType = requestType;
+		setDefaultCursor(ICursorConstants.Directional.getCursor(direction));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the type of {@link Request} that is generated by this {@link ResizeTracker}. For tests.
-   */
-  public Object getRequestType() {
-    return m_requestType;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the type of {@link Request} that is generated by this {@link ResizeTracker}. For tests.
+	 */
+	public Object getRequestType() {
+		return m_requestType;
+	}
 
-  /**
-   * @return the resize direction. For tests.
-   */
-  public int getDirection() {
-    return m_direction;
-  }
+	/**
+	 * @return the resize direction. For tests.
+	 */
+	public int getDirection() {
+		return m_direction;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tool
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Add erases source feedback.
-   */
-  @Override
-  public void deactivate() {
-    eraseSourceFeedback();
-    setRequest(null);
-    super.deactivate();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tool
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Add erases source feedback.
+	 */
+	@Override
+	public void deactivate() {
+		eraseSourceFeedback();
+		setRequest(null);
+		super.deactivate();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Cursor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Cursor calculateCursor() {
-    if (m_state == STATE_DRAG) {
-      return getDefaultCursor();
-    }
-    return super.calculateCursor();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Cursor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Cursor calculateCursor() {
+		if (m_state == STATE_DRAG) {
+			return getDefaultCursor();
+		}
+		return super.calculateCursor();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // High-Level handle MouseEvent
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void handleButtonDown(int button) {
-    if (button == 1) {
-      if (m_state == STATE_INIT) {
-        m_state = STATE_DRAG;
-      }
-    } else {
-      m_state = STATE_INVALID;
-      eraseSourceFeedback();
-      setCommand(null);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// High-Level handle MouseEvent
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void handleButtonDown(int button) {
+		if (button == 1) {
+			if (m_state == STATE_INIT) {
+				m_state = STATE_DRAG;
+			}
+		} else {
+			m_state = STATE_INVALID;
+			eraseSourceFeedback();
+			setCommand(null);
+		}
+	}
 
-  @Override
-  protected void handleButtonUp(int button) {
-    if (m_state == STATE_DRAG_IN_PROGRESS) {
-      m_state = STATE_NONE;
-      eraseSourceFeedback();
-      executeCommand();
-    }
-  }
+	@Override
+	protected void handleButtonUp(int button) {
+		if (m_state == STATE_DRAG_IN_PROGRESS) {
+			m_state = STATE_NONE;
+			eraseSourceFeedback();
+			executeCommand();
+		}
+	}
 
-  @Override
-  protected void handleDragStarted() {
-    if (m_state == STATE_DRAG) {
-      m_state = STATE_DRAG_IN_PROGRESS;
-    }
-  }
+	@Override
+	protected void handleDragStarted() {
+		if (m_state == STATE_DRAG) {
+			m_state = STATE_DRAG_IN_PROGRESS;
+		}
+	}
 
-  @Override
-  protected void handleDragInProgress() {
-    if (m_state == STATE_DRAG_IN_PROGRESS) {
-      updateRequest();
-      showSourceFeedback();
-      updateCommand();
-    }
-  }
+	@Override
+	protected void handleDragInProgress() {
+		if (m_state == STATE_DRAG_IN_PROGRESS) {
+			updateRequest();
+			showSourceFeedback();
+			updateCommand();
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Handle KeyEvent
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void keyPressed(KeyEvent event, IEditPartViewer viewer) {
-    sendKeyRequest(true, event);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Handle KeyEvent
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void keyPressed(KeyEvent event, IEditPartViewer viewer) {
+		sendKeyRequest(true, event);
+	}
 
-  @Override
-  public void keyReleased(KeyEvent event, IEditPartViewer viewer) {
-    sendKeyRequest(false, event);
-  }
+	@Override
+	public void keyReleased(KeyEvent event, IEditPartViewer viewer) {
+		sendKeyRequest(false, event);
+	}
 
-  /**
-   * Sends the {@link KeyRequest} to the {@link EditPart}'s in operation set.
-   */
-  private void sendKeyRequest(boolean pressed, KeyEvent event) {
-    KeyRequest request = new KeyRequest(pressed, event);
-    for (EditPart editPart : createOperationSet()) {
-      editPart.performRequest(request);
-    }
-  }
+	/**
+	 * Sends the {@link KeyRequest} to the {@link EditPart}'s in operation set.
+	 */
+	private void sendKeyRequest(boolean pressed, KeyEvent event) {
+		KeyRequest request = new KeyRequest(pressed, event);
+		for (EditPart editPart : createOperationSet()) {
+			editPart.performRequest(request);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Request/Command
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Returns all selected parts which understand resizing.
-   */
-  @Override
-  protected List<EditPart> createOperationSet() {
-    if (m_operationSet != null) {
-      return m_operationSet;
-    }
-    // find target EditPart's that agree to process current request
-    List<EditPart> operationSet = super.createOperationSet();
-    for (ListIterator<EditPart> I = operationSet.listIterator(); I.hasNext();) {
-      EditPart part = I.next();
-      // find target for current EditPart
-      while (part != null) {
-        EditPart newPart = part.getTargetEditPart(getRequest());
-        if (newPart == part) {
-          break;
-        }
-        part = newPart;
-      }
-      // if current EditPart can not provide target, remove it
-      if (part == null) {
-        I.remove();
-        continue;
-      }
-      // use target EditPart
-      I.set(part);
-    }
-    //
-    return operationSet;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Request/Command
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Returns all selected parts which understand resizing.
+	 */
+	@Override
+	protected List<EditPart> createOperationSet() {
+		if (m_operationSet != null) {
+			return m_operationSet;
+		}
+		// find target EditPart's that agree to process current request
+		List<EditPart> operationSet = super.createOperationSet();
+		for (ListIterator<EditPart> I = operationSet.listIterator(); I.hasNext();) {
+			EditPart part = I.next();
+			// find target for current EditPart
+			while (part != null) {
+				EditPart newPart = part.getTargetEditPart(getRequest());
+				if (newPart == part) {
+					break;
+				}
+				part = newPart;
+			}
+			// if current EditPart can not provide target, remove it
+			if (part == null) {
+				I.remove();
+				continue;
+			}
+			// use target EditPart
+			I.set(part);
+		}
+		//
+		return operationSet;
+	}
 
-  /**
-   * Updates the request with the current {@link Tool#getOperationSet() operation set}, move delta,
-   * size delta and location.
-   */
-  private void updateRequest() {
-    // create request
-    if (getRequest() == null) {
-      setRequest(new ChangeBoundsRequest(m_requestType));
-      getRequest().setResizeDirection(m_direction);
-    }
-    // set EditPart's
-    getRequest().setEditParts(getOperationSet());
-    // set stateMask
-    getRequest().setStateMask(m_stateMask);
-    // update request
-    Point corner = new Point();
-    Dimension resize = new Dimension();
-    Dimension dragMoveDelta = getDragMoveDelta();
-    // calculate vertical move and size delta
-    if ((m_direction & IPositionConstants.NORTH) != 0) {
-      corner.y += dragMoveDelta.height;
-      resize.height -= dragMoveDelta.height;
-    } else if ((m_direction & IPositionConstants.SOUTH) != 0) {
-      resize.height += dragMoveDelta.height;
-    }
-    // calculate horizontal move and size delta
-    if ((m_direction & IPositionConstants.WEST) != 0) {
-      corner.x += dragMoveDelta.width;
-      resize.width -= dragMoveDelta.width;
-    } else if ((m_direction & IPositionConstants.EAST) != 0) {
-      resize.width += dragMoveDelta.width;
-    }
-    // set request data
-    getRequest().setMoveDelta(corner);
-    getRequest().setSizeDelta(resize);
-    getRequest().setLocation(getLocation());
-  }
+	/**
+	 * Updates the request with the current {@link Tool#getOperationSet() operation set}, move delta,
+	 * size delta and location.
+	 */
+	private void updateRequest() {
+		// create request
+		if (getRequest() == null) {
+			setRequest(new ChangeBoundsRequest(m_requestType));
+			getRequest().setResizeDirection(m_direction);
+		}
+		// set EditPart's
+		getRequest().setEditParts(getOperationSet());
+		// set stateMask
+		getRequest().setStateMask(m_stateMask);
+		// update request
+		Point corner = new Point();
+		Dimension resize = new Dimension();
+		Dimension dragMoveDelta = getDragMoveDelta();
+		// calculate vertical move and size delta
+		if ((m_direction & IPositionConstants.NORTH) != 0) {
+			corner.y += dragMoveDelta.height;
+			resize.height -= dragMoveDelta.height;
+		} else if ((m_direction & IPositionConstants.SOUTH) != 0) {
+			resize.height += dragMoveDelta.height;
+		}
+		// calculate horizontal move and size delta
+		if ((m_direction & IPositionConstants.WEST) != 0) {
+			corner.x += dragMoveDelta.width;
+			resize.width -= dragMoveDelta.width;
+		} else if ((m_direction & IPositionConstants.EAST) != 0) {
+			resize.width += dragMoveDelta.width;
+		}
+		// set request data
+		getRequest().setMoveDelta(corner);
+		getRequest().setSizeDelta(resize);
+		getRequest().setLocation(getLocation());
+	}
 
-  /**
-   * Asks each edit part in the {@link Tool#getOperationSet() operation set} to contribute to a
-   * {@link CompoundCommand}.
-   */
-  @Override
-  protected Command getCommand() {
-    CompoundCommand command = new CompoundCommand();
-    //
-    for (EditPart part : getOperationSet()) {
-      command.add(part.getCommand(getRequest()));
-    }
-    //
-    return command.unwrap();
-  }
+	/**
+	 * Asks each edit part in the {@link Tool#getOperationSet() operation set} to contribute to a
+	 * {@link CompoundCommand}.
+	 */
+	@Override
+	protected Command getCommand() {
+		CompoundCommand command = new CompoundCommand();
+		//
+		for (EditPart part : getOperationSet()) {
+			command.add(part.getCommand(getRequest()));
+		}
+		//
+		return command.unwrap();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Feedback
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private boolean m_isShowingFeedback;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Feedback
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private boolean m_isShowingFeedback;
 
-  /**
-   * Asks the edit parts in the {@link Tool#getOperationSet() operation set} to show source
-   * feedback.
-   */
-  protected void showSourceFeedback() {
-    for (EditPart part : getOperationSet()) {
-      part.showSourceFeedback(getRequest());
-    }
-    setShowingFeedback(true);
-  }
+	/**
+	 * Asks the edit parts in the {@link Tool#getOperationSet() operation set} to show source
+	 * feedback.
+	 */
+	protected void showSourceFeedback() {
+		for (EditPart part : getOperationSet()) {
+			part.showSourceFeedback(getRequest());
+		}
+		setShowingFeedback(true);
+	}
 
-  /**
-   * Asks the edit parts in the {@link Tool#getOperationSet() operation set} to erase their source
-   * feedback.
-   */
-  protected void eraseSourceFeedback() {
-    if (isShowingFeedback()) {
-      setShowingFeedback(false);
-      for (EditPart part : getOperationSet()) {
-        part.eraseSourceFeedback(getRequest());
-      }
-    }
-  }
+	/**
+	 * Asks the edit parts in the {@link Tool#getOperationSet() operation set} to erase their source
+	 * feedback.
+	 */
+	protected void eraseSourceFeedback() {
+		if (isShowingFeedback()) {
+			setShowingFeedback(false);
+			for (EditPart part : getOperationSet()) {
+				part.eraseSourceFeedback(getRequest());
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected final void setShowingFeedback(boolean isShowingFeedback) {
-    m_isShowingFeedback = isShowingFeedback;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected final void setShowingFeedback(boolean isShowingFeedback) {
+		m_isShowingFeedback = isShowingFeedback;
+	}
 
-  protected final boolean isShowingFeedback() {
-    return m_isShowingFeedback;
-  }
+	protected final boolean isShowingFeedback() {
+		return m_isShowingFeedback;
+	}
 
-  private void setRequest(ChangeBoundsRequest request) {
-    m_request = request;
-  }
+	private void setRequest(ChangeBoundsRequest request) {
+		m_request = request;
+	}
 
-  protected final ChangeBoundsRequest getRequest() {
-    return m_request;
-  }
+	protected final ChangeBoundsRequest getRequest() {
+		return m_request;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/graphical/tools/SelectionTool.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/graphical/tools/SelectionTool.java
index 2af22ddf5..515da402d 100644
--- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/graphical/tools/SelectionTool.java
+++ b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/graphical/tools/SelectionTool.java
@@ -38,294 +38,294 @@
  * @coverage gef.graphical
  */
 public class SelectionTool extends TargetingTool {
-  private Tool m_dragTracker;
+	private Tool m_dragTracker;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // DragTracker
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets the drag tracker {@link Tool} for this {@link SelectionTool}. If the current drag tracker
-   * is not <code>null</code>, this method deactivates it. If the new drag tracker is not
-   * <code>null</code>, this method will activate it and set the {@link EditDomain} and
-   * {@link IEditPartViewer}.
-   */
-  public void setDragTrackerTool(Tool dragTracker) {
-    if (m_dragTracker != dragTracker) {
-      if (m_dragTracker != null) {
-        m_dragTracker.deactivate();
-      }
-      //
-      m_dragTracker = dragTracker;
-      refreshCursor();
-      //
-      if (m_dragTracker != null) {
-        m_dragTracker.setDomain(getDomain());
-        m_dragTracker.setViewer(getViewer());
-        m_dragTracker.activate();
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// DragTracker
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets the drag tracker {@link Tool} for this {@link SelectionTool}. If the current drag tracker
+	 * is not <code>null</code>, this method deactivates it. If the new drag tracker is not
+	 * <code>null</code>, this method will activate it and set the {@link EditDomain} and
+	 * {@link IEditPartViewer}.
+	 */
+	public void setDragTrackerTool(Tool dragTracker) {
+		if (m_dragTracker != dragTracker) {
+			if (m_dragTracker != null) {
+				m_dragTracker.deactivate();
+			}
+			//
+			m_dragTracker = dragTracker;
+			refreshCursor();
+			//
+			if (m_dragTracker != null) {
+				m_dragTracker.setDomain(getDomain());
+				m_dragTracker.setViewer(getViewer());
+				m_dragTracker.activate();
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tool
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Deactivates the tool. This method is called whenever the user switches to another tool. Use
-   * this method to do some clean-up when the tool is switched. Sets the drag tracker to
-   * <code>null</code>.
-   */
-  @Override
-  public void deactivate() {
-    if (m_dragTracker != null) {
-      m_dragTracker.deactivate();
-      m_dragTracker = null;
-    }
-    super.deactivate();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tool
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Deactivates the tool. This method is called whenever the user switches to another tool. Use
+	 * this method to do some clean-up when the tool is switched. Sets the drag tracker to
+	 * <code>null</code>.
+	 */
+	@Override
+	public void deactivate() {
+		if (m_dragTracker != null) {
+			m_dragTracker.deactivate();
+			m_dragTracker = null;
+		}
+		super.deactivate();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Cursor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * If there is a drag tracker, this method does nothing so that the drag tracker can take care of
-   * the cursor. Otherwise, calls <code>super</code>.
-   */
-  @Override
-  public void refreshCursor() {
-    // If we have a DragTracker, let it control the Cursor
-    if (m_dragTracker == null) {
-      super.refreshCursor();
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Cursor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * If there is a drag tracker, this method does nothing so that the drag tracker can take care of
+	 * the cursor. Otherwise, calls <code>super</code>.
+	 */
+	@Override
+	public void refreshCursor() {
+		// If we have a DragTracker, let it control the Cursor
+		if (m_dragTracker == null) {
+			super.refreshCursor();
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // High-Level handle MouseEvent
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void handleButtonDown(int button) {
-    if (m_state == STATE_INIT) {
-      m_state = STATE_DRAG;
-      //
-      if (m_dragTracker != null) {
-        m_dragTracker.deactivate();
-      }
-      //
-      if ((m_stateMask & SWT.ALT) != 0) {
-        setDragTrackerTool(new MarqueeDragTracker());
-        return;
-      }
-      //
-      Handle handle = getViewer().findTargetHandle(m_currentScreenX, m_currentScreenY);
-      if (handle != null) {
-        setDragTrackerTool(handle.getDragTrackerTool());
-        return;
-      }
-      //
-      updateTargetRequest();
-      ((SelectionRequest) getTargetRequest()).setLastButtonPressed(button);
-      updateTargetUnderMouse();
-      //
-      EditPart editPart = getTargetEditPart();
-      if (editPart == null) {
-        setDragTrackerTool(null);
-        getViewer().deselectAll();
-      } else {
-        setDragTrackerTool(editPart.getDragTrackerTool(getTargetRequest()));
-        lockTargetEditPart(editPart);
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// High-Level handle MouseEvent
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void handleButtonDown(int button) {
+		if (m_state == STATE_INIT) {
+			m_state = STATE_DRAG;
+			//
+			if (m_dragTracker != null) {
+				m_dragTracker.deactivate();
+			}
+			//
+			if ((m_stateMask & SWT.ALT) != 0) {
+				setDragTrackerTool(new MarqueeDragTracker());
+				return;
+			}
+			//
+			Handle handle = getViewer().findTargetHandle(m_currentScreenX, m_currentScreenY);
+			if (handle != null) {
+				setDragTrackerTool(handle.getDragTrackerTool());
+				return;
+			}
+			//
+			updateTargetRequest();
+			((SelectionRequest) getTargetRequest()).setLastButtonPressed(button);
+			updateTargetUnderMouse();
+			//
+			EditPart editPart = getTargetEditPart();
+			if (editPart == null) {
+				setDragTrackerTool(null);
+				getViewer().deselectAll();
+			} else {
+				setDragTrackerTool(editPart.getDragTrackerTool(getTargetRequest()));
+				lockTargetEditPart(editPart);
+			}
+		}
+	}
 
-  @Override
-  protected void handleButtonUp(int button) {
-    ((SelectionRequest) getTargetRequest()).setLastButtonPressed(0);
-    setDragTrackerTool(null);
-    m_state = STATE_INIT;
-    unlockTargetEditPart();
-  }
+	@Override
+	protected void handleButtonUp(int button) {
+		((SelectionRequest) getTargetRequest()).setLastButtonPressed(0);
+		setDragTrackerTool(null);
+		m_state = STATE_INIT;
+		unlockTargetEditPart();
+	}
 
-  @Override
-  protected void handleMove() {
-    if (m_state == STATE_DRAG) {
-      m_state = STATE_INIT;
-      setDragTrackerTool(null);
-    }
-    if (m_state == STATE_INIT) {
-      updateTargetRequest();
-      updateTargetUnderMouse();
-      showTargetFeedback();
-    }
-  }
+	@Override
+	protected void handleMove() {
+		if (m_state == STATE_DRAG) {
+			m_state = STATE_INIT;
+			setDragTrackerTool(null);
+		}
+		if (m_state == STATE_INIT) {
+			updateTargetRequest();
+			updateTargetUnderMouse();
+			showTargetFeedback();
+		}
+	}
 
-  /**
-   * If there's a drag tracker, sets it to <code>null</code> and then sets this tool's state to the
-   * initial state.
-   */
-  @Override
-  protected void handleViewerExited() {
-    if (m_state == STATE_DRAG || m_state == STATE_DRAG_IN_PROGRESS) {
-      // send low level event to give current tracker a chance to process 'mouse up' event.
-      Event event = new Event();
-      event.x = m_currentScreenX;
-      event.y = m_currentScreenY;
-      event.stateMask = m_stateMask;
-      event.button = m_button;
-      event.widget = getViewer().getControl();
-      mouseUp(new MouseEvent(event), getViewer());
-    }
-    super.handleViewerExited();
-  }
+	/**
+	 * If there's a drag tracker, sets it to <code>null</code> and then sets this tool's state to the
+	 * initial state.
+	 */
+	@Override
+	protected void handleViewerExited() {
+		if (m_state == STATE_DRAG || m_state == STATE_DRAG_IN_PROGRESS) {
+			// send low level event to give current tracker a chance to process 'mouse up' event.
+			Event event = new Event();
+			event.x = m_currentScreenX;
+			event.y = m_currentScreenY;
+			event.stateMask = m_stateMask;
+			event.button = m_button;
+			event.widget = getViewer().getControl();
+			mouseUp(new MouseEvent(event), getViewer());
+		}
+		super.handleViewerExited();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Request
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Creates a {@link SelectionRequest} for the target request.
-   */
-  @Override
-  protected Request createTargetRequest() {
-    return new SelectionRequest(Request.REQ_SELECTION);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Request
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Creates a {@link SelectionRequest} for the target request.
+	 */
+	@Override
+	protected Request createTargetRequest() {
+		return new SelectionRequest(Request.REQ_SELECTION);
+	}
 
-  /**
-   * Sets the statemask and location of the target request (which is a {@link SelectionRequest}).
-   */
-  @Override
-  protected void updateTargetRequest() {
-    super.updateTargetRequest();
-    SelectionRequest request = (SelectionRequest) getTargetRequest();
-    request.setLocation(getLocation());
-  }
+	/**
+	 * Sets the statemask and location of the target request (which is a {@link SelectionRequest}).
+	 */
+	@Override
+	protected void updateTargetRequest() {
+		super.updateTargetRequest();
+		SelectionRequest request = (SelectionRequest) getTargetRequest();
+		request.setLocation(getLocation());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Handling Operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Returns a new {@link IConditional} that evaluates to <code>true</code> if the queried edit
-   * part's {@link EditPart#isSelectable()} method returns <code>true</code>.
-   */
-  @Override
-  protected IConditional getTargetingConditional() {
-    return new IConditional() {
-      @Override
-      public boolean evaluate(EditPart editPart) {
-        return editPart.isSelectable();
-      }
-    };
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Handling Operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Returns a new {@link IConditional} that evaluates to <code>true</code> if the queried edit
+	 * part's {@link EditPart#isSelectable()} method returns <code>true</code>.
+	 */
+	@Override
+	protected IConditional getTargetingConditional() {
+		return new IConditional() {
+			@Override
+			public boolean evaluate(EditPart editPart) {
+				return editPart.isSelectable();
+			}
+		};
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Low-Level handle MouseEvent
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Forwards the mouse down event to the drag tracker, if one exists.
-   */
-  @Override
-  public void mouseDown(MouseEvent event, IEditPartViewer viewer) {
-    super.mouseDown(event, viewer);
-    if (m_dragTracker != null) {
-      m_dragTracker.mouseDown(event, viewer);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Low-Level handle MouseEvent
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Forwards the mouse down event to the drag tracker, if one exists.
+	 */
+	@Override
+	public void mouseDown(MouseEvent event, IEditPartViewer viewer) {
+		super.mouseDown(event, viewer);
+		if (m_dragTracker != null) {
+			m_dragTracker.mouseDown(event, viewer);
+		}
+	}
 
-  /**
-   * Forwards the mouse up event to the drag tracker, if one exists.
-   */
-  @Override
-  public void mouseUp(MouseEvent event, IEditPartViewer viewer) {
-    if (m_dragTracker != null) {
-      m_dragTracker.mouseUp(event, viewer);
-    }
-    super.mouseUp(event, viewer);
-  }
+	/**
+	 * Forwards the mouse up event to the drag tracker, if one exists.
+	 */
+	@Override
+	public void mouseUp(MouseEvent event, IEditPartViewer viewer) {
+		if (m_dragTracker != null) {
+			m_dragTracker.mouseUp(event, viewer);
+		}
+		super.mouseUp(event, viewer);
+	}
 
-  /**
-   * Forwards the mouse drag event to the drag tracker, if one exists.
-   */
-  @Override
-  public void mouseDrag(MouseEvent event, IEditPartViewer viewer) {
-    if (m_dragTracker != null) {
-      m_dragTracker.mouseDrag(event, viewer);
-    }
-    super.mouseDrag(event, viewer);
-  }
+	/**
+	 * Forwards the mouse drag event to the drag tracker, if one exists.
+	 */
+	@Override
+	public void mouseDrag(MouseEvent event, IEditPartViewer viewer) {
+		if (m_dragTracker != null) {
+			m_dragTracker.mouseDrag(event, viewer);
+		}
+		super.mouseDrag(event, viewer);
+	}
 
-  /**
-   * Forwards the mouse move event to the drag tracker, if one exists.
-   */
-  @Override
-  public void mouseMove(MouseEvent event, IEditPartViewer viewer) {
-    if (m_dragTracker != null) {
-      m_dragTracker.mouseMove(event, viewer);
-    }
-    super.mouseMove(event, viewer);
-  }
+	/**
+	 * Forwards the mouse move event to the drag tracker, if one exists.
+	 */
+	@Override
+	public void mouseMove(MouseEvent event, IEditPartViewer viewer) {
+		if (m_dragTracker != null) {
+			m_dragTracker.mouseMove(event, viewer);
+		}
+		super.mouseMove(event, viewer);
+	}
 
-  /**
-   * Forwards the mouse double clicked event to the drag tracker, if one exists.
-   */
-  @Override
-  public void mouseDoubleClick(MouseEvent event, IEditPartViewer viewer) {
-    super.mouseDoubleClick(event, viewer);
-    if (m_dragTracker != null) {
-      m_dragTracker.mouseDoubleClick(event, viewer);
-    }
-  }
+	/**
+	 * Forwards the mouse double clicked event to the drag tracker, if one exists.
+	 */
+	@Override
+	public void mouseDoubleClick(MouseEvent event, IEditPartViewer viewer) {
+		super.mouseDoubleClick(event, viewer);
+		if (m_dragTracker != null) {
+			m_dragTracker.mouseDoubleClick(event, viewer);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Handle KeyEvent
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void keyPressed(KeyEvent event, IEditPartViewer viewer) {
-    if (m_dragTracker != null) {
-      m_dragTracker.keyPressed(event, viewer);
-    } else {
-      List<EditPart> selection = viewer.getSelectedEditParts();
-      //
-      if (event.keyCode == SWT.ESC) {
-        if (!selection.isEmpty()) {
-          EditPart part = selection.get(0);
-          EditPart parent = part.getParent();
-          //
-          if (parent != null && !(parent instanceof IRootContainer)) {
-            viewer.select(parent);
-          }
-        }
-      } else {
-        handleKeyEvent(true, event, selection);
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Handle KeyEvent
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void keyPressed(KeyEvent event, IEditPartViewer viewer) {
+		if (m_dragTracker != null) {
+			m_dragTracker.keyPressed(event, viewer);
+		} else {
+			List<EditPart> selection = viewer.getSelectedEditParts();
+			//
+			if (event.keyCode == SWT.ESC) {
+				if (!selection.isEmpty()) {
+					EditPart part = selection.get(0);
+					EditPart parent = part.getParent();
+					//
+					if (parent != null && !(parent instanceof IRootContainer)) {
+						viewer.select(parent);
+					}
+				}
+			} else {
+				handleKeyEvent(true, event, selection);
+			}
+		}
+	}
 
-  @Override
-  public void keyReleased(KeyEvent event, IEditPartViewer viewer) {
-    if (m_dragTracker != null) {
-      m_dragTracker.keyReleased(event, viewer);
-    } else if (event.keyCode != SWT.ESC) {
-      handleKeyEvent(false, event, viewer.getSelectedEditParts());
-    }
-  }
+	@Override
+	public void keyReleased(KeyEvent event, IEditPartViewer viewer) {
+		if (m_dragTracker != null) {
+			m_dragTracker.keyReleased(event, viewer);
+		} else if (event.keyCode != SWT.ESC) {
+			handleKeyEvent(false, event, viewer.getSelectedEditParts());
+		}
+	}
 
-  private static void handleKeyEvent(boolean pressed, KeyEvent event, List<EditPart> selection) {
-    KeyRequest request = new KeyRequest(pressed, event);
-    for (EditPart part : selection) {
-      part.performRequest(request);
-    }
-  }
+	private static void handleKeyEvent(boolean pressed, KeyEvent event, List<EditPart> selection) {
+		KeyRequest request = new KeyRequest(pressed, event);
+		for (EditPart part : selection) {
+			part.performRequest(request);
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/tree/TreeEditPart.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/tree/TreeEditPart.java
index 6f0be82d6..fc2621963 100644
--- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/tree/TreeEditPart.java
+++ b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/tree/TreeEditPart.java
@@ -27,97 +27,97 @@
  * @coverage gef.tree
  */
 public abstract class TreeEditPart extends EditPart {
-  private TreeItem m_widget;
-  private boolean m_expandedShouldRestore;
-  private boolean m_expanded;
+	private TreeItem m_widget;
+	private boolean m_expandedShouldRestore;
+	private boolean m_expanded;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Widget
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public TreeItem getWidget() {
-    return m_widget;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Widget
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public TreeItem getWidget() {
+		return m_widget;
+	}
 
-  public void setWidget(TreeItem widget) {
-    m_widget = widget;
-    //
-    List<EditPart> children = getChildren();
-    if (m_widget == null) {
-      for (EditPart editPart : children) {
-        TreeEditPart treePart = (TreeEditPart) editPart;
-        treePart.setWidget(null);
-      }
-    } else {
-      m_widget.setData(this);
-      m_widget.addDisposeListener(new DisposeListener() {
-        @Override
-        public void widgetDisposed(DisposeEvent e) {
-          m_expandedShouldRestore = true;
-          m_expanded = m_widget.getExpanded();
-        }
-      });
-    }
-  }
+	public void setWidget(TreeItem widget) {
+		m_widget = widget;
+		//
+		List<EditPart> children = getChildren();
+		if (m_widget == null) {
+			for (EditPart editPart : children) {
+				TreeEditPart treePart = (TreeEditPart) editPart;
+				treePart.setWidget(null);
+			}
+		} else {
+			m_widget.setData(this);
+			m_widget.addDisposeListener(new DisposeListener() {
+				@Override
+				public void widgetDisposed(DisposeEvent e) {
+					m_expandedShouldRestore = true;
+					m_expanded = m_widget.getExpanded();
+				}
+			});
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // EditPart
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void addChildVisual(EditPart childPart, int index) {
-    TreeEditPart treePart = (TreeEditPart) childPart;
-    treePart.setWidget(new TreeItem(getWidget(), SWT.NONE, index));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// EditPart
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void addChildVisual(EditPart childPart, int index) {
+		TreeEditPart treePart = (TreeEditPart) childPart;
+		treePart.setWidget(new TreeItem(getWidget(), SWT.NONE, index));
+	}
 
-  @Override
-  protected void removeChildVisual(EditPart childPart) {
-    TreeEditPart treePart = (TreeEditPart) childPart;
-    if (treePart.getWidget() != null) {
-      treePart.getWidget().dispose();
-      treePart.setWidget(null);
-    }
-  }
+	@Override
+	protected void removeChildVisual(EditPart childPart) {
+		TreeEditPart treePart = (TreeEditPart) childPart;
+		if (treePart.getWidget() != null) {
+			treePart.getWidget().dispose();
+			treePart.setWidget(null);
+		}
+	}
 
-  @Override
-  protected void updateChildVisual(EditPart childPart, int index) {
-    TreeEditPart treePart = (TreeEditPart) childPart;
-    if (treePart.getWidget() == null) {
-      treePart.setWidget(new TreeItem(getWidget(), SWT.NONE, index));
-    }
-  }
+	@Override
+	protected void updateChildVisual(EditPart childPart, int index) {
+		TreeEditPart treePart = (TreeEditPart) childPart;
+		if (treePart.getWidget() == null) {
+			treePart.setWidget(new TreeItem(getWidget(), SWT.NONE, index));
+		}
+	}
 
-  @Override
-  public void refresh() {
-    super.refresh();
-    if (m_expandedShouldRestore) {
-      m_expandedShouldRestore = false;
-      TreeItem widget = getWidget();
-      if (widget != null && !widget.isDisposed()) {
-        widget.setExpanded(m_expanded);
-      }
-    }
-  }
+	@Override
+	public void refresh() {
+		super.refresh();
+		if (m_expandedShouldRestore) {
+			m_expandedShouldRestore = false;
+			TreeItem widget = getWidget();
+			if (widget != null && !widget.isDisposed()) {
+				widget.setExpanded(m_expanded);
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Policy
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createEditPolicies() {
-    //installEditPolicy("TreeToolAdapterEditPolicy", new TreeToolAdapterEditPolicy());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Policy
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createEditPolicies() {
+		//installEditPolicy("TreeToolAdapterEditPolicy", new TreeToolAdapterEditPolicy());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // DragTracking
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Tool getDragTrackerTool(Request request) {
-    return new DoubleClickEditPartTracker(this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// DragTracking
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Tool getDragTrackerTool(Request request) {
+		return new DoubleClickEditPartTracker(this);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/tree/policies/LayoutEditPolicy.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/tree/policies/LayoutEditPolicy.java
index 55058caf8..b7c544142 100644
--- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/tree/policies/LayoutEditPolicy.java
+++ b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/tree/policies/LayoutEditPolicy.java
@@ -45,357 +45,357 @@
  * @coverage gef.tree
  */
 public abstract class LayoutEditPolicy extends EditPolicy {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the <i>host</i> {@link TreeEditPart} on which this policy is installed.
-   */
-  @Override
-  public TreeEditPart getHost() {
-    return (TreeEditPart) super.getHost();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the <i>host</i> {@link TreeEditPart} on which this policy is installed.
+	 */
+	@Override
+	public TreeEditPart getHost() {
+		return (TreeEditPart) super.getHost();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Widget
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Convenience method to return the host's {@link TreeItem}.
-   */
-  protected final TreeItem getHostWidget() {
-    return getHost().getWidget();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Widget
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Convenience method to return the host's {@link TreeItem}.
+	 */
+	protected final TreeItem getHostWidget() {
+		return getHost().getWidget();
+	}
 
-  /**
-   * Convenience method to return the host's {@link Tree}.
-   */
-  protected final Tree getTree() {
-    return getHostWidget().getParent();
-  }
+	/**
+	 * Convenience method to return the host's {@link Tree}.
+	 */
+	protected final Tree getTree() {
+		return getHostWidget().getParent();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Request/Command
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link ILayoutRequestValidator} for validating {@link Request#REQ_CREATE},
-   *         {@link Request#REQ_PASTE}, {@link Request#REQ_MOVE} and {@link Request#REQ_ADD}
-   *         requests.
-   */
-  protected ILayoutRequestValidator getRequestValidator() {
-    return ILayoutRequestValidator.TRUE;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Request/Command
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link ILayoutRequestValidator} for validating {@link Request#REQ_CREATE},
+	 *         {@link Request#REQ_PASTE}, {@link Request#REQ_MOVE} and {@link Request#REQ_ADD}
+	 *         requests.
+	 */
+	protected ILayoutRequestValidator getRequestValidator() {
+		return ILayoutRequestValidator.TRUE;
+	}
 
-  /**
-   * @return <code>true</code> if the {@link Request} is an {@link Request#REQ_CREATE},
-   *         {@link Request#REQ_PASTE}, {@link Request#REQ_MOVE} or {@link Request#REQ_ADD}.
-   */
-  protected boolean isRequestCondition(Request request) {
-    Object type = request.getType();
-    ILayoutRequestValidator validator = getRequestValidator();
-    EditPart host = getHost();
-    if (type == Request.REQ_CREATE) {
-      return validator.validateCreateRequest(host, (CreateRequest) request);
-    }
-    if (type == Request.REQ_PASTE) {
-      return validator.validatePasteRequest(host, (PasteRequest) request);
-    }
-    if (type == Request.REQ_MOVE) {
-      return validator.validateMoveRequest(host, (ChangeBoundsRequest) request);
-    }
-    if (type == Request.REQ_ADD) {
-      return validator.validateAddRequest(host, (ChangeBoundsRequest) request);
-    }
-    return false;
-  }
+	/**
+	 * @return <code>true</code> if the {@link Request} is an {@link Request#REQ_CREATE},
+	 *         {@link Request#REQ_PASTE}, {@link Request#REQ_MOVE} or {@link Request#REQ_ADD}.
+	 */
+	protected boolean isRequestCondition(Request request) {
+		Object type = request.getType();
+		ILayoutRequestValidator validator = getRequestValidator();
+		EditPart host = getHost();
+		if (type == Request.REQ_CREATE) {
+			return validator.validateCreateRequest(host, (CreateRequest) request);
+		}
+		if (type == Request.REQ_PASTE) {
+			return validator.validatePasteRequest(host, (PasteRequest) request);
+		}
+		if (type == Request.REQ_MOVE) {
+			return validator.validateMoveRequest(host, (ChangeBoundsRequest) request);
+		}
+		if (type == Request.REQ_ADD) {
+			return validator.validateAddRequest(host, (ChangeBoundsRequest) request);
+		}
+		return false;
+	}
 
-  @Override
-  public boolean understandsRequest(Request request) {
-    return isRequestCondition(request);
-  }
+	@Override
+	public boolean understandsRequest(Request request) {
+		return isRequestCondition(request);
+	}
 
-  /**
-   * @return <i>host</i> if the {@link Request} is an {@link Request#REQ_CREATE},
-   *         {@link Request#REQ_PASTE}, {@link Request#REQ_MOVE} or {@link Request#REQ_ADD}.
-   */
-  @Override
-  public EditPart getTargetEditPart(Request request) {
-    if (isRequestCondition(request)) {
-      // if target item is host, then check for before/after locations
-      {
-        IDropRequest dropRequest = (IDropRequest) request;
-        Point location = dropRequest.getLocation();
-        TreeItem targetItem = getTree().getItem(location.getSWTPoint());
-        if (targetItem == getHostWidget()
-            && (isBeforeLocation(targetItem, location) || isAfterLocation(targetItem, location))) {
-          return null;
-        }
-      }
-      // OK drop on host
-      return getHost();
-    }
-    return null;
-  }
+	/**
+	 * @return <i>host</i> if the {@link Request} is an {@link Request#REQ_CREATE},
+	 *         {@link Request#REQ_PASTE}, {@link Request#REQ_MOVE} or {@link Request#REQ_ADD}.
+	 */
+	@Override
+	public EditPart getTargetEditPart(Request request) {
+		if (isRequestCondition(request)) {
+			// if target item is host, then check for before/after locations
+			{
+				IDropRequest dropRequest = (IDropRequest) request;
+				Point location = dropRequest.getLocation();
+				TreeItem targetItem = getTree().getItem(location.getSWTPoint());
+				if (targetItem == getHostWidget()
+						&& (isBeforeLocation(targetItem, location) || isAfterLocation(targetItem, location))) {
+					return null;
+				}
+			}
+			// OK drop on host
+			return getHost();
+		}
+		return null;
+	}
 
-  /**
-   * Factors incoming requests into various specific methods.
-   */
-  @Override
-  public Command getCommand(Request request) {
-    // prepare drop location
-    IDropRequest dropRequest = (IDropRequest) request;
-    Point location = dropRequest.getLocation();
-    // prepare target item
-    TreeItem targetItem = getTree().getItem(location.getSWTPoint());
-    if (targetItem == null || targetItem.getData() == null) {
-      return null;
-    }
-    // prepare children
-    List<EditPart> children = getReferenceChildren(request);
-    // calculate next reference
-    Object referenceObject = null;
-    if (targetItem == getHostWidget()) {
-      // drop to this
-    } else {
-      // drop to children
-      EditPart dropPart = (EditPart) targetItem.getData();
-      // prepare index of target part
-      int dropIndex = children.indexOf(dropPart);
-      if (dropIndex == -1) {
-        return null;
-      }
-      // analyze before/after target
-      int nextIndex = dropIndex + 1;
-      if (isBeforeLocation(targetItem, location)) {
-        referenceObject = dropPart.getModel();
-      } else if (nextIndex < children.size()) {
-        referenceObject = children.get(nextIndex).getModel();
-      }
-    }
-    // route request
-    return getCommand(request, referenceObject);
-  }
+	/**
+	 * Factors incoming requests into various specific methods.
+	 */
+	@Override
+	public Command getCommand(Request request) {
+		// prepare drop location
+		IDropRequest dropRequest = (IDropRequest) request;
+		Point location = dropRequest.getLocation();
+		// prepare target item
+		TreeItem targetItem = getTree().getItem(location.getSWTPoint());
+		if (targetItem == null || targetItem.getData() == null) {
+			return null;
+		}
+		// prepare children
+		List<EditPart> children = getReferenceChildren(request);
+		// calculate next reference
+		Object referenceObject = null;
+		if (targetItem == getHostWidget()) {
+			// drop to this
+		} else {
+			// drop to children
+			EditPart dropPart = (EditPart) targetItem.getData();
+			// prepare index of target part
+			int dropIndex = children.indexOf(dropPart);
+			if (dropIndex == -1) {
+				return null;
+			}
+			// analyze before/after target
+			int nextIndex = dropIndex + 1;
+			if (isBeforeLocation(targetItem, location)) {
+				referenceObject = dropPart.getModel();
+			} else if (nextIndex < children.size()) {
+				referenceObject = children.get(nextIndex).getModel();
+			}
+		}
+		// route request
+		return getCommand(request, referenceObject);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Reference children
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Checks that given {@link EditPart} can be used as reference child.
-   */
-  protected boolean isGoodReferenceChild(Request request, EditPart editPart) {
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Reference children
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Checks that given {@link EditPart} can be used as reference child.
+	 */
+	protected boolean isGoodReferenceChild(Request request, EditPart editPart) {
+		return false;
+	}
 
-  /**
-   * @return the {@link List} of {@link EditPart}'s that can be used as references.
-   */
-  private List<EditPart> getReferenceChildren(Request request) {
-    List<EditPart> allChildren = getHost().getChildren();
-    List<EditPart> referenceChildren = Lists.newArrayList();
-    //
-    for (EditPart editPart : allChildren) {
-      if (isGoodReferenceChild(request, editPart)) {
-        referenceChildren.add(editPart);
-      }
-    }
-    //
-    return referenceChildren;
-  }
+	/**
+	 * @return the {@link List} of {@link EditPart}'s that can be used as references.
+	 */
+	private List<EditPart> getReferenceChildren(Request request) {
+		List<EditPart> allChildren = getHost().getChildren();
+		List<EditPart> referenceChildren = Lists.newArrayList();
+		//
+		for (EditPart editPart : allChildren) {
+			if (isGoodReferenceChild(request, editPart)) {
+				referenceChildren.add(editPart);
+			}
+		}
+		//
+		return referenceChildren;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link Command} for given {@link Request} and reference {@link Object}.
-   */
-  protected Command getCommand(Request request, Object referenceObject) {
-    Object type = request.getType();
-    if (Request.REQ_CREATE.equals(type)) {
-      CreateRequest createRequest = (CreateRequest) request;
-      return getCreateCommand(createRequest.getNewObject(), referenceObject);
-    }
-    if (Request.REQ_PASTE.equals(type)) {
-      PasteRequest pasteRequest = (PasteRequest) request;
-      return getPasteCommand(pasteRequest, referenceObject);
-    }
-    if (Request.REQ_MOVE.equals(type)) {
-      ChangeBoundsRequest boundsRequest = (ChangeBoundsRequest) request;
-      return getMoveCommand(boundsRequest.getEditParts(), referenceObject);
-    }
-    if (Request.REQ_ADD.equals(type)) {
-      ChangeBoundsRequest boundsRequest = (ChangeBoundsRequest) request;
-      return getAddCommand(boundsRequest.getEditParts(), referenceObject);
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link Command} for given {@link Request} and reference {@link Object}.
+	 */
+	protected Command getCommand(Request request, Object referenceObject) {
+		Object type = request.getType();
+		if (Request.REQ_CREATE.equals(type)) {
+			CreateRequest createRequest = (CreateRequest) request;
+			return getCreateCommand(createRequest.getNewObject(), referenceObject);
+		}
+		if (Request.REQ_PASTE.equals(type)) {
+			PasteRequest pasteRequest = (PasteRequest) request;
+			return getPasteCommand(pasteRequest, referenceObject);
+		}
+		if (Request.REQ_MOVE.equals(type)) {
+			ChangeBoundsRequest boundsRequest = (ChangeBoundsRequest) request;
+			return getMoveCommand(boundsRequest.getEditParts(), referenceObject);
+		}
+		if (Request.REQ_ADD.equals(type)) {
+			ChangeBoundsRequest boundsRequest = (ChangeBoundsRequest) request;
+			return getAddCommand(boundsRequest.getEditParts(), referenceObject);
+		}
+		return null;
+	}
 
-  /**
-   * @return the {@link Command} for {@link Request#REQ_CREATE}.
-   */
-  protected Command getCreateCommand(Object newObject, Object referenceObject) {
-    return null;
-  }
+	/**
+	 * @return the {@link Command} for {@link Request#REQ_CREATE}.
+	 */
+	protected Command getCreateCommand(Object newObject, Object referenceObject) {
+		return null;
+	}
 
-  /**
-   * @return the {@link Command} for {@link Request#REQ_PASTE}.
-   */
-  protected Command getPasteCommand(PasteRequest request, Object referenceObject) {
-    return null;
-  }
+	/**
+	 * @return the {@link Command} for {@link Request#REQ_PASTE}.
+	 */
+	protected Command getPasteCommand(PasteRequest request, Object referenceObject) {
+		return null;
+	}
 
-  /**
-   * @return the {@link Command} for {@link Request#REQ_MOVE}.
-   */
-  protected Command getMoveCommand(List<EditPart> moveParts, Object referenceObject) {
-    return null;
-  }
+	/**
+	 * @return the {@link Command} for {@link Request#REQ_MOVE}.
+	 */
+	protected Command getMoveCommand(List<EditPart> moveParts, Object referenceObject) {
+		return null;
+	}
 
-  /**
-   * @return the {@link Command} for {@link Request#REQ_ADD}.
-   */
-  protected Command getAddCommand(List<EditPart> addParts, Object referenceObject) {
-    return null;
-  }
+	/**
+	 * @return the {@link Command} for {@link Request#REQ_ADD}.
+	 */
+	protected Command getAddCommand(List<EditPart> addParts, Object referenceObject) {
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Feedback
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void showTargetFeedback(Request request) {
-    if (isRequestCondition(request)) {
-      showLayoutTargetFeedback(request);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Feedback
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void showTargetFeedback(Request request) {
+		if (isRequestCondition(request)) {
+			showLayoutTargetFeedback(request);
+		}
+	}
 
-  @Override
-  public void eraseTargetFeedback(Request request) {
-    if (isRequestCondition(request)) {
-      eraseLayoutTargetFeedback(request);
-    }
-  }
+	@Override
+	public void eraseTargetFeedback(Request request) {
+		if (isRequestCondition(request)) {
+			eraseLayoutTargetFeedback(request);
+		}
+	}
 
-  /**
-   * Shows target feedback for {@link Request#REQ_ADD}, {@link Request#REQ_MOVE},
-   * {@link Request#REQ_CREATE} or {@link Request#REQ_PASTE}.
-   */
-  protected void showLayoutTargetFeedback(Request request) {
-    // prepare drop location
-    IDropRequest dropRequest = (IDropRequest) request;
-    Point location = dropRequest.getLocation();
-    // prepare tree widget's
-    Tree tree = getTree();
-    TreeItem hostItem = getHostWidget();
-    TreeItem targetItem = tree.getItem(location.getSWTPoint());
-    //
-    if (targetItem == hostItem) {
-      // drop to this
-      appendToSelection();
-      setTreeInsertMark(null, true);
-      // support expand for not DND
-      Object type = request.getType();
-      if ((Request.REQ_CREATE.equals(type) || Request.REQ_PASTE.equals(type))
-          && !hostItem.getExpanded()) {
-        tree.getShell().getDisplay().asyncExec(new Runnable() {
-          @Override
-          public void run() {
-            TreeItem hostWidget = getHostWidget();
-            if (hostWidget != null) {
-              hostWidget.setExpanded(true);
-            }
-          }
-        });
-      }
-    } else if (targetItem != null && hostItem.indexOf(targetItem) != -1) {
-      // drop to children
-      removeFromSelection();
-      boolean beforeLocation = isBeforeLocation(targetItem, location);
-      if (EnvironmentUtils.IS_LINUX) {
-        /*
-         * Feature in Linux: during DND dragOver() operation the
-         * DropTargetEvent.feedback resets all previous tree insert marks.
-         */
-        request.setDNDFeedback(beforeLocation
-            ? DND.FEEDBACK_INSERT_BEFORE
-            : DND.FEEDBACK_INSERT_AFTER);
-      }
-      setTreeInsertMark(targetItem, beforeLocation);
-    }
-  }
+	/**
+	 * Shows target feedback for {@link Request#REQ_ADD}, {@link Request#REQ_MOVE},
+	 * {@link Request#REQ_CREATE} or {@link Request#REQ_PASTE}.
+	 */
+	protected void showLayoutTargetFeedback(Request request) {
+		// prepare drop location
+		IDropRequest dropRequest = (IDropRequest) request;
+		Point location = dropRequest.getLocation();
+		// prepare tree widget's
+		Tree tree = getTree();
+		TreeItem hostItem = getHostWidget();
+		TreeItem targetItem = tree.getItem(location.getSWTPoint());
+		//
+		if (targetItem == hostItem) {
+			// drop to this
+			appendToSelection();
+			setTreeInsertMark(null, true);
+			// support expand for not DND
+			Object type = request.getType();
+			if ((Request.REQ_CREATE.equals(type) || Request.REQ_PASTE.equals(type))
+					&& !hostItem.getExpanded()) {
+				tree.getShell().getDisplay().asyncExec(new Runnable() {
+					@Override
+					public void run() {
+						TreeItem hostWidget = getHostWidget();
+						if (hostWidget != null) {
+							hostWidget.setExpanded(true);
+						}
+					}
+				});
+			}
+		} else if (targetItem != null && hostItem.indexOf(targetItem) != -1) {
+			// drop to children
+			removeFromSelection();
+			boolean beforeLocation = isBeforeLocation(targetItem, location);
+			if (EnvironmentUtils.IS_LINUX) {
+				/*
+				 * Feature in Linux: during DND dragOver() operation the
+				 * DropTargetEvent.feedback resets all previous tree insert marks.
+				 */
+				request.setDNDFeedback(beforeLocation
+						? DND.FEEDBACK_INSERT_BEFORE
+								: DND.FEEDBACK_INSERT_AFTER);
+			}
+			setTreeInsertMark(targetItem, beforeLocation);
+		}
+	}
 
-  private void setTreeInsertMark(TreeItem targetItem, boolean before) {
-    Tree tree = getTree();
-    tree.setInsertMark(targetItem, before);
-    // store for tests
-    tree.setData("_wbp_insertMarkItem", targetItem);
-    tree.setData("_wbp_insertMarkLocation", before);
-  }
+	private void setTreeInsertMark(TreeItem targetItem, boolean before) {
+		Tree tree = getTree();
+		tree.setInsertMark(targetItem, before);
+		// store for tests
+		tree.setData("_wbp_insertMarkItem", targetItem);
+		tree.setData("_wbp_insertMarkLocation", before);
+	}
 
-  /**
-   * Erases target feedback for {@link Request#REQ_ADD}, {@link Request#REQ_MOVE},
-   * {@link Request#REQ_CREATE} or {@link Request#REQ_PASTE}.
-   */
-  protected void eraseLayoutTargetFeedback(Request request) {
-    removeFromSelection();
-    setTreeInsertMark(null, true);
-  }
+	/**
+	 * Erases target feedback for {@link Request#REQ_ADD}, {@link Request#REQ_MOVE},
+	 * {@link Request#REQ_CREATE} or {@link Request#REQ_PASTE}.
+	 */
+	protected void eraseLayoutTargetFeedback(Request request) {
+		removeFromSelection();
+		setTreeInsertMark(null, true);
+	}
 
-  /**
-   * @return <code>true</code> if given location should be considered as location <em>before</em>
-   *         {@link TreeItem}.
-   */
-  private static boolean isBeforeLocation(TreeItem item, Point location) {
-    Rectangle bounds = new Rectangle(item.getBounds());
-    return location.y - bounds.y < 5;
-  }
+	/**
+	 * @return <code>true</code> if given location should be considered as location <em>before</em>
+	 *         {@link TreeItem}.
+	 */
+	private static boolean isBeforeLocation(TreeItem item, Point location) {
+		Rectangle bounds = new Rectangle(item.getBounds());
+		return location.y - bounds.y < 5;
+	}
 
-  /**
-   * @return <code>true</code> if given location should be considered as location <em>after</em>
-   *         {@link TreeItem}.
-   */
-  private static boolean isAfterLocation(TreeItem item, Point location) {
-    Rectangle bounds = new Rectangle(item.getBounds());
-    return bounds.bottom() - location.y < 5;
-  }
+	/**
+	 * @return <code>true</code> if given location should be considered as location <em>after</em>
+	 *         {@link TreeItem}.
+	 */
+	private static boolean isAfterLocation(TreeItem item, Point location) {
+		Rectangle bounds = new Rectangle(item.getBounds());
+		return bounds.bottom() - location.y < 5;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Selection in Tree utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Add host widget to tree selection.
-   */
-  private void appendToSelection() {
-    TreeItem widget = getHostWidget();
-    Tree tree = getTree();
-    TreeItem[] selection = tree.getSelection();
-    if (!ArrayUtils.contains(selection, widget)) {
-      selection = (TreeItem[]) ArrayUtils.add(selection, widget);
-      tree.setSelection(selection);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Selection in Tree utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Add host widget to tree selection.
+	 */
+	private void appendToSelection() {
+		TreeItem widget = getHostWidget();
+		Tree tree = getTree();
+		TreeItem[] selection = tree.getSelection();
+		if (!ArrayUtils.contains(selection, widget)) {
+			selection = (TreeItem[]) ArrayUtils.add(selection, widget);
+			tree.setSelection(selection);
+		}
+	}
 
-  /**
-   * Remove host widget from tree selection.
-   */
-  private void removeFromSelection() {
-    TreeItem widget = getHostWidget();
-    Tree tree = getTree();
-    TreeItem[] selection = tree.getSelection();
-    if (ArrayUtils.contains(selection, widget)) {
-      selection = (TreeItem[]) ArrayUtils.removeElement(selection, widget);
-      tree.setSelection(selection);
-    }
-  }
+	/**
+	 * Remove host widget from tree selection.
+	 */
+	private void removeFromSelection() {
+		TreeItem widget = getHostWidget();
+		Tree tree = getTree();
+		TreeItem[] selection = tree.getSelection();
+		if (ArrayUtils.contains(selection, widget)) {
+			selection = (TreeItem[]) ArrayUtils.removeElement(selection, widget);
+			tree.setSelection(selection);
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/tree/policies/TerminatorLayoutEditPolicy.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/tree/policies/TerminatorLayoutEditPolicy.java
index 10c3fa96b..cbe54a8f9 100644
--- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/tree/policies/TerminatorLayoutEditPolicy.java
+++ b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/tree/policies/TerminatorLayoutEditPolicy.java
@@ -28,8 +28,8 @@
  * @coverage gef.graphical
  */
 public final class TerminatorLayoutEditPolicy extends LayoutEditPolicy {
-  @Override
-  protected boolean isGoodReferenceChild(Request request, EditPart editPart) {
-    return false;
-  }
+	@Override
+	protected boolean isGoodReferenceChild(Request request, EditPart editPart) {
+		return false;
+	}
 }
diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/core/AbstractEditPartViewer.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/core/AbstractEditPartViewer.java
index 35fe9ec6b..6b02725bb 100644
--- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/core/AbstractEditPartViewer.java
+++ b/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/core/AbstractEditPartViewer.java
@@ -40,381 +40,381 @@
  * @coverage gef.core
  */
 public abstract class AbstractEditPartViewer implements IEditPartViewer {
-  private/*final*/IRootContainer m_rootEditPart;
-  private EditDomain m_domain;
-  private IEditPartFactory m_factory;
-  private final Map<Object, EditPart> m_modelToEditPart = new HashMap<>();
-  private MenuManager m_contextMenu;
-  private List<EditPart> m_selectionList = Lists.newArrayList();
-  private EventTable m_eventTable;
-  /**
-   * The EditPart which is being selected in selection process.
-   */
-  private EditPart m_selecting;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Returns the {@link IRootContainer}.
-   */
-  @Override
-  public IRootContainer getRootContainer() {
-    return m_rootEditPart;
-  }
-
-  protected final void setRootEditPart(IRootContainer rootEditPart) {
-    Assert.isTrue(m_rootEditPart == null);
-    m_rootEditPart = rootEditPart;
-  }
-
-  /**
-   * Get factory for creating new EditParts.
-   */
-  @Override
-  public IEditPartFactory getEditPartFactory() {
-    return m_factory;
-  }
-
-  /**
-   * Set factory for creating new EditParts.
-   */
-  public void setEditPartFactory(IEditPartFactory factory) {
-    m_factory = factory;
-  }
-
-  /**
-   * Register given {@link EditPart} into this viewer.
-   */
-  @Override
-  public void registerEditPart(EditPart editPart) {
-    m_modelToEditPart.put(editPart.getModel(), editPart);
-  }
-
-  /**
-   * Unregister given {@link EditPart} into this viewer.
-   */
-  @Override
-  public void unregisterEditPart(EditPart editPart) {
-    Object model = editPart.getModel();
-    Object registerPart = m_modelToEditPart.get(model);
-    /*
-     * check editPart because during refreshChildren firstly add new child,
-     * example (old model, new EditPart) after remove old child (old model, old EditPart)
-     */
-    if (registerPart == editPart) {
-      m_modelToEditPart.remove(model);
-    }
-  }
-
-  /**
-   * Returns {@link EditPart} register into this viewer associate given model.
-   */
-  @Override
-  public EditPart getEditPartByModel(Object model) {
-    return m_modelToEditPart.get(model);
-  }
-
-  /**
-   * Returns the {@link EditDomain EditDomain} to which this viewer belongs.
-   */
-  @Override
-  public EditDomain getEditDomain() {
-    return m_domain;
-  }
-
-  /**
-   * Sets the <code>{@link EditDomain}</code> for this viewer. The Viewer will route all mouse and
-   * keyboard events to the {@link EditDomain}.
-   */
-  public void setEditDomain(EditDomain domain) {
-    m_domain = domain;
-  }
-
-  /**
-   * Set input model for this viewer.
-   */
-  public void setInput(Object model) {
-    EditPart contentEditPart = m_factory.createEditPart((EditPart) m_rootEditPart, model);
-    m_rootEditPart.setContent(contentEditPart);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Context menu
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public MenuManager getContextMenu() {
-    return m_contextMenu;
-  }
-
-  @Override
-  public void setContextMenu(MenuManager menu) {
-    // dispose old menu
-    if (m_contextMenu != null && m_contextMenu != menu) {
-      m_contextMenu.dispose();
-    }
-    // remember new
-    m_contextMenu = menu;
-    // create new menu
-    Control control = getControl();
-    Menu menuWidget = m_contextMenu.createContextMenu(control);
-    if (menuWidget.getShell() == control.getShell()) {
-      control.setMenu(menuWidget);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Selection
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void addSelectionChangedListener(ISelectionChangedListener listener) {
-    getEnsureEventTable().addListener(ISelectionChangedListener.class, listener);
-  }
-
-  @Override
-  public void removeSelectionChangedListener(ISelectionChangedListener listener) {
-    getEnsureEventTable().removeListener(ISelectionChangedListener.class, listener);
-  }
-
-  /**
-   * Returns an {@link ISelection} containing a list of one or more {@link EditPart}. Whenever
-   * {@link #getSelectedEditParts()} returns an empty list, the <i>contents</i> editpart is returned
-   * as the current selection.
-   */
-  @Override
-  public ISelection getSelection() {
-    if (m_selectionList.isEmpty()) {
-      EditPart content = m_rootEditPart.getContent();
-      if (content != null) {
-        return new StructuredSelection(content);
-      }
-    }
-    return new StructuredSelection(m_selectionList);
-  }
-
-  @Override
-  @SuppressWarnings("unchecked")
-  public void setSelection(ISelection selection) {
-    if (selection instanceof IStructuredSelection) {
-      IStructuredSelection structuredSelection = (IStructuredSelection) selection;
-      setSelection(structuredSelection.toList());
-    }
-  }
-
-  private void fireSelectionChanged() {
-    List<ISelectionChangedListener> listeners = getListeners(ISelectionChangedListener.class);
-    if (listeners != null && !listeners.isEmpty()) {
-      SelectionChangedEvent event = new SelectionChangedEvent(this, getSelection());
-      for (ISelectionChangedListener listener : listeners) {
-        listener.selectionChanged(event);
-      }
-    }
-  }
-
-  /**
-   * Appends the specified <code>{@link EditPart}</code> to the viewer's <i>selection</i>. The
-   * {@link EditPart} becomes the new primary selection.
-   */
-  @Override
-  public void appendSelection(EditPart part) {
-    Assert.isNotNull(part);
-    if (!m_selectionList.isEmpty()) {
-      EditPart primary = m_selectionList.get(m_selectionList.size() - 1);
-      if (primary != part) {
-        try {
-          m_selecting = part;
-          primary.setSelected(EditPart.SELECTED);
-        } finally {
-          m_selecting = null;
-        }
-      }
-    }
-    //
-    try {
-      m_selecting = part;
-      m_selectionList.remove(part);
-      m_selectionList.add(part);
-      part.setSelected(EditPart.SELECTED_PRIMARY);
-    } finally {
-      m_selecting = null;
-    }
-    //
-    fireSelectionChanged();
-  }
-
-  /**
-   * Replaces the current selection with the specified <code>{@link EditPart EditParts}</code>.
-   */
-  @Override
-  public void setSelection(List<EditPart> editParts) {
-    try {
-      if (!editParts.isEmpty()) {
-        m_selecting = editParts.get(0);
-      }
-      internalDeselectAll();
-      //
-      for (Iterator<EditPart> I = editParts.iterator(); I.hasNext();) {
-        EditPart part = I.next();
-        if(part != null) {
-          m_selectionList.add(part);
-          m_selecting = part;
-          if (I.hasNext()) {
-            part.setSelected(EditPart.SELECTED);
-          } else {
-            part.setSelected(EditPart.SELECTED_PRIMARY);
-          }
-        }
-      }
-    } finally {
-      m_selecting = null;
-    }
-    //
-    fireSelectionChanged();
-  }
-
-  /**
-   * Replaces the current selection with the specified <code>{@link EditPart}</code>. That part
-   * becomes the primary selection.
-   */
-  @Override
-  public void select(EditPart part) {
-    Assert.isNotNull(part);
-    if (m_selectionList.size() != 1 || m_selectionList.get(0) != part) {
-      try {
-        m_selectionList.add(part);
-        m_selecting = part;
-        internalDeselectAll();
-        appendSelection(part);
-      } finally {
-        m_selecting = null;
-      }
-    }
-  }
-
-  /**
-   * Removes the specified <code>{@link EditPart}</code> from the current selection. The last
-   * EditPart in the new selection is made {@link EditPart#SELECTED_PRIMARY primary}.
-   */
-  @Override
-  public void deselect(EditPart part) {
-    Assert.isNotNull(part);
-    m_selectionList.remove(part);
-    part.setSelected(EditPart.SELECTED_NONE);
-    //
-    if (!m_selectionList.isEmpty()) {
-      EditPart primary = m_selectionList.get(m_selectionList.size() - 1);
-      primary.setSelected(EditPart.SELECTED_PRIMARY);
-    }
-    //
-    fireSelectionChanged();
-  }
-
-  /**
-   * Removes the specified <code>{@link List}</code> of <code>{@link EditPart}</code>'s from the
-   * current selection. The last EditPart in the new selection is made
-   * {@link EditPart#SELECTED_PRIMARY primary}.
-   */
-  @Override
-  public void deselect(List<EditPart> editParts) {
-    for (EditPart part : editParts) {
-      Assert.isNotNull(part);
-      m_selectionList.remove(part);
-      part.setSelected(EditPart.SELECTED_NONE);
-    }
-    //
-    if (!m_selectionList.isEmpty()) {
-      EditPart primary = m_selectionList.get(m_selectionList.size() - 1);
-      primary.setSelected(EditPart.SELECTED_PRIMARY);
-    }
-    //
-    fireSelectionChanged();
-  }
-
-  /**
-   * Deselects all EditParts.
-   */
-  @Override
-  public void deselectAll() {
-    internalDeselectAll();
-    fireSelectionChanged();
-  }
-
-  private void internalDeselectAll() {
-    List<EditPart> selectionList = m_selectionList;
-    m_selectionList = Lists.newArrayList();
-    for (EditPart part : selectionList) {
-      part.setSelected(EditPart.SELECTED_NONE);
-    }
-  }
-
-  /**
-   * Returns an unmodifiable <code>List</code> containing zero or more selected {@link EditPart}'s.
-   * This list may be empty. This list can be modified indirectly by calling other methods on the
-   * viewer.
-   */
-  @Override
-  public List<EditPart> getSelectedEditParts() {
-    return m_selectionList;
-  }
-
-  /**
-   * @return The EditPart which is being selected in selection process.
-   */
-  @Override
-  public EditPart getSelectingEditPart() {
-    return m_selecting;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Click
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void addEditPartClickListener(IEditPartClickListener listener) {
-    getEnsureEventTable().addListener(IEditPartClickListener.class, listener);
-  }
-
-  @Override
-  public void removeEditPartClickListener(IEditPartClickListener listener) {
-    getEnsureEventTable().removeListener(IEditPartClickListener.class, listener);
-  }
-
-  @Override
-  public void fireEditPartClick(EditPart editPart) {
-    List<IEditPartClickListener> listeners = getListeners(IEditPartClickListener.class);
-    if (listeners != null && !listeners.isEmpty()) {
-      for (IEditPartClickListener listener : listeners) {
-        listener.clickNotify(editPart);
-      }
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Events
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Access to <code>{@link EventTable}</code> use lazy creation mechanism.
-   */
-  private EventTable getEnsureEventTable() {
-    if (m_eventTable == null) {
-      m_eventTable = new EventTable();
-    }
-    return m_eventTable;
-  }
-
-  /**
-   * Return all registers listeners for given class or <code>null</code>.
-   */
-  private <T extends Object> List<T> getListeners(Class<T> listenerClass) {
-    return m_eventTable == null ? null : m_eventTable.getListeners(listenerClass);
-  }
+	private/*final*/IRootContainer m_rootEditPart;
+	private EditDomain m_domain;
+	private IEditPartFactory m_factory;
+	private final Map<Object, EditPart> m_modelToEditPart = new HashMap<>();
+	private MenuManager m_contextMenu;
+	private List<EditPart> m_selectionList = Lists.newArrayList();
+	private EventTable m_eventTable;
+	/**
+	 * The EditPart which is being selected in selection process.
+	 */
+	private EditPart m_selecting;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Returns the {@link IRootContainer}.
+	 */
+	@Override
+	public IRootContainer getRootContainer() {
+		return m_rootEditPart;
+	}
+
+	protected final void setRootEditPart(IRootContainer rootEditPart) {
+		Assert.isTrue(m_rootEditPart == null);
+		m_rootEditPart = rootEditPart;
+	}
+
+	/**
+	 * Get factory for creating new EditParts.
+	 */
+	@Override
+	public IEditPartFactory getEditPartFactory() {
+		return m_factory;
+	}
+
+	/**
+	 * Set factory for creating new EditParts.
+	 */
+	public void setEditPartFactory(IEditPartFactory factory) {
+		m_factory = factory;
+	}
+
+	/**
+	 * Register given {@link EditPart} into this viewer.
+	 */
+	@Override
+	public void registerEditPart(EditPart editPart) {
+		m_modelToEditPart.put(editPart.getModel(), editPart);
+	}
+
+	/**
+	 * Unregister given {@link EditPart} into this viewer.
+	 */
+	@Override
+	public void unregisterEditPart(EditPart editPart) {
+		Object model = editPart.getModel();
+		Object registerPart = m_modelToEditPart.get(model);
+		/*
+		 * check editPart because during refreshChildren firstly add new child,
+		 * example (old model, new EditPart) after remove old child (old model, old EditPart)
+		 */
+		if (registerPart == editPart) {
+			m_modelToEditPart.remove(model);
+		}
+	}
+
+	/**
+	 * Returns {@link EditPart} register into this viewer associate given model.
+	 */
+	@Override
+	public EditPart getEditPartByModel(Object model) {
+		return m_modelToEditPart.get(model);
+	}
+
+	/**
+	 * Returns the {@link EditDomain EditDomain} to which this viewer belongs.
+	 */
+	@Override
+	public EditDomain getEditDomain() {
+		return m_domain;
+	}
+
+	/**
+	 * Sets the <code>{@link EditDomain}</code> for this viewer. The Viewer will route all mouse and
+	 * keyboard events to the {@link EditDomain}.
+	 */
+	public void setEditDomain(EditDomain domain) {
+		m_domain = domain;
+	}
+
+	/**
+	 * Set input model for this viewer.
+	 */
+	public void setInput(Object model) {
+		EditPart contentEditPart = m_factory.createEditPart((EditPart) m_rootEditPart, model);
+		m_rootEditPart.setContent(contentEditPart);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Context menu
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public MenuManager getContextMenu() {
+		return m_contextMenu;
+	}
+
+	@Override
+	public void setContextMenu(MenuManager menu) {
+		// dispose old menu
+		if (m_contextMenu != null && m_contextMenu != menu) {
+			m_contextMenu.dispose();
+		}
+		// remember new
+		m_contextMenu = menu;
+		// create new menu
+		Control control = getControl();
+		Menu menuWidget = m_contextMenu.createContextMenu(control);
+		if (menuWidget.getShell() == control.getShell()) {
+			control.setMenu(menuWidget);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Selection
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void addSelectionChangedListener(ISelectionChangedListener listener) {
+		getEnsureEventTable().addListener(ISelectionChangedListener.class, listener);
+	}
+
+	@Override
+	public void removeSelectionChangedListener(ISelectionChangedListener listener) {
+		getEnsureEventTable().removeListener(ISelectionChangedListener.class, listener);
+	}
+
+	/**
+	 * Returns an {@link ISelection} containing a list of one or more {@link EditPart}. Whenever
+	 * {@link #getSelectedEditParts()} returns an empty list, the <i>contents</i> editpart is returned
+	 * as the current selection.
+	 */
+	@Override
+	public ISelection getSelection() {
+		if (m_selectionList.isEmpty()) {
+			EditPart content = m_rootEditPart.getContent();
+			if (content != null) {
+				return new StructuredSelection(content);
+			}
+		}
+		return new StructuredSelection(m_selectionList);
+	}
+
+	@Override
+	@SuppressWarnings("unchecked")
+	public void setSelection(ISelection selection) {
+		if (selection instanceof IStructuredSelection) {
+			IStructuredSelection structuredSelection = (IStructuredSelection) selection;
+			setSelection(structuredSelection.toList());
+		}
+	}
+
+	private void fireSelectionChanged() {
+		List<ISelectionChangedListener> listeners = getListeners(ISelectionChangedListener.class);
+		if (listeners != null && !listeners.isEmpty()) {
+			SelectionChangedEvent event = new SelectionChangedEvent(this, getSelection());
+			for (ISelectionChangedListener listener : listeners) {
+				listener.selectionChanged(event);
+			}
+		}
+	}
+
+	/**
+	 * Appends the specified <code>{@link EditPart}</code> to the viewer's <i>selection</i>. The
+	 * {@link EditPart} becomes the new primary selection.
+	 */
+	@Override
+	public void appendSelection(EditPart part) {
+		Assert.isNotNull(part);
+		if (!m_selectionList.isEmpty()) {
+			EditPart primary = m_selectionList.get(m_selectionList.size() - 1);
+			if (primary != part) {
+				try {
+					m_selecting = part;
+					primary.setSelected(EditPart.SELECTED);
+				} finally {
+					m_selecting = null;
+				}
+			}
+		}
+		//
+		try {
+			m_selecting = part;
+			m_selectionList.remove(part);
+			m_selectionList.add(part);
+			part.setSelected(EditPart.SELECTED_PRIMARY);
+		} finally {
+			m_selecting = null;
+		}
+		//
+		fireSelectionChanged();
+	}
+
+	/**
+	 * Replaces the current selection with the specified <code>{@link EditPart EditParts}</code>.
+	 */
+	@Override
+	public void setSelection(List<EditPart> editParts) {
+		try {
+			if (!editParts.isEmpty()) {
+				m_selecting = editParts.get(0);
+			}
+			internalDeselectAll();
+			//
+			for (Iterator<EditPart> I = editParts.iterator(); I.hasNext();) {
+				EditPart part = I.next();
+				if(part != null) {
+					m_selectionList.add(part);
+					m_selecting = part;
+					if (I.hasNext()) {
+						part.setSelected(EditPart.SELECTED);
+					} else {
+						part.setSelected(EditPart.SELECTED_PRIMARY);
+					}
+				}
+			}
+		} finally {
+			m_selecting = null;
+		}
+		//
+		fireSelectionChanged();
+	}
+
+	/**
+	 * Replaces the current selection with the specified <code>{@link EditPart}</code>. That part
+	 * becomes the primary selection.
+	 */
+	@Override
+	public void select(EditPart part) {
+		Assert.isNotNull(part);
+		if (m_selectionList.size() != 1 || m_selectionList.get(0) != part) {
+			try {
+				m_selectionList.add(part);
+				m_selecting = part;
+				internalDeselectAll();
+				appendSelection(part);
+			} finally {
+				m_selecting = null;
+			}
+		}
+	}
+
+	/**
+	 * Removes the specified <code>{@link EditPart}</code> from the current selection. The last
+	 * EditPart in the new selection is made {@link EditPart#SELECTED_PRIMARY primary}.
+	 */
+	@Override
+	public void deselect(EditPart part) {
+		Assert.isNotNull(part);
+		m_selectionList.remove(part);
+		part.setSelected(EditPart.SELECTED_NONE);
+		//
+		if (!m_selectionList.isEmpty()) {
+			EditPart primary = m_selectionList.get(m_selectionList.size() - 1);
+			primary.setSelected(EditPart.SELECTED_PRIMARY);
+		}
+		//
+		fireSelectionChanged();
+	}
+
+	/**
+	 * Removes the specified <code>{@link List}</code> of <code>{@link EditPart}</code>'s from the
+	 * current selection. The last EditPart in the new selection is made
+	 * {@link EditPart#SELECTED_PRIMARY primary}.
+	 */
+	@Override
+	public void deselect(List<EditPart> editParts) {
+		for (EditPart part : editParts) {
+			Assert.isNotNull(part);
+			m_selectionList.remove(part);
+			part.setSelected(EditPart.SELECTED_NONE);
+		}
+		//
+		if (!m_selectionList.isEmpty()) {
+			EditPart primary = m_selectionList.get(m_selectionList.size() - 1);
+			primary.setSelected(EditPart.SELECTED_PRIMARY);
+		}
+		//
+		fireSelectionChanged();
+	}
+
+	/**
+	 * Deselects all EditParts.
+	 */
+	@Override
+	public void deselectAll() {
+		internalDeselectAll();
+		fireSelectionChanged();
+	}
+
+	private void internalDeselectAll() {
+		List<EditPart> selectionList = m_selectionList;
+		m_selectionList = Lists.newArrayList();
+		for (EditPart part : selectionList) {
+			part.setSelected(EditPart.SELECTED_NONE);
+		}
+	}
+
+	/**
+	 * Returns an unmodifiable <code>List</code> containing zero or more selected {@link EditPart}'s.
+	 * This list may be empty. This list can be modified indirectly by calling other methods on the
+	 * viewer.
+	 */
+	@Override
+	public List<EditPart> getSelectedEditParts() {
+		return m_selectionList;
+	}
+
+	/**
+	 * @return The EditPart which is being selected in selection process.
+	 */
+	@Override
+	public EditPart getSelectingEditPart() {
+		return m_selecting;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Click
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void addEditPartClickListener(IEditPartClickListener listener) {
+		getEnsureEventTable().addListener(IEditPartClickListener.class, listener);
+	}
+
+	@Override
+	public void removeEditPartClickListener(IEditPartClickListener listener) {
+		getEnsureEventTable().removeListener(IEditPartClickListener.class, listener);
+	}
+
+	@Override
+	public void fireEditPartClick(EditPart editPart) {
+		List<IEditPartClickListener> listeners = getListeners(IEditPartClickListener.class);
+		if (listeners != null && !listeners.isEmpty()) {
+			for (IEditPartClickListener listener : listeners) {
+				listener.clickNotify(editPart);
+			}
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Events
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Access to <code>{@link EventTable}</code> use lazy creation mechanism.
+	 */
+	private EventTable getEnsureEventTable() {
+		if (m_eventTable == null) {
+			m_eventTable = new EventTable();
+		}
+		return m_eventTable;
+	}
+
+	/**
+	 * Return all registers listeners for given class or <code>null</code>.
+	 */
+	private <T extends Object> List<T> getListeners(Class<T> listenerClass) {
+		return m_eventTable == null ? null : m_eventTable.getListeners(listenerClass);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/core/CancelOperationError.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/core/CancelOperationError.java
index 9006c3889..31dc5531d 100644
--- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/core/CancelOperationError.java
+++ b/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/core/CancelOperationError.java
@@ -20,5 +20,5 @@
  * @coverage gef.core
  */
 public final class CancelOperationError extends Error {
-  private static final long serialVersionUID = 0L;
+	private static final long serialVersionUID = 0L;
 }
diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/core/CompoundCommand.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/core/CompoundCommand.java
index 9e309521f..da440ba5c 100644
--- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/core/CompoundCommand.java
+++ b/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/core/CompoundCommand.java
@@ -26,67 +26,67 @@
  * @coverage gef.core
  */
 public class CompoundCommand extends Command {
-  private final List<Command> m_commands = Lists.newArrayList();
+	private final List<Command> m_commands = Lists.newArrayList();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds the specified {@link Command} if it is not <code>null</code>.
-   */
-  public void add(Command command) {
-    if (command != null) {
-      m_commands.add(command);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds the specified {@link Command} if it is not <code>null</code>.
+	 */
+	public void add(Command command) {
+		if (command != null) {
+			m_commands.add(command);
+		}
+	}
 
-  /**
-   * Returns the {@link List} of contained {@link Command}s.
-   */
-  public List<Command> getCommands() {
-    return m_commands;
-  }
+	/**
+	 * Returns the {@link List} of contained {@link Command}s.
+	 */
+	public List<Command> getCommands() {
+		return m_commands;
+	}
 
-  /**
-   * Returns the number of contained {@link Command}s.
-   */
-  public int size() {
-    return m_commands.size();
-  }
+	/**
+	 * Returns the number of contained {@link Command}s.
+	 */
+	public int size() {
+		return m_commands.size();
+	}
 
-  /**
-   * Returns <code>true</code> if the {@link CompoundCommand} is empty.
-   */
-  public boolean isEmpty() {
-    return m_commands.isEmpty();
-  }
+	/**
+	 * Returns <code>true</code> if the {@link CompoundCommand} is empty.
+	 */
+	public boolean isEmpty() {
+		return m_commands.isEmpty();
+	}
 
-  /**
-   * Returns the simplest form of this {@link Command} that is equivalent. This is useful for
-   * removing unnecessary nesting of {@link Command}s.
-   */
-  public Command unwrap() {
-    switch (size()) {
-      case 0 :
-        return null;
-      case 1 :
-        return m_commands.get(0);
-      default :
-        return this;
-    }
-  }
+	/**
+	 * Returns the simplest form of this {@link Command} that is equivalent. This is useful for
+	 * removing unnecessary nesting of {@link Command}s.
+	 */
+	public Command unwrap() {
+		switch (size()) {
+		case 0 :
+			return null;
+		case 1 :
+			return m_commands.get(0);
+		default :
+			return this;
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ICommand
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void execute() throws Exception {
-    for (Command command : m_commands) {
-      command.execute();
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ICommand
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void execute() throws Exception {
+		for (Command command : m_commands) {
+			command.execute();
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/core/ContextMenuProvider.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/core/ContextMenuProvider.java
index 7ed096da0..836e0a625 100644
--- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/core/ContextMenuProvider.java
+++ b/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/core/ContextMenuProvider.java
@@ -24,37 +24,37 @@
  * @coverage gef.core
  */
 public abstract class ContextMenuProvider extends MenuManager {
-  protected final IEditPartViewer m_viewer;
+	protected final IEditPartViewer m_viewer;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ContextMenuProvider(IEditPartViewer viewer) {
-    m_viewer = viewer;
-    setRemoveAllWhenShown(true);
-    addMenuListener(new IMenuListener() {
-      @Override
-      public void menuAboutToShow(IMenuManager manager) {
-        // dispose items to avoid their caching
-        for (MenuItem item : getMenu().getItems()) {
-          item.dispose();
-        }
-        // apply new items
-        buildContextMenu();
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ContextMenuProvider(IEditPartViewer viewer) {
+		m_viewer = viewer;
+		setRemoveAllWhenShown(true);
+		addMenuListener(new IMenuListener() {
+			@Override
+			public void menuAboutToShow(IMenuManager manager) {
+				// dispose items to avoid their caching
+				for (MenuItem item : getMenu().getItems()) {
+					item.dispose();
+				}
+				// apply new items
+				buildContextMenu();
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Context Menu
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Called when the menu is about to show. Subclasses must implement this method to populate the
-   * menu each time it is shown.
-   */
-  protected abstract void buildContextMenu();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Context Menu
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Called when the menu is about to show. Subclasses must implement this method to populate the
+	 * menu each time it is shown.
+	 */
+	protected abstract void buildContextMenu();
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/core/EditDomain.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/core/EditDomain.java
index fdf250633..c13d780ca 100644
--- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/core/EditDomain.java
+++ b/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/core/EditDomain.java
@@ -25,280 +25,280 @@
  * @coverage gef.core
  */
 public class EditDomain {
-  private Tool m_activeTool;
-  private Tool m_defaultTool;
-  private IEditPartViewer m_currentViewer;
-  private MouseEvent m_currentMouseEvent;
-  private ICommandExceptionHandler m_exceptionHandler;
+	private Tool m_activeTool;
+	private Tool m_defaultTool;
+	private IEditPartViewer m_currentViewer;
+	private MouseEvent m_currentMouseEvent;
+	private ICommandExceptionHandler m_exceptionHandler;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public EditDomain() {
-    loadDefaultTool();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public EditDomain() {
+		loadDefaultTool();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands/Exceptions
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Tool m_inCommandTool;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands/Exceptions
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Tool m_inCommandTool;
 
-  /**
-   * Execute given {@link Command} and handle all exceptions.
-   */
-  public void executeCommand(Command command) {
-    clearToolDuringCommandExecution();
-    try {
-      if (System.getProperty("wbp.EditDomain.simulateCommandException") != null) {
-        throw new Error("Simulated exception.");
-      }
-      command.execute();
-    } catch (Throwable e) {
-      if (m_exceptionHandler != null) {
-        m_exceptionHandler.handleException(e);
-        // exception handler usually recreates viewer, so we should cancel execution on current viewer
-        throw new CancelOperationError();
-      }
-    } finally {
-      restoreToolAfterCommandExecution();
-    }
-  }
+	/**
+	 * Execute given {@link Command} and handle all exceptions.
+	 */
+	public void executeCommand(Command command) {
+		clearToolDuringCommandExecution();
+		try {
+			if (System.getProperty("wbp.EditDomain.simulateCommandException") != null) {
+				throw new Error("Simulated exception.");
+			}
+			command.execute();
+		} catch (Throwable e) {
+			if (m_exceptionHandler != null) {
+				m_exceptionHandler.handleException(e);
+				// exception handler usually recreates viewer, so we should cancel execution on current viewer
+				throw new CancelOperationError();
+			}
+		} finally {
+			restoreToolAfterCommandExecution();
+		}
+	}
 
-  /**
-   * Sometimes execution of {@link Command} may run SWT events loop, so user could interact with
-   * GEF. But at this time model and GEF may be in non-consistent state, so this will cause
-   * exceptions. We clear active {@link Tool}, so user events will be ignored.
-   */
-  private void clearToolDuringCommandExecution() {
-    if (m_activeTool != null) {
-      m_inCommandTool = m_activeTool;
-      m_activeTool = null;
-    }
-  }
+	/**
+	 * Sometimes execution of {@link Command} may run SWT events loop, so user could interact with
+	 * GEF. But at this time model and GEF may be in non-consistent state, so this will cause
+	 * exceptions. We clear active {@link Tool}, so user events will be ignored.
+	 */
+	private void clearToolDuringCommandExecution() {
+		if (m_activeTool != null) {
+			m_inCommandTool = m_activeTool;
+			m_activeTool = null;
+		}
+	}
 
-  /**
-   * Restores active {@link Tool} after {@link #clearToolDuringCommandExecution()}.
-   */
-  private void restoreToolAfterCommandExecution() {
-    if (m_activeTool == null) {
-      m_activeTool = m_inCommandTool;
-    }
-  }
+	/**
+	 * Restores active {@link Tool} after {@link #clearToolDuringCommandExecution()}.
+	 */
+	private void restoreToolAfterCommandExecution() {
+		if (m_activeTool == null) {
+			m_activeTool = m_inCommandTool;
+		}
+	}
 
-  /**
-   * Set command exceptions handler.
-   */
-  public void setExceptionHandler(ICommandExceptionHandler exceptionHandler) {
-    m_exceptionHandler = exceptionHandler;
-  }
+	/**
+	 * Set command exceptions handler.
+	 */
+	public void setExceptionHandler(ICommandExceptionHandler exceptionHandler) {
+		m_exceptionHandler = exceptionHandler;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tool listeners
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private IDefaultToolProvider m_defaultToolProvider;
-  private final EventTable m_eventTable = new EventTable();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tool listeners
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private IDefaultToolProvider m_defaultToolProvider;
+	private final EventTable m_eventTable = new EventTable();
 
-  /**
-   * Sets the {@link IDefaultToolProvider}.
-   */
-  public void setDefaultToolProvider(IDefaultToolProvider toolListener) {
-    m_defaultToolProvider = toolListener;
-  }
+	/**
+	 * Sets the {@link IDefaultToolProvider}.
+	 */
+	public void setDefaultToolProvider(IDefaultToolProvider toolListener) {
+		m_defaultToolProvider = toolListener;
+	}
 
-  /**
-   * Adds new {@link IActiveToolListener}.
-   */
-  public void addActiveToolListener(IActiveToolListener listener) {
-    m_eventTable.addListener(IActiveToolListener.class, listener);
-  }
+	/**
+	 * Adds new {@link IActiveToolListener}.
+	 */
+	public void addActiveToolListener(IActiveToolListener listener) {
+		m_eventTable.addListener(IActiveToolListener.class, listener);
+	}
 
-  /**
-   * Removes {@link IActiveToolListener}.
-   */
-  public void removeActiveToolListener(IActiveToolListener listener) {
-    m_eventTable.removeListener(IActiveToolListener.class, listener);
-  }
+	/**
+	 * Removes {@link IActiveToolListener}.
+	 */
+	public void removeActiveToolListener(IActiveToolListener listener) {
+		m_eventTable.removeListener(IActiveToolListener.class, listener);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tool
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Loads the default {@link Tool}.
-   */
-  public void loadDefaultTool() {
-    if (m_defaultToolProvider != null) {
-      m_defaultToolProvider.loadDefaultTool();
-    } else {
-      setActiveTool(getDefaultTool());
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tool
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Loads the default {@link Tool}.
+	 */
+	public void loadDefaultTool() {
+		if (m_defaultToolProvider != null) {
+			m_defaultToolProvider.loadDefaultTool();
+		} else {
+			setActiveTool(getDefaultTool());
+		}
+	}
 
-  /**
-   * Returns the default tool for this edit domain. This will be a {@link SelectionTool} unless
-   * specifically replaced using {@link #setDefaultTool(Tool)}.
-   */
-  public Tool getDefaultTool() {
-    if (m_defaultTool == null) {
-      m_defaultTool = new SelectionTool();
-    }
-    return m_defaultTool;
-  }
+	/**
+	 * Returns the default tool for this edit domain. This will be a {@link SelectionTool} unless
+	 * specifically replaced using {@link #setDefaultTool(Tool)}.
+	 */
+	public Tool getDefaultTool() {
+		if (m_defaultTool == null) {
+			m_defaultTool = new SelectionTool();
+		}
+		return m_defaultTool;
+	}
 
-  /**
-   * Sets the default {@link Tool}.
-   */
-  public void setDefaultTool(Tool defaultTool) {
-    m_defaultTool = defaultTool;
-  }
+	/**
+	 * Sets the default {@link Tool}.
+	 */
+	public void setDefaultTool(Tool defaultTool) {
+		m_defaultTool = defaultTool;
+	}
 
-  /**
-   * Returns the active {@link Tool}.
-   */
-  public Tool getActiveTool() {
-    return m_activeTool;
-  }
+	/**
+	 * Returns the active {@link Tool}.
+	 */
+	public Tool getActiveTool() {
+		return m_activeTool;
+	}
 
-  /**
-   * Sets the active {@link Tool} for this {@link EditDomain}. If a current {@link Tool} is active,
-   * it is deactivated. The new {@link Tool} is told its {@link EditDomain}, and is activated.
-   */
-  public void setActiveTool(Tool activeTool) {
-    if (m_activeTool != null) {
-      m_activeTool.deactivate();
-    }
-    //
-    m_activeTool = activeTool;
-    //
-    if (m_activeTool != null) {
-      m_activeTool.setDomain(this);
-      m_activeTool.activate();
-      // notify listeners
-      for (IActiveToolListener listener : m_eventTable.getListeners(IActiveToolListener.class)) {
-        listener.toolActivated(m_activeTool);
-      }
-      // handle auto reload tool and update cursor
-      if (m_currentViewer != null) {
-        m_activeTool.setViewer(m_currentViewer);
-        m_activeTool.refreshCursor();
-        m_activeTool.mouseMove(m_currentMouseEvent, m_currentViewer);
-      }
-    }
-  }
+	/**
+	 * Sets the active {@link Tool} for this {@link EditDomain}. If a current {@link Tool} is active,
+	 * it is deactivated. The new {@link Tool} is told its {@link EditDomain}, and is activated.
+	 */
+	public void setActiveTool(Tool activeTool) {
+		if (m_activeTool != null) {
+			m_activeTool.deactivate();
+		}
+		//
+		m_activeTool = activeTool;
+		//
+		if (m_activeTool != null) {
+			m_activeTool.setDomain(this);
+			m_activeTool.activate();
+			// notify listeners
+			for (IActiveToolListener listener : m_eventTable.getListeners(IActiveToolListener.class)) {
+				listener.toolActivated(m_activeTool);
+			}
+			// handle auto reload tool and update cursor
+			if (m_currentViewer != null) {
+				m_activeTool.setViewer(m_currentViewer);
+				m_activeTool.refreshCursor();
+				m_activeTool.mouseMove(m_currentMouseEvent, m_currentViewer);
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Handle key events
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Called when the key has been pressed on a viewer.
-   */
-  public void keyPressed(KeyEvent event, IEditPartViewer viewer) {
-    Tool tool = getActiveTool();
-    if (tool != null) {
-      tool.keyPressed(event, viewer);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Handle key events
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Called when the key has been pressed on a viewer.
+	 */
+	public void keyPressed(KeyEvent event, IEditPartViewer viewer) {
+		Tool tool = getActiveTool();
+		if (tool != null) {
+			tool.keyPressed(event, viewer);
+		}
+	}
 
-  /**
-   * Called when the key has been released on a viewer.
-   */
-  public void keyReleased(KeyEvent event, IEditPartViewer viewer) {
-    Tool tool = getActiveTool();
-    if (tool != null) {
-      tool.keyReleased(event, viewer);
-    }
-  }
+	/**
+	 * Called when the key has been released on a viewer.
+	 */
+	public void keyReleased(KeyEvent event, IEditPartViewer viewer) {
+		Tool tool = getActiveTool();
+		if (tool != null) {
+			tool.keyReleased(event, viewer);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Handle mouse events
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Called when the mouse button has been double-clicked on a viewer.
-   */
-  public void mouseDoubleClick(MouseEvent event, IEditPartViewer viewer) {
-    m_currentMouseEvent = event;
-    Tool tool = getActiveTool();
-    if (tool != null) {
-      tool.mouseDoubleClick(event, viewer);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Handle mouse events
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Called when the mouse button has been double-clicked on a viewer.
+	 */
+	public void mouseDoubleClick(MouseEvent event, IEditPartViewer viewer) {
+		m_currentMouseEvent = event;
+		Tool tool = getActiveTool();
+		if (tool != null) {
+			tool.mouseDoubleClick(event, viewer);
+		}
+	}
 
-  /**
-   * Called when the mouse button has been pressed on a viewer.
-   */
-  public void mouseDown(MouseEvent event, IEditPartViewer viewer) {
-    m_currentMouseEvent = event;
-    Tool tool = getActiveTool();
-    if (tool != null) {
-      tool.mouseDown(event, viewer);
-    }
-  }
+	/**
+	 * Called when the mouse button has been pressed on a viewer.
+	 */
+	public void mouseDown(MouseEvent event, IEditPartViewer viewer) {
+		m_currentMouseEvent = event;
+		Tool tool = getActiveTool();
+		if (tool != null) {
+			tool.mouseDown(event, viewer);
+		}
+	}
 
-  /**
-   * Called when the mouse button has been released on a viewer.
-   */
-  public void mouseUp(MouseEvent event, IEditPartViewer viewer) {
-    m_currentMouseEvent = event;
-    Tool tool = getActiveTool();
-    if (tool != null) {
-      tool.mouseUp(event, viewer);
-    }
-  }
+	/**
+	 * Called when the mouse button has been released on a viewer.
+	 */
+	public void mouseUp(MouseEvent event, IEditPartViewer viewer) {
+		m_currentMouseEvent = event;
+		Tool tool = getActiveTool();
+		if (tool != null) {
+			tool.mouseUp(event, viewer);
+		}
+	}
 
-  /**
-   * Called when the mouse has been moved on a viewer.
-   */
-  public void mouseMove(MouseEvent event, IEditPartViewer viewer) {
-    m_currentMouseEvent = event;
-    Tool tool = getActiveTool();
-    if (tool != null) {
-      tool.mouseMove(event, viewer);
-    }
-  }
+	/**
+	 * Called when the mouse has been moved on a viewer.
+	 */
+	public void mouseMove(MouseEvent event, IEditPartViewer viewer) {
+		m_currentMouseEvent = event;
+		Tool tool = getActiveTool();
+		if (tool != null) {
+			tool.mouseMove(event, viewer);
+		}
+	}
 
-  /**
-   * Called when the mouse has been dragged within a viewer.
-   */
-  public void mouseDrag(MouseEvent event, IEditPartViewer viewer) {
-    m_currentMouseEvent = event;
-    Tool tool = getActiveTool();
-    if (tool != null) {
-      tool.mouseDrag(event, viewer);
-    }
-  }
+	/**
+	 * Called when the mouse has been dragged within a viewer.
+	 */
+	public void mouseDrag(MouseEvent event, IEditPartViewer viewer) {
+		m_currentMouseEvent = event;
+		Tool tool = getActiveTool();
+		if (tool != null) {
+			tool.mouseDrag(event, viewer);
+		}
+	}
 
-  /**
-   * Called when the mouse enters a viewer.
-   */
-  public void viewerEntered(MouseEvent event, IEditPartViewer viewer) {
-    m_currentMouseEvent = event;
-    m_currentViewer = viewer;
-    Tool tool = getActiveTool();
-    if (tool != null) {
-      tool.viewerEntered(event, viewer);
-    }
-  }
+	/**
+	 * Called when the mouse enters a viewer.
+	 */
+	public void viewerEntered(MouseEvent event, IEditPartViewer viewer) {
+		m_currentMouseEvent = event;
+		m_currentViewer = viewer;
+		Tool tool = getActiveTool();
+		if (tool != null) {
+			tool.viewerEntered(event, viewer);
+		}
+	}
 
-  /**
-   * Called when the mouse exits a viewer.
-   */
-  public void viewerExited(MouseEvent event, IEditPartViewer viewer) {
-    m_currentMouseEvent = event;
-    m_currentViewer = null;
-    Tool tool = getActiveTool();
-    if (tool != null) {
-      tool.viewerExited(event, viewer);
-    }
-  }
+	/**
+	 * Called when the mouse exits a viewer.
+	 */
+	public void viewerExited(MouseEvent event, IEditPartViewer viewer) {
+		m_currentMouseEvent = event;
+		m_currentViewer = null;
+		Tool tool = getActiveTool();
+		if (tool != null) {
+			tool.viewerExited(event, viewer);
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/core/EditPartVisitor.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/core/EditPartVisitor.java
index 11bcf7cd9..48f2ba17a 100644
--- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/core/EditPartVisitor.java
+++ b/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/core/EditPartVisitor.java
@@ -19,16 +19,16 @@
  * @coverage gef.core
  */
 public class EditPartVisitor {
-  /**
-   * This method is invoked to check if given {@link EditPart} and its children should be visited.
-   */
-  public boolean visit(EditPart editPart) {
-    return true;
-  }
+	/**
+	 * This method is invoked to check if given {@link EditPart} and its children should be visited.
+	 */
+	public boolean visit(EditPart editPart) {
+		return true;
+	}
 
-  /**
-   * This method is invoked when all children of given {@link EditPart} were visited.
-   */
-  public void endVisit(EditPart editPart) {
-  }
+	/**
+	 * This method is invoked when all children of given {@link EditPart} were visited.
+	 */
+	public void endVisit(EditPart editPart) {
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/core/IActiveToolListener.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/core/IActiveToolListener.java
index e998dfd80..e73b67828 100644
--- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/core/IActiveToolListener.java
+++ b/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/core/IActiveToolListener.java
@@ -19,8 +19,8 @@
  * @coverage gef.core
  */
 public interface IActiveToolListener {
-  /**
-   * Notifies that new {@link Tool} was activated.
-   */
-  void toolActivated(Tool tool);
+	/**
+	 * Notifies that new {@link Tool} was activated.
+	 */
+	void toolActivated(Tool tool);
 }
diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/core/IDefaultToolProvider.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/core/IDefaultToolProvider.java
index d77c12058..84d7b92ec 100644
--- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/core/IDefaultToolProvider.java
+++ b/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/core/IDefaultToolProvider.java
@@ -19,8 +19,8 @@
  * @coverage gef.core
  */
 public interface IDefaultToolProvider {
-  /**
-   * Allow {@link IDefaultToolProvider} override default {@link Tool} loading.
-   */
-  void loadDefaultTool();
+	/**
+	 * Allow {@link IDefaultToolProvider} override default {@link Tool} loading.
+	 */
+	void loadDefaultTool();
 }
diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/core/IRootContainer.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/core/IRootContainer.java
index 38e5be34b..81a3df63c 100644
--- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/core/IRootContainer.java
+++ b/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/core/IRootContainer.java
@@ -23,14 +23,14 @@
  * @coverage gef.core
  */
 public interface IRootContainer {
-  /**
-   * Returns the <i>content</i> {@link EditPart}.
-   */
-  EditPart getContent();
+	/**
+	 * Returns the <i>content</i> {@link EditPart}.
+	 */
+	EditPart getContent();
 
-  /**
-   * Sets the <i>content</i> {@link EditPart}. A IRootEditPart only has a single child, called its
-   * <i>contents</i>.
-   */
-  void setContent(EditPart contentEditPart);
+	/**
+	 * Sets the <i>content</i> {@link EditPart}. A IRootEditPart only has a single child, called its
+	 * <i>contents</i>.
+	 */
+	void setContent(EditPart contentEditPart);
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/core/ISharedCursors.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/core/ISharedCursors.java
index 1761e7958..7c36b75f2 100644
--- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/core/ISharedCursors.java
+++ b/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/core/ISharedCursors.java
@@ -22,25 +22,25 @@
  * @coverage gef.core
  */
 public interface ISharedCursors extends ICursorConstants {
-  Cursor CURSOR_TREE_ADD = new Cursor(null,
-      new ImageData(ISharedCursors.class.getResourceAsStream("icons/Tree_Add_Mask.gif")),
-      new ImageData(ISharedCursors.class.getResourceAsStream("icons/Tree_Add.gif")),
-      0,
-      0);
-  Cursor CURSOR_TREE_ADD_MAC = new Cursor(null,
-      new ImageData(ISharedCursors.class.getResourceAsStream("icons/Tree_Add_Cursor2.gif")),
-      0,
-      0);
-  Cursor CURSOR_ADD = new Cursor(null,
-      new ImageData(ISharedCursors.class.getResourceAsStream("icons/add_cursor.gif")),
-      0,
-      0);
-  Cursor CURSOR_MOVE = new Cursor(null,
-      new ImageData(ISharedCursors.class.getResourceAsStream("icons/move_cursor.gif")),
-      0,
-      0);
-  Cursor CURSOR_NO = new Cursor(null,
-      new ImageData(ISharedCursors.class.getResourceAsStream("icons/no_cursor.gif")),
-      0,
-      0);
+	Cursor CURSOR_TREE_ADD = new Cursor(null,
+			new ImageData(ISharedCursors.class.getResourceAsStream("icons/Tree_Add_Mask.gif")),
+			new ImageData(ISharedCursors.class.getResourceAsStream("icons/Tree_Add.gif")),
+			0,
+			0);
+	Cursor CURSOR_TREE_ADD_MAC = new Cursor(null,
+			new ImageData(ISharedCursors.class.getResourceAsStream("icons/Tree_Add_Cursor2.gif")),
+			0,
+			0);
+	Cursor CURSOR_ADD = new Cursor(null,
+			new ImageData(ISharedCursors.class.getResourceAsStream("icons/add_cursor.gif")),
+			0,
+			0);
+	Cursor CURSOR_MOVE = new Cursor(null,
+			new ImageData(ISharedCursors.class.getResourceAsStream("icons/move_cursor.gif")),
+			0,
+			0);
+	Cursor CURSOR_NO = new Cursor(null,
+			new ImageData(ISharedCursors.class.getResourceAsStream("icons/no_cursor.gif")),
+			0,
+			0);
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/core/MultiSelectionContextMenuProvider.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/core/MultiSelectionContextMenuProvider.java
index 549463816..4c2a12570 100644
--- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/core/MultiSelectionContextMenuProvider.java
+++ b/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/core/MultiSelectionContextMenuProvider.java
@@ -28,54 +28,54 @@
  * @coverage gef.core
  */
 public abstract class MultiSelectionContextMenuProvider extends ContextMenuProvider {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public MultiSelectionContextMenuProvider(IEditPartViewer viewer) {
-    super(viewer);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public MultiSelectionContextMenuProvider(IEditPartViewer viewer) {
+		super(viewer);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Context Menu
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected final void buildContextMenu() {
-    List<EditPart> editParts = m_viewer.getSelectedEditParts();
-    preprocessSelection(editParts);
-    // check empty
-    if (editParts.isEmpty()) {
-      return;
-    }
-    // check single selection
-    if (editParts.size() == 1) {
-      EditPart editPart = editParts.get(0);
-      buildContextMenu(editPart, this);
-      return;
-    }
-    // handle multi selection
-    List<IMenuManager> managers = Lists.newArrayList();
-    for (EditPart editPart : editParts) {
-      IMenuManager manager = new MenuManager();
-      buildContextMenu(editPart, manager);
-      managers.add(manager);
-    }
-    // select common parts
-    MenuIntersector.merge(this, managers);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Context Menu
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected final void buildContextMenu() {
+		List<EditPart> editParts = m_viewer.getSelectedEditParts();
+		preprocessSelection(editParts);
+		// check empty
+		if (editParts.isEmpty()) {
+			return;
+		}
+		// check single selection
+		if (editParts.size() == 1) {
+			EditPart editPart = editParts.get(0);
+			buildContextMenu(editPart, this);
+			return;
+		}
+		// handle multi selection
+		List<IMenuManager> managers = Lists.newArrayList();
+		for (EditPart editPart : editParts) {
+			IMenuManager manager = new MenuManager();
+			buildContextMenu(editPart, manager);
+			managers.add(manager);
+		}
+		// select common parts
+		MenuIntersector.merge(this, managers);
+	}
 
-  /**
-   * Notifies that given {@link EditPart}'s are selected and we are going to call later
-   * {@link #buildContextMenu(EditPart, IMenuManager)} for each of them.
-   */
-  protected void preprocessSelection(List<EditPart> editParts) {
-  }
+	/**
+	 * Notifies that given {@link EditPart}'s are selected and we are going to call later
+	 * {@link #buildContextMenu(EditPart, IMenuManager)} for each of them.
+	 */
+	protected void preprocessSelection(List<EditPart> editParts) {
+	}
 
-  /**
-   * Create menu items for given {@link EditPart} and fill given <code>menu</code>.
-   */
-  protected abstract void buildContextMenu(EditPart editPart, IMenuManager manager);
+	/**
+	 * Create menu items for given {@link EditPart} and fill given <code>menu</code>.
+	 */
+	protected abstract void buildContextMenu(EditPart editPart, IMenuManager manager);
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/core/TargetEditPartFindVisitor.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/core/TargetEditPartFindVisitor.java
index c2b178978..9ab1919b2 100644
--- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/core/TargetEditPartFindVisitor.java
+++ b/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/core/TargetEditPartFindVisitor.java
@@ -22,41 +22,41 @@
  * @coverage gef.core
  */
 public class TargetEditPartFindVisitor extends TargetFigureFindVisitor {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public TargetEditPartFindVisitor(FigureCanvas canvas, int x, int y) {
-    super(canvas, x, y);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public TargetEditPartFindVisitor(FigureCanvas canvas, int x, int y) {
+		super(canvas, x, y);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Return mouse target {@link EditPart}.
-   */
-  public EditPart getTargetEditPart() {
-    return extractEditPart(getTargetFigure());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Return mouse target {@link EditPart}.
+	 */
+	public EditPart getTargetEditPart() {
+		return extractEditPart(getTargetFigure());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Extract {@link EditPart} from given {@link Figure}.
-   */
-  protected static EditPart extractEditPart(Figure figure) {
-    EditPart editPart = null;
-    while (editPart == null && figure != null) {
-      editPart = (EditPart) figure.getData();
-      figure = figure.getParent();
-    }
-    return editPart;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Extract {@link EditPart} from given {@link Figure}.
+	 */
+	protected static EditPart extractEditPart(Figure figure) {
+		EditPart editPart = null;
+		while (editPart == null && figure != null) {
+			editPart = (EditPart) figure.getData();
+			figure = figure.getParent();
+		}
+		return editPart;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/graphical/EditEventManager.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/graphical/EditEventManager.java
index 79c61674f..7b60a3a84 100644
--- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/graphical/EditEventManager.java
+++ b/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/graphical/EditEventManager.java
@@ -27,173 +27,173 @@
  * @coverage gef.graphical
  */
 public class EditEventManager extends EventManager implements KeyListener {
-  private final EditDomain m_domain;
-  private final IEditPartViewer m_viewer;
-  private boolean m_eventCapture;
-  private Cursor m_overrideCursor;
-  private MouseEvent m_currentMouseEvent;
+	private final EditDomain m_domain;
+	private final IEditPartViewer m_viewer;
+	private boolean m_eventCapture;
+	private Cursor m_overrideCursor;
+	private MouseEvent m_currentMouseEvent;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public EditEventManager(FigureCanvas canvas, EditDomain domain, IEditPartViewer viewer) {
-    super(canvas);
-    m_domain = domain;
-    m_viewer = viewer;
-    // add listeners
-    Object listener = createListenerProxy(this, new Class[]{KeyListener.class});
-    canvas.addKeyListener((KeyListener) listener);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public EditEventManager(FigureCanvas canvas, EditDomain domain, IEditPartViewer viewer) {
+		super(canvas);
+		m_domain = domain;
+		m_viewer = viewer;
+		// add listeners
+		Object listener = createListenerProxy(this, new Class[]{KeyListener.class});
+		canvas.addKeyListener((KeyListener) listener);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Cursor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Set the Cursor.
-   */
-  @Override
-  public void setCursor(Cursor cursor) {
-    if (m_overrideCursor == null) {
-      super.setCursor(cursor);
-    } else {
-      super.setCursor(m_overrideCursor);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Cursor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Set the Cursor.
+	 */
+	@Override
+	public void setCursor(Cursor cursor) {
+		if (m_overrideCursor == null) {
+			super.setCursor(cursor);
+		} else {
+			super.setCursor(m_overrideCursor);
+		}
+	}
 
-  /**
-   * Set the override Cursor.
-   */
-  public void setOverrideCursor(Cursor cursor) {
-    if (m_overrideCursor != cursor) {
-      m_overrideCursor = cursor;
-      //
-      if (m_overrideCursor == null) {
-        // if use figure cursor update mouse figure
-        if (m_eventCapture) {
-          super.setCursor(null);
-        } else {
-          updateFigureUnderCursor(m_currentMouseEvent);
-          updateCursor();
-        }
-      } else {
-        setCursor(m_overrideCursor);
-      }
-    }
-  }
+	/**
+	 * Set the override Cursor.
+	 */
+	public void setOverrideCursor(Cursor cursor) {
+		if (m_overrideCursor != cursor) {
+			m_overrideCursor = cursor;
+			//
+			if (m_overrideCursor == null) {
+				// if use figure cursor update mouse figure
+				if (m_eventCapture) {
+					super.setCursor(null);
+				} else {
+					updateFigureUnderCursor(m_currentMouseEvent);
+					updateCursor();
+				}
+			} else {
+				setCursor(m_overrideCursor);
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Handle KeyEvent
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void keyPressed(KeyEvent event) {
-    m_domain.keyPressed(event, m_viewer);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Handle KeyEvent
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void keyPressed(KeyEvent event) {
+		m_domain.keyPressed(event, m_viewer);
+	}
 
-  @Override
-  public void keyReleased(KeyEvent event) {
-    m_domain.keyReleased(event, m_viewer);
-  }
+	@Override
+	public void keyReleased(KeyEvent event) {
+		m_domain.keyReleased(event, m_viewer);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Handle MouseEvent
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void mouseDoubleClick(MouseEvent event) {
-    m_currentMouseEvent = event;
-    //
-    if (!m_eventCapture) {
-      super.mouseDoubleClick(event);
-      if (isEventConsumed()) {
-        return;
-      }
-    }
-    //
-    m_domain.mouseDoubleClick(event, m_viewer);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Handle MouseEvent
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void mouseDoubleClick(MouseEvent event) {
+		m_currentMouseEvent = event;
+		//
+		if (!m_eventCapture) {
+			super.mouseDoubleClick(event);
+			if (isEventConsumed()) {
+				return;
+			}
+		}
+		//
+		m_domain.mouseDoubleClick(event, m_viewer);
+	}
 
-  @Override
-  public void mouseDown(MouseEvent event) {
-    m_viewer.getControl().forceFocus();
-    m_currentMouseEvent = event;
-    //
-    if (!m_eventCapture) {
-      super.mouseDown(event);
-      if (isEventConsumed()) {
-        return;
-      }
-    }
-    //
-    m_eventCapture = true;
-    m_domain.mouseDown(event, m_viewer);
-  }
+	@Override
+	public void mouseDown(MouseEvent event) {
+		m_viewer.getControl().forceFocus();
+		m_currentMouseEvent = event;
+		//
+		if (!m_eventCapture) {
+			super.mouseDown(event);
+			if (isEventConsumed()) {
+				return;
+			}
+		}
+		//
+		m_eventCapture = true;
+		m_domain.mouseDown(event, m_viewer);
+	}
 
-  @Override
-  public void mouseUp(MouseEvent event) {
-    m_currentMouseEvent = event;
-    //
-    if (!m_eventCapture) {
-      super.mouseUp(event);
-      if (isEventConsumed()) {
-        return;
-      }
-    }
-    //
-    boolean eventCapture = m_eventCapture;
-    m_eventCapture = false;
-    m_domain.mouseUp(event, m_viewer);
-    // after release capture update mouse figure
-    if (eventCapture) {
-      updateFigureUnderCursor(event);
-    }
-  }
+	@Override
+	public void mouseUp(MouseEvent event) {
+		m_currentMouseEvent = event;
+		//
+		if (!m_eventCapture) {
+			super.mouseUp(event);
+			if (isEventConsumed()) {
+				return;
+			}
+		}
+		//
+		boolean eventCapture = m_eventCapture;
+		m_eventCapture = false;
+		m_domain.mouseUp(event, m_viewer);
+		// after release capture update mouse figure
+		if (eventCapture) {
+			updateFigureUnderCursor(event);
+		}
+	}
 
-  @Override
-  public void mouseMove(MouseEvent event) {
-    m_currentMouseEvent = event;
-    //
-    if (!m_eventCapture) {
-      super.mouseMove(event);
-      if (isEventConsumed()) {
-        return;
-      }
-    }
-    //
-    if ((event.stateMask & ANY_BUTTON) != 0) {
-      m_domain.mouseDrag(event, m_viewer);
-    } else {
-      m_domain.mouseMove(event, m_viewer);
-    }
-  }
+	@Override
+	public void mouseMove(MouseEvent event) {
+		m_currentMouseEvent = event;
+		//
+		if (!m_eventCapture) {
+			super.mouseMove(event);
+			if (isEventConsumed()) {
+				return;
+			}
+		}
+		//
+		if ((event.stateMask & ANY_BUTTON) != 0) {
+			m_domain.mouseDrag(event, m_viewer);
+		} else {
+			m_domain.mouseMove(event, m_viewer);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // MouseTrackListener
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void mouseEnter(MouseEvent event) {
-    m_currentMouseEvent = event;
-    m_domain.viewerEntered(event, m_viewer);
-    updateFigureUnderCursor(event);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// MouseTrackListener
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void mouseEnter(MouseEvent event) {
+		m_currentMouseEvent = event;
+		m_domain.viewerEntered(event, m_viewer);
+		updateFigureUnderCursor(event);
+	}
 
-  @Override
-  public void mouseExit(MouseEvent event) {
-    m_eventCapture = false;
-    m_currentMouseEvent = event;
-    m_domain.viewerExited(event, m_viewer);
-    updateFigureUnderCursor(event);
-  }
+	@Override
+	public void mouseExit(MouseEvent event) {
+		m_eventCapture = false;
+		m_currentMouseEvent = event;
+		m_domain.viewerExited(event, m_viewer);
+		updateFigureUnderCursor(event);
+	}
 
-  @Override
-  public void mouseHover(MouseEvent event) {
-  }
+	@Override
+	public void mouseHover(MouseEvent event) {
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/graphical/GraphicalViewer.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/graphical/GraphicalViewer.java
index 6cff7a54e..60306b9c1 100644
--- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/graphical/GraphicalViewer.java
+++ b/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/graphical/GraphicalViewer.java
@@ -37,209 +37,209 @@
  * @coverage gef.graphical
  */
 public class GraphicalViewer extends AbstractEditPartViewer {
-  protected final FigureCanvas m_canvas;
-  private final RootEditPart m_rootEditPart;
-  private EditEventManager m_eventManager;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public GraphicalViewer(Composite parent) {
-    this(parent, SWT.H_SCROLL | SWT.V_SCROLL);
-  }
-
-  public GraphicalViewer(Composite parent, int style) {
-    this(new FigureCanvas(parent, style) {
-      @Override
-      protected void setDefaultEventManager() {
-        /*
-         * EventManager set during invoke setEditDomain() because before
-         * FigureCanvas not create fully and not set EditDomain.
-         */
-      }
-    });
-  }
-
-  protected GraphicalViewer(FigureCanvas canvas) {
-    m_canvas = canvas;
-    m_rootEditPart = new RootEditPart(this, getRootFigure());
-    m_rootEditPart.activate();
-    setRootEditPart(m_rootEditPart);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Returns the SWT <code>Control</code> for this viewer.
-   */
-  @Override
-  public FigureCanvas getControl() {
-    return m_canvas;
-  }
-
-  /**
-   * @return viewer horizontal scroll offset.
-   */
-  @Override
-  public int getHOffset() {
-    return m_canvas.getHorizontalScrollModel().getSelection();
-  }
-
-  /**
-   * @return viewer vertical scroll offset.
-   */
-  @Override
-  public int getVOffset() {
-    return m_canvas.getVerticalScrollModel().getSelection();
-  }
-
-  /**
-   * Returns root {@link EditPart}.
-   */
-  @Override
-  public EditPart getRootEditPart() {
-    return m_rootEditPart;
-  }
-
-  /**
-   * Returns root {@link Figure} use for access to {@link Layer}'s.
-   */
-  @Override
-  public final IRootFigure getRootFigure() {
-    return getRootFigureInternal();
-  }
-
-  /**
-   * Internal access to original, internal root figure.
-   */
-  protected final RootFigure getRootFigureInternal() {
-    return m_canvas.getRootFigure();
-  }
-
-  /**
-   * Returns the layer identified by the <code>name</code> given in the input.
-   */
-  @Override
-  public Layer getLayer(String name) {
-    return getRootFigure().getLayer(name);
-  }
-
-  /**
-   * Sets the <code>{@link EditDomain}</code> for this viewer. The Viewer will route all mouse and
-   * keyboard events to the {@link EditDomain}.
-   */
-  @Override
-  public void setEditDomain(EditDomain domain) {
-    super.setEditDomain(domain);
-    m_eventManager = new EditEventManager(m_canvas, domain, this);
-    getRootFigureInternal().setEventManager(m_eventManager);
-  }
-
-  /**
-   * Set the Cursor.
-   */
-  @Override
-  public void setCursor(Cursor cursor) {
-    m_eventManager.setOverrideCursor(cursor);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Finding
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Returns <code>null</code> or the <code>{@link EditPart}</code> at the specified location on
-   * primary layers, using the given exclusion set and conditional.
-   */
-  @Override
-  public EditPart findTargetEditPart(int x,
-      int y,
-      final Collection<EditPart> exclude,
-      final IConditional conditional) {
-    EditPart editPart = findTargetEditPart(x, y, exclude, conditional, MENU_PRIMARY_LAYER);
-    if (editPart == null) {
-      editPart = findTargetEditPart(x, y, exclude, conditional, PRIMARY_LAYER);
-    }
-    return editPart;
-  }
-
-  /**
-   * Returns <code>null</code> or the <code>{@link EditPart}</code> at the specified location on
-   * specified given layer, using the given exclusion set and conditional.
-   */
-  @Override
-  public EditPart findTargetEditPart(int x,
-      int y,
-      final Collection<EditPart> exclude,
-      final IConditional conditional,
-      String layer) {
-    TargetEditPartFindVisitor visitor = new TargetEditPartFindVisitor(m_canvas, x, y) {
-      @Override
-      protected boolean acceptVisit(Figure figure) {
-        for (EditPart editPart : exclude) {
-          GraphicalEditPart graphicalPart = (GraphicalEditPart) editPart;
-          if (ObjectUtils.equals(figure, graphicalPart.getFigure())) {
-            return false;
-          }
-        }
-        return true;
-      }
-
-      @Override
-      protected boolean acceptResult(Figure figure) {
-        EditPart editPart = extractEditPart(figure);
-        return editPart != null && (conditional == null || conditional.evaluate(editPart));
-      }
-    };
-    getLayer(layer).accept(visitor, false);
-    return visitor.getTargetEditPart();
-  }
-
-  /**
-   * @return the <code>{@link Handle}</code> at the specified location.
-   */
-  @Override
-  public Handle findTargetHandle(Point location) {
-    return findTargetHandle(location.x, location.y);
-  }
-
-  /**
-   * Returns the <code>{@link Handle}</code> at the specified location <code>(x, y)</code>. Returns
-   * <code>null</code> if no handle exists at the given location <code>(x, y)</code>.
-   */
-  @Override
-  public Handle findTargetHandle(int x, int y) {
-    Handle target;
-    if ((target = findTargetHandle(MENU_HANDLE_LAYER_STATIC, x, y)) != null) {
-      return target;
-    }
-    if ((target = findTargetHandle(MENU_HANDLE_LAYER, x, y)) != null) {
-      return target;
-    }
-    if ((target = findTargetHandle(HANDLE_LAYER_STATIC, x, y)) != null) {
-      return target;
-    }
-    if ((target = findTargetHandle(HANDLE_LAYER, x, y)) != null) {
-      return target;
-    }
-    return null;
-  }
-
-  /**
-   * Returns the <code>{@link Handle}</code> at the specified location <code>(x, y)</code> and
-   * location in given <code>layer</code>. Returns <code>null</code> if no handle exists at the
-   * given location <code>(x, y)</code>.
-   */
-  private Handle findTargetHandle(String layer, int x, int y) {
-    TargetFigureFindVisitor visitor = new TargetFigureFindVisitor(m_canvas, x, y);
-    getLayer(layer).accept(visitor, false);
-    Figure targetFigure = visitor.getTargetFigure();
-    return targetFigure instanceof Handle ? (Handle) targetFigure : null;
-  }
+	protected final FigureCanvas m_canvas;
+	private final RootEditPart m_rootEditPart;
+	private EditEventManager m_eventManager;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public GraphicalViewer(Composite parent) {
+		this(parent, SWT.H_SCROLL | SWT.V_SCROLL);
+	}
+
+	public GraphicalViewer(Composite parent, int style) {
+		this(new FigureCanvas(parent, style) {
+			@Override
+			protected void setDefaultEventManager() {
+				/*
+				 * EventManager set during invoke setEditDomain() because before
+				 * FigureCanvas not create fully and not set EditDomain.
+				 */
+			}
+		});
+	}
+
+	protected GraphicalViewer(FigureCanvas canvas) {
+		m_canvas = canvas;
+		m_rootEditPart = new RootEditPart(this, getRootFigure());
+		m_rootEditPart.activate();
+		setRootEditPart(m_rootEditPart);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Returns the SWT <code>Control</code> for this viewer.
+	 */
+	@Override
+	public FigureCanvas getControl() {
+		return m_canvas;
+	}
+
+	/**
+	 * @return viewer horizontal scroll offset.
+	 */
+	@Override
+	public int getHOffset() {
+		return m_canvas.getHorizontalScrollModel().getSelection();
+	}
+
+	/**
+	 * @return viewer vertical scroll offset.
+	 */
+	@Override
+	public int getVOffset() {
+		return m_canvas.getVerticalScrollModel().getSelection();
+	}
+
+	/**
+	 * Returns root {@link EditPart}.
+	 */
+	@Override
+	public EditPart getRootEditPart() {
+		return m_rootEditPart;
+	}
+
+	/**
+	 * Returns root {@link Figure} use for access to {@link Layer}'s.
+	 */
+	@Override
+	public final IRootFigure getRootFigure() {
+		return getRootFigureInternal();
+	}
+
+	/**
+	 * Internal access to original, internal root figure.
+	 */
+	protected final RootFigure getRootFigureInternal() {
+		return m_canvas.getRootFigure();
+	}
+
+	/**
+	 * Returns the layer identified by the <code>name</code> given in the input.
+	 */
+	@Override
+	public Layer getLayer(String name) {
+		return getRootFigure().getLayer(name);
+	}
+
+	/**
+	 * Sets the <code>{@link EditDomain}</code> for this viewer. The Viewer will route all mouse and
+	 * keyboard events to the {@link EditDomain}.
+	 */
+	@Override
+	public void setEditDomain(EditDomain domain) {
+		super.setEditDomain(domain);
+		m_eventManager = new EditEventManager(m_canvas, domain, this);
+		getRootFigureInternal().setEventManager(m_eventManager);
+	}
+
+	/**
+	 * Set the Cursor.
+	 */
+	@Override
+	public void setCursor(Cursor cursor) {
+		m_eventManager.setOverrideCursor(cursor);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Finding
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Returns <code>null</code> or the <code>{@link EditPart}</code> at the specified location on
+	 * primary layers, using the given exclusion set and conditional.
+	 */
+	@Override
+	public EditPart findTargetEditPart(int x,
+			int y,
+			final Collection<EditPart> exclude,
+			final IConditional conditional) {
+		EditPart editPart = findTargetEditPart(x, y, exclude, conditional, MENU_PRIMARY_LAYER);
+		if (editPart == null) {
+			editPart = findTargetEditPart(x, y, exclude, conditional, PRIMARY_LAYER);
+		}
+		return editPart;
+	}
+
+	/**
+	 * Returns <code>null</code> or the <code>{@link EditPart}</code> at the specified location on
+	 * specified given layer, using the given exclusion set and conditional.
+	 */
+	@Override
+	public EditPart findTargetEditPart(int x,
+			int y,
+			final Collection<EditPart> exclude,
+			final IConditional conditional,
+			String layer) {
+		TargetEditPartFindVisitor visitor = new TargetEditPartFindVisitor(m_canvas, x, y) {
+			@Override
+			protected boolean acceptVisit(Figure figure) {
+				for (EditPart editPart : exclude) {
+					GraphicalEditPart graphicalPart = (GraphicalEditPart) editPart;
+					if (ObjectUtils.equals(figure, graphicalPart.getFigure())) {
+						return false;
+					}
+				}
+				return true;
+			}
+
+			@Override
+			protected boolean acceptResult(Figure figure) {
+				EditPart editPart = extractEditPart(figure);
+				return editPart != null && (conditional == null || conditional.evaluate(editPart));
+			}
+		};
+		getLayer(layer).accept(visitor, false);
+		return visitor.getTargetEditPart();
+	}
+
+	/**
+	 * @return the <code>{@link Handle}</code> at the specified location.
+	 */
+	@Override
+	public Handle findTargetHandle(Point location) {
+		return findTargetHandle(location.x, location.y);
+	}
+
+	/**
+	 * Returns the <code>{@link Handle}</code> at the specified location <code>(x, y)</code>. Returns
+	 * <code>null</code> if no handle exists at the given location <code>(x, y)</code>.
+	 */
+	@Override
+	public Handle findTargetHandle(int x, int y) {
+		Handle target;
+		if ((target = findTargetHandle(MENU_HANDLE_LAYER_STATIC, x, y)) != null) {
+			return target;
+		}
+		if ((target = findTargetHandle(MENU_HANDLE_LAYER, x, y)) != null) {
+			return target;
+		}
+		if ((target = findTargetHandle(HANDLE_LAYER_STATIC, x, y)) != null) {
+			return target;
+		}
+		if ((target = findTargetHandle(HANDLE_LAYER, x, y)) != null) {
+			return target;
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the <code>{@link Handle}</code> at the specified location <code>(x, y)</code> and
+	 * location in given <code>layer</code>. Returns <code>null</code> if no handle exists at the
+	 * given location <code>(x, y)</code>.
+	 */
+	private Handle findTargetHandle(String layer, int x, int y) {
+		TargetFigureFindVisitor visitor = new TargetFigureFindVisitor(m_canvas, x, y);
+		getLayer(layer).accept(visitor, false);
+		Figure targetFigure = visitor.getTargetFigure();
+		return targetFigure instanceof Handle ? (Handle) targetFigure : null;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/graphical/HeaderGraphicalViewer.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/graphical/HeaderGraphicalViewer.java
index 8020838a1..8f23d3f81 100644
--- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/graphical/HeaderGraphicalViewer.java
+++ b/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/graphical/HeaderGraphicalViewer.java
@@ -22,91 +22,91 @@
  * @coverage gef.graphical
  */
 public class HeaderGraphicalViewer extends GraphicalViewer {
-  private GraphicalViewer m_mainViewer;
-  private final boolean m_horizontal;
+	private GraphicalViewer m_mainViewer;
+	private final boolean m_horizontal;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public HeaderGraphicalViewer(Composite parent, boolean horizontal) {
-    this(parent, SWT.NONE, horizontal);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public HeaderGraphicalViewer(Composite parent, boolean horizontal) {
+		this(parent, SWT.NONE, horizontal);
+	}
 
-  public HeaderGraphicalViewer(Composite parent, int style, boolean horizontal) {
-    super(parent, checkStyles(style));
-    m_horizontal = horizontal;
-  }
+	public HeaderGraphicalViewer(Composite parent, int style, boolean horizontal) {
+		super(parent, checkStyles(style));
+		m_horizontal = horizontal;
+	}
 
-  private static final int checkStyles(int styles) {
-    // ignore horizontal scroll style
-    if ((styles & SWT.H_SCROLL) != 0) {
-      styles |= ~SWT.H_SCROLL;
-    }
-    // ignore vertical scroll style
-    if ((styles & SWT.V_SCROLL) != 0) {
-      styles |= ~SWT.V_SCROLL;
-    }
-    return styles;
-  }
+	private static final int checkStyles(int styles) {
+		// ignore horizontal scroll style
+		if ((styles & SWT.H_SCROLL) != 0) {
+			styles |= ~SWT.H_SCROLL;
+		}
+		// ignore vertical scroll style
+		if ((styles & SWT.V_SCROLL) != 0) {
+			styles |= ~SWT.V_SCROLL;
+		}
+		return styles;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void setMainViewer(GraphicalViewer mainViewer) {
-    // set main viewer
-    m_mainViewer = mainViewer;
-    // set EditDomain
-    setEditDomain(m_mainViewer.getEditDomain());
-    // configure canvas
-    if (m_horizontal) {
-      setHorizontallHook();
-    } else {
-      setVerticalHook();
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void setMainViewer(GraphicalViewer mainViewer) {
+		// set main viewer
+		m_mainViewer = mainViewer;
+		// set EditDomain
+		setEditDomain(m_mainViewer.getEditDomain());
+		// configure canvas
+		if (m_horizontal) {
+			setHorizontallHook();
+		} else {
+			setVerticalHook();
+		}
+	}
 
-  private void setHorizontallHook() {
-    // configure root preferred size
-    getRootFigureInternal().setPreferredSizeProvider(new IPreferredSizeProvider() {
-      @Override
-      public Dimension getPreferredSize(Dimension originalPreferredSize) {
-        return new Dimension(m_mainViewer.getRootFigureInternal().getPreferredSize().width
-            + m_mainViewer.m_canvas.getVerticalBar().getSize().x, originalPreferredSize.height);
-      }
-    });
-    // configure scrolling
-    m_mainViewer.m_canvas.getHorizontalScrollModel().addSelectionListener(
-        new ScrollModel.ISelectionListener() {
-          @Override
-          public void setSelection(int newSelection) {
-            m_canvas.getHorizontalScrollModel().setSelection(newSelection);
-            getRootFigureInternal().repaint();
-          }
-        });
-  }
+	private void setHorizontallHook() {
+		// configure root preferred size
+		getRootFigureInternal().setPreferredSizeProvider(new IPreferredSizeProvider() {
+			@Override
+			public Dimension getPreferredSize(Dimension originalPreferredSize) {
+				return new Dimension(m_mainViewer.getRootFigureInternal().getPreferredSize().width
+						+ m_mainViewer.m_canvas.getVerticalBar().getSize().x, originalPreferredSize.height);
+			}
+		});
+		// configure scrolling
+		m_mainViewer.m_canvas.getHorizontalScrollModel().addSelectionListener(
+				new ScrollModel.ISelectionListener() {
+					@Override
+					public void setSelection(int newSelection) {
+						m_canvas.getHorizontalScrollModel().setSelection(newSelection);
+						getRootFigureInternal().repaint();
+					}
+				});
+	}
 
-  private void setVerticalHook() {
-    // configure root preferred size
-    getRootFigureInternal().setPreferredSizeProvider(new IPreferredSizeProvider() {
-      @Override
-      public Dimension getPreferredSize(Dimension originalPreferredSize) {
-        return new Dimension(originalPreferredSize.width,
-            m_mainViewer.getRootFigureInternal().getPreferredSize().height
-                + m_mainViewer.m_canvas.getHorizontalBar().getSize().y);
-      }
-    });
-    // configure scrolling
-    m_mainViewer.m_canvas.getVerticalScrollModel().addSelectionListener(
-        new ScrollModel.ISelectionListener() {
-          @Override
-          public void setSelection(int newSelection) {
-            m_canvas.getVerticalScrollModel().setSelection(newSelection);
-            getRootFigureInternal().repaint();
-          }
-        });
-  }
+	private void setVerticalHook() {
+		// configure root preferred size
+		getRootFigureInternal().setPreferredSizeProvider(new IPreferredSizeProvider() {
+			@Override
+			public Dimension getPreferredSize(Dimension originalPreferredSize) {
+				return new Dimension(originalPreferredSize.width,
+						m_mainViewer.getRootFigureInternal().getPreferredSize().height
+						+ m_mainViewer.m_canvas.getHorizontalBar().getSize().y);
+			}
+		});
+		// configure scrolling
+		m_mainViewer.m_canvas.getVerticalScrollModel().addSelectionListener(
+				new ScrollModel.ISelectionListener() {
+					@Override
+					public void setSelection(int newSelection) {
+						m_canvas.getVerticalScrollModel().setSelection(newSelection);
+						getRootFigureInternal().repaint();
+					}
+				});
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/graphical/RootEditPart.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/graphical/RootEditPart.java
index 51e4210a4..0367ba9c3 100644
--- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/graphical/RootEditPart.java
+++ b/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/graphical/RootEditPart.java
@@ -31,116 +31,116 @@
  * @coverage gef.graphical
  */
 class RootEditPart extends GraphicalEditPart implements IRootContainer {
-  private final IEditPartViewer m_viewer;
-  private final IRootFigure m_rootFigure;
-  private EditPart m_contentEditPart;
+	private final IEditPartViewer m_viewer;
+	private final IRootFigure m_rootFigure;
+	private EditPart m_contentEditPart;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public RootEditPart(IEditPartViewer viewer, IRootFigure rootFigure) {
-    m_viewer = viewer;
-    m_rootFigure = rootFigure;
-    createLayers();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public RootEditPart(IEditPartViewer viewer, IRootFigure rootFigure) {
+		m_viewer = viewer;
+		m_rootFigure = rootFigure;
+		createLayers();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Layer's
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void createLayers() {
-    m_rootFigure.addLayer(new Layer(IEditPartViewer.PRIMARY_LAYER_SUB_1));
-    m_rootFigure.addLayer(new Layer(IEditPartViewer.PRIMARY_LAYER));
-    m_rootFigure.addLayer(new Layer(IEditPartViewer.HANDLE_LAYER_SUB_1));
-    m_rootFigure.addLayer(new Layer(IEditPartViewer.HANDLE_LAYER_SUB_2));
-    m_rootFigure.addLayer(new Layer(IEditPartViewer.HANDLE_LAYER));
-    m_rootFigure.addLayer(new Layer(IEditPartViewer.HANDLE_LAYER_STATIC));
-    m_rootFigure.addLayer(new Layer(IEditPartViewer.FEEDBACK_LAYER_SUB_1));
-    m_rootFigure.addLayer(new Layer(IEditPartViewer.FEEDBACK_LAYER_SUB_2));
-    m_rootFigure.addLayer(new Layer(IEditPartViewer.FEEDBACK_LAYER));
-    m_rootFigure.addLayer(new Layer(IEditPartViewer.FEEDBACK_LAYER_ABV_1));
-    m_rootFigure.addLayer(new Layer(IEditPartViewer.CLICKABLE_LAYER));
-    m_rootFigure.addLayer(new Layer(IEditPartViewer.MENU_PRIMARY_LAYER));
-    m_rootFigure.addLayer(new Layer(IEditPartViewer.MENU_HANDLE_LAYER));
-    m_rootFigure.addLayer(new Layer(IEditPartViewer.MENU_HANDLE_LAYER_STATIC));
-    m_rootFigure.addLayer(new Layer(IEditPartViewer.MENU_FEEDBACK_LAYER));
-    m_rootFigure.addLayer(new Layer(IEditPartViewer.TOP_LAYER));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Layer's
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void createLayers() {
+		m_rootFigure.addLayer(new Layer(IEditPartViewer.PRIMARY_LAYER_SUB_1));
+		m_rootFigure.addLayer(new Layer(IEditPartViewer.PRIMARY_LAYER));
+		m_rootFigure.addLayer(new Layer(IEditPartViewer.HANDLE_LAYER_SUB_1));
+		m_rootFigure.addLayer(new Layer(IEditPartViewer.HANDLE_LAYER_SUB_2));
+		m_rootFigure.addLayer(new Layer(IEditPartViewer.HANDLE_LAYER));
+		m_rootFigure.addLayer(new Layer(IEditPartViewer.HANDLE_LAYER_STATIC));
+		m_rootFigure.addLayer(new Layer(IEditPartViewer.FEEDBACK_LAYER_SUB_1));
+		m_rootFigure.addLayer(new Layer(IEditPartViewer.FEEDBACK_LAYER_SUB_2));
+		m_rootFigure.addLayer(new Layer(IEditPartViewer.FEEDBACK_LAYER));
+		m_rootFigure.addLayer(new Layer(IEditPartViewer.FEEDBACK_LAYER_ABV_1));
+		m_rootFigure.addLayer(new Layer(IEditPartViewer.CLICKABLE_LAYER));
+		m_rootFigure.addLayer(new Layer(IEditPartViewer.MENU_PRIMARY_LAYER));
+		m_rootFigure.addLayer(new Layer(IEditPartViewer.MENU_HANDLE_LAYER));
+		m_rootFigure.addLayer(new Layer(IEditPartViewer.MENU_HANDLE_LAYER_STATIC));
+		m_rootFigure.addLayer(new Layer(IEditPartViewer.MENU_FEEDBACK_LAYER));
+		m_rootFigure.addLayer(new Layer(IEditPartViewer.TOP_LAYER));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // EditPart
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Returns the root's {@link EditPartViewer}.
-   */
-  @Override
-  public IEditPartViewer getViewer() {
-    return m_viewer;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// EditPart
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Returns the root's {@link EditPartViewer}.
+	 */
+	@Override
+	public IEditPartViewer getViewer() {
+		return m_viewer;
+	}
 
-  /**
-   * Return root {@link Figure} for all {@link EditPart} {@link Figure}'s.
-   */
-  @Override
-  public Figure getContentPane() {
-    return m_rootFigure.getLayer(IEditPartViewer.PRIMARY_LAYER);
-  }
+	/**
+	 * Return root {@link Figure} for all {@link EditPart} {@link Figure}'s.
+	 */
+	@Override
+	public Figure getContentPane() {
+		return m_rootFigure.getLayer(IEditPartViewer.PRIMARY_LAYER);
+	}
 
-  /**
-   * This {@link EditPart} not contains itself {@link Figure}.
-   */
-  @Override
-  protected Figure createFigure() {
-    return null;
-  }
+	/**
+	 * This {@link EditPart} not contains itself {@link Figure}.
+	 */
+	@Override
+	protected Figure createFigure() {
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IRootEditPart
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Returns the <i>content</i> {@link EditPart}.
-   */
-  @Override
-  public EditPart getContent() {
-    return m_contentEditPart;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IRootEditPart
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Returns the <i>content</i> {@link EditPart}.
+	 */
+	@Override
+	public EditPart getContent() {
+		return m_contentEditPart;
+	}
 
-  /**
-   * Sets the <i>content</i> {@link EditPart}. A RootEditPart only has a single child, called its
-   * <i>contents</i>.
-   */
-  @Override
-  public void setContent(EditPart contentEditPart) {
-    if (m_contentEditPart != null) {
-      // remove content
-      removeChild(m_contentEditPart);
-      // clear all layers
-      for (Layer layer : m_rootFigure.getLayers()) {
-        layer.removeAll();
-      }
-    }
-    //
-    m_contentEditPart = contentEditPart;
-    //
-    if (m_contentEditPart != null) {
-      addChild(m_contentEditPart, -1);
-    }
-  }
+	/**
+	 * Sets the <i>content</i> {@link EditPart}. A RootEditPart only has a single child, called its
+	 * <i>contents</i>.
+	 */
+	@Override
+	public void setContent(EditPart contentEditPart) {
+		if (m_contentEditPart != null) {
+			// remove content
+			removeChild(m_contentEditPart);
+			// clear all layers
+			for (Layer layer : m_rootFigure.getLayers()) {
+				layer.removeAll();
+			}
+		}
+		//
+		m_contentEditPart = contentEditPart;
+		//
+		if (m_contentEditPart != null) {
+			addChild(m_contentEditPart, -1);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // DragTracking
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Tool getDragTrackerTool(Request request) {
-    return new MarqueeSelectionTool();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// DragTracking
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Tool getDragTrackerTool(Request request) {
+		return new MarqueeSelectionTool();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/tree/RootEditPart.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/tree/RootEditPart.java
index 3e0926b04..76ddb6dad 100644
--- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/tree/RootEditPart.java
+++ b/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/tree/RootEditPart.java
@@ -25,68 +25,68 @@
  * @coverage gef.tree
  */
 class RootEditPart extends TreeEditPart implements IRootContainer {
-  private final IEditPartViewer m_viewer;
-  private TreeEditPart m_contentEditPart;
+	private final IEditPartViewer m_viewer;
+	private TreeEditPart m_contentEditPart;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public RootEditPart(IEditPartViewer viewer) {
-    m_viewer = viewer;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public RootEditPart(IEditPartViewer viewer) {
+		m_viewer = viewer;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // EditPart
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Returns the root's {@link EditPartViewer}.
-   */
-  @Override
-  public IEditPartViewer getViewer() {
-    return m_viewer;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// EditPart
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Returns the root's {@link EditPartViewer}.
+	 */
+	@Override
+	public IEditPartViewer getViewer() {
+		return m_viewer;
+	}
 
-  @Override
-  protected void addChildVisual(EditPart childPart, int index) {
-    m_contentEditPart.setWidget(new TreeItem(getTreeControl(), SWT.NONE));
-  }
+	@Override
+	protected void addChildVisual(EditPart childPart, int index) {
+		m_contentEditPart.setWidget(new TreeItem(getTreeControl(), SWT.NONE));
+	}
 
-  private Tree getTreeControl() {
-    return (Tree) m_viewer.getControl();
-  }
+	private Tree getTreeControl() {
+		return (Tree) m_viewer.getControl();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IRootEditPart
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Returns the <i>content</i> {@link EditPart}.
-   */
-  @Override
-  public EditPart getContent() {
-    return m_contentEditPart;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IRootEditPart
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Returns the <i>content</i> {@link EditPart}.
+	 */
+	@Override
+	public EditPart getContent() {
+		return m_contentEditPart;
+	}
 
-  /**
-   * Sets the <i>content</i> {@link EditPart}. A IRootEditPart only has a single child, called its
-   * <i>contents</i>.
-   */
-  @Override
-  public void setContent(EditPart contentEditPart) {
-    if (m_contentEditPart != null) {
-      // remove content
-      removeChild(m_contentEditPart);
-    }
-    //
-    m_contentEditPart = (TreeEditPart) contentEditPart;
-    //
-    if (m_contentEditPart != null) {
-      addChild(m_contentEditPart, -1);
-    }
-  }
+	/**
+	 * Sets the <i>content</i> {@link EditPart}. A IRootEditPart only has a single child, called its
+	 * <i>contents</i>.
+	 */
+	@Override
+	public void setContent(EditPart contentEditPart) {
+		if (m_contentEditPart != null) {
+			// remove content
+			removeChild(m_contentEditPart);
+		}
+		//
+		m_contentEditPart = (TreeEditPart) contentEditPart;
+		//
+		if (m_contentEditPart != null) {
+			addChild(m_contentEditPart, -1);
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/tree/TreeEventManager.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/tree/TreeEventManager.java
index 686ad02b2..e4835a9fd 100644
--- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/tree/TreeEventManager.java
+++ b/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/tree/TreeEventManager.java
@@ -34,146 +34,146 @@
  * @coverage gef.tree
  */
 final class TreeEventManager
-    implements
-      KeyListener,
-      MouseListener,
-      MouseMoveListener,
-      MouseTrackListener {
-  private final Tree m_tree;
-  private final IEditPartViewer m_viewer;
-  private EditDomain m_domain;
-  final TreeDropListener m_dropListener;
+implements
+KeyListener,
+MouseListener,
+MouseMoveListener,
+MouseTrackListener {
+	private final Tree m_tree;
+	private final IEditPartViewer m_viewer;
+	private EditDomain m_domain;
+	final TreeDropListener m_dropListener;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public TreeEventManager(Tree tree, IEditPartViewer viewer) {
-    m_tree = tree;
-    m_viewer = viewer;
-    // add listeners
-    Object listener =
-        EventManager.createListenerProxy(this, new Class[]{
-            KeyListener.class,
-            MouseListener.class,
-            MouseMoveListener.class,
-            MouseTrackListener.class});
-    m_tree.addKeyListener((KeyListener) listener);
-    m_tree.addMouseListener((MouseListener) listener);
-    m_tree.addMouseMoveListener((MouseMoveListener) listener);
-    m_tree.addMouseTrackListener((MouseTrackListener) listener);
-    // add DND listeners
-    new DragSource(m_tree, DND.DROP_MOVE).setTransfer(new Transfer[]{TreeTransfer.INSTANCE});
-    m_dropListener = new TreeDropListener(m_viewer);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public TreeEventManager(Tree tree, IEditPartViewer viewer) {
+		m_tree = tree;
+		m_viewer = viewer;
+		// add listeners
+		Object listener =
+				EventManager.createListenerProxy(this, new Class[]{
+						KeyListener.class,
+						MouseListener.class,
+						MouseMoveListener.class,
+						MouseTrackListener.class});
+		m_tree.addKeyListener((KeyListener) listener);
+		m_tree.addMouseListener((MouseListener) listener);
+		m_tree.addMouseMoveListener((MouseMoveListener) listener);
+		m_tree.addMouseTrackListener((MouseTrackListener) listener);
+		// add DND listeners
+		new DragSource(m_tree, DND.DROP_MOVE).setTransfer(new Transfer[]{TreeTransfer.INSTANCE});
+		m_dropListener = new TreeDropListener(m_viewer);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void setDomain(EditDomain domain) {
-    m_domain = domain;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void setDomain(EditDomain domain) {
+		m_domain = domain;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // KeyListener
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void keyPressed(KeyEvent event) {
-    if (m_domain != null) {
-      m_domain.keyPressed(event, m_viewer);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// KeyListener
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void keyPressed(KeyEvent event) {
+		if (m_domain != null) {
+			m_domain.keyPressed(event, m_viewer);
+		}
+	}
 
-  @Override
-  public void keyReleased(KeyEvent event) {
-    if (m_domain != null) {
-      m_domain.keyReleased(event, m_viewer);
-    }
-  }
+	@Override
+	public void keyReleased(KeyEvent event) {
+		if (m_domain != null) {
+			m_domain.keyReleased(event, m_viewer);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // MouseListener
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void mouseDoubleClick(MouseEvent event) {
-    if (m_domain != null) {
-      m_domain.mouseDoubleClick(event, m_viewer);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// MouseListener
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void mouseDoubleClick(MouseEvent event) {
+		if (m_domain != null) {
+			m_domain.mouseDoubleClick(event, m_viewer);
+		}
+	}
 
-  @Override
-  public void mouseDown(MouseEvent event) {
-    if (isPlusMinusClick(m_tree, event.x, event.y)) {
-      return;
-    }
-    // OK, send to domain
-    if (m_domain != null) {
-      m_domain.mouseDown(event, m_viewer);
-    }
-  }
+	@Override
+	public void mouseDown(MouseEvent event) {
+		if (isPlusMinusClick(m_tree, event.x, event.y)) {
+			return;
+		}
+		// OK, send to domain
+		if (m_domain != null) {
+			m_domain.mouseDown(event, m_viewer);
+		}
+	}
 
-  @Override
-  public void mouseUp(MouseEvent event) {
-    if (m_domain != null) {
-      m_domain.mouseUp(event, m_viewer);
-    }
-  }
+	@Override
+	public void mouseUp(MouseEvent event) {
+		if (m_domain != null) {
+			m_domain.mouseUp(event, m_viewer);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // MouseMoveListener
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void mouseMove(MouseEvent event) {
-    if (m_domain != null) {
-      if ((event.stateMask & EventManager.ANY_BUTTON) != 0) {
-        m_domain.mouseDrag(event, m_viewer);
-      } else {
-        m_domain.mouseMove(event, m_viewer);
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// MouseMoveListener
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void mouseMove(MouseEvent event) {
+		if (m_domain != null) {
+			if ((event.stateMask & EventManager.ANY_BUTTON) != 0) {
+				m_domain.mouseDrag(event, m_viewer);
+			} else {
+				m_domain.mouseMove(event, m_viewer);
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // MouseTrackListener
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void mouseEnter(MouseEvent event) {
-    if (m_domain != null) {
-      m_domain.viewerEntered(event, m_viewer);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// MouseTrackListener
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void mouseEnter(MouseEvent event) {
+		if (m_domain != null) {
+			m_domain.viewerEntered(event, m_viewer);
+		}
+	}
 
-  @Override
-  public void mouseExit(MouseEvent event) {
-    if (m_domain != null) {
-      m_domain.viewerExited(event, m_viewer);
-    }
-  }
+	@Override
+	public void mouseExit(MouseEvent event) {
+		if (m_domain != null) {
+			m_domain.viewerExited(event, m_viewer);
+		}
+	}
 
-  @Override
-  public void mouseHover(MouseEvent event) {
-  }
+	@Override
+	public void mouseHover(MouseEvent event) {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if pointer is over {@link TreeItem} plus/minus sign.
-   */
-  private static boolean isPlusMinusClick(Tree tree, int x, int y) {
-    return OSSupport.get().isPlusMinusTreeClick(tree, x, y);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if pointer is over {@link TreeItem} plus/minus sign.
+	 */
+	private static boolean isPlusMinusClick(Tree tree, int x, int y) {
+		return OSSupport.get().isPlusMinusTreeClick(tree, x, y);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/tree/TreeViewer.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/tree/TreeViewer.java
index 88a82a24c..f1dd82ec7 100644
--- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/tree/TreeViewer.java
+++ b/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/tree/TreeViewer.java
@@ -42,238 +42,238 @@
  * @coverage gef.tree
  */
 public class TreeViewer extends AbstractEditPartViewer {
-  private final Tree m_tree;
-  private final RootEditPart m_rootEditPart;
-  private final TreeEventManager m_eventManager;
+	private final Tree m_tree;
+	private final RootEditPart m_rootEditPart;
+	private final TreeEventManager m_eventManager;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public TreeViewer(Composite parent, int style) {
-    this(new Tree(parent, style));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public TreeViewer(Composite parent, int style) {
+		this(new Tree(parent, style));
+	}
 
-  public TreeViewer(Tree tree) {
-    m_tree = tree;
-    // handle SWT events
-    m_eventManager = new TreeEventManager(m_tree, this);
-    // create root EditPart
-    m_rootEditPart = new RootEditPart(this);
-    m_rootEditPart.activate();
-    setRootEditPart(m_rootEditPart);
-    // handle selection events
-    synchronizeSelection();
-  }
+	public TreeViewer(Tree tree) {
+		m_tree = tree;
+		// handle SWT events
+		m_eventManager = new TreeEventManager(m_tree, this);
+		// create root EditPart
+		m_rootEditPart = new RootEditPart(this);
+		m_rootEditPart.activate();
+		setRootEditPart(m_rootEditPart);
+		// handle selection events
+		synchronizeSelection();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link Tree} control for this viewer.
-   */
-  public Tree getTree() {
-    return m_tree;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link Tree} control for this viewer.
+	 */
+	public Tree getTree() {
+		return m_tree;
+	}
 
-  /**
-   * Returns the SWT <code>Control</code> for this viewer.
-   */
-  @Override
-  public Control getControl() {
-    return m_tree;
-  }
+	/**
+	 * Returns the SWT <code>Control</code> for this viewer.
+	 */
+	@Override
+	public Control getControl() {
+		return m_tree;
+	}
 
-  /**
-   * @return viewer horizontal scroll offset.
-   */
-  @Override
-  public int getHOffset() {
-    return 0;
-  }
+	/**
+	 * @return viewer horizontal scroll offset.
+	 */
+	@Override
+	public int getHOffset() {
+		return 0;
+	}
 
-  /**
-   * @return viewer vertical scroll offset.
-   */
-  @Override
-  public int getVOffset() {
-    return 0;
-  }
+	/**
+	 * @return viewer vertical scroll offset.
+	 */
+	@Override
+	public int getVOffset() {
+		return 0;
+	}
 
-  /**
-   * Returns root {@link EditPart}.
-   */
-  @Override
-  public EditPart getRootEditPart() {
-    return m_rootEditPart;
-  }
+	/**
+	 * Returns root {@link EditPart}.
+	 */
+	@Override
+	public EditPart getRootEditPart() {
+		return m_rootEditPart;
+	}
 
-  @Override
-  public IRootFigure getRootFigure() {
-    return null;
-  }
+	@Override
+	public IRootFigure getRootFigure() {
+		return null;
+	}
 
-  @Override
-  public Layer getLayer(String name) {
-    return null;
-  }
+	@Override
+	public Layer getLayer(String name) {
+		return null;
+	}
 
-  /**
-   * Sets the <code>{@link EditDomain}</code> for this viewer. The Viewer will route all mouse and
-   * keyboard events to the {@link EditDomain}.
-   */
-  @Override
-  public void setEditDomain(EditDomain domain) {
-    super.setEditDomain(domain);
-    m_eventManager.setDomain(domain);
-  }
+	/**
+	 * Sets the <code>{@link EditDomain}</code> for this viewer. The Viewer will route all mouse and
+	 * keyboard events to the {@link EditDomain}.
+	 */
+	@Override
+	public void setEditDomain(EditDomain domain) {
+		super.setEditDomain(domain);
+		m_eventManager.setDomain(domain);
+	}
 
-  /**
-   * Set the Cursor.
-   */
-  @Override
-  public void setCursor(Cursor cursor) {
-    m_tree.setCursor(cursor);
-  }
+	/**
+	 * Set the Cursor.
+	 */
+	@Override
+	public void setCursor(Cursor cursor) {
+		m_tree.setCursor(cursor);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Expansion
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Collapses all items in underlying {@link Tree}.
-   */
-  public void collapseAll() {
-    UiUtils.collapseAll(m_tree);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Expansion
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Collapses all items in underlying {@link Tree}.
+	 */
+	public void collapseAll() {
+		UiUtils.collapseAll(m_tree);
+	}
 
-  /**
-   * Expands all items in underlying {@link Tree}.
-   */
-  public void expandAll() {
-    UiUtils.expandAll(m_tree);
-  }
+	/**
+	 * Expands all items in underlying {@link Tree}.
+	 */
+	public void expandAll() {
+		UiUtils.expandAll(m_tree);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Selection
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds listeners for synchronizing selection between this {@link TreeViewer} and underlying
-   * {@link Tree} widget.
-   */
-  private void synchronizeSelection() {
-    final boolean[] inTreeSelectionListener = new boolean[1];
-    // listener for Tree widget selection
-    m_tree.addSelectionListener(new SelectionListener() {
-      @Override
-      public void widgetSelected(SelectionEvent e) {
-        // prepare selected EditPart's
-        EditPart[] selection;
-        {
-          TreeItem[] items = m_tree.getSelection();
-          selection = new EditPart[items.length];
-          for (int i = 0; i < selection.length; i++) {
-            selection[i] = (EditPart) items[i].getData();
-          }
-        }
-        // set selection in viewer
-        try {
-          inTreeSelectionListener[0] = true;
-          setSelection(new StructuredSelection(selection));
-        } finally {
-          inTreeSelectionListener[0] = false;
-        }
-      }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Selection
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds listeners for synchronizing selection between this {@link TreeViewer} and underlying
+	 * {@link Tree} widget.
+	 */
+	private void synchronizeSelection() {
+		final boolean[] inTreeSelectionListener = new boolean[1];
+		// listener for Tree widget selection
+		m_tree.addSelectionListener(new SelectionListener() {
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				// prepare selected EditPart's
+				EditPart[] selection;
+				{
+					TreeItem[] items = m_tree.getSelection();
+					selection = new EditPart[items.length];
+					for (int i = 0; i < selection.length; i++) {
+						selection[i] = (EditPart) items[i].getData();
+					}
+				}
+				// set selection in viewer
+				try {
+					inTreeSelectionListener[0] = true;
+					setSelection(new StructuredSelection(selection));
+				} finally {
+					inTreeSelectionListener[0] = false;
+				}
+			}
 
-      @Override
-      public void widgetDefaultSelected(SelectionEvent e) {
-        widgetSelected(e);
-      }
-    });
-    // listener for this viewer selection
-    addSelectionChangedListener(new ISelectionChangedListener() {
-      @Override
-      public void selectionChanged(SelectionChangedEvent event) {
-        if (!inTreeSelectionListener[0]) {
-          setSelectionToTreeWidget();
-        }
-      }
-    });
-  }
+			@Override
+			public void widgetDefaultSelected(SelectionEvent e) {
+				widgetSelected(e);
+			}
+		});
+		// listener for this viewer selection
+		addSelectionChangedListener(new ISelectionChangedListener() {
+			@Override
+			public void selectionChanged(SelectionChangedEvent event) {
+				if (!inTreeSelectionListener[0]) {
+					setSelectionToTreeWidget();
+				}
+			}
+		});
+	}
 
-  /**
-   * Applies existing selection from this {@link TreeViewer} to underlying {@link Tree} widget.
-   */
-  public void setSelectionToTreeWidget() {
-    // prepare selected TreeItem's
-    List<TreeItem> treeItems = Lists.newArrayList();
-    for (EditPart editPart : getSelectedEditParts()) {
-      TreeEditPart treeEditPart = (TreeEditPart) editPart;
-      treeItems.add(treeEditPart.getWidget());
-    }
-    // set selection in tree
-    m_tree.setSelection(treeItems.toArray(new TreeItem[treeItems.size()]));
-  }
+	/**
+	 * Applies existing selection from this {@link TreeViewer} to underlying {@link Tree} widget.
+	 */
+	public void setSelectionToTreeWidget() {
+		// prepare selected TreeItem's
+		List<TreeItem> treeItems = Lists.newArrayList();
+		for (EditPart editPart : getSelectedEditParts()) {
+			TreeEditPart treeEditPart = (TreeEditPart) editPart;
+			treeItems.add(treeEditPart.getWidget());
+		}
+		// set selection in tree
+		m_tree.setSelection(treeItems.toArray(new TreeItem[treeItems.size()]));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Finding
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Returns <code>null</code> or the <code>{@link EditPart}</code> at the specified location, using
-   * the given exclusion set and conditional.
-   */
-  @Override
-  public EditPart findTargetEditPart(int x,
-      int y,
-      Collection<EditPart> exclude,
-      IConditional conditional) {
-    // simple check location
-    Rectangle clientArea = m_tree.getClientArea();
-    if (x < 0 || y < 0 || x > clientArea.width || y > clientArea.height) {
-      return null;
-    }
-    // find EditPart
-    EditPart result = null;
-    TreeItem item = m_tree.getItem(new org.eclipse.swt.graphics.Point(x, y));
-    if (item == null) {
-      result = m_rootEditPart;
-    } else {
-      result = (EditPart) item.getData();
-    }
-    // apply conditional
-    while (result != null) {
-      if (!exclude.contains(result) && (conditional == null || conditional.evaluate(result))) {
-        return result;
-      }
-      result = result.getParent();
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Finding
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Returns <code>null</code> or the <code>{@link EditPart}</code> at the specified location, using
+	 * the given exclusion set and conditional.
+	 */
+	@Override
+	public EditPart findTargetEditPart(int x,
+			int y,
+			Collection<EditPart> exclude,
+			IConditional conditional) {
+		// simple check location
+		Rectangle clientArea = m_tree.getClientArea();
+		if (x < 0 || y < 0 || x > clientArea.width || y > clientArea.height) {
+			return null;
+		}
+		// find EditPart
+		EditPart result = null;
+		TreeItem item = m_tree.getItem(new org.eclipse.swt.graphics.Point(x, y));
+		if (item == null) {
+			result = m_rootEditPart;
+		} else {
+			result = (EditPart) item.getData();
+		}
+		// apply conditional
+		while (result != null) {
+			if (!exclude.contains(result) && (conditional == null || conditional.evaluate(result))) {
+				return result;
+			}
+			result = result.getParent();
+		}
+		return null;
+	}
 
-  @Override
-  public EditPart findTargetEditPart(int x,
-      int y,
-      Collection<EditPart> exclude,
-      IConditional conditional,
-      String layer) {
-    return null;
-  }
+	@Override
+	public EditPart findTargetEditPart(int x,
+			int y,
+			Collection<EditPart> exclude,
+			IConditional conditional,
+			String layer) {
+		return null;
+	}
 
-  @Override
-  public Handle findTargetHandle(Point location) {
-    return null;
-  }
+	@Override
+	public Handle findTargetHandle(Point location) {
+		return null;
+	}
 
-  @Override
-  public Handle findTargetHandle(int x, int y) {
-    return null;
-  }
+	@Override
+	public Handle findTargetHandle(int x, int y) {
+		return null;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/tree/dnd/TreeDropListener.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/tree/dnd/TreeDropListener.java
index 28e21478a..0b6d92cc5 100644
--- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/tree/dnd/TreeDropListener.java
+++ b/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/tree/dnd/TreeDropListener.java
@@ -33,305 +33,305 @@
  * @coverage gef.tree
  */
 public class TreeDropListener implements DropTargetListener {
-  private final IEditPartViewer m_viewer;
-  private DropTargetEvent m_currentEvent;
-  private EditPart m_target;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public TreeDropListener(IEditPartViewer viewer) {
-    m_viewer = viewer;
-    // add DND listener
-    DropTarget target = new DropTarget(m_viewer.getControl(), DND.DROP_MOVE);
-    target.setTransfer(new Transfer[]{TreeTransfer.INSTANCE});
-    target.addDropListener(this);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // DropTargetListener
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void dragEnter(DropTargetEvent event) {
-    m_currentEvent = event;
-  }
-
-  @Override
-  public void dropAccept(DropTargetEvent event) {
-    m_currentEvent = event;
-  }
-
-  @Override
-  public void dragLeave(DropTargetEvent event) {
-    m_currentEvent = event;
-    clearState();
-  }
-
-  @Override
-  public void dragOperationChanged(DropTargetEvent event) {
-    m_currentEvent = event;
-    eraseTargetFeedback();
-    updateTargetRequest();
-    updateTargetEditPart();
-    updateTargetRequestAfter();
-    updateCommand();
-  }
-
-  @Override
-  public void dragOver(DropTargetEvent event) {
-    boolean needUpdateFeedback =
-        !m_isShowingFeedback || event.x != m_currentEvent.x || event.y != m_currentEvent.y;
-    m_currentEvent = event;
-    updateTargetRequest();
-    updateTargetEditPart();
-    updateTargetRequestAfter();
-    updateCommand();
-    if (needUpdateFeedback) {
-      showTargetFeedback();
-    }
-    m_currentEvent.feedback =
-        DND.FEEDBACK_EXPAND | DND.FEEDBACK_SCROLL | getTargetRequest().getDNDFeedback();
-  }
-
-  @Override
-  public void drop(DropTargetEvent event) {
-    m_currentEvent = event;
-    List<Object> models = getModels(getDragSource());
-    eraseTargetFeedback();
-    updateTargetRequest();
-    updateTargetEditPart();
-    updateTargetRequestAfter();
-    try {
-      executeCommand();
-    } finally {
-      clearState();
-    }
-    resetSelectionFromModels(models);
-  }
-
-  private void clearState() {
-    eraseTargetFeedback();
-    m_currentEvent = null;
-    m_request = null;
-    m_target = null;
-  }
-
-  private List<EditPart> getDragSource() {
-    return m_viewer.getSelectedEditParts();
-  }
-
-  private List<Object> getModels(List<EditPart> editParts) {
-    List<Object> models = Lists.newArrayList();
-    for (EditPart editPart : editParts) {
-      models.add(editPart.getModel());
-    }
-    return models;
-  }
-
-  /**
-   * Selection {@link EditPart} by model's.
-   */
-  private void resetSelectionFromModels(List<Object> models) {
-    if (!models.isEmpty()) {
-      // prepare new EditPart's
-      List<EditPart> newEditParts = Lists.newArrayList();
-      for (Object model : models) {
-        EditPart newEditPart = m_viewer.getEditPartByModel(model);
-        newEditParts.add(newEditPart);
-      }
-      // set new selection
-      m_viewer.setSelection(newEditParts);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Request
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private ChangeBoundsRequest m_request;
-
-  /**
-   * Lazily creates and returns the request used when communicating with the target editpart.
-   */
-  private ChangeBoundsRequest getTargetRequest() {
-    if (m_request == null) {
-      m_request = new ChangeBoundsRequest(Request.REQ_MOVE);
-      m_request.setEditParts(getDragSource());
-    }
-    return m_request;
-  }
-
-  /**
-   * Sets the location of the request.
-   */
-  private void updateTargetRequest() {
-    ChangeBoundsRequest request = getTargetRequest();
-    request.setLocation(getDropLocation());
-  }
-
-  /**
-   * Sets the type of the request.
-   */
-  private void updateTargetRequestAfter() {
-    ChangeBoundsRequest request = getTargetRequest();
-    if (getDragSource().get(0).getParent() == m_target) {
-      request.setType(Request.REQ_MOVE);
-    } else {
-      request.setType(Request.REQ_ADD);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Target
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets the target {@link EditPart}.
-   */
-  private void setTargetEditPart(EditPart target) {
-    if (m_target != target) {
-      if (m_target != null) {
-        eraseTargetFeedback();
-      }
-      m_target = target;
-    }
-  }
-
-  /**
-   * Updates the target {@link EditPart}. The target is updated by using the target conditional and
-   * the target request.
-   */
-  private void updateTargetEditPart() {
-    Point location = getDropLocation();
-    EditPart editPart =
-        m_viewer.findTargetEditPart(
-            location.x,
-            location.y,
-            includeChildren(getDragSource()),
-            getTargetingConditional());
-    if (editPart != null) {
-      editPart = editPart.getTargetEditPart(getTargetRequest());
-    }
-    setTargetEditPart(editPart);
-  }
-
-  /**
-   * Returns the current x, y <b>*absolute*</b> position of the mouse cursor.
-   */
-  private Point getDropLocation() {
-    DropTarget target = (DropTarget) m_currentEvent.widget;
-    org.eclipse.swt.graphics.Point location =
-        target.getControl().toControl(m_currentEvent.x, m_currentEvent.y);
-    return new Point(location);
-  }
-
-  /**
-   * Returns the conditional object used for obtaining the target editpart from the viewer. By
-   * default, a conditional is returned that tests whether an editpart at the current mouse location
-   * indicates a target for the operation's request, using
-   * {@link EditPart#getTargetEditPart(Request)}. If <code>null</code> is returned, then the
-   * conditional fails, and the search continues.
-   */
-  private IConditional getTargetingConditional() {
-    return new IEditPartViewer.IConditional() {
-      @Override
-      public boolean evaluate(EditPart editPart) {
-        return editPart.getTargetEditPart(getTargetRequest()) != null;
-      }
-    };
-  }
-
-  private static List<EditPart> includeChildren(List<EditPart> parts) {
-    List<EditPart> result = Lists.newArrayList();
-    for (EditPart editPart : parts) {
-      result.add(editPart);
-      result.addAll(includeChildren(editPart.getChildren()));
-    }
-    return result;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Command
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Command m_command;
-
-  /**
-   * Execute the currently active command.
-   */
-  private void executeCommand() {
-    if (m_command != null) {
-      try {
-        m_viewer.getEditDomain().executeCommand(m_command);
-      } finally {
-        setCommand(null);
-      }
-    }
-  }
-
-  /**
-   * Sets the currently active command.
-   */
-  private void setCommand(Command command) {
-    m_command = command;
-    m_currentEvent.detail = m_command == null ? DND.DROP_NONE : DND.DROP_MOVE;
-  }
-
-  /**
-   * Updates currently command.
-   */
-  private void updateCommand() {
-    setCommand(getCommand());
-  }
-
-  /**
-   * Returns a new, updated command based on the tools current properties.
-   */
-  private Command getCommand() {
-    if (m_target != null) {
-      return m_target.getCommand(getTargetRequest());
-    }
-    return null;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Feedback
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private boolean m_isShowingFeedback;
-
-  /**
-   * Asks the target editpart to show target feedback and sets the target feedback flag.
-   */
-  private void showTargetFeedback() {
-    if (m_target != null) {
-      m_target.showTargetFeedback(getTargetRequest());
-    }
-    //
-    m_isShowingFeedback = true;
-  }
-
-  /**
-   * Asks the current target editpart to erase target feedback using the target request. If target
-   * feedback is not being shown, this method does nothing and returns. Otherwise, the target
-   * feedback flag is reset to false, and the target editpart is asked to erase target feedback.
-   * This methods should rarely be overridden.
-   */
-  private void eraseTargetFeedback() {
-    if (m_isShowingFeedback) {
-      m_isShowingFeedback = false;
-      //
-      if (m_target != null) {
-        m_target.eraseTargetFeedback(getTargetRequest());
-      }
-    }
-  }
+	private final IEditPartViewer m_viewer;
+	private DropTargetEvent m_currentEvent;
+	private EditPart m_target;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public TreeDropListener(IEditPartViewer viewer) {
+		m_viewer = viewer;
+		// add DND listener
+		DropTarget target = new DropTarget(m_viewer.getControl(), DND.DROP_MOVE);
+		target.setTransfer(new Transfer[]{TreeTransfer.INSTANCE});
+		target.addDropListener(this);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// DropTargetListener
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void dragEnter(DropTargetEvent event) {
+		m_currentEvent = event;
+	}
+
+	@Override
+	public void dropAccept(DropTargetEvent event) {
+		m_currentEvent = event;
+	}
+
+	@Override
+	public void dragLeave(DropTargetEvent event) {
+		m_currentEvent = event;
+		clearState();
+	}
+
+	@Override
+	public void dragOperationChanged(DropTargetEvent event) {
+		m_currentEvent = event;
+		eraseTargetFeedback();
+		updateTargetRequest();
+		updateTargetEditPart();
+		updateTargetRequestAfter();
+		updateCommand();
+	}
+
+	@Override
+	public void dragOver(DropTargetEvent event) {
+		boolean needUpdateFeedback =
+				!m_isShowingFeedback || event.x != m_currentEvent.x || event.y != m_currentEvent.y;
+		m_currentEvent = event;
+		updateTargetRequest();
+		updateTargetEditPart();
+		updateTargetRequestAfter();
+		updateCommand();
+		if (needUpdateFeedback) {
+			showTargetFeedback();
+		}
+		m_currentEvent.feedback =
+				DND.FEEDBACK_EXPAND | DND.FEEDBACK_SCROLL | getTargetRequest().getDNDFeedback();
+	}
+
+	@Override
+	public void drop(DropTargetEvent event) {
+		m_currentEvent = event;
+		List<Object> models = getModels(getDragSource());
+		eraseTargetFeedback();
+		updateTargetRequest();
+		updateTargetEditPart();
+		updateTargetRequestAfter();
+		try {
+			executeCommand();
+		} finally {
+			clearState();
+		}
+		resetSelectionFromModels(models);
+	}
+
+	private void clearState() {
+		eraseTargetFeedback();
+		m_currentEvent = null;
+		m_request = null;
+		m_target = null;
+	}
+
+	private List<EditPart> getDragSource() {
+		return m_viewer.getSelectedEditParts();
+	}
+
+	private List<Object> getModels(List<EditPart> editParts) {
+		List<Object> models = Lists.newArrayList();
+		for (EditPart editPart : editParts) {
+			models.add(editPart.getModel());
+		}
+		return models;
+	}
+
+	/**
+	 * Selection {@link EditPart} by model's.
+	 */
+	private void resetSelectionFromModels(List<Object> models) {
+		if (!models.isEmpty()) {
+			// prepare new EditPart's
+			List<EditPart> newEditParts = Lists.newArrayList();
+			for (Object model : models) {
+				EditPart newEditPart = m_viewer.getEditPartByModel(model);
+				newEditParts.add(newEditPart);
+			}
+			// set new selection
+			m_viewer.setSelection(newEditParts);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Request
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private ChangeBoundsRequest m_request;
+
+	/**
+	 * Lazily creates and returns the request used when communicating with the target editpart.
+	 */
+	private ChangeBoundsRequest getTargetRequest() {
+		if (m_request == null) {
+			m_request = new ChangeBoundsRequest(Request.REQ_MOVE);
+			m_request.setEditParts(getDragSource());
+		}
+		return m_request;
+	}
+
+	/**
+	 * Sets the location of the request.
+	 */
+	private void updateTargetRequest() {
+		ChangeBoundsRequest request = getTargetRequest();
+		request.setLocation(getDropLocation());
+	}
+
+	/**
+	 * Sets the type of the request.
+	 */
+	private void updateTargetRequestAfter() {
+		ChangeBoundsRequest request = getTargetRequest();
+		if (getDragSource().get(0).getParent() == m_target) {
+			request.setType(Request.REQ_MOVE);
+		} else {
+			request.setType(Request.REQ_ADD);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Target
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets the target {@link EditPart}.
+	 */
+	private void setTargetEditPart(EditPart target) {
+		if (m_target != target) {
+			if (m_target != null) {
+				eraseTargetFeedback();
+			}
+			m_target = target;
+		}
+	}
+
+	/**
+	 * Updates the target {@link EditPart}. The target is updated by using the target conditional and
+	 * the target request.
+	 */
+	private void updateTargetEditPart() {
+		Point location = getDropLocation();
+		EditPart editPart =
+				m_viewer.findTargetEditPart(
+						location.x,
+						location.y,
+						includeChildren(getDragSource()),
+						getTargetingConditional());
+		if (editPart != null) {
+			editPart = editPart.getTargetEditPart(getTargetRequest());
+		}
+		setTargetEditPart(editPart);
+	}
+
+	/**
+	 * Returns the current x, y <b>*absolute*</b> position of the mouse cursor.
+	 */
+	private Point getDropLocation() {
+		DropTarget target = (DropTarget) m_currentEvent.widget;
+		org.eclipse.swt.graphics.Point location =
+				target.getControl().toControl(m_currentEvent.x, m_currentEvent.y);
+		return new Point(location);
+	}
+
+	/**
+	 * Returns the conditional object used for obtaining the target editpart from the viewer. By
+	 * default, a conditional is returned that tests whether an editpart at the current mouse location
+	 * indicates a target for the operation's request, using
+	 * {@link EditPart#getTargetEditPart(Request)}. If <code>null</code> is returned, then the
+	 * conditional fails, and the search continues.
+	 */
+	private IConditional getTargetingConditional() {
+		return new IEditPartViewer.IConditional() {
+			@Override
+			public boolean evaluate(EditPart editPart) {
+				return editPart.getTargetEditPart(getTargetRequest()) != null;
+			}
+		};
+	}
+
+	private static List<EditPart> includeChildren(List<EditPart> parts) {
+		List<EditPart> result = Lists.newArrayList();
+		for (EditPart editPart : parts) {
+			result.add(editPart);
+			result.addAll(includeChildren(editPart.getChildren()));
+		}
+		return result;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Command
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Command m_command;
+
+	/**
+	 * Execute the currently active command.
+	 */
+	private void executeCommand() {
+		if (m_command != null) {
+			try {
+				m_viewer.getEditDomain().executeCommand(m_command);
+			} finally {
+				setCommand(null);
+			}
+		}
+	}
+
+	/**
+	 * Sets the currently active command.
+	 */
+	private void setCommand(Command command) {
+		m_command = command;
+		m_currentEvent.detail = m_command == null ? DND.DROP_NONE : DND.DROP_MOVE;
+	}
+
+	/**
+	 * Updates currently command.
+	 */
+	private void updateCommand() {
+		setCommand(getCommand());
+	}
+
+	/**
+	 * Returns a new, updated command based on the tools current properties.
+	 */
+	private Command getCommand() {
+		if (m_target != null) {
+			return m_target.getCommand(getTargetRequest());
+		}
+		return null;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Feedback
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private boolean m_isShowingFeedback;
+
+	/**
+	 * Asks the target editpart to show target feedback and sets the target feedback flag.
+	 */
+	private void showTargetFeedback() {
+		if (m_target != null) {
+			m_target.showTargetFeedback(getTargetRequest());
+		}
+		//
+		m_isShowingFeedback = true;
+	}
+
+	/**
+	 * Asks the current target editpart to erase target feedback using the target request. If target
+	 * feedback is not being shown, this method does nothing and returns. Otherwise, the target
+	 * feedback flag is reset to false, and the target editpart is asked to erase target feedback.
+	 * This methods should rarely be overridden.
+	 */
+	private void eraseTargetFeedback() {
+		if (m_isShowingFeedback) {
+			m_isShowingFeedback = false;
+			//
+			if (m_target != null) {
+				m_target.eraseTargetFeedback(getTargetRequest());
+			}
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/tree/dnd/TreeTransfer.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/tree/dnd/TreeTransfer.java
index 71db27d15..96a12e944 100644
--- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/tree/dnd/TreeTransfer.java
+++ b/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/tree/dnd/TreeTransfer.java
@@ -22,36 +22,36 @@
  * @coverafe gef.tree
  */
 public final class TreeTransfer extends ByteArrayTransfer {
-  public static final TreeTransfer INSTANCE = new TreeTransfer();
-  private static final String TYPE_NAME = "Tree GEF tranfser";
-  private static final int TYPE_ID = registerType(TYPE_NAME);
+	public static final TreeTransfer INSTANCE = new TreeTransfer();
+	private static final String TYPE_NAME = "Tree GEF tranfser";
+	private static final int TYPE_ID = registerType(TYPE_NAME);
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Transfer
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected int[] getTypeIds() {
-    return new int[]{TYPE_ID};
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Transfer
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected int[] getTypeIds() {
+		return new int[]{TYPE_ID};
+	}
 
-  @Override
-  protected String[] getTypeNames() {
-    return new String[]{TYPE_NAME};
-  }
+	@Override
+	protected String[] getTypeNames() {
+		return new String[]{TYPE_NAME};
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ByteArrayTransfer
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void javaToNative(Object object, TransferData transferData) {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ByteArrayTransfer
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void javaToNative(Object object, TransferData transferData) {
+	}
 
-  @Override
-  protected Object nativeToJava(TransferData transferData) {
-    return ArrayUtils.EMPTY_BYTE_ARRAY;
-  }
+	@Override
+	protected Object nativeToJava(TransferData transferData) {
+		return ArrayUtils.EMPTY_BYTE_ARRAY;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/tree/policies/AutoExpandEditPolicy.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/tree/policies/AutoExpandEditPolicy.java
index fdc44e52e..1678c28b9 100644
--- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/tree/policies/AutoExpandEditPolicy.java
+++ b/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/tree/policies/AutoExpandEditPolicy.java
@@ -30,36 +30,36 @@
  * @coverage gef.tree
  */
 public final class AutoExpandEditPolicy extends EditPolicy {
-  @Override
-  public boolean understandsRequest(Request request) {
-    return request.getType() == Request.REQ_CREATE || request.getType() == Request.REQ_PASTE;
-  }
+	@Override
+	public boolean understandsRequest(Request request) {
+		return request.getType() == Request.REQ_CREATE || request.getType() == Request.REQ_PASTE;
+	}
 
-  @Override
-  public EditPart getTargetEditPart(Request request) {
-    // prepare host widget
-    final TreeEditPart host = (TreeEditPart) getHost();
-    final TreeItem hostWidget = host.getWidget();
-    final Tree tree = hostWidget.getParent();
-    // prepare target widget
-    TreeItem targetWidget;
-    {
-      IDropRequest dropRequest = (IDropRequest) request;
-      Point location = dropRequest.getLocation();
-      targetWidget = tree.getItem(location.getSWTPoint());
-    }
-    // if mouse cursor is above our "host", expand it
-    if (targetWidget == hostWidget && !hostWidget.getExpanded() && hostWidget.getItemCount() != 0) {
-      tree.getShell().getDisplay().asyncExec(new Runnable() {
-        @Override
-        public void run() {
-          if (!hostWidget.isDisposed()) {
-            hostWidget.setExpanded(true);
-          }
-        }
-      });
-    }
-    // we don't perform any real checks
-    return null;
-  }
+	@Override
+	public EditPart getTargetEditPart(Request request) {
+		// prepare host widget
+		final TreeEditPart host = (TreeEditPart) getHost();
+		final TreeItem hostWidget = host.getWidget();
+		final Tree tree = hostWidget.getParent();
+		// prepare target widget
+		TreeItem targetWidget;
+		{
+			IDropRequest dropRequest = (IDropRequest) request;
+			Point location = dropRequest.getLocation();
+			targetWidget = tree.getItem(location.getSWTPoint());
+		}
+		// if mouse cursor is above our "host", expand it
+		if (targetWidget == hostWidget && !hostWidget.getExpanded() && hostWidget.getItemCount() != 0) {
+			tree.getShell().getDisplay().asyncExec(new Runnable() {
+				@Override
+				public void run() {
+					if (!hostWidget.isDisposed()) {
+						hostWidget.setExpanded(true);
+					}
+				}
+			});
+		}
+		// we don't perform any real checks
+		return null;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/tree/policies/SelectionEditPolicy.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/tree/policies/SelectionEditPolicy.java
index 665a33a86..3e7a08cec 100644
--- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/tree/policies/SelectionEditPolicy.java
+++ b/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/tree/policies/SelectionEditPolicy.java
@@ -26,13 +26,13 @@
  * @coverage gef.tree
  */
 public final class SelectionEditPolicy extends EditPolicy {
-  @Override
-  public boolean understandsRequest(Request request) {
-    return request.getType() == Request.REQ_SELECTION;
-  }
+	@Override
+	public boolean understandsRequest(Request request) {
+		return request.getType() == Request.REQ_SELECTION;
+	}
 
-  @Override
-  public EditPart getTargetEditPart(Request request) {
-    return getHost();
-  }
+	@Override
+	public EditPart getTargetEditPart(Request request) {
+		return getHost();
+	}
 }
diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/tree/tools/DoubleClickEditPartTracker.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/tree/tools/DoubleClickEditPartTracker.java
index 2351477eb..9e353ace3 100644
--- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/tree/tools/DoubleClickEditPartTracker.java
+++ b/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/tree/tools/DoubleClickEditPartTracker.java
@@ -24,28 +24,28 @@
  * @coverage gef.tree
  */
 public class DoubleClickEditPartTracker extends Tool {
-  private final EditPart m_sourceEditPart;
+	private final EditPart m_sourceEditPart;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DoubleClickEditPartTracker(EditPart sourceEditPart) {
-    m_sourceEditPart = sourceEditPart;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DoubleClickEditPartTracker(EditPart sourceEditPart) {
+		m_sourceEditPart = sourceEditPart;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // High-Level handle MouseEvent
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void handleDoubleClick(int button) {
-    if (button == 1) {
-      SelectionRequest request = new SelectionRequest(Request.REQ_OPEN);
-      request.setLocation(getLocation());
-      m_sourceEditPart.performRequest(request);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// High-Level handle MouseEvent
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void handleDoubleClick(int button) {
+		if (button == 1) {
+			SelectionRequest request = new SelectionRequest(Request.REQ_OPEN);
+			request.setLocation(getLocation());
+			m_sourceEditPart.performRequest(request);
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/branding/AbstractBrandingDescription.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/branding/AbstractBrandingDescription.java
index cc182dd64..6ef464df8 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/branding/AbstractBrandingDescription.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/branding/AbstractBrandingDescription.java
@@ -27,60 +27,60 @@
  * @coverage core.util
  */
 public abstract class AbstractBrandingDescription implements IBrandingDescription {
-  private final String m_productName;
-  private final IBrandingSupportInfo m_supportInfo;
+	private final String m_productName;
+	private final IBrandingSupportInfo m_supportInfo;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected AbstractBrandingDescription(String productName, IBrandingSupportInfo supportInfo) {
-    m_productName = productName;
-    m_supportInfo = supportInfo;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected AbstractBrandingDescription(String productName, IBrandingSupportInfo supportInfo) {
+		m_productName = productName;
+		m_supportInfo = supportInfo;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IBrandingDescription
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getProductName() {
-    return m_productName;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IBrandingDescription
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getProductName() {
+		return m_productName;
+	}
 
-  @Override
-  public IBrandingSupportInfo getSupportInfo() {
-    return m_supportInfo;
-  }
+	@Override
+	public IBrandingSupportInfo getSupportInfo() {
+		return m_supportInfo;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Painting
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * If not overridden, then this is the default behavior.
-   */
-  @Override
-  public void paintBrandingOnCanvas(Rectangle clientArea, Graphics graphics) {
-    //String text = getProductName();
-    String version = PluginUtilities.getVersionString("org.eclipse.wb.core");
-    paintBrandingOnCanvas_grayText(clientArea, graphics, /*text + "\n" +*/version);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Painting
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * If not overridden, then this is the default behavior.
+	 */
+	@Override
+	public void paintBrandingOnCanvas(Rectangle clientArea, Graphics graphics) {
+		//String text = getProductName();
+		String version = PluginUtilities.getVersionString("org.eclipse.wb.core");
+		paintBrandingOnCanvas_grayText(clientArea, graphics, /*text + "\n" +*/version);
+	}
 
-  /**
-   * Utility method for subclasses that just want the paintBrandingOnCanvas override to just paint
-   * gray text.
-   */
-  protected final void paintBrandingOnCanvas_grayText(Rectangle clientArea,
-      Graphics graphics,
-      String text) {
-    Dimension extent = graphics.getTextExtent(text);
-    graphics.setForegroundColor(IColorConstants.lightGray);
-    int x = clientArea.right() - extent.width - 2;
-    int y = clientArea.bottom() - extent.height - 0;
-    graphics.drawText(text, x, y);
-  }
+	/**
+	 * Utility method for subclasses that just want the paintBrandingOnCanvas override to just paint
+	 * gray text.
+	 */
+	protected final void paintBrandingOnCanvas_grayText(Rectangle clientArea,
+			Graphics graphics,
+			String text) {
+		Dimension extent = graphics.getTextExtent(text);
+		graphics.setForegroundColor(IColorConstants.lightGray);
+		int x = clientArea.right() - extent.width - 2;
+		int y = clientArea.bottom() - extent.height - 0;
+		graphics.drawText(text, x, y);
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/branding/BrandingUtils.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/branding/BrandingUtils.java
index 5be744a04..38ffe53b0 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/branding/BrandingUtils.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/branding/BrandingUtils.java
@@ -21,19 +21,19 @@
  * @coverage core.util
  */
 public final class BrandingUtils {
-  /**
-   * @return the {@link IBrandingDescription} contributed by product provider, or default one for
-   *         WindowBuilder project.
-   */
-  public static IBrandingDescription getBranding() {
-    List<IBrandingDescription> instances =
-        ExternalFactoriesHelper.getElementsInstances(
-            IBrandingDescription.class,
-            "org.eclipse.wb.core.branding",
-            "branding");
-    if (instances.size() != 0) {
-      return instances.get(0);
-    }
-    return DefaultBrandingDescription.INSTANCE;
-  }
+	/**
+	 * @return the {@link IBrandingDescription} contributed by product provider, or default one for
+	 *         WindowBuilder project.
+	 */
+	public static IBrandingDescription getBranding() {
+		List<IBrandingDescription> instances =
+				ExternalFactoriesHelper.getElementsInstances(
+						IBrandingDescription.class,
+						"org.eclipse.wb.core.branding",
+						"branding");
+		if (instances.size() != 0) {
+			return instances.get(0);
+		}
+		return DefaultBrandingDescription.INSTANCE;
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/branding/DefaultBrandingDescription.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/branding/DefaultBrandingDescription.java
index 5e5150980..f86ee81dc 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/branding/DefaultBrandingDescription.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/branding/DefaultBrandingDescription.java
@@ -19,30 +19,30 @@
  * @coverage core.util
  */
 final class DefaultBrandingDescription extends AbstractBrandingDescription {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Support info
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final IBrandingSupportInfo SUPPORT_INFO = new IBrandingSupportInfo() {
-    @Override
-    public String getBugtrackingUrl() {
-      return "https://github.com/eclipse-windowbuilder/windowbuilder/issues";
-    }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Support info
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final IBrandingSupportInfo SUPPORT_INFO = new IBrandingSupportInfo() {
+		@Override
+		public String getBugtrackingUrl() {
+			return "https://github.com/eclipse-windowbuilder/windowbuilder/issues";
+		}
 
-    @Override
-    public String getForumUrl() {
-      return "https://github.com/eclipse-windowbuilder/windowbuilder/discussions";
-    }
-  };
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static IBrandingDescription INSTANCE = new DefaultBrandingDescription();
+		@Override
+		public String getForumUrl() {
+			return "https://github.com/eclipse-windowbuilder/windowbuilder/discussions";
+		}
+	};
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static IBrandingDescription INSTANCE = new DefaultBrandingDescription();
 
-  private DefaultBrandingDescription() {
-    super("WindowBuilder", SUPPORT_INFO);
-  }
+	private DefaultBrandingDescription() {
+		super("WindowBuilder", SUPPORT_INFO);
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/branding/IBrandingDescription.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/branding/IBrandingDescription.java
index 9a21cd2c5..da1c27f92 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/branding/IBrandingDescription.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/branding/IBrandingDescription.java
@@ -22,18 +22,18 @@
  * @coverage core.util
  */
 public interface IBrandingDescription {
-  /**
-   * @return the product name.
-   */
-  String getProductName();
+	/**
+	 * @return the product name.
+	 */
+	String getProductName();
 
-  /**
-   * @return the url for bug-tracking system and discussion forum.
-   */
-  IBrandingSupportInfo getSupportInfo();
+	/**
+	 * @return the url for bug-tracking system and discussion forum.
+	 */
+	IBrandingSupportInfo getSupportInfo();
 
-  /**
-   * Called by {@link DesignComposite} to paint all product branding onto the canvas.
-   */
-  void paintBrandingOnCanvas(Rectangle clientArea, Graphics graphics);
+	/**
+	 * Called by {@link DesignComposite} to paint all product branding onto the canvas.
+	 */
+	void paintBrandingOnCanvas(Rectangle clientArea, Graphics graphics);
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/branding/IBrandingSupportInfo.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/branding/IBrandingSupportInfo.java
index 6cb24b674..2feec473c 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/branding/IBrandingSupportInfo.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/branding/IBrandingSupportInfo.java
@@ -17,13 +17,13 @@
  * @coverage core.util
  */
 public interface IBrandingSupportInfo {
-  /**
-   * @return the url to bug-tracking system to search and/or submit the issue.
-   */
-  String getBugtrackingUrl();
+	/**
+	 * @return the url to bug-tracking system to search and/or submit the issue.
+	 */
+	String getBugtrackingUrl();
 
-  /**
-   * @return the url to discussion forum, mailing list or any other discussion platform.
-   */
-  String getForumUrl();
+	/**
+	 * @return the url to discussion forum, mailing list or any other discussion platform.
+	 */
+	String getForumUrl();
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/BrowserComposite.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/BrowserComposite.java
index 5299aa88d..954a267bf 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/BrowserComposite.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/BrowserComposite.java
@@ -27,62 +27,62 @@
  * @coverage core.controls
  */
 public class BrowserComposite extends Composite {
-  private Browser m_browser;
-  private Text m_text;
+	private Browser m_browser;
+	private Text m_text;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public BrowserComposite(Composite parent, int style) {
-    super(parent, style);
-    setLayout(new FillLayout());
-    if (browserAvailable(this)) {
-      m_browser = new Browser(this, SWT.NONE);
-    } else {
-      m_text = new Text(this, SWT.READ_ONLY | SWT.WRAP | SWT.V_SCROLL);
-      m_text.setBackground(IColorConstants.button);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public BrowserComposite(Composite parent, int style) {
+		super(parent, style);
+		setLayout(new FillLayout());
+		if (browserAvailable(this)) {
+			m_browser = new Browser(this, SWT.NONE);
+		} else {
+			m_text = new Text(this, SWT.READ_ONLY | SWT.WRAP | SWT.V_SCROLL);
+			m_text.setBackground(IColorConstants.button);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void setText(String text) {
-    if (m_browser != null) {
-      m_browser.setText(text);
-    } else {
-      m_text.setText(text);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void setText(String text) {
+		if (m_browser != null) {
+			m_browser.setText(text);
+		} else {
+			m_text.setText(text);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Check availability
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static boolean m_initDone;
-  private static boolean m_available;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Check availability
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static boolean m_initDone;
+	private static boolean m_available;
 
-  /**
-   * @return <code>true</code> if the Browser widget is available to display html-based text.
-   */
-  public static boolean browserAvailable(Composite parent) {
-    if (!m_initDone) {
-      Browser browser = null;
-      try {
-        browser = new Browser(parent, SWT.NONE);
-        m_available = true;
-        browser.dispose();
-      } catch (Throwable e) {
-        // don't care
-      }
-      // don't try again
-      m_initDone = true;
-    }
-    return m_available;
-  }
+	/**
+	 * @return <code>true</code> if the Browser widget is available to display html-based text.
+	 */
+	public static boolean browserAvailable(Composite parent) {
+		if (!m_initDone) {
+			Browser browser = null;
+			try {
+				browser = new Browser(parent, SWT.NONE);
+				m_available = true;
+				browser.dispose();
+			} catch (Throwable e) {
+				// don't care
+			}
+			// don't try again
+			m_initDone = true;
+		}
+		return m_available;
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/CCombo3.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/CCombo3.java
index 28b62f049..13f33b4af 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/CCombo3.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/CCombo3.java
@@ -38,479 +38,479 @@
  * @coverage core.control
  */
 public class CCombo3 extends Composite {
-  private final long m_createTime = System.currentTimeMillis();
-  private final CImageLabel m_text;
-  private final Button m_arrow;
-  private final Shell m_popup;
-  private final Table m_table;
-  private boolean m_fullDropdownTableSize = false;
+	private final long m_createTime = System.currentTimeMillis();
+	private final CImageLabel m_text;
+	private final Button m_arrow;
+	private final Shell m_popup;
+	private final Table m_table;
+	private boolean m_fullDropdownTableSize = false;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CCombo3(Composite parent, int style) {
-    super(parent, style);
-    addEvents(this, m_comboListener, new int[]{SWT.Dispose, SWT.Move, SWT.Resize});
-    // create label
-    {
-      m_text = new CImageLabel(this, SWT.NONE);
-      new DefaultControlActionsManager(m_text);
-      addEvents(m_text, m_textListener, new int[]{
-          SWT.KeyDown,
-          SWT.KeyUp,
-          SWT.MouseDown,
-          SWT.MouseUp,
-          SWT.MouseMove,
-          SWT.MouseDoubleClick,
-          SWT.Traverse,
-          SWT.FocusIn,
-          SWT.FocusOut});
-    }
-    // create arrow
-    {
-      m_arrow = new Button(this, SWT.ARROW | SWT.DOWN);
-      addEvents(m_arrow, m_arrowListener, new int[]{SWT.Selection, SWT.FocusIn, SWT.FocusOut});
-    }
-    // create popup Shell
-    {
-      Shell shell = getShell();
-      m_popup = new Shell(shell, SWT.NONE);
-      m_popup.setLayout(new FillLayout());
-    }
-    // create table for items
-    {
-      m_table = new Table(m_popup, SWT.FULL_SELECTION);
-      addEvents(m_table, m_tableListener, new int[]{SWT.Selection, SWT.FocusIn, SWT.FocusOut});
-      //
-      new TableColumn(m_table, SWT.NONE);
-    }
-    // Focus tracking filter
-    {
-      final Listener filter = new Listener() {
-        private boolean hasFocus;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CCombo3(Composite parent, int style) {
+		super(parent, style);
+		addEvents(this, m_comboListener, new int[]{SWT.Dispose, SWT.Move, SWT.Resize});
+		// create label
+		{
+			m_text = new CImageLabel(this, SWT.NONE);
+			new DefaultControlActionsManager(m_text);
+			addEvents(m_text, m_textListener, new int[]{
+					SWT.KeyDown,
+					SWT.KeyUp,
+					SWT.MouseDown,
+					SWT.MouseUp,
+					SWT.MouseMove,
+					SWT.MouseDoubleClick,
+					SWT.Traverse,
+					SWT.FocusIn,
+					SWT.FocusOut});
+		}
+		// create arrow
+		{
+			m_arrow = new Button(this, SWT.ARROW | SWT.DOWN);
+			addEvents(m_arrow, m_arrowListener, new int[]{SWT.Selection, SWT.FocusIn, SWT.FocusOut});
+		}
+		// create popup Shell
+		{
+			Shell shell = getShell();
+			m_popup = new Shell(shell, SWT.NONE);
+			m_popup.setLayout(new FillLayout());
+		}
+		// create table for items
+		{
+			m_table = new Table(m_popup, SWT.FULL_SELECTION);
+			addEvents(m_table, m_tableListener, new int[]{SWT.Selection, SWT.FocusIn, SWT.FocusOut});
+			//
+			new TableColumn(m_table, SWT.NONE);
+		}
+		// Focus tracking filter
+		{
+			final Listener filter = new Listener() {
+				private boolean hasFocus;
 
-        @Override
-        public void handleEvent(Event event) {
-          boolean old_hasFocus = hasFocus;
-          hasFocus =
-              m_text.isFocusControl()
-                  || m_arrow.isFocusControl()
-                  || m_popup.isFocusControl()
-                  || m_table.isFocusControl();
-          // configure colors
-          if (hasFocus) {
-            m_text.setBackground(IColorConstants.listSelection);
-            m_text.setForeground(IColorConstants.listSelectionText);
-          } else {
-            m_text.setBackground(IColorConstants.listBackground);
-            m_text.setForeground(IColorConstants.listForeground);
-          }
-          // send FocusOut event
-          if (old_hasFocus && !hasFocus) {
-            Event e = new Event();
-            e.widget = CCombo3.this;
-            e.time = event.time;
-            notifyListeners(SWT.FocusOut, e);
-          }
-        }
-      };
-      getDisplay().addFilter(SWT.FocusIn, filter);
-      addListener(SWT.Dispose, new Listener() {
-        @Override
-        public void handleEvent(Event event) {
-          getDisplay().removeFilter(SWT.FocusIn, filter);
-        }
-      });
-    }
-  }
+				@Override
+				public void handleEvent(Event event) {
+					boolean old_hasFocus = hasFocus;
+					hasFocus =
+							m_text.isFocusControl()
+							|| m_arrow.isFocusControl()
+							|| m_popup.isFocusControl()
+							|| m_table.isFocusControl();
+					// configure colors
+					if (hasFocus) {
+						m_text.setBackground(IColorConstants.listSelection);
+						m_text.setForeground(IColorConstants.listSelectionText);
+					} else {
+						m_text.setBackground(IColorConstants.listBackground);
+						m_text.setForeground(IColorConstants.listForeground);
+					}
+					// send FocusOut event
+					if (old_hasFocus && !hasFocus) {
+						Event e = new Event();
+						e.widget = CCombo3.this;
+						e.time = event.time;
+						notifyListeners(SWT.FocusOut, e);
+					}
+				}
+			};
+			getDisplay().addFilter(SWT.FocusIn, filter);
+			addListener(SWT.Dispose, new Listener() {
+				@Override
+				public void handleEvent(Event event) {
+					getDisplay().removeFilter(SWT.FocusIn, filter);
+				}
+			});
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Events handling
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final Listener m_comboListener = new Listener() {
-    @Override
-    public void handleEvent(Event event) {
-      switch (event.type) {
-        case SWT.Dispose :
-          if (!m_popup.isDisposed()) {
-            m_popup.dispose();
-          }
-          break;
-        case SWT.Move :
-          doDropDown(false);
-          break;
-        case SWT.Resize :
-          doResize();
-          break;
-      }
-    }
-  };
-  private final Listener m_textListener = new Listener() {
-    @Override
-    public void handleEvent(final Event event) {
-      switch (event.type) {
-        case SWT.MouseDown :
-          if (System.currentTimeMillis() - m_createTime < 400) {
-            // send "logical" double click for case when we just activated combo
-            // and almost right away click second time (but first time on editor)
-            event.detail = -1;
-            notifyListeners(SWT.MouseDoubleClick, event);
-            // when we use "auto drop on editor activation" option, this click is
-            // is "logically" second one, so it should close combo
-            if (!isDisposed()) {
-              doDropDown(false);
-            }
-          } else {
-            m_text.setCapture(true);
-            doDropDown(!isDropped());
-          }
-          break;
-        case SWT.MouseUp : {
-          m_text.setCapture(false);
-          TableItem item = getItemUnderCursor(event);
-          if (item != null) {
-            doDropDown(false);
-            sendSelectionEvent(event);
-          }
-          break;
-        }
-        case SWT.MouseDoubleClick :
-          // prevent resending MouseDoubleClick that we sent on fast MouseDown
-          if (event.detail != -1) {
-            notifyListeners(SWT.MouseDoubleClick, event);
-          }
-          break;
-        case SWT.MouseMove : {
-          TableItem item = getItemUnderCursor(event);
-          if (item != null) {
-            m_table.setSelection(new TableItem[]{item});
-          }
-          break;
-        }
-        case SWT.KeyDown : {
-          // check for keyboard navigation and selection
-          {
-            int selectionIndex = m_table.getSelectionIndex();
-            if (event.keyCode == SWT.ARROW_UP) {
-              selectionIndex--;
-              if (selectionIndex < 0) {
-                selectionIndex = m_table.getItemCount() - 1;
-              }
-              m_table.setSelection(selectionIndex);
-              return;
-            } else if (event.keyCode == SWT.ARROW_DOWN) {
-              m_table.setSelection((selectionIndex + 1) % m_table.getItemCount());
-              return;
-            } else if (event.character == SWT.CR || event.character == ' ') {
-              sendSelectionEvent(event);
-              return;
-            }
-          }
-          // be default just resend event
-          resendKeyEvent(event);
-          break;
-        }
-        case SWT.KeyUp :
-          resendKeyEvent(event);
-          break;
-      }
-    }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Events handling
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final Listener m_comboListener = new Listener() {
+		@Override
+		public void handleEvent(Event event) {
+			switch (event.type) {
+			case SWT.Dispose :
+				if (!m_popup.isDisposed()) {
+					m_popup.dispose();
+				}
+				break;
+			case SWT.Move :
+				doDropDown(false);
+				break;
+			case SWT.Resize :
+				doResize();
+				break;
+			}
+		}
+	};
+	private final Listener m_textListener = new Listener() {
+		@Override
+		public void handleEvent(final Event event) {
+			switch (event.type) {
+			case SWT.MouseDown :
+				if (System.currentTimeMillis() - m_createTime < 400) {
+					// send "logical" double click for case when we just activated combo
+					// and almost right away click second time (but first time on editor)
+					event.detail = -1;
+					notifyListeners(SWT.MouseDoubleClick, event);
+					// when we use "auto drop on editor activation" option, this click is
+					// is "logically" second one, so it should close combo
+					if (!isDisposed()) {
+						doDropDown(false);
+					}
+				} else {
+					m_text.setCapture(true);
+					doDropDown(!isDropped());
+				}
+				break;
+			case SWT.MouseUp : {
+				m_text.setCapture(false);
+				TableItem item = getItemUnderCursor(event);
+				if (item != null) {
+					doDropDown(false);
+					sendSelectionEvent(event);
+				}
+				break;
+			}
+			case SWT.MouseDoubleClick :
+				// prevent resending MouseDoubleClick that we sent on fast MouseDown
+				if (event.detail != -1) {
+					notifyListeners(SWT.MouseDoubleClick, event);
+				}
+				break;
+			case SWT.MouseMove : {
+				TableItem item = getItemUnderCursor(event);
+				if (item != null) {
+					m_table.setSelection(new TableItem[]{item});
+				}
+				break;
+			}
+			case SWT.KeyDown : {
+				// check for keyboard navigation and selection
+				{
+					int selectionIndex = m_table.getSelectionIndex();
+					if (event.keyCode == SWT.ARROW_UP) {
+						selectionIndex--;
+						if (selectionIndex < 0) {
+							selectionIndex = m_table.getItemCount() - 1;
+						}
+						m_table.setSelection(selectionIndex);
+						return;
+					} else if (event.keyCode == SWT.ARROW_DOWN) {
+						m_table.setSelection((selectionIndex + 1) % m_table.getItemCount());
+						return;
+					} else if (event.character == SWT.CR || event.character == ' ') {
+						sendSelectionEvent(event);
+						return;
+					}
+				}
+				// be default just resend event
+				resendKeyEvent(event);
+				break;
+			}
+			case SWT.KeyUp :
+				resendKeyEvent(event);
+				break;
+			}
+		}
 
-    private TableItem getItemUnderCursor(Event event) {
-      Point displayLocation = m_text.toDisplay(new Point(event.x, event.y));
-      Point tableLocation = m_table.toControl(displayLocation);
-      return m_table.getItem(tableLocation);
-    }
-  };
-  private final Listener m_arrowListener = new Listener() {
-    @Override
-    public void handleEvent(Event event) {
-      switch (event.type) {
-      /*case SWT.FocusIn : {
+		private TableItem getItemUnderCursor(Event event) {
+			Point displayLocation = m_text.toDisplay(new Point(event.x, event.y));
+			Point tableLocation = m_table.toControl(displayLocation);
+			return m_table.getItem(tableLocation);
+		}
+	};
+	private final Listener m_arrowListener = new Listener() {
+		@Override
+		public void handleEvent(Event event) {
+			switch (event.type) {
+			/*case SWT.FocusIn : {
        resendFocusEvent(event);
        break;
        }*/
-        case SWT.Selection : {
-          doDropDown(!isDropped());
-          break;
-        }
-      }
-    }
-  };
-  private final Listener m_tableListener = new Listener() {
-    @Override
-    public void handleEvent(Event event) {
-      switch (event.type) {
-        case SWT.Selection : {
-          doDropDown(false);
-          // show selected item in text
-          {
-            int index = m_table.getSelectionIndex();
-            select(index);
-          }
-          // send selection event
-          sendSelectionEvent(event);
-          break;
-        }
-      }
-    }
-  };
+			case SWT.Selection : {
+				doDropDown(!isDropped());
+				break;
+			}
+			}
+		}
+	};
+	private final Listener m_tableListener = new Listener() {
+		@Override
+		public void handleEvent(Event event) {
+			switch (event.type) {
+			case SWT.Selection : {
+				doDropDown(false);
+				// show selected item in text
+				{
+					int index = m_table.getSelectionIndex();
+					select(index);
+				}
+				// send selection event
+				sendSelectionEvent(event);
+				break;
+			}
+			}
+		}
+	};
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Events utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sends selection event.
-   */
-  private void sendSelectionEvent(Event event) {
-    Event e = new Event();
-    e.time = event.time;
-    e.stateMask = event.stateMask;
-    notifyListeners(SWT.Selection, e);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Events utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sends selection event.
+	 */
+	private void sendSelectionEvent(Event event) {
+		Event e = new Event();
+		e.time = event.time;
+		e.stateMask = event.stateMask;
+		notifyListeners(SWT.Selection, e);
+	}
 
-  /**
-   * Resends KeyDown/KeyUp events.
-   */
-  private void resendKeyEvent(Event event) {
-    Event e = new Event();
-    e.time = event.time;
-    e.character = event.character;
-    e.keyCode = event.keyCode;
-    e.stateMask = event.stateMask;
-    notifyListeners(event.type, e);
-  }
+	/**
+	 * Resends KeyDown/KeyUp events.
+	 */
+	private void resendKeyEvent(Event event) {
+		Event e = new Event();
+		e.time = event.time;
+		e.character = event.character;
+		e.keyCode = event.keyCode;
+		e.stateMask = event.stateMask;
+		notifyListeners(event.type, e);
+	}
 
-  /**
-   * Adds given listener as handler for events in given widget.
-   */
-  private void addEvents(Widget widget, Listener listener, int[] events) {
-    for (int i = 0; i < events.length; i++) {
-      widget.addListener(events[i], listener);
-    }
-  }
+	/**
+	 * Adds given listener as handler for events in given widget.
+	 */
+	private void addEvents(Widget widget, Listener listener, int[] events) {
+		for (int i = 0; i < events.length; i++) {
+			widget.addListener(events[i], listener);
+		}
+	}
 
-  /**
-   * Adds the listener to receive events.
-   */
-  public void addSelectionListener(SelectionListener listener) {
-    checkWidget();
-    if (listener == null) {
-      SWT.error(SWT.ERROR_NULL_ARGUMENT);
-    }
-    TypedListener typedListener = new TypedListener(listener);
-    addListener(SWT.Selection, typedListener);
-    addListener(SWT.DefaultSelection, typedListener);
-  }
+	/**
+	 * Adds the listener to receive events.
+	 */
+	public void addSelectionListener(SelectionListener listener) {
+		checkWidget();
+		if (listener == null) {
+			SWT.error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		TypedListener typedListener = new TypedListener(listener);
+		addListener(SWT.Selection, typedListener);
+		addListener(SWT.DefaultSelection, typedListener);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Activity
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets drop state of combo.
-   */
-  public void doDropDown(boolean drop) {
-    // check, may be we already in this drop state
-    if (drop == isDropped()) {
-      return;
-    }
-    // close combo
-    if (!drop) {
-      m_popup.setVisible(false);
-      m_text.setFocus();
-      return;
-    }
-    // open combo
-    {
-      // prepare popup location
-      Point comboSize = getSize();
-      Point popupLocation;
-      {
-        //popupLocation = getParent().toDisplay(getLocation());
-        popupLocation = toDisplay(new Point(0, 0));
-        popupLocation.y += comboSize.y;
-      }
-      // calculate and set popup location
-      {
-        TableColumn tableColumn = m_table.getColumn(0);
-        // pack everything
-        tableColumn.pack();
-        m_table.pack();
-        m_popup.pack();
-        // calculate bounds
-        Rectangle tableBounds = m_table.getBounds();
-        tableBounds.height = Math.min(tableBounds.height, m_table.getItemHeight() * 20); // max 20 items without scrolling
-        m_table.setBounds(tableBounds);
-        // calculate size
-        int remainingDisplayHeight = getDisplay().getClientArea().height - popupLocation.y - 10;
-        int preferredHeight = Math.min(tableBounds.height, remainingDisplayHeight);
-        int remainingDisplayWidth = getDisplay().getClientArea().width - popupLocation.x - 5;
-        int preferredWidth =
-            isFullDropdownTableWidth()
-                ? Math.min(tableBounds.width, remainingDisplayWidth)
-                : comboSize.x;
-        // set popup bounds calculated as computeTrim basing on combo width and table height paying attention on remaining display space
-        Rectangle popupBounds =
-            m_popup.computeTrim(popupLocation.x, popupLocation.y, preferredWidth, preferredHeight);
-        m_popup.setBounds(popupBounds);
-        // adjust column size
-        tableColumn.setWidth(m_table.getClientArea().width);
-      }
-      m_popup.setVisible(true);
-      // scroll to selection if needed
-      m_table.showSelection();
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Activity
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets drop state of combo.
+	 */
+	public void doDropDown(boolean drop) {
+		// check, may be we already in this drop state
+		if (drop == isDropped()) {
+			return;
+		}
+		// close combo
+		if (!drop) {
+			m_popup.setVisible(false);
+			m_text.setFocus();
+			return;
+		}
+		// open combo
+		{
+			// prepare popup location
+			Point comboSize = getSize();
+			Point popupLocation;
+			{
+				//popupLocation = getParent().toDisplay(getLocation());
+				popupLocation = toDisplay(new Point(0, 0));
+				popupLocation.y += comboSize.y;
+			}
+			// calculate and set popup location
+			{
+				TableColumn tableColumn = m_table.getColumn(0);
+				// pack everything
+				tableColumn.pack();
+				m_table.pack();
+				m_popup.pack();
+				// calculate bounds
+				Rectangle tableBounds = m_table.getBounds();
+				tableBounds.height = Math.min(tableBounds.height, m_table.getItemHeight() * 20); // max 20 items without scrolling
+				m_table.setBounds(tableBounds);
+				// calculate size
+				int remainingDisplayHeight = getDisplay().getClientArea().height - popupLocation.y - 10;
+				int preferredHeight = Math.min(tableBounds.height, remainingDisplayHeight);
+				int remainingDisplayWidth = getDisplay().getClientArea().width - popupLocation.x - 5;
+				int preferredWidth =
+						isFullDropdownTableWidth()
+						? Math.min(tableBounds.width, remainingDisplayWidth)
+								: comboSize.x;
+				// set popup bounds calculated as computeTrim basing on combo width and table height paying attention on remaining display space
+				Rectangle popupBounds =
+						m_popup.computeTrim(popupLocation.x, popupLocation.y, preferredWidth, preferredHeight);
+				m_popup.setBounds(popupBounds);
+				// adjust column size
+				tableColumn.setWidth(m_table.getClientArea().width);
+			}
+			m_popup.setVisible(true);
+			// scroll to selection if needed
+			m_table.showSelection();
+		}
+	}
 
-  /**
-   * Initiates "press-hold-drag" sequence.
-   */
-  public void startDrag() {
-    m_text.setCapture(true);
-  }
+	/**
+	 * Initiates "press-hold-drag" sequence.
+	 */
+	public void startDrag() {
+		m_text.setCapture(true);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void setFullDropdownTableWidth(boolean freeTableSize) {
-    m_fullDropdownTableSize = freeTableSize;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void setFullDropdownTableWidth(boolean freeTableSize) {
+		m_fullDropdownTableSize = freeTableSize;
+	}
 
-  public boolean isFullDropdownTableWidth() {
-    return m_fullDropdownTableSize;
-  }
+	public boolean isFullDropdownTableWidth() {
+		return m_fullDropdownTableSize;
+	}
 
-  public boolean isDropped() {
-    return m_popup.isVisible();
-  }
+	public boolean isDropped() {
+		return m_popup.isVisible();
+	}
 
-  public void setQuickSearch(boolean value) {
-    // TODO
-  }
+	public void setQuickSearch(boolean value) {
+		// TODO
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access: items
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Removes all items.
-   */
-  public void removeAll() {
-    TableItem[] items = m_table.getItems();
-    for (int index = 0; index < items.length; index++) {
-      TableItem item = items[index];
-      item.dispose();
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access: items
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Removes all items.
+	 */
+	public void removeAll() {
+		TableItem[] items = m_table.getItems();
+		for (int index = 0; index < items.length; index++) {
+			TableItem item = items[index];
+			item.dispose();
+		}
+	}
 
-  /**
-   * Adds new item with given text.
-   */
-  public void add(String text) {
-    add(text, null);
-  }
+	/**
+	 * Adds new item with given text.
+	 */
+	public void add(String text) {
+		add(text, null);
+	}
 
-  /**
-   * Adds new item with given text and image.
-   */
-  public void add(String text, Image image) {
-    checkWidget();
-    TableItem item = new TableItem(m_table, SWT.NONE);
-    item.setText(text);
-    item.setImage(image);
-  }
+	/**
+	 * Adds new item with given text and image.
+	 */
+	public void add(String text, Image image) {
+		checkWidget();
+		TableItem item = new TableItem(m_table, SWT.NONE);
+		item.setText(text);
+		item.setImage(image);
+	}
 
-  /**
-   * @return an item at given index
-   */
-  public String getItem(int index) {
-    checkWidget();
-    return m_table.getItem(index).getText();
-  }
+	/**
+	 * @return an item at given index
+	 */
+	public String getItem(int index) {
+		checkWidget();
+		return m_table.getItem(index).getText();
+	}
 
-  /**
-   * @return the number of items
-   */
-  public int getItemCount() {
-    checkWidget();
-    return m_table.getItemCount();
-  }
+	/**
+	 * @return the number of items
+	 */
+	public int getItemCount() {
+		checkWidget();
+		return m_table.getItemCount();
+	}
 
-  /**
-   * @return the index of the selected item
-   */
-  public int getSelectionIndex() {
-    checkWidget();
-    return m_table.getSelectionIndex();
-  }
+	/**
+	 * @return the index of the selected item
+	 */
+	public int getSelectionIndex() {
+		checkWidget();
+		return m_table.getSelectionIndex();
+	}
 
-  /**
-   * Selects an item with given index.
-   */
-  public void select(int index) {
-    checkWidget();
-    if (index == -1) {
-      m_table.deselectAll();
-      m_text.setText(null);
-      m_text.setImage(null);
-      return;
-    } else {
-      TableItem item = m_table.getItem(index);
-      m_text.setText(item.getText());
-      m_text.setImage(item.getImage());
-      m_table.select(index);
-    }
-  }
+	/**
+	 * Selects an item with given index.
+	 */
+	public void select(int index) {
+		checkWidget();
+		if (index == -1) {
+			m_table.deselectAll();
+			m_text.setText(null);
+			m_text.setImage(null);
+			return;
+		} else {
+			TableItem item = m_table.getItem(index);
+			m_text.setText(item.getText());
+			m_text.setImage(item.getImage());
+			m_table.select(index);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access: text and image
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Selects item with given text.
-   */
-  public void setText(String text) {
-    // try to find item with given text
-    TableItem[] items = m_table.getItems();
-    for (int index = 0; index < items.length; index++) {
-      TableItem item = items[index];
-      if (item.getText().equals(text)) {
-        select(index);
-        return;
-      }
-    }
-    // not found, remove selection
-    select(-1);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access: text and image
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Selects item with given text.
+	 */
+	public void setText(String text) {
+		// try to find item with given text
+		TableItem[] items = m_table.getItems();
+		for (int index = 0; index < items.length; index++) {
+			TableItem item = items[index];
+			if (item.getText().equals(text)) {
+				select(index);
+				return;
+			}
+		}
+		// not found, remove selection
+		select(-1);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Resize support
-  // TODO: computeSize
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected void doResize() {
-    Rectangle clientArea = getClientArea();
-    int areaWidth = clientArea.width;
-    int areaHeight = clientArea.height;
-    // compute sizes of controls
-    Point buttonSize = m_arrow.computeSize(areaHeight, areaHeight);
-    Point textSize = m_text.computeSize(areaWidth - buttonSize.x, areaHeight);
-    // set controls location/size
-    m_arrow.setLocation(areaWidth - buttonSize.x, 0);
-    m_arrow.setSize(buttonSize);
-    m_text.setSize(areaWidth - buttonSize.x, Math.max(textSize.y, areaHeight));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Resize support
+	// TODO: computeSize
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected void doResize() {
+		Rectangle clientArea = getClientArea();
+		int areaWidth = clientArea.width;
+		int areaHeight = clientArea.height;
+		// compute sizes of controls
+		Point buttonSize = m_arrow.computeSize(areaHeight, areaHeight);
+		Point textSize = m_text.computeSize(areaWidth - buttonSize.x, areaHeight);
+		// set controls location/size
+		m_arrow.setLocation(areaWidth - buttonSize.x, 0);
+		m_arrow.setSize(buttonSize);
+		m_text.setSize(areaWidth - buttonSize.x, Math.max(textSize.y, areaHeight));
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/CComboBox.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/CComboBox.java
index 910936981..2660875d6 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/CComboBox.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/CComboBox.java
@@ -65,601 +65,601 @@
  * @coverage core.control
  */
 public class CComboBox extends Composite {
-  private Text m_text;
-  private Button m_button;
-  private Canvas m_canvas;
-  private Shell m_popup;
-  private TableViewer m_table;
-  private boolean m_fullDropdownTableWidth = false;
-  private boolean m_wasFocused;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CComboBox(Composite parent, int style) {
-    super(parent, style);
-    createContents(this);
-    m_wasFocused = isComboFocused();
-    // add display hook
-    final Listener displayFocusInHook = new Listener() {
-      @Override
-      public void handleEvent(Event event) {
-        boolean focused = isComboFocused();
-        if (m_wasFocused && !focused) {
-          // close DropDown on focus out ComboBox
-          comboDropDown(false);
-        }
-        if (event.widget != CComboBox.this) {
-          // forward to ComboBox listeners
-          if (!m_wasFocused && focused) {
-            event.widget = CComboBox.this;
-            notifyListeners(SWT.FocusIn, event);
-          }
-          if (m_wasFocused && !focused) {
-            event.widget = CComboBox.this;
-            notifyListeners(SWT.FocusOut, event);
-          }
-        }
-        m_wasFocused = focused;
-      }
-    };
-    final Listener displayFocusOutHook = new Listener() {
-      @Override
-      public void handleEvent(Event event) {
-        m_wasFocused = isComboFocused();
-      }
-    };
-    {
-      Display display = getDisplay();
-      display.addFilter(SWT.FocusIn, displayFocusInHook);
-      display.addFilter(SWT.FocusOut, displayFocusOutHook);
-    }
-    // combo listeners
-    addControlListener(new ControlAdapter() {
-      @Override
-      public void controlResized(ControlEvent e) {
-        resizeInner();
-      }
-    });
-    addDisposeListener(new DisposeListener() {
-      @Override
-      public void widgetDisposed(DisposeEvent e) {
-        {
-          // remove Display hooks
-          Display display = getDisplay();
-          display.removeFilter(SWT.FocusIn, displayFocusInHook);
-          display.removeFilter(SWT.FocusOut, displayFocusOutHook);
-        }
-        disposeInner();
-      }
-    });
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Contents
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected void createContents(Composite parent) {
-    createText(parent);
-    createButton(parent);
-    createImage(parent);
-    createPopup(parent);
-  }
-
-  /**
-   * Create Text widget.
-   */
-  protected void createText(Composite parent) {
-    m_text = new Text(parent, SWT.NONE);
-    new TextControlActionsManager(m_text);
-    // key press processing
-    m_text.addKeyListener(new KeyAdapter() {
-      @Override
-      public void keyPressed(KeyEvent e) {
-        switch (e.keyCode) {
-          case SWT.ESC :
-            if (isDroppedDown()) {
-              // close dropdown
-              comboDropDown(false);
-              e.doit = false;
-            } else {
-              // forward to ComboBox listeners
-              notifyListeners(SWT.KeyDown, convert2event(e));
-            }
-            break;
-          case SWT.ARROW_UP :
-            if (isDroppedDown()) {
-              // prev item in dropdown list
-              Table table = m_table.getTable();
-              int index = table.getSelectionIndex() - 1;
-              table.setSelection(index < 0 ? table.getItemCount() - 1 : index);
-              e.doit = false;
-            } else {
-              // forward to ComboBox listeners
-              notifyListeners(SWT.KeyDown, convert2event(e));
-            }
-            break;
-          case SWT.ARROW_DOWN :
-            if (isDroppedDown()) {
-              // next item in dropdown list
-              Table table = m_table.getTable();
-              int index = table.getSelectionIndex() + 1;
-              table.setSelection(index == table.getItemCount() ? 0 : index);
-              e.doit = false;
-            } else if ((e.stateMask & SWT.ALT) != 0) {
-              // force drop down combo
-              comboDropDown(true);
-              e.doit = false;
-              // return focus to text
-              setFocus2Text(false);
-            } else {
-              // forward to ComboBox listeners
-              notifyListeners(SWT.KeyDown, convert2event(e));
-            }
-            break;
-          case '\r' :
-            Table table = m_table.getTable();
-            if (isDroppedDown() && table.getSelectionIndex() != -1) {
-              // forward to Table listeners
-              table.notifyListeners(SWT.Selection, convert2event(e));
-            } else {
-              m_text.selectAll();
-              setSelectionText(getEditText());
-              // forward to ComboBox listeners
-              notifyListeners(SWT.Selection, convert2event(e));
-            }
-            break;
-        }
-      }
-    });
-    // modifications processing
-    m_text.addModifyListener(new ModifyListener() {
-      @Override
-      public void modifyText(ModifyEvent e) {
-        if (isDroppedDown()) {
-          m_table.refresh();
-        } else {
-          // force drop down combo
-          if (m_text.isFocusControl()) {
-            comboDropDown(true);
-            // return focus to text
-            setFocus2Text(false);
-          }
-        }
-      }
-    });
-  }
-
-  /**
-   * Create arrow button.
-   */
-  protected void createButton(Composite parent) {
-    m_button = new Button(parent, SWT.ARROW | SWT.DOWN);
-    m_button.addSelectionListener(new SelectionAdapter() {
-      @Override
-      public void widgetSelected(SelectionEvent e) {
-        comboDropDown(!isDroppedDown());
-        // return focus to text
-        setFocus2Text(true);
-      }
-    });
-  }
-
-  /**
-   * Create image canvas.
-   */
-  protected void createImage(Composite parent) {
-    m_canvas = new Canvas(parent, SWT.BORDER);
-    m_canvas.addPaintListener(new PaintListener() {
-      @Override
-      public void paintControl(PaintEvent e) {
-        Image selectionImage = getSelectionImage();
-        if (selectionImage != null) {
-          e.gc.drawImage(selectionImage, 0, 0);
-        } else {
-          e.gc.fillRectangle(m_canvas.getClientArea());
-        }
-      }
-    });
-  }
-
-  /**
-   * Create popup shell with table.
-   */
-  protected void createPopup(Composite parent) {
-    m_popup = new Shell(getShell(), SWT.BORDER);
-    m_popup.setLayout(new FillLayout());
-    createTable(m_popup);
-  }
-
-  /**
-   * Create table.
-   */
-  protected void createTable(Composite parent) {
-    m_table = new TableViewer(parent, SWT.FULL_SELECTION);
-    new TableViewerColumn(m_table, SWT.LEFT);
-    m_table.getTable().addSelectionListener(new SelectionAdapter() {
-      @Override
-      public void widgetSelected(SelectionEvent e) {
-        int selectionIndex = m_table.getTable().getSelectionIndex();
-        setSelectionIndex(selectionIndex);
-        comboDropDown(false);
-        // forward to ComboBox listeners
-        notifyListeners(SWT.Selection, convert2event(e));
-      }
-    });
-    m_table.setContentProvider(getContentProvider());
-    m_table.setLabelProvider(getLabelProvider());
-    m_table.addFilter(getFilterProvider());
-  }
-
-  /**
-   * Placement inner widgets.
-   */
-  protected void resizeInner() {
-    Rectangle clientArea = getClientArea();
-    int rightOccupied = 0;
-    int leftOccupied = 0;
-    {
-      // button
-      m_button.setBounds(
-          clientArea.width - clientArea.height,
-          0,
-          clientArea.height,
-          clientArea.height);
-      rightOccupied = clientArea.height;
-    }
-    {
-      Image selectionImage = getSelectionImage();
-      if (selectionImage != null) {
-        // image
-        m_canvas.setSize(clientArea.height, clientArea.height);
-        leftOccupied = clientArea.height;
-      } else {
-        m_canvas.setSize(1, clientArea.height);
-        leftOccupied = 1;
-      }
-    }
-    {
-      // text
-      m_text.setBounds(
-          leftOccupied,
-          0,
-          clientArea.width - rightOccupied - leftOccupied,
-          clientArea.height);
-    }
-  }
-
-  /**
-   * Dispose inner widgets.
-   */
-  protected void disposeInner() {
-    if (!m_popup.isDisposed()) {
-      m_popup.dispose();
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Providers
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected IContentProvider getContentProvider() {
-    return new IStructuredContentProvider() {
-      @Override
-      public Object[] getElements(Object inputElement) {
-        return m_items.toArray(new ComboBoxItem[m_items.size()]);
-      }
-
-      @Override
-      public void dispose() {
-      }
-
-      @Override
-      public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
-      }
-    };
-  }
-
-  protected IBaseLabelProvider getLabelProvider() {
-    return new LabelProvider() {
-      @Override
-      public Image getImage(Object element) {
-        ComboBoxItem item = (ComboBoxItem) element;
-        return item.m_image;
-      }
-
-      @Override
-      public String getText(Object element) {
-        ComboBoxItem item = (ComboBoxItem) element;
-        return item.m_label;
-      }
-    };
-  }
-
-  protected ViewerFilter getFilterProvider() {
-    return new ViewerFilter() {
-      @Override
-      public boolean select(Viewer viewer, Object parentElement, Object element) {
-        String lookingString = m_text.getText().toLowerCase();
-        if (isDroppedDown() && lookingString.length() > 0) {
-          ComboBoxItem item = (ComboBoxItem) element;
-          return item.m_label.toLowerCase().indexOf(lookingString) != -1;
-        }
-        return true;
-      }
-    };
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Items
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected static class ComboBoxItem {
-    public final String m_label;
-    public final Image m_image;
-
-    public ComboBoxItem(String label, Image image) {
-      m_label = label;
-      m_image = image;
-    }
-  }
-
-  ArrayList<ComboBoxItem> m_items = Lists.newArrayList();
-
-  /**
-   * Add new item.
-   */
-  public void addItem(String label, Image image) {
-    Assert.isTrue(!isDroppedDown());
-    m_items.add(new ComboBoxItem(label, image));
-  }
-
-  public void addItem(String label) {
-    addItem(label, null);
-  }
-
-  public void removeAll() {
-    m_items.clear();
-  }
-
-  public int getItemCount() {
-    return m_items.size();
-  }
-
-  public String getItemLabel(int index) {
-    return m_items.get(index).m_label;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public boolean isComboFocused() {
-    return isFocusControl()
-        || m_text.isFocusControl()
-        || m_button.isFocusControl()
-        || m_canvas.isFocusControl()
-        || m_popup.isFocusControl()
-        || m_table.getTable().isFocusControl();
-  }
-
-  /**
-   * Edit text.
-   */
-  public String getEditText() {
-    return m_text.getText();
-  }
-
-  public void setEditText(String text) {
-    m_text.setText(text == null ? "" : text);
-    m_text.selectAll();
-  }
-
-  public void setEditSelection(int start, int end) {
-    m_text.setSelection(start, end);
-  }
-
-  /**
-   * Read only.
-   */
-  public void setReadOnly(boolean value) {
-    m_text.setEditable(!value);
-    m_button.setEnabled(!value);
-  }
-
-  /**
-   * Drop down width.
-   */
-  public boolean isFullDropdownTableWidth() {
-    return m_fullDropdownTableWidth;
-  }
-
-  public void setFullDropdownTableWidth(boolean value) {
-    Assert.isTrue(!isDroppedDown());
-    m_fullDropdownTableWidth = value;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Selection
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private int m_selectionIndex = -1;
-
-  /**
-   * Selection index.
-   */
-  public int getSelectionIndex() {
-    return m_selectionIndex;
-  }
-
-  public void setSelectionIndex(int index) {
-    m_selectionIndex = index;
-    if (isDroppedDown()) {
-      m_table.getTable().setSelection(m_selectionIndex);
-    }
-    setEditText(getSelectionText());
-  }
-
-  /**
-   * Selection text.
-   */
-  private String getSelectionText() {
-    if (m_selectionIndex != -1 && isDroppedDown()) {
-      Object itemData = m_table.getTable().getItem(m_selectionIndex).getData();
-      return ((ComboBoxItem) itemData).m_label;
-    }
-    return null;
-  }
-
-  /**
-   * Selection image.
-   */
-  private Image getSelectionImage() {
-    return m_selectionIndex != -1 ? m_items.get(m_selectionIndex).m_image : null;
-  }
-
-  public void setSelectionText(String label) {
-    TableItem[] items = m_table.getTable().getItems();
-    for (int i = 0; i < items.length; i++) {
-      TableItem item = items[i];
-      if (item.getText().equals(label)) {
-        setSelectionIndex(i);
-        return;
-      }
-    }
-    // no such item
-    setSelectionIndex(-1);
-    setEditText(label);
-  }
-
-  /**
-   * Adds the listener to receive events.
-   */
-  public void addSelectionListener(SelectionListener listener) {
-    checkWidget();
-    if (listener == null) {
-      SWT.error(SWT.ERROR_NULL_ARGUMENT);
-    }
-    TypedListener typedListener = new TypedListener(listener);
-    addListener(SWT.Selection, typedListener);
-    addListener(SWT.DefaultSelection, typedListener);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Popup
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public boolean isDroppedDown() {
-    return m_popup.isVisible();
-  }
-
-  public void comboDropDown(boolean dropdown) {
-    // check, may be we already in this drop state
-    if (dropdown == isDroppedDown()) {
-      return;
-    }
-    // close combo
-    if (dropdown) {
-      // initialize
-      m_table.setInput(m_items);
-      Table table = m_table.getTable();
-      TableColumn column = table.getColumn(0);
-      column.pack();
-      table.pack();
-      m_popup.pack();
-      // compute table size
-      Rectangle tableBounds = table.getBounds();
-      tableBounds.height = Math.min(tableBounds.height, table.getItemHeight() * 15);// max 15 items without scrolling
-      table.setBounds(tableBounds);
-      // prepare popup point
-      Point comboLocation = toDisplay(new Point(0, 0));
-      Point comboSize = getSize();
-      // compute popup size
-      Display display = getDisplay();
-      Rectangle clientArea = display.getClientArea();
-      int remainingDisplayHeight = clientArea.height - comboLocation.y - comboSize.y - 10;
-      int preferredHeight = Math.min(tableBounds.height, remainingDisplayHeight);
-      int remainingDisplayWidth = clientArea.width - comboLocation.x - 10;
-      int preferredWidth =
-          isFullDropdownTableWidth()
-              ? Math.min(tableBounds.width, remainingDisplayWidth)
-              : comboSize.x;
-      Rectangle popupBounds =
-          new Rectangle(comboLocation.x,
-              comboLocation.y + comboSize.y,
-              preferredWidth,
-              preferredHeight);
-      Rectangle trimBounds =
-          m_popup.computeTrim(popupBounds.x, popupBounds.y, popupBounds.width, popupBounds.height);
-      m_popup.setBounds(popupBounds.x, popupBounds.y, 2 * popupBounds.width - trimBounds.width, 2
-          * popupBounds.height
-          - trimBounds.height);
-      // adjust column size
-      column.setWidth(table.getClientArea().width);
-      // show popup
-      m_popup.setVisible(true);
-      table.setSelection(getSelectionIndex());
-    } else {
-      // hide popup
-      m_popup.setVisible(false);
-    }
-  }
-
-  protected final void setFocus2Text(final boolean selectAll) {
-    getDisplay().asyncExec(new Runnable() {
-      final boolean m_selectAll = selectAll;
-
-      @Override
-      public void run() {
-        if (!m_text.isDisposed()) {
-          m_text.setFocus();
-          if (m_selectAll) {
-            m_text.selectAll();
-          }
-        }
-      }
-    });
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utilities
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected static Event convert2event(TypedEvent tEvent) {
-    Event event = new Event();
-    event.widget = tEvent.widget;
-    event.display = tEvent.display;
-    event.widget = tEvent.widget;
-    event.time = tEvent.time;
-    event.data = tEvent.data;
-    if (tEvent instanceof KeyEvent) {
-      KeyEvent kEvent = (KeyEvent) tEvent;
-      event.character = kEvent.character;
-      event.keyCode = kEvent.keyCode;
-      event.stateMask = kEvent.stateMask;
-      event.doit = kEvent.doit;
-    }
-    if (tEvent instanceof SelectionEvent) {
-      SelectionEvent sEvent = (SelectionEvent) tEvent;
-      event.item = sEvent.item;
-      event.x = sEvent.x;
-      event.y = sEvent.y;
-      event.width = sEvent.width;
-      event.height = sEvent.height;
-      event.detail = sEvent.detail;
-      event.stateMask = sEvent.stateMask;
-      event.text = sEvent.text;
-      event.doit = sEvent.doit;
-    }
-    return event;
-  }
+	private Text m_text;
+	private Button m_button;
+	private Canvas m_canvas;
+	private Shell m_popup;
+	private TableViewer m_table;
+	private boolean m_fullDropdownTableWidth = false;
+	private boolean m_wasFocused;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CComboBox(Composite parent, int style) {
+		super(parent, style);
+		createContents(this);
+		m_wasFocused = isComboFocused();
+		// add display hook
+		final Listener displayFocusInHook = new Listener() {
+			@Override
+			public void handleEvent(Event event) {
+				boolean focused = isComboFocused();
+				if (m_wasFocused && !focused) {
+					// close DropDown on focus out ComboBox
+					comboDropDown(false);
+				}
+				if (event.widget != CComboBox.this) {
+					// forward to ComboBox listeners
+					if (!m_wasFocused && focused) {
+						event.widget = CComboBox.this;
+						notifyListeners(SWT.FocusIn, event);
+					}
+					if (m_wasFocused && !focused) {
+						event.widget = CComboBox.this;
+						notifyListeners(SWT.FocusOut, event);
+					}
+				}
+				m_wasFocused = focused;
+			}
+		};
+		final Listener displayFocusOutHook = new Listener() {
+			@Override
+			public void handleEvent(Event event) {
+				m_wasFocused = isComboFocused();
+			}
+		};
+		{
+			Display display = getDisplay();
+			display.addFilter(SWT.FocusIn, displayFocusInHook);
+			display.addFilter(SWT.FocusOut, displayFocusOutHook);
+		}
+		// combo listeners
+		addControlListener(new ControlAdapter() {
+			@Override
+			public void controlResized(ControlEvent e) {
+				resizeInner();
+			}
+		});
+		addDisposeListener(new DisposeListener() {
+			@Override
+			public void widgetDisposed(DisposeEvent e) {
+				{
+					// remove Display hooks
+					Display display = getDisplay();
+					display.removeFilter(SWT.FocusIn, displayFocusInHook);
+					display.removeFilter(SWT.FocusOut, displayFocusOutHook);
+				}
+				disposeInner();
+			}
+		});
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Contents
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected void createContents(Composite parent) {
+		createText(parent);
+		createButton(parent);
+		createImage(parent);
+		createPopup(parent);
+	}
+
+	/**
+	 * Create Text widget.
+	 */
+	protected void createText(Composite parent) {
+		m_text = new Text(parent, SWT.NONE);
+		new TextControlActionsManager(m_text);
+		// key press processing
+		m_text.addKeyListener(new KeyAdapter() {
+			@Override
+			public void keyPressed(KeyEvent e) {
+				switch (e.keyCode) {
+				case SWT.ESC :
+					if (isDroppedDown()) {
+						// close dropdown
+						comboDropDown(false);
+						e.doit = false;
+					} else {
+						// forward to ComboBox listeners
+						notifyListeners(SWT.KeyDown, convert2event(e));
+					}
+					break;
+				case SWT.ARROW_UP :
+					if (isDroppedDown()) {
+						// prev item in dropdown list
+						Table table = m_table.getTable();
+						int index = table.getSelectionIndex() - 1;
+						table.setSelection(index < 0 ? table.getItemCount() - 1 : index);
+						e.doit = false;
+					} else {
+						// forward to ComboBox listeners
+						notifyListeners(SWT.KeyDown, convert2event(e));
+					}
+					break;
+				case SWT.ARROW_DOWN :
+					if (isDroppedDown()) {
+						// next item in dropdown list
+						Table table = m_table.getTable();
+						int index = table.getSelectionIndex() + 1;
+						table.setSelection(index == table.getItemCount() ? 0 : index);
+						e.doit = false;
+					} else if ((e.stateMask & SWT.ALT) != 0) {
+						// force drop down combo
+						comboDropDown(true);
+						e.doit = false;
+						// return focus to text
+						setFocus2Text(false);
+					} else {
+						// forward to ComboBox listeners
+						notifyListeners(SWT.KeyDown, convert2event(e));
+					}
+					break;
+				case '\r' :
+					Table table = m_table.getTable();
+					if (isDroppedDown() && table.getSelectionIndex() != -1) {
+						// forward to Table listeners
+						table.notifyListeners(SWT.Selection, convert2event(e));
+					} else {
+						m_text.selectAll();
+						setSelectionText(getEditText());
+						// forward to ComboBox listeners
+						notifyListeners(SWT.Selection, convert2event(e));
+					}
+					break;
+				}
+			}
+		});
+		// modifications processing
+		m_text.addModifyListener(new ModifyListener() {
+			@Override
+			public void modifyText(ModifyEvent e) {
+				if (isDroppedDown()) {
+					m_table.refresh();
+				} else {
+					// force drop down combo
+					if (m_text.isFocusControl()) {
+						comboDropDown(true);
+						// return focus to text
+						setFocus2Text(false);
+					}
+				}
+			}
+		});
+	}
+
+	/**
+	 * Create arrow button.
+	 */
+	protected void createButton(Composite parent) {
+		m_button = new Button(parent, SWT.ARROW | SWT.DOWN);
+		m_button.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				comboDropDown(!isDroppedDown());
+				// return focus to text
+				setFocus2Text(true);
+			}
+		});
+	}
+
+	/**
+	 * Create image canvas.
+	 */
+	protected void createImage(Composite parent) {
+		m_canvas = new Canvas(parent, SWT.BORDER);
+		m_canvas.addPaintListener(new PaintListener() {
+			@Override
+			public void paintControl(PaintEvent e) {
+				Image selectionImage = getSelectionImage();
+				if (selectionImage != null) {
+					e.gc.drawImage(selectionImage, 0, 0);
+				} else {
+					e.gc.fillRectangle(m_canvas.getClientArea());
+				}
+			}
+		});
+	}
+
+	/**
+	 * Create popup shell with table.
+	 */
+	protected void createPopup(Composite parent) {
+		m_popup = new Shell(getShell(), SWT.BORDER);
+		m_popup.setLayout(new FillLayout());
+		createTable(m_popup);
+	}
+
+	/**
+	 * Create table.
+	 */
+	protected void createTable(Composite parent) {
+		m_table = new TableViewer(parent, SWT.FULL_SELECTION);
+		new TableViewerColumn(m_table, SWT.LEFT);
+		m_table.getTable().addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				int selectionIndex = m_table.getTable().getSelectionIndex();
+				setSelectionIndex(selectionIndex);
+				comboDropDown(false);
+				// forward to ComboBox listeners
+				notifyListeners(SWT.Selection, convert2event(e));
+			}
+		});
+		m_table.setContentProvider(getContentProvider());
+		m_table.setLabelProvider(getLabelProvider());
+		m_table.addFilter(getFilterProvider());
+	}
+
+	/**
+	 * Placement inner widgets.
+	 */
+	protected void resizeInner() {
+		Rectangle clientArea = getClientArea();
+		int rightOccupied = 0;
+		int leftOccupied = 0;
+		{
+			// button
+			m_button.setBounds(
+					clientArea.width - clientArea.height,
+					0,
+					clientArea.height,
+					clientArea.height);
+			rightOccupied = clientArea.height;
+		}
+		{
+			Image selectionImage = getSelectionImage();
+			if (selectionImage != null) {
+				// image
+				m_canvas.setSize(clientArea.height, clientArea.height);
+				leftOccupied = clientArea.height;
+			} else {
+				m_canvas.setSize(1, clientArea.height);
+				leftOccupied = 1;
+			}
+		}
+		{
+			// text
+			m_text.setBounds(
+					leftOccupied,
+					0,
+					clientArea.width - rightOccupied - leftOccupied,
+					clientArea.height);
+		}
+	}
+
+	/**
+	 * Dispose inner widgets.
+	 */
+	protected void disposeInner() {
+		if (!m_popup.isDisposed()) {
+			m_popup.dispose();
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Providers
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected IContentProvider getContentProvider() {
+		return new IStructuredContentProvider() {
+			@Override
+			public Object[] getElements(Object inputElement) {
+				return m_items.toArray(new ComboBoxItem[m_items.size()]);
+			}
+
+			@Override
+			public void dispose() {
+			}
+
+			@Override
+			public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+			}
+		};
+	}
+
+	protected IBaseLabelProvider getLabelProvider() {
+		return new LabelProvider() {
+			@Override
+			public Image getImage(Object element) {
+				ComboBoxItem item = (ComboBoxItem) element;
+				return item.m_image;
+			}
+
+			@Override
+			public String getText(Object element) {
+				ComboBoxItem item = (ComboBoxItem) element;
+				return item.m_label;
+			}
+		};
+	}
+
+	protected ViewerFilter getFilterProvider() {
+		return new ViewerFilter() {
+			@Override
+			public boolean select(Viewer viewer, Object parentElement, Object element) {
+				String lookingString = m_text.getText().toLowerCase();
+				if (isDroppedDown() && lookingString.length() > 0) {
+					ComboBoxItem item = (ComboBoxItem) element;
+					return item.m_label.toLowerCase().indexOf(lookingString) != -1;
+				}
+				return true;
+			}
+		};
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Items
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected static class ComboBoxItem {
+		public final String m_label;
+		public final Image m_image;
+
+		public ComboBoxItem(String label, Image image) {
+			m_label = label;
+			m_image = image;
+		}
+	}
+
+	ArrayList<ComboBoxItem> m_items = Lists.newArrayList();
+
+	/**
+	 * Add new item.
+	 */
+	public void addItem(String label, Image image) {
+		Assert.isTrue(!isDroppedDown());
+		m_items.add(new ComboBoxItem(label, image));
+	}
+
+	public void addItem(String label) {
+		addItem(label, null);
+	}
+
+	public void removeAll() {
+		m_items.clear();
+	}
+
+	public int getItemCount() {
+		return m_items.size();
+	}
+
+	public String getItemLabel(int index) {
+		return m_items.get(index).m_label;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public boolean isComboFocused() {
+		return isFocusControl()
+				|| m_text.isFocusControl()
+				|| m_button.isFocusControl()
+				|| m_canvas.isFocusControl()
+				|| m_popup.isFocusControl()
+				|| m_table.getTable().isFocusControl();
+	}
+
+	/**
+	 * Edit text.
+	 */
+	public String getEditText() {
+		return m_text.getText();
+	}
+
+	public void setEditText(String text) {
+		m_text.setText(text == null ? "" : text);
+		m_text.selectAll();
+	}
+
+	public void setEditSelection(int start, int end) {
+		m_text.setSelection(start, end);
+	}
+
+	/**
+	 * Read only.
+	 */
+	public void setReadOnly(boolean value) {
+		m_text.setEditable(!value);
+		m_button.setEnabled(!value);
+	}
+
+	/**
+	 * Drop down width.
+	 */
+	public boolean isFullDropdownTableWidth() {
+		return m_fullDropdownTableWidth;
+	}
+
+	public void setFullDropdownTableWidth(boolean value) {
+		Assert.isTrue(!isDroppedDown());
+		m_fullDropdownTableWidth = value;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Selection
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private int m_selectionIndex = -1;
+
+	/**
+	 * Selection index.
+	 */
+	public int getSelectionIndex() {
+		return m_selectionIndex;
+	}
+
+	public void setSelectionIndex(int index) {
+		m_selectionIndex = index;
+		if (isDroppedDown()) {
+			m_table.getTable().setSelection(m_selectionIndex);
+		}
+		setEditText(getSelectionText());
+	}
+
+	/**
+	 * Selection text.
+	 */
+	private String getSelectionText() {
+		if (m_selectionIndex != -1 && isDroppedDown()) {
+			Object itemData = m_table.getTable().getItem(m_selectionIndex).getData();
+			return ((ComboBoxItem) itemData).m_label;
+		}
+		return null;
+	}
+
+	/**
+	 * Selection image.
+	 */
+	private Image getSelectionImage() {
+		return m_selectionIndex != -1 ? m_items.get(m_selectionIndex).m_image : null;
+	}
+
+	public void setSelectionText(String label) {
+		TableItem[] items = m_table.getTable().getItems();
+		for (int i = 0; i < items.length; i++) {
+			TableItem item = items[i];
+			if (item.getText().equals(label)) {
+				setSelectionIndex(i);
+				return;
+			}
+		}
+		// no such item
+		setSelectionIndex(-1);
+		setEditText(label);
+	}
+
+	/**
+	 * Adds the listener to receive events.
+	 */
+	public void addSelectionListener(SelectionListener listener) {
+		checkWidget();
+		if (listener == null) {
+			SWT.error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		TypedListener typedListener = new TypedListener(listener);
+		addListener(SWT.Selection, typedListener);
+		addListener(SWT.DefaultSelection, typedListener);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Popup
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public boolean isDroppedDown() {
+		return m_popup.isVisible();
+	}
+
+	public void comboDropDown(boolean dropdown) {
+		// check, may be we already in this drop state
+		if (dropdown == isDroppedDown()) {
+			return;
+		}
+		// close combo
+		if (dropdown) {
+			// initialize
+			m_table.setInput(m_items);
+			Table table = m_table.getTable();
+			TableColumn column = table.getColumn(0);
+			column.pack();
+			table.pack();
+			m_popup.pack();
+			// compute table size
+			Rectangle tableBounds = table.getBounds();
+			tableBounds.height = Math.min(tableBounds.height, table.getItemHeight() * 15);// max 15 items without scrolling
+			table.setBounds(tableBounds);
+			// prepare popup point
+			Point comboLocation = toDisplay(new Point(0, 0));
+			Point comboSize = getSize();
+			// compute popup size
+			Display display = getDisplay();
+			Rectangle clientArea = display.getClientArea();
+			int remainingDisplayHeight = clientArea.height - comboLocation.y - comboSize.y - 10;
+			int preferredHeight = Math.min(tableBounds.height, remainingDisplayHeight);
+			int remainingDisplayWidth = clientArea.width - comboLocation.x - 10;
+			int preferredWidth =
+					isFullDropdownTableWidth()
+					? Math.min(tableBounds.width, remainingDisplayWidth)
+							: comboSize.x;
+			Rectangle popupBounds =
+					new Rectangle(comboLocation.x,
+							comboLocation.y + comboSize.y,
+							preferredWidth,
+							preferredHeight);
+			Rectangle trimBounds =
+					m_popup.computeTrim(popupBounds.x, popupBounds.y, popupBounds.width, popupBounds.height);
+			m_popup.setBounds(popupBounds.x, popupBounds.y, 2 * popupBounds.width - trimBounds.width, 2
+					* popupBounds.height
+					- trimBounds.height);
+			// adjust column size
+			column.setWidth(table.getClientArea().width);
+			// show popup
+			m_popup.setVisible(true);
+			table.setSelection(getSelectionIndex());
+		} else {
+			// hide popup
+			m_popup.setVisible(false);
+		}
+	}
+
+	protected final void setFocus2Text(final boolean selectAll) {
+		getDisplay().asyncExec(new Runnable() {
+			final boolean m_selectAll = selectAll;
+
+			@Override
+			public void run() {
+				if (!m_text.isDisposed()) {
+					m_text.setFocus();
+					if (m_selectAll) {
+						m_text.selectAll();
+					}
+				}
+			}
+		});
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utilities
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected static Event convert2event(TypedEvent tEvent) {
+		Event event = new Event();
+		event.widget = tEvent.widget;
+		event.display = tEvent.display;
+		event.widget = tEvent.widget;
+		event.time = tEvent.time;
+		event.data = tEvent.data;
+		if (tEvent instanceof KeyEvent) {
+			KeyEvent kEvent = (KeyEvent) tEvent;
+			event.character = kEvent.character;
+			event.keyCode = kEvent.keyCode;
+			event.stateMask = kEvent.stateMask;
+			event.doit = kEvent.doit;
+		}
+		if (tEvent instanceof SelectionEvent) {
+			SelectionEvent sEvent = (SelectionEvent) tEvent;
+			event.item = sEvent.item;
+			event.x = sEvent.x;
+			event.y = sEvent.y;
+			event.width = sEvent.width;
+			event.height = sEvent.height;
+			event.detail = sEvent.detail;
+			event.stateMask = sEvent.stateMask;
+			event.text = sEvent.text;
+			event.doit = sEvent.doit;
+		}
+		return event;
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/CFlatButton.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/CFlatButton.java
index aba02d8db..ba8655f8a 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/CFlatButton.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/CFlatButton.java
@@ -33,131 +33,131 @@
  * @author mitin_aa
  */
 public final class CFlatButton extends Canvas {
-  // colors
-  private static final Color COLOR_FACE = DrawUtils.getShiftedColor(IColorConstants.button, 12);
-  private static final Color COLOR_FACE_SELECTED = IColorConstants.buttonDarker;
-  private static final Color COLOR_BORDER_GRADIENT1 = DrawUtils.getShiftedColor(
-      IColorConstants.button,
-      -12);
-  private static final Color COLOR_BORDER_GRADIENT1_SELECTED = DrawUtils.getShiftedColor(
-      IColorConstants.buttonDarker,
-      64);
-  private static final Color COLOR_BORDER_GRADIENT2 = DrawUtils.getShiftedColor(COLOR_FACE, -8);
-  private static final Color COLOR_BORDER_GRADIENT2_SELECTED = DrawUtils.getShiftedColor(
-      COLOR_FACE_SELECTED,
-      -8);
-  // fields
-  private Image m_image;
-  private boolean m_down;
-  private boolean m_selected;
+	// colors
+	private static final Color COLOR_FACE = DrawUtils.getShiftedColor(IColorConstants.button, 12);
+	private static final Color COLOR_FACE_SELECTED = IColorConstants.buttonDarker;
+	private static final Color COLOR_BORDER_GRADIENT1 = DrawUtils.getShiftedColor(
+			IColorConstants.button,
+			-12);
+	private static final Color COLOR_BORDER_GRADIENT1_SELECTED = DrawUtils.getShiftedColor(
+			IColorConstants.buttonDarker,
+			64);
+	private static final Color COLOR_BORDER_GRADIENT2 = DrawUtils.getShiftedColor(COLOR_FACE, -8);
+	private static final Color COLOR_BORDER_GRADIENT2_SELECTED = DrawUtils.getShiftedColor(
+			COLOR_FACE_SELECTED,
+			-8);
+	// fields
+	private Image m_image;
+	private boolean m_down;
+	private boolean m_selected;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CFlatButton(Composite parent, int style) {
-    super(parent, style);
-    addPaintListener(new PaintListener() {
-      @Override
-      public void paintControl(PaintEvent e) {
-        boolean isSelected = m_down | m_selected;
-        Color faceColor = isSelected ? COLOR_FACE_SELECTED : COLOR_FACE;
-        Color borderGradientColor1 =
-            isSelected ? COLOR_BORDER_GRADIENT1_SELECTED : COLOR_BORDER_GRADIENT1;
-        Color borderGradientColor2 =
-            isSelected ? COLOR_BORDER_GRADIENT2_SELECTED : COLOR_BORDER_GRADIENT2;
-        GC gc = e.gc;
-        Rectangle ca = getClientArea();
-        // draw client area
-        // dark border
-        gc.setForeground(IColorConstants.buttonDarker);
-        gc.drawRectangle(ca.x, ca.y, ca.width - 1, ca.height - 1);
-        cropClientArea(ca);
-        // gradient border
-        gc.setForeground(borderGradientColor1);
-        gc.setBackground(borderGradientColor2);
-        gc.fillGradientRectangle(ca.x, ca.y, ca.width, ca.height, true);
-        cropClientArea(ca);
-        // fill background
-        gc.setBackground(faceColor);
-        gc.fillRectangle(ca);
-        // draw face upper-half gradient
-        Rectangle ca1 = getClientArea();
-        cropClientArea(ca1);
-        gc.setForeground(faceColor);
-        gc.setBackground(borderGradientColor1);
-        gc.fillGradientRectangle(ca1.x, ca1.y, ca1.width, ca1.height / 4, true);
-        // draw face down-half gradient
-        ca1.x += 1;
-        ca1.width -= 2;
-        gc.setForeground(borderGradientColor1);
-        gc.setBackground(faceColor);
-        gc.fillGradientRectangle(ca1.x, ca1.y + ca1.height / 4 - 1, ca1.width, ca1.height / 2, true);
-        // draw image
-        Image image = getImage();
-        if (image != null) {
-          Rectangle imageBounds = image.getBounds();
-          // center it in client area
-          int x = ca.x + (ca.width - imageBounds.width) / 2;
-          int y = ca.y + (ca.height - imageBounds.height) / 2;
-          gc.drawImage(image, x, y);
-        }
-      }
-    });
-    addListener(SWT.MouseDown, new Listener() {
-      @Override
-      public void handleEvent(Event e) {
-        m_down = true;
-        redraw();
-      }
-    });
-    addListener(SWT.MouseUp, new Listener() {
-      @Override
-      public void handleEvent(Event e) {
-        m_down = false;
-        redraw();
-        update();
-        if (getClientArea().contains(e.x, e.y)) {
-          fireSelectionEvent(e.time, e.stateMask);
-        }
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CFlatButton(Composite parent, int style) {
+		super(parent, style);
+		addPaintListener(new PaintListener() {
+			@Override
+			public void paintControl(PaintEvent e) {
+				boolean isSelected = m_down | m_selected;
+				Color faceColor = isSelected ? COLOR_FACE_SELECTED : COLOR_FACE;
+				Color borderGradientColor1 =
+						isSelected ? COLOR_BORDER_GRADIENT1_SELECTED : COLOR_BORDER_GRADIENT1;
+				Color borderGradientColor2 =
+						isSelected ? COLOR_BORDER_GRADIENT2_SELECTED : COLOR_BORDER_GRADIENT2;
+				GC gc = e.gc;
+				Rectangle ca = getClientArea();
+				// draw client area
+				// dark border
+				gc.setForeground(IColorConstants.buttonDarker);
+				gc.drawRectangle(ca.x, ca.y, ca.width - 1, ca.height - 1);
+				cropClientArea(ca);
+				// gradient border
+				gc.setForeground(borderGradientColor1);
+				gc.setBackground(borderGradientColor2);
+				gc.fillGradientRectangle(ca.x, ca.y, ca.width, ca.height, true);
+				cropClientArea(ca);
+				// fill background
+				gc.setBackground(faceColor);
+				gc.fillRectangle(ca);
+				// draw face upper-half gradient
+				Rectangle ca1 = getClientArea();
+				cropClientArea(ca1);
+				gc.setForeground(faceColor);
+				gc.setBackground(borderGradientColor1);
+				gc.fillGradientRectangle(ca1.x, ca1.y, ca1.width, ca1.height / 4, true);
+				// draw face down-half gradient
+				ca1.x += 1;
+				ca1.width -= 2;
+				gc.setForeground(borderGradientColor1);
+				gc.setBackground(faceColor);
+				gc.fillGradientRectangle(ca1.x, ca1.y + ca1.height / 4 - 1, ca1.width, ca1.height / 2, true);
+				// draw image
+				Image image = getImage();
+				if (image != null) {
+					Rectangle imageBounds = image.getBounds();
+					// center it in client area
+					int x = ca.x + (ca.width - imageBounds.width) / 2;
+					int y = ca.y + (ca.height - imageBounds.height) / 2;
+					gc.drawImage(image, x, y);
+				}
+			}
+		});
+		addListener(SWT.MouseDown, new Listener() {
+			@Override
+			public void handleEvent(Event e) {
+				m_down = true;
+				redraw();
+			}
+		});
+		addListener(SWT.MouseUp, new Listener() {
+			@Override
+			public void handleEvent(Event e) {
+				m_down = false;
+				redraw();
+				update();
+				if (getClientArea().contains(e.x, e.y)) {
+					fireSelectionEvent(e.time, e.stateMask);
+				}
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void fireSelectionEvent(int time, int stateMask) {
-    Event event = new Event();
-    event.time = time;
-    event.stateMask = stateMask;
-    notifyListeners(SWT.Selection, event);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void fireSelectionEvent(int time, int stateMask) {
+		Event event = new Event();
+		event.time = time;
+		event.stateMask = stateMask;
+		notifyListeners(SWT.Selection, event);
+	}
 
-  private void cropClientArea(Rectangle ca) {
-    ca.x += 1;
-    ca.y += 1;
-    ca.width -= 2;
-    ca.height -= 2;
-  }
+	private void cropClientArea(Rectangle ca) {
+		ca.x += 1;
+		ca.y += 1;
+		ca.width -= 2;
+		ca.height -= 2;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public final Image getImage() {
-    return m_image;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public final Image getImage() {
+		return m_image;
+	}
 
-  public void setImage(Image image) {
-    m_image = image;
-  }
+	public void setImage(Image image) {
+		m_image = image;
+	}
 
-  public void setSelected(boolean selected) {
-    m_selected = selected;
-  }
+	public void setSelected(boolean selected) {
+		m_selected = selected;
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/CImageLabel.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/CImageLabel.java
index e75c09099..c00de8818 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/CImageLabel.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/CImageLabel.java
@@ -30,113 +30,113 @@
  * @coverage core.control
  */
 public class CImageLabel extends Canvas {
-  private static final int SPACE = 5;
-  private Image m_image;
-  private String m_text;
+	private static final int SPACE = 5;
+	private Image m_image;
+	private String m_text;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CImageLabel(Composite parent, int style) {
-    super(parent, style | SWT.NO_BACKGROUND);
-    addListener(SWT.Dispose, new Listener() {
-      @Override
-      public void handleEvent(Event event) {
-        if (m_backImage != null) {
-          m_backImage.dispose();
-          m_backImage = null;
-        }
-      }
-    });
-    addListener(SWT.Paint, new Listener() {
-      @Override
-      public void handleEvent(Event event) {
-        doPaint(event.gc);
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CImageLabel(Composite parent, int style) {
+		super(parent, style | SWT.NO_BACKGROUND);
+		addListener(SWT.Dispose, new Listener() {
+			@Override
+			public void handleEvent(Event event) {
+				if (m_backImage != null) {
+					m_backImage.dispose();
+					m_backImage = null;
+				}
+			}
+		});
+		addListener(SWT.Paint, new Listener() {
+			@Override
+			public void handleEvent(Event event) {
+				doPaint(event.gc);
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public Image getImage() {
-    return m_image;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public Image getImage() {
+		return m_image;
+	}
 
-  public void setImage(Image image) {
-    m_image = image;
-    redraw();
-  }
+	public void setImage(Image image) {
+		m_image = image;
+		redraw();
+	}
 
-  public String getText() {
-    return m_text;
-  }
+	public String getText() {
+		return m_text;
+	}
 
-  public void setText(String text) {
-    m_text = text;
-    redraw();
-  }
+	public void setText(String text) {
+		m_text = text;
+		redraw();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Paint
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Image m_backImage;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Paint
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Image m_backImage;
 
-  private void doPaint(GC paintGC) {
-    Rectangle clientArea = getClientArea();
-    // prepare back image
-    GC gc;
-    {
-      if (m_backImage == null || !m_backImage.getBounds().equals(clientArea)) {
-        if (m_backImage != null) {
-          m_backImage.dispose();
-        }
-        m_backImage = new Image(getDisplay(), clientArea.width, clientArea.height);
-      }
-      //
-      gc = new GC(m_backImage);
-      gc.setBackground(paintGC.getBackground());
-      gc.setForeground(paintGC.getForeground());
-      gc.fillRectangle(clientArea);
-    }
-    //
-    Point textExtent = m_text == null ? new Point(0, 0) : gc.textExtent(m_text);
-    Rectangle imageBounds = m_image == null ? new Rectangle(0, 0, 0, 0) : m_image.getBounds();
-    //
-    if (m_image != null) {
-      int x = clientArea.x;
-      int y = clientArea.y + (clientArea.height - imageBounds.height) / 2;
-      gc.drawImage(m_image, x, y);
-    }
-    if (m_text != null) {
-      int x = clientArea.x + imageBounds.width + SPACE;
-      int y = clientArea.y + (clientArea.height - textExtent.y) / 2;
-      gc.drawText(m_text, x, y);
-    }
-    // flush back image
-    {
-      paintGC.drawImage(m_backImage, 0, 0);
-      gc.dispose();
-    }
-  }
+	private void doPaint(GC paintGC) {
+		Rectangle clientArea = getClientArea();
+		// prepare back image
+		GC gc;
+		{
+			if (m_backImage == null || !m_backImage.getBounds().equals(clientArea)) {
+				if (m_backImage != null) {
+					m_backImage.dispose();
+				}
+				m_backImage = new Image(getDisplay(), clientArea.width, clientArea.height);
+			}
+			//
+			gc = new GC(m_backImage);
+			gc.setBackground(paintGC.getBackground());
+			gc.setForeground(paintGC.getForeground());
+			gc.fillRectangle(clientArea);
+		}
+		//
+		Point textExtent = m_text == null ? new Point(0, 0) : gc.textExtent(m_text);
+		Rectangle imageBounds = m_image == null ? new Rectangle(0, 0, 0, 0) : m_image.getBounds();
+		//
+		if (m_image != null) {
+			int x = clientArea.x;
+			int y = clientArea.y + (clientArea.height - imageBounds.height) / 2;
+			gc.drawImage(m_image, x, y);
+		}
+		if (m_text != null) {
+			int x = clientArea.x + imageBounds.width + SPACE;
+			int y = clientArea.y + (clientArea.height - textExtent.y) / 2;
+			gc.drawText(m_text, x, y);
+		}
+		// flush back image
+		{
+			paintGC.drawImage(m_backImage, 0, 0);
+			gc.dispose();
+		}
+	}
 
-  @Override
-  public Point computeSize(int wHint, int hHint, boolean changed) {
-    // prepare text size
-    GC gc = new GC(this);
-    Point textExtent = m_text == null ? new Point(0, 0) : gc.textExtent(m_text);
-    gc.dispose();
-    // prepare image size
-    Rectangle imageBounds = m_image == null ? new Rectangle(0, 0, 0, 0) : m_image.getBounds();
-    // calculate control size
-    int width = imageBounds.width + SPACE + textExtent.x;
-    int height = Math.max(imageBounds.height, textExtent.y);
-    return new Point(width, height);
-  }
+	@Override
+	public Point computeSize(int wHint, int hHint, boolean changed) {
+		// prepare text size
+		GC gc = new GC(this);
+		Point textExtent = m_text == null ? new Point(0, 0) : gc.textExtent(m_text);
+		gc.dispose();
+		// prepare image size
+		Rectangle imageBounds = m_image == null ? new Rectangle(0, 0, 0, 0) : m_image.getBounds();
+		// calculate control size
+		int width = imageBounds.width + SPACE + textExtent.x;
+		int height = Math.max(imageBounds.height, textExtent.y);
+		return new Point(width, height);
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/CSpinner.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/CSpinner.java
index 9dc05ebe5..96f142397 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/CSpinner.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/CSpinner.java
@@ -39,530 +39,530 @@
  * @coverage core.control
  */
 public class CSpinner extends Composite {
-  private static final Color COLOR_VALID = Display.getCurrent().getSystemColor(
-      SWT.COLOR_LIST_BACKGROUND);
-  private static final Color COLOR_INVALID = new Color(null, 255, 230, 230);
-  private int m_minimum = 0;
-  private int m_maximum = 100;
-  private int m_increment = 1;
-  private int m_value = 0;
-  private int m_multiplier = 1;
-  private String m_formatPattern = "0";
-  private DecimalFormat m_format = new DecimalFormat(m_formatPattern);
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI fields
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final Button m_button;
-  private final Text m_text;
-  private final Spinner m_spinner;
-  private Composite win32Hack;
+	private static final Color COLOR_VALID = Display.getCurrent().getSystemColor(
+			SWT.COLOR_LIST_BACKGROUND);
+	private static final Color COLOR_INVALID = new Color(null, 255, 230, 230);
+	private int m_minimum = 0;
+	private int m_maximum = 100;
+	private int m_increment = 1;
+	private int m_value = 0;
+	private int m_multiplier = 1;
+	private String m_formatPattern = "0";
+	private DecimalFormat m_format = new DecimalFormat(m_formatPattern);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI fields
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final Button m_button;
+	private final Text m_text;
+	private final Spinner m_spinner;
+	private Composite win32Hack;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CSpinner(Composite parent, int style) {
-    super(parent, style);
-    m_button = new Button(this, SWT.ARROW | SWT.DOWN);
-    {
-      int textStyle = SWT.SINGLE | SWT.RIGHT;
-      if (IS_OS_MAC_OSX_COCOA) {
-        textStyle |= SWT.BORDER;
-      }
-      m_text = new Text(this, textStyle);
-      m_text.addKeyListener(new KeyAdapter() {
-        @Override
-        public void keyPressed(KeyEvent e) {
-          if (e.keyCode == SWT.ARROW_UP || e.keyCode == SWT.ARROW_DOWN) {
-            e.doit = false;
-            updateValue(e.keyCode);
-          }
-        }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CSpinner(Composite parent, int style) {
+		super(parent, style);
+		m_button = new Button(this, SWT.ARROW | SWT.DOWN);
+		{
+			int textStyle = SWT.SINGLE | SWT.RIGHT;
+			if (IS_OS_MAC_OSX_COCOA) {
+				textStyle |= SWT.BORDER;
+			}
+			m_text = new Text(this, textStyle);
+			m_text.addKeyListener(new KeyAdapter() {
+				@Override
+				public void keyPressed(KeyEvent e) {
+					if (e.keyCode == SWT.ARROW_UP || e.keyCode == SWT.ARROW_DOWN) {
+						e.doit = false;
+						updateValue(e.keyCode);
+					}
+				}
 
-        @Override
-        public void keyReleased(KeyEvent e) {
-          try {
-            m_value = (int) (m_format.parse(m_text.getText()).doubleValue() * m_multiplier);
-            if (m_value < m_minimum || m_value > m_maximum) {
-              m_text.setBackground(COLOR_INVALID);
-              setState(MessageFormat.format(
-                  Messages.CSpinner_outOfRange,
-                  m_value,
-                  m_minimum,
-                  m_maximum));
-              notifySelectionListeners(false);
-            } else {
-              setState(null);
-              notifySelectionListeners(true);
-            }
-          } catch (ParseException ex) {
-            setState(MessageFormat.format(
-                Messages.CSpinner_canNotParse,
-                m_text.getText(),
-                m_formatPattern));
-            notifySelectionListeners(false);
-          }
-        }
-      });
-    }
-    if (!IS_OS_MAC_OSX) {
-      win32Hack = new Composite(this, SWT.NONE);
-      win32Hack.setBackground(getDisplay().getSystemColor(SWT.COLOR_WHITE));
-      win32Hack.moveAbove(null);
-      win32Hack.moveBelow(m_text);
-    }
-    {
-      m_spinner = new Spinner(this, SWT.VERTICAL);
-      m_spinner.setMinimum(0);
-      m_spinner.setMaximum(50);
-      m_spinner.setIncrement(1);
-      m_spinner.setPageIncrement(1);
-      m_spinner.setSelection(25);
-      m_spinner.addFocusListener(new FocusAdapter() {
-        @Override
-        public void focusGained(FocusEvent e) {
-          setFocus();
-        }
-      });
-      m_spinner.addSelectionListener(new SelectionAdapter() {
-        @Override
-        public void widgetSelected(SelectionEvent e) {
-          m_text.forceFocus();
-          if (m_spinner.getSelection() > 25) {
-            updateValue(SWT.ARROW_UP);
-          } else {
-            updateValue(SWT.ARROW_DOWN);
-          }
-          m_spinner.setSelection(25);
-        }
-      });
-      setBackground(getDisplay().getSystemColor(SWT.COLOR_WHITE));
-      if (IS_OS_WINDOWS_XP || IS_OS_WINDOWS_2003) {
-        setLayout(new WindowsXpLayout());
-      } else if (IS_OS_WINDOWS_VISTA || IS_OS_WINDOWS_7) {
-        setLayout(new WindowsVistaLayout());
-      } else if (IS_OS_LINUX) {
-        setLayout(new LinuxLayout());
-      } else if (IS_OS_MAC_OSX) {
-        if (IS_OS_MAC_OSX_COCOA) {
-          setLayout(new MacCocoaLayout());
-        } else {
-          setLayout(new MacLayout());
-        }
-      } else {
-        setLayout(new WindowsXpLayout());
-      }
-    }
-  }
+				@Override
+				public void keyReleased(KeyEvent e) {
+					try {
+						m_value = (int) (m_format.parse(m_text.getText()).doubleValue() * m_multiplier);
+						if (m_value < m_minimum || m_value > m_maximum) {
+							m_text.setBackground(COLOR_INVALID);
+							setState(MessageFormat.format(
+									Messages.CSpinner_outOfRange,
+									m_value,
+									m_minimum,
+									m_maximum));
+							notifySelectionListeners(false);
+						} else {
+							setState(null);
+							notifySelectionListeners(true);
+						}
+					} catch (ParseException ex) {
+						setState(MessageFormat.format(
+								Messages.CSpinner_canNotParse,
+								m_text.getText(),
+								m_formatPattern));
+						notifySelectionListeners(false);
+					}
+				}
+			});
+		}
+		if (!IS_OS_MAC_OSX) {
+			win32Hack = new Composite(this, SWT.NONE);
+			win32Hack.setBackground(getDisplay().getSystemColor(SWT.COLOR_WHITE));
+			win32Hack.moveAbove(null);
+			win32Hack.moveBelow(m_text);
+		}
+		{
+			m_spinner = new Spinner(this, SWT.VERTICAL);
+			m_spinner.setMinimum(0);
+			m_spinner.setMaximum(50);
+			m_spinner.setIncrement(1);
+			m_spinner.setPageIncrement(1);
+			m_spinner.setSelection(25);
+			m_spinner.addFocusListener(new FocusAdapter() {
+				@Override
+				public void focusGained(FocusEvent e) {
+					setFocus();
+				}
+			});
+			m_spinner.addSelectionListener(new SelectionAdapter() {
+				@Override
+				public void widgetSelected(SelectionEvent e) {
+					m_text.forceFocus();
+					if (m_spinner.getSelection() > 25) {
+						updateValue(SWT.ARROW_UP);
+					} else {
+						updateValue(SWT.ARROW_DOWN);
+					}
+					m_spinner.setSelection(25);
+				}
+			});
+			setBackground(getDisplay().getSystemColor(SWT.COLOR_WHITE));
+			if (IS_OS_WINDOWS_XP || IS_OS_WINDOWS_2003) {
+				setLayout(new WindowsXpLayout());
+			} else if (IS_OS_WINDOWS_VISTA || IS_OS_WINDOWS_7) {
+				setLayout(new WindowsVistaLayout());
+			} else if (IS_OS_LINUX) {
+				setLayout(new LinuxLayout());
+			} else if (IS_OS_MAC_OSX) {
+				if (IS_OS_MAC_OSX_COCOA) {
+					setLayout(new MacCocoaLayout());
+				} else {
+					setLayout(new MacLayout());
+				}
+			} else {
+				setLayout(new WindowsXpLayout());
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void setEnabled(boolean enabled) {
-    super.setEnabled(enabled);
-    m_text.setEnabled(enabled);
-    m_spinner.setEnabled(enabled);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void setEnabled(boolean enabled) {
+		super.setEnabled(enabled);
+		m_text.setEnabled(enabled);
+		m_spinner.setEnabled(enabled);
+	}
 
-  /**
-   * Sets the number of decimal places used by the receiver.
-   * <p>
-   * See {@link Spinner#setDigits(int)}.
-   */
-  public void setDigits(int digits) {
-    m_formatPattern = "0.";
-    m_multiplier = 1;
-    for (int i = 0; i < digits; i++) {
-      m_formatPattern += "0";
-      m_multiplier *= 10;
-    }
-    m_format = new DecimalFormat(m_formatPattern);
-    updateText();
-  }
+	/**
+	 * Sets the number of decimal places used by the receiver.
+	 * <p>
+	 * See {@link Spinner#setDigits(int)}.
+	 */
+	public void setDigits(int digits) {
+		m_formatPattern = "0.";
+		m_multiplier = 1;
+		for (int i = 0; i < digits; i++) {
+			m_formatPattern += "0";
+			m_multiplier *= 10;
+		}
+		m_format = new DecimalFormat(m_formatPattern);
+		updateText();
+	}
 
-  /**
-   * Sets minimum and maximum using single invocation.
-   */
-  public void setRange(int minimum, int maximum) {
-    setMinimum(minimum);
-    setMaximum(maximum);
-  }
+	/**
+	 * Sets minimum and maximum using single invocation.
+	 */
+	public void setRange(int minimum, int maximum) {
+		setMinimum(minimum);
+		setMaximum(maximum);
+	}
 
-  /**
-   * @return the minimum value that the receiver will allow.
-   */
-  public int getMinimum() {
-    return m_minimum;
-  }
+	/**
+	 * @return the minimum value that the receiver will allow.
+	 */
+	public int getMinimum() {
+		return m_minimum;
+	}
 
-  /**
-   * Sets the minimum value that the receiver will allow.
-   */
-  public void setMinimum(int minimum) {
-    m_minimum = minimum;
-    setSelection(Math.max(m_value, m_minimum));
-  }
+	/**
+	 * Sets the minimum value that the receiver will allow.
+	 */
+	public void setMinimum(int minimum) {
+		m_minimum = minimum;
+		setSelection(Math.max(m_value, m_minimum));
+	}
 
-  /**
-   * Sets the maximum value that the receiver will allow.
-   */
-  public void setMaximum(int maximum) {
-    m_maximum = maximum;
-    setSelection(Math.min(m_value, m_maximum));
-  }
+	/**
+	 * Sets the maximum value that the receiver will allow.
+	 */
+	public void setMaximum(int maximum) {
+		m_maximum = maximum;
+		setSelection(Math.min(m_value, m_maximum));
+	}
 
-  /**
-   * Sets the amount that the receiver's value will be modified by when the up/down arrows are
-   * pressed to the argument, which must be at least one.
-   */
-  public void setIncrement(int increment) {
-    m_increment = increment;
-  }
+	/**
+	 * Sets the amount that the receiver's value will be modified by when the up/down arrows are
+	 * pressed to the argument, which must be at least one.
+	 */
+	public void setIncrement(int increment) {
+		m_increment = increment;
+	}
 
-  /**
-   * Sets the <em>value</em>, which is the receiver's position, to the argument. If the argument is
-   * not within the range specified by minimum and maximum, it will be adjusted to fall within this
-   * range.
-   */
-  public void setSelection(int newValue) {
-    newValue = Math.min(Math.max(m_minimum, newValue), m_maximum);
-    if (newValue != m_value || m_text.getText().length() == 0) {
-      m_value = newValue;
-      updateText();
-      // set valid state
-      setState(null);
-    }
-  }
+	/**
+	 * Sets the <em>value</em>, which is the receiver's position, to the argument. If the argument is
+	 * not within the range specified by minimum and maximum, it will be adjusted to fall within this
+	 * range.
+	 */
+	public void setSelection(int newValue) {
+		newValue = Math.min(Math.max(m_minimum, newValue), m_maximum);
+		if (newValue != m_value || m_text.getText().length() == 0) {
+			m_value = newValue;
+			updateText();
+			// set valid state
+			setState(null);
+		}
+	}
 
-  private void updateText() {
-    String text = m_format.format((double) m_value / m_multiplier);
-    m_text.setText(text);
-    m_text.selectAll();
-  }
+	private void updateText() {
+		String text = m_format.format((double) m_value / m_multiplier);
+		m_text.setText(text);
+		m_text.selectAll();
+	}
 
-  /**
-   * @return the <em>selection</em>, which is the receiver's position.
-   */
-  public int getSelection() {
-    return m_value;
-  }
+	/**
+	 * @return the <em>selection</em>, which is the receiver's position.
+	 */
+	public int getSelection() {
+		return m_value;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Update
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Updates {@link #m_value} into given direction.
-   */
-  private void updateValue(int direction) {
-    // prepare new value
-    int newValue;
-    {
-      newValue = m_value;
-      if (direction == SWT.ARROW_UP) {
-        newValue += m_increment;
-      }
-      if (direction == SWT.ARROW_DOWN) {
-        newValue -= m_increment;
-      }
-    }
-    // update value
-    setSelection(newValue);
-    notifySelectionListeners(true);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Update
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Updates {@link #m_value} into given direction.
+	 */
+	private void updateValue(int direction) {
+		// prepare new value
+		int newValue;
+		{
+			newValue = m_value;
+			if (direction == SWT.ARROW_UP) {
+				newValue += m_increment;
+			}
+			if (direction == SWT.ARROW_DOWN) {
+				newValue -= m_increment;
+			}
+		}
+		// update value
+		setSelection(newValue);
+		notifySelectionListeners(true);
+	}
 
-  /**
-   * Sets the valid/invalid state.
-   *
-   * @param message
-   *          the message to show, or <code>null</code> if valid.
-   */
-  private void setState(String message) {
-    m_text.setToolTipText(message);
-    if (message == null) {
-      m_text.setBackground(COLOR_VALID);
-    } else {
-      m_text.setBackground(COLOR_INVALID);
-    }
-  }
+	/**
+	 * Sets the valid/invalid state.
+	 *
+	 * @param message
+	 *          the message to show, or <code>null</code> if valid.
+	 */
+	private void setState(String message) {
+		m_text.setToolTipText(message);
+		if (message == null) {
+			m_text.setBackground(COLOR_VALID);
+		} else {
+			m_text.setBackground(COLOR_INVALID);
+		}
+	}
 
-  /**
-   * Notifies {@link SWT#Selection} listeners with value and state.
-   */
-  private void notifySelectionListeners(boolean valid) {
-    Event event = new Event();
-    event.detail = m_value;
-    event.doit = valid;
-    notifyListeners(SWT.Selection, event);
-  }
+	/**
+	 * Notifies {@link SWT#Selection} listeners with value and state.
+	 */
+	private void notifySelectionListeners(boolean valid) {
+		Event event = new Event();
+		event.detail = m_value;
+		event.doit = valid;
+		notifyListeners(SWT.Selection, event);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Windows XP
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Implementation of {@link Layout} for Windows XP.
-   */
-  private class WindowsXpLayout extends Layout {
-    @Override
-    protected Point computeSize(Composite composite, int wHint, int hHint, boolean flushCache) {
-      Point size = m_text.computeSize(SWT.DEFAULT, SWT.DEFAULT);
-      size.x += m_spinner.computeSize(SWT.DEFAULT, SWT.DEFAULT).x - m_spinner.getClientArea().width;
-      // add Text widget margin
-      size.y += 2;
-      // apply hints
-      if (wHint != SWT.DEFAULT) {
-        size.x = Math.min(size.x, wHint);
-      }
-      if (hHint != SWT.DEFAULT) {
-        size.y = Math.min(size.y, hHint);
-      }
-      // OK, final size
-      return size;
-    }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Windows XP
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Implementation of {@link Layout} for Windows XP.
+	 */
+	private class WindowsXpLayout extends Layout {
+		@Override
+		protected Point computeSize(Composite composite, int wHint, int hHint, boolean flushCache) {
+			Point size = m_text.computeSize(SWT.DEFAULT, SWT.DEFAULT);
+			size.x += m_spinner.computeSize(SWT.DEFAULT, SWT.DEFAULT).x - m_spinner.getClientArea().width;
+			// add Text widget margin
+			size.y += 2;
+			// apply hints
+			if (wHint != SWT.DEFAULT) {
+				size.x = Math.min(size.x, wHint);
+			}
+			if (hHint != SWT.DEFAULT) {
+				size.y = Math.min(size.y, hHint);
+			}
+			// OK, final size
+			return size;
+		}
 
-    @Override
-    protected void layout(Composite composite, boolean flushCache) {
-      Rectangle cRect = composite.getClientArea();
-      if (cRect.isEmpty()) {
-        return;
-      }
-      // prepare size of Text
-      Point tSize = m_text.computeSize(SWT.DEFAULT, SWT.DEFAULT);
-      // prepare size of Spinner
-      Point sSize;
-      sSize = m_spinner.computeSize(SWT.DEFAULT, SWT.DEFAULT, flushCache);
-      sSize.y = Math.min(sSize.y, Math.min(tSize.y, cRect.height));
-      sSize.x = Math.min(sSize.x, cRect.width);
-      // prepare width of arrows part of Spinner
-      int arrowWidth = m_button.computeSize(SWT.DEFAULT, SWT.DEFAULT).x;
-      // set bounds for Spinner and Text
-      m_spinner.setBounds(
-          cRect.x + cRect.width - sSize.x + 1,
-          cRect.y - 1,
-          sSize.x,
-          cRect.height + 2);
-      m_text.setBounds(cRect.x, cRect.y + 1, cRect.width - arrowWidth, tSize.y);
-      win32Hack.setBounds(cRect.x, cRect.y, cRect.width - arrowWidth, sSize.y);
-    }
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Windows Vista
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Implementation of {@link Layout} for Windows Vista.
-   */
-  private class WindowsVistaLayout extends Layout {
-    @Override
-    protected Point computeSize(Composite composite, int wHint, int hHint, boolean flushCache) {
-      Point size = m_text.computeSize(SWT.DEFAULT, SWT.DEFAULT);
-      size.x += m_spinner.computeSize(SWT.DEFAULT, SWT.DEFAULT).x - m_spinner.getClientArea().width;
-      // add Text widget margin
-      size.y += 3;
-      // apply hints
-      if (wHint != SWT.DEFAULT) {
-        size.x = Math.min(size.x, wHint);
-      }
-      if (hHint != SWT.DEFAULT) {
-        size.y = Math.min(size.y, hHint);
-      }
-      // OK, final size
-      return size;
-    }
+		@Override
+		protected void layout(Composite composite, boolean flushCache) {
+			Rectangle cRect = composite.getClientArea();
+			if (cRect.isEmpty()) {
+				return;
+			}
+			// prepare size of Text
+			Point tSize = m_text.computeSize(SWT.DEFAULT, SWT.DEFAULT);
+			// prepare size of Spinner
+			Point sSize;
+			sSize = m_spinner.computeSize(SWT.DEFAULT, SWT.DEFAULT, flushCache);
+			sSize.y = Math.min(sSize.y, Math.min(tSize.y, cRect.height));
+			sSize.x = Math.min(sSize.x, cRect.width);
+			// prepare width of arrows part of Spinner
+			int arrowWidth = m_button.computeSize(SWT.DEFAULT, SWT.DEFAULT).x;
+			// set bounds for Spinner and Text
+			m_spinner.setBounds(
+					cRect.x + cRect.width - sSize.x + 1,
+					cRect.y - 1,
+					sSize.x,
+					cRect.height + 2);
+			m_text.setBounds(cRect.x, cRect.y + 1, cRect.width - arrowWidth, tSize.y);
+			win32Hack.setBounds(cRect.x, cRect.y, cRect.width - arrowWidth, sSize.y);
+		}
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Windows Vista
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Implementation of {@link Layout} for Windows Vista.
+	 */
+	private class WindowsVistaLayout extends Layout {
+		@Override
+		protected Point computeSize(Composite composite, int wHint, int hHint, boolean flushCache) {
+			Point size = m_text.computeSize(SWT.DEFAULT, SWT.DEFAULT);
+			size.x += m_spinner.computeSize(SWT.DEFAULT, SWT.DEFAULT).x - m_spinner.getClientArea().width;
+			// add Text widget margin
+			size.y += 3;
+			// apply hints
+			if (wHint != SWT.DEFAULT) {
+				size.x = Math.min(size.x, wHint);
+			}
+			if (hHint != SWT.DEFAULT) {
+				size.y = Math.min(size.y, hHint);
+			}
+			// OK, final size
+			return size;
+		}
 
-    @Override
-    protected void layout(Composite composite, boolean flushCache) {
-      Rectangle cRect = composite.getClientArea();
-      if (cRect.isEmpty()) {
-        return;
-      }
-      // prepare size of Text
-      Point tSize = m_text.computeSize(SWT.DEFAULT, SWT.DEFAULT);
-      // prepare size of Spinner
-      Point sSize;
-      sSize = m_spinner.computeSize(SWT.DEFAULT, SWT.DEFAULT, flushCache);
-      sSize.y = Math.min(sSize.y, Math.min(tSize.y, cRect.height));
-      sSize.x = Math.min(sSize.x, cRect.width);
-      // prepare width of arrows part of Spinner
-      int arrowWidth = m_button.computeSize(SWT.DEFAULT, SWT.DEFAULT).x;
-      // set bounds for Spinner and Text
-      m_spinner.setBounds(
-          cRect.x + cRect.width - sSize.x + 1,
-          cRect.y - 1,
-          sSize.x,
-          cRect.height + 2);
-      m_text.setBounds(cRect.x, cRect.y + 1, cRect.width - arrowWidth, tSize.y);
-      win32Hack.setBounds(cRect.x, cRect.y, cRect.width - arrowWidth, sSize.y);
-    }
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Linux
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Implementation of {@link Layout} for Linux.
-   */
-  private class LinuxLayout extends Layout {
-    @Override
-    protected Point computeSize(Composite composite, int wHint, int hHint, boolean flushCache) {
-      Point size = m_text.computeSize(SWT.DEFAULT, SWT.DEFAULT);
-      size.x += m_spinner.computeSize(SWT.DEFAULT, SWT.DEFAULT).x - m_spinner.getClientArea().width;
-      // apply hints
-      if (wHint != SWT.DEFAULT) {
-        size.x = Math.min(size.x, wHint);
-      }
-      if (hHint != SWT.DEFAULT) {
-        size.y = Math.min(size.y, hHint);
-      }
-      // OK, final size
-      return size;
-    }
+		@Override
+		protected void layout(Composite composite, boolean flushCache) {
+			Rectangle cRect = composite.getClientArea();
+			if (cRect.isEmpty()) {
+				return;
+			}
+			// prepare size of Text
+			Point tSize = m_text.computeSize(SWT.DEFAULT, SWT.DEFAULT);
+			// prepare size of Spinner
+			Point sSize;
+			sSize = m_spinner.computeSize(SWT.DEFAULT, SWT.DEFAULT, flushCache);
+			sSize.y = Math.min(sSize.y, Math.min(tSize.y, cRect.height));
+			sSize.x = Math.min(sSize.x, cRect.width);
+			// prepare width of arrows part of Spinner
+			int arrowWidth = m_button.computeSize(SWT.DEFAULT, SWT.DEFAULT).x;
+			// set bounds for Spinner and Text
+			m_spinner.setBounds(
+					cRect.x + cRect.width - sSize.x + 1,
+					cRect.y - 1,
+					sSize.x,
+					cRect.height + 2);
+			m_text.setBounds(cRect.x, cRect.y + 1, cRect.width - arrowWidth, tSize.y);
+			win32Hack.setBounds(cRect.x, cRect.y, cRect.width - arrowWidth, sSize.y);
+		}
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Linux
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Implementation of {@link Layout} for Linux.
+	 */
+	private class LinuxLayout extends Layout {
+		@Override
+		protected Point computeSize(Composite composite, int wHint, int hHint, boolean flushCache) {
+			Point size = m_text.computeSize(SWT.DEFAULT, SWT.DEFAULT);
+			size.x += m_spinner.computeSize(SWT.DEFAULT, SWT.DEFAULT).x - m_spinner.getClientArea().width;
+			// apply hints
+			if (wHint != SWT.DEFAULT) {
+				size.x = Math.min(size.x, wHint);
+			}
+			if (hHint != SWT.DEFAULT) {
+				size.y = Math.min(size.y, hHint);
+			}
+			// OK, final size
+			return size;
+		}
 
-    @Override
-    protected void layout(Composite composite, boolean flushCache) {
-      Rectangle cRect = composite.getClientArea();
-      if (cRect.isEmpty()) {
-        return;
-      }
-      // prepare size of Text
-      Point tSize = m_text.computeSize(SWT.DEFAULT, SWT.DEFAULT);
-      // prepare size of Spinner
-      Point sSize;
-      sSize = m_spinner.computeSize(SWT.DEFAULT, SWT.DEFAULT, flushCache);
-      sSize.y = Math.min(sSize.y, Math.min(tSize.y, cRect.height));
-      sSize.x = Math.min(sSize.x, cRect.width);
-      // prepare width of arrows part of Spinner
-      int arrowWidth;
-      {
-        m_spinner.setSize(sSize);
-        arrowWidth = sSize.x - m_spinner.getClientArea().width;
-      }
-      // set bounds for Spinner and Text
-      m_spinner.setBounds(cRect.x + cRect.width - sSize.x, cRect.y - 2, sSize.x, cRect.height + 4);
-      m_text.setBounds(cRect.x, cRect.y, cRect.width - arrowWidth, tSize.y);
-    }
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // MacOSX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Implementation of {@link Layout} for MacOSX.
-   */
-  private class MacLayout extends Layout {
-    @Override
-    protected Point computeSize(Composite composite, int wHint, int hHint, boolean flushCache) {
-      Point size = m_text.computeSize(SWT.DEFAULT, SWT.DEFAULT);
-      size.x += m_spinner.computeSize(SWT.DEFAULT, SWT.DEFAULT).x - m_spinner.getClientArea().width;
-      // add Text widget margin
-      size.y += 4;
-      // apply hints
-      if (wHint != SWT.DEFAULT) {
-        size.x = Math.min(size.x, wHint);
-      }
-      if (hHint != SWT.DEFAULT) {
-        size.y = Math.min(size.y, hHint);
-      }
-      // OK, final size
-      return size;
-    }
+		@Override
+		protected void layout(Composite composite, boolean flushCache) {
+			Rectangle cRect = composite.getClientArea();
+			if (cRect.isEmpty()) {
+				return;
+			}
+			// prepare size of Text
+			Point tSize = m_text.computeSize(SWT.DEFAULT, SWT.DEFAULT);
+			// prepare size of Spinner
+			Point sSize;
+			sSize = m_spinner.computeSize(SWT.DEFAULT, SWT.DEFAULT, flushCache);
+			sSize.y = Math.min(sSize.y, Math.min(tSize.y, cRect.height));
+			sSize.x = Math.min(sSize.x, cRect.width);
+			// prepare width of arrows part of Spinner
+			int arrowWidth;
+			{
+				m_spinner.setSize(sSize);
+				arrowWidth = sSize.x - m_spinner.getClientArea().width;
+			}
+			// set bounds for Spinner and Text
+			m_spinner.setBounds(cRect.x + cRect.width - sSize.x, cRect.y - 2, sSize.x, cRect.height + 4);
+			m_text.setBounds(cRect.x, cRect.y, cRect.width - arrowWidth, tSize.y);
+		}
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// MacOSX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Implementation of {@link Layout} for MacOSX.
+	 */
+	private class MacLayout extends Layout {
+		@Override
+		protected Point computeSize(Composite composite, int wHint, int hHint, boolean flushCache) {
+			Point size = m_text.computeSize(SWT.DEFAULT, SWT.DEFAULT);
+			size.x += m_spinner.computeSize(SWT.DEFAULT, SWT.DEFAULT).x - m_spinner.getClientArea().width;
+			// add Text widget margin
+			size.y += 4;
+			// apply hints
+			if (wHint != SWT.DEFAULT) {
+				size.x = Math.min(size.x, wHint);
+			}
+			if (hHint != SWT.DEFAULT) {
+				size.y = Math.min(size.y, hHint);
+			}
+			// OK, final size
+			return size;
+		}
 
-    @Override
-    protected void layout(Composite composite, boolean flushCache) {
-      Rectangle cRect = composite.getClientArea();
-      if (cRect.isEmpty()) {
-        return;
-      }
-      // prepare size of Text
-      Point tSize = m_text.computeSize(SWT.DEFAULT, SWT.DEFAULT);
-      tSize.y += 4;
-      // prepare size of Spinner
-      Point sSize;
-      sSize = m_spinner.computeSize(SWT.DEFAULT, SWT.DEFAULT, flushCache);
-      sSize.y = Math.min(sSize.y, Math.min(tSize.y, cRect.height));
-      sSize.x = Math.min(sSize.x, cRect.width);
-      // prepare width of arrows part of Spinner
-      int arrowWidth = m_button.computeSize(-1, -1).x;
-      // set bounds for Spinner and Text
-      m_spinner.setBounds(cRect.x + cRect.width - sSize.x, cRect.y, sSize.x, cRect.height);
-      m_text.setBounds(cRect.x, cRect.y + 2, cRect.width - arrowWidth - 2, tSize.y);
-    }
-  }
-  /**
-   * Implementation of {@link Layout} for MacOSX Cocoa.
-   */
-  private class MacCocoaLayout extends Layout {
-    @Override
-    protected Point computeSize(Composite composite, int wHint, int hHint, boolean flushCache) {
-      Point textSize = m_text.computeSize(SWT.DEFAULT, SWT.DEFAULT);
-      Point spinnerSize = m_spinner.computeSize(SWT.DEFAULT, SWT.DEFAULT);
-      int arrowWidth = m_button.computeSize(SWT.DEFAULT, SWT.DEFAULT).x;
-      int width = textSize.x + arrowWidth;
-      int height = Math.max(spinnerSize.y, textSize.y);
-      // apply hints
-      if (wHint != SWT.DEFAULT) {
-        width = Math.min(width, wHint);
-      }
-      if (hHint != SWT.DEFAULT) {
-        height = Math.min(height, hHint);
-      }
-      return new Point(width, height);
-    }
+		@Override
+		protected void layout(Composite composite, boolean flushCache) {
+			Rectangle cRect = composite.getClientArea();
+			if (cRect.isEmpty()) {
+				return;
+			}
+			// prepare size of Text
+			Point tSize = m_text.computeSize(SWT.DEFAULT, SWT.DEFAULT);
+			tSize.y += 4;
+			// prepare size of Spinner
+			Point sSize;
+			sSize = m_spinner.computeSize(SWT.DEFAULT, SWT.DEFAULT, flushCache);
+			sSize.y = Math.min(sSize.y, Math.min(tSize.y, cRect.height));
+			sSize.x = Math.min(sSize.x, cRect.width);
+			// prepare width of arrows part of Spinner
+			int arrowWidth = m_button.computeSize(-1, -1).x;
+			// set bounds for Spinner and Text
+			m_spinner.setBounds(cRect.x + cRect.width - sSize.x, cRect.y, sSize.x, cRect.height);
+			m_text.setBounds(cRect.x, cRect.y + 2, cRect.width - arrowWidth - 2, tSize.y);
+		}
+	}
+	/**
+	 * Implementation of {@link Layout} for MacOSX Cocoa.
+	 */
+	private class MacCocoaLayout extends Layout {
+		@Override
+		protected Point computeSize(Composite composite, int wHint, int hHint, boolean flushCache) {
+			Point textSize = m_text.computeSize(SWT.DEFAULT, SWT.DEFAULT);
+			Point spinnerSize = m_spinner.computeSize(SWT.DEFAULT, SWT.DEFAULT);
+			int arrowWidth = m_button.computeSize(SWT.DEFAULT, SWT.DEFAULT).x;
+			int width = textSize.x + arrowWidth;
+			int height = Math.max(spinnerSize.y, textSize.y);
+			// apply hints
+			if (wHint != SWT.DEFAULT) {
+				width = Math.min(width, wHint);
+			}
+			if (hHint != SWT.DEFAULT) {
+				height = Math.min(height, hHint);
+			}
+			return new Point(width, height);
+		}
 
-    @Override
-    protected void layout(Composite composite, boolean flushCache) {
-      Rectangle clientArea = composite.getClientArea();
-      if (clientArea.isEmpty()) {
-        return;
-      }
-      // prepare size of Spinner
-      Point spinnerSize = m_spinner.computeSize(SWT.DEFAULT, SWT.DEFAULT, flushCache);
-      // prepare width of arrows part of Spinner
-      int arrowWidth = m_button.computeSize(SWT.DEFAULT, SWT.DEFAULT).x;
-      m_spinner.setBounds(clientArea.x + clientArea.width - arrowWidth - 1, clientArea.y
-          + clientArea.height
-          - spinnerSize.y, arrowWidth + 2, spinnerSize.y);
-      m_text.setBounds(
-          clientArea.x + 2,
-          clientArea.y + 2,
-          clientArea.width - arrowWidth - 5,
-          clientArea.y + clientArea.height - 4);
-    }
-  }
+		@Override
+		protected void layout(Composite composite, boolean flushCache) {
+			Rectangle clientArea = composite.getClientArea();
+			if (clientArea.isEmpty()) {
+				return;
+			}
+			// prepare size of Spinner
+			Point spinnerSize = m_spinner.computeSize(SWT.DEFAULT, SWT.DEFAULT, flushCache);
+			// prepare width of arrows part of Spinner
+			int arrowWidth = m_button.computeSize(SWT.DEFAULT, SWT.DEFAULT).x;
+			m_spinner.setBounds(clientArea.x + clientArea.width - arrowWidth - 1, clientArea.y
+					+ clientArea.height
+					- spinnerSize.y, arrowWidth + 2, spinnerSize.y);
+			m_text.setBounds(
+					clientArea.x + 2,
+					clientArea.y + 2,
+					clientArea.width - arrowWidth - 5,
+					clientArea.y + clientArea.height - 4);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // System utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final String OS_NAME = System.getProperty("os.name");
-  private static final String OS_VERSION = System.getProperty("os.version");
-  private static final String WS_TYPE = SWT.getPlatform();
-  private static final boolean IS_OS_MAC_OSX = isOS("Mac OS X");
-  private static final boolean IS_OS_MAC_OSX_COCOA = IS_OS_MAC_OSX && "cocoa".equals(WS_TYPE);
-  private static final boolean IS_OS_LINUX = isOS("Linux") || isOS("LINUX");
-  private static final boolean IS_OS_WINDOWS_XP = isWindowsVersion("5.1");
-  private static final boolean IS_OS_WINDOWS_2003 = isWindowsVersion("5.2");
-  private static final boolean IS_OS_WINDOWS_VISTA = isWindowsVersion("6.0");
-  private static final boolean IS_OS_WINDOWS_7 = isWindowsVersion("6.1");
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// System utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final String OS_NAME = System.getProperty("os.name");
+	private static final String OS_VERSION = System.getProperty("os.version");
+	private static final String WS_TYPE = SWT.getPlatform();
+	private static final boolean IS_OS_MAC_OSX = isOS("Mac OS X");
+	private static final boolean IS_OS_MAC_OSX_COCOA = IS_OS_MAC_OSX && "cocoa".equals(WS_TYPE);
+	private static final boolean IS_OS_LINUX = isOS("Linux") || isOS("LINUX");
+	private static final boolean IS_OS_WINDOWS_XP = isWindowsVersion("5.1");
+	private static final boolean IS_OS_WINDOWS_2003 = isWindowsVersion("5.2");
+	private static final boolean IS_OS_WINDOWS_VISTA = isWindowsVersion("6.0");
+	private static final boolean IS_OS_WINDOWS_7 = isWindowsVersion("6.1");
 
-  private static boolean isOS(String osName) {
-    return OS_NAME != null && OS_NAME.startsWith(osName);
-  }
+	private static boolean isOS(String osName) {
+		return OS_NAME != null && OS_NAME.startsWith(osName);
+	}
 
-  private static boolean isWindowsVersion(String windowsVersion) {
-    return isOS("Windows") && OS_VERSION != null && OS_VERSION.startsWith(windowsVersion);
-  }
+	private static boolean isWindowsVersion(String windowsVersion) {
+		return isOS("Windows") && OS_VERSION != null && OS_VERSION.startsWith(windowsVersion);
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/CSpinnerDeferredNotifier.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/CSpinnerDeferredNotifier.java
index fa5eace9f..1f58606e4 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/CSpinnerDeferredNotifier.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/CSpinnerDeferredNotifier.java
@@ -23,50 +23,50 @@
  * @coverage core.control
  */
 public final class CSpinnerDeferredNotifier {
-  private final CSpinner m_spinner;
-  private final Display m_display;
-  private final int m_timeout;
-  private final Listener m_listener;
+	private final CSpinner m_spinner;
+	private final Display m_display;
+	private final int m_timeout;
+	private final Listener m_listener;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CSpinnerDeferredNotifier(CSpinner spinner, int timeout, Listener listener) {
-    m_spinner = spinner;
-    m_display = m_spinner.getDisplay();
-    m_timeout = timeout;
-    m_listener = listener;
-    addListener();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CSpinnerDeferredNotifier(CSpinner spinner, int timeout, Listener listener) {
+		m_spinner = spinner;
+		m_display = m_spinner.getDisplay();
+		m_timeout = timeout;
+		m_listener = listener;
+		addListener();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Listener
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final int[] m_eventId = new int[1];
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Listener
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final int[] m_eventId = new int[1];
 
-  /**
-   * Handler for single {@link SWT#Selection} event.
-   */
-  private void addListener() {
-    m_spinner.addListener(SWT.Selection, new Listener() {
-      @Override
-      public void handleEvent(final Event event) {
-        m_eventId[0]++;
-        m_display.timerExec(m_timeout, new Runnable() {
-          int m_id = m_eventId[0];
+	/**
+	 * Handler for single {@link SWT#Selection} event.
+	 */
+	private void addListener() {
+		m_spinner.addListener(SWT.Selection, new Listener() {
+			@Override
+			public void handleEvent(final Event event) {
+				m_eventId[0]++;
+				m_display.timerExec(m_timeout, new Runnable() {
+					int m_id = m_eventId[0];
 
-          @Override
-          public void run() {
-            if (m_id == m_eventId[0]) {
-              m_listener.handleEvent(event);
-            }
-          }
-        });
-      }
-    });
-  }
+					@Override
+					public void run() {
+						if (m_id == m_eventId[0]) {
+							m_listener.handleEvent(event);
+						}
+					}
+				});
+			}
+		});
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/CTableCombo.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/CTableCombo.java
index 175bdb5e2..08e1ac51b 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/CTableCombo.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/CTableCombo.java
@@ -44,652 +44,652 @@
  * @coverage core.control
  */
 public class CTableCombo extends Composite {
-  protected Button m_arrow;
-  protected CImageLabel m_text;
-  protected Shell m_popup;
-  protected Table m_table;
-  protected boolean hasFocus;
+	protected Button m_arrow;
+	protected CImageLabel m_text;
+	protected Shell m_popup;
+	protected Table m_table;
+	protected boolean hasFocus;
 
-  //
-  public CTableCombo(Composite parent, int style) {
-    super(parent, style = checkStyle(style));
-    init(parent, style);
-  }
+	//
+	public CTableCombo(Composite parent, int style) {
+		super(parent, style = checkStyle(style));
+		init(parent, style);
+	}
 
-  static int checkStyle(int style) {
-    int mask = SWT.BORDER | SWT.READ_ONLY | SWT.FLAT;
-    return style & mask;
-  }
+	static int checkStyle(int style) {
+		int mask = SWT.BORDER | SWT.READ_ONLY | SWT.FLAT;
+		return style & mask;
+	}
 
-  private void init(Composite parent, int style) {
-    m_arrow = new Button(this, SWT.ARROW | SWT.DOWN | SWT.NO_FOCUS);
-    m_text = new CImageLabel(this, style & ~SWT.BORDER);
-    m_text.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_LIST_BACKGROUND));
-    final Shell shell = getShell();
-    m_popup = new Shell(shell, SWT.NONE);
-    m_table = new Table(m_popup, SWT.FULL_SELECTION);
-    new TableColumn(m_table, SWT.NONE);
-    Listener listener = new Listener() {
-      @Override
-      public void handleEvent(Event event) {
-        if (m_popup == event.widget) {
-          handlePopupEvent(event);
-          return;
-        }
-        if (m_text == event.widget) {
-          handleTextEvent(event);
-          return;
-        }
-        if (m_table == event.widget) {
-          handleTableEvent(event);
-          return;
-        }
-        if (m_arrow == event.widget) {
-          handleArrowEvent(event);
-          return;
-        }
-        if (CTableCombo.this == event.widget) {
-          handleComboEvent(event);
-          return;
-        }
-      }
-    };
-    final Listener shellListener = new Listener() {
-      @Override
-      public void handleEvent(Event event) {
-        switch (event.type) {
-          case SWT.Dispose :
-          case SWT.Move :
-          case SWT.Resize :
-            if (!isDisposed()) {
-              dropDown(false);
-            }
-            break;
-        }
-      }
-    };
-    final int[] comboEvents = {SWT.Dispose, SWT.Move, SWT.Resize};
-    for (int i = 0; i < comboEvents.length; i++) {
-      addListener(comboEvents[i], listener);
-      // HACK: hide popup when parent changed
-      shell.addListener(comboEvents[i], shellListener);
-    }
-    addDisposeListener(new DisposeListener() {
-      @Override
-      public void widgetDisposed(DisposeEvent e) {
-        for (int i = 0; i < comboEvents.length; i++) {
-          shell.removeListener(comboEvents[i], shellListener);
-        }
-      }
-    });
-    int[] popupEvents = {SWT.Close, SWT.Paint, SWT.Deactivate};
-    for (int i = 0; i < popupEvents.length; i++) {
-      m_popup.addListener(popupEvents[i], listener);
-    }
-    int[] textEvents =
-        {
-            SWT.KeyDown,
-            SWT.KeyUp,
-            SWT.Modify,
-            SWT.MouseDown,
-            SWT.MouseUp,
-            SWT.MouseDoubleClick,
-            SWT.Traverse,
-            SWT.FocusIn,
-            SWT.FocusOut};
-    for (int i = 0; i < textEvents.length; i++) {
-      m_text.addListener(textEvents[i], listener);
-    }
-    int[] tableEvents =
-        {
-            SWT.MouseUp,
-            SWT.Selection,
-            SWT.Traverse,
-            SWT.KeyDown,
-            SWT.KeyUp,
-            SWT.FocusIn,
-            SWT.FocusOut};
-    for (int i = 0; i < tableEvents.length; i++) {
-      m_table.addListener(tableEvents[i], listener);
-    }
-    int[] arrowEvents = {SWT.Selection, SWT.FocusIn, SWT.FocusOut};
-    for (int i = 0; i < arrowEvents.length; i++) {
-      m_arrow.addListener(arrowEvents[i], listener);
-    }
-  }
+	private void init(Composite parent, int style) {
+		m_arrow = new Button(this, SWT.ARROW | SWT.DOWN | SWT.NO_FOCUS);
+		m_text = new CImageLabel(this, style & ~SWT.BORDER);
+		m_text.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_LIST_BACKGROUND));
+		final Shell shell = getShell();
+		m_popup = new Shell(shell, SWT.NONE);
+		m_table = new Table(m_popup, SWT.FULL_SELECTION);
+		new TableColumn(m_table, SWT.NONE);
+		Listener listener = new Listener() {
+			@Override
+			public void handleEvent(Event event) {
+				if (m_popup == event.widget) {
+					handlePopupEvent(event);
+					return;
+				}
+				if (m_text == event.widget) {
+					handleTextEvent(event);
+					return;
+				}
+				if (m_table == event.widget) {
+					handleTableEvent(event);
+					return;
+				}
+				if (m_arrow == event.widget) {
+					handleArrowEvent(event);
+					return;
+				}
+				if (CTableCombo.this == event.widget) {
+					handleComboEvent(event);
+					return;
+				}
+			}
+		};
+		final Listener shellListener = new Listener() {
+			@Override
+			public void handleEvent(Event event) {
+				switch (event.type) {
+				case SWT.Dispose :
+				case SWT.Move :
+				case SWT.Resize :
+					if (!isDisposed()) {
+						dropDown(false);
+					}
+					break;
+				}
+			}
+		};
+		final int[] comboEvents = {SWT.Dispose, SWT.Move, SWT.Resize};
+		for (int i = 0; i < comboEvents.length; i++) {
+			addListener(comboEvents[i], listener);
+			// HACK: hide popup when parent changed
+			shell.addListener(comboEvents[i], shellListener);
+		}
+		addDisposeListener(new DisposeListener() {
+			@Override
+			public void widgetDisposed(DisposeEvent e) {
+				for (int i = 0; i < comboEvents.length; i++) {
+					shell.removeListener(comboEvents[i], shellListener);
+				}
+			}
+		});
+		int[] popupEvents = {SWT.Close, SWT.Paint, SWT.Deactivate};
+		for (int i = 0; i < popupEvents.length; i++) {
+			m_popup.addListener(popupEvents[i], listener);
+		}
+		int[] textEvents =
+			{
+					SWT.KeyDown,
+					SWT.KeyUp,
+					SWT.Modify,
+					SWT.MouseDown,
+					SWT.MouseUp,
+					SWT.MouseDoubleClick,
+					SWT.Traverse,
+					SWT.FocusIn,
+					SWT.FocusOut};
+		for (int i = 0; i < textEvents.length; i++) {
+			m_text.addListener(textEvents[i], listener);
+		}
+		int[] tableEvents =
+			{
+					SWT.MouseUp,
+					SWT.Selection,
+					SWT.Traverse,
+					SWT.KeyDown,
+					SWT.KeyUp,
+					SWT.FocusIn,
+					SWT.FocusOut};
+		for (int i = 0; i < tableEvents.length; i++) {
+			m_table.addListener(tableEvents[i], listener);
+		}
+		int[] arrowEvents = {SWT.Selection, SWT.FocusIn, SWT.FocusOut};
+		for (int i = 0; i < arrowEvents.length; i++) {
+			m_arrow.addListener(arrowEvents[i], listener);
+		}
+	}
 
-  protected void handleTableEvent(Event event) {
-    switch (event.type) {
-      case SWT.FocusIn : {
-        if (hasFocus) {
-          return;
-        }
-        hasFocus = true;
-        Event e = new Event();
-        e.time = event.time;
-        notifyListeners(SWT.FocusIn, e);
-        break;
-      }
-      case SWT.FocusOut : {
-        final int time = event.time;
-        event.display.asyncExec(new Runnable() {
-          @Override
-          public void run() {
-            if (CTableCombo.this.isDisposed()) {
-              return;
-            }
-            Control focusControl = getDisplay().getFocusControl();
-            if (focusControl == m_text || focusControl == m_arrow) {
-              return;
-            }
-            hasFocus = false;
-            Event e = new Event();
-            e.time = time;
-            notifyListeners(SWT.FocusOut, e);
-          }
-        });
-        break;
-      }
-      case SWT.MouseUp : {
-        if (event.button != 1) {
-          return;
-        }
-        dropDown(false);
-        Event e = new Event();
-        e.time = event.time;
-        notifyListeners(SWT.DefaultSelection, e);
-        break;
-      }
-      case SWT.Selection : {
-        int index = m_table.getSelectionIndex();
-        if (index == -1) {
-          return;
-        }
-        TableItem item = m_table.getItem(index);
-        m_text.setText(item.getText());
-        m_text.setImage(item.getImage());
-        //m_text.selectAll();
-        m_table.setSelection(index);
-        Event e = new Event();
-        e.time = event.time;
-        e.stateMask = event.stateMask;
-        e.doit = event.doit;
-        notifyListeners(SWT.Selection, e);
-        event.doit = e.doit;
-        dropDown(false);
-        break;
-      }
-      case SWT.Traverse : {
-        switch (event.detail) {
-          case SWT.TRAVERSE_TAB_NEXT :
-          case SWT.TRAVERSE_RETURN :
-          case SWT.TRAVERSE_ESCAPE :
-          case SWT.TRAVERSE_ARROW_PREVIOUS :
-          case SWT.TRAVERSE_ARROW_NEXT :
-            event.doit = false;
-            break;
-        }
-        Event e = new Event();
-        e.time = event.time;
-        e.detail = event.detail;
-        e.doit = event.doit;
-        e.keyCode = event.keyCode;
-        notifyListeners(SWT.Traverse, e);
-        event.doit = e.doit;
-        break;
-      }
-      case SWT.KeyUp : {
-        Event e = new Event();
-        e.time = event.time;
-        e.character = event.character;
-        e.keyCode = event.keyCode;
-        e.stateMask = event.stateMask;
-        notifyListeners(SWT.KeyUp, e);
-        break;
-      }
-      case SWT.KeyDown : {
-        if (event.character == SWT.ESC) {
-          // escape key cancels popups
-          dropDown(false);
-        }
-        if (event.character == SWT.CR || event.character == '\t') {
-          // Enter and Tab cause default selection
-          dropDown(false);
-          Event e = new Event();
-          e.time = event.time;
-          e.stateMask = event.stateMask;
-          notifyListeners(SWT.DefaultSelection, e);
-        }
-        // At this point the widget may have been disposed.
-        // If so, do not continue.
-        if (isDisposed()) {
-          break;
-        }
-        Event e = new Event();
-        e.time = event.time;
-        e.character = event.character;
-        e.keyCode = event.keyCode;
-        e.stateMask = event.stateMask;
-        notifyListeners(SWT.KeyDown, e);
-        break;
-      }
-    }
-  }
+	protected void handleTableEvent(Event event) {
+		switch (event.type) {
+		case SWT.FocusIn : {
+			if (hasFocus) {
+				return;
+			}
+			hasFocus = true;
+			Event e = new Event();
+			e.time = event.time;
+			notifyListeners(SWT.FocusIn, e);
+			break;
+		}
+		case SWT.FocusOut : {
+			final int time = event.time;
+			event.display.asyncExec(new Runnable() {
+				@Override
+				public void run() {
+					if (CTableCombo.this.isDisposed()) {
+						return;
+					}
+					Control focusControl = getDisplay().getFocusControl();
+					if (focusControl == m_text || focusControl == m_arrow) {
+						return;
+					}
+					hasFocus = false;
+					Event e = new Event();
+					e.time = time;
+					notifyListeners(SWT.FocusOut, e);
+				}
+			});
+			break;
+		}
+		case SWT.MouseUp : {
+			if (event.button != 1) {
+				return;
+			}
+			dropDown(false);
+			Event e = new Event();
+			e.time = event.time;
+			notifyListeners(SWT.DefaultSelection, e);
+			break;
+		}
+		case SWT.Selection : {
+			int index = m_table.getSelectionIndex();
+			if (index == -1) {
+				return;
+			}
+			TableItem item = m_table.getItem(index);
+			m_text.setText(item.getText());
+			m_text.setImage(item.getImage());
+			//m_text.selectAll();
+			m_table.setSelection(index);
+			Event e = new Event();
+			e.time = event.time;
+			e.stateMask = event.stateMask;
+			e.doit = event.doit;
+			notifyListeners(SWT.Selection, e);
+			event.doit = e.doit;
+			dropDown(false);
+			break;
+		}
+		case SWT.Traverse : {
+			switch (event.detail) {
+			case SWT.TRAVERSE_TAB_NEXT :
+			case SWT.TRAVERSE_RETURN :
+			case SWT.TRAVERSE_ESCAPE :
+			case SWT.TRAVERSE_ARROW_PREVIOUS :
+			case SWT.TRAVERSE_ARROW_NEXT :
+				event.doit = false;
+				break;
+			}
+			Event e = new Event();
+			e.time = event.time;
+			e.detail = event.detail;
+			e.doit = event.doit;
+			e.keyCode = event.keyCode;
+			notifyListeners(SWT.Traverse, e);
+			event.doit = e.doit;
+			break;
+		}
+		case SWT.KeyUp : {
+			Event e = new Event();
+			e.time = event.time;
+			e.character = event.character;
+			e.keyCode = event.keyCode;
+			e.stateMask = event.stateMask;
+			notifyListeners(SWT.KeyUp, e);
+			break;
+		}
+		case SWT.KeyDown : {
+			if (event.character == SWT.ESC) {
+				// escape key cancels popups
+				dropDown(false);
+			}
+			if (event.character == SWT.CR || event.character == '\t') {
+				// Enter and Tab cause default selection
+				dropDown(false);
+				Event e = new Event();
+				e.time = event.time;
+				e.stateMask = event.stateMask;
+				notifyListeners(SWT.DefaultSelection, e);
+			}
+			// At this point the widget may have been disposed.
+			// If so, do not continue.
+			if (isDisposed()) {
+				break;
+			}
+			Event e = new Event();
+			e.time = event.time;
+			e.character = event.character;
+			e.keyCode = event.keyCode;
+			e.stateMask = event.stateMask;
+			notifyListeners(SWT.KeyDown, e);
+			break;
+		}
+		}
+	}
 
-  protected void handlePopupEvent(Event event) {
-    switch (event.type) {
-      case SWT.Paint :
-        // draw black rectangle around list
-        Rectangle listRect = m_table.getBounds();
-        Color black = getDisplay().getSystemColor(SWT.COLOR_BLACK);
-        event.gc.setForeground(black);
-        event.gc.drawRectangle(0, 0, listRect.width + 1, listRect.height + 1);
-        break;
-      case SWT.Close :
-        event.doit = false;
-        dropDown(false);
-        break;
-    }
-  }
+	protected void handlePopupEvent(Event event) {
+		switch (event.type) {
+		case SWT.Paint :
+			// draw black rectangle around list
+			Rectangle listRect = m_table.getBounds();
+			Color black = getDisplay().getSystemColor(SWT.COLOR_BLACK);
+			event.gc.setForeground(black);
+			event.gc.drawRectangle(0, 0, listRect.width + 1, listRect.height + 1);
+			break;
+		case SWT.Close :
+			event.doit = false;
+			dropDown(false);
+			break;
+		}
+	}
 
-  protected void handleComboEvent(Event event) {
-    switch (event.type) {
-      case SWT.Dispose :
-        if (m_popup != null && !m_popup.isDisposed()) {
-          m_popup.dispose();
-        }
-        m_popup = null;
-        m_text = null;
-        m_arrow = null;
-        break;
-      case SWT.Move :
-        dropDown(false);
-        break;
-      case SWT.Resize :
-        internalLayout();
-        break;
-    }
-  }
+	protected void handleComboEvent(Event event) {
+		switch (event.type) {
+		case SWT.Dispose :
+			if (m_popup != null && !m_popup.isDisposed()) {
+				m_popup.dispose();
+			}
+			m_popup = null;
+			m_text = null;
+			m_arrow = null;
+			break;
+		case SWT.Move :
+			dropDown(false);
+			break;
+		case SWT.Resize :
+			internalLayout();
+			break;
+		}
+	}
 
-  protected void handleArrowEvent(Event event) {
-    switch (event.type) {
-      case SWT.FocusIn : {
-        if (hasFocus) {
-          return;
-        }
-        hasFocus = true;
-        Event e = new Event();
-        e.time = event.time;
-        notifyListeners(SWT.FocusIn, e);
-        break;
-      }
-      case SWT.Selection : {
-        boolean wasDropped = isDropped();
-        dropDown(!wasDropped);
-        if (wasDropped) {
-          m_text.forceFocus();
-        }
-        break;
-      }
-    }
-  }
+	protected void handleArrowEvent(Event event) {
+		switch (event.type) {
+		case SWT.FocusIn : {
+			if (hasFocus) {
+				return;
+			}
+			hasFocus = true;
+			Event e = new Event();
+			e.time = event.time;
+			notifyListeners(SWT.FocusIn, e);
+			break;
+		}
+		case SWT.Selection : {
+			boolean wasDropped = isDropped();
+			dropDown(!wasDropped);
+			if (wasDropped) {
+				m_text.forceFocus();
+			}
+			break;
+		}
+		}
+	}
 
-  protected void handleTextEvent(Event event) {
-    switch (event.type) {
-      case SWT.FocusIn : {
-        if (hasFocus) {
-          return;
-        }
-        hasFocus = true;
-        //if (getEditable())
-        Event e = new Event();
-        e.time = event.time;
-        notifyListeners(SWT.FocusIn, e);
-        break;
-      }
-      case SWT.FocusOut : {
-        final int time = event.time;
-        event.display.asyncExec(new Runnable() {
-          @Override
-          public void run() {
-            if (CTableCombo.this.isDisposed()) {
-              return;
-            }
-            Control focusControl = getDisplay().getFocusControl();
-            if (focusControl == m_table
-                || focusControl == m_arrow
-                || focusControl != null
-                && focusControl.getParent() == CTableCombo.this) {
-              return;
-            }
-            hasFocus = false;
-            Event e = new Event();
-            e.time = time;
-            notifyListeners(SWT.FocusOut, e);
-          }
-        });
-        break;
-      }
-      case SWT.KeyDown : {
-        if (event.character == SWT.ESC) { // escape key cancels popup
-          dropDown(false);
-        }
-        if (event.character == SWT.CR) {
-          dropDown(false);
-          Event e = new Event();
-          e.time = event.time;
-          e.stateMask = event.stateMask;
-          notifyListeners(SWT.DefaultSelection, e);
-        }
-        // At this point the widget may have been disposed.
-        // If so, do not continue.
-        if (isDisposed()) {
-          break;
-        }
-        if (event.character == '+') {
-          dropDown(true);
-        }
-        if (isDropped()) {
-          if (event.keyCode == SWT.ARROW_UP || event.keyCode == SWT.ARROW_DOWN) {
-            int oldIndex = getSelectionIndex();
-            if (event.keyCode == SWT.ARROW_UP) {
-              select(Math.max(oldIndex - 1, 0));
-            } else {
-              select(Math.min(oldIndex + 1, getItemCount() - 1));
-            }
-            if (oldIndex != getSelectionIndex()) {
-              Event e = new Event();
-              e.time = event.time;
-              e.stateMask = event.stateMask;
-              notifyListeners(SWT.Selection, e);
-            }
-            // At this point the widget may have been disposed.
-            // If so, do not continue.
-            if (isDisposed()) {
-              break;
-            }
-          }
-        }
-        if (Character.isLetter(event.character)) {
-          int oldIndex = getSelectionIndex();
-          int index = -1;
-          for (int i = 0; i < getItemCount(); i++) {
-            String item = getItem(i).toUpperCase(Locale.ENGLISH);
-            if (item.length() != 0 && item.charAt(0) == Character.toUpperCase(event.character)) {
-              index = i;
-              break;
-            }
-          }
-          if (index != -1) {
-            select(Math.max(index, 0));
-            if (oldIndex != getSelectionIndex()) {
-              Event e = new Event();
-              e.time = event.time;
-              e.stateMask = event.stateMask;
-              notifyListeners(SWT.Selection, e);
-            }
-          }
-        }
-        Event e = new Event();
-        e.time = event.time;
-        e.character = event.character;
-        e.keyCode = event.keyCode;
-        e.stateMask = event.stateMask;
-        if (m_text != null && !m_text.isDisposed()) {
-          notifyListeners(SWT.KeyDown, e);
-        }
-        break;
-      }
-      case SWT.KeyUp : {
-        Event e = new Event();
-        e.time = event.time;
-        e.character = event.character;
-        e.keyCode = event.keyCode;
-        e.stateMask = event.stateMask;
-        notifyListeners(SWT.KeyUp, e);
-        break;
-      }
-      case SWT.Modify : {
-        m_table.deselectAll();
-        Event e = new Event();
-        e.time = event.time;
-        notifyListeners(SWT.Modify, e);
-        break;
-      }
-      case SWT.MouseDown : {
-        if (event.button != 1) {
-          return;
-        }
-        m_text.forceFocus();
-        boolean dropped = isDropped();
-        dropDown(!dropped);
-        if (!dropped) {
-          m_text.forceFocus();
-        }
-        break;
-      }
-      case SWT.MouseDoubleClick : {
-        notifyListeners(SWT.MouseDoubleClick, event);
-        break;
-      }
-      case SWT.Traverse : {
-        switch (event.detail) {
-          case SWT.TRAVERSE_RETURN :
-          case SWT.TRAVERSE_ARROW_PREVIOUS :
-          case SWT.TRAVERSE_ARROW_NEXT :
-            // The enter causes default selection and
-            // the arrow keys are used to manipulate the list contents so
-            // do not use them for traversal.
-            event.doit = false;
-            break;
-          case SWT.TRAVERSE_TAB_NEXT :
-          case SWT.TRAVERSE_TAB_PREVIOUS :
-            event.doit = true;
-            break;
-        }
-        Event e = new Event();
-        e.time = event.time;
-        e.detail = event.detail;
-        e.doit = event.doit;
-        e.keyCode = event.keyCode;
-        notifyListeners(SWT.Traverse, e);
-        event.doit = e.doit;
-        break;
-      }
-    }
-  }
+	protected void handleTextEvent(Event event) {
+		switch (event.type) {
+		case SWT.FocusIn : {
+			if (hasFocus) {
+				return;
+			}
+			hasFocus = true;
+			//if (getEditable())
+			Event e = new Event();
+			e.time = event.time;
+			notifyListeners(SWT.FocusIn, e);
+			break;
+		}
+		case SWT.FocusOut : {
+			final int time = event.time;
+			event.display.asyncExec(new Runnable() {
+				@Override
+				public void run() {
+					if (CTableCombo.this.isDisposed()) {
+						return;
+					}
+					Control focusControl = getDisplay().getFocusControl();
+					if (focusControl == m_table
+							|| focusControl == m_arrow
+							|| focusControl != null
+							&& focusControl.getParent() == CTableCombo.this) {
+						return;
+					}
+					hasFocus = false;
+					Event e = new Event();
+					e.time = time;
+					notifyListeners(SWT.FocusOut, e);
+				}
+			});
+			break;
+		}
+		case SWT.KeyDown : {
+			if (event.character == SWT.ESC) { // escape key cancels popup
+				dropDown(false);
+			}
+			if (event.character == SWT.CR) {
+				dropDown(false);
+				Event e = new Event();
+				e.time = event.time;
+				e.stateMask = event.stateMask;
+				notifyListeners(SWT.DefaultSelection, e);
+			}
+			// At this point the widget may have been disposed.
+			// If so, do not continue.
+			if (isDisposed()) {
+				break;
+			}
+			if (event.character == '+') {
+				dropDown(true);
+			}
+			if (isDropped()) {
+				if (event.keyCode == SWT.ARROW_UP || event.keyCode == SWT.ARROW_DOWN) {
+					int oldIndex = getSelectionIndex();
+					if (event.keyCode == SWT.ARROW_UP) {
+						select(Math.max(oldIndex - 1, 0));
+					} else {
+						select(Math.min(oldIndex + 1, getItemCount() - 1));
+					}
+					if (oldIndex != getSelectionIndex()) {
+						Event e = new Event();
+						e.time = event.time;
+						e.stateMask = event.stateMask;
+						notifyListeners(SWT.Selection, e);
+					}
+					// At this point the widget may have been disposed.
+					// If so, do not continue.
+					if (isDisposed()) {
+						break;
+					}
+				}
+			}
+			if (Character.isLetter(event.character)) {
+				int oldIndex = getSelectionIndex();
+				int index = -1;
+				for (int i = 0; i < getItemCount(); i++) {
+					String item = getItem(i).toUpperCase(Locale.ENGLISH);
+					if (item.length() != 0 && item.charAt(0) == Character.toUpperCase(event.character)) {
+						index = i;
+						break;
+					}
+				}
+				if (index != -1) {
+					select(Math.max(index, 0));
+					if (oldIndex != getSelectionIndex()) {
+						Event e = new Event();
+						e.time = event.time;
+						e.stateMask = event.stateMask;
+						notifyListeners(SWT.Selection, e);
+					}
+				}
+			}
+			Event e = new Event();
+			e.time = event.time;
+			e.character = event.character;
+			e.keyCode = event.keyCode;
+			e.stateMask = event.stateMask;
+			if (m_text != null && !m_text.isDisposed()) {
+				notifyListeners(SWT.KeyDown, e);
+			}
+			break;
+		}
+		case SWT.KeyUp : {
+			Event e = new Event();
+			e.time = event.time;
+			e.character = event.character;
+			e.keyCode = event.keyCode;
+			e.stateMask = event.stateMask;
+			notifyListeners(SWT.KeyUp, e);
+			break;
+		}
+		case SWT.Modify : {
+			m_table.deselectAll();
+			Event e = new Event();
+			e.time = event.time;
+			notifyListeners(SWT.Modify, e);
+			break;
+		}
+		case SWT.MouseDown : {
+			if (event.button != 1) {
+				return;
+			}
+			m_text.forceFocus();
+			boolean dropped = isDropped();
+			dropDown(!dropped);
+			if (!dropped) {
+				m_text.forceFocus();
+			}
+			break;
+		}
+		case SWT.MouseDoubleClick : {
+			notifyListeners(SWT.MouseDoubleClick, event);
+			break;
+		}
+		case SWT.Traverse : {
+			switch (event.detail) {
+			case SWT.TRAVERSE_RETURN :
+			case SWT.TRAVERSE_ARROW_PREVIOUS :
+			case SWT.TRAVERSE_ARROW_NEXT :
+				// The enter causes default selection and
+				// the arrow keys are used to manipulate the list contents so
+				// do not use them for traversal.
+				event.doit = false;
+				break;
+			case SWT.TRAVERSE_TAB_NEXT :
+			case SWT.TRAVERSE_TAB_PREVIOUS :
+				event.doit = true;
+				break;
+			}
+			Event e = new Event();
+			e.time = event.time;
+			e.detail = event.detail;
+			e.doit = event.doit;
+			e.keyCode = event.keyCode;
+			notifyListeners(SWT.Traverse, e);
+			event.doit = e.doit;
+			break;
+		}
+		}
+	}
 
-  private void dropDown(boolean drop) {
-    if (drop == isDropped()) {
-      return;
-    }
-    if (!drop) {
-      m_popup.setVisible(false);
-      m_text.setFocus();
-      return;
-    }
-    int index = m_table.getSelectionIndex();
-    if (index != -1) {
-      m_table.setTopIndex(index);
-      m_table.setSelection(index);
-    }
-    m_table.pack();
-    Point point = getParent().toDisplay(getLocation());
-    Point comboSize = getSize();
-    //Rectangle tableRect = m_table.getBounds();
-    //int width = Math.max(comboSize.x, tableRect.width + 2);
-    int width = comboSize.x - 1;
-    // only one column
-    m_table.getColumn(0).setWidth(width - 5);
-    if (!(m_popup.getLayout() instanceof FillLayout)) {
-      m_popup.setLayout(new FillLayout());
-    }
-    int itemCount = m_table.getItemCount();
-    if (itemCount > 20) {
-      itemCount = 20;
-    }
-    int height =
-        Math.min(
-            m_table.getItemHeight() * itemCount + 5,
-            Display.getCurrent().getClientArea().height - point.y - 20);
-    m_popup.setBounds(point.x, point.y + comboSize.y, width, height);
-    m_popup.layout();
-    m_popup.setVisible(true);
-    m_text.setFocus();
-    if (index != -1) {
-      m_table.setTopIndex(index);
-      m_table.setSelection(index);
-    }
-  }
+	private void dropDown(boolean drop) {
+		if (drop == isDropped()) {
+			return;
+		}
+		if (!drop) {
+			m_popup.setVisible(false);
+			m_text.setFocus();
+			return;
+		}
+		int index = m_table.getSelectionIndex();
+		if (index != -1) {
+			m_table.setTopIndex(index);
+			m_table.setSelection(index);
+		}
+		m_table.pack();
+		Point point = getParent().toDisplay(getLocation());
+		Point comboSize = getSize();
+		//Rectangle tableRect = m_table.getBounds();
+		//int width = Math.max(comboSize.x, tableRect.width + 2);
+		int width = comboSize.x - 1;
+		// only one column
+		m_table.getColumn(0).setWidth(width - 5);
+		if (!(m_popup.getLayout() instanceof FillLayout)) {
+			m_popup.setLayout(new FillLayout());
+		}
+		int itemCount = m_table.getItemCount();
+		if (itemCount > 20) {
+			itemCount = 20;
+		}
+		int height =
+				Math.min(
+						m_table.getItemHeight() * itemCount + 5,
+						Display.getCurrent().getClientArea().height - point.y - 20);
+		m_popup.setBounds(point.x, point.y + comboSize.y, width, height);
+		m_popup.layout();
+		m_popup.setVisible(true);
+		m_text.setFocus();
+		if (index != -1) {
+			m_table.setTopIndex(index);
+			m_table.setSelection(index);
+		}
+	}
 
-  @Override
-  public Point computeSize(int wHint, int hHint, boolean changed) {
-    checkWidget();
-    int width = 0, height = 0;
-    Point textSize = m_text.computeSize(wHint, SWT.DEFAULT, changed);
-    Point arrowSize = m_arrow.computeSize(SWT.DEFAULT, SWT.DEFAULT, changed);
-    int tableWidth;
-    {
-      TableColumn column = m_table.getColumn(0);
-      column.pack();
-      tableWidth = column.getWidth();
-    }
-    //
-    int borderWidth = getBorderWidth();
-    height = Math.max(hHint, Math.max(textSize.y, arrowSize.y) + 2 * borderWidth);
-    width = Math.max(wHint, Math.max(textSize.x + arrowSize.x, tableWidth) + 2 * borderWidth);
-    //
-    return new Point(width, height);
-  }
+	@Override
+	public Point computeSize(int wHint, int hHint, boolean changed) {
+		checkWidget();
+		int width = 0, height = 0;
+		Point textSize = m_text.computeSize(wHint, SWT.DEFAULT, changed);
+		Point arrowSize = m_arrow.computeSize(SWT.DEFAULT, SWT.DEFAULT, changed);
+		int tableWidth;
+		{
+			TableColumn column = m_table.getColumn(0);
+			column.pack();
+			tableWidth = column.getWidth();
+		}
+		//
+		int borderWidth = getBorderWidth();
+		height = Math.max(hHint, Math.max(textSize.y, arrowSize.y) + 2 * borderWidth);
+		width = Math.max(wHint, Math.max(textSize.x + arrowSize.x, tableWidth) + 2 * borderWidth);
+		//
+		return new Point(width, height);
+	}
 
-  private void internalLayout() {
-    if (isDropped()) {
-      dropDown(false);
-    }
-    Rectangle rect = getClientArea();
-    int width = rect.width;
-    int height = rect.height;
-    Point arrowSize = m_arrow.computeSize(SWT.DEFAULT, height);
-    m_text.setBounds(rect.x, rect.y, width - arrowSize.x, height);
-    m_arrow.setBounds(rect.x + width - arrowSize.x, rect.y, arrowSize.x, arrowSize.y);
-  }
+	private void internalLayout() {
+		if (isDropped()) {
+			dropDown(false);
+		}
+		Rectangle rect = getClientArea();
+		int width = rect.width;
+		int height = rect.height;
+		Point arrowSize = m_arrow.computeSize(SWT.DEFAULT, height);
+		m_text.setBounds(rect.x, rect.y, width - arrowSize.x, height);
+		m_arrow.setBounds(rect.x + width - arrowSize.x, rect.y, arrowSize.x, arrowSize.y);
+	}
 
-  private boolean isDropped() {
-    return m_popup.isVisible();
-  }
+	private boolean isDropped() {
+		return m_popup.isVisible();
+	}
 
-  @Override
-  public boolean isFocusControl() {
-    checkWidget();
-    if (m_text.isFocusControl()
-        || m_arrow.isFocusControl()
-        || m_table.isFocusControl()
-        || m_popup.isFocusControl()) {
-      return true;
-    }
-    return super.isFocusControl();
-  }
+	@Override
+	public boolean isFocusControl() {
+		checkWidget();
+		if (m_text.isFocusControl()
+				|| m_arrow.isFocusControl()
+				|| m_table.isFocusControl()
+				|| m_popup.isFocusControl()) {
+			return true;
+		}
+		return super.isFocusControl();
+	}
 
-  public void select(int index) {
-    checkWidget();
-    if (index == -1) {
-      m_table.deselectAll();
-      m_text.setText(""); //$NON-NLS-1$
-      m_text.setImage(null);
-      return;
-    }
-    if (0 <= index && index < m_table.getItemCount()) {
-      if (index != getSelectionIndex()) {
-        TableItem item = m_table.getItem(index);
-        m_text.setText(item.getText());
-        m_text.setImage(item.getImage());
-        m_table.select(index);
-        m_table.showSelection();
-      }
-    }
-  }
+	public void select(int index) {
+		checkWidget();
+		if (index == -1) {
+			m_table.deselectAll();
+			m_text.setText(""); //$NON-NLS-1$
+			m_text.setImage(null);
+			return;
+		}
+		if (0 <= index && index < m_table.getItemCount()) {
+			if (index != getSelectionIndex()) {
+				TableItem item = m_table.getItem(index);
+				m_text.setText(item.getText());
+				m_text.setImage(item.getImage());
+				m_table.select(index);
+				m_table.showSelection();
+			}
+		}
+	}
 
-  @Override
-  public void setEnabled(boolean enabled) {
-    super.setEnabled(enabled);
-    if (enabled) {
-      m_text.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_LIST_BACKGROUND));
-    } else {
-      m_text.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_WIDGET_LIGHT_SHADOW));
-    }
-  }
+	@Override
+	public void setEnabled(boolean enabled) {
+		super.setEnabled(enabled);
+		if (enabled) {
+			m_text.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_LIST_BACKGROUND));
+		} else {
+			m_text.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_WIDGET_LIGHT_SHADOW));
+		}
+	}
 
-  public String getItem(int index) {
-    checkWidget();
-    return m_table.getItem(index).getText();
-  }
+	public String getItem(int index) {
+		checkWidget();
+		return m_table.getItem(index).getText();
+	}
 
-  public int getSelectionIndex() {
-    checkWidget();
-    return m_table.getSelectionIndex();
-  }
+	public int getSelectionIndex() {
+		checkWidget();
+		return m_table.getSelectionIndex();
+	}
 
-  public void removeAll() {
-    checkWidget();
-    m_text.setText(""); //$NON-NLS-1$
-    m_text.setImage(null);
-    m_table.removeAll();
-  }
+	public void removeAll() {
+		checkWidget();
+		m_text.setText(""); //$NON-NLS-1$
+		m_text.setImage(null);
+		m_table.removeAll();
+	}
 
-  public int indexOf(String string) {
-    return indexOf(string, 0);
-  }
+	public int indexOf(String string) {
+		return indexOf(string, 0);
+	}
 
-  public int indexOf(String string, int start) {
-    checkWidget();
-    if (string == null) {
-      return -1;
-    }
-    TableItem[] items = m_table.getItems();
-    for (int i = start; i < items.length; i++) {
-      TableItem item = items[i];
-      if (item.getText().equalsIgnoreCase(string)) {
-        return i;
-      }
-    }
-    return -1;
-  }
+	public int indexOf(String string, int start) {
+		checkWidget();
+		if (string == null) {
+			return -1;
+		}
+		TableItem[] items = m_table.getItems();
+		for (int i = start; i < items.length; i++) {
+			TableItem item = items[i];
+			if (item.getText().equalsIgnoreCase(string)) {
+				return i;
+			}
+		}
+		return -1;
+	}
 
-  public String getText() {
-    return m_text.getText();
-  }
+	public String getText() {
+		return m_text.getText();
+	}
 
-  public int getItemCount() {
-    checkWidget();
-    return m_table.getItemCount();
-  }
+	public int getItemCount() {
+		checkWidget();
+		return m_table.getItemCount();
+	}
 
-  protected void setText(String string) {
-    m_text.setText(string);
-  }
+	protected void setText(String string) {
+		m_text.setText(string);
+	}
 
-  protected void setImage(Image image) {
-    m_text.setImage(image);
-  }
+	protected void setImage(Image image) {
+		m_text.setImage(image);
+	}
 
-  public void add(String text) {
-    add(text, null);
-  }
+	public void add(String text) {
+		add(text, null);
+	}
 
-  public void add(String text, Image image) {
-    checkWidget();
-    TableItem item = new TableItem(m_table, SWT.NONE);
-    item.setText(text);
-    item.setImage(image);
-  }
+	public void add(String text, Image image) {
+		checkWidget();
+		TableItem item = new TableItem(m_table, SWT.NONE);
+		item.setText(text);
+		item.setImage(image);
+	}
 
-  public void addSelectionListener(SelectionListener listener) {
-    checkWidget();
-    if (listener == null) {
-      SWT.error(SWT.ERROR_NULL_ARGUMENT);
-    }
-    TypedListener typedListener = new TypedListener(listener);
-    addListener(SWT.Selection, typedListener);
-    addListener(SWT.DefaultSelection, typedListener);
-  }
+	public void addSelectionListener(SelectionListener listener) {
+		checkWidget();
+		if (listener == null) {
+			SWT.error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		TypedListener typedListener = new TypedListener(listener);
+		addListener(SWT.Selection, typedListener);
+		addListener(SWT.DefaultSelection, typedListener);
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/GhostWindow.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/GhostWindow.java
index e9cb30aeb..6c1f102a4 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/GhostWindow.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/GhostWindow.java
@@ -31,147 +31,147 @@
  * @coverage core.control
  */
 public abstract class GhostWindow extends Window {
-  // constants
-  private static final int INITIAL_DISTANCE = 35;
-  private static final int ALPHA_MULTIPLIER = 5;
-  private static final int MAX_DISTANCE = 100;
-  private static final double SQRT_OF_TWO = 1.4142;
-  // fields
-  private GhostListener m_listener;
+	// constants
+	private static final int INITIAL_DISTANCE = 35;
+	private static final int ALPHA_MULTIPLIER = 5;
+	private static final int MAX_DISTANCE = 100;
+	private static final double SQRT_OF_TWO = 1.4142;
+	// fields
+	private GhostListener m_listener;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected GhostWindow(Shell parentShell) {
-    super(parentShell);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected GhostWindow(Shell parentShell) {
+		super(parentShell);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Manage ghost listener
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void create() {
-    super.create();
-    m_listener = new GhostListener(getShell());
-    DesignerPlugin.getStandardDisplay().addFilter(SWT.MouseMove, m_listener);
-    getShell().addDisposeListener(new DisposeListener() {
-      @Override
-      public void widgetDisposed(DisposeEvent e) {
-        DesignerPlugin.getStandardDisplay().removeFilter(SWT.MouseMove, m_listener);
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Manage ghost listener
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void create() {
+		super.create();
+		m_listener = new GhostListener(getShell());
+		DesignerPlugin.getStandardDisplay().addFilter(SWT.MouseMove, m_listener);
+		getShell().addDisposeListener(new DisposeListener() {
+			@Override
+			public void widgetDisposed(DisposeEvent e) {
+				DesignerPlugin.getStandardDisplay().removeFilter(SWT.MouseMove, m_listener);
+			}
+		});
+	}
 
-  @Override
-  public int open() {
-    Shell shell = getShell();
-    if (shell == null || shell.isDisposed()) {
-      create();
-    }
-    setup();
-    getShell().setVisible(true);
-    return 0;
-  }
+	@Override
+	public int open() {
+		Shell shell = getShell();
+		if (shell == null || shell.isDisposed()) {
+			create();
+		}
+		setup();
+		getShell().setVisible(true);
+		return 0;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Moves the window into position related to cursor and sets the appropriate initial alpha value.
-   */
-  private final void setup() {
-    Point mouseLocation = DesignerPlugin.getStandardDisplay().getCursorLocation();
-    getShell().setLocation(mouseLocation.x + INITIAL_DISTANCE, mouseLocation.y + INITIAL_DISTANCE);
-    setAlpha(getShell(), (int) (255 - INITIAL_DISTANCE * ALPHA_MULTIPLIER * SQRT_OF_TWO));
-    m_listener.setEnabled(true);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Moves the window into position related to cursor and sets the appropriate initial alpha value.
+	 */
+	private final void setup() {
+		Point mouseLocation = DesignerPlugin.getStandardDisplay().getCursorLocation();
+		getShell().setLocation(mouseLocation.x + INITIAL_DISTANCE, mouseLocation.y + INITIAL_DISTANCE);
+		setAlpha(getShell(), (int) (255 - INITIAL_DISTANCE * ALPHA_MULTIPLIER * SQRT_OF_TWO));
+		m_listener.setEnabled(true);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Ghost tracking
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static class GhostListener implements Listener {
-    private final Shell m_shell;
-    private final Display m_display;
-    private boolean m_enabled = true;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Ghost tracking
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static class GhostListener implements Listener {
+		private final Shell m_shell;
+		private final Display m_display;
+		private boolean m_enabled = true;
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public GhostListener(Shell shell) {
-      m_shell = shell;
-      m_display = DesignerPlugin.getStandardDisplay();
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public GhostListener(Shell shell) {
+			m_shell = shell;
+			m_display = DesignerPlugin.getStandardDisplay();
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Listener
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public void handleEvent(Event event) {
-      if (!m_enabled) {
-        return;
-      }
-      // calculate the distance to window
-      Point mouseLocation = m_display.getCursorLocation();
-      Point shellLocation = m_shell.getLocation();
-      Point shellSize = m_shell.getSize();
-      Interval shellWidth = new Interval(shellLocation.x, shellSize.x);
-      Interval shellHeight = new Interval(shellLocation.y, shellSize.y);
-      int distanceX = shellWidth.distance(mouseLocation.x);
-      int distanceY = shellHeight.distance(mouseLocation.y);
-      boolean inside = distanceX == 0 && distanceY == 0;
-      int distance = (int) Math.sqrt(distanceX * distanceX + distanceY * distanceY);
-      // if the mouse moved too far then the user don't need this window
-      if (distance > MAX_DISTANCE) {
-        m_enabled = false;
-        setAlpha(m_shell, 0);
-        // for platforms which doesn't support alpha
-        if (getAlpha(m_shell) == 255) {
-          m_shell.setVisible(false);
-        }
-        return;
-      }
-      // if inside, don't set alpha again and again, this flickering for me
-      if (inside) {
-        if (getAlpha(m_shell) < 255) {
-          setAlpha(m_shell, 255);
-        }
-      } else {
-        // proportionally set alpha
-        int alpha = 255 - distance * ALPHA_MULTIPLIER;
-        setAlpha(m_shell, alpha > 0 ? alpha : 0);
-      }
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Listener
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public void handleEvent(Event event) {
+			if (!m_enabled) {
+				return;
+			}
+			// calculate the distance to window
+			Point mouseLocation = m_display.getCursorLocation();
+			Point shellLocation = m_shell.getLocation();
+			Point shellSize = m_shell.getSize();
+			Interval shellWidth = new Interval(shellLocation.x, shellSize.x);
+			Interval shellHeight = new Interval(shellLocation.y, shellSize.y);
+			int distanceX = shellWidth.distance(mouseLocation.x);
+			int distanceY = shellHeight.distance(mouseLocation.y);
+			boolean inside = distanceX == 0 && distanceY == 0;
+			int distance = (int) Math.sqrt(distanceX * distanceX + distanceY * distanceY);
+			// if the mouse moved too far then the user don't need this window
+			if (distance > MAX_DISTANCE) {
+				m_enabled = false;
+				setAlpha(m_shell, 0);
+				// for platforms which doesn't support alpha
+				if (getAlpha(m_shell) == 255) {
+					m_shell.setVisible(false);
+				}
+				return;
+			}
+			// if inside, don't set alpha again and again, this flickering for me
+			if (inside) {
+				if (getAlpha(m_shell) < 255) {
+					setAlpha(m_shell, 255);
+				}
+			} else {
+				// proportionally set alpha
+				int alpha = 255 - distance * ALPHA_MULTIPLIER;
+				setAlpha(m_shell, alpha > 0 ? alpha : 0);
+			}
+		}
 
-    /**
-     * Enable this listener when setting up the window.
-     */
-    public final void setEnabled(boolean enabled) {
-      m_enabled = enabled;
-    }
-  }
+		/**
+		 * Enable this listener when setting up the window.
+		 */
+		public final void setEnabled(boolean enabled) {
+			m_enabled = enabled;
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Alpha helpers
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static void setAlpha(Shell shell, int alpha) {
-    OSSupport.get().setAlpha(shell, alpha);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Alpha helpers
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static void setAlpha(Shell shell, int alpha) {
+		OSSupport.get().setAlpha(shell, alpha);
+	}
 
-  private static int getAlpha(Shell shell) {
-    return OSSupport.get().getAlpha(shell);
-  }
+	private static int getAlpha(Shell shell) {
+		return OSSupport.get().getAlpha(shell);
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/LineControl.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/LineControl.java
index 5ba5f18ab..e328d7387 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/LineControl.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/LineControl.java
@@ -22,25 +22,25 @@
  * @coverage core.control
  */
 public final class LineControl extends Canvas {
-  private final boolean m_horizontal;
+	private final boolean m_horizontal;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public LineControl(Composite parent, int style) {
-    super(parent, style);
-    m_horizontal = (style & SWT.HORIZONTAL) != 0;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public LineControl(Composite parent, int style) {
+		super(parent, style);
+		m_horizontal = (style & SWT.HORIZONTAL) != 0;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Size
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Point computeSize(int hint, int hint2, boolean changed) {
-    return new Point(m_horizontal ? hint : 1, m_horizontal ? 1 : hint2);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Size
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Point computeSize(int hint, int hint2, boolean changed) {
+		return new Point(m_horizontal ? hint : 1, m_horizontal ? 1 : hint2);
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/Messages.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/Messages.java
index 521837a90..5b689fecf 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/Messages.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/Messages.java
@@ -3,20 +3,20 @@
 import org.eclipse.osgi.util.NLS;
 
 public class Messages extends NLS {
-  private static final String BUNDLE_NAME = "org.eclipse.wb.core.controls.messages"; //$NON-NLS-1$
-  public static String CSpinner_canNotParse;
-  public static String CSpinner_outOfRange;
-  public static String FlyoutControlComposite_dockBottom;
-  public static String FlyoutControlComposite_dockLeft;
-  public static String FlyoutControlComposite_dockManager;
-  public static String FlyoutControlComposite_dockRight;
-  public static String FlyoutControlComposite_dockTop;
-  public static String FlyoutControlComposite_title;
-  static {
-    // initialize resource bundle
-    NLS.initializeMessages(BUNDLE_NAME, Messages.class);
-  }
+	private static final String BUNDLE_NAME = "org.eclipse.wb.core.controls.messages"; //$NON-NLS-1$
+	public static String CSpinner_canNotParse;
+	public static String CSpinner_outOfRange;
+	public static String FlyoutControlComposite_dockBottom;
+	public static String FlyoutControlComposite_dockLeft;
+	public static String FlyoutControlComposite_dockManager;
+	public static String FlyoutControlComposite_dockRight;
+	public static String FlyoutControlComposite_dockTop;
+	public static String FlyoutControlComposite_title;
+	static {
+		// initialize resource bundle
+		NLS.initializeMessages(BUNDLE_NAME, Messages.class);
+	}
 
-  private Messages() {
-  }
+	private Messages() {
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/PageBook.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/PageBook.java
index 9c48bc39f..178b53482 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/PageBook.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/PageBook.java
@@ -24,92 +24,92 @@
  * @coverage core.control
  */
 public final class PageBook extends Composite {
-  private Control m_currentPage;
+	private Control m_currentPage;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public PageBook(Composite parent, int style) {
-    super(parent, style);
-    setLayout(new PageBookLayout());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public PageBook(Composite parent, int style) {
+		super(parent, style);
+		setLayout(new PageBookLayout());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the currently displaying page.
-   */
-  public Control getPage() {
-    return m_currentPage;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the currently displaying page.
+	 */
+	public Control getPage() {
+		return m_currentPage;
+	}
 
-  /**
-   * Shows the given page. This method has no effect if the given page is not contained in this
-   * {@link PageBook}.
-   *
-   * @param page
-   *          the page to show
-   */
-  public void showPage(Control page) {
-    // check page to show
-    if (page == m_currentPage) {
-      return;
-    }
-    if (page.getParent() != this) {
-      return;
-    }
-    // replace page
-    Control oldPage = m_currentPage;
-    m_currentPage = page;
-    // show new page
-    if (page != null) {
-      if (!page.isDisposed()) {
-        page.setVisible(true);
-        layout(true);
-      }
-    }
-    // hide old *after* new page has been made visible in order to avoid flashing
-    if (oldPage != null && !oldPage.isDisposed()) {
-      oldPage.setVisible(false);
-    }
-  }
+	/**
+	 * Shows the given page. This method has no effect if the given page is not contained in this
+	 * {@link PageBook}.
+	 *
+	 * @param page
+	 *          the page to show
+	 */
+	public void showPage(Control page) {
+		// check page to show
+		if (page == m_currentPage) {
+			return;
+		}
+		if (page.getParent() != this) {
+			return;
+		}
+		// replace page
+		Control oldPage = m_currentPage;
+		m_currentPage = page;
+		// show new page
+		if (page != null) {
+			if (!page.isDisposed()) {
+				page.setVisible(true);
+				layout(true);
+			}
+		}
+		// hide old *after* new page has been made visible in order to avoid flashing
+		if (oldPage != null && !oldPage.isDisposed()) {
+			oldPage.setVisible(false);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Internal layout
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private class PageBookLayout extends Layout {
-    @Override
-    protected Point computeSize(Composite composite, int wHint, int hHint, boolean flushCache) {
-      if (wHint != SWT.DEFAULT && hHint != SWT.DEFAULT) {
-        return new Point(wHint, hHint);
-      }
-      Point result = null;
-      if (m_currentPage != null) {
-        result = m_currentPage.computeSize(wHint, hHint, flushCache);
-      } else {
-        result = new Point(0, 0);
-      }
-      if (wHint != SWT.DEFAULT) {
-        result.x = wHint;
-      }
-      if (hHint != SWT.DEFAULT) {
-        result.y = hHint;
-      }
-      return result;
-    }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Internal layout
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private class PageBookLayout extends Layout {
+		@Override
+		protected Point computeSize(Composite composite, int wHint, int hHint, boolean flushCache) {
+			if (wHint != SWT.DEFAULT && hHint != SWT.DEFAULT) {
+				return new Point(wHint, hHint);
+			}
+			Point result = null;
+			if (m_currentPage != null) {
+				result = m_currentPage.computeSize(wHint, hHint, flushCache);
+			} else {
+				result = new Point(0, 0);
+			}
+			if (wHint != SWT.DEFAULT) {
+				result.x = wHint;
+			}
+			if (hHint != SWT.DEFAULT) {
+				result.y = hHint;
+			}
+			return result;
+		}
 
-    @Override
-    protected void layout(Composite composite, boolean flushCache) {
-      if (m_currentPage != null) {
-        m_currentPage.setBounds(composite.getClientArea());
-      }
-    }
-  }
+		@Override
+		protected void layout(Composite composite, boolean flushCache) {
+			if (m_currentPage != null) {
+				m_currentPage.setBounds(composite.getClientArea());
+			}
+		}
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/SelfOrientingSashForm.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/SelfOrientingSashForm.java
index 449d0c112..eea0bf48b 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/SelfOrientingSashForm.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/SelfOrientingSashForm.java
@@ -29,121 +29,121 @@
  * @coverage core.control
  */
 public class SelfOrientingSashForm extends SashForm {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Initialize a newly created control to have the given parent and style. The style describes the
-   * behavior and appearance of this control.
-   * <p>
-   * The style value is either one of the style constants defined in the class <code>SWT</code>
-   * which is applicable to instances of this class, or must be built by <em>bitwise OR</em>'ing
-   * together (that is, using the <code>int</code> "|" operator) two or more of those
-   * <code>SWT</code> style constants. The class description for all SWT widget classes should
-   * include a comment which describes the style constants which are applicable to the class.
-   * </p>
-   *
-   * @param parent
-   *          a widget which will be the parent of the new instance (not null)
-   * @param style
-   *          the style of widget to construct
-   *
-   * @exception IllegalArgumentException
-   *              <ul>
-   *              <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
-   *              </ul>
-   * @exception SWTException
-   *              <ul>
-   *              <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the
-   *              parent</li>
-   *              <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
-   *              </ul>
-   */
-  public SelfOrientingSashForm(Composite parent, int style) {
-    super(parent, style);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Initialize a newly created control to have the given parent and style. The style describes the
+	 * behavior and appearance of this control.
+	 * <p>
+	 * The style value is either one of the style constants defined in the class <code>SWT</code>
+	 * which is applicable to instances of this class, or must be built by <em>bitwise OR</em>'ing
+	 * together (that is, using the <code>int</code> "|" operator) two or more of those
+	 * <code>SWT</code> style constants. The class description for all SWT widget classes should
+	 * include a comment which describes the style constants which are applicable to the class.
+	 * </p>
+	 *
+	 * @param parent
+	 *          a widget which will be the parent of the new instance (not null)
+	 * @param style
+	 *          the style of widget to construct
+	 *
+	 * @exception IllegalArgumentException
+	 *              <ul>
+	 *              <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+	 *              </ul>
+	 * @exception SWTException
+	 *              <ul>
+	 *              <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the
+	 *              parent</li>
+	 *              <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
+	 *              </ul>
+	 */
+	public SelfOrientingSashForm(Composite parent, int style) {
+		super(parent, style);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Layout
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Returns SWT.HORIZONTAL if the controls in the SashForm are laid out side by side or
-   * SWT.VERTICAL if the controls in the SashForm are laid out top to bottom.
-   *
-   * @return SWT.HORIZONTAL or SWT.VERTICAL
-   */
-  @Override
-  public int getOrientation() {
-    int currentOrientation = super.getOrientation();
-    if (inSetOrientation) {
-      return currentOrientation;
-    }
-    int preferredOrientation = isDisposed() ? currentOrientation : getPreferredOrientation();
-    if (currentOrientation != preferredOrientation) {
-      setOrientation(preferredOrientation);
-    }
-    return preferredOrientation;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Layout
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Returns SWT.HORIZONTAL if the controls in the SashForm are laid out side by side or
+	 * SWT.VERTICAL if the controls in the SashForm are laid out top to bottom.
+	 *
+	 * @return SWT.HORIZONTAL or SWT.VERTICAL
+	 */
+	@Override
+	public int getOrientation() {
+		int currentOrientation = super.getOrientation();
+		if (inSetOrientation) {
+			return currentOrientation;
+		}
+		int preferredOrientation = isDisposed() ? currentOrientation : getPreferredOrientation();
+		if (currentOrientation != preferredOrientation) {
+			setOrientation(preferredOrientation);
+		}
+		return preferredOrientation;
+	}
 
-  boolean inSetOrientation = false;
+	boolean inSetOrientation = false;
 
-  @Override
-  public void setOrientation(int orientation) {
-    if (inSetOrientation) {
-      return;
-    }
-    inSetOrientation = true;
-    super.setOrientation(orientation);
-    inSetOrientation = false;
-  }
+	@Override
+	public void setOrientation(int orientation) {
+		if (inSetOrientation) {
+			return;
+		}
+		inSetOrientation = true;
+		super.setOrientation(orientation);
+		inSetOrientation = false;
+	}
 
-  /**
-   * If the receiver has a layout, ask the layout to <em>lay out</em> (that is, set the size and
-   * location of) the receiver's children. If the argument is <code>true</code> the layout must not
-   * rely on any cached information it is keeping about the children. If it is <code>false</code>
-   * the layout may (potentially) simplify the work it is doing by assuming that the state of the
-   * none of the receiver's children has changed since the last layout. If the receiver does not
-   * have a layout, do nothing.
-   *
-   * @param changed
-   *          <code>true</code> if the layout must flush its caches, and <code>false</code>
-   *          otherwise
-   *
-   * @exception SWTException
-   *              <ul>
-   *              <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
-   *              <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the
-   *              receiver</li>
-   *              </ul>
-   */
-  @Override
-  public void layout(boolean changed) {
-    Rectangle area;
-    int oldOrientation, newOrientation;
-    area = getClientArea();
-    if (area.width > 0 && area.height > 0) {
-      oldOrientation = super.getOrientation();
-      newOrientation = SWT.HORIZONTAL;
-      if (area.width < area.height) {
-        newOrientation = SWT.VERTICAL;
-      }
-      if (newOrientation != oldOrientation) {
-        setOrientation(newOrientation);
-        changed = true;
-      }
-    }
-    super.layout(changed);
-  }
+	/**
+	 * If the receiver has a layout, ask the layout to <em>lay out</em> (that is, set the size and
+	 * location of) the receiver's children. If the argument is <code>true</code> the layout must not
+	 * rely on any cached information it is keeping about the children. If it is <code>false</code>
+	 * the layout may (potentially) simplify the work it is doing by assuming that the state of the
+	 * none of the receiver's children has changed since the last layout. If the receiver does not
+	 * have a layout, do nothing.
+	 *
+	 * @param changed
+	 *          <code>true</code> if the layout must flush its caches, and <code>false</code>
+	 *          otherwise
+	 *
+	 * @exception SWTException
+	 *              <ul>
+	 *              <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+	 *              <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the
+	 *              receiver</li>
+	 *              </ul>
+	 */
+	@Override
+	public void layout(boolean changed) {
+		Rectangle area;
+		int oldOrientation, newOrientation;
+		area = getClientArea();
+		if (area.width > 0 && area.height > 0) {
+			oldOrientation = super.getOrientation();
+			newOrientation = SWT.HORIZONTAL;
+			if (area.width < area.height) {
+				newOrientation = SWT.VERTICAL;
+			}
+			if (newOrientation != oldOrientation) {
+				setOrientation(newOrientation);
+				changed = true;
+			}
+		}
+		super.layout(changed);
+	}
 
-  private int getPreferredOrientation() {
-    Rectangle area = getClientArea();
-    if (area.width > 0 && area.height > 0 && area.width < area.height) {
-      return SWT.VERTICAL;
-    }
-    return SWT.HORIZONTAL;
-  }
+	private int getPreferredOrientation() {
+		Rectangle area = getClientArea();
+		if (area.width > 0 && area.height > 0 && area.width < area.height) {
+			return SWT.VERTICAL;
+		}
+		return SWT.HORIZONTAL;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/Separator.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/Separator.java
index 51fc1ec30..c22354112 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/Separator.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/Separator.java
@@ -27,47 +27,47 @@
  * @coverage core.control
  */
 public final class Separator extends Composite {
-  private static Font BOLD_FONT;
-  private final Label m_title;
+	private static Font BOLD_FONT;
+	private final Label m_title;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public Separator(Composite parent, int style) {
-    super(parent, style);
-    GridLayoutFactory.create(this).noMargins().columns(2).spacingH(8);
-    {
-      m_title = new Label(this, SWT.NONE);
-      GridDataFactory.create(m_title).alignVM();
-      // set font
-      if (BOLD_FONT == null) {
-        BOLD_FONT = DrawUtils.getBoldFont(m_title.getFont());
-      }
-      m_title.setFont(BOLD_FONT);
-    }
-    {
-      Label separator = new Label(this, SWT.SEPARATOR | SWT.HORIZONTAL);
-      GridDataFactory.create(separator).grabH().fillH().alignVM();
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public Separator(Composite parent, int style) {
+		super(parent, style);
+		GridLayoutFactory.create(this).noMargins().columns(2).spacingH(8);
+		{
+			m_title = new Label(this, SWT.NONE);
+			GridDataFactory.create(m_title).alignVM();
+			// set font
+			if (BOLD_FONT == null) {
+				BOLD_FONT = DrawUtils.getBoldFont(m_title.getFont());
+			}
+			m_title.setFont(BOLD_FONT);
+		}
+		{
+			Label separator = new Label(this, SWT.SEPARATOR | SWT.HORIZONTAL);
+			GridDataFactory.create(separator).grabH().fillH().alignVM();
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets the text to display.
-   */
-  public void setText(String text) {
-    m_title.setText(text);
-    layout();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets the text to display.
+	 */
+	public void setText(String text) {
+		m_title.setText(text);
+		layout();
+	}
 
-  @Override
-  public void setForeground(Color color) {
-    m_title.setForeground(color);
-  }
+	@Override
+	public void setForeground(Color color) {
+		m_title.setForeground(color);
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/flyout/FlyoutControlComposite.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/flyout/FlyoutControlComposite.java
index e6c7d9932..a6d7c8545 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/flyout/FlyoutControlComposite.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/flyout/FlyoutControlComposite.java
@@ -51,906 +51,906 @@
  * @coverage core.control
  */
 public final class FlyoutControlComposite extends Composite {
-  private static final int RESIZE_WIDTH = 5;
-  private static final int TITLE_LINES = 30;
-  private static final int TITLE_MARGIN = 5;
-  private static final Font TITLE_FONT = JFaceResources.getFontRegistry().getBold(
-      JFaceResources.DEFAULT_FONT);
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Images
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final Image PIN = loadImage("icons/pin.gif");
-  private static final Image ARROW_LEFT = loadImage("icons/arrow_left.gif");
-  private static final Image ARROW_RIGHT = loadImage("icons/arrow_right.gif");
-  private static final Image ARROW_TOP = loadImage("icons/arrow_top.gif");
-  private static final Image ARROW_BOTTOM = loadImage("icons/arrow_bottom.gif");
-
-  private static Image loadImage(String path) {
-    return DrawUtils.loadImage(FlyoutControlComposite.class, path);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance fields
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final IFlyoutPreferences m_preferences;
-  private final FlyoutContainer m_flyoutContainer;
-  private int m_minWidth = 150;
-  private int m_validDockLocations = -1;
-  private final List<IFlyoutMenuContributor> m_menuContributors =
-      new ArrayList<IFlyoutMenuContributor>();
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FlyoutControlComposite(Composite parent, int style, IFlyoutPreferences preferences) {
-    super(parent, style);
-    m_preferences = preferences;
-    // add listeners
-    addListener(SWT.Resize, new Listener() {
-      @Override
-      public void handleEvent(Event event) {
-        if (getShell().getMinimized()) {
-          return;
-        }
-        layout();
-      }
-    });
-    // create container for flyout control
-    m_flyoutContainer = new FlyoutContainer(this, SWT.NO_BACKGROUND);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parents
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the parent {@link Composite} for flyout {@link Control}.
-   */
-  public Composite getFlyoutParent() {
-    return m_flyoutContainer;
-  }
-
-  /**
-   * @return the parent {@link Composite} for client {@link Control}.
-   */
-  public Composite getClientParent() {
-    return this;
-  }
-
-  /**
-   * Sets the bit set with valid docking locations.
-   */
-  public void setValidDockLocations(int validDockLocations) {
-    m_validDockLocations = validDockLocations;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets the minimal width of flyout.
-   */
-  public void setMinWidth(int minWidth) {
-    m_minWidth = minWidth;
-  }
-
-  /**
-   * Sets the text of title.
-   */
-  public void setTitleText(String text) {
-    m_flyoutContainer.setTitleText(text);
-  }
-
-  /**
-   * Adds new {@link IFlyoutMenuContributor}.
-   */
-  public void addMenuContributor(IFlyoutMenuContributor contributor) {
-    if (!m_menuContributors.contains(contributor)) {
-      m_menuContributors.add(contributor);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Layout
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void layout() {
-    Rectangle clientArea = getClientArea();
-    int state = m_preferences.getState();
-    Control client = getChildren()[1];
-    // check, may be "clientArea" is empty, for example because CTabFolder page is not visible
-    if (clientArea.width == 0 || clientArea.height == 0) {
-      return;
-    }
-    // check, maybe flyout has no Control, so "client" should fill client area
-    if (m_flyoutContainer.getControl() == null) {
-      m_flyoutContainer.setBounds(0, 0, 0, 0);
-      client.setBounds(clientArea);
-      return;
-    }
-    // prepare width to display
-    int width;
-    int offset;
-    if (state == IFlyoutPreferences.STATE_OPEN) {
-      width = m_preferences.getWidth();
-      // limit maximum value
-      if (isHorizontal()) {
-        width = Math.min(clientArea.width / 2, width);
-      } else {
-        width = Math.min(clientArea.height / 2, width);
-      }
-      // limit minimum value
-      width = Math.max(width, m_minWidth);
-      width = Math.max(width, 2 * m_flyoutContainer.m_titleHeight + m_flyoutContainer.m_titleWidth);
-      // remember actual width
-      m_preferences.setWidth(width);
-      //
-      offset = width;
-    } else if (state == IFlyoutPreferences.STATE_EXPANDED) {
-      offset = m_flyoutContainer.m_titleHeight;
-      width = m_preferences.getWidth();
-    } else {
-      width = m_flyoutContainer.m_titleHeight;
-      offset = width;
-    }
-    // change bounds for flyout container and client control
-    {
-      if (isWest()) {
-        m_flyoutContainer.setBounds(0, 0, width, clientArea.height);
-        client.setBounds(offset, 0, clientArea.width - offset, clientArea.height);
-      } else if (isEast()) {
-        m_flyoutContainer.setBounds(clientArea.width - width, 0, width, clientArea.height);
-        client.setBounds(0, 0, clientArea.width - offset, clientArea.height);
-      } else if (isNorth()) {
-        m_flyoutContainer.setBounds(0, 0, clientArea.width, width);
-        client.setBounds(0, offset, clientArea.width, clientArea.height - offset);
-      } else if (isSouth()) {
-        m_flyoutContainer.setBounds(0, clientArea.height - width, clientArea.width, width);
-        client.setBounds(0, 0, clientArea.width, clientArea.height - offset);
-      }
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Internal utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private boolean isHorizontal() {
-    return isWest() || isEast();
-  }
-
-  private boolean isWest() {
-    return getDockLocation() == IFlyoutPreferences.DOCK_WEST;
-  }
-
-  private boolean isEast() {
-    return getDockLocation() == IFlyoutPreferences.DOCK_EAST;
-  }
-
-  private boolean isNorth() {
-    return getDockLocation() == IFlyoutPreferences.DOCK_NORTH;
-  }
-
-  private boolean isSouth() {
-    return getDockLocation() == IFlyoutPreferences.DOCK_SOUTH;
-  }
-
-  /**
-   * @return <code>true</code> if given docking location is valid.
-   */
-  private boolean isValidDockLocation(int location) {
-    return (location & m_validDockLocations) == location;
-  }
-
-  /**
-   * @return current docking location.
-   */
-  private int getDockLocation() {
-    return m_preferences.getDockLocation();
-  }
-
-  /**
-   * Sets new docking location.
-   */
-  private void setDockLocation(int dockLocation) {
-    m_preferences.setDockLocation(dockLocation);
-    layout();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // FlyoutContainer
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Container for flyout {@link Control}.
-   *
-   * @author scheglov_ke
-   */
-  private final class FlyoutContainer extends Composite {
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Container
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public FlyoutContainer(Composite parent, int style) {
-      super(parent, style);
-      configureMenu();
-      updateTitleImage(Messages.FlyoutControlComposite_title);
-      // add listeners
-      addListener(SWT.Dispose, new Listener() {
-        @Override
-        public void handleEvent(Event event) {
-          if (m_titleImage != null) {
-            m_titleImage.dispose();
-            m_titleImageRotated.dispose();
-            m_titleImage = null;
-            m_titleImageRotated = null;
-          }
-          if (m_backImage != null) {
-            m_backImage.dispose();
-            m_backImage = null;
-          }
-        }
-      });
-      {
-        Listener listener = new Listener() {
-          @Override
-          public void handleEvent(Event event) {
-            layout();
-          }
-        };
-        addListener(SWT.Move, listener);
-        addListener(SWT.Resize, listener);
-      }
-      addListener(SWT.Paint, new Listener() {
-        @Override
-        public void handleEvent(Event event) {
-          handlePaint(event.gc);
-        }
-      });
-      // mouse listeners
-      addMouseListener(new MouseAdapter() {
-        @Override
-        public void mouseDown(MouseEvent event) {
-          if (event.button == 1) {
-            handle_mouseDown(event);
-          }
-        }
-
-        @Override
-        public void mouseUp(MouseEvent event) {
-          if (event.button == 1) {
-            handle_mouseUp(event);
-          }
-        }
-      });
-      addMouseTrackListener(new MouseTrackAdapter() {
-        @Override
-        public void mouseExit(MouseEvent e) {
-          m_stateHover = false;
-          redraw();
-          setCursor(null);
-        }
-
-        @Override
-        public void mouseHover(MouseEvent e) {
-          handle_mouseHover();
-        }
-      });
-      addMouseMoveListener(new MouseMoveListener() {
-        @Override
-        public void mouseMove(MouseEvent event) {
-          handle_mouseMove(event);
-        }
-      });
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Events: mouse
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    private boolean m_resize;
-    private boolean m_stateHover;
-
-    /**
-     * Handler for {@link SWT#MouseDown} event.
-     */
-    private void handle_mouseDown(MouseEvent event) {
-      if (m_stateHover) {
-        int state = m_preferences.getState();
-        if (state == IFlyoutPreferences.STATE_OPEN) {
-          state = IFlyoutPreferences.STATE_COLLAPSED;
-        } else {
-          state = IFlyoutPreferences.STATE_OPEN;
-        }
-        m_preferences.setState(state);
-        redraw();
-        FlyoutControlComposite.this.layout();
-      } else if (getCursor() == ICursorConstants.SIZEWE || getCursor() == ICursorConstants.SIZENS) {
-        m_resize = true;
-      } else if (getCursor() == ICursorConstants.SIZEALL) {
-        handleDocking();
-      }
-    }
-
-    /**
-     * Handler for {@link SWT#MouseUp} event.
-     */
-    private void handle_mouseUp(MouseEvent event) {
-      if (m_resize) {
-        m_resize = false;
-        handle_mouseMove(event);
-      }
-    }
-
-    /**
-     * Handler for {@link SWT#MouseMove} event.
-     */
-    private void handle_mouseMove(MouseEvent event) {
-      final FlyoutControlComposite container = FlyoutControlComposite.this;
-      if (m_resize) {
-        // prepare width
-        int width;
-        if (isHorizontal()) {
-          width = getSize().x;
-        } else {
-          width = getSize().y;
-        }
-        // prepare new width
-        int newWidth = width;
-        if (isWest()) {
-          newWidth = event.x + RESIZE_WIDTH / 2;
-        } else if (isEast()) {
-          newWidth = width - event.x + RESIZE_WIDTH / 2;
-        } else if (isNorth()) {
-          newWidth = event.y + RESIZE_WIDTH / 2;
-        } else if (isSouth()) {
-          newWidth = width - event.y + RESIZE_WIDTH / 2;
-        }
-        // update width
-        if (newWidth != width) {
-          m_preferences.setWidth(newWidth);
-          redraw();
-          container.layout();
-        }
-      } else {
-        Rectangle clientArea = getClientArea();
-        boolean inside = clientArea.contains(event.x, event.y);
-        int x = event.x;
-        int y = event.y;
-        if (inside) {
-          // check for state
-          {
-            boolean oldStateHover = m_stateHover;
-            if (isEast()) {
-              m_stateHover = x > clientArea.width - m_titleHeight && y < m_titleHeight;
-            } else {
-              m_stateHover = x < m_titleHeight && y < m_titleHeight;
-            }
-            if (m_stateHover != oldStateHover) {
-              redraw();
-            }
-            if (m_stateHover) {
-              setCursor(null);
-              return;
-            }
-          }
-          // check for resize band
-          if (isOpenExpanded()) {
-            if (isWest() && x >= clientArea.width - RESIZE_WIDTH) {
-              setCursor(ICursorConstants.SIZEWE);
-            } else if (isEast() && x <= RESIZE_WIDTH) {
-              setCursor(ICursorConstants.SIZEWE);
-            } else if (isNorth() && y >= clientArea.height - RESIZE_WIDTH) {
-              setCursor(ICursorConstants.SIZENS);
-            } else if (isSouth() && y <= RESIZE_WIDTH) {
-              setCursor(ICursorConstants.SIZENS);
-            } else {
-              setCursor(null);
-            }
-          }
-          // check for docking
-          if (getCursor() == null) {
-            setCursor(ICursorConstants.SIZEALL);
-          }
-        } else {
-          setCursor(null);
-        }
-      }
-    }
-
-    /**
-     * Handler for {@link SWT#MouseHover} event - temporary expands flyout and collapse again when
-     * mouse moves above client.
-     */
-    private void handle_mouseHover() {
-      if (m_preferences.getState() == IFlyoutPreferences.STATE_COLLAPSED && !m_stateHover) {
-        m_preferences.setState(IFlyoutPreferences.STATE_EXPANDED);
-        //
-        final FlyoutControlComposite container = FlyoutControlComposite.this;
-        container.layout();
-        // add listeners
-        Listener listener = new Listener() {
-          @Override
-          public void handleEvent(Event event) {
-            if (event.type == SWT.Dispose) {
-              getDisplay().removeFilter(SWT.MouseMove, this);
-            } else {
-              Point p = ((Control) event.widget).toDisplay(event.x, event.y);
-              // during resize mouse can be temporary outside of flyout - ignore
-              if (m_resize) {
-                return;
-              }
-              // mouse in in flyout container - ignore
-              if (getClientArea().contains(toControl(p.x, p.y))) {
-                return;
-              }
-              // mouse is in full container - collapse
-              if (container.getClientArea().contains(container.toControl(p.x, p.y))) {
-                getDisplay().removeFilter(SWT.MouseMove, this);
-                // it is possible, that user restored (OPEN) flyout, so collapse only if we still in expand state
-                if (m_preferences.getState() == IFlyoutPreferences.STATE_EXPANDED) {
-                  m_preferences.setState(IFlyoutPreferences.STATE_COLLAPSED);
-                  container.layout();
-                }
-              }
-            }
-          }
-        };
-        addListener(SWT.Dispose, listener);
-        getDisplay().addFilter(SWT.MouseMove, listener);
-      }
-    }
-
-    /**
-     * Handler for docking.
-     */
-    private void handleDocking() {
-      final FlyoutControlComposite container = FlyoutControlComposite.this;
-      final int width = m_preferences.getWidth();
-      final int oldDockLocation = getDockLocation();
-      final int[] newDockLocation = new int[]{oldDockLocation};
-      final Tracker dockingTracker = new Tracker(container, SWT.NONE);
-      dockingTracker.setRectangles(new Rectangle[]{getBounds()});
-      dockingTracker.setStippled(true);
-      dockingTracker.addListener(SWT.Move, new Listener() {
-        @Override
-        public void handleEvent(Event event2) {
-          Rectangle clientArea = container.getClientArea();
-          Point location = container.toControl(event2.x, event2.y);
-          int h3 = clientArea.height / 3;
-          // check locations
-          if (location.y < h3 && isValidDockLocation(IFlyoutPreferences.DOCK_NORTH)) {
-            dockingTracker.setRectangles(new Rectangle[]{new Rectangle(0,
-                0,
-                clientArea.width,
-                width)});
-            newDockLocation[0] = IFlyoutPreferences.DOCK_NORTH;
-          } else if (location.y > 2 * h3 && isValidDockLocation(IFlyoutPreferences.DOCK_SOUTH)) {
-            dockingTracker.setRectangles(new Rectangle[]{new Rectangle(0,
-                clientArea.height - width,
-                clientArea.width,
-                width)});
-            newDockLocation[0] = IFlyoutPreferences.DOCK_SOUTH;
-          } else if (location.x < clientArea.width / 2
-              && isValidDockLocation(IFlyoutPreferences.DOCK_WEST)) {
-            dockingTracker.setRectangles(new Rectangle[]{new Rectangle(0,
-                0,
-                width,
-                clientArea.height)});
-            newDockLocation[0] = IFlyoutPreferences.DOCK_WEST;
-          } else if (isValidDockLocation(IFlyoutPreferences.DOCK_EAST)) {
-            dockingTracker.setRectangles(new Rectangle[]{new Rectangle(clientArea.width - width,
-                0,
-                width,
-                clientArea.height)});
-            newDockLocation[0] = IFlyoutPreferences.DOCK_EAST;
-          } else {
-            dockingTracker.setRectangles(new Rectangle[]{getBounds()});
-            newDockLocation[0] = oldDockLocation;
-          }
-        }
-      });
-      // start tracking
-      if (dockingTracker.open()) {
-        setDockLocation(newDockLocation[0]);
-      }
-      // dispose tracker
-      dockingTracker.dispose();
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Access
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    /**
-     * @return the {@link Control} installed on this {@link FlyoutControlComposite}, or
-     *         <code>null</code> if there are no any {@link Control}.
-     */
-    private Control getControl() {
-      Control[] children = getChildren();
-      return children.length == 1 ? children[0] : null;
-    }
-
-    /**
-     * Sets the text of title.
-     */
-    public void setTitleText(String text) {
-      updateTitleImage(text);
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Layout
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public void layout() {
-      Control control = getControl();
-      if (control == null) {
-        return;
-      }
-      // OK, we have control, so can continue layout
-      Rectangle clientArea = getClientArea();
-      if (isOpenExpanded()) {
-        if (isWest()) {
-          int y = m_titleHeight;
-          control.setBounds(0, y, clientArea.width - RESIZE_WIDTH, clientArea.height - y);
-        } else if (isEast()) {
-          int y = m_titleHeight;
-          control.setBounds(RESIZE_WIDTH, y, clientArea.width - RESIZE_WIDTH, clientArea.height - y);
-        } else if (isNorth()) {
-          int y = m_titleHeight;
-          control.setBounds(0, y, clientArea.width, clientArea.height - y - RESIZE_WIDTH);
-        } else if (isSouth()) {
-          int y = RESIZE_WIDTH + m_titleHeight;
-          control.setBounds(0, y, clientArea.width, clientArea.height - y);
-        }
-      } else {
-        control.setBounds(0, 0, 0, 0);
-      }
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Paint
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    private Image m_backImage;
-
-    /**
-     * Handler for {@link SWT#Paint} event.
-     */
-    private void handlePaint(GC paintGC) {
-      Rectangle clientArea = getClientArea();
-      if (clientArea.isEmpty()) {
-        return;
-      }
-      // prepare back image
-      GC gc;
-      {
-        if (m_backImage == null || !m_backImage.getBounds().equals(clientArea)) {
-          if (m_backImage != null) {
-            m_backImage.dispose();
-          }
-          m_backImage = new Image(getDisplay(), clientArea.width, clientArea.height);
-        }
-        // prepare GC
-        gc = new GC(m_backImage);
-        gc.setBackground(paintGC.getBackground());
-        gc.setForeground(paintGC.getForeground());
-        gc.fillRectangle(clientArea);
-      }
-      //
-      if (isOpenExpanded()) {
-        // draw header
-        {
-          // draw title
-          if (isWest()) {
-            drawStateImage(gc, 0, 0);
-            gc.drawImage(m_titleImage, m_titleHeight, 0);
-          } else if (isEast()) {
-            int x = clientArea.width - m_titleHeight;
-            drawStateImage(gc, x, 0);
-            gc.drawImage(m_titleImage, x - m_titleWidth, 0);
-          } else if (isNorth()) {
-            drawStateImage(gc, 0, 0);
-            gc.drawImage(m_titleImage, m_titleHeight, 0);
-          } else if (isSouth()) {
-            int y = RESIZE_WIDTH;
-            drawStateImage(gc, 0, y);
-            gc.drawImage(m_titleImage, m_titleHeight, y);
-          }
-        }
-        // draw resize band
-        drawResizeBand(gc);
-      } else {
-        if (isHorizontal()) {
-          drawStateImage(gc, 0, 0);
-          gc.drawImage(m_titleImageRotated, 0, m_titleHeight);
-        } else {
-          drawStateImage(gc, 0, 0);
-          gc.drawImage(m_titleImage, m_titleHeight, 0);
-        }
-        DrawUtils.drawHighlightRectangle(gc, 0, 0, clientArea.width, clientArea.height);
-      }
-      // flush back image
-      {
-        gc.dispose();
-        paintGC.drawImage(m_backImage, 0, 0);
-      }
-    }
-
-    /**
-     * Draws the state image (arrow) at given location.
-     */
-    private void drawStateImage(GC gc, int x, int y) {
-      DrawUtils.drawImageCHCV(gc, getStateImage(), x, y, m_titleHeight, m_titleHeight);
-      if (m_stateHover) {
-        DrawUtils.drawHighlightRectangle(gc, x, y, m_titleHeight, m_titleHeight);
-      }
-    }
-
-    /**
-     * @return the {@link Image} corresponding to current state (open or collapsed).
-     */
-    private Image getStateImage() {
-      int location = getDockLocation();
-      int state = m_preferences.getState();
-      if (state == IFlyoutPreferences.STATE_OPEN) {
-        switch (location) {
-          case IFlyoutPreferences.DOCK_WEST :
-            return ARROW_LEFT;
-          case IFlyoutPreferences.DOCK_EAST :
-            return ARROW_RIGHT;
-          case IFlyoutPreferences.DOCK_NORTH :
-            return ARROW_TOP;
-          case IFlyoutPreferences.DOCK_SOUTH :
-            return ARROW_BOTTOM;
-        }
-      } else if (state == IFlyoutPreferences.STATE_EXPANDED) {
-        return PIN;
-      } else {
-        switch (location) {
-          case IFlyoutPreferences.DOCK_WEST :
-            return ARROW_RIGHT;
-          case IFlyoutPreferences.DOCK_EAST :
-            return ARROW_LEFT;
-          case IFlyoutPreferences.DOCK_NORTH :
-            return ARROW_BOTTOM;
-          case IFlyoutPreferences.DOCK_SOUTH :
-            return ARROW_TOP;
-        }
-      }
-      //
-      return null;
-    }
-
-    /**
-     * Draws that resize band, {@link Sash} like.
-     */
-    private void drawResizeBand(GC gc) {
-      Rectangle clientArea = getClientArea();
-      // prepare locations
-      int x, y, width, height;
-      if (isHorizontal()) {
-        if (isWest()) {
-          x = clientArea.width - RESIZE_WIDTH;
-        } else {
-          x = 0;
-        }
-        y = 0;
-        width = RESIZE_WIDTH;
-        height = clientArea.height;
-      } else {
-        x = 0;
-        if (isNorth()) {
-          y = clientArea.height - RESIZE_WIDTH;
-        } else {
-          y = 0;
-        }
-        width = clientArea.width;
-        height = RESIZE_WIDTH;
-      }
-      // draw band
-      DrawUtils.drawHighlightRectangle(gc, x, y, width, height);
-    }
-
-    /**
-     * @return <code>true</code> if flyout is open or expanded.
-     */
-    private boolean isOpenExpanded() {
-      int state = m_preferences.getState();
-      return state == IFlyoutPreferences.STATE_OPEN || state == IFlyoutPreferences.STATE_EXPANDED;
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Title image
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    private int m_titleWidth;
-    private int m_titleHeight;
-    private Image m_titleImage;
-    private Image m_titleImageRotated;
-
-    /**
-     * Creates {@link Image} for given title text.
-     */
-    private void updateTitleImage(String text) {
-      // prepare size of text
-      Point textSize;
-      {
-        GC gc = new GC(this);
-        gc.setFont(TITLE_FONT);
-        textSize = gc.textExtent(text);
-        gc.dispose();
-      }
-      // dispose existing image
-      if (m_titleImage != null) {
-        m_titleImage.dispose();
-        m_titleImageRotated.dispose();
-      }
-      // prepare new image
-      {
-        m_titleWidth = textSize.x + 2 * TITLE_LINES + 4 * TITLE_MARGIN;
-        m_titleHeight = textSize.y;
-        m_titleImage = new Image(getDisplay(), m_titleWidth, m_titleHeight);
-        GC gc = new GC(m_titleImage);
-        try {
-          gc.setBackground(getBackground());
-          gc.fillRectangle(0, 0, m_titleWidth, m_titleHeight);
-          int x = 0;
-          // draw left lines
-          {
-            x += TITLE_MARGIN;
-            drawTitleLines(gc, x, m_titleHeight, TITLE_LINES);
-            x += TITLE_LINES + TITLE_MARGIN;
-          }
-          // draw text
-          {
-            gc.setForeground(IColorConstants.black);
-            gc.setFont(TITLE_FONT);
-            gc.drawText(text, x, 0);
-            x += textSize.x;
-          }
-          // draw right lines
-          {
-            x += TITLE_MARGIN;
-            drawTitleLines(gc, x, m_titleHeight, TITLE_LINES);
-          }
-        } finally {
-          gc.dispose();
-        }
-      }
-      // prepare rotated image
-      m_titleImageRotated = DrawUtils.createRotatedImage(m_titleImage);
-    }
-
-    /**
-     * Draws two title lines.
-     */
-    private void drawTitleLines(GC gc, int x, int height, int width) {
-      drawTitleLine(gc, x, height / 3, width);
-      drawTitleLine(gc, x, 2 * height / 3, width);
-    }
-
-    /**
-     * Draws single title line.
-     */
-    private void drawTitleLine(GC gc, int x, int y, int width) {
-      int right = x + TITLE_LINES;
-      //
-      gc.setForeground(IColorConstants.buttonLightest);
-      gc.drawLine(x, y, right - 2, y);
-      gc.drawLine(x, y + 1, right - 2, y + 1);
-      //
-      gc.setForeground(IColorConstants.buttonDarker);
-      gc.drawLine(right - 2, y, right - 1, y);
-      gc.drawLine(x + 2, y + 1, right - 2, y + 1);
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Menu
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    private void configureMenu() {
-      final MenuManager manager = new MenuManager();
-      manager.setRemoveAllWhenShown(true);
-      manager.addMenuListener(new IMenuListener() {
-        @Override
-        public void menuAboutToShow(IMenuManager menuMgr) {
-          addDockActions();
-          for (IFlyoutMenuContributor contributor : m_menuContributors) {
-            contributor.contribute(manager);
-          }
-        }
-
-        private void addDockActions() {
-          MenuManager dockManager = new MenuManager(Messages.FlyoutControlComposite_dockManager);
-          addDockAction(
-              dockManager,
-              Messages.FlyoutControlComposite_dockLeft,
-              IFlyoutPreferences.DOCK_WEST);
-          addDockAction(
-              dockManager,
-              Messages.FlyoutControlComposite_dockRight,
-              IFlyoutPreferences.DOCK_EAST);
-          addDockAction(
-              dockManager,
-              Messages.FlyoutControlComposite_dockTop,
-              IFlyoutPreferences.DOCK_NORTH);
-          addDockAction(
-              dockManager,
-              Messages.FlyoutControlComposite_dockBottom,
-              IFlyoutPreferences.DOCK_SOUTH);
-          manager.add(dockManager);
-        }
-
-        private void addDockAction(MenuManager dockManager, String text, int location) {
-          if ((m_validDockLocations & location) != 0) {
-            dockManager.add(new DockAction(text, location));
-          }
-        }
-      });
-      // set menu
-      setMenu(manager.createContextMenu(this));
-      // dispose it later
-      addDisposeListener(new DisposeListener() {
-        @Override
-        public void widgetDisposed(DisposeEvent e) {
-          manager.dispose();
-        }
-      });
-    }
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // DockAction
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private class DockAction extends Action {
-    private final int m_location;
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public DockAction(String text, int location) {
-      super(text, AS_RADIO_BUTTON);
-      m_location = location;
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Action
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public boolean isChecked() {
-      return getDockLocation() == m_location;
-    }
-
-    @Override
-    public void run() {
-      setDockLocation(m_location);
-    }
-  }
+	private static final int RESIZE_WIDTH = 5;
+	private static final int TITLE_LINES = 30;
+	private static final int TITLE_MARGIN = 5;
+	private static final Font TITLE_FONT = JFaceResources.getFontRegistry().getBold(
+			JFaceResources.DEFAULT_FONT);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Images
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final Image PIN = loadImage("icons/pin.gif");
+	private static final Image ARROW_LEFT = loadImage("icons/arrow_left.gif");
+	private static final Image ARROW_RIGHT = loadImage("icons/arrow_right.gif");
+	private static final Image ARROW_TOP = loadImage("icons/arrow_top.gif");
+	private static final Image ARROW_BOTTOM = loadImage("icons/arrow_bottom.gif");
+
+	private static Image loadImage(String path) {
+		return DrawUtils.loadImage(FlyoutControlComposite.class, path);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance fields
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final IFlyoutPreferences m_preferences;
+	private final FlyoutContainer m_flyoutContainer;
+	private int m_minWidth = 150;
+	private int m_validDockLocations = -1;
+	private final List<IFlyoutMenuContributor> m_menuContributors =
+			new ArrayList<IFlyoutMenuContributor>();
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FlyoutControlComposite(Composite parent, int style, IFlyoutPreferences preferences) {
+		super(parent, style);
+		m_preferences = preferences;
+		// add listeners
+		addListener(SWT.Resize, new Listener() {
+			@Override
+			public void handleEvent(Event event) {
+				if (getShell().getMinimized()) {
+					return;
+				}
+				layout();
+			}
+		});
+		// create container for flyout control
+		m_flyoutContainer = new FlyoutContainer(this, SWT.NO_BACKGROUND);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parents
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the parent {@link Composite} for flyout {@link Control}.
+	 */
+	public Composite getFlyoutParent() {
+		return m_flyoutContainer;
+	}
+
+	/**
+	 * @return the parent {@link Composite} for client {@link Control}.
+	 */
+	public Composite getClientParent() {
+		return this;
+	}
+
+	/**
+	 * Sets the bit set with valid docking locations.
+	 */
+	public void setValidDockLocations(int validDockLocations) {
+		m_validDockLocations = validDockLocations;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets the minimal width of flyout.
+	 */
+	public void setMinWidth(int minWidth) {
+		m_minWidth = minWidth;
+	}
+
+	/**
+	 * Sets the text of title.
+	 */
+	public void setTitleText(String text) {
+		m_flyoutContainer.setTitleText(text);
+	}
+
+	/**
+	 * Adds new {@link IFlyoutMenuContributor}.
+	 */
+	public void addMenuContributor(IFlyoutMenuContributor contributor) {
+		if (!m_menuContributors.contains(contributor)) {
+			m_menuContributors.add(contributor);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Layout
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void layout() {
+		Rectangle clientArea = getClientArea();
+		int state = m_preferences.getState();
+		Control client = getChildren()[1];
+		// check, may be "clientArea" is empty, for example because CTabFolder page is not visible
+		if (clientArea.width == 0 || clientArea.height == 0) {
+			return;
+		}
+		// check, maybe flyout has no Control, so "client" should fill client area
+		if (m_flyoutContainer.getControl() == null) {
+			m_flyoutContainer.setBounds(0, 0, 0, 0);
+			client.setBounds(clientArea);
+			return;
+		}
+		// prepare width to display
+		int width;
+		int offset;
+		if (state == IFlyoutPreferences.STATE_OPEN) {
+			width = m_preferences.getWidth();
+			// limit maximum value
+			if (isHorizontal()) {
+				width = Math.min(clientArea.width / 2, width);
+			} else {
+				width = Math.min(clientArea.height / 2, width);
+			}
+			// limit minimum value
+			width = Math.max(width, m_minWidth);
+			width = Math.max(width, 2 * m_flyoutContainer.m_titleHeight + m_flyoutContainer.m_titleWidth);
+			// remember actual width
+			m_preferences.setWidth(width);
+			//
+			offset = width;
+		} else if (state == IFlyoutPreferences.STATE_EXPANDED) {
+			offset = m_flyoutContainer.m_titleHeight;
+			width = m_preferences.getWidth();
+		} else {
+			width = m_flyoutContainer.m_titleHeight;
+			offset = width;
+		}
+		// change bounds for flyout container and client control
+		{
+			if (isWest()) {
+				m_flyoutContainer.setBounds(0, 0, width, clientArea.height);
+				client.setBounds(offset, 0, clientArea.width - offset, clientArea.height);
+			} else if (isEast()) {
+				m_flyoutContainer.setBounds(clientArea.width - width, 0, width, clientArea.height);
+				client.setBounds(0, 0, clientArea.width - offset, clientArea.height);
+			} else if (isNorth()) {
+				m_flyoutContainer.setBounds(0, 0, clientArea.width, width);
+				client.setBounds(0, offset, clientArea.width, clientArea.height - offset);
+			} else if (isSouth()) {
+				m_flyoutContainer.setBounds(0, clientArea.height - width, clientArea.width, width);
+				client.setBounds(0, 0, clientArea.width, clientArea.height - offset);
+			}
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Internal utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private boolean isHorizontal() {
+		return isWest() || isEast();
+	}
+
+	private boolean isWest() {
+		return getDockLocation() == IFlyoutPreferences.DOCK_WEST;
+	}
+
+	private boolean isEast() {
+		return getDockLocation() == IFlyoutPreferences.DOCK_EAST;
+	}
+
+	private boolean isNorth() {
+		return getDockLocation() == IFlyoutPreferences.DOCK_NORTH;
+	}
+
+	private boolean isSouth() {
+		return getDockLocation() == IFlyoutPreferences.DOCK_SOUTH;
+	}
+
+	/**
+	 * @return <code>true</code> if given docking location is valid.
+	 */
+	private boolean isValidDockLocation(int location) {
+		return (location & m_validDockLocations) == location;
+	}
+
+	/**
+	 * @return current docking location.
+	 */
+	private int getDockLocation() {
+		return m_preferences.getDockLocation();
+	}
+
+	/**
+	 * Sets new docking location.
+	 */
+	private void setDockLocation(int dockLocation) {
+		m_preferences.setDockLocation(dockLocation);
+		layout();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// FlyoutContainer
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Container for flyout {@link Control}.
+	 *
+	 * @author scheglov_ke
+	 */
+	private final class FlyoutContainer extends Composite {
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Container
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public FlyoutContainer(Composite parent, int style) {
+			super(parent, style);
+			configureMenu();
+			updateTitleImage(Messages.FlyoutControlComposite_title);
+			// add listeners
+			addListener(SWT.Dispose, new Listener() {
+				@Override
+				public void handleEvent(Event event) {
+					if (m_titleImage != null) {
+						m_titleImage.dispose();
+						m_titleImageRotated.dispose();
+						m_titleImage = null;
+						m_titleImageRotated = null;
+					}
+					if (m_backImage != null) {
+						m_backImage.dispose();
+						m_backImage = null;
+					}
+				}
+			});
+			{
+				Listener listener = new Listener() {
+					@Override
+					public void handleEvent(Event event) {
+						layout();
+					}
+				};
+				addListener(SWT.Move, listener);
+				addListener(SWT.Resize, listener);
+			}
+			addListener(SWT.Paint, new Listener() {
+				@Override
+				public void handleEvent(Event event) {
+					handlePaint(event.gc);
+				}
+			});
+			// mouse listeners
+			addMouseListener(new MouseAdapter() {
+				@Override
+				public void mouseDown(MouseEvent event) {
+					if (event.button == 1) {
+						handle_mouseDown(event);
+					}
+				}
+
+				@Override
+				public void mouseUp(MouseEvent event) {
+					if (event.button == 1) {
+						handle_mouseUp(event);
+					}
+				}
+			});
+			addMouseTrackListener(new MouseTrackAdapter() {
+				@Override
+				public void mouseExit(MouseEvent e) {
+					m_stateHover = false;
+					redraw();
+					setCursor(null);
+				}
+
+				@Override
+				public void mouseHover(MouseEvent e) {
+					handle_mouseHover();
+				}
+			});
+			addMouseMoveListener(new MouseMoveListener() {
+				@Override
+				public void mouseMove(MouseEvent event) {
+					handle_mouseMove(event);
+				}
+			});
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Events: mouse
+		//
+		////////////////////////////////////////////////////////////////////////////
+		private boolean m_resize;
+		private boolean m_stateHover;
+
+		/**
+		 * Handler for {@link SWT#MouseDown} event.
+		 */
+		private void handle_mouseDown(MouseEvent event) {
+			if (m_stateHover) {
+				int state = m_preferences.getState();
+				if (state == IFlyoutPreferences.STATE_OPEN) {
+					state = IFlyoutPreferences.STATE_COLLAPSED;
+				} else {
+					state = IFlyoutPreferences.STATE_OPEN;
+				}
+				m_preferences.setState(state);
+				redraw();
+				FlyoutControlComposite.this.layout();
+			} else if (getCursor() == ICursorConstants.SIZEWE || getCursor() == ICursorConstants.SIZENS) {
+				m_resize = true;
+			} else if (getCursor() == ICursorConstants.SIZEALL) {
+				handleDocking();
+			}
+		}
+
+		/**
+		 * Handler for {@link SWT#MouseUp} event.
+		 */
+		private void handle_mouseUp(MouseEvent event) {
+			if (m_resize) {
+				m_resize = false;
+				handle_mouseMove(event);
+			}
+		}
+
+		/**
+		 * Handler for {@link SWT#MouseMove} event.
+		 */
+		private void handle_mouseMove(MouseEvent event) {
+			final FlyoutControlComposite container = FlyoutControlComposite.this;
+			if (m_resize) {
+				// prepare width
+				int width;
+				if (isHorizontal()) {
+					width = getSize().x;
+				} else {
+					width = getSize().y;
+				}
+				// prepare new width
+				int newWidth = width;
+				if (isWest()) {
+					newWidth = event.x + RESIZE_WIDTH / 2;
+				} else if (isEast()) {
+					newWidth = width - event.x + RESIZE_WIDTH / 2;
+				} else if (isNorth()) {
+					newWidth = event.y + RESIZE_WIDTH / 2;
+				} else if (isSouth()) {
+					newWidth = width - event.y + RESIZE_WIDTH / 2;
+				}
+				// update width
+				if (newWidth != width) {
+					m_preferences.setWidth(newWidth);
+					redraw();
+					container.layout();
+				}
+			} else {
+				Rectangle clientArea = getClientArea();
+				boolean inside = clientArea.contains(event.x, event.y);
+				int x = event.x;
+				int y = event.y;
+				if (inside) {
+					// check for state
+					{
+						boolean oldStateHover = m_stateHover;
+						if (isEast()) {
+							m_stateHover = x > clientArea.width - m_titleHeight && y < m_titleHeight;
+						} else {
+							m_stateHover = x < m_titleHeight && y < m_titleHeight;
+						}
+						if (m_stateHover != oldStateHover) {
+							redraw();
+						}
+						if (m_stateHover) {
+							setCursor(null);
+							return;
+						}
+					}
+					// check for resize band
+					if (isOpenExpanded()) {
+						if (isWest() && x >= clientArea.width - RESIZE_WIDTH) {
+							setCursor(ICursorConstants.SIZEWE);
+						} else if (isEast() && x <= RESIZE_WIDTH) {
+							setCursor(ICursorConstants.SIZEWE);
+						} else if (isNorth() && y >= clientArea.height - RESIZE_WIDTH) {
+							setCursor(ICursorConstants.SIZENS);
+						} else if (isSouth() && y <= RESIZE_WIDTH) {
+							setCursor(ICursorConstants.SIZENS);
+						} else {
+							setCursor(null);
+						}
+					}
+					// check for docking
+					if (getCursor() == null) {
+						setCursor(ICursorConstants.SIZEALL);
+					}
+				} else {
+					setCursor(null);
+				}
+			}
+		}
+
+		/**
+		 * Handler for {@link SWT#MouseHover} event - temporary expands flyout and collapse again when
+		 * mouse moves above client.
+		 */
+		private void handle_mouseHover() {
+			if (m_preferences.getState() == IFlyoutPreferences.STATE_COLLAPSED && !m_stateHover) {
+				m_preferences.setState(IFlyoutPreferences.STATE_EXPANDED);
+				//
+				final FlyoutControlComposite container = FlyoutControlComposite.this;
+				container.layout();
+				// add listeners
+				Listener listener = new Listener() {
+					@Override
+					public void handleEvent(Event event) {
+						if (event.type == SWT.Dispose) {
+							getDisplay().removeFilter(SWT.MouseMove, this);
+						} else {
+							Point p = ((Control) event.widget).toDisplay(event.x, event.y);
+							// during resize mouse can be temporary outside of flyout - ignore
+							if (m_resize) {
+								return;
+							}
+							// mouse in in flyout container - ignore
+							if (getClientArea().contains(toControl(p.x, p.y))) {
+								return;
+							}
+							// mouse is in full container - collapse
+							if (container.getClientArea().contains(container.toControl(p.x, p.y))) {
+								getDisplay().removeFilter(SWT.MouseMove, this);
+								// it is possible, that user restored (OPEN) flyout, so collapse only if we still in expand state
+								if (m_preferences.getState() == IFlyoutPreferences.STATE_EXPANDED) {
+									m_preferences.setState(IFlyoutPreferences.STATE_COLLAPSED);
+									container.layout();
+								}
+							}
+						}
+					}
+				};
+				addListener(SWT.Dispose, listener);
+				getDisplay().addFilter(SWT.MouseMove, listener);
+			}
+		}
+
+		/**
+		 * Handler for docking.
+		 */
+		private void handleDocking() {
+			final FlyoutControlComposite container = FlyoutControlComposite.this;
+			final int width = m_preferences.getWidth();
+			final int oldDockLocation = getDockLocation();
+			final int[] newDockLocation = new int[]{oldDockLocation};
+			final Tracker dockingTracker = new Tracker(container, SWT.NONE);
+			dockingTracker.setRectangles(new Rectangle[]{getBounds()});
+			dockingTracker.setStippled(true);
+			dockingTracker.addListener(SWT.Move, new Listener() {
+				@Override
+				public void handleEvent(Event event2) {
+					Rectangle clientArea = container.getClientArea();
+					Point location = container.toControl(event2.x, event2.y);
+					int h3 = clientArea.height / 3;
+					// check locations
+					if (location.y < h3 && isValidDockLocation(IFlyoutPreferences.DOCK_NORTH)) {
+						dockingTracker.setRectangles(new Rectangle[]{new Rectangle(0,
+								0,
+								clientArea.width,
+								width)});
+						newDockLocation[0] = IFlyoutPreferences.DOCK_NORTH;
+					} else if (location.y > 2 * h3 && isValidDockLocation(IFlyoutPreferences.DOCK_SOUTH)) {
+						dockingTracker.setRectangles(new Rectangle[]{new Rectangle(0,
+								clientArea.height - width,
+								clientArea.width,
+								width)});
+						newDockLocation[0] = IFlyoutPreferences.DOCK_SOUTH;
+					} else if (location.x < clientArea.width / 2
+							&& isValidDockLocation(IFlyoutPreferences.DOCK_WEST)) {
+						dockingTracker.setRectangles(new Rectangle[]{new Rectangle(0,
+								0,
+								width,
+								clientArea.height)});
+						newDockLocation[0] = IFlyoutPreferences.DOCK_WEST;
+					} else if (isValidDockLocation(IFlyoutPreferences.DOCK_EAST)) {
+						dockingTracker.setRectangles(new Rectangle[]{new Rectangle(clientArea.width - width,
+								0,
+								width,
+								clientArea.height)});
+						newDockLocation[0] = IFlyoutPreferences.DOCK_EAST;
+					} else {
+						dockingTracker.setRectangles(new Rectangle[]{getBounds()});
+						newDockLocation[0] = oldDockLocation;
+					}
+				}
+			});
+			// start tracking
+			if (dockingTracker.open()) {
+				setDockLocation(newDockLocation[0]);
+			}
+			// dispose tracker
+			dockingTracker.dispose();
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Access
+		//
+		////////////////////////////////////////////////////////////////////////////
+		/**
+		 * @return the {@link Control} installed on this {@link FlyoutControlComposite}, or
+		 *         <code>null</code> if there are no any {@link Control}.
+		 */
+		private Control getControl() {
+			Control[] children = getChildren();
+			return children.length == 1 ? children[0] : null;
+		}
+
+		/**
+		 * Sets the text of title.
+		 */
+		public void setTitleText(String text) {
+			updateTitleImage(text);
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Layout
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public void layout() {
+			Control control = getControl();
+			if (control == null) {
+				return;
+			}
+			// OK, we have control, so can continue layout
+			Rectangle clientArea = getClientArea();
+			if (isOpenExpanded()) {
+				if (isWest()) {
+					int y = m_titleHeight;
+					control.setBounds(0, y, clientArea.width - RESIZE_WIDTH, clientArea.height - y);
+				} else if (isEast()) {
+					int y = m_titleHeight;
+					control.setBounds(RESIZE_WIDTH, y, clientArea.width - RESIZE_WIDTH, clientArea.height - y);
+				} else if (isNorth()) {
+					int y = m_titleHeight;
+					control.setBounds(0, y, clientArea.width, clientArea.height - y - RESIZE_WIDTH);
+				} else if (isSouth()) {
+					int y = RESIZE_WIDTH + m_titleHeight;
+					control.setBounds(0, y, clientArea.width, clientArea.height - y);
+				}
+			} else {
+				control.setBounds(0, 0, 0, 0);
+			}
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Paint
+		//
+		////////////////////////////////////////////////////////////////////////////
+		private Image m_backImage;
+
+		/**
+		 * Handler for {@link SWT#Paint} event.
+		 */
+		private void handlePaint(GC paintGC) {
+			Rectangle clientArea = getClientArea();
+			if (clientArea.isEmpty()) {
+				return;
+			}
+			// prepare back image
+			GC gc;
+			{
+				if (m_backImage == null || !m_backImage.getBounds().equals(clientArea)) {
+					if (m_backImage != null) {
+						m_backImage.dispose();
+					}
+					m_backImage = new Image(getDisplay(), clientArea.width, clientArea.height);
+				}
+				// prepare GC
+				gc = new GC(m_backImage);
+				gc.setBackground(paintGC.getBackground());
+				gc.setForeground(paintGC.getForeground());
+				gc.fillRectangle(clientArea);
+			}
+			//
+			if (isOpenExpanded()) {
+				// draw header
+				{
+					// draw title
+					if (isWest()) {
+						drawStateImage(gc, 0, 0);
+						gc.drawImage(m_titleImage, m_titleHeight, 0);
+					} else if (isEast()) {
+						int x = clientArea.width - m_titleHeight;
+						drawStateImage(gc, x, 0);
+						gc.drawImage(m_titleImage, x - m_titleWidth, 0);
+					} else if (isNorth()) {
+						drawStateImage(gc, 0, 0);
+						gc.drawImage(m_titleImage, m_titleHeight, 0);
+					} else if (isSouth()) {
+						int y = RESIZE_WIDTH;
+						drawStateImage(gc, 0, y);
+						gc.drawImage(m_titleImage, m_titleHeight, y);
+					}
+				}
+				// draw resize band
+				drawResizeBand(gc);
+			} else {
+				if (isHorizontal()) {
+					drawStateImage(gc, 0, 0);
+					gc.drawImage(m_titleImageRotated, 0, m_titleHeight);
+				} else {
+					drawStateImage(gc, 0, 0);
+					gc.drawImage(m_titleImage, m_titleHeight, 0);
+				}
+				DrawUtils.drawHighlightRectangle(gc, 0, 0, clientArea.width, clientArea.height);
+			}
+			// flush back image
+			{
+				gc.dispose();
+				paintGC.drawImage(m_backImage, 0, 0);
+			}
+		}
+
+		/**
+		 * Draws the state image (arrow) at given location.
+		 */
+		private void drawStateImage(GC gc, int x, int y) {
+			DrawUtils.drawImageCHCV(gc, getStateImage(), x, y, m_titleHeight, m_titleHeight);
+			if (m_stateHover) {
+				DrawUtils.drawHighlightRectangle(gc, x, y, m_titleHeight, m_titleHeight);
+			}
+		}
+
+		/**
+		 * @return the {@link Image} corresponding to current state (open or collapsed).
+		 */
+		private Image getStateImage() {
+			int location = getDockLocation();
+			int state = m_preferences.getState();
+			if (state == IFlyoutPreferences.STATE_OPEN) {
+				switch (location) {
+				case IFlyoutPreferences.DOCK_WEST :
+					return ARROW_LEFT;
+				case IFlyoutPreferences.DOCK_EAST :
+					return ARROW_RIGHT;
+				case IFlyoutPreferences.DOCK_NORTH :
+					return ARROW_TOP;
+				case IFlyoutPreferences.DOCK_SOUTH :
+					return ARROW_BOTTOM;
+				}
+			} else if (state == IFlyoutPreferences.STATE_EXPANDED) {
+				return PIN;
+			} else {
+				switch (location) {
+				case IFlyoutPreferences.DOCK_WEST :
+					return ARROW_RIGHT;
+				case IFlyoutPreferences.DOCK_EAST :
+					return ARROW_LEFT;
+				case IFlyoutPreferences.DOCK_NORTH :
+					return ARROW_BOTTOM;
+				case IFlyoutPreferences.DOCK_SOUTH :
+					return ARROW_TOP;
+				}
+			}
+			//
+			return null;
+		}
+
+		/**
+		 * Draws that resize band, {@link Sash} like.
+		 */
+		private void drawResizeBand(GC gc) {
+			Rectangle clientArea = getClientArea();
+			// prepare locations
+			int x, y, width, height;
+			if (isHorizontal()) {
+				if (isWest()) {
+					x = clientArea.width - RESIZE_WIDTH;
+				} else {
+					x = 0;
+				}
+				y = 0;
+				width = RESIZE_WIDTH;
+				height = clientArea.height;
+			} else {
+				x = 0;
+				if (isNorth()) {
+					y = clientArea.height - RESIZE_WIDTH;
+				} else {
+					y = 0;
+				}
+				width = clientArea.width;
+				height = RESIZE_WIDTH;
+			}
+			// draw band
+			DrawUtils.drawHighlightRectangle(gc, x, y, width, height);
+		}
+
+		/**
+		 * @return <code>true</code> if flyout is open or expanded.
+		 */
+		private boolean isOpenExpanded() {
+			int state = m_preferences.getState();
+			return state == IFlyoutPreferences.STATE_OPEN || state == IFlyoutPreferences.STATE_EXPANDED;
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Title image
+		//
+		////////////////////////////////////////////////////////////////////////////
+		private int m_titleWidth;
+		private int m_titleHeight;
+		private Image m_titleImage;
+		private Image m_titleImageRotated;
+
+		/**
+		 * Creates {@link Image} for given title text.
+		 */
+		private void updateTitleImage(String text) {
+			// prepare size of text
+			Point textSize;
+			{
+				GC gc = new GC(this);
+				gc.setFont(TITLE_FONT);
+				textSize = gc.textExtent(text);
+				gc.dispose();
+			}
+			// dispose existing image
+			if (m_titleImage != null) {
+				m_titleImage.dispose();
+				m_titleImageRotated.dispose();
+			}
+			// prepare new image
+			{
+				m_titleWidth = textSize.x + 2 * TITLE_LINES + 4 * TITLE_MARGIN;
+				m_titleHeight = textSize.y;
+				m_titleImage = new Image(getDisplay(), m_titleWidth, m_titleHeight);
+				GC gc = new GC(m_titleImage);
+				try {
+					gc.setBackground(getBackground());
+					gc.fillRectangle(0, 0, m_titleWidth, m_titleHeight);
+					int x = 0;
+					// draw left lines
+					{
+						x += TITLE_MARGIN;
+						drawTitleLines(gc, x, m_titleHeight, TITLE_LINES);
+						x += TITLE_LINES + TITLE_MARGIN;
+					}
+					// draw text
+					{
+						gc.setForeground(IColorConstants.black);
+						gc.setFont(TITLE_FONT);
+						gc.drawText(text, x, 0);
+						x += textSize.x;
+					}
+					// draw right lines
+					{
+						x += TITLE_MARGIN;
+						drawTitleLines(gc, x, m_titleHeight, TITLE_LINES);
+					}
+				} finally {
+					gc.dispose();
+				}
+			}
+			// prepare rotated image
+			m_titleImageRotated = DrawUtils.createRotatedImage(m_titleImage);
+		}
+
+		/**
+		 * Draws two title lines.
+		 */
+		private void drawTitleLines(GC gc, int x, int height, int width) {
+			drawTitleLine(gc, x, height / 3, width);
+			drawTitleLine(gc, x, 2 * height / 3, width);
+		}
+
+		/**
+		 * Draws single title line.
+		 */
+		private void drawTitleLine(GC gc, int x, int y, int width) {
+			int right = x + TITLE_LINES;
+			//
+			gc.setForeground(IColorConstants.buttonLightest);
+			gc.drawLine(x, y, right - 2, y);
+			gc.drawLine(x, y + 1, right - 2, y + 1);
+			//
+			gc.setForeground(IColorConstants.buttonDarker);
+			gc.drawLine(right - 2, y, right - 1, y);
+			gc.drawLine(x + 2, y + 1, right - 2, y + 1);
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Menu
+		//
+		////////////////////////////////////////////////////////////////////////////
+		private void configureMenu() {
+			final MenuManager manager = new MenuManager();
+			manager.setRemoveAllWhenShown(true);
+			manager.addMenuListener(new IMenuListener() {
+				@Override
+				public void menuAboutToShow(IMenuManager menuMgr) {
+					addDockActions();
+					for (IFlyoutMenuContributor contributor : m_menuContributors) {
+						contributor.contribute(manager);
+					}
+				}
+
+				private void addDockActions() {
+					MenuManager dockManager = new MenuManager(Messages.FlyoutControlComposite_dockManager);
+					addDockAction(
+							dockManager,
+							Messages.FlyoutControlComposite_dockLeft,
+							IFlyoutPreferences.DOCK_WEST);
+					addDockAction(
+							dockManager,
+							Messages.FlyoutControlComposite_dockRight,
+							IFlyoutPreferences.DOCK_EAST);
+					addDockAction(
+							dockManager,
+							Messages.FlyoutControlComposite_dockTop,
+							IFlyoutPreferences.DOCK_NORTH);
+					addDockAction(
+							dockManager,
+							Messages.FlyoutControlComposite_dockBottom,
+							IFlyoutPreferences.DOCK_SOUTH);
+					manager.add(dockManager);
+				}
+
+				private void addDockAction(MenuManager dockManager, String text, int location) {
+					if ((m_validDockLocations & location) != 0) {
+						dockManager.add(new DockAction(text, location));
+					}
+				}
+			});
+			// set menu
+			setMenu(manager.createContextMenu(this));
+			// dispose it later
+			addDisposeListener(new DisposeListener() {
+				@Override
+				public void widgetDisposed(DisposeEvent e) {
+					manager.dispose();
+				}
+			});
+		}
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// DockAction
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private class DockAction extends Action {
+		private final int m_location;
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public DockAction(String text, int location) {
+			super(text, AS_RADIO_BUTTON);
+			m_location = location;
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Action
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public boolean isChecked() {
+			return getDockLocation() == m_location;
+		}
+
+		@Override
+		public void run() {
+			setDockLocation(m_location);
+		}
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/flyout/IFlyoutMenuContributor.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/flyout/IFlyoutMenuContributor.java
index c535568e2..058cc2b05 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/flyout/IFlyoutMenuContributor.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/flyout/IFlyoutMenuContributor.java
@@ -19,5 +19,5 @@
  * @coverage core.control
  */
 public interface IFlyoutMenuContributor {
-  void contribute(IMenuManager manager);
+	void contribute(IMenuManager manager);
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/flyout/IFlyoutPreferences.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/flyout/IFlyoutPreferences.java
index b30a40d08..52a253432 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/flyout/IFlyoutPreferences.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/flyout/IFlyoutPreferences.java
@@ -17,62 +17,62 @@
  * @coverage core.control
  */
 public interface IFlyoutPreferences {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Docking constants
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  int DOCK_WEST = 1;
-  int DOCK_EAST = 2;
-  int DOCK_NORTH = 4;
-  int DOCK_SOUTH = 8;
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // State constants
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  int STATE_OPEN = 0;
-  int STATE_COLLAPSED = 1;
-  int STATE_EXPANDED = 2;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Docking constants
+	//
+	////////////////////////////////////////////////////////////////////////////
+	int DOCK_WEST = 1;
+	int DOCK_EAST = 2;
+	int DOCK_NORTH = 4;
+	int DOCK_SOUTH = 8;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// State constants
+	//
+	////////////////////////////////////////////////////////////////////////////
+	int STATE_OPEN = 0;
+	int STATE_COLLAPSED = 1;
+	int STATE_EXPANDED = 2;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the docking location - {@link #DOCK_WEST}, {@link #DOCK_EAST}, {@link #DOCK_NORTH} or
-   *         {@link #DOCK_SOUTH}.
-   */
-  int getDockLocation();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the docking location - {@link #DOCK_WEST}, {@link #DOCK_EAST}, {@link #DOCK_NORTH} or
+	 *         {@link #DOCK_SOUTH}.
+	 */
+	int getDockLocation();
 
-  /**
-   * @return the state of flyout - {@link #STATE_OPEN} or {@link #STATE_COLLAPSED}.
-   */
-  int getState();
+	/**
+	 * @return the state of flyout - {@link #STATE_OPEN} or {@link #STATE_COLLAPSED}.
+	 */
+	int getState();
 
-  /**
-   * @return the width of flyout.
-   */
-  int getWidth();
+	/**
+	 * @return the width of flyout.
+	 */
+	int getWidth();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Modification
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets the docking location.
-   */
-  void setDockLocation(int location);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Modification
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets the docking location.
+	 */
+	void setDockLocation(int location);
 
-  /**
-   * Sets the state of flyout - {@link #STATE_OPEN} or {@link #STATE_COLLAPSED}.
-   */
-  void setState(int state);
+	/**
+	 * Sets the state of flyout - {@link #STATE_OPEN} or {@link #STATE_COLLAPSED}.
+	 */
+	void setState(int state);
 
-  /**
-   * Sets the width of flyout.
-   */
-  void setWidth(int width);
+	/**
+	 * Sets the width of flyout.
+	 */
+	void setWidth(int width);
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/flyout/MemoryFlyoutPreferences.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/flyout/MemoryFlyoutPreferences.java
index af9ff1af4..9e39df96c 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/flyout/MemoryFlyoutPreferences.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/flyout/MemoryFlyoutPreferences.java
@@ -17,53 +17,53 @@
  * @coverage core.control
  */
 public final class MemoryFlyoutPreferences implements IFlyoutPreferences {
-  private int m_dockLocation;
-  private int m_state;
-  private int m_width;
+	private int m_dockLocation;
+	private int m_state;
+	private int m_width;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public MemoryFlyoutPreferences(int dockLocation, int state, int width) {
-    m_dockLocation = dockLocation;
-    m_state = state;
-    m_width = width;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public MemoryFlyoutPreferences(int dockLocation, int state, int width) {
+		m_dockLocation = dockLocation;
+		m_state = state;
+		m_width = width;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IFlyoutPreferences
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public int getDockLocation() {
-    return m_dockLocation;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IFlyoutPreferences
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public int getDockLocation() {
+		return m_dockLocation;
+	}
 
-  @Override
-  public int getState() {
-    return m_state;
-  }
+	@Override
+	public int getState() {
+		return m_state;
+	}
 
-  @Override
-  public int getWidth() {
-    return m_width;
-  }
+	@Override
+	public int getWidth() {
+		return m_width;
+	}
 
-  @Override
-  public void setDockLocation(int location) {
-    m_dockLocation = location;
-  }
+	@Override
+	public void setDockLocation(int location) {
+		m_dockLocation = location;
+	}
 
-  @Override
-  public void setState(int state) {
-    m_state = state;
-  }
+	@Override
+	public void setState(int state) {
+		m_state = state;
+	}
 
-  @Override
-  public void setWidth(int width) {
-    m_width = width;
-  }
+	@Override
+	public void setWidth(int width) {
+		m_width = width;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/flyout/PluginFlyoutPreferences.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/flyout/PluginFlyoutPreferences.java
index 06d9ced32..8b7c12a98 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/flyout/PluginFlyoutPreferences.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/flyout/PluginFlyoutPreferences.java
@@ -19,69 +19,69 @@
  * @coverage core.control
  */
 public final class PluginFlyoutPreferences implements IFlyoutPreferences {
-  private final IPreferenceStore m_store;
-  private final String m_dockLocationKey;
-  private final String m_stateKey;
-  private final String m_widthKey;
+	private final IPreferenceStore m_store;
+	private final String m_dockLocationKey;
+	private final String m_stateKey;
+	private final String m_widthKey;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public PluginFlyoutPreferences(IPreferenceStore store, String prefix) {
-    m_store = store;
-    m_dockLocationKey = prefix + ".flyout.dockLocation";
-    m_stateKey = prefix + ".flyout.state";
-    m_widthKey = prefix + ".flyout.width";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public PluginFlyoutPreferences(IPreferenceStore store, String prefix) {
+		m_store = store;
+		m_dockLocationKey = prefix + ".flyout.dockLocation";
+		m_stateKey = prefix + ".flyout.state";
+		m_widthKey = prefix + ".flyout.width";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Initializes defaults using given values.
-   */
-  public void initializeDefaults(int location, int state, int width) {
-    m_store.setDefault(m_dockLocationKey, location);
-    m_store.setDefault(m_stateKey, state);
-    m_store.setDefault(m_widthKey, width);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Initializes defaults using given values.
+	 */
+	public void initializeDefaults(int location, int state, int width) {
+		m_store.setDefault(m_dockLocationKey, location);
+		m_store.setDefault(m_stateKey, state);
+		m_store.setDefault(m_widthKey, width);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IFlyoutPreferences
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public int getDockLocation() {
-    return m_store.getInt(m_dockLocationKey);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IFlyoutPreferences
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public int getDockLocation() {
+		return m_store.getInt(m_dockLocationKey);
+	}
 
-  @Override
-  public int getState() {
-    return m_store.getInt(m_stateKey);
-  }
+	@Override
+	public int getState() {
+		return m_store.getInt(m_stateKey);
+	}
 
-  @Override
-  public int getWidth() {
-    return m_store.getInt(m_widthKey);
-  }
+	@Override
+	public int getWidth() {
+		return m_store.getInt(m_widthKey);
+	}
 
-  @Override
-  public void setDockLocation(int location) {
-    m_store.setValue(m_dockLocationKey, location);
-  }
+	@Override
+	public void setDockLocation(int location) {
+		m_store.setValue(m_dockLocationKey, location);
+	}
 
-  @Override
-  public void setState(int state) {
-    m_store.setValue(m_stateKey, state);
-  }
+	@Override
+	public void setState(int state) {
+		m_store.setValue(m_stateKey, state);
+	}
 
-  @Override
-  public void setWidth(int width) {
-    m_store.setValue(m_widthKey, width);
-  }
+	@Override
+	public void setWidth(int width) {
+		m_store.setValue(m_widthKey, width);
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/jface/preference/ComboFieldEditor.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/jface/preference/ComboFieldEditor.java
index d37e1a1a0..0da19b6e1 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/jface/preference/ComboFieldEditor.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/jface/preference/ComboFieldEditor.java
@@ -27,191 +27,191 @@
  * @coverage core.control
  */
 public class ComboFieldEditor extends FieldEditor {
-  /**
-   * The <code>Combo</code> widget.
-   */
-  private Combo fCombo;
-  /**
-   * The value (not the name) of the currently selected item in the Combo widget.
-   */
-  private String fValue;
-  /**
-   * The names (labels) and underlying values to populate the combo widget. These should be arranged
-   * as: { {name1, value1}, {name2, value2}, ...}
-   */
-  private final String[][] fEntryNamesAndValues;
+	/**
+	 * The <code>Combo</code> widget.
+	 */
+	private Combo fCombo;
+	/**
+	 * The value (not the name) of the currently selected item in the Combo widget.
+	 */
+	private String fValue;
+	/**
+	 * The names (labels) and underlying values to populate the combo widget. These should be arranged
+	 * as: { {name1, value1}, {name2, value2}, ...}
+	 */
+	private final String[][] fEntryNamesAndValues;
 
-  /**
-   * Create the combo box field editor.
-   *
-   * @param name
-   *          the name of the preference this field editor works on
-   * @param labelText
-   *          the label text of the field editor
-   * @param entryNamesAndValues
-   *          the names (labels) and underlying values to populate the combo widget. These should be
-   *          arranged as: { {name1, value1}, {name2, value2}, ...}
-   * @param parent
-   *          the parent composite
-   */
-  public ComboFieldEditor(String name,
-      String labelText,
-      String[][] entryNamesAndValues,
-      Composite parent) {
-    init(name, labelText);
-    Assert.isTrue(checkArray(entryNamesAndValues));
-    fEntryNamesAndValues = entryNamesAndValues;
-    createControl(parent);
-  }
+	/**
+	 * Create the combo box field editor.
+	 *
+	 * @param name
+	 *          the name of the preference this field editor works on
+	 * @param labelText
+	 *          the label text of the field editor
+	 * @param entryNamesAndValues
+	 *          the names (labels) and underlying values to populate the combo widget. These should be
+	 *          arranged as: { {name1, value1}, {name2, value2}, ...}
+	 * @param parent
+	 *          the parent composite
+	 */
+	public ComboFieldEditor(String name,
+			String labelText,
+			String[][] entryNamesAndValues,
+			Composite parent) {
+		init(name, labelText);
+		Assert.isTrue(checkArray(entryNamesAndValues));
+		fEntryNamesAndValues = entryNamesAndValues;
+		createControl(parent);
+	}
 
-  /**
-   * Checks whether given <code>String[][]</code> is of "type" <code>String[][2]</code>.
-   *
-   * @return <code>true</code> if it is ok, and <code>false</code> otherwise
-   */
-  private boolean checkArray(String[][] table) {
-    if (table == null) {
-      return false;
-    }
-    for (int i = 0; i < table.length; i++) {
-      String[] array = table[i];
-      if (array == null || array.length != 2) {
-        return false;
-      }
-    }
-    return true;
-  }
+	/**
+	 * Checks whether given <code>String[][]</code> is of "type" <code>String[][2]</code>.
+	 *
+	 * @return <code>true</code> if it is ok, and <code>false</code> otherwise
+	 */
+	private boolean checkArray(String[][] table) {
+		if (table == null) {
+			return false;
+		}
+		for (int i = 0; i < table.length; i++) {
+			String[] array = table[i];
+			if (array == null || array.length != 2) {
+				return false;
+			}
+		}
+		return true;
+	}
 
-  /* (non-Javadoc)
-   * @see org.eclipse.jface.preference.FieldEditor#adjustForNumColumns(int)
-   */
-  @Override
-  protected void adjustForNumColumns(int numColumns) {
-    if (numColumns > 1) {
-      Control control = getLabelControl();
-      int left = numColumns;
-      if (control != null) {
-        ((GridData) control.getLayoutData()).horizontalSpan = 1;
-        left = left - 1;
-      }
-      ((GridData) fCombo.getLayoutData()).horizontalSpan = left;
-    } else {
-      Control control = getLabelControl();
-      if (control != null) {
-        ((GridData) control.getLayoutData()).horizontalSpan = 1;
-      }
-      ((GridData) fCombo.getLayoutData()).horizontalSpan = 1;
-    }
-  }
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.preference.FieldEditor#adjustForNumColumns(int)
+	 */
+	@Override
+	protected void adjustForNumColumns(int numColumns) {
+		if (numColumns > 1) {
+			Control control = getLabelControl();
+			int left = numColumns;
+			if (control != null) {
+				((GridData) control.getLayoutData()).horizontalSpan = 1;
+				left = left - 1;
+			}
+			((GridData) fCombo.getLayoutData()).horizontalSpan = left;
+		} else {
+			Control control = getLabelControl();
+			if (control != null) {
+				((GridData) control.getLayoutData()).horizontalSpan = 1;
+			}
+			((GridData) fCombo.getLayoutData()).horizontalSpan = 1;
+		}
+	}
 
-  /* (non-Javadoc)
-   * @see org.eclipse.jface.preference.FieldEditor#doFillIntoGrid(org.eclipse.swt.widgets.Composite, int)
-   */
-  @Override
-  protected void doFillIntoGrid(Composite parent, int numColumns) {
-    int comboC = 1;
-    if (numColumns > 1) {
-      comboC = numColumns - 1;
-    }
-    Control control = getLabelControl(parent);
-    GridData gd = new GridData();
-    gd.horizontalSpan = 1;
-    control.setLayoutData(gd);
-    control = getComboBoxControl(parent);
-    gd = new GridData();
-    gd.horizontalSpan = comboC;
-    gd.horizontalAlignment = GridData.FILL;
-    control.setLayoutData(gd);
-    control.setFont(parent.getFont());
-  }
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.preference.FieldEditor#doFillIntoGrid(org.eclipse.swt.widgets.Composite, int)
+	 */
+	@Override
+	protected void doFillIntoGrid(Composite parent, int numColumns) {
+		int comboC = 1;
+		if (numColumns > 1) {
+			comboC = numColumns - 1;
+		}
+		Control control = getLabelControl(parent);
+		GridData gd = new GridData();
+		gd.horizontalSpan = 1;
+		control.setLayoutData(gd);
+		control = getComboBoxControl(parent);
+		gd = new GridData();
+		gd.horizontalSpan = comboC;
+		gd.horizontalAlignment = GridData.FILL;
+		control.setLayoutData(gd);
+		control.setFont(parent.getFont());
+	}
 
-  /* (non-Javadoc)
-   * @see org.eclipse.jface.preference.FieldEditor#doLoad()
-   */
-  @Override
-  protected void doLoad() {
-    updateComboForValue(getPreferenceStore().getString(getPreferenceName()));
-  }
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.preference.FieldEditor#doLoad()
+	 */
+	@Override
+	protected void doLoad() {
+		updateComboForValue(getPreferenceStore().getString(getPreferenceName()));
+	}
 
-  /* (non-Javadoc)
-   * @see org.eclipse.jface.preference.FieldEditor#doLoadDefault()
-   */
-  @Override
-  protected void doLoadDefault() {
-    updateComboForValue(getPreferenceStore().getDefaultString(getPreferenceName()));
-  }
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.preference.FieldEditor#doLoadDefault()
+	 */
+	@Override
+	protected void doLoadDefault() {
+		updateComboForValue(getPreferenceStore().getDefaultString(getPreferenceName()));
+	}
 
-  /* (non-Javadoc)
-   * @see org.eclipse.jface.preference.FieldEditor#doStore()
-   */
-  @Override
-  protected void doStore() {
-    if (fValue == null) {
-      getPreferenceStore().setToDefault(getPreferenceName());
-      return;
-    }
-    getPreferenceStore().setValue(getPreferenceName(), fValue);
-  }
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.preference.FieldEditor#doStore()
+	 */
+	@Override
+	protected void doStore() {
+		if (fValue == null) {
+			getPreferenceStore().setToDefault(getPreferenceName());
+			return;
+		}
+		getPreferenceStore().setValue(getPreferenceName(), fValue);
+	}
 
-  /* (non-Javadoc)
-   * @see org.eclipse.jface.preference.FieldEditor#getNumberOfControls()
-   */
-  @Override
-  public int getNumberOfControls() {
-    return 2;
-  }
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.preference.FieldEditor#getNumberOfControls()
+	 */
+	@Override
+	public int getNumberOfControls() {
+		return 2;
+	}
 
-  /*
-   * Lazily create and return the Combo control.
-   */
-  private Combo getComboBoxControl(Composite parent) {
-    if (fCombo == null) {
-      fCombo = new Combo(parent, SWT.READ_ONLY);
-      fCombo.setFont(parent.getFont());
-      for (int i = 0; i < fEntryNamesAndValues.length; i++) {
-        fCombo.add(fEntryNamesAndValues[i][0], i);
-      }
-      fCombo.addSelectionListener(new SelectionAdapter() {
-        @Override
-        public void widgetSelected(SelectionEvent evt) {
-          String oldValue = fValue;
-          String name = fCombo.getText();
-          fValue = getValueForName(name);
-          setPresentsDefaultValue(false);
-          fireValueChanged(VALUE, oldValue, fValue);
-        }
-      });
-    }
-    return fCombo;
-  }
+	/*
+	 * Lazily create and return the Combo control.
+	 */
+	private Combo getComboBoxControl(Composite parent) {
+		if (fCombo == null) {
+			fCombo = new Combo(parent, SWT.READ_ONLY);
+			fCombo.setFont(parent.getFont());
+			for (int i = 0; i < fEntryNamesAndValues.length; i++) {
+				fCombo.add(fEntryNamesAndValues[i][0], i);
+			}
+			fCombo.addSelectionListener(new SelectionAdapter() {
+				@Override
+				public void widgetSelected(SelectionEvent evt) {
+					String oldValue = fValue;
+					String name = fCombo.getText();
+					fValue = getValueForName(name);
+					setPresentsDefaultValue(false);
+					fireValueChanged(VALUE, oldValue, fValue);
+				}
+			});
+		}
+		return fCombo;
+	}
 
-  /*
-   * Given the name (label) of an entry, return the corresponding value.
-   */
-  private String getValueForName(String name) {
-    for (int i = 0; i < fEntryNamesAndValues.length; i++) {
-      String[] entry = fEntryNamesAndValues[i];
-      if (name.equals(entry[0])) {
-        return entry[1];
-      }
-    }
-    return fEntryNamesAndValues[0][0];
-  }
+	/*
+	 * Given the name (label) of an entry, return the corresponding value.
+	 */
+	private String getValueForName(String name) {
+		for (int i = 0; i < fEntryNamesAndValues.length; i++) {
+			String[] entry = fEntryNamesAndValues[i];
+			if (name.equals(entry[0])) {
+				return entry[1];
+			}
+		}
+		return fEntryNamesAndValues[0][0];
+	}
 
-  /*
-   * Set the name in the combo widget to match the specified value.
-   */
-  private void updateComboForValue(String value) {
-    fValue = value;
-    for (int i = 0; i < fEntryNamesAndValues.length; i++) {
-      if (value.equals(fEntryNamesAndValues[i][1])) {
-        fCombo.setText(fEntryNamesAndValues[i][0]);
-        return;
-      }
-    }
-    if (fEntryNamesAndValues.length > 0) {
-      fValue = fEntryNamesAndValues[0][1];
-      fCombo.setText(fEntryNamesAndValues[0][0]);
-    }
-  }
+	/*
+	 * Set the name in the combo widget to match the specified value.
+	 */
+	private void updateComboForValue(String value) {
+		fValue = value;
+		for (int i = 0; i < fEntryNamesAndValues.length; i++) {
+			if (value.equals(fEntryNamesAndValues[i][1])) {
+				fCombo.setText(fEntryNamesAndValues[i][0]);
+				return;
+			}
+		}
+		if (fEntryNamesAndValues.length > 0) {
+			fValue = fEntryNamesAndValues[0][1];
+			fCombo.setText(fEntryNamesAndValues[0][0]);
+		}
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/jface/preference/FieldLayoutPreferencePage.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/jface/preference/FieldLayoutPreferencePage.java
index a65f47b1f..97fbeb738 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/jface/preference/FieldLayoutPreferencePage.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/jface/preference/FieldLayoutPreferencePage.java
@@ -37,178 +37,178 @@
  * @coverage core.control
  */
 public abstract class FieldLayoutPreferencePage extends PreferencePage
-    implements
-      IPropertyChangeListener {
-  /**
-   * The field editors.
-   */
-  private final List<FieldEditor> fields = Lists.newArrayList();
-  /**
-   * The first invalid field editor, or <code>null</code> if all field editors are valid.
-   */
-  private FieldEditor invalidFieldEditor = null;
-
-  /**
-   * Creates a new field editor preference page with an empty title, and no image.
-   */
-  protected FieldLayoutPreferencePage() {
-    // Create a new field editor preference page with an empty title, and no image
-  }
-
-  /**
-   * Creates a new field editor preference page with the given title, but no image.
-   *
-   * @param title
-   *          the title of this preference page
-   */
-  protected FieldLayoutPreferencePage(String title) {
-    super(title);
-  }
-
-  /**
-   * Creates a new field editor preference page with the given image, and style.
-   *
-   * @param title
-   *          the title of this preference page
-   * @param image
-   *          the image for this preference page, or <code>null</code> if none
-   */
-  protected FieldLayoutPreferencePage(String title, ImageDescriptor image) {
-    super(title, image);
-  }
-
-  /**
-   * Adds the given field editor to this page.
-   *
-   * @param editor
-   *          the field editor
-   */
-  protected void addField(FieldEditor editor) {
-    fields.add(editor);
-  }
-
-  /**
-   * Recomputes the page's error state by calling <code>isValid</code> for every field editor.
-   */
-  protected void checkState() {
-    boolean valid = true;
-    invalidFieldEditor = null;
-    // The state can only be set to true if all field editors contain a valid value.
-    // So we must check them all.
-    for (FieldEditor fieldEditor : fields) {
-      valid = valid && fieldEditor.isValid();
-      if (!valid) {
-        invalidFieldEditor = fieldEditor;
-        break;
-      }
-    }
-  }
-
-  @Override
-  protected Control createContents(Composite parent) {
-    Control contens = createPageContents(parent);
-    initialize();
-    checkState();
-    return contens;
-  }
-
-  /**
-   * Creates and returns the SWT control for the customized body of this preference page under the
-   * given parent composite.
-   * <p>
-   * This framework method must be implemented by concrete subclasses. Any subclass returning a
-   * <code>Composite</code> object whose <code>Layout</code> has default margins (for example, a
-   * <code>GridLayout</code>) are expected to set the margins of this <code>Layout</code> to 0
-   * pixels.
-   * </p>
-   *
-   * @param parent
-   *          the parent composite
-   * @return the new control
-   */
-  protected abstract Control createPageContents(Composite parent);
-
-  /**
-   * The field editor preference page implementation of an <code>IDialogPage</code> method disposes
-   * of this page's controls and images. Subclasses may override to release their own allocated SWT
-   * resources, but must call <code>super.dispose</code>.
-   */
-  @Override
-  public void dispose() {
-    super.dispose();
-    for (FieldEditor fieldEditor : fields) {
-      fieldEditor.setPage(null);
-      fieldEditor.setPropertyChangeListener(null);
-      fieldEditor.setPreferenceStore(null);
-    }
-  }
-
-  /**
-   * Initializes all field editors.
-   */
-  protected void initialize() {
-    for (FieldEditor fieldEditor : fields) {
-      fieldEditor.setPage(null);
-      fieldEditor.setPropertyChangeListener(this);
-      fieldEditor.setPreferenceStore(getPreferenceStore());
-      fieldEditor.load();
-    }
-  }
-
-  /**
-   * The field editor preference page implementation of a <code>PreferencePage</code> method loads
-   * all the field editors with their default values.
-   */
-  @Override
-  protected void performDefaults() {
-    for (FieldEditor fieldEditor : fields) {
-      fieldEditor.loadDefault();
-    }
-    // Force a recalculation of my error state.
-    checkState();
-    super.performDefaults();
-  }
-
-  /**
-   * The field editor preference page implementation of this <code>PreferencePage</code> method
-   * saves all field editors by calling <code>FieldEditor.store</code>. Note that this method does
-   * not save the preference store itself; it just stores the values back into the preference store.
-   *
-   * @see FieldEditor#store()
-   */
-  @Override
-  public boolean performOk() {
-    for (FieldEditor fieldEditor : fields) {
-      fieldEditor.store();
-    }
-    return true;
-  }
-
-  /**
-   * The field editor preference page implementation of this <code>IPreferencePage</code> (and
-   * <code>IPropertyChangeListener</code>) method intercepts <code>IS_VALID</code> events but passes
-   * other events on to its superclass.
-   */
-  @Override
-  public void propertyChange(PropertyChangeEvent event) {
-    if (event.getProperty().equals(FieldEditor.IS_VALID)) {
-      boolean newValue = ((Boolean) event.getNewValue()).booleanValue();
-      // If the new value is true then we must check all field editors.
-      // If it is false, then the page is invalid in any case.
-      if (newValue) {
-        checkState();
-      } else {
-        invalidFieldEditor = (FieldEditor) event.getSource();
-      }
-      setValid(newValue);
-    }
-  }
-
-  @Override
-  public void setVisible(boolean visible) {
-    super.setVisible(visible);
-    if (visible && invalidFieldEditor != null) {
-      invalidFieldEditor.setFocus();
-    }
-  }
+implements
+IPropertyChangeListener {
+	/**
+	 * The field editors.
+	 */
+	private final List<FieldEditor> fields = Lists.newArrayList();
+	/**
+	 * The first invalid field editor, or <code>null</code> if all field editors are valid.
+	 */
+	private FieldEditor invalidFieldEditor = null;
+
+	/**
+	 * Creates a new field editor preference page with an empty title, and no image.
+	 */
+	protected FieldLayoutPreferencePage() {
+		// Create a new field editor preference page with an empty title, and no image
+	}
+
+	/**
+	 * Creates a new field editor preference page with the given title, but no image.
+	 *
+	 * @param title
+	 *          the title of this preference page
+	 */
+	protected FieldLayoutPreferencePage(String title) {
+		super(title);
+	}
+
+	/**
+	 * Creates a new field editor preference page with the given image, and style.
+	 *
+	 * @param title
+	 *          the title of this preference page
+	 * @param image
+	 *          the image for this preference page, or <code>null</code> if none
+	 */
+	protected FieldLayoutPreferencePage(String title, ImageDescriptor image) {
+		super(title, image);
+	}
+
+	/**
+	 * Adds the given field editor to this page.
+	 *
+	 * @param editor
+	 *          the field editor
+	 */
+	protected void addField(FieldEditor editor) {
+		fields.add(editor);
+	}
+
+	/**
+	 * Recomputes the page's error state by calling <code>isValid</code> for every field editor.
+	 */
+	protected void checkState() {
+		boolean valid = true;
+		invalidFieldEditor = null;
+		// The state can only be set to true if all field editors contain a valid value.
+		// So we must check them all.
+		for (FieldEditor fieldEditor : fields) {
+			valid = valid && fieldEditor.isValid();
+			if (!valid) {
+				invalidFieldEditor = fieldEditor;
+				break;
+			}
+		}
+	}
+
+	@Override
+	protected Control createContents(Composite parent) {
+		Control contens = createPageContents(parent);
+		initialize();
+		checkState();
+		return contens;
+	}
+
+	/**
+	 * Creates and returns the SWT control for the customized body of this preference page under the
+	 * given parent composite.
+	 * <p>
+	 * This framework method must be implemented by concrete subclasses. Any subclass returning a
+	 * <code>Composite</code> object whose <code>Layout</code> has default margins (for example, a
+	 * <code>GridLayout</code>) are expected to set the margins of this <code>Layout</code> to 0
+	 * pixels.
+	 * </p>
+	 *
+	 * @param parent
+	 *          the parent composite
+	 * @return the new control
+	 */
+	protected abstract Control createPageContents(Composite parent);
+
+	/**
+	 * The field editor preference page implementation of an <code>IDialogPage</code> method disposes
+	 * of this page's controls and images. Subclasses may override to release their own allocated SWT
+	 * resources, but must call <code>super.dispose</code>.
+	 */
+	@Override
+	public void dispose() {
+		super.dispose();
+		for (FieldEditor fieldEditor : fields) {
+			fieldEditor.setPage(null);
+			fieldEditor.setPropertyChangeListener(null);
+			fieldEditor.setPreferenceStore(null);
+		}
+	}
+
+	/**
+	 * Initializes all field editors.
+	 */
+	protected void initialize() {
+		for (FieldEditor fieldEditor : fields) {
+			fieldEditor.setPage(null);
+			fieldEditor.setPropertyChangeListener(this);
+			fieldEditor.setPreferenceStore(getPreferenceStore());
+			fieldEditor.load();
+		}
+	}
+
+	/**
+	 * The field editor preference page implementation of a <code>PreferencePage</code> method loads
+	 * all the field editors with their default values.
+	 */
+	@Override
+	protected void performDefaults() {
+		for (FieldEditor fieldEditor : fields) {
+			fieldEditor.loadDefault();
+		}
+		// Force a recalculation of my error state.
+		checkState();
+		super.performDefaults();
+	}
+
+	/**
+	 * The field editor preference page implementation of this <code>PreferencePage</code> method
+	 * saves all field editors by calling <code>FieldEditor.store</code>. Note that this method does
+	 * not save the preference store itself; it just stores the values back into the preference store.
+	 *
+	 * @see FieldEditor#store()
+	 */
+	@Override
+	public boolean performOk() {
+		for (FieldEditor fieldEditor : fields) {
+			fieldEditor.store();
+		}
+		return true;
+	}
+
+	/**
+	 * The field editor preference page implementation of this <code>IPreferencePage</code> (and
+	 * <code>IPropertyChangeListener</code>) method intercepts <code>IS_VALID</code> events but passes
+	 * other events on to its superclass.
+	 */
+	@Override
+	public void propertyChange(PropertyChangeEvent event) {
+		if (event.getProperty().equals(FieldEditor.IS_VALID)) {
+			boolean newValue = ((Boolean) event.getNewValue()).booleanValue();
+			// If the new value is true then we must check all field editors.
+			// If it is false, then the page is invalid in any case.
+			if (newValue) {
+				checkState();
+			} else {
+				invalidFieldEditor = (FieldEditor) event.getSource();
+			}
+			setValid(newValue);
+		}
+	}
+
+	@Override
+	public void setVisible(boolean visible) {
+		super.setVisible(visible);
+		if (visible && invalidFieldEditor != null) {
+			invalidFieldEditor.setFocus();
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/palette/DefaultPalettePreferences.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/palette/DefaultPalettePreferences.java
index 20a94c653..10f98791f 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/palette/DefaultPalettePreferences.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/palette/DefaultPalettePreferences.java
@@ -20,27 +20,27 @@
  * @coverage core.control.palette
  */
 public final class DefaultPalettePreferences implements IPalettePreferences {
-  @Override
-  public FontDescriptor getCategoryFontDescriptor() {
-    return null;
-  }
+	@Override
+	public FontDescriptor getCategoryFontDescriptor() {
+		return null;
+	}
 
-  @Override
-  public FontDescriptor getEntryFontDescriptor() {
-    return null;
-  }
+	@Override
+	public FontDescriptor getEntryFontDescriptor() {
+		return null;
+	}
 
-  @Override
-  public boolean isOnlyIcons() {
-    return false;
-  }
+	@Override
+	public boolean isOnlyIcons() {
+		return false;
+	}
 
-  @Override
-  public int getMinColumns() {
-    return 1;
-  }
+	@Override
+	public int getMinColumns() {
+		return 1;
+	}
 
-  public int getLayoutType() {
-    return 0;
-  }
+	public int getLayoutType() {
+		return 0;
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/palette/HtmlPaletteTooltipProvider.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/palette/HtmlPaletteTooltipProvider.java
index 26aa65a24..946b91235 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/palette/HtmlPaletteTooltipProvider.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/palette/HtmlPaletteTooltipProvider.java
@@ -28,31 +28,31 @@
  * @coverage core.control.palette
  */
 public final class HtmlPaletteTooltipProvider implements ICustomTooltipProvider {
-  private final String m_header;
-  private final String m_details;
+	private final String m_header;
+	private final String m_details;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public HtmlPaletteTooltipProvider(String header, String details) {
-    m_header = StringEscapeUtils.escapeHtml(header);
-    m_details = details;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public HtmlPaletteTooltipProvider(String header, String details) {
+		m_header = StringEscapeUtils.escapeHtml(header);
+		m_details = details;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ICustomTooltipProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Control createTooltipControl(Composite parent, ICustomTooltipSite site, Figure figure) {
-    return HtmlTooltipHelper.createTooltipControl(parent, m_header, m_details);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ICustomTooltipProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Control createTooltipControl(Composite parent, ICustomTooltipSite site, Figure figure) {
+		return HtmlTooltipHelper.createTooltipControl(parent, m_header, m_details);
+	}
 
-  @Override
-  public void show(Shell shell) {
-    // do nothing, show Shell when Browser ready
-  }
+	@Override
+	public void show(Shell shell) {
+		// do nothing, show Shell when Browser ready
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/palette/ICategory.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/palette/ICategory.java
index 31ab30361..1d69e125b 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/palette/ICategory.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/palette/ICategory.java
@@ -19,28 +19,28 @@
  * @coverage core.control.palette
  */
 public interface ICategory {
-  /**
-   * @return the title text of category.
-   */
-  String getText();
+	/**
+	 * @return the title text of category.
+	 */
+	String getText();
 
-  /**
-   * @return the tooltip text of {@link ICategory}.
-   */
-  String getToolTipText();
+	/**
+	 * @return the tooltip text of {@link ICategory}.
+	 */
+	String getToolTipText();
 
-  /**
-   * @return <code>true</code> if this category is open.
-   */
-  boolean isOpen();
+	/**
+	 * @return <code>true</code> if this category is open.
+	 */
+	boolean isOpen();
 
-  /**
-   * Sets if this category is open.
-   */
-  void setOpen(boolean b);
+	/**
+	 * Sets if this category is open.
+	 */
+	void setOpen(boolean b);
 
-  /**
-   * @return the {@link List} of {@link IEntry}'s.
-   */
-  List<IEntry> getEntries();
+	/**
+	 * @return the {@link List} of {@link IEntry}'s.
+	 */
+	List<IEntry> getEntries();
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/palette/IEntry.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/palette/IEntry.java
index b9ab2fea1..057867bd1 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/palette/IEntry.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/palette/IEntry.java
@@ -19,43 +19,43 @@
  * @coverage core.control.palette
  */
 public interface IEntry {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sometimes we want to show entry, but don't allow to select it.
-   */
-  boolean isEnabled();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sometimes we want to show entry, but don't allow to select it.
+	 */
+	boolean isEnabled();
 
-  /**
-   * @return the icon of {@link IEntry}.
-   */
-  Image getIcon();
+	/**
+	 * @return the icon of {@link IEntry}.
+	 */
+	Image getIcon();
 
-  /**
-   * @return the title text of {@link IEntry}.
-   */
-  String getText();
+	/**
+	 * @return the title text of {@link IEntry}.
+	 */
+	String getText();
 
-  /**
-   * @return the tooltip text of {@link IEntry}.
-   */
-  String getToolTipText();
+	/**
+	 * @return the tooltip text of {@link IEntry}.
+	 */
+	String getToolTipText();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Activation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Activates this {@link IEntry}.
-   *
-   * @param reload
-   *          is <code>true</code> if entry should be automatically reloaded after successful using.
-   *
-   * @return <code>true</code> if {@link IEntry} was successfully activated.
-   */
-  boolean activate(boolean reload);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Activation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Activates this {@link IEntry}.
+	 *
+	 * @param reload
+	 *          is <code>true</code> if entry should be automatically reloaded after successful using.
+	 *
+	 * @return <code>true</code> if {@link IEntry} was successfully activated.
+	 */
+	boolean activate(boolean reload);
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/palette/IPalette.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/palette/IPalette.java
index 7b1a616d7..504a75e38 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/palette/IPalette.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/palette/IPalette.java
@@ -24,43 +24,43 @@
  * @coverage core.control.palette
  */
 public interface IPalette {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link List} of {@link ICategory}'s to display as roots of palette.
-   */
-  List<ICategory> getCategories();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link List} of {@link ICategory}'s to display as roots of palette.
+	 */
+	List<ICategory> getCategories();
 
-  /**
-   * Adds {@link Action}'s to the popup menu.
-   *
-   * @param menuManager
-   *          the {@link IMenuManager} for {@link Action}'s
-   * @param target
-   *          the object under cursor
-   */
-  void addPopupActions(IMenuManager menuManager, Object target, int iconsType);
+	/**
+	 * Adds {@link Action}'s to the popup menu.
+	 *
+	 * @param menuManager
+	 *          the {@link IMenuManager} for {@link Action}'s
+	 * @param target
+	 *          the object under cursor
+	 */
+	void addPopupActions(IMenuManager menuManager, Object target, int iconsType);
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Asks for selecting default {@link IEntry}.
-   */
-  void selectDefault();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Asks for selecting default {@link IEntry}.
+	 */
+	void selectDefault();
 
-  /**
-   * Moves given <code>category</code> before given <code>nextCategory</code>.
-   */
-  void moveCategory(ICategory category, ICategory nextCategory);
+	/**
+	 * Moves given <code>category</code> before given <code>nextCategory</code>.
+	 */
+	void moveCategory(ICategory category, ICategory nextCategory);
 
-  /**
-   * Moves given <code>entry</code> into given category before <code>nextEntry</code>.
-   */
-  void moveEntry(IEntry entry, ICategory targetCategory, IEntry nextEntry);
+	/**
+	 * Moves given <code>entry</code> into given category before <code>nextEntry</code>.
+	 */
+	void moveEntry(IEntry entry, ICategory targetCategory, IEntry nextEntry);
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/palette/IPalettePreferences.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/palette/IPalettePreferences.java
index 64d13f077..88b0c6690 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/palette/IPalettePreferences.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/palette/IPalettePreferences.java
@@ -20,25 +20,25 @@
  * @coverage core.control.palette
  */
 public interface IPalettePreferences {
-  /**
-   * @return the {@link FontDescriptor} for {@link ICategory}.
-   */
-  FontDescriptor getCategoryFontDescriptor();
+	/**
+	 * @return the {@link FontDescriptor} for {@link ICategory}.
+	 */
+	FontDescriptor getCategoryFontDescriptor();
 
-  /**
-   * @return the {@link FontDescriptor} for {@link IEntry}.
-   */
-  FontDescriptor getEntryFontDescriptor();
+	/**
+	 * @return the {@link FontDescriptor} for {@link IEntry}.
+	 */
+	FontDescriptor getEntryFontDescriptor();
 
-  /**
-   * @return <code>true</code> if only icons should be displayed for {@link IEntry}'s.
-   */
-  boolean isOnlyIcons();
+	/**
+	 * @return <code>true</code> if only icons should be displayed for {@link IEntry}'s.
+	 */
+	boolean isOnlyIcons();
 
-  /**
-   * @return the minimal number of columns for {@link ICategory}.
-   */
-  int getMinColumns();
+	/**
+	 * @return the minimal number of columns for {@link ICategory}.
+	 */
+	int getMinColumns();
 
-  int getLayoutType();
+	int getLayoutType();
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/palette/JustifyPaletteTooltipProvider.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/palette/JustifyPaletteTooltipProvider.java
index 6a9af446d..63f174a05 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/palette/JustifyPaletteTooltipProvider.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/palette/JustifyPaletteTooltipProvider.java
@@ -28,59 +28,59 @@
  * @coverage core.control.palette
  */
 public final class JustifyPaletteTooltipProvider extends CustomTooltipProvider {
-  private final String m_header;
-  private final String m_details;
-  private final int m_wrapChars;
+	private final String m_header;
+	private final String m_details;
+	private final int m_wrapChars;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public JustifyPaletteTooltipProvider(String header, String details, int wrapChars) {
-    m_header = header;
-    m_details = details;
-    m_wrapChars = wrapChars;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public JustifyPaletteTooltipProvider(String header, String details, int wrapChars) {
+		m_header = header;
+		m_details = details;
+		m_wrapChars = wrapChars;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // CustomTooltipProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Figure createTooltipFigure(Figure hostFigure) {
-    // header figure
-    Label headerFigure = new Label(m_header);
-    headerFigure.setFont(SwtResourceManager.getBoldFont(headerFigure.getFont()));
-    // details figure
-    JustifyLabel detailsFigure = new JustifyLabel();
-    detailsFigure.setBorder(new MarginBorder(new Insets(0, 2, 2, 2)));
-    detailsFigure.setWrapChars(m_wrapChars);
-    detailsFigure.setText(m_details);
-    // prepare size's
-    Dimension headerSize = headerFigure.getPreferredSize();
-    Dimension detailsSize = detailsFigure.getPreferredSize();
-    if (headerSize.width > detailsSize.width) {
-      detailsFigure.setWrapPixels(headerSize.width + 10);
-      detailsSize = detailsFigure.getPreferredSize();
-      if (headerSize.width > detailsSize.width) {
-        detailsSize.width = headerSize.width + 10;
-      }
-    }
-    // create container figure
-    Figure tooltipFigure = new Figure();
-    tooltipFigure.add(headerFigure, new Rectangle(detailsSize.width / 2 - headerSize.width / 2,
-        0,
-        headerSize.width,
-        headerSize.height));
-    tooltipFigure.add(detailsFigure, new Rectangle(0,
-        headerSize.height,
-        detailsSize.width,
-        detailsSize.height));
-    tooltipFigure.setBounds(new Rectangle(0, 0, detailsSize.width, headerSize.height
-        + detailsSize.height));
-    //
-    return tooltipFigure;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// CustomTooltipProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Figure createTooltipFigure(Figure hostFigure) {
+		// header figure
+		Label headerFigure = new Label(m_header);
+		headerFigure.setFont(SwtResourceManager.getBoldFont(headerFigure.getFont()));
+		// details figure
+		JustifyLabel detailsFigure = new JustifyLabel();
+		detailsFigure.setBorder(new MarginBorder(new Insets(0, 2, 2, 2)));
+		detailsFigure.setWrapChars(m_wrapChars);
+		detailsFigure.setText(m_details);
+		// prepare size's
+		Dimension headerSize = headerFigure.getPreferredSize();
+		Dimension detailsSize = detailsFigure.getPreferredSize();
+		if (headerSize.width > detailsSize.width) {
+			detailsFigure.setWrapPixels(headerSize.width + 10);
+			detailsSize = detailsFigure.getPreferredSize();
+			if (headerSize.width > detailsSize.width) {
+				detailsSize.width = headerSize.width + 10;
+			}
+		}
+		// create container figure
+		Figure tooltipFigure = new Figure();
+		tooltipFigure.add(headerFigure, new Rectangle(detailsSize.width / 2 - headerSize.width / 2,
+				0,
+				headerSize.width,
+				headerSize.height));
+		tooltipFigure.add(detailsFigure, new Rectangle(0,
+				headerSize.height,
+				detailsSize.width,
+				detailsSize.height));
+		tooltipFigure.setBounds(new Rectangle(0, 0, detailsSize.width, headerSize.height
+				+ detailsSize.height));
+		//
+		return tooltipFigure;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/palette/PaletteComposite.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/palette/PaletteComposite.java
index e3b8f5832..3a0f4af6f 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/palette/PaletteComposite.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/palette/PaletteComposite.java
@@ -55,1238 +55,1238 @@
  * @coverage core.control.palette
  */
 public final class PaletteComposite extends Composite {
-  public static int COLUMN_ICONS_TYPE = 0;
-  public static int LIST_ICONS_TYPE = 1;
-  public static int ONLY_ICONS_TYPE = 2;
-  public static int DETAIL_ICONS_TYPE = 3;
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Colors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final Color COLOR_PALETTE_BACKGROUND = IColorConstants.button;
-  private static final Color COLOR_TEXT_ENABLED = IColorConstants.listForeground;
-  private static final Color COLOR_TEXT_DISABLED = IColorConstants.gray;
-  private static final Color COLOR_ENTRY_SELECTED = DrawUtils.getShiftedColor(
-      COLOR_PALETTE_BACKGROUND,
-      24);
-  private static final Color COLOR_CATEGORY_GRAD_BEGIN = DrawUtils.getShiftedColor(
-      COLOR_PALETTE_BACKGROUND,
-      -8);
-  private static final Color COLOR_CATEGORY_GRAD_END = DrawUtils.getShiftedColor(
-      COLOR_PALETTE_BACKGROUND,
-      16);
-  private static final Color COLOR_CATEGORY_SEL_GRAD_BEGIN = DrawUtils.getShiftedColor(
-      COLOR_PALETTE_BACKGROUND,
-      16);
-  private static final Color COLOR_CATEGORY_SEL_GRAD_END = DrawUtils.getShiftedColor(
-      COLOR_CATEGORY_GRAD_BEGIN,
-      -8);
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Images
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final Image NO_ICON = loadImage("icons/no_icon.gif");
-  private static final Image FOLDER_OPEN = loadImage("icons/folder_open.gif");
-  private static final Image FOLDER_CLOSED = loadImage("icons/folder_closed.gif");
-
-  /**
-   * @return the {@link Image} using path relative to this class.
-   */
-  private static Image loadImage(String path) {
-    return DrawUtils.loadImage(PaletteComposite.class, path);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance fields
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private IPalettePreferences m_preferences;
-  private final FigureCanvas m_figureCanvas;
-  private final GC m_paletteGC;
-  private final PaletteFigure m_paletteFigure;
-  private final Layer m_feedbackLayer;
-  private final Map<ICategory, CategoryFigure> m_categoryFigures = new HashMap<>();
-  private final ResourceManager m_resourceManager = new LocalResourceManager(JFaceResources.getResources());
-  private MenuManager m_menuManager;
-  private IPalette m_palette;
-  private IEntry m_selectedEntry;
-  private Object m_forcedTargetObject;
-  private int m_layoutType;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public PaletteComposite(Composite parent, int style) {
-    super(parent, style);
-    m_preferences = new DefaultPalettePreferences();
-    //
-    setLayout(new FillLayout());
-    // prepare draw2d FigureCanvas
-    {
-      m_figureCanvas = new FigureCanvas(this, SWT.V_SCROLL);
-      m_figureCanvas.getRootFigure().setBackground(COLOR_PALETTE_BACKGROUND);
-      m_figureCanvas.getRootFigure().setForeground(COLOR_TEXT_ENABLED);
-    }
-    // prepare GC (for layout)
-    {
-      m_paletteGC = new GC(m_figureCanvas);
-      addListener(SWT.Dispose, event -> m_paletteGC.dispose());
-    }
-    // add palette figure (layer)
-    m_paletteFigure = new PaletteFigure();
-    m_figureCanvas.getRootFigure().add(m_paletteFigure);
-    // set menu
-    {
-      m_menuManager = new MenuManager();
-      m_menuManager.setRemoveAllWhenShown(true);
-      m_figureCanvas.setMenu(m_menuManager.createContextMenu(m_figureCanvas));
-      m_menuManager.addMenuListener(manager -> addPopupActions(manager));
-    }
-    // add feedback layer
-    {
-      m_feedbackLayer = new Layer("feedback");
-      m_figureCanvas.getRootFigure().add(m_feedbackLayer);
-    }
-    m_layoutType = m_preferences.getLayoutType();
-  }
-
-  /**
-   * Adds {@link Action}'s to the popup menu.
-   */
-  private void addPopupActions(IMenuManager menuManager) {
-    // prepare target figure
-    Figure targetFigure;
-    {
-      org.eclipse.swt.graphics.Point cursorLocation = getDisplay().getCursorLocation();
-      cursorLocation = m_figureCanvas.toControl(cursorLocation);
-      TargetFigureFindVisitor visitor =
-          new TargetFigureFindVisitor(m_figureCanvas, cursorLocation.x, cursorLocation.y);
-      m_figureCanvas.getRootFigure().accept(visitor, false);
-      targetFigure = visitor.getTargetFigure();
-    }
-    // prepare target object
-    Object targetObject = null;
-    if (targetFigure instanceof CategoryFigure) {
-      targetObject = ((CategoryFigure) targetFigure).m_category;
-    } else if (targetFigure instanceof EntryFigure) {
-      targetObject = ((EntryFigure) targetFigure).m_entry;
-    }
-    // may be replace with forced
-    if (m_forcedTargetObject != null) {
-      targetObject = m_forcedTargetObject;
-    }
-    // add actions
-    m_palette.addPopupActions(menuManager, targetObject, m_layoutType);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Dispose
-  //
-  ////////////////////////////////////////////////////////////////////////////
-
-  @Override
-  public void dispose() {
-    super.dispose();
-    m_resourceManager.dispose();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets {@link IPalette} for displaying.
-   */
-  public void setPalette(IPalette palette) {
-    m_palette = palette;
-    refreshPalette();
-  }
-
-  /**
-   * Refresh palette using current {@link IPalette}.
-   */
-  public void refreshPalette() {
-    m_paletteFigure.refresh();
-  }
-
-  /**
-   * Sets new {@link IPalettePreferences}.
-   */
-  public void setPreferences(IPalettePreferences preferences) {
-    m_preferences = preferences;
-    m_layoutType = m_preferences.getLayoutType();
-    m_paletteFigure.onPreferencesUpdate();
-  }
-
-  /**
-   * Sets the selected {@link IEntry}.
-   *
-   * @param reload
-   *          is <code>true</code> if after first using this {@link IEntry} should be loaded again,
-   *          not switched to default entry (usually selection).
-   */
-  public void selectEntry(IEntry selectedEntry, boolean reload) {
-    // activate new entry
-    m_selectedEntry = selectedEntry;
-    if (m_selectedEntry != null) {
-      boolean activated = m_selectedEntry.activate(reload);
-      // if activation was not successful, select default entry
-      if (!activated) {
-        m_palette.selectDefault();
-      }
-    }
-    // display updated state
-    m_paletteFigure.repaint();
-  }
-
-  /**
-   * @return the {@link Figure} used for displaying {@link ICategory}.
-   */
-  public Figure getCategoryFigure(ICategory category) {
-    return m_categoryFigures.get(category);
-  }
-
-  /**
-   * @return the {@link Figure} used for displaying {@link IEntry}.
-   */
-  public Figure getEntryFigure(ICategory category, IEntry entry) {
-    CategoryFigure categoryFigure = m_categoryFigures.get(category);
-    return categoryFigure.m_entryFigures.get(entry);
-  }
-
-  /**
-   * Performs layout operation for palette, after external changes in model.
-   */
-  public void layoutPalette() {
-    m_paletteFigure.layout();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // PaletteFigure
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Top level {@link Figure} for palette - container for {@link CategoryFigure}'s.
-   *
-   * @author scheglov_ke
-   */
-  private final class PaletteFigure extends Layer {
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public PaletteFigure() {
-      super("palette");
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Access
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public void refresh() {
-      m_categoryFigures.clear();
-      removeAll();
-      // add new CategoryFigure's
-      for (ICategory category : m_palette.getCategories()) {
-        CategoryFigure categoryFigure = new CategoryFigure(category);
-        m_categoryFigures.put(category, categoryFigure);
-        add(categoryFigure);
-      }
-      // do initial layout
-      layout();
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Figure
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public void setBounds(Rectangle bounds) {
-      super.setBounds(bounds);
-      layout();
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Internal
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    /**
-     * This method is invoked when {@link IPalettePreferences} changes.
-     */
-    private void onPreferencesUpdate() {
-      for (Iterator<Figure> I = getChildren().iterator(); I.hasNext();) {
-        CategoryFigure categoryFigure = (CategoryFigure) I.next();
-        categoryFigure.onPreferencesUpdate();
-      }
-      layout();
-    }
-
-    /**
-     * Lays out {@link CategoryFigure}'s of palette.
-     */
-    private void layout() {
-      int width = m_figureCanvas.getClientArea().width;
-      width -= getInsets().getWidth();
-      //
-      int y = 0;
-      for (Iterator<Figure> I = getChildren().iterator(); I.hasNext();) {
-        CategoryFigure categoryFigure = (CategoryFigure) I.next();
-        y += categoryFigure.layout(y, width);
-      }
-    }
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // CategoryFigure
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * {@link Figure} implementation for {@link ICategory}.
-   *
-   * @author scheglov_ke
-   */
-  private final class CategoryFigure extends Figure {
-    private static final int IMAGE_SPACE_LEFT = 4;
-    private static final int IMAGE_SPACE_RIGHT = 4;
-    private static final int MARGIN_HEIGHT = 2;
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Instance fields
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    private final ICategory m_category;
-    private final Map<IEntry, EntryFigure> m_entryFigures = new HashMap<>();
-    private int m_columns;
-    private int m_titleHeight;
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public CategoryFigure(ICategory category) {
-      m_category = category;
-      hookEvents();
-      setToolTip(this, null, m_category.getToolTipText());
-      onPreferencesUpdate();
-      // add entry figures
-      for (Object element : m_category.getEntries()) {
-        IEntry entry = (IEntry) element;
-        // add figure
-        EntryFigure entryFigure = new EntryFigure(entry);
-        m_entryFigures.put(entry, entryFigure);
-        add(entryFigure);
-      }
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Access
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    /**
-     * This method is invoked when {@link IPalettePreferences} changes.
-     */
-    public void onPreferencesUpdate() {
-      FontDescriptor fontDescriptor = m_preferences.getCategoryFontDescriptor();
-      setFont(fontDescriptor == null ? null : m_resourceManager.createFont(fontDescriptor));
-      for (Iterator<Figure> I = getChildren().iterator(); I.hasNext();) {
-        EntryFigure entryFigure = (EntryFigure) I.next();
-        entryFigure.onPreferencesUpdate();
-      }
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Events
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    private boolean m_mouseOnTitle;
-    private boolean m_mouseDown;
-    private Point m_downPoint;
-    private boolean m_moving;
-
-    /**
-     * Adds events handlers.
-     */
-    private void hookEvents() {
-      addMouseListener(new IMouseListener() {
-        @Override
-        public void mouseDoubleClick(MouseEvent event) {
-        }
-
-        @Override
-        public void mouseDown(MouseEvent event) {
-          if (event.button == 1) {
-            if (m_mouseOnTitle) {
-              m_mouseDown = true;
-              setCapture(true);
-              m_downPoint = new Point(event.x, event.y);
-            }
-          }
-        }
-
-        @Override
-        public void mouseUp(MouseEvent event) {
-          if (event.button == 1) {
-            m_mouseDown = false;
-            setCapture(false);
-            //
-            if (m_moving) {
-              m_moving = false;
-              move_eraseFeedback();
-              if (m_moveCommand != null) {
-                try {
-                  m_moveCommand.execute();
-                } catch (Throwable e) {
-                }
-              }
-            } else if (m_mouseOnTitle) {
-              m_category.setOpen(!m_category.isOpen());
-              m_paletteFigure.layout();
-            }
-          }
-          repaint();
-        }
-      });
-      addMouseMoveListener(event -> {
-	  if (m_mouseDown) {
-	    Point p = new Point(event.x, event.y);
-	    // update moving
-	    if (!m_moving && m_downPoint.getDistance(p) > 4) {
-	      m_moving = true;
-	    }
-	    // show feedback
-	    if (m_moving) {
-	      move_showFeedback(p);
-	    }
-	  } else {
-	    m_mouseOnTitle = getTitleRectangle().contains(event.x, event.y);
-	    repaint();
-	  }
-	});
-      addMouseTrackListener(new IMouseTrackListener() {
-        @Override
-        public void mouseEnter(MouseEvent e) {
-        }
-
-        @Override
-        public void mouseExit(MouseEvent e) {
-          m_mouseOnTitle = false;
-          repaint();
-        }
-
-        @Override
-        public void mouseHover(MouseEvent e) {
-        }
-      });
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Moving
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    private Figure m_feedback;
-    private Command m_moveCommand;
-
-    /**
-     * Shows feedback of moving this {@link IEntry}.
-     */
-    private void move_showFeedback(Point p) {
-      move_eraseFeedback();
-      m_moveCommand = null;
-      // prepare target figure
-      Figure targetFigure = getTargetFigure(this, p);
-      if (targetFigure instanceof EntryFigure) {
-        targetFigure = targetFigure.getParent();
-      }
-      // show feedback for target category
-      if (targetFigure instanceof CategoryFigure) {
-        // prepare target categories
-        final ICategory category_1 = ((CategoryFigure) targetFigure).m_category;
-        final ICategory category_2;
-        {
-          List<Figure> siblings = targetFigure.getParent().getChildren();
-          Figure nextFigure = GenericsUtils.getNextOrNull(siblings, targetFigure);
-          category_2 = nextFigure != null ? ((CategoryFigure) nextFigure).m_category : null;
-        }
-        // prepare feedback location
-        final boolean before;
-        Point feedbackLocation;
-        {
-          // prepare location in target figure
-          Point targetLocation = p.getCopy();
-          FigureUtils.translateFigureToFigure2(this, targetFigure, targetLocation);
-          // check before/after
-          if (targetLocation.y > targetFigure.getSize().height / 2) {
-            before = true;
-            feedbackLocation = targetFigure.getBounds().getBottomLeft();
-          } else {
-            before = false;
-            feedbackLocation = targetFigure.getBounds().getTopLeft();
-          }
-        }
-        FigureUtils.translateFigureToAbsolute(targetFigure, feedbackLocation);
-        // add feedback figure
-        m_feedback =
-            new FeedbackLine(m_feedbackLayer, true, feedbackLocation, targetFigure.getSize().width);
-        // create command
-        m_moveCommand = new Command() {
-          @Override
-          public void execute() throws Exception {
-            ICategory targetCategory = before ? category_2 : category_1;
-            if (category_1 == m_category) {
-            } else {
-              m_palette.moveCategory(m_category, targetCategory);
-            }
-          }
-        };
-      }
-    }
-
-    /**
-     * Erases feedback of moving this {@link IEntry}.
-     */
-    private void move_eraseFeedback() {
-      if (m_feedback != null) {
-        m_feedback.getParent().remove(m_feedback);
-        m_feedback = null;
-      }
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Layout
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    /**
-     * Lays out inner {@link EntryFigure}'s and returns the height of this figure.
-     */
-    public int layout(int y, int width) {
-      m_titleHeight =
-          MARGIN_HEIGHT + m_paletteGC.textExtent(m_category.getText()).y + MARGIN_HEIGHT;
-      //
-      int height = m_titleHeight;
-      if (m_category.isOpen() && !getChildren().isEmpty()) {
-        // prepare max size of entry
-        int maxWidth = 0;
-        int maxHeight = 0;
-        boolean onlyIcons = m_preferences.getLayoutType() == ONLY_ICONS_TYPE;
-        for (Figure child : getChildren()) {
-          EntryFigure entryFigure = (EntryFigure) child;
-          // update size
-          Dimension entrySize =
-              onlyIcons ? entryFigure.getIconSize() : entryFigure.getIconTextSize();
-          maxWidth = Math.max(maxWidth, entrySize.width);
-          maxHeight = Math.max(maxHeight, entrySize.height);
-        }
-        // prepare columns
-        {
-          m_columns = width / maxWidth;
-          if (!onlyIcons) {
-            m_columns = Math.max(m_columns, m_preferences.getMinColumns());
-          }
-          m_columns = Math.min(m_columns, getChildren().size());
-          m_columns = Math.max(m_columns, 1);
-          if (m_layoutType == LIST_ICONS_TYPE || m_layoutType == DETAIL_ICONS_TYPE) {
-            m_columns = 1;
-          }
-        }
-        // layout children
-        {
-          int column = 0;
-          int entryY = height;
-          for (Figure child : getChildren()) {
-            EntryFigure entryFigure = (EntryFigure) child;
-            // relocate entry
-            if (onlyIcons) {
-              int x = maxWidth * column;
-              entryFigure.setBounds(new Rectangle(x, entryY, maxWidth, maxHeight));
-            } else {
-              int columnWidth = width / m_columns;
-              int x = columnWidth * column;
-              entryFigure.setBounds(new Rectangle(x, entryY, columnWidth, maxHeight));
-            }
-            // update category height
-            if (column == 0) {
-              height += maxHeight;
-            }
-            // wrap to next column
-            if (++column == m_columns) {
-              column = 0;
-              entryY += maxHeight;
-            }
-          }
-        }
-      }
-      // set bounds
-      setBounds(new Rectangle(0, y, width, height));
-      return height;
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Painting
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    protected void paintClientArea(Graphics graphics) {
-      // draw title
-      {
-        Rectangle r = getClientArea();
-        r.height = m_titleHeight;
-        // draw title background
-        graphics.pushState();
-        {
-          if (m_mouseOnTitle || m_moving) {
-            graphics.setForegroundColor(COLOR_CATEGORY_SEL_GRAD_BEGIN);
-            graphics.setBackgroundColor(COLOR_CATEGORY_SEL_GRAD_END);
-          } else {
-            graphics.setForegroundColor(COLOR_CATEGORY_GRAD_BEGIN);
-            graphics.setBackgroundColor(COLOR_CATEGORY_GRAD_END);
-          }
-          graphics.fillGradient(r, true);
-          drawRectangle3D(graphics, r, true);
-        }
-        graphics.popState();
-        // draw state image
-        {
-          Image stateImage;
-          if (m_category.isOpen()) {
-            stateImage = FOLDER_OPEN;
-          } else {
-            stateImage = FOLDER_CLOSED;
-          }
-          // draw state image
-          r.shrinkLeft(IMAGE_SPACE_LEFT);
-          drawImageCV(graphics, stateImage, r.x, r.y, r.height);
-          // modify title rectangle
-          int imageWidth = stateImage.getBounds().width;
-          r.shrinkLeft(imageWidth + IMAGE_SPACE_RIGHT);
-        }
-        // draw title text
-        drawStringCV(graphics, m_category.getText(), r);
-      }
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Internal
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    /**
-     * @return the {@link Rectangle} of title.
-     */
-    private Rectangle getTitleRectangle() {
-      Rectangle r = getClientArea().getCopy();
-      r.height = m_titleHeight;
-      return r;
-    }
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // EntryFigure
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * {@link Figure} implementation for {@link IEntry}.
-   *
-   * @author scheglov_ke
-   */
-  private final class EntryFigure extends Figure {
-    private static final int IMAGE_SPACE_RIGHT = 2;
-    private static final int MARGIN_WIDTH_1 = 3;
-    private static final int MARGIN_WIDTH_2 = 6;
-    private static final int MARGIN_HEIGHT = 3;
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Instance fields
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    private final IEntry m_entry;
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public EntryFigure(IEntry entry) {
-      m_entry = entry;
-      if (m_entry.isEnabled()) {
-        hookEvents();
-      }
-      setToolTip(this, m_entry.getText(), m_entry.getToolTipText());
-      onPreferencesUpdate();
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Access
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    /**
-     * This method is invoked when {@link IPalettePreferences} changes.
-     */
-    public void onPreferencesUpdate() {
-      FontDescriptor fontDescriptor = m_preferences.getEntryFontDescriptor();
-      setFont(fontDescriptor == null ? null : m_resourceManager.createFont(fontDescriptor));
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Events
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    private boolean m_mouseInside;
-    private boolean m_mouseDown;
-    private Point m_downPoint;
-    private boolean m_moving;
-
-    /**
-     * Adds events handlers.
-     */
-    private void hookEvents() {
-      addMouseListener(new IMouseListener() {
-        @Override
-        public void mouseDoubleClick(MouseEvent event) {
-        }
-
-        @Override
-        public void mouseDown(MouseEvent event) {
-          if (event.button == 1) {
-            m_mouseDown = true;
-            m_mouseInside = true;
-            // track moving
-            setCapture(true);
-            m_downPoint = new Point(event.x, event.y);
-            m_moving = false;
-            //
-            repaint();
-          }
-        }
-
-        @Override
-        public void mouseUp(MouseEvent event) {
-          if (event.button == 1 && m_mouseDown) {
-            m_mouseDown = false;
-            setCapture(false);
-            //
-            if (m_moving) {
-              move_eraseFeedback();
-              if (m_moveCommand != null) {
-                try {
-                  m_moveCommand.execute();
-                } catch (Throwable e) {
-                }
-              }
-            } else if (m_mouseInside) {
-              boolean reload = (event.stateMask & SWT.CTRL) != 0;
-              selectEntry(m_entry, reload);
-            }
-          }
-          repaint();
-        }
-      });
-      addMouseMoveListener(event -> {
-	  // update mouse location
-	  boolean oldMouseInside = m_mouseInside;
-	  m_mouseInside = getClientArea().contains(event.x, event.y);
-	  //
-	  if (m_mouseDown) {
-	    Point p = new Point(event.x, event.y);
-	    // update moving
-	    if (!m_moving && m_downPoint.getDistance(p) > 4) {
-	      m_moving = true;
-	    }
-	    // show feedback
-	    if (m_moving) {
-	      move_showFeedback(p);
-	    }
-	  } else if (m_mouseInside != oldMouseInside) {
-	    repaint();
-	  }
-	});
-      addMouseTrackListener(new IMouseTrackListener() {
-        @Override
-        public void mouseEnter(MouseEvent e) {
-          m_mouseInside = true;
-          repaint();
-        }
-
-        @Override
-        public void mouseExit(MouseEvent e) {
-          m_mouseInside = false;
-          repaint();
-        }
-
-        @Override
-        public void mouseHover(MouseEvent e) {
-        }
-      });
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Moving
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    private Figure m_feedback;
-    private Command m_moveCommand;
-
-    /**
-     * Shows feedback of moving this {@link IEntry}.
-     */
-    private void move_showFeedback(Point p) {
-      move_eraseFeedback();
-      m_moveCommand = null;
-      // handle target
-      Figure targetFigure = getTargetFigure(this, p);
-      if (targetFigure instanceof EntryFigure) {
-        final EntryFigure targetEntryFigure = (EntryFigure) targetFigure;
-        final CategoryFigure targetCategoryFigure = (CategoryFigure) targetFigure.getParent();
-        final ICategory targetCategory = targetCategoryFigure.m_category;
-        final IEntry targetEntry = targetEntryFigure.m_entry;
-        // prepare location in target figure
-        Point targetLocation;
-        {
-          targetLocation = p.getCopy();
-          FigureUtils.translateFigureToFigure2(this, targetFigure, targetLocation);
-        }
-        //
-        if (targetCategoryFigure.m_columns == 1) {
-          // prepare feedback location and command
-          Point feedbackLocation;
-          if (targetLocation.y < targetFigure.getSize().height / 2) {
-            feedbackLocation = targetFigure.getBounds().getLocation();
-            move_commandBefore(targetCategory, targetEntry);
-          } else {
-            feedbackLocation = targetFigure.getBounds().getBottomLeft();
-            move_commandAfter(targetCategory, targetEntry);
-          }
-          // add feedback figure
-          {
-            FigureUtils.translateFigureToAbsolute(targetFigure, feedbackLocation);
-            m_feedback =
-                new FeedbackLine(m_feedbackLayer,
-                    true,
-                    feedbackLocation,
-                    targetFigure.getSize().width);
-          }
-        } else {
-          // prepare feedback location and command
-          Point feedbackLocation;
-          if (targetLocation.x < targetFigure.getSize().width / 2) {
-            feedbackLocation = targetFigure.getBounds().getLocation();
-            move_commandBefore(targetCategory, targetEntry);
-          } else {
-            feedbackLocation = targetFigure.getBounds().getTopRight();
-            move_commandAfter(targetCategory, targetEntry);
-          }
-          // add feedback figure
-          {
-            FigureUtils.translateFigureToAbsolute(targetFigure, feedbackLocation);
-            m_feedback =
-                new FeedbackLine(m_feedbackLayer,
-                    false,
-                    feedbackLocation,
-                    targetFigure.getSize().height);
-          }
-        }
-      } else if (targetFigure instanceof CategoryFigure) {
-        final ICategory targetCategory = ((CategoryFigure) targetFigure).m_category;
-        // add feedback
-        {
-          m_feedback = new Figure();
-          m_feedback.setBorder(new LineBorder(IColorConstants.menuBackgroundSelected, 2));
-          //m_feedback.setBorder(PolicyUtils.createTargetBorder());
-          // set bounds, add
-          Rectangle feedbackBounds = targetFigure.getBounds().getCopy();
-          FigureUtils.translateFigureToAbsolute(targetFigure, feedbackBounds);
-          m_feedback.setBounds(feedbackBounds);
-          m_feedbackLayer.add(m_feedback);
-        }
-        // create command
-        m_moveCommand = new Command() {
-          @Override
-          public void execute() throws Exception {
-            m_palette.moveEntry(m_entry, targetCategory, null);
-          }
-        };
-      }
-    }
-
-    /**
-     * Creates "move before" {@link Command}.
-     */
-    private void move_commandBefore(final ICategory targetCategory, final IEntry targetEntry) {
-      m_moveCommand = new Command() {
-        @Override
-        public void execute() throws Exception {
-          if (m_entry != targetEntry) {
-            m_palette.moveEntry(m_entry, targetCategory, targetEntry);
-          }
-        }
-      };
-    }
-
-    /**
-     * Creates "move after" {@link Command}.
-     */
-    private void move_commandAfter(final ICategory targetCategory, final IEntry targetEntry) {
-      m_moveCommand = new Command() {
-        @Override
-        public void execute() throws Exception {
-          if (m_entry != targetEntry) {
-            // prepare "real" target
-            final IEntry targetEntry2 =
-                GenericsUtils.getNextOrNull(targetCategory.getEntries(), targetEntry);
-            // do move
-            if (m_entry != targetEntry2) {
-              m_palette.moveEntry(m_entry, targetCategory, targetEntry2);
-            }
-          }
-        }
-      };
-    }
-
-    /**
-     * Erases feedback of moving this {@link IEntry}.
-     */
-    private void move_eraseFeedback() {
-      if (m_feedback != null) {
-        m_feedback.getParent().remove(m_feedback);
-        m_feedback = null;
-      }
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Access
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    /**
-     * @return the preferred size to display this {@link Figure} with icon.
-     */
-    public Dimension getIconSize() {
-      org.eclipse.swt.graphics.Rectangle imageBounds = getIcon().getBounds();
-      // prepare total size
-      int width = MARGIN_WIDTH_1 + imageBounds.width + MARGIN_WIDTH_2;
-      int height = MARGIN_HEIGHT + imageBounds.height + MARGIN_HEIGHT;
-      return new Dimension(width, height);
-    }
-
-    /**
-     * @return the preferred size to display this {@link Figure} with icon and text.
-     */
-    public Dimension getIconTextSize() {
-      org.eclipse.swt.graphics.Rectangle imageBounds = getIcon().getBounds();
-      org.eclipse.swt.graphics.Point textExtent = m_paletteGC.textExtent(m_entry.getText());
-      // prepare total size
-      int width =
-          MARGIN_WIDTH_1 + imageBounds.width + IMAGE_SPACE_RIGHT + textExtent.x + MARGIN_WIDTH_2;
-      int height = MARGIN_HEIGHT + Math.max(imageBounds.height, textExtent.y) + MARGIN_HEIGHT;
-      return new Dimension(width, height);
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Painting
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    protected void paintClientArea(Graphics graphics) {
-      Rectangle r = getClientArea().getCopy().shrink(1, 1);
-      // draw background
-      graphics.pushState();
-      boolean isSelected = m_entry == m_selectedEntry;
-      if (isSelected || m_mouseDown) {
-        if (isSelected) {
-          graphics.setBackgroundColor(COLOR_ENTRY_SELECTED);
-          graphics.fillRectangle(r);
-        }
-        drawRectangle3D(graphics, r, false);
-        // shift right and bottom
-        r.shrinkLeft(1);
-        r.shrinkTop(1);
-      } else if (m_mouseInside) {
-        drawRectangle3D(graphics, r, true);
-      }
-      graphics.popState();
-      // draw icon/text
-      graphics.pushState();
-      if (m_entry.isEnabled()) {
-        paintClientArea_enabled(graphics, r);
-      } else {
-        paintClientArea_disabled(graphics, r);
-      }
-      graphics.popState();
-    }
-
-    private void paintClientArea_enabled(Graphics graphics, Rectangle r) {
-      int x = r.x + MARGIN_WIDTH_1;
-      // draw icon
-      {
-        Image icon = getIcon();
-        drawImageCV(graphics, icon, x, r.y, r.height);
-        x += icon.getBounds().width + IMAGE_SPACE_RIGHT;
-      }
-      // draw text
-      if (!m_preferences.isOnlyIcons()) {
-        graphics.setForegroundColor(COLOR_TEXT_ENABLED);
-        if (m_layoutType == DETAIL_ICONS_TYPE) {
-          drawStringCV(
-              graphics,
-              m_entry.getText() + " -" + m_entry.getToolTipText(),
-              x,
-              r.y,
-              r.width - x,
-              r.height);
-        } else {
-          drawStringCV(graphics, m_entry.getText(), x, r.y, r.width - x, r.height);
-        }
-      }
-    }
-
-    private void paintClientArea_disabled(Graphics graphics, Rectangle r) {
-      int x = r.x + MARGIN_WIDTH_1;
-      // draw icon
-      {
-        Image icon = getIcon();
-        Image disabledIcon = new Image(null, icon, SWT.IMAGE_DISABLE);
-        try {
-          drawImageCV(graphics, disabledIcon, x, r.y, r.height);
-          x += disabledIcon.getBounds().width + IMAGE_SPACE_RIGHT;
-        } finally {
-          disabledIcon.dispose();
-        }
-      }
-      // draw text
-      if (!m_preferences.isOnlyIcons()) {
-        graphics.setForegroundColor(COLOR_TEXT_DISABLED);
-        drawStringCV(graphics, m_entry.getText(), x, r.y, r.width - x, r.height);
-      }
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Utils
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    /**
-     * @return the icon of this entry.
-     */
-    private Image getIcon() {
-      Image icon = m_entry.getIcon();
-      if (icon != null && !icon.isDisposed()) {
-        return icon;
-      }
-      return NO_ICON;
-    }
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // FeedbackLine
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Moving feedback {@link Figure}.
-   *
-   * @author scheglov_ke
-   */
-  private static final class FeedbackLine extends Figure {
-    private final boolean m_horizontal;
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public FeedbackLine(Figure parent, boolean horizontal, Point location, int size) {
-      m_horizontal = horizontal;
-      parent.add(this);
-      //
-      Rectangle bounds;
-      if (horizontal) {
-        bounds = new Rectangle(location.x, location.y - 3, size, 6);
-        bounds.y = Math.max(bounds.y, 0);
-        bounds.y = Math.min(bounds.y, parent.getClientArea().height - 6);
-      } else {
-        bounds = new Rectangle(location.x - 3, location.y, 6, size);
-        bounds.x = Math.max(bounds.x, 0);
-        bounds.x = Math.min(bounds.x, parent.getClientArea().width - 6);
-      }
-      setBounds(bounds);
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Painting
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    protected void paintClientArea(Graphics graphics) {
-      Rectangle clientArea = getClientArea();
-      if (m_horizontal) {
-        // left
-        {
-          int x = 0;
-          graphics.drawLine(x, 0, x, 5);
-          x++;
-          graphics.drawLine(x, 1, x, 4);
-        }
-        // right
-        {
-          int x = clientArea.right() - 1;
-          graphics.drawLine(x, 0, x, 5);
-          x--;
-          graphics.drawLine(x, 1, x, 4);
-        }
-        // center
-        {
-          graphics.setLineWidth(2);
-          graphics.drawLine(0, 3, clientArea.width, 3);
-        }
-      } else {
-        // top
-        {
-          int y = 0;
-          graphics.drawLine(0, y, 5, y);
-          y++;
-          graphics.drawLine(1, y, 4, y);
-        }
-        // bottom
-        {
-          int y = clientArea.height - 1;
-          graphics.drawLine(0, y, 5, y);
-          y--;
-          graphics.drawLine(1, y, 4, y);
-        }
-        // center
-        {
-          graphics.setLineWidth(2);
-          graphics.drawLine(3, 2, 3, clientArea.height);
-        }
-      }
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return {@link Figure} under given mouse location.
-   *
-   * @param source
-   *          the source {@link Figure}
-   * @param p
-   *          the mouse location relative to given <code>source</code>
-   */
-  private Figure getTargetFigure(Figure source, Point p) {
-    // use absolute coordinates
-    Point absoluteLocation = p.getCopy();
-    FigureUtils.translateFigureToCanvas(source, absoluteLocation);
-    // do search
-    TargetFigureFindVisitor visitor =
-        new TargetFigureFindVisitor(m_figureCanvas, absoluteLocation.x, absoluteLocation.y);
-    m_figureCanvas.getRootFigure().accept(visitor, false);
-    return visitor.getTargetFigure();
-  }
-
-  /**
-   * Sets wrapped tooltip for given figure.
-   */
-  private static void setToolTip(Figure figure, String header, String details) {
-    if (header != null && details != null) {
-      figure.setCustomTooltipProvider(new HtmlPaletteTooltipProvider(header, details));
-    } else if (details == null) {
-      figure.setCustomTooltipProvider(new SimplePaletteTooltipProvider(header));
-    } else if (header == null) {
-      figure.setCustomTooltipProvider(new HtmlPaletteTooltipProvider(null, details));
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Drawing utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Draws given text clipped horizontally and centered vertically.
-   */
-  public static final void drawStringCV(Graphics graphics, String text, Rectangle r) {
-    drawStringCV(graphics, text, r.x, r.y, r.width, r.height);
-  }
-
-  /**
-   * Draws given text clipped horizontally and centered vertically.
-   */
-  public static final void drawStringCV(Graphics graphics,
-      String text,
-      int x,
-      int y,
-      int width,
-      int height) {
-    int textY = y + (height - graphics.getFontMetrics().getHeight()) / 2;
-    String clipString = DrawUtils.clipString(graphics.gc, text, width);
-    graphics.drawText(clipString, x, textY);
-  }
-
-  /**
-   * Draws image at given <code>x</code> and centered vertically.
-   */
-  public static final void drawImageCV(Graphics graphics, Image image, int x, int y, int height) {
-    if (image != null) {
-      int imageHeight = image.getBounds().height;
-      graphics.drawImage(image, x, y + (height - imageHeight) / 2);
-    }
-  }
-
-  /**
-   * Draws 3D highlight rectangle.
-   */
-  private static void drawRectangle3D(Graphics gc, Rectangle r, boolean up) {
-    int x = r.x;
-    int y = r.y;
-    int right = r.right() - 1;
-    int bottom = r.bottom() - 1;
-    //
-    if (up) {
-      gc.setForegroundColor(IColorConstants.buttonLightest);
-    } else {
-      gc.setForegroundColor(IColorConstants.buttonDarker);
-    }
-    gc.drawLine(x, y, right, y);
-    gc.drawLine(x, y, x, bottom);
-    //
-    if (up) {
-      gc.setForegroundColor(IColorConstants.buttonDarker);
-    } else {
-      gc.setForegroundColor(IColorConstants.buttonLightest);
-    }
-    gc.drawLine(right, y, right, bottom);
-    gc.drawLine(x, bottom, right, bottom);
-  }
-
-  public void setLayoutType(int type) {
-    m_layoutType = type;
-  }
-
-  public void refreshComposite() {
-    m_paletteFigure.onPreferencesUpdate();
-  }
+	public static int COLUMN_ICONS_TYPE = 0;
+	public static int LIST_ICONS_TYPE = 1;
+	public static int ONLY_ICONS_TYPE = 2;
+	public static int DETAIL_ICONS_TYPE = 3;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Colors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final Color COLOR_PALETTE_BACKGROUND = IColorConstants.button;
+	private static final Color COLOR_TEXT_ENABLED = IColorConstants.listForeground;
+	private static final Color COLOR_TEXT_DISABLED = IColorConstants.gray;
+	private static final Color COLOR_ENTRY_SELECTED = DrawUtils.getShiftedColor(
+			COLOR_PALETTE_BACKGROUND,
+			24);
+	private static final Color COLOR_CATEGORY_GRAD_BEGIN = DrawUtils.getShiftedColor(
+			COLOR_PALETTE_BACKGROUND,
+			-8);
+	private static final Color COLOR_CATEGORY_GRAD_END = DrawUtils.getShiftedColor(
+			COLOR_PALETTE_BACKGROUND,
+			16);
+	private static final Color COLOR_CATEGORY_SEL_GRAD_BEGIN = DrawUtils.getShiftedColor(
+			COLOR_PALETTE_BACKGROUND,
+			16);
+	private static final Color COLOR_CATEGORY_SEL_GRAD_END = DrawUtils.getShiftedColor(
+			COLOR_CATEGORY_GRAD_BEGIN,
+			-8);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Images
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final Image NO_ICON = loadImage("icons/no_icon.gif");
+	private static final Image FOLDER_OPEN = loadImage("icons/folder_open.gif");
+	private static final Image FOLDER_CLOSED = loadImage("icons/folder_closed.gif");
+
+	/**
+	 * @return the {@link Image} using path relative to this class.
+	 */
+	private static Image loadImage(String path) {
+		return DrawUtils.loadImage(PaletteComposite.class, path);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance fields
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private IPalettePreferences m_preferences;
+	private final FigureCanvas m_figureCanvas;
+	private final GC m_paletteGC;
+	private final PaletteFigure m_paletteFigure;
+	private final Layer m_feedbackLayer;
+	private final Map<ICategory, CategoryFigure> m_categoryFigures = new HashMap<>();
+	private final ResourceManager m_resourceManager = new LocalResourceManager(JFaceResources.getResources());
+	private MenuManager m_menuManager;
+	private IPalette m_palette;
+	private IEntry m_selectedEntry;
+	private Object m_forcedTargetObject;
+	private int m_layoutType;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public PaletteComposite(Composite parent, int style) {
+		super(parent, style);
+		m_preferences = new DefaultPalettePreferences();
+		//
+		setLayout(new FillLayout());
+		// prepare draw2d FigureCanvas
+		{
+			m_figureCanvas = new FigureCanvas(this, SWT.V_SCROLL);
+			m_figureCanvas.getRootFigure().setBackground(COLOR_PALETTE_BACKGROUND);
+			m_figureCanvas.getRootFigure().setForeground(COLOR_TEXT_ENABLED);
+		}
+		// prepare GC (for layout)
+		{
+			m_paletteGC = new GC(m_figureCanvas);
+			addListener(SWT.Dispose, event -> m_paletteGC.dispose());
+		}
+		// add palette figure (layer)
+		m_paletteFigure = new PaletteFigure();
+		m_figureCanvas.getRootFigure().add(m_paletteFigure);
+		// set menu
+		{
+			m_menuManager = new MenuManager();
+			m_menuManager.setRemoveAllWhenShown(true);
+			m_figureCanvas.setMenu(m_menuManager.createContextMenu(m_figureCanvas));
+			m_menuManager.addMenuListener(manager -> addPopupActions(manager));
+		}
+		// add feedback layer
+		{
+			m_feedbackLayer = new Layer("feedback");
+			m_figureCanvas.getRootFigure().add(m_feedbackLayer);
+		}
+		m_layoutType = m_preferences.getLayoutType();
+	}
+
+	/**
+	 * Adds {@link Action}'s to the popup menu.
+	 */
+	private void addPopupActions(IMenuManager menuManager) {
+		// prepare target figure
+		Figure targetFigure;
+		{
+			org.eclipse.swt.graphics.Point cursorLocation = getDisplay().getCursorLocation();
+			cursorLocation = m_figureCanvas.toControl(cursorLocation);
+			TargetFigureFindVisitor visitor =
+					new TargetFigureFindVisitor(m_figureCanvas, cursorLocation.x, cursorLocation.y);
+			m_figureCanvas.getRootFigure().accept(visitor, false);
+			targetFigure = visitor.getTargetFigure();
+		}
+		// prepare target object
+		Object targetObject = null;
+		if (targetFigure instanceof CategoryFigure) {
+			targetObject = ((CategoryFigure) targetFigure).m_category;
+		} else if (targetFigure instanceof EntryFigure) {
+			targetObject = ((EntryFigure) targetFigure).m_entry;
+		}
+		// may be replace with forced
+		if (m_forcedTargetObject != null) {
+			targetObject = m_forcedTargetObject;
+		}
+		// add actions
+		m_palette.addPopupActions(menuManager, targetObject, m_layoutType);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Dispose
+	//
+	////////////////////////////////////////////////////////////////////////////
+
+	@Override
+	public void dispose() {
+		super.dispose();
+		m_resourceManager.dispose();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets {@link IPalette} for displaying.
+	 */
+	public void setPalette(IPalette palette) {
+		m_palette = palette;
+		refreshPalette();
+	}
+
+	/**
+	 * Refresh palette using current {@link IPalette}.
+	 */
+	public void refreshPalette() {
+		m_paletteFigure.refresh();
+	}
+
+	/**
+	 * Sets new {@link IPalettePreferences}.
+	 */
+	public void setPreferences(IPalettePreferences preferences) {
+		m_preferences = preferences;
+		m_layoutType = m_preferences.getLayoutType();
+		m_paletteFigure.onPreferencesUpdate();
+	}
+
+	/**
+	 * Sets the selected {@link IEntry}.
+	 *
+	 * @param reload
+	 *          is <code>true</code> if after first using this {@link IEntry} should be loaded again,
+	 *          not switched to default entry (usually selection).
+	 */
+	public void selectEntry(IEntry selectedEntry, boolean reload) {
+		// activate new entry
+		m_selectedEntry = selectedEntry;
+		if (m_selectedEntry != null) {
+			boolean activated = m_selectedEntry.activate(reload);
+			// if activation was not successful, select default entry
+			if (!activated) {
+				m_palette.selectDefault();
+			}
+		}
+		// display updated state
+		m_paletteFigure.repaint();
+	}
+
+	/**
+	 * @return the {@link Figure} used for displaying {@link ICategory}.
+	 */
+	public Figure getCategoryFigure(ICategory category) {
+		return m_categoryFigures.get(category);
+	}
+
+	/**
+	 * @return the {@link Figure} used for displaying {@link IEntry}.
+	 */
+	public Figure getEntryFigure(ICategory category, IEntry entry) {
+		CategoryFigure categoryFigure = m_categoryFigures.get(category);
+		return categoryFigure.m_entryFigures.get(entry);
+	}
+
+	/**
+	 * Performs layout operation for palette, after external changes in model.
+	 */
+	public void layoutPalette() {
+		m_paletteFigure.layout();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// PaletteFigure
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Top level {@link Figure} for palette - container for {@link CategoryFigure}'s.
+	 *
+	 * @author scheglov_ke
+	 */
+	private final class PaletteFigure extends Layer {
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public PaletteFigure() {
+			super("palette");
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Access
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public void refresh() {
+			m_categoryFigures.clear();
+			removeAll();
+			// add new CategoryFigure's
+			for (ICategory category : m_palette.getCategories()) {
+				CategoryFigure categoryFigure = new CategoryFigure(category);
+				m_categoryFigures.put(category, categoryFigure);
+				add(categoryFigure);
+			}
+			// do initial layout
+			layout();
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Figure
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public void setBounds(Rectangle bounds) {
+			super.setBounds(bounds);
+			layout();
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Internal
+		//
+		////////////////////////////////////////////////////////////////////////////
+		/**
+		 * This method is invoked when {@link IPalettePreferences} changes.
+		 */
+		private void onPreferencesUpdate() {
+			for (Iterator<Figure> I = getChildren().iterator(); I.hasNext();) {
+				CategoryFigure categoryFigure = (CategoryFigure) I.next();
+				categoryFigure.onPreferencesUpdate();
+			}
+			layout();
+		}
+
+		/**
+		 * Lays out {@link CategoryFigure}'s of palette.
+		 */
+		private void layout() {
+			int width = m_figureCanvas.getClientArea().width;
+			width -= getInsets().getWidth();
+			//
+			int y = 0;
+			for (Iterator<Figure> I = getChildren().iterator(); I.hasNext();) {
+				CategoryFigure categoryFigure = (CategoryFigure) I.next();
+				y += categoryFigure.layout(y, width);
+			}
+		}
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// CategoryFigure
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * {@link Figure} implementation for {@link ICategory}.
+	 *
+	 * @author scheglov_ke
+	 */
+	private final class CategoryFigure extends Figure {
+		private static final int IMAGE_SPACE_LEFT = 4;
+		private static final int IMAGE_SPACE_RIGHT = 4;
+		private static final int MARGIN_HEIGHT = 2;
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Instance fields
+		//
+		////////////////////////////////////////////////////////////////////////////
+		private final ICategory m_category;
+		private final Map<IEntry, EntryFigure> m_entryFigures = new HashMap<>();
+		private int m_columns;
+		private int m_titleHeight;
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public CategoryFigure(ICategory category) {
+			m_category = category;
+			hookEvents();
+			setToolTip(this, null, m_category.getToolTipText());
+			onPreferencesUpdate();
+			// add entry figures
+			for (Object element : m_category.getEntries()) {
+				IEntry entry = (IEntry) element;
+				// add figure
+				EntryFigure entryFigure = new EntryFigure(entry);
+				m_entryFigures.put(entry, entryFigure);
+				add(entryFigure);
+			}
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Access
+		//
+		////////////////////////////////////////////////////////////////////////////
+		/**
+		 * This method is invoked when {@link IPalettePreferences} changes.
+		 */
+		public void onPreferencesUpdate() {
+			FontDescriptor fontDescriptor = m_preferences.getCategoryFontDescriptor();
+			setFont(fontDescriptor == null ? null : m_resourceManager.createFont(fontDescriptor));
+			for (Iterator<Figure> I = getChildren().iterator(); I.hasNext();) {
+				EntryFigure entryFigure = (EntryFigure) I.next();
+				entryFigure.onPreferencesUpdate();
+			}
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Events
+		//
+		////////////////////////////////////////////////////////////////////////////
+		private boolean m_mouseOnTitle;
+		private boolean m_mouseDown;
+		private Point m_downPoint;
+		private boolean m_moving;
+
+		/**
+		 * Adds events handlers.
+		 */
+		private void hookEvents() {
+			addMouseListener(new IMouseListener() {
+				@Override
+				public void mouseDoubleClick(MouseEvent event) {
+				}
+
+				@Override
+				public void mouseDown(MouseEvent event) {
+					if (event.button == 1) {
+						if (m_mouseOnTitle) {
+							m_mouseDown = true;
+							setCapture(true);
+							m_downPoint = new Point(event.x, event.y);
+						}
+					}
+				}
+
+				@Override
+				public void mouseUp(MouseEvent event) {
+					if (event.button == 1) {
+						m_mouseDown = false;
+						setCapture(false);
+						//
+						if (m_moving) {
+							m_moving = false;
+							move_eraseFeedback();
+							if (m_moveCommand != null) {
+								try {
+									m_moveCommand.execute();
+								} catch (Throwable e) {
+								}
+							}
+						} else if (m_mouseOnTitle) {
+							m_category.setOpen(!m_category.isOpen());
+							m_paletteFigure.layout();
+						}
+					}
+					repaint();
+				}
+			});
+			addMouseMoveListener(event -> {
+				if (m_mouseDown) {
+					Point p = new Point(event.x, event.y);
+					// update moving
+					if (!m_moving && m_downPoint.getDistance(p) > 4) {
+						m_moving = true;
+					}
+					// show feedback
+					if (m_moving) {
+						move_showFeedback(p);
+					}
+				} else {
+					m_mouseOnTitle = getTitleRectangle().contains(event.x, event.y);
+					repaint();
+				}
+			});
+			addMouseTrackListener(new IMouseTrackListener() {
+				@Override
+				public void mouseEnter(MouseEvent e) {
+				}
+
+				@Override
+				public void mouseExit(MouseEvent e) {
+					m_mouseOnTitle = false;
+					repaint();
+				}
+
+				@Override
+				public void mouseHover(MouseEvent e) {
+				}
+			});
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Moving
+		//
+		////////////////////////////////////////////////////////////////////////////
+		private Figure m_feedback;
+		private Command m_moveCommand;
+
+		/**
+		 * Shows feedback of moving this {@link IEntry}.
+		 */
+		private void move_showFeedback(Point p) {
+			move_eraseFeedback();
+			m_moveCommand = null;
+			// prepare target figure
+			Figure targetFigure = getTargetFigure(this, p);
+			if (targetFigure instanceof EntryFigure) {
+				targetFigure = targetFigure.getParent();
+			}
+			// show feedback for target category
+			if (targetFigure instanceof CategoryFigure) {
+				// prepare target categories
+				final ICategory category_1 = ((CategoryFigure) targetFigure).m_category;
+				final ICategory category_2;
+				{
+					List<Figure> siblings = targetFigure.getParent().getChildren();
+					Figure nextFigure = GenericsUtils.getNextOrNull(siblings, targetFigure);
+					category_2 = nextFigure != null ? ((CategoryFigure) nextFigure).m_category : null;
+				}
+				// prepare feedback location
+				final boolean before;
+				Point feedbackLocation;
+				{
+					// prepare location in target figure
+					Point targetLocation = p.getCopy();
+					FigureUtils.translateFigureToFigure2(this, targetFigure, targetLocation);
+					// check before/after
+					if (targetLocation.y > targetFigure.getSize().height / 2) {
+						before = true;
+						feedbackLocation = targetFigure.getBounds().getBottomLeft();
+					} else {
+						before = false;
+						feedbackLocation = targetFigure.getBounds().getTopLeft();
+					}
+				}
+				FigureUtils.translateFigureToAbsolute(targetFigure, feedbackLocation);
+				// add feedback figure
+				m_feedback =
+						new FeedbackLine(m_feedbackLayer, true, feedbackLocation, targetFigure.getSize().width);
+				// create command
+				m_moveCommand = new Command() {
+					@Override
+					public void execute() throws Exception {
+						ICategory targetCategory = before ? category_2 : category_1;
+						if (category_1 == m_category) {
+						} else {
+							m_palette.moveCategory(m_category, targetCategory);
+						}
+					}
+				};
+			}
+		}
+
+		/**
+		 * Erases feedback of moving this {@link IEntry}.
+		 */
+		private void move_eraseFeedback() {
+			if (m_feedback != null) {
+				m_feedback.getParent().remove(m_feedback);
+				m_feedback = null;
+			}
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Layout
+		//
+		////////////////////////////////////////////////////////////////////////////
+		/**
+		 * Lays out inner {@link EntryFigure}'s and returns the height of this figure.
+		 */
+		public int layout(int y, int width) {
+			m_titleHeight =
+					MARGIN_HEIGHT + m_paletteGC.textExtent(m_category.getText()).y + MARGIN_HEIGHT;
+			//
+			int height = m_titleHeight;
+			if (m_category.isOpen() && !getChildren().isEmpty()) {
+				// prepare max size of entry
+				int maxWidth = 0;
+				int maxHeight = 0;
+				boolean onlyIcons = m_preferences.getLayoutType() == ONLY_ICONS_TYPE;
+				for (Figure child : getChildren()) {
+					EntryFigure entryFigure = (EntryFigure) child;
+					// update size
+					Dimension entrySize =
+							onlyIcons ? entryFigure.getIconSize() : entryFigure.getIconTextSize();
+					maxWidth = Math.max(maxWidth, entrySize.width);
+					maxHeight = Math.max(maxHeight, entrySize.height);
+				}
+				// prepare columns
+				{
+					m_columns = width / maxWidth;
+					if (!onlyIcons) {
+						m_columns = Math.max(m_columns, m_preferences.getMinColumns());
+					}
+					m_columns = Math.min(m_columns, getChildren().size());
+					m_columns = Math.max(m_columns, 1);
+					if (m_layoutType == LIST_ICONS_TYPE || m_layoutType == DETAIL_ICONS_TYPE) {
+						m_columns = 1;
+					}
+				}
+				// layout children
+				{
+					int column = 0;
+					int entryY = height;
+					for (Figure child : getChildren()) {
+						EntryFigure entryFigure = (EntryFigure) child;
+						// relocate entry
+						if (onlyIcons) {
+							int x = maxWidth * column;
+							entryFigure.setBounds(new Rectangle(x, entryY, maxWidth, maxHeight));
+						} else {
+							int columnWidth = width / m_columns;
+							int x = columnWidth * column;
+							entryFigure.setBounds(new Rectangle(x, entryY, columnWidth, maxHeight));
+						}
+						// update category height
+						if (column == 0) {
+							height += maxHeight;
+						}
+						// wrap to next column
+						if (++column == m_columns) {
+							column = 0;
+							entryY += maxHeight;
+						}
+					}
+				}
+			}
+			// set bounds
+			setBounds(new Rectangle(0, y, width, height));
+			return height;
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Painting
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		protected void paintClientArea(Graphics graphics) {
+			// draw title
+			{
+				Rectangle r = getClientArea();
+				r.height = m_titleHeight;
+				// draw title background
+				graphics.pushState();
+				{
+					if (m_mouseOnTitle || m_moving) {
+						graphics.setForegroundColor(COLOR_CATEGORY_SEL_GRAD_BEGIN);
+						graphics.setBackgroundColor(COLOR_CATEGORY_SEL_GRAD_END);
+					} else {
+						graphics.setForegroundColor(COLOR_CATEGORY_GRAD_BEGIN);
+						graphics.setBackgroundColor(COLOR_CATEGORY_GRAD_END);
+					}
+					graphics.fillGradient(r, true);
+					drawRectangle3D(graphics, r, true);
+				}
+				graphics.popState();
+				// draw state image
+				{
+					Image stateImage;
+					if (m_category.isOpen()) {
+						stateImage = FOLDER_OPEN;
+					} else {
+						stateImage = FOLDER_CLOSED;
+					}
+					// draw state image
+					r.shrinkLeft(IMAGE_SPACE_LEFT);
+					drawImageCV(graphics, stateImage, r.x, r.y, r.height);
+					// modify title rectangle
+					int imageWidth = stateImage.getBounds().width;
+					r.shrinkLeft(imageWidth + IMAGE_SPACE_RIGHT);
+				}
+				// draw title text
+				drawStringCV(graphics, m_category.getText(), r);
+			}
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Internal
+		//
+		////////////////////////////////////////////////////////////////////////////
+		/**
+		 * @return the {@link Rectangle} of title.
+		 */
+		private Rectangle getTitleRectangle() {
+			Rectangle r = getClientArea().getCopy();
+			r.height = m_titleHeight;
+			return r;
+		}
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// EntryFigure
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * {@link Figure} implementation for {@link IEntry}.
+	 *
+	 * @author scheglov_ke
+	 */
+	private final class EntryFigure extends Figure {
+		private static final int IMAGE_SPACE_RIGHT = 2;
+		private static final int MARGIN_WIDTH_1 = 3;
+		private static final int MARGIN_WIDTH_2 = 6;
+		private static final int MARGIN_HEIGHT = 3;
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Instance fields
+		//
+		////////////////////////////////////////////////////////////////////////////
+		private final IEntry m_entry;
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public EntryFigure(IEntry entry) {
+			m_entry = entry;
+			if (m_entry.isEnabled()) {
+				hookEvents();
+			}
+			setToolTip(this, m_entry.getText(), m_entry.getToolTipText());
+			onPreferencesUpdate();
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Access
+		//
+		////////////////////////////////////////////////////////////////////////////
+		/**
+		 * This method is invoked when {@link IPalettePreferences} changes.
+		 */
+		public void onPreferencesUpdate() {
+			FontDescriptor fontDescriptor = m_preferences.getEntryFontDescriptor();
+			setFont(fontDescriptor == null ? null : m_resourceManager.createFont(fontDescriptor));
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Events
+		//
+		////////////////////////////////////////////////////////////////////////////
+		private boolean m_mouseInside;
+		private boolean m_mouseDown;
+		private Point m_downPoint;
+		private boolean m_moving;
+
+		/**
+		 * Adds events handlers.
+		 */
+		private void hookEvents() {
+			addMouseListener(new IMouseListener() {
+				@Override
+				public void mouseDoubleClick(MouseEvent event) {
+				}
+
+				@Override
+				public void mouseDown(MouseEvent event) {
+					if (event.button == 1) {
+						m_mouseDown = true;
+						m_mouseInside = true;
+						// track moving
+						setCapture(true);
+						m_downPoint = new Point(event.x, event.y);
+						m_moving = false;
+						//
+						repaint();
+					}
+				}
+
+				@Override
+				public void mouseUp(MouseEvent event) {
+					if (event.button == 1 && m_mouseDown) {
+						m_mouseDown = false;
+						setCapture(false);
+						//
+						if (m_moving) {
+							move_eraseFeedback();
+							if (m_moveCommand != null) {
+								try {
+									m_moveCommand.execute();
+								} catch (Throwable e) {
+								}
+							}
+						} else if (m_mouseInside) {
+							boolean reload = (event.stateMask & SWT.CTRL) != 0;
+							selectEntry(m_entry, reload);
+						}
+					}
+					repaint();
+				}
+			});
+			addMouseMoveListener(event -> {
+				// update mouse location
+				boolean oldMouseInside = m_mouseInside;
+				m_mouseInside = getClientArea().contains(event.x, event.y);
+				//
+				if (m_mouseDown) {
+					Point p = new Point(event.x, event.y);
+					// update moving
+					if (!m_moving && m_downPoint.getDistance(p) > 4) {
+						m_moving = true;
+					}
+					// show feedback
+					if (m_moving) {
+						move_showFeedback(p);
+					}
+				} else if (m_mouseInside != oldMouseInside) {
+					repaint();
+				}
+			});
+			addMouseTrackListener(new IMouseTrackListener() {
+				@Override
+				public void mouseEnter(MouseEvent e) {
+					m_mouseInside = true;
+					repaint();
+				}
+
+				@Override
+				public void mouseExit(MouseEvent e) {
+					m_mouseInside = false;
+					repaint();
+				}
+
+				@Override
+				public void mouseHover(MouseEvent e) {
+				}
+			});
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Moving
+		//
+		////////////////////////////////////////////////////////////////////////////
+		private Figure m_feedback;
+		private Command m_moveCommand;
+
+		/**
+		 * Shows feedback of moving this {@link IEntry}.
+		 */
+		private void move_showFeedback(Point p) {
+			move_eraseFeedback();
+			m_moveCommand = null;
+			// handle target
+			Figure targetFigure = getTargetFigure(this, p);
+			if (targetFigure instanceof EntryFigure) {
+				final EntryFigure targetEntryFigure = (EntryFigure) targetFigure;
+				final CategoryFigure targetCategoryFigure = (CategoryFigure) targetFigure.getParent();
+				final ICategory targetCategory = targetCategoryFigure.m_category;
+				final IEntry targetEntry = targetEntryFigure.m_entry;
+				// prepare location in target figure
+				Point targetLocation;
+				{
+					targetLocation = p.getCopy();
+					FigureUtils.translateFigureToFigure2(this, targetFigure, targetLocation);
+				}
+				//
+				if (targetCategoryFigure.m_columns == 1) {
+					// prepare feedback location and command
+					Point feedbackLocation;
+					if (targetLocation.y < targetFigure.getSize().height / 2) {
+						feedbackLocation = targetFigure.getBounds().getLocation();
+						move_commandBefore(targetCategory, targetEntry);
+					} else {
+						feedbackLocation = targetFigure.getBounds().getBottomLeft();
+						move_commandAfter(targetCategory, targetEntry);
+					}
+					// add feedback figure
+					{
+						FigureUtils.translateFigureToAbsolute(targetFigure, feedbackLocation);
+						m_feedback =
+								new FeedbackLine(m_feedbackLayer,
+										true,
+										feedbackLocation,
+										targetFigure.getSize().width);
+					}
+				} else {
+					// prepare feedback location and command
+					Point feedbackLocation;
+					if (targetLocation.x < targetFigure.getSize().width / 2) {
+						feedbackLocation = targetFigure.getBounds().getLocation();
+						move_commandBefore(targetCategory, targetEntry);
+					} else {
+						feedbackLocation = targetFigure.getBounds().getTopRight();
+						move_commandAfter(targetCategory, targetEntry);
+					}
+					// add feedback figure
+					{
+						FigureUtils.translateFigureToAbsolute(targetFigure, feedbackLocation);
+						m_feedback =
+								new FeedbackLine(m_feedbackLayer,
+										false,
+										feedbackLocation,
+										targetFigure.getSize().height);
+					}
+				}
+			} else if (targetFigure instanceof CategoryFigure) {
+				final ICategory targetCategory = ((CategoryFigure) targetFigure).m_category;
+				// add feedback
+				{
+					m_feedback = new Figure();
+					m_feedback.setBorder(new LineBorder(IColorConstants.menuBackgroundSelected, 2));
+					//m_feedback.setBorder(PolicyUtils.createTargetBorder());
+					// set bounds, add
+					Rectangle feedbackBounds = targetFigure.getBounds().getCopy();
+					FigureUtils.translateFigureToAbsolute(targetFigure, feedbackBounds);
+					m_feedback.setBounds(feedbackBounds);
+					m_feedbackLayer.add(m_feedback);
+				}
+				// create command
+				m_moveCommand = new Command() {
+					@Override
+					public void execute() throws Exception {
+						m_palette.moveEntry(m_entry, targetCategory, null);
+					}
+				};
+			}
+		}
+
+		/**
+		 * Creates "move before" {@link Command}.
+		 */
+		private void move_commandBefore(final ICategory targetCategory, final IEntry targetEntry) {
+			m_moveCommand = new Command() {
+				@Override
+				public void execute() throws Exception {
+					if (m_entry != targetEntry) {
+						m_palette.moveEntry(m_entry, targetCategory, targetEntry);
+					}
+				}
+			};
+		}
+
+		/**
+		 * Creates "move after" {@link Command}.
+		 */
+		private void move_commandAfter(final ICategory targetCategory, final IEntry targetEntry) {
+			m_moveCommand = new Command() {
+				@Override
+				public void execute() throws Exception {
+					if (m_entry != targetEntry) {
+						// prepare "real" target
+						final IEntry targetEntry2 =
+								GenericsUtils.getNextOrNull(targetCategory.getEntries(), targetEntry);
+						// do move
+						if (m_entry != targetEntry2) {
+							m_palette.moveEntry(m_entry, targetCategory, targetEntry2);
+						}
+					}
+				}
+			};
+		}
+
+		/**
+		 * Erases feedback of moving this {@link IEntry}.
+		 */
+		private void move_eraseFeedback() {
+			if (m_feedback != null) {
+				m_feedback.getParent().remove(m_feedback);
+				m_feedback = null;
+			}
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Access
+		//
+		////////////////////////////////////////////////////////////////////////////
+		/**
+		 * @return the preferred size to display this {@link Figure} with icon.
+		 */
+		public Dimension getIconSize() {
+			org.eclipse.swt.graphics.Rectangle imageBounds = getIcon().getBounds();
+			// prepare total size
+			int width = MARGIN_WIDTH_1 + imageBounds.width + MARGIN_WIDTH_2;
+			int height = MARGIN_HEIGHT + imageBounds.height + MARGIN_HEIGHT;
+			return new Dimension(width, height);
+		}
+
+		/**
+		 * @return the preferred size to display this {@link Figure} with icon and text.
+		 */
+		public Dimension getIconTextSize() {
+			org.eclipse.swt.graphics.Rectangle imageBounds = getIcon().getBounds();
+			org.eclipse.swt.graphics.Point textExtent = m_paletteGC.textExtent(m_entry.getText());
+			// prepare total size
+			int width =
+					MARGIN_WIDTH_1 + imageBounds.width + IMAGE_SPACE_RIGHT + textExtent.x + MARGIN_WIDTH_2;
+			int height = MARGIN_HEIGHT + Math.max(imageBounds.height, textExtent.y) + MARGIN_HEIGHT;
+			return new Dimension(width, height);
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Painting
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		protected void paintClientArea(Graphics graphics) {
+			Rectangle r = getClientArea().getCopy().shrink(1, 1);
+			// draw background
+			graphics.pushState();
+			boolean isSelected = m_entry == m_selectedEntry;
+			if (isSelected || m_mouseDown) {
+				if (isSelected) {
+					graphics.setBackgroundColor(COLOR_ENTRY_SELECTED);
+					graphics.fillRectangle(r);
+				}
+				drawRectangle3D(graphics, r, false);
+				// shift right and bottom
+				r.shrinkLeft(1);
+				r.shrinkTop(1);
+			} else if (m_mouseInside) {
+				drawRectangle3D(graphics, r, true);
+			}
+			graphics.popState();
+			// draw icon/text
+			graphics.pushState();
+			if (m_entry.isEnabled()) {
+				paintClientArea_enabled(graphics, r);
+			} else {
+				paintClientArea_disabled(graphics, r);
+			}
+			graphics.popState();
+		}
+
+		private void paintClientArea_enabled(Graphics graphics, Rectangle r) {
+			int x = r.x + MARGIN_WIDTH_1;
+			// draw icon
+			{
+				Image icon = getIcon();
+				drawImageCV(graphics, icon, x, r.y, r.height);
+				x += icon.getBounds().width + IMAGE_SPACE_RIGHT;
+			}
+			// draw text
+			if (!m_preferences.isOnlyIcons()) {
+				graphics.setForegroundColor(COLOR_TEXT_ENABLED);
+				if (m_layoutType == DETAIL_ICONS_TYPE) {
+					drawStringCV(
+							graphics,
+							m_entry.getText() + " -" + m_entry.getToolTipText(),
+							x,
+							r.y,
+							r.width - x,
+							r.height);
+				} else {
+					drawStringCV(graphics, m_entry.getText(), x, r.y, r.width - x, r.height);
+				}
+			}
+		}
+
+		private void paintClientArea_disabled(Graphics graphics, Rectangle r) {
+			int x = r.x + MARGIN_WIDTH_1;
+			// draw icon
+			{
+				Image icon = getIcon();
+				Image disabledIcon = new Image(null, icon, SWT.IMAGE_DISABLE);
+				try {
+					drawImageCV(graphics, disabledIcon, x, r.y, r.height);
+					x += disabledIcon.getBounds().width + IMAGE_SPACE_RIGHT;
+				} finally {
+					disabledIcon.dispose();
+				}
+			}
+			// draw text
+			if (!m_preferences.isOnlyIcons()) {
+				graphics.setForegroundColor(COLOR_TEXT_DISABLED);
+				drawStringCV(graphics, m_entry.getText(), x, r.y, r.width - x, r.height);
+			}
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Utils
+		//
+		////////////////////////////////////////////////////////////////////////////
+		/**
+		 * @return the icon of this entry.
+		 */
+		private Image getIcon() {
+			Image icon = m_entry.getIcon();
+			if (icon != null && !icon.isDisposed()) {
+				return icon;
+			}
+			return NO_ICON;
+		}
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// FeedbackLine
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Moving feedback {@link Figure}.
+	 *
+	 * @author scheglov_ke
+	 */
+	private static final class FeedbackLine extends Figure {
+		private final boolean m_horizontal;
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public FeedbackLine(Figure parent, boolean horizontal, Point location, int size) {
+			m_horizontal = horizontal;
+			parent.add(this);
+			//
+			Rectangle bounds;
+			if (horizontal) {
+				bounds = new Rectangle(location.x, location.y - 3, size, 6);
+				bounds.y = Math.max(bounds.y, 0);
+				bounds.y = Math.min(bounds.y, parent.getClientArea().height - 6);
+			} else {
+				bounds = new Rectangle(location.x - 3, location.y, 6, size);
+				bounds.x = Math.max(bounds.x, 0);
+				bounds.x = Math.min(bounds.x, parent.getClientArea().width - 6);
+			}
+			setBounds(bounds);
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Painting
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		protected void paintClientArea(Graphics graphics) {
+			Rectangle clientArea = getClientArea();
+			if (m_horizontal) {
+				// left
+				{
+					int x = 0;
+					graphics.drawLine(x, 0, x, 5);
+					x++;
+					graphics.drawLine(x, 1, x, 4);
+				}
+				// right
+				{
+					int x = clientArea.right() - 1;
+					graphics.drawLine(x, 0, x, 5);
+					x--;
+					graphics.drawLine(x, 1, x, 4);
+				}
+				// center
+				{
+					graphics.setLineWidth(2);
+					graphics.drawLine(0, 3, clientArea.width, 3);
+				}
+			} else {
+				// top
+				{
+					int y = 0;
+					graphics.drawLine(0, y, 5, y);
+					y++;
+					graphics.drawLine(1, y, 4, y);
+				}
+				// bottom
+				{
+					int y = clientArea.height - 1;
+					graphics.drawLine(0, y, 5, y);
+					y--;
+					graphics.drawLine(1, y, 4, y);
+				}
+				// center
+				{
+					graphics.setLineWidth(2);
+					graphics.drawLine(3, 2, 3, clientArea.height);
+				}
+			}
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return {@link Figure} under given mouse location.
+	 *
+	 * @param source
+	 *          the source {@link Figure}
+	 * @param p
+	 *          the mouse location relative to given <code>source</code>
+	 */
+	private Figure getTargetFigure(Figure source, Point p) {
+		// use absolute coordinates
+		Point absoluteLocation = p.getCopy();
+		FigureUtils.translateFigureToCanvas(source, absoluteLocation);
+		// do search
+		TargetFigureFindVisitor visitor =
+				new TargetFigureFindVisitor(m_figureCanvas, absoluteLocation.x, absoluteLocation.y);
+		m_figureCanvas.getRootFigure().accept(visitor, false);
+		return visitor.getTargetFigure();
+	}
+
+	/**
+	 * Sets wrapped tooltip for given figure.
+	 */
+	private static void setToolTip(Figure figure, String header, String details) {
+		if (header != null && details != null) {
+			figure.setCustomTooltipProvider(new HtmlPaletteTooltipProvider(header, details));
+		} else if (details == null) {
+			figure.setCustomTooltipProvider(new SimplePaletteTooltipProvider(header));
+		} else if (header == null) {
+			figure.setCustomTooltipProvider(new HtmlPaletteTooltipProvider(null, details));
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Drawing utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Draws given text clipped horizontally and centered vertically.
+	 */
+	public static final void drawStringCV(Graphics graphics, String text, Rectangle r) {
+		drawStringCV(graphics, text, r.x, r.y, r.width, r.height);
+	}
+
+	/**
+	 * Draws given text clipped horizontally and centered vertically.
+	 */
+	public static final void drawStringCV(Graphics graphics,
+			String text,
+			int x,
+			int y,
+			int width,
+			int height) {
+		int textY = y + (height - graphics.getFontMetrics().getHeight()) / 2;
+		String clipString = DrawUtils.clipString(graphics.gc, text, width);
+		graphics.drawText(clipString, x, textY);
+	}
+
+	/**
+	 * Draws image at given <code>x</code> and centered vertically.
+	 */
+	public static final void drawImageCV(Graphics graphics, Image image, int x, int y, int height) {
+		if (image != null) {
+			int imageHeight = image.getBounds().height;
+			graphics.drawImage(image, x, y + (height - imageHeight) / 2);
+		}
+	}
+
+	/**
+	 * Draws 3D highlight rectangle.
+	 */
+	private static void drawRectangle3D(Graphics gc, Rectangle r, boolean up) {
+		int x = r.x;
+		int y = r.y;
+		int right = r.right() - 1;
+		int bottom = r.bottom() - 1;
+		//
+		if (up) {
+			gc.setForegroundColor(IColorConstants.buttonLightest);
+		} else {
+			gc.setForegroundColor(IColorConstants.buttonDarker);
+		}
+		gc.drawLine(x, y, right, y);
+		gc.drawLine(x, y, x, bottom);
+		//
+		if (up) {
+			gc.setForegroundColor(IColorConstants.buttonDarker);
+		} else {
+			gc.setForegroundColor(IColorConstants.buttonLightest);
+		}
+		gc.drawLine(right, y, right, bottom);
+		gc.drawLine(x, bottom, right, bottom);
+	}
+
+	public void setLayoutType(int type) {
+		m_layoutType = type;
+	}
+
+	public void refreshComposite() {
+		m_paletteFigure.onPreferencesUpdate();
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/palette/SimplePaletteTooltipProvider.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/palette/SimplePaletteTooltipProvider.java
index dc97972b2..0f1f46d15 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/palette/SimplePaletteTooltipProvider.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/palette/SimplePaletteTooltipProvider.java
@@ -25,30 +25,30 @@
  * @coverage core.control.palette
  */
 public final class SimplePaletteTooltipProvider extends CustomTooltipProvider {
-  private final String m_details;
+	private final String m_details;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SimplePaletteTooltipProvider(String details) {
-    m_details = details;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SimplePaletteTooltipProvider(String details) {
+		m_details = details;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // CustomTooltipProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Figure createTooltipFigure(Figure hostFigure) {
-    // create tooltip figure
-    Label tooltipFigure = new Label(m_details);
-    tooltipFigure.setBorder(new MarginBorder(2));
-    // configure bounds
-    Dimension preferredSize = tooltipFigure.getPreferredSize();
-    tooltipFigure.setBounds(new Rectangle(0, 0, preferredSize.width, preferredSize.height));
-    return tooltipFigure;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// CustomTooltipProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Figure createTooltipFigure(Figure hostFigure) {
+		// create tooltip figure
+		Label tooltipFigure = new Label(m_details);
+		tooltipFigure.setBorder(new MarginBorder(2));
+		// configure bounds
+		Dimension preferredSize = tooltipFigure.getPreferredSize();
+		tooltipFigure.setBounds(new Rectangle(0, 0, preferredSize.width, preferredSize.height));
+		return tooltipFigure;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/test/CSpinnerTest.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/test/CSpinnerTest.java
index e07800815..fdd36d482 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/test/CSpinnerTest.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/test/CSpinnerTest.java
@@ -34,122 +34,122 @@
  * @coverage core.test
  */
 public class CSpinnerTest {
-  protected Shell shell;
+	protected Shell shell;
 
-  public static void main(String[] args) {
-    try {
-      CSpinnerTest window = new CSpinnerTest();
-      window.open();
-    } catch (Exception e) {
-      e.printStackTrace();
-    }
-  }
+	public static void main(String[] args) {
+		try {
+			CSpinnerTest window = new CSpinnerTest();
+			window.open();
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
 
-  public void open() {
-    final Display display = Display.getDefault();
-    createContents();
-    shell.open();
-    shell.layout();
-    while (!shell.isDisposed()) {
-      if (!display.readAndDispatch()) {
-        display.sleep();
-      }
-    }
-  }
+	public void open() {
+		final Display display = Display.getDefault();
+		createContents();
+		shell.open();
+		shell.layout();
+		while (!shell.isDisposed()) {
+			if (!display.readAndDispatch()) {
+				display.sleep();
+			}
+		}
+	}
 
-  protected void createContents() {
-    shell = new Shell();
-    shell.setSize(500, 375);
-    shell.setLocation(700, 400);
-    shell.setText("SWT Application");
-    GridLayoutFactory.create(shell);
-    //
-    {
-      final CSpinner spinner = new CSpinner(shell, SWT.NONE);
-      GridDataFactory.create(spinner).hintHC(10);
-      spinner.setSelection(-50);
-      spinner.setMinimum(-15);
-      spinner.setMaximum(100);
-      // listener
-      {
-        final Label valueLabel = new Label(shell, SWT.NONE);
-        spinner.addListener(SWT.Selection, new Listener() {
-          @Override
-          public void handleEvent(Event event) {
-            updateValueLabel(event, valueLabel);
-          }
-        });
-      }
-      // deferred listener
-      {
-        final Label valueLabel = new Label(shell, SWT.NONE);
-        new CSpinnerDeferredNotifier(spinner, 500, new Listener() {
-          @Override
-          public void handleEvent(Event event) {
-            updateValueLabel(event, valueLabel);
-          }
-        });
-      }
-    }
-    {
-      Group group = new Group(shell, SWT.NONE);
-      GridLayoutFactory.create(group).columns(2);
-      // "standard" Spinner, integer
-      {
-        new Label(group, SWT.NONE).setText("Standard Spinner:");
-        Spinner spinner = new Spinner(group, SWT.BORDER);
-        GridDataFactory.create(spinner).alignVM().hintHC(15);
-      }
-      // "standard" Spinner, setDigits()
-      {
-        new Label(group, SWT.NONE).setText("Standard Spinner, digits 2:");
-        Spinner spinner = new Spinner(group, SWT.BORDER);
-        GridDataFactory.create(spinner).alignVM().hintHC(15);
-        spinner.setDigits(2);
-      }
-      // CSpinner
-      {
-        new Label(group, SWT.NONE).setText("CSpinner [-15,30]:");
-        CSpinner spinner = new CSpinner(group, SWT.BORDER);
-        GridDataFactory.create(spinner).alignVM().hintHC(15);
-        spinner.setSelection(5);
-        spinner.setMinimum(-15);
-        spinner.setMaximum(30);
-      }
-      // CSpinner, digits 2
-      {
-        new Label(group, SWT.NONE).setText("CSpinner [-10.00, +20.00]:");
-        CSpinner spinner = new CSpinner(group, SWT.BORDER);
-        GridDataFactory.create(spinner).alignVM().hintHC(15);
-        spinner.setSelection(5);
-        spinner.setMinimum(-1000);
-        spinner.setMaximum(+2000);
-        spinner.setDigits(2);
-      }
-      // just Text
-      {
-        new Label(group, SWT.NONE).setText("Text:");
-        Text text = new Text(group, SWT.BORDER);
-        GridDataFactory.create(text).alignVM().hintHC(15);
-      }
-      // CSpinner
-      {
-        new Label(group, SWT.NONE).setText("CSpinner [-inf,+inf]:");
-        CSpinner spinner = new CSpinner(group, SWT.BORDER);
-        GridDataFactory.create(spinner).alignVM().hintHC(15);
-      }
-      // Button
-      {
-        new Label(group, SWT.NONE).setText("Button SWT.ARROW:");
-        Button button = new Button(group, SWT.ARROW);
-        GridDataFactory.create(button).alignVM();
-      }
-    }
-  }
+	protected void createContents() {
+		shell = new Shell();
+		shell.setSize(500, 375);
+		shell.setLocation(700, 400);
+		shell.setText("SWT Application");
+		GridLayoutFactory.create(shell);
+		//
+		{
+			final CSpinner spinner = new CSpinner(shell, SWT.NONE);
+			GridDataFactory.create(spinner).hintHC(10);
+			spinner.setSelection(-50);
+			spinner.setMinimum(-15);
+			spinner.setMaximum(100);
+			// listener
+			{
+				final Label valueLabel = new Label(shell, SWT.NONE);
+				spinner.addListener(SWT.Selection, new Listener() {
+					@Override
+					public void handleEvent(Event event) {
+						updateValueLabel(event, valueLabel);
+					}
+				});
+			}
+			// deferred listener
+			{
+				final Label valueLabel = new Label(shell, SWT.NONE);
+				new CSpinnerDeferredNotifier(spinner, 500, new Listener() {
+					@Override
+					public void handleEvent(Event event) {
+						updateValueLabel(event, valueLabel);
+					}
+				});
+			}
+		}
+		{
+			Group group = new Group(shell, SWT.NONE);
+			GridLayoutFactory.create(group).columns(2);
+			// "standard" Spinner, integer
+			{
+				new Label(group, SWT.NONE).setText("Standard Spinner:");
+				Spinner spinner = new Spinner(group, SWT.BORDER);
+				GridDataFactory.create(spinner).alignVM().hintHC(15);
+			}
+			// "standard" Spinner, setDigits()
+			{
+				new Label(group, SWT.NONE).setText("Standard Spinner, digits 2:");
+				Spinner spinner = new Spinner(group, SWT.BORDER);
+				GridDataFactory.create(spinner).alignVM().hintHC(15);
+				spinner.setDigits(2);
+			}
+			// CSpinner
+			{
+				new Label(group, SWT.NONE).setText("CSpinner [-15,30]:");
+				CSpinner spinner = new CSpinner(group, SWT.BORDER);
+				GridDataFactory.create(spinner).alignVM().hintHC(15);
+				spinner.setSelection(5);
+				spinner.setMinimum(-15);
+				spinner.setMaximum(30);
+			}
+			// CSpinner, digits 2
+			{
+				new Label(group, SWT.NONE).setText("CSpinner [-10.00, +20.00]:");
+				CSpinner spinner = new CSpinner(group, SWT.BORDER);
+				GridDataFactory.create(spinner).alignVM().hintHC(15);
+				spinner.setSelection(5);
+				spinner.setMinimum(-1000);
+				spinner.setMaximum(+2000);
+				spinner.setDigits(2);
+			}
+			// just Text
+			{
+				new Label(group, SWT.NONE).setText("Text:");
+				Text text = new Text(group, SWT.BORDER);
+				GridDataFactory.create(text).alignVM().hintHC(15);
+			}
+			// CSpinner
+			{
+				new Label(group, SWT.NONE).setText("CSpinner [-inf,+inf]:");
+				CSpinner spinner = new CSpinner(group, SWT.BORDER);
+				GridDataFactory.create(spinner).alignVM().hintHC(15);
+			}
+			// Button
+			{
+				new Label(group, SWT.NONE).setText("Button SWT.ARROW:");
+				Button button = new Button(group, SWT.ARROW);
+				GridDataFactory.create(button).alignVM();
+			}
+		}
+	}
 
-  private void updateValueLabel(Event event, final Label valueLabel) {
-    valueLabel.setText("value: " + event.detail);
-    valueLabel.setForeground(event.doit ? IColorConstants.black : IColorConstants.red);
-    shell.layout();
-  }
+	private void updateValueLabel(Event event, final Label valueLabel) {
+		valueLabel.setText("value: " + event.detail);
+		valueLabel.setForeground(event.doit ? IColorConstants.black : IColorConstants.red);
+		shell.layout();
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/test/FlyoutTest.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/test/FlyoutTest.java
index d5ec598ce..971a7d80e 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/test/FlyoutTest.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/test/FlyoutTest.java
@@ -30,72 +30,72 @@
  * @coverage core.test
  */
 public class FlyoutTest {
-  private Shell m_shell;
-  private CTabFolder m_tabFolder;
+	private Shell m_shell;
+	private CTabFolder m_tabFolder;
 
-  public static void main(String[] args) {
-    try {
-      FlyoutTest window = new FlyoutTest();
-      window.open();
-    } catch (Exception e) {
-      e.printStackTrace();
-    }
-  }
+	public static void main(String[] args) {
+		try {
+			FlyoutTest window = new FlyoutTest();
+			window.open();
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
 
-  public void open() {
-    final Display display = Display.getDefault();
-    createContents();
-    m_shell.open();
-    m_shell.layout();
-    while (!m_shell.isDisposed()) {
-      if (!display.readAndDispatch()) {
-        display.sleep();
-      }
-    }
-  }
+	public void open() {
+		final Display display = Display.getDefault();
+		createContents();
+		m_shell.open();
+		m_shell.layout();
+		while (!m_shell.isDisposed()) {
+			if (!display.readAndDispatch()) {
+				display.sleep();
+			}
+		}
+	}
 
-  protected void createContents() {
-    m_shell = new Shell();
-    m_shell.setBounds(600, 300, 800, 600);
-    m_shell.setText("SWT Application");
-    m_shell.setLayout(new FillLayout());
-    //
-    m_tabFolder = new CTabFolder(m_shell, SWT.NONE);
-    m_tabFolder.setBackground(IColorConstants.button);
-    m_tabFolder.setSelectionBackground(IColorConstants.button);
-    {
-      FlyoutControlComposite flyoutComposite = createTab("WEST", IFlyoutPreferences.DOCK_WEST);
-      flyoutComposite.setValidDockLocations(IFlyoutPreferences.DOCK_WEST
-          | IFlyoutPreferences.DOCK_EAST);
-    }
-    createTab("EAST", IFlyoutPreferences.DOCK_EAST);
-    {
-      FlyoutControlComposite flyoutComposite = createTab("NORTH", IFlyoutPreferences.DOCK_NORTH);
-      flyoutComposite.setValidDockLocations(IFlyoutPreferences.DOCK_NORTH
-          | IFlyoutPreferences.DOCK_SOUTH);
-    }
-    createTab("SOUTH", IFlyoutPreferences.DOCK_SOUTH);
-  }
+	protected void createContents() {
+		m_shell = new Shell();
+		m_shell.setBounds(600, 300, 800, 600);
+		m_shell.setText("SWT Application");
+		m_shell.setLayout(new FillLayout());
+		//
+		m_tabFolder = new CTabFolder(m_shell, SWT.NONE);
+		m_tabFolder.setBackground(IColorConstants.button);
+		m_tabFolder.setSelectionBackground(IColorConstants.button);
+		{
+			FlyoutControlComposite flyoutComposite = createTab("WEST", IFlyoutPreferences.DOCK_WEST);
+			flyoutComposite.setValidDockLocations(IFlyoutPreferences.DOCK_WEST
+					| IFlyoutPreferences.DOCK_EAST);
+		}
+		createTab("EAST", IFlyoutPreferences.DOCK_EAST);
+		{
+			FlyoutControlComposite flyoutComposite = createTab("NORTH", IFlyoutPreferences.DOCK_NORTH);
+			flyoutComposite.setValidDockLocations(IFlyoutPreferences.DOCK_NORTH
+					| IFlyoutPreferences.DOCK_SOUTH);
+		}
+		createTab("SOUTH", IFlyoutPreferences.DOCK_SOUTH);
+	}
 
-  private FlyoutControlComposite createTab(String title, int dockLocation) {
-    CTabItem tabItem = new CTabItem(m_tabFolder, SWT.NONE);
-    tabItem.setText(title);
-    //
-    IFlyoutPreferences preferences =
-        new MemoryFlyoutPreferences(dockLocation, IFlyoutPreferences.STATE_OPEN, 200);
-    FlyoutControlComposite flyoutControlComposite =
-        new FlyoutControlComposite(m_tabFolder, SWT.NONE, preferences);
-    flyoutControlComposite.setTitleText("Structure");
-    {
-      Text flyout = new Text(flyoutControlComposite.getFlyoutParent(), SWT.BORDER);
-      flyout.setText("Flyout");
-    }
-    {
-      Text client = new Text(flyoutControlComposite.getClientParent(), SWT.BORDER);
-      client.setText("Client");
-    }
-    //
-    tabItem.setControl(flyoutControlComposite);
-    return flyoutControlComposite;
-  }
+	private FlyoutControlComposite createTab(String title, int dockLocation) {
+		CTabItem tabItem = new CTabItem(m_tabFolder, SWT.NONE);
+		tabItem.setText(title);
+		//
+		IFlyoutPreferences preferences =
+				new MemoryFlyoutPreferences(dockLocation, IFlyoutPreferences.STATE_OPEN, 200);
+		FlyoutControlComposite flyoutControlComposite =
+				new FlyoutControlComposite(m_tabFolder, SWT.NONE, preferences);
+		flyoutControlComposite.setTitleText("Structure");
+		{
+			Text flyout = new Text(flyoutControlComposite.getFlyoutParent(), SWT.BORDER);
+			flyout.setText("Flyout");
+		}
+		{
+			Text client = new Text(flyoutControlComposite.getClientParent(), SWT.BORDER);
+			client.setText("Client");
+		}
+		//
+		tabItem.setControl(flyoutControlComposite);
+		return flyoutControlComposite;
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/test/PaletteTest.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/test/PaletteTest.java
index 20899df78..d1a7c86f6 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/test/PaletteTest.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/controls/test/PaletteTest.java
@@ -42,267 +42,267 @@
  * @coverage core.test
  */
 public class PaletteTest implements IColorConstants {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Main
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static void main(String[] args) {
-    try {
-      PaletteTest window = new PaletteTest();
-      window.open();
-    } catch (Exception e) {
-      e.printStackTrace();
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Main
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static void main(String[] args) {
+		try {
+			PaletteTest window = new PaletteTest();
+			window.open();
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
 
-  public void open() {
-    final Display display = Display.getDefault();
-    createContents();
-    shell.open();
-    shell.layout();
-    while (!shell.isDisposed()) {
-      if (!display.readAndDispatch()) {
-        display.sleep();
-      }
-    }
-  }
+	public void open() {
+		final Display display = Display.getDefault();
+		createContents();
+		shell.open();
+		shell.layout();
+		while (!shell.isDisposed()) {
+			if (!display.readAndDispatch()) {
+				display.sleep();
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected Shell shell;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected Shell shell;
 
-  protected void createContents() {
-    shell = new Shell();
-    shell.setBounds(600, 300, 800, 600);
-    shell.setText("SWT Application");
-    shell.setLayout(new FillLayout());
-    // create PaletteComposite
-    PaletteComposite paletteComposite;
-    {
-      IFlyoutPreferences preferences =
-          new MemoryFlyoutPreferences(IFlyoutPreferences.DOCK_WEST,
-              IFlyoutPreferences.STATE_OPEN,
-              200);
-      FlyoutControlComposite flyoutControlComposite =
-          new FlyoutControlComposite(shell, SWT.NONE, preferences);
-      flyoutControlComposite.setTitleText("Palette");
-      // palette
-      {
-        paletteComposite = new PaletteComposite(flyoutControlComposite.getFlyoutParent(), SWT.NONE);
-        GridDataFactory.create(paletteComposite).grabV().hintHC(30).fill();
-      }
-      // filler
-      {
-        new Composite(flyoutControlComposite.getClientParent(), SWT.BORDER);
-      }
-    }
-    // create palette model
-    PaletteImpl palette;
-    {
-      palette = new PaletteImpl();
-      {
-        CategoryImpl category = new CategoryImpl("First category", true);
-        palette.addCategory(category);
-        category.addEntry(new EntryImpl(true, createIcon(red), "AAAAAAAAAAA"));
-        category.addEntry(new EntryImpl(false, createIcon(green), "BBBBB"));
-        category.addEntry(new EntryImpl(true, createIcon(blue), "CCCCCCCCCCCCCCC"));
-        category.addEntry(new EntryImpl(true, createIcon(yellow), "DDDDDDDDD"));
-        category.addEntry(new EntryImpl(false, createIcon(orange), "EEEEEEEEEEE"));
-        category.addEntry(new EntryImpl(true, createIcon(cyan), "FFFFF"));
-      }
-      {
-        CategoryImpl category = new CategoryImpl("Second category", false);
-        palette.addCategory(category);
-        category.addEntry(new EntryImpl(true, createIcon(red), "0123456789"));
-        category.addEntry(new EntryImpl(true, createIcon(green), "012345"));
-        category.addEntry(new EntryImpl(true, createIcon(blue), "0123456789123"));
-      }
-      {
-        CategoryImpl category = new CategoryImpl("Third category", true);
-        palette.addCategory(category);
-        category.addEntry(new EntryImpl(true, createIcon(red), "0123456789"));
-        category.addEntry(new EntryImpl(true, createIcon(green), "012345"));
-        category.addEntry(new EntryImpl(true, createIcon(blue), "0123456789123"));
-      }
-    }
-    // set palette
-    paletteComposite.setPalette(palette);
-  }
+	protected void createContents() {
+		shell = new Shell();
+		shell.setBounds(600, 300, 800, 600);
+		shell.setText("SWT Application");
+		shell.setLayout(new FillLayout());
+		// create PaletteComposite
+		PaletteComposite paletteComposite;
+		{
+			IFlyoutPreferences preferences =
+					new MemoryFlyoutPreferences(IFlyoutPreferences.DOCK_WEST,
+							IFlyoutPreferences.STATE_OPEN,
+							200);
+			FlyoutControlComposite flyoutControlComposite =
+					new FlyoutControlComposite(shell, SWT.NONE, preferences);
+			flyoutControlComposite.setTitleText("Palette");
+			// palette
+			{
+				paletteComposite = new PaletteComposite(flyoutControlComposite.getFlyoutParent(), SWT.NONE);
+				GridDataFactory.create(paletteComposite).grabV().hintHC(30).fill();
+			}
+			// filler
+			{
+				new Composite(flyoutControlComposite.getClientParent(), SWT.BORDER);
+			}
+		}
+		// create palette model
+		PaletteImpl palette;
+		{
+			palette = new PaletteImpl();
+			{
+				CategoryImpl category = new CategoryImpl("First category", true);
+				palette.addCategory(category);
+				category.addEntry(new EntryImpl(true, createIcon(red), "AAAAAAAAAAA"));
+				category.addEntry(new EntryImpl(false, createIcon(green), "BBBBB"));
+				category.addEntry(new EntryImpl(true, createIcon(blue), "CCCCCCCCCCCCCCC"));
+				category.addEntry(new EntryImpl(true, createIcon(yellow), "DDDDDDDDD"));
+				category.addEntry(new EntryImpl(false, createIcon(orange), "EEEEEEEEEEE"));
+				category.addEntry(new EntryImpl(true, createIcon(cyan), "FFFFF"));
+			}
+			{
+				CategoryImpl category = new CategoryImpl("Second category", false);
+				palette.addCategory(category);
+				category.addEntry(new EntryImpl(true, createIcon(red), "0123456789"));
+				category.addEntry(new EntryImpl(true, createIcon(green), "012345"));
+				category.addEntry(new EntryImpl(true, createIcon(blue), "0123456789123"));
+			}
+			{
+				CategoryImpl category = new CategoryImpl("Third category", true);
+				palette.addCategory(category);
+				category.addEntry(new EntryImpl(true, createIcon(red), "0123456789"));
+				category.addEntry(new EntryImpl(true, createIcon(green), "012345"));
+				category.addEntry(new EntryImpl(true, createIcon(blue), "0123456789123"));
+			}
+		}
+		// set palette
+		paletteComposite.setPalette(palette);
+	}
 
-  /**
-   * @return the test icon.
-   */
-  private final Image createIcon(Color color) {
-    int size = 16;
-    Image image = new Image(shell.getDisplay(), size, size);
-    GC gc = new GC(image);
-    gc.setBackground(color);
-    gc.fillRectangle(0, 0, size, size);
-    gc.dispose();
-    return image;
-  }
+	/**
+	 * @return the test icon.
+	 */
+	private final Image createIcon(Color color) {
+		int size = 16;
+		Image image = new Image(shell.getDisplay(), size, size);
+		GC gc = new GC(image);
+		gc.setBackground(color);
+		gc.fillRectangle(0, 0, size, size);
+		gc.dispose();
+		return image;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Palette implementation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final class PaletteImpl implements IPalette {
-    private final List<ICategory> m_categories = Lists.newArrayList();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Palette implementation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final class PaletteImpl implements IPalette {
+		private final List<ICategory> m_categories = Lists.newArrayList();
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Access
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public void addCategory(ICategory category) {
-      m_categories.add(category);
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Access
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public void addCategory(ICategory category) {
+			m_categories.add(category);
+		}
 
-    @Override
-    public List<ICategory> getCategories() {
-      return m_categories;
-    }
+		@Override
+		public List<ICategory> getCategories() {
+			return m_categories;
+		}
 
-    /** {@inheritDoc} */
-    @Override
-    public void addPopupActions(IMenuManager menuManager, Object target, int iconType) {
-    }
+		/** {@inheritDoc} */
+		@Override
+		public void addPopupActions(IMenuManager menuManager, Object target, int iconType) {
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Operations
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public void selectDefault() {
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Operations
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public void selectDefault() {
+		}
 
-    @Override
-    public void moveCategory(ICategory category, ICategory nextCategory) {
-    }
+		@Override
+		public void moveCategory(ICategory category, ICategory nextCategory) {
+		}
 
-    @Override
-    public void moveEntry(IEntry entry, ICategory targetCategory, IEntry nextEntry) {
-    }
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Category implementation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final class CategoryImpl implements ICategory {
-    private final String m_text;
-    private boolean m_open;
-    private final List<IEntry> m_entries = Lists.newArrayList();
+		@Override
+		public void moveEntry(IEntry entry, ICategory targetCategory, IEntry nextEntry) {
+		}
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Category implementation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final class CategoryImpl implements ICategory {
+		private final String m_text;
+		private boolean m_open;
+		private final List<IEntry> m_entries = Lists.newArrayList();
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public CategoryImpl(String text, boolean open) {
-      m_text = text;
-      m_open = open;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public CategoryImpl(String text, boolean open) {
+			m_text = text;
+			m_open = open;
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Access
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public void addEntry(IEntry entry) {
-      m_entries.add(entry);
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Access
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public void addEntry(IEntry entry) {
+			m_entries.add(entry);
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // ICategory
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public String getText() {
-      return m_text;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// ICategory
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public String getText() {
+			return m_text;
+		}
 
-    @Override
-    public String getToolTipText() {
-      return null;
-    }
+		@Override
+		public String getToolTipText() {
+			return null;
+		}
 
-    @Override
-    public boolean isOpen() {
-      return m_open;
-    }
+		@Override
+		public boolean isOpen() {
+			return m_open;
+		}
 
-    @Override
-    public void setOpen(boolean b) {
-      m_open = b;
-    }
+		@Override
+		public void setOpen(boolean b) {
+			m_open = b;
+		}
 
-    @Override
-    public List<IEntry> getEntries() {
-      return m_entries;
-    }
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Entry implementation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final class EntryImpl implements IEntry {
-    private final boolean m_enabled;
-    private final Image m_icon;
-    private final String m_text;
+		@Override
+		public List<IEntry> getEntries() {
+			return m_entries;
+		}
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Entry implementation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final class EntryImpl implements IEntry {
+		private final boolean m_enabled;
+		private final Image m_icon;
+		private final String m_text;
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public EntryImpl(boolean enabled, Image icon, String text) {
-      m_enabled = enabled;
-      m_icon = icon;
-      m_text = text;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public EntryImpl(boolean enabled, Image icon, String text) {
+			m_enabled = enabled;
+			m_icon = icon;
+			m_text = text;
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Access
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public boolean isEnabled() {
-      return m_enabled;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Access
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public boolean isEnabled() {
+			return m_enabled;
+		}
 
-    @Override
-    public Image getIcon() {
-      return m_icon;
-    }
+		@Override
+		public Image getIcon() {
+			return m_icon;
+		}
 
-    @Override
-    public String getText() {
-      return m_text;
-    }
+		@Override
+		public String getText() {
+			return m_text;
+		}
 
-    @Override
-    public String getToolTipText() {
-      return null;
-    }
+		@Override
+		public String getToolTipText() {
+			return null;
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Activation
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public boolean activate(boolean reload) {
-      return true;
-    }
-  }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Activation
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public boolean activate(boolean reload) {
+			return true;
+		}
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/editor/DesignerEditorListener.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/editor/DesignerEditorListener.java
index 823bde99b..4903d1805 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/editor/DesignerEditorListener.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/editor/DesignerEditorListener.java
@@ -17,8 +17,8 @@
  * @coverage core.editor
  */
 public interface DesignerEditorListener {
-  /**
-   * Notifies that reparse was performed in this {@link IDesignerEditor}.
-   */
-  void reparsed();
+	/**
+	 * Notifies that reparse was performed in this {@link IDesignerEditor}.
+	 */
+	void reparsed();
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/editor/DesignerState.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/editor/DesignerState.java
index 18f0c6858..c9675e5db 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/editor/DesignerState.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/editor/DesignerState.java
@@ -17,20 +17,20 @@
  * @coverage core.editor
  */
 public enum DesignerState {
-  /**
-   * State is undefined.
-   */
-  Undefined,
-  /**
-   * Parsing time.
-   */
-  Parsing,
-  /**
-   * Parsing completed successfully.
-   */
-  Successful,
-  /**
-   * Parsing completed with error.
-   */
-  Error
+	/**
+	 * State is undefined.
+	 */
+	Undefined,
+	/**
+	 * Parsing time.
+	 */
+	Parsing,
+	/**
+	 * Parsing completed successfully.
+	 */
+	Successful,
+	/**
+	 * Parsing completed with error.
+	 */
+	Error
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/editor/IContextMenuConstants.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/editor/IContextMenuConstants.java
index c33c4b2df..9c8fc7a59 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/editor/IContextMenuConstants.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/editor/IContextMenuConstants.java
@@ -17,14 +17,14 @@
  * @coverage core.editor
  */
 public interface IContextMenuConstants {
-  String GROUP_BASE = "org.eclipse.wb.popup.group.";
-  String GROUP_TOP = GROUP_BASE + "top";
-  String GROUP_EDIT = GROUP_BASE + "edit";
-  String GROUP_EDIT2 = GROUP_BASE + "edit2";
-  String GROUP_EVENTS = GROUP_BASE + "events";
-  String GROUP_EVENTS2 = GROUP_BASE + "events2";
-  String GROUP_LAYOUT = GROUP_BASE + "layout";
-  String GROUP_CONSTRAINTS = GROUP_BASE + "constraints";
-  String GROUP_INHERITANCE = GROUP_BASE + "inheritance";
-  String GROUP_ADDITIONAL = GROUP_BASE + "additional";
+	String GROUP_BASE = "org.eclipse.wb.popup.group.";
+	String GROUP_TOP = GROUP_BASE + "top";
+	String GROUP_EDIT = GROUP_BASE + "edit";
+	String GROUP_EDIT2 = GROUP_BASE + "edit2";
+	String GROUP_EVENTS = GROUP_BASE + "events";
+	String GROUP_EVENTS2 = GROUP_BASE + "events2";
+	String GROUP_LAYOUT = GROUP_BASE + "layout";
+	String GROUP_CONSTRAINTS = GROUP_BASE + "constraints";
+	String GROUP_INHERITANCE = GROUP_BASE + "inheritance";
+	String GROUP_ADDITIONAL = GROUP_BASE + "additional";
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/editor/IDesignPageSite.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/editor/IDesignPageSite.java
index 16c24c7e9..65f7b9a1c 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/editor/IDesignPageSite.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/editor/IDesignPageSite.java
@@ -23,58 +23,58 @@
  * @coverage core.editor
  */
 public interface IDesignPageSite {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Moves cursor to given position in Java editor.
-   */
-  void showSourcePosition(int position);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Moves cursor to given position in Java editor.
+	 */
+	void showSourcePosition(int position);
 
-  /**
-   * Moves cursor to given position in Java editor and opens Java editor.
-   */
-  void openSourcePosition(int position);
+	/**
+	 * Moves cursor to given position in Java editor and opens Java editor.
+	 */
+	void openSourcePosition(int position);
 
-  /**
-   * Handles any unexpected {@link Exception}.
-   */
-  void handleException(Throwable e);
+	/**
+	 * Handles any unexpected {@link Exception}.
+	 */
+	void handleException(Throwable e);
 
-  /**
-   * Performs reparse for this editor. Note, that this is last method that should be invoked for
-   * this {@link IDesignPageSite} and in this {@link ObjectInfo} hierarchy.
-   */
-  void reparse();
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Helper
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Helper for accessing {@link IDesignPageSite}.
-   *
-   * @author scheglov_ke
-   */
-  public static class Helper {
-    private static final String KEY = "key_DesignPageSite";
+	/**
+	 * Performs reparse for this editor. Note, that this is last method that should be invoked for
+	 * this {@link IDesignPageSite} and in this {@link ObjectInfo} hierarchy.
+	 */
+	void reparse();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Helper
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Helper for accessing {@link IDesignPageSite}.
+	 *
+	 * @author scheglov_ke
+	 */
+	public static class Helper {
+		private static final String KEY = "key_DesignPageSite";
 
-    /**
-     * @return {@link IDesignPageSite} for given {@link ObjectInfo}.
-     */
-    public static IDesignPageSite getSite(ObjectInfo objectInfo) {
-      return (IDesignPageSite) objectInfo.getRoot().getArbitraryValue(KEY);
-    }
+		/**
+		 * @return {@link IDesignPageSite} for given {@link ObjectInfo}.
+		 */
+		public static IDesignPageSite getSite(ObjectInfo objectInfo) {
+			return (IDesignPageSite) objectInfo.getRoot().getArbitraryValue(KEY);
+		}
 
-    /**
-     * @return the {@link IProgressMonitor} to use for displaying progress during parsing (initiated
-     *         by {@link IDesignPage}). If parsing was complete, or we run tests, then
-     *         {@link NullProgressMonitor} will be returned. Never returns <code>null</code>.
-     */
-    public static IProgressMonitor getProgressMonitor() {
-      return DesignPageSite.getProgressMonitor();
-    }
-  }
+		/**
+		 * @return the {@link IProgressMonitor} to use for displaying progress during parsing (initiated
+		 *         by {@link IDesignPage}). If parsing was complete, or we run tests, then
+		 *         {@link NullProgressMonitor} will be returned. Never returns <code>null</code>.
+		 */
+		public static IProgressMonitor getProgressMonitor() {
+			return DesignPageSite.getProgressMonitor();
+		}
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/editor/actions/assistant/AbstractAssistantPage.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/editor/actions/assistant/AbstractAssistantPage.java
index 8adb3c7bb..9773e8c21 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/editor/actions/assistant/AbstractAssistantPage.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/editor/actions/assistant/AbstractAssistantPage.java
@@ -54,978 +54,978 @@
  * @coverage core.editor.action.assistant
  */
 public abstract class AbstractAssistantPage extends Composite implements ILayoutAssistantPage {
-  private static final Object NO_VALUE = new Object();
-  private final List<ObjectInfo> m_selection;
-  private final List<PropertyInfo> m_properties = Lists.newArrayList();
-  private boolean m_saving;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @SuppressWarnings("unchecked")
-  public AbstractAssistantPage(Composite parent, Object selection) {
-    super(parent, SWT.NONE);
-    // prepare selection
-    if (selection instanceof List<?>) {
-      m_selection = (List<ObjectInfo>) selection;
-    } else {
-      m_selection = Collections.singletonList((ObjectInfo) selection);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ILayoutAssistantPage
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final boolean isPageValid() {
-    // validate of all objects
-    for (ObjectInfo object : m_selection) {
-      ObjectInfo parent = object.getParent();
-      if (!parent.getChildren().contains(object)) {
-        return false;
-      }
-    }
-    return true;
-  }
-
-  @Override
-  public final void updatePage() {
-    if (!m_saving) {
-      // update all properties GUI bindings
-      for (PropertyInfo property : m_properties) {
-        property.showValue();
-      }
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Properties support
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Abstract adapter for multiple properties with same title.
-   */
-  protected abstract class PropertyInfo {
-    private final String m_property;
-    private final String m_subProperty;
-    private final String m_innerProperty;
-    private List<Property> m_propertyList;
-    private Object m_currentValue = Property.UNKNOWN_VALUE;
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public PropertyInfo(String property) {
-      // parse property name
-      String[] parts;
-      // sub property name
-      {
-        parts = StringUtils.split(property, '.');
-        m_subProperty = parts.length == 2 ? parts[1] : null;
-      }
-      // inner property name
-      {
-        parts = StringUtils.split(parts[0], ':');
-        m_innerProperty = parts.length == 2 ? parts[1] : null;
-      }
-      // property name
-      m_property = parts[0];
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Presentation
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    /**
-     * Shows current value in GUI.
-     */
-    public abstract void showValue();
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Save
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    /**
-     * Uses {@link #setValue(Object)} to perform implementation specific save.
-     */
-    protected abstract void doSaveValue();
-
-    /**
-     * Subclasses use this method to perform save operation.
-     */
-    protected final void saveValue() {
-      try {
-        m_saving = true;
-        doSaveValue();
-      } finally {
-        m_saving = false;
-      }
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Value
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    /**
-     * @return common value of properties.
-     */
-    protected final Object getValue() {
-      prepareProperties();
-      m_currentValue = ExecutionUtils.runObjectLog(new RunnableObjectEx<Object>() {
-        @Override
-        public Object runObject() throws Exception {
-          Object commonValue = NO_VALUE;
-          for (Property property : m_propertyList) {
-            Object value = property.getValue();
-            if (commonValue == NO_VALUE) {
-              commonValue = value;
-            } else if (!ObjectUtils.equals(commonValue, value)) {
-              return Property.UNKNOWN_VALUE;
-            }
-          }
-          return commonValue;
-        }
-      }, null);
-      return m_currentValue;
-    }
-
-    /**
-     * Sets given value in all properties.
-     */
-    protected final void setValue(final Object value) {
-      prepareProperties();
-      if (m_currentValue != Property.UNKNOWN_VALUE && ObjectUtils.equals(m_currentValue, value)) {
-        return;
-      }
-      m_currentValue = value;
-      ObjectInfo firstObject = getEditObject();
-      ExecutionUtils.run(firstObject, new RunnableEx() {
-        @Override
-        public void run() throws Exception {
-          for (Property property : m_propertyList) {
-            property.setValue(value);
-          }
-        }
-      });
-    }
-
-    /**
-     * Initializes list of properties.
-     */
-    private void prepareProperties() {
-      if (m_propertyList == null) {
-        m_propertyList = Lists.newArrayList();
-        ExecutionUtils.runLog(new RunnableEx() {
-          @Override
-          public void run() throws Exception {
-            // prepare properties
-            for (ObjectInfo object : m_selection) {
-              Property property = object.getPropertyByTitle(m_property);
-              if (property == null) {
-                property = getReflectionProperty(object, m_property);
-              }
-              if (property == null) {
-                property = getCustomProperty(object, m_property);
-              }
-              if (property != null) {
-                m_propertyList.add(property);
-              }
-            }
-            // check inner properties
-            if (m_innerProperty != null) {
-              int size = m_propertyList.size();
-              for (int i = 0; i < size; i++) {
-                Property property = m_propertyList.get(i);
-                IComplexPropertyEditor editor = (IComplexPropertyEditor) property.getEditor();
-                for (Property innerProperty : editor.getProperties(property)) {
-                  if (m_innerProperty.equals(innerProperty.getTitle())) {
-                    m_propertyList.set(i, innerProperty);
-                  }
-                }
-              }
-            }
-            // check sub properties
-            if (m_subProperty != null) {
-              int size = m_propertyList.size();
-              for (int i = 0; i < size; i++) {
-                Property property = m_propertyList.get(i);
-                m_propertyList.set(i, new SubFieldProperty(m_subProperty, property));
-              }
-            }
-          }
-        });
-      }
-    }
-  }
-
-  /**
-   * @return {@link Property} association with given <code>object</code>.<code>propertyName</code>
-   *         or <code>null</code>.
-   */
-  protected Property getCustomProperty(Object object, String propertyName) throws Exception {
-    return null;
-  }
-
-  /**
-   * @return {@link ObjectInfo} that need for work <code>startEdit()/endEdit()/commitEdit()</code>
-   *         during modify properties.
-   */
-  protected ObjectInfo getEditObject() {
-    return m_selection.get(0);
-  }
-
-  private static Property getReflectionProperty(Object object, String propertyName) {
-    propertyName = StringUtils.capitalize(propertyName);
-    Class<?> objectClass = object.getClass();
-    String getName = "get" + propertyName;
-    String setName = "set" + propertyName;
-    Method getMethod = null;
-    Method setMethod = null;
-    // find getter and setter
-    for (Method method : objectClass.getMethods()) {
-      if (getMethod == null
-          && getName.equals(method.getName())
-          && method.getParameterTypes().length == 0) {
-        getMethod = method;
-        if (setMethod != null) {
-          break;
-        }
-      } else if (setMethod == null
-          && setName.equals(method.getName())
-          && method.getParameterTypes().length == 1) {
-        setMethod = method;
-        if (getMethod != null) {
-          break;
-        }
-      }
-    }
-    // create property
-    if (getMethod != null && setMethod != null) {
-      return new ReflectionProperty(getMethod, setMethod, object);
-    }
-    return null;
-  }
-
-  /**
-   * Add property to list.
-   */
-  protected boolean add(PropertyInfo propertyInfo) {
-    return m_properties.add(propertyInfo);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Internal Properties
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected static abstract class InternalProperty extends Property {
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public InternalProperty() {
-      super(null);
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Property
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public String getTitle() {
-      return null;
-    }
-
-    @Override
-    public boolean isModified() throws Exception {
-      return false;
-    }
-  }
-  private static final class ReflectionProperty extends InternalProperty {
-    private final Method m_getMethod;
-    private final Method m_setMethod;
-    private final Object m_thisObject;
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public ReflectionProperty(Method getMethod, Method setMethod, Object thisObject) {
-      m_getMethod = getMethod;
-      m_setMethod = setMethod;
-      m_thisObject = thisObject;
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Property
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public Object getValue() throws Exception {
-      return m_getMethod.invoke(m_thisObject);
-    }
-
-    @Override
-    public void setValue(Object value) throws Exception {
-      m_setMethod.invoke(m_thisObject, value);
-    }
-  }
-  private static final class SubFieldProperty extends InternalProperty {
-    private final String m_field;
-    private final Property m_property;
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public SubFieldProperty(String field, Property property) {
-      m_field = field;
-      m_property = property;
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Property
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public Object getValue() throws Exception {
-      Object mainValue = m_property.getValue();
-      return ReflectionUtils.getFieldObject(mainValue, m_field);
-    }
-
-    @Override
-    public void setValue(Object value) throws Exception {
-      Object mainValue = m_property.getValue();
-      ReflectionUtils.setField(mainValue, m_field, value);
-      m_property.setValue(mainValue);
-    }
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // String
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adapter for <code>String</code> property.
-   */
-  private final class StringPropertyInfo extends PropertyInfo {
-    private final Text m_text;
-    private boolean m_enableListener;
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public StringPropertyInfo(String property, Text text) {
-      super(property);
-      m_text = text;
-      m_enableListener = true;
-      m_text.addModifyListener(new ModifyListener() {
-        @Override
-        public void modifyText(ModifyEvent e) {
-          if (m_enableListener) {
-            saveValue();
-          }
-        }
-      });
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // PropertyInfo
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public void showValue() {
-      try {
-        m_enableListener = false;
-        Object value = getValue();
-        if (value instanceof String) {
-          m_text.setText((String) value);
-        } else {
-          m_text.setText("");
-        }
-      } finally {
-        m_enableListener = true;
-      }
-    }
-
-    @Override
-    protected void doSaveValue() {
-      setValue(m_text.getText());
-    }
-  }
-
-  /**
-   * Creates editor for single <code>String</code> property.
-   */
-  protected final Text addStringProperty(Composite parent, String property, String title) {
-    new Label(parent, SWT.NONE).setText(title);
-    //
-    Text text = new Text(parent, SWT.BORDER);
-    GridDataFactory.create(text).hintHC(10).fillH();
-    //
-    StringPropertyInfo propertyInfo = new StringPropertyInfo(property, text);
-    add(propertyInfo);
-    //
-    return text;
-  }
-
-  protected final Text addStringProperty(Composite parent, String property) {
-    return addStringProperty(parent, property, property);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Boolean
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adapter for <code>boolean</code> property.
-   */
-  private final class BooleanPropertyInfo extends PropertyInfo {
-    private final Button m_button;
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public BooleanPropertyInfo(String property, Button button) {
-      super(property);
-      m_button = button;
-      m_button.addSelectionListener(new SelectionAdapter() {
-        @Override
-        public void widgetSelected(SelectionEvent e) {
-          saveValue();
-        }
-      });
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // PropertyInfo
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public void showValue() {
-      Object value = getValue();
-      if (value instanceof Boolean) {
-        Boolean boolValue = (Boolean) value;
-        m_button.setSelection(boolValue.booleanValue());
-      } else {
-        m_button.setSelection(false);
-      }
-    }
-
-    @Override
-    protected void doSaveValue() {
-      setValue(m_button.getSelection());
-    }
-  }
-
-  /**
-   * Creates editor for single <code>boolean</code> property.
-   */
-  protected final Button addBooleanProperty(Composite parent, String property, String title) {
-    Button button = new Button(parent, SWT.CHECK);
-    button.setText(title);
-    //
-    BooleanPropertyInfo propertyInfo = new BooleanPropertyInfo(property, button);
-    add(propertyInfo);
-    //
-    return button;
-  }
-
-  protected final Button addBooleanProperty(Composite parent, String property) {
-    return addBooleanProperty(parent, property, property);
-  }
-
-  /**
-   * Creates {@link Group} with <code>boolean</code> properties.
-   */
-  protected final Group addBooleanProperties(Composite parent,
-      String title,
-      String[][] propertyAndTitleArray) {
-    Group group = new Group(parent, SWT.NONE);
-    GridLayoutFactory.create(group);
-    group.setText(title);
-    //
-    for (int i = 0; i < propertyAndTitleArray.length; i++) {
-      String[] propertyAndTitle = propertyAndTitleArray[i];
-      Button button = addBooleanProperty(group, propertyAndTitle[0], propertyAndTitle[1]);
-      GridDataFactory.create(button).fillH();
-    }
-    //
-    return group;
-  }
-
-  /**
-   * Creates {@link Group} with <code>boolean</code> properties.
-   */
-  protected final Group addBooleanProperties(Composite parent, String title, String[] propertyArray) {
-    Group group = new Group(parent, SWT.NONE);
-    GridLayoutFactory.create(group);
-    group.setText(title);
-    //
-    for (int i = 0; i < propertyArray.length; i++) {
-      String property = propertyArray[i];
-      Button button = addBooleanProperty(group, property);
-      GridDataFactory.create(button).fillH();
-    }
-    //
-    return group;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Choice
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adapter for choosing single value.
-   */
-  private final class ChoicePropertyInfo extends PropertyInfo {
-    private final List<Button> m_buttons = Lists.newArrayList();
-    private final Listener m_listener = new Listener() {
-      @Override
-      public void handleEvent(Event event) {
-        saveValue();
-      }
-    };
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public ChoicePropertyInfo(String property) {
-      super(property);
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Access
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public void addButton(Button button, Object value) {
-      button.setData(value);
-      button.addListener(SWT.Selection, m_listener);
-      m_buttons.add(button);
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // PropertyInfo
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public void showValue() {
-      Object value = getValue();
-      for (Button button : m_buttons) {
-        Object buttonValue = button.getData();
-        button.setSelection(ObjectUtils.equals(value, buttonValue));
-      }
-    }
-
-    @Override
-    protected void doSaveValue() {
-      for (Button button : m_buttons) {
-        if (button.getSelection()) {
-          Object buttonValue = button.getData();
-          setValue(buttonValue);
-        }
-      }
-    }
-  }
-
-  /**
-   * Creates {@link Group} for choosing one of the given values for property.
-   */
-  protected final Group addChoiceProperty(Composite parent,
-      String property,
-      String title,
-      Object[][] titleAndValueArray) {
-    Group group = new Group(parent, SWT.NONE);
-    group.setText(title);
-    GridLayoutFactory.create(group);
-    //
-    ChoicePropertyInfo propertyInfo = new ChoicePropertyInfo(property);
-    add(propertyInfo);
-    //
-    for (int i = 0; i < titleAndValueArray.length; i++) {
-      Button trueButton = new Button(group, SWT.RADIO);
-      GridDataFactory.create(trueButton).fillH();
-      //
-      Object[] titleAndValue = titleAndValueArray[i];
-      String buttonTitle = (String) titleAndValue[0];
-      Object value = titleAndValue[1];
-      //
-      trueButton.setText(buttonTitle);
-      propertyInfo.addButton(trueButton, value);
-    }
-    //
-    return group;
-  }
-
-  /**
-   * Creates {@link Group} for choosing one of the enum values for property.
-   */
-  protected final Group addEnumProperty(Composite parent,
-      String property,
-      String title,
-      String enumClassName) {
-    Object[][] titleAndValueArray;
-    ClassLoader classLoader = GlobalState.getClassLoader();
-    try {
-      Class<?> enumClass = classLoader.loadClass(enumClassName);
-      if (enumClass.isEnum()) {
-        Enum<?>[] constants = (Enum<?>[]) enumClass.getEnumConstants();
-        titleAndValueArray = new Object[constants.length][2];
-        for (int i = 0; i < constants.length; i++) {
-          Enum<?> constantValue = constants[i];
-          titleAndValueArray[i][0] = constantValue.name();
-          titleAndValueArray[i][1] = constantValue;
-        }
-      } else {
-        titleAndValueArray = new Object[][]{{}};
-      }
-      return addChoiceProperty(parent, property, title, titleAndValueArray);
-    } catch (ClassNotFoundException e) {
-      DesignerPlugin.log(e);
-      return new Group(parent, SWT.NONE);
-    }
-  }
-
-  /**
-   * Creates {@link Group} for choosing one of the class static fields values for property.
-   */
-  protected final Group addStaticFieldsProperty(Composite parent,
-      String property,
-      String title,
-      String className,
-      String fieldNames[]) {
-    Object[][] titleAndValueArray = new Object[fieldNames.length][2];
-    ClassLoader classLoader = GlobalState.getClassLoader();
-    try {
-      Class<?> clazz = classLoader.loadClass(className);
-      for (int i = 0; i < fieldNames.length; i++) {
-        titleAndValueArray[i][0] = fieldNames[i];
-        titleAndValueArray[i][1] = ReflectionUtils.getFieldObject(clazz, fieldNames[i]);
-      }
-      return addChoiceProperty(parent, property, title, titleAndValueArray);
-    } catch (ClassNotFoundException e) {
-      DesignerPlugin.log(e);
-      return new Group(parent, SWT.NONE);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Integer
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adapter for <code>int</code> property.
-   */
-  private final class IntegerPropertyInfo extends PropertyInfo {
-    private final CSpinner m_spinner;
-    private final Listener m_listener = new Listener() {
-      @Override
-      public void handleEvent(Event event) {
-        if (event.doit) {
-          saveValue();
-        }
-      }
-    };
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public IntegerPropertyInfo(String property, CSpinner spinner) {
-      super(property);
-      m_spinner = spinner;
-      new CSpinnerDeferredNotifier(m_spinner, 500, m_listener);
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // PropertyInfo
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public void showValue() {
-      Object value = getValue();
-      if (value instanceof Integer) {
-        Integer intValue = (Integer) value;
-        m_spinner.setSelection(intValue.intValue());
-      } else {
-        m_spinner.setSelection(m_spinner.getMinimum());
-      }
-    }
-
-    @Override
-    protected void doSaveValue() {
-      setValue(m_spinner.getSelection());
-    }
-  }
-
-  /**
-   * Create editor for single <code>int</code> property with given min/max values.
-   */
-  protected final void addIntegerProperty(Composite parent,
-      String property,
-      String title,
-      int minValue,
-      int maxValue) {
-    new Label(parent, SWT.NONE).setText(title);
-    //
-    CSpinner spinner = new CSpinner(parent, SWT.BORDER);
-    GridDataFactory.create(spinner).hintHC(10);
-    spinner.setMinimum(minValue);
-    spinner.setMaximum(maxValue);
-    //
-    IntegerPropertyInfo propertyInfo = new IntegerPropertyInfo(property, spinner);
-    add(propertyInfo);
-  }
-
-  /**
-   * Create editor for single <code>int</code> property with valid interval
-   * <code>[minValue, Integer.MAX_VALUE]</code>.
-   */
-  protected final void addIntegerProperty(Composite parent,
-      String property,
-      String title,
-      int minValue) {
-    addIntegerProperty(parent, property, title, minValue, Integer.MAX_VALUE);
-  }
-
-  /**
-   * Create editor for single <code>int</code> property with valid interval
-   * <code>[0, Integer.MAX_VALUE]</code>.
-   */
-  protected final void addIntegerProperty(Composite parent, String property, String title) {
-    addIntegerProperty(parent, property, title, 0);
-  }
-
-  protected final void addIntegerProperty(Composite parent, String property) {
-    addIntegerProperty(parent, property, property);
-  }
-
-  /**
-   * Creates <code>int</code> properties.
-   */
-  protected final void addIntegerProperties(Composite parent, String[][] propertyAndTitleArray) {
-    for (int i = 0; i < propertyAndTitleArray.length; i++) {
-      String[] propertyAndTitle = propertyAndTitleArray[i];
-      addIntegerProperty(parent, propertyAndTitle[0], propertyAndTitle[1]);
-    }
-  }
-
-  /**
-   * Creates {@link Group} for multiple <code>int</code> properties.
-   */
-  protected final Group addIntegerProperties(Composite parent,
-      String title,
-      String[][] propertyAndTitleArray) {
-    Group group = new Group(parent, SWT.NONE);
-    group.setText(title);
-    GridLayoutFactory.create(group).columns(2);
-    //
-    for (int i = 0; i < propertyAndTitleArray.length; i++) {
-      String[] propertyAndTitle = propertyAndTitleArray[i];
-      addIntegerProperty(group, propertyAndTitle[0], propertyAndTitle[1]);
-    }
-    return group;
-  }
-
-  /**
-   * Creates {@link Group} for multiple <code>int</code> properties.
-   */
-  protected final Group addIntegerProperties(Composite parent,
-      String title,
-      String[][] propertyAndTitleArray,
-      int[] minumunValues) {
-    Group group = new Group(parent, SWT.NONE);
-    group.setText(title);
-    GridLayoutFactory.create(group).columns(2);
-    //
-    for (int i = 0; i < propertyAndTitleArray.length; i++) {
-      String[] propertyAndTitle = propertyAndTitleArray[i];
-      addIntegerProperty(group, propertyAndTitle[0], propertyAndTitle[1], minumunValues[i]);
-    }
-    return group;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Double
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adapter for <code>double</code> property.
-   */
-  private final class DoublePropertyInfo extends PropertyInfo {
-    private final CSpinner m_spinner;
-    private final double m_multiplier;
-    private final Listener m_listener = new Listener() {
-      @Override
-      public void handleEvent(Event event) {
-        if (event.doit) {
-          saveValue();
-        }
-      }
-    };
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public DoublePropertyInfo(String property, CSpinner spinner, double multiplier) {
-      super(property);
-      m_spinner = spinner;
-      m_multiplier = multiplier;
-      new CSpinnerDeferredNotifier(m_spinner, 500, m_listener);
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // PropertyInfo
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public void showValue() {
-      Object value = getValue();
-      if (value instanceof Number) {
-        Number numberValue = (Number) value;
-        m_spinner.setSelection((int) (numberValue.doubleValue() * m_multiplier));
-      } else {
-        m_spinner.setSelection(m_spinner.getMinimum());
-      }
-    }
-
-    @Override
-    protected void doSaveValue() {
-      setValue(m_spinner.getSelection() / m_multiplier);
-    }
-  }
-
-  /**
-   * Create editor for single <code>double</code> property with given min/max values.
-   */
-  protected final void addDoubleProperty(Composite parent,
-      String property,
-      String title,
-      double minValue,
-      double maxValue,
-      int digits) {
-    int multiplier = (int) Math.pow(10, digits);
-    new Label(parent, SWT.NONE).setText(title);
-    //
-    CSpinner spinner = new CSpinner(parent, SWT.BORDER);
-    GridDataFactory.create(spinner).hintHC(10);
-    spinner.setMinimum((int) (minValue * multiplier));
-    spinner.setMaximum((int) (maxValue * multiplier));
-    spinner.setDigits(digits);
-    //
-    DoublePropertyInfo propertyInfo = new DoublePropertyInfo(property, spinner, multiplier);
-    add(propertyInfo);
-  }
-
-  /**
-   * Create editor for single <code>double</code> property with valid interval
-   * <code>[minValue, Double.MAX_VALUE]</code>.
-   */
-  protected final void addDoubleProperty(Composite parent,
-      String property,
-      String title,
-      double minValue) {
-    addDoubleProperty(parent, property, title, minValue, Double.MAX_VALUE, 1);
-  }
-
-  /**
-   * Create editor for single <code>double</code> property with valid interval
-   * <code>[0, Double.MAX_VALUE]</code>.
-   */
-  protected final void addDoubleProperty(Composite parent, String property, String title) {
-    addDoubleProperty(parent, property, title, 0);
-  }
-
-  protected final void addDoubleProperty(Composite parent, String property) {
-    addDoubleProperty(parent, property, property, 0);
-  }
-
-  /**
-   * Creates <code>double</code> properties.
-   */
-  protected final void addDoubleProperties(Composite parent, String[][] propertyAndTitleArray) {
-    for (int i = 0; i < propertyAndTitleArray.length; i++) {
-      String[] propertyAndTitle = propertyAndTitleArray[i];
-      addDoubleProperty(parent, propertyAndTitle[0], propertyAndTitle[1]);
-    }
-  }
-
-  /**
-   * Creates {@link Group} for multiple <code>double</code> properties.
-   */
-  protected final Group addDoubleProperties(Composite parent,
-      String title,
-      String[][] propertyAndTitleArray) {
-    Group group = new Group(parent, SWT.NONE);
-    group.setText(title);
-    GridLayoutFactory.create(group).columns(2);
-    //
-    for (int i = 0; i < propertyAndTitleArray.length; i++) {
-      String[] propertyAndTitle = propertyAndTitleArray[i];
-      addDoubleProperty(group, propertyAndTitle[0], propertyAndTitle[1]);
-    }
-    return group;
-  }
-
-  /**
-   * Creates {@link Group} for multiple <code>double</code> properties.
-   */
-  protected final Group addDoubleProperties(Composite parent,
-      String title,
-      String[][] propertyAndTitleArray,
-      double[] minumunValues) {
-    Group group = new Group(parent, SWT.NONE);
-    group.setText(title);
-    GridLayoutFactory.create(group).columns(2);
-    //
-    for (int i = 0; i < propertyAndTitleArray.length; i++) {
-      String[] propertyAndTitle = propertyAndTitleArray[i];
-      addDoubleProperty(group, propertyAndTitle[0], propertyAndTitle[1], minumunValues[i]);
-    }
-    return group;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Filler
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected final Label addFiller(Composite parent) {
-    return new Label(parent, SWT.NONE);
-  }
+	private static final Object NO_VALUE = new Object();
+	private final List<ObjectInfo> m_selection;
+	private final List<PropertyInfo> m_properties = Lists.newArrayList();
+	private boolean m_saving;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@SuppressWarnings("unchecked")
+	public AbstractAssistantPage(Composite parent, Object selection) {
+		super(parent, SWT.NONE);
+		// prepare selection
+		if (selection instanceof List<?>) {
+			m_selection = (List<ObjectInfo>) selection;
+		} else {
+			m_selection = Collections.singletonList((ObjectInfo) selection);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ILayoutAssistantPage
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final boolean isPageValid() {
+		// validate of all objects
+		for (ObjectInfo object : m_selection) {
+			ObjectInfo parent = object.getParent();
+			if (!parent.getChildren().contains(object)) {
+				return false;
+			}
+		}
+		return true;
+	}
+
+	@Override
+	public final void updatePage() {
+		if (!m_saving) {
+			// update all properties GUI bindings
+			for (PropertyInfo property : m_properties) {
+				property.showValue();
+			}
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Properties support
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Abstract adapter for multiple properties with same title.
+	 */
+	protected abstract class PropertyInfo {
+		private final String m_property;
+		private final String m_subProperty;
+		private final String m_innerProperty;
+		private List<Property> m_propertyList;
+		private Object m_currentValue = Property.UNKNOWN_VALUE;
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public PropertyInfo(String property) {
+			// parse property name
+			String[] parts;
+			// sub property name
+			{
+				parts = StringUtils.split(property, '.');
+				m_subProperty = parts.length == 2 ? parts[1] : null;
+			}
+			// inner property name
+			{
+				parts = StringUtils.split(parts[0], ':');
+				m_innerProperty = parts.length == 2 ? parts[1] : null;
+			}
+			// property name
+			m_property = parts[0];
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Presentation
+		//
+		////////////////////////////////////////////////////////////////////////////
+		/**
+		 * Shows current value in GUI.
+		 */
+		public abstract void showValue();
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Save
+		//
+		////////////////////////////////////////////////////////////////////////////
+		/**
+		 * Uses {@link #setValue(Object)} to perform implementation specific save.
+		 */
+		protected abstract void doSaveValue();
+
+		/**
+		 * Subclasses use this method to perform save operation.
+		 */
+		protected final void saveValue() {
+			try {
+				m_saving = true;
+				doSaveValue();
+			} finally {
+				m_saving = false;
+			}
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Value
+		//
+		////////////////////////////////////////////////////////////////////////////
+		/**
+		 * @return common value of properties.
+		 */
+		protected final Object getValue() {
+			prepareProperties();
+			m_currentValue = ExecutionUtils.runObjectLog(new RunnableObjectEx<Object>() {
+				@Override
+				public Object runObject() throws Exception {
+					Object commonValue = NO_VALUE;
+					for (Property property : m_propertyList) {
+						Object value = property.getValue();
+						if (commonValue == NO_VALUE) {
+							commonValue = value;
+						} else if (!ObjectUtils.equals(commonValue, value)) {
+							return Property.UNKNOWN_VALUE;
+						}
+					}
+					return commonValue;
+				}
+			}, null);
+			return m_currentValue;
+		}
+
+		/**
+		 * Sets given value in all properties.
+		 */
+		protected final void setValue(final Object value) {
+			prepareProperties();
+			if (m_currentValue != Property.UNKNOWN_VALUE && ObjectUtils.equals(m_currentValue, value)) {
+				return;
+			}
+			m_currentValue = value;
+			ObjectInfo firstObject = getEditObject();
+			ExecutionUtils.run(firstObject, new RunnableEx() {
+				@Override
+				public void run() throws Exception {
+					for (Property property : m_propertyList) {
+						property.setValue(value);
+					}
+				}
+			});
+		}
+
+		/**
+		 * Initializes list of properties.
+		 */
+		private void prepareProperties() {
+			if (m_propertyList == null) {
+				m_propertyList = Lists.newArrayList();
+				ExecutionUtils.runLog(new RunnableEx() {
+					@Override
+					public void run() throws Exception {
+						// prepare properties
+						for (ObjectInfo object : m_selection) {
+							Property property = object.getPropertyByTitle(m_property);
+							if (property == null) {
+								property = getReflectionProperty(object, m_property);
+							}
+							if (property == null) {
+								property = getCustomProperty(object, m_property);
+							}
+							if (property != null) {
+								m_propertyList.add(property);
+							}
+						}
+						// check inner properties
+						if (m_innerProperty != null) {
+							int size = m_propertyList.size();
+							for (int i = 0; i < size; i++) {
+								Property property = m_propertyList.get(i);
+								IComplexPropertyEditor editor = (IComplexPropertyEditor) property.getEditor();
+								for (Property innerProperty : editor.getProperties(property)) {
+									if (m_innerProperty.equals(innerProperty.getTitle())) {
+										m_propertyList.set(i, innerProperty);
+									}
+								}
+							}
+						}
+						// check sub properties
+						if (m_subProperty != null) {
+							int size = m_propertyList.size();
+							for (int i = 0; i < size; i++) {
+								Property property = m_propertyList.get(i);
+								m_propertyList.set(i, new SubFieldProperty(m_subProperty, property));
+							}
+						}
+					}
+				});
+			}
+		}
+	}
+
+	/**
+	 * @return {@link Property} association with given <code>object</code>.<code>propertyName</code>
+	 *         or <code>null</code>.
+	 */
+	protected Property getCustomProperty(Object object, String propertyName) throws Exception {
+		return null;
+	}
+
+	/**
+	 * @return {@link ObjectInfo} that need for work <code>startEdit()/endEdit()/commitEdit()</code>
+	 *         during modify properties.
+	 */
+	protected ObjectInfo getEditObject() {
+		return m_selection.get(0);
+	}
+
+	private static Property getReflectionProperty(Object object, String propertyName) {
+		propertyName = StringUtils.capitalize(propertyName);
+		Class<?> objectClass = object.getClass();
+		String getName = "get" + propertyName;
+		String setName = "set" + propertyName;
+		Method getMethod = null;
+		Method setMethod = null;
+		// find getter and setter
+		for (Method method : objectClass.getMethods()) {
+			if (getMethod == null
+					&& getName.equals(method.getName())
+					&& method.getParameterTypes().length == 0) {
+				getMethod = method;
+				if (setMethod != null) {
+					break;
+				}
+			} else if (setMethod == null
+					&& setName.equals(method.getName())
+					&& method.getParameterTypes().length == 1) {
+				setMethod = method;
+				if (getMethod != null) {
+					break;
+				}
+			}
+		}
+		// create property
+		if (getMethod != null && setMethod != null) {
+			return new ReflectionProperty(getMethod, setMethod, object);
+		}
+		return null;
+	}
+
+	/**
+	 * Add property to list.
+	 */
+	protected boolean add(PropertyInfo propertyInfo) {
+		return m_properties.add(propertyInfo);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Internal Properties
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected static abstract class InternalProperty extends Property {
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public InternalProperty() {
+			super(null);
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Property
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public String getTitle() {
+			return null;
+		}
+
+		@Override
+		public boolean isModified() throws Exception {
+			return false;
+		}
+	}
+	private static final class ReflectionProperty extends InternalProperty {
+		private final Method m_getMethod;
+		private final Method m_setMethod;
+		private final Object m_thisObject;
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public ReflectionProperty(Method getMethod, Method setMethod, Object thisObject) {
+			m_getMethod = getMethod;
+			m_setMethod = setMethod;
+			m_thisObject = thisObject;
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Property
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public Object getValue() throws Exception {
+			return m_getMethod.invoke(m_thisObject);
+		}
+
+		@Override
+		public void setValue(Object value) throws Exception {
+			m_setMethod.invoke(m_thisObject, value);
+		}
+	}
+	private static final class SubFieldProperty extends InternalProperty {
+		private final String m_field;
+		private final Property m_property;
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public SubFieldProperty(String field, Property property) {
+			m_field = field;
+			m_property = property;
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Property
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public Object getValue() throws Exception {
+			Object mainValue = m_property.getValue();
+			return ReflectionUtils.getFieldObject(mainValue, m_field);
+		}
+
+		@Override
+		public void setValue(Object value) throws Exception {
+			Object mainValue = m_property.getValue();
+			ReflectionUtils.setField(mainValue, m_field, value);
+			m_property.setValue(mainValue);
+		}
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// String
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adapter for <code>String</code> property.
+	 */
+	private final class StringPropertyInfo extends PropertyInfo {
+		private final Text m_text;
+		private boolean m_enableListener;
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public StringPropertyInfo(String property, Text text) {
+			super(property);
+			m_text = text;
+			m_enableListener = true;
+			m_text.addModifyListener(new ModifyListener() {
+				@Override
+				public void modifyText(ModifyEvent e) {
+					if (m_enableListener) {
+						saveValue();
+					}
+				}
+			});
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// PropertyInfo
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public void showValue() {
+			try {
+				m_enableListener = false;
+				Object value = getValue();
+				if (value instanceof String) {
+					m_text.setText((String) value);
+				} else {
+					m_text.setText("");
+				}
+			} finally {
+				m_enableListener = true;
+			}
+		}
+
+		@Override
+		protected void doSaveValue() {
+			setValue(m_text.getText());
+		}
+	}
+
+	/**
+	 * Creates editor for single <code>String</code> property.
+	 */
+	protected final Text addStringProperty(Composite parent, String property, String title) {
+		new Label(parent, SWT.NONE).setText(title);
+		//
+		Text text = new Text(parent, SWT.BORDER);
+		GridDataFactory.create(text).hintHC(10).fillH();
+		//
+		StringPropertyInfo propertyInfo = new StringPropertyInfo(property, text);
+		add(propertyInfo);
+		//
+		return text;
+	}
+
+	protected final Text addStringProperty(Composite parent, String property) {
+		return addStringProperty(parent, property, property);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Boolean
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adapter for <code>boolean</code> property.
+	 */
+	private final class BooleanPropertyInfo extends PropertyInfo {
+		private final Button m_button;
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public BooleanPropertyInfo(String property, Button button) {
+			super(property);
+			m_button = button;
+			m_button.addSelectionListener(new SelectionAdapter() {
+				@Override
+				public void widgetSelected(SelectionEvent e) {
+					saveValue();
+				}
+			});
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// PropertyInfo
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public void showValue() {
+			Object value = getValue();
+			if (value instanceof Boolean) {
+				Boolean boolValue = (Boolean) value;
+				m_button.setSelection(boolValue.booleanValue());
+			} else {
+				m_button.setSelection(false);
+			}
+		}
+
+		@Override
+		protected void doSaveValue() {
+			setValue(m_button.getSelection());
+		}
+	}
+
+	/**
+	 * Creates editor for single <code>boolean</code> property.
+	 */
+	protected final Button addBooleanProperty(Composite parent, String property, String title) {
+		Button button = new Button(parent, SWT.CHECK);
+		button.setText(title);
+		//
+		BooleanPropertyInfo propertyInfo = new BooleanPropertyInfo(property, button);
+		add(propertyInfo);
+		//
+		return button;
+	}
+
+	protected final Button addBooleanProperty(Composite parent, String property) {
+		return addBooleanProperty(parent, property, property);
+	}
+
+	/**
+	 * Creates {@link Group} with <code>boolean</code> properties.
+	 */
+	protected final Group addBooleanProperties(Composite parent,
+			String title,
+			String[][] propertyAndTitleArray) {
+		Group group = new Group(parent, SWT.NONE);
+		GridLayoutFactory.create(group);
+		group.setText(title);
+		//
+		for (int i = 0; i < propertyAndTitleArray.length; i++) {
+			String[] propertyAndTitle = propertyAndTitleArray[i];
+			Button button = addBooleanProperty(group, propertyAndTitle[0], propertyAndTitle[1]);
+			GridDataFactory.create(button).fillH();
+		}
+		//
+		return group;
+	}
+
+	/**
+	 * Creates {@link Group} with <code>boolean</code> properties.
+	 */
+	protected final Group addBooleanProperties(Composite parent, String title, String[] propertyArray) {
+		Group group = new Group(parent, SWT.NONE);
+		GridLayoutFactory.create(group);
+		group.setText(title);
+		//
+		for (int i = 0; i < propertyArray.length; i++) {
+			String property = propertyArray[i];
+			Button button = addBooleanProperty(group, property);
+			GridDataFactory.create(button).fillH();
+		}
+		//
+		return group;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Choice
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adapter for choosing single value.
+	 */
+	private final class ChoicePropertyInfo extends PropertyInfo {
+		private final List<Button> m_buttons = Lists.newArrayList();
+		private final Listener m_listener = new Listener() {
+			@Override
+			public void handleEvent(Event event) {
+				saveValue();
+			}
+		};
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public ChoicePropertyInfo(String property) {
+			super(property);
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Access
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public void addButton(Button button, Object value) {
+			button.setData(value);
+			button.addListener(SWT.Selection, m_listener);
+			m_buttons.add(button);
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// PropertyInfo
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public void showValue() {
+			Object value = getValue();
+			for (Button button : m_buttons) {
+				Object buttonValue = button.getData();
+				button.setSelection(ObjectUtils.equals(value, buttonValue));
+			}
+		}
+
+		@Override
+		protected void doSaveValue() {
+			for (Button button : m_buttons) {
+				if (button.getSelection()) {
+					Object buttonValue = button.getData();
+					setValue(buttonValue);
+				}
+			}
+		}
+	}
+
+	/**
+	 * Creates {@link Group} for choosing one of the given values for property.
+	 */
+	protected final Group addChoiceProperty(Composite parent,
+			String property,
+			String title,
+			Object[][] titleAndValueArray) {
+		Group group = new Group(parent, SWT.NONE);
+		group.setText(title);
+		GridLayoutFactory.create(group);
+		//
+		ChoicePropertyInfo propertyInfo = new ChoicePropertyInfo(property);
+		add(propertyInfo);
+		//
+		for (int i = 0; i < titleAndValueArray.length; i++) {
+			Button trueButton = new Button(group, SWT.RADIO);
+			GridDataFactory.create(trueButton).fillH();
+			//
+			Object[] titleAndValue = titleAndValueArray[i];
+			String buttonTitle = (String) titleAndValue[0];
+			Object value = titleAndValue[1];
+			//
+			trueButton.setText(buttonTitle);
+			propertyInfo.addButton(trueButton, value);
+		}
+		//
+		return group;
+	}
+
+	/**
+	 * Creates {@link Group} for choosing one of the enum values for property.
+	 */
+	protected final Group addEnumProperty(Composite parent,
+			String property,
+			String title,
+			String enumClassName) {
+		Object[][] titleAndValueArray;
+		ClassLoader classLoader = GlobalState.getClassLoader();
+		try {
+			Class<?> enumClass = classLoader.loadClass(enumClassName);
+			if (enumClass.isEnum()) {
+				Enum<?>[] constants = (Enum<?>[]) enumClass.getEnumConstants();
+				titleAndValueArray = new Object[constants.length][2];
+				for (int i = 0; i < constants.length; i++) {
+					Enum<?> constantValue = constants[i];
+					titleAndValueArray[i][0] = constantValue.name();
+					titleAndValueArray[i][1] = constantValue;
+				}
+			} else {
+				titleAndValueArray = new Object[][]{{}};
+			}
+			return addChoiceProperty(parent, property, title, titleAndValueArray);
+		} catch (ClassNotFoundException e) {
+			DesignerPlugin.log(e);
+			return new Group(parent, SWT.NONE);
+		}
+	}
+
+	/**
+	 * Creates {@link Group} for choosing one of the class static fields values for property.
+	 */
+	protected final Group addStaticFieldsProperty(Composite parent,
+			String property,
+			String title,
+			String className,
+			String fieldNames[]) {
+		Object[][] titleAndValueArray = new Object[fieldNames.length][2];
+		ClassLoader classLoader = GlobalState.getClassLoader();
+		try {
+			Class<?> clazz = classLoader.loadClass(className);
+			for (int i = 0; i < fieldNames.length; i++) {
+				titleAndValueArray[i][0] = fieldNames[i];
+				titleAndValueArray[i][1] = ReflectionUtils.getFieldObject(clazz, fieldNames[i]);
+			}
+			return addChoiceProperty(parent, property, title, titleAndValueArray);
+		} catch (ClassNotFoundException e) {
+			DesignerPlugin.log(e);
+			return new Group(parent, SWT.NONE);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Integer
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adapter for <code>int</code> property.
+	 */
+	private final class IntegerPropertyInfo extends PropertyInfo {
+		private final CSpinner m_spinner;
+		private final Listener m_listener = new Listener() {
+			@Override
+			public void handleEvent(Event event) {
+				if (event.doit) {
+					saveValue();
+				}
+			}
+		};
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public IntegerPropertyInfo(String property, CSpinner spinner) {
+			super(property);
+			m_spinner = spinner;
+			new CSpinnerDeferredNotifier(m_spinner, 500, m_listener);
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// PropertyInfo
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public void showValue() {
+			Object value = getValue();
+			if (value instanceof Integer) {
+				Integer intValue = (Integer) value;
+				m_spinner.setSelection(intValue.intValue());
+			} else {
+				m_spinner.setSelection(m_spinner.getMinimum());
+			}
+		}
+
+		@Override
+		protected void doSaveValue() {
+			setValue(m_spinner.getSelection());
+		}
+	}
+
+	/**
+	 * Create editor for single <code>int</code> property with given min/max values.
+	 */
+	protected final void addIntegerProperty(Composite parent,
+			String property,
+			String title,
+			int minValue,
+			int maxValue) {
+		new Label(parent, SWT.NONE).setText(title);
+		//
+		CSpinner spinner = new CSpinner(parent, SWT.BORDER);
+		GridDataFactory.create(spinner).hintHC(10);
+		spinner.setMinimum(minValue);
+		spinner.setMaximum(maxValue);
+		//
+		IntegerPropertyInfo propertyInfo = new IntegerPropertyInfo(property, spinner);
+		add(propertyInfo);
+	}
+
+	/**
+	 * Create editor for single <code>int</code> property with valid interval
+	 * <code>[minValue, Integer.MAX_VALUE]</code>.
+	 */
+	protected final void addIntegerProperty(Composite parent,
+			String property,
+			String title,
+			int minValue) {
+		addIntegerProperty(parent, property, title, minValue, Integer.MAX_VALUE);
+	}
+
+	/**
+	 * Create editor for single <code>int</code> property with valid interval
+	 * <code>[0, Integer.MAX_VALUE]</code>.
+	 */
+	protected final void addIntegerProperty(Composite parent, String property, String title) {
+		addIntegerProperty(parent, property, title, 0);
+	}
+
+	protected final void addIntegerProperty(Composite parent, String property) {
+		addIntegerProperty(parent, property, property);
+	}
+
+	/**
+	 * Creates <code>int</code> properties.
+	 */
+	protected final void addIntegerProperties(Composite parent, String[][] propertyAndTitleArray) {
+		for (int i = 0; i < propertyAndTitleArray.length; i++) {
+			String[] propertyAndTitle = propertyAndTitleArray[i];
+			addIntegerProperty(parent, propertyAndTitle[0], propertyAndTitle[1]);
+		}
+	}
+
+	/**
+	 * Creates {@link Group} for multiple <code>int</code> properties.
+	 */
+	protected final Group addIntegerProperties(Composite parent,
+			String title,
+			String[][] propertyAndTitleArray) {
+		Group group = new Group(parent, SWT.NONE);
+		group.setText(title);
+		GridLayoutFactory.create(group).columns(2);
+		//
+		for (int i = 0; i < propertyAndTitleArray.length; i++) {
+			String[] propertyAndTitle = propertyAndTitleArray[i];
+			addIntegerProperty(group, propertyAndTitle[0], propertyAndTitle[1]);
+		}
+		return group;
+	}
+
+	/**
+	 * Creates {@link Group} for multiple <code>int</code> properties.
+	 */
+	protected final Group addIntegerProperties(Composite parent,
+			String title,
+			String[][] propertyAndTitleArray,
+			int[] minumunValues) {
+		Group group = new Group(parent, SWT.NONE);
+		group.setText(title);
+		GridLayoutFactory.create(group).columns(2);
+		//
+		for (int i = 0; i < propertyAndTitleArray.length; i++) {
+			String[] propertyAndTitle = propertyAndTitleArray[i];
+			addIntegerProperty(group, propertyAndTitle[0], propertyAndTitle[1], minumunValues[i]);
+		}
+		return group;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Double
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adapter for <code>double</code> property.
+	 */
+	private final class DoublePropertyInfo extends PropertyInfo {
+		private final CSpinner m_spinner;
+		private final double m_multiplier;
+		private final Listener m_listener = new Listener() {
+			@Override
+			public void handleEvent(Event event) {
+				if (event.doit) {
+					saveValue();
+				}
+			}
+		};
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public DoublePropertyInfo(String property, CSpinner spinner, double multiplier) {
+			super(property);
+			m_spinner = spinner;
+			m_multiplier = multiplier;
+			new CSpinnerDeferredNotifier(m_spinner, 500, m_listener);
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// PropertyInfo
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public void showValue() {
+			Object value = getValue();
+			if (value instanceof Number) {
+				Number numberValue = (Number) value;
+				m_spinner.setSelection((int) (numberValue.doubleValue() * m_multiplier));
+			} else {
+				m_spinner.setSelection(m_spinner.getMinimum());
+			}
+		}
+
+		@Override
+		protected void doSaveValue() {
+			setValue(m_spinner.getSelection() / m_multiplier);
+		}
+	}
+
+	/**
+	 * Create editor for single <code>double</code> property with given min/max values.
+	 */
+	protected final void addDoubleProperty(Composite parent,
+			String property,
+			String title,
+			double minValue,
+			double maxValue,
+			int digits) {
+		int multiplier = (int) Math.pow(10, digits);
+		new Label(parent, SWT.NONE).setText(title);
+		//
+		CSpinner spinner = new CSpinner(parent, SWT.BORDER);
+		GridDataFactory.create(spinner).hintHC(10);
+		spinner.setMinimum((int) (minValue * multiplier));
+		spinner.setMaximum((int) (maxValue * multiplier));
+		spinner.setDigits(digits);
+		//
+		DoublePropertyInfo propertyInfo = new DoublePropertyInfo(property, spinner, multiplier);
+		add(propertyInfo);
+	}
+
+	/**
+	 * Create editor for single <code>double</code> property with valid interval
+	 * <code>[minValue, Double.MAX_VALUE]</code>.
+	 */
+	protected final void addDoubleProperty(Composite parent,
+			String property,
+			String title,
+			double minValue) {
+		addDoubleProperty(parent, property, title, minValue, Double.MAX_VALUE, 1);
+	}
+
+	/**
+	 * Create editor for single <code>double</code> property with valid interval
+	 * <code>[0, Double.MAX_VALUE]</code>.
+	 */
+	protected final void addDoubleProperty(Composite parent, String property, String title) {
+		addDoubleProperty(parent, property, title, 0);
+	}
+
+	protected final void addDoubleProperty(Composite parent, String property) {
+		addDoubleProperty(parent, property, property, 0);
+	}
+
+	/**
+	 * Creates <code>double</code> properties.
+	 */
+	protected final void addDoubleProperties(Composite parent, String[][] propertyAndTitleArray) {
+		for (int i = 0; i < propertyAndTitleArray.length; i++) {
+			String[] propertyAndTitle = propertyAndTitleArray[i];
+			addDoubleProperty(parent, propertyAndTitle[0], propertyAndTitle[1]);
+		}
+	}
+
+	/**
+	 * Creates {@link Group} for multiple <code>double</code> properties.
+	 */
+	protected final Group addDoubleProperties(Composite parent,
+			String title,
+			String[][] propertyAndTitleArray) {
+		Group group = new Group(parent, SWT.NONE);
+		group.setText(title);
+		GridLayoutFactory.create(group).columns(2);
+		//
+		for (int i = 0; i < propertyAndTitleArray.length; i++) {
+			String[] propertyAndTitle = propertyAndTitleArray[i];
+			addDoubleProperty(group, propertyAndTitle[0], propertyAndTitle[1]);
+		}
+		return group;
+	}
+
+	/**
+	 * Creates {@link Group} for multiple <code>double</code> properties.
+	 */
+	protected final Group addDoubleProperties(Composite parent,
+			String title,
+			String[][] propertyAndTitleArray,
+			double[] minumunValues) {
+		Group group = new Group(parent, SWT.NONE);
+		group.setText(title);
+		GridLayoutFactory.create(group).columns(2);
+		//
+		for (int i = 0; i < propertyAndTitleArray.length; i++) {
+			String[] propertyAndTitle = propertyAndTitleArray[i];
+			addDoubleProperty(group, propertyAndTitle[0], propertyAndTitle[1], minumunValues[i]);
+		}
+		return group;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Filler
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected final Label addFiller(Composite parent) {
+		return new Label(parent, SWT.NONE);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/editor/actions/assistant/ILayoutAssistantPage.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/editor/actions/assistant/ILayoutAssistantPage.java
index 67b469f89..ed065369e 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/editor/actions/assistant/ILayoutAssistantPage.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/editor/actions/assistant/ILayoutAssistantPage.java
@@ -17,13 +17,13 @@
  * @coverage core.editor.action.assistant
  */
 public interface ILayoutAssistantPage {
-  /**
-   * @return <code>true</code> if this page handle valid objects.
-   */
-  boolean isPageValid();
+	/**
+	 * @return <code>true</code> if this page handle valid objects.
+	 */
+	boolean isPageValid();
 
-  /**
-   * Notifies page that it should update its controls from model.
-   */
-  void updatePage();
+	/**
+	 * Notifies page that it should update its controls from model.
+	 */
+	void updatePage();
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/editor/actions/assistant/LayoutAssistantListener.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/editor/actions/assistant/LayoutAssistantListener.java
index b783f8134..02b0d1336 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/editor/actions/assistant/LayoutAssistantListener.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/editor/actions/assistant/LayoutAssistantListener.java
@@ -24,18 +24,18 @@
  * @coverage core.editor.action.assistant
  */
 public abstract class LayoutAssistantListener {
-  /**
-   * Adds pages based on selected {@link ObjectInfo}'s.
-   *
-   * @param objects
-   *          the {@link List} of selected {@link ObjectInfo}.
-   * @param folder
-   *          the {@link TabFolder} for add tabs.
-   * @param pages
-   *          the {@link List} of {@link ILayoutAssistantPage}.
-   */
-  public void createAssistantPages(List<ObjectInfo> objects,
-      TabFolder folder,
-      List<ILayoutAssistantPage> pages) throws Exception {
-  }
+	/**
+	 * Adds pages based on selected {@link ObjectInfo}'s.
+	 *
+	 * @param objects
+	 *          the {@link List} of selected {@link ObjectInfo}.
+	 * @param folder
+	 *          the {@link TabFolder} for add tabs.
+	 * @param pages
+	 *          the {@link List} of {@link ILayoutAssistantPage}.
+	 */
+	public void createAssistantPages(List<ObjectInfo> objects,
+			TabFolder folder,
+			List<ILayoutAssistantPage> pages) throws Exception {
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/editor/actions/assistant/LayoutAssistantSupport.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/editor/actions/assistant/LayoutAssistantSupport.java
index 32b0195d0..2b03fba90 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/editor/actions/assistant/LayoutAssistantSupport.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/editor/actions/assistant/LayoutAssistantSupport.java
@@ -26,91 +26,91 @@
  * @coverage core.editor.action.assistant
  */
 public abstract class LayoutAssistantSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public LayoutAssistantSupport(ObjectInfo layout) {
-    layout.addBroadcastListener(new LayoutAssistantListener() {
-      @Override
-      public void createAssistantPages(List<ObjectInfo> objects,
-          TabFolder folder,
-          List<ILayoutAssistantPage> pages) throws Exception {
-        LayoutAssistantSupport.this.createAssistantPages(objects, folder, pages);
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public LayoutAssistantSupport(ObjectInfo layout) {
+		layout.addBroadcastListener(new LayoutAssistantListener() {
+			@Override
+			public void createAssistantPages(List<ObjectInfo> objects,
+					TabFolder folder,
+					List<ILayoutAssistantPage> pages) throws Exception {
+				LayoutAssistantSupport.this.createAssistantPages(objects, folder, pages);
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // LayoutAssistantListener
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void createAssistantPages(List<ObjectInfo> objects,
-      TabFolder folder,
-      List<ILayoutAssistantPage> pages) throws Exception {
-    // prepare first selection object
-    ObjectInfo firstObject = objects.get(0);
-    // prepare container
-    ObjectInfo container = getContainer();
-    // check selection is this container
-    if (objects.size() == 1 && firstObject == container) {
-      addPage(folder, pages, Messages.LayoutAssistantSupport_layoutPage, createLayoutPage(folder));
-      return;
-    }
-    // check selection is children of this container
-    if (firstObject.getParent() == container) {
-      addPage(
-          folder,
-          pages,
-          Messages.LayoutAssistantSupport_parentLayoutPage,
-          createLayoutPage(folder));
-      addPage(folder, pages, getConstraintsPageTitle(), createConstraintsPage(folder, objects));
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// LayoutAssistantListener
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void createAssistantPages(List<ObjectInfo> objects,
+			TabFolder folder,
+			List<ILayoutAssistantPage> pages) throws Exception {
+		// prepare first selection object
+		ObjectInfo firstObject = objects.get(0);
+		// prepare container
+		ObjectInfo container = getContainer();
+		// check selection is this container
+		if (objects.size() == 1 && firstObject == container) {
+			addPage(folder, pages, Messages.LayoutAssistantSupport_layoutPage, createLayoutPage(folder));
+			return;
+		}
+		// check selection is children of this container
+		if (firstObject.getParent() == container) {
+			addPage(
+					folder,
+					pages,
+					Messages.LayoutAssistantSupport_parentLayoutPage,
+					createLayoutPage(folder));
+			addPage(folder, pages, getConstraintsPageTitle(), createConstraintsPage(folder, objects));
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Layout
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return container {@link ObjectInfo} for handled layout.
-   */
-  protected abstract ObjectInfo getContainer();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Layout
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return container {@link ObjectInfo} for handled layout.
+	 */
+	protected abstract ObjectInfo getContainer();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Pages
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static void addPage(TabFolder folder,
-      List<ILayoutAssistantPage> pages,
-      String name,
-      AbstractAssistantPage page) {
-    if (page != null) {
-      TabFactory.item(folder).text(name).control(page);
-      pages.add(page);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Pages
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static void addPage(TabFolder folder,
+			List<ILayoutAssistantPage> pages,
+			String name,
+			AbstractAssistantPage page) {
+		if (page != null) {
+			TabFactory.item(folder).text(name).control(page);
+			pages.add(page);
+		}
+	}
 
-  /**
-   * Create page for editing handled layout.
-   */
-  protected AbstractAssistantPage createLayoutPage(Composite parent) {
-    return null;
-  }
+	/**
+	 * Create page for editing handled layout.
+	 */
+	protected AbstractAssistantPage createLayoutPage(Composite parent) {
+		return null;
+	}
 
-  /**
-   * Create page for editing layout constraints.
-   */
-  protected AbstractAssistantPage createConstraintsPage(Composite parent, List<ObjectInfo> objects) {
-    return null;
-  }
+	/**
+	 * Create page for editing layout constraints.
+	 */
+	protected AbstractAssistantPage createConstraintsPage(Composite parent, List<ObjectInfo> objects) {
+		return null;
+	}
 
-  /**
-   * @return the toolkit specific title for constraints page.
-   */
-  protected abstract String getConstraintsPageTitle();
+	/**
+	 * @return the toolkit specific title for constraints page.
+	 */
+	protected abstract String getConstraintsPageTitle();
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/editor/color/ColorChooserPreferences.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/editor/color/ColorChooserPreferences.java
index dc8953aaf..2835af2c2 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/editor/color/ColorChooserPreferences.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/editor/color/ColorChooserPreferences.java
@@ -40,63 +40,63 @@
  */
 public class ColorChooserPreferences extends PreferencePage implements IWorkbenchPreferencePage {
 	protected Preferences preferences =
-      InstanceScope.INSTANCE.getNode(IColorChooserPreferenceConstants.PREFERENCE_NODE);
+			InstanceScope.INSTANCE.getNode(IColorChooserPreferenceConstants.PREFERENCE_NODE);
 	protected Preferences prefs = preferences.node(IColorChooserPreferenceConstants.PREFERENCE_NODE_1);
-  Button cbxIncludeCustomColor;
-  Button cbxIncludeSystemColor;
-  Button cbxIncludeNamedColors;
-  Button cbxIncludeWebSafeColors;
+	Button cbxIncludeCustomColor;
+	Button cbxIncludeSystemColor;
+	Button cbxIncludeNamedColors;
+	Button cbxIncludeWebSafeColors;
 	protected String prefPrefix = ""; // This prefix will either be "SWT" or "SWING". This will be set in the
-										// subclasses and thus distinguish between which preference is to be set
+	// subclasses and thus distinguish between which preference is to be set
 	protected final Map<String, Boolean> defaultPreferences = new HashMap<>();
-//	{
-//    private static final long serialVersionUID = 1L;
-//    {
-//			put(prefPrefix + IColorChooserPreferenceConstants.P_CUSTOM_COLORS, true);
-//			put(prefPrefix + IColorChooserPreferenceConstants.P_SYSTEM_COLORS, true);
-//			put(prefPrefix + IColorChooserPreferenceConstants.P_AWT_COLORS, true);
-//			put(prefPrefix + IColorChooserPreferenceConstants.P_SWING_COLORS, true);
-//			put(prefPrefix + IColorChooserPreferenceConstants.P_NAMED_COLORS, true);
-//			put(prefPrefix + IColorChooserPreferenceConstants.P_WEB_SAFE_COLORS, true);
-//    }
-//  };
-  private Group grpInclude;
-
-  public ColorChooserPreferences() {
-  }
-
-  public ColorChooserPreferences(String title) {
-    super(title);
-  }
-
-  /**
-   * This annotation is requried to instruct WindowBuilder which constructor to run
-   *
-   * @wbp.parser.constructor
-   */
-  public ColorChooserPreferences(String title, ImageDescriptor image) {
-    super(title, image);
-    setPersistedPreferencesToUI();
-  }
-
-  @Override
-public void init(IWorkbench workbench) {
-  }
-
-  @Override
-  protected Control createContents(Composite parent) {
-    Composite container = new Composite(parent, SWT.NONE);
-    container.setLayout(new GridLayout(1, false));
-    Composite composite = new Composite(container, SWT.NONE);
-    RowLayout rl_composite = new RowLayout(SWT.HORIZONTAL);
-    composite.setLayout(rl_composite);
-    grpInclude = new Group(composite, SWT.NONE);
-    grpInclude.setText(ModelMessages.ColorPreferenceChooser_Include);
-    grpInclude.setLayout(new RowLayout(SWT.VERTICAL));
-	createPreferenceCheckboxes(grpInclude);
-    setPersistedPreferencesToUI();
-    return container;
-  }
+	//	{
+	//    private static final long serialVersionUID = 1L;
+	//    {
+	//			put(prefPrefix + IColorChooserPreferenceConstants.P_CUSTOM_COLORS, true);
+	//			put(prefPrefix + IColorChooserPreferenceConstants.P_SYSTEM_COLORS, true);
+	//			put(prefPrefix + IColorChooserPreferenceConstants.P_AWT_COLORS, true);
+	//			put(prefPrefix + IColorChooserPreferenceConstants.P_SWING_COLORS, true);
+	//			put(prefPrefix + IColorChooserPreferenceConstants.P_NAMED_COLORS, true);
+	//			put(prefPrefix + IColorChooserPreferenceConstants.P_WEB_SAFE_COLORS, true);
+	//    }
+	//  };
+	private Group grpInclude;
+
+	public ColorChooserPreferences() {
+	}
+
+	public ColorChooserPreferences(String title) {
+		super(title);
+	}
+
+	/**
+	 * This annotation is requried to instruct WindowBuilder which constructor to run
+	 *
+	 * @wbp.parser.constructor
+	 */
+	public ColorChooserPreferences(String title, ImageDescriptor image) {
+		super(title, image);
+		setPersistedPreferencesToUI();
+	}
+
+	@Override
+	public void init(IWorkbench workbench) {
+	}
+
+	@Override
+	protected Control createContents(Composite parent) {
+		Composite container = new Composite(parent, SWT.NONE);
+		container.setLayout(new GridLayout(1, false));
+		Composite composite = new Composite(container, SWT.NONE);
+		RowLayout rl_composite = new RowLayout(SWT.HORIZONTAL);
+		composite.setLayout(rl_composite);
+		grpInclude = new Group(composite, SWT.NONE);
+		grpInclude.setText(ModelMessages.ColorPreferenceChooser_Include);
+		grpInclude.setLayout(new RowLayout(SWT.VERTICAL));
+		createPreferenceCheckboxes(grpInclude);
+		setPersistedPreferencesToUI();
+		return container;
+	}
 
 	protected void createPreferenceCheckboxes(Group groupLayout) {
 		cbxIncludeCustomColor = new Button(grpInclude, SWT.CHECK);
@@ -109,77 +109,77 @@ protected void createPreferenceCheckboxes(Group groupLayout) {
 		cbxIncludeWebSafeColors.setText(IColorChooserPreferenceConstants.WEBSAFE_COLORS);
 	}
 
-  //Initialize the check boxes to the persisted preferences
+	//Initialize the check boxes to the persisted preferences
 	protected void setPersistedPreferencesToUI() {
-    cbxIncludeCustomColor.setSelection(
-        prefs.getBoolean(
+		cbxIncludeCustomColor.setSelection(
+				prefs.getBoolean(
 						prefPrefix + IColorChooserPreferenceConstants.P_CUSTOM_COLORS,
 						defaultPreferences.get(prefPrefix + IColorChooserPreferenceConstants.P_CUSTOM_COLORS)));
-    cbxIncludeSystemColor.setSelection(
-        prefs.getBoolean(
+		cbxIncludeSystemColor.setSelection(
+				prefs.getBoolean(
 						prefPrefix + IColorChooserPreferenceConstants.P_SYSTEM_COLORS,
 						defaultPreferences.get(prefPrefix + IColorChooserPreferenceConstants.P_SYSTEM_COLORS)));
-    cbxIncludeNamedColors.setSelection(
-        prefs.getBoolean(
+		cbxIncludeNamedColors.setSelection(
+				prefs.getBoolean(
 						prefPrefix + IColorChooserPreferenceConstants.P_NAMED_COLORS,
 						defaultPreferences.get(prefPrefix + IColorChooserPreferenceConstants.P_NAMED_COLORS)));
-    cbxIncludeWebSafeColors.setSelection(
-        prefs.getBoolean(
+		cbxIncludeWebSafeColors.setSelection(
+				prefs.getBoolean(
 						prefPrefix + IColorChooserPreferenceConstants.P_WEB_SAFE_COLORS,
 						defaultPreferences.get(prefPrefix + IColorChooserPreferenceConstants.P_WEB_SAFE_COLORS)));
-  }
+	}
 
-  @Override
-  protected void performApply() {
-      prefs.putBoolean(
+	@Override
+	protected void performApply() {
+		prefs.putBoolean(
 				prefPrefix + IColorChooserPreferenceConstants.P_CUSTOM_COLORS,
-          cbxIncludeCustomColor.getSelection());
-      prefs.putBoolean(
+				cbxIncludeCustomColor.getSelection());
+		prefs.putBoolean(
 				prefPrefix + IColorChooserPreferenceConstants.P_SYSTEM_COLORS,
-          cbxIncludeSystemColor.getSelection());
-      prefs.putBoolean(
+				cbxIncludeSystemColor.getSelection());
+		prefs.putBoolean(
 				prefPrefix + IColorChooserPreferenceConstants.P_NAMED_COLORS,
-          cbxIncludeNamedColors.getSelection());
-      prefs.putBoolean(
+				cbxIncludeNamedColors.getSelection());
+		prefs.putBoolean(
 				prefPrefix + IColorChooserPreferenceConstants.P_WEB_SAFE_COLORS,
 				cbxIncludeWebSafeColors.getSelection());
-  }
-
-  @Override
-  public boolean performOk() {
-    performApply();
-    return true;
-  }
-
-  //Sets the preferences to the default values
-  protected void setPreferenceDefaults() {
-    prefs.putBoolean(
-			prefPrefix + IColorChooserPreferenceConstants.P_CUSTOM_COLORS,
-			defaultPreferences.get(prefPrefix + IColorChooserPreferenceConstants.P_CUSTOM_COLORS));
-    prefs.putBoolean(
-			prefPrefix + IColorChooserPreferenceConstants.P_SYSTEM_COLORS,
-			defaultPreferences.get(prefPrefix + IColorChooserPreferenceConstants.P_SYSTEM_COLORS));
-    prefs.putBoolean(
-			prefPrefix + IColorChooserPreferenceConstants.P_NAMED_COLORS,
-			defaultPreferences.get(prefPrefix + IColorChooserPreferenceConstants.P_NAMED_COLORS));
-    prefs.putBoolean(
-			prefPrefix + IColorChooserPreferenceConstants.P_WEB_SAFE_COLORS,
-			defaultPreferences.get(prefPrefix + IColorChooserPreferenceConstants.P_WEB_SAFE_COLORS));
-  }
-
-  @Override
-  protected void performDefaults() {
-    //Update the UI to the default values
-    cbxIncludeCustomColor.setSelection(
-			defaultPreferences.get(prefPrefix + IColorChooserPreferenceConstants.P_CUSTOM_COLORS));
-    cbxIncludeSystemColor.setSelection(
-			defaultPreferences.get(prefPrefix + IColorChooserPreferenceConstants.P_SYSTEM_COLORS));
-    cbxIncludeNamedColors.setSelection(
-			defaultPreferences.get(prefPrefix + IColorChooserPreferenceConstants.P_NAMED_COLORS));
-    cbxIncludeWebSafeColors.setSelection(
-			defaultPreferences.get(prefPrefix + IColorChooserPreferenceConstants.P_WEB_SAFE_COLORS));
-
-  }
+	}
+
+	@Override
+	public boolean performOk() {
+		performApply();
+		return true;
+	}
+
+	//Sets the preferences to the default values
+	protected void setPreferenceDefaults() {
+		prefs.putBoolean(
+				prefPrefix + IColorChooserPreferenceConstants.P_CUSTOM_COLORS,
+				defaultPreferences.get(prefPrefix + IColorChooserPreferenceConstants.P_CUSTOM_COLORS));
+		prefs.putBoolean(
+				prefPrefix + IColorChooserPreferenceConstants.P_SYSTEM_COLORS,
+				defaultPreferences.get(prefPrefix + IColorChooserPreferenceConstants.P_SYSTEM_COLORS));
+		prefs.putBoolean(
+				prefPrefix + IColorChooserPreferenceConstants.P_NAMED_COLORS,
+				defaultPreferences.get(prefPrefix + IColorChooserPreferenceConstants.P_NAMED_COLORS));
+		prefs.putBoolean(
+				prefPrefix + IColorChooserPreferenceConstants.P_WEB_SAFE_COLORS,
+				defaultPreferences.get(prefPrefix + IColorChooserPreferenceConstants.P_WEB_SAFE_COLORS));
+	}
+
+	@Override
+	protected void performDefaults() {
+		//Update the UI to the default values
+		cbxIncludeCustomColor.setSelection(
+				defaultPreferences.get(prefPrefix + IColorChooserPreferenceConstants.P_CUSTOM_COLORS));
+		cbxIncludeSystemColor.setSelection(
+				defaultPreferences.get(prefPrefix + IColorChooserPreferenceConstants.P_SYSTEM_COLORS));
+		cbxIncludeNamedColors.setSelection(
+				defaultPreferences.get(prefPrefix + IColorChooserPreferenceConstants.P_NAMED_COLORS));
+		cbxIncludeWebSafeColors.setSelection(
+				defaultPreferences.get(prefPrefix + IColorChooserPreferenceConstants.P_WEB_SAFE_COLORS));
+
+	}
 
 	protected void setPrefPrefix(String prefPrefix) {
 		this.prefPrefix = prefPrefix;
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/editor/color/CustomColorPickerComposite.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/editor/color/CustomColorPickerComposite.java
index 5e6308410..d2b537934 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/editor/color/CustomColorPickerComposite.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/editor/color/CustomColorPickerComposite.java
@@ -32,132 +32,132 @@
 import org.eclipse.swt.widgets.Text;
 
 public class CustomColorPickerComposite extends AbstractColorsComposite {
-  private Label colorLabelBlue;
-  private Label colorLabelRed;
-  private Label colorLabelGreen;
-  private Label colorLabelHue;
-  private Label colorLabelSaturation;
-  private Label colorLabelbrightness;
-  private Text colorTextBlue;
-  private Text colorTextRed;
-  private Text colorTextGreen;
-  private Text colorTextHue;
-  private Text colorTextSaturation;
-  private Text colorTextbrightness;
-  private Text previewText;
-  private Composite previewImage;
-  private Text previewTextBackgroundBlack;
-  private Text previewTextBackgroundWhite;
-  ColorSelector colorSelector;
+	private Label colorLabelBlue;
+	private Label colorLabelRed;
+	private Label colorLabelGreen;
+	private Label colorLabelHue;
+	private Label colorLabelSaturation;
+	private Label colorLabelbrightness;
+	private Text colorTextBlue;
+	private Text colorTextRed;
+	private Text colorTextGreen;
+	private Text colorTextHue;
+	private Text colorTextSaturation;
+	private Text colorTextbrightness;
+	private Text previewText;
+	private Composite previewImage;
+	private Text previewTextBackgroundBlack;
+	private Text previewTextBackgroundWhite;
+	ColorSelector colorSelector;
 
-  public CustomColorPickerComposite(Composite parent, int style, AbstractColorDialog colorDialog) {
-    super(parent, style, colorDialog);
-    setLayout(new GridLayout());
-    createContent(this);
-  }
+	public CustomColorPickerComposite(Composite parent, int style, AbstractColorDialog colorDialog) {
+		super(parent, style, colorDialog);
+		setLayout(new GridLayout());
+		createContent(this);
+	}
 
-  private void createContent(Composite parent) {
-    Composite color = new Composite(parent, SWT.NONE);
-    GridLayoutFactory.swtDefaults().applyTo(color);
-    GridDataFactory.swtDefaults().applyTo(color);
-    Composite colorSelectorComp = new Composite(color, SWT.NONE);
-    GridLayoutFactory.swtDefaults().applyTo(colorSelectorComp);
-    GridDataFactory.swtDefaults().applyTo(colorSelectorComp);
-    Label buttonLabel = new Label(colorSelectorComp, SWT.NONE);
-    buttonLabel.setText(ModelMessages.CustomColorPicker_btnSelectColor);
-    colorSelector = new ColorSelector(colorSelectorComp);
-    createInfoComposite(color);
-    previewComposite(color);
-    colorSelector.getButton().addSelectionListener(new SelectionListener() {
-      @Override
-	public void widgetSelected(SelectionEvent e) {
-        if (colorSelector.getColorValue() == null) {
-          return;
-        }
-        RGB currentColor = colorSelector.getColorValue();
-        m_colorDialog.setResultColor(
-            new ColorInfo(currentColor.red, currentColor.green, currentColor.blue));
-        colorSelector.setColorValue(currentColor);
-        updatePreview(currentColor);
-        colorTextRed.setText("" + currentColor.red);
-        colorTextGreen.setText("" + currentColor.green);
-        colorTextBlue.setText("" + currentColor.blue);
-        colorTextHue.setText("" + String.format("%.2f", currentColor.getHSB()[0]));
-        colorTextSaturation.setText("" + String.format("%.2f", currentColor.getHSB()[1]));
-        colorTextbrightness.setText("" + String.format("%.2f", currentColor.getHSB()[2]));
-      }
+	private void createContent(Composite parent) {
+		Composite color = new Composite(parent, SWT.NONE);
+		GridLayoutFactory.swtDefaults().applyTo(color);
+		GridDataFactory.swtDefaults().applyTo(color);
+		Composite colorSelectorComp = new Composite(color, SWT.NONE);
+		GridLayoutFactory.swtDefaults().applyTo(colorSelectorComp);
+		GridDataFactory.swtDefaults().applyTo(colorSelectorComp);
+		Label buttonLabel = new Label(colorSelectorComp, SWT.NONE);
+		buttonLabel.setText(ModelMessages.CustomColorPicker_btnSelectColor);
+		colorSelector = new ColorSelector(colorSelectorComp);
+		createInfoComposite(color);
+		previewComposite(color);
+		colorSelector.getButton().addSelectionListener(new SelectionListener() {
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				if (colorSelector.getColorValue() == null) {
+					return;
+				}
+				RGB currentColor = colorSelector.getColorValue();
+				m_colorDialog.setResultColor(
+						new ColorInfo(currentColor.red, currentColor.green, currentColor.blue));
+				colorSelector.setColorValue(currentColor);
+				updatePreview(currentColor);
+				colorTextRed.setText("" + currentColor.red);
+				colorTextGreen.setText("" + currentColor.green);
+				colorTextBlue.setText("" + currentColor.blue);
+				colorTextHue.setText("" + String.format("%.2f", currentColor.getHSB()[0]));
+				colorTextSaturation.setText("" + String.format("%.2f", currentColor.getHSB()[1]));
+				colorTextbrightness.setText("" + String.format("%.2f", currentColor.getHSB()[2]));
+			}
 
-      @Override
-	public void widgetDefaultSelected(SelectionEvent e) {
-        // TODO Auto-generated method stub
-      }
-    });
-  }
+			@Override
+			public void widgetDefaultSelected(SelectionEvent e) {
+				// TODO Auto-generated method stub
+			}
+		});
+	}
 
-  private void previewComposite(Composite parent) {
-    Composite previewComposite = new Composite(parent, SWT.BORDER);
-    GridLayoutFactory.swtDefaults().numColumns(1).applyTo(previewComposite);
-    GridDataFactory.swtDefaults().applyTo(previewComposite);
-    Font mono = new Font(parent.getDisplay(), "Monospaced", 15, SWT.BOLD);
-    previewText = new Text(previewComposite, SWT.READ_ONLY);
-    previewText.setFont(mono);
-    previewText.setText(ModelMessages.CustomColorPicker_previewTextExample);
-    previewImage = new Composite(previewComposite, SWT.NONE);
-    GridLayoutFactory.swtDefaults().numColumns(1).applyTo(previewImage);
-    GridDataFactory.swtDefaults().hint(106, 26).indent(0, 0).applyTo(previewImage);
-    previewTextBackgroundBlack = new Text(previewComposite, SWT.READ_ONLY);
-    previewTextBackgroundBlack.setFont(mono);
-    previewTextBackgroundBlack.setForeground(parent.getDisplay().getSystemColor(SWT.COLOR_BLACK));
-    previewTextBackgroundBlack.setText(ModelMessages.CustomColorPicker_previewTextExample);
-    previewTextBackgroundWhite = new Text(previewComposite, SWT.READ_ONLY);
-    previewTextBackgroundWhite.setFont(mono);
-    previewTextBackgroundWhite.setForeground(parent.getDisplay().getSystemColor(SWT.COLOR_WHITE));
-    previewTextBackgroundWhite.setText(ModelMessages.CustomColorPicker_previewTextExample);
-  }
+	private void previewComposite(Composite parent) {
+		Composite previewComposite = new Composite(parent, SWT.BORDER);
+		GridLayoutFactory.swtDefaults().numColumns(1).applyTo(previewComposite);
+		GridDataFactory.swtDefaults().applyTo(previewComposite);
+		Font mono = new Font(parent.getDisplay(), "Monospaced", 15, SWT.BOLD);
+		previewText = new Text(previewComposite, SWT.READ_ONLY);
+		previewText.setFont(mono);
+		previewText.setText(ModelMessages.CustomColorPicker_previewTextExample);
+		previewImage = new Composite(previewComposite, SWT.NONE);
+		GridLayoutFactory.swtDefaults().numColumns(1).applyTo(previewImage);
+		GridDataFactory.swtDefaults().hint(106, 26).indent(0, 0).applyTo(previewImage);
+		previewTextBackgroundBlack = new Text(previewComposite, SWT.READ_ONLY);
+		previewTextBackgroundBlack.setFont(mono);
+		previewTextBackgroundBlack.setForeground(parent.getDisplay().getSystemColor(SWT.COLOR_BLACK));
+		previewTextBackgroundBlack.setText(ModelMessages.CustomColorPicker_previewTextExample);
+		previewTextBackgroundWhite = new Text(previewComposite, SWT.READ_ONLY);
+		previewTextBackgroundWhite.setFont(mono);
+		previewTextBackgroundWhite.setForeground(parent.getDisplay().getSystemColor(SWT.COLOR_WHITE));
+		previewTextBackgroundWhite.setText(ModelMessages.CustomColorPicker_previewTextExample);
+	}
 
-  private void updatePreview(RGB rgb) {
-    Color color = new Color(Display.getCurrent(), rgb);
-    previewText.setForeground(color);
-    previewTextBackgroundBlack.setBackground(color);
-    previewTextBackgroundWhite.setBackground(color);
-    previewImage.setBackground(color);
-  }
+	private void updatePreview(RGB rgb) {
+		Color color = new Color(Display.getCurrent(), rgb);
+		previewText.setForeground(color);
+		previewTextBackgroundBlack.setBackground(color);
+		previewTextBackgroundWhite.setBackground(color);
+		previewImage.setBackground(color);
+	}
 
-  public void updateColorBeforeOpen() {
-    if (m_colorDialog.getColorInfo() == null) {
-      m_colorDialog.setColorInfo(new ColorInfo(0, 0, 0));
-    }
-    updatePreview(m_colorDialog.getColorInfo().getRGB());
-    colorSelector.setColorValue(m_colorDialog.getColorInfo().getRGB());
-  }
+	public void updateColorBeforeOpen() {
+		if (m_colorDialog.getColorInfo() == null) {
+			m_colorDialog.setColorInfo(new ColorInfo(0, 0, 0));
+		}
+		updatePreview(m_colorDialog.getColorInfo().getRGB());
+		colorSelector.setColorValue(m_colorDialog.getColorInfo().getRGB());
+	}
 
-  private void createInfoComposite(Composite parent) {
-    Composite infoComposite = new Composite(parent, SWT.BORDER);
-    GridLayoutFactory.swtDefaults().numColumns(2).applyTo(infoComposite);
-    GridDataFactory.swtDefaults().applyTo(infoComposite);
-    Composite rgbComposite = new Composite(infoComposite, SWT.NONE);
-    GridLayoutFactory.swtDefaults().numColumns(2).applyTo(rgbComposite);
-    GridDataFactory.swtDefaults().applyTo(rgbComposite);
-    Composite hsbComposite = new Composite(infoComposite, SWT.NONE);
-    GridLayoutFactory.swtDefaults().numColumns(2).applyTo(hsbComposite);
-    GridDataFactory.swtDefaults().applyTo(hsbComposite);
-    colorLabelBlue = new Label(rgbComposite, SWT.NONE);
-    colorLabelBlue.setText(ModelMessages.CustomColorPicker_lblBlue);
-    colorTextBlue = new Text(rgbComposite, SWT.READ_ONLY);
-    colorLabelRed = new Label(rgbComposite, SWT.NONE);
-    colorLabelRed.setText(ModelMessages.CustomColorPicker_lblRed);
-    colorTextRed = new Text(rgbComposite, SWT.READ_ONLY);
-    colorLabelGreen = new Label(rgbComposite, SWT.NONE);
-    colorLabelGreen.setText(ModelMessages.CustomColorPicker_lblGreen);
-    colorTextGreen = new Text(rgbComposite, SWT.READ_ONLY);
-    colorLabelHue = new Label(hsbComposite, SWT.NONE);
-    colorLabelHue.setText(ModelMessages.CustomColorPicker_lblHue);
-    colorTextHue = new Text(hsbComposite, SWT.READ_ONLY);
-    colorLabelSaturation = new Label(hsbComposite, SWT.NONE);
-    colorLabelSaturation.setText(ModelMessages.CustomColorPicker_lblSaturation);
-    colorTextSaturation = new Text(hsbComposite, SWT.READ_ONLY);
-    colorLabelbrightness = new Label(hsbComposite, SWT.NONE);
-    colorLabelbrightness.setText(ModelMessages.CustomColorPicker_lblBrightness);
-    colorTextbrightness = new Text(hsbComposite, SWT.READ_ONLY);
-  }
+	private void createInfoComposite(Composite parent) {
+		Composite infoComposite = new Composite(parent, SWT.BORDER);
+		GridLayoutFactory.swtDefaults().numColumns(2).applyTo(infoComposite);
+		GridDataFactory.swtDefaults().applyTo(infoComposite);
+		Composite rgbComposite = new Composite(infoComposite, SWT.NONE);
+		GridLayoutFactory.swtDefaults().numColumns(2).applyTo(rgbComposite);
+		GridDataFactory.swtDefaults().applyTo(rgbComposite);
+		Composite hsbComposite = new Composite(infoComposite, SWT.NONE);
+		GridLayoutFactory.swtDefaults().numColumns(2).applyTo(hsbComposite);
+		GridDataFactory.swtDefaults().applyTo(hsbComposite);
+		colorLabelBlue = new Label(rgbComposite, SWT.NONE);
+		colorLabelBlue.setText(ModelMessages.CustomColorPicker_lblBlue);
+		colorTextBlue = new Text(rgbComposite, SWT.READ_ONLY);
+		colorLabelRed = new Label(rgbComposite, SWT.NONE);
+		colorLabelRed.setText(ModelMessages.CustomColorPicker_lblRed);
+		colorTextRed = new Text(rgbComposite, SWT.READ_ONLY);
+		colorLabelGreen = new Label(rgbComposite, SWT.NONE);
+		colorLabelGreen.setText(ModelMessages.CustomColorPicker_lblGreen);
+		colorTextGreen = new Text(rgbComposite, SWT.READ_ONLY);
+		colorLabelHue = new Label(hsbComposite, SWT.NONE);
+		colorLabelHue.setText(ModelMessages.CustomColorPicker_lblHue);
+		colorTextHue = new Text(hsbComposite, SWT.READ_ONLY);
+		colorLabelSaturation = new Label(hsbComposite, SWT.NONE);
+		colorLabelSaturation.setText(ModelMessages.CustomColorPicker_lblSaturation);
+		colorTextSaturation = new Text(hsbComposite, SWT.READ_ONLY);
+		colorLabelbrightness = new Label(hsbComposite, SWT.NONE);
+		colorLabelbrightness.setText(ModelMessages.CustomColorPicker_lblBrightness);
+		colorTextbrightness = new Text(hsbComposite, SWT.READ_ONLY);
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/editor/constants/IColorChooserPreferenceConstants.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/editor/constants/IColorChooserPreferenceConstants.java
index a685d9704..9a71fde1d 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/editor/constants/IColorChooserPreferenceConstants.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/editor/constants/IColorChooserPreferenceConstants.java
@@ -13,18 +13,18 @@
 import org.eclipse.wb.internal.core.model.ModelMessages;
 
 public interface IColorChooserPreferenceConstants {
-  String PREFERENCE_NODE = "org.eclipse.wb.colorchooser.preferences";
-  String PREFERENCE_NODE_1 = "org.eclipse.wb.colorchooser.preferences.swing";
-  String P_CUSTOM_COLORS = "customColor";
-  String P_SYSTEM_COLORS = "sysColor";
-  String P_AWT_COLORS = "awtColor";
-  String P_SWING_COLORS = "swingColor";
-  String P_NAMED_COLORS = "namedColor";
-  String P_WEB_SAFE_COLORS = "webSafeColor";
-  String CUSTOM_COLORS = ModelMessages.ColorPropertyEditor_pageCustomColors;
-  String SYSTEM_COLORS = ModelMessages.ColorPropertyEditor_pageSystemColors;
-  String AWT_COLORS = ModelMessages.ColorPropertyEditor_pageAwtColors;
-  String SWING_COLORS = ModelMessages.ColorPropertyEditor_pageSwingColors;
-  String NAMED_COLORS = ModelMessages.ColorPropertyEditor_pageNamedColors;
-  String WEBSAFE_COLORS = ModelMessages.ColorPropertyEditor_pageWebColors;
+	String PREFERENCE_NODE = "org.eclipse.wb.colorchooser.preferences";
+	String PREFERENCE_NODE_1 = "org.eclipse.wb.colorchooser.preferences.swing";
+	String P_CUSTOM_COLORS = "customColor";
+	String P_SYSTEM_COLORS = "sysColor";
+	String P_AWT_COLORS = "awtColor";
+	String P_SWING_COLORS = "swingColor";
+	String P_NAMED_COLORS = "namedColor";
+	String P_WEB_SAFE_COLORS = "webSafeColor";
+	String CUSTOM_COLORS = ModelMessages.ColorPropertyEditor_pageCustomColors;
+	String SYSTEM_COLORS = ModelMessages.ColorPropertyEditor_pageSystemColors;
+	String AWT_COLORS = ModelMessages.ColorPropertyEditor_pageAwtColors;
+	String SWING_COLORS = ModelMessages.ColorPropertyEditor_pageSwingColors;
+	String NAMED_COLORS = ModelMessages.ColorPropertyEditor_pageNamedColors;
+	String WEBSAFE_COLORS = ModelMessages.ColorPropertyEditor_pageWebColors;
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/editor/constants/IEditorPreferenceConstants.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/editor/constants/IEditorPreferenceConstants.java
index c98b41854..20c2485da 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/editor/constants/IEditorPreferenceConstants.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/editor/constants/IEditorPreferenceConstants.java
@@ -7,7 +7,7 @@
  *
  * Contributors:
  *    Marcel du Preez   - initial implementation
-*********************************************************************************/
+ *********************************************************************************/
 package org.eclipse.wb.core.editor.constants;
 
 /**
@@ -15,20 +15,20 @@
  *
  */
 public interface IEditorPreferenceConstants {
-  //The node to use for the Windowbuilder basic preference
-  public static String WB_BASIC_UI_PREFERENCE_NODE =
-      "org.eclipse.wb.core.editor.constants.preferences";
-  //Windowbuilder basic is a simplified version of Windowbuilder, containing fewer UI elements.
-  public static String WB_BASIC_UI = "basicUserInterface";
-  public static String WB_CLASSPATH_ICONS = "iconsClasspaths";
-  //Sets the root object name in the Components Tree view
-  public static String WB_ROOT_OBJ_NAME = "rootObjectDisplayName";
-  /**
-   * This node is used to store the preferences of which layouts should be available in
-   * Windowbuilder Swing and SWT layout preferences both use the same node. If the preferences on
-   * this node are <code>true</true> they
-   * will be available for use as normal. If it is <code>false</code> then the specified layouts
-   * will be hidden from layout comboxes as well as the layout container in the designer palette.
-   */
-  public static String P_AVAILABLE_LAYOUTS_NODE = "layout.available";
+	//The node to use for the Windowbuilder basic preference
+	public static String WB_BASIC_UI_PREFERENCE_NODE =
+			"org.eclipse.wb.core.editor.constants.preferences";
+	//Windowbuilder basic is a simplified version of Windowbuilder, containing fewer UI elements.
+	public static String WB_BASIC_UI = "basicUserInterface";
+	public static String WB_CLASSPATH_ICONS = "iconsClasspaths";
+	//Sets the root object name in the Components Tree view
+	public static String WB_ROOT_OBJ_NAME = "rootObjectDisplayName";
+	/**
+	 * This node is used to store the preferences of which layouts should be available in
+	 * Windowbuilder Swing and SWT layout preferences both use the same node. If the preferences on
+	 * this node are <code>true</true> they
+	 * will be available for use as normal. If it is <code>false</code> then the specified layouts
+	 * will be hidden from layout comboxes as well as the layout container in the designer palette.
+	 */
+	public static String P_AVAILABLE_LAYOUTS_NODE = "layout.available";
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/editor/errors/IExceptionRewriter.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/editor/errors/IExceptionRewriter.java
index ac9f429a2..70ff8f949 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/editor/errors/IExceptionRewriter.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/editor/errors/IExceptionRewriter.java
@@ -20,8 +20,8 @@
  * @coverage core.editor.errors
  */
 public interface IExceptionRewriter {
-  /**
-   * @return the same or new {@link Throwable}.
-   */
-  Throwable rewrite(Throwable e);
+	/**
+	 * @return the same or new {@link Throwable}.
+	 */
+	Throwable rewrite(Throwable e);
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/editor/structure/property/PropertyCategoryProviderProvider.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/editor/structure/property/PropertyCategoryProviderProvider.java
index 10cf5f9fe..1c03d3e58 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/editor/structure/property/PropertyCategoryProviderProvider.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/editor/structure/property/PropertyCategoryProviderProvider.java
@@ -22,9 +22,9 @@
  * @coverage core.editor.structure
  */
 public interface PropertyCategoryProviderProvider {
-  /**
-   * @return the {@link PropertyCategoryProvider} for properties of given {@link ObjectInfo}-s, may
-   *         be <code>null</code> so default provider will be used.
-   */
-  PropertyCategoryProvider get(List<ObjectInfo> objects);
+	/**
+	 * @return the {@link PropertyCategoryProvider} for properties of given {@link ObjectInfo}-s, may
+	 *         be <code>null</code> so default provider will be used.
+	 */
+	PropertyCategoryProvider get(List<ObjectInfo> objects);
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/editor/structure/property/PropertyListProcessor.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/editor/structure/property/PropertyListProcessor.java
index 3955dfcd3..505184f43 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/editor/structure/property/PropertyListProcessor.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/editor/structure/property/PropertyListProcessor.java
@@ -24,8 +24,8 @@
  * @coverage core.editor.structure
  */
 public interface PropertyListProcessor {
-  /**
-   * Processes given {@link Property}-s or {@link ObjectInfo}-s.
-   */
-  void process(List<ObjectInfo> objects, List<Property> properties);
+	/**
+	 * Processes given {@link Property}-s or {@link ObjectInfo}-s.
+	 */
+	void process(List<ObjectInfo> objects, List<Property> properties);
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/IEditPartConfigurator.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/IEditPartConfigurator.java
index b250f71a8..e68242ff1 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/IEditPartConfigurator.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/IEditPartConfigurator.java
@@ -30,8 +30,8 @@
  * @coverage core.gef
  */
 public interface IEditPartConfigurator {
-  /**
-   * Configures given {@link EditPart}.
-   */
-  void configure(EditPart context, EditPart editPart);
+	/**
+	 * Configures given {@link EditPart}.
+	 */
+	void configure(EditPart context, EditPart editPart);
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/MatchingEditPartFactory.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/MatchingEditPartFactory.java
index eb6629e65..04aa4575c 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/MatchingEditPartFactory.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/MatchingEditPartFactory.java
@@ -30,143 +30,143 @@
  * @coverage core.gef
  */
 public final class MatchingEditPartFactory implements IEditPartFactory {
-  private final List<String> m_modelPackages;
-  private final List<String> m_partPackages;
+	private final List<String> m_modelPackages;
+	private final List<String> m_partPackages;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @param modelPackages
-   *          the {@link List} of packages that can have models.
-   * @param partsPackages
-   *          the {@link List} of package that can have {@link EditPart}'s, corresponding to the
-   *          <code>modelPackages</code>.
-   */
-  public MatchingEditPartFactory(List<String> modelPackages, List<String> partPackages) {
-    Assert.equals(modelPackages.size(), partPackages.size());
-    m_modelPackages = modelPackages;
-    m_partPackages = partPackages;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @param modelPackages
+	 *          the {@link List} of packages that can have models.
+	 * @param partsPackages
+	 *          the {@link List} of package that can have {@link EditPart}'s, corresponding to the
+	 *          <code>modelPackages</code>.
+	 */
+	public MatchingEditPartFactory(List<String> modelPackages, List<String> partPackages) {
+		Assert.equals(modelPackages.size(), partPackages.size());
+		m_modelPackages = modelPackages;
+		m_partPackages = partPackages;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IEditPartFactory
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public EditPart createEditPart(EditPart context, Object model) {
-    Class<?> modelClass = model.getClass();
-    for (; modelClass != null; modelClass = modelClass.getSuperclass()) {
-      EditPart editPart = createEditPart(model, modelClass);
-      if (editPart != null) {
-        return editPart;
-      }
-    }
-    // not found
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IEditPartFactory
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public EditPart createEditPart(EditPart context, Object model) {
+		Class<?> modelClass = model.getClass();
+		for (; modelClass != null; modelClass = modelClass.getSuperclass()) {
+			EditPart editPart = createEditPart(model, modelClass);
+			if (editPart != null) {
+				return editPart;
+			}
+		}
+		// not found
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Internal
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @param model
-   *          the model to get {@link EditPart}.
-   * @param modelClass
-   *          the current {@link Class} of model, of its super-class.
-   *
-   * @return the {@link EditPart} corresponding to <code>modelClass</code>, may be <code>null</code>
-   *         , if no match found.
-   */
-  private EditPart createEditPart(Object model, Class<?> modelClass) {
-    // "Info" suffix
-    {
-      EditPart editPart = createEditPart(model, modelClass, "Info");
-      if (editPart != null) {
-        return editPart;
-      }
-    }
-    // no suffix
-    {
-      EditPart editPart = createEditPart(model, modelClass, "");
-      if (editPart != null) {
-        return editPart;
-      }
-    }
-    // special support for inner classes
-    {
-      String modelClassName = modelClass.getName();
-      if (modelClassName.contains("$")) {
-        modelClassName = StringUtils.remove(modelClassName, "Info");
-        modelClassName = StringUtils.remove(modelClassName, "$");
-        EditPart editPart = createEditPart(model, modelClass, modelClassName, "");
-        if (editPart != null) {
-          return editPart;
-        }
-      }
-    }
-    // not found
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Internal
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @param model
+	 *          the model to get {@link EditPart}.
+	 * @param modelClass
+	 *          the current {@link Class} of model, of its super-class.
+	 *
+	 * @return the {@link EditPart} corresponding to <code>modelClass</code>, may be <code>null</code>
+	 *         , if no match found.
+	 */
+	private EditPart createEditPart(Object model, Class<?> modelClass) {
+		// "Info" suffix
+		{
+			EditPart editPart = createEditPart(model, modelClass, "Info");
+			if (editPart != null) {
+				return editPart;
+			}
+		}
+		// no suffix
+		{
+			EditPart editPart = createEditPart(model, modelClass, "");
+			if (editPart != null) {
+				return editPart;
+			}
+		}
+		// special support for inner classes
+		{
+			String modelClassName = modelClass.getName();
+			if (modelClassName.contains("$")) {
+				modelClassName = StringUtils.remove(modelClassName, "Info");
+				modelClassName = StringUtils.remove(modelClassName, "$");
+				EditPart editPart = createEditPart(model, modelClass, modelClassName, "");
+				if (editPart != null) {
+					return editPart;
+				}
+			}
+		}
+		// not found
+		return null;
+	}
 
-  /**
-   * Implementation for {@link #createEditPart(Object, Class)}, with single model suffix.
-   */
-  private EditPart createEditPart(Object model, Class<?> modelClass, String modelSuffix) {
-    String modelClassName = modelClass.getName();
-    return createEditPart(model, modelClass, modelClassName, modelSuffix);
-  }
+	/**
+	 * Implementation for {@link #createEditPart(Object, Class)}, with single model suffix.
+	 */
+	private EditPart createEditPart(Object model, Class<?> modelClass, String modelSuffix) {
+		String modelClassName = modelClass.getName();
+		return createEditPart(model, modelClass, modelClassName, modelSuffix);
+	}
 
-  /**
-   * Implementation for {@link #createEditPart(Object, Class)}, with single model suffix.
-   */
-  private EditPart createEditPart(Object model,
-      Class<?> modelClass,
-      String modelClassName,
-      String modelSuffix) {
-    // check each model/part packages pair
-    for (int i = 0; i < m_modelPackages.size(); i++) {
-      String modelPackage = m_modelPackages.get(i);
-      String partPackage = m_partPackages.get(i);
-      if (modelClassName.startsWith(modelPackage) && modelClassName.endsWith(modelSuffix)) {
-        // prepare name of component, strip model package and "Info" suffix
-        String componentName = modelClassName;
-        componentName = componentName.substring(modelPackage.length());
-        componentName = StringUtils.chomp(componentName, modelSuffix);
-        // create corresponding EditPart, use "EditPart" prefix
-        {
-          String partClassName = partPackage + componentName + "EditPart";
-          EditPart editPart = createEditPart0(model, modelClass, partClassName);
-          if (editPart != null) {
-            return editPart;
-          }
-        }
-      }
-    }
-    // not found
-    return null;
-  }
+	/**
+	 * Implementation for {@link #createEditPart(Object, Class)}, with single model suffix.
+	 */
+	private EditPart createEditPart(Object model,
+			Class<?> modelClass,
+			String modelClassName,
+			String modelSuffix) {
+		// check each model/part packages pair
+		for (int i = 0; i < m_modelPackages.size(); i++) {
+			String modelPackage = m_modelPackages.get(i);
+			String partPackage = m_partPackages.get(i);
+			if (modelClassName.startsWith(modelPackage) && modelClassName.endsWith(modelSuffix)) {
+				// prepare name of component, strip model package and "Info" suffix
+				String componentName = modelClassName;
+				componentName = componentName.substring(modelPackage.length());
+				componentName = StringUtils.chomp(componentName, modelSuffix);
+				// create corresponding EditPart, use "EditPart" prefix
+				{
+					String partClassName = partPackage + componentName + "EditPart";
+					EditPart editPart = createEditPart0(model, modelClass, partClassName);
+					if (editPart != null) {
+						return editPart;
+					}
+				}
+			}
+		}
+		// not found
+		return null;
+	}
 
-  private static EditPart createEditPart0(Object model, Class<?> modelClass, String partClassName) {
-    try {
-      ClassLoader classLoader = modelClass.getClassLoader();
-      Class<?> partClass = classLoader.loadClass(partClassName);
-      // try all constructors
-      for (Constructor<?> constructor : partClass.getConstructors()) {
-        try {
-          return (EditPart) constructor.newInstance(model);
-        } catch (Throwable e) {
-          // ignore
-        }
-      }
-    } catch (Throwable e) {
-      // ignore
-    }
-    return null;
-  }
+	private static EditPart createEditPart0(Object model, Class<?> modelClass, String partClassName) {
+		try {
+			ClassLoader classLoader = modelClass.getClassLoader();
+			Class<?> partClass = classLoader.loadClass(partClassName);
+			// try all constructors
+			for (Constructor<?> constructor : partClass.getConstructors()) {
+				try {
+					return (EditPart) constructor.newInstance(model);
+				} catch (Throwable e) {
+					// ignore
+				}
+			}
+		} catch (Throwable e) {
+			// ignore
+		}
+		return null;
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/command/CompoundEditCommand.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/command/CompoundEditCommand.java
index 1d1b2479d..85030427b 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/command/CompoundEditCommand.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/command/CompoundEditCommand.java
@@ -23,30 +23,30 @@
  * @coverage core.gef
  */
 public final class CompoundEditCommand extends CompoundCommand {
-  private final ObjectInfo m_object;
+	private final ObjectInfo m_object;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CompoundEditCommand(ObjectInfo object) {
-    Assert.isNotNull(object);
-    m_object = object;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CompoundEditCommand(ObjectInfo object) {
+		Assert.isNotNull(object);
+		m_object = object;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Command
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final void execute() throws Exception {
-    ExecutionUtils.run(m_object, new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        CompoundEditCommand.super.execute();
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Command
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final void execute() throws Exception {
+		ExecutionUtils.run(m_object, new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				CompoundEditCommand.super.execute();
+			}
+		});
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/command/EditCommand.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/command/EditCommand.java
index 4f5a21f2c..86a9c1157 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/command/EditCommand.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/command/EditCommand.java
@@ -24,44 +24,44 @@
  * @coverage core.gef
  */
 public abstract class EditCommand extends Command {
-  private final ObjectInfo m_object;
+	private final ObjectInfo m_object;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public EditCommand(ObjectInfo object) {
-    Assert.isNotNull(object);
-    m_object = object;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public EditCommand(ObjectInfo object) {
+		Assert.isNotNull(object);
+		m_object = object;
+	}
 
-  public EditCommand(IObjectInfo object) {
-    this(object.getUnderlyingModel());
-  }
+	public EditCommand(IObjectInfo object) {
+		this(object.getUnderlyingModel());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Command
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final void execute() throws Exception {
-    ExecutionUtils.run(m_object, new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        executeEdit();
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Command
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final void execute() throws Exception {
+		ExecutionUtils.run(m_object, new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				executeEdit();
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // EditCommand
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Does some editing in start/commit/endEdit cycle.
-   */
-  protected abstract void executeEdit() throws Exception;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// EditCommand
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Does some editing in start/commit/endEdit cycle.
+	 */
+	protected abstract void executeEdit() throws Exception;
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/figure/AbstractPositionFeedback.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/figure/AbstractPositionFeedback.java
index e3125446b..49a3ab47e 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/figure/AbstractPositionFeedback.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/figure/AbstractPositionFeedback.java
@@ -25,93 +25,93 @@
  * @coverage core.gef.figure
  */
 public abstract class AbstractPositionFeedback {
-  private final Layer m_layer;
-  private final String m_hint;
-  protected final Figure m_figure;
+	private final Layer m_layer;
+	private final String m_hint;
+	protected final Figure m_figure;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractPositionFeedback(Layer layer, Rectangle bounds, String hint) {
-    m_layer = layer;
-    m_hint = hint;
-    {
-      m_figure = createFigure();
-      m_layer.add(m_figure);
-      m_figure.setBounds(bounds);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractPositionFeedback(Layer layer, Rectangle bounds, String hint) {
+		m_layer = layer;
+		m_hint = hint;
+		{
+			m_figure = createFigure();
+			m_layer.add(m_figure);
+			m_figure.setBounds(bounds);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Figure
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Updates state of feedback if it contains/not mouse cursor.
-   */
-  public abstract void update(boolean contains);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Figure
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Updates state of feedback if it contains/not mouse cursor.
+	 */
+	public abstract void update(boolean contains);
 
-  /**
-   * @return the {@link Figure} for this feedback.
-   */
-  protected abstract Figure createFigure();
+	/**
+	 * @return the {@link Figure} for this feedback.
+	 */
+	protected abstract Figure createFigure();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Return some hint that describes this position feedback.
-   */
-  public final String getHint() {
-    return m_hint;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Return some hint that describes this position feedback.
+	 */
+	public final String getHint() {
+		return m_hint;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Updates state of feedback with mouse cursor in given location.
-   *
-   * @return <code>true</code> feedback contains given location
-   */
-  public final boolean update(Point location) {
-    boolean contains = m_figure.getBounds().contains(location);
-    update(contains);
-    return contains;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Updates state of feedback with mouse cursor in given location.
+	 *
+	 * @return <code>true</code> feedback contains given location
+	 */
+	public final boolean update(Point location) {
+		boolean contains = m_figure.getBounds().contains(location);
+		update(contains);
+		return contains;
+	}
 
-  /**
-   * Removes feedback.
-   */
-  public final void remove() {
-    m_layer.remove(m_figure);
-  }
+	/**
+	 * Removes feedback.
+	 */
+	public final void remove() {
+		m_layer.remove(m_figure);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Data
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Object m_data;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Data
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Object m_data;
 
-  /**
-   * @return the application defined data associated with this object.
-   */
-  public final Object getData() {
-    return m_data;
-  }
+	/**
+	 * @return the application defined data associated with this object.
+	 */
+	public final Object getData() {
+		return m_data;
+	}
 
-  /**
-   * Sets the application defined data associated with this object.
-   */
-  public final void setData(Object data) {
-    m_data = data;
-  }
+	/**
+	 * Sets the application defined data associated with this object.
+	 */
+	public final void setData(Object data) {
+		m_data = data;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/figure/GhostPositionFeedback.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/figure/GhostPositionFeedback.java
index 913ed0f92..c47252c8d 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/figure/GhostPositionFeedback.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/figure/GhostPositionFeedback.java
@@ -25,38 +25,38 @@
  * @coverage core.gef.figure
  */
 public final class GhostPositionFeedback extends AbstractPositionFeedback {
-  private static final Color m_fillColor = new Color(null, 0, 255, 0);
-  private static final Color m_activeColor = new Color(null, 255, 255, 0);
-  private static final Color m_borderColor = new Color(null, 0, 192, 0);
+	private static final Color m_fillColor = new Color(null, 0, 255, 0);
+	private static final Color m_activeColor = new Color(null, 255, 255, 0);
+	private static final Color m_borderColor = new Color(null, 0, 192, 0);
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public GhostPositionFeedback(Layer layer, Rectangle bounds, String hint) {
-    super(layer, bounds, hint);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public GhostPositionFeedback(Layer layer, Rectangle bounds, String hint) {
+		super(layer, bounds, hint);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Figure methods
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Figure createFigure() {
-    Figure figure = new SemiTransparentFigure(50);
-    figure.setBackground(m_fillColor);
-    figure.setBorder(new LineBorder(m_borderColor));
-    return figure;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Figure methods
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Figure createFigure() {
+		Figure figure = new SemiTransparentFigure(50);
+		figure.setBackground(m_fillColor);
+		figure.setBorder(new LineBorder(m_borderColor));
+		return figure;
+	}
 
-  @Override
-  public void update(boolean contains) {
-    if (contains) {
-      m_figure.setBackground(m_activeColor);
-    } else {
-      m_figure.setBackground(m_fillColor);
-    }
-  }
+	@Override
+	public void update(boolean contains) {
+		if (contains) {
+			m_figure.setBackground(m_activeColor);
+		} else {
+			m_figure.setBackground(m_fillColor);
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/figure/OutlineImageFigure.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/figure/OutlineImageFigure.java
index 92a1d5a59..5880ec3ac 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/figure/OutlineImageFigure.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/figure/OutlineImageFigure.java
@@ -24,36 +24,36 @@
  * @coverage core.gef.policy
  */
 public final class OutlineImageFigure extends Figure {
-  private final Image m_image;
+	private final Image m_image;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public OutlineImageFigure() {
-    this(null);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public OutlineImageFigure() {
+		this(null);
+	}
 
-  public OutlineImageFigure(Image image) {
-    this(image, IColorConstants.orange);
-  }
+	public OutlineImageFigure(Image image) {
+		this(image, IColorConstants.orange);
+	}
 
-  public OutlineImageFigure(Image image, Color borderColor) {
-    m_image = image;
-    setForeground(borderColor);
-  }
+	public OutlineImageFigure(Image image, Color borderColor) {
+		m_image = image;
+		setForeground(borderColor);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Paint
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void paintClientArea(Graphics graphics) {
-    if (m_image != null) {
-      graphics.drawImage(m_image, 0, 0);
-    }
-    graphics.drawRectangle(getClientArea().getResized(-1, -1));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Paint
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void paintClientArea(Graphics graphics) {
+		if (m_image != null) {
+			graphics.drawImage(m_image, 0, 0);
+		}
+		graphics.drawRectangle(getClientArea().getResized(-1, -1));
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/figure/SolidPositionFeedback.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/figure/SolidPositionFeedback.java
index 1ab0cf551..92666c22a 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/figure/SolidPositionFeedback.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/figure/SolidPositionFeedback.java
@@ -25,63 +25,63 @@
  * @coverage core.gef.figure
  */
 public final class SolidPositionFeedback extends AbstractPositionFeedback {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SolidPositionFeedback(Layer layer, Rectangle bounds, String hint) {
-    super(layer, bounds, hint);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SolidPositionFeedback(Layer layer, Rectangle bounds, String hint) {
+		super(layer, bounds, hint);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Figure methods
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Figure createFigure() {
-    Figure figure = new Figure();
-    figure.setOpaque(true);
-    figure.setBorder(new LineBorder(getBorderColor()));
-    return figure;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Figure methods
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Figure createFigure() {
+		Figure figure = new Figure();
+		figure.setOpaque(true);
+		figure.setBorder(new LineBorder(getBorderColor()));
+		return figure;
+	}
 
-  @Override
-  public void update(boolean contains) {
-    if (contains) {
-      m_figure.setBackground(getActiveColor());
-    } else {
-      m_figure.setBackground(getInactiveColor());
-    }
-  }
+	@Override
+	public void update(boolean contains) {
+		if (contains) {
+			m_figure.setBackground(getActiveColor());
+		} else {
+			m_figure.setBackground(getInactiveColor());
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Colors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the border {@link Color}.
-   */
-  private Color getBorderColor() {
-    return IColorConstants.darkGreen;
-    //return IColorConstants.orange;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Colors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the border {@link Color}.
+	 */
+	private Color getBorderColor() {
+		return IColorConstants.darkGreen;
+		//return IColorConstants.orange;
+	}
 
-  /**
-   * @return the inactivate {@link Color}.
-   */
-  private Color getInactiveColor() {
-    //return SWTResourceManager.getColor(0x64, 0x95, 0xED);
-    return IColorConstants.lightGreen;
-  }
+	/**
+	 * @return the inactivate {@link Color}.
+	 */
+	private Color getInactiveColor() {
+		//return SWTResourceManager.getColor(0x64, 0x95, 0xED);
+		return IColorConstants.lightGreen;
+	}
 
-  /**
-   * @return the activate {@link Color}.
-   */
-  private Color getActiveColor() {
-    //return SWTResourceManager.getColor(0x1E, 0xB0, 0xFF);
-    return IColorConstants.yellow;
-  }
+	/**
+	 * @return the activate {@link Color}.
+	 */
+	private Color getActiveColor() {
+		//return SWTResourceManager.getColor(0x1E, 0xB0, 0xFF);
+		return IColorConstants.yellow;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/figure/TextFeedback.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/figure/TextFeedback.java
index e0b1742ae..68ecfe4ec 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/figure/TextFeedback.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/figure/TextFeedback.java
@@ -31,126 +31,126 @@
  * @coverage core.gef.figure
  */
 public final class TextFeedback {
-  private final Layer m_layer;
-  private final Label m_label;
-  private Dimension m_size;
+	private final Layer m_layer;
+	private final Label m_label;
+	private Dimension m_size;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public TextFeedback(Layer layer, boolean isHorizontal) {
-    m_layer = layer;
-    // create label
-    m_label = isHorizontal ? new Label() : new VerticalLabel();
-    m_label.setOpaque(true);
-    m_label.setBackground(IColorConstants.tooltipBackground);
-    m_label.setForeground(IColorConstants.tooltipForeground);
-    {
-      Border outer = new LineBorder(IColorConstants.tooltipForeground);
-      Border inner = new MarginBorder(2);
-      m_label.setBorder(new CompoundBorder(outer, inner));
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public TextFeedback(Layer layer, boolean isHorizontal) {
+		m_layer = layer;
+		// create label
+		m_label = isHorizontal ? new Label() : new VerticalLabel();
+		m_label.setOpaque(true);
+		m_label.setBackground(IColorConstants.tooltipBackground);
+		m_label.setForeground(IColorConstants.tooltipForeground);
+		{
+			Border outer = new LineBorder(IColorConstants.tooltipForeground);
+			Border inner = new MarginBorder(2);
+			m_label.setBorder(new CompoundBorder(outer, inner));
+		}
+	}
 
-  public TextFeedback(Layer layer) {
-    this(layer, true);
-  }
+	public TextFeedback(Layer layer) {
+		this(layer, true);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Life cycle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds feedback.
-   */
-  public void add() {
-    m_layer.add(m_label);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Life cycle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds feedback.
+	 */
+	public void add() {
+		m_layer.add(m_label);
+	}
 
-  /**
-   * Removes feedback.
-   */
-  public void remove() {
-    m_layer.remove(m_label);
-  }
+	/**
+	 * Removes feedback.
+	 */
+	public void remove() {
+		m_layer.remove(m_label);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the size of feedback.
-   */
-  public Dimension getSize() {
-    return m_label.getSize().getCopy();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the size of feedback.
+	 */
+	public Dimension getSize() {
+		return m_label.getSize().getCopy();
+	}
 
-  /**
-   * Sets the feedback text.
-   */
-  public void setText(String text) {
-    m_label.setText(text);
-    m_label.setSize(m_label.getPreferredSize());
-    m_size = m_label.getSize();
-  }
+	/**
+	 * Sets the feedback text.
+	 */
+	public void setText(String text) {
+		m_label.setText(text);
+		m_label.setSize(m_label.getPreferredSize());
+		m_size = m_label.getSize();
+	}
 
-  /**
-   * Sets the background of feedback.
-   */
-  public void setBackground(Color color) {
-    m_label.setBackground(color);
-  }
+	/**
+	 * Sets the background of feedback.
+	 */
+	public void setBackground(Color color) {
+		m_label.setBackground(color);
+	}
 
-  /**
-   * Sets the location of feedback.
-   */
-  public void setLocation(Point location) {
-    m_label.setLocation(location);
-  }
+	/**
+	 * Sets the location of feedback.
+	 */
+	public void setLocation(Point location) {
+		m_label.setLocation(location);
+	}
 
-  /**
-   * Set user defined data.
-   */
-  public void setData(Object data) {
-    m_label.setData(data);
-  }
+	/**
+	 * Set user defined data.
+	 */
+	public void setData(Object data) {
+		m_label.setData(data);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Location
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Moves feedback to the location at X centered in range (x, x + w) and at Y above given 'y'
-   * coordinate.
-   */
-  public void centerHorizontallyAbove(Rectangle target, int shift) {
-    int x = target.x + (target.width - m_size.width) / 2;
-    int y = target.y - m_size.height - shift;
-    y = Math.max(y, 1);
-    m_label.setLocation(x, y);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Location
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Moves feedback to the location at X centered in range (x, x + w) and at Y above given 'y'
+	 * coordinate.
+	 */
+	public void centerHorizontallyAbove(Rectangle target, int shift) {
+		int x = target.x + (target.width - m_size.width) / 2;
+		int y = target.y - m_size.height - shift;
+		y = Math.max(y, 1);
+		m_label.setLocation(x, y);
+	}
 
-  /**
-   * Moves feedback to the location at X to the right from given target {@link Rectangle} and at
-   * bottom side of feedback at bottom side of target {@link Rectangle}.
-   */
-  public void moveRightOuter(Rectangle target, int shift) {
-    int x = target.right() + shift;
-    int y = target.bottom() - m_size.height;
-    m_label.setLocation(x, y);
-  }
+	/**
+	 * Moves feedback to the location at X to the right from given target {@link Rectangle} and at
+	 * bottom side of feedback at bottom side of target {@link Rectangle}.
+	 */
+	public void moveRightOuter(Rectangle target, int shift) {
+		int x = target.right() + shift;
+		int y = target.bottom() - m_size.height;
+		m_label.setLocation(x, y);
+	}
 
-  /**
-   * Moves feedback to the location at (locationX - textWidth / 2, locationY - textHeight / 2).
-   */
-  public void moveTopLeftCenter(Point location) {
-    int x = location.x - m_size.width / 2;
-    int y = location.y - m_size.height / 2;
-    m_label.setLocation(x, y);
-  }
+	/**
+	 * Moves feedback to the location at (locationX - textWidth / 2, locationY - textHeight / 2).
+	 */
+	public void moveTopLeftCenter(Point location) {
+		int x = location.x - m_size.width / 2;
+		int y = location.y - m_size.height / 2;
+		m_label.setLocation(x, y);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/header/AbstractHeaderLayoutEditPolicy.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/header/AbstractHeaderLayoutEditPolicy.java
index 0465f1ccf..eb790fa76 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/header/AbstractHeaderLayoutEditPolicy.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/header/AbstractHeaderLayoutEditPolicy.java
@@ -23,43 +23,43 @@
  * @coverage core.gef.header
  */
 public abstract class AbstractHeaderLayoutEditPolicy extends LayoutEditPolicy {
-  private final LayoutEditPolicy m_mainPolicy;
+	private final LayoutEditPolicy m_mainPolicy;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractHeaderLayoutEditPolicy(LayoutEditPolicy mainPolicy) {
-    m_mainPolicy = mainPolicy;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractHeaderLayoutEditPolicy(LayoutEditPolicy mainPolicy) {
+		m_mainPolicy = mainPolicy;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Target
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected boolean isRequestCondition(Request request) {
-    return request.getType() == Request.REQ_MOVE;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Target
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected boolean isRequestCondition(Request request) {
+		return request.getType() == Request.REQ_MOVE;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Feedback utilities
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link Layer} from main {@link IEditPartViewer} with given id.
-   */
-  protected final Layer getMainLayer(String layerId) {
-    return getMainViewer().getLayer(layerId);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Feedback utilities
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link Layer} from main {@link IEditPartViewer} with given id.
+	 */
+	protected final Layer getMainLayer(String layerId) {
+		return getMainViewer().getLayer(layerId);
+	}
 
-  /**
-   * @return the main {@link IEditPartViewer}.
-   */
-  private IEditPartViewer getMainViewer() {
-    return m_mainPolicy.getHost().getViewer();
-  }
+	/**
+	 * @return the main {@link IEditPartViewer}.
+	 */
+	private IEditPartViewer getMainViewer() {
+		return m_mainPolicy.getHost().getViewer();
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/header/AbstractHeaderSelectionEditPolicy.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/header/AbstractHeaderSelectionEditPolicy.java
index b4b9cb3d5..24e64127b 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/header/AbstractHeaderSelectionEditPolicy.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/header/AbstractHeaderSelectionEditPolicy.java
@@ -23,33 +23,33 @@
  * @coverage core.gef.header
  */
 public abstract class AbstractHeaderSelectionEditPolicy extends SelectionEditPolicy {
-  private final LayoutEditPolicy m_mainPolicy;
+	private final LayoutEditPolicy m_mainPolicy;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractHeaderSelectionEditPolicy(LayoutEditPolicy mainPolicy) {
-    m_mainPolicy = mainPolicy;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractHeaderSelectionEditPolicy(LayoutEditPolicy mainPolicy) {
+		m_mainPolicy = mainPolicy;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Feedback utilities
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link Layer} from main {@link IEditPartViewer} with given id.
-   */
-  protected final Layer getMainLayer(String layerId) {
-    return getMainViewer().getLayer(layerId);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Feedback utilities
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link Layer} from main {@link IEditPartViewer} with given id.
+	 */
+	protected final Layer getMainLayer(String layerId) {
+		return getMainViewer().getLayer(layerId);
+	}
 
-  /**
-   * @return the main {@link IEditPartViewer}.
-   */
-  private IEditPartViewer getMainViewer() {
-    return m_mainPolicy.getHost().getViewer();
-  }
+	/**
+	 * @return the main {@link IEditPartViewer}.
+	 */
+	private IEditPartViewer getMainViewer() {
+		return m_mainPolicy.getHost().getViewer();
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/header/Headers.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/header/Headers.java
index a54dc1f72..81b60541a 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/header/Headers.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/header/Headers.java
@@ -22,12 +22,12 @@
  * @coverage core.gef.header
  */
 public final class Headers {
-  /**
-   * {@link Color} for header background.
-   */
-  public static final Color COLOR_HEADER = getColorHeader();
+	/**
+	 * {@link Color} for header background.
+	 */
+	public static final Color COLOR_HEADER = getColorHeader();
 
-  private static Color getColorHeader() {
-    return DrawUtils.getShiftedColor(IColorConstants.white, -16);
-  }
+	private static Color getColorHeader() {
+		return DrawUtils.getShiftedColor(IColorConstants.white, -16);
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/header/IHeaderMenuProvider.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/header/IHeaderMenuProvider.java
index 3544f2d17..fdb01f305 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/header/IHeaderMenuProvider.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/header/IHeaderMenuProvider.java
@@ -19,8 +19,8 @@
  * @coverage core.gef.header
  */
 public interface IHeaderMenuProvider {
-  /**
-   * Adds menu items into given {@link IMenuManager}.
-   */
-  void buildContextMenu(IMenuManager manager);
+	/**
+	 * Adds menu items into given {@link IMenuManager}.
+	 */
+	void buildContextMenu(IMenuManager manager);
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/header/IHeadersProvider.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/header/IHeadersProvider.java
index ee4fcec91..582f7f5c0 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/header/IHeadersProvider.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/header/IHeadersProvider.java
@@ -25,28 +25,28 @@
  * @coverage core.gef.header
  */
 public interface IHeadersProvider {
-  /**
-   * @return the {@link LayoutEditPolicy} for headers container.
-   */
-  LayoutEditPolicy getContainerLayoutPolicy(boolean horizontal);
-
-  /**
-   * @return the {@link List} of header models.
-   */
-  List<?> getHeaders(boolean horizontal);
-
-  /**
-   * @return the {@link EditPart} for given header model.
-   */
-  EditPart createHeaderEditPart(boolean horizontal, Object model);
-
-  /**
-   * Adds menu items into given {@link IMenuManager}.
-   */
-  void buildContextMenu(IMenuManager manager, boolean horizontal);
-
-  /**
-   * Invoked on double click on headers container.
-   */
-  void handleDoubleClick(boolean horizontal);
+	/**
+	 * @return the {@link LayoutEditPolicy} for headers container.
+	 */
+	LayoutEditPolicy getContainerLayoutPolicy(boolean horizontal);
+
+	/**
+	 * @return the {@link List} of header models.
+	 */
+	List<?> getHeaders(boolean horizontal);
+
+	/**
+	 * @return the {@link EditPart} for given header model.
+	 */
+	EditPart createHeaderEditPart(boolean horizontal, Object model);
+
+	/**
+	 * Adds menu items into given {@link IMenuManager}.
+	 */
+	void buildContextMenu(IMenuManager manager, boolean horizontal);
+
+	/**
+	 * Invoked on double click on headers container.
+	 */
+	void handleDoubleClick(boolean horizontal);
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/part/ComponentIconEditPart.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/part/ComponentIconEditPart.java
index 2e3f181a8..db0b6e382 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/part/ComponentIconEditPart.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/part/ComponentIconEditPart.java
@@ -29,59 +29,59 @@
  * @coverage core.gef
  */
 public abstract class ComponentIconEditPart extends GraphicalEditPart {
-  private final Object m_component;
+	private final Object m_component;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ComponentIconEditPart(Object component) {
-    setModel(component);
-    m_component = component;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ComponentIconEditPart(Object component) {
+		setModel(component);
+		m_component = component;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Figure
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Figure createFigure() {
-    return new Figure() {
-      @Override
-      protected void paintClientArea(Graphics graphics) {
-        Image image = getIcon();
-        graphics.drawImage(image, 0, 0);
-      }
-    };
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Figure
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Figure createFigure() {
+		return new Figure() {
+			@Override
+			protected void paintClientArea(Graphics graphics) {
+				Image image = getIcon();
+				graphics.drawImage(image, 0, 0);
+			}
+		};
+	}
 
-  @Override
-  protected void refreshVisuals() {
-    org.eclipse.swt.graphics.Rectangle iconBounds = getIcon().getBounds();
-    Rectangle bounds = getFigureBounds(iconBounds.width, iconBounds.height);
-    getFigure().setBounds(bounds);
-  }
+	@Override
+	protected void refreshVisuals() {
+		org.eclipse.swt.graphics.Rectangle iconBounds = getIcon().getBounds();
+		Rectangle bounds = getFigureBounds(iconBounds.width, iconBounds.height);
+		getFigure().setBounds(bounds);
+	}
 
-  private Image getIcon() {
-    IComponentDescription description =
-        GlobalState.getDescriptionHelper().getDescription(m_component);
-    return description.getIcon();
-  }
+	private Image getIcon() {
+		IComponentDescription description =
+				GlobalState.getDescriptionHelper().getDescription(m_component);
+		return description.getIcon();
+	}
 
-  /**
-   * @return the bounds of {@link Figure} based on size of icon.
-   */
-  protected abstract Rectangle getFigureBounds(int width, int height);
+	/**
+	 * @return the bounds of {@link Figure} based on size of icon.
+	 */
+	protected abstract Rectangle getFigureBounds(int width, int height);
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Policies
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createEditPolicies() {
-    installEditPolicy(EditPolicy.SELECTION_ROLE, new NonResizableSelectionEditPolicy());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Policies
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createEditPolicies() {
+		installEditPolicy(EditPolicy.SELECTION_ROLE, new NonResizableSelectionEditPolicy());
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/part/menu/IMenuObjectEditPart.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/part/menu/IMenuObjectEditPart.java
index 9f7064932..ccc31cb7c 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/part/menu/IMenuObjectEditPart.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/part/menu/IMenuObjectEditPart.java
@@ -20,8 +20,8 @@
  * @coverage core.gef.menu
  */
 public interface IMenuObjectEditPart {
-  /**
-   * @return the {@link IMenuObjectInfo} of this model.
-   */
-  IMenuObjectInfo getMenuModel();
+	/**
+	 * @return the {@link IMenuObjectInfo} of this model.
+	 */
+	IMenuObjectInfo getMenuModel();
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/part/menu/MenuEditPartFactory.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/part/menu/MenuEditPartFactory.java
index 5b4e13d82..d463e519b 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/part/menu/MenuEditPartFactory.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/part/menu/MenuEditPartFactory.java
@@ -26,33 +26,33 @@
  * @coverage core.gef
  */
 public final class MenuEditPartFactory {
-  /**
-   * @return the {@link EditPart} for {@link IMenuInfo}.
-   */
-  public static EditPart createPopupMenu(Object toolkitModel, IMenuPopupInfo popup) {
-    return new MenuPopupEditPart(toolkitModel, popup);
-  }
+	/**
+	 * @return the {@link EditPart} for {@link IMenuInfo}.
+	 */
+	public static EditPart createPopupMenu(Object toolkitModel, IMenuPopupInfo popup) {
+		return new MenuPopupEditPart(toolkitModel, popup);
+	}
 
-  /**
-   * @return the {@link EditPart} for {@link IMenuInfo}.
-   */
-  public static EditPart createMenu(Object toolkitModel, IMenuInfo menu) {
-    return new MenuEditPart(toolkitModel, menu);
-  }
+	/**
+	 * @return the {@link EditPart} for {@link IMenuInfo}.
+	 */
+	public static EditPart createMenu(Object toolkitModel, IMenuInfo menu) {
+		return new MenuEditPart(toolkitModel, menu);
+	}
 
-  /**
-   * @return the {@link EditPart} for {@link IMenuInfo}, used on Mac.
-   */
-  public static EditPart createMenuMac(Object toolkitModel, IMenuInfo menu) {
-    return new MacMenuEditPart(toolkitModel, menu);
-  }
+	/**
+	 * @return the {@link EditPart} for {@link IMenuInfo}, used on Mac.
+	 */
+	public static EditPart createMenuMac(Object toolkitModel, IMenuInfo menu) {
+		return new MacMenuEditPart(toolkitModel, menu);
+	}
 
-  /**
-   * @return the {@link EditPart} for {@link IMenuItemInfo}.
-   */
-  public static EditPart createMenuItem(Object toolkitModel, IMenuItemInfo item) {
-    return new MenuItemEditPart(toolkitModel, item);
-  }
+	/**
+	 * @return the {@link EditPart} for {@link IMenuItemInfo}.
+	 */
+	public static EditPart createMenuItem(Object toolkitModel, IMenuItemInfo item) {
+		return new MenuItemEditPart(toolkitModel, item);
+	}
 
-  public static final int MENU_Y_LOCATION = 3;
+	public static final int MENU_Y_LOCATION = 3;
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/PolicyUtils.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/PolicyUtils.java
index b58d4d7d7..d15834ebe 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/PolicyUtils.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/PolicyUtils.java
@@ -45,312 +45,312 @@
  * @coverage core.gef.policy
  */
 public abstract class PolicyUtils {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Border target feedback
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final String BORDER_FEEDBACK_KEY = "PolicyUtils.borderFeedback";
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Border target feedback
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final String BORDER_FEEDBACK_KEY = "PolicyUtils.borderFeedback";
 
-  /**
-   * Shows border around given {@link EditPolicy} host figure.
-   */
-  public static void showBorderTargetFeedback(final GraphicalEditPolicy policy) {
-    ExecutionUtils.runLog(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        Layer layer = (Layer) ReflectionUtils.invokeMethod2(policy, "getFeedbackLayer");
-        showBorderTargetFeedback(layer, policy.getHost());
-      }
-    });
-  }
+	/**
+	 * Shows border around given {@link EditPolicy} host figure.
+	 */
+	public static void showBorderTargetFeedback(final GraphicalEditPolicy policy) {
+		ExecutionUtils.runLog(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				Layer layer = (Layer) ReflectionUtils.invokeMethod2(policy, "getFeedbackLayer");
+				showBorderTargetFeedback(layer, policy.getHost());
+			}
+		});
+	}
 
-  /**
-   * Shows border around given {@link GraphicalEditPart} figure.
-   */
-  public static void showBorderTargetFeedback(GraphicalEditPart part) {
-    Layer feedbackLayer = part.getViewer().getLayer(IEditPartViewer.FEEDBACK_LAYER);
-    showBorderTargetFeedback(feedbackLayer, part);
-  }
+	/**
+	 * Shows border around given {@link GraphicalEditPart} figure.
+	 */
+	public static void showBorderTargetFeedback(GraphicalEditPart part) {
+		Layer feedbackLayer = part.getViewer().getLayer(IEditPartViewer.FEEDBACK_LAYER);
+		showBorderTargetFeedback(feedbackLayer, part);
+	}
 
-  /**
-   * Shows border around given {@link GraphicalEditPart} figure.
-   */
-  private static void showBorderTargetFeedback(Layer layer, GraphicalEditPart part) {
-    // we can show only one "border target", so remove any existing
-    eraseBorderTargetFeedback(part);
-    // prepare border
-    Border targetBorder = createTargetBorder();
-    // prepare bounds
-    Rectangle bounds;
-    {
-      Figure hostFigure = part.getFigure();
-      bounds = hostFigure.getBounds().getCopy();
-      bounds.expand(3, 3);
-      FigureUtils.translateFigureToAbsolute(hostFigure, bounds);
-    }
-    // add feedback
-    Figure borderFeedback = new Figure();
-    borderFeedback.setBorder(targetBorder);
-    borderFeedback.setBounds(bounds);
-    layer.add(borderFeedback);
-    part.getViewer().getControl().setData(BORDER_FEEDBACK_KEY, borderFeedback);
-  }
+	/**
+	 * Shows border around given {@link GraphicalEditPart} figure.
+	 */
+	private static void showBorderTargetFeedback(Layer layer, GraphicalEditPart part) {
+		// we can show only one "border target", so remove any existing
+		eraseBorderTargetFeedback(part);
+		// prepare border
+		Border targetBorder = createTargetBorder();
+		// prepare bounds
+		Rectangle bounds;
+		{
+			Figure hostFigure = part.getFigure();
+			bounds = hostFigure.getBounds().getCopy();
+			bounds.expand(3, 3);
+			FigureUtils.translateFigureToAbsolute(hostFigure, bounds);
+		}
+		// add feedback
+		Figure borderFeedback = new Figure();
+		borderFeedback.setBorder(targetBorder);
+		borderFeedback.setBounds(bounds);
+		layer.add(borderFeedback);
+		part.getViewer().getControl().setData(BORDER_FEEDBACK_KEY, borderFeedback);
+	}
 
-  /**
-   * Erases border feedback.
-   */
-  public static void eraseBorderTargetFeedback(GraphicalEditPolicy policy) {
-    GraphicalEditPart part = policy.getHost();
-    eraseBorderTargetFeedback(part);
-  }
+	/**
+	 * Erases border feedback.
+	 */
+	public static void eraseBorderTargetFeedback(GraphicalEditPolicy policy) {
+		GraphicalEditPart part = policy.getHost();
+		eraseBorderTargetFeedback(part);
+	}
 
-  /**
-   * Erases border feedback.
-   */
-  public static void eraseBorderTargetFeedback(GraphicalEditPart part) {
-    Figure borderFeedback = (Figure) part.getViewer().getControl().getData(BORDER_FEEDBACK_KEY);
-    if (borderFeedback != null) {
-      FigureUtils.removeFigure(borderFeedback);
-      borderFeedback = null;
-    }
-  }
+	/**
+	 * Erases border feedback.
+	 */
+	public static void eraseBorderTargetFeedback(GraphicalEditPart part) {
+		Figure borderFeedback = (Figure) part.getViewer().getControl().getData(BORDER_FEEDBACK_KEY);
+		if (borderFeedback != null) {
+			FigureUtils.removeFigure(borderFeedback);
+			borderFeedback = null;
+		}
+	}
 
-  /**
-   * @return the {@link Border} for target feedback.
-   */
-  public static Border createTargetBorder() {
-    LineBorder darkBorder = new LineBorder(IColorConstants.darkGreen, 1);
-    LineBorder darkBorder2 = new LineBorder(IColorConstants.darkGreen, 1);
-    LineBorder lightBorder = new LineBorder(IColorConstants.lightGreen, 1);
-    return new CompoundBorder(new CompoundBorder(darkBorder, lightBorder), darkBorder2);
-  }
+	/**
+	 * @return the {@link Border} for target feedback.
+	 */
+	public static Border createTargetBorder() {
+		LineBorder darkBorder = new LineBorder(IColorConstants.darkGreen, 1);
+		LineBorder darkBorder2 = new LineBorder(IColorConstants.darkGreen, 1);
+		LineBorder lightBorder = new LineBorder(IColorConstants.lightGreen, 1);
+		return new CompoundBorder(new CompoundBorder(darkBorder, lightBorder), darkBorder2);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utility methods for policy methods accessing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Invokes {@link EditPolicy#getLayer(java.lang.String)}.
-   */
-  private static Layer getLayer(GraphicalEditPolicy policy, String name) throws Exception {
-    Method method = findPolicyMethod(policy, "getLayer(java.lang.String)");
-    return (Layer) method.invoke(policy, new Object[]{name});
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utility methods for policy methods accessing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Invokes {@link EditPolicy#getLayer(java.lang.String)}.
+	 */
+	private static Layer getLayer(GraphicalEditPolicy policy, String name) throws Exception {
+		Method method = findPolicyMethod(policy, "getLayer(java.lang.String)");
+		return (Layer) method.invoke(policy, new Object[]{name});
+	}
 
-  /**
-   * @return an possible unaccessible (protected) method from given {@link EditPolicy} object.
-   */
-  private static Method findPolicyMethod(GraphicalEditPolicy policy, String signature)
-      throws Exception {
-    return ReflectionUtils.getMethodBySignature(policy.getClass(), signature);
-  }
+	/**
+	 * @return an possible unaccessible (protected) method from given {@link EditPolicy} object.
+	 */
+	private static Method findPolicyMethod(GraphicalEditPolicy policy, String signature)
+			throws Exception {
+		return ReflectionUtils.getMethodBySignature(policy.getClass(), signature);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Coordinates
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return absolute bounds of given {@link EditPart}'s {@link Figure}.
-   */
-  public static Rectangle getAbsoluteBounds(GraphicalEditPart editPart) {
-    Figure figure = editPart.getFigure();
-    Rectangle bounds = figure.getBounds().getCopy();
-    FigureUtils.translateFigureToAbsolute(figure, bounds);
-    return bounds;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Coordinates
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return absolute bounds of given {@link EditPart}'s {@link Figure}.
+	 */
+	public static Rectangle getAbsoluteBounds(GraphicalEditPart editPart) {
+		Figure figure = editPart.getFigure();
+		Rectangle bounds = figure.getBounds().getCopy();
+		FigureUtils.translateFigureToAbsolute(figure, bounds);
+		return bounds;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Geometry utilities
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static void translateAbsoluteToFeedback(GraphicalEditPolicy policy, Translatable t) {
-    try {
-      Figure layer = getLayer(policy, IEditPartViewer.FEEDBACK_LAYER);
-      FigureUtils.translateAbsoluteToFigure(layer, t);
-    } catch (Throwable e) {
-      DesignerPlugin.log(e);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Geometry utilities
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static void translateAbsoluteToFeedback(GraphicalEditPolicy policy, Translatable t) {
+		try {
+			Figure layer = getLayer(policy, IEditPartViewer.FEEDBACK_LAYER);
+			FigureUtils.translateAbsoluteToFigure(layer, t);
+		} catch (Throwable e) {
+			DesignerPlugin.log(e);
+		}
+	}
 
-  public static void translateAbsoluteToModel(SelectionEditPolicy policy, Translatable t) {
-    try {
-      GraphicalEditPart containerEditPart = (GraphicalEditPart) policy.getHost().getParent();
-      translateAbsoluteToModel(containerEditPart, t);
-    } catch (Throwable e) {
-      DesignerPlugin.log(e);
-    }
-  }
+	public static void translateAbsoluteToModel(SelectionEditPolicy policy, Translatable t) {
+		try {
+			GraphicalEditPart containerEditPart = (GraphicalEditPart) policy.getHost().getParent();
+			translateAbsoluteToModel(containerEditPart, t);
+		} catch (Throwable e) {
+			DesignerPlugin.log(e);
+		}
+	}
 
-  public static void translateAbsoluteToModel(LayoutEditPolicy policy, Translatable t) {
-    try {
-      GraphicalEditPart containerEditPart = policy.getHost();
-      translateAbsoluteToModel(containerEditPart, t);
-    } catch (Throwable e) {
-      DesignerPlugin.log(e);
-    }
-  }
+	public static void translateAbsoluteToModel(LayoutEditPolicy policy, Translatable t) {
+		try {
+			GraphicalEditPart containerEditPart = policy.getHost();
+			translateAbsoluteToModel(containerEditPart, t);
+		} catch (Throwable e) {
+			DesignerPlugin.log(e);
+		}
+	}
 
-  /**
-   * Converts 'absolute' coordinates into coordinates by <code>toContainer</code> {@link EditPart}.
-   * Useful during reparenting.
-   */
-  public static void translateAbsoluteToModel(GraphicalEditPart toContainer, Translatable t) {
-    try {
-      // translate to figure
-      {
-        Figure hostFigure = toContainer.getFigure();
-        FigureUtils.translateAbsoluteToFigure2(hostFigure, t);
-      }
-      // translate: container figure -> client area
-      {
-        IAbstractComponentInfo container = (IAbstractComponentInfo) toContainer.getModel();
-        absoluteToModel_rightToLeft(t, container);
-        t.performTranslate(container.getClientAreaInsets().getNegated());
-      }
-    } catch (Throwable e) {
-      DesignerPlugin.log(e);
-    }
-  }
+	/**
+	 * Converts 'absolute' coordinates into coordinates by <code>toContainer</code> {@link EditPart}.
+	 * Useful during reparenting.
+	 */
+	public static void translateAbsoluteToModel(GraphicalEditPart toContainer, Translatable t) {
+		try {
+			// translate to figure
+			{
+				Figure hostFigure = toContainer.getFigure();
+				FigureUtils.translateAbsoluteToFigure2(hostFigure, t);
+			}
+			// translate: container figure -> client area
+			{
+				IAbstractComponentInfo container = (IAbstractComponentInfo) toContainer.getModel();
+				absoluteToModel_rightToLeft(t, container);
+				t.performTranslate(container.getClientAreaInsets().getNegated());
+			}
+		} catch (Throwable e) {
+			DesignerPlugin.log(e);
+		}
+	}
 
-  /**
-   * Translates given {@link Translatable} from model coordinates into feedback layer coordinates.
-   */
-  public static void translateModelToFeedback(GraphicalEditPolicy policy, Translatable t) {
-    if (policy instanceof LayoutEditPolicy) {
-      translateAbsoluteToModel((LayoutEditPolicy) policy, t);
-    } else if (policy instanceof SelectionEditPolicy) {
-      translateAbsoluteToModel((SelectionEditPolicy) policy, t);
-    } else {
-      throw new IllegalArgumentException(ObjectUtils.toString(policy));
-    }
-  }
+	/**
+	 * Translates given {@link Translatable} from model coordinates into feedback layer coordinates.
+	 */
+	public static void translateModelToFeedback(GraphicalEditPolicy policy, Translatable t) {
+		if (policy instanceof LayoutEditPolicy) {
+			translateAbsoluteToModel((LayoutEditPolicy) policy, t);
+		} else if (policy instanceof SelectionEditPolicy) {
+			translateAbsoluteToModel((SelectionEditPolicy) policy, t);
+		} else {
+			throw new IllegalArgumentException(ObjectUtils.toString(policy));
+		}
+	}
 
-  public static void translateModelToFeedback(LayoutEditPolicy policy, Translatable t) {
-    try {
-      GraphicalEditPart containerEditPart = policy.getHost();
-      // translate: client area -> container figure
-      {
-        IAbstractComponentInfo container = (IAbstractComponentInfo) containerEditPart.getModel();
-        t.performTranslate(container.getClientAreaInsets());
-        modelToFeedback_rightToLeft(t, container);
-      }
-      // translate to layer
-      {
-        Figure hostFigure = containerEditPart.getFigure();
-        Figure layer = getLayer(policy, IEditPartViewer.FEEDBACK_LAYER);
-        FigureUtils.translateFigureToFigure2(hostFigure, layer, t);
-      }
-    } catch (Throwable e) {
-      DesignerPlugin.log(e);
-    }
-  }
+	public static void translateModelToFeedback(LayoutEditPolicy policy, Translatable t) {
+		try {
+			GraphicalEditPart containerEditPart = policy.getHost();
+			// translate: client area -> container figure
+			{
+				IAbstractComponentInfo container = (IAbstractComponentInfo) containerEditPart.getModel();
+				t.performTranslate(container.getClientAreaInsets());
+				modelToFeedback_rightToLeft(t, container);
+			}
+			// translate to layer
+			{
+				Figure hostFigure = containerEditPart.getFigure();
+				Figure layer = getLayer(policy, IEditPartViewer.FEEDBACK_LAYER);
+				FigureUtils.translateFigureToFigure2(hostFigure, layer, t);
+			}
+		} catch (Throwable e) {
+			DesignerPlugin.log(e);
+		}
+	}
 
-  public static void translateModelToFeedback(SelectionEditPolicy policy, Translatable t) {
-    try {
-      GraphicalEditPart containerEditPart = (GraphicalEditPart) policy.getHost().getParent();
-      // translate: client area -> container figure
-      {
-        IAbstractComponentInfo container = (IAbstractComponentInfo) containerEditPart.getModel();
-        t.performTranslate(container.getClientAreaInsets());
-        modelToFeedback_rightToLeft(t, container);
-      }
-      // translate to layer
-      {
-        Figure hostFigure = containerEditPart.getFigure();
-        Figure layer = getLayer(policy, IEditPartViewer.FEEDBACK_LAYER);
-        FigureUtils.translateFigureToFigure2(hostFigure, layer, t);
-      }
-    } catch (Throwable e) {
-      DesignerPlugin.log(e);
-    }
-  }
+	public static void translateModelToFeedback(SelectionEditPolicy policy, Translatable t) {
+		try {
+			GraphicalEditPart containerEditPart = (GraphicalEditPart) policy.getHost().getParent();
+			// translate: client area -> container figure
+			{
+				IAbstractComponentInfo container = (IAbstractComponentInfo) containerEditPart.getModel();
+				t.performTranslate(container.getClientAreaInsets());
+				modelToFeedback_rightToLeft(t, container);
+			}
+			// translate to layer
+			{
+				Figure hostFigure = containerEditPart.getFigure();
+				Figure layer = getLayer(policy, IEditPartViewer.FEEDBACK_LAYER);
+				FigureUtils.translateFigureToFigure2(hostFigure, layer, t);
+			}
+		} catch (Throwable e) {
+			DesignerPlugin.log(e);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Right-to-left support
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static void modelToFeedback_rightToLeft(Translatable t, IAbstractComponentInfo container) {
-    if (container.isRTL()) {
-      int containerWidth = container.getBounds().width;
-      if (t instanceof Point) {
-        Point point = (Point) t;
-        point.x = containerWidth - point.x;
-      }
-      if (t instanceof Rectangle) {
-        Rectangle rectangle = (Rectangle) t;
-        rectangle.x = containerWidth - rectangle.x - rectangle.width;
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Right-to-left support
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static void modelToFeedback_rightToLeft(Translatable t, IAbstractComponentInfo container) {
+		if (container.isRTL()) {
+			int containerWidth = container.getBounds().width;
+			if (t instanceof Point) {
+				Point point = (Point) t;
+				point.x = containerWidth - point.x;
+			}
+			if (t instanceof Rectangle) {
+				Rectangle rectangle = (Rectangle) t;
+				rectangle.x = containerWidth - rectangle.x - rectangle.width;
+			}
+		}
+	}
 
-  private static void absoluteToModel_rightToLeft(Translatable t, IAbstractComponentInfo container) {
-    if (container.isRTL()) {
-      int containerWidth = container.getBounds().width;
-      if (t instanceof Point) {
-        Point point = (Point) t;
-        point.x = containerWidth - point.x;
-      }
-      if (t instanceof Rectangle) {
-        Rectangle rectangle = (Rectangle) t;
-        rectangle.x = containerWidth - rectangle.x - rectangle.width;
-      }
-    }
-  }
+	private static void absoluteToModel_rightToLeft(Translatable t, IAbstractComponentInfo container) {
+		if (container.isRTL()) {
+			int containerWidth = container.getBounds().width;
+			if (t instanceof Point) {
+				Point point = (Point) t;
+				point.x = containerWidth - point.x;
+			}
+			if (t instanceof Rectangle) {
+				Rectangle rectangle = (Rectangle) t;
+				rectangle.x = containerWidth - rectangle.x - rectangle.width;
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Selection
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Schedules selection of {@link EditPart} with given model.
-   *
-   * @param host
-   *          the {@link EditPolicy} to get {@link IEditPartViewer} to select in.
-   */
-  public static void scheduleSelection(EditPolicy policy, Object model) {
-    scheduleSelection(policy.getHost(), model);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Selection
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Schedules selection of {@link EditPart} with given model.
+	 *
+	 * @param host
+	 *          the {@link EditPolicy} to get {@link IEditPartViewer} to select in.
+	 */
+	public static void scheduleSelection(EditPolicy policy, Object model) {
+		scheduleSelection(policy.getHost(), model);
+	}
 
-  /**
-   * Schedules selection of {@link EditPart} with given model.
-   *
-   * @param host
-   *          the {@link EditPart} to get {@link IEditPartViewer} to select in.
-   */
-  public static void scheduleSelection(EditPart host, Object model) {
-    scheduleSelection(host.getViewer(), model);
-  }
+	/**
+	 * Schedules selection of {@link EditPart} with given model.
+	 *
+	 * @param host
+	 *          the {@link EditPart} to get {@link IEditPartViewer} to select in.
+	 */
+	public static void scheduleSelection(EditPart host, Object model) {
+		scheduleSelection(host.getViewer(), model);
+	}
 
-  /**
-   * Schedules selection of {@link EditPart} with given model.
-   */
-  public static void scheduleSelection(final IEditPartViewer viewer, final Object model) {
-    ExecutionUtils.runLogLater(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        EditPart editPart = viewer.getEditPartByModel(model);
-        if (editPart != null) {
-          viewer.select(editPart);
-        }
-      }
-    });
-  }
+	/**
+	 * Schedules selection of {@link EditPart} with given model.
+	 */
+	public static void scheduleSelection(final IEditPartViewer viewer, final Object model) {
+		ExecutionUtils.runLogLater(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				EditPart editPart = viewer.getEditPartByModel(model);
+				if (editPart != null) {
+					viewer.select(editPart);
+				}
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Direction analysis
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if <code>direction</code> has <code>requiredDirection</code>.
-   */
-  public static boolean hasDirection(int direction, int requiredDirection) {
-    return (direction & requiredDirection) != 0;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Direction analysis
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if <code>direction</code> has <code>requiredDirection</code>.
+	 */
+	public static boolean hasDirection(int direction, int requiredDirection) {
+		return (direction & requiredDirection) != 0;
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/helpers/BroadcastListenerHelper.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/helpers/BroadcastListenerHelper.java
index dc59a848f..924b8c7fb 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/helpers/BroadcastListenerHelper.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/helpers/BroadcastListenerHelper.java
@@ -23,35 +23,35 @@
  * @coverage core.gef.policy
  */
 public final class BroadcastListenerHelper implements IEditPolicyListener {
-  private final ObjectInfo m_object;
-  private final EditPolicy m_editPolicy;
-  private final Object m_listener;
+	private final ObjectInfo m_object;
+	private final EditPolicy m_editPolicy;
+	private final Object m_listener;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public BroadcastListenerHelper(ObjectInfo object, EditPolicy editPolicy, Object listener) {
-    m_object = object;
-    m_editPolicy = editPolicy;
-    m_listener = listener;
-    m_editPolicy.addEditPolicyListener(this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public BroadcastListenerHelper(ObjectInfo object, EditPolicy editPolicy, Object listener) {
+		m_object = object;
+		m_editPolicy = editPolicy;
+		m_listener = listener;
+		m_editPolicy.addEditPolicyListener(this);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IEditPolicyListener
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void activatePolicy(EditPolicy policy) {
-    m_object.addBroadcastListener(m_listener);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IEditPolicyListener
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void activatePolicy(EditPolicy policy) {
+		m_object.addBroadcastListener(m_listener);
+	}
 
-  @Override
-  public void deactivatePolicy(EditPolicy policy) {
-    m_object.removeBroadcastListener(m_listener);
-    m_editPolicy.removeEditPolicyListener(this);
-  }
+	@Override
+	public void deactivatePolicy(EditPolicy policy) {
+		m_object.removeBroadcastListener(m_listener);
+		m_editPolicy.removeEditPolicyListener(this);
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/helpers/SelectionEditPolicyRefreshHelper.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/helpers/SelectionEditPolicyRefreshHelper.java
index a81678a05..dadc89ceb 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/helpers/SelectionEditPolicyRefreshHelper.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/helpers/SelectionEditPolicyRefreshHelper.java
@@ -23,25 +23,25 @@
  * @coverage core.gef.policy
  */
 public class SelectionEditPolicyRefreshHelper {
-  private final SelectionEditPolicy m_policy;
+	private final SelectionEditPolicy m_policy;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SelectionEditPolicyRefreshHelper(SelectionEditPolicy policy) {
-    m_policy = policy;
-    ObjectInfo hierarchyObject = GlobalState.getActiveObject();
-    new BroadcastListenerHelper(hierarchyObject, policy, new ObjectEventListener() {
-      @Override
-      public void refreshed() throws Exception {
-        boolean isActivePolicy = m_policy.isActive();
-        boolean isSelectedHost = m_policy.getHost().getSelected() != EditPart.SELECTED_NONE;
-        if (isActivePolicy && isSelectedHost) {
-          m_policy.refreshSelection();
-        }
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SelectionEditPolicyRefreshHelper(SelectionEditPolicy policy) {
+		m_policy = policy;
+		ObjectInfo hierarchyObject = GlobalState.getActiveObject();
+		new BroadcastListenerHelper(hierarchyObject, policy, new ObjectEventListener() {
+			@Override
+			public void refreshed() throws Exception {
+				boolean isActivePolicy = m_policy.isActive();
+				boolean isSelectedHost = m_policy.getHost().getSelected() != EditPart.SELECTED_NONE;
+				if (isActivePolicy && isSelectedHost) {
+					m_policy.refreshSelection();
+				}
+			}
+		});
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/helpers/SelectionListenerHelper.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/helpers/SelectionListenerHelper.java
index 93427a534..8ac39ea53 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/helpers/SelectionListenerHelper.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/helpers/SelectionListenerHelper.java
@@ -23,33 +23,33 @@
  * @coverage core.gef.policy
  */
 public final class SelectionListenerHelper implements IEditPolicyListener {
-  private final EditPolicy m_editPolicy;
-  private final IEditPartSelectionListener m_listener;
+	private final EditPolicy m_editPolicy;
+	private final IEditPartSelectionListener m_listener;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SelectionListenerHelper(EditPolicy editPolicy, IEditPartSelectionListener listener) {
-    m_editPolicy = editPolicy;
-    m_listener = listener;
-    m_editPolicy.addEditPolicyListener(this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SelectionListenerHelper(EditPolicy editPolicy, IEditPartSelectionListener listener) {
+		m_editPolicy = editPolicy;
+		m_listener = listener;
+		m_editPolicy.addEditPolicyListener(this);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IEditPolicyListener
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void activatePolicy(EditPolicy policy) {
-    m_editPolicy.getHost().addSelectionListener(m_listener);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IEditPolicyListener
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void activatePolicy(EditPolicy policy) {
+		m_editPolicy.getHost().addSelectionListener(m_listener);
+	}
 
-  @Override
-  public void deactivatePolicy(EditPolicy policy) {
-    m_editPolicy.getHost().removeSelectionListener(m_listener);
-    m_editPolicy.removeEditPolicyListener(this);
-  }
+	@Override
+	public void deactivatePolicy(EditPolicy policy) {
+		m_editPolicy.getHost().removeSelectionListener(m_listener);
+		m_editPolicy.removeEditPolicyListener(this);
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/helpers/SelectionPolicyDecorationHelper.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/helpers/SelectionPolicyDecorationHelper.java
index e94516398..b05956d6c 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/helpers/SelectionPolicyDecorationHelper.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/helpers/SelectionPolicyDecorationHelper.java
@@ -27,74 +27,74 @@
  * @coverage core.gef.policy
  */
 public abstract class SelectionPolicyDecorationHelper {
-  private final LayoutEditPolicy m_layoutPolicy;
-  private final Map<EditPart, EditPolicy> m_policies = new WeakHashMap<EditPart, EditPolicy>();
+	private final LayoutEditPolicy m_layoutPolicy;
+	private final Map<EditPart, EditPolicy> m_policies = new WeakHashMap<EditPart, EditPolicy>();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SelectionPolicyDecorationHelper(LayoutEditPolicy layoutPolicy) {
-    m_layoutPolicy = layoutPolicy;
-    m_layoutPolicy.addEditPartListener(new IEditPartDecorationListener() {
-      @Override
-      public void decorate(EditPart child) {
-        if (shouldChangePolicy(child)) {
-          rememberOldPolicy(child);
-          setNewPolicy(child);
-        }
-      }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SelectionPolicyDecorationHelper(LayoutEditPolicy layoutPolicy) {
+		m_layoutPolicy = layoutPolicy;
+		m_layoutPolicy.addEditPartListener(new IEditPartDecorationListener() {
+			@Override
+			public void decorate(EditPart child) {
+				if (shouldChangePolicy(child)) {
+					rememberOldPolicy(child);
+					setNewPolicy(child);
+				}
+			}
 
-      @Override
-      public void undecorate(EditPart child) {
-        if (shouldChangePolicy(child)) {
-          restoreOldPolicy(child);
-        }
-      }
-    });
-  }
+			@Override
+			public void undecorate(EditPart child) {
+				if (shouldChangePolicy(child)) {
+					restoreOldPolicy(child);
+				}
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Implementation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void rememberOldPolicy(EditPart child) {
-    EditPolicy selectionPolicy = child.getEditPolicy(EditPolicy.SELECTION_ROLE);
-    if (selectionPolicy != null) {
-      m_policies.put(child, selectionPolicy);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Implementation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void rememberOldPolicy(EditPart child) {
+		EditPolicy selectionPolicy = child.getEditPolicy(EditPolicy.SELECTION_ROLE);
+		if (selectionPolicy != null) {
+			m_policies.put(child, selectionPolicy);
+		}
+	}
 
-  private void setNewPolicy(EditPart child) {
-    EditPolicy newPolicy = getNewPolicy(child);
-    child.installEditPolicy(EditPolicy.SELECTION_ROLE, newPolicy);
-  }
+	private void setNewPolicy(EditPart child) {
+		EditPolicy newPolicy = getNewPolicy(child);
+		child.installEditPolicy(EditPolicy.SELECTION_ROLE, newPolicy);
+	}
 
-  private void restoreOldPolicy(EditPart child) {
-    EditPolicy selectionPolicy = m_policies.get(child);
-    child.installEditPolicy(EditPolicy.SELECTION_ROLE, selectionPolicy);
-  }
+	private void restoreOldPolicy(EditPart child) {
+		EditPolicy selectionPolicy = m_policies.get(child);
+		child.installEditPolicy(EditPolicy.SELECTION_ROLE, selectionPolicy);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Implementation specific
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if {@link EditPolicy#SELECTION_ROLE} of given {@link EditPart} should
-   *         be changed.
-   */
-  protected boolean shouldChangePolicy(EditPart child) {
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Implementation specific
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if {@link EditPolicy#SELECTION_ROLE} of given {@link EditPart} should
+	 *         be changed.
+	 */
+	protected boolean shouldChangePolicy(EditPart child) {
+		return true;
+	}
 
-  /**
-   * @return new {@link EditPolicy} to use for {@link EditPolicy#SELECTION_ROLE}, may be
-   *         <code>null</code>.
-   */
-  protected EditPolicy getNewPolicy(EditPart child) {
-    return null;
-  }
+	/**
+	 * @return new {@link EditPolicy} to use for {@link EditPolicy#SELECTION_ROLE}, may be
+	 *         <code>null</code>.
+	 */
+	protected EditPolicy getNewPolicy(EditPart child) {
+		return null;
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/layout/ILayoutEditPolicyFactory.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/layout/ILayoutEditPolicyFactory.java
index 2482a1d28..ba6990b12 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/layout/ILayoutEditPolicyFactory.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/layout/ILayoutEditPolicyFactory.java
@@ -20,8 +20,8 @@
  * @coverage core.gef.policy
  */
 public interface ILayoutEditPolicyFactory {
-  /**
-   * @return the {@link LayoutEditPolicy} for given model.
-   */
-  LayoutEditPolicy createLayoutEditPolicy(EditPart context, Object model);
+	/**
+	 * @return the {@link LayoutEditPolicy} for given model.
+	 */
+	LayoutEditPolicy createLayoutEditPolicy(EditPart context, Object model);
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/layout/LayoutPolicyUtils.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/layout/LayoutPolicyUtils.java
index 198ac3b38..51c106f59 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/layout/LayoutPolicyUtils.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/layout/LayoutPolicyUtils.java
@@ -23,42 +23,42 @@
  * @coverage core.gef.policy
  */
 public class LayoutPolicyUtils {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // LayoutEditPolicy creation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link LayoutEditPolicy} for given model.
-   */
-  public static LayoutEditPolicy createLayoutEditPolicy(EditPart context, Object model) {
-    // try to create policy
-    List<ILayoutEditPolicyFactory> factories =
-        ExternalFactoriesHelper.getElementsInstances(
-            ILayoutEditPolicyFactory.class,
-            "org.eclipse.wb.core.editPolicyFactories",
-            "factory");
-    for (ILayoutEditPolicyFactory factory : factories) {
-      LayoutEditPolicy layoutEditPolicy = factory.createLayoutEditPolicy(context, model);
-      if (layoutEditPolicy != null) {
-        return layoutEditPolicy;
-      }
-    }
-    // not found
-    return null;
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Side figures utilities
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Checks that selection edit policy should display side figures for given edit part.
-   */
-  public static boolean shouldShowSideFigures(String figuresMode, EditPart part) {
-    return part.getSelected() == EditPart.SELECTED_PRIMARY;
-    // TODO implement full check
-    /*boolean showFiguresAll = IDesignerPrefConstants.V_ALIGNMENT_FIGURES_ALL.equals(figuresMode);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// LayoutEditPolicy creation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link LayoutEditPolicy} for given model.
+	 */
+	public static LayoutEditPolicy createLayoutEditPolicy(EditPart context, Object model) {
+		// try to create policy
+		List<ILayoutEditPolicyFactory> factories =
+				ExternalFactoriesHelper.getElementsInstances(
+						ILayoutEditPolicyFactory.class,
+						"org.eclipse.wb.core.editPolicyFactories",
+						"factory");
+		for (ILayoutEditPolicyFactory factory : factories) {
+			LayoutEditPolicy layoutEditPolicy = factory.createLayoutEditPolicy(context, model);
+			if (layoutEditPolicy != null) {
+				return layoutEditPolicy;
+			}
+		}
+		// not found
+		return null;
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Side figures utilities
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Checks that selection edit policy should display side figures for given edit part.
+	 */
+	public static boolean shouldShowSideFigures(String figuresMode, EditPart part) {
+		return part.getSelected() == EditPart.SELECTED_PRIMARY;
+		// TODO implement full check
+		/*boolean showFiguresAll = IDesignerPrefConstants.V_ALIGNMENT_FIGURES_ALL.equals(figuresMode);
     if (showFiguresAll) {
     	return true;
     }
@@ -68,5 +68,5 @@ public static boolean shouldShowSideFigures(String figuresMode, EditPart part) {
     boolean showFiguresSelected = IDesignerPrefConstants.V_ALIGNMENT_FIGURES_SELECTED.equals(figuresMode);
     boolean showFiguresPrimarySelected = IDesignerPrefConstants.V_ALIGNMENT_FIGURES_PRIMARY_SELECTED.equals(figuresMode);
     return (showFiguresSelected && isSelected) || (showFiguresPrimarySelected && isPrimarySelected);*/
-  }
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/layout/flow/AbstractFlowLayoutEditPolicy.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/layout/flow/AbstractFlowLayoutEditPolicy.java
index 5f7e9b260..6db1f0f11 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/layout/flow/AbstractFlowLayoutEditPolicy.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/layout/flow/AbstractFlowLayoutEditPolicy.java
@@ -46,474 +46,474 @@
  * @coverage core.gef.policy
  */
 public abstract class AbstractFlowLayoutEditPolicy extends LayoutEditPolicy {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Configuration
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if children are located horizontally, i.e. in columns.
-   */
-  protected abstract boolean isHorizontal(Request request);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Configuration
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if children are located horizontally, i.e. in columns.
+	 */
+	protected abstract boolean isHorizontal(Request request);
 
-  /**
-   * @return <code>true</code> if container has RTL orientation, i.e. children are added right to
-   *         left.
-   */
-  protected boolean isRtl(Request request) {
-    return false;
-  }
+	/**
+	 * @return <code>true</code> if container has RTL orientation, i.e. children are added right to
+	 *         left.
+	 */
+	protected boolean isRtl(Request request) {
+		return false;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Reference children
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Checks that given {@link EditPart} can be used as reference child.
-   *
-   * @param request
-   *          the {@link Request} to check, may be <code>null</code>.
-   * @param editPart
-   *          the {@link EditPart}, child of host {@link EditPart}.
-   */
-  protected abstract boolean isGoodReferenceChild(Request request, EditPart editPart);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Reference children
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Checks that given {@link EditPart} can be used as reference child.
+	 *
+	 * @param request
+	 *          the {@link Request} to check, may be <code>null</code>.
+	 * @param editPart
+	 *          the {@link EditPart}, child of host {@link EditPart}.
+	 */
+	protected abstract boolean isGoodReferenceChild(Request request, EditPart editPart);
 
-  /**
-   * @return the {@link List} of {@link EditPart}'s that can be used as references.
-   */
-  private List<EditPart> getReferenceChildren(Request request) {
-    List<EditPart> allChildren = getHost().getChildren();
-    ArrayList<EditPart> referenceChildren = Lists.newArrayList();
-    //
-    for (EditPart editPart : allChildren) {
-      if (isGoodReferenceChild(request, editPart)) {
-        referenceChildren.add(editPart);
-      }
-    }
-    //
-    return referenceChildren;
-  }
+	/**
+	 * @return the {@link List} of {@link EditPart}'s that can be used as references.
+	 */
+	private List<EditPart> getReferenceChildren(Request request) {
+		List<EditPart> allChildren = getHost().getChildren();
+		ArrayList<EditPart> referenceChildren = Lists.newArrayList();
+		//
+		for (EditPart editPart : allChildren) {
+			if (isGoodReferenceChild(request, editPart)) {
+				referenceChildren.add(editPart);
+			}
+		}
+		//
+		return referenceChildren;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Command getCommand(Request request) {
-    Command command = super.getCommand(request);
-    if (command == null) {
-      command = getCommand(request, getReferenceObject(request));
-    }
-    return command;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Command getCommand(Request request) {
+		Command command = super.getCommand(request);
+		if (command == null) {
+			command = getCommand(request, getReferenceObject(request));
+		}
+		return command;
+	}
 
-  /**
-   * @return the {@link Command} for generic {@link Request}, if {@link #getCommand(Request)} was
-   *         not able to find other {@link Command}.
-   */
-  protected Command getCommand(Request request, Object referenceObject) {
-    return null;
-  }
+	/**
+	 * @return the {@link Command} for generic {@link Request}, if {@link #getCommand(Request)} was
+	 *         not able to find other {@link Command}.
+	 */
+	protected Command getCommand(Request request, Object referenceObject) {
+		return null;
+	}
 
-  /**
-   * @return the model object that should be used as reference in command.
-   */
-  private Object getReferenceObject(Request request) {
-    EditPart reference = getInsertionReference(request);
-    return reference != null ? reference.getModel() : null;
-  }
+	/**
+	 * @return the model object that should be used as reference in command.
+	 */
+	private Object getReferenceObject(Request request) {
+		EditPart reference = getInsertionReference(request);
+		return reference != null ? reference.getModel() : null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands: create
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected final Command getCreateCommand(CreateRequest request) {
-    return getCreateCommand(request.getNewObject(), getReferenceObject(request));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands: create
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected final Command getCreateCommand(CreateRequest request) {
+		return getCreateCommand(request.getNewObject(), getReferenceObject(request));
+	}
 
-  /**
-   * @return the {@link Command} for {@link Request#REQ_CREATE}.
-   */
-  protected Command getCreateCommand(Object newObject, Object referenceObject) {
-    return null;
-  }
+	/**
+	 * @return the {@link Command} for {@link Request#REQ_CREATE}.
+	 */
+	protected Command getCreateCommand(Object newObject, Object referenceObject) {
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands: paste
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected final Command getPasteCommand(PasteRequest request) {
-    return getPasteCommand(request, getReferenceObject(request));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands: paste
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected final Command getPasteCommand(PasteRequest request) {
+		return getPasteCommand(request, getReferenceObject(request));
+	}
 
-  /**
-   * @return the {@link Command} for {@link Request#REQ_PASTE}.
-   */
-  protected Command getPasteCommand(PasteRequest request, Object referenceObject) {
-    return null;
-  }
+	/**
+	 * @return the {@link Command} for {@link Request#REQ_PASTE}.
+	 */
+	protected Command getPasteCommand(PasteRequest request, Object referenceObject) {
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands: move
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected final Command getMoveCommand(ChangeBoundsRequest request) {
-    if (request.getEditParts().size() != 1) {
-      return null;
-    }
-    EditPart moveEditPart = request.getEditParts().get(0);
-    // checks for no-op
-    {
-      EditPart referenceEditPart = getInsertionReference(request);
-      List<EditPart> children = getReferenceChildren(request);
-      if (children.contains(moveEditPart)) {
-        // move of last to last
-        if (referenceEditPart == null && children.indexOf(moveEditPart) == children.size() - 1) {
-          return Command.EMPTY;
-        }
-        // move before already next
-        if (children.indexOf(moveEditPart) + 1 == children.indexOf(referenceEditPart)) {
-          return Command.EMPTY;
-        }
-      }
-    }
-    // OK, now we can create command
-    return getMoveCommand(moveEditPart.getModel(), getReferenceObject(request));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands: move
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected final Command getMoveCommand(ChangeBoundsRequest request) {
+		if (request.getEditParts().size() != 1) {
+			return null;
+		}
+		EditPart moveEditPart = request.getEditParts().get(0);
+		// checks for no-op
+		{
+			EditPart referenceEditPart = getInsertionReference(request);
+			List<EditPart> children = getReferenceChildren(request);
+			if (children.contains(moveEditPart)) {
+				// move of last to last
+				if (referenceEditPart == null && children.indexOf(moveEditPart) == children.size() - 1) {
+					return Command.EMPTY;
+				}
+				// move before already next
+				if (children.indexOf(moveEditPart) + 1 == children.indexOf(referenceEditPart)) {
+					return Command.EMPTY;
+				}
+			}
+		}
+		// OK, now we can create command
+		return getMoveCommand(moveEditPart.getModel(), getReferenceObject(request));
+	}
 
-  /**
-   * @return the {@link Command} for {@link Request#REQ_MOVE}.
-   */
-  protected abstract Command getMoveCommand(Object moveObject, Object referenceObject);
+	/**
+	 * @return the {@link Command} for {@link Request#REQ_MOVE}.
+	 */
+	protected abstract Command getMoveCommand(Object moveObject, Object referenceObject);
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands: add
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected final Command getAddCommand(ChangeBoundsRequest request) {
-    if (request.getEditParts().size() != 1) {
-      return null;
-    }
-    EditPart editPart = request.getEditParts().get(0);
-    return getAddCommand(editPart.getModel(), getReferenceObject(request));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands: add
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected final Command getAddCommand(ChangeBoundsRequest request) {
+		if (request.getEditParts().size() != 1) {
+			return null;
+		}
+		EditPart editPart = request.getEditParts().get(0);
+		return getAddCommand(editPart.getModel(), getReferenceObject(request));
+	}
 
-  /**
-   * @return the {@link Command} for {@link Request#REQ_ADD}.
-   */
-  protected Command getAddCommand(Object addObject, Object referenceObject) {
-    return getMoveCommand(addObject, referenceObject);
-  }
+	/**
+	 * @return the {@link Command} for {@link Request#REQ_ADD}.
+	 */
+	protected Command getAddCommand(Object addObject, Object referenceObject) {
+		return getMoveCommand(addObject, referenceObject);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Feedbacks
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Polyline m_insertionLine;
-  private EditPart m_reference = null;
-  private boolean m_beforeReference = true;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Feedbacks
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Polyline m_insertionLine;
+	private EditPart m_reference = null;
+	private boolean m_beforeReference = true;
 
-  @Override
-  protected void showLayoutTargetFeedback(Request request) {
-    final boolean horizontal = isHorizontal(request);
-    final boolean rtl = isRtl(request);
-    // prepare children
-    List<EditPart> children = getReferenceChildren(request);
-    if (children.isEmpty()) {
-      m_reference = null;
-      showLayoutTargetFeedback_noReference(horizontal, rtl);
-      return;
-    }
-    // prepare transposer
-    final Transposer transposer = new Transposer();
-    transposer.setEnabled(!horizontal);
-    Point p = transposer.t(getLocationFromRequest(request));
-    // prepare children that belong same row
-    List<EditPart> rowChildren = Lists.newArrayList();
-    {
-      // find child nearest to cursor
-      EditPart nearestEditPart = null;
-      {
-        int minDistance = Integer.MAX_VALUE;
-        for (EditPart child : children) {
-          Rectangle childBounds = getAbsoluteBounds(horizontal, child);
-          // prepare distance
-          int distance;
-          if (p.y < childBounds.y) {
-            distance = childBounds.y - p.y;
-          } else if (p.y > childBounds.bottom()) {
-            distance = p.y - childBounds.bottom();
-          } else {
-            distance = 0;
-          }
-          // check for better child
-          if (distance < minDistance) {
-            nearestEditPart = child;
-            minDistance = distance;
-          }
-        }
-      }
-      // add children that intersect any child that is already in row
-      rowChildren.add(nearestEditPart);
-      Rectangle nearestBounds = getAbsoluteBounds(horizontal, nearestEditPart);
-      int rowMinY = nearestBounds.y;
-      int rowMaxY = nearestBounds.bottom();
-      while (true) {
-        int rowChildrenCount = rowChildren.size();
-        //
-        for (EditPart child : children) {
-          if (!rowChildren.contains(child)) {
-            Rectangle childBounds = getAbsoluteBounds(horizontal, child);
-            if (intervalsIntersects(rowMinY, rowMaxY, childBounds.y, childBounds.bottom())) {
-              rowChildren.add(child);
-              rowMinY = Math.min(rowMinY, childBounds.y);
-              rowMaxY = Math.max(rowMaxY, childBounds.bottom());
-            }
-          }
-        }
-        // stop if we can not add more children to row
-        if (rowChildren.size() == rowChildrenCount) {
-          break;
-        }
-      }
-    }
-    // sort row by X
-    Collections.sort(rowChildren, new Comparator<EditPart>() {
-      @Override
-      public int compare(EditPart part_1, EditPart part_2) {
-        int x1 = getAbsoluteBounds(horizontal, part_1).x;
-        int x2 = getAbsoluteBounds(horizontal, part_2).x;
-        if (horizontal && rtl) {
-          return x2 - x1;
-        } else {
-          return x1 - x2;
-        }
-      }
-    });
-    // find reference
-    m_reference = null;
-    m_beforeReference = true;
-    if (!rowChildren.isEmpty()) {
-      for (EditPart child : rowChildren) {
-        Rectangle bounds = getAbsoluteBounds(horizontal, child);
-        boolean isReference;
-        if (horizontal && rtl) {
-          isReference = p.x > bounds.getCenter().x;
-        } else {
-          isReference = p.x < bounds.getCenter().x;
-        }
-        if (isReference) {
-          m_reference = child;
-          break;
-        }
-      }
-      // no reference, so use "after last"
-      if (m_reference == null) {
-        m_reference = rowChildren.get(rowChildren.size() - 1);
-        m_beforeReference = false;
-      }
-    }
-    //
-    if (m_reference != null) {
-      Rectangle bounds = getAbsoluteBounds(horizontal, m_reference);
-      // prepare X for line
-      int x;
-      if (m_beforeReference) {
-        int referenceIndex = rowChildren.indexOf(m_reference);
-        if (referenceIndex != 0) {
-          EditPart prevReference = rowChildren.get(referenceIndex - 1);
-          Rectangle prevBounds = getAbsoluteBounds(horizontal, prevReference);
-          if (horizontal && rtl) {
-            x = bounds.right() + Math.min(3, (prevBounds.left() - bounds.right()) / 2);
-          } else {
-            x = bounds.left() - Math.min(3, (bounds.left() - prevBounds.right()) / 2);
-          }
-        } else {
-          if (horizontal && rtl) {
-            x = bounds.right() + 3;
-          } else {
-            x = bounds.left() - 3;
-          }
-        }
-      } else {
-        if (horizontal && rtl) {
-          x = bounds.left() - 3;
-        } else {
-          x = bounds.right() + 3;
-        }
-      }
-      // add line
-      {
-        Polyline feedbackLine = getLineFeedback();
-        //
-        Point p1 = new Point(x, bounds.y - 4);
-        p1 = transposer.t(p1);
-        FigureUtils.translateAbsoluteToFigure(feedbackLine, p1);
-        //
-        Point p2 = new Point(x, bounds.y + bounds.height + 4);
-        p2 = transposer.t(p2);
-        FigureUtils.translateAbsoluteToFigure(feedbackLine, p2);
-        //
-        feedbackLine.setPoint(p1, 0);
-        feedbackLine.setPoint(p2, 1);
-      }
-    }
-  }
+	@Override
+	protected void showLayoutTargetFeedback(Request request) {
+		final boolean horizontal = isHorizontal(request);
+		final boolean rtl = isRtl(request);
+		// prepare children
+		List<EditPart> children = getReferenceChildren(request);
+		if (children.isEmpty()) {
+			m_reference = null;
+			showLayoutTargetFeedback_noReference(horizontal, rtl);
+			return;
+		}
+		// prepare transposer
+		final Transposer transposer = new Transposer();
+		transposer.setEnabled(!horizontal);
+		Point p = transposer.t(getLocationFromRequest(request));
+		// prepare children that belong same row
+		List<EditPart> rowChildren = Lists.newArrayList();
+		{
+			// find child nearest to cursor
+			EditPart nearestEditPart = null;
+			{
+				int minDistance = Integer.MAX_VALUE;
+				for (EditPart child : children) {
+					Rectangle childBounds = getAbsoluteBounds(horizontal, child);
+					// prepare distance
+					int distance;
+					if (p.y < childBounds.y) {
+						distance = childBounds.y - p.y;
+					} else if (p.y > childBounds.bottom()) {
+						distance = p.y - childBounds.bottom();
+					} else {
+						distance = 0;
+					}
+					// check for better child
+					if (distance < minDistance) {
+						nearestEditPart = child;
+						minDistance = distance;
+					}
+				}
+			}
+			// add children that intersect any child that is already in row
+			rowChildren.add(nearestEditPart);
+			Rectangle nearestBounds = getAbsoluteBounds(horizontal, nearestEditPart);
+			int rowMinY = nearestBounds.y;
+			int rowMaxY = nearestBounds.bottom();
+			while (true) {
+				int rowChildrenCount = rowChildren.size();
+				//
+				for (EditPart child : children) {
+					if (!rowChildren.contains(child)) {
+						Rectangle childBounds = getAbsoluteBounds(horizontal, child);
+						if (intervalsIntersects(rowMinY, rowMaxY, childBounds.y, childBounds.bottom())) {
+							rowChildren.add(child);
+							rowMinY = Math.min(rowMinY, childBounds.y);
+							rowMaxY = Math.max(rowMaxY, childBounds.bottom());
+						}
+					}
+				}
+				// stop if we can not add more children to row
+				if (rowChildren.size() == rowChildrenCount) {
+					break;
+				}
+			}
+		}
+		// sort row by X
+		Collections.sort(rowChildren, new Comparator<EditPart>() {
+			@Override
+			public int compare(EditPart part_1, EditPart part_2) {
+				int x1 = getAbsoluteBounds(horizontal, part_1).x;
+				int x2 = getAbsoluteBounds(horizontal, part_2).x;
+				if (horizontal && rtl) {
+					return x2 - x1;
+				} else {
+					return x1 - x2;
+				}
+			}
+		});
+		// find reference
+		m_reference = null;
+		m_beforeReference = true;
+		if (!rowChildren.isEmpty()) {
+			for (EditPart child : rowChildren) {
+				Rectangle bounds = getAbsoluteBounds(horizontal, child);
+				boolean isReference;
+				if (horizontal && rtl) {
+					isReference = p.x > bounds.getCenter().x;
+				} else {
+					isReference = p.x < bounds.getCenter().x;
+				}
+				if (isReference) {
+					m_reference = child;
+					break;
+				}
+			}
+			// no reference, so use "after last"
+			if (m_reference == null) {
+				m_reference = rowChildren.get(rowChildren.size() - 1);
+				m_beforeReference = false;
+			}
+		}
+		//
+		if (m_reference != null) {
+			Rectangle bounds = getAbsoluteBounds(horizontal, m_reference);
+			// prepare X for line
+			int x;
+			if (m_beforeReference) {
+				int referenceIndex = rowChildren.indexOf(m_reference);
+				if (referenceIndex != 0) {
+					EditPart prevReference = rowChildren.get(referenceIndex - 1);
+					Rectangle prevBounds = getAbsoluteBounds(horizontal, prevReference);
+					if (horizontal && rtl) {
+						x = bounds.right() + Math.min(3, (prevBounds.left() - bounds.right()) / 2);
+					} else {
+						x = bounds.left() - Math.min(3, (bounds.left() - prevBounds.right()) / 2);
+					}
+				} else {
+					if (horizontal && rtl) {
+						x = bounds.right() + 3;
+					} else {
+						x = bounds.left() - 3;
+					}
+				}
+			} else {
+				if (horizontal && rtl) {
+					x = bounds.left() - 3;
+				} else {
+					x = bounds.right() + 3;
+				}
+			}
+			// add line
+			{
+				Polyline feedbackLine = getLineFeedback();
+				//
+				Point p1 = new Point(x, bounds.y - 4);
+				p1 = transposer.t(p1);
+				FigureUtils.translateAbsoluteToFigure(feedbackLine, p1);
+				//
+				Point p2 = new Point(x, bounds.y + bounds.height + 4);
+				p2 = transposer.t(p2);
+				FigureUtils.translateAbsoluteToFigure(feedbackLine, p2);
+				//
+				feedbackLine.setPoint(p1, 0);
+				feedbackLine.setPoint(p2, 1);
+			}
+		}
+	}
 
-  private void showLayoutTargetFeedback_noReference(boolean horizontal, boolean rtl) {
-    Polyline feedbackLine = getLineFeedback();
-    Figure hostFigure = getHostFigure();
-    Rectangle bounds = hostFigure.getBounds().getCopy();
-    FigureUtils.translateFigureToAbsolute(hostFigure, bounds);
-    // prepare points
-    Point p1;
-    Point p2;
-    if (horizontal) {
-      if (rtl) {
-        p1 = new Point(bounds.right(), bounds.top());
-        p2 = new Point(bounds.right(), bounds.bottom());
-      } else {
-        p1 = new Point(bounds.left(), bounds.top());
-        p2 = new Point(bounds.left(), bounds.bottom());
-      }
-    } else {
-      p1 = new Point(bounds.left(), bounds.top());
-      p2 = new Point(bounds.right(), bounds.top());
-    }
-    // if host is big enough, tweak points for better look
-    if (horizontal) {
-      if (bounds.width > 20) {
-        if (rtl) {
-          p1.x -= 5;
-          p2.x -= 5;
-        } else {
-          p1.x += 5;
-          p2.x += 5;
-        }
-      }
-      if (bounds.height > 20) {
-        p1.y += 5;
-        p2.y -= 5;
-      }
-    } else {
-      if (bounds.width > 20) {
-        p1.x += 5;
-        p2.x -= 5;
-      }
-      if (bounds.height > 20) {
-        p1.y += 5;
-        p2.y += 5;
-      }
-    }
-    // set points
-    feedbackLine.setPoint(p1, 0);
-    feedbackLine.setPoint(p2, 1);
-  }
+	private void showLayoutTargetFeedback_noReference(boolean horizontal, boolean rtl) {
+		Polyline feedbackLine = getLineFeedback();
+		Figure hostFigure = getHostFigure();
+		Rectangle bounds = hostFigure.getBounds().getCopy();
+		FigureUtils.translateFigureToAbsolute(hostFigure, bounds);
+		// prepare points
+		Point p1;
+		Point p2;
+		if (horizontal) {
+			if (rtl) {
+				p1 = new Point(bounds.right(), bounds.top());
+				p2 = new Point(bounds.right(), bounds.bottom());
+			} else {
+				p1 = new Point(bounds.left(), bounds.top());
+				p2 = new Point(bounds.left(), bounds.bottom());
+			}
+		} else {
+			p1 = new Point(bounds.left(), bounds.top());
+			p2 = new Point(bounds.right(), bounds.top());
+		}
+		// if host is big enough, tweak points for better look
+		if (horizontal) {
+			if (bounds.width > 20) {
+				if (rtl) {
+					p1.x -= 5;
+					p2.x -= 5;
+				} else {
+					p1.x += 5;
+					p2.x += 5;
+				}
+			}
+			if (bounds.height > 20) {
+				p1.y += 5;
+				p2.y -= 5;
+			}
+		} else {
+			if (bounds.width > 20) {
+				p1.x += 5;
+				p2.x -= 5;
+			}
+			if (bounds.height > 20) {
+				p1.y += 5;
+				p2.y += 5;
+			}
+		}
+		// set points
+		feedbackLine.setPoint(p1, 0);
+		feedbackLine.setPoint(p2, 1);
+	}
 
-  @Override
-  protected void eraseLayoutTargetFeedback(Request request) {
-    if (m_insertionLine != null) {
-      removeFeedback(m_insertionLine);
-      m_insertionLine = null;
-    }
-  }
+	@Override
+	protected void eraseLayoutTargetFeedback(Request request) {
+		if (m_insertionLine != null) {
+			removeFeedback(m_insertionLine);
+			m_insertionLine = null;
+		}
+	}
 
-  /**
-   * @return the {@link Polyline} that should be used as feedback.
-   */
-  private Polyline getLineFeedback() {
-    if (m_insertionLine == null) {
-      m_insertionLine = new Polyline();
-      // presentation
-      m_insertionLine.setLineWidth(2);
-      m_insertionLine.setForeground(IColorConstants.red);
-      // default points
-      m_insertionLine.addPoint(new Point(0, 0));
-      m_insertionLine.addPoint(new Point(0, 0));
-      // add
-      addFeedback(m_insertionLine);
-    }
-    return m_insertionLine;
-  }
+	/**
+	 * @return the {@link Polyline} that should be used as feedback.
+	 */
+	private Polyline getLineFeedback() {
+		if (m_insertionLine == null) {
+			m_insertionLine = new Polyline();
+			// presentation
+			m_insertionLine.setLineWidth(2);
+			m_insertionLine.setForeground(IColorConstants.red);
+			// default points
+			m_insertionLine.addPoint(new Point(0, 0));
+			m_insertionLine.addPoint(new Point(0, 0));
+			// add
+			addFeedback(m_insertionLine);
+		}
+		return m_insertionLine;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Reference
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link EditPart} <em>before</em> which given {@link Request} should be handled.
-   */
-  private EditPart getInsertionReference(Request request) {
-    List<EditPart> children = getReferenceChildren(request);
-    if (m_reference == null) {
-      return null;
-    }
-    // prepare reference in terms "next"
-    EditPart reference;
-    if (m_beforeReference) {
-      reference = m_reference;
-    } else {
-      reference = GenericsUtils.getNextOrNull(children, m_reference);
-    }
-    // skip moving children
-    if (request instanceof AbstractCreateRequest) {
-      return reference;
-    } else {
-      List<EditPart> selectedEditParts = getHost().getViewer().getSelectedEditParts();
-      int index = children.indexOf(reference);
-      while (selectedEditParts.contains(reference)) {
-        if (index == children.size() - 1) {
-          return null;
-        }
-        reference = children.get(++index);
-      }
-    }
-    // return reference
-    return reference;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Reference
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link EditPart} <em>before</em> which given {@link Request} should be handled.
+	 */
+	private EditPart getInsertionReference(Request request) {
+		List<EditPart> children = getReferenceChildren(request);
+		if (m_reference == null) {
+			return null;
+		}
+		// prepare reference in terms "next"
+		EditPart reference;
+		if (m_beforeReference) {
+			reference = m_reference;
+		} else {
+			reference = GenericsUtils.getNextOrNull(children, m_reference);
+		}
+		// skip moving children
+		if (request instanceof AbstractCreateRequest) {
+			return reference;
+		} else {
+			List<EditPart> selectedEditParts = getHost().getViewer().getSelectedEditParts();
+			int index = children.indexOf(reference);
+			while (selectedEditParts.contains(reference)) {
+				if (index == children.size() - 1) {
+					return null;
+				}
+				reference = children.get(++index);
+			}
+		}
+		// return reference
+		return reference;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Checks two intervals for intersection.
-   */
-  private static boolean intervalsIntersects(int x11, int x12, int x21, int x22) {
-    int x1 = Math.max(x11, x21);
-    int x2 = Math.min(x12, x22);
-    return x2 - x1 > 0;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Checks two intervals for intersection.
+	 */
+	private static boolean intervalsIntersects(int x11, int x12, int x21, int x22) {
+		int x1 = Math.max(x11, x21);
+		int x2 = Math.min(x12, x22);
+		return x2 - x1 > 0;
+	}
 
-  /**
-   * @return absolute mouse location from given {@link Request}.
-   */
-  private static Point getLocationFromRequest(Request request) {
-    return ((IDropRequest) request).getLocation();
-  }
+	/**
+	 * @return absolute mouse location from given {@link Request}.
+	 */
+	private static Point getLocationFromRequest(Request request) {
+		return ((IDropRequest) request).getLocation();
+	}
 
-  /**
-   * @return absolute bounds of given {@link EditPart}'s {@link Figure}, transposed if needed by
-   *         layout.
-   */
-  private static Rectangle getAbsoluteBounds(boolean horizontal, EditPart editPart) {
-    Rectangle bounds = PolicyUtils.getAbsoluteBounds((GraphicalEditPart) editPart);
-    if (!horizontal) {
-      bounds.transpose();
-    }
-    return bounds;
-  }
+	/**
+	 * @return absolute bounds of given {@link EditPart}'s {@link Figure}, transposed if needed by
+	 *         layout.
+	 */
+	private static Rectangle getAbsoluteBounds(boolean horizontal, EditPart editPart) {
+		Rectangle bounds = PolicyUtils.getAbsoluteBounds((GraphicalEditPart) editPart);
+		if (!horizontal) {
+			bounds.transpose();
+		}
+		return bounds;
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/layout/flow/ObjectFlowLayoutEditPolicy.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/layout/flow/ObjectFlowLayoutEditPolicy.java
index 2aac3707e..f208f22b6 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/layout/flow/ObjectFlowLayoutEditPolicy.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/layout/flow/ObjectFlowLayoutEditPolicy.java
@@ -26,89 +26,89 @@
  * @coverage core.gef.policy
  */
 public abstract class ObjectFlowLayoutEditPolicy<C> extends AbstractFlowLayoutEditPolicy {
-  private final ObjectInfo m_host;
+	private final ObjectInfo m_host;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ObjectFlowLayoutEditPolicy(IObjectInfo host) {
-    this(host.getUnderlyingModel());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ObjectFlowLayoutEditPolicy(IObjectInfo host) {
+		this(host.getUnderlyingModel());
+	}
 
-  public ObjectFlowLayoutEditPolicy(ObjectInfo host) {
-    m_host = host;
-  }
+	public ObjectFlowLayoutEditPolicy(ObjectInfo host) {
+		m_host = host;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Command getCreateCommand(final Object newObject, final Object referenceObject) {
-    return new EditCommand(m_host) {
-      @Override
-      protected void executeEdit() throws Exception {
-        command_CREATE(getObjectModel(newObject), getReferenceObjectModel(referenceObject));
-      }
-    };
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Command getCreateCommand(final Object newObject, final Object referenceObject) {
+		return new EditCommand(m_host) {
+			@Override
+			protected void executeEdit() throws Exception {
+				command_CREATE(getObjectModel(newObject), getReferenceObjectModel(referenceObject));
+			}
+		};
+	}
 
-  @Override
-  protected Command getPasteCommand(PasteRequest request, Object referenceObject) {
-    final C referenceModel = getReferenceObjectModel(referenceObject);
-    return GlobalState.getPasteRequestProcessor().getPasteCommand(
-        request,
-        new IPasteComponentProcessor() {
-          @Override
-          public void process(Object component) throws Exception {
-            command_CREATE(getObjectModel(component), referenceModel);
-          }
-        });
-  }
+	@Override
+	protected Command getPasteCommand(PasteRequest request, Object referenceObject) {
+		final C referenceModel = getReferenceObjectModel(referenceObject);
+		return GlobalState.getPasteRequestProcessor().getPasteCommand(
+				request,
+				new IPasteComponentProcessor() {
+					@Override
+					public void process(Object component) throws Exception {
+						command_CREATE(getObjectModel(component), referenceModel);
+					}
+				});
+	}
 
-  @Override
-  protected Command getMoveCommand(final Object moveObject, final Object referenceObject) {
-    return new EditCommand(m_host) {
-      @Override
-      protected void executeEdit() throws Exception {
-        command_MOVE(getObjectModel(moveObject), getReferenceObjectModel(referenceObject));
-      }
-    };
-  }
+	@Override
+	protected Command getMoveCommand(final Object moveObject, final Object referenceObject) {
+		return new EditCommand(m_host) {
+			@Override
+			protected void executeEdit() throws Exception {
+				command_MOVE(getObjectModel(moveObject), getReferenceObjectModel(referenceObject));
+			}
+		};
+	}
 
-  @Override
-  protected Command getAddCommand(final Object addObject, final Object referenceObject) {
-    return new EditCommand(m_host) {
-      @Override
-      protected void executeEdit() throws Exception {
-        command_ADD(getObjectModel(addObject), getReferenceObjectModel(referenceObject));
-      }
-    };
-  }
+	@Override
+	protected Command getAddCommand(final Object addObject, final Object referenceObject) {
+		return new EditCommand(m_host) {
+			@Override
+			protected void executeEdit() throws Exception {
+				command_ADD(getObjectModel(addObject), getReferenceObjectModel(referenceObject));
+			}
+		};
+	}
 
-  @SuppressWarnings("unchecked")
-  protected C getObjectModel(Object object) {
-    return (C) object;
-  }
+	@SuppressWarnings("unchecked")
+	protected C getObjectModel(Object object) {
+		return (C) object;
+	}
 
-  @SuppressWarnings("unchecked")
-  protected C getReferenceObjectModel(Object referenceObject) {
-    return (C) referenceObject;
-  }
+	@SuppressWarnings("unchecked")
+	protected C getReferenceObjectModel(Object referenceObject) {
+		return (C) referenceObject;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Implementation of commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected abstract void command_CREATE(C component, C referenceComponent) throws Exception;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Implementation of commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected abstract void command_CREATE(C component, C referenceComponent) throws Exception;
 
-  protected abstract void command_MOVE(C component, C referenceComponent) throws Exception;
+	protected abstract void command_MOVE(C component, C referenceComponent) throws Exception;
 
-  protected void command_ADD(C component, C referenceComponent) throws Exception {
-    command_MOVE(component, referenceComponent);
-  }
+	protected void command_ADD(C component, C referenceComponent) throws Exception {
+		command_MOVE(component, referenceComponent);
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/layout/generic/AbstractColumnSelectionEditPolicy.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/layout/generic/AbstractColumnSelectionEditPolicy.java
index 02d275538..13fb6a3f9 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/layout/generic/AbstractColumnSelectionEditPolicy.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/layout/generic/AbstractColumnSelectionEditPolicy.java
@@ -41,135 +41,135 @@
  * @coverage core.gef.policy
  */
 public class AbstractColumnSelectionEditPolicy extends SelectionEditPolicy {
-  private static final String REQ_RESIZE = "resize";
-  private final IObjectInfo m_column;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractColumnSelectionEditPolicy(IObjectInfo column) {
-    m_column = column;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Handles
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected List<Handle> createSelectionHandles() {
-    List<Handle> handles = Lists.newArrayList();
-    // create move column handle
-    MoveHandle moveHandle = new MoveHandle(getHost());
-    moveHandle.setForeground(IColorConstants.red);
-    handles.add(moveHandle);
-    //
-    return handles;
-  }
-
-  @Override
-  protected List<Handle> createStaticHandles() {
-    List<Handle> handles = Lists.newArrayList();
-    // create resize column handle
-    SideResizeHandle resizeHandle =
-        new SideResizeHandle(getHost(), IPositionConstants.RIGHT, 10, true);
-    resizeHandle.setDragTrackerTool(new ResizeTracker(getHost(),
-        IPositionConstants.EAST,
-        REQ_RESIZE));
-    handles.add(resizeHandle);
-    //
-    return handles;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Routing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean understandsRequest(Request request) {
-    return super.understandsRequest(request) || request.getType() == REQ_RESIZE;
-  }
-
-  @Override
-  //@edu.umd.cs.findbugs.annotations.SuppressWarnings(value = "BC_UNCONFIRMED_CAST")
-  public Command getCommand(Request request) {
-    return getResizeCommand((ChangeBoundsRequest) request);
-  }
-
-  @Override
-  //@edu.umd.cs.findbugs.annotations.SuppressWarnings(value = "BC_UNCONFIRMED_CAST")
-  public void showSourceFeedback(Request request) {
-    showResizeFeedback((ChangeBoundsRequest) request);
-  }
-
-  @Override
-  //@edu.umd.cs.findbugs.annotations.SuppressWarnings(value = "BC_UNCONFIRMED_CAST")
-  public void eraseSourceFeedback(Request request) {
-    eraseResizeFeedback((ChangeBoundsRequest) request);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Resize
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Figure m_resizeFeedback;
-  private TextFeedback m_textFeedback;
-
-  /**
-   * Sets new width, executed in {@link EditCommand}.
-   */
-  protected void setWidth(final int width) throws Exception {
-    m_column.getPropertyByTitle("width").setValue(width);
-  }
-
-  private Command getResizeCommand(ChangeBoundsRequest request) {
-    final Rectangle newBounds = request.getTransformedRectangle(getHostFigure().getBounds());
-    return new EditCommand(m_column) {
-      @Override
-      protected void executeEdit() throws Exception {
-        setWidth(newBounds.width);
-      }
-    };
-  }
-
-  private void showResizeFeedback(ChangeBoundsRequest request) {
-    if (m_resizeFeedback == null) {
-      // create selection feedback
-      {
-        m_resizeFeedback = new RectangleFigure();
-        m_resizeFeedback.setForeground(IColorConstants.red);
-        addFeedback(m_resizeFeedback);
-      }
-      // create text feedback
-      {
-        m_textFeedback = new TextFeedback(getFeedbackLayer());
-        m_textFeedback.add();
-      }
-    }
-    // prepare bounds
-    Rectangle bounds;
-    {
-      Figure hostFigure = getHostFigure();
-      bounds = request.getTransformedRectangle(hostFigure.getBounds());
-      FigureUtils.translateFigureToAbsolute(hostFigure, bounds.shrink(-1, -1));
-    }
-    // update selection feedback
-    m_resizeFeedback.setBounds(bounds);
-    // update text feedback
-    m_textFeedback.setText(Integer.toString(bounds.width - 2));
-    m_textFeedback.setLocation(request.getLocation().getTranslated(10, 10));
-  }
-
-  private void eraseResizeFeedback(ChangeBoundsRequest request) {
-    // erase selection feedback
-    removeFeedback(m_resizeFeedback);
-    m_resizeFeedback = null;
-    // erase text feedback
-    m_textFeedback.remove();
-    m_textFeedback = null;
-  }
+	private static final String REQ_RESIZE = "resize";
+	private final IObjectInfo m_column;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractColumnSelectionEditPolicy(IObjectInfo column) {
+		m_column = column;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Handles
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected List<Handle> createSelectionHandles() {
+		List<Handle> handles = Lists.newArrayList();
+		// create move column handle
+		MoveHandle moveHandle = new MoveHandle(getHost());
+		moveHandle.setForeground(IColorConstants.red);
+		handles.add(moveHandle);
+		//
+		return handles;
+	}
+
+	@Override
+	protected List<Handle> createStaticHandles() {
+		List<Handle> handles = Lists.newArrayList();
+		// create resize column handle
+		SideResizeHandle resizeHandle =
+				new SideResizeHandle(getHost(), IPositionConstants.RIGHT, 10, true);
+		resizeHandle.setDragTrackerTool(new ResizeTracker(getHost(),
+				IPositionConstants.EAST,
+				REQ_RESIZE));
+		handles.add(resizeHandle);
+		//
+		return handles;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Routing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean understandsRequest(Request request) {
+		return super.understandsRequest(request) || request.getType() == REQ_RESIZE;
+	}
+
+	@Override
+	//@edu.umd.cs.findbugs.annotations.SuppressWarnings(value = "BC_UNCONFIRMED_CAST")
+	public Command getCommand(Request request) {
+		return getResizeCommand((ChangeBoundsRequest) request);
+	}
+
+	@Override
+	//@edu.umd.cs.findbugs.annotations.SuppressWarnings(value = "BC_UNCONFIRMED_CAST")
+	public void showSourceFeedback(Request request) {
+		showResizeFeedback((ChangeBoundsRequest) request);
+	}
+
+	@Override
+	//@edu.umd.cs.findbugs.annotations.SuppressWarnings(value = "BC_UNCONFIRMED_CAST")
+	public void eraseSourceFeedback(Request request) {
+		eraseResizeFeedback((ChangeBoundsRequest) request);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Resize
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Figure m_resizeFeedback;
+	private TextFeedback m_textFeedback;
+
+	/**
+	 * Sets new width, executed in {@link EditCommand}.
+	 */
+	protected void setWidth(final int width) throws Exception {
+		m_column.getPropertyByTitle("width").setValue(width);
+	}
+
+	private Command getResizeCommand(ChangeBoundsRequest request) {
+		final Rectangle newBounds = request.getTransformedRectangle(getHostFigure().getBounds());
+		return new EditCommand(m_column) {
+			@Override
+			protected void executeEdit() throws Exception {
+				setWidth(newBounds.width);
+			}
+		};
+	}
+
+	private void showResizeFeedback(ChangeBoundsRequest request) {
+		if (m_resizeFeedback == null) {
+			// create selection feedback
+			{
+				m_resizeFeedback = new RectangleFigure();
+				m_resizeFeedback.setForeground(IColorConstants.red);
+				addFeedback(m_resizeFeedback);
+			}
+			// create text feedback
+			{
+				m_textFeedback = new TextFeedback(getFeedbackLayer());
+				m_textFeedback.add();
+			}
+		}
+		// prepare bounds
+		Rectangle bounds;
+		{
+			Figure hostFigure = getHostFigure();
+			bounds = request.getTransformedRectangle(hostFigure.getBounds());
+			FigureUtils.translateFigureToAbsolute(hostFigure, bounds.shrink(-1, -1));
+		}
+		// update selection feedback
+		m_resizeFeedback.setBounds(bounds);
+		// update text feedback
+		m_textFeedback.setText(Integer.toString(bounds.width - 2));
+		m_textFeedback.setLocation(request.getLocation().getTranslated(10, 10));
+	}
+
+	private void eraseResizeFeedback(ChangeBoundsRequest request) {
+		// erase selection feedback
+		removeFeedback(m_resizeFeedback);
+		m_resizeFeedback = null;
+		// erase text feedback
+		m_textFeedback.remove();
+		m_textFeedback = null;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/layout/generic/AbstractPopupFigure.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/layout/generic/AbstractPopupFigure.java
index 6ea9bf408..c0f33b4c4 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/layout/generic/AbstractPopupFigure.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/layout/generic/AbstractPopupFigure.java
@@ -34,94 +34,94 @@
  * @coverage core.gef.policy.generic
  */
 public abstract class AbstractPopupFigure extends Figure {
-  private static final int MARGIN = 6;
-  private static final Color COLOR_BACKGROUND = DrawUtils.getShiftedColor(
-      IColorConstants.white,
-      -32);
-  private static final Color COLOR_FOREGROUND = DrawUtils.getShiftedColor(
-      IColorConstants.white,
-      -64);
-  private final IEditPartViewer m_viewer;
+	private static final int MARGIN = 6;
+	private static final Color COLOR_BACKGROUND = DrawUtils.getShiftedColor(
+			IColorConstants.white,
+			-32);
+	private static final Color COLOR_FOREGROUND = DrawUtils.getShiftedColor(
+			IColorConstants.white,
+			-64);
+	private final IEditPartViewer m_viewer;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Creates new {@link AbstractPopupFigure}.
-   *
-   * @param width
-   *          the width of the image.
-   * @param height
-   *          the height of the image.
-   */
-  public AbstractPopupFigure(IEditPartViewer viewer, int width, int height) {
-    m_viewer = viewer;
-    // configure figure
-    setSize(width + MARGIN, height + MARGIN);
-    setBackground(COLOR_BACKGROUND);
-    setForeground(COLOR_FOREGROUND);
-    setCursor(ICursorConstants.HAND);
-    // add mouse listener
-    addMouseListener(new IMouseListener() {
-      @Override
-      public void mouseDown(MouseEvent event) {
-        event.consume();
-        // prepare IMenuManager
-        MenuManager manager = new MenuManager();
-        fillMenu(manager);
-        // open context menu
-        Control control = m_viewer.getControl();
-        Menu menu = manager.createContextMenu(control);
-        menu.setVisible(true);
-      }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Creates new {@link AbstractPopupFigure}.
+	 *
+	 * @param width
+	 *          the width of the image.
+	 * @param height
+	 *          the height of the image.
+	 */
+	public AbstractPopupFigure(IEditPartViewer viewer, int width, int height) {
+		m_viewer = viewer;
+		// configure figure
+		setSize(width + MARGIN, height + MARGIN);
+		setBackground(COLOR_BACKGROUND);
+		setForeground(COLOR_FOREGROUND);
+		setCursor(ICursorConstants.HAND);
+		// add mouse listener
+		addMouseListener(new IMouseListener() {
+			@Override
+			public void mouseDown(MouseEvent event) {
+				event.consume();
+				// prepare IMenuManager
+				MenuManager manager = new MenuManager();
+				fillMenu(manager);
+				// open context menu
+				Control control = m_viewer.getControl();
+				Menu menu = manager.createContextMenu(control);
+				menu.setVisible(true);
+			}
 
-      @Override
-      public void mouseUp(MouseEvent event) {
-      }
+			@Override
+			public void mouseUp(MouseEvent event) {
+			}
 
-      @Override
-      public void mouseDoubleClick(MouseEvent event) {
-      }
-    });
-  }
+			@Override
+			public void mouseDoubleClick(MouseEvent event) {
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Paint
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void paintClientArea(Graphics graphics) {
-    Rectangle clientArea = getClientArea();
-    // draw filled rectangle
-    graphics.fillRectangle(clientArea);
-    graphics.drawRectangle(clientArea.getResized(-1, -1));
-    // draw image
-    {
-      Image image = getImage();
-      if (image != null) {
-        org.eclipse.swt.graphics.Rectangle imageBounds = image.getBounds();
-        int x = (clientArea.width - imageBounds.width) / 2;
-        int y = (clientArea.height - imageBounds.height) / 2;
-        graphics.drawImage(image, x, y);
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Paint
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void paintClientArea(Graphics graphics) {
+		Rectangle clientArea = getClientArea();
+		// draw filled rectangle
+		graphics.fillRectangle(clientArea);
+		graphics.drawRectangle(clientArea.getResized(-1, -1));
+		// draw image
+		{
+			Image image = getImage();
+			if (image != null) {
+				org.eclipse.swt.graphics.Rectangle imageBounds = image.getBounds();
+				int x = (clientArea.width - imageBounds.width) / 2;
+				int y = (clientArea.height - imageBounds.height) / 2;
+				graphics.drawImage(image, x, y);
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Abstract methods
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the image to display.
-   */
-  protected abstract Image getImage();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Abstract methods
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the image to display.
+	 */
+	protected abstract Image getImage();
 
-  /**
-   * Creates the actions on given {@link IMenuManager}.
-   */
-  protected abstract void fillMenu(IMenuManager manager);
+	/**
+	 * Creates the actions on given {@link IMenuManager}.
+	 */
+	protected abstract void fillMenu(IMenuManager manager);
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/layout/generic/GenericEditPolicyFactory.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/layout/generic/GenericEditPolicyFactory.java
index ad36fa315..b2044734e 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/layout/generic/GenericEditPolicyFactory.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/layout/generic/GenericEditPolicyFactory.java
@@ -22,10 +22,10 @@
  * @coverage core.gef.policy
  */
 public final class GenericEditPolicyFactory {
-  /**
-   * @return the {@link LayoutEditPolicy} for {@link FlowContainer}.
-   */
-  public static LayoutEditPolicy createFlow(ObjectInfo model, FlowContainer container) {
-    return new FlowContainerLayoutEditPolicy(model, container);
-  }
+	/**
+	 * @return the {@link LayoutEditPolicy} for {@link FlowContainer}.
+	 */
+	public static LayoutEditPolicy createFlow(ObjectInfo model, FlowContainer container) {
+		return new FlowContainerLayoutEditPolicy(model, container);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/layout/grid/AbstractGridHelper.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/layout/grid/AbstractGridHelper.java
index ca0d98de0..f832af9a3 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/layout/grid/AbstractGridHelper.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/layout/grid/AbstractGridHelper.java
@@ -44,302 +44,302 @@
  * @coverage core.gef.policy.grid
  */
 public abstract class AbstractGridHelper {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Colors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final Color BORDER_COLOR = new Color(null, 250, 165, 165);
-  private static final Color EXISTING_COLOR = new Color(null, 219, 158, 158);
-  private static final Color VIRTUAL_COLOR = new Color(null, 240, 204, 204);
-  private static final Color SELECTION_COLOR = DrawUtils.getShiftedColor(
-      IColorConstants.lightGray,
-      -16);
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance fields
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final GraphicalEditPolicy m_editPolicy;
-  private final Color m_borderColor;
-  private final Color m_existingLineColor;
-  private final Color m_virtualLineColor;
-  private Rectangle hostClientArea;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Colors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final Color BORDER_COLOR = new Color(null, 250, 165, 165);
+	private static final Color EXISTING_COLOR = new Color(null, 219, 158, 158);
+	private static final Color VIRTUAL_COLOR = new Color(null, 240, 204, 204);
+	private static final Color SELECTION_COLOR = DrawUtils.getShiftedColor(
+			IColorConstants.lightGray,
+			-16);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance fields
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final GraphicalEditPolicy m_editPolicy;
+	private final Color m_borderColor;
+	private final Color m_existingLineColor;
+	private final Color m_virtualLineColor;
+	private Rectangle hostClientArea;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractGridHelper(GraphicalEditPolicy editPolicy, boolean forTarget) {
-    m_editPolicy = editPolicy;
-    // colors
-    if (forTarget) {
-      m_borderColor = BORDER_COLOR;
-      m_existingLineColor = EXISTING_COLOR;
-      m_virtualLineColor = VIRTUAL_COLOR;
-    } else {
-      m_borderColor = null;
-      m_existingLineColor = SELECTION_COLOR;
-      m_virtualLineColor = null;
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractGridHelper(GraphicalEditPolicy editPolicy, boolean forTarget) {
+		m_editPolicy = editPolicy;
+		// colors
+		if (forTarget) {
+			m_borderColor = BORDER_COLOR;
+			m_existingLineColor = EXISTING_COLOR;
+			m_virtualLineColor = VIRTUAL_COLOR;
+		} else {
+			m_borderColor = null;
+			m_existingLineColor = SELECTION_COLOR;
+			m_virtualLineColor = null;
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link IGridInfo} for container.
-   */
-  protected abstract IGridInfo getGridInfo();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link IGridInfo} for container.
+	 */
+	protected abstract IGridInfo getGridInfo();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Feedback
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Figure m_gridFigure = null;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Feedback
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Figure m_gridFigure = null;
 
-  private class RootFigureListener implements IFigureListener {
-    private Figure m_rootFigure;
+	private class RootFigureListener implements IFigureListener {
+		private Figure m_rootFigure;
 
-    @Override
-    public void figureMoved(Figure source) {
-      if (source == m_rootFigure) {
-        // correct grid figure bounds according host figure
-        prepareHostClientArea();
-        translateModelToFeedback(hostClientArea);
-        m_gridFigure.setBounds(hostClientArea);
-      }
-    }
+		@Override
+		public void figureMoved(Figure source) {
+			if (source == m_rootFigure) {
+				// correct grid figure bounds according host figure
+				prepareHostClientArea();
+				translateModelToFeedback(hostClientArea);
+				m_gridFigure.setBounds(hostClientArea);
+			}
+		}
 
-    @Override
-    public void figureReparent(Figure source, Figure oldParent, Figure newParent) {
-    }
+		@Override
+		public void figureReparent(Figure source, Figure oldParent, Figure newParent) {
+		}
 
-    void install(Figure rootFigure) {
-      if (m_rootFigure != null) {
-        uninstall();
-      }
-      if (rootFigure != null) {
-        rootFigure.addFigureListener(this);
-        m_rootFigure = rootFigure;
-      }
-    }
+		void install(Figure rootFigure) {
+			if (m_rootFigure != null) {
+				uninstall();
+			}
+			if (rootFigure != null) {
+				rootFigure.addFigureListener(this);
+				m_rootFigure = rootFigure;
+			}
+		}
 
-    void uninstall() {
-      if (m_rootFigure != null) {
-        m_rootFigure.removeFigureListener(this);
-        m_rootFigure = null;
-      }
-    }
-  }
+		void uninstall() {
+			if (m_rootFigure != null) {
+				m_rootFigure.removeFigureListener(this);
+				m_rootFigure = null;
+			}
+		}
+	}
 
-  private final RootFigureListener m_rootFigureListener = new RootFigureListener();
+	private final RootFigureListener m_rootFigureListener = new RootFigureListener();
 
-  /**
-   * Shows the grid feedback.
-   */
-  public final void showGridFeedback() {
-    if (m_gridFigure != null) {
-      return;
-    }
-    // create grid figure
-    m_gridFigure = new Figure();
-    // install listener on root model figure
-    {
-      ObjectInfo rootObjectInfo = ((ObjectInfo) getHost().getModel()).getRoot();
-      GraphicalEditPart rootEditPart =
-          (GraphicalEditPart) getHost().getViewer().getEditPartByModel(rootObjectInfo);
-      m_rootFigureListener.install(rootEditPart.getFigure());
-    }
-    // prepare grid information
-    IGridInfo gridInfo = getGridInfo();
-    Interval[] columnIntervals = gridInfo.getColumnIntervals();
-    Interval[] rowIntervals = gridInfo.getRowIntervals();
-    // prepare host information
-    prepareHostClientArea();
-    hostClientArea.crop(gridInfo.getInsets());
-    // add horizontal lines
-    {
-      int y = hostClientArea.top();
-      // add existing lines
-      if (columnIntervals.length != 0) {
-        int x1 = hostClientArea.left();
-        int x2 = columnIntervals[columnIntervals.length - 1].end();
-        for (Interval interval : rowIntervals) {
-          {
-            y = interval.begin();
-            addGridLine(x1, y, x2, y, m_existingLineColor);
-            addGridLine(x2, y, hostClientArea.right(), y, m_virtualLineColor);
-          }
-          {
-            y = interval.end();
-            addGridLine(x1, y, x2, y, m_existingLineColor);
-            addGridLine(x2, y, hostClientArea.right(), y, m_virtualLineColor);
-          }
-        }
-      }
-      // add virtual lines
-      if (gridInfo.hasVirtualRows()) {
-        while (true) {
-          y += gridInfo.getVirtualRowGap();
-          if (y >= hostClientArea.bottom()) {
-            break;
-          }
-          addGridLine(hostClientArea.left(), y, hostClientArea.right(), y, m_virtualLineColor);
-          //
-          y += gridInfo.getVirtualRowSize();
-          if (y >= hostClientArea.bottom()) {
-            break;
-          }
-          addGridLine(hostClientArea.left(), y, hostClientArea.right(), y, m_virtualLineColor);
-        }
-      }
-    }
-    // add vertical lines
-    {
-      int x = hostClientArea.left();
-      // add existing lines
-      if (rowIntervals.length != 0) {
-        int y1 = hostClientArea.top();
-        int y2 = rowIntervals[rowIntervals.length - 1].end();
-        for (Interval interval : columnIntervals) {
-          {
-            x = interval.begin();
-            addGridLine(x, y1, x, y2, m_existingLineColor);
-            addGridLine(x, y2, x, hostClientArea.bottom(), m_virtualLineColor);
-          }
-          {
-            x = interval.end();
-            addGridLine(x, y1, x, y2, m_existingLineColor);
-            addGridLine(x, y2, x, hostClientArea.bottom(), m_virtualLineColor);
-          }
-        }
-      }
-      // add virtual lines
-      if (gridInfo.hasVirtualColumns()) {
-        while (true) {
-          //
-          x += gridInfo.getVirtualColumnGap();
-          if (x >= hostClientArea.right()) {
-            break;
-          }
-          addGridLine(x, hostClientArea.top(), x, hostClientArea.bottom(), m_virtualLineColor);
-          //
-          x += gridInfo.getVirtualRowSize();
-          if (x >= hostClientArea.right()) {
-            break;
-          }
-          addGridLine(x, hostClientArea.top(), x, hostClientArea.bottom(), m_virtualLineColor);
-        }
-      }
-    }
-    // add border around container
-    {
-      RectangleFigure borderFigure = new RectangleFigure();
-      borderFigure.setForeground(m_borderColor);
-      borderFigure.setBounds(hostClientArea);
-      m_gridFigure.add(borderFigure);
-    }
-    // add feedback figure
-    prepareHostClientArea();
-    translateModelToFeedback(hostClientArea);
-    m_gridFigure.setBounds(hostClientArea);
-    getHost().getViewer().getLayer(IEditPartViewer.HANDLE_LAYER_SUB_2).add(m_gridFigure);
-  }
+	/**
+	 * Shows the grid feedback.
+	 */
+	public final void showGridFeedback() {
+		if (m_gridFigure != null) {
+			return;
+		}
+		// create grid figure
+		m_gridFigure = new Figure();
+		// install listener on root model figure
+		{
+			ObjectInfo rootObjectInfo = ((ObjectInfo) getHost().getModel()).getRoot();
+			GraphicalEditPart rootEditPart =
+					(GraphicalEditPart) getHost().getViewer().getEditPartByModel(rootObjectInfo);
+			m_rootFigureListener.install(rootEditPart.getFigure());
+		}
+		// prepare grid information
+		IGridInfo gridInfo = getGridInfo();
+		Interval[] columnIntervals = gridInfo.getColumnIntervals();
+		Interval[] rowIntervals = gridInfo.getRowIntervals();
+		// prepare host information
+		prepareHostClientArea();
+		hostClientArea.crop(gridInfo.getInsets());
+		// add horizontal lines
+		{
+			int y = hostClientArea.top();
+			// add existing lines
+			if (columnIntervals.length != 0) {
+				int x1 = hostClientArea.left();
+				int x2 = columnIntervals[columnIntervals.length - 1].end();
+				for (Interval interval : rowIntervals) {
+					{
+						y = interval.begin();
+						addGridLine(x1, y, x2, y, m_existingLineColor);
+						addGridLine(x2, y, hostClientArea.right(), y, m_virtualLineColor);
+					}
+					{
+						y = interval.end();
+						addGridLine(x1, y, x2, y, m_existingLineColor);
+						addGridLine(x2, y, hostClientArea.right(), y, m_virtualLineColor);
+					}
+				}
+			}
+			// add virtual lines
+			if (gridInfo.hasVirtualRows()) {
+				while (true) {
+					y += gridInfo.getVirtualRowGap();
+					if (y >= hostClientArea.bottom()) {
+						break;
+					}
+					addGridLine(hostClientArea.left(), y, hostClientArea.right(), y, m_virtualLineColor);
+					//
+					y += gridInfo.getVirtualRowSize();
+					if (y >= hostClientArea.bottom()) {
+						break;
+					}
+					addGridLine(hostClientArea.left(), y, hostClientArea.right(), y, m_virtualLineColor);
+				}
+			}
+		}
+		// add vertical lines
+		{
+			int x = hostClientArea.left();
+			// add existing lines
+			if (rowIntervals.length != 0) {
+				int y1 = hostClientArea.top();
+				int y2 = rowIntervals[rowIntervals.length - 1].end();
+				for (Interval interval : columnIntervals) {
+					{
+						x = interval.begin();
+						addGridLine(x, y1, x, y2, m_existingLineColor);
+						addGridLine(x, y2, x, hostClientArea.bottom(), m_virtualLineColor);
+					}
+					{
+						x = interval.end();
+						addGridLine(x, y1, x, y2, m_existingLineColor);
+						addGridLine(x, y2, x, hostClientArea.bottom(), m_virtualLineColor);
+					}
+				}
+			}
+			// add virtual lines
+			if (gridInfo.hasVirtualColumns()) {
+				while (true) {
+					//
+					x += gridInfo.getVirtualColumnGap();
+					if (x >= hostClientArea.right()) {
+						break;
+					}
+					addGridLine(x, hostClientArea.top(), x, hostClientArea.bottom(), m_virtualLineColor);
+					//
+					x += gridInfo.getVirtualRowSize();
+					if (x >= hostClientArea.right()) {
+						break;
+					}
+					addGridLine(x, hostClientArea.top(), x, hostClientArea.bottom(), m_virtualLineColor);
+				}
+			}
+		}
+		// add border around container
+		{
+			RectangleFigure borderFigure = new RectangleFigure();
+			borderFigure.setForeground(m_borderColor);
+			borderFigure.setBounds(hostClientArea);
+			m_gridFigure.add(borderFigure);
+		}
+		// add feedback figure
+		prepareHostClientArea();
+		translateModelToFeedback(hostClientArea);
+		m_gridFigure.setBounds(hostClientArea);
+		getHost().getViewer().getLayer(IEditPartViewer.HANDLE_LAYER_SUB_2).add(m_gridFigure);
+	}
 
-  /**
-   * Calculate host client area {@link Rectangle}.
-   */
-  private void prepareHostClientArea() {
-    IAbstractComponentInfo containerInfo = (IAbstractComponentInfo) getHost().getModel();
-    hostClientArea = getHost().getFigure().getBounds().getCopy();
-    hostClientArea.crop(containerInfo.getClientAreaInsets());
-    hostClientArea.x = hostClientArea.y = 0;
-  }
+	/**
+	 * Calculate host client area {@link Rectangle}.
+	 */
+	private void prepareHostClientArea() {
+		IAbstractComponentInfo containerInfo = (IAbstractComponentInfo) getHost().getModel();
+		hostClientArea = getHost().getFigure().getBounds().getCopy();
+		hostClientArea.crop(containerInfo.getClientAreaInsets());
+		hostClientArea.x = hostClientArea.y = 0;
+	}
 
-  /**
-   * Adds single line - part of grid to display all cells.<br>
-   * Coordinates should be parent-relative (model).<br>
-   * Begin point is inclusive, end point is exclusive.
-   */
-  private void addGridLine(int x1, int y1, int x2, int y2, Color color) {
-    if (color != null) {
-      Polyline line = new Polyline();
-      line.setForeground(color);
-      // prepare points
-      Point p1 = new Point(x1, y1);
-      Point p2 = new Point(x2, y2);
-      if (getGridInfo().isRTL()) {
-        p1.x = hostClientArea.width - p1.x;
-        p2.x = hostClientArea.width - p2.x;
-      }
-      // end points are exclusive
-      if (x1 == x2) {
-        p2.y--;
-      }
-      if (y1 == y2) {
-        p2.x--;
-      }
-      // add points
-      line.addPoint(p1);
-      line.addPoint(p2);
-      // add line
-      m_gridFigure.add(line);
-    }
-  }
+	/**
+	 * Adds single line - part of grid to display all cells.<br>
+	 * Coordinates should be parent-relative (model).<br>
+	 * Begin point is inclusive, end point is exclusive.
+	 */
+	private void addGridLine(int x1, int y1, int x2, int y2, Color color) {
+		if (color != null) {
+			Polyline line = new Polyline();
+			line.setForeground(color);
+			// prepare points
+			Point p1 = new Point(x1, y1);
+			Point p2 = new Point(x2, y2);
+			if (getGridInfo().isRTL()) {
+				p1.x = hostClientArea.width - p1.x;
+				p2.x = hostClientArea.width - p2.x;
+			}
+			// end points are exclusive
+			if (x1 == x2) {
+				p2.y--;
+			}
+			if (y1 == y2) {
+				p2.x--;
+			}
+			// add points
+			line.addPoint(p1);
+			line.addPoint(p2);
+			// add line
+			m_gridFigure.add(line);
+		}
+	}
 
-  /**
-   * Erases the grid feedback.
-   */
-  public final void eraseGridFeedback() {
-    if (m_gridFigure != null) {
-      m_rootFigureListener.uninstall();
-      FigureUtils.removeFigure(m_gridFigure);
-      m_gridFigure = null;
-    }
-  }
+	/**
+	 * Erases the grid feedback.
+	 */
+	public final void eraseGridFeedback() {
+		if (m_gridFigure != null) {
+			m_rootFigureListener.uninstall();
+			FigureUtils.removeFigure(m_gridFigure);
+			m_gridFigure = null;
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the layout model for this {@link EditPolicy}.
-   */
-  protected final Object getAbstractLayout() {
-    try {
-      Field field = m_editPolicy.getClass().getDeclaredField("m_layout");
-      field.setAccessible(true);
-      return field.get(m_editPolicy);
-    } catch (Throwable e) {
-      throw ReflectionUtils.propagate(e);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the layout model for this {@link EditPolicy}.
+	 */
+	protected final Object getAbstractLayout() {
+		try {
+			Field field = m_editPolicy.getClass().getDeclaredField("m_layout");
+			field.setAccessible(true);
+			return field.get(m_editPolicy);
+		} catch (Throwable e) {
+			throw ReflectionUtils.propagate(e);
+		}
+	}
 
-  /**
-   * @return the host {@link EditPart}.
-   */
-  protected GraphicalEditPart getHost() {
-    if (m_editPolicy instanceof LayoutEditPolicy) {
-      return m_editPolicy.getHost();
-    } else {
-      return (GraphicalEditPart) m_editPolicy.getHost().getParent();
-    }
-  }
+	/**
+	 * @return the host {@link EditPart}.
+	 */
+	protected GraphicalEditPart getHost() {
+		if (m_editPolicy instanceof LayoutEditPolicy) {
+			return m_editPolicy.getHost();
+		} else {
+			return (GraphicalEditPart) m_editPolicy.getHost().getParent();
+		}
+	}
 
-  /**
-   * Translates given {@link Translatable} from model coordinates into feedback layer coordinates.
-   */
-  protected void translateModelToFeedback(Translatable t) {
-    if (m_editPolicy instanceof LayoutEditPolicy) {
-      PolicyUtils.translateModelToFeedback((LayoutEditPolicy) m_editPolicy, t);
-    } else {
-      PolicyUtils.translateModelToFeedback((SelectionEditPolicy) m_editPolicy, t);
-    }
-  }
+	/**
+	 * Translates given {@link Translatable} from model coordinates into feedback layer coordinates.
+	 */
+	protected void translateModelToFeedback(Translatable t) {
+		if (m_editPolicy instanceof LayoutEditPolicy) {
+			PolicyUtils.translateModelToFeedback((LayoutEditPolicy) m_editPolicy, t);
+		} else {
+			PolicyUtils.translateModelToFeedback((SelectionEditPolicy) m_editPolicy, t);
+		}
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/layout/grid/AbstractGridLayoutEditPolicy.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/layout/grid/AbstractGridLayoutEditPolicy.java
index b04ffbd8d..42692a9c4 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/layout/grid/AbstractGridLayoutEditPolicy.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/layout/grid/AbstractGridLayoutEditPolicy.java
@@ -44,327 +44,327 @@
  * @coverage core.gef.policy.grid
  */
 public abstract class AbstractGridLayoutEditPolicy extends LayoutEditPolicy
-    implements
-      IHeadersProvider {
-  protected AbstractGridHelper m_gridTargetHelper;
-  protected AbstractGridHelper m_gridSelectionHelper;
+implements
+IHeadersProvider {
+	protected AbstractGridHelper m_gridTargetHelper;
+	protected AbstractGridHelper m_gridSelectionHelper;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractGridLayoutEditPolicy(ObjectInfo layout) {
-    // add listeners
-    new BroadcastListenerHelper(layout, this, new ObjectEventListener() {
-      @Override
-      public void refreshed2() throws Exception {
-        refreshSelectionGrid();
-      }
-    });
-    new SelectionListenerHelper(this, new IEditPartSelectionListener() {
-      @Override
-      public void selectionChanged(EditPart editPart) {
-        refreshSelectionGrid();
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractGridLayoutEditPolicy(ObjectInfo layout) {
+		// add listeners
+		new BroadcastListenerHelper(layout, this, new ObjectEventListener() {
+			@Override
+			public void refreshed2() throws Exception {
+				refreshSelectionGrid();
+			}
+		});
+		new SelectionListenerHelper(this, new IEditPartSelectionListener() {
+			@Override
+			public void selectionChanged(EditPart editPart) {
+				refreshSelectionGrid();
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link IGridInfo} for host container.
-   */
-  protected abstract IGridInfo getGridInfo();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link IGridInfo} for host container.
+	 */
+	protected abstract IGridInfo getGridInfo();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Selection
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void deactivate() {
-    super.deactivate();
-    m_gridSelectionHelper.eraseGridFeedback();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Selection
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void deactivate() {
+		super.deactivate();
+		m_gridSelectionHelper.eraseGridFeedback();
+	}
 
-  /**
-   * Shows/erases the grid on host {@link EditPart} selection.
-   */
-  private void refreshSelectionGrid() {
-    m_gridSelectionHelper.eraseGridFeedback();
-    if (getHost().getSelected() != EditPart.SELECTED_NONE) {
-      EditPolicy parentLayoutEditPolicy =
-          getHost().getParent().getEditPolicy(EditPolicy.LAYOUT_ROLE);
-      // show grid only if parent layout is not grid too (to avoid two grids at same time)
-      if (!(parentLayoutEditPolicy instanceof AbstractGridLayoutEditPolicy)) {
-        m_gridSelectionHelper.showGridFeedback();
-      }
-    }
-  }
+	/**
+	 * Shows/erases the grid on host {@link EditPart} selection.
+	 */
+	private void refreshSelectionGrid() {
+		m_gridSelectionHelper.eraseGridFeedback();
+		if (getHost().getSelected() != EditPart.SELECTED_NONE) {
+			EditPolicy parentLayoutEditPolicy =
+					getHost().getParent().getEditPolicy(EditPolicy.LAYOUT_ROLE);
+			// show grid only if parent layout is not grid too (to avoid two grids at same time)
+			if (!(parentLayoutEditPolicy instanceof AbstractGridLayoutEditPolicy)) {
+				m_gridSelectionHelper.showGridFeedback();
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Feedback
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected GridTarget m_target;
-  private final Figure m_targetFeedback = new SemiTransparentFigure(64);
-  private TextFeedback m_textFeedback;
-  private static final Color m_goodTargetFillColor = SwtResourceManager.getColor(0, 255, 0);
-  private static final Color m_goodTargetBorderColor = SwtResourceManager.getColor(192, 255, 192);
-  private static final Color m_badTargetFillColor = SwtResourceManager.getColor(255, 0, 0);
-  private static final Color m_badTargetBorderColor = SwtResourceManager.getColor(255, 192, 192);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Feedback
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected GridTarget m_target;
+	private final Figure m_targetFeedback = new SemiTransparentFigure(64);
+	private TextFeedback m_textFeedback;
+	private static final Color m_goodTargetFillColor = SwtResourceManager.getColor(0, 255, 0);
+	private static final Color m_goodTargetBorderColor = SwtResourceManager.getColor(192, 255, 192);
+	private static final Color m_badTargetFillColor = SwtResourceManager.getColor(255, 0, 0);
+	private static final Color m_badTargetBorderColor = SwtResourceManager.getColor(255, 192, 192);
 
-  @Override
-  protected final void showLayoutTargetFeedback(Request request) {
-    IGridInfo gridInfo = getGridInfo();
-    m_gridTargetHelper.showGridFeedback();
-    //
-    try {
-      Point location = ((IDropRequest) request).getLocation();
-      updateGridTarget(location);
-      removeTargetFigures();
-      // show insert feedbacks
-      showInsertFeedbacks(m_target.m_columnInsertBounds, m_target.m_rowInsertBounds);
-      // show target feedbacks
-      if (!m_target.m_feedbackBounds.isEmpty()) {
-        validateTarget(gridInfo);
-        // try to show better feedback than "invalid"
-        if (!m_target.m_valid) {
-          if (showOccupiedLayoutTargetFeedback(request)) {
-            return;
-          }
-        } else {
-          eraseOccupiedLayoutTargetFeedback(request);
-        }
-        // show target rectangle
-        {
-          if (m_target.m_valid) {
-            m_targetFeedback.setBackground(m_goodTargetFillColor);
-            m_targetFeedback.setBorder(new LineBorder(m_goodTargetBorderColor));
-          } else {
-            m_targetFeedback.setBackground(m_badTargetFillColor);
-            m_targetFeedback.setBorder(new LineBorder(m_badTargetBorderColor));
-          }
-          getLayer(IEditPartViewer.HANDLE_LAYER_SUB_1).add(m_targetFeedback);
-          //
-          Rectangle bounds = m_target.m_feedbackBounds.getCopy();
-          bounds.shrink(1, 1);
-          PolicyUtils.translateModelToFeedback(this, bounds);
-          m_targetFeedback.setBounds(bounds);
-        }
-        // show text feedback
-        {
-          if (m_textFeedback == null) {
-            m_textFeedback = new TextFeedback(getFeedbackLayer());
-            m_textFeedback.add();
-          }
-          m_textFeedback.setText("column " + m_target.m_column + ", row " + m_target.m_row);
-          m_textFeedback.setLocation(location.getTranslated(15, 33));
-        }
-      }
-    } catch (Throwable e) {
-      DesignerPlugin.log(e);
-    }
-  }
+	@Override
+	protected final void showLayoutTargetFeedback(Request request) {
+		IGridInfo gridInfo = getGridInfo();
+		m_gridTargetHelper.showGridFeedback();
+		//
+		try {
+			Point location = ((IDropRequest) request).getLocation();
+			updateGridTarget(location);
+			removeTargetFigures();
+			// show insert feedbacks
+			showInsertFeedbacks(m_target.m_columnInsertBounds, m_target.m_rowInsertBounds);
+			// show target feedbacks
+			if (!m_target.m_feedbackBounds.isEmpty()) {
+				validateTarget(gridInfo);
+				// try to show better feedback than "invalid"
+				if (!m_target.m_valid) {
+					if (showOccupiedLayoutTargetFeedback(request)) {
+						return;
+					}
+				} else {
+					eraseOccupiedLayoutTargetFeedback(request);
+				}
+				// show target rectangle
+				{
+					if (m_target.m_valid) {
+						m_targetFeedback.setBackground(m_goodTargetFillColor);
+						m_targetFeedback.setBorder(new LineBorder(m_goodTargetBorderColor));
+					} else {
+						m_targetFeedback.setBackground(m_badTargetFillColor);
+						m_targetFeedback.setBorder(new LineBorder(m_badTargetBorderColor));
+					}
+					getLayer(IEditPartViewer.HANDLE_LAYER_SUB_1).add(m_targetFeedback);
+					//
+					Rectangle bounds = m_target.m_feedbackBounds.getCopy();
+					bounds.shrink(1, 1);
+					PolicyUtils.translateModelToFeedback(this, bounds);
+					m_targetFeedback.setBounds(bounds);
+				}
+				// show text feedback
+				{
+					if (m_textFeedback == null) {
+						m_textFeedback = new TextFeedback(getFeedbackLayer());
+						m_textFeedback.add();
+					}
+					m_textFeedback.setText("column " + m_target.m_column + ", row " + m_target.m_row);
+					m_textFeedback.setLocation(location.getTranslated(15, 33));
+				}
+			}
+		} catch (Throwable e) {
+			DesignerPlugin.log(e);
+		}
+	}
 
-  /**
-   * Checks if {@link #m_target} points into some filled cell and update "valid" status.
-   */
-  private void validateTarget(IGridInfo gridInfo) {
-    IAbstractComponentInfo targetComponent = null;
-    // column insert
-    if (targetComponent == null && m_target.m_columnInsert) {
-      IAbstractComponentInfo leftTarget =
-          gridInfo.getOccupied(m_target.m_column - 1, m_target.m_row);
-      IAbstractComponentInfo rightTarget = gridInfo.getOccupied(m_target.m_column, m_target.m_row);
-      if (leftTarget != null && leftTarget == rightTarget) {
-        targetComponent = leftTarget;
-      }
-    }
-    // row insert
-    if (targetComponent == null && m_target.m_rowInsert) {
-      IAbstractComponentInfo topTarget =
-          gridInfo.getOccupied(m_target.m_column, m_target.m_row - 1);
-      IAbstractComponentInfo bottomTarget = gridInfo.getOccupied(m_target.m_column, m_target.m_row);
-      if (topTarget != null && topTarget == bottomTarget) {
-        targetComponent = topTarget;
-      }
-    }
-    // no insert
-    if (targetComponent == null && !(m_target.m_columnInsert || m_target.m_rowInsert)) {
-      targetComponent = gridInfo.getOccupied(m_target.m_column, m_target.m_row);
-    }
-    // update "invalid" target
-    if (targetComponent != null) {
-      m_target.m_valid = false;
-      Rectangle targetCells = gridInfo.getComponentCells(targetComponent);
-      if (targetCells != null) {
-        m_target.m_feedbackBounds = gridInfo.getCellsRectangle(targetCells);
-      }
-    }
-  }
+	/**
+	 * Checks if {@link #m_target} points into some filled cell and update "valid" status.
+	 */
+	private void validateTarget(IGridInfo gridInfo) {
+		IAbstractComponentInfo targetComponent = null;
+		// column insert
+		if (targetComponent == null && m_target.m_columnInsert) {
+			IAbstractComponentInfo leftTarget =
+					gridInfo.getOccupied(m_target.m_column - 1, m_target.m_row);
+			IAbstractComponentInfo rightTarget = gridInfo.getOccupied(m_target.m_column, m_target.m_row);
+			if (leftTarget != null && leftTarget == rightTarget) {
+				targetComponent = leftTarget;
+			}
+		}
+		// row insert
+		if (targetComponent == null && m_target.m_rowInsert) {
+			IAbstractComponentInfo topTarget =
+					gridInfo.getOccupied(m_target.m_column, m_target.m_row - 1);
+			IAbstractComponentInfo bottomTarget = gridInfo.getOccupied(m_target.m_column, m_target.m_row);
+			if (topTarget != null && topTarget == bottomTarget) {
+				targetComponent = topTarget;
+			}
+		}
+		// no insert
+		if (targetComponent == null && !(m_target.m_columnInsert || m_target.m_rowInsert)) {
+			targetComponent = gridInfo.getOccupied(m_target.m_column, m_target.m_row);
+		}
+		// update "invalid" target
+		if (targetComponent != null) {
+			m_target.m_valid = false;
+			Rectangle targetCells = gridInfo.getComponentCells(targetComponent);
+			if (targetCells != null) {
+				m_target.m_feedbackBounds = gridInfo.getCellsRectangle(targetCells);
+			}
+		}
+	}
 
-  @Override
-  protected final void eraseLayoutTargetFeedback(Request request) {
-    m_gridTargetHelper.eraseGridFeedback();
-    removeTargetFigures();
-    eraseOccupiedLayoutTargetFeedback(request);
-  }
+	@Override
+	protected final void eraseLayoutTargetFeedback(Request request) {
+		m_gridTargetHelper.eraseGridFeedback();
+		removeTargetFigures();
+		eraseOccupiedLayoutTargetFeedback(request);
+	}
 
-  /**
-   * Removes target/insert figures.
-   */
-  private void removeTargetFigures() {
-    eraseInsertFeedbacks();
-    FigureUtils.removeFigure(m_targetFeedback);
-    if (m_textFeedback != null) {
-      m_textFeedback.remove();
-      m_textFeedback = null;
-    }
-  }
+	/**
+	 * Removes target/insert figures.
+	 */
+	private void removeTargetFigures() {
+		eraseInsertFeedbacks();
+		FigureUtils.removeFigure(m_targetFeedback);
+		if (m_textFeedback != null) {
+			m_textFeedback.remove();
+			m_textFeedback = null;
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Additional feedback
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Allows to show feedback for occupied cells, for example cell split for MigLayout. By default we
-   * show "invalid" feedback.
-   *
-   * @return <code>true</code> if request was processed, so "invalid" feedback should not be
-   *         displayed.
-   */
-  protected boolean showOccupiedLayoutTargetFeedback(Request request) {
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Additional feedback
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Allows to show feedback for occupied cells, for example cell split for MigLayout. By default we
+	 * show "invalid" feedback.
+	 *
+	 * @return <code>true</code> if request was processed, so "invalid" feedback should not be
+	 *         displayed.
+	 */
+	protected boolean showOccupiedLayoutTargetFeedback(Request request) {
+		return false;
+	}
 
-  /**
-   * Erases feedback shown in {@link #showOccupiedLayoutTargetFeedback(Request)}.
-   */
-  protected void eraseOccupiedLayoutTargetFeedback(Request request) {
-  }
+	/**
+	 * Erases feedback shown in {@link #showOccupiedLayoutTargetFeedback(Request)}.
+	 */
+	protected void eraseOccupiedLayoutTargetFeedback(Request request) {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Insert feedbacks
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final Figure m_insertColumnFeedback = createInsertFigure();
-  private final Figure m_insertRowFeedback = createInsertFigure();
-  private static final Color m_insertTargetFillColor = new Color(null, 255, 255, 128);
-  private static final Color m_insertTargetBorderColor = new Color(null, 255, 235, 30);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Insert feedbacks
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final Figure m_insertColumnFeedback = createInsertFigure();
+	private final Figure m_insertRowFeedback = createInsertFigure();
+	private static final Color m_insertTargetFillColor = new Color(null, 255, 255, 128);
+	private static final Color m_insertTargetBorderColor = new Color(null, 255, 235, 30);
 
-  /**
-   * @return the {@link Figure} that can be used as "insert feedback".
-   */
-  public static Figure createInsertFigure() {
-    Figure figure = new SemiTransparentFigure(160);
-    figure.setBackground(m_insertTargetFillColor);
-    figure.setBorder(new LineBorder(m_insertTargetBorderColor));
-    return figure;
-  }
+	/**
+	 * @return the {@link Figure} that can be used as "insert feedback".
+	 */
+	public static Figure createInsertFigure() {
+		Figure figure = new SemiTransparentFigure(160);
+		figure.setBackground(m_insertTargetFillColor);
+		figure.setBorder(new LineBorder(m_insertTargetBorderColor));
+		return figure;
+	}
 
-  /**
-   * Shows the column/row insertion feedbacks.
-   *
-   * @param columnBounds
-   *          the column insertion rectangle (in model coordinates), if <code>null</code> no column
-   *          feedback will be displayed.
-   *
-   * @param rowBounds
-   *          the row insertion rectangle (in model coordinates), if <code>null</code> no row
-   *          feedback will be displayed.
-   */
-  public void showInsertFeedbacks(Rectangle columnBounds, Rectangle rowBounds) {
-    removeTargetFigures();
-    // column
-    if (columnBounds != null && !columnBounds.isEmpty()) {
-      getLayer(IEditPartViewer.HANDLE_LAYER_SUB_1).add(m_insertColumnFeedback);
-      //
-      Rectangle bounds = columnBounds.getCopy();
-      PolicyUtils.translateModelToFeedback(this, bounds);
-      m_insertColumnFeedback.setBounds(bounds);
-    }
-    // row
-    if (rowBounds != null && !rowBounds.isEmpty()) {
-      getLayer(IEditPartViewer.HANDLE_LAYER_SUB_1).add(m_insertRowFeedback);
-      //
-      Rectangle bounds = rowBounds.getCopy();
-      PolicyUtils.translateModelToFeedback(this, bounds);
-      m_insertRowFeedback.setBounds(bounds);
-    }
-  }
+	/**
+	 * Shows the column/row insertion feedbacks.
+	 *
+	 * @param columnBounds
+	 *          the column insertion rectangle (in model coordinates), if <code>null</code> no column
+	 *          feedback will be displayed.
+	 *
+	 * @param rowBounds
+	 *          the row insertion rectangle (in model coordinates), if <code>null</code> no row
+	 *          feedback will be displayed.
+	 */
+	public void showInsertFeedbacks(Rectangle columnBounds, Rectangle rowBounds) {
+		removeTargetFigures();
+		// column
+		if (columnBounds != null && !columnBounds.isEmpty()) {
+			getLayer(IEditPartViewer.HANDLE_LAYER_SUB_1).add(m_insertColumnFeedback);
+			//
+			Rectangle bounds = columnBounds.getCopy();
+			PolicyUtils.translateModelToFeedback(this, bounds);
+			m_insertColumnFeedback.setBounds(bounds);
+		}
+		// row
+		if (rowBounds != null && !rowBounds.isEmpty()) {
+			getLayer(IEditPartViewer.HANDLE_LAYER_SUB_1).add(m_insertRowFeedback);
+			//
+			Rectangle bounds = rowBounds.getCopy();
+			PolicyUtils.translateModelToFeedback(this, bounds);
+			m_insertRowFeedback.setBounds(bounds);
+		}
+	}
 
-  /**
-   * Erases insert feedback figures displayed using
-   * {@link #showInsertFeedbacks(Rectangle, Rectangle)}.
-   */
-  public void eraseInsertFeedbacks() {
-    FigureUtils.removeFigure(m_insertColumnFeedback);
-    FigureUtils.removeFigure(m_insertRowFeedback);
-  }
+	/**
+	 * Erases insert feedback figures displayed using
+	 * {@link #showInsertFeedbacks(Rectangle, Rectangle)}.
+	 */
+	public void eraseInsertFeedbacks() {
+		FigureUtils.removeFigure(m_insertColumnFeedback);
+		FigureUtils.removeFigure(m_insertRowFeedback);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Grid target
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * The extract size of "insert feedback" on secondary axis.
-   */
-  protected static final int INSERT_MARGINS = 5;
-  /**
-   * The width of "insert column" feedback between two columns without gap.
-   */
-  public static final int INSERT_COLUMN_SIZE = 7;
-  /**
-   * The width of "insert row" feedback between two rows without gap.
-   */
-  public static final int INSERT_ROW_SIZE = 5;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Grid target
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * The extract size of "insert feedback" on secondary axis.
+	 */
+	protected static final int INSERT_MARGINS = 5;
+	/**
+	 * The width of "insert column" feedback between two columns without gap.
+	 */
+	public static final int INSERT_COLUMN_SIZE = 7;
+	/**
+	 * The width of "insert row" feedback between two rows without gap.
+	 */
+	public static final int INSERT_ROW_SIZE = 5;
 
-  /**
-   * Description for target cell.
-   *
-   * @author scheglov_ke
-   */
-  protected static class GridTarget {
-    public boolean m_valid = true;
-    public int m_column = -1;
-    public boolean m_columnInsert;
-    public int m_row = -1;
-    public boolean m_rowInsert;
-    public Rectangle m_feedbackBounds = new Rectangle();
-    public Rectangle m_columnInsertBounds = new Rectangle();
-    public Rectangle m_rowInsertBounds = new Rectangle();
+	/**
+	 * Description for target cell.
+	 *
+	 * @author scheglov_ke
+	 */
+	protected static class GridTarget {
+		public boolean m_valid = true;
+		public int m_column = -1;
+		public boolean m_columnInsert;
+		public int m_row = -1;
+		public boolean m_rowInsert;
+		public Rectangle m_feedbackBounds = new Rectangle();
+		public Rectangle m_columnInsertBounds = new Rectangle();
+		public Rectangle m_rowInsertBounds = new Rectangle();
 
-    public GridTarget() {
-    }
+		public GridTarget() {
+		}
 
-    @Override
-    public String toString() {
-      return m_column
-          + " "
-          + m_columnInsert
-          + " "
-          + m_row
-          + " "
-          + m_rowInsert
-          + " "
-          + m_feedbackBounds;
-    }
-  }
+		@Override
+		public String toString() {
+			return m_column
+					+ " "
+					+ m_columnInsert
+					+ " "
+					+ m_row
+					+ " "
+					+ m_rowInsert
+					+ " "
+					+ m_feedbackBounds;
+		}
+	}
 
-  /**
-   * Updates the current {@link GridTarget}.
-   *
-   * @param mouseLocation
-   *          the location of mouse in absolute coordinates.
-   */
-  protected abstract void updateGridTarget(Point mouseLocation) throws Exception;
+	/**
+	 * Updates the current {@link GridTarget}.
+	 *
+	 * @param mouseLocation
+	 *          the location of mouse in absolute coordinates.
+	 */
+	protected abstract void updateGridTarget(Point mouseLocation) throws Exception;
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/layout/grid/AbstractGridSelectionEditPolicy.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/layout/grid/AbstractGridSelectionEditPolicy.java
index 3601fcfbb..4b9e3fda5 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/layout/grid/AbstractGridSelectionEditPolicy.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/layout/grid/AbstractGridSelectionEditPolicy.java
@@ -54,601 +54,601 @@
  * @coverage core.gef.policy.grid
  */
 public abstract class AbstractGridSelectionEditPolicy extends SelectionEditPolicy {
-  private final IAbstractComponentInfo m_component;
-  protected final ObjectInfo m_object;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractGridSelectionEditPolicy(IAbstractComponentInfo component) {
-    m_component = component;
-    m_object = m_component.getUnderlyingModel();
-    // add listeners
-    new BroadcastListenerHelper(m_object, this, new ObjectEventListener() {
-      @Override
-      public void refreshed() throws Exception {
-        boolean activePolicy = isActive();
-        boolean activeLayout = isActiveLayout();
-        boolean isSelected = getHost().getSelected() == EditPart.SELECTED_PRIMARY;
-        boolean isDeleted = m_component.isDeleted();
-        if (activePolicy && activeLayout && isSelected && !isDeleted) {
-          hideSelection();
-          showSelection();
-        }
-      }
-    });
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if this layout manager is active on this components parent.
-   */
-  protected abstract boolean isActiveLayout();
-
-  /**
-   * @return the {@link IGridInfo} for host container.
-   */
-  protected abstract IGridInfo getGridInfo();
-
-  /**
-   * @return the cells {@link Rectangle} occupied by host component.
-   */
-  private Rectangle getComponentCells() throws Exception {
-    return getGridInfo().getComponentCells(m_component);
-  }
-
-  /**
-   * @return the pixels {@link Rectangle} of host component.
-   */
-  private Rectangle getComponentCellBounds() throws Exception {
-    Rectangle cells = getComponentCells();
-    return getGridInfo().getCellsRectangle(cells);
-  }
-
-  /**
-   * @return the pixels {@link Rectangle} of host component in feedback.
-   */
-  private Rectangle getComponentCellBounds_atFeedback() throws Exception {
-    Rectangle bounds = getComponentCellBounds();
-    translateModelToFeedback(bounds);
-    return bounds;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Handles
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link MoveHandle} for host component.
-   */
-  protected final MoveHandle createMoveHandle() {
-    MoveHandle moveHandle = new MoveHandle(getHost(), new ILocator() {
-      @Override
-      public void relocate(Figure target) {
-        try {
-          Rectangle bounds = getComponentCellBounds_atFeedback();
-          target.setBounds(bounds);
-        } catch (Throwable e) {
-          DesignerPlugin.log(e);
-        }
-      }
-    });
-    moveHandle.setForeground(IColorConstants.red);
-    return moveHandle;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Selection
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void showSelection() {
-    super.showSelection();
-    if (getHost().getSelected() == EditPart.SELECTED_PRIMARY) {
-      showPrimarySelection();
-      showAlignmentFigures();
-    }
-  }
-
-  @Override
-  protected void hideSelection() {
-    super.hideSelection();
-    hideAlignmentFigures();
-  }
-
-  /**
-   * Shows the selection for primary selected {@link EditPart}.
-   */
-  protected void showPrimarySelection() {
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Cell figures XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final int MIN_LEFT_SPACE = 10;
-  private static final int INITIAL_RIGHT_SPACE = 10;
-  private static final int FIGURES_SPACE = 10;
-  private List<Figure> m_alignmentFigures;
-
-  /**
-   * @return the alignment figure for given component and axis.
-   */
-  protected abstract Figure createAlignmentFigure(IAbstractComponentInfo component,
-      boolean horizontal);
-
-  /**
-   * Shows alignment figures for host {@link EditPart} and its siblings.
-   */
-  public final void showAlignmentFigures() {
-    if (m_alignmentFigures == null) {
-      m_alignmentFigures = Lists.newArrayList();
-      // show cell figures for all children of host's parent
-      {
-        Collection<EditPart> editParts = getHost().getParent().getChildren();
-        for (EditPart editPart : editParts) {
-          showCellFigures(editPart);
-        }
-      }
-    }
-  }
-
-  /**
-   * Hides alignment figures for this host and its siblings.
-   */
-  public final void hideAlignmentFigures() {
-    if (m_alignmentFigures != null) {
-      for (Figure figure : m_alignmentFigures) {
-        figure.getParent().remove(figure);
-      }
-      m_alignmentFigures = null;
-    }
-  }
-
-  /**
-   * Shows all possible cell figures for given edit part.
-   */
-  private void showCellFigures(EditPart editPart) {
-    // check model
-    IAbstractComponentInfo component;
-    {
-      Object model = editPart.getModel();
-      if (!(model instanceof IAbstractComponentInfo)) {
-        return;
-      }
-      component = (IAbstractComponentInfo) model;
-    }
-    // check, if we can show alignment figures for this control
-    {
-      // FIXME
-      //String showFiguresString = DesignerPlugin.getGridLayoutAlignmentFigures();
-      String showFiguresString = null;
-      if (!LayoutPolicyUtils.shouldShowSideFigures(showFiguresString, editPart)) {
-        return;
-      }
-    }
-    // ok, we can show alignment figures
-    {
-      int offset = INITIAL_RIGHT_SPACE;
-      {
-        Figure horizontalFigure = createAlignmentFigure(component, true);
-        if (horizontalFigure != null) {
-          offset += horizontalFigure.getSize().width;
-          addAlignmentFigure(component, horizontalFigure, offset);
-          offset += FIGURES_SPACE;
-        }
-      }
-      {
-        Figure verticalFigure = createAlignmentFigure(component, false);
-        if (verticalFigure != null) {
-          offset += verticalFigure.getSize().width;
-          addAlignmentFigure(component, verticalFigure, offset);
-          offset += FIGURES_SPACE;
-        }
-      }
-    }
-  }
-
-  /**
-   * Adds alignment figure at given offset from right side of component's cells.
-   */
-  private void addAlignmentFigure(IAbstractComponentInfo component, Figure figure, int offset) {
-    Figure layer = getLayer(IEditPartViewer.CLICKABLE_LAYER);
-    // prepare rectangle for cells used by component (in layer coordinates)
-    Rectangle cellRect;
-    {
-      IGridInfo gridInfo = getGridInfo();
-      Rectangle cells = gridInfo.getComponentCells(component);
-      cellRect = gridInfo.getCellsRectangle(cells).getCopy();
-      translateModelToFeedback(cellRect);
-    }
-    // prepare location and size
-    Point figureLocation;
-    {
-      Dimension figureSize = figure.getSize();
-      figureLocation = new Point(cellRect.right() - offset, cellRect.y - figureSize.height / 2);
-      if (figureLocation.x < cellRect.x + MIN_LEFT_SPACE) {
-        return;
-      }
-    }
-    // add alignment figure
-    layer.add(figure);
-    figure.setLocation(figureLocation);
-    m_alignmentFigures.add(figure);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Requests routing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected RectangleFigure m_lineFeedback;
-
-  @Override
-  public boolean understandsRequest(Request request) {
-    return super.understandsRequest(request)
-        || request.getType() == REQ_RESIZE_SPAN
-        || request.getType() == REQ_RESIZE_SIZE;
-  }
-
-  @Override
-  public void showSourceFeedback(Request request) {
-    try {
-      if (request instanceof ChangeBoundsRequest) {
-        ChangeBoundsRequest cbRequest = (ChangeBoundsRequest) request;
-        if (REQ_RESIZE_SIZE.equals(request.getType())) {
-          showSizeFeedback(cbRequest);
-        }
-        if (REQ_RESIZE_SPAN.equals(request.getType())) {
-          showSpanFeedback(cbRequest);
-        }
-      }
-    } catch (Throwable e) {
-      DesignerPlugin.log(e);
-    }
-  }
-
-  @Override
-  public void eraseSourceFeedback(Request request) {
-    if (m_lineFeedback != null) {
-      removeFeedback(m_lineFeedback);
-      m_lineFeedback = null;
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Command getCommand(Request request) {
-    Object type = request.getType();
-    if (REQ_RESIZE_SIZE.equals(type)) {
-      return m_sizeCommand;
-    }
-    if (REQ_RESIZE_SPAN.equals(type)) {
-      return m_spanCommand;
-    }
-    return null;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // XXX Resize support
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final String REQ_RESIZE_SIZE = "resize_size";
-  protected Command m_sizeCommand;
-
-  /**
-   * @return the new resize {@link Handle} for given direction.
-   */
-  protected final Handle createSizeHandle(int direction, double percent) {
-    return createSizeHandle(direction, createComponentLocator(direction, percent));
-  }
-
-  /**
-   * @return the new resize {@link Handle} with given direction.
-   */
-  protected final Handle createSizeHandle(int direction, ILocator locator) {
-    return new SizeHandle(direction, locator);
-  }
-
-  /**
-   * Shows feedback and creates command for resize.
-   */
-  private void showSizeFeedback(ChangeBoundsRequest request) throws Exception {
-    // prepare new bounds
-    Rectangle bounds = m_component.getModelBounds().getCopy();
-    bounds.performTranslate(request.getMoveDelta());
-    bounds.resize(request.getSizeDelta());
-    // create command
-    boolean isHorizontal =
-        request.getResizeDirection() == IPositionConstants.WEST
-            || request.getResizeDirection() == IPositionConstants.EAST;
-    m_sizeCommand = createSizeCommand(isHorizontal, bounds.getSize());
-    // show feedback
-    {
-      // add feedback figure
-      if (m_lineFeedback == null) {
-        m_lineFeedback = new RectangleFigure();
-        m_lineFeedback.setForeground(IColorConstants.green);
-        addFeedback(m_lineFeedback);
-      }
-      // set bounds
-      {
-        translateModelToFeedback(bounds);
-        m_lineFeedback.setBounds(bounds);
-      }
-    }
-  }
-
-  /**
-   * @return the {@link Command} for changing size of host component.
-   */
-  protected Command createSizeCommand(boolean horizontal, Dimension size) {
-    return null;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Resize: handle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private class SizeHandle extends SquareHandle {
-    public SizeHandle(int direction, ILocator locator) {
-      super(getHost(), locator);
-      setCursor(ICursorConstants.Directional.getCursor(direction));
-      setDragTrackerTool(new ResizeTracker(direction, REQ_RESIZE_SIZE));
-    }
-
-    @Override
-    protected Color getFillColor() {
-      return isPrimary() ? IColorConstants.black : IColorConstants.white;
-    }
-
-    @Override
-    protected Color getBorderColor() {
-      return IColorConstants.white;
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Spanning support
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final String REQ_RESIZE_SPAN = "resize_span";
-  protected Command m_spanCommand;
-
-  /**
-   * @return the new span {@link Handle} for given direction.
-   */
-  protected final Handle createSpanHandle(int direction, double percent) {
-    return createSpanHandle(direction, createCellLocator(direction, percent));
-  }
-
-  /**
-   * @return the new span {@link Handle} with given direction.
-   */
-  protected final Handle createSpanHandle(int direction, ILocator locator) {
-    return new SpanHandle(direction, locator);
-  }
-
-  /**
-   * Shows feedback and creates command for span.
-   */
-  private void showSpanFeedback(ChangeBoundsRequest request) throws Exception {
-    IGridInfo gridInfo = getGridInfo();
-    // prepare cells
-    Rectangle cells = getComponentCells().getCopy();
-    {
-      // prepare cells rectangle
-      Rectangle bounds = getGridInfo().getCellsRectangle(cells).getCopy();
-      bounds.performTranslate(request.getMoveDelta());
-      bounds.resize(request.getSizeDelta());
-      // prepare direction
-      int direction = request.getResizeDirection();
-      boolean isWest = direction == IPositionConstants.WEST;
-      boolean isEast = direction == IPositionConstants.EAST;
-      boolean isNorth = direction == IPositionConstants.NORTH;
-      boolean isSouth = direction == IPositionConstants.SOUTH;
-      // update cells
-      if (isWest || isEast) {
-        Interval[] columnIntervals = gridInfo.getColumnIntervals();
-        if (isWest) {
-          int begin = 1 + Interval.getRightMostIntervalIndex(columnIntervals, bounds.x);
-          begin = Math.max(begin, 0);
-          begin = Math.min(begin, cells.right() - 1);
-          begin = fixSpanLocation(true, begin, -1, cells, gridInfo);
-          // update x but keep right()
-          cells.width += cells.x - begin;
-          cells.x = begin;
-        } else if (isEast) {
-          int end = Interval.getRightMostIntervalIndex(columnIntervals, bounds.right());
-          end = Math.min(end, columnIntervals.length - 1);
-          end = Math.max(end, cells.x);
-          end = fixSpanLocation(true, end, +1, cells, gridInfo);
-          //
-          cells.setRight(1 + end);
-        }
-        // create command
-        m_spanCommand = createSpanCommand(true, cells);
-      } else if (isNorth || isSouth) {
-        Interval[] rowIntervals = gridInfo.getRowIntervals();
-        if (isNorth) {
-          int begin = 1 + Interval.getRightMostIntervalIndex(rowIntervals, bounds.y);
-          begin = Math.max(begin, 0);
-          begin = Math.min(begin, cells.bottom() - 1);
-          begin = fixSpanLocation(false, begin, -1, cells, gridInfo);
-          // update y but keep bottom()
-          cells.height += cells.y - begin;
-          cells.y = begin;
-        } else if (isSouth) {
-          int end = Interval.getRightMostIntervalIndex(rowIntervals, bounds.bottom());
-          end = Math.min(end, rowIntervals.length - 1);
-          end = Math.max(end, cells.y);
-          end = fixSpanLocation(false, end, +1, cells, gridInfo);
-          //
-          cells.setBottom(1 + end);
-        }
-        // create command
-        m_spanCommand = createSpanCommand(false, cells);
-      }
-    }
-    // show feedback
-    {
-      // add feedback figure
-      if (m_lineFeedback == null) {
-        m_lineFeedback = new RectangleFigure();
-        m_lineFeedback.setForeground(IColorConstants.green);
-        addFeedback(m_lineFeedback);
-      }
-      // set bounds
-      {
-        Rectangle bounds = gridInfo.getCellsRectangle(cells);
-        translateModelToFeedback(bounds);
-        m_lineFeedback.setBounds(bounds);
-      }
-    }
-  }
-
-  /**
-   * @return the fixed location for given axis, component cells and grid information, so that we
-   *         don't intersect other components.
-   *
-   * @param locationStep
-   *          the step for changing location, for example it is +1 for end and -1 for begin
-   *          location.
-   */
-  private int fixSpanLocation(boolean horizontal,
-      int location,
-      int locationStep,
-      Rectangle cells,
-      IGridInfo gridInfo) {
-    if (horizontal) {
-      int column = locationStep == 1 ? cells.right() : cells.x;
-      for (; locationStep == 1 ? column <= location : column >= location; column += locationStep) {
-        for (int row = cells.y; row < cells.bottom(); row++) {
-          IAbstractComponentInfo occupied = gridInfo.getOccupied(column, row);
-          if (occupied != null && occupied != m_component) {
-            return column - locationStep;
-          }
-        }
-      }
-      return location;
-    } else {
-      int row = locationStep == 1 ? cells.bottom() : cells.y;
-      for (; locationStep == 1 ? row <= location : row >= location; row += locationStep) {
-        for (int column = cells.x; column < cells.right(); column++) {
-          IAbstractComponentInfo occupied = gridInfo.getOccupied(column, row);
-          if (occupied != null && occupied != m_component) {
-            return row - locationStep;
-          }
-        }
-      }
-      return location;
-    }
-  }
-
-  /**
-   * @return the {@link Command} for changing span of host component.
-   */
-  protected abstract Command createSpanCommand(boolean horizontal, Rectangle cells);
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Spanning: handle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private class SpanHandle extends SquareHandle {
-    public SpanHandle(int direction, ILocator locator) {
-      super(getHost(), locator);
-      setCursor(ICursorConstants.Directional.getCursor(direction));
-      setDragTrackerTool(new ResizeTracker(direction, REQ_RESIZE_SPAN));
-    }
-
-    @Override
-    protected Color getFillColor() {
-      return isPrimary() ? IColorConstants.green : IColorConstants.white;
-    }
-
-    @Override
-    protected Color getBorderColor() {
-      return IColorConstants.black;
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Locators
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return {@link ILocator} that positions handles on component side.
-   */
-  protected final ILocator createComponentLocator(int direction, double percent) {
-    Figure reference = getHostFigure();
-    if (direction == IPositionConstants.WEST) {
-      return new RelativeLocator(reference, 0, percent);
-    } else if (direction == IPositionConstants.EAST) {
-      return new RelativeLocator(reference, 1, percent);
-    } else if (direction == IPositionConstants.NORTH) {
-      return new RelativeLocator(reference, percent, percent);
-    } else if (direction == IPositionConstants.SOUTH) {
-      return new RelativeLocator(reference, percent, 1);
-    }
-    throw new IllegalArgumentException("Unknown direction: " + direction);
-  }
-
-  /**
-   * @return {@link ILocator} that positions handles on component's cells side.
-   */
-  protected final ILocator createCellLocator(int direction, double percent) {
-    class SideLocator extends AbstractRelativeLocator {
-      public SideLocator(double relativeX, double relativeY) {
-        super(relativeX, relativeY);
-      }
-
-      @Override
-      protected Rectangle getReferenceRectangle() {
-        try {
-          Rectangle bounds = getComponentCellBounds_atFeedback();
-          return bounds;
-        } catch (Throwable e) {
-          return new Rectangle();
-        }
-      }
-    }
-    //
-    if (direction == IPositionConstants.WEST) {
-      return new SideLocator(0, percent);
-    } else if (direction == IPositionConstants.EAST) {
-      return new SideLocator(1, percent);
-    } else if (direction == IPositionConstants.NORTH) {
-      return new SideLocator(percent, 0);
-    } else if (direction == IPositionConstants.SOUTH) {
-      return new SideLocator(percent, 1);
-    }
-    throw new IllegalArgumentException("Unknown direction: " + direction);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Policy Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected void translateModelToFeedback(Rectangle bounds) {
-    PolicyUtils.translateModelToFeedback(this, bounds);
-  }
+	private final IAbstractComponentInfo m_component;
+	protected final ObjectInfo m_object;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractGridSelectionEditPolicy(IAbstractComponentInfo component) {
+		m_component = component;
+		m_object = m_component.getUnderlyingModel();
+		// add listeners
+		new BroadcastListenerHelper(m_object, this, new ObjectEventListener() {
+			@Override
+			public void refreshed() throws Exception {
+				boolean activePolicy = isActive();
+				boolean activeLayout = isActiveLayout();
+				boolean isSelected = getHost().getSelected() == EditPart.SELECTED_PRIMARY;
+				boolean isDeleted = m_component.isDeleted();
+				if (activePolicy && activeLayout && isSelected && !isDeleted) {
+					hideSelection();
+					showSelection();
+				}
+			}
+		});
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if this layout manager is active on this components parent.
+	 */
+	protected abstract boolean isActiveLayout();
+
+	/**
+	 * @return the {@link IGridInfo} for host container.
+	 */
+	protected abstract IGridInfo getGridInfo();
+
+	/**
+	 * @return the cells {@link Rectangle} occupied by host component.
+	 */
+	private Rectangle getComponentCells() throws Exception {
+		return getGridInfo().getComponentCells(m_component);
+	}
+
+	/**
+	 * @return the pixels {@link Rectangle} of host component.
+	 */
+	private Rectangle getComponentCellBounds() throws Exception {
+		Rectangle cells = getComponentCells();
+		return getGridInfo().getCellsRectangle(cells);
+	}
+
+	/**
+	 * @return the pixels {@link Rectangle} of host component in feedback.
+	 */
+	private Rectangle getComponentCellBounds_atFeedback() throws Exception {
+		Rectangle bounds = getComponentCellBounds();
+		translateModelToFeedback(bounds);
+		return bounds;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Handles
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link MoveHandle} for host component.
+	 */
+	protected final MoveHandle createMoveHandle() {
+		MoveHandle moveHandle = new MoveHandle(getHost(), new ILocator() {
+			@Override
+			public void relocate(Figure target) {
+				try {
+					Rectangle bounds = getComponentCellBounds_atFeedback();
+					target.setBounds(bounds);
+				} catch (Throwable e) {
+					DesignerPlugin.log(e);
+				}
+			}
+		});
+		moveHandle.setForeground(IColorConstants.red);
+		return moveHandle;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Selection
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void showSelection() {
+		super.showSelection();
+		if (getHost().getSelected() == EditPart.SELECTED_PRIMARY) {
+			showPrimarySelection();
+			showAlignmentFigures();
+		}
+	}
+
+	@Override
+	protected void hideSelection() {
+		super.hideSelection();
+		hideAlignmentFigures();
+	}
+
+	/**
+	 * Shows the selection for primary selected {@link EditPart}.
+	 */
+	protected void showPrimarySelection() {
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Cell figures XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final int MIN_LEFT_SPACE = 10;
+	private static final int INITIAL_RIGHT_SPACE = 10;
+	private static final int FIGURES_SPACE = 10;
+	private List<Figure> m_alignmentFigures;
+
+	/**
+	 * @return the alignment figure for given component and axis.
+	 */
+	protected abstract Figure createAlignmentFigure(IAbstractComponentInfo component,
+			boolean horizontal);
+
+	/**
+	 * Shows alignment figures for host {@link EditPart} and its siblings.
+	 */
+	public final void showAlignmentFigures() {
+		if (m_alignmentFigures == null) {
+			m_alignmentFigures = Lists.newArrayList();
+			// show cell figures for all children of host's parent
+			{
+				Collection<EditPart> editParts = getHost().getParent().getChildren();
+				for (EditPart editPart : editParts) {
+					showCellFigures(editPart);
+				}
+			}
+		}
+	}
+
+	/**
+	 * Hides alignment figures for this host and its siblings.
+	 */
+	public final void hideAlignmentFigures() {
+		if (m_alignmentFigures != null) {
+			for (Figure figure : m_alignmentFigures) {
+				figure.getParent().remove(figure);
+			}
+			m_alignmentFigures = null;
+		}
+	}
+
+	/**
+	 * Shows all possible cell figures for given edit part.
+	 */
+	private void showCellFigures(EditPart editPart) {
+		// check model
+		IAbstractComponentInfo component;
+		{
+			Object model = editPart.getModel();
+			if (!(model instanceof IAbstractComponentInfo)) {
+				return;
+			}
+			component = (IAbstractComponentInfo) model;
+		}
+		// check, if we can show alignment figures for this control
+		{
+			// FIXME
+			//String showFiguresString = DesignerPlugin.getGridLayoutAlignmentFigures();
+			String showFiguresString = null;
+			if (!LayoutPolicyUtils.shouldShowSideFigures(showFiguresString, editPart)) {
+				return;
+			}
+		}
+		// ok, we can show alignment figures
+		{
+			int offset = INITIAL_RIGHT_SPACE;
+			{
+				Figure horizontalFigure = createAlignmentFigure(component, true);
+				if (horizontalFigure != null) {
+					offset += horizontalFigure.getSize().width;
+					addAlignmentFigure(component, horizontalFigure, offset);
+					offset += FIGURES_SPACE;
+				}
+			}
+			{
+				Figure verticalFigure = createAlignmentFigure(component, false);
+				if (verticalFigure != null) {
+					offset += verticalFigure.getSize().width;
+					addAlignmentFigure(component, verticalFigure, offset);
+					offset += FIGURES_SPACE;
+				}
+			}
+		}
+	}
+
+	/**
+	 * Adds alignment figure at given offset from right side of component's cells.
+	 */
+	private void addAlignmentFigure(IAbstractComponentInfo component, Figure figure, int offset) {
+		Figure layer = getLayer(IEditPartViewer.CLICKABLE_LAYER);
+		// prepare rectangle for cells used by component (in layer coordinates)
+		Rectangle cellRect;
+		{
+			IGridInfo gridInfo = getGridInfo();
+			Rectangle cells = gridInfo.getComponentCells(component);
+			cellRect = gridInfo.getCellsRectangle(cells).getCopy();
+			translateModelToFeedback(cellRect);
+		}
+		// prepare location and size
+		Point figureLocation;
+		{
+			Dimension figureSize = figure.getSize();
+			figureLocation = new Point(cellRect.right() - offset, cellRect.y - figureSize.height / 2);
+			if (figureLocation.x < cellRect.x + MIN_LEFT_SPACE) {
+				return;
+			}
+		}
+		// add alignment figure
+		layer.add(figure);
+		figure.setLocation(figureLocation);
+		m_alignmentFigures.add(figure);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Requests routing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected RectangleFigure m_lineFeedback;
+
+	@Override
+	public boolean understandsRequest(Request request) {
+		return super.understandsRequest(request)
+				|| request.getType() == REQ_RESIZE_SPAN
+				|| request.getType() == REQ_RESIZE_SIZE;
+	}
+
+	@Override
+	public void showSourceFeedback(Request request) {
+		try {
+			if (request instanceof ChangeBoundsRequest) {
+				ChangeBoundsRequest cbRequest = (ChangeBoundsRequest) request;
+				if (REQ_RESIZE_SIZE.equals(request.getType())) {
+					showSizeFeedback(cbRequest);
+				}
+				if (REQ_RESIZE_SPAN.equals(request.getType())) {
+					showSpanFeedback(cbRequest);
+				}
+			}
+		} catch (Throwable e) {
+			DesignerPlugin.log(e);
+		}
+	}
+
+	@Override
+	public void eraseSourceFeedback(Request request) {
+		if (m_lineFeedback != null) {
+			removeFeedback(m_lineFeedback);
+			m_lineFeedback = null;
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Command getCommand(Request request) {
+		Object type = request.getType();
+		if (REQ_RESIZE_SIZE.equals(type)) {
+			return m_sizeCommand;
+		}
+		if (REQ_RESIZE_SPAN.equals(type)) {
+			return m_spanCommand;
+		}
+		return null;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// XXX Resize support
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final String REQ_RESIZE_SIZE = "resize_size";
+	protected Command m_sizeCommand;
+
+	/**
+	 * @return the new resize {@link Handle} for given direction.
+	 */
+	protected final Handle createSizeHandle(int direction, double percent) {
+		return createSizeHandle(direction, createComponentLocator(direction, percent));
+	}
+
+	/**
+	 * @return the new resize {@link Handle} with given direction.
+	 */
+	protected final Handle createSizeHandle(int direction, ILocator locator) {
+		return new SizeHandle(direction, locator);
+	}
+
+	/**
+	 * Shows feedback and creates command for resize.
+	 */
+	private void showSizeFeedback(ChangeBoundsRequest request) throws Exception {
+		// prepare new bounds
+		Rectangle bounds = m_component.getModelBounds().getCopy();
+		bounds.performTranslate(request.getMoveDelta());
+		bounds.resize(request.getSizeDelta());
+		// create command
+		boolean isHorizontal =
+				request.getResizeDirection() == IPositionConstants.WEST
+				|| request.getResizeDirection() == IPositionConstants.EAST;
+		m_sizeCommand = createSizeCommand(isHorizontal, bounds.getSize());
+		// show feedback
+		{
+			// add feedback figure
+			if (m_lineFeedback == null) {
+				m_lineFeedback = new RectangleFigure();
+				m_lineFeedback.setForeground(IColorConstants.green);
+				addFeedback(m_lineFeedback);
+			}
+			// set bounds
+			{
+				translateModelToFeedback(bounds);
+				m_lineFeedback.setBounds(bounds);
+			}
+		}
+	}
+
+	/**
+	 * @return the {@link Command} for changing size of host component.
+	 */
+	protected Command createSizeCommand(boolean horizontal, Dimension size) {
+		return null;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Resize: handle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private class SizeHandle extends SquareHandle {
+		public SizeHandle(int direction, ILocator locator) {
+			super(getHost(), locator);
+			setCursor(ICursorConstants.Directional.getCursor(direction));
+			setDragTrackerTool(new ResizeTracker(direction, REQ_RESIZE_SIZE));
+		}
+
+		@Override
+		protected Color getFillColor() {
+			return isPrimary() ? IColorConstants.black : IColorConstants.white;
+		}
+
+		@Override
+		protected Color getBorderColor() {
+			return IColorConstants.white;
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Spanning support
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final String REQ_RESIZE_SPAN = "resize_span";
+	protected Command m_spanCommand;
+
+	/**
+	 * @return the new span {@link Handle} for given direction.
+	 */
+	protected final Handle createSpanHandle(int direction, double percent) {
+		return createSpanHandle(direction, createCellLocator(direction, percent));
+	}
+
+	/**
+	 * @return the new span {@link Handle} with given direction.
+	 */
+	protected final Handle createSpanHandle(int direction, ILocator locator) {
+		return new SpanHandle(direction, locator);
+	}
+
+	/**
+	 * Shows feedback and creates command for span.
+	 */
+	private void showSpanFeedback(ChangeBoundsRequest request) throws Exception {
+		IGridInfo gridInfo = getGridInfo();
+		// prepare cells
+		Rectangle cells = getComponentCells().getCopy();
+		{
+			// prepare cells rectangle
+			Rectangle bounds = getGridInfo().getCellsRectangle(cells).getCopy();
+			bounds.performTranslate(request.getMoveDelta());
+			bounds.resize(request.getSizeDelta());
+			// prepare direction
+			int direction = request.getResizeDirection();
+			boolean isWest = direction == IPositionConstants.WEST;
+			boolean isEast = direction == IPositionConstants.EAST;
+			boolean isNorth = direction == IPositionConstants.NORTH;
+			boolean isSouth = direction == IPositionConstants.SOUTH;
+			// update cells
+			if (isWest || isEast) {
+				Interval[] columnIntervals = gridInfo.getColumnIntervals();
+				if (isWest) {
+					int begin = 1 + Interval.getRightMostIntervalIndex(columnIntervals, bounds.x);
+					begin = Math.max(begin, 0);
+					begin = Math.min(begin, cells.right() - 1);
+					begin = fixSpanLocation(true, begin, -1, cells, gridInfo);
+					// update x but keep right()
+					cells.width += cells.x - begin;
+					cells.x = begin;
+				} else if (isEast) {
+					int end = Interval.getRightMostIntervalIndex(columnIntervals, bounds.right());
+					end = Math.min(end, columnIntervals.length - 1);
+					end = Math.max(end, cells.x);
+					end = fixSpanLocation(true, end, +1, cells, gridInfo);
+					//
+					cells.setRight(1 + end);
+				}
+				// create command
+				m_spanCommand = createSpanCommand(true, cells);
+			} else if (isNorth || isSouth) {
+				Interval[] rowIntervals = gridInfo.getRowIntervals();
+				if (isNorth) {
+					int begin = 1 + Interval.getRightMostIntervalIndex(rowIntervals, bounds.y);
+					begin = Math.max(begin, 0);
+					begin = Math.min(begin, cells.bottom() - 1);
+					begin = fixSpanLocation(false, begin, -1, cells, gridInfo);
+					// update y but keep bottom()
+					cells.height += cells.y - begin;
+					cells.y = begin;
+				} else if (isSouth) {
+					int end = Interval.getRightMostIntervalIndex(rowIntervals, bounds.bottom());
+					end = Math.min(end, rowIntervals.length - 1);
+					end = Math.max(end, cells.y);
+					end = fixSpanLocation(false, end, +1, cells, gridInfo);
+					//
+					cells.setBottom(1 + end);
+				}
+				// create command
+				m_spanCommand = createSpanCommand(false, cells);
+			}
+		}
+		// show feedback
+		{
+			// add feedback figure
+			if (m_lineFeedback == null) {
+				m_lineFeedback = new RectangleFigure();
+				m_lineFeedback.setForeground(IColorConstants.green);
+				addFeedback(m_lineFeedback);
+			}
+			// set bounds
+			{
+				Rectangle bounds = gridInfo.getCellsRectangle(cells);
+				translateModelToFeedback(bounds);
+				m_lineFeedback.setBounds(bounds);
+			}
+		}
+	}
+
+	/**
+	 * @return the fixed location for given axis, component cells and grid information, so that we
+	 *         don't intersect other components.
+	 *
+	 * @param locationStep
+	 *          the step for changing location, for example it is +1 for end and -1 for begin
+	 *          location.
+	 */
+	private int fixSpanLocation(boolean horizontal,
+			int location,
+			int locationStep,
+			Rectangle cells,
+			IGridInfo gridInfo) {
+		if (horizontal) {
+			int column = locationStep == 1 ? cells.right() : cells.x;
+			for (; locationStep == 1 ? column <= location : column >= location; column += locationStep) {
+				for (int row = cells.y; row < cells.bottom(); row++) {
+					IAbstractComponentInfo occupied = gridInfo.getOccupied(column, row);
+					if (occupied != null && occupied != m_component) {
+						return column - locationStep;
+					}
+				}
+			}
+			return location;
+		} else {
+			int row = locationStep == 1 ? cells.bottom() : cells.y;
+			for (; locationStep == 1 ? row <= location : row >= location; row += locationStep) {
+				for (int column = cells.x; column < cells.right(); column++) {
+					IAbstractComponentInfo occupied = gridInfo.getOccupied(column, row);
+					if (occupied != null && occupied != m_component) {
+						return row - locationStep;
+					}
+				}
+			}
+			return location;
+		}
+	}
+
+	/**
+	 * @return the {@link Command} for changing span of host component.
+	 */
+	protected abstract Command createSpanCommand(boolean horizontal, Rectangle cells);
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Spanning: handle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private class SpanHandle extends SquareHandle {
+		public SpanHandle(int direction, ILocator locator) {
+			super(getHost(), locator);
+			setCursor(ICursorConstants.Directional.getCursor(direction));
+			setDragTrackerTool(new ResizeTracker(direction, REQ_RESIZE_SPAN));
+		}
+
+		@Override
+		protected Color getFillColor() {
+			return isPrimary() ? IColorConstants.green : IColorConstants.white;
+		}
+
+		@Override
+		protected Color getBorderColor() {
+			return IColorConstants.black;
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Locators
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return {@link ILocator} that positions handles on component side.
+	 */
+	protected final ILocator createComponentLocator(int direction, double percent) {
+		Figure reference = getHostFigure();
+		if (direction == IPositionConstants.WEST) {
+			return new RelativeLocator(reference, 0, percent);
+		} else if (direction == IPositionConstants.EAST) {
+			return new RelativeLocator(reference, 1, percent);
+		} else if (direction == IPositionConstants.NORTH) {
+			return new RelativeLocator(reference, percent, percent);
+		} else if (direction == IPositionConstants.SOUTH) {
+			return new RelativeLocator(reference, percent, 1);
+		}
+		throw new IllegalArgumentException("Unknown direction: " + direction);
+	}
+
+	/**
+	 * @return {@link ILocator} that positions handles on component's cells side.
+	 */
+	protected final ILocator createCellLocator(int direction, double percent) {
+		class SideLocator extends AbstractRelativeLocator {
+			public SideLocator(double relativeX, double relativeY) {
+				super(relativeX, relativeY);
+			}
+
+			@Override
+			protected Rectangle getReferenceRectangle() {
+				try {
+					Rectangle bounds = getComponentCellBounds_atFeedback();
+					return bounds;
+				} catch (Throwable e) {
+					return new Rectangle();
+				}
+			}
+		}
+		//
+		if (direction == IPositionConstants.WEST) {
+			return new SideLocator(0, percent);
+		} else if (direction == IPositionConstants.EAST) {
+			return new SideLocator(1, percent);
+		} else if (direction == IPositionConstants.NORTH) {
+			return new SideLocator(percent, 0);
+		} else if (direction == IPositionConstants.SOUTH) {
+			return new SideLocator(percent, 1);
+		}
+		throw new IllegalArgumentException("Unknown direction: " + direction);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Policy Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected void translateModelToFeedback(Rectangle bounds) {
+		PolicyUtils.translateModelToFeedback(this, bounds);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/layout/grid/IGridInfo.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/layout/grid/IGridInfo.java
index 29d2e4830..8f656e19c 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/layout/grid/IGridInfo.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/layout/grid/IGridInfo.java
@@ -23,120 +23,120 @@
  * @coverage core.gef.policy.grid
  */
 public interface IGridInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Dimensions
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the count of columns.
-   */
-  int getColumnCount();
-
-  /**
-   * @return the count of rows.
-   */
-  int getRowCount();
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Intervals
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the array of {@link Interval} for each column in grid.
-   */
-  Interval[] getColumnIntervals();
-
-  /**
-   * @return the array of {@link Interval} for each row in grid.
-   */
-  Interval[] getRowIntervals();
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Cells
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the cells {@link Rectangle} occupied by given {@link IAbstractComponentInfo}.
-   */
-  Rectangle getComponentCells(IAbstractComponentInfo component);
-
-  /**
-   * @return the pixels {@link Rectangle} for given cells {@link Rectangle}.
-   */
-  Rectangle getCellsRectangle(Rectangle cells);
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Feedback
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if container uses right-to-left orientation.
-   */
-  boolean isRTL();
-
-  /**
-   * Container's client area may be only partly accessible for grid (for example in Swing "border"
-   * can consume some insets inside of container), so this methods returns the {@link Insets} to
-   * crop client area of container.
-   *
-   * @return the {@link Insets} of container.
-   */
-  Insets getInsets();
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Virtual columns
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if this {@link IGridInfo} supports virtual columns. For example in
-   *         GWT widget HTMLTable always filled with columns/rows, so virtual columns/rows don't
-   *         exist.
-   */
-  boolean hasVirtualColumns();
-
-  /**
-   * @return the size of virtual column.
-   */
-  int getVirtualColumnSize();
-
-  /**
-   * @return the size of virtual column gap.
-   */
-  int getVirtualColumnGap();
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Virtual rows
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if this {@link IGridInfo} supports virtual rows. For example in GWT
-   *         widget HTMLTable always filled with columns/rows, so virtual columns/rows don't exist.
-   */
-  boolean hasVirtualRows();
-
-  /**
-   * @return the size of virtual row.
-   */
-  int getVirtualRowSize();
-
-  /**
-   * @return the size of virtual row gap.
-   */
-  int getVirtualRowGap();
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Checks
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>AbstractComponentInfo</code> that occupies cell with given column/row.
-   */
-  IAbstractComponentInfo getOccupied(int column, int row);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Dimensions
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the count of columns.
+	 */
+	int getColumnCount();
+
+	/**
+	 * @return the count of rows.
+	 */
+	int getRowCount();
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Intervals
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the array of {@link Interval} for each column in grid.
+	 */
+	Interval[] getColumnIntervals();
+
+	/**
+	 * @return the array of {@link Interval} for each row in grid.
+	 */
+	Interval[] getRowIntervals();
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Cells
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the cells {@link Rectangle} occupied by given {@link IAbstractComponentInfo}.
+	 */
+	Rectangle getComponentCells(IAbstractComponentInfo component);
+
+	/**
+	 * @return the pixels {@link Rectangle} for given cells {@link Rectangle}.
+	 */
+	Rectangle getCellsRectangle(Rectangle cells);
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Feedback
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if container uses right-to-left orientation.
+	 */
+	boolean isRTL();
+
+	/**
+	 * Container's client area may be only partly accessible for grid (for example in Swing "border"
+	 * can consume some insets inside of container), so this methods returns the {@link Insets} to
+	 * crop client area of container.
+	 *
+	 * @return the {@link Insets} of container.
+	 */
+	Insets getInsets();
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Virtual columns
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if this {@link IGridInfo} supports virtual columns. For example in
+	 *         GWT widget HTMLTable always filled with columns/rows, so virtual columns/rows don't
+	 *         exist.
+	 */
+	boolean hasVirtualColumns();
+
+	/**
+	 * @return the size of virtual column.
+	 */
+	int getVirtualColumnSize();
+
+	/**
+	 * @return the size of virtual column gap.
+	 */
+	int getVirtualColumnGap();
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Virtual rows
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if this {@link IGridInfo} supports virtual rows. For example in GWT
+	 *         widget HTMLTable always filled with columns/rows, so virtual columns/rows don't exist.
+	 */
+	boolean hasVirtualRows();
+
+	/**
+	 * @return the size of virtual row.
+	 */
+	int getVirtualRowSize();
+
+	/**
+	 * @return the size of virtual row gap.
+	 */
+	int getVirtualRowGap();
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Checks
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>AbstractComponentInfo</code> that occupies cell with given column/row.
+	 */
+	IAbstractComponentInfo getOccupied(int column, int row);
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/layout/position/AbstractPositionLayoutEditPolicy.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/layout/position/AbstractPositionLayoutEditPolicy.java
index e08d8f24b..039d18cd2 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/layout/position/AbstractPositionLayoutEditPolicy.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/layout/position/AbstractPositionLayoutEditPolicy.java
@@ -40,225 +40,225 @@
  * @coverage core.gef.policy
  */
 public abstract class AbstractPositionLayoutEditPolicy extends LayoutEditPolicy {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Feedbacks
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private TextFeedback m_hintFeedback;
-  private List<AbstractPositionFeedback> m_feedbacks;
-  private AbstractPositionFeedback m_activeFeedback;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Feedbacks
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private TextFeedback m_hintFeedback;
+	private List<AbstractPositionFeedback> m_feedbacks;
+	private AbstractPositionFeedback m_activeFeedback;
 
-  @Override
-  protected final void showLayoutTargetFeedback(Request request) {
-    super.showLayoutTargetFeedback(request);
-    // create feedbacks
-    if (m_feedbacks == null) {
-      // create positions
-      m_feedbacks = Lists.newArrayList();
-      try {
-        addFeedbacks();
-      } catch (Throwable e) {
-        DesignerPlugin.log(e);
-      }
-      // create hint
-      m_hintFeedback = new TextFeedback(getFeedbackLayer());
-      m_hintFeedback.add();
-    }
-    // highlight feedback
-    m_activeFeedback = null;
-    Point location = ((IDropRequest) request).getLocation();
-    for (AbstractPositionFeedback feedback : m_feedbacks) {
-      if (feedback.update(location)) {
-        m_activeFeedback = feedback;
-      }
-    }
-    // update hint
-    {
-      if (m_activeFeedback != null) {
-        m_hintFeedback.setText(m_activeFeedback.getHint());
-      } else {
-        m_hintFeedback.setText("<Unknown position>");
-      }
-      Rectangle target = getHostFigure().getBounds().getCopy();
-      FigureUtils.translateFigureToFigure(getHostFigure(), getFeedbackLayer(), target);
-      m_hintFeedback.centerHorizontallyAbove(target, 10);
-    }
-  }
+	@Override
+	protected final void showLayoutTargetFeedback(Request request) {
+		super.showLayoutTargetFeedback(request);
+		// create feedbacks
+		if (m_feedbacks == null) {
+			// create positions
+			m_feedbacks = Lists.newArrayList();
+			try {
+				addFeedbacks();
+			} catch (Throwable e) {
+				DesignerPlugin.log(e);
+			}
+			// create hint
+			m_hintFeedback = new TextFeedback(getFeedbackLayer());
+			m_hintFeedback.add();
+		}
+		// highlight feedback
+		m_activeFeedback = null;
+		Point location = ((IDropRequest) request).getLocation();
+		for (AbstractPositionFeedback feedback : m_feedbacks) {
+			if (feedback.update(location)) {
+				m_activeFeedback = feedback;
+			}
+		}
+		// update hint
+		{
+			if (m_activeFeedback != null) {
+				m_hintFeedback.setText(m_activeFeedback.getHint());
+			} else {
+				m_hintFeedback.setText("<Unknown position>");
+			}
+			Rectangle target = getHostFigure().getBounds().getCopy();
+			FigureUtils.translateFigureToFigure(getHostFigure(), getFeedbackLayer(), target);
+			m_hintFeedback.centerHorizontallyAbove(target, 10);
+		}
+	}
 
-  @Override
-  protected final void eraseLayoutTargetFeedback(Request request) {
-    super.eraseLayoutTargetFeedback(request);
-    if (m_feedbacks != null) {
-      // remove positions
-      for (AbstractPositionFeedback feedback : m_feedbacks) {
-        feedback.remove();
-      }
-      m_feedbacks = null;
-      // remove hint
-      m_hintFeedback.remove();
-      m_hintFeedback = null;
-    }
-  }
+	@Override
+	protected final void eraseLayoutTargetFeedback(Request request) {
+		super.eraseLayoutTargetFeedback(request);
+		if (m_feedbacks != null) {
+			// remove positions
+			for (AbstractPositionFeedback feedback : m_feedbacks) {
+				feedback.remove();
+			}
+			m_feedbacks = null;
+			// remove hint
+			m_hintFeedback.remove();
+			m_hintFeedback = null;
+		}
+	}
 
-  /**
-   * Adds single feedback with given parameters.
-   *
-   * @param bounds
-   *          the host relative bounds of feedback, this method automatically will convert it into
-   *          feedback layer coordinates.
-   * @param data
-   *          the {@link Object} associated with this feedback, it will be returned back in
-   *          {@link Command} related methods.
-   */
-  protected final void addFeedback(Rectangle bounds, String hint, Object data) {
-    Layer layer = getFeedbackLayer();
-    // convert bounds
-    {
-      bounds = bounds.getCopy();
-      FigureUtils.translateFigureToFigure2(getHostFigure(), layer, bounds);
-    }
-    // add feedback
-    {
-      AbstractPositionFeedback feedback = new GhostPositionFeedback(layer, bounds, hint);
-      feedback.setData(data);
-      m_feedbacks.add(feedback);
-    }
-  }
+	/**
+	 * Adds single feedback with given parameters.
+	 *
+	 * @param bounds
+	 *          the host relative bounds of feedback, this method automatically will convert it into
+	 *          feedback layer coordinates.
+	 * @param data
+	 *          the {@link Object} associated with this feedback, it will be returned back in
+	 *          {@link Command} related methods.
+	 */
+	protected final void addFeedback(Rectangle bounds, String hint, Object data) {
+		Layer layer = getFeedbackLayer();
+		// convert bounds
+		{
+			bounds = bounds.getCopy();
+			FigureUtils.translateFigureToFigure2(getHostFigure(), layer, bounds);
+		}
+		// add feedback
+		{
+			AbstractPositionFeedback feedback = new GhostPositionFeedback(layer, bounds, hint);
+			feedback.setData(data);
+			m_feedbacks.add(feedback);
+		}
+	}
 
-  /**
-   * Adds feedback that start at <code>(px1, py1)</code> and ends at <code>(px2, py2)</code> portion
-   * of host size.
-   */
-  protected final void addFeedback(double px1,
-      double py1,
-      double px2,
-      double py2,
-      Insets insets,
-      String hint,
-      Object data) {
-    Rectangle area = getHostFigure().getClientArea();
-    double offset_x1 = getOffset(area.width, px1);
-    double offset_x2 = getOffset(area.width, px2);
-    double offset_y1 = getOffset(area.height, py1);
-    double offset_y2 = getOffset(area.height, py2);
-    int x1 = (int) (area.x + offset_x1) + insets.left;
-    int y1 = (int) (area.y + offset_y1) + insets.top;
-    int x2 = (int) (area.x + offset_x2) - insets.right;
-    int y2 = (int) (area.y + offset_y2) - insets.bottom;
-    addFeedback(new Rectangle(x1, y1, x2 - x1, y2 - y1), hint, data);
-  }
+	/**
+	 * Adds feedback that start at <code>(px1, py1)</code> and ends at <code>(px2, py2)</code> portion
+	 * of host size.
+	 */
+	protected final void addFeedback(double px1,
+			double py1,
+			double px2,
+			double py2,
+			Insets insets,
+			String hint,
+			Object data) {
+		Rectangle area = getHostFigure().getClientArea();
+		double offset_x1 = getOffset(area.width, px1);
+		double offset_x2 = getOffset(area.width, px2);
+		double offset_y1 = getOffset(area.height, py1);
+		double offset_y2 = getOffset(area.height, py2);
+		int x1 = (int) (area.x + offset_x1) + insets.left;
+		int y1 = (int) (area.y + offset_y1) + insets.top;
+		int x2 = (int) (area.x + offset_x2) - insets.right;
+		int y2 = (int) (area.y + offset_y2) - insets.bottom;
+		addFeedback(new Rectangle(x1, y1, x2 - x1, y2 - y1), hint, data);
+	}
 
-  /**
-   * @return offset as percent of size (<= 1.0) or absolute value.
-   */
-  private static double getOffset(int size, double offsetPercent) {
-    if (offsetPercent > 1) {
-      return offsetPercent;
-    } else {
-      return size * offsetPercent;
-    }
-  }
+	/**
+	 * @return offset as percent of size (<= 1.0) or absolute value.
+	 */
+	private static double getOffset(int size, double offsetPercent) {
+		if (offsetPercent > 1) {
+			return offsetPercent;
+		} else {
+			return size * offsetPercent;
+		}
+	}
 
-  /**
-   * Adds feedbacks using {@link #addFeedback(Rectangle, String, Object)}.
-   */
-  protected abstract void addFeedbacks() throws Exception;
+	/**
+	 * Adds feedbacks using {@link #addFeedback(Rectangle, String, Object)}.
+	 */
+	protected abstract void addFeedbacks() throws Exception;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Command getCommand(Request request) {
-    if (m_activeFeedback != null) {
-      Command command = getCommand(request, m_activeFeedback.getData());
-      if (command != null) {
-        return command;
-      }
-    }
-    return super.getCommand(request);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Command getCommand(Request request) {
+		if (m_activeFeedback != null) {
+			Command command = getCommand(request, m_activeFeedback.getData());
+			if (command != null) {
+				return command;
+			}
+		}
+		return super.getCommand(request);
+	}
 
-  /**
-   * @return the {@link Command} for given {@link Request}.
-   */
-  protected Command getCommand(Request request, Object data) {
-    return null;
-  }
+	/**
+	 * @return the {@link Command} for given {@link Request}.
+	 */
+	protected Command getCommand(Request request, Object data) {
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands: create
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected final Command getCreateCommand(CreateRequest request) {
-    if (m_activeFeedback != null) {
-      return getCreateCommand(request.getNewObject(), m_activeFeedback.getData());
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands: create
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected final Command getCreateCommand(CreateRequest request) {
+		if (m_activeFeedback != null) {
+			return getCreateCommand(request.getNewObject(), m_activeFeedback.getData());
+		}
+		return null;
+	}
 
-  /**
-   * @return the {@link Command} for {@link Request#REQ_CREATE}.
-   */
-  protected abstract Command getCreateCommand(Object newObject, Object data);
+	/**
+	 * @return the {@link Command} for {@link Request#REQ_CREATE}.
+	 */
+	protected abstract Command getCreateCommand(Object newObject, Object data);
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands: paste
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected final Command getPasteCommand(PasteRequest request) {
-    if (m_activeFeedback != null) {
-      return getPasteCommand(request, m_activeFeedback.getData());
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands: paste
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected final Command getPasteCommand(PasteRequest request) {
+		if (m_activeFeedback != null) {
+			return getPasteCommand(request, m_activeFeedback.getData());
+		}
+		return null;
+	}
 
-  /**
-   * @return the {@link Command} for {@link Request#REQ_PASTE}.
-   */
-  protected abstract Command getPasteCommand(PasteRequest request, Object data);
+	/**
+	 * @return the {@link Command} for {@link Request#REQ_PASTE}.
+	 */
+	protected abstract Command getPasteCommand(PasteRequest request, Object data);
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands: move
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected final Command getMoveCommand(ChangeBoundsRequest request) {
-    if (m_activeFeedback != null && request.getEditParts().size() == 1) {
-      EditPart editPart = request.getEditParts().get(0);
-      return getMoveCommand(editPart.getModel(), m_activeFeedback.getData());
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands: move
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected final Command getMoveCommand(ChangeBoundsRequest request) {
+		if (m_activeFeedback != null && request.getEditParts().size() == 1) {
+			EditPart editPart = request.getEditParts().get(0);
+			return getMoveCommand(editPart.getModel(), m_activeFeedback.getData());
+		}
+		return null;
+	}
 
-  /**
-   * @return the {@link Command} for {@link Request#REQ_MOVE}.
-   */
-  protected abstract Command getMoveCommand(Object moveObject, Object data);
+	/**
+	 * @return the {@link Command} for {@link Request#REQ_MOVE}.
+	 */
+	protected abstract Command getMoveCommand(Object moveObject, Object data);
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands: add
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected final Command getAddCommand(ChangeBoundsRequest request) {
-    if (m_activeFeedback != null && request.getEditParts().size() == 1) {
-      EditPart editPart = request.getEditParts().get(0);
-      return getAddCommand(editPart.getModel(), m_activeFeedback.getData());
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands: add
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected final Command getAddCommand(ChangeBoundsRequest request) {
+		if (m_activeFeedback != null && request.getEditParts().size() == 1) {
+			EditPart editPart = request.getEditParts().get(0);
+			return getAddCommand(editPart.getModel(), m_activeFeedback.getData());
+		}
+		return null;
+	}
 
-  /**
-   * @return the {@link Command} for {@link Request#REQ_ADD}.
-   */
-  protected abstract Command getAddCommand(Object addObject, Object data);
+	/**
+	 * @return the {@link Command} for {@link Request#REQ_ADD}.
+	 */
+	protected abstract Command getAddCommand(Object addObject, Object data);
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/layout/position/ObjectPositionLayoutEditPolicy.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/layout/position/ObjectPositionLayoutEditPolicy.java
index 42db588ae..e242b301c 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/layout/position/ObjectPositionLayoutEditPolicy.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/layout/position/ObjectPositionLayoutEditPolicy.java
@@ -25,78 +25,78 @@
  * @coverage core.gef.policy
  */
 public abstract class ObjectPositionLayoutEditPolicy<C, D> extends AbstractPositionLayoutEditPolicy {
-  private final ObjectInfo m_host;
+	private final ObjectInfo m_host;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ObjectPositionLayoutEditPolicy(ObjectInfo host) {
-    m_host = host;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ObjectPositionLayoutEditPolicy(ObjectInfo host) {
+		m_host = host;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Command getCreateCommand(final Object newObject, final Object data) {
-    return new EditCommand(m_host) {
-      @Override
-      @SuppressWarnings("unchecked")
-      protected void executeEdit() throws Exception {
-        command_CREATE((C) newObject, (D) data);
-      }
-    };
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Command getCreateCommand(final Object newObject, final Object data) {
+		return new EditCommand(m_host) {
+			@Override
+			@SuppressWarnings("unchecked")
+			protected void executeEdit() throws Exception {
+				command_CREATE((C) newObject, (D) data);
+			}
+		};
+	}
 
-  @Override
-  protected Command getPasteCommand(PasteRequest request, final Object data) {
-    return GlobalState.getPasteRequestProcessor().getPasteCommand(
-        request,
-        new IPasteComponentProcessor() {
-          @Override
-          @SuppressWarnings("unchecked")
-          public void process(Object component) throws Exception {
-            command_CREATE((C) component, (D) data);
-          }
-        });
-  }
+	@Override
+	protected Command getPasteCommand(PasteRequest request, final Object data) {
+		return GlobalState.getPasteRequestProcessor().getPasteCommand(
+				request,
+				new IPasteComponentProcessor() {
+					@Override
+					@SuppressWarnings("unchecked")
+					public void process(Object component) throws Exception {
+						command_CREATE((C) component, (D) data);
+					}
+				});
+	}
 
-  @Override
-  protected Command getMoveCommand(final Object moveObject, final Object data) {
-    return new EditCommand(m_host) {
-      @Override
-      @SuppressWarnings("unchecked")
-      protected void executeEdit() throws Exception {
-        command_MOVE((C) moveObject, (D) data);
-      }
-    };
-  }
+	@Override
+	protected Command getMoveCommand(final Object moveObject, final Object data) {
+		return new EditCommand(m_host) {
+			@Override
+			@SuppressWarnings("unchecked")
+			protected void executeEdit() throws Exception {
+				command_MOVE((C) moveObject, (D) data);
+			}
+		};
+	}
 
-  @Override
-  protected Command getAddCommand(final Object addObject, final Object data) {
-    return new EditCommand(m_host) {
-      @Override
-      @SuppressWarnings("unchecked")
-      protected void executeEdit() throws Exception {
-        command_ADD((C) addObject, (D) data);
-      }
-    };
-  }
+	@Override
+	protected Command getAddCommand(final Object addObject, final Object data) {
+		return new EditCommand(m_host) {
+			@Override
+			@SuppressWarnings("unchecked")
+			protected void executeEdit() throws Exception {
+				command_ADD((C) addObject, (D) data);
+			}
+		};
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Implementation of commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected abstract void command_CREATE(C component, D data) throws Exception;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Implementation of commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected abstract void command_CREATE(C component, D data) throws Exception;
 
-  protected abstract void command_MOVE(C component, D data) throws Exception;
+	protected abstract void command_MOVE(C component, D data) throws Exception;
 
-  protected void command_ADD(C component, D data) throws Exception {
-    command_MOVE(component, data);
-  }
+	protected void command_ADD(C component, D data) throws Exception {
+		command_MOVE(component, data);
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/selection/EmptySelectionEditPolicy.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/selection/EmptySelectionEditPolicy.java
index 5f42e8414..278a07ce5 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/selection/EmptySelectionEditPolicy.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/selection/EmptySelectionEditPolicy.java
@@ -23,8 +23,8 @@
  * @coverage core.gef.policy
  */
 public final class EmptySelectionEditPolicy extends SelectionEditPolicy {
-  @Override
-  protected List<Handle> createSelectionHandles() {
-    return Collections.emptyList();
-  }
+	@Override
+	protected List<Handle> createSelectionHandles() {
+		return Collections.emptyList();
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/selection/LineSelectionEditPolicy.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/selection/LineSelectionEditPolicy.java
index 334466962..d6bded831 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/selection/LineSelectionEditPolicy.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/selection/LineSelectionEditPolicy.java
@@ -34,81 +34,81 @@
  * @coverage core.gef.menu
  */
 public class LineSelectionEditPolicy extends SelectionEditPolicy {
-  private final Color m_lineColor;
-  private Figure m_selectionFigure;
-  private IAncestorListener m_ancestorListener;
+	private final Color m_lineColor;
+	private Figure m_selectionFigure;
+	private IAncestorListener m_ancestorListener;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public LineSelectionEditPolicy() {
-    this(IColorConstants.orange);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public LineSelectionEditPolicy() {
+		this(IColorConstants.orange);
+	}
 
-  public LineSelectionEditPolicy(Color lineColor) {
-    m_lineColor = lineColor;
-  }
+	public LineSelectionEditPolicy(Color lineColor) {
+		m_lineColor = lineColor;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Handles
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected List<Handle> createSelectionHandles() {
-    return Collections.emptyList();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Handles
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected List<Handle> createSelectionHandles() {
+		return Collections.emptyList();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Selection
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void showSelection() {
-    hideSelection();
-    m_selectionFigure = new Figure();
-    m_selectionFigure.setBorder(new LineBorder(m_lineColor));
-    updateFeedbackBounds();
-    m_ancestorListener = new IAncestorListener() {
-      @Override
-      public void ancestorMoved(Figure ancestor) {
-        updateFeedbackBounds();
-      }
-    };
-    getHostFigure().addAncestorListener(m_ancestorListener);
-    addFeedback(m_selectionFigure);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Selection
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void showSelection() {
+		hideSelection();
+		m_selectionFigure = new Figure();
+		m_selectionFigure.setBorder(new LineBorder(m_lineColor));
+		updateFeedbackBounds();
+		m_ancestorListener = new IAncestorListener() {
+			@Override
+			public void ancestorMoved(Figure ancestor) {
+				updateFeedbackBounds();
+			}
+		};
+		getHostFigure().addAncestorListener(m_ancestorListener);
+		addFeedback(m_selectionFigure);
+	}
 
-  @Override
-  protected void hideSelection() {
-    if (m_selectionFigure != null) {
-      getHostFigure().removeAncestorListener(m_ancestorListener);
-      removeFeedback(m_selectionFigure);
-      m_selectionFigure = null;
-    }
-  }
+	@Override
+	protected void hideSelection() {
+		if (m_selectionFigure != null) {
+			getHostFigure().removeAncestorListener(m_ancestorListener);
+			removeFeedback(m_selectionFigure);
+			m_selectionFigure = null;
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Feedbacks
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Updates feedback figure bounds in ancestor listener.
-   */
-  private void updateFeedbackBounds() {
-    Rectangle selectionBounds = getHostBounds().getExpanded(1, 1);
-    FigureUtils.translateFigureToFigure(getHostFigure(), m_selectionFigure, selectionBounds);
-    m_selectionFigure.setBounds(selectionBounds);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Feedbacks
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Updates feedback figure bounds in ancestor listener.
+	 */
+	private void updateFeedbackBounds() {
+		Rectangle selectionBounds = getHostBounds().getExpanded(1, 1);
+		FigureUtils.translateFigureToFigure(getHostFigure(), m_selectionFigure, selectionBounds);
+		m_selectionFigure.setBounds(selectionBounds);
+	}
 
-  /**
-   * @return the bounds of {@link Figure} of host {@link EditPart}, in "bounds" coordinates.
-   */
-  protected Rectangle getHostBounds() {
-    return getHostFigure().getBounds();
-  }
+	/**
+	 * @return the bounds of {@link Figure} of host {@link EditPart}, in "bounds" coordinates.
+	 */
+	protected Rectangle getHostBounds() {
+		return getHostFigure().getBounds();
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/selection/MoveSelectionEditPolicy.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/selection/MoveSelectionEditPolicy.java
index a523783e4..ec30cc50d 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/selection/MoveSelectionEditPolicy.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/selection/MoveSelectionEditPolicy.java
@@ -29,34 +29,34 @@
  * @coverage core.gef.policy
  */
 public final class MoveSelectionEditPolicy extends SelectionEditPolicy {
-  private final Color m_color;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public MoveSelectionEditPolicy() {
-    this(IColorConstants.black);
-  }
-
-  public MoveSelectionEditPolicy(Color color) {
-    m_color = color;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Handles
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected List<Handle> createSelectionHandles() {
-    List<Handle> handles = Lists.newArrayList();
-    {
-      MoveHandle moveHandle = new MoveHandle(getHost());
-      moveHandle.setForeground(m_color);
-      handles.add(moveHandle);
-    }
-    return handles;
-  }
+	private final Color m_color;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public MoveSelectionEditPolicy() {
+		this(IColorConstants.black);
+	}
+
+	public MoveSelectionEditPolicy(Color color) {
+		m_color = color;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Handles
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected List<Handle> createSelectionHandles() {
+		List<Handle> handles = Lists.newArrayList();
+		{
+			MoveHandle moveHandle = new MoveHandle(getHost());
+			moveHandle.setForeground(m_color);
+			handles.add(moveHandle);
+		}
+		return handles;
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/selection/NonResizableSelectionEditPolicy.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/selection/NonResizableSelectionEditPolicy.java
index 5a8c16d5c..ef669aaa3 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/selection/NonResizableSelectionEditPolicy.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/selection/NonResizableSelectionEditPolicy.java
@@ -30,28 +30,28 @@
  * @coverage core.gef.policy
  */
 public class NonResizableSelectionEditPolicy extends SelectionEditPolicy {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Handles
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected List<Handle> createSelectionHandles() {
-    List<Handle> handles = Lists.newArrayList();
-    handles.add(new MoveHandle(getHost()));
-    handles.add(createHandle(IPositionConstants.SOUTH_EAST));
-    handles.add(createHandle(IPositionConstants.SOUTH_WEST));
-    handles.add(createHandle(IPositionConstants.NORTH_WEST));
-    handles.add(createHandle(IPositionConstants.NORTH_EAST));
-    return handles;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Handles
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected List<Handle> createSelectionHandles() {
+		List<Handle> handles = Lists.newArrayList();
+		handles.add(new MoveHandle(getHost()));
+		handles.add(createHandle(IPositionConstants.SOUTH_EAST));
+		handles.add(createHandle(IPositionConstants.SOUTH_WEST));
+		handles.add(createHandle(IPositionConstants.NORTH_WEST));
+		handles.add(createHandle(IPositionConstants.NORTH_EAST));
+		return handles;
+	}
 
-  /**
-   * @return the {@link ResizeHandle} for given direction.
-   */
-  private Handle createHandle(int direction) {
-    ResizeHandle handle = new ResizeHandle(getHost(), direction);
-    handle.setDragTrackerTool(new ResizeTracker(direction, null));
-    return handle;
-  }
+	/**
+	 * @return the {@link ResizeHandle} for given direction.
+	 */
+	private Handle createHandle(int direction) {
+		ResizeHandle handle = new ResizeHandle(getHost(), direction);
+		handle.setDragTrackerTool(new ResizeTracker(direction, null));
+		return handle;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/selection/TopResizeFigure.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/selection/TopResizeFigure.java
index b0b8623fc..8eb044ed4 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/selection/TopResizeFigure.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/selection/TopResizeFigure.java
@@ -29,45 +29,45 @@
  * @author mitin_aa
  */
 public class TopResizeFigure extends SemiTransparentFigure {
-  private String m_sizeText;
+	private String m_sizeText;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public TopResizeFigure() {
-    super(64);
-    setBackground(IColorConstants.lightGreen);
-    setForeground(IColorConstants.darkGray);
-    setBorder(new LineBorder(IColorConstants.darkBlue, 1));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public TopResizeFigure() {
+		super(64);
+		setBackground(IColorConstants.lightGreen);
+		setForeground(IColorConstants.darkGray);
+		setBorder(new LineBorder(IColorConstants.darkBlue, 1));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void setSizeText(String sizeText) {
-    m_sizeText = sizeText;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void setSizeText(String sizeText) {
+		m_sizeText = sizeText;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Paint
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void paintClientArea(Graphics graphics) {
-    super.paintClientArea(graphics);
-    if (!StringUtils.isEmpty(m_sizeText)) {
-      Rectangle area = getClientArea();
-      Font font = SwtResourceManager.getFont("Arial", 16, SWT.NONE);
-      graphics.setFont(font);
-      Dimension textExtent = graphics.getTextExtent(m_sizeText);
-      int x = area.x + (area.width - textExtent.width) / 2;
-      int y = area.y + (area.height - textExtent.height) / 2;
-      graphics.drawString(m_sizeText, x, y);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Paint
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void paintClientArea(Graphics graphics) {
+		super.paintClientArea(graphics);
+		if (!StringUtils.isEmpty(m_sizeText)) {
+			Rectangle area = getClientArea();
+			Font font = SwtResourceManager.getFont("Arial", 16, SWT.NONE);
+			graphics.setFont(font);
+			Dimension textExtent = graphics.getTextExtent(m_sizeText);
+			int x = area.x + (area.width - textExtent.width) / 2;
+			int y = area.y + (area.height - textExtent.height) / 2;
+			graphics.drawString(m_sizeText, x, y);
+		}
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/validator/AbstractLayoutRequestValidator.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/validator/AbstractLayoutRequestValidator.java
index 23c7bf11f..fe0b67414 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/validator/AbstractLayoutRequestValidator.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/validator/AbstractLayoutRequestValidator.java
@@ -31,64 +31,64 @@
  * @coverage core.gef.policy
  */
 public abstract class AbstractLayoutRequestValidator implements ILayoutRequestValidator {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ILayoutRequestValidator
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean validateCreateRequest(EditPart host, CreateRequest request) {
-    return validate(host, request.getNewObject());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ILayoutRequestValidator
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean validateCreateRequest(EditPart host, CreateRequest request) {
+		return validate(host, request.getNewObject());
+	}
 
-  @Override
-  public boolean validatePasteRequest(final EditPart host, final PasteRequest request) {
-    return ExecutionUtils.runObjectLog(new RunnableObjectEx<Boolean>() {
-      @Override
-      public Boolean runObject() throws Exception {
-        ILayoutRequestValidatorHelper validatorHelper = GlobalState.getValidatorHelper();
-        List<?> mementos = (List<?>) request.getMemento();
-        for (Object memento : mementos) {
-          IComponentDescription description = validatorHelper.getPasteComponentDescription(memento);
-          if (!validateDescription(host, description)) {
-            return false;
-          }
-        }
-        // OK, all pasted components are valid
-        return true;
-      }
-    },
-        false);
-  }
+	@Override
+	public boolean validatePasteRequest(final EditPart host, final PasteRequest request) {
+		return ExecutionUtils.runObjectLog(new RunnableObjectEx<Boolean>() {
+			@Override
+			public Boolean runObject() throws Exception {
+				ILayoutRequestValidatorHelper validatorHelper = GlobalState.getValidatorHelper();
+				List<?> mementos = (List<?>) request.getMemento();
+				for (Object memento : mementos) {
+					IComponentDescription description = validatorHelper.getPasteComponentDescription(memento);
+					if (!validateDescription(host, description)) {
+						return false;
+					}
+				}
+				// OK, all pasted components are valid
+				return true;
+			}
+		},
+				false);
+	}
 
-  @Override
-  public boolean validateMoveRequest(EditPart host, ChangeBoundsRequest request) {
-    for (EditPart editPart : request.getEditParts()) {
-      if (!validate(host, editPart.getModel())) {
-        return false;
-      }
-    }
-    return true;
-  }
+	@Override
+	public boolean validateMoveRequest(EditPart host, ChangeBoundsRequest request) {
+		for (EditPart editPart : request.getEditParts()) {
+			if (!validate(host, editPart.getModel())) {
+				return false;
+			}
+		}
+		return true;
+	}
 
-  @Override
-  public boolean validateAddRequest(EditPart host, ChangeBoundsRequest request) {
-    return validateMoveRequest(host, request);
-  }
+	@Override
+	public boolean validateAddRequest(EditPart host, ChangeBoundsRequest request) {
+		return validateMoveRequest(host, request);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Implementation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if given "parent" and "child" are valid.
-   */
-  protected abstract boolean validate(EditPart host, Object child);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Implementation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if given "parent" and "child" are valid.
+	 */
+	protected abstract boolean validate(EditPart host, Object child);
 
-  /**
-   * @return <code>true</code> if given "parent" and "child" are valid.
-   */
-  protected abstract boolean validateDescription(EditPart host,
-      IComponentDescription childDescription);
+	/**
+	 * @return <code>true</code> if given "parent" and "child" are valid.
+	 */
+	protected abstract boolean validateDescription(EditPart host,
+			IComponentDescription childDescription);
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/validator/AbstractModelClassLayoutRequestValidator.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/validator/AbstractModelClassLayoutRequestValidator.java
index 0e5ee0641..b87cac009 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/validator/AbstractModelClassLayoutRequestValidator.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/validator/AbstractModelClassLayoutRequestValidator.java
@@ -21,27 +21,27 @@
  * @coverage core.gef.policy
  */
 public abstract class AbstractModelClassLayoutRequestValidator
-    extends
-      AbstractLayoutRequestValidator {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected final boolean validate(EditPart host, Object child) {
-    Class<?> clazz = child.getClass();
-    return isValidClass(clazz);
-  }
+extends
+AbstractLayoutRequestValidator {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected final boolean validate(EditPart host, Object child) {
+		Class<?> clazz = child.getClass();
+		return isValidClass(clazz);
+	}
 
-  @Override
-  protected final boolean validateDescription(EditPart host, IComponentDescription childDescription) {
-    Class<?> modelClass = childDescription.getModelClass();
-    return isValidClass(modelClass);
-  }
+	@Override
+	protected final boolean validateDescription(EditPart host, IComponentDescription childDescription) {
+		Class<?> modelClass = childDescription.getModelClass();
+		return isValidClass(modelClass);
+	}
 
-  /**
-   * @return <code>true</code> if given type is valid.
-   */
-  protected abstract boolean isValidClass(Class<?> clazz);
+	/**
+	 * @return <code>true</code> if given type is valid.
+	 */
+	protected abstract boolean isValidClass(Class<?> clazz);
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/validator/BorderOfChildLayoutRequestValidator.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/validator/BorderOfChildLayoutRequestValidator.java
index c1ce6c2fb..b7e43fc18 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/validator/BorderOfChildLayoutRequestValidator.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/validator/BorderOfChildLayoutRequestValidator.java
@@ -39,107 +39,107 @@
  * @coverage core.gef.policy
  */
 public final class BorderOfChildLayoutRequestValidator implements ILayoutRequestValidator {
-  public static final ILayoutRequestValidator INSTANCE = new BorderOfChildLayoutRequestValidator();
+	public static final ILayoutRequestValidator INSTANCE = new BorderOfChildLayoutRequestValidator();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private BorderOfChildLayoutRequestValidator() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private BorderOfChildLayoutRequestValidator() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ILayoutRequestValidator
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean validateCreateRequest(EditPart host, CreateRequest request) {
-    if (request.isEraseFeedback()) {
-      return true;
-    }
-    return isTargetingToHost_containerSelected(host, request);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ILayoutRequestValidator
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean validateCreateRequest(EditPart host, CreateRequest request) {
+		if (request.isEraseFeedback()) {
+			return true;
+		}
+		return isTargetingToHost_containerSelected(host, request);
+	}
 
-  @Override
-  public boolean validatePasteRequest(EditPart host, PasteRequest request) {
-    if (request.isEraseFeedback()) {
-      return true;
-    }
-    return isTargetingToHost_containerSelected(host, request);
-  }
+	@Override
+	public boolean validatePasteRequest(EditPart host, PasteRequest request) {
+		if (request.isEraseFeedback()) {
+			return true;
+		}
+		return isTargetingToHost_containerSelected(host, request);
+	}
 
-  @Override
-  public boolean validateMoveRequest(EditPart host, ChangeBoundsRequest request) {
-    return true;
-  }
+	@Override
+	public boolean validateMoveRequest(EditPart host, ChangeBoundsRequest request) {
+		return true;
+	}
 
-  @Override
-  public boolean validateAddRequest(EditPart host, ChangeBoundsRequest request) {
-    if (request.isEraseFeedback()) {
-      return true;
-    }
-    // if "child" and "host" are siblings, check for borders
-    if (host instanceof GraphicalEditPart) {
-      GraphicalEditPart graphicalHost = (GraphicalEditPart) host;
-      if (request.getEditParts().get(0).getParent() == host.getParent()) {
-        return isTargeting_innerPartOfHost(graphicalHost, request);
-      }
-    }
-    return true;
-  }
+	@Override
+	public boolean validateAddRequest(EditPart host, ChangeBoundsRequest request) {
+		if (request.isEraseFeedback()) {
+			return true;
+		}
+		// if "child" and "host" are siblings, check for borders
+		if (host instanceof GraphicalEditPart) {
+			GraphicalEditPart graphicalHost = (GraphicalEditPart) host;
+			if (request.getEditParts().get(0).getParent() == host.getParent()) {
+				return isTargeting_innerPartOfHost(graphicalHost, request);
+			}
+		}
+		return true;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Implementation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static boolean isTargetingToHost_containerSelected(EditPart host, IDropRequest request) {
-    if (host instanceof GraphicalEditPart) {
-      GraphicalEditPart graphicalHost = (GraphicalEditPart) host;
-      if (isTransparentOnBorders(graphicalHost)) {
-        return isTargeting_innerPartOfHost(graphicalHost, request);
-      }
-    }
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Implementation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static boolean isTargetingToHost_containerSelected(EditPart host, IDropRequest request) {
+		if (host instanceof GraphicalEditPart) {
+			GraphicalEditPart graphicalHost = (GraphicalEditPart) host;
+			if (isTransparentOnBorders(graphicalHost)) {
+				return isTargeting_innerPartOfHost(graphicalHost, request);
+			}
+		}
+		return true;
+	}
 
-  private static boolean isTargeting_innerPartOfHost(GraphicalEditPart host, IDropRequest request) {
-    Figure hostFigure = host.getFigure();
-    // prepare location in host
-    Point location;
-    {
-      location = request.getLocation().getCopy();
-      FigureUtils.translateAbsoluteToFigure2(hostFigure, location);
-    }
-    // check if "location" is inside of "inner part" of host
-    Rectangle hostClientArea = hostFigure.getClientArea();
-    return hostClientArea.getExpanded(-3, -3).contains(location);
-  }
+	private static boolean isTargeting_innerPartOfHost(GraphicalEditPart host, IDropRequest request) {
+		Figure hostFigure = host.getFigure();
+		// prepare location in host
+		Point location;
+		{
+			location = request.getLocation().getCopy();
+			FigureUtils.translateAbsoluteToFigure2(hostFigure, location);
+		}
+		// check if "location" is inside of "inner part" of host
+		Rectangle hostClientArea = hostFigure.getClientArea();
+		return hostClientArea.getExpanded(-3, -3).contains(location);
+	}
 
-  private static boolean isTransparentOnBorders(GraphicalEditPart host) {
-    {
-      Object hostModel = host.getModel();
-      IParametersProvider provider = GlobalState.getParametersProvider();
-      if (provider.hasTrueParameter(hostModel, "GEF.transparentOnBorders.always")) {
-        return true;
-      }
-    }
-    return isChildOf_selectedEditPart(host);
-  }
+	private static boolean isTransparentOnBorders(GraphicalEditPart host) {
+		{
+			Object hostModel = host.getModel();
+			IParametersProvider provider = GlobalState.getParametersProvider();
+			if (provider.hasTrueParameter(hostModel, "GEF.transparentOnBorders.always")) {
+				return true;
+			}
+		}
+		return isChildOf_selectedEditPart(host);
+	}
 
-  private static boolean isChildOf_selectedEditPart(EditPart child) {
-    List<EditPart> selectedEditParts = child.getViewer().getSelectedEditParts();
-    return selectedEditParts.size() == 1 && areParentChild(selectedEditParts.get(0), child);
-  }
+	private static boolean isChildOf_selectedEditPart(EditPart child) {
+		List<EditPart> selectedEditParts = child.getViewer().getSelectedEditParts();
+		return selectedEditParts.size() == 1 && areParentChild(selectedEditParts.get(0), child);
+	}
 
-  private static boolean areParentChild(EditPart parent, EditPart child) {
-    for (EditPart part = child.getParent(); part != null; part = part.getParent()) {
-      if (part == parent) {
-        return true;
-      }
-    }
-    return false;
-  }
+	private static boolean areParentChild(EditPart parent, EditPart child) {
+		for (EditPart part = child.getParent(); part != null; part = part.getParent()) {
+			if (part == parent) {
+				return true;
+			}
+		}
+		return false;
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/validator/BorderTransparentLayoutRequestValidator.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/validator/BorderTransparentLayoutRequestValidator.java
index c326b5977..dec24e8b2 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/validator/BorderTransparentLayoutRequestValidator.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/validator/BorderTransparentLayoutRequestValidator.java
@@ -33,74 +33,74 @@
  * @coverage core.gef.policy
  */
 public final class BorderTransparentLayoutRequestValidator implements ILayoutRequestValidator {
-  private final Insets m_insets;
+	private final Insets m_insets;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public BorderTransparentLayoutRequestValidator(int hBorder, int vBorder) {
-    this(vBorder, hBorder, vBorder, hBorder);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public BorderTransparentLayoutRequestValidator(int hBorder, int vBorder) {
+		this(vBorder, hBorder, vBorder, hBorder);
+	}
 
-  public BorderTransparentLayoutRequestValidator(int top, int left, int bottom, int right) {
-    m_insets = new Insets(top, left, bottom, right);
-  }
+	public BorderTransparentLayoutRequestValidator(int top, int left, int bottom, int right) {
+		m_insets = new Insets(top, left, bottom, right);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ILayoutRequestValidator
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean validateCreateRequest(EditPart host, CreateRequest request) {
-    if (request.isEraseFeedback()) {
-      return true;
-    }
-    return isInnerPartOfHost(host, request);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ILayoutRequestValidator
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean validateCreateRequest(EditPart host, CreateRequest request) {
+		if (request.isEraseFeedback()) {
+			return true;
+		}
+		return isInnerPartOfHost(host, request);
+	}
 
-  @Override
-  public boolean validatePasteRequest(EditPart host, PasteRequest request) {
-    if (request.isEraseFeedback()) {
-      return true;
-    }
-    return isInnerPartOfHost(host, request);
-  }
+	@Override
+	public boolean validatePasteRequest(EditPart host, PasteRequest request) {
+		if (request.isEraseFeedback()) {
+			return true;
+		}
+		return isInnerPartOfHost(host, request);
+	}
 
-  @Override
-  public boolean validateMoveRequest(EditPart host, ChangeBoundsRequest request) {
-    return true;
-  }
+	@Override
+	public boolean validateMoveRequest(EditPart host, ChangeBoundsRequest request) {
+		return true;
+	}
 
-  @Override
-  public boolean validateAddRequest(EditPart host, ChangeBoundsRequest request) {
-    if (request.isEraseFeedback()) {
-      return true;
-    }
-    return isInnerPartOfHost(host, request);
-  }
+	@Override
+	public boolean validateAddRequest(EditPart host, ChangeBoundsRequest request) {
+		if (request.isEraseFeedback()) {
+			return true;
+		}
+		return isInnerPartOfHost(host, request);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Implementation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private boolean isInnerPartOfHost(EditPart host, IDropRequest request) {
-    if (host instanceof GraphicalEditPart) {
-      GraphicalEditPart graphicalHost = (GraphicalEditPart) host;
-      Figure hostFigure = graphicalHost.getFigure();
-      // prepare location in host
-      Point location;
-      {
-        location = request.getLocation().getCopy();
-        FigureUtils.translateAbsoluteToFigure2(hostFigure, location);
-      }
-      // check if "location" is inside of "inner part" of host
-      Rectangle hostClientArea = hostFigure.getClientArea();
-      return hostClientArea.getCropped(m_insets).contains(location);
-    }
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Implementation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private boolean isInnerPartOfHost(EditPart host, IDropRequest request) {
+		if (host instanceof GraphicalEditPart) {
+			GraphicalEditPart graphicalHost = (GraphicalEditPart) host;
+			Figure hostFigure = graphicalHost.getFigure();
+			// prepare location in host
+			Point location;
+			{
+				location = request.getLocation().getCopy();
+				FigureUtils.translateAbsoluteToFigure2(hostFigure, location);
+			}
+			// check if "location" is inside of "inner part" of host
+			Rectangle hostClientArea = hostFigure.getClientArea();
+			return hostClientArea.getCropped(m_insets).contains(location);
+		}
+		return true;
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/validator/CachingLayoutRequestValidator.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/validator/CachingLayoutRequestValidator.java
index 919491195..9310b1ab0 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/validator/CachingLayoutRequestValidator.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/validator/CachingLayoutRequestValidator.java
@@ -27,81 +27,81 @@
  * @coverage core.gef.policy
  */
 public final class CachingLayoutRequestValidator implements ILayoutRequestValidator {
-  private final ILayoutRequestValidator m_validator;
+	private final ILayoutRequestValidator m_validator;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CachingLayoutRequestValidator(ILayoutRequestValidator validator) {
-    m_validator = validator;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CachingLayoutRequestValidator(ILayoutRequestValidator validator) {
+		m_validator = validator;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ILayoutRequestValidator
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean validateCreateRequest(EditPart host, CreateRequest request) {
-    Map<EditPart, Boolean> cache = getCache(request);
-    Boolean cachedResult = cache.get(host);
-    if (cachedResult == null) {
-      cachedResult = m_validator.validateCreateRequest(host, request);
-      cache.put(host, cachedResult);
-    }
-    return cachedResult;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ILayoutRequestValidator
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean validateCreateRequest(EditPart host, CreateRequest request) {
+		Map<EditPart, Boolean> cache = getCache(request);
+		Boolean cachedResult = cache.get(host);
+		if (cachedResult == null) {
+			cachedResult = m_validator.validateCreateRequest(host, request);
+			cache.put(host, cachedResult);
+		}
+		return cachedResult;
+	}
 
-  @Override
-  public boolean validatePasteRequest(final EditPart host, final PasteRequest request) {
-    Map<EditPart, Boolean> cache = getCache(request);
-    Boolean cachedResult = cache.get(host);
-    if (cachedResult == null) {
-      cachedResult = m_validator.validatePasteRequest(host, request);
-      cache.put(host, cachedResult);
-    }
-    return cachedResult;
-  }
+	@Override
+	public boolean validatePasteRequest(final EditPart host, final PasteRequest request) {
+		Map<EditPart, Boolean> cache = getCache(request);
+		Boolean cachedResult = cache.get(host);
+		if (cachedResult == null) {
+			cachedResult = m_validator.validatePasteRequest(host, request);
+			cache.put(host, cachedResult);
+		}
+		return cachedResult;
+	}
 
-  @Override
-  public boolean validateMoveRequest(EditPart host, ChangeBoundsRequest request) {
-    Map<EditPart, Boolean> cache = getCache(request);
-    Boolean cachedResult = cache.get(host);
-    if (cachedResult == null) {
-      cachedResult = m_validator.validateMoveRequest(host, request);
-      cache.put(host, cachedResult);
-    }
-    return cachedResult;
-  }
+	@Override
+	public boolean validateMoveRequest(EditPart host, ChangeBoundsRequest request) {
+		Map<EditPart, Boolean> cache = getCache(request);
+		Boolean cachedResult = cache.get(host);
+		if (cachedResult == null) {
+			cachedResult = m_validator.validateMoveRequest(host, request);
+			cache.put(host, cachedResult);
+		}
+		return cachedResult;
+	}
 
-  @Override
-  public boolean validateAddRequest(EditPart host, ChangeBoundsRequest request) {
-    Map<EditPart, Boolean> cache = getCache(request);
-    Boolean cachedResult = cache.get(host);
-    if (cachedResult == null) {
-      cachedResult = m_validator.validateAddRequest(host, request);
-      cache.put(host, cachedResult);
-    }
-    return cachedResult;
-  }
+	@Override
+	public boolean validateAddRequest(EditPart host, ChangeBoundsRequest request) {
+		Map<EditPart, Boolean> cache = getCache(request);
+		Boolean cachedResult = cache.get(host);
+		if (cachedResult == null) {
+			cachedResult = m_validator.validateAddRequest(host, request);
+			cache.put(host, cachedResult);
+		}
+		return cachedResult;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Implementation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the cache for validation results.
-   */
-  @SuppressWarnings("unchecked")
-  private Map<EditPart, Boolean> getCache(Request request) {
-    Map<EditPart, Boolean> cache = (Map<EditPart, Boolean>) request.getArbitraryValue(this);
-    if (cache == null) {
-      cache = new HashMap<>();
-      request.putArbitraryValue(this, cache);
-    }
-    return cache;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Implementation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the cache for validation results.
+	 */
+	@SuppressWarnings("unchecked")
+	private Map<EditPart, Boolean> getCache(Request request) {
+		Map<EditPart, Boolean> cache = (Map<EditPart, Boolean>) request.getArbitraryValue(this);
+		if (cache == null) {
+			cache = new HashMap<>();
+			request.putArbitraryValue(this, cache);
+		}
+		return cache;
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/validator/CompatibleLayoutRequestValidator.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/validator/CompatibleLayoutRequestValidator.java
index 35be21587..31c2483fa 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/validator/CompatibleLayoutRequestValidator.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/validator/CompatibleLayoutRequestValidator.java
@@ -32,113 +32,113 @@
  * @coverage core.gef.policy
  */
 public final class CompatibleLayoutRequestValidator extends AbstractLayoutRequestValidator {
-  private static final ILayoutRequestValidator INSTANCE0 = new CompatibleLayoutRequestValidator();
-  public static final ILayoutRequestValidator INSTANCE =
-      new CachingLayoutRequestValidator(INSTANCE0);
+	private static final ILayoutRequestValidator INSTANCE0 = new CompatibleLayoutRequestValidator();
+	public static final ILayoutRequestValidator INSTANCE =
+			new CachingLayoutRequestValidator(INSTANCE0);
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private CompatibleLayoutRequestValidator() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private CompatibleLayoutRequestValidator() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Implementation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected boolean validate(EditPart host, Object child) {
-    return areCompatible(host, child);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Implementation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected boolean validate(EditPart host, Object child) {
+		return areCompatible(host, child);
+	}
 
-  @Override
-  protected boolean validateDescription(EditPart host, IComponentDescription childDescription) {
-    return areCompatible(host, childDescription);
-  }
+	@Override
+	protected boolean validateDescription(EditPart host, IComponentDescription childDescription) {
+		return areCompatible(host, childDescription);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Internal implementation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if given parent and child objects are compatible.
-   */
-  private static boolean areCompatible(final EditPart host, final Object child) {
-    return ExecutionUtils.runObjectLog(new RunnableObjectEx<Boolean>() {
-      @Override
-      public Boolean runObject() throws Exception {
-        Object parent = host.getModel();
-        return parentAgreeToAcceptChild(parent, child)
-            && childAgreeToBeDroppedOnParent(parent, child);
-      }
-    },
-        false);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Internal implementation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if given parent and child objects are compatible.
+	 */
+	private static boolean areCompatible(final EditPart host, final Object child) {
+		return ExecutionUtils.runObjectLog(new RunnableObjectEx<Boolean>() {
+			@Override
+			public Boolean runObject() throws Exception {
+				Object parent = host.getModel();
+				return parentAgreeToAcceptChild(parent, child)
+						&& childAgreeToBeDroppedOnParent(parent, child);
+			}
+		},
+				false);
+	}
 
-  private static boolean parentAgreeToAcceptChild(Object parent, Object child) throws Exception {
-    // ask parent script, if it accepts child
-    {
-      String script = getParameter(parent, "GEF.requestValidator.parent");
-      if (script != null) {
-        return executeScriptBoolean(script, parent, child);
-      }
-    }
-    // OK
-    return true;
-  }
+	private static boolean parentAgreeToAcceptChild(Object parent, Object child) throws Exception {
+		// ask parent script, if it accepts child
+		{
+			String script = getParameter(parent, "GEF.requestValidator.parent");
+			if (script != null) {
+				return executeScriptBoolean(script, parent, child);
+			}
+		}
+		// OK
+		return true;
+	}
 
-  private static boolean childAgreeToBeDroppedOnParent(Object parent, Object child)
-      throws Exception {
-    // ask child script, if it can be dropped
-    {
-      String script = getParameter(child, "GEF.requestValidator.child");
-      if (script != null) {
-        if (!executeScriptBoolean(script, parent, child)) {
-          return false;
-        }
-      }
-    }
-    // ask "child" if it can be placed on "parent"
-    if (!GlobalState.getValidatorHelper().canUseParentForChild(parent, child)) {
-      return false;
-    }
-    // OK
-    return true;
-  }
+	private static boolean childAgreeToBeDroppedOnParent(Object parent, Object child)
+			throws Exception {
+		// ask child script, if it can be dropped
+		{
+			String script = getParameter(child, "GEF.requestValidator.child");
+			if (script != null) {
+				if (!executeScriptBoolean(script, parent, child)) {
+					return false;
+				}
+			}
+		}
+		// ask "child" if it can be placed on "parent"
+		if (!GlobalState.getValidatorHelper().canUseParentForChild(parent, child)) {
+			return false;
+		}
+		// OK
+		return true;
+	}
 
-  /**
-   * @param object
-   *          the component or its description.
-   *
-   * @return the value of parameter with given name.
-   */
-  private static String getParameter(Object object, String name) {
-    return GlobalState.getParametersProvider().getParameter(object, name);
-  }
+	/**
+	 * @param object
+	 *          the component or its description.
+	 *
+	 * @return the value of parameter with given name.
+	 */
+	private static String getParameter(Object object, String name) {
+		return GlobalState.getParametersProvider().getParameter(object, name);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Scripts
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final String DEF_functions = StringUtils.join(new String[]{
-      "def isComponentType(model, c) {",
-      "  if (ReflectionUtils.isSuccessorOf(model, 'org.eclipse.wb.core.model.ObjectInfo')) {",
-      "    return ReflectionUtils.isSuccessorOf(model.description.componentClass, c);",
-      "  } else {",
-      "    return ReflectionUtils.isSuccessorOf(model.componentClass, c);",
-      "  }",
-      "};",}, "\n");
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Scripts
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final String DEF_functions = StringUtils.join(new String[]{
+			"def isComponentType(model, c) {",
+			"  if (ReflectionUtils.isSuccessorOf(model, 'org.eclipse.wb.core.model.ObjectInfo')) {",
+			"    return ReflectionUtils.isSuccessorOf(model.description.componentClass, c);",
+			"  } else {",
+			"    return ReflectionUtils.isSuccessorOf(model.componentClass, c);",
+			"  }",
+			"};",}, "\n");
 
-  private static boolean executeScriptBoolean(String script, Object parent, Object child)
-      throws Exception {
-    Map<String, Object> variables = Maps.newTreeMap();
-    variables.put("parent", parent);
-    variables.put("child", child);
-    return (Boolean) ScriptUtils.evaluate(DEF_functions + script, variables);
-  }
+	private static boolean executeScriptBoolean(String script, Object parent, Object child)
+			throws Exception {
+		Map<String, Object> variables = Maps.newTreeMap();
+		variables.put("parent", parent);
+		variables.put("child", child);
+		return (Boolean) ScriptUtils.evaluate(DEF_functions + script, variables);
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/validator/ComponentClassLayoutRequestValidator.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/validator/ComponentClassLayoutRequestValidator.java
index 9e7c5bad8..13e869d1b 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/validator/ComponentClassLayoutRequestValidator.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/validator/ComponentClassLayoutRequestValidator.java
@@ -23,41 +23,41 @@
  * @coverage core.gef.policy
  */
 public class ComponentClassLayoutRequestValidator extends AbstractLayoutRequestValidator {
-  private final String m_requiredClass;
+	private final String m_requiredClass;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ComponentClassLayoutRequestValidator(String requiredClass) {
-    m_requiredClass = requiredClass;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ComponentClassLayoutRequestValidator(String requiredClass) {
+		m_requiredClass = requiredClass;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected boolean validate(EditPart host, Object child) {
-    IComponentDescription description = GlobalState.getDescriptionHelper().getDescription(child);
-    if (description != null) {
-      return validateDescription(host, description);
-    }
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected boolean validate(EditPart host, Object child) {
+		IComponentDescription description = GlobalState.getDescriptionHelper().getDescription(child);
+		if (description != null) {
+			return validateDescription(host, description);
+		}
+		return false;
+	}
 
-  @Override
-  protected boolean validateDescription(EditPart host, IComponentDescription childDescription) {
-    Class<?> componentClass = childDescription.getComponentClass();
-    return isValidClass(componentClass);
-  }
+	@Override
+	protected boolean validateDescription(EditPart host, IComponentDescription childDescription) {
+		Class<?> componentClass = childDescription.getComponentClass();
+		return isValidClass(componentClass);
+	}
 
-  /**
-   * @return <code>true</code> if given type is valid.
-   */
-  protected boolean isValidClass(Class<?> componentClass) {
-    return ReflectionUtils.isSuccessorOf(componentClass, m_requiredClass);
-  }
+	/**
+	 * @return <code>true</code> if given type is valid.
+	 */
+	protected boolean isValidClass(Class<?> componentClass) {
+		return ReflectionUtils.isSuccessorOf(componentClass, m_requiredClass);
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/validator/LayoutRequestValidators.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/validator/LayoutRequestValidators.java
index 797d2955a..f7686a7b6 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/validator/LayoutRequestValidators.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/validator/LayoutRequestValidators.java
@@ -24,154 +24,154 @@
  * @coverage core.gef.policy
  */
 public final class LayoutRequestValidators {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Factories
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return {@link ILayoutRequestValidator} that checks that child model has expected class.
-   */
-  public static ILayoutRequestValidator modelType(Class<?> requiredModelClass) {
-    ILayoutRequestValidator validator = new ModelClassLayoutRequestValidator(requiredModelClass);
-    validator = cache(validator);
-    return mixWithMandatory(validator);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Factories
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return {@link ILayoutRequestValidator} that checks that child model has expected class.
+	 */
+	public static ILayoutRequestValidator modelType(Class<?> requiredModelClass) {
+		ILayoutRequestValidator validator = new ModelClassLayoutRequestValidator(requiredModelClass);
+		validator = cache(validator);
+		return mixWithMandatory(validator);
+	}
 
-  /**
-   * @return {@link ILayoutRequestValidator} that checks that "child" has expected component class.
-   */
-  public static ILayoutRequestValidator componentType(String requiredClassName) {
-    ILayoutRequestValidator validator = new ComponentClassLayoutRequestValidator(requiredClassName);
-    validator = cache(validator);
-    return mixWithMandatory(validator);
-  }
+	/**
+	 * @return {@link ILayoutRequestValidator} that checks that "child" has expected component class.
+	 */
+	public static ILayoutRequestValidator componentType(String requiredClassName) {
+		ILayoutRequestValidator validator = new ComponentClassLayoutRequestValidator(requiredClassName);
+		validator = cache(validator);
+		return mixWithMandatory(validator);
+	}
 
-  /**
-   * @return the {@link ILayoutRequestValidator} which caches results of given one. Note, that not
-   *         all validators can be cached, only validators which don't depend on mutable state of
-   *         {@link Request}.
-   */
-  public static ILayoutRequestValidator cache(ILayoutRequestValidator validator) {
-    return new CachingLayoutRequestValidator(validator);
-  }
+	/**
+	 * @return the {@link ILayoutRequestValidator} which caches results of given one. Note, that not
+	 *         all validators can be cached, only validators which don't depend on mutable state of
+	 *         {@link Request}.
+	 */
+	public static ILayoutRequestValidator cache(ILayoutRequestValidator validator) {
+		return new CachingLayoutRequestValidator(validator);
+	}
 
-  /**
-   * @return {@link ILayoutRequestValidator} that contains given one, plus all mandatory validators
-   *         that should be mixed into final validator.
-   */
-  public static ILayoutRequestValidator finalize(ILayoutRequestValidator specificValidator) {
-    return mixWithMandatory(specificValidator);
-  }
+	/**
+	 * @return {@link ILayoutRequestValidator} that contains given one, plus all mandatory validators
+	 *         that should be mixed into final validator.
+	 */
+	public static ILayoutRequestValidator finalize(ILayoutRequestValidator specificValidator) {
+		return mixWithMandatory(specificValidator);
+	}
 
-  /**
-   * Mixes mandatory validators with given specific validator.
-   */
-  private static ILayoutRequestValidator mixWithMandatory(ILayoutRequestValidator specificValidator) {
-    return and(
-        BorderOfChildLayoutRequestValidator.INSTANCE,
-        specificValidator,
-        CompatibleLayoutRequestValidator.INSTANCE);
-  }
+	/**
+	 * Mixes mandatory validators with given specific validator.
+	 */
+	private static ILayoutRequestValidator mixWithMandatory(ILayoutRequestValidator specificValidator) {
+		return and(
+				BorderOfChildLayoutRequestValidator.INSTANCE,
+				specificValidator,
+				CompatibleLayoutRequestValidator.INSTANCE);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Compound
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return {@link ILayoutRequestValidator} that combines {@link ILayoutRequestValidator}'s using
-   *         <code>AND</code> operator.
-   */
-  public static ILayoutRequestValidator and(final ILayoutRequestValidator... validators) {
-    return new ILayoutRequestValidator() {
-      @Override
-      public boolean validateCreateRequest(EditPart host, CreateRequest request) {
-        for (ILayoutRequestValidator validator : validators) {
-          if (!validator.validateCreateRequest(host, request)) {
-            return false;
-          }
-        }
-        return true;
-      }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Compound
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return {@link ILayoutRequestValidator} that combines {@link ILayoutRequestValidator}'s using
+	 *         <code>AND</code> operator.
+	 */
+	public static ILayoutRequestValidator and(final ILayoutRequestValidator... validators) {
+		return new ILayoutRequestValidator() {
+			@Override
+			public boolean validateCreateRequest(EditPart host, CreateRequest request) {
+				for (ILayoutRequestValidator validator : validators) {
+					if (!validator.validateCreateRequest(host, request)) {
+						return false;
+					}
+				}
+				return true;
+			}
 
-      @Override
-      public boolean validatePasteRequest(EditPart host, PasteRequest request) {
-        for (ILayoutRequestValidator validator : validators) {
-          if (!validator.validatePasteRequest(host, request)) {
-            return false;
-          }
-        }
-        return true;
-      }
+			@Override
+			public boolean validatePasteRequest(EditPart host, PasteRequest request) {
+				for (ILayoutRequestValidator validator : validators) {
+					if (!validator.validatePasteRequest(host, request)) {
+						return false;
+					}
+				}
+				return true;
+			}
 
-      @Override
-      public boolean validateMoveRequest(EditPart host, ChangeBoundsRequest request) {
-        for (ILayoutRequestValidator validator : validators) {
-          if (!validator.validateMoveRequest(host, request)) {
-            return false;
-          }
-        }
-        return true;
-      }
+			@Override
+			public boolean validateMoveRequest(EditPart host, ChangeBoundsRequest request) {
+				for (ILayoutRequestValidator validator : validators) {
+					if (!validator.validateMoveRequest(host, request)) {
+						return false;
+					}
+				}
+				return true;
+			}
 
-      @Override
-      public boolean validateAddRequest(EditPart host, ChangeBoundsRequest request) {
-        for (ILayoutRequestValidator validator : validators) {
-          if (!validator.validateAddRequest(host, request)) {
-            return false;
-          }
-        }
-        return true;
-      }
-    };
-  }
+			@Override
+			public boolean validateAddRequest(EditPart host, ChangeBoundsRequest request) {
+				for (ILayoutRequestValidator validator : validators) {
+					if (!validator.validateAddRequest(host, request)) {
+						return false;
+					}
+				}
+				return true;
+			}
+		};
+	}
 
-  /**
-   * @return {@link ILayoutRequestValidator} that combines {@link ILayoutRequestValidator}'s using
-   *         <code>OR</code> operator.
-   */
-  public static ILayoutRequestValidator or(final ILayoutRequestValidator... validators) {
-    return new ILayoutRequestValidator() {
-      @Override
-      public boolean validateCreateRequest(EditPart host, CreateRequest request) {
-        for (ILayoutRequestValidator validator : validators) {
-          if (validator.validateCreateRequest(host, request)) {
-            return true;
-          }
-        }
-        return false;
-      }
+	/**
+	 * @return {@link ILayoutRequestValidator} that combines {@link ILayoutRequestValidator}'s using
+	 *         <code>OR</code> operator.
+	 */
+	public static ILayoutRequestValidator or(final ILayoutRequestValidator... validators) {
+		return new ILayoutRequestValidator() {
+			@Override
+			public boolean validateCreateRequest(EditPart host, CreateRequest request) {
+				for (ILayoutRequestValidator validator : validators) {
+					if (validator.validateCreateRequest(host, request)) {
+						return true;
+					}
+				}
+				return false;
+			}
 
-      @Override
-      public boolean validatePasteRequest(EditPart host, PasteRequest request) {
-        for (ILayoutRequestValidator validator : validators) {
-          if (validator.validatePasteRequest(host, request)) {
-            return true;
-          }
-        }
-        return false;
-      }
+			@Override
+			public boolean validatePasteRequest(EditPart host, PasteRequest request) {
+				for (ILayoutRequestValidator validator : validators) {
+					if (validator.validatePasteRequest(host, request)) {
+						return true;
+					}
+				}
+				return false;
+			}
 
-      @Override
-      public boolean validateMoveRequest(EditPart host, ChangeBoundsRequest request) {
-        for (ILayoutRequestValidator validator : validators) {
-          if (validator.validateMoveRequest(host, request)) {
-            return true;
-          }
-        }
-        return false;
-      }
+			@Override
+			public boolean validateMoveRequest(EditPart host, ChangeBoundsRequest request) {
+				for (ILayoutRequestValidator validator : validators) {
+					if (validator.validateMoveRequest(host, request)) {
+						return true;
+					}
+				}
+				return false;
+			}
 
-      @Override
-      public boolean validateAddRequest(EditPart host, ChangeBoundsRequest request) {
-        for (ILayoutRequestValidator validator : validators) {
-          if (validator.validateAddRequest(host, request)) {
-            return true;
-          }
-        }
-        return false;
-      }
-    };
-  }
+			@Override
+			public boolean validateAddRequest(EditPart host, ChangeBoundsRequest request) {
+				for (ILayoutRequestValidator validator : validators) {
+					if (validator.validateAddRequest(host, request)) {
+						return true;
+					}
+				}
+				return false;
+			}
+		};
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/validator/ModelClassLayoutRequestValidator.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/validator/ModelClassLayoutRequestValidator.java
index 6e21d3d97..8af23461e 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/validator/ModelClassLayoutRequestValidator.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/validator/ModelClassLayoutRequestValidator.java
@@ -19,24 +19,24 @@
  * @coverage core.gef.policy
  */
 public class ModelClassLayoutRequestValidator extends AbstractModelClassLayoutRequestValidator {
-  private final Class<?> m_requiredModelClass;
+	private final Class<?> m_requiredModelClass;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ModelClassLayoutRequestValidator(Class<?> requiredModelClass) {
-    m_requiredModelClass = requiredModelClass;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ModelClassLayoutRequestValidator(Class<?> requiredModelClass) {
+		m_requiredModelClass = requiredModelClass;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected boolean isValidClass(Class<?> clazz) {
-    return m_requiredModelClass.isAssignableFrom(clazz);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected boolean isValidClass(Class<?> clazz) {
+		return m_requiredModelClass.isAssignableFrom(clazz);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/gefTree/part/ObjectEditPart.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/gefTree/part/ObjectEditPart.java
index ca75ce519..532081dde 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/gefTree/part/ObjectEditPart.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/gefTree/part/ObjectEditPart.java
@@ -44,202 +44,202 @@
  * @coverage core.gefTree
  */
 public class ObjectEditPart extends TreeEditPart {
-  private final ObjectInfo m_object;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ObjectEditPart(ObjectInfo object) {
-    m_object = object;
-    setModel(m_object);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Life cycle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Listener m_updatePresentationListener;
-
-  @Override
-  public void activate() {
-    super.activate();
-    if (m_object.isRoot()) {
-      final TreeViewer viewer = (TreeViewer) getViewer();
-      final Tree tree = viewer.getTree();
-      // update presentation only when EditPart become visible
-      {
-        m_updatePresentationListener = new Listener() {
-          @Override
-          public void handleEvent(Event event) {
-            if (event.item.getData() instanceof ObjectEditPart) {
-              ObjectEditPart editPart = (ObjectEditPart) event.item.getData();
-              editPart.update();
-            }
-          }
-        };
-        tree.addListener(SWT.PaintItem, m_updatePresentationListener);
-      }
-      // refresh hierarchy
-      m_object.addBroadcastListener(new ObjectEventListener() {
-        private List<ObjectInfo> m_delayedSelectionObjects;
-
-        @Override
-        public void refreshed() throws Exception {
-          // do in setRedraw(false) to avoid flashing after component moving
-          tree.setRedraw(false);
-          try {
-            refresh();
-            {
-              setSelectionIfAllEditParts(m_delayedSelectionObjects);
-              m_delayedSelectionObjects = null;
-            }
-            viewer.setSelectionToTreeWidget();
-          } finally {
-            tree.setRedraw(true);
-          }
-        }
-
-        @Override
-        public void select(List<? extends ObjectInfo> objects) throws Exception {
-          m_delayedSelectionObjects = null;
-          // set selection now, or delay
-          if (!setSelectionIfAllEditParts(objects)) {
-            m_delayedSelectionObjects = Lists.newArrayList(objects);
-          }
-        }
-
-        private boolean setSelectionIfAllEditParts(List<? extends ObjectInfo> objects) {
-          List<EditPart> editParts = getAllEditParts(objects);
-          if (editParts == null) {
-            return false;
-          }
-          viewer.setSelection(editParts);
-          return true;
-        }
-
-        /**
-         * @return {@link EditPart} for each given model, or <code>null</code> if some model has no
-         *         {@link EditPart}.
-         */
-        private List<EditPart> getAllEditParts(List<? extends ObjectInfo> objects) {
-          if (objects == null) {
-            return null;
-          }
-          List<EditPart> editParts = Lists.newArrayList();
-          for (ObjectInfo object : objects) {
-            EditPart editPart = viewer.getEditPartByModel(object);
-            if (editPart == null) {
-              return null;
-            }
-            editParts.add(editPart);
-          }
-          return editParts;
-        }
-      });
-    }
-  }
-
-  @Override
-  public void deactivate() {
-    if (m_updatePresentationListener != null) {
-      TreeViewer viewer = (TreeViewer) getViewer();
-      Tree tree = viewer.getTree();
-      tree.removeListener(SWT.PaintItem, m_updatePresentationListener);
-    }
-    super.deactivate();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Visual
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private boolean m_updateRequired;
-
-  @Override
-  protected final void refreshVisuals() {
-    m_updateRequired = true;
-  }
-
-  private void update() {
-    if (m_updateRequired) {
-      m_updateRequired = false;
-      ExecutionUtils.runLogUI(new RunnableEx() {
-        @Override
-        public void run() throws Exception {
-          update0();
-        }
-      });
-    }
-  }
-
-  private void update0() {
-    Image image = ObjectsLabelProvider.INSTANCE.getImage(m_object);
-    String text = ObjectsLabelProvider.INSTANCE.getText(m_object);
-    if (image != null && !image.isDisposed()) {
-      getWidget().setImage(image);
-    }
-  //Obtain the preference specifying the root object name. If no name is specified then the default is used
-    String rootObjectName =
-        InstanceScope.INSTANCE.getNode(IEditorPreferenceConstants.WB_BASIC_UI_PREFERENCE_NODE).get(
-            IEditorPreferenceConstants.WB_ROOT_OBJ_NAME,
-            null);
-    if (getWidget().getParentItem() == null) {
-      if (rootObjectName == null) {
-        getWidget().setText(text);
-      } else {
-        getWidget().setText(rootObjectName);
-      }
-    } else {
-      getWidget().setText(text);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Policies
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createEditPolicies() {
-    super.createEditPolicies();
-    installEditPolicy(EditPolicy.SELECTION_ROLE, new SelectionEditPolicy());
-    installEditPolicy(new AutoExpandEditPolicy());
-    refreshEditPolicies();
-  }
-
-  /**
-   * Installs {@link EditPolicy}'s after model refresh.
-   */
-  protected void refreshEditPolicies() {
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Children
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected List<?> getModelChildren() {
-    return ExecutionUtils.runObjectLog(new RunnableObjectEx<List<?>>() {
-      @Override
-      public List<?> runObject() throws Exception {
-        return m_object.getPresentation().getChildrenTree();
-      }
-    }, Collections.emptyList());
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void refresh() {
-    super.refresh();
-    refreshEditPolicies();
-  }
+	private final ObjectInfo m_object;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ObjectEditPart(ObjectInfo object) {
+		m_object = object;
+		setModel(m_object);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Life cycle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Listener m_updatePresentationListener;
+
+	@Override
+	public void activate() {
+		super.activate();
+		if (m_object.isRoot()) {
+			final TreeViewer viewer = (TreeViewer) getViewer();
+			final Tree tree = viewer.getTree();
+			// update presentation only when EditPart become visible
+			{
+				m_updatePresentationListener = new Listener() {
+					@Override
+					public void handleEvent(Event event) {
+						if (event.item.getData() instanceof ObjectEditPart) {
+							ObjectEditPart editPart = (ObjectEditPart) event.item.getData();
+							editPart.update();
+						}
+					}
+				};
+				tree.addListener(SWT.PaintItem, m_updatePresentationListener);
+			}
+			// refresh hierarchy
+			m_object.addBroadcastListener(new ObjectEventListener() {
+				private List<ObjectInfo> m_delayedSelectionObjects;
+
+				@Override
+				public void refreshed() throws Exception {
+					// do in setRedraw(false) to avoid flashing after component moving
+					tree.setRedraw(false);
+					try {
+						refresh();
+						{
+							setSelectionIfAllEditParts(m_delayedSelectionObjects);
+							m_delayedSelectionObjects = null;
+						}
+						viewer.setSelectionToTreeWidget();
+					} finally {
+						tree.setRedraw(true);
+					}
+				}
+
+				@Override
+				public void select(List<? extends ObjectInfo> objects) throws Exception {
+					m_delayedSelectionObjects = null;
+					// set selection now, or delay
+					if (!setSelectionIfAllEditParts(objects)) {
+						m_delayedSelectionObjects = Lists.newArrayList(objects);
+					}
+				}
+
+				private boolean setSelectionIfAllEditParts(List<? extends ObjectInfo> objects) {
+					List<EditPart> editParts = getAllEditParts(objects);
+					if (editParts == null) {
+						return false;
+					}
+					viewer.setSelection(editParts);
+					return true;
+				}
+
+				/**
+				 * @return {@link EditPart} for each given model, or <code>null</code> if some model has no
+				 *         {@link EditPart}.
+				 */
+				private List<EditPart> getAllEditParts(List<? extends ObjectInfo> objects) {
+					if (objects == null) {
+						return null;
+					}
+					List<EditPart> editParts = Lists.newArrayList();
+					for (ObjectInfo object : objects) {
+						EditPart editPart = viewer.getEditPartByModel(object);
+						if (editPart == null) {
+							return null;
+						}
+						editParts.add(editPart);
+					}
+					return editParts;
+				}
+			});
+		}
+	}
+
+	@Override
+	public void deactivate() {
+		if (m_updatePresentationListener != null) {
+			TreeViewer viewer = (TreeViewer) getViewer();
+			Tree tree = viewer.getTree();
+			tree.removeListener(SWT.PaintItem, m_updatePresentationListener);
+		}
+		super.deactivate();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Visual
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private boolean m_updateRequired;
+
+	@Override
+	protected final void refreshVisuals() {
+		m_updateRequired = true;
+	}
+
+	private void update() {
+		if (m_updateRequired) {
+			m_updateRequired = false;
+			ExecutionUtils.runLogUI(new RunnableEx() {
+				@Override
+				public void run() throws Exception {
+					update0();
+				}
+			});
+		}
+	}
+
+	private void update0() {
+		Image image = ObjectsLabelProvider.INSTANCE.getImage(m_object);
+		String text = ObjectsLabelProvider.INSTANCE.getText(m_object);
+		if (image != null && !image.isDisposed()) {
+			getWidget().setImage(image);
+		}
+		//Obtain the preference specifying the root object name. If no name is specified then the default is used
+		String rootObjectName =
+				InstanceScope.INSTANCE.getNode(IEditorPreferenceConstants.WB_BASIC_UI_PREFERENCE_NODE).get(
+						IEditorPreferenceConstants.WB_ROOT_OBJ_NAME,
+						null);
+		if (getWidget().getParentItem() == null) {
+			if (rootObjectName == null) {
+				getWidget().setText(text);
+			} else {
+				getWidget().setText(rootObjectName);
+			}
+		} else {
+			getWidget().setText(text);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Policies
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createEditPolicies() {
+		super.createEditPolicies();
+		installEditPolicy(EditPolicy.SELECTION_ROLE, new SelectionEditPolicy());
+		installEditPolicy(new AutoExpandEditPolicy());
+		refreshEditPolicies();
+	}
+
+	/**
+	 * Installs {@link EditPolicy}'s after model refresh.
+	 */
+	protected void refreshEditPolicies() {
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Children
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected List<?> getModelChildren() {
+		return ExecutionUtils.runObjectLog(new RunnableObjectEx<List<?>>() {
+			@Override
+			public List<?> runObject() throws Exception {
+				return m_object.getPresentation().getChildrenTree();
+			}
+		}, Collections.emptyList());
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void refresh() {
+		super.refresh();
+		refreshEditPolicies();
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/gefTree/policy/ObjectLayoutEditPolicy.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/gefTree/policy/ObjectLayoutEditPolicy.java
index 1c07f40f5..662d46d70 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/gefTree/policy/ObjectLayoutEditPolicy.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/gefTree/policy/ObjectLayoutEditPolicy.java
@@ -30,116 +30,116 @@
  * @coverage core.gefTree.policy
  */
 public abstract class ObjectLayoutEditPolicy<C> extends LayoutEditPolicy {
-  private final ObjectInfo m_host;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ObjectLayoutEditPolicy(ObjectInfo host) {
-    m_host = host;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Command getCreateCommand(final Object newObject, final Object referenceObject) {
-    return new EditCommand(m_host) {
-      @Override
-      protected void executeEdit() throws Exception {
-        command_CREATE(getObjectModel(newObject), getReferenceModel(referenceObject));
-      }
-    };
-  }
-
-  @Override
-  protected Command getPasteCommand(final PasteRequest request, Object referenceObject) {
-    final C reference = getReferenceModel(referenceObject);
-    return GlobalState.getPasteRequestProcessor().getPasteCommand(
-        request,
-        new IPasteComponentProcessor() {
-          @Override
-          public void process(Object component) throws Exception {
-            command_CREATE(getObjectModel(component), reference);
-          }
-        });
-  }
-
-  @Override
-  protected Command getMoveCommand(final List<EditPart> moveParts, final Object referenceObject) {
-    return new EditCommand(m_host) {
-      @Override
-      protected void executeEdit() throws Exception {
-        List<C> objects = getModels(moveParts);
-        command_MOVE(objects, getReferenceModel(referenceObject));
-      }
-    };
-  }
-
-  @Override
-  protected Command getAddCommand(final List<EditPart> addParts, final Object referenceObject) {
-    return new EditCommand(m_host) {
-      @Override
-      protected void executeEdit() throws Exception {
-        List<C> objects = getModels(addParts);
-        command_ADD(objects, getReferenceModel(referenceObject));
-      }
-    };
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Implementation of commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected void command_CREATE(C newObject, C referenceObject) throws Exception {
-  }
-
-  protected void command_MOVE(List<C> objects, C referenceObject) throws Exception {
-    for (C object : objects) {
-      command_MOVE(object, referenceObject);
-    }
-  }
-
-  protected void command_ADD(List<C> objects, C referenceObject) throws Exception {
-    for (C object : objects) {
-      command_ADD(object, referenceObject);
-    }
-  }
-
-  protected void command_MOVE(C object, C referenceObject) throws Exception {
-  }
-
-  protected void command_ADD(C object, C referenceObject) throws Exception {
-    command_MOVE(object, referenceObject);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @SuppressWarnings("unchecked")
-  private C getObjectModel(Object object) {
-    return (C) object;
-  }
-
-  @SuppressWarnings("unchecked")
-  private C getReferenceModel(Object referenceObject) {
-    return (C) referenceObject;
-  }
-
-  private List<C> getModels(List<EditPart> editParts) {
-    List<C> objects = Lists.newArrayList();
-    for (EditPart editPart : editParts) {
-      Object rawModel = editPart.getModel();
-      C objectModel = getObjectModel(rawModel);
-      objects.add(objectModel);
-    }
-    return objects;
-  }
+	private final ObjectInfo m_host;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ObjectLayoutEditPolicy(ObjectInfo host) {
+		m_host = host;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Command getCreateCommand(final Object newObject, final Object referenceObject) {
+		return new EditCommand(m_host) {
+			@Override
+			protected void executeEdit() throws Exception {
+				command_CREATE(getObjectModel(newObject), getReferenceModel(referenceObject));
+			}
+		};
+	}
+
+	@Override
+	protected Command getPasteCommand(final PasteRequest request, Object referenceObject) {
+		final C reference = getReferenceModel(referenceObject);
+		return GlobalState.getPasteRequestProcessor().getPasteCommand(
+				request,
+				new IPasteComponentProcessor() {
+					@Override
+					public void process(Object component) throws Exception {
+						command_CREATE(getObjectModel(component), reference);
+					}
+				});
+	}
+
+	@Override
+	protected Command getMoveCommand(final List<EditPart> moveParts, final Object referenceObject) {
+		return new EditCommand(m_host) {
+			@Override
+			protected void executeEdit() throws Exception {
+				List<C> objects = getModels(moveParts);
+				command_MOVE(objects, getReferenceModel(referenceObject));
+			}
+		};
+	}
+
+	@Override
+	protected Command getAddCommand(final List<EditPart> addParts, final Object referenceObject) {
+		return new EditCommand(m_host) {
+			@Override
+			protected void executeEdit() throws Exception {
+				List<C> objects = getModels(addParts);
+				command_ADD(objects, getReferenceModel(referenceObject));
+			}
+		};
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Implementation of commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected void command_CREATE(C newObject, C referenceObject) throws Exception {
+	}
+
+	protected void command_MOVE(List<C> objects, C referenceObject) throws Exception {
+		for (C object : objects) {
+			command_MOVE(object, referenceObject);
+		}
+	}
+
+	protected void command_ADD(List<C> objects, C referenceObject) throws Exception {
+		for (C object : objects) {
+			command_ADD(object, referenceObject);
+		}
+	}
+
+	protected void command_MOVE(C object, C referenceObject) throws Exception {
+	}
+
+	protected void command_ADD(C object, C referenceObject) throws Exception {
+		command_MOVE(object, referenceObject);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@SuppressWarnings("unchecked")
+	private C getObjectModel(Object object) {
+		return (C) object;
+	}
+
+	@SuppressWarnings("unchecked")
+	private C getReferenceModel(Object referenceObject) {
+		return (C) referenceObject;
+	}
+
+	private List<C> getModels(List<EditPart> editParts) {
+		List<C> objects = Lists.newArrayList();
+		for (EditPart editPart : editParts) {
+			Object rawModel = editPart.getModel();
+			C objectModel = getObjectModel(rawModel);
+			objects.add(objectModel);
+		}
+		return objects;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/gefTree/policy/SingleObjectLayoutEditPolicy.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/gefTree/policy/SingleObjectLayoutEditPolicy.java
index 829085ab7..747794362 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/gefTree/policy/SingleObjectLayoutEditPolicy.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/gefTree/policy/SingleObjectLayoutEditPolicy.java
@@ -25,67 +25,67 @@
  * @coverage core.gefTree.policy
  */
 public abstract class SingleObjectLayoutEditPolicy<C> extends ObjectLayoutEditPolicy<C> {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SingleObjectLayoutEditPolicy(ObjectInfo host) {
-    super(host);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SingleObjectLayoutEditPolicy(ObjectInfo host) {
+		super(host);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Routing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected final boolean isGoodReferenceChild(Request request, EditPart editPart) {
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Routing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected final boolean isGoodReferenceChild(Request request, EditPart editPart) {
+		return false;
+	}
 
-  /**
-   * @return <code>true</code> if this container is empty, so we can drop new component.
-   */
-  protected abstract boolean isEmpty();
+	/**
+	 * @return <code>true</code> if this container is empty, so we can drop new component.
+	 */
+	protected abstract boolean isEmpty();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Command
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final Command getCommand(Request request) {
-    if (!isEmpty()) {
-      return null;
-    }
-    return super.getCommand(request);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Command
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final Command getCommand(Request request) {
+		if (!isEmpty()) {
+			return null;
+		}
+		return super.getCommand(request);
+	}
 
-  @Override
-  protected final Command getMoveCommand(List<EditPart> moveParts, Object referenceObject) {
-    return null;
-  }
+	@Override
+	protected final Command getMoveCommand(List<EditPart> moveParts, Object referenceObject) {
+		return null;
+	}
 
-  @Override
-  protected final Command getAddCommand(List<EditPart> addParts, Object referenceObject) {
-    if (addParts.size() != 1) {
-      return null;
-    }
-    return super.getAddCommand(addParts, referenceObject);
-  }
+	@Override
+	protected final Command getAddCommand(List<EditPart> addParts, Object referenceObject) {
+		if (addParts.size() != 1) {
+			return null;
+		}
+		return super.getAddCommand(addParts, referenceObject);
+	}
 
-  @Override
-  protected final void command_CREATE(C component, C reference) throws Exception {
-    command_CREATE(component);
-  }
+	@Override
+	protected final void command_CREATE(C component, C reference) throws Exception {
+		command_CREATE(component);
+	}
 
-  @Override
-  protected final void command_ADD(C component, C reference) throws Exception {
-    command_ADD(component);
-  }
+	@Override
+	protected final void command_ADD(C component, C reference) throws Exception {
+		command_ADD(component);
+	}
 
-  protected abstract void command_CREATE(C component) throws Exception;
+	protected abstract void command_CREATE(C component) throws Exception;
 
-  protected abstract void command_ADD(C component) throws Exception;
+	protected abstract void command_ADD(C component) throws Exception;
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/gefTree/policy/layout/ILayoutEditPolicyFactory.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/gefTree/policy/layout/ILayoutEditPolicyFactory.java
index cefc63203..584be9b07 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/gefTree/policy/layout/ILayoutEditPolicyFactory.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/gefTree/policy/layout/ILayoutEditPolicyFactory.java
@@ -20,8 +20,8 @@
  * @coverage core.gefTree.policy
  */
 public interface ILayoutEditPolicyFactory {
-  /**
-   * @return the {@link LayoutEditPolicy} for given model.
-   */
-  LayoutEditPolicy createLayoutEditPolicy(EditPart context, Object model);
+	/**
+	 * @return the {@link LayoutEditPolicy} for given model.
+	 */
+	LayoutEditPolicy createLayoutEditPolicy(EditPart context, Object model);
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/gefTree/policy/layout/LayoutPolicyUtils.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/gefTree/policy/layout/LayoutPolicyUtils.java
index 834fa50e1..3170708d9 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/gefTree/policy/layout/LayoutPolicyUtils.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/gefTree/policy/layout/LayoutPolicyUtils.java
@@ -23,36 +23,36 @@
  * @coverage core.gefTree.policy
  */
 public class LayoutPolicyUtils {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private LayoutPolicyUtils() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private LayoutPolicyUtils() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // LayoutEditPolicy creation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link LayoutEditPolicy} for given model.
-   */
-  public static LayoutEditPolicy createLayoutEditPolicy(EditPart context, Object model) {
-    List<ILayoutEditPolicyFactory> factories =
-        ExternalFactoriesHelper.getElementsInstances(
-            ILayoutEditPolicyFactory.class,
-            "org.eclipse.wb.core.treeEditPolicyFactories",
-            "factory");
-    // try to create policy
-    for (ILayoutEditPolicyFactory factory : factories) {
-      LayoutEditPolicy layoutEditPolicy = factory.createLayoutEditPolicy(context, model);
-      if (layoutEditPolicy != null) {
-        return layoutEditPolicy;
-      }
-    }
-    // not found
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// LayoutEditPolicy creation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link LayoutEditPolicy} for given model.
+	 */
+	public static LayoutEditPolicy createLayoutEditPolicy(EditPart context, Object model) {
+		List<ILayoutEditPolicyFactory> factories =
+				ExternalFactoriesHelper.getElementsInstances(
+						ILayoutEditPolicyFactory.class,
+						"org.eclipse.wb.core.treeEditPolicyFactories",
+						"factory");
+		// try to create policy
+		for (ILayoutEditPolicyFactory factory : factories) {
+			LayoutEditPolicy layoutEditPolicy = factory.createLayoutEditPolicy(context, model);
+			if (layoutEditPolicy != null) {
+				return layoutEditPolicy;
+			}
+		}
+		// not found
+		return null;
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/model/HasSourcePosition.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/model/HasSourcePosition.java
index 6b267015d..bd11b3286 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/model/HasSourcePosition.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/model/HasSourcePosition.java
@@ -17,8 +17,8 @@
  * @coverage core.model
  */
 public interface HasSourcePosition {
-  /**
-   * @return the position of this component in source.
-   */
-  int getSourcePosition();
+	/**
+	 * @return the position of this component in source.
+	 */
+	int getSourcePosition();
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/model/IAbstractComponentInfo.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/model/IAbstractComponentInfo.java
index e81c009b7..61098ee12 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/model/IAbstractComponentInfo.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/model/IAbstractComponentInfo.java
@@ -22,141 +22,141 @@
  * @coverage core.model
  */
 public interface IAbstractComponentInfo extends IObjectInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Insets
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the insets of client area of this component. {@link #getBounds()} returns bounds
-   *         relative to the client area of parent, but often we need bounds relative to the
-   *         top-left point of parent.
-   */
-  Insets getClientAreaInsets();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Insets
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the insets of client area of this component. {@link #getBounds()} returns bounds
+	 *         relative to the client area of parent, but often we need bounds relative to the
+	 *         top-left point of parent.
+	 */
+	Insets getClientAreaInsets();
 
-  /**
-   * Sets the insets of client area of this component.
-   */
-  void setClientAreaInsets(Insets clientAreaInsets);
+	/**
+	 * Sets the insets of client area of this component.
+	 */
+	void setClientAreaInsets(Insets clientAreaInsets);
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if this container uses right-to-left orientation.
-   */
-  boolean isRTL();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if this container uses right-to-left orientation.
+	 */
+	boolean isRTL();
 
-  /**
-   * @return the preferred size of this component. If this {@link IAbstractComponentInfo} is in
-   *         process of creation, {@link #getLivePreferredSize()} will be used to get "live"
-   *         preferred size.
-   */
-  Dimension getPreferredSize();
+	/**
+	 * @return the preferred size of this component. If this {@link IAbstractComponentInfo} is in
+	 *         process of creation, {@link #getLivePreferredSize()} will be used to get "live"
+	 *         preferred size.
+	 */
+	Dimension getPreferredSize();
 
-  /**
-   * @return the toolkit {@link Object} instance created for this {@link IAbstractComponentInfo}.
-   */
-  Object getObject();
+	/**
+	 * @return the toolkit {@link Object} instance created for this {@link IAbstractComponentInfo}.
+	 */
+	Object getObject();
 
-  /**
-   * @return the {@link Image} of this component, can be <code>null</code> if GUI toolkit does not
-   *         support getting separate images for components. If this {@link IAbstractComponentInfo}
-   *         is in process of creation, "live" image will be returned.
-   */
-  Image getImage();
+	/**
+	 * @return the {@link Image} of this component, can be <code>null</code> if GUI toolkit does not
+	 *         support getting separate images for components. If this {@link IAbstractComponentInfo}
+	 *         is in process of creation, "live" image will be returned.
+	 */
+	Image getImage();
 
-  /**
-   * @return the baseline of this component. If this {@link IAbstractComponentInfo} is in process of
-   *         creation, {@link #getLiveBaseline()} will be used to get "live" baseline.
-   */
-  int getBaseline();
+	/**
+	 * @return the baseline of this component. If this {@link IAbstractComponentInfo} is in process of
+	 *         creation, {@link #getLiveBaseline()} will be used to get "live" baseline.
+	 */
+	int getBaseline();
 
-  /**
-   * @return the {@link ITopBoundsSupport} for this component.
-   */
-  ITopBoundsSupport getTopBoundsSupport();
+	/**
+	 * @return the {@link ITopBoundsSupport} for this component.
+	 */
+	ITopBoundsSupport getTopBoundsSupport();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Bounds
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Returns the "shot" bounds.
-   *
-   * The "shot" bounds is the bounds relative top-left corner of the parent including top and left
-   * border size, i.e. parent insets left and insets top. The transformation between "model" bounds
-   * and "shot" bounds is:
-   *
-   * <pre><code>
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Bounds
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Returns the "shot" bounds.
+	 *
+	 * The "shot" bounds is the bounds relative top-left corner of the parent including top and left
+	 * border size, i.e. parent insets left and insets top. The transformation between "model" bounds
+	 * and "shot" bounds is:
+	 *
+	 * <pre><code>
 	 * shotBounds.x = modelBounds.x + parentInsets.left;
 	 * shotBounds.y = modelBounds.y + parentInsets.top;
 	 * </code></pre>
-   *
-   * If this {@link AbstractComponentInfo} is in process of "paste", absolute bounds of source
-   * component will be returned (i.e. bounds relative top-left corner of source root component).
-   *
-   * @return the "shot" bounds.
-   */
-  Rectangle getBounds();
+	 *
+	 * If this {@link AbstractComponentInfo} is in process of "paste", absolute bounds of source
+	 * component will be returned (i.e. bounds relative top-left corner of source root component).
+	 *
+	 * @return the "shot" bounds.
+	 */
+	Rectangle getBounds();
 
-  /**
-   * Sets new "shot" bounds of this component.
-   *
-   * The "shot" bounds is the bounds relative to top-left corner of the parent including top and
-   * left border size, i.e. parent insets left and insets top.
-   *
-   * The transformation between "model" bounds and "shot" bounds is:
-   *
-   * <pre><code>
+	/**
+	 * Sets new "shot" bounds of this component.
+	 *
+	 * The "shot" bounds is the bounds relative to top-left corner of the parent including top and
+	 * left border size, i.e. parent insets left and insets top.
+	 *
+	 * The transformation between "model" bounds and "shot" bounds is:
+	 *
+	 * <pre><code>
 	 * shotBounds.x = modelBounds.x + parentInsets.left;
 	 * shotBounds.y = modelBounds.y + parentInsets.top;
 	 * </code></pre>
-   *
-   * This method should be used by subclasses during fetching visual information.
-   */
-  void setBounds(Rectangle bounds);
+	 *
+	 * This method should be used by subclasses during fetching visual information.
+	 */
+	void setBounds(Rectangle bounds);
 
-  /**
-   * Return the bounds in terms of GUI toolkit ("model" bounds).
-   *
-   * The "model" bounds is the bounds relative to top-left corner of parent's client area. This
-   * bounds value is usually the bounds of component object, placed on parent container.
-   *
-   * The transformation between "shot" bounds and "model" bounds is:
-   *
-   * <pre><code>
+	/**
+	 * Return the bounds in terms of GUI toolkit ("model" bounds).
+	 *
+	 * The "model" bounds is the bounds relative to top-left corner of parent's client area. This
+	 * bounds value is usually the bounds of component object, placed on parent container.
+	 *
+	 * The transformation between "shot" bounds and "model" bounds is:
+	 *
+	 * <pre><code>
 	 * modelBounds.x = shotBounds.x - parentInsets.left;
 	 * modelBounds.y = shotBounds.y - parentInsets.top;
 	 * </code></pre>
-   *
-   * During paste process this bounds is not actually a "model" bounds, but same as "shot" bounds
-   * during paste. See {@link #getBounds(Rectangle)}.
-   *
-   * @return the bounds in terms of GUI toolkit ("model" bounds).
-   */
-  Rectangle getModelBounds();
+	 *
+	 * During paste process this bounds is not actually a "model" bounds, but same as "shot" bounds
+	 * during paste. See {@link #getBounds(Rectangle)}.
+	 *
+	 * @return the bounds in terms of GUI toolkit ("model" bounds).
+	 */
+	Rectangle getModelBounds();
 
-  /**
-   * Sets new "model" bounds of this component.
-   *
-   * The "model" bounds is the bounds relative to top-left corner of parent's client area. This
-   * bounds value is usually the bounds of component object, placed on parent container.
-   *
-   * The transformation between "shot" bounds and "model" bounds is:
-   *
-   * <pre><code>
+	/**
+	 * Sets new "model" bounds of this component.
+	 *
+	 * The "model" bounds is the bounds relative to top-left corner of parent's client area. This
+	 * bounds value is usually the bounds of component object, placed on parent container.
+	 *
+	 * The transformation between "shot" bounds and "model" bounds is:
+	 *
+	 * <pre><code>
 	 * modelBounds.x = shotBounds.x - parentInsets.left;
 	 * modelBounds.y = shotBounds.y - parentInsets.top;
 	 * </code></pre>
-   *
-   * This method should be used by subclasses during fetching visual information.
-   *
-   * During paste process this bounds is not actually a "model" bounds, but same as "shot" bounds
-   * during paste. See {@link #getBounds(Rectangle)}.
-   */
-  void setModelBounds(Rectangle bounds);
+	 *
+	 * This method should be used by subclasses during fetching visual information.
+	 *
+	 * During paste process this bounds is not actually a "model" bounds, but same as "shot" bounds
+	 * during paste. See {@link #getBounds(Rectangle)}.
+	 */
+	void setModelBounds(Rectangle bounds);
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/model/IObjectInfo.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/model/IObjectInfo.java
index 2cd1aa67f..a985823c1 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/model/IObjectInfo.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/model/IObjectInfo.java
@@ -20,73 +20,73 @@
  * @coverage core.model
  */
 public interface IObjectInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the underlying {@link ObjectInfo} model.
-   */
-  ObjectInfo getUnderlyingModel();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the underlying {@link ObjectInfo} model.
+	 */
+	ObjectInfo getUnderlyingModel();
 
-  /**
-   * @return <code>true</code> if this object is in process of deleting.
-   */
-  boolean isDeleting();
+	/**
+	 * @return <code>true</code> if this object is in process of deleting.
+	 */
+	boolean isDeleting();
 
-  /**
-   * @return <code>true</code> if this object was deleted from its parent.
-   */
-  boolean isDeleted();
+	/**
+	 * @return <code>true</code> if this object was deleted from its parent.
+	 */
+	boolean isDeleted();
 
-  /**
-   * @return the parent of this object
-   */
-  ObjectInfo getParent();
+	/**
+	 * @return the parent of this object
+	 */
+	ObjectInfo getParent();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Broadcasting
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds new listener with type of superclass.
-   * <p>
-   * Given listener is bound to this instance of {@link IObjectInfo}, so if {@link IObjectInfo} will
-   * be removed from its parent, after next refresh() listener also will be removed. We should do
-   * this to prevent memory leaks.
-   */
-  public void addBroadcastListener(Object listenerImpl);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Broadcasting
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds new listener with type of superclass.
+	 * <p>
+	 * Given listener is bound to this instance of {@link IObjectInfo}, so if {@link IObjectInfo} will
+	 * be removed from its parent, after next refresh() listener also will be removed. We should do
+	 * this to prevent memory leaks.
+	 */
+	public void addBroadcastListener(Object listenerImpl);
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Properties
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link Property} with given title or <code>null</code> if no such {@link Property}
-   *         found.
-   */
-  Property getPropertyByTitle(String title) throws Exception;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Properties
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link Property} with given title or <code>null</code> if no such {@link Property}
+	 *         found.
+	 */
+	Property getPropertyByTitle(String title) throws Exception;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return {@link IObjectPresentation} for visual presentation of this object.
-   */
-  IObjectPresentation getPresentation();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return {@link IObjectPresentation} for visual presentation of this object.
+	 */
+	IObjectPresentation getPresentation();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Delete
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Deletes this {@link IObjectInfo} from its parent.
-   */
-  void delete() throws Exception;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Delete
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Deletes this {@link IObjectInfo} from its parent.
+	 */
+	void delete() throws Exception;
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/model/ITopBoundsSupport.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/model/ITopBoundsSupport.java
index f519d89e0..d0e86eb81 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/model/ITopBoundsSupport.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/model/ITopBoundsSupport.java
@@ -17,8 +17,8 @@
  * @coverage core.model
  */
 public interface ITopBoundsSupport {
-  /**
-   * Sets new size of component.
-   */
-  void setSize(int width, int height) throws Exception;
+	/**
+	 * Sets new size of component.
+	 */
+	void setSize(int width, int height) throws Exception;
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/model/ObjectInfo.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/model/ObjectInfo.java
index c03af375d..43c7588a7 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/model/ObjectInfo.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/model/ObjectInfo.java
@@ -39,636 +39,636 @@
  * @coverage core.model
  */
 public abstract class ObjectInfo implements IObjectInfo {
-  public static final String KEY_NO_REFRESHED_BROADCAST =
-      "ObjectInfo: don't send refreshed() broadcast";
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance fields
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private ObjectInfo m_parent;
-  private final List<ObjectInfo> m_children = Lists.newLinkedList();
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return {@link IObjectPresentation} for visual presentation of this object.
-   */
-  @Override
-  public abstract IObjectPresentation getPresentation();
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Hierarchy
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public ObjectInfo getUnderlyingModel() {
-    return this;
-  }
-
-  /**
-   * @return <code>true</code> if this object is root, i.e. has no parent.
-   */
-  public final boolean isRoot() {
-    return m_parent == null;
-  }
-
-  /**
-   * @return <code>true</code> if this object is given object or its parent.
-   */
-  public final boolean isItOrParentOf(ObjectInfo o) {
-    return o == this || isParentOf(o);
-  }
-
-  /**
-   * @param o
-   *          the potential child.
-   *
-   * @return <code>true</code> if this object is direct/indirect parent of given object.
-   */
-  public final boolean isParentOf(ObjectInfo o) {
-    while (o != null) {
-      ObjectInfo parent = o.getParent();
-      if (parent != null && !parent.getChildren().contains(o)) {
-        return false;
-      }
-      if (parent == this) {
-        return true;
-      }
-      o = parent;
-    }
-    return false;
-  }
-
-  /**
-   * @param parents
-   *          the list of possible parents.
-   *
-   * @return the direct/indirect parent of this object from the list of possible parents.
-   */
-  @SuppressWarnings("unchecked")
-  public final <T extends ObjectInfo> T getParent(List<T> parents) {
-    ObjectInfo o = getParent();
-    for (; o != null; o = o.getParent()) {
-      if (parents.contains(o)) {
-        return (T) o;
-      }
-    }
-    // no parent found
-    return null;
-  }
-
-  /**
-   * @return the root {@link ObjectInfo}.
-   */
-  public final ObjectInfo getRoot() {
-    return m_parent == null ? this : m_parent.getRoot();
-  }
-
-  @Override
-  public final ObjectInfo getParent() {
-    return m_parent;
-  }
-
-  /**
-   * Sets the parent of this object, but does not add it to parent.
-   */
-  public final void setParent(ObjectInfo parent) {
-    m_parent = parent;
-  }
-
-  /**
-   * @return list of {@link ObjectInfo} children.
-   */
-  public final List<ObjectInfo> getChildren() {
-    return m_children;
-  }
-
-  /**
-   * @return list of children with given type.
-   */
-  public final <T extends ObjectInfo> List<T> getChildren(Class<T> clazz) {
-    return GenericsUtils.select(m_children, clazz);
-  }
-
-  /**
-   * Adds given child to the end of children list.
-   */
-  public final void addChild(ObjectInfo child) throws Exception {
-    addChild(child, null);
-  }
-
-  /**
-   * Adds given child as first into children list.
-   */
-  public final void addChildFirst(ObjectInfo child) throws Exception {
-    ObjectInfo nextChild = GenericsUtils.getFirstOrNull(m_children);
-    addChild(child, nextChild);
-  }
-
-  /**
-   * Adds given <code>child</code> to the children list directly before <code>nextChild</code>.
-   */
-  public final void addChild(final ObjectInfo child, ObjectInfo nextChild) throws Exception {
-    // pre-checks
-    {
-      Assert.isNotNull(child);
-      Assert.isTrue(!m_children.contains(child));
-      // don't allow add parent to its child
-      child.accept(new ObjectInfoVisitor() {
-        @Override
-        public void endVisit(ObjectInfo objectInfo) throws Exception {
-          Assert.isTrue(
-              objectInfo != ObjectInfo.this,
-              "<code>%s</code> is parent of <code>%s</code>, so first can not be added as child of second.",
-              child,
-              ObjectInfo.this);
-        }
-      });
-    }
-    // send "before" broadcast, may be "nextChild" will be changed
-    {
-      ObjectInfo[] nextChild_ref = new ObjectInfo[]{nextChild};
-      getBroadcast(ObjectInfoChildAddBefore.class).invoke(this, child, nextChild_ref);
-      nextChild = nextChild_ref[0];
-    }
-    // prepare index
-    int index;
-    if (nextChild != null) {
-      index = m_children.indexOf(nextChild);
-    } else {
-      index = m_children.size();
-    }
-    // do add
-    m_children.add(index, child);
-    child.m_parent = this;
-    //
-    getBroadcast(ObjectInfoChildAddAfter.class).invoke(this, child);
-  }
-
-  /**
-   * Moves existing <code>child</code> in children list directly before <code>nextChild</code>.
-   */
-  public final void moveChild(ObjectInfo child, ObjectInfo nextChild) throws Exception {
-    Assert.isTrue(m_children.contains(child));
-    // if not before itself
-    if (child != nextChild) {
-      getBroadcastObject().childMoveBefore(this, child, nextChild);
-      // remove from old index
-      int oldIndex = m_children.indexOf(child);
-      m_children.remove(child);
-      // prepare target index
-      int index;
-      if (nextChild != null) {
-        index = m_children.indexOf(nextChild);
-      } else {
-        index = m_children.size();
-      }
-      // add to target index
-      m_children.add(index, child);
-      //
-      getBroadcastObject().childMoveAfter(this, child, nextChild, oldIndex, index);
-    }
-  }
-
-  /**
-   * Removes given child from the list of children.
-   */
-  public final void removeChild(ObjectInfo child) throws Exception {
-    Assert.isTrue(m_children.contains(child));
-    //
-    getBroadcastObject().childRemoveBefore(this, child);
-    m_children.remove(child);
-    getBroadcastObject().childRemoveAfter(this, child);
-  }
-
-  /**
-   * Replaces given <code>oldChild</code> with <code>newChild</code>.
-   */
-  public final void replaceChild(ObjectInfo oldChild, ObjectInfo newChild) throws Exception {
-    Assert.isTrue(m_children.contains(oldChild));
-    Assert.isNotNull(newChild);
-    int index = m_children.indexOf(oldChild);
-    m_children.set(index, newChild);
-    newChild.m_parent = this;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Visiting
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Visits this {@link ObjectInfo} and its children using given {@link ObjectInfoVisitor}.
-   */
-  public final void accept(final ObjectInfoVisitor visitor) {
-    ExecutionUtils.runRethrow(() -> accept0(visitor));
-  }
-
-  /**
-   * Unsafe implementation of {@link #accept(ObjectInfoVisitor)}.
-   */
-  public final void accept0(final ObjectInfoVisitor visitor) throws Exception {
-    if (visitor.visit(ObjectInfo.this)) {
-      for (ObjectInfo child : getChildren()) {
-        child.accept0(visitor);
-      }
-      visitor.endVisit(ObjectInfo.this);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Broadcasting
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private BroadcastSupport m_broadcastSupport;
-
-  /**
-   * Returns the {@link BroadcastSupport} for this {@link ObjectInfo} hierarchy.<br>
-   * Note that for add/get listeners the appropriate methods should be used instead of this method.
-   *
-   * @see #addBroadcastListener(Object)
-   * @see #removeBroadcastListener(Object)
-   * @see #targetBroadcastListener(ObjectInfo)
-   * @see #getBroadcast(Class)
-   * @return the {@link BroadcastSupport} for this {@link ObjectInfo} hierarchy.
-   */
-  public BroadcastSupport getBroadcastSupport() {
-    return isRoot() ? m_broadcastSupport : getRoot().getBroadcastSupport();
-  }
-
-  /**
-   * Returns the broadcast listener of given class in this {@link ObjectInfo} hierarchy.
-   *
-   * @see BroadcastSupport#getListener(Class)
-   * @return the broadcast listener of given class in this {@link ObjectInfo} hierarchy.
-   */
-  public <T> T getBroadcast(Class<T> listenerClass) {
-    return getBroadcastSupport().getListener(listenerClass);
-  }
-
-  @Override
-  public final void addBroadcastListener(Object listenerImpl) {
-    getBroadcastSupport().addListener(this, listenerImpl);
-  }
-
-  /**
-   * Adds new listener with type of superclass.
-   */
-  public final void removeBroadcastListener(Object listenerImpl) {
-    getBroadcastSupport().removeListener(this, listenerImpl);
-  }
-
-  /**
-   * Sets different target instead of "this".
-   */
-  public final void targetBroadcastListener(ObjectInfo newTarget) {
-    getBroadcastSupport().targetListener(this, newTarget);
-  }
-
-  /**
-   * Externally sets the {@link BroadcastSupport}.
-   */
-  protected final void setBroadcastSupport(BroadcastSupport broadcastSupport) {
-    m_broadcastSupport = broadcastSupport;
-  }
-
-  /**
-   * @return the {@link ObjectEventListener} for hierarchy.
-   */
-  public final ObjectEventListener getBroadcastObject() {
-    return ExecutionUtils.runObject(() -> getBroadcastSupport().getListener(ObjectEventListener.class));
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Properties
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Return array of {@link Property}'s for this information object.
-   */
-  public Property[] getProperties() throws Exception {
-    List<Property> propertyList = getPropertyList();
-    getBroadcast(ObjectInfoAllProperties.class).invoke(this, propertyList);
-    sortPropertyList(propertyList);
-    return propertyList.toArray(new Property[propertyList.size()]);
-  }
-
-  /**
-   * Do properties sorting. Default implementation sorts properties by title alphabetically.
-   */
-  protected void sortPropertyList(List<Property> properties) {
-    Collections.sort(properties, (o1, o2) -> o1.getTitle().compareTo(o2.getTitle()));
-  }
-
-  /**
-   * @return the {@link List} of {@link Property}'s.
-   */
-  protected List<Property> getPropertyList() throws Exception {
-    return Lists.newArrayList();
-  }
-
-  @Override
-  public final Property getPropertyByTitle(String title) throws Exception {
-    for (Property property : getPropertyList()) {
-      if (title.equals(property.getTitle())) {
-        return property;
-      }
-    }
-    return null;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Delete operation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected static final String FLAG_DELETING = "we are in process of deleting";
-
-  @Override
-  public final boolean isDeleting() {
-    return getArbitraryValue(FLAG_DELETING) != null;
-  }
-
-  /**
-   * @return <code>true</code> if {@link #delete()} can be used.
-   */
-  public boolean canDelete() {
-    return false;
-  }
-
-  @Override
-  public void delete() throws Exception {
-  }
-
-  @Override
-  public final boolean isDeleted() {
-    return m_parent != null && !m_parent.m_children.contains(this);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Edit operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private int m_editDepth;
-
-  /**
-   * Prepare this component to start a new sequence of edits.
-   */
-  public final void startEdit() throws Exception {
-    ObjectInfo root = getRoot();
-    root.m_editDepth++;
-  }
-
-  /**
-   * End a possibly nested sequence of edits. If this marks the end of the outermost sequence of
-   * edits, then commit the edits that have been made and call {@link #refresh()}.
-   */
-  public final void endEdit() throws Exception {
-    ObjectInfo root = getRoot();
-    root.m_editDepth--;
-    if (root.m_editDepth == 0) {
-      root.fire_aboutToRefresh();
-      root.saveEdit();
-      root.refresh();
-    }
-  }
-
-  /**
-   * Fires {@link ObjectEventListener#endEdit_aboutToRefresh()} listener, wraps it in "fake" edit
-   * operation to avoid possible double {@link #refresh()}.
-   */
-  private void fire_aboutToRefresh() throws Exception {
-    m_editDepth++;
-    getBroadcastObject().endEdit_aboutToRefresh();
-    m_editDepth--;
-  }
-
-  /**
-   * Saves changes done during edit transaction.
-   */
-  protected void saveEdit() throws Exception {
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Refreshes tree of model objects.
-   *
-   * Components can for example create components tree, fetch any visual information (image, bounds,
-   * etc), and as last step dispose components tree to clean up resources.
-   */
-  public final void refresh() throws Exception {
-    Assert.isLegal(isRoot());
-    // clean up broadcast
-    getBroadcastSupport().cleanUpTargets(ObjectInfo.this);
-    // do refresh
-    execRefreshOperation(() -> ExecutionUtils.runDesignTime(() -> refreshCreate0()));
-    // split fetch operations into separate parts
-    execRefreshOperation(() -> ExecutionUtils.runDesignTime(() -> {
-	    refresh_fetch();
-	    refresh_finish();
-	  }));
-    // send notifications
-    if (getArbitraryValue(KEY_NO_REFRESHED_BROADCAST) != Boolean.FALSE) {
-      getBroadcastObject().refreshed();
-      getBroadcastObject().refreshed2();
-    }
-  }
-
-  /**
-   * Runs {@link RunnableEx} performing refresh. This is overridden in Swing because it requires
-   * doing refresh in AWT dispatch thread.
-   */
-  protected void execRefreshOperation(RunnableEx runnableEx) throws Exception {
-    runnableEx.run();
-  }
-
-  /**
-   * Performs "light" version of {@link #refresh()}, just create new objects, but don't fetch.
-   */
-  public final void refreshLight() throws Exception {
-    Assert.isLegal(isRoot());
-    // do refresh
-    execRefreshOperation(() -> ExecutionUtils.runDesignTime(() -> refreshCreate0()));
-    execRefreshOperation(() -> ExecutionUtils.runDesignTime(() -> refresh_finish()));
-  }
-
-  /**
-   * Performs "create" steps.
-   */
-  private void refreshCreate0() throws Exception {
-    refresh_dispose();
-    try {
-      refresh_beforeCreate();
-      refresh_create();
-      refresh_afterCreate0();
-      refresh_afterCreate();
-      refresh_afterCreate2();
-    } finally {
-      getBroadcast(ObjectEventListener.class).refreshFinallyRefresh();
-    }
-  }
-
-  /**
-   * This method is invoked before {@link #refresh_create()}. It may be called multiple times, every
-   * time when disposing the resources needed.<br>
-   * It can for example clear any resource allocated by previous {@link #refresh_create()} or
-   * {@link #refresh_fetch()}.<br>
-   * Sends the {@link ObjectEventListener#refreshDispose()} broadcast for root object.
-   */
-  public void refresh_dispose() throws Exception {
-    if (isRoot()) {
-      getBroadcastObject().refreshDispose();
-    }
-    for (ObjectInfo child : getChildren()) {
-      child.refresh_dispose();
-    }
-  }
-
-  /**
-   * This method is invoked just before {@link #refresh_create()} and called only once.<br>
-   * Sends the {@link ObjectEventListener#refreshBeforeCreate()} broadcast for root object.
-   */
-  public void refresh_beforeCreate() throws Exception {
-    if (isRoot()) {
-      getBroadcastObject().refreshBeforeCreate();
-    }
-    for (ObjectInfo child : getChildren()) {
-      child.refresh_beforeCreate();
-    }
-  }
-
-  /**
-   * This method creates its object.
-   */
-  protected void refresh_create() throws Exception {
-    for (ObjectInfo child : getChildren()) {
-      child.refresh_create();
-    }
-  }
-
-  /**
-   * This method is invoked after {@link #refresh_create()}.<br>
-   * This method is invoked before {@link #refresh_afterCreate()}.<br>
-   * Sometimes it is not enough to have single <code>afterCreate</code> notification.
-   */
-  protected void refresh_afterCreate0() throws Exception {
-    if (isRoot()) {
-      getBroadcastObject().refreshAfterCreate0();
-    }
-    for (ObjectInfo child : getChildren()) {
-      child.refresh_afterCreate0();
-    }
-  }
-
-  /**
-   * This method is invoked after {@link #refresh_afterCreate0()}.<br>
-   * This is good place to do any operations that require full objects tree to be build.<br>
-   * Sends the {@link ObjectEventListener#refreshAfterCreate()} broadcast for root object.
-   */
-  protected void refresh_afterCreate() throws Exception {
-    if (isRoot()) {
-      getBroadcastObject().refreshAfterCreate();
-    }
-    for (ObjectInfo child : getChildren()) {
-      child.refresh_afterCreate();
-    }
-  }
-
-  /**
-   * This method is invoked after {@link #refresh_afterCreate()}.<br>
-   * This is good place to do any operations that require full objects tree to be build.<br>
-   * Sends the {@link ObjectEventListener#refreshAfterCreate2()} broadcast for root object.
-   */
-  protected void refresh_afterCreate2() throws Exception {
-    if (isRoot()) {
-      getBroadcastObject().refreshAfterCreate2();
-    }
-    for (ObjectInfo child : getChildren()) {
-      child.refresh_afterCreate2();
-    }
-  }
-
-  /**
-   * This method should fetch any information about object that needed for future operations, for
-   * example its image, bounds, etc.
-   */
-  protected void refresh_fetch() throws Exception {
-    for (ObjectInfo child : getChildren()) {
-      child.refresh_fetch();
-    }
-  }
-
-  /**
-   * This is last method invoked during "refresh" cycle. It can clean up any resource that should be
-   * accessible only during refresh. In contrast {@link #refresh_dispose()} clear more long lived
-   * resources, that should live between {@link #refresh()} invocations.
-   */
-  protected void refresh_finish() throws Exception {
-    List<ObjectInfo> children = getChildren();
-    children = ImmutableList.copyOf(getChildren());
-    for (ObjectInfo child : children) {
-      child.refresh_finish();
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Arbitrary values map
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Map<Object, Object> m_arbitraryMap;
-
-  /**
-   * Associates the given value with the given key.
-   */
-  public final void putArbitraryValue(Object key, Object value) {
-    if (m_arbitraryMap == null) {
-      m_arbitraryMap = new HashMap<>();
-    }
-    m_arbitraryMap.put(key, value);
-  }
-
-  /**
-   * @return the value to which the given key is mapped, or <code>null</code>.
-   */
-  public final Object getArbitraryValue(Object key) {
-    if (m_arbitraryMap != null) {
-      return m_arbitraryMap.get(key);
-    }
-    return null;
-  }
-
-  /**
-   * Removes the mapping for a key.
-   */
-  public final void removeArbitraryValue(Object key) {
-    if (m_arbitraryMap != null) {
-      m_arbitraryMap.remove(key);
-    }
-  }
-
-  /**
-   * @return the mapped arbitrary keys.
-   */
-  public final Map<Object, Object> getArbitraries() {
-    Map<Object, Object> arbitraries;
-    if (m_arbitraryMap != null) {
-      arbitraries = new HashMap<>(m_arbitraryMap);
-    } else {
-      arbitraries = ImmutableMap.of();
-    }
-    return arbitraries;
-  }
+	public static final String KEY_NO_REFRESHED_BROADCAST =
+			"ObjectInfo: don't send refreshed() broadcast";
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance fields
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private ObjectInfo m_parent;
+	private final List<ObjectInfo> m_children = Lists.newLinkedList();
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return {@link IObjectPresentation} for visual presentation of this object.
+	 */
+	@Override
+	public abstract IObjectPresentation getPresentation();
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Hierarchy
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public ObjectInfo getUnderlyingModel() {
+		return this;
+	}
+
+	/**
+	 * @return <code>true</code> if this object is root, i.e. has no parent.
+	 */
+	public final boolean isRoot() {
+		return m_parent == null;
+	}
+
+	/**
+	 * @return <code>true</code> if this object is given object or its parent.
+	 */
+	public final boolean isItOrParentOf(ObjectInfo o) {
+		return o == this || isParentOf(o);
+	}
+
+	/**
+	 * @param o
+	 *          the potential child.
+	 *
+	 * @return <code>true</code> if this object is direct/indirect parent of given object.
+	 */
+	public final boolean isParentOf(ObjectInfo o) {
+		while (o != null) {
+			ObjectInfo parent = o.getParent();
+			if (parent != null && !parent.getChildren().contains(o)) {
+				return false;
+			}
+			if (parent == this) {
+				return true;
+			}
+			o = parent;
+		}
+		return false;
+	}
+
+	/**
+	 * @param parents
+	 *          the list of possible parents.
+	 *
+	 * @return the direct/indirect parent of this object from the list of possible parents.
+	 */
+	@SuppressWarnings("unchecked")
+	public final <T extends ObjectInfo> T getParent(List<T> parents) {
+		ObjectInfo o = getParent();
+		for (; o != null; o = o.getParent()) {
+			if (parents.contains(o)) {
+				return (T) o;
+			}
+		}
+		// no parent found
+		return null;
+	}
+
+	/**
+	 * @return the root {@link ObjectInfo}.
+	 */
+	public final ObjectInfo getRoot() {
+		return m_parent == null ? this : m_parent.getRoot();
+	}
+
+	@Override
+	public final ObjectInfo getParent() {
+		return m_parent;
+	}
+
+	/**
+	 * Sets the parent of this object, but does not add it to parent.
+	 */
+	public final void setParent(ObjectInfo parent) {
+		m_parent = parent;
+	}
+
+	/**
+	 * @return list of {@link ObjectInfo} children.
+	 */
+	public final List<ObjectInfo> getChildren() {
+		return m_children;
+	}
+
+	/**
+	 * @return list of children with given type.
+	 */
+	public final <T extends ObjectInfo> List<T> getChildren(Class<T> clazz) {
+		return GenericsUtils.select(m_children, clazz);
+	}
+
+	/**
+	 * Adds given child to the end of children list.
+	 */
+	public final void addChild(ObjectInfo child) throws Exception {
+		addChild(child, null);
+	}
+
+	/**
+	 * Adds given child as first into children list.
+	 */
+	public final void addChildFirst(ObjectInfo child) throws Exception {
+		ObjectInfo nextChild = GenericsUtils.getFirstOrNull(m_children);
+		addChild(child, nextChild);
+	}
+
+	/**
+	 * Adds given <code>child</code> to the children list directly before <code>nextChild</code>.
+	 */
+	public final void addChild(final ObjectInfo child, ObjectInfo nextChild) throws Exception {
+		// pre-checks
+		{
+			Assert.isNotNull(child);
+			Assert.isTrue(!m_children.contains(child));
+			// don't allow add parent to its child
+			child.accept(new ObjectInfoVisitor() {
+				@Override
+				public void endVisit(ObjectInfo objectInfo) throws Exception {
+					Assert.isTrue(
+							objectInfo != ObjectInfo.this,
+							"<code>%s</code> is parent of <code>%s</code>, so first can not be added as child of second.",
+							child,
+							ObjectInfo.this);
+				}
+			});
+		}
+		// send "before" broadcast, may be "nextChild" will be changed
+		{
+			ObjectInfo[] nextChild_ref = new ObjectInfo[]{nextChild};
+			getBroadcast(ObjectInfoChildAddBefore.class).invoke(this, child, nextChild_ref);
+			nextChild = nextChild_ref[0];
+		}
+		// prepare index
+		int index;
+		if (nextChild != null) {
+			index = m_children.indexOf(nextChild);
+		} else {
+			index = m_children.size();
+		}
+		// do add
+		m_children.add(index, child);
+		child.m_parent = this;
+		//
+		getBroadcast(ObjectInfoChildAddAfter.class).invoke(this, child);
+	}
+
+	/**
+	 * Moves existing <code>child</code> in children list directly before <code>nextChild</code>.
+	 */
+	public final void moveChild(ObjectInfo child, ObjectInfo nextChild) throws Exception {
+		Assert.isTrue(m_children.contains(child));
+		// if not before itself
+		if (child != nextChild) {
+			getBroadcastObject().childMoveBefore(this, child, nextChild);
+			// remove from old index
+			int oldIndex = m_children.indexOf(child);
+			m_children.remove(child);
+			// prepare target index
+			int index;
+			if (nextChild != null) {
+				index = m_children.indexOf(nextChild);
+			} else {
+				index = m_children.size();
+			}
+			// add to target index
+			m_children.add(index, child);
+			//
+			getBroadcastObject().childMoveAfter(this, child, nextChild, oldIndex, index);
+		}
+	}
+
+	/**
+	 * Removes given child from the list of children.
+	 */
+	public final void removeChild(ObjectInfo child) throws Exception {
+		Assert.isTrue(m_children.contains(child));
+		//
+		getBroadcastObject().childRemoveBefore(this, child);
+		m_children.remove(child);
+		getBroadcastObject().childRemoveAfter(this, child);
+	}
+
+	/**
+	 * Replaces given <code>oldChild</code> with <code>newChild</code>.
+	 */
+	public final void replaceChild(ObjectInfo oldChild, ObjectInfo newChild) throws Exception {
+		Assert.isTrue(m_children.contains(oldChild));
+		Assert.isNotNull(newChild);
+		int index = m_children.indexOf(oldChild);
+		m_children.set(index, newChild);
+		newChild.m_parent = this;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Visiting
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Visits this {@link ObjectInfo} and its children using given {@link ObjectInfoVisitor}.
+	 */
+	public final void accept(final ObjectInfoVisitor visitor) {
+		ExecutionUtils.runRethrow(() -> accept0(visitor));
+	}
+
+	/**
+	 * Unsafe implementation of {@link #accept(ObjectInfoVisitor)}.
+	 */
+	public final void accept0(final ObjectInfoVisitor visitor) throws Exception {
+		if (visitor.visit(ObjectInfo.this)) {
+			for (ObjectInfo child : getChildren()) {
+				child.accept0(visitor);
+			}
+			visitor.endVisit(ObjectInfo.this);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Broadcasting
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private BroadcastSupport m_broadcastSupport;
+
+	/**
+	 * Returns the {@link BroadcastSupport} for this {@link ObjectInfo} hierarchy.<br>
+	 * Note that for add/get listeners the appropriate methods should be used instead of this method.
+	 *
+	 * @see #addBroadcastListener(Object)
+	 * @see #removeBroadcastListener(Object)
+	 * @see #targetBroadcastListener(ObjectInfo)
+	 * @see #getBroadcast(Class)
+	 * @return the {@link BroadcastSupport} for this {@link ObjectInfo} hierarchy.
+	 */
+	public BroadcastSupport getBroadcastSupport() {
+		return isRoot() ? m_broadcastSupport : getRoot().getBroadcastSupport();
+	}
+
+	/**
+	 * Returns the broadcast listener of given class in this {@link ObjectInfo} hierarchy.
+	 *
+	 * @see BroadcastSupport#getListener(Class)
+	 * @return the broadcast listener of given class in this {@link ObjectInfo} hierarchy.
+	 */
+	public <T> T getBroadcast(Class<T> listenerClass) {
+		return getBroadcastSupport().getListener(listenerClass);
+	}
+
+	@Override
+	public final void addBroadcastListener(Object listenerImpl) {
+		getBroadcastSupport().addListener(this, listenerImpl);
+	}
+
+	/**
+	 * Adds new listener with type of superclass.
+	 */
+	public final void removeBroadcastListener(Object listenerImpl) {
+		getBroadcastSupport().removeListener(this, listenerImpl);
+	}
+
+	/**
+	 * Sets different target instead of "this".
+	 */
+	public final void targetBroadcastListener(ObjectInfo newTarget) {
+		getBroadcastSupport().targetListener(this, newTarget);
+	}
+
+	/**
+	 * Externally sets the {@link BroadcastSupport}.
+	 */
+	protected final void setBroadcastSupport(BroadcastSupport broadcastSupport) {
+		m_broadcastSupport = broadcastSupport;
+	}
+
+	/**
+	 * @return the {@link ObjectEventListener} for hierarchy.
+	 */
+	public final ObjectEventListener getBroadcastObject() {
+		return ExecutionUtils.runObject(() -> getBroadcastSupport().getListener(ObjectEventListener.class));
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Properties
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Return array of {@link Property}'s for this information object.
+	 */
+	public Property[] getProperties() throws Exception {
+		List<Property> propertyList = getPropertyList();
+		getBroadcast(ObjectInfoAllProperties.class).invoke(this, propertyList);
+		sortPropertyList(propertyList);
+		return propertyList.toArray(new Property[propertyList.size()]);
+	}
+
+	/**
+	 * Do properties sorting. Default implementation sorts properties by title alphabetically.
+	 */
+	protected void sortPropertyList(List<Property> properties) {
+		Collections.sort(properties, (o1, o2) -> o1.getTitle().compareTo(o2.getTitle()));
+	}
+
+	/**
+	 * @return the {@link List} of {@link Property}'s.
+	 */
+	protected List<Property> getPropertyList() throws Exception {
+		return Lists.newArrayList();
+	}
+
+	@Override
+	public final Property getPropertyByTitle(String title) throws Exception {
+		for (Property property : getPropertyList()) {
+			if (title.equals(property.getTitle())) {
+				return property;
+			}
+		}
+		return null;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Delete operation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected static final String FLAG_DELETING = "we are in process of deleting";
+
+	@Override
+	public final boolean isDeleting() {
+		return getArbitraryValue(FLAG_DELETING) != null;
+	}
+
+	/**
+	 * @return <code>true</code> if {@link #delete()} can be used.
+	 */
+	public boolean canDelete() {
+		return false;
+	}
+
+	@Override
+	public void delete() throws Exception {
+	}
+
+	@Override
+	public final boolean isDeleted() {
+		return m_parent != null && !m_parent.m_children.contains(this);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Edit operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private int m_editDepth;
+
+	/**
+	 * Prepare this component to start a new sequence of edits.
+	 */
+	public final void startEdit() throws Exception {
+		ObjectInfo root = getRoot();
+		root.m_editDepth++;
+	}
+
+	/**
+	 * End a possibly nested sequence of edits. If this marks the end of the outermost sequence of
+	 * edits, then commit the edits that have been made and call {@link #refresh()}.
+	 */
+	public final void endEdit() throws Exception {
+		ObjectInfo root = getRoot();
+		root.m_editDepth--;
+		if (root.m_editDepth == 0) {
+			root.fire_aboutToRefresh();
+			root.saveEdit();
+			root.refresh();
+		}
+	}
+
+	/**
+	 * Fires {@link ObjectEventListener#endEdit_aboutToRefresh()} listener, wraps it in "fake" edit
+	 * operation to avoid possible double {@link #refresh()}.
+	 */
+	private void fire_aboutToRefresh() throws Exception {
+		m_editDepth++;
+		getBroadcastObject().endEdit_aboutToRefresh();
+		m_editDepth--;
+	}
+
+	/**
+	 * Saves changes done during edit transaction.
+	 */
+	protected void saveEdit() throws Exception {
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Refreshes tree of model objects.
+	 *
+	 * Components can for example create components tree, fetch any visual information (image, bounds,
+	 * etc), and as last step dispose components tree to clean up resources.
+	 */
+	public final void refresh() throws Exception {
+		Assert.isLegal(isRoot());
+		// clean up broadcast
+		getBroadcastSupport().cleanUpTargets(ObjectInfo.this);
+		// do refresh
+		execRefreshOperation(() -> ExecutionUtils.runDesignTime(() -> refreshCreate0()));
+		// split fetch operations into separate parts
+		execRefreshOperation(() -> ExecutionUtils.runDesignTime(() -> {
+			refresh_fetch();
+			refresh_finish();
+		}));
+		// send notifications
+		if (getArbitraryValue(KEY_NO_REFRESHED_BROADCAST) != Boolean.FALSE) {
+			getBroadcastObject().refreshed();
+			getBroadcastObject().refreshed2();
+		}
+	}
+
+	/**
+	 * Runs {@link RunnableEx} performing refresh. This is overridden in Swing because it requires
+	 * doing refresh in AWT dispatch thread.
+	 */
+	protected void execRefreshOperation(RunnableEx runnableEx) throws Exception {
+		runnableEx.run();
+	}
+
+	/**
+	 * Performs "light" version of {@link #refresh()}, just create new objects, but don't fetch.
+	 */
+	public final void refreshLight() throws Exception {
+		Assert.isLegal(isRoot());
+		// do refresh
+		execRefreshOperation(() -> ExecutionUtils.runDesignTime(() -> refreshCreate0()));
+		execRefreshOperation(() -> ExecutionUtils.runDesignTime(() -> refresh_finish()));
+	}
+
+	/**
+	 * Performs "create" steps.
+	 */
+	private void refreshCreate0() throws Exception {
+		refresh_dispose();
+		try {
+			refresh_beforeCreate();
+			refresh_create();
+			refresh_afterCreate0();
+			refresh_afterCreate();
+			refresh_afterCreate2();
+		} finally {
+			getBroadcast(ObjectEventListener.class).refreshFinallyRefresh();
+		}
+	}
+
+	/**
+	 * This method is invoked before {@link #refresh_create()}. It may be called multiple times, every
+	 * time when disposing the resources needed.<br>
+	 * It can for example clear any resource allocated by previous {@link #refresh_create()} or
+	 * {@link #refresh_fetch()}.<br>
+	 * Sends the {@link ObjectEventListener#refreshDispose()} broadcast for root object.
+	 */
+	public void refresh_dispose() throws Exception {
+		if (isRoot()) {
+			getBroadcastObject().refreshDispose();
+		}
+		for (ObjectInfo child : getChildren()) {
+			child.refresh_dispose();
+		}
+	}
+
+	/**
+	 * This method is invoked just before {@link #refresh_create()} and called only once.<br>
+	 * Sends the {@link ObjectEventListener#refreshBeforeCreate()} broadcast for root object.
+	 */
+	public void refresh_beforeCreate() throws Exception {
+		if (isRoot()) {
+			getBroadcastObject().refreshBeforeCreate();
+		}
+		for (ObjectInfo child : getChildren()) {
+			child.refresh_beforeCreate();
+		}
+	}
+
+	/**
+	 * This method creates its object.
+	 */
+	protected void refresh_create() throws Exception {
+		for (ObjectInfo child : getChildren()) {
+			child.refresh_create();
+		}
+	}
+
+	/**
+	 * This method is invoked after {@link #refresh_create()}.<br>
+	 * This method is invoked before {@link #refresh_afterCreate()}.<br>
+	 * Sometimes it is not enough to have single <code>afterCreate</code> notification.
+	 */
+	protected void refresh_afterCreate0() throws Exception {
+		if (isRoot()) {
+			getBroadcastObject().refreshAfterCreate0();
+		}
+		for (ObjectInfo child : getChildren()) {
+			child.refresh_afterCreate0();
+		}
+	}
+
+	/**
+	 * This method is invoked after {@link #refresh_afterCreate0()}.<br>
+	 * This is good place to do any operations that require full objects tree to be build.<br>
+	 * Sends the {@link ObjectEventListener#refreshAfterCreate()} broadcast for root object.
+	 */
+	protected void refresh_afterCreate() throws Exception {
+		if (isRoot()) {
+			getBroadcastObject().refreshAfterCreate();
+		}
+		for (ObjectInfo child : getChildren()) {
+			child.refresh_afterCreate();
+		}
+	}
+
+	/**
+	 * This method is invoked after {@link #refresh_afterCreate()}.<br>
+	 * This is good place to do any operations that require full objects tree to be build.<br>
+	 * Sends the {@link ObjectEventListener#refreshAfterCreate2()} broadcast for root object.
+	 */
+	protected void refresh_afterCreate2() throws Exception {
+		if (isRoot()) {
+			getBroadcastObject().refreshAfterCreate2();
+		}
+		for (ObjectInfo child : getChildren()) {
+			child.refresh_afterCreate2();
+		}
+	}
+
+	/**
+	 * This method should fetch any information about object that needed for future operations, for
+	 * example its image, bounds, etc.
+	 */
+	protected void refresh_fetch() throws Exception {
+		for (ObjectInfo child : getChildren()) {
+			child.refresh_fetch();
+		}
+	}
+
+	/**
+	 * This is last method invoked during "refresh" cycle. It can clean up any resource that should be
+	 * accessible only during refresh. In contrast {@link #refresh_dispose()} clear more long lived
+	 * resources, that should live between {@link #refresh()} invocations.
+	 */
+	protected void refresh_finish() throws Exception {
+		List<ObjectInfo> children = getChildren();
+		children = ImmutableList.copyOf(getChildren());
+		for (ObjectInfo child : children) {
+			child.refresh_finish();
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Arbitrary values map
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Map<Object, Object> m_arbitraryMap;
+
+	/**
+	 * Associates the given value with the given key.
+	 */
+	public final void putArbitraryValue(Object key, Object value) {
+		if (m_arbitraryMap == null) {
+			m_arbitraryMap = new HashMap<>();
+		}
+		m_arbitraryMap.put(key, value);
+	}
+
+	/**
+	 * @return the value to which the given key is mapped, or <code>null</code>.
+	 */
+	public final Object getArbitraryValue(Object key) {
+		if (m_arbitraryMap != null) {
+			return m_arbitraryMap.get(key);
+		}
+		return null;
+	}
+
+	/**
+	 * Removes the mapping for a key.
+	 */
+	public final void removeArbitraryValue(Object key) {
+		if (m_arbitraryMap != null) {
+			m_arbitraryMap.remove(key);
+		}
+	}
+
+	/**
+	 * @return the mapped arbitrary keys.
+	 */
+	public final Map<Object, Object> getArbitraries() {
+		Map<Object, Object> arbitraries;
+		if (m_arbitraryMap != null) {
+			arbitraries = new HashMap<>(m_arbitraryMap);
+		} else {
+			arbitraries = ImmutableMap.of();
+		}
+		return arbitraries;
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/model/ObjectInfoUtils.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/model/ObjectInfoUtils.java
index 3d600a1a0..d3890ae7e 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/model/ObjectInfoUtils.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/model/ObjectInfoUtils.java
@@ -24,58 +24,58 @@
  * @coverage core.model
  */
 public final class ObjectInfoUtils {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Private Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private ObjectInfoUtils() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Private Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private ObjectInfoUtils() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ID
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static long m_lastObjectInfoID = 0;
-  private static Map<String, ObjectInfo> m_idToObjectInfo = new MapMaker().weakValues().makeMap();
-  private static Map<ObjectInfo, String> m_objectInfoToId = new MapMaker().weakKeys().makeMap();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ID
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static long m_lastObjectInfoID = 0;
+	private static Map<String, ObjectInfo> m_idToObjectInfo = new MapMaker().weakValues().makeMap();
+	private static Map<ObjectInfo, String> m_objectInfoToId = new MapMaker().weakKeys().makeMap();
 
-  /**
-   * @return the {@link ObjectInfo} with corresponding ID.
-   */
-  public static ObjectInfo getById(String id) {
-    ObjectInfo result = m_idToObjectInfo.get(id);
-    Assert.isNotNull(result, "Can not find ObjectInfo for %s", id);
-    return result;
-  }
+	/**
+	 * @return the {@link ObjectInfo} with corresponding ID.
+	 */
+	public static ObjectInfo getById(String id) {
+		ObjectInfo result = m_idToObjectInfo.get(id);
+		Assert.isNotNull(result, "Can not find ObjectInfo for %s", id);
+		return result;
+	}
 
-  /**
-   * @return the unique {@link ObjectInfo} id.
-   */
-  public static String getId(ObjectInfo objectInfo) {
-    String id = getId0(objectInfo);
-    Assert.isNotNull(id, "No ID for (%s) %s", objectInfo.getClass().getName(), objectInfo);
-    return id;
-  }
+	/**
+	 * @return the unique {@link ObjectInfo} id.
+	 */
+	public static String getId(ObjectInfo objectInfo) {
+		String id = getId0(objectInfo);
+		Assert.isNotNull(id, "No ID for (%s) %s", objectInfo.getClass().getName(), objectInfo);
+		return id;
+	}
 
-  /**
-   * Sets the unique {@link ObjectInfo} id (should be called only once).
-   */
-  public static void setNewId(ObjectInfo objectInfo) {
-    {
-      String existingID = getId0(objectInfo);
-      Assert.isNull(existingID, "%s already has ID %s", objectInfo, existingID);
-    }
-    setId0(objectInfo, Long.toString(m_lastObjectInfoID++));
-  }
+	/**
+	 * Sets the unique {@link ObjectInfo} id (should be called only once).
+	 */
+	public static void setNewId(ObjectInfo objectInfo) {
+		{
+			String existingID = getId0(objectInfo);
+			Assert.isNull(existingID, "%s already has ID %s", objectInfo, existingID);
+		}
+		setId0(objectInfo, Long.toString(m_lastObjectInfoID++));
+	}
 
-  private static String getId0(ObjectInfo objectInfo) {
-    return m_objectInfoToId.get(objectInfo);
-  }
+	private static String getId0(ObjectInfo objectInfo) {
+		return m_objectInfoToId.get(objectInfo);
+	}
 
-  private static void setId0(ObjectInfo objectInfo, String id) {
-    m_objectInfoToId.put(objectInfo, id);
-    m_idToObjectInfo.put(id, objectInfo);
-  }
+	private static void setId0(ObjectInfo objectInfo, String id) {
+		m_objectInfoToId.put(objectInfo, id);
+		m_idToObjectInfo.put(id, objectInfo);
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/model/broadcast/BroadcastGroup.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/model/broadcast/BroadcastGroup.java
index 485deca75..3d07d42ca 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/model/broadcast/BroadcastGroup.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/model/broadcast/BroadcastGroup.java
@@ -17,19 +17,19 @@
  * @coverage core.model
  */
 public class BroadcastGroup {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public BroadcastGroup() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public BroadcastGroup() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected void add(Object... broadcast) {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected void add(Object... broadcast) {
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/model/broadcast/BroadcastSupport.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/model/broadcast/BroadcastSupport.java
index 807f240d4..4a318ffbc 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/model/broadcast/BroadcastSupport.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/model/broadcast/BroadcastSupport.java
@@ -38,195 +38,195 @@
  * @coverage core.model
  */
 public final class BroadcastSupport {
-  /**
-   * {@link Map} for "listener class" -> "listener implementations".
-   */
-  private final Map<Class<?>, List<Object>> m_classToListeners = new HashMap<>();
-  /**
-   * {@link Map} for "listener target" -> "listener implementations".
-   */
-  private final Map<ObjectInfo, List<Object>> m_targetToListeners = new HashMap<>();
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds new listener with superclass.
-   */
-  public void addListener(ObjectInfo target, Object listenerImpl) {
-    Class<?> listenerClass = getListenerClass(listenerImpl);
-    addListener(getClassListeners(listenerClass), listenerImpl);
-    if (target != null) {
-      addListener(getTargetListeners(target), listenerImpl);
-    }
-  }
-
-  /**
-   * Removes listener with superclass.
-   */
-  public void removeListener(ObjectInfo target, Object listenerImpl) {
-    Class<?> listenerClass = getListenerClass(listenerImpl);
-    getClassListeners(listenerClass).remove(listenerImpl);
-    if (target != null) {
-      getTargetListeners(target).remove(listenerImpl);
-    }
-  }
-
-  /**
-   * Moves listeners from one target to another.
-   *
-   * @noreference
-   */
-  public void targetListener(ObjectInfo oldTarget, ObjectInfo newTarget) {
-    List<?> listeners = m_targetToListeners.remove(oldTarget);
-    if (listeners != null) {
-      getTargetListeners(newTarget).addAll(listeners);
-    }
-  }
-
-  /**
-   * When we remove {@link ObjectInfo}'s from their parent, so exclude them from hierarchy, or these
-   * {@link ObjectInfo}'s are just not included into hierarchy during parsing; we should remove any
-   * broadcast listeners, registered by these {@link ObjectInfo}'s.
-   *
-   * @noreference
-   */
-  public void cleanUpTargets(ObjectInfo root) {
-    List<ObjectInfo> targets = new ArrayList<ObjectInfo>(m_targetToListeners.keySet());
-    for (ObjectInfo target : targets) {
-      if (!root.isItOrParentOf(target)) {
-        cleanUpTarget(target);
-      }
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link Class} of broadcast listener extended/implemented by given {@link Object}.
-   */
-  private static Class<?> getListenerClass(Object listenerImpl) {
-    Class<?> implClass = listenerImpl.getClass();
-    // old case - extent listener class with many methods
-    {
-      Class<?> listenerClass = implClass.getSuperclass();
-      if (listenerClass != Object.class) {
-        while (listenerClass.getSuperclass() != Object.class) {
-          listenerClass = listenerClass.getSuperclass();
-        }
-        return listenerClass;
-      }
-    }
-    // new case - implement single listener interface
-    {
-      Class<?>[] interfaces = implClass.getInterfaces();
-      if (EnvironmentUtils.DEVELOPER_HOST) {
-        Assert.isTrue(
-            interfaces.length == 1,
-            "Only one listener interface expected, but %s found.",
-            interfaces.length);
-      }
-      return interfaces[0];
-    }
-  }
-
-  /**
-   * @return the {@link List} of listeners of given class. May return empty {@link List}, but not
-   *         <code>null</code>.
-   */
-  private List<Object> getClassListeners(Class<?> listenerClass) {
-    List<Object> listeners = m_classToListeners.get(listenerClass);
-    if (listeners == null) {
-      listeners = Lists.newArrayList();
-      m_classToListeners.put(listenerClass, listeners);
-    }
-    return listeners;
-  }
-
-  /**
-   * @return the {@link List} of listeners of given class. May return empty {@link List}, but not
-   *         <code>null</code>.
-   */
-  private List<Object> getTargetListeners(ObjectInfo target) {
-    List<Object> listeners = m_targetToListeners.get(target);
-    if (listeners == null) {
-      listeners = Lists.newArrayList();
-      m_targetToListeners.put(target, listeners);
-    }
-    return listeners;
-  }
-
-  /**
-   * Adds new listener into {@link List} only if there are no same listener yet.
-   */
-  private static void addListener(List<Object> listeners, Object listener) {
-    if (!listeners.contains(listener)) {
-      listeners.add(listener);
-    }
-  }
-
-  /**
-   * Removes listeners bound to the given target.
-   */
-  private void cleanUpTarget(ObjectInfo target) {
-    // remove separate listeners for target
-    List<Object> listeners = new ArrayList<Object>(getTargetListeners(target));
-    for (Object listenerImpl : listeners) {
-      removeListener(target, listenerImpl);
-    }
-    // remove target
-    m_targetToListeners.remove(target);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Sending
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final Map<Class<?>, Object> m_listenerToMulticast = new HashMap<>();
-
-  /**
-   * @return the implementation of given listener class (so it can be casted to it) that can be used
-   *         for sending events to all subscribers.
-   */
-  public <T> T getListener(final Class<T> listenerClass) {
-    Object listenerMulticast = m_listenerToMulticast.get(listenerClass);
-    if (listenerMulticast == null) {
-      try {
-        // remember multi-cast
-        listenerMulticast = new ByteBuddy()
-            .subclass(listenerClass)
-            .method(ElementMatchers.any())
-            .intercept(InvocationHandlerAdapter.of((Object obj, Method method, Object[] args) -> {
-              // Iterate over a local copy due to a potential ConcurrentModificationException
-              for (Object listener : getClassListeners(listenerClass).toArray()) {
-                try {
-                  method.invoke(listener, args);
-                } catch (InvocationTargetException e) {
-                  throw e.getCause();
-                }
-              }
-              // no result
-              return null;
-            }))
-            .make()
-            .load(listenerClass.getClassLoader())
-            .getLoaded()
-            .getConstructor()
-            .newInstance();
-        m_listenerToMulticast.put(listenerClass, listenerMulticast);
-      } catch(ReflectiveOperationException  e) {
-        DesignerPlugin.log(e.getMessage(), e);
-      }
-    }
-    //
-    @SuppressWarnings("unchecked")
-    T casted_listenerMulticast = (T) listenerMulticast;
-    return casted_listenerMulticast;
-  }
+	/**
+	 * {@link Map} for "listener class" -> "listener implementations".
+	 */
+	private final Map<Class<?>, List<Object>> m_classToListeners = new HashMap<>();
+	/**
+	 * {@link Map} for "listener target" -> "listener implementations".
+	 */
+	private final Map<ObjectInfo, List<Object>> m_targetToListeners = new HashMap<>();
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds new listener with superclass.
+	 */
+	public void addListener(ObjectInfo target, Object listenerImpl) {
+		Class<?> listenerClass = getListenerClass(listenerImpl);
+		addListener(getClassListeners(listenerClass), listenerImpl);
+		if (target != null) {
+			addListener(getTargetListeners(target), listenerImpl);
+		}
+	}
+
+	/**
+	 * Removes listener with superclass.
+	 */
+	public void removeListener(ObjectInfo target, Object listenerImpl) {
+		Class<?> listenerClass = getListenerClass(listenerImpl);
+		getClassListeners(listenerClass).remove(listenerImpl);
+		if (target != null) {
+			getTargetListeners(target).remove(listenerImpl);
+		}
+	}
+
+	/**
+	 * Moves listeners from one target to another.
+	 *
+	 * @noreference
+	 */
+	public void targetListener(ObjectInfo oldTarget, ObjectInfo newTarget) {
+		List<?> listeners = m_targetToListeners.remove(oldTarget);
+		if (listeners != null) {
+			getTargetListeners(newTarget).addAll(listeners);
+		}
+	}
+
+	/**
+	 * When we remove {@link ObjectInfo}'s from their parent, so exclude them from hierarchy, or these
+	 * {@link ObjectInfo}'s are just not included into hierarchy during parsing; we should remove any
+	 * broadcast listeners, registered by these {@link ObjectInfo}'s.
+	 *
+	 * @noreference
+	 */
+	public void cleanUpTargets(ObjectInfo root) {
+		List<ObjectInfo> targets = new ArrayList<ObjectInfo>(m_targetToListeners.keySet());
+		for (ObjectInfo target : targets) {
+			if (!root.isItOrParentOf(target)) {
+				cleanUpTarget(target);
+			}
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link Class} of broadcast listener extended/implemented by given {@link Object}.
+	 */
+	private static Class<?> getListenerClass(Object listenerImpl) {
+		Class<?> implClass = listenerImpl.getClass();
+		// old case - extent listener class with many methods
+		{
+			Class<?> listenerClass = implClass.getSuperclass();
+			if (listenerClass != Object.class) {
+				while (listenerClass.getSuperclass() != Object.class) {
+					listenerClass = listenerClass.getSuperclass();
+				}
+				return listenerClass;
+			}
+		}
+		// new case - implement single listener interface
+		{
+			Class<?>[] interfaces = implClass.getInterfaces();
+			if (EnvironmentUtils.DEVELOPER_HOST) {
+				Assert.isTrue(
+						interfaces.length == 1,
+						"Only one listener interface expected, but %s found.",
+						interfaces.length);
+			}
+			return interfaces[0];
+		}
+	}
+
+	/**
+	 * @return the {@link List} of listeners of given class. May return empty {@link List}, but not
+	 *         <code>null</code>.
+	 */
+	private List<Object> getClassListeners(Class<?> listenerClass) {
+		List<Object> listeners = m_classToListeners.get(listenerClass);
+		if (listeners == null) {
+			listeners = Lists.newArrayList();
+			m_classToListeners.put(listenerClass, listeners);
+		}
+		return listeners;
+	}
+
+	/**
+	 * @return the {@link List} of listeners of given class. May return empty {@link List}, but not
+	 *         <code>null</code>.
+	 */
+	private List<Object> getTargetListeners(ObjectInfo target) {
+		List<Object> listeners = m_targetToListeners.get(target);
+		if (listeners == null) {
+			listeners = Lists.newArrayList();
+			m_targetToListeners.put(target, listeners);
+		}
+		return listeners;
+	}
+
+	/**
+	 * Adds new listener into {@link List} only if there are no same listener yet.
+	 */
+	private static void addListener(List<Object> listeners, Object listener) {
+		if (!listeners.contains(listener)) {
+			listeners.add(listener);
+		}
+	}
+
+	/**
+	 * Removes listeners bound to the given target.
+	 */
+	private void cleanUpTarget(ObjectInfo target) {
+		// remove separate listeners for target
+		List<Object> listeners = new ArrayList<Object>(getTargetListeners(target));
+		for (Object listenerImpl : listeners) {
+			removeListener(target, listenerImpl);
+		}
+		// remove target
+		m_targetToListeners.remove(target);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Sending
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final Map<Class<?>, Object> m_listenerToMulticast = new HashMap<>();
+
+	/**
+	 * @return the implementation of given listener class (so it can be casted to it) that can be used
+	 *         for sending events to all subscribers.
+	 */
+	public <T> T getListener(final Class<T> listenerClass) {
+		Object listenerMulticast = m_listenerToMulticast.get(listenerClass);
+		if (listenerMulticast == null) {
+			try {
+				// remember multi-cast
+				listenerMulticast = new ByteBuddy()
+						.subclass(listenerClass)
+						.method(ElementMatchers.any())
+						.intercept(InvocationHandlerAdapter.of((Object obj, Method method, Object[] args) -> {
+							// Iterate over a local copy due to a potential ConcurrentModificationException
+							for (Object listener : getClassListeners(listenerClass).toArray()) {
+								try {
+									method.invoke(listener, args);
+								} catch (InvocationTargetException e) {
+									throw e.getCause();
+								}
+							}
+							// no result
+							return null;
+						}))
+						.make()
+						.load(listenerClass.getClassLoader())
+						.getLoaded()
+						.getConstructor()
+						.newInstance();
+				m_listenerToMulticast.put(listenerClass, listenerMulticast);
+			} catch(ReflectiveOperationException  e) {
+				DesignerPlugin.log(e.getMessage(), e);
+			}
+		}
+		//
+		@SuppressWarnings("unchecked")
+		T casted_listenerMulticast = (T) listenerMulticast;
+		return casted_listenerMulticast;
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/model/broadcast/DisplayEventListener.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/model/broadcast/DisplayEventListener.java
index fb172caf1..614f054bf 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/model/broadcast/DisplayEventListener.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/model/broadcast/DisplayEventListener.java
@@ -20,22 +20,22 @@
  * @coverage core.model
  */
 public abstract class DisplayEventListener {
-  /**
-   * Notifies that model is going to begin some operation that may cause running messages loop in
-   * {@link Display}, so presentation should be ready that user may "push" some events in this
-   * period.
-   * <p>
-   * For example, in GWT we often should run messages loop to finalize component rendering, to get
-   * exact image of component, including getting "live" image from policy (so in its own messages
-   * loop!). So, we have to delay all events that will happen during these model-driven messages
-   * loops, in other case GEF will be confused by recursive events.
-   */
-  public void beforeMessagesLoop() {
-  }
+	/**
+	 * Notifies that model is going to begin some operation that may cause running messages loop in
+	 * {@link Display}, so presentation should be ready that user may "push" some events in this
+	 * period.
+	 * <p>
+	 * For example, in GWT we often should run messages loop to finalize component rendering, to get
+	 * exact image of component, including getting "live" image from policy (so in its own messages
+	 * loop!). So, we have to delay all events that will happen during these model-driven messages
+	 * loops, in other case GEF will be confused by recursive events.
+	 */
+	public void beforeMessagesLoop() {
+	}
 
-  /**
-   * Notifies that model finished operation {@link #beforeMessagesLoop()}.
-   */
-  public void afterMessagesLoop() {
-  }
+	/**
+	 * Notifies that model finished operation {@link #beforeMessagesLoop()}.
+	 */
+	public void afterMessagesLoop() {
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/model/broadcast/EditorActivatedListener.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/model/broadcast/EditorActivatedListener.java
index 5aaea81b5..741a461d1 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/model/broadcast/EditorActivatedListener.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/model/broadcast/EditorActivatedListener.java
@@ -18,10 +18,10 @@
  * @coverage core.model
  */
 public interface EditorActivatedListener {
-  /**
-   * @param request
-   *          the request to specify operation that should be performed. Listeners may use
-   *          "requestX()" methods to specify operation that should be performed.
-   */
-  void invoke(EditorActivatedRequest request) throws Exception;
+	/**
+	 * @param request
+	 *          the request to specify operation that should be performed. Listeners may use
+	 *          "requestX()" methods to specify operation that should be performed.
+	 */
+	void invoke(EditorActivatedRequest request) throws Exception;
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/model/broadcast/EditorActivatedRequest.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/model/broadcast/EditorActivatedRequest.java
index 16eb500dd..971fd5aa5 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/model/broadcast/EditorActivatedRequest.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/model/broadcast/EditorActivatedRequest.java
@@ -17,38 +17,38 @@
  * @coverage core.model
  */
 public final class EditorActivatedRequest {
-  private boolean m_reparseRequested;
-  private boolean m_refreshRequested;
+	private boolean m_reparseRequested;
+	private boolean m_refreshRequested;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public boolean isReparseRequested() {
-    return m_reparseRequested;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public boolean isReparseRequested() {
+		return m_reparseRequested;
+	}
 
-  public boolean isRefreshRequested() {
-    return m_refreshRequested;
-  }
+	public boolean isRefreshRequested() {
+		return m_refreshRequested;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Requesting
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Specifies that reparse should be performed.
-   */
-  public void requestReparse() {
-    m_reparseRequested = true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Requesting
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Specifies that reparse should be performed.
+	 */
+	public void requestReparse() {
+		m_reparseRequested = true;
+	}
 
-  /**
-   * Specifies that refresh should be performed.
-   */
-  public void requestRefresh() {
-    m_refreshRequested = true;
-  }
+	/**
+	 * Specifies that refresh should be performed.
+	 */
+	public void requestRefresh() {
+		m_refreshRequested = true;
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/model/broadcast/ObjectEventListener.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/model/broadcast/ObjectEventListener.java
index 441b90f0a..7637a16ad 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/model/broadcast/ObjectEventListener.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/model/broadcast/ObjectEventListener.java
@@ -25,227 +25,227 @@
  * @coverage core.model
  */
 public abstract class ObjectEventListener {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Life cycle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * During closing editor or other event when we going to throw away this {@link ObjectInfo}
-   * hierarchy.
-   * <p>
-   * Directly before disposing GEF presentation.
-   */
-  public void dispose_beforePresentation() throws Exception {
-  }
-
-  /**
-   * During closing editor or other event when we going to throw away this {@link ObjectInfo}
-   * hierarchy.
-   */
-  public void dispose() throws Exception {
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Edit cycle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Notifies that last {@link ObjectInfo#endEdit()} in edit sequence was reached, so
-   * {@link ObjectInfo#refresh()} will be started directly after this notification. This is last
-   * chance to perform some AST/source editing before refresh.
-   */
-  public void endEdit_aboutToRefresh() throws Exception {
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh cycle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * When {@link ObjectInfo#refresh_dispose()} for root executed.
-   */
-  public void refreshDispose() throws Exception {
-  }
-
-  /**
-   * When {@link ObjectInfo#refresh_beforeCreate()} for root executed.
-   */
-  public void refreshBeforeCreate() throws Exception {
-  }
-
-  /**
-   * When {@link ObjectInfo#refresh_afterCreate0()} for root executed.
-   */
-  public void refreshAfterCreate0() throws Exception {
-  }
-
-  /**
-   * When {@link ObjectInfo#refresh_afterCreate()} for root executed.
-   */
-  public void refreshAfterCreate() throws Exception {
-  }
-
-  /**
-   * When {@link ObjectInfo#refresh_afterCreate2()} for root executed.
-   */
-  public void refreshAfterCreate2() throws Exception {
-  }
-
-  /**
-   * Last "refreshCreate" method which is called always, even in case of exception.
-   */
-  public void refreshFinallyRefresh() {
-  }
-
-  /**
-   * After {@link ObjectInfo#refresh()} cycle executed.
-   */
-  public void refreshed() throws Exception {
-  }
-
-  /**
-   * After {@link ObjectInfo#refresh()} cycle executed and also all {@link #refreshed()}
-   * notifications finished.
-   *
-   * Sometimes one level of "refresh" is not enough, for example menu performs GEF refresh in
-   * {@link #refreshed()}, but temporary initializes static variables that should be cleared after
-   * GEF refresh. So we have choice - do this in "async", or add one more "refreshed" notification.
-   */
-  public void refreshed2() throws Exception {
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Child remove
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Before removing child from parent.
-   */
-  public void childRemoveBefore(ObjectInfo parent, ObjectInfo child) throws Exception {
-  }
-
-  /**
-   * After removing child from parent.
-   */
-  public void childRemoveAfter(ObjectInfo parent, ObjectInfo child) throws Exception {
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Child move
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Before moving child in parent.
-   */
-  public void childMoveBefore(ObjectInfo parent, ObjectInfo child, ObjectInfo nextChild)
-      throws Exception {
-  }
-
-  /**
-   * After moving child in parent.
-   *
-   * @param oldIndex
-   *          the index in children of <code>parent</code>.
-   * @param newIndex
-   *          the index in children of <code>parent</code>.
-   */
-  public void childMoveAfter(ObjectInfo parent,
-      ObjectInfo child,
-      ObjectInfo nextChild,
-      int oldIndex,
-      int newIndex) throws Exception {
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Notifies listeners that presentation or properties of some model object was changed, but
-   * {@link ObjectInfo#refresh()} will not happen.
-   */
-  public void presentationChanged() throws Exception {
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Selection
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * This method is invoked during selecting {@link ObjectInfo}.
-   *
-   * @param object
-   *          the selecting {@link ObjectInfo}, may be <code>null</code>.
-   * @param refreshFlag
-   *          the array with single boolean flag, if one of the listeners will set it to
-   *          <code>true</code> , {@link ObjectInfo#refresh()} will be performed.
-   */
-  public void selecting(ObjectInfo object, boolean[] refreshFlag) throws Exception {
-  }
-
-  /**
-   * This method can be used from model code to notify that it wants to select given
-   * {@link ObjectInfo}'s.
-   *
-   * @param objects
-   *          the {@link ObjectInfo}'s to select.
-   */
-  public void select(List<? extends ObjectInfo> objects) throws Exception {
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Context menu
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * This method is invoked during building context menu for given {@link ObjectInfo}.
-   *
-   * @param objects
-   *          the selected {@link ObjectInfo}'s, one of them is passed as <code>object</code>.
-   * @param object
-   *          the current {@link ObjectInfo}, for which menu is requested.
-   * @param manager
-   *          the {@link IMenuManager} to contribute items.
-   */
-  public void addContextMenu(List<? extends ObjectInfo> objects,
-      ObjectInfo object,
-      IMenuManager manager) throws Exception {
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Toolbar actions
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * This method is invoked during editor toolbar refresh for building special actions, related with
-   * full components hierarchy, in contrast to {@link #addSelectionActions(List, List)} that is used
-   * for selection sensitive actions.
-   *
-   * @param actions
-   *          the {@link List} of {@link IAction}'s or {@link IContributionItem}'s to display for
-   *          user.
-   */
-  public void addHierarchyActions(List<Object> actions) throws Exception {
-  }
-
-  /**
-   * This method is invoked during selecting {@link ObjectInfo}'s for building special actions.
-   *
-   * @param objects
-   *          the List of selected {@link ObjectInfo}'s.
-   * @param actions
-   *          the {@link List} of {@link IAction}'s or {@link IContributionItem}'s to display for
-   *          user.
-   */
-  public void addSelectionActions(List<ObjectInfo> objects, List<Object> actions) throws Exception {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Life cycle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * During closing editor or other event when we going to throw away this {@link ObjectInfo}
+	 * hierarchy.
+	 * <p>
+	 * Directly before disposing GEF presentation.
+	 */
+	public void dispose_beforePresentation() throws Exception {
+	}
+
+	/**
+	 * During closing editor or other event when we going to throw away this {@link ObjectInfo}
+	 * hierarchy.
+	 */
+	public void dispose() throws Exception {
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Edit cycle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Notifies that last {@link ObjectInfo#endEdit()} in edit sequence was reached, so
+	 * {@link ObjectInfo#refresh()} will be started directly after this notification. This is last
+	 * chance to perform some AST/source editing before refresh.
+	 */
+	public void endEdit_aboutToRefresh() throws Exception {
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh cycle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * When {@link ObjectInfo#refresh_dispose()} for root executed.
+	 */
+	public void refreshDispose() throws Exception {
+	}
+
+	/**
+	 * When {@link ObjectInfo#refresh_beforeCreate()} for root executed.
+	 */
+	public void refreshBeforeCreate() throws Exception {
+	}
+
+	/**
+	 * When {@link ObjectInfo#refresh_afterCreate0()} for root executed.
+	 */
+	public void refreshAfterCreate0() throws Exception {
+	}
+
+	/**
+	 * When {@link ObjectInfo#refresh_afterCreate()} for root executed.
+	 */
+	public void refreshAfterCreate() throws Exception {
+	}
+
+	/**
+	 * When {@link ObjectInfo#refresh_afterCreate2()} for root executed.
+	 */
+	public void refreshAfterCreate2() throws Exception {
+	}
+
+	/**
+	 * Last "refreshCreate" method which is called always, even in case of exception.
+	 */
+	public void refreshFinallyRefresh() {
+	}
+
+	/**
+	 * After {@link ObjectInfo#refresh()} cycle executed.
+	 */
+	public void refreshed() throws Exception {
+	}
+
+	/**
+	 * After {@link ObjectInfo#refresh()} cycle executed and also all {@link #refreshed()}
+	 * notifications finished.
+	 *
+	 * Sometimes one level of "refresh" is not enough, for example menu performs GEF refresh in
+	 * {@link #refreshed()}, but temporary initializes static variables that should be cleared after
+	 * GEF refresh. So we have choice - do this in "async", or add one more "refreshed" notification.
+	 */
+	public void refreshed2() throws Exception {
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Child remove
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Before removing child from parent.
+	 */
+	public void childRemoveBefore(ObjectInfo parent, ObjectInfo child) throws Exception {
+	}
+
+	/**
+	 * After removing child from parent.
+	 */
+	public void childRemoveAfter(ObjectInfo parent, ObjectInfo child) throws Exception {
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Child move
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Before moving child in parent.
+	 */
+	public void childMoveBefore(ObjectInfo parent, ObjectInfo child, ObjectInfo nextChild)
+			throws Exception {
+	}
+
+	/**
+	 * After moving child in parent.
+	 *
+	 * @param oldIndex
+	 *          the index in children of <code>parent</code>.
+	 * @param newIndex
+	 *          the index in children of <code>parent</code>.
+	 */
+	public void childMoveAfter(ObjectInfo parent,
+			ObjectInfo child,
+			ObjectInfo nextChild,
+			int oldIndex,
+			int newIndex) throws Exception {
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Notifies listeners that presentation or properties of some model object was changed, but
+	 * {@link ObjectInfo#refresh()} will not happen.
+	 */
+	public void presentationChanged() throws Exception {
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Selection
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * This method is invoked during selecting {@link ObjectInfo}.
+	 *
+	 * @param object
+	 *          the selecting {@link ObjectInfo}, may be <code>null</code>.
+	 * @param refreshFlag
+	 *          the array with single boolean flag, if one of the listeners will set it to
+	 *          <code>true</code> , {@link ObjectInfo#refresh()} will be performed.
+	 */
+	public void selecting(ObjectInfo object, boolean[] refreshFlag) throws Exception {
+	}
+
+	/**
+	 * This method can be used from model code to notify that it wants to select given
+	 * {@link ObjectInfo}'s.
+	 *
+	 * @param objects
+	 *          the {@link ObjectInfo}'s to select.
+	 */
+	public void select(List<? extends ObjectInfo> objects) throws Exception {
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Context menu
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * This method is invoked during building context menu for given {@link ObjectInfo}.
+	 *
+	 * @param objects
+	 *          the selected {@link ObjectInfo}'s, one of them is passed as <code>object</code>.
+	 * @param object
+	 *          the current {@link ObjectInfo}, for which menu is requested.
+	 * @param manager
+	 *          the {@link IMenuManager} to contribute items.
+	 */
+	public void addContextMenu(List<? extends ObjectInfo> objects,
+			ObjectInfo object,
+			IMenuManager manager) throws Exception {
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Toolbar actions
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * This method is invoked during editor toolbar refresh for building special actions, related with
+	 * full components hierarchy, in contrast to {@link #addSelectionActions(List, List)} that is used
+	 * for selection sensitive actions.
+	 *
+	 * @param actions
+	 *          the {@link List} of {@link IAction}'s or {@link IContributionItem}'s to display for
+	 *          user.
+	 */
+	public void addHierarchyActions(List<Object> actions) throws Exception {
+	}
+
+	/**
+	 * This method is invoked during selecting {@link ObjectInfo}'s for building special actions.
+	 *
+	 * @param objects
+	 *          the List of selected {@link ObjectInfo}'s.
+	 * @param actions
+	 *          the {@link List} of {@link IAction}'s or {@link IContributionItem}'s to display for
+	 *          user.
+	 */
+	public void addSelectionActions(List<ObjectInfo> objects, List<Object> actions) throws Exception {
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/model/broadcast/ObjectInfoAddProperties.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/model/broadcast/ObjectInfoAddProperties.java
index 42b7d14c3..cdce59eed 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/model/broadcast/ObjectInfoAddProperties.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/model/broadcast/ObjectInfoAddProperties.java
@@ -24,8 +24,8 @@
  * @coverage core.model
  */
 public interface ObjectInfoAddProperties {
-  /**
-   * During preparing {@link Property} list for {@link ObjectInfo}.
-   */
-  void invoke(ObjectInfo target, List<Property> properties) throws Exception;
+	/**
+	 * During preparing {@link Property} list for {@link ObjectInfo}.
+	 */
+	void invoke(ObjectInfo target, List<Property> properties) throws Exception;
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/model/broadcast/ObjectInfoAllProperties.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/model/broadcast/ObjectInfoAllProperties.java
index 577977ad4..203e22819 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/model/broadcast/ObjectInfoAllProperties.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/model/broadcast/ObjectInfoAllProperties.java
@@ -25,5 +25,5 @@
  * @coverage core.model
  */
 public interface ObjectInfoAllProperties {
-  void invoke(ObjectInfo object, List<Property> properties) throws Exception;
+	void invoke(ObjectInfo object, List<Property> properties) throws Exception;
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/model/broadcast/ObjectInfoChildAddAfter.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/model/broadcast/ObjectInfoChildAddAfter.java
index 60e63af76..8f7c5e375 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/model/broadcast/ObjectInfoChildAddAfter.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/model/broadcast/ObjectInfoChildAddAfter.java
@@ -19,8 +19,8 @@
  * @coverage core.model
  */
 public interface ObjectInfoChildAddAfter {
-  /**
-   * After adding child to parent.
-   */
-  void invoke(ObjectInfo parent, ObjectInfo child) throws Exception;
+	/**
+	 * After adding child to parent.
+	 */
+	void invoke(ObjectInfo parent, ObjectInfo child) throws Exception;
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/model/broadcast/ObjectInfoChildAddBefore.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/model/broadcast/ObjectInfoChildAddBefore.java
index ac0c3377f..be595218e 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/model/broadcast/ObjectInfoChildAddBefore.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/model/broadcast/ObjectInfoChildAddBefore.java
@@ -19,18 +19,18 @@
  * @coverage core.model
  */
 public interface ObjectInfoChildAddBefore {
-  /**
-   * Before adding child to parent.
-   *
-   * @param parent
-   *          the parent to add to.
-   * @param child
-   *          the child to add.
-   * @param nextChild
-   *          the array with single element - existing child of <code>parent</code> or
-   *          <code>null</code>. During this event it is possible that we perform some manipulation
-   *          with existing children of <code>parent</code>, so initial <code>nextChild</code> may
-   *          become invalid (may be we remove it). So, we should put alternative "nextChild".
-   */
-  void invoke(ObjectInfo parent, ObjectInfo child, ObjectInfo[] nextChild) throws Exception;
+	/**
+	 * Before adding child to parent.
+	 *
+	 * @param parent
+	 *          the parent to add to.
+	 * @param child
+	 *          the child to add.
+	 * @param nextChild
+	 *          the array with single element - existing child of <code>parent</code> or
+	 *          <code>null</code>. During this event it is possible that we perform some manipulation
+	 *          with existing children of <code>parent</code>, so initial <code>nextChild</code> may
+	 *          become invalid (may be we remove it). So, we should put alternative "nextChild".
+	 */
+	void invoke(ObjectInfo parent, ObjectInfo child, ObjectInfo[] nextChild) throws Exception;
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/model/broadcast/ObjectInfoChildGraphical.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/model/broadcast/ObjectInfoChildGraphical.java
index a6528c569..798393277 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/model/broadcast/ObjectInfoChildGraphical.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/model/broadcast/ObjectInfoChildGraphical.java
@@ -20,15 +20,15 @@
  * @coverage core.model
  */
 public interface ObjectInfoChildGraphical {
-  /**
-   * This method is invoked from {@link DefaultObjectPresentation#getChildrenGraphical()} to check
-   * if given {@link ObjectInfo} can be displayed on design canvas.
-   *
-   * @param object
-   *          the {@link ObjectInfo} to check.
-   * @param visible
-   *          the array with single boolean flag, with initial <code>true</code> value, any can
-   *          listener set it to <code>false</code>.
-   */
-  void invoke(ObjectInfo object, boolean[] visible) throws Exception;
+	/**
+	 * This method is invoked from {@link DefaultObjectPresentation#getChildrenGraphical()} to check
+	 * if given {@link ObjectInfo} can be displayed on design canvas.
+	 *
+	 * @param object
+	 *          the {@link ObjectInfo} to check.
+	 * @param visible
+	 *          the array with single boolean flag, with initial <code>true</code> value, any can
+	 *          listener set it to <code>false</code>.
+	 */
+	void invoke(ObjectInfo object, boolean[] visible) throws Exception;
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/model/broadcast/ObjectInfoChildTree.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/model/broadcast/ObjectInfoChildTree.java
index d05755f59..2c6d04aec 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/model/broadcast/ObjectInfoChildTree.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/model/broadcast/ObjectInfoChildTree.java
@@ -20,15 +20,15 @@
  * @coverage core.model
  */
 public interface ObjectInfoChildTree {
-  /**
-   * This method is invoked from {@link DefaultObjectPresentation#getChildrenTree()} to check if
-   * given {@link ObjectInfo} can be displayed in components tree.
-   *
-   * @param object
-   *          the {@link ObjectInfo} to check.
-   * @param visible
-   *          the array with single boolean flag, with initial <code>true</code> value, any can
-   *          listener set it to <code>false</code>.
-   */
-  void invoke(ObjectInfo object, boolean[] visible) throws Exception;
+	/**
+	 * This method is invoked from {@link DefaultObjectPresentation#getChildrenTree()} to check if
+	 * given {@link ObjectInfo} can be displayed in components tree.
+	 *
+	 * @param object
+	 *          the {@link ObjectInfo} to check.
+	 * @param visible
+	 *          the array with single boolean flag, with initial <code>true</code> value, any can
+	 *          listener set it to <code>false</code>.
+	 */
+	void invoke(ObjectInfo object, boolean[] visible) throws Exception;
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/model/broadcast/ObjectInfoChildrenGraphical.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/model/broadcast/ObjectInfoChildrenGraphical.java
index e00606978..51ac20a89 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/model/broadcast/ObjectInfoChildrenGraphical.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/model/broadcast/ObjectInfoChildrenGraphical.java
@@ -22,12 +22,12 @@
  * @coverage core.model
  */
 public interface ObjectInfoChildrenGraphical {
-  /**
-   * This method is invoked from {@link DefaultObjectPresentation#getChildrenGraphical()} to allow
-   * processing all prepared children. Subscribers may, for example, reorder children.
-   *
-   * @param children
-   *          the {@link ObjectInfo} children to process.
-   */
-  void invoke(List<ObjectInfo> children) throws Exception;
+	/**
+	 * This method is invoked from {@link DefaultObjectPresentation#getChildrenGraphical()} to allow
+	 * processing all prepared children. Subscribers may, for example, reorder children.
+	 *
+	 * @param children
+	 *          the {@link ObjectInfo} children to process.
+	 */
+	void invoke(List<ObjectInfo> children) throws Exception;
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/model/broadcast/ObjectInfoChildrenTree.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/model/broadcast/ObjectInfoChildrenTree.java
index d10ddd5fd..eb3dd1555 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/model/broadcast/ObjectInfoChildrenTree.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/model/broadcast/ObjectInfoChildrenTree.java
@@ -22,14 +22,14 @@
  * @coverage core.model
  */
 public interface ObjectInfoChildrenTree {
-  /**
-   * This method is invoked from {@link DefaultObjectPresentation#getChildrenTree()} to allow
-   * processing all prepared children. Subscribers may, for example, reorder children.
-   *
-   * @param parent
-   *          the {@link ObjectInfo} which children are processed.
-   * @param children
-   *          the {@link ObjectInfo} children to process.
-   */
-  void invoke(ObjectInfo parent, List<ObjectInfo> children) throws Exception;
+	/**
+	 * This method is invoked from {@link DefaultObjectPresentation#getChildrenTree()} to allow
+	 * processing all prepared children. Subscribers may, for example, reorder children.
+	 *
+	 * @param parent
+	 *          the {@link ObjectInfo} which children are processed.
+	 * @param children
+	 *          the {@link ObjectInfo} children to process.
+	 */
+	void invoke(ObjectInfo parent, List<ObjectInfo> children) throws Exception;
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/model/broadcast/ObjectInfoDeactivePropertyEditor.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/model/broadcast/ObjectInfoDeactivePropertyEditor.java
index 1c4470008..242b814c6 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/model/broadcast/ObjectInfoDeactivePropertyEditor.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/model/broadcast/ObjectInfoDeactivePropertyEditor.java
@@ -20,8 +20,8 @@
  * @coverage core.model
  */
 public interface ObjectInfoDeactivePropertyEditor {
-  /**
-   * Specifies that if there is some {@link PropertyEditor} active, then it should be deactivated.
-   */
-  void invoke() throws Exception;
+	/**
+	 * Specifies that if there is some {@link PropertyEditor} active, then it should be deactivated.
+	 */
+	void invoke() throws Exception;
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/model/broadcast/ObjectInfoDelete.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/model/broadcast/ObjectInfoDelete.java
index e9a67a30b..f3e138c66 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/model/broadcast/ObjectInfoDelete.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/model/broadcast/ObjectInfoDelete.java
@@ -19,15 +19,15 @@
  * @coverage core.model
  */
 public abstract class ObjectInfoDelete {
-  /**
-   * Before {@link ObjectInfo} deleted from its parent.
-   */
-  public void before(ObjectInfo parent, ObjectInfo child) throws Exception {
-  }
+	/**
+	 * Before {@link ObjectInfo} deleted from its parent.
+	 */
+	public void before(ObjectInfo parent, ObjectInfo child) throws Exception {
+	}
 
-  /**
-   * After {@link ObjectInfo} deleted from its parent.
-   */
-  public void after(ObjectInfo parent, ObjectInfo child) throws Exception {
-  }
+	/**
+	 * After {@link ObjectInfo} deleted from its parent.
+	 */
+	public void after(ObjectInfo parent, ObjectInfo child) throws Exception {
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/model/broadcast/ObjectInfoPresentationDecorateIcon.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/model/broadcast/ObjectInfoPresentationDecorateIcon.java
index e67b97642..db39665b6 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/model/broadcast/ObjectInfoPresentationDecorateIcon.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/model/broadcast/ObjectInfoPresentationDecorateIcon.java
@@ -21,13 +21,13 @@
  * @coverage core.model
  */
 public interface ObjectInfoPresentationDecorateIcon {
-  /**
-   * This method is used to support external decoration of "default" object icon.
-   *
-   * @param object
-   *          the {@link ObjectInfo} to decorate icon.
-   * @param icon
-   *          the array with single {@link Image}, listener can replace this image
-   */
-  void invoke(ObjectInfo object, Image[] icon) throws Exception;
+	/**
+	 * This method is used to support external decoration of "default" object icon.
+	 *
+	 * @param object
+	 *          the {@link ObjectInfo} to decorate icon.
+	 * @param icon
+	 *          the array with single {@link Image}, listener can replace this image
+	 */
+	void invoke(ObjectInfo object, Image[] icon) throws Exception;
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/model/broadcast/ObjectInfoPresentationDecorateText.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/model/broadcast/ObjectInfoPresentationDecorateText.java
index 697c59c1c..65f5474ea 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/model/broadcast/ObjectInfoPresentationDecorateText.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/model/broadcast/ObjectInfoPresentationDecorateText.java
@@ -19,13 +19,13 @@
  * @coverage core.model
  */
 public interface ObjectInfoPresentationDecorateText {
-  /**
-   * This method is used to support external decoration of object text.
-   *
-   * @param object
-   *          the {@link ObjectInfo} to decorate title.
-   * @param text
-   *          the array with single {@link String}, listener can replace it
-   */
-  void invoke(ObjectInfo object, String[] text) throws Exception;
+	/**
+	 * This method is used to support external decoration of object text.
+	 *
+	 * @param object
+	 *          the {@link ObjectInfo} to decorate title.
+	 * @param text
+	 *          the array with single {@link String}, listener can replace it
+	 */
+	void invoke(ObjectInfo object, String[] text) throws Exception;
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/model/broadcast/ObjectInfoTreeComplete.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/model/broadcast/ObjectInfoTreeComplete.java
index 1dc1115d6..36ad9b3fc 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/core/model/broadcast/ObjectInfoTreeComplete.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/model/broadcast/ObjectInfoTreeComplete.java
@@ -19,8 +19,8 @@
  * @coverage core.model
  */
 public interface ObjectInfoTreeComplete {
-  /**
-   * After building complete {@link ObjectInfo} tree.
-   */
-  void invoke() throws Exception;
+	/**
+	 * After building complete {@link ObjectInfo} tree.
+	 */
+	void invoke() throws Exception;
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/BundleResourceProvider.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/BundleResourceProvider.java
index 4f9548588..899b0d8ac 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/BundleResourceProvider.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/BundleResourceProvider.java
@@ -40,161 +40,161 @@
  * @coverage core
  */
 public final class BundleResourceProvider {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final Map<String, BundleResourceProvider> m_providers = new HashMap<>();
-
-  /**
-   * @return the {@link BundleResourceProvider} for {@link Bundle} with given id.
-   */
-  public static BundleResourceProvider get(String id) {
-    synchronized (m_providers) {
-      BundleResourceProvider provider = m_providers.get(id);
-      if (provider == null) {
-        provider = new BundleResourceProvider(id);
-        m_providers.put(id, provider);
-      }
-      return provider;
-    }
-  }
-
-  /**
-   * @return the {@link BundleResourceProvider} for {@link Bundle}.
-   */
-  public static BundleResourceProvider get(Bundle bundle) {
-    String id = bundle.getSymbolicName();
-    return get(id);
-  }
-
-  /**
-   * Configures automatic resources clean up on {@link Bundle} uninstalling.
-   */
-  public static void configureCleanUp(BundleContext context) {
-    context.addBundleListener(event -> {
-        if (event.getType() == BundleEvent.UNINSTALLED) {
-          // prepare provider
-          final BundleResourceProvider provider;
-          synchronized (m_providers) {
-            String id = event.getBundle().getSymbolicName();
-            provider = m_providers.remove(id);
-          }
-          // clean up
-          if (provider != null) {
-            Display.getDefault().asyncExec(() -> provider.disposeImages());
-          }
-        }
-      });
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance fields
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final String m_id;
-  private final Bundle m_bundle;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private BundleResourceProvider(String id) {
-    m_id = id;
-    m_bundle = Platform.getBundle(id);
-    Assert.isNotNull(m_bundle, "Unable for find bundle %s", id);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Files
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link String} content of file from bundle directory.
-   */
-  public String getFileString(final String path) {
-    return ExecutionUtils.runObject(() -> {
-        InputStream inputStream = getFile(path);
-        return IOUtils2.readString(inputStream);
-      });
-  }
-
-  /**
-   * @return the {@link InputStream} for file from bundle directory.
-   */
-  public InputStream getFile(String path) {
-    path = normalizePath(path);
-    return getFile0(path);
-  }
-
-  private InputStream getFile0(final String path) {
-    return ExecutionUtils.runObject((RunnableObjectEx<InputStream>) () -> m_bundle.getEntry(path).openStream(), "Unable to open file %s from %s", path, m_id);
-  }
-
-  private static String normalizePath(String path) {
-    // remove extra "/"
-    while (path.indexOf("//") != -1) {
-      path = StringUtils.replace(path, "//", "/");
-    }
-    // ensure leading "/", required for Eclipse 3.2
-    if (path.length() != 0 && path.charAt(0) != '/') {
-      path = "/" + path;
-    }
-    return path;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Images
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final Map<String, Image> m_pathToImage = Maps.newTreeMap();
-  private final Map<String, ImageDescriptor> m_pathToImageDescriptor = Maps.newTreeMap();
-
-  /**
-   * @return the {@link Image}, with caching.
-   */
-  public Image getImage(String path) {
-    path = normalizePath(path);
-    Image image = m_pathToImage.get(path);
-    if (image == null) {
-      InputStream is = getFile(path);
-      try {
-        image = new Image(Display.getCurrent(), is);
-        m_pathToImage.put(path, image);
-      } finally {
-        IOUtils.closeQuietly(is);
-      }
-    }
-    return image;
-  }
-
-  /**
-   * @return the {@link ImageDescriptor}, with caching.
-   */
-  public ImageDescriptor getImageDescriptor(String path) {
-    path = normalizePath(path);
-    ImageDescriptor descriptor = m_pathToImageDescriptor.get(path);
-    if (descriptor == null) {
-      Image image = getImage(path);
-      descriptor = new ImageImageDescriptor(image);
-      m_pathToImageDescriptor.put(path, descriptor);
-    }
-    return descriptor;
-  }
-
-  /**
-   * Disposed loaded {@link Image}s.
-   */
-  private void disposeImages() {
-    for (Image image : m_pathToImage.values()) {
-      if (!image.isDisposed()) {
-        image.dispose();
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final Map<String, BundleResourceProvider> m_providers = new HashMap<>();
+
+	/**
+	 * @return the {@link BundleResourceProvider} for {@link Bundle} with given id.
+	 */
+	public static BundleResourceProvider get(String id) {
+		synchronized (m_providers) {
+			BundleResourceProvider provider = m_providers.get(id);
+			if (provider == null) {
+				provider = new BundleResourceProvider(id);
+				m_providers.put(id, provider);
+			}
+			return provider;
+		}
+	}
+
+	/**
+	 * @return the {@link BundleResourceProvider} for {@link Bundle}.
+	 */
+	public static BundleResourceProvider get(Bundle bundle) {
+		String id = bundle.getSymbolicName();
+		return get(id);
+	}
+
+	/**
+	 * Configures automatic resources clean up on {@link Bundle} uninstalling.
+	 */
+	public static void configureCleanUp(BundleContext context) {
+		context.addBundleListener(event -> {
+			if (event.getType() == BundleEvent.UNINSTALLED) {
+				// prepare provider
+				final BundleResourceProvider provider;
+				synchronized (m_providers) {
+					String id = event.getBundle().getSymbolicName();
+					provider = m_providers.remove(id);
+				}
+				// clean up
+				if (provider != null) {
+					Display.getDefault().asyncExec(() -> provider.disposeImages());
+				}
+			}
+		});
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance fields
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final String m_id;
+	private final Bundle m_bundle;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private BundleResourceProvider(String id) {
+		m_id = id;
+		m_bundle = Platform.getBundle(id);
+		Assert.isNotNull(m_bundle, "Unable for find bundle %s", id);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Files
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link String} content of file from bundle directory.
+	 */
+	public String getFileString(final String path) {
+		return ExecutionUtils.runObject(() -> {
+			InputStream inputStream = getFile(path);
+			return IOUtils2.readString(inputStream);
+		});
+	}
+
+	/**
+	 * @return the {@link InputStream} for file from bundle directory.
+	 */
+	public InputStream getFile(String path) {
+		path = normalizePath(path);
+		return getFile0(path);
+	}
+
+	private InputStream getFile0(final String path) {
+		return ExecutionUtils.runObject((RunnableObjectEx<InputStream>) () -> m_bundle.getEntry(path).openStream(), "Unable to open file %s from %s", path, m_id);
+	}
+
+	private static String normalizePath(String path) {
+		// remove extra "/"
+		while (path.indexOf("//") != -1) {
+			path = StringUtils.replace(path, "//", "/");
+		}
+		// ensure leading "/", required for Eclipse 3.2
+		if (path.length() != 0 && path.charAt(0) != '/') {
+			path = "/" + path;
+		}
+		return path;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Images
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final Map<String, Image> m_pathToImage = Maps.newTreeMap();
+	private final Map<String, ImageDescriptor> m_pathToImageDescriptor = Maps.newTreeMap();
+
+	/**
+	 * @return the {@link Image}, with caching.
+	 */
+	public Image getImage(String path) {
+		path = normalizePath(path);
+		Image image = m_pathToImage.get(path);
+		if (image == null) {
+			InputStream is = getFile(path);
+			try {
+				image = new Image(Display.getCurrent(), is);
+				m_pathToImage.put(path, image);
+			} finally {
+				IOUtils.closeQuietly(is);
+			}
+		}
+		return image;
+	}
+
+	/**
+	 * @return the {@link ImageDescriptor}, with caching.
+	 */
+	public ImageDescriptor getImageDescriptor(String path) {
+		path = normalizePath(path);
+		ImageDescriptor descriptor = m_pathToImageDescriptor.get(path);
+		if (descriptor == null) {
+			Image image = getImage(path);
+			descriptor = new ImageImageDescriptor(image);
+			m_pathToImageDescriptor.put(path, descriptor);
+		}
+		return descriptor;
+	}
+
+	/**
+	 * Disposed loaded {@link Image}s.
+	 */
+	private void disposeImages() {
+		for (Image image : m_pathToImage.values()) {
+			if (!image.isDisposed()) {
+				image.dispose();
+			}
+		}
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/DesignerPlugin.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/DesignerPlugin.java
index d14fda053..c9e0fba49 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/DesignerPlugin.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/DesignerPlugin.java
@@ -48,372 +48,372 @@
  * @coverage core
  */
 public class DesignerPlugin extends AbstractUIPlugin {
-  public static final String PLUGIN_ID = "org.eclipse.wb.core";
-  private static DesignerPlugin m_plugin;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Bundle operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void start(BundleContext context) throws Exception {
-    super.start(context);
-    m_plugin = this;
-    BundleResourceProvider.configureCleanUp(context);
-    addLogListener();
-    if (EnvironmentUtils.IS_LINUX) {
-      installPreferenceForwarder();
-    }
-    exportAllModulesToAllModules();
-  }
-
-  @SuppressWarnings("unchecked")
-  private void exportAllModulesToAllModules() {
-    try {
-      Modules.exportAllToAll();
-      Class<?> bootClassLoaderClass =
-          Class.forName("jdk.internal.loader.ClassLoaders$BootClassLoader");
-      Constructor<? extends ClassLoader> constructor =
-          (Constructor<? extends ClassLoader>) Class.forName(
-              "jdk.internal.loader.ClassLoaders$PlatformClassLoader").getDeclaredConstructor(
-                  bootClassLoaderClass);
-      constructor.setAccessible(true);
-      Class<?> classLoadersClass = Class.forName("jdk.internal.loader.ClassLoaders");
-      Method bootClassLoaderRetriever = classLoadersClass.getDeclaredMethod("bootLoader");
-      bootClassLoaderRetriever.setAccessible(true);
-      ClassLoader newBuiltinclassLoader =
-          constructor.newInstance(bootClassLoaderRetriever.invoke(classLoadersClass));
-      System.out.println(newBuiltinclassLoader + " instantiated");
-    } catch (Exception exc) {
-      log(exc);
-    }
-  }
-
-  @Override
-  public void stop(BundleContext context) throws Exception {
-    m_plugin = null;
-    super.stop(context);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the instance of {@link DesignerPlugin}
-   */
-  public static DesignerPlugin getDefault() {
-    return m_plugin;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Preferences
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link IPreferenceStore} for Designer.
-   */
-  public static IPreferenceStore getPreferences() {
-    return getDefault().getPreferenceStore();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Display/Shell
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link Display} instance, current (if in GUI thread) or default.
-   */
-  public static Display getStandardDisplay() {
-    Display display = Display.getCurrent();
-    if (display == null) {
-      display = Display.getDefault();
-    }
-    return display;
-  }
-
-  /**
-   * @return the active {@link IWorkbenchWindow}.
-   */
-  public static IWorkbenchWindow getActiveWorkbenchWindow() {
+	public static final String PLUGIN_ID = "org.eclipse.wb.core";
+	private static DesignerPlugin m_plugin;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Bundle operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+		m_plugin = this;
+		BundleResourceProvider.configureCleanUp(context);
+		addLogListener();
+		if (EnvironmentUtils.IS_LINUX) {
+			installPreferenceForwarder();
+		}
+		exportAllModulesToAllModules();
+	}
+
+	@SuppressWarnings("unchecked")
+	private void exportAllModulesToAllModules() {
+		try {
+			Modules.exportAllToAll();
+			Class<?> bootClassLoaderClass =
+					Class.forName("jdk.internal.loader.ClassLoaders$BootClassLoader");
+			Constructor<? extends ClassLoader> constructor =
+					(Constructor<? extends ClassLoader>) Class.forName(
+							"jdk.internal.loader.ClassLoaders$PlatformClassLoader").getDeclaredConstructor(
+									bootClassLoaderClass);
+			constructor.setAccessible(true);
+			Class<?> classLoadersClass = Class.forName("jdk.internal.loader.ClassLoaders");
+			Method bootClassLoaderRetriever = classLoadersClass.getDeclaredMethod("bootLoader");
+			bootClassLoaderRetriever.setAccessible(true);
+			ClassLoader newBuiltinclassLoader =
+					constructor.newInstance(bootClassLoaderRetriever.invoke(classLoadersClass));
+			System.out.println(newBuiltinclassLoader + " instantiated");
+		} catch (Exception exc) {
+			log(exc);
+		}
+	}
+
+	@Override
+	public void stop(BundleContext context) throws Exception {
+		m_plugin = null;
+		super.stop(context);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the instance of {@link DesignerPlugin}
+	 */
+	public static DesignerPlugin getDefault() {
+		return m_plugin;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Preferences
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link IPreferenceStore} for Designer.
+	 */
+	public static IPreferenceStore getPreferences() {
+		return getDefault().getPreferenceStore();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Display/Shell
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link Display} instance, current (if in GUI thread) or default.
+	 */
+	public static Display getStandardDisplay() {
+		Display display = Display.getCurrent();
+		if (display == null) {
+			display = Display.getDefault();
+		}
+		return display;
+	}
+
+	/**
+	 * @return the active {@link IWorkbenchWindow}.
+	 */
+	public static IWorkbenchWindow getActiveWorkbenchWindow() {
 		return PlatformUI.getWorkbench().getActiveWorkbenchWindow();
-  }
-
-  /**
-   * @return the active {@link IWorkbenchPage}.
-   */
-  public static IWorkbenchPage getActivePage() {
-    IWorkbenchWindow window = getActiveWorkbenchWindow();
-    return window == null ? null : window.getActivePage();
-  }
-
-  /**
-   * @return active {@link IEditorPart} on active workbench page.
-   */
-  public static IEditorPart getActiveEditor() {
-    IWorkbenchPage page = getActivePage();
-    return page != null ? page.getActiveEditor() : null;
-  }
-
-  /**
-   * @return the {@link Shell} of active {@link IWorkbenchWindow}.
-   */
-  public static Shell getShell() {
-    if (getActiveWorkbenchWindow() != null) {
-      return getActiveWorkbenchWindow().getShell();
-    }
-    return null;
-  }
-
-  /////////////////////////////////////////////////////1.10.1.qualifier///////////////////////
-  //
-  // Events
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static boolean m_ctrlPressed;
-  private static boolean m_shiftPressed;
-
-  /**
-   * Adds {@link Display} filter that redirects {@link SWT#MouseWheel} event to {@link Control}
-   * under mouse cursor.
-   */
-  private static void addMouseWheelRedirector() {
-    // Windows-only code
-    if (EnvironmentUtils.IS_WINDOWS) {
-      final Listener listener = event -> {
-        Control cursorControl = Display.getDefault().getCursorControl();
-        if (cursorControl instanceof Scrollable && cursorControl != event.widget) {
-          event.doit = false;
-          if ((cursorControl.getStyle() & SWT.V_SCROLL) != 0) {
-            // prepare count and direction
-            OSSupport.get().scroll(cursorControl, event.count);
-          }
-        }
-      };
-      final Display display = Display.getDefault();
-      display.asyncExec(() -> display.addFilter(SWT.MouseWheel, listener));
-    }
-  }
-
-  /**
-   * Adds {@link Display} filters for tracking interesting events.
-   */
-  private static void setupEventFilters() {
-    final Listener listener = event -> {
-      // Ctrl tracking
-      if (event.keyCode == SWT.CTRL) {
-        if (event.type == SWT.KeyDown) {
-          m_ctrlPressed = true;
-        }
-        if (event.type == SWT.KeyUp) {
-          m_ctrlPressed = false;
-        }
-        return;
-      }
-      // Shift tracking
-      if (event.keyCode == SWT.SHIFT) {
-        if (event.type == SWT.KeyDown) {
-          m_shiftPressed = true;
-        }
-        if (event.type == SWT.KeyUp) {
-          m_shiftPressed = false;
-        }
-        return;
-      }
-    };
-    //
-    final Display display = Display.getDefault();
-    display.asyncExec(() -> {
-      display.addFilter(SWT.MouseDown, listener);
-      display.addFilter(SWT.MouseUp, listener);
-      display.addFilter(SWT.KeyDown, listener);
-      display.addFilter(SWT.KeyUp, listener);
-      display.addFilter(SWT.Traverse, listener);
-    });
-  }
-
-  /**
-   * @return <code>true</code> if Ctrl key is now pressed.
-   */
-  public static boolean isCtrlPressed() {
-    return m_ctrlPressed;
-  }
-
-  /**
-   * @return <code>true</code> if Shift key is now pressed.
-   */
-  public static boolean isShiftPressed() {
-    return m_shiftPressed;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Logging
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static boolean m_displayExceptionOnConsole = true;
-
-  /**
-   * Sets flag if {@link #log(Throwable)} should display exception on console.
-   */
-  public static void setDisplayExceptionOnConsole(boolean displayExceptionOnConsole) {
-    m_displayExceptionOnConsole = displayExceptionOnConsole;
-  }
-
-  /**
-   * Logs given {@link IStatus} into Eclipse .log.
-   */
-  public static void log(IStatus status) {
-    DesignerPlugin pluginInstance = getDefault();
-    if (pluginInstance != null) {
-      pluginInstance.getLog().log(status);
-    }
-  }
-
-  /**
-   * Logs {@link IStatus} with given message into Eclipse .log.
-   */
-  public static void log(String message) {
-    log(new Status(IStatus.INFO, PLUGIN_ID, IStatus.INFO, message, null));
-  }
-
-  /**
-   * Logs {@link IStatus} with given exception into Eclipse .log.
-   */
-  public static void log(Throwable e) {
-    // print on console for easy debugging
-    if (m_displayExceptionOnConsole) {
-      e.printStackTrace();
-    }
-    // log into Eclipse .log
-    {
-      String message = e.getMessage();
-      if (message == null) {
-        message = e.getClass().getName();
-      }
-      String versionString = ProductInfo.getProduct().getVersion().toString();
-      String buildString = ProductInfo.getProduct().getBuild();
-      log(
-          "Designer ["
-              + versionString
-              + (versionString.endsWith(buildString) ? "" : "." + buildString)
-              + "]: "
-              + message,
-          e);
-    }
-  }
-
-  /**
-   * Logs {@link IStatus} with given message and exception into Eclipse .log.
-   */
-  public static void log(String message, Throwable e) {
-    log(createStatus(message, e));
-  }
-
-  /**
-   * Creates {@link IStatus} for given message and exception.
-   */
-  public static Status createStatus(String message, Throwable e) {
-    return new Status(IStatus.ERROR, PLUGIN_ID, IStatus.ERROR, message, e) {
-      @Override
-      public boolean isMultiStatus() {
-        return true;
-      }
-    };
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Track last log entry
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private IStatus m_lastStatus;
-
-  private void addLogListener() {
-    ILog log = getLog();
-    log.addLogListener((status, plugin) -> setLastStatus(status));
-  }
-
-  private void setLastStatus(IStatus lastStatus) {
-    m_lastStatus = lastStatus;
-  }
-
-  private IStatus getLastStatus0() {
-    return m_lastStatus;
-  }
-
-  /**
-   * @return the {@link IStatus} instance which was last logged by the eclipse log.
-   */
-  public static IStatus getLastStatus() {
-    DesignerPlugin pluginInstance = getDefault();
-    if (pluginInstance != null) {
-      return pluginInstance.getLastStatus0();
-    }
-    return null;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Resources
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final BundleResourceProvider m_resourceProvider =
-      BundleResourceProvider.get(PLUGIN_ID);
-
-  /**
-   * @return the {@link InputStream} for file from plugin directory.
-   */
-  public static InputStream getFile(String path) {
-    return m_resourceProvider.getFile(path);
-  }
-
-  /**
-   * @return the {@link Image} from "icons" directory, with caching.
-   */
-  public static Image getImage(String path) {
-    return m_resourceProvider.getImage("icons/" + path);
-  }
-
-  /**
-   * @return the {@link ImageDescriptor} from "icons" directory.
-   */
-  public static ImageDescriptor getImageDescriptor(String path) {
-    return m_resourceProvider.getImageDescriptor("icons/" + path);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Linux only
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void installPreferenceForwarder() {
-    new PreferenceToSystemForwarder(getPreferenceStore(),
-        IPreferenceConstants.P_COMMON_LINUX_DISABLE_SCREENSHOT_WORKAROUNDS,
-        "__wbp.linux.disableScreenshotWorkarounds");
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Set-up during first editor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static boolean m_preEditorConfigured = false;
-
-  /**
-   * This is fast method which performs configuration directly before first use of editor.
-   */
-  public static synchronized void configurePreEditor() {
-    if (m_preEditorConfigured) {
-      return;
-    }
-    m_preEditorConfigured = true;
-    // add listeners
-    setupEventFilters();
-    addMouseWheelRedirector();
-  }
+	}
+
+	/**
+	 * @return the active {@link IWorkbenchPage}.
+	 */
+	public static IWorkbenchPage getActivePage() {
+		IWorkbenchWindow window = getActiveWorkbenchWindow();
+		return window == null ? null : window.getActivePage();
+	}
+
+	/**
+	 * @return active {@link IEditorPart} on active workbench page.
+	 */
+	public static IEditorPart getActiveEditor() {
+		IWorkbenchPage page = getActivePage();
+		return page != null ? page.getActiveEditor() : null;
+	}
+
+	/**
+	 * @return the {@link Shell} of active {@link IWorkbenchWindow}.
+	 */
+	public static Shell getShell() {
+		if (getActiveWorkbenchWindow() != null) {
+			return getActiveWorkbenchWindow().getShell();
+		}
+		return null;
+	}
+
+	/////////////////////////////////////////////////////1.10.1.qualifier///////////////////////
+	//
+	// Events
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static boolean m_ctrlPressed;
+	private static boolean m_shiftPressed;
+
+	/**
+	 * Adds {@link Display} filter that redirects {@link SWT#MouseWheel} event to {@link Control}
+	 * under mouse cursor.
+	 */
+	private static void addMouseWheelRedirector() {
+		// Windows-only code
+		if (EnvironmentUtils.IS_WINDOWS) {
+			final Listener listener = event -> {
+				Control cursorControl = Display.getDefault().getCursorControl();
+				if (cursorControl instanceof Scrollable && cursorControl != event.widget) {
+					event.doit = false;
+					if ((cursorControl.getStyle() & SWT.V_SCROLL) != 0) {
+						// prepare count and direction
+						OSSupport.get().scroll(cursorControl, event.count);
+					}
+				}
+			};
+			final Display display = Display.getDefault();
+			display.asyncExec(() -> display.addFilter(SWT.MouseWheel, listener));
+		}
+	}
+
+	/**
+	 * Adds {@link Display} filters for tracking interesting events.
+	 */
+	private static void setupEventFilters() {
+		final Listener listener = event -> {
+			// Ctrl tracking
+			if (event.keyCode == SWT.CTRL) {
+				if (event.type == SWT.KeyDown) {
+					m_ctrlPressed = true;
+				}
+				if (event.type == SWT.KeyUp) {
+					m_ctrlPressed = false;
+				}
+				return;
+			}
+			// Shift tracking
+			if (event.keyCode == SWT.SHIFT) {
+				if (event.type == SWT.KeyDown) {
+					m_shiftPressed = true;
+				}
+				if (event.type == SWT.KeyUp) {
+					m_shiftPressed = false;
+				}
+				return;
+			}
+		};
+		//
+		final Display display = Display.getDefault();
+		display.asyncExec(() -> {
+			display.addFilter(SWT.MouseDown, listener);
+			display.addFilter(SWT.MouseUp, listener);
+			display.addFilter(SWT.KeyDown, listener);
+			display.addFilter(SWT.KeyUp, listener);
+			display.addFilter(SWT.Traverse, listener);
+		});
+	}
+
+	/**
+	 * @return <code>true</code> if Ctrl key is now pressed.
+	 */
+	public static boolean isCtrlPressed() {
+		return m_ctrlPressed;
+	}
+
+	/**
+	 * @return <code>true</code> if Shift key is now pressed.
+	 */
+	public static boolean isShiftPressed() {
+		return m_shiftPressed;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Logging
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static boolean m_displayExceptionOnConsole = true;
+
+	/**
+	 * Sets flag if {@link #log(Throwable)} should display exception on console.
+	 */
+	public static void setDisplayExceptionOnConsole(boolean displayExceptionOnConsole) {
+		m_displayExceptionOnConsole = displayExceptionOnConsole;
+	}
+
+	/**
+	 * Logs given {@link IStatus} into Eclipse .log.
+	 */
+	public static void log(IStatus status) {
+		DesignerPlugin pluginInstance = getDefault();
+		if (pluginInstance != null) {
+			pluginInstance.getLog().log(status);
+		}
+	}
+
+	/**
+	 * Logs {@link IStatus} with given message into Eclipse .log.
+	 */
+	public static void log(String message) {
+		log(new Status(IStatus.INFO, PLUGIN_ID, IStatus.INFO, message, null));
+	}
+
+	/**
+	 * Logs {@link IStatus} with given exception into Eclipse .log.
+	 */
+	public static void log(Throwable e) {
+		// print on console for easy debugging
+		if (m_displayExceptionOnConsole) {
+			e.printStackTrace();
+		}
+		// log into Eclipse .log
+		{
+			String message = e.getMessage();
+			if (message == null) {
+				message = e.getClass().getName();
+			}
+			String versionString = ProductInfo.getProduct().getVersion().toString();
+			String buildString = ProductInfo.getProduct().getBuild();
+			log(
+					"Designer ["
+							+ versionString
+							+ (versionString.endsWith(buildString) ? "" : "." + buildString)
+							+ "]: "
+							+ message,
+							e);
+		}
+	}
+
+	/**
+	 * Logs {@link IStatus} with given message and exception into Eclipse .log.
+	 */
+	public static void log(String message, Throwable e) {
+		log(createStatus(message, e));
+	}
+
+	/**
+	 * Creates {@link IStatus} for given message and exception.
+	 */
+	public static Status createStatus(String message, Throwable e) {
+		return new Status(IStatus.ERROR, PLUGIN_ID, IStatus.ERROR, message, e) {
+			@Override
+			public boolean isMultiStatus() {
+				return true;
+			}
+		};
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Track last log entry
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private IStatus m_lastStatus;
+
+	private void addLogListener() {
+		ILog log = getLog();
+		log.addLogListener((status, plugin) -> setLastStatus(status));
+	}
+
+	private void setLastStatus(IStatus lastStatus) {
+		m_lastStatus = lastStatus;
+	}
+
+	private IStatus getLastStatus0() {
+		return m_lastStatus;
+	}
+
+	/**
+	 * @return the {@link IStatus} instance which was last logged by the eclipse log.
+	 */
+	public static IStatus getLastStatus() {
+		DesignerPlugin pluginInstance = getDefault();
+		if (pluginInstance != null) {
+			return pluginInstance.getLastStatus0();
+		}
+		return null;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Resources
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final BundleResourceProvider m_resourceProvider =
+			BundleResourceProvider.get(PLUGIN_ID);
+
+	/**
+	 * @return the {@link InputStream} for file from plugin directory.
+	 */
+	public static InputStream getFile(String path) {
+		return m_resourceProvider.getFile(path);
+	}
+
+	/**
+	 * @return the {@link Image} from "icons" directory, with caching.
+	 */
+	public static Image getImage(String path) {
+		return m_resourceProvider.getImage("icons/" + path);
+	}
+
+	/**
+	 * @return the {@link ImageDescriptor} from "icons" directory.
+	 */
+	public static ImageDescriptor getImageDescriptor(String path) {
+		return m_resourceProvider.getImageDescriptor("icons/" + path);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Linux only
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void installPreferenceForwarder() {
+		new PreferenceToSystemForwarder(getPreferenceStore(),
+				IPreferenceConstants.P_COMMON_LINUX_DISABLE_SCREENSHOT_WORKAROUNDS,
+				"__wbp.linux.disableScreenshotWorkarounds");
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Set-up during first editor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static boolean m_preEditorConfigured = false;
+
+	/**
+	 * This is fast method which performs configuration directly before first use of editor.
+	 */
+	public static synchronized void configurePreEditor() {
+		if (m_preEditorConfigured) {
+			return;
+		}
+		m_preEditorConfigured = true;
+		// add listeners
+		setupEventFilters();
+		addMouseWheelRedirector();
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/EnvironmentUtils.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/EnvironmentUtils.java
index 0ef4ba8ec..c68524938 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/EnvironmentUtils.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/EnvironmentUtils.java
@@ -26,174 +26,174 @@
  * @coverage core
  */
 public final class EnvironmentUtils extends AbstractUIPlugin {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Host
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final String HOST_NAME = getHostName();
-  public static final boolean DEVELOPER_HOST;
-  static {
-    String host = HOST_NAME.toUpperCase(Locale.ENGLISH);
-    DEVELOPER_HOST = "SCHEGLOV-KE".equals(host)
-        || "SCHEGLOV-MACPRO".equals(host)
-        || "SCHEGLOV-WIN".equals(host)
-        || "SCHEGLOV".equals(host)
-        || "MITIN-AA".equals(host)
-        || "MITIN-AA-MAC".equals(host)
-        || "SABLIN-AA".equals(host)
-        || "FLANKER-WINDOWS".equals(host);
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Operating systems
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /** True if this is running on Windows */
-  public static final boolean IS_WINDOWS;
-  /** True if this is running on Mac */
-  public static final boolean IS_MAC;
-  /** True if this is running on Linux */
-  public static final boolean IS_LINUX;
-  /** True if this is running on Motif */
-  private static final String OS_NAME_OSX_PREFIX = "Mac OS X";
-  public static final boolean IS_MAC_10_6 = getOSMatches(OS_NAME_OSX_PREFIX, "10.6");
-  /*
-   * The JLS doesn't seem to specify an exact naming convention for the
-   * os.name. We ensure a uniform naming here.
-   */
-  static {
-    if (SystemUtils.OS_NAME.startsWith("Windows")) {
-      IS_WINDOWS = true;
-      IS_MAC = false;
-      IS_LINUX = false;
-    } else if (SystemUtils.OS_NAME.startsWith("Linux")) {
-      IS_WINDOWS = false;
-      IS_MAC = false;
-      IS_LINUX = true;
-    } else if (SystemUtils.OS_NAME.startsWith(OS_NAME_OSX_PREFIX)) {
-      IS_WINDOWS = false;
-      IS_MAC = true;
-      IS_LINUX = false;
-    } else if (SystemUtils.OS_NAME.startsWith("Mac")) {
-      IS_WINDOWS = false;
-      IS_MAC = true;
-      IS_LINUX = false;
-    } else {
-      IS_WINDOWS = false;
-      IS_MAC = false;
-      IS_LINUX = false;
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // System utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static String getHostName() {
-    String hostName = "";
-    try {
-      hostName = InetAddress.getLocalHost().getHostName();
-      String[] names = StringUtils.split(hostName, '.');
-      for (String name : names) {
-        if (StringUtils.isNumeric(name)) {
-          // getHostName() returned in a IP-address form
-          return hostName;
-        }
-      }
-      hostName = names[0];
-    } catch (UnknownHostException e) {
-    }
-    return hostName;
-  }
-
-  /**
-   * Decides if the operating system matches.
-   *
-   * @param osNamePrefix
-   *          the prefix for the OS name.
-   * @param osVersionPrefix
-   *          the prefix for the version.
-   * @return <code>true</code> if matches, or <code>false</code> if not or can't determine.
-   */
-  private static boolean getOSMatches(String osNamePrefix, String osVersionPrefix) {
-    if (SystemUtils.OS_NAME == null || SystemUtils.OS_VERSION == null) {
-      return false;
-    }
-    return SystemUtils.OS_NAME.startsWith(osNamePrefix)
-        && SystemUtils.OS_VERSION.startsWith(osVersionPrefix);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // JVM version
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static Float m_forcedJavaVersion = null;
-
-  /**
-   * @return the Java version number as <code>float</code>. For example <code>1.5</code> for JDK
-   *         1.5.
-   */
-  public static float getJavaVersion() {
-    if (m_forcedJavaVersion != null) {
-      return m_forcedJavaVersion;
-    }
-    return SystemUtils.JAVA_VERSION_FLOAT;
-  }
-
-  /**
-   * Allows temporary (for tests) specify different Java version.
-   */
-  public static void setForcedJavaVersion(Float version) {
-    m_forcedJavaVersion = version;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IBM Java
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final String WBP_JAVA_VM_VENDOR = "wbp java.vm.vendor";
-
-  /**
-   * IBM Java has its own glitches.
-   */
-  public static boolean isJavaIBM() {
-    return getTestSensetive_JAVA_VM_VENDOR().toUpperCase(Locale.ENGLISH).contains("IBM");
-  }
-
-  private static String getTestSensetive_JAVA_VM_VENDOR() {
-    String forcedVendor = System.getProperty(WBP_JAVA_VM_VENDOR);
-    if (forcedVendor != null) {
-      return forcedVendor;
-    } else {
-      return SystemUtils.JAVA_VM_VENDOR;
-    }
-  }
-
-  public static void setForcedIBM(boolean forced) {
-    if (forced) {
-      System.setProperty(WBP_JAVA_VM_VENDOR, "Fake IBM");
-    } else {
-      System.clearProperty(WBP_JAVA_VM_VENDOR);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Development
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final String WBP_TESTING_TIME = "wbp.testing.time";
-
-  //
-  public static boolean isTestingTime() {
-    return "true".equals(System.getProperty(WBP_TESTING_TIME));
-  }
-
-  public static void setTestingTime(boolean value) {
-    System.setProperty(WBP_TESTING_TIME, value ? "true" : "false");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Host
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final String HOST_NAME = getHostName();
+	public static final boolean DEVELOPER_HOST;
+	static {
+		String host = HOST_NAME.toUpperCase(Locale.ENGLISH);
+		DEVELOPER_HOST = "SCHEGLOV-KE".equals(host)
+				|| "SCHEGLOV-MACPRO".equals(host)
+				|| "SCHEGLOV-WIN".equals(host)
+				|| "SCHEGLOV".equals(host)
+				|| "MITIN-AA".equals(host)
+				|| "MITIN-AA-MAC".equals(host)
+				|| "SABLIN-AA".equals(host)
+				|| "FLANKER-WINDOWS".equals(host);
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Operating systems
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/** True if this is running on Windows */
+	public static final boolean IS_WINDOWS;
+	/** True if this is running on Mac */
+	public static final boolean IS_MAC;
+	/** True if this is running on Linux */
+	public static final boolean IS_LINUX;
+	/** True if this is running on Motif */
+	private static final String OS_NAME_OSX_PREFIX = "Mac OS X";
+	public static final boolean IS_MAC_10_6 = getOSMatches(OS_NAME_OSX_PREFIX, "10.6");
+	/*
+	 * The JLS doesn't seem to specify an exact naming convention for the
+	 * os.name. We ensure a uniform naming here.
+	 */
+	static {
+		if (SystemUtils.OS_NAME.startsWith("Windows")) {
+			IS_WINDOWS = true;
+			IS_MAC = false;
+			IS_LINUX = false;
+		} else if (SystemUtils.OS_NAME.startsWith("Linux")) {
+			IS_WINDOWS = false;
+			IS_MAC = false;
+			IS_LINUX = true;
+		} else if (SystemUtils.OS_NAME.startsWith(OS_NAME_OSX_PREFIX)) {
+			IS_WINDOWS = false;
+			IS_MAC = true;
+			IS_LINUX = false;
+		} else if (SystemUtils.OS_NAME.startsWith("Mac")) {
+			IS_WINDOWS = false;
+			IS_MAC = true;
+			IS_LINUX = false;
+		} else {
+			IS_WINDOWS = false;
+			IS_MAC = false;
+			IS_LINUX = false;
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// System utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static String getHostName() {
+		String hostName = "";
+		try {
+			hostName = InetAddress.getLocalHost().getHostName();
+			String[] names = StringUtils.split(hostName, '.');
+			for (String name : names) {
+				if (StringUtils.isNumeric(name)) {
+					// getHostName() returned in a IP-address form
+					return hostName;
+				}
+			}
+			hostName = names[0];
+		} catch (UnknownHostException e) {
+		}
+		return hostName;
+	}
+
+	/**
+	 * Decides if the operating system matches.
+	 *
+	 * @param osNamePrefix
+	 *          the prefix for the OS name.
+	 * @param osVersionPrefix
+	 *          the prefix for the version.
+	 * @return <code>true</code> if matches, or <code>false</code> if not or can't determine.
+	 */
+	private static boolean getOSMatches(String osNamePrefix, String osVersionPrefix) {
+		if (SystemUtils.OS_NAME == null || SystemUtils.OS_VERSION == null) {
+			return false;
+		}
+		return SystemUtils.OS_NAME.startsWith(osNamePrefix)
+				&& SystemUtils.OS_VERSION.startsWith(osVersionPrefix);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// JVM version
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static Float m_forcedJavaVersion = null;
+
+	/**
+	 * @return the Java version number as <code>float</code>. For example <code>1.5</code> for JDK
+	 *         1.5.
+	 */
+	public static float getJavaVersion() {
+		if (m_forcedJavaVersion != null) {
+			return m_forcedJavaVersion;
+		}
+		return SystemUtils.JAVA_VERSION_FLOAT;
+	}
+
+	/**
+	 * Allows temporary (for tests) specify different Java version.
+	 */
+	public static void setForcedJavaVersion(Float version) {
+		m_forcedJavaVersion = version;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IBM Java
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final String WBP_JAVA_VM_VENDOR = "wbp java.vm.vendor";
+
+	/**
+	 * IBM Java has its own glitches.
+	 */
+	public static boolean isJavaIBM() {
+		return getTestSensetive_JAVA_VM_VENDOR().toUpperCase(Locale.ENGLISH).contains("IBM");
+	}
+
+	private static String getTestSensetive_JAVA_VM_VENDOR() {
+		String forcedVendor = System.getProperty(WBP_JAVA_VM_VENDOR);
+		if (forcedVendor != null) {
+			return forcedVendor;
+		} else {
+			return SystemUtils.JAVA_VM_VENDOR;
+		}
+	}
+
+	public static void setForcedIBM(boolean forced) {
+		if (forced) {
+			System.setProperty(WBP_JAVA_VM_VENDOR, "Fake IBM");
+		} else {
+			System.clearProperty(WBP_JAVA_VM_VENDOR);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Development
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final String WBP_TESTING_TIME = "wbp.testing.time";
+
+	//
+	public static boolean isTestingTime() {
+		return "true".equals(System.getProperty(WBP_TESTING_TIME));
+	}
+
+	public static void setTestingTime(boolean value) {
+		System.setProperty(WBP_TESTING_TIME, value ? "true" : "false");
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/DesignComposite.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/DesignComposite.java
index f2863562b..052c6b9a2 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/DesignComposite.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/DesignComposite.java
@@ -51,260 +51,260 @@
  * @coverage core.editor
  */
 public abstract class DesignComposite extends Composite {
-  protected final IEditorPart m_editorPart;
-  private final ICommandExceptionHandler m_exceptionHandler;
-  protected DesignComponentsComposite m_componentsComposite;
-  protected ToolBar m_toolBar;
-  protected ViewersComposite m_viewersComposite;
-  protected GraphicalViewer m_viewer;
+	protected final IEditorPart m_editorPart;
+	private final ICommandExceptionHandler m_exceptionHandler;
+	protected DesignComponentsComposite m_componentsComposite;
+	protected ToolBar m_toolBar;
+	protected ViewersComposite m_viewersComposite;
+	protected GraphicalViewer m_viewer;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DesignComposite(Composite parent,
-      int style,
-      IEditorPart editorPart,
-      ICommandExceptionHandler exceptionHandler) {
-    super(parent, style);
-    m_editorPart = editorPart;
-    m_exceptionHandler = exceptionHandler;
-    // create GUI
-    setLayout(new FillLayout());
-    createMainComposite();
-    // fill toolbar
-    createDesignActions();
-    createDesignToolbarHelper();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DesignComposite(Composite parent,
+			int style,
+			IEditorPart editorPart,
+			ICommandExceptionHandler exceptionHandler) {
+		super(parent, style);
+		m_editorPart = editorPart;
+		m_exceptionHandler = exceptionHandler;
+		// create GUI
+		setLayout(new FillLayout());
+		createMainComposite();
+		// fill toolbar
+		createDesignActions();
+		createDesignToolbarHelper();
+	}
 
-  private void createMainComposite() {
-    // create mainComposite
-    FlyoutControlComposite mainComposite;
-    {
-      PluginFlyoutPreferences preferences =
-          new PluginFlyoutPreferences(DesignerPlugin.getPreferences(), "design.structure");
-      preferences.initializeDefaults(
-          IFlyoutPreferences.DOCK_WEST,
-          IFlyoutPreferences.STATE_OPEN,
-          300);
-      mainComposite = new FlyoutControlComposite(this, SWT.NONE, preferences);
-      mainComposite.setTitleText("Structure");
-      mainComposite.setMinWidth(200);
-      mainComposite.addMenuContributor(new DesignerFlyoutMenuContributor(StructureView.ID));
-    }
-    // create components composite
-    m_componentsComposite =
-        new DesignComponentsComposite(mainComposite.getFlyoutParent(), SWT.NONE);
-    // create editor composite
-    createEditorComposite(mainComposite.getClientParent());
-  }
+	private void createMainComposite() {
+		// create mainComposite
+		FlyoutControlComposite mainComposite;
+		{
+			PluginFlyoutPreferences preferences =
+					new PluginFlyoutPreferences(DesignerPlugin.getPreferences(), "design.structure");
+			preferences.initializeDefaults(
+					IFlyoutPreferences.DOCK_WEST,
+					IFlyoutPreferences.STATE_OPEN,
+					300);
+			mainComposite = new FlyoutControlComposite(this, SWT.NONE, preferences);
+			mainComposite.setTitleText("Structure");
+			mainComposite.setMinWidth(200);
+			mainComposite.addMenuContributor(new DesignerFlyoutMenuContributor(StructureView.ID));
+		}
+		// create components composite
+		m_componentsComposite =
+				new DesignComponentsComposite(mainComposite.getFlyoutParent(), SWT.NONE);
+		// create editor composite
+		createEditorComposite(mainComposite.getClientParent());
+	}
 
-  private void createEditorComposite(Composite parent) {
-    Composite editorComposite = new Composite(parent, SWT.NONE);
-    GridLayoutFactory.create(editorComposite).noMargins().spacingV(0);
-    Preferences preferences =
-        InstanceScope.INSTANCE.getNode(IEditorPreferenceConstants.WB_BASIC_UI_PREFERENCE_NODE);
-    boolean windowbuilderBasic =
-        preferences.getBoolean(IEditorPreferenceConstants.WB_BASIC_UI, false);
-    // toolbar
-    {
-      m_toolBar = new ToolBar(editorComposite, SWT.FLAT | SWT.RIGHT);
-      //Exclude from GridData when separator is hidden
-      //if includeWindowBuilderToolbar is true the exclude method should get 'false' as parameter
-      GridDataFactory.create(m_toolBar).grabH().fill().exclude(windowbuilderBasic);
-      m_toolBar.setVisible(!windowbuilderBasic);
-    }
-    // separator to highlight toolbar
-    {
-      LineControl separator = new LineControl(editorComposite, SWT.HORIZONTAL);
-      separator.setBackground(IColorConstants.buttonDarker);
-      //Exclude from GridData when separator is hidden
-      //Separator should be hidden when toolbar is hidden.
-      GridDataFactory.create(separator).grabH().fill().exclude(windowbuilderBasic);
-      separator.setVisible(!windowbuilderBasic);
-    }
-    // create gefComposite - palette and design canvas (viewer)
-    createGEFComposite(editorComposite);
-  }
+	private void createEditorComposite(Composite parent) {
+		Composite editorComposite = new Composite(parent, SWT.NONE);
+		GridLayoutFactory.create(editorComposite).noMargins().spacingV(0);
+		Preferences preferences =
+				InstanceScope.INSTANCE.getNode(IEditorPreferenceConstants.WB_BASIC_UI_PREFERENCE_NODE);
+		boolean windowbuilderBasic =
+				preferences.getBoolean(IEditorPreferenceConstants.WB_BASIC_UI, false);
+		// toolbar
+		{
+			m_toolBar = new ToolBar(editorComposite, SWT.FLAT | SWT.RIGHT);
+			//Exclude from GridData when separator is hidden
+			//if includeWindowBuilderToolbar is true the exclude method should get 'false' as parameter
+			GridDataFactory.create(m_toolBar).grabH().fill().exclude(windowbuilderBasic);
+			m_toolBar.setVisible(!windowbuilderBasic);
+		}
+		// separator to highlight toolbar
+		{
+			LineControl separator = new LineControl(editorComposite, SWT.HORIZONTAL);
+			separator.setBackground(IColorConstants.buttonDarker);
+			//Exclude from GridData when separator is hidden
+			//Separator should be hidden when toolbar is hidden.
+			GridDataFactory.create(separator).grabH().fill().exclude(windowbuilderBasic);
+			separator.setVisible(!windowbuilderBasic);
+		}
+		// create gefComposite - palette and design canvas (viewer)
+		createGEFComposite(editorComposite);
+	}
 
-  protected void createGEFComposite(Composite parent) {
-    PluginFlyoutPreferences preferences =
-        new PluginFlyoutPreferences(DesignerPlugin.getPreferences(), "design.palette");
-    preferences.initializeDefaults(
-        IFlyoutPreferences.DOCK_WEST,
-        IFlyoutPreferences.STATE_OPEN,
-        210);
-    FlyoutControlComposite gefComposite = new FlyoutControlComposite(parent, SWT.NONE, preferences);
-    GridDataFactory.create(gefComposite).grab().fill();
-    gefComposite.setTitleText("Palette");
-    gefComposite.setMinWidth(150);
-    gefComposite.setValidDockLocations(IFlyoutPreferences.DOCK_WEST | IFlyoutPreferences.DOCK_EAST);
-    gefComposite.addMenuContributor(new DesignerFlyoutMenuContributor(PaletteView.ID));
-    // create palette
-    createPalette(gefComposite);
-    // GEF viewers composite
-    createViewersComposite(gefComposite.getClientParent());
-  }
+	protected void createGEFComposite(Composite parent) {
+		PluginFlyoutPreferences preferences =
+				new PluginFlyoutPreferences(DesignerPlugin.getPreferences(), "design.palette");
+		preferences.initializeDefaults(
+				IFlyoutPreferences.DOCK_WEST,
+				IFlyoutPreferences.STATE_OPEN,
+				210);
+		FlyoutControlComposite gefComposite = new FlyoutControlComposite(parent, SWT.NONE, preferences);
+		GridDataFactory.create(gefComposite).grab().fill();
+		gefComposite.setTitleText("Palette");
+		gefComposite.setMinWidth(150);
+		gefComposite.setValidDockLocations(IFlyoutPreferences.DOCK_WEST | IFlyoutPreferences.DOCK_EAST);
+		gefComposite.addMenuContributor(new DesignerFlyoutMenuContributor(PaletteView.ID));
+		// create palette
+		createPalette(gefComposite);
+		// GEF viewers composite
+		createViewersComposite(gefComposite.getClientParent());
+	}
 
-  private void createViewersComposite(Composite parent) {
-    m_viewersComposite = new ViewersComposite(parent, SWT.NONE);
-    // prepare domain
-    EditDomain domain;
-    {
-      domain = new EditDomain();
-      domain.setExceptionHandler(m_exceptionHandler);
-    }
-    // configure main GEF viewer
-    {
-      m_viewer = m_viewersComposite.getViewer();
-      m_viewer.getRootFigure().setBackground(IColorConstants.listBackground);
-      m_viewer.setEditDomain(domain);
-      m_viewer.setEditPartFactory(EditPartFactory.INSTANCE);
-    }
-    // bind viewers
-    m_viewersComposite.bindViewers();
-    // add product layer
-    m_viewer.getRootFigure().addLayer(new Layer("product") {
-      @Override
-      protected void paintClientArea(Graphics graphics) {
-        BrandingUtils.getBranding().paintBrandingOnCanvas(getClientArea(), graphics);
-      }
-    });
-  }
+	private void createViewersComposite(Composite parent) {
+		m_viewersComposite = new ViewersComposite(parent, SWT.NONE);
+		// prepare domain
+		EditDomain domain;
+		{
+			domain = new EditDomain();
+			domain.setExceptionHandler(m_exceptionHandler);
+		}
+		// configure main GEF viewer
+		{
+			m_viewer = m_viewersComposite.getViewer();
+			m_viewer.getRootFigure().setBackground(IColorConstants.listBackground);
+			m_viewer.setEditDomain(domain);
+			m_viewer.setEditPartFactory(EditPartFactory.INSTANCE);
+		}
+		// bind viewers
+		m_viewersComposite.bindViewers();
+		// add product layer
+		m_viewer.getRootFigure().addLayer(new Layer("product") {
+			@Override
+			protected void paintClientArea(Graphics graphics) {
+				BrandingUtils.getBranding().paintBrandingOnCanvas(getClientArea(), graphics);
+			}
+		});
+	}
 
-  protected abstract void createDesignActions();
+	protected abstract void createDesignActions();
 
-  protected abstract void createDesignToolbarHelper();
+	protected abstract void createDesignToolbarHelper();
 
-  protected abstract void createPalette(FlyoutControlComposite gefComposite);
+	protected abstract void createPalette(FlyoutControlComposite gefComposite);
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Control
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean setFocus() {
-    return m_viewersComposite.setFocus();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Control
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean setFocus() {
+		return m_viewersComposite.setFocus();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Design access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * New model was parsed. We should display it.
-   */
-  public abstract void refresh(ObjectInfo rootObject, IProgressMonitor monitor);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Design access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * New model was parsed. We should display it.
+	 */
+	public abstract void refresh(ObjectInfo rootObject, IProgressMonitor monitor);
 
-  /**
-   * Model is going to be disposed. We should clean up visual presentation.
-   */
-  public void disposeDesign() {
-    // clear GEF
-    m_viewer.setInput(null);
-    // clear properties
-    if (!m_componentsComposite.isDisposed()) {
-      m_componentsComposite.setInput(m_viewer, null);
-    }
-  }
+	/**
+	 * Model is going to be disposed. We should clean up visual presentation.
+	 */
+	public void disposeDesign() {
+		// clear GEF
+		m_viewer.setInput(null);
+		// clear properties
+		if (!m_componentsComposite.isDisposed()) {
+			m_componentsComposite.setInput(m_viewer, null);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Structure/Palette reparenting access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private IExtractableControl m_extractableComponents;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Structure/Palette reparenting access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private IExtractableControl m_extractableComponents;
 
-  /**
-   * This interface allows move {@link Control} onto new parent and later restore on old parent.
-   */
-  public static interface IExtractableControl {
-    Control getControl();
+	/**
+	 * This interface allows move {@link Control} onto new parent and later restore on old parent.
+	 */
+	public static interface IExtractableControl {
+		Control getControl();
 
-    void extract(Composite newParent);
+		void extract(Composite newParent);
 
-    void restore();
-  }
-  /**
-   * Internal implementation of {@link IExtractableControl}.
-   */
-  protected static final class ExtractableControl implements IExtractableControl {
-    private final Control m_control;
-    private final Composite m_terminator;
-    private final Composite m_oldParent;
+		void restore();
+	}
+	/**
+	 * Internal implementation of {@link IExtractableControl}.
+	 */
+	protected static final class ExtractableControl implements IExtractableControl {
+		private final Control m_control;
+		private final Composite m_terminator;
+		private final Composite m_oldParent;
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public ExtractableControl(Control control, Composite terminator) {
-      m_control = control;
-      m_terminator = terminator;
-      m_oldParent = m_control.getParent();
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public ExtractableControl(Control control, Composite terminator) {
+			m_control = control;
+			m_terminator = terminator;
+			m_oldParent = m_control.getParent();
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // IExtractableControl
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public Control getControl() {
-      return m_control;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// IExtractableControl
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public Control getControl() {
+			return m_control;
+		}
 
-    @Override
-    public void extract(Composite newParent) {
-      m_control.setParent(newParent);
-      doLayout(m_oldParent);
-      newParent.layout();
-    }
+		@Override
+		public void extract(Composite newParent) {
+			m_control.setParent(newParent);
+			doLayout(m_oldParent);
+			newParent.layout();
+		}
 
-    @Override
-    public void restore() {
-      m_control.setParent(m_oldParent);
-      m_control.setVisible(true);
-      doLayout(m_oldParent);
-    }
+		@Override
+		public void restore() {
+			m_control.setParent(m_oldParent);
+			m_control.setVisible(true);
+			doLayout(m_oldParent);
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Utils
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    private void doLayout(Composite composite) {
-      if (composite != m_terminator) {
-        composite.layout();
-        doLayout(composite.getParent());
-      }
-    }
-  }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Utils
+		//
+		////////////////////////////////////////////////////////////////////////////
+		private void doLayout(Composite composite) {
+			if (composite != m_terminator) {
+				composite.layout();
+				doLayout(composite.getParent());
+			}
+		}
+	}
 
-  /**
-   * @return the {@link IExtractableControl} for accessing "Structure" {@link Control}.
-   */
-  public IExtractableControl getExtractableComponents() {
-    if (m_extractableComponents == null) {
-      m_extractableComponents = new ExtractableControl(m_componentsComposite, this);
-    }
-    return m_extractableComponents;
-  }
+	/**
+	 * @return the {@link IExtractableControl} for accessing "Structure" {@link Control}.
+	 */
+	public IExtractableControl getExtractableComponents() {
+		if (m_extractableComponents == null) {
+			m_extractableComponents = new ExtractableControl(m_componentsComposite, this);
+		}
+		return m_extractableComponents;
+	}
 
-  /**
-   * @return the {@link IExtractableControl} for accessing "Structure" {@link Control}.
-   */
-  public abstract IExtractableControl getExtractablePalette();
+	/**
+	 * @return the {@link IExtractableControl} for accessing "Structure" {@link Control}.
+	 */
+	public abstract IExtractableControl getExtractablePalette();
 
-  /**
-   * Get the graphical viewer of this composite.
-   *
-   * @return
-   */
-  public GraphicalViewer getViewer() {
-    return m_viewer;
-  }
+	/**
+	 * Get the graphical viewer of this composite.
+	 *
+	 * @return
+	 */
+	public GraphicalViewer getViewer() {
+		return m_viewer;
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/DesignPageSite.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/DesignPageSite.java
index 8dad98b7f..36dc855b7 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/DesignPageSite.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/DesignPageSite.java
@@ -25,120 +25,120 @@
  * @coverage core.editor
  */
 public abstract class DesignPageSite implements IDesignPageSite {
-  public static final DesignPageSite EMPTY = new DesignPageSite() {
-  };
+	public static final DesignPageSite EMPTY = new DesignPageSite() {
+	};
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Moves cursor to given position in Java editor.
-   */
-  @Override
-  public void showSourcePosition(int position) {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Moves cursor to given position in Java editor.
+	 */
+	@Override
+	public void showSourcePosition(int position) {
+	}
 
-  /**
-   * Moves cursor to given position in Java editor and opens Java editor.
-   */
-  @Override
-  public void openSourcePosition(int position) {
-  }
+	/**
+	 * Moves cursor to given position in Java editor and opens Java editor.
+	 */
+	@Override
+	public void openSourcePosition(int position) {
+	}
 
-  // TODO(scheglov)
-//  /**
-//   * Highlight in editor lines with visited {@link ASTNode}s.
-//   */
-//  public void highlightVisitedNodes(Collection<ASTNode> nodes) {
-//  }
-  /**
-   * Handles any unexpected {@link Exception}.
-   */
-  @Override
-  public void handleException(Throwable e) {
-  }
+	// TODO(scheglov)
+	//  /**
+	//   * Highlight in editor lines with visited {@link ASTNode}s.
+	//   */
+	//  public void highlightVisitedNodes(Collection<ASTNode> nodes) {
+	//  }
+	/**
+	 * Handles any unexpected {@link Exception}.
+	 */
+	@Override
+	public void handleException(Throwable e) {
+	}
 
-  /**
-   * Performs reparse for this editor. Note, that this is last method that should be invoked for
-   * this {@link DesignPageSite} and in this {@link ObjectInfo} hierarchy.
-   */
-  @Override
-  public void reparse() {
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Components tree
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private IComponentsTree m_componentTree;
+	/**
+	 * Performs reparse for this editor. Note, that this is last method that should be invoked for
+	 * this {@link DesignPageSite} and in this {@link ObjectInfo} hierarchy.
+	 */
+	@Override
+	public void reparse() {
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Components tree
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private IComponentsTree m_componentTree;
 
-  /**
-   * @return the {@link IComponentsTree} for accessing components tree.
-   */
-  public final IComponentsTree getComponentTree() {
-    return m_componentTree;
-  }
+	/**
+	 * @return the {@link IComponentsTree} for accessing components tree.
+	 */
+	public final IComponentsTree getComponentTree() {
+		return m_componentTree;
+	}
 
-  /**
-   * Sets the {@link TreeViewer} for accessing components tree.
-   */
-  public final void setComponentsTree(IComponentsTree componentTree) {
-    m_componentTree = componentTree;
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Helper
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Helper for accessing {@link DesignPageSite}.
-   *
-   * @author scheglov_ke
-   */
-  public static class Helper {
-    private static final String KEY = "key_DesignPageSite";
+	/**
+	 * Sets the {@link TreeViewer} for accessing components tree.
+	 */
+	public final void setComponentsTree(IComponentsTree componentTree) {
+		m_componentTree = componentTree;
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Helper
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Helper for accessing {@link DesignPageSite}.
+	 *
+	 * @author scheglov_ke
+	 */
+	public static class Helper {
+		private static final String KEY = "key_DesignPageSite";
 
-    /**
-     * @return {@link DesignPageSite} for given {@link ObjectInfo}.
-     */
-    public static DesignPageSite getSite(ObjectInfo objectInfo) {
-      return (DesignPageSite) objectInfo.getRoot().getArbitraryValue(KEY);
-    }
+		/**
+		 * @return {@link DesignPageSite} for given {@link ObjectInfo}.
+		 */
+		public static DesignPageSite getSite(ObjectInfo objectInfo) {
+			return (DesignPageSite) objectInfo.getRoot().getArbitraryValue(KEY);
+		}
 
-    /**
-     * Sets the {@link IDesignPageSite} for given {@link ObjectInfo}.
-     */
-    public static void setSite(ObjectInfo objectInfo, IDesignPageSite site) {
-      objectInfo.getRoot().putArbitraryValue(KEY, site);
-    }
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Progress
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final IProgressMonitor NULL_PROGRESS_MONITOR = new NullProgressMonitor();
-  private static IProgressMonitor m_progressMonitor;
+		/**
+		 * Sets the {@link IDesignPageSite} for given {@link ObjectInfo}.
+		 */
+		public static void setSite(ObjectInfo objectInfo, IDesignPageSite site) {
+			objectInfo.getRoot().putArbitraryValue(KEY, site);
+		}
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Progress
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final IProgressMonitor NULL_PROGRESS_MONITOR = new NullProgressMonitor();
+	private static IProgressMonitor m_progressMonitor;
 
-  /**
-   * @return the {@link IProgressMonitor} to use for displaying progress during parsing (initiated
-   *         by {@link IDesignPage}). If parsing was complete, or we run tests, then
-   *         {@link NullProgressMonitor} will be returned. Never returns <code>null</code>.
-   */
-  public static IProgressMonitor getProgressMonitor() {
-    return m_progressMonitor != null ? m_progressMonitor : NULL_PROGRESS_MONITOR;
-  }
+	/**
+	 * @return the {@link IProgressMonitor} to use for displaying progress during parsing (initiated
+	 *         by {@link IDesignPage}). If parsing was complete, or we run tests, then
+	 *         {@link NullProgressMonitor} will be returned. Never returns <code>null</code>.
+	 */
+	public static IProgressMonitor getProgressMonitor() {
+		return m_progressMonitor != null ? m_progressMonitor : NULL_PROGRESS_MONITOR;
+	}
 
-  /**
-   * Sets the {@link IProgressMonitor} to return from
-   * {@link IDesignPageSite.Helper#getProgressMonitor()}.
-   *
-   * @param progressMonitor
-   *          the {@link IProgressMonitor} to use, may be <code>null</code>.
-   */
-  public static void setProgressMonitor(IProgressMonitor progressMonitor) {
-    m_progressMonitor = progressMonitor;
-  }
+	/**
+	 * Sets the {@link IProgressMonitor} to return from
+	 * {@link IDesignPageSite.Helper#getProgressMonitor()}.
+	 *
+	 * @param progressMonitor
+	 *          the {@link IProgressMonitor} to use, may be <code>null</code>.
+	 */
+	public static void setProgressMonitor(IProgressMonitor progressMonitor) {
+		m_progressMonitor = progressMonitor;
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/DesignToolbarHelper.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/DesignToolbarHelper.java
index 90a274299..615b29e3e 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/DesignToolbarHelper.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/DesignToolbarHelper.java
@@ -44,263 +44,263 @@
  * @coverage core.editor
  */
 public class DesignToolbarHelper {
-  protected final ToolBarManager m_toolBarManager;
-  private IEditPartViewer m_viewer;
-  private ObjectInfo m_rootObject;
+	protected final ToolBarManager m_toolBarManager;
+	private IEditPartViewer m_viewer;
+	private ObjectInfo m_rootObject;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Initializes new {@link DesignToolbarHelper}.
-   *
-   * @param designPage
-   *          the target {@link DesignPage}.
-   * @param toolBar
-   *          the target {@link ToolBar}.
-   */
-  public DesignToolbarHelper(ToolBar toolBar) {
-    m_toolBarManager = new ToolBarManager(toolBar);
-    toolBar.addDisposeListener(new DisposeListener() {
-      @Override
-      public void widgetDisposed(DisposeEvent e) {
-        m_toolBarManager.dispose();
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Initializes new {@link DesignToolbarHelper}.
+	 *
+	 * @param designPage
+	 *          the target {@link DesignPage}.
+	 * @param toolBar
+	 *          the target {@link ToolBar}.
+	 */
+	public DesignToolbarHelper(ToolBar toolBar) {
+		m_toolBarManager = new ToolBarManager(toolBar);
+		toolBar.addDisposeListener(new DisposeListener() {
+			@Override
+			public void widgetDisposed(DisposeEvent e) {
+				m_toolBarManager.dispose();
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Initializes {@link IEditPartViewer}.
-   */
-  protected void initialize(IEditPartViewer viewer) {
-    m_viewer = viewer;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Initializes {@link IEditPartViewer}.
+	 */
+	protected void initialize(IEditPartViewer viewer) {
+		m_viewer = viewer;
+	}
 
-  /**
-   * Fills {@link ToolBar} with actions.
-   */
-  public void fill() {
-    IWorkbenchWindow window = DesignerPlugin.getActiveWorkbenchWindow();
-    {
-      m_toolBarManager.add(ActionFactory.UNDO.create(window));
-      m_toolBarManager.add(ActionFactory.REDO.create(window));
-      m_toolBarManager.add(new Separator());
-    }
-    {
-      m_toolBarManager.add(ActionFactory.CUT.create(window));
-      m_toolBarManager.add(ActionFactory.COPY.create(window));
-      m_toolBarManager.add(ActionFactory.PASTE.create(window));
-      m_toolBarManager.add(ActionFactory.DELETE.create(window));
-      m_toolBarManager.add(new Separator());
-    }
-  }
+	/**
+	 * Fills {@link ToolBar} with actions.
+	 */
+	public void fill() {
+		IWorkbenchWindow window = DesignerPlugin.getActiveWorkbenchWindow();
+		{
+			m_toolBarManager.add(ActionFactory.UNDO.create(window));
+			m_toolBarManager.add(ActionFactory.REDO.create(window));
+			m_toolBarManager.add(new Separator());
+		}
+		{
+			m_toolBarManager.add(ActionFactory.CUT.create(window));
+			m_toolBarManager.add(ActionFactory.COPY.create(window));
+			m_toolBarManager.add(ActionFactory.PASTE.create(window));
+			m_toolBarManager.add(ActionFactory.DELETE.create(window));
+			m_toolBarManager.add(new Separator());
+		}
+	}
 
-  protected void fill2() {
-    // dynamic actions
-    createHierarchyGroups();
-    createSelectionGroups();
-    // track dynamic actions
-    m_viewer.addSelectionChangedListener(new ISelectionChangedListener() {
-      @Override
-      public void selectionChanged(SelectionChangedEvent event) {
-        refreshDynamicActions(false, true);
-      }
-    });
-    refreshDynamicActions(false, false);
-  }
+	protected void fill2() {
+		// dynamic actions
+		createHierarchyGroups();
+		createSelectionGroups();
+		// track dynamic actions
+		m_viewer.addSelectionChangedListener(new ISelectionChangedListener() {
+			@Override
+			public void selectionChanged(SelectionChangedEvent event) {
+				refreshDynamicActions(false, true);
+			}
+		});
+		refreshDynamicActions(false, false);
+	}
 
-  /**
-   * Sets the root {@link ObjectInfo} on {@link DesignPage}.
-   */
-  public void setRoot(ObjectInfo rootObject) {
-    // delete listener from old root
-    if (m_rootObject != null) {
-      m_rootObject.removeBroadcastListener(m_objectRefreshListener);
-    }
-    // set root
-    m_rootObject = rootObject;
-    // add listener to new root
-    m_rootObject.addBroadcastListener(m_objectRefreshListener);
-    // refresh now
-    refreshDynamicActions(true, true);
-  }
+	/**
+	 * Sets the root {@link ObjectInfo} on {@link DesignPage}.
+	 */
+	public void setRoot(ObjectInfo rootObject) {
+		// delete listener from old root
+		if (m_rootObject != null) {
+			m_rootObject.removeBroadcastListener(m_objectRefreshListener);
+		}
+		// set root
+		m_rootObject = rootObject;
+		// add listener to new root
+		m_rootObject.addBroadcastListener(m_objectRefreshListener);
+		// refresh now
+		refreshDynamicActions(true, true);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Dynamic actions
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final ObjectEventListener m_objectRefreshListener = new ObjectEventListener() {
-    @Override
-    public void refreshed() throws Exception {
-      // execute in async to let GEF refresh to update selection
-      DesignerPlugin.getStandardDisplay().asyncExec(new Runnable() {
-        @Override
-        public void run() {
-          refreshDynamicActions(true, true);
-        }
-      });
-    }
-  };
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Dynamic actions
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final ObjectEventListener m_objectRefreshListener = new ObjectEventListener() {
+		@Override
+		public void refreshed() throws Exception {
+			// execute in async to let GEF refresh to update selection
+			DesignerPlugin.getStandardDisplay().asyncExec(new Runnable() {
+				@Override
+				public void run() {
+					refreshDynamicActions(true, true);
+				}
+			});
+		}
+	};
 
-  /**
-   * Refresh all dynamic actions.
-   *
-   * @param refreshHierarchy
-   *          is <code>true</code> if hierarchy actions should be refreshed.
-   * @param refreshSelection
-   *          is <code>true</code> if selection actions should be refreshed.
-   */
-  private void refreshDynamicActions(boolean refreshHierarchy, boolean refreshSelection) {
-    Composite redrawControl = m_toolBarManager.getControl().getParent();
-    redrawControl.setRedraw(false);
-    try {
-      if (refreshHierarchy) {
-        refreshHierarchyActions();
-      }
-      if (refreshSelection) {
-        refreshSelectionActions();
-      }
-      // do layout
-      m_toolBarManager.update(true);
-      redrawControl.layout();
-    } finally {
-      redrawControl.setRedraw(true);
-    }
-  }
+	/**
+	 * Refresh all dynamic actions.
+	 *
+	 * @param refreshHierarchy
+	 *          is <code>true</code> if hierarchy actions should be refreshed.
+	 * @param refreshSelection
+	 *          is <code>true</code> if selection actions should be refreshed.
+	 */
+	private void refreshDynamicActions(boolean refreshHierarchy, boolean refreshSelection) {
+		Composite redrawControl = m_toolBarManager.getControl().getParent();
+		redrawControl.setRedraw(false);
+		try {
+			if (refreshHierarchy) {
+				refreshHierarchyActions();
+			}
+			if (refreshSelection) {
+				refreshSelectionActions();
+			}
+			// do layout
+			m_toolBarManager.update(true);
+			redrawControl.layout();
+		} finally {
+			redrawControl.setRedraw(true);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Hierarchy actions
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final String HIERARCHY_ACTIONS_GROUP = "HIERARCHY_ACTIONS_GROUP";
-  private static final String HIERARCHY_ACTIONS_GROUP_END = "HIERARCHY_ACTIONS_GROUP_end";
-  private final List<IContributionItem> m_hierarchyItems = Lists.newArrayList();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Hierarchy actions
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final String HIERARCHY_ACTIONS_GROUP = "HIERARCHY_ACTIONS_GROUP";
+	private static final String HIERARCHY_ACTIONS_GROUP_END = "HIERARCHY_ACTIONS_GROUP_end";
+	private final List<IContributionItem> m_hierarchyItems = Lists.newArrayList();
 
-  /**
-   * Creates group {@link Separator}'s for adding/removing actions based on components hierarchy.
-   */
-  private void createHierarchyGroups() {
-    m_toolBarManager.add(new Separator(HIERARCHY_ACTIONS_GROUP));
-    m_toolBarManager.add(new Separator(HIERARCHY_ACTIONS_GROUP_END));
-  }
+	/**
+	 * Creates group {@link Separator}'s for adding/removing actions based on components hierarchy.
+	 */
+	private void createHierarchyGroups() {
+		m_toolBarManager.add(new Separator(HIERARCHY_ACTIONS_GROUP));
+		m_toolBarManager.add(new Separator(HIERARCHY_ACTIONS_GROUP_END));
+	}
 
-  /**
-   * Refreshes the actions based on components hierarchy.
-   */
-  private void refreshHierarchyActions() {
-    final List<IContributionItem> toRemove = Lists.newArrayList(m_hierarchyItems);
-    // add items for hierarchy
-    ExecutionUtils.runLog(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        // prepare items
-        List<Object> items;
-        {
-          items = Lists.newArrayList();
-          m_rootObject.getBroadcastObject().addHierarchyActions(items);
-        }
-        // add items to toolbar
-        m_hierarchyItems.clear();
-        for (Object object : items) {
-          // prepare contribution item
-          IContributionItem item;
-          if (object instanceof IContributionItem) {
-            item = (IContributionItem) object;
-          } else {
-            IAction action = (IAction) object;
-            item = new ActionContributionItem(action);
-          }
-          // add item
-          toRemove.remove(item);
-          m_hierarchyItems.add(item);
-          m_toolBarManager.remove(item);
-          m_toolBarManager.appendToGroup(HIERARCHY_ACTIONS_GROUP, item);
-        }
-      }
-    });
-    // remove old items
-    for (IContributionItem item : toRemove) {
-      m_toolBarManager.remove(item);
-      item.dispose();
-    }
-  }
+	/**
+	 * Refreshes the actions based on components hierarchy.
+	 */
+	private void refreshHierarchyActions() {
+		final List<IContributionItem> toRemove = Lists.newArrayList(m_hierarchyItems);
+		// add items for hierarchy
+		ExecutionUtils.runLog(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				// prepare items
+				List<Object> items;
+				{
+					items = Lists.newArrayList();
+					m_rootObject.getBroadcastObject().addHierarchyActions(items);
+				}
+				// add items to toolbar
+				m_hierarchyItems.clear();
+				for (Object object : items) {
+					// prepare contribution item
+					IContributionItem item;
+					if (object instanceof IContributionItem) {
+						item = (IContributionItem) object;
+					} else {
+						IAction action = (IAction) object;
+						item = new ActionContributionItem(action);
+					}
+					// add item
+					toRemove.remove(item);
+					m_hierarchyItems.add(item);
+					m_toolBarManager.remove(item);
+					m_toolBarManager.appendToGroup(HIERARCHY_ACTIONS_GROUP, item);
+				}
+			}
+		});
+		// remove old items
+		for (IContributionItem item : toRemove) {
+			m_toolBarManager.remove(item);
+			item.dispose();
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Selection actions
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final String SELECTION_ACTIONS_GROUP = "SELECTION_ACTIONS_GROUP";
-  private static final String SELECTION_ACTIONS_GROUP_END = "SELECTION_ACTIONS_GROUP_end";
-  private final List<IContributionItem> m_selectionItems = Lists.newArrayList();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Selection actions
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final String SELECTION_ACTIONS_GROUP = "SELECTION_ACTIONS_GROUP";
+	private static final String SELECTION_ACTIONS_GROUP_END = "SELECTION_ACTIONS_GROUP_end";
+	private final List<IContributionItem> m_selectionItems = Lists.newArrayList();
 
-  /**
-   * Creates group {@link Separator}'s for adding/removing actions based on selection in
-   * {@link #m_viewer}.
-   */
-  private void createSelectionGroups() {
-    m_toolBarManager.add(new Separator(SELECTION_ACTIONS_GROUP));
-    m_toolBarManager.add(new Separator(SELECTION_ACTIONS_GROUP_END));
-  }
+	/**
+	 * Creates group {@link Separator}'s for adding/removing actions based on selection in
+	 * {@link #m_viewer}.
+	 */
+	private void createSelectionGroups() {
+		m_toolBarManager.add(new Separator(SELECTION_ACTIONS_GROUP));
+		m_toolBarManager.add(new Separator(SELECTION_ACTIONS_GROUP_END));
+	}
 
-  /**
-   * Refreshes the actions based on selection.
-   */
-  private void refreshSelectionActions() {
-    final List<IContributionItem> toRemove = Lists.newArrayList(m_selectionItems);
-    // prepare selected ObjectInfo's
-    final List<ObjectInfo> selectedObjects = Lists.newArrayList();
-    for (EditPart editPart : m_viewer.getSelectedEditParts()) {
-      Object model = editPart.getModel();
-      if (model instanceof ObjectInfo) {
-        selectedObjects.add((ObjectInfo) model);
-      } else {
-        return;
-      }
-    }
-    // add items for selected objects
-    ExecutionUtils.runLog(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        // prepare items
-        List<Object> items;
-        {
-          items = Lists.newArrayList();
-          m_rootObject.getBroadcastObject().addSelectionActions(selectedObjects, items);
-        }
-        // don't remove items that are added again
-        m_selectionItems.clear();
-        toRemove.removeAll(items);
-        // add items to toolbar
-        for (Object object : items) {
-          // prepare contribution item
-          IContributionItem item;
-          if (object instanceof IContributionItem) {
-            item = (IContributionItem) object;
-          } else {
-            IAction action = (IAction) object;
-            item = new ActionContributionItem(action);
-          }
-          // add item
-          m_selectionItems.add(item);
-          m_toolBarManager.remove(item);
-          m_toolBarManager.appendToGroup(SELECTION_ACTIONS_GROUP, item);
-        }
-      }
-    });
-    // remove old items
-    for (IContributionItem item : toRemove) {
-      m_toolBarManager.remove(item);
-      item.dispose();
-    }
-  }
+	/**
+	 * Refreshes the actions based on selection.
+	 */
+	private void refreshSelectionActions() {
+		final List<IContributionItem> toRemove = Lists.newArrayList(m_selectionItems);
+		// prepare selected ObjectInfo's
+		final List<ObjectInfo> selectedObjects = Lists.newArrayList();
+		for (EditPart editPart : m_viewer.getSelectedEditParts()) {
+			Object model = editPart.getModel();
+			if (model instanceof ObjectInfo) {
+				selectedObjects.add((ObjectInfo) model);
+			} else {
+				return;
+			}
+		}
+		// add items for selected objects
+		ExecutionUtils.runLog(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				// prepare items
+				List<Object> items;
+				{
+					items = Lists.newArrayList();
+					m_rootObject.getBroadcastObject().addSelectionActions(selectedObjects, items);
+				}
+				// don't remove items that are added again
+				m_selectionItems.clear();
+				toRemove.removeAll(items);
+				// add items to toolbar
+				for (Object object : items) {
+					// prepare contribution item
+					IContributionItem item;
+					if (object instanceof IContributionItem) {
+						item = (IContributionItem) object;
+					} else {
+						IAction action = (IAction) object;
+						item = new ActionContributionItem(action);
+					}
+					// add item
+					m_selectionItems.add(item);
+					m_toolBarManager.remove(item);
+					m_toolBarManager.appendToGroup(SELECTION_ACTIONS_GROUP, item);
+				}
+			}
+		});
+		// remove old items
+		for (IContributionItem item : toRemove) {
+			m_toolBarManager.remove(item);
+			item.dispose();
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/DesignerFlyoutMenuContributor.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/DesignerFlyoutMenuContributor.java
index b4ce7197f..663570996 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/DesignerFlyoutMenuContributor.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/DesignerFlyoutMenuContributor.java
@@ -25,34 +25,34 @@
  * @coverage core.editor
  */
 public final class DesignerFlyoutMenuContributor implements IFlyoutMenuContributor {
-  private final String m_viewId;
+	private final String m_viewId;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DesignerFlyoutMenuContributor(String viewId) {
-    m_viewId = viewId;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DesignerFlyoutMenuContributor(String viewId) {
+		m_viewId = viewId;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IFlyoutMenuContributor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void contribute(IMenuManager manager) {
-    manager.add(new Action("Extract as view") {
-      @Override
-      public void run() {
-        ExecutionUtils.runLog(new RunnableEx() {
-          @Override
-          public void run() throws Exception {
-            DesignerPlugin.getActivePage().showView(m_viewId);
-          }
-        });
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IFlyoutMenuContributor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void contribute(IMenuManager manager) {
+		manager.add(new Action("Extract as view") {
+			@Override
+			public void run() {
+				ExecutionUtils.runLog(new RunnableEx() {
+					@Override
+					public void run() throws Exception {
+						DesignerPlugin.getActivePage().showView(m_viewId);
+					}
+				});
+			}
+		});
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/Messages.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/Messages.java
index 62061a316..7f62146d8 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/Messages.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/Messages.java
@@ -3,252 +3,252 @@
 import org.eclipse.osgi.util.NLS;
 
 public class Messages extends NLS {
-  public static String BadNodesErrorPage_nodeGroup;
-  public static String BadNodesErrorPage_nodesGroup;
-  public static String BadNodesParserErrorPage_title;
-  public static String BadNodesRefreshErrorPage_title;
-  private static final String BUNDLE_NAME = "org.eclipse.wb.internal.core.editor.messages"; //$NON-NLS-1$
-  public static String CategoryAbstractDialog_descriptionLabel;
-  public static String CategoryAbstractDialog_idLabel;
-  public static String CategoryAbstractDialog_message;
-  public static String CategoryAbstractDialog_nameLabel;
-  public static String CategoryAbstractDialog_stateLabel;
-  public static String CategoryAbstractDialog_stateOpen;
-  public static String CategoryAbstractDialog_stateVisible;
-  public static String CategoryAbstractDialog_validateEmptyName;
-  public static String CategoryAddDialog_message;
-  public static String CategoryAddDialog_targetCategoryBefore;
-  public static String CategoryAddDialog_targetCategoryEnd;
-  public static String CategoryAddDialog_targetCategoryLabel;
-  public static String CategoryAddDialog_title;
-  public static String CategoryEditDialog_message;
-  public static String CategoryEditDialog_title;
-  public static String ChooseComponentEntryInfo_customCategoryDescription;
-  public static String ChooseComponentEntryInfo_description;
-  public static String ChooseComponentEntryInfo_name;
-  public static String ChooseComponentEntryInfo_newComponentDescription;
-  public static String ChooseComponentEntryInfo_unableToLoadMessage;
-  public static String ChooseComponentEntryInfo_unableToLoadTest;
-  public static String ComponentAbstractDialog_classButton;
-  public static String ComponentAbstractDialog_classLabel;
-  public static String ComponentAbstractDialog_descriptionLabel;
-  public static String ComponentAbstractDialog_idLabel;
-  public static String ComponentAbstractDialog_message;
-  public static String ComponentAbstractDialog_nameLabel;
-  public static String ComponentAbstractDialog_validateEmptyClass;
-  public static String ComponentAbstractDialog_validateEmptyName;
-  public static String ComponentAbstractDialog_visibleFlag;
-  public static String ComponentAddDialog_category;
-  public static String ComponentAddDialog_message;
-  public static String ComponentAddDialog_title;
-  public static String ComponentEditDialog_message;
-  public static String ComponentEditDialog_title;
-  public static String ComponentEntryInfo_abstractMessage;
-  public static String ComponentEntryInfo_abstractTitle;
-  public static String ComponentsPropertiesPage_conversionNotSupported;
-  public static String ComponentsPropertiesPage_convertFieldToLocalAction;
-  public static String ComponentsPropertiesPage_convertLocalToFieldAction;
-  public static String ComponentsPropertiesPage_goDefinition;
-  public static String ComponentsPropertiesPage_markAsAdvancedAction;
-  public static String ComponentsPropertiesPage_markAsNormalAction;
-  public static String ComponentsPropertiesPage_markAsPreferredAction;
-  public static String ComponentsPropertiesPage_restoreDefaultAction;
-  public static String ComponentsPropertiesPage_showAdvancedAction;
-  public static String ComponentsPropertiesPage_showEventsAction;
-  public static String ComponentsPropertiesPage_useDefaultCategoryAction;
-  public static String ComponentsTreePage_collapseAllAction;
-  public static String ComponentsTreePage_expandAllAction;
-  public static String DesignComponentsComposite_componentsTitle;
-  public static String DesignComponentsComposite_propertiesTitle;
-  public static String DesignerPalettePopupActions_addCategoryAction;
-  public static String DesignerPalettePopupActions_addComponentAction;
-  public static String DesignerPalettePopupActions_addInstanceFactoryAction;
-  public static String DesignerPalettePopupActions_addStaticFactoryAction;
-  public static String DesignerPalettePopupActions_editAction;
-  public static String DesignerPalettePopupActions_exportAction;
-  public static String DesignerPalettePopupActions_factoryMultipleAction;
-  public static String DesignerPalettePopupActions_factorySingleAction;
-  public static String DesignerPalettePopupActions_importAction;
-  public static String DesignerPalettePopupActions_importJarAction;
-  public static String DesignerPalettePopupActions_managerAction;
-  public static String DesignerPalettePopupActions_paletteFilterName;
-  public static String DesignerPalettePopupActions_removeAction;
-  public static String DesignerPalettePopupActions_removeCategoryMessage;
-  public static String DesignerPalettePopupActions_removeCategoryTitle;
-  public static String DesignerPalettePopupActions_removeEntryMessage;
-  public static String DesignerPalettePopupActions_removeEntryTitle;
-  public static String DesignerPalettePopupActions_restoreDefaultsAction;
-  public static String DesignerPalettePopupActions_restoreDefaultsMessage;
-  public static String DesignerPalettePopupActions_restoreDefaultsTitle;
-  public static String DesignerPalettePopupActions_settingsAction;
-  public static String ErrorEntryInfo_unexpectedDescription;
-  public static String ErrorEntryInfo_unexpectedTitle;
-  public static String ErrorsAction_toolTip;
-  public static String ErrorsDialog_message;
-  public static String ErrorsDialog_shellTitle;
-  public static String ErrorsDialog_supportButton;
-  public static String ErrorsDialog_title;
-  public static String ExceptionComposite_goProblemButton;
-  public static String ExceptionComposite_message;
-  public static String ExceptionComposite_reparseButton;
-  public static String ExceptionComposite_reportButton;
-  public static String ExceptionComposite_switchButton;
-  public static String ExceptionComposite_toProblemButton;
-  public static String FactoriesAddDialog_categoryLabel;
-  public static String FactoriesAddDialog_classChoose;
-  public static String FactoriesAddDialog_classLabel;
-  public static String FactoriesAddDialog_deselectAllButton;
-  public static String FactoriesAddDialog_message;
-  public static String FactoriesAddDialog_methodsLabel;
-  public static String FactoriesAddDialog_selectAllButton;
-  public static String FactoriesAddDialog_shellTitleInstance;
-  public static String FactoriesAddDialog_shellTitleStatic;
-  public static String FactoriesAddDialog_titleInstance;
-  public static String FactoriesAddDialog_titleStatic;
-  public static String FactoriesAddDialog_validateEmptyClass;
-  public static String FactoriesAddDialog_validateNoMethods;
-  public static String FactoriesAddDialog_validateNoMethodSelection;
-  public static String FactoryAbstractDialog_classChoose;
-  public static String FactoryAbstractDialog_classLabel;
-  public static String FactoryAbstractDialog_descriptionLabel;
-  public static String FactoryAbstractDialog_message;
-  public static String FactoryAbstractDialog_methodChoose;
-  public static String FactoryAbstractDialog_methodDialogMessage;
-  public static String FactoryAbstractDialog_methodDialogTitle;
-  public static String FactoryAbstractDialog_methodLabel;
-  public static String FactoryAbstractDialog_nameLabel;
-  public static String FactoryAbstractDialog_validateEmptyClass;
-  public static String FactoryAbstractDialog_validateEmptyMethod;
-  public static String FactoryAbstractDialog_validateEmptyName;
-  public static String FactoryAbstractDialog_validateNoMethods;
-  public static String FactoryAbstractDialog_visibleFlag;
-  public static String FactoryAddDialog_categoryLabel;
-  public static String FactoryAddDialog_messageInstance;
-  public static String FactoryAddDialog_messageStatic;
-  public static String FactoryAddDialog_titleInstance;
-  public static String FactoryAddDialog_titleStatic;
-  public static String FactoryEditDialog_messageInstance;
-  public static String FactoryEditDialog_messageStatic;
-  public static String FactoryEditDialog_titleInstance;
-  public static String FactoryEditDialog_titleStatic;
-  public static String ImportArchiveDialog_archiveLabel;
-  public static String ImportArchiveDialog_browseToolTip;
-  public static String ImportArchiveDialog_categoryLabel;
-  public static String ImportArchiveDialog_categoryNew;
-  public static String ImportArchiveDialog_choosefromWorkspaceMessage;
-  public static String ImportArchiveDialog_classesColumn;
-  public static String ImportArchiveDialog_classpathItem;
-  public static String ImportArchiveDialog_classpathJarSelection;
-  public static String ImportArchiveDialog_deselectAllButton;
-  public static String ImportArchiveDialog_fileSystemItem;
-  public static String ImportArchiveDialog_hasManifestMessage;
-  public static String ImportArchiveDialog_hasManifestTitle;
-  public static String ImportArchiveDialog_ignoreManifestFlag;
-  public static String ImportArchiveDialog_JarNotInClasspathMessage;
-  public static String ImportArchiveDialog_JarNotInClasspathTitle;
-  public static String ImportArchiveDialog_message;
-  public static String ImportArchiveDialog_newCategoryDescription;
-  public static String ImportArchiveDialog_newComponentDescription;
-  public static String ImportArchiveDialog_selectAllButton;
-  public static String ImportArchiveDialog_shellTitle;
-  public static String ImportArchiveDialog_title;
-  public static String ImportArchiveDialog_validateEmptyCategoryName;
-  public static String ImportArchiveDialog_validateSelectArchive;
-  public static String ImportArchiveDialog_validateSelectClass;
-  public static String ImportArchiveDialog_workspaceItem;
-  public static String ImportArchiveDialog_workspaceJarSelection;
-  public static String InstanceFactoryEntryInfo_selectFactoryMessage;
-  public static String InstanceFactoryEntryInfo_selectFactoryTitle;
-  public static String LayoutAssistantAction_text;
-  public static String LayoutAssistantAction_toolTip;
-  public static String LayoutAssistantSupport_layoutPage;
-  public static String LayoutAssistantSupport_parentLayoutPage;
-  public static String LayoutAssistantWindow_emptySelection;
-  public static String LayoutAssistantWindow_infoTab;
-  public static String LayoutAssistantWindow_noAssistanceForSelection;
-  public static String LayoutAssistantWindow_notObjectSelected;
-  public static String LayoutAssistantWindow_singleParent;
-  public static String LayoutAssistantWindow_title;
-  public static String MarqueeSelectionToolEntryInfo_name;
-  public static String MultipleConstructorsComposite_listLabel;
-  public static String MultipleConstructorsComposite_switchButton;
-  public static String MultipleConstructorsComposite_useButton;
-  public static String NoEntryPointComposite_switchToCodeButton;
-  public static String NoEntryPointComposite_useButton;
-  public static String NoEntryPointComposite_viewerLabel;
-  public static String PaletteManagerDialog_addCategoryButton;
-  public static String PaletteManagerDialog_addComponentAction;
-  public static String PaletteManagerDialog_addEntryButton;
-  public static String PaletteManagerDialog_addFactorySeveral;
-  public static String PaletteManagerDialog_addFactorySeveralFactories;
-  public static String PaletteManagerDialog_addFactorySeveralInstance;
-  public static String PaletteManagerDialog_addFactorySeveralStatic;
-  public static String PaletteManagerDialog_addFactorySingle;
-  public static String PaletteManagerDialog_addFactorySingleFactory;
-  public static String PaletteManagerDialog_addFactorySingleInstance;
-  public static String PaletteManagerDialog_addFactorySingleStatic;
-  public static String PaletteManagerDialog_clearItem;
-  public static String PaletteManagerDialog_collapseAllButton;
-  public static String PaletteManagerDialog_downButton;
-  public static String PaletteManagerDialog_editButton;
-  public static String PaletteManagerDialog_expandAllButton;
-  public static String PaletteManagerDialog_importJarButton;
-  public static String PaletteManagerDialog_message;
-  public static String PaletteManagerDialog_removeButton;
-  public static String PaletteManagerDialog_removeMessage;
-  public static String PaletteManagerDialog_removeTitle;
-  public static String PaletteManagerDialog_shellTitle;
-  public static String PaletteManagerDialog_title;
-  public static String PaletteManagerDialog_upButton;
-  public static String PalettePreferencesDialog_categoryFontChoose;
-  public static String PalettePreferencesDialog_categoryFontLabel;
-  public static String PalettePreferencesDialog_categoryFontSystem;
-  public static String PalettePreferencesDialog_columns_1;
-  public static String PalettePreferencesDialog_columns_2;
-  public static String PalettePreferencesDialog_columns_3;
-  public static String PalettePreferencesDialog_columns_4;
-  public static String PalettePreferencesDialog_columns_5;
-  public static String PalettePreferencesDialog_layouts_1;
-  public static String PalettePreferencesDialog_layouts_2;
-  public static String PalettePreferencesDialog_layouts_3;
-  public static String PalettePreferencesDialog_layouts_4;
-  public static String PalettePreferencesDialog_entryFontChoose;
-  public static String PalettePreferencesDialog_entryFontLabel;
-  public static String PalettePreferencesDialog_entryFontSystem;
-  public static String PalettePreferencesDialog_message;
-  public static String PalettePreferencesDialog_minColumnsNumber;
-  public static String PalettePreferencesDialog_onlyIcons;
-  public static String PalettePreferencesDialog_shellTitle;
-  public static String PalettePreferencesDialog_title;
-  public static String ProxySettingDialog_addressLabel;
-  public static String ProxySettingDialog_arrAddressMessage;
-  public static String ProxySettingDialog_errAddressTitle;
-  public static String ProxySettingDialog_errPortMessage;
-  public static String ProxySettingDialog_errPortTitle;
-  public static String ProxySettingDialog_groupText;
-  public static String ProxySettingDialog_hint;
-  public static String ProxySettingDialog_portLabel;
-  public static String ProxySettingDialog_title;
-  public static String SelectionToolEntryInfo_name;
-  public static String SourcePage_name;
-  public static String TabOrderToolEntryInfo_description;
-  public static String TabOrderToolEntryInfo_name;
-  public static String TypeParameterComposite_subTypeMessage;
-  public static String TypeParameterComposite_subTypeTitle;
-  public static String TypeParametersDialog_message;
-  public static String TypeParametersDialog_shellTitle;
-  public static String TypeParametersDialog_title;
-  public static String WarningComposite_goProblemButton;
-  public static String WarningComposite_refreshButton;
-  public static String WarningComposite_switchButton;
-  public static String WarningsErrorPage_listLabel;
-  public static String WarningsErrorPage_singleLabel;
-  public static String WarningsErrorPage_title;
-  static {
-    // initialize resource bundle
-    NLS.initializeMessages(BUNDLE_NAME, Messages.class);
-  }
+	public static String BadNodesErrorPage_nodeGroup;
+	public static String BadNodesErrorPage_nodesGroup;
+	public static String BadNodesParserErrorPage_title;
+	public static String BadNodesRefreshErrorPage_title;
+	private static final String BUNDLE_NAME = "org.eclipse.wb.internal.core.editor.messages"; //$NON-NLS-1$
+	public static String CategoryAbstractDialog_descriptionLabel;
+	public static String CategoryAbstractDialog_idLabel;
+	public static String CategoryAbstractDialog_message;
+	public static String CategoryAbstractDialog_nameLabel;
+	public static String CategoryAbstractDialog_stateLabel;
+	public static String CategoryAbstractDialog_stateOpen;
+	public static String CategoryAbstractDialog_stateVisible;
+	public static String CategoryAbstractDialog_validateEmptyName;
+	public static String CategoryAddDialog_message;
+	public static String CategoryAddDialog_targetCategoryBefore;
+	public static String CategoryAddDialog_targetCategoryEnd;
+	public static String CategoryAddDialog_targetCategoryLabel;
+	public static String CategoryAddDialog_title;
+	public static String CategoryEditDialog_message;
+	public static String CategoryEditDialog_title;
+	public static String ChooseComponentEntryInfo_customCategoryDescription;
+	public static String ChooseComponentEntryInfo_description;
+	public static String ChooseComponentEntryInfo_name;
+	public static String ChooseComponentEntryInfo_newComponentDescription;
+	public static String ChooseComponentEntryInfo_unableToLoadMessage;
+	public static String ChooseComponentEntryInfo_unableToLoadTest;
+	public static String ComponentAbstractDialog_classButton;
+	public static String ComponentAbstractDialog_classLabel;
+	public static String ComponentAbstractDialog_descriptionLabel;
+	public static String ComponentAbstractDialog_idLabel;
+	public static String ComponentAbstractDialog_message;
+	public static String ComponentAbstractDialog_nameLabel;
+	public static String ComponentAbstractDialog_validateEmptyClass;
+	public static String ComponentAbstractDialog_validateEmptyName;
+	public static String ComponentAbstractDialog_visibleFlag;
+	public static String ComponentAddDialog_category;
+	public static String ComponentAddDialog_message;
+	public static String ComponentAddDialog_title;
+	public static String ComponentEditDialog_message;
+	public static String ComponentEditDialog_title;
+	public static String ComponentEntryInfo_abstractMessage;
+	public static String ComponentEntryInfo_abstractTitle;
+	public static String ComponentsPropertiesPage_conversionNotSupported;
+	public static String ComponentsPropertiesPage_convertFieldToLocalAction;
+	public static String ComponentsPropertiesPage_convertLocalToFieldAction;
+	public static String ComponentsPropertiesPage_goDefinition;
+	public static String ComponentsPropertiesPage_markAsAdvancedAction;
+	public static String ComponentsPropertiesPage_markAsNormalAction;
+	public static String ComponentsPropertiesPage_markAsPreferredAction;
+	public static String ComponentsPropertiesPage_restoreDefaultAction;
+	public static String ComponentsPropertiesPage_showAdvancedAction;
+	public static String ComponentsPropertiesPage_showEventsAction;
+	public static String ComponentsPropertiesPage_useDefaultCategoryAction;
+	public static String ComponentsTreePage_collapseAllAction;
+	public static String ComponentsTreePage_expandAllAction;
+	public static String DesignComponentsComposite_componentsTitle;
+	public static String DesignComponentsComposite_propertiesTitle;
+	public static String DesignerPalettePopupActions_addCategoryAction;
+	public static String DesignerPalettePopupActions_addComponentAction;
+	public static String DesignerPalettePopupActions_addInstanceFactoryAction;
+	public static String DesignerPalettePopupActions_addStaticFactoryAction;
+	public static String DesignerPalettePopupActions_editAction;
+	public static String DesignerPalettePopupActions_exportAction;
+	public static String DesignerPalettePopupActions_factoryMultipleAction;
+	public static String DesignerPalettePopupActions_factorySingleAction;
+	public static String DesignerPalettePopupActions_importAction;
+	public static String DesignerPalettePopupActions_importJarAction;
+	public static String DesignerPalettePopupActions_managerAction;
+	public static String DesignerPalettePopupActions_paletteFilterName;
+	public static String DesignerPalettePopupActions_removeAction;
+	public static String DesignerPalettePopupActions_removeCategoryMessage;
+	public static String DesignerPalettePopupActions_removeCategoryTitle;
+	public static String DesignerPalettePopupActions_removeEntryMessage;
+	public static String DesignerPalettePopupActions_removeEntryTitle;
+	public static String DesignerPalettePopupActions_restoreDefaultsAction;
+	public static String DesignerPalettePopupActions_restoreDefaultsMessage;
+	public static String DesignerPalettePopupActions_restoreDefaultsTitle;
+	public static String DesignerPalettePopupActions_settingsAction;
+	public static String ErrorEntryInfo_unexpectedDescription;
+	public static String ErrorEntryInfo_unexpectedTitle;
+	public static String ErrorsAction_toolTip;
+	public static String ErrorsDialog_message;
+	public static String ErrorsDialog_shellTitle;
+	public static String ErrorsDialog_supportButton;
+	public static String ErrorsDialog_title;
+	public static String ExceptionComposite_goProblemButton;
+	public static String ExceptionComposite_message;
+	public static String ExceptionComposite_reparseButton;
+	public static String ExceptionComposite_reportButton;
+	public static String ExceptionComposite_switchButton;
+	public static String ExceptionComposite_toProblemButton;
+	public static String FactoriesAddDialog_categoryLabel;
+	public static String FactoriesAddDialog_classChoose;
+	public static String FactoriesAddDialog_classLabel;
+	public static String FactoriesAddDialog_deselectAllButton;
+	public static String FactoriesAddDialog_message;
+	public static String FactoriesAddDialog_methodsLabel;
+	public static String FactoriesAddDialog_selectAllButton;
+	public static String FactoriesAddDialog_shellTitleInstance;
+	public static String FactoriesAddDialog_shellTitleStatic;
+	public static String FactoriesAddDialog_titleInstance;
+	public static String FactoriesAddDialog_titleStatic;
+	public static String FactoriesAddDialog_validateEmptyClass;
+	public static String FactoriesAddDialog_validateNoMethods;
+	public static String FactoriesAddDialog_validateNoMethodSelection;
+	public static String FactoryAbstractDialog_classChoose;
+	public static String FactoryAbstractDialog_classLabel;
+	public static String FactoryAbstractDialog_descriptionLabel;
+	public static String FactoryAbstractDialog_message;
+	public static String FactoryAbstractDialog_methodChoose;
+	public static String FactoryAbstractDialog_methodDialogMessage;
+	public static String FactoryAbstractDialog_methodDialogTitle;
+	public static String FactoryAbstractDialog_methodLabel;
+	public static String FactoryAbstractDialog_nameLabel;
+	public static String FactoryAbstractDialog_validateEmptyClass;
+	public static String FactoryAbstractDialog_validateEmptyMethod;
+	public static String FactoryAbstractDialog_validateEmptyName;
+	public static String FactoryAbstractDialog_validateNoMethods;
+	public static String FactoryAbstractDialog_visibleFlag;
+	public static String FactoryAddDialog_categoryLabel;
+	public static String FactoryAddDialog_messageInstance;
+	public static String FactoryAddDialog_messageStatic;
+	public static String FactoryAddDialog_titleInstance;
+	public static String FactoryAddDialog_titleStatic;
+	public static String FactoryEditDialog_messageInstance;
+	public static String FactoryEditDialog_messageStatic;
+	public static String FactoryEditDialog_titleInstance;
+	public static String FactoryEditDialog_titleStatic;
+	public static String ImportArchiveDialog_archiveLabel;
+	public static String ImportArchiveDialog_browseToolTip;
+	public static String ImportArchiveDialog_categoryLabel;
+	public static String ImportArchiveDialog_categoryNew;
+	public static String ImportArchiveDialog_choosefromWorkspaceMessage;
+	public static String ImportArchiveDialog_classesColumn;
+	public static String ImportArchiveDialog_classpathItem;
+	public static String ImportArchiveDialog_classpathJarSelection;
+	public static String ImportArchiveDialog_deselectAllButton;
+	public static String ImportArchiveDialog_fileSystemItem;
+	public static String ImportArchiveDialog_hasManifestMessage;
+	public static String ImportArchiveDialog_hasManifestTitle;
+	public static String ImportArchiveDialog_ignoreManifestFlag;
+	public static String ImportArchiveDialog_JarNotInClasspathMessage;
+	public static String ImportArchiveDialog_JarNotInClasspathTitle;
+	public static String ImportArchiveDialog_message;
+	public static String ImportArchiveDialog_newCategoryDescription;
+	public static String ImportArchiveDialog_newComponentDescription;
+	public static String ImportArchiveDialog_selectAllButton;
+	public static String ImportArchiveDialog_shellTitle;
+	public static String ImportArchiveDialog_title;
+	public static String ImportArchiveDialog_validateEmptyCategoryName;
+	public static String ImportArchiveDialog_validateSelectArchive;
+	public static String ImportArchiveDialog_validateSelectClass;
+	public static String ImportArchiveDialog_workspaceItem;
+	public static String ImportArchiveDialog_workspaceJarSelection;
+	public static String InstanceFactoryEntryInfo_selectFactoryMessage;
+	public static String InstanceFactoryEntryInfo_selectFactoryTitle;
+	public static String LayoutAssistantAction_text;
+	public static String LayoutAssistantAction_toolTip;
+	public static String LayoutAssistantSupport_layoutPage;
+	public static String LayoutAssistantSupport_parentLayoutPage;
+	public static String LayoutAssistantWindow_emptySelection;
+	public static String LayoutAssistantWindow_infoTab;
+	public static String LayoutAssistantWindow_noAssistanceForSelection;
+	public static String LayoutAssistantWindow_notObjectSelected;
+	public static String LayoutAssistantWindow_singleParent;
+	public static String LayoutAssistantWindow_title;
+	public static String MarqueeSelectionToolEntryInfo_name;
+	public static String MultipleConstructorsComposite_listLabel;
+	public static String MultipleConstructorsComposite_switchButton;
+	public static String MultipleConstructorsComposite_useButton;
+	public static String NoEntryPointComposite_switchToCodeButton;
+	public static String NoEntryPointComposite_useButton;
+	public static String NoEntryPointComposite_viewerLabel;
+	public static String PaletteManagerDialog_addCategoryButton;
+	public static String PaletteManagerDialog_addComponentAction;
+	public static String PaletteManagerDialog_addEntryButton;
+	public static String PaletteManagerDialog_addFactorySeveral;
+	public static String PaletteManagerDialog_addFactorySeveralFactories;
+	public static String PaletteManagerDialog_addFactorySeveralInstance;
+	public static String PaletteManagerDialog_addFactorySeveralStatic;
+	public static String PaletteManagerDialog_addFactorySingle;
+	public static String PaletteManagerDialog_addFactorySingleFactory;
+	public static String PaletteManagerDialog_addFactorySingleInstance;
+	public static String PaletteManagerDialog_addFactorySingleStatic;
+	public static String PaletteManagerDialog_clearItem;
+	public static String PaletteManagerDialog_collapseAllButton;
+	public static String PaletteManagerDialog_downButton;
+	public static String PaletteManagerDialog_editButton;
+	public static String PaletteManagerDialog_expandAllButton;
+	public static String PaletteManagerDialog_importJarButton;
+	public static String PaletteManagerDialog_message;
+	public static String PaletteManagerDialog_removeButton;
+	public static String PaletteManagerDialog_removeMessage;
+	public static String PaletteManagerDialog_removeTitle;
+	public static String PaletteManagerDialog_shellTitle;
+	public static String PaletteManagerDialog_title;
+	public static String PaletteManagerDialog_upButton;
+	public static String PalettePreferencesDialog_categoryFontChoose;
+	public static String PalettePreferencesDialog_categoryFontLabel;
+	public static String PalettePreferencesDialog_categoryFontSystem;
+	public static String PalettePreferencesDialog_columns_1;
+	public static String PalettePreferencesDialog_columns_2;
+	public static String PalettePreferencesDialog_columns_3;
+	public static String PalettePreferencesDialog_columns_4;
+	public static String PalettePreferencesDialog_columns_5;
+	public static String PalettePreferencesDialog_layouts_1;
+	public static String PalettePreferencesDialog_layouts_2;
+	public static String PalettePreferencesDialog_layouts_3;
+	public static String PalettePreferencesDialog_layouts_4;
+	public static String PalettePreferencesDialog_entryFontChoose;
+	public static String PalettePreferencesDialog_entryFontLabel;
+	public static String PalettePreferencesDialog_entryFontSystem;
+	public static String PalettePreferencesDialog_message;
+	public static String PalettePreferencesDialog_minColumnsNumber;
+	public static String PalettePreferencesDialog_onlyIcons;
+	public static String PalettePreferencesDialog_shellTitle;
+	public static String PalettePreferencesDialog_title;
+	public static String ProxySettingDialog_addressLabel;
+	public static String ProxySettingDialog_arrAddressMessage;
+	public static String ProxySettingDialog_errAddressTitle;
+	public static String ProxySettingDialog_errPortMessage;
+	public static String ProxySettingDialog_errPortTitle;
+	public static String ProxySettingDialog_groupText;
+	public static String ProxySettingDialog_hint;
+	public static String ProxySettingDialog_portLabel;
+	public static String ProxySettingDialog_title;
+	public static String SelectionToolEntryInfo_name;
+	public static String SourcePage_name;
+	public static String TabOrderToolEntryInfo_description;
+	public static String TabOrderToolEntryInfo_name;
+	public static String TypeParameterComposite_subTypeMessage;
+	public static String TypeParameterComposite_subTypeTitle;
+	public static String TypeParametersDialog_message;
+	public static String TypeParametersDialog_shellTitle;
+	public static String TypeParametersDialog_title;
+	public static String WarningComposite_goProblemButton;
+	public static String WarningComposite_refreshButton;
+	public static String WarningComposite_switchButton;
+	public static String WarningsErrorPage_listLabel;
+	public static String WarningsErrorPage_singleLabel;
+	public static String WarningsErrorPage_title;
+	static {
+		// initialize resource bundle
+		NLS.initializeMessages(BUNDLE_NAME, Messages.class);
+	}
 
-  private Messages() {
-  }
+	private Messages() {
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/ViewersComposite.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/ViewersComposite.java
index 82199f339..3f1ae5969 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/ViewersComposite.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/ViewersComposite.java
@@ -34,124 +34,124 @@
  * @coverage core.editor
  */
 public final class ViewersComposite extends Composite {
-  private static final int HEADER_SIZE = 15;
-  private final GraphicalViewer m_viewer;
-  private final HeaderGraphicalViewer m_horizontalViewer;
-  private final HeaderGraphicalViewer m_verticalViewer;
-  private HeadersContainerEditPart m_headersContainerHorizontal;
-  private HeadersContainerEditPart m_headersContainerVertical;
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Composite
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ViewersComposite(Composite parent, int style) {
-    super(parent, style);
-    // create header viewers
-    m_horizontalViewer = new HeaderGraphicalViewer(this, true);
-    m_verticalViewer = new HeaderGraphicalViewer(this, false);
-    m_viewer = new GraphicalViewer(this);
-    // add listeners
-    {
-      addListener(SWT.Resize, new Listener() {
-        @Override
-        public void handleEvent(Event event) {
-          layout();
-        }
-      });
-      addListener(SWT.Paint, new Listener() {
-        @Override
-        public void handleEvent(Event event) {
-          GC gc = event.gc;
-          gc.setForeground(IColorConstants.buttonDarker);
-          //
-          Rectangle clientArea = getClientArea();
-          gc.drawLine(HEADER_SIZE, HEADER_SIZE, clientArea.width, HEADER_SIZE);
-          gc.drawLine(HEADER_SIZE, HEADER_SIZE, HEADER_SIZE, clientArea.height);
-        }
-      });
-    }
-    // set context menu for headers
-    {
-      m_horizontalViewer.setContextMenu(new HeadersContextMenuProvider(m_horizontalViewer));
-      m_verticalViewer.setContextMenu(new HeadersContextMenuProvider(m_verticalViewer));
-    }
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Binds headers and main {@link GraphicalViewer}'s.
-   */
-  public void bindViewers() {
-    HeadersEditPartFactory editPartFactory = new HeadersEditPartFactory();
-    //
-    m_horizontalViewer.setMainViewer(m_viewer);
-    m_horizontalViewer.setEditPartFactory(editPartFactory);
-    m_headersContainerHorizontal = new HeadersContainerEditPart(m_viewer, true);
-    m_horizontalViewer.setInput(m_headersContainerHorizontal);
-    //
-    m_verticalViewer.setMainViewer(m_viewer);
-    m_verticalViewer.setEditPartFactory(editPartFactory);
-    m_headersContainerVertical = new HeadersContainerEditPart(m_viewer, false);
-    m_verticalViewer.setInput(m_headersContainerVertical);
-  }
-  /**
-   * Sets the root {@link ObjectInfo}.
-   */
-  public void setRoot(ObjectInfo rootObject) {
-    rootObject.addBroadcastListener(new ObjectEventListener() {
-      @Override
-      public void refreshed2() throws Exception {
-        m_headersContainerHorizontal.refreshHeaders();
-        m_headersContainerVertical.refreshHeaders();
-      }
-    });
-  }
-  /**
-   * @return the main {@link GraphicalViewer}
-   */
-  public GraphicalViewer getViewer() {
-    return m_viewer;
-  }
-  /**
-   * @return the horizontal {@link HeaderGraphicalViewer}
-   */
-  public HeaderGraphicalViewer getHorizontalViewer() {
-    return m_horizontalViewer;
-  }
-  /**
-   * @return the vertical {@link HeaderGraphicalViewer}.
-   */
-  public HeaderGraphicalViewer getVerticalViewer() {
-    return m_verticalViewer;
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Control
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean setFocus() {
-    return m_viewer.getControl().setFocus();
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Layout
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void layout() {
-    Rectangle clientArea = getClientArea();
-    int x = HEADER_SIZE + 1;
-    int y = HEADER_SIZE + 1;
-    int width = clientArea.width - x;
-    int height = clientArea.height - y;
-    //
-    m_horizontalViewer.getControl().setBounds(x, 0, width, HEADER_SIZE);
-    m_verticalViewer.getControl().setBounds(0, y, HEADER_SIZE, height);
-    m_viewer.getControl().setBounds(x, y, width, height);
-  }
+	private static final int HEADER_SIZE = 15;
+	private final GraphicalViewer m_viewer;
+	private final HeaderGraphicalViewer m_horizontalViewer;
+	private final HeaderGraphicalViewer m_verticalViewer;
+	private HeadersContainerEditPart m_headersContainerHorizontal;
+	private HeadersContainerEditPart m_headersContainerVertical;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Composite
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ViewersComposite(Composite parent, int style) {
+		super(parent, style);
+		// create header viewers
+		m_horizontalViewer = new HeaderGraphicalViewer(this, true);
+		m_verticalViewer = new HeaderGraphicalViewer(this, false);
+		m_viewer = new GraphicalViewer(this);
+		// add listeners
+		{
+			addListener(SWT.Resize, new Listener() {
+				@Override
+				public void handleEvent(Event event) {
+					layout();
+				}
+			});
+			addListener(SWT.Paint, new Listener() {
+				@Override
+				public void handleEvent(Event event) {
+					GC gc = event.gc;
+					gc.setForeground(IColorConstants.buttonDarker);
+					//
+					Rectangle clientArea = getClientArea();
+					gc.drawLine(HEADER_SIZE, HEADER_SIZE, clientArea.width, HEADER_SIZE);
+					gc.drawLine(HEADER_SIZE, HEADER_SIZE, HEADER_SIZE, clientArea.height);
+				}
+			});
+		}
+		// set context menu for headers
+		{
+			m_horizontalViewer.setContextMenu(new HeadersContextMenuProvider(m_horizontalViewer));
+			m_verticalViewer.setContextMenu(new HeadersContextMenuProvider(m_verticalViewer));
+		}
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Binds headers and main {@link GraphicalViewer}'s.
+	 */
+	public void bindViewers() {
+		HeadersEditPartFactory editPartFactory = new HeadersEditPartFactory();
+		//
+		m_horizontalViewer.setMainViewer(m_viewer);
+		m_horizontalViewer.setEditPartFactory(editPartFactory);
+		m_headersContainerHorizontal = new HeadersContainerEditPart(m_viewer, true);
+		m_horizontalViewer.setInput(m_headersContainerHorizontal);
+		//
+		m_verticalViewer.setMainViewer(m_viewer);
+		m_verticalViewer.setEditPartFactory(editPartFactory);
+		m_headersContainerVertical = new HeadersContainerEditPart(m_viewer, false);
+		m_verticalViewer.setInput(m_headersContainerVertical);
+	}
+	/**
+	 * Sets the root {@link ObjectInfo}.
+	 */
+	public void setRoot(ObjectInfo rootObject) {
+		rootObject.addBroadcastListener(new ObjectEventListener() {
+			@Override
+			public void refreshed2() throws Exception {
+				m_headersContainerHorizontal.refreshHeaders();
+				m_headersContainerVertical.refreshHeaders();
+			}
+		});
+	}
+	/**
+	 * @return the main {@link GraphicalViewer}
+	 */
+	public GraphicalViewer getViewer() {
+		return m_viewer;
+	}
+	/**
+	 * @return the horizontal {@link HeaderGraphicalViewer}
+	 */
+	public HeaderGraphicalViewer getHorizontalViewer() {
+		return m_horizontalViewer;
+	}
+	/**
+	 * @return the vertical {@link HeaderGraphicalViewer}.
+	 */
+	public HeaderGraphicalViewer getVerticalViewer() {
+		return m_verticalViewer;
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Control
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean setFocus() {
+		return m_viewer.getControl().setFocus();
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Layout
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void layout() {
+		Rectangle clientArea = getClientArea();
+		int x = HEADER_SIZE + 1;
+		int y = HEADER_SIZE + 1;
+		int width = clientArea.width - x;
+		int height = clientArea.height - y;
+		//
+		m_horizontalViewer.getControl().setBounds(x, 0, width, HEADER_SIZE);
+		m_verticalViewer.getControl().setBounds(0, y, HEADER_SIZE, height);
+		m_viewer.getControl().setBounds(x, y, width, height);
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/actions/ActionUtils.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/actions/ActionUtils.java
index ea4da854a..771e22ec4 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/actions/ActionUtils.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/actions/ActionUtils.java
@@ -24,25 +24,25 @@
  * @coverage core.editor.action
  */
 public class ActionUtils {
-  /**
-   * Copies text, image, accelerator, etc from {@link ActionFactory} to target {@link IAction}.
-   */
-  public static void copyPresentation(IAction target, ActionFactory actionFactory) {
-    IWorkbenchAction action = actionFactory.create(DesignerPlugin.getActiveWorkbenchWindow());
-    try {
-      target.setText(action.getText());
-      target.setToolTipText(action.getToolTipText());
-      target.setDescription(action.getDescription());
-      //
-      target.setImageDescriptor(action.getImageDescriptor());
-      target.setDisabledImageDescriptor(action.getDisabledImageDescriptor());
-      target.setHoverImageDescriptor(action.getHoverImageDescriptor());
-      //
-      target.setId(action.getId());
-      target.setActionDefinitionId(action.getActionDefinitionId());
-      target.setAccelerator(action.getAccelerator());
-    } finally {
-      action.dispose();
-    }
-  }
+	/**
+	 * Copies text, image, accelerator, etc from {@link ActionFactory} to target {@link IAction}.
+	 */
+	public static void copyPresentation(IAction target, ActionFactory actionFactory) {
+		IWorkbenchAction action = actionFactory.create(DesignerPlugin.getActiveWorkbenchWindow());
+		try {
+			target.setText(action.getText());
+			target.setToolTipText(action.getToolTipText());
+			target.setDescription(action.getDescription());
+			//
+			target.setImageDescriptor(action.getImageDescriptor());
+			target.setDisabledImageDescriptor(action.getDisabledImageDescriptor());
+			target.setHoverImageDescriptor(action.getHoverImageDescriptor());
+			//
+			target.setId(action.getId());
+			target.setActionDefinitionId(action.getActionDefinitionId());
+			target.setAccelerator(action.getAccelerator());
+		} finally {
+			action.dispose();
+		}
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/actions/DeleteAction.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/actions/DeleteAction.java
index c96f4d4a1..ed88800f5 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/actions/DeleteAction.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/actions/DeleteAction.java
@@ -34,97 +34,97 @@
  * @coverage core.editor.action
  */
 public class DeleteAction extends Action {
-  private final IEditPartViewer m_viewer;
+	private final IEditPartViewer m_viewer;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DeleteAction(IEditPartViewer viewer) {
-    m_viewer = viewer;
-    m_viewer.addSelectionChangedListener(new ISelectionChangedListener() {
-      @Override
-      public void selectionChanged(SelectionChangedEvent event) {
-        firePropertyChange(ENABLED, null, isEnabled() ? Boolean.TRUE : Boolean.FALSE);
-      }
-    });
-    // copy presentation
-    ActionUtils.copyPresentation(this, ActionFactory.DELETE);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DeleteAction(IEditPartViewer viewer) {
+		m_viewer = viewer;
+		m_viewer.addSelectionChangedListener(new ISelectionChangedListener() {
+			@Override
+			public void selectionChanged(SelectionChangedEvent event) {
+				firePropertyChange(ENABLED, null, isEnabled() ? Boolean.TRUE : Boolean.FALSE);
+			}
+		});
+		// copy presentation
+		ActionUtils.copyPresentation(this, ActionFactory.DELETE);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Action
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Command m_command;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Action
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Command m_command;
 
-  @Override
-  public void run() {
-    m_viewer.getEditDomain().executeCommand(m_command);
-  }
+	@Override
+	public void run() {
+		m_viewer.getEditDomain().executeCommand(m_command);
+	}
 
-  @Override
-  public boolean isEnabled() {
-    m_command = getCommand(m_viewer.getSelectedEditParts());
-    return m_command != null;
-  }
+	@Override
+	public boolean isEnabled() {
+		m_command = getCommand(m_viewer.getSelectedEditParts());
+		return m_command != null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Command
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link Command} for deleting given {@link EditPart}'s.
-   */
-  public static Command getCommand(List<EditPart> editParts) {
-    if (editParts.isEmpty()) {
-      return null;
-    }
-    // prepare ObjectInfo's to delete
-    List<ObjectInfo> objects = Lists.newArrayList();
-    for (EditPart editPart : editParts) {
-      // prepare object
-      ObjectInfo object;
-      {
-        Object model = editPart.getModel();
-        if (!(model instanceof ObjectInfo)) {
-          return null;
-        }
-        object = (ObjectInfo) model;
-      }
-      // Check that object is not deleted.
-      // When we refresh GEF viewer after "delete", temporary there is situation when selection
-      // contains already deleted objects.
-      if (object.isDeleted()) {
-        return null;
-      }
-      // check that ObjectInfo can be deleted
-      if (!object.canDelete()) {
-        return null;
-      }
-      // add model
-      objects.add(object);
-    }
-    // don't delete separately children, if we delete their parents
-    for (Iterator<ObjectInfo> I = objects.iterator(); I.hasNext();) {
-      ObjectInfo object = I.next();
-      if (object.getParent(objects) != null) {
-        I.remove();
-      }
-    }
-    // prepare compound command
-    CompoundEditCommand command = new CompoundEditCommand(objects.get(0));
-    for (final ObjectInfo object : objects) {
-      command.add(new EditCommand(object) {
-        @Override
-        protected void executeEdit() throws Exception {
-          object.delete();
-        }
-      });
-    }
-    return command;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Command
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link Command} for deleting given {@link EditPart}'s.
+	 */
+	public static Command getCommand(List<EditPart> editParts) {
+		if (editParts.isEmpty()) {
+			return null;
+		}
+		// prepare ObjectInfo's to delete
+		List<ObjectInfo> objects = Lists.newArrayList();
+		for (EditPart editPart : editParts) {
+			// prepare object
+			ObjectInfo object;
+			{
+				Object model = editPart.getModel();
+				if (!(model instanceof ObjectInfo)) {
+					return null;
+				}
+				object = (ObjectInfo) model;
+			}
+			// Check that object is not deleted.
+			// When we refresh GEF viewer after "delete", temporary there is situation when selection
+			// contains already deleted objects.
+			if (object.isDeleted()) {
+				return null;
+			}
+			// check that ObjectInfo can be deleted
+			if (!object.canDelete()) {
+				return null;
+			}
+			// add model
+			objects.add(object);
+		}
+		// don't delete separately children, if we delete their parents
+		for (Iterator<ObjectInfo> I = objects.iterator(); I.hasNext();) {
+			ObjectInfo object = I.next();
+			if (object.getParent(objects) != null) {
+				I.remove();
+			}
+		}
+		// prepare compound command
+		CompoundEditCommand command = new CompoundEditCommand(objects.get(0));
+		for (final ObjectInfo object : objects) {
+			command.add(new EditCommand(object) {
+				@Override
+				protected void executeEdit() throws Exception {
+					object.delete();
+				}
+			});
+		}
+		return command;
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/actions/SelectSupport.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/actions/SelectSupport.java
index 6e86b85e5..9b822fb47 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/actions/SelectSupport.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/actions/SelectSupport.java
@@ -44,220 +44,220 @@
  * @coverage core.editor.action
  */
 public final class SelectSupport {
-  private final ObjectInfo m_rootObject;
-  private final IEditPartViewer m_graphicalViewer;
-  private final IEditPartViewer m_treeViewer;
-  private final Set<ObjectInfo> m_selectedObjects = Sets.newHashSet();
-  private final Set<ObjectInfo> m_selectingSet = Sets.newLinkedHashSet();
+	private final ObjectInfo m_rootObject;
+	private final IEditPartViewer m_graphicalViewer;
+	private final IEditPartViewer m_treeViewer;
+	private final Set<ObjectInfo> m_selectedObjects = Sets.newHashSet();
+	private final Set<ObjectInfo> m_selectingSet = Sets.newLinkedHashSet();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SelectSupport(ObjectInfo rootObject,
-      IEditPartViewer graphicalViewer,
-      IEditPartViewer treeViewer) {
-    m_rootObject = rootObject;
-    m_graphicalViewer = graphicalViewer;
-    m_treeViewer = treeViewer;
-    addKeyDownListener(m_graphicalViewer);
-    addKeyDownListener(m_treeViewer);
-    rootObject.addBroadcastListener(new ObjectEventListener() {
-      @Override
-      public void dispose() throws Exception {
-        removeKeyDownListener(m_graphicalViewer);
-        removeKeyDownListener(m_treeViewer);
-      }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SelectSupport(ObjectInfo rootObject,
+			IEditPartViewer graphicalViewer,
+			IEditPartViewer treeViewer) {
+		m_rootObject = rootObject;
+		m_graphicalViewer = graphicalViewer;
+		m_treeViewer = treeViewer;
+		addKeyDownListener(m_graphicalViewer);
+		addKeyDownListener(m_treeViewer);
+		rootObject.addBroadcastListener(new ObjectEventListener() {
+			@Override
+			public void dispose() throws Exception {
+				removeKeyDownListener(m_graphicalViewer);
+				removeKeyDownListener(m_treeViewer);
+			}
 
-      @Override
-      public void addContextMenu(List<? extends ObjectInfo> selectedObjects,
-          ObjectInfo object,
-          IMenuManager manager) throws Exception {
-        contributeActions(manager);
-      }
-    });
-  }
+			@Override
+			public void addContextMenu(List<? extends ObjectInfo> selectedObjects,
+					ObjectInfo object,
+					IMenuManager manager) throws Exception {
+				contributeActions(manager);
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Keyboard
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final Listener m_keyListener = new Listener() {
-    @Override
-    public void handleEvent(Event event) {
-      int cmdModifierValue = getCommandModifierValue();
-      if (event.keyCode == 'a' && event.stateMask == cmdModifierValue) {
-        selectAll();
-      }
-      if (event.keyCode == 'a' && event.stateMask == (cmdModifierValue | SWT.SHIFT)) {
-        selectSameType();
-      }
-      if (event.keyCode == 'a' && event.stateMask == (cmdModifierValue | SWT.ALT)) {
-        selectSameParent();
-      }
-    }
-  };
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Keyboard
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final Listener m_keyListener = new Listener() {
+		@Override
+		public void handleEvent(Event event) {
+			int cmdModifierValue = getCommandModifierValue();
+			if (event.keyCode == 'a' && event.stateMask == cmdModifierValue) {
+				selectAll();
+			}
+			if (event.keyCode == 'a' && event.stateMask == (cmdModifierValue | SWT.SHIFT)) {
+				selectSameType();
+			}
+			if (event.keyCode == 'a' && event.stateMask == (cmdModifierValue | SWT.ALT)) {
+				selectSameParent();
+			}
+		}
+	};
 
-  /**
-   * Adds {@link SWT#KeyDown} listener for {@link Control} of viewer.
-   */
-  private void addKeyDownListener(IEditPartViewer viewer) {
-    Control control = viewer.getControl();
-    control.addListener(SWT.KeyDown, m_keyListener);
-  }
+	/**
+	 * Adds {@link SWT#KeyDown} listener for {@link Control} of viewer.
+	 */
+	private void addKeyDownListener(IEditPartViewer viewer) {
+		Control control = viewer.getControl();
+		control.addListener(SWT.KeyDown, m_keyListener);
+	}
 
-  /**
-   * Removes {@link SWT#KeyDown} listener from {@link Control} of viewer.
-   */
-  private void removeKeyDownListener(IEditPartViewer viewer) {
-    Control control = viewer.getControl();
-    if (!control.isDisposed()) {
-      control.removeListener(SWT.KeyDown, m_keyListener);
-    }
-  }
+	/**
+	 * Removes {@link SWT#KeyDown} listener from {@link Control} of viewer.
+	 */
+	private void removeKeyDownListener(IEditPartViewer viewer) {
+		Control control = viewer.getControl();
+		if (!control.isDisposed()) {
+			control.removeListener(SWT.KeyDown, m_keyListener);
+		}
+	}
 
-  /**
-   * @return the value of M1 modifier - "Cmd" or "Ctrl".
-   */
-  private static int getCommandModifierValue() {
-    return EnvironmentUtils.IS_MAC ? SWT.COMMAND : SWT.CTRL;
-  }
+	/**
+	 * @return the value of M1 modifier - "Cmd" or "Ctrl".
+	 */
+	private static int getCommandModifierValue() {
+		return EnvironmentUtils.IS_MAC ? SWT.COMMAND : SWT.CTRL;
+	}
 
-  /**
-   * @return the name of M1 modifier - "Cmd" or "Ctrl".
-   */
-  private static String getCommandModifierName() {
-    return EnvironmentUtils.IS_MAC ? "Cmd" : "Ctrl";
-  }
+	/**
+	 * @return the name of M1 modifier - "Cmd" or "Ctrl".
+	 */
+	private static String getCommandModifierName() {
+		return EnvironmentUtils.IS_MAC ? "Cmd" : "Ctrl";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Implementation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void selectAll() {
-    doBeforeSelect();
-    m_rootObject.accept(new ObjectInfoVisitor() {
-      @Override
-      public boolean visit(ObjectInfo object) throws Exception {
-        m_selectingSet.add(object);
-        return true;
-      }
-    });
-    selectByModels();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Implementation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void selectAll() {
+		doBeforeSelect();
+		m_rootObject.accept(new ObjectInfoVisitor() {
+			@Override
+			public boolean visit(ObjectInfo object) throws Exception {
+				m_selectingSet.add(object);
+				return true;
+			}
+		});
+		selectByModels();
+	}
 
-  private void selectSameType() {
-    doBeforeSelect();
-    final IDescriptionHelper descriptionHelper = GlobalState.getDescriptionHelper();
-    for (ObjectInfo selectedObject : m_selectedObjects) {
-      IComponentDescription selectedDescription = descriptionHelper.getDescription(selectedObject);
-      if (selectedDescription != null) {
-        final Class<?> selectedClass = selectedDescription.getComponentClass();
-        m_rootObject.accept(new ObjectInfoVisitor() {
-          @Override
-          public boolean visit(ObjectInfo object) throws Exception {
-            IComponentDescription description = descriptionHelper.getDescription(object);
-            if (description != null && description.getComponentClass() == selectedClass) {
-              m_selectingSet.add(object);
-            }
-            return true;
-          }
-        });
-      }
-    }
-    selectByModels();
-  }
+	private void selectSameType() {
+		doBeforeSelect();
+		final IDescriptionHelper descriptionHelper = GlobalState.getDescriptionHelper();
+		for (ObjectInfo selectedObject : m_selectedObjects) {
+			IComponentDescription selectedDescription = descriptionHelper.getDescription(selectedObject);
+			if (selectedDescription != null) {
+				final Class<?> selectedClass = selectedDescription.getComponentClass();
+				m_rootObject.accept(new ObjectInfoVisitor() {
+					@Override
+					public boolean visit(ObjectInfo object) throws Exception {
+						IComponentDescription description = descriptionHelper.getDescription(object);
+						if (description != null && description.getComponentClass() == selectedClass) {
+							m_selectingSet.add(object);
+						}
+						return true;
+					}
+				});
+			}
+		}
+		selectByModels();
+	}
 
-  private void selectSameParent() {
-    doBeforeSelect();
-    for (ObjectInfo selectedObject : m_selectedObjects) {
-      ObjectInfo selectedParent = selectedObject.getParent();
-      if (selectedParent != null) {
-        m_selectingSet.addAll(selectedParent.getChildren());
-      }
-    }
-    selectByModels();
-  }
+	private void selectSameParent() {
+		doBeforeSelect();
+		for (ObjectInfo selectedObject : m_selectedObjects) {
+			ObjectInfo selectedParent = selectedObject.getParent();
+			if (selectedParent != null) {
+				m_selectingSet.addAll(selectedParent.getChildren());
+			}
+		}
+		selectByModels();
+	}
 
-  /**
-   * Method which prepares information for "select" implementation.
-   */
-  private void doBeforeSelect() {
-    m_selectingSet.clear();
-    m_selectedObjects.clear();
-    List<EditPart> selectedEditParts = m_graphicalViewer.getSelectedEditParts();
-    for (EditPart editPart : selectedEditParts) {
-      Object model = editPart.getModel();
-      if (model instanceof ObjectInfo) {
-        m_selectedObjects.add((ObjectInfo) model);
-      }
-    }
-  }
+	/**
+	 * Method which prepares information for "select" implementation.
+	 */
+	private void doBeforeSelect() {
+		m_selectingSet.clear();
+		m_selectedObjects.clear();
+		List<EditPart> selectedEditParts = m_graphicalViewer.getSelectedEditParts();
+		for (EditPart editPart : selectedEditParts) {
+			Object model = editPart.getModel();
+			if (model instanceof ObjectInfo) {
+				m_selectedObjects.add((ObjectInfo) model);
+			}
+		}
+	}
 
-  /**
-   * Sets selection in {@link #m_graphicalViewer} using prepared {@link #m_selectingSet} models.
-   */
-  private void selectByModels() {
-    List<EditPart> editParts = Lists.newArrayList();
-    for (ObjectInfo object : m_selectingSet) {
-      EditPart editPart = m_graphicalViewer.getEditPartByModel(object);
-      if (editPart != null) {
-        editParts.add(editPart);
-      }
-    }
-    m_graphicalViewer.setSelection(editParts);
-  }
+	/**
+	 * Sets selection in {@link #m_graphicalViewer} using prepared {@link #m_selectingSet} models.
+	 */
+	private void selectByModels() {
+		List<EditPart> editParts = Lists.newArrayList();
+		for (ObjectInfo object : m_selectingSet) {
+			EditPart editPart = m_graphicalViewer.getEditPartByModel(object);
+			if (editPart != null) {
+				editParts.add(editPart);
+			}
+		}
+		m_graphicalViewer.setSelection(editParts);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Context menu
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void contributeActions(IMenuManager manager) {
-    IMenuManager selectMenuManager = new MenuManager("Select");
-    manager.appendToGroup(IContextMenuConstants.GROUP_CONSTRAINTS, selectMenuManager);
-    // add separate actions
-    String cmdModifierName = getCommandModifierName();
-    {
-      String text = MessageFormat.format("All\t{0}+A", cmdModifierName);
-      selectMenuManager.add(new SelectAction(text, "all.png") {
-        @Override
-        protected void runEx() throws Exception {
-          selectAll();
-        }
-      });
-    }
-    {
-      String text = MessageFormat.format("All of Same Type\t{0}+Shift+A", cmdModifierName);
-      selectMenuManager.add(new SelectAction(text, "sameType.png") {
-        @Override
-        protected void runEx() throws Exception {
-          selectSameType();
-        }
-      });
-    }
-    {
-      String text = MessageFormat.format("All on Same Parent\t{0}+Alt+A", cmdModifierName);
-      selectMenuManager.add(new SelectAction(text, "sameParent.png") {
-        @Override
-        protected void runEx() throws Exception {
-          selectSameParent();
-        }
-      });
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Context menu
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void contributeActions(IMenuManager manager) {
+		IMenuManager selectMenuManager = new MenuManager("Select");
+		manager.appendToGroup(IContextMenuConstants.GROUP_CONSTRAINTS, selectMenuManager);
+		// add separate actions
+		String cmdModifierName = getCommandModifierName();
+		{
+			String text = MessageFormat.format("All\t{0}+A", cmdModifierName);
+			selectMenuManager.add(new SelectAction(text, "all.png") {
+				@Override
+				protected void runEx() throws Exception {
+					selectAll();
+				}
+			});
+		}
+		{
+			String text = MessageFormat.format("All of Same Type\t{0}+Shift+A", cmdModifierName);
+			selectMenuManager.add(new SelectAction(text, "sameType.png") {
+				@Override
+				protected void runEx() throws Exception {
+					selectSameType();
+				}
+			});
+		}
+		{
+			String text = MessageFormat.format("All on Same Parent\t{0}+Alt+A", cmdModifierName);
+			selectMenuManager.add(new SelectAction(text, "sameParent.png") {
+				@Override
+				protected void runEx() throws Exception {
+					selectSameParent();
+				}
+			});
+		}
+	}
 
-  /**
-   * Abstract super class for selecting actions.
-   */
-  private abstract class SelectAction extends ObjectInfoAction {
-    public SelectAction(String text, String imageName) {
-      super(m_rootObject);
-      setText(text);
-      setImageDescriptor(DesignerPlugin.getImageDescriptor("actions/select/" + imageName));
-    }
-  }
+	/**
+	 * Abstract super class for selecting actions.
+	 */
+	private abstract class SelectAction extends ObjectInfoAction {
+		public SelectAction(String text, String imageName) {
+			super(m_rootObject);
+			setText(text);
+			setImageDescriptor(DesignerPlugin.getImageDescriptor("actions/select/" + imageName));
+		}
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/actions/assistant/LayoutAssistantAction.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/actions/assistant/LayoutAssistantAction.java
index 1a052e6ae..ec74f5c43 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/actions/assistant/LayoutAssistantAction.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/actions/assistant/LayoutAssistantAction.java
@@ -40,136 +40,136 @@
  * @coverage core.editor.action.assistant
  */
 public final class LayoutAssistantAction extends Action {
-  private final IEditorPart m_editor;
-  private final IEditPartViewer m_viewer;
-  private LayoutAssistantWindow m_assistantWindow;
-  private final IWorkbenchWindow m_workbenchWindow;
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public LayoutAssistantAction(IEditorPart editor, IEditPartViewer viewer) {
-    super(Messages.LayoutAssistantAction_text, IAction.AS_CHECK_BOX);
-    setToolTipText(Messages.LayoutAssistantAction_toolTip);
-    setImageDescriptor(DesignerPlugin.getImageDescriptor("actions/assistant/assistant.png"));
-    setDisabledImageDescriptor(DesignerPlugin.getImageDescriptor("actions/assistant/assistant_disabled.png"));
-    // initialize editor
-    m_editor = editor;
-    m_workbenchWindow = m_editor.getEditorSite().getWorkbenchWindow();
-    // initialize viewer
-    m_viewer = viewer;
-    m_viewer.addSelectionChangedListener(new ISelectionChangedListener() {
-      @Override
-      public void selectionChanged(SelectionChangedEvent event) {
-        updateWindow();
-      }
-    });
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets the root {@link ObjectInfo} on design page.
-   */
-  public void setRoot(ObjectInfo rootObject) {
-    rootObject.addBroadcastListener(new ObjectEventListener() {
-      @Override
-      public void refreshed() throws Exception {
-        updateWindow();
-      }
-    });
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Window part listener
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final IPartListener m_windowPartListener = new IPartListener() {
-    @Override
-    public void partActivated(IWorkbenchPart part) {
-      if (m_editor == part && m_assistantWindow != null) {
-        m_assistantWindow.open();
-      }
-    }
-    @Override
-    public void partDeactivated(IWorkbenchPart part) {
-      if (m_editor == part && m_assistantWindow != null) {
-        m_assistantWindow.hide();
-      }
-    }
-    @Override
-    public void partClosed(IWorkbenchPart part) {
-      if (m_editor == part) {
-        closeWindow();
-      }
-    }
-    @Override
-    public void partOpened(IWorkbenchPart part) {
-    }
-    @Override
-    public void partBroughtToTop(IWorkbenchPart part) {
-    }
-  };
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Action
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void run() {
-    if (m_assistantWindow == null) {
-      // create assistant window
-      m_assistantWindow = new LayoutAssistantWindow(DesignerPlugin.getShell());
-      setChecked(true);
-      showWindow();
-      updateWindow();
-    } else {
-      closeWindow();
-    }
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Window
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void showWindow() {
-    if (m_assistantWindow != null) {
-      m_workbenchWindow.getPartService().addPartListener(m_windowPartListener);
-      m_assistantWindow.open();
-      m_assistantWindow.getShell().addDisposeListener(new DisposeListener() {
-        @Override
-        public void widgetDisposed(DisposeEvent e) {
-          setChecked(false);
-          m_assistantWindow = null;
-        }
-      });
-    }
-  }
-  public void hideWindow() {
-    if (m_assistantWindow != null) {
-      m_workbenchWindow.getPartService().removePartListener(m_windowPartListener);
-      m_assistantWindow.hide();
-    }
-  }
-  public void closeWindow() {
-    if (m_assistantWindow != null) {
-      hideWindow();
-      m_assistantWindow.close();
-      m_assistantWindow = null;
-    }
-  }
-  private void updateWindow() {
-    if (m_assistantWindow != null) {
-      // prepare selection object's
-      List<Object> selectedObjects = Lists.newArrayList();
-      for (EditPart editPart : m_viewer.getSelectedEditParts()) {
-        selectedObjects.add(editPart.getModel());
-      }
-      // update assistant window
-      m_assistantWindow.update(selectedObjects);
-    }
-  }
+	private final IEditorPart m_editor;
+	private final IEditPartViewer m_viewer;
+	private LayoutAssistantWindow m_assistantWindow;
+	private final IWorkbenchWindow m_workbenchWindow;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public LayoutAssistantAction(IEditorPart editor, IEditPartViewer viewer) {
+		super(Messages.LayoutAssistantAction_text, IAction.AS_CHECK_BOX);
+		setToolTipText(Messages.LayoutAssistantAction_toolTip);
+		setImageDescriptor(DesignerPlugin.getImageDescriptor("actions/assistant/assistant.png"));
+		setDisabledImageDescriptor(DesignerPlugin.getImageDescriptor("actions/assistant/assistant_disabled.png"));
+		// initialize editor
+		m_editor = editor;
+		m_workbenchWindow = m_editor.getEditorSite().getWorkbenchWindow();
+		// initialize viewer
+		m_viewer = viewer;
+		m_viewer.addSelectionChangedListener(new ISelectionChangedListener() {
+			@Override
+			public void selectionChanged(SelectionChangedEvent event) {
+				updateWindow();
+			}
+		});
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets the root {@link ObjectInfo} on design page.
+	 */
+	public void setRoot(ObjectInfo rootObject) {
+		rootObject.addBroadcastListener(new ObjectEventListener() {
+			@Override
+			public void refreshed() throws Exception {
+				updateWindow();
+			}
+		});
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Window part listener
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final IPartListener m_windowPartListener = new IPartListener() {
+		@Override
+		public void partActivated(IWorkbenchPart part) {
+			if (m_editor == part && m_assistantWindow != null) {
+				m_assistantWindow.open();
+			}
+		}
+		@Override
+		public void partDeactivated(IWorkbenchPart part) {
+			if (m_editor == part && m_assistantWindow != null) {
+				m_assistantWindow.hide();
+			}
+		}
+		@Override
+		public void partClosed(IWorkbenchPart part) {
+			if (m_editor == part) {
+				closeWindow();
+			}
+		}
+		@Override
+		public void partOpened(IWorkbenchPart part) {
+		}
+		@Override
+		public void partBroughtToTop(IWorkbenchPart part) {
+		}
+	};
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Action
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void run() {
+		if (m_assistantWindow == null) {
+			// create assistant window
+			m_assistantWindow = new LayoutAssistantWindow(DesignerPlugin.getShell());
+			setChecked(true);
+			showWindow();
+			updateWindow();
+		} else {
+			closeWindow();
+		}
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Window
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void showWindow() {
+		if (m_assistantWindow != null) {
+			m_workbenchWindow.getPartService().addPartListener(m_windowPartListener);
+			m_assistantWindow.open();
+			m_assistantWindow.getShell().addDisposeListener(new DisposeListener() {
+				@Override
+				public void widgetDisposed(DisposeEvent e) {
+					setChecked(false);
+					m_assistantWindow = null;
+				}
+			});
+		}
+	}
+	public void hideWindow() {
+		if (m_assistantWindow != null) {
+			m_workbenchWindow.getPartService().removePartListener(m_windowPartListener);
+			m_assistantWindow.hide();
+		}
+	}
+	public void closeWindow() {
+		if (m_assistantWindow != null) {
+			hideWindow();
+			m_assistantWindow.close();
+			m_assistantWindow = null;
+		}
+	}
+	private void updateWindow() {
+		if (m_assistantWindow != null) {
+			// prepare selection object's
+			List<Object> selectedObjects = Lists.newArrayList();
+			for (EditPart editPart : m_viewer.getSelectedEditParts()) {
+				selectedObjects.add(editPart.getModel());
+			}
+			// update assistant window
+			m_assistantWindow.update(selectedObjects);
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/actions/assistant/LayoutAssistantWindow.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/actions/assistant/LayoutAssistantWindow.java
index 245e380ae..43c565ef4 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/actions/assistant/LayoutAssistantWindow.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/actions/assistant/LayoutAssistantWindow.java
@@ -43,181 +43,181 @@
  * @coverage core.editor.action.assistant
  */
 public class LayoutAssistantWindow extends Window {
-  private final ShellLocationTracker m_locationTracker;
-  private TabFolder m_tabContainer;
-  private List<ILayoutAssistantPage> m_pages;
-  private List<ObjectInfo> m_selectedComponents;
+	private final ShellLocationTracker m_locationTracker;
+	private TabFolder m_tabContainer;
+	private List<ILayoutAssistantPage> m_pages;
+	private List<ObjectInfo> m_selectedComponents;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public LayoutAssistantWindow(Shell parentShell) {
-    super(parentShell);
-    setShellStyle(SWT.CLOSE | SWT.BORDER | SWT.TITLE | SWT.TOOL);
-    m_locationTracker =
-        new ShellLocationTracker(DesignerPlugin.getDefault().getDialogSettings(),
-            getClass().getName());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public LayoutAssistantWindow(Shell parentShell) {
+		super(parentShell);
+		setShellStyle(SWT.CLOSE | SWT.BORDER | SWT.TITLE | SWT.TOOL);
+		m_locationTracker =
+				new ShellLocationTracker(DesignerPlugin.getDefault().getDialogSettings(),
+						getClass().getName());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Hide the shell, if active.
-   */
-  public void hide() {
-    Shell shell = getShell();
-    if (shell != null) {
-      shell.setVisible(false);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Hide the shell, if active.
+	 */
+	public void hide() {
+		Shell shell = getShell();
+		if (shell != null) {
+			shell.setVisible(false);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void configureShell(Shell newShell) {
-    super.configureShell(newShell);
-    newShell.setText(Messages.LayoutAssistantWindow_title);
-    m_locationTracker.setShell(newShell);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void configureShell(Shell newShell) {
+		super.configureShell(newShell);
+		newShell.setText(Messages.LayoutAssistantWindow_title);
+		m_locationTracker.setShell(newShell);
+	}
 
-  @Override
-  protected Control createContents(Composite parent) {
-    parent.setLayout(new FillLayout());
-    m_tabContainer = new TabFolder(parent, SWT.NONE);
-    return m_tabContainer;
-  }
+	@Override
+	protected Control createContents(Composite parent) {
+		parent.setLayout(new FillLayout());
+		m_tabContainer = new TabFolder(parent, SWT.NONE);
+		return m_tabContainer;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Location
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Point getInitialLocation(Point initialSize) {
-    return m_locationTracker.getInitialLocation(initialSize);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Location
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Point getInitialLocation(Point initialSize) {
+		return m_locationTracker.getInitialLocation(initialSize);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Update
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void update(List<Object> selectedObjects) {
-    // check equals to old selection
-    if (m_selectedComponents != null && m_selectedComponents.equals(selectedObjects)) {
-      // prepare page valid status
-      boolean isValidPages = true;
-      for (ILayoutAssistantPage page : m_pages) {
-        if (!page.isPageValid()) {
-          isValidPages = false;
-          break;
-        }
-      }
-      // check status: create or update
-      if (isValidPages) {
-        updatePages();
-        return;
-      }
-    }
-    try {
-      getShell().setRedraw(false);
-      getShell().setEnabled(false);
-      // remember title of previously selected page
-      String selectedPageTitle = null;
-      {
-        int index = m_tabContainer.getSelectionIndex();
-        if (index > 0) {
-          selectedPageTitle = m_tabContainer.getItem(index).getText();
-        }
-      }
-      // dispose old pages
-      for (TabItem tabItem : m_tabContainer.getItems()) {
-        tabItem.getControl().dispose();
-        tabItem.dispose();
-      }
-      m_pages = Lists.newArrayList();
-      // check selection
-      {
-        // check selection and parent
-        m_selectedComponents = Lists.newArrayList();
-        {
-          ObjectInfo parent = null;
-          for (Object object : selectedObjects) {
-            if (object instanceof ObjectInfo) {
-              ObjectInfo component = (ObjectInfo) object;
-              m_selectedComponents.add(component);
-              if (parent == null) {
-                parent = component.getParent();
-              } else if (parent != component.getParent()) {
-                showMessage(Messages.LayoutAssistantWindow_singleParent);
-                return;
-              }
-            } else {
-              showMessage(Messages.LayoutAssistantWindow_notObjectSelected);
-              return;
-            }
-          }
-        }
-        // check empty
-        if (m_selectedComponents.isEmpty()) {
-          showMessage(Messages.LayoutAssistantWindow_emptySelection);
-          return;
-        }
-      }
-      // create pages
-      ExecutionUtils.runLog(new RunnableEx() {
-        @Override
-        public void run() throws Exception {
-          ObjectInfo component = m_selectedComponents.get(0);
-          LayoutAssistantListener listener = component.getBroadcast(LayoutAssistantListener.class);
-          listener.createAssistantPages(m_selectedComponents, m_tabContainer, m_pages);
-        }
-      });
-      // update pages
-      if (m_pages.isEmpty()) {
-        showMessage(Messages.LayoutAssistantWindow_noAssistanceForSelection);
-      } else {
-        updatePages();
-        // restore page selection
-        if (selectedPageTitle != null) {
-          for (TabItem item : m_tabContainer.getItems()) {
-            if (selectedPageTitle.equals(item.getText())) {
-              m_tabContainer.setSelection(item);
-              break;
-            }
-          }
-        }
-      }
-    } finally {
-      getShell().setEnabled(true);
-      getShell().setRedraw(true);
-      getShell().layout();
-      getShell().pack();
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Update
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void update(List<Object> selectedObjects) {
+		// check equals to old selection
+		if (m_selectedComponents != null && m_selectedComponents.equals(selectedObjects)) {
+			// prepare page valid status
+			boolean isValidPages = true;
+			for (ILayoutAssistantPage page : m_pages) {
+				if (!page.isPageValid()) {
+					isValidPages = false;
+					break;
+				}
+			}
+			// check status: create or update
+			if (isValidPages) {
+				updatePages();
+				return;
+			}
+		}
+		try {
+			getShell().setRedraw(false);
+			getShell().setEnabled(false);
+			// remember title of previously selected page
+			String selectedPageTitle = null;
+			{
+				int index = m_tabContainer.getSelectionIndex();
+				if (index > 0) {
+					selectedPageTitle = m_tabContainer.getItem(index).getText();
+				}
+			}
+			// dispose old pages
+			for (TabItem tabItem : m_tabContainer.getItems()) {
+				tabItem.getControl().dispose();
+				tabItem.dispose();
+			}
+			m_pages = Lists.newArrayList();
+			// check selection
+			{
+				// check selection and parent
+				m_selectedComponents = Lists.newArrayList();
+				{
+					ObjectInfo parent = null;
+					for (Object object : selectedObjects) {
+						if (object instanceof ObjectInfo) {
+							ObjectInfo component = (ObjectInfo) object;
+							m_selectedComponents.add(component);
+							if (parent == null) {
+								parent = component.getParent();
+							} else if (parent != component.getParent()) {
+								showMessage(Messages.LayoutAssistantWindow_singleParent);
+								return;
+							}
+						} else {
+							showMessage(Messages.LayoutAssistantWindow_notObjectSelected);
+							return;
+						}
+					}
+				}
+				// check empty
+				if (m_selectedComponents.isEmpty()) {
+					showMessage(Messages.LayoutAssistantWindow_emptySelection);
+					return;
+				}
+			}
+			// create pages
+			ExecutionUtils.runLog(new RunnableEx() {
+				@Override
+				public void run() throws Exception {
+					ObjectInfo component = m_selectedComponents.get(0);
+					LayoutAssistantListener listener = component.getBroadcast(LayoutAssistantListener.class);
+					listener.createAssistantPages(m_selectedComponents, m_tabContainer, m_pages);
+				}
+			});
+			// update pages
+			if (m_pages.isEmpty()) {
+				showMessage(Messages.LayoutAssistantWindow_noAssistanceForSelection);
+			} else {
+				updatePages();
+				// restore page selection
+				if (selectedPageTitle != null) {
+					for (TabItem item : m_tabContainer.getItems()) {
+						if (selectedPageTitle.equals(item.getText())) {
+							m_tabContainer.setSelection(item);
+							break;
+						}
+					}
+				}
+			}
+		} finally {
+			getShell().setEnabled(true);
+			getShell().setRedraw(true);
+			getShell().layout();
+			getShell().pack();
+		}
+	}
 
-  private void updatePages() {
-    for (ILayoutAssistantPage page : m_pages) {
-      page.updatePage();
-    }
-  }
+	private void updatePages() {
+		for (ILayoutAssistantPage page : m_pages) {
+			page.updatePage();
+		}
+	}
 
-  private void showMessage(String message) {
-    Composite composite = new Composite(m_tabContainer, SWT.NONE);
-    GridLayoutFactory.create(composite).margins(15);
-    //
-    Label label = new Label(composite, SWT.CENTER);
-    GridDataFactory.create(label).grab().alignHC().alignVM();
-    label.setText(message);
-    //
-    TabFactory.item(m_tabContainer).text(Messages.LayoutAssistantWindow_infoTab).control(composite);
-  }
+	private void showMessage(String message) {
+		Composite composite = new Composite(m_tabContainer, SWT.NONE);
+		GridLayoutFactory.create(composite).margins(15);
+		//
+		Label label = new Label(composite, SWT.CENTER);
+		GridDataFactory.create(label).grab().alignHC().alignVM();
+		label.setText(message);
+		//
+		TabFactory.item(m_tabContainer).text(Messages.LayoutAssistantWindow_infoTab).control(composite);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/actions/assistant/ShellLocationTracker.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/actions/assistant/ShellLocationTracker.java
index 07b777027..7040810b2 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/actions/assistant/ShellLocationTracker.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/actions/assistant/ShellLocationTracker.java
@@ -26,82 +26,82 @@
  * @coverage core.editor.action.assistant
  */
 public final class ShellLocationTracker {
-  private final IDialogSettings m_settings;
-  private final String m_sectionName;
-  private Shell m_shell;
+	private final IDialogSettings m_settings;
+	private final String m_sectionName;
+	private Shell m_shell;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ShellLocationTracker(IDialogSettings settings, String sectionName) {
-    m_settings = settings;
-    m_sectionName = sectionName;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ShellLocationTracker(IDialogSettings settings, String sectionName) {
+		m_settings = settings;
+		m_sectionName = sectionName;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void setShell(Shell shell) {
-    m_shell = shell;
-    m_shell.addListener(SWT.Dispose, new Listener() {
-      @Override
-      public void handleEvent(Event event) {
-        if (!m_shell.isDisposed() && !m_shell.getMaximized()) {
-          Point location = m_shell.getLocation();
-          saveLocation(location);
-        }
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void setShell(Shell shell) {
+		m_shell = shell;
+		m_shell.addListener(SWT.Dispose, new Listener() {
+			@Override
+			public void handleEvent(Event event) {
+				if (!m_shell.isDisposed() && !m_shell.getMaximized()) {
+					Point location = m_shell.getLocation();
+					saveLocation(location);
+				}
+			}
+		});
+	}
 
-  public Point getInitialLocation(Point initialSize) {
-    Point location = loadLocation();
-    if (location != null) {
-      return location;
-    }
-    // default location - centered on parent Shell
-    Rectangle parentBounds = getParentShell().getBounds();
-    int x = parentBounds.x + (parentBounds.width - initialSize.x) / 2;
-    int y = parentBounds.y + (parentBounds.height - initialSize.y) / 2;
-    return new Point(x, y);
-  }
+	public Point getInitialLocation(Point initialSize) {
+		Point location = loadLocation();
+		if (location != null) {
+			return location;
+		}
+		// default location - centered on parent Shell
+		Rectangle parentBounds = getParentShell().getBounds();
+		int x = parentBounds.x + (parentBounds.width - initialSize.x) / 2;
+		int y = parentBounds.y + (parentBounds.height - initialSize.y) / 2;
+		return new Point(x, y);
+	}
 
-  private Shell getParentShell() {
-    Shell parent = (Shell) m_shell.getParent();
-    if (parent != null) {
-      return parent;
-    }
-    return PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();
-  }
+	private Shell getParentShell() {
+		Shell parent = (Shell) m_shell.getParent();
+		if (parent != null) {
+			return parent;
+		}
+		return PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Location
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Point loadLocation() {
-    IDialogSettings settings = getLocationSettings();
-    try {
-      return new Point(settings.getInt("x"), settings.getInt("y"));
-    } catch (NumberFormatException e) {
-      return null;
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Location
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Point loadLocation() {
+		IDialogSettings settings = getLocationSettings();
+		try {
+			return new Point(settings.getInt("x"), settings.getInt("y"));
+		} catch (NumberFormatException e) {
+			return null;
+		}
+	}
 
-  private void saveLocation(Point location) {
-    IDialogSettings settings = getLocationSettings();
-    settings.put("x", location.x);
-    settings.put("y", location.y);
-  }
+	private void saveLocation(Point location) {
+		IDialogSettings settings = getLocationSettings();
+		settings.put("x", location.x);
+		settings.put("y", location.y);
+	}
 
-  private IDialogSettings getLocationSettings() {
-    if (m_settings.getSection(m_sectionName) == null) {
-      return m_settings.addNewSection(m_sectionName);
-    }
-    return m_settings.getSection(m_sectionName);
-  }
+	private IDialogSettings getLocationSettings() {
+		if (m_settings.getSection(m_sectionName) == null) {
+			return m_settings.addNewSection(m_sectionName);
+		}
+		return m_settings.getSection(m_sectionName);
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/actions/errors/IErrorPage.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/actions/errors/IErrorPage.java
index a86f4b1eb..ceeb68867 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/actions/errors/IErrorPage.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/actions/errors/IErrorPage.java
@@ -22,23 +22,23 @@
  * @coverage core.editor.action.error
  */
 public interface IErrorPage {
-  /**
-   * Sets the root {@link ObjectInfo}.
-   */
-  void setRoot(ObjectInfo rootObject);
+	/**
+	 * Sets the root {@link ObjectInfo}.
+	 */
+	void setRoot(ObjectInfo rootObject);
 
-  /**
-   * @return <code>true</code> if page has errors.
-   */
-  boolean hasErrors();
+	/**
+	 * @return <code>true</code> if page has errors.
+	 */
+	boolean hasErrors();
 
-  /**
-   * @return the title of this page.
-   */
-  String getTitle();
+	/**
+	 * @return the title of this page.
+	 */
+	String getTitle();
 
-  /**
-   * Creates {@link Control} on given parent.
-   */
-  Control create(Composite parent);
+	/**
+	 * Creates {@link Control} on given parent.
+	 */
+	Control create(Composite parent);
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/describer/JavaSourceUiDescriber.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/describer/JavaSourceUiDescriber.java
index 8e44dbbfa..505b0c965 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/describer/JavaSourceUiDescriber.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/describer/JavaSourceUiDescriber.java
@@ -33,101 +33,101 @@
  * @coverage core.editor
  */
 public final class JavaSourceUiDescriber extends TextContentDescriber {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ITextContentDescriber
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public int describe(Reader contents,
-      org.eclipse.core.runtime.content.IContentDescription description) throws IOException {
-    String source = IOUtils.toString(contents);
-    return isGUISource(source) ? VALID : INVALID;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ITextContentDescriber
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public int describe(Reader contents,
+			org.eclipse.core.runtime.content.IContentDescription description) throws IOException {
+		String source = IOUtils.toString(contents);
+		return isGUISource(source) ? VALID : INVALID;
+	}
 
-  @Override
-  public int describe(InputStream contents,
-      org.eclipse.core.runtime.content.IContentDescription description) throws IOException {
-    String source = IOUtils.toString(contents);
-    return isGUISource(source) ? VALID : INVALID;
-  }
+	@Override
+	public int describe(InputStream contents,
+			org.eclipse.core.runtime.content.IContentDescription description) throws IOException {
+		String source = IOUtils.toString(contents);
+		return isGUISource(source) ? VALID : INVALID;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Implementation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if given source code contains GUI for one of the supported GUI
-   *         toolkits.
-   */
-  private static boolean isGUISource(String source) {
-    if (DesignerPlugin.getDefault() == null) {
-      return false;
-    }
-    if (!DesignerPlugin.getPreferences().getBoolean(IPreferenceConstants.P_EDITOR_RECOGNIZE_GUI)) {
-      return false;
-    }
-    // should have "include" pattern
-    if (!hasIncludePattern(source)) {
-      return false;
-    }
-    // should not have "exclude" pattern
-    if (hasExcludePattern(source)) {
-      return false;
-    }
-    // OK, this is GUI
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Implementation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if given source code contains GUI for one of the supported GUI
+	 *         toolkits.
+	 */
+	private static boolean isGUISource(String source) {
+		if (DesignerPlugin.getDefault() == null) {
+			return false;
+		}
+		if (!DesignerPlugin.getPreferences().getBoolean(IPreferenceConstants.P_EDITOR_RECOGNIZE_GUI)) {
+			return false;
+		}
+		// should have "include" pattern
+		if (!hasIncludePattern(source)) {
+			return false;
+		}
+		// should not have "exclude" pattern
+		if (hasExcludePattern(source)) {
+			return false;
+		}
+		// OK, this is GUI
+		return true;
+	}
 
-  private static boolean hasIncludePattern(String source) {
-    for (String pattern : getIncludePatterns()) {
-      if (source.indexOf(pattern) != -1) {
-        return true;
-      }
-    }
-    return false;
-  }
+	private static boolean hasIncludePattern(String source) {
+		for (String pattern : getIncludePatterns()) {
+			if (source.indexOf(pattern) != -1) {
+				return true;
+			}
+		}
+		return false;
+	}
 
-  private static boolean hasExcludePattern(String source) {
-    for (String pattern : getExcludePatterns()) {
-      if (source.indexOf(pattern) != -1) {
-        return true;
-      }
-    }
-    return false;
-  }
+	private static boolean hasExcludePattern(String source) {
+		for (String pattern : getExcludePatterns()) {
+			if (source.indexOf(pattern) != -1) {
+				return true;
+			}
+		}
+		return false;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the contributed "include" patterns. If has one of it - consider source as GUI.
-   */
-  private static List<String> getIncludePatterns() {
-    return getPatterns("includePattern");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the contributed "include" patterns. If has one of it - consider source as GUI.
+	 */
+	private static List<String> getIncludePatterns() {
+		return getPatterns("includePattern");
+	}
 
-  /**
-   * @return the contributed "exclude" patterns. If has one of it - consider source as <em>not</em>
-   *         GUI.
-   */
-  private static List<String> getExcludePatterns() {
-    return getPatterns("excludePattern");
-  }
+	/**
+	 * @return the contributed "exclude" patterns. If has one of it - consider source as <em>not</em>
+	 *         GUI.
+	 */
+	private static List<String> getExcludePatterns() {
+		return getPatterns("excludePattern");
+	}
 
-  private static List<String> getPatterns(String elementName) {
-    List<String> patterns = Lists.newArrayList();
-    List<IConfigurationElement> elements =
-        ExternalFactoriesHelper.getElements(
-            "org.eclipse.wb.core.designerContentPatterns",
-            elementName);
-    for (IConfigurationElement element : elements) {
-      String pattern = element.getValue();
-      patterns.add(pattern);
-    }
-    return patterns;
-  }
+	private static List<String> getPatterns(String elementName) {
+		List<String> patterns = Lists.newArrayList();
+		List<IConfigurationElement> elements =
+				ExternalFactoriesHelper.getElements(
+						"org.eclipse.wb.core.designerContentPatterns",
+						elementName);
+		for (IConfigurationElement element : elements) {
+			String pattern = element.getValue();
+			patterns.add(pattern);
+		}
+		return patterns;
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/describer/TextContentDescriber.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/describer/TextContentDescriber.java
index 93715cb2c..77c013c6d 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/describer/TextContentDescriber.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/describer/TextContentDescriber.java
@@ -31,51 +31,51 @@
  * @coverage core.editor
  */
 public class TextContentDescriber implements ITextContentDescriber {
-  private final static QualifiedName[] SUPPORTED_OPTIONS = {IContentDescription.BYTE_ORDER_MARK};
+	private final static QualifiedName[] SUPPORTED_OPTIONS = {IContentDescription.BYTE_ORDER_MARK};
 
-  @Override
-  public int describe(Reader contents, IContentDescription description) throws IOException {
-    // we want to be pretty loose on detecting the text content type
-    return INDETERMINATE;
-  }
+	@Override
+	public int describe(Reader contents, IContentDescription description) throws IOException {
+		// we want to be pretty loose on detecting the text content type
+		return INDETERMINATE;
+	}
 
-  @Override
-  public int describe(InputStream contents, IContentDescription description) throws IOException {
-    if (description == null || !description.isRequested(IContentDescription.BYTE_ORDER_MARK)) {
-      return INDETERMINATE;
-    }
-    byte[] bom = getByteOrderMark(contents);
-    if (bom != null) {
-      description.setProperty(IContentDescription.BYTE_ORDER_MARK, bom);
-    }
-    // we want to be pretty loose on detecting the text content type
-    return INDETERMINATE;
-  }
+	@Override
+	public int describe(InputStream contents, IContentDescription description) throws IOException {
+		if (description == null || !description.isRequested(IContentDescription.BYTE_ORDER_MARK)) {
+			return INDETERMINATE;
+		}
+		byte[] bom = getByteOrderMark(contents);
+		if (bom != null) {
+			description.setProperty(IContentDescription.BYTE_ORDER_MARK, bom);
+		}
+		// we want to be pretty loose on detecting the text content type
+		return INDETERMINATE;
+	}
 
-  @Override
-  public QualifiedName[] getSupportedOptions() {
-    return SUPPORTED_OPTIONS;
-  }
+	@Override
+	public QualifiedName[] getSupportedOptions() {
+		return SUPPORTED_OPTIONS;
+	}
 
-  private static byte[] getByteOrderMark(InputStream input) throws IOException {
-    int first = input.read();
-    if (first == 0xEF) {
-      //look for the UTF-8 Byte Order Mark (BOM)
-      int second = input.read();
-      int third = input.read();
-      if (second == 0xBB && third == 0xBF) {
-        return IContentDescription.BOM_UTF_8;
-      }
-    } else if (first == 0xFE) {
-      //look for the UTF-16 BOM
-      if (input.read() == 0xFF) {
-        return IContentDescription.BOM_UTF_16BE;
-      }
-    } else if (first == 0xFF) {
-      if (input.read() == 0xFE) {
-        return IContentDescription.BOM_UTF_16LE;
-      }
-    }
-    return null;
-  }
+	private static byte[] getByteOrderMark(InputStream input) throws IOException {
+		int first = input.read();
+		if (first == 0xEF) {
+			//look for the UTF-8 Byte Order Mark (BOM)
+			int second = input.read();
+			int third = input.read();
+			if (second == 0xBB && third == 0xBF) {
+				return IContentDescription.BOM_UTF_8;
+			}
+		} else if (first == 0xFE) {
+			//look for the UTF-16 BOM
+			if (input.read() == 0xFF) {
+				return IContentDescription.BOM_UTF_16BE;
+			}
+		} else if (first == 0xFF) {
+			if (input.read() == 0xFE) {
+				return IContentDescription.BOM_UTF_16LE;
+			}
+		}
+		return null;
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/errors/BrowserMessageDialog.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/errors/BrowserMessageDialog.java
index be0fa54e6..626567028 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/errors/BrowserMessageDialog.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/errors/BrowserMessageDialog.java
@@ -34,85 +34,85 @@
  * @coverage core.editor.errors
  */
 public class BrowserMessageDialog extends Dialog {
-  // default html
-  private static final String HTML_HEADER = "<html><head><style type=\"text/css\"> "
-      + "body { background-color: %bg_color%; font-size: 8pt; font-family: Verdana;Helvetica;} "
-      + "table { font-size: 8pt; font-family: Verdana;Helvetica;} "
-      + "h3 {font-size: 10pt;}</style></head><body>";
-  private static final String HTML_FOOTER = "</body></html>";
-  // fields
-  private final String m_title;
-  private String m_htmlToShow;
+	// default html
+	private static final String HTML_HEADER = "<html><head><style type=\"text/css\"> "
+			+ "body { background-color: %bg_color%; font-size: 8pt; font-family: Verdana;Helvetica;} "
+			+ "table { font-size: 8pt; font-family: Verdana;Helvetica;} "
+			+ "h3 {font-size: 10pt;}</style></head><body>";
+	private static final String HTML_FOOTER = "</body></html>";
+	// fields
+	private final String m_title;
+	private String m_htmlToShow;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected BrowserMessageDialog(Shell parentShell, String title) {
-    super(parentShell);
-    m_title = title;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected BrowserMessageDialog(Shell parentShell, String title) {
+		super(parentShell);
+		m_title = title;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Contents
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Control createDialogArea(Composite parent) {
-    Composite area = (Composite) super.createDialogArea(parent);
-    Composite composite = new Composite(area, SWT.NONE);
-    GridDataFactory.modify(composite).grab().fill();
-    composite.setLayout(new FillLayout());
-    BrowserComposite browser = new BrowserComposite(composite, SWT.NONE);
-    browser.setText(m_htmlToShow);
-    return area;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Contents
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Control createDialogArea(Composite parent) {
+		Composite area = (Composite) super.createDialogArea(parent);
+		Composite composite = new Composite(area, SWT.NONE);
+		GridDataFactory.modify(composite).grab().fill();
+		composite.setLayout(new FillLayout());
+		BrowserComposite browser = new BrowserComposite(composite, SWT.NONE);
+		browser.setText(m_htmlToShow);
+		return area;
+	}
 
-  @Override
-  protected void createButtonsForButtonBar(Composite parent) {
-    createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true);
-  }
+	@Override
+	protected void createButtonsForButtonBar(Composite parent) {
+		createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true);
+	}
 
-  @Override
-  protected Point getInitialSize() {
-    return getParentShell().getSize();
-  }
+	@Override
+	protected Point getInitialSize() {
+		return getParentShell().getSize();
+	}
 
-  @Override
-  protected Point getInitialLocation(Point initialSize) {
-    return getParentShell().getLocation();
-  }
+	@Override
+	protected Point getInitialLocation(Point initialSize) {
+		return getParentShell().getLocation();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets the content part of HTML. This means that <code>html</code> parameter should contain only
-   * the contents needed to display in this dialog (i.e. without html, head, title, body tags).
-   */
-  public void setHTML(String html) {
-    m_htmlToShow =
-        StringUtils.replace(
-            HTML_HEADER,
-            "%bg_color%",
-            DesignerExceptionUtils.getColorWebString(IColorConstants.button))
-            + (m_title != null ? "<h3>" + m_title + "</h3>" : "")
-            + html
-            + HTML_FOOTER;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets the content part of HTML. This means that <code>html</code> parameter should contain only
+	 * the contents needed to display in this dialog (i.e. without html, head, title, body tags).
+	 */
+	public void setHTML(String html) {
+		m_htmlToShow =
+				StringUtils.replace(
+						HTML_HEADER,
+						"%bg_color%",
+						DesignerExceptionUtils.getColorWebString(IColorConstants.button))
+				+ (m_title != null ? "<h3>" + m_title + "</h3>" : "")
+				+ html
+				+ HTML_FOOTER;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Usage
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static void openMessage(Shell shell, String title, String html) {
-    BrowserMessageDialog dialog = new BrowserMessageDialog(shell, title);
-    dialog.setHTML(html);
-    dialog.open();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Usage
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static void openMessage(Shell shell, String title, String html) {
+		BrowserMessageDialog dialog = new BrowserMessageDialog(shell, title);
+		dialog.setHTML(html);
+		dialog.open();
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/errors/CoreExceptionRewriter.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/errors/CoreExceptionRewriter.java
index e9dd86b11..4d2d97804 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/errors/CoreExceptionRewriter.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/errors/CoreExceptionRewriter.java
@@ -23,50 +23,50 @@
  * @coverage core.editor.errors
  */
 public class CoreExceptionRewriter implements IExceptionRewriter {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final IExceptionRewriter INSTANCE = new CoreExceptionRewriter();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final IExceptionRewriter INSTANCE = new CoreExceptionRewriter();
 
-  private CoreExceptionRewriter() {
-  }
+	private CoreExceptionRewriter() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IExceptionRewriter
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Throwable rewrite(Throwable e) {
-    Throwable rootException = DesignerExceptionUtils.getRootCause(e);
-    if (rootException instanceof OSSupportError) {
-      return new DesignerException(OSSupportError.ERROR_CODE, e);
-    }
-    if (isIncompleteProductException(rootException)) {
-      return new DesignerException(ICoreExceptionConstants.INCOMPLETE_PRODUCT, e);
-    }
-    return e;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IExceptionRewriter
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Throwable rewrite(Throwable e) {
+		Throwable rootException = DesignerExceptionUtils.getRootCause(e);
+		if (rootException instanceof OSSupportError) {
+			return new DesignerException(OSSupportError.ERROR_CODE, e);
+		}
+		if (isIncompleteProductException(rootException)) {
+			return new DesignerException(ICoreExceptionConstants.INCOMPLETE_PRODUCT, e);
+		}
+		return e;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if given {@link Throwable} means that not all parts of WindowBuilder
-   *         are installed or updated. Usually this happens when we add new classes or methods.
-   */
-  private static boolean isIncompleteProductException(Throwable e) {
-    if (e instanceof NoSuchMethodError) {
-      return e.getMessage().startsWith("org.eclipse.wb.");
-    }
-    if (e instanceof NoClassDefFoundError) {
-      String message = e.getMessage();
-      return message.startsWith("org/eclipse/wb/") || message.startsWith("org/eclipse/jdt/");
-    }
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if given {@link Throwable} means that not all parts of WindowBuilder
+	 *         are installed or updated. Usually this happens when we add new classes or methods.
+	 */
+	private static boolean isIncompleteProductException(Throwable e) {
+		if (e instanceof NoSuchMethodError) {
+			return e.getMessage().startsWith("org.eclipse.wb.");
+		}
+		if (e instanceof NoClassDefFoundError) {
+			String message = e.getMessage();
+			return message.startsWith("org/eclipse/wb/") || message.startsWith("org/eclipse/jdt/");
+		}
+		return false;
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/errors/ErrorEntryInfo.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/errors/ErrorEntryInfo.java
index c87cd7a52..ffc1b6dfe 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/errors/ErrorEntryInfo.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/errors/ErrorEntryInfo.java
@@ -17,87 +17,87 @@
  * @coverage core.editor.errors
  */
 public final class ErrorEntryInfo {
-  private final int m_code;
-  private final boolean m_warning;
-  private final String m_title;
-  private final String m_description;
-  private final String m_altDescription;
+	private final int m_code;
+	private final boolean m_warning;
+	private final String m_title;
+	private final String m_description;
+	private final String m_altDescription;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @param code
-   *          the code of the error.
-   * @param warning
-   *          is this entry should be threat as warning.
-   * @param title
-   *          the title of the error.
-   * @param description
-   *          html-based description of the error.
-   */
-  public ErrorEntryInfo(int code, boolean warning, String title, String description) {
-    this(code, warning, title, description, null);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @param code
+	 *          the code of the error.
+	 * @param warning
+	 *          is this entry should be threat as warning.
+	 * @param title
+	 *          the title of the error.
+	 * @param description
+	 *          html-based description of the error.
+	 */
+	public ErrorEntryInfo(int code, boolean warning, String title, String description) {
+		this(code, warning, title, description, null);
+	}
 
-  /**
-   * @param code
-   *          the code of the error.
-   * @param warning
-   *          is this entry should be threat as warning.
-   * @param title
-   *          the title of the error.
-   * @param description
-   *          html-based description of the error.
-   * @param altDescription
-   *          plain-text description of the error (optional, can be <code>null</code>).
-   */
-  public ErrorEntryInfo(int code,
-      boolean warning,
-      String title,
-      String description,
-      String altDescription) {
-    m_code = code;
-    m_warning = warning;
-    m_title = title;
-    m_description = description;
-    m_altDescription = altDescription;
-  }
+	/**
+	 * @param code
+	 *          the code of the error.
+	 * @param warning
+	 *          is this entry should be threat as warning.
+	 * @param title
+	 *          the title of the error.
+	 * @param description
+	 *          html-based description of the error.
+	 * @param altDescription
+	 *          plain-text description of the error (optional, can be <code>null</code>).
+	 */
+	public ErrorEntryInfo(int code,
+			boolean warning,
+			String title,
+			String description,
+			String altDescription) {
+		m_code = code;
+		m_warning = warning;
+		m_title = title;
+		m_description = description;
+		m_altDescription = altDescription;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Getters
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public int getCode() {
-    return m_code;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Getters
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public int getCode() {
+		return m_code;
+	}
 
-  public boolean isWarning() {
-    return m_warning;
-  }
+	public boolean isWarning() {
+		return m_warning;
+	}
 
-  public String getTitle() {
-    return m_title;
-  }
+	public String getTitle() {
+		return m_title;
+	}
 
-  public String getDescription() {
-    return m_description;
-  }
+	public String getDescription() {
+		return m_description;
+	}
 
-  public String getAltDescription() {
-    return m_altDescription;
-  }
+	public String getAltDescription() {
+		return m_altDescription;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    return Integer.toString(getCode()) + ": " + getTitle();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		return Integer.toString(getCode()) + ": " + getTitle();
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/errors/ExceptionComposite.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/errors/ExceptionComposite.java
index 25289ee2e..3ce8457be 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/errors/ExceptionComposite.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/errors/ExceptionComposite.java
@@ -47,192 +47,192 @@
  * @coverage core.editor.errors
  */
 public abstract class ExceptionComposite extends Composite {
-  private Button m_switchButton;
-  private BrowserComposite m_browserComposite;
-  private Image m_screenshotImage;
-  private int m_sourcePosition;
-  private final boolean wbBasic;
+	private Button m_switchButton;
+	private BrowserComposite m_browserComposite;
+	private Image m_screenshotImage;
+	private int m_sourcePosition;
+	private final boolean wbBasic;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ExceptionComposite(Composite parent, int style) {
-    super(parent, style);
-    wbBasic = InstanceScope.INSTANCE.getNode(
-        IEditorPreferenceConstants.WB_BASIC_UI_PREFERENCE_NODE).getBoolean(
-            IEditorPreferenceConstants.WB_BASIC_UI,
-            true);
-    // create GUI elements
-    GridLayoutFactory.create(this);
-    {
-      Composite titleComposite = new Composite(this, SWT.NONE);
-      GridDataFactory.create(titleComposite).alignHL().grabH();
-      GridLayoutFactory.create(titleComposite).columns(2).margins(10);
-      {
-        Label label = new Label(titleComposite, SWT.NONE);
-        GridDataFactory.create(label).alignVM();
-        label.setImage(SwtResourceManager.getImage(SWT.ICON_ERROR));
-      }
-      {
-        Link label = new Link(titleComposite, SWT.WRAP | SWT.NO_FOCUS);
-        GridDataFactory.create(label).alignHL().grabH().alignVM();
-        label.setText(
-            MessageFormat.format(
-                Messages.ExceptionComposite_message,
-                BrandingUtils.getBranding().getProductName()));
-        label.addSelectionListener(new SelectionAdapter() {
-          @Override
-          public void widgetSelected(SelectionEvent event) {
-            IBrandingDescription branding = BrandingUtils.getBranding();
-            String url = null;
-            if ("bug tracking system".equals(event.text)) {
-              url = branding.getSupportInfo().getBugtrackingUrl();
-            } else if ("discussion group".equals(event.text)) {
-              url = branding.getSupportInfo().getForumUrl();
-            }
-            if (!StringUtils.isEmpty(url)) {
-              DesignerExceptionUtils.openBrowser(url);
-            }
-          }
-        });
-      }
-    }
-    {
-      m_browserComposite = new BrowserComposite(this, SWT.NONE);
-      GridDataFactory.create(m_browserComposite).grab().alignVF().alignHF();
-    }
-    {
-      Composite buttonsComposite = new Composite(this, SWT.NONE);
-      GridDataFactory.create(buttonsComposite).alignHR();
-      GridLayoutFactory.create(buttonsComposite).columns(3).equalColumns().marginsH(0);
-      {
-        Button contactSupportButton = new Button(buttonsComposite, SWT.NONE);
-        GridDataFactory.create(contactSupportButton).fillH();
-        contactSupportButton.setText(Messages.ExceptionComposite_reportButton);
-        contactSupportButton.setImage(
-            EnvironmentUtils.IS_MAC
-                ? null
-                : DesignerPlugin.getImage("actions/errors/support32.png"));
-        contactSupportButton.addSelectionListener(new SelectionAdapter() {
-          @Override
-          public void widgetSelected(SelectionEvent e) {
-            CreateReportDialog dialog =
-                new CreateReportDialog(getShell(), m_screenshotImage, getZipFileErrorReport());
-            dialog.open();
-          }
-        });
-        contactSupportButton.setVisible(!wbBasic);
-      }
-      {
-        Button refreshButton = new Button(buttonsComposite, SWT.NONE);
-        GridDataFactory.create(refreshButton).fillH();
-        refreshButton.setText(Messages.ExceptionComposite_reparseButton);
-        refreshButton.setImage(
-            EnvironmentUtils.IS_MAC
-                ? null
-                : DesignerPlugin.getImage("actions/errors/refresh32.png"));
-        refreshButton.addSelectionListener(new SelectionAdapter() {
-          @Override
-          public void widgetSelected(SelectionEvent e) {
-            doRefresh();
-          }
-        });
-        refreshButton.setVisible(!wbBasic);
-      }
-      {
-        m_switchButton = new Button(buttonsComposite, SWT.NONE);
-        GridDataFactory.create(m_switchButton).fillH();
-        m_switchButton.setText(Messages.ExceptionComposite_switchButton);
-        m_switchButton.addSelectionListener(new SelectionAdapter() {
-          @Override
-          public void widgetSelected(SelectionEvent ev) {
-            doShowSource(m_sourcePosition);
-          }
-        });
-        m_switchButton.setVisible(!wbBasic);
-      }
-    }
-    // dispose
-    addDisposeListener(e -> {
-      if (m_screenshotImage != null) {
-        m_screenshotImage.dispose();
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ExceptionComposite(Composite parent, int style) {
+		super(parent, style);
+		wbBasic = InstanceScope.INSTANCE.getNode(
+				IEditorPreferenceConstants.WB_BASIC_UI_PREFERENCE_NODE).getBoolean(
+						IEditorPreferenceConstants.WB_BASIC_UI,
+						true);
+		// create GUI elements
+		GridLayoutFactory.create(this);
+		{
+			Composite titleComposite = new Composite(this, SWT.NONE);
+			GridDataFactory.create(titleComposite).alignHL().grabH();
+			GridLayoutFactory.create(titleComposite).columns(2).margins(10);
+			{
+				Label label = new Label(titleComposite, SWT.NONE);
+				GridDataFactory.create(label).alignVM();
+				label.setImage(SwtResourceManager.getImage(SWT.ICON_ERROR));
+			}
+			{
+				Link label = new Link(titleComposite, SWT.WRAP | SWT.NO_FOCUS);
+				GridDataFactory.create(label).alignHL().grabH().alignVM();
+				label.setText(
+						MessageFormat.format(
+								Messages.ExceptionComposite_message,
+								BrandingUtils.getBranding().getProductName()));
+				label.addSelectionListener(new SelectionAdapter() {
+					@Override
+					public void widgetSelected(SelectionEvent event) {
+						IBrandingDescription branding = BrandingUtils.getBranding();
+						String url = null;
+						if ("bug tracking system".equals(event.text)) {
+							url = branding.getSupportInfo().getBugtrackingUrl();
+						} else if ("discussion group".equals(event.text)) {
+							url = branding.getSupportInfo().getForumUrl();
+						}
+						if (!StringUtils.isEmpty(url)) {
+							DesignerExceptionUtils.openBrowser(url);
+						}
+					}
+				});
+			}
+		}
+		{
+			m_browserComposite = new BrowserComposite(this, SWT.NONE);
+			GridDataFactory.create(m_browserComposite).grab().alignVF().alignHF();
+		}
+		{
+			Composite buttonsComposite = new Composite(this, SWT.NONE);
+			GridDataFactory.create(buttonsComposite).alignHR();
+			GridLayoutFactory.create(buttonsComposite).columns(3).equalColumns().marginsH(0);
+			{
+				Button contactSupportButton = new Button(buttonsComposite, SWT.NONE);
+				GridDataFactory.create(contactSupportButton).fillH();
+				contactSupportButton.setText(Messages.ExceptionComposite_reportButton);
+				contactSupportButton.setImage(
+						EnvironmentUtils.IS_MAC
+						? null
+								: DesignerPlugin.getImage("actions/errors/support32.png"));
+				contactSupportButton.addSelectionListener(new SelectionAdapter() {
+					@Override
+					public void widgetSelected(SelectionEvent e) {
+						CreateReportDialog dialog =
+								new CreateReportDialog(getShell(), m_screenshotImage, getZipFileErrorReport());
+						dialog.open();
+					}
+				});
+				contactSupportButton.setVisible(!wbBasic);
+			}
+			{
+				Button refreshButton = new Button(buttonsComposite, SWT.NONE);
+				GridDataFactory.create(refreshButton).fillH();
+				refreshButton.setText(Messages.ExceptionComposite_reparseButton);
+				refreshButton.setImage(
+						EnvironmentUtils.IS_MAC
+						? null
+								: DesignerPlugin.getImage("actions/errors/refresh32.png"));
+				refreshButton.addSelectionListener(new SelectionAdapter() {
+					@Override
+					public void widgetSelected(SelectionEvent e) {
+						doRefresh();
+					}
+				});
+				refreshButton.setVisible(!wbBasic);
+			}
+			{
+				m_switchButton = new Button(buttonsComposite, SWT.NONE);
+				GridDataFactory.create(m_switchButton).fillH();
+				m_switchButton.setText(Messages.ExceptionComposite_switchButton);
+				m_switchButton.addSelectionListener(new SelectionAdapter() {
+					@Override
+					public void widgetSelected(SelectionEvent ev) {
+						doShowSource(m_sourcePosition);
+					}
+				});
+				m_switchButton.setVisible(!wbBasic);
+			}
+		}
+		// dispose
+		addDisposeListener(e -> {
+			if (m_screenshotImage != null) {
+				m_screenshotImage.dispose();
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Source
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void updateForSourcePosition(Throwable e) {
-    m_sourcePosition = DesignerExceptionUtils.getSourcePosition(e);
-    boolean hasSourcePosition = m_sourcePosition != -1;
-    // text
-    if (hasSourcePosition) {
-      m_switchButton.setText(Messages.ExceptionComposite_goProblemButton);
-    } else {
-      m_switchButton.setText(Messages.ExceptionComposite_switchButton);
-    }
-    // image
-    if (!EnvironmentUtils.IS_MAC) {
-      Image image;
-      if (hasSourcePosition) {
-        image = DesignerPlugin.getImage("actions/errors/switch32locate.png");
-      } else {
-        image = DesignerPlugin.getImage("actions/errors/switch32.png");
-      }
-      m_switchButton.setImage(image);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Source
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void updateForSourcePosition(Throwable e) {
+		m_sourcePosition = DesignerExceptionUtils.getSourcePosition(e);
+		boolean hasSourcePosition = m_sourcePosition != -1;
+		// text
+		if (hasSourcePosition) {
+			m_switchButton.setText(Messages.ExceptionComposite_goProblemButton);
+		} else {
+			m_switchButton.setText(Messages.ExceptionComposite_switchButton);
+		}
+		// image
+		if (!EnvironmentUtils.IS_MAC) {
+			Image image;
+			if (hasSourcePosition) {
+				image = DesignerPlugin.getImage("actions/errors/switch32locate.png");
+			} else {
+				image = DesignerPlugin.getImage("actions/errors/switch32.png");
+			}
+			m_switchButton.setImage(image);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return new ZipFileErrorReport to be used by {@link CreateReportDialog}.
-   */
-  protected abstract ZipFileErrorReport getZipFileErrorReport();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return new ZipFileErrorReport to be used by {@link CreateReportDialog}.
+	 */
+	protected abstract ZipFileErrorReport getZipFileErrorReport();
 
-  /**
-   * Handles the 'switch to source' action.
-   *
-   * @param sourcePosition
-   *          the position in the source code to switch to.
-   */
-  protected abstract void doShowSource(int sourcePosition);
+	/**
+	 * Handles the 'switch to source' action.
+	 *
+	 * @param sourcePosition
+	 *          the position in the source code to switch to.
+	 */
+	protected abstract void doShowSource(int sourcePosition);
 
-  /**
-   * Handles the 'refresh' action.
-   */
-  protected abstract void doRefresh();
+	/**
+	 * Handles the 'refresh' action.
+	 */
+	protected abstract void doRefresh();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected final Image getScreenshotImage() {
-    return m_screenshotImage;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected final Image getScreenshotImage() {
+		return m_screenshotImage;
+	}
 
-  /**
-   * Sets the {@link Throwable} to display with additional information which may be included into
-   * problem report.
-   *
-   * @param e
-   *          the {@link Throwable} to display.
-   * @param screenshot
-   *          the {@link Image} of entire shell just before error. Can be <code>null</code> in case
-   *          of parse error when no screenshot need.
-   */
-  protected final void setException0(Throwable e, Image screenshot) {
-    m_screenshotImage = screenshot;
-    m_browserComposite.setText(DesignerExceptionUtils.getExceptionHTML(e));
-    updateForSourcePosition(e);
-  }
+	/**
+	 * Sets the {@link Throwable} to display with additional information which may be included into
+	 * problem report.
+	 *
+	 * @param e
+	 *          the {@link Throwable} to display.
+	 * @param screenshot
+	 *          the {@link Image} of entire shell just before error. Can be <code>null</code> in case
+	 *          of parse error when no screenshot need.
+	 */
+	protected final void setException0(Throwable e, Image screenshot) {
+		m_screenshotImage = screenshot;
+		m_browserComposite.setText(DesignerExceptionUtils.getExceptionHTML(e));
+		updateForSourcePosition(e);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/errors/ProxySettingDialog.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/errors/ProxySettingDialog.java
index 7c7811169..dc0d69c2f 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/errors/ProxySettingDialog.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/errors/ProxySettingDialog.java
@@ -33,123 +33,123 @@
  * @coverage core.editor.errors
  */
 public class ProxySettingDialog extends Dialog {
-  private static final String PROXY_SET = "http.proxySet";
-  private static final String PROXY_HOST = "http.proxyHost";
-  private static final String PROXY_PORT = "http.proxyPort";
-  private Text m_portText;
-  private Text m_addressText;
+	private static final String PROXY_SET = "http.proxySet";
+	private static final String PROXY_HOST = "http.proxyHost";
+	private static final String PROXY_PORT = "http.proxyPort";
+	private Text m_portText;
+	private Text m_addressText;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ProxySettingDialog(Shell parentShell) {
-    super(parentShell);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ProxySettingDialog(Shell parentShell) {
+		super(parentShell);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Contents
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Control createDialogArea(Composite parent) {
-    Composite area = (Composite) super.createDialogArea(parent);
-    Label hintLabel = new Label(area, SWT.NONE);
-    hintLabel.setText(Messages.ProxySettingDialog_hint);
-    {
-      Group group = new Group(area, SWT.NONE);
-      group.setText(Messages.ProxySettingDialog_groupText);
-      GridDataFactory.modify(group).grab().fill();
-      GridLayoutFactory.create(group).columns(2);
-      {
-        {
-          Label label = new Label(group, SWT.NONE);
-          label.setText(Messages.ProxySettingDialog_addressLabel);
-          m_addressText = new Text(group, SWT.BORDER);
-          m_addressText.setText(getSystemProperty(PROXY_HOST));
-          GridDataFactory.create(m_addressText).grabH().fillH();
-        }
-        {
-          Label label = new Label(group, SWT.NONE);
-          label.setText(Messages.ProxySettingDialog_portLabel);
-          m_portText = new Text(group, SWT.BORDER);
-          m_portText.setText(getSystemProperty(PROXY_PORT));
-          GridDataFactory.create(m_portText).grabH().fillH();
-        }
-      }
-    }
-    return area;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Contents
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Control createDialogArea(Composite parent) {
+		Composite area = (Composite) super.createDialogArea(parent);
+		Label hintLabel = new Label(area, SWT.NONE);
+		hintLabel.setText(Messages.ProxySettingDialog_hint);
+		{
+			Group group = new Group(area, SWT.NONE);
+			group.setText(Messages.ProxySettingDialog_groupText);
+			GridDataFactory.modify(group).grab().fill();
+			GridLayoutFactory.create(group).columns(2);
+			{
+				{
+					Label label = new Label(group, SWT.NONE);
+					label.setText(Messages.ProxySettingDialog_addressLabel);
+					m_addressText = new Text(group, SWT.BORDER);
+					m_addressText.setText(getSystemProperty(PROXY_HOST));
+					GridDataFactory.create(m_addressText).grabH().fillH();
+				}
+				{
+					Label label = new Label(group, SWT.NONE);
+					label.setText(Messages.ProxySettingDialog_portLabel);
+					m_portText = new Text(group, SWT.BORDER);
+					m_portText.setText(getSystemProperty(PROXY_PORT));
+					GridDataFactory.create(m_portText).grabH().fillH();
+				}
+			}
+		}
+		return area;
+	}
 
-  @Override
-  protected void configureShell(Shell newShell) {
-    super.configureShell(newShell);
-    newShell.setText(Messages.ProxySettingDialog_title);
-  }
+	@Override
+	protected void configureShell(Shell newShell) {
+		super.configureShell(newShell);
+		newShell.setText(Messages.ProxySettingDialog_title);
+	}
 
-  @Override
-  protected void okPressed() {
-    String addressString = m_addressText.getText().trim();
-    String portString = m_portText.getText().trim();
-    // user removing proxy settings
-    if (addressString.length() == 0 && portString.length() == 0) {
-      setSystemProperty(PROXY_SET, null);
-      setSystemProperty(PROXY_HOST, null);
-      setSystemProperty(PROXY_PORT, null);
-    } else {
-      // user sets proxy values
-      boolean allOK = false;
-      try {
-        int port = Integer.parseInt(portString);
-        allOK = port > 0 && port < 65536;
-      } catch (Throwable e) {
-        MessageDialog.openError(
-            getShell(),
-            Messages.ProxySettingDialog_errPortTitle,
-            Messages.ProxySettingDialog_errPortMessage);
-        return;
-      }
-      allOK = addressString.length() > 0;
-      if (!allOK) {
-        MessageDialog.openError(
-            getShell(),
-            Messages.ProxySettingDialog_errAddressTitle,
-            Messages.ProxySettingDialog_arrAddressMessage);
-        return;
-      }
-      setSystemProperty(PROXY_SET, "true");
-      setSystemProperty(PROXY_HOST, addressString);
-      setSystemProperty(PROXY_PORT, portString);
-    }
-    super.okPressed();
-  }
+	@Override
+	protected void okPressed() {
+		String addressString = m_addressText.getText().trim();
+		String portString = m_portText.getText().trim();
+		// user removing proxy settings
+		if (addressString.length() == 0 && portString.length() == 0) {
+			setSystemProperty(PROXY_SET, null);
+			setSystemProperty(PROXY_HOST, null);
+			setSystemProperty(PROXY_PORT, null);
+		} else {
+			// user sets proxy values
+			boolean allOK = false;
+			try {
+				int port = Integer.parseInt(portString);
+				allOK = port > 0 && port < 65536;
+			} catch (Throwable e) {
+				MessageDialog.openError(
+						getShell(),
+						Messages.ProxySettingDialog_errPortTitle,
+						Messages.ProxySettingDialog_errPortMessage);
+				return;
+			}
+			allOK = addressString.length() > 0;
+			if (!allOK) {
+				MessageDialog.openError(
+						getShell(),
+						Messages.ProxySettingDialog_errAddressTitle,
+						Messages.ProxySettingDialog_arrAddressMessage);
+				return;
+			}
+			setSystemProperty(PROXY_SET, "true");
+			setSystemProperty(PROXY_HOST, addressString);
+			setSystemProperty(PROXY_PORT, portString);
+		}
+		super.okPressed();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Helper utils
-   */
-  private static String getSystemProperty(String key) {
-    Object value = System.getProperties().get(key);
-    if (value instanceof String) {
-      return (String) value;
-    }
-    return null;
-    //return License.getLicenseFile().getValue(key);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Helper utils
+	 */
+	private static String getSystemProperty(String key) {
+		Object value = System.getProperties().get(key);
+		if (value instanceof String) {
+			return (String) value;
+		}
+		return null;
+		//return License.getLicenseFile().getValue(key);
+	}
 
-  private static void setSystemProperty(String key, String value) {
-    Properties properties = System.getProperties();
-    if (value != null && value.length() > 0) {
-      properties.setProperty(key, value);
-    } else {
-      properties.remove(key);
-    }
-    //License.getLicenseFile().putValue(key, value);
-  }
+	private static void setSystemProperty(String key, String value) {
+		Properties properties = System.getProperties();
+		if (value != null && value.length() > 0) {
+			properties.setProperty(key, value);
+		} else {
+			properties.remove(key);
+		}
+		//License.getLicenseFile().putValue(key, value);
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/errors/WarningComposite.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/errors/WarningComposite.java
index 60fb46a9f..2484b0ea0 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/errors/WarningComposite.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/errors/WarningComposite.java
@@ -38,137 +38,137 @@
  * @coverage core.editor.errors
  */
 public abstract class WarningComposite extends Composite {
-  private Button m_switchButton;
-  private final BrowserComposite m_browser;
-  private final Label m_titleLabel;
-  private int m_sourcePosition;
-  private final boolean wbBasic;
+	private Button m_switchButton;
+	private final BrowserComposite m_browser;
+	private final Label m_titleLabel;
+	private int m_sourcePosition;
+	private final boolean wbBasic;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public WarningComposite(Composite parent, int style) {
-    super(parent, style);
-    wbBasic = InstanceScope.INSTANCE.getNode(
-        IEditorPreferenceConstants.WB_BASIC_UI_PREFERENCE_NODE).getBoolean(
-            IEditorPreferenceConstants.WB_BASIC_UI,
-            true);
-    GridLayoutFactory.create(this);
-    {
-      Composite titleComposite = new Composite(this, SWT.NONE);
-      GridDataFactory.create(titleComposite).alignHL();
-      GridLayoutFactory.create(titleComposite).columns(2).margins(10);
-      {
-        Label label = new Label(titleComposite, SWT.NONE);
-        label.setImage(SwtResourceManager.getImage(SWT.ICON_WARNING));
-      }
-      {
-        m_titleLabel = new Label(titleComposite, SWT.NONE);
-        m_titleLabel.setFont(
-            SwtResourceManager.getFont(getFont().getFontData()[0].getName(), 14, SWT.BOLD));
-      }
-    }
-    {
-      m_browser = new BrowserComposite(this, SWT.NONE);
-      GridDataFactory.create(m_browser).grab().fill();
-    }
-    createButtons();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public WarningComposite(Composite parent, int style) {
+		super(parent, style);
+		wbBasic = InstanceScope.INSTANCE.getNode(
+				IEditorPreferenceConstants.WB_BASIC_UI_PREFERENCE_NODE).getBoolean(
+						IEditorPreferenceConstants.WB_BASIC_UI,
+						true);
+		GridLayoutFactory.create(this);
+		{
+			Composite titleComposite = new Composite(this, SWT.NONE);
+			GridDataFactory.create(titleComposite).alignHL();
+			GridLayoutFactory.create(titleComposite).columns(2).margins(10);
+			{
+				Label label = new Label(titleComposite, SWT.NONE);
+				label.setImage(SwtResourceManager.getImage(SWT.ICON_WARNING));
+			}
+			{
+				m_titleLabel = new Label(titleComposite, SWT.NONE);
+				m_titleLabel.setFont(
+						SwtResourceManager.getFont(getFont().getFontData()[0].getName(), 14, SWT.BOLD));
+			}
+		}
+		{
+			m_browser = new BrowserComposite(this, SWT.NONE);
+			GridDataFactory.create(m_browser).grab().fill();
+		}
+		createButtons();
+	}
 
-  protected void createButtons() {
-    Composite buttonsComposite = new Composite(this, SWT.NONE);
-    GridDataFactory.create(buttonsComposite).alignHR();
-    int numButtons = getNumButtons();
-    GridLayoutFactory.create(buttonsComposite).columns(numButtons).equalColumns().marginsH(0);
-    createButtons(buttonsComposite);
-  }
+	protected void createButtons() {
+		Composite buttonsComposite = new Composite(this, SWT.NONE);
+		GridDataFactory.create(buttonsComposite).alignHR();
+		int numButtons = getNumButtons();
+		GridLayoutFactory.create(buttonsComposite).columns(numButtons).equalColumns().marginsH(0);
+		createButtons(buttonsComposite);
+	}
 
-  protected void createButtons(Composite buttonsComposite) {
-    {
-      Button refreshButton = new Button(buttonsComposite, SWT.NONE);
-      GridDataFactory.create(refreshButton).fillH();
-      refreshButton.setText(Messages.WarningComposite_refreshButton);
-      refreshButton.setImage(
-          EnvironmentUtils.IS_MAC ? null : DesignerPlugin.getImage("actions/errors/refresh32.png"));
-      refreshButton.addSelectionListener(new SelectionAdapter() {
-        @Override
-        public void widgetSelected(SelectionEvent e) {
-          doRefresh();
-        }
-      });
-      refreshButton.setVisible(!wbBasic);
-    }
-    {
-      m_switchButton = new Button(buttonsComposite, SWT.NONE);
-      GridDataFactory.create(m_switchButton).fillH();
-      m_switchButton.setText(Messages.WarningComposite_switchButton);
-      m_switchButton.addSelectionListener(new SelectionAdapter() {
-        @Override
-        public void widgetSelected(SelectionEvent e) {
-          doShowSource(m_sourcePosition);
-        }
-      });
-      m_switchButton.setVisible(!wbBasic);
-    }
-  }
+	protected void createButtons(Composite buttonsComposite) {
+		{
+			Button refreshButton = new Button(buttonsComposite, SWT.NONE);
+			GridDataFactory.create(refreshButton).fillH();
+			refreshButton.setText(Messages.WarningComposite_refreshButton);
+			refreshButton.setImage(
+					EnvironmentUtils.IS_MAC ? null : DesignerPlugin.getImage("actions/errors/refresh32.png"));
+			refreshButton.addSelectionListener(new SelectionAdapter() {
+				@Override
+				public void widgetSelected(SelectionEvent e) {
+					doRefresh();
+				}
+			});
+			refreshButton.setVisible(!wbBasic);
+		}
+		{
+			m_switchButton = new Button(buttonsComposite, SWT.NONE);
+			GridDataFactory.create(m_switchButton).fillH();
+			m_switchButton.setText(Messages.WarningComposite_switchButton);
+			m_switchButton.addSelectionListener(new SelectionAdapter() {
+				@Override
+				public void widgetSelected(SelectionEvent e) {
+					doShowSource(m_sourcePosition);
+				}
+			});
+			m_switchButton.setVisible(!wbBasic);
+		}
+	}
 
-  protected int getNumButtons() {
-    return 2;
-  }
+	protected int getNumButtons() {
+		return 2;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Handles the 'refresh' action.
-   */
-  protected abstract void doRefresh();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Handles the 'refresh' action.
+	 */
+	protected abstract void doRefresh();
 
-  /**
-   * Handles the 'switch to source' action.
-   *
-   * @param sourcePosition
-   *          the position in the source code to switch to.
-   */
-  protected abstract void doShowSource(int sourcePosition);
+	/**
+	 * Handles the 'switch to source' action.
+	 *
+	 * @param sourcePosition
+	 *          the position in the source code to switch to.
+	 */
+	protected abstract void doShowSource(int sourcePosition);
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets the {@link Throwable} to display.
-   */
-  public void setException(Throwable e) {
-    ErrorEntryInfo entry = DesignerExceptionUtils.getErrorEntry(e);
-    m_titleLabel.setText(entry.getTitle());
-    m_browser.setText(DesignerExceptionUtils.getWarningHTML(entry));
-    updateForSourcePosition(e);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets the {@link Throwable} to display.
+	 */
+	public void setException(Throwable e) {
+		ErrorEntryInfo entry = DesignerExceptionUtils.getErrorEntry(e);
+		m_titleLabel.setText(entry.getTitle());
+		m_browser.setText(DesignerExceptionUtils.getWarningHTML(entry));
+		updateForSourcePosition(e);
+	}
 
-  private void updateForSourcePosition(Throwable e) {
-    m_sourcePosition = DesignerExceptionUtils.getSourcePosition(e);
-    boolean hasSourcePosition = m_sourcePosition != -1;
-    // text
-    if (hasSourcePosition) {
-      m_switchButton.setText(Messages.WarningComposite_goProblemButton);
-    } else {
-      m_switchButton.setText(Messages.WarningComposite_switchButton);
-    }
-    // image
-    if (!EnvironmentUtils.IS_MAC) {
-      Image image;
-      if (hasSourcePosition) {
-        image = DesignerPlugin.getImage("actions/errors/switch32locate.png");
-      } else {
-        image = DesignerPlugin.getImage("actions/errors/switch32.png");
-      }
-      m_switchButton.setImage(image);
-    }
-  }
+	private void updateForSourcePosition(Throwable e) {
+		m_sourcePosition = DesignerExceptionUtils.getSourcePosition(e);
+		boolean hasSourcePosition = m_sourcePosition != -1;
+		// text
+		if (hasSourcePosition) {
+			m_switchButton.setText(Messages.WarningComposite_goProblemButton);
+		} else {
+			m_switchButton.setText(Messages.WarningComposite_switchButton);
+		}
+		// image
+		if (!EnvironmentUtils.IS_MAC) {
+			Image image;
+			if (hasSourcePosition) {
+				image = DesignerPlugin.getImage("actions/errors/switch32locate.png");
+			} else {
+				image = DesignerPlugin.getImage("actions/errors/switch32.png");
+			}
+			m_switchButton.setImage(image);
+		}
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/errors/report2/CreateReportDialog.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/errors/report2/CreateReportDialog.java
index 537277f2e..fde1069d3 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/errors/report2/CreateReportDialog.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/errors/report2/CreateReportDialog.java
@@ -62,581 +62,581 @@
  * @coverage core.editor.errors.report2
  */
 public final class CreateReportDialog extends AbstractValidationTitleAreaDialog {
-  // report
-  private final ZipFileErrorReport m_errorReport;
-  // GUI
-  private Composite m_container;
-  private BooleanDialogField m_screenshotsField;
-  private Composite m_screenshotsComposite;
-  private BooleanDialogField m_filesField;
-  private Composite m_filesComposite;
-  private BooleanDialogField m_projectField;
-  private BooleanDialogField m_cuField;
-  private ProgressMonitorPart m_progressMonitorPart;
+	// report
+	private final ZipFileErrorReport m_errorReport;
+	// GUI
+	private Composite m_container;
+	private BooleanDialogField m_screenshotsField;
+	private Composite m_screenshotsComposite;
+	private BooleanDialogField m_filesField;
+	private Composite m_filesComposite;
+	private BooleanDialogField m_projectField;
+	private BooleanDialogField m_cuField;
+	private ProgressMonitorPart m_progressMonitorPart;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @param screenshot
-   *          the {@link Image} of entire shell just before error. Can be <code>null</code> in case
-   *          of parse error when no screenshot needed. Shouldn't be disposed here.
-   * @param errorReport
-   *          the error report to work with.
-   */
-  public CreateReportDialog(Shell parentShell, Image screenshot, ZipFileErrorReport errorReport) {
-    super(parentShell,
-        DesignerPlugin.getDefault(),
-        Messages.CreateReportDialog_title,
-        Messages.CreateReportDialog_message,
-        DesignerPlugin.getImage("actions/errors/support_banner.png"),
-        "");
-    m_errorReport = errorReport;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @param screenshot
+	 *          the {@link Image} of entire shell just before error. Can be <code>null</code> in case
+	 *          of parse error when no screenshot needed. Shouldn't be disposed here.
+	 * @param errorReport
+	 *          the error report to work with.
+	 */
+	public CreateReportDialog(Shell parentShell, Image screenshot, ZipFileErrorReport errorReport) {
+		super(parentShell,
+				DesignerPlugin.getDefault(),
+				Messages.CreateReportDialog_title,
+				Messages.CreateReportDialog_message,
+				DesignerPlugin.getImage("actions/errors/support_banner.png"),
+				"");
+		m_errorReport = errorReport;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Contents
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createControls(Composite container) {
-    m_container = container;
-    boolean addDefaultScreenshot = m_errorReport.hasDefaultScreenshot();
-    GridLayoutFactory.create(container).columns(1);
-    {
-      // group to add additional required and optional data (user info, hard&soft info, .log file and so on)
-      Group additionalDataGroup = new Group(container, SWT.NONE);
-      additionalDataGroup.setText(Messages.CreateReportDialog_additionalGroup);
-      GridDataFactory.create(additionalDataGroup).grabH().fillH();
-      GridLayoutFactory.create(additionalDataGroup).columns(2);
-      {
-        // create first column composite
-        Composite groupComposite1 = new Composite(additionalDataGroup, SWT.NONE);
-        GridDataFactory.create(groupComposite1).fillH().alignVT();
-        GridLayoutFactory.create(groupComposite1).columns(3).marginsH(0);
-        {
-          // Eclipse .log file
-          BooleanDialogField logInfoField = new BooleanDialogField(true);
-          doCreateBooleanField(
-              groupComposite1,
-              logInfoField,
-              Messages.CreateReportDialog_additionalLogs,
-              3);
-          selectAndDisable(groupComposite1, logInfoField);
-        }
-        {
-          // screenshots and link to add it
-          {
-            m_screenshotsField = new BooleanDialogField(true);
-            doCreateBooleanField(
-                groupComposite1,
-                m_screenshotsField,
-                Messages.CreateReportDialog_additionalScreenshots
-                    + (addDefaultScreenshot ? ":" : ""),
-                2);
-            GridDataFactory.modify(m_screenshotsField.getLabelControl(groupComposite1)).grabH();
-            // don't disable this control when no default screenshot
-            if (addDefaultScreenshot) {
-              m_screenshotsField.setSelection(true);
-            }
-            m_screenshotsField.setDialogFieldListener(new IDialogFieldListener() {
-              @Override
-              public void dialogFieldChanged(DialogField field) {
-                boolean fieldSelected = m_screenshotsField.getSelection();
-                GridDataFactory.modify(m_screenshotsComposite).exclude(!fieldSelected);
-                if (fieldSelected) {
-                  if (!addScreenshot()) {
-                    m_screenshotsField.setSelection(false);
-                  }
-                } else {
-                  removeAllScreenshots();
-                }
-              }
-            });
-          }
-          {
-            Link link = new Link(groupComposite1, SWT.NONE);
-            link.setText(Messages.CreateReportDialog_addLink);
-            GridDataFactory.create(link).alignHL().hintHC(link.getText().length());
-            link.addSelectionListener(new SelectionAdapter() {
-              @Override
-              public void widgetSelected(SelectionEvent e) {
-                if (addScreenshot()) {
-                  m_screenshotsField.setSelection(true);
-                }
-              }
-            });
-          }
-        }
-        {
-          m_screenshotsComposite = new Composite(groupComposite1, SWT.NONE);
-          GridDataFactory.create(m_screenshotsComposite).spanH(3).exclude(!addDefaultScreenshot);
-          GridLayoutFactory.create(m_screenshotsComposite).marginsH(10).marginsV(0).columns(2);
-          {
-            // default post-mortem screenshot
-            if (addDefaultScreenshot) {
-              selectAndDisable(
-                  m_screenshotsComposite,
-                  addDefaultScreenshotControl(m_screenshotsComposite));
-            }
-          }
-        }
-        {
-          m_cuField = new BooleanDialogField(true);
-          doCreateBooleanField(
-              groupComposite1,
-              m_cuField,
-              Messages.CreateReportDialog_additionalSourceFile,
-              3);
-          m_cuField.setDialogFieldListener(new IDialogFieldListener() {
-            @Override
-            public void dialogFieldChanged(DialogField field) {
-              m_errorReport.setIncludeSourceFile(m_cuField.getSelection());
-            }
-          });
-          if (!m_errorReport.hasSourceFile()) {
-            m_cuField.setSelection(false);
-            m_cuField.setEnabled(false);
-          } else {
-            m_cuField.setSelection(true);
-          }
-        }
-        {
-          m_projectField = new BooleanDialogField(true);
-          doCreateBooleanField(
-              groupComposite1,
-              m_projectField,
-              Messages.CreateReportDialog_additionalProject,
-              3);
-          m_projectField.setDialogFieldListener(new IDialogFieldListener() {
-            @Override
-            public void dialogFieldChanged(DialogField field) {
-              boolean selected = m_projectField.getSelection();
-              if (selected) {
-                // warn the user for huge size of report
-                boolean dialogResult =
-                    MessageDialog.openConfirm(
-                        getShell(),
-                        Messages.CreateReportDialog_additionalProjectTitle,
-                        Messages.CreateReportDialog_additionalProjectMessage);
-                if (dialogResult) {
-                  m_errorReport.setIncludeProject(selected);
-                  // we should set both "CU" and "project" mode
-                  m_cuField.setSelection(true);
-                  m_errorReport.setIncludeSourceFile(true);
-                } else {
-                  m_errorReport.setIncludeProject(false);
-                  m_projectField.setSelection(false);
-                }
-              }
-            }
-          });
-        }
-      }
-      // create column composite
-      Composite groupComposite2 = new Composite(additionalDataGroup, SWT.NONE);
-      GridDataFactory.create(groupComposite2).fillH().alignVT();
-      GridLayoutFactory.create(groupComposite2).columns(3).marginsH(0);
-      {
-        // hardware and software summary and link to view it
-        {
-          BooleanDialogField compInfoField = new BooleanDialogField(true);
-          doCreateBooleanField(
-              groupComposite2,
-              compInfoField,
-              Messages.CreateReportDialog_softHardSummary,
-              2);
-          selectAndDisable(groupComposite2, compInfoField);
-        }
-        {
-          Link link = new Link(groupComposite2, SWT.NONE);
-          link.setText(Messages.CreateReportDialog_viewLink);
-          GridDataFactory.create(link);
-          link.addSelectionListener(new SelectionAdapter() {
-            @Override
-            public void widgetSelected(SelectionEvent e) {
-              BrowserMessageDialog.openMessage(
-                  getShell(),
-                  Messages.CreateReportDialog_softHardSummaryTitle,
-                  m_errorReport.getComputerInfo());
-            }
-          });
-        }
-        {
-          // WindowBuilder preferences
-          BooleanDialogField preferencesInfoField = new BooleanDialogField(true);
-          doCreateBooleanField(
-              groupComposite2,
-              preferencesInfoField,
-              Messages.CreateReportDialog_preferences,
-              3);
-          selectAndDisable(groupComposite2, preferencesInfoField);
-        }
-        {
-          // filez ;) and link to add it
-          {
-            m_filesField = new BooleanDialogField(true);
-            doCreateBooleanField(
-                groupComposite2,
-                m_filesField,
-                Messages.CreateReportDialog_fileAttachments,
-                2);
-            m_filesField.setDialogFieldListener(new IDialogFieldListener() {
-              @Override
-              public void dialogFieldChanged(DialogField field) {
-                boolean fieldSelected = m_filesField.getSelection();
-                GridDataFactory.modify(m_filesComposite).exclude(!fieldSelected);
-                if (fieldSelected) {
-                  if (!addFile()) {
-                    m_filesField.setSelection(false);
-                  }
-                } else {
-                  removeAllFiles();
-                }
-              }
-            });
-          }
-          {
-            Link link = new Link(groupComposite2, SWT.NONE);
-            link.setText(Messages.CreateReportDialog_addLink);
-            GridDataFactory.create(link).alignHL();
-            link.addSelectionListener(new SelectionAdapter() {
-              @Override
-              public void widgetSelected(SelectionEvent e) {
-                if (addFile()) {
-                  m_filesField.setSelection(true);
-                }
-              }
-            });
-          }
-          {
-            m_filesComposite = new Composite(groupComposite2, SWT.NONE);
-            GridDataFactory.create(m_filesComposite).spanH(3).exclude(true);
-            GridLayoutFactory.create(m_filesComposite).marginsH(10).marginsV(0).columns(2);
-            m_filesComposite.setVisible(false);
-          }
-        }
-      }
-    }
-    {
-      GridLayout layout = new GridLayout();
-      layout.marginHeight = 0;
-      m_progressMonitorPart = new ProgressMonitorPart(container, layout);
-      GridDataFactory.modify(m_progressMonitorPart).alignHF();
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Contents
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createControls(Composite container) {
+		m_container = container;
+		boolean addDefaultScreenshot = m_errorReport.hasDefaultScreenshot();
+		GridLayoutFactory.create(container).columns(1);
+		{
+			// group to add additional required and optional data (user info, hard&soft info, .log file and so on)
+			Group additionalDataGroup = new Group(container, SWT.NONE);
+			additionalDataGroup.setText(Messages.CreateReportDialog_additionalGroup);
+			GridDataFactory.create(additionalDataGroup).grabH().fillH();
+			GridLayoutFactory.create(additionalDataGroup).columns(2);
+			{
+				// create first column composite
+				Composite groupComposite1 = new Composite(additionalDataGroup, SWT.NONE);
+				GridDataFactory.create(groupComposite1).fillH().alignVT();
+				GridLayoutFactory.create(groupComposite1).columns(3).marginsH(0);
+				{
+					// Eclipse .log file
+					BooleanDialogField logInfoField = new BooleanDialogField(true);
+					doCreateBooleanField(
+							groupComposite1,
+							logInfoField,
+							Messages.CreateReportDialog_additionalLogs,
+							3);
+					selectAndDisable(groupComposite1, logInfoField);
+				}
+				{
+					// screenshots and link to add it
+					{
+						m_screenshotsField = new BooleanDialogField(true);
+						doCreateBooleanField(
+								groupComposite1,
+								m_screenshotsField,
+								Messages.CreateReportDialog_additionalScreenshots
+								+ (addDefaultScreenshot ? ":" : ""),
+								2);
+						GridDataFactory.modify(m_screenshotsField.getLabelControl(groupComposite1)).grabH();
+						// don't disable this control when no default screenshot
+						if (addDefaultScreenshot) {
+							m_screenshotsField.setSelection(true);
+						}
+						m_screenshotsField.setDialogFieldListener(new IDialogFieldListener() {
+							@Override
+							public void dialogFieldChanged(DialogField field) {
+								boolean fieldSelected = m_screenshotsField.getSelection();
+								GridDataFactory.modify(m_screenshotsComposite).exclude(!fieldSelected);
+								if (fieldSelected) {
+									if (!addScreenshot()) {
+										m_screenshotsField.setSelection(false);
+									}
+								} else {
+									removeAllScreenshots();
+								}
+							}
+						});
+					}
+					{
+						Link link = new Link(groupComposite1, SWT.NONE);
+						link.setText(Messages.CreateReportDialog_addLink);
+						GridDataFactory.create(link).alignHL().hintHC(link.getText().length());
+						link.addSelectionListener(new SelectionAdapter() {
+							@Override
+							public void widgetSelected(SelectionEvent e) {
+								if (addScreenshot()) {
+									m_screenshotsField.setSelection(true);
+								}
+							}
+						});
+					}
+				}
+				{
+					m_screenshotsComposite = new Composite(groupComposite1, SWT.NONE);
+					GridDataFactory.create(m_screenshotsComposite).spanH(3).exclude(!addDefaultScreenshot);
+					GridLayoutFactory.create(m_screenshotsComposite).marginsH(10).marginsV(0).columns(2);
+					{
+						// default post-mortem screenshot
+						if (addDefaultScreenshot) {
+							selectAndDisable(
+									m_screenshotsComposite,
+									addDefaultScreenshotControl(m_screenshotsComposite));
+						}
+					}
+				}
+				{
+					m_cuField = new BooleanDialogField(true);
+					doCreateBooleanField(
+							groupComposite1,
+							m_cuField,
+							Messages.CreateReportDialog_additionalSourceFile,
+							3);
+					m_cuField.setDialogFieldListener(new IDialogFieldListener() {
+						@Override
+						public void dialogFieldChanged(DialogField field) {
+							m_errorReport.setIncludeSourceFile(m_cuField.getSelection());
+						}
+					});
+					if (!m_errorReport.hasSourceFile()) {
+						m_cuField.setSelection(false);
+						m_cuField.setEnabled(false);
+					} else {
+						m_cuField.setSelection(true);
+					}
+				}
+				{
+					m_projectField = new BooleanDialogField(true);
+					doCreateBooleanField(
+							groupComposite1,
+							m_projectField,
+							Messages.CreateReportDialog_additionalProject,
+							3);
+					m_projectField.setDialogFieldListener(new IDialogFieldListener() {
+						@Override
+						public void dialogFieldChanged(DialogField field) {
+							boolean selected = m_projectField.getSelection();
+							if (selected) {
+								// warn the user for huge size of report
+								boolean dialogResult =
+										MessageDialog.openConfirm(
+												getShell(),
+												Messages.CreateReportDialog_additionalProjectTitle,
+												Messages.CreateReportDialog_additionalProjectMessage);
+								if (dialogResult) {
+									m_errorReport.setIncludeProject(selected);
+									// we should set both "CU" and "project" mode
+									m_cuField.setSelection(true);
+									m_errorReport.setIncludeSourceFile(true);
+								} else {
+									m_errorReport.setIncludeProject(false);
+									m_projectField.setSelection(false);
+								}
+							}
+						}
+					});
+				}
+			}
+			// create column composite
+			Composite groupComposite2 = new Composite(additionalDataGroup, SWT.NONE);
+			GridDataFactory.create(groupComposite2).fillH().alignVT();
+			GridLayoutFactory.create(groupComposite2).columns(3).marginsH(0);
+			{
+				// hardware and software summary and link to view it
+				{
+					BooleanDialogField compInfoField = new BooleanDialogField(true);
+					doCreateBooleanField(
+							groupComposite2,
+							compInfoField,
+							Messages.CreateReportDialog_softHardSummary,
+							2);
+					selectAndDisable(groupComposite2, compInfoField);
+				}
+				{
+					Link link = new Link(groupComposite2, SWT.NONE);
+					link.setText(Messages.CreateReportDialog_viewLink);
+					GridDataFactory.create(link);
+					link.addSelectionListener(new SelectionAdapter() {
+						@Override
+						public void widgetSelected(SelectionEvent e) {
+							BrowserMessageDialog.openMessage(
+									getShell(),
+									Messages.CreateReportDialog_softHardSummaryTitle,
+									m_errorReport.getComputerInfo());
+						}
+					});
+				}
+				{
+					// WindowBuilder preferences
+					BooleanDialogField preferencesInfoField = new BooleanDialogField(true);
+					doCreateBooleanField(
+							groupComposite2,
+							preferencesInfoField,
+							Messages.CreateReportDialog_preferences,
+							3);
+					selectAndDisable(groupComposite2, preferencesInfoField);
+				}
+				{
+					// filez ;) and link to add it
+					{
+						m_filesField = new BooleanDialogField(true);
+						doCreateBooleanField(
+								groupComposite2,
+								m_filesField,
+								Messages.CreateReportDialog_fileAttachments,
+								2);
+						m_filesField.setDialogFieldListener(new IDialogFieldListener() {
+							@Override
+							public void dialogFieldChanged(DialogField field) {
+								boolean fieldSelected = m_filesField.getSelection();
+								GridDataFactory.modify(m_filesComposite).exclude(!fieldSelected);
+								if (fieldSelected) {
+									if (!addFile()) {
+										m_filesField.setSelection(false);
+									}
+								} else {
+									removeAllFiles();
+								}
+							}
+						});
+					}
+					{
+						Link link = new Link(groupComposite2, SWT.NONE);
+						link.setText(Messages.CreateReportDialog_addLink);
+						GridDataFactory.create(link).alignHL();
+						link.addSelectionListener(new SelectionAdapter() {
+							@Override
+							public void widgetSelected(SelectionEvent e) {
+								if (addFile()) {
+									m_filesField.setSelection(true);
+								}
+							}
+						});
+					}
+					{
+						m_filesComposite = new Composite(groupComposite2, SWT.NONE);
+						GridDataFactory.create(m_filesComposite).spanH(3).exclude(true);
+						GridLayoutFactory.create(m_filesComposite).marginsH(10).marginsV(0).columns(2);
+						m_filesComposite.setVisible(false);
+					}
+				}
+			}
+		}
+		{
+			GridLayout layout = new GridLayout();
+			layout.marginHeight = 0;
+			m_progressMonitorPart = new ProgressMonitorPart(container, layout);
+			GridDataFactory.modify(m_progressMonitorPart).alignHF();
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Listener handlers
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Opens {@link FileDialog} for selecting screenshot file, then if selected adds screenshot
-   * control onto screenshots composite, marks as selected and lays out dialog composite.
-   */
-  private boolean addScreenshot() {
-    FileDialog fileDialog = new FileDialog(getShell(), SWT.OPEN);
-    fileDialog.setFilterExtensions(new String[]{"*.png", "*.jpg", "*.bmp", "*.tiff", "*.tga"});
-    String fileName = fileDialog.open();
-    if (fileName != null) {
-      if (!m_errorReport.hasScreenshot(fileName)) {
-        m_errorReport.includeScreenshot(fileName, true);
-        m_screenshotsComposite.setVisible(true);
-        GridDataFactory.modify(m_screenshotsComposite).exclude(false);
-        addScreenshotControl(fileName);
-      }
-      return true;
-    }
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Listener handlers
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Opens {@link FileDialog} for selecting screenshot file, then if selected adds screenshot
+	 * control onto screenshots composite, marks as selected and lays out dialog composite.
+	 */
+	private boolean addScreenshot() {
+		FileDialog fileDialog = new FileDialog(getShell(), SWT.OPEN);
+		fileDialog.setFilterExtensions(new String[]{"*.png", "*.jpg", "*.bmp", "*.tiff", "*.tga"});
+		String fileName = fileDialog.open();
+		if (fileName != null) {
+			if (!m_errorReport.hasScreenshot(fileName)) {
+				m_errorReport.includeScreenshot(fileName, true);
+				m_screenshotsComposite.setVisible(true);
+				GridDataFactory.modify(m_screenshotsComposite).exclude(false);
+				addScreenshotControl(fileName);
+			}
+			return true;
+		}
+		return false;
+	}
 
-  /**
-   * Removes all user screenshots from being sent list.
-   */
-  private void removeAllScreenshots() {
-    removeAllControls(m_screenshotsComposite);
-    m_errorReport.setupScreenshots();
-    GridDataFactory.modify(m_screenshotsComposite).exclude(true);
-    m_screenshotsComposite.setVisible(false);
-    m_container.layout(true, true);
-  }
+	/**
+	 * Removes all user screenshots from being sent list.
+	 */
+	private void removeAllScreenshots() {
+		removeAllControls(m_screenshotsComposite);
+		m_errorReport.setupScreenshots();
+		GridDataFactory.modify(m_screenshotsComposite).exclude(true);
+		m_screenshotsComposite.setVisible(false);
+		m_container.layout(true, true);
+	}
 
-  /**
-   * Opens {@link FileDialog} for selecting file, then if selected adds file control onto files
-   * composite, marks as selected and lays out dialog composite.
-   */
-  private boolean addFile() {
-    FileDialog fileDialog = new FileDialog(getShell(), SWT.OPEN);
-    fileDialog.setFilterExtensions(new String[]{"*.*"});
-    String fileName = fileDialog.open();
-    if (fileName != null) {
-      if (!m_errorReport.hasFile(fileName)) {
-        m_errorReport.includeFile(fileName, true);
-        m_filesComposite.setVisible(true);
-        GridDataFactory.modify(m_filesComposite).exclude(false);
-        addFileControl(fileName);
-      }
-      return true;
-    }
-    return false;
-  }
+	/**
+	 * Opens {@link FileDialog} for selecting file, then if selected adds file control onto files
+	 * composite, marks as selected and lays out dialog composite.
+	 */
+	private boolean addFile() {
+		FileDialog fileDialog = new FileDialog(getShell(), SWT.OPEN);
+		fileDialog.setFilterExtensions(new String[]{"*.*"});
+		String fileName = fileDialog.open();
+		if (fileName != null) {
+			if (!m_errorReport.hasFile(fileName)) {
+				m_errorReport.includeFile(fileName, true);
+				m_filesComposite.setVisible(true);
+				GridDataFactory.modify(m_filesComposite).exclude(false);
+				addFileControl(fileName);
+			}
+			return true;
+		}
+		return false;
+	}
 
-  /**
-   * Removes all files from being sent list.
-   */
-  private void removeAllFiles() {
-    removeAllControls(m_filesComposite);
-    m_errorReport.setupFiles();
-    GridDataFactory.modify(m_filesComposite).exclude(true);
-    m_filesComposite.setVisible(false);
-    m_container.layout(true, true);
-  }
+	/**
+	 * Removes all files from being sent list.
+	 */
+	private void removeAllFiles() {
+		removeAllControls(m_filesComposite);
+		m_errorReport.setupFiles();
+		GridDataFactory.modify(m_filesComposite).exclude(true);
+		m_filesComposite.setVisible(false);
+		m_container.layout(true, true);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Marks given boolean field as selected and disables button control.
-   */
-  private void selectAndDisable(Composite parent, BooleanDialogField booleanField) {
-    booleanField.setSelection(true);
-    booleanField.getButtonControl(parent).setEnabled(false);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Marks given boolean field as selected and disables button control.
+	 */
+	private void selectAndDisable(Composite parent, BooleanDialogField booleanField) {
+		booleanField.setSelection(true);
+		booleanField.getButtonControl(parent).setEnabled(false);
+	}
 
-  /**
-   * Adds {@link BooleanDialogField} instance representing added screenshot.
-   *
-   * @param filePath
-   *          a full path to screenshot file.
-   * @return the {@link BooleanDialogField} representing added screenshot.
-   */
-  private BooleanDialogField addScreenshotControl(final String filePath) {
-    final BooleanDialogField dialogField = addControl(m_screenshotsComposite, filePath);
-    dialogField.setDialogFieldListener(new IDialogFieldListener() {
-      @Override
-      public void dialogFieldChanged(DialogField field) {
-        m_errorReport.includeScreenshot(filePath, dialogField.getSelection());
-      }
-    });
-    return dialogField;
-  }
+	/**
+	 * Adds {@link BooleanDialogField} instance representing added screenshot.
+	 *
+	 * @param filePath
+	 *          a full path to screenshot file.
+	 * @return the {@link BooleanDialogField} representing added screenshot.
+	 */
+	private BooleanDialogField addScreenshotControl(final String filePath) {
+		final BooleanDialogField dialogField = addControl(m_screenshotsComposite, filePath);
+		dialogField.setDialogFieldListener(new IDialogFieldListener() {
+			@Override
+			public void dialogFieldChanged(DialogField field) {
+				m_errorReport.includeScreenshot(filePath, dialogField.getSelection());
+			}
+		});
+		return dialogField;
+	}
 
-  /**
-   * Adds {@link BooleanDialogField} instance representing added file.
-   *
-   * @param filePath
-   *          a full path to file.
-   * @return the {@link BooleanDialogField} representing added file.
-   */
-  private BooleanDialogField addFileControl(final String filePath) {
-    final BooleanDialogField dialogField = addControl(m_filesComposite, filePath);
-    dialogField.setDialogFieldListener(new IDialogFieldListener() {
-      @Override
-      public void dialogFieldChanged(DialogField field) {
-        m_errorReport.includeFile(filePath, dialogField.getSelection());
-      }
-    });
-    return dialogField;
-  }
+	/**
+	 * Adds {@link BooleanDialogField} instance representing added file.
+	 *
+	 * @param filePath
+	 *          a full path to file.
+	 * @return the {@link BooleanDialogField} representing added file.
+	 */
+	private BooleanDialogField addFileControl(final String filePath) {
+		final BooleanDialogField dialogField = addControl(m_filesComposite, filePath);
+		dialogField.setDialogFieldListener(new IDialogFieldListener() {
+			@Override
+			public void dialogFieldChanged(DialogField field) {
+				m_errorReport.includeFile(filePath, dialogField.getSelection());
+			}
+		});
+		return dialogField;
+	}
 
-  /**
-   * Creates {@link BooleanDialogField}, selects it and make container to do layout.
-   */
-  private BooleanDialogField addControl(Composite parent, String filePath) {
-    BooleanDialogField selectableField = new BooleanDialogField(true);
-    selectableField.setSelection(true);
-    doCreateBooleanField(parent, selectableField, FilenameUtils.getName(filePath), 2);
-    m_container.layout(true, true);
-    return selectableField;
-  }
+	/**
+	 * Creates {@link BooleanDialogField}, selects it and make container to do layout.
+	 */
+	private BooleanDialogField addControl(Composite parent, String filePath) {
+		BooleanDialogField selectableField = new BooleanDialogField(true);
+		selectableField.setSelection(true);
+		doCreateBooleanField(parent, selectableField, FilenameUtils.getName(filePath), 2);
+		m_container.layout(true, true);
+		return selectableField;
+	}
 
-  /**
-   * Deletes all entries from parent.
-   */
-  protected void removeAllControls(Composite parent) {
-    for (Control control : parent.getChildren()) {
-      control.dispose();
-    }
-  }
+	/**
+	 * Deletes all entries from parent.
+	 */
+	protected void removeAllControls(Composite parent) {
+		for (Control control : parent.getChildren()) {
+			control.dispose();
+		}
+	}
 
-  /**
-   * Adds {@link BooleanDialogField} instance representing default post-mortem screenshot.
-   *
-   * @return the {@link BooleanDialogField} representing post-mortem screenshot.
-   */
-  private BooleanDialogField addDefaultScreenshotControl(Composite parent) {
-    BooleanDialogField screenShotField = new BooleanDialogField(true);
-    doCreateBooleanField(
-        parent,
-        screenShotField,
-        Messages.CreateReportDialog_beforeErrorScreenshot,
-        2);
-    return screenShotField;
-  }
+	/**
+	 * Adds {@link BooleanDialogField} instance representing default post-mortem screenshot.
+	 *
+	 * @return the {@link BooleanDialogField} representing post-mortem screenshot.
+	 */
+	private BooleanDialogField addDefaultScreenshotControl(Composite parent) {
+		BooleanDialogField screenShotField = new BooleanDialogField(true);
+		doCreateBooleanField(
+				parent,
+				screenShotField,
+				Messages.CreateReportDialog_beforeErrorScreenshot,
+				2);
+		return screenShotField;
+	}
 
-  /**
-   * Configures given {@link DialogField} for specific of this dialog.
-   */
-  protected final void doCreateField(Composite fieldsContainer,
-      DialogField dialogField,
-      String labelText,
-      int chars) {
-    dialogField.setLabelText(labelText);
-    dialogField.setDialogFieldListener(m_validateListener);
-    DialogFieldUtils.fillControls(fieldsContainer, dialogField, 2, chars);
-  }
+	/**
+	 * Configures given {@link DialogField} for specific of this dialog.
+	 */
+	protected final void doCreateField(Composite fieldsContainer,
+			DialogField dialogField,
+			String labelText,
+			int chars) {
+		dialogField.setLabelText(labelText);
+		dialogField.setDialogFieldListener(m_validateListener);
+		DialogFieldUtils.fillControls(fieldsContainer, dialogField, 2, chars);
+	}
 
-  protected final void doCreateBooleanField(Composite fieldsContainer,
-      DialogField dialogField,
-      String labelText,
-      int columns) {
-    dialogField.setLabelText(labelText);
-    dialogField.setDialogFieldListener(m_validateListener);
-    dialogField.doFillIntoGrid(fieldsContainer, columns);
-  }
+	protected final void doCreateBooleanField(Composite fieldsContainer,
+			DialogField dialogField,
+			String labelText,
+			int columns) {
+		dialogField.setLabelText(labelText);
+		dialogField.setDialogFieldListener(m_validateListener);
+		dialogField.doFillIntoGrid(fieldsContainer, columns);
+	}
 
-  /**
-   * Disposes the main dialog content, shows success messages.
-   */
-  private void showSuccessMessage() {
-    // turn cancel to close
-    Button cancelButton = getButton(IDialogConstants.CANCEL_ID);
-    cancelButton.setText(IDialogConstants.CLOSE_LABEL);
-    // remove all dialog contents
-    Composite containerParent = m_container.getParent();
-    m_container.dispose();
-    // prepare success contents
-    Composite successComposite = new Composite(containerParent, SWT.NONE);
-    GridDataFactory.create(successComposite).grab().fill();
-    GridLayoutFactory.create(successComposite);
-    {
-      Label successLabel = new Label(successComposite, SWT.NONE);
-      // TODO: add link to proper bug-tracking system.
-      successLabel.setText(Messages.CreateReportDialog_successLabel);
-      GridDataFactory.create(successLabel).grab().alignVB().alignHC();
-    }
-    {
-      Label successLabel = new Label(successComposite, SWT.NONE);
-      successLabel.setText(Messages.CreateReportDialog_pressClosebutton);
-      GridDataFactory.create(successLabel).grab().alignVT().alignHC();
-    }
-    containerParent.layout(true, true);
-    String message = Messages.CreateReportDialog_successMessage;
-    setMessage(message, IMessageProvider.INFORMATION);
-    setTitle(Messages.CreateReportDialog_successTitle);
-  }
+	/**
+	 * Disposes the main dialog content, shows success messages.
+	 */
+	private void showSuccessMessage() {
+		// turn cancel to close
+		Button cancelButton = getButton(IDialogConstants.CANCEL_ID);
+		cancelButton.setText(IDialogConstants.CLOSE_LABEL);
+		// remove all dialog contents
+		Composite containerParent = m_container.getParent();
+		m_container.dispose();
+		// prepare success contents
+		Composite successComposite = new Composite(containerParent, SWT.NONE);
+		GridDataFactory.create(successComposite).grab().fill();
+		GridLayoutFactory.create(successComposite);
+		{
+			Label successLabel = new Label(successComposite, SWT.NONE);
+			// TODO: add link to proper bug-tracking system.
+			successLabel.setText(Messages.CreateReportDialog_successLabel);
+			GridDataFactory.create(successLabel).grab().alignVB().alignHC();
+		}
+		{
+			Label successLabel = new Label(successComposite, SWT.NONE);
+			successLabel.setText(Messages.CreateReportDialog_pressClosebutton);
+			GridDataFactory.create(successLabel).grab().alignVT().alignHC();
+		}
+		containerParent.layout(true, true);
+		String message = Messages.CreateReportDialog_successMessage;
+		setMessage(message, IMessageProvider.INFORMATION);
+		setTitle(Messages.CreateReportDialog_successTitle);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // OK button
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void okPressed() {
-    Button cancelButton = getButton(IDialogConstants.CANCEL_ID);
-    Button okButton = getButton(IDialogConstants.OK_ID);
-    m_progressMonitorPart.attachToCancelComponent(cancelButton);
-    okButton.setEnabled(false);
-    try {
-      m_errorReport.reportProblem(m_progressMonitorPart);
-    } catch (Throwable e) {
-      okButton.setEnabled(true);
-      // show error
-      showError(e);
-      // exit
-      return;
-    } finally {
-      // anyway done monitor
-      m_progressMonitorPart.done();
-      m_progressMonitorPart.removeFromCancelComponent(cancelButton);
-    }
-    showSuccessMessage();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// OK button
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void okPressed() {
+		Button cancelButton = getButton(IDialogConstants.CANCEL_ID);
+		Button okButton = getButton(IDialogConstants.OK_ID);
+		m_progressMonitorPart.attachToCancelComponent(cancelButton);
+		okButton.setEnabled(false);
+		try {
+			m_errorReport.reportProblem(m_progressMonitorPart);
+		} catch (Throwable e) {
+			okButton.setEnabled(true);
+			// show error
+			showError(e);
+			// exit
+			return;
+		} finally {
+			// anyway done monitor
+			m_progressMonitorPart.done();
+			m_progressMonitorPart.removeFromCancelComponent(cancelButton);
+		}
+		showSuccessMessage();
+	}
 
-  private void showError(final Throwable e) {
-    Status status =
-        new Status(IStatus.ERROR,
-            DesignerPlugin.getDefault().toString(),
-            IStatus.ERROR,
-            Messages.CreateReportDialog_errorUseDetails,
-            e);
-    ErrorDialog dialog =
-        new ErrorDialog(DesignerPlugin.getShell(), Messages.CreateReportDialog_errorTitle,
-            Messages.CreateReportDialog_errorMessage, status, IStatus.ERROR) {
-          private Clipboard clipboard;
+	private void showError(final Throwable e) {
+		Status status =
+				new Status(IStatus.ERROR,
+						DesignerPlugin.getDefault().toString(),
+						IStatus.ERROR,
+						Messages.CreateReportDialog_errorUseDetails,
+						e);
+		ErrorDialog dialog =
+				new ErrorDialog(DesignerPlugin.getShell(), Messages.CreateReportDialog_errorTitle,
+						Messages.CreateReportDialog_errorMessage, status, IStatus.ERROR) {
+			private Clipboard clipboard;
 
-          @Override
-          protected List createDropDownList(Composite parent) {
-            final List list = super.createDropDownList(parent);
-            list.removeAll();
-            // populate list using custom PrintWriter
-            PrintWriter printWriter = new PrintWriter(new Writer() {
-              @Override
-              public void write(char[] cbuf, int off, int len) throws IOException {
-                if (len != 2 && !(cbuf[0] == '\r' || cbuf[0] == '\n')) {
-                  list.add(StringUtils.replace(new String(cbuf, off, len), "\t", "    "));
-                }
-              }
+			@Override
+			protected List createDropDownList(Composite parent) {
+				final List list = super.createDropDownList(parent);
+				list.removeAll();
+				// populate list using custom PrintWriter
+				PrintWriter printWriter = new PrintWriter(new Writer() {
+					@Override
+					public void write(char[] cbuf, int off, int len) throws IOException {
+						if (len != 2 && !(cbuf[0] == '\r' || cbuf[0] == '\n')) {
+							list.add(StringUtils.replace(new String(cbuf, off, len), "\t", "    "));
+						}
+					}
 
-              @Override
-              public void flush() throws IOException {
-              }
+					@Override
+					public void flush() throws IOException {
+					}
 
-              @Override
-              public void close() throws IOException {
-              }
-            });
-            e.printStackTrace(printWriter);
-            // install own context menu
-            Menu menu = list.getMenu();
-            menu.dispose();
-            Menu copyMenu = new Menu(list);
-            MenuItem copyItem = new MenuItem(copyMenu, SWT.NONE);
-            copyItem.setText(Messages.CreateReportDialog_copyAction);
-            copyItem.addSelectionListener(new SelectionListener() {
-              @Override
-              public void widgetSelected(@SuppressWarnings("hiding") SelectionEvent e) {
-                copyList(list);
-              }
+					@Override
+					public void close() throws IOException {
+					}
+				});
+				e.printStackTrace(printWriter);
+				// install own context menu
+				Menu menu = list.getMenu();
+				menu.dispose();
+				Menu copyMenu = new Menu(list);
+				MenuItem copyItem = new MenuItem(copyMenu, SWT.NONE);
+				copyItem.setText(Messages.CreateReportDialog_copyAction);
+				copyItem.addSelectionListener(new SelectionListener() {
+					@Override
+					public void widgetSelected(@SuppressWarnings("hiding") SelectionEvent e) {
+						copyList(list);
+					}
 
-              @Override
-              public void widgetDefaultSelected(@SuppressWarnings("hiding") SelectionEvent e) {
-                copyList(list);
-              }
-            });
-            list.setMenu(copyMenu);
-            return list;
-          }
+					@Override
+					public void widgetDefaultSelected(@SuppressWarnings("hiding") SelectionEvent e) {
+						copyList(list);
+					}
+				});
+				list.setMenu(copyMenu);
+				return list;
+			}
 
-          private void copyList(List list) {
-            if (clipboard != null) {
-              clipboard.dispose();
-            }
-            StringBuffer statusBuffer = new StringBuffer();
-            for (int i = 0; i < list.getItemCount(); ++i) {
-              statusBuffer.append(list.getItem(i));
-              statusBuffer.append("\r\n");
-            }
-            clipboard = new Clipboard(list.getDisplay());
-            clipboard.setContents(
-                new Object[]{statusBuffer.toString()},
-                new Transfer[]{TextTransfer.getInstance()});
-          }
+			private void copyList(List list) {
+				if (clipboard != null) {
+					clipboard.dispose();
+				}
+				StringBuffer statusBuffer = new StringBuffer();
+				for (int i = 0; i < list.getItemCount(); ++i) {
+					statusBuffer.append(list.getItem(i));
+					statusBuffer.append("\r\n");
+				}
+				clipboard = new Clipboard(list.getDisplay());
+				clipboard.setContents(
+						new Object[]{statusBuffer.toString()},
+						new Transfer[]{TextTransfer.getInstance()});
+			}
 
-          @Override
-          public boolean close() {
-            if (clipboard != null) {
-              clipboard.dispose();
-            }
-            return super.close();
-          }
-        };
-    dialog.open();
-  }
+			@Override
+			public boolean close() {
+				if (clipboard != null) {
+					clipboard.dispose();
+				}
+				return super.close();
+			}
+		};
+		dialog.open();
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/errors/report2/EclipseLogEntryFileReportInfo.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/errors/report2/EclipseLogEntryFileReportInfo.java
index 456a1df86..96635a77e 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/errors/report2/EclipseLogEntryFileReportInfo.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/errors/report2/EclipseLogEntryFileReportInfo.java
@@ -41,252 +41,252 @@
  * @coverage core.editor.errors.report2
  */
 public final class EclipseLogEntryFileReportInfo extends FileReportEntry {
-  // constants
-  protected static final String ENTRY = "!ENTRY"; //$NON-NLS-1$
-  protected static final String SUBENTRY = "!SUBENTRY"; //$NON-NLS-1$
-  protected static final String MESSAGE = "!MESSAGE"; //$NON-NLS-1$
-  protected static final String STACK = "!STACK"; //$NON-NLS-1$
-  // fields
-  private Writer m_writer;
+	// constants
+	protected static final String ENTRY = "!ENTRY"; //$NON-NLS-1$
+	protected static final String SUBENTRY = "!SUBENTRY"; //$NON-NLS-1$
+	protected static final String MESSAGE = "!MESSAGE"; //$NON-NLS-1$
+	protected static final String STACK = "!STACK"; //$NON-NLS-1$
+	// fields
+	private Writer m_writer;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public EclipseLogEntryFileReportInfo() {
-    super("last-log-message.txt");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public EclipseLogEntryFileReportInfo() {
+		super("last-log-message.txt");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // FileReportEntry
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected InputStream getContents() throws Exception {
-    IStatus lastStatus = DesignerPlugin.getLastStatus();
-    if (lastStatus != null) {
-      ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
-      m_writer = new OutputStreamWriter(outputStream);
-      try {
-        writeLog(0, getLog(lastStatus));
-      } finally {
-        m_writer.flush();
-        IOUtils.closeQuietly(m_writer);
-      }
-      if (outputStream.size() > 0) {
-        return new ByteArrayInputStream(outputStream.toByteArray());
-      }
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// FileReportEntry
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected InputStream getContents() throws Exception {
+		IStatus lastStatus = DesignerPlugin.getLastStatus();
+		if (lastStatus != null) {
+			ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+			m_writer = new OutputStreamWriter(outputStream);
+			try {
+				writeLog(0, getLog(lastStatus));
+			} finally {
+				m_writer.flush();
+				IOUtils.closeQuietly(m_writer);
+			}
+			if (outputStream.size() > 0) {
+				return new ByteArrayInputStream(outputStream.toByteArray());
+			}
+		}
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Working with IStatus
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Writes the log entry to the log using the specified depth. A depth value of 0 idicates that the
-   * log entry is the root entry. Any value greater than 0 indicates a sub-entry.
-   *
-   * @param depth
-   *          the depth of th entry
-   * @param entry
-   *          the entry to log
-   * @throws IOException
-   *           if any error occurs writing to the log
-   */
-  private void writeLog(int depth, FrameworkLogEntry entry) throws IOException {
-    writeEntry(depth, entry);
-    writeMessage(entry);
-    writeStack(entry);
-    FrameworkLogEntry[] children = entry.getChildren();
-    if (children != null) {
-      for (int i = 0; i < children.length; i++) {
-        writeLog(depth + 1, children[i]);
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Working with IStatus
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Writes the log entry to the log using the specified depth. A depth value of 0 idicates that the
+	 * log entry is the root entry. Any value greater than 0 indicates a sub-entry.
+	 *
+	 * @param depth
+	 *          the depth of th entry
+	 * @param entry
+	 *          the entry to log
+	 * @throws IOException
+	 *           if any error occurs writing to the log
+	 */
+	private void writeLog(int depth, FrameworkLogEntry entry) throws IOException {
+		writeEntry(depth, entry);
+		writeMessage(entry);
+		writeStack(entry);
+		FrameworkLogEntry[] children = entry.getChildren();
+		if (children != null) {
+			for (int i = 0; i < children.length; i++) {
+				writeLog(depth + 1, children[i]);
+			}
+		}
+	}
 
-  /**
-   * Writes the ENTRY or SUBENTRY header for an entry. A depth value of 0 indicates that the log
-   * entry is the root entry. Any value greater than 0 indicates a sub-entry.
-   *
-   * @param depth
-   *          the depth of th entry
-   * @param entry
-   *          the entry to write the header for
-   * @throws IOException
-   *           if any error occurs writing to the log
-   */
-  private void writeEntry(int depth, FrameworkLogEntry entry) throws IOException {
-    if (depth == 0) {
-      writeln(); // write a blank line before all !ENTRY tags bug #64406
-      write(ENTRY);
-    } else {
-      write(SUBENTRY);
-      writeSpace();
-      write(Integer.toString(depth));
-    }
-    writeSpace();
-    write(entry.getEntry());
-    writeSpace();
-    write(Integer.toString(entry.getSeverity()));
-    writeSpace();
-    write(Integer.toString(entry.getBundleCode()));
-    writeln();
-  }
+	/**
+	 * Writes the ENTRY or SUBENTRY header for an entry. A depth value of 0 indicates that the log
+	 * entry is the root entry. Any value greater than 0 indicates a sub-entry.
+	 *
+	 * @param depth
+	 *          the depth of th entry
+	 * @param entry
+	 *          the entry to write the header for
+	 * @throws IOException
+	 *           if any error occurs writing to the log
+	 */
+	private void writeEntry(int depth, FrameworkLogEntry entry) throws IOException {
+		if (depth == 0) {
+			writeln(); // write a blank line before all !ENTRY tags bug #64406
+			write(ENTRY);
+		} else {
+			write(SUBENTRY);
+			writeSpace();
+			write(Integer.toString(depth));
+		}
+		writeSpace();
+		write(entry.getEntry());
+		writeSpace();
+		write(Integer.toString(entry.getSeverity()));
+		writeSpace();
+		write(Integer.toString(entry.getBundleCode()));
+		writeln();
+	}
 
-  /**
-   * Writes the MESSAGE header to the log for the given entry.
-   *
-   * @param entry
-   *          the entry to write the message for
-   * @throws IOException
-   *           if any error occurs writing to the log
-   */
-  private void writeMessage(FrameworkLogEntry entry) throws IOException {
-    write(MESSAGE);
-    writeSpace();
-    writeln(entry.getMessage());
-  }
+	/**
+	 * Writes the MESSAGE header to the log for the given entry.
+	 *
+	 * @param entry
+	 *          the entry to write the message for
+	 * @throws IOException
+	 *           if any error occurs writing to the log
+	 */
+	private void writeMessage(FrameworkLogEntry entry) throws IOException {
+		write(MESSAGE);
+		writeSpace();
+		writeln(entry.getMessage());
+	}
 
-  /**
-   * Writes the STACK header to the log for the given entry.
-   *
-   * @param entry
-   *          the entry to write the stacktrace for
-   * @throws IOException
-   *           if any error occurs writing to the log
-   */
-  private void writeStack(FrameworkLogEntry entry) throws IOException {
-    Throwable t = entry.getThrowable();
-    if (t != null) {
-      String stack = getStackTrace(t);
-      write(STACK);
-      writeSpace();
-      write(Integer.toString(entry.getStackCode()));
-      writeln();
-      write(stack);
-    }
-  }
+	/**
+	 * Writes the STACK header to the log for the given entry.
+	 *
+	 * @param entry
+	 *          the entry to write the stacktrace for
+	 * @throws IOException
+	 *           if any error occurs writing to the log
+	 */
+	private void writeStack(FrameworkLogEntry entry) throws IOException {
+		Throwable t = entry.getThrowable();
+		if (t != null) {
+			String stack = getStackTrace(t);
+			write(STACK);
+			writeSpace();
+			write(Integer.toString(entry.getStackCode()));
+			writeln();
+			write(stack);
+		}
+	}
 
-  /**
-   * Writes the given message to the log.
-   *
-   * @param message
-   *          the message
-   * @throws IOException
-   *           if any error occurs writing to the log
-   */
-  private void write(String message) throws IOException {
-    if (message != null) {
-      m_writer.write(message);
-    }
-  }
+	/**
+	 * Writes the given message to the log.
+	 *
+	 * @param message
+	 *          the message
+	 * @throws IOException
+	 *           if any error occurs writing to the log
+	 */
+	private void write(String message) throws IOException {
+		if (message != null) {
+			m_writer.write(message);
+		}
+	}
 
-  /**
-   * Writes the given message to the log and a newline.
-   *
-   * @param s
-   *          the message
-   * @throws IOException
-   *           if any error occurs writing to the log
-   */
-  private void writeln(String s) throws IOException {
-    write(s);
-    writeln();
-  }
+	/**
+	 * Writes the given message to the log and a newline.
+	 *
+	 * @param s
+	 *          the message
+	 * @throws IOException
+	 *           if any error occurs writing to the log
+	 */
+	private void writeln(String s) throws IOException {
+		write(s);
+		writeln();
+	}
 
-  /**
-   * Writes a newline log.
-   *
-   * @throws IOException
-   *           if any error occurs writing to the log
-   */
-  private void writeln() throws IOException {
-    write("\n");
-  }
+	/**
+	 * Writes a newline log.
+	 *
+	 * @throws IOException
+	 *           if any error occurs writing to the log
+	 */
+	private void writeln() throws IOException {
+		write("\n");
+	}
 
-  /**
-   * Writes a space to the log.
-   *
-   * @throws IOException
-   *           if any error occurs writing to the log
-   */
-  private void writeSpace() throws IOException {
-    write(" "); //$NON-NLS-1$
-  }
+	/**
+	 * Writes a space to the log.
+	 *
+	 * @throws IOException
+	 *           if any error occurs writing to the log
+	 */
+	private void writeSpace() throws IOException {
+		write(" "); //$NON-NLS-1$
+	}
 
-  private FrameworkLogEntry getLog(IStatus status) {
-    Throwable t = status.getException();
-    List<FrameworkLogEntry> childlist = Lists.newArrayList();
-    int stackCode = t instanceof CoreException ? 1 : 0;
-    // ensure a substatus inside a CoreException is properly logged
-    if (stackCode == 1) {
-      IStatus coreStatus = ((CoreException) t).getStatus();
-      if (coreStatus != null) {
-        childlist.add(getLog(coreStatus));
-      }
-    }
-    if (status.isMultiStatus()) {
-      IStatus[] children = status.getChildren();
-      for (int i = 0; i < children.length; i++) {
-        childlist.add(getLog(children[i]));
-      }
-    }
-    FrameworkLogEntry[] children =
-        childlist.size() == 0 ? null : childlist.toArray(new FrameworkLogEntry[childlist.size()]);
-    return new FrameworkLogEntry(status.getPlugin(),
-        status.getSeverity(),
-        status.getCode(),
-        status.getMessage(),
-        stackCode,
-        t,
-        children);
-  }
+	private FrameworkLogEntry getLog(IStatus status) {
+		Throwable t = status.getException();
+		List<FrameworkLogEntry> childlist = Lists.newArrayList();
+		int stackCode = t instanceof CoreException ? 1 : 0;
+		// ensure a substatus inside a CoreException is properly logged
+		if (stackCode == 1) {
+			IStatus coreStatus = ((CoreException) t).getStatus();
+			if (coreStatus != null) {
+				childlist.add(getLog(coreStatus));
+			}
+		}
+		if (status.isMultiStatus()) {
+			IStatus[] children = status.getChildren();
+			for (int i = 0; i < children.length; i++) {
+				childlist.add(getLog(children[i]));
+			}
+		}
+		FrameworkLogEntry[] children =
+				childlist.size() == 0 ? null : childlist.toArray(new FrameworkLogEntry[childlist.size()]);
+		return new FrameworkLogEntry(status.getPlugin(),
+				status.getSeverity(),
+				status.getCode(),
+				status.getMessage(),
+				stackCode,
+				t,
+				children);
+	}
 
-  /**
-   * Returns a stacktrace string using the correct format for the log
-   *
-   * @param t
-   *          the Throwable to get the stacktrace for
-   * @return a stacktrace string
-   */
-  private String getStackTrace(Throwable t) {
-    if (t == null) {
-      return null;
-    }
-    StringWriter sw = new StringWriter();
-    PrintWriter pw = new PrintWriter(sw);
-    t.printStackTrace(pw);
-    // ensure the root exception is fully logged
-    Throwable root = getRoot(t);
-    if (root != null) {
-      pw.println("Root exception:"); //$NON-NLS-1$
-      root.printStackTrace(pw);
-    }
-    return sw.toString();
-  }
+	/**
+	 * Returns a stacktrace string using the correct format for the log
+	 *
+	 * @param t
+	 *          the Throwable to get the stacktrace for
+	 * @return a stacktrace string
+	 */
+	private String getStackTrace(Throwable t) {
+		if (t == null) {
+			return null;
+		}
+		StringWriter sw = new StringWriter();
+		PrintWriter pw = new PrintWriter(sw);
+		t.printStackTrace(pw);
+		// ensure the root exception is fully logged
+		Throwable root = getRoot(t);
+		if (root != null) {
+			pw.println("Root exception:"); //$NON-NLS-1$
+			root.printStackTrace(pw);
+		}
+		return sw.toString();
+	}
 
-  private Throwable getRoot(Throwable t) {
-    Throwable root = null;
-    if (t instanceof BundleException) {
-      root = ((BundleException) t).getNestedException();
-    }
-    if (t instanceof InvocationTargetException) {
-      root = ((InvocationTargetException) t).getTargetException();
-    }
-    // skip inner InvocationTargetExceptions and BundleExceptions
-    if (root instanceof InvocationTargetException || root instanceof BundleException) {
-      Throwable deeplyNested = getRoot(root);
-      if (deeplyNested != null) {
-        // if we have something more specific, use it, otherwise keep what we have
-        root = deeplyNested;
-      }
-    }
-    return root;
-  }
+	private Throwable getRoot(Throwable t) {
+		Throwable root = null;
+		if (t instanceof BundleException) {
+			root = ((BundleException) t).getNestedException();
+		}
+		if (t instanceof InvocationTargetException) {
+			root = ((InvocationTargetException) t).getTargetException();
+		}
+		// skip inner InvocationTargetExceptions and BundleExceptions
+		if (root instanceof InvocationTargetException || root instanceof BundleException) {
+			Throwable deeplyNested = getRoot(root);
+			if (deeplyNested != null) {
+				// if we have something more specific, use it, otherwise keep what we have
+				root = deeplyNested;
+			}
+		}
+		return root;
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/errors/report2/EnvironmentFileReportInfo.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/errors/report2/EnvironmentFileReportInfo.java
index 78bdbc780..1afd84917 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/errors/report2/EnvironmentFileReportInfo.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/errors/report2/EnvironmentFileReportInfo.java
@@ -41,188 +41,188 @@
  * @coverage core.editor.errors.report2
  */
 public final class EnvironmentFileReportInfo extends FileReportEntry {
-  // constants
-  private static final String CR = "\n";
-  private final IProject m_project;
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public EnvironmentFileReportInfo(IProject project) {
-    super("environment.txt");
-    m_project = project;
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Contents
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected InputStream getContents() throws Exception {
-    String contents = createContents(m_project);
-    return IOUtils.toInputStream(contents);
-  }
-  private static String createContents(IProject project) {
-    String c = "";
-    c += "Product Name: " + BrandingUtils.getBranding().getProductName() + CR;
-    c +=
-        "Product Version: "
-            + ProductInfo.getProduct().getVersion()
-            + "["
-            + ProductInfo.getProduct().getBuild()
-            + "]"
-            + CR;
-    c += "Installation Path: " + getInstallationPath() + CR;
-    c += "Eclipse Version: " + PlatformInfo.getEclipseVersion().toString() + CR;
-    c += "Eclipse Build Name: " + PlatformInfo.getEclipseBuildName() + CR;
-    c += "Eclipse Build ID: " + PlatformInfo.getEclipseBuildId() + CR;
-    c += "IDE Name: " + PlatformInfo.getIDEName() + CR;
-    c += "IDE Version: " + PlatformInfo.getIDEVersionString() + CR;
-    c += "IDE NL: " + PlatformInfo.getIDENL() + CR;
-    c +=
-        "Eclipse Commands: "
-            + StringUtils.replaceChars(getSystemProperty("eclipse.commands"), "\n\r", " ")
-            + CR;
-    c += "Eclipse VM: " + getSystemProperty("eclipse.vm") + CR;
-    c += "Eclipse VM Args: " + getSystemProperty("eclipse.vmargs") + CR;
-    c += "OS Name: " + getSystemProperty("os.name") + CR;
-    c += "OS Arch: " + getSystemProperty("os.arch") + CR;
-    c += "OS Version: " + getSystemProperty("os.version") + CR;
-    String linuxDescription = getLinuxDescription();
-    if (!StringUtils.isEmpty(linuxDescription)) {
-      c += "Linux Description: " + linuxDescription + CR;
-    }
-    String m_mozillaResult = tryCreateMozilla();
-    if (!StringUtils.isEmpty(m_mozillaResult)) {
-      c += "Browser Creation Result: " + m_mozillaResult + CR;
-    }
-    Runtime runtime = Runtime.getRuntime();
-    c += "Available Processors: " + runtime.availableProcessors() + CR;
-    c += "Memory Max: " + runtime.maxMemory() + CR;
-    c += "Memory Total: " + runtime.totalMemory() + CR;
-    c += "Memory Free: " + runtime.freeMemory() + CR;
-    c += "Java Vendor: " + getSystemProperty("java.vendor") + CR;
-    c += "Java Version: " + getSystemProperty("java.version") + CR;
-    c += "Java Library Path: " + CR + getSystemProperty("java.library.path") + CR;
-    c += "Project Class Path: " + CR + getClassPath(project) + CR;
-    return c;
-  }
-  private static String getClassPath(IProject project) {
-    // java classpath
-    String classPath = "";
-    // TODO(scheglov)
-//    try {
-//      IJavaProject javaProject = JavaCore.create(project);
-//      if (javaProject.exists()) {
-//        String[] entries = ProjectClassLoader.getClasspath(javaProject);
-//        for (String entry : entries) {
-//          classPath += entry + File.pathSeparator;
-//        }
-//      }
-//      // remove trailing path separator
-//      classPath = StringUtils.removeEnd(classPath, File.pathSeparator);
-//    } catch (Throwable e) {
-//      // ignore
-//    }
-    return classPath;
-  }
-  private static String getInstallationPath() {
-    URL installUrl = PluginUtilities.getInstallUrl(ProductInfo.getProduct().getPluginId());
-    String installationPath = "Unknown";
-    try {
-      if (installUrl != null) {
-        installationPath = FileLocator.toFileURL(installUrl).getPath();
-        if (installationPath.length() > 3
-            && installationPath.charAt(0) == '/'
-            && installationPath.charAt(2) == ':') {
-          installationPath = installationPath.substring(1);
-        }
-      }
-    } catch (Throwable e) {
-    }
-    return installationPath;
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Get system property and return empty string if no such property.
-   *
-   * @param prop
-   *          the property name.
-   */
-  private static String getSystemProperty(String prop) {
-    String propValue = System.getProperty(prop);
-    return propValue == null ? "" : propValue;
-  }
-  /**
-   * Returns the contents of '/etc/lsb-release' (and/or others).
-   */
-  private static String getLinuxDescription() {
-    StringBuilder result = new StringBuilder();
-    if (EnvironmentUtils.IS_LINUX) {
-      String[] files =
-          new String[]{
-              "/etc/lsb-release",
-              "/etc/lsb_release",
-              "/etc/system-release",
-              "/etc/fedora-release",
-              "/etc/SuSE-release",
-              "/etc/redhat-release",
-              "/etc/release",
-              "/proc/version_signature",
-              "/proc/version",
-              "/etc/issue",};
-      for (int i = 0; i < files.length; i++) {
-        File file = new File(files[i]);
-        if (file.exists() && file.canRead()) {
-          try {
-            String version = IOUtils2.readString(file).trim();
-            if (version != null && result.indexOf(version) == -1) {
-              result.append(version);
-              result.append("\n");
-            }
-          } catch (Throwable e) {
-            // just ignore
-          }
-        }
-      }
-    }
-    return result.toString();
-  }
-  private static String tryCreateMozilla() {
-    if (EnvironmentUtils.IS_LINUX) {
-      boolean oldDebug = Device.DEBUG;
-      Device.DEBUG = true;
-      PrintStream oldOut = System.out;
-      Shell shell = null;
-      PrintStream newOut = null;
-      try {
-        ByteArrayOutputStream baos = new ByteArrayOutputStream();
-        newOut = new PrintStream(baos);
-        // replace the out since the Mozilla output debug results into stdout.
-        System.setOut(newOut);
-        shell = new Shell();
-        try {
-          new Browser(shell, SWT.NONE);
-        } catch (Throwable e) {
-          DesignerPlugin.log(e);
-        }
-        return baos.toString();
-      } catch (Throwable e1) {
-        // ignore
-      } finally {
-        if (shell != null) {
-          shell.dispose();
-        }
-        System.setOut(oldOut);
-        IOUtils.closeQuietly(newOut);
-        Device.DEBUG = oldDebug;
-      }
-    }
-    return "";
-  }
+	// constants
+	private static final String CR = "\n";
+	private final IProject m_project;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public EnvironmentFileReportInfo(IProject project) {
+		super("environment.txt");
+		m_project = project;
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Contents
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected InputStream getContents() throws Exception {
+		String contents = createContents(m_project);
+		return IOUtils.toInputStream(contents);
+	}
+	private static String createContents(IProject project) {
+		String c = "";
+		c += "Product Name: " + BrandingUtils.getBranding().getProductName() + CR;
+		c +=
+				"Product Version: "
+						+ ProductInfo.getProduct().getVersion()
+						+ "["
+						+ ProductInfo.getProduct().getBuild()
+						+ "]"
+						+ CR;
+		c += "Installation Path: " + getInstallationPath() + CR;
+		c += "Eclipse Version: " + PlatformInfo.getEclipseVersion().toString() + CR;
+		c += "Eclipse Build Name: " + PlatformInfo.getEclipseBuildName() + CR;
+		c += "Eclipse Build ID: " + PlatformInfo.getEclipseBuildId() + CR;
+		c += "IDE Name: " + PlatformInfo.getIDEName() + CR;
+		c += "IDE Version: " + PlatformInfo.getIDEVersionString() + CR;
+		c += "IDE NL: " + PlatformInfo.getIDENL() + CR;
+		c +=
+				"Eclipse Commands: "
+						+ StringUtils.replaceChars(getSystemProperty("eclipse.commands"), "\n\r", " ")
+						+ CR;
+		c += "Eclipse VM: " + getSystemProperty("eclipse.vm") + CR;
+		c += "Eclipse VM Args: " + getSystemProperty("eclipse.vmargs") + CR;
+		c += "OS Name: " + getSystemProperty("os.name") + CR;
+		c += "OS Arch: " + getSystemProperty("os.arch") + CR;
+		c += "OS Version: " + getSystemProperty("os.version") + CR;
+		String linuxDescription = getLinuxDescription();
+		if (!StringUtils.isEmpty(linuxDescription)) {
+			c += "Linux Description: " + linuxDescription + CR;
+		}
+		String m_mozillaResult = tryCreateMozilla();
+		if (!StringUtils.isEmpty(m_mozillaResult)) {
+			c += "Browser Creation Result: " + m_mozillaResult + CR;
+		}
+		Runtime runtime = Runtime.getRuntime();
+		c += "Available Processors: " + runtime.availableProcessors() + CR;
+		c += "Memory Max: " + runtime.maxMemory() + CR;
+		c += "Memory Total: " + runtime.totalMemory() + CR;
+		c += "Memory Free: " + runtime.freeMemory() + CR;
+		c += "Java Vendor: " + getSystemProperty("java.vendor") + CR;
+		c += "Java Version: " + getSystemProperty("java.version") + CR;
+		c += "Java Library Path: " + CR + getSystemProperty("java.library.path") + CR;
+		c += "Project Class Path: " + CR + getClassPath(project) + CR;
+		return c;
+	}
+	private static String getClassPath(IProject project) {
+		// java classpath
+		String classPath = "";
+		// TODO(scheglov)
+		//    try {
+		//      IJavaProject javaProject = JavaCore.create(project);
+		//      if (javaProject.exists()) {
+		//        String[] entries = ProjectClassLoader.getClasspath(javaProject);
+		//        for (String entry : entries) {
+		//          classPath += entry + File.pathSeparator;
+		//        }
+		//      }
+		//      // remove trailing path separator
+		//      classPath = StringUtils.removeEnd(classPath, File.pathSeparator);
+		//    } catch (Throwable e) {
+		//      // ignore
+		//    }
+		return classPath;
+	}
+	private static String getInstallationPath() {
+		URL installUrl = PluginUtilities.getInstallUrl(ProductInfo.getProduct().getPluginId());
+		String installationPath = "Unknown";
+		try {
+			if (installUrl != null) {
+				installationPath = FileLocator.toFileURL(installUrl).getPath();
+				if (installationPath.length() > 3
+						&& installationPath.charAt(0) == '/'
+						&& installationPath.charAt(2) == ':') {
+					installationPath = installationPath.substring(1);
+				}
+			}
+		} catch (Throwable e) {
+		}
+		return installationPath;
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Get system property and return empty string if no such property.
+	 *
+	 * @param prop
+	 *          the property name.
+	 */
+	private static String getSystemProperty(String prop) {
+		String propValue = System.getProperty(prop);
+		return propValue == null ? "" : propValue;
+	}
+	/**
+	 * Returns the contents of '/etc/lsb-release' (and/or others).
+	 */
+	private static String getLinuxDescription() {
+		StringBuilder result = new StringBuilder();
+		if (EnvironmentUtils.IS_LINUX) {
+			String[] files =
+					new String[]{
+							"/etc/lsb-release",
+							"/etc/lsb_release",
+							"/etc/system-release",
+							"/etc/fedora-release",
+							"/etc/SuSE-release",
+							"/etc/redhat-release",
+							"/etc/release",
+							"/proc/version_signature",
+							"/proc/version",
+							"/etc/issue",};
+			for (int i = 0; i < files.length; i++) {
+				File file = new File(files[i]);
+				if (file.exists() && file.canRead()) {
+					try {
+						String version = IOUtils2.readString(file).trim();
+						if (version != null && result.indexOf(version) == -1) {
+							result.append(version);
+							result.append("\n");
+						}
+					} catch (Throwable e) {
+						// just ignore
+					}
+				}
+			}
+		}
+		return result.toString();
+	}
+	private static String tryCreateMozilla() {
+		if (EnvironmentUtils.IS_LINUX) {
+			boolean oldDebug = Device.DEBUG;
+			Device.DEBUG = true;
+			PrintStream oldOut = System.out;
+			Shell shell = null;
+			PrintStream newOut = null;
+			try {
+				ByteArrayOutputStream baos = new ByteArrayOutputStream();
+				newOut = new PrintStream(baos);
+				// replace the out since the Mozilla output debug results into stdout.
+				System.setOut(newOut);
+				shell = new Shell();
+				try {
+					new Browser(shell, SWT.NONE);
+				} catch (Throwable e) {
+					DesignerPlugin.log(e);
+				}
+				return baos.toString();
+			} catch (Throwable e1) {
+				// ignore
+			} finally {
+				if (shell != null) {
+					shell.dispose();
+				}
+				System.setOut(oldOut);
+				IOUtils.closeQuietly(newOut);
+				Device.DEBUG = oldDebug;
+			}
+		}
+		return "";
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/errors/report2/FileListReportEntry.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/errors/report2/FileListReportEntry.java
index df7489e94..c17842e69 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/errors/report2/FileListReportEntry.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/errors/report2/FileListReportEntry.java
@@ -27,40 +27,40 @@
  * @coverage core.editor.errors.report2
  */
 public abstract class FileListReportEntry implements IReportEntry {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Abstract
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the List of Files to be included into report.
-   */
-  protected abstract List<File> getFiles();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Abstract
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the List of Files to be included into report.
+	 */
+	protected abstract List<File> getFiles();
 
-  /**
-   * @return the prefix to create directory.
-   */
-  protected abstract String getPrefix();
+	/**
+	 * @return the prefix to create directory.
+	 */
+	protected abstract String getPrefix();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IReportEntry
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void write(ZipOutputStream zipStream) throws Exception {
-    List<File> files = getFiles();
-    for (File file : files) {
-      InputStream fileStream = new FileInputStream(file);
-      // get name with prefix
-      String filePath = getPrefix() + FilenameUtils.getName(file.getAbsolutePath());
-      zipStream.putNextEntry(new ZipEntry(filePath));
-      try {
-        IOUtils.copy(fileStream, zipStream);
-      } finally {
-        zipStream.closeEntry();
-        IOUtils.closeQuietly(fileStream);
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IReportEntry
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void write(ZipOutputStream zipStream) throws Exception {
+		List<File> files = getFiles();
+		for (File file : files) {
+			InputStream fileStream = new FileInputStream(file);
+			// get name with prefix
+			String filePath = getPrefix() + FilenameUtils.getName(file.getAbsolutePath());
+			zipStream.putNextEntry(new ZipEntry(filePath));
+			try {
+				IOUtils.copy(fileStream, zipStream);
+			} finally {
+				zipStream.closeEntry();
+				IOUtils.closeQuietly(fileStream);
+			}
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/errors/report2/FileReportEntry.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/errors/report2/FileReportEntry.java
index 01ff0a3cc..3feb0c836 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/errors/report2/FileReportEntry.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/errors/report2/FileReportEntry.java
@@ -25,83 +25,83 @@
  * @coverage core.editor.errors.report2
  */
 public abstract class FileReportEntry implements IReportEntry {
-  private final String m_filePath;
+	private final String m_filePath;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FileReportEntry(String name) {
-    m_filePath = name;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FileReportEntry(String name) {
+		m_filePath = name;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IReportEntry
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void write(ZipOutputStream zipStream) throws Exception {
-    InputStream fileStream = getContents();
-    if (fileStream != null) {
-      zipStream.putNextEntry(new ZipEntry(getName()));
-      try {
-        IOUtils.copy(fileStream, zipStream);
-      } finally {
-        zipStream.closeEntry();
-        IOUtils.closeQuietly(fileStream);
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IReportEntry
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void write(ZipOutputStream zipStream) throws Exception {
+		InputStream fileStream = getContents();
+		if (fileStream != null) {
+			zipStream.putNextEntry(new ZipEntry(getName()));
+			try {
+				IOUtils.copy(fileStream, zipStream);
+			} finally {
+				zipStream.closeEntry();
+				IOUtils.closeQuietly(fileStream);
+			}
+		}
+	}
 
-  protected InputStream getContents() throws Exception {
-    File file = new File(m_filePath);
-    if (checkFile(file)) {
-      return new FileInputStream(file);
-    }
-    // doesn't exist
-    return null;
-  }
+	protected InputStream getContents() throws Exception {
+		File file = new File(m_filePath);
+		if (checkFile(file)) {
+			return new FileInputStream(file);
+		}
+		// doesn't exist
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the raw file path as it passed into constructor.
-   */
-  protected final String getFilePath() {
-    return m_filePath;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the raw file path as it passed into constructor.
+	 */
+	protected final String getFilePath() {
+		return m_filePath;
+	}
 
-  /**
-   * @return the name of ZipEntry.
-   */
-  protected String getName() {
-    return m_filePath;
-  }
+	/**
+	 * @return the name of ZipEntry.
+	 */
+	protected String getName() {
+		return m_filePath;
+	}
 
-  /**
-   * @return <code>true</code> if the file exists and accessible for reading.
-   */
-  public static boolean checkFile(File file) {
-    if (file.exists()) {
-      // check file for reading
-      FileInputStream inputStream = null;
-      try {
-        inputStream = new FileInputStream(file);
-        inputStream.read();
-        // all OK
-        return true;
-      } catch (Throwable e) {
-        // ignore, means not accessible
-      } finally {
-        IOUtils.closeQuietly(inputStream);
-      }
-    }
-    // cannot read
-    return false;
-  }
+	/**
+	 * @return <code>true</code> if the file exists and accessible for reading.
+	 */
+	public static boolean checkFile(File file) {
+		if (file.exists()) {
+			// check file for reading
+			FileInputStream inputStream = null;
+			try {
+				inputStream = new FileInputStream(file);
+				inputStream.read();
+				// all OK
+				return true;
+			} catch (Throwable e) {
+				// ignore, means not accessible
+			} finally {
+				IOUtils.closeQuietly(inputStream);
+			}
+		}
+		// cannot read
+		return false;
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/errors/report2/IErrorReport.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/errors/report2/IErrorReport.java
index b7243f38c..b6bd48d06 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/errors/report2/IErrorReport.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/errors/report2/IErrorReport.java
@@ -19,85 +19,85 @@
  * @coverage core.editor.errors.report2
  */
 public interface IErrorReport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Screenshot
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if report has default screenshot set.
-   */
-  boolean hasDefaultScreenshot();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Screenshot
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if report has default screenshot set.
+	 */
+	boolean hasDefaultScreenshot();
 
-  /**
-   * @param filePath
-   *          the full path to file with screenshot.
-   * @return <code>true</code> if this screenshot already added.
-   */
-  boolean hasScreenshot(String filePath);
+	/**
+	 * @param filePath
+	 *          the full path to file with screenshot.
+	 * @return <code>true</code> if this screenshot already added.
+	 */
+	boolean hasScreenshot(String filePath);
 
-  /**
-   * Includes screenshot defined by <code>filePath</code> to being sent list.
-   *
-   * @param filePath
-   *          the full path to file with screenshot.
-   * @param include
-   *          if <code>true</code> then screenshot would be included to being sent.
-   */
-  void includeScreenshot(String filePath, boolean include);
+	/**
+	 * Includes screenshot defined by <code>filePath</code> to being sent list.
+	 *
+	 * @param filePath
+	 *          the full path to file with screenshot.
+	 * @param include
+	 *          if <code>true</code> then screenshot would be included to being sent.
+	 */
+	void includeScreenshot(String filePath, boolean include);
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Arbitrary Files
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @param filePath
-   *          the full path to file.
-   * @return <code>true</code> if this file already added.
-   */
-  boolean hasFile(String filePath);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Arbitrary Files
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @param filePath
+	 *          the full path to file.
+	 * @return <code>true</code> if this file already added.
+	 */
+	boolean hasFile(String filePath);
 
-  /**
-   * Includes file defined by <code>filePath</code> to being sent list.
-   *
-   * @param filePath
-   *          the full path to file.
-   * @param include
-   *          if <code>true</code> then file would be included to being sent list.
-   */
-  void includeFile(String filePath, boolean include);
+	/**
+	 * Includes file defined by <code>filePath</code> to being sent list.
+	 *
+	 * @param filePath
+	 *          the full path to file.
+	 * @param include
+	 *          if <code>true</code> then file would be included to being sent list.
+	 */
+	void includeFile(String filePath, boolean include);
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Source/Project
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if the report has a source file.
-   */
-  boolean hasSourceFile();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Source/Project
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if the report has a source file.
+	 */
+	boolean hasSourceFile();
 
-  /**
-   * @return the project for reporting error.
-   */
-  IProject getProject();
+	/**
+	 * @return the project for reporting error.
+	 */
+	IProject getProject();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Entries Management
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @param entry
-   *          the report entry to add into report.
-   */
-  void addEntry(IReportEntry entry);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Entries Management
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @param entry
+	 *          the report entry to add into report.
+	 */
+	void addEntry(IReportEntry entry);
 
-  /**
-   * @param entry
-   *          previously added report entry to remove, method does nothing if <code>null</code> or
-   *          wasn't added before.
-   */
-  void removeEntry(IReportEntry entry);
+	/**
+	 * @param entry
+	 *          previously added report entry to remove, method does nothing if <code>null</code> or
+	 *          wasn't added before.
+	 */
+	void removeEntry(IReportEntry entry);
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/errors/report2/IReportEntriesProvider.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/errors/report2/IReportEntriesProvider.java
index 29a8ab9fc..bd2017d5f 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/errors/report2/IReportEntriesProvider.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/errors/report2/IReportEntriesProvider.java
@@ -17,8 +17,8 @@
  * @coverage core.editor.errors.report2
  */
 public interface IReportEntriesProvider {
-  /**
-   * Adds entries into report.
-   */
-  void addEntries(IErrorReport report);
+	/**
+	 * Adds entries into report.
+	 */
+	void addEntries(IErrorReport report);
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/errors/report2/IReportEntry.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/errors/report2/IReportEntry.java
index d2cd32d3d..3e2e08e4d 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/errors/report2/IReportEntry.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/errors/report2/IReportEntry.java
@@ -19,8 +19,8 @@
  * @coverage core.editor.errors.report2
  */
 public interface IReportEntry {
-  /**
-   * Writes the contents into given Zip stream.
-   */
-  void write(ZipOutputStream zips) throws Exception;
+	/**
+	 * Writes the contents into given Zip stream.
+	 */
+	void write(ZipOutputStream zips) throws Exception;
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/errors/report2/Messages.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/errors/report2/Messages.java
index dd35c406b..1850c9484 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/errors/report2/Messages.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/errors/report2/Messages.java
@@ -3,42 +3,42 @@
 import org.eclipse.osgi.util.NLS;
 
 public class Messages extends NLS {
-  private static final String BUNDLE_NAME =
-      "org.eclipse.wb.internal.core.editor.errors.report2.messages"; //$NON-NLS-1$
-  public static String copy;
-  public static String CreateReportDialog_additionalGroup;
-  public static String CreateReportDialog_additionalLogs;
-  public static String CreateReportDialog_additionalProject;
-  public static String CreateReportDialog_additionalProjectMessage;
-  public static String CreateReportDialog_additionalProjectTitle;
-  public static String CreateReportDialog_additionalScreenshots;
-  public static String CreateReportDialog_additionalSourceFile;
-  public static String CreateReportDialog_addLink;
-  public static String CreateReportDialog_beforeErrorScreenshot;
-  public static String CreateReportDialog_copyAction;
-  public static String CreateReportDialog_errorMessage;
-  public static String CreateReportDialog_errorTitle;
-  public static String CreateReportDialog_errorUseDetails;
-  public static String CreateReportDialog_fileAttachments;
-  public static String CreateReportDialog_message;
-  public static String CreateReportDialog_preferences;
-  public static String CreateReportDialog_pressClosebutton;
-  public static String CreateReportDialog_softHardSummary;
-  public static String CreateReportDialog_softHardSummaryTitle;
-  public static String CreateReportDialog_successLabel;
-  public static String CreateReportDialog_successMessage;
-  public static String CreateReportDialog_successTitle;
-  public static String CreateReportDialog_title;
-  public static String CreateReportDialog_viewLink;
-  public static String PreferencesFileReportEntry_errorMessage;
-  public static String PreferencesFileReportEntry_errorTitle;
-  public static String ZipFileErrorReport_errorMessage;
-  public static String ZipFileErrorReport_taskTitle;
-  static {
-    // initialize resource bundle
-    NLS.initializeMessages(BUNDLE_NAME, Messages.class);
-  }
+	private static final String BUNDLE_NAME =
+			"org.eclipse.wb.internal.core.editor.errors.report2.messages"; //$NON-NLS-1$
+	public static String copy;
+	public static String CreateReportDialog_additionalGroup;
+	public static String CreateReportDialog_additionalLogs;
+	public static String CreateReportDialog_additionalProject;
+	public static String CreateReportDialog_additionalProjectMessage;
+	public static String CreateReportDialog_additionalProjectTitle;
+	public static String CreateReportDialog_additionalScreenshots;
+	public static String CreateReportDialog_additionalSourceFile;
+	public static String CreateReportDialog_addLink;
+	public static String CreateReportDialog_beforeErrorScreenshot;
+	public static String CreateReportDialog_copyAction;
+	public static String CreateReportDialog_errorMessage;
+	public static String CreateReportDialog_errorTitle;
+	public static String CreateReportDialog_errorUseDetails;
+	public static String CreateReportDialog_fileAttachments;
+	public static String CreateReportDialog_message;
+	public static String CreateReportDialog_preferences;
+	public static String CreateReportDialog_pressClosebutton;
+	public static String CreateReportDialog_softHardSummary;
+	public static String CreateReportDialog_softHardSummaryTitle;
+	public static String CreateReportDialog_successLabel;
+	public static String CreateReportDialog_successMessage;
+	public static String CreateReportDialog_successTitle;
+	public static String CreateReportDialog_title;
+	public static String CreateReportDialog_viewLink;
+	public static String PreferencesFileReportEntry_errorMessage;
+	public static String PreferencesFileReportEntry_errorTitle;
+	public static String ZipFileErrorReport_errorMessage;
+	public static String ZipFileErrorReport_taskTitle;
+	static {
+		// initialize resource bundle
+		NLS.initializeMessages(BUNDLE_NAME, Messages.class);
+	}
 
-  private Messages() {
-  }
+	private Messages() {
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/errors/report2/PreferencesFileReportEntry.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/errors/report2/PreferencesFileReportEntry.java
index 53787aecc..3eeec4de1 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/errors/report2/PreferencesFileReportEntry.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/errors/report2/PreferencesFileReportEntry.java
@@ -38,72 +38,72 @@
  * @coverage core.editor.errors.report2
  */
 public final class PreferencesFileReportEntry extends FileReportEntry {
-  private static final String EXPORT_ERROR_MESSAGE =
-      Messages.PreferencesFileReportEntry_errorMessage;
-  private static final String PREFERENCES_PREFIX = "org.eclipse.wb";
+	private static final String EXPORT_ERROR_MESSAGE =
+			Messages.PreferencesFileReportEntry_errorMessage;
+	private static final String PREFERENCES_PREFIX = "org.eclipse.wb";
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public PreferencesFileReportEntry() {
-    super("preferences.epf");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public PreferencesFileReportEntry() {
+		super("preferences.epf");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AbstractFileReportInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected InputStream getContents() {
-    IStatus exportStatus = null;
-    try {
-      // get preference service
-      IPreferencesService service = Platform.getPreferencesService();
-      // we need instance scope only
-      IEclipsePreferences node =
-          (IEclipsePreferences) service.getRootNode().node(InstanceScope.SCOPE);
-      // prepare list of preferences to exclude to pass later into export method
-      final List<String> excludesList = Lists.newArrayList();
-      node.accept(new IPreferenceNodeVisitor() {
-        @Override
-        public boolean visit(IEclipsePreferences childNode) throws BackingStoreException {
-          // don't exclude root instance node
-          if (childNode.name().equals(InstanceScope.SCOPE)) {
-            return true;
-          }
-          // exclude all which not relative do WindowBuilder
-          if (!StringUtils.contains(childNode.absolutePath(), PREFERENCES_PREFIX)) {
-            excludesList.add(childNode.name());
-          }
-          return true;
-        }
-      });
-      // do export
-      ByteArrayOutputStream exportStream = new ByteArrayOutputStream();
-      exportStatus =
-          service.exportPreferences(
-              node,
-              exportStream,
-              excludesList.toArray(new String[excludesList.size()]));
-      if (exportStatus.getCode() != IStatus.OK) {
-        throw new RuntimeException(EXPORT_ERROR_MESSAGE);
-      }
-      // return input stream to be saved
-      return new ByteArrayInputStream(exportStream.toByteArray());
-    } catch (Throwable e) {
-      DesignerPlugin.log(e);
-      // show error
-      ErrorDialog.openError(
-          DesignerPlugin.getShell(),
-          Messages.PreferencesFileReportEntry_errorTitle,
-          EXPORT_ERROR_MESSAGE,
-          exportStatus == null
-              ? new Status(IStatus.ERROR, DesignerPlugin.PLUGIN_ID, 0, null, e)
-              : exportStatus);
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AbstractFileReportInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected InputStream getContents() {
+		IStatus exportStatus = null;
+		try {
+			// get preference service
+			IPreferencesService service = Platform.getPreferencesService();
+			// we need instance scope only
+			IEclipsePreferences node =
+					(IEclipsePreferences) service.getRootNode().node(InstanceScope.SCOPE);
+			// prepare list of preferences to exclude to pass later into export method
+			final List<String> excludesList = Lists.newArrayList();
+			node.accept(new IPreferenceNodeVisitor() {
+				@Override
+				public boolean visit(IEclipsePreferences childNode) throws BackingStoreException {
+					// don't exclude root instance node
+					if (childNode.name().equals(InstanceScope.SCOPE)) {
+						return true;
+					}
+					// exclude all which not relative do WindowBuilder
+					if (!StringUtils.contains(childNode.absolutePath(), PREFERENCES_PREFIX)) {
+						excludesList.add(childNode.name());
+					}
+					return true;
+				}
+			});
+			// do export
+			ByteArrayOutputStream exportStream = new ByteArrayOutputStream();
+			exportStatus =
+					service.exportPreferences(
+							node,
+							exportStream,
+							excludesList.toArray(new String[excludesList.size()]));
+			if (exportStatus.getCode() != IStatus.OK) {
+				throw new RuntimeException(EXPORT_ERROR_MESSAGE);
+			}
+			// return input stream to be saved
+			return new ByteArrayInputStream(exportStream.toByteArray());
+		} catch (Throwable e) {
+			DesignerPlugin.log(e);
+			// show error
+			ErrorDialog.openError(
+					DesignerPlugin.getShell(),
+					Messages.PreferencesFileReportEntry_errorTitle,
+					EXPORT_ERROR_MESSAGE,
+					exportStatus == null
+					? new Status(IStatus.ERROR, DesignerPlugin.PLUGIN_ID, 0, null, e)
+							: exportStatus);
+		}
+		return null;
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/errors/report2/ProjectReportEntry.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/errors/report2/ProjectReportEntry.java
index ef4c8c9a4..e61538d7c 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/errors/report2/ProjectReportEntry.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/errors/report2/ProjectReportEntry.java
@@ -34,78 +34,78 @@
  * @coverage core.editor.errors.report2
  */
 public final class ProjectReportEntry implements IReportEntry {
-  // constant
-  private static final long MAX_FILE_SIZE = 350 * 1024; // no more than 350K
-  // field
-  private final IProject m_project;
+	// constant
+	private static final long MAX_FILE_SIZE = 350 * 1024; // no more than 350K
+	// field
+	private final IProject m_project;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ProjectReportEntry(IProject project) {
-    m_project = project;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ProjectReportEntry(IProject project) {
+		m_project = project;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IFileReportInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void write(final ZipOutputStream zipStream) throws Exception {
-    // prepare project
-    m_project.refreshLocal(IResource.DEPTH_INFINITE, null);
-    // traverse project files
-    m_project.accept(new IResourceVisitor() {
-      @Override
-      public boolean visit(IResource resource) throws CoreException {
-        try {
-          // skip non-local, unresolved files and files with size more than MAX_FILE_SIZE
-          long fileSize = getResourceSize(resource);
-          if (fileSize == 0 || fileSize > MAX_FILE_SIZE) {
-            return true;
-          }
-          // skip binaries
-          String fileExtension = resource.getFileExtension();
-          if (fileExtension == null || fileExtension.equalsIgnoreCase("class")) {
-            return false;
-          }
-          // open stream and put it contents to zip
-          IFile file = (IFile) resource;
-          InputStream fileStream = file.getContents();
-          // remove leading slash
-          String filePath =
-              "project/"
-                  + StringUtils.removeStart(file.getFullPath().toPortableString(), File.separator);
-          zipStream.putNextEntry(new ZipEntry(filePath));
-          try {
-            IOUtils.copy(fileStream, zipStream);
-          } finally {
-            zipStream.closeEntry();
-            IOUtils.closeQuietly(fileStream);
-          }
-        } catch (Throwable e) {
-          DesignerPlugin.log(e);
-        }
-        return true;
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IFileReportInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void write(final ZipOutputStream zipStream) throws Exception {
+		// prepare project
+		m_project.refreshLocal(IResource.DEPTH_INFINITE, null);
+		// traverse project files
+		m_project.accept(new IResourceVisitor() {
+			@Override
+			public boolean visit(IResource resource) throws CoreException {
+				try {
+					// skip non-local, unresolved files and files with size more than MAX_FILE_SIZE
+					long fileSize = getResourceSize(resource);
+					if (fileSize == 0 || fileSize > MAX_FILE_SIZE) {
+						return true;
+					}
+					// skip binaries
+					String fileExtension = resource.getFileExtension();
+					if (fileExtension == null || fileExtension.equalsIgnoreCase("class")) {
+						return false;
+					}
+					// open stream and put it contents to zip
+					IFile file = (IFile) resource;
+					InputStream fileStream = file.getContents();
+					// remove leading slash
+					String filePath =
+							"project/"
+									+ StringUtils.removeStart(file.getFullPath().toPortableString(), File.separator);
+					zipStream.putNextEntry(new ZipEntry(filePath));
+					try {
+						IOUtils.copy(fileStream, zipStream);
+					} finally {
+						zipStream.closeEntry();
+						IOUtils.closeQuietly(fileStream);
+					}
+				} catch (Throwable e) {
+					DesignerPlugin.log(e);
+				}
+				return true;
+			}
+		});
+	}
 
-  /**
-   * Return the size of the supplied file.
-   */
-  private static long getResourceSize(IResource resource) {
-    if (resource.getType() != IResource.FILE) {
-      return 0;
-    }
-    IFile file = (IFile) resource;
-    URI location = file.getLocationURI();
-    if (location == null) {
-      return 0;
-    }
-    return new File(location.getSchemeSpecificPart()).length();
-  }
+	/**
+	 * Return the size of the supplied file.
+	 */
+	private static long getResourceSize(IResource resource) {
+		if (resource.getType() != IResource.FILE) {
+			return 0;
+		}
+		IFile file = (IFile) resource;
+		URI location = file.getLocationURI();
+		if (location == null) {
+			return 0;
+		}
+		return new File(location.getSchemeSpecificPart()).length();
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/errors/report2/ScreenshotFileReportEntry.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/errors/report2/ScreenshotFileReportEntry.java
index e13b543ec..b9818d3e5 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/errors/report2/ScreenshotFileReportEntry.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/errors/report2/ScreenshotFileReportEntry.java
@@ -27,48 +27,48 @@
  * @coverage core.editor.errors.report2
  */
 public final class ScreenshotFileReportEntry extends FileReportEntry {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ScreenshotFileReportEntry(String filePath) {
-    super(filePath);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ScreenshotFileReportEntry(String filePath) {
+		super(filePath);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AbstractFileReportInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getName() {
-    String filePath = getFilePath();
-    String name;
-    if (isBmp()) {
-      // change file extension
-      name = FilenameUtils.getBaseName(filePath) + ".png";
-    } else {
-      name = FilenameUtils.getName(filePath);
-    }
-    return "screenshots/" + name;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AbstractFileReportInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getName() {
+		String filePath = getFilePath();
+		String name;
+		if (isBmp()) {
+			// change file extension
+			name = FilenameUtils.getBaseName(filePath) + ".png";
+		} else {
+			name = FilenameUtils.getName(filePath);
+		}
+		return "screenshots/" + name;
+	}
 
-  @Override
-  protected InputStream getContents() throws Exception {
-    if (isBmp()) {
-      ByteArrayOutputStream outStream = new ByteArrayOutputStream();
-      // attempt to convert bmp into png
-      ImageLoader imageLoader = new ImageLoader();
-      imageLoader.load(getFilePath());
-      imageLoader.save(outStream, SWT.IMAGE_PNG);
-      return new ByteArrayInputStream(outStream.toByteArray());
-    } else {
-      return super.getContents();
-    }
-  }
+	@Override
+	protected InputStream getContents() throws Exception {
+		if (isBmp()) {
+			ByteArrayOutputStream outStream = new ByteArrayOutputStream();
+			// attempt to convert bmp into png
+			ImageLoader imageLoader = new ImageLoader();
+			imageLoader.load(getFilePath());
+			imageLoader.save(outStream, SWT.IMAGE_PNG);
+			return new ByteArrayInputStream(outStream.toByteArray());
+		} else {
+			return super.getContents();
+		}
+	}
 
-  private boolean isBmp() {
-    return FilenameUtils.getExtension(getFilePath()).equalsIgnoreCase("bmp");
-  }
+	private boolean isBmp() {
+		return FilenameUtils.getExtension(getFilePath()).equalsIgnoreCase("bmp");
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/errors/report2/StringFileReportEntry.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/errors/report2/StringFileReportEntry.java
index 889b58e43..c538e3d99 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/errors/report2/StringFileReportEntry.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/errors/report2/StringFileReportEntry.java
@@ -21,25 +21,25 @@
  * @coverage core.editor.errors.report2
  */
 public class StringFileReportEntry extends FileReportEntry {
-  private final String m_contents;
+	private final String m_contents;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public StringFileReportEntry(String name, String contents) {
-    super(name);
-    m_contents = contents;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public StringFileReportEntry(String name, String contents) {
+		super(name);
+		m_contents = contents;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // FileReportEntry
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected InputStream getContents() throws Exception {
-    return IOUtils.toInputStream(m_contents);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// FileReportEntry
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected InputStream getContents() throws Exception {
+		return IOUtils.toInputStream(m_contents);
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/errors/report2/ZipFileErrorReport.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/errors/report2/ZipFileErrorReport.java
index 505545a7f..2a7484dc4 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/errors/report2/ZipFileErrorReport.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/errors/report2/ZipFileErrorReport.java
@@ -42,297 +42,297 @@
  * @coverage core.editor.errors.report
  */
 public final class ZipFileErrorReport implements IErrorReport {
-  // fields
-  private final List<IReportEntry> m_entries = Lists.newArrayList();
-  private final IProject m_project;
-  private final IReportEntry m_sourceFileReport;
-  private final ProjectReportEntry m_projectFileReport;
-  private final EnvironmentFileReportInfo m_environmentFileReport;
+	// fields
+	private final List<IReportEntry> m_entries = Lists.newArrayList();
+	private final IProject m_project;
+	private final IReportEntry m_sourceFileReport;
+	private final ProjectReportEntry m_projectFileReport;
+	private final EnvironmentFileReportInfo m_environmentFileReport;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Creates the {@link ZipFileErrorReport}.
-   *
-   * @param defaultScreenShot
-   *          the {@link Image} of screenshot. May be <code>null</code>.
-   * @param project
-   *          the IProject instance at which error occurred. Required.
-   * @param sourceFileReport
-   *          a report entry for current editing source contents. May be <code>null</code>.
-   */
-  public ZipFileErrorReport(Image defaultScreenShot, IProject project, IReportEntry sourceFileReport) {
-    m_defaultScreenShot = defaultScreenShot;
-    m_project = project;
-    m_sourceFileReport = sourceFileReport;
-    // create reports
-    m_projectFileReport = new ProjectReportEntry(project);
-    m_environmentFileReport = new EnvironmentFileReportInfo(project);
-    // setup file attachments
-    setupScreenshots();
-    setupFiles();
-    // add reports
-    m_entries.add(m_environmentFileReport);
-    m_entries.add(new PreferencesFileReportEntry());
-    m_entries.add(new EclipseLogEntryFileReportInfo());
-    if (m_sourceFileReport != null) {
-      m_entries.add(m_sourceFileReport);
-    }
-    // search for more
-    addExternalReportEntries();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Creates the {@link ZipFileErrorReport}.
+	 *
+	 * @param defaultScreenShot
+	 *          the {@link Image} of screenshot. May be <code>null</code>.
+	 * @param project
+	 *          the IProject instance at which error occurred. Required.
+	 * @param sourceFileReport
+	 *          a report entry for current editing source contents. May be <code>null</code>.
+	 */
+	public ZipFileErrorReport(Image defaultScreenShot, IProject project, IReportEntry sourceFileReport) {
+		m_defaultScreenShot = defaultScreenShot;
+		m_project = project;
+		m_sourceFileReport = sourceFileReport;
+		// create reports
+		m_projectFileReport = new ProjectReportEntry(project);
+		m_environmentFileReport = new EnvironmentFileReportInfo(project);
+		// setup file attachments
+		setupScreenshots();
+		setupFiles();
+		// add reports
+		m_entries.add(m_environmentFileReport);
+		m_entries.add(new PreferencesFileReportEntry());
+		m_entries.add(new EclipseLogEntryFileReportInfo());
+		if (m_sourceFileReport != null) {
+			m_entries.add(m_sourceFileReport);
+		}
+		// search for more
+		addExternalReportEntries();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Prepares report as zip file and opens default file-system browser pointing to file location.
-   */
-  public void reportProblem(IProgressMonitor monitor) throws Exception {
-    // create zip.
-    String reportFileName = createZipReport(monitor);
-    // open
-    Program.launch(new Path(reportFileName).removeLastSegments(1).toOSString());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Prepares report as zip file and opens default file-system browser pointing to file location.
+	 */
+	public void reportProblem(IProgressMonitor monitor) throws Exception {
+		// create zip.
+		String reportFileName = createZipReport(monitor);
+		// open
+		Program.launch(new Path(reportFileName).removeLastSegments(1).toOSString());
+	}
 
-  /**
-   * Compress the contents of report into single zip file.
-   */
-  private String createZipReport(IProgressMonitor monitor) throws Exception {
-    monitor.beginTask(Messages.ZipFileErrorReport_taskTitle, m_entries.size());
-    // store zip as temp file
-    // prepare temp dir and file
-    File tempDir = getReportTemporaryDirectory();
-    String fileName = "report-" + DateFormatUtils.format(new Date(), "yyyyMMdd-HHmmss") + ".zip";
-    File tempFile = new File(tempDir, fileName);
-    tempFile.deleteOnExit();
-    // create stream
-    ZipOutputStream zipStream = null;
-    try {
-      zipStream = new ZipOutputStream(new FileOutputStream(tempFile));
-      zipStream.setLevel(9);
-      // compress the files
-      for (IReportEntry reportInfo : m_entries) {
-        try {
-          reportInfo.write(zipStream);
-        } catch (Throwable e) {
-          DesignerPlugin.log(e);
-        }
-      }
-    } finally {
-      IOUtils.closeQuietly(zipStream);
-    }
-    return tempFile.getAbsolutePath();
-  }
+	/**
+	 * Compress the contents of report into single zip file.
+	 */
+	private String createZipReport(IProgressMonitor monitor) throws Exception {
+		monitor.beginTask(Messages.ZipFileErrorReport_taskTitle, m_entries.size());
+		// store zip as temp file
+		// prepare temp dir and file
+		File tempDir = getReportTemporaryDirectory();
+		String fileName = "report-" + DateFormatUtils.format(new Date(), "yyyyMMdd-HHmmss") + ".zip";
+		File tempFile = new File(tempDir, fileName);
+		tempFile.deleteOnExit();
+		// create stream
+		ZipOutputStream zipStream = null;
+		try {
+			zipStream = new ZipOutputStream(new FileOutputStream(tempFile));
+			zipStream.setLevel(9);
+			// compress the files
+			for (IReportEntry reportInfo : m_entries) {
+				try {
+					reportInfo.write(zipStream);
+				} catch (Throwable e) {
+					DesignerPlugin.log(e);
+				}
+			}
+		} finally {
+			IOUtils.closeQuietly(zipStream);
+		}
+		return tempFile.getAbsolutePath();
+	}
 
-  /**
-   * @return the temporary directory for holding report files.
-   */
-  //@edu.umd.cs.findbugs.annotations.SuppressWarnings(value = "RV_RETURN_VALUE_IGNORED_BAD_PRACTIC")
-  public static File getReportTemporaryDirectory() {
-    String tmpDirPath = System.getProperty("java.io.tmpdir");
-    tmpDirPath += File.separator + "wbp-report";
-    File tempDir = new File(tmpDirPath);
-    tempDir.mkdirs();
-    tempDir.deleteOnExit();
-    return tempDir;
-  }
+	/**
+	 * @return the temporary directory for holding report files.
+	 */
+	//@edu.umd.cs.findbugs.annotations.SuppressWarnings(value = "RV_RETURN_VALUE_IGNORED_BAD_PRACTIC")
+	public static File getReportTemporaryDirectory() {
+		String tmpDirPath = System.getProperty("java.io.tmpdir");
+		tmpDirPath += File.separator + "wbp-report";
+		File tempDir = new File(tmpDirPath);
+		tempDir.mkdirs();
+		tempDir.deleteOnExit();
+		return tempDir;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Screenshots
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Map<String, IReportEntry> m_screenshotsMap;
-  private final Image m_defaultScreenShot;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Screenshots
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Map<String, IReportEntry> m_screenshotsMap;
+	private final Image m_defaultScreenShot;
 
-  @Override
-  public boolean hasDefaultScreenshot() {
-    return m_defaultScreenShot != null;
-  }
+	@Override
+	public boolean hasDefaultScreenshot() {
+		return m_defaultScreenShot != null;
+	}
 
-  @Override
-  public boolean hasScreenshot(String filePath) {
-    return m_screenshotsMap.get(filePath) != null;
-  }
+	@Override
+	public boolean hasScreenshot(String filePath) {
+		return m_screenshotsMap.get(filePath) != null;
+	}
 
-  @Override
-  public void includeScreenshot(String filePath, boolean include) {
-    if (include) {
-      addScreenshot(filePath);
-    } else {
-      IReportEntry removed = m_screenshotsMap.remove(filePath);
-      m_entries.remove(removed);
-    }
-  }
+	@Override
+	public void includeScreenshot(String filePath, boolean include) {
+		if (include) {
+			addScreenshot(filePath);
+		} else {
+			IReportEntry removed = m_screenshotsMap.remove(filePath);
+			m_entries.remove(removed);
+		}
+	}
 
-  /**
-   * Adds user screenshot to be sent.
-   *
-   * @param filePath
-   *          the full path to a file with screenshot.
-   */
-  private void addScreenshot(String filePath) {
-    if (!hasScreenshot(filePath)) {
-      ScreenshotFileReportEntry reportInfo = new ScreenshotFileReportEntry(filePath);
-      m_screenshotsMap.put(filePath, reportInfo);
-      m_entries.add(reportInfo);
-    }
-  }
+	/**
+	 * Adds user screenshot to be sent.
+	 *
+	 * @param filePath
+	 *          the full path to a file with screenshot.
+	 */
+	private void addScreenshot(String filePath) {
+		if (!hasScreenshot(filePath)) {
+			ScreenshotFileReportEntry reportInfo = new ScreenshotFileReportEntry(filePath);
+			m_screenshotsMap.put(filePath, reportInfo);
+			m_entries.add(reportInfo);
+		}
+	}
 
-  /**
-   * Removes all screenshots from being sent list, adds default screenshot if available.
-   */
-  public void setupScreenshots() {
-    removeEntries(m_screenshotsMap);
-    m_screenshotsMap = Maps.newTreeMap();
-    if (hasDefaultScreenshot()) {
-      addScreenshot("default-screenshot.png");
-    }
-  }
+	/**
+	 * Removes all screenshots from being sent list, adds default screenshot if available.
+	 */
+	public void setupScreenshots() {
+		removeEntries(m_screenshotsMap);
+		m_screenshotsMap = Maps.newTreeMap();
+		if (hasDefaultScreenshot()) {
+			addScreenshot("default-screenshot.png");
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Files
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Map<String, IReportEntry> m_filesMap;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Files
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Map<String, IReportEntry> m_filesMap;
 
-  @Override
-  public boolean hasFile(String filePath) {
-    return m_filesMap.get(filePath) != null;
-  }
+	@Override
+	public boolean hasFile(String filePath) {
+		return m_filesMap.get(filePath) != null;
+	}
 
-  @Override
-  public void includeFile(String filePath, boolean include) {
-    if (include) {
-      addFile(filePath);
-    } else {
-      IReportEntry removed = m_filesMap.remove(filePath);
-      m_entries.remove(removed);
-    }
-  }
+	@Override
+	public void includeFile(String filePath, boolean include) {
+		if (include) {
+			addFile(filePath);
+		} else {
+			IReportEntry removed = m_filesMap.remove(filePath);
+			m_entries.remove(removed);
+		}
+	}
 
-  /**
-   * Adds a file to be sent.
-   *
-   * @param filePath
-   *          the full path to a file.
-   */
-  private void addFile(String filePath) {
-    if (!hasFile(filePath)) {
-      FileReportEntry reportInfo = new FileReportEntry(filePath) {
-        @Override
-        public String getName() {
-          return "files/" + FilenameUtils.getName(getFilePath());
-        }
-      };
-      m_filesMap.put(filePath, reportInfo);
-      m_entries.add(reportInfo);
-    }
-  }
+	/**
+	 * Adds a file to be sent.
+	 *
+	 * @param filePath
+	 *          the full path to a file.
+	 */
+	private void addFile(String filePath) {
+		if (!hasFile(filePath)) {
+			FileReportEntry reportInfo = new FileReportEntry(filePath) {
+				@Override
+				public String getName() {
+					return "files/" + FilenameUtils.getName(getFilePath());
+				}
+			};
+			m_filesMap.put(filePath, reportInfo);
+			m_entries.add(reportInfo);
+		}
+	}
 
-  /**
-   * Removes all files from being sent list.
-   */
-  public void setupFiles() {
-    removeEntries(m_filesMap);
-    m_filesMap = Maps.newTreeMap();
-  }
+	/**
+	 * Removes all files from being sent list.
+	 */
+	public void setupFiles() {
+		removeEntries(m_filesMap);
+		m_filesMap = Maps.newTreeMap();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public String getComputerInfo() {
-    try {
-      String contents = IOUtils2.readString(m_environmentFileReport.getContents());
-      return "<html><body><pre>" + contents + "</pre></body></html>";
-    } catch (Throwable e) {
-      // should not happen :)
-      return Messages.ZipFileErrorReport_errorMessage;
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public String getComputerInfo() {
+		try {
+			String contents = IOUtils2.readString(m_environmentFileReport.getContents());
+			return "<html><body><pre>" + contents + "</pre></body></html>";
+		} catch (Throwable e) {
+			// should not happen :)
+			return Messages.ZipFileErrorReport_errorMessage;
+		}
+	}
 
-  @Override
-  public boolean hasSourceFile() {
-    return m_sourceFileReport != null && m_entries.indexOf(m_sourceFileReport) != -1;
-  }
+	@Override
+	public boolean hasSourceFile() {
+		return m_sourceFileReport != null && m_entries.indexOf(m_sourceFileReport) != -1;
+	}
 
-  /**
-   * @return adds extra {@link IReportEntry}s using extension point.
-   */
-  private void addExternalReportEntries() {
-    List<IReportEntriesProvider> providers =
-        ExternalFactoriesHelper.getElementsInstances(
-            IReportEntriesProvider.class,
-            "org.eclipse.wb.core.errorReportEntriesProviders",
-            "provider");
-    for (IReportEntriesProvider provider : providers) {
-      provider.addEntries(this);
-    }
-  }
+	/**
+	 * @return adds extra {@link IReportEntry}s using extension point.
+	 */
+	private void addExternalReportEntries() {
+		List<IReportEntriesProvider> providers =
+				ExternalFactoriesHelper.getElementsInstances(
+						IReportEntriesProvider.class,
+						"org.eclipse.wb.core.errorReportEntriesProviders",
+						"provider");
+		for (IReportEntriesProvider provider : providers) {
+			provider.addEntries(this);
+		}
+	}
 
-  @Override
-  public IProject getProject() {
-    return m_project;
-  }
+	@Override
+	public IProject getProject() {
+		return m_project;
+	}
 
-  @Override
-  public void addEntry(IReportEntry entry) {
-    if (m_entries.indexOf(entry) == -1) {
-      m_entries.add(entry);
-    }
-  }
+	@Override
+	public void addEntry(IReportEntry entry) {
+		if (m_entries.indexOf(entry) == -1) {
+			m_entries.add(entry);
+		}
+	}
 
-  @Override
-  public void removeEntry(IReportEntry entry) {
-    m_entries.remove(entry);
-  }
+	@Override
+	public void removeEntry(IReportEntry entry) {
+		m_entries.remove(entry);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Various settings
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets whether or not include compilation unit into this report.
-   */
-  public void setIncludeSourceFile(boolean include) {
-    checkInclude(m_sourceFileReport, include);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Various settings
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets whether or not include compilation unit into this report.
+	 */
+	public void setIncludeSourceFile(boolean include) {
+		checkInclude(m_sourceFileReport, include);
+	}
 
-  /**
-   * Sets whether or not include the entire project into this report.
-   */
-  public void setIncludeProject(boolean include) {
-    checkInclude(m_projectFileReport, include);
-  }
+	/**
+	 * Sets whether or not include the entire project into this report.
+	 */
+	public void setIncludeProject(boolean include) {
+		checkInclude(m_projectFileReport, include);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Misc
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void removeEntries(Map<String, IReportEntry> map) {
-    if (map != null) {
-      for (Entry<String, IReportEntry> entry : map.entrySet()) {
-        m_entries.remove(entry.getValue());
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Misc
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void removeEntries(Map<String, IReportEntry> map) {
+		if (map != null) {
+			for (Entry<String, IReportEntry> entry : map.entrySet()) {
+				m_entries.remove(entry.getValue());
+			}
+		}
+	}
 
-  private void checkInclude(IReportEntry report, boolean include) {
-    if (include) {
-      addEntry(report);
-    } else {
-      removeEntry(report);
-    }
-  }
+	private void checkInclude(IReportEntry report, boolean include) {
+		if (include) {
+			addEntry(report);
+		} else {
+			removeEntry(report);
+		}
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/errors/report2/logs/EclipseErrorLogsReportEntry.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/errors/report2/logs/EclipseErrorLogsReportEntry.java
index f6274743d..90493ee53 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/errors/report2/logs/EclipseErrorLogsReportEntry.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/errors/report2/logs/EclipseErrorLogsReportEntry.java
@@ -28,23 +28,23 @@
  * @coverage core.editor.errors.report2
  */
 public final class EclipseErrorLogsReportEntry extends FileListReportEntry {
-  @Override
-  protected List<File> getFiles() {
-    // get path to Eclipse .log file(s) and get it's directory
-    IPath logsPath = Platform.getLogFileLocation().makeAbsolute().removeLastSegments(1);
-    File logsPathAsFile = logsPath.toFile();
-    // get list of .log files
-    File[] logFiles = logsPathAsFile.listFiles(new FilenameFilter() {
-      @Override
-      public boolean accept(File dir, String name) {
-        return name.endsWith(".log");
-      }
-    });
-    return Lists.newArrayList(logFiles);
-  }
+	@Override
+	protected List<File> getFiles() {
+		// get path to Eclipse .log file(s) and get it's directory
+		IPath logsPath = Platform.getLogFileLocation().makeAbsolute().removeLastSegments(1);
+		File logsPathAsFile = logsPath.toFile();
+		// get list of .log files
+		File[] logFiles = logsPathAsFile.listFiles(new FilenameFilter() {
+			@Override
+			public boolean accept(File dir, String name) {
+				return name.endsWith(".log");
+			}
+		});
+		return Lists.newArrayList(logFiles);
+	}
 
-  @Override
-  protected String getPrefix() {
-    return "eclipse-logs/";
-  }
+	@Override
+	protected String getPrefix() {
+		return "eclipse-logs/";
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/structure/IPage.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/structure/IPage.java
index 300523ec0..03f529abe 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/structure/IPage.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/structure/IPage.java
@@ -21,36 +21,36 @@
  * @coverage core.editor.structure
  */
 public interface IPage {
-  /**
-   * Creates the {@link Control} for this page.
-   */
-  void createControl(Composite parent);
+	/**
+	 * Creates the {@link Control} for this page.
+	 */
+	void createControl(Composite parent);
 
-  /**
-   * Disposes this page.
-   * <p>
-   * This is the last method called on the {@link IPage}. Implementors should clean up any resources
-   * associated with the page.
-   * <p>
-   * Note that there is no guarantee that {@link #createControl(Composite)} has been called, so the
-   * control may never have been created.
-   */
-  void dispose();
+	/**
+	 * Disposes this page.
+	 * <p>
+	 * This is the last method called on the {@link IPage}. Implementors should clean up any resources
+	 * associated with the page.
+	 * <p>
+	 * Note that there is no guarantee that {@link #createControl(Composite)} has been called, so the
+	 * control may never have been created.
+	 */
+	void dispose();
 
-  /**
-   * @return the {@link Control} of this page, may be <code>null</code>.
-   */
-  Control getControl();
+	/**
+	 * @return the {@link Control} of this page, may be <code>null</code>.
+	 */
+	Control getControl();
 
-  /**
-   * Allows the page to make contributions to the given {@link IToolBarManager}. The contributions
-   * will be visible when the page is visible. This method is automatically called shortly after
-   * {@link #createControl(Composite)} is called.
-   */
-  void setToolBar(IToolBarManager toolBarManager);
+	/**
+	 * Allows the page to make contributions to the given {@link IToolBarManager}. The contributions
+	 * will be visible when the page is visible. This method is automatically called shortly after
+	 * {@link #createControl(Composite)} is called.
+	 */
+	void setToolBar(IToolBarManager toolBarManager);
 
-  /**
-   * Asks this page to take focus.
-   */
-  void setFocus();
+	/**
+	 * Asks this page to take focus.
+	 */
+	void setFocus();
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/structure/PageSiteComposite.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/structure/PageSiteComposite.java
index bc96718d9..6e2223543 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/structure/PageSiteComposite.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/structure/PageSiteComposite.java
@@ -29,67 +29,67 @@
  * @coverage core.editor.structure
  */
 public final class PageSiteComposite extends Composite {
-  private final CImageLabel m_title;
-  private final ToolBarManager m_toolBarManager;
-  private final ToolBar m_toolBar;
-  private IPage m_page;
+	private final CImageLabel m_title;
+	private final ToolBarManager m_toolBarManager;
+	private final ToolBar m_toolBar;
+	private IPage m_page;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public PageSiteComposite(Composite parent, int style) {
-    super(parent, style);
-    GridLayoutFactory.create(this).noMargins().spacingV(0).columns(2);
-    // title
-    {
-      m_title = new CImageLabel(this, SWT.NONE);
-      GridDataFactory.create(m_title).grabH().fill();
-    }
-    // toolbar
-    {
-      m_toolBar = new ToolBar(this, SWT.FLAT | SWT.RIGHT);
-      GridDataFactory.create(m_toolBar).fill();
-      m_toolBarManager = new ToolBarManager(m_toolBar);
-    }
-    // separator
-    {
-      Label separator = new Label(this, SWT.SEPARATOR | SWT.HORIZONTAL);
-      GridDataFactory.create(separator).spanH(2).grabH().fillH();
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public PageSiteComposite(Composite parent, int style) {
+		super(parent, style);
+		GridLayoutFactory.create(this).noMargins().spacingV(0).columns(2);
+		// title
+		{
+			m_title = new CImageLabel(this, SWT.NONE);
+			GridDataFactory.create(m_title).grabH().fill();
+		}
+		// toolbar
+		{
+			m_toolBar = new ToolBar(this, SWT.FLAT | SWT.RIGHT);
+			GridDataFactory.create(m_toolBar).fill();
+			m_toolBarManager = new ToolBarManager(m_toolBar);
+		}
+		// separator
+		{
+			Label separator = new Label(this, SWT.SEPARATOR | SWT.HORIZONTAL);
+			GridDataFactory.create(separator).spanH(2).grabH().fillH();
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets the {@link Image} for title;
-   */
-  public void setTitleImage(Image image) {
-    m_title.setImage(image);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets the {@link Image} for title;
+	 */
+	public void setTitleImage(Image image) {
+		m_title.setImage(image);
+	}
 
-  /**
-   * Sets the text for title.
-   */
-  public void setTitleText(String title) {
-    m_title.setText(title);
-  }
+	/**
+	 * Sets the text for title.
+	 */
+	public void setTitleText(String title) {
+		m_title.setText(title);
+	}
 
-  /**
-   * Sets the {@link IPage} to display.
-   */
-  public void setPage(IPage page) {
-    Assert.isNull(m_page);
-    Assert.isNotNull(page);
-    m_page = page;
-    // create Control
-    m_page.createControl(this);
-    GridDataFactory.create(m_page.getControl()).spanH(2).grab().fill();
-    // set toolbar
-    m_page.setToolBar(m_toolBarManager);
-  }
+	/**
+	 * Sets the {@link IPage} to display.
+	 */
+	public void setPage(IPage page) {
+		Assert.isNull(m_page);
+		Assert.isNotNull(page);
+		m_page = page;
+		// create Control
+		m_page.createControl(this);
+		GridDataFactory.create(m_page.getControl()).spanH(2).grab().fill();
+		// set toolbar
+		m_page.setToolBar(m_toolBarManager);
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/structure/PartListenerAdapter.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/structure/PartListenerAdapter.java
index 4a581ce39..aa2803e24 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/structure/PartListenerAdapter.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/structure/PartListenerAdapter.java
@@ -20,23 +20,23 @@
  * @coverage core.editor
  */
 public abstract class PartListenerAdapter implements IPartListener {
-  @Override
-  public void partActivated(IWorkbenchPart part) {
-  }
+	@Override
+	public void partActivated(IWorkbenchPart part) {
+	}
 
-  @Override
-  public void partBroughtToTop(IWorkbenchPart part) {
-  }
+	@Override
+	public void partBroughtToTop(IWorkbenchPart part) {
+	}
 
-  @Override
-  public void partClosed(IWorkbenchPart part) {
-  }
+	@Override
+	public void partClosed(IWorkbenchPart part) {
+	}
 
-  @Override
-  public void partDeactivated(IWorkbenchPart part) {
-  }
+	@Override
+	public void partDeactivated(IWorkbenchPart part) {
+	}
 
-  @Override
-  public void partOpened(IWorkbenchPart part) {
-  }
+	@Override
+	public void partOpened(IWorkbenchPart part) {
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/structure/components/ComponentsTreePage.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/structure/components/ComponentsTreePage.java
index 718d7d2a1..9960f8768 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/structure/components/ComponentsTreePage.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/structure/components/ComponentsTreePage.java
@@ -50,246 +50,246 @@
  * @coverage core.editor.structure
  */
 public final class ComponentsTreePage implements IPage {
-  private TreeViewer m_viewer;
-  private IEditPartViewer m_graphicalViewer;
-  private ObjectInfo m_rootObject;
+	private TreeViewer m_viewer;
+	private IEditPartViewer m_graphicalViewer;
+	private ObjectInfo m_rootObject;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IPage
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void dispose() {
-    Control control = getControl();
-    if (control != null && !control.isDisposed()) {
-      control.dispose();
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IPage
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void dispose() {
+		Control control = getControl();
+		if (control != null && !control.isDisposed()) {
+			control.dispose();
+		}
+	}
 
-  @Override
-  public void createControl(Composite parent) {
-    m_viewer = new TreeViewer(parent, SWT.H_SCROLL | SWT.V_SCROLL | SWT.MULTI);
-    m_viewer.addSelectionChangedListener(m_selectionListener_Tree);
-  }
+	@Override
+	public void createControl(Composite parent) {
+		m_viewer = new TreeViewer(parent, SWT.H_SCROLL | SWT.V_SCROLL | SWT.MULTI);
+		m_viewer.addSelectionChangedListener(m_selectionListener_Tree);
+	}
 
-  @Override
-  public Control getControl() {
-    return m_viewer.getControl();
-  }
+	@Override
+	public Control getControl() {
+		return m_viewer.getControl();
+	}
 
-  @Override
-  public void setFocus() {
-    getControl().setFocus();
-  }
+	@Override
+	public void setFocus() {
+		getControl().setFocus();
+	}
 
-  @Override
-  public void setToolBar(IToolBarManager toolBarManager) {
-    {
-      IAction action = new Action() {
-        @Override
-        public void run() {
-          UiUtils.expandAll(m_viewer.getTree());
-        }
-      };
-      toolBarManager.add(action);
-      action.setImageDescriptor(DesignerPlugin.getImageDescriptor("expand_all.gif"));
-      action.setToolTipText(Messages.ComponentsTreePage_expandAllAction);
-    }
-    {
-      Action action = new Action() {
-        @Override
-        public void run() {
-          UiUtils.collapseAll(m_viewer.getTree());
-        }
-      };
-      toolBarManager.add(action);
-      action.setImageDescriptor(DesignerPlugin.getImageDescriptor("collapse_all.gif"));
-      action.setToolTipText(Messages.ComponentsTreePage_collapseAllAction);
-    }
-    toolBarManager.update(false);
-  }
+	@Override
+	public void setToolBar(IToolBarManager toolBarManager) {
+		{
+			IAction action = new Action() {
+				@Override
+				public void run() {
+					UiUtils.expandAll(m_viewer.getTree());
+				}
+			};
+			toolBarManager.add(action);
+			action.setImageDescriptor(DesignerPlugin.getImageDescriptor("expand_all.gif"));
+			action.setToolTipText(Messages.ComponentsTreePage_expandAllAction);
+		}
+		{
+			Action action = new Action() {
+				@Override
+				public void run() {
+					UiUtils.collapseAll(m_viewer.getTree());
+				}
+			};
+			toolBarManager.add(action);
+			action.setImageDescriptor(DesignerPlugin.getImageDescriptor("collapse_all.gif"));
+			action.setToolTipText(Messages.ComponentsTreePage_collapseAllAction);
+		}
+		toolBarManager.update(false);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Selection (internal)
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Listener for selection in {@link #m_viewer}.
-   */
-  private final ISelectionChangedListener m_selectionListener_Tree =
-      new ISelectionChangedListener() {
-        @Override
-        public void selectionChanged(SelectionChangedEvent event) {
-          selectGraphicalViewer();
-        }
-      };
-  /**
-   * Listener for selection in {@link #m_graphicalViewer}.
-   */
-  private final ISelectionChangedListener m_selectionListener_Graphical =
-      new ISelectionChangedListener() {
-        @Override
-        public void selectionChanged(SelectionChangedEvent event) {
-          selectTreeViewer();
-        }
-      };
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Selection (internal)
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Listener for selection in {@link #m_viewer}.
+	 */
+	private final ISelectionChangedListener m_selectionListener_Tree =
+			new ISelectionChangedListener() {
+		@Override
+		public void selectionChanged(SelectionChangedEvent event) {
+			selectGraphicalViewer();
+		}
+	};
+	/**
+	 * Listener for selection in {@link #m_graphicalViewer}.
+	 */
+	private final ISelectionChangedListener m_selectionListener_Graphical =
+			new ISelectionChangedListener() {
+		@Override
+		public void selectionChanged(SelectionChangedEvent event) {
+			selectTreeViewer();
+		}
+	};
 
-  /**
-   * Selects {@link ObjectInfo}'s in {@link #m_viewer} using selection in {@link #m_graphicalViewer}
-   * .
-   */
-  private void selectTreeViewer() {
-    List<EditPart> selectedEditParts = m_graphicalViewer.getSelectedEditParts();
-    setSelection(m_viewer, m_selectionListener_Tree, selectedEditParts);
-    showComponentDefinition(selectedEditParts);
-  }
+	/**
+	 * Selects {@link ObjectInfo}'s in {@link #m_viewer} using selection in {@link #m_graphicalViewer}
+	 * .
+	 */
+	private void selectTreeViewer() {
+		List<EditPart> selectedEditParts = m_graphicalViewer.getSelectedEditParts();
+		setSelection(m_viewer, m_selectionListener_Tree, selectedEditParts);
+		showComponentDefinition(selectedEditParts);
+	}
 
-  /**
-   * Selects {@link EditPart}'s in {@link #m_graphicalViewer} using selection in {@link #m_viewer}.
-   */
-  private void selectGraphicalViewer() {
-    final List<EditPart> selectedEditParts = m_viewer.getSelectedEditParts();
-    // refresh if necessary
-    ExecutionUtils.runLog(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        boolean[] refreshFlag = new boolean[1];
-        if (!selectedEditParts.isEmpty()) {
-          for (EditPart editPart : selectedEditParts) {
-            ObjectInfo objectInfo = (ObjectInfo) editPart.getModel();
-            objectInfo.getBroadcastObject().selecting(objectInfo, refreshFlag);
-          }
-        } else {
-          m_rootObject.getBroadcastObject().selecting(null, refreshFlag);
-        }
-        // Do refresh.
-        // We remove "graphical listener" because refresh can cause temporary selection changes,
-        // for example because of removing some graphical EditPart's. But we know, that we apply
-        // selection from "tree", it should stay as is, so no need to listen for "graphical listener".
-        if (refreshFlag[0]) {
-          m_graphicalViewer.removeSelectionChangedListener(m_selectionListener_Graphical);
-          try {
-            m_rootObject.refresh();
-          } finally {
-            m_graphicalViewer.addSelectionChangedListener(m_selectionListener_Graphical);
-          }
-        }
-      }
-    });
-    // set selection
-    setSelection(m_graphicalViewer, m_selectionListener_Graphical, selectedEditParts);
-    showComponentDefinition(selectedEditParts);
-  }
+	/**
+	 * Selects {@link EditPart}'s in {@link #m_graphicalViewer} using selection in {@link #m_viewer}.
+	 */
+	private void selectGraphicalViewer() {
+		final List<EditPart> selectedEditParts = m_viewer.getSelectedEditParts();
+		// refresh if necessary
+		ExecutionUtils.runLog(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				boolean[] refreshFlag = new boolean[1];
+				if (!selectedEditParts.isEmpty()) {
+					for (EditPart editPart : selectedEditParts) {
+						ObjectInfo objectInfo = (ObjectInfo) editPart.getModel();
+						objectInfo.getBroadcastObject().selecting(objectInfo, refreshFlag);
+					}
+				} else {
+					m_rootObject.getBroadcastObject().selecting(null, refreshFlag);
+				}
+				// Do refresh.
+				// We remove "graphical listener" because refresh can cause temporary selection changes,
+				// for example because of removing some graphical EditPart's. But we know, that we apply
+				// selection from "tree", it should stay as is, so no need to listen for "graphical listener".
+				if (refreshFlag[0]) {
+					m_graphicalViewer.removeSelectionChangedListener(m_selectionListener_Graphical);
+					try {
+						m_rootObject.refresh();
+					} finally {
+						m_graphicalViewer.addSelectionChangedListener(m_selectionListener_Graphical);
+					}
+				}
+			}
+		});
+		// set selection
+		setSelection(m_graphicalViewer, m_selectionListener_Graphical, selectedEditParts);
+		showComponentDefinition(selectedEditParts);
+	}
 
-  /**
-   * Sets selection in given {@link IEditPartViewer} using {@link List} of selected {@link EditPart}
-   * 's.
-   *
-   * @param targetViewer
-   *          the {@link IEditPartViewer} to set selection.
-   * @param selectionListener
-   *          the {@link ISelectionChangedListener} that should be temporary removed from
-   *          {@link IEditPartViewer} to avoid recursive selection even handling.
-   * @param sourceEditParts
-   *          the selected {@link EditPart}'s for which corresponding selection should be set.
-   */
-  private static void setSelection(IEditPartViewer targetViewer,
-      ISelectionChangedListener selectionListener,
-      List<EditPart> sourceEditParts) {
-    // prepare EditPart's in target viewer
-    List<EditPart> targetEditParts = Lists.newArrayList();
-    for (EditPart sourceEditPart : sourceEditParts) {
-      Object model = sourceEditPart.getModel();
-      if (model instanceof ObjectReferenceInfo) {
-        model = ((ObjectReferenceInfo) model).getObject();
-      }
-      EditPart targetEditPart = targetViewer.getEditPartByModel(model);
-      if (targetEditPart != null) {
-        targetEditParts.add(targetEditPart);
-      }
-    }
-    // set selection
-    targetViewer.removeSelectionChangedListener(selectionListener);
-    try {
-      targetViewer.setSelection(targetEditParts);
-    } finally {
-      targetViewer.addSelectionChangedListener(selectionListener);
-    }
-  }
+	/**
+	 * Sets selection in given {@link IEditPartViewer} using {@link List} of selected {@link EditPart}
+	 * 's.
+	 *
+	 * @param targetViewer
+	 *          the {@link IEditPartViewer} to set selection.
+	 * @param selectionListener
+	 *          the {@link ISelectionChangedListener} that should be temporary removed from
+	 *          {@link IEditPartViewer} to avoid recursive selection even handling.
+	 * @param sourceEditParts
+	 *          the selected {@link EditPart}'s for which corresponding selection should be set.
+	 */
+	private static void setSelection(IEditPartViewer targetViewer,
+			ISelectionChangedListener selectionListener,
+			List<EditPart> sourceEditParts) {
+		// prepare EditPart's in target viewer
+		List<EditPart> targetEditParts = Lists.newArrayList();
+		for (EditPart sourceEditPart : sourceEditParts) {
+			Object model = sourceEditPart.getModel();
+			if (model instanceof ObjectReferenceInfo) {
+				model = ((ObjectReferenceInfo) model).getObject();
+			}
+			EditPart targetEditPart = targetViewer.getEditPartByModel(model);
+			if (targetEditPart != null) {
+				targetEditParts.add(targetEditPart);
+			}
+		}
+		// set selection
+		targetViewer.removeSelectionChangedListener(selectionListener);
+		try {
+			targetViewer.setSelection(targetEditParts);
+		} finally {
+			targetViewer.addSelectionChangedListener(selectionListener);
+		}
+	}
 
-  /**
-   * Shows definition in source for primary selected {@link EditPart} with {@link ObjectInfo} model.
-   */
-  private static void showComponentDefinition(List<EditPart> sourceEditParts) {
-    IPreferenceStore preferences = DesignerPlugin.getPreferences();
-    if (preferences.getBoolean(IPreferenceConstants.P_EDITOR_GOTO_DEFINITION_ON_SELECTION)
-        && !sourceEditParts.isEmpty()) {
-      EditPart primaryEditPart = sourceEditParts.get(sourceEditParts.size() - 1);
-      if (primaryEditPart.getModel() instanceof ObjectInfo) {
-        ObjectInfo objectInfo = (ObjectInfo) primaryEditPart.getModel();
-        if (objectInfo instanceof HasSourcePosition) {
-          HasSourcePosition hasSourcePosition = (HasSourcePosition) primaryEditPart.getModel();
-          int position = hasSourcePosition.getSourcePosition();
-          IDesignPageSite.Helper.getSite(objectInfo).showSourcePosition(position);
-        }
-      }
-    }
-  }
+	/**
+	 * Shows definition in source for primary selected {@link EditPart} with {@link ObjectInfo} model.
+	 */
+	private static void showComponentDefinition(List<EditPart> sourceEditParts) {
+		IPreferenceStore preferences = DesignerPlugin.getPreferences();
+		if (preferences.getBoolean(IPreferenceConstants.P_EDITOR_GOTO_DEFINITION_ON_SELECTION)
+				&& !sourceEditParts.isEmpty()) {
+			EditPart primaryEditPart = sourceEditParts.get(sourceEditParts.size() - 1);
+			if (primaryEditPart.getModel() instanceof ObjectInfo) {
+				ObjectInfo objectInfo = (ObjectInfo) primaryEditPart.getModel();
+				if (objectInfo instanceof HasSourcePosition) {
+					HasSourcePosition hasSourcePosition = (HasSourcePosition) primaryEditPart.getModel();
+					int position = hasSourcePosition.getSourcePosition();
+					IDesignPageSite.Helper.getSite(objectInfo).showSourcePosition(position);
+				}
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link TreeViewer} used to display components tree.
-   */
-  public TreeViewer getTreeViewer() {
-    return m_viewer;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link TreeViewer} used to display components tree.
+	 */
+	public TreeViewer getTreeViewer() {
+		return m_viewer;
+	}
 
-  /**
-   * Sets the {@link IEditPartViewer} and root {@link ObjectInfo} that should be bound to components
-   * tree.
-   */
-  public void setInput(IEditPartViewer editPartViewer, ObjectInfo rootObject) {
-    // set root
-    m_rootObject = rootObject;
-    // set EditPart viewer
-    {
-      if (m_graphicalViewer != null) {
-        m_graphicalViewer.removeSelectionChangedListener(m_selectionListener_Graphical);
-      }
-      m_graphicalViewer = editPartViewer;
-      m_graphicalViewer.addSelectionChangedListener(m_selectionListener_Graphical);
-    }
-    // configure Tree viewer
-    {
-      m_viewer.setEditDomain(m_graphicalViewer.getEditDomain());
-      m_viewer.setEditPartFactory(EditPartFactory.INSTANCE);
-    }
-    // set context menu
-    m_viewer.setContextMenu(m_graphicalViewer.getContextMenu());
-    // set components tree
-    if (m_rootObject != null) {
-      DesignPageSite site = DesignPageSite.Helper.getSite(m_rootObject);
-      site.setComponentsTree(new ComponentsTreeWrapper(m_viewer));
-    }
-    // refresh objects viewer
-    m_viewer.removeSelectionChangedListener(m_selectionListener_Tree);
-    try {
-      m_viewer.setInput(m_rootObject);
-    } finally {
-      m_viewer.addSelectionChangedListener(m_selectionListener_Tree);
-    }
-  }
+	/**
+	 * Sets the {@link IEditPartViewer} and root {@link ObjectInfo} that should be bound to components
+	 * tree.
+	 */
+	public void setInput(IEditPartViewer editPartViewer, ObjectInfo rootObject) {
+		// set root
+		m_rootObject = rootObject;
+		// set EditPart viewer
+		{
+			if (m_graphicalViewer != null) {
+				m_graphicalViewer.removeSelectionChangedListener(m_selectionListener_Graphical);
+			}
+			m_graphicalViewer = editPartViewer;
+			m_graphicalViewer.addSelectionChangedListener(m_selectionListener_Graphical);
+		}
+		// configure Tree viewer
+		{
+			m_viewer.setEditDomain(m_graphicalViewer.getEditDomain());
+			m_viewer.setEditPartFactory(EditPartFactory.INSTANCE);
+		}
+		// set context menu
+		m_viewer.setContextMenu(m_graphicalViewer.getContextMenu());
+		// set components tree
+		if (m_rootObject != null) {
+			DesignPageSite site = DesignPageSite.Helper.getSite(m_rootObject);
+			site.setComponentsTree(new ComponentsTreeWrapper(m_viewer));
+		}
+		// refresh objects viewer
+		m_viewer.removeSelectionChangedListener(m_selectionListener_Tree);
+		try {
+			m_viewer.setInput(m_rootObject);
+		} finally {
+			m_viewer.addSelectionChangedListener(m_selectionListener_Tree);
+		}
+	}
 
-  /**
-   * @return the <em>models</em> {@link ISelectionProvider} for this {@link Composite}.
-   */
-  public ISelectionProvider getSelectionProvider() {
-    return new EditPartsSelectionProvider(m_viewer);
-  }
+	/**
+	 * @return the <em>models</em> {@link ISelectionProvider} for this {@link Composite}.
+	 */
+	public ISelectionProvider getSelectionProvider() {
+		return new EditPartsSelectionProvider(m_viewer);
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/structure/components/ComponentsTreeWrapper.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/structure/components/ComponentsTreeWrapper.java
index 4d3d2c086..269c5346d 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/structure/components/ComponentsTreeWrapper.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/structure/components/ComponentsTreeWrapper.java
@@ -29,86 +29,86 @@
  * @coverage core.editor.structure
  */
 final class ComponentsTreeWrapper implements IComponentsTree {
-  private final TreeViewer m_viewer;
-  private final ITreeContentProvider m_contentProvider;
-  private final ISelectionProvider m_selectionProvider;
+	private final TreeViewer m_viewer;
+	private final ITreeContentProvider m_contentProvider;
+	private final ISelectionProvider m_selectionProvider;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ComponentsTreeWrapper(TreeViewer viewer) {
-    m_viewer = viewer;
-    m_contentProvider = new EditPartsContentProvider(m_viewer);
-    m_selectionProvider = new EditPartsSelectionProvider(m_viewer);
-    m_viewer.getTree().addTreeListener(new TreeListener() {
-      @Override
-      public void treeCollapsed(TreeEvent e) {
-        if (m_expandListener != null) {
-          m_expandListener.run();
-        }
-      }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ComponentsTreeWrapper(TreeViewer viewer) {
+		m_viewer = viewer;
+		m_contentProvider = new EditPartsContentProvider(m_viewer);
+		m_selectionProvider = new EditPartsSelectionProvider(m_viewer);
+		m_viewer.getTree().addTreeListener(new TreeListener() {
+			@Override
+			public void treeCollapsed(TreeEvent e) {
+				if (m_expandListener != null) {
+					m_expandListener.run();
+				}
+			}
 
-      @Override
-      public void treeExpanded(TreeEvent e) {
-        if (m_expandListener != null) {
-          m_expandListener.run();
-        }
-      }
-    });
-  }
+			@Override
+			public void treeExpanded(TreeEvent e) {
+				if (m_expandListener != null) {
+					m_expandListener.run();
+				}
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Providers
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public ITreeContentProvider getContentProvider() {
-    return m_contentProvider;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Providers
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public ITreeContentProvider getContentProvider() {
+		return m_contentProvider;
+	}
 
-  @Override
-  public ISelectionProvider getSelectionProvider() {
-    return m_selectionProvider;
-  }
+	@Override
+	public ISelectionProvider getSelectionProvider() {
+		return m_selectionProvider;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Expanded
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Runnable m_expandListener;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Expanded
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Runnable m_expandListener;
 
-  @Override
-  public Object[] getExpandedElements() {
-    TreeItem[] expandedItems = UiUtils.getExpanded(m_viewer.getTree());
-    // prepare models
-    Object[] models = new Object[expandedItems.length];
-    for (int i = 0; i < expandedItems.length; i++) {
-      TreeItem treeItem = expandedItems[i];
-      EditPart editPart = (EditPart) treeItem.getData();
-      models[i] = editPart.getModel();
-    }
-    //
-    return models;
-  }
+	@Override
+	public Object[] getExpandedElements() {
+		TreeItem[] expandedItems = UiUtils.getExpanded(m_viewer.getTree());
+		// prepare models
+		Object[] models = new Object[expandedItems.length];
+		for (int i = 0; i < expandedItems.length; i++) {
+			TreeItem treeItem = expandedItems[i];
+			EditPart editPart = (EditPart) treeItem.getData();
+			models[i] = editPart.getModel();
+		}
+		//
+		return models;
+	}
 
-  @Override
-  public void setExpandedElements(Object[] elements) {
-    // prepare EditPart's by model elements
-    EditPart[] editParts = new EditPart[elements.length];
-    for (int i = 0; i < elements.length; i++) {
-      Object element = elements[i];
-      editParts[i] = m_viewer.getEditPartByModel(element);
-    }
-    // expand using EditPart's
-    UiUtils.setExpandedByData(m_viewer.getTree(), editParts);
-  }
+	@Override
+	public void setExpandedElements(Object[] elements) {
+		// prepare EditPart's by model elements
+		EditPart[] editParts = new EditPart[elements.length];
+		for (int i = 0; i < elements.length; i++) {
+			Object element = elements[i];
+			editParts[i] = m_viewer.getEditPartByModel(element);
+		}
+		// expand using EditPart's
+		UiUtils.setExpandedByData(m_viewer.getTree(), editParts);
+	}
 
-  @Override
-  public void setExpandListener(Runnable listener) {
-    m_expandListener = listener;
-  }
+	@Override
+	public void setExpandListener(Runnable listener) {
+		m_expandListener = listener;
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/structure/components/IComponentsTree.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/structure/components/IComponentsTree.java
index 4bde1b118..13d395bb4 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/structure/components/IComponentsTree.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/structure/components/IComponentsTree.java
@@ -9,38 +9,38 @@
  * @author scheglov_ke
  */
 public interface IComponentsTree {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Providers
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link ITreeContentProvider} implementation.
-   */
-  ITreeContentProvider getContentProvider();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Providers
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link ITreeContentProvider} implementation.
+	 */
+	ITreeContentProvider getContentProvider();
 
-  /**
-   * @return the {@link ISelectionProvider} implementation.
-   */
-  ISelectionProvider getSelectionProvider();
+	/**
+	 * @return the {@link ISelectionProvider} implementation.
+	 */
+	ISelectionProvider getSelectionProvider();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Expanded
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the array of expanded components.
-   */
-  Object[] getExpandedElements();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Expanded
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the array of expanded components.
+	 */
+	Object[] getExpandedElements();
 
-  /**
-   * Sets the array of expanded components.
-   */
-  void setExpandedElements(Object[] elements);
+	/**
+	 * Sets the array of expanded components.
+	 */
+	void setExpandedElements(Object[] elements);
 
-  /**
-   * Sets listener for expanded state.
-   */
-  void setExpandListener(Runnable listener);
+	/**
+	 * Sets listener for expanded state.
+	 */
+	void setExpandListener(Runnable listener);
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/structure/property/ComponentsPropertiesPage.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/structure/property/ComponentsPropertiesPage.java
index a12a45ac5..26ef39d21 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/structure/property/ComponentsPropertiesPage.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/structure/property/ComponentsPropertiesPage.java
@@ -370,7 +370,7 @@ public void run() {
 			}
 		};
 		m_showAdvancedPropertiesAction
-				.setImageDescriptor(DesignerPlugin.getImageDescriptor("structure/filter_advanced_properties.gif"));
+		.setImageDescriptor(DesignerPlugin.getImageDescriptor("structure/filter_advanced_properties.gif"));
 		setTexts(m_showAdvancedPropertiesAction, Messages.ComponentsPropertiesPage_showAdvancedAction);
 	}
 
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/structure/property/IPropertiesMenuContributor.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/structure/property/IPropertiesMenuContributor.java
index 8f173d8e8..5bb5f1e2e 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/structure/property/IPropertiesMenuContributor.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/structure/property/IPropertiesMenuContributor.java
@@ -21,11 +21,11 @@
  * @coverage core.editor.structure
  */
 public interface IPropertiesMenuContributor {
-  String GROUP_BASE = "org.eclipse.wb.component-properties.group.";
-  String GROUP_TOP = GROUP_BASE + "top";
-  String GROUP_EDIT = GROUP_BASE + "edit";
-  String GROUP_PRIORITY = GROUP_BASE + "priority";
-  String GROUP_ADDITIONAL = GROUP_BASE + "additional";
+	String GROUP_BASE = "org.eclipse.wb.component-properties.group.";
+	String GROUP_TOP = GROUP_BASE + "top";
+	String GROUP_EDIT = GROUP_BASE + "edit";
+	String GROUP_PRIORITY = GROUP_BASE + "priority";
+	String GROUP_ADDITIONAL = GROUP_BASE + "additional";
 
-  void contributeMenu(IMenuManager manager, Property property) throws Exception;
+	void contributeMenu(IMenuManager manager, Property property) throws Exception;
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/structure/property/IPropertiesToolBarContributor.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/structure/property/IPropertiesToolBarContributor.java
index 42e434906..7b0e281ad 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/structure/property/IPropertiesToolBarContributor.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/structure/property/IPropertiesToolBarContributor.java
@@ -23,9 +23,9 @@
  * @coverage core.editor.structure
  */
 public interface IPropertiesToolBarContributor {
-  String GROUP_BASE = "org.eclipse.wb.component-properties.group.";
-  String GROUP_EDIT = GROUP_BASE + "edit";
-  String GROUP_ADDITIONAL = GROUP_BASE + "additional";
+	String GROUP_BASE = "org.eclipse.wb.component-properties.group.";
+	String GROUP_EDIT = GROUP_BASE + "edit";
+	String GROUP_ADDITIONAL = GROUP_BASE + "additional";
 
-  void contributeToolBar(IToolBarManager manager, List<ObjectInfo> objects) throws Exception;
+	void contributeToolBar(IToolBarManager manager, List<ObjectInfo> objects) throws Exception;
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/structure/property/PropertyListIntersector.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/structure/property/PropertyListIntersector.java
index bb6293972..484d38b1d 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/structure/property/PropertyListIntersector.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/editor/structure/property/PropertyListIntersector.java
@@ -25,112 +25,112 @@
  * @coverage core.editor.structure
  */
 public final class PropertyListIntersector {
-  private List<PropertyGroup> m_intersection;
+	private List<PropertyGroup> m_intersection;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Updates intersection by intersecting with new given array.
-   */
-  public void intersect(Property[] properties) {
-    if (m_intersection == null) {
-      m_intersection = Lists.newArrayList();
-      for (int i = 0; i < properties.length; i++) {
-        Property property = properties[i];
-        m_intersection.add(new PropertyGroup(property));
-      }
-    } else {
-      for (Iterator<PropertyGroup> I = m_intersection.iterator(); I.hasNext();) {
-        PropertyGroup propertyGroup = I.next();
-        if (!propertyGroup.add(properties)) {
-          I.remove();
-        }
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Updates intersection by intersecting with new given array.
+	 */
+	public void intersect(Property[] properties) {
+		if (m_intersection == null) {
+			m_intersection = Lists.newArrayList();
+			for (int i = 0; i < properties.length; i++) {
+				Property property = properties[i];
+				m_intersection.add(new PropertyGroup(property));
+			}
+		} else {
+			for (Iterator<PropertyGroup> I = m_intersection.iterator(); I.hasNext();) {
+				PropertyGroup propertyGroup = I.next();
+				if (!propertyGroup.add(properties)) {
+					I.remove();
+				}
+			}
+		}
+	}
 
-  /**
-   * @return the array of matched composite {@link Property}'s.
-   */
-  public Property[] getProperties() {
-    List<Property> properties = Lists.newArrayList();
-    for (PropertyGroup propertyGroup : m_intersection) {
-      Property compositeProperty = propertyGroup.getCompositeProperty();
-      if (compositeProperty != null) {
-        properties.add(compositeProperty);
-      }
-    }
-    //
-    return properties.toArray(new Property[properties.size()]);
-  }
+	/**
+	 * @return the array of matched composite {@link Property}'s.
+	 */
+	public Property[] getProperties() {
+		List<Property> properties = Lists.newArrayList();
+		for (PropertyGroup propertyGroup : m_intersection) {
+			Property compositeProperty = propertyGroup.getCompositeProperty();
+			if (compositeProperty != null) {
+				properties.add(compositeProperty);
+			}
+		}
+		//
+		return properties.toArray(new Property[properties.size()]);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // PropertyGroup
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * The group of {@link Property}'s that match.
-   */
-  private static final class PropertyGroup {
-    private final List<Property> m_properties = Lists.newArrayList();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// PropertyGroup
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * The group of {@link Property}'s that match.
+	 */
+	private static final class PropertyGroup {
+		private final List<Property> m_properties = Lists.newArrayList();
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public PropertyGroup(Property property) {
-      m_properties.add(property);
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public PropertyGroup(Property property) {
+			m_properties.add(property);
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Access
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    /**
-     * @return <code>true</code> if new matched {@link Property} from given array was added.
-     */
-    public boolean add(Property[] properties) {
-      for (Property property : properties) {
-        if (add(property)) {
-          return true;
-        }
-      }
-      // no match
-      return false;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Access
+		//
+		////////////////////////////////////////////////////////////////////////////
+		/**
+		 * @return <code>true</code> if new matched {@link Property} from given array was added.
+		 */
+		public boolean add(Property[] properties) {
+			for (Property property : properties) {
+				if (add(property)) {
+					return true;
+				}
+			}
+			// no match
+			return false;
+		}
 
-    /**
-     * @return the composite {@link Property} for this group.
-     */
-    public Property getCompositeProperty() {
-      Property properties[] = m_properties.toArray(new Property[m_properties.size()]);
-      return properties[0].getComposite(properties);
-    }
+		/**
+		 * @return the composite {@link Property} for this group.
+		 */
+		public Property getCompositeProperty() {
+			Property properties[] = m_properties.toArray(new Property[m_properties.size()]);
+			return properties[0].getComposite(properties);
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Internal
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    /**
-     * @return <code>true</code> if given {@link Property} matches and was added.
-     */
-    private boolean add(Property property) {
-      Property example = m_properties.get(0);
-      if (example.getClass() == property.getClass()
-          && example.getTitle().equals(property.getTitle())
-          && PropertyManager.getCategory(example) == PropertyManager.getCategory(property)) {
-        m_properties.add(property);
-        return true;
-      }
-      // no match
-      return false;
-    }
-  }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Internal
+		//
+		////////////////////////////////////////////////////////////////////////////
+		/**
+		 * @return <code>true</code> if given {@link Property} matches and was added.
+		 */
+		private boolean add(Property property) {
+			Property example = m_properties.get(0);
+			if (example.getClass() == property.getClass()
+					&& example.getTitle().equals(property.getTitle())
+					&& PropertyManager.getCategory(example) == PropertyManager.getCategory(property)) {
+				m_properties.add(property);
+				return true;
+			}
+			// no match
+			return false;
+		}
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/EditPartFactory.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/EditPartFactory.java
index 71d71534b..4c0cb4e63 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/EditPartFactory.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/EditPartFactory.java
@@ -27,89 +27,89 @@
  * @coverage core.gef
  */
 public final class EditPartFactory implements IEditPartFactory {
-  public static final EditPartFactory INSTANCE = new EditPartFactory();
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private EditPartFactory() {
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IEditPartFactory
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public EditPart createEditPart(EditPart context, Object model) {
-    if (model == null) {
-      return null;
-    }
-    // designer root
-    // TODO(scheglov)
-//    if (model instanceof DesignRootObject) {
-//      DesignRootObject designRootObject = (DesignRootObject) model;
-//      return new DesignRootEditPart(designRootObject);
-//    }
-    // menu
-    if (model instanceof MenuReference) {
-      MenuReference reference = (MenuReference) model;
-      MenuEditPart editPart = new MenuEditPart(reference, reference.getMenu());
-      configureEditPart(context, editPart);
-      return editPart;
-    }
-    // child array
-    // TODO(scheglov)
-//    if (model instanceof AbstractArrayObjectInfo) {
-//      AbstractArrayObjectInfo arrayInfo = (AbstractArrayObjectInfo) model;
-//      ArrayObjectEditPart editPart = new ArrayObjectEditPart(arrayInfo);
-//      configureEditPart(context, editPart);
-//      return editPart;
-//    }
-    // check each external factory
-    for (IEditPartFactory factory : getFactories()) {
-      EditPart editPart = factory.createEditPart(context, model);
-      if (editPart != null) {
-        configureEditPart(context, editPart);
-        return editPart;
-      }
-    }
-    // IWrapperInfo
-    // TODO(scheglov)
-//    if (model instanceof IWrapperInfo) {
-//      IWrapper wrapper = ((IWrapperInfo) model).getWrapper();
-//      AbstractWrapperEditPart editPart = new AbstractWrapperEditPart(wrapper);
-//      configureEditPart(context, editPart);
-//      return editPart;
-//    }
-    // no EditPart found
-    return null;
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Extensions
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the instances of {@link IEditPartFactory}.
-   */
-  private static List<IEditPartFactory> getFactories() {
-    return ExternalFactoriesHelper.getElementsInstances(
-        IEditPartFactory.class,
-        "org.eclipse.wb.core.editPartFactories",
-        "factory");
-  }
-  /**
-   * Configures given {@link EditPart} using externally contributed {@link IEditPartConfigurator}'s.
-   */
-  public static void configureEditPart(EditPart context, EditPart editPart) {
-    List<IEditPartConfigurator> configurators =
-        ExternalFactoriesHelper.getElementsInstances(
-            IEditPartConfigurator.class,
-            "org.eclipse.wb.core.editPartConfigurators",
-            "configurator");
-    for (IEditPartConfigurator configurator : configurators) {
-      configurator.configure(context, editPart);
-    }
-  }
+	public static final EditPartFactory INSTANCE = new EditPartFactory();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private EditPartFactory() {
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IEditPartFactory
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public EditPart createEditPart(EditPart context, Object model) {
+		if (model == null) {
+			return null;
+		}
+		// designer root
+		// TODO(scheglov)
+		//    if (model instanceof DesignRootObject) {
+		//      DesignRootObject designRootObject = (DesignRootObject) model;
+		//      return new DesignRootEditPart(designRootObject);
+		//    }
+		// menu
+		if (model instanceof MenuReference) {
+			MenuReference reference = (MenuReference) model;
+			MenuEditPart editPart = new MenuEditPart(reference, reference.getMenu());
+			configureEditPart(context, editPart);
+			return editPart;
+		}
+		// child array
+		// TODO(scheglov)
+		//    if (model instanceof AbstractArrayObjectInfo) {
+		//      AbstractArrayObjectInfo arrayInfo = (AbstractArrayObjectInfo) model;
+		//      ArrayObjectEditPart editPart = new ArrayObjectEditPart(arrayInfo);
+		//      configureEditPart(context, editPart);
+		//      return editPart;
+		//    }
+		// check each external factory
+		for (IEditPartFactory factory : getFactories()) {
+			EditPart editPart = factory.createEditPart(context, model);
+			if (editPart != null) {
+				configureEditPart(context, editPart);
+				return editPart;
+			}
+		}
+		// IWrapperInfo
+		// TODO(scheglov)
+		//    if (model instanceof IWrapperInfo) {
+		//      IWrapper wrapper = ((IWrapperInfo) model).getWrapper();
+		//      AbstractWrapperEditPart editPart = new AbstractWrapperEditPart(wrapper);
+		//      configureEditPart(context, editPart);
+		//      return editPart;
+		//    }
+		// no EditPart found
+		return null;
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Extensions
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the instances of {@link IEditPartFactory}.
+	 */
+	private static List<IEditPartFactory> getFactories() {
+		return ExternalFactoriesHelper.getElementsInstances(
+				IEditPartFactory.class,
+				"org.eclipse.wb.core.editPartFactories",
+				"factory");
+	}
+	/**
+	 * Configures given {@link EditPart} using externally contributed {@link IEditPartConfigurator}'s.
+	 */
+	public static void configureEditPart(EditPart context, EditPart editPart) {
+		List<IEditPartConfigurator> configurators =
+				ExternalFactoriesHelper.getElementsInstances(
+						IEditPartConfigurator.class,
+						"org.eclipse.wb.core.editPartConfigurators",
+						"configurator");
+		for (IEditPartConfigurator configurator : configurators) {
+			configurator.configure(context, editPart);
+		}
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/GefMessages.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/GefMessages.java
index 7b8b47429..64c23a91f 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/GefMessages.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/GefMessages.java
@@ -3,32 +3,32 @@
 import org.eclipse.osgi.util.NLS;
 
 public class GefMessages extends NLS {
-  private static final String BUNDLE_NAME = "org.eclipse.wb.internal.core.gef.GefMessages"; //$NON-NLS-1$
-  public static String AbstractAlignmentActionsSupport_alighHorizontalCenters;
-  public static String AbstractAlignmentActionsSupport_alignBottom;
-  public static String AbstractAlignmentActionsSupport_alignLeft;
-  public static String AbstractAlignmentActionsSupport_alignRight;
-  public static String AbstractAlignmentActionsSupport_alignTop;
-  public static String AbstractAlignmentActionsSupport_alignVerticalCenters;
-  public static String AbstractAlignmentActionsSupport_centerHorizontally;
-  public static String AbstractAlignmentActionsSupport_centerVertically;
-  public static String AbstractAlignmentActionsSupport_replicateHeight;
-  public static String AbstractAlignmentActionsSupport_replicateWidth;
-  public static String AbstractAlignmentActionsSupport_spaceEquallyHorizontal;
-  public static String AbstractAlignmentActionsSupport_spaceEquallyVertical;
-  public static String AnchorsActionsSupport_bottomAlignment;
-  public static String AnchorsActionsSupport_leftAlignment;
-  public static String AnchorsActionsSupport_makeResizableHorizontal;
-  public static String AnchorsActionsSupport_makeResizableVertical;
-  public static String AnchorsActionsSupport_rightAlignment;
-  public static String AnchorsActionsSupport_topAlignment;
-  public static String NonVisualLayoutEditPolicy_copyFeedback;
-  public static String NonVisualLayoutEditPolicy_newFeedback;
-  static {
-    // initialize resource bundle
-    NLS.initializeMessages(BUNDLE_NAME, GefMessages.class);
-  }
+	private static final String BUNDLE_NAME = "org.eclipse.wb.internal.core.gef.GefMessages"; //$NON-NLS-1$
+	public static String AbstractAlignmentActionsSupport_alighHorizontalCenters;
+	public static String AbstractAlignmentActionsSupport_alignBottom;
+	public static String AbstractAlignmentActionsSupport_alignLeft;
+	public static String AbstractAlignmentActionsSupport_alignRight;
+	public static String AbstractAlignmentActionsSupport_alignTop;
+	public static String AbstractAlignmentActionsSupport_alignVerticalCenters;
+	public static String AbstractAlignmentActionsSupport_centerHorizontally;
+	public static String AbstractAlignmentActionsSupport_centerVertically;
+	public static String AbstractAlignmentActionsSupport_replicateHeight;
+	public static String AbstractAlignmentActionsSupport_replicateWidth;
+	public static String AbstractAlignmentActionsSupport_spaceEquallyHorizontal;
+	public static String AbstractAlignmentActionsSupport_spaceEquallyVertical;
+	public static String AnchorsActionsSupport_bottomAlignment;
+	public static String AnchorsActionsSupport_leftAlignment;
+	public static String AnchorsActionsSupport_makeResizableHorizontal;
+	public static String AnchorsActionsSupport_makeResizableVertical;
+	public static String AnchorsActionsSupport_rightAlignment;
+	public static String AnchorsActionsSupport_topAlignment;
+	public static String NonVisualLayoutEditPolicy_copyFeedback;
+	public static String NonVisualLayoutEditPolicy_newFeedback;
+	static {
+		// initialize resource bundle
+		NLS.initializeMessages(BUNDLE_NAME, GefMessages.class);
+	}
 
-  private GefMessages() {
-  }
+	private GefMessages() {
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/header/HeadersContainerEditPart.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/header/HeadersContainerEditPart.java
index 75e80e510..57c03e8b1 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/header/HeadersContainerEditPart.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/header/HeadersContainerEditPart.java
@@ -39,196 +39,196 @@
  * @coverage core.gef.header
  */
 public final class HeadersContainerEditPart extends GraphicalEditPart
-    implements
-      IHeaderMenuProvider {
-  private final GraphicalViewer m_viewer;
-  private final boolean m_horizontal;
-  private IHeadersProvider m_headersProvider;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public HeadersContainerEditPart(GraphicalViewer viewer, boolean horizontal) {
-    m_viewer = viewer;
-    m_horizontal = horizontal;
-    //
-    m_viewer.addSelectionChangedListener(new ISelectionChangedListener() {
-      @Override
-      public void selectionChanged(SelectionChangedEvent event) {
-        refreshHeaders();
-      }
-    });
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Policy
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createEditPolicies() {
-    super.createEditPolicies();
-    installEditPolicy(EditPolicy.SELECTION_ROLE, new EmptySelectionEditPolicy());
-  }
-
-  @Override
-  public void performRequest(Request request) {
-    super.performRequest(request);
-    if (request.getType() == Request.REQ_OPEN) {
-      if (m_headersProvider != null) {
-        m_headersProvider.handleDoubleClick(m_horizontal);
-      }
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Figure
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Figure createFigure() {
-    return new Figure();
-  }
-
-  @Override
-  protected void refreshVisuals() {
-    GraphicalViewer viewer = (GraphicalViewer) getViewer();
-    if (!viewer.getControl().isDisposed()) {
-      // prepare viewer size
-      org.eclipse.swt.graphics.Point size = viewer.getControl().getSize();
-      // prepare main viewer size
-      Dimension mainSize = m_viewer.getLayer(IEditPartViewer.PRIMARY_LAYER).getSize();
-      // set bounds
-      if (m_horizontal) {
-        getFigure().setBounds(new Rectangle(0, 0, mainSize.width, size.y));
-      } else {
-        getFigure().setBounds(new Rectangle(0, 0, size.x, mainSize.height));
-      }
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Children
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public List<?> getModelChildren() {
-    if (m_headersProvider != null) {
-      return m_headersProvider.getHeaders(m_horizontal);
-    }
-    return Collections.emptyList();
-  }
-
-  @Override
-  protected EditPart createEditPart(Object model) {
-    return m_headersProvider.createHeaderEditPart(m_horizontal, model);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Updates current {@link IHeadersProvider} and headers.
-   */
-  public void refreshHeaders() {
-    final Control viewerControl = ((GraphicalViewer) getViewer()).getControl();
-    if (!viewerControl.isDisposed()) {
-      m_headersProvider = getHeadersProvider();
-      doRefreshHeaders();
-    }
-  }
-
-  /**
-   * Updates current {@link IHeadersProvider} and headers.
-   */
-  private void doRefreshHeaders() {
-    installEditPolicy(EditPolicy.LAYOUT_ROLE, null);
-    // refresh children
-    refresh();
-    for (EditPart editPart : getChildren()) {
-      editPart.refresh();
-      ((GraphicalEditPart) editPart).getFigure().repaint();
-    }
-    // install LayoutEditPolicy
-    if (m_headersProvider != null) {
-      installEditPolicy(
-          EditPolicy.LAYOUT_ROLE,
-          m_headersProvider.getContainerLayoutPolicy(m_horizontal));
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link IHeadersProvider} for current selection in {@link #m_viewer}.
-   */
-  private IHeadersProvider getHeadersProvider() {
-    // prepare selected EditPart
-    EditPart selectedEditPart;
-    {
-      List<EditPart> selectedEditParts = m_viewer.getSelectedEditParts();
-      if (selectedEditParts.size() != 1) {
-        return null;
-      }
-      selectedEditPart = selectedEditParts.get(0);
-      if (selectedEditPart == null) {
-        return null;
-      }
-    }
-    // get provider from container of selected EditPart
-    {
-      EditPart containerEditPart = selectedEditPart.getParent();
-      if (containerEditPart != null) {
-        IHeadersProvider headersProvider = getHeadersProvider(containerEditPart);
-        if (headersProvider != null) {
-          return headersProvider;
-        }
-      }
-    }
-    // get provider from selected EditPart itself (it also may be container)
-    {
-      IHeadersProvider headersProvider = getHeadersProvider(selectedEditPart);
-      if (headersProvider != null) {
-        return headersProvider;
-      }
-    }
-    // no provider
-    return null;
-  }
-
-  /**
-   * @return the {@link IHeadersProvider} implemented by one of the {@link EditPolicy} of given
-   *         {@link EditPart}.
-   */
-  private static IHeadersProvider getHeadersProvider(EditPart editPart) {
-    // find policy that implements IHeadersProvider
-    for (EditPolicy editPolicy : editPart.getEditPolicies()) {
-      if (editPolicy.isActive() && editPolicy instanceof IHeadersProvider) {
-        return (IHeadersProvider) editPolicy;
-      }
-    }
-    // not found
-    return null;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IHeaderMenuProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void buildContextMenu(IMenuManager manager) {
-    if (m_headersProvider != null) {
-      m_headersProvider.buildContextMenu(manager, m_horizontal);
-    }
-  }
+implements
+IHeaderMenuProvider {
+	private final GraphicalViewer m_viewer;
+	private final boolean m_horizontal;
+	private IHeadersProvider m_headersProvider;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public HeadersContainerEditPart(GraphicalViewer viewer, boolean horizontal) {
+		m_viewer = viewer;
+		m_horizontal = horizontal;
+		//
+		m_viewer.addSelectionChangedListener(new ISelectionChangedListener() {
+			@Override
+			public void selectionChanged(SelectionChangedEvent event) {
+				refreshHeaders();
+			}
+		});
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Policy
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createEditPolicies() {
+		super.createEditPolicies();
+		installEditPolicy(EditPolicy.SELECTION_ROLE, new EmptySelectionEditPolicy());
+	}
+
+	@Override
+	public void performRequest(Request request) {
+		super.performRequest(request);
+		if (request.getType() == Request.REQ_OPEN) {
+			if (m_headersProvider != null) {
+				m_headersProvider.handleDoubleClick(m_horizontal);
+			}
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Figure
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Figure createFigure() {
+		return new Figure();
+	}
+
+	@Override
+	protected void refreshVisuals() {
+		GraphicalViewer viewer = (GraphicalViewer) getViewer();
+		if (!viewer.getControl().isDisposed()) {
+			// prepare viewer size
+			org.eclipse.swt.graphics.Point size = viewer.getControl().getSize();
+			// prepare main viewer size
+			Dimension mainSize = m_viewer.getLayer(IEditPartViewer.PRIMARY_LAYER).getSize();
+			// set bounds
+			if (m_horizontal) {
+				getFigure().setBounds(new Rectangle(0, 0, mainSize.width, size.y));
+			} else {
+				getFigure().setBounds(new Rectangle(0, 0, size.x, mainSize.height));
+			}
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Children
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public List<?> getModelChildren() {
+		if (m_headersProvider != null) {
+			return m_headersProvider.getHeaders(m_horizontal);
+		}
+		return Collections.emptyList();
+	}
+
+	@Override
+	protected EditPart createEditPart(Object model) {
+		return m_headersProvider.createHeaderEditPart(m_horizontal, model);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Updates current {@link IHeadersProvider} and headers.
+	 */
+	public void refreshHeaders() {
+		final Control viewerControl = ((GraphicalViewer) getViewer()).getControl();
+		if (!viewerControl.isDisposed()) {
+			m_headersProvider = getHeadersProvider();
+			doRefreshHeaders();
+		}
+	}
+
+	/**
+	 * Updates current {@link IHeadersProvider} and headers.
+	 */
+	private void doRefreshHeaders() {
+		installEditPolicy(EditPolicy.LAYOUT_ROLE, null);
+		// refresh children
+		refresh();
+		for (EditPart editPart : getChildren()) {
+			editPart.refresh();
+			((GraphicalEditPart) editPart).getFigure().repaint();
+		}
+		// install LayoutEditPolicy
+		if (m_headersProvider != null) {
+			installEditPolicy(
+					EditPolicy.LAYOUT_ROLE,
+					m_headersProvider.getContainerLayoutPolicy(m_horizontal));
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link IHeadersProvider} for current selection in {@link #m_viewer}.
+	 */
+	private IHeadersProvider getHeadersProvider() {
+		// prepare selected EditPart
+		EditPart selectedEditPart;
+		{
+			List<EditPart> selectedEditParts = m_viewer.getSelectedEditParts();
+			if (selectedEditParts.size() != 1) {
+				return null;
+			}
+			selectedEditPart = selectedEditParts.get(0);
+			if (selectedEditPart == null) {
+				return null;
+			}
+		}
+		// get provider from container of selected EditPart
+		{
+			EditPart containerEditPart = selectedEditPart.getParent();
+			if (containerEditPart != null) {
+				IHeadersProvider headersProvider = getHeadersProvider(containerEditPart);
+				if (headersProvider != null) {
+					return headersProvider;
+				}
+			}
+		}
+		// get provider from selected EditPart itself (it also may be container)
+		{
+			IHeadersProvider headersProvider = getHeadersProvider(selectedEditPart);
+			if (headersProvider != null) {
+				return headersProvider;
+			}
+		}
+		// no provider
+		return null;
+	}
+
+	/**
+	 * @return the {@link IHeadersProvider} implemented by one of the {@link EditPolicy} of given
+	 *         {@link EditPart}.
+	 */
+	private static IHeadersProvider getHeadersProvider(EditPart editPart) {
+		// find policy that implements IHeadersProvider
+		for (EditPolicy editPolicy : editPart.getEditPolicies()) {
+			if (editPolicy.isActive() && editPolicy instanceof IHeadersProvider) {
+				return (IHeadersProvider) editPolicy;
+			}
+		}
+		// not found
+		return null;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IHeaderMenuProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void buildContextMenu(IMenuManager manager) {
+		if (m_headersProvider != null) {
+			m_headersProvider.buildContextMenu(manager, m_horizontal);
+		}
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/header/HeadersContextMenuProvider.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/header/HeadersContextMenuProvider.java
index 34270bb69..56ea9c7dc 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/header/HeadersContextMenuProvider.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/header/HeadersContextMenuProvider.java
@@ -25,25 +25,25 @@
  * @coverage core.gef.header
  */
 public final class HeadersContextMenuProvider extends MultiSelectionContextMenuProvider {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public HeadersContextMenuProvider(IEditPartViewer viewer) {
-    super(viewer);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public HeadersContextMenuProvider(IEditPartViewer viewer) {
+		super(viewer);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // MultiSelectionContextMenuProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void buildContextMenu(EditPart editPart, IMenuManager manager) {
-    if (editPart instanceof IHeaderMenuProvider) {
-      IHeaderMenuProvider headerMenuProvider = (IHeaderMenuProvider) editPart;
-      headerMenuProvider.buildContextMenu(manager);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// MultiSelectionContextMenuProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void buildContextMenu(EditPart editPart, IMenuManager manager) {
+		if (editPart instanceof IHeaderMenuProvider) {
+			IHeaderMenuProvider headerMenuProvider = (IHeaderMenuProvider) editPart;
+			headerMenuProvider.buildContextMenu(manager);
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/header/HeadersEditPartFactory.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/header/HeadersEditPartFactory.java
index e4119f147..7bf696927 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/header/HeadersEditPartFactory.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/header/HeadersEditPartFactory.java
@@ -20,8 +20,8 @@
  * @coverage core.gef.header
  */
 public final class HeadersEditPartFactory implements IEditPartFactory {
-  @Override
-  public EditPart createEditPart(EditPart context, Object model) {
-    return (EditPart) model;
-  }
+	@Override
+	public EditPart createEditPart(EditPart context, Object model) {
+		return (EditPart) model;
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/part/menu/AsyncExecutor.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/part/menu/AsyncExecutor.java
index 709e33740..60a7c34a6 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/part/menu/AsyncExecutor.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/part/menu/AsyncExecutor.java
@@ -27,43 +27,43 @@
  * @coverage core.gef.menu
  */
 public final class AsyncExecutor {
-  public static void schedule(Runnable runnable) {
-    new AsyncExecutor(runnable);
-  }
+	public static void schedule(Runnable runnable) {
+		new AsyncExecutor(runnable);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance fields
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final Display m_display = Display.getDefault();
-  private final ObjectInfo m_activeObject = GlobalState.getActiveObject();
-  private final Runnable m_runnable;
-  private boolean m_shouldExecute = true;
-  private final Object m_broadcastListener = new ObjectEventListener() {
-    @Override
-    public void refreshBeforeCreate() throws Exception {
-      m_shouldExecute = false;
-    }
-  };
-  private final Runnable m_schedulingRunnable = new Runnable() {
-    @Override
-    public void run() {
-      m_activeObject.removeBroadcastListener(m_broadcastListener);
-      if (m_shouldExecute) {
-        m_runnable.run();
-      }
-    }
-  };
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance fields
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final Display m_display = Display.getDefault();
+	private final ObjectInfo m_activeObject = GlobalState.getActiveObject();
+	private final Runnable m_runnable;
+	private boolean m_shouldExecute = true;
+	private final Object m_broadcastListener = new ObjectEventListener() {
+		@Override
+		public void refreshBeforeCreate() throws Exception {
+			m_shouldExecute = false;
+		}
+	};
+	private final Runnable m_schedulingRunnable = new Runnable() {
+		@Override
+		public void run() {
+			m_activeObject.removeBroadcastListener(m_broadcastListener);
+			if (m_shouldExecute) {
+				m_runnable.run();
+			}
+		}
+	};
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private AsyncExecutor(Runnable runnable) {
-    m_runnable = runnable;
-    m_activeObject.addBroadcastListener(m_broadcastListener);
-    m_display.asyncExec(m_schedulingRunnable);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private AsyncExecutor(Runnable runnable) {
+		m_runnable = runnable;
+		m_activeObject.addBroadcastListener(m_broadcastListener);
+		m_display.asyncExec(m_schedulingRunnable);
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/part/menu/MacMenuEditPart.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/part/menu/MacMenuEditPart.java
index 4b1bac4f5..21c632d37 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/part/menu/MacMenuEditPart.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/part/menu/MacMenuEditPart.java
@@ -26,67 +26,67 @@
  * @coverage core.gef.menu
  */
 public final class MacMenuEditPart extends MenuEditPart {
-  private final IMenuInfo m_menu;
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public MacMenuEditPart(Object toolkitModel, IMenuInfo menu) {
-    super(toolkitModel, menu);
-    m_menu = menu;
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Figure
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Figure createFigure() {
-    return new MacMenuImageFigure(m_menu);
-  }
-  @Override
-  protected void refreshVisuals() {
-    if (!isSubMenu()) {
-      Rectangle bounds = m_menu.getBounds();
-      getFigure().setBounds(
-          new Rectangle(TOP_LOCATION.x,
-              MenuEditPartFactory.MENU_Y_LOCATION,
-              bounds.width,
-              bounds.height));
-    } else {
-      super.refreshVisuals();
-    }
-  }
-  private boolean m_addedSelf = false;
-  private Figure m_fakeFigure;
-  @Override
-  protected boolean addSelfVisual(int index) {
-    if (!isSubMenu()) {
-      getViewer().getLayer(IEditPartViewer.PRIMARY_LAYER).add(getFigure());
-      m_addedSelf = true;
-      // add invisible fake figure to the content pane to keep index right
-      GraphicalEditPart parent = (GraphicalEditPart) getParent();
-      parent.getContentPane().add(getFakeFigure(), index);
-      return true;
-    }
-    return false;
-  }
-  @Override
-  protected boolean removeSelfVisual() {
-    if (m_addedSelf) {
-      getViewer().getLayer(IEditPartViewer.PRIMARY_LAYER).remove(getFigure());
-      FigureUtils.removeFigure(getFakeFigure());
-      m_addedSelf = false;
-      return true;
-    }
-    return false;
-  }
-  private Figure getFakeFigure() {
-    if (m_fakeFigure == null) {
-      m_fakeFigure = new Figure();
-      m_fakeFigure.setVisible(false);
-    }
-    return m_fakeFigure;
-  }
+	private final IMenuInfo m_menu;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public MacMenuEditPart(Object toolkitModel, IMenuInfo menu) {
+		super(toolkitModel, menu);
+		m_menu = menu;
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Figure
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Figure createFigure() {
+		return new MacMenuImageFigure(m_menu);
+	}
+	@Override
+	protected void refreshVisuals() {
+		if (!isSubMenu()) {
+			Rectangle bounds = m_menu.getBounds();
+			getFigure().setBounds(
+					new Rectangle(TOP_LOCATION.x,
+							MenuEditPartFactory.MENU_Y_LOCATION,
+							bounds.width,
+							bounds.height));
+		} else {
+			super.refreshVisuals();
+		}
+	}
+	private boolean m_addedSelf = false;
+	private Figure m_fakeFigure;
+	@Override
+	protected boolean addSelfVisual(int index) {
+		if (!isSubMenu()) {
+			getViewer().getLayer(IEditPartViewer.PRIMARY_LAYER).add(getFigure());
+			m_addedSelf = true;
+			// add invisible fake figure to the content pane to keep index right
+			GraphicalEditPart parent = (GraphicalEditPart) getParent();
+			parent.getContentPane().add(getFakeFigure(), index);
+			return true;
+		}
+		return false;
+	}
+	@Override
+	protected boolean removeSelfVisual() {
+		if (m_addedSelf) {
+			getViewer().getLayer(IEditPartViewer.PRIMARY_LAYER).remove(getFigure());
+			FigureUtils.removeFigure(getFakeFigure());
+			m_addedSelf = false;
+			return true;
+		}
+		return false;
+	}
+	private Figure getFakeFigure() {
+		if (m_fakeFigure == null) {
+			m_fakeFigure = new Figure();
+			m_fakeFigure.setVisible(false);
+		}
+		return m_fakeFigure;
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/part/menu/MacMenuImageFigure.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/part/menu/MacMenuImageFigure.java
index 39c15aa44..2204a4e21 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/part/menu/MacMenuImageFigure.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/part/menu/MacMenuImageFigure.java
@@ -24,29 +24,29 @@
  * @coverage core.gef.menu
  */
 public final class MacMenuImageFigure extends MenuImageFigure {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public MacMenuImageFigure(IMenuInfo menu) {
-    super(menu);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public MacMenuImageFigure(IMenuInfo menu) {
+		super(menu);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Paint
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void paintClientArea(Graphics graphics) {
-    super.paintClientArea(graphics);
-    // draw border on MacOSX because the fill color of menu is the same as fill color of window client area
-    {
-      Rectangle clientArea = getClientArea();
-      graphics.setForegroundColor(IColorConstants.buttonLightest);
-      graphics.setLineStyle(SWT.LINE_DASH);
-      graphics.drawRectangle(0, 0, clientArea.width - 1, clientArea.height - 1);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Paint
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void paintClientArea(Graphics graphics) {
+		super.paintClientArea(graphics);
+		// draw border on MacOSX because the fill color of menu is the same as fill color of window client area
+		{
+			Rectangle clientArea = getClientArea();
+			graphics.setForegroundColor(IColorConstants.buttonLightest);
+			graphics.setLineStyle(SWT.LINE_DASH);
+			graphics.drawRectangle(0, 0, clientArea.width - 1, clientArea.height - 1);
+		}
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/part/menu/MenuEditPart.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/part/menu/MenuEditPart.java
index 317bdc1e4..089a77955 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/part/menu/MenuEditPart.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/part/menu/MenuEditPart.java
@@ -40,127 +40,127 @@
  * @coverage core.gef.menu
  */
 public class MenuEditPart extends MenuObjectEditPart {
-  // TODO(scheglov) move TOP_LOCATION to shared location
-  public static final Point TOP_LOCATION = EnvironmentUtils.IS_MAC
-      ? new Point(20, 28)
-      : new Point(20, 20);
-  private final IMenuInfo m_menu;
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public MenuEditPart(Object toolkitModel, IMenuInfo menu) {
-    super(toolkitModel, menu);
-    m_menu = menu;
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link IMenuInfo} model.
-   */
-  public IMenuInfo getMenu() {
-    return m_menu;
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Figure
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Figure createFigure() {
-    if (isStandaloneMenu()) {
-      return new MenuImageFigure(m_menu);
-    } else if (isSubMenu()) {
-      return new MenuImageFigure(m_menu);
-    } else {
-      return new Figure();
-    }
-  }
-  @Override
-  protected void refreshVisuals() {
-    // edit parts hierarchy:
-    // 1. bar -> menu item -> ...
-    // 2. component -> bar -> menu item -> menu container -> menu item -> ...
-    // 3. component -> popup -> menu container -> menu item -> ...
-    if (isStandaloneMenu()) {
-      Rectangle bounds = m_menu.getBounds();
-      bounds = bounds.getCopy().setLocation(TOP_LOCATION);
-      getFigure().setBounds(bounds);
-    } else if (isSubMenu()) {
-      Dimension size = m_menu.getBounds().getSize();
-      // prepare parent location
-      Rectangle parentBounds;
-      {
-        Figure parentFigure = ((GraphicalEditPart) getParent()).getFigure();
-        parentBounds = parentFigure.getBounds().getCopy();
-        FigureUtils.translateFigureToAbsolute(parentFigure, parentBounds);
-      }
-      // prepare "menu" location
-      Point figureLocation;
-      if (getParent() instanceof MenuPopupEditPart) {
-        // parent is popup
-        figureLocation = parentBounds.getBottomLeft();
-      } else if (getParent().getParent() instanceof MenuEditPart) {
-        // parent is item
-        IMenuInfo parentItemMenu = ((MenuEditPart) getParent().getParent()).m_menu;
-        if (parentItemMenu.isHorizontal()) {
-          figureLocation = parentBounds.getBottomLeft();
-        } else {
-          figureLocation = parentBounds.getTopRight().getTranslated(-3, -2);
-        }
-      } else {
-        figureLocation = parentBounds.getTopRight().getTranslated(-3, -2);
-      }
-      // set bounds
-      getFigure().setBounds(new Rectangle(figureLocation, size));
-    } else {
-      // menu on some other component
-      getFigure().setBounds(m_menu.getBounds());
-    }
-  }
-  private boolean isStandaloneMenu() {
-    return false;
-    // TODO(scheglov)
-    //    return getParent() instanceof DesignRootEditPart;
-  }
-  protected final boolean isSubMenu() {
-    return getParent() instanceof MenuObjectEditPart;
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Edit policies
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createEditPolicies() {
-    super.createEditPolicies();
-    installEditPolicy(EditPolicy.LAYOUT_ROLE, new MenuLayoutEditPolicy(m_menu));
-    installEditPolicy(EditPolicy.SELECTION_ROLE, new MenuSelectionEditPolicy());
-  }
-  @Override
-  public Tool getDragTrackerTool(Request request) {
-    // we don't need any move/resize for menu edit part!
-    if (isSubMenu()) {
-      return new SelectEditPartTracker(this);
-    }
-    // top level
-    return super.getDragTrackerTool(request);
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Children
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected List<?> getModelChildren() {
-    List<Object> modelItems = Lists.newArrayList();
-    for (IMenuItemInfo menuItem : m_menu.getItems()) {
-      modelItems.add(menuItem.getModel());
-    }
-    return modelItems;
-  }
+	// TODO(scheglov) move TOP_LOCATION to shared location
+	public static final Point TOP_LOCATION = EnvironmentUtils.IS_MAC
+			? new Point(20, 28)
+					: new Point(20, 20);
+	private final IMenuInfo m_menu;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public MenuEditPart(Object toolkitModel, IMenuInfo menu) {
+		super(toolkitModel, menu);
+		m_menu = menu;
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link IMenuInfo} model.
+	 */
+	public IMenuInfo getMenu() {
+		return m_menu;
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Figure
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Figure createFigure() {
+		if (isStandaloneMenu()) {
+			return new MenuImageFigure(m_menu);
+		} else if (isSubMenu()) {
+			return new MenuImageFigure(m_menu);
+		} else {
+			return new Figure();
+		}
+	}
+	@Override
+	protected void refreshVisuals() {
+		// edit parts hierarchy:
+		// 1. bar -> menu item -> ...
+		// 2. component -> bar -> menu item -> menu container -> menu item -> ...
+		// 3. component -> popup -> menu container -> menu item -> ...
+		if (isStandaloneMenu()) {
+			Rectangle bounds = m_menu.getBounds();
+			bounds = bounds.getCopy().setLocation(TOP_LOCATION);
+			getFigure().setBounds(bounds);
+		} else if (isSubMenu()) {
+			Dimension size = m_menu.getBounds().getSize();
+			// prepare parent location
+			Rectangle parentBounds;
+			{
+				Figure parentFigure = ((GraphicalEditPart) getParent()).getFigure();
+				parentBounds = parentFigure.getBounds().getCopy();
+				FigureUtils.translateFigureToAbsolute(parentFigure, parentBounds);
+			}
+			// prepare "menu" location
+			Point figureLocation;
+			if (getParent() instanceof MenuPopupEditPart) {
+				// parent is popup
+				figureLocation = parentBounds.getBottomLeft();
+			} else if (getParent().getParent() instanceof MenuEditPart) {
+				// parent is item
+				IMenuInfo parentItemMenu = ((MenuEditPart) getParent().getParent()).m_menu;
+				if (parentItemMenu.isHorizontal()) {
+					figureLocation = parentBounds.getBottomLeft();
+				} else {
+					figureLocation = parentBounds.getTopRight().getTranslated(-3, -2);
+				}
+			} else {
+				figureLocation = parentBounds.getTopRight().getTranslated(-3, -2);
+			}
+			// set bounds
+			getFigure().setBounds(new Rectangle(figureLocation, size));
+		} else {
+			// menu on some other component
+			getFigure().setBounds(m_menu.getBounds());
+		}
+	}
+	private boolean isStandaloneMenu() {
+		return false;
+		// TODO(scheglov)
+		//    return getParent() instanceof DesignRootEditPart;
+	}
+	protected final boolean isSubMenu() {
+		return getParent() instanceof MenuObjectEditPart;
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Edit policies
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createEditPolicies() {
+		super.createEditPolicies();
+		installEditPolicy(EditPolicy.LAYOUT_ROLE, new MenuLayoutEditPolicy(m_menu));
+		installEditPolicy(EditPolicy.SELECTION_ROLE, new MenuSelectionEditPolicy());
+	}
+	@Override
+	public Tool getDragTrackerTool(Request request) {
+		// we don't need any move/resize for menu edit part!
+		if (isSubMenu()) {
+			return new SelectEditPartTracker(this);
+		}
+		// top level
+		return super.getDragTrackerTool(request);
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Children
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected List<?> getModelChildren() {
+		List<Object> modelItems = Lists.newArrayList();
+		for (IMenuItemInfo menuItem : m_menu.getItems()) {
+			modelItems.add(menuItem.getModel());
+		}
+		return modelItems;
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/part/menu/MenuImageFigure.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/part/menu/MenuImageFigure.java
index c27d3a5db..e4ddbe1c4 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/part/menu/MenuImageFigure.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/part/menu/MenuImageFigure.java
@@ -23,25 +23,25 @@
  * @coverage core.gef.figure
  */
 public class MenuImageFigure extends Figure {
-  private final IMenuInfo m_menu;
+	private final IMenuInfo m_menu;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public MenuImageFigure(IMenuInfo menu) {
-    m_menu = menu;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public MenuImageFigure(IMenuInfo menu) {
+		m_menu = menu;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Paint
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void paintClientArea(Graphics graphics) {
-    Image image = m_menu.getImage();
-    graphics.drawImage(image, 0, 0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Paint
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void paintClientArea(Graphics graphics) {
+		Image image = m_menu.getImage();
+		graphics.drawImage(image, 0, 0);
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/part/menu/MenuItemEditPart.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/part/menu/MenuItemEditPart.java
index 50dde59c2..e9ba66db8 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/part/menu/MenuItemEditPart.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/part/menu/MenuItemEditPart.java
@@ -28,60 +28,60 @@
  * @coverage core.gef.menu
  */
 public final class MenuItemEditPart extends SubmenuAwareEditPart {
-  private final IMenuItemInfo m_item;
+	private final IMenuItemInfo m_item;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public MenuItemEditPart(Object toolkitModel, IMenuItemInfo item) {
-    super(toolkitModel, item);
-    m_item = item;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public MenuItemEditPart(Object toolkitModel, IMenuItemInfo item) {
+		super(toolkitModel, item);
+		m_item = item;
+	}
 
-  /////////////////////////////////////////////////////////////////////
-  //
-  // Figure
-  //
-  /////////////////////////////////////////////////////////////////////
-  @Override
-  protected Figure createFigure() {
-    return new Figure() {
-      @Override
-      protected void paintClientArea(Graphics graphics) {
-        // draw image
-        {
-          Image image = m_item.getImage();
-          if (image != null) {
-            graphics.drawImage(image, 0, 0);
-          }
-        }
-        // highlight "item" with displayed "menu"
-        if (!getModelChildren().isEmpty()) {
-          Rectangle area = getFigure().getClientArea();
-          graphics.setForegroundColor(IColorConstants.menuBackgroundSelected);
-          graphics.setBackgroundColor(IColorConstants.white);
-          graphics.setLineWidth(2);
-          graphics.drawRectangle(1, 1, area.width - 2, area.height - 2);
-        }
-      }
-    };
-  }
+	/////////////////////////////////////////////////////////////////////
+	//
+	// Figure
+	//
+	/////////////////////////////////////////////////////////////////////
+	@Override
+	protected Figure createFigure() {
+		return new Figure() {
+			@Override
+			protected void paintClientArea(Graphics graphics) {
+				// draw image
+				{
+					Image image = m_item.getImage();
+					if (image != null) {
+						graphics.drawImage(image, 0, 0);
+					}
+				}
+				// highlight "item" with displayed "menu"
+				if (!getModelChildren().isEmpty()) {
+					Rectangle area = getFigure().getClientArea();
+					graphics.setForegroundColor(IColorConstants.menuBackgroundSelected);
+					graphics.setBackgroundColor(IColorConstants.white);
+					graphics.setLineWidth(2);
+					graphics.drawRectangle(1, 1, area.width - 2, area.height - 2);
+				}
+			}
+		};
+	}
 
-  @Override
-  protected void refreshVisuals() {
-    getFigure().setBounds(m_item.getBounds());
-  }
+	@Override
+	protected void refreshVisuals() {
+		getFigure().setBounds(m_item.getBounds());
+	}
 
-  /////////////////////////////////////////////////////////////////////
-  //
-  // Children
-  //
-  /////////////////////////////////////////////////////////////////////
-  @Override
-  protected Object getChildMenu() {
-    IMenuInfo menu = m_item.getMenu();
-    return menu != null ? menu.getModel() : null;
-  }
+	/////////////////////////////////////////////////////////////////////
+	//
+	// Children
+	//
+	/////////////////////////////////////////////////////////////////////
+	@Override
+	protected Object getChildMenu() {
+		IMenuInfo menu = m_item.getMenu();
+		return menu != null ? menu.getModel() : null;
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/part/menu/MenuObjectEditPart.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/part/menu/MenuObjectEditPart.java
index 75ca58e84..ffddeb788 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/part/menu/MenuObjectEditPart.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/part/menu/MenuObjectEditPart.java
@@ -35,209 +35,209 @@
  * @coverage core.gef.menu
  */
 public abstract class MenuObjectEditPart extends GraphicalEditPart implements IMenuObjectEditPart {
-  private final IMenuObjectInfo m_object;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public MenuObjectEditPart(Object toolkitModel, IMenuObjectInfo menuModel) {
-    setModel(toolkitModel);
-    m_object = menuModel;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Model
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public IMenuObjectInfo getMenuModel() {
-    return m_object;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Life cycle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void activate() {
-    super.activate();
-    addListeners();
-  }
-
-  @Override
-  public void deactivate() {
-    removeListeners();
-    super.deactivate();
-  }
-
-  @Override
-  public void removeNotify() {
-    // usually GEF considers that child edit parts figures are
-    // children of parent edit part figure, but we add submenu's to
-    // popup layer, so we have to notify children to remove their figures.
-    for (EditPart child : getChildren()) {
-      removeChildVisual(child);
-    }
-    super.removeNotify();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Listeners
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private ISelectionChangedListener m_selectionListener;
-  private IActiveToolListener m_activeToolListener;
-  private IMenuObjectListener m_objectListener;
-
-  private void addListeners() {
-    if (isRootMenuEditPart()) {
-      createListeners();
-      getViewer().addSelectionChangedListener(m_selectionListener);
-      getViewer().getEditDomain().addActiveToolListener(m_activeToolListener);
-      m_object.addListener(m_objectListener);
-    }
-  }
-
-  private void removeListeners() {
-    if (isRootMenuEditPart()) {
-      getViewer().removeSelectionChangedListener(m_selectionListener);
-      getViewer().getEditDomain().removeActiveToolListener(m_activeToolListener);
-      m_object.removeListener(m_objectListener);
-    }
-  }
-
-  private boolean isRootMenuEditPart() {
-    return !(getParent() instanceof MenuObjectEditPart);
-  }
-
-  /**
-   * Creates listeners for viewer and model.
-   */
-  private void createListeners() {
-    if (m_selectionListener != null) {
-      return;
-    }
-    // selection
-    m_selectionListener = new ISelectionChangedListener() {
-      @Override
-      public void selectionChanged(SelectionChangedEvent event) {
-        refresh();
-      }
-    };
-    // active tool
-    m_activeToolListener = new IActiveToolListener() {
-      @Override
-      public void toolActivated(Tool tool) {
-        // when new Tool loaded, so for example we don't create new Item anymore,
-        // we should hide any temporary displayed sub-menus
-        refresh();
-      }
-    };
-    // model listener
-    m_objectListener = new IMenuObjectListener() {
-      private EditPart m_pendingSelection;
-
-      @Override
-      public void refresh() {
-        if (m_pendingSelection != null) {
-          getViewer().select(m_pendingSelection);
-          m_pendingSelection = null;
-        } else {
-          MenuObjectEditPart.this.refresh();
-        }
-      }
-
-      @Override
-      public void deleting(Object toolkitModel) {
-        EditPart objectPart = getViewer().getEditPartByModel(toolkitModel);
-        if (objectPart != null) {
-          EditPart parentPart = objectPart.getParent();
-          List<EditPart> siblings = parentPart.getChildren();
-          int index = siblings.indexOf(objectPart);
-          // move selection on sibling or parent item
-          if (siblings.size() == 1) {
-            m_pendingSelection = parentPart;
-            if (m_pendingSelection instanceof MenuEditPart
-                || m_pendingSelection instanceof MenuPopupEditPart) {
-              m_pendingSelection = m_pendingSelection.getParent();
-            }
-          } else if (index == 0) {
-            m_pendingSelection = siblings.get(index + 1);
-          } else {
-            m_pendingSelection = siblings.get(index - 1);
-          }
-        }
-      }
-    };
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public EditPart getTargetEditPart(Request request) {
-    request = processRequestProcessors(request);
-    EditPart target = super.getTargetEditPart(request);
-    boolean isOperationRequest =
-        request.getType() == Request.REQ_CREATE
-            || request.getType() == Request.REQ_PASTE
-            || request.getType() == Request.REQ_ADD;
-    if (target == this && isOperationRequest) {
-      // Refresh _all_ root MenuObjectEditPart's to close any previously shown drop-downs.
-      // Do this in "async" to don't break normal GEF life cycle.
-      AsyncExecutor.schedule(new Runnable() {
-        @Override
-        public void run() {
-          try {
-            MenuObjectInfoUtils.m_selectingObject = m_object;
-            getViewer().getRootEditPart().accept(new EditPartVisitor() {
-              @Override
-              public boolean visit(EditPart editPart) {
-                if (editPart instanceof MenuObjectEditPart) {
-                  editPart.refresh();
-                  return false;
-                }
-                return true;
-              }
-            });
-          } finally {
-            MenuObjectInfoUtils.m_selectingObject = null;
-          }
-        }
-      });
-    }
-    return target;
-  }
-
-  @Override
-  public void refresh() {
-    removeListeners();
-    try {
-      super.refresh();
-    } finally {
-      addListeners();
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Requests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void performRequest(Request request) {
-    super.performRequest(request);
-    if (request instanceof DragPermissionRequest) {
-      DragPermissionRequest permissionRequest = (DragPermissionRequest) request;
-      permissionRequest.setMove(m_object.canMove());
-      permissionRequest.setReparent(m_object.canReparent());
-    }
-  }
+	private final IMenuObjectInfo m_object;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public MenuObjectEditPart(Object toolkitModel, IMenuObjectInfo menuModel) {
+		setModel(toolkitModel);
+		m_object = menuModel;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Model
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public IMenuObjectInfo getMenuModel() {
+		return m_object;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Life cycle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void activate() {
+		super.activate();
+		addListeners();
+	}
+
+	@Override
+	public void deactivate() {
+		removeListeners();
+		super.deactivate();
+	}
+
+	@Override
+	public void removeNotify() {
+		// usually GEF considers that child edit parts figures are
+		// children of parent edit part figure, but we add submenu's to
+		// popup layer, so we have to notify children to remove their figures.
+		for (EditPart child : getChildren()) {
+			removeChildVisual(child);
+		}
+		super.removeNotify();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Listeners
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private ISelectionChangedListener m_selectionListener;
+	private IActiveToolListener m_activeToolListener;
+	private IMenuObjectListener m_objectListener;
+
+	private void addListeners() {
+		if (isRootMenuEditPart()) {
+			createListeners();
+			getViewer().addSelectionChangedListener(m_selectionListener);
+			getViewer().getEditDomain().addActiveToolListener(m_activeToolListener);
+			m_object.addListener(m_objectListener);
+		}
+	}
+
+	private void removeListeners() {
+		if (isRootMenuEditPart()) {
+			getViewer().removeSelectionChangedListener(m_selectionListener);
+			getViewer().getEditDomain().removeActiveToolListener(m_activeToolListener);
+			m_object.removeListener(m_objectListener);
+		}
+	}
+
+	private boolean isRootMenuEditPart() {
+		return !(getParent() instanceof MenuObjectEditPart);
+	}
+
+	/**
+	 * Creates listeners for viewer and model.
+	 */
+	private void createListeners() {
+		if (m_selectionListener != null) {
+			return;
+		}
+		// selection
+		m_selectionListener = new ISelectionChangedListener() {
+			@Override
+			public void selectionChanged(SelectionChangedEvent event) {
+				refresh();
+			}
+		};
+		// active tool
+		m_activeToolListener = new IActiveToolListener() {
+			@Override
+			public void toolActivated(Tool tool) {
+				// when new Tool loaded, so for example we don't create new Item anymore,
+				// we should hide any temporary displayed sub-menus
+				refresh();
+			}
+		};
+		// model listener
+		m_objectListener = new IMenuObjectListener() {
+			private EditPart m_pendingSelection;
+
+			@Override
+			public void refresh() {
+				if (m_pendingSelection != null) {
+					getViewer().select(m_pendingSelection);
+					m_pendingSelection = null;
+				} else {
+					MenuObjectEditPart.this.refresh();
+				}
+			}
+
+			@Override
+			public void deleting(Object toolkitModel) {
+				EditPart objectPart = getViewer().getEditPartByModel(toolkitModel);
+				if (objectPart != null) {
+					EditPart parentPart = objectPart.getParent();
+					List<EditPart> siblings = parentPart.getChildren();
+					int index = siblings.indexOf(objectPart);
+					// move selection on sibling or parent item
+					if (siblings.size() == 1) {
+						m_pendingSelection = parentPart;
+						if (m_pendingSelection instanceof MenuEditPart
+								|| m_pendingSelection instanceof MenuPopupEditPart) {
+							m_pendingSelection = m_pendingSelection.getParent();
+						}
+					} else if (index == 0) {
+						m_pendingSelection = siblings.get(index + 1);
+					} else {
+						m_pendingSelection = siblings.get(index - 1);
+					}
+				}
+			}
+		};
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public EditPart getTargetEditPart(Request request) {
+		request = processRequestProcessors(request);
+		EditPart target = super.getTargetEditPart(request);
+		boolean isOperationRequest =
+				request.getType() == Request.REQ_CREATE
+				|| request.getType() == Request.REQ_PASTE
+				|| request.getType() == Request.REQ_ADD;
+		if (target == this && isOperationRequest) {
+			// Refresh _all_ root MenuObjectEditPart's to close any previously shown drop-downs.
+			// Do this in "async" to don't break normal GEF life cycle.
+			AsyncExecutor.schedule(new Runnable() {
+				@Override
+				public void run() {
+					try {
+						MenuObjectInfoUtils.m_selectingObject = m_object;
+						getViewer().getRootEditPart().accept(new EditPartVisitor() {
+							@Override
+							public boolean visit(EditPart editPart) {
+								if (editPart instanceof MenuObjectEditPart) {
+									editPart.refresh();
+									return false;
+								}
+								return true;
+							}
+						});
+					} finally {
+						MenuObjectInfoUtils.m_selectingObject = null;
+					}
+				}
+			});
+		}
+		return target;
+	}
+
+	@Override
+	public void refresh() {
+		removeListeners();
+		try {
+			super.refresh();
+		} finally {
+			addListeners();
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Requests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void performRequest(Request request) {
+		super.performRequest(request);
+		if (request instanceof DragPermissionRequest) {
+			DragPermissionRequest permissionRequest = (DragPermissionRequest) request;
+			permissionRequest.setMove(m_object.canMove());
+			permissionRequest.setReparent(m_object.canReparent());
+		}
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/part/menu/MenuPopupEditPart.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/part/menu/MenuPopupEditPart.java
index 42e3df0a2..75154c705 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/part/menu/MenuPopupEditPart.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/part/menu/MenuPopupEditPart.java
@@ -28,67 +28,67 @@
  * @coverage core.gef.menu
  */
 public final class MenuPopupEditPart extends SubmenuAwareEditPart {
-  private final IMenuPopupInfo m_popup;
+	private final IMenuPopupInfo m_popup;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public MenuPopupEditPart(Object toolkitModel, IMenuPopupInfo popup) {
-    super(toolkitModel, popup);
-    m_popup = popup;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public MenuPopupEditPart(Object toolkitModel, IMenuPopupInfo popup) {
+		super(toolkitModel, popup);
+		m_popup = popup;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Figure
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Figure createFigure() {
-    return new Figure() {
-      @Override
-      protected void paintClientArea(Graphics graphics) {
-        // draw image
-        {
-          Image image = m_popup.getImage();
-          if (image != null) {
-            graphics.drawImage(image, 0, 0);
-          }
-        }
-        // highlight "item" with displayed "menu"
-        if (!getModelChildren().isEmpty()) {
-          Rectangle area = getFigure().getClientArea();
-          graphics.setForegroundColor(IColorConstants.menuBackgroundSelected);
-          graphics.setBackgroundColor(IColorConstants.white);
-          graphics.setLineWidth(2);
-          graphics.drawRectangle(1, 1, area.width - 2, area.height - 2);
-        }
-      }
-    };
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Figure
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Figure createFigure() {
+		return new Figure() {
+			@Override
+			protected void paintClientArea(Graphics graphics) {
+				// draw image
+				{
+					Image image = m_popup.getImage();
+					if (image != null) {
+						graphics.drawImage(image, 0, 0);
+					}
+				}
+				// highlight "item" with displayed "menu"
+				if (!getModelChildren().isEmpty()) {
+					Rectangle area = getFigure().getClientArea();
+					graphics.setForegroundColor(IColorConstants.menuBackgroundSelected);
+					graphics.setBackgroundColor(IColorConstants.white);
+					graphics.setLineWidth(2);
+					graphics.drawRectangle(1, 1, area.width - 2, area.height - 2);
+				}
+			}
+		};
+	}
 
-  @Override
-  protected void refreshVisuals() {
-    getFigure().setBounds(m_popup.getBounds());
-  }
+	@Override
+	protected void refreshVisuals() {
+		getFigure().setBounds(m_popup.getBounds());
+	}
 
-  /////////////////////////////////////////////////////////////////////
-  //
-  // Children
-  //
-  /////////////////////////////////////////////////////////////////////
-  private IMenuInfo m_menuObject;
-  private MenuReference m_menuReference;
+	/////////////////////////////////////////////////////////////////////
+	//
+	// Children
+	//
+	/////////////////////////////////////////////////////////////////////
+	private IMenuInfo m_menuObject;
+	private MenuReference m_menuReference;
 
-  @Override
-  protected Object getChildMenu() {
-    IMenuInfo menu = m_popup.getMenu();
-    if (menu != m_menuObject) {
-      m_menuObject = menu;
-      m_menuReference = new MenuReference(menu);
-    }
-    return m_menuReference;
-  }
+	@Override
+	protected Object getChildMenu() {
+		IMenuInfo menu = m_popup.getMenu();
+		if (menu != m_menuObject) {
+			m_menuObject = menu;
+			m_menuReference = new MenuReference(menu);
+		}
+		return m_menuReference;
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/part/menu/MenuReference.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/part/menu/MenuReference.java
index 6277f0571..aa2d1b577 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/part/menu/MenuReference.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/part/menu/MenuReference.java
@@ -21,26 +21,26 @@
  * @coverage core.gef.menu
  */
 public final class MenuReference {
-  private final IMenuInfo m_menu;
+	private final IMenuInfo m_menu;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public MenuReference(IMenuInfo menu) {
-    m_menu = menu;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public MenuReference(IMenuInfo menu) {
+		m_menu = menu;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the underlying {@link IMenuInfo} model.
-   */
-  public IMenuInfo getMenu() {
-    return m_menu;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the underlying {@link IMenuInfo} model.
+	 */
+	public IMenuInfo getMenu() {
+		return m_menu;
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/part/menu/SubmenuAwareEditPart.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/part/menu/SubmenuAwareEditPart.java
index 1598e7224..8d50cc5b5 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/part/menu/SubmenuAwareEditPart.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/part/menu/SubmenuAwareEditPart.java
@@ -32,104 +32,104 @@
  * @coverage core.gef.menu
  */
 public abstract class SubmenuAwareEditPart extends MenuObjectEditPart {
-  private final IMenuObjectInfo m_object;
+	private final IMenuObjectInfo m_object;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SubmenuAwareEditPart(Object toolkitModel, IMenuObjectInfo menuModel) {
-    super(toolkitModel, menuModel);
-    m_object = menuModel;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SubmenuAwareEditPart(Object toolkitModel, IMenuObjectInfo menuModel) {
+		super(toolkitModel, menuModel);
+		m_object = menuModel;
+	}
 
-  /////////////////////////////////////////////////////////////////////
-  //
-  // Visuals
-  //
-  /////////////////////////////////////////////////////////////////////
-  @Override
-  public final Figure getContentPane() {
-    return getViewer().getLayer(IEditPartViewer.MENU_PRIMARY_LAYER);
-  }
+	/////////////////////////////////////////////////////////////////////
+	//
+	// Visuals
+	//
+	/////////////////////////////////////////////////////////////////////
+	@Override
+	public final Figure getContentPane() {
+		return getViewer().getLayer(IEditPartViewer.MENU_PRIMARY_LAYER);
+	}
 
-  @Override
-  protected void addChildVisual(EditPart childPart, int index) {
-    // this needed because index for menu item child (cascaded menu)
-    // is always zero. This leads to improper edit parts order.
-    // The workaround is to override this method and forcibly
-    // add figure with default index.
-    GraphicalEditPart graphicalPart = (GraphicalEditPart) childPart;
-    getContentPane().add(graphicalPart.getFigure());
-    graphicalPart.getFigure().setData(childPart);
-  }
+	@Override
+	protected void addChildVisual(EditPart childPart, int index) {
+		// this needed because index for menu item child (cascaded menu)
+		// is always zero. This leads to improper edit parts order.
+		// The workaround is to override this method and forcibly
+		// add figure with default index.
+		GraphicalEditPart graphicalPart = (GraphicalEditPart) childPart;
+		getContentPane().add(graphicalPart.getFigure());
+		graphicalPart.getFigure().setData(childPart);
+	}
 
-  /////////////////////////////////////////////////////////////////////
-  //
-  // Edit policies
-  //
-  /////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createEditPolicies() {
-    super.createEditPolicies();
-    installEditPolicy(EditPolicy.LAYOUT_ROLE, new SubmenuAwareLayoutEditPolicy(m_object));
-    installEditPolicy(EditPolicy.SELECTION_ROLE, new MenuSelectionEditPolicy());
-  }
+	/////////////////////////////////////////////////////////////////////
+	//
+	// Edit policies
+	//
+	/////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createEditPolicies() {
+		super.createEditPolicies();
+		installEditPolicy(EditPolicy.LAYOUT_ROLE, new SubmenuAwareLayoutEditPolicy(m_object));
+		installEditPolicy(EditPolicy.SELECTION_ROLE, new MenuSelectionEditPolicy());
+	}
 
-  /////////////////////////////////////////////////////////////////////
-  //
-  // Children
-  //
-  /////////////////////////////////////////////////////////////////////
-  @Override
-  protected final List<?> getModelChildren() {
-    // prepare selected object
-    IMenuObjectInfo selectedObject = null;
-    {
-      List<EditPart> selectedEditParts = getViewer().getSelectedEditParts();
-      if (!selectedEditParts.isEmpty()) {
-        EditPart selectedEditPart = selectedEditParts.get(selectedEditParts.size() - 1);
-        MenuObjectEditPart menuObjectEditPart = getMenuObjectEditPart(selectedEditPart);
-        if (menuObjectEditPart != null) {
-          selectedObject = menuObjectEditPart.getMenuModel();
-        }
-      }
-    }
-    // sub-menu is visible when "selected" or "selecting" objects belong to our menu
-    if (MenuObjectInfoUtils.isParentChild(m_object, selectedObject)
-        || MenuObjectInfoUtils.isParentChild(m_object, MenuObjectInfoUtils.m_selectingObject)) {
-      Object childMenu = getChildMenu();
-      if (childMenu != null) {
-        return Collections.singletonList(childMenu);
-      }
-    }
-    // if we are not on the path to activating menu object, so don't show sub-menu
-    return Collections.EMPTY_LIST;
-  }
+	/////////////////////////////////////////////////////////////////////
+	//
+	// Children
+	//
+	/////////////////////////////////////////////////////////////////////
+	@Override
+	protected final List<?> getModelChildren() {
+		// prepare selected object
+		IMenuObjectInfo selectedObject = null;
+		{
+			List<EditPart> selectedEditParts = getViewer().getSelectedEditParts();
+			if (!selectedEditParts.isEmpty()) {
+				EditPart selectedEditPart = selectedEditParts.get(selectedEditParts.size() - 1);
+				MenuObjectEditPart menuObjectEditPart = getMenuObjectEditPart(selectedEditPart);
+				if (menuObjectEditPart != null) {
+					selectedObject = menuObjectEditPart.getMenuModel();
+				}
+			}
+		}
+		// sub-menu is visible when "selected" or "selecting" objects belong to our menu
+		if (MenuObjectInfoUtils.isParentChild(m_object, selectedObject)
+				|| MenuObjectInfoUtils.isParentChild(m_object, MenuObjectInfoUtils.m_selectingObject)) {
+			Object childMenu = getChildMenu();
+			if (childMenu != null) {
+				return Collections.singletonList(childMenu);
+			}
+		}
+		// if we are not on the path to activating menu object, so don't show sub-menu
+		return Collections.EMPTY_LIST;
+	}
 
-  /**
-   * In Swing we can drop just any component on menu, for example strut/glue between items. But for
-   * these components {@link EditPart} is not {@link MenuObjectEditPart}, so, we should climb up
-   * until find {@link MenuObjectEditPart}.
-   *
-   * @return the {@link MenuObjectEditPart} that corresponds to given {@link EditPart}, or
-   *         <code>null</code>, if {@link EditPart} does not belong to any
-   *         {@link MenuObjectEditPart} hierarchy.
-   */
-  private static MenuObjectEditPart getMenuObjectEditPart(EditPart editPart) {
-    for (; editPart != null; editPart = editPart.getParent()) {
-      if (editPart instanceof MenuObjectEditPart) {
-        return (MenuObjectEditPart) editPart;
-      }
-    }
-    // not a MenuObjectEditPart
-    return null;
-  }
+	/**
+	 * In Swing we can drop just any component on menu, for example strut/glue between items. But for
+	 * these components {@link EditPart} is not {@link MenuObjectEditPart}, so, we should climb up
+	 * until find {@link MenuObjectEditPart}.
+	 *
+	 * @return the {@link MenuObjectEditPart} that corresponds to given {@link EditPart}, or
+	 *         <code>null</code>, if {@link EditPart} does not belong to any
+	 *         {@link MenuObjectEditPart} hierarchy.
+	 */
+	private static MenuObjectEditPart getMenuObjectEditPart(EditPart editPart) {
+		for (; editPart != null; editPart = editPart.getParent()) {
+			if (editPart instanceof MenuObjectEditPart) {
+				return (MenuObjectEditPart) editPart;
+			}
+		}
+		// not a MenuObjectEditPart
+		return null;
+	}
 
-  /**
-   * @return the toolkit model for {@link IMenuInfo}, or <code>null</code> this object has no
-   *         sub-menu.
-   */
-  protected abstract Object getChildMenu();
+	/**
+	 * @return the toolkit model for {@link IMenuInfo}, or <code>null</code> this object has no
+	 *         sub-menu.
+	 */
+	protected abstract Object getChildMenu();
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/DblClickRunScriptEditPolicy.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/DblClickRunScriptEditPolicy.java
index 814f7a515..36fe21b9d 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/DblClickRunScriptEditPolicy.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/DblClickRunScriptEditPolicy.java
@@ -24,34 +24,34 @@
  * @coverage core.gef.policy
  */
 public final class DblClickRunScriptEditPolicy extends EditPolicy {
-  private final ObjectInfo m_component;
-  private final String m_script;
+	private final ObjectInfo m_component;
+	private final String m_script;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DblClickRunScriptEditPolicy(ObjectInfo component, String script) {
-    m_component = component;
-    m_script = script;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DblClickRunScriptEditPolicy(ObjectInfo component, String script) {
+		m_component = component;
+		m_script = script;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Request
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void performRequest(Request request) {
-    super.performRequest(request);
-    if (Request.REQ_OPEN.equals(request.getType())) {
-      ExecutionUtils.run(m_component, new RunnableEx() {
-        @Override
-        public void run() throws Exception {
-          ScriptUtils.evaluate(m_script, m_component);
-        }
-      });
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Request
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void performRequest(Request request) {
+		super.performRequest(request);
+		if (Request.REQ_OPEN.equals(request.getType())) {
+			ExecutionUtils.run(m_component, new RunnableEx() {
+				@Override
+				public void run() throws Exception {
+					ScriptUtils.evaluate(m_script, m_component);
+				}
+			});
+		}
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/FlipBooleanPropertyEditPolicy.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/FlipBooleanPropertyEditPolicy.java
index 951a7564a..772f06b62 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/FlipBooleanPropertyEditPolicy.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/FlipBooleanPropertyEditPolicy.java
@@ -27,41 +27,41 @@
  * @coverage core.gef.policy
  */
 public final class FlipBooleanPropertyEditPolicy extends EditPolicy {
-  private final ObjectInfo m_component;
-  private final String m_propertyPath;
+	private final ObjectInfo m_component;
+	private final String m_propertyPath;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FlipBooleanPropertyEditPolicy(ObjectInfo component, String propertyPath) {
-    m_component = component;
-    m_propertyPath = propertyPath;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FlipBooleanPropertyEditPolicy(ObjectInfo component, String propertyPath) {
+		m_component = component;
+		m_propertyPath = propertyPath;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Request
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void performRequest(Request request) {
-    super.performRequest(request);
-    if (Request.REQ_OPEN.equals(request.getType())) {
-      ExecutionUtils.run(m_component, new RunnableEx() {
-        @Override
-        public void run() throws Exception {
-          Property property = PropertyUtils.getByPath(m_component, m_propertyPath);
-          if (property != null) {
-            Object value = property.getValue();
-            if (value instanceof Boolean) {
-              boolean booleanValue = (Boolean) value;
-              property.setValue(!booleanValue);
-            }
-          }
-        }
-      });
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Request
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void performRequest(Request request) {
+		super.performRequest(request);
+		if (Request.REQ_OPEN.equals(request.getType())) {
+			ExecutionUtils.run(m_component, new RunnableEx() {
+				@Override
+				public void run() throws Exception {
+					Property property = PropertyUtils.getByPath(m_component, m_propertyPath);
+					if (property != null) {
+						Object value = property.getValue();
+						if (value instanceof Boolean) {
+							boolean booleanValue = (Boolean) value;
+							property.setValue(!booleanValue);
+						}
+					}
+				}
+			});
+		}
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/layout/absolute/AbsoluteBasedLayoutEditPolicy.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/layout/absolute/AbsoluteBasedLayoutEditPolicy.java
index 96143b116..10cd8b7b8 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/layout/absolute/AbsoluteBasedLayoutEditPolicy.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/layout/absolute/AbsoluteBasedLayoutEditPolicy.java
@@ -73,924 +73,924 @@
  * @coverage core.gef.policy
  */
 public abstract class AbsoluteBasedLayoutEditPolicy<C extends IAbstractComponentInfo>
-    extends
-      KeyboardMovingLayoutEditPolicy
-    implements
-      IVisualDataProvider,
-      IFeedbackProxy,
-      IPreferenceConstants {
-  protected PlacementsSupport placementsSupport;
-  private int m_frozenYValue;
-  private final IObjectInfo m_layout;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbsoluteBasedLayoutEditPolicy(ObjectInfo layout) {
-    m_layout = layout;
-    new BroadcastListenerHelper(layout, this, new ObjectInfoDelete() {
-      @Override
-      public void before(ObjectInfo parent, ObjectInfo child) throws Exception {
-        if (parent instanceof IAbstractComponentInfo) {
-          // don't do any processing if parent is deleting.
-          if (!parent.isDeleting()) {
-            if (isOurChild(parent, child) && child instanceof IAbstractComponentInfo) {
-              onDelete(child);
-            }
-          }
-        }
-      }
-
-      private boolean isOurChild(ObjectInfo parent, ObjectInfo child) {
-        return getHostModel() == parent && parent != null && parent.getChildren().contains(child);
-      }
-    });
-    new BroadcastListenerHelper(layout, this, new ObjectEventListener() {
-      @Override
-      public void refreshed() throws Exception {
-        showSelectionFeedbacks();
-      }
-
-      @Override
-      public void addSelectionActions(List<ObjectInfo> objects, List<Object> actions)
-          throws Exception {
-        AbstractAlignmentActionsSupport<C> alignmentSupport = getAlignmentActionsSupport();
-        if (alignmentSupport != null) {
-          alignmentSupport.addAlignmentActions(objects, actions);
-        }
-      }
-    });
-  }
-
-  protected final void createPlacementsSupport(IAbsoluteLayoutCommands layoutCommands) {
-    placementsSupport = new PlacementsSupport(this, this, layoutCommands, getAllComponents());
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Layout editing preferences
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return preference store for this layout editing.
-   */
-  protected final IPreferenceStore getPreferenceStore() {
-    return getToolkit().getPreferences();
-  }
-
-  /**
-   * @return the {@link ToolkitDescription} of the toolkit this policy applies to.
-   */
-  protected abstract ToolkitDescription getToolkit();
-
-  /**
-   * @return a X grid step value for this layout.
-   */
-  @Override
-  public int getGridStepX() {
-    return getPreferenceStore().getInt(P_GRID_STEP_X);
-  }
-
-  /**
-   * @return a Y grid step value for this layout.
-   */
-  @Override
-  public int getGridStepY() {
-    return getPreferenceStore().getInt(P_GRID_STEP_Y);
-  }
-
-  /**
-   * @return <code>true</code> if "free mode" snapping enabled for the layout.
-   */
-  @Override
-  public boolean useFreeSnapping() {
-    return getPreferenceStore().getBoolean(P_USE_FREE_MODE);
-  }
-
-  /**
-   * @return <code>true</code> if grid snapping enabled for the layout.
-   */
-  @Override
-  public boolean useGridSnapping() {
-    return getPreferenceStore().getBoolean(P_USE_GRID);
-  }
-
-  /**
-   * @return <code>true</code> if move/resize hint feedback enabled for the layout.
-   */
-  public boolean isShowTextFeedback() {
-    return getPreferenceStore().getBoolean(P_DISPLAY_LOCATION_SIZE_HINTS);
-  }
-
-  /**
-   * @return <code>true</code> if grid feedback enabled for the layout.
-   */
-  public boolean isShowGridFeedback() {
-    return getPreferenceStore().getBoolean(P_DISPLAY_GRID);
-  }
-
-  /**
-   * @return <code>true</code> when snapping should be disabled.
-   */
-  @Override
-  public boolean isSuppressingSnapping() {
-    return DesignerPlugin.isShiftPressed();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return {@link List<IAbstractComponentInfo>} of all widget info's.
-   */
-  public abstract List<C> getAllComponents();
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Requests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getResizeRequestType() {
-    return AbsoluteBasedSelectionEditPolicy.REQ_RESIZE;
-  }
-
-  @Override
-  public boolean understandsRequest(Request request) {
-    if (Request.REQ_ORPHAN.equals(request.getType())
-        || getResizeRequestType().equals(request.getType())) {
-      return true;
-    }
-    return super.understandsRequest(request);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Feedbacks
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Figure m_dotsFeedback;
-  private Figure m_moveFeedback;
-  private Figure m_createFeedback;
-  private TextFeedback m_locationFeedback;
-  private TextFeedback m_sizeFeedback;
-
-  /**
-   * @return special layer above feedback layer for to add text feedbacks
-   */
-  private Layer getTextFeedbackLayer() {
-    return getLayer(IEditPartViewer.FEEDBACK_LAYER_ABV_1);
-  }
-
-  /**
-   * Creates line figure, translates given model coordinates into feedback and adds created line
-   * into feedback layer
-   */
-  protected final Polyline createLineFeedback(int x1, int y1, int x2, int y2) {
-    // prepare points
-    Point begin = new Point(x1, y1);
-    Point end = new Point(x2, y2);
-    translateModelToFeedback(begin);
-    translateModelToFeedback(end);
-    // create feedback
-    Polyline line = new Polyline();
-    line.addPoint(begin);
-    line.addPoint(end);
-    line.setLineStyle(SWT.LINE_DOT);
-    addFeedback(line);
-    return line;
-  }
-
-  /**
-   * Return string that should be used in size hint for given size in pixels. Usually it returns
-   * just Integer.toString(), but some layouts, for example GWT AbsolutePanel support not only
-   * pixels, but also inches, centimeters, etc. We keep size units for such layouts, so want to show
-   * user size in current units, not in plain pixels.
-   *
-   * @param editPart
-   *          An {@link EditPart} which is currently resizing
-   * @param x
-   *          A current width of <code>editPart</code>
-   * @param y
-   *          A current height of <code>editPart</code>
-   * @return string representing current size of component
-   */
-  public final String getSizeHintString(EditPart editPart, int width, int height) {
-    return Integer.toString(width) + " x " + Integer.toString(height);
-  }
-
-  /**
-   * Return string representing the current component location during moving
-   *
-   * @param editPart
-   *          An {@link EditPart} which is currently moving
-   * @param x
-   *          A current x location of <code>editPart</code>
-   * @param y
-   *          A current y location of <code>editPart</code>
-   * @return string representing the current component location during moving
-   */
-  public String getLocationHintString(EditPart editPart, int x, int y) {
-    return Integer.toString(x) + " x " + Integer.toString(y);
-  }
-
-  //
-  @Override
-  protected void showLayoutTargetFeedback(Request request) {
-    // prepare snapping
-    if (request instanceof ChangeBoundsRequest) {
-      eraseSelectionFeedbacks();
-      placementsSupport.cleanup();
-      showMoveFeedback((ChangeBoundsRequest) request);
-    } else if (request instanceof CreateRequest) {
-      placementsSupport.cleanup();
-      showCreationFeedback((CreateRequest) request);
-    } else if (request instanceof PasteRequest) {
-      placementsSupport.cleanup();
-      showPasteFeedback((PasteRequest) request);
-    }
-  }
-
-  /**
-   * Called before starting to move components.
-   */
-  protected void eraseSelectionFeedbacks() {
-  }
-
-  /**
-   * Restores the selection after any operation.
-   */
-  protected void showSelectionFeedbacks() {
-  }
-
-  @Override
-  protected void eraseLayoutTargetFeedback(Request request) {
-    if (m_dotsFeedback != null) {
-      removeFeedback(m_dotsFeedback);
-      m_dotsFeedback = null;
-    }
-    placementsSupport.clearFeedbacks();
-    if (m_moveFeedback != null) {
-      removeFeedback(m_moveFeedback);
-      m_moveFeedback = null;
-    }
-    if (m_createFeedback != null) {
-      removeFeedback(m_createFeedback);
-      m_createFeedback = null;
-    }
-    if (m_locationFeedback != null) {
-      m_locationFeedback.remove();
-      m_locationFeedback = null;
-    }
-    if (m_sizeFeedback != null) {
-      m_sizeFeedback.remove();
-      m_sizeFeedback = null;
-    }
-    m_frozenYValue = 0;
-  }
-
-  private boolean isFreezeVerticalAxis(Request request) {
-    return request.isControlKeyPressed() && m_frozenYValue != 0;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Move
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void showMoveFeedback(ChangeBoundsRequest request) {
-    // first of all remove an old feedback
-    if (m_moveFeedback != null) {
-      removeFeedback(m_moveFeedback);
-      m_moveFeedback = null;
-    }
-    // is this edit parts moved by using a keyboard
-    boolean isKeyboardMoving = isKeyboardMoving();
-    // prepare dots feedback if enabled
-    Figure hostFigure = getHostFigure();
-    if (m_dotsFeedback == null) {
-      if ((useGridSnapping() || isKeyboardMoving()) && isShowGridFeedback()) {
-        m_dotsFeedback = new DotsFeedback<>(this, hostFigure);
-        addFeedback(m_dotsFeedback);
-      }
-    }
-    // some preparations
-    List<EditPart> editParts = request.getEditParts();
-    List<IAbstractComponentInfo> modelList = Lists.newArrayList();
-    Rectangle[] relativeBounds = new Rectangle[editParts.size()];
-    Rectangle widgetBounds;
-    // calculate model bounds and create move feedback
-    if (editParts.size() > 1) {
-      GraphicalEditPart firstEditPart = (GraphicalEditPart) editParts.get(0);
-      widgetBounds = new Rectangle(firstEditPart.getFigure().getBounds());
-      m_moveFeedback = new OutlineImageFigure(null);
-      //
-      for (EditPart editPart : editParts) {
-        IAbstractComponentInfo model = (IAbstractComponentInfo) editPart.getModel();
-        Rectangle bounds = ((GraphicalEditPart) editPart).getFigure().getBounds();
-        //
-        widgetBounds.union(bounds);
-        modelList.add(model);
-        //
-        m_moveFeedback.add(new OutlineImageFigure(model.getImage(),
-            AbsolutePolicyUtils.COLOR_OUTLINE), bounds);
-      }
-      //
-      List<Figure> moveFeedbackFigures = m_moveFeedback.getChildren();
-      for (int i = 0; i < moveFeedbackFigures.size(); ++i) {
-        Figure figure = moveFeedbackFigures.get(i);
-        figure.getBounds().performTranslate(-widgetBounds.x, -widgetBounds.y);
-        relativeBounds[i] = figure.getBounds().getCopy();
-      }
-    } else {
-      EditPart editPart = editParts.get(0);
-      IAbstractComponentInfo model = (IAbstractComponentInfo) editPart.getModel();
-      //
-      widgetBounds = ((GraphicalEditPart) editPart).getFigure().getBounds().getCopy();
-      relativeBounds[0] = new Rectangle(new Point(), widgetBounds.getSize());
-      modelList.add(model);
-      //
-      m_moveFeedback = new OutlineImageFigure(model.getImage(), AbsolutePolicyUtils.COLOR_OUTLINE);
-    }
-    // make figure bounds as absolute
-    FigureUtils.translateFigureToAbsolute2(
-        ((GraphicalEditPart) editParts.get(0)).getFigure().getParent(),
-        widgetBounds);
-    // translate feedback coordinates into model coordinates (ex., SWT shell control
-    // has caption and border area, so (0,0) point offset is border left and caption
-    // size, i.e. insets.
-    translateAbsoluteToModel(widgetBounds);
-    // see where the widget(s) moved
-    Point moveDelta = request.getMoveDelta();
-    widgetBounds.x = widgetBounds.x + moveDelta.x;
-    if (isFreezeVerticalAxis(request)) {
-      widgetBounds.y = m_frozenYValue;
-    } else {
-      widgetBounds.y = m_frozenYValue = widgetBounds.y + moveDelta.y;
-    }
-    addFeedback(m_moveFeedback);
-    // Case 42313
-    Point moveLocation = isKeyboardMoving() ? moveDelta : request.getLocation();
-    // do drag
-    placementsSupport.drag(
-        moveLocation,
-        ImmutableList.copyOf(modelList),
-        widgetBounds,
-        ImmutableList.copyOf(relativeBounds));
-    widgetBounds = placementsSupport.getBounds();
-    // Store new "model" location to be shown in TextFeedback if enabled
-    int newX = widgetBounds.x;
-    int newY = widgetBounds.y;
-    // update move feedback: translate bounds back into feedback coordinates, apply bounds for feedback figure
-    translateModelToFeedback(widgetBounds);
-    m_moveFeedback.setBounds(widgetBounds);
-    // create text feedback
-    if (m_locationFeedback == null && isShowTextFeedback() && !isKeyboardMoving) {
-      m_locationFeedback = new TextFeedback(getTextFeedbackLayer());
-      m_locationFeedback.add();
-    }
-    // update text feedback
-    if (m_locationFeedback != null) {
-      EditPart firstEditPart = editParts.get(0);
-      m_locationFeedback.setText(getLocationHintString(firstEditPart, newX, newY));
-      Point locationFeedbackLocation =
-          getLocationHintLocation(firstEditPart, widgetBounds, m_locationFeedback.getSize());
-      m_locationFeedback.setLocation(locationFeedbackLocation);
-    }
-  }
-
-  protected Point getLocationHintLocation(EditPart editPart,
-      Rectangle widgetBounds,
-      Dimension hintSize) {
-    return widgetBounds.getLocation().getTranslated(-30, -25);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Resize
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Figure m_resizeFeedback;
-  private TextFeedback m_textFeedback;
-
-  public void showResizeFeedback(ChangeBoundsRequest request) {
-    if (m_resizeFeedback != null) {
-      removeFeedback(m_resizeFeedback);
-      m_resizeFeedback = null;
-    }
-    getPlacementsSupport().cleanup();
-    // prepare
-    List<EditPart> editParts = request.getEditParts();
-    List<IAbstractComponentInfo> modelList = Lists.newArrayList();
-    Rectangle[] relativeBounds = new Rectangle[editParts.size()];
-    Rectangle widgetBounds;
-    // calculate model bounds and create move feedback
-    if (editParts.size() > 1) {
-      GraphicalEditPart firstEditPart = (GraphicalEditPart) editParts.get(0);
-      widgetBounds = new Rectangle(firstEditPart.getFigure().getBounds());
-      m_resizeFeedback = new OutlineImageFigure(null);
-      //
-      for (EditPart editPart : editParts) {
-        IAbstractComponentInfo model = (IAbstractComponentInfo) editPart.getModel();
-        Rectangle bounds = ((GraphicalEditPart) editPart).getFigure().getBounds();
-        //
-        widgetBounds.union(bounds);
-        modelList.add(model);
-        //
-        m_resizeFeedback.add(new OutlineImageFigure(model.getImage(),
-            AbsolutePolicyUtils.COLOR_OUTLINE), bounds);
-      }
-      //
-      List<Figure> moveFeedbackFigures = m_resizeFeedback.getChildren();
-      for (int i = 0; i < moveFeedbackFigures.size(); ++i) {
-        Figure figure = moveFeedbackFigures.get(i);
-        figure.getBounds().performTranslate(-widgetBounds.x, -widgetBounds.y);
-        relativeBounds[i] = figure.getBounds().getCopy();
-      }
-    } else {
-      EditPart editPart = editParts.get(0);
-      IAbstractComponentInfo model = (IAbstractComponentInfo) editPart.getModel();
-      //
-      widgetBounds = ((GraphicalEditPart) editPart).getFigure().getBounds().getCopy();
-      relativeBounds[0] = new Rectangle(new Point(), widgetBounds.getSize());
-      modelList.add(model);
-      //
-      m_resizeFeedback =
-          new OutlineImageFigure(model.getImage(), AbsolutePolicyUtils.COLOR_OUTLINE);
-    }
-    boolean isKeyboardMoving = isKeyboardMoving();
-    //
-    widgetBounds = request.getTransformedRectangle(widgetBounds.getCopy());
-    // translate feedback coordinates into model coordinates (ex., SWT shell control
-    // has caption and border area, so (0,0) point offset is border left and caption
-    // size, i.e. insets.
-    FigureUtils.translateFigureToAbsolute2(getHostFigure(), widgetBounds);
-    PolicyUtils.translateAbsoluteToModel(this, widgetBounds);
-    // do drag
-    Dimension sizeDelta = request.getSizeDelta();
-    Point moveLocation =
-        isKeyboardMoving ? new Point(sizeDelta.width, sizeDelta.height) : request.getLocation();
-    // do drag
-    getPlacementsSupport().drag(
-        moveLocation,
-        ImmutableList.copyOf(modelList),
-        widgetBounds,
-        ImmutableList.copyOf(relativeBounds),
-        request.getResizeDirection());
-    //
-    widgetBounds = getPlacementsSupport().getBounds();
-    PolicyUtils.translateModelToFeedback(this, widgetBounds);
-    // create dots feedback
-    if (m_dotsFeedback == null) {
-      if (useGridSnapping() || isKeyboardMoving) {
-        m_dotsFeedback = new DotsFeedback<>(this, getHost().getFigure());
-        addFeedback(m_dotsFeedback);
-      }
-    }
-    // create selection feedback
-    addFeedback(m_resizeFeedback);
-    // update selection feedback
-    m_resizeFeedback.setBounds(widgetBounds);
-    // create text feedback
-    if (m_textFeedback == null && isShowTextFeedback() && !isKeyboardMoving) {
-      m_textFeedback = new TextFeedback(getFeedbackLayer());
-      m_textFeedback.add();
-    }
-    // update text feedback
-    if (m_textFeedback != null) {
-      m_textFeedback.setText(getSizeHintString(getHost(), widgetBounds.width, widgetBounds.height));
-      m_textFeedback.setLocation(request.getLocation().getTranslated(10, 10));
-    }
-  }
-
-  public void eraseResizeFeedback(ChangeBoundsRequest request) {
-    eraseLayoutTargetFeedback(request);
-    if (m_resizeFeedback != null) {
-      removeFeedback(m_resizeFeedback);
-      m_resizeFeedback = null;
-    }
-    if (m_textFeedback != null) {
-      m_textFeedback.remove();
-      m_textFeedback = null;
-    }
-  }
-
-  final Command getResizeCommandImpl(ChangeBoundsRequest request) {
-    CompoundEditCommand command = new CompoundEditCommand(m_layout.getUnderlyingModel());
-    command.add(new EditCommand(m_layout) {
-      @Override
-      protected void executeEdit() throws Exception {
-        getPlacementsSupport().commit();
-      }
-    });
-    Command resizeCommand = getResizeCommand(request);
-    if (resizeCommand != null) {
-      command.add(resizeCommand);
-    }
-    return command;
-  }
-
-  protected Command getResizeCommand(final ChangeBoundsRequest request) {
-    return null;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Create
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected boolean m_resizeOnCreate;
-  private Point m_startLocation;
-
-  private void showCreationFeedback(CreateRequest request) {
-    // remove create feedback
-    if (m_createFeedback != null) {
-      removeFeedback(m_createFeedback);
-      m_createFeedback = null;
-    }
-    Point location = request.getLocation().getCopy();
-    translateAbsoluteToModel(location);
-    IAbstractComponentInfo newWidget = (IAbstractComponentInfo) request.getNewObject();
-    Image image = newWidget.getImage();
-    // set size
-    Dimension size = request.getSize();
-    Point topLeftPoint;
-    Dimension preferredSize;
-    if (size != null) {
-      m_resizeOnCreate = true;
-      // size-on-drop info update
-      topLeftPoint = new Point(m_startLocation.x, m_startLocation.y);
-      preferredSize =
-          new Dimension(size.width + location.x - m_startLocation.x, size.height
-              + location.y
-              - m_startLocation.y);
-      // prevent axis fixing
-      m_frozenYValue = 0;
-    } else {
-      m_resizeOnCreate = false;
-      preferredSize = newWidget.getPreferredSize();
-      if (preferredSize != null) {
-        int y;
-        // freeze vertical axis if needed
-        boolean freezeVerticalAxis = isFreezeVerticalAxis(request);
-        if (freezeVerticalAxis) {
-          y = m_frozenYValue;
-        } else {
-          y = m_frozenYValue = location.y - preferredSize.height / 2;
-        }
-        topLeftPoint = new Point(location.x - preferredSize.width / 2, y);
-      } else {
-        preferredSize = new Dimension(0, 0);
-        topLeftPoint = location.getCopy();
-      }
-    }
-    Rectangle widgetBounds =
-        new Rectangle(topLeftPoint.x, topLeftPoint.y, preferredSize.width, preferredSize.height);
-    m_createFeedback = new OutlineImageFigure(image);
-    addFeedback(m_createFeedback);
-    // process placement
-    placementsSupport.drag(location, newWidget, widgetBounds, size == null
-        ? 0
-        : IPositionConstants.SOUTH_EAST);
-    widgetBounds = placementsSupport.getBounds();
-    Rectangle widgetModelBounds = widgetBounds.getCopy();
-    // store drag start location
-    if (size == null) {
-      m_startLocation = widgetBounds.getLocation();
-    }
-    //
-    Figure hostFigure = getHostFigure();
-    // create dots feedback
-    if (m_dotsFeedback == null) {
-      if (useGridSnapping() || isKeyboardMoving()) {
-        m_dotsFeedback = new DotsFeedback<>(this, hostFigure);
-        addFeedback(m_dotsFeedback);
-      }
-    }
-    translateModelToFeedback(widgetBounds);
-    // update create feedback
-    m_createFeedback.setBounds(widgetBounds);
-    // create text feedbacks
-    if (isShowTextFeedback() && !isKeyboardMoving()) {
-      if (m_locationFeedback == null) {
-        m_locationFeedback = new TextFeedback(getTextFeedbackLayer());
-        m_locationFeedback.add();
-      }
-      if (size != null && m_sizeFeedback == null) {
-        m_sizeFeedback = new TextFeedback(getTextFeedbackLayer());
-        m_sizeFeedback.add();
-      }
-      // update text feedbacks
-      m_locationFeedback.setText(getLocationHintString(
-          getHost(),
-          widgetModelBounds.x,
-          widgetModelBounds.y));
-      m_locationFeedback.setLocation(widgetBounds.getLocation().getTranslated(-30, -25));
-      if (size != null) {
-        m_sizeFeedback.setText(getSizeHintString(
-            getHost(),
-            widgetModelBounds.width,
-            widgetModelBounds.height));
-        m_sizeFeedback.setLocation(widgetBounds.getBottomRight().getTranslated(30, 25));
-      }
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Paste
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Map<IAbstractComponentInfo, PastedComponentInfo> m_pastedComponents;
-  private Point m_pasteLocation;
-
-  private void showPasteFeedback(final PasteRequest request) {
-    List<IObjectInfo> pastingComponents =
-        GlobalState.getPasteRequestProcessor().getPastingComponents(request);
-    m_pastedComponents = new HashMap<>();
-    List<IAbstractComponentInfo> pastedModels =
-        new ArrayList<>(pastingComponents.size());
-    try {
-      // remove create feedback
-      if (m_createFeedback != null) {
-        removeFeedback(m_createFeedback);
-        m_createFeedback = null;
-      }
-      //
-      Point location = request.getLocation().getCopy();
-      translateAbsoluteToModel(location);
-      //
-      Rectangle widgetBounds;
-      request.setObjects(pastedModels);
-      // calculate model bounds and create move feedback
-      Rectangle[] relativeBounds = new Rectangle[pastingComponents.size()];
-      if (pastingComponents.size() > 1) {
-        widgetBounds = new Rectangle();
-        m_createFeedback = new OutlineImageFigure(null);
-        // create widgets from memento and calculate their relative placement
-        int offsetX = Integer.MAX_VALUE;
-        int offsetY = Integer.MAX_VALUE;
-        for (IObjectInfo pastedObject : pastingComponents) {
-          IAbstractComponentInfo model = (IAbstractComponentInfo) pastedObject;
-          Rectangle bounds = model.getBounds();
-          offsetX = Math.min(offsetX, bounds.x);
-          offsetY = Math.min(offsetY, bounds.y);
-          m_pastedComponents.put(model, new PastedComponentInfo(model));
-          pastedModels.add(model);
-        }
-        // make union rectangle with relative bounds and prepare union rectangle feedback
-        int i = 0;
-        for (Entry<IAbstractComponentInfo, PastedComponentInfo> entry : m_pastedComponents.entrySet()) {
-          PastedComponentInfo pastedComponent = entry.getValue();
-          Rectangle bounds = pastedComponent.getComponent().getBounds();
-          relativeBounds[i] =
-              new Rectangle(bounds.x - offsetX, bounds.y - offsetY, bounds.width, bounds.height);
-          widgetBounds.union(relativeBounds[i]);
-          m_createFeedback.add(new OutlineImageFigure(pastedComponent.getComponent().getImage(),
-              AbsolutePolicyUtils.COLOR_OUTLINE), relativeBounds[i]);
-          pastedComponent.setBounds(relativeBounds[i]);
-          i++;
-        }
-      } else {
-        IAbstractComponentInfo model = (IAbstractComponentInfo) pastingComponents.get(0);
-        //
-        relativeBounds[0] = new Rectangle();
-        widgetBounds = new Rectangle(new Point(0, 0), model.getBounds().getSize());
-        m_pastedComponents.put(model, new PastedComponentInfo(model, widgetBounds.getCopy()));
-        pastedModels.add(model);
-        //
-        m_createFeedback =
-            new OutlineImageFigure(model.getImage(), AbsolutePolicyUtils.COLOR_OUTLINE);
-      }
-      addFeedback(m_createFeedback);
-      widgetBounds.x = location.x - widgetBounds.width / 2;
-      if (isFreezeVerticalAxis(request)) {
-        widgetBounds.y = m_frozenYValue;
-      } else {
-        widgetBounds.y = m_frozenYValue = location.y - widgetBounds.height / 2;
-      }
-      // create dots feedback
-      if (m_dotsFeedback == null) {
-        if (useGridSnapping() || isKeyboardMoving()) {
-          m_dotsFeedback = new DotsFeedback<>(this, getHostFigure());
-          addFeedback(m_dotsFeedback);
-        }
-      }
-      placementsSupport.drag(
-          request.getLocation(),
-          ImmutableList.copyOf(pastedModels),
-          widgetBounds,
-          ImmutableList.copyOf(relativeBounds));
-      widgetBounds = placementsSupport.getBounds();
-      m_pasteLocation = widgetBounds.getLocation();
-      translateModelToFeedback(widgetBounds);
-      // update paste feedback
-      m_createFeedback.setBounds(widgetBounds);
-    } catch (Throwable e) {
-      DesignerPlugin.log(e);
-    }
-  }
-
-  @Override
-  protected final Command getPasteCommand(PasteRequest request) {
-    Command pasteCommand =
-        GlobalState.getPasteRequestProcessor().getPasteCommand(
-            request,
-            component -> doPasteComponent(m_pasteLocation, m_pastedComponents.get(component)));
-    EditCommand cleanupCommand = new EditCommand(m_layout) {
-      @Override
-      protected void executeEdit() throws Exception {
-        placementsSupport.commitAdd();
-        m_pastedComponents = null;
-        m_pasteLocation = null;
-      }
-    };
-    CompoundCommand resultCommand = new CompoundEditCommand(m_layout.getUnderlyingModel());
-    resultCommand.add(pasteCommand);
-    resultCommand.add(cleanupCommand);
-    return resultCommand;
-  }
-
-  /**
-   * Class for keeping pasting information.
-   */
-  protected static final class PastedComponentInfo {
-    private final IAbstractComponentInfo m_component;
-    private Rectangle m_bounds;
-
-    public PastedComponentInfo(IAbstractComponentInfo model, Rectangle bounds) {
-      m_component = model;
-      m_bounds = bounds;
-    }
-
-    public PastedComponentInfo(IAbstractComponentInfo model) {
-      this(model, null);
-    }
-
-    public final Rectangle getBounds() {
-      return m_bounds;
-    }
-
-    public final void setBounds(Rectangle bounds) {
-      m_bounds = bounds;
-    }
-
-    public final IAbstractComponentInfo getComponent() {
-      return m_component;
-    }
-  }
-
-  /**
-   * This method does some toolkit-specific as well as applying memento to pasted widget. Executed
-   * from command's {@link EditCommand#executeEdit()} method.
-   *
-   * @param location
-   *          the pasting location.
-   * @param widget
-   *          the widget being pasted.
-   */
-  protected abstract void doPasteComponent(Point pasteLocation, PastedComponentInfo pastedComponent)
-      throws Exception;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Delete/Reparent
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected void onDelete(ObjectInfo child) throws Exception {
-    placementsSupport.delete(ImmutableList.of((IAbstractComponentInfo) child));
-  }
-
-  @Override
-  protected Command getOrphanCommand(GroupRequest request) {
-    List<EditPart> editParts = request.getEditParts();
-    final List<IAbstractComponentInfo> widgets = Lists.newArrayList();
-    for (EditPart editPart : editParts) {
-      widgets.add((IAbstractComponentInfo) editPart.getModel());
-    }
-    return new EditCommand(m_layout) {
-      @Override
-      protected void executeEdit() throws Exception {
-        placementsSupport.delete(widgets);
-      }
-    };
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IVisualDataProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public int getComponentGapValue(IAbstractComponentInfo component1,
-      IAbstractComponentInfo component2,
-      int direction) {
-    switch (direction) {
-      case IPositionConstants.LEFT :
-        return getPreferenceStore().getInt(P_COMPONENT_GAP_LEFT);
-      case IPositionConstants.RIGHT :
-        return getPreferenceStore().getInt(P_COMPONENT_GAP_RIGHT);
-      case IPositionConstants.TOP :
-        return getPreferenceStore().getInt(P_COMPONENT_GAP_TOP);
-      case IPositionConstants.BOTTOM :
-        return getPreferenceStore().getInt(P_COMPONENT_GAP_BOTTOM);
-    }
-    return 6;
-  }
-
-  @Override
-  public int getContainerGapValue(IAbstractComponentInfo component, int direction) {
-    switch (direction) {
-      case IPositionConstants.LEFT :
-        return getPreferenceStore().getInt(P_CONTAINER_GAP_LEFT);
-      case IPositionConstants.RIGHT :
-        return getPreferenceStore().getInt(P_CONTAINER_GAP_RIGHT);
-      case IPositionConstants.TOP :
-        return getPreferenceStore().getInt(P_CONTAINER_GAP_TOP);
-      case IPositionConstants.BOTTOM :
-        return getPreferenceStore().getInt(P_CONTAINER_GAP_BOTTOM);
-    }
-    return 10;
-  }
-
-  @Override
-  public Point getClientAreaOffset() {
-    return new Point();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IFeedbackProxy
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Figure addHorizontalFeedbackLine(int y, int x, int width) {
-    Polyline line = createLineFeedback(x, y, x + width, y);
-    line.setForeground(AbsolutePolicyUtils.COLOR_FEEDBACK);
-    return line;
-  }
-
-  @Override
-  public Figure addHorizontalMiddleLineFeedback(int y, int x, int width) {
-    Polyline line = createLineFeedback(x, y, x + width, y);
-    line.setForeground(AbsolutePolicyUtils.COLOR_FEEDBACK);
-    line.setLineStyle(SWT.LINE_DASH);
-    return line;
-  }
-
-  @Override
-  public Figure addOutlineFeedback(Rectangle bounds) {
-    // prepare bounds
-    Rectangle feedbackBounds = bounds.getCopy();
-    translateModelToFeedback(feedbackBounds);
-    // create feedback
-    Figure outline = new Figure();
-    outline.setBorder(new LineBorder(AbsolutePolicyUtils.COLOR_OUTLINE));
-    outline.setBounds(feedbackBounds);
-    addFeedback(outline);
-    return outline;
-  }
-
-  @Override
-  public Figure addVerticalFeedbackLine(int x, int y, int height) {
-    Polyline line = createLineFeedback(x, y, x, y + height);
-    line.setForeground(AbsolutePolicyUtils.COLOR_FEEDBACK);
-    return line;
-  }
-
-  @Override
-  public Figure addVerticalMiddleLineFeedback(int x, int y, int height) {
-    Polyline line = createLineFeedback(x, y, x, y + height);
-    line.setForeground(AbsolutePolicyUtils.COLOR_FEEDBACK);
-    line.setLineStyle(SWT.LINE_DASH);
-    return line;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Selection actions
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected abstract AbstractAlignmentActionsSupport<C> getAlignmentActionsSupport();
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Helpers/Misc
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected void translateModelToFeedback(Translatable t) {
-    PolicyUtils.translateModelToFeedback(this, t);
-  }
-
-  protected void translateAbsoluteToModel(Translatable t) {
-    PolicyUtils.translateAbsoluteToModel(this, t);
-  }
-
-  protected final PlacementsSupport getPlacementsSupport() {
-    return placementsSupport;
-  }
+extends
+KeyboardMovingLayoutEditPolicy
+implements
+IVisualDataProvider,
+IFeedbackProxy,
+IPreferenceConstants {
+	protected PlacementsSupport placementsSupport;
+	private int m_frozenYValue;
+	private final IObjectInfo m_layout;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbsoluteBasedLayoutEditPolicy(ObjectInfo layout) {
+		m_layout = layout;
+		new BroadcastListenerHelper(layout, this, new ObjectInfoDelete() {
+			@Override
+			public void before(ObjectInfo parent, ObjectInfo child) throws Exception {
+				if (parent instanceof IAbstractComponentInfo) {
+					// don't do any processing if parent is deleting.
+					if (!parent.isDeleting()) {
+						if (isOurChild(parent, child) && child instanceof IAbstractComponentInfo) {
+							onDelete(child);
+						}
+					}
+				}
+			}
+
+			private boolean isOurChild(ObjectInfo parent, ObjectInfo child) {
+				return getHostModel() == parent && parent != null && parent.getChildren().contains(child);
+			}
+		});
+		new BroadcastListenerHelper(layout, this, new ObjectEventListener() {
+			@Override
+			public void refreshed() throws Exception {
+				showSelectionFeedbacks();
+			}
+
+			@Override
+			public void addSelectionActions(List<ObjectInfo> objects, List<Object> actions)
+					throws Exception {
+				AbstractAlignmentActionsSupport<C> alignmentSupport = getAlignmentActionsSupport();
+				if (alignmentSupport != null) {
+					alignmentSupport.addAlignmentActions(objects, actions);
+				}
+			}
+		});
+	}
+
+	protected final void createPlacementsSupport(IAbsoluteLayoutCommands layoutCommands) {
+		placementsSupport = new PlacementsSupport(this, this, layoutCommands, getAllComponents());
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Layout editing preferences
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return preference store for this layout editing.
+	 */
+	protected final IPreferenceStore getPreferenceStore() {
+		return getToolkit().getPreferences();
+	}
+
+	/**
+	 * @return the {@link ToolkitDescription} of the toolkit this policy applies to.
+	 */
+	protected abstract ToolkitDescription getToolkit();
+
+	/**
+	 * @return a X grid step value for this layout.
+	 */
+	@Override
+	public int getGridStepX() {
+		return getPreferenceStore().getInt(P_GRID_STEP_X);
+	}
+
+	/**
+	 * @return a Y grid step value for this layout.
+	 */
+	@Override
+	public int getGridStepY() {
+		return getPreferenceStore().getInt(P_GRID_STEP_Y);
+	}
+
+	/**
+	 * @return <code>true</code> if "free mode" snapping enabled for the layout.
+	 */
+	@Override
+	public boolean useFreeSnapping() {
+		return getPreferenceStore().getBoolean(P_USE_FREE_MODE);
+	}
+
+	/**
+	 * @return <code>true</code> if grid snapping enabled for the layout.
+	 */
+	@Override
+	public boolean useGridSnapping() {
+		return getPreferenceStore().getBoolean(P_USE_GRID);
+	}
+
+	/**
+	 * @return <code>true</code> if move/resize hint feedback enabled for the layout.
+	 */
+	public boolean isShowTextFeedback() {
+		return getPreferenceStore().getBoolean(P_DISPLAY_LOCATION_SIZE_HINTS);
+	}
+
+	/**
+	 * @return <code>true</code> if grid feedback enabled for the layout.
+	 */
+	public boolean isShowGridFeedback() {
+		return getPreferenceStore().getBoolean(P_DISPLAY_GRID);
+	}
+
+	/**
+	 * @return <code>true</code> when snapping should be disabled.
+	 */
+	@Override
+	public boolean isSuppressingSnapping() {
+		return DesignerPlugin.isShiftPressed();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return {@link List<IAbstractComponentInfo>} of all widget info's.
+	 */
+	public abstract List<C> getAllComponents();
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Requests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getResizeRequestType() {
+		return AbsoluteBasedSelectionEditPolicy.REQ_RESIZE;
+	}
+
+	@Override
+	public boolean understandsRequest(Request request) {
+		if (Request.REQ_ORPHAN.equals(request.getType())
+				|| getResizeRequestType().equals(request.getType())) {
+			return true;
+		}
+		return super.understandsRequest(request);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Feedbacks
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Figure m_dotsFeedback;
+	private Figure m_moveFeedback;
+	private Figure m_createFeedback;
+	private TextFeedback m_locationFeedback;
+	private TextFeedback m_sizeFeedback;
+
+	/**
+	 * @return special layer above feedback layer for to add text feedbacks
+	 */
+	private Layer getTextFeedbackLayer() {
+		return getLayer(IEditPartViewer.FEEDBACK_LAYER_ABV_1);
+	}
+
+	/**
+	 * Creates line figure, translates given model coordinates into feedback and adds created line
+	 * into feedback layer
+	 */
+	protected final Polyline createLineFeedback(int x1, int y1, int x2, int y2) {
+		// prepare points
+		Point begin = new Point(x1, y1);
+		Point end = new Point(x2, y2);
+		translateModelToFeedback(begin);
+		translateModelToFeedback(end);
+		// create feedback
+		Polyline line = new Polyline();
+		line.addPoint(begin);
+		line.addPoint(end);
+		line.setLineStyle(SWT.LINE_DOT);
+		addFeedback(line);
+		return line;
+	}
+
+	/**
+	 * Return string that should be used in size hint for given size in pixels. Usually it returns
+	 * just Integer.toString(), but some layouts, for example GWT AbsolutePanel support not only
+	 * pixels, but also inches, centimeters, etc. We keep size units for such layouts, so want to show
+	 * user size in current units, not in plain pixels.
+	 *
+	 * @param editPart
+	 *          An {@link EditPart} which is currently resizing
+	 * @param x
+	 *          A current width of <code>editPart</code>
+	 * @param y
+	 *          A current height of <code>editPart</code>
+	 * @return string representing current size of component
+	 */
+	public final String getSizeHintString(EditPart editPart, int width, int height) {
+		return Integer.toString(width) + " x " + Integer.toString(height);
+	}
+
+	/**
+	 * Return string representing the current component location during moving
+	 *
+	 * @param editPart
+	 *          An {@link EditPart} which is currently moving
+	 * @param x
+	 *          A current x location of <code>editPart</code>
+	 * @param y
+	 *          A current y location of <code>editPart</code>
+	 * @return string representing the current component location during moving
+	 */
+	public String getLocationHintString(EditPart editPart, int x, int y) {
+		return Integer.toString(x) + " x " + Integer.toString(y);
+	}
+
+	//
+	@Override
+	protected void showLayoutTargetFeedback(Request request) {
+		// prepare snapping
+		if (request instanceof ChangeBoundsRequest) {
+			eraseSelectionFeedbacks();
+			placementsSupport.cleanup();
+			showMoveFeedback((ChangeBoundsRequest) request);
+		} else if (request instanceof CreateRequest) {
+			placementsSupport.cleanup();
+			showCreationFeedback((CreateRequest) request);
+		} else if (request instanceof PasteRequest) {
+			placementsSupport.cleanup();
+			showPasteFeedback((PasteRequest) request);
+		}
+	}
+
+	/**
+	 * Called before starting to move components.
+	 */
+	protected void eraseSelectionFeedbacks() {
+	}
+
+	/**
+	 * Restores the selection after any operation.
+	 */
+	protected void showSelectionFeedbacks() {
+	}
+
+	@Override
+	protected void eraseLayoutTargetFeedback(Request request) {
+		if (m_dotsFeedback != null) {
+			removeFeedback(m_dotsFeedback);
+			m_dotsFeedback = null;
+		}
+		placementsSupport.clearFeedbacks();
+		if (m_moveFeedback != null) {
+			removeFeedback(m_moveFeedback);
+			m_moveFeedback = null;
+		}
+		if (m_createFeedback != null) {
+			removeFeedback(m_createFeedback);
+			m_createFeedback = null;
+		}
+		if (m_locationFeedback != null) {
+			m_locationFeedback.remove();
+			m_locationFeedback = null;
+		}
+		if (m_sizeFeedback != null) {
+			m_sizeFeedback.remove();
+			m_sizeFeedback = null;
+		}
+		m_frozenYValue = 0;
+	}
+
+	private boolean isFreezeVerticalAxis(Request request) {
+		return request.isControlKeyPressed() && m_frozenYValue != 0;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Move
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void showMoveFeedback(ChangeBoundsRequest request) {
+		// first of all remove an old feedback
+		if (m_moveFeedback != null) {
+			removeFeedback(m_moveFeedback);
+			m_moveFeedback = null;
+		}
+		// is this edit parts moved by using a keyboard
+		boolean isKeyboardMoving = isKeyboardMoving();
+		// prepare dots feedback if enabled
+		Figure hostFigure = getHostFigure();
+		if (m_dotsFeedback == null) {
+			if ((useGridSnapping() || isKeyboardMoving()) && isShowGridFeedback()) {
+				m_dotsFeedback = new DotsFeedback<>(this, hostFigure);
+				addFeedback(m_dotsFeedback);
+			}
+		}
+		// some preparations
+		List<EditPart> editParts = request.getEditParts();
+		List<IAbstractComponentInfo> modelList = Lists.newArrayList();
+		Rectangle[] relativeBounds = new Rectangle[editParts.size()];
+		Rectangle widgetBounds;
+		// calculate model bounds and create move feedback
+		if (editParts.size() > 1) {
+			GraphicalEditPart firstEditPart = (GraphicalEditPart) editParts.get(0);
+			widgetBounds = new Rectangle(firstEditPart.getFigure().getBounds());
+			m_moveFeedback = new OutlineImageFigure(null);
+			//
+			for (EditPart editPart : editParts) {
+				IAbstractComponentInfo model = (IAbstractComponentInfo) editPart.getModel();
+				Rectangle bounds = ((GraphicalEditPart) editPart).getFigure().getBounds();
+				//
+				widgetBounds.union(bounds);
+				modelList.add(model);
+				//
+				m_moveFeedback.add(new OutlineImageFigure(model.getImage(),
+						AbsolutePolicyUtils.COLOR_OUTLINE), bounds);
+			}
+			//
+			List<Figure> moveFeedbackFigures = m_moveFeedback.getChildren();
+			for (int i = 0; i < moveFeedbackFigures.size(); ++i) {
+				Figure figure = moveFeedbackFigures.get(i);
+				figure.getBounds().performTranslate(-widgetBounds.x, -widgetBounds.y);
+				relativeBounds[i] = figure.getBounds().getCopy();
+			}
+		} else {
+			EditPart editPart = editParts.get(0);
+			IAbstractComponentInfo model = (IAbstractComponentInfo) editPart.getModel();
+			//
+			widgetBounds = ((GraphicalEditPart) editPart).getFigure().getBounds().getCopy();
+			relativeBounds[0] = new Rectangle(new Point(), widgetBounds.getSize());
+			modelList.add(model);
+			//
+			m_moveFeedback = new OutlineImageFigure(model.getImage(), AbsolutePolicyUtils.COLOR_OUTLINE);
+		}
+		// make figure bounds as absolute
+		FigureUtils.translateFigureToAbsolute2(
+				((GraphicalEditPart) editParts.get(0)).getFigure().getParent(),
+				widgetBounds);
+		// translate feedback coordinates into model coordinates (ex., SWT shell control
+		// has caption and border area, so (0,0) point offset is border left and caption
+		// size, i.e. insets.
+		translateAbsoluteToModel(widgetBounds);
+		// see where the widget(s) moved
+		Point moveDelta = request.getMoveDelta();
+		widgetBounds.x = widgetBounds.x + moveDelta.x;
+		if (isFreezeVerticalAxis(request)) {
+			widgetBounds.y = m_frozenYValue;
+		} else {
+			widgetBounds.y = m_frozenYValue = widgetBounds.y + moveDelta.y;
+		}
+		addFeedback(m_moveFeedback);
+		// Case 42313
+		Point moveLocation = isKeyboardMoving() ? moveDelta : request.getLocation();
+		// do drag
+		placementsSupport.drag(
+				moveLocation,
+				ImmutableList.copyOf(modelList),
+				widgetBounds,
+				ImmutableList.copyOf(relativeBounds));
+		widgetBounds = placementsSupport.getBounds();
+		// Store new "model" location to be shown in TextFeedback if enabled
+		int newX = widgetBounds.x;
+		int newY = widgetBounds.y;
+		// update move feedback: translate bounds back into feedback coordinates, apply bounds for feedback figure
+		translateModelToFeedback(widgetBounds);
+		m_moveFeedback.setBounds(widgetBounds);
+		// create text feedback
+		if (m_locationFeedback == null && isShowTextFeedback() && !isKeyboardMoving) {
+			m_locationFeedback = new TextFeedback(getTextFeedbackLayer());
+			m_locationFeedback.add();
+		}
+		// update text feedback
+		if (m_locationFeedback != null) {
+			EditPart firstEditPart = editParts.get(0);
+			m_locationFeedback.setText(getLocationHintString(firstEditPart, newX, newY));
+			Point locationFeedbackLocation =
+					getLocationHintLocation(firstEditPart, widgetBounds, m_locationFeedback.getSize());
+			m_locationFeedback.setLocation(locationFeedbackLocation);
+		}
+	}
+
+	protected Point getLocationHintLocation(EditPart editPart,
+			Rectangle widgetBounds,
+			Dimension hintSize) {
+		return widgetBounds.getLocation().getTranslated(-30, -25);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Resize
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Figure m_resizeFeedback;
+	private TextFeedback m_textFeedback;
+
+	public void showResizeFeedback(ChangeBoundsRequest request) {
+		if (m_resizeFeedback != null) {
+			removeFeedback(m_resizeFeedback);
+			m_resizeFeedback = null;
+		}
+		getPlacementsSupport().cleanup();
+		// prepare
+		List<EditPart> editParts = request.getEditParts();
+		List<IAbstractComponentInfo> modelList = Lists.newArrayList();
+		Rectangle[] relativeBounds = new Rectangle[editParts.size()];
+		Rectangle widgetBounds;
+		// calculate model bounds and create move feedback
+		if (editParts.size() > 1) {
+			GraphicalEditPart firstEditPart = (GraphicalEditPart) editParts.get(0);
+			widgetBounds = new Rectangle(firstEditPart.getFigure().getBounds());
+			m_resizeFeedback = new OutlineImageFigure(null);
+			//
+			for (EditPart editPart : editParts) {
+				IAbstractComponentInfo model = (IAbstractComponentInfo) editPart.getModel();
+				Rectangle bounds = ((GraphicalEditPart) editPart).getFigure().getBounds();
+				//
+				widgetBounds.union(bounds);
+				modelList.add(model);
+				//
+				m_resizeFeedback.add(new OutlineImageFigure(model.getImage(),
+						AbsolutePolicyUtils.COLOR_OUTLINE), bounds);
+			}
+			//
+			List<Figure> moveFeedbackFigures = m_resizeFeedback.getChildren();
+			for (int i = 0; i < moveFeedbackFigures.size(); ++i) {
+				Figure figure = moveFeedbackFigures.get(i);
+				figure.getBounds().performTranslate(-widgetBounds.x, -widgetBounds.y);
+				relativeBounds[i] = figure.getBounds().getCopy();
+			}
+		} else {
+			EditPart editPart = editParts.get(0);
+			IAbstractComponentInfo model = (IAbstractComponentInfo) editPart.getModel();
+			//
+			widgetBounds = ((GraphicalEditPart) editPart).getFigure().getBounds().getCopy();
+			relativeBounds[0] = new Rectangle(new Point(), widgetBounds.getSize());
+			modelList.add(model);
+			//
+			m_resizeFeedback =
+					new OutlineImageFigure(model.getImage(), AbsolutePolicyUtils.COLOR_OUTLINE);
+		}
+		boolean isKeyboardMoving = isKeyboardMoving();
+		//
+		widgetBounds = request.getTransformedRectangle(widgetBounds.getCopy());
+		// translate feedback coordinates into model coordinates (ex., SWT shell control
+		// has caption and border area, so (0,0) point offset is border left and caption
+		// size, i.e. insets.
+		FigureUtils.translateFigureToAbsolute2(getHostFigure(), widgetBounds);
+		PolicyUtils.translateAbsoluteToModel(this, widgetBounds);
+		// do drag
+		Dimension sizeDelta = request.getSizeDelta();
+		Point moveLocation =
+				isKeyboardMoving ? new Point(sizeDelta.width, sizeDelta.height) : request.getLocation();
+		// do drag
+		getPlacementsSupport().drag(
+				moveLocation,
+				ImmutableList.copyOf(modelList),
+				widgetBounds,
+				ImmutableList.copyOf(relativeBounds),
+				request.getResizeDirection());
+		//
+		widgetBounds = getPlacementsSupport().getBounds();
+		PolicyUtils.translateModelToFeedback(this, widgetBounds);
+		// create dots feedback
+		if (m_dotsFeedback == null) {
+			if (useGridSnapping() || isKeyboardMoving) {
+				m_dotsFeedback = new DotsFeedback<>(this, getHost().getFigure());
+				addFeedback(m_dotsFeedback);
+			}
+		}
+		// create selection feedback
+		addFeedback(m_resizeFeedback);
+		// update selection feedback
+		m_resizeFeedback.setBounds(widgetBounds);
+		// create text feedback
+		if (m_textFeedback == null && isShowTextFeedback() && !isKeyboardMoving) {
+			m_textFeedback = new TextFeedback(getFeedbackLayer());
+			m_textFeedback.add();
+		}
+		// update text feedback
+		if (m_textFeedback != null) {
+			m_textFeedback.setText(getSizeHintString(getHost(), widgetBounds.width, widgetBounds.height));
+			m_textFeedback.setLocation(request.getLocation().getTranslated(10, 10));
+		}
+	}
+
+	public void eraseResizeFeedback(ChangeBoundsRequest request) {
+		eraseLayoutTargetFeedback(request);
+		if (m_resizeFeedback != null) {
+			removeFeedback(m_resizeFeedback);
+			m_resizeFeedback = null;
+		}
+		if (m_textFeedback != null) {
+			m_textFeedback.remove();
+			m_textFeedback = null;
+		}
+	}
+
+	final Command getResizeCommandImpl(ChangeBoundsRequest request) {
+		CompoundEditCommand command = new CompoundEditCommand(m_layout.getUnderlyingModel());
+		command.add(new EditCommand(m_layout) {
+			@Override
+			protected void executeEdit() throws Exception {
+				getPlacementsSupport().commit();
+			}
+		});
+		Command resizeCommand = getResizeCommand(request);
+		if (resizeCommand != null) {
+			command.add(resizeCommand);
+		}
+		return command;
+	}
+
+	protected Command getResizeCommand(final ChangeBoundsRequest request) {
+		return null;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Create
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected boolean m_resizeOnCreate;
+	private Point m_startLocation;
+
+	private void showCreationFeedback(CreateRequest request) {
+		// remove create feedback
+		if (m_createFeedback != null) {
+			removeFeedback(m_createFeedback);
+			m_createFeedback = null;
+		}
+		Point location = request.getLocation().getCopy();
+		translateAbsoluteToModel(location);
+		IAbstractComponentInfo newWidget = (IAbstractComponentInfo) request.getNewObject();
+		Image image = newWidget.getImage();
+		// set size
+		Dimension size = request.getSize();
+		Point topLeftPoint;
+		Dimension preferredSize;
+		if (size != null) {
+			m_resizeOnCreate = true;
+			// size-on-drop info update
+			topLeftPoint = new Point(m_startLocation.x, m_startLocation.y);
+			preferredSize =
+					new Dimension(size.width + location.x - m_startLocation.x, size.height
+							+ location.y
+							- m_startLocation.y);
+			// prevent axis fixing
+			m_frozenYValue = 0;
+		} else {
+			m_resizeOnCreate = false;
+			preferredSize = newWidget.getPreferredSize();
+			if (preferredSize != null) {
+				int y;
+				// freeze vertical axis if needed
+				boolean freezeVerticalAxis = isFreezeVerticalAxis(request);
+				if (freezeVerticalAxis) {
+					y = m_frozenYValue;
+				} else {
+					y = m_frozenYValue = location.y - preferredSize.height / 2;
+				}
+				topLeftPoint = new Point(location.x - preferredSize.width / 2, y);
+			} else {
+				preferredSize = new Dimension(0, 0);
+				topLeftPoint = location.getCopy();
+			}
+		}
+		Rectangle widgetBounds =
+				new Rectangle(topLeftPoint.x, topLeftPoint.y, preferredSize.width, preferredSize.height);
+		m_createFeedback = new OutlineImageFigure(image);
+		addFeedback(m_createFeedback);
+		// process placement
+		placementsSupport.drag(location, newWidget, widgetBounds, size == null
+				? 0
+						: IPositionConstants.SOUTH_EAST);
+		widgetBounds = placementsSupport.getBounds();
+		Rectangle widgetModelBounds = widgetBounds.getCopy();
+		// store drag start location
+		if (size == null) {
+			m_startLocation = widgetBounds.getLocation();
+		}
+		//
+		Figure hostFigure = getHostFigure();
+		// create dots feedback
+		if (m_dotsFeedback == null) {
+			if (useGridSnapping() || isKeyboardMoving()) {
+				m_dotsFeedback = new DotsFeedback<>(this, hostFigure);
+				addFeedback(m_dotsFeedback);
+			}
+		}
+		translateModelToFeedback(widgetBounds);
+		// update create feedback
+		m_createFeedback.setBounds(widgetBounds);
+		// create text feedbacks
+		if (isShowTextFeedback() && !isKeyboardMoving()) {
+			if (m_locationFeedback == null) {
+				m_locationFeedback = new TextFeedback(getTextFeedbackLayer());
+				m_locationFeedback.add();
+			}
+			if (size != null && m_sizeFeedback == null) {
+				m_sizeFeedback = new TextFeedback(getTextFeedbackLayer());
+				m_sizeFeedback.add();
+			}
+			// update text feedbacks
+			m_locationFeedback.setText(getLocationHintString(
+					getHost(),
+					widgetModelBounds.x,
+					widgetModelBounds.y));
+			m_locationFeedback.setLocation(widgetBounds.getLocation().getTranslated(-30, -25));
+			if (size != null) {
+				m_sizeFeedback.setText(getSizeHintString(
+						getHost(),
+						widgetModelBounds.width,
+						widgetModelBounds.height));
+				m_sizeFeedback.setLocation(widgetBounds.getBottomRight().getTranslated(30, 25));
+			}
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Paste
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Map<IAbstractComponentInfo, PastedComponentInfo> m_pastedComponents;
+	private Point m_pasteLocation;
+
+	private void showPasteFeedback(final PasteRequest request) {
+		List<IObjectInfo> pastingComponents =
+				GlobalState.getPasteRequestProcessor().getPastingComponents(request);
+		m_pastedComponents = new HashMap<>();
+		List<IAbstractComponentInfo> pastedModels =
+				new ArrayList<>(pastingComponents.size());
+		try {
+			// remove create feedback
+			if (m_createFeedback != null) {
+				removeFeedback(m_createFeedback);
+				m_createFeedback = null;
+			}
+			//
+			Point location = request.getLocation().getCopy();
+			translateAbsoluteToModel(location);
+			//
+			Rectangle widgetBounds;
+			request.setObjects(pastedModels);
+			// calculate model bounds and create move feedback
+			Rectangle[] relativeBounds = new Rectangle[pastingComponents.size()];
+			if (pastingComponents.size() > 1) {
+				widgetBounds = new Rectangle();
+				m_createFeedback = new OutlineImageFigure(null);
+				// create widgets from memento and calculate their relative placement
+				int offsetX = Integer.MAX_VALUE;
+				int offsetY = Integer.MAX_VALUE;
+				for (IObjectInfo pastedObject : pastingComponents) {
+					IAbstractComponentInfo model = (IAbstractComponentInfo) pastedObject;
+					Rectangle bounds = model.getBounds();
+					offsetX = Math.min(offsetX, bounds.x);
+					offsetY = Math.min(offsetY, bounds.y);
+					m_pastedComponents.put(model, new PastedComponentInfo(model));
+					pastedModels.add(model);
+				}
+				// make union rectangle with relative bounds and prepare union rectangle feedback
+				int i = 0;
+				for (Entry<IAbstractComponentInfo, PastedComponentInfo> entry : m_pastedComponents.entrySet()) {
+					PastedComponentInfo pastedComponent = entry.getValue();
+					Rectangle bounds = pastedComponent.getComponent().getBounds();
+					relativeBounds[i] =
+							new Rectangle(bounds.x - offsetX, bounds.y - offsetY, bounds.width, bounds.height);
+					widgetBounds.union(relativeBounds[i]);
+					m_createFeedback.add(new OutlineImageFigure(pastedComponent.getComponent().getImage(),
+							AbsolutePolicyUtils.COLOR_OUTLINE), relativeBounds[i]);
+					pastedComponent.setBounds(relativeBounds[i]);
+					i++;
+				}
+			} else {
+				IAbstractComponentInfo model = (IAbstractComponentInfo) pastingComponents.get(0);
+				//
+				relativeBounds[0] = new Rectangle();
+				widgetBounds = new Rectangle(new Point(0, 0), model.getBounds().getSize());
+				m_pastedComponents.put(model, new PastedComponentInfo(model, widgetBounds.getCopy()));
+				pastedModels.add(model);
+				//
+				m_createFeedback =
+						new OutlineImageFigure(model.getImage(), AbsolutePolicyUtils.COLOR_OUTLINE);
+			}
+			addFeedback(m_createFeedback);
+			widgetBounds.x = location.x - widgetBounds.width / 2;
+			if (isFreezeVerticalAxis(request)) {
+				widgetBounds.y = m_frozenYValue;
+			} else {
+				widgetBounds.y = m_frozenYValue = location.y - widgetBounds.height / 2;
+			}
+			// create dots feedback
+			if (m_dotsFeedback == null) {
+				if (useGridSnapping() || isKeyboardMoving()) {
+					m_dotsFeedback = new DotsFeedback<>(this, getHostFigure());
+					addFeedback(m_dotsFeedback);
+				}
+			}
+			placementsSupport.drag(
+					request.getLocation(),
+					ImmutableList.copyOf(pastedModels),
+					widgetBounds,
+					ImmutableList.copyOf(relativeBounds));
+			widgetBounds = placementsSupport.getBounds();
+			m_pasteLocation = widgetBounds.getLocation();
+			translateModelToFeedback(widgetBounds);
+			// update paste feedback
+			m_createFeedback.setBounds(widgetBounds);
+		} catch (Throwable e) {
+			DesignerPlugin.log(e);
+		}
+	}
+
+	@Override
+	protected final Command getPasteCommand(PasteRequest request) {
+		Command pasteCommand =
+				GlobalState.getPasteRequestProcessor().getPasteCommand(
+						request,
+						component -> doPasteComponent(m_pasteLocation, m_pastedComponents.get(component)));
+		EditCommand cleanupCommand = new EditCommand(m_layout) {
+			@Override
+			protected void executeEdit() throws Exception {
+				placementsSupport.commitAdd();
+				m_pastedComponents = null;
+				m_pasteLocation = null;
+			}
+		};
+		CompoundCommand resultCommand = new CompoundEditCommand(m_layout.getUnderlyingModel());
+		resultCommand.add(pasteCommand);
+		resultCommand.add(cleanupCommand);
+		return resultCommand;
+	}
+
+	/**
+	 * Class for keeping pasting information.
+	 */
+	protected static final class PastedComponentInfo {
+		private final IAbstractComponentInfo m_component;
+		private Rectangle m_bounds;
+
+		public PastedComponentInfo(IAbstractComponentInfo model, Rectangle bounds) {
+			m_component = model;
+			m_bounds = bounds;
+		}
+
+		public PastedComponentInfo(IAbstractComponentInfo model) {
+			this(model, null);
+		}
+
+		public final Rectangle getBounds() {
+			return m_bounds;
+		}
+
+		public final void setBounds(Rectangle bounds) {
+			m_bounds = bounds;
+		}
+
+		public final IAbstractComponentInfo getComponent() {
+			return m_component;
+		}
+	}
+
+	/**
+	 * This method does some toolkit-specific as well as applying memento to pasted widget. Executed
+	 * from command's {@link EditCommand#executeEdit()} method.
+	 *
+	 * @param location
+	 *          the pasting location.
+	 * @param widget
+	 *          the widget being pasted.
+	 */
+	protected abstract void doPasteComponent(Point pasteLocation, PastedComponentInfo pastedComponent)
+			throws Exception;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Delete/Reparent
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected void onDelete(ObjectInfo child) throws Exception {
+		placementsSupport.delete(ImmutableList.of((IAbstractComponentInfo) child));
+	}
+
+	@Override
+	protected Command getOrphanCommand(GroupRequest request) {
+		List<EditPart> editParts = request.getEditParts();
+		final List<IAbstractComponentInfo> widgets = Lists.newArrayList();
+		for (EditPart editPart : editParts) {
+			widgets.add((IAbstractComponentInfo) editPart.getModel());
+		}
+		return new EditCommand(m_layout) {
+			@Override
+			protected void executeEdit() throws Exception {
+				placementsSupport.delete(widgets);
+			}
+		};
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IVisualDataProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public int getComponentGapValue(IAbstractComponentInfo component1,
+			IAbstractComponentInfo component2,
+			int direction) {
+		switch (direction) {
+		case IPositionConstants.LEFT :
+			return getPreferenceStore().getInt(P_COMPONENT_GAP_LEFT);
+		case IPositionConstants.RIGHT :
+			return getPreferenceStore().getInt(P_COMPONENT_GAP_RIGHT);
+		case IPositionConstants.TOP :
+			return getPreferenceStore().getInt(P_COMPONENT_GAP_TOP);
+		case IPositionConstants.BOTTOM :
+			return getPreferenceStore().getInt(P_COMPONENT_GAP_BOTTOM);
+		}
+		return 6;
+	}
+
+	@Override
+	public int getContainerGapValue(IAbstractComponentInfo component, int direction) {
+		switch (direction) {
+		case IPositionConstants.LEFT :
+			return getPreferenceStore().getInt(P_CONTAINER_GAP_LEFT);
+		case IPositionConstants.RIGHT :
+			return getPreferenceStore().getInt(P_CONTAINER_GAP_RIGHT);
+		case IPositionConstants.TOP :
+			return getPreferenceStore().getInt(P_CONTAINER_GAP_TOP);
+		case IPositionConstants.BOTTOM :
+			return getPreferenceStore().getInt(P_CONTAINER_GAP_BOTTOM);
+		}
+		return 10;
+	}
+
+	@Override
+	public Point getClientAreaOffset() {
+		return new Point();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IFeedbackProxy
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Figure addHorizontalFeedbackLine(int y, int x, int width) {
+		Polyline line = createLineFeedback(x, y, x + width, y);
+		line.setForeground(AbsolutePolicyUtils.COLOR_FEEDBACK);
+		return line;
+	}
+
+	@Override
+	public Figure addHorizontalMiddleLineFeedback(int y, int x, int width) {
+		Polyline line = createLineFeedback(x, y, x + width, y);
+		line.setForeground(AbsolutePolicyUtils.COLOR_FEEDBACK);
+		line.setLineStyle(SWT.LINE_DASH);
+		return line;
+	}
+
+	@Override
+	public Figure addOutlineFeedback(Rectangle bounds) {
+		// prepare bounds
+		Rectangle feedbackBounds = bounds.getCopy();
+		translateModelToFeedback(feedbackBounds);
+		// create feedback
+		Figure outline = new Figure();
+		outline.setBorder(new LineBorder(AbsolutePolicyUtils.COLOR_OUTLINE));
+		outline.setBounds(feedbackBounds);
+		addFeedback(outline);
+		return outline;
+	}
+
+	@Override
+	public Figure addVerticalFeedbackLine(int x, int y, int height) {
+		Polyline line = createLineFeedback(x, y, x, y + height);
+		line.setForeground(AbsolutePolicyUtils.COLOR_FEEDBACK);
+		return line;
+	}
+
+	@Override
+	public Figure addVerticalMiddleLineFeedback(int x, int y, int height) {
+		Polyline line = createLineFeedback(x, y, x, y + height);
+		line.setForeground(AbsolutePolicyUtils.COLOR_FEEDBACK);
+		line.setLineStyle(SWT.LINE_DASH);
+		return line;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Selection actions
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected abstract AbstractAlignmentActionsSupport<C> getAlignmentActionsSupport();
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Helpers/Misc
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected void translateModelToFeedback(Translatable t) {
+		PolicyUtils.translateModelToFeedback(this, t);
+	}
+
+	protected void translateAbsoluteToModel(Translatable t) {
+		PolicyUtils.translateAbsoluteToModel(this, t);
+	}
+
+	protected final PlacementsSupport getPlacementsSupport() {
+		return placementsSupport;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/layout/absolute/AbsoluteBasedSelectionEditPolicy.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/layout/absolute/AbsoluteBasedSelectionEditPolicy.java
index 1ec067e09..f46e0483f 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/layout/absolute/AbsoluteBasedSelectionEditPolicy.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/layout/absolute/AbsoluteBasedSelectionEditPolicy.java
@@ -33,87 +33,87 @@
  * @coverage core.gef.policy
  */
 public abstract class AbsoluteBasedSelectionEditPolicy<C extends IAbstractComponentInfo>
-    extends
-      SelectionEditPolicy {
-  // constants
-  public static final String REQ_RESIZE = "_absolute_resize";
+extends
+SelectionEditPolicy {
+	// constants
+	public static final String REQ_RESIZE = "_absolute_resize";
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Handles
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected List<Handle> createSelectionHandles() {
-    List<Handle> handles = Lists.newArrayList();
-    MoveHandle moveHandle = new MoveHandle(getHost());
-    handles.add(moveHandle);
-    handles.add(createResizeHandle(IPositionConstants.NORTH));
-    handles.add(createResizeHandle(IPositionConstants.SOUTH));
-    handles.add(createResizeHandle(IPositionConstants.WEST));
-    handles.add(createResizeHandle(IPositionConstants.EAST));
-    handles.add(createResizeHandle(IPositionConstants.SOUTH_EAST));
-    handles.add(createResizeHandle(IPositionConstants.SOUTH_WEST));
-    handles.add(createResizeHandle(IPositionConstants.NORTH_WEST));
-    handles.add(createResizeHandle(IPositionConstants.NORTH_EAST));
-    return handles;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Handles
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected List<Handle> createSelectionHandles() {
+		List<Handle> handles = Lists.newArrayList();
+		MoveHandle moveHandle = new MoveHandle(getHost());
+		handles.add(moveHandle);
+		handles.add(createResizeHandle(IPositionConstants.NORTH));
+		handles.add(createResizeHandle(IPositionConstants.SOUTH));
+		handles.add(createResizeHandle(IPositionConstants.WEST));
+		handles.add(createResizeHandle(IPositionConstants.EAST));
+		handles.add(createResizeHandle(IPositionConstants.SOUTH_EAST));
+		handles.add(createResizeHandle(IPositionConstants.SOUTH_WEST));
+		handles.add(createResizeHandle(IPositionConstants.NORTH_WEST));
+		handles.add(createResizeHandle(IPositionConstants.NORTH_EAST));
+		return handles;
+	}
 
-  /**
-   * @return the {@link ResizeHandle} for given direction.
-   */
-  private Handle createResizeHandle(int direction) {
-    ResizeHandle handle = new ResizeHandle(getHost(), direction);
-    handle.setDragTrackerTool(new ResizeTracker(direction, REQ_RESIZE) {
-      @Override
-      protected Command getCommand() {
-        return getLayoutEditPolicy().getResizeCommandImpl(getRequest());
-      }
+	/**
+	 * @return the {@link ResizeHandle} for given direction.
+	 */
+	private Handle createResizeHandle(int direction) {
+		ResizeHandle handle = new ResizeHandle(getHost(), direction);
+		handle.setDragTrackerTool(new ResizeTracker(direction, REQ_RESIZE) {
+			@Override
+			protected Command getCommand() {
+				return getLayoutEditPolicy().getResizeCommandImpl(getRequest());
+			}
 
-      @Override
-      protected void showSourceFeedback() {
-        getLayoutEditPolicy().showResizeFeedback(getRequest());
-        setShowingFeedback(true);
-      }
+			@Override
+			protected void showSourceFeedback() {
+				getLayoutEditPolicy().showResizeFeedback(getRequest());
+				setShowingFeedback(true);
+			}
 
-      @Override
-      protected void eraseSourceFeedback() {
-        if (isShowingFeedback()) {
-          setShowingFeedback(false);
-          getLayoutEditPolicy().eraseResizeFeedback(getRequest());
-        }
-      }
-    });
-    return handle;
-  }
+			@Override
+			protected void eraseSourceFeedback() {
+				if (isShowingFeedback()) {
+					setShowingFeedback(false);
+					getLayoutEditPolicy().eraseResizeFeedback(getRequest());
+				}
+			}
+		});
+		return handle;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Routing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean understandsRequest(Request request) {
-    return super.understandsRequest(request) || request.getType() == REQ_RESIZE;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Routing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean understandsRequest(Request request) {
+		return super.understandsRequest(request) || request.getType() == REQ_RESIZE;
+	}
 
-  @Override
-  public void performRequest(Request request) {
-    getLayoutEditPolicy().performRequest(request);
-  }
+	@Override
+	public void performRequest(Request request) {
+		getLayoutEditPolicy().performRequest(request);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @SuppressWarnings("unchecked")
-  protected final AbsoluteBasedLayoutEditPolicy<C> getLayoutEditPolicy() {
-    return (AbsoluteBasedLayoutEditPolicy<C>) getHost().getParent().getEditPolicy(
-        EditPolicy.LAYOUT_ROLE);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@SuppressWarnings("unchecked")
+	protected final AbsoluteBasedLayoutEditPolicy<C> getLayoutEditPolicy() {
+		return (AbsoluteBasedLayoutEditPolicy<C>) getHost().getParent().getEditPolicy(
+				EditPolicy.LAYOUT_ROLE);
+	}
 
-  protected final PlacementsSupport getPlacementsSupport() {
-    return getLayoutEditPolicy().getPlacementsSupport();
-  }
+	protected final PlacementsSupport getPlacementsSupport() {
+		return getLayoutEditPolicy().getPlacementsSupport();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/layout/absolute/AbsoluteComplexSelectionEditPolicy.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/layout/absolute/AbsoluteComplexSelectionEditPolicy.java
index b00b24068..0a67473cf 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/layout/absolute/AbsoluteComplexSelectionEditPolicy.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/layout/absolute/AbsoluteComplexSelectionEditPolicy.java
@@ -51,373 +51,373 @@
  * @author mitin_aa
  */
 public abstract class AbsoluteComplexSelectionEditPolicy<C extends IAbstractComponentInfo>
-    extends
-      AbsoluteBasedSelectionEditPolicy<C> implements IActionImageProvider {
-  // constants
-  private static final int MIN_LEFT_SPACE = 10;
-  private static final int INITIAL_RIGHT_SPACE = 10;
-  private static final int FIGURES_SPACE = 10;
-  // fields
-  private List<Figure> m_feedbacks;
-  private List<Figure> m_alignmentFigures;
-  private final IAbsoluteLayoutCommands m_layout;
+extends
+AbsoluteBasedSelectionEditPolicy<C> implements IActionImageProvider {
+	// constants
+	private static final int MIN_LEFT_SPACE = 10;
+	private static final int INITIAL_RIGHT_SPACE = 10;
+	private static final int FIGURES_SPACE = 10;
+	// fields
+	private List<Figure> m_feedbacks;
+	private List<Figure> m_alignmentFigures;
+	private final IAbsoluteLayoutCommands m_layout;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbsoluteComplexSelectionEditPolicy(IAbsoluteLayoutCommands layoutCommands) {
-    super();
-    m_layout = layoutCommands;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbsoluteComplexSelectionEditPolicy(IAbsoluteLayoutCommands layoutCommands) {
+		super();
+		m_layout = layoutCommands;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  //	Selection
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void showSelection() {
-    super.showSelection();
-    ExecutionUtils.runRethrow(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        IAbstractComponentInfo widget = (IAbstractComponentInfo) getHostModel();
-        drawFeedbacks(widget, IPositionConstants.LEFT);
-        drawFeedbacks(widget, IPositionConstants.RIGHT);
-        drawFeedbacks(widget, IPositionConstants.TOP);
-        drawFeedbacks(widget, IPositionConstants.BOTTOM);
-      }
-    });
-    if (getHost().getSelected() == EditPart.SELECTED_PRIMARY) {
-      showAlignmentFigures();
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	//	Selection
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void showSelection() {
+		super.showSelection();
+		ExecutionUtils.runRethrow(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				IAbstractComponentInfo widget = (IAbstractComponentInfo) getHostModel();
+				drawFeedbacks(widget, IPositionConstants.LEFT);
+				drawFeedbacks(widget, IPositionConstants.RIGHT);
+				drawFeedbacks(widget, IPositionConstants.TOP);
+				drawFeedbacks(widget, IPositionConstants.BOTTOM);
+			}
+		});
+		if (getHost().getSelected() == EditPart.SELECTED_PRIMARY) {
+			showAlignmentFigures();
+		}
+	}
 
-  private void drawFeedbacks(IAbstractComponentInfo widget, int side) throws Exception {
-    ComponentAttachmentInfo neighborAttachment;
-    while ((neighborAttachment = getComponentAttachmentInfo(widget, side)) != null) {
-      addFeedbackToComponent(
-          widget,
-          neighborAttachment.getTarget(),
-          side,
-          neighborAttachment.getAlignment());
-      widget = neighborAttachment.getTarget();
-    }
-    if (isAttached(widget, side)) {
-      addFeedbackToParent(widget, side);
-    }
-  }
+	private void drawFeedbacks(IAbstractComponentInfo widget, int side) throws Exception {
+		ComponentAttachmentInfo neighborAttachment;
+		while ((neighborAttachment = getComponentAttachmentInfo(widget, side)) != null) {
+			addFeedbackToComponent(
+					widget,
+					neighborAttachment.getTarget(),
+					side,
+					neighborAttachment.getAlignment());
+			widget = neighborAttachment.getTarget();
+		}
+		if (isAttached(widget, side)) {
+			addFeedbackToParent(widget, side);
+		}
+	}
 
-  @Override
-  protected void hideSelection() {
-    super.hideSelection();
-    for (Figure figure : getFeedbacks()) {
-      FigureUtils.removeFigure(figure);
-    }
-    m_feedbacks = new ArrayList<Figure>();
-    hideAlignmentFigures();
-  }
+	@Override
+	protected void hideSelection() {
+		super.hideSelection();
+		for (Figure figure : getFeedbacks()) {
+			FigureUtils.removeFigure(figure);
+		}
+		m_feedbacks = new ArrayList<Figure>();
+		hideAlignmentFigures();
+	}
 
-  private Dimension getParentSize(IAbstractComponentInfo parent) {
-    Rectangle compositeBounds = parent.getModelBounds().getCopy();
-    Insets clientAreaInsets = parent.getClientAreaInsets();
-    return compositeBounds.crop(clientAreaInsets).getSize().expand(-1, -1);
-  }
+	private Dimension getParentSize(IAbstractComponentInfo parent) {
+		Rectangle compositeBounds = parent.getModelBounds().getCopy();
+		Insets clientAreaInsets = parent.getClientAreaInsets();
+		return compositeBounds.crop(clientAreaInsets).getSize().expand(-1, -1);
+	}
 
-  private void addFeedbackToComponent(IAbstractComponentInfo widget,
-      IAbstractComponentInfo neighborWidget,
-      int side,
-      int neighborSide) {
-    Assert.isTrue((side == IPositionConstants.LEFT || side == IPositionConstants.RIGHT)
-        && (neighborSide == IPositionConstants.LEFT || neighborSide == IPositionConstants.RIGHT)
-        || (side == IPositionConstants.TOP || side == IPositionConstants.BOTTOM)
-        && (neighborSide == IPositionConstants.TOP || neighborSide == IPositionConstants.BOTTOM)
-        || side == IPositionConstants.CENTER
-        || neighborSide == IPositionConstants.CENTER);
-    // bounds, transposed
-    Transposer t = new Transposer(!PlacementUtils.isHorizontalSide(side));
-    Rectangle widgetBounds = t.t(widget.getModelBounds().getCopy());
-    Rectangle neighborBounds = t.t(neighborWidget.getModelBounds().getCopy());
-    // points
-    int x1 =
-        PlacementUtils.isTrailingSide(neighborSide) ? neighborBounds.right() : neighborBounds.x;
-    int x2 = PlacementUtils.isTrailingSide(side) ? widgetBounds.right() : widgetBounds.x;
-    int y = widgetBounds.getLeft().y;
-    Point p2 = t.t(new Point(x1, y));
-    Point p1 = t.t(new Point(x2, y));
-    // draw the main line
-    addLineFeedback(p1, p2, PlacementUtils.isHorizontalSide(side));
-    // draw the helper line
-    int lineStartY = widgetBounds.y > neighborBounds.y ? neighborBounds.y : widgetBounds.y;
-    int lineEndY =
-        widgetBounds.bottom() < neighborBounds.bottom()
-            ? neighborBounds.bottom()
-            : widgetBounds.bottom();
-    Point p3 = t.t(new Point(x1, lineStartY));
-    Point p4 = t.t(new Point(x1, lineEndY));
-    // convert to feedback
-    PolicyUtils.translateModelToFeedback(this, p3);
-    PolicyUtils.translateModelToFeedback(this, p4);
-    addSimpleLineFeedback(p3, p4);
-  }
+	private void addFeedbackToComponent(IAbstractComponentInfo widget,
+			IAbstractComponentInfo neighborWidget,
+			int side,
+			int neighborSide) {
+		Assert.isTrue((side == IPositionConstants.LEFT || side == IPositionConstants.RIGHT)
+				&& (neighborSide == IPositionConstants.LEFT || neighborSide == IPositionConstants.RIGHT)
+				|| (side == IPositionConstants.TOP || side == IPositionConstants.BOTTOM)
+				&& (neighborSide == IPositionConstants.TOP || neighborSide == IPositionConstants.BOTTOM)
+				|| side == IPositionConstants.CENTER
+				|| neighborSide == IPositionConstants.CENTER);
+		// bounds, transposed
+		Transposer t = new Transposer(!PlacementUtils.isHorizontalSide(side));
+		Rectangle widgetBounds = t.t(widget.getModelBounds().getCopy());
+		Rectangle neighborBounds = t.t(neighborWidget.getModelBounds().getCopy());
+		// points
+		int x1 =
+				PlacementUtils.isTrailingSide(neighborSide) ? neighborBounds.right() : neighborBounds.x;
+		int x2 = PlacementUtils.isTrailingSide(side) ? widgetBounds.right() : widgetBounds.x;
+		int y = widgetBounds.getLeft().y;
+		Point p2 = t.t(new Point(x1, y));
+		Point p1 = t.t(new Point(x2, y));
+		// draw the main line
+		addLineFeedback(p1, p2, PlacementUtils.isHorizontalSide(side));
+		// draw the helper line
+		int lineStartY = widgetBounds.y > neighborBounds.y ? neighborBounds.y : widgetBounds.y;
+		int lineEndY =
+				widgetBounds.bottom() < neighborBounds.bottom()
+				? neighborBounds.bottom()
+						: widgetBounds.bottom();
+		Point p3 = t.t(new Point(x1, lineStartY));
+		Point p4 = t.t(new Point(x1, lineEndY));
+		// convert to feedback
+		PolicyUtils.translateModelToFeedback(this, p3);
+		PolicyUtils.translateModelToFeedback(this, p4);
+		addSimpleLineFeedback(p3, p4);
+	}
 
-  private void addFeedbackToParent(IAbstractComponentInfo widget, int side) {
-    IAbstractComponentInfo parent = (IAbstractComponentInfo) widget.getParent();
-    // bounds, transposed
-    Transposer t = new Transposer(!PlacementUtils.isHorizontalSide(side));
-    Dimension parentSize = t.t(getParentSize(parent));
-    Rectangle widgetBounds = t.t(widget.getModelBounds().getCopy());
-    // points
-    int x1 = PlacementUtils.isTrailingSide(side) ? parentSize.width : 0;
-    int x2 = PlacementUtils.isTrailingSide(side) ? widgetBounds.right() : widgetBounds.x;
-    int y = widgetBounds.getLeft().y;
-    Point p2 = t.t(new Point(x1, y));
-    Point p1 = t.t(new Point(x2, y));
-    // draw
-    addLineFeedback(p1, p2, PlacementUtils.isHorizontalSide(side));
-  }
+	private void addFeedbackToParent(IAbstractComponentInfo widget, int side) {
+		IAbstractComponentInfo parent = (IAbstractComponentInfo) widget.getParent();
+		// bounds, transposed
+		Transposer t = new Transposer(!PlacementUtils.isHorizontalSide(side));
+		Dimension parentSize = t.t(getParentSize(parent));
+		Rectangle widgetBounds = t.t(widget.getModelBounds().getCopy());
+		// points
+		int x1 = PlacementUtils.isTrailingSide(side) ? parentSize.width : 0;
+		int x2 = PlacementUtils.isTrailingSide(side) ? widgetBounds.right() : widgetBounds.x;
+		int y = widgetBounds.getLeft().y;
+		Point p2 = t.t(new Point(x1, y));
+		Point p1 = t.t(new Point(x2, y));
+		// draw
+		addLineFeedback(p1, p2, PlacementUtils.isHorizontalSide(side));
+	}
 
-  private void addLineFeedback(Point p1, Point p2, boolean isHorizontal) {
-    // convert to feedback
-    PolicyUtils.translateModelToFeedback(this, p1);
-    PolicyUtils.translateModelToFeedback(this, p2);
-    addSimpleLineFeedback(p1, p2);
-    // don't draw line end while line length is less than 3 (default LineEndFigure radius).
-    Transposer t = new Transposer(!isHorizontal);
-    p1 = t.t(p1);
-    p2 = t.t(p2);
-    if (Math.abs(p2.x - p1.x) > LineEndFigure.RADIUS) {
-      addLineEndFeedback(t.t(p2), isHorizontal, p2.x > p1.x);
-    }
-  }
+	private void addLineFeedback(Point p1, Point p2, boolean isHorizontal) {
+		// convert to feedback
+		PolicyUtils.translateModelToFeedback(this, p1);
+		PolicyUtils.translateModelToFeedback(this, p2);
+		addSimpleLineFeedback(p1, p2);
+		// don't draw line end while line length is less than 3 (default LineEndFigure radius).
+		Transposer t = new Transposer(!isHorizontal);
+		p1 = t.t(p1);
+		p2 = t.t(p2);
+		if (Math.abs(p2.x - p1.x) > LineEndFigure.RADIUS) {
+			addLineEndFeedback(t.t(p2), isHorizontal, p2.x > p1.x);
+		}
+	}
 
-  private void addSimpleLineFeedback(Point begin, Point end) {
-    Polyline line = new Polyline();
-    line.addPoint(begin);
-    line.addPoint(end);
-    line.setForeground(AbsolutePolicyUtils.COLOR_FEEDBACK);
-    line.setLineStyle(SWT.LINE_DASH);
-    addMyFeedback(line);
-  }
+	private void addSimpleLineFeedback(Point begin, Point end) {
+		Polyline line = new Polyline();
+		line.addPoint(begin);
+		line.addPoint(end);
+		line.setForeground(AbsolutePolicyUtils.COLOR_FEEDBACK);
+		line.setLineStyle(SWT.LINE_DASH);
+		addMyFeedback(line);
+	}
 
-  private void addLineEndFeedback(Point point, boolean isHorizontal, boolean isTrailing) {
-    int alignment;
-    if (isHorizontal) {
-      alignment = isTrailing ? IPositionConstants.RIGHT : IPositionConstants.LEFT;
-    } else {
-      alignment = isTrailing ? IPositionConstants.BOTTOM : IPositionConstants.TOP;
-    }
-    LineEndFigure lineEndFigure = new LineEndFigure(alignment, AbsolutePolicyUtils.COLOR_FEEDBACK);
-    addMyFeedback(lineEndFigure);
-    Dimension size = lineEndFigure.getSize();
-    lineEndFigure.setLocation(new Point(point.x - size.width / 2, point.y - size.height / 2));
-  }
+	private void addLineEndFeedback(Point point, boolean isHorizontal, boolean isTrailing) {
+		int alignment;
+		if (isHorizontal) {
+			alignment = isTrailing ? IPositionConstants.RIGHT : IPositionConstants.LEFT;
+		} else {
+			alignment = isTrailing ? IPositionConstants.BOTTOM : IPositionConstants.TOP;
+		}
+		LineEndFigure lineEndFigure = new LineEndFigure(alignment, AbsolutePolicyUtils.COLOR_FEEDBACK);
+		addMyFeedback(lineEndFigure);
+		Dimension size = lineEndFigure.getSize();
+		lineEndFigure.setLocation(new Point(point.x - size.width / 2, point.y - size.height / 2));
+	}
 
-  private void addMyFeedback(Figure figure) {
-    getFeedbacks().add(figure);
-    // add feedback
-    getLayer(IEditPartViewer.HANDLE_LAYER_SUB_2).add(figure);
-  }
+	private void addMyFeedback(Figure figure) {
+		getFeedbacks().add(figure);
+		// add feedback
+		getLayer(IEditPartViewer.HANDLE_LAYER_SUB_2).add(figure);
+	}
 
-  private List<Figure> getFeedbacks() {
-    if (m_feedbacks == null) {
-      m_feedbacks = Lists.newArrayList();
-    }
-    return m_feedbacks;
-  }
+	private List<Figure> getFeedbacks() {
+		if (m_feedbacks == null) {
+			m_feedbacks = Lists.newArrayList();
+		}
+		return m_feedbacks;
+	}
 
-  /**
-   * @return the alignment figure for given component and axis.
-   */
-  protected Figure createAlignmentFigure(final IAbstractComponentInfo widget,
-      final boolean isHorizontal) {
-    IEditPartViewer viewer = getHost().getViewer();
-    return isHorizontal
-        ? new HorizontalPopupFigure(viewer, widget)
-        : new VerticalPopupFigure(viewer, widget);
-  }
+	/**
+	 * @return the alignment figure for given component and axis.
+	 */
+	protected Figure createAlignmentFigure(final IAbstractComponentInfo widget,
+			final boolean isHorizontal) {
+		IEditPartViewer viewer = getHost().getViewer();
+		return isHorizontal
+				? new HorizontalPopupFigure(viewer, widget)
+						: new VerticalPopupFigure(viewer, widget);
+	}
 
-  /**
-   * Shows alignment figures for host {@link EditPart} and its siblings.
-   */
-  public final void showAlignmentFigures() {
-    if (m_alignmentFigures == null) {
-      m_alignmentFigures = Lists.newArrayList();
-      // show cell figures for all children of host's parent
-      {
-        Collection<EditPart> editParts = getHost().getParent().getChildren();
-        for (EditPart editPart : editParts) {
-          showAlignmentFigures(editPart);
-        }
-      }
-    }
-  }
+	/**
+	 * Shows alignment figures for host {@link EditPart} and its siblings.
+	 */
+	public final void showAlignmentFigures() {
+		if (m_alignmentFigures == null) {
+			m_alignmentFigures = Lists.newArrayList();
+			// show cell figures for all children of host's parent
+			{
+				Collection<EditPart> editParts = getHost().getParent().getChildren();
+				for (EditPart editPart : editParts) {
+					showAlignmentFigures(editPart);
+				}
+			}
+		}
+	}
 
-  /**
-   * Hides alignment figures for this host and its siblings.
-   */
-  public final void hideAlignmentFigures() {
-    if (m_alignmentFigures != null) {
-      for (Figure figure : m_alignmentFigures) {
-        figure.getParent().remove(figure);
-      }
-      m_alignmentFigures = null;
-    }
-  }
+	/**
+	 * Hides alignment figures for this host and its siblings.
+	 */
+	public final void hideAlignmentFigures() {
+		if (m_alignmentFigures != null) {
+			for (Figure figure : m_alignmentFigures) {
+				figure.getParent().remove(figure);
+			}
+			m_alignmentFigures = null;
+		}
+	}
 
-  /**
-   * Shows all possible alignment figures for given edit part.
-   */
-  private void showAlignmentFigures(EditPart editPart) {
-    // check model
-    IAbstractComponentInfo widget;
-    {
-      Object model = editPart.getModel();
-      if (!(model instanceof IAbstractComponentInfo)) {
-        return;
-      }
-      widget = (IAbstractComponentInfo) model;
-    }
-    // check if we can show alignment figures for this control
-    {
-      String showFiguresString = null;
-      if (!LayoutPolicyUtils.shouldShowSideFigures(showFiguresString, editPart)) {
-        return;
-      }
-    }
-    // show alignment figures
-    {
-      int offset = INITIAL_RIGHT_SPACE;
-      {
-        Figure horizontalFigure = createAlignmentFigure(widget, true);
-        if (horizontalFigure != null) {
-          offset += horizontalFigure.getSize().width;
-          addAlignmentFigure(widget, horizontalFigure, offset);
-          offset += FIGURES_SPACE;
-        }
-      }
-      {
-        Figure verticalFigure = createAlignmentFigure(widget, false);
-        if (verticalFigure != null) {
-          offset += verticalFigure.getSize().width;
-          addAlignmentFigure(widget, verticalFigure, offset);
-          offset += FIGURES_SPACE;
-        }
-      }
-    }
-  }
+	/**
+	 * Shows all possible alignment figures for given edit part.
+	 */
+	private void showAlignmentFigures(EditPart editPart) {
+		// check model
+		IAbstractComponentInfo widget;
+		{
+			Object model = editPart.getModel();
+			if (!(model instanceof IAbstractComponentInfo)) {
+				return;
+			}
+			widget = (IAbstractComponentInfo) model;
+		}
+		// check if we can show alignment figures for this control
+		{
+			String showFiguresString = null;
+			if (!LayoutPolicyUtils.shouldShowSideFigures(showFiguresString, editPart)) {
+				return;
+			}
+		}
+		// show alignment figures
+		{
+			int offset = INITIAL_RIGHT_SPACE;
+			{
+				Figure horizontalFigure = createAlignmentFigure(widget, true);
+				if (horizontalFigure != null) {
+					offset += horizontalFigure.getSize().width;
+					addAlignmentFigure(widget, horizontalFigure, offset);
+					offset += FIGURES_SPACE;
+				}
+			}
+			{
+				Figure verticalFigure = createAlignmentFigure(widget, false);
+				if (verticalFigure != null) {
+					offset += verticalFigure.getSize().width;
+					addAlignmentFigure(widget, verticalFigure, offset);
+					offset += FIGURES_SPACE;
+				}
+			}
+		}
+	}
 
-  /**
-   * Adds alignment figure at given offset from right side of component's cells.
-   */
-  private void addAlignmentFigure(IAbstractComponentInfo component, Figure figure, int offset) {
-    Figure layer = getLayer(IEditPartViewer.CLICKABLE_LAYER);
-    // prepare rectangle for cells used by component (in layer coordinates)
-    Rectangle cellRect;
-    {
-      cellRect = component.getModelBounds().getCopy();
-      PolicyUtils.translateModelToFeedback(this, cellRect);
-    }
-    // prepare location and size
-    Point figureLocation;
-    {
-      Dimension figureSize = figure.getSize();
-      figureLocation = new Point(cellRect.right() - offset, cellRect.y - figureSize.height / 2);
-      if (figureLocation.x < cellRect.x + MIN_LEFT_SPACE) {
-        return;
-      }
-    }
-    // add alignment figure
-    layer.add(figure);
-    figure.setLocation(figureLocation);
-    m_alignmentFigures.add(figure);
-  }
+	/**
+	 * Adds alignment figure at given offset from right side of component's cells.
+	 */
+	private void addAlignmentFigure(IAbstractComponentInfo component, Figure figure, int offset) {
+		Figure layer = getLayer(IEditPartViewer.CLICKABLE_LAYER);
+		// prepare rectangle for cells used by component (in layer coordinates)
+		Rectangle cellRect;
+		{
+			cellRect = component.getModelBounds().getCopy();
+			PolicyUtils.translateModelToFeedback(this, cellRect);
+		}
+		// prepare location and size
+		Point figureLocation;
+		{
+			Dimension figureSize = figure.getSize();
+			figureLocation = new Point(cellRect.right() - offset, cellRect.y - figureSize.height / 2);
+			if (figureLocation.x < cellRect.x + MIN_LEFT_SPACE) {
+				return;
+			}
+		}
+		// add alignment figure
+		layer.add(figure);
+		figure.setLocation(figureLocation);
+		m_alignmentFigures.add(figure);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Helper
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected boolean isAttached(final IAbstractComponentInfo widget, final int side) {
-    return ExecutionUtils.runObject(new RunnableObjectEx<Boolean>() {
-      @Override
-      public Boolean runObject() throws Exception {
-        return m_layout.isAttached(widget, side);
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Helper
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected boolean isAttached(final IAbstractComponentInfo widget, final int side) {
+		return ExecutionUtils.runObject(new RunnableObjectEx<Boolean>() {
+			@Override
+			public Boolean runObject() throws Exception {
+				return m_layout.isAttached(widget, side);
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Popup figures
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected class HorizontalPopupFigure extends AbstractPopupFigure {
-    private final IAbstractComponentInfo m_widget;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Popup figures
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected class HorizontalPopupFigure extends AbstractPopupFigure {
+		private final IAbstractComponentInfo m_widget;
 
-    protected HorizontalPopupFigure(IEditPartViewer viewer, IAbstractComponentInfo widget) {
-      super(viewer, 9, 5);
-      m_widget = widget;
-    }
+		protected HorizontalPopupFigure(IEditPartViewer viewer, IAbstractComponentInfo widget) {
+			super(viewer, 9, 5);
+			m_widget = widget;
+		}
 
-    @Override
-    protected Image getImage() {
-      boolean isLeftAttached = isAttached(m_widget, IPositionConstants.LEFT);
-      boolean isRightAttached = isAttached(m_widget, IPositionConstants.RIGHT);
-      if (isLeftAttached && isRightAttached) {
-        return getActionImage("h/both.gif");
-      } else if (isRightAttached) {
-        return getActionImage("h/right.gif");
-      } else {
-        return getActionImage("h/left.gif");
-      }
-    }
+		@Override
+		protected Image getImage() {
+			boolean isLeftAttached = isAttached(m_widget, IPositionConstants.LEFT);
+			boolean isRightAttached = isAttached(m_widget, IPositionConstants.RIGHT);
+			if (isLeftAttached && isRightAttached) {
+				return getActionImage("h/both.gif");
+			} else if (isRightAttached) {
+				return getActionImage("h/right.gif");
+			} else {
+				return getActionImage("h/left.gif");
+			}
+		}
 
-    @Override
-    protected void fillMenu(IMenuManager manager) {
-      new AnchorsActionsSupport(getPlacementsSupport(), AbsoluteComplexSelectionEditPolicy.this).fillAnchorsActions(
-          manager,
-          m_widget,
-          true);
-    }
-  }
-  protected class VerticalPopupFigure extends AbstractPopupFigure {
-    private final IAbstractComponentInfo m_widget;
+		@Override
+		protected void fillMenu(IMenuManager manager) {
+			new AnchorsActionsSupport(getPlacementsSupport(), AbsoluteComplexSelectionEditPolicy.this).fillAnchorsActions(
+					manager,
+					m_widget,
+					true);
+		}
+	}
+	protected class VerticalPopupFigure extends AbstractPopupFigure {
+		private final IAbstractComponentInfo m_widget;
 
-    protected VerticalPopupFigure(IEditPartViewer viewer, IAbstractComponentInfo widget) {
-      super(viewer, 5, 9);
-      m_widget = widget;
-    }
+		protected VerticalPopupFigure(IEditPartViewer viewer, IAbstractComponentInfo widget) {
+			super(viewer, 5, 9);
+			m_widget = widget;
+		}
 
-    @Override
-    protected Image getImage() {
-      boolean isTopAttached = isAttached(m_widget, IPositionConstants.TOP);
-      boolean isBottomAttached = isAttached(m_widget, IPositionConstants.BOTTOM);
-      if (isTopAttached && isBottomAttached) {
-        return getActionImage("v/both.gif");
-      } else if (isBottomAttached) {
-        return getActionImage("v/bottom.gif");
-      } else {
-        return getActionImage("v/top.gif");
-      }
-    }
+		@Override
+		protected Image getImage() {
+			boolean isTopAttached = isAttached(m_widget, IPositionConstants.TOP);
+			boolean isBottomAttached = isAttached(m_widget, IPositionConstants.BOTTOM);
+			if (isTopAttached && isBottomAttached) {
+				return getActionImage("v/both.gif");
+			} else if (isBottomAttached) {
+				return getActionImage("v/bottom.gif");
+			} else {
+				return getActionImage("v/top.gif");
+			}
+		}
 
-    @Override
-    protected void fillMenu(IMenuManager manager) {
-      new AnchorsActionsSupport(getPlacementsSupport(), AbsoluteComplexSelectionEditPolicy.this).fillAnchorsActions(
-          manager,
-          m_widget,
-          false);
-    }
-  }
+		@Override
+		protected void fillMenu(IMenuManager manager) {
+			new AnchorsActionsSupport(getPlacementsSupport(), AbsoluteComplexSelectionEditPolicy.this).fillAnchorsActions(
+					manager,
+					m_widget,
+					false);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Abstract
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected abstract ComponentAttachmentInfo getComponentAttachmentInfo(IAbstractComponentInfo widget,
-      int side) throws Exception;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Abstract
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected abstract ComponentAttachmentInfo getComponentAttachmentInfo(IAbstractComponentInfo widget,
+			int side) throws Exception;
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/layout/absolute/AbsoluteLayoutSelectionEditPolicy.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/layout/absolute/AbsoluteLayoutSelectionEditPolicy.java
index 0fc5a2ea7..8e4300b00 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/layout/absolute/AbsoluteLayoutSelectionEditPolicy.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/layout/absolute/AbsoluteLayoutSelectionEditPolicy.java
@@ -19,7 +19,7 @@
  * @coverage core.gef.policy
  */
 public class AbsoluteLayoutSelectionEditPolicy<C extends IAbstractComponentInfo>
-    extends
-      AbsoluteBasedSelectionEditPolicy<C> {
-  // nothing here
+extends
+AbsoluteBasedSelectionEditPolicy<C> {
+	// nothing here
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/layout/absolute/AbsolutePolicyUtils.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/layout/absolute/AbsolutePolicyUtils.java
index f4396ee65..7216ef795 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/layout/absolute/AbsolutePolicyUtils.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/layout/absolute/AbsolutePolicyUtils.java
@@ -21,21 +21,21 @@
  * @coverage core.gef.policy
  */
 public final class AbsolutePolicyUtils {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constants
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final Color COLOR_FEEDBACK = IColorConstants.lightBlue;
-  public static final Color COLOR_OUTLINE = IColorConstants.orange;
-  public static final int DEFAULT_COMPONENT_GAP = 6;
-  public static final int DEFAULT_CONTAINER_GAP = 6;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constants
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final Color COLOR_FEEDBACK = IColorConstants.lightBlue;
+	public static final Color COLOR_OUTLINE = IColorConstants.orange;
+	public static final int DEFAULT_COMPONENT_GAP = 6;
+	public static final int DEFAULT_CONTAINER_GAP = 6;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Private constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private AbsolutePolicyUtils() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Private constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private AbsolutePolicyUtils() {
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/layout/absolute/DotsFeedback.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/layout/absolute/DotsFeedback.java
index 192bf4aef..efc1b92ea 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/layout/absolute/DotsFeedback.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/layout/absolute/DotsFeedback.java
@@ -25,47 +25,47 @@
  * @coverage core.gef.policy
  */
 public class DotsFeedback<C extends IAbstractComponentInfo> extends Figure {
-  private final AbsoluteBasedLayoutEditPolicy<C> m_layoutEditPolicy;
+	private final AbsoluteBasedLayoutEditPolicy<C> m_layoutEditPolicy;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DotsFeedback(AbsoluteBasedLayoutEditPolicy<C> layoutEditPolicy, Figure hostFigure) {
-    m_layoutEditPolicy = layoutEditPolicy;
-    // prepare bounds to draw on client-area only
-    Rectangle bounds = hostFigure.getBounds().getCopy();
-    FigureUtils.translateFigureToAbsolute(hostFigure, bounds);
-    IAbstractComponentInfo container =
-        (IAbstractComponentInfo) layoutEditPolicy.getHost().getModel();
-    bounds.crop(container.getClientAreaInsets());
-    // set bounds
-    setBounds(bounds);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DotsFeedback(AbsoluteBasedLayoutEditPolicy<C> layoutEditPolicy, Figure hostFigure) {
+		m_layoutEditPolicy = layoutEditPolicy;
+		// prepare bounds to draw on client-area only
+		Rectangle bounds = hostFigure.getBounds().getCopy();
+		FigureUtils.translateFigureToAbsolute(hostFigure, bounds);
+		IAbstractComponentInfo container =
+				(IAbstractComponentInfo) layoutEditPolicy.getHost().getModel();
+		bounds.crop(container.getClientAreaInsets());
+		// set bounds
+		setBounds(bounds);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Paint
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void paintClientArea(Graphics graphics) {
-    // paint dots if needed
-    if (m_layoutEditPolicy.isShowGridFeedback()) {
-      Rectangle r = getClientArea();
-      int gridStepX = m_layoutEditPolicy.getGridStepX();
-      int gridStepY = m_layoutEditPolicy.getGridStepY();
-      // paint dots
-      int x = r.x;
-      for (int i = 0; i < r.width / gridStepX; i++) {
-        int y = r.y;
-        for (int j = 0; j < r.height / gridStepY; j++) {
-          graphics.drawPoint(x, y);
-          y += gridStepY;
-        }
-        x += gridStepX;
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Paint
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void paintClientArea(Graphics graphics) {
+		// paint dots if needed
+		if (m_layoutEditPolicy.isShowGridFeedback()) {
+			Rectangle r = getClientArea();
+			int gridStepX = m_layoutEditPolicy.getGridStepX();
+			int gridStepY = m_layoutEditPolicy.getGridStepY();
+			// paint dots
+			int x = r.x;
+			for (int i = 0; i < r.width / gridStepX; i++) {
+				int y = r.y;
+				for (int j = 0; j < r.height / gridStepY; j++) {
+					graphics.drawPoint(x, y);
+					y += gridStepY;
+				}
+				x += gridStepX;
+			}
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/layout/absolute/KeyboardMovingLayoutEditPolicy.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/layout/absolute/KeyboardMovingLayoutEditPolicy.java
index 75cc662b0..aa9fbc522 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/layout/absolute/KeyboardMovingLayoutEditPolicy.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/layout/absolute/KeyboardMovingLayoutEditPolicy.java
@@ -38,192 +38,192 @@
  * @coverage core.gef.policy
  */
 public abstract class KeyboardMovingLayoutEditPolicy extends LayoutEditPolicy {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // KeyRequest
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void performRequest(Request request) {
-    if (request instanceof KeyRequest) {
-      KeyRequest keyRequest = (KeyRequest) request;
-      // check input
-      switch (keyRequest.getKeyCode()) {
-        case SWT.ARROW_UP :
-        case SWT.ARROW_DOWN :
-        case SWT.ARROW_LEFT :
-        case SWT.ARROW_RIGHT :
-          break;
-        default :
-          return;
-      }
-      List<EditPart> editParts = ToolUtilities.getSelectionWithoutDependants(getViewer());
-      // check selection
-      if (!editParts.isEmpty()) {
-        for (EditPart editPart : editParts) {
-          if (getHost() == editPart) {
-            return;
-          }
-        }
-        if (keyRequest.isPressed()) {
-          handleKeyPressed(keyRequest, editParts);
-        } else {
-          handleKeyReleased();
-        }
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// KeyRequest
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void performRequest(Request request) {
+		if (request instanceof KeyRequest) {
+			KeyRequest keyRequest = (KeyRequest) request;
+			// check input
+			switch (keyRequest.getKeyCode()) {
+			case SWT.ARROW_UP :
+			case SWT.ARROW_DOWN :
+			case SWT.ARROW_LEFT :
+			case SWT.ARROW_RIGHT :
+				break;
+			default :
+				return;
+			}
+			List<EditPart> editParts = ToolUtilities.getSelectionWithoutDependants(getViewer());
+			// check selection
+			if (!editParts.isEmpty()) {
+				for (EditPart editPart : editParts) {
+					if (getHost() == editPart) {
+						return;
+					}
+				}
+				if (keyRequest.isPressed()) {
+					handleKeyPressed(keyRequest, editParts);
+				} else {
+					handleKeyReleased();
+				}
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // High-Level handle KeyEvent
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final ChangeBoundsRequest m_changeBoundsRequest = new ChangeBoundsRequest();
-  private Timer m_keyDragTimer;
-  private boolean m_isKeyboardMoving;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// High-Level handle KeyEvent
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final ChangeBoundsRequest m_changeBoundsRequest = new ChangeBoundsRequest();
+	private Timer m_keyDragTimer;
+	private boolean m_isKeyboardMoving;
 
-  /**
-   * Key pressed handler, generating GEF change bounds request
-   */
-  private void handleKeyPressed(KeyRequest request, List<EditPart> editParts) {
-    synchronized (m_changeBoundsRequest) {
-      if (m_keyDragTimer != null) {
-        return;
-      }
-      m_isKeyboardMoving = true;
-      // fill request
-      boolean isResizing = request.isControlKeyPressed();
-      m_changeBoundsRequest.setEditParts(editParts);
-      m_changeBoundsRequest.setType(isResizing ? getResizeRequestType() : Request.REQ_MOVE);
-      //
-      if (isResizing) {
-        int resizeDirection = m_changeBoundsRequest.getResizeDirection();
-        Dimension sizeDelta = m_changeBoundsRequest.getSizeDelta();
-        // calc resize delta and direction
-        switch (request.getKeyCode()) {
-          case SWT.ARROW_UP :
-            sizeDelta.height--;
-            resizeDirection |= IPositionConstants.NORTH_SOUTH;
-            break;
-          case SWT.ARROW_DOWN :
-            sizeDelta.height++;
-            resizeDirection |= IPositionConstants.NORTH_SOUTH;
-            break;
-          case SWT.ARROW_LEFT :
-            sizeDelta.width--;
-            resizeDirection |= IPositionConstants.EAST_WEST;
-            break;
-          case SWT.ARROW_RIGHT :
-            sizeDelta.width++;
-            resizeDirection |= IPositionConstants.EAST_WEST;
-            break;
-        }
-        m_changeBoundsRequest.setResizeDirection(resizeDirection);
-        // handle feedback
-        for (EditPart resizePart : editParts) {
-          resizePart.showSourceFeedback(m_changeBoundsRequest);
-        }
-      } else {
-        Point moveDelta = m_changeBoundsRequest.getMoveDelta();
-        // calc move delta
-        switch (request.getKeyCode()) {
-          case SWT.ARROW_UP :
-            moveDelta.y--;
-            break;
-          case SWT.ARROW_DOWN :
-            moveDelta.y++;
-            break;
-          case SWT.ARROW_LEFT :
-            moveDelta.x--;
-            break;
-          case SWT.ARROW_RIGHT :
-            moveDelta.x++;
-            break;
-        }
-        // handle feedback
-        showLayoutTargetFeedback(m_changeBoundsRequest);
-      }
-    }
-  }
+	/**
+	 * Key pressed handler, generating GEF change bounds request
+	 */
+	private void handleKeyPressed(KeyRequest request, List<EditPart> editParts) {
+		synchronized (m_changeBoundsRequest) {
+			if (m_keyDragTimer != null) {
+				return;
+			}
+			m_isKeyboardMoving = true;
+			// fill request
+			boolean isResizing = request.isControlKeyPressed();
+			m_changeBoundsRequest.setEditParts(editParts);
+			m_changeBoundsRequest.setType(isResizing ? getResizeRequestType() : Request.REQ_MOVE);
+			//
+			if (isResizing) {
+				int resizeDirection = m_changeBoundsRequest.getResizeDirection();
+				Dimension sizeDelta = m_changeBoundsRequest.getSizeDelta();
+				// calc resize delta and direction
+				switch (request.getKeyCode()) {
+				case SWT.ARROW_UP :
+					sizeDelta.height--;
+					resizeDirection |= IPositionConstants.NORTH_SOUTH;
+					break;
+				case SWT.ARROW_DOWN :
+					sizeDelta.height++;
+					resizeDirection |= IPositionConstants.NORTH_SOUTH;
+					break;
+				case SWT.ARROW_LEFT :
+					sizeDelta.width--;
+					resizeDirection |= IPositionConstants.EAST_WEST;
+					break;
+				case SWT.ARROW_RIGHT :
+					sizeDelta.width++;
+					resizeDirection |= IPositionConstants.EAST_WEST;
+					break;
+				}
+				m_changeBoundsRequest.setResizeDirection(resizeDirection);
+				// handle feedback
+				for (EditPart resizePart : editParts) {
+					resizePart.showSourceFeedback(m_changeBoundsRequest);
+				}
+			} else {
+				Point moveDelta = m_changeBoundsRequest.getMoveDelta();
+				// calc move delta
+				switch (request.getKeyCode()) {
+				case SWT.ARROW_UP :
+					moveDelta.y--;
+					break;
+				case SWT.ARROW_DOWN :
+					moveDelta.y++;
+					break;
+				case SWT.ARROW_LEFT :
+					moveDelta.x--;
+					break;
+				case SWT.ARROW_RIGHT :
+					moveDelta.x++;
+					break;
+				}
+				// handle feedback
+				showLayoutTargetFeedback(m_changeBoundsRequest);
+			}
+		}
+	}
 
-  /**
-   * Key released handler, which generates command after 300ms of key released
-   */
-  private void handleKeyReleased() {
-    if (!m_isKeyboardMoving) {
-      // previous 'keypressed' request was cancelled, so cancel 'release' too.
-      return;
-    }
-    // start drag timer
-    if (m_keyDragTimer == null) {
-      m_keyDragTimer = new Timer();
-      m_keyDragTimer.schedule(new TimerTask() {
-        @Override
-        public void run() {
-          Display display = getViewer().getControl().getDisplay();
-          display.syncExec(new Runnable() {
-            @Override
-            public void run() {
-              synchronized (m_changeBoundsRequest) {
-                try {
-                  List<EditPart> editParts = m_changeBoundsRequest.getEditParts();
-                  //
-                  if (editParts != null && !editParts.isEmpty()) {
-                    // Create command
-                    CompoundEditCommand command =
-                        new CompoundEditCommand((ObjectInfo) getHost().getModel());
-                    //
-                    if (Request.REQ_MOVE.equals(m_changeBoundsRequest.getType())) {
-                      eraseLayoutTargetFeedback(m_changeBoundsRequest);
-                      command.add(getCommand(m_changeBoundsRequest));
-                    } else {
-                      for (EditPart part : editParts) {
-                        part.eraseSourceFeedback(m_changeBoundsRequest);
-                        command.add(part.getCommand(m_changeBoundsRequest));
-                      }
-                    }
-                    // run command
-                    getViewer().getEditDomain().executeCommand(command);
-                  }
-                } finally {
-                  m_isKeyboardMoving = false;
-                  m_keyDragTimer = null;
-                  // clear request
-                  m_changeBoundsRequest.setMoveDelta(new Point());
-                  m_changeBoundsRequest.setSizeDelta(new Dimension());
-                  m_changeBoundsRequest.setResizeDirection(IPositionConstants.NONE);
-                }
-              }
-            }
-          });
-        }
-      },
-          300);
-    }
-  }
+	/**
+	 * Key released handler, which generates command after 300ms of key released
+	 */
+	private void handleKeyReleased() {
+		if (!m_isKeyboardMoving) {
+			// previous 'keypressed' request was cancelled, so cancel 'release' too.
+			return;
+		}
+		// start drag timer
+		if (m_keyDragTimer == null) {
+			m_keyDragTimer = new Timer();
+			m_keyDragTimer.schedule(new TimerTask() {
+				@Override
+				public void run() {
+					Display display = getViewer().getControl().getDisplay();
+					display.syncExec(new Runnable() {
+						@Override
+						public void run() {
+							synchronized (m_changeBoundsRequest) {
+								try {
+									List<EditPart> editParts = m_changeBoundsRequest.getEditParts();
+									//
+									if (editParts != null && !editParts.isEmpty()) {
+										// Create command
+										CompoundEditCommand command =
+												new CompoundEditCommand((ObjectInfo) getHost().getModel());
+										//
+										if (Request.REQ_MOVE.equals(m_changeBoundsRequest.getType())) {
+											eraseLayoutTargetFeedback(m_changeBoundsRequest);
+											command.add(getCommand(m_changeBoundsRequest));
+										} else {
+											for (EditPart part : editParts) {
+												part.eraseSourceFeedback(m_changeBoundsRequest);
+												command.add(part.getCommand(m_changeBoundsRequest));
+											}
+										}
+										// run command
+										getViewer().getEditDomain().executeCommand(command);
+									}
+								} finally {
+									m_isKeyboardMoving = false;
+									m_keyDragTimer = null;
+									// clear request
+									m_changeBoundsRequest.setMoveDelta(new Point());
+									m_changeBoundsRequest.setSizeDelta(new Dimension());
+									m_changeBoundsRequest.setResizeDirection(IPositionConstants.NONE);
+								}
+							}
+						}
+					});
+				}
+			},
+					300);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Convenience method for returning the <code>{@link IEditPartViewer}</code> for this host.
-   */
-  protected final IEditPartViewer getViewer() {
-    return getHost().getViewer();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Convenience method for returning the <code>{@link IEditPartViewer}</code> for this host.
+	 */
+	protected final IEditPartViewer getViewer() {
+		return getHost().getViewer();
+	}
 
-  /**
-   * @return <code>true</code> if work key move/resize process.
-   */
-  protected final boolean isKeyboardMoving() {
-    return m_isKeyboardMoving;
-  }
+	/**
+	 * @return <code>true</code> if work key move/resize process.
+	 */
+	protected final boolean isKeyboardMoving() {
+		return m_isKeyboardMoving;
+	}
 
-  /**
-   * @return {@link Request} type association with resize.
-   */
-  protected abstract String getResizeRequestType();
+	/**
+	 * @return {@link Request} type association with resize.
+	 */
+	protected abstract String getResizeRequestType();
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/layout/absolute/LineEndFigure.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/layout/absolute/LineEndFigure.java
index c660caa29..4fc7d1ff0 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/layout/absolute/LineEndFigure.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/layout/absolute/LineEndFigure.java
@@ -25,49 +25,49 @@
  * @coverage core.gef.policy
  */
 public class LineEndFigure extends Figure {
-  public static final int RADIUS = 3;
-  private static final int FIGURE_SIZE = RADIUS * 2 + 1;
-  private final Color m_color;
-  private int m_startAngle;
-  private int m_lengthAngle;
+	public static final int RADIUS = 3;
+	private static final int FIGURE_SIZE = RADIUS * 2 + 1;
+	private final Color m_color;
+	private int m_startAngle;
+	private int m_lengthAngle;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public LineEndFigure(int alignment, Color color) {
-    m_color = color;
-    if (alignment == IPositionConstants.LEFT || alignment == IPositionConstants.RIGHT) {
-      m_startAngle = 90;
-    } else if (alignment == IPositionConstants.TOP || alignment == IPositionConstants.BOTTOM) {
-      m_startAngle = 0;
-    }
-    if (alignment == IPositionConstants.LEFT || alignment == IPositionConstants.TOP) {
-      m_lengthAngle = -180;
-    } else if (alignment == IPositionConstants.RIGHT || alignment == IPositionConstants.BOTTOM) {
-      m_lengthAngle = 180;
-    }
-    setSize(FIGURE_SIZE, FIGURE_SIZE);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public LineEndFigure(int alignment, Color color) {
+		m_color = color;
+		if (alignment == IPositionConstants.LEFT || alignment == IPositionConstants.RIGHT) {
+			m_startAngle = 90;
+		} else if (alignment == IPositionConstants.TOP || alignment == IPositionConstants.BOTTOM) {
+			m_startAngle = 0;
+		}
+		if (alignment == IPositionConstants.LEFT || alignment == IPositionConstants.TOP) {
+			m_lengthAngle = -180;
+		} else if (alignment == IPositionConstants.RIGHT || alignment == IPositionConstants.BOTTOM) {
+			m_lengthAngle = 180;
+		}
+		setSize(FIGURE_SIZE, FIGURE_SIZE);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Paint
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void paintClientArea(Graphics graphics) {
-    int oldAntialias = graphics.gc.getAntialias();
-    try {
-      graphics.gc.setAntialias(SWT.ON);
-      graphics.setForegroundColor(m_color);
-      graphics.setBackgroundColor(m_color);
-      graphics.setLineStyle(SWT.LINE_SOLID);
-      Rectangle clientArea = getClientArea();
-      graphics.fillArc(0, 0, clientArea.width, clientArea.height, m_startAngle, m_lengthAngle);
-    } finally {
-      graphics.gc.setAntialias(oldAntialias);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Paint
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void paintClientArea(Graphics graphics) {
+		int oldAntialias = graphics.gc.getAntialias();
+		try {
+			graphics.gc.setAntialias(SWT.ON);
+			graphics.setForegroundColor(m_color);
+			graphics.setBackgroundColor(m_color);
+			graphics.setLineStyle(SWT.LINE_SOLID);
+			Rectangle clientArea = getClientArea();
+			graphics.fillArc(0, 0, clientArea.width, clientArea.height, m_startAngle, m_lengthAngle);
+		} finally {
+			graphics.gc.setAntialias(oldAntialias);
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/layout/absolute/actions/AbstractAlignmentActionsSupport.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/layout/absolute/actions/AbstractAlignmentActionsSupport.java
index 3e3df9bea..7142972da 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/layout/absolute/actions/AbstractAlignmentActionsSupport.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/layout/absolute/actions/AbstractAlignmentActionsSupport.java
@@ -34,286 +34,286 @@
  * @coverage core.model.layout.absolute
  */
 public abstract class AbstractAlignmentActionsSupport<C extends IAbstractComponentInfo> {
-  // align horizontally
-  protected static final int ALIGN_H_LEFT = 1;
-  protected static final int ALIGN_H_CENTERS = 2;
-  protected static final int ALIGN_H_SPACE = 4;
-  protected static final int ALIGN_H_RIGHT = 5;
-  // align vertically
-  protected static final int ALIGN_V_TOP = 11;
-  protected static final int ALIGN_V_CENTERS = 12;
-  protected static final int ALIGN_V_SPACE = 14;
-  protected static final int ALIGN_V_BOTTOM = 15;
-  // replicate size
-  protected static final int ALIGN_WIDTH = 21;
-  protected static final int ALIGN_HEIGHT = 22;
-  // center the widget
-  protected static final int ALIGN_H_CENTER = 3;
-  protected static final int ALIGN_V_CENTER = 13;
-  // fields
-  protected List<C> m_components;
+	// align horizontally
+	protected static final int ALIGN_H_LEFT = 1;
+	protected static final int ALIGN_H_CENTERS = 2;
+	protected static final int ALIGN_H_SPACE = 4;
+	protected static final int ALIGN_H_RIGHT = 5;
+	// align vertically
+	protected static final int ALIGN_V_TOP = 11;
+	protected static final int ALIGN_V_CENTERS = 12;
+	protected static final int ALIGN_V_SPACE = 14;
+	protected static final int ALIGN_V_BOTTOM = 15;
+	// replicate size
+	protected static final int ALIGN_WIDTH = 21;
+	protected static final int ALIGN_HEIGHT = 22;
+	// center the widget
+	protected static final int ALIGN_H_CENTER = 3;
+	protected static final int ALIGN_V_CENTER = 13;
+	// fields
+	protected List<C> m_components;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ObjectEventListener
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Create selection actions for given objects.
-   */
-  @SuppressWarnings("unchecked")
-  public final void addAlignmentActions(List<ObjectInfo> objects, List<Object> actions) {
-    // check selection
-    {
-      // empty selection
-      if (objects.isEmpty()) {
-        return;
-      }
-      // target is not on our container
-      IAbstractComponentInfo layoutContainer = getLayoutContainer();
-      if (layoutContainer == null
-          || objects.get(0).getParent() != layoutContainer.getUnderlyingModel()) {
-        return;
-      }
-    }
-    // prepare components
-    m_components = Lists.newArrayList();
-    for (ObjectInfo object : objects) {
-      if (!isComponentInfo(object)) {
-        return;
-      }
-      m_components.add((C) object);
-    }
-    // selection should not include parent
-    {
-      Set<ObjectInfo> parents = Sets.newHashSet();
-      for (IAbstractComponentInfo component : m_components) {
-        parents.add(component.getParent());
-      }
-      for (ObjectInfo object : objects) {
-        if (parents.contains(object)) {
-          return;
-        }
-      }
-    }
-    // OK
-    fillActions(actions);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ObjectEventListener
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Create selection actions for given objects.
+	 */
+	@SuppressWarnings("unchecked")
+	public final void addAlignmentActions(List<ObjectInfo> objects, List<Object> actions) {
+		// check selection
+		{
+			// empty selection
+			if (objects.isEmpty()) {
+				return;
+			}
+			// target is not on our container
+			IAbstractComponentInfo layoutContainer = getLayoutContainer();
+			if (layoutContainer == null
+					|| objects.get(0).getParent() != layoutContainer.getUnderlyingModel()) {
+				return;
+			}
+		}
+		// prepare components
+		m_components = Lists.newArrayList();
+		for (ObjectInfo object : objects) {
+			if (!isComponentInfo(object)) {
+				return;
+			}
+			m_components.add((C) object);
+		}
+		// selection should not include parent
+		{
+			Set<ObjectInfo> parents = Sets.newHashSet();
+			for (IAbstractComponentInfo component : m_components) {
+				parents.add(component.getParent());
+			}
+			for (ObjectInfo object : objects) {
+				if (parents.contains(object)) {
+					return;
+				}
+			}
+		}
+		// OK
+		fillActions(actions);
+	}
 
-  /**
-   * Fill actions list.
-   */
-  protected void fillActions(List<Object> actions) {
-    addAlignmentActions(actions);
-    addSizeActions(actions);
-    addSpaceActions(actions);
-    addCenterInContainerActions(actions);
-  }
+	/**
+	 * Fill actions list.
+	 */
+	protected void fillActions(List<Object> actions) {
+		addAlignmentActions(actions);
+		addSizeActions(actions);
+		addSpaceActions(actions);
+		addCenterInContainerActions(actions);
+	}
 
-  protected void addAlignmentActions(List<Object> actions) {
-    // create horizontal actions
-    actions.add(new Separator());
-    actions.add(new SelectionAction("h_left",
-        GefMessages.AbstractAlignmentActionsSupport_alignLeft,
-        ALIGN_H_LEFT));
-    actions.add(new SelectionAction("h_centers",
-        GefMessages.AbstractAlignmentActionsSupport_alighHorizontalCenters,
-        ALIGN_H_CENTERS));
-    actions.add(new SelectionAction("h_right",
-        GefMessages.AbstractAlignmentActionsSupport_alignRight,
-        ALIGN_H_RIGHT));
-    // create vertical actions
-    actions.add(new Separator());
-    actions.add(new SelectionAction("v_top",
-        GefMessages.AbstractAlignmentActionsSupport_alignTop,
-        ALIGN_V_TOP));
-    actions.add(new SelectionAction("v_centers",
-        GefMessages.AbstractAlignmentActionsSupport_alignVerticalCenters,
-        ALIGN_V_CENTERS));
-    actions.add(new SelectionAction("v_bottom",
-        GefMessages.AbstractAlignmentActionsSupport_alignBottom,
-        ALIGN_V_BOTTOM));
-  }
+	protected void addAlignmentActions(List<Object> actions) {
+		// create horizontal actions
+		actions.add(new Separator());
+		actions.add(new SelectionAction("h_left",
+				GefMessages.AbstractAlignmentActionsSupport_alignLeft,
+				ALIGN_H_LEFT));
+		actions.add(new SelectionAction("h_centers",
+				GefMessages.AbstractAlignmentActionsSupport_alighHorizontalCenters,
+				ALIGN_H_CENTERS));
+		actions.add(new SelectionAction("h_right",
+				GefMessages.AbstractAlignmentActionsSupport_alignRight,
+				ALIGN_H_RIGHT));
+		// create vertical actions
+		actions.add(new Separator());
+		actions.add(new SelectionAction("v_top",
+				GefMessages.AbstractAlignmentActionsSupport_alignTop,
+				ALIGN_V_TOP));
+		actions.add(new SelectionAction("v_centers",
+				GefMessages.AbstractAlignmentActionsSupport_alignVerticalCenters,
+				ALIGN_V_CENTERS));
+		actions.add(new SelectionAction("v_bottom",
+				GefMessages.AbstractAlignmentActionsSupport_alignBottom,
+				ALIGN_V_BOTTOM));
+	}
 
-  protected void addSpaceActions(List<Object> actions) {
-    // create space actions
-    actions.add(new Separator());
-    actions.add(new SelectionAction("h_space",
-        GefMessages.AbstractAlignmentActionsSupport_spaceEquallyHorizontal,
-        ALIGN_H_SPACE));
-    actions.add(new SelectionAction("v_space",
-        GefMessages.AbstractAlignmentActionsSupport_spaceEquallyVertical,
-        ALIGN_V_SPACE));
-  }
+	protected void addSpaceActions(List<Object> actions) {
+		// create space actions
+		actions.add(new Separator());
+		actions.add(new SelectionAction("h_space",
+				GefMessages.AbstractAlignmentActionsSupport_spaceEquallyHorizontal,
+				ALIGN_H_SPACE));
+		actions.add(new SelectionAction("v_space",
+				GefMessages.AbstractAlignmentActionsSupport_spaceEquallyVertical,
+				ALIGN_V_SPACE));
+	}
 
-  protected void addSizeActions(List<Object> actions) {
-    // create size actions
-    actions.add(new Separator());
-    actions.add(new SelectionAction("width",
-        GefMessages.AbstractAlignmentActionsSupport_replicateWidth,
-        ALIGN_WIDTH));
-    actions.add(new SelectionAction("height",
-        GefMessages.AbstractAlignmentActionsSupport_replicateHeight,
-        ALIGN_HEIGHT));
-  }
+	protected void addSizeActions(List<Object> actions) {
+		// create size actions
+		actions.add(new Separator());
+		actions.add(new SelectionAction("width",
+				GefMessages.AbstractAlignmentActionsSupport_replicateWidth,
+				ALIGN_WIDTH));
+		actions.add(new SelectionAction("height",
+				GefMessages.AbstractAlignmentActionsSupport_replicateHeight,
+				ALIGN_HEIGHT));
+	}
 
-  protected void addCenterInContainerActions(List<Object> actions) {
-    // create center actions
-    actions.add(new Separator());
-    actions.add(new SelectionAction("h_center",
-        GefMessages.AbstractAlignmentActionsSupport_centerHorizontally,
-        ALIGN_H_CENTER));
-    actions.add(new SelectionAction("v_center",
-        GefMessages.AbstractAlignmentActionsSupport_centerVertically,
-        ALIGN_V_CENTER));
-  }
+	protected void addCenterInContainerActions(List<Object> actions) {
+		// create center actions
+		actions.add(new Separator());
+		actions.add(new SelectionAction("h_center",
+				GefMessages.AbstractAlignmentActionsSupport_centerHorizontally,
+				ALIGN_H_CENTER));
+		actions.add(new SelectionAction("v_center",
+				GefMessages.AbstractAlignmentActionsSupport_centerVertically,
+				ALIGN_V_CENTER));
+	}
 
-  /**
-   * @return <code>true</code> if given object is supported model.
-   */
-  protected abstract boolean isComponentInfo(ObjectInfo object);
+	/**
+	 * @return <code>true</code> if given object is supported model.
+	 */
+	protected abstract boolean isComponentInfo(ObjectInfo object);
 
-  /**
-   * @return <code>true</code> if given command supported for current selection.
-   */
-  protected final boolean isActionEnabled(int command) {
-    if (m_components.size() == 1) {
-      // for single selection support only set h/v center
-      return command == ALIGN_H_CENTER || command == ALIGN_V_CENTER;
-    }
-    if (command == ALIGN_H_SPACE || command == ALIGN_V_SPACE) {
-      // space equally support only one parent selection
-      ObjectInfo parent = m_components.get(0).getParent();
-      for (Iterator<C> I = m_components.listIterator(1); I.hasNext();) {
-        C component = I.next();
-        if (component.getParent() != parent) {
-          return false;
-        }
-      }
-    }
-    return true;
-  }
+	/**
+	 * @return <code>true</code> if given command supported for current selection.
+	 */
+	protected final boolean isActionEnabled(int command) {
+		if (m_components.size() == 1) {
+			// for single selection support only set h/v center
+			return command == ALIGN_H_CENTER || command == ALIGN_V_CENTER;
+		}
+		if (command == ALIGN_H_SPACE || command == ALIGN_V_SPACE) {
+			// space equally support only one parent selection
+			ObjectInfo parent = m_components.get(0).getParent();
+			for (Iterator<C> I = m_components.listIterator(1); I.hasNext();) {
+				C component = I.next();
+				if (component.getParent() != parent) {
+					return false;
+				}
+			}
+		}
+		return true;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Alignment
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected abstract void commandAlignLeft() throws Exception;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Alignment
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected abstract void commandAlignLeft() throws Exception;
 
-  protected abstract void commandAlignRight() throws Exception;
+	protected abstract void commandAlignRight() throws Exception;
 
-  protected abstract void commandAlignCenterHorizontally() throws Exception;
+	protected abstract void commandAlignCenterHorizontally() throws Exception;
 
-  protected abstract void commandAlignTop() throws Exception;
+	protected abstract void commandAlignTop() throws Exception;
 
-  protected abstract void commandAlignBottom() throws Exception;
+	protected abstract void commandAlignBottom() throws Exception;
 
-  protected abstract void commandAlignCenterVertically() throws Exception;
+	protected abstract void commandAlignCenterVertically() throws Exception;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Distribute space
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected abstract void commandDistributeSpaceVertically() throws Exception;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Distribute space
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected abstract void commandDistributeSpaceVertically() throws Exception;
 
-  protected abstract void commandDistributeSpaceHorizontally() throws Exception;
+	protected abstract void commandDistributeSpaceHorizontally() throws Exception;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Place at center
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected abstract void commandCenterVertically() throws Exception;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Place at center
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected abstract void commandCenterVertically() throws Exception;
 
-  protected abstract void commandCenterHorizontally() throws Exception;
+	protected abstract void commandCenterHorizontally() throws Exception;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Replicate width/height
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected abstract void commandReplicateHeight() throws Exception;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Replicate width/height
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected abstract void commandReplicateHeight() throws Exception;
 
-  protected abstract void commandReplicateWidth() throws Exception;
+	protected abstract void commandReplicateWidth() throws Exception;
 
-  protected abstract IAbstractComponentInfo getLayoutContainer();
+	protected abstract IAbstractComponentInfo getLayoutContainer();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Action class
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected class SelectionAction extends Action {
-    private final int m_command;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Action class
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected class SelectionAction extends Action {
+		private final int m_command;
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public SelectionAction(String image, String tooltip, int command) {
-      m_command = command;
-      String iconPath = "info/layout/absolute/align_" + image;
-      setImageDescriptor(DesignerPlugin.getImageDescriptor(iconPath + ".gif"));
-      setDisabledImageDescriptor(DesignerPlugin.getImageDescriptor(iconPath + "_disabled.gif"));
-      setEnabled(isActionEnabled(m_command));
-      setToolTipText(tooltip);
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public SelectionAction(String image, String tooltip, int command) {
+			m_command = command;
+			String iconPath = "info/layout/absolute/align_" + image;
+			setImageDescriptor(DesignerPlugin.getImageDescriptor(iconPath + ".gif"));
+			setDisabledImageDescriptor(DesignerPlugin.getImageDescriptor(iconPath + "_disabled.gif"));
+			setEnabled(isActionEnabled(m_command));
+			setToolTipText(tooltip);
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // IAction
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public void run() {
-      ExecutionUtils.run(m_components.get(0).getUnderlyingModel(), new RunnableEx() {
-        @Override
-        public void run() throws Exception {
-          switch (m_command) {
-            case ALIGN_H_CENTER :
-              commandCenterHorizontally();
-              break;
-            case ALIGN_HEIGHT :
-              commandReplicateHeight();
-              break;
-            case ALIGN_WIDTH :
-              commandReplicateWidth();
-              break;
-            case ALIGN_V_CENTERS :
-              commandAlignCenterVertically();
-              break;
-            case ALIGN_V_BOTTOM :
-              commandAlignBottom();
-              break;
-            case ALIGN_V_TOP :
-              commandAlignTop();
-              break;
-            case ALIGN_H_CENTERS :
-              commandAlignCenterHorizontally();
-              break;
-            case ALIGN_H_RIGHT :
-              commandAlignRight();
-              break;
-            case ALIGN_H_LEFT :
-              commandAlignLeft();
-              break;
-            case ALIGN_V_SPACE :
-              commandDistributeSpaceVertically();
-              break;
-            case ALIGN_H_SPACE :
-              commandDistributeSpaceHorizontally();
-              break;
-            case ALIGN_V_CENTER :
-              commandCenterVertically();
-              break;
-            default :
-              break;
-          }
-        }
-      });
-    }
-  }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// IAction
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public void run() {
+			ExecutionUtils.run(m_components.get(0).getUnderlyingModel(), new RunnableEx() {
+				@Override
+				public void run() throws Exception {
+					switch (m_command) {
+					case ALIGN_H_CENTER :
+						commandCenterHorizontally();
+						break;
+					case ALIGN_HEIGHT :
+						commandReplicateHeight();
+						break;
+					case ALIGN_WIDTH :
+						commandReplicateWidth();
+						break;
+					case ALIGN_V_CENTERS :
+						commandAlignCenterVertically();
+						break;
+					case ALIGN_V_BOTTOM :
+						commandAlignBottom();
+						break;
+					case ALIGN_V_TOP :
+						commandAlignTop();
+						break;
+					case ALIGN_H_CENTERS :
+						commandAlignCenterHorizontally();
+						break;
+					case ALIGN_H_RIGHT :
+						commandAlignRight();
+						break;
+					case ALIGN_H_LEFT :
+						commandAlignLeft();
+						break;
+					case ALIGN_V_SPACE :
+						commandDistributeSpaceVertically();
+						break;
+					case ALIGN_H_SPACE :
+						commandDistributeSpaceHorizontally();
+						break;
+					case ALIGN_V_CENTER :
+						commandCenterVertically();
+						break;
+					default :
+						break;
+					}
+				}
+			});
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/layout/absolute/actions/AnchorsActionsSupport.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/layout/absolute/actions/AnchorsActionsSupport.java
index dd8b72f04..6fddd7798 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/layout/absolute/actions/AnchorsActionsSupport.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/layout/absolute/actions/AnchorsActionsSupport.java
@@ -19,86 +19,86 @@
 import org.eclipse.jface.action.IContributionManager;
 
 public class AnchorsActionsSupport {
-  private final PlacementsSupport m_placementsSupport;
-  private final IActionImageProvider m_imageProvider;
+	private final PlacementsSupport m_placementsSupport;
+	private final IActionImageProvider m_imageProvider;
 
-  public AnchorsActionsSupport(PlacementsSupport placementsSupport,
-      IActionImageProvider imageProvider) {
-    m_placementsSupport = placementsSupport;
-    m_imageProvider = imageProvider;
-  }
+	public AnchorsActionsSupport(PlacementsSupport placementsSupport,
+			IActionImageProvider imageProvider) {
+		m_placementsSupport = placementsSupport;
+		m_imageProvider = imageProvider;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Actions
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void fillAnchorsActions(IContributionManager manager,
-      IAbstractComponentInfo widget,
-      boolean isHorizontal) {
-    if (isHorizontal) {
-      manager.add(new SetAlignmentAction(widget,
-          GefMessages.AnchorsActionsSupport_leftAlignment,
-          "h/menu/left.gif",
-          IPositionConstants.LEFT));
-      manager.add(new SetAlignmentAction(widget,
-          GefMessages.AnchorsActionsSupport_rightAlignment,
-          "h/menu/right.gif",
-          IPositionConstants.RIGHT));
-      manager.add(new MakeResizeableAction(widget,
-          GefMessages.AnchorsActionsSupport_makeResizableHorizontal,
-          "h/menu/both.gif",
-          isHorizontal));
-    } else {
-      manager.add(new SetAlignmentAction(widget,
-          GefMessages.AnchorsActionsSupport_topAlignment,
-          "v/menu/top.gif",
-          IPositionConstants.TOP));
-      manager.add(new SetAlignmentAction(widget,
-          GefMessages.AnchorsActionsSupport_bottomAlignment,
-          "v/menu/bottom.gif",
-          IPositionConstants.BOTTOM));
-      manager.add(new MakeResizeableAction(widget,
-          GefMessages.AnchorsActionsSupport_makeResizableVertical,
-          "v/menu/both.gif",
-          isHorizontal));
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Actions
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void fillAnchorsActions(IContributionManager manager,
+			IAbstractComponentInfo widget,
+			boolean isHorizontal) {
+		if (isHorizontal) {
+			manager.add(new SetAlignmentAction(widget,
+					GefMessages.AnchorsActionsSupport_leftAlignment,
+					"h/menu/left.gif",
+					IPositionConstants.LEFT));
+			manager.add(new SetAlignmentAction(widget,
+					GefMessages.AnchorsActionsSupport_rightAlignment,
+					"h/menu/right.gif",
+					IPositionConstants.RIGHT));
+			manager.add(new MakeResizeableAction(widget,
+					GefMessages.AnchorsActionsSupport_makeResizableHorizontal,
+					"h/menu/both.gif",
+					isHorizontal));
+		} else {
+			manager.add(new SetAlignmentAction(widget,
+					GefMessages.AnchorsActionsSupport_topAlignment,
+					"v/menu/top.gif",
+					IPositionConstants.TOP));
+			manager.add(new SetAlignmentAction(widget,
+					GefMessages.AnchorsActionsSupport_bottomAlignment,
+					"v/menu/bottom.gif",
+					IPositionConstants.BOTTOM));
+			manager.add(new MakeResizeableAction(widget,
+					GefMessages.AnchorsActionsSupport_makeResizableVertical,
+					"v/menu/both.gif",
+					isHorizontal));
+		}
+	}
 
-  private final class SetAlignmentAction extends ObjectInfoAction {
-    private final int m_alignment;
-    private final IAbstractComponentInfo m_widget;
+	private final class SetAlignmentAction extends ObjectInfoAction {
+		private final int m_alignment;
+		private final IAbstractComponentInfo m_widget;
 
-    private SetAlignmentAction(IAbstractComponentInfo widget,
-        String text,
-        String imageName,
-        int alignment) {
-      super(widget.getUnderlyingModel(), text, m_imageProvider.getActionImage(imageName));
-      m_widget = widget;
-      m_alignment = alignment;
-    }
+		private SetAlignmentAction(IAbstractComponentInfo widget,
+				String text,
+				String imageName,
+				int alignment) {
+			super(widget.getUnderlyingModel(), text, m_imageProvider.getActionImage(imageName));
+			m_widget = widget;
+			m_alignment = alignment;
+		}
 
-    @Override
-    protected void runEx() throws Exception {
-      m_placementsSupport.setAlignment(m_widget, m_alignment);
-    }
-  }
-  private final class MakeResizeableAction extends ObjectInfoAction {
-    private final boolean m_isHorizontal;
-    private final IAbstractComponentInfo m_widget;
+		@Override
+		protected void runEx() throws Exception {
+			m_placementsSupport.setAlignment(m_widget, m_alignment);
+		}
+	}
+	private final class MakeResizeableAction extends ObjectInfoAction {
+		private final boolean m_isHorizontal;
+		private final IAbstractComponentInfo m_widget;
 
-    private MakeResizeableAction(IAbstractComponentInfo widget,
-        String text,
-        String imageName,
-        boolean isHorizontal) {
-      super(widget.getUnderlyingModel(), text, m_imageProvider.getActionImage(imageName));
-      m_widget = widget;
-      m_isHorizontal = isHorizontal;
-    }
+		private MakeResizeableAction(IAbstractComponentInfo widget,
+				String text,
+				String imageName,
+				boolean isHorizontal) {
+			super(widget.getUnderlyingModel(), text, m_imageProvider.getActionImage(imageName));
+			m_widget = widget;
+			m_isHorizontal = isHorizontal;
+		}
 
-    @Override
-    protected void runEx() throws Exception {
-      m_placementsSupport.setResizeable(m_widget, m_isHorizontal);
-    }
-  }
+		@Override
+		protected void runEx() throws Exception {
+			m_placementsSupport.setResizeable(m_widget, m_isHorizontal);
+		}
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/layout/absolute/actions/ComplexAlignmentActionsSupport.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/layout/absolute/actions/ComplexAlignmentActionsSupport.java
index 2669ee14f..b5774b1de 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/layout/absolute/actions/ComplexAlignmentActionsSupport.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/layout/absolute/actions/ComplexAlignmentActionsSupport.java
@@ -21,96 +21,96 @@
  * @coverage swt.gef.policy
  */
 public abstract class ComplexAlignmentActionsSupport<C extends IAbstractComponentInfo>
-    extends
-      AbstractAlignmentActionsSupport<C> {
-  private final PlacementsSupport m_placementsSupport;
+extends
+AbstractAlignmentActionsSupport<C> {
+	private final PlacementsSupport m_placementsSupport;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ComplexAlignmentActionsSupport(PlacementsSupport placementsSupport) {
-    m_placementsSupport = placementsSupport;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ComplexAlignmentActionsSupport(PlacementsSupport placementsSupport) {
+		m_placementsSupport = placementsSupport;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Alignments
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void commandAlignLeft() throws Exception {
-    m_placementsSupport.align(m_components, true, IPositionConstants.LEFT);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Alignments
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void commandAlignLeft() throws Exception {
+		m_placementsSupport.align(m_components, true, IPositionConstants.LEFT);
+	}
 
-  @Override
-  protected void commandAlignRight() throws Exception {
-    m_placementsSupport.align(m_components, true, IPositionConstants.RIGHT);
-  }
+	@Override
+	protected void commandAlignRight() throws Exception {
+		m_placementsSupport.align(m_components, true, IPositionConstants.RIGHT);
+	}
 
-  @Override
-  protected void commandAlignCenterHorizontally() throws Exception {
-    m_placementsSupport.align(m_components, true, IPositionConstants.CENTER);
-  }
+	@Override
+	protected void commandAlignCenterHorizontally() throws Exception {
+		m_placementsSupport.align(m_components, true, IPositionConstants.CENTER);
+	}
 
-  @Override
-  protected void commandAlignTop() throws Exception {
-    m_placementsSupport.align(m_components, false, IPositionConstants.TOP);
-  }
+	@Override
+	protected void commandAlignTop() throws Exception {
+		m_placementsSupport.align(m_components, false, IPositionConstants.TOP);
+	}
 
-  @Override
-  protected void commandAlignBottom() throws Exception {
-    m_placementsSupport.align(m_components, false, IPositionConstants.BOTTOM);
-  }
+	@Override
+	protected void commandAlignBottom() throws Exception {
+		m_placementsSupport.align(m_components, false, IPositionConstants.BOTTOM);
+	}
 
-  @Override
-  protected void commandAlignCenterVertically() throws Exception {
-    m_placementsSupport.align(m_components, false, IPositionConstants.CENTER);
-  }
+	@Override
+	protected void commandAlignCenterVertically() throws Exception {
+		m_placementsSupport.align(m_components, false, IPositionConstants.CENTER);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Center in container
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void commandCenterHorizontally() throws Exception {
-    m_placementsSupport.center(m_components, true);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Center in container
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void commandCenterHorizontally() throws Exception {
+		m_placementsSupport.center(m_components, true);
+	}
 
-  @Override
-  protected void commandCenterVertically() throws Exception {
-    m_placementsSupport.center(m_components, false);
-  }
+	@Override
+	protected void commandCenterVertically() throws Exception {
+		m_placementsSupport.center(m_components, false);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Replicate size
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void commandReplicateWidth() throws Exception {
-    m_placementsSupport.replicateSize(m_components, true);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Replicate size
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void commandReplicateWidth() throws Exception {
+		m_placementsSupport.replicateSize(m_components, true);
+	}
 
-  @Override
-  protected void commandReplicateHeight() throws Exception {
-    m_placementsSupport.replicateSize(m_components, false);
-  }
+	@Override
+	protected void commandReplicateHeight() throws Exception {
+		m_placementsSupport.replicateSize(m_components, false);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Distribute space
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void commandDistributeSpaceHorizontally() throws Exception {
-    m_placementsSupport.distributeSpace(m_components, true);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Distribute space
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void commandDistributeSpaceHorizontally() throws Exception {
+		m_placementsSupport.distributeSpace(m_components, true);
+	}
 
-  @Override
-  protected void commandDistributeSpaceVertically() throws Exception {
-    m_placementsSupport.distributeSpace(m_components, false);
-  }
+	@Override
+	protected void commandDistributeSpaceVertically() throws Exception {
+		m_placementsSupport.distributeSpace(m_components, false);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/layout/absolute/actions/IActionImageProvider.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/layout/absolute/actions/IActionImageProvider.java
index a212365e7..e476ea22c 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/layout/absolute/actions/IActionImageProvider.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/layout/absolute/actions/IActionImageProvider.java
@@ -18,5 +18,5 @@
  * @author mitin_aa
  */
 public interface IActionImageProvider {
-  Image getActionImage(String imagePath);
+	Image getActionImage(String imagePath);
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/layout/absolute/actions/SimpleAlignmentActionsSupport.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/layout/absolute/actions/SimpleAlignmentActionsSupport.java
index 57ab84337..7ad3d620c 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/layout/absolute/actions/SimpleAlignmentActionsSupport.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/layout/absolute/actions/SimpleAlignmentActionsSupport.java
@@ -29,318 +29,318 @@
  * @coverage core.model.layout.absolute
  */
 public abstract class SimpleAlignmentActionsSupport<C extends IAbstractComponentInfo>
-    extends
-      AbstractAlignmentActionsSupport<C> {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Alignments
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void commandAlignLeft() throws Exception {
-    C target = m_components.get(0);
-    Rectangle targetBounds = getModelBounds(target);
-    Point targetLocationInRoot = mapToRoot(target, targetBounds.x, targetBounds.y);
-    for (C component : m_components) {
-      if (target != component) {
-        Rectangle objectBounds = getModelBounds(component);
-        int x = mapFromRoot(component, targetLocationInRoot.x, 0).x;
-        commandChangeBounds(component, new Point(x, objectBounds.y), null);
-      }
-    }
-  }
+extends
+AbstractAlignmentActionsSupport<C> {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Alignments
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void commandAlignLeft() throws Exception {
+		C target = m_components.get(0);
+		Rectangle targetBounds = getModelBounds(target);
+		Point targetLocationInRoot = mapToRoot(target, targetBounds.x, targetBounds.y);
+		for (C component : m_components) {
+			if (target != component) {
+				Rectangle objectBounds = getModelBounds(component);
+				int x = mapFromRoot(component, targetLocationInRoot.x, 0).x;
+				commandChangeBounds(component, new Point(x, objectBounds.y), null);
+			}
+		}
+	}
 
-  @Override
-  protected void commandAlignRight() throws Exception {
-    C target = m_components.get(0);
-    Rectangle targetBounds = getModelBounds(target);
-    Point targetLocationInRoot = mapToRoot(target, targetBounds.x, targetBounds.y);
-    for (C component : m_components) {
-      if (target != component) {
-        Rectangle objectBounds = getModelBounds(component);
-        int r = mapFromRoot(component, targetLocationInRoot.x + targetBounds.width, 0).x;
-        commandChangeBounds(component, new Point(r - objectBounds.width, objectBounds.y), null);
-      }
-    }
-  }
+	@Override
+	protected void commandAlignRight() throws Exception {
+		C target = m_components.get(0);
+		Rectangle targetBounds = getModelBounds(target);
+		Point targetLocationInRoot = mapToRoot(target, targetBounds.x, targetBounds.y);
+		for (C component : m_components) {
+			if (target != component) {
+				Rectangle objectBounds = getModelBounds(component);
+				int r = mapFromRoot(component, targetLocationInRoot.x + targetBounds.width, 0).x;
+				commandChangeBounds(component, new Point(r - objectBounds.width, objectBounds.y), null);
+			}
+		}
+	}
 
-  @Override
-  protected void commandAlignCenterHorizontally() throws Exception {
-    C target = m_components.get(0);
-    Rectangle targetBounds = getModelBounds(target);
-    Point targetLocationInRoot = mapToRoot(target, targetBounds.x, targetBounds.y);
-    for (C component : m_components) {
-      if (target != component) {
-        Rectangle objectBounds = getModelBounds(component);
-        int c = mapFromRoot(component, targetLocationInRoot.x + targetBounds.width / 2, 0).x;
-        commandChangeBounds(component, new Point(c - objectBounds.width / 2, objectBounds.y), null);
-      }
-    }
-  }
+	@Override
+	protected void commandAlignCenterHorizontally() throws Exception {
+		C target = m_components.get(0);
+		Rectangle targetBounds = getModelBounds(target);
+		Point targetLocationInRoot = mapToRoot(target, targetBounds.x, targetBounds.y);
+		for (C component : m_components) {
+			if (target != component) {
+				Rectangle objectBounds = getModelBounds(component);
+				int c = mapFromRoot(component, targetLocationInRoot.x + targetBounds.width / 2, 0).x;
+				commandChangeBounds(component, new Point(c - objectBounds.width / 2, objectBounds.y), null);
+			}
+		}
+	}
 
-  @Override
-  protected void commandAlignTop() throws Exception {
-    C target = m_components.get(0);
-    Rectangle targetBounds = getModelBounds(target);
-    Point targetLocationInRoot = mapToRoot(target, targetBounds.x, targetBounds.y);
-    for (C component : m_components) {
-      if (target != component) {
-        Rectangle objectBounds = getModelBounds(component);
-        int y = mapFromRoot(component, 0, targetLocationInRoot.y).y;
-        commandChangeBounds(component, new Point(objectBounds.x, y), null);
-      }
-    }
-  }
+	@Override
+	protected void commandAlignTop() throws Exception {
+		C target = m_components.get(0);
+		Rectangle targetBounds = getModelBounds(target);
+		Point targetLocationInRoot = mapToRoot(target, targetBounds.x, targetBounds.y);
+		for (C component : m_components) {
+			if (target != component) {
+				Rectangle objectBounds = getModelBounds(component);
+				int y = mapFromRoot(component, 0, targetLocationInRoot.y).y;
+				commandChangeBounds(component, new Point(objectBounds.x, y), null);
+			}
+		}
+	}
 
-  @Override
-  protected void commandAlignBottom() throws Exception {
-    C target = m_components.get(0);
-    Rectangle targetBounds = getModelBounds(target);
-    Point targetLocationInRoot = mapToRoot(target, targetBounds.x, targetBounds.y);
-    for (C component : m_components) {
-      if (target != component) {
-        Rectangle objectBounds = getModelBounds(component);
-        int b = mapFromRoot(component, 0, targetLocationInRoot.y + targetBounds.height).y;
-        commandChangeBounds(component, new Point(objectBounds.x, b - objectBounds.height), null);
-      }
-    }
-  }
+	@Override
+	protected void commandAlignBottom() throws Exception {
+		C target = m_components.get(0);
+		Rectangle targetBounds = getModelBounds(target);
+		Point targetLocationInRoot = mapToRoot(target, targetBounds.x, targetBounds.y);
+		for (C component : m_components) {
+			if (target != component) {
+				Rectangle objectBounds = getModelBounds(component);
+				int b = mapFromRoot(component, 0, targetLocationInRoot.y + targetBounds.height).y;
+				commandChangeBounds(component, new Point(objectBounds.x, b - objectBounds.height), null);
+			}
+		}
+	}
 
-  @Override
-  protected void commandAlignCenterVertically() throws Exception {
-    C target = m_components.get(0);
-    Rectangle targetBounds = getModelBounds(target);
-    Point targetLocationInRoot = mapToRoot(target, targetBounds.x, targetBounds.y);
-    for (C component : m_components) {
-      if (target != component) {
-        Rectangle objectBounds = getModelBounds(component);
-        int c = mapFromRoot(component, 0, targetLocationInRoot.y + targetBounds.height / 2).y;
-        commandChangeBounds(component, new Point(objectBounds.x, c - objectBounds.height / 2), null);
-      }
-    }
-  }
+	@Override
+	protected void commandAlignCenterVertically() throws Exception {
+		C target = m_components.get(0);
+		Rectangle targetBounds = getModelBounds(target);
+		Point targetLocationInRoot = mapToRoot(target, targetBounds.x, targetBounds.y);
+		for (C component : m_components) {
+			if (target != component) {
+				Rectangle objectBounds = getModelBounds(component);
+				int c = mapFromRoot(component, 0, targetLocationInRoot.y + targetBounds.height / 2).y;
+				commandChangeBounds(component, new Point(objectBounds.x, c - objectBounds.height / 2), null);
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Distribute space
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void commandDistributeSpaceVertically() throws Exception {
-    @SuppressWarnings("unchecked")
-    Rectangle clientArea = getModelBounds((C) getLayoutContainer());
-    // calculate sum height of objects
-    int objectsHeight = 0;
-    for (C component : m_components) {
-      objectsHeight += getModelBounds(component).height;
-    }
-    // sort objects by their top positions
-    Collections.sort(m_components, new Comparator<C>() {
-      @Override
-      public int compare(C component1, C component2) {
-        return getModelBounds(component1).y - getModelBounds(component2).y;
-      }
-    });
-    // distribute objects between:
-    // 1. top and bottom objects (if Ctrl pressed),
-    // 2. or in parents client area
-    int space;
-    int y;
-    int componentsLength = m_components.size();
-    if (DesignerPlugin.isCtrlPressed() && componentsLength > 2) {
-      // calculate space and start location (y)
-      Rectangle topBounds = getModelBounds(m_components.get(0));
-      Rectangle bottomBounds = getModelBounds(m_components.get(componentsLength - 1));
-      int totalHeight = bottomBounds.bottom() - topBounds.y;
-      space = (totalHeight - objectsHeight) / (componentsLength - 1);
-      y = topBounds.y;
-    } else {
-      // calculate space and start location (y)
-      space = (clientArea.height - objectsHeight) / (componentsLength + 1);
-      y = space;
-    }
-    // change positions for objects from top to bottom
-    for (C component : m_components) {
-      Rectangle objectBounds = getModelBounds(component);
-      commandChangeBounds(component, new Point(objectBounds.x, y), null);
-      y += objectBounds.height;
-      y += space;
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Distribute space
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void commandDistributeSpaceVertically() throws Exception {
+		@SuppressWarnings("unchecked")
+		Rectangle clientArea = getModelBounds((C) getLayoutContainer());
+		// calculate sum height of objects
+		int objectsHeight = 0;
+		for (C component : m_components) {
+			objectsHeight += getModelBounds(component).height;
+		}
+		// sort objects by their top positions
+		Collections.sort(m_components, new Comparator<C>() {
+			@Override
+			public int compare(C component1, C component2) {
+				return getModelBounds(component1).y - getModelBounds(component2).y;
+			}
+		});
+		// distribute objects between:
+		// 1. top and bottom objects (if Ctrl pressed),
+		// 2. or in parents client area
+		int space;
+		int y;
+		int componentsLength = m_components.size();
+		if (DesignerPlugin.isCtrlPressed() && componentsLength > 2) {
+			// calculate space and start location (y)
+			Rectangle topBounds = getModelBounds(m_components.get(0));
+			Rectangle bottomBounds = getModelBounds(m_components.get(componentsLength - 1));
+			int totalHeight = bottomBounds.bottom() - topBounds.y;
+			space = (totalHeight - objectsHeight) / (componentsLength - 1);
+			y = topBounds.y;
+		} else {
+			// calculate space and start location (y)
+			space = (clientArea.height - objectsHeight) / (componentsLength + 1);
+			y = space;
+		}
+		// change positions for objects from top to bottom
+		for (C component : m_components) {
+			Rectangle objectBounds = getModelBounds(component);
+			commandChangeBounds(component, new Point(objectBounds.x, y), null);
+			y += objectBounds.height;
+			y += space;
+		}
+	}
 
-  @Override
-  protected void commandDistributeSpaceHorizontally() throws Exception {
-    @SuppressWarnings("unchecked")
-    Rectangle clientArea = getModelBounds((C) getLayoutContainer());
-    // calculate sum width of objects
-    int objectsWidth = 0;
-    for (C component : m_components) {
-      objectsWidth += getModelBounds(component).width;
-    }
-    // sort objects by their left positions
-    Collections.sort(m_components, new Comparator<C>() {
-      @Override
-      public int compare(C component1, C component2) {
-        return getModelBounds(component1).x - getModelBounds(component2).x;
-      }
-    });
-    // distribute objects between:
-    // 1. left-most and right-most objects (if Ctrl pressed);
-    // 2. or in parents client area
-    int space;
-    int x;
-    int componentsLength = m_components.size();
-    if (DesignerPlugin.isCtrlPressed() && componentsLength > 2) {
-      // calculate space and start location (x)
-      Rectangle leftBounds = getModelBounds(m_components.get(0));
-      Rectangle rightBounds = getModelBounds(m_components.get(componentsLength - 1));
-      int totalWidth = rightBounds.right() - leftBounds.x;
-      space = (totalWidth - objectsWidth) / (componentsLength - 1);
-      x = leftBounds.x;
-    } else {
-      // calculate space and start location (x)
-      space = (clientArea.width - objectsWidth) / (componentsLength + 1);
-      x = space;
-    }
-    // change positions for objects from left to right
-    for (C component : m_components) {
-      Rectangle objectBounds = getModelBounds(component);
-      commandChangeBounds(component, new Point(x, objectBounds.y), null);
-      x += objectBounds.width;
-      x += space;
-    }
-  }
+	@Override
+	protected void commandDistributeSpaceHorizontally() throws Exception {
+		@SuppressWarnings("unchecked")
+		Rectangle clientArea = getModelBounds((C) getLayoutContainer());
+		// calculate sum width of objects
+		int objectsWidth = 0;
+		for (C component : m_components) {
+			objectsWidth += getModelBounds(component).width;
+		}
+		// sort objects by their left positions
+		Collections.sort(m_components, new Comparator<C>() {
+			@Override
+			public int compare(C component1, C component2) {
+				return getModelBounds(component1).x - getModelBounds(component2).x;
+			}
+		});
+		// distribute objects between:
+		// 1. left-most and right-most objects (if Ctrl pressed);
+		// 2. or in parents client area
+		int space;
+		int x;
+		int componentsLength = m_components.size();
+		if (DesignerPlugin.isCtrlPressed() && componentsLength > 2) {
+			// calculate space and start location (x)
+			Rectangle leftBounds = getModelBounds(m_components.get(0));
+			Rectangle rightBounds = getModelBounds(m_components.get(componentsLength - 1));
+			int totalWidth = rightBounds.right() - leftBounds.x;
+			space = (totalWidth - objectsWidth) / (componentsLength - 1);
+			x = leftBounds.x;
+		} else {
+			// calculate space and start location (x)
+			space = (clientArea.width - objectsWidth) / (componentsLength + 1);
+			x = space;
+		}
+		// change positions for objects from left to right
+		for (C component : m_components) {
+			Rectangle objectBounds = getModelBounds(component);
+			commandChangeBounds(component, new Point(x, objectBounds.y), null);
+			x += objectBounds.width;
+			x += space;
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Place at center
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void commandCenterVertically() throws Exception {
-    @SuppressWarnings("unchecked")
-    Rectangle clientArea = getModelBounds((C) getLayoutContainer());
-    int clientHeight = clientArea.height;
-    for (C component : m_components) {
-      Rectangle objectBounds = getModelBounds(component);
-      commandChangeBounds(component, new Point(objectBounds.x,
-          (clientHeight - objectBounds.height) / 2), null);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Place at center
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void commandCenterVertically() throws Exception {
+		@SuppressWarnings("unchecked")
+		Rectangle clientArea = getModelBounds((C) getLayoutContainer());
+		int clientHeight = clientArea.height;
+		for (C component : m_components) {
+			Rectangle objectBounds = getModelBounds(component);
+			commandChangeBounds(component, new Point(objectBounds.x,
+					(clientHeight - objectBounds.height) / 2), null);
+		}
+	}
 
-  @Override
-  protected void commandCenterHorizontally() throws Exception {
-    int clientAreaWidth;
-    {
-      IAbstractComponentInfo container = getLayoutContainer();
-      clientAreaWidth = container.getBounds().width - container.getClientAreaInsets().getWidth();
-    }
-    // move components
-    for (C component : m_components) {
-      Rectangle objectBounds = getModelBounds(component);
-      int newX = (clientAreaWidth - objectBounds.width) / 2;
-      commandChangeBounds(component, new Point(newX, objectBounds.y), null);
-    }
-  }
+	@Override
+	protected void commandCenterHorizontally() throws Exception {
+		int clientAreaWidth;
+		{
+			IAbstractComponentInfo container = getLayoutContainer();
+			clientAreaWidth = container.getBounds().width - container.getClientAreaInsets().getWidth();
+		}
+		// move components
+		for (C component : m_components) {
+			Rectangle objectBounds = getModelBounds(component);
+			int newX = (clientAreaWidth - objectBounds.width) / 2;
+			commandChangeBounds(component, new Point(newX, objectBounds.y), null);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Replicate width/height
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void commandReplicateHeight() throws Exception {
-    C target = m_components.get(0);
-    Rectangle targetBounds = getModelBounds(target);
-    for (C component : m_components) {
-      if (target != component) {
-        Rectangle objectBounds = getModelBounds(component);
-        commandChangeBounds(component, null, new Dimension(objectBounds.width, targetBounds.height));
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Replicate width/height
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void commandReplicateHeight() throws Exception {
+		C target = m_components.get(0);
+		Rectangle targetBounds = getModelBounds(target);
+		for (C component : m_components) {
+			if (target != component) {
+				Rectangle objectBounds = getModelBounds(component);
+				commandChangeBounds(component, null, new Dimension(objectBounds.width, targetBounds.height));
+			}
+		}
+	}
 
-  @Override
-  protected void commandReplicateWidth() throws Exception {
-    C target = m_components.get(0);
-    Rectangle targetBounds = getModelBounds(target);
-    for (C component : m_components) {
-      if (target != component) {
-        Rectangle objectBounds = getModelBounds(component);
-        commandChangeBounds(component, null, new Dimension(targetBounds.width, objectBounds.height));
-      }
-    }
-  }
+	@Override
+	protected void commandReplicateWidth() throws Exception {
+		C target = m_components.get(0);
+		Rectangle targetBounds = getModelBounds(target);
+		for (C component : m_components) {
+			if (target != component) {
+				Rectangle objectBounds = getModelBounds(component);
+				commandChangeBounds(component, null, new Dimension(targetBounds.width, objectBounds.height));
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Change bounds
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Perform "move" or "resize" operation. Modifies location/size values by modifying appropriate
-   * "setLocation", "setSize", "setBounds" arguments.
-   *
-   * @param component
-   *          the component which modifications applies to.
-   * @param location
-   *          the {@link Point} of new location of component. May be null.
-   * @param size
-   *          the {@link Dimension} of new size of component. May be null.
-   */
-  protected abstract void commandChangeBounds(C component, Point location, Dimension size)
-      throws Exception;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Change bounds
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Perform "move" or "resize" operation. Modifies location/size values by modifying appropriate
+	 * "setLocation", "setSize", "setBounds" arguments.
+	 *
+	 * @param component
+	 *          the component which modifications applies to.
+	 * @param location
+	 *          the {@link Point} of new location of component. May be null.
+	 * @param size
+	 *          the {@link Dimension} of new size of component. May be null.
+	 */
+	protected abstract void commandChangeBounds(C component, Point location, Dimension size)
+			throws Exception;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Returns "model" bounds of given object.
-   */
-  private Rectangle getModelBounds(C component) {
-    return component.getModelBounds();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Returns "model" bounds of given object.
+	 */
+	private Rectangle getModelBounds(C component) {
+		return component.getModelBounds();
+	}
 
-  /**
-   * Maps given coordinates (relative to the parent of given object) to the coordinates in some
-   * root.
-   */
-  @SuppressWarnings("unchecked")
-  private Point mapToRoot(C component, int x, int y) {
-    C parent = (C) component.getParent();
-    while (parent.getParent() != null) {
-      if (isValidObjectOnRootPath(parent)) {
-        Rectangle bounds = getModelBounds(parent);
-        x += bounds.x;
-        y += bounds.y;
-      }
-      parent = (C) parent.getParent();
-    }
-    return new Point(x, y);
-  }
+	/**
+	 * Maps given coordinates (relative to the parent of given object) to the coordinates in some
+	 * root.
+	 */
+	@SuppressWarnings("unchecked")
+	private Point mapToRoot(C component, int x, int y) {
+		C parent = (C) component.getParent();
+		while (parent.getParent() != null) {
+			if (isValidObjectOnRootPath(parent)) {
+				Rectangle bounds = getModelBounds(parent);
+				x += bounds.x;
+				y += bounds.y;
+			}
+			parent = (C) parent.getParent();
+		}
+		return new Point(x, y);
+	}
 
-  /**
-   * Maps given coordinates (in some root) to the parent coordinates (relative to the parent of
-   * given object).
-   */
-  @SuppressWarnings("unchecked")
-  private Point mapFromRoot(C component, int x, int y) {
-    C parent = (C) component.getParent();
-    while (parent.getParent() != null) {
-      if (isValidObjectOnRootPath(parent)) {
-        Rectangle bounds = getModelBounds(parent);
-        x -= bounds.x;
-        y -= bounds.y;
-      }
-      parent = (C) parent.getParent();
-    }
-    return new Point(x, y);
-  }
+	/**
+	 * Maps given coordinates (in some root) to the parent coordinates (relative to the parent of
+	 * given object).
+	 */
+	@SuppressWarnings("unchecked")
+	private Point mapFromRoot(C component, int x, int y) {
+		C parent = (C) component.getParent();
+		while (parent.getParent() != null) {
+			if (isValidObjectOnRootPath(parent)) {
+				Rectangle bounds = getModelBounds(parent);
+				x -= bounds.x;
+				y -= bounds.y;
+			}
+			parent = (C) parent.getParent();
+		}
+		return new Point(x, y);
+	}
 
-  /**
-   * Checks if given object is valid object on the path to the root.
-   */
-  protected abstract boolean isValidObjectOnRootPath(IAbstractComponentInfo parent);
+	/**
+	 * Checks if given object is valid object on the path to the root.
+	 */
+	protected abstract boolean isValidObjectOnRootPath(IAbstractComponentInfo parent);
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/layout/generic/AbstractContainerRequestValidator.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/layout/generic/AbstractContainerRequestValidator.java
index 9e9a5841c..38d64544f 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/layout/generic/AbstractContainerRequestValidator.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/layout/generic/AbstractContainerRequestValidator.java
@@ -30,67 +30,67 @@
  * @coverage core.gef.policy
  */
 public final class AbstractContainerRequestValidator implements ILayoutRequestValidator {
-  private final AbstractContainer m_container;
+	private final AbstractContainer m_container;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractContainerRequestValidator(AbstractContainer container) {
-    m_container = container;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractContainerRequestValidator(AbstractContainer container) {
+		m_container = container;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Validation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean validateCreateRequest(EditPart host, CreateRequest request) {
-    Object newObject = request.getNewObject();
-    return m_container.validateComponent(newObject);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Validation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean validateCreateRequest(EditPart host, CreateRequest request) {
+		Object newObject = request.getNewObject();
+		return m_container.validateComponent(newObject);
+	}
 
-  @Override
-  public boolean validatePasteRequest(EditPart host, final PasteRequest request) {
-    return ExecutionUtils.runObjectLog(new RunnableObjectEx<Boolean>() {
-      @Override
-      public Boolean runObject() throws Exception {
-        List<?> mementos = (List<?>) request.getMemento();
-        for (Object memento : mementos) {
-          Object component = GlobalState.getValidatorHelper().getPasteComponent(memento);
-          if (!m_container.validateComponent(component)) {
-            return false;
-          }
-        }
-        return true;
-      }
-    }, false);
-  }
+	@Override
+	public boolean validatePasteRequest(EditPart host, final PasteRequest request) {
+		return ExecutionUtils.runObjectLog(new RunnableObjectEx<Boolean>() {
+			@Override
+			public Boolean runObject() throws Exception {
+				List<?> mementos = (List<?>) request.getMemento();
+				for (Object memento : mementos) {
+					Object component = GlobalState.getValidatorHelper().getPasteComponent(memento);
+					if (!m_container.validateComponent(component)) {
+						return false;
+					}
+				}
+				return true;
+			}
+		}, false);
+	}
 
-  @Override
-  public boolean validateMoveRequest(EditPart host, ChangeBoundsRequest request) {
-    return validateComponents(request);
-  }
+	@Override
+	public boolean validateMoveRequest(EditPart host, ChangeBoundsRequest request) {
+		return validateComponents(request);
+	}
 
-  @Override
-  public boolean validateAddRequest(EditPart host, ChangeBoundsRequest request) {
-    return validateComponents(request);
-  }
+	@Override
+	public boolean validateAddRequest(EditPart host, ChangeBoundsRequest request) {
+		return validateComponents(request);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private boolean validateComponents(ChangeBoundsRequest request) {
-    for (EditPart editPart : request.getEditParts()) {
-      Object object = editPart.getModel();
-      if (!m_container.validateComponent(object)) {
-        return false;
-      }
-    }
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private boolean validateComponents(ChangeBoundsRequest request) {
+		for (EditPart editPart : request.getEditParts()) {
+			Object object = editPart.getModel();
+			if (!m_container.validateComponent(object)) {
+				return false;
+			}
+		}
+		return true;
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/layout/generic/FlowContainerLayoutEditPolicy.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/layout/generic/FlowContainerLayoutEditPolicy.java
index c5392602e..da3f2ff58 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/layout/generic/FlowContainerLayoutEditPolicy.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/layout/generic/FlowContainerLayoutEditPolicy.java
@@ -28,82 +28,82 @@
  * @coverage core.gef.policy
  */
 public final class FlowContainerLayoutEditPolicy extends ObjectFlowLayoutEditPolicy<Object> {
-  private final FlowContainer m_container;
-  private final ILayoutRequestValidator m_requestValidator;
-  private final ObjectInfo m_model;
+	private final FlowContainer m_container;
+	private final ILayoutRequestValidator m_requestValidator;
+	private final ObjectInfo m_model;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FlowContainerLayoutEditPolicy(ObjectInfo model, FlowContainer container) {
-    super(model);
-    m_model = model;
-    m_container = container;
-    {
-      ILayoutRequestValidator validator = new AbstractContainerRequestValidator(container);
-      validator = LayoutRequestValidators.cache(validator);
-      m_requestValidator = LayoutRequestValidators.finalize(validator);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FlowContainerLayoutEditPolicy(ObjectInfo model, FlowContainer container) {
+		super(model);
+		m_model = model;
+		m_container = container;
+		{
+			ILayoutRequestValidator validator = new AbstractContainerRequestValidator(container);
+			validator = LayoutRequestValidators.cache(validator);
+			m_requestValidator = LayoutRequestValidators.finalize(validator);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Decoration
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void decorateChild(EditPart child) {
-    if (m_container.validateComponent(child.getModel())) {
-      child.installEditPolicy(EditPolicy.SELECTION_ROLE, new NonResizableSelectionEditPolicy());
-      new SelectionEditPolicyInstaller(m_model, child).decorate();
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Decoration
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void decorateChild(EditPart child) {
+		if (m_container.validateComponent(child.getModel())) {
+			child.installEditPolicy(EditPolicy.SELECTION_ROLE, new NonResizableSelectionEditPolicy());
+			new SelectionEditPolicyInstaller(m_model, child).decorate();
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected boolean isHorizontal(Request request) {
-    return m_container.isHorizontal();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected boolean isHorizontal(Request request) {
+		return m_container.isHorizontal();
+	}
 
-  @Override
-  protected boolean isRtl(Request request) {
-    return m_container.isRtl();
-  }
+	@Override
+	protected boolean isRtl(Request request) {
+		return m_container.isRtl();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Requests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected ILayoutRequestValidator getRequestValidator() {
-    return m_requestValidator;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Requests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected ILayoutRequestValidator getRequestValidator() {
+		return m_requestValidator;
+	}
 
-  @Override
-  protected boolean isGoodReferenceChild(Request request, EditPart editPart) {
-    Object referenceModel = editPart.getModel();
-    return m_container.validateReference(referenceModel);
-  }
+	@Override
+	protected boolean isGoodReferenceChild(Request request, EditPart editPart) {
+		Object referenceModel = editPart.getModel();
+		return m_container.validateReference(referenceModel);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void command_CREATE(Object newObject, Object referenceObject) throws Exception {
-    m_container.command_CREATE(newObject, referenceObject);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void command_CREATE(Object newObject, Object referenceObject) throws Exception {
+		m_container.command_CREATE(newObject, referenceObject);
+	}
 
-  @Override
-  protected void command_MOVE(Object object, Object referenceObject) throws Exception {
-    m_container.command_MOVE(object, referenceObject);
-  }
+	@Override
+	protected void command_MOVE(Object object, Object referenceObject) throws Exception {
+		m_container.command_MOVE(object, referenceObject);
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/layout/generic/SelectionEditPolicyInstaller.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/layout/generic/SelectionEditPolicyInstaller.java
index 6f75fa3d6..d379e245b 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/layout/generic/SelectionEditPolicyInstaller.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/layout/generic/SelectionEditPolicyInstaller.java
@@ -27,168 +27,168 @@
  * @coverage core.gef.policy
  */
 public final class SelectionEditPolicyInstaller {
-  private final Object container;
-  private final String containerClassName;
-  private final EditPart childPart;
-  private final Object child;
+	private final Object container;
+	private final String containerClassName;
+	private final EditPart childPart;
+	private final Object child;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SelectionEditPolicyInstaller(Object _container, EditPart _childPart) {
-    container = _container;
-    containerClassName = container.getClass().getName();
-    childPart = _childPart;
-    child = childPart.getModel();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SelectionEditPolicyInstaller(Object _container, EditPart _childPart) {
+		container = _container;
+		containerClassName = container.getClass().getName();
+		childPart = _childPart;
+		child = childPart.getModel();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Try to find {@link SelectionEditPolicy} and use to decorate child {@link EditPart}.
-   */
-  public void decorate() {
-    IParametersProvider parametersProvider = GlobalState.getParametersProvider();
-    // use main package
-    {
-      String packageName = StringUtils.substringBeforeLast(containerClassName, ".model.");
-      if (decorate(packageName)) {
-        return;
-      }
-    }
-    // use "related" packages
-    for (int i = 1; i < 10; i++) {
-      String parameterName = "GEF.relatedToolkitPackages." + i;
-      String packageName = parametersProvider.getParameter(container, parameterName);
-      if (packageName != null) {
-        if (decorate(packageName)) {
-          return;
-        }
-      }
-    }
-    // use default policy
-    {
-      String policyClassName =
-          parametersProvider.getParameter(container, "GEF.defaultSelectionPolicy");
-      if (!StringUtils.isBlank(policyClassName)) {
-        policyClassName = policyClassName.trim();
-        try {
-          ClassLoader classLoader = container.getClass().getClassLoader();
-          Class<?> policyClass = classLoader.loadClass(policyClassName);
-          SelectionEditPolicy policy = createPolicy(policyClass);
-          if (policy != null) {
-            childPart.installEditPolicy(EditPolicy.SELECTION_ROLE, policy);
-            return;
-          }
-        } catch (Throwable e) {
-        }
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Try to find {@link SelectionEditPolicy} and use to decorate child {@link EditPart}.
+	 */
+	public void decorate() {
+		IParametersProvider parametersProvider = GlobalState.getParametersProvider();
+		// use main package
+		{
+			String packageName = StringUtils.substringBeforeLast(containerClassName, ".model.");
+			if (decorate(packageName)) {
+				return;
+			}
+		}
+		// use "related" packages
+		for (int i = 1; i < 10; i++) {
+			String parameterName = "GEF.relatedToolkitPackages." + i;
+			String packageName = parametersProvider.getParameter(container, parameterName);
+			if (packageName != null) {
+				if (decorate(packageName)) {
+					return;
+				}
+			}
+		}
+		// use default policy
+		{
+			String policyClassName =
+					parametersProvider.getParameter(container, "GEF.defaultSelectionPolicy");
+			if (!StringUtils.isBlank(policyClassName)) {
+				policyClassName = policyClassName.trim();
+				try {
+					ClassLoader classLoader = container.getClass().getClassLoader();
+					Class<?> policyClass = classLoader.loadClass(policyClassName);
+					SelectionEditPolicy policy = createPolicy(policyClass);
+					if (policy != null) {
+						childPart.installEditPolicy(EditPolicy.SELECTION_ROLE, policy);
+						return;
+					}
+				} catch (Throwable e) {
+				}
+			}
+		}
+	}
 
-  /**
-   * @return <code>true</code> if policy {@link Class} was found and loaded.
-   */
-  private boolean decorate(String packageName) {
-    // prepare policy Class
-    Class<?> policyClass = loadClass(packageName);
-    if (policyClass == null) {
-      return false;
-    }
-    // install policy
-    SelectionEditPolicy policy = createPolicy(policyClass);
-    if (policy != null) {
-      childPart.installEditPolicy(EditPolicy.SELECTION_ROLE, policy);
-    }
-    // policy was loaded
-    return true;
-  }
+	/**
+	 * @return <code>true</code> if policy {@link Class} was found and loaded.
+	 */
+	private boolean decorate(String packageName) {
+		// prepare policy Class
+		Class<?> policyClass = loadClass(packageName);
+		if (policyClass == null) {
+			return false;
+		}
+		// install policy
+		SelectionEditPolicy policy = createPolicy(policyClass);
+		if (policy != null) {
+			childPart.installEditPolicy(EditPolicy.SELECTION_ROLE, policy);
+		}
+		// policy was loaded
+		return true;
+	}
 
-  /**
-   * Loads policy {@link Class} from given package and its parents.
-   */
-  private Class<?> loadClass(String basePackageName) {
-    // name, based on container Class name
-    String containerName;
-    {
-      containerName = StringUtils.substringAfterLast(containerClassName, ".model.");
-      containerName = StringUtils.removeEnd(containerName, "Info");
-    }
-    // containerName + childName
-    {
-      String childClassName = child.getClass().getName();
-      String childName = StringUtils.substringAfterLast(childClassName, ".");
-      childName = StringUtils.removeEnd(childName, "Info");
-      //
-      Class<?> clazz = loadClass2(basePackageName, containerName + childName);
-      if (clazz != null) {
-        return clazz;
-      }
-    }
-    // only containerName
-    {
-      Class<?> clazz = loadClass2(basePackageName, containerName);
-      if (clazz != null) {
-        return clazz;
-      }
-    }
-    // no class
-    return null;
-  }
+	/**
+	 * Loads policy {@link Class} from given package and its parents.
+	 */
+	private Class<?> loadClass(String basePackageName) {
+		// name, based on container Class name
+		String containerName;
+		{
+			containerName = StringUtils.substringAfterLast(containerClassName, ".model.");
+			containerName = StringUtils.removeEnd(containerName, "Info");
+		}
+		// containerName + childName
+		{
+			String childClassName = child.getClass().getName();
+			String childName = StringUtils.substringAfterLast(childClassName, ".");
+			childName = StringUtils.removeEnd(childName, "Info");
+			//
+			Class<?> clazz = loadClass2(basePackageName, containerName + childName);
+			if (clazz != null) {
+				return clazz;
+			}
+		}
+		// only containerName
+		{
+			Class<?> clazz = loadClass2(basePackageName, containerName);
+			if (clazz != null) {
+				return clazz;
+			}
+		}
+		// no class
+		return null;
+	}
 
-  /**
-   * Loads policy {@link Class} with given name, from given package and its parents.
-   */
-  private Class<?> loadClass2(String basePackageName, String name) {
-    String baseClassName = basePackageName + ".gef.policy." + name + "SelectionEditPolicy";
-    String packageName = StringUtils.substringBeforeLast(baseClassName, ".");
-    String className = StringUtils.substringAfterLast(baseClassName, ".");
-    // check package and its parents
-    ClassLoader classLoader = container.getClass().getClassLoader();
-    while (packageName.contains(".")) {
-      try {
-        String policyClassName = packageName + "." + className;
-        return classLoader.loadClass(policyClassName);
-      } catch (Throwable e) {
-      }
-      packageName = StringUtils.substringBeforeLast(packageName, ".");
-    }
-    // no class
-    return null;
-  }
+	/**
+	 * Loads policy {@link Class} with given name, from given package and its parents.
+	 */
+	private Class<?> loadClass2(String basePackageName, String name) {
+		String baseClassName = basePackageName + ".gef.policy." + name + "SelectionEditPolicy";
+		String packageName = StringUtils.substringBeforeLast(baseClassName, ".");
+		String className = StringUtils.substringAfterLast(baseClassName, ".");
+		// check package and its parents
+		ClassLoader classLoader = container.getClass().getClassLoader();
+		while (packageName.contains(".")) {
+			try {
+				String policyClassName = packageName + "." + className;
+				return classLoader.loadClass(policyClassName);
+			} catch (Throwable e) {
+			}
+			packageName = StringUtils.substringBeforeLast(packageName, ".");
+		}
+		// no class
+		return null;
+	}
 
-  /**
-   * Attempts to create {@link SelectionEditPolicy} instance using different constructor variants,
-   * may return <code>null</code>.
-   */
-  private SelectionEditPolicy createPolicy(Class<?> selectionPolicyClass) {
-    Constructor<?> constructor = selectionPolicyClass.getConstructors()[0];
-    // container model + child model
-    try {
-      return (SelectionEditPolicy) constructor.newInstance(container, child);
-    } catch (Throwable e) {
-    }
-    // only child model
-    try {
-      return (SelectionEditPolicy) constructor.newInstance(child);
-    } catch (Throwable e) {
-    }
-    // only container model
-    try {
-      return (SelectionEditPolicy) constructor.newInstance(container);
-    } catch (Throwable e) {
-    }
-    // no arguments
-    try {
-      return (SelectionEditPolicy) constructor.newInstance();
-    } catch (Throwable e) {
-    }
-    // fail
-    return null;
-  }
+	/**
+	 * Attempts to create {@link SelectionEditPolicy} instance using different constructor variants,
+	 * may return <code>null</code>.
+	 */
+	private SelectionEditPolicy createPolicy(Class<?> selectionPolicyClass) {
+		Constructor<?> constructor = selectionPolicyClass.getConstructors()[0];
+		// container model + child model
+		try {
+			return (SelectionEditPolicy) constructor.newInstance(container, child);
+		} catch (Throwable e) {
+		}
+		// only child model
+		try {
+			return (SelectionEditPolicy) constructor.newInstance(child);
+		} catch (Throwable e) {
+		}
+		// only container model
+		try {
+			return (SelectionEditPolicy) constructor.newInstance(container);
+		} catch (Throwable e) {
+		}
+		// no arguments
+		try {
+			return (SelectionEditPolicy) constructor.newInstance();
+		} catch (Throwable e) {
+		}
+		// fail
+		return null;
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/layout/generic/SimpleContainerLayoutEditPolicy.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/layout/generic/SimpleContainerLayoutEditPolicy.java
index 5296843df..da5ea44fe 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/layout/generic/SimpleContainerLayoutEditPolicy.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/layout/generic/SimpleContainerLayoutEditPolicy.java
@@ -35,98 +35,98 @@
  * @coverage core.gef.policy
  */
 public final class SimpleContainerLayoutEditPolicy extends LayoutEditPolicy {
-  private final ObjectInfo m_model;
-  private final SimpleContainer m_container;
-  private final ILayoutRequestValidator m_requestValidator;
+	private final ObjectInfo m_model;
+	private final SimpleContainer m_container;
+	private final ILayoutRequestValidator m_requestValidator;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SimpleContainerLayoutEditPolicy(ObjectInfo model, SimpleContainer container) {
-    m_model = model;
-    m_container = container;
-    {
-      ILayoutRequestValidator validator = new AbstractContainerRequestValidator(container);
-      validator = LayoutRequestValidators.cache(validator);
-      m_requestValidator = validator;
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SimpleContainerLayoutEditPolicy(ObjectInfo model, SimpleContainer container) {
+		m_model = model;
+		m_container = container;
+		{
+			ILayoutRequestValidator validator = new AbstractContainerRequestValidator(container);
+			validator = LayoutRequestValidators.cache(validator);
+			m_requestValidator = validator;
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Requests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected ILayoutRequestValidator getRequestValidator() {
-    return m_requestValidator;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Requests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected ILayoutRequestValidator getRequestValidator() {
+		return m_requestValidator;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Feedbacks
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void showLayoutTargetFeedback(Request request) {
-    PolicyUtils.showBorderTargetFeedback(this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Feedbacks
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void showLayoutTargetFeedback(Request request) {
+		PolicyUtils.showBorderTargetFeedback(this);
+	}
 
-  @Override
-  protected void eraseLayoutTargetFeedback(Request request) {
-    PolicyUtils.eraseBorderTargetFeedback(this);
-  }
+	@Override
+	protected void eraseLayoutTargetFeedback(Request request) {
+		PolicyUtils.eraseBorderTargetFeedback(this);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Command getCommand(Request request) {
-    if (!m_container.isEmpty()) {
-      return null;
-    }
-    return super.getCommand(request);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Command getCommand(Request request) {
+		if (!m_container.isEmpty()) {
+			return null;
+		}
+		return super.getCommand(request);
+	}
 
-  @Override
-  protected Command getCreateCommand(final CreateRequest request) {
-    final Object newObject = request.getNewObject();
-    return new EditCommand(m_model) {
-      @Override
-      protected void executeEdit() throws Exception {
-        m_container.command_CREATE(newObject);
-      }
-    };
-  }
+	@Override
+	protected Command getCreateCommand(final CreateRequest request) {
+		final Object newObject = request.getNewObject();
+		return new EditCommand(m_model) {
+			@Override
+			protected void executeEdit() throws Exception {
+				m_container.command_CREATE(newObject);
+			}
+		};
+	}
 
-  @Override
-  protected Command getPasteCommand(PasteRequest request) {
-    return GlobalState.getPasteRequestProcessor().getPasteCommand(
-        request,
-        new IPasteComponentProcessor() {
-          @Override
-          public void process(Object component) throws Exception {
-            m_container.command_CREATE(component);
-          }
-        });
-  }
+	@Override
+	protected Command getPasteCommand(PasteRequest request) {
+		return GlobalState.getPasteRequestProcessor().getPasteCommand(
+				request,
+				new IPasteComponentProcessor() {
+					@Override
+					public void process(Object component) throws Exception {
+						m_container.command_CREATE(component);
+					}
+				});
+	}
 
-  @Override
-  protected Command getAddCommand(ChangeBoundsRequest request) {
-    final List<EditPart> parts = request.getEditParts();
-    if (parts.size() == 1) {
-      return new EditCommand(m_model) {
-        @Override
-        protected void executeEdit() throws Exception {
-          Object object = parts.get(0).getModel();
-          m_container.command_ADD(object);
-        }
-      };
-    }
-    return null;
-  }
+	@Override
+	protected Command getAddCommand(ChangeBoundsRequest request) {
+		final List<EditPart> parts = request.getEditParts();
+		if (parts.size() == 1) {
+			return new EditCommand(m_model) {
+				@Override
+				protected void executeEdit() throws Exception {
+					Object object = parts.get(0).getModel();
+					m_container.command_ADD(object);
+				}
+			};
+		}
+		return null;
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/menu/MenuLayoutEditPolicy.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/menu/MenuLayoutEditPolicy.java
index c0154d9a9..3513f844c 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/menu/MenuLayoutEditPolicy.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/menu/MenuLayoutEditPolicy.java
@@ -37,137 +37,137 @@
  * @coverage core.gef.menu
  */
 public final class MenuLayoutEditPolicy extends AbstractFlowLayoutEditPolicy {
-  private final IMenuInfo m_menu;
-  private final IMenuPolicy m_policy;
+	private final IMenuInfo m_menu;
+	private final IMenuPolicy m_policy;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public MenuLayoutEditPolicy(IMenuInfo menu) {
-    m_menu = menu;
-    m_policy = m_menu.getPolicy();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public MenuLayoutEditPolicy(IMenuInfo menu) {
+		m_menu = menu;
+		m_policy = m_menu.getPolicy();
+	}
 
-  /////////////////////////////////////////////////////////////////////
-  //
-  // AbstractFlowLayoutEditPolicy
-  //
-  /////////////////////////////////////////////////////////////////////
-  @Override
-  protected boolean isHorizontal(Request request) {
-    return m_menu.isHorizontal();
-  }
+	/////////////////////////////////////////////////////////////////////
+	//
+	// AbstractFlowLayoutEditPolicy
+	//
+	/////////////////////////////////////////////////////////////////////
+	@Override
+	protected boolean isHorizontal(Request request) {
+		return m_menu.isHorizontal();
+	}
 
-  @Override
-  protected boolean isGoodReferenceChild(Request request, EditPart editPart) {
-    if (MenuObjectInfoUtils.isImplicitObject(editPart.getModel())) {
-      return false;
-    }
-    return true;
-  }
+	@Override
+	protected boolean isGoodReferenceChild(Request request, EditPart editPart) {
+		if (MenuObjectInfoUtils.isImplicitObject(editPart.getModel())) {
+			return false;
+		}
+		return true;
+	}
 
-  @Override
-  protected Layer getFeedbackLayer() {
-    return getLayer(IEditPartViewer.MENU_FEEDBACK_LAYER);
-  }
+	@Override
+	protected Layer getFeedbackLayer() {
+		return getLayer(IEditPartViewer.MENU_FEEDBACK_LAYER);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // CREATE
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Command getCreateCommand(final Object newObject, final Object referenceObject) {
-    return new Command() {
-      @Override
-      public void execute() throws Exception {
-        m_menu.executeEdit(new RunnableEx() {
-          @Override
-          public void run() throws Exception {
-            m_policy.commandCreate(newObject, referenceObject);
-          }
-        });
-      }
-    };
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// CREATE
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Command getCreateCommand(final Object newObject, final Object referenceObject) {
+		return new Command() {
+			@Override
+			public void execute() throws Exception {
+				m_menu.executeEdit(new RunnableEx() {
+					@Override
+					public void run() throws Exception {
+						m_policy.commandCreate(newObject, referenceObject);
+					}
+				});
+			}
+		};
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // PASTE
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Command getPasteCommand(final PasteRequest request, final Object referenceObject) {
-    return new Command() {
-      @Override
-      public void execute() throws Exception {
-        m_menu.executeEdit(new RunnableEx() {
-          @Override
-          public void run() throws Exception {
-            List<?> pastedObject = m_policy.commandPaste(request.getMemento(), referenceObject);
-            request.setObjects(pastedObject);
-          }
-        });
-      }
-    };
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// PASTE
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Command getPasteCommand(final PasteRequest request, final Object referenceObject) {
+		return new Command() {
+			@Override
+			public void execute() throws Exception {
+				m_menu.executeEdit(new RunnableEx() {
+					@Override
+					public void run() throws Exception {
+						List<?> pastedObject = m_policy.commandPaste(request.getMemento(), referenceObject);
+						request.setObjects(pastedObject);
+					}
+				});
+			}
+		};
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // MOVE
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Command getMoveCommand(final Object moveObject, final Object referenceObject) {
-    return new Command() {
-      @Override
-      public void execute() throws Exception {
-        m_menu.executeEdit(new RunnableEx() {
-          @Override
-          public void run() throws Exception {
-            m_policy.commandMove(moveObject, referenceObject);
-          }
-        });
-      }
-    };
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// MOVE
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Command getMoveCommand(final Object moveObject, final Object referenceObject) {
+		return new Command() {
+			@Override
+			public void execute() throws Exception {
+				m_menu.executeEdit(new RunnableEx() {
+					@Override
+					public void run() throws Exception {
+						m_policy.commandMove(moveObject, referenceObject);
+					}
+				});
+			}
+		};
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Validator
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected ILayoutRequestValidator getRequestValidator() {
-    return VALIDATOR;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Validator
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected ILayoutRequestValidator getRequestValidator() {
+		return VALIDATOR;
+	}
 
-  private final ILayoutRequestValidator VALIDATOR = new ILayoutRequestValidator() {
-    @Override
-    public boolean validateCreateRequest(EditPart host, CreateRequest request) {
-      return m_policy.validateCreate(request.getNewObject());
-    }
+	private final ILayoutRequestValidator VALIDATOR = new ILayoutRequestValidator() {
+		@Override
+		public boolean validateCreateRequest(EditPart host, CreateRequest request) {
+			return m_policy.validateCreate(request.getNewObject());
+		}
 
-    @Override
-    public boolean validatePasteRequest(EditPart host, PasteRequest request) {
-      return m_policy.validatePaste(request.getMemento());
-    }
+		@Override
+		public boolean validatePasteRequest(EditPart host, PasteRequest request) {
+			return m_policy.validatePaste(request.getMemento());
+		}
 
-    @Override
-    public boolean validateMoveRequest(EditPart host, ChangeBoundsRequest request) {
-      for (EditPart editPart : request.getEditParts()) {
-        if (!m_policy.validateMove(editPart.getModel())) {
-          return false;
-        }
-      }
-      return true;
-    }
+		@Override
+		public boolean validateMoveRequest(EditPart host, ChangeBoundsRequest request) {
+			for (EditPart editPart : request.getEditParts()) {
+				if (!m_policy.validateMove(editPart.getModel())) {
+					return false;
+				}
+			}
+			return true;
+		}
 
-    @Override
-    public boolean validateAddRequest(EditPart host, ChangeBoundsRequest request) {
-      return validateMoveRequest(host, request);
-    }
-  };
+		@Override
+		public boolean validateAddRequest(EditPart host, ChangeBoundsRequest request) {
+			return validateMoveRequest(host, request);
+		}
+	};
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/menu/MenuSelectionEditPolicy.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/menu/MenuSelectionEditPolicy.java
index 4b1a24c69..614d35ba5 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/menu/MenuSelectionEditPolicy.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/menu/MenuSelectionEditPolicy.java
@@ -32,65 +32,65 @@
  * @coverage core.gef.menu
  */
 public final class MenuSelectionEditPolicy extends SelectionEditPolicy {
-  private Figure m_selectionFigure;
-  private IAncestorListener m_ancestorListener;
+	private Figure m_selectionFigure;
+	private IAncestorListener m_ancestorListener;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Handles
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected List<Handle> createSelectionHandles() {
-    return Collections.emptyList();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Handles
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected List<Handle> createSelectionHandles() {
+		return Collections.emptyList();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Selection
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void showSelection() {
-    hideSelection();
-    m_selectionFigure = new Figure();
-    m_selectionFigure.setBorder(new LineBorder(IColorConstants.menuBackgroundSelected));
-    updateFeedbackBounds();
-    m_ancestorListener = new IAncestorListener() {
-      @Override
-      public void ancestorMoved(Figure ancestor) {
-        updateFeedbackBounds();
-      }
-    };
-    getHostFigure().addAncestorListener(m_ancestorListener);
-    addFeedback(m_selectionFigure);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Selection
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void showSelection() {
+		hideSelection();
+		m_selectionFigure = new Figure();
+		m_selectionFigure.setBorder(new LineBorder(IColorConstants.menuBackgroundSelected));
+		updateFeedbackBounds();
+		m_ancestorListener = new IAncestorListener() {
+			@Override
+			public void ancestorMoved(Figure ancestor) {
+				updateFeedbackBounds();
+			}
+		};
+		getHostFigure().addAncestorListener(m_ancestorListener);
+		addFeedback(m_selectionFigure);
+	}
 
-  @Override
-  protected void hideSelection() {
-    if (m_selectionFigure != null) {
-      getHostFigure().removeAncestorListener(m_ancestorListener);
-      removeFeedback(m_selectionFigure);
-      m_selectionFigure = null;
-    }
-  }
+	@Override
+	protected void hideSelection() {
+		if (m_selectionFigure != null) {
+			getHostFigure().removeAncestorListener(m_ancestorListener);
+			removeFeedback(m_selectionFigure);
+			m_selectionFigure = null;
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Feedbacks
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Layer getFeedbackLayer() {
-    return getLayer(IEditPartViewer.MENU_FEEDBACK_LAYER);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Feedbacks
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Layer getFeedbackLayer() {
+		return getLayer(IEditPartViewer.MENU_FEEDBACK_LAYER);
+	}
 
-  /**
-   * Updates feedback figure bounds in ancestor listener.
-   */
-  private void updateFeedbackBounds() {
-    Rectangle selectionBounds = getHostFigure().getBounds().getCopy();
-    FigureUtils.translateFigureToFigure(getHostFigure(), m_selectionFigure, selectionBounds);
-    m_selectionFigure.setBounds(selectionBounds);
-  }
+	/**
+	 * Updates feedback figure bounds in ancestor listener.
+	 */
+	private void updateFeedbackBounds() {
+		Rectangle selectionBounds = getHostFigure().getBounds().getCopy();
+		FigureUtils.translateFigureToFigure(getHostFigure(), m_selectionFigure, selectionBounds);
+		m_selectionFigure.setBounds(selectionBounds);
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/menu/SubmenuAwareLayoutEditPolicy.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/menu/SubmenuAwareLayoutEditPolicy.java
index 738877670..7aa44b57e 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/menu/SubmenuAwareLayoutEditPolicy.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/menu/SubmenuAwareLayoutEditPolicy.java
@@ -41,134 +41,134 @@
  * @coverage core.gef.menu
  */
 public final class SubmenuAwareLayoutEditPolicy extends LayoutEditPolicy {
-  private final IMenuObjectInfo m_object;
+	private final IMenuObjectInfo m_object;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SubmenuAwareLayoutEditPolicy(IMenuObjectInfo object) {
-    m_object = object;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SubmenuAwareLayoutEditPolicy(IMenuObjectInfo object) {
+		m_object = object;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Feedbacks
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Layer getFeedbackLayer() {
-    return getLayer(IEditPartViewer.MENU_FEEDBACK_LAYER);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Feedbacks
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Layer getFeedbackLayer() {
+		return getLayer(IEditPartViewer.MENU_FEEDBACK_LAYER);
+	}
 
-  @Override
-  public void showTargetFeedback(Request request) {
-    PolicyUtils.showBorderTargetFeedback(this);
-  }
+	@Override
+	public void showTargetFeedback(Request request) {
+		PolicyUtils.showBorderTargetFeedback(this);
+	}
 
-  @Override
-  public void eraseTargetFeedback(Request request) {
-    PolicyUtils.eraseBorderTargetFeedback(this);
-  }
+	@Override
+	public void eraseTargetFeedback(Request request) {
+		PolicyUtils.eraseBorderTargetFeedback(this);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Request Routing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public EditPart getTargetEditPart(Request request) {
-    // check that we understand this request
-    if (!isRequestCondition(request)) {
-      return null;
-    }
-    // "popup" always shows sub-menu
-    if (getHost() instanceof MenuPopupEditPart) {
-      return getHost();
-    }
-    // if standalone item, no fall through, always show menu
-    if (!(getHost().getParent() instanceof MenuEditPart)) {
-      return getHost();
-    }
-    // check if we have sub-menu for this item
-    if (getSubMenu() == null) {
-      return null;
-    }
-    // prepare location in figure
-    Figure figure = getHostFigure();
-    Point location = ((IDropRequest) request).getLocation().getCopy();
-    FigureUtils.translateAbsoluteToFigure2(figure, location);
-    // if request's mouse location are in middle 1/3 height (width) of figure then return getHost()
-    IMenuInfo parentMenu = ((MenuEditPart) getHost().getParent()).getMenu();
-    if (parentMenu.isHorizontal()) {
-      int halfWidth = figure.getSize().width / 2;
-      if (between(location.x, halfWidth - halfWidth / 4, halfWidth + halfWidth / 4)) {
-        return getHost();
-      }
-    } else {
-      int height = figure.getSize().height;
-      if (between(location.y, height / 2 - height / 3, height / 2 + height / 3)) {
-        return getHost();
-      }
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Request Routing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public EditPart getTargetEditPart(Request request) {
+		// check that we understand this request
+		if (!isRequestCondition(request)) {
+			return null;
+		}
+		// "popup" always shows sub-menu
+		if (getHost() instanceof MenuPopupEditPart) {
+			return getHost();
+		}
+		// if standalone item, no fall through, always show menu
+		if (!(getHost().getParent() instanceof MenuEditPart)) {
+			return getHost();
+		}
+		// check if we have sub-menu for this item
+		if (getSubMenu() == null) {
+			return null;
+		}
+		// prepare location in figure
+		Figure figure = getHostFigure();
+		Point location = ((IDropRequest) request).getLocation().getCopy();
+		FigureUtils.translateAbsoluteToFigure2(figure, location);
+		// if request's mouse location are in middle 1/3 height (width) of figure then return getHost()
+		IMenuInfo parentMenu = ((MenuEditPart) getHost().getParent()).getMenu();
+		if (parentMenu.isHorizontal()) {
+			int halfWidth = figure.getSize().width / 2;
+			if (between(location.x, halfWidth - halfWidth / 4, halfWidth + halfWidth / 4)) {
+				return getHost();
+			}
+		} else {
+			int height = figure.getSize().height;
+			if (between(location.y, height / 2 - height / 3, height / 2 + height / 3)) {
+				return getHost();
+			}
+		}
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private IMenuInfo getSubMenu() {
-    return MenuObjectInfoUtils.getSubMenu(m_object);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private IMenuInfo getSubMenu() {
+		return MenuObjectInfoUtils.getSubMenu(m_object);
+	}
 
-  private static boolean between(int x, int a, int b) {
-    return x >= a && x <= b;
-  }
+	private static boolean between(int x, int a, int b) {
+		return x >= a && x <= b;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Request Validator
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected ILayoutRequestValidator getRequestValidator() {
-    return m_validator;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Request Validator
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected ILayoutRequestValidator getRequestValidator() {
+		return m_validator;
+	}
 
-  private final ILayoutRequestValidator m_validator = new ILayoutRequestValidator() {
-    @Override
-    public boolean validateCreateRequest(EditPart host, CreateRequest request) {
-      IMenuInfo subMenu = getSubMenu();
-      return subMenu != null && subMenu.getPolicy().validateCreate(request.getNewObject());
-    }
+	private final ILayoutRequestValidator m_validator = new ILayoutRequestValidator() {
+		@Override
+		public boolean validateCreateRequest(EditPart host, CreateRequest request) {
+			IMenuInfo subMenu = getSubMenu();
+			return subMenu != null && subMenu.getPolicy().validateCreate(request.getNewObject());
+		}
 
-    @Override
-    public boolean validatePasteRequest(EditPart host, PasteRequest request) {
-      IMenuInfo subMenu = getSubMenu();
-      return subMenu != null && subMenu.getPolicy().validatePaste(request.getMemento());
-    }
+		@Override
+		public boolean validatePasteRequest(EditPart host, PasteRequest request) {
+			IMenuInfo subMenu = getSubMenu();
+			return subMenu != null && subMenu.getPolicy().validatePaste(request.getMemento());
+		}
 
-    @Override
-    public boolean validateMoveRequest(EditPart host, ChangeBoundsRequest request) {
-      IMenuInfo subMenu = getSubMenu();
-      if (subMenu == null) {
-        return false;
-      }
-      // check that each object can be accepted by sub-menu
-      for (EditPart editPart : request.getEditParts()) {
-        if (!subMenu.getPolicy().validateMove(editPart.getModel())) {
-          return false;
-        }
-      }
-      return true;
-    }
+		@Override
+		public boolean validateMoveRequest(EditPart host, ChangeBoundsRequest request) {
+			IMenuInfo subMenu = getSubMenu();
+			if (subMenu == null) {
+				return false;
+			}
+			// check that each object can be accepted by sub-menu
+			for (EditPart editPart : request.getEditParts()) {
+				if (!subMenu.getPolicy().validateMove(editPart.getModel())) {
+					return false;
+				}
+			}
+			return true;
+		}
 
-    @Override
-    public boolean validateAddRequest(EditPart host, ChangeBoundsRequest request) {
-      return validateMoveRequest(host, request);
-    }
-  };
+		@Override
+		public boolean validateAddRequest(EditPart host, ChangeBoundsRequest request) {
+			return validateMoveRequest(host, request);
+		}
+	};
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/snapping/BaselineComponentSnapPoint.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/snapping/BaselineComponentSnapPoint.java
index b00970d66..290e22491 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/snapping/BaselineComponentSnapPoint.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/snapping/BaselineComponentSnapPoint.java
@@ -27,84 +27,84 @@
  * @coverage core.gef.policy.snapping
  */
 public final class BaselineComponentSnapPoint extends ComponentSnapPoint {
-  private int m_baseline;
-  private int m_anchorBaseline;
+	private int m_baseline;
+	private int m_anchorBaseline;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public BaselineComponentSnapPoint(final IVisualDataProvider visualDataProvider,
-      final IAbstractComponentInfo anchorComponent) {
-    super(visualDataProvider, anchorComponent, IPositionConstants.TOP, PlacementInfo.LEADING);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public BaselineComponentSnapPoint(final IVisualDataProvider visualDataProvider,
+			final IAbstractComponentInfo anchorComponent) {
+		super(visualDataProvider, anchorComponent, IPositionConstants.TOP, PlacementInfo.LEADING);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Snap data update
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void calculateSnapPoint(final List<? extends IAbstractComponentInfo> beingSnappedList) {
-    m_anchorChildBounds =
-        PlacementUtils.getTranslatedBounds(m_visualDataProvider, m_anchorComponent);
-    m_snapPoint = m_anchorChildBounds.y + m_anchorBaseline - m_baseline;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Snap data update
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void calculateSnapPoint(final List<? extends IAbstractComponentInfo> beingSnappedList) {
+		m_anchorChildBounds =
+				PlacementUtils.getTranslatedBounds(m_visualDataProvider, m_anchorComponent);
+		m_snapPoint = m_anchorChildBounds.y + m_anchorBaseline - m_baseline;
+	}
 
-  @Override
-  protected Interval getYSnapInterval() {
-    return new Interval(m_anchorChildBounds.y, m_anchorChildBounds.height);
-  }
+	@Override
+	protected Interval getYSnapInterval() {
+		return new Interval(m_anchorChildBounds.y, m_anchorChildBounds.height);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Misc
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected boolean checkDirection() {
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Misc
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected boolean checkDirection() {
+		return false;
+	}
 
-  @Override
-  protected boolean snapAllowed(List<? extends IAbstractComponentInfo> beingSnappedList) {
-    if (super.snapAllowed(beingSnappedList) && !m_isResizing) {
-      // don't snap if multiple components dragged
-      if (beingSnappedList.size() > 1) {
-        return false;
-      }
-      IAbstractComponentInfo beingSnapped = beingSnappedList.get(0);
-      m_baseline = m_visualDataProvider.getBaseline(beingSnapped);
-      // don't allow snap to this point for components that doesn't have baseline value
-      if (m_baseline == IBaselineSupport.NO_BASELINE) {
-        return false;
-      }
-      m_anchorBaseline = m_visualDataProvider.getBaseline(m_anchorComponent);
-      if (m_anchorBaseline == IBaselineSupport.NO_BASELINE) {
-        return false;
-      }
-      return true;
-    }
-    return false;
-  }
+	@Override
+	protected boolean snapAllowed(List<? extends IAbstractComponentInfo> beingSnappedList) {
+		if (super.snapAllowed(beingSnappedList) && !m_isResizing) {
+			// don't snap if multiple components dragged
+			if (beingSnappedList.size() > 1) {
+				return false;
+			}
+			IAbstractComponentInfo beingSnapped = beingSnappedList.get(0);
+			m_baseline = m_visualDataProvider.getBaseline(beingSnapped);
+			// don't allow snap to this point for components that doesn't have baseline value
+			if (m_baseline == IBaselineSupport.NO_BASELINE) {
+				return false;
+			}
+			m_anchorBaseline = m_visualDataProvider.getBaseline(m_anchorComponent);
+			if (m_anchorBaseline == IBaselineSupport.NO_BASELINE) {
+				return false;
+			}
+			return true;
+		}
+		return false;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Feedback
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void addFeedback(final Rectangle snappedBounds,
-      IFeedbackProxy feedbackProxy,
-      final List<Figure> feedbacks) {
-    final Rectangle anchorChildBounds =
-        PlacementUtils.getTranslatedBounds(m_visualDataProvider, m_anchorComponent);
-    final Rectangle unionBounds = snappedBounds.getUnion(anchorChildBounds);
-    unionBounds.expand(8, 0);
-    feedbacks.add(feedbackProxy.addHorizontalFeedbackLine(
-        snappedBounds.y + m_baseline,
-        unionBounds.x,
-        unionBounds.width));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Feedback
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void addFeedback(final Rectangle snappedBounds,
+			IFeedbackProxy feedbackProxy,
+			final List<Figure> feedbacks) {
+		final Rectangle anchorChildBounds =
+				PlacementUtils.getTranslatedBounds(m_visualDataProvider, m_anchorComponent);
+		final Rectangle unionBounds = snappedBounds.getUnion(anchorChildBounds);
+		unionBounds.expand(8, 0);
+		feedbacks.add(feedbackProxy.addHorizontalFeedbackLine(
+				snappedBounds.y + m_baseline,
+				unionBounds.x,
+				unionBounds.width));
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/snapping/ComponentAttachmentInfo.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/snapping/ComponentAttachmentInfo.java
index 7be2f1863..59404d6c1 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/snapping/ComponentAttachmentInfo.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/snapping/ComponentAttachmentInfo.java
@@ -21,47 +21,47 @@
  */
 @Deprecated
 public final class ComponentAttachmentInfo {
-  private final IAbstractComponentInfo m_source;
-  private final IAbstractComponentInfo m_target;
-  private final int m_alignment;
+	private final IAbstractComponentInfo m_source;
+	private final IAbstractComponentInfo m_target;
+	private final int m_alignment;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ComponentAttachmentInfo(IAbstractComponentInfo source,
-      IAbstractComponentInfo target,
-      int alignment) {
-    m_source = source;
-    m_target = target;
-    m_alignment = alignment;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ComponentAttachmentInfo(IAbstractComponentInfo source,
+			IAbstractComponentInfo target,
+			int alignment) {
+		m_source = source;
+		m_target = target;
+		m_alignment = alignment;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public int getAlignment() {
-    return m_alignment;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public int getAlignment() {
+		return m_alignment;
+	}
 
-  public IAbstractComponentInfo getSource() {
-    return m_source;
-  }
+	public IAbstractComponentInfo getSource() {
+		return m_source;
+	}
 
-  public IAbstractComponentInfo getTarget() {
-    return m_target;
-  }
+	public IAbstractComponentInfo getTarget() {
+		return m_target;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // toString
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    return "" + m_source + " -> " + m_target + " by " + m_alignment;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// toString
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		return "" + m_source + " -> " + m_target + " by " + m_alignment;
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/snapping/ComponentSnapPoint.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/snapping/ComponentSnapPoint.java
index 81ad3f9dc..23b73021f 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/snapping/ComponentSnapPoint.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/snapping/ComponentSnapPoint.java
@@ -26,182 +26,182 @@
  * @coverage core.gef.policy.snapping
  */
 public class ComponentSnapPoint extends SnapPoint {
-  protected final IAbstractComponentInfo m_anchorComponent;
-  protected final boolean m_includeGap;
-  protected int m_gap;
-  //
-  protected Rectangle m_anchorChildBounds;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ComponentSnapPoint(final IVisualDataProvider visualDataProvider,
-      final IAbstractComponentInfo anchorComponent,
-      final int side,
-      final int snapDirection) {
-    this(visualDataProvider, anchorComponent, side, snapDirection, false);
-  }
-
-  public ComponentSnapPoint(final IVisualDataProvider visualDataProvider,
-      final IAbstractComponentInfo anchorComponent,
-      final int side,
-      final int snapDirection,
-      final boolean includeGap) {
-    super(visualDataProvider, side, snapDirection);
-    m_anchorComponent = anchorComponent;
-    m_includeGap = includeGap;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Snap point data update
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void calculateSnapPoint(List<? extends IAbstractComponentInfo> beingSnappedList) {
-    super.calculateSnapPoint(beingSnappedList);
-    m_anchorChildBounds =
-        PlacementUtils.getTranslatedBounds(m_visualDataProvider, m_anchorComponent);
-    m_gap = 0;
-    switch (m_side) {
-      case IPositionConstants.LEFT :
-        if (m_includeGap) {
-          m_gap =
-              m_visualDataProvider.getComponentGapValue(
-                  m_nearestBeingSnapped,
-                  m_anchorComponent,
-                  IPositionConstants.LEFT);
-        }
-        m_snapPoint = m_anchorChildBounds.x - m_gap;
-        break;
-      case IPositionConstants.RIGHT :
-        if (m_includeGap) {
-          m_gap =
-              m_visualDataProvider.getComponentGapValue(
-                  m_nearestBeingSnapped,
-                  m_anchorComponent,
-                  IPositionConstants.RIGHT);
-        }
-        m_snapPoint = m_anchorChildBounds.right() + m_gap;
-        break;
-      case IPositionConstants.TOP :
-        if (m_includeGap) {
-          m_gap =
-              m_visualDataProvider.getComponentGapValue(
-                  m_nearestBeingSnapped,
-                  m_anchorComponent,
-                  IPositionConstants.TOP);
-        }
-        m_snapPoint = m_anchorChildBounds.y - m_gap;
-        break;
-      case IPositionConstants.BOTTOM :
-        if (m_includeGap) {
-          m_gap =
-              m_visualDataProvider.getComponentGapValue(
-                  m_nearestBeingSnapped,
-                  m_anchorComponent,
-                  IPositionConstants.BOTTOM);
-        }
-        m_snapPoint =
-            m_includeGap ? m_anchorChildBounds.bottom() + m_gap : m_anchorChildBounds.bottom();
-        break;
-      default :
-        throw new IllegalArgumentException("Invalid side: " + m_side);
-    }
-  }
-
-  @Override
-  protected Interval getXSnapInterval() {
-    if (m_includeGap && !isHorizontal()) {
-      return new Interval(m_anchorChildBounds.x, m_anchorChildBounds.width);
-    }
-    return super.getXSnapInterval();
-  }
-
-  @Override
-  protected Interval getYSnapInterval() {
-    if (m_includeGap && isHorizontal()) {
-      return new Interval(m_anchorChildBounds.y, m_anchorChildBounds.height);
-    }
-    return super.getYSnapInterval();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Feedbacks
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void addFeedback(final Rectangle snappedBounds,
-      IFeedbackProxy feedbackProxy,
-      final List<Figure> feedbacks) {
-    if (isHorizontal()) {
-      feedbacks.add(addVerticalFeedback(m_snapPoint, feedbackProxy, snappedBounds));
-    } else {
-      feedbacks.add(addHorizontalFeedback(m_snapPoint, feedbackProxy, snappedBounds));
-    }
-  }
-
-  protected Figure addHorizontalFeedback(final int y,
-      IFeedbackProxy feedbackProxy,
-      final Rectangle snappedBounds) {
-    final Rectangle anchorChildBounds =
-        PlacementUtils.getTranslatedBounds(m_visualDataProvider, m_anchorComponent);
-    final Rectangle unionBounds = snappedBounds.getUnion(anchorChildBounds);
-    unionBounds.expand(8, 0);
-    return feedbackProxy.addHorizontalFeedbackLine(y, unionBounds.x, unionBounds.width);
-  }
-
-  protected Figure addVerticalFeedback(final int x,
-      IFeedbackProxy feedbackProxy,
-      final Rectangle snappedBounds) {
-    final Rectangle anchorChildBounds =
-        PlacementUtils.getTranslatedBounds(m_visualDataProvider, m_anchorComponent);
-    final Rectangle unionBounds = snappedBounds.getUnion(anchorChildBounds);
-    unionBounds.expand(0, 8);
-    return feedbackProxy.addVerticalFeedbackLine(x, unionBounds.y, unionBounds.height);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Misc
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected boolean snapAllowed(List<? extends IAbstractComponentInfo> beingSnappedList) {
-    return !beingSnappedList.contains(m_anchorComponent);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getObjectInfo() {
-    return " component=" + m_anchorComponent + " gap=" + m_includeGap;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link IAbstractComponentInfo} instance for which this {@link SnapPoint} would snap
-   *         to ("anchor" component).
-   */
-  public final IAbstractComponentInfo getComponent() {
-    return m_anchorComponent;
-  }
-
-  /**
-   * @return the gap value between "anchor" component and nearest component from being snapped
-   *         components list.
-   */
-  public final int getGap() {
-    return m_gap;
-  }
+	protected final IAbstractComponentInfo m_anchorComponent;
+	protected final boolean m_includeGap;
+	protected int m_gap;
+	//
+	protected Rectangle m_anchorChildBounds;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ComponentSnapPoint(final IVisualDataProvider visualDataProvider,
+			final IAbstractComponentInfo anchorComponent,
+			final int side,
+			final int snapDirection) {
+		this(visualDataProvider, anchorComponent, side, snapDirection, false);
+	}
+
+	public ComponentSnapPoint(final IVisualDataProvider visualDataProvider,
+			final IAbstractComponentInfo anchorComponent,
+			final int side,
+			final int snapDirection,
+			final boolean includeGap) {
+		super(visualDataProvider, side, snapDirection);
+		m_anchorComponent = anchorComponent;
+		m_includeGap = includeGap;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Snap point data update
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void calculateSnapPoint(List<? extends IAbstractComponentInfo> beingSnappedList) {
+		super.calculateSnapPoint(beingSnappedList);
+		m_anchorChildBounds =
+				PlacementUtils.getTranslatedBounds(m_visualDataProvider, m_anchorComponent);
+		m_gap = 0;
+		switch (m_side) {
+		case IPositionConstants.LEFT :
+			if (m_includeGap) {
+				m_gap =
+						m_visualDataProvider.getComponentGapValue(
+								m_nearestBeingSnapped,
+								m_anchorComponent,
+								IPositionConstants.LEFT);
+			}
+			m_snapPoint = m_anchorChildBounds.x - m_gap;
+			break;
+		case IPositionConstants.RIGHT :
+			if (m_includeGap) {
+				m_gap =
+						m_visualDataProvider.getComponentGapValue(
+								m_nearestBeingSnapped,
+								m_anchorComponent,
+								IPositionConstants.RIGHT);
+			}
+			m_snapPoint = m_anchorChildBounds.right() + m_gap;
+			break;
+		case IPositionConstants.TOP :
+			if (m_includeGap) {
+				m_gap =
+						m_visualDataProvider.getComponentGapValue(
+								m_nearestBeingSnapped,
+								m_anchorComponent,
+								IPositionConstants.TOP);
+			}
+			m_snapPoint = m_anchorChildBounds.y - m_gap;
+			break;
+		case IPositionConstants.BOTTOM :
+			if (m_includeGap) {
+				m_gap =
+						m_visualDataProvider.getComponentGapValue(
+								m_nearestBeingSnapped,
+								m_anchorComponent,
+								IPositionConstants.BOTTOM);
+			}
+			m_snapPoint =
+					m_includeGap ? m_anchorChildBounds.bottom() + m_gap : m_anchorChildBounds.bottom();
+			break;
+		default :
+			throw new IllegalArgumentException("Invalid side: " + m_side);
+		}
+	}
+
+	@Override
+	protected Interval getXSnapInterval() {
+		if (m_includeGap && !isHorizontal()) {
+			return new Interval(m_anchorChildBounds.x, m_anchorChildBounds.width);
+		}
+		return super.getXSnapInterval();
+	}
+
+	@Override
+	protected Interval getYSnapInterval() {
+		if (m_includeGap && isHorizontal()) {
+			return new Interval(m_anchorChildBounds.y, m_anchorChildBounds.height);
+		}
+		return super.getYSnapInterval();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Feedbacks
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void addFeedback(final Rectangle snappedBounds,
+			IFeedbackProxy feedbackProxy,
+			final List<Figure> feedbacks) {
+		if (isHorizontal()) {
+			feedbacks.add(addVerticalFeedback(m_snapPoint, feedbackProxy, snappedBounds));
+		} else {
+			feedbacks.add(addHorizontalFeedback(m_snapPoint, feedbackProxy, snappedBounds));
+		}
+	}
+
+	protected Figure addHorizontalFeedback(final int y,
+			IFeedbackProxy feedbackProxy,
+			final Rectangle snappedBounds) {
+		final Rectangle anchorChildBounds =
+				PlacementUtils.getTranslatedBounds(m_visualDataProvider, m_anchorComponent);
+		final Rectangle unionBounds = snappedBounds.getUnion(anchorChildBounds);
+		unionBounds.expand(8, 0);
+		return feedbackProxy.addHorizontalFeedbackLine(y, unionBounds.x, unionBounds.width);
+	}
+
+	protected Figure addVerticalFeedback(final int x,
+			IFeedbackProxy feedbackProxy,
+			final Rectangle snappedBounds) {
+		final Rectangle anchorChildBounds =
+				PlacementUtils.getTranslatedBounds(m_visualDataProvider, m_anchorComponent);
+		final Rectangle unionBounds = snappedBounds.getUnion(anchorChildBounds);
+		unionBounds.expand(0, 8);
+		return feedbackProxy.addVerticalFeedbackLine(x, unionBounds.y, unionBounds.height);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Misc
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected boolean snapAllowed(List<? extends IAbstractComponentInfo> beingSnappedList) {
+		return !beingSnappedList.contains(m_anchorComponent);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getObjectInfo() {
+		return " component=" + m_anchorComponent + " gap=" + m_includeGap;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link IAbstractComponentInfo} instance for which this {@link SnapPoint} would snap
+	 *         to ("anchor" component).
+	 */
+	public final IAbstractComponentInfo getComponent() {
+		return m_anchorComponent;
+	}
+
+	/**
+	 * @return the gap value between "anchor" component and nearest component from being snapped
+	 *         components list.
+	 */
+	public final int getGap() {
+		return m_gap;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/snapping/ContainerSnapPoint.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/snapping/ContainerSnapPoint.java
index c2bada325..f749d9d6c 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/snapping/ContainerSnapPoint.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/snapping/ContainerSnapPoint.java
@@ -26,83 +26,83 @@
  * @coverage core.gef.policy.snapping
  */
 public class ContainerSnapPoint extends SnapPoint {
-  protected Dimension m_containerSize;
-  private final boolean m_includeGap;
+	protected Dimension m_containerSize;
+	private final boolean m_includeGap;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ContainerSnapPoint(IVisualDataProvider visualDataProvider, int side) {
-    this(visualDataProvider, side, false);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ContainerSnapPoint(IVisualDataProvider visualDataProvider, int side) {
+		this(visualDataProvider, side, false);
+	}
 
-  public ContainerSnapPoint(IVisualDataProvider visualDataProvider, int side, boolean includeGap) {
-    super(visualDataProvider, side, side == IPositionConstants.LEFT
-        || side == IPositionConstants.TOP ? PlacementInfo.LEADING : PlacementInfo.TRAILING);
-    m_includeGap = includeGap;
-  }
+	public ContainerSnapPoint(IVisualDataProvider visualDataProvider, int side, boolean includeGap) {
+		super(visualDataProvider, side, side == IPositionConstants.LEFT
+				|| side == IPositionConstants.TOP ? PlacementInfo.LEADING : PlacementInfo.TRAILING);
+		m_includeGap = includeGap;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Snap point data update
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void calculateSnapPoint(final List<? extends IAbstractComponentInfo> beingSnappedList) {
-    super.calculateSnapPoint(beingSnappedList);
-    m_containerSize = m_visualDataProvider.getContainerSize();
-    int gapValue = m_visualDataProvider.getContainerGapValue(m_nearestBeingSnapped, m_side);
-    switch (m_side) {
-      case IPositionConstants.TOP :
-      case IPositionConstants.LEFT :
-        m_snapPoint = m_includeGap ? gapValue : 0;
-        break;
-      case IPositionConstants.BOTTOM :
-        m_snapPoint = m_includeGap ? m_containerSize.height - gapValue : m_containerSize.height;
-        break;
-      case IPositionConstants.RIGHT :
-        m_snapPoint = m_includeGap ? m_containerSize.width - gapValue : m_containerSize.width;
-        break;
-      default :
-        break;
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Snap point data update
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void calculateSnapPoint(final List<? extends IAbstractComponentInfo> beingSnappedList) {
+		super.calculateSnapPoint(beingSnappedList);
+		m_containerSize = m_visualDataProvider.getContainerSize();
+		int gapValue = m_visualDataProvider.getContainerGapValue(m_nearestBeingSnapped, m_side);
+		switch (m_side) {
+		case IPositionConstants.TOP :
+		case IPositionConstants.LEFT :
+			m_snapPoint = m_includeGap ? gapValue : 0;
+			break;
+		case IPositionConstants.BOTTOM :
+			m_snapPoint = m_includeGap ? m_containerSize.height - gapValue : m_containerSize.height;
+			break;
+		case IPositionConstants.RIGHT :
+			m_snapPoint = m_includeGap ? m_containerSize.width - gapValue : m_containerSize.width;
+			break;
+		default :
+			break;
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Feedbacks
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void addFeedback(Rectangle snappedBounds,
-      IFeedbackProxy feedbackProxy,
-      List<Figure> feedbacks) {
-    if (isHorizontal()) {
-      feedbacks.add(feedbackProxy.addVerticalFeedbackLine(m_snapPoint, 0, m_containerSize.height));
-    } else {
-      feedbacks.add(feedbackProxy.addHorizontalFeedbackLine(m_snapPoint, 0, m_containerSize.width));
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Feedbacks
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void addFeedback(Rectangle snappedBounds,
+			IFeedbackProxy feedbackProxy,
+			List<Figure> feedbacks) {
+		if (isHorizontal()) {
+			feedbacks.add(feedbackProxy.addVerticalFeedbackLine(m_snapPoint, 0, m_containerSize.height));
+		} else {
+			feedbacks.add(feedbackProxy.addHorizontalFeedbackLine(m_snapPoint, 0, m_containerSize.width));
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Misc
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected boolean checkDirection() {
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Misc
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected boolean checkDirection() {
+		return false;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getObjectInfo() {
-    return " gap=" + m_includeGap;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getObjectInfo() {
+		return " gap=" + m_includeGap;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/snapping/IAbsoluteLayoutCommands.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/snapping/IAbsoluteLayoutCommands.java
index 5b03ab47a..4c491bd2e 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/snapping/IAbsoluteLayoutCommands.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/snapping/IAbsoluteLayoutCommands.java
@@ -27,195 +27,195 @@
  * @coverage core.gef.policy.snapping
  */
 public interface IAbsoluteLayoutCommands {
-  /**
-   * Determines whether the <code>widget</code> is attached by <code>side</code> to another widget
-   * or parent container.
-   */
-  boolean isAttached(IAbstractComponentInfo widget, int side) throws Exception;
-
-  /**
-   * Removes the attachment by <code>side</code> for <code>widget</code>.
-   */
-  void detach(IAbstractComponentInfo widget, int side) throws Exception;
-
-  /**
-   * Attaches the <code>widget</code> to another <code>attachToWidget</code> in sequential position.
-   *
-   * @param widget
-   *          the source widget to be attached.
-   * @param attachToWidget
-   *          the target widget for <code>widget</code> to be attached.
-   * @param side
-   *          the side of the source widget to be attached. Note, in sequential position the source
-   *          widget's leading side would be attached to trailing side of target widget and vice
-   *          versa.
-   * @param distance
-   *          the distance between widgets, usually this value is similar to
-   *          {@link LayoutStyle#getPreferredGap()} or the same.
-   */
-  void attachWidgetSequientially(IAbstractComponentInfo widget,
-      IAbstractComponentInfo attachToWidget,
-      int side,
-      int distance) throws Exception;
-
-  /**
-   * Attaches the <code>widget</code> to another <code>attachToWidget</code> in parallel position.
-   *
-   * @param widget
-   *          the source widget to be attached.
-   * @param attachToWidget
-   *          the target widget for <code>widget</code> to be attached.
-   * @param side
-   *          the side of the source widget to be attached. Note, in parallel position the source
-   *          widget's leading side would be attached to leading side of target widget and same for
-   *          trailing sides.
-   * @param distance
-   *          the distance between same sides widgets, ex., offset between left side of
-   *          <code>widget</code> and left side of <code>attachToWidget</code>.
-   */
-  void attachWidgetParallelly(IAbstractComponentInfo widget,
-      IAbstractComponentInfo attachToWidget,
-      int side,
-      int distance) throws Exception;
-
-  /**
-   * Attaches the <code>widget</code> to another <code>attachToWidget</code> in baseline position.
-   *
-   * @param widget
-   *          the source widget to be attached.
-   * @param attachToWidget
-   *          the target widget for <code>widget</code> to be attached.
-   */
-  void attachWidgetBaseline(IAbstractComponentInfo widget, IAbstractComponentInfo attachedToWidget)
-      throws Exception;
-
-  /**
-   * @param side
-   *          the side of the widget which attachment to adjust.
-   * @param moveDelta
-   *          the value to adjust the distance. delta < 0 if widget moved/resized in leading
-   *          direction (no matter it grows or shrinks while resizing), otherwise the widget
-   *          moved/resized in trailing direction.
-   */
-  void adjustAttachmentOffset(IAbstractComponentInfo widget, int side, int moveDelta)
-      throws Exception;
-
-  /**
-   * Binds the <code>widget</code> by <code>side</code> inside parent container.
-   *
-   * @param widget
-   *          the widget to be bound.
-   * @param side
-   *          the side of the widget to be bound.
-   * @param distance
-   *          the distance to the container's boundary in direction determined by <code>side</code>.
-   */
-  void attachAbsolute(IAbstractComponentInfo widget, int side, int distance) throws Exception;
-
-  /**
-   * Returns sibling widget to which <code>widget</code> attached by given <code>side</code> to
-   * another widget. Otherwise returns <code>null</code>. Parent container is not sibling, so also
-   * <code>null</code> returned.
-   *
-   * @param widget
-   *          the widget to check.
-   * @param side
-   *          the side of the widget to be checked.
-   */
-  IAbstractComponentInfo getAttachedToWidget(IAbstractComponentInfo widget, int side)
-      throws Exception;
-
-  /**
-   * Explicitly sets the side of the <code>widget</code>. In this case the size of the widget
-   * wouldn't be ruled by the layout (in those layouts which allows is).
-   *
-   * @param widget
-   *          the widget to set size.
-   * @param side
-   *          the side of the widget which is currently attached.
-   * @param draggingSide
-   *          the side of the widget currently dragged by.
-   * @param resizeDelta
-   *          the value to change the size of the widget.
-   *
-   */
-  void setExplicitSize(IAbstractComponentInfo widget, int side, int draggingSide, int resizeDelta)
-      throws Exception;
-
-  /**
-   *
-   * TODO: comment on IAbsoluteLayoutCommands.performAction()
-   *
-   * Not implemented yet and subject to change.
-   *
-   * @param actionId
-   */
-  void performAction(int actionId);
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Stub
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  IAbsoluteLayoutCommands EMPTY = new AbsoluteLayoutCommandsStub();
-
-  public class AbsoluteLayoutCommandsStub implements IAbsoluteLayoutCommands {
-    @Override
-    public IAbstractComponentInfo getAttachedToWidget(IAbstractComponentInfo widget, int side)
-        throws Exception {
-      return null;
-    }
-
-    @Override
-    public void adjustAttachmentOffset(IAbstractComponentInfo widget, int side, int moveDelta)
-        throws Exception {
-    }
-
-    @Override
-    public void attachAbsolute(IAbstractComponentInfo widget, int side, int distance)
-        throws Exception {
-    }
-
-    @Override
-    public void attachWidgetParallelly(IAbstractComponentInfo widget,
-        IAbstractComponentInfo attachToComponent,
-        int side,
-        int distance) throws Exception {
-    }
-
-    @Override
-    public void attachWidgetSequientially(IAbstractComponentInfo widget,
-        IAbstractComponentInfo attachToComponent,
-        int side,
-        int distance) throws Exception {
-    }
-
-    @Override
-    public void attachWidgetBaseline(IAbstractComponentInfo widget,
-        IAbstractComponentInfo attachedToWidget) {
-    }
-
-    @Override
-    public void detach(IAbstractComponentInfo widget, int side) throws Exception {
-    }
-
-    @Override
-    public boolean isAttached(IAbstractComponentInfo widget, int side) throws Exception {
-      return false;
-    }
-
-    @Override
-    public void setExplicitSize(IAbstractComponentInfo widget,
-        int side,
-        int draggingSide,
-        int resizeDelta) throws Exception {
-    }
-
-    public void lockSide(IAbstractComponentInfo widget, int side) throws Exception {
-    }
-
-    @Override
-    public void performAction(int actionId) {
-    }
-  }
+	/**
+	 * Determines whether the <code>widget</code> is attached by <code>side</code> to another widget
+	 * or parent container.
+	 */
+	boolean isAttached(IAbstractComponentInfo widget, int side) throws Exception;
+
+	/**
+	 * Removes the attachment by <code>side</code> for <code>widget</code>.
+	 */
+	void detach(IAbstractComponentInfo widget, int side) throws Exception;
+
+	/**
+	 * Attaches the <code>widget</code> to another <code>attachToWidget</code> in sequential position.
+	 *
+	 * @param widget
+	 *          the source widget to be attached.
+	 * @param attachToWidget
+	 *          the target widget for <code>widget</code> to be attached.
+	 * @param side
+	 *          the side of the source widget to be attached. Note, in sequential position the source
+	 *          widget's leading side would be attached to trailing side of target widget and vice
+	 *          versa.
+	 * @param distance
+	 *          the distance between widgets, usually this value is similar to
+	 *          {@link LayoutStyle#getPreferredGap()} or the same.
+	 */
+	void attachWidgetSequientially(IAbstractComponentInfo widget,
+			IAbstractComponentInfo attachToWidget,
+			int side,
+			int distance) throws Exception;
+
+	/**
+	 * Attaches the <code>widget</code> to another <code>attachToWidget</code> in parallel position.
+	 *
+	 * @param widget
+	 *          the source widget to be attached.
+	 * @param attachToWidget
+	 *          the target widget for <code>widget</code> to be attached.
+	 * @param side
+	 *          the side of the source widget to be attached. Note, in parallel position the source
+	 *          widget's leading side would be attached to leading side of target widget and same for
+	 *          trailing sides.
+	 * @param distance
+	 *          the distance between same sides widgets, ex., offset between left side of
+	 *          <code>widget</code> and left side of <code>attachToWidget</code>.
+	 */
+	void attachWidgetParallelly(IAbstractComponentInfo widget,
+			IAbstractComponentInfo attachToWidget,
+			int side,
+			int distance) throws Exception;
+
+	/**
+	 * Attaches the <code>widget</code> to another <code>attachToWidget</code> in baseline position.
+	 *
+	 * @param widget
+	 *          the source widget to be attached.
+	 * @param attachToWidget
+	 *          the target widget for <code>widget</code> to be attached.
+	 */
+	void attachWidgetBaseline(IAbstractComponentInfo widget, IAbstractComponentInfo attachedToWidget)
+			throws Exception;
+
+	/**
+	 * @param side
+	 *          the side of the widget which attachment to adjust.
+	 * @param moveDelta
+	 *          the value to adjust the distance. delta < 0 if widget moved/resized in leading
+	 *          direction (no matter it grows or shrinks while resizing), otherwise the widget
+	 *          moved/resized in trailing direction.
+	 */
+	void adjustAttachmentOffset(IAbstractComponentInfo widget, int side, int moveDelta)
+			throws Exception;
+
+	/**
+	 * Binds the <code>widget</code> by <code>side</code> inside parent container.
+	 *
+	 * @param widget
+	 *          the widget to be bound.
+	 * @param side
+	 *          the side of the widget to be bound.
+	 * @param distance
+	 *          the distance to the container's boundary in direction determined by <code>side</code>.
+	 */
+	void attachAbsolute(IAbstractComponentInfo widget, int side, int distance) throws Exception;
+
+	/**
+	 * Returns sibling widget to which <code>widget</code> attached by given <code>side</code> to
+	 * another widget. Otherwise returns <code>null</code>. Parent container is not sibling, so also
+	 * <code>null</code> returned.
+	 *
+	 * @param widget
+	 *          the widget to check.
+	 * @param side
+	 *          the side of the widget to be checked.
+	 */
+	IAbstractComponentInfo getAttachedToWidget(IAbstractComponentInfo widget, int side)
+			throws Exception;
+
+	/**
+	 * Explicitly sets the side of the <code>widget</code>. In this case the size of the widget
+	 * wouldn't be ruled by the layout (in those layouts which allows is).
+	 *
+	 * @param widget
+	 *          the widget to set size.
+	 * @param side
+	 *          the side of the widget which is currently attached.
+	 * @param draggingSide
+	 *          the side of the widget currently dragged by.
+	 * @param resizeDelta
+	 *          the value to change the size of the widget.
+	 *
+	 */
+	void setExplicitSize(IAbstractComponentInfo widget, int side, int draggingSide, int resizeDelta)
+			throws Exception;
+
+	/**
+	 *
+	 * TODO: comment on IAbsoluteLayoutCommands.performAction()
+	 *
+	 * Not implemented yet and subject to change.
+	 *
+	 * @param actionId
+	 */
+	void performAction(int actionId);
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Stub
+	//
+	////////////////////////////////////////////////////////////////////////////
+	IAbsoluteLayoutCommands EMPTY = new AbsoluteLayoutCommandsStub();
+
+	public class AbsoluteLayoutCommandsStub implements IAbsoluteLayoutCommands {
+		@Override
+		public IAbstractComponentInfo getAttachedToWidget(IAbstractComponentInfo widget, int side)
+				throws Exception {
+			return null;
+		}
+
+		@Override
+		public void adjustAttachmentOffset(IAbstractComponentInfo widget, int side, int moveDelta)
+				throws Exception {
+		}
+
+		@Override
+		public void attachAbsolute(IAbstractComponentInfo widget, int side, int distance)
+				throws Exception {
+		}
+
+		@Override
+		public void attachWidgetParallelly(IAbstractComponentInfo widget,
+				IAbstractComponentInfo attachToComponent,
+				int side,
+				int distance) throws Exception {
+		}
+
+		@Override
+		public void attachWidgetSequientially(IAbstractComponentInfo widget,
+				IAbstractComponentInfo attachToComponent,
+				int side,
+				int distance) throws Exception {
+		}
+
+		@Override
+		public void attachWidgetBaseline(IAbstractComponentInfo widget,
+				IAbstractComponentInfo attachedToWidget) {
+		}
+
+		@Override
+		public void detach(IAbstractComponentInfo widget, int side) throws Exception {
+		}
+
+		@Override
+		public boolean isAttached(IAbstractComponentInfo widget, int side) throws Exception {
+			return false;
+		}
+
+		@Override
+		public void setExplicitSize(IAbstractComponentInfo widget,
+				int side,
+				int draggingSide,
+				int resizeDelta) throws Exception {
+		}
+
+		public void lockSide(IAbstractComponentInfo widget, int side) throws Exception {
+		}
+
+		@Override
+		public void performAction(int actionId) {
+		}
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/snapping/IFeedbackProxy.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/snapping/IFeedbackProxy.java
index bcdab7a34..f6d18c29d 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/snapping/IFeedbackProxy.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/snapping/IFeedbackProxy.java
@@ -21,28 +21,28 @@
  * @coverage core.gef.policy.snapping
  */
 public interface IFeedbackProxy {
-  /**
-   * Create vertical line feedback for feedback layer.
-   */
-  Figure addVerticalFeedbackLine(int x, int y, int height);
+	/**
+	 * Create vertical line feedback for feedback layer.
+	 */
+	Figure addVerticalFeedbackLine(int x, int y, int height);
 
-  /**
-   * Create horizontal line feedback for feedback layer.
-   */
-  Figure addHorizontalFeedbackLine(int y, int x, int width);
+	/**
+	 * Create horizontal line feedback for feedback layer.
+	 */
+	Figure addHorizontalFeedbackLine(int y, int x, int width);
 
-  /**
-   * Create vertical middle line feedback for feedback layer.
-   */
-  Figure addVerticalMiddleLineFeedback(int x, int y, int height);
+	/**
+	 * Create vertical middle line feedback for feedback layer.
+	 */
+	Figure addVerticalMiddleLineFeedback(int x, int y, int height);
 
-  /**
-   * Create horizontal middle line feedback for feedback layer.
-   */
-  Figure addHorizontalMiddleLineFeedback(int y, int x, int width);
+	/**
+	 * Create horizontal middle line feedback for feedback layer.
+	 */
+	Figure addHorizontalMiddleLineFeedback(int y, int x, int width);
 
-  /**
-   * Create outline feedback for feedback layer.
-   */
-  Figure addOutlineFeedback(Rectangle bounds);
+	/**
+	 * Create outline feedback for feedback layer.
+	 */
+	Figure addOutlineFeedback(Rectangle bounds);
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/snapping/ISnapPointsListener.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/snapping/ISnapPointsListener.java
index bd43ff106..1a91ddcdc 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/snapping/ISnapPointsListener.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/snapping/ISnapPointsListener.java
@@ -22,8 +22,8 @@
  * @author mitin_aa
  */
 public interface ISnapPointsListener {
-  void boundsChanged(Rectangle bounds,
-      List<? extends IAbstractComponentInfo> components,
-      SnapPoint[] snapPoints,
-      int[] directions);
+	void boundsChanged(Rectangle bounds,
+			List<? extends IAbstractComponentInfo> components,
+			SnapPoint[] snapPoints,
+			int[] directions);
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/snapping/ISnapPointsProvider.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/snapping/ISnapPointsProvider.java
index 632b7e7bb..aebbee234 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/snapping/ISnapPointsProvider.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/snapping/ISnapPointsProvider.java
@@ -20,22 +20,22 @@
  * @author mitin_aa
  */
 public interface ISnapPointsProvider {
-  /**
-   * Return list of the snap points for <code>target</code> component. Called for every component
-   * provided in <code>allComponents</code> argument in the SnapPoints constructor.
-   *
-   * @param target
-   *          the component for which returned snap points are related.
-   * @param isHorizontal
-   *          by vertical or horizontal dimension.
-   */
-  List<SnapPoint> forComponent(IAbstractComponentInfo target, boolean isHorizontal);
+	/**
+	 * Return list of the snap points for <code>target</code> component. Called for every component
+	 * provided in <code>allComponents</code> argument in the SnapPoints constructor.
+	 *
+	 * @param target
+	 *          the component for which returned snap points are related.
+	 * @param isHorizontal
+	 *          by vertical or horizontal dimension.
+	 */
+	List<SnapPoint> forComponent(IAbstractComponentInfo target, boolean isHorizontal);
 
-  /**
-   * Return list of the snap points for container of the components.
-   *
-   * @param isHorizontal
-   *          by vertical or horizontal dimension.
-   */
-  List<SnapPoint> forContainer(boolean isHorizontal);
+	/**
+	 * Return list of the snap points for container of the components.
+	 *
+	 * @param isHorizontal
+	 *          by vertical or horizontal dimension.
+	 */
+	List<SnapPoint> forContainer(boolean isHorizontal);
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/snapping/IVisualDataProvider.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/snapping/IVisualDataProvider.java
index 7b9c35963..309422762 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/snapping/IVisualDataProvider.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/snapping/IVisualDataProvider.java
@@ -24,80 +24,80 @@
  * @coverage core.gef.policy.snapping
  */
 public interface IVisualDataProvider {
-  /**
-   * @param component
-   *          A component model for which baseline value is requested. May not be null. Should
-   *          return {@link #NO_BASELINE} in case if the component has no baseline.
-   * @return Baseline value.
-   */
-  int getBaseline(IAbstractComponentInfo component);
+	/**
+	 * @param component
+	 *          A component model for which baseline value is requested. May not be null. Should
+	 *          return {@link #NO_BASELINE} in case if the component has no baseline.
+	 * @return Baseline value.
+	 */
+	int getBaseline(IAbstractComponentInfo component);
 
-  /**
-   * @param component
-   *          A component model for which gap to border of parent container is returned. May not be
-   *          null.
-   * @param direction
-   *          Determines a side of parent container for which gap value is requested. Valid values
-   *          are {@link IPositionConstants#LEFT}, {@link IPositionConstants#RIGHT},
-   *          {@link IPositionConstants#TOP}, {@link IPositionConstants#BOTTOM}.
-   * @return Gap value for container.
-   */
-  int getContainerGapValue(IAbstractComponentInfo component, int direction);
+	/**
+	 * @param component
+	 *          A component model for which gap to border of parent container is returned. May not be
+	 *          null.
+	 * @param direction
+	 *          Determines a side of parent container for which gap value is requested. Valid values
+	 *          are {@link IPositionConstants#LEFT}, {@link IPositionConstants#RIGHT},
+	 *          {@link IPositionConstants#TOP}, {@link IPositionConstants#BOTTOM}.
+	 * @return Gap value for container.
+	 */
+	int getContainerGapValue(IAbstractComponentInfo component, int direction);
 
-  /**
-   * Returns gap value between two components.
-   *
-   * @param component1
-   *          First component model, may not be null.
-   * @param component2
-   *          Second component model, may not be null.
-   * @param direction
-   *          Determines a side of component1 in which gap to component2 is requested.
-   * @return Gap value between component1 and component2.
-   */
-  int getComponentGapValue(IAbstractComponentInfo component1,
-      IAbstractComponentInfo component2,
-      int direction);
+	/**
+	 * Returns gap value between two components.
+	 *
+	 * @param component1
+	 *          First component model, may not be null.
+	 * @param component2
+	 *          Second component model, may not be null.
+	 * @param direction
+	 *          Determines a side of component1 in which gap to component2 is requested.
+	 * @return Gap value between component1 and component2.
+	 */
+	int getComponentGapValue(IAbstractComponentInfo component1,
+			IAbstractComponentInfo component2,
+			int direction);
 
-  /**
-   * @return Current size of parent container.
-   */
-  Dimension getContainerSize();
+	/**
+	 * @return Current size of parent container.
+	 */
+	Dimension getContainerSize();
 
-  /**
-   * @return the top-left offset at which container's client area starts.
-   */
-  Point getClientAreaOffset();
+	/**
+	 * @return the top-left offset at which container's client area starts.
+	 */
+	Point getClientAreaOffset();
 
-  /**
-   * @param component
-   *          A component which preferred size is requested. May not be null.
-   * @return Component's preferred size or null if component preferred size cannot be retrieved.
-   */
-  Dimension getComponentPreferredSize(IAbstractComponentInfo component);
+	/**
+	 * @param component
+	 *          A component which preferred size is requested. May not be null.
+	 * @return Component's preferred size or null if component preferred size cannot be retrieved.
+	 */
+	Dimension getComponentPreferredSize(IAbstractComponentInfo component);
 
-  /**
-   * @return a X grid step value for this layout
-   */
-  int getGridStepX();
+	/**
+	 * @return a X grid step value for this layout
+	 */
+	int getGridStepX();
 
-  /**
-   * @return a Y grid step value for this layout
-   */
-  int getGridStepY();
+	/**
+	 * @return a Y grid step value for this layout
+	 */
+	int getGridStepY();
 
-  /**
-   * @return <code>true</code> if "free mode" snapping enabled for the layout
-   */
-  boolean useFreeSnapping();
+	/**
+	 * @return <code>true</code> if "free mode" snapping enabled for the layout
+	 */
+	boolean useFreeSnapping();
 
-  /**
-   * @return <code>true</code> if grid snapping enabled for the layout
-   */
-  boolean useGridSnapping();
+	/**
+	 * @return <code>true</code> if grid snapping enabled for the layout
+	 */
+	boolean useGridSnapping();
 
-  /**
-   * @return <code>true</code> when snapping should be disabled
-   */
-  boolean isSuppressingSnapping();
+	/**
+	 * @return <code>true</code> when snapping should be disabled
+	 */
+	boolean isSuppressingSnapping();
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/snapping/IndentedComponentSnapPoint.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/snapping/IndentedComponentSnapPoint.java
index 0c6e319d7..ee30ce626 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/snapping/IndentedComponentSnapPoint.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/snapping/IndentedComponentSnapPoint.java
@@ -29,75 +29,75 @@
  * @coverage core.gef.policy.snapping
  */
 public class IndentedComponentSnapPoint extends ComponentSnapPoint {
-  public static final int INDENT = 10;
+	public static final int INDENT = 10;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public IndentedComponentSnapPoint(IVisualDataProvider visualDataProvider,
-      IAbstractComponentInfo anchorComponent) {
-    super(visualDataProvider, anchorComponent, IPositionConstants.LEFT, PlacementInfo.LEADING);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public IndentedComponentSnapPoint(IVisualDataProvider visualDataProvider,
+			IAbstractComponentInfo anchorComponent) {
+		super(visualDataProvider, anchorComponent, IPositionConstants.LEFT, PlacementInfo.LEADING);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Update snapping data
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void calculateSnapPoint(List<? extends IAbstractComponentInfo> beingSnappedList) {
-    super.calculateSnapPoint(beingSnappedList);
-    m_gap =
-        m_visualDataProvider.getComponentGapValue(
-            getNearestComponentToSide(beingSnappedList),
-            m_anchorComponent,
-            IPositionConstants.BOTTOM);
-    //
-    m_snapPoint = m_anchorChildBounds.x + INDENT;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Update snapping data
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void calculateSnapPoint(List<? extends IAbstractComponentInfo> beingSnappedList) {
+		super.calculateSnapPoint(beingSnappedList);
+		m_gap =
+				m_visualDataProvider.getComponentGapValue(
+						getNearestComponentToSide(beingSnappedList),
+						m_anchorComponent,
+						IPositionConstants.BOTTOM);
+		//
+		m_snapPoint = m_anchorChildBounds.x + INDENT;
+	}
 
-  @Override
-  protected Interval getXSnapInterval() {
-    return new Interval(m_anchorChildBounds.x, m_anchorChildBounds.width);
-  }
+	@Override
+	protected Interval getXSnapInterval() {
+		return new Interval(m_anchorChildBounds.x, m_anchorChildBounds.width);
+	}
 
-  @Override
-  protected Interval getYSnapInterval() {
-    return new Interval(m_anchorChildBounds.bottom(), m_gap * 2);
-  }
+	@Override
+	protected Interval getYSnapInterval() {
+		return new Interval(m_anchorChildBounds.bottom(), m_gap * 2);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Feedbacks
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void addFeedback(Rectangle snappedBounds,
-      IFeedbackProxy feedbackProxy,
-      List<Figure> feedbacks) {
-    final Rectangle anchorChildBounds =
-        PlacementUtils.getTranslatedBounds(m_visualDataProvider, m_anchorComponent);
-    final Rectangle expCandidateBounds = anchorChildBounds.getCopy().expand(0, 8);
-    feedbacks.add(feedbackProxy.addVerticalFeedbackLine(
-        expCandidateBounds.x,
-        expCandidateBounds.y,
-        expCandidateBounds.height));
-    final Rectangle expBounds = snappedBounds.getCopy().expand(0, 8);
-    feedbacks.add(feedbackProxy.addVerticalFeedbackLine(
-        snappedBounds.x,
-        expBounds.y,
-        expBounds.height));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Feedbacks
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void addFeedback(Rectangle snappedBounds,
+			IFeedbackProxy feedbackProxy,
+			List<Figure> feedbacks) {
+		final Rectangle anchorChildBounds =
+				PlacementUtils.getTranslatedBounds(m_visualDataProvider, m_anchorComponent);
+		final Rectangle expCandidateBounds = anchorChildBounds.getCopy().expand(0, 8);
+		feedbacks.add(feedbackProxy.addVerticalFeedbackLine(
+				expCandidateBounds.x,
+				expCandidateBounds.y,
+				expCandidateBounds.height));
+		final Rectangle expBounds = snappedBounds.getCopy().expand(0, 8);
+		feedbacks.add(feedbackProxy.addVerticalFeedbackLine(
+				snappedBounds.x,
+				expBounds.y,
+				expBounds.height));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Misc
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected boolean checkDirection() {
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Misc
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected boolean checkDirection() {
+		return false;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/snapping/PlacementInfo.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/snapping/PlacementInfo.java
index e1154c236..f31201c55 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/snapping/PlacementInfo.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/snapping/PlacementInfo.java
@@ -25,105 +25,105 @@
  * @coverage core.gef.policy.snapping
  */
 public final class PlacementInfo {
-  // constants
-  // directions
-  public static final int LEADING = 0;
-  public static final int TRAILING = 1;
-  public static final int UNDEFINED = -1;
-  // distance
-  public static final int UNDEFINED_DISTANCE = Integer.MAX_VALUE;
-
-  // attachment types
-  public enum AttachmentTypes {
-    Free, Container, Component, ComponentWithOffset, Baseline
-  }
-
-  /**
-   * The direction in which mouse moved when snapping occurred.
-   */
-  private int m_direction;
-  /**
-   * Attachment type. <code>Container</code> and <code>Component</code> means that gap value should
-   * be taken from LayoutStyle (if possible) or from settings and no any intelligence should be
-   * applied to determine the attachments. <code>Free</code> means that it up to placement routine
-   * to place the component.
-   */
-  private AttachmentTypes m_attachmentType;
-  /**
-   * Neighbors of this placement, leading or trailing. If snapping to component1 sequentially (ex,
-   * one by one horizontally), then this is the neighbor. Else it is nearest component intersecting
-   * this component(s) in opposite dimension.
-   */
-  private final IAbstractComponentInfo m_neighbors[] = new IAbstractComponentInfo[2];
-  private final List<IAbstractComponentInfo> m_overlappings[];
-  /**
-   * Distance to the neighbor component or to the container boundary (parent). It positive when
-   * components do not overlap and negative otherwise. In this case this means the distance is a
-   * value on which the overlapping components should be moved (resized) to fit this component(s).
-   */
-  private final int[] m_distances = new int[]{UNDEFINED_DISTANCE, UNDEFINED_DISTANCE};
-  private IAbstractComponentInfo m_attachedToWidget;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @SuppressWarnings("unchecked")
-  public PlacementInfo() {
-    m_overlappings = (List<IAbstractComponentInfo>[]) Array.newInstance(ArrayList.class, 2);
-    m_overlappings[LEADING] = Lists.newArrayList();
-    m_overlappings[TRAILING] = Lists.newArrayList();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public final int getDirection() {
-    return m_direction;
-  }
-
-  public final void setDirection(int direction) {
-    m_direction = direction;
-  }
-
-  public final AttachmentTypes getAttachmentType() {
-    return m_attachmentType;
-  }
-
-  public final void setAttachmentType(AttachmentTypes gapType) {
-    m_attachmentType = gapType;
-  }
-
-  public final IAbstractComponentInfo[] getNeighbors() {
-    return m_neighbors;
-  }
-
-  public final List<IAbstractComponentInfo>[] getOverlappings() {
-    return m_overlappings;
-  }
-
-  public final int[] getDistances() {
-    return m_distances;
-  }
-
-  public final void setAttachedToWidget(IAbstractComponentInfo widget) {
-    m_attachedToWidget = widget;
-  }
-
-  public final IAbstractComponentInfo getAttachedToWidget() {
-    return m_attachedToWidget;
-  }
-
-  public final void cleanup() {
-    m_overlappings[LEADING] = Lists.newArrayList();
-    m_overlappings[TRAILING] = Lists.newArrayList();
-    m_distances[LEADING] = UNDEFINED_DISTANCE;
-    m_distances[TRAILING] = UNDEFINED_DISTANCE;
-    m_neighbors[LEADING] = null;
-    m_neighbors[TRAILING] = null;
-    m_attachedToWidget = null;
-  }
+	// constants
+	// directions
+	public static final int LEADING = 0;
+	public static final int TRAILING = 1;
+	public static final int UNDEFINED = -1;
+	// distance
+	public static final int UNDEFINED_DISTANCE = Integer.MAX_VALUE;
+
+	// attachment types
+	public enum AttachmentTypes {
+		Free, Container, Component, ComponentWithOffset, Baseline
+	}
+
+	/**
+	 * The direction in which mouse moved when snapping occurred.
+	 */
+	private int m_direction;
+	/**
+	 * Attachment type. <code>Container</code> and <code>Component</code> means that gap value should
+	 * be taken from LayoutStyle (if possible) or from settings and no any intelligence should be
+	 * applied to determine the attachments. <code>Free</code> means that it up to placement routine
+	 * to place the component.
+	 */
+	private AttachmentTypes m_attachmentType;
+	/**
+	 * Neighbors of this placement, leading or trailing. If snapping to component1 sequentially (ex,
+	 * one by one horizontally), then this is the neighbor. Else it is nearest component intersecting
+	 * this component(s) in opposite dimension.
+	 */
+	private final IAbstractComponentInfo m_neighbors[] = new IAbstractComponentInfo[2];
+	private final List<IAbstractComponentInfo> m_overlappings[];
+	/**
+	 * Distance to the neighbor component or to the container boundary (parent). It positive when
+	 * components do not overlap and negative otherwise. In this case this means the distance is a
+	 * value on which the overlapping components should be moved (resized) to fit this component(s).
+	 */
+	private final int[] m_distances = new int[]{UNDEFINED_DISTANCE, UNDEFINED_DISTANCE};
+	private IAbstractComponentInfo m_attachedToWidget;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@SuppressWarnings("unchecked")
+	public PlacementInfo() {
+		m_overlappings = (List<IAbstractComponentInfo>[]) Array.newInstance(ArrayList.class, 2);
+		m_overlappings[LEADING] = Lists.newArrayList();
+		m_overlappings[TRAILING] = Lists.newArrayList();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public final int getDirection() {
+		return m_direction;
+	}
+
+	public final void setDirection(int direction) {
+		m_direction = direction;
+	}
+
+	public final AttachmentTypes getAttachmentType() {
+		return m_attachmentType;
+	}
+
+	public final void setAttachmentType(AttachmentTypes gapType) {
+		m_attachmentType = gapType;
+	}
+
+	public final IAbstractComponentInfo[] getNeighbors() {
+		return m_neighbors;
+	}
+
+	public final List<IAbstractComponentInfo>[] getOverlappings() {
+		return m_overlappings;
+	}
+
+	public final int[] getDistances() {
+		return m_distances;
+	}
+
+	public final void setAttachedToWidget(IAbstractComponentInfo widget) {
+		m_attachedToWidget = widget;
+	}
+
+	public final IAbstractComponentInfo getAttachedToWidget() {
+		return m_attachedToWidget;
+	}
+
+	public final void cleanup() {
+		m_overlappings[LEADING] = Lists.newArrayList();
+		m_overlappings[TRAILING] = Lists.newArrayList();
+		m_distances[LEADING] = UNDEFINED_DISTANCE;
+		m_distances[TRAILING] = UNDEFINED_DISTANCE;
+		m_neighbors[LEADING] = null;
+		m_neighbors[TRAILING] = null;
+		m_attachedToWidget = null;
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/snapping/PlacementUtils.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/snapping/PlacementUtils.java
index 05c0843d2..5d35bfdaa 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/snapping/PlacementUtils.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/snapping/PlacementUtils.java
@@ -24,130 +24,130 @@
  * @coverage swt.model.layout.form
  */
 public final class PlacementUtils {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Side
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the constant which represents 'opposite' side in one dimension, i.e. for LEFT it
-   *         returns RIGHT.
-   */
-  public static int getOppositeSide(int side) {
-    switch (side) {
-      case IPositionConstants.LEFT :
-        return IPositionConstants.RIGHT;
-      case IPositionConstants.RIGHT :
-        return IPositionConstants.LEFT;
-      case IPositionConstants.TOP :
-        return IPositionConstants.BOTTOM;
-      case IPositionConstants.BOTTOM :
-        return IPositionConstants.TOP;
-      default :
-        throw new IllegalArgumentException("Invalid side requested: " + side);
-    }
-  }
-
-  public static boolean isTrailingSide(int side) {
-    return side == IPositionConstants.RIGHT || side == IPositionConstants.BOTTOM;
-  }
-
-  /**
-   * @return <code>true</code> if <code>side</code> either of {@link IPositionConstants#LEFT} or
-   *         {@link IPositionConstants#TOP}
-   */
-  public static boolean isLeadingSide(int side) {
-    return side == IPositionConstants.LEFT || side == IPositionConstants.TOP;
-  }
-
-  public static boolean isHorizontalSide(int side) {
-    return side == IPositionConstants.LEFT || side == IPositionConstants.RIGHT;
-  }
-
-  public static int getSide(boolean isHorizontal, boolean isLeading) {
-    if (isLeading) {
-      return isHorizontal ? IPositionConstants.LEFT : IPositionConstants.TOP;
-    } else {
-      return isHorizontal ? IPositionConstants.RIGHT : IPositionConstants.BOTTOM;
-    }
-  }
-
-  /**
-   * Returns either of {@link PlacementInfo#LEADING} or {@link PlacementInfo#TRAILING}
-   *
-   * @param side
-   *          the one of the {@link IPositionConstants#LEFT}, {@link IPositionConstants#RIGHT},
-   *          {@link IPositionConstants#TOP}, {@link IPositionConstants#BOTTOM}.
-   */
-  public static int getSidePosition(int side) {
-    return PlacementUtils.isTrailingSide(side) ? PlacementInfo.TRAILING : PlacementInfo.LEADING;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Resize
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static int extractResizingSide(boolean isHorizontal, int side) {
-    if (isHorizontal) {
-      if ((side & IPositionConstants.WEST) != 0) {
-        return IPositionConstants.LEFT;
-      } else if ((side & IPositionConstants.EAST) != 0) {
-        return IPositionConstants.RIGHT;
-      }
-    } else {
-      if ((side & IPositionConstants.NORTH) != 0) {
-        return IPositionConstants.TOP;
-      } else if ((side & IPositionConstants.SOUTH) != 0) {
-        return IPositionConstants.BOTTOM;
-      }
-    }
-    throw new IllegalArgumentException("Wrong side value: " + side);
-  }
-
-  public static boolean hasHorizontalResizeSide(int resizeDirection) {
-    return (resizeDirection & IPositionConstants.WEST) != 0
-        || (resizeDirection & IPositionConstants.EAST) != 0;
-  }
-
-  public static boolean hasVerticalResizeSide(int resizeDirection) {
-    return (resizeDirection & IPositionConstants.NORTH) != 0
-        || (resizeDirection & IPositionConstants.SOUTH) != 0;
-  }
-
-  public static int getSideSize(Dimension size, int side) {
-    if (isHorizontalSide(side)) {
-      return size.width;
-    } else {
-      return size.height;
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Bounds
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static Rectangle getTranslatedBounds(IVisualDataProvider visualDataProvider,
-      IAbstractComponentInfo widget) {
-    return getTranslatedBounds(visualDataProvider, widget.getModelBounds().getCopy());
-  }
-
-  public static Rectangle getTranslatedBounds(IVisualDataProvider visualDataProvider,
-      Rectangle bounds) {
-    return getTranslatedBounds(visualDataProvider.getClientAreaOffset(), bounds);
-  }
-
-  public static Rectangle getTranslatedBounds(Point clientAreaOffset, IAbstractComponentInfo widget) {
-    return getTranslatedBounds(clientAreaOffset, widget.getModelBounds().getCopy());
-  }
-
-  public static Rectangle getTranslatedBounds(Point clientAreaOffset, Rectangle bounds) {
-    return bounds.getTranslated(clientAreaOffset.getNegated());
-  }
-
-  public static int getSize(IAbstractComponentInfo component, boolean isHorizontal) {
-    Rectangle bounds = component.getModelBounds();
-    return isHorizontal ? bounds.width : bounds.height;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Side
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the constant which represents 'opposite' side in one dimension, i.e. for LEFT it
+	 *         returns RIGHT.
+	 */
+	public static int getOppositeSide(int side) {
+		switch (side) {
+		case IPositionConstants.LEFT :
+			return IPositionConstants.RIGHT;
+		case IPositionConstants.RIGHT :
+			return IPositionConstants.LEFT;
+		case IPositionConstants.TOP :
+			return IPositionConstants.BOTTOM;
+		case IPositionConstants.BOTTOM :
+			return IPositionConstants.TOP;
+		default :
+			throw new IllegalArgumentException("Invalid side requested: " + side);
+		}
+	}
+
+	public static boolean isTrailingSide(int side) {
+		return side == IPositionConstants.RIGHT || side == IPositionConstants.BOTTOM;
+	}
+
+	/**
+	 * @return <code>true</code> if <code>side</code> either of {@link IPositionConstants#LEFT} or
+	 *         {@link IPositionConstants#TOP}
+	 */
+	public static boolean isLeadingSide(int side) {
+		return side == IPositionConstants.LEFT || side == IPositionConstants.TOP;
+	}
+
+	public static boolean isHorizontalSide(int side) {
+		return side == IPositionConstants.LEFT || side == IPositionConstants.RIGHT;
+	}
+
+	public static int getSide(boolean isHorizontal, boolean isLeading) {
+		if (isLeading) {
+			return isHorizontal ? IPositionConstants.LEFT : IPositionConstants.TOP;
+		} else {
+			return isHorizontal ? IPositionConstants.RIGHT : IPositionConstants.BOTTOM;
+		}
+	}
+
+	/**
+	 * Returns either of {@link PlacementInfo#LEADING} or {@link PlacementInfo#TRAILING}
+	 *
+	 * @param side
+	 *          the one of the {@link IPositionConstants#LEFT}, {@link IPositionConstants#RIGHT},
+	 *          {@link IPositionConstants#TOP}, {@link IPositionConstants#BOTTOM}.
+	 */
+	public static int getSidePosition(int side) {
+		return PlacementUtils.isTrailingSide(side) ? PlacementInfo.TRAILING : PlacementInfo.LEADING;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Resize
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static int extractResizingSide(boolean isHorizontal, int side) {
+		if (isHorizontal) {
+			if ((side & IPositionConstants.WEST) != 0) {
+				return IPositionConstants.LEFT;
+			} else if ((side & IPositionConstants.EAST) != 0) {
+				return IPositionConstants.RIGHT;
+			}
+		} else {
+			if ((side & IPositionConstants.NORTH) != 0) {
+				return IPositionConstants.TOP;
+			} else if ((side & IPositionConstants.SOUTH) != 0) {
+				return IPositionConstants.BOTTOM;
+			}
+		}
+		throw new IllegalArgumentException("Wrong side value: " + side);
+	}
+
+	public static boolean hasHorizontalResizeSide(int resizeDirection) {
+		return (resizeDirection & IPositionConstants.WEST) != 0
+				|| (resizeDirection & IPositionConstants.EAST) != 0;
+	}
+
+	public static boolean hasVerticalResizeSide(int resizeDirection) {
+		return (resizeDirection & IPositionConstants.NORTH) != 0
+				|| (resizeDirection & IPositionConstants.SOUTH) != 0;
+	}
+
+	public static int getSideSize(Dimension size, int side) {
+		if (isHorizontalSide(side)) {
+			return size.width;
+		} else {
+			return size.height;
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Bounds
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static Rectangle getTranslatedBounds(IVisualDataProvider visualDataProvider,
+			IAbstractComponentInfo widget) {
+		return getTranslatedBounds(visualDataProvider, widget.getModelBounds().getCopy());
+	}
+
+	public static Rectangle getTranslatedBounds(IVisualDataProvider visualDataProvider,
+			Rectangle bounds) {
+		return getTranslatedBounds(visualDataProvider.getClientAreaOffset(), bounds);
+	}
+
+	public static Rectangle getTranslatedBounds(Point clientAreaOffset, IAbstractComponentInfo widget) {
+		return getTranslatedBounds(clientAreaOffset, widget.getModelBounds().getCopy());
+	}
+
+	public static Rectangle getTranslatedBounds(Point clientAreaOffset, Rectangle bounds) {
+		return bounds.getTranslated(clientAreaOffset.getNegated());
+	}
+
+	public static int getSize(IAbstractComponentInfo component, boolean isHorizontal) {
+		Rectangle bounds = component.getModelBounds();
+		return isHorizontal ? bounds.width : bounds.height;
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/snapping/PlacementsSupport.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/snapping/PlacementsSupport.java
index e638c4c8b..24339b4c6 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/snapping/PlacementsSupport.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/snapping/PlacementsSupport.java
@@ -432,7 +432,7 @@ private void placeAttachedToWidget(IAbstractComponentInfo widget, PlacementInfo
 			} else {
 				int distance = placementInfo.getAttachmentType() == AttachmentTypes.ComponentWithOffset
 						? placementInfo.getDistances()[direction]
-						: 0;
+								: 0;
 				m_layoutCommands.attachWidgetParallelly(widget, attachedToWidget, side, distance);
 			}
 		}
@@ -580,7 +580,7 @@ private void resizeWidget(IAbstractComponentInfo widget, boolean isHorizontal) t
 					// parallel attachment
 					distance = placementInfo.getAttachmentType() == AttachmentTypes.ComponentWithOffset
 							? placementInfo.getDistances()[direction]
-							: 0;
+									: 0;
 					m_layoutCommands.attachWidgetParallelly(widget, attachedToWidget, side, distance);
 				}
 				if (!isAttachedOppositeSide) {
@@ -780,7 +780,7 @@ private PlacementInfo preparePlacementInfoAligning(IAbstractComponentInfo sample
 			placementInfo.getDistances()[direction] = distance;
 			aligningBounds.x += distance;
 		}
-			break;
+		break;
 		case IPositionConstants.LEFT:
 		case IPositionConstants.TOP:
 			aligningBounds.x = sampleBounds.x;
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/snapping/SameSizeSnapPoint.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/snapping/SameSizeSnapPoint.java
index cb1144679..e4144540e 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/snapping/SameSizeSnapPoint.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/snapping/SameSizeSnapPoint.java
@@ -28,131 +28,131 @@
  * @coverage core.gef.policy.snapping
  */
 public class SameSizeSnapPoint extends SnapPoint {
-  private final List<? extends IAbstractComponentInfo> m_allComponents;
-  private IAbstractComponentInfo m_sameSizedComponent;
+	private final List<? extends IAbstractComponentInfo> m_allComponents;
+	private IAbstractComponentInfo m_sameSizedComponent;
 
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SameSizeSnapPoint(IVisualDataProvider visualDataProvider,
-      List<? extends IAbstractComponentInfo> components,
-      int side) {
-    super(visualDataProvider, side, side == IPositionConstants.LEFT
-        || side == IPositionConstants.TOP ? PlacementInfo.LEADING : PlacementInfo.TRAILING);
-    m_allComponents = components;
-    m_snapDistance = 5;
-  }
+	//
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SameSizeSnapPoint(IVisualDataProvider visualDataProvider,
+			List<? extends IAbstractComponentInfo> components,
+			int side) {
+		super(visualDataProvider, side, side == IPositionConstants.LEFT
+				|| side == IPositionConstants.TOP ? PlacementInfo.LEADING : PlacementInfo.TRAILING);
+		m_allComponents = components;
+		m_snapDistance = 5;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Snapping
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean snap(List<? extends IAbstractComponentInfo> beingSnappedList,
-      Rectangle beingSnappedBounds,
-      int moveDirection,
-      int resizeDirection) {
-    // don't snap if not is in resizing state or processing multiple components
-    if (resizeDirection == 0 || beingSnappedList.size() != 1) {
-      return false;
-    }
-    // prepare
-    Transposer t = new Transposer();
-    t.setEnabled(!isHorizontal());
-    Rectangle transposedBounds = t.t(beingSnappedBounds);
-    m_sameSizedComponent = null;
-    IAbstractComponentInfo beingSnapped = beingSnappedList.get(0);
-    // check for resize direction to be valid to this snap point
-    if (isValidResizeDirection(resizeDirection)) {
-      // lookup all components for equal size
-      for (IAbstractComponentInfo component : m_allComponents) {
-        if (component == beingSnapped) {
-          // do not snap to itself
-          continue;
-        }
-        Rectangle modelBounds =
-            t.t(PlacementUtils.getTranslatedBounds(m_visualDataProvider, component));
-        Dimension size = modelBounds.getSize();
-        if (doSnapping(transposedBounds, size)) {
-          m_sameSizedComponent = component;
-          beingSnappedBounds.setBounds(t.t(transposedBounds));
-          return true;
-        }
-      }
-      // snap to preferred size
-      Dimension preferredSize = m_visualDataProvider.getComponentPreferredSize(beingSnapped);
-      if (preferredSize == null) {
-        return false;
-      }
-      if (doSnapping(transposedBounds, t.t(preferredSize))) {
-        beingSnappedBounds.setBounds(t.t(transposedBounds));
-        return true;
-      }
-    }
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Snapping
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean snap(List<? extends IAbstractComponentInfo> beingSnappedList,
+			Rectangle beingSnappedBounds,
+			int moveDirection,
+			int resizeDirection) {
+		// don't snap if not is in resizing state or processing multiple components
+		if (resizeDirection == 0 || beingSnappedList.size() != 1) {
+			return false;
+		}
+		// prepare
+		Transposer t = new Transposer();
+		t.setEnabled(!isHorizontal());
+		Rectangle transposedBounds = t.t(beingSnappedBounds);
+		m_sameSizedComponent = null;
+		IAbstractComponentInfo beingSnapped = beingSnappedList.get(0);
+		// check for resize direction to be valid to this snap point
+		if (isValidResizeDirection(resizeDirection)) {
+			// lookup all components for equal size
+			for (IAbstractComponentInfo component : m_allComponents) {
+				if (component == beingSnapped) {
+					// do not snap to itself
+					continue;
+				}
+				Rectangle modelBounds =
+						t.t(PlacementUtils.getTranslatedBounds(m_visualDataProvider, component));
+				Dimension size = modelBounds.getSize();
+				if (doSnapping(transposedBounds, size)) {
+					m_sameSizedComponent = component;
+					beingSnappedBounds.setBounds(t.t(transposedBounds));
+					return true;
+				}
+			}
+			// snap to preferred size
+			Dimension preferredSize = m_visualDataProvider.getComponentPreferredSize(beingSnapped);
+			if (preferredSize == null) {
+				return false;
+			}
+			if (doSnapping(transposedBounds, t.t(preferredSize))) {
+				beingSnappedBounds.setBounds(t.t(transposedBounds));
+				return true;
+			}
+		}
+		return false;
+	}
 
-  private boolean doSnapping(Rectangle transposedBounds, Dimension size) {
-    int beingSnappedPoint =
-        getSnapDirection() == PlacementInfo.LEADING ? transposedBounds.x : transposedBounds.right();
-    if (m_side == IPositionConstants.LEFT || m_side == IPositionConstants.TOP) {
-      m_snapPoint = transposedBounds.right() - size.width;
-    } else {
-      m_snapPoint = transposedBounds.x + size.width;
-    }
-    m_snapInterval = new Interval(m_snapPoint - m_snapDistance, m_snapDistance * 2);
-    if (m_snapInterval.contains(beingSnappedPoint)) {
-      if (getSnapDirection() == PlacementInfo.LEADING) {
-        transposedBounds.width += transposedBounds.x - m_snapPoint;
-        transposedBounds.x = m_snapPoint;
-      } else {
-        transposedBounds.width = m_snapPoint - transposedBounds.x;
-      }
-      return true;
-    }
-    return false;
-  }
+	private boolean doSnapping(Rectangle transposedBounds, Dimension size) {
+		int beingSnappedPoint =
+				getSnapDirection() == PlacementInfo.LEADING ? transposedBounds.x : transposedBounds.right();
+		if (m_side == IPositionConstants.LEFT || m_side == IPositionConstants.TOP) {
+			m_snapPoint = transposedBounds.right() - size.width;
+		} else {
+			m_snapPoint = transposedBounds.x + size.width;
+		}
+		m_snapInterval = new Interval(m_snapPoint - m_snapDistance, m_snapDistance * 2);
+		if (m_snapInterval.contains(beingSnappedPoint)) {
+			if (getSnapDirection() == PlacementInfo.LEADING) {
+				transposedBounds.width += transposedBounds.x - m_snapPoint;
+				transposedBounds.x = m_snapPoint;
+			} else {
+				transposedBounds.width = m_snapPoint - transposedBounds.x;
+			}
+			return true;
+		}
+		return false;
+	}
 
-  @Override
-  protected void calculateSnapPoint(List<? extends IAbstractComponentInfo> beingSnappedList) {
-    // actually there is no snap point position needed
-  }
+	@Override
+	protected void calculateSnapPoint(List<? extends IAbstractComponentInfo> beingSnappedList) {
+		// actually there is no snap point position needed
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Feedbacks
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void addFeedback(Rectangle snappedBounds,
-      IFeedbackProxy feedbackProxy,
-      List<Figure> feedbacks) {
-    // snapped to some component
-    if (m_sameSizedComponent != null) {
-      Rectangle bounds =
-          PlacementUtils.getTranslatedBounds(m_visualDataProvider, m_sameSizedComponent);
-      feedbacks.add(feedbackProxy.addOutlineFeedback(bounds));
-      addMiddleLineFeedback(bounds, feedbackProxy, feedbacks);
-    }
-    // draw preferred size feedback or same-sized feedback
-    addMiddleLineFeedback(snappedBounds, feedbackProxy, feedbacks);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Feedbacks
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void addFeedback(Rectangle snappedBounds,
+			IFeedbackProxy feedbackProxy,
+			List<Figure> feedbacks) {
+		// snapped to some component
+		if (m_sameSizedComponent != null) {
+			Rectangle bounds =
+					PlacementUtils.getTranslatedBounds(m_visualDataProvider, m_sameSizedComponent);
+			feedbacks.add(feedbackProxy.addOutlineFeedback(bounds));
+			addMiddleLineFeedback(bounds, feedbackProxy, feedbacks);
+		}
+		// draw preferred size feedback or same-sized feedback
+		addMiddleLineFeedback(snappedBounds, feedbackProxy, feedbacks);
+	}
 
-  private void addMiddleLineFeedback(Rectangle bounds,
-      IFeedbackProxy feedbackProxy,
-      List<Figure> feedbacks) {
-    Figure figure =
-        isHorizontal() ? feedbackProxy.addHorizontalMiddleLineFeedback(
-            bounds.y + bounds.height / 2,
-            bounds.x,
-            bounds.width) : feedbackProxy.addVerticalMiddleLineFeedback(
-            bounds.x + bounds.width / 2,
-            bounds.y,
-            bounds.height);
-    feedbacks.add(figure);
-  }
+	private void addMiddleLineFeedback(Rectangle bounds,
+			IFeedbackProxy feedbackProxy,
+			List<Figure> feedbacks) {
+		Figure figure =
+				isHorizontal() ? feedbackProxy.addHorizontalMiddleLineFeedback(
+						bounds.y + bounds.height / 2,
+						bounds.x,
+						bounds.width) : feedbackProxy.addVerticalMiddleLineFeedback(
+								bounds.x + bounds.width / 2,
+								bounds.y,
+								bounds.height);
+		feedbacks.add(figure);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/snapping/SnapPoint.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/snapping/SnapPoint.java
index 7ced0e2cc..2b724ad64 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/snapping/SnapPoint.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/snapping/SnapPoint.java
@@ -31,342 +31,342 @@
  * @coverage core.gef.policy.snapping
  */
 public abstract class SnapPoint {
-  public static final int SNAP_DISTANCE = 10;
-  //
-  private Interval m_xSnapInterval;
-  private Interval m_ySnapInterval;
-  //
-  private final int m_snapDirection;
-  protected int m_snapDistance = SNAP_DISTANCE;
-  protected int m_snapPoint;
-  protected Interval m_snapInterval;
-  protected final int m_side;
-  protected IAbstractComponentInfo m_nearestBeingSnapped;
-  //
-  protected IVisualDataProvider m_visualDataProvider;
-  protected boolean m_isResizing;
-  //
-  private SnapPointCommand m_command;
-  private List<? extends IAbstractComponentInfo> m_workingSet;
+	public static final int SNAP_DISTANCE = 10;
+	//
+	private Interval m_xSnapInterval;
+	private Interval m_ySnapInterval;
+	//
+	private final int m_snapDirection;
+	protected int m_snapDistance = SNAP_DISTANCE;
+	protected int m_snapPoint;
+	protected Interval m_snapInterval;
+	protected final int m_side;
+	protected IAbstractComponentInfo m_nearestBeingSnapped;
+	//
+	protected IVisualDataProvider m_visualDataProvider;
+	protected boolean m_isResizing;
+	//
+	private SnapPointCommand m_command;
+	private List<? extends IAbstractComponentInfo> m_workingSet;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @param visualDataProvider
-   * @param snapDirection
-   *          A direction in which snap point would be applied, e.g. if direction is
-   *          {@link PlacementInfo#TRAILING} then snapping rectangle's right side would be set. Also
-   *          this parameter taken into account when checking for moving direction.
-   */
-  public SnapPoint(IVisualDataProvider visualDataProvider, int side, int snapDirection) {
-    m_visualDataProvider = visualDataProvider;
-    m_snapDirection = snapDirection;
-    m_side = side;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @param visualDataProvider
+	 * @param snapDirection
+	 *          A direction in which snap point would be applied, e.g. if direction is
+	 *          {@link PlacementInfo#TRAILING} then snapping rectangle's right side would be set. Also
+	 *          this parameter taken into account when checking for moving direction.
+	 */
+	public SnapPoint(IVisualDataProvider visualDataProvider, int side, int snapDirection) {
+		m_visualDataProvider = visualDataProvider;
+		m_snapDirection = snapDirection;
+		m_side = side;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Snapping
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @param beingSnappedList
-   *          A component models list which is about to snap.
-   * @param beingSnappedBounds
-   *          A bounds we want to snap, would be modified. For multiple components snapping. it is a
-   *          bounding rectangle of all components bounds.
-   * @param moveDirection
-   *          A mouse moving direction.
-   * @param resizeDirection
-   *          Resize direction as it passed from {@link ChangeBoundsRequest}.
-   * @return <code>true</code> if snapping occurred.
-   */
-  public boolean snap(List<? extends IAbstractComponentInfo> beingSnappedList,
-      Rectangle beingSnappedBounds,
-      int moveDirection,
-      int resizeDirection) {
-    m_isResizing = resizeDirection != 0;
-    if (!snapAllowed(beingSnappedList)) {
-      return false;
-    }
-    // make snapping data up-to-date
-    updateSnapData(beingSnappedList);
-    // check moving direction
-    if (checkDirection() && !validDirection(moveDirection)) {
-      return false;
-    }
-    // check whether we able to snap at this area
-    Interval xSnapInterval = new Interval(beingSnappedBounds.x, beingSnappedBounds.width);
-    Interval ySnapInterval = new Interval(beingSnappedBounds.y, beingSnappedBounds.height);
-    if (!m_xSnapInterval.intersects(xSnapInterval) || !m_ySnapInterval.intersects(ySnapInterval)) {
-      return false;
-    }
-    // do snapping
-    Transposer t = new Transposer();
-    t.setEnabled(!isHorizontal());
-    Rectangle transposedBounds = t.t(beingSnappedBounds);
-    int beingSnappedPoint =
-        m_snapDirection == PlacementInfo.LEADING ? transposedBounds.x : transposedBounds.right();
-    if (m_isResizing) {
-      if (isValidResizeDirection(resizeDirection)) {
-        if (m_snapInterval.contains(beingSnappedPoint)) {
-          if (m_snapDirection == PlacementInfo.LEADING) {
-            transposedBounds.width += transposedBounds.x - m_snapPoint;
-            transposedBounds.x = m_snapPoint;
-          } else {
-            transposedBounds.width = m_snapPoint - transposedBounds.x;
-          }
-          beingSnappedBounds.setBounds(t.t(transposedBounds));
-          return true;
-        }
-      }
-    } else {
-      if (m_snapInterval.contains(beingSnappedPoint)) {
-        if (m_snapDirection == PlacementInfo.LEADING) {
-          transposedBounds.x = m_snapPoint;
-        } else {
-          transposedBounds.x = m_snapPoint - transposedBounds.width;
-        }
-        beingSnappedBounds.setBounds(t.t(transposedBounds));
-        return true;
-      }
-    }
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Snapping
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @param beingSnappedList
+	 *          A component models list which is about to snap.
+	 * @param beingSnappedBounds
+	 *          A bounds we want to snap, would be modified. For multiple components snapping. it is a
+	 *          bounding rectangle of all components bounds.
+	 * @param moveDirection
+	 *          A mouse moving direction.
+	 * @param resizeDirection
+	 *          Resize direction as it passed from {@link ChangeBoundsRequest}.
+	 * @return <code>true</code> if snapping occurred.
+	 */
+	public boolean snap(List<? extends IAbstractComponentInfo> beingSnappedList,
+			Rectangle beingSnappedBounds,
+			int moveDirection,
+			int resizeDirection) {
+		m_isResizing = resizeDirection != 0;
+		if (!snapAllowed(beingSnappedList)) {
+			return false;
+		}
+		// make snapping data up-to-date
+		updateSnapData(beingSnappedList);
+		// check moving direction
+		if (checkDirection() && !validDirection(moveDirection)) {
+			return false;
+		}
+		// check whether we able to snap at this area
+		Interval xSnapInterval = new Interval(beingSnappedBounds.x, beingSnappedBounds.width);
+		Interval ySnapInterval = new Interval(beingSnappedBounds.y, beingSnappedBounds.height);
+		if (!m_xSnapInterval.intersects(xSnapInterval) || !m_ySnapInterval.intersects(ySnapInterval)) {
+			return false;
+		}
+		// do snapping
+		Transposer t = new Transposer();
+		t.setEnabled(!isHorizontal());
+		Rectangle transposedBounds = t.t(beingSnappedBounds);
+		int beingSnappedPoint =
+				m_snapDirection == PlacementInfo.LEADING ? transposedBounds.x : transposedBounds.right();
+		if (m_isResizing) {
+			if (isValidResizeDirection(resizeDirection)) {
+				if (m_snapInterval.contains(beingSnappedPoint)) {
+					if (m_snapDirection == PlacementInfo.LEADING) {
+						transposedBounds.width += transposedBounds.x - m_snapPoint;
+						transposedBounds.x = m_snapPoint;
+					} else {
+						transposedBounds.width = m_snapPoint - transposedBounds.x;
+					}
+					beingSnappedBounds.setBounds(t.t(transposedBounds));
+					return true;
+				}
+			}
+		} else {
+			if (m_snapInterval.contains(beingSnappedPoint)) {
+				if (m_snapDirection == PlacementInfo.LEADING) {
+					transposedBounds.x = m_snapPoint;
+				} else {
+					transposedBounds.x = m_snapPoint - transposedBounds.width;
+				}
+				beingSnappedBounds.setBounds(t.t(transposedBounds));
+				return true;
+			}
+		}
+		return false;
+	}
 
-  /**
-   * Determines if resize direction is suitable for snapping.
-   *
-   * @param resizeDirection
-   *          .
-   */
-  protected boolean isValidResizeDirection(int resizeDirection) {
-    if (isHorizontal()) {
-      return m_snapDirection == PlacementInfo.LEADING
-          && (resizeDirection & IPositionConstants.WEST) != 0
-          || m_snapDirection == PlacementInfo.TRAILING
-          && (resizeDirection & IPositionConstants.EAST) != 0;
-    } else {
-      return m_snapDirection == PlacementInfo.LEADING
-          && (resizeDirection & IPositionConstants.NORTH) != 0
-          || m_snapDirection == PlacementInfo.TRAILING
-          && (resizeDirection & IPositionConstants.SOUTH) != 0;
-    }
-  }
+	/**
+	 * Determines if resize direction is suitable for snapping.
+	 *
+	 * @param resizeDirection
+	 *          .
+	 */
+	protected boolean isValidResizeDirection(int resizeDirection) {
+		if (isHorizontal()) {
+			return m_snapDirection == PlacementInfo.LEADING
+					&& (resizeDirection & IPositionConstants.WEST) != 0
+					|| m_snapDirection == PlacementInfo.TRAILING
+					&& (resizeDirection & IPositionConstants.EAST) != 0;
+		} else {
+			return m_snapDirection == PlacementInfo.LEADING
+					&& (resizeDirection & IPositionConstants.NORTH) != 0
+					|| m_snapDirection == PlacementInfo.TRAILING
+					&& (resizeDirection & IPositionConstants.SOUTH) != 0;
+		}
+	}
 
-  /**
-   * Shows a feedback for this point. Called when snapping for this point is occurred.
-   *
-   * @param snappedBounds
-   *          the {@link Rectangle} of snapped bounds to make feedback drawing hint.
-   * @param feedbackProxy
-   *          a instance of object responsible to create visual feedbacks.
-   * @param feedbacks
-   *          a {@link List} of added feedbacks. Descendants should add every created feedback to
-   *          this list for further remove.
-   */
-  public void addFeedback(Rectangle snappedBounds,
-      IFeedbackProxy feedbackProxy,
-      List<Figure> feedbacks) {
-  }
+	/**
+	 * Shows a feedback for this point. Called when snapping for this point is occurred.
+	 *
+	 * @param snappedBounds
+	 *          the {@link Rectangle} of snapped bounds to make feedback drawing hint.
+	 * @param feedbackProxy
+	 *          a instance of object responsible to create visual feedbacks.
+	 * @param feedbacks
+	 *          a {@link List} of added feedbacks. Descendants should add every created feedback to
+	 *          this list for further remove.
+	 */
+	public void addFeedback(Rectangle snappedBounds,
+			IFeedbackProxy feedbackProxy,
+			List<Figure> feedbacks) {
+	}
 
-  /**
-   * Determines should we pay attention on mouse moving direction or not.
-   *
-   * @return true if mouse moving direction should be used otherwise return false.
-   */
-  protected boolean checkDirection() {
-    return true;
-  }
+	/**
+	 * Determines should we pay attention on mouse moving direction or not.
+	 *
+	 * @return true if mouse moving direction should be used otherwise return false.
+	 */
+	protected boolean checkDirection() {
+		return true;
+	}
 
-  /**
-   * Is current mouse move direction is valid for this snap point. When mouse move direction is not
-   * valid then no snapping is occurred.
-   *
-   * @param direction
-   *          A mouse move direction as it passed from <code>snap()</code>.
-   */
-  protected boolean validDirection(int direction) {
-    return m_snapDirection == direction;
-  }
+	/**
+	 * Is current mouse move direction is valid for this snap point. When mouse move direction is not
+	 * valid then no snapping is occurred.
+	 *
+	 * @param direction
+	 *          A mouse move direction as it passed from <code>snap()</code>.
+	 */
+	protected boolean validDirection(int direction) {
+		return m_snapDirection == direction;
+	}
 
-  /**
-   * During process of snapping some snap points may disallow snapping for some reasons, for example
-   * component snapping should not allow to snap to itself
-   *
-   * @param beingSnappedList
-   *          A {@link List} of components' model being snapped.
-   * @return <code>true</code> if snapping to this point is allowed.
-   */
-  protected boolean snapAllowed(List<? extends IAbstractComponentInfo> beingSnappedList) {
-    return true;
-  }
+	/**
+	 * During process of snapping some snap points may disallow snapping for some reasons, for example
+	 * component snapping should not allow to snap to itself
+	 *
+	 * @param beingSnappedList
+	 *          A {@link List} of components' model being snapped.
+	 * @return <code>true</code> if snapping to this point is allowed.
+	 */
+	protected boolean snapAllowed(List<? extends IAbstractComponentInfo> beingSnappedList) {
+		return true;
+	}
 
-  /**
-   * @return true if this snap point is for horizontal dimension.
-   */
-  protected boolean isHorizontal() {
-    return m_side == IPositionConstants.LEFT || m_side == IPositionConstants.RIGHT;
-  }
+	/**
+	 * @return true if this snap point is for horizontal dimension.
+	 */
+	protected boolean isHorizontal() {
+		return m_side == IPositionConstants.LEFT || m_side == IPositionConstants.RIGHT;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Update
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Makes snap interval (interval where snapping is valid) up to date. Updating is needed because
-   * non-static component list is used, so its need to calculate actual snap point position (and
-   * snapping intervals) every time.
-   */
-  private void updateSnapData(List<? extends IAbstractComponentInfo> beingSnappedList) {
-    m_workingSet = beingSnappedList;
-    calculateSnapPoint(beingSnappedList);
-    m_xSnapInterval = getXSnapInterval();
-    m_ySnapInterval = getYSnapInterval();
-    m_snapInterval = new Interval(m_snapPoint - m_snapDistance, m_snapDistance * 2);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Update
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Makes snap interval (interval where snapping is valid) up to date. Updating is needed because
+	 * non-static component list is used, so its need to calculate actual snap point position (and
+	 * snapping intervals) every time.
+	 */
+	private void updateSnapData(List<? extends IAbstractComponentInfo> beingSnappedList) {
+		m_workingSet = beingSnappedList;
+		calculateSnapPoint(beingSnappedList);
+		m_xSnapInterval = getXSnapInterval();
+		m_ySnapInterval = getYSnapInterval();
+		m_snapInterval = new Interval(m_snapPoint - m_snapDistance, m_snapDistance * 2);
+	}
 
-  /**
-   * Calculate snap point position and setup additional required info.
-   *
-   * @param beingSnappedList
-   *          .
-   */
-  protected void calculateSnapPoint(List<? extends IAbstractComponentInfo> beingSnappedList) {
-    m_nearestBeingSnapped = getNearestComponentToSide(beingSnappedList);
-  }
+	/**
+	 * Calculate snap point position and setup additional required info.
+	 *
+	 * @param beingSnappedList
+	 *          .
+	 */
+	protected void calculateSnapPoint(List<? extends IAbstractComponentInfo> beingSnappedList) {
+		m_nearestBeingSnapped = getNearestComponentToSide(beingSnappedList);
+	}
 
-  /**
-   * @return A horizontal interval in which this snap point would work, e.g. if snapping rectangle
-   *         is not intersects this interval then no snapping would be occurred.
-   */
-  protected Interval getXSnapInterval() {
-    return Interval.INFINITE;
-  }
+	/**
+	 * @return A horizontal interval in which this snap point would work, e.g. if snapping rectangle
+	 *         is not intersects this interval then no snapping would be occurred.
+	 */
+	protected Interval getXSnapInterval() {
+		return Interval.INFINITE;
+	}
 
-  /**
-   * @return A vertical interval in which this snap point would work.
-   */
-  protected Interval getYSnapInterval() {
-    return Interval.INFINITE;
-  }
+	/**
+	 * @return A vertical interval in which this snap point would work.
+	 */
+	protected Interval getYSnapInterval() {
+		return Interval.INFINITE;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected IAbstractComponentInfo getNearestComponentToSide(List<? extends IAbstractComponentInfo> beingSnappedList) {
-    return getNearestComponentToSide(beingSnappedList, m_side, isHorizontal(), m_visualDataProvider);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected IAbstractComponentInfo getNearestComponentToSide(List<? extends IAbstractComponentInfo> beingSnappedList) {
+		return getNearestComponentToSide(beingSnappedList, m_side, isHorizontal(), m_visualDataProvider);
+	}
 
-  public static IAbstractComponentInfo getNearestComponentToSide(List<? extends IAbstractComponentInfo> beingSnappedList,
-      int side,
-      boolean isHorizontal,
-      IVisualDataProvider provider) {
-    if (beingSnappedList.size() == 1) {
-      return beingSnappedList.get(0);
-    }
-    boolean isLeading = PlacementUtils.isLeadingSide(side);
-    Transposer t = new Transposer();
-    t.setEnabled(!isHorizontal);
-    int offset = isLeading ? Integer.MAX_VALUE : Integer.MIN_VALUE;
-    IAbstractComponentInfo result = null;
-    for (IAbstractComponentInfo component : beingSnappedList) {
-      Rectangle bounds = t.t(PlacementUtils.getTranslatedBounds(provider, component));
-      int newOffset = isLeading ? Math.min(offset, bounds.x) : Math.max(offset, bounds.right());
-      if (newOffset == (isLeading ? bounds.x : bounds.right())) {
-        result = component;
-        offset = newOffset;
-      }
-    }
-    return result;
-  }
+	public static IAbstractComponentInfo getNearestComponentToSide(List<? extends IAbstractComponentInfo> beingSnappedList,
+			int side,
+			boolean isHorizontal,
+			IVisualDataProvider provider) {
+		if (beingSnappedList.size() == 1) {
+			return beingSnappedList.get(0);
+		}
+		boolean isLeading = PlacementUtils.isLeadingSide(side);
+		Transposer t = new Transposer();
+		t.setEnabled(!isHorizontal);
+		int offset = isLeading ? Integer.MAX_VALUE : Integer.MIN_VALUE;
+		IAbstractComponentInfo result = null;
+		for (IAbstractComponentInfo component : beingSnappedList) {
+			Rectangle bounds = t.t(PlacementUtils.getTranslatedBounds(provider, component));
+			int newOffset = isLeading ? Math.min(offset, bounds.x) : Math.max(offset, bounds.right());
+			if (newOffset == (isLeading ? bounds.x : bounds.right())) {
+				result = component;
+				offset = newOffset;
+			}
+		}
+		return result;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    String name = StringUtils.substringAfterLast(getClass().getName(), ".");
-    return name
-        + "(side="
-        + sideToString(m_side)
-        + " snapDir="
-        + (m_snapDirection == PlacementInfo.LEADING ? "LEADING" : "TRAILING")
-        + getObjectInfo()
-        + ")";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		String name = StringUtils.substringAfterLast(getClass().getName(), ".");
+		return name
+				+ "(side="
+				+ sideToString(m_side)
+				+ " snapDir="
+				+ (m_snapDirection == PlacementInfo.LEADING ? "LEADING" : "TRAILING")
+				+ getObjectInfo()
+				+ ")";
+	}
 
-  private static String sideToString(int side) {
-    switch (side) {
-      case IPositionConstants.TOP :
-        return "TOP";
-      case IPositionConstants.BOTTOM :
-        return "BOTTOM";
-      case IPositionConstants.LEFT :
-        return "LEFT";
-      case IPositionConstants.RIGHT :
-        return "RIGHT";
-      default :
-        return Integer.toString(side);
-    }
-  }
+	private static String sideToString(int side) {
+		switch (side) {
+		case IPositionConstants.TOP :
+			return "TOP";
+		case IPositionConstants.BOTTOM :
+			return "BOTTOM";
+		case IPositionConstants.LEFT :
+			return "LEFT";
+		case IPositionConstants.RIGHT :
+			return "RIGHT";
+		default :
+			return Integer.toString(side);
+		}
+	}
 
-  protected String getObjectInfo() {
-    return "";
-  }
+	protected String getObjectInfo() {
+		return "";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the current value of this {@link SnapPoint}.
-   */
-  public final int getValue() {
-    return m_snapPoint;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the current value of this {@link SnapPoint}.
+	 */
+	public final int getValue() {
+		return m_snapPoint;
+	}
 
-  /**
-   * @return the list of components which are dragged.
-   */
-  public final List<? extends IAbstractComponentInfo> getWorkingSet() {
-    return m_workingSet;
-  }
+	/**
+	 * @return the list of components which are dragged.
+	 */
+	public final List<? extends IAbstractComponentInfo> getWorkingSet() {
+		return m_workingSet;
+	}
 
-  /**
-   * @return the component which actually used for snapping.
-   */
-  public final IAbstractComponentInfo getNearestBeingSnapped() {
-    return m_nearestBeingSnapped;
-  }
+	/**
+	 * @return the component which actually used for snapping.
+	 */
+	public final IAbstractComponentInfo getNearestBeingSnapped() {
+		return m_nearestBeingSnapped;
+	}
 
-  /**
-   * @return the side of this {@link SnapPoint}. The possible values are
-   *         {@link IPositionConstants#TOP}, {@link IPositionConstants#BOTTOM},
-   *         {@link IPositionConstants#LEFT}, {@link IPositionConstants#RIGHT}.
-   */
-  public final int getSide() {
-    return m_side;
-  }
+	/**
+	 * @return the side of this {@link SnapPoint}. The possible values are
+	 *         {@link IPositionConstants#TOP}, {@link IPositionConstants#BOTTOM},
+	 *         {@link IPositionConstants#LEFT}, {@link IPositionConstants#RIGHT}.
+	 */
+	public final int getSide() {
+		return m_side;
+	}
 
-  public final int getSnapDirection() {
-    return m_snapDirection;
-  }
+	public final int getSnapDirection() {
+		return m_snapDirection;
+	}
 
-  public final Command getCommand() {
-    return m_command;
-  }
+	public final Command getCommand() {
+		return m_command;
+	}
 
-  public final void setCommand(SnapPointCommand command) {
-    m_command = command;
-  }
+	public final void setCommand(SnapPointCommand command) {
+		m_command = command;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/snapping/SnapPointCommand.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/snapping/SnapPointCommand.java
index 0edf7e3ae..7341b6a23 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/snapping/SnapPointCommand.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/snapping/SnapPointCommand.java
@@ -19,28 +19,28 @@
  * @author mitin_aa
  */
 public abstract class SnapPointCommand extends EditCommand {
-  private SnapPoint m_snapPoint;
+	private SnapPoint m_snapPoint;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SnapPointCommand(ObjectInfo objectInfo, SnapPoint snapPoint) {
-    super(objectInfo);
-    m_snapPoint = snapPoint;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SnapPointCommand(ObjectInfo objectInfo, SnapPoint snapPoint) {
+		super(objectInfo);
+		m_snapPoint = snapPoint;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void setSnapPoint(SnapPoint snapPoint) {
-    m_snapPoint = snapPoint;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void setSnapPoint(SnapPoint snapPoint) {
+		m_snapPoint = snapPoint;
+	}
 
-  protected final SnapPoint getSnapPoint() {
-    return m_snapPoint;
-  }
+	protected final SnapPoint getSnapPoint() {
+		return m_snapPoint;
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/snapping/SnapPoints.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/snapping/SnapPoints.java
index a11388012..04e1c8512 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/snapping/SnapPoints.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/snapping/SnapPoints.java
@@ -31,350 +31,350 @@
  * @coverage core.gef.policy.snapping
  */
 public class SnapPoints {
-  protected final IVisualDataProvider m_visualDataProvider;
-  protected final List<IAbstractComponentInfo> m_allWidgets;
-  //
-  protected Point m_lastMouseLocation;
-  protected int m_horizontalMouseMoveDirection;
-  protected int m_verticalMouseMoveDirection;
-  // feedbacks
-  protected List<Figure> m_feedbacks = Lists.newArrayList();
-  private final IFeedbackProxy m_feedbackProxy;
-  private SnapPoint m_horizontalSnappedPoint;
-  private SnapPoint m_verticalSnappedPoint;
-  private final ISnapPointsProvider m_snapPoints;
-  private final ISnapPointsListener m_listener;
+	protected final IVisualDataProvider m_visualDataProvider;
+	protected final List<IAbstractComponentInfo> m_allWidgets;
+	//
+	protected Point m_lastMouseLocation;
+	protected int m_horizontalMouseMoveDirection;
+	protected int m_verticalMouseMoveDirection;
+	// feedbacks
+	protected List<Figure> m_feedbacks = Lists.newArrayList();
+	private final IFeedbackProxy m_feedbackProxy;
+	private SnapPoint m_horizontalSnappedPoint;
+	private SnapPoint m_verticalSnappedPoint;
+	private final ISnapPointsProvider m_snapPoints;
+	private final ISnapPointsListener m_listener;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @param listener
-   * @param allWidgets
-   *          A list of all components in host container.
-   */
-  public SnapPoints(IVisualDataProvider visualDataProvider,
-      IFeedbackProxy feedbackProxy,
-      ISnapPointsProvider snapPoints,
-      ISnapPointsListener listener,
-      List<? extends IAbstractComponentInfo> allWidgets) {
-    m_visualDataProvider = visualDataProvider;
-    m_feedbackProxy = feedbackProxy;
-    m_snapPoints = snapPoints;
-    m_listener = listener;
-    m_allWidgets = Lists.newArrayList(allWidgets);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @param listener
+	 * @param allWidgets
+	 *          A list of all components in host container.
+	 */
+	public SnapPoints(IVisualDataProvider visualDataProvider,
+			IFeedbackProxy feedbackProxy,
+			ISnapPointsProvider snapPoints,
+			ISnapPointsListener listener,
+			List<? extends IAbstractComponentInfo> allWidgets) {
+		m_visualDataProvider = visualDataProvider;
+		m_feedbackProxy = feedbackProxy;
+		m_snapPoints = snapPoints;
+		m_listener = listener;
+		m_allWidgets = Lists.newArrayList(allWidgets);
+	}
 
-  /**
-   * @param allWidgets
-   *          A list of all components in host container.
-   */
-  public SnapPoints(IVisualDataProvider visualDataProvider,
-      IFeedbackProxy feedbackProxy,
-      List<? extends IAbstractComponentInfo> allWidgets) {
-    this(visualDataProvider,
-        feedbackProxy,
-        new DefaultSnapPoints(visualDataProvider, allWidgets),
-        null,
-        allWidgets);
-  }
+	/**
+	 * @param allWidgets
+	 *          A list of all components in host container.
+	 */
+	public SnapPoints(IVisualDataProvider visualDataProvider,
+			IFeedbackProxy feedbackProxy,
+			List<? extends IAbstractComponentInfo> allWidgets) {
+		this(visualDataProvider,
+				feedbackProxy,
+				new DefaultSnapPoints(visualDataProvider, allWidgets),
+				null,
+				allWidgets);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Snapping magic
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Main snapping magic. This method processes added (by
-   * {@link SnapPoints#createHorizontalPoints(List)} and by other similar methods) snap points and
-   * modifies <code>snappedBounds</code> according to snap point which this bounds moves/resizes
-   * around. If no snap point engaged then grid snapping applied to <code>snappedBounds</code>. Any
-   * snapping may be disabled by {@link IVisualDataProvider#isSuppressingSnapping()}.
-   *
-   * @param location
-   *          Current mouse pointer location. Used to calc mouse move direction.
-   * @param beingSnappedList
-   *          A component model list that we want to be snapped.
-   * @param resizeDirection
-   *          Resize direction as it passed from ChangeBoundsRequest. Zero means that is no resizing
-   *          in progress.
-   */
-  public void processBounds(Point location,
-      List<? extends IAbstractComponentInfo> beingSnappedList,
-      Rectangle snappedBounds,
-      int resizeDirection) {
-    //
-    calculateMouseMoveDirections(location);
-    removeFeedbacks();
-    m_horizontalSnappedPoint = null;
-    m_verticalSnappedPoint = null;
-    // don't do any snapping if disabled
-    if (!m_visualDataProvider.isSuppressingSnapping()) {
-      if (m_visualDataProvider.useFreeSnapping()) {
-        // iterate thru vertical points to find one is snapped
-        for (SnapPoint snapPoint : getSnapPoints(false)) {
-          if (snapPoint.snap(
-              beingSnappedList,
-              snappedBounds,
-              m_verticalMouseMoveDirection,
-              resizeDirection)) {
-            m_verticalSnappedPoint = snapPoint;
-            break;
-          }
-        }
-        // iterate thru horizontal points to find one is snapped
-        for (SnapPoint snapPoint : getSnapPoints(true)) {
-          if (snapPoint.snap(
-              beingSnappedList,
-              snappedBounds,
-              m_horizontalMouseMoveDirection,
-              resizeDirection)) {
-            m_horizontalSnappedPoint = snapPoint;
-            break;
-          }
-        }
-      }
-      // if not snapped on this axis then apply grid snapping if enabled by visual data provider
-      if (m_verticalSnappedPoint == null) {
-        // apply grid. don't apply grid while resizing to every axis
-        if (resizeDirection == 0
-            || (resizeDirection & IPositionConstants.WEST) != 0
-            || (resizeDirection & IPositionConstants.EAST) != 0) {
-          applyGrid(snappedBounds, resizeDirection, true);
-        }
-      }
-      if (m_horizontalSnappedPoint == null) {
-        // apply grid. don't apply grid while resizing to every axis
-        if (resizeDirection == 0
-            || (resizeDirection & IPositionConstants.NORTH) != 0
-            || (resizeDirection & IPositionConstants.SOUTH) != 0) {
-          applyGrid(snappedBounds, resizeDirection, false);
-        }
-      }
-      // TODO: remove feedbacks drawing from here, leave just preparations
-      // draw feedback for snapped point (if any). do this after all possible
-      // snapping done to avoid improper annoying line feedback drawing
-      if (m_verticalSnappedPoint != null) {
-        m_verticalSnappedPoint.addFeedback(snappedBounds, m_feedbackProxy, m_feedbacks);
-      }
-      if (m_horizontalSnappedPoint != null) {
-        m_horizontalSnappedPoint.addFeedback(snappedBounds, m_feedbackProxy, m_feedbacks);
-      }
-    }
-    if (m_listener != null) {
-      m_listener.boundsChanged(snappedBounds, beingSnappedList, new SnapPoint[]{
-          m_horizontalSnappedPoint,
-          m_verticalSnappedPoint}, new int[]{
-          m_horizontalMouseMoveDirection,
-          m_verticalMouseMoveDirection});
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Snapping magic
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Main snapping magic. This method processes added (by
+	 * {@link SnapPoints#createHorizontalPoints(List)} and by other similar methods) snap points and
+	 * modifies <code>snappedBounds</code> according to snap point which this bounds moves/resizes
+	 * around. If no snap point engaged then grid snapping applied to <code>snappedBounds</code>. Any
+	 * snapping may be disabled by {@link IVisualDataProvider#isSuppressingSnapping()}.
+	 *
+	 * @param location
+	 *          Current mouse pointer location. Used to calc mouse move direction.
+	 * @param beingSnappedList
+	 *          A component model list that we want to be snapped.
+	 * @param resizeDirection
+	 *          Resize direction as it passed from ChangeBoundsRequest. Zero means that is no resizing
+	 *          in progress.
+	 */
+	public void processBounds(Point location,
+			List<? extends IAbstractComponentInfo> beingSnappedList,
+			Rectangle snappedBounds,
+			int resizeDirection) {
+		//
+		calculateMouseMoveDirections(location);
+		removeFeedbacks();
+		m_horizontalSnappedPoint = null;
+		m_verticalSnappedPoint = null;
+		// don't do any snapping if disabled
+		if (!m_visualDataProvider.isSuppressingSnapping()) {
+			if (m_visualDataProvider.useFreeSnapping()) {
+				// iterate thru vertical points to find one is snapped
+				for (SnapPoint snapPoint : getSnapPoints(false)) {
+					if (snapPoint.snap(
+							beingSnappedList,
+							snappedBounds,
+							m_verticalMouseMoveDirection,
+							resizeDirection)) {
+						m_verticalSnappedPoint = snapPoint;
+						break;
+					}
+				}
+				// iterate thru horizontal points to find one is snapped
+				for (SnapPoint snapPoint : getSnapPoints(true)) {
+					if (snapPoint.snap(
+							beingSnappedList,
+							snappedBounds,
+							m_horizontalMouseMoveDirection,
+							resizeDirection)) {
+						m_horizontalSnappedPoint = snapPoint;
+						break;
+					}
+				}
+			}
+			// if not snapped on this axis then apply grid snapping if enabled by visual data provider
+			if (m_verticalSnappedPoint == null) {
+				// apply grid. don't apply grid while resizing to every axis
+				if (resizeDirection == 0
+						|| (resizeDirection & IPositionConstants.WEST) != 0
+						|| (resizeDirection & IPositionConstants.EAST) != 0) {
+					applyGrid(snappedBounds, resizeDirection, true);
+				}
+			}
+			if (m_horizontalSnappedPoint == null) {
+				// apply grid. don't apply grid while resizing to every axis
+				if (resizeDirection == 0
+						|| (resizeDirection & IPositionConstants.NORTH) != 0
+						|| (resizeDirection & IPositionConstants.SOUTH) != 0) {
+					applyGrid(snappedBounds, resizeDirection, false);
+				}
+			}
+			// TODO: remove feedbacks drawing from here, leave just preparations
+			// draw feedback for snapped point (if any). do this after all possible
+			// snapping done to avoid improper annoying line feedback drawing
+			if (m_verticalSnappedPoint != null) {
+				m_verticalSnappedPoint.addFeedback(snappedBounds, m_feedbackProxy, m_feedbacks);
+			}
+			if (m_horizontalSnappedPoint != null) {
+				m_horizontalSnappedPoint.addFeedback(snappedBounds, m_feedbackProxy, m_feedbacks);
+			}
+		}
+		if (m_listener != null) {
+			m_listener.boundsChanged(snappedBounds, beingSnappedList, new SnapPoint[]{
+					m_horizontalSnappedPoint,
+					m_verticalSnappedPoint}, new int[]{
+							m_horizontalMouseMoveDirection,
+							m_verticalMouseMoveDirection});
+		}
+	}
 
-  void processBounds(PlacementsSupport placements,
-      Point location,
-      List<? extends IAbstractComponentInfo> beingSnappedList,
-      int resizeDirection) {
-    Rectangle snappedBounds = placements.getInternalBounds();
-    processBounds(location, beingSnappedList, snappedBounds, resizeDirection);
-    // do drag
-    placements.doDrag(
-        new int[]{m_horizontalMouseMoveDirection, m_verticalMouseMoveDirection},
-        new SnapPoint[]{m_horizontalSnappedPoint, m_verticalSnappedPoint});
-  }
+	void processBounds(PlacementsSupport placements,
+			Point location,
+			List<? extends IAbstractComponentInfo> beingSnappedList,
+			int resizeDirection) {
+		Rectangle snappedBounds = placements.getInternalBounds();
+		processBounds(location, beingSnappedList, snappedBounds, resizeDirection);
+		// do drag
+		placements.doDrag(
+				new int[]{m_horizontalMouseMoveDirection, m_verticalMouseMoveDirection},
+				new SnapPoint[]{m_horizontalSnappedPoint, m_verticalSnappedPoint});
+	}
 
-  /**
-   * Common method for grid snapping. Does some transposing and passes transposed values into grid
-   * snapping main method.
-   */
-  private void applyGrid(Rectangle snappedBounds, int resizeDirection, boolean isHorizontal) {
-    if (!m_visualDataProvider.useGridSnapping()) {
-      return;
-    }
-    Transposer t = new Transposer(!isHorizontal);
-    Rectangle transposed = t.t(snappedBounds);
-    applyGrid(transposed, resizeDirection, isHorizontal
-        ? m_horizontalMouseMoveDirection
-        : m_verticalMouseMoveDirection, isHorizontal
-        ? m_visualDataProvider.getGridStepX()
-        : m_visualDataProvider.getGridStepY());
-    snappedBounds.setBounds(t.t(transposed));
-  }
+	/**
+	 * Common method for grid snapping. Does some transposing and passes transposed values into grid
+	 * snapping main method.
+	 */
+	private void applyGrid(Rectangle snappedBounds, int resizeDirection, boolean isHorizontal) {
+		if (!m_visualDataProvider.useGridSnapping()) {
+			return;
+		}
+		Transposer t = new Transposer(!isHorizontal);
+		Rectangle transposed = t.t(snappedBounds);
+		applyGrid(transposed, resizeDirection, isHorizontal
+				? m_horizontalMouseMoveDirection
+						: m_verticalMouseMoveDirection, isHorizontal
+						? m_visualDataProvider.getGridStepX()
+								: m_visualDataProvider.getGridStepY());
+		snappedBounds.setBounds(t.t(transposed));
+	}
 
-  /**
-   * Grid snapping magic.
-   *
-   * Widget move snapping depends on mouse move direction: when direction is leading then widget
-   * left coordinate snapped to nearest to left grid-based coordinate, for trailing move direction
-   * widget's right side snapped to nearest to right grid-based coordinate.
-   *
-   * Widget resizing snaps as usual, depending on value passed from request.
-   *
-   * @param bounds
-   *          the transposed bounds to snap to grid.
-   * @param resizeDirection
-   *          the resize direction value passed from request.
-   * @param moveDirection
-   *          the transposed mouse move direction.
-   * @param gridStep
-   *          the "transposed" grid step.
-   */
-  private void applyGrid(Rectangle bounds, int resizeDirection, int moveDirection, int gridStep) {
-    if (resizeDirection == 0) { // moving
-      if (moveDirection == PlacementInfo.LEADING) {
-        int snapX = applyGrid(bounds.x, gridStep);
-        bounds.x = snapX;
-      } else {
-        int snapRight = applyGrid(bounds.right(), gridStep);
-        bounds.x = snapRight - bounds.width;
-      }
-    } else { // resizing
-      if ((resizeDirection & IPositionConstants.WEST) != 0
-          || (resizeDirection & IPositionConstants.NORTH) != 0) {
-        int snapX = applyGrid(bounds.x, gridStep);
-        bounds.width = bounds.right() - snapX;
-        bounds.x = snapX;
-      } else if ((resizeDirection & IPositionConstants.EAST) != 0
-          || (resizeDirection & IPositionConstants.SOUTH) != 0) {
-        int snapRight = applyGrid(bounds.right(), gridStep);
-        bounds.width = snapRight - bounds.x;
-      }
-    }
-  }
+	/**
+	 * Grid snapping magic.
+	 *
+	 * Widget move snapping depends on mouse move direction: when direction is leading then widget
+	 * left coordinate snapped to nearest to left grid-based coordinate, for trailing move direction
+	 * widget's right side snapped to nearest to right grid-based coordinate.
+	 *
+	 * Widget resizing snaps as usual, depending on value passed from request.
+	 *
+	 * @param bounds
+	 *          the transposed bounds to snap to grid.
+	 * @param resizeDirection
+	 *          the resize direction value passed from request.
+	 * @param moveDirection
+	 *          the transposed mouse move direction.
+	 * @param gridStep
+	 *          the "transposed" grid step.
+	 */
+	private void applyGrid(Rectangle bounds, int resizeDirection, int moveDirection, int gridStep) {
+		if (resizeDirection == 0) { // moving
+			if (moveDirection == PlacementInfo.LEADING) {
+				int snapX = applyGrid(bounds.x, gridStep);
+				bounds.x = snapX;
+			} else {
+				int snapRight = applyGrid(bounds.right(), gridStep);
+				bounds.x = snapRight - bounds.width;
+			}
+		} else { // resizing
+			if ((resizeDirection & IPositionConstants.WEST) != 0
+					|| (resizeDirection & IPositionConstants.NORTH) != 0) {
+				int snapX = applyGrid(bounds.x, gridStep);
+				bounds.width = bounds.right() - snapX;
+				bounds.x = snapX;
+			} else if ((resizeDirection & IPositionConstants.EAST) != 0
+					|| (resizeDirection & IPositionConstants.SOUTH) != 0) {
+				int snapRight = applyGrid(bounds.right(), gridStep);
+				bounds.width = snapRight - bounds.x;
+			}
+		}
+	}
 
-  /**
-   * Simple math round to nearest integer, based on grid step.
-   */
-  private int applyGrid(int value, int step) {
-    return value / step * step;
-  }
+	/**
+	 * Simple math round to nearest integer, based on grid step.
+	 */
+	private int applyGrid(int value, int step) {
+		return value / step * step;
+	}
 
-  /**
-   * Helper method to calculate mouse move direction.
-   */
-  protected void calculateMouseMoveDirections(Point mouseLocation) {
-    if (m_lastMouseLocation == null) {
-      m_lastMouseLocation = mouseLocation;
-      return;
-    }
-    int deltaX = mouseLocation.x - m_lastMouseLocation.x;
-    int deltaY = mouseLocation.y - m_lastMouseLocation.y;
-    if (deltaX != 0) {
-      m_horizontalMouseMoveDirection = deltaX > 0 ? PlacementInfo.TRAILING : PlacementInfo.LEADING;
-    }
-    if (deltaY != 0) {
-      m_verticalMouseMoveDirection = deltaY > 0 ? PlacementInfo.TRAILING : PlacementInfo.LEADING;
-    }
-    m_lastMouseLocation = mouseLocation;
-  }
+	/**
+	 * Helper method to calculate mouse move direction.
+	 */
+	protected void calculateMouseMoveDirections(Point mouseLocation) {
+		if (m_lastMouseLocation == null) {
+			m_lastMouseLocation = mouseLocation;
+			return;
+		}
+		int deltaX = mouseLocation.x - m_lastMouseLocation.x;
+		int deltaY = mouseLocation.y - m_lastMouseLocation.y;
+		if (deltaX != 0) {
+			m_horizontalMouseMoveDirection = deltaX > 0 ? PlacementInfo.TRAILING : PlacementInfo.LEADING;
+		}
+		if (deltaY != 0) {
+			m_verticalMouseMoveDirection = deltaY > 0 ? PlacementInfo.TRAILING : PlacementInfo.LEADING;
+		}
+		m_lastMouseLocation = mouseLocation;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Snap points creation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Used to create snap points at whole.
-   */
-  private List<SnapPoint> getSnapPoints(boolean isHorizontal) {
-    List<SnapPoint> pts = Lists.newArrayList();
-    for (IAbstractComponentInfo child : m_allWidgets) {
-      pts.addAll(m_snapPoints.forComponent(child, isHorizontal));
-    }
-    pts.addAll(m_snapPoints.forContainer(isHorizontal));
-    return pts;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Snap points creation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Used to create snap points at whole.
+	 */
+	private List<SnapPoint> getSnapPoints(boolean isHorizontal) {
+		List<SnapPoint> pts = Lists.newArrayList();
+		for (IAbstractComponentInfo child : m_allWidgets) {
+			pts.addAll(m_snapPoints.forComponent(child, isHorizontal));
+		}
+		pts.addAll(m_snapPoints.forContainer(isHorizontal));
+		return pts;
+	}
 
-  public static class DefaultSnapPoints implements ISnapPointsProvider {
-    private final IVisualDataProvider m_visualDataProvider;
-    private final List<? extends IAbstractComponentInfo> m_allWidgets;
+	public static class DefaultSnapPoints implements ISnapPointsProvider {
+		private final IVisualDataProvider m_visualDataProvider;
+		private final List<? extends IAbstractComponentInfo> m_allWidgets;
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public DefaultSnapPoints(IVisualDataProvider visualDataProvider,
-        List<? extends IAbstractComponentInfo> allWidgets) {
-      m_visualDataProvider = visualDataProvider;
-      m_allWidgets = allWidgets;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public DefaultSnapPoints(IVisualDataProvider visualDataProvider,
+				List<? extends IAbstractComponentInfo> allWidgets) {
+			m_visualDataProvider = visualDataProvider;
+			m_allWidgets = allWidgets;
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // ISnapPointsProvider
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public List<SnapPoint> forContainer(boolean isHorizontal) {
-      List<SnapPoint> pts = Lists.newArrayList();
-      int leadingSide = PlacementUtils.getSide(isHorizontal, true);
-      int trailingSide = PlacementUtils.getSide(isHorizontal, false);
-      // snap to parent at left side with gap
-      pts.add(new ContainerSnapPoint(m_visualDataProvider, leadingSide, true));
-      // snap to parent at left side
-      pts.add(new ContainerSnapPoint(m_visualDataProvider, leadingSide));
-      // snap to parent at right side with gap
-      pts.add(new ContainerSnapPoint(m_visualDataProvider, trailingSide, true));
-      // snap to parent at right side
-      pts.add(new ContainerSnapPoint(m_visualDataProvider, trailingSide));
-      //
-      pts.add(new SameSizeSnapPoint(m_visualDataProvider, m_allWidgets, leadingSide));
-      pts.add(new SameSizeSnapPoint(m_visualDataProvider, m_allWidgets, trailingSide));
-      return pts;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// ISnapPointsProvider
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public List<SnapPoint> forContainer(boolean isHorizontal) {
+			List<SnapPoint> pts = Lists.newArrayList();
+			int leadingSide = PlacementUtils.getSide(isHorizontal, true);
+			int trailingSide = PlacementUtils.getSide(isHorizontal, false);
+			// snap to parent at left side with gap
+			pts.add(new ContainerSnapPoint(m_visualDataProvider, leadingSide, true));
+			// snap to parent at left side
+			pts.add(new ContainerSnapPoint(m_visualDataProvider, leadingSide));
+			// snap to parent at right side with gap
+			pts.add(new ContainerSnapPoint(m_visualDataProvider, trailingSide, true));
+			// snap to parent at right side
+			pts.add(new ContainerSnapPoint(m_visualDataProvider, trailingSide));
+			//
+			pts.add(new SameSizeSnapPoint(m_visualDataProvider, m_allWidgets, leadingSide));
+			pts.add(new SameSizeSnapPoint(m_visualDataProvider, m_allWidgets, trailingSide));
+			return pts;
+		}
 
-    @Override
-    public List<SnapPoint> forComponent(IAbstractComponentInfo target, boolean isHorizontal) {
-      List<SnapPoint> pts = Lists.newArrayList();
-      int leadingSide = PlacementUtils.getSide(isHorizontal, true);
-      int trailingSide = PlacementUtils.getSide(isHorizontal, false);
-      if (isHorizontal) {
-        // snap to child on left side with indent
-        pts.add(new IndentedComponentSnapPoint(m_visualDataProvider, target));
-      } else {
-        // baseline snap
-        pts.add(new BaselineComponentSnapPoint(m_visualDataProvider, target));
-      }
-      // snap to child on left side with gap
-      pts.add(new ComponentSnapPoint(m_visualDataProvider,
-          target,
-          leadingSide,
-          PlacementInfo.TRAILING,
-          true));
-      // snap to child on left side
-      pts.add(new ComponentSnapPoint(m_visualDataProvider,
-          target,
-          leadingSide,
-          PlacementInfo.LEADING));
-      // snap to child on right side with gap
-      pts.add(new ComponentSnapPoint(m_visualDataProvider,
-          target,
-          trailingSide,
-          PlacementInfo.LEADING,
-          true));
-      // snap to child on right side
-      pts.add(new ComponentSnapPoint(m_visualDataProvider,
-          target,
-          trailingSide,
-          PlacementInfo.TRAILING));
-      return pts;
-    }
-  }
+		@Override
+		public List<SnapPoint> forComponent(IAbstractComponentInfo target, boolean isHorizontal) {
+			List<SnapPoint> pts = Lists.newArrayList();
+			int leadingSide = PlacementUtils.getSide(isHorizontal, true);
+			int trailingSide = PlacementUtils.getSide(isHorizontal, false);
+			if (isHorizontal) {
+				// snap to child on left side with indent
+				pts.add(new IndentedComponentSnapPoint(m_visualDataProvider, target));
+			} else {
+				// baseline snap
+				pts.add(new BaselineComponentSnapPoint(m_visualDataProvider, target));
+			}
+			// snap to child on left side with gap
+			pts.add(new ComponentSnapPoint(m_visualDataProvider,
+					target,
+					leadingSide,
+					PlacementInfo.TRAILING,
+					true));
+			// snap to child on left side
+			pts.add(new ComponentSnapPoint(m_visualDataProvider,
+					target,
+					leadingSide,
+					PlacementInfo.LEADING));
+			// snap to child on right side with gap
+			pts.add(new ComponentSnapPoint(m_visualDataProvider,
+					target,
+					trailingSide,
+					PlacementInfo.LEADING,
+					true));
+			// snap to child on right side
+			pts.add(new ComponentSnapPoint(m_visualDataProvider,
+					target,
+					trailingSide,
+					PlacementInfo.TRAILING));
+			return pts;
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Feedbacks
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Removes all feedbacks.
-   */
-  public void removeFeedbacks() {
-    for (Figure figure : m_feedbacks) {
-      FigureUtils.removeFigure(figure);
-    }
-    m_feedbacks = Lists.newArrayList();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Feedbacks
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Removes all feedbacks.
+	 */
+	public void removeFeedbacks() {
+		for (Figure figure : m_feedbacks) {
+			FigureUtils.removeFigure(figure);
+		}
+		m_feedbacks = Lists.newArrayList();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gefTree/EditPartFactory.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gefTree/EditPartFactory.java
index 6c852f319..2b4606359 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gefTree/EditPartFactory.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gefTree/EditPartFactory.java
@@ -33,103 +33,103 @@
  * @coverage core.gefTree
  */
 public final class EditPartFactory implements IEditPartFactory {
-  public static final EditPartFactory INSTANCE = new EditPartFactory();
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private EditPartFactory() {
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IEditPartFactory
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public EditPart createEditPart(EditPart context, Object model) {
-    if (model == null) {
-      return null;
-    }
-    // create EditPart
-    EditPart editPart = createEditPartPure(context, model);
-    if (editPart != null) {
-      configureEditPart(context, editPart);
-      return editPart;
-    }
-    // no EditPart found
-    return null;
-  }
-  private EditPart createEditPartPure(EditPart context, Object model) {
-    // menu
-    if (model instanceof ObjectInfo) {
-      ObjectInfo objectInfo = (ObjectInfo) model;
-      {
-        IMenuInfo menuObject = MenuObjectInfoUtils.getMenuInfo(model);
-        if (menuObject != null) {
-          return new MenuEditPart(objectInfo, menuObject);
-        }
-      }
-      {
-        IMenuItemInfo itemObject = MenuObjectInfoUtils.getMenuItemInfo(model);
-        if (itemObject != null) {
-          return new MenuItemEditPart(objectInfo, itemObject);
-        }
-      }
-    }
-    // check each external factory
-    for (IEditPartFactory factory : getFactories()) {
-      EditPart editPart = factory.createEditPart(context, model);
-      if (editPart != null) {
-        return editPart;
-      }
-    }
-    // flow container group
-    // TODO(scheglov)
-//    if (model instanceof FlowContainerGroupInfo) {
-//      FlowContainerGroupInfo groupInfo = (FlowContainerGroupInfo) model;
-//      return new FlowContainerGroupEditPart(groupInfo);
-//    }
-//    // child array
-//    if (model instanceof AbstractArrayObjectInfo) {
-//      AbstractArrayObjectInfo arrayInfo = (AbstractArrayObjectInfo) model;
-//      return new ArrayObjectEditPart(arrayInfo);
-//    }
-//    // use default EditPart for JavaInfo and ObjectInfo
-//    if (model instanceof JavaInfo) {
-//      return new JavaEditPart((JavaInfo) model);
-//    }
-    if (model instanceof ObjectInfo) {
-      return new ObjectEditPart((ObjectInfo) model);
-    }
-    // no EditPart found
-    return null;
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Extensions
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the instances of {@link IEditPartFactory}.
-   */
-  private static List<IEditPartFactory> getFactories() {
-    return ExternalFactoriesHelper.getElementsInstances(
-        IEditPartFactory.class,
-        "org.eclipse.wb.core.treeEditPartFactories",
-        "factory");
-  }
-  /**
-   * Configures given {@link EditPart} using externally contributed {@link IEditPartConfigurator}'s.
-   */
-  private static void configureEditPart(EditPart context, EditPart editPart) {
-    List<IEditPartConfigurator> configurators =
-        ExternalFactoriesHelper.getElementsInstances(
-            IEditPartConfigurator.class,
-            "org.eclipse.wb.core.treeEditPartConfigurators",
-            "configurator");
-    for (IEditPartConfigurator configurator : configurators) {
-      configurator.configure(context, editPart);
-    }
-  }
+	public static final EditPartFactory INSTANCE = new EditPartFactory();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private EditPartFactory() {
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IEditPartFactory
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public EditPart createEditPart(EditPart context, Object model) {
+		if (model == null) {
+			return null;
+		}
+		// create EditPart
+		EditPart editPart = createEditPartPure(context, model);
+		if (editPart != null) {
+			configureEditPart(context, editPart);
+			return editPart;
+		}
+		// no EditPart found
+		return null;
+	}
+	private EditPart createEditPartPure(EditPart context, Object model) {
+		// menu
+		if (model instanceof ObjectInfo) {
+			ObjectInfo objectInfo = (ObjectInfo) model;
+			{
+				IMenuInfo menuObject = MenuObjectInfoUtils.getMenuInfo(model);
+				if (menuObject != null) {
+					return new MenuEditPart(objectInfo, menuObject);
+				}
+			}
+			{
+				IMenuItemInfo itemObject = MenuObjectInfoUtils.getMenuItemInfo(model);
+				if (itemObject != null) {
+					return new MenuItemEditPart(objectInfo, itemObject);
+				}
+			}
+		}
+		// check each external factory
+		for (IEditPartFactory factory : getFactories()) {
+			EditPart editPart = factory.createEditPart(context, model);
+			if (editPart != null) {
+				return editPart;
+			}
+		}
+		// flow container group
+		// TODO(scheglov)
+		//    if (model instanceof FlowContainerGroupInfo) {
+		//      FlowContainerGroupInfo groupInfo = (FlowContainerGroupInfo) model;
+		//      return new FlowContainerGroupEditPart(groupInfo);
+		//    }
+		//    // child array
+		//    if (model instanceof AbstractArrayObjectInfo) {
+		//      AbstractArrayObjectInfo arrayInfo = (AbstractArrayObjectInfo) model;
+		//      return new ArrayObjectEditPart(arrayInfo);
+		//    }
+		//    // use default EditPart for JavaInfo and ObjectInfo
+		//    if (model instanceof JavaInfo) {
+		//      return new JavaEditPart((JavaInfo) model);
+		//    }
+		if (model instanceof ObjectInfo) {
+			return new ObjectEditPart((ObjectInfo) model);
+		}
+		// no EditPart found
+		return null;
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Extensions
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the instances of {@link IEditPartFactory}.
+	 */
+	private static List<IEditPartFactory> getFactories() {
+		return ExternalFactoriesHelper.getElementsInstances(
+				IEditPartFactory.class,
+				"org.eclipse.wb.core.treeEditPartFactories",
+				"factory");
+	}
+	/**
+	 * Configures given {@link EditPart} using externally contributed {@link IEditPartConfigurator}'s.
+	 */
+	private static void configureEditPart(EditPart context, EditPart editPart) {
+		List<IEditPartConfigurator> configurators =
+				ExternalFactoriesHelper.getElementsInstances(
+						IEditPartConfigurator.class,
+						"org.eclipse.wb.core.treeEditPartConfigurators",
+						"configurator");
+		for (IEditPartConfigurator configurator : configurators) {
+			configurator.configure(context, editPart);
+		}
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gefTree/part/menu/MenuEditPart.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gefTree/part/menu/MenuEditPart.java
index 02e3252e7..43858e36f 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gefTree/part/menu/MenuEditPart.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gefTree/part/menu/MenuEditPart.java
@@ -23,40 +23,40 @@
  * @coverage core.gefTree.menu
  */
 public final class MenuEditPart extends ObjectEditPart {
-  private final ObjectInfo m_menuInfo;
-  private final IMenuInfo m_menu;
+	private final ObjectInfo m_menuInfo;
+	private final IMenuInfo m_menu;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public MenuEditPart(ObjectInfo menuInfo, IMenuInfo menu) {
-    super(menuInfo);
-    m_menuInfo = menuInfo;
-    m_menu = menu;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public MenuEditPart(ObjectInfo menuInfo, IMenuInfo menu) {
+		super(menuInfo);
+		m_menuInfo = menuInfo;
+		m_menu = menu;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link IMenuInfo} model.
-   */
-  public IMenuInfo getMenu() {
-    return m_menu;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link IMenuInfo} model.
+	 */
+	public IMenuInfo getMenu() {
+		return m_menu;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Policies
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createEditPolicies() {
-    super.createEditPolicies();
-    installEditPolicy(new MenuLayoutEditPolicy(m_menuInfo, m_menu));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Policies
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createEditPolicies() {
+		super.createEditPolicies();
+		installEditPolicy(new MenuLayoutEditPolicy(m_menuInfo, m_menu));
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gefTree/part/menu/MenuItemEditPart.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gefTree/part/menu/MenuItemEditPart.java
index a6b0a1522..742c90643 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gefTree/part/menu/MenuItemEditPart.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gefTree/part/menu/MenuItemEditPart.java
@@ -23,28 +23,28 @@
  * @coverage core.gefTree.menu
  */
 public final class MenuItemEditPart extends ObjectEditPart {
-  private final ObjectInfo m_itemInfo;
-  private final IMenuItemInfo m_itemObject;
+	private final ObjectInfo m_itemInfo;
+	private final IMenuItemInfo m_itemObject;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public MenuItemEditPart(ObjectInfo itemInfo, IMenuItemInfo itemObject) {
-    super(itemInfo);
-    m_itemInfo = itemInfo;
-    m_itemObject = itemObject;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public MenuItemEditPart(ObjectInfo itemInfo, IMenuItemInfo itemObject) {
+		super(itemInfo);
+		m_itemInfo = itemInfo;
+		m_itemObject = itemObject;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Policies
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createEditPolicies() {
-    super.createEditPolicies();
-    installEditPolicy(new MenuItemLayoutEditPolicy(m_itemInfo, m_itemObject));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Policies
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createEditPolicies() {
+		super.createEditPolicies();
+		installEditPolicy(new MenuItemLayoutEditPolicy(m_itemInfo, m_itemObject));
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gefTree/policy/generic/FlowContainerLayoutEditPolicy.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gefTree/policy/generic/FlowContainerLayoutEditPolicy.java
index 24743e394..3e27aa76f 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gefTree/policy/generic/FlowContainerLayoutEditPolicy.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gefTree/policy/generic/FlowContainerLayoutEditPolicy.java
@@ -27,52 +27,52 @@
  * @coverage core.gefTree.policy
  */
 public final class FlowContainerLayoutEditPolicy extends ObjectLayoutEditPolicy<Object> {
-  private final FlowContainer m_container;
-  private final ILayoutRequestValidator m_requestValidator;
+	private final FlowContainer m_container;
+	private final ILayoutRequestValidator m_requestValidator;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FlowContainerLayoutEditPolicy(ObjectInfo model, FlowContainer container) {
-    super(model);
-    m_container = container;
-    {
-      ILayoutRequestValidator validator = new AbstractContainerRequestValidator(container);
-      validator = LayoutRequestValidators.cache(validator);
-      m_requestValidator = LayoutRequestValidators.finalize(validator);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FlowContainerLayoutEditPolicy(ObjectInfo model, FlowContainer container) {
+		super(model);
+		m_container = container;
+		{
+			ILayoutRequestValidator validator = new AbstractContainerRequestValidator(container);
+			validator = LayoutRequestValidators.cache(validator);
+			m_requestValidator = LayoutRequestValidators.finalize(validator);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Requests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected ILayoutRequestValidator getRequestValidator() {
-    return m_requestValidator;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Requests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected ILayoutRequestValidator getRequestValidator() {
+		return m_requestValidator;
+	}
 
-  @Override
-  protected boolean isGoodReferenceChild(Request request, EditPart editPart) {
-    Object referenceModel = editPart.getModel();
-    return m_container.validateReference(referenceModel);
-  }
+	@Override
+	protected boolean isGoodReferenceChild(Request request, EditPart editPart) {
+		Object referenceModel = editPart.getModel();
+		return m_container.validateReference(referenceModel);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void command_CREATE(Object newObject, Object referenceObject) throws Exception {
-    m_container.command_CREATE(newObject, referenceObject);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void command_CREATE(Object newObject, Object referenceObject) throws Exception {
+		m_container.command_CREATE(newObject, referenceObject);
+	}
 
-  @Override
-  protected void command_MOVE(Object object, Object referenceObject) throws Exception {
-    m_container.command_MOVE(object, referenceObject);
-  }
+	@Override
+	protected void command_MOVE(Object object, Object referenceObject) throws Exception {
+		m_container.command_MOVE(object, referenceObject);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gefTree/policy/generic/SimpleContainerLayoutEditPolicy.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gefTree/policy/generic/SimpleContainerLayoutEditPolicy.java
index a7f11247f..96ff7f12b 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gefTree/policy/generic/SimpleContainerLayoutEditPolicy.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gefTree/policy/generic/SimpleContainerLayoutEditPolicy.java
@@ -25,51 +25,51 @@
  * @coverage core.gefTree.policy
  */
 public final class SimpleContainerLayoutEditPolicy extends SingleObjectLayoutEditPolicy<Object> {
-  private final SimpleContainer m_container;
-  private final ILayoutRequestValidator m_requestValidator;
+	private final SimpleContainer m_container;
+	private final ILayoutRequestValidator m_requestValidator;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SimpleContainerLayoutEditPolicy(ObjectInfo model, SimpleContainer container) {
-    super(model);
-    m_container = container;
-    {
-      ILayoutRequestValidator validator = new AbstractContainerRequestValidator(container);
-      validator = LayoutRequestValidators.cache(validator);
-      m_requestValidator = validator;
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SimpleContainerLayoutEditPolicy(ObjectInfo model, SimpleContainer container) {
+		super(model);
+		m_container = container;
+		{
+			ILayoutRequestValidator validator = new AbstractContainerRequestValidator(container);
+			validator = LayoutRequestValidators.cache(validator);
+			m_requestValidator = validator;
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Requests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected ILayoutRequestValidator getRequestValidator() {
-    return m_requestValidator;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Requests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected ILayoutRequestValidator getRequestValidator() {
+		return m_requestValidator;
+	}
 
-  @Override
-  protected boolean isEmpty() {
-    return m_container.isEmpty();
-  }
+	@Override
+	protected boolean isEmpty() {
+		return m_container.isEmpty();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void command_CREATE(Object component) throws Exception {
-    m_container.command_CREATE(component);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void command_CREATE(Object component) throws Exception {
+		m_container.command_CREATE(component);
+	}
 
-  @Override
-  protected void command_ADD(Object component) throws Exception {
-    m_container.command_ADD(component);
-  }
+	@Override
+	protected void command_ADD(Object component) throws Exception {
+		m_container.command_ADD(component);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gefTree/policy/menu/MenuItemLayoutEditPolicy.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gefTree/policy/menu/MenuItemLayoutEditPolicy.java
index 3392aa691..c60206e49 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gefTree/policy/menu/MenuItemLayoutEditPolicy.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gefTree/policy/menu/MenuItemLayoutEditPolicy.java
@@ -32,107 +32,107 @@
  * @coverage swt.gefTree.policy.menu
  */
 public class MenuItemLayoutEditPolicy extends LayoutEditPolicy {
-  private final ObjectInfo m_itemInfo;
-  private final IMenuItemInfo m_itemObject;
-  private final IMenuPolicy m_menuPolicy;
+	private final ObjectInfo m_itemInfo;
+	private final IMenuItemInfo m_itemObject;
+	private final IMenuPolicy m_menuPolicy;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public MenuItemLayoutEditPolicy(ObjectInfo itemInfo, IMenuItemInfo itemObject) {
-    m_itemInfo = itemInfo;
-    m_itemObject = itemObject;
-    m_menuPolicy = m_itemObject.getPolicy();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public MenuItemLayoutEditPolicy(ObjectInfo itemInfo, IMenuItemInfo itemObject) {
+		m_itemInfo = itemInfo;
+		m_itemObject = itemObject;
+		m_menuPolicy = m_itemObject.getPolicy();
+	}
 
-  /////////////////////////////////////////////////////////////////////
-  //
-  // LayoutEditPolicy
-  //
-  /////////////////////////////////////////////////////////////////////
-  @Override
-  protected boolean isGoodReferenceChild(Request request, EditPart editPart) {
-    return false;
-  }
+	/////////////////////////////////////////////////////////////////////
+	//
+	// LayoutEditPolicy
+	//
+	/////////////////////////////////////////////////////////////////////
+	@Override
+	protected boolean isGoodReferenceChild(Request request, EditPart editPart) {
+		return false;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Command getCreateCommand(final Object newObject, final Object referenceObject) {
-    return new EditCommand(m_itemInfo) {
-      @Override
-      public void executeEdit() throws Exception {
-        m_menuPolicy.commandCreate(newObject, referenceObject);
-      }
-    };
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Command getCreateCommand(final Object newObject, final Object referenceObject) {
+		return new EditCommand(m_itemInfo) {
+			@Override
+			public void executeEdit() throws Exception {
+				m_menuPolicy.commandCreate(newObject, referenceObject);
+			}
+		};
+	}
 
-  @Override
-  protected Command getPasteCommand(final PasteRequest request, final Object referenceObject) {
-    return new EditCommand(m_itemInfo) {
-      @Override
-      public void executeEdit() throws Exception {
-        m_menuPolicy.commandPaste(request.getMemento(), referenceObject);
-      }
-    };
-  }
+	@Override
+	protected Command getPasteCommand(final PasteRequest request, final Object referenceObject) {
+		return new EditCommand(m_itemInfo) {
+			@Override
+			public void executeEdit() throws Exception {
+				m_menuPolicy.commandPaste(request.getMemento(), referenceObject);
+			}
+		};
+	}
 
-  @Override
-  protected Command getMoveCommand(final List<EditPart> moveParts, final Object referenceObject) {
-    return new EditCommand(m_itemInfo) {
-      @Override
-      public void executeEdit() throws Exception {
-        for (EditPart editPart : moveParts) {
-          m_menuPolicy.commandMove(editPart.getModel(), referenceObject);
-        }
-      }
-    };
-  }
+	@Override
+	protected Command getMoveCommand(final List<EditPart> moveParts, final Object referenceObject) {
+		return new EditCommand(m_itemInfo) {
+			@Override
+			public void executeEdit() throws Exception {
+				for (EditPart editPart : moveParts) {
+					m_menuPolicy.commandMove(editPart.getModel(), referenceObject);
+				}
+			}
+		};
+	}
 
-  @Override
-  protected Command getAddCommand(List<EditPart> addParts, Object referenceObject) {
-    return getMoveCommand(addParts, referenceObject);
-  }
+	@Override
+	protected Command getAddCommand(List<EditPart> addParts, Object referenceObject) {
+		return getMoveCommand(addParts, referenceObject);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Validator
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected ILayoutRequestValidator getRequestValidator() {
-    return VALIDATOR;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Validator
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected ILayoutRequestValidator getRequestValidator() {
+		return VALIDATOR;
+	}
 
-  private final ILayoutRequestValidator VALIDATOR = new ILayoutRequestValidator() {
-    @Override
-    public boolean validateCreateRequest(EditPart host, CreateRequest request) {
-      return m_menuPolicy.validateCreate(request.getNewObject());
-    }
+	private final ILayoutRequestValidator VALIDATOR = new ILayoutRequestValidator() {
+		@Override
+		public boolean validateCreateRequest(EditPart host, CreateRequest request) {
+			return m_menuPolicy.validateCreate(request.getNewObject());
+		}
 
-    @Override
-    public boolean validatePasteRequest(EditPart host, PasteRequest request) {
-      return m_menuPolicy.validatePaste(request.getMemento());
-    }
+		@Override
+		public boolean validatePasteRequest(EditPart host, PasteRequest request) {
+			return m_menuPolicy.validatePaste(request.getMemento());
+		}
 
-    @Override
-    public boolean validateMoveRequest(EditPart host, ChangeBoundsRequest request) {
-      for (EditPart editPart : request.getEditParts()) {
-        if (!m_menuPolicy.validateMove(editPart.getModel())) {
-          return false;
-        }
-      }
-      return true;
-    }
+		@Override
+		public boolean validateMoveRequest(EditPart host, ChangeBoundsRequest request) {
+			for (EditPart editPart : request.getEditParts()) {
+				if (!m_menuPolicy.validateMove(editPart.getModel())) {
+					return false;
+				}
+			}
+			return true;
+		}
 
-    @Override
-    public boolean validateAddRequest(EditPart host, ChangeBoundsRequest request) {
-      return validateMoveRequest(host, request);
-    }
-  };
+		@Override
+		public boolean validateAddRequest(EditPart host, ChangeBoundsRequest request) {
+			return validateMoveRequest(host, request);
+		}
+	};
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gefTree/policy/menu/MenuLayoutEditPolicy.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gefTree/policy/menu/MenuLayoutEditPolicy.java
index 89ca6454d..ba593fd53 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gefTree/policy/menu/MenuLayoutEditPolicy.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gefTree/policy/menu/MenuLayoutEditPolicy.java
@@ -33,107 +33,107 @@
  * @coverage core.gefTree.menu
  */
 public final class MenuLayoutEditPolicy extends LayoutEditPolicy {
-  private final ObjectInfo m_menuInfo;
-  private final IMenuInfo m_menuObject;
-  private final IMenuPolicy m_menuPolicy;
+	private final ObjectInfo m_menuInfo;
+	private final IMenuInfo m_menuObject;
+	private final IMenuPolicy m_menuPolicy;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public MenuLayoutEditPolicy(ObjectInfo menuInfo, IMenuInfo menuObject) {
-    m_menuInfo = menuInfo;
-    m_menuObject = menuObject;
-    m_menuPolicy = m_menuObject.getPolicy();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public MenuLayoutEditPolicy(ObjectInfo menuInfo, IMenuInfo menuObject) {
+		m_menuInfo = menuInfo;
+		m_menuObject = menuObject;
+		m_menuPolicy = m_menuObject.getPolicy();
+	}
 
-  /////////////////////////////////////////////////////////////////////
-  //
-  // LayoutEditPolicy
-  //
-  /////////////////////////////////////////////////////////////////////
-  @Override
-  protected boolean isGoodReferenceChild(Request request, EditPart editPart) {
-    return true;
-  }
+	/////////////////////////////////////////////////////////////////////
+	//
+	// LayoutEditPolicy
+	//
+	/////////////////////////////////////////////////////////////////////
+	@Override
+	protected boolean isGoodReferenceChild(Request request, EditPart editPart) {
+		return true;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Command getCreateCommand(final Object newObject, final Object referenceObject) {
-    return new EditCommand(m_menuInfo) {
-      @Override
-      public void executeEdit() throws Exception {
-        m_menuPolicy.commandCreate(newObject, referenceObject);
-      }
-    };
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Command getCreateCommand(final Object newObject, final Object referenceObject) {
+		return new EditCommand(m_menuInfo) {
+			@Override
+			public void executeEdit() throws Exception {
+				m_menuPolicy.commandCreate(newObject, referenceObject);
+			}
+		};
+	}
 
-  @Override
-  protected Command getPasteCommand(final PasteRequest request, final Object referenceObject) {
-    return new EditCommand(m_menuInfo) {
-      @Override
-      public void executeEdit() throws Exception {
-        m_menuPolicy.commandPaste(request.getMemento(), referenceObject);
-      }
-    };
-  }
+	@Override
+	protected Command getPasteCommand(final PasteRequest request, final Object referenceObject) {
+		return new EditCommand(m_menuInfo) {
+			@Override
+			public void executeEdit() throws Exception {
+				m_menuPolicy.commandPaste(request.getMemento(), referenceObject);
+			}
+		};
+	}
 
-  @Override
-  protected Command getMoveCommand(final List<EditPart> moveParts, final Object referenceObject) {
-    return new EditCommand(m_menuInfo) {
-      @Override
-      public void executeEdit() throws Exception {
-        for (EditPart editPart : moveParts) {
-          m_menuPolicy.commandMove(editPart.getModel(), referenceObject);
-        }
-      }
-    };
-  }
+	@Override
+	protected Command getMoveCommand(final List<EditPart> moveParts, final Object referenceObject) {
+		return new EditCommand(m_menuInfo) {
+			@Override
+			public void executeEdit() throws Exception {
+				for (EditPart editPart : moveParts) {
+					m_menuPolicy.commandMove(editPart.getModel(), referenceObject);
+				}
+			}
+		};
+	}
 
-  @Override
-  protected Command getAddCommand(List<EditPart> addParts, Object referenceObject) {
-    return getMoveCommand(addParts, referenceObject);
-  }
+	@Override
+	protected Command getAddCommand(List<EditPart> addParts, Object referenceObject) {
+		return getMoveCommand(addParts, referenceObject);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Validator
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected ILayoutRequestValidator getRequestValidator() {
-    return VALIDATOR;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Validator
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected ILayoutRequestValidator getRequestValidator() {
+		return VALIDATOR;
+	}
 
-  private final ILayoutRequestValidator VALIDATOR = new ILayoutRequestValidator() {
-    @Override
-    public boolean validateCreateRequest(EditPart host, CreateRequest request) {
-      return m_menuPolicy.validateCreate(request.getNewObject());
-    }
+	private final ILayoutRequestValidator VALIDATOR = new ILayoutRequestValidator() {
+		@Override
+		public boolean validateCreateRequest(EditPart host, CreateRequest request) {
+			return m_menuPolicy.validateCreate(request.getNewObject());
+		}
 
-    @Override
-    public boolean validatePasteRequest(EditPart host, PasteRequest request) {
-      return m_menuPolicy.validatePaste(request.getMemento());
-    }
+		@Override
+		public boolean validatePasteRequest(EditPart host, PasteRequest request) {
+			return m_menuPolicy.validatePaste(request.getMemento());
+		}
 
-    @Override
-    public boolean validateMoveRequest(EditPart host, ChangeBoundsRequest request) {
-      for (EditPart editPart : request.getEditParts()) {
-        if (!m_menuPolicy.validateMove(editPart.getModel())) {
-          return false;
-        }
-      }
-      return true;
-    }
+		@Override
+		public boolean validateMoveRequest(EditPart host, ChangeBoundsRequest request) {
+			for (EditPart editPart : request.getEditParts()) {
+				if (!m_menuPolicy.validateMove(editPart.getModel())) {
+					return false;
+				}
+			}
+			return true;
+		}
 
-    @Override
-    public boolean validateAddRequest(EditPart host, ChangeBoundsRequest request) {
-      return validateMoveRequest(host, request);
-    }
-  };
+		@Override
+		public boolean validateAddRequest(EditPart host, ChangeBoundsRequest request) {
+			return validateMoveRequest(host, request);
+		}
+	};
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/laf/BaselineSupportHelper.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/laf/BaselineSupportHelper.java
index a45957da2..0181d4059 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/laf/BaselineSupportHelper.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/laf/BaselineSupportHelper.java
@@ -21,43 +21,43 @@
  * @coverage core.laf
  */
 public final class BaselineSupportHelper {
-  private BaselineSupportHelper() {
-  }
+	private BaselineSupportHelper() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the instances of {@link IBaselineSupport}.
-   */
-  private static List<IBaselineSupport> getBaselineSupports() throws Exception {
-    return ExternalFactoriesHelper.getElementsInstances(
-        IBaselineSupport.class,
-        "org.eclipse.wb.core.baselineSupport",
-        "support");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the instances of {@link IBaselineSupport}.
+	 */
+	private static List<IBaselineSupport> getBaselineSupports() throws Exception {
+		return ExternalFactoriesHelper.getElementsInstances(
+				IBaselineSupport.class,
+				"org.eclipse.wb.core.baselineSupport",
+				"support");
+	}
 
-  /**
-   * Iterates through contributed {@link IBaselineSupport} instances and returns the baseline offset
-   * from top of component.
-   *
-   * @param component
-   *          the visual element of some GUI toolkit.
-   * @return the baseline offset from top of component.
-   */
-  public static int getBaseline(Object component) {
-    try {
-      for (IBaselineSupport support : getBaselineSupports()) {
-        int baseline = support.getBaseline(component);
-        if (baseline != IBaselineSupport.NO_BASELINE) {
-          return baseline;
-        }
-      }
-    } catch (Throwable e) {
-      // ignore exceptions
-    }
-    return IBaselineSupport.NO_BASELINE;
-  }
+	/**
+	 * Iterates through contributed {@link IBaselineSupport} instances and returns the baseline offset
+	 * from top of component.
+	 *
+	 * @param component
+	 *          the visual element of some GUI toolkit.
+	 * @return the baseline offset from top of component.
+	 */
+	public static int getBaseline(Object component) {
+		try {
+			for (IBaselineSupport support : getBaselineSupports()) {
+				int baseline = support.getBaseline(component);
+				if (baseline != IBaselineSupport.NO_BASELINE) {
+					return baseline;
+				}
+			}
+		} catch (Throwable e) {
+			// ignore exceptions
+		}
+		return IBaselineSupport.NO_BASELINE;
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/laf/DefaultBaselineSupport.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/laf/DefaultBaselineSupport.java
index dc6a762bd..7b7910ae9 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/laf/DefaultBaselineSupport.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/laf/DefaultBaselineSupport.java
@@ -17,13 +17,13 @@
  * @coverage core.laf
  */
 public class DefaultBaselineSupport implements IBaselineSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IBaselineSupport
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public int getBaseline(Object component) {
-    return NO_BASELINE;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IBaselineSupport
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public int getBaseline(Object component) {
+		return NO_BASELINE;
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/laf/IBaselineSupport.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/laf/IBaselineSupport.java
index a57619ba4..a73cf1397 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/laf/IBaselineSupport.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/laf/IBaselineSupport.java
@@ -17,17 +17,17 @@
  * @coverage core.laf
  */
 public interface IBaselineSupport {
-  /**
-   * Constant used for widgets which have no baseline or their baseline can't be determined.
-   */
-  int NO_BASELINE = -1;
+	/**
+	 * Constant used for widgets which have no baseline or their baseline can't be determined.
+	 */
+	int NO_BASELINE = -1;
 
-  /**
-   * Returns the baseline offset from top of component.
-   *
-   * @param component
-   *          the visual element of some GUI toolkit.
-   * @return the baseline offset from top of component.
-   */
-  int getBaseline(Object component);
+	/**
+	 * Returns the baseline offset from top of component.
+	 *
+	 * @param component
+	 *          the visual element of some GUI toolkit.
+	 * @return the baseline offset from top of component.
+	 */
+	int getBaseline(Object component);
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/ModelMessages.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/ModelMessages.java
index 4b868f7f7..baa87888d 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/ModelMessages.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/ModelMessages.java
@@ -3,170 +3,170 @@
 import org.eclipse.osgi.util.NLS;
 
 public class ModelMessages extends NLS {
-  private static final String BUNDLE_NAME = "org.eclipse.wb.internal.core.model.ModelMessages"; //$NON-NLS-1$
-  public static String AbstractGeometryDialog_defaultButton;
-  public static String AbstractGeometryDialog_pixelsLabel;
-  public static String AbstractLiveManager_errorMessage;
-  public static String ByteObjectPropertyEditor_notValidByte;
-  public static String BytePropertyEditor_notValidByte;
-  public static String CharacterPropertyEditor_notValid;
-  public static String ColorPreferenceChooser_Include;
-  public static String ColorPropertyEditor_pageCustomColors;
-  public static String ColorPropertyEditor_pageAwtColors;
-  public static String ColorPropertyEditor_pageNamedColors;
-  public static String ColorPropertyEditor_pageSwingColors;
-  public static String ColorPropertyEditor_pageSystemColors;
-  public static String ColorPropertyEditor_pageWebColors;
-  public static String ColorPropertyEditor_namedColorsPage;
-  public static String ColorPropertyEditor_systemColorsPage;
-  public static String ColorPropertyEditor_webSafePage;
-  public static String ColorPropertyEditor_wrongSwtColor;
-  public static String ComponentClassProperty_tooltip;
-  public static String ConstantSelectionPropertyEditor_addTypeButton;
-  public static String ConstantSelectionPropertyEditor_fieldsGroup;
-  public static String ConstantSelectionPropertyEditor_filterLabel;
-  public static String ConstantSelectionPropertyEditor_title;
-  public static String ConstantSelectionPropertyEditor_typesGroup;
-  public static String CustomColorPicker_btnSelectColor;
-  public static String CustomColorPicker_lblBlue;
-  public static String CustomColorPicker_lblBrightness;
-  public static String CustomColorPicker_lblGreen;
-  public static String CustomColorPicker_lblHue;
-  public static String CustomColorPicker_lblRed;
-  public static String CustomColorPicker_lblSaturation;
-  public static String CustomColorPicker_previewTextExample;
-  public static String DatePropertyEditor_dialogTitle;
-  public static String DatePropertyEditor_notValidDate;
-  public static String DoubleObjectPropertyEditor_notValidDouble;
-  public static String DoublePropertyEditor_notValidDouble;
-  public static String EventsProperty_menuManagerName;
-  public static String ExposeComponentSupport_message;
-  public static String ExposeComponentSupport_methodAlreadyExists;
-  public static String ExposeComponentSupport_methodLabel;
-  public static String ExposeComponentSupport_modifierLabel;
-  public static String ExposeComponentSupport_shellTitle;
-  public static String ExposeComponentSupport_title;
-  public static String ExposePropertyAction_dialogMessage;
-  public static String ExposePropertyAction_dialogModifier;
-  public static String ExposePropertyAction_dialogNoPreview;
-  public static String ExposePropertyAction_dialogPreview;
-  public static String ExposePropertyAction_dialogPropertyLabel;
-  public static String ExposePropertyAction_dialogShellTitle;
-  public static String ExposePropertyAction_dialogTitle;
-  public static String ExposePropertyAction_text;
-  public static String ExposePropertyAction_tooltip;
-  public static String ExposePropertyAction_validateMethodAlreadyExists;
-  public static String FactoryActionsSupport_factoryManager;
-  public static String FactoryCreateAction_classBrowse;
-  public static String FactoryCreateAction_classLabel;
-  public static String FactoryCreateAction_dialogArgumentsCreation;
-  public static String FactoryCreateAction_dialogArgumentsHint;
-  public static String FactoryCreateAction_dialogArgumentsInvocations;
-  public static String FactoryCreateAction_dialogCategoryNo;
-  public static String FactoryCreateAction_dialogCreateButton;
-  public static String FactoryCreateAction_dialogMessage;
-  public static String FactoryCreateAction_dialogNoPreview;
-  public static String FactoryCreateAction_dialogPackagePackage;
-  public static String FactoryCreateAction_dialogPackagePackageBrowse;
-  public static String FactoryCreateAction_dialogPackageSourceFolder;
-  public static String FactoryCreateAction_dialogPackageSourceFolderBrowse;
-  public static String FactoryCreateAction_dialogPreview;
-  public static String FactoryCreateAction_dialogShellTitle;
-  public static String FactoryCreateAction_dialogTitle;
-  public static String FactoryCreateAction_methodLabel;
-  public static String FactoryCreateAction_paletteCategoryLabel;
-  public static String FactoryCreateAction_paletteManagerButton;
-  public static String FactoryCreateAction_text;
-  public static String FactoryCreateAction_validateDefaultPackage;
-  public static String FactoryCreateAction_validateDotInClass;
-  public static String FactoryCreateAction_validateEmptyClass;
-  public static String FactoryCreateAction_validateEmptyMethod;
-  public static String FactoryCreateAction_validateInvalidPackage;
-  public static String FactoryCreateAction_validateInvalidSourceFolder;
-  public static String FactorySelectAction_chooseMessage;
-  public static String FactorySelectAction_chooseTitle;
-  public static String FactorySelectAction_dialogMessage;
-  public static String FactorySelectAction_dialogTitle;
-  public static String FactorySelectAction_text;
-  public static String FloatPropertyEditor_notValidFloat;
-  public static String ImportantPropertiesDialog_title;
-  public static String InnerClassPropertyEditor_selectTypeAbstractMessage;
-  public static String InnerClassPropertyEditor_selectTypeAbstractTitle;
-  public static String InstanceObjectPropertyEditor_chooseMessage;
-  public static String InstanceObjectPropertyEditor_chooseTitle;
-  public static String IntegerObjectPropertyEditor_notValidInt;
-  public static String IntegerPropertyEditor_notValidInt;
-  public static String ListenerMethodProperty_deleteAllListenerUsagesMessage;
-  public static String ListenerMethodProperty_deleteAllListenerUsagesTitle;
-  public static String ListenerMethodProperty_deleteListenerMessage;
-  public static String ListenerMethodProperty_deleteListenerTitle;
-  public static String ListenerMethodProperty_deleteMethodMessage;
-  public static String ListenerMethodProperty_deleteMethodTitle;
-  public static String ListenerProperty_line;
-  public static String ListenerProperty_removeMessage;
-  public static String ListenerProperty_removeTitle;
-  public static String LongObjectPropertyEditor_notValidLong;
-  public static String LongPropertyEditor_notValidLong;
-  public static String MorphingSupport_chooseMessage;
-  public static String MorphingSupport_chooseTitle;
-  public static String MorphingSupport_incompatibleTargetTitle;
-  public static String MorphingSupport_managerText;
-  public static String MorphingSupport_otherAction;
-  public static String MorphingSupport_subclassAction;
-  public static String MorphingSupport_validateAssociationMethod_1;
-  public static String MorphingSupport_validateAssociationMethod_2;
-  public static String MorphingSupport_validateAssociationMethod_3;
-  public static String MorphingSupport_validateAssociationMethod_4;
-  public static String MorphingSupport_validateNoAssociationMethod;
-  public static String ObjectPropertyEditor_chooseMessage;
-  public static String OrderingSupport_bringForward;
-  public static String OrderingSupport_bringToFront;
-  public static String OrderingSupport_orderManager;
-  public static String OrderingSupport_sendBackward;
-  public static String OrderingSupport_sendToBack;
-  public static String PropertyTable_noProperties;
-  public static String RenameConvertSupport_beField;
-  public static String RenameConvertSupport_message;
-  public static String RenameConvertSupport_shellTitle;
-  public static String RenameConvertSupport_text;
-  public static String RenameConvertSupport_title;
-  public static String RenameConvertSupport_toLocal;
-  public static String ReorderDialog_childColumn;
-  public static String ReorderDialog_childrenLabel;
-  public static String ReorderDialog_deselectAllButton;
-  public static String ReorderDialog_downButton;
-  public static String ReorderDialog_selectAllButton;
-  public static String ReorderDialog_title;
-  public static String ReorderDialog_upButton;
-  public static String ShortObjectPropertyEditor_notValidShort;
-  public static String ShortPropertyEditor_notValidShort;
-  public static String StringArrayPropertyEditor_hint;
-  public static String StringArrayPropertyEditor_itemsLabel;
-  public static String StringPropertyDialog_localizationBrowse;
-  public static String StringPropertyDialog_localizationGroup;
-  public static String StringPropertyDialog_localizationKeyLabel;
-  public static String StringPropertyDialog_localizationSourceLabel;
-  public static String StringPropertyDialog_localizationUseExisting;
-  public static String StringPropertyDialog_title;
-  public static String StringPropertyKeyDialog_filterBothButton;
-  public static String StringPropertyKeyDialog_filterKeyButton;
-  public static String StringPropertyKeyDialog_filterLabel;
-  public static String StringPropertyKeyDialog_filterValueButton;
-  public static String StringPropertyKeyDialog_keyColumn;
-  public static String StringPropertyKeyDialog_matchedGroup;
-  public static String StringPropertyKeyDialog_message;
-  public static String StringPropertyKeyDialog_shellTitle;
-  public static String StringPropertyKeyDialog_sourcesGroup;
-  public static String StringPropertyKeyDialog_title;
-  public static String StringPropertyKeyDialog_valueColumn;
-  public static String StringPropertyKeyDialog_valuesFilterLabel;
-  public static String StringPropertyKeyDialog_valuesGroup;
-  public static String SurroundSupport_surorundManager;
-  static {
-    // initialize resource bundle
-    NLS.initializeMessages(BUNDLE_NAME, ModelMessages.class);
-  }
+	private static final String BUNDLE_NAME = "org.eclipse.wb.internal.core.model.ModelMessages"; //$NON-NLS-1$
+	public static String AbstractGeometryDialog_defaultButton;
+	public static String AbstractGeometryDialog_pixelsLabel;
+	public static String AbstractLiveManager_errorMessage;
+	public static String ByteObjectPropertyEditor_notValidByte;
+	public static String BytePropertyEditor_notValidByte;
+	public static String CharacterPropertyEditor_notValid;
+	public static String ColorPreferenceChooser_Include;
+	public static String ColorPropertyEditor_pageCustomColors;
+	public static String ColorPropertyEditor_pageAwtColors;
+	public static String ColorPropertyEditor_pageNamedColors;
+	public static String ColorPropertyEditor_pageSwingColors;
+	public static String ColorPropertyEditor_pageSystemColors;
+	public static String ColorPropertyEditor_pageWebColors;
+	public static String ColorPropertyEditor_namedColorsPage;
+	public static String ColorPropertyEditor_systemColorsPage;
+	public static String ColorPropertyEditor_webSafePage;
+	public static String ColorPropertyEditor_wrongSwtColor;
+	public static String ComponentClassProperty_tooltip;
+	public static String ConstantSelectionPropertyEditor_addTypeButton;
+	public static String ConstantSelectionPropertyEditor_fieldsGroup;
+	public static String ConstantSelectionPropertyEditor_filterLabel;
+	public static String ConstantSelectionPropertyEditor_title;
+	public static String ConstantSelectionPropertyEditor_typesGroup;
+	public static String CustomColorPicker_btnSelectColor;
+	public static String CustomColorPicker_lblBlue;
+	public static String CustomColorPicker_lblBrightness;
+	public static String CustomColorPicker_lblGreen;
+	public static String CustomColorPicker_lblHue;
+	public static String CustomColorPicker_lblRed;
+	public static String CustomColorPicker_lblSaturation;
+	public static String CustomColorPicker_previewTextExample;
+	public static String DatePropertyEditor_dialogTitle;
+	public static String DatePropertyEditor_notValidDate;
+	public static String DoubleObjectPropertyEditor_notValidDouble;
+	public static String DoublePropertyEditor_notValidDouble;
+	public static String EventsProperty_menuManagerName;
+	public static String ExposeComponentSupport_message;
+	public static String ExposeComponentSupport_methodAlreadyExists;
+	public static String ExposeComponentSupport_methodLabel;
+	public static String ExposeComponentSupport_modifierLabel;
+	public static String ExposeComponentSupport_shellTitle;
+	public static String ExposeComponentSupport_title;
+	public static String ExposePropertyAction_dialogMessage;
+	public static String ExposePropertyAction_dialogModifier;
+	public static String ExposePropertyAction_dialogNoPreview;
+	public static String ExposePropertyAction_dialogPreview;
+	public static String ExposePropertyAction_dialogPropertyLabel;
+	public static String ExposePropertyAction_dialogShellTitle;
+	public static String ExposePropertyAction_dialogTitle;
+	public static String ExposePropertyAction_text;
+	public static String ExposePropertyAction_tooltip;
+	public static String ExposePropertyAction_validateMethodAlreadyExists;
+	public static String FactoryActionsSupport_factoryManager;
+	public static String FactoryCreateAction_classBrowse;
+	public static String FactoryCreateAction_classLabel;
+	public static String FactoryCreateAction_dialogArgumentsCreation;
+	public static String FactoryCreateAction_dialogArgumentsHint;
+	public static String FactoryCreateAction_dialogArgumentsInvocations;
+	public static String FactoryCreateAction_dialogCategoryNo;
+	public static String FactoryCreateAction_dialogCreateButton;
+	public static String FactoryCreateAction_dialogMessage;
+	public static String FactoryCreateAction_dialogNoPreview;
+	public static String FactoryCreateAction_dialogPackagePackage;
+	public static String FactoryCreateAction_dialogPackagePackageBrowse;
+	public static String FactoryCreateAction_dialogPackageSourceFolder;
+	public static String FactoryCreateAction_dialogPackageSourceFolderBrowse;
+	public static String FactoryCreateAction_dialogPreview;
+	public static String FactoryCreateAction_dialogShellTitle;
+	public static String FactoryCreateAction_dialogTitle;
+	public static String FactoryCreateAction_methodLabel;
+	public static String FactoryCreateAction_paletteCategoryLabel;
+	public static String FactoryCreateAction_paletteManagerButton;
+	public static String FactoryCreateAction_text;
+	public static String FactoryCreateAction_validateDefaultPackage;
+	public static String FactoryCreateAction_validateDotInClass;
+	public static String FactoryCreateAction_validateEmptyClass;
+	public static String FactoryCreateAction_validateEmptyMethod;
+	public static String FactoryCreateAction_validateInvalidPackage;
+	public static String FactoryCreateAction_validateInvalidSourceFolder;
+	public static String FactorySelectAction_chooseMessage;
+	public static String FactorySelectAction_chooseTitle;
+	public static String FactorySelectAction_dialogMessage;
+	public static String FactorySelectAction_dialogTitle;
+	public static String FactorySelectAction_text;
+	public static String FloatPropertyEditor_notValidFloat;
+	public static String ImportantPropertiesDialog_title;
+	public static String InnerClassPropertyEditor_selectTypeAbstractMessage;
+	public static String InnerClassPropertyEditor_selectTypeAbstractTitle;
+	public static String InstanceObjectPropertyEditor_chooseMessage;
+	public static String InstanceObjectPropertyEditor_chooseTitle;
+	public static String IntegerObjectPropertyEditor_notValidInt;
+	public static String IntegerPropertyEditor_notValidInt;
+	public static String ListenerMethodProperty_deleteAllListenerUsagesMessage;
+	public static String ListenerMethodProperty_deleteAllListenerUsagesTitle;
+	public static String ListenerMethodProperty_deleteListenerMessage;
+	public static String ListenerMethodProperty_deleteListenerTitle;
+	public static String ListenerMethodProperty_deleteMethodMessage;
+	public static String ListenerMethodProperty_deleteMethodTitle;
+	public static String ListenerProperty_line;
+	public static String ListenerProperty_removeMessage;
+	public static String ListenerProperty_removeTitle;
+	public static String LongObjectPropertyEditor_notValidLong;
+	public static String LongPropertyEditor_notValidLong;
+	public static String MorphingSupport_chooseMessage;
+	public static String MorphingSupport_chooseTitle;
+	public static String MorphingSupport_incompatibleTargetTitle;
+	public static String MorphingSupport_managerText;
+	public static String MorphingSupport_otherAction;
+	public static String MorphingSupport_subclassAction;
+	public static String MorphingSupport_validateAssociationMethod_1;
+	public static String MorphingSupport_validateAssociationMethod_2;
+	public static String MorphingSupport_validateAssociationMethod_3;
+	public static String MorphingSupport_validateAssociationMethod_4;
+	public static String MorphingSupport_validateNoAssociationMethod;
+	public static String ObjectPropertyEditor_chooseMessage;
+	public static String OrderingSupport_bringForward;
+	public static String OrderingSupport_bringToFront;
+	public static String OrderingSupport_orderManager;
+	public static String OrderingSupport_sendBackward;
+	public static String OrderingSupport_sendToBack;
+	public static String PropertyTable_noProperties;
+	public static String RenameConvertSupport_beField;
+	public static String RenameConvertSupport_message;
+	public static String RenameConvertSupport_shellTitle;
+	public static String RenameConvertSupport_text;
+	public static String RenameConvertSupport_title;
+	public static String RenameConvertSupport_toLocal;
+	public static String ReorderDialog_childColumn;
+	public static String ReorderDialog_childrenLabel;
+	public static String ReorderDialog_deselectAllButton;
+	public static String ReorderDialog_downButton;
+	public static String ReorderDialog_selectAllButton;
+	public static String ReorderDialog_title;
+	public static String ReorderDialog_upButton;
+	public static String ShortObjectPropertyEditor_notValidShort;
+	public static String ShortPropertyEditor_notValidShort;
+	public static String StringArrayPropertyEditor_hint;
+	public static String StringArrayPropertyEditor_itemsLabel;
+	public static String StringPropertyDialog_localizationBrowse;
+	public static String StringPropertyDialog_localizationGroup;
+	public static String StringPropertyDialog_localizationKeyLabel;
+	public static String StringPropertyDialog_localizationSourceLabel;
+	public static String StringPropertyDialog_localizationUseExisting;
+	public static String StringPropertyDialog_title;
+	public static String StringPropertyKeyDialog_filterBothButton;
+	public static String StringPropertyKeyDialog_filterKeyButton;
+	public static String StringPropertyKeyDialog_filterLabel;
+	public static String StringPropertyKeyDialog_filterValueButton;
+	public static String StringPropertyKeyDialog_keyColumn;
+	public static String StringPropertyKeyDialog_matchedGroup;
+	public static String StringPropertyKeyDialog_message;
+	public static String StringPropertyKeyDialog_shellTitle;
+	public static String StringPropertyKeyDialog_sourcesGroup;
+	public static String StringPropertyKeyDialog_title;
+	public static String StringPropertyKeyDialog_valueColumn;
+	public static String StringPropertyKeyDialog_valuesFilterLabel;
+	public static String StringPropertyKeyDialog_valuesGroup;
+	public static String SurroundSupport_surorundManager;
+	static {
+		// initialize resource bundle
+		NLS.initializeMessages(BUNDLE_NAME, ModelMessages.class);
+	}
 
-  private ModelMessages() {
-  }
+	private ModelMessages() {
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/ObjectInfoVisitor.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/ObjectInfoVisitor.java
index 603d215b6..a1dca9037 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/ObjectInfoVisitor.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/ObjectInfoVisitor.java
@@ -19,16 +19,16 @@
  * @coverage core.model
  */
 public class ObjectInfoVisitor {
-  /**
-   * This method is invoked to check if given {@link ObjectInfo} and its children should be visited.
-   */
-  public boolean visit(ObjectInfo objectInfo) throws Exception {
-    return true;
-  }
+	/**
+	 * This method is invoked to check if given {@link ObjectInfo} and its children should be visited.
+	 */
+	public boolean visit(ObjectInfo objectInfo) throws Exception {
+		return true;
+	}
 
-  /**
-   * This method is invoked when all children of given {@link ObjectInfo} were visited.
-   */
-  public void endVisit(ObjectInfo objectInfo) throws Exception {
-  }
+	/**
+	 * This method is invoked when all children of given {@link ObjectInfo} were visited.
+	 */
+	public void endVisit(ObjectInfo objectInfo) throws Exception {
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/ObjectReferenceInfo.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/ObjectReferenceInfo.java
index 54d5b693e..c094972e6 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/ObjectReferenceInfo.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/ObjectReferenceInfo.java
@@ -33,60 +33,60 @@
  * @coverage swing.model
  */
 public final class ObjectReferenceInfo extends ObjectInfo {
-  private final ObjectInfo m_object;
+	private final ObjectInfo m_object;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ObjectReferenceInfo(ObjectInfo object) {
-    Preconditions.checkNotNull(object);
-    m_object = object;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ObjectReferenceInfo(ObjectInfo object) {
+		Preconditions.checkNotNull(object);
+		m_object = object;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean equals(Object obj) {
-    if (obj instanceof ObjectReferenceInfo) {
-      return ((ObjectReferenceInfo) obj).m_object == m_object;
-    }
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean equals(Object obj) {
+		if (obj instanceof ObjectReferenceInfo) {
+			return ((ObjectReferenceInfo) obj).m_object == m_object;
+		}
+		return false;
+	}
 
-  @Override
-  public int hashCode() {
-    return m_object.hashCode();
-  }
+	@Override
+	public int hashCode() {
+		return m_object.hashCode();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the referenced {@link ObjectInfo}.
-   */
-  public ObjectInfo getObject() {
-    return m_object;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the referenced {@link ObjectInfo}.
+	 */
+	public ObjectInfo getObject() {
+		return m_object;
+	}
 
-  @Override
-  public BroadcastSupport getBroadcastSupport() {
-    return m_object.getBroadcastSupport();
-  }
+	@Override
+	public BroadcastSupport getBroadcastSupport() {
+		return m_object.getBroadcastSupport();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public IObjectPresentation getPresentation() {
-    return m_object.getPresentation();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public IObjectPresentation getPresentation() {
+		return m_object.getPresentation();
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/description/ComponentPresentation.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/description/ComponentPresentation.java
index a5c3cc0ab..75ec00705 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/description/ComponentPresentation.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/description/ComponentPresentation.java
@@ -21,69 +21,69 @@
  * @coverage core.model.description
  */
 public final class ComponentPresentation {
-  private final String m_key;
-  private final String m_toolkitId;
-  private final String m_name;
-  private final String m_description;
-  private byte[] m_iconBytes;
-  private Image m_icon;
+	private final String m_key;
+	private final String m_toolkitId;
+	private final String m_name;
+	private final String m_description;
+	private byte[] m_iconBytes;
+	private Image m_icon;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ComponentPresentation(String key,
-      String toolkitId,
-      String name,
-      String description,
-      byte[] iconBytes) {
-    m_key = key;
-    m_toolkitId = toolkitId;
-    m_name = name;
-    m_description = description;
-    m_iconBytes = iconBytes;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ComponentPresentation(String key,
+			String toolkitId,
+			String name,
+			String description,
+			byte[] iconBytes) {
+		m_key = key;
+		m_toolkitId = toolkitId;
+		m_name = name;
+		m_description = description;
+		m_iconBytes = iconBytes;
+	}
 
-  public ComponentPresentation(String key,
-      String toolkitId,
-      String name,
-      String description,
-      Image icon) {
-    m_key = key;
-    m_toolkitId = toolkitId;
-    m_name = name;
-    m_description = description;
-    m_icon = icon;
-  }
+	public ComponentPresentation(String key,
+			String toolkitId,
+			String name,
+			String description,
+			Image icon) {
+		m_key = key;
+		m_toolkitId = toolkitId;
+		m_name = name;
+		m_description = description;
+		m_icon = icon;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public String getKey() {
-    return m_key;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public String getKey() {
+		return m_key;
+	}
 
-  public String getToolkitId() {
-    return m_toolkitId;
-  }
+	public String getToolkitId() {
+		return m_toolkitId;
+	}
 
-  public String getName() {
-    return m_name;
-  }
+	public String getName() {
+		return m_name;
+	}
 
-  public String getDescription() {
-    return m_description;
-  }
+	public String getDescription() {
+		return m_description;
+	}
 
-  public Image getIcon() {
-    if (m_icon == null) {
-      if (m_iconBytes != null) {
-        m_icon = new Image(null, new ByteArrayInputStream(m_iconBytes));
-      }
-    }
-    return m_icon;
-  }
+	public Image getIcon() {
+		if (m_icon == null) {
+			if (m_iconBytes != null) {
+				m_icon = new Image(null, new ByteArrayInputStream(m_iconBytes));
+			}
+		}
+		return m_icon;
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/description/IComponentDescription.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/description/IComponentDescription.java
index 6591c2182..62276dce3 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/description/IComponentDescription.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/description/IComponentDescription.java
@@ -19,23 +19,23 @@
  * @coverage core.model.description
  */
 public interface IComponentDescription {
-  /**
-   * @return the {@link ToolkitDescription} for this component.
-   */
-  ToolkitDescription getToolkit();
+	/**
+	 * @return the {@link ToolkitDescription} for this component.
+	 */
+	ToolkitDescription getToolkit();
 
-  /**
-   * @return the {@link Class} of component for which this description is.
-   */
-  Class<?> getComponentClass();
+	/**
+	 * @return the {@link Class} of component for which this description is.
+	 */
+	Class<?> getComponentClass();
 
-  /**
-   * @return the {@link Class} of model that should be used for this component.
-   */
-  Class<?> getModelClass();
+	/**
+	 * @return the {@link Class} of model that should be used for this component.
+	 */
+	Class<?> getModelClass();
 
-  /**
-   * @return the icon for this component.
-   */
-  Image getIcon();
+	/**
+	 * @return the icon for this component.
+	 */
+	Image getIcon();
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/description/IToolkitProvider.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/description/IToolkitProvider.java
index d5a6fcd48..c2174d966 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/description/IToolkitProvider.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/description/IToolkitProvider.java
@@ -16,8 +16,8 @@
  * @author scheglov_ke
  */
 public interface IToolkitProvider {
-  /**
-   * @return the {@link ToolkitDescription} for this toolkit.
-   */
-  ToolkitDescription getDescription();
+	/**
+	 * @return the {@link ToolkitDescription} for this toolkit.
+	 */
+	ToolkitDescription getDescription();
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/description/ToolkitDescription.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/description/ToolkitDescription.java
index d701d2de2..eea8484eb 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/description/ToolkitDescription.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/description/ToolkitDescription.java
@@ -21,29 +21,29 @@
  * @coverage core.model.description
  */
 public abstract class ToolkitDescription {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the ID of toolkit.
-   */
-  public abstract String getId();
-  /**
-   * @return the name of toolkit.
-   */
-  public abstract String getName();
-  /**
-   * @return the name of toolkit.
-   */
-  public abstract String getProductName();
-  /**
-   * @return the {@link Bundle} that provides this toolkit.
-   */
-  public abstract Bundle getBundle();
-  /**
-   * @return the {@link IPreferenceStore} for this toolkit.
-   */
-  public abstract IPreferenceStore getPreferences();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the ID of toolkit.
+	 */
+	public abstract String getId();
+	/**
+	 * @return the name of toolkit.
+	 */
+	public abstract String getName();
+	/**
+	 * @return the name of toolkit.
+	 */
+	public abstract String getProductName();
+	/**
+	 * @return the {@link Bundle} that provides this toolkit.
+	 */
+	public abstract Bundle getBundle();
+	/**
+	 * @return the {@link IPreferenceStore} for this toolkit.
+	 */
+	public abstract IPreferenceStore getPreferences();
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/generic/AbstractContainer.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/generic/AbstractContainer.java
index 816d77d2a..d15f112fb 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/generic/AbstractContainer.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/generic/AbstractContainer.java
@@ -17,8 +17,8 @@
  * @coverage core.model.generic
  */
 public interface AbstractContainer {
-  /**
-   * @return <code>true</code> if given component can be added to container.
-   */
-  boolean validateComponent(Object component);
+	/**
+	 * @return <code>true</code> if given component can be added to container.
+	 */
+	boolean validateComponent(Object component);
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/generic/ContainerObjectValidator.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/generic/ContainerObjectValidator.java
index e1e57229c..3f6ff1af0 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/generic/ContainerObjectValidator.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/generic/ContainerObjectValidator.java
@@ -17,5 +17,5 @@
  * @coverage core.model.generic
  */
 public interface ContainerObjectValidator {
-  boolean validate(Object container, Object object);
+	boolean validate(Object container, Object object);
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/generic/ContainerObjectValidators.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/generic/ContainerObjectValidators.java
index 6b2e88bc2..3ff3b3879 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/generic/ContainerObjectValidators.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/generic/ContainerObjectValidators.java
@@ -31,161 +31,161 @@
  * @coverage core.model.generic
  */
 public final class ContainerObjectValidators {
-  public static ContainerObjectValidator alwaysTrue() {
-    return new ContainerObjectValidator() {
-      @Override
-      public boolean validate(Object container, Object object) {
-        return true;
-      }
-
-      @Override
-      public String toString() {
-        return "alwaysTrue";
-      }
-    };
-  }
-
-  public static ContainerObjectValidator forList(final String[] types) {
-    return new ContainerObjectValidator() {
-      @Override
-      public boolean validate(Object container, Object object) {
-        ILayoutRequestValidatorHelper validatorHelper = GlobalState.getValidatorHelper();
-        if (validatorHelper.isComponent(object)) {
-          IDescriptionHelper descriptionHelper = GlobalState.getDescriptionHelper();
-          IComponentDescription description = descriptionHelper.getDescription(object);
-          Class<?> componentClass = description.getComponentClass();
-          for (String type : types) {
-            if (ReflectionUtils.isSuccessorOf(componentClass, type)) {
-              return true;
-            }
-          }
-        }
-        return false;
-      }
-
-      @Override
-      public String toString() {
-        return StringUtils.join(types, " ");
-      }
-    };
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // for*Expression
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final String DEF_functions = StringUtils.join(new String[]{
-      "def isModelType(model, c) {",
-      "  if (c is String) {",
-      "    return ReflectionUtils.isSuccessorOf((Class) model.description.componentClass, c);",
-      "  } else {",
-      "    return c.isAssignableFrom(model.description.componentClass);",
-      "  }",
-      "};",
-      "def isSuccessorOf(o, c) {",
-      "  if (c is String) {",
-      "    return ReflectionUtils.isSuccessorOf(o, c);",
-      "  } else {",
-      "    return o != null && c.isAssignableFrom(o.getClass());",
-      "  }",
-      "};",
-      "def isComponentType(c) {",
-      "  return isModelType(component, c);",
-      "};",
-      "def isReferenceType(c) {",
-      "  return isModelType(reference, c);",
-      "};",
-      "def isContainerType(c) {",
-      "  return isModelType(container, c);",
-      "};",
-      "def isContainerThis() {",
-      "  return isSuccessorOf(container.creationSupport, "
-          + "'org.eclipse.wb.internal.core.model.creation.ThisCreationSupport');",
-      "};",}, "\n");
-
-  public static ContainerObjectValidator forComponentExpression(final String expression) {
-    return new ContainerObjectValidator() {
-      @Override
-      public boolean validate(Object container, Object component) {
-        ILayoutRequestValidatorHelper validatorHelper = GlobalState.getValidatorHelper();
-        if (validatorHelper.isComponent(container) && validatorHelper.isComponent(component)) {
-          Map<String, Object> variables = Maps.newTreeMap();
-          variables.put("container", container);
-          variables.put("component", component);
-          return evaluate(expression, variables);
-        }
-        return false;
-      }
-
-      @Override
-      public String toString() {
-        return expression;
-      }
-    };
-  }
-
-  public static ContainerObjectValidator forReferenceExpression(final String expression) {
-    return new ContainerObjectValidator() {
-      @Override
-      public boolean validate(Object container, Object reference) {
-        ILayoutRequestValidatorHelper validatorHelper = GlobalState.getValidatorHelper();
-        if (validatorHelper.isComponent(container) && validatorHelper.isComponent(reference)) {
-          Map<String, Object> variables = Maps.newTreeMap();
-          variables.put("container", container);
-          variables.put("reference", reference);
-          return evaluate(expression, variables);
-        }
-        return false;
-      }
-
-      @Override
-      public String toString() {
-        return expression;
-      }
-    };
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Container
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static boolean validateContainer(Object container, String expression) {
-    return validateContainer(expression, container);
-  }
-
-  private static boolean validateContainer(String expression, Object container) {
-    Map<String, Object> variables = Maps.newTreeMap();
-    variables.put("container", container);
-    return evaluate(expression, variables);
-  }
-
-  public static Predicate<Object> forContainerExpression(final String expression) {
-    return new Predicate<Object>() {
-      @Override
-      public boolean apply(Object container) {
-        ILayoutRequestValidatorHelper validatorHelper = GlobalState.getValidatorHelper();
-        if (validatorHelper.isComponent(container)) {
-          return validateContainer(expression, container);
-        }
-        return false;
-      }
-
-      @Override
-      public String toString() {
-        return expression;
-      }
-    };
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static boolean evaluate(String expression, Map<String, Object> variables) {
-    String e = DEF_functions + expression;
-    return (Boolean) ScriptUtils.evaluate(e, variables);
-  }
+	public static ContainerObjectValidator alwaysTrue() {
+		return new ContainerObjectValidator() {
+			@Override
+			public boolean validate(Object container, Object object) {
+				return true;
+			}
+
+			@Override
+			public String toString() {
+				return "alwaysTrue";
+			}
+		};
+	}
+
+	public static ContainerObjectValidator forList(final String[] types) {
+		return new ContainerObjectValidator() {
+			@Override
+			public boolean validate(Object container, Object object) {
+				ILayoutRequestValidatorHelper validatorHelper = GlobalState.getValidatorHelper();
+				if (validatorHelper.isComponent(object)) {
+					IDescriptionHelper descriptionHelper = GlobalState.getDescriptionHelper();
+					IComponentDescription description = descriptionHelper.getDescription(object);
+					Class<?> componentClass = description.getComponentClass();
+					for (String type : types) {
+						if (ReflectionUtils.isSuccessorOf(componentClass, type)) {
+							return true;
+						}
+					}
+				}
+				return false;
+			}
+
+			@Override
+			public String toString() {
+				return StringUtils.join(types, " ");
+			}
+		};
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// for*Expression
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final String DEF_functions = StringUtils.join(new String[]{
+			"def isModelType(model, c) {",
+			"  if (c is String) {",
+			"    return ReflectionUtils.isSuccessorOf((Class) model.description.componentClass, c);",
+			"  } else {",
+			"    return c.isAssignableFrom(model.description.componentClass);",
+			"  }",
+			"};",
+			"def isSuccessorOf(o, c) {",
+			"  if (c is String) {",
+			"    return ReflectionUtils.isSuccessorOf(o, c);",
+			"  } else {",
+			"    return o != null && c.isAssignableFrom(o.getClass());",
+			"  }",
+			"};",
+			"def isComponentType(c) {",
+			"  return isModelType(component, c);",
+			"};",
+			"def isReferenceType(c) {",
+			"  return isModelType(reference, c);",
+			"};",
+			"def isContainerType(c) {",
+			"  return isModelType(container, c);",
+			"};",
+			"def isContainerThis() {",
+			"  return isSuccessorOf(container.creationSupport, "
+					+ "'org.eclipse.wb.internal.core.model.creation.ThisCreationSupport');",
+					"};",}, "\n");
+
+	public static ContainerObjectValidator forComponentExpression(final String expression) {
+		return new ContainerObjectValidator() {
+			@Override
+			public boolean validate(Object container, Object component) {
+				ILayoutRequestValidatorHelper validatorHelper = GlobalState.getValidatorHelper();
+				if (validatorHelper.isComponent(container) && validatorHelper.isComponent(component)) {
+					Map<String, Object> variables = Maps.newTreeMap();
+					variables.put("container", container);
+					variables.put("component", component);
+					return evaluate(expression, variables);
+				}
+				return false;
+			}
+
+			@Override
+			public String toString() {
+				return expression;
+			}
+		};
+	}
+
+	public static ContainerObjectValidator forReferenceExpression(final String expression) {
+		return new ContainerObjectValidator() {
+			@Override
+			public boolean validate(Object container, Object reference) {
+				ILayoutRequestValidatorHelper validatorHelper = GlobalState.getValidatorHelper();
+				if (validatorHelper.isComponent(container) && validatorHelper.isComponent(reference)) {
+					Map<String, Object> variables = Maps.newTreeMap();
+					variables.put("container", container);
+					variables.put("reference", reference);
+					return evaluate(expression, variables);
+				}
+				return false;
+			}
+
+			@Override
+			public String toString() {
+				return expression;
+			}
+		};
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Container
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static boolean validateContainer(Object container, String expression) {
+		return validateContainer(expression, container);
+	}
+
+	private static boolean validateContainer(String expression, Object container) {
+		Map<String, Object> variables = Maps.newTreeMap();
+		variables.put("container", container);
+		return evaluate(expression, variables);
+	}
+
+	public static Predicate<Object> forContainerExpression(final String expression) {
+		return new Predicate<Object>() {
+			@Override
+			public boolean apply(Object container) {
+				ILayoutRequestValidatorHelper validatorHelper = GlobalState.getValidatorHelper();
+				if (validatorHelper.isComponent(container)) {
+					return validateContainer(expression, container);
+				}
+				return false;
+			}
+
+			@Override
+			public String toString() {
+				return expression;
+			}
+		};
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static boolean evaluate(String expression, Map<String, Object> variables) {
+		String e = DEF_functions + expression;
+		return (Boolean) ScriptUtils.evaluate(e, variables);
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/generic/FlowContainer.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/generic/FlowContainer.java
index c6e9a5dea..97dc0036c 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/generic/FlowContainer.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/generic/FlowContainer.java
@@ -18,38 +18,38 @@
  * @coverage core.model.generic
  */
 public interface FlowContainer extends AbstractContainer {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if this container is horizontal.
-   */
-  boolean isHorizontal();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if this container is horizontal.
+	 */
+	boolean isHorizontal();
 
-  /**
-   * @return <code>true</code> if this container has RTL orientation.
-   */
-  boolean isRtl();
+	/**
+	 * @return <code>true</code> if this container has RTL orientation.
+	 */
+	boolean isRtl();
 
-  /**
-   * @return <code>true</code> if given existing child of container can be used as reference.
-   */
-  boolean validateReference(Object reference);
+	/**
+	 * @return <code>true</code> if given existing child of container can be used as reference.
+	 */
+	boolean validateReference(Object reference);
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Creates new component on this container.
-   */
-  void command_CREATE(Object newObject, Object referenceObject) throws Exception;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Creates new component on this container.
+	 */
+	void command_CREATE(Object newObject, Object referenceObject) throws Exception;
 
-  /**
-   * Moves existing component on this container, internally or from other container.
-   */
-  void command_MOVE(Object moveObject, Object referenceObject) throws Exception;
+	/**
+	 * Moves existing component on this container, internally or from other container.
+	 */
+	void command_MOVE(Object moveObject, Object referenceObject) throws Exception;
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/generic/SimpleContainer.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/generic/SimpleContainer.java
index ce8a20135..1ad6973ed 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/generic/SimpleContainer.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/generic/SimpleContainer.java
@@ -17,27 +17,27 @@
  * @coverage core.model.generic
  */
 public interface SimpleContainer extends AbstractContainer {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if there are no existing child.
-   */
-  boolean isEmpty();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if there are no existing child.
+	 */
+	boolean isEmpty();
 
-  /**
-   * @return the existing child, may be <code>null</code>.
-   */
-  Object getChild();
+	/**
+	 * @return the existing child, may be <code>null</code>.
+	 */
+	Object getChild();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  void command_CREATE(Object newObject) throws Exception;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	void command_CREATE(Object newObject) throws Exception;
 
-  void command_ADD(Object moveObject) throws Exception;
+	void command_ADD(Object moveObject) throws Exception;
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/layout/GeneralLayoutData.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/layout/GeneralLayoutData.java
index aff38cf79..ec5404ad5 100755
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/layout/GeneralLayoutData.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/layout/GeneralLayoutData.java
@@ -22,147 +22,147 @@
  * @coverage core.model.layout
  */
 public final class GeneralLayoutData {
-  public static final Object KEY = GeneralLayoutData.class;
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Fields: grid layout
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /*
-   * Grab flags.
-   */
-  public Boolean horizontalGrab = null;
-  public Boolean verticalGrab = null;
-
-  /*
-   * Horizontal alignment.
-   */
-  public enum HorizontalAlignment {
-    NONE, LEFT, CENTER, RIGHT, FILL
-  }
-
-  public HorizontalAlignment horizontalAlignment = null;
-
-  /*
-   * Vertical alignment.
-   */
-  public enum VerticalAlignment {
-    NONE, TOP, CENTER, BOTTOM, FILL
-  }
-
-  public VerticalAlignment verticalAlignment = null;
-  /*
-   * Grid position.
-   */
-  public Integer gridX = null;
-  public Integer gridY = null;
-  /*
-   * Grid size.
-   */
-  public Integer spanX = null;
-  public Integer spanY = null;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    final String null_str = "null";
-    String x_str = gridX == null ? null_str : gridX.toString();
-    String y_str = gridY == null ? null_str : gridY.toString();
-    String sx_str = spanX == null ? null : spanX > 1 ? spanX.toString() : null;
-    String sy_str = spanY == null ? null : spanY > 1 ? spanY.toString() : null;
-    return "cell("
-        + x_str
-        + (sx_str == null ? "" : "+" + sx_str)
-        + ";"
-        + y_str
-        + (sy_str == null ? "" : "+" + sy_str)
-        + ") grab("
-        + (horizontalGrab == null ? null_str : horizontalGrab.toString())
-        + ";"
-        + (verticalGrab == null ? null_str : verticalGrab.toString())
-        + ") align("
-        + (horizontalAlignment == null ? null_str : horizontalAlignment.toString())
-        + ";"
-        + (verticalAlignment == null ? null_str : verticalAlignment.toString())
-        + ")";
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Work with {@link ObjectInfo}
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void putToInfo(ObjectInfo objectInfo) {
-    objectInfo.putArbitraryValue(KEY, this);
-  }
-
-  public static GeneralLayoutData getFromInfo(ObjectInfo objectInfo) {
-    GeneralLayoutData generalLayoutData = (GeneralLayoutData) objectInfo.getArbitraryValue(KEY);
-    clearForInfo(objectInfo);
-    return generalLayoutData;
-  }
-
-  public static GeneralLayoutData getFromInfoEx(ObjectInfo objectInfo) {
-    GeneralLayoutData generalLayoutData = getFromInfo(objectInfo);
-    return generalLayoutData == null ? new GeneralLayoutData() : generalLayoutData;
-  }
-
-  public static void clearForInfo(ObjectInfo objectInfo) {
-    objectInfo.removeArbitraryValue(KEY);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access layout data property values
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static Object getLayoutPropertyValue(ObjectInfo layoutData, String propertyName)
-      throws Exception {
-    Property property = layoutData.getPropertyByTitle(propertyName);
-    if (property != null) {
-      Object value = property.getValue();
-      if (value != Property.UNKNOWN_VALUE) {
-        return value;
-      }
-    }
-    return null;
-  }
-
-  public static void setLayoutPropertyValue(ObjectInfo layoutData,
-      String propertyName,
-      Object propertyValue) throws Exception {
-    Property property = layoutData.getPropertyByTitle(propertyName);
-    if (property != null && propertyValue != null && propertyValue != Property.UNKNOWN_VALUE) {
-      property.setValue(propertyValue);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // access mapped property values
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @param map
-   *          the {@link BiMap} generic -> real.
-   *
-   * @return the real value that corresponds given generic one, may be <code>null</code>.
-   */
-  public static <K, T> T getRealValue(BiMap<K, T> map, K generic) {
-    return generic == null ? null : map.get(generic);
-  }
-
-  /**
-   * @param map
-   *          the {@link BiMap} generic -> real.
-   *
-   * @return the generic value that corresponds given real one, may be <code>null</code>.
-   */
-  public static <K, T> K getGeneralValue(BiMap<K, T> map, T real) {
-    return real == null ? null : map.inverse().get(real);
-  }
+	public static final Object KEY = GeneralLayoutData.class;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Fields: grid layout
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/*
+	 * Grab flags.
+	 */
+	public Boolean horizontalGrab = null;
+	public Boolean verticalGrab = null;
+
+	/*
+	 * Horizontal alignment.
+	 */
+	public enum HorizontalAlignment {
+		NONE, LEFT, CENTER, RIGHT, FILL
+	}
+
+	public HorizontalAlignment horizontalAlignment = null;
+
+	/*
+	 * Vertical alignment.
+	 */
+	public enum VerticalAlignment {
+		NONE, TOP, CENTER, BOTTOM, FILL
+	}
+
+	public VerticalAlignment verticalAlignment = null;
+	/*
+	 * Grid position.
+	 */
+	public Integer gridX = null;
+	public Integer gridY = null;
+	/*
+	 * Grid size.
+	 */
+	public Integer spanX = null;
+	public Integer spanY = null;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		final String null_str = "null";
+		String x_str = gridX == null ? null_str : gridX.toString();
+		String y_str = gridY == null ? null_str : gridY.toString();
+		String sx_str = spanX == null ? null : spanX > 1 ? spanX.toString() : null;
+		String sy_str = spanY == null ? null : spanY > 1 ? spanY.toString() : null;
+		return "cell("
+		+ x_str
+		+ (sx_str == null ? "" : "+" + sx_str)
+		+ ";"
+		+ y_str
+		+ (sy_str == null ? "" : "+" + sy_str)
+		+ ") grab("
+		+ (horizontalGrab == null ? null_str : horizontalGrab.toString())
+		+ ";"
+		+ (verticalGrab == null ? null_str : verticalGrab.toString())
+		+ ") align("
+		+ (horizontalAlignment == null ? null_str : horizontalAlignment.toString())
+		+ ";"
+		+ (verticalAlignment == null ? null_str : verticalAlignment.toString())
+		+ ")";
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Work with {@link ObjectInfo}
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void putToInfo(ObjectInfo objectInfo) {
+		objectInfo.putArbitraryValue(KEY, this);
+	}
+
+	public static GeneralLayoutData getFromInfo(ObjectInfo objectInfo) {
+		GeneralLayoutData generalLayoutData = (GeneralLayoutData) objectInfo.getArbitraryValue(KEY);
+		clearForInfo(objectInfo);
+		return generalLayoutData;
+	}
+
+	public static GeneralLayoutData getFromInfoEx(ObjectInfo objectInfo) {
+		GeneralLayoutData generalLayoutData = getFromInfo(objectInfo);
+		return generalLayoutData == null ? new GeneralLayoutData() : generalLayoutData;
+	}
+
+	public static void clearForInfo(ObjectInfo objectInfo) {
+		objectInfo.removeArbitraryValue(KEY);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access layout data property values
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static Object getLayoutPropertyValue(ObjectInfo layoutData, String propertyName)
+			throws Exception {
+		Property property = layoutData.getPropertyByTitle(propertyName);
+		if (property != null) {
+			Object value = property.getValue();
+			if (value != Property.UNKNOWN_VALUE) {
+				return value;
+			}
+		}
+		return null;
+	}
+
+	public static void setLayoutPropertyValue(ObjectInfo layoutData,
+			String propertyName,
+			Object propertyValue) throws Exception {
+		Property property = layoutData.getPropertyByTitle(propertyName);
+		if (property != null && propertyValue != null && propertyValue != Property.UNKNOWN_VALUE) {
+			property.setValue(propertyValue);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// access mapped property values
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @param map
+	 *          the {@link BiMap} generic -> real.
+	 *
+	 * @return the real value that corresponds given generic one, may be <code>null</code>.
+	 */
+	public static <K, T> T getRealValue(BiMap<K, T> map, K generic) {
+		return generic == null ? null : map.get(generic);
+	}
+
+	/**
+	 * @param map
+	 *          the {@link BiMap} generic -> real.
+	 *
+	 * @return the generic value that corresponds given real one, may be <code>null</code>.
+	 */
+	public static <K, T> K getGeneralValue(BiMap<K, T> map, T real) {
+		return real == null ? null : map.inverse().get(real);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/layout/absolute/BoundsProperty.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/layout/absolute/BoundsProperty.java
index f928cf874..7321d015c 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/layout/absolute/BoundsProperty.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/layout/absolute/BoundsProperty.java
@@ -26,55 +26,55 @@
  * @coverage core.model.layout.absolute
  */
 public abstract class BoundsProperty<C extends IAbstractComponentInfo> extends Property {
-  protected final C m_component;
-  private final String m_title;
+	protected final C m_component;
+	private final String m_title;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public BoundsProperty(C component, String title) {
-    super(IntegerPropertyEditor.INSTANCE);
-    m_component = component;
-    m_title = title;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public BoundsProperty(C component, String title) {
+		super(IntegerPropertyEditor.INSTANCE);
+		m_component = component;
+		m_title = title;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Property
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getTitle() {
-    return m_title;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Property
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getTitle() {
+		return m_title;
+	}
 
-  @Override
-  public boolean isModified() throws Exception {
-    return true;
-  }
+	@Override
+	public boolean isModified() throws Exception {
+		return true;
+	}
 
-  @Override
-  public Object getValue() throws Exception {
-    return ScriptUtils.evaluate(m_title, m_component.getModelBounds());
-  }
+	@Override
+	public Object getValue() throws Exception {
+		return ScriptUtils.evaluate(m_title, m_component.getModelBounds());
+	}
 
-  @Override
-  public final void setValue(final Object value) throws Exception {
-    if (value != UNKNOWN_VALUE) {
-      ExecutionUtils.run(m_component.getUnderlyingModel(), new RunnableEx() {
-        @Override
-        public void run() throws Exception {
-          setValue2((Integer) value, m_component.getModelBounds());
-        }
-      });
-    }
-  }
+	@Override
+	public final void setValue(final Object value) throws Exception {
+		if (value != UNKNOWN_VALUE) {
+			ExecutionUtils.run(m_component.getUnderlyingModel(), new RunnableEx() {
+				@Override
+				public void run() throws Exception {
+					setValue2((Integer) value, m_component.getModelBounds());
+				}
+			});
+		}
+	}
 
-  /**
-   * Utility method to be called from {@link BoundsProperty#setValue(Object)}, bounds updating is
-   * here.
-   */
-  public abstract void setValue2(int value, Rectangle modelBounds) throws Exception;
+	/**
+	 * Utility method to be called from {@link BoundsProperty#setValue(Object)}, bounds updating is
+	 * here.
+	 */
+	public abstract void setValue2(int value, Rectangle modelBounds) throws Exception;
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/layout/absolute/IImageProvider.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/layout/absolute/IImageProvider.java
index e722975ba..5934532a4 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/layout/absolute/IImageProvider.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/layout/absolute/IImageProvider.java
@@ -18,8 +18,8 @@
  * @author mitin_aa
  */
 public interface IImageProvider {
-  /**
-   * @return the Image instance by given path.
-   */
-  Image getImage(String path);
+	/**
+	 * @return the Image instance by given path.
+	 */
+	Image getImage(String path);
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/layout/absolute/IPreferenceConstants.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/layout/absolute/IPreferenceConstants.java
index bbea88221..14f084654 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/layout/absolute/IPreferenceConstants.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/layout/absolute/IPreferenceConstants.java
@@ -22,45 +22,45 @@
  * @coverage core.model.layout.absolute
  */
 public interface IPreferenceConstants {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // editing mode
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  String P_USE_FREE_MODE = "P_USE_FREE_MODE";
-  String P_USE_GRID = "P_USE_GRID";
-  String P_CREATION_FLOW = "P_CREATION_FLOW";
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // grid options
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  String P_DISPLAY_GRID = "P_DISPLAY_GRID";
-  String P_GRID_STEP_X = "P_GRID_STEP_X";
-  String P_GRID_STEP_Y = "P_GRID_STEP_Y";
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // component gaps
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  String P_COMPONENT_GAP_LEFT = "P_COMPONENT_GAP_LEFT";
-  String P_COMPONENT_GAP_RIGHT = "P_COMPONENT_GAP_RIGHT";
-  String P_COMPONENT_GAP_TOP = "P_COMPONENT_GAP_TOP";
-  String P_COMPONENT_GAP_BOTTOM = "P_COMPONENT_GAP_BOTTOM";
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // container gaps
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  String P_CONTAINER_GAP_LEFT = "P_CONTAINER_GAP_LEFT";
-  String P_CONTAINER_GAP_RIGHT = "P_CONTAINER_GAP_RIGHT";
-  String P_CONTAINER_GAP_TOP = "P_CONTAINER_GAP_TOP";
-  String P_CONTAINER_GAP_BOTTOM = "P_CONTAINER_GAP_BOTTOM";
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // misc
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  String P_DISPLAY_LOCATION_SIZE_HINTS = "P_DISPLAY_LOCATION_SIZE_HINTS";
-  String P_AUTOSIZE_ON_PROPERTY_CHANGE = "absoluteLayout.autoSize.onTextImage";
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// editing mode
+	//
+	////////////////////////////////////////////////////////////////////////////
+	String P_USE_FREE_MODE = "P_USE_FREE_MODE";
+	String P_USE_GRID = "P_USE_GRID";
+	String P_CREATION_FLOW = "P_CREATION_FLOW";
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// grid options
+	//
+	////////////////////////////////////////////////////////////////////////////
+	String P_DISPLAY_GRID = "P_DISPLAY_GRID";
+	String P_GRID_STEP_X = "P_GRID_STEP_X";
+	String P_GRID_STEP_Y = "P_GRID_STEP_Y";
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// component gaps
+	//
+	////////////////////////////////////////////////////////////////////////////
+	String P_COMPONENT_GAP_LEFT = "P_COMPONENT_GAP_LEFT";
+	String P_COMPONENT_GAP_RIGHT = "P_COMPONENT_GAP_RIGHT";
+	String P_COMPONENT_GAP_TOP = "P_COMPONENT_GAP_TOP";
+	String P_COMPONENT_GAP_BOTTOM = "P_COMPONENT_GAP_BOTTOM";
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// container gaps
+	//
+	////////////////////////////////////////////////////////////////////////////
+	String P_CONTAINER_GAP_LEFT = "P_CONTAINER_GAP_LEFT";
+	String P_CONTAINER_GAP_RIGHT = "P_CONTAINER_GAP_RIGHT";
+	String P_CONTAINER_GAP_TOP = "P_CONTAINER_GAP_TOP";
+	String P_CONTAINER_GAP_BOTTOM = "P_CONTAINER_GAP_BOTTOM";
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// misc
+	//
+	////////////////////////////////////////////////////////////////////////////
+	String P_DISPLAY_LOCATION_SIZE_HINTS = "P_DISPLAY_LOCATION_SIZE_HINTS";
+	String P_AUTOSIZE_ON_PROPERTY_CHANGE = "absoluteLayout.autoSize.onTextImage";
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/layout/absolute/OrderingSupport.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/layout/absolute/OrderingSupport.java
index 6da4bcc61..413591ea2 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/layout/absolute/OrderingSupport.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/layout/absolute/OrderingSupport.java
@@ -30,105 +30,105 @@
  * @coverage core.model.layout.absolute
  */
 public final class OrderingSupport {
-  private final List<? extends IAbstractComponentInfo> m_components;
-  private final IAbstractComponentInfo m_component;
+	private final List<? extends IAbstractComponentInfo> m_components;
+	private final IAbstractComponentInfo m_component;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public OrderingSupport(List<? extends IAbstractComponentInfo> components,
-      IAbstractComponentInfo component) {
-    m_components = components;
-    m_component = component;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public OrderingSupport(List<? extends IAbstractComponentInfo> components,
+			IAbstractComponentInfo component) {
+		m_components = components;
+		m_component = component;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void contributeActions(IMenuManager manager) {
-    IMenuManager orderMenuManager = new MenuManager(ModelMessages.OrderingSupport_orderManager);
-    manager.appendToGroup(IContextMenuConstants.GROUP_CONSTRAINTS, orderMenuManager);
-    // add separate actions
-    boolean isFirst = m_components.indexOf(m_component) == 0;
-    boolean isLast = m_components.indexOf(m_component) == m_components.size() - 1;
-    orderMenuManager.add(new OrderAction(ModelMessages.OrderingSupport_bringToFront,
-        "bring_to_front.png", !isFirst) {
-      @Override
-      protected void runEx() throws Exception {
-        GlobalState.getOrderProcessor().move(m_component, getFirstSibling());
-      }
-    });
-    orderMenuManager.add(new OrderAction(ModelMessages.OrderingSupport_sendToBack,
-        "send_to_back.png", !isLast) {
-      @Override
-      protected void runEx() throws Exception {
-        GlobalState.getOrderProcessor().move(m_component, null);
-      }
-    });
-    orderMenuManager.add(new OrderAction(ModelMessages.OrderingSupport_bringForward,
-        "bring_forward.png", !isFirst) {
-      @Override
-      protected void runEx() throws Exception {
-        GlobalState.getOrderProcessor().move(m_component, getPreviousSibling());
-      }
-    });
-    orderMenuManager.add(new OrderAction(ModelMessages.OrderingSupport_sendBackward,
-        "send_backward.png", !isLast) {
-      @Override
-      protected void runEx() throws Exception {
-        GlobalState.getOrderProcessor().move(m_component, getNextSibling());
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void contributeActions(IMenuManager manager) {
+		IMenuManager orderMenuManager = new MenuManager(ModelMessages.OrderingSupport_orderManager);
+		manager.appendToGroup(IContextMenuConstants.GROUP_CONSTRAINTS, orderMenuManager);
+		// add separate actions
+		boolean isFirst = m_components.indexOf(m_component) == 0;
+		boolean isLast = m_components.indexOf(m_component) == m_components.size() - 1;
+		orderMenuManager.add(new OrderAction(ModelMessages.OrderingSupport_bringToFront,
+				"bring_to_front.png", !isFirst) {
+			@Override
+			protected void runEx() throws Exception {
+				GlobalState.getOrderProcessor().move(m_component, getFirstSibling());
+			}
+		});
+		orderMenuManager.add(new OrderAction(ModelMessages.OrderingSupport_sendToBack,
+				"send_to_back.png", !isLast) {
+			@Override
+			protected void runEx() throws Exception {
+				GlobalState.getOrderProcessor().move(m_component, null);
+			}
+		});
+		orderMenuManager.add(new OrderAction(ModelMessages.OrderingSupport_bringForward,
+				"bring_forward.png", !isFirst) {
+			@Override
+			protected void runEx() throws Exception {
+				GlobalState.getOrderProcessor().move(m_component, getPreviousSibling());
+			}
+		});
+		orderMenuManager.add(new OrderAction(ModelMessages.OrderingSupport_sendBackward,
+				"send_backward.png", !isLast) {
+			@Override
+			protected void runEx() throws Exception {
+				GlobalState.getOrderProcessor().move(m_component, getNextSibling());
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Internal utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the first component.
-   */
-  private IAbstractComponentInfo getFirstSibling() {
-    return m_components.get(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Internal utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the first component.
+	 */
+	private IAbstractComponentInfo getFirstSibling() {
+		return m_components.get(0);
+	}
 
-  /**
-   * @return the component directly before {@link #m_component}, or <code>null</code> if
-   *         {@link #m_component} is first component.
-   */
-  private IAbstractComponentInfo getPreviousSibling() {
-    int index = m_components.indexOf(m_component);
-    return index != 0 ? m_components.get(index - 1) : null;
-  }
+	/**
+	 * @return the component directly before {@link #m_component}, or <code>null</code> if
+	 *         {@link #m_component} is first component.
+	 */
+	private IAbstractComponentInfo getPreviousSibling() {
+		int index = m_components.indexOf(m_component);
+		return index != 0 ? m_components.get(index - 1) : null;
+	}
 
-  /**
-   * @return the component directly after {@link #m_component}, or <code>null</code> if
-   *         {@link #m_component} is last or last but one component.
-   */
-  private IAbstractComponentInfo getNextSibling() {
-    int index = m_components.indexOf(m_component);
-    return index + 2 < m_components.size() ? m_components.get(index + 2) : null;
-  }
+	/**
+	 * @return the component directly after {@link #m_component}, or <code>null</code> if
+	 *         {@link #m_component} is last or last but one component.
+	 */
+	private IAbstractComponentInfo getNextSibling() {
+		int index = m_components.indexOf(m_component);
+		return index + 2 < m_components.size() ? m_components.get(index + 2) : null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // OrderAction
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Abstract super class for ordering actions.
-   */
-  private abstract class OrderAction extends ObjectInfoAction {
-    public OrderAction(String text, String imageName, boolean enabled) {
-      super(m_component.getUnderlyingModel());
-      setText(text);
-      setImageDescriptor(DesignerPlugin.getImageDescriptor("info/layout/absolute/" + imageName));
-      setEnabled(enabled);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// OrderAction
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Abstract super class for ordering actions.
+	 */
+	private abstract class OrderAction extends ObjectInfoAction {
+		public OrderAction(String text, String imageName, boolean enabled) {
+			super(m_component.getUnderlyingModel());
+			setText(text);
+			setImageDescriptor(DesignerPlugin.getImageDescriptor("info/layout/absolute/" + imageName));
+			setEnabled(enabled);
+		}
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/menu/AbstractMenuMenuObject.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/menu/AbstractMenuMenuObject.java
index e985468a6..141007f02 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/menu/AbstractMenuMenuObject.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/menu/AbstractMenuMenuObject.java
@@ -20,43 +20,43 @@
  * @coverage core.model.menu
  */
 public abstract class AbstractMenuMenuObject extends AbstractMenuObject {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractMenuMenuObject(ObjectInfo component) {
-    super(component);
-    m_component.addBroadcastListener(new ObjectEventListener() {
-      @Override
-      public void refreshed() throws Exception {
-        if (isRoot()) {
-          fireRefreshListeners();
-        }
-      }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractMenuMenuObject(ObjectInfo component) {
+		super(component);
+		m_component.addBroadcastListener(new ObjectEventListener() {
+			@Override
+			public void refreshed() throws Exception {
+				if (isRoot()) {
+					fireRefreshListeners();
+				}
+			}
 
-      @Override
-      public void refreshed2() throws Exception {
-        if (isRoot()) {
-          MenuObjectInfoUtils.m_selectingObject = null;
-        }
-      }
+			@Override
+			public void refreshed2() throws Exception {
+				if (isRoot()) {
+					MenuObjectInfoUtils.m_selectingObject = null;
+				}
+			}
 
-      @Override
-      public void selecting(ObjectInfo object, boolean[] refreshFlag) throws Exception {
-        if (isRootFor(object)) {
-          IMenuObjectInfo menuObject = null;
-          for (; menuObject == null && object != null; object = object.getParent()) {
-            menuObject = MenuObjectInfoUtils.getMenuObjectInfo(object);
-          }
-          // if found some IMenuObjectInfo in parent hierarchy, do refresh() to show
-          if (menuObject != null) {
-            MenuObjectInfoUtils.m_selectingObject = menuObject;
-            fireRefreshListeners();
-            MenuObjectInfoUtils.m_selectingObject = null;
-          }
-        }
-      }
-    });
-  }
+			@Override
+			public void selecting(ObjectInfo object, boolean[] refreshFlag) throws Exception {
+				if (isRootFor(object)) {
+					IMenuObjectInfo menuObject = null;
+					for (; menuObject == null && object != null; object = object.getParent()) {
+						menuObject = MenuObjectInfoUtils.getMenuObjectInfo(object);
+					}
+					// if found some IMenuObjectInfo in parent hierarchy, do refresh() to show
+					if (menuObject != null) {
+						MenuObjectInfoUtils.m_selectingObject = menuObject;
+						fireRefreshListeners();
+						MenuObjectInfoUtils.m_selectingObject = null;
+					}
+				}
+			}
+		});
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/menu/AbstractMenuObject.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/menu/AbstractMenuObject.java
index 20bb47902..60f53b549 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/menu/AbstractMenuObject.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/menu/AbstractMenuObject.java
@@ -23,102 +23,102 @@
  * @coverage core.model.menu
  */
 public abstract class AbstractMenuObject implements IMenuObjectInfo {
-  protected final ObjectInfo m_component;
+	protected final ObjectInfo m_component;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractMenuObject(ObjectInfo component) {
-    m_component = component;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractMenuObject(ObjectInfo component) {
+		m_component = component;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Model
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Object getToolkitModel() {
-    return m_component;
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Listener
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final EventTable m_eventTable = new EventTable();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Model
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Object getToolkitModel() {
+		return m_component;
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Listener
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final EventTable m_eventTable = new EventTable();
 
-  @Override
-  public final void addListener(IMenuObjectListener listener) {
-    m_eventTable.addListener(IMenuObjectListener.class, listener);
-  }
+	@Override
+	public final void addListener(IMenuObjectListener listener) {
+		m_eventTable.addListener(IMenuObjectListener.class, listener);
+	}
 
-  @Override
-  public final void removeListener(IMenuObjectListener listener) {
-    m_eventTable.removeListener(IMenuObjectListener.class, listener);
-  }
+	@Override
+	public final void removeListener(IMenuObjectListener listener) {
+		m_eventTable.removeListener(IMenuObjectListener.class, listener);
+	}
 
-  /**
-   * Notifies {@link IMenuObjectListener#refresh()}'s.
-   */
-  protected final void fireRefreshListeners() {
-    for (IMenuObjectListener listener : m_eventTable.getListeners(IMenuObjectListener.class)) {
-      listener.refresh();
-    }
-  }
+	/**
+	 * Notifies {@link IMenuObjectListener#refresh()}'s.
+	 */
+	protected final void fireRefreshListeners() {
+		for (IMenuObjectListener listener : m_eventTable.getListeners(IMenuObjectListener.class)) {
+			listener.refresh();
+		}
+	}
 
-  /**
-   * Notifies {@link IMenuObjectListener#deleting(Object)}.
-   */
-  protected final void fireDeleteListeners(Object toolkitModel) {
-    for (IMenuObjectListener listener : m_eventTable.getListeners(IMenuObjectListener.class)) {
-      listener.deleting(toolkitModel);
-    }
-  }
+	/**
+	 * Notifies {@link IMenuObjectListener#deleting(Object)}.
+	 */
+	protected final void fireDeleteListeners(Object toolkitModel) {
+		for (IMenuObjectListener listener : m_eventTable.getListeners(IMenuObjectListener.class)) {
+			listener.deleting(toolkitModel);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Policy
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final void executeEdit(RunnableEx runnable) {
-    ExecutionUtils.run(m_component, runnable);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Policy
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final void executeEdit(RunnableEx runnable) {
+		ExecutionUtils.run(m_component, runnable);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Validation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final boolean canMove() {
-    return GlobalState.getValidatorHelper().canReorder(m_component);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Validation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final boolean canMove() {
+		return GlobalState.getValidatorHelper().canReorder(m_component);
+	}
 
-  @Override
-  public final boolean canReparent() {
-    return GlobalState.getValidatorHelper().canReparent(m_component);
-  }
+	@Override
+	public final boolean canReparent() {
+		return GlobalState.getValidatorHelper().canReparent(m_component);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if this {@link JavaMenuMenuObject} is root of menu hierarchy.
-   */
-  protected final boolean isRoot() {
-    return MenuObjectInfoUtils.getMenuInfo(m_component.getParent()) == null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if this {@link JavaMenuMenuObject} is root of menu hierarchy.
+	 */
+	protected final boolean isRoot() {
+		return MenuObjectInfoUtils.getMenuInfo(m_component.getParent()) == null;
+	}
 
-  /**
-   * @return <code>true</code> if given <code>child</code> belong our menu hierarchy.
-   */
-  protected final boolean isRootFor(ObjectInfo child) {
-    return isRoot() && child != null && m_component.isItOrParentOf(child);
-  }
+	/**
+	 * @return <code>true</code> if given <code>child</code> belong our menu hierarchy.
+	 */
+	protected final boolean isRootFor(ObjectInfo child) {
+		return isRoot() && child != null && m_component.isItOrParentOf(child);
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/menu/IMenuInfo.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/menu/IMenuInfo.java
index a4f8a1179..51fcec387 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/menu/IMenuInfo.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/menu/IMenuInfo.java
@@ -20,21 +20,21 @@
  * @coverage core.model.menu
  */
 public interface IMenuInfo extends IMenuObjectInfo {
-  String NO_ITEMS_TEXT = "(Add items here)";
+	String NO_ITEMS_TEXT = "(Add items here)";
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if {@link IMenuItemInfo}'s are located horizontally, and
-   *         <code>false</code> if vertically.
-   */
-  boolean isHorizontal();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if {@link IMenuItemInfo}'s are located horizontally, and
+	 *         <code>false</code> if vertically.
+	 */
+	boolean isHorizontal();
 
-  /**
-   * @return {@link IMenuItemInfo}'s that this menu contains.
-   */
-  List<IMenuItemInfo> getItems();
+	/**
+	 * @return {@link IMenuItemInfo}'s that this menu contains.
+	 */
+	List<IMenuItemInfo> getItems();
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/menu/IMenuItemInfo.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/menu/IMenuItemInfo.java
index efae78dc7..d093f89e2 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/menu/IMenuItemInfo.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/menu/IMenuItemInfo.java
@@ -18,9 +18,9 @@
  * @coverage core.model.menu
  */
 public interface IMenuItemInfo extends IMenuObjectInfo {
-  /**
-   * @return the child {@link IMenuInfo}, or <code>null</code> if there are no child
-   *         {@link IMenuInfo}.
-   */
-  IMenuInfo getMenu();
+	/**
+	 * @return the child {@link IMenuInfo}, or <code>null</code> if there are no child
+	 *         {@link IMenuInfo}.
+	 */
+	IMenuInfo getMenu();
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/menu/IMenuObjectInfo.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/menu/IMenuObjectInfo.java
index c701026fb..c243352be 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/menu/IMenuObjectInfo.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/menu/IMenuObjectInfo.java
@@ -26,75 +26,75 @@
  * @coverage core.model.menu
  */
 public interface IMenuObjectInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Model
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Usually we should register menu {@link EditPart}'s with original toolkit models, such as
-   * {@link IAbstractComponentInfo}. At same time we don't want expose
-   * {@link IAbstractComponentInfo} to the generic menu implementation.
-   *
-   * @return the model that should be associated with this {@link IMenuObjectInfo}.
-   */
-  Object getModel();
-  /**
-   * @return the toolkit model, such as {@link ObjectInfo}.
-   */
-  Object getToolkitModel();
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Delete listener
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds {@link IMenuObjectListener}.
-   */
-  void addListener(IMenuObjectListener listener);
-  /**
-   * Removes {@link IMenuObjectListener}.
-   */
-  void removeListener(IMenuObjectListener listener);
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link Image} to show as presentation, may be <code>null</code>. If
-   *         <code>null</code>, then only {@link #getBounds()} will be used to select area on
-   *         parent's presentation.
-   */
-  Image getImage();
-  /**
-   * @return the location/size of this object presentation on parent's presentation.
-   */
-  Rectangle getBounds();
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Validation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if this {@link IMenuObjectInfo} can be moved inside of its parent.
-   */
-  boolean canMove();
-  /**
-   * @return <code>true</code> if this {@link IMenuObjectInfo} can be moved on different parent.
-   */
-  boolean canReparent();
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Policy
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Performs edit operation using given {@link RunnableEx}.
-   */
-  void executeEdit(RunnableEx runnable);
-  /**
-   * @return the {@link IMenuPolicy} for validating and performing operations.
-   */
-  IMenuPolicy getPolicy();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Model
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Usually we should register menu {@link EditPart}'s with original toolkit models, such as
+	 * {@link IAbstractComponentInfo}. At same time we don't want expose
+	 * {@link IAbstractComponentInfo} to the generic menu implementation.
+	 *
+	 * @return the model that should be associated with this {@link IMenuObjectInfo}.
+	 */
+	Object getModel();
+	/**
+	 * @return the toolkit model, such as {@link ObjectInfo}.
+	 */
+	Object getToolkitModel();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Delete listener
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds {@link IMenuObjectListener}.
+	 */
+	void addListener(IMenuObjectListener listener);
+	/**
+	 * Removes {@link IMenuObjectListener}.
+	 */
+	void removeListener(IMenuObjectListener listener);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link Image} to show as presentation, may be <code>null</code>. If
+	 *         <code>null</code>, then only {@link #getBounds()} will be used to select area on
+	 *         parent's presentation.
+	 */
+	Image getImage();
+	/**
+	 * @return the location/size of this object presentation on parent's presentation.
+	 */
+	Rectangle getBounds();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Validation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if this {@link IMenuObjectInfo} can be moved inside of its parent.
+	 */
+	boolean canMove();
+	/**
+	 * @return <code>true</code> if this {@link IMenuObjectInfo} can be moved on different parent.
+	 */
+	boolean canReparent();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Policy
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Performs edit operation using given {@link RunnableEx}.
+	 */
+	void executeEdit(RunnableEx runnable);
+	/**
+	 * @return the {@link IMenuPolicy} for validating and performing operations.
+	 */
+	IMenuPolicy getPolicy();
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/menu/IMenuObjectListener.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/menu/IMenuObjectListener.java
index 7dbdaf9e1..8a09d3ddc 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/menu/IMenuObjectListener.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/menu/IMenuObjectListener.java
@@ -17,13 +17,13 @@
  * @coverage core.model.menu
  */
 public interface IMenuObjectListener {
-  /**
-   * Notifies refresh should be performed.
-   */
-  void refresh();
+	/**
+	 * Notifies refresh should be performed.
+	 */
+	void refresh();
 
-  /**
-   * Notifies that toolkit object is going to be deleted.
-   */
-  void deleting(Object toolkitModel);
+	/**
+	 * Notifies that toolkit object is going to be deleted.
+	 */
+	void deleting(Object toolkitModel);
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/menu/IMenuPolicy.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/menu/IMenuPolicy.java
index 2c02b3a78..1c1dfa5a4 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/menu/IMenuPolicy.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/menu/IMenuPolicy.java
@@ -21,117 +21,117 @@
  * @coverage core.model.menu
  */
 public interface IMenuPolicy {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Validation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @param newObject
-   *          the new object to add.
-   *
-   * @return <code>true</code> if new object can be added.
-   */
-  boolean validateCreate(Object newObject);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Validation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @param newObject
+	 *          the new object to add.
+	 *
+	 * @return <code>true</code> if new object can be added.
+	 */
+	boolean validateCreate(Object newObject);
 
-  /**
-   * @param mementoObject
-   *          some object that contains information about pasting.
-   *
-   * @return <code>true</code> paste operation can be performed.
-   */
-  boolean validatePaste(Object mementoObject);
+	/**
+	 * @param mementoObject
+	 *          some object that contains information about pasting.
+	 *
+	 * @return <code>true</code> paste operation can be performed.
+	 */
+	boolean validatePaste(Object mementoObject);
 
-  /**
-   * @param object
-   *          the object that should be moved.
-   *
-   * @return <code>true</code> move operation can be performed.
-   */
-  boolean validateMove(Object object);
+	/**
+	 * @param object
+	 *          the object that should be moved.
+	 *
+	 * @return <code>true</code> move operation can be performed.
+	 */
+	boolean validateMove(Object object);
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds new object.
-   *
-   * @param newObject
-   *          the new object to add.
-   * @param nextObject
-   *          the item to add new item before.
-   */
-  void commandCreate(Object newObject, Object nextObject) throws Exception;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds new object.
+	 *
+	 * @param newObject
+	 *          the new object to add.
+	 * @param nextObject
+	 *          the item to add new item before.
+	 */
+	void commandCreate(Object newObject, Object nextObject) throws Exception;
 
-  /**
-   * Performs paste.
-   *
-   * @param mementoObject
-   *          some object that contains information about pasting.
-   * @param nextObject
-   *          the existing object to paste object before.
-   *
-   * @return the {@link List} of pasted objects that should be selected after paste.
-   */
-  List<?> commandPaste(Object mementoObject, Object nextObject) throws Exception;
+	/**
+	 * Performs paste.
+	 *
+	 * @param mementoObject
+	 *          some object that contains information about pasting.
+	 * @param nextObject
+	 *          the existing object to paste object before.
+	 *
+	 * @return the {@link List} of pasted objects that should be selected after paste.
+	 */
+	List<?> commandPaste(Object mementoObject, Object nextObject) throws Exception;
 
-  /**
-   * Performs move of one "object" before other "object".
-   *
-   * @param object
-   *          the toolkit object that should be moved.
-   * @param nextObject
-   *          the object to move object before.
-   */
-  void commandMove(Object object, Object nextObject) throws Exception;
+	/**
+	 * Performs move of one "object" before other "object".
+	 *
+	 * @param object
+	 *          the toolkit object that should be moved.
+	 * @param nextObject
+	 *          the object to move object before.
+	 */
+	void commandMove(Object object, Object nextObject) throws Exception;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Default implementations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Implementation of {@link IMenuPolicy} that does nothing.
-   */
-  IMenuPolicy NOOP = new IMenuPolicy() {
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Validation
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public boolean validateCreate(Object newObject) {
-      return false;
-    }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Default implementations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Implementation of {@link IMenuPolicy} that does nothing.
+	 */
+	IMenuPolicy NOOP = new IMenuPolicy() {
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Validation
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public boolean validateCreate(Object newObject) {
+			return false;
+		}
 
-    @Override
-    public boolean validatePaste(Object mementoObject) {
-      return false;
-    }
+		@Override
+		public boolean validatePaste(Object mementoObject) {
+			return false;
+		}
 
-    @Override
-    public boolean validateMove(Object object) {
-      return false;
-    }
+		@Override
+		public boolean validateMove(Object object) {
+			return false;
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Operations
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public void commandCreate(Object newObject, Object nextObject) throws Exception {
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Operations
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public void commandCreate(Object newObject, Object nextObject) throws Exception {
+		}
 
-    @Override
-    public void commandMove(Object object, Object nextObject) throws Exception {
-    }
+		@Override
+		public void commandMove(Object object, Object nextObject) throws Exception {
+		}
 
-    @Override
-    public List<?> commandPaste(Object mementoObject, Object nextObject) throws Exception {
-      return ImmutableList.of();
-    }
-  };
+		@Override
+		public List<?> commandPaste(Object mementoObject, Object nextObject) throws Exception {
+			return ImmutableList.of();
+		}
+	};
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/menu/IMenuPopupInfo.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/menu/IMenuPopupInfo.java
index afd2084aa..4c9c964c1 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/menu/IMenuPopupInfo.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/menu/IMenuPopupInfo.java
@@ -18,8 +18,8 @@
  * @coverage core.model.menu
  */
 public interface IMenuPopupInfo extends IMenuObjectInfo {
-  /**
-   * @return the underlying {@link IMenuInfo}.
-   */
-  IMenuInfo getMenu();
+	/**
+	 * @return the underlying {@link IMenuInfo}.
+	 */
+	IMenuInfo getMenu();
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/menu/MenuObjectInfoUtils.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/menu/MenuObjectInfoUtils.java
index fba2891f1..efd6483ef 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/menu/MenuObjectInfoUtils.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/menu/MenuObjectInfoUtils.java
@@ -25,154 +25,154 @@
  * @coverage core.model.menu
  */
 public final class MenuObjectInfoUtils {
-  public static IMenuObjectInfo m_selectingObject;
+	public static IMenuObjectInfo m_selectingObject;
 
-  /**
-   * Sets {@link Object} (should be adaptable to {@link IMenuObjectInfo}) which should be selected
-   * (and expanded) during refresh.
-   */
-  public static void setSelectingObject(Object object) {
-    m_selectingObject = getMenuObjectInfo(object);
-  }
+	/**
+	 * Sets {@link Object} (should be adaptable to {@link IMenuObjectInfo}) which should be selected
+	 * (and expanded) during refresh.
+	 */
+	public static void setSelectingObject(Object object) {
+		m_selectingObject = getMenuObjectInfo(object);
+	}
 
-  /**
-   * Sets {@link IMenuObjectInfo} which should be selected (and expanded) during refresh.
-   */
-  public static void setSelectingObject(IMenuObjectInfo selectingObject) {
-    m_selectingObject = selectingObject;
-  }
+	/**
+	 * Sets {@link IMenuObjectInfo} which should be selected (and expanded) during refresh.
+	 */
+	public static void setSelectingObject(IMenuObjectInfo selectingObject) {
+		m_selectingObject = selectingObject;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return {@link IMenuObjectInfo} for given object or <code>null</code> if object can't be
-   *         adapted to {@link IMenuObjectInfo}.
-   */
-  public static IMenuObjectInfo getMenuObjectInfo(Object object) {
-    return getAdapter(object, IMenuObjectInfo.class);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return {@link IMenuObjectInfo} for given object or <code>null</code> if object can't be
+	 *         adapted to {@link IMenuObjectInfo}.
+	 */
+	public static IMenuObjectInfo getMenuObjectInfo(Object object) {
+		return getAdapter(object, IMenuObjectInfo.class);
+	}
 
-  /**
-   * @return {@link IMenuPopupInfo} for given object or <code>null</code> if object can't be adapted
-   *         to {@link IMenuPopupInfo}.
-   */
-  public static IMenuPopupInfo getMenuPopupInfo(Object object) {
-    return getAdapter(object, IMenuPopupInfo.class);
-  }
+	/**
+	 * @return {@link IMenuPopupInfo} for given object or <code>null</code> if object can't be adapted
+	 *         to {@link IMenuPopupInfo}.
+	 */
+	public static IMenuPopupInfo getMenuPopupInfo(Object object) {
+		return getAdapter(object, IMenuPopupInfo.class);
+	}
 
-  /**
-   * @return {@link IMenuInfo} for given object or <code>null</code> if object can't be adapted to
-   *         {@link IMenuInfo}.
-   */
-  public static IMenuInfo getMenuInfo(Object object) {
-    return getAdapter(object, IMenuInfo.class);
-  }
+	/**
+	 * @return {@link IMenuInfo} for given object or <code>null</code> if object can't be adapted to
+	 *         {@link IMenuInfo}.
+	 */
+	public static IMenuInfo getMenuInfo(Object object) {
+		return getAdapter(object, IMenuInfo.class);
+	}
 
-  /**
-   * @return {@link IMenuItemInfo} for given object or <code>null</code> if object can't be adapted
-   *         to {@link IMenuItemInfo}.
-   */
-  public static IMenuItemInfo getMenuItemInfo(Object object) {
-    return getAdapter(object, IMenuItemInfo.class);
-  }
+	/**
+	 * @return {@link IMenuItemInfo} for given object or <code>null</code> if object can't be adapted
+	 *         to {@link IMenuItemInfo}.
+	 */
+	public static IMenuItemInfo getMenuItemInfo(Object object) {
+		return getAdapter(object, IMenuItemInfo.class);
+	}
 
-  /**
-   * @return {@link IMenuInfo} sub-menu of given {@link IMenuObjectInfo}, or <code>null</code> if
-   *         object sub-menu.
-   */
-  public static IMenuInfo getSubMenu(IMenuObjectInfo object) {
-    if (object instanceof IMenuPopupInfo) {
-      return ((IMenuPopupInfo) object).getMenu();
-    }
-    if (object instanceof IMenuItemInfo) {
-      return ((IMenuItemInfo) object).getMenu();
-    }
-    return null;
-  }
+	/**
+	 * @return {@link IMenuInfo} sub-menu of given {@link IMenuObjectInfo}, or <code>null</code> if
+	 *         object sub-menu.
+	 */
+	public static IMenuInfo getSubMenu(IMenuObjectInfo object) {
+		if (object instanceof IMenuPopupInfo) {
+			return ((IMenuPopupInfo) object).getMenu();
+		}
+		if (object instanceof IMenuItemInfo) {
+			return ((IMenuItemInfo) object).getMenu();
+		}
+		return null;
+	}
 
-  /**
-   * @return <code>true</code> if given {@link IMenuObjectInfo} are direct/indirect parent and
-   *         child.
-   */
-  public static boolean isParentChild(IMenuObjectInfo parent, IMenuObjectInfo child) {
-    // identify
-    if (parent == null || child == null) {
-      return false;
-    }
-    if (parent == child) {
-      return true;
-    }
-    // popup
-    if (parent instanceof IMenuPopupInfo) {
-      return isParentChild(((IMenuPopupInfo) parent).getMenu(), child);
-    }
-    // item
-    if (parent instanceof IMenuItemInfo) {
-      return isParentChild(((IMenuItemInfo) parent).getMenu(), child);
-    }
-    // menu
-    if (parent instanceof IMenuInfo) {
-      IMenuInfo parentMenu = (IMenuInfo) parent;
-      for (IMenuItemInfo item : parentMenu.getItems()) {
-        if (isParentChild(item, child)) {
-          return true;
-        }
-      }
-    }
-    // no, not parent/child
-    return false;
-  }
+	/**
+	 * @return <code>true</code> if given {@link IMenuObjectInfo} are direct/indirect parent and
+	 *         child.
+	 */
+	public static boolean isParentChild(IMenuObjectInfo parent, IMenuObjectInfo child) {
+		// identify
+		if (parent == null || child == null) {
+			return false;
+		}
+		if (parent == child) {
+			return true;
+		}
+		// popup
+		if (parent instanceof IMenuPopupInfo) {
+			return isParentChild(((IMenuPopupInfo) parent).getMenu(), child);
+		}
+		// item
+		if (parent instanceof IMenuItemInfo) {
+			return isParentChild(((IMenuItemInfo) parent).getMenu(), child);
+		}
+		// menu
+		if (parent instanceof IMenuInfo) {
+			IMenuInfo parentMenu = (IMenuInfo) parent;
+			for (IMenuItemInfo item : parentMenu.getItems()) {
+				if (isParentChild(item, child)) {
+					return true;
+				}
+			}
+		}
+		// no, not parent/child
+		return false;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Validation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if given object is implicit (exposed), so can not be used as
-   *         reference.
-   */
-  public static boolean isImplicitObject(Object reference) {
-    return !GlobalState.getValidatorHelper().canReference(reference);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Validation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if given object is implicit (exposed), so can not be used as
+	 *         reference.
+	 */
+	public static boolean isImplicitObject(Object reference) {
+		return !GlobalState.getValidatorHelper().canReference(reference);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Internal utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @param object
-   *          the {@link Object} to adapt.
-   * @param adapter
-   *          the type of adapter.
-   *
-   * @return the adapter of required type.
-   */
-  private static <T> T getAdapter(Object object, Class<T> adapter) {
-    // check object itself
-    if (object instanceof IAdaptable) {
-      T adapted = ((IAdaptable) object).getAdapter(adapter);
-      if (adapted != null) {
-        return adapted;
-      }
-    }
-    // check external IAdaptableFactory's
-    List<IAdaptableFactory> adaptableFactories =
-        ExternalFactoriesHelper.getElementsInstances(
-            IAdaptableFactory.class,
-            "org.eclipse.wb.core.adaptableFactories",
-            "factory");
-    for (IAdaptableFactory adaptableFactory : adaptableFactories) {
-      T adapted = adaptableFactory.getAdapter(object, adapter);
-      if (adapted != null) {
-        return adapted;
-      }
-    }
-    // can not adapt
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Internal utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @param object
+	 *          the {@link Object} to adapt.
+	 * @param adapter
+	 *          the type of adapter.
+	 *
+	 * @return the adapter of required type.
+	 */
+	private static <T> T getAdapter(Object object, Class<T> adapter) {
+		// check object itself
+		if (object instanceof IAdaptable) {
+			T adapted = ((IAdaptable) object).getAdapter(adapter);
+			if (adapted != null) {
+				return adapted;
+			}
+		}
+		// check external IAdaptableFactory's
+		List<IAdaptableFactory> adaptableFactories =
+				ExternalFactoriesHelper.getElementsInstances(
+						IAdaptableFactory.class,
+						"org.eclipse.wb.core.adaptableFactories",
+						"factory");
+		for (IAdaptableFactory adaptableFactory : adaptableFactories) {
+			T adapted = adaptableFactory.getAdapter(object, adapter);
+			if (adapted != null) {
+				return adapted;
+			}
+		}
+		// can not adapt
+		return null;
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/menu/MenuVisualData.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/menu/MenuVisualData.java
index aa1a64705..7c6c21cfe 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/menu/MenuVisualData.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/menu/MenuVisualData.java
@@ -22,18 +22,18 @@
  * @coverage core.model.menu
  */
 public final class MenuVisualData {
-  /**
-   * An image representing popup menu for menu bar m_menuImage == null because we have a shell
-   * window as menu image
-   */
-  public Image m_menuImage;
-  /**
-   * A rectangle of menu bounds. For popup menu it is menu image size, for menu bar it is bounds in
-   * shell coordinates
-   */
-  public Rectangle m_menuBounds;
-  /**
-   * An ArrayList of Rectangles of menu item bounds in menu window coordinates.
-   */
-  public List<Rectangle> m_itemBounds;
+	/**
+	 * An image representing popup menu for menu bar m_menuImage == null because we have a shell
+	 * window as menu image
+	 */
+	public Image m_menuImage;
+	/**
+	 * A rectangle of menu bounds. For popup menu it is menu image size, for menu bar it is bounds in
+	 * shell coordinates
+	 */
+	public Rectangle m_menuBounds;
+	/**
+	 * An ArrayList of Rectangles of menu item bounds in menu window coordinates.
+	 */
+	public List<Rectangle> m_itemBounds;
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/presentation/DefaultObjectPresentation.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/presentation/DefaultObjectPresentation.java
index cce4e84f8..03de43bef 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/presentation/DefaultObjectPresentation.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/presentation/DefaultObjectPresentation.java
@@ -29,63 +29,63 @@
  * @coverage core.model.presentation
  */
 public abstract class DefaultObjectPresentation implements IObjectPresentation {
-  private final ObjectInfo m_object;
+	private final ObjectInfo m_object;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DefaultObjectPresentation(ObjectInfo object) {
-    m_object = object;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DefaultObjectPresentation(ObjectInfo object) {
+		m_object = object;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IObjectPresentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public List<ObjectInfo> getChildrenTree() throws Exception {
-    List<ObjectInfo> children = Lists.newArrayList();
-    for (ObjectInfo child : m_object.getChildren()) {
-      // ask listeners if child should be displayed
-      boolean[] visible = new boolean[]{true};
-      visible[0] &= child.getPresentation().isVisible();
-      m_object.getBroadcast(ObjectInfoChildTree.class).invoke(child, visible);
-      // check if we can add this child
-      if (visible[0]) {
-        children.add(child);
-      }
-    }
-    m_object.getBroadcast(ObjectInfoChildrenTree.class).invoke(m_object, children);
-    return children;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IObjectPresentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public List<ObjectInfo> getChildrenTree() throws Exception {
+		List<ObjectInfo> children = Lists.newArrayList();
+		for (ObjectInfo child : m_object.getChildren()) {
+			// ask listeners if child should be displayed
+			boolean[] visible = new boolean[]{true};
+			visible[0] &= child.getPresentation().isVisible();
+			m_object.getBroadcast(ObjectInfoChildTree.class).invoke(child, visible);
+			// check if we can add this child
+			if (visible[0]) {
+				children.add(child);
+			}
+		}
+		m_object.getBroadcast(ObjectInfoChildrenTree.class).invoke(m_object, children);
+		return children;
+	}
 
-  @Override
-  public List<ObjectInfo> getChildrenGraphical() throws Exception {
-    List<ObjectInfo> children = Lists.newArrayList();
-    for (ObjectInfo child : m_object.getChildren()) {
-      // ask listeners if child should be displayed
-      boolean[] visible = new boolean[]{true};
-      visible[0] &= child.getPresentation().isVisible();
-      m_object.getBroadcast(ObjectInfoChildGraphical.class).invoke(child, visible);
-      // check if we can add this child
-      if (visible[0]) {
-        children.add(child);
-      }
-    }
-    m_object.getBroadcast(ObjectInfoChildrenGraphical.class).invoke(children);
-    return children;
-  }
+	@Override
+	public List<ObjectInfo> getChildrenGraphical() throws Exception {
+		List<ObjectInfo> children = Lists.newArrayList();
+		for (ObjectInfo child : m_object.getChildren()) {
+			// ask listeners if child should be displayed
+			boolean[] visible = new boolean[]{true};
+			visible[0] &= child.getPresentation().isVisible();
+			m_object.getBroadcast(ObjectInfoChildGraphical.class).invoke(child, visible);
+			// check if we can add this child
+			if (visible[0]) {
+				children.add(child);
+			}
+		}
+		m_object.getBroadcast(ObjectInfoChildrenGraphical.class).invoke(children);
+		return children;
+	}
 
-  @Override
-  public Image getIcon() throws Exception {
-    return null;
-  }
+	@Override
+	public Image getIcon() throws Exception {
+		return null;
+	}
 
-  @Override
-  public boolean isVisible() throws Exception {
-    return true;
-  }
+	@Override
+	public boolean isVisible() throws Exception {
+		return true;
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/presentation/IObjectPresentation.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/presentation/IObjectPresentation.java
index e6c13988f..7c702ade2 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/presentation/IObjectPresentation.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/presentation/IObjectPresentation.java
@@ -23,31 +23,31 @@
  * @coverage core.model.presentation
  */
 public interface IObjectPresentation {
-  /**
-   * @return <code>true</code> if object should be displayed for user. For example we can display
-   *         some containers only if there is at least one child.
-   */
-  boolean isVisible() throws Exception;
-
-  /**
-   * @return the text to display for user. This can be some static text, variable name, etc.
-   */
-  String getText() throws Exception;
-
-  /**
-   * @return the icon to display for user.
-   */
-  Image getIcon() throws Exception;
-
-  /**
-   * @return the list of {@link ObjectInfo} children to display for user in components tree. This
-   *         list can be different than {@link ObjectInfo#getChildren()}.
-   */
-  List<ObjectInfo> getChildrenTree() throws Exception;
-
-  /**
-   * @return the list of {@link ObjectInfo} children to display for user on design canvas. This list
-   *         can be different than {@link ObjectInfo#getChildren()}.
-   */
-  List<ObjectInfo> getChildrenGraphical() throws Exception;
+	/**
+	 * @return <code>true</code> if object should be displayed for user. For example we can display
+	 *         some containers only if there is at least one child.
+	 */
+	boolean isVisible() throws Exception;
+
+	/**
+	 * @return the text to display for user. This can be some static text, variable name, etc.
+	 */
+	String getText() throws Exception;
+
+	/**
+	 * @return the icon to display for user.
+	 */
+	Image getIcon() throws Exception;
+
+	/**
+	 * @return the list of {@link ObjectInfo} children to display for user in components tree. This
+	 *         list can be different than {@link ObjectInfo#getChildren()}.
+	 */
+	List<ObjectInfo> getChildrenTree() throws Exception;
+
+	/**
+	 * @return the list of {@link ObjectInfo} children to display for user on design canvas. This list
+	 *         can be different than {@link ObjectInfo#getChildren()}.
+	 */
+	List<ObjectInfo> getChildrenGraphical() throws Exception;
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/ComplexProperty.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/ComplexProperty.java
index b8f3e6f56..b9d12792e 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/ComplexProperty.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/ComplexProperty.java
@@ -29,182 +29,182 @@
  * @coverage core.model.property
  */
 public class ComplexProperty extends Property {
-  private final String m_title;
-  private String m_text;
-  private String m_tooltip;
-  private boolean m_modified;
-  private Property[] m_properties;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ComplexProperty(String title, String text) {
-    this(title, text, new Property[0]);
-  }
-
-  public ComplexProperty(String title, String text, Property[] properties) {
-    super(new ComplexPropertyEditor());
-    m_title = title;
-    m_text = text;
-    setText(text);
-    setProperties(properties);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets the text.
-   */
-  public void setText(String text) {
-    m_text = text;
-  }
-
-  /**
-   * @return the text to display as value.
-   */
-  public String getText() throws Exception {
-    return m_text;
-  }
-
-  /**
-   * Sets the tooltip text.
-   */
-  public void setTooltip(String tooltip) {
-    m_tooltip = tooltip;
-  }
-
-  /**
-   * Specifies the {@link PropertyEditorPresentation}, for example to displaying "..." button.
-   */
-  public void setEditorPresentation(PropertyEditorPresentation presentation) {
-    ((ComplexPropertyEditor) getEditor()).m_presentation = presentation;
-  }
-
-  /**
-   * @return the sub-properties.
-   */
-  public Property[] getProperties() {
-    return m_properties;
-  }
-
-  /**
-   * Sets the sub-properties.
-   */
-  public void setProperties(Property[] properties) {
-    m_properties = properties;
-  }
-
-  /**
-   * Sets the sub-properties.
-   */
-  public void setProperties(List<Property> properties) {
-    Property[] propertiesArray = properties.toArray(new Property[properties.size()]);
-    setProperties(propertiesArray);
-  }
-
-  /**
-   * Sets the "modified" flag.
-   */
-  public void setModified(boolean modified) {
-    m_modified = modified;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Property
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getTitle() {
-    return m_title;
-  }
-
-  @Override
-  public boolean isModified() throws Exception {
-    return m_modified;
-  }
-
-  @Override
-  public Object getValue() throws Exception {
-    return null;
-  }
-
-  @Override
-  public void setValue(Object value) throws Exception {
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Adapter
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public <T> T getAdapter(Class<T> adapter) {
-    if (adapter == PropertyTooltipProvider.class && m_tooltip != null) {
-      return adapter.cast(new PropertyTooltipTextProvider() {
-        @Override
-        protected String getText(Property property) throws Exception {
-          return m_tooltip;
-        }
-      });
-    }
-    return super.getAdapter(adapter);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ComplexPropertyEditor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final class ComplexPropertyEditor extends TextDisplayPropertyEditor
-      implements
-        IComplexPropertyEditor {
-    private PropertyEditorPresentation m_presentation;
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // IComplexPropertyEditor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public Property[] getProperties(Property property) throws Exception {
-      return ((ComplexProperty) property).getProperties();
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // TextDisplayPropertyEditor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    protected String getText(Property property) throws Exception {
-      return ((ComplexProperty) property).getText();
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // PropertyEditor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public boolean activate(PropertyTable propertyTable, Property property, Point location)
-        throws Exception {
-      return false;
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Presentation
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public PropertyEditorPresentation getPresentation() {
-      return m_presentation;
-    }
-  }
+	private final String m_title;
+	private String m_text;
+	private String m_tooltip;
+	private boolean m_modified;
+	private Property[] m_properties;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ComplexProperty(String title, String text) {
+		this(title, text, new Property[0]);
+	}
+
+	public ComplexProperty(String title, String text, Property[] properties) {
+		super(new ComplexPropertyEditor());
+		m_title = title;
+		m_text = text;
+		setText(text);
+		setProperties(properties);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets the text.
+	 */
+	public void setText(String text) {
+		m_text = text;
+	}
+
+	/**
+	 * @return the text to display as value.
+	 */
+	public String getText() throws Exception {
+		return m_text;
+	}
+
+	/**
+	 * Sets the tooltip text.
+	 */
+	public void setTooltip(String tooltip) {
+		m_tooltip = tooltip;
+	}
+
+	/**
+	 * Specifies the {@link PropertyEditorPresentation}, for example to displaying "..." button.
+	 */
+	public void setEditorPresentation(PropertyEditorPresentation presentation) {
+		((ComplexPropertyEditor) getEditor()).m_presentation = presentation;
+	}
+
+	/**
+	 * @return the sub-properties.
+	 */
+	public Property[] getProperties() {
+		return m_properties;
+	}
+
+	/**
+	 * Sets the sub-properties.
+	 */
+	public void setProperties(Property[] properties) {
+		m_properties = properties;
+	}
+
+	/**
+	 * Sets the sub-properties.
+	 */
+	public void setProperties(List<Property> properties) {
+		Property[] propertiesArray = properties.toArray(new Property[properties.size()]);
+		setProperties(propertiesArray);
+	}
+
+	/**
+	 * Sets the "modified" flag.
+	 */
+	public void setModified(boolean modified) {
+		m_modified = modified;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Property
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getTitle() {
+		return m_title;
+	}
+
+	@Override
+	public boolean isModified() throws Exception {
+		return m_modified;
+	}
+
+	@Override
+	public Object getValue() throws Exception {
+		return null;
+	}
+
+	@Override
+	public void setValue(Object value) throws Exception {
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Adapter
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public <T> T getAdapter(Class<T> adapter) {
+		if (adapter == PropertyTooltipProvider.class && m_tooltip != null) {
+			return adapter.cast(new PropertyTooltipTextProvider() {
+				@Override
+				protected String getText(Property property) throws Exception {
+					return m_tooltip;
+				}
+			});
+		}
+		return super.getAdapter(adapter);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ComplexPropertyEditor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final class ComplexPropertyEditor extends TextDisplayPropertyEditor
+	implements
+	IComplexPropertyEditor {
+		private PropertyEditorPresentation m_presentation;
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// IComplexPropertyEditor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public Property[] getProperties(Property property) throws Exception {
+			return ((ComplexProperty) property).getProperties();
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// TextDisplayPropertyEditor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		protected String getText(Property property) throws Exception {
+			return ((ComplexProperty) property).getText();
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// PropertyEditor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public boolean activate(PropertyTable propertyTable, Property property, Point location)
+				throws Exception {
+			return false;
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Presentation
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public PropertyEditorPresentation getPresentation() {
+			return m_presentation;
+		}
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/EmptyProperty.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/EmptyProperty.java
index 59983fbba..dd81e2243 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/EmptyProperty.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/EmptyProperty.java
@@ -20,35 +20,35 @@
  * @coverage core.model.property
  */
 public class EmptyProperty extends Property {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public EmptyProperty() {
-    super(BooleanPropertyEditor.INSTANCE);
-  }
-  public EmptyProperty(PropertyEditor editor) {
-    super(editor);
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Property
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getTitle() {
-    return null;
-  }
-  @Override
-  public boolean isModified() throws Exception {
-    return false;
-  }
-  @Override
-  public Object getValue() throws Exception {
-    return UNKNOWN_VALUE;
-  }
-  @Override
-  public void setValue(Object value) throws Exception {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public EmptyProperty() {
+		super(BooleanPropertyEditor.INSTANCE);
+	}
+	public EmptyProperty(PropertyEditor editor) {
+		super(editor);
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Property
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getTitle() {
+		return null;
+	}
+	@Override
+	public boolean isModified() throws Exception {
+		return false;
+	}
+	@Override
+	public Object getValue() throws Exception {
+		return UNKNOWN_VALUE;
+	}
+	@Override
+	public void setValue(Object value) throws Exception {
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/ITypedProperty.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/ITypedProperty.java
index 550643d07..20ba54728 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/ITypedProperty.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/ITypedProperty.java
@@ -17,8 +17,8 @@
  * @coverage core.model.property
  */
 public interface ITypedProperty {
-  /**
-   * @return the type of this property, may be <code>null</code> if type is unknown.
-   */
-  Class<?> getType();
+	/**
+	 * @return the type of this property, may be <code>null</code> if type is unknown.
+	 */
+	Class<?> getType();
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/ObjectProperty.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/ObjectProperty.java
index ba9e5562d..492ae93dd 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/ObjectProperty.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/ObjectProperty.java
@@ -20,22 +20,22 @@
  * @coverage core.model.property
  */
 public abstract class ObjectProperty extends Property {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ObjectProperty(PropertyEditor editor) {
-    super(editor);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ObjectProperty(PropertyEditor editor) {
+		super(editor);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link ObjectInfo} of this {@link Property}.
-   */
-  public abstract ObjectInfo getObjectInfo();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link ObjectInfo} of this {@link Property}.
+	 */
+	public abstract ObjectInfo getObjectInfo();
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/Property.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/Property.java
index 59ab81ef6..7e8d84c83 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/Property.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/Property.java
@@ -25,156 +25,156 @@
  * @coverage core.model.property
  */
 public abstract class Property implements IAdaptable {
-  /**
-   * The value that should be used when we don't know real value of {@link Property}. We can not use
-   * <code>null</code> because <code>null</code> can be valid value.
-   */
-  public static final Object UNKNOWN_VALUE = new Object() {
-    @Override
-    public String toString() {
-      return "UNKNOWN_VALUE";
-    }
-  };
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance fields
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected final PropertyEditor m_editor;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public Property(PropertyEditor editor) {
-    m_category = PropertyCategory.NORMAL;
-    m_editor = editor;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the title displayed to the user to identify the property.
-   */
-  public abstract String getTitle();
-
-  /**
-   * @return <code>true</code> if this property has a non-default value
-   */
-  public abstract boolean isModified() throws Exception;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Category
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private PropertyCategory m_category;
-
-  /**
-   * @return current {@link PropertyCategory}.
-   */
-  public final PropertyCategory getCategory() {
-    return m_category;
-  }
-
-  /**
-   * Sets the {@link PropertyCategory} for this {@link Property}.
-   */
-  public final void setCategory(PropertyCategory category) {
-    m_category = category;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Value
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the current value of this {@link Property} or {@link #UNKNOWN_VALUE}.
-   */
-  public abstract Object getValue() throws Exception;
-
-  /**
-   * Sets the new value of this {@link Property}.
-   *
-   * @param the
-   *          new value of {@link Property} or {@link #UNKNOWN_VALUE} if {@link Property}
-   *          modification should be removed.
-   */
-  public abstract void setValue(Object value) throws Exception;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link PropertyEditor}.
-   */
-  public final PropertyEditor getEditor() {
-    return m_editor;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Composite
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the composite {@link Property} for given array of {@link Property}'s or
-   *         <code>null</code> if no composite {@link Property} can be created.
-   */
-  public Property getComposite(Property[] properties) {
-    return null;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IAdaptable
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public <T> T getAdapter(Class<T> adapter) {
-    return null;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Arbitrary values map
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Map<Object, Object> m_arbitraryMap;
-
-  /**
-   * Associates the given value with the given key.
-   */
-  public final void putArbitraryValue(Object key, Object value) {
-    if (m_arbitraryMap == null) {
-      m_arbitraryMap = new HashMap<>();
-    }
-    m_arbitraryMap.put(key, value);
-  }
-
-  /**
-   * @return the value to which the given key is mapped, or <code>null</code>.
-   */
-  public final Object getArbitraryValue(Object key) {
-    if (m_arbitraryMap != null) {
-      return m_arbitraryMap.get(key);
-    }
-    return null;
-  }
-
-  /**
-   * Removes the mapping for a key.
-   */
-  public final void removeArbitraryValue(Object key) {
-    if (m_arbitraryMap != null) {
-      m_arbitraryMap.remove(key);
-    }
-  }
+	/**
+	 * The value that should be used when we don't know real value of {@link Property}. We can not use
+	 * <code>null</code> because <code>null</code> can be valid value.
+	 */
+	public static final Object UNKNOWN_VALUE = new Object() {
+		@Override
+		public String toString() {
+			return "UNKNOWN_VALUE";
+		}
+	};
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance fields
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected final PropertyEditor m_editor;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public Property(PropertyEditor editor) {
+		m_category = PropertyCategory.NORMAL;
+		m_editor = editor;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the title displayed to the user to identify the property.
+	 */
+	public abstract String getTitle();
+
+	/**
+	 * @return <code>true</code> if this property has a non-default value
+	 */
+	public abstract boolean isModified() throws Exception;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Category
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private PropertyCategory m_category;
+
+	/**
+	 * @return current {@link PropertyCategory}.
+	 */
+	public final PropertyCategory getCategory() {
+		return m_category;
+	}
+
+	/**
+	 * Sets the {@link PropertyCategory} for this {@link Property}.
+	 */
+	public final void setCategory(PropertyCategory category) {
+		m_category = category;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Value
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the current value of this {@link Property} or {@link #UNKNOWN_VALUE}.
+	 */
+	public abstract Object getValue() throws Exception;
+
+	/**
+	 * Sets the new value of this {@link Property}.
+	 *
+	 * @param the
+	 *          new value of {@link Property} or {@link #UNKNOWN_VALUE} if {@link Property}
+	 *          modification should be removed.
+	 */
+	public abstract void setValue(Object value) throws Exception;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link PropertyEditor}.
+	 */
+	public final PropertyEditor getEditor() {
+		return m_editor;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Composite
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the composite {@link Property} for given array of {@link Property}'s or
+	 *         <code>null</code> if no composite {@link Property} can be created.
+	 */
+	public Property getComposite(Property[] properties) {
+		return null;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IAdaptable
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public <T> T getAdapter(Class<T> adapter) {
+		return null;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Arbitrary values map
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Map<Object, Object> m_arbitraryMap;
+
+	/**
+	 * Associates the given value with the given key.
+	 */
+	public final void putArbitraryValue(Object key, Object value) {
+		if (m_arbitraryMap == null) {
+			m_arbitraryMap = new HashMap<>();
+		}
+		m_arbitraryMap.put(key, value);
+	}
+
+	/**
+	 * @return the value to which the given key is mapped, or <code>null</code>.
+	 */
+	public final Object getArbitraryValue(Object key) {
+		if (m_arbitraryMap != null) {
+			return m_arbitraryMap.get(key);
+		}
+		return null;
+	}
+
+	/**
+	 * Removes the mapping for a key.
+	 */
+	public final void removeArbitraryValue(Object key) {
+		if (m_arbitraryMap != null) {
+			m_arbitraryMap.remove(key);
+		}
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/PropertyManager.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/PropertyManager.java
index 3e4570b9e..2ec2b75e0 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/PropertyManager.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/PropertyManager.java
@@ -32,159 +32,159 @@
  * @coverage core.model.property
  */
 public final class PropertyManager {
-  private static final String P_CATEGORIES = "org.eclipse.wb.core.model.property.PropertyManager";
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link PropertyCategory} of given Property. Usually this is just
-   *         {@link Property#getCategory()}, but some properties may be configured by user to have
-   *         different category.
-   */
-  public static PropertyCategory getCategory(Property property) {
-    PropertyCategory category = getCategoryForced(property);
-    if (category != null) {
-      return category;
-    }
-    return property.getCategory();
-  }
-  /**
-   * @return the forced {@link PropertyCategory} of given Property, may be <code>null</code>.
-   */
-  public static PropertyCategory getCategoryForced(Property property) {
-    ToolkitDescription toolkit = getToolkit(property);
-    if (toolkit != null) {
-      String title = property.getTitle();
-      return getCategories(toolkit).get(title);
-    }
-    return null;
-  }
-  /**
-   * Sets the forced {@link PropertyCategory} of given Property. If <code>null</code> then default
-   * category should be used.
-   */
-  public static void setCategory(Property property, PropertyCategory category) {
-    ToolkitDescription toolkit = getToolkit(property);
-    if (toolkit != null) {
-      String title = property.getTitle();
-      Map<String, PropertyCategory> categories = getCategories(toolkit);
-      categories.put(title, category);
-      saveCategories(toolkit, categories);
-    }
-  }
-  /**
-   * Sets the forced {@link PropertyCategory} for all properties with given title.
-   */
-  public static void setCategory(ToolkitDescription toolkit, String title, PropertyCategory category) {
-    if (toolkit != null) {
-      Map<String, PropertyCategory> categories = getCategories(toolkit);
-      categories.put(title, category);
-      saveCategories(toolkit, categories);
-    }
-  }
-  /**
-   * @return the {@link ToolkitDescription} for component of given {@link Property}, may be
-   *         <code>null</code> if no corresponding component.
-   */
-  private static ToolkitDescription getToolkit(Property property) {
-    return GlobalState.getToolkit();
-    // TODO(scheglov)
-//    if (property instanceof JavaProperty) {
-//      JavaProperty javaProperty = (JavaProperty) property;
-//      return javaProperty.getJavaInfo().getDescription().getToolkit();
-//    }
-//    return null;
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Toolkit specific categories
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final Map<ToolkitDescription, Map<String, PropertyCategory>> m_toolkitCategories =
-      new HashMap<>();
-  public static void flushCache() {
-    m_toolkitCategories.clear();
-  }
-  private static Map<String, PropertyCategory> getCategories(ToolkitDescription toolkit) {
-    Map<String, PropertyCategory> categories = m_toolkitCategories.get(toolkit);
-    if (categories == null) {
-      categories = loadCategories(toolkit);
-      m_toolkitCategories.put(toolkit, categories);
-    }
-    return categories;
-  }
-  private static Map<String, PropertyCategory> loadCategories(final ToolkitDescription toolkit) {
-    return ExecutionUtils.runObjectIgnore(() -> loadCategories0(toolkit), Maps.<String, PropertyCategory>newTreeMap());
-  }
-  private static void saveCategories(final ToolkitDescription toolkit,
-      final Map<String, PropertyCategory> categories) {
-    ExecutionUtils.runLog(() -> saveCategories0(toolkit, categories));
-  }
-  @SuppressWarnings("unchecked")
-  private static Map<String, PropertyCategory> loadCategories0(ToolkitDescription toolkit)
-      throws Exception {
-    String encoded = toolkit.getPreferences().getString(P_CATEGORIES);
-    byte[] bytes = Base64Utils.decodeToBytes(encoded);
-    ObjectInputStream stream = new ObjectInputStream(new ByteArrayInputStream(bytes));
-    Map<String, Integer> categoriesIndex = (Map<String, Integer>) stream.readObject();
-    return toCategoriesObject(categoriesIndex);
-  }
-  private static void saveCategories0(ToolkitDescription toolkit,
-      Map<String, PropertyCategory> categories) throws Exception {
-    byte[] bytes;
-    {
-      Map<String, Integer> categoriesIndex = toCategoriesIndex(categories);
-      ByteArrayOutputStream baos = new ByteArrayOutputStream();
-      ObjectOutputStream stream = new ObjectOutputStream(baos);
-      stream.writeObject(categoriesIndex);
-      stream.close();
-      bytes = baos.toByteArray();
-    }
-    // encode into preferences
-    String encoded = Base64Utils.encode(bytes);
-    toolkit.getPreferences().setValue(P_CATEGORIES, encoded);
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Conversion for PropertyCategory
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static Map<String, Integer> toCategoriesIndex(Map<String, PropertyCategory> source) {
-    Map<String, Integer> target = Maps.newTreeMap();
-    for (Map.Entry<String, PropertyCategory> entry : source.entrySet()) {
-      target.put(entry.getKey(), getCategoryIndex(entry.getValue()));
-    }
-    return target;
-  }
-  private static Map<String, PropertyCategory> toCategoriesObject(Map<String, Integer> source) {
-    Map<String, PropertyCategory> target = Maps.newTreeMap();
-    for (Map.Entry<String, Integer> entry : source.entrySet()) {
-      target.put(entry.getKey(), getCategoryByIndex(entry.getValue()));
-    }
-    return target;
-  }
-  private static int getCategoryIndex(PropertyCategory category) {
-    if (category == PropertyCategory.PREFERRED) {
-      return 0;
-    }
-    if (category == PropertyCategory.NORMAL) {
-      return 1;
-    }
-    /*if (category == PropertyCategory.ADVANCED)*/{
-      return 2;
-    }
-  }
-  private static PropertyCategory getCategoryByIndex(int index) {
-    if (index == 0) {
-      return PropertyCategory.PREFERRED;
-    }
-    if (index == 1) {
-      return PropertyCategory.NORMAL;
-    }
-    /*if (index == 2)*/{
-      return PropertyCategory.ADVANCED;
-    }
-  }
+	private static final String P_CATEGORIES = "org.eclipse.wb.core.model.property.PropertyManager";
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link PropertyCategory} of given Property. Usually this is just
+	 *         {@link Property#getCategory()}, but some properties may be configured by user to have
+	 *         different category.
+	 */
+	public static PropertyCategory getCategory(Property property) {
+		PropertyCategory category = getCategoryForced(property);
+		if (category != null) {
+			return category;
+		}
+		return property.getCategory();
+	}
+	/**
+	 * @return the forced {@link PropertyCategory} of given Property, may be <code>null</code>.
+	 */
+	public static PropertyCategory getCategoryForced(Property property) {
+		ToolkitDescription toolkit = getToolkit(property);
+		if (toolkit != null) {
+			String title = property.getTitle();
+			return getCategories(toolkit).get(title);
+		}
+		return null;
+	}
+	/**
+	 * Sets the forced {@link PropertyCategory} of given Property. If <code>null</code> then default
+	 * category should be used.
+	 */
+	public static void setCategory(Property property, PropertyCategory category) {
+		ToolkitDescription toolkit = getToolkit(property);
+		if (toolkit != null) {
+			String title = property.getTitle();
+			Map<String, PropertyCategory> categories = getCategories(toolkit);
+			categories.put(title, category);
+			saveCategories(toolkit, categories);
+		}
+	}
+	/**
+	 * Sets the forced {@link PropertyCategory} for all properties with given title.
+	 */
+	public static void setCategory(ToolkitDescription toolkit, String title, PropertyCategory category) {
+		if (toolkit != null) {
+			Map<String, PropertyCategory> categories = getCategories(toolkit);
+			categories.put(title, category);
+			saveCategories(toolkit, categories);
+		}
+	}
+	/**
+	 * @return the {@link ToolkitDescription} for component of given {@link Property}, may be
+	 *         <code>null</code> if no corresponding component.
+	 */
+	private static ToolkitDescription getToolkit(Property property) {
+		return GlobalState.getToolkit();
+		// TODO(scheglov)
+		//    if (property instanceof JavaProperty) {
+		//      JavaProperty javaProperty = (JavaProperty) property;
+		//      return javaProperty.getJavaInfo().getDescription().getToolkit();
+		//    }
+		//    return null;
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Toolkit specific categories
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final Map<ToolkitDescription, Map<String, PropertyCategory>> m_toolkitCategories =
+			new HashMap<>();
+	public static void flushCache() {
+		m_toolkitCategories.clear();
+	}
+	private static Map<String, PropertyCategory> getCategories(ToolkitDescription toolkit) {
+		Map<String, PropertyCategory> categories = m_toolkitCategories.get(toolkit);
+		if (categories == null) {
+			categories = loadCategories(toolkit);
+			m_toolkitCategories.put(toolkit, categories);
+		}
+		return categories;
+	}
+	private static Map<String, PropertyCategory> loadCategories(final ToolkitDescription toolkit) {
+		return ExecutionUtils.runObjectIgnore(() -> loadCategories0(toolkit), Maps.<String, PropertyCategory>newTreeMap());
+	}
+	private static void saveCategories(final ToolkitDescription toolkit,
+			final Map<String, PropertyCategory> categories) {
+		ExecutionUtils.runLog(() -> saveCategories0(toolkit, categories));
+	}
+	@SuppressWarnings("unchecked")
+	private static Map<String, PropertyCategory> loadCategories0(ToolkitDescription toolkit)
+			throws Exception {
+		String encoded = toolkit.getPreferences().getString(P_CATEGORIES);
+		byte[] bytes = Base64Utils.decodeToBytes(encoded);
+		ObjectInputStream stream = new ObjectInputStream(new ByteArrayInputStream(bytes));
+		Map<String, Integer> categoriesIndex = (Map<String, Integer>) stream.readObject();
+		return toCategoriesObject(categoriesIndex);
+	}
+	private static void saveCategories0(ToolkitDescription toolkit,
+			Map<String, PropertyCategory> categories) throws Exception {
+		byte[] bytes;
+		{
+			Map<String, Integer> categoriesIndex = toCategoriesIndex(categories);
+			ByteArrayOutputStream baos = new ByteArrayOutputStream();
+			ObjectOutputStream stream = new ObjectOutputStream(baos);
+			stream.writeObject(categoriesIndex);
+			stream.close();
+			bytes = baos.toByteArray();
+		}
+		// encode into preferences
+		String encoded = Base64Utils.encode(bytes);
+		toolkit.getPreferences().setValue(P_CATEGORIES, encoded);
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Conversion for PropertyCategory
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static Map<String, Integer> toCategoriesIndex(Map<String, PropertyCategory> source) {
+		Map<String, Integer> target = Maps.newTreeMap();
+		for (Map.Entry<String, PropertyCategory> entry : source.entrySet()) {
+			target.put(entry.getKey(), getCategoryIndex(entry.getValue()));
+		}
+		return target;
+	}
+	private static Map<String, PropertyCategory> toCategoriesObject(Map<String, Integer> source) {
+		Map<String, PropertyCategory> target = Maps.newTreeMap();
+		for (Map.Entry<String, Integer> entry : source.entrySet()) {
+			target.put(entry.getKey(), getCategoryByIndex(entry.getValue()));
+		}
+		return target;
+	}
+	private static int getCategoryIndex(PropertyCategory category) {
+		if (category == PropertyCategory.PREFERRED) {
+			return 0;
+		}
+		if (category == PropertyCategory.NORMAL) {
+			return 1;
+		}
+		/*if (category == PropertyCategory.ADVANCED)*/{
+			return 2;
+		}
+	}
+	private static PropertyCategory getCategoryByIndex(int index) {
+		if (index == 0) {
+			return PropertyCategory.PREFERRED;
+		}
+		if (index == 1) {
+			return PropertyCategory.NORMAL;
+		}
+		/*if (index == 2)*/{
+			return PropertyCategory.ADVANCED;
+		}
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/category/PropertyCategory.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/category/PropertyCategory.java
index 4eac43b82..9c35534f1 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/category/PropertyCategory.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/category/PropertyCategory.java
@@ -22,198 +22,198 @@
  * @coverage core.model.property
  */
 public final class PropertyCategory {
-  /**
-   * "Normal" category, used for properties that should be displayed without any effect.
-   */
-  public static final PropertyCategory NORMAL = new PropertyCategory(0, "NORMAL");
-  /**
-   * "Preferred" category, for properties that are most useful for component.
-   */
-  public static final PropertyCategory PREFERRED = new PropertyCategory(-1, "PREFERRED");
-  /**
-   * "Advanced" category, for properties that are rarely used, visible if modified, even if not
-   * enabled.
-   */
-  public static final PropertyCategory ADVANCED = new PropertyCategory(1, "ADVANCED");
-  /**
-   * "Advanced" category, for properties that are rarely used, visible only if enabled.
-   */
-  public static final PropertyCategory ADVANCED_REALLY = new PropertyCategory(2, "ADVANCED_REALLY");
-  /**
-   * "Hidden" category, for properties that should not be displayed.
-   */
-  public static final PropertyCategory HIDDEN = new PropertyCategory(3, "HIDDEN");
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // System
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the system {@link PropertyCategory} with given priority.
-   */
-  public static final PropertyCategory system(int priority) {
-    return new PropertyCategory(SYSTEM_BASE + priority, "SYSTEM:" + priority);
-  }
-
-  /**
-   * @return the system {@link PropertyCategory} with priority
-   *         <code>system.getPriority() + additional</code>.
-   */
-  public static final PropertyCategory system(PropertyCategory system, int additional) {
-    Assert.isTrue(system.isSystem());
-    return system(system.getPriority() - SYSTEM_BASE + additional);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parsing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Parses {@link PropertyCategory} from strings. Supported strings are:
-   *
-   * <ul>
-   * <li><b>normal</b></li>
-   * <li><b>preferred</b></li>
-   * <li><b>advanced</b></li>
-   * <li><b>advanced-really</b></li>
-   * <li><b>hidden</b></li>
-   * <li><b>system(number)</b></li>
-   * </ul>
-   *
-   * @param defaultCategory
-   *          the {@link PropertyCategory} to use if given string can not be parsed, or
-   *          <code>null</code> if exception should be thrown.
-   *
-   * @return the parsed {@link PropertyCategory}.
-   */
-  public static PropertyCategory get(String text, PropertyCategory defaultCategory) {
-    // simple
-    if (StringUtils.equals(text, "normal")) {
-      return NORMAL;
-    }
-    if (StringUtils.equals(text, "preferred")) {
-      return PREFERRED;
-    }
-    if (StringUtils.equals(text, "advanced")) {
-      return ADVANCED;
-    }
-    if (StringUtils.equals(text, "advanced-really")) {
-      return ADVANCED_REALLY;
-    }
-    if (StringUtils.equals(text, "hidden")) {
-      return HIDDEN;
-    }
-    // system
-    if (StringUtils.startsWith(text, "system(")) {
-      String systemText = text;
-      systemText = StringUtils.removeStart(systemText, "system(");
-      systemText = StringUtils.removeEnd(systemText, ")");
-      try {
-        int priority = Integer.parseInt(systemText);
-        return system(priority);
-      } catch (NumberFormatException e) {
-      }
-    }
-    // can not parse
-    if (defaultCategory != null) {
-      return defaultCategory;
-    }
-    throw new IllegalArgumentException("Unknown category " + text);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance fields
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final int SYSTEM_BASE = 1000;
-  private final int m_priority;
-  private final String m_string;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private PropertyCategory(int priority, String string) {
-    m_priority = priority;
-    m_string = string;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    return m_string;
-  }
-
-  @Override
-  public boolean equals(Object obj) {
-    if (obj == this) {
-      return true;
-    }
-    if (obj instanceof PropertyCategory) {
-      PropertyCategory category = (PropertyCategory) obj;
-      return m_priority == category.m_priority;
-    }
-    // unknown class
-    return false;
-  }
-
-  @Override
-  public int hashCode() {
-    return m_priority;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if this property is preferred.
-   */
-  public boolean isPreferred() {
-    return this == PREFERRED;
-  }
-
-  /**
-   * @return <code>true</code> if this property is advanced.
-   */
-  public boolean isAdvanced() {
-    return this == ADVANCED;
-  }
-
-  /**
-   * @return <code>true</code> if this property is really advanced.
-   */
-  public boolean isAdvancedReally() {
-    return this == ADVANCED_REALLY;
-  }
-
-  /**
-   * @return <code>true</code> if this property is hidden.
-   */
-  public boolean isHidden() {
-    return this == HIDDEN;
-  }
-
-  /**
-   * @return <code>true</code> if this property is system.
-   */
-  public boolean isSystem() {
-    return m_priority >= 900;
-  }
-
-  /**
-   * @return the priority of this category.
-   */
-  public int getPriority() {
-    return m_priority;
-  }
+	/**
+	 * "Normal" category, used for properties that should be displayed without any effect.
+	 */
+	public static final PropertyCategory NORMAL = new PropertyCategory(0, "NORMAL");
+	/**
+	 * "Preferred" category, for properties that are most useful for component.
+	 */
+	public static final PropertyCategory PREFERRED = new PropertyCategory(-1, "PREFERRED");
+	/**
+	 * "Advanced" category, for properties that are rarely used, visible if modified, even if not
+	 * enabled.
+	 */
+	public static final PropertyCategory ADVANCED = new PropertyCategory(1, "ADVANCED");
+	/**
+	 * "Advanced" category, for properties that are rarely used, visible only if enabled.
+	 */
+	public static final PropertyCategory ADVANCED_REALLY = new PropertyCategory(2, "ADVANCED_REALLY");
+	/**
+	 * "Hidden" category, for properties that should not be displayed.
+	 */
+	public static final PropertyCategory HIDDEN = new PropertyCategory(3, "HIDDEN");
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// System
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the system {@link PropertyCategory} with given priority.
+	 */
+	public static final PropertyCategory system(int priority) {
+		return new PropertyCategory(SYSTEM_BASE + priority, "SYSTEM:" + priority);
+	}
+
+	/**
+	 * @return the system {@link PropertyCategory} with priority
+	 *         <code>system.getPriority() + additional</code>.
+	 */
+	public static final PropertyCategory system(PropertyCategory system, int additional) {
+		Assert.isTrue(system.isSystem());
+		return system(system.getPriority() - SYSTEM_BASE + additional);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parsing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Parses {@link PropertyCategory} from strings. Supported strings are:
+	 *
+	 * <ul>
+	 * <li><b>normal</b></li>
+	 * <li><b>preferred</b></li>
+	 * <li><b>advanced</b></li>
+	 * <li><b>advanced-really</b></li>
+	 * <li><b>hidden</b></li>
+	 * <li><b>system(number)</b></li>
+	 * </ul>
+	 *
+	 * @param defaultCategory
+	 *          the {@link PropertyCategory} to use if given string can not be parsed, or
+	 *          <code>null</code> if exception should be thrown.
+	 *
+	 * @return the parsed {@link PropertyCategory}.
+	 */
+	public static PropertyCategory get(String text, PropertyCategory defaultCategory) {
+		// simple
+		if (StringUtils.equals(text, "normal")) {
+			return NORMAL;
+		}
+		if (StringUtils.equals(text, "preferred")) {
+			return PREFERRED;
+		}
+		if (StringUtils.equals(text, "advanced")) {
+			return ADVANCED;
+		}
+		if (StringUtils.equals(text, "advanced-really")) {
+			return ADVANCED_REALLY;
+		}
+		if (StringUtils.equals(text, "hidden")) {
+			return HIDDEN;
+		}
+		// system
+		if (StringUtils.startsWith(text, "system(")) {
+			String systemText = text;
+			systemText = StringUtils.removeStart(systemText, "system(");
+			systemText = StringUtils.removeEnd(systemText, ")");
+			try {
+				int priority = Integer.parseInt(systemText);
+				return system(priority);
+			} catch (NumberFormatException e) {
+			}
+		}
+		// can not parse
+		if (defaultCategory != null) {
+			return defaultCategory;
+		}
+		throw new IllegalArgumentException("Unknown category " + text);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance fields
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final int SYSTEM_BASE = 1000;
+	private final int m_priority;
+	private final String m_string;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private PropertyCategory(int priority, String string) {
+		m_priority = priority;
+		m_string = string;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		return m_string;
+	}
+
+	@Override
+	public boolean equals(Object obj) {
+		if (obj == this) {
+			return true;
+		}
+		if (obj instanceof PropertyCategory) {
+			PropertyCategory category = (PropertyCategory) obj;
+			return m_priority == category.m_priority;
+		}
+		// unknown class
+		return false;
+	}
+
+	@Override
+	public int hashCode() {
+		return m_priority;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if this property is preferred.
+	 */
+	public boolean isPreferred() {
+		return this == PREFERRED;
+	}
+
+	/**
+	 * @return <code>true</code> if this property is advanced.
+	 */
+	public boolean isAdvanced() {
+		return this == ADVANCED;
+	}
+
+	/**
+	 * @return <code>true</code> if this property is really advanced.
+	 */
+	public boolean isAdvancedReally() {
+		return this == ADVANCED_REALLY;
+	}
+
+	/**
+	 * @return <code>true</code> if this property is hidden.
+	 */
+	public boolean isHidden() {
+		return this == HIDDEN;
+	}
+
+	/**
+	 * @return <code>true</code> if this property is system.
+	 */
+	public boolean isSystem() {
+		return m_priority >= 900;
+	}
+
+	/**
+	 * @return the priority of this category.
+	 */
+	public int getPriority() {
+		return m_priority;
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/category/PropertyCategoryProvider.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/category/PropertyCategoryProvider.java
index b37190ae5..fa8c2c14f 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/category/PropertyCategoryProvider.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/category/PropertyCategoryProvider.java
@@ -19,8 +19,8 @@
  * @coverage core.model.property
  */
 public interface PropertyCategoryProvider {
-  /**
-   * @return the {@link PropertyCategory} of given Property, not <code>null</code>.
-   */
-  PropertyCategory getCategory(Property property);
+	/**
+	 * @return the {@link PropertyCategory} of given Property, not <code>null</code>.
+	 */
+	PropertyCategory getCategory(Property property);
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/category/PropertyCategoryProviders.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/category/PropertyCategoryProviders.java
index c182fbcb0..413526317 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/category/PropertyCategoryProviders.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/category/PropertyCategoryProviders.java
@@ -20,69 +20,69 @@
  * @coverage core.model.property
  */
 public final class PropertyCategoryProviders {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Simple providers
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final PropertyCategoryProvider FROM_PROPERTY = new PropertyCategoryProvider() {
-    @Override
-    public PropertyCategory getCategory(Property property) {
-      return property.getCategory();
-    }
-  };
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Simple providers
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final PropertyCategoryProvider FROM_PROPERTY = new PropertyCategoryProvider() {
+		@Override
+		public PropertyCategory getCategory(Property property) {
+			return property.getCategory();
+		}
+	};
 
-  /**
-   * Returns result of {@link Property#getCategory()}, never <code>null</code>.
-   */
-  public static PropertyCategoryProvider fromProperty() {
-    return FROM_PROPERTY;
-  }
+	/**
+	 * Returns result of {@link Property#getCategory()}, never <code>null</code>.
+	 */
+	public static PropertyCategoryProvider fromProperty() {
+		return FROM_PROPERTY;
+	}
 
-  private static final PropertyCategoryProvider FORCED_BY_USER = new PropertyCategoryProvider() {
-    @Override
-    public PropertyCategory getCategory(Property property) {
-      return PropertyManager.getCategoryForced(property);
-    }
-  };
+	private static final PropertyCategoryProvider FORCED_BY_USER = new PropertyCategoryProvider() {
+		@Override
+		public PropertyCategory getCategory(Property property) {
+			return PropertyManager.getCategoryForced(property);
+		}
+	};
 
-  /**
-   * Returns category forced by user, may be <code>null</code>.
-   */
-  public static PropertyCategoryProvider forcedByUser() {
-    return FORCED_BY_USER;
-  }
+	/**
+	 * Returns category forced by user, may be <code>null</code>.
+	 */
+	public static PropertyCategoryProvider forcedByUser() {
+		return FORCED_BY_USER;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Compound
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Returns first not <code>null</code> category returned by provider.
-   */
-  public static PropertyCategoryProvider combine(final PropertyCategoryProvider... providers) {
-    return new PropertyCategoryProvider() {
-      @Override
-      public PropertyCategory getCategory(Property property) {
-        for (PropertyCategoryProvider provider : providers) {
-          PropertyCategory category = provider.getCategory(property);
-          if (category != null) {
-            return category;
-          }
-        }
-        throw new IllegalStateException("Can not provide category for " + property.getTitle());
-      }
-    };
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Compound
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Returns first not <code>null</code> category returned by provider.
+	 */
+	public static PropertyCategoryProvider combine(final PropertyCategoryProvider... providers) {
+		return new PropertyCategoryProvider() {
+			@Override
+			public PropertyCategory getCategory(Property property) {
+				for (PropertyCategoryProvider provider : providers) {
+					PropertyCategory category = provider.getCategory(property);
+					if (category != null) {
+						return category;
+					}
+				}
+				throw new IllegalStateException("Can not provide category for " + property.getTitle());
+			}
+		};
+	}
 
-  private static final PropertyCategoryProvider DEF = combine(forcedByUser(), fromProperty());
+	private static final PropertyCategoryProvider DEF = combine(forcedByUser(), fromProperty());
 
-  /**
-   * Returns the default combination of {@link PropertyCategoryProvider}s - first
-   * {@link #forcedByUser()}, then {@link #fromProperty()}.
-   */
-  public static PropertyCategoryProvider def() {
-    return DEF;
-  }
+	/**
+	 * Returns the default combination of {@link PropertyCategoryProvider}s - first
+	 * {@link #forcedByUser()}, then {@link #fromProperty()}.
+	 */
+	public static PropertyCategoryProvider def() {
+		return DEF;
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/AbstractComboBoxPropertyEditor.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/AbstractComboBoxPropertyEditor.java
index 6faab790f..6cf2141cc 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/AbstractComboBoxPropertyEditor.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/AbstractComboBoxPropertyEditor.java
@@ -37,121 +37,121 @@
  * @coverage core.model.property.editor
  */
 public abstract class AbstractComboBoxPropertyEditor extends TextDisplayPropertyEditor {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private CComboBox m_combo;
-  private String m_dropDelayedText;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private CComboBox m_combo;
+	private String m_dropDelayedText;
 
-  @Override
-  public final boolean activate(final PropertyTable propertyTable,
-      final Property property,
-      Point location) throws Exception {
-    m_combo = new CComboBox(propertyTable, SWT.NONE);
-    // initialize
-    addItems(property, m_combo);
-    selectItem(property, m_combo);
-    // install listeners
-    m_combo.addKeyListener(new KeyAdapter() {
-      @Override
-      public void keyPressed(KeyEvent e) {
-        handleKeyPressed(propertyTable, property, e);
-      }
-    });
-    m_combo.addFocusListener(new FocusAdapter() {
-      @Override
-      public void focusLost(FocusEvent e) {
-        propertyTable.deactivateEditor(true);
-      }
-    });
-    m_combo.addSelectionListener(new SelectionAdapter() {
-      @Override
-      public void widgetSelected(SelectionEvent e) {
-        propertyTable.deactivateEditor(true);
-      }
-    });
-    m_combo.setFocus();
-    // schedule showing drop-down, because we don't have bounds yet
-    ExecutionUtils.runAsync(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        m_combo.comboDropDown(true);
-        if (m_dropDelayedText != null) {
-          m_combo.setEditText(m_dropDelayedText);
-          m_combo.setEditSelection(m_dropDelayedText.length(), m_dropDelayedText.length());
-          m_dropDelayedText = null;
-        }
-      }
-    });
-    // keep editor active
-    return true;
-  }
+	@Override
+	public final boolean activate(final PropertyTable propertyTable,
+			final Property property,
+			Point location) throws Exception {
+		m_combo = new CComboBox(propertyTable, SWT.NONE);
+		// initialize
+		addItems(property, m_combo);
+		selectItem(property, m_combo);
+		// install listeners
+		m_combo.addKeyListener(new KeyAdapter() {
+			@Override
+			public void keyPressed(KeyEvent e) {
+				handleKeyPressed(propertyTable, property, e);
+			}
+		});
+		m_combo.addFocusListener(new FocusAdapter() {
+			@Override
+			public void focusLost(FocusEvent e) {
+				propertyTable.deactivateEditor(true);
+			}
+		});
+		m_combo.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				propertyTable.deactivateEditor(true);
+			}
+		});
+		m_combo.setFocus();
+		// schedule showing drop-down, because we don't have bounds yet
+		ExecutionUtils.runAsync(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				m_combo.comboDropDown(true);
+				if (m_dropDelayedText != null) {
+					m_combo.setEditText(m_dropDelayedText);
+					m_combo.setEditSelection(m_dropDelayedText.length(), m_dropDelayedText.length());
+					m_dropDelayedText = null;
+				}
+			}
+		});
+		// keep editor active
+		return true;
+	}
 
-  private void handleKeyPressed(PropertyTable propertyTable, Property property, KeyEvent e) {
-    if (e.keyCode == SWT.ESC) {
-      propertyTable.deactivateEditor(false);
-    } else if (e.keyCode == SWT.ARROW_UP || e.keyCode == SWT.ARROW_DOWN) {
-      e.doit = false;
-      propertyTable.deactivateEditor(true);
-      propertyTable.navigate(e);
-    }
-  }
+	private void handleKeyPressed(PropertyTable propertyTable, Property property, KeyEvent e) {
+		if (e.keyCode == SWT.ESC) {
+			propertyTable.deactivateEditor(false);
+		} else if (e.keyCode == SWT.ARROW_UP || e.keyCode == SWT.ARROW_DOWN) {
+			e.doit = false;
+			propertyTable.deactivateEditor(true);
+			propertyTable.navigate(e);
+		}
+	}
 
-  @Override
-  public final void deactivate(PropertyTable propertyTable, Property property, boolean save) {
-    if (save) {
-      toProperty(propertyTable, property);
-    }
-    if (m_combo != null) {
-      m_combo.dispose();
-      m_combo = null;
-    }
-  }
+	@Override
+	public final void deactivate(PropertyTable propertyTable, Property property, boolean save) {
+		if (save) {
+			toProperty(propertyTable, property);
+		}
+		if (m_combo != null) {
+			m_combo.dispose();
+			m_combo = null;
+		}
+	}
 
-  private void toProperty(PropertyTable propertyTable, Property property) {
-    try {
-      toPropertyEx(property, m_combo);
-    } catch (Throwable e) {
-      propertyTable.handleException(e);
-    }
-  }
+	private void toProperty(PropertyTable propertyTable, Property property) {
+		try {
+			toPropertyEx(property, m_combo);
+		} catch (Throwable e) {
+			propertyTable.handleException(e);
+		}
+	}
 
-  @Override
-  public void setBounds(Rectangle bounds) {
-    m_combo.setBounds(bounds);
-  }
+	@Override
+	public void setBounds(Rectangle bounds) {
+		m_combo.setBounds(bounds);
+	}
 
-  @Override
-  public void keyDown(PropertyTable propertyTable, Property property, KeyEvent event)
-      throws Exception {
-    boolean withAlt = (event.stateMask & SWT.ALT) != 0;
-    boolean withCtrl = (event.stateMask & SWT.CTRL) != 0;
-    if (event.character > 0x20 && !(withAlt || withCtrl)) {
-      propertyTable.activateEditor(property, null);
-      m_dropDelayedText = "" + event.character;
-    }
-  }
+	@Override
+	public void keyDown(PropertyTable propertyTable, Property property, KeyEvent event)
+			throws Exception {
+		boolean withAlt = (event.stateMask & SWT.ALT) != 0;
+		boolean withCtrl = (event.stateMask & SWT.CTRL) != 0;
+		if (event.character > 0x20 && !(withAlt || withCtrl)) {
+			propertyTable.activateEditor(property, null);
+			m_dropDelayedText = "" + event.character;
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Abstract methods
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds items to given {@link CComboBox}.
-   */
-  protected abstract void addItems(Property property, CComboBox combo) throws Exception;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Abstract methods
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds items to given {@link CComboBox}.
+	 */
+	protected abstract void addItems(Property property, CComboBox combo) throws Exception;
 
-  /**
-   * Selects current item in given {@link CCombo3}.
-   */
-  protected void selectItem(Property property, CComboBox combo) throws Exception {
-  }
+	/**
+	 * Selects current item in given {@link CCombo3}.
+	 */
+	protected void selectItem(Property property, CComboBox combo) throws Exception {
+	}
 
-  /**
-   * Transfers data from widget to {@link Property}.
-   */
-  protected abstract void toPropertyEx(Property property, CComboBox combo) throws Exception;
+	/**
+	 * Transfers data from widget to {@link Property}.
+	 */
+	protected abstract void toPropertyEx(Property property, CComboBox combo) throws Exception;
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/AbstractComboPropertyEditor.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/AbstractComboPropertyEditor.java
index abcf7329f..c72bef8ae 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/AbstractComboPropertyEditor.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/AbstractComboPropertyEditor.java
@@ -33,122 +33,122 @@
  * @coverage core.model.property.editor
  */
 public abstract class AbstractComboPropertyEditor extends TextDisplayPropertyEditor {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private CCombo3 m_combo;
-  private boolean m_doDropDown;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private CCombo3 m_combo;
+	private boolean m_doDropDown;
 
-  @Override
-  public boolean activate(final PropertyTable propertyTable, final Property property, Point location)
-      throws Exception {
-    // create combo
-    {
-      m_combo = new CCombo3(propertyTable, SWT.NONE);
-      m_doDropDown = true;
-      // add items
-      addItems(property, m_combo);
-      // select item
-      selectItem(property, m_combo);
-    }
-    // add listeners
-    m_combo.addFocusListener(new FocusAdapter() {
-      @Override
-      public void focusLost(FocusEvent e) {
-        propertyTable.deactivateEditor(true);
-      }
-    });
-    m_combo.addSelectionListener(new SelectionAdapter() {
-      @Override
-      public void widgetSelected(SelectionEvent e) {
-        int index = m_combo.getSelectionIndex();
-        toProperty(propertyTable, property, index);
-      }
-    });
-    m_combo.addListener(SWT.KeyDown, new Listener() {
-      @Override
-      public void handleEvent(Event event) {
-        switch (event.keyCode) {
-          case SWT.ESC :
-            propertyTable.deactivateEditor(false);
-            break;
-          case SWT.DEL :
-            try {
-              property.setValue(Property.UNKNOWN_VALUE);
-              event.doit = false;
-              selectItem(property, m_combo);
-            } catch (Throwable e) {
-              propertyTable.handleException(e);
-              propertyTable.deactivateEditor(false);
-            }
-            m_combo.doDropDown(false);
-            break;
-        }
-      }
-    });
-    m_combo.addMouseListener(new MouseAdapter() {
-      @Override
-      public void mouseDoubleClick(MouseEvent e) {
-        int index = (m_combo.getSelectionIndex() + 1) % m_combo.getItemCount();
-        toProperty(propertyTable, property, index);
-      }
-    });
-    // keep editor active
-    return true;
-  }
+	@Override
+	public boolean activate(final PropertyTable propertyTable, final Property property, Point location)
+			throws Exception {
+		// create combo
+		{
+			m_combo = new CCombo3(propertyTable, SWT.NONE);
+			m_doDropDown = true;
+			// add items
+			addItems(property, m_combo);
+			// select item
+			selectItem(property, m_combo);
+		}
+		// add listeners
+		m_combo.addFocusListener(new FocusAdapter() {
+			@Override
+			public void focusLost(FocusEvent e) {
+				propertyTable.deactivateEditor(true);
+			}
+		});
+		m_combo.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				int index = m_combo.getSelectionIndex();
+				toProperty(propertyTable, property, index);
+			}
+		});
+		m_combo.addListener(SWT.KeyDown, new Listener() {
+			@Override
+			public void handleEvent(Event event) {
+				switch (event.keyCode) {
+				case SWT.ESC :
+					propertyTable.deactivateEditor(false);
+					break;
+				case SWT.DEL :
+					try {
+						property.setValue(Property.UNKNOWN_VALUE);
+						event.doit = false;
+						selectItem(property, m_combo);
+					} catch (Throwable e) {
+						propertyTable.handleException(e);
+						propertyTable.deactivateEditor(false);
+					}
+					m_combo.doDropDown(false);
+					break;
+				}
+			}
+		});
+		m_combo.addMouseListener(new MouseAdapter() {
+			@Override
+			public void mouseDoubleClick(MouseEvent e) {
+				int index = (m_combo.getSelectionIndex() + 1) % m_combo.getItemCount();
+				toProperty(propertyTable, property, index);
+			}
+		});
+		// keep editor active
+		return true;
+	}
 
-  @Override
-  public final void setBounds(Rectangle bounds) {
-    m_combo.setBounds(bounds);
-    // editor created without bounds, so activate it after first setBounds()
-    if (m_doDropDown) {
-      m_doDropDown = false;
-      m_combo.setFocus();
-      m_combo.doDropDown(true);
-      m_combo.startDrag();
-    }
-  }
+	@Override
+	public final void setBounds(Rectangle bounds) {
+		m_combo.setBounds(bounds);
+		// editor created without bounds, so activate it after first setBounds()
+		if (m_doDropDown) {
+			m_doDropDown = false;
+			m_combo.setFocus();
+			m_combo.doDropDown(true);
+			m_combo.startDrag();
+		}
+	}
 
-  @Override
-  public final void deactivate(PropertyTable propertyTable, Property property, boolean save) {
-    if (m_combo != null) {
-      m_combo.dispose();
-      m_combo = null;
-    }
-  }
+	@Override
+	public final void deactivate(PropertyTable propertyTable, Property property, boolean save) {
+		if (m_combo != null) {
+			m_combo.dispose();
+			m_combo = null;
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Abstract methods
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds items to given {@link CCombo3}.
-   */
-  protected abstract void addItems(Property property, CCombo3 combo) throws Exception;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Abstract methods
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds items to given {@link CCombo3}.
+	 */
+	protected abstract void addItems(Property property, CCombo3 combo) throws Exception;
 
-  /**
-   * Selects current item in given {@link CCombo3}.
-   */
-  protected abstract void selectItem(Property property, CCombo3 combo) throws Exception;
+	/**
+	 * Selects current item in given {@link CCombo3}.
+	 */
+	protected abstract void selectItem(Property property, CCombo3 combo) throws Exception;
 
-  /**
-   * Transfers data from widget to {@link Property}.
-   */
-  protected abstract void toPropertyEx(Property property, CCombo3 combo, int index)
-      throws Exception;
+	/**
+	 * Transfers data from widget to {@link Property}.
+	 */
+	protected abstract void toPropertyEx(Property property, CCombo3 combo, int index)
+			throws Exception;
 
-  /**
-   * Transfers data from widget to {@link Property}.
-   */
-  private void toProperty(PropertyTable propertyTable, Property property, int index) {
-    try {
-      toPropertyEx(property, m_combo, index);
-    } catch (Throwable e) {
-      propertyTable.handleException(e);
-    }
-    propertyTable.deactivateEditor(false);
-  }
+	/**
+	 * Transfers data from widget to {@link Property}.
+	 */
+	private void toProperty(PropertyTable propertyTable, Property property, int index) {
+		try {
+			toPropertyEx(property, m_combo, index);
+		} catch (Throwable e) {
+			propertyTable.handleException(e);
+		}
+		propertyTable.deactivateEditor(false);
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/AbstractTextPropertyEditor.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/AbstractTextPropertyEditor.java
index bb3aa8cb9..c45a90a0a 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/AbstractTextPropertyEditor.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/AbstractTextPropertyEditor.java
@@ -30,191 +30,191 @@
  * @coverage core.model.property.editor
  */
 public abstract class AbstractTextPropertyEditor extends TextDisplayPropertyEditor {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Text m_textControl;
-  private boolean m_ignoreFocusLost;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Text m_textControl;
+	private boolean m_ignoreFocusLost;
 
-  @Override
-  public boolean activate(final PropertyTable propertyTable,
-      final Property property,
-      Point location) throws Exception {
-    // create Text
-    {
-      m_textControl = new Text(propertyTable, SWT.NONE);
-      new TextControlActionsManager(m_textControl);
-      m_textControl.setEditable(isEditable());
-      m_textControl.setFocus();
-    }
-    // add listeners
-    m_textControl.addKeyListener(new KeyAdapter() {
-      @Override
-      public void keyPressed(KeyEvent e) {
-        try {
-          handleKeyPressed(propertyTable, property, e);
-        } catch (Throwable ex) {
-          propertyTable.deactivateEditor(false);
-          propertyTable.handleException(ex);
-        }
-      }
-    });
-    m_textControl.addListener(SWT.FocusOut, event -> {
-      if (!m_ignoreFocusLost) {
-        propertyTable.deactivateEditor(true);
-      }
-    });
-    // set data
-    toWidget(property);
-    // keep us active
-    return true;
-  }
+	@Override
+	public boolean activate(final PropertyTable propertyTable,
+			final Property property,
+			Point location) throws Exception {
+		// create Text
+		{
+			m_textControl = new Text(propertyTable, SWT.NONE);
+			new TextControlActionsManager(m_textControl);
+			m_textControl.setEditable(isEditable());
+			m_textControl.setFocus();
+		}
+		// add listeners
+		m_textControl.addKeyListener(new KeyAdapter() {
+			@Override
+			public void keyPressed(KeyEvent e) {
+				try {
+					handleKeyPressed(propertyTable, property, e);
+				} catch (Throwable ex) {
+					propertyTable.deactivateEditor(false);
+					propertyTable.handleException(ex);
+				}
+			}
+		});
+		m_textControl.addListener(SWT.FocusOut, event -> {
+			if (!m_ignoreFocusLost) {
+				propertyTable.deactivateEditor(true);
+			}
+		});
+		// set data
+		toWidget(property);
+		// keep us active
+		return true;
+	}
 
-  @Override
-  public final void setBounds(Rectangle bounds) {
-    m_textControl.setBounds(bounds);
-  }
+	@Override
+	public final void setBounds(Rectangle bounds) {
+		m_textControl.setBounds(bounds);
+	}
 
-  @Override
-  public final void deactivate(PropertyTable propertyTable, Property property, boolean save) {
-    if (save) {
-      try {
-        if (m_textControl != null) {
-          toProperty(property);
-        }
-      } catch (Throwable e) {
-        propertyTable.deactivateEditor(false);
-        propertyTable.handleException(e);
-      }
-    }
-    // dispose Text widget
-    if (m_textControl != null) {
-      m_textControl.dispose();
-      m_textControl = null;
-    }
-  }
+	@Override
+	public final void deactivate(PropertyTable propertyTable, Property property, boolean save) {
+		if (save) {
+			try {
+				if (m_textControl != null) {
+					toProperty(property);
+				}
+			} catch (Throwable e) {
+				propertyTable.deactivateEditor(false);
+				propertyTable.handleException(e);
+			}
+		}
+		// dispose Text widget
+		if (m_textControl != null) {
+			m_textControl.dispose();
+			m_textControl = null;
+		}
+	}
 
-  @Override
-  public void keyDown(PropertyTable propertyTable, Property property, KeyEvent event)
-      throws Exception {
-    boolean withAlt = (event.stateMask & SWT.ALT) != 0;
-    boolean withCtrl = (event.stateMask & SWT.CTRL) != 0;
-    if (event.character != 0 && !(withAlt || withCtrl)) {
-      propertyTable.activateEditor(property, null);
-      postKeyEvent(SWT.KeyDown, event);
-      postKeyEvent(SWT.KeyUp, event);
-    }
-  }
+	@Override
+	public void keyDown(PropertyTable propertyTable, Property property, KeyEvent event)
+			throws Exception {
+		boolean withAlt = (event.stateMask & SWT.ALT) != 0;
+		boolean withCtrl = (event.stateMask & SWT.CTRL) != 0;
+		if (event.character != 0 && !(withAlt || withCtrl)) {
+			propertyTable.activateEditor(property, null);
+			postKeyEvent(SWT.KeyDown, event);
+			postKeyEvent(SWT.KeyUp, event);
+		}
+	}
 
-  /**
-   * Posts low-level {@link SWT.KeyDown} or {@link SWT.KeyUp} event.
-   */
-  private static void postKeyEvent(int type, KeyEvent event) {
-    Event lowEvent = new Event();
-    lowEvent.type = type;
-    lowEvent.keyCode = event.keyCode;
-    lowEvent.character = event.character;
-    // post event
-    Display.getCurrent().post(lowEvent);
-  }
+	/**
+	 * Posts low-level {@link SWT.KeyDown} or {@link SWT.KeyUp} event.
+	 */
+	private static void postKeyEvent(int type, KeyEvent event) {
+		Event lowEvent = new Event();
+		lowEvent.type = type;
+		lowEvent.keyCode = event.keyCode;
+		lowEvent.character = event.character;
+		// post event
+		Display.getCurrent().post(lowEvent);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Events
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Handles {@link KeyListener#keyPressed(KeyEvent)}.
-   */
-  private void handleKeyPressed(PropertyTable propertyTable, Property property, KeyEvent e)
-      throws Exception {
-    if (e.keyCode == SWT.CR) {
-      toProperty(property);
-    } else if (e.keyCode == SWT.ESC) {
-      propertyTable.deactivateEditor(false);
-    } else if (e.keyCode == SWT.ARROW_UP || e.keyCode == SWT.ARROW_DOWN) {
-      e.doit = false;
-      boolean success = toProperty(property);
-      // don't allow navigation if current text can not be transferred to property
-      if (!success) {
-        return;
-      }
-      // OK, deactivate and navigate
-      propertyTable.deactivateEditor(true);
-      propertyTable.navigate(e);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Events
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Handles {@link KeyListener#keyPressed(KeyEvent)}.
+	 */
+	private void handleKeyPressed(PropertyTable propertyTable, Property property, KeyEvent e)
+			throws Exception {
+		if (e.keyCode == SWT.CR) {
+			toProperty(property);
+		} else if (e.keyCode == SWT.ESC) {
+			propertyTable.deactivateEditor(false);
+		} else if (e.keyCode == SWT.ARROW_UP || e.keyCode == SWT.ARROW_DOWN) {
+			e.doit = false;
+			boolean success = toProperty(property);
+			// don't allow navigation if current text can not be transferred to property
+			if (!success) {
+				return;
+			}
+			// OK, deactivate and navigate
+			propertyTable.deactivateEditor(true);
+			propertyTable.navigate(e);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Implementation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private String m_currentText;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Implementation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private String m_currentText;
 
-  /**
-   * Transfers data from {@link Property} to widget.
-   */
-  private void toWidget(Property property) throws Exception {
-    // prepare text
-    String text = getEditorText(property);
-    if (text == null) {
-      text = "";
-    }
-    // set text
-    m_currentText = text;
-    m_textControl.setText(text);
-    m_textControl.selectAll();
-  }
+	/**
+	 * Transfers data from {@link Property} to widget.
+	 */
+	private void toWidget(Property property) throws Exception {
+		// prepare text
+		String text = getEditorText(property);
+		if (text == null) {
+			text = "";
+		}
+		// set text
+		m_currentText = text;
+		m_textControl.setText(text);
+		m_textControl.selectAll();
+	}
 
-  /**
-   * Transfers data from widget to {@link Property}.
-   *
-   * @return <code>true</code> if transfer was successful.
-   */
-  private boolean toProperty(Property property) throws Exception {
-    String text = m_textControl.getText();
-    // change property only if text was changed
-    if (!m_currentText.equals(text)) {
-      m_ignoreFocusLost = true;
-      try {
-        boolean success = setEditorText(property, text);
-        if (!success) {
-          return false;
-        }
-      } finally {
-        m_ignoreFocusLost = false;
-      }
-      // if value was successfully changed, update current text
-      m_currentText = text;
-    }
-    // OK, success
-    return true;
-  }
+	/**
+	 * Transfers data from widget to {@link Property}.
+	 *
+	 * @return <code>true</code> if transfer was successful.
+	 */
+	private boolean toProperty(Property property) throws Exception {
+		String text = m_textControl.getText();
+		// change property only if text was changed
+		if (!m_currentText.equals(text)) {
+			m_ignoreFocusLost = true;
+			try {
+				boolean success = setEditorText(property, text);
+				if (!success) {
+					return false;
+				}
+			} finally {
+				m_ignoreFocusLost = false;
+			}
+			// if value was successfully changed, update current text
+			m_currentText = text;
+		}
+		// OK, success
+		return true;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if this editor can modify text.
-   */
-  protected boolean isEditable() {
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if this editor can modify text.
+	 */
+	protected boolean isEditable() {
+		return true;
+	}
 
-  /**
-   * @return the text to display in {@link Text} control.
-   */
-  protected abstract String getEditorText(Property property) throws Exception;
+	/**
+	 * @return the text to display in {@link Text} control.
+	 */
+	protected abstract String getEditorText(Property property) throws Exception;
 
-  /**
-   * Modifies {@link Property} using given text.
-   *
-   * @return <code>true</code> if {@link Property} was successfully modified.
-   */
-  protected abstract boolean setEditorText(Property property, String text) throws Exception;
+	/**
+	 * Modifies {@link Property} using given text.
+	 *
+	 * @return <code>true</code> if {@link Property} was successfully modified.
+	 */
+	protected abstract boolean setEditorText(Property property, String text) throws Exception;
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/BooleanObjectPropertyEditor.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/BooleanObjectPropertyEditor.java
index 3c0eec9a3..770ab1c72 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/BooleanObjectPropertyEditor.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/BooleanObjectPropertyEditor.java
@@ -26,93 +26,93 @@
  * @coverage core.model.property.editor
  */
 public final class BooleanObjectPropertyEditor extends PropertyEditor {
-  private static final Image m_nullImage = DesignerPlugin.getImage("properties/BooleanNull.png");
-  private static final Image m_trueImage = DesignerPlugin.getImage("properties/true.png");
-  private static final Image m_falseImage = DesignerPlugin.getImage("properties/false.png");
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final PropertyEditor INSTANCE = new BooleanObjectPropertyEditor();
+	private static final Image m_nullImage = DesignerPlugin.getImage("properties/BooleanNull.png");
+	private static final Image m_trueImage = DesignerPlugin.getImage("properties/true.png");
+	private static final Image m_falseImage = DesignerPlugin.getImage("properties/false.png");
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final PropertyEditor INSTANCE = new BooleanObjectPropertyEditor();
 
-  private BooleanObjectPropertyEditor() {
-  }
+	private BooleanObjectPropertyEditor() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void paint(Property property, GC gc, int x, int y, int width, int height) throws Exception {
-    Object value = property.getValue();
-    if (value instanceof Boolean) {
-      boolean booleanValue = ((Boolean) value).booleanValue();
-      Image image = booleanValue ? m_trueImage : m_falseImage;
-      String text = Boolean.toString(booleanValue);
-      paint(gc, x, y, width, height, text, image);
-    }
-    if (value == null) {
-      Image image = m_nullImage;
-      String text = "null";
-      paint(gc, x, y, width, height, text, image);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void paint(Property property, GC gc, int x, int y, int width, int height) throws Exception {
+		Object value = property.getValue();
+		if (value instanceof Boolean) {
+			boolean booleanValue = ((Boolean) value).booleanValue();
+			Image image = booleanValue ? m_trueImage : m_falseImage;
+			String text = Boolean.toString(booleanValue);
+			paint(gc, x, y, width, height, text, image);
+		}
+		if (value == null) {
+			Image image = m_nullImage;
+			String text = "null";
+			paint(gc, x, y, width, height, text, image);
+		}
+	}
 
-  private void paint(GC gc, int x, int y, int width, int height, String text, Image image) {
-    // draw image
-    {
-      DrawUtils.drawImageCV(gc, image, x, y, height);
-      // prepare new position/width
-      int imageWidth = image.getBounds().width + 2;
-      x += imageWidth;
-      width -= imageWidth;
-    }
-    // draw text
-    {
-      DrawUtils.drawStringCV(gc, text, x, y, width, height);
-    }
-  }
+	private void paint(GC gc, int x, int y, int width, int height, String text, Image image) {
+		// draw image
+		{
+			DrawUtils.drawImageCV(gc, image, x, y, height);
+			// prepare new position/width
+			int imageWidth = image.getBounds().width + 2;
+			x += imageWidth;
+			width -= imageWidth;
+		}
+		// draw text
+		{
+			DrawUtils.drawStringCV(gc, text, x, y, width, height);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean activate(PropertyTable propertyTable, Property property, Point location)
-      throws Exception {
-    // check that user clicked on image
-    if (location == null || location.x < m_trueImage.getBounds().width + 2) {
-      invertValue(property);
-    }
-    // don't activate
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean activate(PropertyTable propertyTable, Property property, Point location)
+			throws Exception {
+		// check that user clicked on image
+		if (location == null || location.x < m_trueImage.getBounds().width + 2) {
+			invertValue(property);
+		}
+		// don't activate
+		return false;
+	}
 
-  @Override
-  public void doubleClick(Property property, Point location) throws Exception {
-    invertValue(property);
-  }
+	@Override
+	public void doubleClick(Property property, Point location) throws Exception {
+		invertValue(property);
+	}
 
-  /**
-   * Inverts the value of given boolean {@link Property}.
-   */
-  private void invertValue(Property property) throws Exception {
-    Object value = property.getValue();
-    // null
-    if (value == null) {
-      property.setValue(true);
-      return;
-    }
-    // boolean
-    if (value instanceof Boolean) {
-      boolean booleanValue = ((Boolean) value).booleanValue();
-      property.setValue(!booleanValue);
-      return;
-    }
-    // unknown
-    property.setValue(true);
-  }
+	/**
+	 * Inverts the value of given boolean {@link Property}.
+	 */
+	private void invertValue(Property property) throws Exception {
+		Object value = property.getValue();
+		// null
+		if (value == null) {
+			property.setValue(true);
+			return;
+		}
+		// boolean
+		if (value instanceof Boolean) {
+			boolean booleanValue = ((Boolean) value).booleanValue();
+			property.setValue(!booleanValue);
+			return;
+		}
+		// unknown
+		property.setValue(true);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/BooleanPropertyEditor.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/BooleanPropertyEditor.java
index 89888e657..bfaaee363 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/BooleanPropertyEditor.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/BooleanPropertyEditor.java
@@ -26,88 +26,88 @@
  * @coverage core.model.property.editor
  */
 public final class BooleanPropertyEditor extends PropertyEditor {
-  private static final Image m_trueImage = DesignerPlugin.getImage("properties/true.png");
-  private static final Image m_falseImage = DesignerPlugin.getImage("properties/false.png");
-  private static final Image m_unknownImage =
-      DesignerPlugin.getImage("properties/BooleanUnknown.png");
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final PropertyEditor INSTANCE = new BooleanPropertyEditor();
+	private static final Image m_trueImage = DesignerPlugin.getImage("properties/true.png");
+	private static final Image m_falseImage = DesignerPlugin.getImage("properties/false.png");
+	private static final Image m_unknownImage =
+			DesignerPlugin.getImage("properties/BooleanUnknown.png");
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final PropertyEditor INSTANCE = new BooleanPropertyEditor();
 
-  private BooleanPropertyEditor() {
-  }
+	private BooleanPropertyEditor() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void paint(Property property, GC gc, int x, int y, int width, int height) throws Exception {
-    Object value = property.getValue();
-    if (value instanceof Boolean) {
-      boolean booleanValue = ((Boolean) value).booleanValue();
-      Image image = booleanValue ? m_trueImage : m_falseImage;
-      String text = Boolean.toString(booleanValue);
-      paint(gc, x, y, width, height, image, text);
-    } else {
-      paint(gc, x, y, width, height, m_unknownImage, "unknown");
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void paint(Property property, GC gc, int x, int y, int width, int height) throws Exception {
+		Object value = property.getValue();
+		if (value instanceof Boolean) {
+			boolean booleanValue = ((Boolean) value).booleanValue();
+			Image image = booleanValue ? m_trueImage : m_falseImage;
+			String text = Boolean.toString(booleanValue);
+			paint(gc, x, y, width, height, image, text);
+		} else {
+			paint(gc, x, y, width, height, m_unknownImage, "unknown");
+		}
+	}
 
-  /**
-   * Paints {@link Image} and text.
-   */
-  private void paint(GC gc, int x, int y, int width, int height, Image image, String text) {
-    // draw image
-    {
-      DrawUtils.drawImageCV(gc, image, x, y, height);
-      // prepare new position/width
-      int imageWidth = image.getBounds().width + 2;
-      x += imageWidth;
-      width -= imageWidth;
-    }
-    // draw text
-    DrawUtils.drawStringCV(gc, text, x, y, width, height);
-  }
+	/**
+	 * Paints {@link Image} and text.
+	 */
+	private void paint(GC gc, int x, int y, int width, int height, Image image, String text) {
+		// draw image
+		{
+			DrawUtils.drawImageCV(gc, image, x, y, height);
+			// prepare new position/width
+			int imageWidth = image.getBounds().width + 2;
+			x += imageWidth;
+			width -= imageWidth;
+		}
+		// draw text
+		DrawUtils.drawStringCV(gc, text, x, y, width, height);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean activate(PropertyTable propertyTable, Property property, Point location)
-      throws Exception {
-    // check that user clicked on image
-    if (location == null || location.x < m_trueImage.getBounds().width + 2) {
-      invertValue(property);
-    }
-    // don't activate
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean activate(PropertyTable propertyTable, Property property, Point location)
+			throws Exception {
+		// check that user clicked on image
+		if (location == null || location.x < m_trueImage.getBounds().width + 2) {
+			invertValue(property);
+		}
+		// don't activate
+		return false;
+	}
 
-  @Override
-  public void doubleClick(Property property, Point location) throws Exception {
-    invertValue(property);
-  }
+	@Override
+	public void doubleClick(Property property, Point location) throws Exception {
+		invertValue(property);
+	}
 
-  /**
-   * Inverts the value of given boolean {@link Property}.
-   */
-  private void invertValue(Property property) throws Exception {
-    // prepare current boolean value
-    boolean booleanValue = false;
-    {
-      Object value = property.getValue();
-      if (value instanceof Boolean) {
-        booleanValue = ((Boolean) value).booleanValue();
-      }
-    }
-    // set inverted value
-    property.setValue(!booleanValue);
-  }
+	/**
+	 * Inverts the value of given boolean {@link Property}.
+	 */
+	private void invertValue(Property property) throws Exception {
+		// prepare current boolean value
+		boolean booleanValue = false;
+		{
+			Object value = property.getValue();
+			if (value instanceof Boolean) {
+				booleanValue = ((Boolean) value).booleanValue();
+			}
+		}
+		// set inverted value
+		property.setValue(!booleanValue);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/ByteObjectPropertyEditor.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/ByteObjectPropertyEditor.java
index 0a9660b2c..c4794ae35 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/ByteObjectPropertyEditor.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/ByteObjectPropertyEditor.java
@@ -24,69 +24,69 @@
  * @coverage core.model.property.editor
  */
 public final class ByteObjectPropertyEditor extends AbstractTextPropertyEditor {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final ByteObjectPropertyEditor INSTANCE = new ByteObjectPropertyEditor();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final ByteObjectPropertyEditor INSTANCE = new ByteObjectPropertyEditor();
 
-  private ByteObjectPropertyEditor() {
-  }
+	private ByteObjectPropertyEditor() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getText(Property property) throws Exception {
-    Object value = property.getValue();
-    if (value == null) {
-      return "null";
-    }
-    if (value instanceof Byte) {
-      return value.toString();
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getText(Property property) throws Exception {
+		Object value = property.getValue();
+		if (value == null) {
+			return "null";
+		}
+		if (value instanceof Byte) {
+			return value.toString();
+		}
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getEditorText(Property property) throws Exception {
-    return getText(property);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getEditorText(Property property) throws Exception {
+		return getText(property);
+	}
 
-  @Override
-  protected boolean setEditorText(Property property, String text) throws Exception {
-    text = text.trim();
-    // check for delete
-    if (text.length() == 0) {
-      property.setValue(Property.UNKNOWN_VALUE);
-      return true;
-    }
-    // check for "null"
-    if (text.equals("null")) {
-      property.setValue(null);
-      return true;
-    }
-    // prepare value
-    Byte value;
-    try {
-      value = Byte.valueOf(text);
-    } catch (Throwable e) {
-      UiUtils.openWarning(
-          DesignerPlugin.getShell(),
-          property.getTitle(),
-          MessageFormat.format(ModelMessages.ByteObjectPropertyEditor_notValidByte, text));
-      return false;
-    }
-    // modify property
-    property.setValue(value);
-    return true;
-  }
+	@Override
+	protected boolean setEditorText(Property property, String text) throws Exception {
+		text = text.trim();
+		// check for delete
+		if (text.length() == 0) {
+			property.setValue(Property.UNKNOWN_VALUE);
+			return true;
+		}
+		// check for "null"
+		if (text.equals("null")) {
+			property.setValue(null);
+			return true;
+		}
+		// prepare value
+		Byte value;
+		try {
+			value = Byte.valueOf(text);
+		} catch (Throwable e) {
+			UiUtils.openWarning(
+					DesignerPlugin.getShell(),
+					property.getTitle(),
+					MessageFormat.format(ModelMessages.ByteObjectPropertyEditor_notValidByte, text));
+			return false;
+		}
+		// modify property
+		property.setValue(value);
+		return true;
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/BytePropertyEditor.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/BytePropertyEditor.java
index 33fd619e8..90581a88b 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/BytePropertyEditor.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/BytePropertyEditor.java
@@ -24,60 +24,60 @@
  * @coverage core.model.property.editor
  */
 public class BytePropertyEditor extends AbstractTextPropertyEditor {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final PropertyEditor INSTANCE = new BytePropertyEditor();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final PropertyEditor INSTANCE = new BytePropertyEditor();
 
-  private BytePropertyEditor() {
-  }
+	private BytePropertyEditor() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getText(Property property) throws Exception {
-    Object value = property.getValue();
-    if (value instanceof Byte) {
-      return value.toString();
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getText(Property property) throws Exception {
+		Object value = property.getValue();
+		if (value instanceof Byte) {
+			return value.toString();
+		}
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getEditorText(Property property) throws Exception {
-    return getText(property);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getEditorText(Property property) throws Exception {
+		return getText(property);
+	}
 
-  @Override
-  protected boolean setEditorText(Property property, String text) throws Exception {
-    text = text.trim();
-    // check for delete
-    if (text.length() == 0) {
-      property.setValue(Property.UNKNOWN_VALUE);
-    }
-    // prepare value
-    Byte value;
-    try {
-      value = Byte.valueOf(text);
-    } catch (Throwable e) {
-      UiUtils.openWarning(
-          DesignerPlugin.getShell(),
-          property.getTitle(),
-          MessageFormat.format(ModelMessages.BytePropertyEditor_notValidByte, text));
-      return false;
-    }
-    // modify property
-    property.setValue(value);
-    return true;
-  }
+	@Override
+	protected boolean setEditorText(Property property, String text) throws Exception {
+		text = text.trim();
+		// check for delete
+		if (text.length() == 0) {
+			property.setValue(Property.UNKNOWN_VALUE);
+		}
+		// prepare value
+		Byte value;
+		try {
+			value = Byte.valueOf(text);
+		} catch (Throwable e) {
+			UiUtils.openWarning(
+					DesignerPlugin.getShell(),
+					property.getTitle(),
+					MessageFormat.format(ModelMessages.BytePropertyEditor_notValidByte, text));
+			return false;
+		}
+		// modify property
+		property.setValue(value);
+		return true;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/CharacterPropertyEditor.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/CharacterPropertyEditor.java
index 940d29a72..5e5de5b8e 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/CharacterPropertyEditor.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/CharacterPropertyEditor.java
@@ -24,57 +24,57 @@
  * @coverage core.model.property.editor
  */
 public final class CharacterPropertyEditor extends AbstractTextPropertyEditor {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final PropertyEditor INSTANCE = new CharacterPropertyEditor();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final PropertyEditor INSTANCE = new CharacterPropertyEditor();
 
-  private CharacterPropertyEditor() {
-  }
+	private CharacterPropertyEditor() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getText(Property property) throws Exception {
-    Object value = property.getValue();
-    if (value instanceof Character) {
-      return String.valueOf(((Character) value).charValue());
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getText(Property property) throws Exception {
+		Object value = property.getValue();
+		if (value instanceof Character) {
+			return String.valueOf(((Character) value).charValue());
+		}
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getEditorText(Property property) throws Exception {
-    return getText(property);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getEditorText(Property property) throws Exception {
+		return getText(property);
+	}
 
-  @Override
-  protected boolean setEditorText(Property property, String text) throws Exception {
-    // check for delete
-    if (text.length() == 0) {
-      property.setValue(Property.UNKNOWN_VALUE);
-      return true;
-    }
-    // only one character
-    if (text.length() > 1) {
-      UiUtils.openWarning(
-          DesignerPlugin.getShell(),
-          property.getTitle(),
-          MessageFormat.format(ModelMessages.CharacterPropertyEditor_notValid, text));
-      return false;
-    }
-    // modify property
-    property.setValue(new Character(text.charAt(0)));
-    return true;
-  }
+	@Override
+	protected boolean setEditorText(Property property, String text) throws Exception {
+		// check for delete
+		if (text.length() == 0) {
+			property.setValue(Property.UNKNOWN_VALUE);
+			return true;
+		}
+		// only one character
+		if (text.length() > 1) {
+			UiUtils.openWarning(
+					DesignerPlugin.getShell(),
+					property.getTitle(),
+					MessageFormat.format(ModelMessages.CharacterPropertyEditor_notValid, text));
+			return false;
+		}
+		// modify property
+		property.setValue(new Character(text.charAt(0)));
+		return true;
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/DoubleObjectPropertyEditor.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/DoubleObjectPropertyEditor.java
index 8aef3dba2..9d4a7f3a2 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/DoubleObjectPropertyEditor.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/DoubleObjectPropertyEditor.java
@@ -24,69 +24,69 @@
  * @coverage core.model.property.editor
  */
 public final class DoubleObjectPropertyEditor extends AbstractTextPropertyEditor {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final DoubleObjectPropertyEditor INSTANCE = new DoubleObjectPropertyEditor();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final DoubleObjectPropertyEditor INSTANCE = new DoubleObjectPropertyEditor();
 
-  private DoubleObjectPropertyEditor() {
-  }
+	private DoubleObjectPropertyEditor() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getText(Property property) throws Exception {
-    Object value = property.getValue();
-    if (value == null) {
-      return "null";
-    }
-    if (value instanceof Double) {
-      return value.toString();
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getText(Property property) throws Exception {
+		Object value = property.getValue();
+		if (value == null) {
+			return "null";
+		}
+		if (value instanceof Double) {
+			return value.toString();
+		}
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getEditorText(Property property) throws Exception {
-    return getText(property);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getEditorText(Property property) throws Exception {
+		return getText(property);
+	}
 
-  @Override
-  protected boolean setEditorText(Property property, String text) throws Exception {
-    text = text.trim();
-    // check for delete
-    if (text.length() == 0) {
-      property.setValue(Property.UNKNOWN_VALUE);
-      return true;
-    }
-    // check for "null"
-    if (text.equals("null")) {
-      property.setValue(null);
-      return true;
-    }
-    // prepare value
-    Double value;
-    try {
-      value = Double.valueOf(text);
-    } catch (Throwable e) {
-      UiUtils.openWarning(
-          DesignerPlugin.getShell(),
-          property.getTitle(),
-          MessageFormat.format(ModelMessages.DoubleObjectPropertyEditor_notValidDouble, text));
-      return false;
-    }
-    // modify property
-    property.setValue(value);
-    return true;
-  }
+	@Override
+	protected boolean setEditorText(Property property, String text) throws Exception {
+		text = text.trim();
+		// check for delete
+		if (text.length() == 0) {
+			property.setValue(Property.UNKNOWN_VALUE);
+			return true;
+		}
+		// check for "null"
+		if (text.equals("null")) {
+			property.setValue(null);
+			return true;
+		}
+		// prepare value
+		Double value;
+		try {
+			value = Double.valueOf(text);
+		} catch (Throwable e) {
+			UiUtils.openWarning(
+					DesignerPlugin.getShell(),
+					property.getTitle(),
+					MessageFormat.format(ModelMessages.DoubleObjectPropertyEditor_notValidDouble, text));
+			return false;
+		}
+		// modify property
+		property.setValue(value);
+		return true;
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/DoublePropertyEditor.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/DoublePropertyEditor.java
index b06907d01..bd198f7b5 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/DoublePropertyEditor.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/DoublePropertyEditor.java
@@ -24,61 +24,61 @@
  * @coverage core.model.property.editor
  */
 public final class DoublePropertyEditor extends AbstractTextPropertyEditor {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final PropertyEditor INSTANCE = new DoublePropertyEditor();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final PropertyEditor INSTANCE = new DoublePropertyEditor();
 
-  private DoublePropertyEditor() {
-  }
+	private DoublePropertyEditor() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getText(Property property) throws Exception {
-    Object value = property.getValue();
-    if (value instanceof Number) {
-      double doubleValue = ((Number) value).doubleValue();
-      return Double.toString(doubleValue);
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getText(Property property) throws Exception {
+		Object value = property.getValue();
+		if (value instanceof Number) {
+			double doubleValue = ((Number) value).doubleValue();
+			return Double.toString(doubleValue);
+		}
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getEditorText(Property property) throws Exception {
-    return getText(property);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getEditorText(Property property) throws Exception {
+		return getText(property);
+	}
 
-  @Override
-  protected boolean setEditorText(Property property, String text) throws Exception {
-    text = text.trim();
-    // check for delete
-    if (text.length() == 0) {
-      property.setValue(Property.UNKNOWN_VALUE);
-    }
-    // prepare value
-    Double value;
-    try {
-      value = Double.valueOf(text);
-    } catch (Throwable e) {
-      UiUtils.openWarning(
-          DesignerPlugin.getShell(),
-          property.getTitle(),
-          MessageFormat.format(ModelMessages.DoublePropertyEditor_notValidDouble, text));
-      return false;
-    }
-    // modify property
-    property.setValue(value);
-    return true;
-  }
+	@Override
+	protected boolean setEditorText(Property property, String text) throws Exception {
+		text = text.trim();
+		// check for delete
+		if (text.length() == 0) {
+			property.setValue(Property.UNKNOWN_VALUE);
+		}
+		// prepare value
+		Double value;
+		try {
+			value = Double.valueOf(text);
+		} catch (Throwable e) {
+			UiUtils.openWarning(
+					DesignerPlugin.getShell(),
+					property.getTitle(),
+					MessageFormat.format(ModelMessages.DoublePropertyEditor_notValidDouble, text));
+			return false;
+		}
+		// modify property
+		property.setValue(value);
+		return true;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/FloatPropertyEditor.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/FloatPropertyEditor.java
index dbcff0c39..2e4b0e95f 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/FloatPropertyEditor.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/FloatPropertyEditor.java
@@ -24,60 +24,60 @@
  * @coverage core.model.property.editor
  */
 public class FloatPropertyEditor extends AbstractTextPropertyEditor {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final PropertyEditor INSTANCE = new FloatPropertyEditor();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final PropertyEditor INSTANCE = new FloatPropertyEditor();
 
-  protected FloatPropertyEditor() {
-  }
+	protected FloatPropertyEditor() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getText(Property property) throws Exception {
-    Object value = property.getValue();
-    if (value instanceof Float) {
-      return value.toString();
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getText(Property property) throws Exception {
+		Object value = property.getValue();
+		if (value instanceof Float) {
+			return value.toString();
+		}
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getEditorText(Property property) throws Exception {
-    return getText(property);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getEditorText(Property property) throws Exception {
+		return getText(property);
+	}
 
-  @Override
-  protected boolean setEditorText(Property property, String text) throws Exception {
-    text = text.trim();
-    // check for delete
-    if (text.length() == 0) {
-      property.setValue(Property.UNKNOWN_VALUE);
-    }
-    // prepare value
-    Float value;
-    try {
-      value = Float.valueOf(text);
-    } catch (Throwable e) {
-      UiUtils.openWarning(
-          DesignerPlugin.getShell(),
-          property.getTitle(),
-          MessageFormat.format(ModelMessages.FloatPropertyEditor_notValidFloat, text));
-      return false;
-    }
-    // modify property
-    property.setValue(value);
-    return true;
-  }
+	@Override
+	protected boolean setEditorText(Property property, String text) throws Exception {
+		text = text.trim();
+		// check for delete
+		if (text.length() == 0) {
+			property.setValue(Property.UNKNOWN_VALUE);
+		}
+		// prepare value
+		Float value;
+		try {
+			value = Float.valueOf(text);
+		} catch (Throwable e) {
+			UiUtils.openWarning(
+					DesignerPlugin.getShell(),
+					property.getTitle(),
+					MessageFormat.format(ModelMessages.FloatPropertyEditor_notValidFloat, text));
+			return false;
+		}
+		// modify property
+		property.setValue(value);
+		return true;
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/ITextValuePropertyEditor.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/ITextValuePropertyEditor.java
index bac8c4fb4..e6e729294 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/ITextValuePropertyEditor.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/ITextValuePropertyEditor.java
@@ -19,8 +19,8 @@
  * @coverage core.model.property.editor
  */
 public interface ITextValuePropertyEditor {
-  /**
-   * Sets value that corresponds given text.
-   */
-  void setText(Property property, String text) throws Exception;
+	/**
+	 * Sets value that corresponds given text.
+	 */
+	void setText(Property property, String text) throws Exception;
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/IValueSourcePropertyEditor.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/IValueSourcePropertyEditor.java
index 9de68ec63..5f0e4b88e 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/IValueSourcePropertyEditor.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/IValueSourcePropertyEditor.java
@@ -18,8 +18,8 @@
  * @coverage core.model.property.editor
  */
 public interface IValueSourcePropertyEditor {
-  /**
-   * @return the Java source for given value.
-   */
-  String getValueSource(Object value) throws Exception;
+	/**
+	 * @return the Java source for given value.
+	 */
+	String getValueSource(Object value) throws Exception;
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/IntegerArrayPropertyEditor.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/IntegerArrayPropertyEditor.java
index 089cc7f5b..8b093597e 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/IntegerArrayPropertyEditor.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/IntegerArrayPropertyEditor.java
@@ -27,67 +27,67 @@
  * @coverage core.model.property.editor
  */
 public final class IntegerArrayPropertyEditor extends AbstractTextPropertyEditor {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final IntegerArrayPropertyEditor INSTANCE = new IntegerArrayPropertyEditor();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final IntegerArrayPropertyEditor INSTANCE = new IntegerArrayPropertyEditor();
 
-  private IntegerArrayPropertyEditor() {
-  }
+	private IntegerArrayPropertyEditor() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getText(Property property) throws Exception {
-    Object value = property.getValue();
-    if (value instanceof int[]) {
-      int[] array = (int[]) value;
-      return StringUtils.join(ArrayUtils.toObject(array), ' ');
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getText(Property property) throws Exception {
+		Object value = property.getValue();
+		if (value instanceof int[]) {
+			int[] array = (int[]) value;
+			return StringUtils.join(ArrayUtils.toObject(array), ' ');
+		}
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getEditorText(Property property) throws Exception {
-    return getText(property);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getEditorText(Property property) throws Exception {
+		return getText(property);
+	}
 
-  @Override
-  protected boolean setEditorText(Property property, String text) throws Exception {
-    text = text.trim();
-    // check for delete
-    if (text.length() == 0) {
-      property.setValue(Property.UNKNOWN_VALUE);
-      return true;
-    }
-    // prepare value
-    int[] array;
-    try {
-      String[] parts = StringUtils.split(text);
-      array = new int[parts.length];
-      for (int i = 0; i < parts.length; i++) {
-        String part = parts[i];
-        array[i] = Integer.valueOf(part);
-      }
-    } catch (Throwable e) {
-      UiUtils.openWarning(
-          DesignerPlugin.getShell(),
-          property.getTitle(),
-          MessageFormat.format(ModelMessages.IntegerPropertyEditor_notValidInt, text));
-      return false;
-    }
-    // modify property
-    property.setValue(array);
-    return true;
-  }
+	@Override
+	protected boolean setEditorText(Property property, String text) throws Exception {
+		text = text.trim();
+		// check for delete
+		if (text.length() == 0) {
+			property.setValue(Property.UNKNOWN_VALUE);
+			return true;
+		}
+		// prepare value
+		int[] array;
+		try {
+			String[] parts = StringUtils.split(text);
+			array = new int[parts.length];
+			for (int i = 0; i < parts.length; i++) {
+				String part = parts[i];
+				array[i] = Integer.valueOf(part);
+			}
+		} catch (Throwable e) {
+			UiUtils.openWarning(
+					DesignerPlugin.getShell(),
+					property.getTitle(),
+					MessageFormat.format(ModelMessages.IntegerPropertyEditor_notValidInt, text));
+			return false;
+		}
+		// modify property
+		property.setValue(array);
+		return true;
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/IntegerObjectPropertyEditor.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/IntegerObjectPropertyEditor.java
index 5981113e6..5506994c0 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/IntegerObjectPropertyEditor.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/IntegerObjectPropertyEditor.java
@@ -24,69 +24,69 @@
  * @coverage core.model.property.editor
  */
 public final class IntegerObjectPropertyEditor extends AbstractTextPropertyEditor {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final IntegerObjectPropertyEditor INSTANCE = new IntegerObjectPropertyEditor();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final IntegerObjectPropertyEditor INSTANCE = new IntegerObjectPropertyEditor();
 
-  private IntegerObjectPropertyEditor() {
-  }
+	private IntegerObjectPropertyEditor() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getText(Property property) throws Exception {
-    Object value = property.getValue();
-    if (value == null) {
-      return "null";
-    }
-    if (value instanceof Integer) {
-      return value.toString();
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getText(Property property) throws Exception {
+		Object value = property.getValue();
+		if (value == null) {
+			return "null";
+		}
+		if (value instanceof Integer) {
+			return value.toString();
+		}
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getEditorText(Property property) throws Exception {
-    return getText(property);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getEditorText(Property property) throws Exception {
+		return getText(property);
+	}
 
-  @Override
-  protected boolean setEditorText(Property property, String text) throws Exception {
-    text = text.trim();
-    // check for delete
-    if (text.length() == 0) {
-      property.setValue(Property.UNKNOWN_VALUE);
-      return true;
-    }
-    // check for "null"
-    if (text.equals("null")) {
-      property.setValue(null);
-      return true;
-    }
-    // prepare value
-    Integer value;
-    try {
-      value = Integer.valueOf(text);
-    } catch (Throwable e) {
-      UiUtils.openWarning(
-          DesignerPlugin.getShell(),
-          property.getTitle(),
-          MessageFormat.format(ModelMessages.IntegerObjectPropertyEditor_notValidInt, text));
-      return false;
-    }
-    // modify property
-    property.setValue(value);
-    return true;
-  }
+	@Override
+	protected boolean setEditorText(Property property, String text) throws Exception {
+		text = text.trim();
+		// check for delete
+		if (text.length() == 0) {
+			property.setValue(Property.UNKNOWN_VALUE);
+			return true;
+		}
+		// check for "null"
+		if (text.equals("null")) {
+			property.setValue(null);
+			return true;
+		}
+		// prepare value
+		Integer value;
+		try {
+			value = Integer.valueOf(text);
+		} catch (Throwable e) {
+			UiUtils.openWarning(
+					DesignerPlugin.getShell(),
+					property.getTitle(),
+					MessageFormat.format(ModelMessages.IntegerObjectPropertyEditor_notValidInt, text));
+			return false;
+		}
+		// modify property
+		property.setValue(value);
+		return true;
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/IntegerPropertyEditor.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/IntegerPropertyEditor.java
index 06340138e..c472585f3 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/IntegerPropertyEditor.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/IntegerPropertyEditor.java
@@ -24,61 +24,61 @@
  * @coverage core.model.property.editor
  */
 public final class IntegerPropertyEditor extends AbstractTextPropertyEditor {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final IntegerPropertyEditor INSTANCE = new IntegerPropertyEditor();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final IntegerPropertyEditor INSTANCE = new IntegerPropertyEditor();
 
-  private IntegerPropertyEditor() {
-  }
+	private IntegerPropertyEditor() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getText(Property property) throws Exception {
-    Object value = property.getValue();
-    if (value instanceof Integer) {
-      return value.toString();
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getText(Property property) throws Exception {
+		Object value = property.getValue();
+		if (value instanceof Integer) {
+			return value.toString();
+		}
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getEditorText(Property property) throws Exception {
-    return getText(property);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getEditorText(Property property) throws Exception {
+		return getText(property);
+	}
 
-  @Override
-  protected boolean setEditorText(Property property, String text) throws Exception {
-    text = text.trim();
-    // check for delete
-    if (text.length() == 0) {
-      property.setValue(Property.UNKNOWN_VALUE);
-      return true;
-    }
-    // prepare value
-    Integer value;
-    try {
-      value = Integer.valueOf(text);
-    } catch (Throwable e) {
-      UiUtils.openWarning(
-          DesignerPlugin.getShell(),
-          property.getTitle(),
-          MessageFormat.format(ModelMessages.IntegerPropertyEditor_notValidInt, text));
-      return false;
-    }
-    // modify property
-    property.setValue(value);
-    return true;
-  }
+	@Override
+	protected boolean setEditorText(Property property, String text) throws Exception {
+		text = text.trim();
+		// check for delete
+		if (text.length() == 0) {
+			property.setValue(Property.UNKNOWN_VALUE);
+			return true;
+		}
+		// prepare value
+		Integer value;
+		try {
+			value = Integer.valueOf(text);
+		} catch (Throwable e) {
+			UiUtils.openWarning(
+					DesignerPlugin.getShell(),
+					property.getTitle(),
+					MessageFormat.format(ModelMessages.IntegerPropertyEditor_notValidInt, text));
+			return false;
+		}
+		// modify property
+		property.setValue(value);
+		return true;
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/LongObjectPropertyEditor.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/LongObjectPropertyEditor.java
index 821fbfe23..f6e2c30d0 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/LongObjectPropertyEditor.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/LongObjectPropertyEditor.java
@@ -24,69 +24,69 @@
  * @coverage core.model.property.editor
  */
 public final class LongObjectPropertyEditor extends AbstractTextPropertyEditor {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final LongObjectPropertyEditor INSTANCE = new LongObjectPropertyEditor();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final LongObjectPropertyEditor INSTANCE = new LongObjectPropertyEditor();
 
-  private LongObjectPropertyEditor() {
-  }
+	private LongObjectPropertyEditor() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getText(Property property) throws Exception {
-    Object value = property.getValue();
-    if (value == null) {
-      return "null";
-    }
-    if (value instanceof Long) {
-      return value.toString();
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getText(Property property) throws Exception {
+		Object value = property.getValue();
+		if (value == null) {
+			return "null";
+		}
+		if (value instanceof Long) {
+			return value.toString();
+		}
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getEditorText(Property property) throws Exception {
-    return getText(property);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getEditorText(Property property) throws Exception {
+		return getText(property);
+	}
 
-  @Override
-  protected boolean setEditorText(Property property, String text) throws Exception {
-    text = text.trim();
-    // check for delete
-    if (text.length() == 0) {
-      property.setValue(Property.UNKNOWN_VALUE);
-      return true;
-    }
-    // check for "null"
-    if (text.equals("null")) {
-      property.setValue(null);
-      return true;
-    }
-    // prepare value
-    Long value;
-    try {
-      value = Long.valueOf(text);
-    } catch (Throwable e) {
-      UiUtils.openWarning(
-          DesignerPlugin.getShell(),
-          property.getTitle(),
-          MessageFormat.format(ModelMessages.LongObjectPropertyEditor_notValidLong, text));
-      return false;
-    }
-    // modify property
-    property.setValue(value);
-    return true;
-  }
+	@Override
+	protected boolean setEditorText(Property property, String text) throws Exception {
+		text = text.trim();
+		// check for delete
+		if (text.length() == 0) {
+			property.setValue(Property.UNKNOWN_VALUE);
+			return true;
+		}
+		// check for "null"
+		if (text.equals("null")) {
+			property.setValue(null);
+			return true;
+		}
+		// prepare value
+		Long value;
+		try {
+			value = Long.valueOf(text);
+		} catch (Throwable e) {
+			UiUtils.openWarning(
+					DesignerPlugin.getShell(),
+					property.getTitle(),
+					MessageFormat.format(ModelMessages.LongObjectPropertyEditor_notValidLong, text));
+			return false;
+		}
+		// modify property
+		property.setValue(value);
+		return true;
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/LongPropertyEditor.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/LongPropertyEditor.java
index 64670943f..7318b6a58 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/LongPropertyEditor.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/LongPropertyEditor.java
@@ -24,60 +24,60 @@
  * @coverage core.model.property.editor
  */
 public class LongPropertyEditor extends AbstractTextPropertyEditor {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final PropertyEditor INSTANCE = new LongPropertyEditor();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final PropertyEditor INSTANCE = new LongPropertyEditor();
 
-  private LongPropertyEditor() {
-  }
+	private LongPropertyEditor() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getText(Property property) throws Exception {
-    Object value = property.getValue();
-    if (value instanceof Long) {
-      return value.toString();
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getText(Property property) throws Exception {
+		Object value = property.getValue();
+		if (value instanceof Long) {
+			return value.toString();
+		}
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getEditorText(Property property) throws Exception {
-    return getText(property);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getEditorText(Property property) throws Exception {
+		return getText(property);
+	}
 
-  @Override
-  protected boolean setEditorText(Property property, String text) throws Exception {
-    text = text.trim();
-    // check for delete
-    if (text.length() == 0) {
-      property.setValue(Property.UNKNOWN_VALUE);
-    }
-    // prepare value
-    Long value;
-    try {
-      value = Long.valueOf(text);
-    } catch (Throwable e) {
-      UiUtils.openWarning(
-          DesignerPlugin.getShell(),
-          property.getTitle(),
-          MessageFormat.format(ModelMessages.LongPropertyEditor_notValidLong, text));
-      return false;
-    }
-    // modify property
-    property.setValue(value);
-    return true;
-  }
+	@Override
+	protected boolean setEditorText(Property property, String text) throws Exception {
+		text = text.trim();
+		// check for delete
+		if (text.length() == 0) {
+			property.setValue(Property.UNKNOWN_VALUE);
+		}
+		// prepare value
+		Long value;
+		try {
+			value = Long.valueOf(text);
+		} catch (Throwable e) {
+			UiUtils.openWarning(
+					DesignerPlugin.getShell(),
+					property.getTitle(),
+					MessageFormat.format(ModelMessages.LongPropertyEditor_notValidLong, text));
+			return false;
+		}
+		// modify property
+		property.setValue(value);
+		return true;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/PropertyEditor.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/PropertyEditor.java
index 32f738ae0..089425041 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/PropertyEditor.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/PropertyEditor.java
@@ -30,91 +30,91 @@
  * @coverage core.model.property.editor
  */
 public abstract class PropertyEditor implements IAdaptable {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the instance of {@link PropertyEditorPresentation}.
-   */
-  public PropertyEditorPresentation getPresentation() {
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the instance of {@link PropertyEditorPresentation}.
+	 */
+	public PropertyEditorPresentation getPresentation() {
+		return null;
+	}
 
-  /**
-   * Paints given {@link Property} given rectangle <code>(x, y, width, height)</code> of {@link GC}.
-   */
-  public abstract void paint(Property property, GC gc, int x, int y, int width, int height)
-      throws Exception;
+	/**
+	 * Paints given {@link Property} given rectangle <code>(x, y, width, height)</code> of {@link GC}.
+	 */
+	public abstract void paint(Property property, GC gc, int x, int y, int width, int height)
+			throws Exception;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Activates editor for given {@link Property} at given place of {@link Composite}. Activation
-   * happens when user selects property in {@link PropertyTable}. {@link PropertyEditor} should
-   * create here any {@link Control}'s required to edit {@link Property}.
-   *
-   * If any exception happens, {@link PropertyEditor} will be deactivated.
-   *
-   * @param location
-   *          the mouse location, if editor is activated using mouse click, or <code>null</code> if
-   *          it is activated using keyboard.
-   *
-   * @return <code>true</code> if editor should be remembered as active for future
-   *         {@link #setBounds(Rectangle)} and {@link #deactivate(boolean)} invocation. Some editors
-   *         need such local activation (for example for String), some - not (for boolean).
-   */
-  public boolean activate(PropertyTable propertyTable, Property property, Point location)
-      throws Exception {
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Activates editor for given {@link Property} at given place of {@link Composite}. Activation
+	 * happens when user selects property in {@link PropertyTable}. {@link PropertyEditor} should
+	 * create here any {@link Control}'s required to edit {@link Property}.
+	 *
+	 * If any exception happens, {@link PropertyEditor} will be deactivated.
+	 *
+	 * @param location
+	 *          the mouse location, if editor is activated using mouse click, or <code>null</code> if
+	 *          it is activated using keyboard.
+	 *
+	 * @return <code>true</code> if editor should be remembered as active for future
+	 *         {@link #setBounds(Rectangle)} and {@link #deactivate(boolean)} invocation. Some editors
+	 *         need such local activation (for example for String), some - not (for boolean).
+	 */
+	public boolean activate(PropertyTable propertyTable, Property property, Point location)
+			throws Exception {
+		return false;
+	}
 
-  /**
-   * Sets the new bounds for editor's control.
-   */
-  public void setBounds(Rectangle bounds) {
-  }
+	/**
+	 * Sets the new bounds for editor's control.
+	 */
+	public void setBounds(Rectangle bounds) {
+	}
 
-  /**
-   * Deactivates editor for current {@link Property}. {@link PropertyEditor} should dispose any
-   * {@link Control}'s created before in {@link #activate(PropertyTable, Property, Point)}.
-   *
-   * If any exception happened during activation, editor still should be able to deactivate
-   * correctly.
-   *
-   * @param save
-   *          is <code>true</code> if property should save value to {@link Property}.
-   */
-  public void deactivate(PropertyTable propertyTable, Property property, boolean save) {
-  }
+	/**
+	 * Deactivates editor for current {@link Property}. {@link PropertyEditor} should dispose any
+	 * {@link Control}'s created before in {@link #activate(PropertyTable, Property, Point)}.
+	 *
+	 * If any exception happened during activation, editor still should be able to deactivate
+	 * correctly.
+	 *
+	 * @param save
+	 *          is <code>true</code> if property should save value to {@link Property}.
+	 */
+	public void deactivate(PropertyTable propertyTable, Property property, boolean save) {
+	}
 
-  /**
-   * Handles double click on {@link Property} value in {@link PropertyTable}.
-   *
-   * @param location
-   *          the mouse location, relative to editor
-   */
-  public void doubleClick(Property property, Point location) throws Exception {
-  }
+	/**
+	 * Handles double click on {@link Property} value in {@link PropertyTable}.
+	 *
+	 * @param location
+	 *          the mouse location, relative to editor
+	 */
+	public void doubleClick(Property property, Point location) throws Exception {
+	}
 
-  /**
-   * Handles {@link SWT#KeyDown} event in {@link PropertyTable}.
-   */
-  public void keyDown(PropertyTable propertyTable, Property property, KeyEvent event)
-      throws Exception {
-  }
+	/**
+	 * Handles {@link SWT#KeyDown} event in {@link PropertyTable}.
+	 */
+	public void keyDown(PropertyTable propertyTable, Property property, KeyEvent event)
+			throws Exception {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IAdaptable
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public <T> T getAdapter(Class<T> adapter) {
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IAdaptable
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public <T> T getAdapter(Class<T> adapter) {
+		return null;
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/PropertyEditorProvider.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/PropertyEditorProvider.java
index 35d7fda7d..6193cd6e3 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/PropertyEditorProvider.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/PropertyEditorProvider.java
@@ -19,26 +19,26 @@
  * @coverage core.model.property.editor
  */
 public class PropertyEditorProvider {
-  /**
-   * @return the {@link PropertyEditor} for given property type or <code>null</code>.
-   */
-  public PropertyEditor getEditorForType(Class<?> propertyType) throws Exception {
-    return null;
-  }
+	/**
+	 * @return the {@link PropertyEditor} for given property type or <code>null</code>.
+	 */
+	public PropertyEditor getEditorForType(Class<?> propertyType) throws Exception {
+		return null;
+	}
 
-  /**
-   * @return the {@link PropertyEditor} for given {@link java.beans.PropertyEditor} editor type or
-   *         <code>null</code>.
-   */
-  public PropertyEditor getEditorForEditorType(Class<?> editorType) throws Exception {
-    return null;
-  }
+	/**
+	 * @return the {@link PropertyEditor} for given {@link java.beans.PropertyEditor} editor type or
+	 *         <code>null</code>.
+	 */
+	public PropertyEditor getEditorForEditorType(Class<?> editorType) throws Exception {
+		return null;
+	}
 
-  /**
-   * @return the {@link PropertyEditor} for given {@link PropertyDescriptor} or <code>null</code>.
-   */
-  public PropertyEditor getEditorForPropertyDescriptor(PropertyDescriptor descriptor)
-      throws Exception {
-    return null;
-  }
+	/**
+	 * @return the {@link PropertyEditor} for given {@link PropertyDescriptor} or <code>null</code>.
+	 */
+	public PropertyEditor getEditorForPropertyDescriptor(PropertyDescriptor descriptor)
+			throws Exception {
+		return null;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/ShortObjectPropertyEditor.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/ShortObjectPropertyEditor.java
index 4f85a5bd1..2697113b0 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/ShortObjectPropertyEditor.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/ShortObjectPropertyEditor.java
@@ -24,69 +24,69 @@
  * @coverage core.model.property.editor
  */
 public final class ShortObjectPropertyEditor extends AbstractTextPropertyEditor {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final ShortObjectPropertyEditor INSTANCE = new ShortObjectPropertyEditor();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final ShortObjectPropertyEditor INSTANCE = new ShortObjectPropertyEditor();
 
-  private ShortObjectPropertyEditor() {
-  }
+	private ShortObjectPropertyEditor() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getText(Property property) throws Exception {
-    Object value = property.getValue();
-    if (value == null) {
-      return "null";
-    }
-    if (value instanceof Short) {
-      return value.toString();
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getText(Property property) throws Exception {
+		Object value = property.getValue();
+		if (value == null) {
+			return "null";
+		}
+		if (value instanceof Short) {
+			return value.toString();
+		}
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getEditorText(Property property) throws Exception {
-    return getText(property);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getEditorText(Property property) throws Exception {
+		return getText(property);
+	}
 
-  @Override
-  protected boolean setEditorText(Property property, String text) throws Exception {
-    text = text.trim();
-    // check for delete
-    if (text.length() == 0) {
-      property.setValue(Property.UNKNOWN_VALUE);
-      return true;
-    }
-    // check for "null"
-    if (text.equals("null")) {
-      property.setValue(null);
-      return true;
-    }
-    // prepare value
-    Short value;
-    try {
-      value = Short.valueOf(text);
-    } catch (Throwable e) {
-      UiUtils.openWarning(
-          DesignerPlugin.getShell(),
-          property.getTitle(),
-          MessageFormat.format(ModelMessages.ShortObjectPropertyEditor_notValidShort, text));
-      return false;
-    }
-    // modify property
-    property.setValue(value);
-    return true;
-  }
+	@Override
+	protected boolean setEditorText(Property property, String text) throws Exception {
+		text = text.trim();
+		// check for delete
+		if (text.length() == 0) {
+			property.setValue(Property.UNKNOWN_VALUE);
+			return true;
+		}
+		// check for "null"
+		if (text.equals("null")) {
+			property.setValue(null);
+			return true;
+		}
+		// prepare value
+		Short value;
+		try {
+			value = Short.valueOf(text);
+		} catch (Throwable e) {
+			UiUtils.openWarning(
+					DesignerPlugin.getShell(),
+					property.getTitle(),
+					MessageFormat.format(ModelMessages.ShortObjectPropertyEditor_notValidShort, text));
+			return false;
+		}
+		// modify property
+		property.setValue(value);
+		return true;
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/ShortPropertyEditor.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/ShortPropertyEditor.java
index a1e610537..0193fa878 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/ShortPropertyEditor.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/ShortPropertyEditor.java
@@ -24,60 +24,60 @@
  * @coverage core.model.property.editor
  */
 public class ShortPropertyEditor extends AbstractTextPropertyEditor {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final PropertyEditor INSTANCE = new ShortPropertyEditor();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final PropertyEditor INSTANCE = new ShortPropertyEditor();
 
-  private ShortPropertyEditor() {
-  }
+	private ShortPropertyEditor() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getText(Property property) throws Exception {
-    Object value = property.getValue();
-    if (value instanceof Short) {
-      return value.toString();
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getText(Property property) throws Exception {
+		Object value = property.getValue();
+		if (value instanceof Short) {
+			return value.toString();
+		}
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getEditorText(Property property) throws Exception {
-    return getText(property);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getEditorText(Property property) throws Exception {
+		return getText(property);
+	}
 
-  @Override
-  protected boolean setEditorText(Property property, String text) throws Exception {
-    text = text.trim();
-    // check for delete
-    if (text.length() == 0) {
-      property.setValue(Property.UNKNOWN_VALUE);
-    }
-    // prepare value
-    Short value;
-    try {
-      value = Short.valueOf(text);
-    } catch (Throwable e) {
-      UiUtils.openWarning(
-          DesignerPlugin.getShell(),
-          property.getTitle(),
-          MessageFormat.format(ModelMessages.ShortPropertyEditor_notValidShort, text));
-      return false;
-    }
-    // modify property
-    property.setValue(value);
-    return true;
-  }
+	@Override
+	protected boolean setEditorText(Property property, String text) throws Exception {
+		text = text.trim();
+		// check for delete
+		if (text.length() == 0) {
+			property.setValue(Property.UNKNOWN_VALUE);
+		}
+		// prepare value
+		Short value;
+		try {
+			value = Short.valueOf(text);
+		} catch (Throwable e) {
+			UiUtils.openWarning(
+					DesignerPlugin.getShell(),
+					property.getTitle(),
+					MessageFormat.format(ModelMessages.ShortPropertyEditor_notValidShort, text));
+			return false;
+		}
+		// modify property
+		property.setValue(value);
+		return true;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/StringArrayPropertyEditor.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/StringArrayPropertyEditor.java
index c719d9cab..307c99fda 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/StringArrayPropertyEditor.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/StringArrayPropertyEditor.java
@@ -27,56 +27,56 @@
  * @coverage core.model.property.editor
  */
 public final class StringArrayPropertyEditor extends TextDialogPropertyEditor {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final PropertyEditor INSTANCE = new StringArrayPropertyEditor();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final PropertyEditor INSTANCE = new StringArrayPropertyEditor();
 
-  private StringArrayPropertyEditor() {
-  }
+	private StringArrayPropertyEditor() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getText(Property property) throws Exception {
-    String[] items = getItems(property);
-    return "[" + StringUtils.join(items, ", ") + "]";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getText(Property property) throws Exception {
+		String[] items = getItems(property);
+		return "[" + StringUtils.join(items, ", ") + "]";
+	}
 
-  /**
-   * @return the items specified in value of given {@link Property}.
-   */
-  private static String[] getItems(Property property) throws Exception {
-    Object value = property.getValue();
-    if (value instanceof String[]) {
-      return (String[]) value;
-    }
-    // no items
-    return ArrayUtils.EMPTY_STRING_ARRAY;
-  }
+	/**
+	 * @return the items specified in value of given {@link Property}.
+	 */
+	private static String[] getItems(Property property) throws Exception {
+		Object value = property.getValue();
+		if (value instanceof String[]) {
+			return (String[]) value;
+		}
+		// no items
+		return ArrayUtils.EMPTY_STRING_ARRAY;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void openDialog(Property property) throws Exception {
-    StringsDialog itemsDialog =
-        new StringsDialog(DesignerPlugin.getShell(),
-            DesignerPlugin.getDefault(),
-            property.getTitle(),
-            ModelMessages.StringArrayPropertyEditor_itemsLabel,
-            ModelMessages.StringArrayPropertyEditor_hint);
-    itemsDialog.setItems(getItems(property));
-    // open dialog
-    if (itemsDialog.open() == Window.OK) {
-      property.setValue(itemsDialog.getItems());
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void openDialog(Property property) throws Exception {
+		StringsDialog itemsDialog =
+				new StringsDialog(DesignerPlugin.getShell(),
+						DesignerPlugin.getDefault(),
+						property.getTitle(),
+						ModelMessages.StringArrayPropertyEditor_itemsLabel,
+						ModelMessages.StringArrayPropertyEditor_hint);
+		itemsDialog.setItems(getItems(property));
+		// open dialog
+		if (itemsDialog.open() == Window.OK) {
+			property.setValue(itemsDialog.getItems());
+		}
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/StringComboPropertyEditor.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/StringComboPropertyEditor.java
index aeb413df6..a8faff483 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/StringComboPropertyEditor.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/StringComboPropertyEditor.java
@@ -20,46 +20,46 @@
  * @coverage core.model.property.editor
  */
 public class StringComboPropertyEditor extends AbstractComboPropertyEditor {
-  private final String[] m_items;
+	private final String[] m_items;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public StringComboPropertyEditor(String... items) {
-    m_items = items;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public StringComboPropertyEditor(String... items) {
+		m_items = items;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getText(Property property) throws Exception {
-    return (String) property.getValue();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getText(Property property) throws Exception {
+		return (String) property.getValue();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AbstractComboPropertyEditor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void addItems(Property property, CCombo3 combo) throws Exception {
-    for (String item : m_items) {
-      combo.add(item);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AbstractComboPropertyEditor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void addItems(Property property, CCombo3 combo) throws Exception {
+		for (String item : m_items) {
+			combo.add(item);
+		}
+	}
 
-  @Override
-  protected void selectItem(Property property, CCombo3 combo) throws Exception {
-    combo.setText(getText(property));
-  }
+	@Override
+	protected void selectItem(Property property, CCombo3 combo) throws Exception {
+		combo.setText(getText(property));
+	}
 
-  @Override
-  protected void toPropertyEx(Property property, CCombo3 combo, int index) throws Exception {
-    property.setValue(m_items[index]);
-  }
+	@Override
+	protected void toPropertyEx(Property property, CCombo3 combo, int index) throws Exception {
+		property.setValue(m_items[index]);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/TextControlActionsManager.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/TextControlActionsManager.java
index e737b12d8..49ace36bd 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/TextControlActionsManager.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/TextControlActionsManager.java
@@ -22,25 +22,25 @@
  * @coverage core.model.property.editor
  */
 public final class TextControlActionsManager extends DefaultControlActionsManager {
-  private final Text m_text;
+	private final Text m_text;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public TextControlActionsManager(final Text text) {
-    super(text);
-    m_text = text;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public TextControlActionsManager(final Text text) {
+		super(text);
+		m_text = text;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Handlers
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void selectAllExecuted() {
-    m_text.selectAll();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Handlers
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void selectAllExecuted() {
+		m_text.selectAll();
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/TextDialogPropertyEditor.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/TextDialogPropertyEditor.java
index 36944bea5..59f98368e 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/TextDialogPropertyEditor.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/TextDialogPropertyEditor.java
@@ -24,41 +24,41 @@
  * @coverage core.model.property.editor
  */
 public abstract class TextDialogPropertyEditor extends TextDisplayPropertyEditor {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final PropertyEditorPresentation m_presentation = new ButtonPropertyEditorPresentation() {
-    @Override
-    protected void onClick(PropertyTable propertyTable, Property property) throws Exception {
-      openDialog(property);
-    }
-  };
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final PropertyEditorPresentation m_presentation = new ButtonPropertyEditorPresentation() {
+		@Override
+		protected void onClick(PropertyTable propertyTable, Property property) throws Exception {
+			openDialog(property);
+		}
+	};
 
-  @Override
-  public final PropertyEditorPresentation getPresentation() {
-    return m_presentation;
-  }
+	@Override
+	public final PropertyEditorPresentation getPresentation() {
+		return m_presentation;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean activate(PropertyTable propertyTable, Property property, Point location)
-      throws Exception {
-    // activate using keyboard
-    if (location == null) {
-      openDialog(property);
-    }
-    // don't activate
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean activate(PropertyTable propertyTable, Property property, Point location)
+			throws Exception {
+		// activate using keyboard
+		if (location == null) {
+			openDialog(property);
+		}
+		// don't activate
+		return false;
+	}
 
-  /**
-   * Opens editing dialog.
-   */
-  protected abstract void openDialog(Property property) throws Exception;
+	/**
+	 * Opens editing dialog.
+	 */
+	protected abstract void openDialog(Property property) throws Exception;
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/TextDisplayPropertyEditor.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/TextDisplayPropertyEditor.java
index 4d93e7d20..63bb8f32a 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/TextDisplayPropertyEditor.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/TextDisplayPropertyEditor.java
@@ -25,43 +25,43 @@
  * @coverage core.model.property.editor
  */
 public abstract class TextDisplayPropertyEditor extends PropertyEditor {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void paint(Property property, GC gc, int x, int y, int width, int height) throws Exception {
-    String text = getText(property);
-    if (text != null) {
-      DrawUtils.drawStringCV(gc, text, x, y, width, height);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void paint(Property property, GC gc, int x, int y, int width, int height) throws Exception {
+		String text = getText(property);
+		if (text != null) {
+			DrawUtils.drawStringCV(gc, text, x, y, width, height);
+		}
+	}
 
-  /**
-   * @return the text for displaying value of given {@link Property} or <code>null</code> if value
-   *         of {@link Property} is unknown.
-   */
-  protected abstract String getText(Property property) throws Exception;
+	/**
+	 * @return the text for displaying value of given {@link Property} or <code>null</code> if value
+	 *         of {@link Property} is unknown.
+	 */
+	protected abstract String getText(Property property) throws Exception;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IAdaptable
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public <T> T getAdapter(Class<T> adapter) {
-    // tooltip for value text
-    if (adapter == PropertyTooltipProvider.class) {
-      return adapter.cast(createPropertyTooltipProvider());
-    }
-    return super.getAdapter(adapter);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IAdaptable
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public <T> T getAdapter(Class<T> adapter) {
+		// tooltip for value text
+		if (adapter == PropertyTooltipProvider.class) {
+			return adapter.cast(createPropertyTooltipProvider());
+		}
+		return super.getAdapter(adapter);
+	}
 
-  /**
-   * @return the {@link PropertyTooltipProvider} to display value tooltip.
-   */
-  protected PropertyTooltipProvider createPropertyTooltipProvider() {
-    return null;
-  }
+	/**
+	 * @return the {@link PropertyTooltipProvider} to display value tooltip.
+	 */
+	protected PropertyTooltipProvider createPropertyTooltipProvider() {
+		return null;
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/complex/IComplexPropertyEditor.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/complex/IComplexPropertyEditor.java
index f8acd2a5c..7c25ed8df 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/complex/IComplexPropertyEditor.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/complex/IComplexPropertyEditor.java
@@ -20,8 +20,8 @@
  * @coverage core.model.property.editor
  */
 public interface IComplexPropertyEditor {
-  /**
-   * @return sub-properties of given complex property.
-   */
-  Property[] getProperties(Property property) throws Exception;
+	/**
+	 * @return sub-properties of given complex property.
+	 */
+	Property[] getProperties(Property property) throws Exception;
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/geometry/AbstractGeometryDialog.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/geometry/AbstractGeometryDialog.java
index a7cea447b..fae7d2e26 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/geometry/AbstractGeometryDialog.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/geometry/AbstractGeometryDialog.java
@@ -36,110 +36,110 @@
  * @coverage swing.property.editor
  */
 public abstract class AbstractGeometryDialog extends Dialog {
-  private final String m_title;
-  private final Object m_object;
+	private final String m_title;
+	private final Object m_object;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractGeometryDialog(String title, Object object) {
-    super(DesignerPlugin.getShell());
-    m_title = title;
-    m_object = object;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractGeometryDialog(String title, Object object) {
+		super(DesignerPlugin.getShell());
+		m_title = title;
+		m_object = object;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Composite m_area;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Composite m_area;
 
-  @Override
-  protected final Control createDialogArea(Composite parent) {
-    m_area = new Composite(parent, SWT.NONE);
-    GridDataFactory.create(m_area).grab().fill();
-    GridLayoutFactory.create(m_area).margins(10).columns(3);
-    //
-    createEditors();
-    return m_area;
-  }
+	@Override
+	protected final Control createDialogArea(Composite parent) {
+		m_area = new Composite(parent, SWT.NONE);
+		GridDataFactory.create(m_area).grab().fill();
+		GridLayoutFactory.create(m_area).margins(10).columns(3);
+		//
+		createEditors();
+		return m_area;
+	}
 
-  /**
-   * Creates editors using {@link #createEditor(String, String)}.
-   */
-  protected abstract void createEditors();
+	/**
+	 * Creates editors using {@link #createEditor(String, String)}.
+	 */
+	protected abstract void createEditors();
 
-  @Override
-  protected final void createButtonsForButtonBar(Composite parent) {
-    createButton(
-        parent,
-        IDialogConstants.IGNORE_ID,
-        ModelMessages.AbstractGeometryDialog_defaultButton,
-        false);
-    super.createButtonsForButtonBar(parent);
-  }
+	@Override
+	protected final void createButtonsForButtonBar(Composite parent) {
+		createButton(
+				parent,
+				IDialogConstants.IGNORE_ID,
+				ModelMessages.AbstractGeometryDialog_defaultButton,
+				false);
+		super.createButtonsForButtonBar(parent);
+	}
 
-  @Override
-  protected final void buttonPressed(int buttonId) {
-    if (buttonId == IDialogConstants.IGNORE_ID) {
-      setReturnCode(buttonId);
-      close();
-    }
-    super.buttonPressed(buttonId);
-  }
+	@Override
+	protected final void buttonPressed(int buttonId) {
+		if (buttonId == IDialogConstants.IGNORE_ID) {
+			setReturnCode(buttonId);
+			close();
+		}
+		super.buttonPressed(buttonId);
+	}
 
-  @Override
-  protected final void configureShell(Shell newShell) {
-    super.configureShell(newShell);
-    newShell.setText(m_title);
-  }
+	@Override
+	protected final void configureShell(Shell newShell) {
+		super.configureShell(newShell);
+		newShell.setText(m_title);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected final void createEditor(String title, String fieldName) {
-    // title
-    {
-      Label titleLabel = new Label(m_area, SWT.NONE);
-      GridDataFactory.create(titleLabel).hintHC(15);
-      titleLabel.setText(title);
-    }
-    // spinner
-    {
-      final CSpinner spinner = new CSpinner(m_area, SWT.BORDER);
-      GridDataFactory.create(spinner).hintHC(8).grabH().fillH();
-      spinner.setMinimum(0);
-      spinner.setMaximum(Integer.MAX_VALUE);
-      // bind control to field
-      try {
-        final Field field = ReflectionUtils.getFieldByName(m_object.getClass(), fieldName);
-        // copy value from Object to control
-        {
-          int value = field.getInt(m_object);
-          spinner.setSelection(value);
-        }
-        // add listeners
-        spinner.addListener(SWT.Selection, new Listener() {
-          @Override
-          public void handleEvent(Event event) {
-            try {
-              field.setInt(m_object, spinner.getSelection());
-            } catch (Throwable e) {
-            }
-          }
-        });
-      } catch (Throwable e) {
-      }
-    }
-    // pixels
-    {
-      Label pixelsLabel = new Label(m_area, SWT.NONE);
-      pixelsLabel.setText(ModelMessages.AbstractGeometryDialog_pixelsLabel);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected final void createEditor(String title, String fieldName) {
+		// title
+		{
+			Label titleLabel = new Label(m_area, SWT.NONE);
+			GridDataFactory.create(titleLabel).hintHC(15);
+			titleLabel.setText(title);
+		}
+		// spinner
+		{
+			final CSpinner spinner = new CSpinner(m_area, SWT.BORDER);
+			GridDataFactory.create(spinner).hintHC(8).grabH().fillH();
+			spinner.setMinimum(0);
+			spinner.setMaximum(Integer.MAX_VALUE);
+			// bind control to field
+			try {
+				final Field field = ReflectionUtils.getFieldByName(m_object.getClass(), fieldName);
+				// copy value from Object to control
+				{
+					int value = field.getInt(m_object);
+					spinner.setSelection(value);
+				}
+				// add listeners
+				spinner.addListener(SWT.Selection, new Listener() {
+					@Override
+					public void handleEvent(Event event) {
+						try {
+							field.setInt(m_object, spinner.getSelection());
+						} catch (Throwable e) {
+						}
+					}
+				});
+			} catch (Throwable e) {
+			}
+		}
+		// pixels
+		{
+			Label pixelsLabel = new Label(m_area, SWT.NONE);
+			pixelsLabel.setText(ModelMessages.AbstractGeometryDialog_pixelsLabel);
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/presentation/ButtonPropertyEditorPresentation.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/presentation/ButtonPropertyEditorPresentation.java
index 81571198e..bd8cf4698 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/presentation/ButtonPropertyEditorPresentation.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/presentation/ButtonPropertyEditorPresentation.java
@@ -27,88 +27,88 @@
  * @coverage core.model.property.editor
  */
 public abstract class ButtonPropertyEditorPresentation extends PropertyEditorPresentation {
-  private final int m_style;
-  private final ButtonPropertyEditorPresentationImpl m_impl;
+	private final int m_style;
+	private final ButtonPropertyEditorPresentationImpl m_impl;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ButtonPropertyEditorPresentation() {
-    this(SWT.NONE);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ButtonPropertyEditorPresentation() {
+		this(SWT.NONE);
+	}
 
-  public ButtonPropertyEditorPresentation(int style) {
-    m_style = style;
-    m_impl =
-        EnvironmentUtils.IS_MAC
-            ? new ButtonPropertyEditorPresentationImplMac(this)
-            : new ButtonPropertyEditorPresentationImpl(this);
-  }
+	public ButtonPropertyEditorPresentation(int style) {
+		m_style = style;
+		m_impl =
+				EnvironmentUtils.IS_MAC
+				? new ButtonPropertyEditorPresentationImplMac(this)
+						: new ButtonPropertyEditorPresentationImpl(this);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets "selection" property of {@link Button}.
-   */
-  public final void setSelection(PropertyTable propertyTable, Property property, boolean selected) {
-    m_impl.setSelection(propertyTable, property, selected);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets "selection" property of {@link Button}.
+	 */
+	public final void setSelection(PropertyTable propertyTable, Property property, boolean selected) {
+		m_impl.setSelection(propertyTable, property, selected);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // PropertyEditorPresentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final int show(final PropertyTable propertyTable,
-      final Property property,
-      final int x,
-      final int y,
-      final int width,
-      final int height) {
-    return m_impl.show(propertyTable, property, x, y, width, height);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// PropertyEditorPresentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final int show(final PropertyTable propertyTable,
+			final Property property,
+			final int x,
+			final int y,
+			final int width,
+			final int height) {
+		return m_impl.show(propertyTable, property, x, y, width, height);
+	}
 
-  @Override
-  public final void hide(PropertyTable propertyTable, Property property) {
-    m_impl.hide(propertyTable, property);
-  }
+	@Override
+	public final void hide(PropertyTable propertyTable, Property property) {
+		m_impl.hide(propertyTable, property);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  final int getStyle() {
-    return m_style;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	final int getStyle() {
+		return m_style;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Implementation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link Image} to display on {@link Button}.
-   */
-  protected Image getImage() {
-    return DesignerPlugin.getImage("properties/dots.gif");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Implementation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link Image} to display on {@link Button}.
+	 */
+	protected Image getImage() {
+		return DesignerPlugin.getImage("properties/dots.gif");
+	}
 
-  /**
-   * @return the tooltip text to display for {@link Button}.
-   */
-  protected String getTooltip() {
-    return null;
-  }
+	/**
+	 * @return the tooltip text to display for {@link Button}.
+	 */
+	protected String getTooltip() {
+		return null;
+	}
 
-  /**
-   * Handles click on {@link Button}.
-   */
-  protected abstract void onClick(PropertyTable propertyTable, Property property) throws Exception;
+	/**
+	 * Handles click on {@link Button}.
+	 */
+	protected abstract void onClick(PropertyTable propertyTable, Property property) throws Exception;
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/presentation/ButtonPropertyEditorPresentationImpl.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/presentation/ButtonPropertyEditorPresentationImpl.java
index b9bf9f95e..14b15677a 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/presentation/ButtonPropertyEditorPresentationImpl.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/presentation/ButtonPropertyEditorPresentationImpl.java
@@ -30,177 +30,177 @@
  * @coverage core.model.property.editor
  */
 class ButtonPropertyEditorPresentationImpl extends PropertyEditorPresentation {
-  protected final PropertyToControlMap m_propertyToControl = new PropertyToControlMap();
-  private final ButtonPropertyEditorPresentation m_presentation;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ButtonPropertyEditorPresentationImpl(ButtonPropertyEditorPresentation presentation) {
-    m_presentation = presentation;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // PropertyEditorPresentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final void hide(PropertyTable propertyTable, Property property) {
-    Control control = m_propertyToControl.remove(propertyTable, property);
-    if (control != null) {
-      control.dispose();
-    }
-  }
-
-  @Override
-  public final int show(PropertyTable propertyTable,
-      Property property,
-      int x,
-      int y,
-      int width,
-      int height) {
-    // prepare control
-    Control control = m_propertyToControl.get(propertyTable, property);
-    if (control == null) {
-      control = createControl(propertyTable, property);
-    }
-    // set bounds
-    final int controlWidth = height;
-    final int controlX = x + width - controlWidth;
-    setBounds(control, controlX, y, controlWidth, height);
-    return controlWidth;
-  }
-
-  /**
-   * Finds and select the appropriate {@link Control} belonging to given property.
-   */
-  public void setSelection(PropertyTable propertyTable, Property property, boolean selected) {
-    Button button = (Button) m_propertyToControl.get(propertyTable, property);
-    if (button != null) {
-      button.setSelection(selected);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Control
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Creates the control for given property and initializes newly created control.
-   */
-  private Control createControl(final PropertyTable propertyTable, final Property property) {
-    Control control = createControlImpl(propertyTable, property);
-    m_propertyToControl.put(propertyTable, property, control);
-    // when Control disposed, remove Control/Property from map to avoid memory leak
-    control.addListener(SWT.Dispose, e -> m_propertyToControl.remove(propertyTable, property));
-    // activate property on mouse down
-    control.addListener(SWT.MouseDown, event -> {
-        propertyTable.deactivateEditor(true);
-        propertyTable.setActiveProperty(property);
-      });
-    // return focus on propertyTable after click
-    control.addListener(SWT.MouseUp, event -> propertyTable.forceFocus());
-    // handle selection
-    control.addListener(SWT.Selection, event -> {
-        try {
-          getPresentation().onClick(propertyTable, property);
-        } catch (Throwable e) {
-          propertyTable.deactivateEditor(false);
-          propertyTable.handleException(e);
-        }
-      });
-    return control;
-  }
-
-  /**
-   * Creates the {@link Control} instance. By default, {@link Button} instance created.
-   */
-  protected Control createControlImpl(final PropertyTable propertyTable, final Property property) {
-    Button button = new Button(propertyTable, getPresentation().getStyle());
-    button.setImage(getPresentation().getImage());
-    button.setToolTipText(getPresentation().getTooltip());
-    return button;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the 'parent' presentation. Internal usage only.
-   */
-  protected final ButtonPropertyEditorPresentation getPresentation() {
-    return m_presentation;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets new bounds for {@link Control}, optimizing when possible.
-   */
-  private static void setBounds(Control control, int newX, int newY, int newWidth, int newHeight) {
-    // check, may be Control is invisible, so no reason to change bounds
-    {
-      // is in negative zone
-      if (newY + newHeight < 0) {
-        control.setVisible(false);
-        return;
-      }
-      // is out of client area height
-      Rectangle parentArea = control.getParent().getClientArea();
-      if (newY > parentArea.height) {
-        control.setVisible(false);
-        return;
-      }
-    }
-    // well, now we sure that Control is visible
-    if (!control.getVisible()) {
-      control.setVisible(true);
-    }
-    // prepare old size, remember new
-    Integer oldWidthObject = (Integer) control.getData("oldWidth");
-    Integer oldHeightObject = (Integer) control.getData("oldHeight");
-    control.setData("oldWidth", newWidth);
-    control.setData("oldHeight", newHeight);
-    // check, may be same size
-    if (oldWidthObject != null) {
-      int oldWidth = oldWidthObject.intValue();
-      int oldHeight = oldHeightObject.intValue();
-      if (oldWidth == newWidth && oldHeight == newHeight) {
-        control.setLocation(newX, newY);
-        return;
-      }
-    }
-    // no any optimization possible, just set bounds
-    control.setBounds(newX, newY, newWidth, newHeight);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Controls map
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected static final class PropertyToControlMap {
-    private final Map<Pair<PropertyTable, Property>, Control> m_map = new HashMap<>();
-
-    void put(PropertyTable propertyTable, Property property, Control control) {
-      m_map.put(Pair.create(propertyTable, property), control);
-    }
-
-    Control remove(PropertyTable propertyTable, Property property) {
-      return m_map.remove(Pair.create(propertyTable, property));
-    }
-
-    Control get(PropertyTable propertyTable, Property property) {
-      return m_map.get(Pair.create(propertyTable, property));
-    }
-  }
+	protected final PropertyToControlMap m_propertyToControl = new PropertyToControlMap();
+	private final ButtonPropertyEditorPresentation m_presentation;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ButtonPropertyEditorPresentationImpl(ButtonPropertyEditorPresentation presentation) {
+		m_presentation = presentation;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// PropertyEditorPresentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final void hide(PropertyTable propertyTable, Property property) {
+		Control control = m_propertyToControl.remove(propertyTable, property);
+		if (control != null) {
+			control.dispose();
+		}
+	}
+
+	@Override
+	public final int show(PropertyTable propertyTable,
+			Property property,
+			int x,
+			int y,
+			int width,
+			int height) {
+		// prepare control
+		Control control = m_propertyToControl.get(propertyTable, property);
+		if (control == null) {
+			control = createControl(propertyTable, property);
+		}
+		// set bounds
+		final int controlWidth = height;
+		final int controlX = x + width - controlWidth;
+		setBounds(control, controlX, y, controlWidth, height);
+		return controlWidth;
+	}
+
+	/**
+	 * Finds and select the appropriate {@link Control} belonging to given property.
+	 */
+	public void setSelection(PropertyTable propertyTable, Property property, boolean selected) {
+		Button button = (Button) m_propertyToControl.get(propertyTable, property);
+		if (button != null) {
+			button.setSelection(selected);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Control
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Creates the control for given property and initializes newly created control.
+	 */
+	private Control createControl(final PropertyTable propertyTable, final Property property) {
+		Control control = createControlImpl(propertyTable, property);
+		m_propertyToControl.put(propertyTable, property, control);
+		// when Control disposed, remove Control/Property from map to avoid memory leak
+		control.addListener(SWT.Dispose, e -> m_propertyToControl.remove(propertyTable, property));
+		// activate property on mouse down
+		control.addListener(SWT.MouseDown, event -> {
+			propertyTable.deactivateEditor(true);
+			propertyTable.setActiveProperty(property);
+		});
+		// return focus on propertyTable after click
+		control.addListener(SWT.MouseUp, event -> propertyTable.forceFocus());
+		// handle selection
+		control.addListener(SWT.Selection, event -> {
+			try {
+				getPresentation().onClick(propertyTable, property);
+			} catch (Throwable e) {
+				propertyTable.deactivateEditor(false);
+				propertyTable.handleException(e);
+			}
+		});
+		return control;
+	}
+
+	/**
+	 * Creates the {@link Control} instance. By default, {@link Button} instance created.
+	 */
+	protected Control createControlImpl(final PropertyTable propertyTable, final Property property) {
+		Button button = new Button(propertyTable, getPresentation().getStyle());
+		button.setImage(getPresentation().getImage());
+		button.setToolTipText(getPresentation().getTooltip());
+		return button;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the 'parent' presentation. Internal usage only.
+	 */
+	protected final ButtonPropertyEditorPresentation getPresentation() {
+		return m_presentation;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets new bounds for {@link Control}, optimizing when possible.
+	 */
+	private static void setBounds(Control control, int newX, int newY, int newWidth, int newHeight) {
+		// check, may be Control is invisible, so no reason to change bounds
+		{
+			// is in negative zone
+			if (newY + newHeight < 0) {
+				control.setVisible(false);
+				return;
+			}
+			// is out of client area height
+			Rectangle parentArea = control.getParent().getClientArea();
+			if (newY > parentArea.height) {
+				control.setVisible(false);
+				return;
+			}
+		}
+		// well, now we sure that Control is visible
+		if (!control.getVisible()) {
+			control.setVisible(true);
+		}
+		// prepare old size, remember new
+		Integer oldWidthObject = (Integer) control.getData("oldWidth");
+		Integer oldHeightObject = (Integer) control.getData("oldHeight");
+		control.setData("oldWidth", newWidth);
+		control.setData("oldHeight", newHeight);
+		// check, may be same size
+		if (oldWidthObject != null) {
+			int oldWidth = oldWidthObject.intValue();
+			int oldHeight = oldHeightObject.intValue();
+			if (oldWidth == newWidth && oldHeight == newHeight) {
+				control.setLocation(newX, newY);
+				return;
+			}
+		}
+		// no any optimization possible, just set bounds
+		control.setBounds(newX, newY, newWidth, newHeight);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Controls map
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected static final class PropertyToControlMap {
+		private final Map<Pair<PropertyTable, Property>, Control> m_map = new HashMap<>();
+
+		void put(PropertyTable propertyTable, Property property, Control control) {
+			m_map.put(Pair.create(propertyTable, property), control);
+		}
+
+		Control remove(PropertyTable propertyTable, Property property) {
+			return m_map.remove(Pair.create(propertyTable, property));
+		}
+
+		Control get(PropertyTable propertyTable, Property property) {
+			return m_map.get(Pair.create(propertyTable, property));
+		}
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/presentation/ButtonPropertyEditorPresentationImplMac.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/presentation/ButtonPropertyEditorPresentationImplMac.java
index 4fde55748..4c0188bf3 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/presentation/ButtonPropertyEditorPresentationImplMac.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/presentation/ButtonPropertyEditorPresentationImplMac.java
@@ -25,33 +25,33 @@
  * @coverage core.model.property.editor
  */
 final class ButtonPropertyEditorPresentationImplMac extends ButtonPropertyEditorPresentationImpl {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ButtonPropertyEditorPresentationImplMac(ButtonPropertyEditorPresentation presentation) {
-    super(presentation);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ButtonPropertyEditorPresentationImplMac(ButtonPropertyEditorPresentation presentation) {
+		super(presentation);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Control
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected final Control createControlImpl(final PropertyTable propertyTable, Property property) {
-    CFlatButton button = new CFlatButton(propertyTable, SWT.NONE);
-    button.setImage(getPresentation().getImage());
-    button.setToolTipText(getPresentation().getTooltip());
-    return button;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Control
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected final Control createControlImpl(final PropertyTable propertyTable, Property property) {
+		CFlatButton button = new CFlatButton(propertyTable, SWT.NONE);
+		button.setImage(getPresentation().getImage());
+		button.setToolTipText(getPresentation().getTooltip());
+		return button;
+	}
 
-  @Override
-  public final void setSelection(PropertyTable propertyTable, Property property, boolean selected) {
-    CFlatButton button = (CFlatButton) m_propertyToControl.get(propertyTable, property);
-    if (button != null) {
-      button.setSelected(selected);
-    }
-  }
+	@Override
+	public final void setSelection(PropertyTable propertyTable, Property property, boolean selected) {
+		CFlatButton button = (CFlatButton) m_propertyToControl.get(propertyTable, property);
+		if (button != null) {
+			button.setSelected(selected);
+		}
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/presentation/CompoundPropertyEditorPresentation.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/presentation/CompoundPropertyEditorPresentation.java
index 24dc56bb2..6563959f8 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/presentation/CompoundPropertyEditorPresentation.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/presentation/CompoundPropertyEditorPresentation.java
@@ -25,46 +25,46 @@
  * @coverage core.model.property.editor
  */
 public class CompoundPropertyEditorPresentation extends PropertyEditorPresentation {
-  private final List<PropertyEditorPresentation> m_presentations = Lists.newArrayList();
+	private final List<PropertyEditorPresentation> m_presentations = Lists.newArrayList();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds child {@link PropertyEditorPresentation}.<br>
-   * Child {@link PropertyEditorPresentation}'s are displayed from right to left.
-   */
-  public void add(PropertyEditorPresentation presentation) {
-    m_presentations.add(presentation);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds child {@link PropertyEditorPresentation}.<br>
+	 * Child {@link PropertyEditorPresentation}'s are displayed from right to left.
+	 */
+	public void add(PropertyEditorPresentation presentation) {
+		m_presentations.add(presentation);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // PropertyEditorPresentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public int show(PropertyTable propertyTable,
-      Property property,
-      int x,
-      int y,
-      int width,
-      int height) {
-    int sumWidth = 0;
-    for (PropertyEditorPresentation presentation : m_presentations) {
-      int presentationWidth = presentation.show(propertyTable, property, x, y, width, height);
-      sumWidth += presentationWidth;
-      width -= presentationWidth;
-    }
-    return sumWidth;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// PropertyEditorPresentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public int show(PropertyTable propertyTable,
+			Property property,
+			int x,
+			int y,
+			int width,
+			int height) {
+		int sumWidth = 0;
+		for (PropertyEditorPresentation presentation : m_presentations) {
+			int presentationWidth = presentation.show(propertyTable, property, x, y, width, height);
+			sumWidth += presentationWidth;
+			width -= presentationWidth;
+		}
+		return sumWidth;
+	}
 
-  @Override
-  public void hide(PropertyTable propertyTable, Property property) {
-    for (PropertyEditorPresentation presentation : m_presentations) {
-      presentation.hide(propertyTable, property);
-    }
-  }
+	@Override
+	public void hide(PropertyTable propertyTable, Property property) {
+		for (PropertyEditorPresentation presentation : m_presentations) {
+			presentation.hide(propertyTable, property);
+		}
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/presentation/PropertyEditorPresentation.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/presentation/PropertyEditorPresentation.java
index 3318a308f..fd04851ea 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/presentation/PropertyEditorPresentation.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/editor/presentation/PropertyEditorPresentation.java
@@ -22,20 +22,20 @@
  * @coverage core.model.property.editor
  */
 public abstract class PropertyEditorPresentation {
-  /**
-   * Shows presentation for given {@link Property}.
-   *
-   * @return the width that this presentation occupies on the right of given rectangle.
-   */
-  public abstract int show(PropertyTable propertyTable,
-      Property property,
-      int x,
-      int y,
-      int width,
-      int height);
+	/**
+	 * Shows presentation for given {@link Property}.
+	 *
+	 * @return the width that this presentation occupies on the right of given rectangle.
+	 */
+	public abstract int show(PropertyTable propertyTable,
+			Property property,
+			int x,
+			int y,
+			int width,
+			int height);
 
-  /**
-   * Hides presentation.
-   */
-  public abstract void hide(PropertyTable propertyTable, Property property);
+	/**
+	 * Hides presentation.
+	 */
+	public abstract void hide(PropertyTable propertyTable, Property property);
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/table/HtmlTooltipHelper.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/table/HtmlTooltipHelper.java
index 7dd4388f7..f28ad7d1b 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/table/HtmlTooltipHelper.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/table/HtmlTooltipHelper.java
@@ -49,258 +49,258 @@
  * @coverage core.model.property.table
  */
 public final class HtmlTooltipHelper {
-  public static Control createTooltipControl(Composite parent, String header, String details) {
-    return createTooltipControl(parent, header, details, 0);
-  }
-  public static Control createTooltipControl(Composite parent,
-      String header,
-      String details,
-      int heightLimit) {
-    // prepare Control
-    Control control;
-    try {
-      String html = "<table cellspacing=2 cellpadding=0 border=0 margins=0 id=_wbp_tooltip_body>";
-      if (header != null) {
-        html += "<tr align=center><td><b>" + header + "</b></td></tr>";
-      }
-      html += "<tr><td align=justify>" + details + "</td></tr>";
-      html += "</table>";
-      control = createTooltipControl_Browser(parent, html, heightLimit);
-    } catch (Throwable e) {
-      control = createTooltipControl_Label(parent, details);
-    }
-    // set listeners
-    {
-      Listener listener = new Listener() {
-        @Override
-        public void handleEvent(Event event) {
-          Control tooltipControl = (Control) event.widget;
-          hideTooltip(tooltipControl);
-        }
-      };
-      control.addListener(SWT.MouseExit, listener);
-    }
-    // done
-    return control;
-  }
-  /**
-   * Creates {@link Browser} for displaying tooltip.
-   */
-  private static Control createTooltipControl_Browser(Composite parent,
-      String html,
-      final int heightLimitChars) {
-    // prepare styles
-    String styles;
-    try {
-      styles = IOUtils2.readString(PropertyTable.class.getResourceAsStream("Tooltip.css"));
-    } catch (Throwable e) {
-      styles = "";
-    }
-    // prepare HTML with styles and tags
-    String wrappedHtml;
-    {
-      String bodyAttributes =
-          MessageFormat.format(
-              "text=''{0}'' bgcolor=''{1}''",
-              getColorWebString(IColorConstants.tooltipForeground),
-              getColorWebString(IColorConstants.tooltipBackground));
-      String closeElement =
-          EnvironmentUtils.IS_LINUX
-              ? "    <a href='' style='position:absolute;right:1em;' id=_wbp_close>Close</a>"
-              : "";
-      wrappedHtml =
-          StringUtils.join(new String[]{
-              "<html>",
-              "  <style CHARSET='ISO-8859-1' TYPE='text/css'>",
-              styles,
-              "  </style>",
-              "  <body " + bodyAttributes + ">",
-              closeElement,
-              html,
-              "  </body>",
-              "</html>"}, "\n");
-    }
-    // prepare Browser
-    final Browser browser = new Browser(parent, SWT.NONE);
-    browser.setText(wrappedHtml);
-    // open URLs in new window
-    browser.addLocationListener(new LocationAdapter() {
-      @Override
-      public void changing(LocationEvent event) {
-        event.doit = false;
-        hideTooltip((Browser) event.widget);
-        if (!"about:blank".equals(event.location)) {
-          try {
-            IWorkbenchBrowserSupport support = PlatformUI.getWorkbench().getBrowserSupport();
-            IWebBrowser browserSupport = support.createBrowser("wbp.browser");
-            browserSupport.openURL(new URL(event.location));
-          } catch (Throwable e) {
-            DesignerPlugin.log(e);
-          }
-        }
-      }
-    });
-    // set size
-    {
-      int textLength = getTextLength(html);
-      // horizontal hint
-      int hintH = 50;
-      if (textLength < 100) {
-        hintH = 40;
-      }
-      // vertical hint
-      int hintV = textLength / hintH + 3;
-      hintV = Math.min(hintV, 8);
-      // do set
-      GridDataFactory.create(browser).hintC(hintH, hintV);
-    }
-    // tweak size after rendering HTML
-    browser.addProgressListener(new ProgressAdapter() {
-      @Override
-      public void completed(ProgressEvent event) {
-        browser.removeProgressListener(this);
-        tweakBrowserSize(browser, heightLimitChars);
-        browser.getShell().setVisible(true);
-      }
-    });
-    // done
-    return browser;
-  }
-  private static void tweakBrowserSize(Browser browser, int heightLimitChars) {
-    GridDataFactory.create(browser).grab().fill();
-    // limit height
-    if (heightLimitChars != 0) {
-      PixelConverter pixelConverter = new PixelConverter(browser);
-      int maxHeight = pixelConverter.convertHeightInCharsToPixels(heightLimitChars);
-      expandShellToShowFullPage_Height(browser, maxHeight);
-    }
-    // if no limit, then show all, so make as tall as required
-    if (heightLimitChars == 0) {
-      expandShellToShowFullPage_Height(browser, Integer.MAX_VALUE);
-    }
-  }
-  private static void expandShellToShowFullPage_Height(Browser browser, int maxHeight) {
-    try {
-      Shell shell = browser.getShell();
-      // calculate required
-      int contentHeight;
-      {
-        getContentOffsetHeight(browser);
-        contentHeight = getContentScrollHeight(browser);
-      }
-      // apply height
-      int useHeight = Math.min(contentHeight + (EnvironmentUtils.IS_LINUX ? 2 : 10), maxHeight);
-      shell.setSize(shell.getSize().x, useHeight);
-      // trim height to content
-      {
-        int offsetHeight = getBodyOffsetHeight(browser);
-        int scrollHeight = getBodyScrollHeight(browser);
-        int delta = scrollHeight - offsetHeight;
-        if (delta != 0 && delta < 10) {
-          Point size = shell.getSize();
-          shell.setSize(size.x, size.y + delta + 1);
-        }
-      }
-      // trim width to content
-      {
-        int offsetWidth = getContentOffsetWidth(browser);
-        {
-          Point size = shell.getSize();
-          shell.setSize(offsetWidth + (EnvironmentUtils.IS_MAC ? 6 : 10), size.y);
-        }
-      }
-      // hide 'Close' if too narrow
-      if (EnvironmentUtils.IS_LINUX) {
-        if (shell.getSize().y < 30) {
-          hideCloseElement(browser);
-        }
-      }
-    } catch (Throwable e) {
-    }
-  }
-  private static int getContentOffsetWidth(Browser browser) throws Exception {
-    return evaluateScriptInt(
-        browser,
-        "return document.getElementById('_wbp_tooltip_body').offsetWidth;");
-  }
-  private static int getContentOffsetHeight(Browser browser) throws Exception {
-    return evaluateScriptInt(
-        browser,
-        "return document.getElementById('_wbp_tooltip_body').offsetHeight;");
-  }
-  private static int getContentScrollHeight(Browser browser) throws Exception {
-    return evaluateScriptInt(
-        browser,
-        "return document.getElementById('_wbp_tooltip_body').scrollHeight;");
-  }
-  private static int getBodyOffsetHeight(Browser browser) throws Exception {
-    return evaluateScriptInt(browser, "return document.body.offsetHeight;");
-  }
-  private static int getBodyScrollHeight(Browser browser) throws Exception {
-    return evaluateScriptInt(browser, "return document.body.scrollHeight;");
-  }
-  private static int evaluateScriptInt(Browser browser, String script) throws Exception {
-    Object o = ReflectionUtils.invokeMethod(browser, "evaluate(java.lang.String)", script);
-    return ((Number) o).intValue();
-  }
-  private static void hideCloseElement(Browser browser) throws Exception {
-    String script = "document.getElementById('_wbp_close').style.display = 'none'";
-    ReflectionUtils.invokeMethod(browser, "evaluate(java.lang.String)", script);
-  }
-  /**
-   * @return the length of text in given HTML. Uses internal class, so may fail, in this case
-   *         returns length on HTML.
-   */
-  private static int getTextLength(String html) {
-    StringReader htmlStringReader = new StringReader(html);
-    try {
-      ClassLoader classLoader = PropertyTable.class.getClassLoader();
-      Class<?> readerClass =
-          classLoader.loadClass("org.eclipse.jface.internal.text.html.HTML2TextReader");
-      Object reader = readerClass.getConstructors()[0].newInstance(htmlStringReader, null);
-      String text = (String) ReflectionUtils.invokeMethod(reader, "getString()");
-      return text.length();
-    } catch (Throwable e) {
-      return html.length();
-    }
-  }
-  /**
-   * Returns a string representation of {@link Color} suitable for web pages.
-   *
-   * @param color
-   *          the {@link Color} instance, not <code>null</code>.
-   * @return a string representation of {@link Color} suitable for web pages.
-   */
-  private static String getColorWebString(final Color color) {
-    String colorString = "#" + Integer.toHexString(color.getRed());
-    colorString += Integer.toHexString(color.getGreen());
-    colorString += Integer.toHexString(color.getBlue());
-    return colorString;
-  }
-  /**
-   * Creates {@link Label} if {@link Browser} can not be used.
-   */
-  private static Control createTooltipControl_Label(Composite parent, String html) {
-    // prepare Label
-    final Label label = new Label(parent, SWT.WRAP);
-    label.setText(html);
-    // set size
-    int requiredWidth = label.computeSize(SWT.DEFAULT, SWT.DEFAULT).x;
-    GridDataFactory.create(label).hintHC(50).hintHMin(requiredWidth);
-    // copy colors
-    label.setForeground(parent.getForeground());
-    label.setBackground(parent.getBackground());
-    // done
-    parent.getDisplay().asyncExec(new Runnable() {
-      @Override
-      public void run() {
-        Shell shell = label.getShell();
-        shell.setVisible(true);
-      }
-    });
-    return label;
-  }
-  private static void hideTooltip(Control tooltip) {
-    tooltip.getShell().dispose();
-  }
+	public static Control createTooltipControl(Composite parent, String header, String details) {
+		return createTooltipControl(parent, header, details, 0);
+	}
+	public static Control createTooltipControl(Composite parent,
+			String header,
+			String details,
+			int heightLimit) {
+		// prepare Control
+		Control control;
+		try {
+			String html = "<table cellspacing=2 cellpadding=0 border=0 margins=0 id=_wbp_tooltip_body>";
+			if (header != null) {
+				html += "<tr align=center><td><b>" + header + "</b></td></tr>";
+			}
+			html += "<tr><td align=justify>" + details + "</td></tr>";
+			html += "</table>";
+			control = createTooltipControl_Browser(parent, html, heightLimit);
+		} catch (Throwable e) {
+			control = createTooltipControl_Label(parent, details);
+		}
+		// set listeners
+		{
+			Listener listener = new Listener() {
+				@Override
+				public void handleEvent(Event event) {
+					Control tooltipControl = (Control) event.widget;
+					hideTooltip(tooltipControl);
+				}
+			};
+			control.addListener(SWT.MouseExit, listener);
+		}
+		// done
+		return control;
+	}
+	/**
+	 * Creates {@link Browser} for displaying tooltip.
+	 */
+	private static Control createTooltipControl_Browser(Composite parent,
+			String html,
+			final int heightLimitChars) {
+		// prepare styles
+		String styles;
+		try {
+			styles = IOUtils2.readString(PropertyTable.class.getResourceAsStream("Tooltip.css"));
+		} catch (Throwable e) {
+			styles = "";
+		}
+		// prepare HTML with styles and tags
+		String wrappedHtml;
+		{
+			String bodyAttributes =
+					MessageFormat.format(
+							"text=''{0}'' bgcolor=''{1}''",
+							getColorWebString(IColorConstants.tooltipForeground),
+							getColorWebString(IColorConstants.tooltipBackground));
+			String closeElement =
+					EnvironmentUtils.IS_LINUX
+					? "    <a href='' style='position:absolute;right:1em;' id=_wbp_close>Close</a>"
+							: "";
+			wrappedHtml =
+					StringUtils.join(new String[]{
+							"<html>",
+							"  <style CHARSET='ISO-8859-1' TYPE='text/css'>",
+							styles,
+							"  </style>",
+							"  <body " + bodyAttributes + ">",
+							closeElement,
+							html,
+							"  </body>",
+					"</html>"}, "\n");
+		}
+		// prepare Browser
+		final Browser browser = new Browser(parent, SWT.NONE);
+		browser.setText(wrappedHtml);
+		// open URLs in new window
+		browser.addLocationListener(new LocationAdapter() {
+			@Override
+			public void changing(LocationEvent event) {
+				event.doit = false;
+				hideTooltip((Browser) event.widget);
+				if (!"about:blank".equals(event.location)) {
+					try {
+						IWorkbenchBrowserSupport support = PlatformUI.getWorkbench().getBrowserSupport();
+						IWebBrowser browserSupport = support.createBrowser("wbp.browser");
+						browserSupport.openURL(new URL(event.location));
+					} catch (Throwable e) {
+						DesignerPlugin.log(e);
+					}
+				}
+			}
+		});
+		// set size
+		{
+			int textLength = getTextLength(html);
+			// horizontal hint
+			int hintH = 50;
+			if (textLength < 100) {
+				hintH = 40;
+			}
+			// vertical hint
+			int hintV = textLength / hintH + 3;
+			hintV = Math.min(hintV, 8);
+			// do set
+			GridDataFactory.create(browser).hintC(hintH, hintV);
+		}
+		// tweak size after rendering HTML
+		browser.addProgressListener(new ProgressAdapter() {
+			@Override
+			public void completed(ProgressEvent event) {
+				browser.removeProgressListener(this);
+				tweakBrowserSize(browser, heightLimitChars);
+				browser.getShell().setVisible(true);
+			}
+		});
+		// done
+		return browser;
+	}
+	private static void tweakBrowserSize(Browser browser, int heightLimitChars) {
+		GridDataFactory.create(browser).grab().fill();
+		// limit height
+		if (heightLimitChars != 0) {
+			PixelConverter pixelConverter = new PixelConverter(browser);
+			int maxHeight = pixelConverter.convertHeightInCharsToPixels(heightLimitChars);
+			expandShellToShowFullPage_Height(browser, maxHeight);
+		}
+		// if no limit, then show all, so make as tall as required
+		if (heightLimitChars == 0) {
+			expandShellToShowFullPage_Height(browser, Integer.MAX_VALUE);
+		}
+	}
+	private static void expandShellToShowFullPage_Height(Browser browser, int maxHeight) {
+		try {
+			Shell shell = browser.getShell();
+			// calculate required
+			int contentHeight;
+			{
+				getContentOffsetHeight(browser);
+				contentHeight = getContentScrollHeight(browser);
+			}
+			// apply height
+			int useHeight = Math.min(contentHeight + (EnvironmentUtils.IS_LINUX ? 2 : 10), maxHeight);
+			shell.setSize(shell.getSize().x, useHeight);
+			// trim height to content
+			{
+				int offsetHeight = getBodyOffsetHeight(browser);
+				int scrollHeight = getBodyScrollHeight(browser);
+				int delta = scrollHeight - offsetHeight;
+				if (delta != 0 && delta < 10) {
+					Point size = shell.getSize();
+					shell.setSize(size.x, size.y + delta + 1);
+				}
+			}
+			// trim width to content
+			{
+				int offsetWidth = getContentOffsetWidth(browser);
+				{
+					Point size = shell.getSize();
+					shell.setSize(offsetWidth + (EnvironmentUtils.IS_MAC ? 6 : 10), size.y);
+				}
+			}
+			// hide 'Close' if too narrow
+			if (EnvironmentUtils.IS_LINUX) {
+				if (shell.getSize().y < 30) {
+					hideCloseElement(browser);
+				}
+			}
+		} catch (Throwable e) {
+		}
+	}
+	private static int getContentOffsetWidth(Browser browser) throws Exception {
+		return evaluateScriptInt(
+				browser,
+				"return document.getElementById('_wbp_tooltip_body').offsetWidth;");
+	}
+	private static int getContentOffsetHeight(Browser browser) throws Exception {
+		return evaluateScriptInt(
+				browser,
+				"return document.getElementById('_wbp_tooltip_body').offsetHeight;");
+	}
+	private static int getContentScrollHeight(Browser browser) throws Exception {
+		return evaluateScriptInt(
+				browser,
+				"return document.getElementById('_wbp_tooltip_body').scrollHeight;");
+	}
+	private static int getBodyOffsetHeight(Browser browser) throws Exception {
+		return evaluateScriptInt(browser, "return document.body.offsetHeight;");
+	}
+	private static int getBodyScrollHeight(Browser browser) throws Exception {
+		return evaluateScriptInt(browser, "return document.body.scrollHeight;");
+	}
+	private static int evaluateScriptInt(Browser browser, String script) throws Exception {
+		Object o = ReflectionUtils.invokeMethod(browser, "evaluate(java.lang.String)", script);
+		return ((Number) o).intValue();
+	}
+	private static void hideCloseElement(Browser browser) throws Exception {
+		String script = "document.getElementById('_wbp_close').style.display = 'none'";
+		ReflectionUtils.invokeMethod(browser, "evaluate(java.lang.String)", script);
+	}
+	/**
+	 * @return the length of text in given HTML. Uses internal class, so may fail, in this case
+	 *         returns length on HTML.
+	 */
+	private static int getTextLength(String html) {
+		StringReader htmlStringReader = new StringReader(html);
+		try {
+			ClassLoader classLoader = PropertyTable.class.getClassLoader();
+			Class<?> readerClass =
+					classLoader.loadClass("org.eclipse.jface.internal.text.html.HTML2TextReader");
+			Object reader = readerClass.getConstructors()[0].newInstance(htmlStringReader, null);
+			String text = (String) ReflectionUtils.invokeMethod(reader, "getString()");
+			return text.length();
+		} catch (Throwable e) {
+			return html.length();
+		}
+	}
+	/**
+	 * Returns a string representation of {@link Color} suitable for web pages.
+	 *
+	 * @param color
+	 *          the {@link Color} instance, not <code>null</code>.
+	 * @return a string representation of {@link Color} suitable for web pages.
+	 */
+	private static String getColorWebString(final Color color) {
+		String colorString = "#" + Integer.toHexString(color.getRed());
+		colorString += Integer.toHexString(color.getGreen());
+		colorString += Integer.toHexString(color.getBlue());
+		return colorString;
+	}
+	/**
+	 * Creates {@link Label} if {@link Browser} can not be used.
+	 */
+	private static Control createTooltipControl_Label(Composite parent, String html) {
+		// prepare Label
+		final Label label = new Label(parent, SWT.WRAP);
+		label.setText(html);
+		// set size
+		int requiredWidth = label.computeSize(SWT.DEFAULT, SWT.DEFAULT).x;
+		GridDataFactory.create(label).hintHC(50).hintHMin(requiredWidth);
+		// copy colors
+		label.setForeground(parent.getForeground());
+		label.setBackground(parent.getBackground());
+		// done
+		parent.getDisplay().asyncExec(new Runnable() {
+			@Override
+			public void run() {
+				Shell shell = label.getShell();
+				shell.setVisible(true);
+			}
+		});
+		return label;
+	}
+	private static void hideTooltip(Control tooltip) {
+		tooltip.getShell().dispose();
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/table/IPropertyExceptionHandler.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/table/IPropertyExceptionHandler.java
index 4cc60a44c..ef0cca923 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/table/IPropertyExceptionHandler.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/table/IPropertyExceptionHandler.java
@@ -21,5 +21,5 @@
  * @coverage core.model.property.table
  */
 public interface IPropertyExceptionHandler {
-  void handle(Throwable e);
+	void handle(Throwable e);
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/table/IPropertyTooltipSite.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/table/IPropertyTooltipSite.java
index 383534a41..edcb49caa 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/table/IPropertyTooltipSite.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/table/IPropertyTooltipSite.java
@@ -18,13 +18,13 @@
  * @coverage core.model.property.table
  */
 public interface IPropertyTooltipSite {
-  /**
-   * @return the {@link PropertyTable} of this site.
-   */
-  PropertyTable getTable();
+	/**
+	 * @return the {@link PropertyTable} of this site.
+	 */
+	PropertyTable getTable();
 
-  /**
-   * Hides current tooltip.
-   */
-  void hideTooltip();
+	/**
+	 * Hides current tooltip.
+	 */
+	void hideTooltip();
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/table/PropertyTable.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/table/PropertyTable.java
index 032ecb96b..eb282aa48 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/table/PropertyTable.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/table/PropertyTable.java
@@ -76,7 +76,7 @@ public class PropertyTable extends Canvas implements ISelectionProvider {
 	private static final Color COLOR_PROPERTY_FG_TITLE = IColorConstants.listForeground;
 	private static final Color COLOR_PROPERTY_FG_VALUE = DrawUtils.isDarkColor(IColorConstants.listBackground)
 			? IColorConstants.lightBlue
-			: IColorConstants.darkBlue;
+					: IColorConstants.darkBlue;
 	private static final Color COLOR_PROPERTY_BG_SELECTED = IColorConstants.listSelection;
 	private static final Color COLOR_PROPERTY_FG_SELECTED = IColorConstants.listSelectionText;
 	private static final Color COLOR_PROPERTY_FG_ADVANCED = IColorConstants.gray;
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/table/PropertyTableTooltipHelper.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/table/PropertyTableTooltipHelper.java
index 3b8a61fd2..625bd109e 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/table/PropertyTableTooltipHelper.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/table/PropertyTableTooltipHelper.java
@@ -30,168 +30,168 @@
  * @coverage core.model.property.table
  */
 class PropertyTableTooltipHelper implements IPropertyTooltipSite {
-  private final PropertyTable m_table;
-  private Shell m_tooltip;
+	private final PropertyTable m_table;
+	private Shell m_tooltip;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public PropertyTableTooltipHelper(PropertyTable table) {
-    m_table = table;
-    m_table.addListener(SWT.MouseHover, new Listener() {
-      @Override
-      public void handleEvent(Event event) {
-        if (event.stateMask == 0) {
-          showTooltip();
-        }
-      }
-    });
-    m_table.addListener(SWT.MouseExit, new Listener() {
-      @Override
-      public void handleEvent(Event event) {
-        // check, may be cursor is now on tooltip, so ignore this MouseExit
-        {
-          Control control = Display.getCurrent().getCursorControl();
-          while (control != null) {
-            if (control == m_tooltip) {
-              return;
-            }
-            control = control.getParent();
-          }
-        }
-        // no, we should hide tooltip
-        hideTooltip();
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public PropertyTableTooltipHelper(PropertyTable table) {
+		m_table = table;
+		m_table.addListener(SWT.MouseHover, new Listener() {
+			@Override
+			public void handleEvent(Event event) {
+				if (event.stateMask == 0) {
+					showTooltip();
+				}
+			}
+		});
+		m_table.addListener(SWT.MouseExit, new Listener() {
+			@Override
+			public void handleEvent(Event event) {
+				// check, may be cursor is now on tooltip, so ignore this MouseExit
+				{
+					Control control = Display.getCurrent().getCursorControl();
+					while (control != null) {
+						if (control == m_tooltip) {
+							return;
+						}
+						control = control.getParent();
+					}
+				}
+				// no, we should hide tooltip
+				hideTooltip();
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Property m_property;
-  private boolean m_onTitle;
-  private boolean m_onValue;
-  private int m_beginX;
-  private int m_endX;
-  private int m_y;
-  private int m_rowHeight;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Property m_property;
+	private boolean m_onTitle;
+	private boolean m_onValue;
+	private int m_beginX;
+	private int m_endX;
+	private int m_y;
+	private int m_rowHeight;
 
-  /**
-   * {@link PropertyTable} call this method to inform that cursor location was changed.
-   */
-  public void update(Property property,
-      boolean onTitle,
-      boolean onValue,
-      int beginX,
-      int endX,
-      int y,
-      int rowHeight) {
-    m_property = property;
-    m_onTitle = onTitle;
-    m_onValue = onValue;
-    m_beginX = beginX;
-    m_endX = endX;
-    m_y = y;
-    m_rowHeight = rowHeight;
-  }
+	/**
+	 * {@link PropertyTable} call this method to inform that cursor location was changed.
+	 */
+	public void update(Property property,
+			boolean onTitle,
+			boolean onValue,
+			int beginX,
+			int endX,
+			int y,
+			int rowHeight) {
+		m_property = property;
+		m_onTitle = onTitle;
+		m_onValue = onValue;
+		m_beginX = beginX;
+		m_endX = endX;
+		m_y = y;
+		m_rowHeight = rowHeight;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IPropertyTooltipSite
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public PropertyTable getTable() {
-    return m_table;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IPropertyTooltipSite
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public PropertyTable getTable() {
+		return m_table;
+	}
 
-  @Override
-  public void hideTooltip() {
-    if (m_tooltip != null && !m_tooltip.isDisposed()) {
-      m_tooltip.dispose();
-    }
-    m_tooltip = null;
-  }
+	@Override
+	public void hideTooltip() {
+		if (m_tooltip != null && !m_tooltip.isDisposed()) {
+			m_tooltip.dispose();
+		}
+		m_tooltip = null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Showing tooltip
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void showTooltip() {
-    hideTooltip();
-    // check for property
-    if (m_property == null) {
-      return;
-    }
-    //
-    if (m_onTitle) {
-      showTooltip(m_property, m_beginX, m_endX);
-    }
-    if (m_onValue) {
-      showTooltip(m_property.getEditor(), m_beginX, m_endX);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Showing tooltip
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void showTooltip() {
+		hideTooltip();
+		// check for property
+		if (m_property == null) {
+			return;
+		}
+		//
+		if (m_onTitle) {
+			showTooltip(m_property, m_beginX, m_endX);
+		}
+		if (m_onValue) {
+			showTooltip(m_property.getEditor(), m_beginX, m_endX);
+		}
+	}
 
-  private void showTooltip(IAdaptable adaptable, int startX, int endX) {
-    // prepare provider
-    PropertyTooltipProvider provider = null;
-    {
-      provider = adaptable.getAdapter(PropertyTooltipProvider.class);
-      if (provider == null) {
-        return;
-      }
-    }
-    // create Shell
-    {
-      m_tooltip = new Shell(m_table.getShell(), SWT.NO_FOCUS | SWT.ON_TOP | SWT.TOOL | SWT.SINGLE);
-      configureColors(m_tooltip);
-      GridLayoutFactory.create(m_tooltip).noMargins();
-    }
-    // prepare control
-    Control control = provider.createTooltipControl(m_property, m_tooltip, endX - startX, this);
-    if (control == null) {
-      hideTooltip();
-      return;
-    }
-    // show Shell
-    {
-      // prepare tooltip location
-      Point tooltipLocation;
-      if (provider.getTooltipPosition() == PropertyTooltipProvider.ON) {
-        tooltipLocation = m_table.toDisplay(new Point(startX, m_y));
-      } else {
-        tooltipLocation = m_table.toDisplay(new Point(startX, m_y + m_rowHeight));
-      }
-      // set location/size and open
-      m_tooltip.setLocation(tooltipLocation.x, tooltipLocation.y);
-      // for non-windows systems the tooltip may have invalid tooltip bounds
-      // because some widget's API functions may fail if tooltip content is not visible
-      // ex., on MacOSX tree widget's items has zero bounds since they are not yet visible.
-      // the workaround is to preset tooltip size to big values before any computeSize called.
-      if (!EnvironmentUtils.IS_WINDOWS) {
-        m_tooltip.setSize(1000, 1000);
-      }
-      m_tooltip.setSize(m_tooltip.computeSize(SWT.DEFAULT, SWT.DEFAULT));
-      provider.show(m_tooltip);
-    }
-  }
+	private void showTooltip(IAdaptable adaptable, int startX, int endX) {
+		// prepare provider
+		PropertyTooltipProvider provider = null;
+		{
+			provider = adaptable.getAdapter(PropertyTooltipProvider.class);
+			if (provider == null) {
+				return;
+			}
+		}
+		// create Shell
+		{
+			m_tooltip = new Shell(m_table.getShell(), SWT.NO_FOCUS | SWT.ON_TOP | SWT.TOOL | SWT.SINGLE);
+			configureColors(m_tooltip);
+			GridLayoutFactory.create(m_tooltip).noMargins();
+		}
+		// prepare control
+		Control control = provider.createTooltipControl(m_property, m_tooltip, endX - startX, this);
+		if (control == null) {
+			hideTooltip();
+			return;
+		}
+		// show Shell
+		{
+			// prepare tooltip location
+			Point tooltipLocation;
+			if (provider.getTooltipPosition() == PropertyTooltipProvider.ON) {
+				tooltipLocation = m_table.toDisplay(new Point(startX, m_y));
+			} else {
+				tooltipLocation = m_table.toDisplay(new Point(startX, m_y + m_rowHeight));
+			}
+			// set location/size and open
+			m_tooltip.setLocation(tooltipLocation.x, tooltipLocation.y);
+			// for non-windows systems the tooltip may have invalid tooltip bounds
+			// because some widget's API functions may fail if tooltip content is not visible
+			// ex., on MacOSX tree widget's items has zero bounds since they are not yet visible.
+			// the workaround is to preset tooltip size to big values before any computeSize called.
+			if (!EnvironmentUtils.IS_WINDOWS) {
+				m_tooltip.setSize(1000, 1000);
+			}
+			m_tooltip.setSize(m_tooltip.computeSize(SWT.DEFAULT, SWT.DEFAULT));
+			provider.show(m_tooltip);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets given {@link Control} correct background/foreground for tooltips.
-   */
-  private void configureColors(Control control) {
-    Display display = Display.getCurrent();
-    control.setForeground(display.getSystemColor(SWT.COLOR_INFO_FOREGROUND));
-    control.setBackground(display.getSystemColor(SWT.COLOR_INFO_BACKGROUND));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets given {@link Control} correct background/foreground for tooltips.
+	 */
+	private void configureColors(Control control) {
+		Display display = Display.getCurrent();
+		control.setForeground(display.getSystemColor(SWT.COLOR_INFO_FOREGROUND));
+		control.setBackground(display.getSystemColor(SWT.COLOR_INFO_BACKGROUND));
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/table/PropertyTooltipProvider.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/table/PropertyTooltipProvider.java
index fddd4906d..ad9e8fcc2 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/table/PropertyTooltipProvider.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/table/PropertyTooltipProvider.java
@@ -27,92 +27,92 @@
  * @coverage core.model.property.table
  */
 public abstract class PropertyTooltipProvider {
-  /**
-   * Show tooltip directly on property row.
-   */
-  public static final int ON = 0;
-  /**
-   * Show tooltip below property row.
-   */
-  public static final int BELOW = 1;
+	/**
+	 * Show tooltip directly on property row.
+	 */
+	public static final int ON = 0;
+	/**
+	 * Show tooltip below property row.
+	 */
+	public static final int BELOW = 1;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // PropertyTooltipProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Create tooltip control.
-   */
-  public abstract Control createTooltipControl(Property property,
-      Composite parent,
-      int availableWidth,
-      IPropertyTooltipSite site);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// PropertyTooltipProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Create tooltip control.
+	 */
+	public abstract Control createTooltipControl(Property property,
+			Composite parent,
+			int availableWidth,
+			IPropertyTooltipSite site);
 
-  /**
-   * Shows tooltip {@link Shell}.
-   */
-  public void show(Shell shell) {
-    shell.setVisible(true);
-  }
+	/**
+	 * Shows tooltip {@link Shell}.
+	 */
+	public void show(Shell shell) {
+		shell.setVisible(true);
+	}
 
-  /**
-   * Returns position for tooltip control. Usually we should show directly on same row, because we
-   * use tooltip to show just longer (full) text of property. But for "class" property we show
-   * hierarchy, so it is better show it below and allow user see also property row.
-   */
-  public int getTooltipPosition() {
-    return ON;
-  }
+	/**
+	 * Returns position for tooltip control. Usually we should show directly on same row, because we
+	 * use tooltip to show just longer (full) text of property. But for "class" property we show
+	 * hierarchy, so it is better show it below and allow user see also property row.
+	 */
+	public int getTooltipPosition() {
+		return ON;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tooltip listener
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * {@link Listener} that hides tooltip on mouse exit or click.
-   */
-  protected static final class HideListener implements Listener {
-    private final IPropertyTooltipSite m_site;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tooltip listener
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * {@link Listener} that hides tooltip on mouse exit or click.
+	 */
+	protected static final class HideListener implements Listener {
+		private final IPropertyTooltipSite m_site;
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public HideListener(IPropertyTooltipSite site) {
-      m_site = site;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public HideListener(IPropertyTooltipSite site) {
+			m_site = site;
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Listener
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public void handleEvent(Event event) {
-      Control tooltipControl = (Control) event.widget;
-      switch (event.type) {
-        case SWT.MouseDown : {
-          PropertyTable table = m_site.getTable();
-          // convert location from tooltip to table
-          Point p = new Point(event.x, event.y);
-          p = tooltipControl.toDisplay(p);
-          p = table.toControl(p);
-          // send MouseDown to table
-          Event newEvent = new Event();
-          newEvent.x = p.x;
-          newEvent.y = p.y;
-          table.notifyListeners(SWT.MouseDown, newEvent);
-          // hide tooltip
-          m_site.hideTooltip();
-          break;
-        }
-        case SWT.MouseExit :
-          m_site.hideTooltip();
-          break;
-      }
-    }
-  }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Listener
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public void handleEvent(Event event) {
+			Control tooltipControl = (Control) event.widget;
+			switch (event.type) {
+			case SWT.MouseDown : {
+				PropertyTable table = m_site.getTable();
+				// convert location from tooltip to table
+				Point p = new Point(event.x, event.y);
+				p = tooltipControl.toDisplay(p);
+				p = table.toControl(p);
+				// send MouseDown to table
+				Event newEvent = new Event();
+				newEvent.x = p.x;
+				newEvent.y = p.y;
+				table.notifyListeners(SWT.MouseDown, newEvent);
+				// hide tooltip
+				m_site.hideTooltip();
+				break;
+			}
+			case SWT.MouseExit :
+				m_site.hideTooltip();
+				break;
+			}
+		}
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/table/PropertyTooltipTextProvider.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/table/PropertyTooltipTextProvider.java
index e96b4dd45..1fbbf2876 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/table/PropertyTooltipTextProvider.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/property/table/PropertyTooltipTextProvider.java
@@ -23,43 +23,43 @@
  * @coverage core.model.property.table
  */
 public abstract class PropertyTooltipTextProvider extends PropertyTooltipProvider {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // PropertyTooltipProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Control createTooltipControl(Property property,
-      Composite parent,
-      int availableWidth,
-      IPropertyTooltipSite site) {
-    // prepare header and content
-    String header = null;
-    String content = null;
-    try {
-      header = property.getTitle();
-      content = getText(property);
-    } catch (Throwable e) {
-    }
-    if (header == null || content == null) {
-      return null;
-    }
-    // create tooltip Control
-    return HtmlTooltipHelper.createTooltipControl(parent, header, content, 8);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// PropertyTooltipProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Control createTooltipControl(Property property,
+			Composite parent,
+			int availableWidth,
+			IPropertyTooltipSite site) {
+		// prepare header and content
+		String header = null;
+		String content = null;
+		try {
+			header = property.getTitle();
+			content = getText(property);
+		} catch (Throwable e) {
+		}
+		if (header == null || content == null) {
+			return null;
+		}
+		// create tooltip Control
+		return HtmlTooltipHelper.createTooltipControl(parent, header, content, 8);
+	}
 
-  @Override
-  public void show(Shell shell) {
-    // do nothing, Shell will be displayed when Browser will complete rendering
-  }
+	@Override
+	public void show(Shell shell) {
+		// do nothing, Shell will be displayed when Browser will complete rendering
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Text
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the text to show as tooltip.
-   */
-  protected abstract String getText(Property property) throws Exception;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Text
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the text to show as tooltip.
+	 */
+	protected abstract String getText(Property property) throws Exception;
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/util/AbsoluteLayoutCreationFlowSupport.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/util/AbsoluteLayoutCreationFlowSupport.java
index 2402cef7c..9f0ca1220 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/util/AbsoluteLayoutCreationFlowSupport.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/util/AbsoluteLayoutCreationFlowSupport.java
@@ -32,94 +32,94 @@
  * @coverage core.model.util
  */
 public final class AbsoluteLayoutCreationFlowSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private AbsoluteLayoutCreationFlowSupport() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private AbsoluteLayoutCreationFlowSupport() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utilities
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Correct creation position according grid order.
-   *
-   * @param container
-   *          the {@link IAbstractComponentInfo} container has absolute layout.
-   * @param cildrenComponents
-   *          the list of {@link IAbstractComponentInfo} all children components in container.
-   * @param component
-   *          the {@link ComponentInfo} which modifications applies to.
-   * @param location
-   *          the {@link Point} of new location of component.
-   * @param size
-   *          the {@link Dimension} of new size of component. May be null.
-   */
-  public static void apply(IAbstractComponentInfo container,
-      List<? extends IAbstractComponentInfo> childrenComponents,
-      IAbstractComponentInfo component,
-      Point newLocation,
-      Dimension newSize) throws Exception {
-    Assert.isTrue(childrenComponents.contains(component));
-    Assert.isNotNull(newLocation);
-    // EnvironmentUtils.isTestingTime()
-    {
-      // force set bounds (for drops on tree & testing time)
-      checkBounds(component, newLocation, newSize);
-    }
-    // prepare columns and rows and distribute controls in them
-    List<ComponentGroup> columns = GridConvertionHelper.buildGroups(childrenComponents, true);
-    List<ComponentGroup> rows = GridConvertionHelper.buildGroups(childrenComponents, false);
-    // sort components in columns and rows
-    GridConvertionHelper.sortGroupsByTranspose(columns, rows);
-    GridConvertionHelper.sortGroupsByTranspose(rows, columns);
-    // ensure that columns and rows are sorted by start coordinates
-    GridConvertionHelper.sortGroups(columns);
-    GridConvertionHelper.sortGroups(rows);
-    // calculate begin/end for each column/row
-    GridConvertionHelper.updateBoundsGaps(columns, false);
-    GridConvertionHelper.updateBoundsGaps(rows, false);
-    // check grid position
-    IAbstractComponentInfo nextControl = getReferenceComponent(rows, component);
-    if (nextControl != GenericsUtils.getNextOrNull(childrenComponents, component)) {
-      GlobalState.getOrderProcessor().move(component, nextControl);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utilities
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Correct creation position according grid order.
+	 *
+	 * @param container
+	 *          the {@link IAbstractComponentInfo} container has absolute layout.
+	 * @param cildrenComponents
+	 *          the list of {@link IAbstractComponentInfo} all children components in container.
+	 * @param component
+	 *          the {@link ComponentInfo} which modifications applies to.
+	 * @param location
+	 *          the {@link Point} of new location of component.
+	 * @param size
+	 *          the {@link Dimension} of new size of component. May be null.
+	 */
+	public static void apply(IAbstractComponentInfo container,
+			List<? extends IAbstractComponentInfo> childrenComponents,
+			IAbstractComponentInfo component,
+			Point newLocation,
+			Dimension newSize) throws Exception {
+		Assert.isTrue(childrenComponents.contains(component));
+		Assert.isNotNull(newLocation);
+		// EnvironmentUtils.isTestingTime()
+		{
+			// force set bounds (for drops on tree & testing time)
+			checkBounds(component, newLocation, newSize);
+		}
+		// prepare columns and rows and distribute controls in them
+		List<ComponentGroup> columns = GridConvertionHelper.buildGroups(childrenComponents, true);
+		List<ComponentGroup> rows = GridConvertionHelper.buildGroups(childrenComponents, false);
+		// sort components in columns and rows
+		GridConvertionHelper.sortGroupsByTranspose(columns, rows);
+		GridConvertionHelper.sortGroupsByTranspose(rows, columns);
+		// ensure that columns and rows are sorted by start coordinates
+		GridConvertionHelper.sortGroups(columns);
+		GridConvertionHelper.sortGroups(rows);
+		// calculate begin/end for each column/row
+		GridConvertionHelper.updateBoundsGaps(columns, false);
+		GridConvertionHelper.updateBoundsGaps(rows, false);
+		// check grid position
+		IAbstractComponentInfo nextControl = getReferenceComponent(rows, component);
+		if (nextControl != GenericsUtils.getNextOrNull(childrenComponents, component)) {
+			GlobalState.getOrderProcessor().move(component, nextControl);
+		}
+	}
 
-  /**
-   * Check for new bounds is applied for component.
-   */
-  public static void checkBounds(IAbstractComponentInfo component, Point location, Dimension size) {
-    if (size == null) {
-      Rectangle bounds = component.getModelBounds();
-      size = bounds != null ? bounds.getSize() : new Dimension(1, 1);
-    } else {
-      size = size.getCopy();
-    }
-    // force set bounds
-    component.setModelBounds(new Rectangle(location.getCopy(), size));
-  }
+	/**
+	 * Check for new bounds is applied for component.
+	 */
+	public static void checkBounds(IAbstractComponentInfo component, Point location, Dimension size) {
+		if (size == null) {
+			Rectangle bounds = component.getModelBounds();
+			size = bounds != null ? bounds.getSize() : new Dimension(1, 1);
+		} else {
+			size = size.getCopy();
+		}
+		// force set bounds
+		component.setModelBounds(new Rectangle(location.getCopy(), size));
+	}
 
-  /**
-   * Locate reference component.
-   */
-  private static IAbstractComponentInfo getReferenceComponent(List<ComponentGroup> rows,
-      IAbstractComponentInfo component) {
-    boolean componentArrived = false;
-    for (ComponentGroup row : rows) {
-      for (ComponentInGroup componentInGroup : row.getComponents()) {
-        if (componentArrived) {
-          return componentInGroup.getComponent();
-        }
-        if (componentInGroup.getComponent() == component) {
-          componentArrived = true;
-        }
-      }
-    }
-    return null;
-  }
+	/**
+	 * Locate reference component.
+	 */
+	private static IAbstractComponentInfo getReferenceComponent(List<ComponentGroup> rows,
+			IAbstractComponentInfo component) {
+		boolean componentArrived = false;
+		for (ComponentGroup row : rows) {
+			for (ComponentInGroup componentInGroup : row.getComponents()) {
+				if (componentArrived) {
+					return componentInGroup.getComponent();
+				}
+				if (componentInGroup.getComponent() == component) {
+					componentArrived = true;
+				}
+			}
+		}
+		return null;
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/util/ObjectInfoAction.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/util/ObjectInfoAction.java
index e8151bd33..499c2e5e9 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/util/ObjectInfoAction.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/util/ObjectInfoAction.java
@@ -26,85 +26,85 @@
  * @coverage core.model.util
  */
 public abstract class ObjectInfoAction extends Action {
-  private final ObjectInfo m_object;
+	private final ObjectInfo m_object;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ObjectInfoAction(ObjectInfo object) {
-    this(object, null);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ObjectInfoAction(ObjectInfo object) {
+		this(object, null);
+	}
 
-  public ObjectInfoAction(ObjectInfo object, String text) {
-    this(object, text, (ImageDescriptor) null);
-  }
+	public ObjectInfoAction(ObjectInfo object, String text) {
+		this(object, text, (ImageDescriptor) null);
+	}
 
-  public ObjectInfoAction(ObjectInfo object, String text, ImageDescriptor image) {
-    this(object, text, image, AS_PUSH_BUTTON);
-  }
+	public ObjectInfoAction(ObjectInfo object, String text, ImageDescriptor image) {
+		this(object, text, image, AS_PUSH_BUTTON);
+	}
 
-  public ObjectInfoAction(ObjectInfo object, String text, Image image) {
-    this(object, text, new ImageImageDescriptor(image), AS_PUSH_BUTTON);
-  }
+	public ObjectInfoAction(ObjectInfo object, String text, Image image) {
+		this(object, text, new ImageImageDescriptor(image), AS_PUSH_BUTTON);
+	}
 
-  public ObjectInfoAction(ObjectInfo object, String text, int style) {
-    this(object, text, null, style);
-  }
+	public ObjectInfoAction(ObjectInfo object, String text, int style) {
+		this(object, text, null, style);
+	}
 
-  public ObjectInfoAction(ObjectInfo object, String text, ImageDescriptor image, int style) {
-    super(text, style);
-    setImageDescriptor(image);
-    m_object = object;
-  }
+	public ObjectInfoAction(ObjectInfo object, String text, ImageDescriptor image, int style) {
+		super(text, style);
+		setImageDescriptor(image);
+		m_object = object;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets {@link #setImageDescriptor(ImageDescriptor)} using given {@link Image} icon.
-   */
-  public void setIcon(Image icon) {
-    setImageDescriptor(new ImageImageDescriptor(icon));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets {@link #setImageDescriptor(ImageDescriptor)} using given {@link Image} icon.
+	 */
+	public void setIcon(Image icon) {
+		setImageDescriptor(new ImageImageDescriptor(icon));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Run
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final void run() {
-    ExecutionUtils.runLog(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        if (shouldRun()) {
-          ExecutionUtils.run(m_object, new RunnableEx() {
-            @Override
-            public void run() throws Exception {
-              runEx();
-            }
-          });
-        }
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Run
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final void run() {
+		ExecutionUtils.runLog(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				if (shouldRun()) {
+					ExecutionUtils.run(m_object, new RunnableEx() {
+						@Override
+						public void run() throws Exception {
+							runEx();
+						}
+					});
+				}
+			}
+		});
+	}
 
-  /**
-   * @return <code>true</code> if {@link #runEx()} should be run inside of edit operation.
-   */
-  protected boolean shouldRun() throws Exception {
-    if (getStyle() == AS_RADIO_BUTTON) {
-      return isChecked();
-    }
-    return true;
-  }
+	/**
+	 * @return <code>true</code> if {@link #runEx()} should be run inside of edit operation.
+	 */
+	protected boolean shouldRun() throws Exception {
+		if (getStyle() == AS_RADIO_BUTTON) {
+			return isChecked();
+		}
+		return true;
+	}
 
-  /**
-   * Executes some {@link ObjectInfo} editing operation.
-   */
-  protected abstract void runEx() throws Exception;
+	/**
+	 * Executes some {@link ObjectInfo} editing operation.
+	 */
+	protected abstract void runEx() throws Exception;
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/util/ObjectsLabelProvider.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/util/ObjectsLabelProvider.java
index f7bc26278..d57d4458b 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/util/ObjectsLabelProvider.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/util/ObjectsLabelProvider.java
@@ -26,62 +26,62 @@
  * @coverage core.model.util
  */
 public final class ObjectsLabelProvider extends LabelProvider {
-  public static final ObjectsLabelProvider INSTANCE = new ObjectsLabelProvider();
+	public static final ObjectsLabelProvider INSTANCE = new ObjectsLabelProvider();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private ObjectsLabelProvider() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private ObjectsLabelProvider() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // LabelProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Image getImage(final Object element) {
-    return ExecutionUtils.runObjectLog(new RunnableObjectEx<Image>() {
-      @Override
-      public Image runObject() throws Exception {
-        ObjectInfo objectInfo = (ObjectInfo) element;
-        Image icon = objectInfo.getPresentation().getIcon();
-        // decorate
-        {
-          Image[] decoratedIcon = new Image[]{icon};
-          objectInfo.getBroadcast(ObjectInfoPresentationDecorateIcon.class).invoke(
-              objectInfo,
-              decoratedIcon);
-          icon = decoratedIcon[0];
-        }
-        // final icon
-        return icon;
-      }
-    },
-        null);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// LabelProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Image getImage(final Object element) {
+		return ExecutionUtils.runObjectLog(new RunnableObjectEx<Image>() {
+			@Override
+			public Image runObject() throws Exception {
+				ObjectInfo objectInfo = (ObjectInfo) element;
+				Image icon = objectInfo.getPresentation().getIcon();
+				// decorate
+				{
+					Image[] decoratedIcon = new Image[]{icon};
+					objectInfo.getBroadcast(ObjectInfoPresentationDecorateIcon.class).invoke(
+							objectInfo,
+							decoratedIcon);
+					icon = decoratedIcon[0];
+				}
+				// final icon
+				return icon;
+			}
+		},
+				null);
+	}
 
-  @Override
-  public String getText(final Object element) {
-    return ExecutionUtils.runObjectLog(new RunnableObjectEx<String>() {
-      @Override
-      public String runObject() throws Exception {
-        ObjectInfo objectInfo = (ObjectInfo) element;
-        String text = objectInfo.getPresentation().getText();
-        // decorate
-        {
-          String[] decoratedText = new String[]{text};
-          objectInfo.getBroadcast(ObjectInfoPresentationDecorateText.class).invoke(
-              objectInfo,
-              decoratedText);
-          text = decoratedText[0];
-        }
-        // final text
-        return text;
-      }
-    },
-        "<exception, see log>");
-  }
+	@Override
+	public String getText(final Object element) {
+		return ExecutionUtils.runObjectLog(new RunnableObjectEx<String>() {
+			@Override
+			public String runObject() throws Exception {
+				ObjectInfo objectInfo = (ObjectInfo) element;
+				String text = objectInfo.getPresentation().getText();
+				// decorate
+				{
+					String[] decoratedText = new String[]{text};
+					objectInfo.getBroadcast(ObjectInfoPresentationDecorateText.class).invoke(
+							objectInfo,
+							decoratedText);
+					text = decoratedText[0];
+				}
+				// final text
+				return text;
+			}
+		},
+				"<exception, see log>");
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/util/ObjectsTreeContentProvider.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/util/ObjectsTreeContentProvider.java
index 2c71c1df9..f58381deb 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/util/ObjectsTreeContentProvider.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/util/ObjectsTreeContentProvider.java
@@ -27,63 +27,63 @@
  * @coverage core.model.util
  */
 public final class ObjectsTreeContentProvider implements ITreeContentProvider {
-  private final Predicate<ObjectInfo> m_predicate;
+	private final Predicate<ObjectInfo> m_predicate;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ObjectsTreeContentProvider(Predicate<ObjectInfo> predicate) {
-    m_predicate = predicate;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ObjectsTreeContentProvider(Predicate<ObjectInfo> predicate) {
+		m_predicate = predicate;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Input
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Object[] getElements(Object inputElement) {
-    if (inputElement instanceof Object[]) {
-      return (Object[]) inputElement;
-    } else {
-      return getChildren(inputElement);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Input
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Object[] getElements(Object inputElement) {
+		if (inputElement instanceof Object[]) {
+			return (Object[]) inputElement;
+		} else {
+			return getChildren(inputElement);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Children
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Object[] getChildren(Object parentElement) {
-    List<ObjectInfo> children = ((ObjectInfo) parentElement).getChildren();
-    Iterable<ObjectInfo> filtered = Iterables.filter(children, m_predicate);
-    return Iterables.toArray(filtered, ObjectInfo.class);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Children
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Object[] getChildren(Object parentElement) {
+		List<ObjectInfo> children = ((ObjectInfo) parentElement).getChildren();
+		Iterable<ObjectInfo> filtered = Iterables.filter(children, m_predicate);
+		return Iterables.toArray(filtered, ObjectInfo.class);
+	}
 
-  @Override
-  public boolean hasChildren(Object element) {
-    return getChildren(element).length != 0;
-  }
+	@Override
+	public boolean hasChildren(Object element) {
+		return getChildren(element).length != 0;
+	}
 
-  @Override
-  public Object getParent(Object element) {
-    return ((ObjectInfo) element).getParent();
-  }
+	@Override
+	public Object getParent(Object element) {
+		return ((ObjectInfo) element).getParent();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Life cycle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Life cycle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+	}
 
-  @Override
-  public void dispose() {
-  }
+	@Override
+	public void dispose() {
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/util/PropertyUtils.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/util/PropertyUtils.java
index 6bfd6b9b8..632c33927 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/util/PropertyUtils.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/util/PropertyUtils.java
@@ -35,198 +35,198 @@
  * @coverage core.model.util
  */
 public final class PropertyUtils {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private PropertyUtils() {
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the titles of given {@link Property}'s.
-   */
-  public static String[] getTitles(Property... properties) {
-    String[] titles = new String[properties.length];
-    for (int i = 0; i < properties.length; i++) {
-      Property property = properties[i];
-      titles[i] = property.getTitle();
-    }
-    return titles;
-  }
-  /**
-   * @return the titles of given {@link Property}'s.
-   */
-  public static List<String> getTitles(List<Property> properties) {
-    List<String> titles = Lists.newArrayList();
-    for (Property property : properties) {
-      titles.add(property.getTitle());
-    }
-    return titles;
-  }
-  /**
-   * @return the text presentation of {@link Property} value, may be <code>null</code>.
-   */
-  public static String getText(final Property property) {
-    return ExecutionUtils.runObjectIgnore(new RunnableObjectEx<String>() {
-      @Override
-      public String runObject() throws Exception {
-        return (String) ReflectionUtils.invokeMethod2(
-            property.getEditor(),
-            "getText",
-            Property.class,
-            property);
-      }
-    }, null);
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // getPropertyByTitle()
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static Property getByTitle(Property[] properties, String title) {
-    for (Property property : properties) {
-      if (title.equals(property.getTitle())) {
-        return property;
-      }
-    }
-    return null;
-  }
-  public static Property getByTitle(List<Property> properties, String title) {
-    for (Property property : properties) {
-      if (StringUtils.equals(title, property.getTitle())) {
-        return property;
-      }
-    }
-    return null;
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // getPropertyByPath()
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link Property} using "/" separated path.
-   */
-  public static Property getByPath(ObjectInfo object, String path) throws Exception {
-    return getByPath(object.getProperties(), path);
-  }
-  /**
-   * @return the {@link Property} using "/" separated path.
-   */
-  public static Property getByPath(List<Property> properties, String path) throws Exception {
-    Property[] propertiesArray = properties.toArray(new Property[properties.size()]);
-    return getByPath(propertiesArray, path);
-  }
-  /**
-   * @return the {@link Property} using "/" separated path.
-   */
-  public static Property getByPath(Property[] properties, String path) throws Exception {
-    Property property = null;
-    for (String pathElement : StringUtils.split(path, '/')) {
-      property = getByTitle(properties, pathElement);
-      properties = getChildren(property);
-    }
-    return property;
-  }
-  /**
-   * @return the {@link Property} using "/" separated path.
-   */
-  public static Property getByPath(Property property, String path) throws Exception {
-    return getByPath(getChildren(property), path);
-  }
-  /**
-   * @return sub-properties of given {@link Property}, may be empty array, but not <code>null</code>
-   *         .
-   */
-  public static Property[] getChildren(Property property) throws Exception {
-    if (property != null) {
-      if (property.getEditor() instanceof IComplexPropertyEditor) {
-        return ((IComplexPropertyEditor) property.getEditor()).getProperties(property);
-      }
-    }
-    return new Property[0];
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Filter
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link Property}'s that satisfy given {@link Predicate}.
-   */
-  public static List<Property> getProperties(ObjectInfo objectInfo, Predicate<Property> predicate)
-      throws Exception {
-    Property[] properties = objectInfo.getProperties();
-    List<Property> filteredProperties = Lists.newArrayList();
-    for (Property property : properties) {
-      if (predicate.apply(property)) {
-        filteredProperties.add(property);
-      }
-    }
-    return filteredProperties;
-  }
-  /**
-   * @return the {@link Property}'s of given {@link JavaInfo} that are not listed in parameter with
-   *         given name. We use this to filter out some properties of layout/layoutData.
-   */
-  public static List<Property> getProperties_excludeByParameter(ObjectInfo objectInfo,
-      String parameterName) throws Exception {
-    Predicate<Property> predicate = getExcludeByTitlePredicate(objectInfo, parameterName);
-    return getProperties(objectInfo, predicate);
-  }
-  /**
-   * Keeps in {@link List} only {@link Property}'s that satisfy given {@link Predicate}.
-   */
-  public static void filterProperties(List<Property> properties, Predicate<Property> predicate)
-      throws Exception {
-    for (Iterator<Property> I = properties.iterator(); I.hasNext();) {
-      Property property = I.next();
-      if (!predicate.apply(property)) {
-        I.remove();
-      }
-    }
-  }
-  /**
-   * @return the {@link Predicate} for {@link Property} that does not accept properties with titles
-   *         listed in parameter value.
-   */
-  public static Predicate<Property> getExcludeByTitlePredicate(ObjectInfo objectInfo,
-      String parameterName) {
-    Predicate<Property> predicate = Predicates.alwaysTrue();
-    String propertiesExcludeString =
-        GlobalState.getParametersProvider().getParameter(objectInfo, parameterName);
-    if (propertiesExcludeString != null) {
-      String[] propertiesExclude = StringUtils.split(propertiesExcludeString);
-      predicate = getExcludeByTitlePredicate(propertiesExclude);
-    }
-    return predicate;
-  }
-  /**
-   * @return the {@link Predicate} for {@link Property} that does not accept properties given
-   *         titles.
-   */
-  public static Predicate<Property> getExcludeByTitlePredicate(final String... excludeTitles) {
-    return new Predicate<Property>() {
-      @Override
-      public boolean apply(Property t) {
-        return !ArrayUtils.contains(excludeTitles, t.getTitle());
-      }
-    };
-  }
-  /**
-   * @return the {@link Predicate} for {@link Property} that does accept properties given titles.
-   */
-  public static Predicate<Property> getIncludeByTitlePredicate(final String... includeTitles) {
-    return new Predicate<Property>() {
-      @Override
-      public boolean apply(Property t) {
-        return ArrayUtils.contains(includeTitles, t.getTitle());
-      }
-    };
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private PropertyUtils() {
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the titles of given {@link Property}'s.
+	 */
+	public static String[] getTitles(Property... properties) {
+		String[] titles = new String[properties.length];
+		for (int i = 0; i < properties.length; i++) {
+			Property property = properties[i];
+			titles[i] = property.getTitle();
+		}
+		return titles;
+	}
+	/**
+	 * @return the titles of given {@link Property}'s.
+	 */
+	public static List<String> getTitles(List<Property> properties) {
+		List<String> titles = Lists.newArrayList();
+		for (Property property : properties) {
+			titles.add(property.getTitle());
+		}
+		return titles;
+	}
+	/**
+	 * @return the text presentation of {@link Property} value, may be <code>null</code>.
+	 */
+	public static String getText(final Property property) {
+		return ExecutionUtils.runObjectIgnore(new RunnableObjectEx<String>() {
+			@Override
+			public String runObject() throws Exception {
+				return (String) ReflectionUtils.invokeMethod2(
+						property.getEditor(),
+						"getText",
+						Property.class,
+						property);
+			}
+		}, null);
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// getPropertyByTitle()
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static Property getByTitle(Property[] properties, String title) {
+		for (Property property : properties) {
+			if (title.equals(property.getTitle())) {
+				return property;
+			}
+		}
+		return null;
+	}
+	public static Property getByTitle(List<Property> properties, String title) {
+		for (Property property : properties) {
+			if (StringUtils.equals(title, property.getTitle())) {
+				return property;
+			}
+		}
+		return null;
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// getPropertyByPath()
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link Property} using "/" separated path.
+	 */
+	public static Property getByPath(ObjectInfo object, String path) throws Exception {
+		return getByPath(object.getProperties(), path);
+	}
+	/**
+	 * @return the {@link Property} using "/" separated path.
+	 */
+	public static Property getByPath(List<Property> properties, String path) throws Exception {
+		Property[] propertiesArray = properties.toArray(new Property[properties.size()]);
+		return getByPath(propertiesArray, path);
+	}
+	/**
+	 * @return the {@link Property} using "/" separated path.
+	 */
+	public static Property getByPath(Property[] properties, String path) throws Exception {
+		Property property = null;
+		for (String pathElement : StringUtils.split(path, '/')) {
+			property = getByTitle(properties, pathElement);
+			properties = getChildren(property);
+		}
+		return property;
+	}
+	/**
+	 * @return the {@link Property} using "/" separated path.
+	 */
+	public static Property getByPath(Property property, String path) throws Exception {
+		return getByPath(getChildren(property), path);
+	}
+	/**
+	 * @return sub-properties of given {@link Property}, may be empty array, but not <code>null</code>
+	 *         .
+	 */
+	public static Property[] getChildren(Property property) throws Exception {
+		if (property != null) {
+			if (property.getEditor() instanceof IComplexPropertyEditor) {
+				return ((IComplexPropertyEditor) property.getEditor()).getProperties(property);
+			}
+		}
+		return new Property[0];
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Filter
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link Property}'s that satisfy given {@link Predicate}.
+	 */
+	public static List<Property> getProperties(ObjectInfo objectInfo, Predicate<Property> predicate)
+			throws Exception {
+		Property[] properties = objectInfo.getProperties();
+		List<Property> filteredProperties = Lists.newArrayList();
+		for (Property property : properties) {
+			if (predicate.apply(property)) {
+				filteredProperties.add(property);
+			}
+		}
+		return filteredProperties;
+	}
+	/**
+	 * @return the {@link Property}'s of given {@link JavaInfo} that are not listed in parameter with
+	 *         given name. We use this to filter out some properties of layout/layoutData.
+	 */
+	public static List<Property> getProperties_excludeByParameter(ObjectInfo objectInfo,
+			String parameterName) throws Exception {
+		Predicate<Property> predicate = getExcludeByTitlePredicate(objectInfo, parameterName);
+		return getProperties(objectInfo, predicate);
+	}
+	/**
+	 * Keeps in {@link List} only {@link Property}'s that satisfy given {@link Predicate}.
+	 */
+	public static void filterProperties(List<Property> properties, Predicate<Property> predicate)
+			throws Exception {
+		for (Iterator<Property> I = properties.iterator(); I.hasNext();) {
+			Property property = I.next();
+			if (!predicate.apply(property)) {
+				I.remove();
+			}
+		}
+	}
+	/**
+	 * @return the {@link Predicate} for {@link Property} that does not accept properties with titles
+	 *         listed in parameter value.
+	 */
+	public static Predicate<Property> getExcludeByTitlePredicate(ObjectInfo objectInfo,
+			String parameterName) {
+		Predicate<Property> predicate = Predicates.alwaysTrue();
+		String propertiesExcludeString =
+				GlobalState.getParametersProvider().getParameter(objectInfo, parameterName);
+		if (propertiesExcludeString != null) {
+			String[] propertiesExclude = StringUtils.split(propertiesExcludeString);
+			predicate = getExcludeByTitlePredicate(propertiesExclude);
+		}
+		return predicate;
+	}
+	/**
+	 * @return the {@link Predicate} for {@link Property} that does not accept properties given
+	 *         titles.
+	 */
+	public static Predicate<Property> getExcludeByTitlePredicate(final String... excludeTitles) {
+		return new Predicate<Property>() {
+			@Override
+			public boolean apply(Property t) {
+				return !ArrayUtils.contains(excludeTitles, t.getTitle());
+			}
+		};
+	}
+	/**
+	 * @return the {@link Predicate} for {@link Property} that does accept properties given titles.
+	 */
+	public static Predicate<Property> getIncludeByTitlePredicate(final String... includeTitles) {
+		return new Predicate<Property>() {
+			@Override
+			public boolean apply(Property t) {
+				return ArrayUtils.contains(includeTitles, t.getTitle());
+			}
+		};
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/util/ScriptUtils.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/util/ScriptUtils.java
index 48afbe539..98f4ffb9f 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/util/ScriptUtils.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/util/ScriptUtils.java
@@ -34,202 +34,202 @@
  * @coverage core.model.util
  */
 public final class ScriptUtils {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // With JavaInfo context
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Evaluates given script.
-   */
-  public static Object evaluate(ClassLoader contextClassLoader, String script) {
-    Map<String, Object> variables = ImmutableMap.of();
-    return evaluate(contextClassLoader, script, variables);
-  }
-
-  /**
-   * Evaluates given script, with one variable.
-   */
-  public static Object evaluate(ClassLoader contextClassLoader,
-      String script,
-      String name_1,
-      Object value_1) {
-    Map<String, Object> variables = new HashMap<>();
-    variables.put(name_1, value_1);
-    return evaluate(contextClassLoader, script, variables);
-  }
-
-  /**
-   * Evaluates given script, with two variables.
-   */
-  public static Object evaluate(ClassLoader contextClassLoader,
-      String script,
-      String name_1,
-      Object value_1,
-      String name_2,
-      Object value_2) {
-    Map<String, Object> variables = new HashMap<>();
-    variables.put(name_1, value_1);
-    variables.put(name_2, value_2);
-    return evaluate(contextClassLoader, script, variables);
-  }
-
-  /**
-   * Evaluates given script with variables.
-   */
-  public static Object evaluate(ClassLoader contextClassLoader,
-      String script,
-      Map<String, Object> variables) {
-    Map<String, Object> contextCache = getContextCache(contextClassLoader);
-    try {
-      Object expression = compile(contextCache, script, contextClassLoader);
-      return evaluate(expression, variables);
-    } finally {
-      clearMemoryLeaks();
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Simple
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Evaluates given script.
-   */
-  public static Object evaluate(String script) {
-    return evaluate(script, Maps.<String, Object>newHashMap());
-  }
-
-  /**
-   * Evaluates simple script on given context value.
-   */
-  public static Object evaluate(String script, Object ctx) {
-    Object expression = compile(script);
-    return MVEL.executeExpression(expression, ctx);
-  }
-
-  /**
-   * Evaluates given script with single variable.
-   */
-  public static Object evaluate(String script, String name_1, Object value_1) {
-    Object expression = compile(script);
-    Map<String, Object> variables = new HashMap<>();
-    variables.put(name_1, value_1);
-    return evaluate(expression, variables);
-  }
-
-  /**
-   * Evaluates given script with two variables.
-   */
-  public static Object evaluate(String script,
-      String name_1,
-      Object value_1,
-      String name_2,
-      Object value_2) {
-    Object expression = compile(script);
-    Map<String, Object> variables = new HashMap<>();
-    variables.put(name_1, value_1);
-    variables.put(name_2, value_2);
-    return evaluate(expression, variables);
-  }
-
-  /**
-   * Evaluates given script with variables.
-   */
-  public static Object evaluate(String script, Map<String, Object> variables) {
-    Object expression = compile(script);
-    return evaluate(expression, variables);
-  }
-
-  private static Object evaluate(Object expression, Map<String, Object> _variables) {
-    Map<String, Object> variables = Maps.newHashMap(_variables);
-    return MVEL.executeExpression(expression, variables);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * MVEL uses <code>WeakHashMap</code> and can cause temporary memory leaks. To solve it we should
-   * call <code>size()</code> periodically to force <code>expungeStaleEntries()</code>, or just
-   * <code>clear()</code> after each use.
-   * <p>
-   * MVEL uses {@link ThreadLocal}, but sometimes "forgets" to clear it.
-   * <p>
-   * http://jira.codehaus.org/browse/MVEL-149
-   * <p>
-   * http://jira.codehaus.org/browse/MVEL-150
-   */
-  public static void clearMemoryLeaks() {
-    ExecutionUtils.runLog(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        clearCaches(org.mvel2.util.ParseTools.class);
-        clearCaches(org.mvel2.PropertyAccessor.class);
-      }
-
-      private void clearCaches(Class<?> clazz) throws Exception {
-        Field[] fields = clazz.getDeclaredFields();
-        for (Field field : fields) {
-          if (field.getName().endsWith("_CACHE")) {
-            if (Map.class.isAssignableFrom(field.getType())) {
-              field.setAccessible(true);
-              Map<?, ?> map = (Map<?, ?>) field.get(0);
-              if (map != null) {
-                map.clear();
-              }
-            }
-          }
-        }
-      }
-    });
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Compilation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final Map<String, Object> m_compiledExpressions =
-      new MapMaker().weakValues().makeMap();
-
-  /**
-   * @return the weak cache for given {@link ClassLoader}.
-   */
-  @SuppressWarnings("unchecked")
-  private static Map<String, Object> getContextCache(ClassLoader context) {
-    Class<ScriptUtils> key = ScriptUtils.class;
-    Map<String, Object> cache = (Map<String, Object>) ClassLoaderLocalMap.get(context, key);
-    if (cache == null) {
-      cache = new HashMap<>();
-      ClassLoaderLocalMap.put(context, key, cache);
-    }
-    return cache;
-  }
-
-  /**
-   * @return the compiled expression, with standard WindowBuilder functions and imports.
-   */
-  private static Object compile(String script) {
-    ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
-    return compile(m_compiledExpressions, script, contextClassLoader);
-  }
-
-  private static Object compile(Map<String, Object> cache,
-      String script,
-      ClassLoader contextClassLoader) {
-    Object expression = cache.get(script);
-    if (expression == null) {
-      ParserConfiguration parserConfiguration = new ParserConfiguration();
-      parserConfiguration.setClassLoader(contextClassLoader);
-      ParserContext context = new ParserContext(parserConfiguration);
-      context.addImport("ReflectionUtils", ReflectionUtils.class);
-      expression = MVEL.compileExpression(script, context);
-      cache.put(script, expression);
-    }
-    return expression;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// With JavaInfo context
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Evaluates given script.
+	 */
+	public static Object evaluate(ClassLoader contextClassLoader, String script) {
+		Map<String, Object> variables = ImmutableMap.of();
+		return evaluate(contextClassLoader, script, variables);
+	}
+
+	/**
+	 * Evaluates given script, with one variable.
+	 */
+	public static Object evaluate(ClassLoader contextClassLoader,
+			String script,
+			String name_1,
+			Object value_1) {
+		Map<String, Object> variables = new HashMap<>();
+		variables.put(name_1, value_1);
+		return evaluate(contextClassLoader, script, variables);
+	}
+
+	/**
+	 * Evaluates given script, with two variables.
+	 */
+	public static Object evaluate(ClassLoader contextClassLoader,
+			String script,
+			String name_1,
+			Object value_1,
+			String name_2,
+			Object value_2) {
+		Map<String, Object> variables = new HashMap<>();
+		variables.put(name_1, value_1);
+		variables.put(name_2, value_2);
+		return evaluate(contextClassLoader, script, variables);
+	}
+
+	/**
+	 * Evaluates given script with variables.
+	 */
+	public static Object evaluate(ClassLoader contextClassLoader,
+			String script,
+			Map<String, Object> variables) {
+		Map<String, Object> contextCache = getContextCache(contextClassLoader);
+		try {
+			Object expression = compile(contextCache, script, contextClassLoader);
+			return evaluate(expression, variables);
+		} finally {
+			clearMemoryLeaks();
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Simple
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Evaluates given script.
+	 */
+	public static Object evaluate(String script) {
+		return evaluate(script, Maps.<String, Object>newHashMap());
+	}
+
+	/**
+	 * Evaluates simple script on given context value.
+	 */
+	public static Object evaluate(String script, Object ctx) {
+		Object expression = compile(script);
+		return MVEL.executeExpression(expression, ctx);
+	}
+
+	/**
+	 * Evaluates given script with single variable.
+	 */
+	public static Object evaluate(String script, String name_1, Object value_1) {
+		Object expression = compile(script);
+		Map<String, Object> variables = new HashMap<>();
+		variables.put(name_1, value_1);
+		return evaluate(expression, variables);
+	}
+
+	/**
+	 * Evaluates given script with two variables.
+	 */
+	public static Object evaluate(String script,
+			String name_1,
+			Object value_1,
+			String name_2,
+			Object value_2) {
+		Object expression = compile(script);
+		Map<String, Object> variables = new HashMap<>();
+		variables.put(name_1, value_1);
+		variables.put(name_2, value_2);
+		return evaluate(expression, variables);
+	}
+
+	/**
+	 * Evaluates given script with variables.
+	 */
+	public static Object evaluate(String script, Map<String, Object> variables) {
+		Object expression = compile(script);
+		return evaluate(expression, variables);
+	}
+
+	private static Object evaluate(Object expression, Map<String, Object> _variables) {
+		Map<String, Object> variables = Maps.newHashMap(_variables);
+		return MVEL.executeExpression(expression, variables);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * MVEL uses <code>WeakHashMap</code> and can cause temporary memory leaks. To solve it we should
+	 * call <code>size()</code> periodically to force <code>expungeStaleEntries()</code>, or just
+	 * <code>clear()</code> after each use.
+	 * <p>
+	 * MVEL uses {@link ThreadLocal}, but sometimes "forgets" to clear it.
+	 * <p>
+	 * http://jira.codehaus.org/browse/MVEL-149
+	 * <p>
+	 * http://jira.codehaus.org/browse/MVEL-150
+	 */
+	public static void clearMemoryLeaks() {
+		ExecutionUtils.runLog(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				clearCaches(org.mvel2.util.ParseTools.class);
+				clearCaches(org.mvel2.PropertyAccessor.class);
+			}
+
+			private void clearCaches(Class<?> clazz) throws Exception {
+				Field[] fields = clazz.getDeclaredFields();
+				for (Field field : fields) {
+					if (field.getName().endsWith("_CACHE")) {
+						if (Map.class.isAssignableFrom(field.getType())) {
+							field.setAccessible(true);
+							Map<?, ?> map = (Map<?, ?>) field.get(0);
+							if (map != null) {
+								map.clear();
+							}
+						}
+					}
+				}
+			}
+		});
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Compilation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final Map<String, Object> m_compiledExpressions =
+			new MapMaker().weakValues().makeMap();
+
+	/**
+	 * @return the weak cache for given {@link ClassLoader}.
+	 */
+	@SuppressWarnings("unchecked")
+	private static Map<String, Object> getContextCache(ClassLoader context) {
+		Class<ScriptUtils> key = ScriptUtils.class;
+		Map<String, Object> cache = (Map<String, Object>) ClassLoaderLocalMap.get(context, key);
+		if (cache == null) {
+			cache = new HashMap<>();
+			ClassLoaderLocalMap.put(context, key, cache);
+		}
+		return cache;
+	}
+
+	/**
+	 * @return the compiled expression, with standard WindowBuilder functions and imports.
+	 */
+	private static Object compile(String script) {
+		ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
+		return compile(m_compiledExpressions, script, contextClassLoader);
+	}
+
+	private static Object compile(Map<String, Object> cache,
+			String script,
+			ClassLoader contextClassLoader) {
+		Object expression = cache.get(script);
+		if (expression == null) {
+			ParserConfiguration parserConfiguration = new ParserConfiguration();
+			parserConfiguration.setClassLoader(contextClassLoader);
+			ParserContext context = new ParserContext(parserConfiguration);
+			context.addImport("ReflectionUtils", ReflectionUtils.class);
+			expression = MVEL.compileExpression(script, context);
+			cache.put(script, expression);
+		}
+		return expression;
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/util/StackContainerSupport.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/util/StackContainerSupport.java
index 916ddf267..f961352e1 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/util/StackContainerSupport.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/util/StackContainerSupport.java
@@ -26,137 +26,137 @@
  * @coverage core.model.util
  */
 public abstract class StackContainerSupport<T extends ObjectInfo> {
-  private final ObjectInfo m_container;
-  private T m_active;
+	private final ObjectInfo m_container;
+	private T m_active;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public StackContainerSupport(ObjectInfo container) throws Exception {
-    m_container = container;
-    container.addBroadcastListener(new ObjectInfoChildAddAfter() {
-      @Override
-      public void invoke(ObjectInfo parent, ObjectInfo child) throws Exception {
-        if (!GlobalState.isParsing() && isActive() && isChild(child)) {
-          m_active = getCasted(child);
-        }
-      }
-    });
-    container.addBroadcastListener(new ObjectEventListener() {
-      @Override
-      public void childRemoveBefore(ObjectInfo parent, ObjectInfo child) throws Exception {
-        if (isActive() && child == m_active) {
-          List<T> children = getChildren();
-          m_active = children.get(0);
-          if (m_active == child) {
-            m_active = children.size() > 1 ? children.get(1) : null;
-          }
-        }
-      }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public StackContainerSupport(ObjectInfo container) throws Exception {
+		m_container = container;
+		container.addBroadcastListener(new ObjectInfoChildAddAfter() {
+			@Override
+			public void invoke(ObjectInfo parent, ObjectInfo child) throws Exception {
+				if (!GlobalState.isParsing() && isActive() && isChild(child)) {
+					m_active = getCasted(child);
+				}
+			}
+		});
+		container.addBroadcastListener(new ObjectEventListener() {
+			@Override
+			public void childRemoveBefore(ObjectInfo parent, ObjectInfo child) throws Exception {
+				if (isActive() && child == m_active) {
+					List<T> children = getChildren();
+					m_active = children.get(0);
+					if (m_active == child) {
+						m_active = children.size() > 1 ? children.get(1) : null;
+					}
+				}
+			}
 
-      @Override
-      public void selecting(ObjectInfo object, boolean[] refreshFlag) throws Exception {
-        if (isActive() && getContainer().isParentOf(object)) {
-          T child = getChild(object);
-          if (child != null && m_active != child) {
-            m_active = child;
-            refreshFlag[0] = true;
-          }
-        }
-      }
-    });
-  }
+			@Override
+			public void selecting(ObjectInfo object, boolean[] refreshFlag) throws Exception {
+				if (isActive() && getContainer().isParentOf(object)) {
+					T child = getChild(object);
+					if (child != null && m_active != child) {
+						m_active = child;
+						refreshFlag[0] = true;
+					}
+				}
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public final T getActive() {
-    if (m_active == null) {
-      List<T> children = getChildren();
-      if (!children.isEmpty()) {
-        m_active = children.get(0);
-      }
-    }
-    return m_active;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public final T getActive() {
+		if (m_active == null) {
+			List<T> children = getChildren();
+			if (!children.isEmpty()) {
+				m_active = children.get(0);
+			}
+		}
+		return m_active;
+	}
 
-  public final void setActive(T active) {
-    if (active != m_active) {
-      m_active = active;
-      ExecutionUtils.refresh(m_container);
-    }
-  }
+	public final void setActive(T active) {
+		if (active != m_active) {
+			m_active = active;
+			ExecutionUtils.refresh(m_container);
+		}
+	}
 
-  /**
-   * @return previous component relative to active.
-   */
-  public T getPrev() {
-    List<T> children = getChildren();
-    return GenericsUtils.getPrevOrLast(children, m_active);
-  }
+	/**
+	 * @return previous component relative to active.
+	 */
+	public T getPrev() {
+		List<T> children = getChildren();
+		return GenericsUtils.getPrevOrLast(children, m_active);
+	}
 
-  /**
-   * @return next component relative to active.
-   */
-  public T getNext() {
-    List<T> children = getChildren();
-    return GenericsUtils.getNextOrFirst(children, m_active);
-  }
+	/**
+	 * @return next component relative to active.
+	 */
+	public T getNext() {
+		List<T> children = getChildren();
+		return GenericsUtils.getNextOrFirst(children, m_active);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Events
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @SuppressWarnings("unchecked")
-  private T getCasted(ObjectInfo o) {
-    return (T) o;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Events
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@SuppressWarnings("unchecked")
+	private T getCasted(ObjectInfo o) {
+		return (T) o;
+	}
 
-  /**
-   * @return the {@link ObjectInfo} from {@link #getChildren()} that is given {@link ObjectInfo} or
-   *         its direct/indirect parent.
-   */
-  private T getChild(ObjectInfo object) {
-    List<T> children = getChildren();
-    // check if "object" is child
-    if (children.contains(object)) {
-      return getCasted(object);
-    }
-    // find child as parent
-    return object.getParent(children);
-  }
+	/**
+	 * @return the {@link ObjectInfo} from {@link #getChildren()} that is given {@link ObjectInfo} or
+	 *         its direct/indirect parent.
+	 */
+	private T getChild(ObjectInfo object) {
+		List<T> children = getChildren();
+		// check if "object" is child
+		if (children.contains(object)) {
+			return getCasted(object);
+		}
+		// find child as parent
+		return object.getParent(children);
+	}
 
-  private boolean isChild(ObjectInfo child) {
-    return getChildren().contains(child);
-  }
+	private boolean isChild(ObjectInfo child) {
+		return getChildren().contains(child);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Methods to implement
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if this container is active. For example layout may be inactive when
-   *         it is implicit and replace with some explicit one.
-   */
-  protected boolean isActive() {
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Methods to implement
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if this container is active. For example layout may be inactive when
+	 *         it is implicit and replace with some explicit one.
+	 */
+	protected boolean isActive() {
+		return true;
+	}
 
-  /**
-   * @return the container to track children on.
-   */
-  protected ObjectInfo getContainer() {
-    return m_container;
-  }
+	/**
+	 * @return the container to track children on.
+	 */
+	protected ObjectInfo getContainer() {
+		return m_container;
+	}
 
-  /**
-   * @return children managed by this container.
-   */
-  protected abstract List<T> getChildren();
+	/**
+	 * @return children managed by this container.
+	 */
+	protected abstract List<T> getChildren();
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/util/grid/AbstractGridConverter.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/util/grid/AbstractGridConverter.java
index f31f0754c..a6ea62d75 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/util/grid/AbstractGridConverter.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/util/grid/AbstractGridConverter.java
@@ -34,188 +34,188 @@
  * @coverage core.model.util
  */
 public abstract class AbstractGridConverter {
-  /**
-   * Layout container.
-   */
-  public interface IGridLayoutContainer {
-    IAbstractComponentInfo getComponent();
-
-    List<IAbstractComponentInfo> getControls();
-  }
-  /**
-   * Layout.
-   */
-  public interface IGridLayoutInstance {
-    IGridLayoutContainer getContainer();
-
-    IGridLayoutData getLayoutData(IAbstractComponentInfo control);
-
-    void setColumnCount(int value) throws Exception;
-
-    void applyChanges() throws Exception;
-  }
-  /**
-   * Layout data.
-   */
-  public interface IGridLayoutData {
-    IAbstractComponentInfo getComponent();
-
-    IGridLayoutInstance getLayout();
-
-    // cell
-    void setGridX(int value) throws Exception;
-
-    void setGridY(int value) throws Exception;
-
-    // size
-    void setSpanX(int value) throws Exception;
-
-    void setSpanY(int value) throws Exception;
-
-    // grab
-    void setHorizontalGrab(boolean value) throws Exception;
-
-    void setVerticalGrab(boolean value) throws Exception;
-
-    // alignment
-    void setHorizontalAlignment(HorizontalAlignment value) throws Exception;
-
-    void setVerticalAlignment(VerticalAlignment value) throws Exception;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Conversion
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static void convert(IGridLayoutContainer container, IGridLayoutInstance layout)
-      throws Exception {
-    // prepare columns and rows and distribute controls in them
-    List<ComponentGroup> columns = GridConvertionHelper.buildGroups(container.getControls(), true);
-    List<ComponentGroup> rows = GridConvertionHelper.buildGroups(container.getControls(), false);
-    // sort components in columns and rows
-    GridConvertionHelper.sortGroupsByTranspose(columns, rows);
-    GridConvertionHelper.sortGroupsByTranspose(rows, columns);
-    // ensure that columns and rows are sorted by start coordinates
-    GridConvertionHelper.sortGroups(columns);
-    GridConvertionHelper.sortGroups(rows);
-    // calculate begin/end for each column/row
-    GridConvertionHelper.updateBoundsGaps(columns, false);
-    GridConvertionHelper.updateBoundsGaps(rows, false);
-    // reorder controls
-    reorderControls(container, rows);
-    // set cell for controls
-    int numColumns = columns.size();
-    List<IAbstractComponentInfo> appliedControls = Lists.newArrayList();
-    for (ComponentGroup column : columns) {
-      for (ComponentInGroup component : column.getComponents()) {
-        IAbstractComponentInfo control = component.getComponent();
-        if (appliedControls.contains(control)) {
-          continue;
-        }
-        // layout data
-        GeneralLayoutData generalLayoutData =
-            GeneralLayoutData.getFromInfoEx(control.getUnderlyingModel());
-        IGridLayoutData gridData = layout.getLayoutData(control);
-        // set cell
-        Rectangle cells = getCells(component, generalLayoutData, columns, rows);
-        gridData.setGridX(cells.x);
-        gridData.setGridY(cells.y);
-        gridData.setSpanX(cells.width);
-        gridData.setSpanY(cells.height);
-        // apply general
-        applyGeneralLayoutData(gridData, generalLayoutData);
-        // update
-        appliedControls.add(control);
-        numColumns = Math.max(numColumns, cells.x + cells.width);
-      }
-    }
-    // set "numColumns"
-    if (numColumns > 0) {
-      layout.setColumnCount(numColumns);
-    }
-    // add fillers
-    layout.applyChanges();
-  }
-
-  protected static Rectangle getCells(ComponentInGroup component,
-      GeneralLayoutData generalLayoutData,
-      List<ComponentGroup> columns,
-      List<ComponentGroup> rows) {
-    int x = -1;
-    int y = -1;
-    int w = 1;
-    int h = 1;
-    // prepare begin/end column/row
-    ComponentGroup beginColumn = GridConvertionHelper.getBeginForComponent(columns, component);
-    ComponentGroup endColumn = GridConvertionHelper.getEndForComponent(columns, component);
-    ComponentGroup beginRow = GridConvertionHelper.getBeginForComponent(rows, component);
-    ComponentGroup endRow = GridConvertionHelper.getEndForComponent(rows, component);
-    // prepare cell
-    x = columns.indexOf(beginColumn);
-    y = rows.indexOf(beginRow);
-    w = 1 + columns.indexOf(endColumn) - x;
-    h = 1 + rows.indexOf(endRow) - y;
-    // use remembered values
-    {
-      if (generalLayoutData.gridX != null) {
-        x = generalLayoutData.gridX;
-        w = 1;
-      }
-      if (generalLayoutData.gridY != null) {
-        y = generalLayoutData.gridY;
-        h = 1;
-      }
-      if (generalLayoutData.spanX != null) {
-        w = generalLayoutData.spanX;
-      }
-      if (generalLayoutData.spanY != null) {
-        h = generalLayoutData.spanY;
-      }
-    }
-    //
-    return new Rectangle(x, y, w, h);
-  }
-
-  protected static void applyGeneralLayoutData(IGridLayoutData gridData,
-      GeneralLayoutData generalLayoutData) throws Exception {
-    // set grab
-    if (generalLayoutData.horizontalGrab != null) {
-      gridData.setHorizontalGrab(generalLayoutData.horizontalGrab);
-    }
-    if (generalLayoutData.verticalGrab != null) {
-      gridData.setVerticalGrab(generalLayoutData.verticalGrab);
-    }
-    // set alignments
-    if (generalLayoutData.horizontalAlignment != null) {
-      gridData.setHorizontalAlignment(generalLayoutData.horizontalAlignment);
-    }
-    if (generalLayoutData.verticalAlignment != null) {
-      gridData.setVerticalAlignment(generalLayoutData.verticalAlignment);
-    }
-  }
-
-  protected static void reorderControls(IGridLayoutContainer container, List<ComponentGroup> rows)
-      throws Exception {
-    // prepare list of controls in reversed order
-    List<IAbstractComponentInfo> reversedControls = Lists.newArrayList();
-    for (ComponentGroup row : rows) {
-      for (ComponentInGroup componentInGroup : row.getComponents()) {
-        IAbstractComponentInfo control = componentInGroup.getComponent();
-        reversedControls.add(0, control);
-      }
-    }
-    // do reorder
-    IAbstractComponentInfo nextControl = null;
-    for (IAbstractComponentInfo control : reversedControls) {
-      if (nextControl != null) {
-        boolean alreadyRightOrder =
-            GenericsUtils.getNextOrNull(container.getControls(), control) == nextControl;
-        if (!alreadyRightOrder) {
-          GlobalState.getOrderProcessor().move(control, nextControl);
-        }
-      }
-      nextControl = control;
-    }
-  }
+	/**
+	 * Layout container.
+	 */
+	public interface IGridLayoutContainer {
+		IAbstractComponentInfo getComponent();
+
+		List<IAbstractComponentInfo> getControls();
+	}
+	/**
+	 * Layout.
+	 */
+	public interface IGridLayoutInstance {
+		IGridLayoutContainer getContainer();
+
+		IGridLayoutData getLayoutData(IAbstractComponentInfo control);
+
+		void setColumnCount(int value) throws Exception;
+
+		void applyChanges() throws Exception;
+	}
+	/**
+	 * Layout data.
+	 */
+	public interface IGridLayoutData {
+		IAbstractComponentInfo getComponent();
+
+		IGridLayoutInstance getLayout();
+
+		// cell
+		void setGridX(int value) throws Exception;
+
+		void setGridY(int value) throws Exception;
+
+		// size
+		void setSpanX(int value) throws Exception;
+
+		void setSpanY(int value) throws Exception;
+
+		// grab
+		void setHorizontalGrab(boolean value) throws Exception;
+
+		void setVerticalGrab(boolean value) throws Exception;
+
+		// alignment
+		void setHorizontalAlignment(HorizontalAlignment value) throws Exception;
+
+		void setVerticalAlignment(VerticalAlignment value) throws Exception;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Conversion
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static void convert(IGridLayoutContainer container, IGridLayoutInstance layout)
+			throws Exception {
+		// prepare columns and rows and distribute controls in them
+		List<ComponentGroup> columns = GridConvertionHelper.buildGroups(container.getControls(), true);
+		List<ComponentGroup> rows = GridConvertionHelper.buildGroups(container.getControls(), false);
+		// sort components in columns and rows
+		GridConvertionHelper.sortGroupsByTranspose(columns, rows);
+		GridConvertionHelper.sortGroupsByTranspose(rows, columns);
+		// ensure that columns and rows are sorted by start coordinates
+		GridConvertionHelper.sortGroups(columns);
+		GridConvertionHelper.sortGroups(rows);
+		// calculate begin/end for each column/row
+		GridConvertionHelper.updateBoundsGaps(columns, false);
+		GridConvertionHelper.updateBoundsGaps(rows, false);
+		// reorder controls
+		reorderControls(container, rows);
+		// set cell for controls
+		int numColumns = columns.size();
+		List<IAbstractComponentInfo> appliedControls = Lists.newArrayList();
+		for (ComponentGroup column : columns) {
+			for (ComponentInGroup component : column.getComponents()) {
+				IAbstractComponentInfo control = component.getComponent();
+				if (appliedControls.contains(control)) {
+					continue;
+				}
+				// layout data
+				GeneralLayoutData generalLayoutData =
+						GeneralLayoutData.getFromInfoEx(control.getUnderlyingModel());
+				IGridLayoutData gridData = layout.getLayoutData(control);
+				// set cell
+				Rectangle cells = getCells(component, generalLayoutData, columns, rows);
+				gridData.setGridX(cells.x);
+				gridData.setGridY(cells.y);
+				gridData.setSpanX(cells.width);
+				gridData.setSpanY(cells.height);
+				// apply general
+				applyGeneralLayoutData(gridData, generalLayoutData);
+				// update
+				appliedControls.add(control);
+				numColumns = Math.max(numColumns, cells.x + cells.width);
+			}
+		}
+		// set "numColumns"
+		if (numColumns > 0) {
+			layout.setColumnCount(numColumns);
+		}
+		// add fillers
+		layout.applyChanges();
+	}
+
+	protected static Rectangle getCells(ComponentInGroup component,
+			GeneralLayoutData generalLayoutData,
+			List<ComponentGroup> columns,
+			List<ComponentGroup> rows) {
+		int x = -1;
+		int y = -1;
+		int w = 1;
+		int h = 1;
+		// prepare begin/end column/row
+		ComponentGroup beginColumn = GridConvertionHelper.getBeginForComponent(columns, component);
+		ComponentGroup endColumn = GridConvertionHelper.getEndForComponent(columns, component);
+		ComponentGroup beginRow = GridConvertionHelper.getBeginForComponent(rows, component);
+		ComponentGroup endRow = GridConvertionHelper.getEndForComponent(rows, component);
+		// prepare cell
+		x = columns.indexOf(beginColumn);
+		y = rows.indexOf(beginRow);
+		w = 1 + columns.indexOf(endColumn) - x;
+		h = 1 + rows.indexOf(endRow) - y;
+		// use remembered values
+		{
+			if (generalLayoutData.gridX != null) {
+				x = generalLayoutData.gridX;
+				w = 1;
+			}
+			if (generalLayoutData.gridY != null) {
+				y = generalLayoutData.gridY;
+				h = 1;
+			}
+			if (generalLayoutData.spanX != null) {
+				w = generalLayoutData.spanX;
+			}
+			if (generalLayoutData.spanY != null) {
+				h = generalLayoutData.spanY;
+			}
+		}
+		//
+		return new Rectangle(x, y, w, h);
+	}
+
+	protected static void applyGeneralLayoutData(IGridLayoutData gridData,
+			GeneralLayoutData generalLayoutData) throws Exception {
+		// set grab
+		if (generalLayoutData.horizontalGrab != null) {
+			gridData.setHorizontalGrab(generalLayoutData.horizontalGrab);
+		}
+		if (generalLayoutData.verticalGrab != null) {
+			gridData.setVerticalGrab(generalLayoutData.verticalGrab);
+		}
+		// set alignments
+		if (generalLayoutData.horizontalAlignment != null) {
+			gridData.setHorizontalAlignment(generalLayoutData.horizontalAlignment);
+		}
+		if (generalLayoutData.verticalAlignment != null) {
+			gridData.setVerticalAlignment(generalLayoutData.verticalAlignment);
+		}
+	}
+
+	protected static void reorderControls(IGridLayoutContainer container, List<ComponentGroup> rows)
+			throws Exception {
+		// prepare list of controls in reversed order
+		List<IAbstractComponentInfo> reversedControls = Lists.newArrayList();
+		for (ComponentGroup row : rows) {
+			for (ComponentInGroup componentInGroup : row.getComponents()) {
+				IAbstractComponentInfo control = componentInGroup.getComponent();
+				reversedControls.add(0, control);
+			}
+		}
+		// do reorder
+		IAbstractComponentInfo nextControl = null;
+		for (IAbstractComponentInfo control : reversedControls) {
+			if (nextControl != null) {
+				boolean alreadyRightOrder =
+						GenericsUtils.getNextOrNull(container.getControls(), control) == nextControl;
+				if (!alreadyRightOrder) {
+					GlobalState.getOrderProcessor().move(control, nextControl);
+				}
+			}
+			nextControl = control;
+		}
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/util/grid/GridAlignmentHelper.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/util/grid/GridAlignmentHelper.java
index e51e043a8..3f7be608b 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/util/grid/GridAlignmentHelper.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/util/grid/GridAlignmentHelper.java
@@ -25,112 +25,112 @@
  * @coverage core.model.util
  */
 public final class GridAlignmentHelper {
-  /**
-   * Parameter of {@link ComponentDescription}, value <code>"true"</code> means that component
-   * should automatically use horizontal grab/fill when added.
-   */
-  public static final String V_GRAB_HORIZONTAL = "gridLayout.grabHorizontal";
-  /**
-   * Parameter of {@link ComponentDescription}, value <code>"true"</code> means that component
-   * should automatically use vertical grab/fill when added.
-   */
-  public static final String V_GRAB_VERTICAL = "gridLayout.grabVertical";
-  /**
-   * Parameter of {@link ComponentDescription}, value <code>"true"</code> means that this component
-   * should be aligned right if component on same row is marked with {@link #V_RIGHT_TARGET}.
-   */
-  public static final String V_RIGHT_LABEL = "gridLayout.rightAlignment.isLabel";
-  /**
-   * Parameter of {@link ComponentDescription}, value <code>"true"</code> means that this component
-   * can be used in combination with {@link #V_RIGHT_LABEL}.
-   */
-  public static final String V_RIGHT_TARGET = "gridLayout.rightAlignment.isTarget";
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private GridAlignmentHelper() {
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Alignment
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Performs automatic alignment, such as grab/fill for {@link JTextField} or {@link JTable}, right
-   * alignment for {@link JLabel}.
-   */
-  public static <C extends IAbstractComponentInfo> void doAutomaticAlignment(C component,
-      IAlignmentProcessor<C> processor) throws Exception {
-    IParametersProvider parametersProvider = GlobalState.getParametersProvider();
-    // grab/fill
-    if (processor.grabEnabled()) {
-      // grab/fill horizontally
-      if (parametersProvider.hasTrueParameter(component, V_GRAB_HORIZONTAL)) {
-        processor.setGrabFill(component, true);
-      }
-      // grab/fill vertically
-      if (parametersProvider.hasTrueParameter(component, V_GRAB_VERTICAL)) {
-        processor.setGrabFill(component, false);
-      }
-    }
-    // right alignment
-    if (processor.rightEnabled()) {
-      // right alignment for new "label" before existing "text"
-      if (parametersProvider.hasTrueParameter(component, V_RIGHT_LABEL)) {
-        // prepare on right
-        C rightComponent = processor.getComponentAtRight(component);
-        // check for "text"
-        if (rightComponent != null
-            && parametersProvider.hasTrueParameter(rightComponent, V_RIGHT_TARGET)) {
-          processor.setRightAlignment(component);
-        }
-      }
-      // right alignment for existing "label" before new "text"
-      if (parametersProvider.hasTrueParameter(component, V_RIGHT_TARGET)) {
-        // prepare component on left
-        C leftComponent = processor.getComponentAtLeft(component);
-        // check for "label"
-        if (leftComponent != null
-            && parametersProvider.hasTrueParameter(leftComponent, V_RIGHT_LABEL)) {
-          processor.setRightAlignment(leftComponent);
-        }
-      }
-    }
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IAlignmentProcessor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Provider for automatic alignment information/operations for {@link GridAlignmentHelper}.
-   */
-  public static interface IAlignmentProcessor<C extends IAbstractComponentInfo> {
-    /**
-     * @return <code>true</code> if automatic grab/fill can be performed.
-     */
-    boolean grabEnabled();
-    /**
-     * @return <code>true</code> if automatic right alignment can be performed.
-     */
-    boolean rightEnabled();
-    /**
-     * @return the component located directly on the left to given one, on same row.
-     */
-    C getComponentAtLeft(C component);
-    /**
-     * @return the component located directly on the right to given one, on same row.
-     */
-    C getComponentAtRight(C component);
-    /**
-     * Sets grab/fill for given component.
-     */
-    void setGrabFill(C component, boolean horizontal) throws Exception;
-    /**
-     * Sets right alignment for given component.
-     */
-    void setRightAlignment(C component) throws Exception;
-  }
+	/**
+	 * Parameter of {@link ComponentDescription}, value <code>"true"</code> means that component
+	 * should automatically use horizontal grab/fill when added.
+	 */
+	public static final String V_GRAB_HORIZONTAL = "gridLayout.grabHorizontal";
+	/**
+	 * Parameter of {@link ComponentDescription}, value <code>"true"</code> means that component
+	 * should automatically use vertical grab/fill when added.
+	 */
+	public static final String V_GRAB_VERTICAL = "gridLayout.grabVertical";
+	/**
+	 * Parameter of {@link ComponentDescription}, value <code>"true"</code> means that this component
+	 * should be aligned right if component on same row is marked with {@link #V_RIGHT_TARGET}.
+	 */
+	public static final String V_RIGHT_LABEL = "gridLayout.rightAlignment.isLabel";
+	/**
+	 * Parameter of {@link ComponentDescription}, value <code>"true"</code> means that this component
+	 * can be used in combination with {@link #V_RIGHT_LABEL}.
+	 */
+	public static final String V_RIGHT_TARGET = "gridLayout.rightAlignment.isTarget";
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private GridAlignmentHelper() {
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Alignment
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Performs automatic alignment, such as grab/fill for {@link JTextField} or {@link JTable}, right
+	 * alignment for {@link JLabel}.
+	 */
+	public static <C extends IAbstractComponentInfo> void doAutomaticAlignment(C component,
+			IAlignmentProcessor<C> processor) throws Exception {
+		IParametersProvider parametersProvider = GlobalState.getParametersProvider();
+		// grab/fill
+		if (processor.grabEnabled()) {
+			// grab/fill horizontally
+			if (parametersProvider.hasTrueParameter(component, V_GRAB_HORIZONTAL)) {
+				processor.setGrabFill(component, true);
+			}
+			// grab/fill vertically
+			if (parametersProvider.hasTrueParameter(component, V_GRAB_VERTICAL)) {
+				processor.setGrabFill(component, false);
+			}
+		}
+		// right alignment
+		if (processor.rightEnabled()) {
+			// right alignment for new "label" before existing "text"
+			if (parametersProvider.hasTrueParameter(component, V_RIGHT_LABEL)) {
+				// prepare on right
+				C rightComponent = processor.getComponentAtRight(component);
+				// check for "text"
+				if (rightComponent != null
+						&& parametersProvider.hasTrueParameter(rightComponent, V_RIGHT_TARGET)) {
+					processor.setRightAlignment(component);
+				}
+			}
+			// right alignment for existing "label" before new "text"
+			if (parametersProvider.hasTrueParameter(component, V_RIGHT_TARGET)) {
+				// prepare component on left
+				C leftComponent = processor.getComponentAtLeft(component);
+				// check for "label"
+				if (leftComponent != null
+						&& parametersProvider.hasTrueParameter(leftComponent, V_RIGHT_LABEL)) {
+					processor.setRightAlignment(leftComponent);
+				}
+			}
+		}
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IAlignmentProcessor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Provider for automatic alignment information/operations for {@link GridAlignmentHelper}.
+	 */
+	public static interface IAlignmentProcessor<C extends IAbstractComponentInfo> {
+		/**
+		 * @return <code>true</code> if automatic grab/fill can be performed.
+		 */
+		boolean grabEnabled();
+		/**
+		 * @return <code>true</code> if automatic right alignment can be performed.
+		 */
+		boolean rightEnabled();
+		/**
+		 * @return the component located directly on the left to given one, on same row.
+		 */
+		C getComponentAtLeft(C component);
+		/**
+		 * @return the component located directly on the right to given one, on same row.
+		 */
+		C getComponentAtRight(C component);
+		/**
+		 * Sets grab/fill for given component.
+		 */
+		void setGrabFill(C component, boolean horizontal) throws Exception;
+		/**
+		 * Sets right alignment for given component.
+		 */
+		void setRightAlignment(C component) throws Exception;
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/util/grid/GridConvertionHelper.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/util/grid/GridConvertionHelper.java
index 32d143bf0..1f8193b69 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/util/grid/GridConvertionHelper.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/util/grid/GridConvertionHelper.java
@@ -30,421 +30,421 @@
  * @coverage core.model.util
  */
 public class GridConvertionHelper {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private GridConvertionHelper() {
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Building groups
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static List<ComponentGroup> buildGroups(List<? extends IAbstractComponentInfo> components,
-      boolean horizontal) {
-    List<ComponentInGroup> groupComponents = Lists.newArrayList();
-    for (IAbstractComponentInfo component : components) {
-      ComponentInGroup groupComponent =
-          new ComponentInGroup(component, component.getModelBounds(), horizontal);
-      groupComponents.add(groupComponent);
-    }
-    return buildGroups(groupComponents);
-  }
-
-  private static List<ComponentGroup> buildGroups(List<ComponentInGroup> components) {
-    // sort by begins
-    Collections.sort(components, new Comparator<ComponentInGroup>() {
-      @Override
-      public int compare(ComponentInGroup o1, ComponentInGroup o2) {
-        return o1.getMin() - o2.getMin();
-      }
-    });
-    // create groups
-    List<ComponentGroup> groups = Lists.newArrayList();
-    for (ComponentInGroup component : components) {
-      // create group for this component
-      ComponentGroup group = new ComponentGroup();
-      int value = component.getMin();
-      for (ComponentInGroup component2 : components) {
-        if (component2.contains(value)) {
-          group.add(component2);
-        }
-      }
-      groups.add(group);
-    }
-    // remove sub-groups
-    for (Iterator<ComponentGroup> I = groups.iterator(); I.hasNext();) {
-      ComponentGroup subSetGroup = I.next();
-      if (isSubGroupInGroups(subSetGroup, groups)) {
-        I.remove();
-      }
-    }
-    //
-    return groups;
-  }
-
-  private static boolean isSubGroupInGroups(ComponentGroup subSetGroup, List<ComponentGroup> groups) {
-    for (ComponentGroup superSetGroup : groups) {
-      if (superSetGroup != subSetGroup
-          && superSetGroup.getComponents().containsAll(subSetGroup.getComponents())) {
-        return true;
-      }
-    }
-    return false;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Sorting
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sorts given {@link List} of {@link ComponentGroup}'s by beginnings.
-   */
-  public static void sortGroups(final List<ComponentGroup> groups) {
-    Collections.sort(groups, new Comparator<ComponentGroup>() {
-      @Override
-      public int compare(ComponentGroup group_1, ComponentGroup group_2) {
-        int value_1 = group_1.getMinOfBegins(groups);
-        int value_2 = group_2.getMinOfBegins(groups);
-        return value_1 - value_2;
-      }
-    });
-  }
-
-  /**
-   * Sorts {@link ComponentGroup}'s by beginnings in given transposed groups.
-   */
-  public static void sortGroupsByTranspose(List<ComponentGroup> groups,
-      List<ComponentGroup> t_groups) {
-    for (ComponentGroup group : groups) {
-      sortGroupByTranspose(group, t_groups);
-    }
-  }
-
-  /**
-   * Sorts {@link ComponentGroup} by beginnings in given transposed groups.
-   */
-  private static void sortGroupByTranspose(final ComponentGroup group,
-      final List<ComponentGroup> t_groups) {
-    Collections.sort(group.getComponents(), new Comparator<ComponentInGroup>() {
-      @Override
-      public int compare(ComponentInGroup component_1, ComponentInGroup component_2) {
-        return findTComponent(component_1).getMin() - findTComponent(component_2).getMin();
-      }
-
-      /**
-       * @return the {@link ComponentInGroup} from <code>t_groups</code> for given
-       *         {@link ComponentInGroup} from <code>group</code>.
-       */
-      private ComponentInGroup findTComponent(ComponentInGroup component) {
-        for (ComponentGroup tGroup : t_groups) {
-          for (ComponentInGroup tComponent : tGroup.getComponents()) {
-            if (tComponent.equals(component)) {
-              return tComponent;
-            }
-          }
-        }
-        // should not happen
-        throw new IllegalStateException("Can not find 't' for component: " + component);
-      }
-    });
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Bounds and gaps
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets min/max for each {@link ComponentGroup} in {@link List}.<br>
-   * Optionally uses parent size as "max" for last {@link ComponentGroup}.
-   *
-   * Also creates gap {@link ComponentGroup}'s.
-   */
-  public static void updateBoundsGaps(List<ComponentGroup> groups, boolean addGaps) {
-    List<ComponentGroup> newGroups = Lists.newArrayList();
-    //
-    for (int i = 0; i < groups.size(); i++) {
-      ComponentGroup group = groups.get(i);
-      // update min/max
-      group.m_min = group.getMinOfBegins(groups);
-      group.m_max = group.getMaxOfEnds(groups);
-      // add gap
-      if (addGaps) {
-        if (i == 0) {
-          if (group.m_min > 0) {
-            ComponentGroup gapGroup = new ComponentGroup();
-            gapGroup.m_min = 0;
-            gapGroup.m_max = group.m_min;
-            newGroups.add(gapGroup);
-          }
-        } else {
-          ComponentGroup prevGroup = groups.get(i - 1);
-          // add gap between previous and this groups
-          if (group.m_min - prevGroup.m_max > 0) {
-            // prepare gap
-            ComponentGroup gapGroup = new ComponentGroup();
-            gapGroup.m_min = prevGroup.m_max;
-            gapGroup.m_max = group.m_min;
-            newGroups.add(gapGroup);
-            // add spanned components
-            for (ComponentInGroup component : prevGroup.getComponents()) {
-              if (group.contains(component)) {
-                gapGroup.add(component);
-              }
-            }
-          }
-        }
-      }
-      // add group
-      newGroups.add(group);
-    }
-    // replace groups
-    groups.clear();
-    groups.addAll(newGroups);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Location/size (in groups)
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the first {@link ComponentGroup} that contains given component.
-   */
-  public static ComponentGroup getBeginForComponent(List<ComponentGroup> groups,
-      ComponentInGroup component) {
-    for (ComponentGroup group : groups) {
-      if (group.contains(component)) {
-        return group;
-      }
-    }
-    // should not happen
-    throw new IllegalStateException("Can not find group for component: " + component);
-  }
-
-  /**
-   * @return the last {@link ComponentGroup} that contains given component.
-   */
-  public static ComponentGroup getEndForComponent(List<ComponentGroup> groups,
-      ComponentInGroup component) {
-    ComponentGroup lastGroup = null;
-    for (ComponentGroup group : groups) {
-      if (group.contains(component)) {
-        lastGroup = group;
-      }
-    }
-    Assert.isNotNull(lastGroup, "Can not find group for component: " + component);
-    return lastGroup;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ComponentInGroup
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Description for single {@link IAbstractComponentInfo} in some {@link ComponentGroup}.
-   */
-  public static final class ComponentInGroup {
-    private final IAbstractComponentInfo m_component;
-    private final int m_min;
-    private final int m_max;
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    private ComponentInGroup(IAbstractComponentInfo component, Rectangle bounds, boolean horizontal) {
-      m_component = component;
-      int width = Math.max(1, bounds.width);
-      int height = Math.max(1, bounds.height);
-      if (horizontal) {
-        m_min = bounds.x;
-        m_max = bounds.x + width;
-      } else {
-        m_min = bounds.y;
-        m_max = bounds.y + height;
-      }
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Object
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public int hashCode() {
-      return m_component.hashCode();
-    }
-
-    @Override
-    public boolean equals(Object obj) {
-      if (obj instanceof ComponentInGroup) {
-        return m_component == ((ComponentInGroup) obj).m_component;
-      }
-      return false;
-    }
-
-    @Override
-    public String toString() {
-      return getComponentName() + "(" + m_min + "," + m_max + ")";
-    }
-
-    private String getComponentName() {
-      try {
-        return (String) ScriptUtils.evaluate("getVariableSupport().getComponentName()", m_component);
-      } catch (Throwable e) {
-        return m_component.toString();
-      }
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Access
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    /**
-     * @return the underlying {@link IAbstractComponentInfo}.
-     */
-    public IAbstractComponentInfo getComponent() {
-      return m_component;
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Internal access
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    /**
-     * @return the minimal coordinate.
-     */
-    private int getMin() {
-      return m_min;
-    }
-
-    /**
-     * @return the maximal coordinate.
-     */
-    private int getMax() {
-      return m_max;
-    }
-
-    /**
-     * @return <code>true</code> if component interval contains given value.
-     */
-    private boolean contains(int value) {
-      return m_min <= value && value < m_max;
-    }
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ComponentGroup
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Group of {@link ComponentInGroup}.
-   *
-   * @author scheglov_ke
-   */
-  public static class ComponentGroup {
-    private final List<ComponentInGroup> m_components = Lists.newArrayList();
-    private int m_min;
-    private int m_max;
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Object
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public String toString() {
-      return m_components + "(" + m_min + "," + m_max + ")";
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Access
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    /**
-     * @return the minimal coordinate.
-     */
-    public int getMin() {
-      return m_min;
-    }
-
-    /**
-     * @return the maximal coordinate.
-     */
-    public int getMax() {
-      return m_max;
-    }
-
-    /**
-     * @return the size of this {@link ComponentGroup}.
-     */
-    public int getSize() {
-      return m_max - m_min;
-    }
-
-    /**
-     * @return the {@link List} of {@link ComponentInGroup} that belongs to this group.
-     */
-    public List<ComponentInGroup> getComponents() {
-      return m_components;
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Internal access
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    /**
-     * Adds new {@link ComponentInGroup}.
-     */
-    private void add(ComponentInGroup component) {
-      if (!contains(component)) {
-        m_components.add(component);
-      }
-    }
-
-    /**
-     * @return the minimal coordinate for all components that begin in this group.
-     */
-    private int getMinOfBegins(List<ComponentGroup> groups) {
-      int result = Integer.MAX_VALUE;
-      for (ComponentInGroup component : m_components) {
-        if (getBeginForComponent(groups, component) == this) {
-          result = Math.min(result, component.getMin());
-        }
-      }
-      return result;
-    }
-
-    /**
-     * @return the maximal coordinate for all components that end in this group.
-     */
-    private int getMaxOfEnds(List<ComponentGroup> groups) {
-      int result = Integer.MIN_VALUE;
-      for (ComponentInGroup component : m_components) {
-        if (getEndForComponent(groups, component) == this) {
-          result = Math.max(result, component.getMax());
-        }
-      }
-      return result;
-    }
-
-    /**
-     * @return <code>true</code> if this group contains given component.
-     */
-    private boolean contains(ComponentInGroup component) {
-      return m_components.indexOf(component) != -1;
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private GridConvertionHelper() {
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Building groups
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static List<ComponentGroup> buildGroups(List<? extends IAbstractComponentInfo> components,
+			boolean horizontal) {
+		List<ComponentInGroup> groupComponents = Lists.newArrayList();
+		for (IAbstractComponentInfo component : components) {
+			ComponentInGroup groupComponent =
+					new ComponentInGroup(component, component.getModelBounds(), horizontal);
+			groupComponents.add(groupComponent);
+		}
+		return buildGroups(groupComponents);
+	}
+
+	private static List<ComponentGroup> buildGroups(List<ComponentInGroup> components) {
+		// sort by begins
+		Collections.sort(components, new Comparator<ComponentInGroup>() {
+			@Override
+			public int compare(ComponentInGroup o1, ComponentInGroup o2) {
+				return o1.getMin() - o2.getMin();
+			}
+		});
+		// create groups
+		List<ComponentGroup> groups = Lists.newArrayList();
+		for (ComponentInGroup component : components) {
+			// create group for this component
+			ComponentGroup group = new ComponentGroup();
+			int value = component.getMin();
+			for (ComponentInGroup component2 : components) {
+				if (component2.contains(value)) {
+					group.add(component2);
+				}
+			}
+			groups.add(group);
+		}
+		// remove sub-groups
+		for (Iterator<ComponentGroup> I = groups.iterator(); I.hasNext();) {
+			ComponentGroup subSetGroup = I.next();
+			if (isSubGroupInGroups(subSetGroup, groups)) {
+				I.remove();
+			}
+		}
+		//
+		return groups;
+	}
+
+	private static boolean isSubGroupInGroups(ComponentGroup subSetGroup, List<ComponentGroup> groups) {
+		for (ComponentGroup superSetGroup : groups) {
+			if (superSetGroup != subSetGroup
+					&& superSetGroup.getComponents().containsAll(subSetGroup.getComponents())) {
+				return true;
+			}
+		}
+		return false;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Sorting
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sorts given {@link List} of {@link ComponentGroup}'s by beginnings.
+	 */
+	public static void sortGroups(final List<ComponentGroup> groups) {
+		Collections.sort(groups, new Comparator<ComponentGroup>() {
+			@Override
+			public int compare(ComponentGroup group_1, ComponentGroup group_2) {
+				int value_1 = group_1.getMinOfBegins(groups);
+				int value_2 = group_2.getMinOfBegins(groups);
+				return value_1 - value_2;
+			}
+		});
+	}
+
+	/**
+	 * Sorts {@link ComponentGroup}'s by beginnings in given transposed groups.
+	 */
+	public static void sortGroupsByTranspose(List<ComponentGroup> groups,
+			List<ComponentGroup> t_groups) {
+		for (ComponentGroup group : groups) {
+			sortGroupByTranspose(group, t_groups);
+		}
+	}
+
+	/**
+	 * Sorts {@link ComponentGroup} by beginnings in given transposed groups.
+	 */
+	private static void sortGroupByTranspose(final ComponentGroup group,
+			final List<ComponentGroup> t_groups) {
+		Collections.sort(group.getComponents(), new Comparator<ComponentInGroup>() {
+			@Override
+			public int compare(ComponentInGroup component_1, ComponentInGroup component_2) {
+				return findTComponent(component_1).getMin() - findTComponent(component_2).getMin();
+			}
+
+			/**
+			 * @return the {@link ComponentInGroup} from <code>t_groups</code> for given
+			 *         {@link ComponentInGroup} from <code>group</code>.
+			 */
+			private ComponentInGroup findTComponent(ComponentInGroup component) {
+				for (ComponentGroup tGroup : t_groups) {
+					for (ComponentInGroup tComponent : tGroup.getComponents()) {
+						if (tComponent.equals(component)) {
+							return tComponent;
+						}
+					}
+				}
+				// should not happen
+				throw new IllegalStateException("Can not find 't' for component: " + component);
+			}
+		});
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Bounds and gaps
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets min/max for each {@link ComponentGroup} in {@link List}.<br>
+	 * Optionally uses parent size as "max" for last {@link ComponentGroup}.
+	 *
+	 * Also creates gap {@link ComponentGroup}'s.
+	 */
+	public static void updateBoundsGaps(List<ComponentGroup> groups, boolean addGaps) {
+		List<ComponentGroup> newGroups = Lists.newArrayList();
+		//
+		for (int i = 0; i < groups.size(); i++) {
+			ComponentGroup group = groups.get(i);
+			// update min/max
+			group.m_min = group.getMinOfBegins(groups);
+			group.m_max = group.getMaxOfEnds(groups);
+			// add gap
+			if (addGaps) {
+				if (i == 0) {
+					if (group.m_min > 0) {
+						ComponentGroup gapGroup = new ComponentGroup();
+						gapGroup.m_min = 0;
+						gapGroup.m_max = group.m_min;
+						newGroups.add(gapGroup);
+					}
+				} else {
+					ComponentGroup prevGroup = groups.get(i - 1);
+					// add gap between previous and this groups
+					if (group.m_min - prevGroup.m_max > 0) {
+						// prepare gap
+						ComponentGroup gapGroup = new ComponentGroup();
+						gapGroup.m_min = prevGroup.m_max;
+						gapGroup.m_max = group.m_min;
+						newGroups.add(gapGroup);
+						// add spanned components
+						for (ComponentInGroup component : prevGroup.getComponents()) {
+							if (group.contains(component)) {
+								gapGroup.add(component);
+							}
+						}
+					}
+				}
+			}
+			// add group
+			newGroups.add(group);
+		}
+		// replace groups
+		groups.clear();
+		groups.addAll(newGroups);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Location/size (in groups)
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the first {@link ComponentGroup} that contains given component.
+	 */
+	public static ComponentGroup getBeginForComponent(List<ComponentGroup> groups,
+			ComponentInGroup component) {
+		for (ComponentGroup group : groups) {
+			if (group.contains(component)) {
+				return group;
+			}
+		}
+		// should not happen
+		throw new IllegalStateException("Can not find group for component: " + component);
+	}
+
+	/**
+	 * @return the last {@link ComponentGroup} that contains given component.
+	 */
+	public static ComponentGroup getEndForComponent(List<ComponentGroup> groups,
+			ComponentInGroup component) {
+		ComponentGroup lastGroup = null;
+		for (ComponentGroup group : groups) {
+			if (group.contains(component)) {
+				lastGroup = group;
+			}
+		}
+		Assert.isNotNull(lastGroup, "Can not find group for component: " + component);
+		return lastGroup;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ComponentInGroup
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Description for single {@link IAbstractComponentInfo} in some {@link ComponentGroup}.
+	 */
+	public static final class ComponentInGroup {
+		private final IAbstractComponentInfo m_component;
+		private final int m_min;
+		private final int m_max;
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		private ComponentInGroup(IAbstractComponentInfo component, Rectangle bounds, boolean horizontal) {
+			m_component = component;
+			int width = Math.max(1, bounds.width);
+			int height = Math.max(1, bounds.height);
+			if (horizontal) {
+				m_min = bounds.x;
+				m_max = bounds.x + width;
+			} else {
+				m_min = bounds.y;
+				m_max = bounds.y + height;
+			}
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Object
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public int hashCode() {
+			return m_component.hashCode();
+		}
+
+		@Override
+		public boolean equals(Object obj) {
+			if (obj instanceof ComponentInGroup) {
+				return m_component == ((ComponentInGroup) obj).m_component;
+			}
+			return false;
+		}
+
+		@Override
+		public String toString() {
+			return getComponentName() + "(" + m_min + "," + m_max + ")";
+		}
+
+		private String getComponentName() {
+			try {
+				return (String) ScriptUtils.evaluate("getVariableSupport().getComponentName()", m_component);
+			} catch (Throwable e) {
+				return m_component.toString();
+			}
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Access
+		//
+		////////////////////////////////////////////////////////////////////////////
+		/**
+		 * @return the underlying {@link IAbstractComponentInfo}.
+		 */
+		public IAbstractComponentInfo getComponent() {
+			return m_component;
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Internal access
+		//
+		////////////////////////////////////////////////////////////////////////////
+		/**
+		 * @return the minimal coordinate.
+		 */
+		private int getMin() {
+			return m_min;
+		}
+
+		/**
+		 * @return the maximal coordinate.
+		 */
+		private int getMax() {
+			return m_max;
+		}
+
+		/**
+		 * @return <code>true</code> if component interval contains given value.
+		 */
+		private boolean contains(int value) {
+			return m_min <= value && value < m_max;
+		}
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ComponentGroup
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Group of {@link ComponentInGroup}.
+	 *
+	 * @author scheglov_ke
+	 */
+	public static class ComponentGroup {
+		private final List<ComponentInGroup> m_components = Lists.newArrayList();
+		private int m_min;
+		private int m_max;
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Object
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public String toString() {
+			return m_components + "(" + m_min + "," + m_max + ")";
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Access
+		//
+		////////////////////////////////////////////////////////////////////////////
+		/**
+		 * @return the minimal coordinate.
+		 */
+		public int getMin() {
+			return m_min;
+		}
+
+		/**
+		 * @return the maximal coordinate.
+		 */
+		public int getMax() {
+			return m_max;
+		}
+
+		/**
+		 * @return the size of this {@link ComponentGroup}.
+		 */
+		public int getSize() {
+			return m_max - m_min;
+		}
+
+		/**
+		 * @return the {@link List} of {@link ComponentInGroup} that belongs to this group.
+		 */
+		public List<ComponentInGroup> getComponents() {
+			return m_components;
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Internal access
+		//
+		////////////////////////////////////////////////////////////////////////////
+		/**
+		 * Adds new {@link ComponentInGroup}.
+		 */
+		private void add(ComponentInGroup component) {
+			if (!contains(component)) {
+				m_components.add(component);
+			}
+		}
+
+		/**
+		 * @return the minimal coordinate for all components that begin in this group.
+		 */
+		private int getMinOfBegins(List<ComponentGroup> groups) {
+			int result = Integer.MAX_VALUE;
+			for (ComponentInGroup component : m_components) {
+				if (getBeginForComponent(groups, component) == this) {
+					result = Math.min(result, component.getMin());
+				}
+			}
+			return result;
+		}
+
+		/**
+		 * @return the maximal coordinate for all components that end in this group.
+		 */
+		private int getMaxOfEnds(List<ComponentGroup> groups) {
+			int result = Integer.MIN_VALUE;
+			for (ComponentInGroup component : m_components) {
+				if (getEndForComponent(groups, component) == this) {
+					result = Math.max(result, component.getMax());
+				}
+			}
+			return result;
+		}
+
+		/**
+		 * @return <code>true</code> if this group contains given component.
+		 */
+		private boolean contains(ComponentInGroup component) {
+			return m_components.indexOf(component) != -1;
+		}
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/util/predicate/AlwaysPredicate.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/util/predicate/AlwaysPredicate.java
index 0dc1a8311..d4f0df594 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/util/predicate/AlwaysPredicate.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/util/predicate/AlwaysPredicate.java
@@ -19,24 +19,24 @@
  * @coverage core.model.util
  */
 public final class AlwaysPredicate implements Predicate<Object> {
-  private final boolean m_value;
+	private final boolean m_value;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AlwaysPredicate(boolean value) {
-    m_value = value;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AlwaysPredicate(boolean value) {
+		m_value = value;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Predicate
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean apply(Object t) {
-    return m_value;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Predicate
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean apply(Object t) {
+		return m_value;
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/util/predicate/ExpressionPredicate.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/util/predicate/ExpressionPredicate.java
index e07f61a90..42a460ba2 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/util/predicate/ExpressionPredicate.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/util/predicate/ExpressionPredicate.java
@@ -21,34 +21,34 @@
  * @coverage core.model.util
  */
 public final class ExpressionPredicate<T> implements Predicate<T> {
-  private final String m_expression;
+	private final String m_expression;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ExpressionPredicate(String expression) {
-    m_expression = expression;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ExpressionPredicate(String expression) {
+		m_expression = expression;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    return m_expression;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		return m_expression;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Predicate
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean apply(T t) {
-    return MVEL.evalToBoolean(m_expression, t);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Predicate
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean apply(T t) {
+		return MVEL.evalToBoolean(m_expression, t);
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/util/predicate/SubclassPredicate.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/util/predicate/SubclassPredicate.java
index 621702334..9cc3aaf86 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/util/predicate/SubclassPredicate.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/model/util/predicate/SubclassPredicate.java
@@ -21,24 +21,24 @@
  * @coverage core.model.util
  */
 public final class SubclassPredicate implements Predicate<Object> {
-  private final Class<?> m_superClass;
+	private final Class<?> m_superClass;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SubclassPredicate(Class<?> superClass) {
-    m_superClass = superClass;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SubclassPredicate(Class<?> superClass) {
+		m_superClass = superClass;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Predicate
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean apply(Object t) {
-    return ReflectionUtils.isAssignableFrom(m_superClass, t);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Predicate
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean apply(Object t) {
+		return ReflectionUtils.isAssignableFrom(m_superClass, t);
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/preferences/IPreferenceConstants.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/preferences/IPreferenceConstants.java
index c5be74679..2b56f4b3a 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/preferences/IPreferenceConstants.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/preferences/IPreferenceConstants.java
@@ -19,283 +19,283 @@
  * @coverage core.preferences
  */
 public interface IPreferenceConstants {
-  String TOOLKIT_ID = "org.eclipse.wb.core";
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Common
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * When <code>true</code>, we should add {@link ComponentEntryInfo} for any component chosen using
-   * {@link ChooseComponentEntryInfo}.
-   */
-  String P_COMMON_PALETTE_ADD_CHOSEN = "common.addChosenComponentsToPalette";
-  /**
-   * When <code>true</code>, we should accept drop <i>non-visual beans</i> to design canvas.
-   */
-  String P_COMMON_ACCEPT_NON_VISUAL_BEANS = "common.acceptNonVisualBeans";
-  /**
-   * When <code>true</code>, we can show debug information on console.
-   */
-  String P_COMMON_SHOW_DEBUG_INFO = "common.showDebugInfo";
-  /**
-   * When <code>true</code>, we should show warning if version of Eclipse does not corresponds to
-   * the version of Designer.
-   */
-  String P_COMMON_SHOW_VERSION_WARNING = "common.showVersionWarning";
-  /**
-   * Linux only. Troubleshooting option. When enabled, all of the flickering prevention tricks we do
-   * would be disabled.
-   */
-  String P_COMMON_LINUX_DISABLE_SCREENSHOT_WORKAROUNDS =
-      "common.linux.disableScreenshotWorkarounds";
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // General
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * When <code>true</code>, we should highlight containers without borders.
-   */
-  String P_GENERAL_HIGHLIGHT_CONTAINERS = "general.highlightContainersWithoutBorders";
-  /**
-   * When <code>true</code>, we should add "text" property value as suffix for presentation text.
-   */
-  String P_GENERAL_TEXT_SUFFIX = "general.showTextPropertySuffix";
-  /**
-   * When <code>true</code>, we should show property table with important properties after adding
-   * new component.
-   */
-  String P_GENERAL_IMPORTANT_PROPERTIES_AFTER_ADD = "general.importantPropertiesAfterAdd";
-  /**
-   * When <code>true</code>, we automatically activate direct edit after adding new component.
-   */
-  String P_GENERAL_DIRECT_EDIT_AFTER_ADD = "general.directEditAfterAdd";
-  /**
-   * The default width for top level component.
-   */
-  String P_GENERAL_DEFAULT_TOP_WIDTH = "general.topBoundsDefaultWidth";
-  /**
-   * The default height for top level component.
-   */
-  String P_GENERAL_DEFAULT_TOP_HEIGHT = "general.topBoundsDefaultHeight";
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editor layout
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Style of editor layout.
-   */
-  String P_EDITOR_LAYOUT = "editor.layout";
-  /**
-   * Pages mode, "Source" first.
-   */
-  int V_EDITOR_LAYOUT_PAGES_SOURCE = 0;
-  /**
-   * Pages mode, "Design" first.
-   */
-  int V_EDITOR_LAYOUT_PAGES_DESIGN = 1;
-  /**
-   * Split mode, above each other, "Design" first.
-   */
-  int V_EDITOR_LAYOUT_SPLIT_VERTICAL_DESIGN = 2;
-  /**
-   * Split mode, side by side, "Design" first.
-   */
-  int V_EDITOR_LAYOUT_SPLIT_HORIZONTAL_DESIGN = 3;
-  /**
-   * Split mode, above each other, "Source" first.
-   */
-  int V_EDITOR_LAYOUT_SPLIT_VERTICAL_SOURCE = 4;
-  /**
-   * Split mode, side by side, "Source" first.
-   */
-  int V_EDITOR_LAYOUT_SPLIT_HORIZONTAL_SOURCE = 5;
-  /**
-   * Delay (in milliseconds) to refresh design canvas on source change in split mode.
-   */
-  String P_EDITOR_LAYOUT_SYNC_DELAY = "editor.layout.syncDelay";
-  /**
-   * When <code>true</code>, Designer will try to determine if Java file contains GUI source code.
-   */
-  String P_EDITOR_RECOGNIZE_GUI = "editor.recognizeSourceGUI";
-  /**
-   * When <code>true</code>, editor should be maximized when switch to "Design" page.
-   */
-  String P_EDITOR_MAX_DESIGN = "editor.maximizeOnDesignPage";
-  /**
-   * When <code>true</code>, source code should be formatted on editor save.
-   */
-  String P_EDITOR_FORMAT_ON_SAVE = "editor.formatOnSave";
-  /**
-   * When <code>true</code>, automatically go to the component definition in source on component
-   * selection.
-   */
-  String P_EDITOR_GOTO_DEFINITION_ON_SELECTION = "editor.gotoComponentDefinitionOnSelection";
-  /**
-   * Action to be performed by double-clicking on widget in widget tree.
-   */
-  String P_EDITOR_TREE_DBL_CLICK_ACTION = "editor.dblClickOnWidgetInTreeAction";
-  /**
-   * Option of action to be performed by double-clicking on widget in widget tree. Open editor for
-   * selected widget at line of widget creation.
-   */
-  int V_EDITOR_TREE_OPEN_WIDGET_IN_EDITOR = 0;
-  /**
-   * Option of action to be performed by double-clicking on widget in widget tree. Creates
-   * selection/action listener for selected widget if applicable.
-   */
-  int V_EDITOR_TREE_CREATE_LISTENER = 1;
-  /**
-   * Option of action to be performed by double-clicking on widget in widget tree. Initiate variable
-   * rename of widget.
-   */
-  int V_EDITOR_TREE_INITIATE_RENAME = 2;
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Highlight visited lines
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * When <code>true</code>, editor will highlight visited/executed lines.
-   */
-  String P_HIGHLIGHT_VISITED = "editor.highlightVisitedLines";
-  /**
-   * The {@link Color} for highlighting visited/executed lines.
-   */
-  String P_HIGHLIGHT_VISITED_COLOR = "editor.highlightVisitedLines.color";
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code parsing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Comment that begins hidden/ignored code block.
-   */
-  String P_CODE_HIDE_BEGIN = "hiddenCode.begin";
-  /**
-   * Comment that ends hidden/ignored code block.
-   */
-  String P_CODE_HIDE_END = "hiddenCode.end";
-  /**
-   * Comment that specifies that this line of code should be ignored.
-   */
-  String P_CODE_HIDE_LINE = "hiddenCode.singleLine";
-  /**
-   * Strict evaluation mode - if some required parameter is missing, exceptions will be shown. If
-   * not strict, then we will silently use default value.
-   */
-  String P_CODE_STRICT_EVALUATE = "evaluation.strictMode";
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Variables: auto rename
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * The mode that describes how variable should be renamed on "text" property change.
-   */
-  String P_VARIABLE_TEXT_MODE = "textVariable.mode";
-  /**
-   * Always rename variable on "text" property change.
-   */
-  int V_VARIABLE_TEXT_MODE_ALWAYS = 0;
-  /**
-   * Rename variable on "text" property change only if variable has default name.
-   */
-  int V_VARIABLE_TEXT_MODE_DEFAULT = 1;
-  /**
-   * Never rename variable on "text" property change.
-   */
-  int V_VARIABLE_TEXT_MODE_NEVER = 2;
-  /**
-   * The the template for variable name on "text" property change.
-   */
-  String P_VARIABLE_TEXT_TEMPLATE = "textVariable.template";
-  /**
-   * The maximal count of words from "text" property that should be used in template.
-   */
-  String P_VARIABLE_TEXT_WORDS_LIMIT = "textVariable.wordsLimit";
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Variables: type specific
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * The id of preferences for type specific variables information.
-   */
-  String P_VARIABLE_TYPE_SPECIFIC = "typeSpecificVariable.store";
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Variables: mark component
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * If this preference is <code>true</code>, variable name should be placed in component, in GUI
-   * toolkit specific way, if supported at all.
-   */
-  String P_VARIABLE_IN_COMPONENT = "putNameIntoComponent";
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // NLS
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * When <code>true</code> and there are existing {@link AbstractSource}, then when we set value
-   * for {@link String} property, it should be automatically externalized.
-   */
-  String P_NLS_AUTO_EXTERNALIZE = "nls.automaticallyExternalize";
-  /**
-   * When <code>true</code>, then the string's value should be used ONLY for generating a key,
-   * ignoring any other set format on it.
-   */
-  String P_NLS_KEY_AS_STRING_VALUE_ONLY = "nls.useStringValueForKeyOnly";
-  /**
-   * When <code>true</code>, then qualified type name should be used for generating key.
-   */
-  String P_NLS_KEY_QUALIFIED_TYPE_NAME = "nls.useQualifiedTypeNameForKey";
-  /**
-   * When <code>true</code>, then the string's value should be appended in the end of the key.
-   */
-  String P_NLS_KEY_HAS_STRING_VALUE = "nls.useStringValueForKey";
-  /**
-   * Use can enter into property value with this prefix, this should mean that NLS key from some
-   * source should be used instead.
-   */
-  String P_NLS_KEY_AS_VALUE_PREFIX = "nls.prefixOfPropertyValueToSpecifyThatItIsKey";
-  /**
-   * When <code>true</code>, then changes of variable name will cause rename of NLS keys which have
-   * this name inside.
-   */
-  String P_NLS_KEY_RENAME_WITH_VARIABLE = "nls.renameKeysWithVariables";
-  /**
-   * Comma separated list of locale names, such as "en, de, ru_RU", which should be always displayed
-   * in NLS drop-down.
-   */
-  String P_NLS_ALWAYS_VISIBLE_LOCALES = "nls.alwaysVisibleLocales";
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Layouts
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * The id of default {@link LayoutDescription}.
-   */
-  String P_LAYOUT_DEFAULT = "layout.default";
-  /**
-   * If this preference is <code>true</code>, newly dropped container (if it supports layout) will
-   * use layout manager of its parent.
-   */
-  String P_LAYOUT_OF_PARENT = "layout.inheritLayoutOfParent";
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Style
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * When <code>true</code>, we use separate sub-menu for each sub-property (select, enum, macro).
-   * When <code>false</code>, we generate plain "Style" menu with separators between sub-property
-   * items.
-   */
-  String P_STYLE_PROPERTY_CASCADE_POPUP = "styleProperty.cascadePopup";
+	String TOOLKIT_ID = "org.eclipse.wb.core";
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Common
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * When <code>true</code>, we should add {@link ComponentEntryInfo} for any component chosen using
+	 * {@link ChooseComponentEntryInfo}.
+	 */
+	String P_COMMON_PALETTE_ADD_CHOSEN = "common.addChosenComponentsToPalette";
+	/**
+	 * When <code>true</code>, we should accept drop <i>non-visual beans</i> to design canvas.
+	 */
+	String P_COMMON_ACCEPT_NON_VISUAL_BEANS = "common.acceptNonVisualBeans";
+	/**
+	 * When <code>true</code>, we can show debug information on console.
+	 */
+	String P_COMMON_SHOW_DEBUG_INFO = "common.showDebugInfo";
+	/**
+	 * When <code>true</code>, we should show warning if version of Eclipse does not corresponds to
+	 * the version of Designer.
+	 */
+	String P_COMMON_SHOW_VERSION_WARNING = "common.showVersionWarning";
+	/**
+	 * Linux only. Troubleshooting option. When enabled, all of the flickering prevention tricks we do
+	 * would be disabled.
+	 */
+	String P_COMMON_LINUX_DISABLE_SCREENSHOT_WORKAROUNDS =
+			"common.linux.disableScreenshotWorkarounds";
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// General
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * When <code>true</code>, we should highlight containers without borders.
+	 */
+	String P_GENERAL_HIGHLIGHT_CONTAINERS = "general.highlightContainersWithoutBorders";
+	/**
+	 * When <code>true</code>, we should add "text" property value as suffix for presentation text.
+	 */
+	String P_GENERAL_TEXT_SUFFIX = "general.showTextPropertySuffix";
+	/**
+	 * When <code>true</code>, we should show property table with important properties after adding
+	 * new component.
+	 */
+	String P_GENERAL_IMPORTANT_PROPERTIES_AFTER_ADD = "general.importantPropertiesAfterAdd";
+	/**
+	 * When <code>true</code>, we automatically activate direct edit after adding new component.
+	 */
+	String P_GENERAL_DIRECT_EDIT_AFTER_ADD = "general.directEditAfterAdd";
+	/**
+	 * The default width for top level component.
+	 */
+	String P_GENERAL_DEFAULT_TOP_WIDTH = "general.topBoundsDefaultWidth";
+	/**
+	 * The default height for top level component.
+	 */
+	String P_GENERAL_DEFAULT_TOP_HEIGHT = "general.topBoundsDefaultHeight";
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editor layout
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Style of editor layout.
+	 */
+	String P_EDITOR_LAYOUT = "editor.layout";
+	/**
+	 * Pages mode, "Source" first.
+	 */
+	int V_EDITOR_LAYOUT_PAGES_SOURCE = 0;
+	/**
+	 * Pages mode, "Design" first.
+	 */
+	int V_EDITOR_LAYOUT_PAGES_DESIGN = 1;
+	/**
+	 * Split mode, above each other, "Design" first.
+	 */
+	int V_EDITOR_LAYOUT_SPLIT_VERTICAL_DESIGN = 2;
+	/**
+	 * Split mode, side by side, "Design" first.
+	 */
+	int V_EDITOR_LAYOUT_SPLIT_HORIZONTAL_DESIGN = 3;
+	/**
+	 * Split mode, above each other, "Source" first.
+	 */
+	int V_EDITOR_LAYOUT_SPLIT_VERTICAL_SOURCE = 4;
+	/**
+	 * Split mode, side by side, "Source" first.
+	 */
+	int V_EDITOR_LAYOUT_SPLIT_HORIZONTAL_SOURCE = 5;
+	/**
+	 * Delay (in milliseconds) to refresh design canvas on source change in split mode.
+	 */
+	String P_EDITOR_LAYOUT_SYNC_DELAY = "editor.layout.syncDelay";
+	/**
+	 * When <code>true</code>, Designer will try to determine if Java file contains GUI source code.
+	 */
+	String P_EDITOR_RECOGNIZE_GUI = "editor.recognizeSourceGUI";
+	/**
+	 * When <code>true</code>, editor should be maximized when switch to "Design" page.
+	 */
+	String P_EDITOR_MAX_DESIGN = "editor.maximizeOnDesignPage";
+	/**
+	 * When <code>true</code>, source code should be formatted on editor save.
+	 */
+	String P_EDITOR_FORMAT_ON_SAVE = "editor.formatOnSave";
+	/**
+	 * When <code>true</code>, automatically go to the component definition in source on component
+	 * selection.
+	 */
+	String P_EDITOR_GOTO_DEFINITION_ON_SELECTION = "editor.gotoComponentDefinitionOnSelection";
+	/**
+	 * Action to be performed by double-clicking on widget in widget tree.
+	 */
+	String P_EDITOR_TREE_DBL_CLICK_ACTION = "editor.dblClickOnWidgetInTreeAction";
+	/**
+	 * Option of action to be performed by double-clicking on widget in widget tree. Open editor for
+	 * selected widget at line of widget creation.
+	 */
+	int V_EDITOR_TREE_OPEN_WIDGET_IN_EDITOR = 0;
+	/**
+	 * Option of action to be performed by double-clicking on widget in widget tree. Creates
+	 * selection/action listener for selected widget if applicable.
+	 */
+	int V_EDITOR_TREE_CREATE_LISTENER = 1;
+	/**
+	 * Option of action to be performed by double-clicking on widget in widget tree. Initiate variable
+	 * rename of widget.
+	 */
+	int V_EDITOR_TREE_INITIATE_RENAME = 2;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Highlight visited lines
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * When <code>true</code>, editor will highlight visited/executed lines.
+	 */
+	String P_HIGHLIGHT_VISITED = "editor.highlightVisitedLines";
+	/**
+	 * The {@link Color} for highlighting visited/executed lines.
+	 */
+	String P_HIGHLIGHT_VISITED_COLOR = "editor.highlightVisitedLines.color";
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code parsing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Comment that begins hidden/ignored code block.
+	 */
+	String P_CODE_HIDE_BEGIN = "hiddenCode.begin";
+	/**
+	 * Comment that ends hidden/ignored code block.
+	 */
+	String P_CODE_HIDE_END = "hiddenCode.end";
+	/**
+	 * Comment that specifies that this line of code should be ignored.
+	 */
+	String P_CODE_HIDE_LINE = "hiddenCode.singleLine";
+	/**
+	 * Strict evaluation mode - if some required parameter is missing, exceptions will be shown. If
+	 * not strict, then we will silently use default value.
+	 */
+	String P_CODE_STRICT_EVALUATE = "evaluation.strictMode";
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Variables: auto rename
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * The mode that describes how variable should be renamed on "text" property change.
+	 */
+	String P_VARIABLE_TEXT_MODE = "textVariable.mode";
+	/**
+	 * Always rename variable on "text" property change.
+	 */
+	int V_VARIABLE_TEXT_MODE_ALWAYS = 0;
+	/**
+	 * Rename variable on "text" property change only if variable has default name.
+	 */
+	int V_VARIABLE_TEXT_MODE_DEFAULT = 1;
+	/**
+	 * Never rename variable on "text" property change.
+	 */
+	int V_VARIABLE_TEXT_MODE_NEVER = 2;
+	/**
+	 * The the template for variable name on "text" property change.
+	 */
+	String P_VARIABLE_TEXT_TEMPLATE = "textVariable.template";
+	/**
+	 * The maximal count of words from "text" property that should be used in template.
+	 */
+	String P_VARIABLE_TEXT_WORDS_LIMIT = "textVariable.wordsLimit";
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Variables: type specific
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * The id of preferences for type specific variables information.
+	 */
+	String P_VARIABLE_TYPE_SPECIFIC = "typeSpecificVariable.store";
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Variables: mark component
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * If this preference is <code>true</code>, variable name should be placed in component, in GUI
+	 * toolkit specific way, if supported at all.
+	 */
+	String P_VARIABLE_IN_COMPONENT = "putNameIntoComponent";
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// NLS
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * When <code>true</code> and there are existing {@link AbstractSource}, then when we set value
+	 * for {@link String} property, it should be automatically externalized.
+	 */
+	String P_NLS_AUTO_EXTERNALIZE = "nls.automaticallyExternalize";
+	/**
+	 * When <code>true</code>, then the string's value should be used ONLY for generating a key,
+	 * ignoring any other set format on it.
+	 */
+	String P_NLS_KEY_AS_STRING_VALUE_ONLY = "nls.useStringValueForKeyOnly";
+	/**
+	 * When <code>true</code>, then qualified type name should be used for generating key.
+	 */
+	String P_NLS_KEY_QUALIFIED_TYPE_NAME = "nls.useQualifiedTypeNameForKey";
+	/**
+	 * When <code>true</code>, then the string's value should be appended in the end of the key.
+	 */
+	String P_NLS_KEY_HAS_STRING_VALUE = "nls.useStringValueForKey";
+	/**
+	 * Use can enter into property value with this prefix, this should mean that NLS key from some
+	 * source should be used instead.
+	 */
+	String P_NLS_KEY_AS_VALUE_PREFIX = "nls.prefixOfPropertyValueToSpecifyThatItIsKey";
+	/**
+	 * When <code>true</code>, then changes of variable name will cause rename of NLS keys which have
+	 * this name inside.
+	 */
+	String P_NLS_KEY_RENAME_WITH_VARIABLE = "nls.renameKeysWithVariables";
+	/**
+	 * Comma separated list of locale names, such as "en, de, ru_RU", which should be always displayed
+	 * in NLS drop-down.
+	 */
+	String P_NLS_ALWAYS_VISIBLE_LOCALES = "nls.alwaysVisibleLocales";
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Layouts
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * The id of default {@link LayoutDescription}.
+	 */
+	String P_LAYOUT_DEFAULT = "layout.default";
+	/**
+	 * If this preference is <code>true</code>, newly dropped container (if it supports layout) will
+	 * use layout manager of its parent.
+	 */
+	String P_LAYOUT_OF_PARENT = "layout.inheritLayoutOfParent";
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Style
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * When <code>true</code>, we use separate sub-menu for each sub-property (select, enum, macro).
+	 * When <code>false</code>, we generate plain "Style" menu with separators between sub-property
+	 * items.
+	 */
+	String P_STYLE_PROPERTY_CASCADE_POPUP = "styleProperty.cascadePopup";
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/preferences/Messages.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/preferences/Messages.java
index 6ccb3539a..b57bcd705 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/preferences/Messages.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/preferences/Messages.java
@@ -3,96 +3,96 @@
 import org.eclipse.osgi.util.NLS;
 
 public class Messages extends NLS {
-  private static final String BUNDLE_NAME = "org.eclipse.wb.internal.core.preferences.messages"; //$NON-NLS-1$
-  public static String CodeGenerationPreferencePage_deduceFlag;
-  public static String CodeGenerationPreferencePage_defaultGroup;
-  public static String CodeGenerationPreferencePage_descriptionLabel;
-  public static String CodeGenerationPreferencePage_forcedMethod;
-  public static String CodeGenerationPreferencePage_hintStatementSelectingTab;
-  public static String CodeGenerationPreferencePage_hintVariableSelectingTab;
-  public static String CodeGenerationPreferencePage_noPreviewMessage;
-  public static String CodeGenerationPreferencePage_previewLabel;
-  public static String CodeGenerationPreferencePage_statementLabel;
-  public static String CodeGenerationPreferencePage_variableLabel;
-  public static String EventsPreferencePage_decorateIconFlag;
-  public static String EventsPreferencePage_deleteStubsFlag;
-  public static String EventsPreferencePage_finalParametersFlag;
-  public static String EventsPreferencePage_innerPatternHint1;
-  public static String EventsPreferencePage_innerPatternHint10;
-  public static String EventsPreferencePage_innerPatternHint11;
-  public static String EventsPreferencePage_innerPatternHint12;
-  public static String EventsPreferencePage_innerPatternHint13;
-  public static String EventsPreferencePage_innerPatternHint14;
-  public static String EventsPreferencePage_innerPatternHint15;
-  public static String EventsPreferencePage_innerPatternHint2;
-  public static String EventsPreferencePage_innerPatternHint3;
-  public static String EventsPreferencePage_innerPatternHint4;
-  public static String EventsPreferencePage_innerPatternHint5;
-  public static String EventsPreferencePage_innerPatternHint6;
-  public static String EventsPreferencePage_innerPatternHint7;
-  public static String EventsPreferencePage_innerPatternHint8;
-  public static String EventsPreferencePage_innerPatternHint9;
-  public static String EventsPreferencePage_patternHint1;
-  public static String EventsPreferencePage_patternHint2;
-  public static String EventsPreferencePage_patternHint3;
-  public static String EventsPreferencePage_patternHint4;
-  public static String EventsPreferencePage_patternHint5;
-  public static String EventsPreferencePage_patternHint6;
-  public static String EventsPreferencePage_stubLabel;
-  public static String EventsPreferencePage_stubPatternHint1;
-  public static String EventsPreferencePage_stubPatternHint10;
-  public static String EventsPreferencePage_stubPatternHint11;
-  public static String EventsPreferencePage_stubPatternHint12;
-  public static String EventsPreferencePage_stubPatternHint2;
-  public static String EventsPreferencePage_stubPatternHint3;
-  public static String EventsPreferencePage_stubPatternHint4;
-  public static String EventsPreferencePage_stubPatternHint5;
-  public static String EventsPreferencePage_stubPatternHint6;
-  public static String EventsPreferencePage_stubPatternHint7;
-  public static String EventsPreferencePage_stubPatternHint8;
-  public static String EventsPreferencePage_stubPatternHint9;
-  public static String EventsPreferencePage_typeAnonymous;
-  public static String EventsPreferencePage_typeInner;
-  public static String EventsPreferencePage_typeInnerAfterLastListener;
-  public static String EventsPreferencePage_typeInnerBeforeFirstListener;
-  public static String EventsPreferencePage_typeInnerFirstInClass;
-  public static String EventsPreferencePage_typeInnerLastInClass;
-  public static String EventsPreferencePage_typeInterface;
-  public static String EventsPreferencePage_typeLabel;
-  public static String VariablesPreferencePage_arAlways;
-  public static String VariablesPreferencePage_arDefault;
-  public static String VariablesPreferencePage_arHint1;
-  public static String VariablesPreferencePage_arHint2;
-  public static String VariablesPreferencePage_arHint3;
-  public static String VariablesPreferencePage_arHint4;
-  public static String VariablesPreferencePage_arHint5;
-  public static String VariablesPreferencePage_arLabel;
-  public static String VariablesPreferencePage_arLimitWords1;
-  public static String VariablesPreferencePage_arLimitWords2;
-  public static String VariablesPreferencePage_arNever;
-  public static String VariablesPreferencePage_arPatternLabel;
-  public static String VariablesPreferencePage_autoRenameTab;
-  public static String VariablesPreferencePage_miscRememberName;
-  public static String VariablesPreferencePage_miscTab;
-  public static String VariablesPreferencePage_setErrorMessage;
-  public static String VariablesPreferencePage_setErrorTitle;
-  public static String VariablesPreferencePage_tsAcronymColumn;
-  public static String VariablesPreferencePage_tsAddButton;
-  public static String VariablesPreferencePage_tsAddMessage;
-  public static String VariablesPreferencePage_tsAddTitle;
-  public static String VariablesPreferencePage_tsAsFieldColumn;
-  public static String VariablesPreferencePage_tsClassColumn;
-  public static String VariablesPreferencePage_tsDefaultNameColumn;
-  public static String VariablesPreferencePage_tsRemove;
-  public static String VariablesPreferencePage_tsRemoveMessage;
-  public static String VariablesPreferencePage_tsRemoveTitle;
-  public static String VariablesPreferencePage_typeSpecificTab;
-  public static String VariablesPreferencePage_validateVariableNameTemplate;
-  static {
-    // initialize resource bundle
-    NLS.initializeMessages(BUNDLE_NAME, Messages.class);
-  }
+	private static final String BUNDLE_NAME = "org.eclipse.wb.internal.core.preferences.messages"; //$NON-NLS-1$
+	public static String CodeGenerationPreferencePage_deduceFlag;
+	public static String CodeGenerationPreferencePage_defaultGroup;
+	public static String CodeGenerationPreferencePage_descriptionLabel;
+	public static String CodeGenerationPreferencePage_forcedMethod;
+	public static String CodeGenerationPreferencePage_hintStatementSelectingTab;
+	public static String CodeGenerationPreferencePage_hintVariableSelectingTab;
+	public static String CodeGenerationPreferencePage_noPreviewMessage;
+	public static String CodeGenerationPreferencePage_previewLabel;
+	public static String CodeGenerationPreferencePage_statementLabel;
+	public static String CodeGenerationPreferencePage_variableLabel;
+	public static String EventsPreferencePage_decorateIconFlag;
+	public static String EventsPreferencePage_deleteStubsFlag;
+	public static String EventsPreferencePage_finalParametersFlag;
+	public static String EventsPreferencePage_innerPatternHint1;
+	public static String EventsPreferencePage_innerPatternHint10;
+	public static String EventsPreferencePage_innerPatternHint11;
+	public static String EventsPreferencePage_innerPatternHint12;
+	public static String EventsPreferencePage_innerPatternHint13;
+	public static String EventsPreferencePage_innerPatternHint14;
+	public static String EventsPreferencePage_innerPatternHint15;
+	public static String EventsPreferencePage_innerPatternHint2;
+	public static String EventsPreferencePage_innerPatternHint3;
+	public static String EventsPreferencePage_innerPatternHint4;
+	public static String EventsPreferencePage_innerPatternHint5;
+	public static String EventsPreferencePage_innerPatternHint6;
+	public static String EventsPreferencePage_innerPatternHint7;
+	public static String EventsPreferencePage_innerPatternHint8;
+	public static String EventsPreferencePage_innerPatternHint9;
+	public static String EventsPreferencePage_patternHint1;
+	public static String EventsPreferencePage_patternHint2;
+	public static String EventsPreferencePage_patternHint3;
+	public static String EventsPreferencePage_patternHint4;
+	public static String EventsPreferencePage_patternHint5;
+	public static String EventsPreferencePage_patternHint6;
+	public static String EventsPreferencePage_stubLabel;
+	public static String EventsPreferencePage_stubPatternHint1;
+	public static String EventsPreferencePage_stubPatternHint10;
+	public static String EventsPreferencePage_stubPatternHint11;
+	public static String EventsPreferencePage_stubPatternHint12;
+	public static String EventsPreferencePage_stubPatternHint2;
+	public static String EventsPreferencePage_stubPatternHint3;
+	public static String EventsPreferencePage_stubPatternHint4;
+	public static String EventsPreferencePage_stubPatternHint5;
+	public static String EventsPreferencePage_stubPatternHint6;
+	public static String EventsPreferencePage_stubPatternHint7;
+	public static String EventsPreferencePage_stubPatternHint8;
+	public static String EventsPreferencePage_stubPatternHint9;
+	public static String EventsPreferencePage_typeAnonymous;
+	public static String EventsPreferencePage_typeInner;
+	public static String EventsPreferencePage_typeInnerAfterLastListener;
+	public static String EventsPreferencePage_typeInnerBeforeFirstListener;
+	public static String EventsPreferencePage_typeInnerFirstInClass;
+	public static String EventsPreferencePage_typeInnerLastInClass;
+	public static String EventsPreferencePage_typeInterface;
+	public static String EventsPreferencePage_typeLabel;
+	public static String VariablesPreferencePage_arAlways;
+	public static String VariablesPreferencePage_arDefault;
+	public static String VariablesPreferencePage_arHint1;
+	public static String VariablesPreferencePage_arHint2;
+	public static String VariablesPreferencePage_arHint3;
+	public static String VariablesPreferencePage_arHint4;
+	public static String VariablesPreferencePage_arHint5;
+	public static String VariablesPreferencePage_arLabel;
+	public static String VariablesPreferencePage_arLimitWords1;
+	public static String VariablesPreferencePage_arLimitWords2;
+	public static String VariablesPreferencePage_arNever;
+	public static String VariablesPreferencePage_arPatternLabel;
+	public static String VariablesPreferencePage_autoRenameTab;
+	public static String VariablesPreferencePage_miscRememberName;
+	public static String VariablesPreferencePage_miscTab;
+	public static String VariablesPreferencePage_setErrorMessage;
+	public static String VariablesPreferencePage_setErrorTitle;
+	public static String VariablesPreferencePage_tsAcronymColumn;
+	public static String VariablesPreferencePage_tsAddButton;
+	public static String VariablesPreferencePage_tsAddMessage;
+	public static String VariablesPreferencePage_tsAddTitle;
+	public static String VariablesPreferencePage_tsAsFieldColumn;
+	public static String VariablesPreferencePage_tsClassColumn;
+	public static String VariablesPreferencePage_tsDefaultNameColumn;
+	public static String VariablesPreferencePage_tsRemove;
+	public static String VariablesPreferencePage_tsRemoveMessage;
+	public static String VariablesPreferencePage_tsRemoveTitle;
+	public static String VariablesPreferencePage_typeSpecificTab;
+	public static String VariablesPreferencePage_validateVariableNameTemplate;
+	static {
+		// initialize resource bundle
+		NLS.initializeMessages(BUNDLE_NAME, Messages.class);
+	}
 
-  private Messages() {
-  }
+	private Messages() {
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/preferences/PreferenceInitializer.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/preferences/PreferenceInitializer.java
index eda472fbc..c9222b209 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/preferences/PreferenceInitializer.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/preferences/PreferenceInitializer.java
@@ -22,35 +22,35 @@
  * @coverage core.preferences
  */
 public final class PreferenceInitializer extends AbstractPreferenceInitializer
-    implements
-      IPreferenceConstants {
-  @Override
-  public void initializeDefaultPreferences() {
-    IPreferenceStore preferences = DesignerPlugin.getDefault().getPreferenceStore();
-    // common
-    preferences.setDefault(P_COMMON_PALETTE_ADD_CHOSEN, true);
-    preferences.setDefault(P_COMMON_ACCEPT_NON_VISUAL_BEANS, true);
-    preferences.setDefault(P_COMMON_SHOW_DEBUG_INFO, false);
-    preferences.setDefault(P_COMMON_SHOW_VERSION_WARNING, false);
-    // linux only
-    preferences.setDefault(P_COMMON_LINUX_DISABLE_SCREENSHOT_WORKAROUNDS, false);
-    // editor layout
-    preferences.setDefault(P_EDITOR_LAYOUT, V_EDITOR_LAYOUT_PAGES_SOURCE);
-    preferences.setDefault(P_EDITOR_LAYOUT_SYNC_DELAY, 1000);
-    // editor
-    preferences.setDefault(P_EDITOR_RECOGNIZE_GUI, false);
-    preferences.setDefault(P_EDITOR_MAX_DESIGN, false);
-    preferences.setDefault(P_EDITOR_FORMAT_ON_SAVE, false);
-    preferences.setDefault(P_EDITOR_GOTO_DEFINITION_ON_SELECTION, true);
-    preferences.setDefault(P_EDITOR_TREE_DBL_CLICK_ACTION, V_EDITOR_TREE_OPEN_WIDGET_IN_EDITOR);
-    // highlight visited/executed lines
-    preferences.setDefault(P_HIGHLIGHT_VISITED, false);
-    //PreferenceConverter.setDefault(preferences, P_HIGHLIGHT_VISITED_COLOR, new RGB(235, 255, 235));
-    preferences.setDefault(P_HIGHLIGHT_VISITED_COLOR, "235,255,235");
-    // code parsing
-    preferences.setDefault(P_CODE_HIDE_BEGIN, "$hide>>$");
-    preferences.setDefault(P_CODE_HIDE_END, "$hide<<$");
-    preferences.setDefault(P_CODE_HIDE_LINE, "$hide$");
-    preferences.setDefault(P_CODE_STRICT_EVALUATE, false);
-  }
+implements
+IPreferenceConstants {
+	@Override
+	public void initializeDefaultPreferences() {
+		IPreferenceStore preferences = DesignerPlugin.getDefault().getPreferenceStore();
+		// common
+		preferences.setDefault(P_COMMON_PALETTE_ADD_CHOSEN, true);
+		preferences.setDefault(P_COMMON_ACCEPT_NON_VISUAL_BEANS, true);
+		preferences.setDefault(P_COMMON_SHOW_DEBUG_INFO, false);
+		preferences.setDefault(P_COMMON_SHOW_VERSION_WARNING, false);
+		// linux only
+		preferences.setDefault(P_COMMON_LINUX_DISABLE_SCREENSHOT_WORKAROUNDS, false);
+		// editor layout
+		preferences.setDefault(P_EDITOR_LAYOUT, V_EDITOR_LAYOUT_PAGES_SOURCE);
+		preferences.setDefault(P_EDITOR_LAYOUT_SYNC_DELAY, 1000);
+		// editor
+		preferences.setDefault(P_EDITOR_RECOGNIZE_GUI, false);
+		preferences.setDefault(P_EDITOR_MAX_DESIGN, false);
+		preferences.setDefault(P_EDITOR_FORMAT_ON_SAVE, false);
+		preferences.setDefault(P_EDITOR_GOTO_DEFINITION_ON_SELECTION, true);
+		preferences.setDefault(P_EDITOR_TREE_DBL_CLICK_ACTION, V_EDITOR_TREE_OPEN_WIDGET_IN_EDITOR);
+		// highlight visited/executed lines
+		preferences.setDefault(P_HIGHLIGHT_VISITED, false);
+		//PreferenceConverter.setDefault(preferences, P_HIGHLIGHT_VISITED_COLOR, new RGB(235, 255, 235));
+		preferences.setDefault(P_HIGHLIGHT_VISITED_COLOR, "235,255,235");
+		// code parsing
+		preferences.setDefault(P_CODE_HIDE_BEGIN, "$hide>>$");
+		preferences.setDefault(P_CODE_HIDE_END, "$hide<<$");
+		preferences.setDefault(P_CODE_HIDE_LINE, "$hide$");
+		preferences.setDefault(P_CODE_STRICT_EVALUATE, false);
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/preferences/PreferenceToSystemForwarder.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/preferences/PreferenceToSystemForwarder.java
index 086132fb5..0bc1a758e 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/preferences/PreferenceToSystemForwarder.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/preferences/PreferenceToSystemForwarder.java
@@ -20,31 +20,31 @@
  * @author mitin_aa
  */
 public final class PreferenceToSystemForwarder {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public PreferenceToSystemForwarder(IPreferenceStore preferenceStore,
-      final String preference,
-      final String property) {
-    preferenceStore.addPropertyChangeListener(new IPropertyChangeListener() {
-      @Override
-      public void propertyChange(PropertyChangeEvent event) {
-        if (event.getProperty().equals(preference)) {
-          updateProperty(property, event.getNewValue());
-        }
-      }
-    });
-    updateProperty(property, preferenceStore.getBoolean(preference));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public PreferenceToSystemForwarder(IPreferenceStore preferenceStore,
+			final String preference,
+			final String property) {
+		preferenceStore.addPropertyChangeListener(new IPropertyChangeListener() {
+			@Override
+			public void propertyChange(PropertyChangeEvent event) {
+				if (event.getProperty().equals(preference)) {
+					updateProperty(property, event.getNewValue());
+				}
+			}
+		});
+		updateProperty(property, preferenceStore.getBoolean(preference));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Update
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void updateProperty(String property, Object newValue) {
-    System.setProperty(property, newValue.toString());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Update
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void updateProperty(String property, Object newValue) {
+		System.setProperty(property, newValue.toString());
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/preferences/bind/AbstractBindingPreferencesPage.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/preferences/bind/AbstractBindingPreferencesPage.java
index c713fc5de..4965b3ab0 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/preferences/bind/AbstractBindingPreferencesPage.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/preferences/bind/AbstractBindingPreferencesPage.java
@@ -32,84 +32,84 @@
  * @coverage core.preferences.ui
  */
 public abstract class AbstractBindingPreferencesPage extends PreferencePage
-    implements
-      IWorkbenchPreferencePage {
-  protected final DataBindManager m_bindManager = new DataBindManager();
-  protected final ToolkitDescription m_toolkit;
-  protected final IPreferenceStore m_preferences;
+implements
+IWorkbenchPreferencePage {
+	protected final DataBindManager m_bindManager = new DataBindManager();
+	protected final ToolkitDescription m_toolkit;
+	protected final IPreferenceStore m_preferences;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractBindingPreferencesPage(ToolkitDescription toolkit) {
-    m_toolkit = toolkit;
-    m_preferences = m_toolkit.getPreferences();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractBindingPreferencesPage(ToolkitDescription toolkit) {
+		m_toolkit = toolkit;
+		m_preferences = m_toolkit.getPreferences();
+	}
 
-  public AbstractBindingPreferencesPage(IPreferenceStore preferences) {
-    m_toolkit = null;
-    m_preferences = preferences;
-  }
+	public AbstractBindingPreferencesPage(IPreferenceStore preferences) {
+		m_toolkit = null;
+		m_preferences = preferences;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private AbstractBindingComposite m_composite;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private AbstractBindingComposite m_composite;
 
-  @Override
-  protected final Control createContents(Composite parent) {
-    Composite contents = new Composite(parent, SWT.NONE);
-    contents.setLayout(new FillLayout());
-    //
-    m_composite = createBindingComposite(contents);
-    m_composite.setValidationListener(new IValidationListener() {
-      @Override
-      public void update(String message) {
-        setErrorMessage(message);
-        setValid(message == null);
-      }
-    });
-    m_composite.updateValidate();
-    //
-    return contents;
-  }
+	@Override
+	protected final Control createContents(Composite parent) {
+		Composite contents = new Composite(parent, SWT.NONE);
+		contents.setLayout(new FillLayout());
+		//
+		m_composite = createBindingComposite(contents);
+		m_composite.setValidationListener(new IValidationListener() {
+			@Override
+			public void update(String message) {
+				setErrorMessage(message);
+				setValid(message == null);
+			}
+		});
+		m_composite.updateValidate();
+		//
+		return contents;
+	}
 
-  /**
-   * Creates single {@link AbstractBindingComposite} on given parent.
-   */
-  protected abstract AbstractBindingComposite createBindingComposite(Composite parent);
+	/**
+	 * Creates single {@link AbstractBindingComposite} on given parent.
+	 */
+	protected abstract AbstractBindingComposite createBindingComposite(Composite parent);
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // State
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean performOk() {
-    if (!m_composite.performOk()) {
-      return false;
-    }
-    m_bindManager.performCommit();
-    return super.performOk();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// State
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean performOk() {
+		if (!m_composite.performOk()) {
+			return false;
+		}
+		m_bindManager.performCommit();
+		return super.performOk();
+	}
 
-  @Override
-  protected void performDefaults() {
-    m_composite.performDefaults();
-    m_bindManager.performDefault();
-    super.performDefaults();
-  }
+	@Override
+	protected void performDefaults() {
+		m_composite.performDefaults();
+		m_bindManager.performDefault();
+		super.performDefaults();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IWorkbenchPreferencePage
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final void init(IWorkbench workbench) {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IWorkbenchPreferencePage
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final void init(IWorkbench workbench) {
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/CompactToStringStyle.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/CompactToStringStyle.java
index b5ef9ffea..f6fb79c91 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/CompactToStringStyle.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/CompactToStringStyle.java
@@ -18,20 +18,20 @@
  * @author scheglov_ke
  */
 public class CompactToStringStyle extends ToStringStyle {
-  private static final long serialVersionUID = 0L;
-  public static final ToStringStyle INSTANCE = new CompactToStringStyle();
+	private static final long serialVersionUID = 0L;
+	public static final ToStringStyle INSTANCE = new CompactToStringStyle();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private CompactToStringStyle() {
-    setUseClassName(true);
-    setUseShortClassName(true);
-    setUseIdentityHashCode(false);
-    setUseFieldNames(true);
-    setContentStart("{");
-    setContentEnd("}");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private CompactToStringStyle() {
+		setUseClassName(true);
+		setUseShortClassName(true);
+		setUseIdentityHashCode(false);
+		setUseFieldNames(true);
+		setContentStart("{");
+		setContentEnd("}");
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/Debug.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/Debug.java
index 8b11d629f..a99875936 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/Debug.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/Debug.java
@@ -19,30 +19,30 @@
  * @coverage core.util
  */
 public class Debug {
-  /**
-   * Prints debug output on console, only if developers host.
-   */
-  public static void print(Object s) {
-    if (EnvironmentUtils.DEVELOPER_HOST) {
-      System.out.print(s);
-    }
-  }
+	/**
+	 * Prints debug output on console, only if developers host.
+	 */
+	public static void print(Object s) {
+		if (EnvironmentUtils.DEVELOPER_HOST) {
+			System.out.print(s);
+		}
+	}
 
-  /**
-   * Prints debug output on console, only if developers host.
-   */
-  public static void println(Object s) {
-    if (EnvironmentUtils.DEVELOPER_HOST) {
-      System.out.println(s);
-    }
-  }
+	/**
+	 * Prints debug output on console, only if developers host.
+	 */
+	public static void println(Object s) {
+		if (EnvironmentUtils.DEVELOPER_HOST) {
+			System.out.println(s);
+		}
+	}
 
-  /**
-   * Prints new line on console, only if developers host.
-   */
-  public static void println() {
-    if (EnvironmentUtils.DEVELOPER_HOST) {
-      System.out.println();
-    }
-  }
+	/**
+	 * Prints new line on console, only if developers host.
+	 */
+	public static void println() {
+		if (EnvironmentUtils.DEVELOPER_HOST) {
+			System.out.println();
+		}
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/EnumProxy.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/EnumProxy.java
index 9bad83731..7173fc426 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/EnumProxy.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/EnumProxy.java
@@ -22,76 +22,76 @@
  * @coverage core.util
  */
 public class EnumProxy {
-  private Class<?> m_enumClass;
+	private Class<?> m_enumClass;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public EnumProxy(String enumClass) {
-    try {
-      m_enumClass = Class.forName(enumClass);
-    } catch (Throwable e) {
-      // ignore errors, if we can't create instances then we don't need it
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public EnumProxy(String enumClass) {
+		try {
+			m_enumClass = Class.forName(enumClass);
+		} catch (Throwable e) {
+			// ignore errors, if we can't create instances then we don't need it
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link Class} of this {@link Enum}.
-   */
-  public Class<?> getEnumClass() throws Exception {
-    return m_enumClass;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link Class} of this {@link Enum}.
+	 */
+	public Class<?> getEnumClass() throws Exception {
+		return m_enumClass;
+	}
 
-  /**
-   * Returns the constant of {@link Enum} by given <code>ordinal</code> value or <code>null</code>
-   * if no such constant.
-   *
-   * @param ordinal
-   *          the ordinal to search constant.
-   * @return the constant of {@link Enum} by given <code>ordinal</code> value or <code>null</code>
-   *         if no such constant.
-   * @throws Exception
-   */
-  public Object getEnumConstant(int ordinal) throws Exception {
-    Map<?, ?> map = (Map<?, ?>) ReflectionUtils.invokeMethod2(m_enumClass, "enumConstantDirectory");
-    for (Object constant : map.values()) {
-      if (getOrdinal(constant) == ordinal) {
-        return constant;
-      }
-    }
-    return null;
-  }
+	/**
+	 * Returns the constant of {@link Enum} by given <code>ordinal</code> value or <code>null</code>
+	 * if no such constant.
+	 *
+	 * @param ordinal
+	 *          the ordinal to search constant.
+	 * @return the constant of {@link Enum} by given <code>ordinal</code> value or <code>null</code>
+	 *         if no such constant.
+	 * @throws Exception
+	 */
+	public Object getEnumConstant(int ordinal) throws Exception {
+		Map<?, ?> map = (Map<?, ?>) ReflectionUtils.invokeMethod2(m_enumClass, "enumConstantDirectory");
+		for (Object constant : map.values()) {
+			if (getOrdinal(constant) == ordinal) {
+				return constant;
+			}
+		}
+		return null;
+	}
 
-  /**
-   * Returns the ordinal of this {@link Enum} by given constant name string.
-   *
-   * @param name
-   *          the name of constant to search.
-   * @return the ordinal of this {@link Enum} by given constant name string.
-   * @throws Exception
-   */
-  public int getOrdinal(String name) throws Exception {
-    Object enumConstant =
-        ReflectionUtils.invokeMethod2(null, "valueOf", Class.class, String.class, m_enumClass, name);
-    return getOrdinal(enumConstant);
-  }
+	/**
+	 * Returns the ordinal of this {@link Enum} by given constant name string.
+	 *
+	 * @param name
+	 *          the name of constant to search.
+	 * @return the ordinal of this {@link Enum} by given constant name string.
+	 * @throws Exception
+	 */
+	public int getOrdinal(String name) throws Exception {
+		Object enumConstant =
+				ReflectionUtils.invokeMethod2(null, "valueOf", Class.class, String.class, m_enumClass, name);
+		return getOrdinal(enumConstant);
+	}
 
-  /**
-   * Returns the ordinal of this {@link Enum} by given constant object.
-   *
-   * @param name
-   *          the constant object.
-   * @return the ordinal of this {@link Enum} by given constant object.
-   * @throws Exception
-   */
-  private int getOrdinal(Object enumConstant) throws Exception {
-    return (Integer) ReflectionUtils.invokeMethod2(enumConstant, "ordinal");
-  }
+	/**
+	 * Returns the ordinal of this {@link Enum} by given constant object.
+	 *
+	 * @param name
+	 *          the constant object.
+	 * @return the ordinal of this {@link Enum} by given constant object.
+	 * @throws Exception
+	 */
+	private int getOrdinal(Object enumConstant) throws Exception {
+		return (Integer) ReflectionUtils.invokeMethod2(enumConstant, "ordinal");
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/GenericTypeError.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/GenericTypeError.java
index 5c67b2626..305e9a6da 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/GenericTypeError.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/GenericTypeError.java
@@ -17,14 +17,14 @@
  * @coverage core.util
  */
 public final class GenericTypeError extends Error {
-  private static final long serialVersionUID = 0L;
+	private static final long serialVersionUID = 0L;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public GenericTypeError(String message) {
-    super(message);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public GenericTypeError(String message) {
+		super(message);
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/GenericTypeResolver.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/GenericTypeResolver.java
index 52296a050..9f79b386e 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/GenericTypeResolver.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/GenericTypeResolver.java
@@ -32,204 +32,204 @@
  * @coverage core.util
  */
 public class GenericTypeResolver {
-  protected final GenericTypeResolver m_parent;
+	protected final GenericTypeResolver m_parent;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public GenericTypeResolver(GenericTypeResolver parent) {
-    m_parent = parent;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public GenericTypeResolver(GenericTypeResolver parent) {
+		m_parent = parent;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public String resolve(Type typeToResolve) {
-    if (typeToResolve instanceof Class<?>) {
-      return ((Class<?>) typeToResolve).getCanonicalName();
-    }
-    if (typeToResolve instanceof TypeVariable<?>) {
-      String result = resolveTypeVariable((TypeVariable<?>) typeToResolve);
-      if (result != null) {
-        return result;
-      }
-    }
-    if (typeToResolve instanceof ParameterizedType) {
-      ParameterizedType parameterizedType = (ParameterizedType) typeToResolve;
-      StringBuilder buffer = new StringBuilder();
-      buffer.append(((Class<?>) parameterizedType.getRawType()).getName());
-      {
-        buffer.append("<");
-        boolean firstTypeArgument = true;
-        for (Type type : parameterizedType.getActualTypeArguments()) {
-          if (firstTypeArgument) {
-            firstTypeArgument = false;
-          } else {
-            buffer.append(", ");
-          }
-          buffer.append(GenericsUtils.getTypeName(this, type));
-        }
-        buffer.append(">");
-      }
-      return buffer.toString();
-    }
-    if (typeToResolve instanceof WildcardType) {
-      WildcardType wildcardType = (WildcardType) typeToResolve;
-      Type[] upperBounds = wildcardType.getUpperBounds();
-      if (upperBounds.length == 1) {
-        return GenericsUtils.getTypeName(this, upperBounds[0]);
-      }
-    }
-    // call parent
-    if (m_parent != null) {
-      return m_parent.resolve(typeToResolve);
-    }
-    throw new GenericTypeError("Can not resolve actual type for: " + typeToResolve);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public String resolve(Type typeToResolve) {
+		if (typeToResolve instanceof Class<?>) {
+			return ((Class<?>) typeToResolve).getCanonicalName();
+		}
+		if (typeToResolve instanceof TypeVariable<?>) {
+			String result = resolveTypeVariable((TypeVariable<?>) typeToResolve);
+			if (result != null) {
+				return result;
+			}
+		}
+		if (typeToResolve instanceof ParameterizedType) {
+			ParameterizedType parameterizedType = (ParameterizedType) typeToResolve;
+			StringBuilder buffer = new StringBuilder();
+			buffer.append(((Class<?>) parameterizedType.getRawType()).getName());
+			{
+				buffer.append("<");
+				boolean firstTypeArgument = true;
+				for (Type type : parameterizedType.getActualTypeArguments()) {
+					if (firstTypeArgument) {
+						firstTypeArgument = false;
+					} else {
+						buffer.append(", ");
+					}
+					buffer.append(GenericsUtils.getTypeName(this, type));
+				}
+				buffer.append(">");
+			}
+			return buffer.toString();
+		}
+		if (typeToResolve instanceof WildcardType) {
+			WildcardType wildcardType = (WildcardType) typeToResolve;
+			Type[] upperBounds = wildcardType.getUpperBounds();
+			if (upperBounds.length == 1) {
+				return GenericsUtils.getTypeName(this, upperBounds[0]);
+			}
+		}
+		// call parent
+		if (m_parent != null) {
+			return m_parent.resolve(typeToResolve);
+		}
+		throw new GenericTypeError("Can not resolve actual type for: " + typeToResolve);
+	}
 
-  protected String resolveTypeVariable(TypeVariable<?> variable) {
-    return null;
-  }
+	protected String resolveTypeVariable(TypeVariable<?> variable) {
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Superclass
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static Map<String, Type> getActualTypeArguments(Class<?> declarationClass,
-      Class<?> currentClass,
-      Type[] arguments) {
-    // Prepare map of current Class type parameters to arguments.
-    Map<String, Type> currentArguments = new HashMap<>();
-    TypeVariable<?>[] typeParameters = currentClass.getTypeParameters();
-    for (int i = 0; i < typeParameters.length; i++) {
-      TypeVariable<?> typeParameter = typeParameters[i];
-      currentArguments.put(typeParameter.getName(), arguments[i]);
-    }
-    // If current is declaration Class, we are done.
-    if (currentClass == declarationClass) {
-      return currentArguments;
-    }
-    // Prepare all super Types.
-    List<Type> superTypes = Lists.newArrayList();
-    if (currentClass.getGenericSuperclass() != null) {
-      superTypes.add(currentClass.getGenericSuperclass());
-    }
-    for (Type superInterface : currentClass.getGenericInterfaces()) {
-      superTypes.add(superInterface);
-    }
-    // Check every super Type.
-    for (Type superType : superTypes) {
-      Class<?> superClass;
-      Type superArguments[];
-      if (superType instanceof ParameterizedType) {
-        ParameterizedType parameterizedSuperType = (ParameterizedType) superType;
-        superClass = (Class<?>) parameterizedSuperType.getRawType();
-        superArguments = parameterizedSuperType.getActualTypeArguments();
-        for (int i = 0; i < superArguments.length; i++) {
-          Type argument = superArguments[i];
-          if (argument instanceof TypeVariable<?>) {
-            String name = ((TypeVariable<?>) argument).getName();
-            Type resolvedArgument = currentArguments.get(name);
-            Assert.isNotNull(resolvedArgument);
-            superArguments[i] = resolvedArgument;
-          }
-        }
-      } else {
-        superClass = (Class<?>) superType;
-        superArguments = new Type[0];
-      }
-      Map<String, Type> map = getActualTypeArguments(declarationClass, superClass, superArguments);
-      if (map != null) {
-        return map;
-      }
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Superclass
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static Map<String, Type> getActualTypeArguments(Class<?> declarationClass,
+			Class<?> currentClass,
+			Type[] arguments) {
+		// Prepare map of current Class type parameters to arguments.
+		Map<String, Type> currentArguments = new HashMap<>();
+		TypeVariable<?>[] typeParameters = currentClass.getTypeParameters();
+		for (int i = 0; i < typeParameters.length; i++) {
+			TypeVariable<?> typeParameter = typeParameters[i];
+			currentArguments.put(typeParameter.getName(), arguments[i]);
+		}
+		// If current is declaration Class, we are done.
+		if (currentClass == declarationClass) {
+			return currentArguments;
+		}
+		// Prepare all super Types.
+		List<Type> superTypes = Lists.newArrayList();
+		if (currentClass.getGenericSuperclass() != null) {
+			superTypes.add(currentClass.getGenericSuperclass());
+		}
+		for (Type superInterface : currentClass.getGenericInterfaces()) {
+			superTypes.add(superInterface);
+		}
+		// Check every super Type.
+		for (Type superType : superTypes) {
+			Class<?> superClass;
+			Type superArguments[];
+			if (superType instanceof ParameterizedType) {
+				ParameterizedType parameterizedSuperType = (ParameterizedType) superType;
+				superClass = (Class<?>) parameterizedSuperType.getRawType();
+				superArguments = parameterizedSuperType.getActualTypeArguments();
+				for (int i = 0; i < superArguments.length; i++) {
+					Type argument = superArguments[i];
+					if (argument instanceof TypeVariable<?>) {
+						String name = ((TypeVariable<?>) argument).getName();
+						Type resolvedArgument = currentArguments.get(name);
+						Assert.isNotNull(resolvedArgument);
+						superArguments[i] = resolvedArgument;
+					}
+				}
+			} else {
+				superClass = (Class<?>) superType;
+				superArguments = new Type[0];
+			}
+			Map<String, Type> map = getActualTypeArguments(declarationClass, superClass, superArguments);
+			if (map != null) {
+				return map;
+			}
+		}
+		return null;
+	}
 
-  public static GenericTypeResolver superClass(final GenericTypeResolver parent,
-      Class<?> actualClass,
-      Class<?> declarationClass) {
-    Assert.isTrue(declarationClass.isAssignableFrom(declarationClass));
-    final Map<String, Type> declarationClassArguments =
-        getActualTypeArguments(declarationClass, actualClass, actualClass.getTypeParameters());
-    return new GenericTypeResolver(parent) {
-      @Override
-      protected String resolveTypeVariable(TypeVariable<?> variable) {
-        String variableName = variable.getName();
-        Type variableType = declarationClassArguments.get(variableName);
-        return parent.resolve(variableType);
-      }
-    };
-  }
+	public static GenericTypeResolver superClass(final GenericTypeResolver parent,
+			Class<?> actualClass,
+			Class<?> declarationClass) {
+		Assert.isTrue(declarationClass.isAssignableFrom(declarationClass));
+		final Map<String, Type> declarationClassArguments =
+				getActualTypeArguments(declarationClass, actualClass, actualClass.getTypeParameters());
+		return new GenericTypeResolver(parent) {
+			@Override
+			protected String resolveTypeVariable(TypeVariable<?> variable) {
+				String variableName = variable.getName();
+				Type variableType = declarationClassArguments.get(variableName);
+				return parent.resolve(variableType);
+			}
+		};
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Fixed
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * {@link GenericTypeResolver} for {@link TypeVariable} with fixed name.
-   */
-  public static GenericTypeResolver fixed(final String name, Class<?> clazz) {
-    final String clazzName = ReflectionUtils.getCanonicalName(clazz);
-    return new GenericTypeResolver(EMPTY) {
-      @Override
-      protected String resolveTypeVariable(TypeVariable<?> variable) {
-        if (variable.getName().equals(name)) {
-          return clazzName;
-        }
-        return null;
-      }
-    };
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Fixed
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * {@link GenericTypeResolver} for {@link TypeVariable} with fixed name.
+	 */
+	public static GenericTypeResolver fixed(final String name, Class<?> clazz) {
+		final String clazzName = ReflectionUtils.getCanonicalName(clazz);
+		return new GenericTypeResolver(EMPTY) {
+			@Override
+			protected String resolveTypeVariable(TypeVariable<?> variable) {
+				if (variable.getName().equals(name)) {
+					return clazzName;
+				}
+				return null;
+			}
+		};
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Argument of method
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static GenericTypeResolver argumentOfMethod(final GenericTypeResolver parent,
-      Method method,
-      int index) {
-    Type genericParameter = method.getGenericParameterTypes()[index];
-    final Map<String, Type> typeArguments = getTypeArguments(genericParameter);
-    return new GenericTypeResolver(parent) {
-      @Override
-      protected String resolveTypeVariable(TypeVariable<?> variable) {
-        String variableName = variable.getName();
-        Type variableType = typeArguments.get(variableName);
-        if (variableType != null) {
-          return parent.resolve(variableType);
-        }
-        return null;
-      }
-    };
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Argument of method
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static GenericTypeResolver argumentOfMethod(final GenericTypeResolver parent,
+			Method method,
+			int index) {
+		Type genericParameter = method.getGenericParameterTypes()[index];
+		final Map<String, Type> typeArguments = getTypeArguments(genericParameter);
+		return new GenericTypeResolver(parent) {
+			@Override
+			protected String resolveTypeVariable(TypeVariable<?> variable) {
+				String variableName = variable.getName();
+				Type variableType = typeArguments.get(variableName);
+				if (variableType != null) {
+					return parent.resolve(variableType);
+				}
+				return null;
+			}
+		};
+	}
 
-  private static Map<String, Type> getTypeArguments(Type type) {
-    Map<String, Type> typeArguments = Maps.newTreeMap();
-    if (type instanceof ParameterizedType) {
-      ParameterizedType parameterized = (ParameterizedType) type;
-      Type[] actualTypeArguments = parameterized.getActualTypeArguments();
-      Class<?> raw = (Class<?>) parameterized.getRawType();
-      TypeVariable<?>[] typeParameters = raw.getTypeParameters();
-      for (int i = 0; i < typeParameters.length; i++) {
-        TypeVariable<?> typeParameter = typeParameters[i];
-        typeArguments.put(typeParameter.getName(), actualTypeArguments[i]);
-      }
-    }
-    return typeArguments;
-  }
+	private static Map<String, Type> getTypeArguments(Type type) {
+		Map<String, Type> typeArguments = Maps.newTreeMap();
+		if (type instanceof ParameterizedType) {
+			ParameterizedType parameterized = (ParameterizedType) type;
+			Type[] actualTypeArguments = parameterized.getActualTypeArguments();
+			Class<?> raw = (Class<?>) parameterized.getRawType();
+			TypeVariable<?>[] typeParameters = raw.getTypeParameters();
+			for (int i = 0; i < typeParameters.length; i++) {
+				TypeVariable<?> typeParameter = typeParameters[i];
+				typeArguments.put(typeParameter.getName(), actualTypeArguments[i]);
+			}
+		}
+		return typeArguments;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // EMPTY
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static GenericTypeResolver EMPTY = new GenericTypeResolver(null);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// EMPTY
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static GenericTypeResolver EMPTY = new GenericTypeResolver(null);
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/GenericsUtils.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/GenericsUtils.java
index 4a5c52375..92db1d008 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/GenericsUtils.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/GenericsUtils.java
@@ -33,379 +33,379 @@
  * @coverage core.util
  */
 public final class GenericsUtils {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private GenericsUtils() {
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ISelection
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the first element of given {@link ISelection}.
-   */
-  @SuppressWarnings("unchecked")
-  public static <T> T first(ISelection selection) {
-    IStructuredSelection structuredSelection = (IStructuredSelection) selection;
-    return (T) structuredSelection.getFirstElement();
-  }
-
-  /**
-   * @return the generified {@link Iterable}.
-   */
-  public static <T> Iterable<T> iterable(ISelection selection) {
-    final IStructuredSelection structuredSelection = (IStructuredSelection) selection;
-    return new Iterable<T>() {
-      @Override
-      public Iterator<T> iterator() {
-        return new Iterator<T>() {
-          Iterator<?> iterator = structuredSelection.iterator();
-
-          @Override
-          public boolean hasNext() {
-            return iterator.hasNext();
-          }
-
-          @Override
-          @SuppressWarnings("unchecked")
-          public T next() {
-            return (T) iterator.next();
-          }
-
-          @Override
-          public void remove() {
-            throw new UnsupportedOperationException();
-          }
-        };
-      }
-    };
-  }
-
-  /**
-   * @return the generified {@link Iterable} for selection in given {@link ISelectionProvider}.
-   */
-  public static <T> Iterable<T> iterableSelection(ISelectionProvider selectionProvider) {
-    ISelection selection = selectionProvider.getSelection();
-    return iterable(selection);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Arrays
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return first element of required type, <code>null</code> if not found.
-   */
-  @SuppressWarnings("unchecked")
-  public static <T> T get(Class<T> clazz, Object... objects) {
-    for (Object object : objects) {
-      if (isAssignable(clazz, object)) {
-        return (T) object;
-      }
-    }
-    return null;
-  }
-
-  /**
-   * @return first element of required type, <code>null</code> if not found.
-   */
-  @SuppressWarnings("unchecked")
-  public static <T> T get(Class<T> clazz, List<?> objects) {
-    for (Object object : objects) {
-      if (isAssignable(clazz, object)) {
-        return (T) object;
-      }
-    }
-    return null;
-  }
-
-  /**
-   * @return <code>true</code> object can be casted to given class.
-   */
-  private static boolean isAssignable(Class<?> clazz, Object object) {
-    return object != null && clazz.isAssignableFrom(object.getClass());
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Collections
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link List} with objects with given class (and its sub-classes).
-   */
-  @SuppressWarnings("unchecked")
-  public static <T> List<T> select(Collection<? super T> source, Class<T> clazz) {
-    List<T> result = Lists.newArrayList();
-    for (Object object : source) {
-      if (object != null && clazz.isAssignableFrom(object.getClass())) {
-        result.add((T) object);
-      }
-    }
-    return result;
-  }
-
-  /**
-   * @return the {@link List} with objects cast to given type. Note, that this is unsafe operation.
-   */
-  @SuppressWarnings("unchecked")
-  public static <T> List<T> cast(Collection<?> source) {
-    List<T> result = Lists.newArrayList();
-    for (Object object : source) {
-      result.add((T) object);
-    }
-    return result;
-  }
-
-  /**
-   * Joins array of elements with one more element.
-   *
-   * @param elements
-   *          the elements, may be <code>null</code>.
-   * @param element
-   *          the one more element to add to the end.
-   *
-   * @return the {@link List} that contains given elements plus one more element.
-   */
-  public static <T> List<T> asList(T[] elements, T element) {
-    List<T> list = Lists.newArrayList();
-    if (elements != null) {
-      for (T t : elements) {
-        list.add(t);
-      }
-    }
-    list.add(element);
-    return list;
-  }
-
-  /**
-   * @return the {@link List} that contains given element, if it is not <code>null</code>, or empty
-   *         {@link List}.
-   */
-  public static <T, E extends T> List<T> singletonList(E element) {
-    if (element == null) {
-      return ImmutableList.of();
-    }
-    return ImmutableList.<T>of(element);
-  }
-
-  /**
-   * @return the element with index <code>index - 1</code>, or <code>null</code> if given
-   *         <code>index</code> is first one.
-   */
-  public static <T> T getPrevOrNull(List<T> elements, int index) {
-    Assert.isLegal(index >= 0 && index < elements.size());
-    if (index > 0) {
-      return elements.get(index - 1);
-    } else {
-      return null;
-    }
-  }
-
-  /**
-   * @return the element before the given one, or <code>null</code> if given element is first one or
-   *         is not in the {@link List}.
-   */
-  public static <T> T getPrevOrNull(List<? extends T> elements, T element) {
-    int index = elements.indexOf(element);
-    if (index == -1) {
-      return null;
-    } else {
-      return getPrevOrNull(elements, index);
-    }
-  }
-
-  /**
-   * Returns:
-   * <ul>
-   * <li>if given element is not first, then previous element;</li>
-   * <li>if given element is first, then last element of list;</li>
-   * <li>if given element is not in list, then last element of list;</li>
-   * <li>if list is empty, then <code>null</code>.</li>
-   */
-  public static <T> T getPrevOrLast(List<? extends T> elements, T element) {
-    if (elements.isEmpty()) {
-      return null;
-    }
-    T prev = getPrevOrNull(elements, element);
-    if (prev != null) {
-      return prev;
-    }
-    return elements.get(elements.size() - 1);
-  }
-
-  /**
-   * @return the element with index <code>index + 1</code>, or <code>null</code> if given
-   *         <code>index</code> is last one.
-   */
-  public static <T> T getNextOrNull(List<T> elements, int index) {
-    Assert.isLegal(index >= 0 && index < elements.size());
-    if (index < elements.size() - 1) {
-      return elements.get(index + 1);
-    } else {
-      return null;
-    }
-  }
-
-  /**
-   * @return the element next to the given one, or <code>null</code> if given element is last one or
-   *         is not in the {@link List}.
-   */
-  public static <T> T getNextOrNull(List<? extends T> elements, T element) {
-    int index = elements.indexOf(element);
-    if (index == -1) {
-      return null;
-    } else {
-      return getNextOrNull(elements, index);
-    }
-  }
-
-  /**
-   * Returns:
-   * <ul>
-   * <li>if given element is not last, then next element;</li>
-   * <li>if given element is last, then first element of list;</li>
-   * <li>if given element is not in list, then first element of list;</li>
-   * <li>if list is empty, then <code>null</code>.</li>
-   */
-  public static <T> T getNextOrFirst(List<? extends T> elements, T element) {
-    if (elements.isEmpty()) {
-      return null;
-    }
-    T prev = getNextOrNull(elements, element);
-    if (prev != null) {
-      return prev;
-    }
-    return elements.get(0);
-  }
-
-  /**
-   * @return the first element from {@link List} , or <code>null</code> if {@link List} is empty.
-   */
-  public static <T> T getFirstOrNull(List<T> elements) {
-    return elements.isEmpty() ? null : elements.get(0);
-  }
-
-  /**
-   * @return the last element from {@link List} , or <code>null</code> if {@link List} is empty.
-   */
-  public static <T> T getLastOrNull(List<T> elements) {
-    return elements.isEmpty() ? null : elements.get(elements.size() - 1);
-  }
-
-  /**
-   * @return the last element from {@link List} , or fails if {@link List} is empty.
-   */
-  public static <T> T getLast(List<T> elements) {
-    return elements.get(elements.size() - 1);
-  }
-
-  /**
-   * @return <code>true</code> if given elements are adjacent in all elements {@link List}.
-   */
-  public static <T> boolean areAdjacent(List<T> allElements, List<T> elements) {
-    int prevIndex = -1;
-    for (T element : elements) {
-      if (prevIndex == -1) {
-        prevIndex = allElements.indexOf(element);
-      } else {
-        int index = allElements.indexOf(element);
-        if (index != prevIndex + 1) {
-          return false;
-        }
-        prevIndex = index;
-      }
-    }
-    // OK
-    return true;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Enum
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link Enum#toString()} array for each {@link Enum} value.
-   */
-  public static <T extends Enum<?>> String[] getEnumStrings(T... values) {
-    String[] fieldNames = new String[values.length];
-    for (int i = 0; i < values.length; i++) {
-      T value = values[i];
-      fieldNames[i] = value.toString();
-    }
-    return fieldNames;
-  }
-
-  /**
-   * @return the {@link Enum#toString()} array for each {@link Enum} value.
-   */
-  @SuppressWarnings("unchecked")
-  public static <T extends Enum<?>> T[] getEnumValues(Class<T> enumClass, String... strings) {
-    T[] values = (T[]) Array.newInstance(enumClass, strings.length);
-    for (int i = 0; i < strings.length; i++) {
-      String s = strings[i];
-      T value = getEnumValue(s, enumClass.getEnumConstants());
-      Assert.isNotNull(value, "No value for %s in %s.", s, enumClass);
-      values[i] = value;
-    }
-    return values;
-  }
-
-  /**
-   * @return the {@link Enum} value with same {@link Enum#toString()} presentation, may be
-   *         <code>null</code> if no such value.
-   */
-  public static <T extends Enum<?>> T getEnumValue(String s, T... values) {
-    for (T value : values) {
-      if (value.toString().equals(s)) {
-        return value;
-      }
-    }
-    return null;
-  }
-
-  /**
-   * @return elements of given {@link Enum} that conform {@link Predicate}.
-   */
-  @SuppressWarnings("unchecked")
-  public static <T extends Enum<?>> T[] getEnumValues(Class<T> enumClass, Predicate<T> predicate) {
-    List<T> selectedElements = Lists.newArrayList();
-    for (T element : enumClass.getEnumConstants()) {
-      if (predicate.apply(element)) {
-        selectedElements.add(element);
-      }
-    }
-    return selectedElements.toArray((T[]) Array.newInstance(enumClass, selectedElements.size()));
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Generics and names
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the names of (possibly generic) types.
-   */
-  public static String[] getTypeNames(GenericTypeResolver resolver, Type[] types) {
-    String[] names = new String[types.length];
-    for (int i = 0; i < types.length; i++) {
-      Type type = types[i];
-      names[i] = getTypeName(resolver, type);
-    }
-    return names;
-  }
-
-  /**
-   * @return the name of (possibly generic) type.
-   */
-  public static String getTypeName(GenericTypeResolver resolver, Type type) {
-    return resolver.resolve(type);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private GenericsUtils() {
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ISelection
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the first element of given {@link ISelection}.
+	 */
+	@SuppressWarnings("unchecked")
+	public static <T> T first(ISelection selection) {
+		IStructuredSelection structuredSelection = (IStructuredSelection) selection;
+		return (T) structuredSelection.getFirstElement();
+	}
+
+	/**
+	 * @return the generified {@link Iterable}.
+	 */
+	public static <T> Iterable<T> iterable(ISelection selection) {
+		final IStructuredSelection structuredSelection = (IStructuredSelection) selection;
+		return new Iterable<T>() {
+			@Override
+			public Iterator<T> iterator() {
+				return new Iterator<T>() {
+					Iterator<?> iterator = structuredSelection.iterator();
+
+					@Override
+					public boolean hasNext() {
+						return iterator.hasNext();
+					}
+
+					@Override
+					@SuppressWarnings("unchecked")
+					public T next() {
+						return (T) iterator.next();
+					}
+
+					@Override
+					public void remove() {
+						throw new UnsupportedOperationException();
+					}
+				};
+			}
+		};
+	}
+
+	/**
+	 * @return the generified {@link Iterable} for selection in given {@link ISelectionProvider}.
+	 */
+	public static <T> Iterable<T> iterableSelection(ISelectionProvider selectionProvider) {
+		ISelection selection = selectionProvider.getSelection();
+		return iterable(selection);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Arrays
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return first element of required type, <code>null</code> if not found.
+	 */
+	@SuppressWarnings("unchecked")
+	public static <T> T get(Class<T> clazz, Object... objects) {
+		for (Object object : objects) {
+			if (isAssignable(clazz, object)) {
+				return (T) object;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * @return first element of required type, <code>null</code> if not found.
+	 */
+	@SuppressWarnings("unchecked")
+	public static <T> T get(Class<T> clazz, List<?> objects) {
+		for (Object object : objects) {
+			if (isAssignable(clazz, object)) {
+				return (T) object;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * @return <code>true</code> object can be casted to given class.
+	 */
+	private static boolean isAssignable(Class<?> clazz, Object object) {
+		return object != null && clazz.isAssignableFrom(object.getClass());
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Collections
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link List} with objects with given class (and its sub-classes).
+	 */
+	@SuppressWarnings("unchecked")
+	public static <T> List<T> select(Collection<? super T> source, Class<T> clazz) {
+		List<T> result = Lists.newArrayList();
+		for (Object object : source) {
+			if (object != null && clazz.isAssignableFrom(object.getClass())) {
+				result.add((T) object);
+			}
+		}
+		return result;
+	}
+
+	/**
+	 * @return the {@link List} with objects cast to given type. Note, that this is unsafe operation.
+	 */
+	@SuppressWarnings("unchecked")
+	public static <T> List<T> cast(Collection<?> source) {
+		List<T> result = Lists.newArrayList();
+		for (Object object : source) {
+			result.add((T) object);
+		}
+		return result;
+	}
+
+	/**
+	 * Joins array of elements with one more element.
+	 *
+	 * @param elements
+	 *          the elements, may be <code>null</code>.
+	 * @param element
+	 *          the one more element to add to the end.
+	 *
+	 * @return the {@link List} that contains given elements plus one more element.
+	 */
+	public static <T> List<T> asList(T[] elements, T element) {
+		List<T> list = Lists.newArrayList();
+		if (elements != null) {
+			for (T t : elements) {
+				list.add(t);
+			}
+		}
+		list.add(element);
+		return list;
+	}
+
+	/**
+	 * @return the {@link List} that contains given element, if it is not <code>null</code>, or empty
+	 *         {@link List}.
+	 */
+	public static <T, E extends T> List<T> singletonList(E element) {
+		if (element == null) {
+			return ImmutableList.of();
+		}
+		return ImmutableList.<T>of(element);
+	}
+
+	/**
+	 * @return the element with index <code>index - 1</code>, or <code>null</code> if given
+	 *         <code>index</code> is first one.
+	 */
+	public static <T> T getPrevOrNull(List<T> elements, int index) {
+		Assert.isLegal(index >= 0 && index < elements.size());
+		if (index > 0) {
+			return elements.get(index - 1);
+		} else {
+			return null;
+		}
+	}
+
+	/**
+	 * @return the element before the given one, or <code>null</code> if given element is first one or
+	 *         is not in the {@link List}.
+	 */
+	public static <T> T getPrevOrNull(List<? extends T> elements, T element) {
+		int index = elements.indexOf(element);
+		if (index == -1) {
+			return null;
+		} else {
+			return getPrevOrNull(elements, index);
+		}
+	}
+
+	/**
+	 * Returns:
+	 * <ul>
+	 * <li>if given element is not first, then previous element;</li>
+	 * <li>if given element is first, then last element of list;</li>
+	 * <li>if given element is not in list, then last element of list;</li>
+	 * <li>if list is empty, then <code>null</code>.</li>
+	 */
+	public static <T> T getPrevOrLast(List<? extends T> elements, T element) {
+		if (elements.isEmpty()) {
+			return null;
+		}
+		T prev = getPrevOrNull(elements, element);
+		if (prev != null) {
+			return prev;
+		}
+		return elements.get(elements.size() - 1);
+	}
+
+	/**
+	 * @return the element with index <code>index + 1</code>, or <code>null</code> if given
+	 *         <code>index</code> is last one.
+	 */
+	public static <T> T getNextOrNull(List<T> elements, int index) {
+		Assert.isLegal(index >= 0 && index < elements.size());
+		if (index < elements.size() - 1) {
+			return elements.get(index + 1);
+		} else {
+			return null;
+		}
+	}
+
+	/**
+	 * @return the element next to the given one, or <code>null</code> if given element is last one or
+	 *         is not in the {@link List}.
+	 */
+	public static <T> T getNextOrNull(List<? extends T> elements, T element) {
+		int index = elements.indexOf(element);
+		if (index == -1) {
+			return null;
+		} else {
+			return getNextOrNull(elements, index);
+		}
+	}
+
+	/**
+	 * Returns:
+	 * <ul>
+	 * <li>if given element is not last, then next element;</li>
+	 * <li>if given element is last, then first element of list;</li>
+	 * <li>if given element is not in list, then first element of list;</li>
+	 * <li>if list is empty, then <code>null</code>.</li>
+	 */
+	public static <T> T getNextOrFirst(List<? extends T> elements, T element) {
+		if (elements.isEmpty()) {
+			return null;
+		}
+		T prev = getNextOrNull(elements, element);
+		if (prev != null) {
+			return prev;
+		}
+		return elements.get(0);
+	}
+
+	/**
+	 * @return the first element from {@link List} , or <code>null</code> if {@link List} is empty.
+	 */
+	public static <T> T getFirstOrNull(List<T> elements) {
+		return elements.isEmpty() ? null : elements.get(0);
+	}
+
+	/**
+	 * @return the last element from {@link List} , or <code>null</code> if {@link List} is empty.
+	 */
+	public static <T> T getLastOrNull(List<T> elements) {
+		return elements.isEmpty() ? null : elements.get(elements.size() - 1);
+	}
+
+	/**
+	 * @return the last element from {@link List} , or fails if {@link List} is empty.
+	 */
+	public static <T> T getLast(List<T> elements) {
+		return elements.get(elements.size() - 1);
+	}
+
+	/**
+	 * @return <code>true</code> if given elements are adjacent in all elements {@link List}.
+	 */
+	public static <T> boolean areAdjacent(List<T> allElements, List<T> elements) {
+		int prevIndex = -1;
+		for (T element : elements) {
+			if (prevIndex == -1) {
+				prevIndex = allElements.indexOf(element);
+			} else {
+				int index = allElements.indexOf(element);
+				if (index != prevIndex + 1) {
+					return false;
+				}
+				prevIndex = index;
+			}
+		}
+		// OK
+		return true;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Enum
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link Enum#toString()} array for each {@link Enum} value.
+	 */
+	public static <T extends Enum<?>> String[] getEnumStrings(T... values) {
+		String[] fieldNames = new String[values.length];
+		for (int i = 0; i < values.length; i++) {
+			T value = values[i];
+			fieldNames[i] = value.toString();
+		}
+		return fieldNames;
+	}
+
+	/**
+	 * @return the {@link Enum#toString()} array for each {@link Enum} value.
+	 */
+	@SuppressWarnings("unchecked")
+	public static <T extends Enum<?>> T[] getEnumValues(Class<T> enumClass, String... strings) {
+		T[] values = (T[]) Array.newInstance(enumClass, strings.length);
+		for (int i = 0; i < strings.length; i++) {
+			String s = strings[i];
+			T value = getEnumValue(s, enumClass.getEnumConstants());
+			Assert.isNotNull(value, "No value for %s in %s.", s, enumClass);
+			values[i] = value;
+		}
+		return values;
+	}
+
+	/**
+	 * @return the {@link Enum} value with same {@link Enum#toString()} presentation, may be
+	 *         <code>null</code> if no such value.
+	 */
+	public static <T extends Enum<?>> T getEnumValue(String s, T... values) {
+		for (T value : values) {
+			if (value.toString().equals(s)) {
+				return value;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * @return elements of given {@link Enum} that conform {@link Predicate}.
+	 */
+	@SuppressWarnings("unchecked")
+	public static <T extends Enum<?>> T[] getEnumValues(Class<T> enumClass, Predicate<T> predicate) {
+		List<T> selectedElements = Lists.newArrayList();
+		for (T element : enumClass.getEnumConstants()) {
+			if (predicate.apply(element)) {
+				selectedElements.add(element);
+			}
+		}
+		return selectedElements.toArray((T[]) Array.newInstance(enumClass, selectedElements.size()));
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Generics and names
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the names of (possibly generic) types.
+	 */
+	public static String[] getTypeNames(GenericTypeResolver resolver, Type[] types) {
+		String[] names = new String[types.length];
+		for (int i = 0; i < types.length; i++) {
+			Type type = types[i];
+			names[i] = getTypeName(resolver, type);
+		}
+		return names;
+	}
+
+	/**
+	 * @return the name of (possibly generic) type.
+	 */
+	public static String getTypeName(GenericTypeResolver resolver, Type type) {
+		return resolver.resolve(type);
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/IAdaptable.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/IAdaptable.java
index 5dd420ec3..8e782a942 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/IAdaptable.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/IAdaptable.java
@@ -29,11 +29,11 @@
  * @coverage core.util
  */
 public interface IAdaptable {
-  /**
-   * @param adapter
-   *          the type of adapter.
-   *
-   * @return the adapter of required type.
-   */
-  <T> T getAdapter(Class<T> adapter);
+	/**
+	 * @param adapter
+	 *          the type of adapter.
+	 *
+	 * @return the adapter of required type.
+	 */
+	<T> T getAdapter(Class<T> adapter);
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/IAdaptableFactory.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/IAdaptableFactory.java
index 3b37f9c5d..48a3f3ca1 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/IAdaptableFactory.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/IAdaptableFactory.java
@@ -17,13 +17,13 @@
  * @coverage core.util
  */
 public interface IAdaptableFactory {
-  /**
-   * @param object
-   *          the {@link Object} to adapt.
-   * @param adapter
-   *          the type of adapter.
-   *
-   * @return the adapter of required type.
-   */
-  <T> T getAdapter(Object object, Class<T> adapter);
+	/**
+	 * @param object
+	 *          the {@link Object} to adapt.
+	 * @param adapter
+	 *          the type of adapter.
+	 *
+	 * @return the adapter of required type.
+	 */
+	<T> T getAdapter(Object object, Class<T> adapter);
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/IDisposable.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/IDisposable.java
index 6d67b69df..0bc04bd6a 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/IDisposable.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/IDisposable.java
@@ -18,9 +18,9 @@
  * @coverage core.model
  */
 public interface IDisposable {
-  /**
-   * Disposes the object.<br>
-   * The implementors are responsible to check this object instance for to be already disposed.
-   */
-  void dispose();
+	/**
+	 * Disposes the object.<br>
+	 * The implementors are responsible to check this object instance for to be already disposed.
+	 */
+	void dispose();
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/IOUtils2.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/IOUtils2.java
index d0cbcf092..0c5f37a4b 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/IOUtils2.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/IOUtils2.java
@@ -44,267 +44,267 @@
  * @author scheglov_ke
  */
 public class IOUtils2 {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Directory
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  //@edu.umd.cs.findbugs.annotations.SuppressWarnings(value = "RV_RETURN_VALUE_IGNORED_BAD_PRACTIC")
-  public static File createTempDirectory(String prefix, String suffix) throws IOException {
-    File tempFile = File.createTempFile(prefix, suffix);
-    tempFile.delete();
-    tempFile.mkdirs();
-    return tempFile;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Directory
+	//
+	////////////////////////////////////////////////////////////////////////////
+	//@edu.umd.cs.findbugs.annotations.SuppressWarnings(value = "RV_RETURN_VALUE_IGNORED_BAD_PRACTIC")
+	public static File createTempDirectory(String prefix, String suffix) throws IOException {
+		File tempFile = File.createTempFile(prefix, suffix);
+		tempFile.delete();
+		tempFile.mkdirs();
+		return tempFile;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // File names
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the absolute location of given {@link URL}. It is expected that {@link URL} represents
-   *         such absolute location file.
-   */
-  public static String getPortableAbsolutePath(URL url) {
-    File f;
-    try {
-      f = new File(url.toURI());
-    } catch (URISyntaxException e) {
-      f = new File(url.getPath());
-    }
-    String path = f.getAbsolutePath();
-    path = StringUtils.replace(path, "%20", " ");
-    return toPortablePath(path);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// File names
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the absolute location of given {@link URL}. It is expected that {@link URL} represents
+	 *         such absolute location file.
+	 */
+	public static String getPortableAbsolutePath(URL url) {
+		File f;
+		try {
+			f = new File(url.toURI());
+		} catch (URISyntaxException e) {
+			f = new File(url.getPath());
+		}
+		String path = f.getAbsolutePath();
+		path = StringUtils.replace(path, "%20", " ");
+		return toPortablePath(path);
+	}
 
-  /**
-   * Converts all separators to the Unix separator of forward slash.
-   */
-  public static String toPortablePath(String path) {
-    return FilenameUtils.separatorsToUnix(path);
-  }
+	/**
+	 * Converts all separators to the Unix separator of forward slash.
+	 */
+	public static String toPortablePath(String path) {
+		return FilenameUtils.separatorsToUnix(path);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Reading
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link String} content of given {@link File}.
-   */
-  public static String readString(File file) throws IOException {
-    InputStream input = new FileInputStream(file);
-    return readString(input);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Reading
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link String} content of given {@link File}.
+	 */
+	public static String readString(File file) throws IOException {
+		InputStream input = new FileInputStream(file);
+		return readString(input);
+	}
 
-  /**
-   * @return the {@link String} content of given {@link InputStream} and closes stream.
-   */
-  public static String readString(InputStream input) throws IOException {
-    try {
-      return IOUtils.toString(input);
-    } finally {
-      input.close();
-    }
-  }
+	/**
+	 * @return the {@link String} content of given {@link InputStream} and closes stream.
+	 */
+	public static String readString(InputStream input) throws IOException {
+		try {
+			return IOUtils.toString(input);
+		} finally {
+			input.close();
+		}
+	}
 
-  /**
-   * @return the {@link String} content of given {@link Reader} and closes it.
-   */
-  public static String readString(Reader input) throws IOException {
-    try {
-      return IOUtils.toString(input);
-    } finally {
-      input.close();
-    }
-  }
+	/**
+	 * @return the {@link String} content of given {@link Reader} and closes it.
+	 */
+	public static String readString(Reader input) throws IOException {
+		try {
+			return IOUtils.toString(input);
+		} finally {
+			input.close();
+		}
+	}
 
-  /**
-   * @return the the first line from a {@link InputStream}, using default charset. The line does not
-   *         include line-termination characters, but does include other leading and trailing
-   *         whitespace.
-   */
-  public static String readFirstLine(InputStream input) throws IOException {
-    try {
-      BufferedReader br = new BufferedReader(new InputStreamReader(input));
-      return br.readLine();
-    } finally {
-      input.close();
-    }
-  }
+	/**
+	 * @return the the first line from a {@link InputStream}, using default charset. The line does not
+	 *         include line-termination characters, but does include other leading and trailing
+	 *         whitespace.
+	 */
+	public static String readFirstLine(InputStream input) throws IOException {
+		try {
+			BufferedReader br = new BufferedReader(new InputStreamReader(input));
+			return br.readLine();
+		} finally {
+			input.close();
+		}
+	}
 
-  /**
-   * @return the {@link String} content of given {@link IFile}.
-   */
-  public static String readString(IFile file) throws Exception {
-    return readString(file.getContents(true));
-  }
+	/**
+	 * @return the {@link String} content of given {@link IFile}.
+	 */
+	public static String readString(IFile file) throws Exception {
+		return readString(file.getContents(true));
+	}
 
-  /**
-   * @return the byte[] content of given {@link File}.
-   */
-  public static byte[] readBytes(File file) throws IOException {
-    InputStream input = new FileInputStream(file);
-    return readBytes(input);
-  }
+	/**
+	 * @return the byte[] content of given {@link File}.
+	 */
+	public static byte[] readBytes(File file) throws IOException {
+		InputStream input = new FileInputStream(file);
+		return readBytes(input);
+	}
 
-  /**
-   * Reads content of given {@link InputStream} into byte array and closes stream.
-   */
-  public static byte[] readBytes(InputStream input) throws IOException {
-    try {
-      return IOUtils.toByteArray(input);
-    } finally {
-      input.close();
-    }
-  }
+	/**
+	 * Reads content of given {@link InputStream} into byte array and closes stream.
+	 */
+	public static byte[] readBytes(InputStream input) throws IOException {
+		try {
+			return IOUtils.toByteArray(input);
+		} finally {
+			input.close();
+		}
+	}
 
-  /**
-   * @return the byte[] array, read length and then bytes.
-   */
-  public static byte[] readByteArray(ObjectInputStream ois) throws IOException {
-    int length = ois.readInt();
-    byte[] bytes = new byte[length];
-    ois.readFully(bytes);
-    return bytes;
-  }
+	/**
+	 * @return the byte[] array, read length and then bytes.
+	 */
+	public static byte[] readByteArray(ObjectInputStream ois) throws IOException {
+		int length = ois.readInt();
+		byte[] bytes = new byte[length];
+		ois.readFully(bytes);
+		return bytes;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Writing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Writes bytes into {@link File}, i.e. replaces its content.
-   */
-  public static void writeBytes(File file, InputStream input) throws IOException {
-    copyAndClose(new FileOutputStream(file), input);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Writing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Writes bytes into {@link File}, i.e. replaces its content.
+	 */
+	public static void writeBytes(File file, InputStream input) throws IOException {
+		copyAndClose(new FileOutputStream(file), input);
+	}
 
-  /**
-   * Copies bytes from {@link InputStream} into {@link OutputStream} and closes both streams.
-   */
-  public static void copyAndClose(OutputStream output, InputStream input) throws IOException {
-    try {
-      IOUtils.copy(input, output);
-    } finally {
-      IOUtils.closeQuietly(input);
-      IOUtils.closeQuietly(output);
-    }
-  }
+	/**
+	 * Copies bytes from {@link InputStream} into {@link OutputStream} and closes both streams.
+	 */
+	public static void copyAndClose(OutputStream output, InputStream input) throws IOException {
+		try {
+			IOUtils.copy(input, output);
+		} finally {
+			IOUtils.closeQuietly(input);
+			IOUtils.closeQuietly(output);
+		}
+	}
 
-  /**
-   * Writes bytes into {@link File}, i.e. replaces its content.
-   */
-  public static void writeBytes(File file, byte[] input) throws IOException {
-    writeBytes(new FileOutputStream(file), input);
-  }
+	/**
+	 * Writes bytes into {@link File}, i.e. replaces its content.
+	 */
+	public static void writeBytes(File file, byte[] input) throws IOException {
+		writeBytes(new FileOutputStream(file), input);
+	}
 
-  /**
-   * Writes give bytes into {@link OutputStream} and closes stream.
-   */
-  public static void writeBytes(OutputStream output, byte[] input) throws IOException {
-    try {
-      output.write(input);
-    } finally {
-      output.close();
-    }
-  }
+	/**
+	 * Writes give bytes into {@link OutputStream} and closes stream.
+	 */
+	public static void writeBytes(OutputStream output, byte[] input) throws IOException {
+		try {
+			output.write(input);
+		} finally {
+			output.close();
+		}
+	}
 
-  /**
-   * Writes byte array as length and bytes.
-   */
-  public static void writeByteArray(ObjectOutputStream oos, byte[] bytes) throws IOException {
-    oos.writeInt(bytes.length);
-    oos.write(bytes);
-  }
+	/**
+	 * Writes byte array as length and bytes.
+	 */
+	public static void writeByteArray(ObjectOutputStream oos, byte[] bytes) throws IOException {
+		oos.writeInt(bytes.length);
+		oos.write(bytes);
+	}
 
-  /**
-   * Writes string into {@link OutputStream} and does NOT close the stream.
-   */
-  public static void writeString(OutputStream output, String outString) throws IOException {
-    IOUtils.copy(IOUtils.toInputStream(outString), output);
-  }
+	/**
+	 * Writes string into {@link OutputStream} and does NOT close the stream.
+	 */
+	public static void writeString(OutputStream output, String outString) throws IOException {
+		IOUtils.copy(IOUtils.toInputStream(outString), output);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Eclipse IFile utilities
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Creates or modifies given {@link IFile} with given {@link InputStream}.
-   *
-   * @return <code>true</code> if {@link IFile} was created.
-   */
-  public static boolean setFileContents(IFile file, InputStream inputStream) throws CoreException {
-    if (file.exists()) {
-      file.setContents(inputStream, true, false, null);
-      return false;
-    } else {
-      IOUtils2.ensureFolderExists(file);
-      file.create(inputStream, true, null);
-      return true;
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Eclipse IFile utilities
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Creates or modifies given {@link IFile} with given {@link InputStream}.
+	 *
+	 * @return <code>true</code> if {@link IFile} was created.
+	 */
+	public static boolean setFileContents(IFile file, InputStream inputStream) throws CoreException {
+		if (file.exists()) {
+			file.setContents(inputStream, true, false, null);
+			return false;
+		} else {
+			IOUtils2.ensureFolderExists(file);
+			file.create(inputStream, true, null);
+			return true;
+		}
+	}
 
-  /**
-   * Creates or modifies given {@link IFile} with given {@link String}.
-   */
-  public static void setFileContents(IFile file, String contents) throws CoreException {
-    InputStream inputStream = new ByteArrayInputStream(contents.getBytes());
-    setFileContents(file, inputStream);
-  }
+	/**
+	 * Creates or modifies given {@link IFile} with given {@link String}.
+	 */
+	public static void setFileContents(IFile file, String contents) throws CoreException {
+		InputStream inputStream = new ByteArrayInputStream(contents.getBytes());
+		setFileContents(file, inputStream);
+	}
 
-  /**
-   * Saves given {@link Properties} into given {@link IFile}.
-   */
-  public static void storeProperties(IFile file, Properties properties) throws CoreException,
-      IOException {
-    ByteArrayOutputStream baos = new ByteArrayOutputStream();
-    properties.store(baos, null);
-    //
-    ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
-    setFileContents(file, bais);
-  }
+	/**
+	 * Saves given {@link Properties} into given {@link IFile}.
+	 */
+	public static void storeProperties(IFile file, Properties properties) throws CoreException,
+	IOException {
+		ByteArrayOutputStream baos = new ByteArrayOutputStream();
+		properties.store(baos, null);
+		//
+		ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
+		setFileContents(file, bais);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IFolder utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Ensures that all parent {@link IFolder}'s to the given {@link IFile} are exist.
-   */
-  public static void ensureFolderExists(IFile file) throws CoreException {
-    if (file.getParent() instanceof IFolder) {
-      ensureFolderExists((IFolder) file.getParent());
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IFolder utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Ensures that all parent {@link IFolder}'s to the given {@link IFile} are exist.
+	 */
+	public static void ensureFolderExists(IFile file) throws CoreException {
+		if (file.getParent() instanceof IFolder) {
+			ensureFolderExists((IFolder) file.getParent());
+		}
+	}
 
-  /**
-   * Ensures that {@link IFolder} with given name exists, so exist all its parent {@link IFolder}'s.
-   */
-  public static IFolder ensureFolderExists(IProject project, String path) throws CoreException {
-    IFolder folder = project.getFolder(new Path(path));
-    ensureFolderExists(folder);
-    return folder;
-  }
+	/**
+	 * Ensures that {@link IFolder} with given name exists, so exist all its parent {@link IFolder}'s.
+	 */
+	public static IFolder ensureFolderExists(IProject project, String path) throws CoreException {
+		IFolder folder = project.getFolder(new Path(path));
+		ensureFolderExists(folder);
+		return folder;
+	}
 
-  /**
-   * Ensures that given {@link IFolder} exists, so exist all its parent {@link IFolder}'s.
-   */
-  public static void ensureFolderExists(IFolder folder) throws CoreException {
-    if (!folder.exists()) {
-      // ensure parent folder
-      {
-        IContainer parent = folder.getParent();
-        if (parent instanceof IFolder) {
-          ensureFolderExists((IFolder) parent);
-        }
-      }
-      // create this folder
-      folder.create(true, true, null);
-    }
-  }
+	/**
+	 * Ensures that given {@link IFolder} exists, so exist all its parent {@link IFolder}'s.
+	 */
+	public static void ensureFolderExists(IFolder folder) throws CoreException {
+		if (!folder.exists()) {
+			// ensure parent folder
+			{
+				IContainer parent = folder.getParent();
+				if (parent instanceof IFolder) {
+					ensureFolderExists((IFolder) parent);
+				}
+			}
+			// create this folder
+			folder.create(true, true, null);
+		}
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/Messages.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/Messages.java
index 600070743..9e6eb5dd9 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/Messages.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/Messages.java
@@ -3,60 +3,60 @@
 import org.eclipse.osgi.util.NLS;
 
 public class Messages extends NLS {
-  private static final String BUNDLE_NAME = "org.eclipse.wb.internal.core.utils.messages"; //$NON-NLS-1$
-  public static String AbstractColorDialog_previewGroup;
-  public static String AbstractColorDialog_title;
-  public static String AbstractColorsGridComposite_colorHintGroup;
-  public static String AbstractColorsGridComposite_sortGroup;
-  public static String AbstractImageDialog_modeLabel;
-  public static String AbstractImageDialog_parametersGroup;
-  public static String AbstractImageDialog_previewGroup;
-  public static String AbstractImageDialog_title;
-  public static String ClasspathImagePage_title;
-  public static String ColorPreviewCanvas_sampleText;
-  public static String DefaultImagePage_title;
-  public static String DeleteFileChange_errNoFile;
-  public static String DeleteFileChange_name;
-  public static String DesignerExceptionUtils_fullStackTraceLabel;
-  public static String DesignerExceptionUtils_noDescriptionMessage;
-  public static String DesignerExceptionUtils_noDescriptionTitle;
-  public static String DesignerExceptionUtils_noDescriptionTitle2;
-  public static String DesignerExceptionUtils_noExceptionLabel;
-  public static String DesignerExceptionUtils_openUrlMessage;
-  public static String DesignerExceptionUtils_openUrlTitle;
-  public static String DesignerExceptionUtils_stackTraceLabel;
-  public static String FileImagePage_browseButton;
-  public static String FileImagePage_title;
-  public static String ImagePreviewComposite_dimension;
-  public static String ImagePreviewComposite_noPreview;
-  public static String ImagePreviewComposite_size;
-  public static String ImagePreviewComposite_sizeNA;
-  public static String JdtUiUtils_selectTypeMessage;
-  public static String JdtUiUtils_selectTypeTitle;
-  public static String NamedColorsComposite_htmlGroup;
-  public static String NamedColorsComposite_sortHue;
-  public static String NamedColorsComposite_sortLightness;
-  public static String NamedColorsComposite_sortName;
-  public static String NamedColorsComposite_sortSaturation;
-  public static String NamedColorsComposite_sortTone;
-  public static String NamedColorsComposite_svgGroup;
-  public static String NullImagePage_title;
-  public static String PackageRootSelectionDialogField_dialogMessage;
-  public static String PackageRootSelectionDialogField_dialogTitle;
-  public static String PackageSelectionDialogField_dialogMessage;
-  public static String PackageSelectionDialogField_dialogTitle;
-  public static String ProjectSelectionDialogField_dialogMessage;
-  public static String ProjectSelectionDialogField_dialogTitle;
-  public static String UndoCompilationUnitChange_noFile;
-  public static String WebSafeColorsComposite_sortHue;
-  public static String WebSafeColorsComposite_sortLightness;
-  public static String WebSafeColorsComposite_sortSaturation;
-  public static String WebSafeColorsComposite_sortTone;
-  static {
-    // initialize resource bundle
-    NLS.initializeMessages(BUNDLE_NAME, Messages.class);
-  }
+	private static final String BUNDLE_NAME = "org.eclipse.wb.internal.core.utils.messages"; //$NON-NLS-1$
+	public static String AbstractColorDialog_previewGroup;
+	public static String AbstractColorDialog_title;
+	public static String AbstractColorsGridComposite_colorHintGroup;
+	public static String AbstractColorsGridComposite_sortGroup;
+	public static String AbstractImageDialog_modeLabel;
+	public static String AbstractImageDialog_parametersGroup;
+	public static String AbstractImageDialog_previewGroup;
+	public static String AbstractImageDialog_title;
+	public static String ClasspathImagePage_title;
+	public static String ColorPreviewCanvas_sampleText;
+	public static String DefaultImagePage_title;
+	public static String DeleteFileChange_errNoFile;
+	public static String DeleteFileChange_name;
+	public static String DesignerExceptionUtils_fullStackTraceLabel;
+	public static String DesignerExceptionUtils_noDescriptionMessage;
+	public static String DesignerExceptionUtils_noDescriptionTitle;
+	public static String DesignerExceptionUtils_noDescriptionTitle2;
+	public static String DesignerExceptionUtils_noExceptionLabel;
+	public static String DesignerExceptionUtils_openUrlMessage;
+	public static String DesignerExceptionUtils_openUrlTitle;
+	public static String DesignerExceptionUtils_stackTraceLabel;
+	public static String FileImagePage_browseButton;
+	public static String FileImagePage_title;
+	public static String ImagePreviewComposite_dimension;
+	public static String ImagePreviewComposite_noPreview;
+	public static String ImagePreviewComposite_size;
+	public static String ImagePreviewComposite_sizeNA;
+	public static String JdtUiUtils_selectTypeMessage;
+	public static String JdtUiUtils_selectTypeTitle;
+	public static String NamedColorsComposite_htmlGroup;
+	public static String NamedColorsComposite_sortHue;
+	public static String NamedColorsComposite_sortLightness;
+	public static String NamedColorsComposite_sortName;
+	public static String NamedColorsComposite_sortSaturation;
+	public static String NamedColorsComposite_sortTone;
+	public static String NamedColorsComposite_svgGroup;
+	public static String NullImagePage_title;
+	public static String PackageRootSelectionDialogField_dialogMessage;
+	public static String PackageRootSelectionDialogField_dialogTitle;
+	public static String PackageSelectionDialogField_dialogMessage;
+	public static String PackageSelectionDialogField_dialogTitle;
+	public static String ProjectSelectionDialogField_dialogMessage;
+	public static String ProjectSelectionDialogField_dialogTitle;
+	public static String UndoCompilationUnitChange_noFile;
+	public static String WebSafeColorsComposite_sortHue;
+	public static String WebSafeColorsComposite_sortLightness;
+	public static String WebSafeColorsComposite_sortSaturation;
+	public static String WebSafeColorsComposite_sortTone;
+	static {
+		// initialize resource bundle
+		NLS.initializeMessages(BUNDLE_NAME, Messages.class);
+	}
 
-  private Messages() {
-  }
+	private Messages() {
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/Pair.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/Pair.java
index fafa6adb2..ce0d15d41 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/Pair.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/Pair.java
@@ -19,63 +19,63 @@
  * @coverage core.util
  */
 public final class Pair<L, R> {
-  private final L left;
-  private final R right;
+	private final L left;
+	private final R right;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public Pair(L left, R right) {
-    this.left = left;
-    this.right = right;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public Pair(L left, R right) {
+		this.left = left;
+		this.right = right;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean equals(Object o) {
-    if (o == this) {
-      return true;
-    }
-    if (!(o instanceof Pair<?, ?>)) {
-      return false;
-    }
-    Pair<?, ?> other = (Pair<?, ?>) o;
-    return ObjectUtils.equals(getLeft(), other.getLeft())
-        && ObjectUtils.equals(getRight(), other.getRight());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean equals(Object o) {
+		if (o == this) {
+			return true;
+		}
+		if (!(o instanceof Pair<?, ?>)) {
+			return false;
+		}
+		Pair<?, ?> other = (Pair<?, ?>) o;
+		return ObjectUtils.equals(getLeft(), other.getLeft())
+				&& ObjectUtils.equals(getRight(), other.getRight());
+	}
 
-  @Override
-  public int hashCode() {
-    int hLeft = getLeft() == null ? 0 : getLeft().hashCode();
-    int hRight = getRight() == null ? 0 : getRight().hashCode();
-    return hLeft + 37 * hRight;
-  }
+	@Override
+	public int hashCode() {
+		int hLeft = getLeft() == null ? 0 : getLeft().hashCode();
+		int hRight = getRight() == null ? 0 : getRight().hashCode();
+		return hLeft + 37 * hRight;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public L getLeft() {
-    return left;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public L getLeft() {
+		return left;
+	}
 
-  public R getRight() {
-    return right;
-  }
+	public R getRight() {
+		return right;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Factory
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static <L, R> Pair<L, R> create(L left, R right) {
-    return new Pair<L, R>(left, right);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Factory
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static <L, R> Pair<L, R> create(L left, R right) {
+		return new Pair<L, R>(left, right);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/SingletonExtensionFactory.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/SingletonExtensionFactory.java
index 97bcdeb52..2394e204c 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/SingletonExtensionFactory.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/SingletonExtensionFactory.java
@@ -33,43 +33,43 @@
  * @coverage core.util
  */
 public final class SingletonExtensionFactory
-    implements
-      IExecutableExtension,
-      IExecutableExtensionFactory {
-  private Class<?> m_objectClass;
+implements
+IExecutableExtension,
+IExecutableExtensionFactory {
+	private Class<?> m_objectClass;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IExecutableExtension
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  @SuppressWarnings("unchecked")
-  public void setInitializationData(final IConfigurationElement config,
-      final String propertyName,
-      final Object data) throws CoreException {
-    ExecutionUtils.runRethrow(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        Bundle extensionBundle = ExternalFactoriesHelper.getExtensionBundle(config);
-        String objectClassName = ((Map<String, String>) data).get("class");
-        m_objectClass = extensionBundle.loadClass(objectClassName);
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IExecutableExtension
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	@SuppressWarnings("unchecked")
+	public void setInitializationData(final IConfigurationElement config,
+			final String propertyName,
+			final Object data) throws CoreException {
+		ExecutionUtils.runRethrow(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				Bundle extensionBundle = ExternalFactoriesHelper.getExtensionBundle(config);
+				String objectClassName = ((Map<String, String>) data).get("class");
+				m_objectClass = extensionBundle.loadClass(objectClassName);
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IExecutableExtensionFactory
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Object create() throws CoreException {
-    return ExecutionUtils.runObject(new RunnableObjectEx<Object>() {
-      @Override
-      public Object runObject() throws Exception {
-        return ReflectionUtils.getFieldObject(m_objectClass, "INSTANCE");
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IExecutableExtensionFactory
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Object create() throws CoreException {
+		return ExecutionUtils.runObject(new RunnableObjectEx<Object>() {
+			@Override
+			public Object runObject() throws Exception {
+				return ReflectionUtils.getFieldObject(m_objectClass, "INSTANCE");
+			}
+		});
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/StringUtilities.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/StringUtilities.java
index 11a4a57a1..b322418a3 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/StringUtilities.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/StringUtilities.java
@@ -23,175 +23,175 @@
  * @coverage shared.utils.string
  */
 public class StringUtilities {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private StringUtilities() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private StringUtilities() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Replaces all duplicated whitespace characters with single space.
-   */
-  public static String normalizeWhitespaces(String s) {
-    int length = s.length();
-    StringBuffer normalized = new StringBuffer(length);
-    //
-    boolean needSpace = false;
-    for (int index = 0; index < length; index++) {
-      char c = s.charAt(index);
-      if (Character.isWhitespace(c)) {
-        needSpace = true;
-      } else {
-        if (needSpace) {
-          needSpace = false;
-          normalized.append(' ');
-        }
-        normalized.append(c);
-      }
-    }
-    // add trailing space
-    if (needSpace) {
-      normalized.append(' ');
-    }
-    //
-    return normalized.toString();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Replaces all duplicated whitespace characters with single space.
+	 */
+	public static String normalizeWhitespaces(String s) {
+		int length = s.length();
+		StringBuffer normalized = new StringBuffer(length);
+		//
+		boolean needSpace = false;
+		for (int index = 0; index < length; index++) {
+			char c = s.charAt(index);
+			if (Character.isWhitespace(c)) {
+				needSpace = true;
+			} else {
+				if (needSpace) {
+					needSpace = false;
+					normalized.append(' ');
+				}
+				normalized.append(c);
+			}
+		}
+		// add trailing space
+		if (needSpace) {
+			normalized.append(' ');
+		}
+		//
+		return normalized.toString();
+	}
 
-  /**
-   * @return the whitespace between beginning of line and given index.
-   */
-  public static String getLinePrefix(String s, int index) {
-    int beginOfLine = index - 1;
-    while (beginOfLine >= 0) {
-      char c = s.charAt(beginOfLine);
-      if (c == '\r' || c == '\n' || !Character.isWhitespace(c)) {
-        break;
-      }
-      beginOfLine--;
-    }
-    return s.substring(beginOfLine + 1, index);
-  }
+	/**
+	 * @return the whitespace between beginning of line and given index.
+	 */
+	public static String getLinePrefix(String s, int index) {
+		int beginOfLine = index - 1;
+		while (beginOfLine >= 0) {
+			char c = s.charAt(beginOfLine);
+			if (c == '\r' || c == '\n' || !Character.isWhitespace(c)) {
+				break;
+			}
+			beginOfLine--;
+		}
+		return s.substring(beginOfLine + 1, index);
+	}
 
-  /**
-   * @return the {@link String} without first word or empty {@link String} if no more words.
-   */
-  public static String removeFirstWord(String s) {
-    s = s.trim();
-    int length = s.length();
-    for (int index = 0; index < length; index++) {
-      char c = s.charAt(index);
-      if (Character.isWhitespace(c)) {
-        return s.substring(index).trim();
-      }
-    }
-    // no more words
-    return StringUtils.EMPTY;
-  }
+	/**
+	 * @return the {@link String} without first word or empty {@link String} if no more words.
+	 */
+	public static String removeFirstWord(String s) {
+		s = s.trim();
+		int length = s.length();
+		for (int index = 0; index < length; index++) {
+			char c = s.charAt(index);
+			if (Character.isWhitespace(c)) {
+				return s.substring(index).trim();
+			}
+		}
+		// no more words
+		return StringUtils.EMPTY;
+	}
 
-  /**
-   * Extract camel caps from specified string.
-   *
-   * <pre>
-   * Example: NullPointException --> NPE
-   *
-   * <pre>
-   */
-  public static String extractCamelCaps(String string) {
-    if (string == null) {
-      return null;
-    }
-    StringBuffer buf = new StringBuffer(string.length());
-    int length = string.length();
-    for (int i = 0; i < length; i++) {
-      char ch = string.charAt(i);
-      if (Character.isUpperCase(ch)) {
-        buf.append(ch);
-      }
-    }
-    return buf.toString();
-  }
+	/**
+	 * Extract camel caps from specified string.
+	 *
+	 * <pre>
+	 * Example: NullPointException --> NPE
+	 *
+	 * <pre>
+	 */
+	public static String extractCamelCaps(String string) {
+		if (string == null) {
+			return null;
+		}
+		StringBuffer buf = new StringBuffer(string.length());
+		int length = string.length();
+		for (int i = 0; i < length; i++) {
+			char ch = string.charAt(i);
+			if (Character.isUpperCase(ch)) {
+				buf.append(ch);
+			}
+		}
+		return buf.toString();
+	}
 
-  /**
-   * Extract camel words from specified string.
-   *
-   * <pre>
+	/**
+	 * Extract camel words from specified string.
+	 *
+	 * <pre>
 	 * Example: NullPointException --> [Null, Pointer, Exception]
 	 * Example: null --> []
-   *
-   * <pre>
-   */
-  public static String[] extractCamelWords(String string) {
-    if (string == null) {
-      return ArrayUtils.EMPTY_STRING_ARRAY;
-    }
-    int length = string.length();
-    //
-    int count = 0;
-    for (int i = 0; i < length; i++) {
-      char ch = string.charAt(i);
-      if (Character.isUpperCase(ch)) {
-        count++;
-      }
-    }
-    //
-    String[] words = new String[count];
-    int wordNum = 0;
-    int begin = -1;
-    for (int i = 0; i < length; i++) {
-      char ch = string.charAt(i);
-      boolean isLast = i == length - 1;
-      if (Character.isUpperCase(ch) || isLast) {
-        if (begin >= 0) {
-          int end = i;
-          if (isLast) {
-            end++;
-          }
-          String word = string.substring(begin, end);
-          words[wordNum++] = word;
-        }
-        begin = i;
-      }
-    }
-    return words;
-  }
+	 *
+	 * <pre>
+	 */
+	public static String[] extractCamelWords(String string) {
+		if (string == null) {
+			return ArrayUtils.EMPTY_STRING_ARRAY;
+		}
+		int length = string.length();
+		//
+		int count = 0;
+		for (int i = 0; i < length; i++) {
+			char ch = string.charAt(i);
+			if (Character.isUpperCase(ch)) {
+				count++;
+			}
+		}
+		//
+		String[] words = new String[count];
+		int wordNum = 0;
+		int begin = -1;
+		for (int i = 0; i < length; i++) {
+			char ch = string.charAt(i);
+			boolean isLast = i == length - 1;
+			if (Character.isUpperCase(ch) || isLast) {
+				if (begin >= 0) {
+					int end = i;
+					if (isLast) {
+						end++;
+					}
+					String word = string.substring(begin, end);
+					words[wordNum++] = word;
+				}
+				begin = i;
+			}
+		}
+		return words;
+	}
 
-  /**
-   * @return the index of the first lowercase letter.
-   *
-   * <pre>
+	/**
+	 * @return the index of the first lowercase letter.
+	 *
+	 * <pre>
 	 * null      = -1
 	 * ""        = -1
 	 * "button"  = 0
 	 * "JButton" = 2
 	 * "ABC"     = -1
 	 * </pre>
-   */
-  public static int indexOfFirstLowerCase(String str) {
-    if (str == null) {
-      return -1;
-    }
-    // check each character for lower case
-    for (int i = 0; i < str.length(); i++) {
-      char ch = str.charAt(i);
-      if (Character.isLowerCase(ch)) {
-        return i;
-      }
-    }
-    // no lower case characters
-    return -1;
-  }
+	 */
+	public static int indexOfFirstLowerCase(String str) {
+		if (str == null) {
+			return -1;
+		}
+		// check each character for lower case
+		for (int i = 0; i < str.length(); i++) {
+			char ch = str.charAt(i);
+			if (Character.isLowerCase(ch)) {
+				return i;
+			}
+		}
+		// no lower case characters
+		return -1;
+	}
 
-  /**
-   * Strip the leading uppercase characters from the string keeping n of them.
-   *
-   * <pre>
+	/**
+	 * Strip the leading uppercase characters from the string keeping n of them.
+	 *
+	 * <pre>
 	 * null, *        = null
 	 * "", *          = null
 	 * "Button", 1    = "Button"
@@ -200,233 +200,233 @@ public static int indexOfFirstLowerCase(String str) {
 	 * "ABCButton", 2 = "CButton"
 	 * "AbcButton", 2 = "AbcButton"
 	 * </pre>
-   */
-  public static String stripLeadingUppercaseChars(String string, int keepCount) {
-    int index = indexOfFirstLowerCase(string);
-    if (index > 0 && index > keepCount) {
-      return string.substring(index - keepCount);
-    }
-    return string;
-  }
+	 */
+	public static String stripLeadingUppercaseChars(String string, int keepCount) {
+		int index = indexOfFirstLowerCase(string);
+		if (index > 0 && index > keepCount) {
+			return string.substring(index - keepCount);
+		}
+		return string;
+	}
 
-  /**
-   * Strips all HTML tags if any.
-   *
-   * <pre>
+	/**
+	 * Strips all HTML tags if any.
+	 *
+	 * <pre>
 	 * null, *      = null
 	 * "", *        = null
 	 * "abc"        = "abc"
 	 * "a&lt;b&gt;c&lt;/b&gt;d" = "acd"
 	 * </pre>
-   */
-  public static String stripHtml(String str) {
-    if (StringUtils.isEmpty(str)) {
-      return str;
-    }
-    //
-    StringBuffer result = new StringBuffer();
-    boolean insideTag = false;
-    for (int i = 0; i < str.length(); i++) {
-      char c = str.charAt(i);
-      if (c == '<') {
-        insideTag = true;
-      }
-      if (!insideTag) {
-        result.append(c);
-      }
-      if (c == '>') {
-        insideTag = false;
-      }
-    }
-    return result.toString();
-  }
+	 */
+	public static String stripHtml(String str) {
+		if (StringUtils.isEmpty(str)) {
+			return str;
+		}
+		//
+		StringBuffer result = new StringBuffer();
+		boolean insideTag = false;
+		for (int i = 0; i < str.length(); i++) {
+			char c = str.charAt(i);
+			if (c == '<') {
+				insideTag = true;
+			}
+			if (!insideTag) {
+				result.append(c);
+			}
+			if (c == '>') {
+				insideTag = false;
+			}
+		}
+		return result.toString();
+	}
 
-  /**
-   * @return the {@link String} where no sequential duplicate characters.
-   */
-  public static String removeDuplicateCharacters(String str) {
-    if (StringUtils.isEmpty(str)) {
-      return str;
-    }
-    //
-    char[] chars = str.toCharArray();
-    StringBuffer buffer = new StringBuffer();
-    // add unique characters
-    char lastChar = 0;
-    for (int i = 0; i < chars.length; i++) {
-      char c = chars[i];
-      if (i == 0 || c != lastChar) {
-        buffer.append(c);
-        lastChar = c;
-      }
-    }
-    // result as String
-    return buffer.toString();
-  }
+	/**
+	 * @return the {@link String} where no sequential duplicate characters.
+	 */
+	public static String removeDuplicateCharacters(String str) {
+		if (StringUtils.isEmpty(str)) {
+			return str;
+		}
+		//
+		char[] chars = str.toCharArray();
+		StringBuffer buffer = new StringBuffer();
+		// add unique characters
+		char lastChar = 0;
+		for (int i = 0; i < chars.length; i++) {
+			char c = chars[i];
+			if (i == 0 || c != lastChar) {
+				buffer.append(c);
+				lastChar = c;
+			}
+		}
+		// result as String
+		return buffer.toString();
+	}
 
-  /**
-   * Finds in each of two strings interval where they are different. Outside of these intervals, on
-   * prefix and suffix these strings are equal. Interval has format <code>(begin, length)</code>.
-   *
-   * @return the <code>int[4]</code>, with two intervals.
-   */
-  public static int[] getDifferenceIntervals(String s1, String s2) {
-    // prefix
-    int prefixLength = 0;
-    for (; prefixLength < s1.length() && prefixLength < s2.length(); prefixLength++) {
-      char c1 = s1.charAt(prefixLength);
-      char c2 = s2.charAt(prefixLength);
-      if (c1 != c2) {
-        break;
-      }
-    }
-    // suffix
-    int suffixLength = 0;
-    for (; suffixLength < s1.length() - prefixLength && suffixLength < s2.length() - prefixLength; suffixLength++) {
-      char c1 = s1.charAt(s1.length() - 1 - suffixLength);
-      char c2 = s2.charAt(s2.length() - 1 - suffixLength);
-      if (c1 != c2) {
-        break;
-      }
-    }
-    // return intervals
-    return new int[]{
-        prefixLength,
-        s1.length() - suffixLength - prefixLength,
-        prefixLength,
-        s2.length() - suffixLength - prefixLength};
-  }
+	/**
+	 * Finds in each of two strings interval where they are different. Outside of these intervals, on
+	 * prefix and suffix these strings are equal. Interval has format <code>(begin, length)</code>.
+	 *
+	 * @return the <code>int[4]</code>, with two intervals.
+	 */
+	public static int[] getDifferenceIntervals(String s1, String s2) {
+		// prefix
+		int prefixLength = 0;
+		for (; prefixLength < s1.length() && prefixLength < s2.length(); prefixLength++) {
+			char c1 = s1.charAt(prefixLength);
+			char c2 = s2.charAt(prefixLength);
+			if (c1 != c2) {
+				break;
+			}
+		}
+		// suffix
+		int suffixLength = 0;
+		for (; suffixLength < s1.length() - prefixLength && suffixLength < s2.length() - prefixLength; suffixLength++) {
+			char c1 = s1.charAt(s1.length() - 1 - suffixLength);
+			char c2 = s2.charAt(s2.length() - 1 - suffixLength);
+			if (c1 != c2) {
+				break;
+			}
+		}
+		// return intervals
+		return new int[]{
+				prefixLength,
+				s1.length() - suffixLength - prefixLength,
+				prefixLength,
+				s2.length() - suffixLength - prefixLength};
+	}
 
-  /**
-   * Performs replace in each {@link String} of array.
-   */
-  public static String[] replace(String strings[], String searchString, String replacement) {
-    String[] result = new String[strings.length];
-    for (int i = 0; i < strings.length; i++) {
-      String string = strings[i];
-      result[i] = StringUtils.replace(string, searchString, replacement);
-    }
-    return result;
-  }
+	/**
+	 * Performs replace in each {@link String} of array.
+	 */
+	public static String[] replace(String strings[], String searchString, String replacement) {
+		String[] result = new String[strings.length];
+		for (int i = 0; i < strings.length; i++) {
+			String string = strings[i];
+			result[i] = StringUtils.replace(string, searchString, replacement);
+		}
+		return result;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Escape
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Escapes the characters in a <code>String</code> using Java String rules.
-   * <p>
-   * Deals correctly with quotes and control-chars (tab, backslash, cr, ff, etc.)
-   */
-  public static String escapeJava(String s) {
-    String escaped = StringEscapeUtils.escapeJava(s);
-    // TODO remove after fix https://issues.apache.org/jira/browse/LANG-421  (probably in version 3.0)
-    escaped = StringUtils.replace(escaped, "\\/", "/");
-    return escaped;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Escape
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Escapes the characters in a <code>String</code> using Java String rules.
+	 * <p>
+	 * Deals correctly with quotes and control-chars (tab, backslash, cr, ff, etc.)
+	 */
+	public static String escapeJava(String s) {
+		String escaped = StringEscapeUtils.escapeJava(s);
+		// TODO remove after fix https://issues.apache.org/jira/browse/LANG-421  (probably in version 3.0)
+		escaped = StringUtils.replace(escaped, "\\/", "/");
+		return escaped;
+	}
 
-  /**
-   * Escapes {@link String} for Java source.
-   *
-   * @return the {@link String} that can be used in quotes in Java source. Note, that it is not
-   *         converted into any encoding, i.e. still in UTF-8.
-   */
-  public static String escapeForJavaSource(String str) {
-    if (str == null) {
-      return null;
-    }
-    StringBuffer buffer = new StringBuffer(str.length() * 2);
-    escapeForJavaSource(buffer, str);
-    return buffer.toString();
-  }
+	/**
+	 * Escapes {@link String} for Java source.
+	 *
+	 * @return the {@link String} that can be used in quotes in Java source. Note, that it is not
+	 *         converted into any encoding, i.e. still in UTF-8.
+	 */
+	public static String escapeForJavaSource(String str) {
+		if (str == null) {
+			return null;
+		}
+		StringBuffer buffer = new StringBuffer(str.length() * 2);
+		escapeForJavaSource(buffer, str);
+		return buffer.toString();
+	}
 
-  /**
-   * Worker method for the {@link #escapeForJavaSource(String)}.
-   */
-  private static void escapeForJavaSource(StringBuffer out, String str) {
-    int sz = str.length();
-    for (int i = 0; i < sz; i++) {
-      char c = str.charAt(i);
-      if (c < 32) {
-        switch (c) {
-          case '\b' :
-            out.append('\\');
-            out.append('b');
-            break;
-          case '\n' :
-            out.append('\\');
-            out.append('n');
-            break;
-          case '\t' :
-            out.append('\\');
-            out.append('t');
-            break;
-          case '\f' :
-            out.append('\\');
-            out.append('f');
-            break;
-          case '\r' :
-            out.append('\\');
-            out.append('r');
-            break;
-          default :
-            if (c > 0xf) {
-              out.append("\\u00" + hex(c));
-            } else {
-              out.append("\\u000" + hex(c));
-            }
-            break;
-        }
-      } else {
-        switch (c) {
-          case '"' :
-            out.append('\\');
-            out.append('"');
-            break;
-          case '\\' :
-            out.append('\\');
-            out.append('\\');
-            break;
-          default :
-            out.append(c);
-            break;
-        }
-      }
-    }
-  }
+	/**
+	 * Worker method for the {@link #escapeForJavaSource(String)}.
+	 */
+	private static void escapeForJavaSource(StringBuffer out, String str) {
+		int sz = str.length();
+		for (int i = 0; i < sz; i++) {
+			char c = str.charAt(i);
+			if (c < 32) {
+				switch (c) {
+				case '\b' :
+					out.append('\\');
+					out.append('b');
+					break;
+				case '\n' :
+					out.append('\\');
+					out.append('n');
+					break;
+				case '\t' :
+					out.append('\\');
+					out.append('t');
+					break;
+				case '\f' :
+					out.append('\\');
+					out.append('f');
+					break;
+				case '\r' :
+					out.append('\\');
+					out.append('r');
+					break;
+				default :
+					if (c > 0xf) {
+						out.append("\\u00" + hex(c));
+					} else {
+						out.append("\\u000" + hex(c));
+					}
+					break;
+				}
+			} else {
+				switch (c) {
+				case '"' :
+					out.append('\\');
+					out.append('"');
+					break;
+				case '\\' :
+					out.append('\\');
+					out.append('\\');
+					break;
+				default :
+					out.append(c);
+					break;
+				}
+			}
+		}
+	}
 
-  /**
-   * @return the upper case hex decimal {@link String}.
-   */
-  private static String hex(char c) {
-    return Integer.toHexString(c).toUpperCase(Locale.ENGLISH);
-  }
+	/**
+	 * @return the upper case hex decimal {@link String}.
+	 */
+	private static String hex(char c) {
+		return Integer.toHexString(c).toUpperCase(Locale.ENGLISH);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Latin
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return filtered {@link String} where only latin characters are left.
-   */
-  public static String removeNonLatinCharacters(String s) {
-    StringBuffer sb = new StringBuffer();
-    char[] chars = s.toCharArray();
-    for (int i = 0; i < chars.length; i++) {
-      char c = chars[i];
-      if (isLatinCharacter(c)) {
-        sb.append(c);
-      }
-    }
-    return sb.toString();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Latin
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return filtered {@link String} where only latin characters are left.
+	 */
+	public static String removeNonLatinCharacters(String s) {
+		StringBuffer sb = new StringBuffer();
+		char[] chars = s.toCharArray();
+		for (int i = 0; i < chars.length; i++) {
+			char c = chars[i];
+			if (isLatinCharacter(c)) {
+				sb.append(c);
+			}
+		}
+		return sb.toString();
+	}
 
-  /**
-   * @return <code>true</code> if given character if upper/lower latin characters.
-   */
-  public static boolean isLatinCharacter(char c) {
-    return c >= 'A' && c <= 'Z' || c >= 'a' && c <= 'z';
-  }
+	/**
+	 * @return <code>true</code> if given character if upper/lower latin characters.
+	 */
+	public static boolean isLatinCharacter(char c) {
+		return c >= 'A' && c <= 'Z' || c >= 'a' && c <= 'z';
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/Version.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/Version.java
index c7bf72461..3bb4bab79 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/Version.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/Version.java
@@ -17,152 +17,152 @@
  * @coverage core.util
  */
 public final class Version {
-  private static final String SEPARATOR = ".";
-  private final int m_major;
-  private final int m_minor;
-  private final int m_micro;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public Version(int major, int minor) {
-    this(major, minor, 0);
-  }
-
-  public Version(int major, int minor, int micro) {
-    m_major = major;
-    m_minor = minor;
-    m_micro = micro;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean equals(Object object) {
-    if (object == this) {
-      return true;
-    }
-    if (!(object instanceof Version)) {
-      return false;
-    }
-    Version other = (Version) object;
-    return m_major == other.m_major && m_minor == other.m_minor && m_micro == other.m_micro;
-  }
-
-  @Override
-  public int hashCode() {
-    return m_minor + 37 * m_major + 37 * m_micro;
-  }
-
-  @Override
-  public String toString() {
-    return getStringMajorMinorMicro();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the major component of this {@link Version}.
-   */
-  public int getMajor() {
-    return m_major;
-  }
-
-  /**
-   * @return the minor component of this {@link Version}.
-   */
-  public int getMinor() {
-    return m_minor;
-  }
-
-  /**
-   * @return the micro component of this {@link Version}.
-   */
-  public int getMicro() {
-    return m_micro;
-  }
-
-  /**
-   * @return the "major.minor" string.
-   */
-  public String getStringMajorMinor() {
-    return m_major + SEPARATOR + m_minor;
-  }
-
-  /**
-   * @return the "major.minor.micro" string.
-   */
-  public String getStringMajorMinorMicro() {
-    return m_major + SEPARATOR + m_minor + SEPARATOR + m_micro;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Compare
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if this {@link Version} is exactly same as given.
-   */
-  public boolean isSame(Version that) {
-    return equals(that);
-  }
-
-  /**
-   * @return <code>true</code> if components of this {@link Version} is are greater than given.
-   */
-  public boolean isHigher(Version that) {
-    if (m_major > that.m_major) {
-      return true;
-    }
-    if (m_major == that.m_major) {
-      if (m_minor > that.m_minor) {
-        return true;
-      }
-      if (m_minor == that.m_minor) {
-        return m_micro > that.m_micro;
-      }
-    }
-    return false;
-  }
-
-  /**
-   * @return <code>true</code> if {@link #isHigher(Version)} or {@link #isSame(Version)}.
-   */
-  public boolean isHigherOrSame(Version that) {
-    return isSame(that) || isHigher(that);
-  }
-
-  /**
-   * @return <code>true</code> if components of this {@link Version} is are less than given.
-   */
-  public boolean isLower(Version that) {
-    if (m_major < that.m_major) {
-      return true;
-    }
-    if (m_major == that.m_major) {
-      if (m_minor < that.m_minor) {
-        return true;
-      }
-      if (m_minor == that.m_minor) {
-        return m_micro < that.m_micro;
-      }
-    }
-    return false;
-  }
-
-  /**
-   * @return <code>true</code> if {@link #isLower(Version)} or {@link #isSame(Version)}.
-   */
-  public boolean isLowerOrSame(Version that) {
-    return isSame(that) || isLower(that);
-  }
+	private static final String SEPARATOR = ".";
+	private final int m_major;
+	private final int m_minor;
+	private final int m_micro;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public Version(int major, int minor) {
+		this(major, minor, 0);
+	}
+
+	public Version(int major, int minor, int micro) {
+		m_major = major;
+		m_minor = minor;
+		m_micro = micro;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean equals(Object object) {
+		if (object == this) {
+			return true;
+		}
+		if (!(object instanceof Version)) {
+			return false;
+		}
+		Version other = (Version) object;
+		return m_major == other.m_major && m_minor == other.m_minor && m_micro == other.m_micro;
+	}
+
+	@Override
+	public int hashCode() {
+		return m_minor + 37 * m_major + 37 * m_micro;
+	}
+
+	@Override
+	public String toString() {
+		return getStringMajorMinorMicro();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the major component of this {@link Version}.
+	 */
+	public int getMajor() {
+		return m_major;
+	}
+
+	/**
+	 * @return the minor component of this {@link Version}.
+	 */
+	public int getMinor() {
+		return m_minor;
+	}
+
+	/**
+	 * @return the micro component of this {@link Version}.
+	 */
+	public int getMicro() {
+		return m_micro;
+	}
+
+	/**
+	 * @return the "major.minor" string.
+	 */
+	public String getStringMajorMinor() {
+		return m_major + SEPARATOR + m_minor;
+	}
+
+	/**
+	 * @return the "major.minor.micro" string.
+	 */
+	public String getStringMajorMinorMicro() {
+		return m_major + SEPARATOR + m_minor + SEPARATOR + m_micro;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Compare
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if this {@link Version} is exactly same as given.
+	 */
+	public boolean isSame(Version that) {
+		return equals(that);
+	}
+
+	/**
+	 * @return <code>true</code> if components of this {@link Version} is are greater than given.
+	 */
+	public boolean isHigher(Version that) {
+		if (m_major > that.m_major) {
+			return true;
+		}
+		if (m_major == that.m_major) {
+			if (m_minor > that.m_minor) {
+				return true;
+			}
+			if (m_minor == that.m_minor) {
+				return m_micro > that.m_micro;
+			}
+		}
+		return false;
+	}
+
+	/**
+	 * @return <code>true</code> if {@link #isHigher(Version)} or {@link #isSame(Version)}.
+	 */
+	public boolean isHigherOrSame(Version that) {
+		return isSame(that) || isHigher(that);
+	}
+
+	/**
+	 * @return <code>true</code> if components of this {@link Version} is are less than given.
+	 */
+	public boolean isLower(Version that) {
+		if (m_major < that.m_major) {
+			return true;
+		}
+		if (m_major == that.m_major) {
+			if (m_minor < that.m_minor) {
+				return true;
+			}
+			if (m_minor == that.m_minor) {
+				return m_micro < that.m_micro;
+			}
+		}
+		return false;
+	}
+
+	/**
+	 * @return <code>true</code> if {@link #isLower(Version)} or {@link #isSame(Version)}.
+	 */
+	public boolean isLowerOrSame(Version that) {
+		return isSame(that) || isLower(that);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/XmlWriter.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/XmlWriter.java
index 3e7e50c1c..5208d606e 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/XmlWriter.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/XmlWriter.java
@@ -49,365 +49,365 @@
  * @coverage core.util
  */
 public final class XmlWriter {
-  private static final String XML_HEADER = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
-  // state constants
-  private static final int TAG_STATE_BEGIN_NOT_ENDED = 1 << 0;
-  private static final int TAG_STATE_OPEN = 1 << 1;
-  private static final int TAG_STATE_HAS_CHILDRED = 1 << 2;
-  private static final int TAG_STATE_HAS_VALUE = 1 << 3;
-  private static final int TAG_STATE_CDATA_OPEN = 1 << 4;
-  // fields
-  private final PrintWriter m_printWriter;
-  private String m_indent = "\t";
-  private final Stack<TagInfo> m_tagStack = new Stack<TagInfo>();
-  private boolean m_closed;
-  private boolean m_isShortTagClosed;
+	private static final String XML_HEADER = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
+	// state constants
+	private static final int TAG_STATE_BEGIN_NOT_ENDED = 1 << 0;
+	private static final int TAG_STATE_OPEN = 1 << 1;
+	private static final int TAG_STATE_HAS_CHILDRED = 1 << 2;
+	private static final int TAG_STATE_HAS_VALUE = 1 << 3;
+	private static final int TAG_STATE_CDATA_OPEN = 1 << 4;
+	// fields
+	private final PrintWriter m_printWriter;
+	private String m_indent = "\t";
+	private final Stack<TagInfo> m_tagStack = new Stack<TagInfo>();
+	private boolean m_closed;
+	private boolean m_isShortTagClosed;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Constructs {@link XmlWriter} and directs it into file with given {@link File}.
-   *
-   * @param file
-   *          the file to store xml contents.
-   */
-  public XmlWriter(File file) throws Exception {
-    this(new PrintWriter(file, "UTF-8"));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Constructs {@link XmlWriter} and directs it into file with given {@link File}.
+	 *
+	 * @param file
+	 *          the file to store xml contents.
+	 */
+	public XmlWriter(File file) throws Exception {
+		this(new PrintWriter(file, "UTF-8"));
+	}
 
-  /**
-   * Constructs {@link XmlWriter} and directs it into file with given <code>filePath</code>.
-   *
-   * @param filePath
-   *          the path to file.
-   */
-  public XmlWriter(String filePath) throws Exception {
-    this(new PrintWriter(filePath, "UTF-8"));
-  }
+	/**
+	 * Constructs {@link XmlWriter} and directs it into file with given <code>filePath</code>.
+	 *
+	 * @param filePath
+	 *          the path to file.
+	 */
+	public XmlWriter(String filePath) throws Exception {
+		this(new PrintWriter(filePath, "UTF-8"));
+	}
 
-  /**
-   * Constructs {@link XmlWriter} and directs it into <code>writer</code> {@link Writer}. This
-   * {@link Writer} would be closed during {@link XmlWriter#close()} invocation.
-   *
-   * @param writer
-   *          the {@link OutputStream} into which {@link XmlWriter} would be directed to.
-   */
-  public XmlWriter(Writer writer) {
-    m_printWriter = new PrintWriter(writer);
-    m_printWriter.print(XML_HEADER);
-  }
+	/**
+	 * Constructs {@link XmlWriter} and directs it into <code>writer</code> {@link Writer}. This
+	 * {@link Writer} would be closed during {@link XmlWriter#close()} invocation.
+	 *
+	 * @param writer
+	 *          the {@link OutputStream} into which {@link XmlWriter} would be directed to.
+	 */
+	public XmlWriter(Writer writer) {
+		m_printWriter = new PrintWriter(writer);
+		m_printWriter.print(XML_HEADER);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tag operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Open tag with given <code>tagName</code> for further adding tag attribute. Ex. calling
-   * beginTag("tag1") will results writing "&lt;tag1" into underlying {@link PrintWriter}. After
-   * calling this method only adding attributes and ending tag operations are possible.
-   *
-   * @param tagName
-   *          the tag name with which tag would be made.
-   */
-  public void beginTag(String tagName) {
-    checkOpen();
-    Assert.isLegal(!StringUtils.isEmpty(tagName), "Can't add tag with empty name.");
-    if (!m_tagStack.empty()) {
-      TagInfo currentTag = m_tagStack.peek();
-      if (isState(currentTag, TAG_STATE_BEGIN_NOT_ENDED)) {
-        throw new IllegalStateException("Another tag already began for attribute adding.");
-      }
-      addState(currentTag, TAG_STATE_HAS_CHILDRED);
-    }
-    m_tagStack.push(new TagInfo(tagName, TAG_STATE_BEGIN_NOT_ENDED));
-    if (!m_isShortTagClosed) {
-      // don't put line separator between "short" tags (<tag attr="attr"/>)
-      m_printWriter.println();
-    }
-    m_isShortTagClosed = false;
-    m_printWriter.print(StringUtils.repeat(getIndent(), m_tagStack.size() - 1));
-    m_printWriter.print("<" + tagName);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tag operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Open tag with given <code>tagName</code> for further adding tag attribute. Ex. calling
+	 * beginTag("tag1") will results writing "&lt;tag1" into underlying {@link PrintWriter}. After
+	 * calling this method only adding attributes and ending tag operations are possible.
+	 *
+	 * @param tagName
+	 *          the tag name with which tag would be made.
+	 */
+	public void beginTag(String tagName) {
+		checkOpen();
+		Assert.isLegal(!StringUtils.isEmpty(tagName), "Can't add tag with empty name.");
+		if (!m_tagStack.empty()) {
+			TagInfo currentTag = m_tagStack.peek();
+			if (isState(currentTag, TAG_STATE_BEGIN_NOT_ENDED)) {
+				throw new IllegalStateException("Another tag already began for attribute adding.");
+			}
+			addState(currentTag, TAG_STATE_HAS_CHILDRED);
+		}
+		m_tagStack.push(new TagInfo(tagName, TAG_STATE_BEGIN_NOT_ENDED));
+		if (!m_isShortTagClosed) {
+			// don't put line separator between "short" tags (<tag attr="attr"/>)
+			m_printWriter.println();
+		}
+		m_isShortTagClosed = false;
+		m_printWriter.print(StringUtils.repeat(getIndent(), m_tagStack.size() - 1));
+		m_printWriter.print("<" + tagName);
+	}
 
-  /**
-   * Ends currently open tag. Calling endTag() will results writing "&gt;" into underlying
-   * {@link PrintWriter}. After calling this method its able to write tag value but not adding
-   * attributes.
-   */
-  public void endTag() {
-    checkOpen();
-    TagInfo currentTag = peek();
-    if (isState(currentTag, TAG_STATE_BEGIN_NOT_ENDED)) {
-      m_printWriter.print(">");
-      currentTag.setState(TAG_STATE_OPEN);
-    }
-  }
+	/**
+	 * Ends currently open tag. Calling endTag() will results writing "&gt;" into underlying
+	 * {@link PrintWriter}. After calling this method its able to write tag value but not adding
+	 * attributes.
+	 */
+	public void endTag() {
+		checkOpen();
+		TagInfo currentTag = peek();
+		if (isState(currentTag, TAG_STATE_BEGIN_NOT_ENDED)) {
+			m_printWriter.print(">");
+			currentTag.setState(TAG_STATE_OPEN);
+		}
+	}
 
-  /**
-   * Adds an attribute to tag with given <code>attrName</code> and <code>attrValue</code>. Calling
-   * this method results writing " attr="value"" into underlying {@link PrintWriter}. After this
-   * operation is possible to add another attribute or end tag, all other operations prohibited.
-   *
-   * Performs escaping the <code>attrValue</code> before writing.
-   *
-   * @param attrName
-   *          the attribute name to add. Cannot be empty or <code>null</code>.
-   * @param attrValue
-   *          the attribute value. Can be <code>null</code>, in which case the "" added.
-   */
-  public void writeAttribute(String attrName, String attrValue) {
-    checkOpen();
-    Assert.isLegal(!StringUtils.isEmpty(attrName), "Can't add attribute with empty name.");
-    TagInfo currentTag = peek();
-    if (!isState(currentTag, TAG_STATE_BEGIN_NOT_ENDED)) {
-      throw new IllegalStateException("Tag should be open for attribute adding.");
-    }
-    if (attrValue == null) {
-      attrValue = "";
-    }
-    attrValue = StringEscapeUtils.escapeXml(attrValue);
-    {
-      StringBuilder escaped = new StringBuilder();
-      for (int i = 0; i < attrValue.length(); i++) {
-        char c = attrValue.charAt(i);
-        if (c < 0x20) {
-          escaped.append("&#");
-          escaped.append((int) c);
-          escaped.append(";");
-        } else {
-          escaped.append(c);
-        }
-      }
-      attrValue = escaped.toString();
-    }
-    m_printWriter.print(" " + attrName + "=\"" + (attrValue == null ? "" : attrValue) + "\"");
-  }
+	/**
+	 * Adds an attribute to tag with given <code>attrName</code> and <code>attrValue</code>. Calling
+	 * this method results writing " attr="value"" into underlying {@link PrintWriter}. After this
+	 * operation is possible to add another attribute or end tag, all other operations prohibited.
+	 *
+	 * Performs escaping the <code>attrValue</code> before writing.
+	 *
+	 * @param attrName
+	 *          the attribute name to add. Cannot be empty or <code>null</code>.
+	 * @param attrValue
+	 *          the attribute value. Can be <code>null</code>, in which case the "" added.
+	 */
+	public void writeAttribute(String attrName, String attrValue) {
+		checkOpen();
+		Assert.isLegal(!StringUtils.isEmpty(attrName), "Can't add attribute with empty name.");
+		TagInfo currentTag = peek();
+		if (!isState(currentTag, TAG_STATE_BEGIN_NOT_ENDED)) {
+			throw new IllegalStateException("Tag should be open for attribute adding.");
+		}
+		if (attrValue == null) {
+			attrValue = "";
+		}
+		attrValue = StringEscapeUtils.escapeXml(attrValue);
+		{
+			StringBuilder escaped = new StringBuilder();
+			for (int i = 0; i < attrValue.length(); i++) {
+				char c = attrValue.charAt(i);
+				if (c < 0x20) {
+					escaped.append("&#");
+					escaped.append((int) c);
+					escaped.append(";");
+				} else {
+					escaped.append(c);
+				}
+			}
+			attrValue = escaped.toString();
+		}
+		m_printWriter.print(" " + attrName + "=\"" + (attrValue == null ? "" : attrValue) + "\"");
+	}
 
-  /**
-   * Open tag with given <code>tagName</code>. Calling openTag("tag1") will results writing
-   * "&lt;tag1&gt;" into underlying {@link PrintWriter}. After calling this method its able to write
-   * tag value but not adding attributes.
-   *
-   * @param tagName
-   *          the tag name with which tag would be made.
-   */
-  public void openTag(String tagName) {
-    beginTag(tagName);
-    endTag();
-  }
+	/**
+	 * Open tag with given <code>tagName</code>. Calling openTag("tag1") will results writing
+	 * "&lt;tag1&gt;" into underlying {@link PrintWriter}. After calling this method its able to write
+	 * tag value but not adding attributes.
+	 *
+	 * @param tagName
+	 *          the tag name with which tag would be made.
+	 */
+	public void openTag(String tagName) {
+		beginTag(tagName);
+		endTag();
+	}
 
-  /**
-   * Closes previously open tag. Calling closeTag() when "tag1" is open will results writing
-   * "&lt;/tag1&gt;" into underlying {@link PrintWriter}. If tag was open for adding attribute then
-   * closing this tag causes write "/&gt;".After this operation is possibly to open new tag.
-   */
-  public void closeTag() {
-    checkOpen();
-    TagInfo currentTag = peek();
-    boolean validState = false;
-    if (isState(currentTag, TAG_STATE_BEGIN_NOT_ENDED)) {
-      m_printWriter.println("/>");
-      m_isShortTagClosed = true;
-      validState = true;
-    } else if (hasState(currentTag, TAG_STATE_OPEN)) {
-      if (hasState(currentTag, TAG_STATE_HAS_CHILDRED)) {
-        if (hasState(currentTag, TAG_STATE_HAS_VALUE)) {
-          m_printWriter.println();
-        }
-        m_printWriter.print(StringUtils.repeat(getIndent(), m_tagStack.size() - 1));
-      }
-      m_printWriter.println("</" + currentTag.getName() + ">");
-      validState = true;
-    } else if (hasState(currentTag, TAG_STATE_CDATA_OPEN)) {
-      m_printWriter.println("</" + currentTag.getName() + ">");
-      validState = true;
-    }
-    if (!validState) {
-      close();
-      throw new IllegalStateException("Can't do close operation when currently no open tag.");
-    }
-    m_tagStack.pop();
-  }
+	/**
+	 * Closes previously open tag. Calling closeTag() when "tag1" is open will results writing
+	 * "&lt;/tag1&gt;" into underlying {@link PrintWriter}. If tag was open for adding attribute then
+	 * closing this tag causes write "/&gt;".After this operation is possibly to open new tag.
+	 */
+	public void closeTag() {
+		checkOpen();
+		TagInfo currentTag = peek();
+		boolean validState = false;
+		if (isState(currentTag, TAG_STATE_BEGIN_NOT_ENDED)) {
+			m_printWriter.println("/>");
+			m_isShortTagClosed = true;
+			validState = true;
+		} else if (hasState(currentTag, TAG_STATE_OPEN)) {
+			if (hasState(currentTag, TAG_STATE_HAS_CHILDRED)) {
+				if (hasState(currentTag, TAG_STATE_HAS_VALUE)) {
+					m_printWriter.println();
+				}
+				m_printWriter.print(StringUtils.repeat(getIndent(), m_tagStack.size() - 1));
+			}
+			m_printWriter.println("</" + currentTag.getName() + ">");
+			validState = true;
+		} else if (hasState(currentTag, TAG_STATE_CDATA_OPEN)) {
+			m_printWriter.println("</" + currentTag.getName() + ">");
+			validState = true;
+		}
+		if (!validState) {
+			close();
+			throw new IllegalStateException("Can't do close operation when currently no open tag.");
+		}
+		m_tagStack.pop();
+	}
 
-  /**
-   * Writes tag value into underlying {@link PrintWriter}. Tag should be open (but not for adding
-   * attributes).
-   *
-   * @param tagValue
-   *          the {@link String} of tag value. Can be <code>null</code>, in which case the ""
-   *          written.
-   */
-  public void write(String tagValue) {
-    checkOpen();
-    TagInfo currentTag = peek();
-    if (hasState(currentTag, TAG_STATE_OPEN)) {
-      if (hasState(currentTag, TAG_STATE_HAS_VALUE)) {
-        throw new IllegalStateException("Current tag already have the value written.");
-      }
-      String valueToWrite = tagValue != null ? tagValue : "";
-      m_printWriter.print(StringEscapeUtils.escapeXml(valueToWrite));
-      addState(currentTag, TAG_STATE_HAS_VALUE);
-    } else {
-      throw new IllegalStateException("Can't write tag value when currently no tag open for writing tag value.");
-    }
-  }
+	/**
+	 * Writes tag value into underlying {@link PrintWriter}. Tag should be open (but not for adding
+	 * attributes).
+	 *
+	 * @param tagValue
+	 *          the {@link String} of tag value. Can be <code>null</code>, in which case the ""
+	 *          written.
+	 */
+	public void write(String tagValue) {
+		checkOpen();
+		TagInfo currentTag = peek();
+		if (hasState(currentTag, TAG_STATE_OPEN)) {
+			if (hasState(currentTag, TAG_STATE_HAS_VALUE)) {
+				throw new IllegalStateException("Current tag already have the value written.");
+			}
+			String valueToWrite = tagValue != null ? tagValue : "";
+			m_printWriter.print(StringEscapeUtils.escapeXml(valueToWrite));
+			addState(currentTag, TAG_STATE_HAS_VALUE);
+		} else {
+			throw new IllegalStateException("Can't write tag value when currently no tag open for writing tag value.");
+		}
+	}
 
-  /**
-   * Opens tag, writes tag value and closes the tag.
-   *
-   * @param tagName
-   *          the tag name with which tag would be made.
-   * @param tagValue
-   *          the {@link String} of tag value. Can be <code>null</code>, in which case the ""
-   *          written.
-   */
-  public void write(String tagName, String tagValue) {
-    openTag(tagName);
-    write(tagValue);
-    closeTag();
-  }
+	/**
+	 * Opens tag, writes tag value and closes the tag.
+	 *
+	 * @param tagName
+	 *          the tag name with which tag would be made.
+	 * @param tagValue
+	 *          the {@link String} of tag value. Can be <code>null</code>, in which case the ""
+	 *          written.
+	 */
+	public void write(String tagName, String tagValue) {
+		openTag(tagName);
+		write(tagValue);
+		closeTag();
+	}
 
-  /**
-   * Opens CDATA section and returns the {@link OutputStream} to write data to it. The user
-   * responsible to close the stream before any other operations with {@link XmlWriter}. Closing
-   * stream automatically closes CDATA section.
-   *
-   * @return the {@link OutputStream} to write CDATA values.
-   */
-  public OutputStream streamCDATA() {
-    checkOpen();
-    final TagInfo currentTag = peek();
-    if (hasState(currentTag, TAG_STATE_OPEN)) {
-      if (hasState(currentTag, TAG_STATE_HAS_VALUE)) {
-        throw new IllegalStateException("Current tag already have the value written.");
-      }
-      m_printWriter.println("<![CDATA[");
-      addState(currentTag, TAG_STATE_CDATA_OPEN);
-      return new OutputStream() {
-        @Override
-        public void write(int b) throws IOException {
-          m_printWriter.print((char) b);
-        }
+	/**
+	 * Opens CDATA section and returns the {@link OutputStream} to write data to it. The user
+	 * responsible to close the stream before any other operations with {@link XmlWriter}. Closing
+	 * stream automatically closes CDATA section.
+	 *
+	 * @return the {@link OutputStream} to write CDATA values.
+	 */
+	public OutputStream streamCDATA() {
+		checkOpen();
+		final TagInfo currentTag = peek();
+		if (hasState(currentTag, TAG_STATE_OPEN)) {
+			if (hasState(currentTag, TAG_STATE_HAS_VALUE)) {
+				throw new IllegalStateException("Current tag already have the value written.");
+			}
+			m_printWriter.println("<![CDATA[");
+			addState(currentTag, TAG_STATE_CDATA_OPEN);
+			return new OutputStream() {
+				@Override
+				public void write(int b) throws IOException {
+					m_printWriter.print((char) b);
+				}
 
-        @Override
-        public void close() throws IOException {
-          m_printWriter.print("]]>");
-          removeState(currentTag, TAG_STATE_CDATA_OPEN);
-          addState(currentTag, TAG_STATE_HAS_VALUE);
-        }
-      };
-    }
-    throw new IllegalStateException("No open tag to write CDATA contents.");
-  }
+				@Override
+				public void close() throws IOException {
+					m_printWriter.print("]]>");
+					removeState(currentTag, TAG_STATE_CDATA_OPEN);
+					addState(currentTag, TAG_STATE_HAS_VALUE);
+				}
+			};
+		}
+		throw new IllegalStateException("No open tag to write CDATA contents.");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  //  Close operation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Perform finish of writing xml. Flushes and closed underlying {@link PrintWriter}. No more any
-   * other operations possible.
-   */
-  public void close() {
-    m_printWriter.close();
-    m_closed = true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	//  Close operation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Perform finish of writing xml. Flushes and closed underlying {@link PrintWriter}. No more any
+	 * other operations possible.
+	 */
+	public void close() {
+		m_printWriter.close();
+		m_closed = true;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Checks the closed state of {@link XmlWriter} and raises {@link IllegalStateException} if it
-   * closed.
-   */
-  private void checkOpen() {
-    if (m_closed) {
-      throw new IllegalStateException("XMLWriter is closed.");
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Checks the closed state of {@link XmlWriter} and raises {@link IllegalStateException} if it
+	 * closed.
+	 */
+	private void checkOpen() {
+		if (m_closed) {
+			throw new IllegalStateException("XMLWriter is closed.");
+		}
+	}
 
-  /**
-   * Check the stack for any open tag.
-   *
-   * @return currently open tag or throws assertion exception.
-   */
-  private TagInfo peek() {
-    Assert.isTrue(!m_tagStack.empty(), "No any open tag.");
-    return m_tagStack.peek();
-  }
+	/**
+	 * Check the stack for any open tag.
+	 *
+	 * @return currently open tag or throws assertion exception.
+	 */
+	private TagInfo peek() {
+		Assert.isTrue(!m_tagStack.empty(), "No any open tag.");
+		return m_tagStack.peek();
+	}
 
-  /**
-   * @return <code>true</code> if given tag has given state.
-   */
-  private boolean hasState(TagInfo tag, int stateMask) {
-    return (tag.getState() & stateMask) != 0;
-  }
+	/**
+	 * @return <code>true</code> if given tag has given state.
+	 */
+	private boolean hasState(TagInfo tag, int stateMask) {
+		return (tag.getState() & stateMask) != 0;
+	}
 
-  /**
-   * Adds given state into state of given tag.
-   */
-  private void addState(TagInfo tag, int stateMask) {
-    tag.setState(tag.getState() | stateMask);
-  }
+	/**
+	 * Adds given state into state of given tag.
+	 */
+	private void addState(TagInfo tag, int stateMask) {
+		tag.setState(tag.getState() | stateMask);
+	}
 
-  /**
-   * Removes given state from given tag state.
-   */
-  private void removeState(TagInfo tag, int stateMask) {
-    tag.setState(tag.getState() & ~stateMask);
-  }
+	/**
+	 * Removes given state from given tag state.
+	 */
+	private void removeState(TagInfo tag, int stateMask) {
+		tag.setState(tag.getState() & ~stateMask);
+	}
 
-  /**
-   * @return <code>true</code> if the given tag is exactly in given state.
-   */
-  private boolean isState(TagInfo tag, int stateMask) {
-    return tag.getState() == stateMask;
-  }
+	/**
+	 * @return <code>true</code> if the given tag is exactly in given state.
+	 */
+	private boolean isState(TagInfo tag, int stateMask) {
+		return tag.getState() == stateMask;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public final String getIndent() {
-    return m_indent;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public final String getIndent() {
+		return m_indent;
+	}
 
-  public final void setIndent(String indent) {
-    m_indent = indent;
-  }
+	public final void setIndent(String indent) {
+		m_indent = indent;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Inner class
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final class TagInfo {
-    private final String m_name;
-    private int m_state;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Inner class
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final class TagInfo {
+		private final String m_name;
+		private int m_state;
 
-    public TagInfo(String tagName, int state) {
-      m_name = tagName;
-      m_state = state;
-    }
+		public TagInfo(String tagName, int state) {
+			m_name = tagName;
+			m_state = state;
+		}
 
-    public final int getState() {
-      return m_state;
-    }
+		public final int getState() {
+			return m_state;
+		}
 
-    public final void setState(int tagState) {
-      m_state = tagState;
-    }
+		public final void setState(int tagState) {
+			m_state = tagState;
+		}
 
-    public final String getName() {
-      return m_name;
-    }
-  }
+		public final String getName() {
+			return m_name;
+		}
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/asm/ToBytesClassAdapter.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/asm/ToBytesClassAdapter.java
index feba0e5b9..e6f47fff2 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/asm/ToBytesClassAdapter.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/asm/ToBytesClassAdapter.java
@@ -20,25 +20,25 @@
  * @author scheglov_ke
  */
 public class ToBytesClassAdapter extends ClassVisitor implements Opcodes {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ToBytesClassAdapter() {
-    this(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ToBytesClassAdapter() {
+		this(0);
+	}
 
-  public ToBytesClassAdapter(int flags) {
-    super(Opcodes.ASM9, new ClassWriter(flags));
-  }
+	public ToBytesClassAdapter(int flags) {
+		super(Opcodes.ASM9, new ClassWriter(flags));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public byte[] toByteArray() {
-    return ((ClassWriter) cv).toByteArray();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public byte[] toByteArray() {
+		return ((ClassWriter) cv).toByteArray();
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/base64/Base64.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/base64/Base64.java
index 4edc4ffc5..16b031fac 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/base64/Base64.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/base64/Base64.java
@@ -148,2618 +148,2618 @@
  * @version 2.3.7
  */
 public class Base64 {
-/* ********  P U B L I C   F I E L D S  ******** */
-  /** No options specified. Value is zero. */
-  public final static int NO_OPTIONS = 0;
-  /** Specify encoding in first bit. Value is one. */
-  public final static int ENCODE = 1;
-  /** Specify decoding in first bit. Value is zero. */
-  public final static int DECODE = 0;
-  /** Specify that data should be gzip-compressed in second bit. Value is two. */
-  public final static int GZIP = 2;
-  /** Specify that gzipped data should <em>not</em> be automatically gunzipped. */
-  public final static int DONT_GUNZIP = 4;
-  /** Do break lines when encoding. Value is 8. */
-  public final static int DO_BREAK_LINES = 8;
-  /**
-   * Encode using Base64-like encoding that is URL- and Filename-safe as described in Section 4 of
-   * RFC3548: <a
-   * href="http://www.faqs.org/rfcs/rfc3548.html">http://www.faqs.org/rfcs/rfc3548.html</a>. It is
-   * important to note that data encoded this way is <em>not</em> officially valid Base64, or at the
-   * very least should not be called Base64 without also specifying that is was encoded using the
-   * URL- and Filename-safe dialect.
-   */
-  public final static int URL_SAFE = 16;
-  /**
-   * Encode using the special "ordered" dialect of Base64 described here: <a
-   * href="http://www.faqs.org/qa/rfcc-1940.html">http://www.faqs.org/qa/rfcc-1940.html</a>.
-   */
-  public final static int ORDERED = 32;
-/* ********  P R I V A T E   F I E L D S  ******** */
-  /** Maximum line length (76) of Base64 output. */
-  private final static int MAX_LINE_LENGTH = 76;
-  /** The equals sign (=) as a byte. */
-  private final static byte EQUALS_SIGN = (byte) '=';
-  /** The new line character (\n) as a byte. */
-  private final static byte NEW_LINE = (byte) '\n';
-  /** Preferred encoding. */
-  private final static String PREFERRED_ENCODING = "US-ASCII";
-  private final static byte WHITE_SPACE_ENC = -5; // Indicates white space in encoding
-  private final static byte EQUALS_SIGN_ENC = -1; // Indicates equals sign in encoding
-/* ********  S T A N D A R D   B A S E 6 4   A L P H A B E T  ******** */
-  /** The 64 valid Base64 values. */
-  /* Host platform me be something funny like EBCDIC, so we hardcode these values. */
-  private final static byte[] _STANDARD_ALPHABET = {
-      (byte) 'A',
-      (byte) 'B',
-      (byte) 'C',
-      (byte) 'D',
-      (byte) 'E',
-      (byte) 'F',
-      (byte) 'G',
-      (byte) 'H',
-      (byte) 'I',
-      (byte) 'J',
-      (byte) 'K',
-      (byte) 'L',
-      (byte) 'M',
-      (byte) 'N',
-      (byte) 'O',
-      (byte) 'P',
-      (byte) 'Q',
-      (byte) 'R',
-      (byte) 'S',
-      (byte) 'T',
-      (byte) 'U',
-      (byte) 'V',
-      (byte) 'W',
-      (byte) 'X',
-      (byte) 'Y',
-      (byte) 'Z',
-      (byte) 'a',
-      (byte) 'b',
-      (byte) 'c',
-      (byte) 'd',
-      (byte) 'e',
-      (byte) 'f',
-      (byte) 'g',
-      (byte) 'h',
-      (byte) 'i',
-      (byte) 'j',
-      (byte) 'k',
-      (byte) 'l',
-      (byte) 'm',
-      (byte) 'n',
-      (byte) 'o',
-      (byte) 'p',
-      (byte) 'q',
-      (byte) 'r',
-      (byte) 's',
-      (byte) 't',
-      (byte) 'u',
-      (byte) 'v',
-      (byte) 'w',
-      (byte) 'x',
-      (byte) 'y',
-      (byte) 'z',
-      (byte) '0',
-      (byte) '1',
-      (byte) '2',
-      (byte) '3',
-      (byte) '4',
-      (byte) '5',
-      (byte) '6',
-      (byte) '7',
-      (byte) '8',
-      (byte) '9',
-      (byte) '+',
-      (byte) '/'};
-  /**
-   * Translates a Base64 value to either its 6-bit reconstruction value or a negative number
-   * indicating some other meaning.
-   **/
-  private final static byte[] _STANDARD_DECODABET = {-9, -9, -9, -9, -9, -9, -9, -9, -9, // Decimal  0 -  8
-      -5,
-      -5, // Whitespace: Tab and Linefeed
-      -9,
-      -9, // Decimal 11 - 12
-      -5, // Whitespace: Carriage Return
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9, // Decimal 14 - 26
-      -9,
-      -9,
-      -9,
-      -9,
-      -9, // Decimal 27 - 31
-      -5, // Whitespace: Space
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9, // Decimal 33 - 42
-      62, // Plus sign at decimal 43
-      -9,
-      -9,
-      -9, // Decimal 44 - 46
-      63, // Slash at decimal 47
-      52,
-      53,
-      54,
-      55,
-      56,
-      57,
-      58,
-      59,
-      60,
-      61, // Numbers zero through nine
-      -9,
-      -9,
-      -9, // Decimal 58 - 60
-      -1, // Equals sign at decimal 61
-      -9,
-      -9,
-      -9, // Decimal 62 - 64
-      0,
-      1,
-      2,
-      3,
-      4,
-      5,
-      6,
-      7,
-      8,
-      9,
-      10,
-      11,
-      12,
-      13, // Letters 'A' through 'N'
-      14,
-      15,
-      16,
-      17,
-      18,
-      19,
-      20,
-      21,
-      22,
-      23,
-      24,
-      25, // Letters 'O' through 'Z'
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9, // Decimal 91 - 96
-      26,
-      27,
-      28,
-      29,
-      30,
-      31,
-      32,
-      33,
-      34,
-      35,
-      36,
-      37,
-      38, // Letters 'a' through 'm'
-      39,
-      40,
-      41,
-      42,
-      43,
-      44,
-      45,
-      46,
-      47,
-      48,
-      49,
-      50,
-      51, // Letters 'n' through 'z'
-      -9,
-      -9,
-      -9,
-      -9,
-      -9 // Decimal 123 - 127
-      ,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9, // Decimal 128 - 139
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9, // Decimal 140 - 152
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9, // Decimal 153 - 165
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9, // Decimal 166 - 178
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9, // Decimal 179 - 191
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9, // Decimal 192 - 204
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9, // Decimal 205 - 217
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9, // Decimal 218 - 230
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9, // Decimal 231 - 243
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9 // Decimal 244 - 255
-      };
-/* ********  U R L   S A F E   B A S E 6 4   A L P H A B E T  ******** */
-  /**
-   * Used in the URL- and Filename-safe dialect described in Section 4 of RFC3548: <a
-   * href="http://www.faqs.org/rfcs/rfc3548.html">http://www.faqs.org/rfcs/rfc3548.html</a>. Notice
-   * that the last two bytes become "hyphen" and "underscore" instead of "plus" and "slash."
-   */
-  private final static byte[] _URL_SAFE_ALPHABET = {
-      (byte) 'A',
-      (byte) 'B',
-      (byte) 'C',
-      (byte) 'D',
-      (byte) 'E',
-      (byte) 'F',
-      (byte) 'G',
-      (byte) 'H',
-      (byte) 'I',
-      (byte) 'J',
-      (byte) 'K',
-      (byte) 'L',
-      (byte) 'M',
-      (byte) 'N',
-      (byte) 'O',
-      (byte) 'P',
-      (byte) 'Q',
-      (byte) 'R',
-      (byte) 'S',
-      (byte) 'T',
-      (byte) 'U',
-      (byte) 'V',
-      (byte) 'W',
-      (byte) 'X',
-      (byte) 'Y',
-      (byte) 'Z',
-      (byte) 'a',
-      (byte) 'b',
-      (byte) 'c',
-      (byte) 'd',
-      (byte) 'e',
-      (byte) 'f',
-      (byte) 'g',
-      (byte) 'h',
-      (byte) 'i',
-      (byte) 'j',
-      (byte) 'k',
-      (byte) 'l',
-      (byte) 'm',
-      (byte) 'n',
-      (byte) 'o',
-      (byte) 'p',
-      (byte) 'q',
-      (byte) 'r',
-      (byte) 's',
-      (byte) 't',
-      (byte) 'u',
-      (byte) 'v',
-      (byte) 'w',
-      (byte) 'x',
-      (byte) 'y',
-      (byte) 'z',
-      (byte) '0',
-      (byte) '1',
-      (byte) '2',
-      (byte) '3',
-      (byte) '4',
-      (byte) '5',
-      (byte) '6',
-      (byte) '7',
-      (byte) '8',
-      (byte) '9',
-      (byte) '-',
-      (byte) '_'};
-  /**
-   * Used in decoding URL- and Filename-safe dialects of Base64.
-   */
-  private final static byte[] _URL_SAFE_DECODABET = {-9, -9, -9, -9, -9, -9, -9, -9, -9, // Decimal  0 -  8
-      -5,
-      -5, // Whitespace: Tab and Linefeed
-      -9,
-      -9, // Decimal 11 - 12
-      -5, // Whitespace: Carriage Return
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9, // Decimal 14 - 26
-      -9,
-      -9,
-      -9,
-      -9,
-      -9, // Decimal 27 - 31
-      -5, // Whitespace: Space
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9, // Decimal 33 - 42
-      -9, // Plus sign at decimal 43
-      -9, // Decimal 44
-      62, // Minus sign at decimal 45
-      -9, // Decimal 46
-      -9, // Slash at decimal 47
-      52,
-      53,
-      54,
-      55,
-      56,
-      57,
-      58,
-      59,
-      60,
-      61, // Numbers zero through nine
-      -9,
-      -9,
-      -9, // Decimal 58 - 60
-      -1, // Equals sign at decimal 61
-      -9,
-      -9,
-      -9, // Decimal 62 - 64
-      0,
-      1,
-      2,
-      3,
-      4,
-      5,
-      6,
-      7,
-      8,
-      9,
-      10,
-      11,
-      12,
-      13, // Letters 'A' through 'N'
-      14,
-      15,
-      16,
-      17,
-      18,
-      19,
-      20,
-      21,
-      22,
-      23,
-      24,
-      25, // Letters 'O' through 'Z'
-      -9,
-      -9,
-      -9,
-      -9, // Decimal 91 - 94
-      63, // Underscore at decimal 95
-      -9, // Decimal 96
-      26,
-      27,
-      28,
-      29,
-      30,
-      31,
-      32,
-      33,
-      34,
-      35,
-      36,
-      37,
-      38, // Letters 'a' through 'm'
-      39,
-      40,
-      41,
-      42,
-      43,
-      44,
-      45,
-      46,
-      47,
-      48,
-      49,
-      50,
-      51, // Letters 'n' through 'z'
-      -9,
-      -9,
-      -9,
-      -9,
-      -9 // Decimal 123 - 127
-      ,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9, // Decimal 128 - 139
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9, // Decimal 140 - 152
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9, // Decimal 153 - 165
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9, // Decimal 166 - 178
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9, // Decimal 179 - 191
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9, // Decimal 192 - 204
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9, // Decimal 205 - 217
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9, // Decimal 218 - 230
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9, // Decimal 231 - 243
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9 // Decimal 244 - 255
-      };
-/* ********  O R D E R E D   B A S E 6 4   A L P H A B E T  ******** */
-  /**
-   * I don't get the point of this technique, but someone requested it, and it is described here: <a
-   * href="http://www.faqs.org/qa/rfcc-1940.html">http://www.faqs.org/qa/rfcc-1940.html</a>.
-   */
-  private final static byte[] _ORDERED_ALPHABET = {
-      (byte) '-',
-      (byte) '0',
-      (byte) '1',
-      (byte) '2',
-      (byte) '3',
-      (byte) '4',
-      (byte) '5',
-      (byte) '6',
-      (byte) '7',
-      (byte) '8',
-      (byte) '9',
-      (byte) 'A',
-      (byte) 'B',
-      (byte) 'C',
-      (byte) 'D',
-      (byte) 'E',
-      (byte) 'F',
-      (byte) 'G',
-      (byte) 'H',
-      (byte) 'I',
-      (byte) 'J',
-      (byte) 'K',
-      (byte) 'L',
-      (byte) 'M',
-      (byte) 'N',
-      (byte) 'O',
-      (byte) 'P',
-      (byte) 'Q',
-      (byte) 'R',
-      (byte) 'S',
-      (byte) 'T',
-      (byte) 'U',
-      (byte) 'V',
-      (byte) 'W',
-      (byte) 'X',
-      (byte) 'Y',
-      (byte) 'Z',
-      (byte) '_',
-      (byte) 'a',
-      (byte) 'b',
-      (byte) 'c',
-      (byte) 'd',
-      (byte) 'e',
-      (byte) 'f',
-      (byte) 'g',
-      (byte) 'h',
-      (byte) 'i',
-      (byte) 'j',
-      (byte) 'k',
-      (byte) 'l',
-      (byte) 'm',
-      (byte) 'n',
-      (byte) 'o',
-      (byte) 'p',
-      (byte) 'q',
-      (byte) 'r',
-      (byte) 's',
-      (byte) 't',
-      (byte) 'u',
-      (byte) 'v',
-      (byte) 'w',
-      (byte) 'x',
-      (byte) 'y',
-      (byte) 'z'};
-  /**
-   * Used in decoding the "ordered" dialect of Base64.
-   */
-  private final static byte[] _ORDERED_DECODABET = {-9, -9, -9, -9, -9, -9, -9, -9, -9, // Decimal  0 -  8
-      -5,
-      -5, // Whitespace: Tab and Linefeed
-      -9,
-      -9, // Decimal 11 - 12
-      -5, // Whitespace: Carriage Return
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9, // Decimal 14 - 26
-      -9,
-      -9,
-      -9,
-      -9,
-      -9, // Decimal 27 - 31
-      -5, // Whitespace: Space
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9, // Decimal 33 - 42
-      -9, // Plus sign at decimal 43
-      -9, // Decimal 44
-      0, // Minus sign at decimal 45
-      -9, // Decimal 46
-      -9, // Slash at decimal 47
-      1,
-      2,
-      3,
-      4,
-      5,
-      6,
-      7,
-      8,
-      9,
-      10, // Numbers zero through nine
-      -9,
-      -9,
-      -9, // Decimal 58 - 60
-      -1, // Equals sign at decimal 61
-      -9,
-      -9,
-      -9, // Decimal 62 - 64
-      11,
-      12,
-      13,
-      14,
-      15,
-      16,
-      17,
-      18,
-      19,
-      20,
-      21,
-      22,
-      23, // Letters 'A' through 'M'
-      24,
-      25,
-      26,
-      27,
-      28,
-      29,
-      30,
-      31,
-      32,
-      33,
-      34,
-      35,
-      36, // Letters 'N' through 'Z'
-      -9,
-      -9,
-      -9,
-      -9, // Decimal 91 - 94
-      37, // Underscore at decimal 95
-      -9, // Decimal 96
-      38,
-      39,
-      40,
-      41,
-      42,
-      43,
-      44,
-      45,
-      46,
-      47,
-      48,
-      49,
-      50, // Letters 'a' through 'm'
-      51,
-      52,
-      53,
-      54,
-      55,
-      56,
-      57,
-      58,
-      59,
-      60,
-      61,
-      62,
-      63, // Letters 'n' through 'z'
-      -9,
-      -9,
-      -9,
-      -9,
-      -9 // Decimal 123 - 127
-      ,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9, // Decimal 128 - 139
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9, // Decimal 140 - 152
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9, // Decimal 153 - 165
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9, // Decimal 166 - 178
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9, // Decimal 179 - 191
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9, // Decimal 192 - 204
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9, // Decimal 205 - 217
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9, // Decimal 218 - 230
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9, // Decimal 231 - 243
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9,
-      -9 // Decimal 244 - 255
-      };
+	/* ********  P U B L I C   F I E L D S  ******** */
+	/** No options specified. Value is zero. */
+	public final static int NO_OPTIONS = 0;
+	/** Specify encoding in first bit. Value is one. */
+	public final static int ENCODE = 1;
+	/** Specify decoding in first bit. Value is zero. */
+	public final static int DECODE = 0;
+	/** Specify that data should be gzip-compressed in second bit. Value is two. */
+	public final static int GZIP = 2;
+	/** Specify that gzipped data should <em>not</em> be automatically gunzipped. */
+	public final static int DONT_GUNZIP = 4;
+	/** Do break lines when encoding. Value is 8. */
+	public final static int DO_BREAK_LINES = 8;
+	/**
+	 * Encode using Base64-like encoding that is URL- and Filename-safe as described in Section 4 of
+	 * RFC3548: <a
+	 * href="http://www.faqs.org/rfcs/rfc3548.html">http://www.faqs.org/rfcs/rfc3548.html</a>. It is
+	 * important to note that data encoded this way is <em>not</em> officially valid Base64, or at the
+	 * very least should not be called Base64 without also specifying that is was encoded using the
+	 * URL- and Filename-safe dialect.
+	 */
+	public final static int URL_SAFE = 16;
+	/**
+	 * Encode using the special "ordered" dialect of Base64 described here: <a
+	 * href="http://www.faqs.org/qa/rfcc-1940.html">http://www.faqs.org/qa/rfcc-1940.html</a>.
+	 */
+	public final static int ORDERED = 32;
+	/* ********  P R I V A T E   F I E L D S  ******** */
+	/** Maximum line length (76) of Base64 output. */
+	private final static int MAX_LINE_LENGTH = 76;
+	/** The equals sign (=) as a byte. */
+	private final static byte EQUALS_SIGN = (byte) '=';
+	/** The new line character (\n) as a byte. */
+	private final static byte NEW_LINE = (byte) '\n';
+	/** Preferred encoding. */
+	private final static String PREFERRED_ENCODING = "US-ASCII";
+	private final static byte WHITE_SPACE_ENC = -5; // Indicates white space in encoding
+	private final static byte EQUALS_SIGN_ENC = -1; // Indicates equals sign in encoding
+	/* ********  S T A N D A R D   B A S E 6 4   A L P H A B E T  ******** */
+	/** The 64 valid Base64 values. */
+	/* Host platform me be something funny like EBCDIC, so we hardcode these values. */
+	private final static byte[] _STANDARD_ALPHABET = {
+			(byte) 'A',
+			(byte) 'B',
+			(byte) 'C',
+			(byte) 'D',
+			(byte) 'E',
+			(byte) 'F',
+			(byte) 'G',
+			(byte) 'H',
+			(byte) 'I',
+			(byte) 'J',
+			(byte) 'K',
+			(byte) 'L',
+			(byte) 'M',
+			(byte) 'N',
+			(byte) 'O',
+			(byte) 'P',
+			(byte) 'Q',
+			(byte) 'R',
+			(byte) 'S',
+			(byte) 'T',
+			(byte) 'U',
+			(byte) 'V',
+			(byte) 'W',
+			(byte) 'X',
+			(byte) 'Y',
+			(byte) 'Z',
+			(byte) 'a',
+			(byte) 'b',
+			(byte) 'c',
+			(byte) 'd',
+			(byte) 'e',
+			(byte) 'f',
+			(byte) 'g',
+			(byte) 'h',
+			(byte) 'i',
+			(byte) 'j',
+			(byte) 'k',
+			(byte) 'l',
+			(byte) 'm',
+			(byte) 'n',
+			(byte) 'o',
+			(byte) 'p',
+			(byte) 'q',
+			(byte) 'r',
+			(byte) 's',
+			(byte) 't',
+			(byte) 'u',
+			(byte) 'v',
+			(byte) 'w',
+			(byte) 'x',
+			(byte) 'y',
+			(byte) 'z',
+			(byte) '0',
+			(byte) '1',
+			(byte) '2',
+			(byte) '3',
+			(byte) '4',
+			(byte) '5',
+			(byte) '6',
+			(byte) '7',
+			(byte) '8',
+			(byte) '9',
+			(byte) '+',
+			(byte) '/'};
+	/**
+	 * Translates a Base64 value to either its 6-bit reconstruction value or a negative number
+	 * indicating some other meaning.
+	 **/
+	private final static byte[] _STANDARD_DECODABET = {-9, -9, -9, -9, -9, -9, -9, -9, -9, // Decimal  0 -  8
+			-5,
+			-5, // Whitespace: Tab and Linefeed
+			-9,
+			-9, // Decimal 11 - 12
+			-5, // Whitespace: Carriage Return
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9, // Decimal 14 - 26
+			-9,
+			-9,
+			-9,
+			-9,
+			-9, // Decimal 27 - 31
+			-5, // Whitespace: Space
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9, // Decimal 33 - 42
+			62, // Plus sign at decimal 43
+			-9,
+			-9,
+			-9, // Decimal 44 - 46
+			63, // Slash at decimal 47
+			52,
+			53,
+			54,
+			55,
+			56,
+			57,
+			58,
+			59,
+			60,
+			61, // Numbers zero through nine
+			-9,
+			-9,
+			-9, // Decimal 58 - 60
+			-1, // Equals sign at decimal 61
+			-9,
+			-9,
+			-9, // Decimal 62 - 64
+			0,
+			1,
+			2,
+			3,
+			4,
+			5,
+			6,
+			7,
+			8,
+			9,
+			10,
+			11,
+			12,
+			13, // Letters 'A' through 'N'
+			14,
+			15,
+			16,
+			17,
+			18,
+			19,
+			20,
+			21,
+			22,
+			23,
+			24,
+			25, // Letters 'O' through 'Z'
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9, // Decimal 91 - 96
+			26,
+			27,
+			28,
+			29,
+			30,
+			31,
+			32,
+			33,
+			34,
+			35,
+			36,
+			37,
+			38, // Letters 'a' through 'm'
+			39,
+			40,
+			41,
+			42,
+			43,
+			44,
+			45,
+			46,
+			47,
+			48,
+			49,
+			50,
+			51, // Letters 'n' through 'z'
+			-9,
+			-9,
+			-9,
+			-9,
+			-9 // Decimal 123 - 127
+			,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9, // Decimal 128 - 139
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9, // Decimal 140 - 152
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9, // Decimal 153 - 165
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9, // Decimal 166 - 178
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9, // Decimal 179 - 191
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9, // Decimal 192 - 204
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9, // Decimal 205 - 217
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9, // Decimal 218 - 230
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9, // Decimal 231 - 243
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9 // Decimal 244 - 255
+	};
+	/* ********  U R L   S A F E   B A S E 6 4   A L P H A B E T  ******** */
+	/**
+	 * Used in the URL- and Filename-safe dialect described in Section 4 of RFC3548: <a
+	 * href="http://www.faqs.org/rfcs/rfc3548.html">http://www.faqs.org/rfcs/rfc3548.html</a>. Notice
+	 * that the last two bytes become "hyphen" and "underscore" instead of "plus" and "slash."
+	 */
+	private final static byte[] _URL_SAFE_ALPHABET = {
+			(byte) 'A',
+			(byte) 'B',
+			(byte) 'C',
+			(byte) 'D',
+			(byte) 'E',
+			(byte) 'F',
+			(byte) 'G',
+			(byte) 'H',
+			(byte) 'I',
+			(byte) 'J',
+			(byte) 'K',
+			(byte) 'L',
+			(byte) 'M',
+			(byte) 'N',
+			(byte) 'O',
+			(byte) 'P',
+			(byte) 'Q',
+			(byte) 'R',
+			(byte) 'S',
+			(byte) 'T',
+			(byte) 'U',
+			(byte) 'V',
+			(byte) 'W',
+			(byte) 'X',
+			(byte) 'Y',
+			(byte) 'Z',
+			(byte) 'a',
+			(byte) 'b',
+			(byte) 'c',
+			(byte) 'd',
+			(byte) 'e',
+			(byte) 'f',
+			(byte) 'g',
+			(byte) 'h',
+			(byte) 'i',
+			(byte) 'j',
+			(byte) 'k',
+			(byte) 'l',
+			(byte) 'm',
+			(byte) 'n',
+			(byte) 'o',
+			(byte) 'p',
+			(byte) 'q',
+			(byte) 'r',
+			(byte) 's',
+			(byte) 't',
+			(byte) 'u',
+			(byte) 'v',
+			(byte) 'w',
+			(byte) 'x',
+			(byte) 'y',
+			(byte) 'z',
+			(byte) '0',
+			(byte) '1',
+			(byte) '2',
+			(byte) '3',
+			(byte) '4',
+			(byte) '5',
+			(byte) '6',
+			(byte) '7',
+			(byte) '8',
+			(byte) '9',
+			(byte) '-',
+			(byte) '_'};
+	/**
+	 * Used in decoding URL- and Filename-safe dialects of Base64.
+	 */
+	private final static byte[] _URL_SAFE_DECODABET = {-9, -9, -9, -9, -9, -9, -9, -9, -9, // Decimal  0 -  8
+			-5,
+			-5, // Whitespace: Tab and Linefeed
+			-9,
+			-9, // Decimal 11 - 12
+			-5, // Whitespace: Carriage Return
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9, // Decimal 14 - 26
+			-9,
+			-9,
+			-9,
+			-9,
+			-9, // Decimal 27 - 31
+			-5, // Whitespace: Space
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9, // Decimal 33 - 42
+			-9, // Plus sign at decimal 43
+			-9, // Decimal 44
+			62, // Minus sign at decimal 45
+			-9, // Decimal 46
+			-9, // Slash at decimal 47
+			52,
+			53,
+			54,
+			55,
+			56,
+			57,
+			58,
+			59,
+			60,
+			61, // Numbers zero through nine
+			-9,
+			-9,
+			-9, // Decimal 58 - 60
+			-1, // Equals sign at decimal 61
+			-9,
+			-9,
+			-9, // Decimal 62 - 64
+			0,
+			1,
+			2,
+			3,
+			4,
+			5,
+			6,
+			7,
+			8,
+			9,
+			10,
+			11,
+			12,
+			13, // Letters 'A' through 'N'
+			14,
+			15,
+			16,
+			17,
+			18,
+			19,
+			20,
+			21,
+			22,
+			23,
+			24,
+			25, // Letters 'O' through 'Z'
+			-9,
+			-9,
+			-9,
+			-9, // Decimal 91 - 94
+			63, // Underscore at decimal 95
+			-9, // Decimal 96
+			26,
+			27,
+			28,
+			29,
+			30,
+			31,
+			32,
+			33,
+			34,
+			35,
+			36,
+			37,
+			38, // Letters 'a' through 'm'
+			39,
+			40,
+			41,
+			42,
+			43,
+			44,
+			45,
+			46,
+			47,
+			48,
+			49,
+			50,
+			51, // Letters 'n' through 'z'
+			-9,
+			-9,
+			-9,
+			-9,
+			-9 // Decimal 123 - 127
+			,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9, // Decimal 128 - 139
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9, // Decimal 140 - 152
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9, // Decimal 153 - 165
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9, // Decimal 166 - 178
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9, // Decimal 179 - 191
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9, // Decimal 192 - 204
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9, // Decimal 205 - 217
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9, // Decimal 218 - 230
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9, // Decimal 231 - 243
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9 // Decimal 244 - 255
+	};
+	/* ********  O R D E R E D   B A S E 6 4   A L P H A B E T  ******** */
+	/**
+	 * I don't get the point of this technique, but someone requested it, and it is described here: <a
+	 * href="http://www.faqs.org/qa/rfcc-1940.html">http://www.faqs.org/qa/rfcc-1940.html</a>.
+	 */
+	private final static byte[] _ORDERED_ALPHABET = {
+			(byte) '-',
+			(byte) '0',
+			(byte) '1',
+			(byte) '2',
+			(byte) '3',
+			(byte) '4',
+			(byte) '5',
+			(byte) '6',
+			(byte) '7',
+			(byte) '8',
+			(byte) '9',
+			(byte) 'A',
+			(byte) 'B',
+			(byte) 'C',
+			(byte) 'D',
+			(byte) 'E',
+			(byte) 'F',
+			(byte) 'G',
+			(byte) 'H',
+			(byte) 'I',
+			(byte) 'J',
+			(byte) 'K',
+			(byte) 'L',
+			(byte) 'M',
+			(byte) 'N',
+			(byte) 'O',
+			(byte) 'P',
+			(byte) 'Q',
+			(byte) 'R',
+			(byte) 'S',
+			(byte) 'T',
+			(byte) 'U',
+			(byte) 'V',
+			(byte) 'W',
+			(byte) 'X',
+			(byte) 'Y',
+			(byte) 'Z',
+			(byte) '_',
+			(byte) 'a',
+			(byte) 'b',
+			(byte) 'c',
+			(byte) 'd',
+			(byte) 'e',
+			(byte) 'f',
+			(byte) 'g',
+			(byte) 'h',
+			(byte) 'i',
+			(byte) 'j',
+			(byte) 'k',
+			(byte) 'l',
+			(byte) 'm',
+			(byte) 'n',
+			(byte) 'o',
+			(byte) 'p',
+			(byte) 'q',
+			(byte) 'r',
+			(byte) 's',
+			(byte) 't',
+			(byte) 'u',
+			(byte) 'v',
+			(byte) 'w',
+			(byte) 'x',
+			(byte) 'y',
+			(byte) 'z'};
+	/**
+	 * Used in decoding the "ordered" dialect of Base64.
+	 */
+	private final static byte[] _ORDERED_DECODABET = {-9, -9, -9, -9, -9, -9, -9, -9, -9, // Decimal  0 -  8
+			-5,
+			-5, // Whitespace: Tab and Linefeed
+			-9,
+			-9, // Decimal 11 - 12
+			-5, // Whitespace: Carriage Return
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9, // Decimal 14 - 26
+			-9,
+			-9,
+			-9,
+			-9,
+			-9, // Decimal 27 - 31
+			-5, // Whitespace: Space
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9, // Decimal 33 - 42
+			-9, // Plus sign at decimal 43
+			-9, // Decimal 44
+			0, // Minus sign at decimal 45
+			-9, // Decimal 46
+			-9, // Slash at decimal 47
+			1,
+			2,
+			3,
+			4,
+			5,
+			6,
+			7,
+			8,
+			9,
+			10, // Numbers zero through nine
+			-9,
+			-9,
+			-9, // Decimal 58 - 60
+			-1, // Equals sign at decimal 61
+			-9,
+			-9,
+			-9, // Decimal 62 - 64
+			11,
+			12,
+			13,
+			14,
+			15,
+			16,
+			17,
+			18,
+			19,
+			20,
+			21,
+			22,
+			23, // Letters 'A' through 'M'
+			24,
+			25,
+			26,
+			27,
+			28,
+			29,
+			30,
+			31,
+			32,
+			33,
+			34,
+			35,
+			36, // Letters 'N' through 'Z'
+			-9,
+			-9,
+			-9,
+			-9, // Decimal 91 - 94
+			37, // Underscore at decimal 95
+			-9, // Decimal 96
+			38,
+			39,
+			40,
+			41,
+			42,
+			43,
+			44,
+			45,
+			46,
+			47,
+			48,
+			49,
+			50, // Letters 'a' through 'm'
+			51,
+			52,
+			53,
+			54,
+			55,
+			56,
+			57,
+			58,
+			59,
+			60,
+			61,
+			62,
+			63, // Letters 'n' through 'z'
+			-9,
+			-9,
+			-9,
+			-9,
+			-9 // Decimal 123 - 127
+			,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9, // Decimal 128 - 139
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9, // Decimal 140 - 152
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9, // Decimal 153 - 165
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9, // Decimal 166 - 178
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9, // Decimal 179 - 191
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9, // Decimal 192 - 204
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9, // Decimal 205 - 217
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9, // Decimal 218 - 230
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9, // Decimal 231 - 243
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9,
+			-9 // Decimal 244 - 255
+	};
 
-/* ********  D E T E R M I N E   W H I C H   A L H A B E T  ******** */
-  /**
-   * Returns one of the _SOMETHING_ALPHABET byte arrays depending on the options specified. It's
-   * possible, though silly, to specify ORDERED <b>and</b> URLSAFE in which case one of them will be
-   * picked, though there is no guarantee as to which one will be picked.
-   */
-  private final static byte[] getAlphabet(int options) {
-    if ((options & URL_SAFE) == URL_SAFE) {
-      return _URL_SAFE_ALPHABET;
-    } else if ((options & ORDERED) == ORDERED) {
-      return _ORDERED_ALPHABET;
-    } else {
-      return _STANDARD_ALPHABET;
-    }
-  } // end getAlphabet
+	/* ********  D E T E R M I N E   W H I C H   A L H A B E T  ******** */
+	/**
+	 * Returns one of the _SOMETHING_ALPHABET byte arrays depending on the options specified. It's
+	 * possible, though silly, to specify ORDERED <b>and</b> URLSAFE in which case one of them will be
+	 * picked, though there is no guarantee as to which one will be picked.
+	 */
+	private final static byte[] getAlphabet(int options) {
+		if ((options & URL_SAFE) == URL_SAFE) {
+			return _URL_SAFE_ALPHABET;
+		} else if ((options & ORDERED) == ORDERED) {
+			return _ORDERED_ALPHABET;
+		} else {
+			return _STANDARD_ALPHABET;
+		}
+	} // end getAlphabet
 
-  /**
-   * Returns one of the _SOMETHING_DECODABET byte arrays depending on the options specified. It's
-   * possible, though silly, to specify ORDERED and URL_SAFE in which case one of them will be
-   * picked, though there is no guarantee as to which one will be picked.
-   */
-  private final static byte[] getDecodabet(int options) {
-    if ((options & URL_SAFE) == URL_SAFE) {
-      return _URL_SAFE_DECODABET;
-    } else if ((options & ORDERED) == ORDERED) {
-      return _ORDERED_DECODABET;
-    } else {
-      return _STANDARD_DECODABET;
-    }
-  } // end getAlphabet
+	/**
+	 * Returns one of the _SOMETHING_DECODABET byte arrays depending on the options specified. It's
+	 * possible, though silly, to specify ORDERED and URL_SAFE in which case one of them will be
+	 * picked, though there is no guarantee as to which one will be picked.
+	 */
+	private final static byte[] getDecodabet(int options) {
+		if ((options & URL_SAFE) == URL_SAFE) {
+			return _URL_SAFE_DECODABET;
+		} else if ((options & ORDERED) == ORDERED) {
+			return _ORDERED_DECODABET;
+		} else {
+			return _STANDARD_DECODABET;
+		}
+	} // end getAlphabet
 
-  /** Defeats instantiation. */
-  private Base64() {
-  }
+	/** Defeats instantiation. */
+	private Base64() {
+	}
 
-/* ********  E N C O D I N G   M E T H O D S  ******** */
-  /**
-   * Encodes up to the first three bytes of array <var>threeBytes</var> and returns a four-byte
-   * array in Base64 notation. The actual number of significant bytes in your array is given by
-   * <var>numSigBytes</var>. The array <var>threeBytes</var> needs only be as big as
-   * <var>numSigBytes</var>. Code can reuse a byte array by passing a four-byte array as
-   * <var>b4</var>.
-   *
-   * @param b4
-   *          A reusable byte array to reduce array instantiation
-   * @param threeBytes
-   *          the array to convert
-   * @param numSigBytes
-   *          the number of significant bytes in your array
-   * @return four byte array in Base64 notation.
-   * @since 1.5.1
-   */
-  private static byte[] encode3to4(byte[] b4, byte[] threeBytes, int numSigBytes, int options) {
-    encode3to4(threeBytes, 0, numSigBytes, b4, 0, options);
-    return b4;
-  } // end encode3to4
+	/* ********  E N C O D I N G   M E T H O D S  ******** */
+	/**
+	 * Encodes up to the first three bytes of array <var>threeBytes</var> and returns a four-byte
+	 * array in Base64 notation. The actual number of significant bytes in your array is given by
+	 * <var>numSigBytes</var>. The array <var>threeBytes</var> needs only be as big as
+	 * <var>numSigBytes</var>. Code can reuse a byte array by passing a four-byte array as
+	 * <var>b4</var>.
+	 *
+	 * @param b4
+	 *          A reusable byte array to reduce array instantiation
+	 * @param threeBytes
+	 *          the array to convert
+	 * @param numSigBytes
+	 *          the number of significant bytes in your array
+	 * @return four byte array in Base64 notation.
+	 * @since 1.5.1
+	 */
+	private static byte[] encode3to4(byte[] b4, byte[] threeBytes, int numSigBytes, int options) {
+		encode3to4(threeBytes, 0, numSigBytes, b4, 0, options);
+		return b4;
+	} // end encode3to4
 
-  /**
-   * <p>
-   * Encodes up to three bytes of the array <var>source</var> and writes the resulting four Base64
-   * bytes to <var>destination</var>. The source and destination arrays can be manipulated anywhere
-   * along their length by specifying <var>srcOffset</var> and <var>destOffset</var>. This method
-   * does not check to make sure your arrays are large enough to accomodate <var>srcOffset</var> + 3
-   * for the <var>source</var> array or <var>destOffset</var> + 4 for the <var>destination</var>
-   * array. The actual number of significant bytes in your array is given by <var>numSigBytes</var>.
-   * </p>
-   * <p>
-   * This is the lowest level of the encoding methods with all possible parameters.
-   * </p>
-   *
-   * @param source
-   *          the array to convert
-   * @param srcOffset
-   *          the index where conversion begins
-   * @param numSigBytes
-   *          the number of significant bytes in your array
-   * @param destination
-   *          the array to hold the conversion
-   * @param destOffset
-   *          the index where output will be put
-   * @return the <var>destination</var> array
-   * @since 1.3
-   */
-  private static byte[] encode3to4(byte[] source,
-      int srcOffset,
-      int numSigBytes,
-      byte[] destination,
-      int destOffset,
-      int options) {
-    byte[] ALPHABET = getAlphabet(options);
-    //           1         2         3
-    // 01234567890123456789012345678901 Bit position
-    // --------000000001111111122222222 Array position from threeBytes
-    // --------|    ||    ||    ||    | Six bit groups to index ALPHABET
-    //          >>18  >>12  >> 6  >> 0  Right shift necessary
-    //                0x3f  0x3f  0x3f  Additional AND
-    // Create buffer with zero-padding if there are only one or two
-    // significant bytes passed in the array.
-    // We have to shift left 24 in order to flush out the 1's that appear
-    // when Java treats a value as negative that is cast from a byte to an int.
-    int inBuff =
-        (numSigBytes > 0 ? source[srcOffset] << 24 >>> 8 : 0)
-            | (numSigBytes > 1 ? source[srcOffset + 1] << 24 >>> 16 : 0)
-            | (numSigBytes > 2 ? source[srcOffset + 2] << 24 >>> 24 : 0);
-    switch (numSigBytes) {
-      case 3 :
-        destination[destOffset] = ALPHABET[(inBuff >>> 18)];
-        destination[destOffset + 1] = ALPHABET[inBuff >>> 12 & 0x3f];
-        destination[destOffset + 2] = ALPHABET[inBuff >>> 6 & 0x3f];
-        destination[destOffset + 3] = ALPHABET[inBuff & 0x3f];
-        return destination;
-      case 2 :
-        destination[destOffset] = ALPHABET[(inBuff >>> 18)];
-        destination[destOffset + 1] = ALPHABET[inBuff >>> 12 & 0x3f];
-        destination[destOffset + 2] = ALPHABET[inBuff >>> 6 & 0x3f];
-        destination[destOffset + 3] = EQUALS_SIGN;
-        return destination;
-      case 1 :
-        destination[destOffset] = ALPHABET[(inBuff >>> 18)];
-        destination[destOffset + 1] = ALPHABET[inBuff >>> 12 & 0x3f];
-        destination[destOffset + 2] = EQUALS_SIGN;
-        destination[destOffset + 3] = EQUALS_SIGN;
-        return destination;
-      default :
-        return destination;
-    } // end switch
-  } // end encode3to4
+	/**
+	 * <p>
+	 * Encodes up to three bytes of the array <var>source</var> and writes the resulting four Base64
+	 * bytes to <var>destination</var>. The source and destination arrays can be manipulated anywhere
+	 * along their length by specifying <var>srcOffset</var> and <var>destOffset</var>. This method
+	 * does not check to make sure your arrays are large enough to accomodate <var>srcOffset</var> + 3
+	 * for the <var>source</var> array or <var>destOffset</var> + 4 for the <var>destination</var>
+	 * array. The actual number of significant bytes in your array is given by <var>numSigBytes</var>.
+	 * </p>
+	 * <p>
+	 * This is the lowest level of the encoding methods with all possible parameters.
+	 * </p>
+	 *
+	 * @param source
+	 *          the array to convert
+	 * @param srcOffset
+	 *          the index where conversion begins
+	 * @param numSigBytes
+	 *          the number of significant bytes in your array
+	 * @param destination
+	 *          the array to hold the conversion
+	 * @param destOffset
+	 *          the index where output will be put
+	 * @return the <var>destination</var> array
+	 * @since 1.3
+	 */
+	private static byte[] encode3to4(byte[] source,
+			int srcOffset,
+			int numSigBytes,
+			byte[] destination,
+			int destOffset,
+			int options) {
+		byte[] ALPHABET = getAlphabet(options);
+		//           1         2         3
+		// 01234567890123456789012345678901 Bit position
+		// --------000000001111111122222222 Array position from threeBytes
+		// --------|    ||    ||    ||    | Six bit groups to index ALPHABET
+		//          >>18  >>12  >> 6  >> 0  Right shift necessary
+		//                0x3f  0x3f  0x3f  Additional AND
+		// Create buffer with zero-padding if there are only one or two
+		// significant bytes passed in the array.
+		// We have to shift left 24 in order to flush out the 1's that appear
+		// when Java treats a value as negative that is cast from a byte to an int.
+		int inBuff =
+				(numSigBytes > 0 ? source[srcOffset] << 24 >>> 8 : 0)
+				| (numSigBytes > 1 ? source[srcOffset + 1] << 24 >>> 16 : 0)
+				| (numSigBytes > 2 ? source[srcOffset + 2] << 24 >>> 24 : 0);
+		switch (numSigBytes) {
+		case 3 :
+			destination[destOffset] = ALPHABET[(inBuff >>> 18)];
+			destination[destOffset + 1] = ALPHABET[inBuff >>> 12 & 0x3f];
+			destination[destOffset + 2] = ALPHABET[inBuff >>> 6 & 0x3f];
+			destination[destOffset + 3] = ALPHABET[inBuff & 0x3f];
+			return destination;
+		case 2 :
+			destination[destOffset] = ALPHABET[(inBuff >>> 18)];
+			destination[destOffset + 1] = ALPHABET[inBuff >>> 12 & 0x3f];
+			destination[destOffset + 2] = ALPHABET[inBuff >>> 6 & 0x3f];
+			destination[destOffset + 3] = EQUALS_SIGN;
+			return destination;
+		case 1 :
+			destination[destOffset] = ALPHABET[(inBuff >>> 18)];
+			destination[destOffset + 1] = ALPHABET[inBuff >>> 12 & 0x3f];
+			destination[destOffset + 2] = EQUALS_SIGN;
+			destination[destOffset + 3] = EQUALS_SIGN;
+			return destination;
+		default :
+			return destination;
+		} // end switch
+	} // end encode3to4
 
-  /**
-   * Performs Base64 encoding on the <code>raw</code> ByteBuffer, writing it to the
-   * <code>encoded</code> ByteBuffer. This is an experimental feature. Currently it does not pass
-   * along any options (such as {@link #DO_BREAK_LINES} or {@link #GZIP}.
-   *
-   * @param raw
-   *          input buffer
-   * @param encoded
-   *          output buffer
-   * @since 2.3
-   */
-  public static void encode(java.nio.ByteBuffer raw, java.nio.ByteBuffer encoded) {
-    byte[] raw3 = new byte[3];
-    byte[] enc4 = new byte[4];
-    while (raw.hasRemaining()) {
-      int rem = Math.min(3, raw.remaining());
-      raw.get(raw3, 0, rem);
-      Base64.encode3to4(enc4, raw3, rem, Base64.NO_OPTIONS);
-      encoded.put(enc4);
-    } // end input remaining
-  }
+	/**
+	 * Performs Base64 encoding on the <code>raw</code> ByteBuffer, writing it to the
+	 * <code>encoded</code> ByteBuffer. This is an experimental feature. Currently it does not pass
+	 * along any options (such as {@link #DO_BREAK_LINES} or {@link #GZIP}.
+	 *
+	 * @param raw
+	 *          input buffer
+	 * @param encoded
+	 *          output buffer
+	 * @since 2.3
+	 */
+	public static void encode(java.nio.ByteBuffer raw, java.nio.ByteBuffer encoded) {
+		byte[] raw3 = new byte[3];
+		byte[] enc4 = new byte[4];
+		while (raw.hasRemaining()) {
+			int rem = Math.min(3, raw.remaining());
+			raw.get(raw3, 0, rem);
+			Base64.encode3to4(enc4, raw3, rem, Base64.NO_OPTIONS);
+			encoded.put(enc4);
+		} // end input remaining
+	}
 
-  /**
-   * Performs Base64 encoding on the <code>raw</code> ByteBuffer, writing it to the
-   * <code>encoded</code> CharBuffer. This is an experimental feature. Currently it does not pass
-   * along any options (such as {@link #DO_BREAK_LINES} or {@link #GZIP}.
-   *
-   * @param raw
-   *          input buffer
-   * @param encoded
-   *          output buffer
-   * @since 2.3
-   */
-  public static void encode(java.nio.ByteBuffer raw, java.nio.CharBuffer encoded) {
-    byte[] raw3 = new byte[3];
-    byte[] enc4 = new byte[4];
-    while (raw.hasRemaining()) {
-      int rem = Math.min(3, raw.remaining());
-      raw.get(raw3, 0, rem);
-      Base64.encode3to4(enc4, raw3, rem, Base64.NO_OPTIONS);
-      for (int i = 0; i < 4; i++) {
-        encoded.put((char) (enc4[i] & 0xFF));
-      }
-    } // end input remaining
-  }
+	/**
+	 * Performs Base64 encoding on the <code>raw</code> ByteBuffer, writing it to the
+	 * <code>encoded</code> CharBuffer. This is an experimental feature. Currently it does not pass
+	 * along any options (such as {@link #DO_BREAK_LINES} or {@link #GZIP}.
+	 *
+	 * @param raw
+	 *          input buffer
+	 * @param encoded
+	 *          output buffer
+	 * @since 2.3
+	 */
+	public static void encode(java.nio.ByteBuffer raw, java.nio.CharBuffer encoded) {
+		byte[] raw3 = new byte[3];
+		byte[] enc4 = new byte[4];
+		while (raw.hasRemaining()) {
+			int rem = Math.min(3, raw.remaining());
+			raw.get(raw3, 0, rem);
+			Base64.encode3to4(enc4, raw3, rem, Base64.NO_OPTIONS);
+			for (int i = 0; i < 4; i++) {
+				encoded.put((char) (enc4[i] & 0xFF));
+			}
+		} // end input remaining
+	}
 
-  /**
-   * Serializes an object and returns the Base64-encoded version of that serialized object.
-   *
-   * <p>
-   * As of v 2.3, if the object cannot be serialized or there is another error, the method will
-   * throw an java.io.IOException. <b>This is new to v2.3!</b> In earlier versions, it just returned
-   * a null value, but in retrospect that's a pretty poor way to handle it.
-   * </p>
-   *
-   * The object is not GZip-compressed before being encoded.
-   *
-   * @param serializableObject
-   *          The object to encode
-   * @return The Base64-encoded object
-   * @throws java.io.IOException
-   *           if there is an error
-   * @throws NullPointerException
-   *           if serializedObject is null
-   * @since 1.4
-   */
-  public static String encodeObject(java.io.Serializable serializableObject)
-      throws java.io.IOException {
-    return encodeObject(serializableObject, NO_OPTIONS);
-  } // end encodeObject
+	/**
+	 * Serializes an object and returns the Base64-encoded version of that serialized object.
+	 *
+	 * <p>
+	 * As of v 2.3, if the object cannot be serialized or there is another error, the method will
+	 * throw an java.io.IOException. <b>This is new to v2.3!</b> In earlier versions, it just returned
+	 * a null value, but in retrospect that's a pretty poor way to handle it.
+	 * </p>
+	 *
+	 * The object is not GZip-compressed before being encoded.
+	 *
+	 * @param serializableObject
+	 *          The object to encode
+	 * @return The Base64-encoded object
+	 * @throws java.io.IOException
+	 *           if there is an error
+	 * @throws NullPointerException
+	 *           if serializedObject is null
+	 * @since 1.4
+	 */
+	public static String encodeObject(java.io.Serializable serializableObject)
+			throws java.io.IOException {
+		return encodeObject(serializableObject, NO_OPTIONS);
+	} // end encodeObject
 
-  /**
-   * Serializes an object and returns the Base64-encoded version of that serialized object.
-   *
-   * <p>
-   * As of v 2.3, if the object cannot be serialized or there is another error, the method will
-   * throw an java.io.IOException. <b>This is new to v2.3!</b> In earlier versions, it just returned
-   * a null value, but in retrospect that's a pretty poor way to handle it.
-   * </p>
-   *
-   * The object is not GZip-compressed before being encoded.
-   * <p>
-   * Example options:
-   *
-   * <pre>
-     *   GZIP: gzip-compresses object before encoding it.
-     *   DO_BREAK_LINES: break lines at 76 characters
-     * </pre>
-   * <p>
-   * Example: <code>encodeObject( myObj, Base64.GZIP )</code> or
-   * <p>
-   * Example: <code>encodeObject( myObj, Base64.GZIP | Base64.DO_BREAK_LINES )</code>
-   *
-   * @param serializableObject
-   *          The object to encode
-   * @param options
-   *          Specified options
-   * @return The Base64-encoded object
-   * @see Base64#GZIP
-   * @see Base64#DO_BREAK_LINES
-   * @throws java.io.IOException
-   *           if there is an error
-   * @since 2.0
-   */
-  public static String encodeObject(java.io.Serializable serializableObject, int options)
-      throws java.io.IOException {
-    if (serializableObject == null) {
-      throw new NullPointerException("Cannot serialize a null object.");
-    } // end if: null
-    // Streams
-    java.io.ByteArrayOutputStream baos = null;
-    java.io.OutputStream b64os = null;
-    java.util.zip.GZIPOutputStream gzos = null;
-    java.io.ObjectOutputStream oos = null;
-    try {
-      // ObjectOutputStream -> (GZIP) -> Base64 -> ByteArrayOutputStream
-      baos = new java.io.ByteArrayOutputStream();
-      b64os = new Base64.OutputStream(baos, ENCODE | options);
-      if ((options & GZIP) != 0) {
-        // Gzip
-        gzos = new java.util.zip.GZIPOutputStream(b64os);
-        oos = new java.io.ObjectOutputStream(gzos);
-      } else {
-        // Not gzipped
-        oos = new java.io.ObjectOutputStream(b64os);
-      }
-      oos.writeObject(serializableObject);
-    } // end try
-    catch (java.io.IOException e) {
-      // Catch it and then throw it immediately so that
-      // the finally{} block is called for cleanup.
-      throw e;
-    } // end catch
-    finally {
-      try {
-        oos.close();
-      } catch (Exception e) {
-      }
-      try {
-        gzos.close();
-      } catch (Exception e) {
-      }
-      try {
-        b64os.close();
-      } catch (Exception e) {
-      }
-      try {
-        baos.close();
-      } catch (Exception e) {
-      }
-    } // end finally
-    // Return value according to relevant encoding.
-    try {
-      return new String(baos.toByteArray(), PREFERRED_ENCODING);
-    } // end try
-    catch (java.io.UnsupportedEncodingException uue) {
-      // Fall back to some Java default
-      return new String(baos.toByteArray());
-    } // end catch
-  } // end encode
+	/**
+	 * Serializes an object and returns the Base64-encoded version of that serialized object.
+	 *
+	 * <p>
+	 * As of v 2.3, if the object cannot be serialized or there is another error, the method will
+	 * throw an java.io.IOException. <b>This is new to v2.3!</b> In earlier versions, it just returned
+	 * a null value, but in retrospect that's a pretty poor way to handle it.
+	 * </p>
+	 *
+	 * The object is not GZip-compressed before being encoded.
+	 * <p>
+	 * Example options:
+	 *
+	 * <pre>
+	 *   GZIP: gzip-compresses object before encoding it.
+	 *   DO_BREAK_LINES: break lines at 76 characters
+	 * </pre>
+	 * <p>
+	 * Example: <code>encodeObject( myObj, Base64.GZIP )</code> or
+	 * <p>
+	 * Example: <code>encodeObject( myObj, Base64.GZIP | Base64.DO_BREAK_LINES )</code>
+	 *
+	 * @param serializableObject
+	 *          The object to encode
+	 * @param options
+	 *          Specified options
+	 * @return The Base64-encoded object
+	 * @see Base64#GZIP
+	 * @see Base64#DO_BREAK_LINES
+	 * @throws java.io.IOException
+	 *           if there is an error
+	 * @since 2.0
+	 */
+	public static String encodeObject(java.io.Serializable serializableObject, int options)
+			throws java.io.IOException {
+		if (serializableObject == null) {
+			throw new NullPointerException("Cannot serialize a null object.");
+		} // end if: null
+		// Streams
+		java.io.ByteArrayOutputStream baos = null;
+		java.io.OutputStream b64os = null;
+		java.util.zip.GZIPOutputStream gzos = null;
+		java.io.ObjectOutputStream oos = null;
+		try {
+			// ObjectOutputStream -> (GZIP) -> Base64 -> ByteArrayOutputStream
+			baos = new java.io.ByteArrayOutputStream();
+			b64os = new Base64.OutputStream(baos, ENCODE | options);
+			if ((options & GZIP) != 0) {
+				// Gzip
+				gzos = new java.util.zip.GZIPOutputStream(b64os);
+				oos = new java.io.ObjectOutputStream(gzos);
+			} else {
+				// Not gzipped
+				oos = new java.io.ObjectOutputStream(b64os);
+			}
+			oos.writeObject(serializableObject);
+		} // end try
+		catch (java.io.IOException e) {
+			// Catch it and then throw it immediately so that
+			// the finally{} block is called for cleanup.
+			throw e;
+		} // end catch
+		finally {
+			try {
+				oos.close();
+			} catch (Exception e) {
+			}
+			try {
+				gzos.close();
+			} catch (Exception e) {
+			}
+			try {
+				b64os.close();
+			} catch (Exception e) {
+			}
+			try {
+				baos.close();
+			} catch (Exception e) {
+			}
+		} // end finally
+		// Return value according to relevant encoding.
+		try {
+			return new String(baos.toByteArray(), PREFERRED_ENCODING);
+		} // end try
+		catch (java.io.UnsupportedEncodingException uue) {
+			// Fall back to some Java default
+			return new String(baos.toByteArray());
+		} // end catch
+	} // end encode
 
-  /**
-   * Encodes a byte array into Base64 notation. Does not GZip-compress data.
-   *
-   * @param source
-   *          The data to convert
-   * @return The data in Base64-encoded form
-   * @throws NullPointerException
-   *           if source array is null
-   * @since 1.4
-   */
-  public static String encodeBytes(byte[] source) {
-    // Since we're not going to have the GZIP encoding turned on,
-    // we're not going to have an java.io.IOException thrown, so
-    // we should not force the user to have to catch it.
-    String encoded = null;
-    try {
-      encoded = encodeBytes(source, 0, source.length, NO_OPTIONS);
-    } catch (java.io.IOException ex) {
-      assert false : ex.getMessage();
-    } // end catch
-    assert encoded != null;
-    return encoded;
-  } // end encodeBytes
+	/**
+	 * Encodes a byte array into Base64 notation. Does not GZip-compress data.
+	 *
+	 * @param source
+	 *          The data to convert
+	 * @return The data in Base64-encoded form
+	 * @throws NullPointerException
+	 *           if source array is null
+	 * @since 1.4
+	 */
+	public static String encodeBytes(byte[] source) {
+		// Since we're not going to have the GZIP encoding turned on,
+		// we're not going to have an java.io.IOException thrown, so
+		// we should not force the user to have to catch it.
+		String encoded = null;
+		try {
+			encoded = encodeBytes(source, 0, source.length, NO_OPTIONS);
+		} catch (java.io.IOException ex) {
+			assert false : ex.getMessage();
+		} // end catch
+		assert encoded != null;
+		return encoded;
+	} // end encodeBytes
 
-  /**
-   * Encodes a byte array into Base64 notation.
-   * <p>
-   * Example options:
-   *
-   * <pre>
-     *   GZIP: gzip-compresses object before encoding it.
-     *   DO_BREAK_LINES: break lines at 76 characters
-     *     <i>Note: Technically, this makes your encoding non-compliant.</i>
-     * </pre>
-   * <p>
-   * Example: <code>encodeBytes( myData, Base64.GZIP )</code> or
-   * <p>
-   * Example: <code>encodeBytes( myData, Base64.GZIP | Base64.DO_BREAK_LINES )</code>
-   *
-   *
-   * <p>
-   * As of v 2.3, if there is an error with the GZIP stream, the method will throw an
-   * java.io.IOException. <b>This is new to v2.3!</b> In earlier versions, it just returned a null
-   * value, but in retrospect that's a pretty poor way to handle it.
-   * </p>
-   *
-   *
-   * @param source
-   *          The data to convert
-   * @param options
-   *          Specified options
-   * @return The Base64-encoded data as a String
-   * @see Base64#GZIP
-   * @see Base64#DO_BREAK_LINES
-   * @throws java.io.IOException
-   *           if there is an error
-   * @throws NullPointerException
-   *           if source array is null
-   * @since 2.0
-   */
-  public static String encodeBytes(byte[] source, int options) throws java.io.IOException {
-    return encodeBytes(source, 0, source.length, options);
-  } // end encodeBytes
+	/**
+	 * Encodes a byte array into Base64 notation.
+	 * <p>
+	 * Example options:
+	 *
+	 * <pre>
+	 *   GZIP: gzip-compresses object before encoding it.
+	 *   DO_BREAK_LINES: break lines at 76 characters
+	 *     <i>Note: Technically, this makes your encoding non-compliant.</i>
+	 * </pre>
+	 * <p>
+	 * Example: <code>encodeBytes( myData, Base64.GZIP )</code> or
+	 * <p>
+	 * Example: <code>encodeBytes( myData, Base64.GZIP | Base64.DO_BREAK_LINES )</code>
+	 *
+	 *
+	 * <p>
+	 * As of v 2.3, if there is an error with the GZIP stream, the method will throw an
+	 * java.io.IOException. <b>This is new to v2.3!</b> In earlier versions, it just returned a null
+	 * value, but in retrospect that's a pretty poor way to handle it.
+	 * </p>
+	 *
+	 *
+	 * @param source
+	 *          The data to convert
+	 * @param options
+	 *          Specified options
+	 * @return The Base64-encoded data as a String
+	 * @see Base64#GZIP
+	 * @see Base64#DO_BREAK_LINES
+	 * @throws java.io.IOException
+	 *           if there is an error
+	 * @throws NullPointerException
+	 *           if source array is null
+	 * @since 2.0
+	 */
+	public static String encodeBytes(byte[] source, int options) throws java.io.IOException {
+		return encodeBytes(source, 0, source.length, options);
+	} // end encodeBytes
 
-  /**
-   * Encodes a byte array into Base64 notation. Does not GZip-compress data.
-   *
-   * <p>
-   * As of v 2.3, if there is an error, the method will throw an java.io.IOException. <b>This is new
-   * to v2.3!</b> In earlier versions, it just returned a null value, but in retrospect that's a
-   * pretty poor way to handle it.
-   * </p>
-   *
-   *
-   * @param source
-   *          The data to convert
-   * @param off
-   *          Offset in array where conversion should begin
-   * @param len
-   *          Length of data to convert
-   * @return The Base64-encoded data as a String
-   * @throws NullPointerException
-   *           if source array is null
-   * @throws IllegalArgumentException
-   *           if source array, offset, or length are invalid
-   * @since 1.4
-   */
-  public static String encodeBytes(byte[] source, int off, int len) {
-    // Since we're not going to have the GZIP encoding turned on,
-    // we're not going to have an java.io.IOException thrown, so
-    // we should not force the user to have to catch it.
-    String encoded = null;
-    try {
-      encoded = encodeBytes(source, off, len, NO_OPTIONS);
-    } catch (java.io.IOException ex) {
-      assert false : ex.getMessage();
-    } // end catch
-    assert encoded != null;
-    return encoded;
-  } // end encodeBytes
+	/**
+	 * Encodes a byte array into Base64 notation. Does not GZip-compress data.
+	 *
+	 * <p>
+	 * As of v 2.3, if there is an error, the method will throw an java.io.IOException. <b>This is new
+	 * to v2.3!</b> In earlier versions, it just returned a null value, but in retrospect that's a
+	 * pretty poor way to handle it.
+	 * </p>
+	 *
+	 *
+	 * @param source
+	 *          The data to convert
+	 * @param off
+	 *          Offset in array where conversion should begin
+	 * @param len
+	 *          Length of data to convert
+	 * @return The Base64-encoded data as a String
+	 * @throws NullPointerException
+	 *           if source array is null
+	 * @throws IllegalArgumentException
+	 *           if source array, offset, or length are invalid
+	 * @since 1.4
+	 */
+	public static String encodeBytes(byte[] source, int off, int len) {
+		// Since we're not going to have the GZIP encoding turned on,
+		// we're not going to have an java.io.IOException thrown, so
+		// we should not force the user to have to catch it.
+		String encoded = null;
+		try {
+			encoded = encodeBytes(source, off, len, NO_OPTIONS);
+		} catch (java.io.IOException ex) {
+			assert false : ex.getMessage();
+		} // end catch
+		assert encoded != null;
+		return encoded;
+	} // end encodeBytes
 
-  /**
-   * Encodes a byte array into Base64 notation.
-   * <p>
-   * Example options:
-   *
-   * <pre>
-     *   GZIP: gzip-compresses object before encoding it.
-     *   DO_BREAK_LINES: break lines at 76 characters
-     *     <i>Note: Technically, this makes your encoding non-compliant.</i>
-     * </pre>
-   * <p>
-   * Example: <code>encodeBytes( myData, Base64.GZIP )</code> or
-   * <p>
-   * Example: <code>encodeBytes( myData, Base64.GZIP | Base64.DO_BREAK_LINES )</code>
-   *
-   *
-   * <p>
-   * As of v 2.3, if there is an error with the GZIP stream, the method will throw an
-   * java.io.IOException. <b>This is new to v2.3!</b> In earlier versions, it just returned a null
-   * value, but in retrospect that's a pretty poor way to handle it.
-   * </p>
-   *
-   *
-   * @param source
-   *          The data to convert
-   * @param off
-   *          Offset in array where conversion should begin
-   * @param len
-   *          Length of data to convert
-   * @param options
-   *          Specified options
-   * @return The Base64-encoded data as a String
-   * @see Base64#GZIP
-   * @see Base64#DO_BREAK_LINES
-   * @throws java.io.IOException
-   *           if there is an error
-   * @throws NullPointerException
-   *           if source array is null
-   * @throws IllegalArgumentException
-   *           if source array, offset, or length are invalid
-   * @since 2.0
-   */
-  public static String encodeBytes(byte[] source, int off, int len, int options)
-      throws java.io.IOException {
-    byte[] encoded = encodeBytesToBytes(source, off, len, options);
-    // Return value according to relevant encoding.
-    try {
-      return new String(encoded, PREFERRED_ENCODING);
-    } // end try
-    catch (java.io.UnsupportedEncodingException uue) {
-      return new String(encoded);
-    } // end catch
-  } // end encodeBytes
+	/**
+	 * Encodes a byte array into Base64 notation.
+	 * <p>
+	 * Example options:
+	 *
+	 * <pre>
+	 *   GZIP: gzip-compresses object before encoding it.
+	 *   DO_BREAK_LINES: break lines at 76 characters
+	 *     <i>Note: Technically, this makes your encoding non-compliant.</i>
+	 * </pre>
+	 * <p>
+	 * Example: <code>encodeBytes( myData, Base64.GZIP )</code> or
+	 * <p>
+	 * Example: <code>encodeBytes( myData, Base64.GZIP | Base64.DO_BREAK_LINES )</code>
+	 *
+	 *
+	 * <p>
+	 * As of v 2.3, if there is an error with the GZIP stream, the method will throw an
+	 * java.io.IOException. <b>This is new to v2.3!</b> In earlier versions, it just returned a null
+	 * value, but in retrospect that's a pretty poor way to handle it.
+	 * </p>
+	 *
+	 *
+	 * @param source
+	 *          The data to convert
+	 * @param off
+	 *          Offset in array where conversion should begin
+	 * @param len
+	 *          Length of data to convert
+	 * @param options
+	 *          Specified options
+	 * @return The Base64-encoded data as a String
+	 * @see Base64#GZIP
+	 * @see Base64#DO_BREAK_LINES
+	 * @throws java.io.IOException
+	 *           if there is an error
+	 * @throws NullPointerException
+	 *           if source array is null
+	 * @throws IllegalArgumentException
+	 *           if source array, offset, or length are invalid
+	 * @since 2.0
+	 */
+	public static String encodeBytes(byte[] source, int off, int len, int options)
+			throws java.io.IOException {
+		byte[] encoded = encodeBytesToBytes(source, off, len, options);
+		// Return value according to relevant encoding.
+		try {
+			return new String(encoded, PREFERRED_ENCODING);
+		} // end try
+		catch (java.io.UnsupportedEncodingException uue) {
+			return new String(encoded);
+		} // end catch
+	} // end encodeBytes
 
-  /**
-   * Similar to {@link #encodeBytes(byte[])} but returns a byte array instead of instantiating a
-   * String. This is more efficient if you're working with I/O streams and have large data sets to
-   * encode.
-   *
-   *
-   * @param source
-   *          The data to convert
-   * @return The Base64-encoded data as a byte[] (of ASCII characters)
-   * @throws NullPointerException
-   *           if source array is null
-   * @since 2.3.1
-   */
-  public static byte[] encodeBytesToBytes(byte[] source) {
-    byte[] encoded = null;
-    try {
-      encoded = encodeBytesToBytes(source, 0, source.length, Base64.NO_OPTIONS);
-    } catch (java.io.IOException ex) {
-      assert false : "IOExceptions only come from GZipping, which is turned off: "
-          + ex.getMessage();
-    }
-    return encoded;
-  }
+	/**
+	 * Similar to {@link #encodeBytes(byte[])} but returns a byte array instead of instantiating a
+	 * String. This is more efficient if you're working with I/O streams and have large data sets to
+	 * encode.
+	 *
+	 *
+	 * @param source
+	 *          The data to convert
+	 * @return The Base64-encoded data as a byte[] (of ASCII characters)
+	 * @throws NullPointerException
+	 *           if source array is null
+	 * @since 2.3.1
+	 */
+	public static byte[] encodeBytesToBytes(byte[] source) {
+		byte[] encoded = null;
+		try {
+			encoded = encodeBytesToBytes(source, 0, source.length, Base64.NO_OPTIONS);
+		} catch (java.io.IOException ex) {
+			assert false : "IOExceptions only come from GZipping, which is turned off: "
+					+ ex.getMessage();
+		}
+		return encoded;
+	}
 
-  /**
-   * Similar to {@link #encodeBytes(byte[], int, int, int)} but returns a byte array instead of
-   * instantiating a String. This is more efficient if you're working with I/O streams and have
-   * large data sets to encode.
-   *
-   *
-   * @param source
-   *          The data to convert
-   * @param off
-   *          Offset in array where conversion should begin
-   * @param len
-   *          Length of data to convert
-   * @param options
-   *          Specified options
-   * @return The Base64-encoded data as a String
-   * @see Base64#GZIP
-   * @see Base64#DO_BREAK_LINES
-   * @throws java.io.IOException
-   *           if there is an error
-   * @throws NullPointerException
-   *           if source array is null
-   * @throws IllegalArgumentException
-   *           if source array, offset, or length are invalid
-   * @since 2.3.1
-   */
-  public static byte[] encodeBytesToBytes(byte[] source, int off, int len, int options)
-      throws java.io.IOException {
-    if (source == null) {
-      throw new NullPointerException("Cannot serialize a null array.");
-    } // end if: null
-    if (off < 0) {
-      throw new IllegalArgumentException("Cannot have negative offset: " + off);
-    } // end if: off < 0
-    if (len < 0) {
-      throw new IllegalArgumentException("Cannot have length offset: " + len);
-    } // end if: len < 0
-    if (off + len > source.length) {
-      throw new IllegalArgumentException(String.format(
-          "Cannot have offset of %d and length of %d with array of length %d",
-          off,
-          len,
-          source.length));
-    } // end if: off < 0
-    // Compress?
-    if ((options & GZIP) != 0) {
-      java.io.ByteArrayOutputStream baos = null;
-      java.util.zip.GZIPOutputStream gzos = null;
-      Base64.OutputStream b64os = null;
-      try {
-        // GZip -> Base64 -> ByteArray
-        baos = new java.io.ByteArrayOutputStream();
-        b64os = new Base64.OutputStream(baos, ENCODE | options);
-        gzos = new java.util.zip.GZIPOutputStream(b64os);
-        gzos.write(source, off, len);
-        gzos.close();
-      } // end try
-      catch (java.io.IOException e) {
-        // Catch it and then throw it immediately so that
-        // the finally{} block is called for cleanup.
-        throw e;
-      } // end catch
-      finally {
-        try {
-          gzos.close();
-        } catch (Exception e) {
-        }
-        try {
-          b64os.close();
-        } catch (Exception e) {
-        }
-        try {
-          baos.close();
-        } catch (Exception e) {
-        }
-      } // end finally
-      return baos.toByteArray();
-    } // end if: compress
-    // Else, don't compress. Better not to use streams at all then.
-    else {
-      boolean breakLines = (options & DO_BREAK_LINES) != 0;
-      //int    len43   = len * 4 / 3;
-      //byte[] outBuff = new byte[   ( len43 )                      // Main 4:3
-      //                           + ( (len % 3) > 0 ? 4 : 0 )      // Account for padding
-      //                           + (breakLines ? ( len43 / MAX_LINE_LENGTH ) : 0) ]; // New lines
-      // Try to determine more precisely how big the array needs to be.
-      // If we get it right, we don't have to do an array copy, and
-      // we save a bunch of memory.
-      int encLen = len / 3 * 4 + (len % 3 > 0 ? 4 : 0); // Bytes needed for actual encoding
-      if (breakLines) {
-        encLen += encLen / MAX_LINE_LENGTH; // Plus extra newline characters
-      }
-      byte[] outBuff = new byte[encLen];
-      int d = 0;
-      int e = 0;
-      int len2 = len - 2;
-      int lineLength = 0;
-      for (; d < len2; d += 3, e += 4) {
-        encode3to4(source, d + off, 3, outBuff, e, options);
-        lineLength += 4;
-        if (breakLines && lineLength >= MAX_LINE_LENGTH) {
-          outBuff[e + 4] = NEW_LINE;
-          e++;
-          lineLength = 0;
-        } // end if: end of line
-      } // en dfor: each piece of array
-      if (d < len) {
-        encode3to4(source, d + off, len - d, outBuff, e, options);
-        e += 4;
-      } // end if: some padding needed
-      // Only resize array if we didn't guess it right.
-      if (e <= outBuff.length - 1) {
-        // If breaking lines and the last byte falls right at
-        // the line length (76 bytes per line), there will be
-        // one extra byte, and the array will need to be resized.
-        // Not too bad of an estimate on array size, I'd say.
-        byte[] finalOut = new byte[e];
-        System.arraycopy(outBuff, 0, finalOut, 0, e);
-        //System.err.println("Having to resize array from " + outBuff.length + " to " + e );
-        return finalOut;
-      } else {
-        //System.err.println("No need to resize array.");
-        return outBuff;
-      }
-    } // end else: don't compress
-  } // end encodeBytesToBytes
+	/**
+	 * Similar to {@link #encodeBytes(byte[], int, int, int)} but returns a byte array instead of
+	 * instantiating a String. This is more efficient if you're working with I/O streams and have
+	 * large data sets to encode.
+	 *
+	 *
+	 * @param source
+	 *          The data to convert
+	 * @param off
+	 *          Offset in array where conversion should begin
+	 * @param len
+	 *          Length of data to convert
+	 * @param options
+	 *          Specified options
+	 * @return The Base64-encoded data as a String
+	 * @see Base64#GZIP
+	 * @see Base64#DO_BREAK_LINES
+	 * @throws java.io.IOException
+	 *           if there is an error
+	 * @throws NullPointerException
+	 *           if source array is null
+	 * @throws IllegalArgumentException
+	 *           if source array, offset, or length are invalid
+	 * @since 2.3.1
+	 */
+	public static byte[] encodeBytesToBytes(byte[] source, int off, int len, int options)
+			throws java.io.IOException {
+		if (source == null) {
+			throw new NullPointerException("Cannot serialize a null array.");
+		} // end if: null
+		if (off < 0) {
+			throw new IllegalArgumentException("Cannot have negative offset: " + off);
+		} // end if: off < 0
+		if (len < 0) {
+			throw new IllegalArgumentException("Cannot have length offset: " + len);
+		} // end if: len < 0
+		if (off + len > source.length) {
+			throw new IllegalArgumentException(String.format(
+					"Cannot have offset of %d and length of %d with array of length %d",
+					off,
+					len,
+					source.length));
+		} // end if: off < 0
+		// Compress?
+		if ((options & GZIP) != 0) {
+			java.io.ByteArrayOutputStream baos = null;
+			java.util.zip.GZIPOutputStream gzos = null;
+			Base64.OutputStream b64os = null;
+			try {
+				// GZip -> Base64 -> ByteArray
+				baos = new java.io.ByteArrayOutputStream();
+				b64os = new Base64.OutputStream(baos, ENCODE | options);
+				gzos = new java.util.zip.GZIPOutputStream(b64os);
+				gzos.write(source, off, len);
+				gzos.close();
+			} // end try
+			catch (java.io.IOException e) {
+				// Catch it and then throw it immediately so that
+				// the finally{} block is called for cleanup.
+				throw e;
+			} // end catch
+			finally {
+				try {
+					gzos.close();
+				} catch (Exception e) {
+				}
+				try {
+					b64os.close();
+				} catch (Exception e) {
+				}
+				try {
+					baos.close();
+				} catch (Exception e) {
+				}
+			} // end finally
+			return baos.toByteArray();
+		} // end if: compress
+		// Else, don't compress. Better not to use streams at all then.
+		else {
+			boolean breakLines = (options & DO_BREAK_LINES) != 0;
+			//int    len43   = len * 4 / 3;
+			//byte[] outBuff = new byte[   ( len43 )                      // Main 4:3
+			//                           + ( (len % 3) > 0 ? 4 : 0 )      // Account for padding
+			//                           + (breakLines ? ( len43 / MAX_LINE_LENGTH ) : 0) ]; // New lines
+			// Try to determine more precisely how big the array needs to be.
+			// If we get it right, we don't have to do an array copy, and
+			// we save a bunch of memory.
+			int encLen = len / 3 * 4 + (len % 3 > 0 ? 4 : 0); // Bytes needed for actual encoding
+			if (breakLines) {
+				encLen += encLen / MAX_LINE_LENGTH; // Plus extra newline characters
+			}
+			byte[] outBuff = new byte[encLen];
+			int d = 0;
+			int e = 0;
+			int len2 = len - 2;
+			int lineLength = 0;
+			for (; d < len2; d += 3, e += 4) {
+				encode3to4(source, d + off, 3, outBuff, e, options);
+				lineLength += 4;
+				if (breakLines && lineLength >= MAX_LINE_LENGTH) {
+					outBuff[e + 4] = NEW_LINE;
+					e++;
+					lineLength = 0;
+				} // end if: end of line
+			} // en dfor: each piece of array
+			if (d < len) {
+				encode3to4(source, d + off, len - d, outBuff, e, options);
+				e += 4;
+			} // end if: some padding needed
+			// Only resize array if we didn't guess it right.
+			if (e <= outBuff.length - 1) {
+				// If breaking lines and the last byte falls right at
+				// the line length (76 bytes per line), there will be
+				// one extra byte, and the array will need to be resized.
+				// Not too bad of an estimate on array size, I'd say.
+				byte[] finalOut = new byte[e];
+				System.arraycopy(outBuff, 0, finalOut, 0, e);
+				//System.err.println("Having to resize array from " + outBuff.length + " to " + e );
+				return finalOut;
+			} else {
+				//System.err.println("No need to resize array.");
+				return outBuff;
+			}
+		} // end else: don't compress
+	} // end encodeBytesToBytes
 
-/* ********  D E C O D I N G   M E T H O D S  ******** */
-  /**
-   * Decodes four bytes from array <var>source</var> and writes the resulting bytes (up to three of
-   * them) to <var>destination</var>. The source and destination arrays can be manipulated anywhere
-   * along their length by specifying <var>srcOffset</var> and <var>destOffset</var>. This method
-   * does not check to make sure your arrays are large enough to accomodate <var>srcOffset</var> + 4
-   * for the <var>source</var> array or <var>destOffset</var> + 3 for the <var>destination</var>
-   * array. This method returns the actual number of bytes that were converted from the Base64
-   * encoding.
-   * <p>
-   * This is the lowest level of the decoding methods with all possible parameters.
-   * </p>
-   *
-   *
-   * @param source
-   *          the array to convert
-   * @param srcOffset
-   *          the index where conversion begins
-   * @param destination
-   *          the array to hold the conversion
-   * @param destOffset
-   *          the index where output will be put
-   * @param options
-   *          alphabet type is pulled from this (standard, url-safe, ordered)
-   * @return the number of decoded bytes converted
-   * @throws NullPointerException
-   *           if source or destination arrays are null
-   * @throws IllegalArgumentException
-   *           if srcOffset or destOffset are invalid or there is not enough room in the array.
-   * @since 1.3
-   */
-  private static int decode4to3(byte[] source,
-      int srcOffset,
-      byte[] destination,
-      int destOffset,
-      int options) {
-    // Lots of error checking and exception throwing
-    if (source == null) {
-      throw new NullPointerException("Source array was null.");
-    } // end if
-    if (destination == null) {
-      throw new NullPointerException("Destination array was null.");
-    } // end if
-    if (srcOffset < 0 || srcOffset + 3 >= source.length) {
-      throw new IllegalArgumentException(String.format(
-          "Source array with length %d cannot have offset of %d and still process four bytes.",
-          source.length,
-          srcOffset));
-    } // end if
-    if (destOffset < 0 || destOffset + 2 >= destination.length) {
-      throw new IllegalArgumentException(String.format(
-          "Destination array with length %d cannot have offset of %d and still store three bytes.",
-          destination.length,
-          destOffset));
-    } // end if
-    byte[] DECODABET = getDecodabet(options);
-    // Example: Dk==
-    if (source[srcOffset + 2] == EQUALS_SIGN) {
-      // Two ways to do the same thing. Don't know which way I like best.
-      //int outBuff =   ( ( DECODABET[ source[ srcOffset    ] ] << 24 ) >>>  6 )
-      //              | ( ( DECODABET[ source[ srcOffset + 1] ] << 24 ) >>> 12 );
-      int outBuff =
-          (DECODABET[source[srcOffset]] & 0xFF) << 18
-              | (DECODABET[source[srcOffset + 1]] & 0xFF) << 12;
-      destination[destOffset] = (byte) (outBuff >>> 16);
-      return 1;
-    }
-    // Example: DkL=
-    else if (source[srcOffset + 3] == EQUALS_SIGN) {
-      // Two ways to do the same thing. Don't know which way I like best.
-      //int outBuff =   ( ( DECODABET[ source[ srcOffset     ] ] << 24 ) >>>  6 )
-      //              | ( ( DECODABET[ source[ srcOffset + 1 ] ] << 24 ) >>> 12 )
-      //              | ( ( DECODABET[ source[ srcOffset + 2 ] ] << 24 ) >>> 18 );
-      int outBuff =
-          (DECODABET[source[srcOffset]] & 0xFF) << 18
-              | (DECODABET[source[srcOffset + 1]] & 0xFF) << 12
-              | (DECODABET[source[srcOffset + 2]] & 0xFF) << 6;
-      destination[destOffset] = (byte) (outBuff >>> 16);
-      destination[destOffset + 1] = (byte) (outBuff >>> 8);
-      return 2;
-    }
-    // Example: DkLE
-    else {
-      // Two ways to do the same thing. Don't know which way I like best.
-      //int outBuff =   ( ( DECODABET[ source[ srcOffset     ] ] << 24 ) >>>  6 )
-      //              | ( ( DECODABET[ source[ srcOffset + 1 ] ] << 24 ) >>> 12 )
-      //              | ( ( DECODABET[ source[ srcOffset + 2 ] ] << 24 ) >>> 18 )
-      //              | ( ( DECODABET[ source[ srcOffset + 3 ] ] << 24 ) >>> 24 );
-      int outBuff =
-          (DECODABET[source[srcOffset]] & 0xFF) << 18
-              | (DECODABET[source[srcOffset + 1]] & 0xFF) << 12
-              | (DECODABET[source[srcOffset + 2]] & 0xFF) << 6
-              | DECODABET[source[srcOffset + 3]]
-              & 0xFF;
-      destination[destOffset] = (byte) (outBuff >> 16);
-      destination[destOffset + 1] = (byte) (outBuff >> 8);
-      destination[destOffset + 2] = (byte) outBuff;
-      return 3;
-    }
-  } // end decodeToBytes
+	/* ********  D E C O D I N G   M E T H O D S  ******** */
+	/**
+	 * Decodes four bytes from array <var>source</var> and writes the resulting bytes (up to three of
+	 * them) to <var>destination</var>. The source and destination arrays can be manipulated anywhere
+	 * along their length by specifying <var>srcOffset</var> and <var>destOffset</var>. This method
+	 * does not check to make sure your arrays are large enough to accomodate <var>srcOffset</var> + 4
+	 * for the <var>source</var> array or <var>destOffset</var> + 3 for the <var>destination</var>
+	 * array. This method returns the actual number of bytes that were converted from the Base64
+	 * encoding.
+	 * <p>
+	 * This is the lowest level of the decoding methods with all possible parameters.
+	 * </p>
+	 *
+	 *
+	 * @param source
+	 *          the array to convert
+	 * @param srcOffset
+	 *          the index where conversion begins
+	 * @param destination
+	 *          the array to hold the conversion
+	 * @param destOffset
+	 *          the index where output will be put
+	 * @param options
+	 *          alphabet type is pulled from this (standard, url-safe, ordered)
+	 * @return the number of decoded bytes converted
+	 * @throws NullPointerException
+	 *           if source or destination arrays are null
+	 * @throws IllegalArgumentException
+	 *           if srcOffset or destOffset are invalid or there is not enough room in the array.
+	 * @since 1.3
+	 */
+	private static int decode4to3(byte[] source,
+			int srcOffset,
+			byte[] destination,
+			int destOffset,
+			int options) {
+		// Lots of error checking and exception throwing
+		if (source == null) {
+			throw new NullPointerException("Source array was null.");
+		} // end if
+		if (destination == null) {
+			throw new NullPointerException("Destination array was null.");
+		} // end if
+		if (srcOffset < 0 || srcOffset + 3 >= source.length) {
+			throw new IllegalArgumentException(String.format(
+					"Source array with length %d cannot have offset of %d and still process four bytes.",
+					source.length,
+					srcOffset));
+		} // end if
+		if (destOffset < 0 || destOffset + 2 >= destination.length) {
+			throw new IllegalArgumentException(String.format(
+					"Destination array with length %d cannot have offset of %d and still store three bytes.",
+					destination.length,
+					destOffset));
+		} // end if
+		byte[] DECODABET = getDecodabet(options);
+		// Example: Dk==
+		if (source[srcOffset + 2] == EQUALS_SIGN) {
+			// Two ways to do the same thing. Don't know which way I like best.
+			//int outBuff =   ( ( DECODABET[ source[ srcOffset    ] ] << 24 ) >>>  6 )
+			//              | ( ( DECODABET[ source[ srcOffset + 1] ] << 24 ) >>> 12 );
+			int outBuff =
+					(DECODABET[source[srcOffset]] & 0xFF) << 18
+					| (DECODABET[source[srcOffset + 1]] & 0xFF) << 12;
+			destination[destOffset] = (byte) (outBuff >>> 16);
+			return 1;
+		}
+		// Example: DkL=
+		else if (source[srcOffset + 3] == EQUALS_SIGN) {
+			// Two ways to do the same thing. Don't know which way I like best.
+			//int outBuff =   ( ( DECODABET[ source[ srcOffset     ] ] << 24 ) >>>  6 )
+			//              | ( ( DECODABET[ source[ srcOffset + 1 ] ] << 24 ) >>> 12 )
+			//              | ( ( DECODABET[ source[ srcOffset + 2 ] ] << 24 ) >>> 18 );
+			int outBuff =
+					(DECODABET[source[srcOffset]] & 0xFF) << 18
+					| (DECODABET[source[srcOffset + 1]] & 0xFF) << 12
+					| (DECODABET[source[srcOffset + 2]] & 0xFF) << 6;
+			destination[destOffset] = (byte) (outBuff >>> 16);
+			destination[destOffset + 1] = (byte) (outBuff >>> 8);
+			return 2;
+		}
+		// Example: DkLE
+		else {
+			// Two ways to do the same thing. Don't know which way I like best.
+			//int outBuff =   ( ( DECODABET[ source[ srcOffset     ] ] << 24 ) >>>  6 )
+			//              | ( ( DECODABET[ source[ srcOffset + 1 ] ] << 24 ) >>> 12 )
+			//              | ( ( DECODABET[ source[ srcOffset + 2 ] ] << 24 ) >>> 18 )
+			//              | ( ( DECODABET[ source[ srcOffset + 3 ] ] << 24 ) >>> 24 );
+			int outBuff =
+					(DECODABET[source[srcOffset]] & 0xFF) << 18
+					| (DECODABET[source[srcOffset + 1]] & 0xFF) << 12
+					| (DECODABET[source[srcOffset + 2]] & 0xFF) << 6
+					| DECODABET[source[srcOffset + 3]]
+							& 0xFF;
+			destination[destOffset] = (byte) (outBuff >> 16);
+			destination[destOffset + 1] = (byte) (outBuff >> 8);
+			destination[destOffset + 2] = (byte) outBuff;
+			return 3;
+		}
+	} // end decodeToBytes
 
-  /**
-   * Low-level access to decoding ASCII characters in the form of a byte array. <strong>Ignores
-   * GUNZIP option, if it's set.</strong> This is not generally a recommended method, although it is
-   * used internally as part of the decoding process. Special case: if len = 0, an empty array is
-   * returned. Still, if you need more speed and reduced memory footprint (and aren't gzipping),
-   * consider this method.
-   *
-   * @param source
-   *          The Base64 encoded data
-   * @return decoded data
-   * @since 2.3.1
-   */
-  public static byte[] decode(byte[] source) throws java.io.IOException {
-    byte[] decoded = null;
-    //        try {
-    decoded = decode(source, 0, source.length, Base64.NO_OPTIONS);
-    //        } catch( java.io.IOException ex ) {
-    //            assert false : "IOExceptions only come from GZipping, which is turned off: " + ex.getMessage();
-    //        }
-    return decoded;
-  }
+	/**
+	 * Low-level access to decoding ASCII characters in the form of a byte array. <strong>Ignores
+	 * GUNZIP option, if it's set.</strong> This is not generally a recommended method, although it is
+	 * used internally as part of the decoding process. Special case: if len = 0, an empty array is
+	 * returned. Still, if you need more speed and reduced memory footprint (and aren't gzipping),
+	 * consider this method.
+	 *
+	 * @param source
+	 *          The Base64 encoded data
+	 * @return decoded data
+	 * @since 2.3.1
+	 */
+	public static byte[] decode(byte[] source) throws java.io.IOException {
+		byte[] decoded = null;
+		//        try {
+		decoded = decode(source, 0, source.length, Base64.NO_OPTIONS);
+		//        } catch( java.io.IOException ex ) {
+		//            assert false : "IOExceptions only come from GZipping, which is turned off: " + ex.getMessage();
+		//        }
+		return decoded;
+	}
 
-  /**
-   * Low-level access to decoding ASCII characters in the form of a byte array. <strong>Ignores
-   * GUNZIP option, if it's set.</strong> This is not generally a recommended method, although it is
-   * used internally as part of the decoding process. Special case: if len = 0, an empty array is
-   * returned. Still, if you need more speed and reduced memory footprint (and aren't gzipping),
-   * consider this method.
-   *
-   * @param source
-   *          The Base64 encoded data
-   * @param off
-   *          The offset of where to begin decoding
-   * @param len
-   *          The length of characters to decode
-   * @param options
-   *          Can specify options such as alphabet type to use
-   * @return decoded data
-   * @throws java.io.IOException
-   *           If bogus characters exist in source data
-   * @since 1.3
-   */
-  public static byte[] decode(byte[] source, int off, int len, int options)
-      throws java.io.IOException {
-    // Lots of error checking and exception throwing
-    if (source == null) {
-      throw new NullPointerException("Cannot decode null source array.");
-    } // end if
-    if (off < 0 || off + len > source.length) {
-      throw new IllegalArgumentException(String.format(
-          "Source array with length %d cannot have offset of %d and process %d bytes.",
-          source.length,
-          off,
-          len));
-    } // end if
-    if (len == 0) {
-      return new byte[0];
-    } else if (len < 4) {
-      throw new IllegalArgumentException("Base64-encoded string must have at least four characters, but length specified was "
-          + len);
-    } // end if
-    byte[] DECODABET = getDecodabet(options);
-    int len34 = len * 3 / 4; // Estimate on array size
-    byte[] outBuff = new byte[len34]; // Upper limit on size of output
-    int outBuffPosn = 0; // Keep track of where we're writing
-    byte[] b4 = new byte[4]; // Four byte buffer from source, eliminating white space
-    int b4Posn = 0; // Keep track of four byte input buffer
-    int i = 0; // Source array counter
-    byte sbiDecode = 0; // Special value from DECODABET
-    for (i = off; i < off + len; i++) { // Loop through source
-      sbiDecode = DECODABET[source[i] & 0xFF];
-      // White space, Equals sign, or legit Base64 character
-      // Note the values such as -5 and -9 in the
-      // DECODABETs at the top of the file.
-      if (sbiDecode >= WHITE_SPACE_ENC) {
-        if (sbiDecode >= EQUALS_SIGN_ENC) {
-          b4[b4Posn++] = source[i]; // Save non-whitespace
-          if (b4Posn > 3) { // Time to decode?
-            outBuffPosn += decode4to3(b4, 0, outBuff, outBuffPosn, options);
-            b4Posn = 0;
-            // If that was the equals sign, break out of 'for' loop
-            if (source[i] == EQUALS_SIGN) {
-              break;
-            } // end if: equals sign
-          } // end if: quartet built
-        } // end if: equals sign or better
-      } // end if: white space, equals sign or better
-      else {
-        // There's a bad input character in the Base64 stream.
-        throw new java.io.IOException(String.format(
-            "Bad Base64 input character decimal %d in array position %d",
-            source[i] & 0xFF,
-            i));
-      } // end else:
-    } // each input character
-    byte[] out = new byte[outBuffPosn];
-    System.arraycopy(outBuff, 0, out, 0, outBuffPosn);
-    return out;
-  } // end decode
+	/**
+	 * Low-level access to decoding ASCII characters in the form of a byte array. <strong>Ignores
+	 * GUNZIP option, if it's set.</strong> This is not generally a recommended method, although it is
+	 * used internally as part of the decoding process. Special case: if len = 0, an empty array is
+	 * returned. Still, if you need more speed and reduced memory footprint (and aren't gzipping),
+	 * consider this method.
+	 *
+	 * @param source
+	 *          The Base64 encoded data
+	 * @param off
+	 *          The offset of where to begin decoding
+	 * @param len
+	 *          The length of characters to decode
+	 * @param options
+	 *          Can specify options such as alphabet type to use
+	 * @return decoded data
+	 * @throws java.io.IOException
+	 *           If bogus characters exist in source data
+	 * @since 1.3
+	 */
+	public static byte[] decode(byte[] source, int off, int len, int options)
+			throws java.io.IOException {
+		// Lots of error checking and exception throwing
+		if (source == null) {
+			throw new NullPointerException("Cannot decode null source array.");
+		} // end if
+		if (off < 0 || off + len > source.length) {
+			throw new IllegalArgumentException(String.format(
+					"Source array with length %d cannot have offset of %d and process %d bytes.",
+					source.length,
+					off,
+					len));
+		} // end if
+		if (len == 0) {
+			return new byte[0];
+		} else if (len < 4) {
+			throw new IllegalArgumentException("Base64-encoded string must have at least four characters, but length specified was "
+					+ len);
+		} // end if
+		byte[] DECODABET = getDecodabet(options);
+		int len34 = len * 3 / 4; // Estimate on array size
+		byte[] outBuff = new byte[len34]; // Upper limit on size of output
+		int outBuffPosn = 0; // Keep track of where we're writing
+		byte[] b4 = new byte[4]; // Four byte buffer from source, eliminating white space
+		int b4Posn = 0; // Keep track of four byte input buffer
+		int i = 0; // Source array counter
+		byte sbiDecode = 0; // Special value from DECODABET
+		for (i = off; i < off + len; i++) { // Loop through source
+			sbiDecode = DECODABET[source[i] & 0xFF];
+			// White space, Equals sign, or legit Base64 character
+			// Note the values such as -5 and -9 in the
+			// DECODABETs at the top of the file.
+			if (sbiDecode >= WHITE_SPACE_ENC) {
+				if (sbiDecode >= EQUALS_SIGN_ENC) {
+					b4[b4Posn++] = source[i]; // Save non-whitespace
+					if (b4Posn > 3) { // Time to decode?
+						outBuffPosn += decode4to3(b4, 0, outBuff, outBuffPosn, options);
+						b4Posn = 0;
+						// If that was the equals sign, break out of 'for' loop
+						if (source[i] == EQUALS_SIGN) {
+							break;
+						} // end if: equals sign
+					} // end if: quartet built
+				} // end if: equals sign or better
+			} // end if: white space, equals sign or better
+			else {
+				// There's a bad input character in the Base64 stream.
+				throw new java.io.IOException(String.format(
+						"Bad Base64 input character decimal %d in array position %d",
+						source[i] & 0xFF,
+						i));
+			} // end else:
+		} // each input character
+		byte[] out = new byte[outBuffPosn];
+		System.arraycopy(outBuff, 0, out, 0, outBuffPosn);
+		return out;
+	} // end decode
 
-  /**
-   * Decodes data from Base64 notation, automatically detecting gzip-compressed data and
-   * decompressing it.
-   *
-   * @param s
-   *          the string to decode
-   * @return the decoded data
-   * @throws java.io.IOException
-   *           If there is a problem
-   * @since 1.4
-   */
-  public static byte[] decode(String s) throws java.io.IOException {
-    return decode(s, NO_OPTIONS);
-  }
+	/**
+	 * Decodes data from Base64 notation, automatically detecting gzip-compressed data and
+	 * decompressing it.
+	 *
+	 * @param s
+	 *          the string to decode
+	 * @return the decoded data
+	 * @throws java.io.IOException
+	 *           If there is a problem
+	 * @since 1.4
+	 */
+	public static byte[] decode(String s) throws java.io.IOException {
+		return decode(s, NO_OPTIONS);
+	}
 
-  /**
-   * Decodes data from Base64 notation, automatically detecting gzip-compressed data and
-   * decompressing it.
-   *
-   * @param s
-   *          the string to decode
-   * @param options
-   *          encode options such as URL_SAFE
-   * @return the decoded data
-   * @throws java.io.IOException
-   *           if there is an error
-   * @throws NullPointerException
-   *           if <tt>s</tt> is null
-   * @since 1.4
-   */
-  public static byte[] decode(String s, int options) throws java.io.IOException {
-    if (s == null) {
-      throw new NullPointerException("Input string was null.");
-    } // end if
-    byte[] bytes;
-    try {
-      bytes = s.getBytes(PREFERRED_ENCODING);
-    } // end try
-    catch (java.io.UnsupportedEncodingException uee) {
-      bytes = s.getBytes();
-    } // end catch
-    //</change>
-    // Decode
-    bytes = decode(bytes, 0, bytes.length, options);
-    // Check to see if it's gzip-compressed
-    // GZIP Magic Two-Byte Number: 0x8b1f (35615)
-    boolean dontGunzip = (options & DONT_GUNZIP) != 0;
-    if (bytes != null && bytes.length >= 4 && !dontGunzip) {
-      int head = bytes[0] & 0xff | bytes[1] << 8 & 0xff00;
-      if (java.util.zip.GZIPInputStream.GZIP_MAGIC == head) {
-        java.io.ByteArrayInputStream bais = null;
-        java.util.zip.GZIPInputStream gzis = null;
-        java.io.ByteArrayOutputStream baos = null;
-        byte[] buffer = new byte[2048];
-        int length = 0;
-        try {
-          baos = new java.io.ByteArrayOutputStream();
-          bais = new java.io.ByteArrayInputStream(bytes);
-          gzis = new java.util.zip.GZIPInputStream(bais);
-          while ((length = gzis.read(buffer)) >= 0) {
-            baos.write(buffer, 0, length);
-          } // end while: reading input
-          // No error? Get new bytes.
-          bytes = baos.toByteArray();
-        } // end try
-        catch (java.io.IOException e) {
-          e.printStackTrace();
-          // Just return originally-decoded bytes
-        } // end catch
-        finally {
-          try {
-            baos.close();
-          } catch (Exception e) {
-          }
-          try {
-            gzis.close();
-          } catch (Exception e) {
-          }
-          try {
-            bais.close();
-          } catch (Exception e) {
-          }
-        } // end finally
-      } // end if: gzipped
-    } // end if: bytes.length >= 2
-    return bytes;
-  } // end decode
+	/**
+	 * Decodes data from Base64 notation, automatically detecting gzip-compressed data and
+	 * decompressing it.
+	 *
+	 * @param s
+	 *          the string to decode
+	 * @param options
+	 *          encode options such as URL_SAFE
+	 * @return the decoded data
+	 * @throws java.io.IOException
+	 *           if there is an error
+	 * @throws NullPointerException
+	 *           if <tt>s</tt> is null
+	 * @since 1.4
+	 */
+	public static byte[] decode(String s, int options) throws java.io.IOException {
+		if (s == null) {
+			throw new NullPointerException("Input string was null.");
+		} // end if
+		byte[] bytes;
+		try {
+			bytes = s.getBytes(PREFERRED_ENCODING);
+		} // end try
+		catch (java.io.UnsupportedEncodingException uee) {
+			bytes = s.getBytes();
+		} // end catch
+		//</change>
+		// Decode
+		bytes = decode(bytes, 0, bytes.length, options);
+		// Check to see if it's gzip-compressed
+		// GZIP Magic Two-Byte Number: 0x8b1f (35615)
+		boolean dontGunzip = (options & DONT_GUNZIP) != 0;
+		if (bytes != null && bytes.length >= 4 && !dontGunzip) {
+			int head = bytes[0] & 0xff | bytes[1] << 8 & 0xff00;
+			if (java.util.zip.GZIPInputStream.GZIP_MAGIC == head) {
+				java.io.ByteArrayInputStream bais = null;
+				java.util.zip.GZIPInputStream gzis = null;
+				java.io.ByteArrayOutputStream baos = null;
+				byte[] buffer = new byte[2048];
+				int length = 0;
+				try {
+					baos = new java.io.ByteArrayOutputStream();
+					bais = new java.io.ByteArrayInputStream(bytes);
+					gzis = new java.util.zip.GZIPInputStream(bais);
+					while ((length = gzis.read(buffer)) >= 0) {
+						baos.write(buffer, 0, length);
+					} // end while: reading input
+					// No error? Get new bytes.
+					bytes = baos.toByteArray();
+				} // end try
+				catch (java.io.IOException e) {
+					e.printStackTrace();
+					// Just return originally-decoded bytes
+				} // end catch
+				finally {
+					try {
+						baos.close();
+					} catch (Exception e) {
+					}
+					try {
+						gzis.close();
+					} catch (Exception e) {
+					}
+					try {
+						bais.close();
+					} catch (Exception e) {
+					}
+				} // end finally
+			} // end if: gzipped
+		} // end if: bytes.length >= 2
+		return bytes;
+	} // end decode
 
-  /**
-   * Attempts to decode Base64 data and deserialize a Java Object within. Returns <tt>null</tt> if
-   * there was an error.
-   *
-   * @param encodedObject
-   *          The Base64 data to decode
-   * @return The decoded and deserialized object
-   * @throws NullPointerException
-   *           if encodedObject is null
-   * @throws java.io.IOException
-   *           if there is a general error
-   * @throws ClassNotFoundException
-   *           if the decoded object is of a class that cannot be found by the JVM
-   * @since 1.5
-   */
-  public static Object decodeToObject(String encodedObject) throws java.io.IOException,
-      java.lang.ClassNotFoundException {
-    return decodeToObject(encodedObject, NO_OPTIONS, null);
-  }
+	/**
+	 * Attempts to decode Base64 data and deserialize a Java Object within. Returns <tt>null</tt> if
+	 * there was an error.
+	 *
+	 * @param encodedObject
+	 *          The Base64 data to decode
+	 * @return The decoded and deserialized object
+	 * @throws NullPointerException
+	 *           if encodedObject is null
+	 * @throws java.io.IOException
+	 *           if there is a general error
+	 * @throws ClassNotFoundException
+	 *           if the decoded object is of a class that cannot be found by the JVM
+	 * @since 1.5
+	 */
+	public static Object decodeToObject(String encodedObject) throws java.io.IOException,
+	java.lang.ClassNotFoundException {
+		return decodeToObject(encodedObject, NO_OPTIONS, null);
+	}
 
-  /**
-   * Attempts to decode Base64 data and deserialize a Java Object within. Returns <tt>null</tt> if
-   * there was an error. If <tt>loader</tt> is not null, it will be the class loader used when
-   * deserializing.
-   *
-   * @param encodedObject
-   *          The Base64 data to decode
-   * @param options
-   *          Various parameters related to decoding
-   * @param loader
-   *          Optional class loader to use in deserializing classes.
-   * @return The decoded and deserialized object
-   * @throws NullPointerException
-   *           if encodedObject is null
-   * @throws java.io.IOException
-   *           if there is a general error
-   * @throws ClassNotFoundException
-   *           if the decoded object is of a class that cannot be found by the JVM
-   * @since 2.3.4
-   */
-  public static Object decodeToObject(String encodedObject, int options, final ClassLoader loader)
-      throws java.io.IOException, java.lang.ClassNotFoundException {
-    // Decode and gunzip if necessary
-    byte[] objBytes = decode(encodedObject, options);
-    java.io.ByteArrayInputStream bais = null;
-    java.io.ObjectInputStream ois = null;
-    Object obj = null;
-    try {
-      bais = new java.io.ByteArrayInputStream(objBytes);
-      // If no custom class loader is provided, use Java's builtin OIS.
-      if (loader == null) {
-        ois = new java.io.ObjectInputStream(bais);
-      } // end if: no loader provided
-      // Else make a customized object input stream that uses
-      // the provided class loader.
-      else {
-        ois = new java.io.ObjectInputStream(bais) {
-          @Override
-          public Class<?> resolveClass(java.io.ObjectStreamClass streamClass)
-              throws java.io.IOException, ClassNotFoundException {
-            Class<?> c = Class.forName(streamClass.getName(), false, loader);
-            if (c == null) {
-              return super.resolveClass(streamClass);
-            } else {
-              return c; // Class loader knows of this class.
-            } // end else: not null
-          } // end resolveClass
-        }; // end ois
-      } // end else: no custom class loader
-      obj = ois.readObject();
-    } // end try
-    catch (java.io.IOException e) {
-      throw e; // Catch and throw in order to execute finally{}
-    } // end catch
-    catch (java.lang.ClassNotFoundException e) {
-      throw e; // Catch and throw in order to execute finally{}
-    } // end catch
-    finally {
-      try {
-        bais.close();
-      } catch (Exception e) {
-      }
-      try {
-        ois.close();
-      } catch (Exception e) {
-      }
-    } // end finally
-    return obj;
-  } // end decodeObject
+	/**
+	 * Attempts to decode Base64 data and deserialize a Java Object within. Returns <tt>null</tt> if
+	 * there was an error. If <tt>loader</tt> is not null, it will be the class loader used when
+	 * deserializing.
+	 *
+	 * @param encodedObject
+	 *          The Base64 data to decode
+	 * @param options
+	 *          Various parameters related to decoding
+	 * @param loader
+	 *          Optional class loader to use in deserializing classes.
+	 * @return The decoded and deserialized object
+	 * @throws NullPointerException
+	 *           if encodedObject is null
+	 * @throws java.io.IOException
+	 *           if there is a general error
+	 * @throws ClassNotFoundException
+	 *           if the decoded object is of a class that cannot be found by the JVM
+	 * @since 2.3.4
+	 */
+	public static Object decodeToObject(String encodedObject, int options, final ClassLoader loader)
+			throws java.io.IOException, java.lang.ClassNotFoundException {
+		// Decode and gunzip if necessary
+		byte[] objBytes = decode(encodedObject, options);
+		java.io.ByteArrayInputStream bais = null;
+		java.io.ObjectInputStream ois = null;
+		Object obj = null;
+		try {
+			bais = new java.io.ByteArrayInputStream(objBytes);
+			// If no custom class loader is provided, use Java's builtin OIS.
+			if (loader == null) {
+				ois = new java.io.ObjectInputStream(bais);
+			} // end if: no loader provided
+			// Else make a customized object input stream that uses
+			// the provided class loader.
+			else {
+				ois = new java.io.ObjectInputStream(bais) {
+					@Override
+					public Class<?> resolveClass(java.io.ObjectStreamClass streamClass)
+							throws java.io.IOException, ClassNotFoundException {
+						Class<?> c = Class.forName(streamClass.getName(), false, loader);
+						if (c == null) {
+							return super.resolveClass(streamClass);
+						} else {
+							return c; // Class loader knows of this class.
+						} // end else: not null
+					} // end resolveClass
+				}; // end ois
+			} // end else: no custom class loader
+			obj = ois.readObject();
+		} // end try
+		catch (java.io.IOException e) {
+			throw e; // Catch and throw in order to execute finally{}
+		} // end catch
+		catch (java.lang.ClassNotFoundException e) {
+			throw e; // Catch and throw in order to execute finally{}
+		} // end catch
+		finally {
+			try {
+				bais.close();
+			} catch (Exception e) {
+			}
+			try {
+				ois.close();
+			} catch (Exception e) {
+			}
+		} // end finally
+		return obj;
+	} // end decodeObject
 
-  /**
-   * Convenience method for encoding data to a file.
-   *
-   * <p>
-   * As of v 2.3, if there is a error, the method will throw an java.io.IOException. <b>This is new
-   * to v2.3!</b> In earlier versions, it just returned false, but in retrospect that's a pretty
-   * poor way to handle it.
-   * </p>
-   *
-   * @param dataToEncode
-   *          byte array of data to encode in base64 form
-   * @param filename
-   *          Filename for saving encoded data
-   * @throws java.io.IOException
-   *           if there is an error
-   * @throws NullPointerException
-   *           if dataToEncode is null
-   * @since 2.1
-   */
-  public static void encodeToFile(byte[] dataToEncode, String filename) throws java.io.IOException {
-    if (dataToEncode == null) {
-      throw new NullPointerException("Data to encode was null.");
-    } // end iff
-    Base64.OutputStream bos = null;
-    try {
-      bos = new Base64.OutputStream(new java.io.FileOutputStream(filename), Base64.ENCODE);
-      bos.write(dataToEncode);
-    } // end try
-    catch (java.io.IOException e) {
-      throw e; // Catch and throw to execute finally{} block
-    } // end catch: java.io.IOException
-    finally {
-      try {
-        bos.close();
-      } catch (Exception e) {
-      }
-    } // end finally
-  } // end encodeToFile
+	/**
+	 * Convenience method for encoding data to a file.
+	 *
+	 * <p>
+	 * As of v 2.3, if there is a error, the method will throw an java.io.IOException. <b>This is new
+	 * to v2.3!</b> In earlier versions, it just returned false, but in retrospect that's a pretty
+	 * poor way to handle it.
+	 * </p>
+	 *
+	 * @param dataToEncode
+	 *          byte array of data to encode in base64 form
+	 * @param filename
+	 *          Filename for saving encoded data
+	 * @throws java.io.IOException
+	 *           if there is an error
+	 * @throws NullPointerException
+	 *           if dataToEncode is null
+	 * @since 2.1
+	 */
+	public static void encodeToFile(byte[] dataToEncode, String filename) throws java.io.IOException {
+		if (dataToEncode == null) {
+			throw new NullPointerException("Data to encode was null.");
+		} // end iff
+		Base64.OutputStream bos = null;
+		try {
+			bos = new Base64.OutputStream(new java.io.FileOutputStream(filename), Base64.ENCODE);
+			bos.write(dataToEncode);
+		} // end try
+		catch (java.io.IOException e) {
+			throw e; // Catch and throw to execute finally{} block
+		} // end catch: java.io.IOException
+		finally {
+			try {
+				bos.close();
+			} catch (Exception e) {
+			}
+		} // end finally
+	} // end encodeToFile
 
-  /**
-   * Convenience method for decoding data to a file.
-   *
-   * <p>
-   * As of v 2.3, if there is a error, the method will throw an java.io.IOException. <b>This is new
-   * to v2.3!</b> In earlier versions, it just returned false, but in retrospect that's a pretty
-   * poor way to handle it.
-   * </p>
-   *
-   * @param dataToDecode
-   *          Base64-encoded data as a string
-   * @param filename
-   *          Filename for saving decoded data
-   * @throws java.io.IOException
-   *           if there is an error
-   * @since 2.1
-   */
-  public static void decodeToFile(String dataToDecode, String filename) throws java.io.IOException {
-    Base64.OutputStream bos = null;
-    try {
-      bos = new Base64.OutputStream(new java.io.FileOutputStream(filename), Base64.DECODE);
-      bos.write(dataToDecode.getBytes(PREFERRED_ENCODING));
-    } // end try
-    catch (java.io.IOException e) {
-      throw e; // Catch and throw to execute finally{} block
-    } // end catch: java.io.IOException
-    finally {
-      try {
-        bos.close();
-      } catch (Exception e) {
-      }
-    } // end finally
-  } // end decodeToFile
+	/**
+	 * Convenience method for decoding data to a file.
+	 *
+	 * <p>
+	 * As of v 2.3, if there is a error, the method will throw an java.io.IOException. <b>This is new
+	 * to v2.3!</b> In earlier versions, it just returned false, but in retrospect that's a pretty
+	 * poor way to handle it.
+	 * </p>
+	 *
+	 * @param dataToDecode
+	 *          Base64-encoded data as a string
+	 * @param filename
+	 *          Filename for saving decoded data
+	 * @throws java.io.IOException
+	 *           if there is an error
+	 * @since 2.1
+	 */
+	public static void decodeToFile(String dataToDecode, String filename) throws java.io.IOException {
+		Base64.OutputStream bos = null;
+		try {
+			bos = new Base64.OutputStream(new java.io.FileOutputStream(filename), Base64.DECODE);
+			bos.write(dataToDecode.getBytes(PREFERRED_ENCODING));
+		} // end try
+		catch (java.io.IOException e) {
+			throw e; // Catch and throw to execute finally{} block
+		} // end catch: java.io.IOException
+		finally {
+			try {
+				bos.close();
+			} catch (Exception e) {
+			}
+		} // end finally
+	} // end decodeToFile
 
-  /**
-   * Convenience method for reading a base64-encoded file and decoding it.
-   *
-   * <p>
-   * As of v 2.3, if there is a error, the method will throw an java.io.IOException. <b>This is new
-   * to v2.3!</b> In earlier versions, it just returned false, but in retrospect that's a pretty
-   * poor way to handle it.
-   * </p>
-   *
-   * @param filename
-   *          Filename for reading encoded data
-   * @return decoded byte array
-   * @throws java.io.IOException
-   *           if there is an error
-   * @since 2.1
-   */
-  public static byte[] decodeFromFile(String filename) throws java.io.IOException {
-    byte[] decodedData = null;
-    Base64.InputStream bis = null;
-    try {
-      // Set up some useful variables
-      java.io.File file = new java.io.File(filename);
-      byte[] buffer = null;
-      int length = 0;
-      int numBytes = 0;
-      // Check for size of file
-      if (file.length() > Integer.MAX_VALUE) {
-        throw new java.io.IOException("File is too big for this convenience method ("
-            + file.length()
-            + " bytes).");
-      } // end if: file too big for int index
-      buffer = new byte[(int) file.length()];
-      // Open a stream
-      bis =
-          new Base64.InputStream(new java.io.BufferedInputStream(new java.io.FileInputStream(file)),
-              Base64.DECODE);
-      // Read until done
-      while ((numBytes = bis.read(buffer, length, 4096)) >= 0) {
-        length += numBytes;
-      } // end while
-      // Save in a variable to return
-      decodedData = new byte[length];
-      System.arraycopy(buffer, 0, decodedData, 0, length);
-    } // end try
-    catch (java.io.IOException e) {
-      throw e; // Catch and release to execute finally{}
-    } // end catch: java.io.IOException
-    finally {
-      try {
-        bis.close();
-      } catch (Exception e) {
-      }
-    } // end finally
-    return decodedData;
-  } // end decodeFromFile
+	/**
+	 * Convenience method for reading a base64-encoded file and decoding it.
+	 *
+	 * <p>
+	 * As of v 2.3, if there is a error, the method will throw an java.io.IOException. <b>This is new
+	 * to v2.3!</b> In earlier versions, it just returned false, but in retrospect that's a pretty
+	 * poor way to handle it.
+	 * </p>
+	 *
+	 * @param filename
+	 *          Filename for reading encoded data
+	 * @return decoded byte array
+	 * @throws java.io.IOException
+	 *           if there is an error
+	 * @since 2.1
+	 */
+	public static byte[] decodeFromFile(String filename) throws java.io.IOException {
+		byte[] decodedData = null;
+		Base64.InputStream bis = null;
+		try {
+			// Set up some useful variables
+			java.io.File file = new java.io.File(filename);
+			byte[] buffer = null;
+			int length = 0;
+			int numBytes = 0;
+			// Check for size of file
+			if (file.length() > Integer.MAX_VALUE) {
+				throw new java.io.IOException("File is too big for this convenience method ("
+						+ file.length()
+						+ " bytes).");
+			} // end if: file too big for int index
+			buffer = new byte[(int) file.length()];
+			// Open a stream
+			bis =
+					new Base64.InputStream(new java.io.BufferedInputStream(new java.io.FileInputStream(file)),
+							Base64.DECODE);
+			// Read until done
+			while ((numBytes = bis.read(buffer, length, 4096)) >= 0) {
+				length += numBytes;
+			} // end while
+			// Save in a variable to return
+			decodedData = new byte[length];
+			System.arraycopy(buffer, 0, decodedData, 0, length);
+		} // end try
+		catch (java.io.IOException e) {
+			throw e; // Catch and release to execute finally{}
+		} // end catch: java.io.IOException
+		finally {
+			try {
+				bis.close();
+			} catch (Exception e) {
+			}
+		} // end finally
+		return decodedData;
+	} // end decodeFromFile
 
-  /**
-   * Convenience method for reading a binary file and base64-encoding it.
-   *
-   * <p>
-   * As of v 2.3, if there is a error, the method will throw an java.io.IOException. <b>This is new
-   * to v2.3!</b> In earlier versions, it just returned false, but in retrospect that's a pretty
-   * poor way to handle it.
-   * </p>
-   *
-   * @param filename
-   *          Filename for reading binary data
-   * @return base64-encoded string
-   * @throws java.io.IOException
-   *           if there is an error
-   * @since 2.1
-   */
-  public static String encodeFromFile(String filename) throws java.io.IOException {
-    String encodedData = null;
-    Base64.InputStream bis = null;
-    try {
-      // Set up some useful variables
-      java.io.File file = new java.io.File(filename);
-      byte[] buffer = new byte[Math.max((int) (file.length() * 1.4 + 1), 40)]; // Need max() for math on small files (v2.2.1); Need +1 for a few corner cases (v2.3.5)
-      int length = 0;
-      int numBytes = 0;
-      // Open a stream
-      bis =
-          new Base64.InputStream(new java.io.BufferedInputStream(new java.io.FileInputStream(file)),
-              Base64.ENCODE);
-      // Read until done
-      while ((numBytes = bis.read(buffer, length, 4096)) >= 0) {
-        length += numBytes;
-      } // end while
-      // Save in a variable to return
-      encodedData = new String(buffer, 0, length, Base64.PREFERRED_ENCODING);
-    } // end try
-    catch (java.io.IOException e) {
-      throw e; // Catch and release to execute finally{}
-    } // end catch: java.io.IOException
-    finally {
-      try {
-        bis.close();
-      } catch (Exception e) {
-      }
-    } // end finally
-    return encodedData;
-  } // end encodeFromFile
+	/**
+	 * Convenience method for reading a binary file and base64-encoding it.
+	 *
+	 * <p>
+	 * As of v 2.3, if there is a error, the method will throw an java.io.IOException. <b>This is new
+	 * to v2.3!</b> In earlier versions, it just returned false, but in retrospect that's a pretty
+	 * poor way to handle it.
+	 * </p>
+	 *
+	 * @param filename
+	 *          Filename for reading binary data
+	 * @return base64-encoded string
+	 * @throws java.io.IOException
+	 *           if there is an error
+	 * @since 2.1
+	 */
+	public static String encodeFromFile(String filename) throws java.io.IOException {
+		String encodedData = null;
+		Base64.InputStream bis = null;
+		try {
+			// Set up some useful variables
+			java.io.File file = new java.io.File(filename);
+			byte[] buffer = new byte[Math.max((int) (file.length() * 1.4 + 1), 40)]; // Need max() for math on small files (v2.2.1); Need +1 for a few corner cases (v2.3.5)
+			int length = 0;
+			int numBytes = 0;
+			// Open a stream
+			bis =
+					new Base64.InputStream(new java.io.BufferedInputStream(new java.io.FileInputStream(file)),
+							Base64.ENCODE);
+			// Read until done
+			while ((numBytes = bis.read(buffer, length, 4096)) >= 0) {
+				length += numBytes;
+			} // end while
+			// Save in a variable to return
+			encodedData = new String(buffer, 0, length, Base64.PREFERRED_ENCODING);
+		} // end try
+		catch (java.io.IOException e) {
+			throw e; // Catch and release to execute finally{}
+		} // end catch: java.io.IOException
+		finally {
+			try {
+				bis.close();
+			} catch (Exception e) {
+			}
+		} // end finally
+		return encodedData;
+	} // end encodeFromFile
 
-  /**
-   * Reads <tt>infile</tt> and encodes it to <tt>outfile</tt>.
-   *
-   * @param infile
-   *          Input file
-   * @param outfile
-   *          Output file
-   * @throws java.io.IOException
-   *           if there is an error
-   * @since 2.2
-   */
-  public static void encodeFileToFile(String infile, String outfile) throws java.io.IOException {
-    String encoded = Base64.encodeFromFile(infile);
-    java.io.OutputStream out = null;
-    try {
-      out = new java.io.BufferedOutputStream(new java.io.FileOutputStream(outfile));
-      out.write(encoded.getBytes("US-ASCII")); // Strict, 7-bit output.
-    } // end try
-    catch (java.io.IOException e) {
-      throw e; // Catch and release to execute finally{}
-    } // end catch
-    finally {
-      try {
-        out.close();
-      } catch (Exception ex) {
-      }
-    } // end finally
-  } // end encodeFileToFile
+	/**
+	 * Reads <tt>infile</tt> and encodes it to <tt>outfile</tt>.
+	 *
+	 * @param infile
+	 *          Input file
+	 * @param outfile
+	 *          Output file
+	 * @throws java.io.IOException
+	 *           if there is an error
+	 * @since 2.2
+	 */
+	public static void encodeFileToFile(String infile, String outfile) throws java.io.IOException {
+		String encoded = Base64.encodeFromFile(infile);
+		java.io.OutputStream out = null;
+		try {
+			out = new java.io.BufferedOutputStream(new java.io.FileOutputStream(outfile));
+			out.write(encoded.getBytes("US-ASCII")); // Strict, 7-bit output.
+		} // end try
+		catch (java.io.IOException e) {
+			throw e; // Catch and release to execute finally{}
+		} // end catch
+		finally {
+			try {
+				out.close();
+			} catch (Exception ex) {
+			}
+		} // end finally
+	} // end encodeFileToFile
 
-  /**
-   * Reads <tt>infile</tt> and decodes it to <tt>outfile</tt>.
-   *
-   * @param infile
-   *          Input file
-   * @param outfile
-   *          Output file
-   * @throws java.io.IOException
-   *           if there is an error
-   * @since 2.2
-   */
-  public static void decodeFileToFile(String infile, String outfile) throws java.io.IOException {
-    byte[] decoded = Base64.decodeFromFile(infile);
-    java.io.OutputStream out = null;
-    try {
-      out = new java.io.BufferedOutputStream(new java.io.FileOutputStream(outfile));
-      out.write(decoded);
-    } // end try
-    catch (java.io.IOException e) {
-      throw e; // Catch and release to execute finally{}
-    } // end catch
-    finally {
-      try {
-        out.close();
-      } catch (Exception ex) {
-      }
-    } // end finally
-  } // end decodeFileToFile
+	/**
+	 * Reads <tt>infile</tt> and decodes it to <tt>outfile</tt>.
+	 *
+	 * @param infile
+	 *          Input file
+	 * @param outfile
+	 *          Output file
+	 * @throws java.io.IOException
+	 *           if there is an error
+	 * @since 2.2
+	 */
+	public static void decodeFileToFile(String infile, String outfile) throws java.io.IOException {
+		byte[] decoded = Base64.decodeFromFile(infile);
+		java.io.OutputStream out = null;
+		try {
+			out = new java.io.BufferedOutputStream(new java.io.FileOutputStream(outfile));
+			out.write(decoded);
+		} // end try
+		catch (java.io.IOException e) {
+			throw e; // Catch and release to execute finally{}
+		} // end catch
+		finally {
+			try {
+				out.close();
+			} catch (Exception ex) {
+			}
+		} // end finally
+	} // end decodeFileToFile
 
-  /* ********  I N N E R   C L A S S   I N P U T S T R E A M  ******** */
-  /**
-   * A {@link Base64.InputStream} will read data from another <tt>java.io.InputStream</tt>, given in
-   * the constructor, and encode/decode to/from Base64 notation on the fly.
-   *
-   * @see Base64
-   * @since 1.3
-   */
-  public static class InputStream extends java.io.FilterInputStream {
-    private final boolean encode; // Encoding or decoding
-    private int position; // Current position in the buffer
-    private final byte[] buffer; // Small buffer holding converted data
-    private final int bufferLength; // Length of buffer (3 or 4)
-    private int numSigBytes; // Number of meaningful bytes in the buffer
-    private int lineLength;
-    private final boolean breakLines; // Break lines at less than 80 characters
-    private final int options; // Record options used to create the stream.
-    private final byte[] decodabet; // Local copies to avoid extra method calls
+	/* ********  I N N E R   C L A S S   I N P U T S T R E A M  ******** */
+	/**
+	 * A {@link Base64.InputStream} will read data from another <tt>java.io.InputStream</tt>, given in
+	 * the constructor, and encode/decode to/from Base64 notation on the fly.
+	 *
+	 * @see Base64
+	 * @since 1.3
+	 */
+	public static class InputStream extends java.io.FilterInputStream {
+		private final boolean encode; // Encoding or decoding
+		private int position; // Current position in the buffer
+		private final byte[] buffer; // Small buffer holding converted data
+		private final int bufferLength; // Length of buffer (3 or 4)
+		private int numSigBytes; // Number of meaningful bytes in the buffer
+		private int lineLength;
+		private final boolean breakLines; // Break lines at less than 80 characters
+		private final int options; // Record options used to create the stream.
+		private final byte[] decodabet; // Local copies to avoid extra method calls
 
-    /**
-     * Constructs a {@link Base64.InputStream} in DECODE mode.
-     *
-     * @param in
-     *          the <tt>java.io.InputStream</tt> from which to read data.
-     * @since 1.3
-     */
-    public InputStream(java.io.InputStream in) {
-      this(in, DECODE);
-    } // end constructor
+		/**
+		 * Constructs a {@link Base64.InputStream} in DECODE mode.
+		 *
+		 * @param in
+		 *          the <tt>java.io.InputStream</tt> from which to read data.
+		 * @since 1.3
+		 */
+		public InputStream(java.io.InputStream in) {
+			this(in, DECODE);
+		} // end constructor
 
-    /**
-     * Constructs a {@link Base64.InputStream} in either ENCODE or DECODE mode.
-     * <p>
-     * Valid options:
-     *
-     * <pre>
-         *   ENCODE or DECODE: Encode or Decode as data is read.
-         *   DO_BREAK_LINES: break lines at 76 characters
-         *     (only meaningful when encoding)</i>
-         * </pre>
-     * <p>
-     * Example: <code>new Base64.InputStream( in, Base64.DECODE )</code>
-     *
-     *
-     * @param in
-     *          the <tt>java.io.InputStream</tt> from which to read data.
-     * @param options
-     *          Specified options
-     * @see Base64#ENCODE
-     * @see Base64#DECODE
-     * @see Base64#DO_BREAK_LINES
-     * @since 2.0
-     */
-    public InputStream(java.io.InputStream in, int options) {
-      super(in);
-      this.options = options; // Record for later
-      breakLines = (options & DO_BREAK_LINES) > 0;
-      encode = (options & ENCODE) > 0;
-      bufferLength = encode ? 4 : 3;
-      buffer = new byte[bufferLength];
-      position = -1;
-      lineLength = 0;
-      decodabet = getDecodabet(options);
-    } // end constructor
+		/**
+		 * Constructs a {@link Base64.InputStream} in either ENCODE or DECODE mode.
+		 * <p>
+		 * Valid options:
+		 *
+		 * <pre>
+		 *   ENCODE or DECODE: Encode or Decode as data is read.
+		 *   DO_BREAK_LINES: break lines at 76 characters
+		 *     (only meaningful when encoding)</i>
+		 * </pre>
+		 * <p>
+		 * Example: <code>new Base64.InputStream( in, Base64.DECODE )</code>
+		 *
+		 *
+		 * @param in
+		 *          the <tt>java.io.InputStream</tt> from which to read data.
+		 * @param options
+		 *          Specified options
+		 * @see Base64#ENCODE
+		 * @see Base64#DECODE
+		 * @see Base64#DO_BREAK_LINES
+		 * @since 2.0
+		 */
+		public InputStream(java.io.InputStream in, int options) {
+			super(in);
+			this.options = options; // Record for later
+			breakLines = (options & DO_BREAK_LINES) > 0;
+			encode = (options & ENCODE) > 0;
+			bufferLength = encode ? 4 : 3;
+			buffer = new byte[bufferLength];
+			position = -1;
+			lineLength = 0;
+			decodabet = getDecodabet(options);
+		} // end constructor
 
-    /**
-     * Reads enough of the input stream to convert to/from Base64 and returns the next byte.
-     *
-     * @return next byte
-     * @since 1.3
-     */
-    @Override
-    public int read() throws java.io.IOException {
-      // Do we need to get data?
-      if (position < 0) {
-        if (encode) {
-          byte[] b3 = new byte[3];
-          int numBinaryBytes = 0;
-          for (int i = 0; i < 3; i++) {
-            int b = in.read();
-            // If end of stream, b is -1.
-            if (b >= 0) {
-              b3[i] = (byte) b;
-              numBinaryBytes++;
-            } else {
-              break; // out of for loop
-            } // end else: end of stream
-          } // end for: each needed input byte
-          if (numBinaryBytes > 0) {
-            encode3to4(b3, 0, numBinaryBytes, buffer, 0, options);
-            position = 0;
-            numSigBytes = 4;
-          } // end if: got data
-          else {
-            return -1; // Must be end of stream
-          } // end else
-        } // end if: encoding
-        // Else decoding
-        else {
-          byte[] b4 = new byte[4];
-          int i = 0;
-          for (i = 0; i < 4; i++) {
-            // Read four "meaningful" bytes:
-            int b = 0;
-            do {
-              b = in.read();
-            } while (b >= 0 && decodabet[b & 0x7f] <= WHITE_SPACE_ENC);
-            if (b < 0) {
-              break; // Reads a -1 if end of stream
-            } // end if: end of stream
-            b4[i] = (byte) b;
-          } // end for: each needed input byte
-          if (i == 4) {
-            numSigBytes = decode4to3(b4, 0, buffer, 0, options);
-            position = 0;
-          } // end if: got four characters
-          else if (i == 0) {
-            return -1;
-          } // end else if: also padded correctly
-          else {
-            // Must have broken out from above.
-            throw new java.io.IOException("Improperly padded Base64 input.");
-          } // end
-        } // end else: decode
-      } // end else: get data
-      // Got data?
-      if (position >= 0) {
-        // End of relevant data?
-        if ( /*!encode &&*/position >= numSigBytes) {
-          return -1;
-        } // end if: got data
-        if (encode && breakLines && lineLength >= MAX_LINE_LENGTH) {
-          lineLength = 0;
-          return '\n';
-        } // end if
-        else {
-          lineLength++; // This isn't important when decoding
-                        // but throwing an extra "if" seems
-                        // just as wasteful.
-          int b = buffer[position++];
-          if (position >= bufferLength) {
-            position = -1;
-          } // end if: end
-          return b & 0xFF; // This is how you "cast" a byte that's
-                           // intended to be unsigned.
-        } // end else
-      } // end if: position >= 0
-      // Else error
-      else {
-        throw new java.io.IOException("Error in Base64 code reading stream.");
-      } // end else
-    } // end read
+		/**
+		 * Reads enough of the input stream to convert to/from Base64 and returns the next byte.
+		 *
+		 * @return next byte
+		 * @since 1.3
+		 */
+		@Override
+		public int read() throws java.io.IOException {
+			// Do we need to get data?
+			if (position < 0) {
+				if (encode) {
+					byte[] b3 = new byte[3];
+					int numBinaryBytes = 0;
+					for (int i = 0; i < 3; i++) {
+						int b = in.read();
+						// If end of stream, b is -1.
+						if (b >= 0) {
+							b3[i] = (byte) b;
+							numBinaryBytes++;
+						} else {
+							break; // out of for loop
+						} // end else: end of stream
+					} // end for: each needed input byte
+					if (numBinaryBytes > 0) {
+						encode3to4(b3, 0, numBinaryBytes, buffer, 0, options);
+						position = 0;
+						numSigBytes = 4;
+					} // end if: got data
+					else {
+						return -1; // Must be end of stream
+					} // end else
+				} // end if: encoding
+				// Else decoding
+				else {
+					byte[] b4 = new byte[4];
+					int i = 0;
+					for (i = 0; i < 4; i++) {
+						// Read four "meaningful" bytes:
+						int b = 0;
+						do {
+							b = in.read();
+						} while (b >= 0 && decodabet[b & 0x7f] <= WHITE_SPACE_ENC);
+						if (b < 0) {
+							break; // Reads a -1 if end of stream
+						} // end if: end of stream
+						b4[i] = (byte) b;
+					} // end for: each needed input byte
+					if (i == 4) {
+						numSigBytes = decode4to3(b4, 0, buffer, 0, options);
+						position = 0;
+					} // end if: got four characters
+					else if (i == 0) {
+						return -1;
+					} // end else if: also padded correctly
+					else {
+						// Must have broken out from above.
+						throw new java.io.IOException("Improperly padded Base64 input.");
+					} // end
+				} // end else: decode
+			} // end else: get data
+			// Got data?
+			if (position >= 0) {
+				// End of relevant data?
+				if ( /*!encode &&*/position >= numSigBytes) {
+					return -1;
+				} // end if: got data
+				if (encode && breakLines && lineLength >= MAX_LINE_LENGTH) {
+					lineLength = 0;
+					return '\n';
+				} // end if
+				else {
+					lineLength++; // This isn't important when decoding
+					// but throwing an extra "if" seems
+					// just as wasteful.
+					int b = buffer[position++];
+					if (position >= bufferLength) {
+						position = -1;
+					} // end if: end
+					return b & 0xFF; // This is how you "cast" a byte that's
+					// intended to be unsigned.
+				} // end else
+			} // end if: position >= 0
+			// Else error
+			else {
+				throw new java.io.IOException("Error in Base64 code reading stream.");
+			} // end else
+		} // end read
 
-    /**
-     * Calls {@link #read()} repeatedly until the end of stream is reached or <var>len</var> bytes
-     * are read. Returns number of bytes read into array or -1 if end of stream is encountered.
-     *
-     * @param dest
-     *          array to hold values
-     * @param off
-     *          offset for array
-     * @param len
-     *          max number of bytes to read into array
-     * @return bytes read into array or -1 if end of stream is encountered.
-     * @since 1.3
-     */
-    @Override
-    public int read(byte[] dest, int off, int len) throws java.io.IOException {
-      int i;
-      int b;
-      for (i = 0; i < len; i++) {
-        b = read();
-        if (b >= 0) {
-          dest[off + i] = (byte) b;
-        } else if (i == 0) {
-          return -1;
-        } else {
-          break; // Out of 'for' loop
-        } // Out of 'for' loop
-      } // end for: each byte read
-      return i;
-    } // end read
-  } // end inner class InputStream
-  /* ********  I N N E R   C L A S S   O U T P U T S T R E A M  ******** */
-  /**
-   * A {@link Base64.OutputStream} will write data to another <tt>java.io.OutputStream</tt>, given
-   * in the constructor, and encode/decode to/from Base64 notation on the fly.
-   *
-   * @see Base64
-   * @since 1.3
-   */
-  public static class OutputStream extends java.io.FilterOutputStream {
-    private final boolean encode;
-    private int position;
-    private byte[] buffer;
-    private final int bufferLength;
-    private int lineLength;
-    private final boolean breakLines;
-    private final byte[] b4; // Scratch used in a few places
-    private boolean suspendEncoding;
-    private final int options; // Record for later
-    private final byte[] decodabet; // Local copies to avoid extra method calls
-    private final boolean closeUnderlying;
+		/**
+		 * Calls {@link #read()} repeatedly until the end of stream is reached or <var>len</var> bytes
+		 * are read. Returns number of bytes read into array or -1 if end of stream is encountered.
+		 *
+		 * @param dest
+		 *          array to hold values
+		 * @param off
+		 *          offset for array
+		 * @param len
+		 *          max number of bytes to read into array
+		 * @return bytes read into array or -1 if end of stream is encountered.
+		 * @since 1.3
+		 */
+		@Override
+		public int read(byte[] dest, int off, int len) throws java.io.IOException {
+			int i;
+			int b;
+			for (i = 0; i < len; i++) {
+				b = read();
+				if (b >= 0) {
+					dest[off + i] = (byte) b;
+				} else if (i == 0) {
+					return -1;
+				} else {
+					break; // Out of 'for' loop
+				} // Out of 'for' loop
+			} // end for: each byte read
+			return i;
+		} // end read
+	} // end inner class InputStream
+	/* ********  I N N E R   C L A S S   O U T P U T S T R E A M  ******** */
+	/**
+	 * A {@link Base64.OutputStream} will write data to another <tt>java.io.OutputStream</tt>, given
+	 * in the constructor, and encode/decode to/from Base64 notation on the fly.
+	 *
+	 * @see Base64
+	 * @since 1.3
+	 */
+	public static class OutputStream extends java.io.FilterOutputStream {
+		private final boolean encode;
+		private int position;
+		private byte[] buffer;
+		private final int bufferLength;
+		private int lineLength;
+		private final boolean breakLines;
+		private final byte[] b4; // Scratch used in a few places
+		private boolean suspendEncoding;
+		private final int options; // Record for later
+		private final byte[] decodabet; // Local copies to avoid extra method calls
+		private final boolean closeUnderlying;
 
-    /**
-     * Constructs a {@link Base64.OutputStream} in ENCODE mode.
-     *
-     * @param out
-     *          the <tt>java.io.OutputStream</tt> to which data will be written.
-     * @since 1.3
-     */
-    public OutputStream(java.io.OutputStream out) {
-      this(out, ENCODE);
-    } // end constructor
+		/**
+		 * Constructs a {@link Base64.OutputStream} in ENCODE mode.
+		 *
+		 * @param out
+		 *          the <tt>java.io.OutputStream</tt> to which data will be written.
+		 * @since 1.3
+		 */
+		public OutputStream(java.io.OutputStream out) {
+			this(out, ENCODE);
+		} // end constructor
 
-    /**
-     * Constructs a {@link Base64.OutputStream} in ENCODE mode.
-     *
-     * @param out
-     *          the <tt>java.io.OutputStream</tt> to which data will be written.
-     * @since 1.3
-     */
-    public OutputStream(java.io.OutputStream out, boolean closeUnderlying) {
-      this(out, ENCODE, closeUnderlying);
-    } // end constructor
+		/**
+		 * Constructs a {@link Base64.OutputStream} in ENCODE mode.
+		 *
+		 * @param out
+		 *          the <tt>java.io.OutputStream</tt> to which data will be written.
+		 * @since 1.3
+		 */
+		public OutputStream(java.io.OutputStream out, boolean closeUnderlying) {
+			this(out, ENCODE, closeUnderlying);
+		} // end constructor
 
-    /**
-     * Constructs a {@link Base64.OutputStream} in either ENCODE or DECODE mode.
-     * <p>
-     * Valid options:
-     *
-     * <pre>
-         *   ENCODE or DECODE: Encode or Decode as data is read.
-         *   DO_BREAK_LINES: don't break lines at 76 characters
-         *     (only meaningful when encoding)</i>
-         * </pre>
-     * <p>
-     * Example: <code>new Base64.OutputStream( out, Base64.ENCODE )</code>
-     *
-     * @param out
-     *          the <tt>java.io.OutputStream</tt> to which data will be written.
-     * @param options
-     *          Specified options.
-     * @see Base64#ENCODE
-     * @see Base64#DECODE
-     * @see Base64#DO_BREAK_LINES
-     * @since 1.3
-     */
-    public OutputStream(java.io.OutputStream out, int options, boolean closeUnderlying) {
-      super(out);
-      this.closeUnderlying = closeUnderlying;
-      breakLines = (options & DO_BREAK_LINES) != 0;
-      encode = (options & ENCODE) != 0;
-      bufferLength = encode ? 3 : 4;
-      buffer = new byte[bufferLength];
-      position = 0;
-      lineLength = 0;
-      suspendEncoding = false;
-      b4 = new byte[4];
-      this.options = options;
-      decodabet = getDecodabet(options);
-    } // end constructor
+		/**
+		 * Constructs a {@link Base64.OutputStream} in either ENCODE or DECODE mode.
+		 * <p>
+		 * Valid options:
+		 *
+		 * <pre>
+		 *   ENCODE or DECODE: Encode or Decode as data is read.
+		 *   DO_BREAK_LINES: don't break lines at 76 characters
+		 *     (only meaningful when encoding)</i>
+		 * </pre>
+		 * <p>
+		 * Example: <code>new Base64.OutputStream( out, Base64.ENCODE )</code>
+		 *
+		 * @param out
+		 *          the <tt>java.io.OutputStream</tt> to which data will be written.
+		 * @param options
+		 *          Specified options.
+		 * @see Base64#ENCODE
+		 * @see Base64#DECODE
+		 * @see Base64#DO_BREAK_LINES
+		 * @since 1.3
+		 */
+		public OutputStream(java.io.OutputStream out, int options, boolean closeUnderlying) {
+			super(out);
+			this.closeUnderlying = closeUnderlying;
+			breakLines = (options & DO_BREAK_LINES) != 0;
+			encode = (options & ENCODE) != 0;
+			bufferLength = encode ? 3 : 4;
+			buffer = new byte[bufferLength];
+			position = 0;
+			lineLength = 0;
+			suspendEncoding = false;
+			b4 = new byte[4];
+			this.options = options;
+			decodabet = getDecodabet(options);
+		} // end constructor
 
-    public OutputStream(java.io.OutputStream out, int options) {
-      this(out, options, true);
-    }
+		public OutputStream(java.io.OutputStream out, int options) {
+			this(out, options, true);
+		}
 
-    /**
-     * Writes the byte to the output stream after converting to/from Base64 notation. When encoding,
-     * bytes are buffered three at a time before the output stream actually gets a write() call.
-     * When decoding, bytes are buffered four at a time.
-     *
-     * @param theByte
-     *          the byte to write
-     * @since 1.3
-     */
-    @Override
-    public void write(int theByte) throws java.io.IOException {
-      // Encoding suspended?
-      if (suspendEncoding) {
-        out.write(theByte);
-        return;
-      } // end if: supsended
-      // Encode?
-      if (encode) {
-        buffer[position++] = (byte) theByte;
-        if (position >= bufferLength) { // Enough to encode.
-          out.write(encode3to4(b4, buffer, bufferLength, options));
-          lineLength += 4;
-          if (breakLines && lineLength >= MAX_LINE_LENGTH) {
-            out.write(NEW_LINE);
-            lineLength = 0;
-          } // end if: end of line
-          position = 0;
-        } // end if: enough to output
-      } // end if: encoding
-      // Else, Decoding
-      else {
-        // Meaningful Base64 character?
-        if (decodabet[theByte & 0x7f] > WHITE_SPACE_ENC) {
-          buffer[position++] = (byte) theByte;
-          if (position >= bufferLength) { // Enough to output.
-            int len = Base64.decode4to3(buffer, 0, b4, 0, options);
-            out.write(b4, 0, len);
-            position = 0;
-          } // end if: enough to output
-        } // end if: meaningful base64 character
-        else if (decodabet[theByte & 0x7f] != WHITE_SPACE_ENC) {
-          throw new java.io.IOException("Invalid character in Base64 data.");
-        } // end else: not white space either
-      } // end else: decoding
-    } // end write
+		/**
+		 * Writes the byte to the output stream after converting to/from Base64 notation. When encoding,
+		 * bytes are buffered three at a time before the output stream actually gets a write() call.
+		 * When decoding, bytes are buffered four at a time.
+		 *
+		 * @param theByte
+		 *          the byte to write
+		 * @since 1.3
+		 */
+		@Override
+		public void write(int theByte) throws java.io.IOException {
+			// Encoding suspended?
+			if (suspendEncoding) {
+				out.write(theByte);
+				return;
+			} // end if: supsended
+			// Encode?
+			if (encode) {
+				buffer[position++] = (byte) theByte;
+				if (position >= bufferLength) { // Enough to encode.
+					out.write(encode3to4(b4, buffer, bufferLength, options));
+					lineLength += 4;
+					if (breakLines && lineLength >= MAX_LINE_LENGTH) {
+						out.write(NEW_LINE);
+						lineLength = 0;
+					} // end if: end of line
+					position = 0;
+				} // end if: enough to output
+			} // end if: encoding
+			// Else, Decoding
+			else {
+				// Meaningful Base64 character?
+				if (decodabet[theByte & 0x7f] > WHITE_SPACE_ENC) {
+					buffer[position++] = (byte) theByte;
+					if (position >= bufferLength) { // Enough to output.
+						int len = Base64.decode4to3(buffer, 0, b4, 0, options);
+						out.write(b4, 0, len);
+						position = 0;
+					} // end if: enough to output
+				} // end if: meaningful base64 character
+				else if (decodabet[theByte & 0x7f] != WHITE_SPACE_ENC) {
+					throw new java.io.IOException("Invalid character in Base64 data.");
+				} // end else: not white space either
+			} // end else: decoding
+		} // end write
 
-    /**
-     * Calls {@link #write(int)} repeatedly until <var>len</var> bytes are written.
-     *
-     * @param theBytes
-     *          array from which to read bytes
-     * @param off
-     *          offset for array
-     * @param len
-     *          max number of bytes to read into array
-     * @since 1.3
-     */
-    @Override
-    public void write(byte[] theBytes, int off, int len) throws java.io.IOException {
-      // Encoding suspended?
-      if (suspendEncoding) {
-        out.write(theBytes, off, len);
-        return;
-      } // end if: supsended
-      for (int i = 0; i < len; i++) {
-        write(theBytes[off + i]);
-      } // end for: each byte written
-    } // end write
+		/**
+		 * Calls {@link #write(int)} repeatedly until <var>len</var> bytes are written.
+		 *
+		 * @param theBytes
+		 *          array from which to read bytes
+		 * @param off
+		 *          offset for array
+		 * @param len
+		 *          max number of bytes to read into array
+		 * @since 1.3
+		 */
+		@Override
+		public void write(byte[] theBytes, int off, int len) throws java.io.IOException {
+			// Encoding suspended?
+			if (suspendEncoding) {
+				out.write(theBytes, off, len);
+				return;
+			} // end if: supsended
+			for (int i = 0; i < len; i++) {
+				write(theBytes[off + i]);
+			} // end for: each byte written
+		} // end write
 
-    /**
-     * Method added by PHIL. [Thanks, PHIL. -Rob] This pads the buffer without closing the stream.
-     *
-     * @throws java.io.IOException
-     *           if there's an error.
-     */
-    public void flushBase64() throws java.io.IOException {
-      if (position > 0) {
-        if (encode) {
-          out.write(encode3to4(b4, buffer, position, options));
-          position = 0;
-        } // end if: encoding
-        else {
-          throw new java.io.IOException("Base64 input not properly padded.");
-        } // end else: decoding
-      } // end if: buffer partially full
-    } // end flush
+		/**
+		 * Method added by PHIL. [Thanks, PHIL. -Rob] This pads the buffer without closing the stream.
+		 *
+		 * @throws java.io.IOException
+		 *           if there's an error.
+		 */
+		public void flushBase64() throws java.io.IOException {
+			if (position > 0) {
+				if (encode) {
+					out.write(encode3to4(b4, buffer, position, options));
+					position = 0;
+				} // end if: encoding
+				else {
+					throw new java.io.IOException("Base64 input not properly padded.");
+				} // end else: decoding
+			} // end if: buffer partially full
+		} // end flush
 
-    /**
-     * Flushes and closes (I think, in the superclass) the stream.
-     *
-     * @since 1.3
-     */
-    @Override
-    public void close() throws java.io.IOException {
-      // 1. Ensure that pending characters are written
-      flushBase64();
-      // 2. Actually close the stream
-      // Base class both flushes and closes.
-      if (closeUnderlying) {
-        super.close();
-        buffer = null;
-        out = null;
-      } else {
-        flush();
-      }
-    } // end close
+		/**
+		 * Flushes and closes (I think, in the superclass) the stream.
+		 *
+		 * @since 1.3
+		 */
+		@Override
+		public void close() throws java.io.IOException {
+			// 1. Ensure that pending characters are written
+			flushBase64();
+			// 2. Actually close the stream
+			// Base class both flushes and closes.
+			if (closeUnderlying) {
+				super.close();
+				buffer = null;
+				out = null;
+			} else {
+				flush();
+			}
+		} // end close
 
-    /**
-     * Suspends encoding of the stream. May be helpful if you need to embed a piece of
-     * base64-encoded data in a stream.
-     *
-     * @throws java.io.IOException
-     *           if there's an error flushing
-     * @since 1.5.1
-     */
-    public void suspendEncoding() throws java.io.IOException {
-      flushBase64();
-      suspendEncoding = true;
-    } // end suspendEncoding
+		/**
+		 * Suspends encoding of the stream. May be helpful if you need to embed a piece of
+		 * base64-encoded data in a stream.
+		 *
+		 * @throws java.io.IOException
+		 *           if there's an error flushing
+		 * @since 1.5.1
+		 */
+		public void suspendEncoding() throws java.io.IOException {
+			flushBase64();
+			suspendEncoding = true;
+		} // end suspendEncoding
 
-    /**
-     * Resumes encoding of the stream. May be helpful if you need to embed a piece of base64-encoded
-     * data in a stream.
-     *
-     * @since 1.5.1
-     */
-    public void resumeEncoding() {
-      suspendEncoding = false;
-    } // end resumeEncoding
-  } // end inner class OutputStream
+		/**
+		 * Resumes encoding of the stream. May be helpful if you need to embed a piece of base64-encoded
+		 * data in a stream.
+		 *
+		 * @since 1.5.1
+		 */
+		public void resumeEncoding() {
+			suspendEncoding = false;
+		} // end resumeEncoding
+	} // end inner class OutputStream
 } // end class Base64
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/base64/Base64Utils.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/base64/Base64Utils.java
index 21ea35e06..24e5d7adf 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/base64/Base64Utils.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/base64/Base64Utils.java
@@ -20,92 +20,92 @@
  * @coverage core.utils.base64
  */
 public final class Base64Utils {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Encoding utilities
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Returns the encoded form of the given unencoded string. The encoder uses the ISO-8859-1
-   * (Latin-1) encoding to convert the string to bytes. For greater control over the encoding,
-   * encode the string to bytes yourself and use encode(byte[]).
-   *
-   * @param unencoded
-   *          the string to encode.
-   * @return the encoded form of the unencoded string.
-   */
-  public static String encode(String unencoded) {
-    byte[] bytes = null;
-    try {
-      bytes = unencoded.getBytes("8859_1");
-    } catch (UnsupportedEncodingException ignored) {
-    }
-    return encode(bytes);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Encoding utilities
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Returns the encoded form of the given unencoded string. The encoder uses the ISO-8859-1
+	 * (Latin-1) encoding to convert the string to bytes. For greater control over the encoding,
+	 * encode the string to bytes yourself and use encode(byte[]).
+	 *
+	 * @param unencoded
+	 *          the string to encode.
+	 * @return the encoded form of the unencoded string.
+	 */
+	public static String encode(String unencoded) {
+		byte[] bytes = null;
+		try {
+			bytes = unencoded.getBytes("8859_1");
+		} catch (UnsupportedEncodingException ignored) {
+		}
+		return encode(bytes);
+	}
 
-  /**
-   * Returns the encoded form of the given unencoded string.
-   *
-   * @param bytes
-   *          the byte array to encode.
-   * @return the encoded form of the unencoded string.
-   */
-  public static String encode(byte[] bytes) {
-    try {
-      byte[] encoded = Base64.encodeBytesToBytes(bytes);
-      return new String(encoded, "8859_1");
-    } catch (UnsupportedEncodingException ignored) {
-      return null;
-    }
-  }
+	/**
+	 * Returns the encoded form of the given unencoded string.
+	 *
+	 * @param bytes
+	 *          the byte array to encode.
+	 * @return the encoded form of the unencoded string.
+	 */
+	public static String encode(byte[] bytes) {
+		try {
+			byte[] encoded = Base64.encodeBytesToBytes(bytes);
+			return new String(encoded, "8859_1");
+		} catch (UnsupportedEncodingException ignored) {
+			return null;
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Decoding utilities
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Returns the decoded form of the given encoded string, as a String. Note that not all binary
-   * data can be represented as a String, so this method should only be used for encoded String
-   * data. Use decodeToBytes() otherwise.
-   *
-   * @param encoded
-   *          the string to decode.
-   * @return the decoded form of the encoded string.
-   */
-  public static String decode(String encoded) {
-    return new String(decodeToBytes(encoded));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Decoding utilities
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Returns the decoded form of the given encoded string, as a String. Note that not all binary
+	 * data can be represented as a String, so this method should only be used for encoded String
+	 * data. Use decodeToBytes() otherwise.
+	 *
+	 * @param encoded
+	 *          the string to decode.
+	 * @return the decoded form of the encoded string.
+	 */
+	public static String decode(String encoded) {
+		return new String(decodeToBytes(encoded));
+	}
 
-  /**
-   * Returns the decoded form of the given encoded string as bytes.
-   *
-   * @param encoded
-   *          the string to decode.
-   * @return the decoded form of the encoded string.
-   */
-  public static byte[] decodeToBytes(String encoded) {
-    byte[] bytes = null;
-    try {
-      bytes = encoded.getBytes("8859_1");
-    } catch (UnsupportedEncodingException ignored) {
-      return null;
-    }
-    return decodeToBytes(bytes);
-  }
+	/**
+	 * Returns the decoded form of the given encoded string as bytes.
+	 *
+	 * @param encoded
+	 *          the string to decode.
+	 * @return the decoded form of the encoded string.
+	 */
+	public static byte[] decodeToBytes(String encoded) {
+		byte[] bytes = null;
+		try {
+			bytes = encoded.getBytes("8859_1");
+		} catch (UnsupportedEncodingException ignored) {
+			return null;
+		}
+		return decodeToBytes(bytes);
+	}
 
-  /**
-   * Returns the decoded form of the given encoded byte array.
-   *
-   * @param bytes
-   *          the byte array to decode.
-   * @return the decoded form of the encoded byte array.
-   */
-  public static byte[] decodeToBytes(byte[] bytes) {
-    try {
-      return Base64.decode(bytes);
-    } catch (IOException ignored) {
-      return null;
-    }
-  }
+	/**
+	 * Returns the decoded form of the given encoded byte array.
+	 *
+	 * @param bytes
+	 *          the byte array to decode.
+	 * @return the decoded form of the encoded byte array.
+	 */
+	public static byte[] decodeToBytes(byte[] bytes) {
+		try {
+			return Base64.decode(bytes);
+		} catch (IOException ignored) {
+			return null;
+		}
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/Binding.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/Binding.java
index 2e5da4190..9ebf78706 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/Binding.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/Binding.java
@@ -18,47 +18,47 @@
  * @author scheglov_ke
  */
 public final class Binding {
-  private final IDataEditor m_editor;
-  private final IDataProvider m_provider;
+	private final IDataEditor m_editor;
+	private final IDataProvider m_provider;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public Binding(IDataEditor editor, IDataProvider provider) {
-    m_editor = editor;
-    m_provider = provider;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public Binding(IDataEditor editor, IDataProvider provider) {
+		m_editor = editor;
+		m_provider = provider;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Internal access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Updates {@link IDataEditor} with value from {@link IDataProvider}.
-   *
-   * @param def
-   *          is <code>true</code> if default value should be requested from {@link IDataProvider}.
-   */
-  void updateEditor(boolean def) {
-    Object value = m_provider.getValue(def);
-    m_editor.setValue(value);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Internal access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Updates {@link IDataEditor} with value from {@link IDataProvider}.
+	 *
+	 * @param def
+	 *          is <code>true</code> if default value should be requested from {@link IDataProvider}.
+	 */
+	void updateEditor(boolean def) {
+		Object value = m_provider.getValue(def);
+		m_editor.setValue(value);
+	}
 
-  /**
-   * Updates {@link IDataProvider} with value from {@link IDataEditor}.
-   *
-   * @return {@link IStatus} that shows if result of update was successful.
-   */
-  IStatus updateProvider() {
-    try {
-      Object value = m_editor.getValue();
-      m_provider.setValue(value);
-      return ValidationStatus.STATUS_OK;
-    } catch (Throwable e) {
-      return ValidationStatus.error(e.getMessage(), e);
-    }
-  }
+	/**
+	 * Updates {@link IDataProvider} with value from {@link IDataEditor}.
+	 *
+	 * @return {@link IStatus} that shows if result of update was successful.
+	 */
+	IStatus updateProvider() {
+		try {
+			Object value = m_editor.getValue();
+			m_provider.setValue(value);
+			return ValidationStatus.STATUS_OK;
+		} catch (Throwable e) {
+			return ValidationStatus.error(e.getMessage(), e);
+		}
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/BindingStatus.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/BindingStatus.java
index 126297918..e2859daee 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/BindingStatus.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/BindingStatus.java
@@ -24,108 +24,108 @@
  * @since 1.0
  */
 public class BindingStatus extends MultiStatus {
-  private static final String PLUGIN_ID = "org.eclipse.wb";
+	private static final String PLUGIN_ID = "org.eclipse.wb";
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Constructs a new instance.
-   *
-   * @param pluginId
-   * @param code
-   * @param message
-   * @param exception
-   */
-  public BindingStatus(String pluginId, int code, String message, Throwable exception) {
-    super(pluginId, code, message, exception);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Constructs a new instance.
+	 *
+	 * @param pluginId
+	 * @param code
+	 * @param message
+	 * @param exception
+	 */
+	public BindingStatus(String pluginId, int code, String message, Throwable exception) {
+		super(pluginId, code, message, exception);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds the status to the multi status. The details of the status will be copied to the multi
-   * status if the severity is >= the current severity.
-   *
-   * @see org.eclipse.core.runtime.MultiStatus#add(org.eclipse.core.runtime.IStatus)
-   */
-  @Override
-  public void add(IStatus status) {
-    if (status.getSeverity() >= getSeverity()) {
-      setMessage(status.getMessage() != null ? status.getMessage() : ""); //$NON-NLS-1$
-      setException(status.getException());
-      setPlugin(status.getPlugin());
-      setCode(status.getCode());
-    }
-    super.add(status);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds the status to the multi status. The details of the status will be copied to the multi
+	 * status if the severity is >= the current severity.
+	 *
+	 * @see org.eclipse.core.runtime.MultiStatus#add(org.eclipse.core.runtime.IStatus)
+	 */
+	@Override
+	public void add(IStatus status) {
+		if (status.getSeverity() >= getSeverity()) {
+			setMessage(status.getMessage() != null ? status.getMessage() : ""); //$NON-NLS-1$
+			setException(status.getException());
+			setPlugin(status.getPlugin());
+			setCode(status.getCode());
+		}
+		super.add(status);
+	}
 
-  /**
-   * Instance initialized with the following values:
-   * <ul>
-   * <li>plugin = Policy.JFACE_DATABINDING</li>
-   * <li>severity = 0</li>
-   * <li>code = 0</li>
-   * <li>message = ""</li>
-   * <li>exception = null</li>
-   * </ul>
-   *
-   * @return status
-   */
-  public static BindingStatus ok() {
-    return new BindingStatus(PLUGIN_ID, 0, "", null); //$NON-NLS-1$
-  }
+	/**
+	 * Instance initialized with the following values:
+	 * <ul>
+	 * <li>plugin = Policy.JFACE_DATABINDING</li>
+	 * <li>severity = 0</li>
+	 * <li>code = 0</li>
+	 * <li>message = ""</li>
+	 * <li>exception = null</li>
+	 * </ul>
+	 *
+	 * @return status
+	 */
+	public static BindingStatus ok() {
+		return new BindingStatus(PLUGIN_ID, 0, "", null); //$NON-NLS-1$
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static int hashCode(Object[] array) {
-    final int prime = 31;
-    if (array == null) {
-      return 0;
-    }
-    int result = 1;
-    for (int index = 0; index < array.length; index++) {
-      result = prime * result + (array[index] == null ? 0 : array[index].hashCode());
-    }
-    return result;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static int hashCode(Object[] array) {
+		final int prime = 31;
+		if (array == null) {
+			return 0;
+		}
+		int result = 1;
+		for (int index = 0; index < array.length; index++) {
+			result = prime * result + (array[index] == null ? 0 : array[index].hashCode());
+		}
+		return result;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public int hashCode() {
-    final int prime = 31;
-    int result = 1;
-    result = prime * result + BindingStatus.hashCode(getChildren());
-    return result;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public int hashCode() {
+		final int prime = 31;
+		int result = 1;
+		result = prime * result + BindingStatus.hashCode(getChildren());
+		return result;
+	}
 
-  @Override
-  public boolean equals(Object obj) {
-    if (this == obj) {
-      return true;
-    }
-    if (obj == null) {
-      return false;
-    }
-    if (getClass() != obj.getClass()) {
-      return false;
-    }
-    final BindingStatus other = (BindingStatus) obj;
-    if (!Arrays.equals(getChildren(), other.getChildren())) {
-      return false;
-    }
-    return true;
-  }
+	@Override
+	public boolean equals(Object obj) {
+		if (this == obj) {
+			return true;
+		}
+		if (obj == null) {
+			return false;
+		}
+		if (getClass() != obj.getClass()) {
+			return false;
+		}
+		final BindingStatus other = (BindingStatus) obj;
+		if (!Arrays.equals(getChildren(), other.getChildren())) {
+			return false;
+		}
+		return true;
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/DataBindManager.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/DataBindManager.java
index 015baa86b..04e223a17 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/DataBindManager.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/DataBindManager.java
@@ -23,121 +23,121 @@
  * @author lobas_av
  */
 public final class DataBindManager {
-  private final List<Binding> m_bindings = new ArrayList<>();
+	private final List<Binding> m_bindings = new ArrayList<>();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Binding
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Bind data editor to data source.
-   */
-  public void bind(IDataEditor editor, IDataProvider provider) {
-    bind(editor, provider, false);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Binding
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Bind data editor to data source.
+	 */
+	public void bind(IDataEditor editor, IDataProvider provider) {
+		bind(editor, provider, false);
+	}
 
-  /**
-   * Bind data editor to data source.
-   */
-  public void bind(IDataEditor editor, IDataProvider provider, boolean setValue) {
-    m_bindings.add(new Binding(editor, provider));
-    // set value
-    if (setValue) {
-      editor.setValue(provider.getValue(false));
-    }
-  }
+	/**
+	 * Bind data editor to data source.
+	 */
+	public void bind(IDataEditor editor, IDataProvider provider, boolean setValue) {
+		m_bindings.add(new Binding(editor, provider));
+		// set value
+		if (setValue) {
+			editor.setValue(provider.getValue(false));
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Update
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final List<Runnable> m_updateRunnables = new ArrayList<>();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Update
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final List<Runnable> m_updateRunnables = new ArrayList<>();
 
-  /**
-   * Adds {@link Runnable} that should be run after values modifications, for example during
-   * {@link #performUpdate()} and {@link #performDefault()} or on event in {@link Widget}.
-   */
-  public void addUpdateRunnable(Runnable runnable) {
-    m_updateRunnables.add(runnable);
-  }
+	/**
+	 * Adds {@link Runnable} that should be run after values modifications, for example during
+	 * {@link #performUpdate()} and {@link #performDefault()} or on event in {@link Widget}.
+	 */
+	public void addUpdateRunnable(Runnable runnable) {
+		m_updateRunnables.add(runnable);
+	}
 
-  /**
-   * Specifies that registered update {@link Runnable}'s should be executed after event with given
-   * type in {@link Widget}.
-   */
-  public void addUpdateEvent(Widget widget, int eventType) {
-    widget.addListener(eventType, event -> runUpdateRunnables());
-  }
+	/**
+	 * Specifies that registered update {@link Runnable}'s should be executed after event with given
+	 * type in {@link Widget}.
+	 */
+	public void addUpdateEvent(Widget widget, int eventType) {
+		widget.addListener(eventType, event -> runUpdateRunnables());
+	}
 
-  /**
-   * Runs {@link Runnable}'s.
-   */
-  private void runUpdateRunnables() {
-    for (Runnable runnable : m_updateRunnables) {
-      runnable.run();
-    }
-  }
+	/**
+	 * Runs {@link Runnable}'s.
+	 */
+	private void runUpdateRunnables() {
+		for (Runnable runnable : m_updateRunnables) {
+			runnable.run();
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Update all editors of current data values.
-   */
-  public void performUpdate() {
-    updateEditors(false);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Update all editors of current data values.
+	 */
+	public void performUpdate() {
+		updateEditors(false);
+	}
 
-  /**
-   * Update all editors of default data values.
-   */
-  public void performDefault() {
-    updateEditors(true);
-  }
+	/**
+	 * Update all editors of default data values.
+	 */
+	public void performDefault() {
+		updateEditors(true);
+	}
 
-  /**
-   * Save all editor values into providers.
-   */
-  public void performCommit() {
-    updateProviders();
-  }
+	/**
+	 * Save all editor values into providers.
+	 */
+	public void performCommit() {
+		updateProviders();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Internal
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void updateProviders() {
-    MultiStatus multiStatus = BindingStatus.ok();
-    for (Binding binding : m_bindings) {
-      IStatus status = binding.updateProvider();
-      if (!mergeStatus(multiStatus, status)) {
-        return;
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Internal
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void updateProviders() {
+		MultiStatus multiStatus = BindingStatus.ok();
+		for (Binding binding : m_bindings) {
+			IStatus status = binding.updateProvider();
+			if (!mergeStatus(multiStatus, status)) {
+				return;
+			}
+		}
+	}
 
-  private void updateEditors(boolean def) {
-    for (Binding binding : m_bindings) {
-      binding.updateEditor(def);
-    }
-    runUpdateRunnables();
-  }
+	private void updateEditors(boolean def) {
+		for (Binding binding : m_bindings) {
+			binding.updateEditor(def);
+		}
+		runUpdateRunnables();
+	}
 
-  /**
-   * Incorporates the provided <code>newStatus</code> into the <code>multiStatus</code>.
-   *
-   * @return <code>true</code> if the update should proceed.
-   */
-  private boolean mergeStatus(MultiStatus multiStatus, IStatus newStatus) {
-    if (!newStatus.isOK()) {
-      multiStatus.add(newStatus);
-      return multiStatus.getSeverity() < IStatus.ERROR;
-    }
-    return true;
-  }
+	/**
+	 * Incorporates the provided <code>newStatus</code> into the <code>multiStatus</code>.
+	 *
+	 * @return <code>true</code> if the update should proceed.
+	 */
+	private boolean mergeStatus(MultiStatus multiStatus, IStatus newStatus) {
+		if (!newStatus.isOK()) {
+			multiStatus.add(newStatus);
+			return multiStatus.getSeverity() < IStatus.ERROR;
+		}
+		return true;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/IDataEditor.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/IDataEditor.java
index 205b154b6..c3d07dda3 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/IDataEditor.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/IDataEditor.java
@@ -16,13 +16,13 @@
  * @author lobas_av
  */
 public interface IDataEditor {
-  /**
-   * Returns current editor value.
-   */
-  Object getValue();
+	/**
+	 * Returns current editor value.
+	 */
+	Object getValue();
 
-  /**
-   * Sets new editor value.
-   */
-  void setValue(Object value);
+	/**
+	 * Sets new editor value.
+	 */
+	void setValue(Object value);
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/IDataProvider.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/IDataProvider.java
index 136a23ced..e1bd1cb2b 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/IDataProvider.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/IDataProvider.java
@@ -16,13 +16,13 @@
  * @author lobas_av
  */
 public interface IDataProvider {
-  /**
-   * @return the current or default value.
-   */
-  Object getValue(boolean def);
+	/**
+	 * @return the current or default value.
+	 */
+	Object getValue(boolean def);
 
-  /**
-   * Sets current value.
-   */
-  void setValue(Object value);
+	/**
+	 * Sets current value.
+	 */
+	void setValue(Object value);
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/ValidationStatus.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/ValidationStatus.java
index a6fda1a71..70674d4ab 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/ValidationStatus.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/ValidationStatus.java
@@ -19,157 +19,157 @@
  * Copy from JFace DB.
  */
 public final class ValidationStatus extends Status {
-  private static final String PLUGIN_ID = "org.eclipse.wb";
-  public static final IStatus STATUS_OK = new Status(OK, PLUGIN_ID, OK, "OK", null);
+	private static final String PLUGIN_ID = "org.eclipse.wb";
+	public static final IStatus STATUS_OK = new Status(OK, PLUGIN_ID, OK, "OK", null);
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Creates a new validation status with the given severity, message, and exception.
-   *
-   * @param severity
-   * @param message
-   * @param exception
-   */
-  private ValidationStatus(int severity, String message, Throwable exception) {
-    super(severity, PLUGIN_ID, IStatus.OK, message, exception);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Creates a new validation status with the given severity, message, and exception.
+	 *
+	 * @param severity
+	 * @param message
+	 * @param exception
+	 */
+	private ValidationStatus(int severity, String message, Throwable exception) {
+		super(severity, PLUGIN_ID, IStatus.OK, message, exception);
+	}
 
-  /**
-   * Creates a new validation status with the given severity and message.
-   *
-   * @param severity
-   * @param message
-   */
-  private ValidationStatus(int severity, String message) {
-    super(severity, PLUGIN_ID, IStatus.OK, message, null);
-  }
+	/**
+	 * Creates a new validation status with the given severity and message.
+	 *
+	 * @param severity
+	 * @param message
+	 */
+	private ValidationStatus(int severity, String message) {
+		super(severity, PLUGIN_ID, IStatus.OK, message, null);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Creation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Creates a new validation error status with the given message.
-   *
-   * @param message
-   * @return a new error status with the given message
-   */
-  public static IStatus error(String message) {
-    return new ValidationStatus(IStatus.ERROR, message);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Creation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Creates a new validation error status with the given message.
+	 *
+	 * @param message
+	 * @return a new error status with the given message
+	 */
+	public static IStatus error(String message) {
+		return new ValidationStatus(IStatus.ERROR, message);
+	}
 
-  /**
-   * Creates a new validation cancel status with the given message.
-   *
-   * @param message
-   * @return a new cancel status with the given message
-   */
-  public static IStatus cancel(String message) {
-    return new ValidationStatus(0x08/*IStatus.CANCEL*/, message);
-  }
+	/**
+	 * Creates a new validation cancel status with the given message.
+	 *
+	 * @param message
+	 * @return a new cancel status with the given message
+	 */
+	public static IStatus cancel(String message) {
+		return new ValidationStatus(0x08/*IStatus.CANCEL*/, message);
+	}
 
-  /**
-   * Creates a new validation error status with the given message and exception.
-   *
-   * @param message
-   * @param exception
-   * @return a new error status with the given message and exception
-   */
-  public static IStatus error(String message, Throwable exception) {
-    return new ValidationStatus(IStatus.ERROR, message, exception);
-  }
+	/**
+	 * Creates a new validation error status with the given message and exception.
+	 *
+	 * @param message
+	 * @param exception
+	 * @return a new error status with the given message and exception
+	 */
+	public static IStatus error(String message, Throwable exception) {
+		return new ValidationStatus(IStatus.ERROR, message, exception);
+	}
 
-  /**
-   * Creates a new validation warning status with the given message.
-   *
-   * @param message
-   * @return a new warning status with the given message
-   */
-  public static IStatus warning(String message) {
-    return new ValidationStatus(IStatus.WARNING, message);
-  }
+	/**
+	 * Creates a new validation warning status with the given message.
+	 *
+	 * @param message
+	 * @return a new warning status with the given message
+	 */
+	public static IStatus warning(String message) {
+		return new ValidationStatus(IStatus.WARNING, message);
+	}
 
-  /**
-   * Creates a new validation info status with the given message.
-   *
-   * @param message
-   * @return a new info status with the given message
-   */
-  public static IStatus info(String message) {
-    return new ValidationStatus(IStatus.INFO, message);
-  }
+	/**
+	 * Creates a new validation info status with the given message.
+	 *
+	 * @param message
+	 * @return a new info status with the given message
+	 */
+	public static IStatus info(String message) {
+		return new ValidationStatus(IStatus.INFO, message);
+	}
 
-  /**
-   * Returns an OK status.
-   *
-   * @return an OK status
-   */
-  public static IStatus ok() {
-    return STATUS_OK;
-  }
+	/**
+	 * Returns an OK status.
+	 *
+	 * @return an OK status
+	 */
+	public static IStatus ok() {
+		return STATUS_OK;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /*
-   * (non-Javadoc)
-   *
-   * @see java.lang.Object#hashCode()
-   */
-  @Override
-  public int hashCode() {
-    final int prime = 31;
-    int result = 1;
-    String message = getMessage();
-    int severity = getSeverity();
-    Throwable throwable = getException();
-    result = prime * result + (message == null ? 0 : message.hashCode());
-    result = prime * result + severity;
-    result = prime * result + (throwable == null ? 0 : throwable.hashCode());
-    return result;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/*
+	 * (non-Javadoc)
+	 *
+	 * @see java.lang.Object#hashCode()
+	 */
+	@Override
+	public int hashCode() {
+		final int prime = 31;
+		int result = 1;
+		String message = getMessage();
+		int severity = getSeverity();
+		Throwable throwable = getException();
+		result = prime * result + (message == null ? 0 : message.hashCode());
+		result = prime * result + severity;
+		result = prime * result + (throwable == null ? 0 : throwable.hashCode());
+		return result;
+	}
 
-  /**
-   * Equality is based upon instance equality rather than identity.
-   *
-   * @see java.lang.Object#equals(java.lang.Object)
-   */
-  @Override
-  public boolean equals(Object obj) {
-    if (this == obj) {
-      return true;
-    }
-    if (obj == null) {
-      return false;
-    }
-    if (getClass() != obj.getClass()) {
-      return false;
-    }
-    final ValidationStatus other = (ValidationStatus) obj;
-    if (getSeverity() != other.getSeverity()) {
-      return false;
-    }
-    if (getMessage() == null) {
-      if (other.getMessage() != null) {
-        return false;
-      }
-    } else if (!getMessage().equals(other.getMessage())) {
-      return false;
-    }
-    if (getException() == null) {
-      if (other.getException() != null) {
-        return false;
-      }
-    } else if (!getException().equals(other.getException())) {
-      return false;
-    }
-    return true;
-  }
+	/**
+	 * Equality is based upon instance equality rather than identity.
+	 *
+	 * @see java.lang.Object#equals(java.lang.Object)
+	 */
+	@Override
+	public boolean equals(Object obj) {
+		if (this == obj) {
+			return true;
+		}
+		if (obj == null) {
+			return false;
+		}
+		if (getClass() != obj.getClass()) {
+			return false;
+		}
+		final ValidationStatus other = (ValidationStatus) obj;
+		if (getSeverity() != other.getSeverity()) {
+			return false;
+		}
+		if (getMessage() == null) {
+			if (other.getMessage() != null) {
+				return false;
+			}
+		} else if (!getMessage().equals(other.getMessage())) {
+			return false;
+		}
+		if (getException() == null) {
+			if (other.getException() != null) {
+				return false;
+			}
+		} else if (!getException().equals(other.getException())) {
+			return false;
+		}
+		return true;
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/ValueUtils.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/ValueUtils.java
index 463636774..b2df9a058 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/ValueUtils.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/ValueUtils.java
@@ -20,60 +20,60 @@
  *
  */
 public final class ValueUtils {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Boolean
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Convert <code>boolean</code> to <code>{@link Boolean}</code> object.
-   */
-  public static Object booleanToObject(boolean value) {
-    return value ? Boolean.TRUE : Boolean.FALSE;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Boolean
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Convert <code>boolean</code> to <code>{@link Boolean}</code> object.
+	 */
+	public static Object booleanToObject(boolean value) {
+		return value ? Boolean.TRUE : Boolean.FALSE;
+	}
 
-  /**
-   * Extract <code>boolean</code> from given object.
-   */
-  public static boolean objectToBoolean(Object value) {
-    // extract from Boolean
-    if (value instanceof Boolean) {
-      Boolean booleanObject = (Boolean) value;
-      return booleanObject.booleanValue();
-    }
-    // extract from Object
-    String stringObject = ObjectUtils.toString(value);
-    return BooleanUtils.toBoolean(stringObject);
-  }
+	/**
+	 * Extract <code>boolean</code> from given object.
+	 */
+	public static boolean objectToBoolean(Object value) {
+		// extract from Boolean
+		if (value instanceof Boolean) {
+			Boolean booleanObject = (Boolean) value;
+			return booleanObject.booleanValue();
+		}
+		// extract from Object
+		String stringObject = ObjectUtils.toString(value);
+		return BooleanUtils.toBoolean(stringObject);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Boolean Array
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Extract <code>boolean</code> array from given object.
-   */
-  public static boolean[] objectToBooleanArray(Object value) {
-    // check boolean array
-    if (value instanceof boolean[]) {
-      return (boolean[]) value;
-    }
-    // check list of boolean's or String's
-    if (value instanceof List) {
-      // prepare list
-      List listValues = (List) value;
-      // check empty list
-      if (listValues.isEmpty()) {
-        return null;
-      }
-      // fill boolean array
-      boolean[] values = new boolean[listValues.size()];
-      for (int i = 0; i < values.length; i++) {
-        values[i] = objectToBoolean(listValues.get(i));
-      }
-      return values;
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Boolean Array
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Extract <code>boolean</code> array from given object.
+	 */
+	public static boolean[] objectToBooleanArray(Object value) {
+		// check boolean array
+		if (value instanceof boolean[]) {
+			return (boolean[]) value;
+		}
+		// check list of boolean's or String's
+		if (value instanceof List) {
+			// prepare list
+			List listValues = (List) value;
+			// check empty list
+			if (listValues.isEmpty()) {
+				return null;
+			}
+			// fill boolean array
+			boolean[] values = new boolean[listValues.size()];
+			for (int i = 0; i < values.length; i++) {
+				values[i] = objectToBoolean(listValues.get(i));
+			}
+			return values;
+		}
+		return null;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/editors/BooleanEditor.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/editors/BooleanEditor.java
index deca1a8e0..a4205762c 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/editors/BooleanEditor.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/editors/BooleanEditor.java
@@ -20,29 +20,29 @@
  * @author scheglov_ke
  */
 public class BooleanEditor implements IDataEditor {
-  private final BooleanDialogField m_field;
+	private final BooleanDialogField m_field;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public BooleanEditor(BooleanDialogField field) {
-    m_field = field;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public BooleanEditor(BooleanDialogField field) {
+		m_field = field;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IDataEditor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Object getValue() {
-    return ValueUtils.booleanToObject(m_field.getSelection());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IDataEditor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Object getValue() {
+		return ValueUtils.booleanToObject(m_field.getSelection());
+	}
 
-  @Override
-  public void setValue(Object value) {
-    m_field.setSelection(ValueUtils.objectToBoolean(value));
-  }
+	@Override
+	public void setValue(Object value) {
+		m_field.setSelection(ValueUtils.objectToBoolean(value));
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/editors/SelectionButtonEditor.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/editors/SelectionButtonEditor.java
index cf58f2cbc..8d6fb54cb 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/editors/SelectionButtonEditor.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/editors/SelectionButtonEditor.java
@@ -19,29 +19,29 @@
  *
  */
 public class SelectionButtonEditor implements IDataEditor {
-  private final SelectionButtonDialogField m_field;
+	private final SelectionButtonDialogField m_field;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SelectionButtonEditor(SelectionButtonDialogField field) {
-    m_field = field;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SelectionButtonEditor(SelectionButtonDialogField field) {
+		m_field = field;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IDataEditor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Object getValue() {
-    return ValueUtils.booleanToObject(m_field.isSelected());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IDataEditor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Object getValue() {
+		return ValueUtils.booleanToObject(m_field.isSelected());
+	}
 
-  @Override
-  public void setValue(Object value) {
-    m_field.setSelection(ValueUtils.objectToBoolean(value));
-  }
+	@Override
+	public void setValue(Object value) {
+		m_field.setSelection(ValueUtils.objectToBoolean(value));
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/editors/SelectionButtonGroupEditor.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/editors/SelectionButtonGroupEditor.java
index 8108525c9..983a46809 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/editors/SelectionButtonGroupEditor.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/editors/SelectionButtonGroupEditor.java
@@ -19,46 +19,46 @@
  *
  */
 public class SelectionButtonGroupEditor implements IDataEditor {
-  private final SelectionButtonDialogFieldGroup m_field;
-  private final int m_buttonCount;
+	private final SelectionButtonDialogFieldGroup m_field;
+	private final int m_buttonCount;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SelectionButtonGroupEditor(SelectionButtonDialogFieldGroup field, int buttonCount) {
-    m_field = field;
-    m_buttonCount = buttonCount;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SelectionButtonGroupEditor(SelectionButtonDialogFieldGroup field, int buttonCount) {
+		m_field = field;
+		m_buttonCount = buttonCount;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IDataEditor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Object getValue() {
-    boolean[] values = new boolean[m_buttonCount];
-    for (int i = 0; i < m_buttonCount; i++) {
-      values[i] = m_field.isSelected(i);
-    }
-    return values;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IDataEditor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Object getValue() {
+		boolean[] values = new boolean[m_buttonCount];
+		for (int i = 0; i < m_buttonCount; i++) {
+			values[i] = m_field.isSelected(i);
+		}
+		return values;
+	}
 
-  @Override
-  public void setValue(Object value) {
-    // prepare boolean array
-    boolean[] values = ValueUtils.objectToBooleanArray(value);
-    // set values
-    if (values != null && values.length == m_buttonCount) {
-      for (int i = 0; i < m_buttonCount; i++) {
-        m_field.setSelection(i, values[i]);
-      }
-    } else {
-      for (int i = 0; i < m_buttonCount; i++) {
-        m_field.setSelection(i, false);
-      }
-    }
-  }
+	@Override
+	public void setValue(Object value) {
+		// prepare boolean array
+		boolean[] values = ValueUtils.objectToBooleanArray(value);
+		// set values
+		if (values != null && values.length == m_buttonCount) {
+			for (int i = 0; i < m_buttonCount; i++) {
+				m_field.setSelection(i, values[i]);
+			}
+		} else {
+			for (int i = 0; i < m_buttonCount; i++) {
+				m_field.setSelection(i, false);
+			}
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/editors/SpinnerEditor.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/editors/SpinnerEditor.java
index e3ee726ef..49e648f9d 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/editors/SpinnerEditor.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/editors/SpinnerEditor.java
@@ -19,29 +19,29 @@
  * @author scheglov_ke
  */
 public class SpinnerEditor implements IDataEditor {
-  private final SpinnerDialogField m_field;
+	private final SpinnerDialogField m_field;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SpinnerEditor(SpinnerDialogField field) {
-    m_field = field;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SpinnerEditor(SpinnerDialogField field) {
+		m_field = field;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IDataEditor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Object getValue() {
-    return new Integer(m_field.getSelection());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IDataEditor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Object getValue() {
+		return new Integer(m_field.getSelection());
+	}
 
-  @Override
-  public void setValue(Object value) {
-    m_field.setSelection(((Integer) value).intValue());
-  }
+	@Override
+	public void setValue(Object value) {
+		m_field.setSelection(((Integer) value).intValue());
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/editors/StringComboEditor.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/editors/StringComboEditor.java
index 2b906a6bb..68ed2dad6 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/editors/StringComboEditor.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/editors/StringComboEditor.java
@@ -20,29 +20,29 @@
  *
  */
 public class StringComboEditor implements IDataEditor {
-  private final ComboDialogField m_field;
+	private final ComboDialogField m_field;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public StringComboEditor(ComboDialogField field) {
-    m_field = field;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public StringComboEditor(ComboDialogField field) {
+		m_field = field;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IDataEditor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Object getValue() {
-    return m_field.getText();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IDataEditor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Object getValue() {
+		return m_field.getText();
+	}
 
-  @Override
-  public void setValue(Object value) {
-    m_field.setText(ObjectUtils.toString(value));
-  }
+	@Override
+	public void setValue(Object value) {
+		m_field.setText(ObjectUtils.toString(value));
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/editors/StringEditor.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/editors/StringEditor.java
index d2a57b745..d819e443d 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/editors/StringEditor.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/editors/StringEditor.java
@@ -20,29 +20,29 @@
  *
  */
 public class StringEditor implements IDataEditor {
-  private final StringDialogField m_field;
+	private final StringDialogField m_field;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public StringEditor(StringDialogField field) {
-    m_field = field;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public StringEditor(StringDialogField field) {
+		m_field = field;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IDataEditor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Object getValue() {
-    return m_field.getText();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IDataEditor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Object getValue() {
+		return m_field.getText();
+	}
 
-  @Override
-  public void setValue(Object value) {
-    m_field.setText(ObjectUtils.toString(value));
-  }
+	@Override
+	public void setValue(Object value) {
+		m_field.setText(ObjectUtils.toString(value));
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/editors/StringListEditor.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/editors/StringListEditor.java
index 8816e44ef..3b7c5fc5d 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/editors/StringListEditor.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/editors/StringListEditor.java
@@ -25,44 +25,44 @@
  *
  */
 public class StringListEditor implements IDataEditor {
-  private final ListDialogField m_field;
-  private final String m_separator;
+	private final ListDialogField m_field;
+	private final String m_separator;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public StringListEditor(ListDialogField field, String separator) {
-    m_field = field;
-    m_separator = separator;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public StringListEditor(ListDialogField field, String separator) {
+		m_field = field;
+		m_separator = separator;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IDataEditor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Object getValue() {
-    StringBuffer buffer = new StringBuffer();
-    int count = m_field.getSize();
-    int last = count - 1;
-    for (int i = 0; i < count; i++) {
-      buffer.append(m_field.getElement(i));
-      if (i != last) {
-        buffer.append(m_separator);
-      }
-    }
-    return buffer.toString();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IDataEditor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Object getValue() {
+		StringBuffer buffer = new StringBuffer();
+		int count = m_field.getSize();
+		int last = count - 1;
+		for (int i = 0; i < count; i++) {
+			buffer.append(m_field.getElement(i));
+			if (i != last) {
+				buffer.append(m_separator);
+			}
+		}
+		return buffer.toString();
+	}
 
-  @Override
-  public void setValue(Object value) {
-    String stringValue = ObjectUtils.toString(value);
-    String[] values = StringUtils.split(stringValue, m_separator);
-    List elements = new ArrayList();
-    CollectionUtils.addAll(elements, values);
-    m_field.setElements(elements);
-  }
+	@Override
+	public void setValue(Object value) {
+		String stringValue = ObjectUtils.toString(value);
+		String[] values = StringUtils.split(stringValue, m_separator);
+		List elements = new ArrayList();
+		CollectionUtils.addAll(elements, values);
+		m_field.setElements(elements);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/editors/controls/AbstractControlActionsManager.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/editors/controls/AbstractControlActionsManager.java
index 881106863..da740fa63 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/editors/controls/AbstractControlActionsManager.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/editors/controls/AbstractControlActionsManager.java
@@ -39,131 +39,131 @@
  * @author mitin_aa
  */
 public abstract class AbstractControlActionsManager {
-  @SuppressWarnings("deprecation")
-  protected final Object[] COMMAND_HANDLER_IDS = new Object[]{
-      IWorkbenchActionDefinitionIds.COPY,
-      IWorkbenchActionDefinitionIds.CUT,
-      IWorkbenchActionDefinitionIds.PASTE,
-      IWorkbenchActionDefinitionIds.DELETE,
-      IWorkbenchActionDefinitionIds.SELECT_ALL,
-      IWorkbenchActionDefinitionIds.UNDO,
-      IWorkbenchActionDefinitionIds.REDO};
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected final Control m_control;
-  private boolean m_active = false;
-
-  public AbstractControlActionsManager(final Control control) {
-    m_control = control;
-    m_control.addFocusListener(new FocusListener() {
-      @Override
-      public void focusGained(FocusEvent e) {
-        activateHandlers();
-        m_active = true;
-      }
-
-      @Override
-      public void focusLost(FocusEvent e) {
-        deactivateHandlers();
-        m_active = false;
-      }
-    });
-    m_control.addDisposeListener(e -> {
-      if (m_active) {
-        // deactivate on dispose
-        deactivateHandlers();
-      }
-    });
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Handlers
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected static final IHandler EMPTY_HANDLER = new AbstractHandler() {
-    @Override
-    public Object execute(ExecutionEvent event) throws ExecutionException {
-      // do nothing
-      return null;
-    }
-
-    @Override
-    public boolean isEnabled() {
-      // of course, it is enabled ;)
-      return true;
-    }
-
-    @Override
-    public boolean isHandled() {
-      // we do not handle the actions; since action not handled, its' underlying SWT event
-      // would not be filtered by workbench, so it get a chance to be handled by SWT code
-      // or to be passed to the OS; see WorkbenchKeyboard.press() method.
-      return false;
-    }
-  };
-
-  /**
-   * @returns the global handler service.
-   */
-  public static IHandlerService getHandlerService() {
-    return PlatformUI.getWorkbench().getService(IHandlerService.class);
-  }
-
-  /**
-   * Activates the handlers for list of commands (see COMMAND_HANDLERS) with:<br>
-   * 1. The empty handler (except 'selectAll'), so underlying SWT event wouldn't be filtered by the
-   * workbench;<br>
-   * 2. Highest priority {@link Expression}, so this handler has a chance to be set.
-   */
-  protected void activateHandlers() {
-    IHandlerService service = getHandlerService();
-    for (int i = 0; i < COMMAND_HANDLER_IDS.length; ++i) {
-      String actionName = (String) COMMAND_HANDLER_IDS[i];
-      IHandler handler = getHandlerFor(actionName);
-      activateHandler(actionName, service, handler, new Expression() {
-        @Override
-        public EvaluationResult evaluate(IEvaluationContext context) throws CoreException {
-          return EvaluationResult.TRUE;
-        }
-
-        @Override
-        public void collectExpressionInfo(ExpressionInfo info) {
-          // get the highest priority
-          // note, if someone else has such priority, there will be key-binding conflicts logged.
-          info.markSystemPropertyAccessed();
-          info.markDefaultVariableAccessed();
-          info.addVariableNameAccess(ISources.ACTIVE_MENU_NAME);
-        }
-      });
-    }
-  }
-
-  protected IHandler getHandlerFor(String actionName) {
-    return EMPTY_HANDLER;
-  }
-
-  /**
-   * Activates handler and stores it into a collection for further deactivation.
-   */
-  private final List<IHandlerActivation> m_activations = Lists.newLinkedList();
-
-  private void activateHandler(String actionName,
-      IHandlerService service,
-      IHandler handler,
-      Expression highPriorityExpression) {
-    // activate handler and store it into a collection for further deactivation
-    m_activations.add(service.activateHandler(actionName, handler, highPriorityExpression));
-  }
-
-  /**
-   * Deactivates all handlers and clears handlers collection.
-   */
-  protected void deactivateHandlers() {
-    getHandlerService().deactivateHandlers(m_activations);
-    m_activations.clear();
-  }
+	@SuppressWarnings("deprecation")
+	protected final Object[] COMMAND_HANDLER_IDS = new Object[]{
+			IWorkbenchActionDefinitionIds.COPY,
+			IWorkbenchActionDefinitionIds.CUT,
+			IWorkbenchActionDefinitionIds.PASTE,
+			IWorkbenchActionDefinitionIds.DELETE,
+			IWorkbenchActionDefinitionIds.SELECT_ALL,
+			IWorkbenchActionDefinitionIds.UNDO,
+			IWorkbenchActionDefinitionIds.REDO};
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected final Control m_control;
+	private boolean m_active = false;
+
+	public AbstractControlActionsManager(final Control control) {
+		m_control = control;
+		m_control.addFocusListener(new FocusListener() {
+			@Override
+			public void focusGained(FocusEvent e) {
+				activateHandlers();
+				m_active = true;
+			}
+
+			@Override
+			public void focusLost(FocusEvent e) {
+				deactivateHandlers();
+				m_active = false;
+			}
+		});
+		m_control.addDisposeListener(e -> {
+			if (m_active) {
+				// deactivate on dispose
+				deactivateHandlers();
+			}
+		});
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Handlers
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected static final IHandler EMPTY_HANDLER = new AbstractHandler() {
+		@Override
+		public Object execute(ExecutionEvent event) throws ExecutionException {
+			// do nothing
+			return null;
+		}
+
+		@Override
+		public boolean isEnabled() {
+			// of course, it is enabled ;)
+			return true;
+		}
+
+		@Override
+		public boolean isHandled() {
+			// we do not handle the actions; since action not handled, its' underlying SWT event
+			// would not be filtered by workbench, so it get a chance to be handled by SWT code
+			// or to be passed to the OS; see WorkbenchKeyboard.press() method.
+			return false;
+		}
+	};
+
+	/**
+	 * @returns the global handler service.
+	 */
+	public static IHandlerService getHandlerService() {
+		return PlatformUI.getWorkbench().getService(IHandlerService.class);
+	}
+
+	/**
+	 * Activates the handlers for list of commands (see COMMAND_HANDLERS) with:<br>
+	 * 1. The empty handler (except 'selectAll'), so underlying SWT event wouldn't be filtered by the
+	 * workbench;<br>
+	 * 2. Highest priority {@link Expression}, so this handler has a chance to be set.
+	 */
+	protected void activateHandlers() {
+		IHandlerService service = getHandlerService();
+		for (int i = 0; i < COMMAND_HANDLER_IDS.length; ++i) {
+			String actionName = (String) COMMAND_HANDLER_IDS[i];
+			IHandler handler = getHandlerFor(actionName);
+			activateHandler(actionName, service, handler, new Expression() {
+				@Override
+				public EvaluationResult evaluate(IEvaluationContext context) throws CoreException {
+					return EvaluationResult.TRUE;
+				}
+
+				@Override
+				public void collectExpressionInfo(ExpressionInfo info) {
+					// get the highest priority
+					// note, if someone else has such priority, there will be key-binding conflicts logged.
+					info.markSystemPropertyAccessed();
+					info.markDefaultVariableAccessed();
+					info.addVariableNameAccess(ISources.ACTIVE_MENU_NAME);
+				}
+			});
+		}
+	}
+
+	protected IHandler getHandlerFor(String actionName) {
+		return EMPTY_HANDLER;
+	}
+
+	/**
+	 * Activates handler and stores it into a collection for further deactivation.
+	 */
+	private final List<IHandlerActivation> m_activations = Lists.newLinkedList();
+
+	private void activateHandler(String actionName,
+			IHandlerService service,
+			IHandler handler,
+			Expression highPriorityExpression) {
+		// activate handler and store it into a collection for further deactivation
+		m_activations.add(service.activateHandler(actionName, handler, highPriorityExpression));
+	}
+
+	/**
+	 * Deactivates all handlers and clears handlers collection.
+	 */
+	protected void deactivateHandlers() {
+		getHandlerService().deactivateHandlers(m_activations);
+		m_activations.clear();
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/editors/controls/CheckButtonEditor.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/editors/controls/CheckButtonEditor.java
index a600276b5..7776ae5c8 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/editors/controls/CheckButtonEditor.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/editors/controls/CheckButtonEditor.java
@@ -27,57 +27,57 @@
  * @author scheglov_ke
  */
 public final class CheckButtonEditor implements IDataEditor {
-  private final Button m_button;
+	private final Button m_button;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CheckButtonEditor(Button button) {
-    m_button = button;
-    // install listener for updating enablement state for dependent controls
-    m_button.addListener(SWT.Selection, event -> changeEnablement(m_button.getSelection()));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CheckButtonEditor(Button button) {
+		m_button = button;
+		// install listener for updating enablement state for dependent controls
+		m_button.addListener(SWT.Selection, event -> changeEnablement(m_button.getSelection()));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IDataEditor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void setValue(Object value) {
-    boolean selection = ValueUtils.objectToBoolean(value);
-    m_button.setSelection(selection);
-    changeEnablement(selection);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IDataEditor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void setValue(Object value) {
+		boolean selection = ValueUtils.objectToBoolean(value);
+		m_button.setSelection(selection);
+		changeEnablement(selection);
+	}
 
-  @Override
-  public Object getValue() {
-    return ValueUtils.booleanToObject(m_button.getSelection());
-  }
+	@Override
+	public Object getValue() {
+		return ValueUtils.booleanToObject(m_button.getSelection());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Enablement
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final List<Control> m_enableControls = new ArrayList<>();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Enablement
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final List<Control> m_enableControls = new ArrayList<>();
 
-  /**
-   * Add {@link Control} that should be enabled/disabled when button selected/de-selected.
-   */
-  public void addEnableControl(Control control) {
-    m_enableControls.add(control);
-    UiUtils.changeControlEnable(control, m_button.getSelection());
-  }
+	/**
+	 * Add {@link Control} that should be enabled/disabled when button selected/de-selected.
+	 */
+	public void addEnableControl(Control control) {
+		m_enableControls.add(control);
+		UiUtils.changeControlEnable(control, m_button.getSelection());
+	}
 
-  /**
-   * Updates enablement.
-   */
-  private void changeEnablement(boolean enable) {
-    for (Control control : m_enableControls) {
-      UiUtils.changeControlEnable(control, enable);
-    }
-  }
+	/**
+	 * Updates enablement.
+	 */
+	private void changeEnablement(boolean enable) {
+		for (Control control : m_enableControls) {
+			UiUtils.changeControlEnable(control, enable);
+		}
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/editors/controls/ComboSelectionEditor.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/editors/controls/ComboSelectionEditor.java
index 982b78220..ed20eb5b2 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/editors/controls/ComboSelectionEditor.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/editors/controls/ComboSelectionEditor.java
@@ -20,30 +20,30 @@
  * @author scheglov_ke
  */
 public final class ComboSelectionEditor implements IDataEditor {
-  private final Combo m_combo;
+	private final Combo m_combo;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ComboSelectionEditor(Combo combo) {
-    m_combo = combo;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ComboSelectionEditor(Combo combo) {
+		m_combo = combo;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IDataEditor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Object getValue() {
-    return new Integer(m_combo.getSelectionIndex());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IDataEditor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Object getValue() {
+		return new Integer(m_combo.getSelectionIndex());
+	}
 
-  @Override
-  public void setValue(Object value) {
-    int index = ((Integer) value).intValue();
-    m_combo.select(index);
-  }
+	@Override
+	public void setValue(Object value) {
+		int index = ((Integer) value).intValue();
+		m_combo.select(index);
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/editors/controls/ComboTextEditor.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/editors/controls/ComboTextEditor.java
index 40949bbef..f3cfc9ea5 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/editors/controls/ComboTextEditor.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/editors/controls/ComboTextEditor.java
@@ -20,29 +20,29 @@
  * @author scheglov_ke
  */
 public final class ComboTextEditor implements IDataEditor {
-  private final Combo m_combo;
+	private final Combo m_combo;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ComboTextEditor(Combo combo) {
-    m_combo = combo;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ComboTextEditor(Combo combo) {
+		m_combo = combo;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IDataEditor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Object getValue() {
-    return m_combo.getText();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IDataEditor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Object getValue() {
+		return m_combo.getText();
+	}
 
-  @Override
-  public void setValue(Object value) {
-    m_combo.setText((String) value);
-  }
+	@Override
+	public void setValue(Object value) {
+		m_combo.setText((String) value);
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/editors/controls/DefaultControlActionsManager.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/editors/controls/DefaultControlActionsManager.java
index de699df5a..4419364ad 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/editors/controls/DefaultControlActionsManager.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/editors/controls/DefaultControlActionsManager.java
@@ -23,49 +23,49 @@
  * @author sablin_aa
  */
 public class DefaultControlActionsManager extends AbstractControlActionsManager {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DefaultControlActionsManager(final Control control) {
-    super(control);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DefaultControlActionsManager(final Control control) {
+		super(control);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Handlers
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected IHandler getHandlerFor(String actionName) {
-    if (actionName.equalsIgnoreCase(IWorkbenchActionDefinitionIds.SELECT_ALL)) {
-      return SELECTALL_HANDLER;
-    }
-    return super.getHandlerFor(actionName);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Handlers
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected IHandler getHandlerFor(String actionName) {
+		if (actionName.equalsIgnoreCase(IWorkbenchActionDefinitionIds.SELECT_ALL)) {
+			return SELECTALL_HANDLER;
+		}
+		return super.getHandlerFor(actionName);
+	}
 
-  /**
-   * Handler for process "Select all" action.
-   */
-  private final IHandler SELECTALL_HANDLER = new AbstractHandler() {
-    @Override
-    public Object execute(ExecutionEvent event) throws ExecutionException {
-      selectAllExecuted();
-      return null;
-    }
+	/**
+	 * Handler for process "Select all" action.
+	 */
+	private final IHandler SELECTALL_HANDLER = new AbstractHandler() {
+		@Override
+		public Object execute(ExecutionEvent event) throws ExecutionException {
+			selectAllExecuted();
+			return null;
+		}
 
-    @Override
-    public boolean isEnabled() {
-      return true;
-    }
+		@Override
+		public boolean isEnabled() {
+			return true;
+		}
 
-    @Override
-    public boolean isHandled() {
-      return true;
-    }
-  };
+		@Override
+		public boolean isHandled() {
+			return true;
+		}
+	};
 
-  protected void selectAllExecuted() {
-  }
+	protected void selectAllExecuted() {
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/editors/controls/RadioButtonsEditor.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/editors/controls/RadioButtonsEditor.java
index 39eafd027..e6b596c80 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/editors/controls/RadioButtonsEditor.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/editors/controls/RadioButtonsEditor.java
@@ -26,77 +26,77 @@
  * @author scheglov_ke
  */
 public final class RadioButtonsEditor implements IDataEditor {
-  private final Button[] m_buttons;
-  private final int[] m_values;
+	private final Button[] m_buttons;
+	private final int[] m_values;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public RadioButtonsEditor(Button[] buttons, int[] values) {
-    m_buttons = buttons;
-    m_values = values;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public RadioButtonsEditor(Button[] buttons, int[] values) {
+		m_buttons = buttons;
+		m_values = values;
+	}
 
-  public RadioButtonsEditor(Button[] buttons) {
-    m_buttons = buttons;
-    m_values = getDefaultValuesForButtons();
-  }
+	public RadioButtonsEditor(Button[] buttons) {
+		m_buttons = buttons;
+		m_values = getDefaultValuesForButtons();
+	}
 
-  public RadioButtonsEditor(Composite composite) {
-    List<Button> buttons = new ArrayList<>();
-    //
-    Control[] children = composite.getChildren();
-    for (int i = 0; i < children.length; i++) {
-      Control control = children[i];
-      if (control instanceof Button && (control.getStyle() & SWT.RADIO) != 0) {
-        buttons.add((Button) control);
-      }
-    }
-    //
-    m_buttons = buttons.toArray(new Button[buttons.size()]);
-    m_values = getDefaultValuesForButtons();
-  }
+	public RadioButtonsEditor(Composite composite) {
+		List<Button> buttons = new ArrayList<>();
+		//
+		Control[] children = composite.getChildren();
+		for (int i = 0; i < children.length; i++) {
+			Control control = children[i];
+			if (control instanceof Button && (control.getStyle() & SWT.RADIO) != 0) {
+				buttons.add((Button) control);
+			}
+		}
+		//
+		m_buttons = buttons.toArray(new Button[buttons.size()]);
+		m_values = getDefaultValuesForButtons();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IDataEditor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Object getValue() {
-    for (int i = 0; i < m_buttons.length; i++) {
-      Button button = m_buttons[i];
-      if (button.getSelection()) {
-        return new Integer(m_values[i]);
-      }
-    }
-    return new Integer(m_values[0]);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IDataEditor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Object getValue() {
+		for (int i = 0; i < m_buttons.length; i++) {
+			Button button = m_buttons[i];
+			if (button.getSelection()) {
+				return new Integer(m_values[i]);
+			}
+		}
+		return new Integer(m_values[0]);
+	}
 
-  @Override
-  public void setValue(Object value) {
-    int intValue = ((Integer) value).intValue();
-    for (int i = 0; i < m_buttons.length; i++) {
-      Button button = m_buttons[i];
-      button.setSelection(m_values[i] == intValue);
-    }
-  }
+	@Override
+	public void setValue(Object value) {
+		int intValue = ((Integer) value).intValue();
+		for (int i = 0; i < m_buttons.length; i++) {
+			Button button = m_buttons[i];
+			button.setSelection(m_values[i] == intValue);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return default values [0, 1, ...] for current array of {@link Button}'s.
-   */
-  private int[] getDefaultValuesForButtons() {
-    int[] values = new int[m_buttons.length];
-    for (int i = 0; i < m_buttons.length; i++) {
-      values[i] = i;
-    }
-    return values;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return default values [0, 1, ...] for current array of {@link Button}'s.
+	 */
+	private int[] getDefaultValuesForButtons() {
+		int[] values = new int[m_buttons.length];
+		for (int i = 0; i < m_buttons.length; i++) {
+			values[i] = i;
+		}
+		return values;
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/editors/controls/TextSingleEditor.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/editors/controls/TextSingleEditor.java
index 8ab809330..ffbf296cb 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/editors/controls/TextSingleEditor.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/editors/controls/TextSingleEditor.java
@@ -20,35 +20,35 @@
  * @author scheglov_ke
  */
 public final class TextSingleEditor implements IDataEditor {
-  private final Text m_text;
+	private final Text m_text;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public TextSingleEditor(Text text) {
-    m_text = text;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public TextSingleEditor(Text text) {
+		m_text = text;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IDataEditor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Object getValue() {
-    return m_text.getText();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IDataEditor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Object getValue() {
+		return m_text.getText();
+	}
 
-  @Override
-  public void setValue(Object value) {
-    String text;
-    if (value instanceof String) {
-      text = (String) value;
-    } else {
-      text = value.toString();
-    }
-    m_text.setText(text);
-  }
+	@Override
+	public void setValue(Object value) {
+		String text;
+		if (value instanceof String) {
+			text = (String) value;
+		} else {
+			text = value.toString();
+		}
+		m_text.setText(text);
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/providers/AbstractPreferenceProvider.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/providers/AbstractPreferenceProvider.java
index 430bc2f46..30f274dfe 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/providers/AbstractPreferenceProvider.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/providers/AbstractPreferenceProvider.java
@@ -19,16 +19,16 @@
  *
  */
 public abstract class AbstractPreferenceProvider implements IDataProvider {
-  protected final IPreferenceStore m_store;
-  protected final String m_key;
+	protected final IPreferenceStore m_store;
+	protected final String m_key;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractPreferenceProvider(IPreferenceStore store, String key) {
-    m_store = store;
-    m_key = key;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractPreferenceProvider(IPreferenceStore store, String key) {
+		m_store = store;
+		m_key = key;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/providers/BooleanArrayPreferenceProvider.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/providers/BooleanArrayPreferenceProvider.java
index 33006fd99..fa4de2441 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/providers/BooleanArrayPreferenceProvider.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/providers/BooleanArrayPreferenceProvider.java
@@ -20,50 +20,50 @@
  *
  */
 public class BooleanArrayPreferenceProvider implements IDataProvider {
-  private final IPreferenceStore m_store;
-  private final String[] m_keys;
+	private final IPreferenceStore m_store;
+	private final String[] m_keys;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public BooleanArrayPreferenceProvider(IPreferenceStore store, String[] keys) {
-    m_store = store;
-    m_keys = keys;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public BooleanArrayPreferenceProvider(IPreferenceStore store, String[] keys) {
+		m_store = store;
+		m_keys = keys;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IDataProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Object getValue(boolean def) {
-    boolean[] values = new boolean[m_keys.length];
-    if (def) {
-      // store default values
-      for (int i = 0; i < values.length; i++) {
-        values[i] = m_store.getDefaultBoolean(m_keys[i]);
-      }
-    } else {
-      // store values
-      for (int i = 0; i < values.length; i++) {
-        values[i] = m_store.getBoolean(m_keys[i]);
-      }
-    }
-    return values;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IDataProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Object getValue(boolean def) {
+		boolean[] values = new boolean[m_keys.length];
+		if (def) {
+			// store default values
+			for (int i = 0; i < values.length; i++) {
+				values[i] = m_store.getDefaultBoolean(m_keys[i]);
+			}
+		} else {
+			// store values
+			for (int i = 0; i < values.length; i++) {
+				values[i] = m_store.getBoolean(m_keys[i]);
+			}
+		}
+		return values;
+	}
 
-  @Override
-  public void setValue(Object value) {
-    // prepare boolean array
-    boolean[] values = ValueUtils.objectToBooleanArray(value);
-    // check set values
-    if (values != null && values.length == m_keys.length) {
-      for (int i = 0; i < values.length; i++) {
-        m_store.setValue(m_keys[i], values[i]);
-      }
-    }
-  }
+	@Override
+	public void setValue(Object value) {
+		// prepare boolean array
+		boolean[] values = ValueUtils.objectToBooleanArray(value);
+		// check set values
+		if (values != null && values.length == m_keys.length) {
+			for (int i = 0; i < values.length; i++) {
+				m_store.setValue(m_keys[i], values[i]);
+			}
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/providers/BooleanPreferenceProvider.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/providers/BooleanPreferenceProvider.java
index d6a4adfe9..356f1224d 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/providers/BooleanPreferenceProvider.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/providers/BooleanPreferenceProvider.java
@@ -19,28 +19,28 @@
  *
  */
 public class BooleanPreferenceProvider extends AbstractPreferenceProvider {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public BooleanPreferenceProvider(IPreferenceStore store, String key) {
-    super(store, key);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public BooleanPreferenceProvider(IPreferenceStore store, String key) {
+		super(store, key);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IDataProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Object getValue(boolean def) {
-    boolean value = def ? m_store.getDefaultBoolean(m_key) : m_store.getBoolean(m_key);
-    return ValueUtils.booleanToObject(value);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IDataProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Object getValue(boolean def) {
+		boolean value = def ? m_store.getDefaultBoolean(m_key) : m_store.getBoolean(m_key);
+		return ValueUtils.booleanToObject(value);
+	}
 
-  @Override
-  public void setValue(Object value) {
-    m_store.setValue(m_key, ValueUtils.objectToBoolean(value));
-  }
+	@Override
+	public void setValue(Object value) {
+		m_store.setValue(m_key, ValueUtils.objectToBoolean(value));
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/providers/IntegerPreferenceProvider.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/providers/IntegerPreferenceProvider.java
index e926c9749..4b0aad5d5 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/providers/IntegerPreferenceProvider.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/providers/IntegerPreferenceProvider.java
@@ -18,34 +18,34 @@
  * @author scheglov_ke
  */
 public final class IntegerPreferenceProvider extends AbstractPreferenceProvider {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public IntegerPreferenceProvider(IPreferenceStore store, String key) {
-    super(store, key);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public IntegerPreferenceProvider(IPreferenceStore store, String key) {
+		super(store, key);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IDataProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Object getValue(boolean def) {
-    int value = def ? m_store.getDefaultInt(m_key) : m_store.getInt(m_key);
-    return new Integer(value);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IDataProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Object getValue(boolean def) {
+		int value = def ? m_store.getDefaultInt(m_key) : m_store.getInt(m_key);
+		return new Integer(value);
+	}
 
-  @Override
-  public void setValue(Object value) {
-    int intValue;
-    if (value instanceof Integer) {
-      intValue = ((Integer) value).intValue();
-    } else {
-      intValue = Integer.parseInt(value.toString());
-    }
-    m_store.setValue(m_key, intValue);
-  }
+	@Override
+	public void setValue(Object value) {
+		int intValue;
+		if (value instanceof Integer) {
+			intValue = ((Integer) value).intValue();
+		} else {
+			intValue = Integer.parseInt(value.toString());
+		}
+		m_store.setValue(m_key, intValue);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/providers/StringPreferenceProvider.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/providers/StringPreferenceProvider.java
index 3bbf1882c..cab19a54e 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/providers/StringPreferenceProvider.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/binding/providers/StringPreferenceProvider.java
@@ -19,27 +19,27 @@
  *
  */
 public class StringPreferenceProvider extends AbstractPreferenceProvider {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public StringPreferenceProvider(IPreferenceStore store, String key) {
-    super(store, key);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public StringPreferenceProvider(IPreferenceStore store, String key) {
+		super(store, key);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IDataProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Object getValue(boolean def) {
-    return def ? m_store.getDefaultString(m_key) : m_store.getString(m_key);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IDataProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Object getValue(boolean def) {
+		return def ? m_store.getDefaultString(m_key) : m_store.getString(m_key);
+	}
 
-  @Override
-  public void setValue(Object value) {
-    m_store.setValue(m_key, ObjectUtils.toString(value));
-  }
+	@Override
+	public void setValue(Object value) {
+		m_store.setValue(m_key, ObjectUtils.toString(value));
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/check/Assert.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/check/Assert.java
index a4c9a8600..e73fad49e 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/check/Assert.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/check/Assert.java
@@ -28,366 +28,366 @@
  * @coverage core.util
  */
 public final class Assert {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Assert() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Assert() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // "legal"
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Asserts that an argument is legal. If the given boolean is not <code>true</code>, an
-   * <code>IllegalArgumentException</code> is thrown.
-   *
-   * @param expression
-   *          the boolean expression of the check
-   * @return <code>true</code> if the check passes (does not return if the check fails)
-   * @exception IllegalArgumentException
-   *              if the legality test failed
-   */
-  public static boolean isLegal(boolean expression) {
-    return isLegal(expression, ""); //$NON-NLS-1$
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// "legal"
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Asserts that an argument is legal. If the given boolean is not <code>true</code>, an
+	 * <code>IllegalArgumentException</code> is thrown.
+	 *
+	 * @param expression
+	 *          the boolean expression of the check
+	 * @return <code>true</code> if the check passes (does not return if the check fails)
+	 * @exception IllegalArgumentException
+	 *              if the legality test failed
+	 */
+	public static boolean isLegal(boolean expression) {
+		return isLegal(expression, ""); //$NON-NLS-1$
+	}
 
-  /**
-   * Asserts that an argument is legal. If the given boolean is not <code>true</code>, an
-   * <code>IllegalArgumentException</code> is thrown. The given message is included in that
-   * exception, to aid debugging.
-   *
-   * @param expression
-   *          the boolean expression of the check
-   * @param message
-   *          the message to include in the exception
-   * @return <code>true</code> if the check passes (does not return if the check fails)
-   * @exception IllegalArgumentException
-   *              if the legality test failed
-   */
-  public static boolean isLegal(boolean expression, String message) {
-    if (!expression) {
-      throw new IllegalArgumentException(message);
-    }
-    return expression;
-  }
+	/**
+	 * Asserts that an argument is legal. If the given boolean is not <code>true</code>, an
+	 * <code>IllegalArgumentException</code> is thrown. The given message is included in that
+	 * exception, to aid debugging.
+	 *
+	 * @param expression
+	 *          the boolean expression of the check
+	 * @param message
+	 *          the message to include in the exception
+	 * @return <code>true</code> if the check passes (does not return if the check fails)
+	 * @exception IllegalArgumentException
+	 *              if the legality test failed
+	 */
+	public static boolean isLegal(boolean expression, String message) {
+		if (!expression) {
+			throw new IllegalArgumentException(message);
+		}
+		return expression;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // "null"
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Asserts that the given object is <code>null</code>. If this is not the case, some kind of
-   * unchecked exception is thrown.
-   *
-   * @param object
-   *          the value to test
-   */
-  public static void isNull(Object object) {
-    isNull(object, "null argument expected"); //$NON-NLS-1$
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// "null"
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Asserts that the given object is <code>null</code>. If this is not the case, some kind of
+	 * unchecked exception is thrown.
+	 *
+	 * @param object
+	 *          the value to test
+	 */
+	public static void isNull(Object object) {
+		isNull(object, "null argument expected"); //$NON-NLS-1$
+	}
 
-  /**
-   * Asserts that the given object is <code>null</code>. If this is not the case, some kind of
-   * unchecked exception is thrown. The given message is included in that exception, to aid
-   * debugging.
-   *
-   * @param object
-   *          the value to test
-   * @param message
-   *          the message to include in the exception
-   */
-  public static void isNull(Object object, String message) {
-    if (object != null) {
-      throw new AssertionFailedException(message);
-    }
-  }
+	/**
+	 * Asserts that the given object is <code>null</code>. If this is not the case, some kind of
+	 * unchecked exception is thrown. The given message is included in that exception, to aid
+	 * debugging.
+	 *
+	 * @param object
+	 *          the value to test
+	 * @param message
+	 *          the message to include in the exception
+	 */
+	public static void isNull(Object object, String message) {
+		if (object != null) {
+			throw new AssertionFailedException(message);
+		}
+	}
 
-  /**
-   * Asserts that the given object is not <code>null</code>. If this is not the case, some kind of
-   * unchecked exception is thrown. The given message is included in that exception, to aid
-   * debugging.
-   *
-   * @param object
-   *          the value to test
-   * @param errorFormat
-   *          the format of error message to produce if the check fails, as expected by
-   *          {@link String#format(String, Object...)}. For example
-   *          <code>"Execution flow problem. %s expected, but %s found."</code>.
-   * @param args
-   *          the arguments for {@code errorFormat}
-   */
-  public static void isNull(Object object, String errorFormat, Object... args) {
-    if (object != null) {
-      String message = String.format(errorFormat, args);
-      fail(message);
-    }
-  }
+	/**
+	 * Asserts that the given object is not <code>null</code>. If this is not the case, some kind of
+	 * unchecked exception is thrown. The given message is included in that exception, to aid
+	 * debugging.
+	 *
+	 * @param object
+	 *          the value to test
+	 * @param errorFormat
+	 *          the format of error message to produce if the check fails, as expected by
+	 *          {@link String#format(String, Object...)}. For example
+	 *          <code>"Execution flow problem. %s expected, but %s found."</code>.
+	 * @param args
+	 *          the arguments for {@code errorFormat}
+	 */
+	public static void isNull(Object object, String errorFormat, Object... args) {
+		if (object != null) {
+			String message = String.format(errorFormat, args);
+			fail(message);
+		}
+	}
 
-  /**
-   * @param errorFormat
-   *          the format of error message suitable for {@link MessageFormat}.
-   * @param errorFormat
-   *          the format of error message to produce if the check fails, as expected by
-   *          {@link MessageFormat}. For example
-   *          <code>"Execution flow problem. {0} expected, but {1} found."</code>.
-   */
-  public static void isNull2(Object object, String errorFormat, Object... args) {
-    if (object != null) {
-      String message = MessageFormat.format(errorFormat, args);
-      fail(message);
-    }
-  }
+	/**
+	 * @param errorFormat
+	 *          the format of error message suitable for {@link MessageFormat}.
+	 * @param errorFormat
+	 *          the format of error message to produce if the check fails, as expected by
+	 *          {@link MessageFormat}. For example
+	 *          <code>"Execution flow problem. {0} expected, but {1} found."</code>.
+	 */
+	public static void isNull2(Object object, String errorFormat, Object... args) {
+		if (object != null) {
+			String message = MessageFormat.format(errorFormat, args);
+			fail(message);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // not "null"
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Asserts that the given object is not <code>null</code>. If this is not the case, some kind of
-   * unchecked exception is thrown.
-   *
-   * @param object
-   *          the value to test
-   */
-  public static void isNotNull(Object object) {
-    isNotNull(object, "null argument"); //$NON-NLS-1$
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// not "null"
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Asserts that the given object is not <code>null</code>. If this is not the case, some kind of
+	 * unchecked exception is thrown.
+	 *
+	 * @param object
+	 *          the value to test
+	 */
+	public static void isNotNull(Object object) {
+		isNotNull(object, "null argument"); //$NON-NLS-1$
+	}
 
-  /**
-   * Asserts that the given object is not <code>null</code>. If this is not the case, some kind of
-   * unchecked exception is thrown. The given message is included in that exception, to aid
-   * debugging.
-   *
-   * @param object
-   *          the value to test
-   * @param message
-   *          the message to include in the exception
-   */
-  public static void isNotNull(Object object, String message) {
-    if (object == null) {
-      fail(message);
-    }
-  }
+	/**
+	 * Asserts that the given object is not <code>null</code>. If this is not the case, some kind of
+	 * unchecked exception is thrown. The given message is included in that exception, to aid
+	 * debugging.
+	 *
+	 * @param object
+	 *          the value to test
+	 * @param message
+	 *          the message to include in the exception
+	 */
+	public static void isNotNull(Object object, String message) {
+		if (object == null) {
+			fail(message);
+		}
+	}
 
-  /**
-   * Asserts that the given object is not <code>null</code>. If this is not the case, some kind of
-   * unchecked exception is thrown. The given message is included in that exception, to aid
-   * debugging.
-   *
-   * @param object
-   *          the value to test
-   * @param errorFormat
-   *          the format of error message to produce if the check fails, as expected by
-   *          {@link String#format(String, Object...)}. For example
-   *          <code>"Execution flow problem. %s expected, but %s found."</code>.
-   * @param args
-   *          the arguments for {@code errorFormat}
-   */
-  public static void isNotNull(Object object, String errorFormat, Object... args) {
-    if (object == null) {
-      fail(String.format(errorFormat, args));
-    }
-  }
+	/**
+	 * Asserts that the given object is not <code>null</code>. If this is not the case, some kind of
+	 * unchecked exception is thrown. The given message is included in that exception, to aid
+	 * debugging.
+	 *
+	 * @param object
+	 *          the value to test
+	 * @param errorFormat
+	 *          the format of error message to produce if the check fails, as expected by
+	 *          {@link String#format(String, Object...)}. For example
+	 *          <code>"Execution flow problem. %s expected, but %s found."</code>.
+	 * @param args
+	 *          the arguments for {@code errorFormat}
+	 */
+	public static void isNotNull(Object object, String errorFormat, Object... args) {
+		if (object == null) {
+			fail(String.format(errorFormat, args));
+		}
+	}
 
-  /**
-   * @param errorFormat
-   *          the format of error message suitable for {@link MessageFormat}.
-   * @param errorFormat
-   *          the format of error message to produce if the check fails, as expected by
-   *          {@link MessageFormat}. For example
-   *          <code>"Execution flow problem. {0} expected, but {1} found."</code>.
-   */
-  public static void isNotNull2(Object object, String errorFormat, Object... args) {
-    if (object == null) {
-      String message = MessageFormat.format(errorFormat, args);
-      fail(message);
-    }
-  }
+	/**
+	 * @param errorFormat
+	 *          the format of error message suitable for {@link MessageFormat}.
+	 * @param errorFormat
+	 *          the format of error message to produce if the check fails, as expected by
+	 *          {@link MessageFormat}. For example
+	 *          <code>"Execution flow problem. {0} expected, but {1} found."</code>.
+	 */
+	public static void isNotNull2(Object object, String errorFormat, Object... args) {
+		if (object == null) {
+			String message = MessageFormat.format(errorFormat, args);
+			fail(message);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Fail
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Fails with given message.
-   *
-   * @param message
-   *          the message to include in the exception
-   */
-  public static void fail(String message) {
-    throw new AssertionFailedException(message);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Fail
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Fails with given message.
+	 *
+	 * @param message
+	 *          the message to include in the exception
+	 */
+	public static void fail(String message) {
+		throw new AssertionFailedException(message);
+	}
 
-  /**
-   * @param errorFormat
-   *          the format of error message to produce if the check fails, as expected by
-   *          {@link MessageFormat}. For example <code>"{0} expected, but {1} found."</code>.
-   */
-  public static void fail(String errorFormat, Object... args) {
-    String message = MessageFormat.format(errorFormat, args);
-    throw new AssertionFailedException(message);
-  }
+	/**
+	 * @param errorFormat
+	 *          the format of error message to produce if the check fails, as expected by
+	 *          {@link MessageFormat}. For example <code>"{0} expected, but {1} found."</code>.
+	 */
+	public static void fail(String errorFormat, Object... args) {
+		String message = MessageFormat.format(errorFormat, args);
+		throw new AssertionFailedException(message);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // "true"
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Asserts that the given boolean is <code>true</code>. If this is not the case, some kind of
-   * unchecked exception is thrown.
-   *
-   * @param expression
-   *          the boolean expression of the check
-   * @return <code>true</code> if the check passes (does not return if the check fails)
-   */
-  public static boolean isTrue(boolean expression) {
-    return isTrue(expression, "assertion failed"); //$NON-NLS-1$
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// "true"
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Asserts that the given boolean is <code>true</code>. If this is not the case, some kind of
+	 * unchecked exception is thrown.
+	 *
+	 * @param expression
+	 *          the boolean expression of the check
+	 * @return <code>true</code> if the check passes (does not return if the check fails)
+	 */
+	public static boolean isTrue(boolean expression) {
+		return isTrue(expression, "assertion failed"); //$NON-NLS-1$
+	}
 
-  /**
-   * Asserts that the given boolean is <code>true</code>. If this is not the case, some kind of
-   * unchecked exception is thrown. The given message is included in that exception, to aid
-   * debugging.
-   *
-   * @param expression
-   *          the boolean expression of the check
-   * @param message
-   *          the message to include in the exception
-   * @return <code>true</code> if the check passes (does not return if the check fails)
-   */
-  public static boolean isTrue(boolean expression, String message) {
-    if (!expression) {
-      fail(message);
-    }
-    return expression;
-  }
+	/**
+	 * Asserts that the given boolean is <code>true</code>. If this is not the case, some kind of
+	 * unchecked exception is thrown. The given message is included in that exception, to aid
+	 * debugging.
+	 *
+	 * @param expression
+	 *          the boolean expression of the check
+	 * @param message
+	 *          the message to include in the exception
+	 * @return <code>true</code> if the check passes (does not return if the check fails)
+	 */
+	public static boolean isTrue(boolean expression, String message) {
+		if (!expression) {
+			fail(message);
+		}
+		return expression;
+	}
 
-  /**
-   * Asserts that the given boolean is <code>true</code>. If this is not the case, some kind of
-   * unchecked exception is thrown. The given message is included in that exception, to aid
-   * debugging.
-   *
-   * @param expression
-   *          the boolean expression of the check
-   * @param errorFormat
-   *          the format of error message to produce if the check fails, as expected by
-   *          {@link String#format(String, Object...)}. For example
-   *          <code>"Execution flow problem. %s expected, but %s found."</code>.
-   * @param args
-   *          the arguments for {@code errorFormat}
-   * @return <code>true</code> if the check passes (does not return if the check fails)
-   */
-  public static boolean isTrue(boolean expression, String errorFormat, Object... args) {
-    if (!expression) {
-      String message = String.format(errorFormat, args);
-      fail(message);
-    }
-    return expression;
-  }
+	/**
+	 * Asserts that the given boolean is <code>true</code>. If this is not the case, some kind of
+	 * unchecked exception is thrown. The given message is included in that exception, to aid
+	 * debugging.
+	 *
+	 * @param expression
+	 *          the boolean expression of the check
+	 * @param errorFormat
+	 *          the format of error message to produce if the check fails, as expected by
+	 *          {@link String#format(String, Object...)}. For example
+	 *          <code>"Execution flow problem. %s expected, but %s found."</code>.
+	 * @param args
+	 *          the arguments for {@code errorFormat}
+	 * @return <code>true</code> if the check passes (does not return if the check fails)
+	 */
+	public static boolean isTrue(boolean expression, String errorFormat, Object... args) {
+		if (!expression) {
+			String message = String.format(errorFormat, args);
+			fail(message);
+		}
+		return expression;
+	}
 
-  /**
-   * Asserts that the given boolean is <code>true</code>. If this is not the case, some kind of
-   * unchecked exception is thrown. The given message is included in that exception, to aid
-   * debugging.
-   *
-   * @param expression
-   *          the boolean expression to check.
-   * @param errorFormat
-   *          the format of error message to produce if the check fails, as expected by
-   *          {@link MessageFormat}. For example <code>"{0} expected, but {1} found."</code>.
-   */
-  public static boolean isTrue2(boolean expression, String errorFormat, Object... args) {
-    if (!expression) {
-      fail(errorFormat, args);
-    }
-    return expression;
-  }
+	/**
+	 * Asserts that the given boolean is <code>true</code>. If this is not the case, some kind of
+	 * unchecked exception is thrown. The given message is included in that exception, to aid
+	 * debugging.
+	 *
+	 * @param expression
+	 *          the boolean expression to check.
+	 * @param errorFormat
+	 *          the format of error message to produce if the check fails, as expected by
+	 *          {@link MessageFormat}. For example <code>"{0} expected, but {1} found."</code>.
+	 */
+	public static boolean isTrue2(boolean expression, String errorFormat, Object... args) {
+		if (!expression) {
+			fail(errorFormat, args);
+		}
+		return expression;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // equals
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Asserts that given actual value equals expected value. If this is not the case, some kind of
-   * unchecked exception is thrown.
-   *
-   * @param expected
-   *          the expected value
-   * @param the
-   *          actual value to check
-   */
-  public static void equals(int expected, int actual) {
-    equals(expected, actual, expected + " expected, but " + actual + " found");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// equals
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Asserts that given actual value equals expected value. If this is not the case, some kind of
+	 * unchecked exception is thrown.
+	 *
+	 * @param expected
+	 *          the expected value
+	 * @param the
+	 *          actual value to check
+	 */
+	public static void equals(int expected, int actual) {
+		equals(expected, actual, expected + " expected, but " + actual + " found");
+	}
 
-  /**
-   * Asserts that given actual value equals expected value. If this is not the case, some kind of
-   * unchecked exception is thrown. The given message is included in that exception, to aid
-   * debugging.
-   *
-   * @param expected
-   *          the expected value
-   * @param the
-   *          actual value to check
-   * @param message
-   *          the message to include in the exception
-   */
-  public static void equals(int expected, int actual, String message) {
-    if (expected != actual) {
-      fail(message);
-    }
-  }
+	/**
+	 * Asserts that given actual value equals expected value. If this is not the case, some kind of
+	 * unchecked exception is thrown. The given message is included in that exception, to aid
+	 * debugging.
+	 *
+	 * @param expected
+	 *          the expected value
+	 * @param the
+	 *          actual value to check
+	 * @param message
+	 *          the message to include in the exception
+	 */
+	public static void equals(int expected, int actual, String message) {
+		if (expected != actual) {
+			fail(message);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // instanceOf
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Asserts that given object is not <code>null</code> and has class compatible with given.
-   */
-  public static void instanceOf(Class<?> expectedClass, Object o) {
-    if (o == null) {
-      fail(expectedClass.getName() + " expected, but 'null' found.");
-    }
-    if (!expectedClass.isAssignableFrom(o.getClass())) {
-      fail(expectedClass.getName() + " expected, but " + o.getClass().getName() + " found.");
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// instanceOf
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Asserts that given object is not <code>null</code> and has class compatible with given.
+	 */
+	public static void instanceOf(Class<?> expectedClass, Object o) {
+		if (o == null) {
+			fail(expectedClass.getName() + " expected, but 'null' found.");
+		}
+		if (!expectedClass.isAssignableFrom(o.getClass())) {
+			fail(expectedClass.getName() + " expected, but " + o.getClass().getName() + " found.");
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Designer exception checks
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Asserts that the given boolean is <code>true</code>. If this is not the case,
-   * {@link DesignerException} is thrown.
-   *
-   * @param expression
-   *          the boolean expression of the check
-   * @param exceptionCode
-   *          the exception code, for example from {@link ICoreExceptionConstants}
-   * @param parameter
-   *          the parameter for {@link DesignerException}.
-   */
-  public static void isTrueException(boolean expression, int exceptionCode, Object... parameters) {
-    if (!expression) {
-      String paramStrings[] = new String[parameters.length];
-      for (int i = 0; i < parameters.length; i++) {
-        Object parameter = parameters[i];
-        paramStrings[i] = parameter != null ? parameter.toString() : "null";
-      }
-      throw new DesignerException(exceptionCode, paramStrings);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Designer exception checks
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Asserts that the given boolean is <code>true</code>. If this is not the case,
+	 * {@link DesignerException} is thrown.
+	 *
+	 * @param expression
+	 *          the boolean expression of the check
+	 * @param exceptionCode
+	 *          the exception code, for example from {@link ICoreExceptionConstants}
+	 * @param parameter
+	 *          the parameter for {@link DesignerException}.
+	 */
+	public static void isTrueException(boolean expression, int exceptionCode, Object... parameters) {
+		if (!expression) {
+			String paramStrings[] = new String[parameters.length];
+			for (int i = 0; i < parameters.length; i++) {
+				Object parameter = parameters[i];
+				paramStrings[i] = parameter != null ? parameter.toString() : "null";
+			}
+			throw new DesignerException(exceptionCode, paramStrings);
+		}
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/check/AssertionFailedException.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/check/AssertionFailedException.java
index 90c44cf10..c29fbb51a 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/check/AssertionFailedException.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/check/AssertionFailedException.java
@@ -18,20 +18,20 @@
  * @coverage core.util
  */
 public final class AssertionFailedException extends RuntimeException {
-  private static final long serialVersionUID = 0L;
+	private static final long serialVersionUID = 0L;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Constructs a new exception with the given message.
-   *
-   * @param detail
-   *          the message
-   */
-  public AssertionFailedException(String detail) {
-    super(detail);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Constructs a new exception with the given message.
+	 *
+	 * @param detail
+	 *          the message
+	 */
+	public AssertionFailedException(String detail) {
+		super(detail);
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/AbstractValidationComposite.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/AbstractValidationComposite.java
index 6a883e7c7..d0f3b3f45 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/AbstractValidationComposite.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/AbstractValidationComposite.java
@@ -20,58 +20,58 @@
  * @author scheglov_ke
  */
 public class AbstractValidationComposite extends Composite {
-  protected final IMessageContainer m_messageContainer;
+	protected final IMessageContainer m_messageContainer;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractValidationComposite(Composite parent, int style, IMessageContainer messageContainer) {
-    super(parent, style);
-    m_messageContainer = messageContainer;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractValidationComposite(Composite parent, int style, IMessageContainer messageContainer) {
+		super(parent, style);
+		m_messageContainer = messageContainer;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Validation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected final IDialogFieldListener m_validateListener = new IDialogFieldListener() {
-    @Override
-    public void dialogFieldChanged(DialogField field) {
-      validateAll();
-    }
-  };
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Validation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected final IDialogFieldListener m_validateListener = new IDialogFieldListener() {
+		@Override
+		public void dialogFieldChanged(DialogField field) {
+			validateAll();
+		}
+	};
 
-  /**
-   * Validate all and update {@link IMessageContainer}.
-   */
-  public final void validateAll() {
-    String errorMessage = validate();
-    m_messageContainer.setErrorMessage(errorMessage);
-  }
+	/**
+	 * Validate all and update {@link IMessageContainer}.
+	 */
+	public final void validateAll() {
+		String errorMessage = validate();
+		m_messageContainer.setErrorMessage(errorMessage);
+	}
 
-  /**
-   * Validate fields and returns error message or <code>null</code>.
-   */
-  protected String validate() {
-    return null;
-  }
+	/**
+	 * Validate fields and returns error message or <code>null</code>.
+	 */
+	protected String validate() {
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Configures given {@link DialogField} and creates corresponding {@link Control}'s.
-   */
-  protected final void doCreateField(DialogField dialogField, String labelText, int charsWidth) {
-    dialogField.setLabelText(labelText);
-    dialogField.setDialogFieldListener(m_validateListener);
-    // fill controls
-    int columns = ((GridLayout) getLayout()).numColumns;
-    DialogFieldUtils.fillControls(this, dialogField, columns, charsWidth);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Configures given {@link DialogField} and creates corresponding {@link Control}'s.
+	 */
+	protected final void doCreateField(DialogField dialogField, String labelText, int charsWidth) {
+		dialogField.setLabelText(labelText);
+		dialogField.setDialogFieldListener(m_validateListener);
+		// fill controls
+		int columns = ((GridLayout) getLayout()).numColumns;
+		DialogFieldUtils.fillControls(this, dialogField, columns, charsWidth);
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/AbstractValidationTitleAreaDialog.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/AbstractValidationTitleAreaDialog.java
index ee7f46df3..412333e44 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/AbstractValidationTitleAreaDialog.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/AbstractValidationTitleAreaDialog.java
@@ -29,127 +29,127 @@
  * @author scheglov_ke
  */
 public abstract class AbstractValidationTitleAreaDialog extends ResizableTitleAreaDialog {
-  private final String m_shellText;
-  private final String m_titleText;
-  private final Image m_titleImage;
-  private final String m_titleMessage;
+	private final String m_shellText;
+	private final String m_titleText;
+	private final Image m_titleImage;
+	private final String m_titleMessage;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractValidationTitleAreaDialog(Shell parentShell,
-      AbstractUIPlugin plugin,
-      String shellText,
-      String titleText,
-      Image titleImage,
-      String titleMessage) {
-    super(parentShell, plugin);
-    m_shellText = shellText;
-    m_titleText = titleText;
-    m_titleImage = titleImage;
-    m_titleMessage = titleMessage;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractValidationTitleAreaDialog(Shell parentShell,
+			AbstractUIPlugin plugin,
+			String shellText,
+			String titleText,
+			Image titleImage,
+			String titleMessage) {
+		super(parentShell, plugin);
+		m_shellText = shellText;
+		m_titleText = titleText;
+		m_titleImage = titleImage;
+		m_titleMessage = titleMessage;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Messages
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected final Control createContents(Composite parent) {
-    Control control = super.createContents(parent);
-    // configure Shell and title area
-    {
-      getShell().setText(m_shellText);
-      setTitle(m_titleText);
-      if (m_titleImage != null) {
-        setTitleImage(m_titleImage);
-      }
-      setMessage(m_titleMessage);
-    }
-    // do validation first time
-    {
-      m_validationEnabled = true;
-      validateAll();
-    }
-    //
-    return control;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Messages
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected final Control createContents(Composite parent) {
+		Control control = super.createContents(parent);
+		// configure Shell and title area
+		{
+			getShell().setText(m_shellText);
+			setTitle(m_titleText);
+			if (m_titleImage != null) {
+				setTitleImage(m_titleImage);
+			}
+			setMessage(m_titleMessage);
+		}
+		// do validation first time
+		{
+			m_validationEnabled = true;
+			validateAll();
+		}
+		//
+		return control;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected final Control createDialogArea(Composite parent) {
-    Composite area = (Composite) super.createDialogArea(parent);
-    //
-    Composite container = new Composite(area, SWT.NONE);
-    GridDataFactory.create(container).grab().fill();
-    createControls(container);
-    //
-    return area;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected final Control createDialogArea(Composite parent) {
+		Composite area = (Composite) super.createDialogArea(parent);
+		//
+		Composite container = new Composite(area, SWT.NONE);
+		GridDataFactory.create(container).grab().fill();
+		createControls(container);
+		//
+		return area;
+	}
 
-  /**
-   * Creates controls on this {@link TitleAreaDialog}.
-   */
-  protected abstract void createControls(Composite container);
+	/**
+	 * Creates controls on this {@link TitleAreaDialog}.
+	 */
+	protected abstract void createControls(Composite container);
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Validation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private boolean m_validationEnabled;
-  /**
-   * Implementation of {@link IDialogFieldListener} for {@link DialogField}'s validation.
-   */
-  protected final IDialogFieldListener m_validateListener = new IDialogFieldListener() {
-    @Override
-    public void dialogFieldChanged(DialogField field) {
-      validateAll();
-    }
-  };
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Validation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private boolean m_validationEnabled;
+	/**
+	 * Implementation of {@link IDialogFieldListener} for {@link DialogField}'s validation.
+	 */
+	protected final IDialogFieldListener m_validateListener = new IDialogFieldListener() {
+		@Override
+		public void dialogFieldChanged(DialogField field) {
+			validateAll();
+		}
+	};
 
-  /**
-   * Validate all and disable/enable "OK" button.
-   */
-  public final void validateAll() {
-    if (m_validationEnabled) {
-      // prepare error message
-      String errorMessage;
-      try {
-        errorMessage = validate();
-      } catch (Throwable e) {
-        errorMessage = e.getMessage();
-      }
-      // apply error message
-      setErrorMessage(errorMessage);
-      setValid(errorMessage == null);
-    }
-  }
+	/**
+	 * Validate all and disable/enable "OK" button.
+	 */
+	public final void validateAll() {
+		if (m_validationEnabled) {
+			// prepare error message
+			String errorMessage;
+			try {
+				errorMessage = validate();
+			} catch (Throwable e) {
+				errorMessage = e.getMessage();
+			}
+			// apply error message
+			setErrorMessage(errorMessage);
+			setValid(errorMessage == null);
+		}
+	}
 
-  /**
-   * Notifies that dialog is valid or not.
-   */
-  protected void setValid(boolean enabled) {
-    // enable/disable OK
-    {
-      Button button = getButton(IDialogConstants.OK_ID);
-      if (button != null) {
-        button.setEnabled(enabled);
-      }
-    }
-  }
+	/**
+	 * Notifies that dialog is valid or not.
+	 */
+	protected void setValid(boolean enabled) {
+		// enable/disable OK
+		{
+			Button button = getButton(IDialogConstants.OK_ID);
+			if (button != null) {
+				button.setEnabled(enabled);
+			}
+		}
+	}
 
-  /**
-   * Validate fields and returns error message or <code>null</code>.
-   */
-  protected String validate() throws Exception {
-    return null;
-  }
+	/**
+	 * Validate fields and returns error message or <code>null</code>.
+	 */
+	protected String validate() throws Exception {
+		return null;
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/BooleanDialogField.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/BooleanDialogField.java
index f0a900876..acf30d0b4 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/BooleanDialogField.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/BooleanDialogField.java
@@ -26,147 +26,147 @@
  * @author scheglov_ke
  */
 public final class BooleanDialogField extends DialogField {
-  private boolean m_selection;
-  private Button m_buttonControl;
-  private SelectionListener m_selectionListener;
-  private final boolean m_leftToRight;
+	private boolean m_selection;
+	private Button m_buttonControl;
+	private SelectionListener m_selectionListener;
+	private final boolean m_leftToRight;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public BooleanDialogField() {
-    this(false);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public BooleanDialogField() {
+		this(false);
+	}
 
-  /**
-   * Creates boolean field editor which looks like usual check-box if <code>leftToRight</code> is
-   * <code>true</code>.
-   *
-   * @param leftToRight
-   *          if <code>true</code> creates boolean field editor which looks like usual check-box.
-   */
-  public BooleanDialogField(boolean leftToRight) {
-    m_leftToRight = leftToRight;
-    m_selection = false;
-  }
+	/**
+	 * Creates boolean field editor which looks like usual check-box if <code>leftToRight</code> is
+	 * <code>true</code>.
+	 *
+	 * @param leftToRight
+	 *          if <code>true</code> creates boolean field editor which looks like usual check-box.
+	 */
+	public BooleanDialogField(boolean leftToRight) {
+		m_leftToRight = leftToRight;
+		m_selection = false;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Layout helpers
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Control[] doFillIntoGrid(Composite parent, int nColumns) {
-    assertEnoughColumns(nColumns);
-    // create controls and add layout data
-    Button button;
-    Label label;
-    if (m_leftToRight) {
-      button = getButtonControl(parent);
-      GridDataFactory.create(button).alignHF();
-      label = getLabelControl(parent);
-      GridDataFactory.create(label).spanH(nColumns - 1).alignHF();
-    } else {
-      label = getLabelControl(parent);
-      GridDataFactory.create(label).alignHF();
-      button = getButtonControl(parent);
-      GridDataFactory.create(button).spanH(nColumns - 1).alignHF();
-    }
-    //
-    return new Control[]{label, button};
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Layout helpers
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Control[] doFillIntoGrid(Composite parent, int nColumns) {
+		assertEnoughColumns(nColumns);
+		// create controls and add layout data
+		Button button;
+		Label label;
+		if (m_leftToRight) {
+			button = getButtonControl(parent);
+			GridDataFactory.create(button).alignHF();
+			label = getLabelControl(parent);
+			GridDataFactory.create(label).spanH(nColumns - 1).alignHF();
+		} else {
+			label = getLabelControl(parent);
+			GridDataFactory.create(label).alignHF();
+			button = getButtonControl(parent);
+			GridDataFactory.create(button).spanH(nColumns - 1).alignHF();
+		}
+		//
+		return new Control[]{label, button};
+	}
 
-  @Override
-  public int getNumberOfControls() {
-    return 2;
-  }
+	@Override
+	public int getNumberOfControls() {
+		return 2;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // UI creation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Creates or returns the created check box control.
-   *
-   * @param parent
-   *          The parent composite or <code>null</code> when the widget has already been created.
-   */
-  public Button getButtonControl(Composite parent) {
-    if (m_buttonControl == null) {
-      assertCompositeNotNull(parent);
-      m_selectionListener = new SelectionListener() {
-        @Override
-        public void widgetSelected(SelectionEvent e) {
-          doModifySelection(e);
-        }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// UI creation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Creates or returns the created check box control.
+	 *
+	 * @param parent
+	 *          The parent composite or <code>null</code> when the widget has already been created.
+	 */
+	public Button getButtonControl(Composite parent) {
+		if (m_buttonControl == null) {
+			assertCompositeNotNull(parent);
+			m_selectionListener = new SelectionListener() {
+				@Override
+				public void widgetSelected(SelectionEvent e) {
+					doModifySelection(e);
+				}
 
-        @Override
-        public void widgetDefaultSelected(SelectionEvent e) {
-          doModifySelection(e);
-        }
-      };
-      //
-      m_buttonControl = new Button(parent, SWT.CHECK);
-      // initialize
-      m_buttonControl.setSelection(m_selection);
-      m_buttonControl.addSelectionListener(m_selectionListener);
-      m_buttonControl.setFont(parent.getFont());
-      m_buttonControl.setEnabled(isEnabled());
-    }
-    return m_buttonControl;
-  }
+				@Override
+				public void widgetDefaultSelected(SelectionEvent e) {
+					doModifySelection(e);
+				}
+			};
+			//
+			m_buttonControl = new Button(parent, SWT.CHECK);
+			// initialize
+			m_buttonControl.setSelection(m_selection);
+			m_buttonControl.addSelectionListener(m_selectionListener);
+			m_buttonControl.setFont(parent.getFont());
+			m_buttonControl.setEnabled(isEnabled());
+		}
+		return m_buttonControl;
+	}
 
-  private void doModifySelection(SelectionEvent e) {
-    if (isOkToUse(m_buttonControl)) {
-      m_selection = m_buttonControl.getSelection();
-    }
-    dialogFieldChanged();
-  }
+	private void doModifySelection(SelectionEvent e) {
+		if (isOkToUse(m_buttonControl)) {
+			m_selection = m_buttonControl.getSelection();
+		}
+		dialogFieldChanged();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Value access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Gets the selection.
-   */
-  public boolean getSelection() {
-    return m_selection;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Value access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Gets the selection.
+	 */
+	public boolean getSelection() {
+		return m_selection;
+	}
 
-  /**
-   * Sets the selection. Triggers a dialog-changed event.
-   */
-  public void setSelection(boolean selection) {
-    m_selection = selection;
-    if (isOkToUse(m_buttonControl)) {
-      m_buttonControl.setSelection(m_selection);
-    } else {
-      dialogFieldChanged();
-    }
-  }
+	/**
+	 * Sets the selection. Triggers a dialog-changed event.
+	 */
+	public void setSelection(boolean selection) {
+		m_selection = selection;
+		if (isOkToUse(m_buttonControl)) {
+			m_buttonControl.setSelection(m_selection);
+		} else {
+			dialogFieldChanged();
+		}
+	}
 
-  /**
-   * Sets the selection without triggering a dialog-changed event.
-   */
-  public void setSelectionWithoutUpdate(boolean selection) {
-    m_selection = selection;
-    if (isOkToUse(m_buttonControl)) {
-      m_buttonControl.removeSelectionListener(m_selectionListener);
-      m_buttonControl.setSelection(selection);
-      m_buttonControl.addSelectionListener(m_selectionListener);
-    }
-  }
+	/**
+	 * Sets the selection without triggering a dialog-changed event.
+	 */
+	public void setSelectionWithoutUpdate(boolean selection) {
+		m_selection = selection;
+		if (isOkToUse(m_buttonControl)) {
+			m_buttonControl.removeSelectionListener(m_selectionListener);
+			m_buttonControl.setSelection(selection);
+			m_buttonControl.addSelectionListener(m_selectionListener);
+		}
+	}
 
-  @Override
-  public void refresh() {
-    super.refresh();
-    if (isOkToUse(m_buttonControl)) {
-      setSelectionWithoutUpdate(m_selection);
-    }
-  }
+	@Override
+	public void refresh() {
+		super.refresh();
+		if (isOkToUse(m_buttonControl)) {
+			setSelectionWithoutUpdate(m_selection);
+		}
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/CheckDialogField.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/CheckDialogField.java
index 9a22f3548..4d16dae78 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/CheckDialogField.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/CheckDialogField.java
@@ -25,125 +25,125 @@
  * @author lobas_av
  */
 public class CheckDialogField extends DialogField {
-  private boolean m_selection;
-  private Button m_buttonControl;
-  private SelectionListener m_selectionListener;
+	private boolean m_selection;
+	private Button m_buttonControl;
+	private SelectionListener m_selectionListener;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Layout helpers
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Control[] doFillIntoGrid(Composite parent, int columns) {
-    assertEnoughColumns(columns);
-    // create controls and add layout data
-    Button button = getButtonControl(parent);
-    GridDataFactory.create(button).alignHF().spanH(columns);
-    //
-    return new Control[]{button};
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Layout helpers
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Control[] doFillIntoGrid(Composite parent, int columns) {
+		assertEnoughColumns(columns);
+		// create controls and add layout data
+		Button button = getButtonControl(parent);
+		GridDataFactory.create(button).alignHF().spanH(columns);
+		//
+		return new Control[]{button};
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // UI creation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Creates or returns the created check box control.
-   *
-   * @param parent
-   *          The parent composite or <code>null</code> when the widget has already been created.
-   */
-  public Button getButtonControl(Composite parent) {
-    if (m_buttonControl == null) {
-      assertCompositeNotNull(parent);
-      m_selectionListener = new SelectionListener() {
-        @Override
-        public void widgetSelected(SelectionEvent e) {
-          doModifySelection(e);
-        }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// UI creation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Creates or returns the created check box control.
+	 *
+	 * @param parent
+	 *          The parent composite or <code>null</code> when the widget has already been created.
+	 */
+	public Button getButtonControl(Composite parent) {
+		if (m_buttonControl == null) {
+			assertCompositeNotNull(parent);
+			m_selectionListener = new SelectionListener() {
+				@Override
+				public void widgetSelected(SelectionEvent e) {
+					doModifySelection(e);
+				}
 
-        @Override
-        public void widgetDefaultSelected(SelectionEvent e) {
-          doModifySelection(e);
-        }
-      };
-      //
-      m_buttonControl = new Button(parent, SWT.CHECK);
-      // initialize
-      if (fLabelText != null) {
-        m_buttonControl.setText(fLabelText);
-      }
-      m_buttonControl.setSelection(m_selection);
-      m_buttonControl.addSelectionListener(m_selectionListener);
-      m_buttonControl.setFont(parent.getFont());
-      m_buttonControl.setEnabled(isEnabled());
-    }
-    return m_buttonControl;
-  }
+				@Override
+				public void widgetDefaultSelected(SelectionEvent e) {
+					doModifySelection(e);
+				}
+			};
+			//
+			m_buttonControl = new Button(parent, SWT.CHECK);
+			// initialize
+			if (fLabelText != null) {
+				m_buttonControl.setText(fLabelText);
+			}
+			m_buttonControl.setSelection(m_selection);
+			m_buttonControl.addSelectionListener(m_selectionListener);
+			m_buttonControl.setFont(parent.getFont());
+			m_buttonControl.setEnabled(isEnabled());
+		}
+		return m_buttonControl;
+	}
 
-  private void doModifySelection(SelectionEvent e) {
-    if (isOkToUse(m_buttonControl)) {
-      m_selection = m_buttonControl.getSelection();
-    }
-    dialogFieldChanged();
-  }
+	private void doModifySelection(SelectionEvent e) {
+		if (isOkToUse(m_buttonControl)) {
+			m_selection = m_buttonControl.getSelection();
+		}
+		dialogFieldChanged();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Enable / disable management
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void updateEnableState() {
-    super.updateEnableState();
-    if (isOkToUse(m_buttonControl)) {
-      m_buttonControl.setEnabled(isEnabled());
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Enable / disable management
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void updateEnableState() {
+		super.updateEnableState();
+		if (isOkToUse(m_buttonControl)) {
+			m_buttonControl.setEnabled(isEnabled());
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Value access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Gets the selection.
-   */
-  public boolean getSelection() {
-    return m_selection;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Value access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Gets the selection.
+	 */
+	public boolean getSelection() {
+		return m_selection;
+	}
 
-  /**
-   * Sets the selection. Triggers a dialog-changed event.
-   */
-  public void setSelection(boolean selection) {
-    m_selection = selection;
-    if (isOkToUse(m_buttonControl)) {
-      m_buttonControl.setSelection(m_selection);
-    } else {
-      dialogFieldChanged();
-    }
-  }
+	/**
+	 * Sets the selection. Triggers a dialog-changed event.
+	 */
+	public void setSelection(boolean selection) {
+		m_selection = selection;
+		if (isOkToUse(m_buttonControl)) {
+			m_buttonControl.setSelection(m_selection);
+		} else {
+			dialogFieldChanged();
+		}
+	}
 
-  /**
-   * Sets the selection without triggering a dialog-changed event.
-   */
-  public void setSelectionWithoutUpdate(boolean selection) {
-    m_selection = selection;
-    if (isOkToUse(m_buttonControl)) {
-      m_buttonControl.removeSelectionListener(m_selectionListener);
-      m_buttonControl.setSelection(selection);
-      m_buttonControl.addSelectionListener(m_selectionListener);
-    }
-  }
+	/**
+	 * Sets the selection without triggering a dialog-changed event.
+	 */
+	public void setSelectionWithoutUpdate(boolean selection) {
+		m_selection = selection;
+		if (isOkToUse(m_buttonControl)) {
+			m_buttonControl.removeSelectionListener(m_selectionListener);
+			m_buttonControl.setSelection(selection);
+			m_buttonControl.addSelectionListener(m_selectionListener);
+		}
+	}
 
-  @Override
-  public void refresh() {
-    super.refresh();
-    if (isOkToUse(m_buttonControl)) {
-      setSelectionWithoutUpdate(m_selection);
-    }
-  }
+	@Override
+	public void refresh() {
+		super.refresh();
+		if (isOkToUse(m_buttonControl)) {
+			setSelectionWithoutUpdate(m_selection);
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/CheckedListDialogField.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/CheckedListDialogField.java
index 3044d1b8e..4b5d82317 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/CheckedListDialogField.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/CheckedListDialogField.java
@@ -32,277 +32,277 @@
  * containing buttons.
  */
 public class CheckedListDialogField extends ListDialogField {
-  private int fCheckAllButtonIndex;
-  private int fUncheckAllButtonIndex;
-  private List fCheckedElements;
-  private final List fGrayedElements;
+	private int fCheckAllButtonIndex;
+	private int fUncheckAllButtonIndex;
+	private List fCheckedElements;
+	private final List fGrayedElements;
 
-  public CheckedListDialogField(IListAdapter adapter,
-      String[] customButtonLabels,
-      ILabelProvider lprovider) {
-    super(adapter, customButtonLabels, lprovider);
-    fCheckedElements = new ArrayList();
-    fGrayedElements = new ArrayList();
-    fCheckAllButtonIndex = -1;
-    fUncheckAllButtonIndex = -1;
-  }
+	public CheckedListDialogField(IListAdapter adapter,
+			String[] customButtonLabels,
+			ILabelProvider lprovider) {
+		super(adapter, customButtonLabels, lprovider);
+		fCheckedElements = new ArrayList();
+		fGrayedElements = new ArrayList();
+		fCheckAllButtonIndex = -1;
+		fUncheckAllButtonIndex = -1;
+	}
 
-  /**
-   * Sets the index of the 'check all' button in the button label array passed in the constructor.
-   * The behavior of the button marked as the check button will then be handled internally. (enable
-   * state, button invocation behavior)
-   *
-   * @param checkAllButtonIndex
-   *          the index of the check all button
-   */
-  public void setCheckAllButtonIndex(int checkAllButtonIndex) {
-    Assert.isTrue(checkAllButtonIndex < fButtonLabels.length);
-    fCheckAllButtonIndex = checkAllButtonIndex;
-  }
+	/**
+	 * Sets the index of the 'check all' button in the button label array passed in the constructor.
+	 * The behavior of the button marked as the check button will then be handled internally. (enable
+	 * state, button invocation behavior)
+	 *
+	 * @param checkAllButtonIndex
+	 *          the index of the check all button
+	 */
+	public void setCheckAllButtonIndex(int checkAllButtonIndex) {
+		Assert.isTrue(checkAllButtonIndex < fButtonLabels.length);
+		fCheckAllButtonIndex = checkAllButtonIndex;
+	}
 
-  /**
-   * Sets the index of the 'uncheck all' button in the button label array passed in the constructor.
-   * The behavior of the button marked as the uncheck button will then be handled internally.
-   * (enable state, button invocation behavior)
-   *
-   * @param uncheckAllButtonIndex
-   *          the index of the check all button
-   */
-  public void setUncheckAllButtonIndex(int uncheckAllButtonIndex) {
-    Assert.isTrue(uncheckAllButtonIndex < fButtonLabels.length);
-    fUncheckAllButtonIndex = uncheckAllButtonIndex;
-  }
+	/**
+	 * Sets the index of the 'uncheck all' button in the button label array passed in the constructor.
+	 * The behavior of the button marked as the uncheck button will then be handled internally.
+	 * (enable state, button invocation behavior)
+	 *
+	 * @param uncheckAllButtonIndex
+	 *          the index of the check all button
+	 */
+	public void setUncheckAllButtonIndex(int uncheckAllButtonIndex) {
+		Assert.isTrue(uncheckAllButtonIndex < fButtonLabels.length);
+		fUncheckAllButtonIndex = uncheckAllButtonIndex;
+	}
 
-  /*
-   * @see ListDialogField#createTableViewer
-   */
-  @Override
-  protected TableViewer createTableViewer(Composite parent) {
-    Table table = new Table(parent, SWT.CHECK | getListStyle());
-    table.setFont(parent.getFont());
-    CheckboxTableViewer tableViewer = new CheckboxTableViewer(table);
-    tableViewer.addCheckStateListener(new ICheckStateListener() {
-      @Override
-      public void checkStateChanged(CheckStateChangedEvent e) {
-        doCheckStateChanged(e);
-      }
-    });
-    return tableViewer;
-  }
+	/*
+	 * @see ListDialogField#createTableViewer
+	 */
+	@Override
+	protected TableViewer createTableViewer(Composite parent) {
+		Table table = new Table(parent, SWT.CHECK | getListStyle());
+		table.setFont(parent.getFont());
+		CheckboxTableViewer tableViewer = new CheckboxTableViewer(table);
+		tableViewer.addCheckStateListener(new ICheckStateListener() {
+			@Override
+			public void checkStateChanged(CheckStateChangedEvent e) {
+				doCheckStateChanged(e);
+			}
+		});
+		return tableViewer;
+	}
 
-  /*
-   * @see ListDialogField#getListControl
-   */
-  @Override
-  public Control getListControl(Composite parent) {
-    Control control = super.getListControl(parent);
-    if (parent != null) {
-      ((CheckboxTableViewer) fTable).setCheckedElements(fCheckedElements.toArray());
-      ((CheckboxTableViewer) fTable).setGrayedElements(fGrayedElements.toArray());
-    }
-    return control;
-  }
+	/*
+	 * @see ListDialogField#getListControl
+	 */
+	@Override
+	public Control getListControl(Composite parent) {
+		Control control = super.getListControl(parent);
+		if (parent != null) {
+			((CheckboxTableViewer) fTable).setCheckedElements(fCheckedElements.toArray());
+			((CheckboxTableViewer) fTable).setGrayedElements(fGrayedElements.toArray());
+		}
+		return control;
+	}
 
-  /*
-   * @see DialogField#dialogFieldChanged
-   * Hooks in to get element changes to update check model.
-   */
-  @Override
-  public void dialogFieldChanged() {
-    for (int i = fCheckedElements.size() - 1; i >= 0; i--) {
-      if (!fElements.contains(fCheckedElements.get(i))) {
-        fCheckedElements.remove(i);
-      }
-    }
-    super.dialogFieldChanged();
-  }
+	/*
+	 * @see DialogField#dialogFieldChanged
+	 * Hooks in to get element changes to update check model.
+	 */
+	@Override
+	public void dialogFieldChanged() {
+		for (int i = fCheckedElements.size() - 1; i >= 0; i--) {
+			if (!fElements.contains(fCheckedElements.get(i))) {
+				fCheckedElements.remove(i);
+			}
+		}
+		super.dialogFieldChanged();
+	}
 
-  private void checkStateChanged() {
-    //call super and do not update check model
-    super.dialogFieldChanged();
-  }
+	private void checkStateChanged() {
+		//call super and do not update check model
+		super.dialogFieldChanged();
+	}
 
-  /**
-   * Gets the checked elements.
-   *
-   * @return the list of checked elements
-   */
-  public List getCheckedElements() {
-    if (isOkToUse(fTableControl)) {
-      // workaround for bug 53853
-      Object[] checked = ((CheckboxTableViewer) fTable).getCheckedElements();
-      ArrayList res = new ArrayList(checked.length);
-      for (int i = 0; i < checked.length; i++) {
-        res.add(checked[i]);
-      }
-      return res;
-    }
-    return new ArrayList(fCheckedElements);
-  }
+	/**
+	 * Gets the checked elements.
+	 *
+	 * @return the list of checked elements
+	 */
+	public List getCheckedElements() {
+		if (isOkToUse(fTableControl)) {
+			// workaround for bug 53853
+			Object[] checked = ((CheckboxTableViewer) fTable).getCheckedElements();
+			ArrayList res = new ArrayList(checked.length);
+			for (int i = 0; i < checked.length; i++) {
+				res.add(checked[i]);
+			}
+			return res;
+		}
+		return new ArrayList(fCheckedElements);
+	}
 
-  /**
-   * Returns the number of checked elements.
-   *
-   * @return the number of checked elements
-   */
-  public int getCheckedSize() {
-    return fCheckedElements.size();
-  }
+	/**
+	 * Returns the number of checked elements.
+	 *
+	 * @return the number of checked elements
+	 */
+	public int getCheckedSize() {
+		return fCheckedElements.size();
+	}
 
-  /**
-   * Returns true if the element is checked.
-   *
-   * @param obj
-   *          the element to check
-   * @return <code>true</code> if the given element is checked
-   */
-  public boolean isChecked(Object obj) {
-    if (isOkToUse(fTableControl)) {
-      return ((CheckboxTableViewer) fTable).getChecked(obj);
-    }
-    return fCheckedElements.contains(obj);
-  }
+	/**
+	 * Returns true if the element is checked.
+	 *
+	 * @param obj
+	 *          the element to check
+	 * @return <code>true</code> if the given element is checked
+	 */
+	public boolean isChecked(Object obj) {
+		if (isOkToUse(fTableControl)) {
+			return ((CheckboxTableViewer) fTable).getChecked(obj);
+		}
+		return fCheckedElements.contains(obj);
+	}
 
-  public boolean isGrayed(Object obj) {
-    if (isOkToUse(fTableControl)) {
-      return ((CheckboxTableViewer) fTable).getGrayed(obj);
-    }
-    return fGrayedElements.contains(obj);
-  }
+	public boolean isGrayed(Object obj) {
+		if (isOkToUse(fTableControl)) {
+			return ((CheckboxTableViewer) fTable).getGrayed(obj);
+		}
+		return fGrayedElements.contains(obj);
+	}
 
-  /**
-   * Sets the checked elements.
-   *
-   * @param list
-   *          the list of checked elements
-   */
-  public void setCheckedElements(Collection list) {
-    fCheckedElements = new ArrayList(list);
-    if (isOkToUse(fTableControl)) {
-      ((CheckboxTableViewer) fTable).setCheckedElements(list.toArray());
-    }
-    checkStateChanged();
-  }
+	/**
+	 * Sets the checked elements.
+	 *
+	 * @param list
+	 *          the list of checked elements
+	 */
+	public void setCheckedElements(Collection list) {
+		fCheckedElements = new ArrayList(list);
+		if (isOkToUse(fTableControl)) {
+			((CheckboxTableViewer) fTable).setCheckedElements(list.toArray());
+		}
+		checkStateChanged();
+	}
 
-  /**
-   * Sets the checked state of an element.
-   *
-   * @param object
-   *          the element for which to set the state
-   * @param state
-   *          the checked state
-   */
-  public void setChecked(Object object, boolean state) {
-    setCheckedWithoutUpdate(object, state);
-    checkStateChanged();
-  }
+	/**
+	 * Sets the checked state of an element.
+	 *
+	 * @param object
+	 *          the element for which to set the state
+	 * @param state
+	 *          the checked state
+	 */
+	public void setChecked(Object object, boolean state) {
+		setCheckedWithoutUpdate(object, state);
+		checkStateChanged();
+	}
 
-  /**
-   * Sets the checked state of an element. No dialog changed listener is informed.
-   *
-   * @param object
-   *          the element for which to set the state
-   * @param state
-   *          the checked state
-   */
-  public void setCheckedWithoutUpdate(Object object, boolean state) {
-    if (state) {
-      if (!fCheckedElements.contains(object)) {
-        fCheckedElements.add(object);
-      }
-    } else {
-      fCheckedElements.remove(object);
-    }
-    if (isOkToUse(fTableControl)) {
-      ((CheckboxTableViewer) fTable).setChecked(object, state);
-    }
-  }
+	/**
+	 * Sets the checked state of an element. No dialog changed listener is informed.
+	 *
+	 * @param object
+	 *          the element for which to set the state
+	 * @param state
+	 *          the checked state
+	 */
+	public void setCheckedWithoutUpdate(Object object, boolean state) {
+		if (state) {
+			if (!fCheckedElements.contains(object)) {
+				fCheckedElements.add(object);
+			}
+		} else {
+			fCheckedElements.remove(object);
+		}
+		if (isOkToUse(fTableControl)) {
+			((CheckboxTableViewer) fTable).setChecked(object, state);
+		}
+	}
 
-  public void setGrayedWithoutUpdate(Object object, boolean state) {
-    if (state) {
-      if (!fGrayedElements.contains(object)) {
-        fGrayedElements.add(object);
-      }
-    } else {
-      fGrayedElements.remove(object);
-    }
-    if (isOkToUse(fTableControl)) {
-      ((CheckboxTableViewer) fTable).setGrayed(object, state);
-    }
-  }
+	public void setGrayedWithoutUpdate(Object object, boolean state) {
+		if (state) {
+			if (!fGrayedElements.contains(object)) {
+				fGrayedElements.add(object);
+			}
+		} else {
+			fGrayedElements.remove(object);
+		}
+		if (isOkToUse(fTableControl)) {
+			((CheckboxTableViewer) fTable).setGrayed(object, state);
+		}
+	}
 
-  /**
-   * Sets the check state of all elements.
-   *
-   * @param state
-   *          the checked state
-   */
-  public void checkAll(boolean state) {
-    if (state) {
-      fCheckedElements = getElements();
-    } else {
-      fCheckedElements.clear();
-    }
-    if (isOkToUse(fTableControl)) {
-      ((CheckboxTableViewer) fTable).setAllChecked(state);
-    }
-    checkStateChanged();
-  }
+	/**
+	 * Sets the check state of all elements.
+	 *
+	 * @param state
+	 *          the checked state
+	 */
+	public void checkAll(boolean state) {
+		if (state) {
+			fCheckedElements = getElements();
+		} else {
+			fCheckedElements.clear();
+		}
+		if (isOkToUse(fTableControl)) {
+			((CheckboxTableViewer) fTable).setAllChecked(state);
+		}
+		checkStateChanged();
+	}
 
-  private void doCheckStateChanged(CheckStateChangedEvent e) {
-    if (e.getChecked()) {
-      fCheckedElements.add(e.getElement());
-    } else {
-      fCheckedElements.remove(e.getElement());
-    }
-    checkStateChanged();
-  }
+	private void doCheckStateChanged(CheckStateChangedEvent e) {
+		if (e.getChecked()) {
+			fCheckedElements.add(e.getElement());
+		} else {
+			fCheckedElements.remove(e.getElement());
+		}
+		checkStateChanged();
+	}
 
-  /* (non-Javadoc)
-   * @see org.eclipse.jdt.internal.ui.wizards.dialogfields.ListDialogField#replaceElement(java.lang.Object, java.lang.Object)
-   */
-  @Override
-  public void replaceElement(Object oldElement, Object newElement) throws IllegalArgumentException {
-    boolean wasChecked = isChecked(oldElement);
-    super.replaceElement(oldElement, newElement);
-    setChecked(newElement, wasChecked);
-  }
+	/* (non-Javadoc)
+	 * @see org.eclipse.jdt.internal.ui.wizards.dialogfields.ListDialogField#replaceElement(java.lang.Object, java.lang.Object)
+	 */
+	@Override
+	public void replaceElement(Object oldElement, Object newElement) throws IllegalArgumentException {
+		boolean wasChecked = isChecked(oldElement);
+		super.replaceElement(oldElement, newElement);
+		setChecked(newElement, wasChecked);
+	}
 
-  // ------ enable / disable management
-  /*
-   * @see ListDialogField#getManagedButtonState
-   */
-  @Override
-  protected boolean getManagedButtonState(ISelection sel, int index) {
-    if (index == fCheckAllButtonIndex) {
-      return !fElements.isEmpty();
-    } else if (index == fUncheckAllButtonIndex) {
-      return !fElements.isEmpty();
-    }
-    return super.getManagedButtonState(sel, index);
-  }
+	// ------ enable / disable management
+	/*
+	 * @see ListDialogField#getManagedButtonState
+	 */
+	@Override
+	protected boolean getManagedButtonState(ISelection sel, int index) {
+		if (index == fCheckAllButtonIndex) {
+			return !fElements.isEmpty();
+		} else if (index == fUncheckAllButtonIndex) {
+			return !fElements.isEmpty();
+		}
+		return super.getManagedButtonState(sel, index);
+	}
 
-  /*
-   * @see ListDialogField#extraButtonPressed
-   */
-  @Override
-  protected boolean managedButtonPressed(int index) {
-    if (index == fCheckAllButtonIndex) {
-      checkAll(true);
-    } else if (index == fUncheckAllButtonIndex) {
-      checkAll(false);
-    } else {
-      return super.managedButtonPressed(index);
-    }
-    return true;
-  }
+	/*
+	 * @see ListDialogField#extraButtonPressed
+	 */
+	@Override
+	protected boolean managedButtonPressed(int index) {
+		if (index == fCheckAllButtonIndex) {
+			checkAll(true);
+		} else if (index == fUncheckAllButtonIndex) {
+			checkAll(false);
+		} else {
+			return super.managedButtonPressed(index);
+		}
+		return true;
+	}
 
-  @Override
-  public void refresh() {
-    super.refresh();
-    if (isOkToUse(fTableControl)) {
-      ((CheckboxTableViewer) fTable).setCheckedElements(fCheckedElements.toArray());
-      ((CheckboxTableViewer) fTable).setGrayedElements(fGrayedElements.toArray());
-    }
-  }
+	@Override
+	public void refresh() {
+		super.refresh();
+		if (isOkToUse(fTableControl)) {
+			((CheckboxTableViewer) fTable).setCheckedElements(fCheckedElements.toArray());
+			((CheckboxTableViewer) fTable).setGrayedElements(fGrayedElements.toArray());
+		}
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/ComboButtonDialogField.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/ComboButtonDialogField.java
index ee28563d0..cf49de783 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/ComboButtonDialogField.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/ComboButtonDialogField.java
@@ -27,86 +27,86 @@
  * @author lobas_av
  */
 public class ComboButtonDialogField extends ComboDialogField {
-  private final IStringButtonAdapter m_browseAdapter;
-  private Button m_browseButton;
-  private boolean m_browseButtonEnabled = true;
-  private Combo m_combo;
+	private final IStringButtonAdapter m_browseAdapter;
+	private Button m_browseButton;
+	private boolean m_browseButtonEnabled = true;
+	private Combo m_combo;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ComboButtonDialogField(IStringButtonAdapter adapter, int flags) {
-    super(flags);
-    m_browseAdapter = adapter;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ComboButtonDialogField(IStringButtonAdapter adapter, int flags) {
+		super(flags);
+		m_browseAdapter = adapter;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Layout helpers
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Control[] doFillIntoGrid(Composite parent, int columns) {
-    assertEnoughColumns(columns);
-    //
-    Label label = getLabelControl(parent);
-    label.setLayoutData(gridDataForLabel(1));
-    //
-    m_combo = getComboControl(parent);
-    GridDataFactory.create(m_combo).fillH().grabH().spanH(columns - 2);
-    //
-    Button button = getChangeControl(parent);
-    //
-    return new Control[]{label, m_combo, button};
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Layout helpers
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Control[] doFillIntoGrid(Composite parent, int columns) {
+		assertEnoughColumns(columns);
+		//
+		Label label = getLabelControl(parent);
+		label.setLayoutData(gridDataForLabel(1));
+		//
+		m_combo = getComboControl(parent);
+		GridDataFactory.create(m_combo).fillH().grabH().spanH(columns - 2);
+		//
+		Button button = getChangeControl(parent);
+		//
+		return new Control[]{label, m_combo, button};
+	}
 
-  public void changeControlPressed() {
-    m_browseAdapter.changeControlPressed(this);
-  }
+	public void changeControlPressed() {
+		m_browseAdapter.changeControlPressed(this);
+	}
 
-  @Override
-  public int getNumberOfControls() {
-    return 3;
-  }
+	@Override
+	public int getNumberOfControls() {
+		return 3;
+	}
 
-  public Button getChangeControl(Composite parent) {
-    if (m_browseButton == null) {
-      assertCompositeNotNull(parent);
-      //
-      m_browseButton = new Button(parent, SWT.PUSH);
-      m_browseButton.setFont(parent.getFont());
-      m_browseButton.setText("...");
-      m_browseButton.setEnabled(isEnabled() && m_browseButtonEnabled);
-      //
-      m_browseButton.addSelectionListener(new SelectionListener() {
-        @Override
-        public void widgetDefaultSelected(SelectionEvent e) {
-          changeControlPressed();
-        }
+	public Button getChangeControl(Composite parent) {
+		if (m_browseButton == null) {
+			assertCompositeNotNull(parent);
+			//
+			m_browseButton = new Button(parent, SWT.PUSH);
+			m_browseButton.setFont(parent.getFont());
+			m_browseButton.setText("...");
+			m_browseButton.setEnabled(isEnabled() && m_browseButtonEnabled);
+			//
+			m_browseButton.addSelectionListener(new SelectionListener() {
+				@Override
+				public void widgetDefaultSelected(SelectionEvent e) {
+					changeControlPressed();
+				}
 
-        @Override
-        public void widgetSelected(SelectionEvent e) {
-          changeControlPressed();
-        }
-      });
-    }
-    return m_browseButton;
-  }
+				@Override
+				public void widgetSelected(SelectionEvent e) {
+					changeControlPressed();
+				}
+			});
+		}
+		return m_browseButton;
+	}
 
-  public void enableButton(boolean enable) {
-    if (isOkToUse(m_browseButton)) {
-      m_browseButton.setEnabled(isEnabled() && enable);
-    }
-    m_browseButtonEnabled = enable;
-  }
+	public void enableButton(boolean enable) {
+		if (isOkToUse(m_browseButton)) {
+			m_browseButton.setEnabled(isEnabled() && enable);
+		}
+		m_browseButtonEnabled = enable;
+	}
 
-  @Override
-  protected void updateEnableState() {
-    super.updateEnableState();
-    if (isOkToUse(m_browseButton)) {
-      m_browseButton.setEnabled(isEnabled() && m_browseButtonEnabled);
-    }
-  }
+	@Override
+	protected void updateEnableState() {
+		super.updateEnableState();
+		if (isOkToUse(m_browseButton)) {
+			m_browseButton.setEnabled(isEnabled() && m_browseButtonEnabled);
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/ComboDialogField.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/ComboDialogField.java
index f2c81e5ac..3edf527a2 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/ComboDialogField.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/ComboDialogField.java
@@ -30,308 +30,308 @@
  * Dialog field containing a label and a combo control.
  */
 public class ComboDialogField extends DialogField {
-  private String fText;
-  private int fVisibleItemCount;
-  private int fSelectionIndex;
-  private List<String> fItems = new ArrayList<>();
-  private Combo fComboControl;
-  private ModifyListener fModifyListener;
-  private final int fFlags;
+	private String fText;
+	private int fVisibleItemCount;
+	private int fSelectionIndex;
+	private List<String> fItems = new ArrayList<>();
+	private Combo fComboControl;
+	private ModifyListener fModifyListener;
+	private final int fFlags;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ComboDialogField(int flags) {
-    super();
-    fText = ""; //$NON-NLS-1$
-    fFlags = flags;
-    fSelectionIndex = -1;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ComboDialogField(int flags) {
+		super();
+		fText = ""; //$NON-NLS-1$
+		fFlags = flags;
+		fSelectionIndex = -1;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Layout helpers
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Control[] doFillIntoGrid(Composite parent, int nColumns) {
-    assertEnoughColumns(nColumns);
-    //
-    Label label = getLabelControl(parent);
-    label.setLayoutData(gridDataForLabel(1));
-    Combo combo = getComboControl(parent);
-    combo.setLayoutData(gridDataForCombo(nColumns - 1));
-    //
-    return new Control[]{label, combo};
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Layout helpers
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Control[] doFillIntoGrid(Composite parent, int nColumns) {
+		assertEnoughColumns(nColumns);
+		//
+		Label label = getLabelControl(parent);
+		label.setLayoutData(gridDataForLabel(1));
+		Combo combo = getComboControl(parent);
+		combo.setLayoutData(gridDataForCombo(nColumns - 1));
+		//
+		return new Control[]{label, combo};
+	}
 
-  @Override
-  public int getNumberOfControls() {
-    return 2;
-  }
+	@Override
+	public int getNumberOfControls() {
+		return 2;
+	}
 
-  protected static GridData gridDataForCombo(int span) {
-    GridData gd = new GridData();
-    gd.horizontalAlignment = GridData.FILL;
-    gd.grabExcessHorizontalSpace = false;
-    gd.horizontalSpan = span;
-    return gd;
-  }
+	protected static GridData gridDataForCombo(int span) {
+		GridData gd = new GridData();
+		gd.horizontalAlignment = GridData.FILL;
+		gd.grabExcessHorizontalSpace = false;
+		gd.horizontalSpan = span;
+		return gd;
+	}
 
-  // ------- focus methods
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Focus methods
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean setFocus() {
-    if (isOkToUse(fComboControl)) {
-      fComboControl.setFocus();
-    }
-    return true;
-  }
+	// ------- focus methods
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Focus methods
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean setFocus() {
+		if (isOkToUse(fComboControl)) {
+			fComboControl.setFocus();
+		}
+		return true;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // UI creation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Creates or returns the created combo control.
-   *
-   * @param parent
-   *          The parent composite or <code>null</code> when the widget has already been created.
-   */
-  public Combo getComboControl(Composite parent) {
-    if (fComboControl == null) {
-      assertCompositeNotNull(parent);
-      fModifyListener = e -> doModifyText(e);
-      SelectionListener selectionListener = new SelectionListener() {
-        @Override
-        public void widgetSelected(SelectionEvent e) {
-          doSelectionChanged(e);
-        }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// UI creation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Creates or returns the created combo control.
+	 *
+	 * @param parent
+	 *          The parent composite or <code>null</code> when the widget has already been created.
+	 */
+	public Combo getComboControl(Composite parent) {
+		if (fComboControl == null) {
+			assertCompositeNotNull(parent);
+			fModifyListener = e -> doModifyText(e);
+			SelectionListener selectionListener = new SelectionListener() {
+				@Override
+				public void widgetSelected(SelectionEvent e) {
+					doSelectionChanged(e);
+				}
 
-        @Override
-        public void widgetDefaultSelected(SelectionEvent e) {
-        }
-      };
-      fComboControl = new Combo(parent, fFlags);
-      doSetItems();
-      //
-      if (fSelectionIndex != -1) {
-        fComboControl.select(fSelectionIndex);
-      } else {
-        fComboControl.setText(fText);
-      }
-      if (fVisibleItemCount != 0) {
-        fComboControl.setVisibleItemCount(fVisibleItemCount);
-      }
-      fComboControl.setFont(parent.getFont());
-      fComboControl.addModifyListener(fModifyListener);
-      fComboControl.addSelectionListener(selectionListener);
-      fComboControl.setEnabled(isEnabled());
-    }
-    return fComboControl;
-  }
+				@Override
+				public void widgetDefaultSelected(SelectionEvent e) {
+				}
+			};
+			fComboControl = new Combo(parent, fFlags);
+			doSetItems();
+			//
+			if (fSelectionIndex != -1) {
+				fComboControl.select(fSelectionIndex);
+			} else {
+				fComboControl.setText(fText);
+			}
+			if (fVisibleItemCount != 0) {
+				fComboControl.setVisibleItemCount(fVisibleItemCount);
+			}
+			fComboControl.setFont(parent.getFont());
+			fComboControl.addModifyListener(fModifyListener);
+			fComboControl.addSelectionListener(selectionListener);
+			fComboControl.setEnabled(isEnabled());
+		}
+		return fComboControl;
+	}
 
-  private void doModifyText(ModifyEvent e) {
-    if (isOkToUse(fComboControl)) {
-      fText = fComboControl.getText();
-      fSelectionIndex = fComboControl.getSelectionIndex();
-    }
-    dialogFieldChanged();
-  }
+	private void doModifyText(ModifyEvent e) {
+		if (isOkToUse(fComboControl)) {
+			fText = fComboControl.getText();
+			fSelectionIndex = fComboControl.getSelectionIndex();
+		}
+		dialogFieldChanged();
+	}
 
-  private void doSelectionChanged(SelectionEvent e) {
-    if (isOkToUse(fComboControl)) {
-      fItems = new ArrayList<>();
-      CollectionUtils.addAll(fItems, fComboControl.getItems());
-      //
-      fText = fComboControl.getText();
-      fSelectionIndex = fComboControl.getSelectionIndex();
-    }
-    dialogFieldChanged();
-  }
+	private void doSelectionChanged(SelectionEvent e) {
+		if (isOkToUse(fComboControl)) {
+			fItems = new ArrayList<>();
+			CollectionUtils.addAll(fItems, fComboControl.getItems());
+			//
+			fText = fComboControl.getText();
+			fSelectionIndex = fComboControl.getSelectionIndex();
+		}
+		dialogFieldChanged();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Enable / disable management
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void updateEnableState() {
-    super.updateEnableState();
-    if (isOkToUse(fComboControl)) {
-      fComboControl.setEnabled(isEnabled());
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Enable / disable management
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void updateEnableState() {
+		super.updateEnableState();
+		if (isOkToUse(fComboControl)) {
+			fComboControl.setEnabled(isEnabled());
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Text access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Gets the count of combo items.
-   */
-  public int getItemCount() {
-    return fItems.size();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Text access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Gets the count of combo items.
+	 */
+	public int getItemCount() {
+		return fItems.size();
+	}
 
-  /**
-   * Gets the combo items.
-   */
-  public List<String> getListItems() {
-    return fItems;
-  }
+	/**
+	 * Gets the combo items.
+	 */
+	public List<String> getListItems() {
+		return fItems;
+	}
 
-  /**
-   * Gets the combo items.
-   */
-  public String[] getItems() {
-    return fItems.toArray(new String[fItems.size()]);
-  }
+	/**
+	 * Gets the combo items.
+	 */
+	public String[] getItems() {
+		return fItems.toArray(new String[fItems.size()]);
+	}
 
-  /**
-   * Add the combo item.
-   */
-  public void addItem(String newItem) {
-    fItems.add(newItem);
-    if (isOkToUse(fComboControl)) {
-      fComboControl.add(newItem);
-    }
-    dialogFieldChanged();
-  }
+	/**
+	 * Add the combo item.
+	 */
+	public void addItem(String newItem) {
+		fItems.add(newItem);
+		if (isOkToUse(fComboControl)) {
+			fComboControl.add(newItem);
+		}
+		dialogFieldChanged();
+	}
 
-  /**
-   * Remove the combo item.
-   */
-  public void removeItem(String newItem) {
-    boolean remove = fItems.remove(newItem);
-    if (remove && isOkToUse(fComboControl)) {
-      fComboControl.remove(newItem);
-    }
-  }
+	/**
+	 * Remove the combo item.
+	 */
+	public void removeItem(String newItem) {
+		boolean remove = fItems.remove(newItem);
+		if (remove && isOkToUse(fComboControl)) {
+			fComboControl.remove(newItem);
+		}
+	}
 
-  /**
-   * Add the combo items.
-   */
-  public void addItems(Collection<String> newItems) {
-    for (String item : newItems) {
-      addItem(item);
-    }
-  }
+	/**
+	 * Add the combo items.
+	 */
+	public void addItems(Collection<String> newItems) {
+		for (String item : newItems) {
+			addItem(item);
+		}
+	}
 
-  private void doSetItems() {
-    fComboControl.removeAll();
-    for (String item : fItems) {
-      fComboControl.add(item);
-    }
-  }
+	private void doSetItems() {
+		fComboControl.removeAll();
+		for (String item : fItems) {
+			fComboControl.add(item);
+		}
+	}
 
-  /**
-   * Sets the combo items. Triggers a dialog-changed event.
-   */
-  public void setItems(String[] items) {
-    fItems = new ArrayList<>();
-    CollectionUtils.addAll(fItems, items);
-    //
-    if (isOkToUse(fComboControl)) {
-      doSetItems();
-      fComboControl.setItems(items);
-    }
-    dialogFieldChanged();
-  }
+	/**
+	 * Sets the combo items. Triggers a dialog-changed event.
+	 */
+	public void setItems(String[] items) {
+		fItems = new ArrayList<>();
+		CollectionUtils.addAll(fItems, items);
+		//
+		if (isOkToUse(fComboControl)) {
+			doSetItems();
+			fComboControl.setItems(items);
+		}
+		dialogFieldChanged();
+	}
 
-  /**
-   * Gets the text.
-   */
-  public String getText() {
-    return fText;
-  }
+	/**
+	 * Gets the text.
+	 */
+	public String getText() {
+		return fText;
+	}
 
-  /**
-   * Sets the text. Triggers a dialog-changed event.
-   */
-  public void setText(String text) {
-    fText = text;
-    if (isOkToUse(fComboControl)) {
-      fComboControl.setText(text);
-    } else {
-      dialogFieldChanged();
-    }
-  }
+	/**
+	 * Sets the text. Triggers a dialog-changed event.
+	 */
+	public void setText(String text) {
+		fText = text;
+		if (isOkToUse(fComboControl)) {
+			fComboControl.setText(text);
+		} else {
+			dialogFieldChanged();
+		}
+	}
 
-  /**
-   * Sets the count of visible items
-   */
-  public void setVisibleItemCount(int visibleItemCount) {
-    fVisibleItemCount = visibleItemCount;
-    if (isOkToUse(fComboControl)) {
-      fComboControl.setVisibleItemCount(fVisibleItemCount);
-    } else {
-      dialogFieldChanged();
-    }
-  }
+	/**
+	 * Sets the count of visible items
+	 */
+	public void setVisibleItemCount(int visibleItemCount) {
+		fVisibleItemCount = visibleItemCount;
+		if (isOkToUse(fComboControl)) {
+			fComboControl.setVisibleItemCount(fVisibleItemCount);
+		} else {
+			dialogFieldChanged();
+		}
+	}
 
-  /**
-   * Selects an item.
-   */
-  public boolean selectItem(int index) {
-    boolean success = false;
-    if (isOkToUse(fComboControl)) {
-      fComboControl.select(index);
-      fText = fComboControl.getText();
-      fSelectionIndex = fComboControl.getSelectionIndex();
-      success = fSelectionIndex == index;
-    } else {
-      if (index >= 0 && index < fItems.size()) {
-        fText = fItems.get(index);
-        fSelectionIndex = index;
-        success = true;
-      }
-    }
-    if (success) {
-      dialogFieldChanged();
-    }
-    return success;
-  }
+	/**
+	 * Selects an item.
+	 */
+	public boolean selectItem(int index) {
+		boolean success = false;
+		if (isOkToUse(fComboControl)) {
+			fComboControl.select(index);
+			fText = fComboControl.getText();
+			fSelectionIndex = fComboControl.getSelectionIndex();
+			success = fSelectionIndex == index;
+		} else {
+			if (index >= 0 && index < fItems.size()) {
+				fText = fItems.get(index);
+				fSelectionIndex = index;
+				success = true;
+			}
+		}
+		if (success) {
+			dialogFieldChanged();
+		}
+		return success;
+	}
 
-  /**
-   * Selects an item.
-   */
-  public boolean selectItem(String name) {
-    for (int i = 0; i < fItems.size(); i++) {
-      if (name.equals(fItems.get(i))) {
-        return selectItem(i);
-      }
-    }
-    return false;
-  }
+	/**
+	 * Selects an item.
+	 */
+	public boolean selectItem(String name) {
+		for (int i = 0; i < fItems.size(); i++) {
+			if (name.equals(fItems.get(i))) {
+				return selectItem(i);
+			}
+		}
+		return false;
+	}
 
-  public int getSelectionIndex() {
-    return fSelectionIndex;
-  }
+	public int getSelectionIndex() {
+		return fSelectionIndex;
+	}
 
-  /**
-   * Sets the text without triggering a dialog-changed event.
-   */
-  public void setTextWithoutUpdate(String text) {
-    fText = text;
-    if (isOkToUse(fComboControl)) {
-      fComboControl.removeModifyListener(fModifyListener);
-      fComboControl.setText(text);
-      fComboControl.addModifyListener(fModifyListener);
-    }
-  }
+	/**
+	 * Sets the text without triggering a dialog-changed event.
+	 */
+	public void setTextWithoutUpdate(String text) {
+		fText = text;
+		if (isOkToUse(fComboControl)) {
+			fComboControl.removeModifyListener(fModifyListener);
+			fComboControl.setText(text);
+			fComboControl.addModifyListener(fModifyListener);
+		}
+	}
 
-  @Override
-  public void refresh() {
-    super.refresh();
-    setTextWithoutUpdate(fText);
-  }
+	@Override
+	public void refresh() {
+		super.refresh();
+		setTextWithoutUpdate(fText);
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/DialogField.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/DialogField.java
index c7f29fc6f..e1744d850 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/DialogField.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/DialogField.java
@@ -28,195 +28,195 @@
  * DialogField have a label.
  */
 public class DialogField {
-  private Label fLabel;
-  protected String fLabelText;
-  private IDialogFieldListener fDialogFieldListener;
-  private boolean fEnabled;
-
-  public DialogField() {
-    fEnabled = true;
-    fLabel = null;
-    fLabelText = ""; //$NON-NLS-1$
-  }
-
-  /**
-   * Sets the label of the dialog field.
-   */
-  public void setLabelText(String labeltext) {
-    fLabelText = labeltext;
-    if (isOkToUse(fLabel)) {
-      fLabel.setText(labeltext);
-    }
-  }
-
-  // ------ change listener
-  /**
-   * Defines the listener for this dialog field.
-   */
-  public final void setDialogFieldListener(IDialogFieldListener listener) {
-    fDialogFieldListener = listener;
-  }
-
-  /**
-   * Programatical invocation of a dialog field change.
-   */
-  public void dialogFieldChanged() {
-    if (fDialogFieldListener != null) {
-      fDialogFieldListener.dialogFieldChanged(this);
-    }
-  }
-
-  // ------- focus management
-  /**
-   * Tries to set the focus to the dialog field. Returns <code>true</code> if the dialog field can
-   * take focus. To be reimplemented by dialog field implementors.
-   */
-  public boolean setFocus() {
-    return false;
-  }
-
-  /**
-   * Posts <code>setFocus</code> to the display event queue.
-   */
-  public void postSetFocusOnDialogField(Display display) {
-    if (display != null) {
-      display.asyncExec(new Runnable() {
-        @Override
-        public void run() {
-          setFocus();
-        }
-      });
-    }
-  }
-
-  // ------- layout helpers
-  /**
-   * Creates all controls of the dialog field and fills it to a composite. The composite is assumed
-   * to have <code>MGridLayout</code> as layout. The dialog field will adjust its controls' spans to
-   * the number of columns given. To be reimplemented by dialog field implementors.
-   */
-  public Control[] doFillIntoGrid(Composite parent, int nColumns) {
-    assertEnoughColumns(nColumns);
-    Label label = getLabelControl(parent);
-    label.setLayoutData(gridDataForLabel(nColumns));
-    return new Control[]{label};
-  }
-
-  /**
-   * Returns the number of columns of the dialog field. To be reimplemented by dialog field
-   * implementors.
-   */
-  public int getNumberOfControls() {
-    return 1;
-  }
-
-  protected static GridData gridDataForLabel(int span) {
-    GridData gd = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
-    gd.horizontalSpan = span;
-    return gd;
-  }
-
-  // ------- ui creation
-  /**
-   * Creates or returns the created label widget.
-   *
-   * @param parent
-   *          The parent composite or <code>null</code> if the widget has already been created.
-   */
-  public Label getLabelControl(Composite parent) {
-    if (fLabel == null) {
-      assertCompositeNotNull(parent);
-      fLabel = new Label(parent, SWT.LEFT | SWT.WRAP);
-      fLabel.setFont(parent.getFont());
-      fLabel.setEnabled(fEnabled);
-      if (fLabelText != null && !"".equals(fLabelText)) { //$NON-NLS-1$
-        fLabel.setText(fLabelText);
-      } else {
-        // XXX: to avoid a 16 pixel wide empty label - revisit
-        fLabel.setText("."); //$NON-NLS-1$
-        fLabel.setVisible(false);
-      }
-    }
-    return fLabel;
-  }
-
-  /**
-   * Creates a spacer control.
-   *
-   * @param parent
-   *          The parent composite
-   */
-  public static Control createEmptySpace(Composite parent) {
-    return createEmptySpace(parent, 1);
-  }
-
-  /**
-   * Creates a spacer control with the given span. The composite is assumed to have
-   * <code>MGridLayout</code> as layout.
-   *
-   * @param parent
-   *          The parent composite
-   */
-  public static Control createEmptySpace(Composite parent, int span) {
-    Label label = new Label(parent, SWT.LEFT);
-    GridData gd = new GridData();
-    gd.horizontalAlignment = GridData.BEGINNING;
-    gd.grabExcessHorizontalSpace = false;
-    gd.horizontalSpan = span;
-    gd.horizontalIndent = 0;
-    gd.widthHint = 0;
-    gd.heightHint = 0;
-    label.setLayoutData(gd);
-    return label;
-  }
-
-  /**
-   * Tests is the control is not <code>null</code> and not disposed.
-   */
-  protected final boolean isOkToUse(Control control) {
-    return control != null && Display.getCurrent() != null && !control.isDisposed();
-  }
-
-  // --------- enable / disable management
-  /**
-   * Sets the enable state of the dialog field.
-   */
-  public final void setEnabled(boolean enabled) {
-    if (enabled != fEnabled) {
-      fEnabled = enabled;
-      updateEnableState();
-    }
-  }
-
-  /**
-   * Called when the enable state changed. To be extended by dialog field implementors.
-   */
-  protected void updateEnableState() {
-    if (fLabel != null) {
-      fLabel.setEnabled(fEnabled);
-    }
-  }
-
-  /**
-   * Brings the UI in sync with the model. Only needed when model was changed in different thread
-   * whil UI was lready created.
-   */
-  public void refresh() {
-    updateEnableState();
-  }
-
-  /**
-   * Gets the enable state of the dialog field.
-   */
-  public final boolean isEnabled() {
-    return fEnabled;
-  }
-
-  protected final void assertCompositeNotNull(Composite comp) {
-    Assert.isNotNull(comp, "uncreated control requested with composite null"); //$NON-NLS-1$
-  }
-
-  protected final void assertEnoughColumns(int nColumns) {
-    Assert.isTrue(nColumns >= getNumberOfControls(), "given number of columns is too small"); //$NON-NLS-1$
-  }
+	private Label fLabel;
+	protected String fLabelText;
+	private IDialogFieldListener fDialogFieldListener;
+	private boolean fEnabled;
+
+	public DialogField() {
+		fEnabled = true;
+		fLabel = null;
+		fLabelText = ""; //$NON-NLS-1$
+	}
+
+	/**
+	 * Sets the label of the dialog field.
+	 */
+	public void setLabelText(String labeltext) {
+		fLabelText = labeltext;
+		if (isOkToUse(fLabel)) {
+			fLabel.setText(labeltext);
+		}
+	}
+
+	// ------ change listener
+	/**
+	 * Defines the listener for this dialog field.
+	 */
+	public final void setDialogFieldListener(IDialogFieldListener listener) {
+		fDialogFieldListener = listener;
+	}
+
+	/**
+	 * Programatical invocation of a dialog field change.
+	 */
+	public void dialogFieldChanged() {
+		if (fDialogFieldListener != null) {
+			fDialogFieldListener.dialogFieldChanged(this);
+		}
+	}
+
+	// ------- focus management
+	/**
+	 * Tries to set the focus to the dialog field. Returns <code>true</code> if the dialog field can
+	 * take focus. To be reimplemented by dialog field implementors.
+	 */
+	public boolean setFocus() {
+		return false;
+	}
+
+	/**
+	 * Posts <code>setFocus</code> to the display event queue.
+	 */
+	public void postSetFocusOnDialogField(Display display) {
+		if (display != null) {
+			display.asyncExec(new Runnable() {
+				@Override
+				public void run() {
+					setFocus();
+				}
+			});
+		}
+	}
+
+	// ------- layout helpers
+	/**
+	 * Creates all controls of the dialog field and fills it to a composite. The composite is assumed
+	 * to have <code>MGridLayout</code> as layout. The dialog field will adjust its controls' spans to
+	 * the number of columns given. To be reimplemented by dialog field implementors.
+	 */
+	public Control[] doFillIntoGrid(Composite parent, int nColumns) {
+		assertEnoughColumns(nColumns);
+		Label label = getLabelControl(parent);
+		label.setLayoutData(gridDataForLabel(nColumns));
+		return new Control[]{label};
+	}
+
+	/**
+	 * Returns the number of columns of the dialog field. To be reimplemented by dialog field
+	 * implementors.
+	 */
+	public int getNumberOfControls() {
+		return 1;
+	}
+
+	protected static GridData gridDataForLabel(int span) {
+		GridData gd = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
+		gd.horizontalSpan = span;
+		return gd;
+	}
+
+	// ------- ui creation
+	/**
+	 * Creates or returns the created label widget.
+	 *
+	 * @param parent
+	 *          The parent composite or <code>null</code> if the widget has already been created.
+	 */
+	public Label getLabelControl(Composite parent) {
+		if (fLabel == null) {
+			assertCompositeNotNull(parent);
+			fLabel = new Label(parent, SWT.LEFT | SWT.WRAP);
+			fLabel.setFont(parent.getFont());
+			fLabel.setEnabled(fEnabled);
+			if (fLabelText != null && !"".equals(fLabelText)) { //$NON-NLS-1$
+				fLabel.setText(fLabelText);
+			} else {
+				// XXX: to avoid a 16 pixel wide empty label - revisit
+				fLabel.setText("."); //$NON-NLS-1$
+				fLabel.setVisible(false);
+			}
+		}
+		return fLabel;
+	}
+
+	/**
+	 * Creates a spacer control.
+	 *
+	 * @param parent
+	 *          The parent composite
+	 */
+	public static Control createEmptySpace(Composite parent) {
+		return createEmptySpace(parent, 1);
+	}
+
+	/**
+	 * Creates a spacer control with the given span. The composite is assumed to have
+	 * <code>MGridLayout</code> as layout.
+	 *
+	 * @param parent
+	 *          The parent composite
+	 */
+	public static Control createEmptySpace(Composite parent, int span) {
+		Label label = new Label(parent, SWT.LEFT);
+		GridData gd = new GridData();
+		gd.horizontalAlignment = GridData.BEGINNING;
+		gd.grabExcessHorizontalSpace = false;
+		gd.horizontalSpan = span;
+		gd.horizontalIndent = 0;
+		gd.widthHint = 0;
+		gd.heightHint = 0;
+		label.setLayoutData(gd);
+		return label;
+	}
+
+	/**
+	 * Tests is the control is not <code>null</code> and not disposed.
+	 */
+	protected final boolean isOkToUse(Control control) {
+		return control != null && Display.getCurrent() != null && !control.isDisposed();
+	}
+
+	// --------- enable / disable management
+	/**
+	 * Sets the enable state of the dialog field.
+	 */
+	public final void setEnabled(boolean enabled) {
+		if (enabled != fEnabled) {
+			fEnabled = enabled;
+			updateEnableState();
+		}
+	}
+
+	/**
+	 * Called when the enable state changed. To be extended by dialog field implementors.
+	 */
+	protected void updateEnableState() {
+		if (fLabel != null) {
+			fLabel.setEnabled(fEnabled);
+		}
+	}
+
+	/**
+	 * Brings the UI in sync with the model. Only needed when model was changed in different thread
+	 * whil UI was lready created.
+	 */
+	public void refresh() {
+		updateEnableState();
+	}
+
+	/**
+	 * Gets the enable state of the dialog field.
+	 */
+	public final boolean isEnabled() {
+		return fEnabled;
+	}
+
+	protected final void assertCompositeNotNull(Composite comp) {
+		Assert.isNotNull(comp, "uncreated control requested with composite null"); //$NON-NLS-1$
+	}
+
+	protected final void assertEnoughColumns(int nColumns) {
+		Assert.isTrue(nColumns >= getNumberOfControls(), "given number of columns is too small"); //$NON-NLS-1$
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/DialogFieldUtils.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/DialogFieldUtils.java
index 86183d399..0f00c2b59 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/DialogFieldUtils.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/DialogFieldUtils.java
@@ -22,40 +22,40 @@
  * @author scheglov_ke
  */
 public class DialogFieldUtils {
-  /**
-   * Utility method for creating field control and tweaking layout properties.
-   *
-   * @return the created {@link Control}s.
-   */
-  public static Control[] fillControls(Composite parent,
-      DialogField field,
-      int nColumns,
-      int charsWidth) {
-    // create field's controls
-    Control[] controls = field.doFillIntoGrid(parent, nColumns);
-    // prepare main control
-    Control control;
-    if (field instanceof StringDialogField) {
-      control = ((StringDialogField) field).getTextControl(null);
-    } else if (field instanceof StringAreaDialogField) {
-      control = ((StringAreaDialogField) field).getTextControl(null);
-    } else if (field instanceof ComboDialogField) {
-      control = ((ComboDialogField) field).getComboControl(null);
-    } else if (field instanceof BooleanDialogField) {
-      control = ((BooleanDialogField) field).getButtonControl(parent);
-    } else if (field instanceof SelectionButtonDialogFieldGroup) {
-      control = ((SelectionButtonDialogFieldGroup) field).getSelectionButtonsGroup(parent);
-    } else if (field instanceof CheckedListDialogField) {
-      control = ((CheckedListDialogField) field).getListControl(parent);
-    } else if (field instanceof FontDialogField) {
-      control = ((FontDialogField) field).getGroupControl(parent);
-    } else if (field instanceof LayoutDialogFieldGroup) {
-      control = ((LayoutDialogFieldGroup) field).getSelectionButtonsGroup(parent);
-    } else {
-      throw new IllegalArgumentException("Not supported dialog field: " + field);
-    }
-    // configure layout data
-    GridDataFactory.modify(control).grabH().hintHC(charsWidth).fillH();
-    return controls;
-  }
+	/**
+	 * Utility method for creating field control and tweaking layout properties.
+	 *
+	 * @return the created {@link Control}s.
+	 */
+	public static Control[] fillControls(Composite parent,
+			DialogField field,
+			int nColumns,
+			int charsWidth) {
+		// create field's controls
+		Control[] controls = field.doFillIntoGrid(parent, nColumns);
+		// prepare main control
+		Control control;
+		if (field instanceof StringDialogField) {
+			control = ((StringDialogField) field).getTextControl(null);
+		} else if (field instanceof StringAreaDialogField) {
+			control = ((StringAreaDialogField) field).getTextControl(null);
+		} else if (field instanceof ComboDialogField) {
+			control = ((ComboDialogField) field).getComboControl(null);
+		} else if (field instanceof BooleanDialogField) {
+			control = ((BooleanDialogField) field).getButtonControl(parent);
+		} else if (field instanceof SelectionButtonDialogFieldGroup) {
+			control = ((SelectionButtonDialogFieldGroup) field).getSelectionButtonsGroup(parent);
+		} else if (field instanceof CheckedListDialogField) {
+			control = ((CheckedListDialogField) field).getListControl(parent);
+		} else if (field instanceof FontDialogField) {
+			control = ((FontDialogField) field).getGroupControl(parent);
+		} else if (field instanceof LayoutDialogFieldGroup) {
+			control = ((LayoutDialogFieldGroup) field).getSelectionButtonsGroup(parent);
+		} else {
+			throw new IllegalArgumentException("Not supported dialog field: " + field);
+		}
+		// configure layout data
+		GridDataFactory.modify(control).grabH().hintHC(charsWidth).fillH();
+		return controls;
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/FontDialogField.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/FontDialogField.java
index 9abeae619..8fe4a509e 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/FontDialogField.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/FontDialogField.java
@@ -32,162 +32,162 @@
  * @author scheglov_ke
  */
 public class FontDialogField extends DialogField {
-  private FontData[] m_fontDataArray;
-  private String m_chooseButtonText = "!Choose!";
-  private String m_defaultButtonText = "!Default!";
-  //
-  private Group m_group;
-  private Label m_fontLabel;
-  private Button m_chooseButton;
-  private Button m_defaultButton;
+	private FontData[] m_fontDataArray;
+	private String m_chooseButtonText = "!Choose!";
+	private String m_defaultButtonText = "!Default!";
+	//
+	private Group m_group;
+	private Label m_fontLabel;
+	private Button m_chooseButton;
+	private Button m_defaultButton;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Control[] doFillIntoGrid(Composite parent, int columns) {
-    assertEnoughColumns(columns);
-    // create group
-    getGroupControl(parent);
-    GridDataFactory.create(m_group).spanH(columns).grabH().fillH();
-    //
-    return new Control[]{m_group};
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Control[] doFillIntoGrid(Composite parent, int columns) {
+		assertEnoughColumns(columns);
+		// create group
+		getGroupControl(parent);
+		GridDataFactory.create(m_group).spanH(columns).grabH().fillH();
+		//
+		return new Control[]{m_group};
+	}
 
-  @Override
-  public int getNumberOfControls() {
-    return 1;
-  }
+	@Override
+	public int getNumberOfControls() {
+		return 1;
+	}
 
-  /**
-   * Returns or creates {@link Group} control.
-   */
-  public Group getGroupControl(Composite parent) {
-    if (m_group == null) {
-      m_group = new Group(parent, SWT.NONE);
-      m_group.setText(fLabelText);
-      //
-      GridLayoutFactory.create(m_group).columns(3);
-      // font label
-      {
-        m_fontLabel = new Label(m_group, SWT.NONE);
-        GridDataFactory.create(m_fontLabel).grab().fillH().alignVM();
-        updateFontLabel();
-      }
-      // buttons
-      {
-        {
-          m_chooseButton = new Button(m_group, SWT.NONE);
-          GridDataFactory.create(m_chooseButton);
-          m_chooseButton.setText(m_chooseButtonText);
-          m_chooseButton.addListener(SWT.Selection, new Listener() {
-            @Override
-            public void handleEvent(Event event) {
-              FontDialog fontDialog = new FontDialog(m_group.getShell());
-              fontDialog.setFontList(m_fontDataArray);
-              if (fontDialog.open() != null) {
-                setFontDataArray(fontDialog.getFontList());
-              }
-            }
-          });
-        }
-        {
-          m_defaultButton = new Button(m_group, SWT.NONE);
-          GridDataFactory.create(m_defaultButton);
-          m_defaultButton.setText(m_defaultButtonText);
-          m_defaultButton.addListener(SWT.Selection, new Listener() {
-            @Override
-            public void handleEvent(Event event) {
-              setFontDataArray(Display.getDefault().getSystemFont().getFontData());
-            }
-          });
-        }
-      }
-    }
-    return m_group;
-  }
+	/**
+	 * Returns or creates {@link Group} control.
+	 */
+	public Group getGroupControl(Composite parent) {
+		if (m_group == null) {
+			m_group = new Group(parent, SWT.NONE);
+			m_group.setText(fLabelText);
+			//
+			GridLayoutFactory.create(m_group).columns(3);
+			// font label
+			{
+				m_fontLabel = new Label(m_group, SWT.NONE);
+				GridDataFactory.create(m_fontLabel).grab().fillH().alignVM();
+				updateFontLabel();
+			}
+			// buttons
+			{
+				{
+					m_chooseButton = new Button(m_group, SWT.NONE);
+					GridDataFactory.create(m_chooseButton);
+					m_chooseButton.setText(m_chooseButtonText);
+					m_chooseButton.addListener(SWT.Selection, new Listener() {
+						@Override
+						public void handleEvent(Event event) {
+							FontDialog fontDialog = new FontDialog(m_group.getShell());
+							fontDialog.setFontList(m_fontDataArray);
+							if (fontDialog.open() != null) {
+								setFontDataArray(fontDialog.getFontList());
+							}
+						}
+					});
+				}
+				{
+					m_defaultButton = new Button(m_group, SWT.NONE);
+					GridDataFactory.create(m_defaultButton);
+					m_defaultButton.setText(m_defaultButtonText);
+					m_defaultButton.addListener(SWT.Selection, new Listener() {
+						@Override
+						public void handleEvent(Event event) {
+							setFontDataArray(Display.getDefault().getSystemFont().getFontData());
+						}
+					});
+				}
+			}
+		}
+		return m_group;
+	}
 
-  /**
-   * Shows current array of {@link FontData} in {@link #m_fontLabel}.
-   */
-  private void updateFontLabel() {
-    if (isOkToUse(m_fontLabel)) {
-      if (m_fontDataArray != null) {
-        m_fontLabel.setFont(new Font(m_group.getDisplay(), m_fontDataArray));
-        //
-        FontData fontData = m_fontDataArray[0];
-        //
-        String styleString = "";
-        {
-          int style = fontData.getStyle();
-          if ((style & SWT.BOLD) != 0) {
-            styleString += " BOLD";
-          }
-          if ((style & SWT.ITALIC) != 0) {
-            styleString += " ITALIC";
-          }
-        }
-        m_fontLabel.setText(fontData.getName() + styleString + " " + fontData.getHeight());
-      } else {
-        m_fontLabel.setFont(null);
-        m_fontLabel.setText("");
-      }
-      m_group.layout();
-    }
-  }
+	/**
+	 * Shows current array of {@link FontData} in {@link #m_fontLabel}.
+	 */
+	private void updateFontLabel() {
+		if (isOkToUse(m_fontLabel)) {
+			if (m_fontDataArray != null) {
+				m_fontLabel.setFont(new Font(m_group.getDisplay(), m_fontDataArray));
+				//
+				FontData fontData = m_fontDataArray[0];
+				//
+				String styleString = "";
+				{
+					int style = fontData.getStyle();
+					if ((style & SWT.BOLD) != 0) {
+						styleString += " BOLD";
+					}
+					if ((style & SWT.ITALIC) != 0) {
+						styleString += " ITALIC";
+					}
+				}
+				m_fontLabel.setText(fontData.getName() + styleString + " " + fontData.getHeight());
+			} else {
+				m_fontLabel.setFont(null);
+				m_fontLabel.setText("");
+			}
+			m_group.layout();
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Focus methods
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean setFocus() {
-    if (isOkToUse(m_chooseButton)) {
-      m_chooseButton.setFocus();
-    }
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Focus methods
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean setFocus() {
+		if (isOkToUse(m_chooseButton)) {
+			m_chooseButton.setFocus();
+		}
+		return true;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the selected array of {@link FontData}.
-   */
-  public FontData[] getFontDataArray() {
-    return m_fontDataArray;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the selected array of {@link FontData}.
+	 */
+	public FontData[] getFontDataArray() {
+		return m_fontDataArray;
+	}
 
-  /**
-   * Sets the array of {@link FontData} to display.
-   */
-  public void setFontDataArray(FontData[] fontDataArray) {
-    m_fontDataArray = fontDataArray;
-    updateFontLabel();
-  }
+	/**
+	 * Sets the array of {@link FontData} to display.
+	 */
+	public void setFontDataArray(FontData[] fontDataArray) {
+		m_fontDataArray = fontDataArray;
+		updateFontLabel();
+	}
 
-  /**
-   * Sets the label of "choose" button.
-   */
-  public void setChooseButtonText(String chooseButtonText) {
-    m_chooseButtonText = chooseButtonText;
-    if (isOkToUse(m_chooseButton)) {
-      m_chooseButton.setText(m_chooseButtonText);
-    }
-  }
+	/**
+	 * Sets the label of "choose" button.
+	 */
+	public void setChooseButtonText(String chooseButtonText) {
+		m_chooseButtonText = chooseButtonText;
+		if (isOkToUse(m_chooseButton)) {
+			m_chooseButton.setText(m_chooseButtonText);
+		}
+	}
 
-  /**
-   * Sets the label of "default" button.
-   */
-  public void setDefaultButtonText(String defaultButtonText) {
-    m_defaultButtonText = defaultButtonText;
-    if (isOkToUse(m_defaultButton)) {
-      m_defaultButton.setText(m_defaultButtonText);
-    }
-  }
+	/**
+	 * Sets the label of "default" button.
+	 */
+	public void setDefaultButtonText(String defaultButtonText) {
+		m_defaultButtonText = defaultButtonText;
+		if (isOkToUse(m_defaultButton)) {
+			m_defaultButton.setText(m_defaultButtonText);
+		}
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/IDialogFieldListener.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/IDialogFieldListener.java
index 87c6234e2..b1017ac25 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/IDialogFieldListener.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/IDialogFieldListener.java
@@ -14,8 +14,8 @@
  * Change listener used by <code>DialogField</code>
  */
 public interface IDialogFieldListener {
-  /**
-   * The dialog field has changed.
-   */
-  void dialogFieldChanged(DialogField field);
+	/**
+	 * The dialog field has changed.
+	 */
+	void dialogFieldChanged(DialogField field);
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/IListAdapter.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/IListAdapter.java
index 5d32d152a..219d2f511 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/IListAdapter.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/IListAdapter.java
@@ -14,18 +14,18 @@
  * Change listener used by <code>ListDialogField</code> and <code>CheckedListDialogField</code>
  */
 public interface IListAdapter {
-  /**
-   * A button from the button bar has been pressed.
-   */
-  void customButtonPressed(ListDialogField field, int index);
+	/**
+	 * A button from the button bar has been pressed.
+	 */
+	void customButtonPressed(ListDialogField field, int index);
 
-  /**
-   * The selection of the list has changed.
-   */
-  void selectionChanged(ListDialogField field);
+	/**
+	 * The selection of the list has changed.
+	 */
+	void selectionChanged(ListDialogField field);
 
-  /**
-   * An entry in the list has been double clicked.
-   */
-  void doubleClicked(ListDialogField field);
+	/**
+	 * An entry in the list has been double clicked.
+	 */
+	void doubleClicked(ListDialogField field);
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/IMessageContainer.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/IMessageContainer.java
index d8b93d7fa..25bd1908d 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/IMessageContainer.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/IMessageContainer.java
@@ -22,34 +22,34 @@
  * @author scheglov_ke
  */
 public interface IMessageContainer {
-  void setErrorMessage(String message);
+	void setErrorMessage(String message);
 
-  /**
-   * Helper class for creating {@link IMessageContainer} for standard GUI objects.
-   */
-  public static class Util {
-    /**
-     * Creates {@link IMessageContainer} for {@link WizardPage}.
-     */
-    public static IMessageContainer forWizardPage(final WizardPage wizardPage) {
-      return new IMessageContainer() {
-        @Override
-        public void setErrorMessage(String message) {
-          wizardPage.setErrorMessage(message);
-        }
-      };
-    }
+	/**
+	 * Helper class for creating {@link IMessageContainer} for standard GUI objects.
+	 */
+	public static class Util {
+		/**
+		 * Creates {@link IMessageContainer} for {@link WizardPage}.
+		 */
+		public static IMessageContainer forWizardPage(final WizardPage wizardPage) {
+			return new IMessageContainer() {
+				@Override
+				public void setErrorMessage(String message) {
+					wizardPage.setErrorMessage(message);
+				}
+			};
+		}
 
-    /**
-     * Creates {@link IMessageContainer} for {@link TitleAreaDialog}.
-     */
-    public static IMessageContainer forTitleAreaDialog(final TitleAreaDialog titleAreaDialog) {
-      return new IMessageContainer() {
-        @Override
-        public void setErrorMessage(String message) {
-          titleAreaDialog.setErrorMessage(message);
-        }
-      };
-    }
-  }
+		/**
+		 * Creates {@link IMessageContainer} for {@link TitleAreaDialog}.
+		 */
+		public static IMessageContainer forTitleAreaDialog(final TitleAreaDialog titleAreaDialog) {
+			return new IMessageContainer() {
+				@Override
+				public void setErrorMessage(String message) {
+					titleAreaDialog.setErrorMessage(message);
+				}
+			};
+		}
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/IStringButtonAdapter.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/IStringButtonAdapter.java
index 98dff4123..4573dca0d 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/IStringButtonAdapter.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/IStringButtonAdapter.java
@@ -14,5 +14,5 @@
  * Change listener used by <code>StringButtonDialogField</code>
  */
 public interface IStringButtonAdapter {
-  void changeControlPressed(DialogField field);
+	void changeControlPressed(DialogField field);
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/LayoutDialogFieldGroup.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/LayoutDialogFieldGroup.java
index 47273732e..faeda474f 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/LayoutDialogFieldGroup.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/LayoutDialogFieldGroup.java
@@ -26,275 +26,275 @@
  * Dialog field describing a group with buttons (Checkboxes, radio buttons..)
  */
 public class LayoutDialogFieldGroup extends DialogField {
-  private Composite fButtonComposite;
-  private Button[] fButtons;
-  private final String[] fButtonNames;
-  private final boolean[] fButtonsSelected;
-  private final boolean[] fButtonsEnabled;
-  private final int fGroupBorderStyle;
-  private final int fGroupNumberOfColumns;
-  private final int fButtonsStyle;
+	private Composite fButtonComposite;
+	private Button[] fButtons;
+	private final String[] fButtonNames;
+	private final boolean[] fButtonsSelected;
+	private final boolean[] fButtonsEnabled;
+	private final int fGroupBorderStyle;
+	private final int fGroupNumberOfColumns;
+	private final int fButtonsStyle;
 
-  /**
-   * Creates a group without border.
-   */
-  public LayoutDialogFieldGroup(int buttonsStyle, String[] buttonNames, int nColumns) {
-    this(buttonsStyle, buttonNames, nColumns, SWT.NONE);
-  }
+	/**
+	 * Creates a group without border.
+	 */
+	public LayoutDialogFieldGroup(int buttonsStyle, String[] buttonNames, int nColumns) {
+		this(buttonsStyle, buttonNames, nColumns, SWT.NONE);
+	}
 
-  /**
-   * Creates a group with border (label in border). Accepted button styles are: SWT.RADIO,
-   * SWT.CHECK, SWT.TOGGLE For border styles see <code>Group</code>
-   */
-  public LayoutDialogFieldGroup(int buttonsStyle,
-      String[] buttonNames,
-      int nColumns,
-      int borderStyle) {
-    super();
-    Assert.isTrue(
-        buttonsStyle == SWT.RADIO || buttonsStyle == SWT.CHECK || buttonsStyle == SWT.TOGGLE);
-    fButtonNames = buttonNames;
-    fButtonsStyle = buttonsStyle;
-    int nButtons = buttonNames.length;
-    fButtonsSelected = new boolean[nButtons];
-    fButtonsEnabled = new boolean[nButtons];
-    for (int i = 0; i < nButtons; i++) {
-      fButtonsSelected[i] = false;
-      fButtonsEnabled[i] = true;
-    }
-    if (buttonsStyle == SWT.RADIO) {
-      fButtonsSelected[0] = true;
-    }
-    fGroupBorderStyle = borderStyle;
-    fGroupNumberOfColumns = nColumns <= 0 ? nButtons : nColumns;
-  }
+	/**
+	 * Creates a group with border (label in border). Accepted button styles are: SWT.RADIO,
+	 * SWT.CHECK, SWT.TOGGLE For border styles see <code>Group</code>
+	 */
+	public LayoutDialogFieldGroup(int buttonsStyle,
+			String[] buttonNames,
+			int nColumns,
+			int borderStyle) {
+		super();
+		Assert.isTrue(
+				buttonsStyle == SWT.RADIO || buttonsStyle == SWT.CHECK || buttonsStyle == SWT.TOGGLE);
+		fButtonNames = buttonNames;
+		fButtonsStyle = buttonsStyle;
+		int nButtons = buttonNames.length;
+		fButtonsSelected = new boolean[nButtons];
+		fButtonsEnabled = new boolean[nButtons];
+		for (int i = 0; i < nButtons; i++) {
+			fButtonsSelected[i] = false;
+			fButtonsEnabled[i] = true;
+		}
+		if (buttonsStyle == SWT.RADIO) {
+			fButtonsSelected[0] = true;
+		}
+		fGroupBorderStyle = borderStyle;
+		fGroupNumberOfColumns = nColumns <= 0 ? nButtons : nColumns;
+	}
 
-  // ------- layout helpers
-  /*
-   * @see DialogField#doFillIntoGrid
-   */
-  @Override
-  public Control[] doFillIntoGrid(Composite parent, int nColumns) {
-    assertEnoughColumns(nColumns);
-    if (fGroupBorderStyle == SWT.NONE) {
-      Label label = getLabelControl(parent);
-      label.setLayoutData(gridDataForLabel(1));
-      Composite buttonsgroup = getSelectionButtonsGroup(parent);
-      GridData gd = new GridData();
-      gd.horizontalSpan = nColumns - 1;
-      buttonsgroup.setLayoutData(gd);
-      return new Control[]{label, buttonsgroup};
-    } else {
-      Composite buttonsgroup = getSelectionButtonsGroup(parent);
-      GridData gd = new GridData();
-      gd.horizontalSpan = nColumns;
-      buttonsgroup.setLayoutData(gd);
-      return new Control[]{buttonsgroup};
-    }
-  }
+	// ------- layout helpers
+	/*
+	 * @see DialogField#doFillIntoGrid
+	 */
+	@Override
+	public Control[] doFillIntoGrid(Composite parent, int nColumns) {
+		assertEnoughColumns(nColumns);
+		if (fGroupBorderStyle == SWT.NONE) {
+			Label label = getLabelControl(parent);
+			label.setLayoutData(gridDataForLabel(1));
+			Composite buttonsgroup = getSelectionButtonsGroup(parent);
+			GridData gd = new GridData();
+			gd.horizontalSpan = nColumns - 1;
+			buttonsgroup.setLayoutData(gd);
+			return new Control[]{label, buttonsgroup};
+		} else {
+			Composite buttonsgroup = getSelectionButtonsGroup(parent);
+			GridData gd = new GridData();
+			gd.horizontalSpan = nColumns;
+			buttonsgroup.setLayoutData(gd);
+			return new Control[]{buttonsgroup};
+		}
+	}
 
-  /*
-   * @see DialogField#doFillIntoGrid
-   */
-  @Override
-  public int getNumberOfControls() {
-    return fGroupBorderStyle == SWT.NONE ? 2 : 1;
-  }
+	/*
+	 * @see DialogField#doFillIntoGrid
+	 */
+	@Override
+	public int getNumberOfControls() {
+		return fGroupBorderStyle == SWT.NONE ? 2 : 1;
+	}
 
-  // ------- ui creation
-  private Button createSelectionButton(int index, Composite group, SelectionListener listener) {
-    Button button = new Button(group, fButtonsStyle | SWT.LEFT);
-    button.setFont(group.getFont());
-    button.setText(fButtonNames[index]);
-    button.setEnabled(isEnabled() && fButtonsEnabled[index]);
-    button.setSelection(fButtonsSelected[index]);
-    button.addSelectionListener(listener);
-    button.setLayoutData(new GridData());
-    return button;
-  }
+	// ------- ui creation
+	private Button createSelectionButton(int index, Composite group, SelectionListener listener) {
+		Button button = new Button(group, fButtonsStyle | SWT.LEFT);
+		button.setFont(group.getFont());
+		button.setText(fButtonNames[index]);
+		button.setEnabled(isEnabled() && fButtonsEnabled[index]);
+		button.setSelection(fButtonsSelected[index]);
+		button.addSelectionListener(listener);
+		button.setLayoutData(new GridData());
+		return button;
+	}
 
-  /**
-   * Returns the group widget. When called the first time, the widget will be created.
-   *
-   * @param parent
-   *          The parent composite when called the first time, or <code>null</code> after.
-   */
-  public Composite getSelectionButtonsGroup(Composite parent) {
-    if (fButtonComposite == null) {
-      assertCompositeNotNull(parent);
-      GridLayout layout = new GridLayout();
-      layout.makeColumnsEqualWidth = true;
-      layout.numColumns = fGroupNumberOfColumns;
-      if (fGroupBorderStyle != SWT.NONE) {
-        Group group = new Group(parent, fGroupBorderStyle);
-        group.setFont(parent.getFont());
-        if (fLabelText != null && fLabelText.length() > 0) {
-          group.setText(fLabelText);
-        }
-        fButtonComposite = group;
-      } else {
-        fButtonComposite = new Composite(parent, SWT.NONE);
-        fButtonComposite.setFont(parent.getFont());
-        layout.marginHeight = 0;
-        layout.marginWidth = 0;
-      }
-      fButtonComposite.setLayout(layout);
-      SelectionListener listener = new SelectionListener() {
-        @Override
-        public void widgetDefaultSelected(SelectionEvent e) {
-          doWidgetSelected(e);
-        }
+	/**
+	 * Returns the group widget. When called the first time, the widget will be created.
+	 *
+	 * @param parent
+	 *          The parent composite when called the first time, or <code>null</code> after.
+	 */
+	public Composite getSelectionButtonsGroup(Composite parent) {
+		if (fButtonComposite == null) {
+			assertCompositeNotNull(parent);
+			GridLayout layout = new GridLayout();
+			layout.makeColumnsEqualWidth = true;
+			layout.numColumns = fGroupNumberOfColumns;
+			if (fGroupBorderStyle != SWT.NONE) {
+				Group group = new Group(parent, fGroupBorderStyle);
+				group.setFont(parent.getFont());
+				if (fLabelText != null && fLabelText.length() > 0) {
+					group.setText(fLabelText);
+				}
+				fButtonComposite = group;
+			} else {
+				fButtonComposite = new Composite(parent, SWT.NONE);
+				fButtonComposite.setFont(parent.getFont());
+				layout.marginHeight = 0;
+				layout.marginWidth = 0;
+			}
+			fButtonComposite.setLayout(layout);
+			SelectionListener listener = new SelectionListener() {
+				@Override
+				public void widgetDefaultSelected(SelectionEvent e) {
+					doWidgetSelected(e);
+				}
 
-        @Override
-        public void widgetSelected(SelectionEvent e) {
-          doWidgetSelected(e);
-        }
-      };
-      int nButtons = fButtonNames.length;
-      fButtons = new Button[nButtons];
-      for (int i = 0; i < nButtons; i++) {
-        fButtons[i] = createSelectionButton(i, fButtonComposite, listener);
-      }
-      int nRows = nButtons / fGroupNumberOfColumns;
-      int nFillElements = nRows * fGroupNumberOfColumns - nButtons;
-      for (int i = 0; i < nFillElements; i++) {
-        createEmptySpace(fButtonComposite);
-      }
-    }
-    return fButtonComposite;
-  }
+				@Override
+				public void widgetSelected(SelectionEvent e) {
+					doWidgetSelected(e);
+				}
+			};
+			int nButtons = fButtonNames.length;
+			fButtons = new Button[nButtons];
+			for (int i = 0; i < nButtons; i++) {
+				fButtons[i] = createSelectionButton(i, fButtonComposite, listener);
+			}
+			int nRows = nButtons / fGroupNumberOfColumns;
+			int nFillElements = nRows * fGroupNumberOfColumns - nButtons;
+			for (int i = 0; i < nFillElements; i++) {
+				createEmptySpace(fButtonComposite);
+			}
+		}
+		return fButtonComposite;
+	}
 
-  /**
-   * Returns a button from the group or <code>null</code> if not yet created.
-   */
-  public Button getSelectionButton(int index) {
-    if (index >= 0 && index < fButtons.length) {
-      return fButtons[index];
-    }
-    return null;
-  }
+	/**
+	 * Returns a button from the group or <code>null</code> if not yet created.
+	 */
+	public Button getSelectionButton(int index) {
+		if (index >= 0 && index < fButtons.length) {
+			return fButtons[index];
+		}
+		return null;
+	}
 
-  private void doWidgetSelected(SelectionEvent e) {
-    Button button = (Button) e.widget;
-    for (int i = 0; i < fButtons.length; i++) {
-      if (fButtons[i] == button) {
-        fButtonsSelected[i] = button.getSelection();
-        dialogFieldChanged();
-        return;
-      }
-    }
-  }
+	private void doWidgetSelected(SelectionEvent e) {
+		Button button = (Button) e.widget;
+		for (int i = 0; i < fButtons.length; i++) {
+			if (fButtons[i] == button) {
+				fButtonsSelected[i] = button.getSelection();
+				dialogFieldChanged();
+				return;
+			}
+		}
+	}
 
-  // ------ model access
-  /**
-   * @return the indexes of selected buttons. Can return empty array.
-   */
-  public int[] getSelection() {
-    // prepare count of selected buttons
-    int count = 0;
-    for (int i = 0; i < fButtonsSelected.length; i++) {
-      if (fButtonsSelected[i]) {
-        count++;
-      }
-    }
-    // fill array of selected buttons
-    int[] selection = new int[count];
-    int index = 0;
-    for (int i = 0; i < fButtonsSelected.length; i++) {
-      if (fButtonsSelected[i]) {
-        selection[index++] = i;
-      }
-    }
-    //
-    return selection;
-  }
+	// ------ model access
+	/**
+	 * @return the indexes of selected buttons. Can return empty array.
+	 */
+	public int[] getSelection() {
+		// prepare count of selected buttons
+		int count = 0;
+		for (int i = 0; i < fButtonsSelected.length; i++) {
+			if (fButtonsSelected[i]) {
+				count++;
+			}
+		}
+		// fill array of selected buttons
+		int[] selection = new int[count];
+		int index = 0;
+		for (int i = 0; i < fButtonsSelected.length; i++) {
+			if (fButtonsSelected[i]) {
+				selection[index++] = i;
+			}
+		}
+		//
+		return selection;
+	}
 
-  /**
-   * Sets the indexes of selected buttons, all other buttons will be deselected.
-   */
-  public void setSelection(int[] selection) {
-    // set selection "false"
-    for (int i = 0; i < fButtonsSelected.length; i++) {
-      setSelection(i, false);
-    }
-    // set selection "true"
-    for (int i = 0; i < selection.length; i++) {
-      int index = selection[i];
-      setSelection(index, true);
-    }
-  }
+	/**
+	 * Sets the indexes of selected buttons, all other buttons will be deselected.
+	 */
+	public void setSelection(int[] selection) {
+		// set selection "false"
+		for (int i = 0; i < fButtonsSelected.length; i++) {
+			setSelection(i, false);
+		}
+		// set selection "true"
+		for (int i = 0; i < selection.length; i++) {
+			int index = selection[i];
+			setSelection(index, true);
+		}
+	}
 
-  /**
-   * Returns the selection state of a button contained in the group.
-   *
-   * @param index
-   *          The index of the button
-   */
-  public boolean isSelected(int index) {
-    if (index >= 0 && index < fButtonsSelected.length) {
-      return fButtonsSelected[index];
-    }
-    return false;
-  }
+	/**
+	 * Returns the selection state of a button contained in the group.
+	 *
+	 * @param index
+	 *          The index of the button
+	 */
+	public boolean isSelected(int index) {
+		if (index >= 0 && index < fButtonsSelected.length) {
+			return fButtonsSelected[index];
+		}
+		return false;
+	}
 
-  /**
-   * Sets the selection state of a button contained in the group.
-   */
-  public void setSelection(int index, boolean selected) {
-    if (index >= 0 && index < fButtonsSelected.length) {
-      if (fButtonsSelected[index] != selected) {
-        fButtonsSelected[index] = selected;
-        if (fButtons != null) {
-          Button button = fButtons[index];
-          if (isOkToUse(button)) {
-            button.setSelection(selected);
-          }
-        }
-      }
-    }
-  }
+	/**
+	 * Sets the selection state of a button contained in the group.
+	 */
+	public void setSelection(int index, boolean selected) {
+		if (index >= 0 && index < fButtonsSelected.length) {
+			if (fButtonsSelected[index] != selected) {
+				fButtonsSelected[index] = selected;
+				if (fButtons != null) {
+					Button button = fButtons[index];
+					if (isOkToUse(button)) {
+						button.setSelection(selected);
+					}
+				}
+			}
+		}
+	}
 
-  // ------ enable / disable management
-  @Override
-  protected void updateEnableState() {
-    super.updateEnableState();
-    if (fButtons != null) {
-      boolean enabled = isEnabled();
-      for (int i = 0; i < fButtons.length; i++) {
-        Button button = fButtons[i];
-        if (isOkToUse(button)) {
-          button.setEnabled(enabled && fButtonsEnabled[i]);
-        }
-      }
-    }
-  }
+	// ------ enable / disable management
+	@Override
+	protected void updateEnableState() {
+		super.updateEnableState();
+		if (fButtons != null) {
+			boolean enabled = isEnabled();
+			for (int i = 0; i < fButtons.length; i++) {
+				Button button = fButtons[i];
+				if (isOkToUse(button)) {
+					button.setEnabled(enabled && fButtonsEnabled[i]);
+				}
+			}
+		}
+	}
 
-  /**
-   * Sets the enable state of a button contained in the group.
-   */
-  public void enableSelectionButton(int index, boolean enable) {
-    if (index >= 0 && index < fButtonsEnabled.length) {
-      fButtonsEnabled[index] = enable;
-      if (fButtons != null) {
-        Button button = fButtons[index];
-        if (isOkToUse(button)) {
-          button.setEnabled(isEnabled() && enable);
-        }
-      }
-    }
-  }
+	/**
+	 * Sets the enable state of a button contained in the group.
+	 */
+	public void enableSelectionButton(int index, boolean enable) {
+		if (index >= 0 && index < fButtonsEnabled.length) {
+			fButtonsEnabled[index] = enable;
+			if (fButtons != null) {
+				Button button = fButtons[index];
+				if (isOkToUse(button)) {
+					button.setEnabled(isEnabled() && enable);
+				}
+			}
+		}
+	}
 
-  /*(non-Javadoc)
-   * @see org.eclipse.jdt.internal.ui.wizards.dialogfields.DialogField#refresh()
-   */
-  @Override
-  public void refresh() {
-    super.refresh();
-    for (int i = 0; i < fButtons.length; i++) {
-      Button button = fButtons[i];
-      if (isOkToUse(button)) {
-        button.setSelection(fButtonsSelected[i]);
-      }
-    }
-  }
+	/*(non-Javadoc)
+	 * @see org.eclipse.jdt.internal.ui.wizards.dialogfields.DialogField#refresh()
+	 */
+	@Override
+	public void refresh() {
+		super.refresh();
+		for (int i = 0; i < fButtons.length; i++) {
+			Button button = fButtons[i];
+			if (isOkToUse(button)) {
+				button.setSelection(fButtonsSelected[i]);
+			}
+		}
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/LayoutUtil.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/LayoutUtil.java
index 838875440..87a52d848 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/LayoutUtil.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/LayoutUtil.java
@@ -16,70 +16,70 @@
 import org.eclipse.swt.widgets.Control;
 
 public class LayoutUtil {
-  /**
-   * Calculates the number of columns needed by field editors
-   */
-  public static int getNumberOfColumns(DialogField[] editors) {
-    int nCulumns = 0;
-    for (int i = 0; i < editors.length; i++) {
-      nCulumns = Math.max(editors[i].getNumberOfControls(), nCulumns);
-    }
-    return nCulumns;
-  }
+	/**
+	 * Calculates the number of columns needed by field editors
+	 */
+	public static int getNumberOfColumns(DialogField[] editors) {
+		int nCulumns = 0;
+		for (int i = 0; i < editors.length; i++) {
+			nCulumns = Math.max(editors[i].getNumberOfControls(), nCulumns);
+		}
+		return nCulumns;
+	}
 
-  /**
-   * Creates a composite and fills in the given editors.
-   *
-   * @param labelOnTop
-   *          Defines if the label of all fields should be on top of the fields
-   */
-  public static void doDefaultLayout(Composite parent, DialogField[] editors, boolean labelOnTop) {
-    doDefaultLayout(parent, editors, labelOnTop, 0, 0);
-  }
+	/**
+	 * Creates a composite and fills in the given editors.
+	 *
+	 * @param labelOnTop
+	 *          Defines if the label of all fields should be on top of the fields
+	 */
+	public static void doDefaultLayout(Composite parent, DialogField[] editors, boolean labelOnTop) {
+		doDefaultLayout(parent, editors, labelOnTop, 0, 0);
+	}
 
-  /**
-   * Creates a composite and fills in the given editors.
-   *
-   * @param labelOnTop
-   *          Defines if the label of all fields should be on top of the fields
-   * @param marginWidth
-   *          The margin width to be used by the composite
-   * @param marginHeight
-   *          The margin height to be used by the composite
-   */
-  public static void doDefaultLayout(Composite parent,
-      DialogField[] editors,
-      boolean labelOnTop,
-      int marginWidth,
-      int marginHeight) {
-    int nCulumns = getNumberOfColumns(editors);
-    Control[][] controls = new Control[editors.length][];
-    for (int i = 0; i < editors.length; i++) {
-      controls[i] = editors[i].doFillIntoGrid(parent, nCulumns);
-    }
-    if (labelOnTop) {
-      nCulumns--;
-      modifyLabelSpans(controls, nCulumns);
-    }
-    GridLayout layout = null;
-    if (parent.getLayout() instanceof GridLayout) {
-      layout = (GridLayout) parent.getLayout();
-    } else {
-      layout = new GridLayout();
-    }
-    if (marginWidth != SWT.DEFAULT) {
-      layout.marginWidth = marginWidth;
-    }
-    if (marginHeight != SWT.DEFAULT) {
-      layout.marginHeight = marginHeight;
-    }
-    layout.numColumns = nCulumns;
-    parent.setLayout(layout);
-  }
+	/**
+	 * Creates a composite and fills in the given editors.
+	 *
+	 * @param labelOnTop
+	 *          Defines if the label of all fields should be on top of the fields
+	 * @param marginWidth
+	 *          The margin width to be used by the composite
+	 * @param marginHeight
+	 *          The margin height to be used by the composite
+	 */
+	public static void doDefaultLayout(Composite parent,
+			DialogField[] editors,
+			boolean labelOnTop,
+			int marginWidth,
+			int marginHeight) {
+		int nCulumns = getNumberOfColumns(editors);
+		Control[][] controls = new Control[editors.length][];
+		for (int i = 0; i < editors.length; i++) {
+			controls[i] = editors[i].doFillIntoGrid(parent, nCulumns);
+		}
+		if (labelOnTop) {
+			nCulumns--;
+			modifyLabelSpans(controls, nCulumns);
+		}
+		GridLayout layout = null;
+		if (parent.getLayout() instanceof GridLayout) {
+			layout = (GridLayout) parent.getLayout();
+		} else {
+			layout = new GridLayout();
+		}
+		if (marginWidth != SWT.DEFAULT) {
+			layout.marginWidth = marginWidth;
+		}
+		if (marginHeight != SWT.DEFAULT) {
+			layout.marginHeight = marginHeight;
+		}
+		layout.numColumns = nCulumns;
+		parent.setLayout(layout);
+	}
 
-  private static void modifyLabelSpans(Control[][] controls, int nCulumns) {
-    for (int i = 0; i < controls.length; i++) {
-      SwtUtil.setHorizontalSpan(controls[i][0], nCulumns);
-    }
-  }
+	private static void modifyLabelSpans(Control[][] controls, int nCulumns) {
+		for (int i = 0; i < controls.length; i++) {
+			SwtUtil.setHorizontalSpan(controls[i][0], nCulumns);
+		}
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/ListDialogField.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/ListDialogField.java
index a5c989c9d..8b2da6dbb 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/ListDialogField.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/ListDialogField.java
@@ -54,838 +54,838 @@
  * buttons.
  */
 public class ListDialogField extends DialogField {
-  public static class ColumnsDescription {
-    private final ColumnLayoutData[] columns;
-    private final String[] headers;
-    private final boolean drawLines;
-
-    public ColumnsDescription(ColumnLayoutData[] columns, String[] headers, boolean drawLines) {
-      this.columns = columns;
-      this.headers = headers;
-      this.drawLines = drawLines;
-    }
-
-    public ColumnsDescription(String[] headers, boolean drawLines) {
-      this(createColumnWeightData(headers.length), headers, drawLines);
-    }
-
-    public ColumnsDescription(int nColumns, boolean drawLines) {
-      this(createColumnWeightData(nColumns), null, drawLines);
-    }
-
-    private static ColumnLayoutData[] createColumnWeightData(int nColumns) {
-      ColumnLayoutData[] data = new ColumnLayoutData[nColumns];
-      for (int i = 0; i < nColumns; i++) {
-        data[i] = new ColumnWeightData(1);
-      }
-      return data;
-    }
-  }
-
-  protected TableViewer fTable;
-  protected Control fTableControl;
-  protected ILabelProvider fLabelProvider;
-  protected ListViewerAdapter fListViewerAdapter;
-  protected List fElements;
-  protected ViewerComparator fViewerComparator;
-  protected String[] fButtonLabels;
-  private Button[] fButtonControls;
-  private boolean[] fButtonsEnabled;
-  private int fRemoveButtonIndex;
-  private int fUpButtonIndex;
-  private int fDownButtonIndex;
-  private Label fLastSeparator;
-  private Composite fButtonsControl;
-  private ISelection fSelectionWhenEnabled;
-  private final IListAdapter fListAdapter;
-  private final Object fParentElement;
-  private ColumnsDescription fTableColumns;
-
-  /**
-   * Creates the <code>ListDialogField</code>.
-   *
-   * @param adapter
-   *          A listener for button invocation, selection changes. Can be <code>null</code>.
-   * @param buttonLabels
-   *          The labels of all buttons: <code>null</code> is a valid array entry and marks a
-   *          separator.
-   * @param lprovider
-   *          The label provider to render the table entries
-   */
-  public ListDialogField(IListAdapter adapter, String[] buttonLabels, ILabelProvider lprovider) {
-    super();
-    fListAdapter = adapter;
-    fLabelProvider = lprovider;
-    fListViewerAdapter = new ListViewerAdapter();
-    fParentElement = this;
-    fElements = new ArrayList(10);
-    fButtonLabels = buttonLabels;
-    if (fButtonLabels != null) {
-      int nButtons = fButtonLabels.length;
-      fButtonsEnabled = new boolean[nButtons];
-      for (int i = 0; i < nButtons; i++) {
-        fButtonsEnabled[i] = true;
-      }
-    }
-    fTable = null;
-    fTableControl = null;
-    fButtonsControl = null;
-    fTableColumns = null;
-    fRemoveButtonIndex = -1;
-    fUpButtonIndex = -1;
-    fDownButtonIndex = -1;
-  }
-
-  /**
-   * Sets the index of the 'remove' button in the button label array passed in the constructor. The
-   * behavior of the button marked as the 'remove' button will then be handled internally. (enable
-   * state, button invocation behavior)
-   */
-  public void setRemoveButtonIndex(int removeButtonIndex) {
-    Assert.isTrue(removeButtonIndex < fButtonLabels.length);
-    fRemoveButtonIndex = removeButtonIndex;
-  }
-
-  /**
-   * Sets the index of the 'up' button in the button label array passed in the constructor. The
-   * behavior of the button marked as the 'up' button will then be handled internally. (enable
-   * state, button invocation behavior)
-   */
-  public void setUpButtonIndex(int upButtonIndex) {
-    Assert.isTrue(upButtonIndex < fButtonLabels.length);
-    fUpButtonIndex = upButtonIndex;
-  }
-
-  /**
-   * Sets the index of the 'down' button in the button label array passed in the constructor. The
-   * behavior of the button marked as the 'down' button will then be handled internally. (enable
-   * state, button invocation behavior)
-   */
-  public void setDownButtonIndex(int downButtonIndex) {
-    Assert.isTrue(downButtonIndex < fButtonLabels.length);
-    fDownButtonIndex = downButtonIndex;
-  }
-
-  /**
-   * Sets the viewer comparator.
-   *
-   * @param viewerComparator
-   *          The viewer comparator to set
-   */
-  public void setViewerComparator(ViewerComparator viewerComparator) {
-    fViewerComparator = viewerComparator;
-  }
-
-  public void setTableColumns(ColumnsDescription column) {
-    fTableColumns = column;
-  }
-
-  // ------ adapter communication
-  private void buttonPressed(int index) {
-    if (!managedButtonPressed(index) && fListAdapter != null) {
-      fListAdapter.customButtonPressed(this, index);
-    }
-  }
-
-  /**
-   * Checks if the button pressed is handled internally
-   *
-   * @return Returns true if button has been handled.
-   */
-  protected boolean managedButtonPressed(int index) {
-    if (index == fRemoveButtonIndex) {
-      remove();
-    } else if (index == fUpButtonIndex) {
-      up();
-      if (!fButtonControls[index].isEnabled() && fDownButtonIndex != -1) {
-        fButtonControls[fDownButtonIndex].setFocus();
-      }
-    } else if (index == fDownButtonIndex) {
-      down();
-      if (!fButtonControls[index].isEnabled() && fUpButtonIndex != -1) {
-        fButtonControls[fUpButtonIndex].setFocus();
-      }
-    } else {
-      return false;
-    }
-    return true;
-  }
-
-  // ------ layout helpers
-  /*
-   * @see DialogField#doFillIntoGrid
-   */
-  @Override
-  public Control[] doFillIntoGrid(Composite parent, int nColumns) {
-    PixelConverter converter = new PixelConverter(parent);
-    assertEnoughColumns(nColumns);
-    Label label = getLabelControl(parent);
-    GridData gd = gridDataForLabel(1);
-    gd.verticalAlignment = GridData.BEGINNING;
-    label.setLayoutData(gd);
-    Control list = getListControl(parent);
-    gd = new GridData();
-    gd.horizontalAlignment = GridData.FILL;
-    gd.grabExcessHorizontalSpace = false;
-    gd.verticalAlignment = GridData.FILL;
-    gd.grabExcessVerticalSpace = true;
-    gd.horizontalSpan = nColumns - 2;
-    gd.widthHint = converter.convertWidthInCharsToPixels(50);
-    gd.heightHint = converter.convertHeightInCharsToPixels(6);
-    list.setLayoutData(gd);
-    Composite buttons = getButtonBox(parent);
-    gd = new GridData();
-    gd.horizontalAlignment = GridData.FILL;
-    gd.grabExcessHorizontalSpace = false;
-    gd.verticalAlignment = GridData.FILL;
-    gd.grabExcessVerticalSpace = true;
-    gd.horizontalSpan = 1;
-    buttons.setLayoutData(gd);
-    return new Control[]{label, list, buttons};
-  }
-
-  /*
-   * @see DialogField#getNumberOfControls
-   */
-  @Override
-  public int getNumberOfControls() {
-    return 3;
-  }
-
-  /**
-   * Sets the minimal width of the buttons. Must be called after widget creation.
-   */
-  public void setButtonsMinWidth(int minWidth) {
-    if (fLastSeparator != null) {
-      ((GridData) fLastSeparator.getLayoutData()).widthHint = minWidth;
-    }
-  }
-
-  // ------ UI creation
-  /**
-   * Returns the list control. When called the first time, the control will be created.
-   *
-   * @param parent
-   *          The parent composite when called the first time, or <code>null</code> after.
-   */
-  public Control getListControl(Composite parent) {
-    if (fTableControl == null) {
-      assertCompositeNotNull(parent);
-      if (fTableColumns == null) {
-        fTable = createTableViewer(parent);
-        Table tableControl = fTable.getTable();
-        fTableControl = tableControl;
-        tableControl.setLayout(new TableLayout());
-      } else {
-        TableLayoutComposite composite = new TableLayoutComposite(parent, SWT.NONE);
-        composite.setFont(parent.getFont());
-        fTableControl = composite;
-        fTable = createTableViewer(composite);
-        Table tableControl = fTable.getTable();
-        tableControl.setHeaderVisible(fTableColumns.headers != null);
-        tableControl.setLinesVisible(fTableColumns.drawLines);
-        ColumnLayoutData[] columns = fTableColumns.columns;
-        for (int i = 0; i < columns.length; i++) {
-          composite.addColumnData(columns[i]);
-          TableColumn column = new TableColumn(tableControl, SWT.NONE);
-          //tableLayout.addColumnData(columns[i]);
-          if (fTableColumns.headers != null) {
-            column.setText(fTableColumns.headers[i]);
-          }
-        }
-      }
-      fTable.getTable().addKeyListener(new KeyAdapter() {
-        @Override
-        public void keyPressed(KeyEvent e) {
-          handleKeyPressed(e);
-        }
-      });
-      //fTableControl.setLayout(tableLayout);
-      fTable.setContentProvider(fListViewerAdapter);
-      fTable.setLabelProvider(fLabelProvider);
-      fTable.addSelectionChangedListener(fListViewerAdapter);
-      fTable.addDoubleClickListener(fListViewerAdapter);
-      fTable.setInput(fParentElement);
-      if (fViewerComparator != null) {
-        fTable.setComparator(fViewerComparator);
-      }
-      fTableControl.setEnabled(isEnabled());
-      if (fSelectionWhenEnabled != null) {
-        selectElements(fSelectionWhenEnabled);
-      }
-    }
-    return fTableControl;
-  }
-
-  /**
-   * Returns the internally used table viewer.
-   */
-  public TableViewer getTableViewer() {
-    return fTable;
-  }
-
-  /*
-   * Subclasses may override to specify a different style.
-   */
-  protected int getListStyle() {
-    int style = SWT.BORDER | SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL;
-    if (fTableColumns != null) {
-      style |= SWT.FULL_SELECTION;
-    }
-    return style;
-  }
-
-  protected TableViewer createTableViewer(Composite parent) {
-    Table table = new Table(parent, getListStyle());
-    table.setFont(parent.getFont());
-    return new TableViewer(table);
-  }
-
-  protected Button createButton(Composite parent, String label, SelectionListener listener) {
-    Button button = new Button(parent, SWT.PUSH);
-    button.setFont(parent.getFont());
-    button.setText(label);
-    button.addSelectionListener(listener);
-    GridData gd = new GridData();
-    gd.horizontalAlignment = GridData.FILL;
-    gd.grabExcessHorizontalSpace = true;
-    gd.verticalAlignment = GridData.BEGINNING;
-    gd.widthHint = SwtUtil.getButtonWidthHint(button);
-    button.setLayoutData(gd);
-    return button;
-  }
-
-  private Label createSeparator(Composite parent) {
-    Label separator = new Label(parent, SWT.SEPARATOR | SWT.HORIZONTAL);
-    separator.setFont(parent.getFont());
-    separator.setVisible(false);
-    GridData gd = new GridData();
-    gd.horizontalAlignment = GridData.FILL;
-    gd.verticalAlignment = GridData.BEGINNING;
-    gd.verticalIndent = 4;
-    separator.setLayoutData(gd);
-    return separator;
-  }
-
-  /**
-   * Returns the composite containing the buttons. When called the first time, the control will be
-   * created.
-   *
-   * @param parent
-   *          The parent composite when called the first time, or <code>null</code> after.
-   */
-  public Composite getButtonBox(Composite parent) {
-    if (fButtonsControl == null) {
-      assertCompositeNotNull(parent);
-      SelectionListener listener = new SelectionListener() {
-        @Override
-        public void widgetDefaultSelected(SelectionEvent e) {
-          doButtonSelected(e);
-        }
-
-        @Override
-        public void widgetSelected(SelectionEvent e) {
-          doButtonSelected(e);
-        }
-      };
-      Composite contents = new Composite(parent, SWT.NONE);
-      contents.setFont(parent.getFont());
-      GridLayout layout = new GridLayout();
-      layout.marginWidth = 0;
-      layout.marginHeight = 0;
-      contents.setLayout(layout);
-      if (fButtonLabels != null) {
-        fButtonControls = new Button[fButtonLabels.length];
-        for (int i = 0; i < fButtonLabels.length; i++) {
-          String currLabel = fButtonLabels[i];
-          if (currLabel != null) {
-            fButtonControls[i] = createButton(contents, currLabel, listener);
-            fButtonControls[i].setEnabled(isEnabled() && fButtonsEnabled[i]);
-          } else {
-            fButtonControls[i] = null;
-            createSeparator(contents);
-          }
-        }
-      }
-      fLastSeparator = createSeparator(contents);
-      updateButtonState();
-      fButtonsControl = contents;
-    }
-    return fButtonsControl;
-  }
-
-  private void doButtonSelected(SelectionEvent e) {
-    if (fButtonControls != null) {
-      for (int i = 0; i < fButtonControls.length; i++) {
-        if (e.widget == fButtonControls[i]) {
-          buttonPressed(i);
-          return;
-        }
-      }
-    }
-  }
-
-  /**
-   * Handles key events in the table viewer. Specifically when the delete key is pressed.
-   */
-  protected void handleKeyPressed(KeyEvent event) {
-    if (event.character == SWT.DEL && event.stateMask == 0) {
-      if (fRemoveButtonIndex != -1 && isButtonEnabled(fTable.getSelection(), fRemoveButtonIndex)) {
-        managedButtonPressed(fRemoveButtonIndex);
-      }
-    }
-  }
-
-  // ------ enable / disable management
-  /*
-   * @see DialogField#dialogFieldChanged
-   */
-  @Override
-  public void dialogFieldChanged() {
-    super.dialogFieldChanged();
-    updateButtonState();
-  }
-
-  /*
-   * Updates the enable state of the all buttons
-   */
-  protected void updateButtonState() {
-    if (fButtonControls != null && isOkToUse(fTableControl) && fTableControl.isEnabled()) {
-      ISelection sel = fTable.getSelection();
-      for (int i = 0; i < fButtonControls.length; i++) {
-        Button button = fButtonControls[i];
-        if (isOkToUse(button)) {
-          button.setEnabled(isButtonEnabled(sel, i));
-        }
-      }
-    }
-  }
-
-  protected boolean getManagedButtonState(ISelection sel, int index) {
-    if (index == fRemoveButtonIndex) {
-      return !sel.isEmpty();
-    } else if (index == fUpButtonIndex) {
-      return !sel.isEmpty() && canMoveUp();
-    } else if (index == fDownButtonIndex) {
-      return !sel.isEmpty() && canMoveDown();
-    }
-    return true;
-  }
-
-  /*
-   * @see DialogField#updateEnableState
-   */
-  @Override
-  protected void updateEnableState() {
-    super.updateEnableState();
-    boolean enabled = isEnabled();
-    if (isOkToUse(fTableControl)) {
-      if (!enabled) {
-        if (fSelectionWhenEnabled == null) {
-          fSelectionWhenEnabled = fTable.getSelection();
-          selectElements(null);
-        }
-      } else if (fSelectionWhenEnabled != null) {
-        selectElements(fSelectionWhenEnabled);
-        fSelectionWhenEnabled = null;
-      }
-      fTableControl.setEnabled(enabled);
-    }
-    updateButtonState();
-  }
-
-  /**
-   * Sets a button enabled or disabled.
-   */
-  public void enableButton(int index, boolean enable) {
-    if (fButtonsEnabled != null && index < fButtonsEnabled.length) {
-      fButtonsEnabled[index] = enable;
-      updateButtonState();
-    }
-  }
-
-  private boolean isButtonEnabled(ISelection sel, int index) {
-    boolean extraState = getManagedButtonState(sel, index);
-    return isEnabled() && extraState && fButtonsEnabled[index];
-  }
-
-  // ------ model access
-  /**
-   * Sets the elements shown in the list.
-   */
-  public void setElements(Collection elements) {
-    fElements = new ArrayList(elements);
-    if (isOkToUse(fTableControl)) {
-      fTable.refresh();
-    }
-    dialogFieldChanged();
-  }
-
-  /**
-   * Gets the elements shown in the list. The list returned is a copy, so it can be modified by the
-   * user.
-   */
-  public List getElements() {
-    return new ArrayList(fElements);
-  }
-
-  /**
-   * Gets the elements shown at the given index.
-   */
-  public Object getElement(int index) {
-    return fElements.get(index);
-  }
-
-  /**
-   * Gets the index of an element in the list or -1 if element is not in list.
-   */
-  public int getIndexOfElement(Object elem) {
-    return fElements.indexOf(elem);
-  }
-
-  /**
-   * Replaces an element.
-   */
-  public void replaceElement(Object oldElement, Object newElement) throws IllegalArgumentException {
-    int idx = fElements.indexOf(oldElement);
-    if (idx != -1) {
-      fElements.set(idx, newElement);
-      if (isOkToUse(fTableControl)) {
-        List selected = getSelectedElements();
-        if (selected.remove(oldElement)) {
-          selected.add(newElement);
-        }
-        fTable.refresh();
-        selectElements(new StructuredSelection(selected));
-      }
-      dialogFieldChanged();
-    } else {
-      throw new IllegalArgumentException();
-    }
-  }
-
-  /**
-   * Notifies clients that the element has changed.
-   */
-  public void elementChanged(Object element) throws IllegalArgumentException {
-    if (fElements.contains(element)) {
-      if (isOkToUse(fTableControl)) {
-        fTable.update(element, null);
-      }
-      dialogFieldChanged();
-    } else {
-      throw new IllegalArgumentException();
-    }
-  }
-
-  /**
-   * Adds an element at the end of the list.
-   */
-  public boolean addElement(Object element) {
-    return addElement(element, fElements.size());
-  }
-
-  /**
-   * Adds an element at a position.
-   */
-  public boolean addElement(Object element, int index) {
-    if (fElements.contains(element)) {
-      return false;
-    }
-    fElements.add(index, element);
-    if (isOkToUse(fTableControl)) {
-      fTable.refresh();
-      fTable.setSelection(new StructuredSelection(element));
-    }
-    dialogFieldChanged();
-    return true;
-  }
-
-  /**
-   * Adds elements at the given index
-   */
-  public boolean addElements(List elements, int index) {
-    int nElements = elements.size();
-    if (nElements > 0 && index >= 0 && index <= fElements.size()) {
-      // filter duplicated
-      ArrayList elementsToAdd = new ArrayList(nElements);
-      for (int i = 0; i < nElements; i++) {
-        Object elem = elements.get(i);
-        if (!fElements.contains(elem)) {
-          elementsToAdd.add(elem);
-        }
-      }
-      if (!elementsToAdd.isEmpty()) {
-        fElements.addAll(index, elementsToAdd);
-        if (isOkToUse(fTableControl)) {
-          if (index == fElements.size()) {
-            fTable.add(elementsToAdd.toArray());
-          } else {
-            for (int i = elementsToAdd.size() - 1; i >= 0; i--) {
-              fTable.insert(elementsToAdd.get(i), index);
-            }
-          }
-          fTable.setSelection(new StructuredSelection(elementsToAdd));
-        }
-        dialogFieldChanged();
-        return true;
-      }
-    }
-    return false;
-  }
-
-  /**
-   * Adds elements at the end of the list.
-   */
-  public boolean addElements(List elements) {
-    return addElements(elements, fElements.size());
-  }
-
-  /**
-   * Adds an element at a position.
-   */
-  public void removeAllElements() {
-    if (fElements.size() > 0) {
-      fElements.clear();
-      if (isOkToUse(fTableControl)) {
-        fTable.refresh();
-      }
-      dialogFieldChanged();
-    }
-  }
-
-  /**
-   * Removes an element from the list.
-   */
-  public void removeElement(Object element) throws IllegalArgumentException {
-    if (fElements.remove(element)) {
-      if (isOkToUse(fTableControl)) {
-        fTable.remove(element);
-      }
-      dialogFieldChanged();
-    } else {
-      throw new IllegalArgumentException();
-    }
-  }
-
-  /**
-   * Removes elements from the list.
-   */
-  public void removeElements(List elements) {
-    if (elements.size() > 0) {
-      fElements.removeAll(elements);
-      if (isOkToUse(fTableControl)) {
-        fTable.remove(elements.toArray());
-      }
-      dialogFieldChanged();
-    }
-  }
-
-  /**
-   * Gets the number of elements
-   */
-  public int getSize() {
-    return fElements.size();
-  }
-
-  public void selectElements(ISelection selection) {
-    fSelectionWhenEnabled = selection;
-    if (isOkToUse(fTableControl)) {
-      fTable.setSelection(selection, true);
-    }
-  }
-
-  public void selectFirstElement() {
-    Object element = null;
-    if (fViewerComparator != null) {
-      Object[] arr = fElements.toArray();
-      fViewerComparator.sort(fTable, arr);
-      if (arr.length > 0) {
-        element = arr[0];
-      }
-    } else {
-      if (fElements.size() > 0) {
-        element = fElements.get(0);
-      }
-    }
-    if (element != null) {
-      selectElements(new StructuredSelection(element));
-    }
-  }
-
-  public void editElement(Object element) {
-    if (isOkToUse(fTableControl)) {
-      fTable.refresh(element);
-      fTable.editElement(element, 0);
-    }
-  }
-
-  public void postSetSelection(final ISelection selection) {
-    if (isOkToUse(fTableControl)) {
-      Display d = fTableControl.getDisplay();
-      d.asyncExec(new Runnable() {
-        @Override
-        public void run() {
-          if (isOkToUse(fTableControl)) {
-            selectElements(selection);
-          }
-        }
-      });
-    }
-  }
-
-  /**
-   * Refreshes the table.
-   */
-  @Override
-  public void refresh() {
-    super.refresh();
-    if (isOkToUse(fTableControl)) {
-      fTable.refresh();
-    }
-  }
-
-  // ------- list maintenance
-  private List moveUp(List elements, List move) {
-    int nElements = elements.size();
-    List res = new ArrayList(nElements);
-    Object floating = null;
-    for (int i = 0; i < nElements; i++) {
-      Object curr = elements.get(i);
-      if (move.contains(curr)) {
-        res.add(curr);
-      } else {
-        if (floating != null) {
-          res.add(floating);
-        }
-        floating = curr;
-      }
-    }
-    if (floating != null) {
-      res.add(floating);
-    }
-    return res;
-  }
-
-  private void moveUp(List toMoveUp) {
-    if (toMoveUp.size() > 0) {
-      setElements(moveUp(fElements, toMoveUp));
-      fTable.reveal(toMoveUp.get(0));
-    }
-  }
-
-  private void moveDown(List toMoveDown) {
-    if (toMoveDown.size() > 0) {
-      setElements(reverse(moveUp(reverse(fElements), toMoveDown)));
-      fTable.reveal(toMoveDown.get(toMoveDown.size() - 1));
-    }
-  }
-
-  private List reverse(List p) {
-    List reverse = new ArrayList(p.size());
-    for (int i = p.size() - 1; i >= 0; i--) {
-      reverse.add(p.get(i));
-    }
-    return reverse;
-  }
-
-  private void remove() {
-    removeElements(getSelectedElements());
-  }
-
-  private void up() {
-    moveUp(getSelectedElements());
-  }
-
-  private void down() {
-    moveDown(getSelectedElements());
-  }
-
-  public boolean canMoveUp() {
-    if (isOkToUse(fTableControl)) {
-      int[] indc = fTable.getTable().getSelectionIndices();
-      for (int i = 0; i < indc.length; i++) {
-        if (indc[i] != i) {
-          return true;
-        }
-      }
-    }
-    return false;
-  }
-
-  public boolean canMoveDown() {
-    if (isOkToUse(fTableControl)) {
-      int[] indc = fTable.getTable().getSelectionIndices();
-      int k = fElements.size() - 1;
-      for (int i = indc.length - 1; i >= 0; i--, k--) {
-        if (indc[i] != k) {
-          return true;
-        }
-      }
-    }
-    return false;
-  }
-
-  /**
-   * Returns the selected elements.
-   */
-  public List getSelectedElements() {
-    List result = new ArrayList();
-    if (isOkToUse(fTableControl)) {
-      ISelection selection = fTable.getSelection();
-      if (selection instanceof IStructuredSelection) {
-        Iterator iter = ((IStructuredSelection) selection).iterator();
-        while (iter.hasNext()) {
-          result.add(iter.next());
-        }
-      }
-    }
-    return result;
-  }
-
-  // ------- ListViewerAdapter
-  private class ListViewerAdapter
-      implements
-        IStructuredContentProvider,
-        ISelectionChangedListener,
-        IDoubleClickListener {
-    // ------- ITableContentProvider Interface ------------
-    @Override
-    public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
-      // will never happen
-    }
-
-    @Override
-    public void dispose() {
-    }
-
-    @Override
-    public Object[] getElements(Object obj) {
-      return fElements.toArray();
-    }
-
-    // ------- ISelectionChangedListener Interface ------------
-    @Override
-    public void selectionChanged(SelectionChangedEvent event) {
-      doListSelected(event);
-    }
-
-    @Override
-    public void doubleClick(DoubleClickEvent event) {
-      doDoubleClick(event);
-    }
-  }
-
-  protected void doListSelected(SelectionChangedEvent event) {
-    updateButtonState();
-    if (fListAdapter != null) {
-      fListAdapter.selectionChanged(this);
-    }
-  }
-
-  protected void doDoubleClick(DoubleClickEvent event) {
-    if (fListAdapter != null) {
-      fListAdapter.doubleClicked(this);
-    }
-  }
+	public static class ColumnsDescription {
+		private final ColumnLayoutData[] columns;
+		private final String[] headers;
+		private final boolean drawLines;
+
+		public ColumnsDescription(ColumnLayoutData[] columns, String[] headers, boolean drawLines) {
+			this.columns = columns;
+			this.headers = headers;
+			this.drawLines = drawLines;
+		}
+
+		public ColumnsDescription(String[] headers, boolean drawLines) {
+			this(createColumnWeightData(headers.length), headers, drawLines);
+		}
+
+		public ColumnsDescription(int nColumns, boolean drawLines) {
+			this(createColumnWeightData(nColumns), null, drawLines);
+		}
+
+		private static ColumnLayoutData[] createColumnWeightData(int nColumns) {
+			ColumnLayoutData[] data = new ColumnLayoutData[nColumns];
+			for (int i = 0; i < nColumns; i++) {
+				data[i] = new ColumnWeightData(1);
+			}
+			return data;
+		}
+	}
+
+	protected TableViewer fTable;
+	protected Control fTableControl;
+	protected ILabelProvider fLabelProvider;
+	protected ListViewerAdapter fListViewerAdapter;
+	protected List fElements;
+	protected ViewerComparator fViewerComparator;
+	protected String[] fButtonLabels;
+	private Button[] fButtonControls;
+	private boolean[] fButtonsEnabled;
+	private int fRemoveButtonIndex;
+	private int fUpButtonIndex;
+	private int fDownButtonIndex;
+	private Label fLastSeparator;
+	private Composite fButtonsControl;
+	private ISelection fSelectionWhenEnabled;
+	private final IListAdapter fListAdapter;
+	private final Object fParentElement;
+	private ColumnsDescription fTableColumns;
+
+	/**
+	 * Creates the <code>ListDialogField</code>.
+	 *
+	 * @param adapter
+	 *          A listener for button invocation, selection changes. Can be <code>null</code>.
+	 * @param buttonLabels
+	 *          The labels of all buttons: <code>null</code> is a valid array entry and marks a
+	 *          separator.
+	 * @param lprovider
+	 *          The label provider to render the table entries
+	 */
+	public ListDialogField(IListAdapter adapter, String[] buttonLabels, ILabelProvider lprovider) {
+		super();
+		fListAdapter = adapter;
+		fLabelProvider = lprovider;
+		fListViewerAdapter = new ListViewerAdapter();
+		fParentElement = this;
+		fElements = new ArrayList(10);
+		fButtonLabels = buttonLabels;
+		if (fButtonLabels != null) {
+			int nButtons = fButtonLabels.length;
+			fButtonsEnabled = new boolean[nButtons];
+			for (int i = 0; i < nButtons; i++) {
+				fButtonsEnabled[i] = true;
+			}
+		}
+		fTable = null;
+		fTableControl = null;
+		fButtonsControl = null;
+		fTableColumns = null;
+		fRemoveButtonIndex = -1;
+		fUpButtonIndex = -1;
+		fDownButtonIndex = -1;
+	}
+
+	/**
+	 * Sets the index of the 'remove' button in the button label array passed in the constructor. The
+	 * behavior of the button marked as the 'remove' button will then be handled internally. (enable
+	 * state, button invocation behavior)
+	 */
+	public void setRemoveButtonIndex(int removeButtonIndex) {
+		Assert.isTrue(removeButtonIndex < fButtonLabels.length);
+		fRemoveButtonIndex = removeButtonIndex;
+	}
+
+	/**
+	 * Sets the index of the 'up' button in the button label array passed in the constructor. The
+	 * behavior of the button marked as the 'up' button will then be handled internally. (enable
+	 * state, button invocation behavior)
+	 */
+	public void setUpButtonIndex(int upButtonIndex) {
+		Assert.isTrue(upButtonIndex < fButtonLabels.length);
+		fUpButtonIndex = upButtonIndex;
+	}
+
+	/**
+	 * Sets the index of the 'down' button in the button label array passed in the constructor. The
+	 * behavior of the button marked as the 'down' button will then be handled internally. (enable
+	 * state, button invocation behavior)
+	 */
+	public void setDownButtonIndex(int downButtonIndex) {
+		Assert.isTrue(downButtonIndex < fButtonLabels.length);
+		fDownButtonIndex = downButtonIndex;
+	}
+
+	/**
+	 * Sets the viewer comparator.
+	 *
+	 * @param viewerComparator
+	 *          The viewer comparator to set
+	 */
+	public void setViewerComparator(ViewerComparator viewerComparator) {
+		fViewerComparator = viewerComparator;
+	}
+
+	public void setTableColumns(ColumnsDescription column) {
+		fTableColumns = column;
+	}
+
+	// ------ adapter communication
+	private void buttonPressed(int index) {
+		if (!managedButtonPressed(index) && fListAdapter != null) {
+			fListAdapter.customButtonPressed(this, index);
+		}
+	}
+
+	/**
+	 * Checks if the button pressed is handled internally
+	 *
+	 * @return Returns true if button has been handled.
+	 */
+	protected boolean managedButtonPressed(int index) {
+		if (index == fRemoveButtonIndex) {
+			remove();
+		} else if (index == fUpButtonIndex) {
+			up();
+			if (!fButtonControls[index].isEnabled() && fDownButtonIndex != -1) {
+				fButtonControls[fDownButtonIndex].setFocus();
+			}
+		} else if (index == fDownButtonIndex) {
+			down();
+			if (!fButtonControls[index].isEnabled() && fUpButtonIndex != -1) {
+				fButtonControls[fUpButtonIndex].setFocus();
+			}
+		} else {
+			return false;
+		}
+		return true;
+	}
+
+	// ------ layout helpers
+	/*
+	 * @see DialogField#doFillIntoGrid
+	 */
+	@Override
+	public Control[] doFillIntoGrid(Composite parent, int nColumns) {
+		PixelConverter converter = new PixelConverter(parent);
+		assertEnoughColumns(nColumns);
+		Label label = getLabelControl(parent);
+		GridData gd = gridDataForLabel(1);
+		gd.verticalAlignment = GridData.BEGINNING;
+		label.setLayoutData(gd);
+		Control list = getListControl(parent);
+		gd = new GridData();
+		gd.horizontalAlignment = GridData.FILL;
+		gd.grabExcessHorizontalSpace = false;
+		gd.verticalAlignment = GridData.FILL;
+		gd.grabExcessVerticalSpace = true;
+		gd.horizontalSpan = nColumns - 2;
+		gd.widthHint = converter.convertWidthInCharsToPixels(50);
+		gd.heightHint = converter.convertHeightInCharsToPixels(6);
+		list.setLayoutData(gd);
+		Composite buttons = getButtonBox(parent);
+		gd = new GridData();
+		gd.horizontalAlignment = GridData.FILL;
+		gd.grabExcessHorizontalSpace = false;
+		gd.verticalAlignment = GridData.FILL;
+		gd.grabExcessVerticalSpace = true;
+		gd.horizontalSpan = 1;
+		buttons.setLayoutData(gd);
+		return new Control[]{label, list, buttons};
+	}
+
+	/*
+	 * @see DialogField#getNumberOfControls
+	 */
+	@Override
+	public int getNumberOfControls() {
+		return 3;
+	}
+
+	/**
+	 * Sets the minimal width of the buttons. Must be called after widget creation.
+	 */
+	public void setButtonsMinWidth(int minWidth) {
+		if (fLastSeparator != null) {
+			((GridData) fLastSeparator.getLayoutData()).widthHint = minWidth;
+		}
+	}
+
+	// ------ UI creation
+	/**
+	 * Returns the list control. When called the first time, the control will be created.
+	 *
+	 * @param parent
+	 *          The parent composite when called the first time, or <code>null</code> after.
+	 */
+	public Control getListControl(Composite parent) {
+		if (fTableControl == null) {
+			assertCompositeNotNull(parent);
+			if (fTableColumns == null) {
+				fTable = createTableViewer(parent);
+				Table tableControl = fTable.getTable();
+				fTableControl = tableControl;
+				tableControl.setLayout(new TableLayout());
+			} else {
+				TableLayoutComposite composite = new TableLayoutComposite(parent, SWT.NONE);
+				composite.setFont(parent.getFont());
+				fTableControl = composite;
+				fTable = createTableViewer(composite);
+				Table tableControl = fTable.getTable();
+				tableControl.setHeaderVisible(fTableColumns.headers != null);
+				tableControl.setLinesVisible(fTableColumns.drawLines);
+				ColumnLayoutData[] columns = fTableColumns.columns;
+				for (int i = 0; i < columns.length; i++) {
+					composite.addColumnData(columns[i]);
+					TableColumn column = new TableColumn(tableControl, SWT.NONE);
+					//tableLayout.addColumnData(columns[i]);
+					if (fTableColumns.headers != null) {
+						column.setText(fTableColumns.headers[i]);
+					}
+				}
+			}
+			fTable.getTable().addKeyListener(new KeyAdapter() {
+				@Override
+				public void keyPressed(KeyEvent e) {
+					handleKeyPressed(e);
+				}
+			});
+			//fTableControl.setLayout(tableLayout);
+			fTable.setContentProvider(fListViewerAdapter);
+			fTable.setLabelProvider(fLabelProvider);
+			fTable.addSelectionChangedListener(fListViewerAdapter);
+			fTable.addDoubleClickListener(fListViewerAdapter);
+			fTable.setInput(fParentElement);
+			if (fViewerComparator != null) {
+				fTable.setComparator(fViewerComparator);
+			}
+			fTableControl.setEnabled(isEnabled());
+			if (fSelectionWhenEnabled != null) {
+				selectElements(fSelectionWhenEnabled);
+			}
+		}
+		return fTableControl;
+	}
+
+	/**
+	 * Returns the internally used table viewer.
+	 */
+	public TableViewer getTableViewer() {
+		return fTable;
+	}
+
+	/*
+	 * Subclasses may override to specify a different style.
+	 */
+	protected int getListStyle() {
+		int style = SWT.BORDER | SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL;
+		if (fTableColumns != null) {
+			style |= SWT.FULL_SELECTION;
+		}
+		return style;
+	}
+
+	protected TableViewer createTableViewer(Composite parent) {
+		Table table = new Table(parent, getListStyle());
+		table.setFont(parent.getFont());
+		return new TableViewer(table);
+	}
+
+	protected Button createButton(Composite parent, String label, SelectionListener listener) {
+		Button button = new Button(parent, SWT.PUSH);
+		button.setFont(parent.getFont());
+		button.setText(label);
+		button.addSelectionListener(listener);
+		GridData gd = new GridData();
+		gd.horizontalAlignment = GridData.FILL;
+		gd.grabExcessHorizontalSpace = true;
+		gd.verticalAlignment = GridData.BEGINNING;
+		gd.widthHint = SwtUtil.getButtonWidthHint(button);
+		button.setLayoutData(gd);
+		return button;
+	}
+
+	private Label createSeparator(Composite parent) {
+		Label separator = new Label(parent, SWT.SEPARATOR | SWT.HORIZONTAL);
+		separator.setFont(parent.getFont());
+		separator.setVisible(false);
+		GridData gd = new GridData();
+		gd.horizontalAlignment = GridData.FILL;
+		gd.verticalAlignment = GridData.BEGINNING;
+		gd.verticalIndent = 4;
+		separator.setLayoutData(gd);
+		return separator;
+	}
+
+	/**
+	 * Returns the composite containing the buttons. When called the first time, the control will be
+	 * created.
+	 *
+	 * @param parent
+	 *          The parent composite when called the first time, or <code>null</code> after.
+	 */
+	public Composite getButtonBox(Composite parent) {
+		if (fButtonsControl == null) {
+			assertCompositeNotNull(parent);
+			SelectionListener listener = new SelectionListener() {
+				@Override
+				public void widgetDefaultSelected(SelectionEvent e) {
+					doButtonSelected(e);
+				}
+
+				@Override
+				public void widgetSelected(SelectionEvent e) {
+					doButtonSelected(e);
+				}
+			};
+			Composite contents = new Composite(parent, SWT.NONE);
+			contents.setFont(parent.getFont());
+			GridLayout layout = new GridLayout();
+			layout.marginWidth = 0;
+			layout.marginHeight = 0;
+			contents.setLayout(layout);
+			if (fButtonLabels != null) {
+				fButtonControls = new Button[fButtonLabels.length];
+				for (int i = 0; i < fButtonLabels.length; i++) {
+					String currLabel = fButtonLabels[i];
+					if (currLabel != null) {
+						fButtonControls[i] = createButton(contents, currLabel, listener);
+						fButtonControls[i].setEnabled(isEnabled() && fButtonsEnabled[i]);
+					} else {
+						fButtonControls[i] = null;
+						createSeparator(contents);
+					}
+				}
+			}
+			fLastSeparator = createSeparator(contents);
+			updateButtonState();
+			fButtonsControl = contents;
+		}
+		return fButtonsControl;
+	}
+
+	private void doButtonSelected(SelectionEvent e) {
+		if (fButtonControls != null) {
+			for (int i = 0; i < fButtonControls.length; i++) {
+				if (e.widget == fButtonControls[i]) {
+					buttonPressed(i);
+					return;
+				}
+			}
+		}
+	}
+
+	/**
+	 * Handles key events in the table viewer. Specifically when the delete key is pressed.
+	 */
+	protected void handleKeyPressed(KeyEvent event) {
+		if (event.character == SWT.DEL && event.stateMask == 0) {
+			if (fRemoveButtonIndex != -1 && isButtonEnabled(fTable.getSelection(), fRemoveButtonIndex)) {
+				managedButtonPressed(fRemoveButtonIndex);
+			}
+		}
+	}
+
+	// ------ enable / disable management
+	/*
+	 * @see DialogField#dialogFieldChanged
+	 */
+	@Override
+	public void dialogFieldChanged() {
+		super.dialogFieldChanged();
+		updateButtonState();
+	}
+
+	/*
+	 * Updates the enable state of the all buttons
+	 */
+	protected void updateButtonState() {
+		if (fButtonControls != null && isOkToUse(fTableControl) && fTableControl.isEnabled()) {
+			ISelection sel = fTable.getSelection();
+			for (int i = 0; i < fButtonControls.length; i++) {
+				Button button = fButtonControls[i];
+				if (isOkToUse(button)) {
+					button.setEnabled(isButtonEnabled(sel, i));
+				}
+			}
+		}
+	}
+
+	protected boolean getManagedButtonState(ISelection sel, int index) {
+		if (index == fRemoveButtonIndex) {
+			return !sel.isEmpty();
+		} else if (index == fUpButtonIndex) {
+			return !sel.isEmpty() && canMoveUp();
+		} else if (index == fDownButtonIndex) {
+			return !sel.isEmpty() && canMoveDown();
+		}
+		return true;
+	}
+
+	/*
+	 * @see DialogField#updateEnableState
+	 */
+	@Override
+	protected void updateEnableState() {
+		super.updateEnableState();
+		boolean enabled = isEnabled();
+		if (isOkToUse(fTableControl)) {
+			if (!enabled) {
+				if (fSelectionWhenEnabled == null) {
+					fSelectionWhenEnabled = fTable.getSelection();
+					selectElements(null);
+				}
+			} else if (fSelectionWhenEnabled != null) {
+				selectElements(fSelectionWhenEnabled);
+				fSelectionWhenEnabled = null;
+			}
+			fTableControl.setEnabled(enabled);
+		}
+		updateButtonState();
+	}
+
+	/**
+	 * Sets a button enabled or disabled.
+	 */
+	public void enableButton(int index, boolean enable) {
+		if (fButtonsEnabled != null && index < fButtonsEnabled.length) {
+			fButtonsEnabled[index] = enable;
+			updateButtonState();
+		}
+	}
+
+	private boolean isButtonEnabled(ISelection sel, int index) {
+		boolean extraState = getManagedButtonState(sel, index);
+		return isEnabled() && extraState && fButtonsEnabled[index];
+	}
+
+	// ------ model access
+	/**
+	 * Sets the elements shown in the list.
+	 */
+	public void setElements(Collection elements) {
+		fElements = new ArrayList(elements);
+		if (isOkToUse(fTableControl)) {
+			fTable.refresh();
+		}
+		dialogFieldChanged();
+	}
+
+	/**
+	 * Gets the elements shown in the list. The list returned is a copy, so it can be modified by the
+	 * user.
+	 */
+	public List getElements() {
+		return new ArrayList(fElements);
+	}
+
+	/**
+	 * Gets the elements shown at the given index.
+	 */
+	public Object getElement(int index) {
+		return fElements.get(index);
+	}
+
+	/**
+	 * Gets the index of an element in the list or -1 if element is not in list.
+	 */
+	public int getIndexOfElement(Object elem) {
+		return fElements.indexOf(elem);
+	}
+
+	/**
+	 * Replaces an element.
+	 */
+	public void replaceElement(Object oldElement, Object newElement) throws IllegalArgumentException {
+		int idx = fElements.indexOf(oldElement);
+		if (idx != -1) {
+			fElements.set(idx, newElement);
+			if (isOkToUse(fTableControl)) {
+				List selected = getSelectedElements();
+				if (selected.remove(oldElement)) {
+					selected.add(newElement);
+				}
+				fTable.refresh();
+				selectElements(new StructuredSelection(selected));
+			}
+			dialogFieldChanged();
+		} else {
+			throw new IllegalArgumentException();
+		}
+	}
+
+	/**
+	 * Notifies clients that the element has changed.
+	 */
+	public void elementChanged(Object element) throws IllegalArgumentException {
+		if (fElements.contains(element)) {
+			if (isOkToUse(fTableControl)) {
+				fTable.update(element, null);
+			}
+			dialogFieldChanged();
+		} else {
+			throw new IllegalArgumentException();
+		}
+	}
+
+	/**
+	 * Adds an element at the end of the list.
+	 */
+	public boolean addElement(Object element) {
+		return addElement(element, fElements.size());
+	}
+
+	/**
+	 * Adds an element at a position.
+	 */
+	public boolean addElement(Object element, int index) {
+		if (fElements.contains(element)) {
+			return false;
+		}
+		fElements.add(index, element);
+		if (isOkToUse(fTableControl)) {
+			fTable.refresh();
+			fTable.setSelection(new StructuredSelection(element));
+		}
+		dialogFieldChanged();
+		return true;
+	}
+
+	/**
+	 * Adds elements at the given index
+	 */
+	public boolean addElements(List elements, int index) {
+		int nElements = elements.size();
+		if (nElements > 0 && index >= 0 && index <= fElements.size()) {
+			// filter duplicated
+			ArrayList elementsToAdd = new ArrayList(nElements);
+			for (int i = 0; i < nElements; i++) {
+				Object elem = elements.get(i);
+				if (!fElements.contains(elem)) {
+					elementsToAdd.add(elem);
+				}
+			}
+			if (!elementsToAdd.isEmpty()) {
+				fElements.addAll(index, elementsToAdd);
+				if (isOkToUse(fTableControl)) {
+					if (index == fElements.size()) {
+						fTable.add(elementsToAdd.toArray());
+					} else {
+						for (int i = elementsToAdd.size() - 1; i >= 0; i--) {
+							fTable.insert(elementsToAdd.get(i), index);
+						}
+					}
+					fTable.setSelection(new StructuredSelection(elementsToAdd));
+				}
+				dialogFieldChanged();
+				return true;
+			}
+		}
+		return false;
+	}
+
+	/**
+	 * Adds elements at the end of the list.
+	 */
+	public boolean addElements(List elements) {
+		return addElements(elements, fElements.size());
+	}
+
+	/**
+	 * Adds an element at a position.
+	 */
+	public void removeAllElements() {
+		if (fElements.size() > 0) {
+			fElements.clear();
+			if (isOkToUse(fTableControl)) {
+				fTable.refresh();
+			}
+			dialogFieldChanged();
+		}
+	}
+
+	/**
+	 * Removes an element from the list.
+	 */
+	public void removeElement(Object element) throws IllegalArgumentException {
+		if (fElements.remove(element)) {
+			if (isOkToUse(fTableControl)) {
+				fTable.remove(element);
+			}
+			dialogFieldChanged();
+		} else {
+			throw new IllegalArgumentException();
+		}
+	}
+
+	/**
+	 * Removes elements from the list.
+	 */
+	public void removeElements(List elements) {
+		if (elements.size() > 0) {
+			fElements.removeAll(elements);
+			if (isOkToUse(fTableControl)) {
+				fTable.remove(elements.toArray());
+			}
+			dialogFieldChanged();
+		}
+	}
+
+	/**
+	 * Gets the number of elements
+	 */
+	public int getSize() {
+		return fElements.size();
+	}
+
+	public void selectElements(ISelection selection) {
+		fSelectionWhenEnabled = selection;
+		if (isOkToUse(fTableControl)) {
+			fTable.setSelection(selection, true);
+		}
+	}
+
+	public void selectFirstElement() {
+		Object element = null;
+		if (fViewerComparator != null) {
+			Object[] arr = fElements.toArray();
+			fViewerComparator.sort(fTable, arr);
+			if (arr.length > 0) {
+				element = arr[0];
+			}
+		} else {
+			if (fElements.size() > 0) {
+				element = fElements.get(0);
+			}
+		}
+		if (element != null) {
+			selectElements(new StructuredSelection(element));
+		}
+	}
+
+	public void editElement(Object element) {
+		if (isOkToUse(fTableControl)) {
+			fTable.refresh(element);
+			fTable.editElement(element, 0);
+		}
+	}
+
+	public void postSetSelection(final ISelection selection) {
+		if (isOkToUse(fTableControl)) {
+			Display d = fTableControl.getDisplay();
+			d.asyncExec(new Runnable() {
+				@Override
+				public void run() {
+					if (isOkToUse(fTableControl)) {
+						selectElements(selection);
+					}
+				}
+			});
+		}
+	}
+
+	/**
+	 * Refreshes the table.
+	 */
+	@Override
+	public void refresh() {
+		super.refresh();
+		if (isOkToUse(fTableControl)) {
+			fTable.refresh();
+		}
+	}
+
+	// ------- list maintenance
+	private List moveUp(List elements, List move) {
+		int nElements = elements.size();
+		List res = new ArrayList(nElements);
+		Object floating = null;
+		for (int i = 0; i < nElements; i++) {
+			Object curr = elements.get(i);
+			if (move.contains(curr)) {
+				res.add(curr);
+			} else {
+				if (floating != null) {
+					res.add(floating);
+				}
+				floating = curr;
+			}
+		}
+		if (floating != null) {
+			res.add(floating);
+		}
+		return res;
+	}
+
+	private void moveUp(List toMoveUp) {
+		if (toMoveUp.size() > 0) {
+			setElements(moveUp(fElements, toMoveUp));
+			fTable.reveal(toMoveUp.get(0));
+		}
+	}
+
+	private void moveDown(List toMoveDown) {
+		if (toMoveDown.size() > 0) {
+			setElements(reverse(moveUp(reverse(fElements), toMoveDown)));
+			fTable.reveal(toMoveDown.get(toMoveDown.size() - 1));
+		}
+	}
+
+	private List reverse(List p) {
+		List reverse = new ArrayList(p.size());
+		for (int i = p.size() - 1; i >= 0; i--) {
+			reverse.add(p.get(i));
+		}
+		return reverse;
+	}
+
+	private void remove() {
+		removeElements(getSelectedElements());
+	}
+
+	private void up() {
+		moveUp(getSelectedElements());
+	}
+
+	private void down() {
+		moveDown(getSelectedElements());
+	}
+
+	public boolean canMoveUp() {
+		if (isOkToUse(fTableControl)) {
+			int[] indc = fTable.getTable().getSelectionIndices();
+			for (int i = 0; i < indc.length; i++) {
+				if (indc[i] != i) {
+					return true;
+				}
+			}
+		}
+		return false;
+	}
+
+	public boolean canMoveDown() {
+		if (isOkToUse(fTableControl)) {
+			int[] indc = fTable.getTable().getSelectionIndices();
+			int k = fElements.size() - 1;
+			for (int i = indc.length - 1; i >= 0; i--, k--) {
+				if (indc[i] != k) {
+					return true;
+				}
+			}
+		}
+		return false;
+	}
+
+	/**
+	 * Returns the selected elements.
+	 */
+	public List getSelectedElements() {
+		List result = new ArrayList();
+		if (isOkToUse(fTableControl)) {
+			ISelection selection = fTable.getSelection();
+			if (selection instanceof IStructuredSelection) {
+				Iterator iter = ((IStructuredSelection) selection).iterator();
+				while (iter.hasNext()) {
+					result.add(iter.next());
+				}
+			}
+		}
+		return result;
+	}
+
+	// ------- ListViewerAdapter
+	private class ListViewerAdapter
+	implements
+	IStructuredContentProvider,
+	ISelectionChangedListener,
+	IDoubleClickListener {
+		// ------- ITableContentProvider Interface ------------
+		@Override
+		public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+			// will never happen
+		}
+
+		@Override
+		public void dispose() {
+		}
+
+		@Override
+		public Object[] getElements(Object obj) {
+			return fElements.toArray();
+		}
+
+		// ------- ISelectionChangedListener Interface ------------
+		@Override
+		public void selectionChanged(SelectionChangedEvent event) {
+			doListSelected(event);
+		}
+
+		@Override
+		public void doubleClick(DoubleClickEvent event) {
+			doDoubleClick(event);
+		}
+	}
+
+	protected void doListSelected(SelectionChangedEvent event) {
+		updateButtonState();
+		if (fListAdapter != null) {
+			fListAdapter.selectionChanged(this);
+		}
+	}
+
+	protected void doDoubleClick(DoubleClickEvent event) {
+		if (fListAdapter != null) {
+			fListAdapter.doubleClicked(this);
+		}
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/SelectionButtonDialogField.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/SelectionButtonDialogField.java
index fc60af658..4a76e2e94 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/SelectionButtonDialogField.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/SelectionButtonDialogField.java
@@ -22,183 +22,183 @@
  * Dialog Field containing a single button such as a radio or checkbox button.
  */
 public class SelectionButtonDialogField extends DialogField {
-  private Button fButton;
-  private boolean fIsSelected;
-  private DialogField[] fAttachedDialogFields;
-  private final int fButtonStyle;
-
-  /**
-   * Creates a selection button. Allowed button styles: SWT.RADIO, SWT.CHECK, SWT.TOGGLE, SWT.PUSH
-   */
-  public SelectionButtonDialogField(int buttonStyle) {
-    super();
-    fIsSelected = false;
-    fAttachedDialogFields = null;
-    fButtonStyle = buttonStyle;
-  }
-
-  /**
-   * Attaches a field to the selection state of the selection button. The attached field will be
-   * disabled if the selection button is not selected.
-   */
-  public void attachDialogField(DialogField dialogField) {
-    attachDialogFields(new DialogField[]{dialogField});
-  }
-
-  /**
-   * Attaches fields to the selection state of the selection button. The attached fields will be
-   * disabled if the selection button is not selected.
-   */
-  public void attachDialogFields(DialogField[] dialogFields) {
-    fAttachedDialogFields = dialogFields;
-    for (int i = 0; i < dialogFields.length; i++) {
-      dialogFields[i].setEnabled(fIsSelected);
-    }
-  }
-
-  /**
-   * Returns <code>true</code> is teh gived field is attached to the selection button.
-   */
-  public boolean isAttached(DialogField editor) {
-    if (fAttachedDialogFields != null) {
-      for (int i = 0; i < fAttachedDialogFields.length; i++) {
-        if (fAttachedDialogFields[i] == editor) {
-          return true;
-        }
-      }
-    }
-    return false;
-  }
-
-  // ------- layout helpers
-  /*
-   * @see DialogField#doFillIntoGrid
-   */
-  @Override
-  public Control[] doFillIntoGrid(Composite parent, int nColumns) {
-    assertEnoughColumns(nColumns);
-    Button button = getSelectionButton(parent);
-    GridData gd = new GridData();
-    gd.horizontalSpan = nColumns;
-    gd.horizontalAlignment = GridData.FILL;
-    if (fButtonStyle == SWT.PUSH) {
-      gd.widthHint = SwtUtil.getButtonWidthHint(button);
-    }
-    button.setLayoutData(gd);
-    return new Control[]{button};
-  }
-
-  /*
-   * @see DialogField#getNumberOfControls
-   */
-  @Override
-  public int getNumberOfControls() {
-    return 1;
-  }
-
-  // ------- ui creation
-  /**
-   * Returns the selection button widget. When called the first time, the widget will be created.
-   *
-   * @param group
-   *          The parent composite when called the first time, or <code>null</code> after.
-   */
-  public Button getSelectionButton(Composite group) {
-    if (fButton == null) {
-      assertCompositeNotNull(group);
-      fButton = new Button(group, fButtonStyle);
-      fButton.setFont(group.getFont());
-      fButton.setText(fLabelText);
-      fButton.setEnabled(isEnabled());
-      fButton.setSelection(fIsSelected);
-      fButton.addSelectionListener(new SelectionListener() {
-        @Override
-        public void widgetDefaultSelected(SelectionEvent e) {
-          doWidgetSelected(e);
-        }
-
-        @Override
-        public void widgetSelected(SelectionEvent e) {
-          doWidgetSelected(e);
-        }
-      });
-    }
-    return fButton;
-  }
-
-  private void doWidgetSelected(SelectionEvent e) {
-    if (isOkToUse(fButton)) {
-      changeValue(fButton.getSelection());
-    }
-  }
-
-  private void changeValue(boolean newState) {
-    if (fIsSelected != newState) {
-      fIsSelected = newState;
-      if (fAttachedDialogFields != null) {
-        boolean focusSet = false;
-        for (int i = 0; i < fAttachedDialogFields.length; i++) {
-          fAttachedDialogFields[i].setEnabled(fIsSelected);
-          if (fIsSelected && !focusSet) {
-            focusSet = fAttachedDialogFields[i].setFocus();
-          }
-        }
-      }
-      dialogFieldChanged();
-    } else if (fButtonStyle == SWT.PUSH) {
-      dialogFieldChanged();
-    }
-  }
-
-  /* (non-Javadoc)
-   * @see org.eclipse.jdt.internal.ui.wizards.dialogfields.DialogField#setLabelText(java.lang.String)
-   */
-  @Override
-  public void setLabelText(String labeltext) {
-    fLabelText = labeltext;
-    if (isOkToUse(fButton)) {
-      fButton.setText(labeltext);
-    }
-  }
-
-  // ------ model access
-  /**
-   * Returns the selection state of the button.
-   */
-  public boolean isSelected() {
-    return fIsSelected;
-  }
-
-  /**
-   * Sets the selection state of the button.
-   */
-  public void setSelection(boolean selected) {
-    changeValue(selected);
-    if (isOkToUse(fButton)) {
-      fButton.setSelection(selected);
-    }
-  }
-
-  // ------ enable / disable management
-  /*
-   * @see DialogField#updateEnableState
-   */
-  @Override
-  protected void updateEnableState() {
-    super.updateEnableState();
-    if (isOkToUse(fButton)) {
-      fButton.setEnabled(isEnabled());
-    }
-  }
-
-  /*(non-Javadoc)
-   * @see org.eclipse.jdt.internal.ui.wizards.dialogfields.DialogField#refresh()
-   */
-  @Override
-  public void refresh() {
-    super.refresh();
-    if (isOkToUse(fButton)) {
-      fButton.setSelection(fIsSelected);
-    }
-  }
+	private Button fButton;
+	private boolean fIsSelected;
+	private DialogField[] fAttachedDialogFields;
+	private final int fButtonStyle;
+
+	/**
+	 * Creates a selection button. Allowed button styles: SWT.RADIO, SWT.CHECK, SWT.TOGGLE, SWT.PUSH
+	 */
+	public SelectionButtonDialogField(int buttonStyle) {
+		super();
+		fIsSelected = false;
+		fAttachedDialogFields = null;
+		fButtonStyle = buttonStyle;
+	}
+
+	/**
+	 * Attaches a field to the selection state of the selection button. The attached field will be
+	 * disabled if the selection button is not selected.
+	 */
+	public void attachDialogField(DialogField dialogField) {
+		attachDialogFields(new DialogField[]{dialogField});
+	}
+
+	/**
+	 * Attaches fields to the selection state of the selection button. The attached fields will be
+	 * disabled if the selection button is not selected.
+	 */
+	public void attachDialogFields(DialogField[] dialogFields) {
+		fAttachedDialogFields = dialogFields;
+		for (int i = 0; i < dialogFields.length; i++) {
+			dialogFields[i].setEnabled(fIsSelected);
+		}
+	}
+
+	/**
+	 * Returns <code>true</code> is teh gived field is attached to the selection button.
+	 */
+	public boolean isAttached(DialogField editor) {
+		if (fAttachedDialogFields != null) {
+			for (int i = 0; i < fAttachedDialogFields.length; i++) {
+				if (fAttachedDialogFields[i] == editor) {
+					return true;
+				}
+			}
+		}
+		return false;
+	}
+
+	// ------- layout helpers
+	/*
+	 * @see DialogField#doFillIntoGrid
+	 */
+	@Override
+	public Control[] doFillIntoGrid(Composite parent, int nColumns) {
+		assertEnoughColumns(nColumns);
+		Button button = getSelectionButton(parent);
+		GridData gd = new GridData();
+		gd.horizontalSpan = nColumns;
+		gd.horizontalAlignment = GridData.FILL;
+		if (fButtonStyle == SWT.PUSH) {
+			gd.widthHint = SwtUtil.getButtonWidthHint(button);
+		}
+		button.setLayoutData(gd);
+		return new Control[]{button};
+	}
+
+	/*
+	 * @see DialogField#getNumberOfControls
+	 */
+	@Override
+	public int getNumberOfControls() {
+		return 1;
+	}
+
+	// ------- ui creation
+	/**
+	 * Returns the selection button widget. When called the first time, the widget will be created.
+	 *
+	 * @param group
+	 *          The parent composite when called the first time, or <code>null</code> after.
+	 */
+	public Button getSelectionButton(Composite group) {
+		if (fButton == null) {
+			assertCompositeNotNull(group);
+			fButton = new Button(group, fButtonStyle);
+			fButton.setFont(group.getFont());
+			fButton.setText(fLabelText);
+			fButton.setEnabled(isEnabled());
+			fButton.setSelection(fIsSelected);
+			fButton.addSelectionListener(new SelectionListener() {
+				@Override
+				public void widgetDefaultSelected(SelectionEvent e) {
+					doWidgetSelected(e);
+				}
+
+				@Override
+				public void widgetSelected(SelectionEvent e) {
+					doWidgetSelected(e);
+				}
+			});
+		}
+		return fButton;
+	}
+
+	private void doWidgetSelected(SelectionEvent e) {
+		if (isOkToUse(fButton)) {
+			changeValue(fButton.getSelection());
+		}
+	}
+
+	private void changeValue(boolean newState) {
+		if (fIsSelected != newState) {
+			fIsSelected = newState;
+			if (fAttachedDialogFields != null) {
+				boolean focusSet = false;
+				for (int i = 0; i < fAttachedDialogFields.length; i++) {
+					fAttachedDialogFields[i].setEnabled(fIsSelected);
+					if (fIsSelected && !focusSet) {
+						focusSet = fAttachedDialogFields[i].setFocus();
+					}
+				}
+			}
+			dialogFieldChanged();
+		} else if (fButtonStyle == SWT.PUSH) {
+			dialogFieldChanged();
+		}
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jdt.internal.ui.wizards.dialogfields.DialogField#setLabelText(java.lang.String)
+	 */
+	@Override
+	public void setLabelText(String labeltext) {
+		fLabelText = labeltext;
+		if (isOkToUse(fButton)) {
+			fButton.setText(labeltext);
+		}
+	}
+
+	// ------ model access
+	/**
+	 * Returns the selection state of the button.
+	 */
+	public boolean isSelected() {
+		return fIsSelected;
+	}
+
+	/**
+	 * Sets the selection state of the button.
+	 */
+	public void setSelection(boolean selected) {
+		changeValue(selected);
+		if (isOkToUse(fButton)) {
+			fButton.setSelection(selected);
+		}
+	}
+
+	// ------ enable / disable management
+	/*
+	 * @see DialogField#updateEnableState
+	 */
+	@Override
+	protected void updateEnableState() {
+		super.updateEnableState();
+		if (isOkToUse(fButton)) {
+			fButton.setEnabled(isEnabled());
+		}
+	}
+
+	/*(non-Javadoc)
+	 * @see org.eclipse.jdt.internal.ui.wizards.dialogfields.DialogField#refresh()
+	 */
+	@Override
+	public void refresh() {
+		super.refresh();
+		if (isOkToUse(fButton)) {
+			fButton.setSelection(fIsSelected);
+		}
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/SelectionButtonDialogFieldGroup.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/SelectionButtonDialogFieldGroup.java
index a130002ec..28ad56179 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/SelectionButtonDialogFieldGroup.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/SelectionButtonDialogFieldGroup.java
@@ -26,276 +26,276 @@
  * Dialog field describing a group with buttons (Checkboxes, radio buttons..)
  */
 public class SelectionButtonDialogFieldGroup extends DialogField {
-  private Composite fButtonComposite;
-  private Button[] fButtons;
-  private final String[] fButtonNames;
-  private final boolean[] fButtonsSelected;
-  private final boolean[] fButtonsEnabled;
-  private final int fGroupBorderStyle;
-  private final int fGroupNumberOfColumns;
-  private final int fButtonsStyle;
+	private Composite fButtonComposite;
+	private Button[] fButtons;
+	private final String[] fButtonNames;
+	private final boolean[] fButtonsSelected;
+	private final boolean[] fButtonsEnabled;
+	private final int fGroupBorderStyle;
+	private final int fGroupNumberOfColumns;
+	private final int fButtonsStyle;
 
-  /**
-   * Creates a group without border.
-   */
-  public SelectionButtonDialogFieldGroup(int buttonsStyle, String[] buttonNames, int nColumns) {
-    this(buttonsStyle, buttonNames, nColumns, SWT.NONE);
-  }
+	/**
+	 * Creates a group without border.
+	 */
+	public SelectionButtonDialogFieldGroup(int buttonsStyle, String[] buttonNames, int nColumns) {
+		this(buttonsStyle, buttonNames, nColumns, SWT.NONE);
+	}
 
-  /**
-   * Creates a group with border (label in border). Accepted button styles are: SWT.RADIO,
-   * SWT.CHECK, SWT.TOGGLE For border styles see <code>Group</code>
-   */
-  public SelectionButtonDialogFieldGroup(int buttonsStyle,
-      String[] buttonNames,
-      int nColumns,
-      int borderStyle) {
-    super();
-    Assert.isTrue(buttonsStyle == SWT.RADIO
-        || buttonsStyle == SWT.CHECK
-        || buttonsStyle == SWT.TOGGLE);
-    fButtonNames = buttonNames;
-    fButtonsStyle = buttonsStyle;
-    int nButtons = buttonNames.length;
-    fButtonsSelected = new boolean[nButtons];
-    fButtonsEnabled = new boolean[nButtons];
-    for (int i = 0; i < nButtons; i++) {
-      fButtonsSelected[i] = false;
-      fButtonsEnabled[i] = true;
-    }
-    if (buttonsStyle == SWT.RADIO) {
-      fButtonsSelected[0] = true;
-    }
-    fGroupBorderStyle = borderStyle;
-    fGroupNumberOfColumns = nColumns <= 0 ? nButtons : nColumns;
-  }
+	/**
+	 * Creates a group with border (label in border). Accepted button styles are: SWT.RADIO,
+	 * SWT.CHECK, SWT.TOGGLE For border styles see <code>Group</code>
+	 */
+	public SelectionButtonDialogFieldGroup(int buttonsStyle,
+			String[] buttonNames,
+			int nColumns,
+			int borderStyle) {
+		super();
+		Assert.isTrue(buttonsStyle == SWT.RADIO
+				|| buttonsStyle == SWT.CHECK
+				|| buttonsStyle == SWT.TOGGLE);
+		fButtonNames = buttonNames;
+		fButtonsStyle = buttonsStyle;
+		int nButtons = buttonNames.length;
+		fButtonsSelected = new boolean[nButtons];
+		fButtonsEnabled = new boolean[nButtons];
+		for (int i = 0; i < nButtons; i++) {
+			fButtonsSelected[i] = false;
+			fButtonsEnabled[i] = true;
+		}
+		if (buttonsStyle == SWT.RADIO) {
+			fButtonsSelected[0] = true;
+		}
+		fGroupBorderStyle = borderStyle;
+		fGroupNumberOfColumns = nColumns <= 0 ? nButtons : nColumns;
+	}
 
-  // ------- layout helpers
-  /*
-   * @see DialogField#doFillIntoGrid
-   */
-  @Override
-  public Control[] doFillIntoGrid(Composite parent, int nColumns) {
-    assertEnoughColumns(nColumns);
-    if (fGroupBorderStyle == SWT.NONE) {
-      Label label = getLabelControl(parent);
-      label.setLayoutData(gridDataForLabel(1));
-      Composite buttonsgroup = getSelectionButtonsGroup(parent);
-      GridData gd = new GridData();
-      gd.horizontalSpan = nColumns - 1;
-      buttonsgroup.setLayoutData(gd);
-      return new Control[]{label, buttonsgroup};
-    } else {
-      Composite buttonsgroup = getSelectionButtonsGroup(parent);
-      GridData gd = new GridData();
-      gd.horizontalSpan = nColumns;
-      buttonsgroup.setLayoutData(gd);
-      return new Control[]{buttonsgroup};
-    }
-  }
+	// ------- layout helpers
+	/*
+	 * @see DialogField#doFillIntoGrid
+	 */
+	@Override
+	public Control[] doFillIntoGrid(Composite parent, int nColumns) {
+		assertEnoughColumns(nColumns);
+		if (fGroupBorderStyle == SWT.NONE) {
+			Label label = getLabelControl(parent);
+			label.setLayoutData(gridDataForLabel(1));
+			Composite buttonsgroup = getSelectionButtonsGroup(parent);
+			GridData gd = new GridData();
+			gd.horizontalSpan = nColumns - 1;
+			buttonsgroup.setLayoutData(gd);
+			return new Control[]{label, buttonsgroup};
+		} else {
+			Composite buttonsgroup = getSelectionButtonsGroup(parent);
+			GridData gd = new GridData();
+			gd.horizontalSpan = nColumns;
+			buttonsgroup.setLayoutData(gd);
+			return new Control[]{buttonsgroup};
+		}
+	}
 
-  /*
-   * @see DialogField#doFillIntoGrid
-   */
-  @Override
-  public int getNumberOfControls() {
-    return fGroupBorderStyle == SWT.NONE ? 2 : 1;
-  }
+	/*
+	 * @see DialogField#doFillIntoGrid
+	 */
+	@Override
+	public int getNumberOfControls() {
+		return fGroupBorderStyle == SWT.NONE ? 2 : 1;
+	}
 
-  // ------- ui creation
-  private Button createSelectionButton(int index, Composite group, SelectionListener listener) {
-    Button button = new Button(group, fButtonsStyle | SWT.LEFT);
-    button.setFont(group.getFont());
-    button.setText(fButtonNames[index]);
-    button.setEnabled(isEnabled() && fButtonsEnabled[index]);
-    button.setSelection(fButtonsSelected[index]);
-    button.addSelectionListener(listener);
-    button.setLayoutData(new GridData());
-    return button;
-  }
+	// ------- ui creation
+	private Button createSelectionButton(int index, Composite group, SelectionListener listener) {
+		Button button = new Button(group, fButtonsStyle | SWT.LEFT);
+		button.setFont(group.getFont());
+		button.setText(fButtonNames[index]);
+		button.setEnabled(isEnabled() && fButtonsEnabled[index]);
+		button.setSelection(fButtonsSelected[index]);
+		button.addSelectionListener(listener);
+		button.setLayoutData(new GridData());
+		return button;
+	}
 
-  /**
-   * Returns the group widget. When called the first time, the widget will be created.
-   *
-   * @param parent
-   *          The parent composite when called the first time, or <code>null</code> after.
-   */
-  public Composite getSelectionButtonsGroup(Composite parent) {
-    if (fButtonComposite == null) {
-      assertCompositeNotNull(parent);
-      GridLayout layout = new GridLayout();
-      layout.makeColumnsEqualWidth = true;
-      layout.numColumns = fGroupNumberOfColumns;
-      if (fGroupBorderStyle != SWT.NONE) {
-        Group group = new Group(parent, fGroupBorderStyle);
-        group.setFont(parent.getFont());
-        if (fLabelText != null && fLabelText.length() > 0) {
-          group.setText(fLabelText);
-        }
-        fButtonComposite = group;
-      } else {
-        fButtonComposite = new Composite(parent, SWT.NONE);
-        fButtonComposite.setFont(parent.getFont());
-        layout.marginHeight = 0;
-        layout.marginWidth = 0;
-      }
-      fButtonComposite.setLayout(layout);
-      SelectionListener listener = new SelectionListener() {
-        @Override
-        public void widgetDefaultSelected(SelectionEvent e) {
-          doWidgetSelected(e);
-        }
+	/**
+	 * Returns the group widget. When called the first time, the widget will be created.
+	 *
+	 * @param parent
+	 *          The parent composite when called the first time, or <code>null</code> after.
+	 */
+	public Composite getSelectionButtonsGroup(Composite parent) {
+		if (fButtonComposite == null) {
+			assertCompositeNotNull(parent);
+			GridLayout layout = new GridLayout();
+			layout.makeColumnsEqualWidth = true;
+			layout.numColumns = fGroupNumberOfColumns;
+			if (fGroupBorderStyle != SWT.NONE) {
+				Group group = new Group(parent, fGroupBorderStyle);
+				group.setFont(parent.getFont());
+				if (fLabelText != null && fLabelText.length() > 0) {
+					group.setText(fLabelText);
+				}
+				fButtonComposite = group;
+			} else {
+				fButtonComposite = new Composite(parent, SWT.NONE);
+				fButtonComposite.setFont(parent.getFont());
+				layout.marginHeight = 0;
+				layout.marginWidth = 0;
+			}
+			fButtonComposite.setLayout(layout);
+			SelectionListener listener = new SelectionListener() {
+				@Override
+				public void widgetDefaultSelected(SelectionEvent e) {
+					doWidgetSelected(e);
+				}
 
-        @Override
-        public void widgetSelected(SelectionEvent e) {
-          doWidgetSelected(e);
-        }
-      };
-      int nButtons = fButtonNames.length;
-      fButtons = new Button[nButtons];
-      for (int i = 0; i < nButtons; i++) {
-        fButtons[i] = createSelectionButton(i, fButtonComposite, listener);
-      }
-      int nRows = nButtons / fGroupNumberOfColumns;
-      int nFillElements = nRows * fGroupNumberOfColumns - nButtons;
-      for (int i = 0; i < nFillElements; i++) {
-        createEmptySpace(fButtonComposite);
-      }
-    }
-    return fButtonComposite;
-  }
+				@Override
+				public void widgetSelected(SelectionEvent e) {
+					doWidgetSelected(e);
+				}
+			};
+			int nButtons = fButtonNames.length;
+			fButtons = new Button[nButtons];
+			for (int i = 0; i < nButtons; i++) {
+				fButtons[i] = createSelectionButton(i, fButtonComposite, listener);
+			}
+			int nRows = nButtons / fGroupNumberOfColumns;
+			int nFillElements = nRows * fGroupNumberOfColumns - nButtons;
+			for (int i = 0; i < nFillElements; i++) {
+				createEmptySpace(fButtonComposite);
+			}
+		}
+		return fButtonComposite;
+	}
 
-  /**
-   * Returns a button from the group or <code>null</code> if not yet created.
-   */
-  public Button getSelectionButton(int index) {
-    if (index >= 0 && index < fButtons.length) {
-      return fButtons[index];
-    }
-    return null;
-  }
+	/**
+	 * Returns a button from the group or <code>null</code> if not yet created.
+	 */
+	public Button getSelectionButton(int index) {
+		if (index >= 0 && index < fButtons.length) {
+			return fButtons[index];
+		}
+		return null;
+	}
 
-  private void doWidgetSelected(SelectionEvent e) {
-    Button button = (Button) e.widget;
-    for (int i = 0; i < fButtons.length; i++) {
-      if (fButtons[i] == button) {
-        fButtonsSelected[i] = button.getSelection();
-        dialogFieldChanged();
-        return;
-      }
-    }
-  }
+	private void doWidgetSelected(SelectionEvent e) {
+		Button button = (Button) e.widget;
+		for (int i = 0; i < fButtons.length; i++) {
+			if (fButtons[i] == button) {
+				fButtonsSelected[i] = button.getSelection();
+				dialogFieldChanged();
+				return;
+			}
+		}
+	}
 
-  // ------ model access
-  /**
-   * @return the indexes of selected buttons. Can return empty array.
-   */
-  public int[] getSelection() {
-    // prepare count of selected buttons
-    int count = 0;
-    for (int i = 0; i < fButtonsSelected.length; i++) {
-      if (fButtonsSelected[i]) {
-        count++;
-      }
-    }
-    // fill array of selected buttons
-    int[] selection = new int[count];
-    int index = 0;
-    for (int i = 0; i < fButtonsSelected.length; i++) {
-      if (fButtonsSelected[i]) {
-        selection[index++] = i;
-      }
-    }
-    //
-    return selection;
-  }
+	// ------ model access
+	/**
+	 * @return the indexes of selected buttons. Can return empty array.
+	 */
+	public int[] getSelection() {
+		// prepare count of selected buttons
+		int count = 0;
+		for (int i = 0; i < fButtonsSelected.length; i++) {
+			if (fButtonsSelected[i]) {
+				count++;
+			}
+		}
+		// fill array of selected buttons
+		int[] selection = new int[count];
+		int index = 0;
+		for (int i = 0; i < fButtonsSelected.length; i++) {
+			if (fButtonsSelected[i]) {
+				selection[index++] = i;
+			}
+		}
+		//
+		return selection;
+	}
 
-  /**
-   * Sets the indexes of selected buttons, all other buttons will be deselected.
-   */
-  public void setSelection(int[] selection) {
-    // set selection "false"
-    for (int i = 0; i < fButtonsSelected.length; i++) {
-      setSelection(i, false);
-    }
-    // set selection "true"
-    for (int i = 0; i < selection.length; i++) {
-      int index = selection[i];
-      setSelection(index, true);
-    }
-  }
+	/**
+	 * Sets the indexes of selected buttons, all other buttons will be deselected.
+	 */
+	public void setSelection(int[] selection) {
+		// set selection "false"
+		for (int i = 0; i < fButtonsSelected.length; i++) {
+			setSelection(i, false);
+		}
+		// set selection "true"
+		for (int i = 0; i < selection.length; i++) {
+			int index = selection[i];
+			setSelection(index, true);
+		}
+	}
 
-  /**
-   * Returns the selection state of a button contained in the group.
-   *
-   * @param index
-   *          The index of the button
-   */
-  public boolean isSelected(int index) {
-    if (index >= 0 && index < fButtonsSelected.length) {
-      return fButtonsSelected[index];
-    }
-    return false;
-  }
+	/**
+	 * Returns the selection state of a button contained in the group.
+	 *
+	 * @param index
+	 *          The index of the button
+	 */
+	public boolean isSelected(int index) {
+		if (index >= 0 && index < fButtonsSelected.length) {
+			return fButtonsSelected[index];
+		}
+		return false;
+	}
 
-  /**
-   * Sets the selection state of a button contained in the group.
-   */
-  public void setSelection(int index, boolean selected) {
-    if (index >= 0 && index < fButtonsSelected.length) {
-      if (fButtonsSelected[index] != selected) {
-        fButtonsSelected[index] = selected;
-        if (fButtons != null) {
-          Button button = fButtons[index];
-          if (isOkToUse(button)) {
-            button.setSelection(selected);
-          }
-        }
-      }
-    }
-  }
+	/**
+	 * Sets the selection state of a button contained in the group.
+	 */
+	public void setSelection(int index, boolean selected) {
+		if (index >= 0 && index < fButtonsSelected.length) {
+			if (fButtonsSelected[index] != selected) {
+				fButtonsSelected[index] = selected;
+				if (fButtons != null) {
+					Button button = fButtons[index];
+					if (isOkToUse(button)) {
+						button.setSelection(selected);
+					}
+				}
+			}
+		}
+	}
 
-  // ------ enable / disable management
-  @Override
-  protected void updateEnableState() {
-    super.updateEnableState();
-    if (fButtons != null) {
-      boolean enabled = isEnabled();
-      for (int i = 0; i < fButtons.length; i++) {
-        Button button = fButtons[i];
-        if (isOkToUse(button)) {
-          button.setEnabled(enabled && fButtonsEnabled[i]);
-        }
-      }
-    }
-  }
+	// ------ enable / disable management
+	@Override
+	protected void updateEnableState() {
+		super.updateEnableState();
+		if (fButtons != null) {
+			boolean enabled = isEnabled();
+			for (int i = 0; i < fButtons.length; i++) {
+				Button button = fButtons[i];
+				if (isOkToUse(button)) {
+					button.setEnabled(enabled && fButtonsEnabled[i]);
+				}
+			}
+		}
+	}
 
-  /**
-   * Sets the enable state of a button contained in the group.
-   */
-  public void enableSelectionButton(int index, boolean enable) {
-    if (index >= 0 && index < fButtonsEnabled.length) {
-      fButtonsEnabled[index] = enable;
-      if (fButtons != null) {
-        Button button = fButtons[index];
-        if (isOkToUse(button)) {
-          button.setEnabled(isEnabled() && enable);
-        }
-      }
-    }
-  }
+	/**
+	 * Sets the enable state of a button contained in the group.
+	 */
+	public void enableSelectionButton(int index, boolean enable) {
+		if (index >= 0 && index < fButtonsEnabled.length) {
+			fButtonsEnabled[index] = enable;
+			if (fButtons != null) {
+				Button button = fButtons[index];
+				if (isOkToUse(button)) {
+					button.setEnabled(isEnabled() && enable);
+				}
+			}
+		}
+	}
 
-  /*(non-Javadoc)
-   * @see org.eclipse.jdt.internal.ui.wizards.dialogfields.DialogField#refresh()
-   */
-  @Override
-  public void refresh() {
-    super.refresh();
-    for (int i = 0; i < fButtons.length; i++) {
-      Button button = fButtons[i];
-      if (isOkToUse(button)) {
-        button.setSelection(fButtonsSelected[i]);
-      }
-    }
-  }
+	/*(non-Javadoc)
+	 * @see org.eclipse.jdt.internal.ui.wizards.dialogfields.DialogField#refresh()
+	 */
+	@Override
+	public void refresh() {
+		super.refresh();
+		for (int i = 0; i < fButtons.length; i++) {
+			Button button = fButtons[i];
+			if (isOkToUse(button)) {
+				button.setSelection(fButtonsSelected[i]);
+			}
+		}
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/Separator.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/Separator.java
index 83f764550..a3b19e761 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/Separator.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/Separator.java
@@ -20,73 +20,73 @@
  * Dialog field describing a separator.
  */
 public class Separator extends DialogField {
-  private Label fSeparator;
-  private final int fStyle;
+	private Label fSeparator;
+	private final int fStyle;
 
-  public Separator() {
-    this(SWT.NONE);
-  }
+	public Separator() {
+		this(SWT.NONE);
+	}
 
-  /**
-   * @param style
-   *          of the separator. See <code>Label</code> for possible styles.
-   */
-  public Separator(int style) {
-    super();
-    fStyle = style;
-  }
+	/**
+	 * @param style
+	 *          of the separator. See <code>Label</code> for possible styles.
+	 */
+	public Separator(int style) {
+		super();
+		fStyle = style;
+	}
 
-  // ------- layout helpers
-  /**
-   * Creates the separator and fills it in a MGridLayout.
-   *
-   * @param height
-   *          The height of the separator
-   */
-  public Control[] doFillIntoGrid(Composite parent, int nColumns, int height) {
-    assertEnoughColumns(nColumns);
-    Control separator = getSeparator(parent);
-    separator.setLayoutData(gridDataForSeperator(nColumns, height));
-    return new Control[]{separator};
-  }
+	// ------- layout helpers
+	/**
+	 * Creates the separator and fills it in a MGridLayout.
+	 *
+	 * @param height
+	 *          The height of the separator
+	 */
+	public Control[] doFillIntoGrid(Composite parent, int nColumns, int height) {
+		assertEnoughColumns(nColumns);
+		Control separator = getSeparator(parent);
+		separator.setLayoutData(gridDataForSeperator(nColumns, height));
+		return new Control[]{separator};
+	}
 
-  /*
-   * @see DialogField#doFillIntoGrid
-   */
-  @Override
-  public Control[] doFillIntoGrid(Composite parent, int nColumns) {
-    return doFillIntoGrid(parent, nColumns, 4);
-  }
+	/*
+	 * @see DialogField#doFillIntoGrid
+	 */
+	@Override
+	public Control[] doFillIntoGrid(Composite parent, int nColumns) {
+		return doFillIntoGrid(parent, nColumns, 4);
+	}
 
-  /*
-   * @see DialogField#getNumberOfControls
-   */
-  @Override
-  public int getNumberOfControls() {
-    return 1;
-  }
+	/*
+	 * @see DialogField#getNumberOfControls
+	 */
+	@Override
+	public int getNumberOfControls() {
+		return 1;
+	}
 
-  protected static GridData gridDataForSeperator(int span, int height) {
-    GridData gd = new GridData();
-    gd.horizontalAlignment = GridData.FILL;
-    gd.verticalAlignment = GridData.BEGINNING;
-    gd.heightHint = height;
-    gd.horizontalSpan = span;
-    return gd;
-  }
+	protected static GridData gridDataForSeperator(int span, int height) {
+		GridData gd = new GridData();
+		gd.horizontalAlignment = GridData.FILL;
+		gd.verticalAlignment = GridData.BEGINNING;
+		gd.heightHint = height;
+		gd.horizontalSpan = span;
+		return gd;
+	}
 
-  // ------- ui creation
-  /**
-   * Creates or returns the created separator.
-   *
-   * @param parent
-   *          The parent composite or <code>null</code> if the widget has already been created.
-   */
-  public Control getSeparator(Composite parent) {
-    if (fSeparator == null) {
-      assertCompositeNotNull(parent);
-      fSeparator = new Label(parent, fStyle);
-    }
-    return fSeparator;
-  }
+	// ------- ui creation
+	/**
+	 * Creates or returns the created separator.
+	 *
+	 * @param parent
+	 *          The parent composite or <code>null</code> if the widget has already been created.
+	 */
+	public Control getSeparator(Composite parent) {
+		if (fSeparator == null) {
+			assertCompositeNotNull(parent);
+			fSeparator = new Label(parent, fStyle);
+		}
+		return fSeparator;
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/SpinnerDialogField.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/SpinnerDialogField.java
index adbaac365..3fedc7e3b 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/SpinnerDialogField.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/SpinnerDialogField.java
@@ -25,186 +25,186 @@
  * @author scheglov_ke
  */
 public class SpinnerDialogField extends DialogField {
-  private int m_selection;
-  private Spinner m_spinner;
-  private ModifyListener m_modifyListener;
-  private int m_minimum;
-  private int m_maximum = 100;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SpinnerDialogField() {
-    super();
-    m_selection = 0;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Layout helpers
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Control[] doFillIntoGrid(Composite parent, int nColumns) {
-    assertEnoughColumns(nColumns);
-    // label
-    Label label;
-    {
-      label = getLabelControl(parent);
-      label.setLayoutData(gridDataForLabel(1));
-    }
-    // spinner
-    Control spinner;
-    {
-      spinner = getSpinnerControl(parent);
-      spinner.setLayoutData(gridDataForSpinner(nColumns - 1));
-    }
-    // controls
-    return new Control[]{label, spinner};
-  }
-
-  @Override
-  public int getNumberOfControls() {
-    return 2;
-  }
-
-  protected static GridData gridDataForSpinner(int span) {
-    GridData gd = new GridData();
-    gd.horizontalAlignment = GridData.FILL;
-    gd.grabExcessHorizontalSpace = false;
-    gd.horizontalSpan = span;
-    return gd;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Focus methods
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean setFocus() {
-    if (isOkToUse(m_spinner)) {
-      m_spinner.setFocus();
-    }
-    return true;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // UI creation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Creates or returns the created {@link Spinner} control.
-   *
-   * @param parent
-   *          The parent composite or <code>null</code> when the widget has already been created.
-   */
-  public Control getSpinnerControl(Composite parent) {
-    if (m_spinner == null) {
-      assertCompositeNotNull(parent);
-      m_modifyListener = new ModifyListener() {
-        @Override
-        public void modifyText(ModifyEvent e) {
-          doModifyText(e);
-        }
-      };
-      //
-      m_spinner = new Spinner(parent, SWT.SINGLE | SWT.BORDER);
-      m_spinner.setMinimum(m_minimum);
-      m_spinner.setMaximum(m_maximum);
-      m_spinner.setSelection(m_selection);
-      m_spinner.addModifyListener(m_modifyListener);
-      // delayed
-      m_spinner.setFont(parent.getFont());
-      m_spinner.setEnabled(isEnabled());
-    }
-    return m_spinner;
-  }
-
-  private void doModifyText(ModifyEvent e) {
-    if (isOkToUse(m_spinner)) {
-      m_selection = m_spinner.getSelection();
-    }
-    dialogFieldChanged();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Enable/disable management
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void updateEnableState() {
-    super.updateEnableState();
-    if (isOkToUse(m_spinner)) {
-      m_spinner.setEnabled(isEnabled());
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Test access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets the minimum value that the receiver will allow.
-   */
-  public void setMinimum(int minimum) {
-    m_minimum = minimum;
-    if (isOkToUse(m_spinner)) {
-      m_spinner.setMinimum(m_minimum);
-    }
-  }
-
-  /**
-   * Sets the maximum value that the receiver will allow.
-   */
-  public void setMaximum(int maximum) {
-    m_maximum = maximum;
-    if (isOkToUse(m_spinner)) {
-      m_spinner.setMaximum(m_maximum);
-    }
-  }
-
-  /**
-   * @return the selection.
-   */
-  public int getSelection() {
-    return m_selection;
-  }
-
-  /**
-   * Sets the selection. Triggers a dialog-changed event.
-   */
-  public void setSelection(int selection) {
-    m_selection = selection;
-    if (isOkToUse(m_spinner)) {
-      m_spinner.setSelection(selection);
-    } else {
-      dialogFieldChanged();
-    }
-  }
-
-  /**
-   * Sets the text without triggering a dialog-changed event.
-   */
-  public void setSelectionWithoutUpdate(int selection) {
-    m_selection = selection;
-    if (isOkToUse(m_spinner)) {
-      m_spinner.removeModifyListener(m_modifyListener);
-      m_spinner.setSelection(selection);
-      m_spinner.addModifyListener(m_modifyListener);
-    }
-  }
-
-  @Override
-  public void refresh() {
-    super.refresh();
-    if (isOkToUse(m_spinner)) {
-      setSelectionWithoutUpdate(m_selection);
-    }
-  }
+	private int m_selection;
+	private Spinner m_spinner;
+	private ModifyListener m_modifyListener;
+	private int m_minimum;
+	private int m_maximum = 100;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SpinnerDialogField() {
+		super();
+		m_selection = 0;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Layout helpers
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Control[] doFillIntoGrid(Composite parent, int nColumns) {
+		assertEnoughColumns(nColumns);
+		// label
+		Label label;
+		{
+			label = getLabelControl(parent);
+			label.setLayoutData(gridDataForLabel(1));
+		}
+		// spinner
+		Control spinner;
+		{
+			spinner = getSpinnerControl(parent);
+			spinner.setLayoutData(gridDataForSpinner(nColumns - 1));
+		}
+		// controls
+		return new Control[]{label, spinner};
+	}
+
+	@Override
+	public int getNumberOfControls() {
+		return 2;
+	}
+
+	protected static GridData gridDataForSpinner(int span) {
+		GridData gd = new GridData();
+		gd.horizontalAlignment = GridData.FILL;
+		gd.grabExcessHorizontalSpace = false;
+		gd.horizontalSpan = span;
+		return gd;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Focus methods
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean setFocus() {
+		if (isOkToUse(m_spinner)) {
+			m_spinner.setFocus();
+		}
+		return true;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// UI creation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Creates or returns the created {@link Spinner} control.
+	 *
+	 * @param parent
+	 *          The parent composite or <code>null</code> when the widget has already been created.
+	 */
+	public Control getSpinnerControl(Composite parent) {
+		if (m_spinner == null) {
+			assertCompositeNotNull(parent);
+			m_modifyListener = new ModifyListener() {
+				@Override
+				public void modifyText(ModifyEvent e) {
+					doModifyText(e);
+				}
+			};
+			//
+			m_spinner = new Spinner(parent, SWT.SINGLE | SWT.BORDER);
+			m_spinner.setMinimum(m_minimum);
+			m_spinner.setMaximum(m_maximum);
+			m_spinner.setSelection(m_selection);
+			m_spinner.addModifyListener(m_modifyListener);
+			// delayed
+			m_spinner.setFont(parent.getFont());
+			m_spinner.setEnabled(isEnabled());
+		}
+		return m_spinner;
+	}
+
+	private void doModifyText(ModifyEvent e) {
+		if (isOkToUse(m_spinner)) {
+			m_selection = m_spinner.getSelection();
+		}
+		dialogFieldChanged();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Enable/disable management
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void updateEnableState() {
+		super.updateEnableState();
+		if (isOkToUse(m_spinner)) {
+			m_spinner.setEnabled(isEnabled());
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Test access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets the minimum value that the receiver will allow.
+	 */
+	public void setMinimum(int minimum) {
+		m_minimum = minimum;
+		if (isOkToUse(m_spinner)) {
+			m_spinner.setMinimum(m_minimum);
+		}
+	}
+
+	/**
+	 * Sets the maximum value that the receiver will allow.
+	 */
+	public void setMaximum(int maximum) {
+		m_maximum = maximum;
+		if (isOkToUse(m_spinner)) {
+			m_spinner.setMaximum(m_maximum);
+		}
+	}
+
+	/**
+	 * @return the selection.
+	 */
+	public int getSelection() {
+		return m_selection;
+	}
+
+	/**
+	 * Sets the selection. Triggers a dialog-changed event.
+	 */
+	public void setSelection(int selection) {
+		m_selection = selection;
+		if (isOkToUse(m_spinner)) {
+			m_spinner.setSelection(selection);
+		} else {
+			dialogFieldChanged();
+		}
+	}
+
+	/**
+	 * Sets the text without triggering a dialog-changed event.
+	 */
+	public void setSelectionWithoutUpdate(int selection) {
+		m_selection = selection;
+		if (isOkToUse(m_spinner)) {
+			m_spinner.removeModifyListener(m_modifyListener);
+			m_spinner.setSelection(selection);
+			m_spinner.addModifyListener(m_modifyListener);
+		}
+	}
+
+	@Override
+	public void refresh() {
+		super.refresh();
+		if (isOkToUse(m_spinner)) {
+			setSelectionWithoutUpdate(m_selection);
+		}
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/StatusUtils.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/StatusUtils.java
index b857e9334..fbf7b2205 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/StatusUtils.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/StatusUtils.java
@@ -24,118 +24,118 @@
  * A utility class to work with IStatus.
  */
 public class StatusUtils {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constants
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final IStatus OK_STATUS = new Status(IStatus.OK,
-      DesignerPlugin.PLUGIN_ID,
-      IStatus.OK,
-      "",
-      null);
-  public static final IStatus ERROR_STATUS = new Status(IStatus.ERROR,
-      DesignerPlugin.PLUGIN_ID,
-      IStatus.ERROR,
-      "",
-      null);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constants
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final IStatus OK_STATUS = new Status(IStatus.OK,
+			DesignerPlugin.PLUGIN_ID,
+			IStatus.OK,
+			"",
+			null);
+	public static final IStatus ERROR_STATUS = new Status(IStatus.ERROR,
+			DesignerPlugin.PLUGIN_ID,
+			IStatus.ERROR,
+			"",
+			null);
 
-  public static IStatus createError(String message) {
-    return new Status(IStatus.ERROR, DesignerPlugin.PLUGIN_ID, IStatus.ERROR, message, null);
-  }
+	public static IStatus createError(String message) {
+		return new Status(IStatus.ERROR, DesignerPlugin.PLUGIN_ID, IStatus.ERROR, message, null);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Compare
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Compares two instances of <code>IStatus</code>. The more severe is returned: an error is more
-   * severe than a warning, and a warning is more severe than ok. If the two statuses have the same
-   * severity, the second is returned.
-   */
-  public static IStatus getMoreSevere(IStatus s1, IStatus s2) {
-    if (s1.getSeverity() > s2.getSeverity()) {
-      return s1;
-    } else {
-      return s2;
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Compare
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Compares two instances of <code>IStatus</code>. The more severe is returned: an error is more
+	 * severe than a warning, and a warning is more severe than ok. If the two statuses have the same
+	 * severity, the second is returned.
+	 */
+	public static IStatus getMoreSevere(IStatus s1, IStatus s2) {
+		if (s1.getSeverity() > s2.getSeverity()) {
+			return s1;
+		} else {
+			return s2;
+		}
+	}
 
-  /**
-   * Finds the most severe status from collection of {@link IStatus}.
-   */
-  public static IStatus getMostSevere(Collection<IStatus> statusCollection) {
-    IStatus max = null;
-    for (IStatus status : statusCollection) {
-      if (status.matches(IStatus.ERROR)) {
-        return status;
-      }
-      if (max == null || status.getSeverity() > max.getSeverity()) {
-        max = status;
-      }
-    }
-    return max;
-  }
+	/**
+	 * Finds the most severe status from collection of {@link IStatus}.
+	 */
+	public static IStatus getMostSevere(Collection<IStatus> statusCollection) {
+		IStatus max = null;
+		for (IStatus status : statusCollection) {
+			if (status.matches(IStatus.ERROR)) {
+				return status;
+			}
+			if (max == null || status.getSeverity() > max.getSeverity()) {
+				max = status;
+			}
+		}
+		return max;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Display
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Applies the status to the status line of a dialog page.
-   */
-  public static void applyToStatusLine(DialogPage page, IStatus status) {
-    String message = status.getMessage();
-    switch (status.getSeverity()) {
-      case IStatus.OK :
-        page.setMessage(message, IMessageProvider.NONE);
-        page.setErrorMessage(null);
-        break;
-      case IStatus.WARNING :
-        page.setMessage(message, IMessageProvider.WARNING);
-        page.setErrorMessage(null);
-        break;
-      case IStatus.INFO :
-        page.setMessage(message, IMessageProvider.INFORMATION);
-        page.setErrorMessage(null);
-        break;
-      default :
-        if (message.length() == 0) {
-          message = null;
-        }
-        page.setMessage(null);
-        page.setErrorMessage(message);
-        break;
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Display
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Applies the status to the status line of a dialog page.
+	 */
+	public static void applyToStatusLine(DialogPage page, IStatus status) {
+		String message = status.getMessage();
+		switch (status.getSeverity()) {
+		case IStatus.OK :
+			page.setMessage(message, IMessageProvider.NONE);
+			page.setErrorMessage(null);
+			break;
+		case IStatus.WARNING :
+			page.setMessage(message, IMessageProvider.WARNING);
+			page.setErrorMessage(null);
+			break;
+		case IStatus.INFO :
+			page.setMessage(message, IMessageProvider.INFORMATION);
+			page.setErrorMessage(null);
+			break;
+		default :
+			if (message.length() == 0) {
+				message = null;
+			}
+			page.setMessage(null);
+			page.setErrorMessage(message);
+			break;
+		}
+	}
 
-  /**
-   * Applies the status to the title area of a dialog.
-   */
-  public static void applyToTitleAreaDialog(TitleAreaDialog dialog, IStatus status, String okMessage) {
-    String message = status.getMessage();
-    switch (status.getSeverity()) {
-      case IStatus.OK :
-        dialog.setMessage(okMessage);
-        dialog.setErrorMessage(null);
-        break;
-      case IStatus.INFO :
-        dialog.setMessage(message, IMessageProvider.INFORMATION);
-        dialog.setErrorMessage(null);
-        break;
-      case IStatus.WARNING :
-        dialog.setMessage(message, IMessageProvider.WARNING);
-        dialog.setErrorMessage(null);
-        break;
-      case IStatus.ERROR :
-        if (message.length() == 0) {
-          message = null;
-        }
-        dialog.setMessage(null);
-        dialog.setErrorMessage(message);
-        break;
-    }
-  }
+	/**
+	 * Applies the status to the title area of a dialog.
+	 */
+	public static void applyToTitleAreaDialog(TitleAreaDialog dialog, IStatus status, String okMessage) {
+		String message = status.getMessage();
+		switch (status.getSeverity()) {
+		case IStatus.OK :
+			dialog.setMessage(okMessage);
+			dialog.setErrorMessage(null);
+			break;
+		case IStatus.INFO :
+			dialog.setMessage(message, IMessageProvider.INFORMATION);
+			dialog.setErrorMessage(null);
+			break;
+		case IStatus.WARNING :
+			dialog.setMessage(message, IMessageProvider.WARNING);
+			dialog.setErrorMessage(null);
+			break;
+		case IStatus.ERROR :
+			if (message.length() == 0) {
+				message = null;
+			}
+			dialog.setMessage(null);
+			dialog.setErrorMessage(message);
+			break;
+		}
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/StringAreaDialogField.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/StringAreaDialogField.java
index 07236fffa..059571160 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/StringAreaDialogField.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/StringAreaDialogField.java
@@ -27,160 +27,160 @@
  * @author scheglov_ke
  */
 public class StringAreaDialogField extends DialogField {
-  private final int fRows;
-  private String fText;
-  private Text fTextControl;
-  private ModifyListener fModifyListener;
+	private final int fRows;
+	private String fText;
+	private Text fTextControl;
+	private ModifyListener fModifyListener;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public StringAreaDialogField(int rows) {
-    fRows = rows;
-    fText = ""; //$NON-NLS-1$
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public StringAreaDialogField(int rows) {
+		fRows = rows;
+		fText = ""; //$NON-NLS-1$
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Layout helpers
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Control[] doFillIntoGrid(Composite parent, int nColumns) {
-    assertEnoughColumns(nColumns);
-    //
-    Label label = getLabelControl(parent);
-    label.setLayoutData(gridDataForLabel(1));
-    Text text = getTextControl(parent);
-    GridDataFactory.create(text).spanH(nColumns - 1).hintVC(fRows).fill();
-    //
-    return new Control[]{label, text};
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Layout helpers
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Control[] doFillIntoGrid(Composite parent, int nColumns) {
+		assertEnoughColumns(nColumns);
+		//
+		Label label = getLabelControl(parent);
+		label.setLayoutData(gridDataForLabel(1));
+		Text text = getTextControl(parent);
+		GridDataFactory.create(text).spanH(nColumns - 1).hintVC(fRows).fill();
+		//
+		return new Control[]{label, text};
+	}
 
-  @Override
-  public int getNumberOfControls() {
-    return 2;
-  }
+	@Override
+	public int getNumberOfControls() {
+		return 2;
+	}
 
-  protected static GridData gridDataForText(int span) {
-    GridData gd = new GridData();
-    gd.horizontalAlignment = GridData.FILL;
-    gd.grabExcessHorizontalSpace = false;
-    gd.horizontalSpan = span;
-    return gd;
-  }
+	protected static GridData gridDataForText(int span) {
+		GridData gd = new GridData();
+		gd.horizontalAlignment = GridData.FILL;
+		gd.grabExcessHorizontalSpace = false;
+		gd.horizontalSpan = span;
+		return gd;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Focus methods
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean setFocus() {
-    if (isOkToUse(fTextControl)) {
-      fTextControl.setFocus();
-      fTextControl.setSelection(0, fTextControl.getText().length());
-    }
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Focus methods
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean setFocus() {
+		if (isOkToUse(fTextControl)) {
+			fTextControl.setFocus();
+			fTextControl.setSelection(0, fTextControl.getText().length());
+		}
+		return true;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // UI creation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Creates or returns the created text control.
-   *
-   * @param parent
-   *          The parent composite or <code>null</code> when the widget has already been created.
-   */
-  public Text getTextControl(Composite parent) {
-    if (fTextControl == null) {
-      assertCompositeNotNull(parent);
-      fModifyListener = new ModifyListener() {
-        @Override
-        public void modifyText(ModifyEvent e) {
-          doModifyText(e);
-        }
-      };
-      //
-      fTextControl = new Text(parent, SWT.MULTI | SWT.WRAP | SWT.BORDER);
-      fTextControl.setText(fText);
-      fTextControl.setFont(parent.getFont());
-      fTextControl.addModifyListener(fModifyListener);
-      //
-      fTextControl.setEnabled(isEnabled());
-    }
-    return fTextControl;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// UI creation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Creates or returns the created text control.
+	 *
+	 * @param parent
+	 *          The parent composite or <code>null</code> when the widget has already been created.
+	 */
+	public Text getTextControl(Composite parent) {
+		if (fTextControl == null) {
+			assertCompositeNotNull(parent);
+			fModifyListener = new ModifyListener() {
+				@Override
+				public void modifyText(ModifyEvent e) {
+					doModifyText(e);
+				}
+			};
+			//
+			fTextControl = new Text(parent, SWT.MULTI | SWT.WRAP | SWT.BORDER);
+			fTextControl.setText(fText);
+			fTextControl.setFont(parent.getFont());
+			fTextControl.addModifyListener(fModifyListener);
+			//
+			fTextControl.setEnabled(isEnabled());
+		}
+		return fTextControl;
+	}
 
-  private void doModifyText(ModifyEvent e) {
-    if (isOkToUse(fTextControl)) {
-      fText = fTextControl.getText();
-    }
-    dialogFieldChanged();
-  }
+	private void doModifyText(ModifyEvent e) {
+		if (isOkToUse(fTextControl)) {
+			fText = fTextControl.getText();
+		}
+		dialogFieldChanged();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Enable / disable management
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void updateEnableState() {
-    super.updateEnableState();
-    if (isOkToUse(fTextControl)) {
-      fTextControl.setEnabled(isEnabled());
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Enable / disable management
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void updateEnableState() {
+		super.updateEnableState();
+		if (isOkToUse(fTextControl)) {
+			fTextControl.setEnabled(isEnabled());
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Text access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Gets the text. Can not be <code>null</code>
-   */
-  public String getText() {
-    return fText;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Text access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Gets the text. Can not be <code>null</code>
+	 */
+	public String getText() {
+		return fText;
+	}
 
-  /**
-   * Sets the text. Triggers a dialog-changed event.
-   */
-  public void setText(String text) {
-    if (text == null) {
-      text = "";
-    }
-    fText = text;
-    if (isOkToUse(fTextControl)) {
-      fTextControl.setText(text);
-    } else {
-      dialogFieldChanged();
-    }
-  }
+	/**
+	 * Sets the text. Triggers a dialog-changed event.
+	 */
+	public void setText(String text) {
+		if (text == null) {
+			text = "";
+		}
+		fText = text;
+		if (isOkToUse(fTextControl)) {
+			fTextControl.setText(text);
+		} else {
+			dialogFieldChanged();
+		}
+	}
 
-  /**
-   * Sets the text without triggering a dialog-changed event.
-   */
-  public void setTextWithoutUpdate(String text) {
-    fText = text;
-    if (isOkToUse(fTextControl)) {
-      fTextControl.removeModifyListener(fModifyListener);
-      fTextControl.setText(text);
-      fTextControl.addModifyListener(fModifyListener);
-    }
-  }
+	/**
+	 * Sets the text without triggering a dialog-changed event.
+	 */
+	public void setTextWithoutUpdate(String text) {
+		fText = text;
+		if (isOkToUse(fTextControl)) {
+			fTextControl.removeModifyListener(fModifyListener);
+			fTextControl.setText(text);
+			fTextControl.addModifyListener(fModifyListener);
+		}
+	}
 
-  @Override
-  public void refresh() {
-    super.refresh();
-    if (isOkToUse(fTextControl)) {
-      setTextWithoutUpdate(fText);
-    }
-  }
+	@Override
+	public void refresh() {
+		super.refresh();
+		if (isOkToUse(fTextControl)) {
+			setTextWithoutUpdate(fText);
+		}
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/StringButtonDialogField.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/StringButtonDialogField.java
index 5640b79f8..253464cf0 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/StringButtonDialogField.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/StringButtonDialogField.java
@@ -24,111 +24,111 @@
  * Dialog field containing a label, text control and a button control.
  */
 public class StringButtonDialogField extends StringDialogField {
-  private Button fBrowseButton;
-  private String fBrowseButtonLabel;
-  private final IStringButtonAdapter fStringButtonAdapter;
-  private boolean fButtonEnabled;
+	private Button fBrowseButton;
+	private String fBrowseButtonLabel;
+	private final IStringButtonAdapter fStringButtonAdapter;
+	private boolean fButtonEnabled;
 
-  public StringButtonDialogField(IStringButtonAdapter adapter) {
-    super();
-    fStringButtonAdapter = adapter;
-    fBrowseButtonLabel = "!Browse...!"; //$NON-NLS-1$
-    fButtonEnabled = true;
-  }
+	public StringButtonDialogField(IStringButtonAdapter adapter) {
+		super();
+		fStringButtonAdapter = adapter;
+		fBrowseButtonLabel = "!Browse...!"; //$NON-NLS-1$
+		fButtonEnabled = true;
+	}
 
-  /**
-   * Sets the label of the button.
-   */
-  public void setButtonLabel(String label) {
-    fBrowseButtonLabel = label;
-  }
+	/**
+	 * Sets the label of the button.
+	 */
+	public void setButtonLabel(String label) {
+		fBrowseButtonLabel = label;
+	}
 
-  // ------ adapter communication
-  /**
-   * Programmatically pressing of the button
-   */
-  public void changeControlPressed() {
-    fStringButtonAdapter.changeControlPressed(this);
-  }
+	// ------ adapter communication
+	/**
+	 * Programmatically pressing of the button
+	 */
+	public void changeControlPressed() {
+		fStringButtonAdapter.changeControlPressed(this);
+	}
 
-  // ------- layout helpers
-  @Override
-  public Control[] doFillIntoGrid(Composite parent, int nColumns) {
-    assertEnoughColumns(nColumns);
-    Label label = getLabelControl(parent);
-    label.setLayoutData(gridDataForLabel(1));
-    Text text = getTextControl(parent);
-    text.setLayoutData(gridDataForText(nColumns - 2));
-    Button button = getChangeControl(parent);
-    button.setLayoutData(gridDataForButton(button, 1));
-    return new Control[]{label, text, button};
-  }
+	// ------- layout helpers
+	@Override
+	public Control[] doFillIntoGrid(Composite parent, int nColumns) {
+		assertEnoughColumns(nColumns);
+		Label label = getLabelControl(parent);
+		label.setLayoutData(gridDataForLabel(1));
+		Text text = getTextControl(parent);
+		text.setLayoutData(gridDataForText(nColumns - 2));
+		Button button = getChangeControl(parent);
+		button.setLayoutData(gridDataForButton(button, 1));
+		return new Control[]{label, text, button};
+	}
 
-  /*
-   * @see DialogField#getNumberOfControls
-   */
-  @Override
-  public int getNumberOfControls() {
-    return 3;
-  }
+	/*
+	 * @see DialogField#getNumberOfControls
+	 */
+	@Override
+	public int getNumberOfControls() {
+		return 3;
+	}
 
-  protected static GridData gridDataForButton(Button button, int span) {
-    GridData gd = new GridData();
-    gd.horizontalAlignment = GridData.FILL;
-    gd.grabExcessHorizontalSpace = false;
-    gd.horizontalSpan = span;
-    gd.widthHint = SwtUtil.getButtonWidthHint(button);
-    return gd;
-  }
+	protected static GridData gridDataForButton(Button button, int span) {
+		GridData gd = new GridData();
+		gd.horizontalAlignment = GridData.FILL;
+		gd.grabExcessHorizontalSpace = false;
+		gd.horizontalSpan = span;
+		gd.widthHint = SwtUtil.getButtonWidthHint(button);
+		return gd;
+	}
 
-  // ------- ui creation
-  /**
-   * Creates or returns the created button widget.
-   *
-   * @param parent
-   *          The parent composite or <code>null</code> if the widget has already been created.
-   */
-  public Button getChangeControl(Composite parent) {
-    if (fBrowseButton == null) {
-      assertCompositeNotNull(parent);
-      fBrowseButton = new Button(parent, SWT.PUSH);
-      fBrowseButton.setFont(parent.getFont());
-      fBrowseButton.setText(fBrowseButtonLabel);
-      fBrowseButton.setEnabled(isEnabled() && fButtonEnabled);
-      fBrowseButton.addSelectionListener(new SelectionListener() {
-        @Override
-        public void widgetDefaultSelected(SelectionEvent e) {
-          changeControlPressed();
-        }
+	// ------- ui creation
+	/**
+	 * Creates or returns the created button widget.
+	 *
+	 * @param parent
+	 *          The parent composite or <code>null</code> if the widget has already been created.
+	 */
+	public Button getChangeControl(Composite parent) {
+		if (fBrowseButton == null) {
+			assertCompositeNotNull(parent);
+			fBrowseButton = new Button(parent, SWT.PUSH);
+			fBrowseButton.setFont(parent.getFont());
+			fBrowseButton.setText(fBrowseButtonLabel);
+			fBrowseButton.setEnabled(isEnabled() && fButtonEnabled);
+			fBrowseButton.addSelectionListener(new SelectionListener() {
+				@Override
+				public void widgetDefaultSelected(SelectionEvent e) {
+					changeControlPressed();
+				}
 
-        @Override
-        public void widgetSelected(SelectionEvent e) {
-          changeControlPressed();
-        }
-      });
-    }
-    return fBrowseButton;
-  }
+				@Override
+				public void widgetSelected(SelectionEvent e) {
+					changeControlPressed();
+				}
+			});
+		}
+		return fBrowseButton;
+	}
 
-  // ------ enable / disable management
-  /**
-   * Sets the enable state of the button.
-   */
-  public void enableButton(boolean enable) {
-    if (isOkToUse(fBrowseButton)) {
-      fBrowseButton.setEnabled(isEnabled() && enable);
-    }
-    fButtonEnabled = enable;
-  }
+	// ------ enable / disable management
+	/**
+	 * Sets the enable state of the button.
+	 */
+	public void enableButton(boolean enable) {
+		if (isOkToUse(fBrowseButton)) {
+			fBrowseButton.setEnabled(isEnabled() && enable);
+		}
+		fButtonEnabled = enable;
+	}
 
-  /*
-   * @see DialogField#updateEnableState
-   */
-  @Override
-  protected void updateEnableState() {
-    super.updateEnableState();
-    if (isOkToUse(fBrowseButton)) {
-      fBrowseButton.setEnabled(isEnabled() && fButtonEnabled);
-    }
-  }
+	/*
+	 * @see DialogField#updateEnableState
+	 */
+	@Override
+	protected void updateEnableState() {
+		super.updateEnableState();
+		if (isOkToUse(fBrowseButton)) {
+			fBrowseButton.setEnabled(isEnabled() && fButtonEnabled);
+		}
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/StringButtonDirectoryDialogField.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/StringButtonDirectoryDialogField.java
index d04c4c0f7..f6e5d2962 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/StringButtonDirectoryDialogField.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/StringButtonDirectoryDialogField.java
@@ -22,49 +22,49 @@
  * @author scheglov_ke
  */
 public class StringButtonDirectoryDialogField extends StringButtonDialogField {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public StringButtonDirectoryDialogField() {
-    super(new Adapter());
-    setButtonLabel("...");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public StringButtonDirectoryDialogField() {
+		super(new Adapter());
+		setButtonLabel("...");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // UI creation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Control[] doFillIntoGrid(Composite parent, int columns) {
-    Control[] controls = super.doFillIntoGrid(parent, columns);
-    GridDataFactory.create(getChangeControl(null));
-    return controls;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// UI creation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Control[] doFillIntoGrid(Composite parent, int columns) {
+		Control[] controls = super.doFillIntoGrid(parent, columns);
+		GridDataFactory.create(getChangeControl(null));
+		return controls;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Adapter
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final class Adapter implements IStringButtonAdapter {
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // IStringButtonAdapter
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public void changeControlPressed(DialogField field) {
-      StringButtonDirectoryDialogField directoryField = (StringButtonDirectoryDialogField) field;
-      DirectoryDialog directoryDialog =
-          new DirectoryDialog(directoryField.getLabelControl(null).getShell());
-      directoryDialog.setFilterPath(directoryField.getText());
-      String newDirectory = directoryDialog.open();
-      if (newDirectory != null) {
-        directoryField.setText(newDirectory);
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Adapter
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final class Adapter implements IStringButtonAdapter {
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// IStringButtonAdapter
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public void changeControlPressed(DialogField field) {
+			StringButtonDirectoryDialogField directoryField = (StringButtonDirectoryDialogField) field;
+			DirectoryDialog directoryDialog =
+					new DirectoryDialog(directoryField.getLabelControl(null).getShell());
+			directoryDialog.setFilterPath(directoryField.getText());
+			String newDirectory = directoryDialog.open();
+			if (newDirectory != null) {
+				directoryField.setText(newDirectory);
+			}
+		}
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/StringButtonStatusDialogField.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/StringButtonStatusDialogField.java
index e615dc2d1..28c619f05 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/StringButtonStatusDialogField.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/StringButtonStatusDialogField.java
@@ -27,150 +27,150 @@
  * the current element chosen.
  */
 public class StringButtonStatusDialogField extends StringButtonDialogField {
-  private Label fStatusLabelControl;
-  private Object fStatus; // String or ImageDescriptor
-  private String fWidthHintString;
-  private int fWidthHint;
+	private Label fStatusLabelControl;
+	private Object fStatus; // String or ImageDescriptor
+	private String fWidthHintString;
+	private int fWidthHint;
 
-  public StringButtonStatusDialogField(IStringButtonAdapter adapter) {
-    super(adapter);
-    fStatus = null;
-    fWidthHintString = null;
-    fWidthHint = -1;
-  }
+	public StringButtonStatusDialogField(IStringButtonAdapter adapter) {
+		super(adapter);
+		fStatus = null;
+		fWidthHintString = null;
+		fWidthHint = -1;
+	}
 
-  // ------ set status
-  /**
-   * Sets the status string.
-   */
-  public void setStatus(String status) {
-    if (isOkToUse(fStatusLabelControl)) {
-      fStatusLabelControl.setText(status);
-    }
-    fStatus = status;
-  }
+	// ------ set status
+	/**
+	 * Sets the status string.
+	 */
+	public void setStatus(String status) {
+		if (isOkToUse(fStatusLabelControl)) {
+			fStatusLabelControl.setText(status);
+		}
+		fStatus = status;
+	}
 
-  /**
-   * Sets the status image. Caller is responsible to dispose image
-   */
-  public void setStatus(Image image) {
-    if (isOkToUse(fStatusLabelControl)) {
-      if (image == null) {
-        fStatusLabelControl.setImage(null);
-      } else {
-        fStatusLabelControl.setImage(image);
-      }
-    }
-    fStatus = image;
-  }
+	/**
+	 * Sets the status image. Caller is responsible to dispose image
+	 */
+	public void setStatus(Image image) {
+		if (isOkToUse(fStatusLabelControl)) {
+			if (image == null) {
+				fStatusLabelControl.setImage(null);
+			} else {
+				fStatusLabelControl.setImage(image);
+			}
+		}
+		fStatus = image;
+	}
 
-  /**
-   * Sets the staus string hint of the status label. The string is used to calculate the size of the
-   * status label.
-   */
-  public void setStatusWidthHint(String widthHintString) {
-    fWidthHintString = widthHintString;
-    fWidthHint = -1;
-  }
+	/**
+	 * Sets the staus string hint of the status label. The string is used to calculate the size of the
+	 * status label.
+	 */
+	public void setStatusWidthHint(String widthHintString) {
+		fWidthHintString = widthHintString;
+		fWidthHint = -1;
+	}
 
-  /**
-   * Sets the width hint of the status label.
-   */
-  public void setStatusWidthHint(int widthHint) {
-    fWidthHint = widthHint;
-    fWidthHintString = null;
-  }
+	/**
+	 * Sets the width hint of the status label.
+	 */
+	public void setStatusWidthHint(int widthHint) {
+		fWidthHint = widthHint;
+		fWidthHintString = null;
+	}
 
-  // ------- layout helpers
-  /*
-   * @see DialogField#doFillIntoGrid
-   */
-  @Override
-  public Control[] doFillIntoGrid(Composite parent, int nColumns) {
-    assertEnoughColumns(nColumns);
-    Label label = getLabelControl(parent);
-    label.setLayoutData(gridDataForLabel(1));
-    Text text = getTextControl(parent);
-    text.setLayoutData(gridDataForText(nColumns - 3));
-    Label status = getStatusLabelControl(parent);
-    status.setLayoutData(gridDataForStatusLabel(parent, 1));
-    Button button = getChangeControl(parent);
-    button.setLayoutData(gridDataForButton(button, 1));
-    return new Control[]{label, text, status, button};
-  }
+	// ------- layout helpers
+	/*
+	 * @see DialogField#doFillIntoGrid
+	 */
+	@Override
+	public Control[] doFillIntoGrid(Composite parent, int nColumns) {
+		assertEnoughColumns(nColumns);
+		Label label = getLabelControl(parent);
+		label.setLayoutData(gridDataForLabel(1));
+		Text text = getTextControl(parent);
+		text.setLayoutData(gridDataForText(nColumns - 3));
+		Label status = getStatusLabelControl(parent);
+		status.setLayoutData(gridDataForStatusLabel(parent, 1));
+		Button button = getChangeControl(parent);
+		button.setLayoutData(gridDataForButton(button, 1));
+		return new Control[]{label, text, status, button};
+	}
 
-  /*
-   * @see DialogField#getNumberOfControls
-   */
-  @Override
-  public int getNumberOfControls() {
-    return 4;
-  }
+	/*
+	 * @see DialogField#getNumberOfControls
+	 */
+	@Override
+	public int getNumberOfControls() {
+		return 4;
+	}
 
-  protected GridData gridDataForStatusLabel(Control aControl, int span) {
-    GridData gd = new GridData();
-    gd.horizontalAlignment = GridData.BEGINNING;
-    gd.grabExcessHorizontalSpace = false;
-    gd.horizontalIndent = 0;
-    if (fWidthHintString != null) {
-      GC gc = new GC(aControl);
-      gc.setFont(JFaceResources.getDialogFont());
-      gd.widthHint = gc.textExtent(fWidthHintString).x;
-      gc.dispose();
-    } else if (fWidthHint != -1) {
-      gd.widthHint = fWidthHint;
-    } else {
-      gd.widthHint = SWT.DEFAULT;
-    }
-    return gd;
-  }
+	protected GridData gridDataForStatusLabel(Control aControl, int span) {
+		GridData gd = new GridData();
+		gd.horizontalAlignment = GridData.BEGINNING;
+		gd.grabExcessHorizontalSpace = false;
+		gd.horizontalIndent = 0;
+		if (fWidthHintString != null) {
+			GC gc = new GC(aControl);
+			gc.setFont(JFaceResources.getDialogFont());
+			gd.widthHint = gc.textExtent(fWidthHintString).x;
+			gc.dispose();
+		} else if (fWidthHint != -1) {
+			gd.widthHint = fWidthHint;
+		} else {
+			gd.widthHint = SWT.DEFAULT;
+		}
+		return gd;
+	}
 
-  // ------- ui creation
-  /**
-   * Creates or returns the created status label widget.
-   *
-   * @param parent
-   *          The parent composite or <code>null</code> when the widget has already been created.
-   */
-  public Label getStatusLabelControl(Composite parent) {
-    if (fStatusLabelControl == null) {
-      assertCompositeNotNull(parent);
-      fStatusLabelControl = new Label(parent, SWT.LEFT);
-      fStatusLabelControl.setFont(parent.getFont());
-      fStatusLabelControl.setEnabled(isEnabled());
-      if (fStatus instanceof Image) {
-        fStatusLabelControl.setImage((Image) fStatus);
-      } else if (fStatus instanceof String) {
-        fStatusLabelControl.setText((String) fStatus);
-      } else {
-        // must be null
-      }
-    }
-    return fStatusLabelControl;
-  }
+	// ------- ui creation
+	/**
+	 * Creates or returns the created status label widget.
+	 *
+	 * @param parent
+	 *          The parent composite or <code>null</code> when the widget has already been created.
+	 */
+	public Label getStatusLabelControl(Composite parent) {
+		if (fStatusLabelControl == null) {
+			assertCompositeNotNull(parent);
+			fStatusLabelControl = new Label(parent, SWT.LEFT);
+			fStatusLabelControl.setFont(parent.getFont());
+			fStatusLabelControl.setEnabled(isEnabled());
+			if (fStatus instanceof Image) {
+				fStatusLabelControl.setImage((Image) fStatus);
+			} else if (fStatus instanceof String) {
+				fStatusLabelControl.setText((String) fStatus);
+			} else {
+				// must be null
+			}
+		}
+		return fStatusLabelControl;
+	}
 
-  // ------ enable / disable management
-  /*
-   * @see DialogField#updateEnableState
-   */
-  @Override
-  protected void updateEnableState() {
-    super.updateEnableState();
-    if (isOkToUse(fStatusLabelControl)) {
-      fStatusLabelControl.setEnabled(isEnabled());
-    }
-  }
+	// ------ enable / disable management
+	/*
+	 * @see DialogField#updateEnableState
+	 */
+	@Override
+	protected void updateEnableState() {
+		super.updateEnableState();
+		if (isOkToUse(fStatusLabelControl)) {
+			fStatusLabelControl.setEnabled(isEnabled());
+		}
+	}
 
-  /* (non-Javadoc)
-   * @see org.eclipse.jdt.internal.ui.wizards.dialogfields.DialogField#refresh()
-   */
-  @Override
-  public void refresh() {
-    super.refresh();
-    if (fStatus instanceof String) {
-      setStatus((String) fStatus);
-    } else {
-      setStatus((Image) fStatus);
-    }
-  }
+	/* (non-Javadoc)
+	 * @see org.eclipse.jdt.internal.ui.wizards.dialogfields.DialogField#refresh()
+	 */
+	@Override
+	public void refresh() {
+		super.refresh();
+		if (fStatus instanceof String) {
+			setStatus((String) fStatus);
+		} else {
+			setStatus((Image) fStatus);
+		}
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/StringDialogField.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/StringDialogField.java
index 62a1249a3..d1ff9ce8d 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/StringDialogField.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/StringDialogField.java
@@ -25,184 +25,184 @@
  * Dialog field containing a label and a text control.
  */
 public class StringDialogField extends DialogField {
-  private boolean fEditable = true;
-  private String fText;
-  private Text fTextControl;
-  private ModifyListener fModifyListener;
-  private IContentAssistProcessor fContentAssistProcessor;
-
-  public StringDialogField() {
-    super();
-    fText = ""; //$NON-NLS-1$
-  }
-
-  public void setContentAssistProcessor(IContentAssistProcessor processor) {
-    fContentAssistProcessor = processor;
-    if (fContentAssistProcessor != null && isOkToUse(fTextControl)) {
-      //ControlContentAssistHelper.createTextContentAssistant(fTextControl, fContentAssistProcessor);
-    }
-  }
-
-  public IContentAssistProcessor getContentAssistProcessor() {
-    return fContentAssistProcessor;
-  }
-
-  // ------- layout helpers
-  /*
-   * @see DialogField#doFillIntoGrid
-   */
-  @Override
-  public Control[] doFillIntoGrid(Composite parent, int nColumns) {
-    assertEnoughColumns(nColumns);
-    Label label = getLabelControl(parent);
-    label.setLayoutData(gridDataForLabel(1));
-    Text text = getTextControl(parent);
-    text.setLayoutData(gridDataForText(nColumns - 1));
-    return new Control[]{label, text};
-  }
-
-  /*
-   * @see DialogField#getNumberOfControls
-   */
-  @Override
-  public int getNumberOfControls() {
-    return 2;
-  }
-
-  protected static GridData gridDataForText(int span) {
-    GridData gd = new GridData();
-    gd.horizontalAlignment = GridData.FILL;
-    gd.grabExcessHorizontalSpace = false;
-    gd.horizontalSpan = span;
-    return gd;
-  }
-
-  // ------- focus methods
-  /*
-   * @see DialogField#setFocus
-   */
-  @Override
-  public boolean setFocus() {
-    if (isOkToUse(fTextControl)) {
-      fTextControl.setFocus();
-      fTextControl.setSelection(0, fTextControl.getText().length());
-    }
-    return true;
-  }
-
-  /**
-   * Performs {@link Text#selectAll()} for underlying {@link Text} widget.
-   */
-  public void selectAll() {
-    if (isOkToUse(fTextControl)) {
-      fTextControl.selectAll();
-    }
-  }
-
-  // ------- ui creation
-  /**
-   * Creates or returns the created text control.
-   *
-   * @param parent
-   *          The parent composite or <code>null</code> when the widget has already been created.
-   */
-  public Text getTextControl(Composite parent) {
-    if (fTextControl == null) {
-      assertCompositeNotNull(parent);
-      fModifyListener = new ModifyListener() {
-        @Override
-        public void modifyText(ModifyEvent e) {
-          doModifyText(e);
-        }
-      };
-      fTextControl = new Text(parent, SWT.SINGLE | SWT.BORDER);
-      // moved up due to 1GEUNW2
-      fTextControl.setText(fText);
-      fTextControl.setFont(parent.getFont());
-      fTextControl.addModifyListener(fModifyListener);
-      fTextControl.setEnabled(isEnabled());
-      updateEditableState();
-      if (fContentAssistProcessor != null) {
-        //ControlContentAssistHelper.createTextContentAssistant(fTextControl, fContentAssistProcessor);
-      }
-    }
-    return fTextControl;
-  }
-
-  private void doModifyText(ModifyEvent e) {
-    if (isOkToUse(fTextControl)) {
-      fText = fTextControl.getText();
-    }
-    dialogFieldChanged();
-  }
-
-  // ------ editable management
-  public void setEditable(boolean editable) {
-    fEditable = editable;
-    updateEditableState();
-  }
-
-  private void updateEditableState() {
-    if (isOkToUse(fTextControl)) {
-      fTextControl.setEditable(fEditable);
-    }
-  }
-
-  // ------ enable / disable management
-  /*
-   * @see DialogField#updateEnableState
-   */
-  @Override
-  protected void updateEnableState() {
-    super.updateEnableState();
-    if (isOkToUse(fTextControl)) {
-      fTextControl.setEnabled(isEnabled());
-    }
-  }
-
-  // ------ text access
-  /**
-   * Gets the text. Can not be <code>null</code>
-   */
-  public String getText() {
-    return fText;
-  }
-
-  /**
-   * Sets the text. Triggers a dialog-changed event.
-   */
-  public void setText(String text) {
-    if (text == null) {
-      text = "";
-    }
-    fText = text;
-    if (isOkToUse(fTextControl)) {
-      fTextControl.setText(text);
-    } else {
-      dialogFieldChanged();
-    }
-  }
-
-  /**
-   * Sets the text without triggering a dialog-changed event.
-   */
-  public void setTextWithoutUpdate(String text) {
-    fText = text;
-    if (isOkToUse(fTextControl)) {
-      fTextControl.removeModifyListener(fModifyListener);
-      fTextControl.setText(text);
-      fTextControl.addModifyListener(fModifyListener);
-    }
-  }
-
-  /* (non-Javadoc)
-   * @see org.eclipse.jdt.internal.ui.wizards.dialogfields.DialogField#refresh()
-   */
-  @Override
-  public void refresh() {
-    super.refresh();
-    if (isOkToUse(fTextControl)) {
-      setTextWithoutUpdate(fText);
-    }
-  }
+	private boolean fEditable = true;
+	private String fText;
+	private Text fTextControl;
+	private ModifyListener fModifyListener;
+	private IContentAssistProcessor fContentAssistProcessor;
+
+	public StringDialogField() {
+		super();
+		fText = ""; //$NON-NLS-1$
+	}
+
+	public void setContentAssistProcessor(IContentAssistProcessor processor) {
+		fContentAssistProcessor = processor;
+		if (fContentAssistProcessor != null && isOkToUse(fTextControl)) {
+			//ControlContentAssistHelper.createTextContentAssistant(fTextControl, fContentAssistProcessor);
+		}
+	}
+
+	public IContentAssistProcessor getContentAssistProcessor() {
+		return fContentAssistProcessor;
+	}
+
+	// ------- layout helpers
+	/*
+	 * @see DialogField#doFillIntoGrid
+	 */
+	@Override
+	public Control[] doFillIntoGrid(Composite parent, int nColumns) {
+		assertEnoughColumns(nColumns);
+		Label label = getLabelControl(parent);
+		label.setLayoutData(gridDataForLabel(1));
+		Text text = getTextControl(parent);
+		text.setLayoutData(gridDataForText(nColumns - 1));
+		return new Control[]{label, text};
+	}
+
+	/*
+	 * @see DialogField#getNumberOfControls
+	 */
+	@Override
+	public int getNumberOfControls() {
+		return 2;
+	}
+
+	protected static GridData gridDataForText(int span) {
+		GridData gd = new GridData();
+		gd.horizontalAlignment = GridData.FILL;
+		gd.grabExcessHorizontalSpace = false;
+		gd.horizontalSpan = span;
+		return gd;
+	}
+
+	// ------- focus methods
+	/*
+	 * @see DialogField#setFocus
+	 */
+	@Override
+	public boolean setFocus() {
+		if (isOkToUse(fTextControl)) {
+			fTextControl.setFocus();
+			fTextControl.setSelection(0, fTextControl.getText().length());
+		}
+		return true;
+	}
+
+	/**
+	 * Performs {@link Text#selectAll()} for underlying {@link Text} widget.
+	 */
+	public void selectAll() {
+		if (isOkToUse(fTextControl)) {
+			fTextControl.selectAll();
+		}
+	}
+
+	// ------- ui creation
+	/**
+	 * Creates or returns the created text control.
+	 *
+	 * @param parent
+	 *          The parent composite or <code>null</code> when the widget has already been created.
+	 */
+	public Text getTextControl(Composite parent) {
+		if (fTextControl == null) {
+			assertCompositeNotNull(parent);
+			fModifyListener = new ModifyListener() {
+				@Override
+				public void modifyText(ModifyEvent e) {
+					doModifyText(e);
+				}
+			};
+			fTextControl = new Text(parent, SWT.SINGLE | SWT.BORDER);
+			// moved up due to 1GEUNW2
+			fTextControl.setText(fText);
+			fTextControl.setFont(parent.getFont());
+			fTextControl.addModifyListener(fModifyListener);
+			fTextControl.setEnabled(isEnabled());
+			updateEditableState();
+			if (fContentAssistProcessor != null) {
+				//ControlContentAssistHelper.createTextContentAssistant(fTextControl, fContentAssistProcessor);
+			}
+		}
+		return fTextControl;
+	}
+
+	private void doModifyText(ModifyEvent e) {
+		if (isOkToUse(fTextControl)) {
+			fText = fTextControl.getText();
+		}
+		dialogFieldChanged();
+	}
+
+	// ------ editable management
+	public void setEditable(boolean editable) {
+		fEditable = editable;
+		updateEditableState();
+	}
+
+	private void updateEditableState() {
+		if (isOkToUse(fTextControl)) {
+			fTextControl.setEditable(fEditable);
+		}
+	}
+
+	// ------ enable / disable management
+	/*
+	 * @see DialogField#updateEnableState
+	 */
+	@Override
+	protected void updateEnableState() {
+		super.updateEnableState();
+		if (isOkToUse(fTextControl)) {
+			fTextControl.setEnabled(isEnabled());
+		}
+	}
+
+	// ------ text access
+	/**
+	 * Gets the text. Can not be <code>null</code>
+	 */
+	public String getText() {
+		return fText;
+	}
+
+	/**
+	 * Sets the text. Triggers a dialog-changed event.
+	 */
+	public void setText(String text) {
+		if (text == null) {
+			text = "";
+		}
+		fText = text;
+		if (isOkToUse(fTextControl)) {
+			fTextControl.setText(text);
+		} else {
+			dialogFieldChanged();
+		}
+	}
+
+	/**
+	 * Sets the text without triggering a dialog-changed event.
+	 */
+	public void setTextWithoutUpdate(String text) {
+		fText = text;
+		if (isOkToUse(fTextControl)) {
+			fTextControl.removeModifyListener(fModifyListener);
+			fTextControl.setText(text);
+			fTextControl.addModifyListener(fModifyListener);
+		}
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jdt.internal.ui.wizards.dialogfields.DialogField#refresh()
+	 */
+	@Override
+	public void refresh() {
+		super.refresh();
+		if (isOkToUse(fTextControl)) {
+			setTextWithoutUpdate(fText);
+		}
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/StringItemDialogField.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/StringItemDialogField.java
index 6823495f1..fa38de584 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/StringItemDialogField.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/StringItemDialogField.java
@@ -29,83 +29,83 @@
  * @author scheglov_ke
  */
 public class StringItemDialogField extends StringDialogField {
-  private final IStringItemAdapter m_adapter;
+	private final IStringItemAdapter m_adapter;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public StringItemDialogField(IStringItemAdapter adapter) {
-    m_adapter = adapter;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public StringItemDialogField(IStringItemAdapter adapter) {
+		m_adapter = adapter;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Fill
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public int getNumberOfControls() {
-    return 3;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Fill
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public int getNumberOfControls() {
+		return 3;
+	}
 
-  @Override
-  public Control[] doFillIntoGrid(Composite parent, int nColumns) {
-    if (nColumns < getNumberOfControls()) {
-      throw new IllegalArgumentException("given number of columns is too small");
-    }
-    //
-    Label label = getLabelControl(parent);
-    GridDataFactory.create(label).fillH();
-    //
-    final Text text = getTextControl(parent);
-    GridDataFactory.create(text).grabH().spanH(nColumns - 2).fillH();
-    //
-    ToolBar toolBar = new ToolBar(parent, SWT.FLAT | SWT.RIGHT);
-    GridDataFactory.create(toolBar).alignVM();
-    {
-      ToolItem clearItem = new ToolItem(toolBar, SWT.NONE);
-      clearItem.setImage(m_itemImage);
-      clearItem.setToolTipText(m_itemToolTip);
-      clearItem.addSelectionListener(new SelectionAdapter() {
-        @Override
-        public void widgetSelected(SelectionEvent e) {
-          m_adapter.itemPressed(StringItemDialogField.this);
-        }
-      });
-    }
-    //
-    return new Control[]{label, text, toolBar};
-  }
+	@Override
+	public Control[] doFillIntoGrid(Composite parent, int nColumns) {
+		if (nColumns < getNumberOfControls()) {
+			throw new IllegalArgumentException("given number of columns is too small");
+		}
+		//
+		Label label = getLabelControl(parent);
+		GridDataFactory.create(label).fillH();
+		//
+		final Text text = getTextControl(parent);
+		GridDataFactory.create(text).grabH().spanH(nColumns - 2).fillH();
+		//
+		ToolBar toolBar = new ToolBar(parent, SWT.FLAT | SWT.RIGHT);
+		GridDataFactory.create(toolBar).alignVM();
+		{
+			ToolItem clearItem = new ToolItem(toolBar, SWT.NONE);
+			clearItem.setImage(m_itemImage);
+			clearItem.setToolTipText(m_itemToolTip);
+			clearItem.addSelectionListener(new SelectionAdapter() {
+				@Override
+				public void widgetSelected(SelectionEvent e) {
+					m_adapter.itemPressed(StringItemDialogField.this);
+				}
+			});
+		}
+		//
+		return new Control[]{label, text, toolBar};
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Clear control
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Image m_itemImage;
-  private String m_itemToolTip;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Clear control
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Image m_itemImage;
+	private String m_itemToolTip;
 
-  public void setItemImage(Image clearImage) {
-    m_itemImage = clearImage;
-  }
+	public void setItemImage(Image clearImage) {
+		m_itemImage = clearImage;
+	}
 
-  public void setItemToolTip(String clearToolTip) {
-    m_itemToolTip = clearToolTip;
-  }
+	public void setItemToolTip(String clearToolTip) {
+		m_itemToolTip = clearToolTip;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Adapter
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Change listener used by {@link StringItemDialogField}.
-   *
-   * @author scheglov_ke
-   */
-  public interface IStringItemAdapter {
-    void itemPressed(DialogField field);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Adapter
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Change listener used by {@link StringItemDialogField}.
+	 *
+	 * @author scheglov_ke
+	 */
+	public interface IStringItemAdapter {
+		void itemPressed(DialogField field);
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/SwtUtil.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/SwtUtil.java
index a26d4bbf2..9f6d50e13 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/SwtUtil.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/SwtUtil.java
@@ -32,169 +32,169 @@
  * Utility class to simplify access to some SWT resources.
  */
 class SwtUtil {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Display
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Returns the standard display to be used. The method first checks, if the thread calling this
-   * method has an associated display. If so, this display is returned. Otherwise the method returns
-   * the default display.
-   */
-  public static Display getStandardDisplay() {
-    Display display;
-    display = Display.getCurrent();
-    if (display == null) {
-      display = Display.getDefault();
-    }
-    return display;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Display
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Returns the standard display to be used. The method first checks, if the thread calling this
+	 * method has an associated display. If so, this display is returned. Otherwise the method returns
+	 * the default display.
+	 */
+	public static Display getStandardDisplay() {
+		Display display;
+		display = Display.getCurrent();
+		if (display == null) {
+			display = Display.getDefault();
+		}
+		return display;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Shell
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Returns the shell for the given widget. If the widget doesn't represent a SWT object that
-   * manage a shell, <code>null</code> is returned.
-   *
-   * @return the shell for the given widget
-   */
-  public static Shell getShell(Widget widget) {
-    if (widget instanceof Control) {
-      return ((Control) widget).getShell();
-    }
-    if (widget instanceof Caret) {
-      return ((Caret) widget).getParent().getShell();
-    }
-    if (widget instanceof DragSource) {
-      return ((DragSource) widget).getControl().getShell();
-    }
-    if (widget instanceof DropTarget) {
-      return ((DropTarget) widget).getControl().getShell();
-    }
-    if (widget instanceof Menu) {
-      return ((Menu) widget).getParent().getShell();
-    }
-    if (widget instanceof ScrollBar) {
-      return ((ScrollBar) widget).getParent().getShell();
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Shell
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Returns the shell for the given widget. If the widget doesn't represent a SWT object that
+	 * manage a shell, <code>null</code> is returned.
+	 *
+	 * @return the shell for the given widget
+	 */
+	public static Shell getShell(Widget widget) {
+		if (widget instanceof Control) {
+			return ((Control) widget).getShell();
+		}
+		if (widget instanceof Caret) {
+			return ((Caret) widget).getParent().getShell();
+		}
+		if (widget instanceof DragSource) {
+			return ((DragSource) widget).getControl().getShell();
+		}
+		if (widget instanceof DropTarget) {
+			return ((DropTarget) widget).getControl().getShell();
+		}
+		if (widget instanceof Menu) {
+			return ((Menu) widget).getParent().getShell();
+		}
+		if (widget instanceof ScrollBar) {
+			return ((ScrollBar) widget).getParent().getShell();
+		}
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Sizes
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Returns a width hint for a button control.
-   */
-  public static int getButtonWidthHint(Button button) {
-    button.setFont(JFaceResources.getDialogFont());
-    PixelConverter converter = new PixelConverter(button);
-    int widthHint = converter.convertHorizontalDLUsToPixels(IDialogConstants.BUTTON_WIDTH);
-    return Math.max(widthHint, button.computeSize(SWT.DEFAULT, SWT.DEFAULT, true).x);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Sizes
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Returns a width hint for a button control.
+	 */
+	public static int getButtonWidthHint(Button button) {
+		button.setFont(JFaceResources.getDialogFont());
+		PixelConverter converter = new PixelConverter(button);
+		int widthHint = converter.convertHorizontalDLUsToPixels(IDialogConstants.BUTTON_WIDTH);
+		return Math.max(widthHint, button.computeSize(SWT.DEFAULT, SWT.DEFAULT, true).x);
+	}
 
-  /**
-   * Sets width and height hint for the button control. <b>Note:</b> This is a NOP if the button's
-   * layout data is not an instance of <code>GridData</code>.
-   *
-   * @param button
-   *          the button for which to set the dimension hint
-   */
-  public static void setButtonDimensionHint(Button button) {
-    Object gd = button.getLayoutData();
-    if (gd instanceof GridData) {
-      ((GridData) gd).widthHint = getButtonWidthHint(button);
-      ((GridData) gd).horizontalAlignment = GridData.FILL;
-    }
-  }
+	/**
+	 * Sets width and height hint for the button control. <b>Note:</b> This is a NOP if the button's
+	 * layout data is not an instance of <code>GridData</code>.
+	 *
+	 * @param button
+	 *          the button for which to set the dimension hint
+	 */
+	public static void setButtonDimensionHint(Button button) {
+		Object gd = button.getLayoutData();
+		if (gd instanceof GridData) {
+			((GridData) gd).widthHint = getButtonWidthHint(button);
+			((GridData) gd).horizontalAlignment = GridData.FILL;
+		}
+	}
 
-  public static int getTableHeightHint(Table table, int rows) {
-    if (table.getFont().equals(JFaceResources.getDefaultFont())) {
-      table.setFont(JFaceResources.getDialogFont());
-    }
-    int result = table.getItemHeight() * rows + table.getHeaderHeight();
-    if (table.getLinesVisible()) {
-      result += table.getGridLineWidth() * (rows - 1);
-    }
-    return result;
-  }
+	public static int getTableHeightHint(Table table, int rows) {
+		if (table.getFont().equals(JFaceResources.getDefaultFont())) {
+			table.setFont(JFaceResources.getDialogFont());
+		}
+		int result = table.getItemHeight() * rows + table.getHeaderHeight();
+		if (table.getLinesVisible()) {
+			result += table.getGridLineWidth() * (rows - 1);
+		}
+		return result;
+	}
 
-  /**
-   * Sets the span of a control. Assumes that GridData is used.
-   */
-  public static void setHorizontalSpan(Control control, int span) {
-    Object ld = control.getLayoutData();
-    if (ld instanceof GridData) {
-      ((GridData) ld).horizontalSpan = span;
-    } else if (span != 1) {
-      GridData gd = new GridData();
-      gd.horizontalSpan = span;
-      control.setLayoutData(gd);
-    }
-  }
+	/**
+	 * Sets the span of a control. Assumes that GridData is used.
+	 */
+	public static void setHorizontalSpan(Control control, int span) {
+		Object ld = control.getLayoutData();
+		if (ld instanceof GridData) {
+			((GridData) ld).horizontalSpan = span;
+		} else if (span != 1) {
+			GridData gd = new GridData();
+			gd.horizontalSpan = span;
+			control.setLayoutData(gd);
+		}
+	}
 
-  /**
-   * Sets the width hint of a control. Assumes that GridData is used.
-   */
-  public static void setWidthHint(Control control, int widthHint) {
-    Object ld = control.getLayoutData();
-    if (ld instanceof GridData) {
-      ((GridData) ld).widthHint = widthHint;
-    }
-  }
+	/**
+	 * Sets the width hint of a control. Assumes that GridData is used.
+	 */
+	public static void setWidthHint(Control control, int widthHint) {
+		Object ld = control.getLayoutData();
+		if (ld instanceof GridData) {
+			((GridData) ld).widthHint = widthHint;
+		}
+	}
 
-  /**
-   * Sets the width hint (in chars) of a control. Assumes that GridData is used.
-   */
-  public static void setWidthHintChars(Control control, int widthHintChars) {
-    PixelConverter pixelConverter = new PixelConverter(control);
-    setWidthHint(control, pixelConverter.convertWidthInCharsToPixels(widthHintChars));
-  }
+	/**
+	 * Sets the width hint (in chars) of a control. Assumes that GridData is used.
+	 */
+	public static void setWidthHintChars(Control control, int widthHintChars) {
+		PixelConverter pixelConverter = new PixelConverter(control);
+		setWidthHint(control, pixelConverter.convertWidthInCharsToPixels(widthHintChars));
+	}
 
-  /**
-   * Sets the horizontal alignment of a control. Assumes that GridData is used.
-   */
-  public static void setHorizontalAlignment(Control control, boolean grab, int alignment) {
-    Object ld = control.getLayoutData();
-    if (ld instanceof GridData) {
-      ((GridData) ld).grabExcessHorizontalSpace = grab;
-      ((GridData) ld).horizontalAlignment = alignment;
-    }
-  }
+	/**
+	 * Sets the horizontal alignment of a control. Assumes that GridData is used.
+	 */
+	public static void setHorizontalAlignment(Control control, boolean grab, int alignment) {
+		Object ld = control.getLayoutData();
+		if (ld instanceof GridData) {
+			((GridData) ld).grabExcessHorizontalSpace = grab;
+			((GridData) ld).horizontalAlignment = alignment;
+		}
+	}
 
-  /**
-   * Sets the heightHint hint of a control. Assumes that GridData is used.
-   */
-  public static void setHeightHint(Control control, int heightHint) {
-    Object ld = control.getLayoutData();
-    if (ld instanceof GridData) {
-      ((GridData) ld).heightHint = heightHint;
-    }
-  }
+	/**
+	 * Sets the heightHint hint of a control. Assumes that GridData is used.
+	 */
+	public static void setHeightHint(Control control, int heightHint) {
+		Object ld = control.getLayoutData();
+		if (ld instanceof GridData) {
+			((GridData) ld).heightHint = heightHint;
+		}
+	}
 
-  /**
-   * Sets the horizontal indent of a control. Assumes that GridData is used.
-   */
-  public static void setHorizontalIndent(Control control, int horizontalIndent) {
-    Object ld = control.getLayoutData();
-    if (ld instanceof GridData) {
-      ((GridData) ld).horizontalIndent = horizontalIndent;
-    }
-  }
+	/**
+	 * Sets the horizontal indent of a control. Assumes that GridData is used.
+	 */
+	public static void setHorizontalIndent(Control control, int horizontalIndent) {
+		Object ld = control.getLayoutData();
+		if (ld instanceof GridData) {
+			((GridData) ld).horizontalIndent = horizontalIndent;
+		}
+	}
 
-  /**
-   * Sets the horizontal grabbing of a control to true. Assumes that GridData is used.
-   */
-  public static void setHorizontalGrabbing(Control control) {
-    Object ld = control.getLayoutData();
-    if (ld instanceof GridData) {
-      ((GridData) ld).grabExcessHorizontalSpace = true;
-    }
-  }
+	/**
+	 * Sets the horizontal grabbing of a control to true. Assumes that GridData is used.
+	 */
+	public static void setHorizontalGrabbing(Control control) {
+		Object ld = control.getLayoutData();
+		if (ld instanceof GridData) {
+			((GridData) ld).grabExcessHorizontalSpace = true;
+		}
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/TableLayoutComposite.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/TableLayoutComposite.java
index a7bd19122..62c1a3b08 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/TableLayoutComposite.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/dialogfields/TableLayoutComposite.java
@@ -32,154 +32,154 @@
  * manager.
  */
 class TableLayoutComposite extends Composite {
-  /**
-   * The number of extra pixels taken as horizontal trim by the table column. To ensure there are N
-   * pixels available for the content of the column, assign N+COLUMN_TRIM for the column width.
-   */
-  private static int COLUMN_TRIM = "carbon".equals(SWT.getPlatform()) ? 24 : 3;
-  private final List<ColumnLayoutData> columns = new ArrayList<>();
+	/**
+	 * The number of extra pixels taken as horizontal trim by the table column. To ensure there are N
+	 * pixels available for the content of the column, assign N+COLUMN_TRIM for the column width.
+	 */
+	private static int COLUMN_TRIM = "carbon".equals(SWT.getPlatform()) ? 24 : 3;
+	private final List<ColumnLayoutData> columns = new ArrayList<>();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Creates a new <code>TableLayoutComposite</code>.
-   */
-  public TableLayoutComposite(Composite parent, int style) {
-    super(parent, style);
-    addControlListener(new ControlAdapter() {
-      @Override
-      public void controlResized(ControlEvent e) {
-        Rectangle area = getClientArea();
-        Table table = (Table) getChildren()[0];
-        Point preferredSize = computeTableSize(table);
-        int width = area.width - 2 * table.getBorderWidth();
-        // subtract the scroll bar width from the total column width
-        if (preferredSize.y > area.height) {
-          Point vBarSize = table.getVerticalBar().getSize();
-          width -= vBarSize.x;
-        }
-        // do layout
-        layoutTable(table, width, area, table.getSize().x < area.width);
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Creates a new <code>TableLayoutComposite</code>.
+	 */
+	public TableLayoutComposite(Composite parent, int style) {
+		super(parent, style);
+		addControlListener(new ControlAdapter() {
+			@Override
+			public void controlResized(ControlEvent e) {
+				Rectangle area = getClientArea();
+				Table table = (Table) getChildren()[0];
+				Point preferredSize = computeTableSize(table);
+				int width = area.width - 2 * table.getBorderWidth();
+				// subtract the scroll bar width from the total column width
+				if (preferredSize.y > area.height) {
+					Point vBarSize = table.getVerticalBar().getSize();
+					width -= vBarSize.x;
+				}
+				// do layout
+				layoutTable(table, width, area, table.getSize().x < area.width);
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds {@link ColumnLayoutData} to this table layout.
-   */
-  public void addColumnData(ColumnLayoutData data) {
-    columns.add(data);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds {@link ColumnLayoutData} to this table layout.
+	 */
+	public void addColumnData(ColumnLayoutData data) {
+		columns.add(data);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Helpers
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Point computeTableSize(Table table) {
-    Point result = table.computeSize(SWT.DEFAULT, SWT.DEFAULT);
-    int width = 0;
-    int size = columns.size();
-    for (int i = 0; i < size; ++i) {
-      ColumnLayoutData layoutData = columns.get(i);
-      if (layoutData instanceof ColumnPixelData) {
-        ColumnPixelData col = (ColumnPixelData) layoutData;
-        width += col.width;
-        if (col.addTrim) {
-          width += COLUMN_TRIM;
-        }
-      } else if (layoutData instanceof ColumnWeightData) {
-        ColumnWeightData col = (ColumnWeightData) layoutData;
-        width += col.minimumWidth;
-      } else {
-        Assert.isTrue(false, "Unknown column layout data");
-      }
-    }
-    if (width > result.x) {
-      result.x = width;
-    }
-    return result;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Helpers
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Point computeTableSize(Table table) {
+		Point result = table.computeSize(SWT.DEFAULT, SWT.DEFAULT);
+		int width = 0;
+		int size = columns.size();
+		for (int i = 0; i < size; ++i) {
+			ColumnLayoutData layoutData = columns.get(i);
+			if (layoutData instanceof ColumnPixelData) {
+				ColumnPixelData col = (ColumnPixelData) layoutData;
+				width += col.width;
+				if (col.addTrim) {
+					width += COLUMN_TRIM;
+				}
+			} else if (layoutData instanceof ColumnWeightData) {
+				ColumnWeightData col = (ColumnWeightData) layoutData;
+				width += col.minimumWidth;
+			} else {
+				Assert.isTrue(false, "Unknown column layout data");
+			}
+		}
+		if (width > result.x) {
+			result.x = width;
+		}
+		return result;
+	}
 
-  private void layoutTable(Table table, int width, Rectangle area, boolean increase) {
-    // may be invalid first time on Linux
-    if (width <= 1) {
-      return;
-    }
-    // do layout
-    TableColumn[] tableColumns = table.getColumns();
-    int size = Math.min(columns.size(), tableColumns.length);
-    int[] widths = new int[size];
-    int fixedWidth = 0;
-    int numberOfWeightColumns = 0;
-    int totalWeight = 0;
-    // first calculate space occupied by fixed columns
-    for (int i = 0; i < size; i++) {
-      ColumnLayoutData col = columns.get(i);
-      if (col instanceof ColumnPixelData) {
-        ColumnPixelData cpd = (ColumnPixelData) col;
-        int pixels = cpd.width;
-        if (cpd.addTrim) {
-          pixels += COLUMN_TRIM;
-        }
-        widths[i] = pixels;
-        fixedWidth += pixels;
-      } else if (col instanceof ColumnWeightData) {
-        ColumnWeightData cw = (ColumnWeightData) col;
-        numberOfWeightColumns++;
-        int weight = cw.weight;
-        totalWeight += weight;
-      } else {
-        Assert.isTrue(false, "Unknown column layout data");
-      }
-    }
-    // do we have columns that have a weight?
-    if (numberOfWeightColumns > 0) {
-      // now distribute the rest to the columns with weight
-      int rest = width - fixedWidth;
-      int totalDistributed = 0;
-      for (int i = 0; i < size; ++i) {
-        ColumnLayoutData col = columns.get(i);
-        if (col instanceof ColumnWeightData) {
-          ColumnWeightData cw = (ColumnWeightData) col;
-          int weight = cw.weight;
-          int pixels = totalWeight == 0 ? 0 : weight * rest / totalWeight;
-          if (pixels < cw.minimumWidth) {
-            pixels = cw.minimumWidth;
-          }
-          totalDistributed += pixels;
-          widths[i] = pixels;
-        }
-      }
-      // distribute any remaining pixels to columns with weight
-      int diff = rest - totalDistributed;
-      for (int i = 0; diff > 0; ++i) {
-        if (i == size) {
-          i = 0;
-        }
-        ColumnLayoutData col = columns.get(i);
-        if (col instanceof ColumnWeightData) {
-          ++widths[i];
-          --diff;
-        }
-      }
-    }
-    if (increase) {
-      table.setSize(area.width, area.height);
-    }
-    for (int i = 0; i < size; i++) {
-      tableColumns[i].setWidth(widths[i]);
-    }
-    if (!increase) {
-      table.setSize(area.width, area.height);
-    }
-  }
+	private void layoutTable(Table table, int width, Rectangle area, boolean increase) {
+		// may be invalid first time on Linux
+		if (width <= 1) {
+			return;
+		}
+		// do layout
+		TableColumn[] tableColumns = table.getColumns();
+		int size = Math.min(columns.size(), tableColumns.length);
+		int[] widths = new int[size];
+		int fixedWidth = 0;
+		int numberOfWeightColumns = 0;
+		int totalWeight = 0;
+		// first calculate space occupied by fixed columns
+		for (int i = 0; i < size; i++) {
+			ColumnLayoutData col = columns.get(i);
+			if (col instanceof ColumnPixelData) {
+				ColumnPixelData cpd = (ColumnPixelData) col;
+				int pixels = cpd.width;
+				if (cpd.addTrim) {
+					pixels += COLUMN_TRIM;
+				}
+				widths[i] = pixels;
+				fixedWidth += pixels;
+			} else if (col instanceof ColumnWeightData) {
+				ColumnWeightData cw = (ColumnWeightData) col;
+				numberOfWeightColumns++;
+				int weight = cw.weight;
+				totalWeight += weight;
+			} else {
+				Assert.isTrue(false, "Unknown column layout data");
+			}
+		}
+		// do we have columns that have a weight?
+		if (numberOfWeightColumns > 0) {
+			// now distribute the rest to the columns with weight
+			int rest = width - fixedWidth;
+			int totalDistributed = 0;
+			for (int i = 0; i < size; ++i) {
+				ColumnLayoutData col = columns.get(i);
+				if (col instanceof ColumnWeightData) {
+					ColumnWeightData cw = (ColumnWeightData) col;
+					int weight = cw.weight;
+					int pixels = totalWeight == 0 ? 0 : weight * rest / totalWeight;
+					if (pixels < cw.minimumWidth) {
+						pixels = cw.minimumWidth;
+					}
+					totalDistributed += pixels;
+					widths[i] = pixels;
+				}
+			}
+			// distribute any remaining pixels to columns with weight
+			int diff = rest - totalDistributed;
+			for (int i = 0; diff > 0; ++i) {
+				if (i == size) {
+					i = 0;
+				}
+				ColumnLayoutData col = columns.get(i);
+				if (col instanceof ColumnWeightData) {
+					++widths[i];
+					--diff;
+				}
+			}
+		}
+		if (increase) {
+			table.setSize(area.width, area.height);
+		}
+		for (int i = 0; i < size; i++) {
+			tableColumns[i].setWidth(widths[i]);
+		}
+		if (!increase) {
+			table.setSize(area.width, area.height);
+		}
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/exception/DesignerException.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/exception/DesignerException.java
index 1923c1ae2..3e4d86e7d 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/exception/DesignerException.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/exception/DesignerException.java
@@ -22,65 +22,65 @@
  * @coverage core.util
  */
 public class DesignerException extends Error {
-  private static final long serialVersionUID = 0L;
-  private final int m_code;
-  private final String[] m_parameters;
-  private final Throwable m_cause;
-  private int m_sourcePosition = -1;
+	private static final long serialVersionUID = 0L;
+	private final int m_code;
+	private final String[] m_parameters;
+	private final Throwable m_cause;
+	private int m_sourcePosition = -1;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DesignerException(int code, String... parameters) {
-    this(code, null, parameters);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DesignerException(int code, String... parameters) {
+		this(code, null, parameters);
+	}
 
-  public DesignerException(int code, Throwable cause, String... parameters) {
-    super(cause);
-    m_code = code;
-    m_parameters = parameters;
-    m_cause = cause;
-  }
+	public DesignerException(int code, Throwable cause, String... parameters) {
+		super(cause);
+		m_code = code;
+		m_parameters = parameters;
+		m_cause = cause;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public int getCode() {
-    return m_code;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public int getCode() {
+		return m_code;
+	}
 
-  public String[] getParameters() {
-    return m_parameters;
-  }
+	public String[] getParameters() {
+		return m_parameters;
+	}
 
-  @Override
-  public String getMessage() {
-    String message = m_code + " (" + DesignerExceptionUtils.getExceptionTitle(m_code) + ").";
-    if (m_parameters.length != 0) {
-      message += " " + StringUtils.join(m_parameters, " ");
-    }
-    return message;
-  }
+	@Override
+	public String getMessage() {
+		String message = m_code + " (" + DesignerExceptionUtils.getExceptionTitle(m_code) + ").";
+		if (m_parameters.length != 0) {
+			message += " " + StringUtils.join(m_parameters, " ");
+		}
+		return message;
+	}
 
-  @Override
-  public Throwable getCause() {
-    return m_cause;
-  }
+	@Override
+	public Throwable getCause() {
+		return m_cause;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Position
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void setSourcePosition(int sourcePosition) {
-    m_sourcePosition = sourcePosition;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Position
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void setSourcePosition(int sourcePosition) {
+		m_sourcePosition = sourcePosition;
+	}
 
-  public int getSourcePosition() {
-    return m_sourcePosition;
-  }
+	public int getSourcePosition() {
+		return m_sourcePosition;
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/exception/DesignerExceptionUtils.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/exception/DesignerExceptionUtils.java
index fe3cddcc3..17a9db95d 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/exception/DesignerExceptionUtils.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/exception/DesignerExceptionUtils.java
@@ -65,511 +65,511 @@
  * @coverage core.util
  */
 public final class DesignerExceptionUtils {
-  /**
-   * @return the HTML for displaying given {@link Throwable}.
-   *
-   * @param message
-   *          the optional message (can be <code>null</code>).
-   * @param e
-   *          the {@link Throwable} to display.
-   */
-  public static String getExceptionHTML0(String message, Throwable e) {
-    String html = "";
-    if (message != null) {
-      html += "<H2>" + message + "</H2>";
-    }
-    // prepare root exception
-    Throwable rootException = getDesignerCause(e);
-    // prepare HTML text
-    if (rootException != null) {
-      // for DesignerException get description
-      if (rootException instanceof DesignerException) {
-        DesignerException designerException = (DesignerException) rootException;
-        String description = getErrorEntry(designerException).getDescription();
-        html += StringEscapeUtils.escapeHtml(description);
-      }
-      // add stack trace
-      {
-        html += Messages.DesignerExceptionUtils_stackTraceLabel;
-        html += "<pre>";
-        html += StringEscapeUtils.escapeHtml(ExceptionUtils.getStackTrace(rootException));
-        html += "</pre>";
-      }
-      // add full stack trace
-      {
-        html += Messages.DesignerExceptionUtils_fullStackTraceLabel;
-        html += "<pre>";
-        html += StringEscapeUtils.escapeHtml(ExceptionUtils.getStackTrace(e));
-        html += "</pre>";
-      }
-    } else {
-      html += "<pre>";
-      html += Messages.DesignerExceptionUtils_noExceptionLabel;
-      html += "</pre>";
-    }
-    return html;
-  }
-
-  /**
-   * @return the HTML for displaying given {@link Throwable} based on template html file.
-   *
-   * @param e
-   *          the {@link Throwable} to display.
-   */
-  public static String getExceptionHTML(Throwable e) {
-    ErrorEntryInfo errorDescription = getErrorEntry(e);
-    if (!BrowserComposite.browserAvailable(DesignerPlugin.getShell())) {
-      return getPlainTextDescription(errorDescription) + "\n" + ExceptionUtils.getStackTrace(e);
-    }
-    // prepare HTML template
-    String html;
-    InputStream htmlStream = null;
-    try {
-      htmlStream = DesignerPlugin.getFile("icons/actions/errors/errorTemplate.html");
-      html = IOUtils2.readString(htmlStream);
-    } catch (Throwable _e) {
-      DesignerPlugin.log(_e);
-      return getPlainTextDescription(errorDescription);
-    } finally {
-      IOUtils.closeQuietly(htmlStream);
-    }
-    // prepare color
-    Color color = IColorConstants.button;
-    String colorString = getColorWebString(color);
-    html = StringUtils.replace(html, "%bg_color%", colorString);
-    // prepare HTML
-    html = StringUtils.replace(html, "%error_message%", errorDescription.getTitle());
-    html = StringUtils.replace(html, "%error_description%", errorDescription.getDescription());
-    html = includeStackTrace(html, "%stack_trace_short%", getDesignerCause(e));
-    html = includeStackTrace(html, "%stack_trace_full%", e);
-    return html;
-  }
-
-  private static String includeStackTrace(String html, String searchString, Throwable e) {
-    String stackTrace = ExceptionUtils.getStackTrace(e);
-    String stackTraceEscaped = StringEscapeUtils.escapeHtml(stackTrace);
-    return StringUtils.replace(html, searchString, stackTraceEscaped);
-  }
-
-  /**
-   * @return the HTML for displaying given warning based on template HTML file.
-   */
-  public static String getWarningHTML(ErrorEntryInfo entry) {
-    if (!BrowserComposite.browserAvailable(DesignerPlugin.getShell())) {
-      return getPlainTextDescription(entry);
-    }
-    String html;
-    InputStream htmlStream = null;
-    try {
-      htmlStream = DesignerPlugin.getFile("icons/actions/errors/warningTemplate.html");
-      html = IOUtils2.readString(htmlStream);
-    } catch (Throwable _e) {
-      DesignerPlugin.log(_e);
-      return getPlainTextDescription(entry);
-    } finally {
-      IOUtils.closeQuietly(htmlStream);
-    }
-    // prepare color
-    Color color = IColorConstants.button;
-    String colorString = getColorWebString(color);
-    html = StringUtils.replace(html, "%bg_color%", colorString);
-    // apply entry
-    html = StringUtils.replace(html, "%error_description%", entry.getDescription());
-    return html;
-  }
-
-  /**
-   * Checks for alternative plain-text description and returns it. For other case strips html tags
-   * and returns plain-text from html-based description.
-   */
-  private static String getPlainTextDescription(ErrorEntryInfo errorEntry) {
-    if (!StringUtils.isEmpty(errorEntry.getAltDescription())) {
-      return errorEntry.getAltDescription();
-    } else {
-      // remove html tags if any
-      String description = errorEntry.getDescription();
-      description = StringUtilities.stripHtml(description);
-      // 20110509.Kosta: keep all characters for now
-      //description = StringUtils.replaceChars(description, "~`@#$%^&*()-=+[]\\{}|;':\",./<>?!", "");
-      return description;
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static Map<Throwable, Integer> m_exceptionPositions = new MapMaker().weakKeys().makeMap();
-
-  /**
-   * See {@link ExceptionUtils#getRootCause(Throwable)}, but returns {@link Throwable} itself if no
-   * causes.
-   */
-  @SuppressWarnings("unchecked")
-  public static Throwable getRootCause(Throwable throwable) {
-    List<Throwable> list = ExceptionUtils.getThrowableList(throwable);
-    return GenericsUtils.getLastOrNull(list);
-  }
-
-  /**
-   * @return the {@link Throwable} may be rewritten by {@link IExceptionRewriter}.
-   */
-  public static Throwable rewriteException(Throwable throwable) {
-    List<IExceptionRewriter> rewriters =
-        ExternalFactoriesHelper.getElementsInstances(
-            IExceptionRewriter.class,
-            "org.eclipse.wb.core.exceptions",
-            "rewriter");
-    for (IExceptionRewriter rewriter : rewriters) {
-      throwable = rewriter.rewrite(throwable);
-    }
-    return throwable;
-  }
-
-  /**
-   * @return the first {@link DesignerException} in causes list, excluding wrappers. If no
-   *         {@link DesignerException}, then initial/root {@link Throwable} returned.
-   */
-  public static Throwable getDesignerCause(Throwable throwable) {
-    // try to find DesignerException
-    for (Throwable e = throwable; e != null; e = e.getCause()) {
-      if (e instanceof DesignerException) {
-        return e;
-      }
-    }
-    // no DesignerException, use root cause
-    return getRootCause(throwable);
-  }
-
-  /**
-   * @return the first {@link DesignerException} in causes list, excluding wrappers. Always. If no
-   *         {@link DesignerException}, then {@link ClassCastException} will happen.
-   */
-  public static DesignerException getDesignerException(Throwable throwable) {
-    return (DesignerException) getDesignerCause(throwable);
-  }
-
-  /**
-   * Remembers the source position, associated with given {@link Throwable}.
-   */
-  public static void setSourcePosition(Throwable throwable, int position) {
-    m_exceptionPositions.put(throwable, position);
-  }
-
-  /**
-   * @return the source position, associated with given {@link Throwable}, may be -1, if no
-   *         position.
-   */
-  public static int getSourcePosition(Throwable throwable) {
-    Integer position = m_exceptionPositions.get(throwable);
-    if (position != null) {
-      return position;
-    }
-    return -1;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static Map<Integer, ErrorEntryInfo> m_codeToDescription;
-
-  public static boolean isWarning(Throwable throwable) {
-    Throwable rootException = getDesignerCause(throwable);
-    if (rootException instanceof DesignerException) {
-      DesignerException designerException = (DesignerException) rootException;
-      int code = designerException.getCode();
-      ErrorEntryInfo entry = getErrorEntry0(code);
-      return entry != null && entry.isWarning();
-    }
-    return false;
-  }
-
-  public static boolean isFatal(Throwable throwable) {
-    while (throwable != null) {
-      if (throwable instanceof FatalDesignerException) {
-        return true;
-      }
-      throwable = throwable.getCause();
-    }
-    return false;
-  }
-
-  /**
-   * @return <code>true</code> if given {@link Throwable} has given sequence on class/method names.
-   */
-  public static boolean hasTraceElementsSequence(Throwable e, String[][] expected) {
-    StackTraceElement[] elements = e.getStackTrace();
-    traceElements : for (int i = 0; i < elements.length; i++) {
-      for (int j = 0; j < expected.length; j++) {
-        if (i + j < elements.length) {
-          StackTraceElement element = elements[i + j];
-          String expectedClass = expected[j][0];
-          String expectedMethod = expected[j][1];
-          if (element.getClassName().equals(expectedClass)
-              && element.getMethodName().equals(expectedMethod)) {
-            continue;
-          }
-        }
-        continue traceElements;
-      }
-      return true;
-    }
-    return false;
-  }
-
-  /**
-   * @return the title that corresponds to the given exception code, may be some default, but not
-   *         <code>null</code>.
-   */
-  public static String getExceptionTitle(int exceptionCode) {
-    ErrorEntryInfo entry = getErrorEntry0(exceptionCode);
-    if (entry == null) {
-      return Messages.DesignerExceptionUtils_noDescriptionTitle2;
-    }
-    return entry.getTitle();
-  }
-
-  /**
-   * @return the error description entry for given {@link Throwable}.
-   */
-  public static ErrorEntryInfo getErrorEntry(Throwable throwable) {
-    Throwable rootException = getDesignerCause(throwable);
-    if (rootException instanceof DesignerException) {
-      DesignerException designerException = (DesignerException) rootException;
-      int code = designerException.getCode();
-      String[] parameters = designerException.getParameters();
-      return getErrorEntry(code, parameters);
-    } else {
-      return getUnexpectedErrorEntryInfo(throwable);
-    }
-  }
-
-  /**
-   * Create error entry for other exceptions which are not instance of {@link DesignerException}.
-   *
-   * @return the {@link ErrorEntryInfo} instance.
-   */
-  private static ErrorEntryInfo getUnexpectedErrorEntryInfo(Throwable throwable) {
-    String message = throwable.getMessage();
-    ErrorEntryInfo e = getErrorEntry(ICoreExceptionConstants.UNEXPECTED);
-    // append exception message
-    String desc = e.getDescription();
-    desc += message != null ? "<p>" + throwable.getClass().getName() + ": " + message + "</p>" : "";
-    // return updated
-    return new ErrorEntryInfo(e.getCode(), e.isWarning(), e.getTitle(), desc, e.getAltDescription());
-  }
-
-  public static ErrorEntryInfo getErrorEntry(int exceptionCode, String... parameters) {
-    // try to find existing entry
-    {
-      ErrorEntryInfo entry = getErrorEntry0(exceptionCode, parameters);
-      if (entry != null) {
-        return entry;
-      }
-    }
-    // not found, use default
-    {
-      String description =
-          MessageFormat.format(Messages.DesignerExceptionUtils_noDescriptionMessage, exceptionCode);
-      return new ErrorEntryInfo(exceptionCode,
-          false,
-          Messages.DesignerExceptionUtils_noDescriptionTitle,
-          description);
-    }
-  }
-
-  private static ErrorEntryInfo getErrorEntry0(int exceptionCode, String... parameters) {
-    // get error entry if any and prepare it.
-    ErrorEntryInfo errorEntryInfo = getErrorEntry0(exceptionCode);
-    if (errorEntryInfo != null) {
-      String description = errorEntryInfo.getDescription();
-      if (description != null) {
-        // replace {0}, {1}, etc with parameters
-        for (int i = 0; i < parameters.length; i++) {
-          String template = "{" + i + "}";
-          int index = description.indexOf(template);
-          if (index != -1) {
-            description = includeExceptionParameter(description, template, parameters[i]);
-          }
-        }
-        // prepared
-        return new ErrorEntryInfo(errorEntryInfo.getCode(),
-            errorEntryInfo.isWarning(),
-            errorEntryInfo.getTitle(),
-            description,
-            errorEntryInfo.getAltDescription());
-      }
-    }
-    // no description
-    return null;
-  }
-
-  private static ErrorEntryInfo getErrorEntry0(int exceptionCode) {
-    if (m_codeToDescription == null || EnvironmentUtils.DEVELOPER_HOST) {
-      fillErrorEntries();
-    }
-    return m_codeToDescription.get(exceptionCode);
-  }
-
-  private static String includeExceptionParameter(String html, String searchString, String message) {
-    String messageEscaped = StringEscapeUtils.escapeHtml(message);
-    return StringUtils.replace(html, searchString, messageEscaped);
-  }
-
-  /**
-   * Reads exception definitions (using extensions) and creates code->entry map for error entries.
-   */
-  private static void fillErrorEntries() {
-    m_codeToDescription = Maps.newTreeMap();
-    try {
-      List<IConfigurationElement> fileElements =
-          ExternalFactoriesHelper.getElements("org.eclipse.wb.core.exceptions", "file");
-      for (IConfigurationElement fileElement : fileElements) {
-        // parse single exceptions file
-        try {
-          Bundle fileBundle = ExternalFactoriesHelper.getExtensionBundle(fileElement);
-          String filePath = fileElement.getAttribute("path");
-          URL fileURL = fileBundle.getEntry(filePath);
-          //
-          final String xmlText = IOUtils2.readString(fileURL.openStream());
-          QParser.parse(new StringReader(xmlText), new QHandlerAdapter() {
-            private ErrorEntryInfo m_errorEntry;
-            private int m_code;
-            private boolean m_isWarning;
-            private String m_description;
-            private String m_altDescription;
-            private int m_descriptionStart;
-
-            @Override
-            public void startElement(int offset,
-                int length,
-                String tag,
-                Map<String, String> attributes,
-                List<QAttribute> attrList,
-                boolean closed) throws Exception {
-              if ("exception".equals(tag)) {
-                m_code = Integer.parseInt(attributes.get("id"));
-                m_isWarning = "true".equals(attributes.get("warning"));
-                m_description = attributes.get("title");
-                m_altDescription = applyBranding(attributes.get("alt"));
-                m_descriptionStart = xmlText.indexOf('>', offset) + 1;
-              }
-            }
-
-            @Override
-            public void endElement(int offset, int endOffset, String tag) throws Exception {
-              if ("exception".equals(tag)) {
-                // extract description
-                String description = xmlText.substring(m_descriptionStart, offset);
-                description = applyBranding(description);
-                // add entry
-                m_errorEntry =
-                    new ErrorEntryInfo(m_code,
-                        m_isWarning,
-                        m_description,
-                        description,
-                        m_altDescription);
-                m_codeToDescription.put(m_errorEntry.getCode(), m_errorEntry);
-              }
-            }
-
-            private String applyBranding(String description) {
-              if (description == null) {
-                return null;
-              }
-              String productNameTemplate = "{product_name}";
-              int index = description.indexOf(productNameTemplate);
-              if (index != -1) {
-                description =
-                    includeExceptionParameter(
-                        description,
-                        productNameTemplate,
-                        BrandingUtils.getBranding().getProductName());
-              }
-              return description;
-            }
-          });
-        } catch (Throwable ex) {
-        }
-      }
-    } catch (Throwable ex) {
-      DesignerPlugin.log(ex);
-    }
-  }
-
-  /**
-   * Clears cache for "org.eclipse.wb.core.exceptions" descriptions.
-   */
-  public static void flushErrorEntriesCache() {
-    m_codeToDescription = null;
-  }
-
-  /**
-   * Returns a string representation of {@link Color} suitable for web pages.
-   *
-   * @param color
-   *          the {@link Color} instance, not <code>null</code>.
-   * @return a string representation of {@link Color} suitable for web pages.
-   */
-  public static String getColorWebString(final Color color) {
-    String colorString = "#" + Integer.toHexString(color.getRed());
-    colorString += Integer.toHexString(color.getGreen());
-    colorString += Integer.toHexString(color.getBlue());
-    return colorString;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Screen shot of problem
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Creates screen shot of entire Eclipse shell.
-   *
-   * @return an image of entire Eclipse.
-   */
-  public static Image makeScreenshot() {
-    Shell shell = DesignerPlugin.getShell();
-    shell.redraw();
-    shell.update();
-    final Rectangle shellBounds = shell.getBounds();
-    final Display standardDisplay = DesignerPlugin.getStandardDisplay();
-    standardDisplay.update();
-    Image image = new Image(standardDisplay, shellBounds.width, shellBounds.height);
-    GC gc = new GC(standardDisplay);
-    gc.copyArea(image, shellBounds.x, shellBounds.y);
-    gc.dispose();
-    return image;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // External browser
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Open given url in external browser.
-   *
-   * @param url
-   *          the url string to open in external browser.
-   */
-  public static void openBrowser(String url) {
-    try {
-      IWorkbenchBrowserSupport support = PlatformUI.getWorkbench().getBrowserSupport();
-      IWebBrowser browserSupport = support.createBrowser("wbp.browser");
-      browserSupport.openURL(new URL(url));
-    } catch (Throwable e) {
-      // for every error copy url into clipboard and show message box.
-      Clipboard clipboard = new Clipboard(DesignerPlugin.getStandardDisplay());
-      clipboard.setContents(new String[]{url}, new Transfer[]{TextTransfer.getInstance()});
-      clipboard.dispose();
-      MessageDialog.openInformation(
-          DesignerPlugin.getShell(),
-          Messages.DesignerExceptionUtils_openUrlTitle,
-          MessageFormat.format(Messages.DesignerExceptionUtils_openUrlMessage, url));
-    }
-  }
+	/**
+	 * @return the HTML for displaying given {@link Throwable}.
+	 *
+	 * @param message
+	 *          the optional message (can be <code>null</code>).
+	 * @param e
+	 *          the {@link Throwable} to display.
+	 */
+	public static String getExceptionHTML0(String message, Throwable e) {
+		String html = "";
+		if (message != null) {
+			html += "<H2>" + message + "</H2>";
+		}
+		// prepare root exception
+		Throwable rootException = getDesignerCause(e);
+		// prepare HTML text
+		if (rootException != null) {
+			// for DesignerException get description
+			if (rootException instanceof DesignerException) {
+				DesignerException designerException = (DesignerException) rootException;
+				String description = getErrorEntry(designerException).getDescription();
+				html += StringEscapeUtils.escapeHtml(description);
+			}
+			// add stack trace
+			{
+				html += Messages.DesignerExceptionUtils_stackTraceLabel;
+				html += "<pre>";
+				html += StringEscapeUtils.escapeHtml(ExceptionUtils.getStackTrace(rootException));
+				html += "</pre>";
+			}
+			// add full stack trace
+			{
+				html += Messages.DesignerExceptionUtils_fullStackTraceLabel;
+				html += "<pre>";
+				html += StringEscapeUtils.escapeHtml(ExceptionUtils.getStackTrace(e));
+				html += "</pre>";
+			}
+		} else {
+			html += "<pre>";
+			html += Messages.DesignerExceptionUtils_noExceptionLabel;
+			html += "</pre>";
+		}
+		return html;
+	}
+
+	/**
+	 * @return the HTML for displaying given {@link Throwable} based on template html file.
+	 *
+	 * @param e
+	 *          the {@link Throwable} to display.
+	 */
+	public static String getExceptionHTML(Throwable e) {
+		ErrorEntryInfo errorDescription = getErrorEntry(e);
+		if (!BrowserComposite.browserAvailable(DesignerPlugin.getShell())) {
+			return getPlainTextDescription(errorDescription) + "\n" + ExceptionUtils.getStackTrace(e);
+		}
+		// prepare HTML template
+		String html;
+		InputStream htmlStream = null;
+		try {
+			htmlStream = DesignerPlugin.getFile("icons/actions/errors/errorTemplate.html");
+			html = IOUtils2.readString(htmlStream);
+		} catch (Throwable _e) {
+			DesignerPlugin.log(_e);
+			return getPlainTextDescription(errorDescription);
+		} finally {
+			IOUtils.closeQuietly(htmlStream);
+		}
+		// prepare color
+		Color color = IColorConstants.button;
+		String colorString = getColorWebString(color);
+		html = StringUtils.replace(html, "%bg_color%", colorString);
+		// prepare HTML
+		html = StringUtils.replace(html, "%error_message%", errorDescription.getTitle());
+		html = StringUtils.replace(html, "%error_description%", errorDescription.getDescription());
+		html = includeStackTrace(html, "%stack_trace_short%", getDesignerCause(e));
+		html = includeStackTrace(html, "%stack_trace_full%", e);
+		return html;
+	}
+
+	private static String includeStackTrace(String html, String searchString, Throwable e) {
+		String stackTrace = ExceptionUtils.getStackTrace(e);
+		String stackTraceEscaped = StringEscapeUtils.escapeHtml(stackTrace);
+		return StringUtils.replace(html, searchString, stackTraceEscaped);
+	}
+
+	/**
+	 * @return the HTML for displaying given warning based on template HTML file.
+	 */
+	public static String getWarningHTML(ErrorEntryInfo entry) {
+		if (!BrowserComposite.browserAvailable(DesignerPlugin.getShell())) {
+			return getPlainTextDescription(entry);
+		}
+		String html;
+		InputStream htmlStream = null;
+		try {
+			htmlStream = DesignerPlugin.getFile("icons/actions/errors/warningTemplate.html");
+			html = IOUtils2.readString(htmlStream);
+		} catch (Throwable _e) {
+			DesignerPlugin.log(_e);
+			return getPlainTextDescription(entry);
+		} finally {
+			IOUtils.closeQuietly(htmlStream);
+		}
+		// prepare color
+		Color color = IColorConstants.button;
+		String colorString = getColorWebString(color);
+		html = StringUtils.replace(html, "%bg_color%", colorString);
+		// apply entry
+		html = StringUtils.replace(html, "%error_description%", entry.getDescription());
+		return html;
+	}
+
+	/**
+	 * Checks for alternative plain-text description and returns it. For other case strips html tags
+	 * and returns plain-text from html-based description.
+	 */
+	private static String getPlainTextDescription(ErrorEntryInfo errorEntry) {
+		if (!StringUtils.isEmpty(errorEntry.getAltDescription())) {
+			return errorEntry.getAltDescription();
+		} else {
+			// remove html tags if any
+			String description = errorEntry.getDescription();
+			description = StringUtilities.stripHtml(description);
+			// 20110509.Kosta: keep all characters for now
+			//description = StringUtils.replaceChars(description, "~`@#$%^&*()-=+[]\\{}|;':\",./<>?!", "");
+			return description;
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static Map<Throwable, Integer> m_exceptionPositions = new MapMaker().weakKeys().makeMap();
+
+	/**
+	 * See {@link ExceptionUtils#getRootCause(Throwable)}, but returns {@link Throwable} itself if no
+	 * causes.
+	 */
+	@SuppressWarnings("unchecked")
+	public static Throwable getRootCause(Throwable throwable) {
+		List<Throwable> list = ExceptionUtils.getThrowableList(throwable);
+		return GenericsUtils.getLastOrNull(list);
+	}
+
+	/**
+	 * @return the {@link Throwable} may be rewritten by {@link IExceptionRewriter}.
+	 */
+	public static Throwable rewriteException(Throwable throwable) {
+		List<IExceptionRewriter> rewriters =
+				ExternalFactoriesHelper.getElementsInstances(
+						IExceptionRewriter.class,
+						"org.eclipse.wb.core.exceptions",
+						"rewriter");
+		for (IExceptionRewriter rewriter : rewriters) {
+			throwable = rewriter.rewrite(throwable);
+		}
+		return throwable;
+	}
+
+	/**
+	 * @return the first {@link DesignerException} in causes list, excluding wrappers. If no
+	 *         {@link DesignerException}, then initial/root {@link Throwable} returned.
+	 */
+	public static Throwable getDesignerCause(Throwable throwable) {
+		// try to find DesignerException
+		for (Throwable e = throwable; e != null; e = e.getCause()) {
+			if (e instanceof DesignerException) {
+				return e;
+			}
+		}
+		// no DesignerException, use root cause
+		return getRootCause(throwable);
+	}
+
+	/**
+	 * @return the first {@link DesignerException} in causes list, excluding wrappers. Always. If no
+	 *         {@link DesignerException}, then {@link ClassCastException} will happen.
+	 */
+	public static DesignerException getDesignerException(Throwable throwable) {
+		return (DesignerException) getDesignerCause(throwable);
+	}
+
+	/**
+	 * Remembers the source position, associated with given {@link Throwable}.
+	 */
+	public static void setSourcePosition(Throwable throwable, int position) {
+		m_exceptionPositions.put(throwable, position);
+	}
+
+	/**
+	 * @return the source position, associated with given {@link Throwable}, may be -1, if no
+	 *         position.
+	 */
+	public static int getSourcePosition(Throwable throwable) {
+		Integer position = m_exceptionPositions.get(throwable);
+		if (position != null) {
+			return position;
+		}
+		return -1;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static Map<Integer, ErrorEntryInfo> m_codeToDescription;
+
+	public static boolean isWarning(Throwable throwable) {
+		Throwable rootException = getDesignerCause(throwable);
+		if (rootException instanceof DesignerException) {
+			DesignerException designerException = (DesignerException) rootException;
+			int code = designerException.getCode();
+			ErrorEntryInfo entry = getErrorEntry0(code);
+			return entry != null && entry.isWarning();
+		}
+		return false;
+	}
+
+	public static boolean isFatal(Throwable throwable) {
+		while (throwable != null) {
+			if (throwable instanceof FatalDesignerException) {
+				return true;
+			}
+			throwable = throwable.getCause();
+		}
+		return false;
+	}
+
+	/**
+	 * @return <code>true</code> if given {@link Throwable} has given sequence on class/method names.
+	 */
+	public static boolean hasTraceElementsSequence(Throwable e, String[][] expected) {
+		StackTraceElement[] elements = e.getStackTrace();
+		traceElements : for (int i = 0; i < elements.length; i++) {
+			for (int j = 0; j < expected.length; j++) {
+				if (i + j < elements.length) {
+					StackTraceElement element = elements[i + j];
+					String expectedClass = expected[j][0];
+					String expectedMethod = expected[j][1];
+					if (element.getClassName().equals(expectedClass)
+							&& element.getMethodName().equals(expectedMethod)) {
+						continue;
+					}
+				}
+				continue traceElements;
+			}
+			return true;
+		}
+		return false;
+	}
+
+	/**
+	 * @return the title that corresponds to the given exception code, may be some default, but not
+	 *         <code>null</code>.
+	 */
+	public static String getExceptionTitle(int exceptionCode) {
+		ErrorEntryInfo entry = getErrorEntry0(exceptionCode);
+		if (entry == null) {
+			return Messages.DesignerExceptionUtils_noDescriptionTitle2;
+		}
+		return entry.getTitle();
+	}
+
+	/**
+	 * @return the error description entry for given {@link Throwable}.
+	 */
+	public static ErrorEntryInfo getErrorEntry(Throwable throwable) {
+		Throwable rootException = getDesignerCause(throwable);
+		if (rootException instanceof DesignerException) {
+			DesignerException designerException = (DesignerException) rootException;
+			int code = designerException.getCode();
+			String[] parameters = designerException.getParameters();
+			return getErrorEntry(code, parameters);
+		} else {
+			return getUnexpectedErrorEntryInfo(throwable);
+		}
+	}
+
+	/**
+	 * Create error entry for other exceptions which are not instance of {@link DesignerException}.
+	 *
+	 * @return the {@link ErrorEntryInfo} instance.
+	 */
+	private static ErrorEntryInfo getUnexpectedErrorEntryInfo(Throwable throwable) {
+		String message = throwable.getMessage();
+		ErrorEntryInfo e = getErrorEntry(ICoreExceptionConstants.UNEXPECTED);
+		// append exception message
+		String desc = e.getDescription();
+		desc += message != null ? "<p>" + throwable.getClass().getName() + ": " + message + "</p>" : "";
+		// return updated
+		return new ErrorEntryInfo(e.getCode(), e.isWarning(), e.getTitle(), desc, e.getAltDescription());
+	}
+
+	public static ErrorEntryInfo getErrorEntry(int exceptionCode, String... parameters) {
+		// try to find existing entry
+		{
+			ErrorEntryInfo entry = getErrorEntry0(exceptionCode, parameters);
+			if (entry != null) {
+				return entry;
+			}
+		}
+		// not found, use default
+		{
+			String description =
+					MessageFormat.format(Messages.DesignerExceptionUtils_noDescriptionMessage, exceptionCode);
+			return new ErrorEntryInfo(exceptionCode,
+					false,
+					Messages.DesignerExceptionUtils_noDescriptionTitle,
+					description);
+		}
+	}
+
+	private static ErrorEntryInfo getErrorEntry0(int exceptionCode, String... parameters) {
+		// get error entry if any and prepare it.
+		ErrorEntryInfo errorEntryInfo = getErrorEntry0(exceptionCode);
+		if (errorEntryInfo != null) {
+			String description = errorEntryInfo.getDescription();
+			if (description != null) {
+				// replace {0}, {1}, etc with parameters
+				for (int i = 0; i < parameters.length; i++) {
+					String template = "{" + i + "}";
+					int index = description.indexOf(template);
+					if (index != -1) {
+						description = includeExceptionParameter(description, template, parameters[i]);
+					}
+				}
+				// prepared
+				return new ErrorEntryInfo(errorEntryInfo.getCode(),
+						errorEntryInfo.isWarning(),
+						errorEntryInfo.getTitle(),
+						description,
+						errorEntryInfo.getAltDescription());
+			}
+		}
+		// no description
+		return null;
+	}
+
+	private static ErrorEntryInfo getErrorEntry0(int exceptionCode) {
+		if (m_codeToDescription == null || EnvironmentUtils.DEVELOPER_HOST) {
+			fillErrorEntries();
+		}
+		return m_codeToDescription.get(exceptionCode);
+	}
+
+	private static String includeExceptionParameter(String html, String searchString, String message) {
+		String messageEscaped = StringEscapeUtils.escapeHtml(message);
+		return StringUtils.replace(html, searchString, messageEscaped);
+	}
+
+	/**
+	 * Reads exception definitions (using extensions) and creates code->entry map for error entries.
+	 */
+	private static void fillErrorEntries() {
+		m_codeToDescription = Maps.newTreeMap();
+		try {
+			List<IConfigurationElement> fileElements =
+					ExternalFactoriesHelper.getElements("org.eclipse.wb.core.exceptions", "file");
+			for (IConfigurationElement fileElement : fileElements) {
+				// parse single exceptions file
+				try {
+					Bundle fileBundle = ExternalFactoriesHelper.getExtensionBundle(fileElement);
+					String filePath = fileElement.getAttribute("path");
+					URL fileURL = fileBundle.getEntry(filePath);
+					//
+					final String xmlText = IOUtils2.readString(fileURL.openStream());
+					QParser.parse(new StringReader(xmlText), new QHandlerAdapter() {
+						private ErrorEntryInfo m_errorEntry;
+						private int m_code;
+						private boolean m_isWarning;
+						private String m_description;
+						private String m_altDescription;
+						private int m_descriptionStart;
+
+						@Override
+						public void startElement(int offset,
+								int length,
+								String tag,
+								Map<String, String> attributes,
+								List<QAttribute> attrList,
+								boolean closed) throws Exception {
+							if ("exception".equals(tag)) {
+								m_code = Integer.parseInt(attributes.get("id"));
+								m_isWarning = "true".equals(attributes.get("warning"));
+								m_description = attributes.get("title");
+								m_altDescription = applyBranding(attributes.get("alt"));
+								m_descriptionStart = xmlText.indexOf('>', offset) + 1;
+							}
+						}
+
+						@Override
+						public void endElement(int offset, int endOffset, String tag) throws Exception {
+							if ("exception".equals(tag)) {
+								// extract description
+								String description = xmlText.substring(m_descriptionStart, offset);
+								description = applyBranding(description);
+								// add entry
+								m_errorEntry =
+										new ErrorEntryInfo(m_code,
+												m_isWarning,
+												m_description,
+												description,
+												m_altDescription);
+								m_codeToDescription.put(m_errorEntry.getCode(), m_errorEntry);
+							}
+						}
+
+						private String applyBranding(String description) {
+							if (description == null) {
+								return null;
+							}
+							String productNameTemplate = "{product_name}";
+							int index = description.indexOf(productNameTemplate);
+							if (index != -1) {
+								description =
+										includeExceptionParameter(
+												description,
+												productNameTemplate,
+												BrandingUtils.getBranding().getProductName());
+							}
+							return description;
+						}
+					});
+				} catch (Throwable ex) {
+				}
+			}
+		} catch (Throwable ex) {
+			DesignerPlugin.log(ex);
+		}
+	}
+
+	/**
+	 * Clears cache for "org.eclipse.wb.core.exceptions" descriptions.
+	 */
+	public static void flushErrorEntriesCache() {
+		m_codeToDescription = null;
+	}
+
+	/**
+	 * Returns a string representation of {@link Color} suitable for web pages.
+	 *
+	 * @param color
+	 *          the {@link Color} instance, not <code>null</code>.
+	 * @return a string representation of {@link Color} suitable for web pages.
+	 */
+	public static String getColorWebString(final Color color) {
+		String colorString = "#" + Integer.toHexString(color.getRed());
+		colorString += Integer.toHexString(color.getGreen());
+		colorString += Integer.toHexString(color.getBlue());
+		return colorString;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Screen shot of problem
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Creates screen shot of entire Eclipse shell.
+	 *
+	 * @return an image of entire Eclipse.
+	 */
+	public static Image makeScreenshot() {
+		Shell shell = DesignerPlugin.getShell();
+		shell.redraw();
+		shell.update();
+		final Rectangle shellBounds = shell.getBounds();
+		final Display standardDisplay = DesignerPlugin.getStandardDisplay();
+		standardDisplay.update();
+		Image image = new Image(standardDisplay, shellBounds.width, shellBounds.height);
+		GC gc = new GC(standardDisplay);
+		gc.copyArea(image, shellBounds.x, shellBounds.y);
+		gc.dispose();
+		return image;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// External browser
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Open given url in external browser.
+	 *
+	 * @param url
+	 *          the url string to open in external browser.
+	 */
+	public static void openBrowser(String url) {
+		try {
+			IWorkbenchBrowserSupport support = PlatformUI.getWorkbench().getBrowserSupport();
+			IWebBrowser browserSupport = support.createBrowser("wbp.browser");
+			browserSupport.openURL(new URL(url));
+		} catch (Throwable e) {
+			// for every error copy url into clipboard and show message box.
+			Clipboard clipboard = new Clipboard(DesignerPlugin.getStandardDisplay());
+			clipboard.setContents(new String[]{url}, new Transfer[]{TextTransfer.getInstance()});
+			clipboard.dispose();
+			MessageDialog.openInformation(
+					DesignerPlugin.getShell(),
+					Messages.DesignerExceptionUtils_openUrlTitle,
+					MessageFormat.format(Messages.DesignerExceptionUtils_openUrlMessage, url));
+		}
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/exception/FatalDesignerException.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/exception/FatalDesignerException.java
index 94e094f98..4143989c7 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/exception/FatalDesignerException.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/exception/FatalDesignerException.java
@@ -17,18 +17,18 @@
  * @coverage core.util
  */
 public class FatalDesignerException extends DesignerException {
-  private static final long serialVersionUID = 0L;
+	private static final long serialVersionUID = 0L;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FatalDesignerException(int code, String... parameters) {
-    super(code, parameters);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FatalDesignerException(int code, String... parameters) {
+		super(code, parameters);
+	}
 
-  public FatalDesignerException(int code, Throwable cause, String... parameters) {
-    super(code, cause, parameters);
-  }
+	public FatalDesignerException(int code, Throwable cause, String... parameters) {
+		super(code, cause, parameters);
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/exception/ICoreExceptionConstants.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/exception/ICoreExceptionConstants.java
index 396523232..55a7d0d21 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/exception/ICoreExceptionConstants.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/exception/ICoreExceptionConstants.java
@@ -17,54 +17,54 @@
  * @coverage core.util
  */
 public interface ICoreExceptionConstants {
-  int UNEXPECTED = 1;
-  int INCOMPLETE_PRODUCT = 2;
-  int FUTURE = 99;
-  //
-  int PARSER_NO_ROOT_METHODS = 100;
-  int PARSER_NO_ROOT_WHEN_COMPILATION_ERRORS = 101;
-  int PARSER_WARN_IGNORE_METHOD_MULTIPLE_INOCATIONS = 102;
-  int PARSER_NO_TOOLKIT = 103;
-  int PARSER_WRONG_NON_VISUAL_COMMENT = 104;
-  int PARSER_FACTORY_NOT_SUPPORTED = 105;
-  int PARSER_NO_PRIMARY_TYPE = 106;
-  int PARSER_DOUBLE_ASSOCIATION = 107;
-  int PARSER_JAVA_VERSION = 108;
-  int PARSER_NO_SUPER_CLASS = 109;
-  int PARSER_NO_TYPE_DECLARATION = 110;
-  int PARSER_NOT_GUI = 111;
-  //
-  int AST_EDITOR_REPLACE = 201;
-  int AST_EDITOR_ASSIGNMENT = 202;
-  int AST_NOT_VARIABLE = 203;
-  int AST_NO_TYPE_BINDING = 204;
-  int AST_PARSE_ERROR = 205;
-  int NO_PLUGIN = 206;
-  int GEN_NO_TYPE_BINDING = 207;
-  int GEN_NO_CONSTRUCTOR_BINDING = 208;
-  //
-  int EVAL_UNKNOWN_EXPRESSION_TYPE = 300;
-  //int EVAL_UNKNOWN_OPERATOR = 301;
-  //int EVAL_NO_METHOD_FOUND = 302;
-  int EVAL_NO_SIMPLE_NAME_FOUND = 303;
-  int EVAL_NO_METHOD_INVOCATION = 304;
-  int EVAL_SINGLE_METHOD_INVOCATION_EXPECTED = 305;
-  int EVAL_LOCAL_METHOD_INVOCATION = 306;
-  int EVAL_CONSTRUCTOR = 307;
-  int EVAL_METHOD = 308;
-  int EVAL_SUPER_METHOD = 309;
-  int EVAL_NON_PUBLIC_CONSTRUCTOR = 311;
-  int EVAL_NULL_INVOCATION_EXPRESSION = 312;
-  int EVAL_BYTEBUDDY = 313;
-  int EVAL_NO_CONSTRUCTOR = 314;
-  int EVAL_ANONYMOUS = 315;
-  //int EVAL_UNSUPPORTED_NULL = 306;
-  //int EVAL_THIS_ARGUMENT_CAN_NOT_PARSE = 307;
-  //
-  int EXECUTION_FLOW_TOO_MANY_CONSTRUCTORS = 400;
-  //
-  int DESCRIPTION_NO_DESCRIPTIONS = 500;
-  int DESCRIPTION_EDITOR_STATIC_FIELD = 501;
-  int DESCRIPTION_LOAD_ERROR = 502;
-  int DESCRIPTION_NO_TOOLKIT = 503;
+	int UNEXPECTED = 1;
+	int INCOMPLETE_PRODUCT = 2;
+	int FUTURE = 99;
+	//
+	int PARSER_NO_ROOT_METHODS = 100;
+	int PARSER_NO_ROOT_WHEN_COMPILATION_ERRORS = 101;
+	int PARSER_WARN_IGNORE_METHOD_MULTIPLE_INOCATIONS = 102;
+	int PARSER_NO_TOOLKIT = 103;
+	int PARSER_WRONG_NON_VISUAL_COMMENT = 104;
+	int PARSER_FACTORY_NOT_SUPPORTED = 105;
+	int PARSER_NO_PRIMARY_TYPE = 106;
+	int PARSER_DOUBLE_ASSOCIATION = 107;
+	int PARSER_JAVA_VERSION = 108;
+	int PARSER_NO_SUPER_CLASS = 109;
+	int PARSER_NO_TYPE_DECLARATION = 110;
+	int PARSER_NOT_GUI = 111;
+	//
+	int AST_EDITOR_REPLACE = 201;
+	int AST_EDITOR_ASSIGNMENT = 202;
+	int AST_NOT_VARIABLE = 203;
+	int AST_NO_TYPE_BINDING = 204;
+	int AST_PARSE_ERROR = 205;
+	int NO_PLUGIN = 206;
+	int GEN_NO_TYPE_BINDING = 207;
+	int GEN_NO_CONSTRUCTOR_BINDING = 208;
+	//
+	int EVAL_UNKNOWN_EXPRESSION_TYPE = 300;
+	//int EVAL_UNKNOWN_OPERATOR = 301;
+	//int EVAL_NO_METHOD_FOUND = 302;
+	int EVAL_NO_SIMPLE_NAME_FOUND = 303;
+	int EVAL_NO_METHOD_INVOCATION = 304;
+	int EVAL_SINGLE_METHOD_INVOCATION_EXPECTED = 305;
+	int EVAL_LOCAL_METHOD_INVOCATION = 306;
+	int EVAL_CONSTRUCTOR = 307;
+	int EVAL_METHOD = 308;
+	int EVAL_SUPER_METHOD = 309;
+	int EVAL_NON_PUBLIC_CONSTRUCTOR = 311;
+	int EVAL_NULL_INVOCATION_EXPRESSION = 312;
+	int EVAL_BYTEBUDDY = 313;
+	int EVAL_NO_CONSTRUCTOR = 314;
+	int EVAL_ANONYMOUS = 315;
+	//int EVAL_UNSUPPORTED_NULL = 306;
+	//int EVAL_THIS_ARGUMENT_CAN_NOT_PARSE = 307;
+	//
+	int EXECUTION_FLOW_TOO_MANY_CONSTRUCTORS = 400;
+	//
+	int DESCRIPTION_NO_DESCRIPTIONS = 500;
+	int DESCRIPTION_EDITOR_STATIC_FIELD = 501;
+	int DESCRIPTION_LOAD_ERROR = 502;
+	int DESCRIPTION_NO_TOOLKIT = 503;
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/execution/ExecutionUtils.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/execution/ExecutionUtils.java
index 8775f184c..1207fce86 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/execution/ExecutionUtils.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/execution/ExecutionUtils.java
@@ -26,345 +26,345 @@
  * @coverage core.util
  */
 public class ExecutionUtils {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private ExecutionUtils() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private ExecutionUtils() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Sleep
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sleeps given number of milliseconds, ignoring exceptions.
-   */
-  public static void sleep(int millis) {
-    long end = System.currentTimeMillis() + millis;
-    do {
-      final long leftMillis = end - System.currentTimeMillis();
-      if (leftMillis >= 0) {
-        runIgnore(new RunnableEx() {
-          @Override
-          public void run() throws Exception {
-            Thread.sleep(leftMillis);
-          }
-        });
-      }
-    } while (System.currentTimeMillis() < end);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Sleep
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sleeps given number of milliseconds, ignoring exceptions.
+	 */
+	public static void sleep(int millis) {
+		long end = System.currentTimeMillis() + millis;
+		do {
+			final long leftMillis = end - System.currentTimeMillis();
+			if (leftMillis >= 0) {
+				runIgnore(new RunnableEx() {
+					@Override
+					public void run() throws Exception {
+						Thread.sleep(leftMillis);
+					}
+				});
+			}
+		} while (System.currentTimeMillis() < end);
+	}
 
-  /**
-   * Waits given number of milliseconds and runs events loop every 1 millisecond. At least one
-   * events loop will be executed. If current thread is not UI thread, then this method works just
-   * as {@link #sleep(int)}.
-   */
-  public static void waitEventLoop(int millis) {
-    Display display = Display.getCurrent();
-    if (display != null) {
-      long nanos = millis * 1000000L;
-      long start = System.nanoTime();
-      do {
-        sleep(0);
-        while (display.readAndDispatch()) {
-          // do nothing
-        }
-      } while (System.nanoTime() - start < nanos);
-    } else {
-      sleep(millis);
-    }
-  }
+	/**
+	 * Waits given number of milliseconds and runs events loop every 1 millisecond. At least one
+	 * events loop will be executed. If current thread is not UI thread, then this method works just
+	 * as {@link #sleep(int)}.
+	 */
+	public static void waitEventLoop(int millis) {
+		Display display = Display.getCurrent();
+		if (display != null) {
+			long nanos = millis * 1000000L;
+			long start = System.nanoTime();
+			do {
+				sleep(0);
+				while (display.readAndDispatch()) {
+					// do nothing
+				}
+			} while (System.nanoTime() - start < nanos);
+		} else {
+			sleep(millis);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // void
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Runs given {@link RunnableEx} and ignores exceptions.
-   *
-   * @return <code>true</code> if execution was finished without exception.
-   */
-  public static boolean runIgnore(RunnableEx runnable) {
-    try {
-      runnable.run();
-      return true;
-    } catch (Throwable e) {
-      return false;
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// void
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Runs given {@link RunnableEx} and ignores exceptions.
+	 *
+	 * @return <code>true</code> if execution was finished without exception.
+	 */
+	public static boolean runIgnore(RunnableEx runnable) {
+		try {
+			runnable.run();
+			return true;
+		} catch (Throwable e) {
+			return false;
+		}
+	}
 
-  /**
-   * Runs given {@link RunnableEx} and logs exceptions using {@link DesignerPlugin#log(Throwable)}.
-   *
-   * @return <code>true</code> if execution was finished without exception.
-   */
-  public static boolean runLog(RunnableEx runnable) {
-    try {
-      runnable.run();
-      return true;
-    } catch (Throwable e) {
-      DesignerPlugin.log(e);
-      return false;
-    }
-  }
+	/**
+	 * Runs given {@link RunnableEx} and logs exceptions using {@link DesignerPlugin#log(Throwable)}.
+	 *
+	 * @return <code>true</code> if execution was finished without exception.
+	 */
+	public static boolean runLog(RunnableEx runnable) {
+		try {
+			runnable.run();
+			return true;
+		} catch (Throwable e) {
+			DesignerPlugin.log(e);
+			return false;
+		}
+	}
 
-  /**
-   * Runs given {@link RunnableEx} and re-throws exceptions using {@link RuntimeException}.
-   */
-  public static void runRethrow(RunnableEx runnable) {
-    try {
-      runnable.run();
-    } catch (Throwable e) {
-      throw ReflectionUtils.propagate(e);
-    }
-  }
+	/**
+	 * Runs given {@link RunnableEx} and re-throws exceptions using {@link RuntimeException}.
+	 */
+	public static void runRethrow(RunnableEx runnable) {
+		try {
+			runnable.run();
+		} catch (Throwable e) {
+			throw ReflectionUtils.propagate(e);
+		}
+	}
 
-  /**
-   * Runs given {@link RunnableEx} and re-throws exceptions using {@link RuntimeException}.
-   */
-  public static void runRethrow(RunnableEx runnable, String format, Object... args) {
-    try {
-      runnable.run();
-    } catch (Throwable e) {
-      String message = String.format(format, args);
-      throw new RuntimeException(message, e);
-    }
-  }
+	/**
+	 * Runs given {@link RunnableEx} and re-throws exceptions using {@link RuntimeException}.
+	 */
+	public static void runRethrow(RunnableEx runnable, String format, Object... args) {
+		try {
+			runnable.run();
+		} catch (Throwable e) {
+			String message = String.format(format, args);
+			throw new RuntimeException(message, e);
+		}
+	}
 
-  /**
-   * Ensures that {@link Beans#isDesignTime()} returns <code>true</code> and runs given
-   * {@link RunnableEx}.
-   */
-  public static void runDesignTime(RunnableEx runnable) throws Exception {
-    boolean old_designTime = Beans.isDesignTime();
-    try {
-      Beans.setDesignTime(true);
-      runnable.run();
-    } finally {
-      Beans.setDesignTime(old_designTime);
-    }
-  }
+	/**
+	 * Ensures that {@link Beans#isDesignTime()} returns <code>true</code> and runs given
+	 * {@link RunnableEx}.
+	 */
+	public static void runDesignTime(RunnableEx runnable) throws Exception {
+		boolean old_designTime = Beans.isDesignTime();
+		try {
+			Beans.setDesignTime(true);
+			runnable.run();
+		} finally {
+			Beans.setDesignTime(old_designTime);
+		}
+	}
 
-  /**
-   * Ensures that {@link Beans#isDesignTime()} returns <code>true</code> and runs given
-   * {@link RunnableEx}.
-   */
-  public static <T> T runDesignTime(RunnableObjectEx<T> runnable) throws Exception {
-    boolean old_designTime = Beans.isDesignTime();
-    try {
-      Beans.setDesignTime(true);
-      return runnable.runObject();
-    } finally {
-      Beans.setDesignTime(old_designTime);
-    }
-  }
+	/**
+	 * Ensures that {@link Beans#isDesignTime()} returns <code>true</code> and runs given
+	 * {@link RunnableEx}.
+	 */
+	public static <T> T runDesignTime(RunnableObjectEx<T> runnable) throws Exception {
+		boolean old_designTime = Beans.isDesignTime();
+		try {
+			Beans.setDesignTime(true);
+			return runnable.runObject();
+		} finally {
+			Beans.setDesignTime(old_designTime);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // UI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Runs given {@link RunnableEx} inside of UI thread, using {@link Display#syncExec(Runnable)}.
-   *
-   * @return <code>true</code> if {@link RunnableEx} was executed without any {@link Exception}.
-   */
-  public static boolean runLogUI(final RunnableEx runnable) {
-    final boolean[] success = new boolean[1];
-    Display.getDefault().syncExec(new Runnable() {
-      @Override
-      public void run() {
-        success[0] = ExecutionUtils.runLog(runnable);
-      }
-    });
-    return success[0];
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// UI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Runs given {@link RunnableEx} inside of UI thread, using {@link Display#syncExec(Runnable)}.
+	 *
+	 * @return <code>true</code> if {@link RunnableEx} was executed without any {@link Exception}.
+	 */
+	public static boolean runLogUI(final RunnableEx runnable) {
+		final boolean[] success = new boolean[1];
+		Display.getDefault().syncExec(new Runnable() {
+			@Override
+			public void run() {
+				success[0] = ExecutionUtils.runLog(runnable);
+			}
+		});
+		return success[0];
+	}
 
-  /**
-   * Runs given {@link RunnableEx} inside of UI thread, using {@link Display#syncExec(Runnable)}.
-   */
-  public static void runRethrowUI(final RunnableEx runnable) {
-    Display.getDefault().syncExec(new Runnable() {
-      @Override
-      public void run() {
-        ExecutionUtils.runRethrow(runnable);
-      }
-    });
-  }
+	/**
+	 * Runs given {@link RunnableEx} inside of UI thread, using {@link Display#syncExec(Runnable)}.
+	 */
+	public static void runRethrowUI(final RunnableEx runnable) {
+		Display.getDefault().syncExec(new Runnable() {
+			@Override
+			public void run() {
+				ExecutionUtils.runRethrow(runnable);
+			}
+		});
+	}
 
-  /**
-   * Runs given {@link RunnableEx} within UI thread using {@link Display#asyncExec(Runnable)}. Logs
-   * a {@link Throwable} which may occur.
-   */
-  public static void runAsync(final RunnableEx runnable) {
-    Display.getDefault().asyncExec(new Runnable() {
-      @Override
-      public void run() {
-        ExecutionUtils.runLog(runnable);
-      }
-    });
-  }
+	/**
+	 * Runs given {@link RunnableEx} within UI thread using {@link Display#asyncExec(Runnable)}. Logs
+	 * a {@link Throwable} which may occur.
+	 */
+	public static void runAsync(final RunnableEx runnable) {
+		Display.getDefault().asyncExec(new Runnable() {
+			@Override
+			public void run() {
+				ExecutionUtils.runLog(runnable);
+			}
+		});
+	}
 
-  /**
-   * Runs given {@link RunnableEx} inside of UI thread, using {@link Display#syncExec(Runnable)}.
-   */
-  @SuppressWarnings("unchecked")
-  public static <T> T runObjectUI(final RunnableObjectEx<T> runnable) {
-    final Object[] result = new Object[1];
-    runRethrowUI(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        result[0] = runObject(runnable);
-      }
-    });
-    return (T) result[0];
-  }
+	/**
+	 * Runs given {@link RunnableEx} inside of UI thread, using {@link Display#syncExec(Runnable)}.
+	 */
+	@SuppressWarnings("unchecked")
+	public static <T> T runObjectUI(final RunnableObjectEx<T> runnable) {
+		final Object[] result = new Object[1];
+		runRethrowUI(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				result[0] = runObject(runnable);
+			}
+		});
+		return (T) result[0];
+	}
 
-  /**
-   * Runs given {@link RunnableEx} as {@link #runLog(RunnableEx)}, but using
-   * {@link Display#asyncExec(Runnable)}.
-   */
-  public static void runLogLater(final RunnableEx runnable) {
-    Display.getDefault().asyncExec(new Runnable() {
-      @Override
-      public void run() {
-        ExecutionUtils.runLog(runnable);
-      }
-    });
-  }
+	/**
+	 * Runs given {@link RunnableEx} as {@link #runLog(RunnableEx)}, but using
+	 * {@link Display#asyncExec(Runnable)}.
+	 */
+	public static void runLogLater(final RunnableEx runnable) {
+		Display.getDefault().asyncExec(new Runnable() {
+			@Override
+			public void run() {
+				ExecutionUtils.runLog(runnable);
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Runs given {@link RunnableEx} and re-throws exceptions using {@link RuntimeException}.
-   *
-   * @return the {@link Object} returned by {@link RunnableEx#run()}.
-   */
-  public static <T> T runObject(RunnableObjectEx<T> runnable) {
-    try {
-      return runnable.runObject();
-    } catch (Throwable e) {
-      throw ReflectionUtils.propagate(e);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Runs given {@link RunnableEx} and re-throws exceptions using {@link RuntimeException}.
+	 *
+	 * @return the {@link Object} returned by {@link RunnableEx#run()}.
+	 */
+	public static <T> T runObject(RunnableObjectEx<T> runnable) {
+		try {
+			return runnable.runObject();
+		} catch (Throwable e) {
+			throw ReflectionUtils.propagate(e);
+		}
+	}
 
-  /**
-   * Runs given {@link RunnableEx} and re-throws exceptions using {@link RuntimeException}.
-   *
-   * @return the {@link Object} returned by {@link RunnableObjectEx#run()}.
-   */
-  @SuppressWarnings("unchecked")
-  public static <T> T runObject(ObjectInfo object, final RunnableObjectEx<T> runnable) {
-    final Object[] result = {null};
-    run(object, new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        result[0] = runnable.runObject();
-      }
-    });
-    return (T) result[0];
-  }
+	/**
+	 * Runs given {@link RunnableEx} and re-throws exceptions using {@link RuntimeException}.
+	 *
+	 * @return the {@link Object} returned by {@link RunnableObjectEx#run()}.
+	 */
+	@SuppressWarnings("unchecked")
+	public static <T> T runObject(ObjectInfo object, final RunnableObjectEx<T> runnable) {
+		final Object[] result = {null};
+		run(object, new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				result[0] = runnable.runObject();
+			}
+		});
+		return (T) result[0];
+	}
 
-  /**
-   * Runs given {@link RunnableEx} and re-throws exceptions using {@link RuntimeException}.
-   *
-   * @return the {@link Object} returned by {@link RunnableEx#run()}.
-   */
-  public static <T> T runObject(RunnableObjectEx<T> runnable, String format, Object... args) {
-    try {
-      return runnable.runObject();
-    } catch (Throwable e) {
-      String message = String.format(format, args);
-      throw new Error(message, e);
-    }
-  }
+	/**
+	 * Runs given {@link RunnableEx} and re-throws exceptions using {@link RuntimeException}.
+	 *
+	 * @return the {@link Object} returned by {@link RunnableEx#run()}.
+	 */
+	public static <T> T runObject(RunnableObjectEx<T> runnable, String format, Object... args) {
+		try {
+			return runnable.runObject();
+		} catch (Throwable e) {
+			String message = String.format(format, args);
+			throw new Error(message, e);
+		}
+	}
 
-  /**
-   * Runs given {@link RunnableEx} and ignores exceptions.
-   *
-   * @return the {@link Object} returned by {@link RunnableEx#run()} or <code>defaultValue</code> if
-   *         exception happened.
-   */
-  public static <T> T runObjectIgnore(RunnableObjectEx<T> runnable, T defaultValue) {
-    try {
-      return runnable.runObject();
-    } catch (Throwable e) {
-      return defaultValue;
-    }
-  }
+	/**
+	 * Runs given {@link RunnableEx} and ignores exceptions.
+	 *
+	 * @return the {@link Object} returned by {@link RunnableEx#run()} or <code>defaultValue</code> if
+	 *         exception happened.
+	 */
+	public static <T> T runObjectIgnore(RunnableObjectEx<T> runnable, T defaultValue) {
+		try {
+			return runnable.runObject();
+		} catch (Throwable e) {
+			return defaultValue;
+		}
+	}
 
-  /**
-   * Runs given {@link RunnableEx} and logs exceptions using {@link DesignerPlugin#log(Throwable)}.
-   *
-   * @return the {@link Object} returned by {@link RunnableEx#run()} or <code>defaultValue</code> if
-   *         exception was logged.
-   */
-  public static <T> T runObjectLog(RunnableObjectEx<T> runnable, T defaultValue) {
-    try {
-      return runnable.runObject();
-    } catch (Throwable e) {
-      DesignerPlugin.log(e);
-      return defaultValue;
-    }
-  }
+	/**
+	 * Runs given {@link RunnableEx} and logs exceptions using {@link DesignerPlugin#log(Throwable)}.
+	 *
+	 * @return the {@link Object} returned by {@link RunnableEx#run()} or <code>defaultValue</code> if
+	 *         exception was logged.
+	 */
+	public static <T> T runObjectLog(RunnableObjectEx<T> runnable, T defaultValue) {
+		try {
+			return runnable.runObject();
+		} catch (Throwable e) {
+			DesignerPlugin.log(e);
+			return defaultValue;
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ObjectInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Runs given {@link RunnableEx} inside of edit operation.
-   *
-   * @return <code>true</code> if execution was finished without exception.
-   */
-  public static boolean run(ObjectInfo objectInfo, RunnableEx runnable) {
-    try {
-      objectInfo.startEdit();
-      runnable.run();
-      objectInfo.endEdit();
-      return true;
-    } catch (Throwable e) {
-      IDesignPageSite site = IDesignPageSite.Helper.getSite(objectInfo);
-      if (site != null) {
-        site.handleException(e);
-        return false;
-      } else {
-        throw ReflectionUtils.propagate(e);
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ObjectInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Runs given {@link RunnableEx} inside of edit operation.
+	 *
+	 * @return <code>true</code> if execution was finished without exception.
+	 */
+	public static boolean run(ObjectInfo objectInfo, RunnableEx runnable) {
+		try {
+			objectInfo.startEdit();
+			runnable.run();
+			objectInfo.endEdit();
+			return true;
+		} catch (Throwable e) {
+			IDesignPageSite site = IDesignPageSite.Helper.getSite(objectInfo);
+			if (site != null) {
+				site.handleException(e);
+				return false;
+			} else {
+				throw ReflectionUtils.propagate(e);
+			}
+		}
+	}
 
-  /**
-   * Performs NOOP edit operation, so just {@link ObjectInfo#refresh()} if there are no enclosing
-   * edit operation.
-   */
-  public static void refresh(ObjectInfo objectInfo) {
-    run(objectInfo, new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        // do nothing, we need just refresh
-      }
-    });
-  }
+	/**
+	 * Performs NOOP edit operation, so just {@link ObjectInfo#refresh()} if there are no enclosing
+	 * edit operation.
+	 */
+	public static void refresh(ObjectInfo objectInfo) {
+		run(objectInfo, new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				// do nothing, we need just refresh
+			}
+		});
+	}
 
-  /**
-   * Runs given {@link RunnableEx} inside of edit operation, using
-   * {@link Display#asyncExec(Runnable)}.
-   */
-  public static void runLater(final ObjectInfo objectInfo, final RunnableEx runnable) {
-    Display.getDefault().asyncExec(new Runnable() {
-      @Override
-      public void run() {
-        ExecutionUtils.run(objectInfo, runnable);
-      }
-    });
-  }
+	/**
+	 * Runs given {@link RunnableEx} inside of edit operation, using
+	 * {@link Display#asyncExec(Runnable)}.
+	 */
+	public static void runLater(final ObjectInfo objectInfo, final RunnableEx runnable) {
+		Display.getDefault().asyncExec(new Runnable() {
+			@Override
+			public void run() {
+				ExecutionUtils.run(objectInfo, runnable);
+			}
+		});
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/execution/NoOpProgressMonitor.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/execution/NoOpProgressMonitor.java
index 1f0709d61..e2880ea64 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/execution/NoOpProgressMonitor.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/execution/NoOpProgressMonitor.java
@@ -19,54 +19,54 @@
  * @coverage core.util
  */
 public final class NoOpProgressMonitor implements IProgressMonitor {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Task
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void beginTask(String name, int totalWork) {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Task
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void beginTask(String name, int totalWork) {
+	}
 
-  @Override
-  public void done() {
-  }
+	@Override
+	public void done() {
+	}
 
-  @Override
-  public void setTaskName(String name) {
-  }
+	@Override
+	public void setTaskName(String name) {
+	}
 
-  @Override
-  public void subTask(String name) {
-  }
+	@Override
+	public void subTask(String name) {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Canceled
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private boolean m_canceled;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Canceled
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private boolean m_canceled;
 
-  @Override
-  public boolean isCanceled() {
-    return m_canceled;
-  }
+	@Override
+	public boolean isCanceled() {
+		return m_canceled;
+	}
 
-  @Override
-  public void setCanceled(boolean value) {
-    m_canceled = value;
-  }
+	@Override
+	public void setCanceled(boolean value) {
+		m_canceled = value;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Worked
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void internalWorked(double work) {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Worked
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void internalWorked(double work) {
+	}
 
-  @Override
-  public void worked(int work) {
-  }
+	@Override
+	public void worked(int work) {
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/execution/RunnableEx.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/execution/RunnableEx.java
index e9dbec803..6aa96c9ba 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/execution/RunnableEx.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/execution/RunnableEx.java
@@ -17,8 +17,8 @@
  * @coverage core.util
  */
 public interface RunnableEx {
-  /**
-   * Executes operation that can cause {@link Exception}.
-   */
-  void run() throws Exception;
+	/**
+	 * Executes operation that can cause {@link Exception}.
+	 */
+	void run() throws Exception;
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/execution/RunnableObjectEx.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/execution/RunnableObjectEx.java
index 08fcb2eed..ee444d1f6 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/execution/RunnableObjectEx.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/execution/RunnableObjectEx.java
@@ -17,10 +17,10 @@
  * @coverage core.util
  */
 public interface RunnableObjectEx<T> {
-  /**
-   * Executes operation that can cause {@link Exception}.
-   *
-   * @return some {@link Object} result for caller.
-   */
-  T runObject() throws Exception;
+	/**
+	 * Executes operation that can cause {@link Exception}.
+	 *
+	 * @return some {@link Object} result for caller.
+	 */
+	T runObject() throws Exception;
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/gef/EditPartsContentProvider.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/gef/EditPartsContentProvider.java
index 3427aa397..2dd644c63 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/gef/EditPartsContentProvider.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/gef/EditPartsContentProvider.java
@@ -29,70 +29,70 @@
  * @coverage gef.core
  */
 public final class EditPartsContentProvider implements ITreeContentProvider {
-  private final IEditPartViewer m_viewer;
+	private final IEditPartViewer m_viewer;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public EditPartsContentProvider(IEditPartViewer viewer) {
-    m_viewer = viewer;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public EditPartsContentProvider(IEditPartViewer viewer) {
+		m_viewer = viewer;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IStructuredContentProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Object[] getElements(Object inputElement) {
-    Object input = m_viewer.getRootContainer().getContent().getModel();
-    return new Object[]{input};
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IStructuredContentProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Object[] getElements(Object inputElement) {
+		Object input = m_viewer.getRootContainer().getContent().getModel();
+		return new Object[]{input};
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ITreeContentProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean hasChildren(Object parentElement) {
-    return getChildren(parentElement).length != 0;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ITreeContentProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean hasChildren(Object parentElement) {
+		return getChildren(parentElement).length != 0;
+	}
 
-  @Override
-  public Object[] getChildren(Object parentElement) {
-    EditPart parentEditPart = m_viewer.getEditPartByModel(parentElement);
-    if (parentEditPart != null) {
-      List<Object> children = Lists.newArrayList();
-      for (EditPart editPart : parentEditPart.getChildren()) {
-        children.add(editPart.getModel());
-      }
-      return children.toArray();
-    }
-    return ArrayUtils.EMPTY_OBJECT_ARRAY;
-  }
+	@Override
+	public Object[] getChildren(Object parentElement) {
+		EditPart parentEditPart = m_viewer.getEditPartByModel(parentElement);
+		if (parentEditPart != null) {
+			List<Object> children = Lists.newArrayList();
+			for (EditPart editPart : parentEditPart.getChildren()) {
+				children.add(editPart.getModel());
+			}
+			return children.toArray();
+		}
+		return ArrayUtils.EMPTY_OBJECT_ARRAY;
+	}
 
-  @Override
-  public Object getParent(Object element) {
-    EditPart editPart = m_viewer.getEditPartByModel(element);
-    if (editPart != null) {
-      return editPart.getParent().getModel();
-    }
-    return null;
-  }
+	@Override
+	public Object getParent(Object element) {
+		EditPart editPart = m_viewer.getEditPartByModel(element);
+		if (editPart != null) {
+			return editPart.getParent().getModel();
+		}
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IContentProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void dispose() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IContentProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void dispose() {
+	}
 
-  @Override
-  public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
-  }
+	@Override
+	public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/gef/EditPartsSelectionProvider.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/gef/EditPartsSelectionProvider.java
index 103713d50..2eb91376f 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/gef/EditPartsSelectionProvider.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/gef/EditPartsSelectionProvider.java
@@ -33,87 +33,87 @@
  * @coverage gef.core
  */
 public final class EditPartsSelectionProvider implements ISelectionProvider {
-  private final IEditPartViewer m_viewer;
-  private final EventTable m_eventTable = new EventTable();
-  private final ISelectionChangedListener m_selectionListener = new ISelectionChangedListener() {
-    @Override
-    public void selectionChanged(SelectionChangedEvent event) {
-      fireSelectionChanged();
-    }
-  };
+	private final IEditPartViewer m_viewer;
+	private final EventTable m_eventTable = new EventTable();
+	private final ISelectionChangedListener m_selectionListener = new ISelectionChangedListener() {
+		@Override
+		public void selectionChanged(SelectionChangedEvent event) {
+			fireSelectionChanged();
+		}
+	};
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public EditPartsSelectionProvider(IEditPartViewer viewer) {
-    m_viewer = viewer;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public EditPartsSelectionProvider(IEditPartViewer viewer) {
+		m_viewer = viewer;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public ISelection getSelection() {
-    List<Object> models = Lists.newArrayList();
-    for (EditPart editPart : m_viewer.getSelectedEditParts()) {
-      models.add(editPart.getModel());
-    }
-    return new StructuredSelection(models);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public ISelection getSelection() {
+		List<Object> models = Lists.newArrayList();
+		for (EditPart editPart : m_viewer.getSelectedEditParts()) {
+			models.add(editPart.getModel());
+		}
+		return new StructuredSelection(models);
+	}
 
-  @Override
-  public void setSelection(ISelection selection) {
-    // prepare EditPart's for model selection
-    List<EditPart> editParts = Lists.newArrayList();
-    for (Iterator<?> I = ((StructuredSelection) selection).iterator(); I.hasNext();) {
-      Object model = I.next();
-      EditPart editPart = m_viewer.getEditPartByModel(model);
-      if (editPart != null) {
-        editParts.add(editPart);
-      }
-    }
-    // set selection in viewer
-    m_viewer.setSelection(editParts);
-  }
+	@Override
+	public void setSelection(ISelection selection) {
+		// prepare EditPart's for model selection
+		List<EditPart> editParts = Lists.newArrayList();
+		for (Iterator<?> I = ((StructuredSelection) selection).iterator(); I.hasNext();) {
+			Object model = I.next();
+			EditPart editPart = m_viewer.getEditPartByModel(model);
+			if (editPart != null) {
+				editParts.add(editPart);
+			}
+		}
+		// set selection in viewer
+		m_viewer.setSelection(editParts);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Listeners
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void addSelectionChangedListener(ISelectionChangedListener listener) {
-    m_eventTable.addListener(ISelectionChangedListener.class, listener);
-    if (m_eventTable.getListeners(ISelectionChangedListener.class).size() == 1) {
-      m_viewer.addSelectionChangedListener(m_selectionListener);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Listeners
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void addSelectionChangedListener(ISelectionChangedListener listener) {
+		m_eventTable.addListener(ISelectionChangedListener.class, listener);
+		if (m_eventTable.getListeners(ISelectionChangedListener.class).size() == 1) {
+			m_viewer.addSelectionChangedListener(m_selectionListener);
+		}
+	}
 
-  @Override
-  public void removeSelectionChangedListener(ISelectionChangedListener listener) {
-    m_eventTable.removeListener(ISelectionChangedListener.class, listener);
-    if (m_eventTable.getListeners(ISelectionChangedListener.class).isEmpty()) {
-      m_viewer.removeSelectionChangedListener(m_selectionListener);
-    }
-  }
+	@Override
+	public void removeSelectionChangedListener(ISelectionChangedListener listener) {
+		m_eventTable.removeListener(ISelectionChangedListener.class, listener);
+		if (m_eventTable.getListeners(ISelectionChangedListener.class).isEmpty()) {
+			m_viewer.removeSelectionChangedListener(m_selectionListener);
+		}
+	}
 
-  /**
-   * Notifies subscribers of this {@link ISelectionProvider}.
-   */
-  private void fireSelectionChanged() {
-    // prepare event
-    SelectionChangedEvent event;
-    {
-      ISelection selection = getSelection();
-      event = new SelectionChangedEvent(this, selection);
-    }
-    // notify subscribers
-    for (ISelectionChangedListener listener : m_eventTable.getListeners(ISelectionChangedListener.class)) {
-      listener.selectionChanged(event);
-    }
-  }
+	/**
+	 * Notifies subscribers of this {@link ISelectionProvider}.
+	 */
+	private void fireSelectionChanged() {
+		// prepare event
+		SelectionChangedEvent event;
+		{
+			ISelection selection = getSelection();
+			event = new SelectionChangedEvent(this, selection);
+		}
+		// notify subscribers
+		for (ISelectionChangedListener listener : m_eventTable.getListeners(ISelectionChangedListener.class)) {
+			listener.selectionChanged(event);
+		}
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/platform/PlatformInfo.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/platform/PlatformInfo.java
index 19ee9e531..294278cc5 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/platform/PlatformInfo.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/platform/PlatformInfo.java
@@ -29,285 +29,285 @@
  * @author Dan Rubel
  */
 public class PlatformInfo {
-  /**
-   * The name displayed for an unknown IDE
-   */
-  public static final String UNKNOWN_IDE_NAME = "Unknown IDE";
-  /**
-   * Constant representing unknown version of Eclipse or IDE
-   */
-  public static final PluginVersionIdentifier UNKNOWN_VERSION = new PluginVersionIdentifier(100,
-      1,
-      4);
-  /**
-   * Constant representing unknown version string of Eclipse or IDE
-   */
-  public static final String UNKNOWN_VERSION_STRING = UNKNOWN_VERSION.toString();
-  /**
-   * The version displayed for an unknown IDE version
-   */
-  public static final String UNKNOWN_BUILD_ID = "?BUILD-ID?";
-  /**
-   * The NL value displayed for an unknown NL
-   */
-  public static final String UNKNOWN_NL = "?NL?";
-  /**
-   * The full name for the IDE
-   */
-  private static String ideName;
-  /**
-   * The development environment version string or <code>null</code> if not initialized yet by
-   * {@link #getIDEVersionString()}
-   */
-  private static String ideVersionString;
-  /**
-   * The development environment's NL (not null, not empty, no leading or trailing spaces)
-   */
-  private static String ideNL;
-  /**
-   * The version of Eclipse upon which the development environment is based or <code>null</code> if
-   * not initialized yet by {@link #getEclipseVersion()}
-   */
-  private static Version eclipseVersion;
-  /**
-   * The build identifier for Eclipse (e.g. "v20061503") or <code>null</code> if not initialized yet
-   * by {@link #getEclipseBuildId()}. For Eclipse 3.2, this is the same as the Eclipse version
-   * qualifier segment. For older versions of Eclipse, this is read from the JDT plugin
-   * about.properties file.
-   */
-  private static String eclipseBuildId;
-  /**
-   * The name for this particular Eclipse build (e.g. "M6", "M7", "RC1", "", etc) or
-   * <code>null</code> if not initialized yet by {@link #getEclipseBuildName()}. This may contain
-   * the same value as {@link #getEclipseBuildId()} if the build is not a milestone, release
-   * candidate, or GA.
-   */
-  private static String eclipseBuildName;
-  /**
-   * The build date for this particular instance of Eclipse as derived from
-   * {@link #getEclipseBuildId()} or <code>null</code> if not initialized yet by
-   * {@link #getEclipseBuildDate()}.
-   */
-  private static GregorianCalendar eclipseBuildDate;
+	/**
+	 * The name displayed for an unknown IDE
+	 */
+	public static final String UNKNOWN_IDE_NAME = "Unknown IDE";
+	/**
+	 * Constant representing unknown version of Eclipse or IDE
+	 */
+	public static final PluginVersionIdentifier UNKNOWN_VERSION = new PluginVersionIdentifier(100,
+			1,
+			4);
+	/**
+	 * Constant representing unknown version string of Eclipse or IDE
+	 */
+	public static final String UNKNOWN_VERSION_STRING = UNKNOWN_VERSION.toString();
+	/**
+	 * The version displayed for an unknown IDE version
+	 */
+	public static final String UNKNOWN_BUILD_ID = "?BUILD-ID?";
+	/**
+	 * The NL value displayed for an unknown NL
+	 */
+	public static final String UNKNOWN_NL = "?NL?";
+	/**
+	 * The full name for the IDE
+	 */
+	private static String ideName;
+	/**
+	 * The development environment version string or <code>null</code> if not initialized yet by
+	 * {@link #getIDEVersionString()}
+	 */
+	private static String ideVersionString;
+	/**
+	 * The development environment's NL (not null, not empty, no leading or trailing spaces)
+	 */
+	private static String ideNL;
+	/**
+	 * The version of Eclipse upon which the development environment is based or <code>null</code> if
+	 * not initialized yet by {@link #getEclipseVersion()}
+	 */
+	private static Version eclipseVersion;
+	/**
+	 * The build identifier for Eclipse (e.g. "v20061503") or <code>null</code> if not initialized yet
+	 * by {@link #getEclipseBuildId()}. For Eclipse 3.2, this is the same as the Eclipse version
+	 * qualifier segment. For older versions of Eclipse, this is read from the JDT plugin
+	 * about.properties file.
+	 */
+	private static String eclipseBuildId;
+	/**
+	 * The name for this particular Eclipse build (e.g. "M6", "M7", "RC1", "", etc) or
+	 * <code>null</code> if not initialized yet by {@link #getEclipseBuildName()}. This may contain
+	 * the same value as {@link #getEclipseBuildId()} if the build is not a milestone, release
+	 * candidate, or GA.
+	 */
+	private static String eclipseBuildName;
+	/**
+	 * The build date for this particular instance of Eclipse as derived from
+	 * {@link #getEclipseBuildId()} or <code>null</code> if not initialized yet by
+	 * {@link #getEclipseBuildDate()}.
+	 */
+	private static GregorianCalendar eclipseBuildDate;
 
-  /**
-   * No instances
-   */
-  private PlatformInfo() {
-  }
+	/**
+	 * No instances
+	 */
+	private PlatformInfo() {
+	}
 
-  // //////////////////////////////////////////////////////////////////////////
-  //
-  // Accessors
-  //
-  // //////////////////////////////////////////////////////////////////////////
-  /**
-   * Answer the development environment full name
-   *
-   * @return the full name (not null, not empty, no leading or trailing spaces)
-   */
-  public static String getIDEName() {
-    if (ideName == null) {
-      try {
-        if (Platform.getProduct() != null) {
-          ideName = Platform.getProduct().getName();
-        }
-        if (ideName == null) {
-          ideName = UNKNOWN_IDE_NAME;
-        } else {
-          ideName = ideName.trim();
-          if (ideName.length() == 0) {
-            ideName = UNKNOWN_IDE_NAME;
-          } else if (ideName.startsWith("Eclipse Pl")) {
-            ideName = "Eclipse";
-          } else if (ideName.startsWith("Common OS-independent base of the Eclipse platform")) {
-            ideName = "Eclipse";
-          }
-        }
-      } catch (Exception ex) {
-        // Logger may not be open, so cannot log exception
-        ideName = UNKNOWN_IDE_NAME;
-      }
-    }
-    return ideName;
-  }
+	// //////////////////////////////////////////////////////////////////////////
+	//
+	// Accessors
+	//
+	// //////////////////////////////////////////////////////////////////////////
+	/**
+	 * Answer the development environment full name
+	 *
+	 * @return the full name (not null, not empty, no leading or trailing spaces)
+	 */
+	public static String getIDEName() {
+		if (ideName == null) {
+			try {
+				if (Platform.getProduct() != null) {
+					ideName = Platform.getProduct().getName();
+				}
+				if (ideName == null) {
+					ideName = UNKNOWN_IDE_NAME;
+				} else {
+					ideName = ideName.trim();
+					if (ideName.length() == 0) {
+						ideName = UNKNOWN_IDE_NAME;
+					} else if (ideName.startsWith("Eclipse Pl")) {
+						ideName = "Eclipse";
+					} else if (ideName.startsWith("Common OS-independent base of the Eclipse platform")) {
+						ideName = "Eclipse";
+					}
+				}
+			} catch (Exception ex) {
+				// Logger may not be open, so cannot log exception
+				ideName = UNKNOWN_IDE_NAME;
+			}
+		}
+		return ideName;
+	}
 
-  /**
-   * Answer the development environment version string
-   *
-   * @return the version string (not null, not empty, no leading or trailing spaces)
-   */
-  public static String getIDEVersionString() {
-    if (ideVersionString == null) {
-      try {
-        String pluginId = null;
-        if (Platform.getProduct() != null) {
-          pluginId = Platform.getProduct().getDefiningBundle().getSymbolicName();
-        }
-        ideVersionString = PluginUtilities.getVersionString(pluginId);
-      } catch (Exception ex) {
-        // Logger may not be open, so cannot log exception
-      }
-      if (ideVersionString == null || ideVersionString.length() == 0) {
-        ideVersionString = UNKNOWN_VERSION_STRING;
-      }
-    }
-    return ideVersionString;
-  }
+	/**
+	 * Answer the development environment version string
+	 *
+	 * @return the version string (not null, not empty, no leading or trailing spaces)
+	 */
+	public static String getIDEVersionString() {
+		if (ideVersionString == null) {
+			try {
+				String pluginId = null;
+				if (Platform.getProduct() != null) {
+					pluginId = Platform.getProduct().getDefiningBundle().getSymbolicName();
+				}
+				ideVersionString = PluginUtilities.getVersionString(pluginId);
+			} catch (Exception ex) {
+				// Logger may not be open, so cannot log exception
+			}
+			if (ideVersionString == null || ideVersionString.length() == 0) {
+				ideVersionString = UNKNOWN_VERSION_STRING;
+			}
+		}
+		return ideVersionString;
+	}
 
-  /**
-   * Returns the string name of the current locale for use in finding files whose path starts with
-   * <code>$nl$</code>.
-   *
-   * @return the national language being used (not null, not empty, no leading or trailing spaces)
-   */
-  public static String getIDENL() {
-    if (ideNL == null) {
-      try {
-        ideNL = Platform.getNL();
-      } catch (Exception e) {
-        // Logger may not be open, so cannot log exception
-      }
-      if (ideNL == null) {
-        ideNL = UNKNOWN_NL;
-      }
-    }
-    return ideNL;
-  }
+	/**
+	 * Returns the string name of the current locale for use in finding files whose path starts with
+	 * <code>$nl$</code>.
+	 *
+	 * @return the national language being used (not null, not empty, no leading or trailing spaces)
+	 */
+	public static String getIDENL() {
+		if (ideNL == null) {
+			try {
+				ideNL = Platform.getNL();
+			} catch (Exception e) {
+				// Logger may not be open, so cannot log exception
+			}
+			if (ideNL == null) {
+				ideNL = UNKNOWN_NL;
+			}
+		}
+		return ideNL;
+	}
 
-  /**
-   * Answer the version of Eclipse upon which the development environment is based.
-   *
-   * @return the version (not <code>null</code>)
-   */
-  public static Version getEclipseVersion() {
-    if (eclipseVersion == null) {
-      try {
-        eclipseVersion = PluginUtilities.getVersion("org.eclipse.core.runtime");
-        // Use org.eclipse.jdt.ui to tell the difference between E-3.5 and E-3.6 M#
-        if (eclipseVersion.getMajor() == 3 && eclipseVersion.getMinor() == 5) {
-          Version version = PluginUtilities.getVersion("org.eclipse.jdt.ui");
-          if (version.getMajor() == 3 && version.getMinor() == 6) {
-            eclipseVersion = version;
-          }
-        }
-        // For older versions of Eclipse, read the build from the JDT
-        if (eclipseVersion.getQualifier().length() == 0) {
-          eclipseVersion =
-              new Version(eclipseVersion.getMajor(),
-                  eclipseVersion.getMinor(),
-                  eclipseVersion.getMicro(),
-                  "v" + readBuildId("org.eclipse.jdt", "about.mappings"));
-        }
-      } catch (Exception e) {
-        // Logger may not be open, so cannot log exception
-      }
-      if (eclipseVersion == null) {
-        eclipseVersion = Version.emptyVersion;
-      }
-    }
-    return eclipseVersion;
-  }
+	/**
+	 * Answer the version of Eclipse upon which the development environment is based.
+	 *
+	 * @return the version (not <code>null</code>)
+	 */
+	public static Version getEclipseVersion() {
+		if (eclipseVersion == null) {
+			try {
+				eclipseVersion = PluginUtilities.getVersion("org.eclipse.core.runtime");
+				// Use org.eclipse.jdt.ui to tell the difference between E-3.5 and E-3.6 M#
+				if (eclipseVersion.getMajor() == 3 && eclipseVersion.getMinor() == 5) {
+					Version version = PluginUtilities.getVersion("org.eclipse.jdt.ui");
+					if (version.getMajor() == 3 && version.getMinor() == 6) {
+						eclipseVersion = version;
+					}
+				}
+				// For older versions of Eclipse, read the build from the JDT
+				if (eclipseVersion.getQualifier().length() == 0) {
+					eclipseVersion =
+							new Version(eclipseVersion.getMajor(),
+									eclipseVersion.getMinor(),
+									eclipseVersion.getMicro(),
+									"v" + readBuildId("org.eclipse.jdt", "about.mappings"));
+				}
+			} catch (Exception e) {
+				// Logger may not be open, so cannot log exception
+			}
+			if (eclipseVersion == null) {
+				eclipseVersion = Version.emptyVersion;
+			}
+		}
+		return eclipseVersion;
+	}
 
-  /**
-   * Answer the build identifier for Eclipse (e.g. "200408122000"). This is read from the JDT plugin
-   * about.properties file.
-   *
-   * @return the build id or {@link #UNKNOWN_BUILD_ID} if it cannot be determined
-   */
-  public static String getEclipseBuildId() {
-    if (eclipseBuildId == null) {
-      try {
-        eclipseBuildId = readBuildId("org.eclipse.jdt", "about.mappings");
-      } catch (Exception e) {
-        // Logger may not be open, so cannot log exception
-      }
-      if (eclipseBuildId == null) {
-        eclipseBuildId = UNKNOWN_BUILD_ID;
-      }
-    }
-    return eclipseBuildId;
-  }
+	/**
+	 * Answer the build identifier for Eclipse (e.g. "200408122000"). This is read from the JDT plugin
+	 * about.properties file.
+	 *
+	 * @return the build id or {@link #UNKNOWN_BUILD_ID} if it cannot be determined
+	 */
+	public static String getEclipseBuildId() {
+		if (eclipseBuildId == null) {
+			try {
+				eclipseBuildId = readBuildId("org.eclipse.jdt", "about.mappings");
+			} catch (Exception e) {
+				// Logger may not be open, so cannot log exception
+			}
+			if (eclipseBuildId == null) {
+				eclipseBuildId = UNKNOWN_BUILD_ID;
+			}
+		}
+		return eclipseBuildId;
+	}
 
-  /**
-   * Answer the name for this particular Eclipse build (e.g. "M6", "M7", "RC1", "", etc). This may
-   * return the same value as {@link #getEclipseBuildId()} if the build is not a milestone, release
-   * candidate, or GA.
-   *
-   * @return the build name (not <code>null</code>, but may be empty if it is a GA)
-   */
-  public static String getEclipseBuildName() {
-    if (eclipseBuildName == null) {
-      eclipseBuildName = "";
-      if (eclipseBuildName == null) {
-        eclipseBuildName = getEclipseBuildId();
-      }
-    }
-    return eclipseBuildName;
-  }
+	/**
+	 * Answer the name for this particular Eclipse build (e.g. "M6", "M7", "RC1", "", etc). This may
+	 * return the same value as {@link #getEclipseBuildId()} if the build is not a milestone, release
+	 * candidate, or GA.
+	 *
+	 * @return the build name (not <code>null</code>, but may be empty if it is a GA)
+	 */
+	public static String getEclipseBuildName() {
+		if (eclipseBuildName == null) {
+			eclipseBuildName = "";
+			if (eclipseBuildName == null) {
+				eclipseBuildName = getEclipseBuildId();
+			}
+		}
+		return eclipseBuildName;
+	}
 
-  /**
-   * Answer the build date for this particular instance of Eclipse as derived from
-   * {@link #getEclipseBuildId()} or Jan 1, 2003 if it cannot be determined.
-   *
-   * @return the build date (not <code>null</code>)
-   */
-  public static Calendar getEclipseBuildDate() {
-    if (eclipseBuildDate == null) {
-      try {
-        String ymd = getEclipseBuildId();
-        if (Character.isLetter(ymd.charAt(0))) {
-          ymd = ymd.substring(1);
-        }
-        int y = Integer.parseInt(ymd.substring(0, 4));
-        int m = Integer.parseInt(ymd.substring(4, 6)) - 1;
-        int d = Integer.parseInt(ymd.substring(6, 8));
-        eclipseBuildDate = new GregorianCalendar(y, m, d);
-      } catch (Exception e) {
-        // Logger may not be open, so cannot log exception
-      }
-      if (eclipseBuildDate == null) {
-        eclipseBuildDate = new GregorianCalendar(2003, 0, 1);
-      }
-    }
-    return eclipseBuildDate;
-  }
+	/**
+	 * Answer the build date for this particular instance of Eclipse as derived from
+	 * {@link #getEclipseBuildId()} or Jan 1, 2003 if it cannot be determined.
+	 *
+	 * @return the build date (not <code>null</code>)
+	 */
+	public static Calendar getEclipseBuildDate() {
+		if (eclipseBuildDate == null) {
+			try {
+				String ymd = getEclipseBuildId();
+				if (Character.isLetter(ymd.charAt(0))) {
+					ymd = ymd.substring(1);
+				}
+				int y = Integer.parseInt(ymd.substring(0, 4));
+				int m = Integer.parseInt(ymd.substring(4, 6)) - 1;
+				int d = Integer.parseInt(ymd.substring(6, 8));
+				eclipseBuildDate = new GregorianCalendar(y, m, d);
+			} catch (Exception e) {
+				// Logger may not be open, so cannot log exception
+			}
+			if (eclipseBuildDate == null) {
+				eclipseBuildDate = new GregorianCalendar(2003, 0, 1);
+			}
+		}
+		return eclipseBuildDate;
+	}
 
-  /**
-   * Read the build identifier from the specified plugin file.
-   *
-   * @param pluginId
-   *          the plugin's unique identifier
-   * @param fileName
-   *          the name of the file containing the build id
-   * @return the build identifier or <code>null</code> if it cannot be determined
-   */
-  private static String readBuildId(String pluginId, String fileName) {
-    InputStream stream = null;
-    try {
-      URL url = PluginUtilities.getUrl(pluginId, fileName);
-      stream = url.openStream();
-      LineNumberReader reader = new LineNumberReader(new InputStreamReader(stream));
-      while (true) {
-        String line = reader.readLine();
-        if (line == null) {
-          return null;
-        }
-        if (line.startsWith("0=")) {
-          return line.substring(2).trim();
-        }
-      }
-    } catch (Exception e) {
-      // Logger may not be open, so cannot log exception
-    } finally {
-      try {
-        if (stream != null) {
-          stream.close();
-        }
-      } catch (IOException e) {
-        // Logger may not be open, so cannot log exception
-      }
-    }
-    return null;
-  }
+	/**
+	 * Read the build identifier from the specified plugin file.
+	 *
+	 * @param pluginId
+	 *          the plugin's unique identifier
+	 * @param fileName
+	 *          the name of the file containing the build id
+	 * @return the build identifier or <code>null</code> if it cannot be determined
+	 */
+	private static String readBuildId(String pluginId, String fileName) {
+		InputStream stream = null;
+		try {
+			URL url = PluginUtilities.getUrl(pluginId, fileName);
+			stream = url.openStream();
+			LineNumberReader reader = new LineNumberReader(new InputStreamReader(stream));
+			while (true) {
+				String line = reader.readLine();
+				if (line == null) {
+					return null;
+				}
+				if (line.startsWith("0=")) {
+					return line.substring(2).trim();
+				}
+			}
+		} catch (Exception e) {
+			// Logger may not be open, so cannot log exception
+		} finally {
+			try {
+				if (stream != null) {
+					stream.close();
+				}
+			} catch (IOException e) {
+				// Logger may not be open, so cannot log exception
+			}
+		}
+		return null;
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/platform/PluginUtilities.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/platform/PluginUtilities.java
index 53c473d2c..4d7fabbcb 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/platform/PluginUtilities.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/platform/PluginUtilities.java
@@ -25,199 +25,199 @@
  * @version $Revision$
  */
 public class PluginUtilities {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Prevent the creation of instances of this class.
-   */
-  private PluginUtilities() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Prevent the creation of instances of this class.
+	 */
+	private PluginUtilities() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // General Accessing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Return the unique identifier of the given plug-in.
-   *
-   * @return the unique identifier of the given plug-in
-   */
-  public static String getId(Plugin plugin) {
-    return plugin.getBundle().getSymbolicName();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// General Accessing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Return the unique identifier of the given plug-in.
+	 *
+	 * @return the unique identifier of the given plug-in
+	 */
+	public static String getId(Plugin plugin) {
+		return plugin.getBundle().getSymbolicName();
+	}
 
-  /**
-   * Return the name of the given plug-in. If the plug-in does not have a name, return the unique
-   * identifier for the plug-in instead.
-   *
-   * @return the name of the given plug-in
-   */
-  public static String getName(Plugin plugin) {
-    String label;
-    Object bundleName;
-    label = null;
-    bundleName = plugin.getBundle().getHeaders().get(org.osgi.framework.Constants.BUNDLE_NAME);
-    if (bundleName instanceof String) {
-      label = (String) bundleName;
-    }
-    if (label == null || label.trim().length() == 0) {
-      return getId(plugin);
-    }
-    return label;
-  }
+	/**
+	 * Return the name of the given plug-in. If the plug-in does not have a name, return the unique
+	 * identifier for the plug-in instead.
+	 *
+	 * @return the name of the given plug-in
+	 */
+	public static String getName(Plugin plugin) {
+		String label;
+		Object bundleName;
+		label = null;
+		bundleName = plugin.getBundle().getHeaders().get(org.osgi.framework.Constants.BUNDLE_NAME);
+		if (bundleName instanceof String) {
+			label = (String) bundleName;
+		}
+		if (label == null || label.trim().length() == 0) {
+			return getId(plugin);
+		}
+		return label;
+	}
 
-  /**
-   * Return the version identifier associated with the plug-in with the given identifier, or
-   * <code>null</code> if there is no such plug-in.
-   *
-   * @param pluginId
-   *          the identifier of the plug-in
-   *
-   * @return the version identifier for the specified plug-in
-   */
-  public static Version getVersion(String pluginId) {
-    Bundle bundle;
-    String version;
-    bundle = Platform.getBundle(pluginId);
-    if (bundle == null) {
-      return null;
-    }
-    version = bundle.getHeaders().get(org.osgi.framework.Constants.BUNDLE_VERSION);
-    return new Version(version);
-  }
+	/**
+	 * Return the version identifier associated with the plug-in with the given identifier, or
+	 * <code>null</code> if there is no such plug-in.
+	 *
+	 * @param pluginId
+	 *          the identifier of the plug-in
+	 *
+	 * @return the version identifier for the specified plug-in
+	 */
+	public static Version getVersion(String pluginId) {
+		Bundle bundle;
+		String version;
+		bundle = Platform.getBundle(pluginId);
+		if (bundle == null) {
+			return null;
+		}
+		version = bundle.getHeaders().get(org.osgi.framework.Constants.BUNDLE_VERSION);
+		return new Version(version);
+	}
 
-  /**
-   * Return the version identifier associated with the plug-in with the given identifier, or
-   * <code>null</code> if there is no such plug-in.
-   *
-   * @param pluginId
-   *          the identifier of the plug-in
-   *
-   * @return the version identifier for the specified plug-in
-   */
-  public static Version getVersion(Plugin plugin) {
-    String version;
-    if (plugin == null) {
-      return null;
-    }
-    version = plugin.getBundle().getHeaders().get(org.osgi.framework.Constants.BUNDLE_VERSION);
-    return new Version(version);
-  }
+	/**
+	 * Return the version identifier associated with the plug-in with the given identifier, or
+	 * <code>null</code> if there is no such plug-in.
+	 *
+	 * @param pluginId
+	 *          the identifier of the plug-in
+	 *
+	 * @return the version identifier for the specified plug-in
+	 */
+	public static Version getVersion(Plugin plugin) {
+		String version;
+		if (plugin == null) {
+			return null;
+		}
+		version = plugin.getBundle().getHeaders().get(org.osgi.framework.Constants.BUNDLE_VERSION);
+		return new Version(version);
+	}
 
-  /**
-   * Return the version identifier associated with the plug-in with the given identifier, or
-   * <code>null</code> if there is no such plug-in.
-   *
-   * @param pluginId
-   *          the identifier of the plug-in
-   *
-   * @return the version identifier for the specified plug-in
-   */
-  public static String getVersionString(String pluginId) {
-    Bundle bundle;
-    bundle = Platform.getBundle(pluginId);
-    if (bundle == null) {
-      return null;
-    }
-    return bundle.getHeaders().get(org.osgi.framework.Constants.BUNDLE_VERSION);
-  }
+	/**
+	 * Return the version identifier associated with the plug-in with the given identifier, or
+	 * <code>null</code> if there is no such plug-in.
+	 *
+	 * @param pluginId
+	 *          the identifier of the plug-in
+	 *
+	 * @return the version identifier for the specified plug-in
+	 */
+	public static String getVersionString(String pluginId) {
+		Bundle bundle;
+		bundle = Platform.getBundle(pluginId);
+		if (bundle == null) {
+			return null;
+		}
+		return bundle.getHeaders().get(org.osgi.framework.Constants.BUNDLE_VERSION);
+	}
 
-  /**
-   * Return the version identifier associated with the plug-in with the given identifier, or
-   * <code>null</code> if there is no such plug-in.
-   *
-   * @param pluginId
-   *          the identifier of the plug-in
-   *
-   * @return the version identifier for the specified plug-in
-   */
-  public static String getVersionString(Plugin plugin) {
-    if (plugin == null) {
-      return null;
-    }
-    return plugin.getBundle().getHeaders().get(org.osgi.framework.Constants.BUNDLE_VERSION);
-  }
+	/**
+	 * Return the version identifier associated with the plug-in with the given identifier, or
+	 * <code>null</code> if there is no such plug-in.
+	 *
+	 * @param pluginId
+	 *          the identifier of the plug-in
+	 *
+	 * @return the version identifier for the specified plug-in
+	 */
+	public static String getVersionString(Plugin plugin) {
+		if (plugin == null) {
+			return null;
+		}
+		return plugin.getBundle().getHeaders().get(org.osgi.framework.Constants.BUNDLE_VERSION);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // File Accessing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Return an URL representing the installation directory of the plug-in with the given identifier,
-   * or <code>null</code> if there is no plug-in with the given identifier.
-   *
-   * @param pluginId
-   *          the identifier of the plug-in
-   *
-   * @return the specified plug-in's installation directory
-   */
-  public static URL getInstallUrl(String pluginId) {
-    Bundle bundle;
-    bundle = Platform.getBundle(pluginId);
-    if (bundle == null) {
-      return null;
-    }
-    return bundle.getEntry("/");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// File Accessing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Return an URL representing the installation directory of the plug-in with the given identifier,
+	 * or <code>null</code> if there is no plug-in with the given identifier.
+	 *
+	 * @param pluginId
+	 *          the identifier of the plug-in
+	 *
+	 * @return the specified plug-in's installation directory
+	 */
+	public static URL getInstallUrl(String pluginId) {
+		Bundle bundle;
+		bundle = Platform.getBundle(pluginId);
+		if (bundle == null) {
+			return null;
+		}
+		return bundle.getEntry("/");
+	}
 
-  /**
-   * Return an URL representing the given plug-in's installation directory.
-   *
-   * @param plugin
-   *          the plug-in
-   *
-   * @return the given plug-in's installation directory
-   */
-  public static URL getInstallUrl(Plugin plugin) {
-    if (plugin == null) {
-      return null;
-    }
-    return plugin.getBundle().getEntry("/");
-  }
+	/**
+	 * Return an URL representing the given plug-in's installation directory.
+	 *
+	 * @param plugin
+	 *          the plug-in
+	 *
+	 * @return the given plug-in's installation directory
+	 */
+	public static URL getInstallUrl(Plugin plugin) {
+		if (plugin == null) {
+			return null;
+		}
+		return plugin.getBundle().getEntry("/");
+	}
 
-  /**
-   * Return an URL for the file located within the installation directory of the plug-in that has
-   * the given identifier that has the given relative path.
-   *
-   * @param pluginId
-   *          the identifier for the plug-in
-   * @param relativePath
-   *          the relative path of the file within the installation directory
-   *
-   * @return the URL for the specified file
-   */
-  public static URL getUrl(String pluginId, String relativePath) {
-    Bundle bundle;
-    if (pluginId == null || relativePath == null) {
-      return null;
-    }
-    bundle = Platform.getBundle(pluginId);
-    if (bundle != null) {
-      return bundle.getEntry(relativePath);
-    }
-    return null;
-  }
+	/**
+	 * Return an URL for the file located within the installation directory of the plug-in that has
+	 * the given identifier that has the given relative path.
+	 *
+	 * @param pluginId
+	 *          the identifier for the plug-in
+	 * @param relativePath
+	 *          the relative path of the file within the installation directory
+	 *
+	 * @return the URL for the specified file
+	 */
+	public static URL getUrl(String pluginId, String relativePath) {
+		Bundle bundle;
+		if (pluginId == null || relativePath == null) {
+			return null;
+		}
+		bundle = Platform.getBundle(pluginId);
+		if (bundle != null) {
+			return bundle.getEntry(relativePath);
+		}
+		return null;
+	}
 
-  /**
-   * Return an URL for the file located within the installation directory of the given plug-in that
-   * has the given relative path.
-   *
-   * @param pluginId
-   *          the identifier for the plug-in
-   * @param relativePath
-   *          the relative path of the file within the installation directory
-   *
-   * @return the URL for the specified file
-   */
-  public static URL getUrl(Plugin plugin, String relativePath) {
-    if (plugin == null || relativePath == null) {
-      return null;
-    }
-    return plugin.getBundle().getEntry(relativePath);
-  }
+	/**
+	 * Return an URL for the file located within the installation directory of the given plug-in that
+	 * has the given relative path.
+	 *
+	 * @param pluginId
+	 *          the identifier for the plug-in
+	 * @param relativePath
+	 *          the relative path of the file within the installation directory
+	 *
+	 * @return the URL for the specified file
+	 */
+	public static URL getUrl(Plugin plugin, String relativePath) {
+		if (plugin == null || relativePath == null) {
+			return null;
+		}
+		return plugin.getBundle().getEntry(relativePath);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/product/ProductInfo.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/product/ProductInfo.java
index 1a1b6ff5f..e7ad68bb5 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/product/ProductInfo.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/product/ProductInfo.java
@@ -28,172 +28,172 @@
  *
  */
 public final class ProductInfo {
-  // product info
-  private static final String[] CORE_PRODUCT = {"org.eclipse.wb.core"};
-  private static final String[] SWTD_PRODUCT = {"org.eclipse.wb.swt"};
-  private static final String[] SWINGD_PRODUCT = {"org.eclipse.wb.swing"};
-  private static final String[] GWTD_PRODUCT = {"com.google.gdt.eclipse.designer"};
-  private static final String[] ERCP_PRODUCT = {"org.eclipse.wb.ercp"};
-  // build info
-  private static final String UNKNOWN_BUILD = "UNKNOWN";
-  // eclipse info
-  private static final String ECLIPSE_VERSION_KEY = "eclipse.version";
-  private static final String TARGET_PROPERTIES = "target.properties";
-  private static final String PLUGIN_PROPERTIES = "plugin.properties";
-  private static final String BUILD_KEY = "build";
-  private static final String GRACE_GIVEN = ".graceGiven";
-  private static final String DEVELOPMENT_BUILD_NUM = "${build_num}";
-  private static final String DOT_INTERNAL = ".internal";
-  // instance info
-  private final String[] product_info;
-  private static ProductInfo INSTANCE;
-  private Version version;
-  private String build;
+	// product info
+	private static final String[] CORE_PRODUCT = {"org.eclipse.wb.core"};
+	private static final String[] SWTD_PRODUCT = {"org.eclipse.wb.swt"};
+	private static final String[] SWINGD_PRODUCT = {"org.eclipse.wb.swing"};
+	private static final String[] GWTD_PRODUCT = {"com.google.gdt.eclipse.designer"};
+	private static final String[] ERCP_PRODUCT = {"org.eclipse.wb.ercp"};
+	// build info
+	private static final String UNKNOWN_BUILD = "UNKNOWN";
+	// eclipse info
+	private static final String ECLIPSE_VERSION_KEY = "eclipse.version";
+	private static final String TARGET_PROPERTIES = "target.properties";
+	private static final String PLUGIN_PROPERTIES = "plugin.properties";
+	private static final String BUILD_KEY = "build";
+	private static final String GRACE_GIVEN = ".graceGiven";
+	private static final String DEVELOPMENT_BUILD_NUM = "${build_num}";
+	private static final String DOT_INTERNAL = ".internal";
+	// instance info
+	private final String[] product_info;
+	private static ProductInfo INSTANCE;
+	private Version version;
+	private String build;
 
-  private ProductInfo() {
-    boolean isInstalledERCP = Platform.getBundle(ERCP_PRODUCT[0]) != null;
-    boolean isInstalledSWT = Platform.getBundle(SWTD_PRODUCT[0]) != null;
-    boolean isInstalledSwing = Platform.getBundle(SWINGD_PRODUCT[0]) != null;
-    boolean isInstalledGWT = Platform.getBundle(GWTD_PRODUCT[0]) != null;
-    if (isInstalledSWT && isInstalledSwing) {
-      product_info = CORE_PRODUCT; //core
-    } else if (isInstalledSWT) {
-      product_info = SWTD_PRODUCT; // swt
-    } else if (isInstalledSwing) {
-      product_info = SWINGD_PRODUCT; // swing
-    } else if (isInstalledGWT) {
-      product_info = GWTD_PRODUCT; // gwt
-    } else if (isInstalledERCP) {
-      product_info = ERCP_PRODUCT; // ercp
-    } else {
-      product_info = CORE_PRODUCT; // core...should not get here
-    }
-  }
+	private ProductInfo() {
+		boolean isInstalledERCP = Platform.getBundle(ERCP_PRODUCT[0]) != null;
+		boolean isInstalledSWT = Platform.getBundle(SWTD_PRODUCT[0]) != null;
+		boolean isInstalledSwing = Platform.getBundle(SWINGD_PRODUCT[0]) != null;
+		boolean isInstalledGWT = Platform.getBundle(GWTD_PRODUCT[0]) != null;
+		if (isInstalledSWT && isInstalledSwing) {
+			product_info = CORE_PRODUCT; //core
+		} else if (isInstalledSWT) {
+			product_info = SWTD_PRODUCT; // swt
+		} else if (isInstalledSwing) {
+			product_info = SWINGD_PRODUCT; // swing
+		} else if (isInstalledGWT) {
+			product_info = GWTD_PRODUCT; // gwt
+		} else if (isInstalledERCP) {
+			product_info = ERCP_PRODUCT; // ercp
+		} else {
+			product_info = CORE_PRODUCT; // core...should not get here
+		}
+	}
 
-  public String getPluginId() {
-    return product_info[0];
-  }
+	public String getPluginId() {
+		return product_info[0];
+	}
 
-  public static ProductInfo getProduct() {
-    if (INSTANCE == null) {
-      INSTANCE = new ProductInfo();
-    }
-    return INSTANCE;
-  }
+	public static ProductInfo getProduct() {
+		if (INSTANCE == null) {
+			INSTANCE = new ProductInfo();
+		}
+		return INSTANCE;
+	}
 
-  public Version getVersion() {
-    if (version != null) {
-      return version;
-    }
-    // Determine if the platform is running
-    boolean isEclipseRunning;
-    try {
-      isEclipseRunning = Platform.isRunning();
-    } catch (NoClassDefFoundError e) {
-      version = Version.emptyVersion;
-      return version;
-    }
-    // If Eclipse is running, get the version from the plugin
-    if (isEclipseRunning) {
-      version = PluginUtilities.getVersion(getPluginId());
-      return version;
-    }
-    version = Version.emptyVersion;
-    return version;
-  }
+	public Version getVersion() {
+		if (version != null) {
+			return version;
+		}
+		// Determine if the platform is running
+		boolean isEclipseRunning;
+		try {
+			isEclipseRunning = Platform.isRunning();
+		} catch (NoClassDefFoundError e) {
+			version = Version.emptyVersion;
+			return version;
+		}
+		// If Eclipse is running, get the version from the plugin
+		if (isEclipseRunning) {
+			version = PluginUtilities.getVersion(getPluginId());
+			return version;
+		}
+		version = Version.emptyVersion;
+		return version;
+	}
 
-  /**
-   * Determine if the specified plugin is installed in the currently executing development
-   * environment without actually loading or starting the plugin
-   *
-   * @param pluginId
-   *          the plugin identifier
-   * @return <code>true</code> if installed, else <code>false</code>
-   */
-  public static boolean isInstalled(String pluginId) {
-    return PluginUtilities.getInstallUrl(pluginId) != null;
-  }
+	/**
+	 * Determine if the specified plugin is installed in the currently executing development
+	 * environment without actually loading or starting the plugin
+	 *
+	 * @param pluginId
+	 *          the plugin identifier
+	 * @return <code>true</code> if installed, else <code>false</code>
+	 */
+	public static boolean isInstalled(String pluginId) {
+		return PluginUtilities.getInstallUrl(pluginId) != null;
+	}
 
-  public String getBuild() {
-    if (build != null) {
-      return build;
-    }
-    // Determine if the platform is running
-    boolean isEclipseRunning;
-    try {
-      isEclipseRunning = Platform.isRunning();
-    } catch (NoClassDefFoundError e) {
-      build = UNKNOWN_BUILD;
-      return build;
-    }
-    // If Eclipse is running, get the build from the plugin
-    if (isEclipseRunning) {
-      build = getPluginBuild(getPluginId());
-      return build;
-    }
-    build = UNKNOWN_BUILD;
-    return build;
-  }
+	public String getBuild() {
+		if (build != null) {
+			return build;
+		}
+		// Determine if the platform is running
+		boolean isEclipseRunning;
+		try {
+			isEclipseRunning = Platform.isRunning();
+		} catch (NoClassDefFoundError e) {
+			build = UNKNOWN_BUILD;
+			return build;
+		}
+		// If Eclipse is running, get the build from the plugin
+		if (isEclipseRunning) {
+			build = getPluginBuild(getPluginId());
+			return build;
+		}
+		build = UNKNOWN_BUILD;
+		return build;
+	}
 
-  /**
-   * Answer the build for the specified plugin. This method ASSUMES that we are executing inside an
-   * Eclipse based application.
-   *
-   * @param id
-   *          the unique plugin identifier (not <code>null</code>)
-   * @return the build for the plugin or UNKNOWN if it could not be determined
-   */
-  public static String getPluginBuild(String pluginId) {
-    URL url = PluginUtilities.getUrl(pluginId, PLUGIN_PROPERTIES);
-    if (url != null) {
-      Properties properties = new Properties();
-      InputStream stream = null;
-      try {
-        stream = url.openStream();
-        properties.load(stream);
-      } catch (IOException e) {
-        DesignerPlugin.log(e);
-      } finally {
-        try {
-          if (stream != null) {
-            stream.close();
-          }
-        } catch (Exception e) {
-          DesignerPlugin.log(e);
-        }
-      }
-      String build = properties.getProperty(BUILD_KEY);
-      // If this is a code under development in a runtime workbench, then return today's date
-      if (build == null || build.equals(DEVELOPMENT_BUILD_NUM)) {
-        return getStartDateTimeString();
-      }
-      if (build.length() > 0) {
-        return build;
-      }
-    }
-    return UNKNOWN_BUILD;
-  }
+	/**
+	 * Answer the build for the specified plugin. This method ASSUMES that we are executing inside an
+	 * Eclipse based application.
+	 *
+	 * @param id
+	 *          the unique plugin identifier (not <code>null</code>)
+	 * @return the build for the plugin or UNKNOWN if it could not be determined
+	 */
+	public static String getPluginBuild(String pluginId) {
+		URL url = PluginUtilities.getUrl(pluginId, PLUGIN_PROPERTIES);
+		if (url != null) {
+			Properties properties = new Properties();
+			InputStream stream = null;
+			try {
+				stream = url.openStream();
+				properties.load(stream);
+			} catch (IOException e) {
+				DesignerPlugin.log(e);
+			} finally {
+				try {
+					if (stream != null) {
+						stream.close();
+					}
+				} catch (Exception e) {
+					DesignerPlugin.log(e);
+				}
+			}
+			String build = properties.getProperty(BUILD_KEY);
+			// If this is a code under development in a runtime workbench, then return today's date
+			if (build == null || build.equals(DEVELOPMENT_BUILD_NUM)) {
+				return getStartDateTimeString();
+			}
+			if (build.length() > 0) {
+				return build;
+			}
+		}
+		return UNKNOWN_BUILD;
+	}
 
-  /**
-   * Answer a string in the format "yyyyMMddHHmm" indicating the session start time
-   *
-   * @return a string (not null)
-   */
-  public static String getStartDateTimeString() {
-    if (startTimeString == null) {
-      startTimeString = getCurrentDateTimeString();
-    }
-    return startTimeString;
-  }
+	/**
+	 * Answer a string in the format "yyyyMMddHHmm" indicating the session start time
+	 *
+	 * @return a string (not null)
+	 */
+	public static String getStartDateTimeString() {
+		if (startTimeString == null) {
+			startTimeString = getCurrentDateTimeString();
+		}
+		return startTimeString;
+	}
 
-  private static String startTimeString;
+	private static String startTimeString;
 
-  /**
-   * Answer a string in the format "yyyyMMddHHmm" indicating the current time
-   *
-   * @return a string (not null)
-   */
-  public static String getCurrentDateTimeString() {
-    return new SimpleDateFormat("yyyyMMddHHmm").format(new GregorianCalendar().getTime());
-  }
+	/**
+	 * Answer a string in the format "yyyyMMddHHmm" indicating the current time
+	 *
+	 * @return a string (not null)
+	 */
+	public static String getCurrentDateTimeString() {
+		return new SimpleDateFormat("yyyyMMddHHmm").format(new GregorianCalendar().getTime());
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/reflect/AbstractMethodsImplementorVisitor.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/reflect/AbstractMethodsImplementorVisitor.java
index c3e19dd79..a2c30a3f0 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/reflect/AbstractMethodsImplementorVisitor.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/reflect/AbstractMethodsImplementorVisitor.java
@@ -25,72 +25,72 @@
  * @coverage core.util
  */
 public final class AbstractMethodsImplementorVisitor extends ToBytesClassAdapter {
-  private final String m_className;
-  private boolean m_interface;
+	private final String m_className;
+	private boolean m_interface;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractMethodsImplementorVisitor(String className) {
-    super(ClassWriter.COMPUTE_FRAMES);
-    m_className = className;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractMethodsImplementorVisitor(String className) {
+		super(ClassWriter.COMPUTE_FRAMES);
+		m_className = className;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Class visitor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void visit(int version,
-      int access,
-      String name,
-      String signature,
-      String superName,
-      String[] interfaces) {
-    m_interface = (access & ACC_INTERFACE) != 0;
-    if (!m_interface) {
-      access &= ~ACC_ABSTRACT;
-    }
-    super.visit(version, access, name, signature, superName, interfaces);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Class visitor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void visit(int version,
+			int access,
+			String name,
+			String signature,
+			String superName,
+			String[] interfaces) {
+		m_interface = (access & ACC_INTERFACE) != 0;
+		if (!m_interface) {
+			access &= ~ACC_ABSTRACT;
+		}
+		super.visit(version, access, name, signature, superName, interfaces);
+	}
 
-  @Override
-  public MethodVisitor visitMethod(int access,
-      String name,
-      String desc,
-      String signature,
-      String[] exceptions) {
-    // replace abstract method with method that throws java.lang.Error
-    if ((access & ACC_ABSTRACT) != 0) {
-      if (!m_interface) {
-        MethodVisitor mv =
-            cv.visitMethod(access & ~ACC_ABSTRACT, name, desc, signature, exceptions);
-        mv.visitCode();
-        // throw exception
-        if (!Type.getReturnType(desc).getClassName().equals("void")) {
-          mv.visitTypeInsn(NEW, "java/lang/Error");
-          mv.visitInsn(DUP);
-          mv.visitLdcInsn("Designer implemented stub for abstract method "
-              + m_className
-              + "."
-              + name
-              + desc
-              + " however you can not use this method (we just can not know what it should do).");
-          mv.visitMethodInsn(INVOKESPECIAL, "java/lang/Error", "<init>", "(Ljava/lang/String;)V");
-          mv.visitInsn(ATHROW);
-        } else {
-          mv.visitInsn(RETURN);
-        }
-        // end
-        mv.visitMaxs(0, 0);
-        mv.visitEnd();
-        return mv;
-      }
-    }
-    // default handling
-    return super.visitMethod(access, name, desc, signature, exceptions);
-  }
+	@Override
+	public MethodVisitor visitMethod(int access,
+			String name,
+			String desc,
+			String signature,
+			String[] exceptions) {
+		// replace abstract method with method that throws java.lang.Error
+		if ((access & ACC_ABSTRACT) != 0) {
+			if (!m_interface) {
+				MethodVisitor mv =
+						cv.visitMethod(access & ~ACC_ABSTRACT, name, desc, signature, exceptions);
+				mv.visitCode();
+				// throw exception
+				if (!Type.getReturnType(desc).getClassName().equals("void")) {
+					mv.visitTypeInsn(NEW, "java/lang/Error");
+					mv.visitInsn(DUP);
+					mv.visitLdcInsn("Designer implemented stub for abstract method "
+							+ m_className
+							+ "."
+							+ name
+							+ desc
+							+ " however you can not use this method (we just can not know what it should do).");
+					mv.visitMethodInsn(INVOKESPECIAL, "java/lang/Error", "<init>", "(Ljava/lang/String;)V");
+					mv.visitInsn(ATHROW);
+				} else {
+					mv.visitInsn(RETURN);
+				}
+				// end
+				mv.visitMaxs(0, 0);
+				mv.visitEnd();
+				return mv;
+			}
+		}
+		// default handling
+		return super.visitMethod(access, name, desc, signature, exceptions);
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/reflect/BundleClassLoader.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/reflect/BundleClassLoader.java
index 5c6f0c84c..04ed2a1a1 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/reflect/BundleClassLoader.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/reflect/BundleClassLoader.java
@@ -23,43 +23,43 @@
  * @coverage core.util
  */
 public final class BundleClassLoader extends ClassLoader {
-  private final Bundle m_bundle;
+	private final Bundle m_bundle;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public BundleClassLoader(Bundle bundle) {
-    Assert.isNotNull(bundle);
-    m_bundle = bundle;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public BundleClassLoader(Bundle bundle) {
+		Assert.isNotNull(bundle);
+		m_bundle = bundle;
+	}
 
-  public BundleClassLoader(String bundleId) {
-    Bundle bundle = Platform.getBundle(bundleId);
-    Assert.isNotNull(bundle, "Unable to find Bundle %s", bundleId);
-    m_bundle = bundle;
-  }
+	public BundleClassLoader(String bundleId) {
+		Bundle bundle = Platform.getBundle(bundleId);
+		Assert.isNotNull(bundle, "Unable to find Bundle %s", bundleId);
+		m_bundle = bundle;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ClassLoader
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Class<?> findClass(String name) throws ClassNotFoundException {
-    return m_bundle.loadClass(name);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ClassLoader
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Class<?> findClass(String name) throws ClassNotFoundException {
+		return m_bundle.loadClass(name);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Factory
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link ClassLoader} for {@link Bundle}.
-   */
-  public static ClassLoader create(final Bundle bundle) {
-    return new BundleClassLoader(bundle);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Factory
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link ClassLoader} for {@link Bundle}.
+	 */
+	public static ClassLoader create(final Bundle bundle) {
+		return new BundleClassLoader(bundle);
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/reflect/ClassLoaderLocalMap.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/reflect/ClassLoaderLocalMap.java
index 961ad6542..873bdde60 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/reflect/ClassLoaderLocalMap.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/reflect/ClassLoaderLocalMap.java
@@ -32,161 +32,161 @@
  */
 @SuppressWarnings("unchecked")
 public class ClassLoaderLocalMap implements Opcodes {
-  private static final String NAME = "GEN$$ClassLoaderProperties";
-  private static final Map<Object, Object> globalMap =
-      Collections.synchronizedMap(new WeakHashMap<Object, Object>());
-  private static Method defineMethod;
-  private static Method findLoadedClass;
-  static {
-    try {
-      defineMethod =
-          ClassLoader.class.getDeclaredMethod("defineClass", new Class[]{
-              String.class,
-              byte[].class,
-              int.class,
-              int.class});
-      defineMethod.setAccessible(true);
-      findLoadedClass =
-          ClassLoader.class.getDeclaredMethod("findLoadedClass", new Class[]{String.class});
-      findLoadedClass.setAccessible(true);
-    } catch (NoSuchMethodException e) {
-      throw new RuntimeException(e);
-    }
-  }
+	private static final String NAME = "GEN$$ClassLoaderProperties";
+	private static final Map<Object, Object> globalMap =
+			Collections.synchronizedMap(new WeakHashMap<Object, Object>());
+	private static Method defineMethod;
+	private static Method findLoadedClass;
+	static {
+		try {
+			defineMethod =
+					ClassLoader.class.getDeclaredMethod("defineClass", new Class[]{
+							String.class,
+							byte[].class,
+							int.class,
+							int.class});
+			defineMethod.setAccessible(true);
+			findLoadedClass =
+					ClassLoader.class.getDeclaredMethod("findLoadedClass", new Class[]{String.class});
+			findLoadedClass.setAccessible(true);
+		} catch (NoSuchMethodException e) {
+			throw new RuntimeException(e);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Map
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static boolean containsKey(ClassLoader cl, Object key) {
-    if (cl == null) {
-      return globalMap.containsKey(key);
-    }
-    // synchronizing over ClassLoader is usually safest
-    synchronized (cl) {
-      if (!hasHolder(cl)) {
-        return false;
-      }
-      return getLocalMap(cl).containsKey(key);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Map
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static boolean containsKey(ClassLoader cl, Object key) {
+		if (cl == null) {
+			return globalMap.containsKey(key);
+		}
+		// synchronizing over ClassLoader is usually safest
+		synchronized (cl) {
+			if (!hasHolder(cl)) {
+				return false;
+			}
+			return getLocalMap(cl).containsKey(key);
+		}
+	}
 
-  public static void put(ClassLoader cl, Object key, Object value) {
-    if (cl == null) {
-      globalMap.put(key, value);
-      return;
-    }
-    // synchronizing over ClassLoader is usually safest
-    synchronized (cl) {
-      getLocalMap(cl).put(key, value);
-    }
-  }
+	public static void put(ClassLoader cl, Object key, Object value) {
+		if (cl == null) {
+			globalMap.put(key, value);
+			return;
+		}
+		// synchronizing over ClassLoader is usually safest
+		synchronized (cl) {
+			getLocalMap(cl).put(key, value);
+		}
+	}
 
-  public static Object get(ClassLoader cl, Object key) {
-    if (cl == null) {
-      return globalMap.get(key);
-    }
-    // synchronizing over ClassLoader is usually safest
-    synchronized (cl) {
-      return getLocalMap(cl).get(key);
-    }
-  }
+	public static Object get(ClassLoader cl, Object key) {
+		if (cl == null) {
+			return globalMap.get(key);
+		}
+		// synchronizing over ClassLoader is usually safest
+		synchronized (cl) {
+			return getLocalMap(cl).get(key);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Implementation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static boolean hasHolder(ClassLoader cl) {
-    String propertiesClassName = NAME;
-    try {
-      Class<?> clazz = (Class<?>) findLoadedClass.invoke(cl, new Object[]{propertiesClassName});
-      if (clazz == null) {
-        return false;
-      }
-    } catch (IllegalArgumentException e) {
-      throw new RuntimeException(e);
-    } catch (IllegalAccessException e) {
-      throw new RuntimeException(e);
-    } catch (InvocationTargetException e) {
-      throw new RuntimeException(e.getTargetException());
-    }
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Implementation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static boolean hasHolder(ClassLoader cl) {
+		String propertiesClassName = NAME;
+		try {
+			Class<?> clazz = (Class<?>) findLoadedClass.invoke(cl, new Object[]{propertiesClassName});
+			if (clazz == null) {
+				return false;
+			}
+		} catch (IllegalArgumentException e) {
+			throw new RuntimeException(e);
+		} catch (IllegalAccessException e) {
+			throw new RuntimeException(e);
+		} catch (InvocationTargetException e) {
+			throw new RuntimeException(e.getTargetException());
+		}
+		return true;
+	}
 
-  private static Map<Object, Object> getLocalMap(ClassLoader cl) {
-    String holderClassName = NAME;
-    Class<?> holderClass;
-    try {
-      holderClass = (Class<?>) findLoadedClass.invoke(cl, new Object[]{holderClassName});
-    } catch (IllegalArgumentException e) {
-      throw new RuntimeException(e);
-    } catch (IllegalAccessException e) {
-      throw new RuntimeException(e);
-    } catch (InvocationTargetException e) {
-      throw new RuntimeException(e.getTargetException());
-    }
-    if (holderClass == null) {
-      byte[] classBytes = buildHolderByteCode(holderClassName);
-      try {
-        holderClass =
-            (Class<?>) defineMethod.invoke(
-                cl,
-                new Object[]{
-                    holderClassName,
-                    classBytes,
-                    Integer.valueOf(0),
-                    Integer.valueOf(classBytes.length)});
-      } catch (InvocationTargetException e1) {
-        throw new RuntimeException(e1.getTargetException());
-      } catch (Throwable e1) {
-        throw new RuntimeException(e1);
-      }
-    }
-    try {
-      return (Map<Object, Object>) holderClass.getDeclaredField("localMap").get(null);
-    } catch (Throwable e1) {
-      throw new RuntimeException(e1);
-    }
-  }
+	private static Map<Object, Object> getLocalMap(ClassLoader cl) {
+		String holderClassName = NAME;
+		Class<?> holderClass;
+		try {
+			holderClass = (Class<?>) findLoadedClass.invoke(cl, new Object[]{holderClassName});
+		} catch (IllegalArgumentException e) {
+			throw new RuntimeException(e);
+		} catch (IllegalAccessException e) {
+			throw new RuntimeException(e);
+		} catch (InvocationTargetException e) {
+			throw new RuntimeException(e.getTargetException());
+		}
+		if (holderClass == null) {
+			byte[] classBytes = buildHolderByteCode(holderClassName);
+			try {
+				holderClass =
+						(Class<?>) defineMethod.invoke(
+								cl,
+								new Object[]{
+										holderClassName,
+										classBytes,
+										Integer.valueOf(0),
+										Integer.valueOf(classBytes.length)});
+			} catch (InvocationTargetException e1) {
+				throw new RuntimeException(e1.getTargetException());
+			} catch (Throwable e1) {
+				throw new RuntimeException(e1);
+			}
+		}
+		try {
+			return (Map<Object, Object>) holderClass.getDeclaredField("localMap").get(null);
+		} catch (Throwable e1) {
+			throw new RuntimeException(e1);
+		}
+	}
 
-  private static byte[] buildHolderByteCode(String holderClassName) {
-    ClassWriter cw = new ClassWriter(0);
-    FieldVisitor fv;
-    MethodVisitor mv;
-    cw.visit(V1_2, ACC_PUBLIC + ACC_SUPER, holderClassName, null, "java/lang/Object", null);
-    {
-      fv =
-          cw.visitField(
-              ACC_PUBLIC + ACC_FINAL + ACC_STATIC,
-              "localMap",
-              "Ljava/util/Map;",
-              null,
-              null);
-      fv.visitEnd();
-    }
-    {
-      mv = cw.visitMethod(ACC_STATIC, "<clinit>", "()V", null, null);
-      mv.visitCode();
-      mv.visitTypeInsn(NEW, "java/util/WeakHashMap");
-      mv.visitInsn(DUP);
-      mv.visitMethodInsn(INVOKESPECIAL, "java/util/WeakHashMap", "<init>", "()V");
-      mv.visitFieldInsn(PUTSTATIC, holderClassName, "localMap", "Ljava/util/Map;");
-      mv.visitInsn(RETURN);
-      mv.visitMaxs(2, 0);
-      mv.visitEnd();
-    }
-    {
-      mv = cw.visitMethod(ACC_PUBLIC, "<init>", "()V", null, null);
-      mv.visitCode();
-      mv.visitVarInsn(ALOAD, 0);
-      mv.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "<init>", "()V");
-      mv.visitInsn(RETURN);
-      mv.visitMaxs(1, 1);
-      mv.visitEnd();
-    }
-    cw.visitEnd();
-    return cw.toByteArray();
-  }
+	private static byte[] buildHolderByteCode(String holderClassName) {
+		ClassWriter cw = new ClassWriter(0);
+		FieldVisitor fv;
+		MethodVisitor mv;
+		cw.visit(V1_2, ACC_PUBLIC + ACC_SUPER, holderClassName, null, "java/lang/Object", null);
+		{
+			fv =
+					cw.visitField(
+							ACC_PUBLIC + ACC_FINAL + ACC_STATIC,
+							"localMap",
+							"Ljava/util/Map;",
+							null,
+							null);
+			fv.visitEnd();
+		}
+		{
+			mv = cw.visitMethod(ACC_STATIC, "<clinit>", "()V", null, null);
+			mv.visitCode();
+			mv.visitTypeInsn(NEW, "java/util/WeakHashMap");
+			mv.visitInsn(DUP);
+			mv.visitMethodInsn(INVOKESPECIAL, "java/util/WeakHashMap", "<init>", "()V");
+			mv.visitFieldInsn(PUTSTATIC, holderClassName, "localMap", "Ljava/util/Map;");
+			mv.visitInsn(RETURN);
+			mv.visitMaxs(2, 0);
+			mv.visitEnd();
+		}
+		{
+			mv = cw.visitMethod(ACC_PUBLIC, "<init>", "()V", null, null);
+			mv.visitCode();
+			mv.visitVarInsn(ALOAD, 0);
+			mv.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "<init>", "()V");
+			mv.visitInsn(RETURN);
+			mv.visitMaxs(1, 1);
+			mv.visitEnd();
+		}
+		cw.visitEnd();
+		return cw.toByteArray();
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/reflect/ClassMap.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/reflect/ClassMap.java
index a761e047e..7bfe0395f 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/reflect/ClassMap.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/reflect/ClassMap.java
@@ -20,56 +20,56 @@
  * @coverage core.util
  */
 public final class ClassMap<V> {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Creates new instance of {@link ClassMap}.
-   */
-  public static <V> ClassMap<V> create() {
-    return new ClassMap<V>();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Creates new instance of {@link ClassMap}.
+	 */
+	public static <V> ClassMap<V> create() {
+		return new ClassMap<V>();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Map
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void put(Class<?> key, V value) {
-    getMap(key).put(key, value);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Map
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void put(Class<?> key, V value) {
+		getMap(key).put(key, value);
+	}
 
-  public V get(Class<?> key) {
-    return getMap(key).get(key);
-  }
+	public V get(Class<?> key) {
+		return getMap(key).get(key);
+	}
 
-  public void remove(Class<?> key) {
-    getMap(key).remove(key);
-  }
+	public void remove(Class<?> key) {
+		getMap(key).remove(key);
+	}
 
-  public void clear(ClassLoader classLoader) {
-    getMap(classLoader).clear();
-  }
+	public void clear(ClassLoader classLoader) {
+		getMap(classLoader).clear();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Implementation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Map<Class<?>, V> getMap(Class<?> key) {
-    ClassLoader classLoader = key.getClassLoader();
-    return getMap(classLoader);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Implementation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Map<Class<?>, V> getMap(Class<?> key) {
+		ClassLoader classLoader = key.getClassLoader();
+		return getMap(classLoader);
+	}
 
-  @SuppressWarnings("unchecked")
-  private Map<Class<?>, V> getMap(ClassLoader classLoader) {
-    Object map = ClassLoaderLocalMap.get(classLoader, this);
-    if (map == null) {
-      map = new HashMap<Class<?>, V>();
-      ClassLoaderLocalMap.put(classLoader, this, map);
-    }
-    return (Map<Class<?>, V>) map;
-  }
+	@SuppressWarnings("unchecked")
+	private Map<Class<?>, V> getMap(ClassLoader classLoader) {
+		Object map = ClassLoaderLocalMap.get(classLoader, this);
+		if (map == null) {
+			map = new HashMap<Class<?>, V>();
+			ClassLoaderLocalMap.put(classLoader, this, map);
+		}
+		return (Map<Class<?>, V>) map;
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/reflect/CompositeClassLoader.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/reflect/CompositeClassLoader.java
index ee76edbfb..ce74c479a 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/reflect/CompositeClassLoader.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/reflect/CompositeClassLoader.java
@@ -32,153 +32,153 @@
  * @coverage core.util
  */
 public class CompositeClassLoader extends ClassLoader {
-  private final List<ClassLoader> m_classLoaders = Lists.newArrayList();
-  private final List<List<String>> m_classNamespaces = Lists.newArrayList();
-  private final List<List<String>> m_resourceNamespaces = Lists.newArrayList();
+	private final List<ClassLoader> m_classLoaders = Lists.newArrayList();
+	private final List<List<String>> m_classNamespaces = Lists.newArrayList();
+	private final List<List<String>> m_resourceNamespaces = Lists.newArrayList();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link List} of underlying {@link ClassLoader}'s.
-   */
-  public List<ClassLoader> getClassLoaders() {
-    return m_classLoaders;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link List} of underlying {@link ClassLoader}'s.
+	 */
+	public List<ClassLoader> getClassLoaders() {
+		return m_classLoaders;
+	}
 
-  /**
-   * Adds new {@link ClassLoader} into composition.
-   *
-   * @param namespaces
-   *          the {@link List} of {@link String} prefixes for package name (with '.' dots). May be
-   *          <code>null</code>, in this case this {@link ClassLoader} will be always used for
-   *          attempt to load {@link Class}.
-   */
-  public void add(ClassLoader classLoader, List<String> namespaces) {
-    add(classLoader, namespaces, namespaces);
-  }
+	/**
+	 * Adds new {@link ClassLoader} into composition.
+	 *
+	 * @param namespaces
+	 *          the {@link List} of {@link String} prefixes for package name (with '.' dots). May be
+	 *          <code>null</code>, in this case this {@link ClassLoader} will be always used for
+	 *          attempt to load {@link Class}.
+	 */
+	public void add(ClassLoader classLoader, List<String> namespaces) {
+		add(classLoader, namespaces, namespaces);
+	}
 
-  /**
-   * Adds new {@link ClassLoader} into composition.
-   *
-   * @param resourcePrefixes
-   *          the {@link List} of {@link String} prefixes for package name (with '.' dots). May be
-   *          <code>null</code>, in this case this {@link ClassLoader} will be always used for
-   *          attempt to load {@link Class}.
-   */
-  public void add(ClassLoader classLoader, List<String> classPrefixes, List<String> resourcePrefixes) {
-    if (classLoader != null) {
-      m_classLoaders.add(0, classLoader);
-      m_classNamespaces.add(0, classPrefixes);
-      // resource namespace: convert to use '/' instead of '.' to do this only one time
-      if (resourcePrefixes != null) {
-        List<String> resourceNamespaces = Lists.newArrayList();
-        for (String namespace : resourcePrefixes) {
-          resourceNamespaces.add(namespace.replace('.', '/'));
-        }
-        m_resourceNamespaces.add(0, resourceNamespaces);
-      } else {
-        m_resourceNamespaces.add(0, null);
-      }
-    }
-  }
+	/**
+	 * Adds new {@link ClassLoader} into composition.
+	 *
+	 * @param resourcePrefixes
+	 *          the {@link List} of {@link String} prefixes for package name (with '.' dots). May be
+	 *          <code>null</code>, in this case this {@link ClassLoader} will be always used for
+	 *          attempt to load {@link Class}.
+	 */
+	public void add(ClassLoader classLoader, List<String> classPrefixes, List<String> resourcePrefixes) {
+		if (classLoader != null) {
+			m_classLoaders.add(0, classLoader);
+			m_classNamespaces.add(0, classPrefixes);
+			// resource namespace: convert to use '/' instead of '.' to do this only one time
+			if (resourcePrefixes != null) {
+				List<String> resourceNamespaces = Lists.newArrayList();
+				for (String namespace : resourcePrefixes) {
+					resourceNamespaces.add(namespace.replace('.', '/'));
+				}
+				m_resourceNamespaces.add(0, resourceNamespaces);
+			} else {
+				m_resourceNamespaces.add(0, null);
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ClassLoader
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Package getPackage(String name) {
-    try {
-      Method method_getPackage =
-          ClassLoader.class.getDeclaredMethod("getPackage", new Class[]{String.class});
-      method_getPackage.setAccessible(true);
-      for (int i = 0; i < m_classLoaders.size(); i++) {
-        ClassLoader classLoader = m_classLoaders.get(i);
-        Package pkg = (Package) method_getPackage.invoke(classLoader, new Object[]{name});
-        if (pkg != null) {
-          return pkg;
-        }
-      }
-    } catch (Throwable e) {
-    }
-    return super.getPackage(name);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ClassLoader
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Package getPackage(String name) {
+		try {
+			Method method_getPackage =
+					ClassLoader.class.getDeclaredMethod("getPackage", new Class[]{String.class});
+			method_getPackage.setAccessible(true);
+			for (int i = 0; i < m_classLoaders.size(); i++) {
+				ClassLoader classLoader = m_classLoaders.get(i);
+				Package pkg = (Package) method_getPackage.invoke(classLoader, new Object[]{name});
+				if (pkg != null) {
+					return pkg;
+				}
+			}
+		} catch (Throwable e) {
+		}
+		return super.getPackage(name);
+	}
 
-  @Override
-  public URL getResource(String name) {
-    for (int i = 0; i < m_classLoaders.size(); i++) {
-      ClassLoader classLoader = m_classLoaders.get(i);
-      // check namespace
-      {
-        List<String> namespaces = m_resourceNamespaces.get(i);
-        if (!hasNamespace(name, namespaces)) {
-          continue;
-        }
-      }
-      // try to find
-      URL resource = classLoader.getResource(name);
-      if (resource != null) {
-        return resource;
-      }
-    }
-    // not found
-    return null;
-  }
+	@Override
+	public URL getResource(String name) {
+		for (int i = 0; i < m_classLoaders.size(); i++) {
+			ClassLoader classLoader = m_classLoaders.get(i);
+			// check namespace
+			{
+				List<String> namespaces = m_resourceNamespaces.get(i);
+				if (!hasNamespace(name, namespaces)) {
+					continue;
+				}
+			}
+			// try to find
+			URL resource = classLoader.getResource(name);
+			if (resource != null) {
+				return resource;
+			}
+		}
+		// not found
+		return null;
+	}
 
-  @Override
-  protected Enumeration<URL> findResources(String name) throws IOException {
-    Set<URL> allResources = Sets.newHashSet();
-    for (ClassLoader classLoader : m_classLoaders) {
-      Enumeration<URL> resources = classLoader.getResources(name);
-      CollectionUtils.addAll(allResources, resources);
-    }
-    return Iterators.asEnumeration(allResources.iterator());
-  }
+	@Override
+	protected Enumeration<URL> findResources(String name) throws IOException {
+		Set<URL> allResources = Sets.newHashSet();
+		for (ClassLoader classLoader : m_classLoaders) {
+			Enumeration<URL> resources = classLoader.getResources(name);
+			CollectionUtils.addAll(allResources, resources);
+		}
+		return Iterators.asEnumeration(allResources.iterator());
+	}
 
-  @Override
-  protected Class<?> findClass(String name) throws ClassNotFoundException {
-    for (int i = 0; i < m_classLoaders.size(); i++) {
-      ClassLoader classLoader = m_classLoaders.get(i);
-      // check namespace
-      {
-        List<String> namespaces = m_classNamespaces.get(i);
-        if (!hasNamespace(name, namespaces)) {
-          continue;
-        }
-      }
-      // try to load
-      try {
-        return classLoader.loadClass(name);
-      } catch (ClassNotFoundException notFound) {
-        // OK... try another one
-      }
-    }
-    // not found
-    throw new ClassNotFoundException(name);
-  }
+	@Override
+	protected Class<?> findClass(String name) throws ClassNotFoundException {
+		for (int i = 0; i < m_classLoaders.size(); i++) {
+			ClassLoader classLoader = m_classLoaders.get(i);
+			// check namespace
+			{
+				List<String> namespaces = m_classNamespaces.get(i);
+				if (!hasNamespace(name, namespaces)) {
+					continue;
+				}
+			}
+			// try to load
+			try {
+				return classLoader.loadClass(name);
+			} catch (ClassNotFoundException notFound) {
+				// OK... try another one
+			}
+		}
+		// not found
+		throw new ClassNotFoundException(name);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if given name is in one of the given namespace's. Always returns
-   *         <code>true</code> if given namespace's is <code>null</code>.
-   */
-  private static boolean hasNamespace(String name, List<String> namespaces) {
-    if (namespaces != null) {
-      for (String namespace : namespaces) {
-        if (name.startsWith(namespace)) {
-          return true;
-        }
-      }
-      return false;
-    }
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if given name is in one of the given namespace's. Always returns
+	 *         <code>true</code> if given namespace's is <code>null</code>.
+	 */
+	private static boolean hasNamespace(String name, List<String> namespaces) {
+		if (namespaces != null) {
+			for (String namespace : namespaces) {
+				if (name.startsWith(namespace)) {
+					return true;
+				}
+			}
+			return false;
+		}
+		return true;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/reflect/IClassLoaderInitializer.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/reflect/IClassLoaderInitializer.java
index 8a2a528f3..635aa303f 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/reflect/IClassLoaderInitializer.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/reflect/IClassLoaderInitializer.java
@@ -17,13 +17,13 @@
  * @coverage core.util
  */
 public interface IClassLoaderInitializer {
-  /**
-   * Project {@link ClassLoader} was created and should be initialized.
-   */
-  void initialize(ClassLoader classLoader);
+	/**
+	 * Project {@link ClassLoader} was created and should be initialized.
+	 */
+	void initialize(ClassLoader classLoader);
 
-  /**
-   * Clear all resources association with project {@link ClassLoader}.
-   */
-  void deinitialize(ClassLoader classLoader);
+	/**
+	 * Clear all resources association with project {@link ClassLoader}.
+	 */
+	void deinitialize(ClassLoader classLoader);
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/reflect/IntrospectionHelper.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/reflect/IntrospectionHelper.java
index 40dccd0f4..c8c769f08 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/reflect/IntrospectionHelper.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/reflect/IntrospectionHelper.java
@@ -28,95 +28,95 @@
  * @coverage core.util
  */
 public final class IntrospectionHelper {
-  private final Class<?> m_clazz;
-  private List<BeanInfo> m_beanInfos;
-  private BeanDescriptor m_beanDescriptor;
+	private final Class<?> m_clazz;
+	private List<BeanInfo> m_beanInfos;
+	private BeanDescriptor m_beanDescriptor;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public IntrospectionHelper(Class<?> clazz) {
-    m_clazz = clazz;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public IntrospectionHelper(Class<?> clazz) {
+		m_clazz = clazz;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the consolidated {@link BeanDescriptor}.
-   */
-  public BeanDescriptor getBeanDescriptor() throws IntrospectionException {
-    if (m_beanDescriptor == null) {
-      // temporary data structure for bean descriptor
-      class BeanDescData {
-        String name;
-        String displayName;
-        String shortDescription;
-        Class<?> customizerClass;
-        Map<String, Object> values = Maps.newTreeMap();
-      }
-      BeanDescData beanDescData = new BeanDescData();
-      // collect the bean descriptor data from all classes in supertype hierarchy
-      for (BeanInfo info : getBeanInfos()) {
-        BeanDescriptor desc = info.getBeanDescriptor();
-        if (desc != null) {
-          // set the name
-          if (beanDescData.name == null) {
-            beanDescData.name = desc.getName();
-          }
-          // set the display name
-          if (beanDescData.displayName == null) {
-            beanDescData.displayName = desc.getDisplayName();
-          }
-          // set the short description
-          if (beanDescData.shortDescription == null) {
-            beanDescData.shortDescription = desc.getShortDescription();
-          }
-          // set the customizer class
-          if (beanDescData.customizerClass == null) {
-            beanDescData.customizerClass = desc.getCustomizerClass();
-          }
-          // set the attribute values
-          Enumeration<String> attrNames = desc.attributeNames();
-          while (attrNames.hasMoreElements()) {
-            String name = attrNames.nextElement();
-            Object value = desc.getValue(name);
-            if (!beanDescData.values.containsKey(name)) {
-              beanDescData.values.put(name, value);
-            }
-          }
-        }
-      }
-      // create a new bean descriptor with the collected data
-      m_beanDescriptor = new BeanDescriptor(m_clazz, beanDescData.customizerClass);
-      m_beanDescriptor.setName(beanDescData.name);
-      m_beanDescriptor.setDisplayName(beanDescData.displayName);
-      m_beanDescriptor.setShortDescription(beanDescData.shortDescription);
-      for (Map.Entry<String, Object> entry : beanDescData.values.entrySet()) {
-        String name = entry.getKey();
-        Object value = entry.getValue();
-        m_beanDescriptor.setValue(name, value);
-      }
-    }
-    return m_beanDescriptor;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the consolidated {@link BeanDescriptor}.
+	 */
+	public BeanDescriptor getBeanDescriptor() throws IntrospectionException {
+		if (m_beanDescriptor == null) {
+			// temporary data structure for bean descriptor
+			class BeanDescData {
+				String name;
+				String displayName;
+				String shortDescription;
+				Class<?> customizerClass;
+				Map<String, Object> values = Maps.newTreeMap();
+			}
+			BeanDescData beanDescData = new BeanDescData();
+			// collect the bean descriptor data from all classes in supertype hierarchy
+			for (BeanInfo info : getBeanInfos()) {
+				BeanDescriptor desc = info.getBeanDescriptor();
+				if (desc != null) {
+					// set the name
+					if (beanDescData.name == null) {
+						beanDescData.name = desc.getName();
+					}
+					// set the display name
+					if (beanDescData.displayName == null) {
+						beanDescData.displayName = desc.getDisplayName();
+					}
+					// set the short description
+					if (beanDescData.shortDescription == null) {
+						beanDescData.shortDescription = desc.getShortDescription();
+					}
+					// set the customizer class
+					if (beanDescData.customizerClass == null) {
+						beanDescData.customizerClass = desc.getCustomizerClass();
+					}
+					// set the attribute values
+					Enumeration<String> attrNames = desc.attributeNames();
+					while (attrNames.hasMoreElements()) {
+						String name = attrNames.nextElement();
+						Object value = desc.getValue(name);
+						if (!beanDescData.values.containsKey(name)) {
+							beanDescData.values.put(name, value);
+						}
+					}
+				}
+			}
+			// create a new bean descriptor with the collected data
+			m_beanDescriptor = new BeanDescriptor(m_clazz, beanDescData.customizerClass);
+			m_beanDescriptor.setName(beanDescData.name);
+			m_beanDescriptor.setDisplayName(beanDescData.displayName);
+			m_beanDescriptor.setShortDescription(beanDescData.shortDescription);
+			for (Map.Entry<String, Object> entry : beanDescData.values.entrySet()) {
+				String name = entry.getKey();
+				Object value = entry.getValue();
+				m_beanDescriptor.setValue(name, value);
+			}
+		}
+		return m_beanDescriptor;
+	}
 
-  /**
-   * @return the complete {@link List} of {@link BeanInfo} objects for the JavaBean and it's
-   *         super-classes.
-   */
-  private List<BeanInfo> getBeanInfos() throws IntrospectionException {
-    if (m_beanInfos == null) {
-      m_beanInfos = Lists.newArrayList();
-      for (Class<?> cls = m_clazz; cls != null; cls = cls.getSuperclass()) {
-        BeanInfo info = Introspector.getBeanInfo(cls);
-        m_beanInfos.add(info);
-      }
-    }
-    return m_beanInfos;
-  }
+	/**
+	 * @return the complete {@link List} of {@link BeanInfo} objects for the JavaBean and it's
+	 *         super-classes.
+	 */
+	private List<BeanInfo> getBeanInfos() throws IntrospectionException {
+		if (m_beanInfos == null) {
+			m_beanInfos = Lists.newArrayList();
+			for (Class<?> cls = m_clazz; cls != null; cls = cls.getSuperclass()) {
+				BeanInfo info = Introspector.getBeanInfo(cls);
+				m_beanInfos.add(info);
+			}
+		}
+		return m_beanInfos;
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/reflect/ReflectionUtils.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/reflect/ReflectionUtils.java
index 04eb1c63a..e3666633f 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/reflect/ReflectionUtils.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/reflect/ReflectionUtils.java
@@ -55,1574 +55,1574 @@
  * @coverage core.util
  */
 public class ReflectionUtils {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private ReflectionUtils() {
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Java 8 uses "MethodRef" that uses {@link SoftReference} to a {@link Method}. But this means
-   * that when it looses a reference to a <em>protected</em> {@link Method}, it cannot restore it. I
-   * wish we had done it differently, not by using {@link PropertyDescriptor}.
-   */
-  public static Method getWriteMethod(PropertyDescriptor propertyDescriptor) {
-    try {
-      return propertyDescriptor.getWriteMethod();
-    } catch (Throwable e) {
-      return null;
-    }
-  }
-
-  /**
-   * Java 8 uses "MethodRef" that uses {@link SoftReference} to a {@link Method}. But this means
-   * that when it looses a reference to a <em>protected</em> {@link Method}, it cannot restore it. I
-   * wish we had done it differently, not by using {@link PropertyDescriptor}.
-   */
-  public static Method getReadMethod(PropertyDescriptor propertyDescriptor) {
-    try {
-      return propertyDescriptor.getReadMethod();
-    } catch (Throwable e) {
-      return null;
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Class
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link ClassLoader} that was used to load given {@link Class}. Always return not
-   *         <code>null</code> value, even if {@link Class} was loaded using bootstrap
-   *         {@link ClassLoader}.
-   */
-  public static ClassLoader getClassLoader(Class<?> clazz) {
-    ClassLoader classLoader = clazz.getClassLoader();
-    if (classLoader == null) {
-      classLoader = ClassLoader.getSystemClassLoader();
-    }
-    return classLoader;
-  }
-
-  /**
-   * @return the {@link Class} with given name - primitive or {@link Object} (including arrays).
-   */
-  public static Class<?> getClassByName(ClassLoader classLoader, String className) throws Exception {
-    Assert.isNotNull(className);
-    // check for primitive type
-    if ("boolean".equals(className)) {
-      return boolean.class;
-    } else if ("byte".equals(className)) {
-      return byte.class;
-    } else if ("char".equals(className)) {
-      return char.class;
-    } else if ("short".equals(className)) {
-      return short.class;
-    } else if ("int".equals(className)) {
-      return int.class;
-    } else if ("long".equals(className)) {
-      return long.class;
-    } else if ("float".equals(className)) {
-      return float.class;
-    } else if ("double".equals(className)) {
-      return double.class;
-    }
-    // check for array
-    if (className.endsWith("[]")) {
-      int dimensions = StringUtils.countMatches(className, "[]");
-      String componentClassName = StringUtils.substringBefore(className, "[]");
-      Class<?> componentClass = getClassByName(classLoader, componentClassName);
-      return Array.newInstance(componentClass, new int[dimensions]).getClass();
-    }
-    // OK, load this class as object
-    return classLoader.loadClass(className);
-  }
-
-  /**
-   * @return <code>true</code> if given {@link ClassLoader} has class with given name.
-   */
-  public static boolean hasClass(ClassLoader classLoader, String name) {
-    try {
-      classLoader.loadClass(name);
-      return true;
-    } catch (Throwable e) {
-      return false;
-    }
-  }
-
-  /**
-   * @return the {@link Object} default value for class with given {@code className}.
-   */
-  public static Object getDefaultValue(String className) {
-    // primitive
-    if ("boolean".equals(className)) {
-      return false;
-    } else if ("byte".equals(className)) {
-      return (byte) 0;
-    } else if ("char".equals(className)) {
-      return (char) 0;
-    } else if ("short".equals(className)) {
-      return (short) 0;
-    } else if ("int".equals(className)) {
-      return 0;
-    } else if ("long".equals(className)) {
-      return 0L;
-    } else if ("float".equals(className)) {
-      return 0.0f;
-    } else if ("double".equals(className)) {
-      return 0.0;
-    }
-    // Object
-    return null;
-  }
-
-  /**
-   * @return the {@link Object} default value for class - false/zero for primitives,
-   *         <code>"dynamic"</code> for {@link String} and empty collections.
-   */
-  public static Object getDefaultValue(Class<?> clazz) {
-    if (clazz.isPrimitive()) {
-      return getDefaultValue(clazz.getName());
-    }
-    // String
-    if (isSuccessorOf(clazz, "java.lang.String")) {
-      return "<dynamic>";
-    }
-    // collections
-    if (isSuccessorOf(clazz, "java.util.List")) {
-      return Lists.newArrayList();
-    }
-    if (isSuccessorOf(clazz, "java.util.Set")) {
-      return Sets.newHashSet();
-    }
-    if (isSuccessorOf(clazz, "java.util.Map")) {
-      return new HashMap<>();
-    }
-    // Object
-    return null;
-  }
-
-  /**
-   * @param clazz
-   *          the {@link Class} to check.
-   * @param requiredClass
-   *          the name of {@link Class} that should be extended, or name of interface that should be
-   *          implemented.
-   *
-   * @return <code>true</code> if given {@link Class} extends <code>requiredClass</code> or
-   *         implements interface with this name.
-   */
-  public static boolean isSuccessorOf(Class<?> clazz, String requiredClass) {
-    if (clazz == null) {
-      return false;
-    }
-    String clazzName = clazz.getName();
-    // check cache
-    {
-      IsSuccessorResult result = isSuccessorOf_checkCache(clazz, requiredClass);
-      if (result == IsSuccessorResult.TRUE) {
-        return true;
-      }
-      if (result == IsSuccessorResult.FALSE) {
-        return false;
-      }
-    }
-    // check this Class
-    if (clazzName.equals(requiredClass)) {
-      isSuccessorOf_addCache(clazz, requiredClass, IsSuccessorResult.TRUE);
-      return true;
-    }
-    // check super-Class
-    if (isSuccessorOf(clazz.getSuperclass(), requiredClass)) {
-      isSuccessorOf_addCache(clazz, requiredClass, IsSuccessorResult.TRUE);
-      return true;
-    }
-    // check interfaces
-    for (Class<?> interfaceClass : clazz.getInterfaces()) {
-      if (isSuccessorOf(interfaceClass, requiredClass)) {
-        isSuccessorOf_addCache(clazz, requiredClass, IsSuccessorResult.TRUE);
-        return true;
-      }
-    }
-    // no, not required Class
-    isSuccessorOf_addCache(clazz, requiredClass, IsSuccessorResult.FALSE);
-    return false;
-  }
-
-  private enum IsSuccessorResult {
-    UNKNOWN, FALSE, TRUE
-  }
-
-  private static final Map<String, WeakHashMap<Class<?>, IsSuccessorResult>> m_isSuccessorOfCache =
-      new HashMap<>();
-
-  private static void isSuccessorOf_addCache(Class<?> clazz,
-      String requiredClass,
-      IsSuccessorResult result) {
-    WeakHashMap<Class<?>, IsSuccessorResult> classes = m_isSuccessorOfCache.get(requiredClass);
-    if (classes == null) {
-      classes = new WeakHashMap<>();
-      m_isSuccessorOfCache.put(requiredClass, classes);
-    }
-    classes.put(clazz, result);
-  }
-
-  private static IsSuccessorResult isSuccessorOf_checkCache(Class<?> clazz, String requiredClass) {
-    WeakHashMap<Class<?>, IsSuccessorResult> classes = m_isSuccessorOfCache.get(requiredClass);
-    if (classes != null) {
-      return classes.get(clazz);
-    }
-    return IsSuccessorResult.UNKNOWN;
-  }
-
-  /**
-   * @return <code>true</code> if candidate can be used as target {@link Class}.
-   */
-  public static boolean isAssignableFrom(Class<?> targetClass, Object candidate) {
-    // primitive
-    if (targetClass.isPrimitive()) {
-      if (targetClass == byte.class) {
-        return candidate instanceof Byte;
-      }
-      if (targetClass == char.class) {
-        return candidate instanceof Character;
-      }
-      if (targetClass == short.class) {
-        return candidate instanceof Short;
-      }
-      if (targetClass == int.class) {
-        return candidate instanceof Integer;
-      }
-      if (targetClass == long.class) {
-        return candidate instanceof Long;
-      }
-      if (targetClass == float.class) {
-        return candidate instanceof Float;
-      }
-      if (targetClass == double.class) {
-        return candidate instanceof Double;
-      }
-    }
-    // object
-    if (candidate == null) {
-      return true;
-    }
-    return targetClass.isInstance(candidate);
-  }
-
-  /**
-   * @return <code>true</code> if candidate can be used as target {@link Class}.
-   */
-  public static boolean isSuccessorOf(Object candidate, String requiredClass) {
-    if (candidate == null) {
-      return false;
-    }
-    Class<?> candidateClass = candidate.getClass();
-    if (!requiredClass.contains(".")) {
-      Field fieldTYPE = getFieldByName(candidateClass, "TYPE");
-      if (fieldTYPE != null) {
-        Class<?> primitiveType = (Class<?>) getFieldObject(candidateClass, "TYPE");
-        if (ObjectUtils.equals(primitiveType.getName(), requiredClass)) {
-          return true;
-        }
-      }
-      return false;
-    } else {
-      return isSuccessorOf(candidateClass, requiredClass);
-    }
-  }
-
-  /**
-   * @return the result of {@link Class#isMemberClass()} and ignore {@link NoClassDefFoundError}.
-   */
-  public static boolean isMemberClass(final Class<?> clazz) {
-    Assert.isNotNull(clazz);
-    return ExecutionUtils.runObjectIgnore(() -> clazz.isMemberClass(), false);
-  }
-
-  /**
-   * @return the list of all supertypes: superclasses and interfaces. Class itself and its
-   *         interfaces first, then superclass.
-   */
-  public static List<Class<?>> getSuperHierarchy(Class<?> clazz) throws Exception {
-    List<Class<?>> types = Lists.newArrayList();
-    types.add(clazz);
-    // check super Class
-    Class<?> superclass = clazz.getSuperclass();
-    if (superclass != null) {
-      // interfaces
-      for (Class<?> interfaceClass : clazz.getInterfaces()) {
-        types.addAll(getSuperHierarchy(interfaceClass));
-      }
-      // super Class
-      types.addAll(getSuperHierarchy(superclass));
-    }
-    // done
-    return types;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Specific
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if two arrays have same number of classes and all "specific" classes
-   *         are {@link #isMoreSpecific(Class, Class)} than "base".
-   */
-  public static boolean isMoreSpecific(Class<?> base[], Class<?> specific[]) {
-    if (base.length != specific.length) {
-      return false;
-    }
-    for (int i = 0; i < base.length; i++) {
-      if (!isMoreSpecific(base[i], specific[i])) {
-        return false;
-      }
-    }
-    return true;
-  }
-
-  /**
-   * @return <code>true</code> if "specific" is "base" or subclass of "base".
-   */
-  public static boolean isMoreSpecific(Class<?> base, Class<?> specific) {
-    return base.isAssignableFrom(specific);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Enchanced classes support
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if given {@link Class} that is "enchanced", i.e. is generated by
-   *         "ByteBuddy", or some other library.
-   */
-  public static boolean isEnchancedClass(Class<?> clazz) {
-    return clazz.getName().indexOf('$') != -1;
-  }
-
-  /**
-   * @return the super-Class of given {@link Class} that is "normal", i.e. is not generated by
-   *         "ByteBuddy", or some other library. For now we just check that {@link Class} name has no
-   *         <code>'$'</code> character.
-   */
-  public static Class<?> getNormalClass(Class<?> clazz) {
-    while (isEnchancedClass(clazz)) {
-      clazz = clazz.getSuperclass();
-    }
-    return clazz;
-  }
-
-  /**
-   * @return the {@link String} presentation of given {@link Method}. If this {@link Method} is
-   *         declared in some "enchanced" {@link Class}, and there was same {@link Method} in
-   *         "normal" {@link Class}, then <code>toString</code> of "normal" {@link Method} returned.
-   */
-  public static String toString(Method method) {
-    String methodSignature = getMethodSignature(method);
-    // try to find in "normal" Class method with same signature
-    while (isEnchancedClass(method.getDeclaringClass())) {
-      Class<?> superClass = method.getDeclaringClass().getSuperclass();
-      Method superMethod = getMethodBySignature(superClass, methodSignature);
-      if (superMethod == null) {
-        break;
-      }
-      method = superMethod;
-    }
-    // OK, use toString()
-    return method.toString();
-  }
-
-  /**
-   * @return the string presentation {@link Constructor} that uses short class names.
-   */
-  public static String getShortConstructorString(Constructor<?> constructor) {
-    if (constructor == null) {
-      return "<null-constructor>";
-    }
-    StringBuilder buffer = new StringBuilder();
-    buffer.append(getShortName(constructor.getDeclaringClass()));
-    buffer.append('(');
-    // append parameters
-    {
-      Class<?>[] parameters = constructor.getParameterTypes();
-      for (int i = 0; i < parameters.length; i++) {
-        Class<?> parameterType = parameters[i];
-        if (i != 0) {
-          buffer.append(',');
-        }
-        buffer.append(getShortName(parameterType));
-      }
-    }
-    // close
-    buffer.append(')');
-    return buffer.toString();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Signature
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @param runtime
-   *          is <code>true</code> if we need name for class loading, <code>false</code> if we need
-   *          name for source generation.
-   *
-   * @return the fully qualified name of given {@link Type}.
-   */
-  public static String getFullyQualifiedName(Type type, boolean runtime) {
-    Assert.isNotNull(type);
-    // Class
-    if (type instanceof Class<?>) {
-      Class<?> clazz = (Class<?>) type;
-      // array
-      if (clazz.isArray()) {
-        return getFullyQualifiedName(clazz.getComponentType(), runtime) + "[]";
-      }
-      // object
-      String name = clazz.getName();
-      if (!runtime) {
-        name = name.replace('$', '.');
-      }
-      return name;
-    }
-    // GenericArrayType
-    if (type instanceof GenericArrayType) {
-      GenericArrayType genericArrayType = (GenericArrayType) type;
-      return getFullyQualifiedName(genericArrayType.getGenericComponentType(), runtime) + "[]";
-    }
-    // ParameterizedType
-    if (type instanceof ParameterizedType) {
-      ParameterizedType parameterizedType = (ParameterizedType) type;
-      Type rawType = parameterizedType.getRawType();
-      // raw type
-      StringBuilder sb = new StringBuilder();
-      sb.append(getFullyQualifiedName(rawType, runtime));
-      // type arguments
-      sb.append("<");
-      boolean firstTypeArgument = true;
-      for (Type typeArgument : parameterizedType.getActualTypeArguments()) {
-        if (!firstTypeArgument) {
-          sb.append(",");
-        }
-        firstTypeArgument = false;
-        sb.append(getFullyQualifiedName(typeArgument, runtime));
-      }
-      sb.append(">");
-      // done
-      return sb.toString();
-    }
-    // WildcardType
-    if (type instanceof WildcardType) {
-      WildcardType wildcardType = (WildcardType) type;
-      return "? extends " + getFullyQualifiedName(wildcardType.getUpperBounds()[0], runtime);
-    }
-    // TypeVariable
-    TypeVariable<?> typeVariable = (TypeVariable<?>) type;
-    return typeVariable.getName();
-  }
-
-  /**
-   * Appends fully qualified names of given parameter types (appends also <code>"()"</code>).
-   */
-  private static void appendParameterTypes(StringBuilder buffer, Type[] parameterTypes) {
-    buffer.append('(');
-    boolean firstParameter = true;
-    for (Type parameterType : parameterTypes) {
-      if (firstParameter) {
-        firstParameter = false;
-      } else {
-        buffer.append(',');
-      }
-      buffer.append(getFullyQualifiedName(parameterType, false));
-    }
-    buffer.append(')');
-  }
-
-  /**
-   * Same as {@link Class#getCanonicalName()}.
-   * <p>
-   * GWT has problems with canonical name of inner class, so we need such workaround.
-   * http://code.google.com/p/google-web-toolkit/issues/detail?id=4346
-   */
-  public static String getCanonicalName(Class<?> clazz) {
-    return getFullyQualifiedName(clazz, false);
-  }
-
-  /**
-   * Returns the short name of {@link Class}, or same name for simple type name.
-   *
-   * <pre>
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private ReflectionUtils() {
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Java 8 uses "MethodRef" that uses {@link SoftReference} to a {@link Method}. But this means
+	 * that when it looses a reference to a <em>protected</em> {@link Method}, it cannot restore it. I
+	 * wish we had done it differently, not by using {@link PropertyDescriptor}.
+	 */
+	public static Method getWriteMethod(PropertyDescriptor propertyDescriptor) {
+		try {
+			return propertyDescriptor.getWriteMethod();
+		} catch (Throwable e) {
+			return null;
+		}
+	}
+
+	/**
+	 * Java 8 uses "MethodRef" that uses {@link SoftReference} to a {@link Method}. But this means
+	 * that when it looses a reference to a <em>protected</em> {@link Method}, it cannot restore it. I
+	 * wish we had done it differently, not by using {@link PropertyDescriptor}.
+	 */
+	public static Method getReadMethod(PropertyDescriptor propertyDescriptor) {
+		try {
+			return propertyDescriptor.getReadMethod();
+		} catch (Throwable e) {
+			return null;
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Class
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link ClassLoader} that was used to load given {@link Class}. Always return not
+	 *         <code>null</code> value, even if {@link Class} was loaded using bootstrap
+	 *         {@link ClassLoader}.
+	 */
+	public static ClassLoader getClassLoader(Class<?> clazz) {
+		ClassLoader classLoader = clazz.getClassLoader();
+		if (classLoader == null) {
+			classLoader = ClassLoader.getSystemClassLoader();
+		}
+		return classLoader;
+	}
+
+	/**
+	 * @return the {@link Class} with given name - primitive or {@link Object} (including arrays).
+	 */
+	public static Class<?> getClassByName(ClassLoader classLoader, String className) throws Exception {
+		Assert.isNotNull(className);
+		// check for primitive type
+		if ("boolean".equals(className)) {
+			return boolean.class;
+		} else if ("byte".equals(className)) {
+			return byte.class;
+		} else if ("char".equals(className)) {
+			return char.class;
+		} else if ("short".equals(className)) {
+			return short.class;
+		} else if ("int".equals(className)) {
+			return int.class;
+		} else if ("long".equals(className)) {
+			return long.class;
+		} else if ("float".equals(className)) {
+			return float.class;
+		} else if ("double".equals(className)) {
+			return double.class;
+		}
+		// check for array
+		if (className.endsWith("[]")) {
+			int dimensions = StringUtils.countMatches(className, "[]");
+			String componentClassName = StringUtils.substringBefore(className, "[]");
+			Class<?> componentClass = getClassByName(classLoader, componentClassName);
+			return Array.newInstance(componentClass, new int[dimensions]).getClass();
+		}
+		// OK, load this class as object
+		return classLoader.loadClass(className);
+	}
+
+	/**
+	 * @return <code>true</code> if given {@link ClassLoader} has class with given name.
+	 */
+	public static boolean hasClass(ClassLoader classLoader, String name) {
+		try {
+			classLoader.loadClass(name);
+			return true;
+		} catch (Throwable e) {
+			return false;
+		}
+	}
+
+	/**
+	 * @return the {@link Object} default value for class with given {@code className}.
+	 */
+	public static Object getDefaultValue(String className) {
+		// primitive
+		if ("boolean".equals(className)) {
+			return false;
+		} else if ("byte".equals(className)) {
+			return (byte) 0;
+		} else if ("char".equals(className)) {
+			return (char) 0;
+		} else if ("short".equals(className)) {
+			return (short) 0;
+		} else if ("int".equals(className)) {
+			return 0;
+		} else if ("long".equals(className)) {
+			return 0L;
+		} else if ("float".equals(className)) {
+			return 0.0f;
+		} else if ("double".equals(className)) {
+			return 0.0;
+		}
+		// Object
+		return null;
+	}
+
+	/**
+	 * @return the {@link Object} default value for class - false/zero for primitives,
+	 *         <code>"dynamic"</code> for {@link String} and empty collections.
+	 */
+	public static Object getDefaultValue(Class<?> clazz) {
+		if (clazz.isPrimitive()) {
+			return getDefaultValue(clazz.getName());
+		}
+		// String
+		if (isSuccessorOf(clazz, "java.lang.String")) {
+			return "<dynamic>";
+		}
+		// collections
+		if (isSuccessorOf(clazz, "java.util.List")) {
+			return Lists.newArrayList();
+		}
+		if (isSuccessorOf(clazz, "java.util.Set")) {
+			return Sets.newHashSet();
+		}
+		if (isSuccessorOf(clazz, "java.util.Map")) {
+			return new HashMap<>();
+		}
+		// Object
+		return null;
+	}
+
+	/**
+	 * @param clazz
+	 *          the {@link Class} to check.
+	 * @param requiredClass
+	 *          the name of {@link Class} that should be extended, or name of interface that should be
+	 *          implemented.
+	 *
+	 * @return <code>true</code> if given {@link Class} extends <code>requiredClass</code> or
+	 *         implements interface with this name.
+	 */
+	public static boolean isSuccessorOf(Class<?> clazz, String requiredClass) {
+		if (clazz == null) {
+			return false;
+		}
+		String clazzName = clazz.getName();
+		// check cache
+		{
+			IsSuccessorResult result = isSuccessorOf_checkCache(clazz, requiredClass);
+			if (result == IsSuccessorResult.TRUE) {
+				return true;
+			}
+			if (result == IsSuccessorResult.FALSE) {
+				return false;
+			}
+		}
+		// check this Class
+		if (clazzName.equals(requiredClass)) {
+			isSuccessorOf_addCache(clazz, requiredClass, IsSuccessorResult.TRUE);
+			return true;
+		}
+		// check super-Class
+		if (isSuccessorOf(clazz.getSuperclass(), requiredClass)) {
+			isSuccessorOf_addCache(clazz, requiredClass, IsSuccessorResult.TRUE);
+			return true;
+		}
+		// check interfaces
+		for (Class<?> interfaceClass : clazz.getInterfaces()) {
+			if (isSuccessorOf(interfaceClass, requiredClass)) {
+				isSuccessorOf_addCache(clazz, requiredClass, IsSuccessorResult.TRUE);
+				return true;
+			}
+		}
+		// no, not required Class
+		isSuccessorOf_addCache(clazz, requiredClass, IsSuccessorResult.FALSE);
+		return false;
+	}
+
+	private enum IsSuccessorResult {
+		UNKNOWN, FALSE, TRUE
+	}
+
+	private static final Map<String, WeakHashMap<Class<?>, IsSuccessorResult>> m_isSuccessorOfCache =
+			new HashMap<>();
+
+	private static void isSuccessorOf_addCache(Class<?> clazz,
+			String requiredClass,
+			IsSuccessorResult result) {
+		WeakHashMap<Class<?>, IsSuccessorResult> classes = m_isSuccessorOfCache.get(requiredClass);
+		if (classes == null) {
+			classes = new WeakHashMap<>();
+			m_isSuccessorOfCache.put(requiredClass, classes);
+		}
+		classes.put(clazz, result);
+	}
+
+	private static IsSuccessorResult isSuccessorOf_checkCache(Class<?> clazz, String requiredClass) {
+		WeakHashMap<Class<?>, IsSuccessorResult> classes = m_isSuccessorOfCache.get(requiredClass);
+		if (classes != null) {
+			return classes.get(clazz);
+		}
+		return IsSuccessorResult.UNKNOWN;
+	}
+
+	/**
+	 * @return <code>true</code> if candidate can be used as target {@link Class}.
+	 */
+	public static boolean isAssignableFrom(Class<?> targetClass, Object candidate) {
+		// primitive
+		if (targetClass.isPrimitive()) {
+			if (targetClass == byte.class) {
+				return candidate instanceof Byte;
+			}
+			if (targetClass == char.class) {
+				return candidate instanceof Character;
+			}
+			if (targetClass == short.class) {
+				return candidate instanceof Short;
+			}
+			if (targetClass == int.class) {
+				return candidate instanceof Integer;
+			}
+			if (targetClass == long.class) {
+				return candidate instanceof Long;
+			}
+			if (targetClass == float.class) {
+				return candidate instanceof Float;
+			}
+			if (targetClass == double.class) {
+				return candidate instanceof Double;
+			}
+		}
+		// object
+		if (candidate == null) {
+			return true;
+		}
+		return targetClass.isInstance(candidate);
+	}
+
+	/**
+	 * @return <code>true</code> if candidate can be used as target {@link Class}.
+	 */
+	public static boolean isSuccessorOf(Object candidate, String requiredClass) {
+		if (candidate == null) {
+			return false;
+		}
+		Class<?> candidateClass = candidate.getClass();
+		if (!requiredClass.contains(".")) {
+			Field fieldTYPE = getFieldByName(candidateClass, "TYPE");
+			if (fieldTYPE != null) {
+				Class<?> primitiveType = (Class<?>) getFieldObject(candidateClass, "TYPE");
+				if (ObjectUtils.equals(primitiveType.getName(), requiredClass)) {
+					return true;
+				}
+			}
+			return false;
+		} else {
+			return isSuccessorOf(candidateClass, requiredClass);
+		}
+	}
+
+	/**
+	 * @return the result of {@link Class#isMemberClass()} and ignore {@link NoClassDefFoundError}.
+	 */
+	public static boolean isMemberClass(final Class<?> clazz) {
+		Assert.isNotNull(clazz);
+		return ExecutionUtils.runObjectIgnore(() -> clazz.isMemberClass(), false);
+	}
+
+	/**
+	 * @return the list of all supertypes: superclasses and interfaces. Class itself and its
+	 *         interfaces first, then superclass.
+	 */
+	public static List<Class<?>> getSuperHierarchy(Class<?> clazz) throws Exception {
+		List<Class<?>> types = Lists.newArrayList();
+		types.add(clazz);
+		// check super Class
+		Class<?> superclass = clazz.getSuperclass();
+		if (superclass != null) {
+			// interfaces
+			for (Class<?> interfaceClass : clazz.getInterfaces()) {
+				types.addAll(getSuperHierarchy(interfaceClass));
+			}
+			// super Class
+			types.addAll(getSuperHierarchy(superclass));
+		}
+		// done
+		return types;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Specific
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if two arrays have same number of classes and all "specific" classes
+	 *         are {@link #isMoreSpecific(Class, Class)} than "base".
+	 */
+	public static boolean isMoreSpecific(Class<?> base[], Class<?> specific[]) {
+		if (base.length != specific.length) {
+			return false;
+		}
+		for (int i = 0; i < base.length; i++) {
+			if (!isMoreSpecific(base[i], specific[i])) {
+				return false;
+			}
+		}
+		return true;
+	}
+
+	/**
+	 * @return <code>true</code> if "specific" is "base" or subclass of "base".
+	 */
+	public static boolean isMoreSpecific(Class<?> base, Class<?> specific) {
+		return base.isAssignableFrom(specific);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Enchanced classes support
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if given {@link Class} that is "enchanced", i.e. is generated by
+	 *         "ByteBuddy", or some other library.
+	 */
+	public static boolean isEnchancedClass(Class<?> clazz) {
+		return clazz.getName().indexOf('$') != -1;
+	}
+
+	/**
+	 * @return the super-Class of given {@link Class} that is "normal", i.e. is not generated by
+	 *         "ByteBuddy", or some other library. For now we just check that {@link Class} name has no
+	 *         <code>'$'</code> character.
+	 */
+	public static Class<?> getNormalClass(Class<?> clazz) {
+		while (isEnchancedClass(clazz)) {
+			clazz = clazz.getSuperclass();
+		}
+		return clazz;
+	}
+
+	/**
+	 * @return the {@link String} presentation of given {@link Method}. If this {@link Method} is
+	 *         declared in some "enchanced" {@link Class}, and there was same {@link Method} in
+	 *         "normal" {@link Class}, then <code>toString</code> of "normal" {@link Method} returned.
+	 */
+	public static String toString(Method method) {
+		String methodSignature = getMethodSignature(method);
+		// try to find in "normal" Class method with same signature
+		while (isEnchancedClass(method.getDeclaringClass())) {
+			Class<?> superClass = method.getDeclaringClass().getSuperclass();
+			Method superMethod = getMethodBySignature(superClass, methodSignature);
+			if (superMethod == null) {
+				break;
+			}
+			method = superMethod;
+		}
+		// OK, use toString()
+		return method.toString();
+	}
+
+	/**
+	 * @return the string presentation {@link Constructor} that uses short class names.
+	 */
+	public static String getShortConstructorString(Constructor<?> constructor) {
+		if (constructor == null) {
+			return "<null-constructor>";
+		}
+		StringBuilder buffer = new StringBuilder();
+		buffer.append(getShortName(constructor.getDeclaringClass()));
+		buffer.append('(');
+		// append parameters
+		{
+			Class<?>[] parameters = constructor.getParameterTypes();
+			for (int i = 0; i < parameters.length; i++) {
+				Class<?> parameterType = parameters[i];
+				if (i != 0) {
+					buffer.append(',');
+				}
+				buffer.append(getShortName(parameterType));
+			}
+		}
+		// close
+		buffer.append(')');
+		return buffer.toString();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Signature
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @param runtime
+	 *          is <code>true</code> if we need name for class loading, <code>false</code> if we need
+	 *          name for source generation.
+	 *
+	 * @return the fully qualified name of given {@link Type}.
+	 */
+	public static String getFullyQualifiedName(Type type, boolean runtime) {
+		Assert.isNotNull(type);
+		// Class
+		if (type instanceof Class<?>) {
+			Class<?> clazz = (Class<?>) type;
+			// array
+			if (clazz.isArray()) {
+				return getFullyQualifiedName(clazz.getComponentType(), runtime) + "[]";
+			}
+			// object
+			String name = clazz.getName();
+			if (!runtime) {
+				name = name.replace('$', '.');
+			}
+			return name;
+		}
+		// GenericArrayType
+		if (type instanceof GenericArrayType) {
+			GenericArrayType genericArrayType = (GenericArrayType) type;
+			return getFullyQualifiedName(genericArrayType.getGenericComponentType(), runtime) + "[]";
+		}
+		// ParameterizedType
+		if (type instanceof ParameterizedType) {
+			ParameterizedType parameterizedType = (ParameterizedType) type;
+			Type rawType = parameterizedType.getRawType();
+			// raw type
+			StringBuilder sb = new StringBuilder();
+			sb.append(getFullyQualifiedName(rawType, runtime));
+			// type arguments
+			sb.append("<");
+			boolean firstTypeArgument = true;
+			for (Type typeArgument : parameterizedType.getActualTypeArguments()) {
+				if (!firstTypeArgument) {
+					sb.append(",");
+				}
+				firstTypeArgument = false;
+				sb.append(getFullyQualifiedName(typeArgument, runtime));
+			}
+			sb.append(">");
+			// done
+			return sb.toString();
+		}
+		// WildcardType
+		if (type instanceof WildcardType) {
+			WildcardType wildcardType = (WildcardType) type;
+			return "? extends " + getFullyQualifiedName(wildcardType.getUpperBounds()[0], runtime);
+		}
+		// TypeVariable
+		TypeVariable<?> typeVariable = (TypeVariable<?>) type;
+		return typeVariable.getName();
+	}
+
+	/**
+	 * Appends fully qualified names of given parameter types (appends also <code>"()"</code>).
+	 */
+	private static void appendParameterTypes(StringBuilder buffer, Type[] parameterTypes) {
+		buffer.append('(');
+		boolean firstParameter = true;
+		for (Type parameterType : parameterTypes) {
+			if (firstParameter) {
+				firstParameter = false;
+			} else {
+				buffer.append(',');
+			}
+			buffer.append(getFullyQualifiedName(parameterType, false));
+		}
+		buffer.append(')');
+	}
+
+	/**
+	 * Same as {@link Class#getCanonicalName()}.
+	 * <p>
+	 * GWT has problems with canonical name of inner class, so we need such workaround.
+	 * http://code.google.com/p/google-web-toolkit/issues/detail?id=4346
+	 */
+	public static String getCanonicalName(Class<?> clazz) {
+		return getFullyQualifiedName(clazz, false);
+	}
+
+	/**
+	 * Returns the short name of {@link Class}, or same name for simple type name.
+	 *
+	 * <pre>
 	 * getShortName("javax.swing.JPanel")  = "JPanel"
 	 * getShortName("boolean")             = "boolean"
 	 * </pre>
-   *
-   * @return the short name of given {@link Class}.
-   */
-  public static String getShortName(Class<?> clazz) {
-    String className = getFullyQualifiedName(clazz, false);
-    // member Class
-    if (clazz.isMemberClass()) {
-      Class<?> topClass = getTopLevelClass(clazz);
-      String topName = topClass.getName();
-      String topPackage = StringUtils.substringBeforeLast(topName, ".") + ".";
-      return className.substring(topPackage.length());
-    }
-    // normal top level Class, may be array
-    if (className.indexOf('.') != -1) {
-      return StringUtils.substringAfterLast(className, ".");
-    }
-    // primitive or default package
-    return className;
-  }
-
-  private static Class<?> getTopLevelClass(Class<?> clazz) {
-    while (clazz.isMemberClass()) {
-      clazz = clazz.getEnclosingClass();
-    }
-    return clazz;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Modifiers
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static boolean isPublic(Constructor<?> constructor) {
-    return Modifier.isPublic(constructor.getModifiers());
-  }
-
-  public static boolean isProtected(Constructor<?> constructor) {
-    return Modifier.isProtected(constructor.getModifiers());
-  }
-
-  public static boolean isPrivate(Constructor<?> constructor) {
-    return Modifier.isPrivate(constructor.getModifiers());
-  }
-
-  public static boolean isPackagePrivate(Constructor<?> constructor) {
-    return !isPublic(constructor) && !isProtected(constructor) && !isPrivate(constructor);
-  }
-
-  public static boolean isPublic(Method method) {
-    return Modifier.isPublic(method.getModifiers());
-  }
-
-  public static boolean isProtected(Method method) {
-    return Modifier.isProtected(method.getModifiers());
-  }
-
-  public static boolean isPrivate(Method method) {
-    return Modifier.isPrivate(method.getModifiers());
-  }
-
-  public static boolean isPackagePrivate(Method method) {
-    return !isPublic(method) && !isProtected(method) && !isPrivate(method);
-  }
-
-  public static boolean isAbstract(Method method) {
-    return Modifier.isAbstract(method.getModifiers());
-  }
-
-  public static boolean isPublic(Field field) {
-    return Modifier.isPublic(field.getModifiers());
-  }
-
-  public static boolean isProtected(Field field) {
-    return Modifier.isProtected(field.getModifiers());
-  }
-
-  public static boolean isPrivate(Field field) {
-    return Modifier.isPrivate(field.getModifiers());
-  }
-
-  public static boolean isPackagePrivate(Field field) {
-    return !isPublic(field) && !isProtected(field) && !isPrivate(field);
-  }
-
-  public static boolean isStatic(Field field) {
-    return Modifier.isStatic(field.getModifiers());
-  }
-
-  public static boolean isAbstract(Class<?> clazz) {
-    return Modifier.isAbstract(clazz.getModifiers());
-  }
-
-  public static boolean isPublic(Class<?> clazz) {
-    return Modifier.isPublic(clazz.getModifiers());
-  }
-
-  public static boolean isProtected(Class<?> clazz) {
-    return Modifier.isProtected(clazz.getModifiers());
-  }
-
-  public static boolean isPrivate(Class<?> clazz) {
-    return Modifier.isPrivate(clazz.getModifiers());
-  }
-
-  public static boolean isPackagePrivate(Class<?> clazz) {
-    return !isPublic(clazz) && !isProtected(clazz) && !isPrivate(clazz);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Method
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return all declared {@link Method}'s, including protected and private.
-   */
-  public static Map<String, Method> getMethods(Class<?> clazz) {
-    Map<String, Method> methods = new HashMap<>();
-    // process classes
-    for (Class<?> c = clazz; c != null; c = c.getSuperclass()) {
-      for (Method method : c.getDeclaredMethods()) {
-        String signature = getMethodSignature(method);
-        if (!methods.containsKey(signature)) {
-          method.setAccessible(true);
-          methods.put(signature, method);
-        }
-      }
-    }
-    // process interfaces
-    for (Class<?> interfaceClass : clazz.getInterfaces()) {
-      for (Method method : interfaceClass.getDeclaredMethods()) {
-        String signature = getMethodSignature(method);
-        if (!methods.containsKey(signature)) {
-          method.setAccessible(true);
-          methods.put(signature, method);
-        }
-      }
-    }
-    // done
-    return methods;
-  }
-
-  /**
-   * @return signature for given {@link Method}. This signature is not same signature as in JVM or
-   *         JDT, just some string that unique identifies method in its {@link Class}.
-   */
-  public static String getMethodSignature(Method method) {
-    Assert.isNotNull(method);
-    return getMethodSignature(method.getName(), method.getParameterTypes());
-  }
-
-  /**
-   * Returns the signature of {@link Method} with given combination of name and parameter types.
-   * This signature is not same signature as in JVM or JDT, just some string that unique identifies
-   * method in its {@link Class}.
-   *
-   * @param name
-   *          the name of {@link Method}.
-   * @param parameterTypes
-   *          the types of {@link Method} parameters.
-   *
-   * @return signature of {@link Method}.
-   */
-  public static String getMethodSignature(String name, Type... parameterTypes) {
-    Assert.isNotNull(name);
-    Assert.isNotNull(parameterTypes);
-    //
-    StringBuilder buffer = new StringBuilder();
-    buffer.append(name);
-    appendParameterTypes(buffer, parameterTypes);
-    return buffer.toString();
-  }
-
-  /**
-   * @return generic signature for given {@link Method}. This signature is not same signature as in
-   *         JVM or JDT, just some string that unique identifies constructor in its {@link Class}.
-   *         It uses {@link Method#getGenericParameterTypes()}, so for each {@link TypeVariable} its
-   *         name will be used in signature.
-   */
-  public static String getMethodGenericSignature(Method method) {
-    Assert.isNotNull(method);
-    return getMethodSignature(method.getName(), method.getGenericParameterTypes());
-  }
-
-  /**
-   * Note: you should not use this method, using {@link #getMethodBySignature(Class, String)}.
-   *
-   * @return the {@link Method} for given name, or <code>null</code> if no such method found.
-   */
-  public static Method getMethodByName(Class<?> clazz, String name) {
-    Assert.isNotNull(clazz);
-    Assert.isNotNull(name);
-    for (Method method : getMethods(clazz).values()) {
-      if (method.getName().equals(name)) {
-        return method;
-      }
-    }
-    return null;
-  }
-
-  private static final ClassMap<Map<String, Method>> m_getMethodBySignature = ClassMap.create();
-
-  /**
-   * Returns the {@link Method} defined in {@link Class}. This method can have any visibility, i.e.
-   * we can find even protected/private methods. Can return <code>null</code> if no method with
-   * given signature found.
-   *
-   * @param clazz
-   *          the {@link Class} to get method from it, or its superclass.
-   * @param signature
-   *          the signature of method in same format as {@link #getMethodSignature(Method)}.
-   *
-   * @return the {@link Method} for given signature, or <code>null</code> if no such method found.
-   */
-  public static Method getMethodBySignature(Class<?> clazz, String signature) {
-    Assert.isNotNull(clazz);
-    Assert.isNotNull(signature);
-    // prepare cache
-    Map<String, Method> cache = m_getMethodBySignature.get(clazz);
-    if (cache == null) {
-      cache = getMethods(clazz);
-      m_getMethodBySignature.put(clazz, cache);
-    }
-    // use cache
-    return cache.get(signature);
-  }
-
-  /**
-   * @param signature
-   *          the generic signature of {@link Method} in same format as
-   *          {@link #getMethodGenericSignature(Method)}.
-   *
-   * @return the {@link Method} for given signature. This constructor can have any visibility, i.e.
-   *         we can find even protected/private constructors.
-   */
-  public static Method getMethodByGenericSignature(Class<?> clazz, String signature) {
-    Assert.isNotNull(clazz);
-    Assert.isNotNull(signature);
-    // check public methods
-    for (Method method : clazz.getMethods()) {
-      if (getMethodGenericSignature(method).equals(signature)) {
-        return method;
-      }
-    }
-    // not found
-    return null;
-  }
-
-  /**
-   * Returns the {@link Method} defined in {@link Class}. This method can have any visibility, i.e.
-   * we can find even protected/private methods. Can return <code>null</code> if no method with
-   * given combination of name/parameters found.
-   *
-   * @param clazz
-   *          the {@link Class} to get method from it, or its superclass.
-   * @param name
-   *          the name of method.
-   * @param parameterTypes
-   *          the array of parameter types.
-   *
-   * @return the {@link Method} for given name/parameters, or <code>null</code> if no such method
-   *         found.
-   */
-  public static Method getMethod(Class<?> clazz, String name, Class<?>... parameterTypes) {
-    Assert.isNotNull(clazz);
-    Assert.isNotNull(name);
-    Assert.isNotNull(parameterTypes);
-    String signature = getMethodSignature(name, parameterTypes);
-    return getMethodBySignature(clazz, signature);
-  }
-
-  /**
-   * @return <code>true</code> if given {@link Method} is declared in {@link Class} with given name
-   *         or one of its superclasses.
-   */
-  public static boolean isAlreadyDeclaredIn(Method method, Class<?> targetClass) {
-    Class<?> declaringClass = method.getDeclaringClass();
-    return declaringClass.isAssignableFrom(targetClass);
-  }
-
-  /**
-   * @return <code>true</code> if two {@link Method}s have same name, but parameter types of
-   *         "specific" are {@link #isMoreSpecific(Class[], Class[])} than "base".
-   */
-  public static boolean isMoreSpecific(Method base, Method specific) {
-    return base.getName().equals(specific.getName())
-        && isMoreSpecific(base.getParameterTypes(), specific.getParameterTypes());
-  }
-
-  /**
-   * @return the {@link Method} which is {@link #isMoreSpecific(Method, Method)} than all others.
-   */
-  public static Method getMostSpecific(List<Method> methods) {
-    Method mostSpecific = null;
-    for (Method method : methods) {
-      if (mostSpecific == null || isMoreSpecific(mostSpecific, method)) {
-        mostSpecific = method;
-      }
-    }
-    return mostSpecific;
-  }
-
-  /**
-   * @return the {@link Object} result of invoking method with given signature.
-   */
-  public static Object invokeMethodEx(Object object, String signature, Object... arguments) {
-    try {
-      return invokeMethod(object, signature, arguments);
-    } catch (Throwable e) {
-      throw propagate(e);
-    }
-  }
-
-  /**
-   * @return the {@link Object} result of invoking method with given signature.
-   */
-  public static Object invokeMethod(Object object, String signature, Object... arguments)
-      throws Exception {
-    Assert.isNotNull(object);
-    Assert.isNotNull(arguments);
-    // prepare class/object
-    Class<?> refClass = getRefClass(object);
-    Object refObject = getRefObject(object);
-    // prepare method
-    Method method = getMethodBySignature(refClass, signature);
-    Assert.isNotNull(method, "Can not find method " + signature + " in " + refClass);
-    // do invoke
-    try {
-      return method.invoke(refObject, arguments);
-    } catch (InvocationTargetException e) {
-      throw propagate(e.getCause());
-    }
-  }
-
-  /**
-   * Invokes method without parameters.
-   *
-   * @return the {@link Object} result of invoking method.
-   */
-  public static Object invokeMethod2(Object object, String name) throws Exception {
-    return invokeMethod(object, name + "()");
-  }
-
-  /**
-   * Invokes method with single parameter.
-   *
-   * @return the {@link Object} result of invoking method.
-   */
-  public static Object invokeMethod2(Object object,
-      String name,
-      Class<?> parameterType_1,
-      Object argument_1) throws Exception {
-    Class<?>[] types = new Class<?>[]{parameterType_1};
-    Object[] values = new Object[]{argument_1};
-    return invokeMethod2(object, name, types, values);
-  }
-
-  /**
-   * Invokes method with two parameters.
-   *
-   * @return the {@link Object} result of invoking method.
-   */
-  public static Object invokeMethod2(Object object,
-      String name,
-      Class<?> parameterType_1,
-      Class<?> parameterType_2,
-      Object argument_1,
-      Object argument_2) throws Exception {
-    Class<?>[] types = new Class<?>[]{parameterType_1, parameterType_2};
-    Object[] values = new Object[]{argument_1, argument_2};
-    return invokeMethod2(object, name, types, values);
-  }
-
-  /**
-   * Invokes method with three parameters.
-   *
-   * @return the {@link Object} result of invoking method.
-   */
-  public static Object invokeMethod2(Object object,
-      String name,
-      Class<?> parameterType_1,
-      Class<?> parameterType_2,
-      Class<?> parameterType_3,
-      Object argument_1,
-      Object argument_2,
-      Object argument_3) throws Exception {
-    Class<?>[] types = new Class<?>[]{parameterType_1, parameterType_2, parameterType_3};
-    Object[] values = new Object[]{argument_1, argument_2, argument_3};
-    return invokeMethod2(object, name, types, values);
-  }
-
-  /**
-   * Invokes method with four parameters.
-   *
-   * @return the {@link Object} result of invoking method.
-   */
-  public static Object invokeMethod2(Object object,
-      String name,
-      Class<?> parameterType_1,
-      Class<?> parameterType_2,
-      Class<?> parameterType_3,
-      Class<?> parameterType_4,
-      Object argument_1,
-      Object argument_2,
-      Object argument_3,
-      Object argument_4) throws Exception {
-    Class<?>[] types =
-        new Class<?>[]{parameterType_1, parameterType_2, parameterType_3, parameterType_4};
-    Object[] values = new Object[]{argument_1, argument_2, argument_3, argument_4};
-    return invokeMethod2(object, name, types, values);
-  }
-
-  /**
-   * Invokes method by name and parameter types.
-   *
-   * @param object
-   *          the object to call, may be {@link Class} for invoking static method.
-   * @param name
-   *          the name of method.
-   * @param parameterTypes
-   *          the types of parameters.
-   * @param arguments
-   *          the values of argument for invocation.
-   *
-   * @return the {@link Object} result of invoking method.
-   */
-  public static Object invokeMethod2(Object object,
-      String name,
-      Class<?>[] parameterTypes,
-      Object[] arguments) throws Exception {
-    Assert.equals(parameterTypes.length, arguments.length);
-    String signature = getMethodSignature(name, parameterTypes);
-    return invokeMethod(object, signature, arguments);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return signature for given {@link Constructor}. This signature is not same signature as in JVM
-   *         or JDT, just some string that unique identifies constructor in its {@link Class}.
-   */
-  public static String getConstructorSignature(Constructor<?> constructor) {
-    Assert.isNotNull(constructor);
-    return getConstructorSignature(constructor.getParameterTypes());
-  }
-
-  /**
-   * @return generic signature for given {@link Constructor}. This signature is not same signature
-   *         as in JVM or JDT, just some string that unique identifies constructor in its
-   *         {@link Class}. It uses {@link Constructor#getGenericParameterTypes()}, so for each
-   *         {@link TypeVariable} its name will be used in signature.
-   */
-  public static String getConstructorGenericSignature(Constructor<?> constructor) {
-    Assert.isNotNull(constructor);
-    return getConstructorSignature(constructor.getGenericParameterTypes());
-  }
-
-  /**
-   * Returns the signature of {@link Constructor} with given parameter types. This signature is not
-   * same signature as in JVM or JDT, just some string that unique identifies constructor in its
-   * {@link Class}.
-   *
-   * @param parameterTypes
-   *          the types of {@link Constructor} parameters.
-   *
-   * @return signature of {@link Constructor}.
-   */
-  public static String getConstructorSignature(Type... parameterTypes) {
-    Assert.isNotNull(parameterTypes);
-    //
-    StringBuilder buffer = new StringBuilder();
-    buffer.append("<init>");
-    appendParameterTypes(buffer, parameterTypes);
-    return buffer.toString();
-  }
-
-  /**
-   * @param signature
-   *          the signature of {@link Constructor} in same format as
-   *          {@link #getConstructorSignature(Constructor)} .
-   *
-   * @return the {@link Constructor} for given signature. This constructor can have any visibility,
-   *         i.e. we can find even protected/private constructors.
-   */
-  @SuppressWarnings("unchecked")
-  public static <T> Constructor<T> getConstructorBySignature(Class<T> clazz, String signature) {
-    Assert.isNotNull(clazz);
-    Assert.isNotNull(signature);
-    // check all declared constructors
-    for (Constructor<?> constructor : clazz.getDeclaredConstructors()) {
-      if (getConstructorSignature(constructor).equals(signature)) {
-        constructor.setAccessible(true);
-        return (Constructor<T>) constructor;
-      }
-    }
-    // not found
-    return null;
-  }
-
-  /**
-   * @param signature
-   *          the generic signature of {@link Constructor} in same format as
-   *          {@link #getConstructorGenericSignature(Constructor)}.
-   *
-   * @return the {@link Constructor} for given signature. This constructor can have any visibility,
-   *         i.e. we can find even protected/private constructors.
-   */
-  @SuppressWarnings("unchecked")
-  public static <T> Constructor<T> getConstructorByGenericSignature(Class<T> clazz, String signature) {
-    Assert.isNotNull(clazz);
-    Assert.isNotNull(signature);
-    // check all declared constructors
-    for (Constructor<?> constructor : clazz.getDeclaredConstructors()) {
-      if (getConstructorGenericSignature(constructor).equals(signature)) {
-        constructor.setAccessible(true);
-        return (Constructor<T>) constructor;
-      }
-    }
-    // not found
-    return null;
-  }
-
-  /**
-   * @param parameterTypes
-   *          the array of parameter types.
-   *
-   * @return the {@link Constructor} for given signature. This constructor can have any visibility,
-   *         i.e. we can find even protected/private constructors.
-   */
-  public static <T> Constructor<T> getConstructor(Class<T> clazz, Class<?>... parameterTypes) {
-    Assert.isNotNull(clazz);
-    Assert.isNotNull(parameterTypes);
-    String signature = getConstructorSignature(parameterTypes);
-    return getConstructorBySignature(clazz, signature);
-  }
-
-  /**
-   * @return the {@link Constructor} which can be invoked with given arguments, may be
-   *         <code>null</code>.
-   */
-  @SuppressWarnings("unchecked")
-  public static <T> Constructor<T> getConstructorForArguments(Class<T> clazz, Object... arguments) {
-    Assert.isNotNull(clazz);
-    Assert.isNotNull(arguments);
-    for (Constructor<?> constructor : clazz.getConstructors()) {
-      Class<?>[] parameterTypes = constructor.getParameterTypes();
-      // check compatibility of each parameter and argument
-      boolean canUse = true;
-      if (parameterTypes.length == arguments.length) {
-        for (int i = 0; i < parameterTypes.length; i++) {
-          Class<?> parameterType = parameterTypes[i];
-          Object argument = arguments[i];
-          if (!isAssignableFrom(parameterType, argument)) {
-            canUse = false;
-            break;
-          }
-        }
-        // use if possible
-        if (canUse) {
-          return (Constructor<T>) constructor;
-        }
-      }
-    }
-    // no compatible constructor
-    return null;
-  }
-
-  /**
-   * @return <code>true</code> if two given {@link Constructor}-s represent same constructor.
-   */
-  public static boolean equals(Constructor<?> constructor_1, Constructor<?> constructor_2) {
-    if (constructor_1 == constructor_2) {
-      return true;
-    }
-    return constructor_1.getDeclaringClass() == constructor_2.getDeclaringClass()
-        && ObjectUtils.equals(
-            getConstructorSignature(constructor_1),
-            getConstructorSignature(constructor_2));
-  }
-
-  /**
-   * @return the {@link Constructor} with minimal number of parameters.
-   */
-  public static Constructor<?> getShortestConstructor(Class<?> clazz) {
-    Constructor<?> shortest = null;
-    int minCount = Integer.MAX_VALUE;
-    for (Constructor<?> constructor : clazz.getConstructors()) {
-      int thisCount = constructor.getParameterTypes().length;
-      if (minCount > thisCount) {
-        shortest = constructor;
-        minCount = thisCount;
-      }
-    }
-    return shortest;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Field
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return all declared {@link Field}'s, including protected and private.
-   */
-  public static List<Field> getFields(Class<?> clazz) {
-    List<Field> fields = Lists.newArrayList();
-    while (clazz != null) {
-      // add all declared field
-      for (Field field : clazz.getDeclaredFields()) {
-        field.setAccessible(true);
-        fields.add(field);
-      }
-      // process superclass
-      clazz = clazz.getSuperclass();
-    }
-    return fields;
-  }
-
-  /**
-   * @return the {@link Field} of given class with given name or <code>null</code> if no such
-   *         {@link Field} found.
-   */
-  public static Field getFieldByName(Class<?> clazz, String name) {
-    Assert.isNotNull(clazz);
-    Assert.isNotNull(name);
-    // check fields of given class and its super classes
-    while (clazz != null) {
-      // check all declared field
-      Field[] declaredFields = clazz.getDeclaredFields();
-      for (Field field : declaredFields) {
-        if (field.getName().equals(name)) {
-          field.setAccessible(true);
-          return field;
-        }
-      }
-      // check interfaces
-      {
-        Class<?>[] interfaceClasses = clazz.getInterfaces();
-        for (Class<?> interfaceClass : interfaceClasses) {
-          Field field = getFieldByName(interfaceClass, name);
-          if (field != null) {
-            return field;
-          }
-        }
-      }
-      // check superclass
-      clazz = clazz.getSuperclass();
-    }
-    // not found
-    return null;
-  }
-
-  /**
-   * @return the {@link Object} value of field with given name.
-   */
-  public static Object getFieldObject(final Object object, final String name) {
-    Assert.isNotNull(object);
-    Assert.isNotNull(name);
-    return ExecutionUtils.runObject(() -> {
-        Class<?> refClass = getRefClass(object);
-        Object refObject = getRefObject(object);
-        Field field = getFieldByName(refClass, name);
-        if (field == null) {
-          throw new IllegalArgumentException("Unable to find '" + name + "' in " + refClass);
-        }
-        return field.get(refObject);
-      });
-  }
-
-  /**
-   * @return the {@link String} value of field with given name.
-   */
-  public static String getFieldString(Object object, String name) {
-    return (String) getFieldObject(object, name);
-  }
-
-  /**
-   * @return the <code>int</code> value of field with given name.
-   */
-  public static int getFieldInt(Object object, String name) {
-    return (Integer) getFieldObject(object, name);
-  }
-
-  /**
-   * @return the <code>short</code> value of field with given name.
-   */
-  public static short getFieldShort(Object object, String name) {
-    return (Short) getFieldObject(object, name);
-  }
-
-  /**
-   * @return the <code>long</code> value of field with given name.
-   */
-  public static long getFieldLong(Object object, String name) {
-    return (Long) getFieldObject(object, name);
-  }
-
-  /**
-   * @return the <code>float</code> value of field with given name.
-   */
-  public static float getFieldFloat(Object object, String name) {
-    return (Float) getFieldObject(object, name);
-  }
-
-  /**
-   * @return the <code>boolean</code> value of field with given name.
-   */
-  public static boolean getFieldBoolean(Object object, String name) {
-    return (Boolean) getFieldObject(object, name);
-  }
-
-  /**
-   * Sets {@link Object} value of field with given name.
-   */
-  public static void setField(Object object, String name, Object value) {
-    try {
-      Assert.isNotNull(object);
-      Class<?> refClass = getRefClass(object);
-      Object refObject = getRefObject(object);
-      getFieldByName(refClass, name).set(refObject, value);
-    } catch (Throwable e) {
-      throw propagate(e);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link Class} of given {@link Object} or casted object, if it is {@link Class}
-   *         itself.
-   */
-  private static Class<?> getRefClass(Object object) {
-    return object instanceof Class<?> ? (Class<?>) object : object.getClass();
-  }
-
-  /**
-   * @return the {@link Object} that should be used as argument for {@link Field#get(Object)} and
-   *         {@link Method#invoke(Object, Object[])}.
-   */
-  private static Object getRefObject(Object object) {
-    return object instanceof Class<?> ? null : object;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Throwable propagation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Helper class used in {@link #propagate(Throwable)}.
-   */
-  private static class ExceptionThrower {
-    private static Throwable throwable;
-
-    private ExceptionThrower() throws Throwable {
-      if (System.getProperty("wbp.ReflectionUtils.propagate().InstantiationException") != null) {
-        throw new InstantiationException();
-      }
-      if (System.getProperty("wbp.ReflectionUtils.propagate().IllegalAccessException") != null) {
-        throw new IllegalAccessException();
-      }
-      throw throwable;
-    }
-
-    public static synchronized void spit(Throwable t) {
-      if (System.getProperty("wbp.ReflectionUtils.propagate().dontThrow") == null) {
-        ExceptionThrower.throwable = t;
-        try {
-          ExceptionThrower.class.newInstance();
-        } catch (InstantiationException e) {
-        } catch (IllegalAccessException e) {
-        } finally {
-          ExceptionThrower.throwable = null;
-        }
-      }
-    }
-  }
-
-  /**
-   * Propagates {@code throwable} as-is without any wrapping. This is trick.
-   *
-   * @return nothing will ever be returned; this return type is only for your convenience, to use
-   *         this method in "throw" statement.
-   */
-  public static RuntimeException propagate(Throwable throwable) {
-    if (System.getProperty("wbp.ReflectionUtils.propagate().forceReturn") == null) {
-      ExceptionThrower.spit(throwable);
-    }
-    return null;
-  }
-
-  /**
-   * @return the {@link Exception} that is given {@link Throwable} or wraps it.
-   */
-  public static Exception getExceptionToThrow(Throwable e) {
-    if (e instanceof Exception) {
-      return (Exception) e;
-    }
-    return new Exception(e);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // PropertyDescriptor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link BeanInfo} of given component {@link Class}.
-   */
-  public static BeanInfo getBeanInfo(Class<?> clazz) throws IntrospectionException {
-    // standard components don't have BeanInfo's
-    {
-      String className = clazz.getName();
-      if (className.startsWith("java.lang.")
-          || className.startsWith("java.awt.")
-          || className.startsWith("javax.swing.")
-          || className.startsWith("org.eclipse.swt")
-          || className.startsWith("org.eclipse.jface")
-          || className.startsWith("org.eclipse.ui.forms")) {
-        return null;
-      }
-    }
-    // OK, get BeanInfo (may be not trivial)
-    Introspector.flushCaches();
-    String[] standard_beanInfoSearchPath = Introspector.getBeanInfoSearchPath();
-    try {
-      Introspector.setBeanInfoSearchPath(new String[]{});
-      return Introspector.getBeanInfo(clazz);
-    } finally {
-      Introspector.flushCaches();
-      Introspector.setBeanInfoSearchPath(standard_beanInfoSearchPath);
-    }
-  }
-
-  private static ClassMap<List<PropertyDescriptor>> m_propertyDescriptorsCache = ClassMap.create();
-
-  /**
-   * Flushes cache for specified {@link Class}.
-   */
-  public static void flushPropertyDescriptorsCache(Class<?> clazz) {
-    m_propertyDescriptorsCache.remove(clazz);
-  }
-
-  /**
-   * @return the {@link PropertyDescriptor}'s for given {@link Class}.
-   */
-  public static List<PropertyDescriptor> getPropertyDescriptors(BeanInfo beanInfo,
-      Class<?> componentClass) throws Exception {
-    // check cache
-    {
-      List<PropertyDescriptor> descriptors = m_propertyDescriptorsCache.get(componentClass);
-      if (descriptors != null) {
-        return descriptors;
-      }
-    }
-    // prepare descriptions
-    List<PropertyDescriptor> descriptors = Lists.newArrayList();
-    // if there is BeanInfo, try to use it
-    if (beanInfo != null) {
-      Collections.addAll(descriptors, beanInfo.getPropertyDescriptors());
-      // remove indexed properties
-      for (Iterator<PropertyDescriptor> I = descriptors.iterator(); I.hasNext();) {
-        PropertyDescriptor descriptor = I.next();
-        if (descriptor instanceof IndexedPropertyDescriptor) {
-          I.remove();
-        }
-      }
-    }
-    // prepare getters/setters
-    Map<String, Method> propertyToGetter = Maps.newTreeMap();
-    Map<String, Method> propertyToSetter = Maps.newTreeMap();
-    // append existing getters/setters
-    for (PropertyDescriptor propertyDescriptor : descriptors) {
-      Method readMethod = getReadMethod(propertyDescriptor);
-      Method writeMethod = getWriteMethod(propertyDescriptor);
-      if (readMethod != null) {
-        String propertyName = getQualifiedPropertyName(readMethod);
-        propertyToGetter.put(propertyName, readMethod);
-        propertyDescriptor.setName(propertyName);
-      }
-      if (writeMethod != null) {
-        String propertyName = getQualifiedPropertyName(writeMethod);
-        propertyToSetter.put(propertyName, writeMethod);
-        propertyDescriptor.setName(propertyName);
-      }
-    }
-    // append missing methods (most probably protected)
-    Set<String> newPropertyNames = Sets.newTreeSet();
-    appendPropertyComponents(componentClass, newPropertyNames, propertyToGetter, propertyToSetter);
-    // create PropertyDescriptor's for new getters/setters
-    for (String propertyName : newPropertyNames) {
-      addPropertyDescriptor(descriptors, propertyName, propertyToGetter, propertyToSetter);
-    }
-    useSimplePropertyNamesWherePossible(descriptors);
-    makeMethodsAccessible(descriptors);
-    // OK, final result
-    m_propertyDescriptorsCache.put(componentClass, descriptors);
-    return descriptors;
-  }
-
-  private static void useSimplePropertyNamesWherePossible(List<PropertyDescriptor> descriptors) {
-    // prepare map: simple name -> qualified names
-    Multimap<String, String> simplePropertyNames = HashMultimap.create();
-    for (PropertyDescriptor propertyDescriptor : descriptors) {
-      String qualifiedPropertyName = propertyDescriptor.getName();
-      String simplePropertyName = getSimplePropertyName(qualifiedPropertyName);
-      simplePropertyNames.put(simplePropertyName, qualifiedPropertyName);
-    }
-    // if simple name is unique, use it
-    for (PropertyDescriptor propertyDescriptor : descriptors) {
-      String qualifiedPropertyName = propertyDescriptor.getName();
-      String simplePropertyName = getSimplePropertyName(qualifiedPropertyName);
-      if (simplePropertyNames.get(simplePropertyName).size() == 1) {
-        propertyDescriptor.setName(simplePropertyName);
-      }
-    }
-  }
-
-  private static void makeMethodsAccessible(List<PropertyDescriptor> descriptors) {
-    for (PropertyDescriptor propertyDescriptor : descriptors) {
-      Method getMethod = getReadMethod(propertyDescriptor);
-      Method setMethod = getWriteMethod(propertyDescriptor);
-      if (getMethod != null) {
-        getMethod.setAccessible(true);
-      }
-      if (setMethod != null) {
-        setMethod.setAccessible(true);
-      }
-    }
-  }
-
-  private static void addPropertyDescriptor(List<PropertyDescriptor> descriptors,
-      String qualifiedPropertyName,
-      Map<String, Method> propertyToGetter,
-      Map<String, Method> propertyToSetter) throws Exception {
-    if (qualifiedPropertyName.startsWith("(")) {
-      return;
-    }
-    // prepare methods
-    Method getMethod = propertyToGetter.get(qualifiedPropertyName);
-    Method setMethod = propertyToSetter.get(qualifiedPropertyName);
-    if (!isValidForJavaIBM(getMethod) || !isValidForJavaIBM(setMethod)) {
-      return;
-    }
-    if (getMethod != null && getMethod.getReturnType() == Void.TYPE) {
-      return;
-    }
-    // add property
-    descriptors.add(new PropertyDescriptor(qualifiedPropertyName, getMethod, setMethod));
-  }
-
-  /**
-   * IMB Java does not allow to create {@link PropertyDescriptor} for non-public methods. See (Case
-   * 37683).
-   */
-  private static boolean isValidForJavaIBM(Method method) {
-    if (method == null) {
-      return true;
-    }
-    return !EnvironmentUtils.isJavaIBM() || isPublic(method);
-  }
-
-  /**
-   * Appends components for {@link PropertyDescriptor}'s of given {@link Class}, its super class and
-   * implemented interfaces.
-   */
-  private static void appendPropertyComponents(Class<?> currentClass,
-      Set<String> newPropertyNames,
-      Map<String, Method> propertyToGetter,
-      Map<String, Method> propertyToSetter) {
-    for (Method method : currentClass.getDeclaredMethods()) {
-      int methodModifiers = method.getModifiers();
-      boolean isPublic = Modifier.isPublic(methodModifiers);
-      boolean isProtected = Modifier.isProtected(methodModifiers);
-      boolean isStatic = Modifier.isStatic(methodModifiers);
-      if (method.isBridge()) {
-        continue;
-      }
-      if (!isStatic && (isPublic || isProtected)) {
-        method.setAccessible(true);
-        String methodName = method.getName();
-        if (methodName.startsWith("set") && method.getParameterTypes().length == 1) {
-          String propertyName = getQualifiedPropertyName(method);
-          if (!propertyToSetter.containsKey(propertyName)) {
-            newPropertyNames.add(propertyName);
-            propertyToSetter.put(propertyName, method);
-          }
-        }
-        if (method.getParameterTypes().length == 0) {
-          if (methodName.startsWith("get")) {
-            String propertyName = getQualifiedPropertyName(method);
-            if (!propertyToGetter.containsKey(propertyName)) {
-              newPropertyNames.add(propertyName);
-              propertyToGetter.put(propertyName, method);
-            }
-          }
-          if (methodName.startsWith("is")) {
-            String propertyName = getQualifiedPropertyName(method);
-            if (!propertyToGetter.containsKey(propertyName)) {
-              newPropertyNames.add(propertyName);
-              propertyToGetter.put(propertyName, method);
-            }
-          }
-        }
-      }
-    }
-    // process interfaces
-    for (Class<?> interfaceClass : currentClass.getInterfaces()) {
-      appendPropertyComponents(interfaceClass, newPropertyNames, propertyToGetter, propertyToSetter);
-    }
-    // process super Class
-    if (currentClass.getSuperclass() != null) {
-      appendPropertyComponents(
-          currentClass.getSuperclass(),
-          newPropertyNames,
-          propertyToGetter,
-          propertyToSetter);
-    }
-  }
-
-  private static String getQualifiedPropertyName(Method method) {
-    // strip Method name to property name
-    String propertyName;
-    {
-      propertyName = method.getName();
-      if (propertyName.startsWith("is")) {
-        propertyName = propertyName.substring(2);
-      } else if (propertyName.startsWith("get")) {
-        propertyName = propertyName.substring(3);
-      } else if (propertyName.startsWith("set")) {
-        propertyName = propertyName.substring(3);
-      }
-      propertyName = Introspector.decapitalize(propertyName);
-    }
-    // include also type
-    String types;
-    {
-      Class<?>[] parameterTypes = method.getParameterTypes();
-      if (parameterTypes.length == 0) {
-        types = "(" + getFullyQualifiedName(method.getReturnType(), false) + ")";
-      } else {
-        StringBuilder buffer = new StringBuilder();
-        appendParameterTypes(buffer, parameterTypes);
-        types = buffer.toString();
-      }
-    }
-    // return qualified property name
-    return propertyName + types;
-  }
-
-  private static String getSimplePropertyName(String qualifiedPropertyName) {
-    return StringUtils.substringBefore(qualifiedPropertyName, "(");
-  }
+	 *
+	 * @return the short name of given {@link Class}.
+	 */
+	public static String getShortName(Class<?> clazz) {
+		String className = getFullyQualifiedName(clazz, false);
+		// member Class
+		if (clazz.isMemberClass()) {
+			Class<?> topClass = getTopLevelClass(clazz);
+			String topName = topClass.getName();
+			String topPackage = StringUtils.substringBeforeLast(topName, ".") + ".";
+			return className.substring(topPackage.length());
+		}
+		// normal top level Class, may be array
+		if (className.indexOf('.') != -1) {
+			return StringUtils.substringAfterLast(className, ".");
+		}
+		// primitive or default package
+		return className;
+	}
+
+	private static Class<?> getTopLevelClass(Class<?> clazz) {
+		while (clazz.isMemberClass()) {
+			clazz = clazz.getEnclosingClass();
+		}
+		return clazz;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Modifiers
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static boolean isPublic(Constructor<?> constructor) {
+		return Modifier.isPublic(constructor.getModifiers());
+	}
+
+	public static boolean isProtected(Constructor<?> constructor) {
+		return Modifier.isProtected(constructor.getModifiers());
+	}
+
+	public static boolean isPrivate(Constructor<?> constructor) {
+		return Modifier.isPrivate(constructor.getModifiers());
+	}
+
+	public static boolean isPackagePrivate(Constructor<?> constructor) {
+		return !isPublic(constructor) && !isProtected(constructor) && !isPrivate(constructor);
+	}
+
+	public static boolean isPublic(Method method) {
+		return Modifier.isPublic(method.getModifiers());
+	}
+
+	public static boolean isProtected(Method method) {
+		return Modifier.isProtected(method.getModifiers());
+	}
+
+	public static boolean isPrivate(Method method) {
+		return Modifier.isPrivate(method.getModifiers());
+	}
+
+	public static boolean isPackagePrivate(Method method) {
+		return !isPublic(method) && !isProtected(method) && !isPrivate(method);
+	}
+
+	public static boolean isAbstract(Method method) {
+		return Modifier.isAbstract(method.getModifiers());
+	}
+
+	public static boolean isPublic(Field field) {
+		return Modifier.isPublic(field.getModifiers());
+	}
+
+	public static boolean isProtected(Field field) {
+		return Modifier.isProtected(field.getModifiers());
+	}
+
+	public static boolean isPrivate(Field field) {
+		return Modifier.isPrivate(field.getModifiers());
+	}
+
+	public static boolean isPackagePrivate(Field field) {
+		return !isPublic(field) && !isProtected(field) && !isPrivate(field);
+	}
+
+	public static boolean isStatic(Field field) {
+		return Modifier.isStatic(field.getModifiers());
+	}
+
+	public static boolean isAbstract(Class<?> clazz) {
+		return Modifier.isAbstract(clazz.getModifiers());
+	}
+
+	public static boolean isPublic(Class<?> clazz) {
+		return Modifier.isPublic(clazz.getModifiers());
+	}
+
+	public static boolean isProtected(Class<?> clazz) {
+		return Modifier.isProtected(clazz.getModifiers());
+	}
+
+	public static boolean isPrivate(Class<?> clazz) {
+		return Modifier.isPrivate(clazz.getModifiers());
+	}
+
+	public static boolean isPackagePrivate(Class<?> clazz) {
+		return !isPublic(clazz) && !isProtected(clazz) && !isPrivate(clazz);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Method
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return all declared {@link Method}'s, including protected and private.
+	 */
+	public static Map<String, Method> getMethods(Class<?> clazz) {
+		Map<String, Method> methods = new HashMap<>();
+		// process classes
+		for (Class<?> c = clazz; c != null; c = c.getSuperclass()) {
+			for (Method method : c.getDeclaredMethods()) {
+				String signature = getMethodSignature(method);
+				if (!methods.containsKey(signature)) {
+					method.setAccessible(true);
+					methods.put(signature, method);
+				}
+			}
+		}
+		// process interfaces
+		for (Class<?> interfaceClass : clazz.getInterfaces()) {
+			for (Method method : interfaceClass.getDeclaredMethods()) {
+				String signature = getMethodSignature(method);
+				if (!methods.containsKey(signature)) {
+					method.setAccessible(true);
+					methods.put(signature, method);
+				}
+			}
+		}
+		// done
+		return methods;
+	}
+
+	/**
+	 * @return signature for given {@link Method}. This signature is not same signature as in JVM or
+	 *         JDT, just some string that unique identifies method in its {@link Class}.
+	 */
+	public static String getMethodSignature(Method method) {
+		Assert.isNotNull(method);
+		return getMethodSignature(method.getName(), method.getParameterTypes());
+	}
+
+	/**
+	 * Returns the signature of {@link Method} with given combination of name and parameter types.
+	 * This signature is not same signature as in JVM or JDT, just some string that unique identifies
+	 * method in its {@link Class}.
+	 *
+	 * @param name
+	 *          the name of {@link Method}.
+	 * @param parameterTypes
+	 *          the types of {@link Method} parameters.
+	 *
+	 * @return signature of {@link Method}.
+	 */
+	public static String getMethodSignature(String name, Type... parameterTypes) {
+		Assert.isNotNull(name);
+		Assert.isNotNull(parameterTypes);
+		//
+		StringBuilder buffer = new StringBuilder();
+		buffer.append(name);
+		appendParameterTypes(buffer, parameterTypes);
+		return buffer.toString();
+	}
+
+	/**
+	 * @return generic signature for given {@link Method}. This signature is not same signature as in
+	 *         JVM or JDT, just some string that unique identifies constructor in its {@link Class}.
+	 *         It uses {@link Method#getGenericParameterTypes()}, so for each {@link TypeVariable} its
+	 *         name will be used in signature.
+	 */
+	public static String getMethodGenericSignature(Method method) {
+		Assert.isNotNull(method);
+		return getMethodSignature(method.getName(), method.getGenericParameterTypes());
+	}
+
+	/**
+	 * Note: you should not use this method, using {@link #getMethodBySignature(Class, String)}.
+	 *
+	 * @return the {@link Method} for given name, or <code>null</code> if no such method found.
+	 */
+	public static Method getMethodByName(Class<?> clazz, String name) {
+		Assert.isNotNull(clazz);
+		Assert.isNotNull(name);
+		for (Method method : getMethods(clazz).values()) {
+			if (method.getName().equals(name)) {
+				return method;
+			}
+		}
+		return null;
+	}
+
+	private static final ClassMap<Map<String, Method>> m_getMethodBySignature = ClassMap.create();
+
+	/**
+	 * Returns the {@link Method} defined in {@link Class}. This method can have any visibility, i.e.
+	 * we can find even protected/private methods. Can return <code>null</code> if no method with
+	 * given signature found.
+	 *
+	 * @param clazz
+	 *          the {@link Class} to get method from it, or its superclass.
+	 * @param signature
+	 *          the signature of method in same format as {@link #getMethodSignature(Method)}.
+	 *
+	 * @return the {@link Method} for given signature, or <code>null</code> if no such method found.
+	 */
+	public static Method getMethodBySignature(Class<?> clazz, String signature) {
+		Assert.isNotNull(clazz);
+		Assert.isNotNull(signature);
+		// prepare cache
+		Map<String, Method> cache = m_getMethodBySignature.get(clazz);
+		if (cache == null) {
+			cache = getMethods(clazz);
+			m_getMethodBySignature.put(clazz, cache);
+		}
+		// use cache
+		return cache.get(signature);
+	}
+
+	/**
+	 * @param signature
+	 *          the generic signature of {@link Method} in same format as
+	 *          {@link #getMethodGenericSignature(Method)}.
+	 *
+	 * @return the {@link Method} for given signature. This constructor can have any visibility, i.e.
+	 *         we can find even protected/private constructors.
+	 */
+	public static Method getMethodByGenericSignature(Class<?> clazz, String signature) {
+		Assert.isNotNull(clazz);
+		Assert.isNotNull(signature);
+		// check public methods
+		for (Method method : clazz.getMethods()) {
+			if (getMethodGenericSignature(method).equals(signature)) {
+				return method;
+			}
+		}
+		// not found
+		return null;
+	}
+
+	/**
+	 * Returns the {@link Method} defined in {@link Class}. This method can have any visibility, i.e.
+	 * we can find even protected/private methods. Can return <code>null</code> if no method with
+	 * given combination of name/parameters found.
+	 *
+	 * @param clazz
+	 *          the {@link Class} to get method from it, or its superclass.
+	 * @param name
+	 *          the name of method.
+	 * @param parameterTypes
+	 *          the array of parameter types.
+	 *
+	 * @return the {@link Method} for given name/parameters, or <code>null</code> if no such method
+	 *         found.
+	 */
+	public static Method getMethod(Class<?> clazz, String name, Class<?>... parameterTypes) {
+		Assert.isNotNull(clazz);
+		Assert.isNotNull(name);
+		Assert.isNotNull(parameterTypes);
+		String signature = getMethodSignature(name, parameterTypes);
+		return getMethodBySignature(clazz, signature);
+	}
+
+	/**
+	 * @return <code>true</code> if given {@link Method} is declared in {@link Class} with given name
+	 *         or one of its superclasses.
+	 */
+	public static boolean isAlreadyDeclaredIn(Method method, Class<?> targetClass) {
+		Class<?> declaringClass = method.getDeclaringClass();
+		return declaringClass.isAssignableFrom(targetClass);
+	}
+
+	/**
+	 * @return <code>true</code> if two {@link Method}s have same name, but parameter types of
+	 *         "specific" are {@link #isMoreSpecific(Class[], Class[])} than "base".
+	 */
+	public static boolean isMoreSpecific(Method base, Method specific) {
+		return base.getName().equals(specific.getName())
+				&& isMoreSpecific(base.getParameterTypes(), specific.getParameterTypes());
+	}
+
+	/**
+	 * @return the {@link Method} which is {@link #isMoreSpecific(Method, Method)} than all others.
+	 */
+	public static Method getMostSpecific(List<Method> methods) {
+		Method mostSpecific = null;
+		for (Method method : methods) {
+			if (mostSpecific == null || isMoreSpecific(mostSpecific, method)) {
+				mostSpecific = method;
+			}
+		}
+		return mostSpecific;
+	}
+
+	/**
+	 * @return the {@link Object} result of invoking method with given signature.
+	 */
+	public static Object invokeMethodEx(Object object, String signature, Object... arguments) {
+		try {
+			return invokeMethod(object, signature, arguments);
+		} catch (Throwable e) {
+			throw propagate(e);
+		}
+	}
+
+	/**
+	 * @return the {@link Object} result of invoking method with given signature.
+	 */
+	public static Object invokeMethod(Object object, String signature, Object... arguments)
+			throws Exception {
+		Assert.isNotNull(object);
+		Assert.isNotNull(arguments);
+		// prepare class/object
+		Class<?> refClass = getRefClass(object);
+		Object refObject = getRefObject(object);
+		// prepare method
+		Method method = getMethodBySignature(refClass, signature);
+		Assert.isNotNull(method, "Can not find method " + signature + " in " + refClass);
+		// do invoke
+		try {
+			return method.invoke(refObject, arguments);
+		} catch (InvocationTargetException e) {
+			throw propagate(e.getCause());
+		}
+	}
+
+	/**
+	 * Invokes method without parameters.
+	 *
+	 * @return the {@link Object} result of invoking method.
+	 */
+	public static Object invokeMethod2(Object object, String name) throws Exception {
+		return invokeMethod(object, name + "()");
+	}
+
+	/**
+	 * Invokes method with single parameter.
+	 *
+	 * @return the {@link Object} result of invoking method.
+	 */
+	public static Object invokeMethod2(Object object,
+			String name,
+			Class<?> parameterType_1,
+			Object argument_1) throws Exception {
+		Class<?>[] types = new Class<?>[]{parameterType_1};
+		Object[] values = new Object[]{argument_1};
+		return invokeMethod2(object, name, types, values);
+	}
+
+	/**
+	 * Invokes method with two parameters.
+	 *
+	 * @return the {@link Object} result of invoking method.
+	 */
+	public static Object invokeMethod2(Object object,
+			String name,
+			Class<?> parameterType_1,
+			Class<?> parameterType_2,
+			Object argument_1,
+			Object argument_2) throws Exception {
+		Class<?>[] types = new Class<?>[]{parameterType_1, parameterType_2};
+		Object[] values = new Object[]{argument_1, argument_2};
+		return invokeMethod2(object, name, types, values);
+	}
+
+	/**
+	 * Invokes method with three parameters.
+	 *
+	 * @return the {@link Object} result of invoking method.
+	 */
+	public static Object invokeMethod2(Object object,
+			String name,
+			Class<?> parameterType_1,
+			Class<?> parameterType_2,
+			Class<?> parameterType_3,
+			Object argument_1,
+			Object argument_2,
+			Object argument_3) throws Exception {
+		Class<?>[] types = new Class<?>[]{parameterType_1, parameterType_2, parameterType_3};
+		Object[] values = new Object[]{argument_1, argument_2, argument_3};
+		return invokeMethod2(object, name, types, values);
+	}
+
+	/**
+	 * Invokes method with four parameters.
+	 *
+	 * @return the {@link Object} result of invoking method.
+	 */
+	public static Object invokeMethod2(Object object,
+			String name,
+			Class<?> parameterType_1,
+			Class<?> parameterType_2,
+			Class<?> parameterType_3,
+			Class<?> parameterType_4,
+			Object argument_1,
+			Object argument_2,
+			Object argument_3,
+			Object argument_4) throws Exception {
+		Class<?>[] types =
+				new Class<?>[]{parameterType_1, parameterType_2, parameterType_3, parameterType_4};
+				Object[] values = new Object[]{argument_1, argument_2, argument_3, argument_4};
+				return invokeMethod2(object, name, types, values);
+	}
+
+	/**
+	 * Invokes method by name and parameter types.
+	 *
+	 * @param object
+	 *          the object to call, may be {@link Class} for invoking static method.
+	 * @param name
+	 *          the name of method.
+	 * @param parameterTypes
+	 *          the types of parameters.
+	 * @param arguments
+	 *          the values of argument for invocation.
+	 *
+	 * @return the {@link Object} result of invoking method.
+	 */
+	public static Object invokeMethod2(Object object,
+			String name,
+			Class<?>[] parameterTypes,
+			Object[] arguments) throws Exception {
+		Assert.equals(parameterTypes.length, arguments.length);
+		String signature = getMethodSignature(name, parameterTypes);
+		return invokeMethod(object, signature, arguments);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return signature for given {@link Constructor}. This signature is not same signature as in JVM
+	 *         or JDT, just some string that unique identifies constructor in its {@link Class}.
+	 */
+	public static String getConstructorSignature(Constructor<?> constructor) {
+		Assert.isNotNull(constructor);
+		return getConstructorSignature(constructor.getParameterTypes());
+	}
+
+	/**
+	 * @return generic signature for given {@link Constructor}. This signature is not same signature
+	 *         as in JVM or JDT, just some string that unique identifies constructor in its
+	 *         {@link Class}. It uses {@link Constructor#getGenericParameterTypes()}, so for each
+	 *         {@link TypeVariable} its name will be used in signature.
+	 */
+	public static String getConstructorGenericSignature(Constructor<?> constructor) {
+		Assert.isNotNull(constructor);
+		return getConstructorSignature(constructor.getGenericParameterTypes());
+	}
+
+	/**
+	 * Returns the signature of {@link Constructor} with given parameter types. This signature is not
+	 * same signature as in JVM or JDT, just some string that unique identifies constructor in its
+	 * {@link Class}.
+	 *
+	 * @param parameterTypes
+	 *          the types of {@link Constructor} parameters.
+	 *
+	 * @return signature of {@link Constructor}.
+	 */
+	public static String getConstructorSignature(Type... parameterTypes) {
+		Assert.isNotNull(parameterTypes);
+		//
+		StringBuilder buffer = new StringBuilder();
+		buffer.append("<init>");
+		appendParameterTypes(buffer, parameterTypes);
+		return buffer.toString();
+	}
+
+	/**
+	 * @param signature
+	 *          the signature of {@link Constructor} in same format as
+	 *          {@link #getConstructorSignature(Constructor)} .
+	 *
+	 * @return the {@link Constructor} for given signature. This constructor can have any visibility,
+	 *         i.e. we can find even protected/private constructors.
+	 */
+	@SuppressWarnings("unchecked")
+	public static <T> Constructor<T> getConstructorBySignature(Class<T> clazz, String signature) {
+		Assert.isNotNull(clazz);
+		Assert.isNotNull(signature);
+		// check all declared constructors
+		for (Constructor<?> constructor : clazz.getDeclaredConstructors()) {
+			if (getConstructorSignature(constructor).equals(signature)) {
+				constructor.setAccessible(true);
+				return (Constructor<T>) constructor;
+			}
+		}
+		// not found
+		return null;
+	}
+
+	/**
+	 * @param signature
+	 *          the generic signature of {@link Constructor} in same format as
+	 *          {@link #getConstructorGenericSignature(Constructor)}.
+	 *
+	 * @return the {@link Constructor} for given signature. This constructor can have any visibility,
+	 *         i.e. we can find even protected/private constructors.
+	 */
+	@SuppressWarnings("unchecked")
+	public static <T> Constructor<T> getConstructorByGenericSignature(Class<T> clazz, String signature) {
+		Assert.isNotNull(clazz);
+		Assert.isNotNull(signature);
+		// check all declared constructors
+		for (Constructor<?> constructor : clazz.getDeclaredConstructors()) {
+			if (getConstructorGenericSignature(constructor).equals(signature)) {
+				constructor.setAccessible(true);
+				return (Constructor<T>) constructor;
+			}
+		}
+		// not found
+		return null;
+	}
+
+	/**
+	 * @param parameterTypes
+	 *          the array of parameter types.
+	 *
+	 * @return the {@link Constructor} for given signature. This constructor can have any visibility,
+	 *         i.e. we can find even protected/private constructors.
+	 */
+	public static <T> Constructor<T> getConstructor(Class<T> clazz, Class<?>... parameterTypes) {
+		Assert.isNotNull(clazz);
+		Assert.isNotNull(parameterTypes);
+		String signature = getConstructorSignature(parameterTypes);
+		return getConstructorBySignature(clazz, signature);
+	}
+
+	/**
+	 * @return the {@link Constructor} which can be invoked with given arguments, may be
+	 *         <code>null</code>.
+	 */
+	@SuppressWarnings("unchecked")
+	public static <T> Constructor<T> getConstructorForArguments(Class<T> clazz, Object... arguments) {
+		Assert.isNotNull(clazz);
+		Assert.isNotNull(arguments);
+		for (Constructor<?> constructor : clazz.getConstructors()) {
+			Class<?>[] parameterTypes = constructor.getParameterTypes();
+			// check compatibility of each parameter and argument
+			boolean canUse = true;
+			if (parameterTypes.length == arguments.length) {
+				for (int i = 0; i < parameterTypes.length; i++) {
+					Class<?> parameterType = parameterTypes[i];
+					Object argument = arguments[i];
+					if (!isAssignableFrom(parameterType, argument)) {
+						canUse = false;
+						break;
+					}
+				}
+				// use if possible
+				if (canUse) {
+					return (Constructor<T>) constructor;
+				}
+			}
+		}
+		// no compatible constructor
+		return null;
+	}
+
+	/**
+	 * @return <code>true</code> if two given {@link Constructor}-s represent same constructor.
+	 */
+	public static boolean equals(Constructor<?> constructor_1, Constructor<?> constructor_2) {
+		if (constructor_1 == constructor_2) {
+			return true;
+		}
+		return constructor_1.getDeclaringClass() == constructor_2.getDeclaringClass()
+				&& ObjectUtils.equals(
+						getConstructorSignature(constructor_1),
+						getConstructorSignature(constructor_2));
+	}
+
+	/**
+	 * @return the {@link Constructor} with minimal number of parameters.
+	 */
+	public static Constructor<?> getShortestConstructor(Class<?> clazz) {
+		Constructor<?> shortest = null;
+		int minCount = Integer.MAX_VALUE;
+		for (Constructor<?> constructor : clazz.getConstructors()) {
+			int thisCount = constructor.getParameterTypes().length;
+			if (minCount > thisCount) {
+				shortest = constructor;
+				minCount = thisCount;
+			}
+		}
+		return shortest;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Field
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return all declared {@link Field}'s, including protected and private.
+	 */
+	public static List<Field> getFields(Class<?> clazz) {
+		List<Field> fields = Lists.newArrayList();
+		while (clazz != null) {
+			// add all declared field
+			for (Field field : clazz.getDeclaredFields()) {
+				field.setAccessible(true);
+				fields.add(field);
+			}
+			// process superclass
+			clazz = clazz.getSuperclass();
+		}
+		return fields;
+	}
+
+	/**
+	 * @return the {@link Field} of given class with given name or <code>null</code> if no such
+	 *         {@link Field} found.
+	 */
+	public static Field getFieldByName(Class<?> clazz, String name) {
+		Assert.isNotNull(clazz);
+		Assert.isNotNull(name);
+		// check fields of given class and its super classes
+		while (clazz != null) {
+			// check all declared field
+			Field[] declaredFields = clazz.getDeclaredFields();
+			for (Field field : declaredFields) {
+				if (field.getName().equals(name)) {
+					field.setAccessible(true);
+					return field;
+				}
+			}
+			// check interfaces
+			{
+				Class<?>[] interfaceClasses = clazz.getInterfaces();
+				for (Class<?> interfaceClass : interfaceClasses) {
+					Field field = getFieldByName(interfaceClass, name);
+					if (field != null) {
+						return field;
+					}
+				}
+			}
+			// check superclass
+			clazz = clazz.getSuperclass();
+		}
+		// not found
+		return null;
+	}
+
+	/**
+	 * @return the {@link Object} value of field with given name.
+	 */
+	public static Object getFieldObject(final Object object, final String name) {
+		Assert.isNotNull(object);
+		Assert.isNotNull(name);
+		return ExecutionUtils.runObject(() -> {
+			Class<?> refClass = getRefClass(object);
+			Object refObject = getRefObject(object);
+			Field field = getFieldByName(refClass, name);
+			if (field == null) {
+				throw new IllegalArgumentException("Unable to find '" + name + "' in " + refClass);
+			}
+			return field.get(refObject);
+		});
+	}
+
+	/**
+	 * @return the {@link String} value of field with given name.
+	 */
+	public static String getFieldString(Object object, String name) {
+		return (String) getFieldObject(object, name);
+	}
+
+	/**
+	 * @return the <code>int</code> value of field with given name.
+	 */
+	public static int getFieldInt(Object object, String name) {
+		return (Integer) getFieldObject(object, name);
+	}
+
+	/**
+	 * @return the <code>short</code> value of field with given name.
+	 */
+	public static short getFieldShort(Object object, String name) {
+		return (Short) getFieldObject(object, name);
+	}
+
+	/**
+	 * @return the <code>long</code> value of field with given name.
+	 */
+	public static long getFieldLong(Object object, String name) {
+		return (Long) getFieldObject(object, name);
+	}
+
+	/**
+	 * @return the <code>float</code> value of field with given name.
+	 */
+	public static float getFieldFloat(Object object, String name) {
+		return (Float) getFieldObject(object, name);
+	}
+
+	/**
+	 * @return the <code>boolean</code> value of field with given name.
+	 */
+	public static boolean getFieldBoolean(Object object, String name) {
+		return (Boolean) getFieldObject(object, name);
+	}
+
+	/**
+	 * Sets {@link Object} value of field with given name.
+	 */
+	public static void setField(Object object, String name, Object value) {
+		try {
+			Assert.isNotNull(object);
+			Class<?> refClass = getRefClass(object);
+			Object refObject = getRefObject(object);
+			getFieldByName(refClass, name).set(refObject, value);
+		} catch (Throwable e) {
+			throw propagate(e);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link Class} of given {@link Object} or casted object, if it is {@link Class}
+	 *         itself.
+	 */
+	private static Class<?> getRefClass(Object object) {
+		return object instanceof Class<?> ? (Class<?>) object : object.getClass();
+	}
+
+	/**
+	 * @return the {@link Object} that should be used as argument for {@link Field#get(Object)} and
+	 *         {@link Method#invoke(Object, Object[])}.
+	 */
+	private static Object getRefObject(Object object) {
+		return object instanceof Class<?> ? null : object;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Throwable propagation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Helper class used in {@link #propagate(Throwable)}.
+	 */
+	private static class ExceptionThrower {
+		private static Throwable throwable;
+
+		private ExceptionThrower() throws Throwable {
+			if (System.getProperty("wbp.ReflectionUtils.propagate().InstantiationException") != null) {
+				throw new InstantiationException();
+			}
+			if (System.getProperty("wbp.ReflectionUtils.propagate().IllegalAccessException") != null) {
+				throw new IllegalAccessException();
+			}
+			throw throwable;
+		}
+
+		public static synchronized void spit(Throwable t) {
+			if (System.getProperty("wbp.ReflectionUtils.propagate().dontThrow") == null) {
+				ExceptionThrower.throwable = t;
+				try {
+					ExceptionThrower.class.newInstance();
+				} catch (InstantiationException e) {
+				} catch (IllegalAccessException e) {
+				} finally {
+					ExceptionThrower.throwable = null;
+				}
+			}
+		}
+	}
+
+	/**
+	 * Propagates {@code throwable} as-is without any wrapping. This is trick.
+	 *
+	 * @return nothing will ever be returned; this return type is only for your convenience, to use
+	 *         this method in "throw" statement.
+	 */
+	public static RuntimeException propagate(Throwable throwable) {
+		if (System.getProperty("wbp.ReflectionUtils.propagate().forceReturn") == null) {
+			ExceptionThrower.spit(throwable);
+		}
+		return null;
+	}
+
+	/**
+	 * @return the {@link Exception} that is given {@link Throwable} or wraps it.
+	 */
+	public static Exception getExceptionToThrow(Throwable e) {
+		if (e instanceof Exception) {
+			return (Exception) e;
+		}
+		return new Exception(e);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// PropertyDescriptor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link BeanInfo} of given component {@link Class}.
+	 */
+	public static BeanInfo getBeanInfo(Class<?> clazz) throws IntrospectionException {
+		// standard components don't have BeanInfo's
+		{
+			String className = clazz.getName();
+			if (className.startsWith("java.lang.")
+					|| className.startsWith("java.awt.")
+					|| className.startsWith("javax.swing.")
+					|| className.startsWith("org.eclipse.swt")
+					|| className.startsWith("org.eclipse.jface")
+					|| className.startsWith("org.eclipse.ui.forms")) {
+				return null;
+			}
+		}
+		// OK, get BeanInfo (may be not trivial)
+		Introspector.flushCaches();
+		String[] standard_beanInfoSearchPath = Introspector.getBeanInfoSearchPath();
+		try {
+			Introspector.setBeanInfoSearchPath(new String[]{});
+			return Introspector.getBeanInfo(clazz);
+		} finally {
+			Introspector.flushCaches();
+			Introspector.setBeanInfoSearchPath(standard_beanInfoSearchPath);
+		}
+	}
+
+	private static ClassMap<List<PropertyDescriptor>> m_propertyDescriptorsCache = ClassMap.create();
+
+	/**
+	 * Flushes cache for specified {@link Class}.
+	 */
+	public static void flushPropertyDescriptorsCache(Class<?> clazz) {
+		m_propertyDescriptorsCache.remove(clazz);
+	}
+
+	/**
+	 * @return the {@link PropertyDescriptor}'s for given {@link Class}.
+	 */
+	public static List<PropertyDescriptor> getPropertyDescriptors(BeanInfo beanInfo,
+			Class<?> componentClass) throws Exception {
+		// check cache
+		{
+			List<PropertyDescriptor> descriptors = m_propertyDescriptorsCache.get(componentClass);
+			if (descriptors != null) {
+				return descriptors;
+			}
+		}
+		// prepare descriptions
+		List<PropertyDescriptor> descriptors = Lists.newArrayList();
+		// if there is BeanInfo, try to use it
+		if (beanInfo != null) {
+			Collections.addAll(descriptors, beanInfo.getPropertyDescriptors());
+			// remove indexed properties
+			for (Iterator<PropertyDescriptor> I = descriptors.iterator(); I.hasNext();) {
+				PropertyDescriptor descriptor = I.next();
+				if (descriptor instanceof IndexedPropertyDescriptor) {
+					I.remove();
+				}
+			}
+		}
+		// prepare getters/setters
+		Map<String, Method> propertyToGetter = Maps.newTreeMap();
+		Map<String, Method> propertyToSetter = Maps.newTreeMap();
+		// append existing getters/setters
+		for (PropertyDescriptor propertyDescriptor : descriptors) {
+			Method readMethod = getReadMethod(propertyDescriptor);
+			Method writeMethod = getWriteMethod(propertyDescriptor);
+			if (readMethod != null) {
+				String propertyName = getQualifiedPropertyName(readMethod);
+				propertyToGetter.put(propertyName, readMethod);
+				propertyDescriptor.setName(propertyName);
+			}
+			if (writeMethod != null) {
+				String propertyName = getQualifiedPropertyName(writeMethod);
+				propertyToSetter.put(propertyName, writeMethod);
+				propertyDescriptor.setName(propertyName);
+			}
+		}
+		// append missing methods (most probably protected)
+		Set<String> newPropertyNames = Sets.newTreeSet();
+		appendPropertyComponents(componentClass, newPropertyNames, propertyToGetter, propertyToSetter);
+		// create PropertyDescriptor's for new getters/setters
+		for (String propertyName : newPropertyNames) {
+			addPropertyDescriptor(descriptors, propertyName, propertyToGetter, propertyToSetter);
+		}
+		useSimplePropertyNamesWherePossible(descriptors);
+		makeMethodsAccessible(descriptors);
+		// OK, final result
+		m_propertyDescriptorsCache.put(componentClass, descriptors);
+		return descriptors;
+	}
+
+	private static void useSimplePropertyNamesWherePossible(List<PropertyDescriptor> descriptors) {
+		// prepare map: simple name -> qualified names
+		Multimap<String, String> simplePropertyNames = HashMultimap.create();
+		for (PropertyDescriptor propertyDescriptor : descriptors) {
+			String qualifiedPropertyName = propertyDescriptor.getName();
+			String simplePropertyName = getSimplePropertyName(qualifiedPropertyName);
+			simplePropertyNames.put(simplePropertyName, qualifiedPropertyName);
+		}
+		// if simple name is unique, use it
+		for (PropertyDescriptor propertyDescriptor : descriptors) {
+			String qualifiedPropertyName = propertyDescriptor.getName();
+			String simplePropertyName = getSimplePropertyName(qualifiedPropertyName);
+			if (simplePropertyNames.get(simplePropertyName).size() == 1) {
+				propertyDescriptor.setName(simplePropertyName);
+			}
+		}
+	}
+
+	private static void makeMethodsAccessible(List<PropertyDescriptor> descriptors) {
+		for (PropertyDescriptor propertyDescriptor : descriptors) {
+			Method getMethod = getReadMethod(propertyDescriptor);
+			Method setMethod = getWriteMethod(propertyDescriptor);
+			if (getMethod != null) {
+				getMethod.setAccessible(true);
+			}
+			if (setMethod != null) {
+				setMethod.setAccessible(true);
+			}
+		}
+	}
+
+	private static void addPropertyDescriptor(List<PropertyDescriptor> descriptors,
+			String qualifiedPropertyName,
+			Map<String, Method> propertyToGetter,
+			Map<String, Method> propertyToSetter) throws Exception {
+		if (qualifiedPropertyName.startsWith("(")) {
+			return;
+		}
+		// prepare methods
+		Method getMethod = propertyToGetter.get(qualifiedPropertyName);
+		Method setMethod = propertyToSetter.get(qualifiedPropertyName);
+		if (!isValidForJavaIBM(getMethod) || !isValidForJavaIBM(setMethod)) {
+			return;
+		}
+		if (getMethod != null && getMethod.getReturnType() == Void.TYPE) {
+			return;
+		}
+		// add property
+		descriptors.add(new PropertyDescriptor(qualifiedPropertyName, getMethod, setMethod));
+	}
+
+	/**
+	 * IMB Java does not allow to create {@link PropertyDescriptor} for non-public methods. See (Case
+	 * 37683).
+	 */
+	private static boolean isValidForJavaIBM(Method method) {
+		if (method == null) {
+			return true;
+		}
+		return !EnvironmentUtils.isJavaIBM() || isPublic(method);
+	}
+
+	/**
+	 * Appends components for {@link PropertyDescriptor}'s of given {@link Class}, its super class and
+	 * implemented interfaces.
+	 */
+	private static void appendPropertyComponents(Class<?> currentClass,
+			Set<String> newPropertyNames,
+			Map<String, Method> propertyToGetter,
+			Map<String, Method> propertyToSetter) {
+		for (Method method : currentClass.getDeclaredMethods()) {
+			int methodModifiers = method.getModifiers();
+			boolean isPublic = Modifier.isPublic(methodModifiers);
+			boolean isProtected = Modifier.isProtected(methodModifiers);
+			boolean isStatic = Modifier.isStatic(methodModifiers);
+			if (method.isBridge()) {
+				continue;
+			}
+			if (!isStatic && (isPublic || isProtected)) {
+				method.setAccessible(true);
+				String methodName = method.getName();
+				if (methodName.startsWith("set") && method.getParameterTypes().length == 1) {
+					String propertyName = getQualifiedPropertyName(method);
+					if (!propertyToSetter.containsKey(propertyName)) {
+						newPropertyNames.add(propertyName);
+						propertyToSetter.put(propertyName, method);
+					}
+				}
+				if (method.getParameterTypes().length == 0) {
+					if (methodName.startsWith("get")) {
+						String propertyName = getQualifiedPropertyName(method);
+						if (!propertyToGetter.containsKey(propertyName)) {
+							newPropertyNames.add(propertyName);
+							propertyToGetter.put(propertyName, method);
+						}
+					}
+					if (methodName.startsWith("is")) {
+						String propertyName = getQualifiedPropertyName(method);
+						if (!propertyToGetter.containsKey(propertyName)) {
+							newPropertyNames.add(propertyName);
+							propertyToGetter.put(propertyName, method);
+						}
+					}
+				}
+			}
+		}
+		// process interfaces
+		for (Class<?> interfaceClass : currentClass.getInterfaces()) {
+			appendPropertyComponents(interfaceClass, newPropertyNames, propertyToGetter, propertyToSetter);
+		}
+		// process super Class
+		if (currentClass.getSuperclass() != null) {
+			appendPropertyComponents(
+					currentClass.getSuperclass(),
+					newPropertyNames,
+					propertyToGetter,
+					propertyToSetter);
+		}
+	}
+
+	private static String getQualifiedPropertyName(Method method) {
+		// strip Method name to property name
+		String propertyName;
+		{
+			propertyName = method.getName();
+			if (propertyName.startsWith("is")) {
+				propertyName = propertyName.substring(2);
+			} else if (propertyName.startsWith("get")) {
+				propertyName = propertyName.substring(3);
+			} else if (propertyName.startsWith("set")) {
+				propertyName = propertyName.substring(3);
+			}
+			propertyName = Introspector.decapitalize(propertyName);
+		}
+		// include also type
+		String types;
+		{
+			Class<?>[] parameterTypes = method.getParameterTypes();
+			if (parameterTypes.length == 0) {
+				types = "(" + getFullyQualifiedName(method.getReturnType(), false) + ")";
+			} else {
+				StringBuilder buffer = new StringBuilder();
+				appendParameterTypes(buffer, parameterTypes);
+				types = buffer.toString();
+			}
+		}
+		// return qualified property name
+		return propertyName + types;
+	}
+
+	private static String getSimplePropertyName(String qualifiedPropertyName) {
+		return StringUtils.substringBefore(qualifiedPropertyName, "(");
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/state/EditorWarning.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/state/EditorWarning.java
index a5d9246a2..ccb555ffd 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/state/EditorWarning.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/state/EditorWarning.java
@@ -17,39 +17,39 @@
  * @coverage core.model
  */
 public final class EditorWarning {
-  private final String m_message;
-  private final Throwable m_exception;
+	private final String m_message;
+	private final Throwable m_exception;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public EditorWarning(String message) {
-    this(message, null);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public EditorWarning(String message) {
+		this(message, null);
+	}
 
-  public EditorWarning(String message, Throwable exception) {
-    m_message = message;
-    m_exception = exception;
-  }
+	public EditorWarning(String message, Throwable exception) {
+		m_message = message;
+		m_exception = exception;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the message of warning.
-   */
-  public String getMessage() {
-    return m_message;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the message of warning.
+	 */
+	public String getMessage() {
+		return m_message;
+	}
 
-  /**
-   * @return the exception associated with this warning, may be <code>null</code>.
-   */
-  public Throwable getException() {
-    return m_exception;
-  }
+	/**
+	 * @return the exception associated with this warning, may be <code>null</code>.
+	 */
+	public Throwable getException() {
+		return m_exception;
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/state/GlobalState.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/state/GlobalState.java
index c9f019de1..a94477498 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/state/GlobalState.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/state/GlobalState.java
@@ -20,154 +20,154 @@
  * @coverage core.model
  */
 public final class GlobalState {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // State
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static boolean m_parsing;
-  /**
-   * @return <code>true</code> if parsing is in progress.
-   */
-  public static boolean isParsing() {
-    return m_parsing;
-  }
-  /**
-   * Specifies if parsing is in progress.
-   */
-  public static void setParsing(boolean parsing) {
-    m_parsing = parsing;
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Toolkit
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static ToolkitDescription m_toolkit;
-  /**
-   * @return the {@link ToolkitDescription} of active editor.
-   */
-  public static ToolkitDescription getToolkit() {
-    return m_toolkit;
-  }
-  /**
-   * Sets the {@link ToolkitDescription} of active editor.
-   */
-  public static void setToolkit(ToolkitDescription toolkit) {
-    m_toolkit = toolkit;
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Model
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static ObjectInfo m_activeObject;
-  /**
-   * @return some {@link ObjectInfo} of active editor.
-   */
-  public static ObjectInfo getActiveObject() {
-    return m_activeObject;
-  }
-  /**
-   * Sets some {@link ObjectInfo} of active editor.
-   */
-  public static void setActiveObject(ObjectInfo activeObject) {
-    m_activeObject = activeObject;
-  }
-  /**
-   * @return <code>true</code> if given object is component model.
-   */
-  public static boolean isComponent(Object object) {
-    return m_validatorHelper.isComponent(object);
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ClassLoader
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static ClassLoader m_classLoader;
-  /**
-   * @return the {@link ClassLoader} of active editor.
-   */
-  public static ClassLoader getClassLoader() {
-    return m_classLoader;
-  }
-  /**
-   * Sets the {@link ClassLoader} of active editor.
-   */
-  public static void setClassLoader(ClassLoader classLoader) {
-    m_classLoader = classLoader;
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parameters
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static IParametersProvider m_parametersProvider;
-  public static IParametersProvider getParametersProvider() {
-    return m_parametersProvider;
-  }
-  public static void setParametersProvider(IParametersProvider parametersProvider) {
-    m_parametersProvider = parametersProvider;
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Description
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static IDescriptionHelper m_descriptionHelper;
-  public static IDescriptionHelper getDescriptionHelper() {
-    return m_descriptionHelper;
-  }
-  public static void setDescriptionHelper(IDescriptionHelper descriptionHelper) {
-    m_descriptionHelper = descriptionHelper;
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Validators
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static ILayoutRequestValidatorHelper m_validatorHelper;
-  public static ILayoutRequestValidatorHelper getValidatorHelper() {
-    return m_validatorHelper;
-  }
-  public static void setValidatorHelper(ILayoutRequestValidatorHelper validatorHelper) {
-    m_validatorHelper = validatorHelper;
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Paste
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static IPasteRequestProcessor m_pasteRequestProcessor;
-  public static IPasteRequestProcessor getPasteRequestProcessor() {
-    return m_pasteRequestProcessor;
-  }
-  public static void setPasteRequestProcessor(IPasteRequestProcessor pasteRequestProcessor) {
-    m_pasteRequestProcessor = pasteRequestProcessor;
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Order
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static IOrderProcessor m_orderProcessor;
-  public static IOrderProcessor getOrderProcessor() {
-    return m_orderProcessor;
-  }
-  public static void setOrderProcessor(IOrderProcessor orderProcessor) {
-    m_orderProcessor = orderProcessor;
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Other
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static IOtherHelper m_otherHelper;
-  public static IOtherHelper getOtherHelper() {
-    return m_otherHelper;
-  }
-  public static void setOtherHelper(IOtherHelper otherHelper) {
-    m_otherHelper = otherHelper;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// State
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static boolean m_parsing;
+	/**
+	 * @return <code>true</code> if parsing is in progress.
+	 */
+	public static boolean isParsing() {
+		return m_parsing;
+	}
+	/**
+	 * Specifies if parsing is in progress.
+	 */
+	public static void setParsing(boolean parsing) {
+		m_parsing = parsing;
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Toolkit
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static ToolkitDescription m_toolkit;
+	/**
+	 * @return the {@link ToolkitDescription} of active editor.
+	 */
+	public static ToolkitDescription getToolkit() {
+		return m_toolkit;
+	}
+	/**
+	 * Sets the {@link ToolkitDescription} of active editor.
+	 */
+	public static void setToolkit(ToolkitDescription toolkit) {
+		m_toolkit = toolkit;
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Model
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static ObjectInfo m_activeObject;
+	/**
+	 * @return some {@link ObjectInfo} of active editor.
+	 */
+	public static ObjectInfo getActiveObject() {
+		return m_activeObject;
+	}
+	/**
+	 * Sets some {@link ObjectInfo} of active editor.
+	 */
+	public static void setActiveObject(ObjectInfo activeObject) {
+		m_activeObject = activeObject;
+	}
+	/**
+	 * @return <code>true</code> if given object is component model.
+	 */
+	public static boolean isComponent(Object object) {
+		return m_validatorHelper.isComponent(object);
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ClassLoader
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static ClassLoader m_classLoader;
+	/**
+	 * @return the {@link ClassLoader} of active editor.
+	 */
+	public static ClassLoader getClassLoader() {
+		return m_classLoader;
+	}
+	/**
+	 * Sets the {@link ClassLoader} of active editor.
+	 */
+	public static void setClassLoader(ClassLoader classLoader) {
+		m_classLoader = classLoader;
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parameters
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static IParametersProvider m_parametersProvider;
+	public static IParametersProvider getParametersProvider() {
+		return m_parametersProvider;
+	}
+	public static void setParametersProvider(IParametersProvider parametersProvider) {
+		m_parametersProvider = parametersProvider;
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Description
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static IDescriptionHelper m_descriptionHelper;
+	public static IDescriptionHelper getDescriptionHelper() {
+		return m_descriptionHelper;
+	}
+	public static void setDescriptionHelper(IDescriptionHelper descriptionHelper) {
+		m_descriptionHelper = descriptionHelper;
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Validators
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static ILayoutRequestValidatorHelper m_validatorHelper;
+	public static ILayoutRequestValidatorHelper getValidatorHelper() {
+		return m_validatorHelper;
+	}
+	public static void setValidatorHelper(ILayoutRequestValidatorHelper validatorHelper) {
+		m_validatorHelper = validatorHelper;
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Paste
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static IPasteRequestProcessor m_pasteRequestProcessor;
+	public static IPasteRequestProcessor getPasteRequestProcessor() {
+		return m_pasteRequestProcessor;
+	}
+	public static void setPasteRequestProcessor(IPasteRequestProcessor pasteRequestProcessor) {
+		m_pasteRequestProcessor = pasteRequestProcessor;
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Order
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static IOrderProcessor m_orderProcessor;
+	public static IOrderProcessor getOrderProcessor() {
+		return m_orderProcessor;
+	}
+	public static void setOrderProcessor(IOrderProcessor orderProcessor) {
+		m_orderProcessor = orderProcessor;
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Other
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static IOtherHelper m_otherHelper;
+	public static IOtherHelper getOtherHelper() {
+		return m_otherHelper;
+	}
+	public static void setOtherHelper(IOtherHelper otherHelper) {
+		m_otherHelper = otherHelper;
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/state/IDescriptionHelper.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/state/IDescriptionHelper.java
index b85a4a459..05bfbda2b 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/state/IDescriptionHelper.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/state/IDescriptionHelper.java
@@ -20,14 +20,14 @@
  * @coverage core.model
  */
 public interface IDescriptionHelper {
-  /**
-   * @return the {@link PropertyEditor} for given type.
-   */
-  PropertyEditor getEditorForType(Class<?> type) throws Exception;
+	/**
+	 * @return the {@link PropertyEditor} for given type.
+	 */
+	PropertyEditor getEditorForType(Class<?> type) throws Exception;
 
-  /**
-   * @return the {@link IComponentDescription} of given model instance, may be <code>null</code> if
-   *         object is not model instance.
-   */
-  IComponentDescription getDescription(Object object);
+	/**
+	 * @return the {@link IComponentDescription} of given model instance, may be <code>null</code> if
+	 *         object is not model instance.
+	 */
+	IComponentDescription getDescription(Object object);
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/state/ILayoutRequestValidatorHelper.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/state/ILayoutRequestValidatorHelper.java
index c368b3926..36552e1f8 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/state/ILayoutRequestValidatorHelper.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/state/ILayoutRequestValidatorHelper.java
@@ -21,33 +21,33 @@
  * @coverage core.model
  */
 public interface ILayoutRequestValidatorHelper {
-  /**
-   * @return <code>true</code> if given object is component model, so for example
-   *         {@link #getDescription(Object)} can be used for it.
-   */
-  boolean isComponent(Object object);
-  /**
-   * @return the {@link IComponentDescription} for given memento.
-   */
-  IComponentDescription getPasteComponentDescription(Object memento) throws Exception;
-  /**
-   * @return the component for given memento.
-   */
-  Object getPasteComponent(Object memento) throws Exception;
-  /**
-   * @return <code>true</code> if "child" can be created on given "parent".
-   */
-  boolean canUseParentForChild(Object parent, Object child) throws Exception;
-  /**
-   * @return <code>true</code> if given {@link Object} is component and can be used as reference.
-   */
-  boolean canReference(Object object);
-  /**
-   * @return <code>true</code> if given {@link ObjectInfo} can be moved inside of its parent.
-   */
-  boolean canReorder(ObjectInfo component);
-  /**
-   * @return <code>true</code> if given {@link ObjectInfo} can be moved on different parent.
-   */
-  boolean canReparent(ObjectInfo component);
+	/**
+	 * @return <code>true</code> if given object is component model, so for example
+	 *         {@link #getDescription(Object)} can be used for it.
+	 */
+	boolean isComponent(Object object);
+	/**
+	 * @return the {@link IComponentDescription} for given memento.
+	 */
+	IComponentDescription getPasteComponentDescription(Object memento) throws Exception;
+	/**
+	 * @return the component for given memento.
+	 */
+	Object getPasteComponent(Object memento) throws Exception;
+	/**
+	 * @return <code>true</code> if "child" can be created on given "parent".
+	 */
+	boolean canUseParentForChild(Object parent, Object child) throws Exception;
+	/**
+	 * @return <code>true</code> if given {@link Object} is component and can be used as reference.
+	 */
+	boolean canReference(Object object);
+	/**
+	 * @return <code>true</code> if given {@link ObjectInfo} can be moved inside of its parent.
+	 */
+	boolean canReorder(ObjectInfo component);
+	/**
+	 * @return <code>true</code> if given {@link ObjectInfo} can be moved on different parent.
+	 */
+	boolean canReparent(ObjectInfo component);
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/state/IOrderProcessor.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/state/IOrderProcessor.java
index d7eed26e4..ea33e2c2f 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/state/IOrderProcessor.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/state/IOrderProcessor.java
@@ -17,8 +17,8 @@
  * @coverage core.model
  */
 public interface IOrderProcessor {
-  /**
-   * Moves component on its current container before "nextComponent".
-   */
-  void move(Object component, Object nextComponent) throws Exception;
+	/**
+	 * Moves component on its current container before "nextComponent".
+	 */
+	void move(Object component, Object nextComponent) throws Exception;
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/state/IOtherHelper.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/state/IOtherHelper.java
index 548a2cc79..fdc7d8e27 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/state/IOtherHelper.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/state/IOtherHelper.java
@@ -21,39 +21,39 @@
  * @coverage core.model
  */
 public interface IOtherHelper {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Context
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the context {@link IJavaProject}.
-   */
-  Object getJavaProject();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Context
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the context {@link IJavaProject}.
+	 */
+	Object getJavaProject();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link Object} for given model, if it has it. May be <code>null</code> if given
-   *         modes has no object, or it is really <code>null</code>.
-   */
-  Object getObject(ObjectInfo model);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link Object} for given model, if it has it. May be <code>null</code> if given
+	 *         modes has no object, or it is really <code>null</code>.
+	 */
+	Object getObject(ObjectInfo model);
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Warnings
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link List} of {@link EditorWarning}'s.
-   */
-  List<EditorWarning> getWarnings();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Warnings
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link List} of {@link EditorWarning}'s.
+	 */
+	List<EditorWarning> getWarnings();
 
-  /**
-   * Adds new {@link EditorWarning}.
-   */
-  void addWarning(EditorWarning warning);
+	/**
+	 * Adds new {@link EditorWarning}.
+	 */
+	void addWarning(EditorWarning warning);
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/state/IParametersProvider.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/state/IParametersProvider.java
index 91115b07a..0ab273c38 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/state/IParametersProvider.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/state/IParametersProvider.java
@@ -19,18 +19,18 @@
  * @coverage core.model
  */
 public interface IParametersProvider {
-  /**
-   * @return the read only {@link Map} of parameters from model or description.
-   */
-  Map<String, String> getParameters(Object object);
+	/**
+	 * @return the read only {@link Map} of parameters from model or description.
+	 */
+	Map<String, String> getParameters(Object object);
 
-  /**
-   * @return the parameter value from model or description.
-   */
-  String getParameter(Object object, String name);
+	/**
+	 * @return the parameter value from model or description.
+	 */
+	String getParameter(Object object, String name);
 
-  /**
-   * Checks if object has parameter with value <code>"true"</code>.
-   */
-  boolean hasTrueParameter(Object object, String name);
+	/**
+	 * Checks if object has parameter with value <code>"true"</code>.
+	 */
+	boolean hasTrueParameter(Object object, String name);
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/state/IPasteComponentProcessor.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/state/IPasteComponentProcessor.java
index 90880a2fc..fc2d521ba 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/state/IPasteComponentProcessor.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/state/IPasteComponentProcessor.java
@@ -17,8 +17,8 @@
  * @coverage core.model
  */
 public interface IPasteComponentProcessor {
-  /**
-   * Performs some action for given component, in most case - adds it.
-   */
-  void process(Object component) throws Exception;
+	/**
+	 * Performs some action for given component, in most case - adds it.
+	 */
+	void process(Object component) throws Exception;
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/state/IPasteRequestProcessor.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/state/IPasteRequestProcessor.java
index d2145a161..28c417de3 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/state/IPasteRequestProcessor.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/state/IPasteRequestProcessor.java
@@ -24,30 +24,30 @@
  * @coverage core.model
  */
 public interface IPasteRequestProcessor {
-  /**
-   * This method creates the components with their mementos in given <code>pasteRequest</code> then
-   * returns the {@link Command} which applies the mementos in it's execute method.
-   *
-   * @param pasteRequest
-   *          the {@link PasteRequest} instance given by policy.
-   * @param componentProcessor
-   *          provides the ability to do a special processing of the components while applying the
-   *          mementos.
-   *
-   * @return the {@link Command} which applies the mementos in it's execute method or
-   *         <code>null</code> if no components can be pasted or error occurred.
-   */
-  Command getPasteCommand(PasteRequest pasteRequest, IPasteComponentProcessor componentProcessor);
+	/**
+	 * This method creates the components with their mementos in given <code>pasteRequest</code> then
+	 * returns the {@link Command} which applies the mementos in it's execute method.
+	 *
+	 * @param pasteRequest
+	 *          the {@link PasteRequest} instance given by policy.
+	 * @param componentProcessor
+	 *          provides the ability to do a special processing of the components while applying the
+	 *          mementos.
+	 *
+	 * @return the {@link Command} which applies the mementos in it's execute method or
+	 *         <code>null</code> if no components can be pasted or error occurred.
+	 */
+	Command getPasteCommand(PasteRequest pasteRequest, IPasteComponentProcessor componentProcessor);
 
-  /**
-   * This method creates the components with their mementos in given <code>pasteRequest</code> and
-   * then returns them as list. Did not do any memento applying.
-   *
-   * @param pasteRequest
-   *          the {@link PasteRequest} instance given by policy.
-   *
-   * @return the {@link List} of the created components or empty list if no components to paste or
-   *         error occurred.
-   */
-  List<IObjectInfo> getPastingComponents(PasteRequest pasteRequest);
+	/**
+	 * This method creates the components with their mementos in given <code>pasteRequest</code> and
+	 * then returns them as list. Did not do any memento applying.
+	 *
+	 * @param pasteRequest
+	 *          the {@link PasteRequest} instance given by policy.
+	 *
+	 * @return the {@link List} of the created components or empty list if no components to paste or
+	 *         error occurred.
+	 */
+	List<IObjectInfo> getPastingComponents(PasteRequest pasteRequest);
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/AbstractBindingComposite.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/AbstractBindingComposite.java
index b3c4310b4..a3319783c 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/AbstractBindingComposite.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/AbstractBindingComposite.java
@@ -47,297 +47,297 @@
  * @coverage core.preferences.ui
  */
 public abstract class AbstractBindingComposite extends Composite {
-  protected final DataBindManager m_bindManager;
-  protected final IPreferenceStore m_preferences;
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractBindingComposite(Composite parent,
-      DataBindManager bindManager,
-      IPreferenceStore preferences) {
-    super(parent, SWT.NONE);
-    m_bindManager = bindManager;
-    m_preferences = preferences;
-    GridLayoutFactory.create(this);
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Listener
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final List<Runnable> m_updateListeners = Lists.newArrayList();
-  /**
-   * Adds new {@link Runnable} for update of bounds preferences.
-   */
-  public final void addUpdateListener(Runnable listener) {
-    if (!m_updateListeners.contains(listener)) {
-      m_updateListeners.add(listener);
-    }
-  }
-  /**
-   * Removes {@link Runnable} for update of bounds preferences.
-   */
-  public final void removeUpdateListener(Runnable listener) {
-    m_updateListeners.remove(listener);
-  }
-  /**
-   * Sends notification that one of the bound preferences was changes.
-   */
-  private void notifyUpdateListeners() {
-    {
-      String message = validate0();
-      if (m_validationListener != null) {
-        m_validationListener.update(message);
-      }
-      if (message != null) {
-        return;
-      }
-    }
-    for (Runnable listener : Lists.newArrayList(m_updateListeners)) {
-      listener.run();
-    }
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Validation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private IValidationListener m_validationListener;
-  /**
-   * Listener for validness status.
-   */
-  public static interface IValidationListener {
-    /**
-     * @param message
-     *          the <code>null</code> if OK, or error message to show.
-     */
-    void update(String message);
-  }
-  /**
-   * Sets the single {@link IValidationListener}.
-   */
-  public void setValidationListener(IValidationListener validationListener) {
-    m_validationListener = validationListener;
-  }
-  /**
-   * @return the <code>null</code> if OK, or error message to show.
-   */
-  private String validate0() {
-    try {
-      return validate();
-    } catch (Throwable e) {
-      return e.getMessage();
-    }
-  }
-  /**
-   * @return the <code>null</code> if OK, or error message to show.
-   */
-  protected String validate() throws Exception {
-    return null;
-  }
-  /**
-   * Forces validation right now, for example to show error directly after opening UI.
-   */
-  public void updateValidate() {
-    notifyUpdateListeners();
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // State
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Notifies this {@link AbstractBindingComposite} that user commits changes, for example clicks
-   * "OK" button.
-   *
-   * @return <code>true</code> if commit was successful
-   */
-  public boolean performOk() {
-    return true;
-  }
-  /**
-   * Notifies this {@link AbstractBindingComposite} that user wants to rollback to the default
-   * state.
-   */
-  public void performDefaults() {
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Binding
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final Map<String, IDataEditor> m_booleanEditors = Maps.newTreeMap();
-  private final Map<String, IDataEditor> m_stringEditors = Maps.newTreeMap();
-  private final Map<String, IDataEditor> m_integerEditors = Maps.newTreeMap();
-  /**
-   * Shared {@link Listener} used for listening various events in bounds {@link Control}'s.
-   */
-  private final Listener m_controlModifyListener = new Listener() {
-    @Override
-    public void handleEvent(Event event) {
-      notifyUpdateListeners();
-    }
-  };
-  /**
-   * Binds <code>boolean</code> value using given check {@link Button}.
-   *
-   * @return the {@link CheckButtonEditor} used for binding.
-   */
-  protected final CheckButtonEditor bindBoolean(Button button, String key) {
-    Assert.isTrue((button.getStyle() & SWT.CHECK) != 0, "Check button expected.");
-    // register editor
-    CheckButtonEditor editor = new CheckButtonEditor(button);
-    m_booleanEditors.put(key, editor);
-    // do bind
-    m_bindManager.bind(editor, new BooleanPreferenceProvider(m_preferences, key), true);
-    button.addListener(SWT.Selection, m_controlModifyListener);
-    return editor;
-  }
-  /**
-   * Binds <code>String</code> value using given {@link Text}.
-   */
-  protected final void bindString(Text text, String key) {
-    Assert.isTrue((text.getStyle() & SWT.MULTI) == 0, "Single line Text expected.");
-    // register editor
-    IDataEditor editor = new TextSingleEditor(text);
-    m_stringEditors.put(key, editor);
-    // do bind
-    m_bindManager.bind(editor, new StringPreferenceProvider(m_preferences, key), true);
-    text.addListener(SWT.Modify, m_controlModifyListener);
-  }
-  /**
-   * Binds <code>int</code> value using text of given {@link Text}.
-   */
-  protected final void bindInteger(Text text, String key) {
-    Assert.isTrue((text.getStyle() & SWT.MULTI) == 0, "Single line Text expected.");
-    // register editor
-    IDataEditor editor = new TextSingleEditor(text);
-    m_integerEditors.put(key, editor);
-    // do bind
-    m_bindManager.bind(editor, new IntegerPreferenceProvider(m_preferences, key), true);
-    text.addListener(SWT.Modify, m_controlModifyListener);
-  }
-  /**
-   * Binds <code>integer</code> value of selection in given {@link Combo}.
-   */
-  protected final void bindSelection(Combo combo, String key) {
-    // register editor
-    IDataEditor editor = new ComboSelectionEditor(combo);
-    m_integerEditors.put(key, editor);
-    // do bind
-    m_bindManager.bind(editor, new IntegerPreferenceProvider(m_preferences, key), true);
-    combo.addListener(SWT.Selection, m_controlModifyListener);
-  }
-  /**
-   * Binds <code>String</code> value using given {@link Combo}.
-   */
-  protected final void bindString(Combo combo, String key) {
-    // register editor
-    IDataEditor editor = new ComboTextEditor(combo);
-    m_stringEditors.put(key, editor);
-    // do bind
-    m_bindManager.bind(editor, new StringPreferenceProvider(m_preferences, key), true);
-    combo.addListener(SWT.Modify, m_controlModifyListener);
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Binding access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the <code>boolean</code> value for given key, selected currently in this
-   *         {@link AbstractBindingComposite}.
-   */
-  public final boolean getBoolean(String key) {
-    IDataEditor editor = m_booleanEditors.get(key);
-    Assert.isNotNull(editor, "Can not find boolean editor for: " + key);
-    return ((Boolean) editor.getValue()).booleanValue();
-  }
-  /**
-   * @return the <code>String</code> value for given key, selected currently in this
-   *         {@link AbstractBindingComposite}.
-   */
-  public final String getString(String key) {
-    IDataEditor editor = m_stringEditors.get(key);
-    Assert.isNotNull(editor, "Can not find String editor for: " + key);
-    return (String) editor.getValue();
-  }
-  /**
-   * @return the <code>int</code> value for given key, selected currently in this
-   *         {@link AbstractBindingComposite}.
-   */
-  public final int getInteger(String key) {
-    IDataEditor editor = m_integerEditors.get(key);
-    Assert.isNotNull(editor, "Can not find integer editor for: " + key);
-    //
-    Object value = editor.getValue();
-    if (value instanceof Integer) {
-      return ((Integer) value).intValue();
-    } else {
-      return Integer.parseInt(value.toString());
-    }
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Binding controls
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Creates check {@link Button} for editing boolean preference with given key.
-   *
-   * @param text
-   *          the text for {@link Button}
-   * @param key
-   *          the preference key
-   */
-  protected final Button checkButton(Composite parent, String text, String key) {
-    return checkButton(parent, 1, text, key);
-  }
-  /**
-   * Creates check {@link Button} for editing boolean preference with given key.
-   *
-   * @param parent
-   *          the parent for {@link Button} widget
-   * @param horizontalSpan
-   *          the span for {@link GridData}
-   * @param text
-   *          the text for {@link Button}
-   * @param key
-   *          the preference key
-   */
-  protected final Button checkButton(Composite parent, int horizontalSpan, String text, String key) {
-    Button button = new Button(parent, SWT.CHECK);
-    GridDataFactory.create(button).spanH(horizontalSpan);
-    button.setText(text);
-    bindBoolean(button, key);
-    return button;
-  }
-  /**
-   * Creates {@link Text} for editing string value.
-   */
-  protected final Control[] stringField(Composite parent,
-      int horizontalSpan,
-      String label,
-      String key) {
-    Label labelWidget = new Label(parent, SWT.NONE);
-    labelWidget.setText(label);
-    //
-    Text text = new Text(parent, SWT.BORDER);
-    GridDataFactory.create(text).spanH(horizontalSpan - 1).fillH();
-    bindString(text, key);
-    //
-    return new Control[]{labelWidget, text};
-  }
-  /**
-   * Creates {@link Text} for editing integer value.
-   */
-  protected final Text integerField(Composite parent, int horizontalSpan, String label, String key) {
-    new Label(parent, SWT.NONE).setText(label);
-    Text text = new Text(parent, SWT.BORDER);
-    GridDataFactory.create(text).spanH(horizontalSpan - 1).fillH();
-    bindInteger(text, key);
-    return text;
-  }
+	protected final DataBindManager m_bindManager;
+	protected final IPreferenceStore m_preferences;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractBindingComposite(Composite parent,
+			DataBindManager bindManager,
+			IPreferenceStore preferences) {
+		super(parent, SWT.NONE);
+		m_bindManager = bindManager;
+		m_preferences = preferences;
+		GridLayoutFactory.create(this);
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Listener
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final List<Runnable> m_updateListeners = Lists.newArrayList();
+	/**
+	 * Adds new {@link Runnable} for update of bounds preferences.
+	 */
+	public final void addUpdateListener(Runnable listener) {
+		if (!m_updateListeners.contains(listener)) {
+			m_updateListeners.add(listener);
+		}
+	}
+	/**
+	 * Removes {@link Runnable} for update of bounds preferences.
+	 */
+	public final void removeUpdateListener(Runnable listener) {
+		m_updateListeners.remove(listener);
+	}
+	/**
+	 * Sends notification that one of the bound preferences was changes.
+	 */
+	private void notifyUpdateListeners() {
+		{
+			String message = validate0();
+			if (m_validationListener != null) {
+				m_validationListener.update(message);
+			}
+			if (message != null) {
+				return;
+			}
+		}
+		for (Runnable listener : Lists.newArrayList(m_updateListeners)) {
+			listener.run();
+		}
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Validation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private IValidationListener m_validationListener;
+	/**
+	 * Listener for validness status.
+	 */
+	public static interface IValidationListener {
+		/**
+		 * @param message
+		 *          the <code>null</code> if OK, or error message to show.
+		 */
+		void update(String message);
+	}
+	/**
+	 * Sets the single {@link IValidationListener}.
+	 */
+	public void setValidationListener(IValidationListener validationListener) {
+		m_validationListener = validationListener;
+	}
+	/**
+	 * @return the <code>null</code> if OK, or error message to show.
+	 */
+	private String validate0() {
+		try {
+			return validate();
+		} catch (Throwable e) {
+			return e.getMessage();
+		}
+	}
+	/**
+	 * @return the <code>null</code> if OK, or error message to show.
+	 */
+	protected String validate() throws Exception {
+		return null;
+	}
+	/**
+	 * Forces validation right now, for example to show error directly after opening UI.
+	 */
+	public void updateValidate() {
+		notifyUpdateListeners();
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// State
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Notifies this {@link AbstractBindingComposite} that user commits changes, for example clicks
+	 * "OK" button.
+	 *
+	 * @return <code>true</code> if commit was successful
+	 */
+	public boolean performOk() {
+		return true;
+	}
+	/**
+	 * Notifies this {@link AbstractBindingComposite} that user wants to rollback to the default
+	 * state.
+	 */
+	public void performDefaults() {
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Binding
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final Map<String, IDataEditor> m_booleanEditors = Maps.newTreeMap();
+	private final Map<String, IDataEditor> m_stringEditors = Maps.newTreeMap();
+	private final Map<String, IDataEditor> m_integerEditors = Maps.newTreeMap();
+	/**
+	 * Shared {@link Listener} used for listening various events in bounds {@link Control}'s.
+	 */
+	private final Listener m_controlModifyListener = new Listener() {
+		@Override
+		public void handleEvent(Event event) {
+			notifyUpdateListeners();
+		}
+	};
+	/**
+	 * Binds <code>boolean</code> value using given check {@link Button}.
+	 *
+	 * @return the {@link CheckButtonEditor} used for binding.
+	 */
+	protected final CheckButtonEditor bindBoolean(Button button, String key) {
+		Assert.isTrue((button.getStyle() & SWT.CHECK) != 0, "Check button expected.");
+		// register editor
+		CheckButtonEditor editor = new CheckButtonEditor(button);
+		m_booleanEditors.put(key, editor);
+		// do bind
+		m_bindManager.bind(editor, new BooleanPreferenceProvider(m_preferences, key), true);
+		button.addListener(SWT.Selection, m_controlModifyListener);
+		return editor;
+	}
+	/**
+	 * Binds <code>String</code> value using given {@link Text}.
+	 */
+	protected final void bindString(Text text, String key) {
+		Assert.isTrue((text.getStyle() & SWT.MULTI) == 0, "Single line Text expected.");
+		// register editor
+		IDataEditor editor = new TextSingleEditor(text);
+		m_stringEditors.put(key, editor);
+		// do bind
+		m_bindManager.bind(editor, new StringPreferenceProvider(m_preferences, key), true);
+		text.addListener(SWT.Modify, m_controlModifyListener);
+	}
+	/**
+	 * Binds <code>int</code> value using text of given {@link Text}.
+	 */
+	protected final void bindInteger(Text text, String key) {
+		Assert.isTrue((text.getStyle() & SWT.MULTI) == 0, "Single line Text expected.");
+		// register editor
+		IDataEditor editor = new TextSingleEditor(text);
+		m_integerEditors.put(key, editor);
+		// do bind
+		m_bindManager.bind(editor, new IntegerPreferenceProvider(m_preferences, key), true);
+		text.addListener(SWT.Modify, m_controlModifyListener);
+	}
+	/**
+	 * Binds <code>integer</code> value of selection in given {@link Combo}.
+	 */
+	protected final void bindSelection(Combo combo, String key) {
+		// register editor
+		IDataEditor editor = new ComboSelectionEditor(combo);
+		m_integerEditors.put(key, editor);
+		// do bind
+		m_bindManager.bind(editor, new IntegerPreferenceProvider(m_preferences, key), true);
+		combo.addListener(SWT.Selection, m_controlModifyListener);
+	}
+	/**
+	 * Binds <code>String</code> value using given {@link Combo}.
+	 */
+	protected final void bindString(Combo combo, String key) {
+		// register editor
+		IDataEditor editor = new ComboTextEditor(combo);
+		m_stringEditors.put(key, editor);
+		// do bind
+		m_bindManager.bind(editor, new StringPreferenceProvider(m_preferences, key), true);
+		combo.addListener(SWT.Modify, m_controlModifyListener);
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Binding access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the <code>boolean</code> value for given key, selected currently in this
+	 *         {@link AbstractBindingComposite}.
+	 */
+	public final boolean getBoolean(String key) {
+		IDataEditor editor = m_booleanEditors.get(key);
+		Assert.isNotNull(editor, "Can not find boolean editor for: " + key);
+		return ((Boolean) editor.getValue()).booleanValue();
+	}
+	/**
+	 * @return the <code>String</code> value for given key, selected currently in this
+	 *         {@link AbstractBindingComposite}.
+	 */
+	public final String getString(String key) {
+		IDataEditor editor = m_stringEditors.get(key);
+		Assert.isNotNull(editor, "Can not find String editor for: " + key);
+		return (String) editor.getValue();
+	}
+	/**
+	 * @return the <code>int</code> value for given key, selected currently in this
+	 *         {@link AbstractBindingComposite}.
+	 */
+	public final int getInteger(String key) {
+		IDataEditor editor = m_integerEditors.get(key);
+		Assert.isNotNull(editor, "Can not find integer editor for: " + key);
+		//
+		Object value = editor.getValue();
+		if (value instanceof Integer) {
+			return ((Integer) value).intValue();
+		} else {
+			return Integer.parseInt(value.toString());
+		}
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Binding controls
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Creates check {@link Button} for editing boolean preference with given key.
+	 *
+	 * @param text
+	 *          the text for {@link Button}
+	 * @param key
+	 *          the preference key
+	 */
+	protected final Button checkButton(Composite parent, String text, String key) {
+		return checkButton(parent, 1, text, key);
+	}
+	/**
+	 * Creates check {@link Button} for editing boolean preference with given key.
+	 *
+	 * @param parent
+	 *          the parent for {@link Button} widget
+	 * @param horizontalSpan
+	 *          the span for {@link GridData}
+	 * @param text
+	 *          the text for {@link Button}
+	 * @param key
+	 *          the preference key
+	 */
+	protected final Button checkButton(Composite parent, int horizontalSpan, String text, String key) {
+		Button button = new Button(parent, SWT.CHECK);
+		GridDataFactory.create(button).spanH(horizontalSpan);
+		button.setText(text);
+		bindBoolean(button, key);
+		return button;
+	}
+	/**
+	 * Creates {@link Text} for editing string value.
+	 */
+	protected final Control[] stringField(Composite parent,
+			int horizontalSpan,
+			String label,
+			String key) {
+		Label labelWidget = new Label(parent, SWT.NONE);
+		labelWidget.setText(label);
+		//
+		Text text = new Text(parent, SWT.BORDER);
+		GridDataFactory.create(text).spanH(horizontalSpan - 1).fillH();
+		bindString(text, key);
+		//
+		return new Control[]{labelWidget, text};
+	}
+	/**
+	 * Creates {@link Text} for editing integer value.
+	 */
+	protected final Text integerField(Composite parent, int horizontalSpan, String label, String key) {
+		new Label(parent, SWT.NONE).setText(label);
+		Text text = new Text(parent, SWT.BORDER);
+		GridDataFactory.create(text).spanH(horizontalSpan - 1).fillH();
+		bindInteger(text, key);
+		return text;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/CTabFactory.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/CTabFactory.java
index 74b1bd9f0..79bc93a9f 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/CTabFactory.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/CTabFactory.java
@@ -23,73 +23,73 @@
  * @author lobas_av
  */
 public class CTabFactory {
-  private final CTabItem m_item;
+	private final CTabItem m_item;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private CTabFactory(CTabItem item) {
-    m_item = item;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private CTabFactory(CTabItem item) {
+		m_item = item;
+	}
 
-  /**
-   * Create new {@link CTabFactory} with new {@link CTabItem}.
-   */
-  public static CTabFactory item(CTabFolder folder) {
-    return item(folder, SWT.NONE);
-  }
+	/**
+	 * Create new {@link CTabFactory} with new {@link CTabItem}.
+	 */
+	public static CTabFactory item(CTabFolder folder) {
+		return item(folder, SWT.NONE);
+	}
 
-  /**
-   * Create new {@link CTabFactory} with new {@link TabItem} use given <code>style</code>.
-   */
-  public static CTabFactory item(CTabFolder folder, int style) {
-    return new CTabFactory(new CTabItem(folder, style));
-  }
+	/**
+	 * Create new {@link CTabFactory} with new {@link TabItem} use given <code>style</code>.
+	 */
+	public static CTabFactory item(CTabFolder folder, int style) {
+		return new CTabFactory(new CTabItem(folder, style));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets item text.
-   */
-  public CTabFactory name(String text) {
-    m_item.setText(text);
-    return this;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets item text.
+	 */
+	public CTabFactory name(String text) {
+		m_item.setText(text);
+		return this;
+	}
 
-  /**
-   * Sets item tooltip text.
-   */
-  public CTabFactory tooltip(String text) {
-    m_item.setToolTipText(text);
-    return this;
-  }
+	/**
+	 * Sets item tooltip text.
+	 */
+	public CTabFactory tooltip(String text) {
+		m_item.setToolTipText(text);
+		return this;
+	}
 
-  /**
-   * Sets item control.
-   */
-  public CTabFactory control(Control control) {
-    m_item.setControl(control);
-    return this;
-  }
+	/**
+	 * Sets item control.
+	 */
+	public CTabFactory control(Control control) {
+		m_item.setControl(control);
+		return this;
+	}
 
-  /**
-   * Sets item image.
-   */
-  public CTabFactory image(Image value) {
-    m_item.setImage(value);
-    return this;
-  }
+	/**
+	 * Sets item image.
+	 */
+	public CTabFactory image(Image value) {
+		m_item.setImage(value);
+		return this;
+	}
 
-  /**
-   * Sets item data.
-   */
-  public CTabFactory data(Object value) {
-    m_item.setData(value);
-    return this;
-  }
+	/**
+	 * Sets item data.
+	 */
+	public CTabFactory data(Object value) {
+		m_item.setData(value);
+		return this;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/DrawUtils.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/DrawUtils.java
index a1b87892b..90aa35d4f 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/DrawUtils.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/DrawUtils.java
@@ -35,416 +35,416 @@
  * @coverage core.ui
  */
 public class DrawUtils {
-  private static final String DOTS = "...";
+	private static final String DOTS = "...";
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Drawing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Draws given text clipped horizontally and centered vertically.
-   */
-  public static final void drawStringCV(GC gc, String text, int x, int y, int width, int height) {
-    Rectangle oldClipping = gc.getClipping();
-    try {
-      gc.setClipping(new Rectangle(x, y, width, height));
-      //
-      int textStartY = y + (height - gc.getFontMetrics().getHeight()) / 2;
-      gc.drawString(clipString(gc, text, width), x, textStartY, true);
-    } finally {
-      gc.setClipping(oldClipping);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Drawing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Draws given text clipped horizontally and centered vertically.
+	 */
+	public static final void drawStringCV(GC gc, String text, int x, int y, int width, int height) {
+		Rectangle oldClipping = gc.getClipping();
+		try {
+			gc.setClipping(new Rectangle(x, y, width, height));
+			//
+			int textStartY = y + (height - gc.getFontMetrics().getHeight()) / 2;
+			gc.drawString(clipString(gc, text, width), x, textStartY, true);
+		} finally {
+			gc.setClipping(oldClipping);
+		}
+	}
 
-  /**
-   * Draws given text clipped or centered horizontally and centered vertically.
-   */
-  public static final void drawStringCHCV(GC gc, String text, int x, int y, int width, int height) {
-    int textStartY = y + (height - gc.getFontMetrics().getHeight()) / 2;
-    Point textSize = gc.stringExtent(text);
-    //
-    if (textSize.x > width) {
-      gc.drawString(clipString(gc, text, width), x, textStartY);
-    } else {
-      gc.drawString(text, x + (width - textSize.x) / 2, textStartY);
-    }
-  }
+	/**
+	 * Draws given text clipped or centered horizontally and centered vertically.
+	 */
+	public static final void drawStringCHCV(GC gc, String text, int x, int y, int width, int height) {
+		int textStartY = y + (height - gc.getFontMetrics().getHeight()) / 2;
+		Point textSize = gc.stringExtent(text);
+		//
+		if (textSize.x > width) {
+			gc.drawString(clipString(gc, text, width), x, textStartY);
+		} else {
+			gc.drawString(text, x + (width - textSize.x) / 2, textStartY);
+		}
+	}
 
-  /**
-   * Draws image at given <code>x</code> and centered vertically.
-   */
-  public static final void drawImageCV(GC gc, Image image, int x, int y, int height) {
-    if (image != null) {
-      Rectangle imageBounds = image.getBounds();
-      gc.drawImage(image, x, y + (height - imageBounds.height) / 2);
-    }
-  }
+	/**
+	 * Draws image at given <code>x</code> and centered vertically.
+	 */
+	public static final void drawImageCV(GC gc, Image image, int x, int y, int height) {
+		if (image != null) {
+			Rectangle imageBounds = image.getBounds();
+			gc.drawImage(image, x, y + (height - imageBounds.height) / 2);
+		}
+	}
 
-  /**
-   * Draws image at given <code>x</code> and centered vertically.
-   */
-  public static final void drawImageCHCV(GC gc, Image image, int x, int y, int width, int height) {
-    if (image != null) {
-      Rectangle imageBounds = image.getBounds();
-      int centerX = (width - imageBounds.width) / 2;
-      int centerY = y + (height - imageBounds.height) / 2;
-      gc.drawImage(image, x + centerX, centerY);
-    }
-  }
+	/**
+	 * Draws image at given <code>x</code> and centered vertically.
+	 */
+	public static final void drawImageCHCV(GC gc, Image image, int x, int y, int width, int height) {
+		if (image != null) {
+			Rectangle imageBounds = image.getBounds();
+			int centerX = (width - imageBounds.width) / 2;
+			int centerY = y + (height - imageBounds.height) / 2;
+			gc.drawImage(image, x + centerX, centerY);
+		}
+	}
 
-  /**
-   * Draws {@link Image} on {@link GC} centered in given {@link Rectangle}. If {@link Image} is
-   * bigger that {@link Rectangle}, {@link Image} will be scaled down as needed with keeping
-   * proportions.
-   */
-  public static void drawScaledImage(GC gc, Image image, Rectangle targetRectangle) {
-    int imageWidth = image.getBounds().width;
-    int imageHeight = image.getBounds().height;
-    // prepare scaled image size
-    int newImageWidth;
-    int newImageHeight;
-    if (imageWidth <= targetRectangle.width && imageHeight <= targetRectangle.height) {
-      newImageWidth = imageWidth;
-      newImageHeight = imageHeight;
-    } else {
-      // prepare minimal scale
-      double k;
-      {
-        double k_w = targetRectangle.width / (double) imageWidth;
-        double k_h = targetRectangle.height / (double) imageHeight;
-        k = Math.min(k_w, k_h);
-      }
-      // calculate scaled image size
-      newImageWidth = (int) (imageWidth * k);
-      newImageHeight = (int) (imageHeight * k);
-    }
-    // draw image centered in target rectangle
-    int destX = targetRectangle.x + (targetRectangle.width - newImageWidth) / 2;
-    int destY = targetRectangle.y + (targetRectangle.height - newImageHeight) / 2;
-    gc.drawImage(image, 0, 0, imageWidth, imageHeight, destX, destY, newImageWidth, newImageHeight);
-  }
+	/**
+	 * Draws {@link Image} on {@link GC} centered in given {@link Rectangle}. If {@link Image} is
+	 * bigger that {@link Rectangle}, {@link Image} will be scaled down as needed with keeping
+	 * proportions.
+	 */
+	public static void drawScaledImage(GC gc, Image image, Rectangle targetRectangle) {
+		int imageWidth = image.getBounds().width;
+		int imageHeight = image.getBounds().height;
+		// prepare scaled image size
+		int newImageWidth;
+		int newImageHeight;
+		if (imageWidth <= targetRectangle.width && imageHeight <= targetRectangle.height) {
+			newImageWidth = imageWidth;
+			newImageHeight = imageHeight;
+		} else {
+			// prepare minimal scale
+			double k;
+			{
+				double k_w = targetRectangle.width / (double) imageWidth;
+				double k_h = targetRectangle.height / (double) imageHeight;
+				k = Math.min(k_w, k_h);
+			}
+			// calculate scaled image size
+			newImageWidth = (int) (imageWidth * k);
+			newImageHeight = (int) (imageHeight * k);
+		}
+		// draw image centered in target rectangle
+		int destX = targetRectangle.x + (targetRectangle.width - newImageWidth) / 2;
+		int destY = targetRectangle.y + (targetRectangle.height - newImageHeight) / 2;
+		gc.drawImage(image, 0, 0, imageWidth, imageHeight, destX, destY, newImageWidth, newImageHeight);
+	}
 
-  /**
-   * @return the string clipped to have width less than given. Clipping is done as trailing "...".
-   */
-  public static String clipString(GC gc, String text, int width) {
-    if (width <= 0) {
-      return "";
-    }
-    // check if text already fits in given width
-    if (gc.stringExtent(text).x <= width) {
-      return text;
-    }
-    // use average count of characters as base
-    int count = Math.min(width / gc.getFontMetrics().getAverageCharWidth(), text.length());
-    if (gc.stringExtent(text.substring(0, count) + DOTS).x > width) {
-      while (count > 0 && gc.stringExtent(text.substring(0, count) + DOTS).x > width) {
-        count--;
-      }
-    } else {
-      while (count < text.length() - 1
-          && gc.stringExtent(text.substring(0, count + 1) + DOTS).x < width) {
-        count++;
-      }
-    }
-    return text.substring(0, count) + DOTS;
-  }
+	/**
+	 * @return the string clipped to have width less than given. Clipping is done as trailing "...".
+	 */
+	public static String clipString(GC gc, String text, int width) {
+		if (width <= 0) {
+			return "";
+		}
+		// check if text already fits in given width
+		if (gc.stringExtent(text).x <= width) {
+			return text;
+		}
+		// use average count of characters as base
+		int count = Math.min(width / gc.getFontMetrics().getAverageCharWidth(), text.length());
+		if (gc.stringExtent(text.substring(0, count) + DOTS).x > width) {
+			while (count > 0 && gc.stringExtent(text.substring(0, count) + DOTS).x > width) {
+				count--;
+			}
+		} else {
+			while (count < text.length() - 1
+					&& gc.stringExtent(text.substring(0, count + 1) + DOTS).x < width) {
+				count++;
+			}
+		}
+		return text.substring(0, count) + DOTS;
+	}
 
-  /**
-   * Draws {@link String} in rectangle, wraps at any character (not by words).
-   */
-  public static void drawTextWrap(GC gc, String text, int x, int y, int width, int height) {
-    int y_ = y;
-    int x_ = x;
-    int lineHeight = 0;
-    for (int i = 0; i < text.length(); i++) {
-      String c = text.substring(i, i + 1);
-      Point extent = gc.stringExtent(c);
-      if (x_ + extent.x > x + width) {
-        y_ += lineHeight;
-        if (y_ > y + height) {
-          return;
-        }
-        x_ = x;
-      }
-      gc.drawText(c, x_, y_);
-      x_ += extent.x;
-      lineHeight = Math.max(lineHeight, extent.y);
-    }
-  }
+	/**
+	 * Draws {@link String} in rectangle, wraps at any character (not by words).
+	 */
+	public static void drawTextWrap(GC gc, String text, int x, int y, int width, int height) {
+		int y_ = y;
+		int x_ = x;
+		int lineHeight = 0;
+		for (int i = 0; i < text.length(); i++) {
+			String c = text.substring(i, i + 1);
+			Point extent = gc.stringExtent(c);
+			if (x_ + extent.x > x + width) {
+				y_ += lineHeight;
+				if (y_ > y + height) {
+					return;
+				}
+				x_ = x;
+			}
+			gc.drawText(c, x_, y_);
+			x_ += extent.x;
+			lineHeight = Math.max(lineHeight, extent.y);
+		}
+	}
 
-  /**
-   * Draws 3D highlight rectangle.
-   */
-  public static void drawHighlightRectangle(GC gc, int x, int y, int width, int height) {
-    int right = x + width - 1;
-    int bottom = y + height - 1;
-    //
-    Color oldForeground = gc.getForeground();
-    try {
-      gc.setForeground(IColorConstants.buttonLightest);
-      gc.drawLine(x, y, right, y);
-      gc.drawLine(x, y, x, bottom);
-      //
-      gc.setForeground(IColorConstants.buttonDarker);
-      gc.drawLine(right, y, right, bottom);
-      gc.drawLine(x, bottom, right, bottom);
-    } finally {
-      gc.setForeground(oldForeground);
-    }
-  }
+	/**
+	 * Draws 3D highlight rectangle.
+	 */
+	public static void drawHighlightRectangle(GC gc, int x, int y, int width, int height) {
+		int right = x + width - 1;
+		int bottom = y + height - 1;
+		//
+		Color oldForeground = gc.getForeground();
+		try {
+			gc.setForeground(IColorConstants.buttonLightest);
+			gc.drawLine(x, y, right, y);
+			gc.drawLine(x, y, x, bottom);
+			//
+			gc.setForeground(IColorConstants.buttonDarker);
+			gc.drawLine(right, y, right, bottom);
+			gc.drawLine(x, bottom, right, bottom);
+		} finally {
+			gc.setForeground(oldForeground);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Images
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link Image} loaded relative to given {@link Class}.
-   */
-  public static Image loadImage(Class<?> clazz, String path) {
-    try {
-      URL resource = clazz.getResource(path);
-      if (resource != null) {
-        InputStream stream = resource.openStream();
-        try {
-          return new Image(null, stream);
-        } finally {
-          IOUtils.closeQuietly(stream);
-        }
-      }
-    } catch (Throwable e) {
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Images
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link Image} loaded relative to given {@link Class}.
+	 */
+	public static Image loadImage(Class<?> clazz, String path) {
+		try {
+			URL resource = clazz.getResource(path);
+			if (resource != null) {
+				InputStream stream = resource.openStream();
+				try {
+					return new Image(null, stream);
+				} finally {
+					IOUtils.closeQuietly(stream);
+				}
+			}
+		} catch (Throwable e) {
+		}
+		return null;
+	}
 
-  /**
-   * @return the thumbnail {@link Image} of required size for given "big" {@link Image}, centered or
-   *         scaled down.
-   */
-  public static Image getThubmnail(Image image,
-      int minWidth,
-      int minHeight,
-      int maxWidth,
-      int maxHeight) {
-    Rectangle imageBounds = image.getBounds();
-    int imageWidth = imageBounds.width;
-    int imageHeight = imageBounds.height;
-    if (imageWidth < minWidth && imageHeight < minHeight) {
-      // create "thumbnail" Image with required size
-      Image thumbnail = new Image(null, minWidth, minHeight);
-      GC gc = new GC(thumbnail);
-      try {
-        drawImageCHCV(gc, image, 0, 0, minWidth, minHeight);
-      } finally {
-        gc.dispose();
-      }
-      // recreate "thumbnail" Image with transparent pixel
-      try {
-        ImageData thumbnailData = thumbnail.getImageData();
-        thumbnailData.transparentPixel = thumbnailData.getPixel(0, 0);
-        return new Image(null, thumbnailData);
-      } finally {
-        thumbnail.dispose();
-      }
-    } else if (imageWidth <= maxWidth && imageHeight <= maxHeight) {
-      return new Image(null, image, SWT.IMAGE_COPY);
-    } else {
-      double kX = (double) maxWidth / imageWidth;
-      double kY = (double) maxHeight / imageHeight;
-      double k = Math.max(kX, kY);
-      int dWidth = (int) (imageWidth * k);
-      int dHeight = (int) (imageHeight * k);
-      ImageData scaledImageData = image.getImageData().scaledTo(dWidth, dHeight);
-      return new Image(null, scaledImageData);
-    }
-  }
+	/**
+	 * @return the thumbnail {@link Image} of required size for given "big" {@link Image}, centered or
+	 *         scaled down.
+	 */
+	public static Image getThubmnail(Image image,
+			int minWidth,
+			int minHeight,
+			int maxWidth,
+			int maxHeight) {
+		Rectangle imageBounds = image.getBounds();
+		int imageWidth = imageBounds.width;
+		int imageHeight = imageBounds.height;
+		if (imageWidth < minWidth && imageHeight < minHeight) {
+			// create "thumbnail" Image with required size
+			Image thumbnail = new Image(null, minWidth, minHeight);
+			GC gc = new GC(thumbnail);
+			try {
+				drawImageCHCV(gc, image, 0, 0, minWidth, minHeight);
+			} finally {
+				gc.dispose();
+			}
+			// recreate "thumbnail" Image with transparent pixel
+			try {
+				ImageData thumbnailData = thumbnail.getImageData();
+				thumbnailData.transparentPixel = thumbnailData.getPixel(0, 0);
+				return new Image(null, thumbnailData);
+			} finally {
+				thumbnail.dispose();
+			}
+		} else if (imageWidth <= maxWidth && imageHeight <= maxHeight) {
+			return new Image(null, image, SWT.IMAGE_COPY);
+		} else {
+			double kX = (double) maxWidth / imageWidth;
+			double kY = (double) maxHeight / imageHeight;
+			double k = Math.max(kX, kY);
+			int dWidth = (int) (imageWidth * k);
+			int dHeight = (int) (imageHeight * k);
+			ImageData scaledImageData = image.getImageData().scaledTo(dWidth, dHeight);
+			return new Image(null, scaledImageData);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Alpha images
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Returns a new Image part of original Image location to given bounds and with given alpha.
-   */
-  public static Image createTransparentPart(Image original,
-      org.eclipse.draw2d.geometry.Rectangle bounds,
-      int alpha) {
-    // prepare image
-    Image image = new Image(null, bounds.width, bounds.height);
-    // draw image to GC
-    GC gc = new GC(image);
-    try {
-      gc.drawImage(
-          original,
-          bounds.x,
-          bounds.y,
-          bounds.width,
-          bounds.height,
-          0,
-          0,
-          bounds.width,
-          bounds.height);
-    } catch (Throwable e) {
-      image.dispose();
-      return null;
-    } finally {
-      gc.dispose();
-    }
-    // convert image data
-    ImageData imageData = image.getImageData();
-    for (int y = 0; y < imageData.height; y++) {
-      for (int x = 0; x < imageData.width; x++) {
-        imageData.setAlpha(x, y, alpha);
-      }
-    }
-    // create result
-    Image alphaImage = new Image(null, imageData);
-    image.dispose();
-    return alphaImage;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Alpha images
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Returns a new Image part of original Image location to given bounds and with given alpha.
+	 */
+	public static Image createTransparentPart(Image original,
+			org.eclipse.draw2d.geometry.Rectangle bounds,
+			int alpha) {
+		// prepare image
+		Image image = new Image(null, bounds.width, bounds.height);
+		// draw image to GC
+		GC gc = new GC(image);
+		try {
+			gc.drawImage(
+					original,
+					bounds.x,
+					bounds.y,
+					bounds.width,
+					bounds.height,
+					0,
+					0,
+					bounds.width,
+					bounds.height);
+		} catch (Throwable e) {
+			image.dispose();
+			return null;
+		} finally {
+			gc.dispose();
+		}
+		// convert image data
+		ImageData imageData = image.getImageData();
+		for (int y = 0; y < imageData.height; y++) {
+			for (int x = 0; x < imageData.width; x++) {
+				imageData.setAlpha(x, y, alpha);
+			}
+		}
+		// create result
+		Image alphaImage = new Image(null, imageData);
+		image.dispose();
+		return alphaImage;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Rotated images
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Returns a new Image that is the given Image rotated left by 90 degrees. The client is
-   * responsible for disposing the returned Image. This method MUST be invoked from the
-   * user-interface (Display) thread.
-   *
-   * @param srcImage
-   *          the Image that is to be rotated left
-   * @return the rotated Image (the client is responsible for disposing it)
-   */
-  public static Image createRotatedImage(Image srcImage) {
-    // prepare Display
-    Display display = Display.getCurrent();
-    if (display == null) {
-      SWT.error(SWT.ERROR_THREAD_INVALID_ACCESS);
-    }
-    // rotate ImageData
-    ImageData destData;
-    {
-      ImageData srcData = srcImage.getImageData();
-      if (srcData.depth < 8) {
-        destData = rotatePixelByPixel(srcData);
-      } else {
-        destData = rotateOptimized(srcData);
-      }
-    }
-    // create new image
-    return new Image(display, destData);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Rotated images
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Returns a new Image that is the given Image rotated left by 90 degrees. The client is
+	 * responsible for disposing the returned Image. This method MUST be invoked from the
+	 * user-interface (Display) thread.
+	 *
+	 * @param srcImage
+	 *          the Image that is to be rotated left
+	 * @return the rotated Image (the client is responsible for disposing it)
+	 */
+	public static Image createRotatedImage(Image srcImage) {
+		// prepare Display
+		Display display = Display.getCurrent();
+		if (display == null) {
+			SWT.error(SWT.ERROR_THREAD_INVALID_ACCESS);
+		}
+		// rotate ImageData
+		ImageData destData;
+		{
+			ImageData srcData = srcImage.getImageData();
+			if (srcData.depth < 8) {
+				destData = rotatePixelByPixel(srcData);
+			} else {
+				destData = rotateOptimized(srcData);
+			}
+		}
+		// create new image
+		return new Image(display, destData);
+	}
 
-  private static ImageData rotatePixelByPixel(ImageData srcData) {
-    ImageData destData =
-        new ImageData(srcData.height, srcData.width, srcData.depth, srcData.palette);
-    for (int y = 0; y < srcData.height; y++) {
-      for (int x = 0; x < srcData.width; x++) {
-        destData.setPixel(y, srcData.width - x - 1, srcData.getPixel(x, y));
-      }
-    }
-    return destData;
-  }
+	private static ImageData rotatePixelByPixel(ImageData srcData) {
+		ImageData destData =
+				new ImageData(srcData.height, srcData.width, srcData.depth, srcData.palette);
+		for (int y = 0; y < srcData.height; y++) {
+			for (int x = 0; x < srcData.width; x++) {
+				destData.setPixel(y, srcData.width - x - 1, srcData.getPixel(x, y));
+			}
+		}
+		return destData;
+	}
 
-  private static ImageData rotateOptimized(ImageData srcData) {
-    int bytesPerPixel = Math.max(1, srcData.depth / 8);
-    int destBytesPerLine =
-        ((srcData.height * bytesPerPixel - 1) / srcData.scanlinePad + 1) * srcData.scanlinePad;
-    byte[] newData = new byte[destBytesPerLine * srcData.width];
-    for (int srcY = 0; srcY < srcData.height; srcY++) {
-      for (int srcX = 0; srcX < srcData.width; srcX++) {
-        int destX = srcY;
-        int destY = srcData.width - srcX - 1;
-        int destIndex = destY * destBytesPerLine + destX * bytesPerPixel;
-        int srcIndex = srcY * srcData.bytesPerLine + srcX * bytesPerPixel;
-        System.arraycopy(srcData.data, srcIndex, newData, destIndex, bytesPerPixel);
-      }
-    }
-    return new ImageData(srcData.height,
-        srcData.width,
-        srcData.depth,
-        srcData.palette,
-        srcData.scanlinePad,
-        newData);
-  }
+	private static ImageData rotateOptimized(ImageData srcData) {
+		int bytesPerPixel = Math.max(1, srcData.depth / 8);
+		int destBytesPerLine =
+				((srcData.height * bytesPerPixel - 1) / srcData.scanlinePad + 1) * srcData.scanlinePad;
+		byte[] newData = new byte[destBytesPerLine * srcData.width];
+		for (int srcY = 0; srcY < srcData.height; srcY++) {
+			for (int srcX = 0; srcX < srcData.width; srcX++) {
+				int destX = srcY;
+				int destY = srcData.width - srcX - 1;
+				int destIndex = destY * destBytesPerLine + destX * bytesPerPixel;
+				int srcIndex = srcY * srcData.bytesPerLine + srcX * bytesPerPixel;
+				System.arraycopy(srcData.data, srcIndex, newData, destIndex, bytesPerPixel);
+			}
+		}
+		return new ImageData(srcData.height,
+				srcData.width,
+				srcData.depth,
+				srcData.palette,
+				srcData.scanlinePad,
+				newData);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Colors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return new {@link Color} based on given {@link Color} and shifted on given value to make it
-   *         darker or lighter.
-   */
-  public static Color getShiftedColor(Color color, int delta) {
-    int r = Math.max(0, Math.min(color.getRed() + delta, 255));
-    int g = Math.max(0, Math.min(color.getGreen() + delta, 255));
-    int b = Math.max(0, Math.min(color.getBlue() + delta, 255));
-    return new Color(color.getDevice(), r, g, b);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Colors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return new {@link Color} based on given {@link Color} and shifted on given value to make it
+	 *         darker or lighter.
+	 */
+	public static Color getShiftedColor(Color color, int delta) {
+		int r = Math.max(0, Math.min(color.getRed() + delta, 255));
+		int g = Math.max(0, Math.min(color.getGreen() + delta, 255));
+		int b = Math.max(0, Math.min(color.getBlue() + delta, 255));
+		return new Color(color.getDevice(), r, g, b);
+	}
 
-  /**
-   * @return <code>true</code> if the given <code>color</code> is dark.
-   */
-  public static boolean isDarkColor(Color c) {
-    int value =
-        (int) Math.sqrt(c.getRed()
-            * c.getRed()
-            * .241
-            + c.getGreen()
-            * c.getGreen()
-            * .691
-            + c.getBlue()
-            * c.getBlue()
-            * .068);
-    return value < 130;
-  }
+	/**
+	 * @return <code>true</code> if the given <code>color</code> is dark.
+	 */
+	public static boolean isDarkColor(Color c) {
+		int value =
+				(int) Math.sqrt(c.getRed()
+						* c.getRed()
+						* .241
+						+ c.getGreen()
+						* c.getGreen()
+						* .691
+						+ c.getBlue()
+						* c.getBlue()
+						* .068);
+		return value < 130;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Fonts
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the bold version of given {@link Font}.
-   */
-  public static Font getBoldFont(Font baseFont) {
-    FontData[] boldData = getModifiedFontData(baseFont, SWT.BOLD);
-    return new Font(Display.getCurrent(), boldData);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Fonts
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the bold version of given {@link Font}.
+	 */
+	public static Font getBoldFont(Font baseFont) {
+		FontData[] boldData = getModifiedFontData(baseFont, SWT.BOLD);
+		return new Font(Display.getCurrent(), boldData);
+	}
 
-  /**
-   * @return the italic version of given {@link Font}.
-   */
-  public static Font getBoldItalicFont(Font baseFont) {
-    FontData[] boldData = getModifiedFontData(baseFont, SWT.BOLD | SWT.ITALIC);
-    return new Font(Display.getCurrent(), boldData);
-  }
+	/**
+	 * @return the italic version of given {@link Font}.
+	 */
+	public static Font getBoldItalicFont(Font baseFont) {
+		FontData[] boldData = getModifiedFontData(baseFont, SWT.BOLD | SWT.ITALIC);
+		return new Font(Display.getCurrent(), boldData);
+	}
 
-  /**
-   * @return the italic version of given {@link Font}.
-   */
-  public static Font getItalicFont(Font baseFont) {
-    FontData[] boldData = getModifiedFontData(baseFont, SWT.ITALIC);
-    return new Font(Display.getCurrent(), boldData);
-  }
+	/**
+	 * @return the italic version of given {@link Font}.
+	 */
+	public static Font getItalicFont(Font baseFont) {
+		FontData[] boldData = getModifiedFontData(baseFont, SWT.ITALIC);
+		return new Font(Display.getCurrent(), boldData);
+	}
 
-  /**
-   * @return the array of {@link FontData} with the specified style.
-   */
-  private static FontData[] getModifiedFontData(Font baseFont, int style) {
-    FontData[] baseData = baseFont.getFontData();
-    FontData[] styleData = new FontData[baseData.length];
-    for (int i = 0; i < styleData.length; i++) {
-      FontData base = baseData[i];
-      styleData[i] = new FontData(base.getName(), base.getHeight(), base.getStyle() | style);
-    }
-    return styleData;
-  }
+	/**
+	 * @return the array of {@link FontData} with the specified style.
+	 */
+	private static FontData[] getModifiedFontData(Font baseFont, int style) {
+		FontData[] baseData = baseFont.getFontData();
+		FontData[] styleData = new FontData[baseData.length];
+		for (int i = 0; i < styleData.length; i++) {
+			FontData base = baseData[i];
+			styleData[i] = new FontData(base.getName(), base.getHeight(), base.getStyle() | style);
+		}
+		return styleData;
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/EmptyTransfer.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/EmptyTransfer.java
index cabce1001..03210726e 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/EmptyTransfer.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/EmptyTransfer.java
@@ -24,39 +24,39 @@
  * @coverage core.ui
  */
 public final class EmptyTransfer extends ByteArrayTransfer {
-  public static EmptyTransfer INSTANCE = new EmptyTransfer();
-  private static final String TYPE_NAME = "WindowBuilder empty transfer";
-  private static final int TYPE_ID = registerType(TYPE_NAME);
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private EmptyTransfer() {
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Transfer
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected int[] getTypeIds() {
-    return new int[]{TYPE_ID};
-  }
-
-  @Override
-  protected String[] getTypeNames() {
-    return new String[]{TYPE_NAME};
-  }
-
-  @Override
-  protected void javaToNative(Object object, TransferData transferData) {
-  }
-
-  @Override
-  protected Object nativeToJava(TransferData transferData) {
-    return ArrayUtils.EMPTY_BYTE_ARRAY;
-  }
+	public static EmptyTransfer INSTANCE = new EmptyTransfer();
+	private static final String TYPE_NAME = "WindowBuilder empty transfer";
+	private static final int TYPE_ID = registerType(TYPE_NAME);
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private EmptyTransfer() {
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Transfer
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected int[] getTypeIds() {
+		return new int[]{TYPE_ID};
+	}
+
+	@Override
+	protected String[] getTypeNames() {
+		return new String[]{TYPE_NAME};
+	}
+
+	@Override
+	protected void javaToNative(Object object, TransferData transferData) {
+	}
+
+	@Override
+	protected Object nativeToJava(TransferData transferData) {
+		return ArrayUtils.EMPTY_BYTE_ARRAY;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/GridDataFactory.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/GridDataFactory.java
index 068fd2e5f..61dc0bda1 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/GridDataFactory.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/GridDataFactory.java
@@ -99,443 +99,443 @@
  * @since 3.2
  */
 public final class GridDataFactory {
-  private final Control m_control;
-  private final PixelConverter m_pixelConverter;
-  private final GridData m_data;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private GridDataFactory(Control control, GridData gridData) {
-    m_control = control;
-    m_pixelConverter = new PixelConverter(m_control);
-    //
-    m_data = gridData;
-    if (m_control.getLayoutData() != m_data) {
-      m_control.setLayoutData(m_data);
-    }
-  }
-
-  /**
-   * Creates new {@link GridDataFactory} with new {@link GridData}.
-   */
-  public static GridDataFactory create(Control control) {
-    return new GridDataFactory(control, new GridData());
-  }
-
-  /**
-   * Creates new {@link GridDataFactory} for modifying {@link GridData} already installed in
-   * control.
-   */
-  public static GridDataFactory modify(Control control) {
-    GridData gridData;
-    {
-      Object existingLayoutData = control.getLayoutData();
-      if (existingLayoutData instanceof GridData) {
-        gridData = (GridData) existingLayoutData;
-      } else {
-        gridData = new GridData();
-      }
-    }
-    return new GridDataFactory(control, gridData);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Span
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets the GridData span. The span controls how many cells are filled by the control.
-   *
-   * @param hSpan
-   *          number of columns spanned by the control
-   * @param vSpan
-   *          number of rows spanned by the control
-   * @return this
-   */
-  public GridDataFactory span(int hSpan, int vSpan) {
-    m_data.horizontalSpan = hSpan;
-    m_data.verticalSpan = vSpan;
-    return this;
-  }
-
-  /**
-   * Sets the GridData span. The span controls how many cells are filled by the control.
-   *
-   * @param hSpan
-   *          number of columns spanned by the control
-   * @return this
-   */
-  public GridDataFactory spanH(int hSpan) {
-    m_data.horizontalSpan = hSpan;
-    return this;
-  }
-
-  /**
-   * Sets the GridData span. The span controls how many cells are filled by the control.
-   *
-   * @param vSpan
-   *          number of rows spanned by the control
-   * @return this
-   */
-  public GridDataFactory spanV(int vSpan) {
-    m_data.verticalSpan = vSpan;
-    return this;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Hint
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets the width and height hints. The width and height hints override the control's preferred
-   * size. If either hint is set to SWT.DEFAULT, the control's preferred size is used.
-   *
-   * @param xHint
-   *          horizontal hint (pixels), or SWT.DEFAULT to use the control's preferred size
-   * @param yHint
-   *          vertical hint (pixels), or SWT.DEFAULT to use the control's preferred size
-   * @return this
-   */
-  public GridDataFactory hint(int xHint, int yHint) {
-    m_data.widthHint = xHint;
-    m_data.heightHint = yHint;
-    return this;
-  }
-
-  /**
-   * Sets hint in chars.
-   */
-  public GridDataFactory hintC(int xHintInChars, int yHintInChars) {
-    hintHC(xHintInChars);
-    hintVC(yHintInChars);
-    return this;
-  }
-
-  /**
-   * Sets the width hint.
-   *
-   * @return this
-   */
-  public GridDataFactory hintH(int xHint) {
-    m_data.widthHint = xHint;
-    return this;
-  }
-
-  /**
-   * Sets the width hint to the minimum of current hint and given <code>otherHint</code>.
-   *
-   * @return this
-   */
-  public GridDataFactory hintHMin(int otherHint) {
-    m_data.widthHint = Math.min(m_data.widthHint, otherHint);
-    return this;
-  }
-
-  /**
-   * Sets the width hint in chars.
-   *
-   * @return this
-   */
-  public GridDataFactory hintHC(int hintInChars) {
-    return hintH(m_pixelConverter.convertWidthInCharsToPixels(hintInChars));
-  }
-
-  /**
-   * Sets the width hint.
-   *
-   * @return this
-   */
-  public GridDataFactory hintHU(int hintInDLU) {
-    return hintH(m_pixelConverter.convertHorizontalDLUsToPixels(hintInDLU));
-  }
-
-  /**
-   * Sets the height hint.
-   *
-   * @return this
-   */
-  public GridDataFactory hintV(int yHint) {
-    m_data.heightHint = yHint;
-    return this;
-  }
-
-  /**
-   * Sets the height hint in chars.
-   *
-   * @return this
-   */
-  public GridDataFactory hintVC(int hintInChars) {
-    return hintV(m_pixelConverter.convertHeightInCharsToPixels(hintInChars));
-  }
-
-  /**
-   * Increments horizontal hint on given value.
-   *
-   * @return this
-   */
-  public GridDataFactory hintHAdd(int increment) {
-    return hintV(m_data.widthHint + increment);
-  }
-
-  /**
-   * Increments vertical hint on given value.
-   *
-   * @return this
-   */
-  public GridDataFactory hintVAdd(int increment) {
-    return hintV(m_data.heightHint + increment);
-  }
-
-  /**
-   * Sets the width and height hints. The width and height hints override the control's preferred
-   * size. If either hint is set to SWT.DEFAULT, the control's preferred size is used.
-   *
-   * @param hint
-   *          size (pixels) to be used instead of the control's preferred size. If the x or y values
-   *          are set to SWT.DEFAULT, the control's computeSize() method will be used to obtain that
-   *          dimension of the preferred size.
-   * @return this
-   */
-  public GridDataFactory hint(Point hint) {
-    m_data.widthHint = hint.x;
-    m_data.heightHint = hint.y;
-    return this;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Minimum size
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public GridDataFactory minH(int minimumWidth) {
-    m_data.minimumWidth = minimumWidth;
-    return this;
-  }
-
-  public GridDataFactory minHC(int widthInChars) {
-    return minH(m_pixelConverter.convertWidthInCharsToPixels(widthInChars));
-  }
-
-  public GridDataFactory minV(int minimumHeight) {
-    m_data.minimumHeight = minimumHeight;
-    return this;
-  }
-
-  public GridDataFactory minVC(int heightInChars) {
-    return minV(m_pixelConverter.convertHeightInCharsToPixels(heightInChars));
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Alignment
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets the alignment of the control within its cell.
-   *
-   * @param hAlign
-   *          horizontal alignment. One of SWT.BEGINNING, SWT.CENTER, SWT.END, or SWT.FILL.
-   * @param vAlign
-   *          vertical alignment. One of SWT.BEGINNING, SWT.CENTER, SWT.END, or SWT.FILL.
-   * @return this
-   */
-  public GridDataFactory align(int hAlign, int vAlign) {
-    m_data.horizontalAlignment = hAlign;
-    m_data.verticalAlignment = vAlign;
-    return this;
-  }
-
-  /**
-   * Sets the horizontal and vertical alignment to GridData.FILL.
-   */
-  public GridDataFactory fill() {
-    return align(GridData.FILL, GridData.FILL);
-  }
-
-  /**
-   * Sets the horizontal alignment of the control within its cell.
-   *
-   * @param hAlign
-   *          horizontal alignment. One of SWT.BEGINNING, SWT.CENTER, SWT.END, or SWT.FILL.
-   * @return this
-   */
-  public GridDataFactory alignH(int hAlign) {
-    m_data.horizontalAlignment = hAlign;
-    return this;
-  }
-
-  /**
-   * Sets the horizontal alignment of the control to GridData.BEGINNING
-   *
-   * @return this
-   */
-  public GridDataFactory alignHL() {
-    return alignH(GridData.BEGINNING);
-  }
-
-  /**
-   * Sets the horizontal alignment of the control to GridData.CENTER
-   *
-   * @return this
-   */
-  public GridDataFactory alignHC() {
-    return alignH(GridData.CENTER);
-  }
-
-  /**
-   * Sets the horizontal alignment of the control to GridData.FILL
-   *
-   * @return this
-   */
-  public GridDataFactory alignHF() {
-    return alignH(GridData.FILL);
-  }
-
-  /**
-   * Sets the horizontal alignment of the control to GridData.FILL
-   *
-   * @return this
-   */
-  public GridDataFactory fillH() {
-    return alignHF();
-  }
-
-  /**
-   * Sets the horizontal alignment of the control to GridData.END
-   *
-   * @return this
-   */
-  public GridDataFactory alignHR() {
-    return alignH(GridData.END);
-  }
-
-  /**
-   * Sets the vertical alignment of the control within its cell.
-   *
-   * @param vAlign
-   *          vertical alignment. One of SWT.BEGINNING, SWT.CENTER, SWT.END, or SWT.FILL.
-   * @return this
-   */
-  public GridDataFactory alignV(int vAlign) {
-    m_data.verticalAlignment = vAlign;
-    return this;
-  }
-
-  /**
-   * Sets the vertical alignment of the control to GridData.BEGINNING
-   *
-   * @return this
-   */
-  public GridDataFactory alignVT() {
-    return alignV(GridData.BEGINNING);
-  }
-
-  /**
-   * Sets the vertical alignment of the control to GridData.CENTER
-   *
-   * @return this
-   */
-  public GridDataFactory alignVM() {
-    return alignV(GridData.CENTER);
-  }
-
-  /**
-   * Sets the vertical alignment of the control to GridData.FILL
-   *
-   * @return this
-   */
-  public GridDataFactory alignVF() {
-    return alignV(GridData.FILL);
-  }
-
-  /**
-   * Sets the vertical alignment of the control to GridData.FILL
-   *
-   * @return this
-   */
-  public GridDataFactory fillV() {
-    return alignVF();
-  }
-
-  /**
-   * Sets the vertical alignment of the control to GridData.END
-   *
-   * @return this
-   */
-  public GridDataFactory alignVB() {
-    return alignV(GridData.END);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Indent
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets the indent of the control within the cell in pixels.
-   */
-  public GridDataFactory indentH(int hIndent) {
-    m_data.horizontalIndent = hIndent;
-    return this;
-  }
-
-  /**
-   * Sets the indent of the control within the cell in characters.
-   */
-  public GridDataFactory indentHC(int hIndent) {
-    m_data.horizontalIndent = m_pixelConverter.convertWidthInCharsToPixels(hIndent);
-    return this;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Grab
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Determines whether extra horizontal or vertical space should be allocated to this control's
-   * column when the layout resizes. If any control in the column is set to grab horizontal then the
-   * whole column will grab horizontal space. If any control in the row is set to grab vertical then
-   * the whole row will grab vertical space.
-   *
-   * @param horizontal
-   *          true if the control's column should grow horizontally
-   * @param vertical
-   *          true if the control's row should grow vertically
-   * @return this
-   */
-  public GridDataFactory grab(boolean horizontal, boolean vertical) {
-    m_data.grabExcessHorizontalSpace = horizontal;
-    m_data.grabExcessVerticalSpace = vertical;
-    return this;
-  }
-
-  public GridDataFactory grabH() {
-    m_data.grabExcessHorizontalSpace = true;
-    return this;
-  }
-
-  public GridDataFactory grabV() {
-    m_data.grabExcessVerticalSpace = true;
-    return this;
-  }
-
-  public GridDataFactory grab() {
-    return grab(true, true);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exclude
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public GridDataFactory exclude(boolean value) {
-    m_data.exclude = value;
-    return this;
-  }
+	private final Control m_control;
+	private final PixelConverter m_pixelConverter;
+	private final GridData m_data;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private GridDataFactory(Control control, GridData gridData) {
+		m_control = control;
+		m_pixelConverter = new PixelConverter(m_control);
+		//
+		m_data = gridData;
+		if (m_control.getLayoutData() != m_data) {
+			m_control.setLayoutData(m_data);
+		}
+	}
+
+	/**
+	 * Creates new {@link GridDataFactory} with new {@link GridData}.
+	 */
+	public static GridDataFactory create(Control control) {
+		return new GridDataFactory(control, new GridData());
+	}
+
+	/**
+	 * Creates new {@link GridDataFactory} for modifying {@link GridData} already installed in
+	 * control.
+	 */
+	public static GridDataFactory modify(Control control) {
+		GridData gridData;
+		{
+			Object existingLayoutData = control.getLayoutData();
+			if (existingLayoutData instanceof GridData) {
+				gridData = (GridData) existingLayoutData;
+			} else {
+				gridData = new GridData();
+			}
+		}
+		return new GridDataFactory(control, gridData);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Span
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets the GridData span. The span controls how many cells are filled by the control.
+	 *
+	 * @param hSpan
+	 *          number of columns spanned by the control
+	 * @param vSpan
+	 *          number of rows spanned by the control
+	 * @return this
+	 */
+	public GridDataFactory span(int hSpan, int vSpan) {
+		m_data.horizontalSpan = hSpan;
+		m_data.verticalSpan = vSpan;
+		return this;
+	}
+
+	/**
+	 * Sets the GridData span. The span controls how many cells are filled by the control.
+	 *
+	 * @param hSpan
+	 *          number of columns spanned by the control
+	 * @return this
+	 */
+	public GridDataFactory spanH(int hSpan) {
+		m_data.horizontalSpan = hSpan;
+		return this;
+	}
+
+	/**
+	 * Sets the GridData span. The span controls how many cells are filled by the control.
+	 *
+	 * @param vSpan
+	 *          number of rows spanned by the control
+	 * @return this
+	 */
+	public GridDataFactory spanV(int vSpan) {
+		m_data.verticalSpan = vSpan;
+		return this;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Hint
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets the width and height hints. The width and height hints override the control's preferred
+	 * size. If either hint is set to SWT.DEFAULT, the control's preferred size is used.
+	 *
+	 * @param xHint
+	 *          horizontal hint (pixels), or SWT.DEFAULT to use the control's preferred size
+	 * @param yHint
+	 *          vertical hint (pixels), or SWT.DEFAULT to use the control's preferred size
+	 * @return this
+	 */
+	public GridDataFactory hint(int xHint, int yHint) {
+		m_data.widthHint = xHint;
+		m_data.heightHint = yHint;
+		return this;
+	}
+
+	/**
+	 * Sets hint in chars.
+	 */
+	public GridDataFactory hintC(int xHintInChars, int yHintInChars) {
+		hintHC(xHintInChars);
+		hintVC(yHintInChars);
+		return this;
+	}
+
+	/**
+	 * Sets the width hint.
+	 *
+	 * @return this
+	 */
+	public GridDataFactory hintH(int xHint) {
+		m_data.widthHint = xHint;
+		return this;
+	}
+
+	/**
+	 * Sets the width hint to the minimum of current hint and given <code>otherHint</code>.
+	 *
+	 * @return this
+	 */
+	public GridDataFactory hintHMin(int otherHint) {
+		m_data.widthHint = Math.min(m_data.widthHint, otherHint);
+		return this;
+	}
+
+	/**
+	 * Sets the width hint in chars.
+	 *
+	 * @return this
+	 */
+	public GridDataFactory hintHC(int hintInChars) {
+		return hintH(m_pixelConverter.convertWidthInCharsToPixels(hintInChars));
+	}
+
+	/**
+	 * Sets the width hint.
+	 *
+	 * @return this
+	 */
+	public GridDataFactory hintHU(int hintInDLU) {
+		return hintH(m_pixelConverter.convertHorizontalDLUsToPixels(hintInDLU));
+	}
+
+	/**
+	 * Sets the height hint.
+	 *
+	 * @return this
+	 */
+	public GridDataFactory hintV(int yHint) {
+		m_data.heightHint = yHint;
+		return this;
+	}
+
+	/**
+	 * Sets the height hint in chars.
+	 *
+	 * @return this
+	 */
+	public GridDataFactory hintVC(int hintInChars) {
+		return hintV(m_pixelConverter.convertHeightInCharsToPixels(hintInChars));
+	}
+
+	/**
+	 * Increments horizontal hint on given value.
+	 *
+	 * @return this
+	 */
+	public GridDataFactory hintHAdd(int increment) {
+		return hintV(m_data.widthHint + increment);
+	}
+
+	/**
+	 * Increments vertical hint on given value.
+	 *
+	 * @return this
+	 */
+	public GridDataFactory hintVAdd(int increment) {
+		return hintV(m_data.heightHint + increment);
+	}
+
+	/**
+	 * Sets the width and height hints. The width and height hints override the control's preferred
+	 * size. If either hint is set to SWT.DEFAULT, the control's preferred size is used.
+	 *
+	 * @param hint
+	 *          size (pixels) to be used instead of the control's preferred size. If the x or y values
+	 *          are set to SWT.DEFAULT, the control's computeSize() method will be used to obtain that
+	 *          dimension of the preferred size.
+	 * @return this
+	 */
+	public GridDataFactory hint(Point hint) {
+		m_data.widthHint = hint.x;
+		m_data.heightHint = hint.y;
+		return this;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Minimum size
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public GridDataFactory minH(int minimumWidth) {
+		m_data.minimumWidth = minimumWidth;
+		return this;
+	}
+
+	public GridDataFactory minHC(int widthInChars) {
+		return minH(m_pixelConverter.convertWidthInCharsToPixels(widthInChars));
+	}
+
+	public GridDataFactory minV(int minimumHeight) {
+		m_data.minimumHeight = minimumHeight;
+		return this;
+	}
+
+	public GridDataFactory minVC(int heightInChars) {
+		return minV(m_pixelConverter.convertHeightInCharsToPixels(heightInChars));
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Alignment
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets the alignment of the control within its cell.
+	 *
+	 * @param hAlign
+	 *          horizontal alignment. One of SWT.BEGINNING, SWT.CENTER, SWT.END, or SWT.FILL.
+	 * @param vAlign
+	 *          vertical alignment. One of SWT.BEGINNING, SWT.CENTER, SWT.END, or SWT.FILL.
+	 * @return this
+	 */
+	public GridDataFactory align(int hAlign, int vAlign) {
+		m_data.horizontalAlignment = hAlign;
+		m_data.verticalAlignment = vAlign;
+		return this;
+	}
+
+	/**
+	 * Sets the horizontal and vertical alignment to GridData.FILL.
+	 */
+	public GridDataFactory fill() {
+		return align(GridData.FILL, GridData.FILL);
+	}
+
+	/**
+	 * Sets the horizontal alignment of the control within its cell.
+	 *
+	 * @param hAlign
+	 *          horizontal alignment. One of SWT.BEGINNING, SWT.CENTER, SWT.END, or SWT.FILL.
+	 * @return this
+	 */
+	public GridDataFactory alignH(int hAlign) {
+		m_data.horizontalAlignment = hAlign;
+		return this;
+	}
+
+	/**
+	 * Sets the horizontal alignment of the control to GridData.BEGINNING
+	 *
+	 * @return this
+	 */
+	public GridDataFactory alignHL() {
+		return alignH(GridData.BEGINNING);
+	}
+
+	/**
+	 * Sets the horizontal alignment of the control to GridData.CENTER
+	 *
+	 * @return this
+	 */
+	public GridDataFactory alignHC() {
+		return alignH(GridData.CENTER);
+	}
+
+	/**
+	 * Sets the horizontal alignment of the control to GridData.FILL
+	 *
+	 * @return this
+	 */
+	public GridDataFactory alignHF() {
+		return alignH(GridData.FILL);
+	}
+
+	/**
+	 * Sets the horizontal alignment of the control to GridData.FILL
+	 *
+	 * @return this
+	 */
+	public GridDataFactory fillH() {
+		return alignHF();
+	}
+
+	/**
+	 * Sets the horizontal alignment of the control to GridData.END
+	 *
+	 * @return this
+	 */
+	public GridDataFactory alignHR() {
+		return alignH(GridData.END);
+	}
+
+	/**
+	 * Sets the vertical alignment of the control within its cell.
+	 *
+	 * @param vAlign
+	 *          vertical alignment. One of SWT.BEGINNING, SWT.CENTER, SWT.END, or SWT.FILL.
+	 * @return this
+	 */
+	public GridDataFactory alignV(int vAlign) {
+		m_data.verticalAlignment = vAlign;
+		return this;
+	}
+
+	/**
+	 * Sets the vertical alignment of the control to GridData.BEGINNING
+	 *
+	 * @return this
+	 */
+	public GridDataFactory alignVT() {
+		return alignV(GridData.BEGINNING);
+	}
+
+	/**
+	 * Sets the vertical alignment of the control to GridData.CENTER
+	 *
+	 * @return this
+	 */
+	public GridDataFactory alignVM() {
+		return alignV(GridData.CENTER);
+	}
+
+	/**
+	 * Sets the vertical alignment of the control to GridData.FILL
+	 *
+	 * @return this
+	 */
+	public GridDataFactory alignVF() {
+		return alignV(GridData.FILL);
+	}
+
+	/**
+	 * Sets the vertical alignment of the control to GridData.FILL
+	 *
+	 * @return this
+	 */
+	public GridDataFactory fillV() {
+		return alignVF();
+	}
+
+	/**
+	 * Sets the vertical alignment of the control to GridData.END
+	 *
+	 * @return this
+	 */
+	public GridDataFactory alignVB() {
+		return alignV(GridData.END);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Indent
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets the indent of the control within the cell in pixels.
+	 */
+	public GridDataFactory indentH(int hIndent) {
+		m_data.horizontalIndent = hIndent;
+		return this;
+	}
+
+	/**
+	 * Sets the indent of the control within the cell in characters.
+	 */
+	public GridDataFactory indentHC(int hIndent) {
+		m_data.horizontalIndent = m_pixelConverter.convertWidthInCharsToPixels(hIndent);
+		return this;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Grab
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Determines whether extra horizontal or vertical space should be allocated to this control's
+	 * column when the layout resizes. If any control in the column is set to grab horizontal then the
+	 * whole column will grab horizontal space. If any control in the row is set to grab vertical then
+	 * the whole row will grab vertical space.
+	 *
+	 * @param horizontal
+	 *          true if the control's column should grow horizontally
+	 * @param vertical
+	 *          true if the control's row should grow vertically
+	 * @return this
+	 */
+	public GridDataFactory grab(boolean horizontal, boolean vertical) {
+		m_data.grabExcessHorizontalSpace = horizontal;
+		m_data.grabExcessVerticalSpace = vertical;
+		return this;
+	}
+
+	public GridDataFactory grabH() {
+		m_data.grabExcessHorizontalSpace = true;
+		return this;
+	}
+
+	public GridDataFactory grabV() {
+		m_data.grabExcessVerticalSpace = true;
+		return this;
+	}
+
+	public GridDataFactory grab() {
+		return grab(true, true);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exclude
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public GridDataFactory exclude(boolean value) {
+		m_data.exclude = value;
+		return this;
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/GridLayoutFactory.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/GridLayoutFactory.java
index 7abf7e745..65066760f 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/GridLayoutFactory.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/GridLayoutFactory.java
@@ -20,104 +20,104 @@
  * @author scheglov_ke
  */
 public final class GridLayoutFactory {
-  private final GridLayout m_layout;
+	private final GridLayout m_layout;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private GridLayoutFactory(Composite composite, GridLayout layout) {
-    m_layout = layout;
-    composite.setLayout(m_layout);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private GridLayoutFactory(Composite composite, GridLayout layout) {
+		m_layout = layout;
+		composite.setLayout(m_layout);
+	}
 
-  public static GridLayoutFactory create(Composite composite) {
-    return new GridLayoutFactory(composite, new GridLayout());
-  }
+	public static GridLayoutFactory create(Composite composite) {
+		return new GridLayoutFactory(composite, new GridLayout());
+	}
 
-  public static GridLayoutFactory modify(Composite composite) {
-    Layout layout = composite.getLayout();
-    if (layout instanceof GridLayout) {
-      return new GridLayoutFactory(composite, (GridLayout) layout);
-    }
-    return create(composite);
-  }
+	public static GridLayoutFactory modify(Composite composite) {
+		Layout layout = composite.getLayout();
+		if (layout instanceof GridLayout) {
+			return new GridLayoutFactory(composite, (GridLayout) layout);
+		}
+		return create(composite);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets number of columns in {@link GridLayout}.
-   */
-  public GridLayoutFactory columns(int numColumns) {
-    m_layout.numColumns = numColumns;
-    return this;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets number of columns in {@link GridLayout}.
+	 */
+	public GridLayoutFactory columns(int numColumns) {
+		m_layout.numColumns = numColumns;
+		return this;
+	}
 
-  /**
-   * Specifies whether all columns in the layout will be forced to have the same width.
-   */
-  public GridLayoutFactory equalColumns() {
-    m_layout.makeColumnsEqualWidth = true;
-    return this;
-  }
+	/**
+	 * Specifies whether all columns in the layout will be forced to have the same width.
+	 */
+	public GridLayoutFactory equalColumns() {
+		m_layout.makeColumnsEqualWidth = true;
+		return this;
+	}
 
-  /**
-   * Sets the horizontal margins.
-   */
-  public GridLayoutFactory marginsH(int margins) {
-    m_layout.marginWidth = margins;
-    return this;
-  }
+	/**
+	 * Sets the horizontal margins.
+	 */
+	public GridLayoutFactory marginsH(int margins) {
+		m_layout.marginWidth = margins;
+		return this;
+	}
 
-  /**
-   * Sets the vertical margins.
-   */
-  public GridLayoutFactory marginsV(int margins) {
-    m_layout.marginHeight = margins;
-    return this;
-  }
+	/**
+	 * Sets the vertical margins.
+	 */
+	public GridLayoutFactory marginsV(int margins) {
+		m_layout.marginHeight = margins;
+		return this;
+	}
 
-  /**
-   * Sets the horizontal/vertical margins.
-   */
-  public GridLayoutFactory margins(int margins) {
-    m_layout.marginWidth = m_layout.marginHeight = margins;
-    return this;
-  }
+	/**
+	 * Sets the horizontal/vertical margins.
+	 */
+	public GridLayoutFactory margins(int margins) {
+		m_layout.marginWidth = m_layout.marginHeight = margins;
+		return this;
+	}
 
-  /**
-   * Sets zero horizontal and vertical margins.
-   */
-  public GridLayoutFactory noMargins() {
-    m_layout.marginWidth = m_layout.marginHeight = 0;
-    return this;
-  }
+	/**
+	 * Sets zero horizontal and vertical margins.
+	 */
+	public GridLayoutFactory noMargins() {
+		m_layout.marginWidth = m_layout.marginHeight = 0;
+		return this;
+	}
 
-  /**
-   * Sets zero horizontal and vertical spacing.
-   */
-  public GridLayoutFactory noSpacing() {
-    m_layout.horizontalSpacing = m_layout.verticalSpacing = 0;
-    return this;
-  }
+	/**
+	 * Sets zero horizontal and vertical spacing.
+	 */
+	public GridLayoutFactory noSpacing() {
+		m_layout.horizontalSpacing = m_layout.verticalSpacing = 0;
+		return this;
+	}
 
-  /**
-   * Sets horizontal spacing.
-   */
-  public GridLayoutFactory spacingH(int spacing) {
-    m_layout.horizontalSpacing = spacing;
-    return this;
-  }
+	/**
+	 * Sets horizontal spacing.
+	 */
+	public GridLayoutFactory spacingH(int spacing) {
+		m_layout.horizontalSpacing = spacing;
+		return this;
+	}
 
-  /**
-   * Sets vertical spacing.
-   */
-  public GridLayoutFactory spacingV(int spacing) {
-    m_layout.verticalSpacing = spacing;
-    return this;
-  }
+	/**
+	 * Sets vertical spacing.
+	 */
+	public GridLayoutFactory spacingV(int spacing) {
+		m_layout.verticalSpacing = spacing;
+		return this;
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/IWorkbenchThemeConstants.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/IWorkbenchThemeConstants.java
index 76efb45c0..59bd1055d 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/IWorkbenchThemeConstants.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/IWorkbenchThemeConstants.java
@@ -17,34 +17,34 @@
  * @coverage core.ui
  */
 public interface IWorkbenchThemeConstants {
-  public static final String TAB_TEXT_FONT = "org.eclipse.ui.workbench.TAB_TEXT_FONT"; //$NON-NLS-1$
-  public static final String VIEW_MESSAGE_TEXT_FONT =
-      "org.eclipse.ui.workbench.VIEW_MESSAGE_TEXT_FONT"; //$NON-NLS-1$
-  public static final String ACTIVE_TAB_TEXT_COLOR =
-      "org.eclipse.ui.workbench.ACTIVE_TAB_TEXT_COLOR"; //$NON-NLS-1$
-  public static final String ACTIVE_NOFOCUS_TAB_TEXT_COLOR =
-      "org.eclipse.ui.workbench.ACTIVE_NOFOCUS_TAB_TEXT_COLOR"; //$NON-NLS-1$
-  public static final String INACTIVE_TAB_TEXT_COLOR =
-      "org.eclipse.ui.workbench.INACTIVE_TAB_TEXT_COLOR"; //$NON-NLS-1$
-  public static final String ACTIVE_TAB_BG_START = "org.eclipse.ui.workbench.ACTIVE_TAB_BG_START"; //$NON-NLS-1$
-  public static final String ACTIVE_TAB_BG_END = "org.eclipse.ui.workbench.ACTIVE_TAB_BG_END"; //$NON-NLS-1$
-  public static final String ACTIVE_TAB_HIGHLIGHT = "org.eclipse.ui.workbench.ACTIVE_TAB_HIGHLIGHT"; //$NON-NLS-1$
-  public static final String ACTIVE_TAB_HIGHLIGHT_START =
-      "org.eclipse.ui.workbench.ACTIVE_TAB_HIGHLIGHT_START"; //$NON-NLS-1$
-  public static final String ACTIVE_NOFOCUS_TAB_BG_START =
-      "org.eclipse.ui.workbench.ACTIVE_NOFOCUS_TAB_BG_START"; //$NON-NLS-1$
-  public static final String ACTIVE_NOFOCUS_TAB_BG_END =
-      "org.eclipse.ui.workbench.ACTIVE_NOFOCUS_TAB_BG_END"; //$NON-NLS-1$
-  public static final String INACTIVE_TAB_BG_START =
-      "org.eclipse.ui.workbench.INACTIVE_TAB_BG_START"; //$NON-NLS-1$
-  public static final String INACTIVE_TAB_BG_END = "org.eclipse.ui.workbench.INACTIVE_TAB_BG_END"; //$NON-NLS-1$
-  public static final String ACTIVE_TAB_PERCENT = "org.eclipse.ui.workbench.ACTIVE_TAB_PERCENT"; //$NON-NLS-1$
-  public static final String ACTIVE_NOFOCUS_TAB_PERCENT =
-      "org.eclipse.ui.workbench.ACTIVE_NOFOCUS_TAB_PERCENT"; //$NON-NLS-1$
-  public static final String INACTIVE_TAB_PERCENT = "org.eclipse.ui.workbench.INACTIVE_TAB_PERCENT"; //$NON-NLS-1$
-  public static final String ACTIVE_TAB_VERTICAL = "org.eclipse.ui.workbench.ACTIVE_TAB_VERTICAL"; //$NON-NLS-1$
-  public static final String ACTIVE_NOFOCUS_TAB_VERTICAL =
-      "org.eclipse.ui.workbench.ACTIVE_NOFOCUS_TAB_VERTICAL"; //$NON-NLS-1$
-  public static final String INACTIVE_TAB_VERTICAL =
-      "org.eclipse.ui.workbench.INACTIVE_TAB_VERTICAL"; //$NON-NLS-1$
+	public static final String TAB_TEXT_FONT = "org.eclipse.ui.workbench.TAB_TEXT_FONT"; //$NON-NLS-1$
+	public static final String VIEW_MESSAGE_TEXT_FONT =
+			"org.eclipse.ui.workbench.VIEW_MESSAGE_TEXT_FONT"; //$NON-NLS-1$
+	public static final String ACTIVE_TAB_TEXT_COLOR =
+			"org.eclipse.ui.workbench.ACTIVE_TAB_TEXT_COLOR"; //$NON-NLS-1$
+	public static final String ACTIVE_NOFOCUS_TAB_TEXT_COLOR =
+			"org.eclipse.ui.workbench.ACTIVE_NOFOCUS_TAB_TEXT_COLOR"; //$NON-NLS-1$
+	public static final String INACTIVE_TAB_TEXT_COLOR =
+			"org.eclipse.ui.workbench.INACTIVE_TAB_TEXT_COLOR"; //$NON-NLS-1$
+	public static final String ACTIVE_TAB_BG_START = "org.eclipse.ui.workbench.ACTIVE_TAB_BG_START"; //$NON-NLS-1$
+	public static final String ACTIVE_TAB_BG_END = "org.eclipse.ui.workbench.ACTIVE_TAB_BG_END"; //$NON-NLS-1$
+	public static final String ACTIVE_TAB_HIGHLIGHT = "org.eclipse.ui.workbench.ACTIVE_TAB_HIGHLIGHT"; //$NON-NLS-1$
+	public static final String ACTIVE_TAB_HIGHLIGHT_START =
+			"org.eclipse.ui.workbench.ACTIVE_TAB_HIGHLIGHT_START"; //$NON-NLS-1$
+	public static final String ACTIVE_NOFOCUS_TAB_BG_START =
+			"org.eclipse.ui.workbench.ACTIVE_NOFOCUS_TAB_BG_START"; //$NON-NLS-1$
+	public static final String ACTIVE_NOFOCUS_TAB_BG_END =
+			"org.eclipse.ui.workbench.ACTIVE_NOFOCUS_TAB_BG_END"; //$NON-NLS-1$
+	public static final String INACTIVE_TAB_BG_START =
+			"org.eclipse.ui.workbench.INACTIVE_TAB_BG_START"; //$NON-NLS-1$
+	public static final String INACTIVE_TAB_BG_END = "org.eclipse.ui.workbench.INACTIVE_TAB_BG_END"; //$NON-NLS-1$
+	public static final String ACTIVE_TAB_PERCENT = "org.eclipse.ui.workbench.ACTIVE_TAB_PERCENT"; //$NON-NLS-1$
+	public static final String ACTIVE_NOFOCUS_TAB_PERCENT =
+			"org.eclipse.ui.workbench.ACTIVE_NOFOCUS_TAB_PERCENT"; //$NON-NLS-1$
+	public static final String INACTIVE_TAB_PERCENT = "org.eclipse.ui.workbench.INACTIVE_TAB_PERCENT"; //$NON-NLS-1$
+	public static final String ACTIVE_TAB_VERTICAL = "org.eclipse.ui.workbench.ACTIVE_TAB_VERTICAL"; //$NON-NLS-1$
+	public static final String ACTIVE_NOFOCUS_TAB_VERTICAL =
+			"org.eclipse.ui.workbench.ACTIVE_NOFOCUS_TAB_VERTICAL"; //$NON-NLS-1$
+	public static final String INACTIVE_TAB_VERTICAL =
+			"org.eclipse.ui.workbench.INACTIVE_TAB_VERTICAL"; //$NON-NLS-1$
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/ImageDisposer.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/ImageDisposer.java
index f923f4f05..b25db355b 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/ImageDisposer.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/ImageDisposer.java
@@ -35,115 +35,115 @@
  * @coverage core.model.description
  */
 public final class ImageDisposer {
-  private static boolean DEBUG = false;
-  private static ReferenceQueue<Object> m_queue = new ReferenceQueue<Object>();
-  private static final List<ImageHolder> m_references = Lists.newArrayList();
-  private static Timer m_timer;
-  static {
-    // create Timer (its TimerThread) with empty set of ProtectionDomain's,
-    // so prevent holding reference on stack ProtectionDomain's, which include ClassLoader's
-    AccessController.doPrivileged(new PrivilegedAction<Object>() {
-      @Override
-      public Object run() {
-        m_timer = new Timer(true);
-        return null;
-      }
-    }, new AccessControlContext(new ProtectionDomain[]{}));
-    // schedule time
-    m_timer.schedule(new TimerTask() {
-      @Override
-      public void run() {
-        disposeImages();
-      }
-    }, 1000, 1000);
-  }
+	private static boolean DEBUG = false;
+	private static ReferenceQueue<Object> m_queue = new ReferenceQueue<Object>();
+	private static final List<ImageHolder> m_references = Lists.newArrayList();
+	private static Timer m_timer;
+	static {
+		// create Timer (its TimerThread) with empty set of ProtectionDomain's,
+		// so prevent holding reference on stack ProtectionDomain's, which include ClassLoader's
+		AccessController.doPrivileged(new PrivilegedAction<Object>() {
+			@Override
+			public Object run() {
+				m_timer = new Timer(true);
+				return null;
+			}
+		}, new AccessControlContext(new ProtectionDomain[]{}));
+		// schedule time
+		m_timer.schedule(new TimerTask() {
+			@Override
+			public void run() {
+				disposeImages();
+			}
+		}, 1000, 1000);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private ImageDisposer() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private ImageDisposer() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Registers {@link Image} that should be disposed when its key is garbage collected.
-   */
-  public static synchronized void add(Object key, String name, Image image) {
-    if (image != null) {
-      m_references.add(new ImageHolder(key, m_queue, name, image));
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Registers {@link Image} that should be disposed when its key is garbage collected.
+	 */
+	public static synchronized void add(Object key, String name, Image image) {
+		if (image != null) {
+			m_references.add(new ImageHolder(key, m_queue, name, image));
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Implementation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * {@link WeakReference} that holds reference on {@link Image}.
-   */
-  private static class ImageHolder extends WeakReference<Object> {
-    private final String m_name;
-    private final Image m_image;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Implementation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * {@link WeakReference} that holds reference on {@link Image}.
+	 */
+	private static class ImageHolder extends WeakReference<Object> {
+		private final String m_name;
+		private final Image m_image;
 
-    public ImageHolder(Object key, ReferenceQueue<Object> queue, String name, Image image) {
-      super(key, queue);
-      m_name = name;
-      m_image = image;
-    }
-  }
+		public ImageHolder(Object key, ReferenceQueue<Object> queue, String name, Image image) {
+			super(key, queue);
+			m_name = name;
+			m_image = image;
+		}
+	}
 
-  /**
-   * Disposes {@link Image}-s for which keys are garbage collected.
-   */
-  private static synchronized void disposeImages() {
-    int removed = 0;
-    while (true) {
-      ImageHolder reference = (ImageHolder) m_queue.poll();
-      if (reference == null) {
-        break;
-      }
-      // remove reference
-      {
-        m_references.remove(reference);
-        removed++;
-      }
-      // dispose Image
-      final Image image = reference.m_image;
-      ExecutionUtils.runAsync(new RunnableEx() {
-        @Override
-        public void run() throws Exception {
-          if (image != null && !image.isDisposed()) {
-            image.dispose();
-          }
-        }
-      });
-    }
-    if (DEBUG && removed != 0) {
-      printReferences();
-    }
-  }
+	/**
+	 * Disposes {@link Image}-s for which keys are garbage collected.
+	 */
+	private static synchronized void disposeImages() {
+		int removed = 0;
+		while (true) {
+			ImageHolder reference = (ImageHolder) m_queue.poll();
+			if (reference == null) {
+				break;
+			}
+			// remove reference
+			{
+				m_references.remove(reference);
+				removed++;
+			}
+			// dispose Image
+			final Image image = reference.m_image;
+			ExecutionUtils.runAsync(new RunnableEx() {
+				@Override
+				public void run() throws Exception {
+					if (image != null && !image.isDisposed()) {
+						image.dispose();
+					}
+				}
+			});
+		}
+		if (DEBUG && removed != 0) {
+			printReferences();
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Debug
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static void printReferences() {
-    Debug.println("references: " + m_references.size());
-    try {
-      for (ImageHolder reference : m_references) {
-        Debug.print("\t");
-        Debug.print(reference.m_name);
-        Debug.println();
-      }
-    } catch (Throwable e) {
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Debug
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static void printReferences() {
+		Debug.println("references: " + m_references.size());
+		try {
+			for (ImageHolder reference : m_references) {
+				Debug.print("\t");
+				Debug.print(reference.m_name);
+				Debug.println();
+			}
+		} catch (Throwable e) {
+		}
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/ImageImageDescriptor.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/ImageImageDescriptor.java
index 3025d8113..3eeb4c60b 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/ImageImageDescriptor.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/ImageImageDescriptor.java
@@ -21,24 +21,24 @@
  * @coverage core.ui
  */
 public final class ImageImageDescriptor extends ImageDescriptor {
-  private final Image m_Image;
+	private final Image m_Image;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ImageImageDescriptor(Image image) {
-    m_Image = image;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ImageImageDescriptor(Image image) {
+		m_Image = image;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ImageDescriptor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public ImageData getImageData() {
-    return m_Image == null ? null : m_Image.getImageData();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ImageDescriptor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public ImageData getImageData() {
+		return m_Image == null ? null : m_Image.getImageData();
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/ImageUtils.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/ImageUtils.java
index 26ae8b223..62cb98871 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/ImageUtils.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/ImageUtils.java
@@ -39,171 +39,171 @@
  * @coverage core.ui
  */
 public final class ImageUtils {
-  /**
-   * @return the PNG bytes of SWT {@link Image}.
-   */
-  public static byte[] getBytesPNG(Image image) throws IOException {
-    ImageLoader imageLoader = new ImageLoader();
-    imageLoader.data = new ImageData[]{image.getImageData()};
-    ByteArrayOutputStream baos = new ByteArrayOutputStream();
-    imageLoader.save(baos, SWT.IMAGE_PNG);
-    return baos.toByteArray();
-  }
+	/**
+	 * @return the PNG bytes of SWT {@link Image}.
+	 */
+	public static byte[] getBytesPNG(Image image) throws IOException {
+		ImageLoader imageLoader = new ImageLoader();
+		imageLoader.data = new ImageData[]{image.getImageData()};
+		ByteArrayOutputStream baos = new ByteArrayOutputStream();
+		imageLoader.save(baos, SWT.IMAGE_PNG);
+		return baos.toByteArray();
+	}
 
-  /**
-   * @return the SWT {@link Image} for AWT one.
-   */
-  public static Image convertToSWT(final java.awt.Image awtImage) {
-    return ExecutionUtils.runObject(() -> {
-      BufferedImage bufferedImage = getBufferedImage(awtImage);
-      ByteArrayOutputStream os = new ByteArrayOutputStream();
-      ImageIO.write(bufferedImage, "PNG", os);
-      return new Image(null, new ImageData(new ByteArrayInputStream(os.toByteArray())));
-    });
-  }
+	/**
+	 * @return the SWT {@link Image} for AWT one.
+	 */
+	public static Image convertToSWT(final java.awt.Image awtImage) {
+		return ExecutionUtils.runObject(() -> {
+			BufferedImage bufferedImage = getBufferedImage(awtImage);
+			ByteArrayOutputStream os = new ByteArrayOutputStream();
+			ImageIO.write(bufferedImage, "PNG", os);
+			return new Image(null, new ImageData(new ByteArrayInputStream(os.toByteArray())));
+		});
+	}
 
-  /**
-   * @return the {@link BufferedImage} with same content as given {@link java.awt.Image}.
-   */
-  private static BufferedImage getBufferedImage(java.awt.Image image) {
-    BufferedImage bufferedImage;
-    if (image instanceof BufferedImage) {
-      bufferedImage = (BufferedImage) image;
-    } else {
-      waitForImage(image);
-      // prepare dimensions
-      int w = image.getWidth(null);
-      int h = image.getHeight(null);
-      // draw into BufferedImage
-      if (w == -1 && h == -1) {
-        // Buffered image does not allow these sizes
-        w = 32;
-        h = 32;
-      }
-      bufferedImage = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
-      Graphics2D g2 = bufferedImage.createGraphics();
-      g2.drawImage(image, 0, 0, null);
-      // done
-      g2.dispose();
-    }
-    return bufferedImage;
-  }
+	/**
+	 * @return the {@link BufferedImage} with same content as given {@link java.awt.Image}.
+	 */
+	private static BufferedImage getBufferedImage(java.awt.Image image) {
+		BufferedImage bufferedImage;
+		if (image instanceof BufferedImage) {
+			bufferedImage = (BufferedImage) image;
+		} else {
+			waitForImage(image);
+			// prepare dimensions
+			int w = image.getWidth(null);
+			int h = image.getHeight(null);
+			// draw into BufferedImage
+			if (w == -1 && h == -1) {
+				// Buffered image does not allow these sizes
+				w = 32;
+				h = 32;
+			}
+			bufferedImage = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
+			Graphics2D g2 = bufferedImage.createGraphics();
+			g2.drawImage(image, 0, 0, null);
+			// done
+			g2.dispose();
+		}
+		return bufferedImage;
+	}
 
-  /**
-   * Waits until image is fully loaded, so ready for drawing.
-   */
-  private static void waitForImage(java.awt.Image image) {
-    BufferedImage bufferedImage = new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB);
-    Graphics2D g2 = bufferedImage.createGraphics();
-    // prepare observer
-    final Object done = new Object();
-    ImageObserver imageObserver = (img, flags, x, y, width, height) -> {
-      if (flags < ImageObserver.ALLBITS) {
-        return true;
-      } else {
-        synchronized (done) {
-          done.notify();
-        }
-        return false;
-      }
-    };
-    // draw Image with wait
-    synchronized (done) {
-      boolean completelyLoaded = g2.drawImage(image, 0, 0, imageObserver);
-      if (!completelyLoaded) {
-        while (true) {
-          try {
-            done.wait(0);
-            break;
-          } catch (InterruptedException e) {
-          }
-        }
-      }
-    }
-    // clean up
-    g2.dispose();
-  }
+	/**
+	 * Waits until image is fully loaded, so ready for drawing.
+	 */
+	private static void waitForImage(java.awt.Image image) {
+		BufferedImage bufferedImage = new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB);
+		Graphics2D g2 = bufferedImage.createGraphics();
+		// prepare observer
+		final Object done = new Object();
+		ImageObserver imageObserver = (img, flags, x, y, width, height) -> {
+			if (flags < ImageObserver.ALLBITS) {
+				return true;
+			} else {
+				synchronized (done) {
+					done.notify();
+				}
+				return false;
+			}
+		};
+		// draw Image with wait
+		synchronized (done) {
+			boolean completelyLoaded = g2.drawImage(image, 0, 0, imageObserver);
+			if (!completelyLoaded) {
+				while (true) {
+					try {
+						done.wait(0);
+						break;
+					} catch (InterruptedException e) {
+					}
+				}
+			}
+		}
+		// clean up
+		g2.dispose();
+	}
 
-  /**
-   * @return the SWT {@link Image} for AWT icon.
-   */
-  public static Image convertToSWT(javax.swing.Icon icon) {
-    // prepare Swing image from Icon
-    BufferedImage awtImage;
-    {
-      int width = Math.max(1, icon.getIconWidth());
-      int height = Math.max(1, icon.getIconHeight());
-      awtImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
-      Graphics2D graphics2D = awtImage.createGraphics();
-      icon.paintIcon(null, graphics2D, 0, 0);
-      graphics2D.dispose();
-    }
-    // convert to SWT Image
-    return convertToSWT(awtImage);
-  }
+	/**
+	 * @return the SWT {@link Image} for AWT icon.
+	 */
+	public static Image convertToSWT(javax.swing.Icon icon) {
+		// prepare Swing image from Icon
+		BufferedImage awtImage;
+		{
+			int width = Math.max(1, icon.getIconWidth());
+			int height = Math.max(1, icon.getIconHeight());
+			awtImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
+			Graphics2D graphics2D = awtImage.createGraphics();
+			icon.paintIcon(null, graphics2D, 0, 0);
+			graphics2D.dispose();
+		}
+		// convert to SWT Image
+		return convertToSWT(awtImage);
+	}
 
-  public static BufferedImage convertToAWT(ImageData data) {
-    ColorModel colorModel = null;
-    PaletteData palette = data.palette;
-    if (palette.isDirect) {
-      colorModel = new DirectColorModel(data.depth,
-          palette.redMask,
-          palette.greenMask,
-          palette.blueMask,
-          data.alphaData == null ? 0 : 0xff000000);
-      BufferedImage bufferedImage = new BufferedImage(colorModel,
-          colorModel.createCompatibleWritableRaster(data.width, data.height),
-          false,
-          null);
-      WritableRaster raster = bufferedImage.getRaster();
-      int[] pixelArray = new int[4];
-      for (int y = 0; y < data.height; y++) {
-        for (int x = 0; x < data.width; x++) {
-          int pixel = data.getPixel(x, y);
-          RGB rgb = palette.getRGB(pixel);
-          pixelArray[0] = rgb.red;
-          pixelArray[1] = rgb.green;
-          pixelArray[2] = rgb.blue;
-          if (data.alphaData != null) {
-            pixelArray[3] = data.getAlpha(x, y);
-          } else {
-            pixelArray[3] = 0xff;
-          }
-          raster.setPixels(x, y, 1, 1, pixelArray);
-        }
-      }
-      return bufferedImage;
-    } else {
-      RGB[] rgbs = palette.getRGBs();
-      byte[] red = new byte[rgbs.length];
-      byte[] green = new byte[rgbs.length];
-      byte[] blue = new byte[rgbs.length];
-      for (int i = 0; i < rgbs.length; i++) {
-        RGB rgb = rgbs[i];
-        red[i] = (byte) rgb.red;
-        green[i] = (byte) rgb.green;
-        blue[i] = (byte) rgb.blue;
-      }
-      if (data.transparentPixel != -1) {
-        colorModel =
-            new IndexColorModel(data.depth, rgbs.length, red, green, blue, data.transparentPixel);
-      } else {
-        colorModel = new IndexColorModel(data.depth, rgbs.length, red, green, blue);
-      }
-      BufferedImage bufferedImage = new BufferedImage(colorModel,
-          colorModel.createCompatibleWritableRaster(data.width, data.height),
-          false,
-          null);
-      WritableRaster raster = bufferedImage.getRaster();
-      int[] pixelArray = new int[1];
-      for (int y = 0; y < data.height; y++) {
-        for (int x = 0; x < data.width; x++) {
-          int pixel = data.getPixel(x, y);
-          pixelArray[0] = pixel;
-          raster.setPixel(x, y, pixelArray);
-        }
-      }
-      return bufferedImage;
-    }
-  }
+	public static BufferedImage convertToAWT(ImageData data) {
+		ColorModel colorModel = null;
+		PaletteData palette = data.palette;
+		if (palette.isDirect) {
+			colorModel = new DirectColorModel(data.depth,
+					palette.redMask,
+					palette.greenMask,
+					palette.blueMask,
+					data.alphaData == null ? 0 : 0xff000000);
+			BufferedImage bufferedImage = new BufferedImage(colorModel,
+					colorModel.createCompatibleWritableRaster(data.width, data.height),
+					false,
+					null);
+			WritableRaster raster = bufferedImage.getRaster();
+			int[] pixelArray = new int[4];
+			for (int y = 0; y < data.height; y++) {
+				for (int x = 0; x < data.width; x++) {
+					int pixel = data.getPixel(x, y);
+					RGB rgb = palette.getRGB(pixel);
+					pixelArray[0] = rgb.red;
+					pixelArray[1] = rgb.green;
+					pixelArray[2] = rgb.blue;
+					if (data.alphaData != null) {
+						pixelArray[3] = data.getAlpha(x, y);
+					} else {
+						pixelArray[3] = 0xff;
+					}
+					raster.setPixels(x, y, 1, 1, pixelArray);
+				}
+			}
+			return bufferedImage;
+		} else {
+			RGB[] rgbs = palette.getRGBs();
+			byte[] red = new byte[rgbs.length];
+			byte[] green = new byte[rgbs.length];
+			byte[] blue = new byte[rgbs.length];
+			for (int i = 0; i < rgbs.length; i++) {
+				RGB rgb = rgbs[i];
+				red[i] = (byte) rgb.red;
+				green[i] = (byte) rgb.green;
+				blue[i] = (byte) rgb.blue;
+			}
+			if (data.transparentPixel != -1) {
+				colorModel =
+						new IndexColorModel(data.depth, rgbs.length, red, green, blue, data.transparentPixel);
+			} else {
+				colorModel = new IndexColorModel(data.depth, rgbs.length, red, green, blue);
+			}
+			BufferedImage bufferedImage = new BufferedImage(colorModel,
+					colorModel.createCompatibleWritableRaster(data.width, data.height),
+					false,
+					null);
+			WritableRaster raster = bufferedImage.getRaster();
+			int[] pixelArray = new int[1];
+			for (int y = 0; y < data.height; y++) {
+				for (int x = 0; x < data.width; x++) {
+					int pixel = data.getPixel(x, y);
+					pixelArray[0] = pixel;
+					raster.setPixel(x, y, pixelArray);
+				}
+			}
+			return bufferedImage;
+		}
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/MenuIntersector.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/MenuIntersector.java
index 00c4c0b48..81fd239a5 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/MenuIntersector.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/MenuIntersector.java
@@ -34,318 +34,318 @@
  * @coverage core.ui
  */
 public class MenuIntersector {
-  private List<IMenuElement> m_elements;
+	private List<IMenuElement> m_elements;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Merge Menu
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Merge {@link List} of <code>menus</code> and add result to <code>mainMenu</code>.
-   */
-  public static void merge(IMenuManager mainMenu, List<IMenuManager> menus) {
-    MenuIntersector intersector = new MenuIntersector();
-    for (IMenuManager menu : menus) {
-      intersector.merge(menu);
-    }
-    intersector.addToMenu(mainMenu);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Merge Menu
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Merge {@link List} of <code>menus</code> and add result to <code>mainMenu</code>.
+	 */
+	public static void merge(IMenuManager mainMenu, List<IMenuManager> menus) {
+		MenuIntersector intersector = new MenuIntersector();
+		for (IMenuManager menu : menus) {
+			intersector.merge(menu);
+		}
+		intersector.addToMenu(mainMenu);
+	}
 
-  /**
-   * Add given <code>menu</code> to merge.
-   */
-  public void merge(IMenuManager menu) {
-    IContributionItem[] items = menu.getItems();
-    if (m_elements == null) {
-      m_elements = Lists.newArrayList();
-      for (IContributionItem item : items) {
-        // create wrapper's
-        if (SeparatorElement.accept(item)) {
-          m_elements.add(new SeparatorElement(item));
-        } else if (MenuElement.accept(item)) {
-          m_elements.add(new MenuElement(item));
-        } else if (MenuItemElement.accept(item)) {
-          m_elements.add(new MenuItemElement(item));
-        }
-      }
-    } else {
-      for (Iterator<IMenuElement> I = m_elements.iterator(); I.hasNext();) {
-        IMenuElement element = I.next();
-        // merge menu
-        if (!element.incorporate(menu)) {
-          I.remove();
-        }
-      }
-    }
-  }
+	/**
+	 * Add given <code>menu</code> to merge.
+	 */
+	public void merge(IMenuManager menu) {
+		IContributionItem[] items = menu.getItems();
+		if (m_elements == null) {
+			m_elements = Lists.newArrayList();
+			for (IContributionItem item : items) {
+				// create wrapper's
+				if (SeparatorElement.accept(item)) {
+					m_elements.add(new SeparatorElement(item));
+				} else if (MenuElement.accept(item)) {
+					m_elements.add(new MenuElement(item));
+				} else if (MenuItemElement.accept(item)) {
+					m_elements.add(new MenuItemElement(item));
+				}
+			}
+		} else {
+			for (Iterator<IMenuElement> I = m_elements.iterator(); I.hasNext();) {
+				IMenuElement element = I.next();
+				// merge menu
+				if (!element.incorporate(menu)) {
+					I.remove();
+				}
+			}
+		}
+	}
 
-  /**
-   * Add result of merge to given <code>menu</code>.
-   */
-  public void addToMenu(IMenuManager menu) {
-    for (IMenuElement element : m_elements) {
-      element.addToMenu(menu);
-    }
-  }
+	/**
+	 * Add result of merge to given <code>menu</code>.
+	 */
+	public void addToMenu(IMenuManager menu) {
+		for (IMenuElement element : m_elements) {
+			element.addToMenu(menu);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Internal
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Any menu item wrapper.
-   */
-  private static interface IMenuElement {
-    /**
-     * Incorporate a menu in this instance if it matches.
-     */
-    boolean incorporate(IMenuManager menu);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Internal
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Any menu item wrapper.
+	 */
+	private static interface IMenuElement {
+		/**
+		 * Incorporate a menu in this instance if it matches.
+		 */
+		boolean incorporate(IMenuManager menu);
 
-    /**
-     * Add wrapped items to given <code>menu</code>.
-     */
-    void addToMenu(IMenuManager menu);
-  }
-  /**
-   * Abstract wrapper for menu and menu items.
-   */
-  private static abstract class AbstractMenuElement implements IMenuElement {
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // IMenuElement
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public final boolean incorporate(IMenuManager menu) {
-      IContributionItem[] items = menu.getItems();
-      for (int i = 0; i < items.length; ++i) {
-        IContributionItem item = items[i];
-        // skip separator's
-        if (SeparatorElement.accept(item)) {
-          continue;
-        }
-        // merge
-        if (incorporate(item)) {
-          return true;
-        }
-      }
-      return false;
-    }
+		/**
+		 * Add wrapped items to given <code>menu</code>.
+		 */
+		void addToMenu(IMenuManager menu);
+	}
+	/**
+	 * Abstract wrapper for menu and menu items.
+	 */
+	private static abstract class AbstractMenuElement implements IMenuElement {
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// IMenuElement
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public final boolean incorporate(IMenuManager menu) {
+			IContributionItem[] items = menu.getItems();
+			for (int i = 0; i < items.length; ++i) {
+				IContributionItem item = items[i];
+				// skip separator's
+				if (SeparatorElement.accept(item)) {
+					continue;
+				}
+				// merge
+				if (incorporate(item)) {
+					return true;
+				}
+			}
+			return false;
+		}
 
-    /**
-     * Incorporate a menu item in this instance if it matches.
-     */
-    protected abstract boolean incorporate(IContributionItem item);
-  }
-  /**
-   * A wrapper for a menu.
-   */
-  private static class MenuElement extends AbstractMenuElement {
-    private final MenuIntersector m_intersector = new MenuIntersector();
-    private String m_menuTitle;
+		/**
+		 * Incorporate a menu item in this instance if it matches.
+		 */
+		protected abstract boolean incorporate(IContributionItem item);
+	}
+	/**
+	 * A wrapper for a menu.
+	 */
+	private static class MenuElement extends AbstractMenuElement {
+		private final MenuIntersector m_intersector = new MenuIntersector();
+		private String m_menuTitle;
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public MenuElement(IContributionItem item) {
-      incorporate(item);
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public MenuElement(IContributionItem item) {
+			incorporate(item);
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // AbstractMenuElement
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    protected boolean incorporate(IContributionItem item) {
-      if (accept(item)) {
-        MenuManager menu = (MenuManager) item;
-        // first add
-        if (m_menuTitle == null) {
-          m_menuTitle = menu.getMenuText();
-          m_intersector.merge(menu);
-          return true;
-        }
-        // add equals
-        if (m_menuTitle.equals(menu.getMenuText())) {
-          m_intersector.merge(menu);
-          return true;
-        }
-      }
-      return false;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// AbstractMenuElement
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		protected boolean incorporate(IContributionItem item) {
+			if (accept(item)) {
+				MenuManager menu = (MenuManager) item;
+				// first add
+				if (m_menuTitle == null) {
+					m_menuTitle = menu.getMenuText();
+					m_intersector.merge(menu);
+					return true;
+				}
+				// add equals
+				if (m_menuTitle.equals(menu.getMenuText())) {
+					m_intersector.merge(menu);
+					return true;
+				}
+			}
+			return false;
+		}
 
-    /**
-     * @return <code>true</code> if given <code>item</code> is {@link MenuManager}.
-     */
-    public static boolean accept(IContributionItem item) {
-      return item instanceof MenuManager;
-    }
+		/**
+		 * @return <code>true</code> if given <code>item</code> is {@link MenuManager}.
+		 */
+		public static boolean accept(IContributionItem item) {
+			return item instanceof MenuManager;
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // IMenuElement
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public void addToMenu(IMenuManager menu) {
-      // create sub menu
-      MenuManager subMenu = new MenuManager(m_menuTitle);
-      m_intersector.addToMenu(subMenu);
-      // add to parent
-      if (!subMenu.isEmpty()) {
-        menu.add(subMenu);
-      }
-    }
-  }
-  /**
-   * A wrapper for a {@link IAction}.
-   */
-  private static class MenuItemElement extends AbstractMenuElement {
-    private final Collection<IAction> m_actions = Sets.newHashSet();
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// IMenuElement
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public void addToMenu(IMenuManager menu) {
+			// create sub menu
+			MenuManager subMenu = new MenuManager(m_menuTitle);
+			m_intersector.addToMenu(subMenu);
+			// add to parent
+			if (!subMenu.isEmpty()) {
+				menu.add(subMenu);
+			}
+		}
+	}
+	/**
+	 * A wrapper for a {@link IAction}.
+	 */
+	private static class MenuItemElement extends AbstractMenuElement {
+		private final Collection<IAction> m_actions = Sets.newHashSet();
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public MenuItemElement(IContributionItem item) {
-      incorporate(item);
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public MenuItemElement(IContributionItem item) {
+			incorporate(item);
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // AbstractMenuElement
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    protected boolean incorporate(IContributionItem item) {
-      if (accept(item)) {
-        // prepare actions
-        ActionContributionItem actionItem = (ActionContributionItem) item;
-        IAction action = actionItem.getAction();
-        // first add
-        if (m_actions.isEmpty()) {
-          m_actions.add(action);
-          return true;
-        }
-        IAction original = getAction();
-        // add if "look" equals
-        if (!action.getText().equals(original.getText())) {
-          return false;
-        }
-        if (action.getStyle() != original.getStyle()) {
-          return false;
-        }
-        // add next "look" action
-        if (!(action instanceof IActionSingleton)) {
-          m_actions.add(action);
-        }
-        return true;
-      }
-      return false;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// AbstractMenuElement
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		protected boolean incorporate(IContributionItem item) {
+			if (accept(item)) {
+				// prepare actions
+				ActionContributionItem actionItem = (ActionContributionItem) item;
+				IAction action = actionItem.getAction();
+				// first add
+				if (m_actions.isEmpty()) {
+					m_actions.add(action);
+					return true;
+				}
+				IAction original = getAction();
+				// add if "look" equals
+				if (!action.getText().equals(original.getText())) {
+					return false;
+				}
+				if (action.getStyle() != original.getStyle()) {
+					return false;
+				}
+				// add next "look" action
+				if (!(action instanceof IActionSingleton)) {
+					m_actions.add(action);
+				}
+				return true;
+			}
+			return false;
+		}
 
-    /**
-     * @return first wrapped action.
-     */
-    private IAction getAction() {
-      return m_actions.iterator().next();
-    }
+		/**
+		 * @return first wrapped action.
+		 */
+		private IAction getAction() {
+			return m_actions.iterator().next();
+		}
 
-    /**
-     * @return <code>true</code> if given <code>item</code> is {@link IAction}.
-     */
-    public static boolean accept(IContributionItem item) {
-      return item instanceof ActionContributionItem;
-    }
+		/**
+		 * @return <code>true</code> if given <code>item</code> is {@link IAction}.
+		 */
+		public static boolean accept(IContributionItem item) {
+			return item instanceof ActionContributionItem;
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // IMenuElement
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public void addToMenu(IMenuManager menu) {
-      IAction original = getAction();
-      // create "call wrapper" action
-      IAction action = new Action(original.getText(), original.getStyle()) {
-        @Override
-        public void runWithEvent(Event event) {
-          updateChecked();
-          for (IAction innerAction : m_actions) {
-            innerAction.runWithEvent(event);
-          }
-        }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// IMenuElement
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public void addToMenu(IMenuManager menu) {
+			IAction original = getAction();
+			// create "call wrapper" action
+			IAction action = new Action(original.getText(), original.getStyle()) {
+				@Override
+				public void runWithEvent(Event event) {
+					updateChecked();
+					for (IAction innerAction : m_actions) {
+						innerAction.runWithEvent(event);
+					}
+				}
 
-        @Override
-        public void run() {
-          updateChecked();
-          for (IAction innerAction : m_actions) {
-            innerAction.run();
-          }
-        }
+				@Override
+				public void run() {
+					updateChecked();
+					for (IAction innerAction : m_actions) {
+						innerAction.run();
+					}
+				}
 
-        private void updateChecked() {
-          for (IAction innerAction : m_actions) {
-            innerAction.setChecked(isChecked());
-          }
-        }
-      };
-      // calculate checked
-      boolean checked = true;
-      for (IAction innerAction : m_actions) {
-        checked &= innerAction.isChecked();
-      }
-      // fill action properties
-      action.setChecked(checked);
-      action.setImageDescriptor(original.getImageDescriptor());
-      action.setHoverImageDescriptor(original.getHoverImageDescriptor());
-      action.setDisabledImageDescriptor(original.getDisabledImageDescriptor());
-      action.setEnabled(original.isEnabled());
-      // add to menu
-      menu.add(action);
-    }
-  }
-  /**
-   * A wrapper for a marker separating menu items.
-   */
-  private static class SeparatorElement implements IMenuElement {
-    private final IContributionItem m_item;
+				private void updateChecked() {
+					for (IAction innerAction : m_actions) {
+						innerAction.setChecked(isChecked());
+					}
+				}
+			};
+			// calculate checked
+			boolean checked = true;
+			for (IAction innerAction : m_actions) {
+				checked &= innerAction.isChecked();
+			}
+			// fill action properties
+			action.setChecked(checked);
+			action.setImageDescriptor(original.getImageDescriptor());
+			action.setHoverImageDescriptor(original.getHoverImageDescriptor());
+			action.setDisabledImageDescriptor(original.getDisabledImageDescriptor());
+			action.setEnabled(original.isEnabled());
+			// add to menu
+			menu.add(action);
+		}
+	}
+	/**
+	 * A wrapper for a marker separating menu items.
+	 */
+	private static class SeparatorElement implements IMenuElement {
+		private final IContributionItem m_item;
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public SeparatorElement(IContributionItem item) {
-      m_item = item;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public SeparatorElement(IContributionItem item) {
+			m_item = item;
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // IMenuElement
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public boolean incorporate(IMenuManager menu) {
-      return true;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// IMenuElement
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public boolean incorporate(IMenuManager menu) {
+			return true;
+		}
 
-    @Override
-    public void addToMenu(IMenuManager menu) {
-      menu.add(m_item);
-    }
+		@Override
+		public void addToMenu(IMenuManager menu) {
+			menu.add(m_item);
+		}
 
-    /**
-     * @return <code>true</code> if given <code>item</code> is separator.
-     */
-    public static boolean accept(IContributionItem item) {
-      return item.isSeparator() || item.isGroupMarker();
-    }
-  }
+		/**
+		 * @return <code>true</code> if given <code>item</code> is separator.
+		 */
+		public static boolean accept(IContributionItem item) {
+			return item.isSeparator() || item.isGroupMarker();
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/MenuManagerEx.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/MenuManagerEx.java
index 9adbd4491..32f8b4950 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/MenuManagerEx.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/MenuManagerEx.java
@@ -22,54 +22,54 @@
  * @coverage core.ui
  */
 public class MenuManagerEx extends MenuManager {
-  private Image m_image;
+	private Image m_image;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public MenuManagerEx() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public MenuManagerEx() {
+	}
 
-  public MenuManagerEx(String text) {
-    super(text);
-  }
+	public MenuManagerEx(String text) {
+		super(text);
+	}
 
-  public MenuManagerEx(String text, String id) {
-    super(text, id);
-  }
+	public MenuManagerEx(String text, String id) {
+		super(text, id);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link Image} for this {@link MenuItem}.
-   */
-  public Image getImage() {
-    return m_image;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link Image} for this {@link MenuItem}.
+	 */
+	public Image getImage() {
+		return m_image;
+	}
 
-  /**
-   * Sets the {@link Image} for this {@link MenuItem}.
-   */
-  public void setImage(Image image) {
-    m_image = image;
-  }
+	/**
+	 * Sets the {@link Image} for this {@link MenuItem}.
+	 */
+	public void setImage(Image image) {
+		m_image = image;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Fill
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void fill(Menu parent, int index) {
-    super.fill(parent, index);
-    // set image for menu manager's item
-    index = parent.getItemCount() - 1;
-    MenuItem menuItem = parent.getItem(index);
-    menuItem.setImage(m_image);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Fill
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void fill(Menu parent, int index) {
+		super.fill(parent, index);
+		// set image for menu manager's item
+		index = parent.getItemCount() - 1;
+		MenuItem menuItem = parent.getItem(index);
+		menuItem.setImage(m_image);
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/PixelConverter.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/PixelConverter.java
index e7dff27b2..6bb50e8d8 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/PixelConverter.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/PixelConverter.java
@@ -23,50 +23,50 @@
  * @author scheglov_ke
  */
 public class PixelConverter {
-  private final FontMetrics fFontMetrics;
+	private final FontMetrics fFontMetrics;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public PixelConverter(Control control) {
-    GC gc = new GC(control);
-    gc.setFont(control.getFont());
-    fFontMetrics = gc.getFontMetrics();
-    gc.dispose();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public PixelConverter(Control control) {
+		GC gc = new GC(control);
+		gc.setFont(control.getFont());
+		fFontMetrics = gc.getFontMetrics();
+		gc.dispose();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Conversions
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * see org.eclipse.jface.dialogs.DialogPage#convertHeightInCharsToPixels(int)
-   */
-  public int convertHeightInCharsToPixels(int chars) {
-    return Dialog.convertHeightInCharsToPixels(fFontMetrics, chars);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Conversions
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * see org.eclipse.jface.dialogs.DialogPage#convertHeightInCharsToPixels(int)
+	 */
+	public int convertHeightInCharsToPixels(int chars) {
+		return Dialog.convertHeightInCharsToPixels(fFontMetrics, chars);
+	}
 
-  /**
-   * see org.eclipse.jface.dialogs.DialogPage#convertHorizontalDLUsToPixels(int)
-   */
-  public int convertHorizontalDLUsToPixels(int dlus) {
-    return Dialog.convertHorizontalDLUsToPixels(fFontMetrics, dlus);
-  }
+	/**
+	 * see org.eclipse.jface.dialogs.DialogPage#convertHorizontalDLUsToPixels(int)
+	 */
+	public int convertHorizontalDLUsToPixels(int dlus) {
+		return Dialog.convertHorizontalDLUsToPixels(fFontMetrics, dlus);
+	}
 
-  /**
-   * see org.eclipse.jface.dialogs.DialogPage#convertVerticalDLUsToPixels(int)
-   */
-  public int convertVerticalDLUsToPixels(int dlus) {
-    return Dialog.convertVerticalDLUsToPixels(fFontMetrics, dlus);
-  }
+	/**
+	 * see org.eclipse.jface.dialogs.DialogPage#convertVerticalDLUsToPixels(int)
+	 */
+	public int convertVerticalDLUsToPixels(int dlus) {
+		return Dialog.convertVerticalDLUsToPixels(fFontMetrics, dlus);
+	}
 
-  /**
-   * see org.eclipse.jface.dialogs.DialogPage#convertWidthInCharsToPixels(int)
-   */
-  public int convertWidthInCharsToPixels(int chars) {
-    return Dialog.convertWidthInCharsToPixels(fFontMetrics, chars);
-  }
+	/**
+	 * see org.eclipse.jface.dialogs.DialogPage#convertWidthInCharsToPixels(int)
+	 */
+	public int convertWidthInCharsToPixels(int chars) {
+		return Dialog.convertWidthInCharsToPixels(fFontMetrics, chars);
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/SwtResourceManager.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/SwtResourceManager.java
index 244b44b46..747d7c030 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/SwtResourceManager.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/SwtResourceManager.java
@@ -47,427 +47,427 @@
  * @coverage core.ui
  */
 public class SwtResourceManager {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Color
-  //
-  ////////////////////////////////////////////////////////////////////////////
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Color
+	//
+	////////////////////////////////////////////////////////////////////////////
 	private static Map<RGB, Color> m_colorMap = new HashMap<>();
 
-  /**
-   * Returns the system {@link Color} matching the specific ID.
-   *
-   * @param systemColorID
-   *          the ID value for the color
-   * @return the system {@link Color} matching the specific ID
-   */
-  public static Color getColor(int systemColorID) {
-    Display display = Display.getCurrent();
-    return display.getSystemColor(systemColorID);
-  }
+	/**
+	 * Returns the system {@link Color} matching the specific ID.
+	 *
+	 * @param systemColorID
+	 *          the ID value for the color
+	 * @return the system {@link Color} matching the specific ID
+	 */
+	public static Color getColor(int systemColorID) {
+		Display display = Display.getCurrent();
+		return display.getSystemColor(systemColorID);
+	}
 
-  /**
-   * Returns a {@link Color} given its red, green and blue component values.
-   *
-   * @param r
-   *          the red component of the color
-   * @param g
-   *          the green component of the color
-   * @param b
-   *          the blue component of the color
-   * @return the {@link Color} matching the given red, green and blue component values
-   */
-  public static Color getColor(int r, int g, int b) {
-    return getColor(new RGB(r, g, b));
-  }
+	/**
+	 * Returns a {@link Color} given its red, green and blue component values.
+	 *
+	 * @param r
+	 *          the red component of the color
+	 * @param g
+	 *          the green component of the color
+	 * @param b
+	 *          the blue component of the color
+	 * @return the {@link Color} matching the given red, green and blue component values
+	 */
+	public static Color getColor(int r, int g, int b) {
+		return getColor(new RGB(r, g, b));
+	}
 
-  /**
-   * Returns a {@link Color} given its RGB value.
-   *
-   * @param rgb
-   *          the {@link RGB} value of the color
-   * @return the {@link Color} matching the RGB value
-   */
-  public static Color getColor(RGB rgb) {
-    Color color = m_colorMap.get(rgb);
-    if (color == null) {
-      Display display = Display.getCurrent();
-      color = new Color(display, rgb);
-      m_colorMap.put(rgb, color);
-    }
-    return color;
-  }
+	/**
+	 * Returns a {@link Color} given its RGB value.
+	 *
+	 * @param rgb
+	 *          the {@link RGB} value of the color
+	 * @return the {@link Color} matching the RGB value
+	 */
+	public static Color getColor(RGB rgb) {
+		Color color = m_colorMap.get(rgb);
+		if (color == null) {
+			Display display = Display.getCurrent();
+			color = new Color(display, rgb);
+			m_colorMap.put(rgb, color);
+		}
+		return color;
+	}
 
-  /**
-   * Dispose of all the cached {@link Color}'s.
-   */
-  public static void disposeColors() {
-    for (Color color : m_colorMap.values()) {
-      color.dispose();
-    }
-    m_colorMap.clear();
-  }
+	/**
+	 * Dispose of all the cached {@link Color}'s.
+	 */
+	public static void disposeColors() {
+		for (Color color : m_colorMap.values()) {
+			color.dispose();
+		}
+		m_colorMap.clear();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Image
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Maps image paths to images.
-   */
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Image
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Maps image paths to images.
+	 */
 	private static Map<String, Image> m_imageMap = new HashMap<>();
 	private static Map<Integer, Image> m_systemImageMap = new HashMap<>();
 
-  /**
-   * Get an <code>Image</code> from the provide SWT image constant.
-   *
-   * @param imageID
-   *          the SWT image constant.
-   * @return image the image.
-   */
-  public static Image getImage(final int imageID) {
-    final Image[] image = new Image[1];
-    image[0] = m_systemImageMap.get(imageID);
-    if (image[0] == null) {
-      final Display display = DesignerPlugin.getStandardDisplay();
-      display.syncExec(() -> image[0] = display.getSystemImage(imageID));
-      m_systemImageMap.put(imageID, image[0]);
-    }
-    return image[0];
-  }
+	/**
+	 * Get an <code>Image</code> from the provide SWT image constant.
+	 *
+	 * @param imageID
+	 *          the SWT image constant.
+	 * @return image the image.
+	 */
+	public static Image getImage(final int imageID) {
+		final Image[] image = new Image[1];
+		image[0] = m_systemImageMap.get(imageID);
+		if (image[0] == null) {
+			final Display display = DesignerPlugin.getStandardDisplay();
+			display.syncExec(() -> image[0] = display.getSystemImage(imageID));
+			m_systemImageMap.put(imageID, image[0]);
+		}
+		return image[0];
+	}
 
-  /**
-   * Returns an {@link Image} encoded by the specified {@link InputStream}.
-   *
-   * @param stream
-   *          the {@link InputStream} encoding the image data
-   * @return the {@link Image} encoded by the specified input stream
-   */
-  protected static Image getImage(InputStream stream) throws IOException {
-    try {
-      Display display = Display.getCurrent();
-      ImageData data = new ImageData(stream);
-      if (data.transparentPixel > 0) {
-        return new Image(display, data, data.getTransparencyMask());
-      }
-      return new Image(display, data);
-    } finally {
-      stream.close();
-    }
-  }
+	/**
+	 * Returns an {@link Image} encoded by the specified {@link InputStream}.
+	 *
+	 * @param stream
+	 *          the {@link InputStream} encoding the image data
+	 * @return the {@link Image} encoded by the specified input stream
+	 */
+	protected static Image getImage(InputStream stream) throws IOException {
+		try {
+			Display display = Display.getCurrent();
+			ImageData data = new ImageData(stream);
+			if (data.transparentPixel > 0) {
+				return new Image(display, data, data.getTransparencyMask());
+			}
+			return new Image(display, data);
+		} finally {
+			stream.close();
+		}
+	}
 
-  /**
-   * Returns an {@link Image} stored in the file at the specified path.
-   *
-   * @param path
-   *          the path to the image file
-   * @return the {@link Image} stored in the file at the specified path
-   */
-  public static Image getImage(String path) {
-    Image image = m_imageMap.get(path);
-    if (image == null) {
-      try {
-        image = getImage(new FileInputStream(path));
-        m_imageMap.put(path, image);
-      } catch (Exception e) {
-        image = getMissingImage();
-        m_imageMap.put(path, image);
-      }
-    }
-    return image;
-  }
+	/**
+	 * Returns an {@link Image} stored in the file at the specified path.
+	 *
+	 * @param path
+	 *          the path to the image file
+	 * @return the {@link Image} stored in the file at the specified path
+	 */
+	public static Image getImage(String path) {
+		Image image = m_imageMap.get(path);
+		if (image == null) {
+			try {
+				image = getImage(new FileInputStream(path));
+				m_imageMap.put(path, image);
+			} catch (Exception e) {
+				image = getMissingImage();
+				m_imageMap.put(path, image);
+			}
+		}
+		return image;
+	}
 
-  /**
-   * Returns an {@link Image} stored in the file at the specified path relative to the specified
-   * class.
-   *
-   * @param clazz
-   *          the {@link Class} relative to which to find the image
-   * @param path
-   *          the path to the image file, if starts with <code>'/'</code>
-   * @return the {@link Image} stored in the file at the specified path
-   */
-  public static Image getImage(Class<?> clazz, String path) {
-    String key = clazz.getName() + '|' + path;
-    Image image = m_imageMap.get(key);
-    if (image == null) {
-      try {
-        image = getImage(clazz.getResourceAsStream(path));
-        m_imageMap.put(key, image);
-      } catch (Exception e) {
-        image = getMissingImage();
-        m_imageMap.put(key, image);
-      }
-    }
-    return image;
-  }
+	/**
+	 * Returns an {@link Image} stored in the file at the specified path relative to the specified
+	 * class.
+	 *
+	 * @param clazz
+	 *          the {@link Class} relative to which to find the image
+	 * @param path
+	 *          the path to the image file, if starts with <code>'/'</code>
+	 * @return the {@link Image} stored in the file at the specified path
+	 */
+	public static Image getImage(Class<?> clazz, String path) {
+		String key = clazz.getName() + '|' + path;
+		Image image = m_imageMap.get(key);
+		if (image == null) {
+			try {
+				image = getImage(clazz.getResourceAsStream(path));
+				m_imageMap.put(key, image);
+			} catch (Exception e) {
+				image = getMissingImage();
+				m_imageMap.put(key, image);
+			}
+		}
+		return image;
+	}
 
-  private static final int MISSING_IMAGE_SIZE = 10;
+	private static final int MISSING_IMAGE_SIZE = 10;
 
-  /**
-   * @return the small {@link Image} that can be used as placeholder for missing image.
-   */
-  private static Image getMissingImage() {
-    Image image = new Image(Display.getCurrent(), MISSING_IMAGE_SIZE, MISSING_IMAGE_SIZE);
-    //
-    GC gc = new GC(image);
-    gc.setBackground(getColor(SWT.COLOR_RED));
-    gc.fillRectangle(0, 0, MISSING_IMAGE_SIZE, MISSING_IMAGE_SIZE);
-    gc.dispose();
-    //
-    return image;
-  }
+	/**
+	 * @return the small {@link Image} that can be used as placeholder for missing image.
+	 */
+	private static Image getMissingImage() {
+		Image image = new Image(Display.getCurrent(), MISSING_IMAGE_SIZE, MISSING_IMAGE_SIZE);
+		//
+		GC gc = new GC(image);
+		gc.setBackground(getColor(SWT.COLOR_RED));
+		gc.fillRectangle(0, 0, MISSING_IMAGE_SIZE, MISSING_IMAGE_SIZE);
+		gc.dispose();
+		//
+		return image;
+	}
 
-  /**
-   * Style constant for placing decorator image in top left corner of base image.
-   */
-  public static final int TOP_LEFT = 1;
-  /**
-   * Style constant for placing decorator image in top right corner of base image.
-   */
-  public static final int TOP_RIGHT = 2;
-  /**
-   * Style constant for placing decorator image in bottom left corner of base image.
-   */
-  public static final int BOTTOM_LEFT = 3;
-  /**
-   * Style constant for placing decorator image in bottom right corner of base image.
-   */
-  public static final int BOTTOM_RIGHT = 4;
-  /**
-   * Internal value.
-   */
-  protected static final int LAST_CORNER_KEY = 5;
-  /**
-   * Maps images to decorated images.
-   */
-  @SuppressWarnings("unchecked")
-  private static Map<Image, Map<Image, Image>>[] m_decoratedImageMap = new Map[LAST_CORNER_KEY];
+	/**
+	 * Style constant for placing decorator image in top left corner of base image.
+	 */
+	public static final int TOP_LEFT = 1;
+	/**
+	 * Style constant for placing decorator image in top right corner of base image.
+	 */
+	public static final int TOP_RIGHT = 2;
+	/**
+	 * Style constant for placing decorator image in bottom left corner of base image.
+	 */
+	public static final int BOTTOM_LEFT = 3;
+	/**
+	 * Style constant for placing decorator image in bottom right corner of base image.
+	 */
+	public static final int BOTTOM_RIGHT = 4;
+	/**
+	 * Internal value.
+	 */
+	protected static final int LAST_CORNER_KEY = 5;
+	/**
+	 * Maps images to decorated images.
+	 */
+	@SuppressWarnings("unchecked")
+	private static Map<Image, Map<Image, Image>>[] m_decoratedImageMap = new Map[LAST_CORNER_KEY];
 
-  /**
-   * Returns an {@link Image} composed of a base image decorated by another image.
-   *
-   * @param baseImage
-   *          the base {@link Image} that should be decorated
-   * @param decorator
-   *          the {@link Image} to decorate the base image
-   * @param corner
-   *          the corner to place decorator image
-   * @return the resulting decorated {@link Image}
-   */
-  public static Image decorateImage(final Image baseImage, final Image decorator, final int corner) {
-    if (corner <= 0 || corner >= LAST_CORNER_KEY) {
-      throw new IllegalArgumentException("Wrong decorate corner");
-    }
-    Map<Image, Map<Image, Image>> cornerDecoratedImageMap = m_decoratedImageMap[corner];
-    if (cornerDecoratedImageMap == null) {
-		cornerDecoratedImageMap = new HashMap<>();
-      m_decoratedImageMap[corner] = cornerDecoratedImageMap;
-    }
-    Map<Image, Image> decoratedMap = cornerDecoratedImageMap.get(baseImage);
-    if (decoratedMap == null) {
-		decoratedMap = new HashMap<>();
-      cornerDecoratedImageMap.put(baseImage, decoratedMap);
-    }
-    //
-    Image result = decoratedMap.get(decorator);
-    if (result == null) {
-      final Rectangle bib = baseImage.getBounds();
-      final Rectangle dib = decorator.getBounds();
-      final Point baseImageSize = new Point(bib.width, bib.height);
-      CompositeImageDescriptor compositImageDesc = new CompositeImageDescriptor() {
-        @Override
-        protected void drawCompositeImage(int width, int height) {
-          drawImage(baseImage.getImageData(), 0, 0);
-          if (corner == TOP_LEFT) {
-            drawImage(decorator.getImageData(), 0, 0);
-          } else if (corner == TOP_RIGHT) {
-            drawImage(decorator.getImageData(), bib.width - dib.width, 0);
-          } else if (corner == BOTTOM_LEFT) {
-            drawImage(decorator.getImageData(), 0, bib.height - dib.height);
-          } else if (corner == BOTTOM_RIGHT) {
-            drawImage(decorator.getImageData(), bib.width - dib.width, bib.height - dib.height);
-          }
-        }
+	/**
+	 * Returns an {@link Image} composed of a base image decorated by another image.
+	 *
+	 * @param baseImage
+	 *          the base {@link Image} that should be decorated
+	 * @param decorator
+	 *          the {@link Image} to decorate the base image
+	 * @param corner
+	 *          the corner to place decorator image
+	 * @return the resulting decorated {@link Image}
+	 */
+	public static Image decorateImage(final Image baseImage, final Image decorator, final int corner) {
+		if (corner <= 0 || corner >= LAST_CORNER_KEY) {
+			throw new IllegalArgumentException("Wrong decorate corner");
+		}
+		Map<Image, Map<Image, Image>> cornerDecoratedImageMap = m_decoratedImageMap[corner];
+		if (cornerDecoratedImageMap == null) {
+			cornerDecoratedImageMap = new HashMap<>();
+			m_decoratedImageMap[corner] = cornerDecoratedImageMap;
+		}
+		Map<Image, Image> decoratedMap = cornerDecoratedImageMap.get(baseImage);
+		if (decoratedMap == null) {
+			decoratedMap = new HashMap<>();
+			cornerDecoratedImageMap.put(baseImage, decoratedMap);
+		}
+		//
+		Image result = decoratedMap.get(decorator);
+		if (result == null) {
+			final Rectangle bib = baseImage.getBounds();
+			final Rectangle dib = decorator.getBounds();
+			final Point baseImageSize = new Point(bib.width, bib.height);
+			CompositeImageDescriptor compositImageDesc = new CompositeImageDescriptor() {
+				@Override
+				protected void drawCompositeImage(int width, int height) {
+					drawImage(baseImage.getImageData(), 0, 0);
+					if (corner == TOP_LEFT) {
+						drawImage(decorator.getImageData(), 0, 0);
+					} else if (corner == TOP_RIGHT) {
+						drawImage(decorator.getImageData(), bib.width - dib.width, 0);
+					} else if (corner == BOTTOM_LEFT) {
+						drawImage(decorator.getImageData(), 0, bib.height - dib.height);
+					} else if (corner == BOTTOM_RIGHT) {
+						drawImage(decorator.getImageData(), bib.width - dib.width, bib.height - dib.height);
+					}
+				}
 
-        @Override
-        protected Point getSize() {
-          return baseImageSize;
-        }
-      };
-      //
-      result = compositImageDesc.createImage();
-      decoratedMap.put(decorator, result);
-    }
-    return result;
-  }
+				@Override
+				protected Point getSize() {
+					return baseImageSize;
+				}
+			};
+			//
+			result = compositImageDesc.createImage();
+			decoratedMap.put(decorator, result);
+		}
+		return result;
+	}
 
-  /**
-   * Dispose all of the cached {@link Image}'s.
-   */
-  public static void disposeImages() {
-    // dispose loaded images
-    {
-      for (Image image : m_imageMap.values()) {
-        image.dispose();
-      }
-      m_imageMap.clear();
-    }
-    // dispose decorated images
-    for (int i = 0; i < m_decoratedImageMap.length; i++) {
-      Map<Image, Map<Image, Image>> cornerDecoratedImageMap = m_decoratedImageMap[i];
-      if (cornerDecoratedImageMap != null) {
-        for (Map<Image, Image> decoratedMap : cornerDecoratedImageMap.values()) {
-          for (Image decoratedImage : decoratedMap.values()) {
-            decoratedImage.dispose();
-          }
-          decoratedMap.clear();
-        }
-        cornerDecoratedImageMap.clear();
-      }
-    }
-  }
+	/**
+	 * Dispose all of the cached {@link Image}'s.
+	 */
+	public static void disposeImages() {
+		// dispose loaded images
+		{
+			for (Image image : m_imageMap.values()) {
+				image.dispose();
+			}
+			m_imageMap.clear();
+		}
+		// dispose decorated images
+		for (int i = 0; i < m_decoratedImageMap.length; i++) {
+			Map<Image, Map<Image, Image>> cornerDecoratedImageMap = m_decoratedImageMap[i];
+			if (cornerDecoratedImageMap != null) {
+				for (Map<Image, Image> decoratedMap : cornerDecoratedImageMap.values()) {
+					for (Image decoratedImage : decoratedMap.values()) {
+						decoratedImage.dispose();
+					}
+					decoratedMap.clear();
+				}
+				cornerDecoratedImageMap.clear();
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Font
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Maps font keys (constructed from font name, height, style, etc) to fonts.
-   */
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Font
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Maps font keys (constructed from font name, height, style, etc) to fonts.
+	 */
 	private static Map<String, Font> m_fontMap = new HashMap<>();
-  /**
-   * Maps {@link FontData} to {@link Font}.
-   */
+	/**
+	 * Maps {@link FontData} to {@link Font}.
+	 */
 	private static Map<FontData, Font> m_fontDataMap = new HashMap<>();
-  /**
-   * Maps fonts to their bold versions.
-   */
+	/**
+	 * Maps fonts to their bold versions.
+	 */
 	private static Map<Font, Font> m_fontToBoldFontMap = new HashMap<>();
 
-  /**
-   * @return the {@link Font} for given {@link FontData} array.
-   */
-  public static Font getFont(FontData[] fontDataArray) {
-    FontData fontData = fontDataArray[0];
-    Font font = m_fontDataMap.get(fontData);
-    if (font == null) {
-      font = new Font(null, fontDataArray);
-      m_fontDataMap.put(fontData, font);
-    }
-    return font;
-  }
+	/**
+	 * @return the {@link Font} for given {@link FontData} array.
+	 */
+	public static Font getFont(FontData[] fontDataArray) {
+		FontData fontData = fontDataArray[0];
+		Font font = m_fontDataMap.get(fontData);
+		if (font == null) {
+			font = new Font(null, fontDataArray);
+			m_fontDataMap.put(fontData, font);
+		}
+		return font;
+	}
 
-  /**
-   * Returns a {@link Font} based on its name, height and style.
-   *
-   * @param name
-   *          the name of the font
-   * @param height
-   *          the height of the font
-   * @param style
-   *          the style of the font
-   * @return {@link Font} The font matching the name, height and style
-   */
-  public static Font getFont(String name, int height, int style) {
-    return getFont(name, height, style, false, false);
-  }
+	/**
+	 * Returns a {@link Font} based on its name, height and style.
+	 *
+	 * @param name
+	 *          the name of the font
+	 * @param height
+	 *          the height of the font
+	 * @param style
+	 *          the style of the font
+	 * @return {@link Font} The font matching the name, height and style
+	 */
+	public static Font getFont(String name, int height, int style) {
+		return getFont(name, height, style, false, false);
+	}
 
-  /**
-   * Returns a {@link Font} based on its name, height and style. Windows-specific strikeout and
-   * underline flags are also supported.
-   *
-   * @param name
-   *          the name of the font
-   * @param size
-   *          the size of the font
-   * @param style
-   *          the style of the font
-   * @param strikeout
-   *          the strikeout flag (warning: Windows only)
-   * @param underline
-   *          the underline flag (warning: Windows only)
-   * @return {@link Font} The font matching the name, height, style, strikeout and underline
-   */
-  public static Font getFont(String name, int size, int style, boolean strikeout, boolean underline) {
-    String fontName = name + '|' + size + '|' + style + '|' + strikeout + '|' + underline;
-    Font font = m_fontMap.get(fontName);
-    if (font == null) {
-      FontData fontData = new FontData(name, size, style);
-      if (strikeout || underline) {
-        try {
-          Class<?> logFontClass = Class.forName("org.eclipse.swt.internal.win32.LOGFONT"); //$NON-NLS-1$
-          Object logFont = FontData.class.getField("data").get(fontData); //$NON-NLS-1$
-          if (logFont != null && logFontClass != null) {
-            if (strikeout) {
-              logFontClass.getField("lfStrikeOut").set(logFont, (byte) 1); //$NON-NLS-1$
-            }
-            if (underline) {
-              logFontClass.getField("lfUnderline").set(logFont, (byte) 1); //$NON-NLS-1$
-            }
-          }
-        } catch (Throwable e) {
-        }
-      }
-      font = new Font(Display.getCurrent(), fontData);
-      m_fontMap.put(fontName, font);
-    }
-    return font;
-  }
+	/**
+	 * Returns a {@link Font} based on its name, height and style. Windows-specific strikeout and
+	 * underline flags are also supported.
+	 *
+	 * @param name
+	 *          the name of the font
+	 * @param size
+	 *          the size of the font
+	 * @param style
+	 *          the style of the font
+	 * @param strikeout
+	 *          the strikeout flag (warning: Windows only)
+	 * @param underline
+	 *          the underline flag (warning: Windows only)
+	 * @return {@link Font} The font matching the name, height, style, strikeout and underline
+	 */
+	public static Font getFont(String name, int size, int style, boolean strikeout, boolean underline) {
+		String fontName = name + '|' + size + '|' + style + '|' + strikeout + '|' + underline;
+		Font font = m_fontMap.get(fontName);
+		if (font == null) {
+			FontData fontData = new FontData(name, size, style);
+			if (strikeout || underline) {
+				try {
+					Class<?> logFontClass = Class.forName("org.eclipse.swt.internal.win32.LOGFONT"); //$NON-NLS-1$
+					Object logFont = FontData.class.getField("data").get(fontData); //$NON-NLS-1$
+					if (logFont != null && logFontClass != null) {
+						if (strikeout) {
+							logFontClass.getField("lfStrikeOut").set(logFont, (byte) 1); //$NON-NLS-1$
+						}
+						if (underline) {
+							logFontClass.getField("lfUnderline").set(logFont, (byte) 1); //$NON-NLS-1$
+						}
+					}
+				} catch (Throwable e) {
+				}
+			}
+			font = new Font(Display.getCurrent(), fontData);
+			m_fontMap.put(fontName, font);
+		}
+		return font;
+	}
 
-  /**
-   * Returns a bold version of the given {@link Font}.
-   *
-   * @param baseFont
-   *          the {@link Font} for which a bold version is desired
-   * @return the bold version of the given {@link Font}
-   */
-  public static Font getBoldFont(Font baseFont) {
-    Font font = m_fontToBoldFontMap.get(baseFont);
-    if (font == null) {
-      FontData fontDatas[] = baseFont.getFontData();
-      FontData data = fontDatas[0];
-      font = new Font(Display.getCurrent(), data.getName(), data.getHeight(), SWT.BOLD);
-      m_fontToBoldFontMap.put(baseFont, font);
-    }
-    return font;
-  }
+	/**
+	 * Returns a bold version of the given {@link Font}.
+	 *
+	 * @param baseFont
+	 *          the {@link Font} for which a bold version is desired
+	 * @return the bold version of the given {@link Font}
+	 */
+	public static Font getBoldFont(Font baseFont) {
+		Font font = m_fontToBoldFontMap.get(baseFont);
+		if (font == null) {
+			FontData fontDatas[] = baseFont.getFontData();
+			FontData data = fontDatas[0];
+			font = new Font(Display.getCurrent(), data.getName(), data.getHeight(), SWT.BOLD);
+			m_fontToBoldFontMap.put(baseFont, font);
+		}
+		return font;
+	}
 
-  /**
-   * Dispose all of the cached {@link Font}'s.
-   */
-  public static void disposeFonts() {
-    // clear map: key -> font
-    for (Font font : m_fontMap.values()) {
-      font.dispose();
-    }
-    m_fontMap.clear();
-    // clear map: FontData -> font
-    for (Font font : m_fontDataMap.values()) {
-      font.dispose();
-    }
-    m_fontDataMap.clear();
-    // clear bold fonts
-    for (Font font : m_fontToBoldFontMap.values()) {
-      font.dispose();
-    }
-    m_fontToBoldFontMap.clear();
-  }
+	/**
+	 * Dispose all of the cached {@link Font}'s.
+	 */
+	public static void disposeFonts() {
+		// clear map: key -> font
+		for (Font font : m_fontMap.values()) {
+			font.dispose();
+		}
+		m_fontMap.clear();
+		// clear map: FontData -> font
+		for (Font font : m_fontDataMap.values()) {
+			font.dispose();
+		}
+		m_fontDataMap.clear();
+		// clear bold fonts
+		for (Font font : m_fontToBoldFontMap.values()) {
+			font.dispose();
+		}
+		m_fontToBoldFontMap.clear();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // General
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Dispose of cached objects and their underlying OS resources. This should only be called when
-   * the cached objects are no longer needed (e.g. on application shutdown).
-   */
-  public static void dispose() {
-    disposeColors();
-    disposeImages();
-    disposeFonts();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// General
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Dispose of cached objects and their underlying OS resources. This should only be called when
+	 * the cached objects are no longer needed (e.g. on application shutdown).
+	 */
+	public static void dispose() {
+		disposeColors();
+		disposeImages();
+		disposeFonts();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/TabFactory.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/TabFactory.java
index 8cea2f45d..1368a0c25 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/TabFactory.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/TabFactory.java
@@ -23,82 +23,82 @@
  * @author lobas_av
  */
 public class TabFactory {
-  private final TabItem m_item;
+	private final TabItem m_item;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private TabFactory(TabItem item) {
-    m_item = item;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private TabFactory(TabItem item) {
+		m_item = item;
+	}
 
-  /**
-   * Create new {@link TabFactory} with new {@link TabItem}.
-   */
-  public static TabFactory item(TabFolder folder) {
-    return item(folder, SWT.NONE);
-  }
+	/**
+	 * Create new {@link TabFactory} with new {@link TabItem}.
+	 */
+	public static TabFactory item(TabFolder folder) {
+		return item(folder, SWT.NONE);
+	}
 
-  /**
-   * Create new {@link TabFactory} with new {@link TabItem} use given <code>style</code>.
-   */
-  public static TabFactory item(TabFolder folder, int style) {
-    return new TabFactory(new TabItem(folder, style));
-  }
+	/**
+	 * Create new {@link TabFactory} with new {@link TabItem} use given <code>style</code>.
+	 */
+	public static TabFactory item(TabFolder folder, int style) {
+		return new TabFactory(new TabItem(folder, style));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets item text.
-   */
-  public TabFactory text(String text) {
-    m_item.setText(text);
-    return this;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets item text.
+	 */
+	public TabFactory text(String text) {
+		m_item.setText(text);
+		return this;
+	}
 
-  /**
-   * Sets item tooltip text.
-   */
-  public TabFactory tooltip(String text) {
-    m_item.setToolTipText(text);
-    return this;
-  }
+	/**
+	 * Sets item tooltip text.
+	 */
+	public TabFactory tooltip(String text) {
+		m_item.setToolTipText(text);
+		return this;
+	}
 
-  /**
-   * Sets item control.
-   */
-  public TabFactory control(Control control) {
-    m_item.setControl(control);
-    return this;
-  }
+	/**
+	 * Sets item control.
+	 */
+	public TabFactory control(Control control) {
+		m_item.setControl(control);
+		return this;
+	}
 
-  /**
-   * Fills {@link TabItem} with new {@link Composite} and returns this {@link Composite}.
-   */
-  public Composite composite() {
-    Composite composite = new Composite(m_item.getParent(), SWT.NONE);
-    m_item.setControl(composite);
-    return composite;
-  }
+	/**
+	 * Fills {@link TabItem} with new {@link Composite} and returns this {@link Composite}.
+	 */
+	public Composite composite() {
+		Composite composite = new Composite(m_item.getParent(), SWT.NONE);
+		m_item.setControl(composite);
+		return composite;
+	}
 
-  /**
-   * Sets item image.
-   */
-  public TabFactory image(Image value) {
-    m_item.setImage(value);
-    return this;
-  }
+	/**
+	 * Sets item image.
+	 */
+	public TabFactory image(Image value) {
+		m_item.setImage(value);
+		return this;
+	}
 
-  /**
-   * Sets item data.
-   */
-  public TabFactory data(Object value) {
-    m_item.setData(value);
-    return this;
-  }
+	/**
+	 * Sets item data.
+	 */
+	public TabFactory data(Object value) {
+		m_item.setData(value);
+		return this;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/TabFolderDecorator.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/TabFolderDecorator.java
index c7fa6c30c..7b13f7506 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/TabFolderDecorator.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/TabFolderDecorator.java
@@ -34,192 +34,192 @@
  * @coverage core.ui
  */
 public final class TabFolderDecorator {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Creation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Marks given {@link CTabFolder} as decorated.
-   */
-  public static void decorate(IWorkbenchPart hostPart, CTabFolder tabFolder) {
-    new TabFolderDecorator(hostPart, tabFolder);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Creation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Marks given {@link CTabFolder} as decorated.
+	 */
+	public static void decorate(IWorkbenchPart hostPart, CTabFolder tabFolder) {
+		new TabFolderDecorator(hostPart, tabFolder);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance fields
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final IWorkbenchPart m_hostPart;
-  private final CTabFolder m_tabFolder;
-  private boolean m_shellActive = true;
-  private final IPartListener m_partListener = new IPartListener() {
-    @Override
-    public void partActivated(IWorkbenchPart part) {
-      if (part == m_hostPart) {
-        updateColors();
-      }
-    }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance fields
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final IWorkbenchPart m_hostPart;
+	private final CTabFolder m_tabFolder;
+	private boolean m_shellActive = true;
+	private final IPartListener m_partListener = new IPartListener() {
+		@Override
+		public void partActivated(IWorkbenchPart part) {
+			if (part == m_hostPart) {
+				updateColors();
+			}
+		}
 
-    @Override
-    public void partDeactivated(IWorkbenchPart part) {
-      if (part == m_hostPart) {
-        updateColors();
-      }
-    }
+		@Override
+		public void partDeactivated(IWorkbenchPart part) {
+			if (part == m_hostPart) {
+				updateColors();
+			}
+		}
 
-    @Override
-    public void partBroughtToTop(IWorkbenchPart part) {
-    }
+		@Override
+		public void partBroughtToTop(IWorkbenchPart part) {
+		}
 
-    @Override
-    public void partClosed(IWorkbenchPart part) {
-    }
+		@Override
+		public void partClosed(IWorkbenchPart part) {
+		}
 
-    @Override
-    public void partOpened(IWorkbenchPart part) {
-    }
-  };
-  private final ShellListener m_shellListener = new ShellAdapter() {
-    @Override
-    public void shellActivated(ShellEvent e) {
-      m_shellActive = true;
-      updateColors();
-    }
+		@Override
+		public void partOpened(IWorkbenchPart part) {
+		}
+	};
+	private final ShellListener m_shellListener = new ShellAdapter() {
+		@Override
+		public void shellActivated(ShellEvent e) {
+			m_shellActive = true;
+			updateColors();
+		}
 
-    @Override
-    public void shellDeactivated(ShellEvent e) {
-      m_shellActive = false;
-      updateColors();
-    }
-  };
+		@Override
+		public void shellDeactivated(ShellEvent e) {
+			m_shellActive = false;
+			updateColors();
+		}
+	};
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private TabFolderDecorator(IWorkbenchPart hostPart, CTabFolder tabFolder) {
-    m_hostPart = hostPart;
-    m_tabFolder = tabFolder;
-    // add part listener
-    final IWorkbenchPage activePage = m_hostPart.getSite().getPage();
-    activePage.addPartListener(m_partListener);
-    // add Shell listener
-    final Shell shell = m_tabFolder.getShell();
-    shell.addShellListener(m_shellListener);
-    // add dispose listener to remove part/Shell listeners
-    m_tabFolder.addListener(SWT.Dispose, new Listener() {
-      @Override
-      public void handleEvent(Event event) {
-        activePage.removePartListener(m_partListener);
-        shell.removeShellListener(m_shellListener);
-      }
-    });
-    // set initial colors
-    updateColors();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private TabFolderDecorator(IWorkbenchPart hostPart, CTabFolder tabFolder) {
+		m_hostPart = hostPart;
+		m_tabFolder = tabFolder;
+		// add part listener
+		final IWorkbenchPage activePage = m_hostPart.getSite().getPage();
+		activePage.addPartListener(m_partListener);
+		// add Shell listener
+		final Shell shell = m_tabFolder.getShell();
+		shell.addShellListener(m_shellListener);
+		// add dispose listener to remove part/Shell listeners
+		m_tabFolder.addListener(SWT.Dispose, new Listener() {
+			@Override
+			public void handleEvent(Event event) {
+				activePage.removePartListener(m_partListener);
+				shell.removeShellListener(m_shellListener);
+			}
+		});
+		// set initial colors
+		updateColors();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Internal
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Updates colors depending if host {@link IWorkbenchPart} and {@link Shell} are active or not.
-   */
-  private void updateColors() {
-    if (m_hostPart.getSite().getPage().getActivePart() == m_hostPart) {
-      setActiveTabColors();
-    } else {
-      setInactiveTabColors();
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Internal
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Updates colors depending if host {@link IWorkbenchPart} and {@link Shell} are active or not.
+	 */
+	private void updateColors() {
+		if (m_hostPart.getSite().getPage().getActivePart() == m_hostPart) {
+			setActiveTabColors();
+		} else {
+			setInactiveTabColors();
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Colors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets the colors of the tab to the inactive tab colors.
-   */
-  private void setInactiveTabColors() {
-    setInactiveTabColors(m_tabFolder);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Colors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets the colors of the tab to the inactive tab colors.
+	 */
+	private void setInactiveTabColors() {
+		setInactiveTabColors(m_tabFolder);
+	}
 
-  /**
-   * Sets the colors of the tab to the active tab colors, taking into account shell focus.
-   */
-  private void setActiveTabColors() {
-    setActiveTabColors(m_shellActive, m_tabFolder);
-  }
+	/**
+	 * Sets the colors of the tab to the active tab colors, taking into account shell focus.
+	 */
+	private void setActiveTabColors() {
+		setActiveTabColors(m_shellActive, m_tabFolder);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets the colors of the tab to the inactive tab colors.
-   */
-  public static void setInactiveTabColors(CTabFolder tabFolder) {
-    org.eclipse.ui.themes.ITheme theme =
-        PlatformUI.getWorkbench().getThemeManager().getCurrentTheme();
-    ColorRegistry colorRegistry = theme.getColorRegistry();
-    drawGradient(
-        tabFolder,
-        colorRegistry.get(IWorkbenchThemeConstants.INACTIVE_TAB_TEXT_COLOR),
-        new Color[]{
-            colorRegistry.get(IWorkbenchThemeConstants.INACTIVE_TAB_BG_START),
-            colorRegistry.get(IWorkbenchThemeConstants.INACTIVE_TAB_BG_END)},
-        new int[]{theme.getInt(IWorkbenchThemeConstants.INACTIVE_TAB_PERCENT)},
-        theme.getBoolean(IWorkbenchThemeConstants.INACTIVE_TAB_VERTICAL));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets the colors of the tab to the inactive tab colors.
+	 */
+	public static void setInactiveTabColors(CTabFolder tabFolder) {
+		org.eclipse.ui.themes.ITheme theme =
+				PlatformUI.getWorkbench().getThemeManager().getCurrentTheme();
+		ColorRegistry colorRegistry = theme.getColorRegistry();
+		drawGradient(
+				tabFolder,
+				colorRegistry.get(IWorkbenchThemeConstants.INACTIVE_TAB_TEXT_COLOR),
+				new Color[]{
+						colorRegistry.get(IWorkbenchThemeConstants.INACTIVE_TAB_BG_START),
+						colorRegistry.get(IWorkbenchThemeConstants.INACTIVE_TAB_BG_END)},
+				new int[]{theme.getInt(IWorkbenchThemeConstants.INACTIVE_TAB_PERCENT)},
+				theme.getBoolean(IWorkbenchThemeConstants.INACTIVE_TAB_VERTICAL));
+	}
 
-  /**
-   * Sets the colors of the tab to the active tab colors, taking into account shell focus.
-   */
-  public static void setActiveTabColors(boolean shellActive, CTabFolder tabFolder) {
-    org.eclipse.ui.themes.ITheme theme =
-        PlatformUI.getWorkbench().getThemeManager().getCurrentTheme();
-    ColorRegistry colorRegistry = theme.getColorRegistry();
-    if (shellActive) {
-      if (tabFolder.getItemCount() == 0) {
-        tabFolder.setSelectionBackground(colorRegistry.get(IWorkbenchThemeConstants.ACTIVE_TAB_BG_END));
-      }
-      drawGradient(
-          tabFolder,
-          colorRegistry.get(IWorkbenchThemeConstants.ACTIVE_TAB_TEXT_COLOR),
-          new Color[]{
-              colorRegistry.get(IWorkbenchThemeConstants.ACTIVE_TAB_BG_START),
-              colorRegistry.get(IWorkbenchThemeConstants.ACTIVE_TAB_BG_END)},
-          new int[]{theme.getInt(IWorkbenchThemeConstants.ACTIVE_TAB_PERCENT)},
-          theme.getBoolean(IWorkbenchThemeConstants.ACTIVE_TAB_VERTICAL));
-    } else {
-      drawGradient(
-          tabFolder,
-          colorRegistry.get(IWorkbenchThemeConstants.ACTIVE_NOFOCUS_TAB_TEXT_COLOR),
-          new Color[]{
-              colorRegistry.get(IWorkbenchThemeConstants.ACTIVE_NOFOCUS_TAB_BG_START),
-              colorRegistry.get(IWorkbenchThemeConstants.ACTIVE_NOFOCUS_TAB_BG_END)},
-          new int[]{theme.getInt(IWorkbenchThemeConstants.ACTIVE_NOFOCUS_TAB_PERCENT)},
-          theme.getBoolean(IWorkbenchThemeConstants.ACTIVE_NOFOCUS_TAB_VERTICAL));
-    }
-  }
+	/**
+	 * Sets the colors of the tab to the active tab colors, taking into account shell focus.
+	 */
+	public static void setActiveTabColors(boolean shellActive, CTabFolder tabFolder) {
+		org.eclipse.ui.themes.ITheme theme =
+				PlatformUI.getWorkbench().getThemeManager().getCurrentTheme();
+		ColorRegistry colorRegistry = theme.getColorRegistry();
+		if (shellActive) {
+			if (tabFolder.getItemCount() == 0) {
+				tabFolder.setSelectionBackground(colorRegistry.get(IWorkbenchThemeConstants.ACTIVE_TAB_BG_END));
+			}
+			drawGradient(
+					tabFolder,
+					colorRegistry.get(IWorkbenchThemeConstants.ACTIVE_TAB_TEXT_COLOR),
+					new Color[]{
+							colorRegistry.get(IWorkbenchThemeConstants.ACTIVE_TAB_BG_START),
+							colorRegistry.get(IWorkbenchThemeConstants.ACTIVE_TAB_BG_END)},
+					new int[]{theme.getInt(IWorkbenchThemeConstants.ACTIVE_TAB_PERCENT)},
+					theme.getBoolean(IWorkbenchThemeConstants.ACTIVE_TAB_VERTICAL));
+		} else {
+			drawGradient(
+					tabFolder,
+					colorRegistry.get(IWorkbenchThemeConstants.ACTIVE_NOFOCUS_TAB_TEXT_COLOR),
+					new Color[]{
+							colorRegistry.get(IWorkbenchThemeConstants.ACTIVE_NOFOCUS_TAB_BG_START),
+							colorRegistry.get(IWorkbenchThemeConstants.ACTIVE_NOFOCUS_TAB_BG_END)},
+					new int[]{theme.getInt(IWorkbenchThemeConstants.ACTIVE_NOFOCUS_TAB_PERCENT)},
+					theme.getBoolean(IWorkbenchThemeConstants.ACTIVE_NOFOCUS_TAB_VERTICAL));
+		}
+	}
 
-  /**
-   * Sets the gradient for the selected {@link TabItem} of given {@link TabFolder}.
-   */
-  private static void drawGradient(CTabFolder tabFolder,
-      Color fgColor,
-      Color[] bgColors,
-      int[] percentages,
-      boolean vertical) {
-    if (!tabFolder.isDisposed()) {
-      tabFolder.setSelectionForeground(fgColor);
-      tabFolder.setSelectionBackground(bgColors, percentages, vertical);
-    }
-  }
+	/**
+	 * Sets the gradient for the selected {@link TabItem} of given {@link TabFolder}.
+	 */
+	private static void drawGradient(CTabFolder tabFolder,
+			Color fgColor,
+			Color[] bgColors,
+			int[] percentages,
+			boolean vertical) {
+		if (!tabFolder.isDisposed()) {
+			tabFolder.setSelectionForeground(fgColor);
+			tabFolder.setSelectionBackground(bgColors, percentages, vertical);
+		}
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/TableColumnFactory.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/TableColumnFactory.java
index 1f6196711..581a8421d 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/TableColumnFactory.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/TableColumnFactory.java
@@ -22,90 +22,90 @@
  * @author scheglov_ke
  */
 public final class TableColumnFactory {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Creation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link TableColumnFactory} for new {@link TableColumn} of given {@link Table}.
-   */
-  public static TableColumnFactory create(Table table) {
-    return create(table, SWT.NONE);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Creation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link TableColumnFactory} for new {@link TableColumn} of given {@link Table}.
+	 */
+	public static TableColumnFactory create(Table table) {
+		return create(table, SWT.NONE);
+	}
 
-  /**
-   * @return the {@link TableColumnFactory} for new {@link TableColumn} of given {@link Table}.
-   */
-  public static TableColumnFactory create(Table table, int style) {
-    return new TableColumnFactory(new TableColumn(table, style));
-  }
+	/**
+	 * @return the {@link TableColumnFactory} for new {@link TableColumn} of given {@link Table}.
+	 */
+	public static TableColumnFactory create(Table table, int style) {
+		return new TableColumnFactory(new TableColumn(table, style));
+	}
 
-  /**
-   * @return the {@link TableColumnFactory} for modifying given {@link TableColumn}.
-   */
-  public static TableColumnFactory create(TableColumn column) {
-    return new TableColumnFactory(column);
-  }
+	/**
+	 * @return the {@link TableColumnFactory} for modifying given {@link TableColumn}.
+	 */
+	public static TableColumnFactory create(TableColumn column) {
+		return new TableColumnFactory(column);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance fields
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final TableColumn m_column;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance fields
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final TableColumn m_column;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private TableColumnFactory(TableColumn column) {
-    m_column = column;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private TableColumnFactory(TableColumn column) {
+		m_column = column;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets the <code>image</code> property.
-   */
-  public TableColumnFactory image(Image image) {
-    m_column.setImage(image);
-    return this;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets the <code>image</code> property.
+	 */
+	public TableColumnFactory image(Image image) {
+		m_column.setImage(image);
+		return this;
+	}
 
-  /**
-   * Sets the <code>text</code> property.
-   */
-  public TableColumnFactory text(String text) {
-    m_column.setText(text);
-    return this;
-  }
+	/**
+	 * Sets the <code>text</code> property.
+	 */
+	public TableColumnFactory text(String text) {
+		m_column.setText(text);
+		return this;
+	}
 
-  /**
-   * Sets the <code>width</code> property.
-   */
-  public TableColumnFactory width(int pixels) {
-    m_column.setWidth(pixels);
-    return this;
-  }
+	/**
+	 * Sets the <code>width</code> property.
+	 */
+	public TableColumnFactory width(int pixels) {
+		m_column.setWidth(pixels);
+		return this;
+	}
 
-  /**
-   * Sets the <code>width</code> property in characters.
-   */
-  public TableColumnFactory widthC(int chars) {
-    PixelConverter converter = new PixelConverter(m_column.getParent());
-    return width(converter.convertWidthInCharsToPixels(chars));
-  }
+	/**
+	 * Sets the <code>width</code> property in characters.
+	 */
+	public TableColumnFactory widthC(int chars) {
+		PixelConverter converter = new PixelConverter(m_column.getParent());
+		return width(converter.convertWidthInCharsToPixels(chars));
+	}
 
-  /**
-   * Invokes {@link TableColumn#pack()} method.
-   */
-  public TableColumnFactory pack() {
-    m_column.pack();
-    return this;
-  }
+	/**
+	 * Invokes {@link TableColumn#pack()} method.
+	 */
+	public TableColumnFactory pack() {
+		m_column.pack();
+		return this;
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/TableFactory.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/TableFactory.java
index 5c7e8e08d..16ed50acd 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/TableFactory.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/TableFactory.java
@@ -23,85 +23,85 @@
  * @author scheglov_ke
  */
 public final class TableFactory {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Creation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link TabFactory} for {@link Table} of given {@link TableViewer}.
-   */
-  public static TableFactory modify(TableViewer viewer) {
-    return modify(viewer.getTable());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Creation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link TabFactory} for {@link Table} of given {@link TableViewer}.
+	 */
+	public static TableFactory modify(TableViewer viewer) {
+		return modify(viewer.getTable());
+	}
 
-  /**
-   * @return the {@link TabFactory} for given {@link Table}.
-   */
-  public static TableFactory modify(Table table) {
-    return new TableFactory(table);
-  }
+	/**
+	 * @return the {@link TabFactory} for given {@link Table}.
+	 */
+	public static TableFactory modify(Table table) {
+		return new TableFactory(table);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance fields
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final Table m_table;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance fields
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final Table m_table;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private TableFactory(Table table) {
-    m_table = table;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private TableFactory(Table table) {
+		m_table = table;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets the <code>headerVisible</code> property.
-   */
-  public TableFactory headerVisible(boolean value) {
-    m_table.setHeaderVisible(value);
-    return this;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets the <code>headerVisible</code> property.
+	 */
+	public TableFactory headerVisible(boolean value) {
+		m_table.setHeaderVisible(value);
+		return this;
+	}
 
-  /**
-   * Sets the <code>linesVisible</code> property.
-   */
-  public TableFactory linesVisible(boolean value) {
-    m_table.setLinesVisible(value);
-    return this;
-  }
+	/**
+	 * Sets the <code>linesVisible</code> property.
+	 */
+	public TableFactory linesVisible(boolean value) {
+		m_table.setLinesVisible(value);
+		return this;
+	}
 
-  /**
-   * Sets default values for {@link Table} - show header and lines.
-   */
-  public TableFactory standard() {
-    return headerVisible(true).linesVisible(true);
-  }
+	/**
+	 * Sets default values for {@link Table} - show header and lines.
+	 */
+	public TableFactory standard() {
+		return headerVisible(true).linesVisible(true);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Columns
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link TableColumnFactory} for new {@link TableColumn} of this {@link Table}.
-   */
-  public TableColumnFactory newColumn() {
-    return newColumn(SWT.NONE);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Columns
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link TableColumnFactory} for new {@link TableColumn} of this {@link Table}.
+	 */
+	public TableColumnFactory newColumn() {
+		return newColumn(SWT.NONE);
+	}
 
-  /**
-   * @return the {@link TableColumnFactory} for new {@link TableColumn} of this {@link Table}.
-   */
-  public TableColumnFactory newColumn(int style) {
-    return TableColumnFactory.create(m_table, style);
-  }
+	/**
+	 * @return the {@link TableColumnFactory} for new {@link TableColumn} of this {@link Table}.
+	 */
+	public TableColumnFactory newColumn(int style) {
+		return TableColumnFactory.create(m_table, style);
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/UiUtils.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/UiUtils.java
index bc8896808..9d64bfc49 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/UiUtils.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/UiUtils.java
@@ -53,569 +53,569 @@
  * @author scheglov_ke
  */
 public class UiUtils {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Shell utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Run modal loop for given shell.
-   */
-  public static void runModalShell(Shell shell) {
-    Display display = shell.getDisplay();
-    shell.open();
-    while (!shell.isDisposed() && shell.getVisible()) {
-      try {
-        if (!display.readAndDispatch()) {
-          display.sleep();
-        }
-      } catch (Throwable t) {
-      }
-    }
-  }
-
-  /**
-   * Centers <code>shell</code> in <code>parentShell</code>.
-   */
-  public static void centerShell(Shell parentShell, Shell shell) {
-    Point size = shell.getSize();
-    Rectangle parentBounds = parentShell.getBounds();
-    int x = parentBounds.x + parentBounds.width / 2 - size.x / 2;
-    int y = parentBounds.y + parentBounds.height / 2 - size.y / 2;
-    shell.setLocation(x, y);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Combo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static void setVisibleAll(Combo combo) {
-    setVisibleItemCount(combo, combo.getItemCount());
-  }
-
-  /**
-   * Sets count of items visible after drop-down.
-   */
-  public static void setVisibleItemCount(Combo combo, int count) {
-    combo.setVisibleItemCount(count);
-    combo.getParent().layout();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Menu
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Shows {@link Menu} and disposed it when user hides it (selects some item, or just clicks
-   * somewhere).
-   */
-  public static void showAndDisposeOnHide(final Menu menu) {
-    menu.addMenuListener(new MenuAdapter() {
-      @Override
-      public void menuHidden(MenuEvent e) {
-        e.display.asyncExec(() -> menu.dispose());
-      }
-    });
-    menu.setVisible(true);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Focus utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds given {@link FocusListener} for controls tree starting from specified control.
-   */
-  public static void addFocusListenerForControlTree(Control control, FocusListener focusListener) {
-    control.addFocusListener(focusListener);
-    if (control instanceof Composite) {
-      Composite composite = (Composite) control;
-      Control[] children = composite.getChildren();
-      for (int i = 0; i < children.length; i++) {
-        Control child = children[i];
-        addFocusListenerForControlTree(child, focusListener);
-      }
-    }
-  }
-
-  /**
-   * @return <code>true</code> if given control or any of its direct and indirect children have
-   *         focus.
-   */
-  public static boolean hasFocusInControlTree(Control control) {
-    if (control.isDisposed()) {
-      return false;
-    }
-    if (control.isFocusControl()) {
-      return true;
-    }
-    if (control instanceof Composite) {
-      Composite composite = (Composite) control;
-      Control[] children = composite.getChildren();
-      for (int i = 0; i < children.length; i++) {
-        Control child = children[i];
-        if (hasFocusInControlTree(child)) {
-          return true;
-        }
-      }
-    }
-    return false;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if given {@link Widget}s are parent and child.
-   */
-  public static boolean isChildOf(Widget parent, Widget child) {
-    if (child instanceof Control) {
-      Control childControl = (Control) child;
-      while (childControl != null) {
-        if (childControl == parent) {
-          return true;
-        }
-        childControl = childControl.getParent();
-      }
-    }
-    return false;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Table utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the index of {@link TableColumn} in given {@link Table} that is under mouse cursor.
-   */
-  public static int getColumnUnderCursor(Table table) {
-    Point p = Display.getCurrent().getCursorLocation();
-    p = table.toControl(p);
-    return getColumnAt(table, p);
-  }
-
-  /**
-   * @return the index of {@link TableColumn} in given {@link Table} that is under given
-   *         {@link Point}.
-   */
-  public static int getColumnAt(Table table, Point p) {
-    int x = -table.getHorizontalBar().getSelection();
-    TableColumn[] columns = table.getColumns();
-    for (int i = 0; i < columns.length; i++) {
-      TableColumn column = columns[i];
-      int width = column.getWidth();
-      if (x <= p.x && p.x < x + width) {
-        return i;
-      }
-      x += width;
-    }
-    return -1;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tooltip for table items
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Provider for {@link TableItem} tooltip control.
-   *
-   * @author scheglov_ke
-   */
-  public interface ITableTooltipProvider {
-    Control createTooltipControl(TableItem item, Composite parent, int column);
-  }
-
-  /**
-   * Adds tooltips support with given {@link ITableTooltipProvider}.
-   */
-  public static void installTableTooltipProvider(final Table table,
-      final ITableTooltipProvider provider) {
-    final String TAB_ITEM_KEY = "_TABLEITEM";
-    final Shell tableShell = table.getShell();
-    //
-    final Listener tipControlListener = event -> {
-        Control tipControl = (Control) event.widget;
-        Shell tipShell = tipControl.getShell();
-        switch (event.type) {
-          case SWT.MouseDown :
-            Event e = new Event();
-            e.item = (TableItem) tipControl.getData(TAB_ITEM_KEY);
-            // dispose tooltip
-            tipShell.dispose();
-            // Assuming table is single select, set the selection as if
-            // the mouse down event went through to the table
-            table.setSelection(new TableItem[]{(TableItem) e.item});
-            table.notifyListeners(SWT.Selection, e);
-            break;
-          case SWT.MouseExit :
-            tipShell.dispose();
-            break;
-        }
-      };
-    //
-    Listener tableListener = new Listener() {
-      private Shell m_tipShell = null;
-      private Control m_tipControl = null;
-
-      @Override
-      public void handleEvent(Event event) {
-        switch (event.type) {
-          case SWT.Dispose :
-          case SWT.KeyDown :
-          case SWT.MouseMove : {
-            if (m_tipShell == null) {
-              break;
-            }
-            m_tipShell.dispose();
-            m_tipShell = null;
-            m_tipControl = null;
-            break;
-          }
-          case SWT.MouseHover : {
-            Point hoverLocation = new Point(event.x, event.y);
-            TableItem item = table.getItem(hoverLocation);
-            if (item != null) {
-              if (m_tipShell != null && !m_tipShell.isDisposed()) {
-                m_tipShell.dispose();
-              }
-              m_tipShell = new Shell(tableShell, SWT.ON_TOP | SWT.TOOL);
-              m_tipShell.setLayout(new FillLayout());
-              //
-              int column = getColumnAt(table, hoverLocation);
-              m_tipControl = provider.createTooltipControl(item, m_tipShell, column);
-              if (m_tipControl != null) {
-                m_tipControl.setData(TAB_ITEM_KEY, item);
-                m_tipControl.addListener(SWT.MouseExit, tipControlListener);
-                m_tipControl.addListener(SWT.MouseDown, tipControlListener);
-                //
-                Point size = m_tipShell.computeSize(SWT.DEFAULT, SWT.DEFAULT);
-                Rectangle rect = item.getBounds(0);
-                Point p = table.toDisplay(new Point(rect.x, rect.y));
-                m_tipShell.setBounds(p.x, p.y, size.x, size.y);
-                m_tipShell.setVisible(true);
-              }
-            }
-          }
-        }
-      }
-    };
-    table.addListener(SWT.Dispose, tableListener);
-    table.addListener(SWT.KeyDown, tableListener);
-    table.addListener(SWT.MouseMove, tableListener);
-    table.addListener(SWT.MouseHover, tableListener);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tree - expand/collapse all
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Expands all {@link TreeItem}'s in given {@link Tree}.
-   */
-  public static void expandAll(Tree tree) {
-    setExpanded(tree.getItems(), true);
-  }
-
-  /**
-   * Collapses all {@link TreeItem}'s in given {@link Tree}.
-   */
-  public static void collapseAll(Tree tree) {
-    setExpanded(tree.getItems(), false);
-  }
-
-  /**
-   * Set expansion state for given {@link TreeItem}'s and all its children.
-   */
-  private static void setExpanded(TreeItem[] treeItems, boolean expanded) {
-    for (int i = 0; i < treeItems.length; i++) {
-      TreeItem treeItem = treeItems[i];
-      treeItem.setExpanded(expanded);
-      setExpanded(treeItem.getItems(), expanded);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tree - get/set expanded
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the array of expanded {@link TreeItem}'s.
-   */
-  public static TreeItem[] getExpanded(Tree tree) {
-    List<TreeItem> expandedItems = Lists.newArrayList();
-    addExpanded(expandedItems, tree.getItems());
-    return expandedItems.toArray(new TreeItem[expandedItems.size()]);
-  }
-
-  /**
-   * Adds expanded {@link TreeItem}'s for given {@link TreeItem}'s and all their children.
-   */
-  private static void addExpanded(List<TreeItem> expandedItems, TreeItem[] treeItems) {
-    for (int i = 0; i < treeItems.length; i++) {
-      TreeItem treeItem = treeItems[i];
-      if (treeItem.getExpanded()) {
-        expandedItems.add(treeItem);
-      }
-      addExpanded(expandedItems, treeItem.getItems());
-    }
-  }
-
-  /**
-   * Expands {@link TreeItem}'s for which {@link TreeItem#getData()} returns object contained in
-   * given elements.
-   *
-   * @param tree
-   *          the {@link Tree} to set expansion.
-   * @param expandedElements
-   *          the array elements to expand.
-   */
-  public static void setExpandedByData(Tree tree, Object[] expandedElements) {
-    tree.setRedraw(false);
-    try {
-      setExpandedByData(tree.getItems(), expandedElements);
-    } finally {
-      tree.setRedraw(true);
-    }
-  }
-
-  /**
-   * Expands {@link TreeItem}'s for given {@link TreeItem}'s and all their children.
-   */
-  private static void setExpandedByData(TreeItem[] treeItems, Object[] expandedElements) {
-    for (int i = 0; i < treeItems.length; i++) {
-      TreeItem treeItem = treeItems[i];
-      // expand/collapse this item
-      boolean expand = ArrayUtils.contains(expandedElements, treeItem.getData());
-      treeItem.setExpanded(expand);
-      // process children
-      setExpandedByData(treeItem.getItems(), expandedElements);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Bounds utilities
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the bounds of given <code>control</code> relative to given <code>target</code>.
-   */
-  public static Rectangle getBoundsRelativeTo(Control control, Composite target) {
-    Rectangle bounds = control.getBounds();
-    return convertFromTo(bounds, control.getParent(), target);
-  }
-
-  /**
-   * @return the {@link Rectangle} converted from <code>source</code> {@link Control} to
-   *         <code>target</code> .
-   */
-  public static Rectangle convertFromTo(Rectangle bounds, Control source, Control target) {
-    Point p = source.toDisplay(new Point(bounds.x, bounds.y));
-    p = target.toControl(p);
-    bounds.x = p.x;
-    bounds.y = p.y;
-    return bounds;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Controls enable state
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static String KEY_IGNORE_HIERARCHY_ENABLED =
-      "Ignore this Control when set 'enabled' property for hierarchy";
-
-  /**
-   * Changes enablement for given control and all its children.
-   */
-  public static void changeControlEnable(Control control, boolean enable) {
-    if (control.getData(KEY_IGNORE_HIERARCHY_ENABLED) != null) {
-      return;
-    }
-    if (control.getEnabled() != enable) {
-      control.setEnabled(enable);
-    }
-    if (control instanceof Composite) {
-      Composite composite = (Composite) control;
-      Control[] children = composite.getChildren();
-      for (int i = 0; i < children.length; i++) {
-        Control child = children[i];
-        changeControlEnable(child, enable);
-      }
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Images
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the copy of given {@link Image} or <code>null</code> if <code>image</code> is
-   *         <code>null</code> .
-   */
-  public static Image getCopy(Image image) {
-    return image == null ? null : new Image(null, image.getImageData());
-  }
-
-  /**
-   * Draws {@link Image} on {@link GC} centered in given {@link Rectangle}. If {@link Image} is
-   * bigger that {@link Rectangle}, {@link Image} will be scaled down as needed with keeping
-   * proportions.
-   */
-  public static void drawScaledImage(GC gc, Image image, Rectangle targetRectangle) {
-    int imageWidth = image.getBounds().width;
-    int imageHeight = image.getBounds().height;
-    // prepare scaled image size
-    int newImageWidth;
-    int newImageHeight;
-    if (imageWidth <= targetRectangle.width && imageHeight <= targetRectangle.height) {
-      newImageWidth = imageWidth;
-      newImageHeight = imageHeight;
-    } else {
-      // prepare minimal scale
-      double k;
-      {
-        double k_w = targetRectangle.width / (double) imageWidth;
-        double k_h = targetRectangle.height / (double) imageHeight;
-        k = Math.min(k_w, k_h);
-      }
-      // calculate scaled image size
-      newImageWidth = (int) (imageWidth * k);
-      newImageHeight = (int) (imageHeight * k);
-    }
-    // draw image centered in target rectangle
-    int destX = targetRectangle.x + (targetRectangle.width - newImageWidth) / 2;
-    int destY = targetRectangle.y + (targetRectangle.height - newImageHeight) / 2;
-    gc.drawImage(image, 0, 0, imageWidth, imageHeight, destX, destY, newImageWidth, newImageHeight);
-  }
-
-  /**
-   * Returns part of given {@link Image} and disposes original {@link Image}.
-   */
-  public static Image getCroppedImage(Image fullImage, Rectangle cropBounds) {
-    Rectangle fullImageBounds = fullImage.getBounds();
-    int fullWidth = fullImageBounds.width;
-    int fullHeight = fullImageBounds.height;
-    int cropWidth = Math.max(Math.min(cropBounds.width, fullWidth - cropBounds.x), 1);
-    int cropHeight = Math.max(Math.min(cropBounds.height, fullHeight - cropBounds.y), 1);
-    Image croppedImage = new Image(Display.getCurrent(), cropWidth, cropHeight);
-    GC gc = new GC(croppedImage);
-    try {
-      gc.drawImage(
-          fullImage,
-          cropBounds.x,
-          cropBounds.y,
-          cropWidth,
-          cropHeight,
-          0,
-          0,
-          cropWidth,
-          cropHeight);
-    } catch (Throwable e) {
-      String message = "fullImage.getBounds()=" + fullImageBounds + " cropBounds=" + cropBounds;
-      throw new Error(message, e);
-    } finally {
-      gc.dispose();
-      fullImage.dispose();
-    }
-    return croppedImage;
-  }
-
-  /**
-   * @return <code>true</code> if two {@link Image}'s are equal.
-   */
-  public static boolean equals(Image image_1, Image image_2) {
-    // try to compare as plain Object's
-    if (ObjectUtils.equals(image_1, image_2)) {
-      return true;
-    }
-    // compare bounds
-    if (!image_1.getBounds().equals(image_2.getBounds())) {
-      return false;
-    }
-    // check ImageData's
-    ImageData imageData_1 = image_1.getImageData();
-    ImageData imageData_2 = image_2.getImageData();
-    if (imageData_1.depth != imageData_2.depth) {
-      return false;
-    }
-    // compare pixels
-    for (int i = 0; i < imageData_1.data.length; i++) {
-      if (imageData_1.data[i] != imageData_2.data[i]) {
-        return false;
-      }
-    }
-    // OK, Image's has same size and pixels
-    return true;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // File icons
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static Map<String, Image> m_extensionToIcon = new HashMap<>();
-
-  /**
-   * @return icon that is associated with given file extension in the operating system
-   */
-  public static Image getIcon(String extension) {
-    Image icon = m_extensionToIcon.get(extension);
-    if (icon == null) {
-      Program program = Program.findProgram(extension);
-      if (program != null) {
-        ImageData imageData = program.getImageData();
-        if (imageData != null) {
-          icon = new Image(Display.getDefault(), imageData);
-          m_extensionToIcon.put(extension, icon);
-        }
-      }
-    }
-    return icon;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Message dialogs
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Opens standard warning dialog.
-   */
-  public static void openWarning(Shell parent, String title, String message) {
-    MessageDialog dialog =
-        new MessageDialog(parent,
-            title,
-            null,
-            message,
-            MessageDialog.WARNING,
-            new String[]{IDialogConstants.OK_LABEL},
-            0);
-    dialog.open();
-  }
-
-  /**
-   * Opens standard error dialog.
-   */
-  public static void openError(Shell parent, String title, String message) {
-    MessageDialog dialog =
-        new MessageDialog(parent,
-            title,
-            null,
-            message,
-            MessageDialog.ERROR,
-            new String[]{IDialogConstants.OK_LABEL},
-            0);
-    dialog.open();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Shell utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Run modal loop for given shell.
+	 */
+	public static void runModalShell(Shell shell) {
+		Display display = shell.getDisplay();
+		shell.open();
+		while (!shell.isDisposed() && shell.getVisible()) {
+			try {
+				if (!display.readAndDispatch()) {
+					display.sleep();
+				}
+			} catch (Throwable t) {
+			}
+		}
+	}
+
+	/**
+	 * Centers <code>shell</code> in <code>parentShell</code>.
+	 */
+	public static void centerShell(Shell parentShell, Shell shell) {
+		Point size = shell.getSize();
+		Rectangle parentBounds = parentShell.getBounds();
+		int x = parentBounds.x + parentBounds.width / 2 - size.x / 2;
+		int y = parentBounds.y + parentBounds.height / 2 - size.y / 2;
+		shell.setLocation(x, y);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Combo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static void setVisibleAll(Combo combo) {
+		setVisibleItemCount(combo, combo.getItemCount());
+	}
+
+	/**
+	 * Sets count of items visible after drop-down.
+	 */
+	public static void setVisibleItemCount(Combo combo, int count) {
+		combo.setVisibleItemCount(count);
+		combo.getParent().layout();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Menu
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Shows {@link Menu} and disposed it when user hides it (selects some item, or just clicks
+	 * somewhere).
+	 */
+	public static void showAndDisposeOnHide(final Menu menu) {
+		menu.addMenuListener(new MenuAdapter() {
+			@Override
+			public void menuHidden(MenuEvent e) {
+				e.display.asyncExec(() -> menu.dispose());
+			}
+		});
+		menu.setVisible(true);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Focus utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds given {@link FocusListener} for controls tree starting from specified control.
+	 */
+	public static void addFocusListenerForControlTree(Control control, FocusListener focusListener) {
+		control.addFocusListener(focusListener);
+		if (control instanceof Composite) {
+			Composite composite = (Composite) control;
+			Control[] children = composite.getChildren();
+			for (int i = 0; i < children.length; i++) {
+				Control child = children[i];
+				addFocusListenerForControlTree(child, focusListener);
+			}
+		}
+	}
+
+	/**
+	 * @return <code>true</code> if given control or any of its direct and indirect children have
+	 *         focus.
+	 */
+	public static boolean hasFocusInControlTree(Control control) {
+		if (control.isDisposed()) {
+			return false;
+		}
+		if (control.isFocusControl()) {
+			return true;
+		}
+		if (control instanceof Composite) {
+			Composite composite = (Composite) control;
+			Control[] children = composite.getChildren();
+			for (int i = 0; i < children.length; i++) {
+				Control child = children[i];
+				if (hasFocusInControlTree(child)) {
+					return true;
+				}
+			}
+		}
+		return false;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if given {@link Widget}s are parent and child.
+	 */
+	public static boolean isChildOf(Widget parent, Widget child) {
+		if (child instanceof Control) {
+			Control childControl = (Control) child;
+			while (childControl != null) {
+				if (childControl == parent) {
+					return true;
+				}
+				childControl = childControl.getParent();
+			}
+		}
+		return false;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Table utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the index of {@link TableColumn} in given {@link Table} that is under mouse cursor.
+	 */
+	public static int getColumnUnderCursor(Table table) {
+		Point p = Display.getCurrent().getCursorLocation();
+		p = table.toControl(p);
+		return getColumnAt(table, p);
+	}
+
+	/**
+	 * @return the index of {@link TableColumn} in given {@link Table} that is under given
+	 *         {@link Point}.
+	 */
+	public static int getColumnAt(Table table, Point p) {
+		int x = -table.getHorizontalBar().getSelection();
+		TableColumn[] columns = table.getColumns();
+		for (int i = 0; i < columns.length; i++) {
+			TableColumn column = columns[i];
+			int width = column.getWidth();
+			if (x <= p.x && p.x < x + width) {
+				return i;
+			}
+			x += width;
+		}
+		return -1;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tooltip for table items
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Provider for {@link TableItem} tooltip control.
+	 *
+	 * @author scheglov_ke
+	 */
+	public interface ITableTooltipProvider {
+		Control createTooltipControl(TableItem item, Composite parent, int column);
+	}
+
+	/**
+	 * Adds tooltips support with given {@link ITableTooltipProvider}.
+	 */
+	public static void installTableTooltipProvider(final Table table,
+			final ITableTooltipProvider provider) {
+		final String TAB_ITEM_KEY = "_TABLEITEM";
+		final Shell tableShell = table.getShell();
+		//
+		final Listener tipControlListener = event -> {
+			Control tipControl = (Control) event.widget;
+			Shell tipShell = tipControl.getShell();
+			switch (event.type) {
+			case SWT.MouseDown :
+				Event e = new Event();
+				e.item = (TableItem) tipControl.getData(TAB_ITEM_KEY);
+				// dispose tooltip
+				tipShell.dispose();
+				// Assuming table is single select, set the selection as if
+				// the mouse down event went through to the table
+				table.setSelection(new TableItem[]{(TableItem) e.item});
+				table.notifyListeners(SWT.Selection, e);
+				break;
+			case SWT.MouseExit :
+				tipShell.dispose();
+				break;
+			}
+		};
+		//
+		Listener tableListener = new Listener() {
+			private Shell m_tipShell = null;
+			private Control m_tipControl = null;
+
+			@Override
+			public void handleEvent(Event event) {
+				switch (event.type) {
+				case SWT.Dispose :
+				case SWT.KeyDown :
+				case SWT.MouseMove : {
+					if (m_tipShell == null) {
+						break;
+					}
+					m_tipShell.dispose();
+					m_tipShell = null;
+					m_tipControl = null;
+					break;
+				}
+				case SWT.MouseHover : {
+					Point hoverLocation = new Point(event.x, event.y);
+					TableItem item = table.getItem(hoverLocation);
+					if (item != null) {
+						if (m_tipShell != null && !m_tipShell.isDisposed()) {
+							m_tipShell.dispose();
+						}
+						m_tipShell = new Shell(tableShell, SWT.ON_TOP | SWT.TOOL);
+						m_tipShell.setLayout(new FillLayout());
+						//
+						int column = getColumnAt(table, hoverLocation);
+						m_tipControl = provider.createTooltipControl(item, m_tipShell, column);
+						if (m_tipControl != null) {
+							m_tipControl.setData(TAB_ITEM_KEY, item);
+							m_tipControl.addListener(SWT.MouseExit, tipControlListener);
+							m_tipControl.addListener(SWT.MouseDown, tipControlListener);
+							//
+							Point size = m_tipShell.computeSize(SWT.DEFAULT, SWT.DEFAULT);
+							Rectangle rect = item.getBounds(0);
+							Point p = table.toDisplay(new Point(rect.x, rect.y));
+							m_tipShell.setBounds(p.x, p.y, size.x, size.y);
+							m_tipShell.setVisible(true);
+						}
+					}
+				}
+				}
+			}
+		};
+		table.addListener(SWT.Dispose, tableListener);
+		table.addListener(SWT.KeyDown, tableListener);
+		table.addListener(SWT.MouseMove, tableListener);
+		table.addListener(SWT.MouseHover, tableListener);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tree - expand/collapse all
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Expands all {@link TreeItem}'s in given {@link Tree}.
+	 */
+	public static void expandAll(Tree tree) {
+		setExpanded(tree.getItems(), true);
+	}
+
+	/**
+	 * Collapses all {@link TreeItem}'s in given {@link Tree}.
+	 */
+	public static void collapseAll(Tree tree) {
+		setExpanded(tree.getItems(), false);
+	}
+
+	/**
+	 * Set expansion state for given {@link TreeItem}'s and all its children.
+	 */
+	private static void setExpanded(TreeItem[] treeItems, boolean expanded) {
+		for (int i = 0; i < treeItems.length; i++) {
+			TreeItem treeItem = treeItems[i];
+			treeItem.setExpanded(expanded);
+			setExpanded(treeItem.getItems(), expanded);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tree - get/set expanded
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the array of expanded {@link TreeItem}'s.
+	 */
+	public static TreeItem[] getExpanded(Tree tree) {
+		List<TreeItem> expandedItems = Lists.newArrayList();
+		addExpanded(expandedItems, tree.getItems());
+		return expandedItems.toArray(new TreeItem[expandedItems.size()]);
+	}
+
+	/**
+	 * Adds expanded {@link TreeItem}'s for given {@link TreeItem}'s and all their children.
+	 */
+	private static void addExpanded(List<TreeItem> expandedItems, TreeItem[] treeItems) {
+		for (int i = 0; i < treeItems.length; i++) {
+			TreeItem treeItem = treeItems[i];
+			if (treeItem.getExpanded()) {
+				expandedItems.add(treeItem);
+			}
+			addExpanded(expandedItems, treeItem.getItems());
+		}
+	}
+
+	/**
+	 * Expands {@link TreeItem}'s for which {@link TreeItem#getData()} returns object contained in
+	 * given elements.
+	 *
+	 * @param tree
+	 *          the {@link Tree} to set expansion.
+	 * @param expandedElements
+	 *          the array elements to expand.
+	 */
+	public static void setExpandedByData(Tree tree, Object[] expandedElements) {
+		tree.setRedraw(false);
+		try {
+			setExpandedByData(tree.getItems(), expandedElements);
+		} finally {
+			tree.setRedraw(true);
+		}
+	}
+
+	/**
+	 * Expands {@link TreeItem}'s for given {@link TreeItem}'s and all their children.
+	 */
+	private static void setExpandedByData(TreeItem[] treeItems, Object[] expandedElements) {
+		for (int i = 0; i < treeItems.length; i++) {
+			TreeItem treeItem = treeItems[i];
+			// expand/collapse this item
+			boolean expand = ArrayUtils.contains(expandedElements, treeItem.getData());
+			treeItem.setExpanded(expand);
+			// process children
+			setExpandedByData(treeItem.getItems(), expandedElements);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Bounds utilities
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the bounds of given <code>control</code> relative to given <code>target</code>.
+	 */
+	public static Rectangle getBoundsRelativeTo(Control control, Composite target) {
+		Rectangle bounds = control.getBounds();
+		return convertFromTo(bounds, control.getParent(), target);
+	}
+
+	/**
+	 * @return the {@link Rectangle} converted from <code>source</code> {@link Control} to
+	 *         <code>target</code> .
+	 */
+	public static Rectangle convertFromTo(Rectangle bounds, Control source, Control target) {
+		Point p = source.toDisplay(new Point(bounds.x, bounds.y));
+		p = target.toControl(p);
+		bounds.x = p.x;
+		bounds.y = p.y;
+		return bounds;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Controls enable state
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static String KEY_IGNORE_HIERARCHY_ENABLED =
+			"Ignore this Control when set 'enabled' property for hierarchy";
+
+	/**
+	 * Changes enablement for given control and all its children.
+	 */
+	public static void changeControlEnable(Control control, boolean enable) {
+		if (control.getData(KEY_IGNORE_HIERARCHY_ENABLED) != null) {
+			return;
+		}
+		if (control.getEnabled() != enable) {
+			control.setEnabled(enable);
+		}
+		if (control instanceof Composite) {
+			Composite composite = (Composite) control;
+			Control[] children = composite.getChildren();
+			for (int i = 0; i < children.length; i++) {
+				Control child = children[i];
+				changeControlEnable(child, enable);
+			}
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Images
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the copy of given {@link Image} or <code>null</code> if <code>image</code> is
+	 *         <code>null</code> .
+	 */
+	public static Image getCopy(Image image) {
+		return image == null ? null : new Image(null, image.getImageData());
+	}
+
+	/**
+	 * Draws {@link Image} on {@link GC} centered in given {@link Rectangle}. If {@link Image} is
+	 * bigger that {@link Rectangle}, {@link Image} will be scaled down as needed with keeping
+	 * proportions.
+	 */
+	public static void drawScaledImage(GC gc, Image image, Rectangle targetRectangle) {
+		int imageWidth = image.getBounds().width;
+		int imageHeight = image.getBounds().height;
+		// prepare scaled image size
+		int newImageWidth;
+		int newImageHeight;
+		if (imageWidth <= targetRectangle.width && imageHeight <= targetRectangle.height) {
+			newImageWidth = imageWidth;
+			newImageHeight = imageHeight;
+		} else {
+			// prepare minimal scale
+			double k;
+			{
+				double k_w = targetRectangle.width / (double) imageWidth;
+				double k_h = targetRectangle.height / (double) imageHeight;
+				k = Math.min(k_w, k_h);
+			}
+			// calculate scaled image size
+			newImageWidth = (int) (imageWidth * k);
+			newImageHeight = (int) (imageHeight * k);
+		}
+		// draw image centered in target rectangle
+		int destX = targetRectangle.x + (targetRectangle.width - newImageWidth) / 2;
+		int destY = targetRectangle.y + (targetRectangle.height - newImageHeight) / 2;
+		gc.drawImage(image, 0, 0, imageWidth, imageHeight, destX, destY, newImageWidth, newImageHeight);
+	}
+
+	/**
+	 * Returns part of given {@link Image} and disposes original {@link Image}.
+	 */
+	public static Image getCroppedImage(Image fullImage, Rectangle cropBounds) {
+		Rectangle fullImageBounds = fullImage.getBounds();
+		int fullWidth = fullImageBounds.width;
+		int fullHeight = fullImageBounds.height;
+		int cropWidth = Math.max(Math.min(cropBounds.width, fullWidth - cropBounds.x), 1);
+		int cropHeight = Math.max(Math.min(cropBounds.height, fullHeight - cropBounds.y), 1);
+		Image croppedImage = new Image(Display.getCurrent(), cropWidth, cropHeight);
+		GC gc = new GC(croppedImage);
+		try {
+			gc.drawImage(
+					fullImage,
+					cropBounds.x,
+					cropBounds.y,
+					cropWidth,
+					cropHeight,
+					0,
+					0,
+					cropWidth,
+					cropHeight);
+		} catch (Throwable e) {
+			String message = "fullImage.getBounds()=" + fullImageBounds + " cropBounds=" + cropBounds;
+			throw new Error(message, e);
+		} finally {
+			gc.dispose();
+			fullImage.dispose();
+		}
+		return croppedImage;
+	}
+
+	/**
+	 * @return <code>true</code> if two {@link Image}'s are equal.
+	 */
+	public static boolean equals(Image image_1, Image image_2) {
+		// try to compare as plain Object's
+		if (ObjectUtils.equals(image_1, image_2)) {
+			return true;
+		}
+		// compare bounds
+		if (!image_1.getBounds().equals(image_2.getBounds())) {
+			return false;
+		}
+		// check ImageData's
+		ImageData imageData_1 = image_1.getImageData();
+		ImageData imageData_2 = image_2.getImageData();
+		if (imageData_1.depth != imageData_2.depth) {
+			return false;
+		}
+		// compare pixels
+		for (int i = 0; i < imageData_1.data.length; i++) {
+			if (imageData_1.data[i] != imageData_2.data[i]) {
+				return false;
+			}
+		}
+		// OK, Image's has same size and pixels
+		return true;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// File icons
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static Map<String, Image> m_extensionToIcon = new HashMap<>();
+
+	/**
+	 * @return icon that is associated with given file extension in the operating system
+	 */
+	public static Image getIcon(String extension) {
+		Image icon = m_extensionToIcon.get(extension);
+		if (icon == null) {
+			Program program = Program.findProgram(extension);
+			if (program != null) {
+				ImageData imageData = program.getImageData();
+				if (imageData != null) {
+					icon = new Image(Display.getDefault(), imageData);
+					m_extensionToIcon.put(extension, icon);
+				}
+			}
+		}
+		return icon;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Message dialogs
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Opens standard warning dialog.
+	 */
+	public static void openWarning(Shell parent, String title, String message) {
+		MessageDialog dialog =
+				new MessageDialog(parent,
+						title,
+						null,
+						message,
+						MessageDialog.WARNING,
+						new String[]{IDialogConstants.OK_LABEL},
+						0);
+		dialog.open();
+	}
+
+	/**
+	 * Opens standard error dialog.
+	 */
+	public static void openError(Shell parent, String title, String message) {
+		MessageDialog dialog =
+				new MessageDialog(parent,
+						title,
+						null,
+						message,
+						MessageDialog.ERROR,
+						new String[]{IDialogConstants.OK_LABEL},
+						0);
+		dialog.open();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/dialogs/ResizableDialog.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/dialogs/ResizableDialog.java
index c2d136a9b..20f110ece 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/dialogs/ResizableDialog.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/dialogs/ResizableDialog.java
@@ -28,197 +28,197 @@
  * @coverage core.ui
  */
 public abstract class ResizableDialog extends Dialog {
-  /**
-   * Key for accessing {@link Dialog} from its {@link Shell}.
-   */
-  public static final String KEY_DIALOG = "KEY_DIALOG";
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Internal constants
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final String X = "x";
-  private static final String Y = "y";
-  private static final String WIDTH = "width";
-  private static final String HEIGHT = "height";
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance fields
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final AbstractUIPlugin m_plugin;
+	/**
+	 * Key for accessing {@link Dialog} from its {@link Shell}.
+	 */
+	public static final String KEY_DIALOG = "KEY_DIALOG";
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Internal constants
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final String X = "x";
+	private static final String Y = "y";
+	private static final String WIDTH = "width";
+	private static final String HEIGHT = "height";
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance fields
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final AbstractUIPlugin m_plugin;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ResizableDialog(Shell parentShell, AbstractUIPlugin plugin) {
-    super(parentShell);
-    m_plugin = plugin;
-    setShellStyle(getShellStyle() | SWT.RESIZE | SWT.MAX);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ResizableDialog(Shell parentShell, AbstractUIPlugin plugin) {
+		super(parentShell);
+		m_plugin = plugin;
+		setShellStyle(getShellStyle() | SWT.RESIZE | SWT.MAX);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Size
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Point getInitialSize() {
-    // track the current dialog bounds
-    installDialogBoundsTracker();
-    // answer the size from the previous incarnation
-    Point defaultSize = getDefaultSize();
-    if ((getShellStyle() & SWT.RESIZE) != 0) {
-      Rectangle oldBounds = loadBounds();
-      if (oldBounds != null) {
-        Rectangle displayBounds = getShell().getDisplay().getBounds();
-        int width = Math.min(displayBounds.width, Math.max(oldBounds.width, defaultSize.x));
-        int height = Math.min(displayBounds.height, Math.max(oldBounds.height, defaultSize.y));
-        return new Point(width, height);
-      }
-    }
-    // use default size
-    return defaultSize;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Size
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Point getInitialSize() {
+		// track the current dialog bounds
+		installDialogBoundsTracker();
+		// answer the size from the previous incarnation
+		Point defaultSize = getDefaultSize();
+		if ((getShellStyle() & SWT.RESIZE) != 0) {
+			Rectangle oldBounds = loadBounds();
+			if (oldBounds != null) {
+				Rectangle displayBounds = getShell().getDisplay().getBounds();
+				int width = Math.min(displayBounds.width, Math.max(oldBounds.width, defaultSize.x));
+				int height = Math.min(displayBounds.height, Math.max(oldBounds.height, defaultSize.y));
+				return new Point(width, height);
+			}
+		}
+		// use default size
+		return defaultSize;
+	}
 
-  /**
-   * @return the default size of dialog.
-   */
-  protected Point getDefaultSize() {
-    return super.getInitialSize();
-  }
+	/**
+	 * @return the default size of dialog.
+	 */
+	protected Point getDefaultSize() {
+		return super.getInitialSize();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Location
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Point getInitialLocation(Point initialSize) {
-    Rectangle windowBounds;
-    {
-		Shell windowShell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();
-      windowBounds = windowShell.getBounds();
-    }
-    // answer the location from the previous incarnation
-    Rectangle bounds = loadBounds();
-    if (bounds != null) {
-      int x = bounds.x;
-      int y = bounds.y;
-      int maxX = windowBounds.x + windowBounds.width - initialSize.x;
-      int maxY = windowBounds.y + windowBounds.height - initialSize.y;
-      if (x > maxX) {
-        x = maxX;
-      }
-      if (y > maxY) {
-        y = maxY;
-      }
-      if (x < windowBounds.x) {
-        x = windowBounds.x;
-      }
-      if (y < windowBounds.y) {
-        y = windowBounds.y;
-      }
-      return new Point(x, y);
-    }
-    // default location - centered on workbench window
-    int x = windowBounds.x + (windowBounds.width - initialSize.x) / 2;
-    int y = windowBounds.y + (windowBounds.height - initialSize.y) / 2;
-    return new Point(x, y);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Location
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Point getInitialLocation(Point initialSize) {
+		Rectangle windowBounds;
+		{
+			Shell windowShell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();
+			windowBounds = windowShell.getBounds();
+		}
+		// answer the location from the previous incarnation
+		Rectangle bounds = loadBounds();
+		if (bounds != null) {
+			int x = bounds.x;
+			int y = bounds.y;
+			int maxX = windowBounds.x + windowBounds.width - initialSize.x;
+			int maxY = windowBounds.y + windowBounds.height - initialSize.y;
+			if (x > maxX) {
+				x = maxX;
+			}
+			if (y > maxY) {
+				y = maxY;
+			}
+			if (x < windowBounds.x) {
+				x = windowBounds.x;
+			}
+			if (y < windowBounds.y) {
+				y = windowBounds.y;
+			}
+			return new Point(x, y);
+		}
+		// default location - centered on workbench window
+		int x = windowBounds.x + (windowBounds.width - initialSize.x) / 2;
+		int y = windowBounds.y + (windowBounds.height - initialSize.y) / 2;
+		return new Point(x, y);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Bounds
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Loads bounds from {@link IDialogSettings}.
-   */
-  private Rectangle loadBounds() {
-    IDialogSettings settings = getDialogSettings();
-    try {
-      return new Rectangle(settings.getInt(X),
-          settings.getInt(Y),
-          settings.getInt(WIDTH),
-          settings.getInt(HEIGHT));
-    } catch (NumberFormatException e) {
-      return null;
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Bounds
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Loads bounds from {@link IDialogSettings}.
+	 */
+	private Rectangle loadBounds() {
+		IDialogSettings settings = getDialogSettings();
+		try {
+			return new Rectangle(settings.getInt(X),
+					settings.getInt(Y),
+					settings.getInt(WIDTH),
+					settings.getInt(HEIGHT));
+		} catch (NumberFormatException e) {
+			return null;
+		}
+	}
 
-  /**
-   * Saves bounds to {@link IDialogSettings}.
-   */
-  private void saveBounds(Rectangle bounds) {
-    IDialogSettings settings = getDialogSettings();
-    settings.put(X, bounds.x);
-    settings.put(Y, bounds.y);
-    settings.put(WIDTH, bounds.width);
-    settings.put(HEIGHT, bounds.height);
-  }
+	/**
+	 * Saves bounds to {@link IDialogSettings}.
+	 */
+	private void saveBounds(Rectangle bounds) {
+		IDialogSettings settings = getDialogSettings();
+		settings.put(X, bounds.x);
+		settings.put(Y, bounds.y);
+		settings.put(WIDTH, bounds.width);
+		settings.put(HEIGHT, bounds.height);
+	}
 
-  /**
-   * @return the {@link IDialogSettings} for this dialog with this type.
-   */
-  protected IDialogSettings getDialogSettings() {
-    IDialogSettings settings = m_plugin.getDialogSettings();
-    String sectionName = getDialogSettingsSectionName();
-    if (settings.getSection(sectionName) == null) {
-      return settings.addNewSection(sectionName);
-    }
-    return settings.getSection(sectionName);
-  }
+	/**
+	 * @return the {@link IDialogSettings} for this dialog with this type.
+	 */
+	protected IDialogSettings getDialogSettings() {
+		IDialogSettings settings = m_plugin.getDialogSettings();
+		String sectionName = getDialogSettingsSectionName();
+		if (settings.getSection(sectionName) == null) {
+			return settings.addNewSection(sectionName);
+		}
+		return settings.getSection(sectionName);
+	}
 
-  /**
-   * @return the name of section for dialog specific bounds. By default uses name of {@link Class},
-   *         but if same dialog is used for displaying different content, then may be overridden.
-   */
-  protected String getDialogSettingsSectionName() {
-    return getClass().getName();
-  }
+	/**
+	 * @return the name of section for dialog specific bounds. By default uses name of {@link Class},
+	 *         but if same dialog is used for displaying different content, then may be overridden.
+	 */
+	protected String getDialogSettingsSectionName() {
+		return getClass().getName();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Size tracking
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected Rectangle cachedBounds;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Size tracking
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected Rectangle cachedBounds;
 
-  private void installDialogBoundsTracker() {
-    getShell().addControlListener(new ControlListener() {
-      @Override
-      public void controlMoved(ControlEvent e) {
-        cachedBounds = getShell().getBounds();
-      }
+	private void installDialogBoundsTracker() {
+		getShell().addControlListener(new ControlListener() {
+			@Override
+			public void controlMoved(ControlEvent e) {
+				cachedBounds = getShell().getBounds();
+			}
 
-      @Override
-      public void controlResized(ControlEvent e) {
-        cachedBounds = getShell().getBounds();
-      }
-    });
-  }
+			@Override
+			public void controlResized(ControlEvent e) {
+				cachedBounds = getShell().getBounds();
+			}
+		});
+	}
 
-  @Override
-  public boolean close() {
-    boolean shellMaximized = getShell().getMaximized();
-    boolean closed = super.close();
-    if (closed && !shellMaximized && cachedBounds != null) {
-      saveBounds(cachedBounds);
-    }
-    return closed;
-  }
+	@Override
+	public boolean close() {
+		boolean shellMaximized = getShell().getMaximized();
+		boolean closed = super.close();
+		if (closed && !shellMaximized && cachedBounds != null) {
+			saveBounds(cachedBounds);
+		}
+		return closed;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Shell
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void configureShell(Shell newShell) {
-    super.configureShell(newShell);
-    newShell.setData(KEY_DIALOG, this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Shell
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void configureShell(Shell newShell) {
+		super.configureShell(newShell);
+		newShell.setData(KEY_DIALOG, this);
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/dialogs/ResizableTitleAreaDialog.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/dialogs/ResizableTitleAreaDialog.java
index 493454473..b1343ed16 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/dialogs/ResizableTitleAreaDialog.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/dialogs/ResizableTitleAreaDialog.java
@@ -29,189 +29,189 @@
  * @coverage core.ui
  */
 public abstract class ResizableTitleAreaDialog extends TitleAreaDialog {
-  /**
-   * Key for accessing {@link Dialog} from its {@link Shell}.
-   */
-  public static final String KEY_DIALOG = "KEY_DIALOG";
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Internal constants
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final String X = "x";
-  private static final String Y = "y";
-  private static final String WIDTH = "width";
-  private static final String HEIGHT = "height";
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance fields
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final AbstractUIPlugin m_plugin;
+	/**
+	 * Key for accessing {@link Dialog} from its {@link Shell}.
+	 */
+	public static final String KEY_DIALOG = "KEY_DIALOG";
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Internal constants
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final String X = "x";
+	private static final String Y = "y";
+	private static final String WIDTH = "width";
+	private static final String HEIGHT = "height";
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance fields
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final AbstractUIPlugin m_plugin;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ResizableTitleAreaDialog(Shell parentShell, AbstractUIPlugin plugin) {
-    super(parentShell);
-    m_plugin = plugin;
-    setShellStyle(getShellStyle() | SWT.RESIZE | SWT.MAX | SWT.APPLICATION_MODAL);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ResizableTitleAreaDialog(Shell parentShell, AbstractUIPlugin plugin) {
+		super(parentShell);
+		m_plugin = plugin;
+		setShellStyle(getShellStyle() | SWT.RESIZE | SWT.MAX | SWT.APPLICATION_MODAL);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Size
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected final Point getInitialSize() {
-    // track the current dialog bounds
-    installDialogBoundsTracker();
-    // answer the size from the previous incarnation
-    Point defaultSize = getDefaultSize();
-    if ((getShellStyle() & SWT.RESIZE) != 0) {
-      Rectangle oldBounds = loadBounds();
-      if (oldBounds != null) {
-        Rectangle displayBounds = getShell().getDisplay().getBounds();
-        int width = Math.min(displayBounds.width, Math.max(oldBounds.width, defaultSize.x));
-        int height = Math.min(displayBounds.height, Math.max(oldBounds.height, defaultSize.y));
-        return new Point(width, height);
-      }
-    }
-    // use default size
-    return defaultSize;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Size
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected final Point getInitialSize() {
+		// track the current dialog bounds
+		installDialogBoundsTracker();
+		// answer the size from the previous incarnation
+		Point defaultSize = getDefaultSize();
+		if ((getShellStyle() & SWT.RESIZE) != 0) {
+			Rectangle oldBounds = loadBounds();
+			if (oldBounds != null) {
+				Rectangle displayBounds = getShell().getDisplay().getBounds();
+				int width = Math.min(displayBounds.width, Math.max(oldBounds.width, defaultSize.x));
+				int height = Math.min(displayBounds.height, Math.max(oldBounds.height, defaultSize.y));
+				return new Point(width, height);
+			}
+		}
+		// use default size
+		return defaultSize;
+	}
 
-  /**
-   * @return the default size of dialog.
-   */
-  protected final Point getDefaultSize() {
-    return super.getInitialSize();
-  }
+	/**
+	 * @return the default size of dialog.
+	 */
+	protected final Point getDefaultSize() {
+		return super.getInitialSize();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Location
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected final Point getInitialLocation(Point initialSize) {
-    Rectangle windowBounds;
-    {
-		Shell windowShell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();
-      windowBounds = windowShell.getBounds();
-    }
-    // answer the location from the previous incarnation
-    Rectangle bounds = loadBounds();
-    if (bounds != null) {
-      int x = bounds.x;
-      int y = bounds.y;
-      int maxX = windowBounds.x + windowBounds.width - initialSize.x;
-      int maxY = windowBounds.y + windowBounds.height - initialSize.y;
-      if (x > maxX) {
-        x = maxX;
-      }
-      if (y > maxY) {
-        y = maxY;
-      }
-      if (x < windowBounds.x) {
-        x = windowBounds.x;
-      }
-      if (y < windowBounds.y) {
-        y = windowBounds.y;
-      }
-      return new Point(x, y);
-    }
-    // default location - centered on workbench window
-    int x = windowBounds.x + (windowBounds.width - initialSize.x) / 2;
-    int y = windowBounds.y + (windowBounds.height - initialSize.y) / 2;
-    return new Point(x, y);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Location
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected final Point getInitialLocation(Point initialSize) {
+		Rectangle windowBounds;
+		{
+			Shell windowShell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();
+			windowBounds = windowShell.getBounds();
+		}
+		// answer the location from the previous incarnation
+		Rectangle bounds = loadBounds();
+		if (bounds != null) {
+			int x = bounds.x;
+			int y = bounds.y;
+			int maxX = windowBounds.x + windowBounds.width - initialSize.x;
+			int maxY = windowBounds.y + windowBounds.height - initialSize.y;
+			if (x > maxX) {
+				x = maxX;
+			}
+			if (y > maxY) {
+				y = maxY;
+			}
+			if (x < windowBounds.x) {
+				x = windowBounds.x;
+			}
+			if (y < windowBounds.y) {
+				y = windowBounds.y;
+			}
+			return new Point(x, y);
+		}
+		// default location - centered on workbench window
+		int x = windowBounds.x + (windowBounds.width - initialSize.x) / 2;
+		int y = windowBounds.y + (windowBounds.height - initialSize.y) / 2;
+		return new Point(x, y);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Bounds
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Loads bounds from {@link IDialogSettings}.
-   */
-  private Rectangle loadBounds() {
-    IDialogSettings settings = getDialogSettings();
-    try {
-      return new Rectangle(settings.getInt(X),
-          settings.getInt(Y),
-          settings.getInt(WIDTH),
-          settings.getInt(HEIGHT));
-    } catch (NumberFormatException e) {
-      return null;
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Bounds
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Loads bounds from {@link IDialogSettings}.
+	 */
+	private Rectangle loadBounds() {
+		IDialogSettings settings = getDialogSettings();
+		try {
+			return new Rectangle(settings.getInt(X),
+					settings.getInt(Y),
+					settings.getInt(WIDTH),
+					settings.getInt(HEIGHT));
+		} catch (NumberFormatException e) {
+			return null;
+		}
+	}
 
-  /**
-   * Saves bounds to {@link IDialogSettings}.
-   */
-  private void saveBounds(Rectangle bounds) {
-    IDialogSettings settings = getDialogSettings();
-    settings.put(X, bounds.x);
-    settings.put(Y, bounds.y);
-    settings.put(WIDTH, bounds.width);
-    settings.put(HEIGHT, bounds.height);
-  }
+	/**
+	 * Saves bounds to {@link IDialogSettings}.
+	 */
+	private void saveBounds(Rectangle bounds) {
+		IDialogSettings settings = getDialogSettings();
+		settings.put(X, bounds.x);
+		settings.put(Y, bounds.y);
+		settings.put(WIDTH, bounds.width);
+		settings.put(HEIGHT, bounds.height);
+	}
 
-  /**
-   * @return the {@link IDialogSettings} for this dialog with this type.
-   */
-  protected IDialogSettings getDialogSettings() {
-    IDialogSettings settings = m_plugin.getDialogSettings();
-    String sectionName = getClass().getName();
-    if (settings.getSection(sectionName) == null) {
-      return settings.addNewSection(sectionName);
-    }
-    return settings.getSection(sectionName);
-  }
+	/**
+	 * @return the {@link IDialogSettings} for this dialog with this type.
+	 */
+	protected IDialogSettings getDialogSettings() {
+		IDialogSettings settings = m_plugin.getDialogSettings();
+		String sectionName = getClass().getName();
+		if (settings.getSection(sectionName) == null) {
+			return settings.addNewSection(sectionName);
+		}
+		return settings.getSection(sectionName);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Size tracking
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected Rectangle cachedBounds;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Size tracking
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected Rectangle cachedBounds;
 
-  private void installDialogBoundsTracker() {
-    getShell().addControlListener(new ControlListener() {
-      @Override
-      public void controlMoved(ControlEvent e) {
-        cachedBounds = getShell().getBounds();
-      }
+	private void installDialogBoundsTracker() {
+		getShell().addControlListener(new ControlListener() {
+			@Override
+			public void controlMoved(ControlEvent e) {
+				cachedBounds = getShell().getBounds();
+			}
 
-      @Override
-      public void controlResized(ControlEvent e) {
-        cachedBounds = getShell().getBounds();
-      }
-    });
-  }
+			@Override
+			public void controlResized(ControlEvent e) {
+				cachedBounds = getShell().getBounds();
+			}
+		});
+	}
 
-  @Override
-  public boolean close() {
-    boolean shellMaximized = getShell().getMaximized();
-    boolean closed = super.close();
-    if (closed && !shellMaximized && cachedBounds != null) {
-      saveBounds(cachedBounds);
-    }
-    return closed;
-  }
+	@Override
+	public boolean close() {
+		boolean shellMaximized = getShell().getMaximized();
+		boolean closed = super.close();
+		if (closed && !shellMaximized && cachedBounds != null) {
+			saveBounds(cachedBounds);
+		}
+		return closed;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Shell
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void configureShell(Shell newShell) {
-    super.configureShell(newShell);
-    newShell.setData(KEY_DIALOG, this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Shell
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void configureShell(Shell newShell) {
+		super.configureShell(newShell);
+		newShell.setData(KEY_DIALOG, this);
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/dialogs/ReusableDialog.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/dialogs/ReusableDialog.java
index 752874688..8137d26d8 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/dialogs/ReusableDialog.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/dialogs/ReusableDialog.java
@@ -21,51 +21,51 @@
  * @coverage core.ui
  */
 public class ReusableDialog extends Dialog {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected ReusableDialog(Shell parentShell) {
-    super(parentShell);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected ReusableDialog(Shell parentShell) {
+		super(parentShell);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Changes for reusing dialog
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final int open() {
-    // prepare Shell
-    if (getShell() == null) {
-      create();
-    }
-    Shell shell = getShell();
-    // send event
-    onBeforeOpen();
-    // open the window
-    shell.open();
-    Display display = shell.getDisplay();
-    while (shell.getVisible()) {
-      if (!display.readAndDispatch()) {
-        display.sleep();
-      }
-    }
-    // result code
-    return getReturnCode();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Changes for reusing dialog
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final int open() {
+		// prepare Shell
+		if (getShell() == null) {
+			create();
+		}
+		Shell shell = getShell();
+		// send event
+		onBeforeOpen();
+		// open the window
+		shell.open();
+		Display display = shell.getDisplay();
+		while (shell.getVisible()) {
+			if (!display.readAndDispatch()) {
+				display.sleep();
+			}
+		}
+		// result code
+		return getReturnCode();
+	}
 
-  @Override
-  public final boolean close() {
-    getShell().setVisible(false);
-    return true;
-  }
+	@Override
+	public final boolean close() {
+		getShell().setVisible(false);
+		return true;
+	}
 
-  /**
-   * This method is invoked directly before opening dialog. This is good place for initializing
-   * controls from data.
-   */
-  protected void onBeforeOpen() {
-  }
+	/**
+	 * This method is invoked directly before opening dialog. This is good place for initializing
+	 * controls from data.
+	 */
+	protected void onBeforeOpen() {
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/dialogs/StringsDialog.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/dialogs/StringsDialog.java
index b2877e5d5..f5b704495 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/dialogs/StringsDialog.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/dialogs/StringsDialog.java
@@ -32,49 +32,49 @@
  * @coverage core.ui
  */
 public class StringsDialog extends TextDialog {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public StringsDialog(Shell parentShell,
-      AbstractUIPlugin plugin,
-      String titleText,
-      String headerText,
-      String footerText) {
-    super(parentShell, plugin, titleText, headerText, footerText);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public StringsDialog(Shell parentShell,
+			AbstractUIPlugin plugin,
+			String titleText,
+			String headerText,
+			String footerText) {
+		super(parentShell, plugin, titleText, headerText, footerText);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Items
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets the items to edit.
-   */
-  public void setItems(String[] items) {
-    setText(StringUtils.join(items, "\n"));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Items
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets the items to edit.
+	 */
+	public void setItems(String[] items) {
+		setText(StringUtils.join(items, "\n"));
+	}
 
-  /**
-   * @return the edited items.
-   */
-  public String[] getItems() {
-    return ExecutionUtils.runObjectLog(new RunnableObjectEx<String[]>() {
-      @Override
-      public String[] runObject() throws Exception {
-        List<String> strings = Lists.newArrayList();
-        BufferedReader br = new BufferedReader(new StringReader(getText()));
-        while (true) {
-          String s = br.readLine();
-          if (s == null) {
-            break;
-          }
-          strings.add(s);
-        }
-        return strings.toArray(new String[strings.size()]);
-      }
-    }, ArrayUtils.EMPTY_STRING_ARRAY);
-  }
+	/**
+	 * @return the edited items.
+	 */
+	public String[] getItems() {
+		return ExecutionUtils.runObjectLog(new RunnableObjectEx<String[]>() {
+			@Override
+			public String[] runObject() throws Exception {
+				List<String> strings = Lists.newArrayList();
+				BufferedReader br = new BufferedReader(new StringReader(getText()));
+				while (true) {
+					String s = br.readLine();
+					if (s == null) {
+						break;
+					}
+					strings.add(s);
+				}
+				return strings.toArray(new String[strings.size()]);
+			}
+		}, ArrayUtils.EMPTY_STRING_ARRAY);
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/dialogs/TextDialog.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/dialogs/TextDialog.java
index 9a79a4692..8e9ef8118 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/dialogs/TextDialog.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/dialogs/TextDialog.java
@@ -30,90 +30,90 @@
  * @coverage core.ui
  */
 public class TextDialog extends ResizableDialog {
-  private final String m_titleText;
-  private final String m_headerText;
-  private final String m_footerText;
+	private final String m_titleText;
+	private final String m_headerText;
+	private final String m_footerText;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public TextDialog(Shell parentShell,
-      AbstractUIPlugin plugin,
-      String titleText,
-      String headerText,
-      String footerText) {
-    super(parentShell, plugin);
-    m_titleText = titleText;
-    m_headerText = headerText;
-    m_footerText = footerText;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public TextDialog(Shell parentShell,
+			AbstractUIPlugin plugin,
+			String titleText,
+			String headerText,
+			String footerText) {
+		super(parentShell, plugin);
+		m_titleText = titleText;
+		m_headerText = headerText;
+		m_footerText = footerText;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Text
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private String m_text;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Text
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private String m_text;
 
-  /**
-   * Sets the text to edit.
-   */
-  public final void setText(String text) {
-    m_text = text;
-  }
+	/**
+	 * Sets the text to edit.
+	 */
+	public final void setText(String text) {
+		m_text = text;
+	}
 
-  /**
-   * @return the edited text.
-   */
-  public final String getText() {
-    return m_text;
-  }
+	/**
+	 * @return the edited text.
+	 */
+	public final String getText() {
+		return m_text;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected Text m_textWidget;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected Text m_textWidget;
 
-  @Override
-  protected Control createDialogArea(Composite parent) {
-    Composite area = (Composite) super.createDialogArea(parent);
-    GridLayoutFactory.create(area);
-    // header
-    new Label(area, SWT.NONE).setText(m_headerText);
-    // Text widget
-    {
-      m_textWidget = new Text(area, SWT.BORDER | SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
-      GridDataFactory.create(m_textWidget).grab().fill().hintVC(10);
-      m_textWidget.setText(m_text);
-      // handle Ctrl+Enter as OK
-      m_textWidget.addKeyListener(new KeyAdapter() {
-        @Override
-        public void keyPressed(KeyEvent e) {
-          if (e.stateMask == SWT.CTRL && e.keyCode == SWT.CR) {
-            okPressed();
-          }
-        }
-      });
-    }
-    // footer
-    new Label(area, SWT.NONE).setText(m_footerText);
-    //
-    return area;
-  }
+	@Override
+	protected Control createDialogArea(Composite parent) {
+		Composite area = (Composite) super.createDialogArea(parent);
+		GridLayoutFactory.create(area);
+		// header
+		new Label(area, SWT.NONE).setText(m_headerText);
+		// Text widget
+		{
+			m_textWidget = new Text(area, SWT.BORDER | SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
+			GridDataFactory.create(m_textWidget).grab().fill().hintVC(10);
+			m_textWidget.setText(m_text);
+			// handle Ctrl+Enter as OK
+			m_textWidget.addKeyListener(new KeyAdapter() {
+				@Override
+				public void keyPressed(KeyEvent e) {
+					if (e.stateMask == SWT.CTRL && e.keyCode == SWT.CR) {
+						okPressed();
+					}
+				}
+			});
+		}
+		// footer
+		new Label(area, SWT.NONE).setText(m_footerText);
+		//
+		return area;
+	}
 
-  @Override
-  protected void configureShell(Shell newShell) {
-    super.configureShell(newShell);
-    newShell.setText(m_titleText);
-  }
+	@Override
+	protected void configureShell(Shell newShell) {
+		super.configureShell(newShell);
+		newShell.setText(m_titleText);
+	}
 
-  @Override
-  protected void okPressed() {
-    m_text = m_textWidget.getText();
-    super.okPressed();
-  }
+	@Override
+	protected void okPressed() {
+		m_text = m_textWidget.getText();
+		super.okPressed();
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/dialogs/color/AbstractColorDialog.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/dialogs/color/AbstractColorDialog.java
index bc495018c..b5dfb3b85 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/dialogs/color/AbstractColorDialog.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/dialogs/color/AbstractColorDialog.java
@@ -34,151 +34,151 @@
  * @coverage core.ui
  */
 public abstract class AbstractColorDialog extends ReusableDialog {
-  private ColorInfo m_colorInfo;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractColorDialog(Shell parentShell) {
-    super(parentShell);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Color access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the selected {@link ColorInfo}.
-   */
-  public final ColorInfo getColorInfo() {
-    return m_colorInfo;
-  }
-
-  /**
-   * Sets initial {@link ColorInfo}.
-   */
-  public void setColorInfo(ColorInfo colorInfo) {
-    m_colorInfo = colorInfo;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Active page access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the title of currently selected page.
-   */
-  protected final String getSelectedPageTitle() {
-    int selectionIndex = m_tabFolder.getSelectionIndex();
-    return m_tabFolder.getItem(selectionIndex).getText();
-  }
-
-  /**
-   * Selects the page with given title.
-   */
-  protected final void selectPageByTitle(String title) {
-    TabItem[] tabItems = m_tabFolder.getItems();
-    for (int i = 0; i < tabItems.length; i++) {
-      TabItem tabItem = tabItems[i];
-      if (tabItem.getText().equals(title)) {
-        m_tabFolder.setSelection(new TabItem[]{tabItem});
-        break;
-      }
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private ColorPreviewCanvas m_previewCanvas;
-  private TabFolder m_tabFolder;
-
-  @Override
-  protected final Control createDialogArea(Composite parent) {
-    Composite area = (Composite) super.createDialogArea(parent);
-    area.setLayout(new GridLayout());
-    // create preview group
-    {
-      Group group = new Group(area, SWT.NONE);
-      GridDataFactory.create(group).fillH();
-      group.setLayout(new FillLayout());
-      group.setText(Messages.AbstractColorDialog_previewGroup);
-      //
-      m_previewCanvas = new ColorPreviewCanvas(group, SWT.NONE, showShortTextInColorPreview());
-    }
-    // create folder for tabs
-    {
-      m_tabFolder = new TabFolder(area, SWT.NONE);
-      m_tabFolder.setLayoutData(new GridData(GridData.FILL_BOTH));
-      addPages(m_tabFolder);
-    }
-    //
-    return area;
-  }
-
-  /**
-   * Overridden to return <code>true</code> if the created {@link ColorPreviewCanvas} should have
-   * the color shown with the short-text version.
-   */
-  protected boolean showShortTextInColorPreview() {
-    return false;
-  }
-
-  @Override
-  protected void configureShell(Shell newShell) {
-    super.configureShell(newShell);
-    newShell.setText(Messages.AbstractColorDialog_title);
-  }
-
-  @Override
-  protected void onBeforeOpen() {
-    m_previewCanvas.setColor(m_colorInfo);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Pages
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds new page with given title and {@link AbstractColorsComposite}.
-   */
-  protected final void addPage(String title, AbstractColorsComposite composite) {
-    TabItem tabItem = new TabItem(m_tabFolder, SWT.NONE);
-    tabItem.setText(title);
-    tabItem.setControl(composite);
-  }
-
-  /**
-   * Adds pages with {@link AbstractColorsComposite}'s.
-   */
-  protected abstract void addPages(Composite parent);
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Internal access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets the {@link ColorInfo} that should be used as result.
-   */
-  public final void setResultColor(ColorInfo colorInfo) {
-    m_colorInfo = colorInfo;
-    m_previewCanvas.setColor(m_colorInfo);
-  }
-
-  /**
-   * Closes dialog with "OK" result.
-   */
-  public final void closeOk() {
-    if (m_colorInfo != null) {
-      buttonPressed(IDialogConstants.OK_ID);
-    }
-  }
+	private ColorInfo m_colorInfo;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractColorDialog(Shell parentShell) {
+		super(parentShell);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Color access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the selected {@link ColorInfo}.
+	 */
+	public final ColorInfo getColorInfo() {
+		return m_colorInfo;
+	}
+
+	/**
+	 * Sets initial {@link ColorInfo}.
+	 */
+	public void setColorInfo(ColorInfo colorInfo) {
+		m_colorInfo = colorInfo;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Active page access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the title of currently selected page.
+	 */
+	protected final String getSelectedPageTitle() {
+		int selectionIndex = m_tabFolder.getSelectionIndex();
+		return m_tabFolder.getItem(selectionIndex).getText();
+	}
+
+	/**
+	 * Selects the page with given title.
+	 */
+	protected final void selectPageByTitle(String title) {
+		TabItem[] tabItems = m_tabFolder.getItems();
+		for (int i = 0; i < tabItems.length; i++) {
+			TabItem tabItem = tabItems[i];
+			if (tabItem.getText().equals(title)) {
+				m_tabFolder.setSelection(new TabItem[]{tabItem});
+				break;
+			}
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private ColorPreviewCanvas m_previewCanvas;
+	private TabFolder m_tabFolder;
+
+	@Override
+	protected final Control createDialogArea(Composite parent) {
+		Composite area = (Composite) super.createDialogArea(parent);
+		area.setLayout(new GridLayout());
+		// create preview group
+		{
+			Group group = new Group(area, SWT.NONE);
+			GridDataFactory.create(group).fillH();
+			group.setLayout(new FillLayout());
+			group.setText(Messages.AbstractColorDialog_previewGroup);
+			//
+			m_previewCanvas = new ColorPreviewCanvas(group, SWT.NONE, showShortTextInColorPreview());
+		}
+		// create folder for tabs
+		{
+			m_tabFolder = new TabFolder(area, SWT.NONE);
+			m_tabFolder.setLayoutData(new GridData(GridData.FILL_BOTH));
+			addPages(m_tabFolder);
+		}
+		//
+		return area;
+	}
+
+	/**
+	 * Overridden to return <code>true</code> if the created {@link ColorPreviewCanvas} should have
+	 * the color shown with the short-text version.
+	 */
+	protected boolean showShortTextInColorPreview() {
+		return false;
+	}
+
+	@Override
+	protected void configureShell(Shell newShell) {
+		super.configureShell(newShell);
+		newShell.setText(Messages.AbstractColorDialog_title);
+	}
+
+	@Override
+	protected void onBeforeOpen() {
+		m_previewCanvas.setColor(m_colorInfo);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Pages
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds new page with given title and {@link AbstractColorsComposite}.
+	 */
+	protected final void addPage(String title, AbstractColorsComposite composite) {
+		TabItem tabItem = new TabItem(m_tabFolder, SWT.NONE);
+		tabItem.setText(title);
+		tabItem.setControl(composite);
+	}
+
+	/**
+	 * Adds pages with {@link AbstractColorsComposite}'s.
+	 */
+	protected abstract void addPages(Composite parent);
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Internal access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets the {@link ColorInfo} that should be used as result.
+	 */
+	public final void setResultColor(ColorInfo colorInfo) {
+		m_colorInfo = colorInfo;
+		m_previewCanvas.setColor(m_colorInfo);
+	}
+
+	/**
+	 * Closes dialog with "OK" result.
+	 */
+	public final void closeOk() {
+		if (m_colorInfo != null) {
+			buttonPressed(IDialogConstants.OK_ID);
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/dialogs/color/AbstractColorsComposite.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/dialogs/color/AbstractColorsComposite.java
index 6f14588a2..3ada53364 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/dialogs/color/AbstractColorsComposite.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/dialogs/color/AbstractColorsComposite.java
@@ -19,15 +19,15 @@
  * @coverage core.ui
  */
 public abstract class AbstractColorsComposite extends Composite {
-  protected final AbstractColorDialog m_colorDialog;
+	protected final AbstractColorDialog m_colorDialog;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractColorsComposite(Composite parent, int style, AbstractColorDialog colorDialog) {
-    super(parent, style);
-    m_colorDialog = colorDialog;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractColorsComposite(Composite parent, int style, AbstractColorDialog colorDialog) {
+		super(parent, style);
+		m_colorDialog = colorDialog;
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/dialogs/color/AbstractColorsGridComposite.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/dialogs/color/AbstractColorsGridComposite.java
index 7889b64e2..7ef664f84 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/dialogs/color/AbstractColorsGridComposite.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/dialogs/color/AbstractColorsGridComposite.java
@@ -36,148 +36,148 @@
  * @coverage core.ui
  */
 public abstract class AbstractColorsGridComposite extends AbstractColorsComposite {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractColorsGridComposite(Composite parent, int style, AbstractColorDialog colorDialog) {
-    super(parent, style, colorDialog);
-    //
-    setLayout(new GridLayout());
-    createColorHint();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractColorsGridComposite(Composite parent, int style, AbstractColorDialog colorDialog) {
+		super(parent, style, colorDialog);
+		//
+		setLayout(new GridLayout());
+		createColorHint();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Color hint
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private ColorPreviewCanvas m_colorHintCanvas;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Color hint
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private ColorPreviewCanvas m_colorHintCanvas;
 
-  /**
-   * Creates {@link ColorPreviewCanvas} for hovered {@link ColorInfo}.
-   */
-  private void createColorHint() {
-    Group group = new Group(this, SWT.NONE);
-    group.setText(Messages.AbstractColorsGridComposite_colorHintGroup);
-    group.setLayout(new FillLayout());
-    group.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));
-    //
-    m_colorHintCanvas = new ColorPreviewCanvas(group, SWT.NONE, showShortTextInColorPreview());
-  }
+	/**
+	 * Creates {@link ColorPreviewCanvas} for hovered {@link ColorInfo}.
+	 */
+	private void createColorHint() {
+		Group group = new Group(this, SWT.NONE);
+		group.setText(Messages.AbstractColorsGridComposite_colorHintGroup);
+		group.setLayout(new FillLayout());
+		group.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));
+		//
+		m_colorHintCanvas = new ColorPreviewCanvas(group, SWT.NONE, showShortTextInColorPreview());
+	}
 
-  /**
-   * Overridden to return <code>true</code> if the created {@link ColorPreviewCanvas} should have
-   * the color shown with the short-text version.
-   */
-  protected boolean showShortTextInColorPreview() {
-    return false;
-  }
+	/**
+	 * Overridden to return <code>true</code> if the created {@link ColorPreviewCanvas} should have
+	 * the color shown with the short-text version.
+	 */
+	protected boolean showShortTextInColorPreview() {
+		return false;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Color grids
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final List<ColorsGridComposite> m_colorsGrids = Lists.newArrayList();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Color grids
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final List<ColorsGridComposite> m_colorsGrids = Lists.newArrayList();
 
-  /**
-   * Adds new {@link Group} with given title and fills it with {@link ColorsGridComposite} with
-   * given colors.
-   *
-   * @return creates {@link ColorsGridComposite} to allow futher configuring it.
-   */
-  protected final ColorsGridComposite createColorsGroup(Composite parent,
-      String title,
-      ColorInfo[] colors) {
-    // create group
-    Group group = new Group(parent, SWT.NONE);
-    group.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-    group.setLayout(new FillLayout());
-    if (title != null) {
-      group.setText(title);
-    }
-    // create colors grid
-    return createColorsGrid(group, colors);
-  }
+	/**
+	 * Adds new {@link Group} with given title and fills it with {@link ColorsGridComposite} with
+	 * given colors.
+	 *
+	 * @return creates {@link ColorsGridComposite} to allow futher configuring it.
+	 */
+	protected final ColorsGridComposite createColorsGroup(Composite parent,
+			String title,
+			ColorInfo[] colors) {
+		// create group
+		Group group = new Group(parent, SWT.NONE);
+		group.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+		group.setLayout(new FillLayout());
+		if (title != null) {
+			group.setText(title);
+		}
+		// create colors grid
+		return createColorsGrid(group, colors);
+	}
 
-  /**
-   * @return the new {@link ColorsGridComposite} created on given parent.
-   */
-  protected final ColorsGridComposite createColorsGrid(Composite parent, ColorInfo[] colors) {
-    ColorsGridComposite colorsGrid = new ColorsGridComposite(parent, SWT.NONE);
-    colorsGrid.setColors(colors);
-    m_colorsGrids.add(colorsGrid);
-    // add listeners
-    colorsGrid.addListener(SWT.DefaultSelection, new Listener() {
-      @Override
-      public void handleEvent(Event event) {
-        ColorInfo colorInfo = (ColorInfo) event.data;
-        m_colorHintCanvas.setColor(colorInfo);
-      }
-    });
-    colorsGrid.addListener(SWT.Selection, new Listener() {
-      @Override
-      public void handleEvent(Event event) {
-        ColorInfo colorInfo = (ColorInfo) event.data;
-        m_colorDialog.setResultColor(colorInfo);
-      }
-    });
-    colorsGrid.addListener(SWT.MouseDoubleClick, new Listener() {
-      @Override
-      public void handleEvent(Event event) {
-        m_colorDialog.closeOk();
-      }
-    });
-    //
-    return colorsGrid;
-  }
+	/**
+	 * @return the new {@link ColorsGridComposite} created on given parent.
+	 */
+	protected final ColorsGridComposite createColorsGrid(Composite parent, ColorInfo[] colors) {
+		ColorsGridComposite colorsGrid = new ColorsGridComposite(parent, SWT.NONE);
+		colorsGrid.setColors(colors);
+		m_colorsGrids.add(colorsGrid);
+		// add listeners
+		colorsGrid.addListener(SWT.DefaultSelection, new Listener() {
+			@Override
+			public void handleEvent(Event event) {
+				ColorInfo colorInfo = (ColorInfo) event.data;
+				m_colorHintCanvas.setColor(colorInfo);
+			}
+		});
+		colorsGrid.addListener(SWT.Selection, new Listener() {
+			@Override
+			public void handleEvent(Event event) {
+				ColorInfo colorInfo = (ColorInfo) event.data;
+				m_colorDialog.setResultColor(colorInfo);
+			}
+		});
+		colorsGrid.addListener(SWT.MouseDoubleClick, new Listener() {
+			@Override
+			public void handleEvent(Event event) {
+				m_colorDialog.closeOk();
+			}
+		});
+		//
+		return colorsGrid;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Sorting
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Creates group for sorting colors in added {@link ColorsGridComposite}'s.
-   */
-  protected final Group createSortGroup(Composite parent,
-      List<String> titles,
-      List<ColorInfoComparator> comparators) {
-    Group group = new Group(parent, SWT.NONE);
-    group.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-    group.setLayout(new GridLayout(titles.size(), false));
-    group.setText(Messages.AbstractColorsGridComposite_sortGroup);
-    //
-    for (int i = 0; i < titles.size(); i++) {
-      final String title = titles.get(i);
-      final ColorInfoComparator comparator = comparators.get(i);
-      // create radio button
-      Button button = new Button(group, SWT.RADIO);
-      button.setText(title);
-      if (i == 0) {
-        button.setSelection(true);
-      }
-      // add listener
-      button.addSelectionListener(new SelectionAdapter() {
-        @Override
-        public void widgetSelected(SelectionEvent e) {
-          setComparator(comparator);
-        }
-      });
-    }
-    //
-    return group;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Sorting
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Creates group for sorting colors in added {@link ColorsGridComposite}'s.
+	 */
+	protected final Group createSortGroup(Composite parent,
+			List<String> titles,
+			List<ColorInfoComparator> comparators) {
+		Group group = new Group(parent, SWT.NONE);
+		group.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+		group.setLayout(new GridLayout(titles.size(), false));
+		group.setText(Messages.AbstractColorsGridComposite_sortGroup);
+		//
+		for (int i = 0; i < titles.size(); i++) {
+			final String title = titles.get(i);
+			final ColorInfoComparator comparator = comparators.get(i);
+			// create radio button
+			Button button = new Button(group, SWT.RADIO);
+			button.setText(title);
+			if (i == 0) {
+				button.setSelection(true);
+			}
+			// add listener
+			button.addSelectionListener(new SelectionAdapter() {
+				@Override
+				public void widgetSelected(SelectionEvent e) {
+					setComparator(comparator);
+				}
+			});
+		}
+		//
+		return group;
+	}
 
-  /**
-   * Sorts colors in all added {@link ColorsGridComposite}'s using given comparator.
-   */
-  protected final void setComparator(ColorInfoComparator comparator) {
-    for (ColorsGridComposite colorsGrid : m_colorsGrids) {
-      Arrays.sort(colorsGrid.getColors(), comparator);
-      colorsGrid.redraw();
-    }
-  }
+	/**
+	 * Sorts colors in all added {@link ColorsGridComposite}'s using given comparator.
+	 */
+	protected final void setComparator(ColorInfoComparator comparator) {
+		for (ColorsGridComposite colorsGrid : m_colorsGrids) {
+			Arrays.sort(colorsGrid.getColors(), comparator);
+			colorsGrid.redraw();
+		}
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/dialogs/color/ColorInfo.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/dialogs/color/ColorInfo.java
index 620903b53..862e5bb28 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/dialogs/color/ColorInfo.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/dialogs/color/ColorInfo.java
@@ -19,201 +19,201 @@
  * @coverage core.ui
  */
 public final class ColorInfo {
-  public final String m_name;
-  public final String m_description;
-  public final RGB m_rgb;
-  public final float m_hue;
-  public final float m_saturation;
-  public final float m_lightness;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ColorInfo(int red, int green, int blue) {
-    this(null, null, new RGB(red, green, blue));
-  }
-
-  public ColorInfo(String name, int red, int green, int blue) {
-    this(name, null, new RGB(red, green, blue));
-  }
-
-  public ColorInfo(String name, RGB rgb) {
-    this(name, null, rgb);
-  }
-
-  public ColorInfo(String name, String description, RGB rgb) {
-    m_name = name;
-    m_description = description;
-    m_rgb = rgb;
-    {
-      float[] hsl = RGB_to_HSL(m_rgb.red, m_rgb.green, m_rgb.blue);
-      m_hue = hsl[0];
-      m_saturation = hsl[1];
-      m_lightness = hsl[2];
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return name to show for user
-   */
-  public String getName() {
-    if (m_name != null) {
-      return m_name;
-    }
-    return "";
-  }
-
-  /**
-   * @return title to show for user
-   */
-  public String getTitle() {
-    String title = "";
-    if (m_name != null) {
-      title += m_name + " ";
-    }
-    if (m_rgb != null) {
-      title += "#" + getHexRGB();
-      title += " H:" + (int) (m_hue * 360) + "deg";
-      title += " S:" + (int) (m_saturation * 100) + "%";
-      title += " L:" + (int) (m_lightness * 100) + "%";
-    }
-    return title;
-  }
-
-  /**
-   * @return RGB object of this color.
-   */
-  public RGB getRGB() {
-    return m_rgb;
-  }
-
-  /**
-   * @return RGB of this color in hex format, for example for white - "ffffff".
-   */
-  public String getHexRGB() {
-    return getHexPartRGB(m_rgb.red) + getHexPartRGB(m_rgb.green) + getHexPartRGB(m_rgb.blue);
-  }
-
-  /**
-   * @return RGB of this color in comma format, for example for white - "255, 255, 255".
-   */
-  public String getCommaRGB() {
-    return m_rgb.red + ", " + m_rgb.green + ", " + m_rgb.blue;
-  }
-
-  private static String getHexPartRGB(int value) {
-    String result = Integer.toHexString(value);
-    if (result.length() < 2) {
-      result = "0" + value;
-    }
-    return result;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Data
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Object m_data;
-
-  /**
-   * @return the data associated with this {@link ColorInfo}.
-   */
-  public Object getData() {
-    return m_data;
-  }
-
-  /**
-   * Sets the data associated with this {@link ColorInfo}.
-   */
-  public void setData(Object data) {
-    m_data = data;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AWT color
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Object m_toolkitColor;
-
-  /**
-   * @return toolkit related color object.
-   */
-  public Object getToolkitColor() {
-    return m_toolkitColor;
-  }
-
-  /**
-   * Sets toolkit related color object.
-   */
-  public void setToolkitColor(Object toolkitColor) {
-    m_toolkitColor = toolkitColor;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Convert color from RGB to HSL.
-   *
-   * See http://130.113.54.154/~monger/hsl-rgb.html for algorithm.
-   */
-  private static float[] RGB_to_HSL(int r, int g, int b) {
-    float hue = 0.0f;
-    float saturation = 0.0f;
-    float lightness = 0.0f;
-    //
-    float r_color = r / 255f;
-    float g_color = g / 255f;
-    float b_color = b / 255f;
-    float min_color = Math.min(Math.min(r_color, g_color), b_color);
-    float max_color = Math.max(Math.max(r_color, g_color), b_color);
-    // prepare lightness
-    lightness = (max_color + min_color) / 2.0f;
-    // prepare hue and saturation
-    float dist_color = max_color - min_color;
-    if (dist_color == 0.0f) {
-      hue = 0.0f;
-      saturation = 0.0f;
-    } else {
-      // prepare saturation
-      if (lightness < 0.5f) {
-        saturation = dist_color / (max_color + min_color);
-      } else {
-        saturation = dist_color / (2.0f - max_color - min_color);
-      }
-      // prepare hue
-      if (equals(r_color, max_color)) {
-        hue = (g_color - b_color) / dist_color;
-      } else if (equals(g_color, max_color)) {
-        hue = 2.0f + (b_color - r_color) / dist_color;
-      } else if (equals(b_color, max_color)) {
-        hue = 4.0f + (r_color - g_color) / dist_color;
-      }
-      // convert hue into [0, 1] of interval [0, 360]
-      if (hue < 0.0f) {
-        hue++;
-      }
-      hue /= 6f;
-    }
-    //
-    return new float[]{hue, saturation, lightness};
-  }
-
-  /**
-   * Checks if two given {@link float} are equal.
-   */
-  private static boolean equals(float a, float b) {
-    return Math.abs(a - b) < 0.00001;
-  }
+	public final String m_name;
+	public final String m_description;
+	public final RGB m_rgb;
+	public final float m_hue;
+	public final float m_saturation;
+	public final float m_lightness;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ColorInfo(int red, int green, int blue) {
+		this(null, null, new RGB(red, green, blue));
+	}
+
+	public ColorInfo(String name, int red, int green, int blue) {
+		this(name, null, new RGB(red, green, blue));
+	}
+
+	public ColorInfo(String name, RGB rgb) {
+		this(name, null, rgb);
+	}
+
+	public ColorInfo(String name, String description, RGB rgb) {
+		m_name = name;
+		m_description = description;
+		m_rgb = rgb;
+		{
+			float[] hsl = RGB_to_HSL(m_rgb.red, m_rgb.green, m_rgb.blue);
+			m_hue = hsl[0];
+			m_saturation = hsl[1];
+			m_lightness = hsl[2];
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return name to show for user
+	 */
+	public String getName() {
+		if (m_name != null) {
+			return m_name;
+		}
+		return "";
+	}
+
+	/**
+	 * @return title to show for user
+	 */
+	public String getTitle() {
+		String title = "";
+		if (m_name != null) {
+			title += m_name + " ";
+		}
+		if (m_rgb != null) {
+			title += "#" + getHexRGB();
+			title += " H:" + (int) (m_hue * 360) + "deg";
+			title += " S:" + (int) (m_saturation * 100) + "%";
+			title += " L:" + (int) (m_lightness * 100) + "%";
+		}
+		return title;
+	}
+
+	/**
+	 * @return RGB object of this color.
+	 */
+	public RGB getRGB() {
+		return m_rgb;
+	}
+
+	/**
+	 * @return RGB of this color in hex format, for example for white - "ffffff".
+	 */
+	public String getHexRGB() {
+		return getHexPartRGB(m_rgb.red) + getHexPartRGB(m_rgb.green) + getHexPartRGB(m_rgb.blue);
+	}
+
+	/**
+	 * @return RGB of this color in comma format, for example for white - "255, 255, 255".
+	 */
+	public String getCommaRGB() {
+		return m_rgb.red + ", " + m_rgb.green + ", " + m_rgb.blue;
+	}
+
+	private static String getHexPartRGB(int value) {
+		String result = Integer.toHexString(value);
+		if (result.length() < 2) {
+			result = "0" + value;
+		}
+		return result;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Data
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Object m_data;
+
+	/**
+	 * @return the data associated with this {@link ColorInfo}.
+	 */
+	public Object getData() {
+		return m_data;
+	}
+
+	/**
+	 * Sets the data associated with this {@link ColorInfo}.
+	 */
+	public void setData(Object data) {
+		m_data = data;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AWT color
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Object m_toolkitColor;
+
+	/**
+	 * @return toolkit related color object.
+	 */
+	public Object getToolkitColor() {
+		return m_toolkitColor;
+	}
+
+	/**
+	 * Sets toolkit related color object.
+	 */
+	public void setToolkitColor(Object toolkitColor) {
+		m_toolkitColor = toolkitColor;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Convert color from RGB to HSL.
+	 *
+	 * See http://130.113.54.154/~monger/hsl-rgb.html for algorithm.
+	 */
+	private static float[] RGB_to_HSL(int r, int g, int b) {
+		float hue = 0.0f;
+		float saturation = 0.0f;
+		float lightness = 0.0f;
+		//
+		float r_color = r / 255f;
+		float g_color = g / 255f;
+		float b_color = b / 255f;
+		float min_color = Math.min(Math.min(r_color, g_color), b_color);
+		float max_color = Math.max(Math.max(r_color, g_color), b_color);
+		// prepare lightness
+		lightness = (max_color + min_color) / 2.0f;
+		// prepare hue and saturation
+		float dist_color = max_color - min_color;
+		if (dist_color == 0.0f) {
+			hue = 0.0f;
+			saturation = 0.0f;
+		} else {
+			// prepare saturation
+			if (lightness < 0.5f) {
+				saturation = dist_color / (max_color + min_color);
+			} else {
+				saturation = dist_color / (2.0f - max_color - min_color);
+			}
+			// prepare hue
+			if (equals(r_color, max_color)) {
+				hue = (g_color - b_color) / dist_color;
+			} else if (equals(g_color, max_color)) {
+				hue = 2.0f + (b_color - r_color) / dist_color;
+			} else if (equals(b_color, max_color)) {
+				hue = 4.0f + (r_color - g_color) / dist_color;
+			}
+			// convert hue into [0, 1] of interval [0, 360]
+			if (hue < 0.0f) {
+				hue++;
+			}
+			hue /= 6f;
+		}
+		//
+		return new float[]{hue, saturation, lightness};
+	}
+
+	/**
+	 * Checks if two given {@link float} are equal.
+	 */
+	private static boolean equals(float a, float b) {
+		return Math.abs(a - b) < 0.00001;
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/dialogs/color/ColorInfoComparator.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/dialogs/color/ColorInfoComparator.java
index 40538a231..03f4673c2 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/dialogs/color/ColorInfoComparator.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/dialogs/color/ColorInfoComparator.java
@@ -19,68 +19,68 @@
  * @coverage core.ui
  */
 public class ColorInfoComparator implements Comparator<ColorInfo> {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instances
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final ColorInfoComparator TONE = new ColorInfoComparator();
-  public static final ColorInfoComparator NAME = new ColorInfoComparator();
-  public static final ColorInfoComparator HUE = new ColorInfoComparator();
-  public static final ColorInfoComparator SATURATION = new ColorInfoComparator();
-  public static final ColorInfoComparator LIGHTNESS = new ColorInfoComparator();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instances
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final ColorInfoComparator TONE = new ColorInfoComparator();
+	public static final ColorInfoComparator NAME = new ColorInfoComparator();
+	public static final ColorInfoComparator HUE = new ColorInfoComparator();
+	public static final ColorInfoComparator SATURATION = new ColorInfoComparator();
+	public static final ColorInfoComparator LIGHTNESS = new ColorInfoComparator();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private ColorInfoComparator() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private ColorInfoComparator() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Comparator
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public int compare(ColorInfo color_1, ColorInfo color_2) {
-    if (this == TONE) {
-      return getTone(color_1) - getTone(color_2);
-    }
-    if (this == NAME) {
-      return color_1.m_name.compareTo(color_2.m_name);
-    }
-    if (this == HUE) {
-      int hueCompare = Float.compare(color_1.m_hue, color_2.m_hue);
-      if (hueCompare != 0) {
-        return hueCompare;
-      }
-      return SATURATION.compare(color_1, color_2);
-    }
-    if (this == SATURATION) {
-      int saturationCompare = Float.compare(color_1.m_saturation, color_2.m_saturation);
-      if (saturationCompare != 0) {
-        return saturationCompare;
-      }
-      return LIGHTNESS.compare(color_1, color_2);
-    }
-    if (this == LIGHTNESS) {
-      return Float.compare(color_1.m_lightness, color_2.m_lightness);
-    }
-    return 0;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Comparator
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public int compare(ColorInfo color_1, ColorInfo color_2) {
+		if (this == TONE) {
+			return getTone(color_1) - getTone(color_2);
+		}
+		if (this == NAME) {
+			return color_1.m_name.compareTo(color_2.m_name);
+		}
+		if (this == HUE) {
+			int hueCompare = Float.compare(color_1.m_hue, color_2.m_hue);
+			if (hueCompare != 0) {
+				return hueCompare;
+			}
+			return SATURATION.compare(color_1, color_2);
+		}
+		if (this == SATURATION) {
+			int saturationCompare = Float.compare(color_1.m_saturation, color_2.m_saturation);
+			if (saturationCompare != 0) {
+				return saturationCompare;
+			}
+			return LIGHTNESS.compare(color_1, color_2);
+		}
+		if (this == LIGHTNESS) {
+			return Float.compare(color_1.m_lightness, color_2.m_lightness);
+		}
+		return 0;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static int getTone(ColorInfo colorInfo) {
-    int r = colorInfo.m_rgb.red;
-    int g = colorInfo.m_rgb.green;
-    int b = colorInfo.m_rgb.blue;
-    int result = r << 16 | g << 8 | b;
-    return result;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static int getTone(ColorInfo colorInfo) {
+		int r = colorInfo.m_rgb.red;
+		int g = colorInfo.m_rgb.green;
+		int b = colorInfo.m_rgb.blue;
+		int result = r << 16 | g << 8 | b;
+		return result;
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/dialogs/color/ColorPreviewCanvas.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/dialogs/color/ColorPreviewCanvas.java
index 798bff556..656d63c80 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/dialogs/color/ColorPreviewCanvas.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/dialogs/color/ColorPreviewCanvas.java
@@ -30,116 +30,116 @@
  * @coverage core.ui
  */
 public final class ColorPreviewCanvas extends Canvas {
-  private ColorInfo m_color;
-  private final boolean m_showShortText;
+	private ColorInfo m_color;
+	private final boolean m_showShortText;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ColorPreviewCanvas(Composite parent, int style, boolean showShortText) {
-    super(parent, style);
-    m_showShortText = showShortText;
-    addPaintListener(new PaintListener() {
-      @Override
-      public void paintControl(PaintEvent e) {
-        onPaint(e.gc);
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ColorPreviewCanvas(Composite parent, int style, boolean showShortText) {
+		super(parent, style);
+		m_showShortText = showShortText;
+		addPaintListener(new PaintListener() {
+			@Override
+			public void paintControl(PaintEvent e) {
+				onPaint(e.gc);
+			}
+		});
+	}
 
-  public ColorPreviewCanvas(Composite parent, int style) {
-    this(parent, style, false);
-  }
+	public ColorPreviewCanvas(Composite parent, int style) {
+		this(parent, style, false);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void setColor(ColorInfo color) {
-    m_color = color;
-    redraw();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void setColor(ColorInfo color) {
+		m_color = color;
+		redraw();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Painting
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Point computeSize(int wHint, int hHint, boolean changed) {
-    int width = wHint;
-    int height = 70;
-    return new Point(width, height);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Painting
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Point computeSize(int wHint, int hHint, boolean changed) {
+		int width = wHint;
+		int height = 70;
+		return new Point(width, height);
+	}
 
-  private void onPaint(GC gc) {
-    Rectangle r = getClientArea();
-    if (m_color != null) {
-      int y = 0;
-      // draw title
-      {
-        String title;
-        if (m_showShortText) {
-          title = m_color.getName();
-        } else {
-          title = m_color.getTitle();
-        }
-        int height = gc.stringExtent(title).y;
-        drawCenteredText(gc, title, 0, 0, r.width, height);
-        y += height;
-      }
-      // draw description if present
-      if (m_color.m_description != null) {
-        String text = m_color.m_description;
-        int height = gc.stringExtent(text).y;
-        drawCenteredText(gc, text, 0, y, r.width, height);
-        y += height;
-      }
-      // draw color
-      if (m_color.m_rgb != null) {
-        Color color = new Color(getDisplay(), m_color.m_rgb);
-        try {
-          // as background
-          {
-            Color oldBackground = gc.getBackground();
-            gc.setBackground(color);
-            gc.fillRectangle(0, y, r.width / 2, r.height - y);
-            gc.setBackground(oldBackground);
-          }
-          // as foreground
-          {
-            Font font = new Font(getDisplay(), "Arial", 16, SWT.NORMAL);
-            try {
-              gc.setFont(font);
-              gc.setForeground(color);
-              drawCenteredText(
-                  gc,
-                  Messages.ColorPreviewCanvas_sampleText,
-                  r.width / 2,
-                  y,
-                  r.width / 2,
-                  r.height - y);
-            } finally {
-              font.dispose();
-            }
-          }
-        } finally {
-          color.dispose();
-        }
-      }
-    }
-  }
+	private void onPaint(GC gc) {
+		Rectangle r = getClientArea();
+		if (m_color != null) {
+			int y = 0;
+			// draw title
+			{
+				String title;
+				if (m_showShortText) {
+					title = m_color.getName();
+				} else {
+					title = m_color.getTitle();
+				}
+				int height = gc.stringExtent(title).y;
+				drawCenteredText(gc, title, 0, 0, r.width, height);
+				y += height;
+			}
+			// draw description if present
+			if (m_color.m_description != null) {
+				String text = m_color.m_description;
+				int height = gc.stringExtent(text).y;
+				drawCenteredText(gc, text, 0, y, r.width, height);
+				y += height;
+			}
+			// draw color
+			if (m_color.m_rgb != null) {
+				Color color = new Color(getDisplay(), m_color.m_rgb);
+				try {
+					// as background
+					{
+						Color oldBackground = gc.getBackground();
+						gc.setBackground(color);
+						gc.fillRectangle(0, y, r.width / 2, r.height - y);
+						gc.setBackground(oldBackground);
+					}
+					// as foreground
+					{
+						Font font = new Font(getDisplay(), "Arial", 16, SWT.NORMAL);
+						try {
+							gc.setFont(font);
+							gc.setForeground(color);
+							drawCenteredText(
+									gc,
+									Messages.ColorPreviewCanvas_sampleText,
+									r.width / 2,
+									y,
+									r.width / 2,
+									r.height - y);
+						} finally {
+							font.dispose();
+						}
+					}
+				} finally {
+					color.dispose();
+				}
+			}
+		}
+	}
 
-  /**
-   * Draws given text at center of given rectangle.
-   *
-   * @return the extent of given text
-   */
-  private static void drawCenteredText(GC gc, String text, int x, int y, int w, int h) {
-    Point extent = gc.textExtent(text);
-    gc.drawText(text, x + (w - extent.x) / 2, y + (h - extent.y) / 2, true);
-  }
+	/**
+	 * Draws given text at center of given rectangle.
+	 *
+	 * @return the extent of given text
+	 */
+	private static void drawCenteredText(GC gc, String text, int x, int y, int w, int h) {
+		Point extent = gc.textExtent(text);
+		gc.drawText(text, x + (w - extent.x) / 2, y + (h - extent.y) / 2, true);
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/dialogs/color/ColorsGridComposite.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/dialogs/color/ColorsGridComposite.java
index eaebc254b..ab7cedb2c 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/dialogs/color/ColorsGridComposite.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/dialogs/color/ColorsGridComposite.java
@@ -36,305 +36,305 @@
  * @coverage core.ui
  */
 public class ColorsGridComposite extends Canvas {
-  private int m_cellWidth = 25;
-  private int m_cellHeight = 25;
-  private boolean m_showNames;
-  private int m_maxNameWidth = Integer.MAX_VALUE;
-  private int m_colorWidth;
-  private ColorInfo[] m_colors;
-  private int m_columns = 16;
-  private int m_rows;
+	private int m_cellWidth = 25;
+	private int m_cellHeight = 25;
+	private boolean m_showNames;
+	private int m_maxNameWidth = Integer.MAX_VALUE;
+	private int m_colorWidth;
+	private ColorInfo[] m_colors;
+	private int m_columns = 16;
+	private int m_rows;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ColorsGridComposite(Composite parent, int style) {
-    super(parent, SWT.NO_MERGE_PAINTS | SWT.NO_BACKGROUND);
-    setBackground(getDisplay().getSystemColor(SWT.COLOR_LIST_BACKGROUND));
-    addPaintListener(new PaintListener() {
-      @Override
-      public void paintControl(PaintEvent e) {
-        onPaint(e);
-      }
-    });
-    addMouseListeners();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ColorsGridComposite(Composite parent, int style) {
+		super(parent, SWT.NO_MERGE_PAINTS | SWT.NO_BACKGROUND);
+		setBackground(getDisplay().getSystemColor(SWT.COLOR_LIST_BACKGROUND));
+		addPaintListener(new PaintListener() {
+			@Override
+			public void paintControl(PaintEvent e) {
+				onPaint(e);
+			}
+		});
+		addMouseListeners();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Listeners
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private boolean m_captured;
-  private ColorInfo m_currentColorUnderMouse;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Listeners
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private boolean m_captured;
+	private ColorInfo m_currentColorUnderMouse;
 
-  private void addMouseListeners() {
-    addMouseMoveListener(new MouseMoveListener() {
-      @Override
-      public void mouseMove(MouseEvent e) {
-        if (!m_captured) {
-          ColorInfo colorUnderMouse = getColorUnderMouse(e);
-          setNewColorUnderMouse(colorUnderMouse);
-        }
-      }
-    });
-    addMouseTrackListener(new MouseTrackAdapter() {
-      @Override
-      public void mouseExit(MouseEvent e) {
-        setNewColorUnderMouse(null);
-      }
-    });
-    addMouseListener(new MouseAdapter() {
-      private ColorInfo m_color;
+	private void addMouseListeners() {
+		addMouseMoveListener(new MouseMoveListener() {
+			@Override
+			public void mouseMove(MouseEvent e) {
+				if (!m_captured) {
+					ColorInfo colorUnderMouse = getColorUnderMouse(e);
+					setNewColorUnderMouse(colorUnderMouse);
+				}
+			}
+		});
+		addMouseTrackListener(new MouseTrackAdapter() {
+			@Override
+			public void mouseExit(MouseEvent e) {
+				setNewColorUnderMouse(null);
+			}
+		});
+		addMouseListener(new MouseAdapter() {
+			private ColorInfo m_color;
 
-      @Override
-      public void mouseDown(MouseEvent e) {
-        capture(true);
-        m_color = getColorUnderMouse(e);
-      }
+			@Override
+			public void mouseDown(MouseEvent e) {
+				capture(true);
+				m_color = getColorUnderMouse(e);
+			}
 
-      @Override
-      public void mouseUp(MouseEvent e) {
-        capture(false);
-        // send notification that color was clicked
-        if (getClientArea().contains(e.x, e.y)) {
-          Event event = new Event();
-          event.data = m_color;
-          notifyListeners(SWT.Selection, event);
-        }
-      }
+			@Override
+			public void mouseUp(MouseEvent e) {
+				capture(false);
+				// send notification that color was clicked
+				if (getClientArea().contains(e.x, e.y)) {
+					Event event = new Event();
+					event.data = m_color;
+					notifyListeners(SWT.Selection, event);
+				}
+			}
 
-      private void capture(boolean capture) {
-        setCapture(capture);
-        m_captured = capture;
-      }
-    });
-  }
+			private void capture(boolean capture) {
+				setCapture(capture);
+				m_captured = capture;
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ColorInfo[] getColors() {
-    return m_colors;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ColorInfo[] getColors() {
+		return m_colors;
+	}
 
-  public void setColors(ColorInfo[] colors) {
-    m_colors = colors;
-    updateGrid();
-  }
+	public void setColors(ColorInfo[] colors) {
+		m_colors = colors;
+		updateGrid();
+	}
 
-  public void setColumns(int columns) {
-    m_columns = columns;
-    updateGrid();
-  }
+	public void setColumns(int columns) {
+		m_columns = columns;
+		updateGrid();
+	}
 
-  public void setCellWidth(int cellWidth) {
-    m_cellWidth = cellWidth;
-    updateGrid();
-  }
+	public void setCellWidth(int cellWidth) {
+		m_cellWidth = cellWidth;
+		updateGrid();
+	}
 
-  public void setCellHeight(int cellHeight) {
-    m_cellHeight = cellHeight;
-    updateGrid();
-  }
+	public void setCellHeight(int cellHeight) {
+		m_cellHeight = cellHeight;
+		updateGrid();
+	}
 
-  public void showNames(int colorWidth) {
-    m_showNames = true;
-    m_colorWidth = colorWidth;
-  }
+	public void showNames(int colorWidth) {
+		m_showNames = true;
+		m_colorWidth = colorWidth;
+	}
 
-  public void setMaxNameWidth(int maxNameWidth) {
-    m_maxNameWidth = maxNameWidth;
-  }
+	public void setMaxNameWidth(int maxNameWidth) {
+		m_maxNameWidth = maxNameWidth;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Paint
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Point computeSize(int wHint, int hHint, boolean changed) {
-    if (m_showNames) {
-      // prepare max width of name
-      int maxNameWidth = 0;
-      {
-        GC gc = new GC(this);
-        try {
-          for (int i = 0; i < m_colors.length; i++) {
-            ColorInfo colorInfo = m_colors[i];
-            maxNameWidth = Math.max(maxNameWidth, gc.stringExtent(colorInfo.m_name).x);
-          }
-          maxNameWidth = Math.min(maxNameWidth, m_maxNameWidth);
-        } finally {
-          gc.dispose();
-        }
-      }
-      // recalculate cell width
-      m_cellWidth = m_colorWidth + maxNameWidth + 5;
-    }
-    return new Point(m_cellWidth * m_columns, m_cellHeight * m_rows);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Paint
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Point computeSize(int wHint, int hHint, boolean changed) {
+		if (m_showNames) {
+			// prepare max width of name
+			int maxNameWidth = 0;
+			{
+				GC gc = new GC(this);
+				try {
+					for (int i = 0; i < m_colors.length; i++) {
+						ColorInfo colorInfo = m_colors[i];
+						maxNameWidth = Math.max(maxNameWidth, gc.stringExtent(colorInfo.m_name).x);
+					}
+					maxNameWidth = Math.min(maxNameWidth, m_maxNameWidth);
+				} finally {
+					gc.dispose();
+				}
+			}
+			// recalculate cell width
+			m_cellWidth = m_colorWidth + maxNameWidth + 5;
+		}
+		return new Point(m_cellWidth * m_columns, m_cellHeight * m_rows);
+	}
 
-  private void onPaint(PaintEvent e) {
-    GC paintGC = e.gc;
-    Rectangle paintRect = new Rectangle(e.x, e.y, e.width, e.height);
-    //
-    Image backImage = new Image(getDisplay(), e.width, e.height);
-    GC gc = new GC(backImage);
-    //
-    gc.setBackground(getBackground());
-    gc.fillRectangle(0, 0, e.width, e.height);
-    //
-    try {
-      int border = 3;
-      for (int index = 0; index < m_colors.length; index++) {
-        ColorInfo colorInfo = m_colors[index];
-        Rectangle cellRect = getCellRectForIndex(index);
-        if (!paintRect.intersects(cellRect)) {
-          continue;
-        }
-        int x = cellRect.x;
-        int y = cellRect.y;
-        // translate coordinates to back image
-        x -= e.x;
-        y -= e.y;
-        // draw cell for color
-        if (m_showNames) {
-          if (colorInfo.m_rgb != null) {
-            drawColorCell(gc, x + border, y + border, m_colorWidth - 2 * border, m_cellHeight
-                - 2
-                * border, colorInfo);
-          }
-          {
-            Point extent = gc.textExtent(colorInfo.m_name);
-            int x0 = x + m_colorWidth;
-            int y0 = y + (m_cellHeight - extent.y) / 2;
-            gc.setForeground(getForeground());
-            gc.drawText(colorInfo.m_name, x0, y0, true);
-          }
-        } else {
-          drawColorCell(gc, x + border, y + border, m_cellWidth - 2 * border, m_cellHeight
-              - 2
-              * border, colorInfo);
-        }
-        // draw border around color under cursor
-        if (colorInfo == m_currentColorUnderMouse) {
-          gc.setForeground(getDisplay().getSystemColor(SWT.COLOR_WIDGET_NORMAL_SHADOW));
-          gc.drawRectangle(x, y, cellRect.width - 1, cellRect.height - 1);
-        }
-      }
-      // draw back image
-      paintGC.drawImage(backImage, e.x, e.y);
-    } finally {
-      gc.dispose();
-      backImage.dispose();
-    }
-  }
+	private void onPaint(PaintEvent e) {
+		GC paintGC = e.gc;
+		Rectangle paintRect = new Rectangle(e.x, e.y, e.width, e.height);
+		//
+		Image backImage = new Image(getDisplay(), e.width, e.height);
+		GC gc = new GC(backImage);
+		//
+		gc.setBackground(getBackground());
+		gc.fillRectangle(0, 0, e.width, e.height);
+		//
+		try {
+			int border = 3;
+			for (int index = 0; index < m_colors.length; index++) {
+				ColorInfo colorInfo = m_colors[index];
+				Rectangle cellRect = getCellRectForIndex(index);
+				if (!paintRect.intersects(cellRect)) {
+					continue;
+				}
+				int x = cellRect.x;
+				int y = cellRect.y;
+				// translate coordinates to back image
+				x -= e.x;
+				y -= e.y;
+				// draw cell for color
+				if (m_showNames) {
+					if (colorInfo.m_rgb != null) {
+						drawColorCell(gc, x + border, y + border, m_colorWidth - 2 * border, m_cellHeight
+								- 2
+								* border, colorInfo);
+					}
+					{
+						Point extent = gc.textExtent(colorInfo.m_name);
+						int x0 = x + m_colorWidth;
+						int y0 = y + (m_cellHeight - extent.y) / 2;
+						gc.setForeground(getForeground());
+						gc.drawText(colorInfo.m_name, x0, y0, true);
+					}
+				} else {
+					drawColorCell(gc, x + border, y + border, m_cellWidth - 2 * border, m_cellHeight
+							- 2
+							* border, colorInfo);
+				}
+				// draw border around color under cursor
+				if (colorInfo == m_currentColorUnderMouse) {
+					gc.setForeground(getDisplay().getSystemColor(SWT.COLOR_WIDGET_NORMAL_SHADOW));
+					gc.drawRectangle(x, y, cellRect.width - 1, cellRect.height - 1);
+				}
+			}
+			// draw back image
+			paintGC.drawImage(backImage, e.x, e.y);
+		} finally {
+			gc.dispose();
+			backImage.dispose();
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Draws 3d color cell for given {@link ColorInfo}.
-   */
-  public static void drawColorCell(GC gc, int x, int y, int w, int h, ColorInfo colorInfo) {
-    Display display = Display.getCurrent();
-    // fill rectangle with color
-    {
-      Color oldBackground = gc.getBackground();
-      Color color = new Color(display, colorInfo.m_rgb);
-      try {
-        gc.setBackground(color);
-        gc.fillRectangle(x, y, w, h);
-      } finally {
-        color.dispose();
-        gc.setBackground(oldBackground);
-      }
-    }
-    // draw 3D border
-    {
-      gc.setForeground(display.getSystemColor(SWT.COLOR_GRAY));
-      gc.drawLine(x, y, x + w - 1, y);
-      gc.drawLine(x, y, x, y + h - 1);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Draws 3d color cell for given {@link ColorInfo}.
+	 */
+	public static void drawColorCell(GC gc, int x, int y, int w, int h, ColorInfo colorInfo) {
+		Display display = Display.getCurrent();
+		// fill rectangle with color
+		{
+			Color oldBackground = gc.getBackground();
+			Color color = new Color(display, colorInfo.m_rgb);
+			try {
+				gc.setBackground(color);
+				gc.fillRectangle(x, y, w, h);
+			} finally {
+				color.dispose();
+				gc.setBackground(oldBackground);
+			}
+		}
+		// draw 3D border
+		{
+			gc.setForeground(display.getSystemColor(SWT.COLOR_GRAY));
+			gc.drawLine(x, y, x + w - 1, y);
+			gc.drawLine(x, y, x, y + h - 1);
+		}
+	}
 
-  /**
-   * @return {@link ColorInfo} under mouse cursor.
-   */
-  private ColorInfo getColorUnderMouse(MouseEvent e) {
-    int column = e.x / m_cellWidth;
-    int row = e.y / m_cellHeight;
-    int index = row * m_columns + column;
-    return index < m_colors.length ? m_colors[index] : null;
-  }
+	/**
+	 * @return {@link ColorInfo} under mouse cursor.
+	 */
+	private ColorInfo getColorUnderMouse(MouseEvent e) {
+		int column = e.x / m_cellWidth;
+		int row = e.y / m_cellHeight;
+		int index = row * m_columns + column;
+		return index < m_colors.length ? m_colors[index] : null;
+	}
 
-  /**
-   * Sets new color under mouse and forces redraw for old and new cells.
-   */
-  private void setNewColorUnderMouse(ColorInfo colorUnderMouse) {
-    if (m_currentColorUnderMouse != colorUnderMouse) {
-      // send notification
-      {
-        Event event = new Event();
-        event.data = colorUnderMouse;
-        notifyListeners(SWT.DefaultSelection, event);
-      }
-      // redraw cells
-      {
-        ColorInfo oldColorUnderMouse = m_currentColorUnderMouse;
-        m_currentColorUnderMouse = colorUnderMouse;
-        redrawColorCell(oldColorUnderMouse);
-        redrawColorCell(m_currentColorUnderMouse);
-      }
-    }
-  }
+	/**
+	 * Sets new color under mouse and forces redraw for old and new cells.
+	 */
+	private void setNewColorUnderMouse(ColorInfo colorUnderMouse) {
+		if (m_currentColorUnderMouse != colorUnderMouse) {
+			// send notification
+			{
+				Event event = new Event();
+				event.data = colorUnderMouse;
+				notifyListeners(SWT.DefaultSelection, event);
+			}
+			// redraw cells
+			{
+				ColorInfo oldColorUnderMouse = m_currentColorUnderMouse;
+				m_currentColorUnderMouse = colorUnderMouse;
+				redrawColorCell(oldColorUnderMouse);
+				redrawColorCell(m_currentColorUnderMouse);
+			}
+		}
+	}
 
-  /**
-   * Marks cell for given color as "dirty" as needed to redraw.
-   */
-  private void redrawColorCell(ColorInfo colorInfo) {
-    Rectangle cell = getCellRectForColor(colorInfo);
-    if (cell != null) {
-      redraw(cell.x, cell.y, cell.width, cell.height, false);
-    }
-  }
+	/**
+	 * Marks cell for given color as "dirty" as needed to redraw.
+	 */
+	private void redrawColorCell(ColorInfo colorInfo) {
+		Rectangle cell = getCellRectForColor(colorInfo);
+		if (cell != null) {
+			redraw(cell.x, cell.y, cell.width, cell.height, false);
+		}
+	}
 
-  /**
-   * @return the rectangle for given color or <code>null</code> if <code>null</code> color given
-   */
-  private Rectangle getCellRectForColor(ColorInfo colorInfo) {
-    if (colorInfo == null) {
-      return null;
-    }
-    int index = ArrayUtils.indexOf(m_colors, colorInfo);
-    return getCellRectForIndex(index);
-  }
+	/**
+	 * @return the rectangle for given color or <code>null</code> if <code>null</code> color given
+	 */
+	private Rectangle getCellRectForColor(ColorInfo colorInfo) {
+		if (colorInfo == null) {
+			return null;
+		}
+		int index = ArrayUtils.indexOf(m_colors, colorInfo);
+		return getCellRectForIndex(index);
+	}
 
-  /**
-   * @return the rectangle for given color index
-   */
-  private Rectangle getCellRectForIndex(int index) {
-    int column = index % m_columns;
-    int row = index / m_columns;
-    Rectangle cellRect =
-        new Rectangle(m_cellWidth * column, m_cellHeight * row, m_cellWidth, m_cellHeight);
-    return cellRect;
-  }
+	/**
+	 * @return the rectangle for given color index
+	 */
+	private Rectangle getCellRectForIndex(int index) {
+		int column = index % m_columns;
+		int row = index / m_columns;
+		Rectangle cellRect =
+				new Rectangle(m_cellWidth * column, m_cellHeight * row, m_cellWidth, m_cellHeight);
+		return cellRect;
+	}
 
-  /**
-   * Updates grid after any accessor.
-   */
-  private void updateGrid() {
-    if (m_colors != null && m_columns != 0) {
-      m_rows = m_colors.length / m_columns + (m_colors.length % m_columns != 0 ? 1 : 0);
-      redraw();
-    }
-  }
+	/**
+	 * Updates grid after any accessor.
+	 */
+	private void updateGrid() {
+		if (m_colors != null && m_columns != 0) {
+			m_rows = m_colors.length / m_columns + (m_colors.length % m_columns != 0 ? 1 : 0);
+			redraw();
+		}
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/dialogs/color/pages/NamedColorsComposite.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/dialogs/color/pages/NamedColorsComposite.java
index ed2b59759..c2e4f1f0f 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/dialogs/color/pages/NamedColorsComposite.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/dialogs/color/pages/NamedColorsComposite.java
@@ -28,231 +28,231 @@
  * @coverage core.ui
  */
 public final class NamedColorsComposite extends AbstractColorsGridComposite {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public NamedColorsComposite(Composite parent, int style, AbstractColorDialog colorDialog) {
-    super(parent, style, colorDialog);
-    createSortGroup(this, ImmutableList.of(
-        Messages.NamedColorsComposite_sortTone,
-        Messages.NamedColorsComposite_sortHue,
-        Messages.NamedColorsComposite_sortSaturation,
-        Messages.NamedColorsComposite_sortLightness,
-        Messages.NamedColorsComposite_sortName), ImmutableList.of(
-        ColorInfoComparator.TONE,
-        ColorInfoComparator.HUE,
-        ColorInfoComparator.SATURATION,
-        ColorInfoComparator.LIGHTNESS,
-        ColorInfoComparator.NAME));
-    createColorsGroup(this, Messages.NamedColorsComposite_htmlGroup, HTML_COLORS);
-    createColorsGroup(this, Messages.NamedColorsComposite_svgGroup, SVG_COLORS);
-    setComparator(ColorInfoComparator.TONE);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public NamedColorsComposite(Composite parent, int style, AbstractColorDialog colorDialog) {
+		super(parent, style, colorDialog);
+		createSortGroup(this, ImmutableList.of(
+				Messages.NamedColorsComposite_sortTone,
+				Messages.NamedColorsComposite_sortHue,
+				Messages.NamedColorsComposite_sortSaturation,
+				Messages.NamedColorsComposite_sortLightness,
+				Messages.NamedColorsComposite_sortName), ImmutableList.of(
+						ColorInfoComparator.TONE,
+						ColorInfoComparator.HUE,
+						ColorInfoComparator.SATURATION,
+						ColorInfoComparator.LIGHTNESS,
+						ColorInfoComparator.NAME));
+		createColorsGroup(this, Messages.NamedColorsComposite_htmlGroup, HTML_COLORS);
+		createColorsGroup(this, Messages.NamedColorsComposite_svgGroup, SVG_COLORS);
+		setComparator(ColorInfoComparator.TONE);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Colors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final ColorInfo[] HTML_COLORS = new ColorInfo[]{
-      new ColorInfo("Black", new RGB(0, 0, 0)),
-      new ColorInfo("Silver", new RGB(192, 192, 192)),
-      new ColorInfo("Gray", new RGB(128, 128, 128)),
-      new ColorInfo("White", new RGB(255, 255, 255)),
-      new ColorInfo("Maroon", new RGB(128, 0, 0)),
-      new ColorInfo("Red", new RGB(255, 0, 0)),
-      new ColorInfo("Purple", new RGB(128, 0, 128)),
-      new ColorInfo("Fuchsia", new RGB(255, 0, 255)),
-      new ColorInfo("Green", new RGB(0, 128, 0)),
-      new ColorInfo("Lime", new RGB(0, 255, 0)),
-      new ColorInfo("Olive", new RGB(128, 128, 0)),
-      new ColorInfo("Yellow", new RGB(255, 255, 0)),
-      new ColorInfo("Navy", new RGB(0, 0, 128)),
-      new ColorInfo("Blue", new RGB(0, 0, 255)),
-      new ColorInfo("Teal", new RGB(0, 128, 128)),
-      new ColorInfo("Aqua", new RGB(0, 255, 255)),};
-  private static final ColorInfo[] SVG_COLORS = new ColorInfo[]{
-      new ColorInfo("indianred", new RGB(205, 92, 92)),
-      new ColorInfo("darksalmon", new RGB(233, 150, 122)),
-      new ColorInfo("lightcoral", new RGB(240, 128, 128)),
-      new ColorInfo("salmon", new RGB(250, 128, 114)),
-      new ColorInfo("orangered", new RGB(255, 69, 0)),
-      new ColorInfo("red", new RGB(255, 0, 0)),
-      new ColorInfo("crimson", new RGB(220, 20, 60)),
-      new ColorInfo("firebrick", new RGB(178, 34, 34)),
-      new ColorInfo("mediumvioletred", new RGB(199, 21, 133)),
-      new ColorInfo("pink", new RGB(255, 192, 203)),
-      new ColorInfo("lightpink", new RGB(255, 182, 193)),
-      new ColorInfo("hotpink", new RGB(255, 105, 180)),
-      new ColorInfo("deeppink", new RGB(255, 20, 147)),
-      new ColorInfo("palevioletred", new RGB(219, 112, 147)),
-      new ColorInfo("darkkhaki", new RGB(189, 183, 107)),
-      new ColorInfo("khaki", new RGB(240, 230, 140)),
-      new ColorInfo("palegoldenrod", new RGB(238, 232, 170)),
-      new ColorInfo("lightgoldenrodyellow", new RGB(250, 250, 210)),
-      new ColorInfo("lightyellow", new RGB(255, 255, 224)),
-      new ColorInfo("lemonchiffon", new RGB(255, 250, 205)),
-      new ColorInfo("yellow", new RGB(255, 255, 0)),
-      new ColorInfo("gold", new RGB(255, 215, 0)),
-      new ColorInfo("papayawhip", new RGB(255, 239, 213)),
-      new ColorInfo("moccasin", new RGB(255, 228, 181)),
-      new ColorInfo("peachpuff", new RGB(255, 218, 185)),
-      new ColorInfo("cyan", new RGB(0, 255, 255)),
-      new ColorInfo("aqua", new RGB(0, 255, 255)),
-      new ColorInfo("aquamarine", new RGB(127, 255, 212)),
-      new ColorInfo("turquoise", new RGB(64, 224, 208)),
-      new ColorInfo("mediumturquoise", new RGB(72, 209, 204)),
-      new ColorInfo("darkturquoise", new RGB(0, 206, 209)),
-      new ColorInfo("cadetblue", new RGB(95, 158, 160)),
-      new ColorInfo("lightcyan", new RGB(224, 255, 255)),
-      new ColorInfo("paleturquoise", new RGB(175, 238, 238)),
-      new ColorInfo("powderblue", new RGB(176, 224, 230)),
-      new ColorInfo("lightsteelblue", new RGB(176, 196, 222)),
-      new ColorInfo("steelblue", new RGB(70, 130, 180)),
-      new ColorInfo("lightblue", new RGB(173, 216, 230)),
-      new ColorInfo("skyblue", new RGB(135, 206, 235)),
-      new ColorInfo("lightskyblue", new RGB(135, 206, 250)),
-      new ColorInfo("deepskyblue", new RGB(0, 191, 255)),
-      new ColorInfo("cornflowerblue", new RGB(100, 149, 237)),
-      new ColorInfo("royalblue", new RGB(65, 105, 225)),
-      new ColorInfo("mediumslateblue", new RGB(123, 104, 238)),
-      new ColorInfo("dodgerblue", new RGB(30, 144, 255)),
-      new ColorInfo("blue", new RGB(0, 0, 255)),
-      new ColorInfo("mediumblue", new RGB(0, 0, 205)),
-      new ColorInfo("darkblue", new RGB(0, 0, 139)),
-      new ColorInfo("navy", new RGB(0, 0, 128)),
-      new ColorInfo("midnightblue", new RGB(25, 25, 112)),
-      new ColorInfo("lightsalmon", new RGB(255, 160, 122)),
-      new ColorInfo("orange", new RGB(255, 165, 0)),
-      new ColorInfo("darkorange", new RGB(255, 140, 0)),
-      new ColorInfo("coral", new RGB(255, 127, 80)),
-      new ColorInfo("tomato", new RGB(255, 99, 71)),
-      new ColorInfo("mediumspringgreen", new RGB(0, 250, 154)),
-      new ColorInfo("springgreen", new RGB(0, 255, 127)),
-      new ColorInfo("palegreen", new RGB(152, 251, 152)),
-      new ColorInfo("greenyellow", new RGB(173, 255, 47)),
-      new ColorInfo("chartreuse", new RGB(127, 255, 0)),
-      new ColorInfo("lawngreen", new RGB(124, 252, 0)),
-      new ColorInfo("lime", new RGB(0, 255, 0)),
-      new ColorInfo("lightgreen", new RGB(144, 238, 144)),
-      new ColorInfo("yellowgreen", new RGB(154, 205, 50)),
-      new ColorInfo("limegreen", new RGB(50, 205, 50)),
-      new ColorInfo("mediumseagreen", new RGB(60, 179, 113)),
-      new ColorInfo("darkseagreen", new RGB(143, 188, 143)),
-      new ColorInfo("forestgreen", new RGB(34, 139, 34)),
-      new ColorInfo("seagreen", new RGB(46, 139, 87)),
-      new ColorInfo("green", new RGB(0, 128, 0)),
-      new ColorInfo("olivedrab", new RGB(107, 142, 35)),
-      new ColorInfo("olive", new RGB(128, 128, 0)),
-      new ColorInfo("darkolivegreen", new RGB(85, 107, 47)),
-      new ColorInfo("darkgreen", new RGB(0, 100, 0)),
-      new ColorInfo("mediumaquamarine", new RGB(102, 205, 170)),
-      new ColorInfo("lightseagreen", new RGB(32, 178, 170)),
-      new ColorInfo("darkcyan", new RGB(0, 139, 139)),
-      new ColorInfo("teal", new RGB(0, 128, 128)),
-      new ColorInfo("lavender", new RGB(230, 230, 250)),
-      new ColorInfo("thistle", new RGB(216, 191, 216)),
-      new ColorInfo("plum", new RGB(221, 160, 221)),
-      new ColorInfo("violet", new RGB(238, 130, 238)),
-      new ColorInfo("fuchsia", new RGB(255, 0, 255)),
-      new ColorInfo("magenta", new RGB(255, 0, 255)),
-      new ColorInfo("orchid", new RGB(218, 112, 214)),
-      new ColorInfo("mediumorchid", new RGB(186, 85, 211)),
-      new ColorInfo("darkorchid", new RGB(153, 50, 204)),
-      new ColorInfo("blueviolet", new RGB(138, 43, 226)),
-      new ColorInfo("darkviolet", new RGB(148, 0, 211)),
-      new ColorInfo("mediumpurple", new RGB(147, 112, 219)),
-      new ColorInfo("slateblue", new RGB(106, 90, 205)),
-      new ColorInfo("purple", new RGB(128, 0, 128)),
-      new ColorInfo("darkmagenta", new RGB(139, 0, 139)),
-      new ColorInfo("darkslateblue", new RGB(72, 61, 139)),
-      new ColorInfo("indigo", new RGB(75, 0, 130)),
-      new ColorInfo("honeydew", new RGB(240, 255, 240)),
-      new ColorInfo("mintcream", new RGB(245, 255, 250)),
-      new ColorInfo("azure", new RGB(240, 255, 255)),
-      new ColorInfo("aliceblue", new RGB(240, 248, 255)),
-      new ColorInfo("ghostwhite", new RGB(248, 248, 255)),
-      new ColorInfo("whitesmoke", new RGB(245, 245, 245)),
-      new ColorInfo("lavenderblush", new RGB(255, 240, 245)),
-      new ColorInfo("mistyrose", new RGB(255, 228, 225)),
-      new ColorInfo("antiquewhite", new RGB(250, 235, 215)),
-      new ColorInfo("seashell", new RGB(255, 245, 238)),
-      new ColorInfo("snow", new RGB(255, 250, 250)),
-      new ColorInfo("white", new RGB(255, 255, 255)),
-      new ColorInfo("beige", new RGB(245, 245, 220)),
-      new ColorInfo("linen", new RGB(250, 240, 230)),
-      new ColorInfo("oldlace", new RGB(253, 245, 230)),
-      new ColorInfo("floralwhite", new RGB(255, 250, 240)),
-      new ColorInfo("ivory", new RGB(255, 255, 240)),
-      new ColorInfo("gainsboro", new RGB(220, 220, 220)),
-      new ColorInfo("lightgray", new RGB(211, 211, 211)),
-      new ColorInfo("lightgrey", new RGB(211, 211, 211)),
-      new ColorInfo("silver", new RGB(192, 192, 192)),
-      new ColorInfo("darkgray", new RGB(169, 169, 169)),
-      new ColorInfo("darkgrey", new RGB(169, 169, 169)),
-      new ColorInfo("gray", new RGB(128, 128, 128)),
-      new ColorInfo("grey", new RGB(128, 128, 128)),
-      new ColorInfo("dimgray", new RGB(105, 105, 105)),
-      new ColorInfo("dimgrey", new RGB(105, 105, 105)),
-      new ColorInfo("darkslategray", new RGB(47, 79, 79)),
-      new ColorInfo("darkslategrey", new RGB(47, 79, 79)),
-      new ColorInfo("lightslategray", new RGB(119, 136, 153)),
-      new ColorInfo("lightslategrey", new RGB(119, 136, 153)),
-      new ColorInfo("slategray", new RGB(112, 128, 144)),
-      new ColorInfo("slategrey", new RGB(112, 128, 144)),
-      new ColorInfo("cornsilk", new RGB(255, 248, 220)),
-      new ColorInfo("blanchedalmond", new RGB(255, 235, 205)),
-      new ColorInfo("bisque", new RGB(255, 228, 196)),
-      new ColorInfo("navajowhite", new RGB(255, 222, 173)),
-      new ColorInfo("wheat", new RGB(245, 222, 179)),
-      new ColorInfo("sandybrown", new RGB(244, 164, 96)),
-      new ColorInfo("goldenrod", new RGB(218, 165, 32)),
-      new ColorInfo("darkgoldenrod", new RGB(184, 134, 11)),
-      new ColorInfo("peru", new RGB(205, 133, 63)),
-      new ColorInfo("chocolate", new RGB(210, 105, 30)),
-      new ColorInfo("maroon", new RGB(128, 0, 0)),
-      new ColorInfo("saddlebrown", new RGB(139, 69, 19)),
-      new ColorInfo("brown", new RGB(165, 42, 42)),
-      new ColorInfo("sienna", new RGB(160, 82, 45)),
-      new ColorInfo("darkred", new RGB(139, 0, 0)),
-      new ColorInfo("burlywood", new RGB(222, 184, 135)),
-      new ColorInfo("tan", new RGB(210, 180, 140)),
-      new ColorInfo("rosybrown", new RGB(188, 143, 143)),
-      new ColorInfo("black", new RGB(0, 0, 0)),};
-  private static final String COLOR_NAMES[] = new String[HTML_COLORS.length + SVG_COLORS.length];
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Colors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final ColorInfo[] HTML_COLORS = new ColorInfo[]{
+			new ColorInfo("Black", new RGB(0, 0, 0)),
+			new ColorInfo("Silver", new RGB(192, 192, 192)),
+			new ColorInfo("Gray", new RGB(128, 128, 128)),
+			new ColorInfo("White", new RGB(255, 255, 255)),
+			new ColorInfo("Maroon", new RGB(128, 0, 0)),
+			new ColorInfo("Red", new RGB(255, 0, 0)),
+			new ColorInfo("Purple", new RGB(128, 0, 128)),
+			new ColorInfo("Fuchsia", new RGB(255, 0, 255)),
+			new ColorInfo("Green", new RGB(0, 128, 0)),
+			new ColorInfo("Lime", new RGB(0, 255, 0)),
+			new ColorInfo("Olive", new RGB(128, 128, 0)),
+			new ColorInfo("Yellow", new RGB(255, 255, 0)),
+			new ColorInfo("Navy", new RGB(0, 0, 128)),
+			new ColorInfo("Blue", new RGB(0, 0, 255)),
+			new ColorInfo("Teal", new RGB(0, 128, 128)),
+			new ColorInfo("Aqua", new RGB(0, 255, 255)),};
+	private static final ColorInfo[] SVG_COLORS = new ColorInfo[]{
+			new ColorInfo("indianred", new RGB(205, 92, 92)),
+			new ColorInfo("darksalmon", new RGB(233, 150, 122)),
+			new ColorInfo("lightcoral", new RGB(240, 128, 128)),
+			new ColorInfo("salmon", new RGB(250, 128, 114)),
+			new ColorInfo("orangered", new RGB(255, 69, 0)),
+			new ColorInfo("red", new RGB(255, 0, 0)),
+			new ColorInfo("crimson", new RGB(220, 20, 60)),
+			new ColorInfo("firebrick", new RGB(178, 34, 34)),
+			new ColorInfo("mediumvioletred", new RGB(199, 21, 133)),
+			new ColorInfo("pink", new RGB(255, 192, 203)),
+			new ColorInfo("lightpink", new RGB(255, 182, 193)),
+			new ColorInfo("hotpink", new RGB(255, 105, 180)),
+			new ColorInfo("deeppink", new RGB(255, 20, 147)),
+			new ColorInfo("palevioletred", new RGB(219, 112, 147)),
+			new ColorInfo("darkkhaki", new RGB(189, 183, 107)),
+			new ColorInfo("khaki", new RGB(240, 230, 140)),
+			new ColorInfo("palegoldenrod", new RGB(238, 232, 170)),
+			new ColorInfo("lightgoldenrodyellow", new RGB(250, 250, 210)),
+			new ColorInfo("lightyellow", new RGB(255, 255, 224)),
+			new ColorInfo("lemonchiffon", new RGB(255, 250, 205)),
+			new ColorInfo("yellow", new RGB(255, 255, 0)),
+			new ColorInfo("gold", new RGB(255, 215, 0)),
+			new ColorInfo("papayawhip", new RGB(255, 239, 213)),
+			new ColorInfo("moccasin", new RGB(255, 228, 181)),
+			new ColorInfo("peachpuff", new RGB(255, 218, 185)),
+			new ColorInfo("cyan", new RGB(0, 255, 255)),
+			new ColorInfo("aqua", new RGB(0, 255, 255)),
+			new ColorInfo("aquamarine", new RGB(127, 255, 212)),
+			new ColorInfo("turquoise", new RGB(64, 224, 208)),
+			new ColorInfo("mediumturquoise", new RGB(72, 209, 204)),
+			new ColorInfo("darkturquoise", new RGB(0, 206, 209)),
+			new ColorInfo("cadetblue", new RGB(95, 158, 160)),
+			new ColorInfo("lightcyan", new RGB(224, 255, 255)),
+			new ColorInfo("paleturquoise", new RGB(175, 238, 238)),
+			new ColorInfo("powderblue", new RGB(176, 224, 230)),
+			new ColorInfo("lightsteelblue", new RGB(176, 196, 222)),
+			new ColorInfo("steelblue", new RGB(70, 130, 180)),
+			new ColorInfo("lightblue", new RGB(173, 216, 230)),
+			new ColorInfo("skyblue", new RGB(135, 206, 235)),
+			new ColorInfo("lightskyblue", new RGB(135, 206, 250)),
+			new ColorInfo("deepskyblue", new RGB(0, 191, 255)),
+			new ColorInfo("cornflowerblue", new RGB(100, 149, 237)),
+			new ColorInfo("royalblue", new RGB(65, 105, 225)),
+			new ColorInfo("mediumslateblue", new RGB(123, 104, 238)),
+			new ColorInfo("dodgerblue", new RGB(30, 144, 255)),
+			new ColorInfo("blue", new RGB(0, 0, 255)),
+			new ColorInfo("mediumblue", new RGB(0, 0, 205)),
+			new ColorInfo("darkblue", new RGB(0, 0, 139)),
+			new ColorInfo("navy", new RGB(0, 0, 128)),
+			new ColorInfo("midnightblue", new RGB(25, 25, 112)),
+			new ColorInfo("lightsalmon", new RGB(255, 160, 122)),
+			new ColorInfo("orange", new RGB(255, 165, 0)),
+			new ColorInfo("darkorange", new RGB(255, 140, 0)),
+			new ColorInfo("coral", new RGB(255, 127, 80)),
+			new ColorInfo("tomato", new RGB(255, 99, 71)),
+			new ColorInfo("mediumspringgreen", new RGB(0, 250, 154)),
+			new ColorInfo("springgreen", new RGB(0, 255, 127)),
+			new ColorInfo("palegreen", new RGB(152, 251, 152)),
+			new ColorInfo("greenyellow", new RGB(173, 255, 47)),
+			new ColorInfo("chartreuse", new RGB(127, 255, 0)),
+			new ColorInfo("lawngreen", new RGB(124, 252, 0)),
+			new ColorInfo("lime", new RGB(0, 255, 0)),
+			new ColorInfo("lightgreen", new RGB(144, 238, 144)),
+			new ColorInfo("yellowgreen", new RGB(154, 205, 50)),
+			new ColorInfo("limegreen", new RGB(50, 205, 50)),
+			new ColorInfo("mediumseagreen", new RGB(60, 179, 113)),
+			new ColorInfo("darkseagreen", new RGB(143, 188, 143)),
+			new ColorInfo("forestgreen", new RGB(34, 139, 34)),
+			new ColorInfo("seagreen", new RGB(46, 139, 87)),
+			new ColorInfo("green", new RGB(0, 128, 0)),
+			new ColorInfo("olivedrab", new RGB(107, 142, 35)),
+			new ColorInfo("olive", new RGB(128, 128, 0)),
+			new ColorInfo("darkolivegreen", new RGB(85, 107, 47)),
+			new ColorInfo("darkgreen", new RGB(0, 100, 0)),
+			new ColorInfo("mediumaquamarine", new RGB(102, 205, 170)),
+			new ColorInfo("lightseagreen", new RGB(32, 178, 170)),
+			new ColorInfo("darkcyan", new RGB(0, 139, 139)),
+			new ColorInfo("teal", new RGB(0, 128, 128)),
+			new ColorInfo("lavender", new RGB(230, 230, 250)),
+			new ColorInfo("thistle", new RGB(216, 191, 216)),
+			new ColorInfo("plum", new RGB(221, 160, 221)),
+			new ColorInfo("violet", new RGB(238, 130, 238)),
+			new ColorInfo("fuchsia", new RGB(255, 0, 255)),
+			new ColorInfo("magenta", new RGB(255, 0, 255)),
+			new ColorInfo("orchid", new RGB(218, 112, 214)),
+			new ColorInfo("mediumorchid", new RGB(186, 85, 211)),
+			new ColorInfo("darkorchid", new RGB(153, 50, 204)),
+			new ColorInfo("blueviolet", new RGB(138, 43, 226)),
+			new ColorInfo("darkviolet", new RGB(148, 0, 211)),
+			new ColorInfo("mediumpurple", new RGB(147, 112, 219)),
+			new ColorInfo("slateblue", new RGB(106, 90, 205)),
+			new ColorInfo("purple", new RGB(128, 0, 128)),
+			new ColorInfo("darkmagenta", new RGB(139, 0, 139)),
+			new ColorInfo("darkslateblue", new RGB(72, 61, 139)),
+			new ColorInfo("indigo", new RGB(75, 0, 130)),
+			new ColorInfo("honeydew", new RGB(240, 255, 240)),
+			new ColorInfo("mintcream", new RGB(245, 255, 250)),
+			new ColorInfo("azure", new RGB(240, 255, 255)),
+			new ColorInfo("aliceblue", new RGB(240, 248, 255)),
+			new ColorInfo("ghostwhite", new RGB(248, 248, 255)),
+			new ColorInfo("whitesmoke", new RGB(245, 245, 245)),
+			new ColorInfo("lavenderblush", new RGB(255, 240, 245)),
+			new ColorInfo("mistyrose", new RGB(255, 228, 225)),
+			new ColorInfo("antiquewhite", new RGB(250, 235, 215)),
+			new ColorInfo("seashell", new RGB(255, 245, 238)),
+			new ColorInfo("snow", new RGB(255, 250, 250)),
+			new ColorInfo("white", new RGB(255, 255, 255)),
+			new ColorInfo("beige", new RGB(245, 245, 220)),
+			new ColorInfo("linen", new RGB(250, 240, 230)),
+			new ColorInfo("oldlace", new RGB(253, 245, 230)),
+			new ColorInfo("floralwhite", new RGB(255, 250, 240)),
+			new ColorInfo("ivory", new RGB(255, 255, 240)),
+			new ColorInfo("gainsboro", new RGB(220, 220, 220)),
+			new ColorInfo("lightgray", new RGB(211, 211, 211)),
+			new ColorInfo("lightgrey", new RGB(211, 211, 211)),
+			new ColorInfo("silver", new RGB(192, 192, 192)),
+			new ColorInfo("darkgray", new RGB(169, 169, 169)),
+			new ColorInfo("darkgrey", new RGB(169, 169, 169)),
+			new ColorInfo("gray", new RGB(128, 128, 128)),
+			new ColorInfo("grey", new RGB(128, 128, 128)),
+			new ColorInfo("dimgray", new RGB(105, 105, 105)),
+			new ColorInfo("dimgrey", new RGB(105, 105, 105)),
+			new ColorInfo("darkslategray", new RGB(47, 79, 79)),
+			new ColorInfo("darkslategrey", new RGB(47, 79, 79)),
+			new ColorInfo("lightslategray", new RGB(119, 136, 153)),
+			new ColorInfo("lightslategrey", new RGB(119, 136, 153)),
+			new ColorInfo("slategray", new RGB(112, 128, 144)),
+			new ColorInfo("slategrey", new RGB(112, 128, 144)),
+			new ColorInfo("cornsilk", new RGB(255, 248, 220)),
+			new ColorInfo("blanchedalmond", new RGB(255, 235, 205)),
+			new ColorInfo("bisque", new RGB(255, 228, 196)),
+			new ColorInfo("navajowhite", new RGB(255, 222, 173)),
+			new ColorInfo("wheat", new RGB(245, 222, 179)),
+			new ColorInfo("sandybrown", new RGB(244, 164, 96)),
+			new ColorInfo("goldenrod", new RGB(218, 165, 32)),
+			new ColorInfo("darkgoldenrod", new RGB(184, 134, 11)),
+			new ColorInfo("peru", new RGB(205, 133, 63)),
+			new ColorInfo("chocolate", new RGB(210, 105, 30)),
+			new ColorInfo("maroon", new RGB(128, 0, 0)),
+			new ColorInfo("saddlebrown", new RGB(139, 69, 19)),
+			new ColorInfo("brown", new RGB(165, 42, 42)),
+			new ColorInfo("sienna", new RGB(160, 82, 45)),
+			new ColorInfo("darkred", new RGB(139, 0, 0)),
+			new ColorInfo("burlywood", new RGB(222, 184, 135)),
+			new ColorInfo("tan", new RGB(210, 180, 140)),
+			new ColorInfo("rosybrown", new RGB(188, 143, 143)),
+			new ColorInfo("black", new RGB(0, 0, 0)),};
+	private static final String COLOR_NAMES[] = new String[HTML_COLORS.length + SVG_COLORS.length];
 
-  /**
-   * @return the names of all colors on this page.
-   */
-  public static String[] getColorNames() {
-    if (COLOR_NAMES[0] == null) {
-      int index = 0;
-      for (ColorInfo colorInfo : HTML_COLORS) {
-        COLOR_NAMES[index++] = colorInfo.getName();
-      }
-      for (ColorInfo colorInfo : SVG_COLORS) {
-        COLOR_NAMES[index++] = colorInfo.getName();
-      }
-    }
-    return COLOR_NAMES;
-  }
+	/**
+	 * @return the names of all colors on this page.
+	 */
+	public static String[] getColorNames() {
+		if (COLOR_NAMES[0] == null) {
+			int index = 0;
+			for (ColorInfo colorInfo : HTML_COLORS) {
+				COLOR_NAMES[index++] = colorInfo.getName();
+			}
+			for (ColorInfo colorInfo : SVG_COLORS) {
+				COLOR_NAMES[index++] = colorInfo.getName();
+			}
+		}
+		return COLOR_NAMES;
+	}
 
-  /**
-   * @return the {@link RGB} of given named color, may be <code>null</code>.
-   */
-  public static RGB getRGB(String name) {
-    for (ColorInfo colorInfo : HTML_COLORS) {
-      if (colorInfo.getName().equals(name)) {
-        return colorInfo.getRGB();
-      }
-    }
-    for (ColorInfo colorInfo : SVG_COLORS) {
-      if (colorInfo.getName().equals(name)) {
-        return colorInfo.getRGB();
-      }
-    }
-    return null;
-  }
+	/**
+	 * @return the {@link RGB} of given named color, may be <code>null</code>.
+	 */
+	public static RGB getRGB(String name) {
+		for (ColorInfo colorInfo : HTML_COLORS) {
+			if (colorInfo.getName().equals(name)) {
+				return colorInfo.getRGB();
+			}
+		}
+		for (ColorInfo colorInfo : SVG_COLORS) {
+			if (colorInfo.getName().equals(name)) {
+				return colorInfo.getRGB();
+			}
+		}
+		return null;
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/dialogs/color/pages/WebSafeColorsComposite.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/dialogs/color/pages/WebSafeColorsComposite.java
index 99eeb82d9..dd014333a 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/dialogs/color/pages/WebSafeColorsComposite.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/dialogs/color/pages/WebSafeColorsComposite.java
@@ -29,251 +29,251 @@
  * @coverage core.ui
  */
 public final class WebSafeColorsComposite extends AbstractColorsGridComposite {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public WebSafeColorsComposite(Composite parent, int style, AbstractColorDialog colorPickerDialog) {
-    super(parent, style, colorPickerDialog);
-    createSortGroup(this, ImmutableList.of(
-        Messages.WebSafeColorsComposite_sortTone,
-        Messages.WebSafeColorsComposite_sortHue,
-        Messages.WebSafeColorsComposite_sortSaturation,
-        Messages.WebSafeColorsComposite_sortLightness), ImmutableList.of(
-        ColorInfoComparator.TONE,
-        ColorInfoComparator.HUE,
-        ColorInfoComparator.SATURATION,
-        ColorInfoComparator.LIGHTNESS));
-    {
-      ColorsGridComposite colorsGrid = createColorsGroup(this, null, WEB_COLORS);
-      colorsGrid.setCellWidth(33);
-      colorsGrid.setCellHeight(18);
-      colorsGrid.setColumns(12);
-    }
-    setComparator(ColorInfoComparator.TONE);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public WebSafeColorsComposite(Composite parent, int style, AbstractColorDialog colorPickerDialog) {
+		super(parent, style, colorPickerDialog);
+		createSortGroup(this, ImmutableList.of(
+				Messages.WebSafeColorsComposite_sortTone,
+				Messages.WebSafeColorsComposite_sortHue,
+				Messages.WebSafeColorsComposite_sortSaturation,
+				Messages.WebSafeColorsComposite_sortLightness), ImmutableList.of(
+						ColorInfoComparator.TONE,
+						ColorInfoComparator.HUE,
+						ColorInfoComparator.SATURATION,
+						ColorInfoComparator.LIGHTNESS));
+		{
+			ColorsGridComposite colorsGrid = createColorsGroup(this, null, WEB_COLORS);
+			colorsGrid.setCellWidth(33);
+			colorsGrid.setCellHeight(18);
+			colorsGrid.setColumns(12);
+		}
+		setComparator(ColorInfoComparator.TONE);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Colors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final ColorInfo[] WEB_COLORS = new ColorInfo[]{
-      new ColorInfo(null, new RGB(0, 0, 0)),
-      new ColorInfo(null, new RGB(51, 0, 0)),
-      new ColorInfo(null, new RGB(102, 0, 0)),
-      new ColorInfo(null, new RGB(153, 0, 0)),
-      new ColorInfo(null, new RGB(204, 0, 0)),
-      new ColorInfo(null, new RGB(255, 0, 0)),
-      new ColorInfo(null, new RGB(0, 0, 51)),
-      new ColorInfo(null, new RGB(51, 0, 51)),
-      new ColorInfo(null, new RGB(102, 0, 51)),
-      new ColorInfo(null, new RGB(153, 0, 51)),
-      new ColorInfo(null, new RGB(204, 0, 51)),
-      new ColorInfo(null, new RGB(255, 0, 51)),
-      new ColorInfo(null, new RGB(0, 0, 102)),
-      new ColorInfo(null, new RGB(51, 0, 102)),
-      new ColorInfo(null, new RGB(102, 0, 102)),
-      new ColorInfo(null, new RGB(153, 0, 102)),
-      new ColorInfo(null, new RGB(204, 0, 102)),
-      new ColorInfo(null, new RGB(255, 0, 102)),
-      new ColorInfo(null, new RGB(0, 0, 153)),
-      new ColorInfo(null, new RGB(51, 0, 153)),
-      new ColorInfo(null, new RGB(102, 0, 153)),
-      new ColorInfo(null, new RGB(153, 0, 153)),
-      new ColorInfo(null, new RGB(204, 0, 153)),
-      new ColorInfo(null, new RGB(255, 0, 153)),
-      new ColorInfo(null, new RGB(0, 0, 204)),
-      new ColorInfo(null, new RGB(51, 0, 204)),
-      new ColorInfo(null, new RGB(102, 0, 204)),
-      new ColorInfo(null, new RGB(153, 0, 204)),
-      new ColorInfo(null, new RGB(204, 0, 204)),
-      new ColorInfo(null, new RGB(255, 0, 204)),
-      new ColorInfo(null, new RGB(0, 0, 255)),
-      new ColorInfo(null, new RGB(51, 0, 255)),
-      new ColorInfo(null, new RGB(102, 0, 255)),
-      new ColorInfo(null, new RGB(153, 0, 255)),
-      new ColorInfo(null, new RGB(204, 0, 255)),
-      new ColorInfo(null, new RGB(255, 0, 255)),
-      new ColorInfo(null, new RGB(0, 51, 0)),
-      new ColorInfo(null, new RGB(51, 51, 0)),
-      new ColorInfo(null, new RGB(102, 51, 0)),
-      new ColorInfo(null, new RGB(153, 51, 0)),
-      new ColorInfo(null, new RGB(204, 51, 0)),
-      new ColorInfo(null, new RGB(255, 51, 0)),
-      new ColorInfo(null, new RGB(0, 51, 51)),
-      new ColorInfo(null, new RGB(51, 51, 51)),
-      new ColorInfo(null, new RGB(102, 51, 51)),
-      new ColorInfo(null, new RGB(153, 51, 51)),
-      new ColorInfo(null, new RGB(204, 51, 51)),
-      new ColorInfo(null, new RGB(255, 51, 51)),
-      new ColorInfo(null, new RGB(0, 51, 102)),
-      new ColorInfo(null, new RGB(51, 51, 102)),
-      new ColorInfo(null, new RGB(102, 51, 102)),
-      new ColorInfo(null, new RGB(153, 51, 102)),
-      new ColorInfo(null, new RGB(204, 51, 102)),
-      new ColorInfo(null, new RGB(255, 51, 102)),
-      new ColorInfo(null, new RGB(0, 51, 153)),
-      new ColorInfo(null, new RGB(51, 51, 153)),
-      new ColorInfo(null, new RGB(102, 51, 153)),
-      new ColorInfo(null, new RGB(153, 51, 153)),
-      new ColorInfo(null, new RGB(204, 51, 153)),
-      new ColorInfo(null, new RGB(255, 51, 153)),
-      new ColorInfo(null, new RGB(0, 51, 204)),
-      new ColorInfo(null, new RGB(51, 51, 204)),
-      new ColorInfo(null, new RGB(102, 51, 204)),
-      new ColorInfo(null, new RGB(153, 51, 204)),
-      new ColorInfo(null, new RGB(204, 51, 204)),
-      new ColorInfo(null, new RGB(255, 51, 204)),
-      new ColorInfo(null, new RGB(0, 51, 255)),
-      new ColorInfo(null, new RGB(51, 51, 255)),
-      new ColorInfo(null, new RGB(102, 51, 255)),
-      new ColorInfo(null, new RGB(153, 51, 255)),
-      new ColorInfo(null, new RGB(204, 51, 255)),
-      new ColorInfo(null, new RGB(255, 51, 255)),
-      new ColorInfo(null, new RGB(0, 102, 0)),
-      new ColorInfo(null, new RGB(51, 102, 0)),
-      new ColorInfo(null, new RGB(102, 102, 0)),
-      new ColorInfo(null, new RGB(153, 102, 0)),
-      new ColorInfo(null, new RGB(204, 102, 0)),
-      new ColorInfo(null, new RGB(255, 102, 0)),
-      new ColorInfo(null, new RGB(0, 102, 51)),
-      new ColorInfo(null, new RGB(51, 102, 51)),
-      new ColorInfo(null, new RGB(102, 102, 51)),
-      new ColorInfo(null, new RGB(153, 102, 51)),
-      new ColorInfo(null, new RGB(204, 102, 51)),
-      new ColorInfo(null, new RGB(255, 102, 51)),
-      new ColorInfo(null, new RGB(0, 102, 102)),
-      new ColorInfo(null, new RGB(51, 102, 102)),
-      new ColorInfo(null, new RGB(102, 102, 102)),
-      new ColorInfo(null, new RGB(153, 102, 102)),
-      new ColorInfo(null, new RGB(204, 102, 102)),
-      new ColorInfo(null, new RGB(255, 102, 102)),
-      new ColorInfo(null, new RGB(0, 102, 153)),
-      new ColorInfo(null, new RGB(51, 102, 153)),
-      new ColorInfo(null, new RGB(102, 102, 153)),
-      new ColorInfo(null, new RGB(153, 102, 153)),
-      new ColorInfo(null, new RGB(204, 102, 153)),
-      new ColorInfo(null, new RGB(255, 102, 153)),
-      new ColorInfo(null, new RGB(0, 102, 204)),
-      new ColorInfo(null, new RGB(51, 102, 204)),
-      new ColorInfo(null, new RGB(102, 102, 204)),
-      new ColorInfo(null, new RGB(153, 102, 204)),
-      new ColorInfo(null, new RGB(204, 102, 204)),
-      new ColorInfo(null, new RGB(255, 102, 204)),
-      new ColorInfo(null, new RGB(0, 102, 255)),
-      new ColorInfo(null, new RGB(51, 102, 255)),
-      new ColorInfo(null, new RGB(102, 102, 255)),
-      new ColorInfo(null, new RGB(153, 102, 255)),
-      new ColorInfo(null, new RGB(204, 102, 255)),
-      new ColorInfo(null, new RGB(255, 102, 255)),
-      new ColorInfo(null, new RGB(0, 153, 0)),
-      new ColorInfo(null, new RGB(51, 153, 0)),
-      new ColorInfo(null, new RGB(102, 153, 0)),
-      new ColorInfo(null, new RGB(153, 153, 0)),
-      new ColorInfo(null, new RGB(204, 153, 0)),
-      new ColorInfo(null, new RGB(255, 153, 0)),
-      new ColorInfo(null, new RGB(0, 153, 51)),
-      new ColorInfo(null, new RGB(51, 153, 51)),
-      new ColorInfo(null, new RGB(102, 153, 51)),
-      new ColorInfo(null, new RGB(153, 153, 51)),
-      new ColorInfo(null, new RGB(204, 153, 51)),
-      new ColorInfo(null, new RGB(255, 153, 51)),
-      new ColorInfo(null, new RGB(0, 153, 102)),
-      new ColorInfo(null, new RGB(51, 153, 102)),
-      new ColorInfo(null, new RGB(102, 153, 102)),
-      new ColorInfo(null, new RGB(153, 153, 102)),
-      new ColorInfo(null, new RGB(204, 153, 102)),
-      new ColorInfo(null, new RGB(255, 153, 102)),
-      new ColorInfo(null, new RGB(0, 153, 153)),
-      new ColorInfo(null, new RGB(51, 153, 153)),
-      new ColorInfo(null, new RGB(102, 153, 153)),
-      new ColorInfo(null, new RGB(153, 153, 153)),
-      new ColorInfo(null, new RGB(204, 153, 153)),
-      new ColorInfo(null, new RGB(255, 153, 153)),
-      new ColorInfo(null, new RGB(0, 153, 204)),
-      new ColorInfo(null, new RGB(51, 153, 204)),
-      new ColorInfo(null, new RGB(102, 153, 204)),
-      new ColorInfo(null, new RGB(153, 153, 204)),
-      new ColorInfo(null, new RGB(204, 153, 204)),
-      new ColorInfo(null, new RGB(255, 153, 204)),
-      new ColorInfo(null, new RGB(0, 153, 255)),
-      new ColorInfo(null, new RGB(51, 153, 255)),
-      new ColorInfo(null, new RGB(102, 153, 255)),
-      new ColorInfo(null, new RGB(153, 153, 255)),
-      new ColorInfo(null, new RGB(204, 153, 255)),
-      new ColorInfo(null, new RGB(255, 153, 255)),
-      new ColorInfo(null, new RGB(0, 204, 0)),
-      new ColorInfo(null, new RGB(51, 204, 0)),
-      new ColorInfo(null, new RGB(102, 204, 0)),
-      new ColorInfo(null, new RGB(153, 204, 0)),
-      new ColorInfo(null, new RGB(204, 204, 0)),
-      new ColorInfo(null, new RGB(255, 204, 0)),
-      new ColorInfo(null, new RGB(0, 204, 51)),
-      new ColorInfo(null, new RGB(51, 204, 51)),
-      new ColorInfo(null, new RGB(102, 204, 51)),
-      new ColorInfo(null, new RGB(153, 204, 51)),
-      new ColorInfo(null, new RGB(204, 204, 51)),
-      new ColorInfo(null, new RGB(255, 204, 51)),
-      new ColorInfo(null, new RGB(0, 204, 102)),
-      new ColorInfo(null, new RGB(51, 204, 102)),
-      new ColorInfo(null, new RGB(102, 204, 102)),
-      new ColorInfo(null, new RGB(153, 204, 102)),
-      new ColorInfo(null, new RGB(204, 204, 102)),
-      new ColorInfo(null, new RGB(255, 204, 102)),
-      new ColorInfo(null, new RGB(0, 204, 153)),
-      new ColorInfo(null, new RGB(51, 204, 153)),
-      new ColorInfo(null, new RGB(102, 204, 153)),
-      new ColorInfo(null, new RGB(153, 204, 153)),
-      new ColorInfo(null, new RGB(204, 204, 153)),
-      new ColorInfo(null, new RGB(255, 204, 153)),
-      new ColorInfo(null, new RGB(0, 204, 204)),
-      new ColorInfo(null, new RGB(51, 204, 204)),
-      new ColorInfo(null, new RGB(102, 204, 204)),
-      new ColorInfo(null, new RGB(153, 204, 204)),
-      new ColorInfo(null, new RGB(204, 204, 204)),
-      new ColorInfo(null, new RGB(255, 204, 204)),
-      new ColorInfo(null, new RGB(0, 204, 255)),
-      new ColorInfo(null, new RGB(51, 204, 255)),
-      new ColorInfo(null, new RGB(102, 204, 255)),
-      new ColorInfo(null, new RGB(153, 204, 255)),
-      new ColorInfo(null, new RGB(204, 204, 255)),
-      new ColorInfo(null, new RGB(255, 204, 255)),
-      new ColorInfo(null, new RGB(0, 255, 0)),
-      new ColorInfo(null, new RGB(51, 255, 0)),
-      new ColorInfo(null, new RGB(102, 255, 0)),
-      new ColorInfo(null, new RGB(153, 255, 0)),
-      new ColorInfo(null, new RGB(204, 255, 0)),
-      new ColorInfo(null, new RGB(255, 255, 0)),
-      new ColorInfo(null, new RGB(0, 255, 51)),
-      new ColorInfo(null, new RGB(51, 255, 51)),
-      new ColorInfo(null, new RGB(102, 255, 51)),
-      new ColorInfo(null, new RGB(153, 255, 51)),
-      new ColorInfo(null, new RGB(204, 255, 51)),
-      new ColorInfo(null, new RGB(255, 255, 51)),
-      new ColorInfo(null, new RGB(0, 255, 102)),
-      new ColorInfo(null, new RGB(51, 255, 102)),
-      new ColorInfo(null, new RGB(102, 255, 102)),
-      new ColorInfo(null, new RGB(153, 255, 102)),
-      new ColorInfo(null, new RGB(204, 255, 102)),
-      new ColorInfo(null, new RGB(255, 255, 102)),
-      new ColorInfo(null, new RGB(0, 255, 153)),
-      new ColorInfo(null, new RGB(51, 255, 153)),
-      new ColorInfo(null, new RGB(102, 255, 153)),
-      new ColorInfo(null, new RGB(153, 255, 153)),
-      new ColorInfo(null, new RGB(204, 255, 153)),
-      new ColorInfo(null, new RGB(255, 255, 153)),
-      new ColorInfo(null, new RGB(0, 255, 204)),
-      new ColorInfo(null, new RGB(51, 255, 204)),
-      new ColorInfo(null, new RGB(102, 255, 204)),
-      new ColorInfo(null, new RGB(153, 255, 204)),
-      new ColorInfo(null, new RGB(204, 255, 204)),
-      new ColorInfo(null, new RGB(255, 255, 204)),
-      new ColorInfo(null, new RGB(0, 255, 255)),
-      new ColorInfo(null, new RGB(51, 255, 255)),
-      new ColorInfo(null, new RGB(102, 255, 255)),
-      new ColorInfo(null, new RGB(153, 255, 255)),
-      new ColorInfo(null, new RGB(204, 255, 255)),
-      new ColorInfo(null, new RGB(255, 255, 255)),};
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Colors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final ColorInfo[] WEB_COLORS = new ColorInfo[]{
+			new ColorInfo(null, new RGB(0, 0, 0)),
+			new ColorInfo(null, new RGB(51, 0, 0)),
+			new ColorInfo(null, new RGB(102, 0, 0)),
+			new ColorInfo(null, new RGB(153, 0, 0)),
+			new ColorInfo(null, new RGB(204, 0, 0)),
+			new ColorInfo(null, new RGB(255, 0, 0)),
+			new ColorInfo(null, new RGB(0, 0, 51)),
+			new ColorInfo(null, new RGB(51, 0, 51)),
+			new ColorInfo(null, new RGB(102, 0, 51)),
+			new ColorInfo(null, new RGB(153, 0, 51)),
+			new ColorInfo(null, new RGB(204, 0, 51)),
+			new ColorInfo(null, new RGB(255, 0, 51)),
+			new ColorInfo(null, new RGB(0, 0, 102)),
+			new ColorInfo(null, new RGB(51, 0, 102)),
+			new ColorInfo(null, new RGB(102, 0, 102)),
+			new ColorInfo(null, new RGB(153, 0, 102)),
+			new ColorInfo(null, new RGB(204, 0, 102)),
+			new ColorInfo(null, new RGB(255, 0, 102)),
+			new ColorInfo(null, new RGB(0, 0, 153)),
+			new ColorInfo(null, new RGB(51, 0, 153)),
+			new ColorInfo(null, new RGB(102, 0, 153)),
+			new ColorInfo(null, new RGB(153, 0, 153)),
+			new ColorInfo(null, new RGB(204, 0, 153)),
+			new ColorInfo(null, new RGB(255, 0, 153)),
+			new ColorInfo(null, new RGB(0, 0, 204)),
+			new ColorInfo(null, new RGB(51, 0, 204)),
+			new ColorInfo(null, new RGB(102, 0, 204)),
+			new ColorInfo(null, new RGB(153, 0, 204)),
+			new ColorInfo(null, new RGB(204, 0, 204)),
+			new ColorInfo(null, new RGB(255, 0, 204)),
+			new ColorInfo(null, new RGB(0, 0, 255)),
+			new ColorInfo(null, new RGB(51, 0, 255)),
+			new ColorInfo(null, new RGB(102, 0, 255)),
+			new ColorInfo(null, new RGB(153, 0, 255)),
+			new ColorInfo(null, new RGB(204, 0, 255)),
+			new ColorInfo(null, new RGB(255, 0, 255)),
+			new ColorInfo(null, new RGB(0, 51, 0)),
+			new ColorInfo(null, new RGB(51, 51, 0)),
+			new ColorInfo(null, new RGB(102, 51, 0)),
+			new ColorInfo(null, new RGB(153, 51, 0)),
+			new ColorInfo(null, new RGB(204, 51, 0)),
+			new ColorInfo(null, new RGB(255, 51, 0)),
+			new ColorInfo(null, new RGB(0, 51, 51)),
+			new ColorInfo(null, new RGB(51, 51, 51)),
+			new ColorInfo(null, new RGB(102, 51, 51)),
+			new ColorInfo(null, new RGB(153, 51, 51)),
+			new ColorInfo(null, new RGB(204, 51, 51)),
+			new ColorInfo(null, new RGB(255, 51, 51)),
+			new ColorInfo(null, new RGB(0, 51, 102)),
+			new ColorInfo(null, new RGB(51, 51, 102)),
+			new ColorInfo(null, new RGB(102, 51, 102)),
+			new ColorInfo(null, new RGB(153, 51, 102)),
+			new ColorInfo(null, new RGB(204, 51, 102)),
+			new ColorInfo(null, new RGB(255, 51, 102)),
+			new ColorInfo(null, new RGB(0, 51, 153)),
+			new ColorInfo(null, new RGB(51, 51, 153)),
+			new ColorInfo(null, new RGB(102, 51, 153)),
+			new ColorInfo(null, new RGB(153, 51, 153)),
+			new ColorInfo(null, new RGB(204, 51, 153)),
+			new ColorInfo(null, new RGB(255, 51, 153)),
+			new ColorInfo(null, new RGB(0, 51, 204)),
+			new ColorInfo(null, new RGB(51, 51, 204)),
+			new ColorInfo(null, new RGB(102, 51, 204)),
+			new ColorInfo(null, new RGB(153, 51, 204)),
+			new ColorInfo(null, new RGB(204, 51, 204)),
+			new ColorInfo(null, new RGB(255, 51, 204)),
+			new ColorInfo(null, new RGB(0, 51, 255)),
+			new ColorInfo(null, new RGB(51, 51, 255)),
+			new ColorInfo(null, new RGB(102, 51, 255)),
+			new ColorInfo(null, new RGB(153, 51, 255)),
+			new ColorInfo(null, new RGB(204, 51, 255)),
+			new ColorInfo(null, new RGB(255, 51, 255)),
+			new ColorInfo(null, new RGB(0, 102, 0)),
+			new ColorInfo(null, new RGB(51, 102, 0)),
+			new ColorInfo(null, new RGB(102, 102, 0)),
+			new ColorInfo(null, new RGB(153, 102, 0)),
+			new ColorInfo(null, new RGB(204, 102, 0)),
+			new ColorInfo(null, new RGB(255, 102, 0)),
+			new ColorInfo(null, new RGB(0, 102, 51)),
+			new ColorInfo(null, new RGB(51, 102, 51)),
+			new ColorInfo(null, new RGB(102, 102, 51)),
+			new ColorInfo(null, new RGB(153, 102, 51)),
+			new ColorInfo(null, new RGB(204, 102, 51)),
+			new ColorInfo(null, new RGB(255, 102, 51)),
+			new ColorInfo(null, new RGB(0, 102, 102)),
+			new ColorInfo(null, new RGB(51, 102, 102)),
+			new ColorInfo(null, new RGB(102, 102, 102)),
+			new ColorInfo(null, new RGB(153, 102, 102)),
+			new ColorInfo(null, new RGB(204, 102, 102)),
+			new ColorInfo(null, new RGB(255, 102, 102)),
+			new ColorInfo(null, new RGB(0, 102, 153)),
+			new ColorInfo(null, new RGB(51, 102, 153)),
+			new ColorInfo(null, new RGB(102, 102, 153)),
+			new ColorInfo(null, new RGB(153, 102, 153)),
+			new ColorInfo(null, new RGB(204, 102, 153)),
+			new ColorInfo(null, new RGB(255, 102, 153)),
+			new ColorInfo(null, new RGB(0, 102, 204)),
+			new ColorInfo(null, new RGB(51, 102, 204)),
+			new ColorInfo(null, new RGB(102, 102, 204)),
+			new ColorInfo(null, new RGB(153, 102, 204)),
+			new ColorInfo(null, new RGB(204, 102, 204)),
+			new ColorInfo(null, new RGB(255, 102, 204)),
+			new ColorInfo(null, new RGB(0, 102, 255)),
+			new ColorInfo(null, new RGB(51, 102, 255)),
+			new ColorInfo(null, new RGB(102, 102, 255)),
+			new ColorInfo(null, new RGB(153, 102, 255)),
+			new ColorInfo(null, new RGB(204, 102, 255)),
+			new ColorInfo(null, new RGB(255, 102, 255)),
+			new ColorInfo(null, new RGB(0, 153, 0)),
+			new ColorInfo(null, new RGB(51, 153, 0)),
+			new ColorInfo(null, new RGB(102, 153, 0)),
+			new ColorInfo(null, new RGB(153, 153, 0)),
+			new ColorInfo(null, new RGB(204, 153, 0)),
+			new ColorInfo(null, new RGB(255, 153, 0)),
+			new ColorInfo(null, new RGB(0, 153, 51)),
+			new ColorInfo(null, new RGB(51, 153, 51)),
+			new ColorInfo(null, new RGB(102, 153, 51)),
+			new ColorInfo(null, new RGB(153, 153, 51)),
+			new ColorInfo(null, new RGB(204, 153, 51)),
+			new ColorInfo(null, new RGB(255, 153, 51)),
+			new ColorInfo(null, new RGB(0, 153, 102)),
+			new ColorInfo(null, new RGB(51, 153, 102)),
+			new ColorInfo(null, new RGB(102, 153, 102)),
+			new ColorInfo(null, new RGB(153, 153, 102)),
+			new ColorInfo(null, new RGB(204, 153, 102)),
+			new ColorInfo(null, new RGB(255, 153, 102)),
+			new ColorInfo(null, new RGB(0, 153, 153)),
+			new ColorInfo(null, new RGB(51, 153, 153)),
+			new ColorInfo(null, new RGB(102, 153, 153)),
+			new ColorInfo(null, new RGB(153, 153, 153)),
+			new ColorInfo(null, new RGB(204, 153, 153)),
+			new ColorInfo(null, new RGB(255, 153, 153)),
+			new ColorInfo(null, new RGB(0, 153, 204)),
+			new ColorInfo(null, new RGB(51, 153, 204)),
+			new ColorInfo(null, new RGB(102, 153, 204)),
+			new ColorInfo(null, new RGB(153, 153, 204)),
+			new ColorInfo(null, new RGB(204, 153, 204)),
+			new ColorInfo(null, new RGB(255, 153, 204)),
+			new ColorInfo(null, new RGB(0, 153, 255)),
+			new ColorInfo(null, new RGB(51, 153, 255)),
+			new ColorInfo(null, new RGB(102, 153, 255)),
+			new ColorInfo(null, new RGB(153, 153, 255)),
+			new ColorInfo(null, new RGB(204, 153, 255)),
+			new ColorInfo(null, new RGB(255, 153, 255)),
+			new ColorInfo(null, new RGB(0, 204, 0)),
+			new ColorInfo(null, new RGB(51, 204, 0)),
+			new ColorInfo(null, new RGB(102, 204, 0)),
+			new ColorInfo(null, new RGB(153, 204, 0)),
+			new ColorInfo(null, new RGB(204, 204, 0)),
+			new ColorInfo(null, new RGB(255, 204, 0)),
+			new ColorInfo(null, new RGB(0, 204, 51)),
+			new ColorInfo(null, new RGB(51, 204, 51)),
+			new ColorInfo(null, new RGB(102, 204, 51)),
+			new ColorInfo(null, new RGB(153, 204, 51)),
+			new ColorInfo(null, new RGB(204, 204, 51)),
+			new ColorInfo(null, new RGB(255, 204, 51)),
+			new ColorInfo(null, new RGB(0, 204, 102)),
+			new ColorInfo(null, new RGB(51, 204, 102)),
+			new ColorInfo(null, new RGB(102, 204, 102)),
+			new ColorInfo(null, new RGB(153, 204, 102)),
+			new ColorInfo(null, new RGB(204, 204, 102)),
+			new ColorInfo(null, new RGB(255, 204, 102)),
+			new ColorInfo(null, new RGB(0, 204, 153)),
+			new ColorInfo(null, new RGB(51, 204, 153)),
+			new ColorInfo(null, new RGB(102, 204, 153)),
+			new ColorInfo(null, new RGB(153, 204, 153)),
+			new ColorInfo(null, new RGB(204, 204, 153)),
+			new ColorInfo(null, new RGB(255, 204, 153)),
+			new ColorInfo(null, new RGB(0, 204, 204)),
+			new ColorInfo(null, new RGB(51, 204, 204)),
+			new ColorInfo(null, new RGB(102, 204, 204)),
+			new ColorInfo(null, new RGB(153, 204, 204)),
+			new ColorInfo(null, new RGB(204, 204, 204)),
+			new ColorInfo(null, new RGB(255, 204, 204)),
+			new ColorInfo(null, new RGB(0, 204, 255)),
+			new ColorInfo(null, new RGB(51, 204, 255)),
+			new ColorInfo(null, new RGB(102, 204, 255)),
+			new ColorInfo(null, new RGB(153, 204, 255)),
+			new ColorInfo(null, new RGB(204, 204, 255)),
+			new ColorInfo(null, new RGB(255, 204, 255)),
+			new ColorInfo(null, new RGB(0, 255, 0)),
+			new ColorInfo(null, new RGB(51, 255, 0)),
+			new ColorInfo(null, new RGB(102, 255, 0)),
+			new ColorInfo(null, new RGB(153, 255, 0)),
+			new ColorInfo(null, new RGB(204, 255, 0)),
+			new ColorInfo(null, new RGB(255, 255, 0)),
+			new ColorInfo(null, new RGB(0, 255, 51)),
+			new ColorInfo(null, new RGB(51, 255, 51)),
+			new ColorInfo(null, new RGB(102, 255, 51)),
+			new ColorInfo(null, new RGB(153, 255, 51)),
+			new ColorInfo(null, new RGB(204, 255, 51)),
+			new ColorInfo(null, new RGB(255, 255, 51)),
+			new ColorInfo(null, new RGB(0, 255, 102)),
+			new ColorInfo(null, new RGB(51, 255, 102)),
+			new ColorInfo(null, new RGB(102, 255, 102)),
+			new ColorInfo(null, new RGB(153, 255, 102)),
+			new ColorInfo(null, new RGB(204, 255, 102)),
+			new ColorInfo(null, new RGB(255, 255, 102)),
+			new ColorInfo(null, new RGB(0, 255, 153)),
+			new ColorInfo(null, new RGB(51, 255, 153)),
+			new ColorInfo(null, new RGB(102, 255, 153)),
+			new ColorInfo(null, new RGB(153, 255, 153)),
+			new ColorInfo(null, new RGB(204, 255, 153)),
+			new ColorInfo(null, new RGB(255, 255, 153)),
+			new ColorInfo(null, new RGB(0, 255, 204)),
+			new ColorInfo(null, new RGB(51, 255, 204)),
+			new ColorInfo(null, new RGB(102, 255, 204)),
+			new ColorInfo(null, new RGB(153, 255, 204)),
+			new ColorInfo(null, new RGB(204, 255, 204)),
+			new ColorInfo(null, new RGB(255, 255, 204)),
+			new ColorInfo(null, new RGB(0, 255, 255)),
+			new ColorInfo(null, new RGB(51, 255, 255)),
+			new ColorInfo(null, new RGB(102, 255, 255)),
+			new ColorInfo(null, new RGB(153, 255, 255)),
+			new ColorInfo(null, new RGB(204, 255, 255)),
+			new ColorInfo(null, new RGB(255, 255, 255)),};
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/xml/AbstractDocumentEditContext.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/xml/AbstractDocumentEditContext.java
index 97db1db9d..fcbb8fd7d 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/xml/AbstractDocumentEditContext.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/xml/AbstractDocumentEditContext.java
@@ -35,637 +35,637 @@
  * @coverage core.util.xml
  */
 public abstract class AbstractDocumentEditContext {
-  private IDocument m_bufferDocument;
-  private IDocument m_document;
-  private DocumentElement m_root;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractDocumentEditContext() throws Exception {
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parsing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected final void parse(IDocument bufferDocument) throws Exception {
-    m_bufferDocument = bufferDocument;
-    m_document = new Document(m_bufferDocument.get());
-    // parse and prepare root
-    {
-      AbstractDocumentHandler documentHandler = createDocumentHandler();
-      Reader reader = new StringReader(m_document.get());
-      try {
-        QParser.parse(reader, documentHandler);
-        m_root = documentHandler.getRootNode();
-      } catch (Throwable e) {
-        disconnect();
-        throw ReflectionUtils.propagate(e);
-      } finally {
-        reader.close();
-      }
-    }
-    // install document update listener
-    m_root.getModel().addModelChangedListener(m_modelChangedListener);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Buffer operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Commits changes made in this context to original {@link IDocument}.
-   */
-  public void commit() throws Exception {
-    String newContent = m_document.get();
-    String oldContent = m_bufferDocument.get();
-    if (!newContent.equals(oldContent)) {
-      int[] intervals = StringUtilities.getDifferenceIntervals(oldContent, newContent);
-      m_bufferDocument.replace(
-          intervals[0],
-          intervals[1],
-          newContent.substring(intervals[2], intervals[2] + intervals[3]));
-    }
-  }
-
-  /**
-   * Disconnects this context from {@link IDocument}. All changes made in model after this point are
-   * ignored and not reflected in document.
-   */
-  public void disconnect() throws CoreException {
-    // remove document update listener
-    if (m_root != null) {
-      m_root.getModel().removeModelChangedListener(m_modelChangedListener);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the root {@link DocumentElement}.
-   */
-  public final DocumentElement getRoot() {
-    return m_root;
-  }
-
-  /**
-   * @return the complex text of document.
-   */
-  public final String getText() {
-    return m_document.get();
-  }
-
-  /**
-   * @return the sub-string of document's text.
-   */
-  public final String getText(final int offset, final int length) {
-    return ExecutionUtils.runObject(new RunnableObjectEx<String>() {
-      @Override
-      public String runObject() throws Exception {
-        return m_document.get(offset, length);
-      }
-    }, "Can not get offset:%d length:%d", offset, length);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Abstract methods
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Creates document handler for loading model.
-   */
-  protected AbstractDocumentHandler createDocumentHandler() {
-    return new AbstractDocumentHandler();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Document modification on model modifications
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final IModelChangedListener m_modelChangedListener = new IModelChangedListener() {
-    @Override
-    public void modelChanged(final ModelChangedEvent event) {
-      ExecutionUtils.runRethrow(new RunnableEx() {
-        @Override
-        public void run() throws Exception {
-          handleModelChange(event);
-        }
-      });
-    }
-  };
-
-  /**
-   * Performs document/model updates using given model modification event.
-   */
-  private void handleModelChange(ModelChangedEvent event) throws Exception {
-    int type = event.getChangeType();
-    Object changedObject = event.getChangedObject();
-    if (type == ModelChangedEvent.CHANGE) {
-      if (changedObject instanceof DocumentElement) {
-        if (event.getChangedProperty() == DocumentElement.P_XML_TAG_NAME) {
-          DocumentElement element = (DocumentElement) changedObject;
-          String oldXMLTagName = (String) event.getOldValue();
-          handleNodeRename(element, oldXMLTagName);
-        } else {
-          handleAttributeChange(event);
-        }
-      } else if (changedObject instanceof DocumentTextNode) {
-        DocumentTextNode textNode = (DocumentTextNode) changedObject;
-        handleTextChange(textNode);
-      }
-    } else if (type == ModelChangedEvent.INSERT) {
-      if (changedObject instanceof DocumentElement) {
-        DocumentElement element = (DocumentElement) changedObject;
-        handleNodeInsert(element);
-      } else if (changedObject instanceof DocumentAttribute) {
-        DocumentAttribute attribute = (DocumentAttribute) changedObject;
-        handleAttributeInsert(attribute);
-      } else if (changedObject instanceof DocumentTextNode) {
-        DocumentTextNode textNode = (DocumentTextNode) changedObject;
-        handleTextInsert(textNode);
-      }
-    } else if (type == ModelChangedEvent.MOVE) {
-      if (changedObject instanceof DocumentElement) {
-        DocumentElement oldParent = (DocumentElement) event.getOldValue();
-        DocumentElement newParent = (DocumentElement) event.getNewValue();
-        DocumentElement element = (DocumentElement) changedObject;
-        int position = Integer.parseInt(event.getChangedProperty());
-        handleNodeMove(element, oldParent, newParent, position);
-      }
-    } else if (type == ModelChangedEvent.REMOVE) {
-      if (changedObject instanceof DocumentElement) {
-        DocumentElement element = (DocumentElement) changedObject;
-        handleNodeDelete(element);
-      } else if (changedObject instanceof DocumentAttribute) {
-        DocumentAttribute attribute = (DocumentAttribute) changedObject;
-        handleAttributeDelete(attribute);
-      } else if (changedObject instanceof DocumentTextNode) {
-        DocumentTextNode textNode = (DocumentTextNode) changedObject;
-        handleTextDelete(textNode);
-      }
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Nodes
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void handleNodeDelete(DocumentElement element) throws Exception {
-    int stringStartIndex = getElementSourceOffset(element);
-    // delete part of document with node and any white spaces before it
-    // so, in usual situation, when node is on its own line, we will remove this line fully
-    int length = element.getOffset() + element.getLength() - stringStartIndex;
-    replaceString(stringStartIndex, length, "");
-    // if last child removed, then parent should be closed
-    closeIfNoChildren(element.getParent());
-  }
-
-  /**
-   * @return the indent of given {@link DocumentElement}.
-   */
-  private String getLineIndent(DocumentElement element) throws Exception {
-    int end = element.getOffset();
-    int start = end;
-    while (start != 0) {
-      char c = m_document.getChar(start - 1);
-      // in any case we need whitespace
-      if (!Character.isWhitespace(c)) {
-        break;
-      }
-      // stop on \r and \n
-      if (c == '\r' || c == '\n') {
-        break;
-      }
-      //
-      start--;
-    }
-    // return result
-    return m_document.get(start, end - start);
-  }
-
-  private void handleNodeRename(DocumentElement element, String oldXMLTagName) throws Exception {
-    replaceString(element.getOffset() + 1, oldXMLTagName.length(), element.getTag());
-    if (!element.isClosed()) {
-      replaceString(element.getCloseTagOffset() + 2, oldXMLTagName.length(), element.getTag());
-    }
-  }
-
-  private void handleNodeInsert(DocumentElement element) throws Exception {
-    DocumentElement parentNode = element.getParent();
-    ensureElementOpen(parentNode);
-    TargetInformation targetInfo =
-        prepareTargetInformation(parentNode, parentNode.indexOf(element));
-    int baseOffset = targetInfo.offset;
-    String prefix = targetInfo.prefix;
-    // add new tag
-    String text = "<" + element.getTag() + "/>";
-    replaceString(baseOffset, 0, prefix + text);
-    // remember offset and length
-    int offset = baseOffset + prefix.length();
-    element.setOffset(offset);
-    element.setLength(text.length());
-    element.setClosed(true);
-  }
-
-  /**
-   * If given "element" has no children, then convert in into closed.
-   */
-  private void closeIfNoChildren(DocumentElement element) throws Exception {
-    if (element.getChildren().isEmpty() && element.getTextNode() == null) {
-      int begin = element.getOpenTagOffset() + element.getOpenTagLength() - 1;
-      int end = element.getCloseTagOffset() + element.getCloseTagLength();
-      replaceString(begin, end - begin, "/>");
-      element.setClosed(true);
-    }
-  }
-
-  /**
-   * Ensures that given {@link DocumentElement} is in form <tag></tag>.
-   */
-  private void ensureElementOpen(DocumentElement element) throws Exception {
-    if (!element.isClosed()) {
-      return;
-    }
-    //
-    int oldLength = element.getLength();
-    int end = element.getOffset() + oldLength;
-    int line = m_document.getLineOfOffset(end);
-    String lineDelimiter = m_document.getLineDelimiter(line);
-    if (lineDelimiter == null) {
-      lineDelimiter = "\n";
-    }
-    // add closing tag
-    String closeTagReplacement =
-        lineDelimiter + getLineIndent(element) + "</" + element.getTag() + ">";
-    replaceString(end, 0, closeTagReplacement);
-    // remove close from initial tag
-    replaceString(end - 2, 2, ">");
-    // update length
-    element.setLength(oldLength + closeTagReplacement.length() - 1);
-    updateOpenCloseTags(element, end);
-  }
-
-  private static class TargetInformation {
-    int offset;
-    String prefix;
-  }
-
-  private TargetInformation prepareTargetInformation(DocumentElement parentNode, int index)
-      throws Exception {
-    // prepare:
-    //  1. baseOffset = (end of parent) or (end of previous child node)
-    //  2. indent = (indent of parent + "\t") or (indent of previous child node)
-    int baseOffset;
-    String indent;
-    {
-      if (index == 0) {
-        baseOffset = parentNode.getOpenTagOffset() + parentNode.getOpenTagLength();
-        indent = getLineIndent(parentNode) + "\t";
-      } else {
-        DocumentElement previousChild = parentNode.getChildAt(index - 1);
-        baseOffset = previousChild.getOffset() + previousChild.getLength();
-        indent = getLineIndent(previousChild);
-      }
-    }
-    // prepare prefix = EOL + indent
-    String prefix;
-    {
-      int line = m_document.getLineOfOffset(baseOffset);
-      String lineDelimiter = m_document.getLineDelimiter(line);
-      if (lineDelimiter == null) {
-        prefix = "";
-      } else {
-        prefix = lineDelimiter + indent;
-      }
-    }
-    //
-    TargetInformation target = new TargetInformation();
-    target.offset = baseOffset;
-    target.prefix = prefix;
-    return target;
-  }
-
-  private void handleNodeMove(DocumentElement element,
-      DocumentElement oldParent,
-      DocumentElement newParent,
-      int index) throws Exception {
-    // remove from old parent
-    // if reorder in same parent, tweak index
-    {
-      int oldIndex = oldParent.indexOf(element);
-      oldParent.m_children.remove(element);
-      if (newParent == oldParent && oldIndex < index) {
-        index--;
-      }
-    }
-    // prepare begin of String to move
-    int beginOffset = getElementSourceOffset(element);
-    // extract String from old parent
-    String elementString;
-    {
-      int endOffset = element.getOffset() + element.getLength();
-      elementString = m_document.get(beginOffset, endOffset - beginOffset);
-      elementString = StringUtils.stripStart(elementString, null);
-      replaceString(beginOffset, endOffset - beginOffset, "");
-    }
-    // prepare target information
-    ensureElementOpen(newParent);
-    TargetInformation targetInfo = prepareTargetInformation(newParent, index);
-    // insert prefix
-    String prefix = targetInfo.prefix;
-    int newOffset = targetInfo.offset;
-    replaceString(newOffset, 0, prefix);
-    newOffset += prefix.length();
-    // insert "element" String
-    replaceString(newOffset, 0, elementString);
-    // add into new parent
-    newParent.m_children.add(index, element);
-    element.setParent(newParent);
-    moveElementOffsets(element, newOffset - element.getOffset());
-    // if last child was moved, then parent should be closed
-    closeIfNoChildren(oldParent);
-  }
-
-  /**
-   * @return the begin of {@link String} to move/remove when we move/remove given
-   *         {@link DocumentElement}.
-   */
-  private int getElementSourceOffset(DocumentElement element) throws Exception {
-    int offset = element.getOffset();
-    while (true) {
-      // may be hit of "text node"
-      {
-        DocumentTextNode textNode = element.getParent().getTextNode();
-        if (textNode != null
-            && textNode.getOffset() <= offset
-            && offset <= textNode.getOffset() + textNode.getLength()) {
-          break;
-        }
-      }
-      // non-whitespace character
-      {
-        char c = m_document.getChar(offset - 1);
-        if (!Character.isWhitespace(c)) {
-          break;
-        }
-      }
-      // check previous
-      offset--;
-    }
-    return offset;
-  }
-
-  private void moveElementOffsets(DocumentElement start, final int delta) {
-    start.accept(new DocumentModelVisitor() {
-      @Override
-      public void endVisit(DocumentElement element) {
-        element.setOffset(element.getOffset() + delta);
-        if (!element.isClosed()) {
-          element.setOpenTagOffset(element.getOpenTagOffset() + delta);
-          element.setCloseTagOffset(element.getCloseTagOffset() + delta);
-        }
-      }
-
-      @Override
-      public void visit(DocumentAttribute attribute) {
-        attribute.setNameOffset(attribute.getNameOffset() + delta);
-        attribute.setValueOffset(attribute.getValueOffset() + delta);
-      }
-
-      @Override
-      public void visit(DocumentTextNode node) {
-        node.setOffset(node.getOffset() + delta);
-      }
-    });
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Attributes
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void handleAttributeChange(ModelChangedEvent event) throws Exception {
-    DocumentElement element = (DocumentElement) event.getChangedObject();
-    DocumentAttribute attribute = element.getDocumentAttribute(event.getChangedProperty());
-    // prepare existing offset/length
-    int offset = attribute.getValueOffset();
-    int length = attribute.getValueLength();
-    // update document
-    String newValue = (String) event.getNewValue();
-    replaceString(offset, length, newValue);
-  }
-
-  private void handleAttributeInsert(DocumentAttribute attribute) throws Exception {
-    DocumentElement element = attribute.getEnclosingElement();
-    // prepare offset where to insert attribute
-    int offset;
-    {
-      // find last attribute
-      DocumentAttribute lastAttribute = null;
-      for (DocumentAttribute existingAttribute : element.getDocumentAttributes()) {
-        if (existingAttribute != attribute) {
-          lastAttribute = existingAttribute;
-        }
-      }
-      //
-      if (lastAttribute == null) {
-        offset = element.getOffset() + element.getTag().length() + 1;
-      } else {
-        offset = lastAttribute.getValueOffset() + lastAttribute.getValueLength() + 1;
-      }
-    }
-    // insert space
-    {
-      replaceString(offset, 0, " ");
-      offset++;
-    }
-    // update document
-    String assignOpen = "=\"";
-    {
-      String assignClose = "\"";
-      String text = attribute.getName() + assignOpen + attribute.getValue() + assignClose;
-      replaceString(offset, 0, text);
-    }
-    // set offset/length for name/value
-    {
-      int nameLength = attribute.getName().length();
-      attribute.setNameOffset(offset);
-      attribute.setNameLength(nameLength);
-      attribute.setValueOffset(offset + nameLength + assignOpen.length());
-      attribute.setValueLength(attribute.getValue().length());
-    }
-  }
-
-  private void handleAttributeDelete(DocumentAttribute attribute) throws Exception {
-    // prepare start of string to delete
-    int stringStartIndex = attribute.getNameOffset();
-    while (Character.isWhitespace(m_document.getChar(stringStartIndex - 1))) {
-      stringStartIndex--;
-    }
-    // delete part of document with attribute and any white spaces before it
-    int length = attribute.getValueOffset() + attribute.getValueLength() + 1 - stringStartIndex;
-    replaceString(stringStartIndex, length, "");
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Text
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void handleTextChange(DocumentTextNode textNode) throws Exception {
-    int offset = textNode.getOffset();
-    int length = textNode.getLength();
-    String text = textNode.getRawText();
-    replaceString(offset, length, text);
-  }
-
-  private void handleTextInsert(DocumentTextNode textNode) throws Exception {
-    DocumentElement parentElement = textNode.getEnclosingElement();
-    // ensure that parent is in form <tag></tag>
-    if (parentElement.isClosed()) {
-      int oldLength = parentElement.getLength();
-      // add closing tag
-      String closeTagReplacement = "</" + parentElement.getTag() + ">";
-      int parentEnd = parentElement.getOffset() + oldLength;
-      replaceString(parentEnd, 0, closeTagReplacement);
-      // remove close from initial tag
-      replaceString(parentEnd - 2, 2, ">");
-      // update length
-      parentElement.setLength(oldLength + closeTagReplacement.length() - 1);
-      updateOpenCloseTags(parentElement, parentEnd);
-    }
-    //
-    {
-      // add new text node
-      int startOffset = parentElement.getOpenTagOffset() + parentElement.getOpenTagLength();
-      int oldLength = parentElement.getCloseTagOffset() - startOffset;
-      String text = textNode.getRawText();
-      replaceString(startOffset, oldLength, text);
-      // remember offset and length
-      textNode.setOffset(startOffset);
-      textNode.setLength(text.length());
-    }
-  }
-
-  private void handleTextDelete(DocumentTextNode textNode) throws Exception {
-    replaceString(textNode.getOffset(), textNode.getLength(), "");
-    closeIfNoChildren(textNode.getEnclosingElement());
-  }
-
-  private static void updateOpenCloseTags(DocumentElement parentNode, int parentEnd) {
-    parentNode.setClosed(false);
-    // update open tag position
-    parentNode.setOpenTagOffset(parentNode.getOffset());
-    parentNode.setOpenTagLength(parentEnd - 1 - parentNode.getOffset());
-    // update close tag position
-    parentNode.setCloseTagLength(parentNode.getTag().length() + 3);
-    parentNode.setCloseTagOffset(parentNode.getOffset()
-        + parentNode.getLength()
-        - parentNode.getCloseTagLength());
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // String operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Replaces given region of document with new string. It updates also offset/length for nodes.
-   */
-  private void replaceString(final int start, int oldLength, String replacement) throws Exception {
-    // modify document
-    //System.out.println("|" + m_document.get(start, oldLength) + "| -> |" + replacement + "|");
-    m_document.replace(start, oldLength, replacement);
-    // update offset/length for model
-    final int newLength = replacement.length();
-    final int difference = newLength - oldLength;
-    if (difference != 0) {
-      final int oldEnd = start + oldLength;
-      m_root.accept(new DocumentModelVisitor() {
-        @Override
-        public void endVisit(DocumentElement element) {
-          Position position = updatePosition(element.getOffset(), element.getLength());
-          // update node position
-          element.setOffset(position.offset);
-          element.setLength(position.length);
-          if (!element.isClosed()) {
-            int openTagOffset = element.getOpenTagOffset();
-            int openTagLength = element.getOpenTagLength();
-            // update open tag position
-            if (openTagOffset < start && oldEnd < openTagOffset + openTagLength) {
-              element.setOpenTagLength(openTagLength + difference);
-            }
-            element.setOpenTagOffset(position.offset);
-            // update close tag position
-            int closeTagOffset = element.getCloseTagOffset();
-            if (start <= closeTagOffset) {
-              element.setCloseTagOffset(closeTagOffset + difference);
-            } else {
-              element.setCloseTagLength(position.offset + position.length - closeTagOffset);
-            }
-          }
-        }
-
-        @Override
-        public void visit(DocumentAttribute attribute) {
-          // update name position
-          {
-            Position position =
-                updatePosition(attribute.getNameOffset(), attribute.getNameLength());
-            attribute.setNameOffset(position.offset);
-            attribute.setNameLength(position.length);
-          }
-          // update value position
-          {
-            Position position =
-                updatePosition(attribute.getValueOffset(), attribute.getValueLength());
-            attribute.setValueOffset(position.offset);
-            attribute.setValueLength(position.length);
-          }
-        }
-
-        @Override
-        public void visit(DocumentTextNode node) {
-          Position position = updatePosition(node.getOffset(), node.getLength());
-          node.setOffset(position.offset);
-          node.setLength(position.length);
-        }
-
-        private Position updatePosition(int offset, int length) {
-          Position position = new Position(offset, length);
-          // special case: insert into empty position
-          if (offset == start && length == 0) {
-            position.length += difference;
-            return position;
-          }
-          // before changed region, no change
-          if (offset + length <= start) {
-            return position;
-          }
-          // after changed region, move it
-          if (offset >= oldEnd) {
-            position.offset += difference;
-            return position;
-          }
-          // encompasses the changed region, so extend it
-          /*if (offset <= start)*/{
-            Assert.isTrue(offset <= start);
-            position.length += difference;
-            return position;
-          }
-        }
-      });
-    }
-  }
+	private IDocument m_bufferDocument;
+	private IDocument m_document;
+	private DocumentElement m_root;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractDocumentEditContext() throws Exception {
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parsing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected final void parse(IDocument bufferDocument) throws Exception {
+		m_bufferDocument = bufferDocument;
+		m_document = new Document(m_bufferDocument.get());
+		// parse and prepare root
+		{
+			AbstractDocumentHandler documentHandler = createDocumentHandler();
+			Reader reader = new StringReader(m_document.get());
+			try {
+				QParser.parse(reader, documentHandler);
+				m_root = documentHandler.getRootNode();
+			} catch (Throwable e) {
+				disconnect();
+				throw ReflectionUtils.propagate(e);
+			} finally {
+				reader.close();
+			}
+		}
+		// install document update listener
+		m_root.getModel().addModelChangedListener(m_modelChangedListener);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Buffer operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Commits changes made in this context to original {@link IDocument}.
+	 */
+	public void commit() throws Exception {
+		String newContent = m_document.get();
+		String oldContent = m_bufferDocument.get();
+		if (!newContent.equals(oldContent)) {
+			int[] intervals = StringUtilities.getDifferenceIntervals(oldContent, newContent);
+			m_bufferDocument.replace(
+					intervals[0],
+					intervals[1],
+					newContent.substring(intervals[2], intervals[2] + intervals[3]));
+		}
+	}
+
+	/**
+	 * Disconnects this context from {@link IDocument}. All changes made in model after this point are
+	 * ignored and not reflected in document.
+	 */
+	public void disconnect() throws CoreException {
+		// remove document update listener
+		if (m_root != null) {
+			m_root.getModel().removeModelChangedListener(m_modelChangedListener);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the root {@link DocumentElement}.
+	 */
+	public final DocumentElement getRoot() {
+		return m_root;
+	}
+
+	/**
+	 * @return the complex text of document.
+	 */
+	public final String getText() {
+		return m_document.get();
+	}
+
+	/**
+	 * @return the sub-string of document's text.
+	 */
+	public final String getText(final int offset, final int length) {
+		return ExecutionUtils.runObject(new RunnableObjectEx<String>() {
+			@Override
+			public String runObject() throws Exception {
+				return m_document.get(offset, length);
+			}
+		}, "Can not get offset:%d length:%d", offset, length);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Abstract methods
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Creates document handler for loading model.
+	 */
+	protected AbstractDocumentHandler createDocumentHandler() {
+		return new AbstractDocumentHandler();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Document modification on model modifications
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final IModelChangedListener m_modelChangedListener = new IModelChangedListener() {
+		@Override
+		public void modelChanged(final ModelChangedEvent event) {
+			ExecutionUtils.runRethrow(new RunnableEx() {
+				@Override
+				public void run() throws Exception {
+					handleModelChange(event);
+				}
+			});
+		}
+	};
+
+	/**
+	 * Performs document/model updates using given model modification event.
+	 */
+	private void handleModelChange(ModelChangedEvent event) throws Exception {
+		int type = event.getChangeType();
+		Object changedObject = event.getChangedObject();
+		if (type == ModelChangedEvent.CHANGE) {
+			if (changedObject instanceof DocumentElement) {
+				if (event.getChangedProperty() == DocumentElement.P_XML_TAG_NAME) {
+					DocumentElement element = (DocumentElement) changedObject;
+					String oldXMLTagName = (String) event.getOldValue();
+					handleNodeRename(element, oldXMLTagName);
+				} else {
+					handleAttributeChange(event);
+				}
+			} else if (changedObject instanceof DocumentTextNode) {
+				DocumentTextNode textNode = (DocumentTextNode) changedObject;
+				handleTextChange(textNode);
+			}
+		} else if (type == ModelChangedEvent.INSERT) {
+			if (changedObject instanceof DocumentElement) {
+				DocumentElement element = (DocumentElement) changedObject;
+				handleNodeInsert(element);
+			} else if (changedObject instanceof DocumentAttribute) {
+				DocumentAttribute attribute = (DocumentAttribute) changedObject;
+				handleAttributeInsert(attribute);
+			} else if (changedObject instanceof DocumentTextNode) {
+				DocumentTextNode textNode = (DocumentTextNode) changedObject;
+				handleTextInsert(textNode);
+			}
+		} else if (type == ModelChangedEvent.MOVE) {
+			if (changedObject instanceof DocumentElement) {
+				DocumentElement oldParent = (DocumentElement) event.getOldValue();
+				DocumentElement newParent = (DocumentElement) event.getNewValue();
+				DocumentElement element = (DocumentElement) changedObject;
+				int position = Integer.parseInt(event.getChangedProperty());
+				handleNodeMove(element, oldParent, newParent, position);
+			}
+		} else if (type == ModelChangedEvent.REMOVE) {
+			if (changedObject instanceof DocumentElement) {
+				DocumentElement element = (DocumentElement) changedObject;
+				handleNodeDelete(element);
+			} else if (changedObject instanceof DocumentAttribute) {
+				DocumentAttribute attribute = (DocumentAttribute) changedObject;
+				handleAttributeDelete(attribute);
+			} else if (changedObject instanceof DocumentTextNode) {
+				DocumentTextNode textNode = (DocumentTextNode) changedObject;
+				handleTextDelete(textNode);
+			}
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Nodes
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void handleNodeDelete(DocumentElement element) throws Exception {
+		int stringStartIndex = getElementSourceOffset(element);
+		// delete part of document with node and any white spaces before it
+		// so, in usual situation, when node is on its own line, we will remove this line fully
+		int length = element.getOffset() + element.getLength() - stringStartIndex;
+		replaceString(stringStartIndex, length, "");
+		// if last child removed, then parent should be closed
+		closeIfNoChildren(element.getParent());
+	}
+
+	/**
+	 * @return the indent of given {@link DocumentElement}.
+	 */
+	private String getLineIndent(DocumentElement element) throws Exception {
+		int end = element.getOffset();
+		int start = end;
+		while (start != 0) {
+			char c = m_document.getChar(start - 1);
+			// in any case we need whitespace
+			if (!Character.isWhitespace(c)) {
+				break;
+			}
+			// stop on \r and \n
+			if (c == '\r' || c == '\n') {
+				break;
+			}
+			//
+			start--;
+		}
+		// return result
+		return m_document.get(start, end - start);
+	}
+
+	private void handleNodeRename(DocumentElement element, String oldXMLTagName) throws Exception {
+		replaceString(element.getOffset() + 1, oldXMLTagName.length(), element.getTag());
+		if (!element.isClosed()) {
+			replaceString(element.getCloseTagOffset() + 2, oldXMLTagName.length(), element.getTag());
+		}
+	}
+
+	private void handleNodeInsert(DocumentElement element) throws Exception {
+		DocumentElement parentNode = element.getParent();
+		ensureElementOpen(parentNode);
+		TargetInformation targetInfo =
+				prepareTargetInformation(parentNode, parentNode.indexOf(element));
+		int baseOffset = targetInfo.offset;
+		String prefix = targetInfo.prefix;
+		// add new tag
+		String text = "<" + element.getTag() + "/>";
+		replaceString(baseOffset, 0, prefix + text);
+		// remember offset and length
+		int offset = baseOffset + prefix.length();
+		element.setOffset(offset);
+		element.setLength(text.length());
+		element.setClosed(true);
+	}
+
+	/**
+	 * If given "element" has no children, then convert in into closed.
+	 */
+	private void closeIfNoChildren(DocumentElement element) throws Exception {
+		if (element.getChildren().isEmpty() && element.getTextNode() == null) {
+			int begin = element.getOpenTagOffset() + element.getOpenTagLength() - 1;
+			int end = element.getCloseTagOffset() + element.getCloseTagLength();
+			replaceString(begin, end - begin, "/>");
+			element.setClosed(true);
+		}
+	}
+
+	/**
+	 * Ensures that given {@link DocumentElement} is in form <tag></tag>.
+	 */
+	private void ensureElementOpen(DocumentElement element) throws Exception {
+		if (!element.isClosed()) {
+			return;
+		}
+		//
+		int oldLength = element.getLength();
+		int end = element.getOffset() + oldLength;
+		int line = m_document.getLineOfOffset(end);
+		String lineDelimiter = m_document.getLineDelimiter(line);
+		if (lineDelimiter == null) {
+			lineDelimiter = "\n";
+		}
+		// add closing tag
+		String closeTagReplacement =
+				lineDelimiter + getLineIndent(element) + "</" + element.getTag() + ">";
+		replaceString(end, 0, closeTagReplacement);
+		// remove close from initial tag
+		replaceString(end - 2, 2, ">");
+		// update length
+		element.setLength(oldLength + closeTagReplacement.length() - 1);
+		updateOpenCloseTags(element, end);
+	}
+
+	private static class TargetInformation {
+		int offset;
+		String prefix;
+	}
+
+	private TargetInformation prepareTargetInformation(DocumentElement parentNode, int index)
+			throws Exception {
+		// prepare:
+		//  1. baseOffset = (end of parent) or (end of previous child node)
+		//  2. indent = (indent of parent + "\t") or (indent of previous child node)
+		int baseOffset;
+		String indent;
+		{
+			if (index == 0) {
+				baseOffset = parentNode.getOpenTagOffset() + parentNode.getOpenTagLength();
+				indent = getLineIndent(parentNode) + "\t";
+			} else {
+				DocumentElement previousChild = parentNode.getChildAt(index - 1);
+				baseOffset = previousChild.getOffset() + previousChild.getLength();
+				indent = getLineIndent(previousChild);
+			}
+		}
+		// prepare prefix = EOL + indent
+		String prefix;
+		{
+			int line = m_document.getLineOfOffset(baseOffset);
+			String lineDelimiter = m_document.getLineDelimiter(line);
+			if (lineDelimiter == null) {
+				prefix = "";
+			} else {
+				prefix = lineDelimiter + indent;
+			}
+		}
+		//
+		TargetInformation target = new TargetInformation();
+		target.offset = baseOffset;
+		target.prefix = prefix;
+		return target;
+	}
+
+	private void handleNodeMove(DocumentElement element,
+			DocumentElement oldParent,
+			DocumentElement newParent,
+			int index) throws Exception {
+		// remove from old parent
+		// if reorder in same parent, tweak index
+		{
+			int oldIndex = oldParent.indexOf(element);
+			oldParent.m_children.remove(element);
+			if (newParent == oldParent && oldIndex < index) {
+				index--;
+			}
+		}
+		// prepare begin of String to move
+		int beginOffset = getElementSourceOffset(element);
+		// extract String from old parent
+		String elementString;
+		{
+			int endOffset = element.getOffset() + element.getLength();
+			elementString = m_document.get(beginOffset, endOffset - beginOffset);
+			elementString = StringUtils.stripStart(elementString, null);
+			replaceString(beginOffset, endOffset - beginOffset, "");
+		}
+		// prepare target information
+		ensureElementOpen(newParent);
+		TargetInformation targetInfo = prepareTargetInformation(newParent, index);
+		// insert prefix
+		String prefix = targetInfo.prefix;
+		int newOffset = targetInfo.offset;
+		replaceString(newOffset, 0, prefix);
+		newOffset += prefix.length();
+		// insert "element" String
+		replaceString(newOffset, 0, elementString);
+		// add into new parent
+		newParent.m_children.add(index, element);
+		element.setParent(newParent);
+		moveElementOffsets(element, newOffset - element.getOffset());
+		// if last child was moved, then parent should be closed
+		closeIfNoChildren(oldParent);
+	}
+
+	/**
+	 * @return the begin of {@link String} to move/remove when we move/remove given
+	 *         {@link DocumentElement}.
+	 */
+	private int getElementSourceOffset(DocumentElement element) throws Exception {
+		int offset = element.getOffset();
+		while (true) {
+			// may be hit of "text node"
+			{
+				DocumentTextNode textNode = element.getParent().getTextNode();
+				if (textNode != null
+						&& textNode.getOffset() <= offset
+						&& offset <= textNode.getOffset() + textNode.getLength()) {
+					break;
+				}
+			}
+			// non-whitespace character
+			{
+				char c = m_document.getChar(offset - 1);
+				if (!Character.isWhitespace(c)) {
+					break;
+				}
+			}
+			// check previous
+			offset--;
+		}
+		return offset;
+	}
+
+	private void moveElementOffsets(DocumentElement start, final int delta) {
+		start.accept(new DocumentModelVisitor() {
+			@Override
+			public void endVisit(DocumentElement element) {
+				element.setOffset(element.getOffset() + delta);
+				if (!element.isClosed()) {
+					element.setOpenTagOffset(element.getOpenTagOffset() + delta);
+					element.setCloseTagOffset(element.getCloseTagOffset() + delta);
+				}
+			}
+
+			@Override
+			public void visit(DocumentAttribute attribute) {
+				attribute.setNameOffset(attribute.getNameOffset() + delta);
+				attribute.setValueOffset(attribute.getValueOffset() + delta);
+			}
+
+			@Override
+			public void visit(DocumentTextNode node) {
+				node.setOffset(node.getOffset() + delta);
+			}
+		});
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Attributes
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void handleAttributeChange(ModelChangedEvent event) throws Exception {
+		DocumentElement element = (DocumentElement) event.getChangedObject();
+		DocumentAttribute attribute = element.getDocumentAttribute(event.getChangedProperty());
+		// prepare existing offset/length
+		int offset = attribute.getValueOffset();
+		int length = attribute.getValueLength();
+		// update document
+		String newValue = (String) event.getNewValue();
+		replaceString(offset, length, newValue);
+	}
+
+	private void handleAttributeInsert(DocumentAttribute attribute) throws Exception {
+		DocumentElement element = attribute.getEnclosingElement();
+		// prepare offset where to insert attribute
+		int offset;
+		{
+			// find last attribute
+			DocumentAttribute lastAttribute = null;
+			for (DocumentAttribute existingAttribute : element.getDocumentAttributes()) {
+				if (existingAttribute != attribute) {
+					lastAttribute = existingAttribute;
+				}
+			}
+			//
+			if (lastAttribute == null) {
+				offset = element.getOffset() + element.getTag().length() + 1;
+			} else {
+				offset = lastAttribute.getValueOffset() + lastAttribute.getValueLength() + 1;
+			}
+		}
+		// insert space
+		{
+			replaceString(offset, 0, " ");
+			offset++;
+		}
+		// update document
+		String assignOpen = "=\"";
+		{
+			String assignClose = "\"";
+			String text = attribute.getName() + assignOpen + attribute.getValue() + assignClose;
+			replaceString(offset, 0, text);
+		}
+		// set offset/length for name/value
+		{
+			int nameLength = attribute.getName().length();
+			attribute.setNameOffset(offset);
+			attribute.setNameLength(nameLength);
+			attribute.setValueOffset(offset + nameLength + assignOpen.length());
+			attribute.setValueLength(attribute.getValue().length());
+		}
+	}
+
+	private void handleAttributeDelete(DocumentAttribute attribute) throws Exception {
+		// prepare start of string to delete
+		int stringStartIndex = attribute.getNameOffset();
+		while (Character.isWhitespace(m_document.getChar(stringStartIndex - 1))) {
+			stringStartIndex--;
+		}
+		// delete part of document with attribute and any white spaces before it
+		int length = attribute.getValueOffset() + attribute.getValueLength() + 1 - stringStartIndex;
+		replaceString(stringStartIndex, length, "");
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Text
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void handleTextChange(DocumentTextNode textNode) throws Exception {
+		int offset = textNode.getOffset();
+		int length = textNode.getLength();
+		String text = textNode.getRawText();
+		replaceString(offset, length, text);
+	}
+
+	private void handleTextInsert(DocumentTextNode textNode) throws Exception {
+		DocumentElement parentElement = textNode.getEnclosingElement();
+		// ensure that parent is in form <tag></tag>
+		if (parentElement.isClosed()) {
+			int oldLength = parentElement.getLength();
+			// add closing tag
+			String closeTagReplacement = "</" + parentElement.getTag() + ">";
+			int parentEnd = parentElement.getOffset() + oldLength;
+			replaceString(parentEnd, 0, closeTagReplacement);
+			// remove close from initial tag
+			replaceString(parentEnd - 2, 2, ">");
+			// update length
+			parentElement.setLength(oldLength + closeTagReplacement.length() - 1);
+			updateOpenCloseTags(parentElement, parentEnd);
+		}
+		//
+		{
+			// add new text node
+			int startOffset = parentElement.getOpenTagOffset() + parentElement.getOpenTagLength();
+			int oldLength = parentElement.getCloseTagOffset() - startOffset;
+			String text = textNode.getRawText();
+			replaceString(startOffset, oldLength, text);
+			// remember offset and length
+			textNode.setOffset(startOffset);
+			textNode.setLength(text.length());
+		}
+	}
+
+	private void handleTextDelete(DocumentTextNode textNode) throws Exception {
+		replaceString(textNode.getOffset(), textNode.getLength(), "");
+		closeIfNoChildren(textNode.getEnclosingElement());
+	}
+
+	private static void updateOpenCloseTags(DocumentElement parentNode, int parentEnd) {
+		parentNode.setClosed(false);
+		// update open tag position
+		parentNode.setOpenTagOffset(parentNode.getOffset());
+		parentNode.setOpenTagLength(parentEnd - 1 - parentNode.getOffset());
+		// update close tag position
+		parentNode.setCloseTagLength(parentNode.getTag().length() + 3);
+		parentNode.setCloseTagOffset(parentNode.getOffset()
+				+ parentNode.getLength()
+				- parentNode.getCloseTagLength());
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// String operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Replaces given region of document with new string. It updates also offset/length for nodes.
+	 */
+	private void replaceString(final int start, int oldLength, String replacement) throws Exception {
+		// modify document
+		//System.out.println("|" + m_document.get(start, oldLength) + "| -> |" + replacement + "|");
+		m_document.replace(start, oldLength, replacement);
+		// update offset/length for model
+		final int newLength = replacement.length();
+		final int difference = newLength - oldLength;
+		if (difference != 0) {
+			final int oldEnd = start + oldLength;
+			m_root.accept(new DocumentModelVisitor() {
+				@Override
+				public void endVisit(DocumentElement element) {
+					Position position = updatePosition(element.getOffset(), element.getLength());
+					// update node position
+					element.setOffset(position.offset);
+					element.setLength(position.length);
+					if (!element.isClosed()) {
+						int openTagOffset = element.getOpenTagOffset();
+						int openTagLength = element.getOpenTagLength();
+						// update open tag position
+						if (openTagOffset < start && oldEnd < openTagOffset + openTagLength) {
+							element.setOpenTagLength(openTagLength + difference);
+						}
+						element.setOpenTagOffset(position.offset);
+						// update close tag position
+						int closeTagOffset = element.getCloseTagOffset();
+						if (start <= closeTagOffset) {
+							element.setCloseTagOffset(closeTagOffset + difference);
+						} else {
+							element.setCloseTagLength(position.offset + position.length - closeTagOffset);
+						}
+					}
+				}
+
+				@Override
+				public void visit(DocumentAttribute attribute) {
+					// update name position
+					{
+						Position position =
+								updatePosition(attribute.getNameOffset(), attribute.getNameLength());
+						attribute.setNameOffset(position.offset);
+						attribute.setNameLength(position.length);
+					}
+					// update value position
+					{
+						Position position =
+								updatePosition(attribute.getValueOffset(), attribute.getValueLength());
+						attribute.setValueOffset(position.offset);
+						attribute.setValueLength(position.length);
+					}
+				}
+
+				@Override
+				public void visit(DocumentTextNode node) {
+					Position position = updatePosition(node.getOffset(), node.getLength());
+					node.setOffset(position.offset);
+					node.setLength(position.length);
+				}
+
+				private Position updatePosition(int offset, int length) {
+					Position position = new Position(offset, length);
+					// special case: insert into empty position
+					if (offset == start && length == 0) {
+						position.length += difference;
+						return position;
+					}
+					// before changed region, no change
+					if (offset + length <= start) {
+						return position;
+					}
+					// after changed region, move it
+					if (offset >= oldEnd) {
+						position.offset += difference;
+						return position;
+					}
+					// encompasses the changed region, so extend it
+					/*if (offset <= start)*/{
+						Assert.isTrue(offset <= start);
+						position.length += difference;
+						return position;
+					}
+				}
+			});
+		}
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/xml/AbstractDocumentHandler.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/xml/AbstractDocumentHandler.java
index d8f8b1cdc..5771a1ec1 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/xml/AbstractDocumentHandler.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/xml/AbstractDocumentHandler.java
@@ -27,75 +27,75 @@
  * @coverage core.util.xml
  */
 public class AbstractDocumentHandler extends QHandlerAdapter {
-  private DocumentElement m_rootNode;
-  private final Stack<DocumentElement> m_nodeStack = new Stack<DocumentElement>();
+	private DocumentElement m_rootNode;
+	private final Stack<DocumentElement> m_nodeStack = new Stack<DocumentElement>();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DocumentElement getRootNode() {
-    return m_rootNode;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DocumentElement getRootNode() {
+		return m_rootNode;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // QDHandler
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final void startElement(int offset,
-      int length,
-      String qName,
-      Map<String, String> attributes,
-      List<QAttribute> attrList,
-      boolean closed) throws Exception {
-    DocumentElement parent = m_nodeStack.isEmpty() ? null : m_nodeStack.peek();
-    //setTextNodeOffsetLength(parent, offset);
-    // create and initialize new node
-    DocumentElement element;
-    {
-      element = getDocumentNode(qName, parent);
-      element.setTag(qName);
-      element.setOffset(offset);
-      element.setClosed(closed);
-      if (!closed) {
-        element.setOpenTagOffset(offset);
-        element.setOpenTagLength(length);
-      }
-    }
-    // configure parent/child
-    {
-      appendChildToParent(parent, element);
-      m_nodeStack.push(element);
-    }
-    // create attributes
-    for (QAttribute qdAttribute : attrList) {
-      String attName = qdAttribute.getName();
-      String attValue = qdAttribute.getValue();
-      DocumentAttribute attribute = getDocumentAttribute(element, attName, attValue);
-      // name
-      attribute.setNameOffset(qdAttribute.getNameOffset());
-      attribute.setNameLength(qdAttribute.getNameLength());
-      // value
-      attribute.setValueOffset(qdAttribute.getValueOffset());
-      attribute.setValueLength(qdAttribute.getValueLength());
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// QDHandler
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final void startElement(int offset,
+			int length,
+			String qName,
+			Map<String, String> attributes,
+			List<QAttribute> attrList,
+			boolean closed) throws Exception {
+		DocumentElement parent = m_nodeStack.isEmpty() ? null : m_nodeStack.peek();
+		//setTextNodeOffsetLength(parent, offset);
+		// create and initialize new node
+		DocumentElement element;
+		{
+			element = getDocumentNode(qName, parent);
+			element.setTag(qName);
+			element.setOffset(offset);
+			element.setClosed(closed);
+			if (!closed) {
+				element.setOpenTagOffset(offset);
+				element.setOpenTagLength(length);
+			}
+		}
+		// configure parent/child
+		{
+			appendChildToParent(parent, element);
+			m_nodeStack.push(element);
+		}
+		// create attributes
+		for (QAttribute qdAttribute : attrList) {
+			String attName = qdAttribute.getName();
+			String attValue = qdAttribute.getValue();
+			DocumentAttribute attribute = getDocumentAttribute(element, attName, attValue);
+			// name
+			attribute.setNameOffset(qdAttribute.getNameOffset());
+			attribute.setNameLength(qdAttribute.getNameLength());
+			// value
+			attribute.setValueOffset(qdAttribute.getValueOffset());
+			attribute.setValueLength(qdAttribute.getValueLength());
+		}
+	}
 
-  @Override
-  public final void endElement(int offset, int endOffset, String tag) throws Exception {
-    DocumentElement element = m_nodeStack.pop();
-    element.setLength(endOffset - element.getOffset());
-    if (!element.isClosed()) {
-      element.setCloseTagOffset(offset);
-      element.setCloseTagLength(endOffset - offset);
-      //setTextNodeOffsetLength(element, element.getCloseTagOffset());
-    }
-  }
+	@Override
+	public final void endElement(int offset, int endOffset, String tag) throws Exception {
+		DocumentElement element = m_nodeStack.pop();
+		element.setLength(endOffset - element.getOffset());
+		if (!element.isClosed()) {
+			element.setCloseTagOffset(offset);
+			element.setCloseTagLength(endOffset - offset);
+			//setTextNodeOffsetLength(element, element.getCloseTagOffset());
+		}
+	}
 
-  /*private void setTextNodeOffsetLength(DocumentElement parent, int end) {
+	/*private void setTextNodeOffsetLength(DocumentElement parent, int end) {
   	if (parent != null) {
   		DocumentTextNode textNode = parent.getTextNode();
   		if (textNode != null && textNode.getLength() == 0) {
@@ -105,65 +105,65 @@ public final void endElement(int offset, int endOffset, String tag) throws Excep
   		}
   	}
   }*/
-  @Override
-  public final void text(String text, boolean isCDATA) throws Exception {
-    if (!StringUtils.isWhitespace(text) && !m_nodeStack.isEmpty()) {
-      DocumentElement element = m_nodeStack.peek();
-      if (element.getTextNode() == null) {
-        DocumentTextNode textNode = new DocumentTextNode(isCDATA);
-        textNode.setText(text);
-        // set offset/length
-        int offset = element.getOpenTagOffset() + element.getOpenTagLength();
-        int length = text.length();
-        if (isCDATA) {
-          length += "<![CDATA[]]>".length();
-        }
-        textNode.setLength(length);
-        textNode.setOffset(offset);
-        // append
-        element.setTextNode(textNode);
-      }
-    }
-  }
+	@Override
+	public final void text(String text, boolean isCDATA) throws Exception {
+		if (!StringUtils.isWhitespace(text) && !m_nodeStack.isEmpty()) {
+			DocumentElement element = m_nodeStack.peek();
+			if (element.getTextNode() == null) {
+				DocumentTextNode textNode = new DocumentTextNode(isCDATA);
+				textNode.setText(text);
+				// set offset/length
+				int offset = element.getOpenTagOffset() + element.getOpenTagLength();
+				int length = text.length();
+				if (isCDATA) {
+					length += "<![CDATA[]]>".length();
+				}
+				textNode.setLength(length);
+				textNode.setOffset(offset);
+				// append
+				element.setTextNode(textNode);
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds new child to given parent.
-   */
-  private void appendChildToParent(DocumentElement parent, DocumentElement child) {
-    if (child != null) {
-      if (parent != null) {
-        parent.addChild(child);
-      } else {
-        m_rootNode = child;
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds new child to given parent.
+	 */
+	private void appendChildToParent(DocumentElement parent, DocumentElement child) {
+		if (child != null) {
+			if (parent != null) {
+				parent.addChild(child);
+			} else {
+				m_rootNode = child;
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Nodes creation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Creates specific {@link DocumentElement} subclass for given tag name and parent.
-   */
-  protected DocumentElement getDocumentNode(String name, DocumentElement parent) {
-    DocumentElement element = new DocumentElement();
-    if (parent == null) {
-      element.setModel(new Model());
-    }
-    return element;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Nodes creation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Creates specific {@link DocumentElement} subclass for given tag name and parent.
+	 */
+	protected DocumentElement getDocumentNode(String name, DocumentElement parent) {
+		DocumentElement element = new DocumentElement();
+		if (parent == null) {
+			element.setModel(new Model());
+		}
+		return element;
+	}
 
-  /**
-   * Creates {@link DocumentAttribute} for given name/value in given {@link DocumentElement}.
-   */
-  private DocumentAttribute getDocumentAttribute(DocumentElement element, String name, String value) {
-    return element.setAttribute(name, value);
-  }
+	/**
+	 * Creates {@link DocumentAttribute} for given name/value in given {@link DocumentElement}.
+	 */
+	private DocumentAttribute getDocumentAttribute(DocumentElement element, String name, String value) {
+		return element.setAttribute(name, value);
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/xml/AbstractDocumentObject.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/xml/AbstractDocumentObject.java
index 5dbe4cd06..8e8169f6f 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/xml/AbstractDocumentObject.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/xml/AbstractDocumentObject.java
@@ -17,43 +17,43 @@
  * @coverage core.util.xml
  */
 public abstract class AbstractDocumentObject {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Model
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Model m_model;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Model
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Model m_model;
 
-  public final void setModel(Model model) {
-    m_model = model;
-  }
+	public final void setModel(Model model) {
+		m_model = model;
+	}
 
-  public final Model getModel() {
-    return m_model;
-  }
+	public final Model getModel() {
+		return m_model;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Notification utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected final void firePropertyChanged(AbstractDocumentObject object,
-      String property,
-      Object oldValue,
-      Object newValue) {
-    ModelChangedEvent e =
-        new ModelChangedEvent(ModelChangedEvent.CHANGE, object, property, oldValue, newValue);
-    fireModelChanged(e);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Notification utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected final void firePropertyChanged(AbstractDocumentObject object,
+			String property,
+			Object oldValue,
+			Object newValue) {
+		ModelChangedEvent e =
+				new ModelChangedEvent(ModelChangedEvent.CHANGE, object, property, oldValue, newValue);
+		fireModelChanged(e);
+	}
 
-  protected final void fireStructureChanged(AbstractDocumentObject child, int changeType) {
-    ModelChangedEvent e = new ModelChangedEvent(changeType, child, null);
-    fireModelChanged(e);
-  }
+	protected final void fireStructureChanged(AbstractDocumentObject child, int changeType) {
+		ModelChangedEvent e = new ModelChangedEvent(changeType, child, null);
+		fireModelChanged(e);
+	}
 
-  protected final void fireModelChanged(ModelChangedEvent e) {
-    if (m_model != null) {
-      m_model.fireModelChanged(e);
-    }
-  }
+	protected final void fireModelChanged(ModelChangedEvent e) {
+		if (m_model != null) {
+			m_model.fireModelChanged(e);
+		}
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/xml/DocumentAttribute.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/xml/DocumentAttribute.java
index 6bd6d289a..0765d9d6e 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/xml/DocumentAttribute.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/xml/DocumentAttribute.java
@@ -21,175 +21,175 @@
  * @coverage core.util.xml
  */
 public final class DocumentAttribute extends AbstractDocumentObject {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Enclosing element
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private DocumentElement m_enclosingElement;
-
-  public void setEnclosingElement(DocumentElement element) {
-    m_enclosingElement = element;
-  }
-
-  public DocumentElement getEnclosingElement() {
-    return m_enclosingElement;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Name offset
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private int m_nameOffset;
-
-  public void setNameOffset(int offset) {
-    m_nameOffset = offset;
-  }
-
-  public int getNameOffset() {
-    return m_nameOffset;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Name length
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private int m_nameLength;
-
-  public void setNameLength(int length) {
-    m_nameLength = length;
-  }
-
-  public int getNameLength() {
-    return m_nameLength;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Value offset
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private int m_valueOffset;
-
-  public void setValueOffset(int offset) {
-    m_valueOffset = offset;
-  }
-
-  public int getValueOffset() {
-    return m_valueOffset;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Value length
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private int m_valueLength;
-
-  public void setValueLength(int length) {
-    m_valueLength = length;
-  }
-
-  public int getValueLength() {
-    return m_valueLength;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Name
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private String m_name;
-
-  public void setName(String name) {
-    m_name = name;
-  }
-
-  public String getName() {
-    return m_name;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Value
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private String m_value;
-
-  public void setValue(String value) {
-    String oldValue = m_value;
-    {
-      if (getModel() != null && !"UTF-8".equals(getModel().getCharset())) {
-        value = escapeXml(value);
-      } else {
-        value = escapeXml0(value);
-      }
-      m_value = value;
-    }
-    if (m_enclosingElement != null) {
-      firePropertyChanged(m_enclosingElement, m_name, oldValue, m_value);
-    }
-  }
-
-  public String getValue() {
-    return m_value;
-  }
-
-  /**
-   * Performs escaping for non-Latin characters.
-   */
-  private static String escapeXml(String s) {
-    s = escapeXml0(s);
-    StringBuilder result = new StringBuilder();
-    for (int i = 0; i < s.length(); i++) {
-      char c = s.charAt(i);
-      if (c > 0x7F) {
-        result.append("&#" + Integer.toString(c) + ";");
-      } else {
-        result.append(c);
-      }
-    }
-    return result.toString();
-  }
-
-  /**
-   * Performs escaping which is required for any XML.
-   */
-  private static String escapeXml0(String s) {
-    StringBuilder result = new StringBuilder();
-    for (int i = 0; i < s.length(); i++) {
-      char c = s.charAt(i);
-      if (c < 32) {
-        result.append("&#" + Integer.toString(c) + ";");
-      } else if (c == '&') {
-        result.append("&amp;");
-      } else if (c == '\'') {
-        result.append("&apos;");
-      } else if (c == '"') {
-        result.append("&quot;");
-      } else if (c == '<') {
-        result.append("&lt;");
-      } else if (c == '>') {
-        result.append("&gt;");
-      } else {
-        result.append(c);
-      }
-    }
-    return result.toString();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Write
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void write(PrintWriter writer) {
-    writer.print(m_name);
-    writer.print("=");
-    writer.print('"');
-    writer.print(StringEscapeUtils.escapeXml(m_value));
-    writer.print('"');
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Enclosing element
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private DocumentElement m_enclosingElement;
+
+	public void setEnclosingElement(DocumentElement element) {
+		m_enclosingElement = element;
+	}
+
+	public DocumentElement getEnclosingElement() {
+		return m_enclosingElement;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Name offset
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private int m_nameOffset;
+
+	public void setNameOffset(int offset) {
+		m_nameOffset = offset;
+	}
+
+	public int getNameOffset() {
+		return m_nameOffset;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Name length
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private int m_nameLength;
+
+	public void setNameLength(int length) {
+		m_nameLength = length;
+	}
+
+	public int getNameLength() {
+		return m_nameLength;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Value offset
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private int m_valueOffset;
+
+	public void setValueOffset(int offset) {
+		m_valueOffset = offset;
+	}
+
+	public int getValueOffset() {
+		return m_valueOffset;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Value length
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private int m_valueLength;
+
+	public void setValueLength(int length) {
+		m_valueLength = length;
+	}
+
+	public int getValueLength() {
+		return m_valueLength;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Name
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private String m_name;
+
+	public void setName(String name) {
+		m_name = name;
+	}
+
+	public String getName() {
+		return m_name;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Value
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private String m_value;
+
+	public void setValue(String value) {
+		String oldValue = m_value;
+		{
+			if (getModel() != null && !"UTF-8".equals(getModel().getCharset())) {
+				value = escapeXml(value);
+			} else {
+				value = escapeXml0(value);
+			}
+			m_value = value;
+		}
+		if (m_enclosingElement != null) {
+			firePropertyChanged(m_enclosingElement, m_name, oldValue, m_value);
+		}
+	}
+
+	public String getValue() {
+		return m_value;
+	}
+
+	/**
+	 * Performs escaping for non-Latin characters.
+	 */
+	private static String escapeXml(String s) {
+		s = escapeXml0(s);
+		StringBuilder result = new StringBuilder();
+		for (int i = 0; i < s.length(); i++) {
+			char c = s.charAt(i);
+			if (c > 0x7F) {
+				result.append("&#" + Integer.toString(c) + ";");
+			} else {
+				result.append(c);
+			}
+		}
+		return result.toString();
+	}
+
+	/**
+	 * Performs escaping which is required for any XML.
+	 */
+	private static String escapeXml0(String s) {
+		StringBuilder result = new StringBuilder();
+		for (int i = 0; i < s.length(); i++) {
+			char c = s.charAt(i);
+			if (c < 32) {
+				result.append("&#" + Integer.toString(c) + ";");
+			} else if (c == '&') {
+				result.append("&amp;");
+			} else if (c == '\'') {
+				result.append("&apos;");
+			} else if (c == '"') {
+				result.append("&quot;");
+			} else if (c == '<') {
+				result.append("&lt;");
+			} else if (c == '>') {
+				result.append("&gt;");
+			} else {
+				result.append(c);
+			}
+		}
+		return result.toString();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Write
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void write(PrintWriter writer) {
+		writer.print(m_name);
+		writer.print("=");
+		writer.print('"');
+		writer.print(StringEscapeUtils.escapeXml(m_value));
+		writer.print('"');
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/xml/DocumentEditContext.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/xml/DocumentEditContext.java
index 9f3fd524d..00c4806c7 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/xml/DocumentEditContext.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/xml/DocumentEditContext.java
@@ -19,12 +19,12 @@
  * @coverage core.util.xml
  */
 public abstract class DocumentEditContext extends AbstractDocumentEditContext {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DocumentEditContext(IDocument document) throws Exception {
-    parse(document);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DocumentEditContext(IDocument document) throws Exception {
+		parse(document);
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/xml/DocumentElement.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/xml/DocumentElement.java
index ac57f93b2..9d355b9e4 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/xml/DocumentElement.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/xml/DocumentElement.java
@@ -30,573 +30,573 @@
  * @coverage core.util.xml
  */
 public class DocumentElement extends AbstractDocumentObject {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DocumentElement() {
-  }
-
-  public DocumentElement(String tag) {
-    m_tag = tag;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    StringWriter stringWriter = new StringWriter();
-    PrintWriter printWriter = new PrintWriter(stringWriter);
-    write(printWriter, "");
-    return stringWriter.toString();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tag
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final String P_XML_TAG_NAME = "P_XML_TAG_NAME";
-  private String m_tag;
-  private boolean m_closed;
-
-  /**
-   * @return the name of tag.
-   */
-  public String getTag() {
-    return m_tag;
-  }
-
-  /**
-   * @return the simple name of tag, without namespace.
-   */
-  public String getTagLocal() {
-    int index = m_tag.indexOf(":");
-    if (index == -1) {
-      return m_tag;
-    }
-    return m_tag.substring(index + 1);
-  }
-
-  /**
-   * @return the namespace of tag, including ":" character.
-   */
-  public String getTagNS() {
-    int index = m_tag.indexOf(":");
-    if (index == -1) {
-      return StringUtils.EMPTY;
-    }
-    return m_tag.substring(0, index + 1);
-  }
-
-  /**
-   * Sets the name of tag.
-   */
-  public void setTag(String tag) {
-    if (!StringUtils.equals(m_tag, tag)) {
-      String oldValue = m_tag;
-      m_tag = tag;
-      firePropertyChanged(this, P_XML_TAG_NAME, oldValue, m_tag);
-    }
-  }
-
-  /**
-   * Sets the simple name of tag, without namespace.
-   */
-  public void setTagLocal(String localTag) {
-    String tag = getTagNS() + localTag;
-    setTag(tag);
-  }
-
-  /**
-   * @return <code>true</code> if this element is closed on start.
-   */
-  public boolean isClosed() {
-    return m_closed;
-  }
-
-  /**
-   * Specifies if this element is closed on start.
-   */
-  public void setClosed(boolean closed) {
-    m_closed = closed;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Location
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private int m_offset;
-  private int m_length;
-
-  public int getOffset() {
-    return m_offset;
-  }
-
-  public void setOffset(int offset) {
-    m_offset = offset;
-  }
-
-  public int getLength() {
-    return m_length;
-  }
-
-  public void setLength(int length) {
-    m_length = length;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Location: open
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private int m_openTagOffset;
-  private int m_openTagLength;
-
-  public int getOpenTagOffset() {
-    return m_openTagOffset;
-  }
-
-  public void setOpenTagOffset(int openTagOffset) {
-    m_openTagOffset = openTagOffset;
-  }
-
-  public int getOpenTagLength() {
-    return m_openTagLength;
-  }
-
-  public void setOpenTagLength(int openTagLength) {
-    m_openTagLength = openTagLength;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Location: close
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private int m_closeTagOffset;
-  private int m_closeTagLength;
-
-  public int getCloseTagOffset() {
-    return m_closeTagOffset;
-  }
-
-  public void setCloseTagOffset(int closeTagOffset) {
-    m_closeTagOffset = closeTagOffset;
-  }
-
-  public int getCloseTagLength() {
-    return m_closeTagLength;
-  }
-
-  public void setCloseTagLength(int closeTagLength) {
-    m_closeTagLength = closeTagLength;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parent
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private DocumentElement m_parent;
-
-  /**
-   * Sets the parent {@link DocumentElement}, may be <code>null</code>.
-   */
-  public void setParent(DocumentElement parent) {
-    m_parent = parent;
-  }
-
-  /**
-   * @return the parent {@link DocumentElement}, may be <code>null</code> for root.
-   */
-  public DocumentElement getParent() {
-    return m_parent;
-  }
-
-  /**
-   * @return the root {@link DocumentElement}.
-   */
-  public DocumentElement getRoot() {
-    if (m_parent == null) {
-      return this;
-    }
-    return m_parent.getRoot();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Children
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  final List<DocumentElement> m_children = Lists.newArrayList();
-
-  /**
-   * Adds given {@link DocumentElement} as last child.
-   */
-  public void addChild(DocumentElement child) {
-    addChild(child, m_children.size());
-  }
-
-  /**
-   * Adds given {@link DocumentElement} into given position relative to other children.
-   */
-  public void addChild(DocumentElement child, int index) {
-    m_children.add(index, child);
-    child.setParent(this);
-    child.setModel(getModel());
-    fireStructureChanged(child, ModelChangedEvent.INSERT);
-  }
-
-  /**
-   * Moves existing {@link DocumentElement} into given position relative to other children.
-   */
-  public void moveChild(DocumentElement child, int index) {
-    if (index == -1) {
-      index = m_children.size();
-    }
-    fireModelChanged(new ModelChangedEvent(ModelChangedEvent.MOVE,
-        child,
-        "" + index,
-        child.getParent(),
-        this));
-  }
-
-  /**
-   * Removes given child {@link DocumentElement}.
-   */
-  public void removeChild(DocumentElement child) {
-    int index = m_children.indexOf(child);
-    if (index != -1) {
-      m_children.remove(index);
-      fireStructureChanged(child, ModelChangedEvent.REMOVE);
-    }
-  }
-
-  /**
-   * Removes this {@link DocumentElement} from parent.
-   */
-  public void remove() {
-    m_parent.removeChild(this);
-  }
-
-  /**
-   * Removes all children {@link DocumentElement}s.
-   */
-  public void removeChildren() {
-    while (!m_children.isEmpty()) {
-      m_children.get(0).remove();
-    }
-  }
-
-  /**
-   * @return the {@link DocumentElement} children.
-   */
-  public List<DocumentElement> getChildren() {
-    return ImmutableList.copyOf(m_children);
-  }
-
-  /**
-   * @return {@link DocumentElement}s that are instances of given {@link Class}.
-   */
-  @SuppressWarnings("unchecked")
-  public final <T extends DocumentElement> List<T> getChildren(Class<T> elementClass) {
-    List<T> result = Lists.newArrayList();
-    for (DocumentElement child : getChildren()) {
-      if (elementClass.isInstance(child)) {
-        result.add((T) child);
-      }
-    }
-    return result;
-  }
-
-  /**
-   * @return the {@link DocumentElement} which is direct child of this one and is or contains given
-   *         one. May be <code>null</code>, if given "child" is not really (in)direct child of this
-   *         {@link DocumentElement}.
-   */
-  public DocumentElement getDirectChild(DocumentElement child) {
-    while (child != null) {
-      if (child.getParent() == this) {
-        return child;
-      }
-      child = child.getParent();
-    }
-    return null;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Indexed access to children
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the index of given {@link DocumentElement} child, may be <code>-1</code> if not child.
-   */
-  public int indexOf(DocumentElement child) {
-    return m_children.indexOf(child);
-  }
-
-  /**
-   * @return the {@link DocumentElement} at given index.
-   *
-   * @throws IndexOutOfBoundsException
-   *           if the index is out of range.
-   */
-  public DocumentElement getChildAt(int index) {
-    return m_children.get(index);
-  }
-
-  /**
-   * @return the first child {@link DocumentElement} with given tag, may be <code>null</code>.
-   */
-  public DocumentElement getChild(String tag, boolean ignoreCase) {
-    for (DocumentElement child : m_children) {
-      if (ignoreCase) {
-        if (child.getTag().equalsIgnoreCase(tag)) {
-          return child;
-        }
-      } else {
-        if (child.getTag().equals(tag)) {
-          return child;
-        }
-      }
-    }
-    return null;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Text
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private DocumentTextNode m_textNode;
-
-  /**
-   * @return the {@link DocumentTextNode}, may be <code>null</code>.
-   */
-  public DocumentTextNode getTextNode() {
-    return m_textNode;
-  }
-
-  /**
-   * Sets the not <code>null</code> {@link DocumentTextNode} with text.
-   */
-  public void setTextNode(DocumentTextNode textNode) {
-    m_textNode = textNode;
-    m_textNode.setEnclosingElement(this);
-    m_textNode.setModel(getModel());
-    fireStructureChanged(m_textNode, ModelChangedEvent.INSERT);
-  }
-
-  /**
-   * Removes {@link DocumentTextNode}, if exists. Ignored if no text node.
-   */
-  public void removeTextNode() {
-    if (m_textNode != null) {
-      DocumentTextNode textNode = m_textNode;
-      m_textNode = null;
-      fireStructureChanged(textNode, ModelChangedEvent.REMOVE);
-    }
-  }
-
-  /**
-   * <ul>
-   * <li>If text is not <code>null</code>, then creates {@link DocumentTextNode} and uses
-   * {@link #setTextNode(DocumentTextNode)}.</li>
-   * <li>If text is <code>null</code>, then removes {@link DocumentTextNode}.</li>
-   * </ul>
-   */
-  public void setText(String text, boolean isCDATA) {
-    if (text != null) {
-      DocumentTextNode textNode = new DocumentTextNode(isCDATA);
-      textNode.setText(text);
-      setTextNode(textNode);
-    } else {
-      removeTextNode();
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Attributes as values
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final Map<String, DocumentAttribute> m_attributes = Maps.newLinkedHashMap();
-
-  /**
-   * Sets the value of attribute: adds new, updates or existing.
-   *
-   * @param name
-   *          the name of attribute.
-   * @param value
-   *          new value of attribute, may be <code>null</code> to remove it.
-   *
-   * @return the handled attribute, may be <code>null</code>.
-   */
-  public DocumentAttribute setAttribute(String name, String value) {
-    DocumentAttribute attribute = getDocumentAttribute(name);
-    // may be delete
-    if (value == null) {
-      if (attribute != null) {
-        removeDocumentAttribute(attribute);
-      }
-      return attribute;
-    }
-    // new attribute
-    if (attribute == null) {
-      attribute = new DocumentAttribute();
-      attribute.setModel(getModel());
-      attribute.setName(name);
-      attribute.setValue(value);
-      attribute.setEnclosingElement(this);
-      // add
-      m_attributes.put(attribute.getName(), attribute);
-      // send notification
-      fireStructureChanged(attribute, ModelChangedEvent.INSERT);
-      return attribute;
-    }
-    // update attribute
-    {
-      attribute.setValue(value);
-      return attribute;
-    }
-  }
-
-  /**
-   * @return the value of attribute with given name, may be <code>null</code> if no such attribute.
-   */
-  public String getAttribute(String name) {
-    DocumentAttribute attribute = m_attributes.get(name);
-    return attribute != null ? attribute.getValue() : null;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Attributes as objects
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link DocumentAttribute} with given name, may be <code>null</code>.
-   */
-  public DocumentAttribute getDocumentAttribute(String name) {
-    return m_attributes.get(name);
-  }
-
-  /**
-   * @return the {@link List} with all attributes.
-   */
-  public List<DocumentAttribute> getDocumentAttributes() {
-    return ImmutableList.copyOf(m_attributes.values());
-  }
-
-  /**
-   * Removes given {@link DocAttribute}.
-   */
-  public void removeDocumentAttribute(DocumentAttribute attribute) {
-    m_attributes.remove(attribute.getName());
-    fireStructureChanged(attribute, ModelChangedEvent.REMOVE);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Write
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Writes this {@link DocumentElement} and its attribute and children indented.
-   */
-  public void write(PrintWriter writer, String indent) {
-    if (m_children.isEmpty()) {
-      // write open tag
-      writer.print(indent);
-      writer.print("<");
-      writer.print(m_tag);
-      writeAttributes(writer);
-      // write text and close tag
-      if (m_textNode == null) {
-        writer.print("/>\n");
-      } else {
-        // write end of open tag
-        writer.print(">");
-        // write text
-        writer.print(m_textNode.getRawText());
-        // write close tag
-        writer.print("</");
-        writer.print(m_tag);
-        writer.print(">\n");
-      }
-    } else {
-      // write open tag
-      writer.print(indent);
-      writer.print("<");
-      writer.print(m_tag);
-      writeAttributes(writer);
-      writer.print(">\n");
-      // write children
-      String childrenIndent = indent + "\t";
-      for (DocumentElement child : m_children) {
-        child.write(writer, childrenIndent);
-      }
-      // write close tag
-      writer.print(indent);
-      writer.print("</");
-      writer.print(m_tag);
-      writer.print(">\n");
-    }
-  }
-
-  /**
-   * Writes this {@link DocumentElement} and its attribute, but not children.
-   */
-  public void writeShort(PrintWriter writer) {
-    // write open tag
-    writer.print("<");
-    writer.print(m_tag);
-    writeAttributes(writer);
-    // close tag
-    writer.print(">");
-  }
-
-  /**
-   * Writers attributes of this element.
-   */
-  private void writeAttributes(PrintWriter writer) {
-    for (DocumentAttribute attribute : getDocumentAttributes()) {
-      writer.print(" ");
-      attribute.write(writer);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Visiting
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Visits this {@link DocumentElement}, its attributes and child {@link DocumentElement}s.
-   */
-  public final void accept(DocumentModelVisitor visitor) {
-    if (visitor.visit(this)) {
-      // visit attributes
-      for (DocumentAttribute attribute : getDocumentAttributes()) {
-        visitor.visit(attribute);
-      }
-      // visit text node
-      if (m_textNode != null) {
-        visitor.visit(m_textNode);
-      }
-      // visit children
-      for (DocumentElement child : getChildren()) {
-        child.accept(visitor);
-      }
-      // end visit
-      visitor.endVisit(this);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DocumentElement() {
+	}
+
+	public DocumentElement(String tag) {
+		m_tag = tag;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		StringWriter stringWriter = new StringWriter();
+		PrintWriter printWriter = new PrintWriter(stringWriter);
+		write(printWriter, "");
+		return stringWriter.toString();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tag
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final String P_XML_TAG_NAME = "P_XML_TAG_NAME";
+	private String m_tag;
+	private boolean m_closed;
+
+	/**
+	 * @return the name of tag.
+	 */
+	public String getTag() {
+		return m_tag;
+	}
+
+	/**
+	 * @return the simple name of tag, without namespace.
+	 */
+	public String getTagLocal() {
+		int index = m_tag.indexOf(":");
+		if (index == -1) {
+			return m_tag;
+		}
+		return m_tag.substring(index + 1);
+	}
+
+	/**
+	 * @return the namespace of tag, including ":" character.
+	 */
+	public String getTagNS() {
+		int index = m_tag.indexOf(":");
+		if (index == -1) {
+			return StringUtils.EMPTY;
+		}
+		return m_tag.substring(0, index + 1);
+	}
+
+	/**
+	 * Sets the name of tag.
+	 */
+	public void setTag(String tag) {
+		if (!StringUtils.equals(m_tag, tag)) {
+			String oldValue = m_tag;
+			m_tag = tag;
+			firePropertyChanged(this, P_XML_TAG_NAME, oldValue, m_tag);
+		}
+	}
+
+	/**
+	 * Sets the simple name of tag, without namespace.
+	 */
+	public void setTagLocal(String localTag) {
+		String tag = getTagNS() + localTag;
+		setTag(tag);
+	}
+
+	/**
+	 * @return <code>true</code> if this element is closed on start.
+	 */
+	public boolean isClosed() {
+		return m_closed;
+	}
+
+	/**
+	 * Specifies if this element is closed on start.
+	 */
+	public void setClosed(boolean closed) {
+		m_closed = closed;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Location
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private int m_offset;
+	private int m_length;
+
+	public int getOffset() {
+		return m_offset;
+	}
+
+	public void setOffset(int offset) {
+		m_offset = offset;
+	}
+
+	public int getLength() {
+		return m_length;
+	}
+
+	public void setLength(int length) {
+		m_length = length;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Location: open
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private int m_openTagOffset;
+	private int m_openTagLength;
+
+	public int getOpenTagOffset() {
+		return m_openTagOffset;
+	}
+
+	public void setOpenTagOffset(int openTagOffset) {
+		m_openTagOffset = openTagOffset;
+	}
+
+	public int getOpenTagLength() {
+		return m_openTagLength;
+	}
+
+	public void setOpenTagLength(int openTagLength) {
+		m_openTagLength = openTagLength;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Location: close
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private int m_closeTagOffset;
+	private int m_closeTagLength;
+
+	public int getCloseTagOffset() {
+		return m_closeTagOffset;
+	}
+
+	public void setCloseTagOffset(int closeTagOffset) {
+		m_closeTagOffset = closeTagOffset;
+	}
+
+	public int getCloseTagLength() {
+		return m_closeTagLength;
+	}
+
+	public void setCloseTagLength(int closeTagLength) {
+		m_closeTagLength = closeTagLength;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parent
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private DocumentElement m_parent;
+
+	/**
+	 * Sets the parent {@link DocumentElement}, may be <code>null</code>.
+	 */
+	public void setParent(DocumentElement parent) {
+		m_parent = parent;
+	}
+
+	/**
+	 * @return the parent {@link DocumentElement}, may be <code>null</code> for root.
+	 */
+	public DocumentElement getParent() {
+		return m_parent;
+	}
+
+	/**
+	 * @return the root {@link DocumentElement}.
+	 */
+	public DocumentElement getRoot() {
+		if (m_parent == null) {
+			return this;
+		}
+		return m_parent.getRoot();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Children
+	//
+	////////////////////////////////////////////////////////////////////////////
+	final List<DocumentElement> m_children = Lists.newArrayList();
+
+	/**
+	 * Adds given {@link DocumentElement} as last child.
+	 */
+	public void addChild(DocumentElement child) {
+		addChild(child, m_children.size());
+	}
+
+	/**
+	 * Adds given {@link DocumentElement} into given position relative to other children.
+	 */
+	public void addChild(DocumentElement child, int index) {
+		m_children.add(index, child);
+		child.setParent(this);
+		child.setModel(getModel());
+		fireStructureChanged(child, ModelChangedEvent.INSERT);
+	}
+
+	/**
+	 * Moves existing {@link DocumentElement} into given position relative to other children.
+	 */
+	public void moveChild(DocumentElement child, int index) {
+		if (index == -1) {
+			index = m_children.size();
+		}
+		fireModelChanged(new ModelChangedEvent(ModelChangedEvent.MOVE,
+				child,
+				"" + index,
+				child.getParent(),
+				this));
+	}
+
+	/**
+	 * Removes given child {@link DocumentElement}.
+	 */
+	public void removeChild(DocumentElement child) {
+		int index = m_children.indexOf(child);
+		if (index != -1) {
+			m_children.remove(index);
+			fireStructureChanged(child, ModelChangedEvent.REMOVE);
+		}
+	}
+
+	/**
+	 * Removes this {@link DocumentElement} from parent.
+	 */
+	public void remove() {
+		m_parent.removeChild(this);
+	}
+
+	/**
+	 * Removes all children {@link DocumentElement}s.
+	 */
+	public void removeChildren() {
+		while (!m_children.isEmpty()) {
+			m_children.get(0).remove();
+		}
+	}
+
+	/**
+	 * @return the {@link DocumentElement} children.
+	 */
+	public List<DocumentElement> getChildren() {
+		return ImmutableList.copyOf(m_children);
+	}
+
+	/**
+	 * @return {@link DocumentElement}s that are instances of given {@link Class}.
+	 */
+	@SuppressWarnings("unchecked")
+	public final <T extends DocumentElement> List<T> getChildren(Class<T> elementClass) {
+		List<T> result = Lists.newArrayList();
+		for (DocumentElement child : getChildren()) {
+			if (elementClass.isInstance(child)) {
+				result.add((T) child);
+			}
+		}
+		return result;
+	}
+
+	/**
+	 * @return the {@link DocumentElement} which is direct child of this one and is or contains given
+	 *         one. May be <code>null</code>, if given "child" is not really (in)direct child of this
+	 *         {@link DocumentElement}.
+	 */
+	public DocumentElement getDirectChild(DocumentElement child) {
+		while (child != null) {
+			if (child.getParent() == this) {
+				return child;
+			}
+			child = child.getParent();
+		}
+		return null;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Indexed access to children
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the index of given {@link DocumentElement} child, may be <code>-1</code> if not child.
+	 */
+	public int indexOf(DocumentElement child) {
+		return m_children.indexOf(child);
+	}
+
+	/**
+	 * @return the {@link DocumentElement} at given index.
+	 *
+	 * @throws IndexOutOfBoundsException
+	 *           if the index is out of range.
+	 */
+	public DocumentElement getChildAt(int index) {
+		return m_children.get(index);
+	}
+
+	/**
+	 * @return the first child {@link DocumentElement} with given tag, may be <code>null</code>.
+	 */
+	public DocumentElement getChild(String tag, boolean ignoreCase) {
+		for (DocumentElement child : m_children) {
+			if (ignoreCase) {
+				if (child.getTag().equalsIgnoreCase(tag)) {
+					return child;
+				}
+			} else {
+				if (child.getTag().equals(tag)) {
+					return child;
+				}
+			}
+		}
+		return null;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Text
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private DocumentTextNode m_textNode;
+
+	/**
+	 * @return the {@link DocumentTextNode}, may be <code>null</code>.
+	 */
+	public DocumentTextNode getTextNode() {
+		return m_textNode;
+	}
+
+	/**
+	 * Sets the not <code>null</code> {@link DocumentTextNode} with text.
+	 */
+	public void setTextNode(DocumentTextNode textNode) {
+		m_textNode = textNode;
+		m_textNode.setEnclosingElement(this);
+		m_textNode.setModel(getModel());
+		fireStructureChanged(m_textNode, ModelChangedEvent.INSERT);
+	}
+
+	/**
+	 * Removes {@link DocumentTextNode}, if exists. Ignored if no text node.
+	 */
+	public void removeTextNode() {
+		if (m_textNode != null) {
+			DocumentTextNode textNode = m_textNode;
+			m_textNode = null;
+			fireStructureChanged(textNode, ModelChangedEvent.REMOVE);
+		}
+	}
+
+	/**
+	 * <ul>
+	 * <li>If text is not <code>null</code>, then creates {@link DocumentTextNode} and uses
+	 * {@link #setTextNode(DocumentTextNode)}.</li>
+	 * <li>If text is <code>null</code>, then removes {@link DocumentTextNode}.</li>
+	 * </ul>
+	 */
+	public void setText(String text, boolean isCDATA) {
+		if (text != null) {
+			DocumentTextNode textNode = new DocumentTextNode(isCDATA);
+			textNode.setText(text);
+			setTextNode(textNode);
+		} else {
+			removeTextNode();
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Attributes as values
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final Map<String, DocumentAttribute> m_attributes = Maps.newLinkedHashMap();
+
+	/**
+	 * Sets the value of attribute: adds new, updates or existing.
+	 *
+	 * @param name
+	 *          the name of attribute.
+	 * @param value
+	 *          new value of attribute, may be <code>null</code> to remove it.
+	 *
+	 * @return the handled attribute, may be <code>null</code>.
+	 */
+	public DocumentAttribute setAttribute(String name, String value) {
+		DocumentAttribute attribute = getDocumentAttribute(name);
+		// may be delete
+		if (value == null) {
+			if (attribute != null) {
+				removeDocumentAttribute(attribute);
+			}
+			return attribute;
+		}
+		// new attribute
+		if (attribute == null) {
+			attribute = new DocumentAttribute();
+			attribute.setModel(getModel());
+			attribute.setName(name);
+			attribute.setValue(value);
+			attribute.setEnclosingElement(this);
+			// add
+			m_attributes.put(attribute.getName(), attribute);
+			// send notification
+			fireStructureChanged(attribute, ModelChangedEvent.INSERT);
+			return attribute;
+		}
+		// update attribute
+		{
+			attribute.setValue(value);
+			return attribute;
+		}
+	}
+
+	/**
+	 * @return the value of attribute with given name, may be <code>null</code> if no such attribute.
+	 */
+	public String getAttribute(String name) {
+		DocumentAttribute attribute = m_attributes.get(name);
+		return attribute != null ? attribute.getValue() : null;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Attributes as objects
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link DocumentAttribute} with given name, may be <code>null</code>.
+	 */
+	public DocumentAttribute getDocumentAttribute(String name) {
+		return m_attributes.get(name);
+	}
+
+	/**
+	 * @return the {@link List} with all attributes.
+	 */
+	public List<DocumentAttribute> getDocumentAttributes() {
+		return ImmutableList.copyOf(m_attributes.values());
+	}
+
+	/**
+	 * Removes given {@link DocAttribute}.
+	 */
+	public void removeDocumentAttribute(DocumentAttribute attribute) {
+		m_attributes.remove(attribute.getName());
+		fireStructureChanged(attribute, ModelChangedEvent.REMOVE);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Write
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Writes this {@link DocumentElement} and its attribute and children indented.
+	 */
+	public void write(PrintWriter writer, String indent) {
+		if (m_children.isEmpty()) {
+			// write open tag
+			writer.print(indent);
+			writer.print("<");
+			writer.print(m_tag);
+			writeAttributes(writer);
+			// write text and close tag
+			if (m_textNode == null) {
+				writer.print("/>\n");
+			} else {
+				// write end of open tag
+				writer.print(">");
+				// write text
+				writer.print(m_textNode.getRawText());
+				// write close tag
+				writer.print("</");
+				writer.print(m_tag);
+				writer.print(">\n");
+			}
+		} else {
+			// write open tag
+			writer.print(indent);
+			writer.print("<");
+			writer.print(m_tag);
+			writeAttributes(writer);
+			writer.print(">\n");
+			// write children
+			String childrenIndent = indent + "\t";
+			for (DocumentElement child : m_children) {
+				child.write(writer, childrenIndent);
+			}
+			// write close tag
+			writer.print(indent);
+			writer.print("</");
+			writer.print(m_tag);
+			writer.print(">\n");
+		}
+	}
+
+	/**
+	 * Writes this {@link DocumentElement} and its attribute, but not children.
+	 */
+	public void writeShort(PrintWriter writer) {
+		// write open tag
+		writer.print("<");
+		writer.print(m_tag);
+		writeAttributes(writer);
+		// close tag
+		writer.print(">");
+	}
+
+	/**
+	 * Writers attributes of this element.
+	 */
+	private void writeAttributes(PrintWriter writer) {
+		for (DocumentAttribute attribute : getDocumentAttributes()) {
+			writer.print(" ");
+			attribute.write(writer);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Visiting
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Visits this {@link DocumentElement}, its attributes and child {@link DocumentElement}s.
+	 */
+	public final void accept(DocumentModelVisitor visitor) {
+		if (visitor.visit(this)) {
+			// visit attributes
+			for (DocumentAttribute attribute : getDocumentAttributes()) {
+				visitor.visit(attribute);
+			}
+			// visit text node
+			if (m_textNode != null) {
+				visitor.visit(m_textNode);
+			}
+			// visit children
+			for (DocumentElement child : getChildren()) {
+				child.accept(visitor);
+			}
+			// end visit
+			visitor.endVisit(this);
+		}
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/xml/DocumentModelVisitor.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/xml/DocumentModelVisitor.java
index fe5505ea9..b2891a4f2 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/xml/DocumentModelVisitor.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/xml/DocumentModelVisitor.java
@@ -17,26 +17,26 @@
  * @coverage core.util.xml
  */
 public class DocumentModelVisitor {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // DocumentNode
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public boolean visit(DocumentElement element) {
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// DocumentNode
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public boolean visit(DocumentElement element) {
+		return true;
+	}
 
-  public void endVisit(DocumentElement element) {
-  }
+	public void endVisit(DocumentElement element) {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Other
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void visit(DocumentAttribute attribute) {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Other
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void visit(DocumentAttribute attribute) {
+	}
 
-  public void visit(DocumentTextNode node) {
-  }
+	public void visit(DocumentTextNode node) {
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/xml/DocumentTextNode.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/xml/DocumentTextNode.java
index d16a625a4..ec142077a 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/xml/DocumentTextNode.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/xml/DocumentTextNode.java
@@ -19,104 +19,104 @@
  * @coverage core.util.xml
  */
 public final class DocumentTextNode extends AbstractDocumentObject {
-  public static final String P_TEXT = "P_TEXT";
-  public static final String P_CDATA = "P_CDATA";
-  private boolean m_isCDATA;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DocumentTextNode(boolean isCDATA) {
-    m_isCDATA = isCDATA;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Enclosing element
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private DocumentElement m_enclosingElement;
-
-  public void setEnclosingElement(DocumentElement element) {
-    m_enclosingElement = element;
-  }
-
-  public DocumentElement getEnclosingElement() {
-    return m_enclosingElement;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Text
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private String m_text;
-
-  public void setText(String text) {
-    if (!StringUtils.equals(m_text, text)) {
-      String oldValue = m_text;
-      m_text = text;
-      firePropertyChanged(this, P_TEXT, oldValue, m_text);
-    }
-  }
-
-  public String getText() {
-    return m_text;
-  }
-
-  public String getRawText() {
-    if (m_isCDATA) {
-      return "<![CDATA[" + m_text + "]]>";
-    }
-    return m_text;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // CDATA
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public boolean isCDATA() {
-    return m_isCDATA;
-  }
-
-  public void setCDATA(boolean isCDATA) {
-    if (m_isCDATA != isCDATA) {
-      boolean oldValue = m_isCDATA;
-      m_isCDATA = isCDATA;
-      firePropertyChanged(this, P_CDATA, oldValue, m_isCDATA);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Offset
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private int m_offset;
-
-  public void setOffset(int offset) {
-    m_offset = offset;
-  }
-
-  public int getOffset() {
-    return m_offset;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Length
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private int m_length;
-
-  public void setLength(int length) {
-    m_length = length;
-  }
-
-  public int getLength() {
-    return m_length;
-  }
+	public static final String P_TEXT = "P_TEXT";
+	public static final String P_CDATA = "P_CDATA";
+	private boolean m_isCDATA;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DocumentTextNode(boolean isCDATA) {
+		m_isCDATA = isCDATA;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Enclosing element
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private DocumentElement m_enclosingElement;
+
+	public void setEnclosingElement(DocumentElement element) {
+		m_enclosingElement = element;
+	}
+
+	public DocumentElement getEnclosingElement() {
+		return m_enclosingElement;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Text
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private String m_text;
+
+	public void setText(String text) {
+		if (!StringUtils.equals(m_text, text)) {
+			String oldValue = m_text;
+			m_text = text;
+			firePropertyChanged(this, P_TEXT, oldValue, m_text);
+		}
+	}
+
+	public String getText() {
+		return m_text;
+	}
+
+	public String getRawText() {
+		if (m_isCDATA) {
+			return "<![CDATA[" + m_text + "]]>";
+		}
+		return m_text;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// CDATA
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public boolean isCDATA() {
+		return m_isCDATA;
+	}
+
+	public void setCDATA(boolean isCDATA) {
+		if (m_isCDATA != isCDATA) {
+			boolean oldValue = m_isCDATA;
+			m_isCDATA = isCDATA;
+			firePropertyChanged(this, P_CDATA, oldValue, m_isCDATA);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Offset
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private int m_offset;
+
+	public void setOffset(int offset) {
+		m_offset = offset;
+	}
+
+	public int getOffset() {
+		return m_offset;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Length
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private int m_length;
+
+	public void setLength(int length) {
+		m_length = length;
+	}
+
+	public int getLength() {
+		return m_length;
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/xml/FileDocumentEditContext.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/xml/FileDocumentEditContext.java
index 0edcab6e3..0cc6e3280 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/xml/FileDocumentEditContext.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/xml/FileDocumentEditContext.java
@@ -26,69 +26,69 @@
  * @coverage core.util.xml
  */
 public class FileDocumentEditContext extends AbstractDocumentEditContext {
-  private final IFile m_file;
-  private final ITextFileBuffer m_buffer;
+	private final IFile m_file;
+	private final ITextFileBuffer m_buffer;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FileDocumentEditContext(IFile file) throws Exception {
-    m_file = file;
-    // initialize buffer and document
-    {
-      ITextFileBufferManager manager = FileBuffers.getTextFileBufferManager();
-      manager.connect(m_file.getFullPath(), null);
-      m_buffer = manager.getTextFileBuffer(file.getFullPath());
-    }
-    // parse and prepare root
-    parse(m_buffer.getDocument());
-    // set charset
-    {
-      String charset = m_file.getCharset();
-      getRoot().getModel().setCharset(charset);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FileDocumentEditContext(IFile file) throws Exception {
+		m_file = file;
+		// initialize buffer and document
+		{
+			ITextFileBufferManager manager = FileBuffers.getTextFileBufferManager();
+			manager.connect(m_file.getFullPath(), null);
+			m_buffer = manager.getTextFileBuffer(file.getFullPath());
+		}
+		// parse and prepare root
+		parse(m_buffer.getDocument());
+		// set charset
+		{
+			String charset = m_file.getCharset();
+			getRoot().getModel().setCharset(charset);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Buffer operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Commits changes made in this context to file.
-   */
-  @Override
-  public final void commit() {
-    ExecutionUtils.runRethrowUI(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        commit_super();
-        m_buffer.commit(null, false);
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Buffer operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Commits changes made in this context to file.
+	 */
+	@Override
+	public final void commit() {
+		ExecutionUtils.runRethrowUI(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				commit_super();
+				m_buffer.commit(null, false);
+			}
+		});
+	}
 
-  /**
-   * "super" version of {@link #commit()} to use in inner class.
-   */
-  private void commit_super() throws Exception {
-    super.commit();
-  }
+	/**
+	 * "super" version of {@link #commit()} to use in inner class.
+	 */
+	private void commit_super() throws Exception {
+		super.commit();
+	}
 
-  /**
-   * Disconnects this context from file. All changes made in model after this point are ignored and
-   * not reflected in document/file.
-   */
-  @Override
-  public final void disconnect() throws CoreException {
-    // disconnect buffer
-    {
-      ITextFileBufferManager manager = FileBuffers.getTextFileBufferManager();
-      manager.disconnect(m_file.getFullPath(), null);
-    }
-    // continue
-    super.disconnect();
-  }
+	/**
+	 * Disconnects this context from file. All changes made in model after this point are ignored and
+	 * not reflected in document/file.
+	 */
+	@Override
+	public final void disconnect() throws CoreException {
+		// disconnect buffer
+		{
+			ITextFileBufferManager manager = FileBuffers.getTextFileBufferManager();
+			manager.disconnect(m_file.getFullPath(), null);
+		}
+		// continue
+		super.disconnect();
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/xml/IModelChangedListener.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/xml/IModelChangedListener.java
index 55f1c0f29..9818b585f 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/xml/IModelChangedListener.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/xml/IModelChangedListener.java
@@ -18,11 +18,11 @@
  * @coverage core.util.xml
  */
 public interface IModelChangedListener {
-  /**
-   * Called when there is a change in the model this listener is registered with.
-   *
-   * @param event
-   *          a change event that describes the kind of the model change
-   */
-  void modelChanged(ModelChangedEvent event);
+	/**
+	 * Called when there is a change in the model this listener is registered with.
+	 *
+	 * @param event
+	 *          a change event that describes the kind of the model change
+	 */
+	void modelChanged(ModelChangedEvent event);
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/xml/Model.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/xml/Model.java
index be653dd66..72509f2ac 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/xml/Model.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/xml/Model.java
@@ -21,57 +21,57 @@
  * @coverage core.util.xml
  */
 public final class Model {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Encoding
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private String m_charset;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Encoding
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private String m_charset;
 
-  /**
-   * Sets the XML document charset.
-   */
-  public void setCharset(String charset) {
-    m_charset = charset;
-  }
+	/**
+	 * Sets the XML document charset.
+	 */
+	public void setCharset(String charset) {
+		m_charset = charset;
+	}
 
-  /**
-   * @return the XML document charset, may be <code>null</code> if unknown.
-   */
-  public String getCharset() {
-    return m_charset;
-  }
+	/**
+	 * @return the XML document charset, may be <code>null</code> if unknown.
+	 */
+	public String getCharset() {
+		return m_charset;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Listeners
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final List<IModelChangedListener> m_listeners = Lists.newArrayList();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Listeners
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final List<IModelChangedListener> m_listeners = Lists.newArrayList();
 
-  /**
-   * Adds the listener to the list of listeners that will be notified on model changes.
-   */
-  public void addModelChangedListener(IModelChangedListener listener) {
-    if (!m_listeners.contains(listener)) {
-      m_listeners.add(listener);
-    }
-  }
+	/**
+	 * Adds the listener to the list of listeners that will be notified on model changes.
+	 */
+	public void addModelChangedListener(IModelChangedListener listener) {
+		if (!m_listeners.contains(listener)) {
+			m_listeners.add(listener);
+		}
+	}
 
-  /**
-   * Takes the listener off the list of registered change listeners.
-   */
-  public void removeModelChangedListener(IModelChangedListener listener) {
-    m_listeners.remove(listener);
-  }
+	/**
+	 * Takes the listener off the list of registered change listeners.
+	 */
+	public void removeModelChangedListener(IModelChangedListener listener) {
+		m_listeners.remove(listener);
+	}
 
-  /**
-   * Delivers change event to all the registered listeners.
-   */
-  public void fireModelChanged(ModelChangedEvent event) {
-    List<IModelChangedListener> listeners = Lists.newArrayList(m_listeners);
-    for (IModelChangedListener listener : listeners) {
-      listener.modelChanged(event);
-    }
-  }
+	/**
+	 * Delivers change event to all the registered listeners.
+	 */
+	public void fireModelChanged(ModelChangedEvent event) {
+		List<IModelChangedListener> listeners = Lists.newArrayList(m_listeners);
+		for (IModelChangedListener listener : listeners) {
+			listener.modelChanged(event);
+		}
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/xml/ModelChangedEvent.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/xml/ModelChangedEvent.java
index 160d9883d..e04da1e8b 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/xml/ModelChangedEvent.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/xml/ModelChangedEvent.java
@@ -18,104 +18,104 @@
  * @coverage core.util.xml
  */
 public class ModelChangedEvent {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Static fields
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Indicates a change where one or more objects are added to the model.
-   */
-  public static final int INSERT = 1;
-  /**
-   * Indicates a change where objects was moved into new parent.
-   */
-  public static final int MOVE = 2;
-  /**
-   * Indicates a change where one or more objects are removed from the model.
-   */
-  public static final int REMOVE = 3;
-  /**
-   * Indicates that a model object's property has been changed.
-   */
-  public static final int CHANGE = 4;
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance fields
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final int m_type;
-  private final Object m_object;
-  private final Object m_oldValue;
-  private final Object m_newValue;
-  private final String m_property;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Static fields
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Indicates a change where one or more objects are added to the model.
+	 */
+	public static final int INSERT = 1;
+	/**
+	 * Indicates a change where objects was moved into new parent.
+	 */
+	public static final int MOVE = 2;
+	/**
+	 * Indicates a change where one or more objects are removed from the model.
+	 */
+	public static final int REMOVE = 3;
+	/**
+	 * Indicates that a model object's property has been changed.
+	 */
+	public static final int CHANGE = 4;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance fields
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final int m_type;
+	private final Object m_object;
+	private final Object m_oldValue;
+	private final Object m_newValue;
+	private final String m_property;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ModelChangedEvent(int type,
-      Object object,
-      String changedProperty,
-      Object oldValue,
-      Object newValue) {
-    m_type = type;
-    m_object = object;
-    m_property = changedProperty;
-    m_oldValue = oldValue;
-    m_newValue = newValue;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ModelChangedEvent(int type,
+			Object object,
+			String changedProperty,
+			Object oldValue,
+			Object newValue) {
+		m_type = type;
+		m_object = object;
+		m_property = changedProperty;
+		m_oldValue = oldValue;
+		m_newValue = newValue;
+	}
 
-  public ModelChangedEvent(int type, Object object, String changedProperty) {
-    this(type, object, changedProperty, null, null);
-  }
+	public ModelChangedEvent(int type, Object object, String changedProperty) {
+		this(type, object, changedProperty, null, null);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the type of change that occurred in the model (one of <code>INSERT</code>,
-   *         <code>REMOVE</code>, <code>CHANGE</code> or <code>WORLD_CHANGED </code>).
-   */
-  public int getChangeType() {
-    return m_type;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the type of change that occurred in the model (one of <code>INSERT</code>,
+	 *         <code>REMOVE</code>, <code>CHANGE</code> or <code>WORLD_CHANGED </code>).
+	 */
+	public int getChangeType() {
+		return m_type;
+	}
 
-  /**
-   * @return an model object that is affected by the change.
-   */
-  public Object getChangedObject() {
-    return m_object;
-  }
+	/**
+	 * @return an model object that is affected by the change.
+	 */
+	public Object getChangedObject() {
+		return m_object;
+	}
 
-  /**
-   * @return property that has been changed in the model object, or <code>null</code> if type is not
-   *         CHANGE or if more than one property has been changed.
-   */
-  public String getChangedProperty() {
-    return m_property;
-  }
+	/**
+	 * @return property that has been changed in the model object, or <code>null</code> if type is not
+	 *         CHANGE or if more than one property has been changed.
+	 */
+	public String getChangedProperty() {
+		return m_property;
+	}
 
-  /**
-   * When model change is of type <code>CHANGE</code>, this method is used to obtain the old value
-   * of the property (before the change).
-   *
-   * @return the old value of the changed property
-   */
-  public Object getOldValue() {
-    return m_oldValue;
-  }
+	/**
+	 * When model change is of type <code>CHANGE</code>, this method is used to obtain the old value
+	 * of the property (before the change).
+	 *
+	 * @return the old value of the changed property
+	 */
+	public Object getOldValue() {
+		return m_oldValue;
+	}
 
-  /**
-   * When model change is of type <code>CHANGE</code>, this method is used to obtain the new value
-   * of the property (after the change).
-   *
-   * @return the new value of the changed property.
-   */
-  public Object getNewValue() {
-    return m_newValue;
-  }
+	/**
+	 * When model change is of type <code>CHANGE</code>, this method is used to obtain the new value
+	 * of the property (after the change).
+	 *
+	 * @return the new value of the changed property.
+	 */
+	public Object getNewValue() {
+		return m_newValue;
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/xml/parser/QAttribute.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/xml/parser/QAttribute.java
index 11b5a4cbe..a29891c13 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/xml/parser/QAttribute.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/xml/parser/QAttribute.java
@@ -17,70 +17,70 @@
  * @coverage core.util.xml
  */
 public final class QAttribute {
-  private String m_name;
-  private int m_nameOffset;
-  private int m_nameLength;
+	private String m_name;
+	private int m_nameOffset;
+	private int m_nameLength;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Name
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public String getName() {
-    return m_name;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Name
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public String getName() {
+		return m_name;
+	}
 
-  public int getNameOffset() {
-    return m_nameOffset;
-  }
+	public int getNameOffset() {
+		return m_nameOffset;
+	}
 
-  public int getNameLength() {
-    return m_nameLength;
-  }
+	public int getNameLength() {
+		return m_nameLength;
+	}
 
-  void setName(String name) {
-    m_name = name;
-  }
+	void setName(String name) {
+		m_name = name;
+	}
 
-  void setNameOffset(int nameOffset) {
-    m_nameOffset = nameOffset;
-  }
+	void setNameOffset(int nameOffset) {
+		m_nameOffset = nameOffset;
+	}
 
-  void setNameEndOffset(int endOffset) {
-    m_nameLength = endOffset - m_nameOffset;
-  }
+	void setNameEndOffset(int endOffset) {
+		m_nameLength = endOffset - m_nameOffset;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Value
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private String m_value;
-  private int m_valueOffset;
-  private int m_valueLength;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Value
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private String m_value;
+	private int m_valueOffset;
+	private int m_valueLength;
 
-  //
-  public String getValue() {
-    return m_value;
-  }
+	//
+	public String getValue() {
+		return m_value;
+	}
 
-  public int getValueOffset() {
-    return m_valueOffset;
-  }
+	public int getValueOffset() {
+		return m_valueOffset;
+	}
 
-  public int getValueLength() {
-    return m_valueLength;
-  }
+	public int getValueLength() {
+		return m_valueLength;
+	}
 
-  void setValue(String value) {
-    m_value = value;
-  }
+	void setValue(String value) {
+		m_value = value;
+	}
 
-  void setValueOffset(int valueOffset) {
-    m_valueOffset = valueOffset;
-  }
+	void setValueOffset(int valueOffset) {
+		m_valueOffset = valueOffset;
+	}
 
-  void setValueEndOffset(int endOffset) {
-    m_valueLength = endOffset - m_valueOffset;
-  }
+	void setValueEndOffset(int endOffset) {
+		m_valueLength = endOffset - m_valueOffset;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/xml/parser/QException.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/xml/parser/QException.java
index 4f96fb123..8eadca09e 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/xml/parser/QException.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/xml/parser/QException.java
@@ -17,14 +17,14 @@
  * @coverage core.util.xml
  */
 public final class QException extends Exception {
-  private static final long serialVersionUID = 0L;
+	private static final long serialVersionUID = 0L;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public QException(String message) {
-    super(message);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public QException(String message) {
+		super(message);
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/xml/parser/QHandler.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/xml/parser/QHandler.java
index 73e011067..df55307ca 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/xml/parser/QHandler.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/xml/parser/QHandler.java
@@ -20,60 +20,60 @@
  * @coverage core.util.xml
  */
 public interface QHandler {
-  /**
-   * Notifies that top level element starts.
-   */
-  void startDocument() throws Exception;
+	/**
+	 * Notifies that top level element starts.
+	 */
+	void startDocument() throws Exception;
 
-  /**
-   * Notifies that top level element ends.
-   */
-  void endDocument() throws Exception;
+	/**
+	 * Notifies that top level element ends.
+	 */
+	void endDocument() throws Exception;
 
-  /**
-   * Notifies that element starts.
-   *
-   * @param offset
-   *          the offset of <code>"&lt;"</code> character.
-   * @param length
-   *          the length of element, including <code>"&gt;"</code> character.
-   * @param tag
-   *          the name of tag.
-   * @param attributes
-   *          simple {@link Map} of attribute names and their values.
-   * @param attrList
-   *          the {@link List} of information about each attribute.
-   * @param closed
-   *          is <code>true</code> if this element is closed directly at start, i.e. ends with
-   *          <code>"/&gt;"</code>.
-   */
-  void startElement(int offset,
-      int length,
-      String tag,
-      Map<String, String> attributes,
-      List<QAttribute> attrList,
-      boolean closed) throws Exception;
+	/**
+	 * Notifies that element starts.
+	 *
+	 * @param offset
+	 *          the offset of <code>"&lt;"</code> character.
+	 * @param length
+	 *          the length of element, including <code>"&gt;"</code> character.
+	 * @param tag
+	 *          the name of tag.
+	 * @param attributes
+	 *          simple {@link Map} of attribute names and their values.
+	 * @param attrList
+	 *          the {@link List} of information about each attribute.
+	 * @param closed
+	 *          is <code>true</code> if this element is closed directly at start, i.e. ends with
+	 *          <code>"/&gt;"</code>.
+	 */
+	void startElement(int offset,
+			int length,
+			String tag,
+			Map<String, String> attributes,
+			List<QAttribute> attrList,
+			boolean closed) throws Exception;
 
-  /**
-   * Notifies that end of element was reached.
-   *
-   * @param offset
-   *          the offset of <code>"&lt;"</code> character. May be <code>-1</code> if element closed
-   *          directly at start.
-   * @param endOffset
-   *          the offset after <code>"/&gt;"</code> characters.
-   * @param tag
-   *          the name of tag.
-   */
-  void endElement(int offset, int endOffset, String tag) throws Exception;
+	/**
+	 * Notifies that end of element was reached.
+	 *
+	 * @param offset
+	 *          the offset of <code>"&lt;"</code> character. May be <code>-1</code> if element closed
+	 *          directly at start.
+	 * @param endOffset
+	 *          the offset after <code>"/&gt;"</code> characters.
+	 * @param tag
+	 *          the name of tag.
+	 */
+	void endElement(int offset, int endOffset, String tag) throws Exception;
 
-  /**
-   * Notifies that some text between elements was processed.
-   *
-   * @param text
-   *          the text.
-   * @param isCDATA
-   *          is <code>true</code> if text was enclosed into <code>CDATA</code> section.
-   */
-  void text(String text, boolean isCDATA) throws Exception;
+	/**
+	 * Notifies that some text between elements was processed.
+	 *
+	 * @param text
+	 *          the text.
+	 * @param isCDATA
+	 *          is <code>true</code> if text was enclosed into <code>CDATA</code> section.
+	 */
+	void text(String text, boolean isCDATA) throws Exception;
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/xml/parser/QHandlerAdapter.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/xml/parser/QHandlerAdapter.java
index 22d422041..1e29bbc98 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/xml/parser/QHandlerAdapter.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/xml/parser/QHandlerAdapter.java
@@ -20,28 +20,28 @@
  * @coverage core.util.xml
  */
 public class QHandlerAdapter implements QHandler {
-  @Override
-  public void startDocument() throws Exception {
-  }
+	@Override
+	public void startDocument() throws Exception {
+	}
 
-  @Override
-  public void endDocument() throws Exception {
-  }
+	@Override
+	public void endDocument() throws Exception {
+	}
 
-  @Override
-  public void startElement(int offset,
-      int length,
-      String tag,
-      Map<String, String> attributes,
-      List<QAttribute> attrList,
-      boolean closed) throws Exception {
-  }
+	@Override
+	public void startElement(int offset,
+			int length,
+			String tag,
+			Map<String, String> attributes,
+			List<QAttribute> attrList,
+			boolean closed) throws Exception {
+	}
 
-  @Override
-  public void endElement(int offset, int endOffset, String tag) throws Exception {
-  }
+	@Override
+	public void endElement(int offset, int endOffset, String tag) throws Exception {
+	}
 
-  @Override
-  public void text(String text, boolean isCDATA) throws Exception {
-  }
+	@Override
+	public void text(String text, boolean isCDATA) throws Exception {
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/xml/parser/QParser.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/xml/parser/QParser.java
index a1dc4d15b..7a17f4988 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/xml/parser/QParser.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/xml/parser/QParser.java
@@ -29,359 +29,359 @@
  * @coverage core.util.xml
  */
 public final class QParser {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // States
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final static int TEXT = 1;
-  private final static int ENTITY = 2;
-  private final static int OPEN_TAG = 3;
-  private final static int CLOSE_TAG = 4;
-  private final static int START_TAG = 5;
-  private final static int ATTRIBUTE_LVALUE = 6;
-  private final static int ATTRIBUTE_EQUAL = 9;
-  private final static int ATTRIBUTE_RVALUE = 10;
-  private final static int QUOTE = 7;
-  private final static int IN_TAG = 8;
-  private final static int SINGLE_TAG = 12;
-  private final static int COMMENT = 13;
-  private final static int DONE = 11;
-  private final static int DOCTYPE = 14;
-  private final static int PRE = 15;
-  private final static int CDATA = 16;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// States
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final static int TEXT = 1;
+	private final static int ENTITY = 2;
+	private final static int OPEN_TAG = 3;
+	private final static int CLOSE_TAG = 4;
+	private final static int START_TAG = 5;
+	private final static int ATTRIBUTE_LVALUE = 6;
+	private final static int ATTRIBUTE_EQUAL = 9;
+	private final static int ATTRIBUTE_RVALUE = 10;
+	private final static int QUOTE = 7;
+	private final static int IN_TAG = 8;
+	private final static int SINGLE_TAG = 12;
+	private final static int COMMENT = 13;
+	private final static int DONE = 11;
+	private final static int DOCTYPE = 14;
+	private final static int PRE = 15;
+	private final static int CDATA = 16;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parsing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static void parse(Reader reader, QHandler handler) throws Exception {
-    Stack<Integer> st = new Stack<Integer>();
-    int depth = 0;
-    int mode = PRE;
-    int quotec = '"';
-    depth = 0;
-    StringBuffer sb = new StringBuffer();
-    StringBuffer etag = new StringBuffer();
-    String tagName = null;
-    String lvalue = null;
-    String rvalue = null;
-    QAttribute attribute = null;
-    Map<String, String> attrs = null;
-    List<QAttribute> attrList = null;
-    handler.startDocument();
-    int line = 1, col = 0;
-    boolean eol = false;
-    //
-    int offset = 0;
-    int startTagOffset = 0;
-    while (true) {
-      int c = reader.read();
-      offset++;
-      if (c == -1) {
-        break;
-      }
-      // use "\r", "\n" or "\r\n" as to move to next line
-      if (c == '\n' && eol) {
-        eol = false;
-      } else if (eol) {
-        eol = false;
-      } else if (c == '\n') {
-        line++;
-        col = 0;
-      } else if (c == '\r') {
-        eol = true;
-        line++;
-        col = 0;
-      } else {
-        col++;
-      }
-      //
-      if (mode == DONE) {
-        handler.endDocument();
-        return;
-        // We are between tags collecting text.
-      } else if (mode == TEXT) {
-        if (c == '<') {
-          st.push(mode);
-          mode = START_TAG;
-          startTagOffset = offset - 1;
-          if (sb.length() > 0) {
-            handler.text(sb.toString(), false);
-            sb.setLength(0);
-          }
-        } else if (c == '&') {
-          st.push(mode);
-          mode = ENTITY;
-          etag.setLength(0);
-        } else {
-          sb.append((char) c);
-        }
-        // we are processing a closing tag: e.g. </foo>
-      } else if (mode == CLOSE_TAG) {
-        if (c == '>') {
-          mode = popMode(st);
-          tagName = sb.toString();
-          sb.setLength(0);
-          depth--;
-          if (depth == 0) {
-            mode = DONE;
-          }
-          handler.endElement(startTagOffset, offset, tagName);
-        } else {
-          sb.append((char) c);
-        }
-        // we are processing CDATA
-      } else if (mode == CDATA) {
-        if (c == '>' && sb.toString().endsWith("]]")) {
-          sb.setLength(sb.length() - 2);
-          handler.text(sb.toString(), true);
-          sb.setLength(0);
-          mode = popMode(st);
-        } else {
-          sb.append((char) c);
-        }
-        // we are processing a comment.  We are inside
-        // the <!-- .... --> looking for the -->.
-      } else if (mode == COMMENT) {
-        if (c == '>' && sb.toString().endsWith("--")) {
-          sb.setLength(0);
-          mode = popMode(st);
-        } else {
-          sb.append((char) c);
-        }
-        // We are outside the root tag element
-      } else if (mode == PRE) {
-        if (c == '<') {
-          mode = TEXT;
-          st.push(mode);
-          mode = START_TAG;
-          startTagOffset = offset - 1;
-        }
-        // We are inside one of these <? ... ?>
-        // or one of these <!DOCTYPE ... >
-      } else if (mode == DOCTYPE) {
-        if (c == '>') {
-          mode = popMode(st);
-          if (mode == TEXT) {
-            mode = PRE;
-          }
-        }
-        // we have just seen a < and
-        // are wondering what we are looking at
-        // <foo>, </foo>, <!-- ... --->, etc.
-      } else if (mode == START_TAG) {
-        mode = popMode(st);
-        if (c == '/') {
-          st.push(mode);
-          mode = CLOSE_TAG;
-        } else if (c == '?') {
-          mode = DOCTYPE;
-        } else {
-          st.push(mode);
-          mode = OPEN_TAG;
-          tagName = null;
-          attrs = new TreeMap<String, String>();
-          attrList = new ArrayList<QAttribute>();
-          sb.append((char) c);
-        }
-        // we are processing an entity, e.g. &lt;, &#187;, etc.
-      } else if (mode == ENTITY) {
-        if (c == ';') {
-          mode = popMode(st);
-          String cent = etag.toString();
-          etag.setLength(0);
-          if (cent.equals("lt")) {
-            sb.append('<');
-          } else if (cent.equals("gt")) {
-            sb.append('>');
-          } else if (cent.equals("amp")) {
-            sb.append('&');
-          } else if (cent.equals("quot")) {
-            sb.append('"');
-          } else if (cent.equals("apos")) {
-            sb.append('\'');
-          } else if (cent.startsWith("#")) {
-            cent = cent.substring(1);
-            if (cent.startsWith("x")) {
-              cent = cent.substring(1);
-              sb.append((char) Integer.parseInt(cent, 16));
-            } else {
-              sb.append((char) Integer.parseInt(cent));
-            }
-          } else {
-            // ignore, right now we don't need entities
-            sb.append("&" + cent + ";");
-          }
-        } else {
-          etag.append((char) c);
-        }
-        // we have just seen something like this:
-        // <foo a="b"/
-        // and are looking for the final >.
-      } else if (mode == SINGLE_TAG) {
-        if (tagName == null) {
-          tagName = sb.toString();
-        }
-        if (c != '>') {
-          throwException("Expected > for tag: <" + tagName + "/>", line, col);
-        }
-        handler.startElement(startTagOffset, -1, tagName, attrs, attrList, true);
-        handler.endElement(-1, offset, tagName);
-        if (depth == 0) {
-          handler.endDocument();
-          return;
-        }
-        sb.setLength(0);
-        attrs = new TreeMap<String, String>();
-        attrList = new ArrayList<QAttribute>();
-        tagName = null;
-        mode = popMode(st);
-        // we are processing something
-        // like this <foo ... >.  It could
-        // still be a <!-- ... --> or something.
-      } else if (mode == OPEN_TAG) {
-        if (c == '>') {
-          if (tagName == null) {
-            tagName = sb.toString();
-          }
-          sb.setLength(0);
-          depth++;
-          handler.startElement(
-              startTagOffset,
-              offset - startTagOffset,
-              tagName,
-              attrs,
-              attrList,
-              false);
-          tagName = null;
-          attrs = new TreeMap<String, String>();
-          attrList = new ArrayList<QAttribute>();
-          mode = popMode(st);
-        } else if (c == '/') {
-          mode = SINGLE_TAG;
-        } else if (c == '-' && sb.toString().equals("!-")) {
-          mode = COMMENT;
-        } else if (c == '[' && sb.toString().equals("![CDATA")) {
-          mode = CDATA;
-          sb.setLength(0);
-        } else if (c == 'E' && sb.toString().equals("!DOCTYP")) {
-          sb.setLength(0);
-          mode = DOCTYPE;
-        } else if (Character.isWhitespace((char) c)) {
-          tagName = sb.toString();
-          sb.setLength(0);
-          mode = IN_TAG;
-        } else {
-          sb.append((char) c);
-        }
-        // We are processing the quoted right-hand side
-        // of an element's attribute.
-      } else if (mode == QUOTE) {
-        if (c == quotec) {
-          rvalue = sb.toString();
-          sb.setLength(0);
-          attribute.setValue(rvalue);
-          attribute.setValueEndOffset(offset - 1);
-          attrList.add(attribute);
-          attribute = null;
-          attrs.put(lvalue, rvalue);
-          mode = IN_TAG;
-          // See section the XML spec, section 3.3.3
-          // on normalization processing.
-        } else if (" \r\n\u0009".indexOf(c) >= 0) {
-          sb.append(' ');
-        } else if (c == '&') {
-          st.push(mode);
-          mode = ENTITY;
-          etag.setLength(0);
-        } else {
-          sb.append((char) c);
-        }
-      } else if (mode == ATTRIBUTE_RVALUE) {
-        if (c == '"' || c == '\'') {
-          quotec = c;
-          attribute.setValueOffset(offset);
-          mode = QUOTE;
-        } else if (Character.isWhitespace((char) c)) {
-        } else {
-          throwException("Error in attribute processing", line, col);
-        }
-      } else if (mode == ATTRIBUTE_LVALUE) {
-        if (Character.isWhitespace((char) c)) {
-          lvalue = sb.toString();
-          sb.setLength(0);
-          attribute.setName(lvalue);
-          attribute.setNameEndOffset(offset - 1);
-          mode = ATTRIBUTE_EQUAL;
-        } else if (c == '=') {
-          lvalue = sb.toString();
-          sb.setLength(0);
-          attribute.setName(lvalue);
-          attribute.setNameEndOffset(offset - 1);
-          mode = ATTRIBUTE_RVALUE;
-        } else {
-          sb.append((char) c);
-        }
-      } else if (mode == ATTRIBUTE_EQUAL) {
-        if (c == '=') {
-          mode = ATTRIBUTE_RVALUE;
-        } else if (Character.isWhitespace((char) c)) {
-        } else {
-          throwException("Error in attribute processing", line, col);
-        }
-      } else if (mode == IN_TAG) {
-        if (c == '>') {
-          mode = popMode(st);
-          handler.startElement(
-              startTagOffset,
-              offset - startTagOffset,
-              tagName,
-              attrs,
-              attrList,
-              false);
-          depth++;
-          tagName = null;
-          attrs = new TreeMap<String, String>();
-          attrList = new ArrayList<QAttribute>();
-        } else if (c == '/') {
-          mode = SINGLE_TAG;
-        } else if (Character.isWhitespace((char) c)) {
-        } else {
-          mode = ATTRIBUTE_LVALUE;
-          attribute = new QAttribute();
-          attribute.setNameOffset(offset - 1);
-          sb.append((char) c);
-        }
-      }
-    }
-    if (mode == DONE) {
-      handler.endDocument();
-    } else {
-      throwException("missing end tag", line, col);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parsing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static void parse(Reader reader, QHandler handler) throws Exception {
+		Stack<Integer> st = new Stack<Integer>();
+		int depth = 0;
+		int mode = PRE;
+		int quotec = '"';
+		depth = 0;
+		StringBuffer sb = new StringBuffer();
+		StringBuffer etag = new StringBuffer();
+		String tagName = null;
+		String lvalue = null;
+		String rvalue = null;
+		QAttribute attribute = null;
+		Map<String, String> attrs = null;
+		List<QAttribute> attrList = null;
+		handler.startDocument();
+		int line = 1, col = 0;
+		boolean eol = false;
+		//
+		int offset = 0;
+		int startTagOffset = 0;
+		while (true) {
+			int c = reader.read();
+			offset++;
+			if (c == -1) {
+				break;
+			}
+			// use "\r", "\n" or "\r\n" as to move to next line
+			if (c == '\n' && eol) {
+				eol = false;
+			} else if (eol) {
+				eol = false;
+			} else if (c == '\n') {
+				line++;
+				col = 0;
+			} else if (c == '\r') {
+				eol = true;
+				line++;
+				col = 0;
+			} else {
+				col++;
+			}
+			//
+			if (mode == DONE) {
+				handler.endDocument();
+				return;
+				// We are between tags collecting text.
+			} else if (mode == TEXT) {
+				if (c == '<') {
+					st.push(mode);
+					mode = START_TAG;
+					startTagOffset = offset - 1;
+					if (sb.length() > 0) {
+						handler.text(sb.toString(), false);
+						sb.setLength(0);
+					}
+				} else if (c == '&') {
+					st.push(mode);
+					mode = ENTITY;
+					etag.setLength(0);
+				} else {
+					sb.append((char) c);
+				}
+				// we are processing a closing tag: e.g. </foo>
+			} else if (mode == CLOSE_TAG) {
+				if (c == '>') {
+					mode = popMode(st);
+					tagName = sb.toString();
+					sb.setLength(0);
+					depth--;
+					if (depth == 0) {
+						mode = DONE;
+					}
+					handler.endElement(startTagOffset, offset, tagName);
+				} else {
+					sb.append((char) c);
+				}
+				// we are processing CDATA
+			} else if (mode == CDATA) {
+				if (c == '>' && sb.toString().endsWith("]]")) {
+					sb.setLength(sb.length() - 2);
+					handler.text(sb.toString(), true);
+					sb.setLength(0);
+					mode = popMode(st);
+				} else {
+					sb.append((char) c);
+				}
+				// we are processing a comment.  We are inside
+				// the <!-- .... --> looking for the -->.
+			} else if (mode == COMMENT) {
+				if (c == '>' && sb.toString().endsWith("--")) {
+					sb.setLength(0);
+					mode = popMode(st);
+				} else {
+					sb.append((char) c);
+				}
+				// We are outside the root tag element
+			} else if (mode == PRE) {
+				if (c == '<') {
+					mode = TEXT;
+					st.push(mode);
+					mode = START_TAG;
+					startTagOffset = offset - 1;
+				}
+				// We are inside one of these <? ... ?>
+				// or one of these <!DOCTYPE ... >
+			} else if (mode == DOCTYPE) {
+				if (c == '>') {
+					mode = popMode(st);
+					if (mode == TEXT) {
+						mode = PRE;
+					}
+				}
+				// we have just seen a < and
+				// are wondering what we are looking at
+				// <foo>, </foo>, <!-- ... --->, etc.
+			} else if (mode == START_TAG) {
+				mode = popMode(st);
+				if (c == '/') {
+					st.push(mode);
+					mode = CLOSE_TAG;
+				} else if (c == '?') {
+					mode = DOCTYPE;
+				} else {
+					st.push(mode);
+					mode = OPEN_TAG;
+					tagName = null;
+					attrs = new TreeMap<String, String>();
+					attrList = new ArrayList<QAttribute>();
+					sb.append((char) c);
+				}
+				// we are processing an entity, e.g. &lt;, &#187;, etc.
+			} else if (mode == ENTITY) {
+				if (c == ';') {
+					mode = popMode(st);
+					String cent = etag.toString();
+					etag.setLength(0);
+					if (cent.equals("lt")) {
+						sb.append('<');
+					} else if (cent.equals("gt")) {
+						sb.append('>');
+					} else if (cent.equals("amp")) {
+						sb.append('&');
+					} else if (cent.equals("quot")) {
+						sb.append('"');
+					} else if (cent.equals("apos")) {
+						sb.append('\'');
+					} else if (cent.startsWith("#")) {
+						cent = cent.substring(1);
+						if (cent.startsWith("x")) {
+							cent = cent.substring(1);
+							sb.append((char) Integer.parseInt(cent, 16));
+						} else {
+							sb.append((char) Integer.parseInt(cent));
+						}
+					} else {
+						// ignore, right now we don't need entities
+						sb.append("&" + cent + ";");
+					}
+				} else {
+					etag.append((char) c);
+				}
+				// we have just seen something like this:
+				// <foo a="b"/
+				// and are looking for the final >.
+			} else if (mode == SINGLE_TAG) {
+				if (tagName == null) {
+					tagName = sb.toString();
+				}
+				if (c != '>') {
+					throwException("Expected > for tag: <" + tagName + "/>", line, col);
+				}
+				handler.startElement(startTagOffset, -1, tagName, attrs, attrList, true);
+				handler.endElement(-1, offset, tagName);
+				if (depth == 0) {
+					handler.endDocument();
+					return;
+				}
+				sb.setLength(0);
+				attrs = new TreeMap<String, String>();
+				attrList = new ArrayList<QAttribute>();
+				tagName = null;
+				mode = popMode(st);
+				// we are processing something
+				// like this <foo ... >.  It could
+				// still be a <!-- ... --> or something.
+			} else if (mode == OPEN_TAG) {
+				if (c == '>') {
+					if (tagName == null) {
+						tagName = sb.toString();
+					}
+					sb.setLength(0);
+					depth++;
+					handler.startElement(
+							startTagOffset,
+							offset - startTagOffset,
+							tagName,
+							attrs,
+							attrList,
+							false);
+					tagName = null;
+					attrs = new TreeMap<String, String>();
+					attrList = new ArrayList<QAttribute>();
+					mode = popMode(st);
+				} else if (c == '/') {
+					mode = SINGLE_TAG;
+				} else if (c == '-' && sb.toString().equals("!-")) {
+					mode = COMMENT;
+				} else if (c == '[' && sb.toString().equals("![CDATA")) {
+					mode = CDATA;
+					sb.setLength(0);
+				} else if (c == 'E' && sb.toString().equals("!DOCTYP")) {
+					sb.setLength(0);
+					mode = DOCTYPE;
+				} else if (Character.isWhitespace((char) c)) {
+					tagName = sb.toString();
+					sb.setLength(0);
+					mode = IN_TAG;
+				} else {
+					sb.append((char) c);
+				}
+				// We are processing the quoted right-hand side
+				// of an element's attribute.
+			} else if (mode == QUOTE) {
+				if (c == quotec) {
+					rvalue = sb.toString();
+					sb.setLength(0);
+					attribute.setValue(rvalue);
+					attribute.setValueEndOffset(offset - 1);
+					attrList.add(attribute);
+					attribute = null;
+					attrs.put(lvalue, rvalue);
+					mode = IN_TAG;
+					// See section the XML spec, section 3.3.3
+					// on normalization processing.
+				} else if (" \r\n\u0009".indexOf(c) >= 0) {
+					sb.append(' ');
+				} else if (c == '&') {
+					st.push(mode);
+					mode = ENTITY;
+					etag.setLength(0);
+				} else {
+					sb.append((char) c);
+				}
+			} else if (mode == ATTRIBUTE_RVALUE) {
+				if (c == '"' || c == '\'') {
+					quotec = c;
+					attribute.setValueOffset(offset);
+					mode = QUOTE;
+				} else if (Character.isWhitespace((char) c)) {
+				} else {
+					throwException("Error in attribute processing", line, col);
+				}
+			} else if (mode == ATTRIBUTE_LVALUE) {
+				if (Character.isWhitespace((char) c)) {
+					lvalue = sb.toString();
+					sb.setLength(0);
+					attribute.setName(lvalue);
+					attribute.setNameEndOffset(offset - 1);
+					mode = ATTRIBUTE_EQUAL;
+				} else if (c == '=') {
+					lvalue = sb.toString();
+					sb.setLength(0);
+					attribute.setName(lvalue);
+					attribute.setNameEndOffset(offset - 1);
+					mode = ATTRIBUTE_RVALUE;
+				} else {
+					sb.append((char) c);
+				}
+			} else if (mode == ATTRIBUTE_EQUAL) {
+				if (c == '=') {
+					mode = ATTRIBUTE_RVALUE;
+				} else if (Character.isWhitespace((char) c)) {
+				} else {
+					throwException("Error in attribute processing", line, col);
+				}
+			} else if (mode == IN_TAG) {
+				if (c == '>') {
+					mode = popMode(st);
+					handler.startElement(
+							startTagOffset,
+							offset - startTagOffset,
+							tagName,
+							attrs,
+							attrList,
+							false);
+					depth++;
+					tagName = null;
+					attrs = new TreeMap<String, String>();
+					attrList = new ArrayList<QAttribute>();
+				} else if (c == '/') {
+					mode = SINGLE_TAG;
+				} else if (Character.isWhitespace((char) c)) {
+				} else {
+					mode = ATTRIBUTE_LVALUE;
+					attribute = new QAttribute();
+					attribute.setNameOffset(offset - 1);
+					sb.append((char) c);
+				}
+			}
+		}
+		if (mode == DONE) {
+			handler.endDocument();
+		} else {
+			throwException("missing end tag", line, col);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the state from given {@link Stack}.
-   */
-  private static int popMode(Stack<Integer> stack) {
-    if (stack.empty()) {
-      return PRE;
-    }
-    return stack.pop();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the state from given {@link Stack}.
+	 */
+	private static int popMode(Stack<Integer> stack) {
+		if (stack.empty()) {
+			return PRE;
+		}
+		return stack.pop();
+	}
 
-  /**
-   * Throws {@link Exception} with given message and location.
-   */
-  private static void throwException(String message, int line, int col) throws Exception {
-    throw new QException(message + " near line " + line + ", column " + col);
-  }
+	/**
+	 * Throws {@link Exception} with given message and location.
+	 */
+	private static void throwException(String message, int line, int col) throws Exception {
+		throw new QException(message + " near line " + line + ", column " + col);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/views/AbstractExtractableDesignView.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/views/AbstractExtractableDesignView.java
index 78ad56071..d3cbd34f8 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/views/AbstractExtractableDesignView.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/views/AbstractExtractableDesignView.java
@@ -44,214 +44,214 @@
  * @coverage core.views
  */
 public abstract class AbstractExtractableDesignView extends PageBookView {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void init(IViewSite site) throws PartInitException {
-    super.init(site);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void init(IViewSite site) throws PartInitException {
+		super.init(site);
+	}
 
-  @Override
-  public void createPartControl(Composite parent) {
-    super.createPartControl(parent);
-    hookIntoWorkbench();
-    // simulate activation for all opened editors,
-    // because it is possible that more than one of them are visible
-    parent.getDisplay().asyncExec(() -> {
-        IWorkbenchPage activePage = getSite().getWorkbenchWindow().getActivePage();
-        IWorkbenchPart activePart = activePage.getActivePart();
-        // show pages for all editors
-        IEditorReference[] editorReferences = activePage.getEditorReferences();
-        for (IEditorReference editorReference : editorReferences) {
-          IEditorPart editor = editorReference.getEditor(false);
-          if (isImportant(editor)) {
-            partActivated(editor);
-          }
-        }
-        // show page for original active part
-        partActivated(activePart);
-      });
-  }
+	@Override
+	public void createPartControl(Composite parent) {
+		super.createPartControl(parent);
+		hookIntoWorkbench();
+		// simulate activation for all opened editors,
+		// because it is possible that more than one of them are visible
+		parent.getDisplay().asyncExec(() -> {
+			IWorkbenchPage activePage = getSite().getWorkbenchWindow().getActivePage();
+			IWorkbenchPart activePart = activePage.getActivePart();
+			// show pages for all editors
+			IEditorReference[] editorReferences = activePage.getEditorReferences();
+			for (IEditorReference editorReference : editorReferences) {
+				IEditorPart editor = editorReference.getEditor(false);
+				if (isImportant(editor)) {
+					partActivated(editor);
+				}
+			}
+			// show page for original active part
+			partActivated(activePart);
+		});
+	}
 
-  /**
-   * Installs {@link IPerspectiveListener2} for intercepting closing this {@link ViewPart} before
-   * {@link #dispose()}. Problem with {@link #dispose()} is that at this time all {@link Control}'s
-   * are already disposed, including {@link IExtractableControl}'s, that we "borrowed" from
-   * {@link DesignComposite}. So, we need some early notification to return
-   * {@link IExtractableControl} back.
-   */
-  private void hookIntoWorkbench() {
-    final IWorkbenchPage page = getSite().getPage();
-    // track this view visible/hide events
-    final IPartListener2 partListener = new IPartListener2() {
-      @Override
-      public void partVisible(IWorkbenchPartReference partRef) {
-        // some "part" become visible, if this means that "editor" restored, do extract
-        if (!isEditorMaximized()) {
-          doExtract();
-        }
-      }
+	/**
+	 * Installs {@link IPerspectiveListener2} for intercepting closing this {@link ViewPart} before
+	 * {@link #dispose()}. Problem with {@link #dispose()} is that at this time all {@link Control}'s
+	 * are already disposed, including {@link IExtractableControl}'s, that we "borrowed" from
+	 * {@link DesignComposite}. So, we need some early notification to return
+	 * {@link IExtractableControl} back.
+	 */
+	private void hookIntoWorkbench() {
+		final IWorkbenchPage page = getSite().getPage();
+		// track this view visible/hide events
+		final IPartListener2 partListener = new IPartListener2() {
+			@Override
+			public void partVisible(IWorkbenchPartReference partRef) {
+				// some "part" become visible, if this means that "editor" restored, do extract
+				if (!isEditorMaximized()) {
+					doExtract();
+				}
+			}
 
-      @Override
-      public void partHidden(IWorkbenchPartReference partRef) {
-        // some "part" become hidden, if this means that "editor" maximized, do restore;
-        // do in async, because editor state updated after "partHidden" event
-        Display.getCurrent().asyncExec(() -> {
-            if (isEditorMaximized()) {
-              doRestore();
-            }
-          });
-      }
+			@Override
+			public void partHidden(IWorkbenchPartReference partRef) {
+				// some "part" become hidden, if this means that "editor" maximized, do restore;
+				// do in async, because editor state updated after "partHidden" event
+				Display.getCurrent().asyncExec(() -> {
+					if (isEditorMaximized()) {
+						doRestore();
+					}
+				});
+			}
 
-      @Override
-      public void partClosed(IWorkbenchPartReference partRef) {
-        // if this "part" closed, do restore
-        if (partRef.getPart(false) == AbstractExtractableDesignView.this) {
-          doRestore();
-        }
-      }
+			@Override
+			public void partClosed(IWorkbenchPartReference partRef) {
+				// if this "part" closed, do restore
+				if (partRef.getPart(false) == AbstractExtractableDesignView.this) {
+					doRestore();
+				}
+			}
 
-      ////////////////////////////////////////////////////////////////////////////
-      //
-      // Utils
-      //
-      ////////////////////////////////////////////////////////////////////////////
-      private boolean isEditorMaximized() {
-        IEditorReference[] editorReferences = page.getEditorReferences();
-        for (IEditorReference editorReference : editorReferences) {
-          if (page.getPartState(editorReference) == IWorkbenchPage.STATE_MAXIMIZED) {
-            return true;
-          }
-        }
-        return false;
-      }
+			////////////////////////////////////////////////////////////////////////////
+			//
+			// Utils
+			//
+			////////////////////////////////////////////////////////////////////////////
+			private boolean isEditorMaximized() {
+				IEditorReference[] editorReferences = page.getEditorReferences();
+				for (IEditorReference editorReference : editorReferences) {
+					if (page.getPartState(editorReference) == IWorkbenchPage.STATE_MAXIMIZED) {
+						return true;
+					}
+				}
+				return false;
+			}
 
-      ////////////////////////////////////////////////////////////////////////////
-      //
-      // Unused
-      //
-      ////////////////////////////////////////////////////////////////////////////
-      @Override
-      public void partOpened(IWorkbenchPartReference partRef) {
-      }
+			////////////////////////////////////////////////////////////////////////////
+			//
+			// Unused
+			//
+			////////////////////////////////////////////////////////////////////////////
+			@Override
+			public void partOpened(IWorkbenchPartReference partRef) {
+			}
 
-      @Override
-      public void partActivated(IWorkbenchPartReference partRef) {
-      }
+			@Override
+			public void partActivated(IWorkbenchPartReference partRef) {
+			}
 
-      @Override
-      public void partDeactivated(IWorkbenchPartReference partRef) {
-      }
+			@Override
+			public void partDeactivated(IWorkbenchPartReference partRef) {
+			}
 
-      @Override
-      public void partBroughtToTop(IWorkbenchPartReference partRef) {
-      }
+			@Override
+			public void partBroughtToTop(IWorkbenchPartReference partRef) {
+			}
 
-      @Override
-      public void partInputChanged(IWorkbenchPartReference partRef) {
-      }
-    };
-    page.addPartListener(partListener);
-    // remove perspective listener on dispose
-    getPageBook().addDisposeListener(e -> page.removePartListener(partListener));
-  }
+			@Override
+			public void partInputChanged(IWorkbenchPartReference partRef) {
+			}
+		};
+		page.addPartListener(partListener);
+		// remove perspective listener on dispose
+		getPageBook().addDisposeListener(e -> page.removePartListener(partListener));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Extract/restore
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Extract all registered {@link IExtractableControl}'s.
-   */
-  private void doExtract() {
-    for (IExtractableControl extractableControl : m_extractableControls.values()) {
-      extractableControl.extract(getPageBook());
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Extract/restore
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Extract all registered {@link IExtractableControl}'s.
+	 */
+	private void doExtract() {
+		for (IExtractableControl extractableControl : m_extractableControls.values()) {
+			extractableControl.extract(getPageBook());
+		}
+	}
 
-  /**
-   * Restores all registered {@link IExtractableControl}'s.
-   */
-  private void doRestore() {
-    for (IExtractableControl extractableControl : m_extractableControls.values()) {
-      extractableControl.restore();
-    }
-  }
+	/**
+	 * Restores all registered {@link IExtractableControl}'s.
+	 */
+	private void doRestore() {
+		for (IExtractableControl extractableControl : m_extractableControls.values()) {
+			extractableControl.restore();
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // PageBookView
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final Map<IWorkbenchPart, IExtractableControl> m_extractableControls = new HashMap<>();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// PageBookView
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final Map<IWorkbenchPart, IExtractableControl> m_extractableControls = new HashMap<>();
 
-  @Override
-  protected IPage createDefaultPage(PageBook book) {
-    MessagePage page = new MessagePage();
-    page.createControl(getPageBook());
-    initPage(page);
-    return page;
-  }
+	@Override
+	protected IPage createDefaultPage(PageBook book) {
+		MessagePage page = new MessagePage();
+		page.createControl(getPageBook());
+		initPage(page);
+		return page;
+	}
 
-  @Override
-  protected PageRec doCreatePage(final IWorkbenchPart part) {
-    // prepare extractable
-    final IExtractableControl extractableControl;
-    {
-      IDesignCompositeProvider provider = (IDesignCompositeProvider) part;
-      DesignComposite designComposite = provider.getDesignComposite();
-      extractableControl = getExtractableControl(designComposite);
-      m_extractableControls.put(part, extractableControl);
-    }
-    // create page
-    final Control extractedControl = extractableControl.getControl();
-    IPageBookViewPage page = new Page() {
-      @Override
-      public void createControl(Composite parent) {
-        extractableControl.extract(parent);
-      }
+	@Override
+	protected PageRec doCreatePage(final IWorkbenchPart part) {
+		// prepare extractable
+		final IExtractableControl extractableControl;
+		{
+			IDesignCompositeProvider provider = (IDesignCompositeProvider) part;
+			DesignComposite designComposite = provider.getDesignComposite();
+			extractableControl = getExtractableControl(designComposite);
+			m_extractableControls.put(part, extractableControl);
+		}
+		// create page
+		final Control extractedControl = extractableControl.getControl();
+		IPageBookViewPage page = new Page() {
+			@Override
+			public void createControl(Composite parent) {
+				extractableControl.extract(parent);
+			}
 
-      @Override
-      public Control getControl() {
-        return extractedControl.getParent() == getPageBook() ? extractedControl : null;
-      }
+			@Override
+			public Control getControl() {
+				return extractedControl.getParent() == getPageBook() ? extractedControl : null;
+			}
 
-      @Override
-      public void setFocus() {
-        extractedControl.setFocus();
-      }
-    };
-    initPage(page);
-    page.createControl(getPageBook());
-    return new PageRec(part, page);
-  }
+			@Override
+			public void setFocus() {
+				extractedControl.setFocus();
+			}
+		};
+		initPage(page);
+		page.createControl(getPageBook());
+		return new PageRec(part, page);
+	}
 
-  @Override
-  protected void doDestroyPage(IWorkbenchPart part, PageRec pageRecord) {
-    m_extractableControls.remove(part);
-  }
+	@Override
+	protected void doDestroyPage(IWorkbenchPart part, PageRec pageRecord) {
+		m_extractableControls.remove(part);
+	}
 
-  @Override
-  protected IWorkbenchPart getBootstrapPart() {
-    return getSite().getPage().getActiveEditor();
-  }
+	@Override
+	protected IWorkbenchPart getBootstrapPart() {
+		return getSite().getPage().getActiveEditor();
+	}
 
-  @Override
-  protected boolean isImportant(IWorkbenchPart part) {
-    return part instanceof IDesignCompositeProvider;
-  }
+	@Override
+	protected boolean isImportant(IWorkbenchPart part) {
+		return part instanceof IDesignCompositeProvider;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Implementation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link IExtractableControl} to extract from {@link DesignComposite}.
-   */
-  protected abstract IExtractableControl getExtractableControl(DesignComposite designComposite);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Implementation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link IExtractableControl} to extract from {@link DesignComposite}.
+	 */
+	protected abstract IExtractableControl getExtractableControl(DesignComposite designComposite);
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/views/IDesignCompositeProvider.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/views/IDesignCompositeProvider.java
index 8af29576c..9bca154a5 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/views/IDesignCompositeProvider.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/views/IDesignCompositeProvider.java
@@ -19,5 +19,5 @@
  * @coverage core.views
  */
 public interface IDesignCompositeProvider {
-  DesignComposite getDesignComposite();
+	DesignComposite getDesignComposite();
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/views/PaletteView.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/views/PaletteView.java
index b78d19d9a..8ba34f86f 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/views/PaletteView.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/views/PaletteView.java
@@ -22,15 +22,15 @@
  * @coverage core.views
  */
 public final class PaletteView extends AbstractExtractableDesignView {
-  public static final String ID = "org.eclipse.wb.core.PaletteView";
+	public static final String ID = "org.eclipse.wb.core.PaletteView";
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AbstractExtractableDesignView
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected IExtractableControl getExtractableControl(DesignComposite designComposite) {
-    return designComposite.getExtractablePalette();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AbstractExtractableDesignView
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected IExtractableControl getExtractableControl(DesignComposite designComposite) {
+		return designComposite.getExtractablePalette();
+	}
 }
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/views/StructureView.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/views/StructureView.java
index 84217f752..9382892ad 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/views/StructureView.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/views/StructureView.java
@@ -22,15 +22,15 @@
  * @coverage core.views
  */
 public final class StructureView extends AbstractExtractableDesignView {
-  public static final String ID = "org.eclipse.wb.core.StructureView";
+	public static final String ID = "org.eclipse.wb.core.StructureView";
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AbstractExtractableDesignView
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected IExtractableControl getExtractableControl(DesignComposite designComposite) {
-    return designComposite.getExtractableComponents();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AbstractExtractableDesignView
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected IExtractableControl getExtractableControl(DesignComposite designComposite) {
+		return designComposite.getExtractableComponents();
+	}
 }
diff --git a/org.eclipse.wb.dev/src/org/eclipse/wb/internal/dev/Activator.java b/org.eclipse.wb.dev/src/org/eclipse/wb/internal/dev/Activator.java
index bf331fa2e..5a52e7bd2 100644
--- a/org.eclipse.wb.dev/src/org/eclipse/wb/internal/dev/Activator.java
+++ b/org.eclipse.wb.dev/src/org/eclipse/wb/internal/dev/Activator.java
@@ -21,85 +21,85 @@
  * The activator class controls the plug-in life cycle.
  */
 public class Activator extends AbstractUIPlugin {
-  public static final String PLUGIN_ID = "org.eclipse.wb.dev";
-  private static Activator plugin;
+	public static final String PLUGIN_ID = "org.eclipse.wb.dev";
+	private static Activator plugin;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Life cycle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void start(BundleContext context) throws Exception {
-    super.start(context);
-    plugin = this;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Life cycle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+		plugin = this;
+	}
 
-  @Override
-  public void stop(BundleContext context) throws Exception {
-    plugin = null;
-    super.stop(context);
-  }
+	@Override
+	public void stop(BundleContext context) throws Exception {
+		plugin = null;
+		super.stop(context);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static Activator getDefault() {
-    return plugin;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static Activator getDefault() {
+		return plugin;
+	}
 
-  public static ImageDescriptor getImageDescriptor(String path) {
-    return imageDescriptorFromPlugin(PLUGIN_ID, path);
-  }
+	public static ImageDescriptor getImageDescriptor(String path) {
+		return imageDescriptorFromPlugin(PLUGIN_ID, path);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Logging
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Logs given {@link IStatus} into Eclipse .log.
-   */
-  public static void log(IStatus status) {
-    getDefault().getLog().log(status);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Logging
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Logs given {@link IStatus} into Eclipse .log.
+	 */
+	public static void log(IStatus status) {
+		getDefault().getLog().log(status);
+	}
 
-  /**
-   * Logs {@link IStatus} with given message into Eclipse .log.
-   */
-  public static void log(String message) {
-    log(new Status(IStatus.INFO, PLUGIN_ID, IStatus.INFO, message, null));
-  }
+	/**
+	 * Logs {@link IStatus} with given message into Eclipse .log.
+	 */
+	public static void log(String message) {
+		log(new Status(IStatus.INFO, PLUGIN_ID, IStatus.INFO, message, null));
+	}
 
-  /**
-   * Logs {@link IStatus} with given exception into Eclipse .log.
-   */
-  public static void log(Throwable e) {
-    String message = e.getMessage();
-    if (message == null) {
-      message = e.getClass().getName();
-    }
-    log("Designer Internals: " + message, e);
-  }
+	/**
+	 * Logs {@link IStatus} with given exception into Eclipse .log.
+	 */
+	public static void log(Throwable e) {
+		String message = e.getMessage();
+		if (message == null) {
+			message = e.getClass().getName();
+		}
+		log("Designer Internals: " + message, e);
+	}
 
-  /**
-   * Logs {@link IStatus} with given message and exception into Eclipse .log.
-   */
-  public static void log(String message, Throwable e) {
-    log(createStatus(message, e));
-  }
+	/**
+	 * Logs {@link IStatus} with given message and exception into Eclipse .log.
+	 */
+	public static void log(String message, Throwable e) {
+		log(createStatus(message, e));
+	}
 
-  /**
-   * Creates {@link IStatus} for given message and exception.
-   */
-  private static Status createStatus(String message, Throwable e) {
-    return new Status(IStatus.ERROR, PLUGIN_ID, IStatus.ERROR, message, e) {
-      @Override
-      public boolean isMultiStatus() {
-        return true;
-      }
-    };
-  }
+	/**
+	 * Creates {@link IStatus} for given message and exception.
+	 */
+	private static Status createStatus(String message, Throwable e) {
+		return new Status(IStatus.ERROR, PLUGIN_ID, IStatus.ERROR, message, e) {
+			@Override
+			public boolean isMultiStatus() {
+				return true;
+			}
+		};
+	}
 }
diff --git a/org.eclipse.wb.dev/src/org/eclipse/wb/internal/dev/builder/BuilderHandler.java b/org.eclipse.wb.dev/src/org/eclipse/wb/internal/dev/builder/BuilderHandler.java
index 79e0248a3..d7edbef02 100644
--- a/org.eclipse.wb.dev/src/org/eclipse/wb/internal/dev/builder/BuilderHandler.java
+++ b/org.eclipse.wb.dev/src/org/eclipse/wb/internal/dev/builder/BuilderHandler.java
@@ -21,7 +21,7 @@
  * @author scheglov_ke
  */
 public interface BuilderHandler {
-  void fullBuild(IProject project, IProgressMonitor monitor) throws CoreException;
+	void fullBuild(IProject project, IProgressMonitor monitor) throws CoreException;
 
-  void incrementalBuild(IResourceDelta delta, IProgressMonitor monitor) throws CoreException;
+	void incrementalBuild(IResourceDelta delta, IProgressMonitor monitor) throws CoreException;
 }
diff --git a/org.eclipse.wb.dev/src/org/eclipse/wb/internal/dev/builder/ComponentDescriptionValidatorHandler.java b/org.eclipse.wb.dev/src/org/eclipse/wb/internal/dev/builder/ComponentDescriptionValidatorHandler.java
index c3108a052..8939c51ad 100644
--- a/org.eclipse.wb.dev/src/org/eclipse/wb/internal/dev/builder/ComponentDescriptionValidatorHandler.java
+++ b/org.eclipse.wb.dev/src/org/eclipse/wb/internal/dev/builder/ComponentDescriptionValidatorHandler.java
@@ -43,186 +43,186 @@
  * @author scheglov_ke
  */
 public final class ComponentDescriptionValidatorHandler implements BuilderHandler {
-  private static final String MARKER_TYPE = "org.eclipse.wb.dev.wbProblem";
-  private static final String WBP_COMPONENT_SCHEMA = "org.eclipse.wb.core/schema/wbp-component.xsd";
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Builder
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void fullBuild(IProject project, IProgressMonitor monitor) throws CoreException {
-    project.deleteMarkers(MARKER_TYPE, false, IResource.DEPTH_INFINITE);
-    project.accept(new ValidatorResourceVisitor());
-  }
-
-  @Override
-  public void incrementalBuild(IResourceDelta delta, IProgressMonitor monitor) throws CoreException {
-    delta.accept(new ValidatorDeltaVisitor());
-  }
-
-  private void workspaceBuild(IProject project, IProgressMonitor monitor) throws CoreException {
-    project.getWorkspace().getRoot().accept(new ValidatorResourceVisitor());
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Builder visitors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private class ValidatorDeltaVisitor implements IResourceDeltaVisitor {
-    @Override
-    public boolean visit(IResourceDelta delta) throws CoreException {
-      IResource resource = delta.getResource();
-      switch (delta.getKind()) {
-        case IResourceDelta.ADDED :
-          checkXML(resource);
-          break;
-        case IResourceDelta.REMOVED :
-          break;
-        case IResourceDelta.CHANGED :
-          checkXML(resource);
-          break;
-      }
-      // return true to continue visiting children.
-      return true;
-    }
-  }
-  private class ValidatorResourceVisitor implements IResourceVisitor {
-    @Override
-    public boolean visit(IResource resource) {
-      checkXML(resource);
-      return true;
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // XML validation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static boolean m_considerXSD = true;
-
-  private void checkXML(IResource resource) {
-    String resourcePathString = resource.getFullPath().toPortableString();
-    if (resource instanceof IFile && resourcePathString.endsWith(".xsd") && m_considerXSD) {
-      try {
-        m_considerXSD = false;
-        workspaceBuild(resource.getProject(), null);
-      } catch (Throwable e) {
-        Activator.log(e);
-      } finally {
-        m_considerXSD = true;
-      }
-    }
-    if (resource instanceof IFile && resourcePathString.endsWith(".wbp-component.xml")) {
-      IFile file = (IFile) resource;
-      if (resourcePathString.contains("/bin/")) {
-        return;
-      }
-      deleteMarkers(file);
-      try {
-        validateComponentDescription(file);
-      } catch (Throwable e) {
-        Activator.log(e);
-      }
-    }
-  }
-
-  private void validateComponentDescription(IFile file) throws SAXException, CoreException,
-      IOException {
-    // prepare Schema
-    Schema schema;
-    {
-      SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
-      IFile schemaFile =
-          ResourcesPlugin.getWorkspace().getRoot().getFile(new Path(WBP_COMPONENT_SCHEMA));
-      if (!schemaFile.exists()) {
-        return;
-      }
-      schema = factory.newSchema(new StreamSource(schemaFile.getContents(true)));
-    }
-    // prepare Validator
-    Validator validator = schema.newValidator();
-    validator.setErrorHandler(new XmlErrorHandler(file));
-    // do validate
-    InputStream contents = file.getContents(true);
-    try {
-      validator.validate(new StreamSource(contents));
-    } finally {
-      contents.close();
-    }
-  }
-
-  private void addMarker(IFile file, String message, int lineNumber, int severity) {
-    try {
-      IMarker marker = file.createMarker(MARKER_TYPE);
-      marker.setAttribute(IMarker.MESSAGE, message);
-      marker.setAttribute(IMarker.SEVERITY, severity);
-      if (lineNumber == -1) {
-        lineNumber = 1;
-      }
-      marker.setAttribute(IMarker.LINE_NUMBER, lineNumber);
-    } catch (CoreException e) {
-    }
-  }
-
-  private void deleteMarkers(IFile file) {
-    try {
-      file.deleteMarkers(MARKER_TYPE, false, IResource.DEPTH_ZERO);
-    } catch (CoreException ce) {
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // XMLErrorHandler
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private class XmlErrorHandler implements ErrorHandler {
-    private final IFile file;
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public XmlErrorHandler(IFile file) {
-      this.file = file;
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // ErrorHandler
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public void error(SAXParseException exception) throws SAXException {
-      addMarker(exception, IMarker.SEVERITY_ERROR);
-    }
-
-    @Override
-    public void fatalError(SAXParseException exception) throws SAXException {
-      addMarker(exception, IMarker.SEVERITY_ERROR);
-    }
-
-    @Override
-    public void warning(SAXParseException exception) throws SAXException {
-      addMarker(exception, IMarker.SEVERITY_WARNING);
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Utils
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    private void addMarker(SAXParseException e, int severity) {
-      ComponentDescriptionValidatorHandler.this.addMarker(
-          file,
-          e.getMessage(),
-          e.getLineNumber(),
-          severity);
-    }
-  }
+	private static final String MARKER_TYPE = "org.eclipse.wb.dev.wbProblem";
+	private static final String WBP_COMPONENT_SCHEMA = "org.eclipse.wb.core/schema/wbp-component.xsd";
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Builder
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void fullBuild(IProject project, IProgressMonitor monitor) throws CoreException {
+		project.deleteMarkers(MARKER_TYPE, false, IResource.DEPTH_INFINITE);
+		project.accept(new ValidatorResourceVisitor());
+	}
+
+	@Override
+	public void incrementalBuild(IResourceDelta delta, IProgressMonitor monitor) throws CoreException {
+		delta.accept(new ValidatorDeltaVisitor());
+	}
+
+	private void workspaceBuild(IProject project, IProgressMonitor monitor) throws CoreException {
+		project.getWorkspace().getRoot().accept(new ValidatorResourceVisitor());
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Builder visitors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private class ValidatorDeltaVisitor implements IResourceDeltaVisitor {
+		@Override
+		public boolean visit(IResourceDelta delta) throws CoreException {
+			IResource resource = delta.getResource();
+			switch (delta.getKind()) {
+			case IResourceDelta.ADDED :
+				checkXML(resource);
+				break;
+			case IResourceDelta.REMOVED :
+				break;
+			case IResourceDelta.CHANGED :
+				checkXML(resource);
+				break;
+			}
+			// return true to continue visiting children.
+			return true;
+		}
+	}
+	private class ValidatorResourceVisitor implements IResourceVisitor {
+		@Override
+		public boolean visit(IResource resource) {
+			checkXML(resource);
+			return true;
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// XML validation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static boolean m_considerXSD = true;
+
+	private void checkXML(IResource resource) {
+		String resourcePathString = resource.getFullPath().toPortableString();
+		if (resource instanceof IFile && resourcePathString.endsWith(".xsd") && m_considerXSD) {
+			try {
+				m_considerXSD = false;
+				workspaceBuild(resource.getProject(), null);
+			} catch (Throwable e) {
+				Activator.log(e);
+			} finally {
+				m_considerXSD = true;
+			}
+		}
+		if (resource instanceof IFile && resourcePathString.endsWith(".wbp-component.xml")) {
+			IFile file = (IFile) resource;
+			if (resourcePathString.contains("/bin/")) {
+				return;
+			}
+			deleteMarkers(file);
+			try {
+				validateComponentDescription(file);
+			} catch (Throwable e) {
+				Activator.log(e);
+			}
+		}
+	}
+
+	private void validateComponentDescription(IFile file) throws SAXException, CoreException,
+	IOException {
+		// prepare Schema
+		Schema schema;
+		{
+			SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
+			IFile schemaFile =
+					ResourcesPlugin.getWorkspace().getRoot().getFile(new Path(WBP_COMPONENT_SCHEMA));
+			if (!schemaFile.exists()) {
+				return;
+			}
+			schema = factory.newSchema(new StreamSource(schemaFile.getContents(true)));
+		}
+		// prepare Validator
+		Validator validator = schema.newValidator();
+		validator.setErrorHandler(new XmlErrorHandler(file));
+		// do validate
+		InputStream contents = file.getContents(true);
+		try {
+			validator.validate(new StreamSource(contents));
+		} finally {
+			contents.close();
+		}
+	}
+
+	private void addMarker(IFile file, String message, int lineNumber, int severity) {
+		try {
+			IMarker marker = file.createMarker(MARKER_TYPE);
+			marker.setAttribute(IMarker.MESSAGE, message);
+			marker.setAttribute(IMarker.SEVERITY, severity);
+			if (lineNumber == -1) {
+				lineNumber = 1;
+			}
+			marker.setAttribute(IMarker.LINE_NUMBER, lineNumber);
+		} catch (CoreException e) {
+		}
+	}
+
+	private void deleteMarkers(IFile file) {
+		try {
+			file.deleteMarkers(MARKER_TYPE, false, IResource.DEPTH_ZERO);
+		} catch (CoreException ce) {
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// XMLErrorHandler
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private class XmlErrorHandler implements ErrorHandler {
+		private final IFile file;
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public XmlErrorHandler(IFile file) {
+			this.file = file;
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// ErrorHandler
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public void error(SAXParseException exception) throws SAXException {
+			addMarker(exception, IMarker.SEVERITY_ERROR);
+		}
+
+		@Override
+		public void fatalError(SAXParseException exception) throws SAXException {
+			addMarker(exception, IMarker.SEVERITY_ERROR);
+		}
+
+		@Override
+		public void warning(SAXParseException exception) throws SAXException {
+			addMarker(exception, IMarker.SEVERITY_WARNING);
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Utils
+		//
+		////////////////////////////////////////////////////////////////////////////
+		private void addMarker(SAXParseException e, int severity) {
+			ComponentDescriptionValidatorHandler.this.addMarker(
+					file,
+					e.getMessage(),
+					e.getLineNumber(),
+					severity);
+		}
+	}
 }
diff --git a/org.eclipse.wb.dev/src/org/eclipse/wb/internal/dev/builder/MetaDataModificationHandler.java b/org.eclipse.wb.dev/src/org/eclipse/wb/internal/dev/builder/MetaDataModificationHandler.java
index a82d17569..e4da3476c 100644
--- a/org.eclipse.wb.dev/src/org/eclipse/wb/internal/dev/builder/MetaDataModificationHandler.java
+++ b/org.eclipse.wb.dev/src/org/eclipse/wb/internal/dev/builder/MetaDataModificationHandler.java
@@ -44,204 +44,204 @@
  * @author scheglov_ke
  */
 public final class MetaDataModificationHandler implements BuilderHandler {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Builder
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void incrementalBuild(IResourceDelta delta, IProgressMonitor monitor) throws CoreException {
-    final AtomicBoolean done = new AtomicBoolean();
-    delta.accept(new IResourceDeltaVisitor() {
-      @Override
-      public boolean visit(IResourceDelta delta) throws CoreException {
-        if (!done.get()) {
-          IResource resource = delta.getResource();
-          boolean processed = processResource(resource);
-          done.set(processed);
-        }
-        return true;
-      }
-    });
-  }
-
-  @Override
-  public void fullBuild(IProject project, IProgressMonitor monitor) throws CoreException {
-    final AtomicBoolean done = new AtomicBoolean();
-    project.accept(new IResourceVisitor() {
-      @Override
-      public boolean visit(IResource resource) throws CoreException {
-        if (!done.get()) {
-          boolean processed = processResource(resource);
-          done.set(processed);
-        }
-        return true;
-      }
-    });
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IResource processing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if given {@link IResource} was interesting and caused check sum
-   *         calculation for full {@link IProject}.
-   */
-  private static boolean processResource(IResource resource) {
-    if (isInterestingResource(resource)) {
-      IFile presentationsFile =
-          resource.getProject().getFile(new Path("wbp-meta/.wbp-cache-presentations"));
-      if (presentationsFile.exists()) {
-        try {
-          String oldCheckSum = getCheckSum(presentationsFile);
-          String newCheckSum = getMetaDataCheckSum(resource.getProject());
-          if (!newCheckSum.equals(oldCheckSum)) {
-            setFileContents(presentationsFile, newCheckSum);
-          }
-        } catch (Throwable e) {
-          Activator.log(e);
-        }
-      }
-      return true;
-    }
-    return false;
-  }
-
-  private static boolean isInterestingResource(IResource resource) {
-    if (resource instanceof IFile) {
-      String path = resource.getFullPath().toPortableString().toLowerCase();
-      return path.contains("/wbp-meta/")
-          && (path.endsWith(".wbp-component.xml") || path.endsWith(".png") || path.endsWith(".gif"));
-    }
-    return false;
-  }
-
-  private static String getMetaDataCheckSum(IProject project) throws Exception {
-    MessageDigest algorithm = MessageDigest.getInstance("MD5");
-    // add files
-    SortedSet<IFile> files = getMetaDataFiles(project);
-    for (IFile file : files) {
-      byte[] bytes = getByteArray(file);
-      algorithm.update(bytes);
-    }
-    // return check sum as hex String
-    return getHexDigest(algorithm);
-  }
-
-  private static byte[] getByteArray(IFile file) throws Exception {
-    InputStream inputStream = file.getContents(true);
-    try {
-      if (isTextFile(file)) {
-        return getTextFileBytes(inputStream);
-      }
-      return IOUtils.toByteArray(inputStream);
-    } catch (Throwable e) {
-      return new byte[0];
-    } finally {
-      IOUtils.closeQuietly(inputStream);
-    }
-  }
-
-  private static byte[] getTextFileBytes(InputStream inputStream) throws IOException {
-    String content = IOUtils.toString(inputStream);
-    String normalizedContent = content.replaceAll("\r\n", "\n");
-    return normalizedContent.getBytes();
-  }
-
-  private static boolean isTextFile(IFile file) throws Exception {
-    IContentDescription contentDescription = file.getContentDescription();
-    if (contentDescription != null) {
-      IContentType contentType = contentDescription.getContentType();
-      while (contentType != null) {
-        if ("org.eclipse.core.runtime.text".equals(contentType.getId())) {
-          return true;
-        }
-        contentType = contentType.getBaseType();
-      }
-    }
-    return false;
-  }
-
-  /**
-   * @return all interesting files in "wbp-meta", sorted by path.
-   */
-  private static SortedSet<IFile> getMetaDataFiles(IProject project) throws CoreException {
-    IFolder metaDataFolder = project.getFolder("wbp-meta");
-    metaDataFolder.refreshLocal(IResource.DEPTH_INFINITE, null);
-    final SortedSet<IFile> files = new TreeSet<IFile>(new Comparator<IFile>() {
-      @Override
-      public int compare(IFile o1, IFile o2) {
-        String location1 = getLocation(o1);
-        String location2 = getLocation(o2);
-        return location1.compareTo(location2);
-      }
-
-      private String getLocation(IFile file) {
-        return file.getFullPath().toPortableString().toLowerCase();
-      }
-    });
-    metaDataFolder.accept(new IResourceVisitor() {
-      @Override
-      public boolean visit(IResource resource) throws CoreException {
-        if (isInterestingResource(resource)) {
-          IFile file = (IFile) resource;
-          files.add(file);
-        }
-        return true;
-      }
-    });
-    return files;
-  }
-
-  private static String getHexDigest(final MessageDigest algorithm) {
-    StringBuffer hexString = new StringBuffer();
-    for (byte b : algorithm.digest()) {
-      String s = Integer.toHexString(0xFF & b);
-      if (s.length() == 1) {
-        hexString.append("0");
-      }
-      hexString.append(s);
-    }
-    return hexString.toString();
-  }
-
-  private static String getCheckSum(IFile presentationsFile) throws Exception {
-    BufferedReader br =
-        new BufferedReader(new InputStreamReader(presentationsFile.getContents(true)));
-    try {
-      return br.readLine();
-    } finally {
-      IOUtils.closeQuietly(br);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Eclipse IFile utilities
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Creates or modifies given {@link IFile} with given {@link InputStream}.
-   */
-  public static void setFileContents(IFile file, InputStream inputStream) throws CoreException {
-    try {
-      if (file.exists()) {
-        file.setContents(inputStream, false, true, null);
-      } else {
-        file.create(inputStream, false, null);
-      }
-    } finally {
-      IOUtils.closeQuietly(inputStream);
-    }
-  }
-
-  /**
-   * Creates or modifies given {@link IFile} with given {@link String}.
-   */
-  public static void setFileContents(IFile file, String contents) throws CoreException {
-    InputStream inputStream = new ByteArrayInputStream(contents.getBytes());
-    setFileContents(file, inputStream);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Builder
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void incrementalBuild(IResourceDelta delta, IProgressMonitor monitor) throws CoreException {
+		final AtomicBoolean done = new AtomicBoolean();
+		delta.accept(new IResourceDeltaVisitor() {
+			@Override
+			public boolean visit(IResourceDelta delta) throws CoreException {
+				if (!done.get()) {
+					IResource resource = delta.getResource();
+					boolean processed = processResource(resource);
+					done.set(processed);
+				}
+				return true;
+			}
+		});
+	}
+
+	@Override
+	public void fullBuild(IProject project, IProgressMonitor monitor) throws CoreException {
+		final AtomicBoolean done = new AtomicBoolean();
+		project.accept(new IResourceVisitor() {
+			@Override
+			public boolean visit(IResource resource) throws CoreException {
+				if (!done.get()) {
+					boolean processed = processResource(resource);
+					done.set(processed);
+				}
+				return true;
+			}
+		});
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IResource processing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if given {@link IResource} was interesting and caused check sum
+	 *         calculation for full {@link IProject}.
+	 */
+	private static boolean processResource(IResource resource) {
+		if (isInterestingResource(resource)) {
+			IFile presentationsFile =
+					resource.getProject().getFile(new Path("wbp-meta/.wbp-cache-presentations"));
+			if (presentationsFile.exists()) {
+				try {
+					String oldCheckSum = getCheckSum(presentationsFile);
+					String newCheckSum = getMetaDataCheckSum(resource.getProject());
+					if (!newCheckSum.equals(oldCheckSum)) {
+						setFileContents(presentationsFile, newCheckSum);
+					}
+				} catch (Throwable e) {
+					Activator.log(e);
+				}
+			}
+			return true;
+		}
+		return false;
+	}
+
+	private static boolean isInterestingResource(IResource resource) {
+		if (resource instanceof IFile) {
+			String path = resource.getFullPath().toPortableString().toLowerCase();
+			return path.contains("/wbp-meta/")
+					&& (path.endsWith(".wbp-component.xml") || path.endsWith(".png") || path.endsWith(".gif"));
+		}
+		return false;
+	}
+
+	private static String getMetaDataCheckSum(IProject project) throws Exception {
+		MessageDigest algorithm = MessageDigest.getInstance("MD5");
+		// add files
+		SortedSet<IFile> files = getMetaDataFiles(project);
+		for (IFile file : files) {
+			byte[] bytes = getByteArray(file);
+			algorithm.update(bytes);
+		}
+		// return check sum as hex String
+		return getHexDigest(algorithm);
+	}
+
+	private static byte[] getByteArray(IFile file) throws Exception {
+		InputStream inputStream = file.getContents(true);
+		try {
+			if (isTextFile(file)) {
+				return getTextFileBytes(inputStream);
+			}
+			return IOUtils.toByteArray(inputStream);
+		} catch (Throwable e) {
+			return new byte[0];
+		} finally {
+			IOUtils.closeQuietly(inputStream);
+		}
+	}
+
+	private static byte[] getTextFileBytes(InputStream inputStream) throws IOException {
+		String content = IOUtils.toString(inputStream);
+		String normalizedContent = content.replaceAll("\r\n", "\n");
+		return normalizedContent.getBytes();
+	}
+
+	private static boolean isTextFile(IFile file) throws Exception {
+		IContentDescription contentDescription = file.getContentDescription();
+		if (contentDescription != null) {
+			IContentType contentType = contentDescription.getContentType();
+			while (contentType != null) {
+				if ("org.eclipse.core.runtime.text".equals(contentType.getId())) {
+					return true;
+				}
+				contentType = contentType.getBaseType();
+			}
+		}
+		return false;
+	}
+
+	/**
+	 * @return all interesting files in "wbp-meta", sorted by path.
+	 */
+	private static SortedSet<IFile> getMetaDataFiles(IProject project) throws CoreException {
+		IFolder metaDataFolder = project.getFolder("wbp-meta");
+		metaDataFolder.refreshLocal(IResource.DEPTH_INFINITE, null);
+		final SortedSet<IFile> files = new TreeSet<IFile>(new Comparator<IFile>() {
+			@Override
+			public int compare(IFile o1, IFile o2) {
+				String location1 = getLocation(o1);
+				String location2 = getLocation(o2);
+				return location1.compareTo(location2);
+			}
+
+			private String getLocation(IFile file) {
+				return file.getFullPath().toPortableString().toLowerCase();
+			}
+		});
+		metaDataFolder.accept(new IResourceVisitor() {
+			@Override
+			public boolean visit(IResource resource) throws CoreException {
+				if (isInterestingResource(resource)) {
+					IFile file = (IFile) resource;
+					files.add(file);
+				}
+				return true;
+			}
+		});
+		return files;
+	}
+
+	private static String getHexDigest(final MessageDigest algorithm) {
+		StringBuffer hexString = new StringBuffer();
+		for (byte b : algorithm.digest()) {
+			String s = Integer.toHexString(0xFF & b);
+			if (s.length() == 1) {
+				hexString.append("0");
+			}
+			hexString.append(s);
+		}
+		return hexString.toString();
+	}
+
+	private static String getCheckSum(IFile presentationsFile) throws Exception {
+		BufferedReader br =
+				new BufferedReader(new InputStreamReader(presentationsFile.getContents(true)));
+		try {
+			return br.readLine();
+		} finally {
+			IOUtils.closeQuietly(br);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Eclipse IFile utilities
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Creates or modifies given {@link IFile} with given {@link InputStream}.
+	 */
+	public static void setFileContents(IFile file, InputStream inputStream) throws CoreException {
+		try {
+			if (file.exists()) {
+				file.setContents(inputStream, false, true, null);
+			} else {
+				file.create(inputStream, false, null);
+			}
+		} finally {
+			IOUtils.closeQuietly(inputStream);
+		}
+	}
+
+	/**
+	 * Creates or modifies given {@link IFile} with given {@link String}.
+	 */
+	public static void setFileContents(IFile file, String contents) throws CoreException {
+		InputStream inputStream = new ByteArrayInputStream(contents.getBytes());
+		setFileContents(file, inputStream);
+	}
 }
diff --git a/org.eclipse.wb.dev/src/org/eclipse/wb/internal/dev/builder/WbBuilder.java b/org.eclipse.wb.dev/src/org/eclipse/wb/internal/dev/builder/WbBuilder.java
index d75f4180a..87f399d9c 100644
--- a/org.eclipse.wb.dev/src/org/eclipse/wb/internal/dev/builder/WbBuilder.java
+++ b/org.eclipse.wb.dev/src/org/eclipse/wb/internal/dev/builder/WbBuilder.java
@@ -27,51 +27,51 @@
  * @author scheglov_ke
  */
 public final class WbBuilder extends IncrementalProjectBuilder {
-  public static final String ID = "org.eclipse.wb.dev.wbBuilder";
-  private final List<BuilderHandler> m_handlers = new ArrayList<BuilderHandler>();
+	public static final String ID = "org.eclipse.wb.dev.wbBuilder";
+	private final List<BuilderHandler> m_handlers = new ArrayList<BuilderHandler>();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public WbBuilder() {
-    m_handlers.add(new ComponentDescriptionValidatorHandler());
-    m_handlers.add(new MetaDataModificationHandler());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public WbBuilder() {
+		m_handlers.add(new ComponentDescriptionValidatorHandler());
+		m_handlers.add(new MetaDataModificationHandler());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Builder
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  @SuppressWarnings("rawtypes")
-  protected IProject[] build(int kind, Map args, IProgressMonitor monitor) throws CoreException {
-    if (kind == FULL_BUILD) {
-      fullBuild(monitor);
-    } else {
-      IResourceDelta delta = getDelta(getProject());
-      if (delta == null) {
-        fullBuild(monitor);
-      } else {
-        incrementalBuild(delta, monitor);
-      }
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Builder
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	@SuppressWarnings("rawtypes")
+	protected IProject[] build(int kind, Map args, IProgressMonitor monitor) throws CoreException {
+		if (kind == FULL_BUILD) {
+			fullBuild(monitor);
+		} else {
+			IResourceDelta delta = getDelta(getProject());
+			if (delta == null) {
+				fullBuild(monitor);
+			} else {
+				incrementalBuild(delta, monitor);
+			}
+		}
+		return null;
+	}
 
-  private void fullBuild(IProgressMonitor monitor) throws CoreException {
-    IProject project = getProject();
-    for (BuilderHandler handler : m_handlers) {
-      handler.fullBuild(project, monitor);
-    }
-  }
+	private void fullBuild(IProgressMonitor monitor) throws CoreException {
+		IProject project = getProject();
+		for (BuilderHandler handler : m_handlers) {
+			handler.fullBuild(project, monitor);
+		}
+	}
 
-  private void incrementalBuild(IResourceDelta delta, IProgressMonitor monitor)
-      throws CoreException {
-    for (BuilderHandler handler : m_handlers) {
-      handler.incrementalBuild(delta, monitor);
-    }
-  }
+	private void incrementalBuild(IResourceDelta delta, IProgressMonitor monitor)
+			throws CoreException {
+		for (BuilderHandler handler : m_handlers) {
+			handler.incrementalBuild(delta, monitor);
+		}
+	}
 }
diff --git a/org.eclipse.wb.dev/src/org/eclipse/wb/internal/dev/builder/WbNature.java b/org.eclipse.wb.dev/src/org/eclipse/wb/internal/dev/builder/WbNature.java
index 107541cab..0db5f3127 100644
--- a/org.eclipse.wb.dev/src/org/eclipse/wb/internal/dev/builder/WbNature.java
+++ b/org.eclipse.wb.dev/src/org/eclipse/wb/internal/dev/builder/WbNature.java
@@ -22,59 +22,59 @@
  * @author scheglov_ke
  */
 public class WbNature implements IProjectNature {
-  public static final String ID = "org.eclipse.wb.dev.wbNature";
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Project
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private IProject m_project;
+	public static final String ID = "org.eclipse.wb.dev.wbNature";
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Project
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private IProject m_project;
 
-  @Override
-  public IProject getProject() {
-    return m_project;
-  }
+	@Override
+	public IProject getProject() {
+		return m_project;
+	}
 
-  @Override
-  public void setProject(IProject project) {
-    m_project = project;
-  }
+	@Override
+	public void setProject(IProject project) {
+		m_project = project;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Configure
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void configure() throws CoreException {
-    IProjectDescription desc = m_project.getDescription();
-    ICommand[] commands = desc.getBuildSpec();
-    for (int i = 0; i < commands.length; ++i) {
-      if (commands[i].getBuilderName().equals(WbBuilder.ID)) {
-        return;
-      }
-    }
-    ICommand[] newCommands = new ICommand[commands.length + 1];
-    System.arraycopy(commands, 0, newCommands, 0, commands.length);
-    ICommand command = desc.newCommand();
-    command.setBuilderName(WbBuilder.ID);
-    newCommands[newCommands.length - 1] = command;
-    desc.setBuildSpec(newCommands);
-    m_project.setDescription(desc, null);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Configure
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void configure() throws CoreException {
+		IProjectDescription desc = m_project.getDescription();
+		ICommand[] commands = desc.getBuildSpec();
+		for (int i = 0; i < commands.length; ++i) {
+			if (commands[i].getBuilderName().equals(WbBuilder.ID)) {
+				return;
+			}
+		}
+		ICommand[] newCommands = new ICommand[commands.length + 1];
+		System.arraycopy(commands, 0, newCommands, 0, commands.length);
+		ICommand command = desc.newCommand();
+		command.setBuilderName(WbBuilder.ID);
+		newCommands[newCommands.length - 1] = command;
+		desc.setBuildSpec(newCommands);
+		m_project.setDescription(desc, null);
+	}
 
-  @Override
-  public void deconfigure() throws CoreException {
-    IProjectDescription description = getProject().getDescription();
-    ICommand[] commands = description.getBuildSpec();
-    for (int i = 0; i < commands.length; ++i) {
-      if (commands[i].getBuilderName().equals(WbBuilder.ID)) {
-        ICommand[] newCommands = new ICommand[commands.length - 1];
-        System.arraycopy(commands, 0, newCommands, 0, i);
-        System.arraycopy(commands, i + 1, newCommands, i, commands.length - i - 1);
-        description.setBuildSpec(newCommands);
-        return;
-      }
-    }
-  }
+	@Override
+	public void deconfigure() throws CoreException {
+		IProjectDescription description = getProject().getDescription();
+		ICommand[] commands = description.getBuildSpec();
+		for (int i = 0; i < commands.length; ++i) {
+			if (commands[i].getBuilderName().equals(WbBuilder.ID)) {
+				ICommand[] newCommands = new ICommand[commands.length - 1];
+				System.arraycopy(commands, 0, newCommands, 0, i);
+				System.arraycopy(commands, i + 1, newCommands, i, commands.length - i - 1);
+				description.setBuildSpec(newCommands);
+				return;
+			}
+		}
+	}
 }
diff --git a/org.eclipse.wb.jdt.fragment/src/org/eclipse/jdt/core/dom/AnonymousTypeDeclaration2.java b/org.eclipse.wb.jdt.fragment/src/org/eclipse/jdt/core/dom/AnonymousTypeDeclaration2.java
index 116d4e36a..cf664473c 100644
--- a/org.eclipse.wb.jdt.fragment/src/org/eclipse/jdt/core/dom/AnonymousTypeDeclaration2.java
+++ b/org.eclipse.wb.jdt.fragment/src/org/eclipse/jdt/core/dom/AnonymousTypeDeclaration2.java
@@ -18,60 +18,60 @@
  * @author scheglov_ke
  */
 public final class AnonymousTypeDeclaration2 extends TypeDeclaration {
-  public static final String KEY = "AnonymousTypeDeclaration";
-  private final AnonymousClassDeclaration m_ACD;
+	public static final String KEY = "AnonymousTypeDeclaration";
+	private final AnonymousClassDeclaration m_ACD;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AnonymousTypeDeclaration2(AnonymousClassDeclaration acd) {
-    super(acd.getAST());
-    m_ACD = acd;
-    setSourceRange(m_ACD.getStartPosition(), m_ACD.getLength());
-    setParent(m_ACD, m_ACD.getLocationInParent());
-    m_ACD.setProperty(KEY, this);
-    // copy type binding
-    {
-      String key = "TYPE_BINDING";
-      Object o = m_ACD.getProperty(key);
-      setProperty(key, o);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AnonymousTypeDeclaration2(AnonymousClassDeclaration acd) {
+		super(acd.getAST());
+		m_ACD = acd;
+		setSourceRange(m_ACD.getStartPosition(), m_ACD.getLength());
+		setParent(m_ACD, m_ACD.getLocationInParent());
+		m_ACD.setProperty(KEY, this);
+		// copy type binding
+		{
+			String key = "TYPE_BINDING";
+			Object o = m_ACD.getProperty(key);
+			setProperty(key, o);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // TypeDeclaration
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  void accept0(ASTVisitor visitor) {
-    m_ACD.accept0(visitor);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// TypeDeclaration
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	void accept0(ASTVisitor visitor) {
+		m_ACD.accept0(visitor);
+	}
 
-  @Override
-  @SuppressWarnings("rawtypes")
-  public List bodyDeclarations() {
-    return m_ACD.bodyDeclarations();
-  }
+	@Override
+	@SuppressWarnings("rawtypes")
+	public List bodyDeclarations() {
+		return m_ACD.bodyDeclarations();
+	}
 
-  @Override
-  void appendDebugString(StringBuffer buffer) {
-    m_ACD.appendDebugString(buffer);
-  }
+	@Override
+	void appendDebugString(StringBuffer buffer) {
+		m_ACD.appendDebugString(buffer);
+	}
 
-  @Override
-  ITypeBinding internalResolveBinding() {
-    return m_ACD.resolveBinding();
-  }
+	@Override
+	ITypeBinding internalResolveBinding() {
+		return m_ACD.resolveBinding();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AnonymousClassDeclaration getACD() {
-    return m_ACD;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AnonymousClassDeclaration getACD() {
+		return m_ACD;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.layout.group/netbeans-src/org/netbeans/modules/form/layoutdesign/IFeedbacksDrawer.java b/org.eclipse.wb.layout.group/netbeans-src/org/netbeans/modules/form/layoutdesign/IFeedbacksDrawer.java
index 10a5105e7..b975bdbb6 100644
--- a/org.eclipse.wb.layout.group/netbeans-src/org/netbeans/modules/form/layoutdesign/IFeedbacksDrawer.java
+++ b/org.eclipse.wb.layout.group/netbeans-src/org/netbeans/modules/form/layoutdesign/IFeedbacksDrawer.java
@@ -17,11 +17,11 @@
  * @author mitin_aa
  */
 public interface IFeedbacksDrawer {
-  public static final int BOTH_DIMENSIONS = 2;
+	public static final int BOTH_DIMENSIONS = 2;
 
-  void drawLine(int x1, int y1, int x2, int y2);
+	void drawLine(int x1, int y1, int x2, int y2);
 
-  void fillArc(int x, int y, int width, int height, int startAngle, int arcAngle);
+	void fillArc(int x, int y, int width, int height, int startAngle, int arcAngle);
 
-  void drawLinkBadge(int x, int y, int dimension);
+	void drawLinkBadge(int x, int y, int dimension);
 }
diff --git a/org.eclipse.wb.layout.group/netbeans-src/org/netbeans/modules/form/layoutdesign/LayoutAligner.java b/org.eclipse.wb.layout.group/netbeans-src/org/netbeans/modules/form/layoutdesign/LayoutAligner.java
index 5af958ac8..d6d7df441 100644
--- a/org.eclipse.wb.layout.group/netbeans-src/org/netbeans/modules/form/layoutdesign/LayoutAligner.java
+++ b/org.eclipse.wb.layout.group/netbeans-src/org/netbeans/modules/form/layoutdesign/LayoutAligner.java
@@ -46,1217 +46,1217 @@
  * @author Jan Stola
  */
 class LayoutAligner implements LayoutConstants {
-  /** Layout designer that invoked the layout aligner. */
-  private final LayoutDesigner designer;
-  /** The corresponding layout model. */
-  private final LayoutModel layoutModel;
-  /** The corresponding layout operations. */
-  private final LayoutOperations operations;
+	/** Layout designer that invoked the layout aligner. */
+	private final LayoutDesigner designer;
+	/** The corresponding layout model. */
+	private final LayoutModel layoutModel;
+	/** The corresponding layout operations. */
+	private final LayoutOperations operations;
 
-  /**
-   * Creates new <code>LayoutAligner</code>.
-   *
-   * @param designer
-   *          layout designer to use.
-   * @param layoutModel
-   *          layout model to use.
-   * @param operations
-   *          layout operations to use.
-   */
-  LayoutAligner(LayoutDesigner designer, LayoutModel layoutModel, LayoutOperations operations) {
-    this.designer = designer;
-    this.layoutModel = layoutModel;
-    this.operations = operations;
-  }
+	/**
+	 * Creates new <code>LayoutAligner</code>.
+	 *
+	 * @param designer
+	 *          layout designer to use.
+	 * @param layoutModel
+	 *          layout model to use.
+	 * @param operations
+	 *          layout operations to use.
+	 */
+	LayoutAligner(LayoutDesigner designer, LayoutModel layoutModel, LayoutOperations operations) {
+		this.designer = designer;
+		this.layoutModel = layoutModel;
+		this.operations = operations;
+	}
 
-  /**
-   * Aligns given components in the specified direction.
-   *
-   * @param componentIds
-   *          IDs of components that should be aligned.
-   * @param closed
-   *          determines if closed group should be created.
-   * @param dimension
-   *          dimension to align in.
-   * @param alignment
-   *          requested alignment.
-   */
-  void alignIntervals(LayoutInterval[] intervals, boolean closed, int dimension, int alignment) {
-    // Find nearest common (parallel) parent
-    LayoutInterval parParent = LayoutInterval.getCommonParent(intervals);
-    if (parParent.isSequential()) {
-      parParent = parParent.getParent();
-    }
-    // Divide layout intervals into pre/aligned/post parallel groups.
-    markByAlignAttributes(parParent, intervals);
-    List<LayoutInterval> removedSeqs = new LinkedList<LayoutInterval>();
-    parParent = splitByAlignAttrs(parParent, removedSeqs, alignment, closed, dimension, false);
-    // Transfer the intervals into common parallel parent
-    List<LayoutInterval> gapsToResize =
-        transferToParallelParent(intervals, parParent, alignment, closed);
-    LayoutInterval returnPar = LayoutInterval.getFirstParent(parParent, PARALLEL);
-    returnRemovedIntervals(returnPar == null ? parParent : returnPar, removedSeqs, dimension);
-    if (alignment != CENTER) {
-      // Calculate leading and trailing intervals
-      Map<LayoutInterval, LayoutInterval> leadingMap =
-          new HashMap<LayoutInterval, LayoutInterval>();
-      Map<LayoutInterval, LayoutInterval> trailingMap =
-          new HashMap<LayoutInterval, LayoutInterval>();
-      for (int i = 0; i < intervals.length; i++) {
-        LayoutInterval interval = intervals[i];
-        LayoutInterval parent = interval.getParent();
-        // Special handling for standalone component intervals in parParent
-        if (parent == parParent) {
-          parent = interval;
-        }
-        LayoutInterval leading = leadingMap.get(parent);
-        LayoutInterval trailing = trailingMap.get(parent);
-        if (leading == null || parent.indexOf(leading) > parent.indexOf(interval)) {
-          leadingMap.put(parent, interval);
-        }
-        if (trailing == null || parent.indexOf(trailing) < parent.indexOf(interval)) {
-          trailingMap.put(parent, interval);
-        }
-      }
-      // Create arrays of leading/trailing intervals
-      LayoutInterval[] leadingIntervals = new LayoutInterval[leadingMap.size()];
-      LayoutInterval[] trailingIntervals = new LayoutInterval[trailingMap.size()];
-      Iterator<LayoutInterval> iter = leadingMap.values().iterator();
-      int counter = 0;
-      while (iter.hasNext()) {
-        LayoutInterval interval = iter.next();
-        leadingIntervals[counter++] = interval;
-      }
-      iter = trailingMap.values().iterator();
-      counter = 0;
-      while (iter.hasNext()) {
-        LayoutInterval interval = iter.next();
-        trailingIntervals[counter++] = interval;
-      }
-      // Perform alignment of the intervals transfered into common parallel parent
-      if (closed) {
-        align(leadingIntervals, trailingIntervals, true, dimension, alignment);
-      } else {
-        LayoutInterval[] itervalsToAlign =
-            alignment == LEADING ? leadingIntervals : trailingIntervals;
-        align(itervalsToAlign, null, false, dimension, alignment);
-      }
-      // Must be done after align() to keep original eff. alignment inside align() method
-      iter = gapsToResize.iterator();
-      while (iter.hasNext()) {
-        LayoutInterval gap = iter.next();
-        designer.setIntervalResizing(gap, true);
-      }
-    }
-    // Do some clean up
-    designer.destroyGroupIfRedundant(parParent, null);
-  }
+	/**
+	 * Aligns given components in the specified direction.
+	 *
+	 * @param componentIds
+	 *          IDs of components that should be aligned.
+	 * @param closed
+	 *          determines if closed group should be created.
+	 * @param dimension
+	 *          dimension to align in.
+	 * @param alignment
+	 *          requested alignment.
+	 */
+	void alignIntervals(LayoutInterval[] intervals, boolean closed, int dimension, int alignment) {
+		// Find nearest common (parallel) parent
+		LayoutInterval parParent = LayoutInterval.getCommonParent(intervals);
+		if (parParent.isSequential()) {
+			parParent = parParent.getParent();
+		}
+		// Divide layout intervals into pre/aligned/post parallel groups.
+		markByAlignAttributes(parParent, intervals);
+		List<LayoutInterval> removedSeqs = new LinkedList<LayoutInterval>();
+		parParent = splitByAlignAttrs(parParent, removedSeqs, alignment, closed, dimension, false);
+		// Transfer the intervals into common parallel parent
+		List<LayoutInterval> gapsToResize =
+				transferToParallelParent(intervals, parParent, alignment, closed);
+		LayoutInterval returnPar = LayoutInterval.getFirstParent(parParent, PARALLEL);
+		returnRemovedIntervals(returnPar == null ? parParent : returnPar, removedSeqs, dimension);
+		if (alignment != CENTER) {
+			// Calculate leading and trailing intervals
+			Map<LayoutInterval, LayoutInterval> leadingMap =
+					new HashMap<LayoutInterval, LayoutInterval>();
+			Map<LayoutInterval, LayoutInterval> trailingMap =
+					new HashMap<LayoutInterval, LayoutInterval>();
+			for (int i = 0; i < intervals.length; i++) {
+				LayoutInterval interval = intervals[i];
+				LayoutInterval parent = interval.getParent();
+				// Special handling for standalone component intervals in parParent
+				if (parent == parParent) {
+					parent = interval;
+				}
+				LayoutInterval leading = leadingMap.get(parent);
+				LayoutInterval trailing = trailingMap.get(parent);
+				if (leading == null || parent.indexOf(leading) > parent.indexOf(interval)) {
+					leadingMap.put(parent, interval);
+				}
+				if (trailing == null || parent.indexOf(trailing) < parent.indexOf(interval)) {
+					trailingMap.put(parent, interval);
+				}
+			}
+			// Create arrays of leading/trailing intervals
+			LayoutInterval[] leadingIntervals = new LayoutInterval[leadingMap.size()];
+			LayoutInterval[] trailingIntervals = new LayoutInterval[trailingMap.size()];
+			Iterator<LayoutInterval> iter = leadingMap.values().iterator();
+			int counter = 0;
+			while (iter.hasNext()) {
+				LayoutInterval interval = iter.next();
+				leadingIntervals[counter++] = interval;
+			}
+			iter = trailingMap.values().iterator();
+			counter = 0;
+			while (iter.hasNext()) {
+				LayoutInterval interval = iter.next();
+				trailingIntervals[counter++] = interval;
+			}
+			// Perform alignment of the intervals transfered into common parallel parent
+			if (closed) {
+				align(leadingIntervals, trailingIntervals, true, dimension, alignment);
+			} else {
+				LayoutInterval[] itervalsToAlign =
+						alignment == LEADING ? leadingIntervals : trailingIntervals;
+				align(itervalsToAlign, null, false, dimension, alignment);
+			}
+			// Must be done after align() to keep original eff. alignment inside align() method
+			iter = gapsToResize.iterator();
+			while (iter.hasNext()) {
+				LayoutInterval gap = iter.next();
+				designer.setIntervalResizing(gap, true);
+			}
+		}
+		// Do some clean up
+		designer.destroyGroupIfRedundant(parParent, null);
+	}
 
-  /**
-   * Marks layout intervals by <code>ATTR_ALIGN_PRE</code> and <code>ATTR_ALIGN_POST</code>
-   * attributes. The first one is assigned to the intervals that are in front of some from the
-   * passed <code>intervals</code>. The second one is assigned to the intervals that are behind some
-   * of the passed <code>intervals</code>. Note that some intervals may obtain both of them.
-   *
-   * @param parParent
-   *          parallel parent of all passed intervals (the marking is restricted to this interval).
-   * @param intervals
-   *          intervals according which the marking is done.
-   */
-  private void markByAlignAttributes(LayoutInterval parParent, LayoutInterval[] intervals) {
-    layoutModel.changeIntervalAttribute(parParent, LayoutInterval.ATTR_ALIGN_PRE, true);
-    layoutModel.changeIntervalAttribute(parParent, LayoutInterval.ATTR_ALIGN_POST, true);
-    for (int i = 0; i < intervals.length; i++) {
-      LayoutInterval interval = intervals[i];
-      while (interval != parParent) {
-        LayoutInterval parent = interval.getParent();
-        layoutModel.changeIntervalAttribute(interval, LayoutInterval.ATTR_ALIGN_PRE, true);
-        layoutModel.changeIntervalAttribute(interval, LayoutInterval.ATTR_ALIGN_POST, true);
-        if (parent.isSequential()) {
-          int index = parent.indexOf(interval);
-          for (int j = 0; j < parent.getSubIntervalCount(); j++) {
-            if (j < index) {
-              markByAlignAttribute(parent.getSubInterval(j), LayoutInterval.ATTR_ALIGN_PRE);
-            } else if (j > index) {
-              markByAlignAttribute(parent.getSubInterval(j), LayoutInterval.ATTR_ALIGN_POST);
-            }
-          }
-        }
-        interval = parent;
-      }
-    }
-  }
+	/**
+	 * Marks layout intervals by <code>ATTR_ALIGN_PRE</code> and <code>ATTR_ALIGN_POST</code>
+	 * attributes. The first one is assigned to the intervals that are in front of some from the
+	 * passed <code>intervals</code>. The second one is assigned to the intervals that are behind some
+	 * of the passed <code>intervals</code>. Note that some intervals may obtain both of them.
+	 *
+	 * @param parParent
+	 *          parallel parent of all passed intervals (the marking is restricted to this interval).
+	 * @param intervals
+	 *          intervals according which the marking is done.
+	 */
+	private void markByAlignAttributes(LayoutInterval parParent, LayoutInterval[] intervals) {
+		layoutModel.changeIntervalAttribute(parParent, LayoutInterval.ATTR_ALIGN_PRE, true);
+		layoutModel.changeIntervalAttribute(parParent, LayoutInterval.ATTR_ALIGN_POST, true);
+		for (int i = 0; i < intervals.length; i++) {
+			LayoutInterval interval = intervals[i];
+			while (interval != parParent) {
+				LayoutInterval parent = interval.getParent();
+				layoutModel.changeIntervalAttribute(interval, LayoutInterval.ATTR_ALIGN_PRE, true);
+				layoutModel.changeIntervalAttribute(interval, LayoutInterval.ATTR_ALIGN_POST, true);
+				if (parent.isSequential()) {
+					int index = parent.indexOf(interval);
+					for (int j = 0; j < parent.getSubIntervalCount(); j++) {
+						if (j < index) {
+							markByAlignAttribute(parent.getSubInterval(j), LayoutInterval.ATTR_ALIGN_PRE);
+						} else if (j > index) {
+							markByAlignAttribute(parent.getSubInterval(j), LayoutInterval.ATTR_ALIGN_POST);
+						}
+					}
+				}
+				interval = parent;
+			}
+		}
+	}
 
-  /**
-   * Marks the <code>interval</code> by the given attribute. If the interval is group, then all
-   * subintervals are marked as well.
-   *
-   * @param interval
-   *          interval to mark.
-   * @param attr
-   *          attr to be assigned.
-   */
-  private void markByAlignAttribute(LayoutInterval interval, int attr) {
-    layoutModel.changeIntervalAttribute(interval, attr, true);
-    if (interval.isGroup()) {
-      Iterator<LayoutInterval> iter = interval.getSubIntervals();
-      while (iter.hasNext()) {
-        markByAlignAttribute(iter.next(), attr);
-      }
-    }
-  }
+	/**
+	 * Marks the <code>interval</code> by the given attribute. If the interval is group, then all
+	 * subintervals are marked as well.
+	 *
+	 * @param interval
+	 *          interval to mark.
+	 * @param attr
+	 *          attr to be assigned.
+	 */
+	private void markByAlignAttribute(LayoutInterval interval, int attr) {
+		layoutModel.changeIntervalAttribute(interval, attr, true);
+		if (interval.isGroup()) {
+			Iterator<LayoutInterval> iter = interval.getSubIntervals();
+			while (iter.hasNext()) {
+				markByAlignAttribute(iter.next(), attr);
+			}
+		}
+	}
 
-  private LayoutInterval splitByAlignAttrs(LayoutInterval interval,
-      List<LayoutInterval> removedSeqs,
-      int alignment,
-      boolean closed,
-      int dimension,
-      boolean optimize) {
-    if (interval.isGroup()) {
-      for (int i = interval.getSubIntervalCount() - 1; i >= 0; i--) {
-        LayoutInterval subInterval = interval.getSubInterval(i);
-        splitByAlignAttrs(subInterval, removedSeqs, alignment, closed, dimension, true);
-      }
-      if (interval.isParallel()) {
-        if (interval.hasAttribute(LayoutInterval.ATTR_ALIGN_PRE)
-            && interval.hasAttribute(LayoutInterval.ATTR_ALIGN_POST)) {
-          LayoutInterval prePar = new LayoutInterval(PARALLEL);
-          layoutModel.changeIntervalAttribute(prePar, LayoutInterval.ATTR_ALIGN_PRE, true);
-          LayoutInterval midPar = new LayoutInterval(PARALLEL);
-          layoutModel.changeIntervalAttribute(midPar, LayoutInterval.ATTR_ALIGN_PRE, true);
-          layoutModel.changeIntervalAttribute(midPar, LayoutInterval.ATTR_ALIGN_POST, true);
-          LayoutInterval postPar = new LayoutInterval(PARALLEL);
-          layoutModel.changeIntervalAttribute(postPar, LayoutInterval.ATTR_ALIGN_POST, true);
-          // Calculate statistics for this parallel group
-          int minMid = Short.MAX_VALUE;
-          int maxMid = Short.MIN_VALUE;
-          int maxPre = Short.MIN_VALUE;
-          int minPost = Short.MAX_VALUE;
-          int maxMidWidth = 0;
-          Iterator<LayoutInterval> iter = interval.getSubIntervals();
-          while (iter.hasNext()) {
-            LayoutInterval subInterval = iter.next();
-            boolean preSub = subInterval.hasAttribute(LayoutInterval.ATTR_ALIGN_PRE);
-            boolean postSub = subInterval.hasAttribute(LayoutInterval.ATTR_ALIGN_POST);
-            LayoutInterval trailingPre = null;
-            LayoutInterval leadingMid = null;
-            LayoutInterval trailingMid = null;
-            LayoutInterval leadingPost = null;
-            if (subInterval.isSequential() && preSub && postSub) {
-              Iterator<LayoutInterval> subIter = subInterval.getSubIntervals();
-              while (subIter.hasNext()) {
-                LayoutInterval subSubInterval = subIter.next();
-                boolean preSubSub = subSubInterval.hasAttribute(LayoutInterval.ATTR_ALIGN_PRE);
-                boolean postSubSub = subSubInterval.hasAttribute(LayoutInterval.ATTR_ALIGN_POST);
-                if (preSubSub) {
-                  if (postSubSub) {
-                    if (leadingMid == null) {
-                      leadingMid = subSubInterval;
-                    }
-                    trailingMid = subSubInterval;
-                  } else {
-                    if (!subSubInterval.isEmptySpace()
-                        || subSubInterval.getPreferredSize() == NOT_EXPLICITLY_DEFINED) {
-                      trailingPre = subSubInterval;
-                    }
-                  }
-                } else if (postSubSub) {
-                  if (leadingPost == null
-                      && (!subSubInterval.isEmptySpace()
-                          || subSubInterval.getPreferredSize() == NOT_EXPLICITLY_DEFINED)) {
-                    leadingPost = subSubInterval;
-                  }
-                }
-              }
-            } else {
-              if (preSub) {
-                if (postSub) {
-                  leadingMid = subInterval;
-                  trailingMid = subInterval;
-                } else {
-                  trailingPre = subInterval;
-                }
-              } else if (postSub) {
-                leadingPost = subInterval;
-              }
-            }
-            if (trailingPre != null) {
-              maxPre = Math.max(maxPre, getPosition(trailingPre, dimension, TRAILING));
-            }
-            if (leadingMid != null) { // implies trailingMid != null
-              int midLeading = getPosition(leadingMid, dimension, LEADING);
-              int midTrailing = getPosition(trailingMid, dimension, TRAILING);
-              int width = midTrailing - midLeading;
-              minMid = Math.min(minMid, midLeading);
-              maxMid = Math.max(maxMid, midTrailing);
-              maxMidWidth = Math.max(maxMidWidth, width);
-            }
-            if (leadingPost != null) {
-              minPost = Math.min(minPost, getPosition(leadingPost, dimension, LEADING));
-            }
-          }
-          // Perform the split
-          for (int i = interval.getSubIntervalCount() - 1; i >= 0; i--) {
-            LayoutInterval subInterval = interval.getSubInterval(i);
-            layoutModel.removeInterval(subInterval);
-            if (subInterval.isSequential()) {
-              if (!subInterval.hasAttribute(LayoutInterval.ATTR_ALIGN_PRE)
-                  && !subInterval.hasAttribute(LayoutInterval.ATTR_ALIGN_POST)) {
-                removedSeqs.add(subInterval);
-                continue;
-              }
-              LayoutInterval preSeq = new LayoutInterval(SEQUENTIAL);
-              layoutModel.changeIntervalAttribute(preSeq, LayoutInterval.ATTR_ALIGN_PRE, true);
-              LayoutInterval midSeq = new LayoutInterval(SEQUENTIAL);
-              layoutModel.changeIntervalAttribute(midSeq, LayoutInterval.ATTR_ALIGN_PRE, true);
-              layoutModel.changeIntervalAttribute(midSeq, LayoutInterval.ATTR_ALIGN_POST, true);
-              LayoutInterval postSeq = new LayoutInterval(SEQUENTIAL);
-              layoutModel.changeIntervalAttribute(postSeq, LayoutInterval.ATTR_ALIGN_POST, true);
-              int[] leading = new int[subInterval.getSubIntervalCount()];
-              int[] trailing = new int[leading.length];
-              for (int j = 0; j < subInterval.getSubIntervalCount(); j++) {
-                LayoutInterval subSubInterval = subInterval.getSubInterval(j);
-                leading[j] = getPosition(subSubInterval, dimension, LEADING);
-                trailing[j] = getPosition(subSubInterval, dimension, TRAILING);
-              }
-              // Update some gaps
-              LayoutInterval lastPre = null;
-              LayoutInterval lastPreGap = null;
-              LayoutInterval firstPostGap = null;
-              LayoutInterval firstMid = null;
-              LayoutInterval lastMid = null;
-              LayoutInterval firstPost = null;
-              for (int j = 0; j < subInterval.getSubIntervalCount(); j++) {
-                LayoutInterval subSubInterval = subInterval.getSubInterval(j);
-                boolean pre = subSubInterval.hasAttribute(LayoutInterval.ATTR_ALIGN_PRE);
-                boolean post = subSubInterval.hasAttribute(LayoutInterval.ATTR_ALIGN_POST);
-                if (pre && !post) {
-                  lastPreGap = subSubInterval;
-                }
-                if (post && !pre) {
-                  if (firstPostGap == null) {
-                    firstPostGap = subSubInterval;
-                  }
-                }
-                if (pre && post) {
-                  if (firstMid == null) {
-                    firstMid = subSubInterval;
-                  }
-                  lastMid = subSubInterval;
-                }
-              }
-              firstPost = firstPostGap;
-              lastPre = lastPreGap;
-              if (firstPostGap != null && !firstPostGap.isEmptySpace()) {
-                firstPostGap = null;
-              }
-              if (lastPreGap != null && !lastPreGap.isEmptySpace()) {
-                lastPreGap = null;
-              }
-              if (alignment == LEADING) {
-                int bias = Math.max(0, maxPre - minMid);
-                int shift = LayoutInterval.getEffectiveAlignment(firstMid) == LEADING ? bias : 0;
-                if (lastPreGap != null) {
-                  int delta = shortenGap(
-                      lastPreGap,
-                      getPosition(firstMid, dimension, LEADING) - minMid - shift);
-                  trailing[subInterval.indexOf(lastPreGap)] -= delta;
-                }
-                shift = LayoutInterval.getEffectiveAlignment(lastMid) == LEADING ? bias : 0;
-                if (firstPostGap != null) {
-                  int delta = shortenGap(
-                      firstPostGap,
-                      maxMidWidth - (getPosition(lastMid, dimension, TRAILING) - minMid) + shift);
-                  leading[subInterval.indexOf(firstPostGap)] += delta;
-                }
-              }
-              if (alignment == TRAILING) {
-                int bias = Math.max(0, maxMid - minPost);
-                int shift = LayoutInterval.getEffectiveAlignment(lastMid) == TRAILING ? bias : 0;
-                if (firstPostGap != null) {
-                  int delta = shortenGap(
-                      firstPostGap,
-                      maxMid - getPosition(lastMid, dimension, TRAILING) - shift);
-                  leading[subInterval.indexOf(firstPostGap)] += delta;
-                }
-                shift = LayoutInterval.getEffectiveAlignment(firstMid) == TRAILING ? bias : 0;
-                if (lastPreGap != null) {
-                  int delta = shortenGap(
-                      lastPreGap,
-                      maxMidWidth - (maxMid - getPosition(firstMid, dimension, LEADING)) + shift);
-                  trailing[subInterval.indexOf(lastPreGap)] -= delta;
-                }
-              }
-              // Set alignment of sequences
-              setAlignmentAccordingEffectiveAlignment(preSeq, lastPre);
-              setAlignmentAccordingEffectiveAlignment(midSeq, firstMid);
-              setAlignmentAccordingEffectiveAlignment(postSeq, firstPost);
-              for (int j = subInterval.getSubIntervalCount() - 1; j >= 0; j--) {
-                LayoutInterval subSubInterval = subInterval.getSubInterval(j);
-                boolean pre = subSubInterval.hasAttribute(LayoutInterval.ATTR_ALIGN_PRE);
-                boolean post = subSubInterval.hasAttribute(LayoutInterval.ATTR_ALIGN_POST);
-                assert pre || post;
-                LayoutInterval seqToInsertInto;
-                if (pre && !post && (alignment == LEADING || closed)) {
-                  seqToInsertInto = preSeq;
-                } else if (post && !pre && (alignment == TRAILING || closed)) {
-                  seqToInsertInto = postSeq;
-                } else {
-                  seqToInsertInto = midSeq;
-                }
-                expandCurrentSpace(seqToInsertInto, dimension, leading[j], trailing[j]);
-                layoutModel.removeInterval(subSubInterval);
-                layoutModel.addInterval(subSubInterval, seqToInsertInto, 0);
-              }
-              putGroupToGroup(preSeq, prePar, 0);
-              putGroupToGroup(midSeq, midPar, 0);
-              putGroupToGroup(postSeq, postPar, 0);
-            } else {
-              boolean pre = subInterval.hasAttribute(LayoutInterval.ATTR_ALIGN_PRE);
-              boolean post = subInterval.hasAttribute(LayoutInterval.ATTR_ALIGN_POST);
-              if (!pre && !post) {
-                removedSeqs.add(subInterval);
-              } else if (pre && !post && (alignment == LEADING || closed)) {
-                layoutModel.addInterval(subInterval, prePar, 0);
-                prePar.getCurrentSpace().expand(subInterval.getCurrentSpace());
-              } else if (post && !pre && (alignment == TRAILING || closed)) {
-                layoutModel.addInterval(subInterval, postPar, 0);
-                postPar.getCurrentSpace().expand(subInterval.getCurrentSpace());
-              } else {
-                layoutModel.addInterval(subInterval, midPar, 0);
-                midPar.getCurrentSpace().expand(subInterval.getCurrentSpace());
-              }
-            }
-          }
-          LayoutInterval parent = interval.getParent();
-          int index;
-          if (parent != null) {
-            index = layoutModel.removeInterval(interval);
-          } else {
-            parent = interval;
-            index = 0;
-          }
-          if (!parent.isSequential()) {
-            LayoutInterval seq = new LayoutInterval(SEQUENTIAL);
-            layoutModel.changeIntervalAttribute(seq, LayoutInterval.ATTR_ALIGN_PRE, true);
-            layoutModel.changeIntervalAttribute(seq, LayoutInterval.ATTR_ALIGN_POST, true);
-            layoutModel.addInterval(seq, parent, index);
-            index = 0;
-            parent = seq;
-          }
-          putGroupToGroup(postPar, parent, index);
-          interval = putGroupToGroup(midPar, parent, index, optimize);
-          putGroupToGroup(prePar, parent, index);
-        }
-      }
-    }
-    return interval;
-  }
+	private LayoutInterval splitByAlignAttrs(LayoutInterval interval,
+			List<LayoutInterval> removedSeqs,
+			int alignment,
+			boolean closed,
+			int dimension,
+			boolean optimize) {
+		if (interval.isGroup()) {
+			for (int i = interval.getSubIntervalCount() - 1; i >= 0; i--) {
+				LayoutInterval subInterval = interval.getSubInterval(i);
+				splitByAlignAttrs(subInterval, removedSeqs, alignment, closed, dimension, true);
+			}
+			if (interval.isParallel()) {
+				if (interval.hasAttribute(LayoutInterval.ATTR_ALIGN_PRE)
+						&& interval.hasAttribute(LayoutInterval.ATTR_ALIGN_POST)) {
+					LayoutInterval prePar = new LayoutInterval(PARALLEL);
+					layoutModel.changeIntervalAttribute(prePar, LayoutInterval.ATTR_ALIGN_PRE, true);
+					LayoutInterval midPar = new LayoutInterval(PARALLEL);
+					layoutModel.changeIntervalAttribute(midPar, LayoutInterval.ATTR_ALIGN_PRE, true);
+					layoutModel.changeIntervalAttribute(midPar, LayoutInterval.ATTR_ALIGN_POST, true);
+					LayoutInterval postPar = new LayoutInterval(PARALLEL);
+					layoutModel.changeIntervalAttribute(postPar, LayoutInterval.ATTR_ALIGN_POST, true);
+					// Calculate statistics for this parallel group
+					int minMid = Short.MAX_VALUE;
+					int maxMid = Short.MIN_VALUE;
+					int maxPre = Short.MIN_VALUE;
+					int minPost = Short.MAX_VALUE;
+					int maxMidWidth = 0;
+					Iterator<LayoutInterval> iter = interval.getSubIntervals();
+					while (iter.hasNext()) {
+						LayoutInterval subInterval = iter.next();
+						boolean preSub = subInterval.hasAttribute(LayoutInterval.ATTR_ALIGN_PRE);
+						boolean postSub = subInterval.hasAttribute(LayoutInterval.ATTR_ALIGN_POST);
+						LayoutInterval trailingPre = null;
+						LayoutInterval leadingMid = null;
+						LayoutInterval trailingMid = null;
+						LayoutInterval leadingPost = null;
+						if (subInterval.isSequential() && preSub && postSub) {
+							Iterator<LayoutInterval> subIter = subInterval.getSubIntervals();
+							while (subIter.hasNext()) {
+								LayoutInterval subSubInterval = subIter.next();
+								boolean preSubSub = subSubInterval.hasAttribute(LayoutInterval.ATTR_ALIGN_PRE);
+								boolean postSubSub = subSubInterval.hasAttribute(LayoutInterval.ATTR_ALIGN_POST);
+								if (preSubSub) {
+									if (postSubSub) {
+										if (leadingMid == null) {
+											leadingMid = subSubInterval;
+										}
+										trailingMid = subSubInterval;
+									} else {
+										if (!subSubInterval.isEmptySpace()
+												|| subSubInterval.getPreferredSize() == NOT_EXPLICITLY_DEFINED) {
+											trailingPre = subSubInterval;
+										}
+									}
+								} else if (postSubSub) {
+									if (leadingPost == null
+											&& (!subSubInterval.isEmptySpace()
+													|| subSubInterval.getPreferredSize() == NOT_EXPLICITLY_DEFINED)) {
+										leadingPost = subSubInterval;
+									}
+								}
+							}
+						} else {
+							if (preSub) {
+								if (postSub) {
+									leadingMid = subInterval;
+									trailingMid = subInterval;
+								} else {
+									trailingPre = subInterval;
+								}
+							} else if (postSub) {
+								leadingPost = subInterval;
+							}
+						}
+						if (trailingPre != null) {
+							maxPre = Math.max(maxPre, getPosition(trailingPre, dimension, TRAILING));
+						}
+						if (leadingMid != null) { // implies trailingMid != null
+							int midLeading = getPosition(leadingMid, dimension, LEADING);
+							int midTrailing = getPosition(trailingMid, dimension, TRAILING);
+							int width = midTrailing - midLeading;
+							minMid = Math.min(minMid, midLeading);
+							maxMid = Math.max(maxMid, midTrailing);
+							maxMidWidth = Math.max(maxMidWidth, width);
+						}
+						if (leadingPost != null) {
+							minPost = Math.min(minPost, getPosition(leadingPost, dimension, LEADING));
+						}
+					}
+					// Perform the split
+					for (int i = interval.getSubIntervalCount() - 1; i >= 0; i--) {
+						LayoutInterval subInterval = interval.getSubInterval(i);
+						layoutModel.removeInterval(subInterval);
+						if (subInterval.isSequential()) {
+							if (!subInterval.hasAttribute(LayoutInterval.ATTR_ALIGN_PRE)
+									&& !subInterval.hasAttribute(LayoutInterval.ATTR_ALIGN_POST)) {
+								removedSeqs.add(subInterval);
+								continue;
+							}
+							LayoutInterval preSeq = new LayoutInterval(SEQUENTIAL);
+							layoutModel.changeIntervalAttribute(preSeq, LayoutInterval.ATTR_ALIGN_PRE, true);
+							LayoutInterval midSeq = new LayoutInterval(SEQUENTIAL);
+							layoutModel.changeIntervalAttribute(midSeq, LayoutInterval.ATTR_ALIGN_PRE, true);
+							layoutModel.changeIntervalAttribute(midSeq, LayoutInterval.ATTR_ALIGN_POST, true);
+							LayoutInterval postSeq = new LayoutInterval(SEQUENTIAL);
+							layoutModel.changeIntervalAttribute(postSeq, LayoutInterval.ATTR_ALIGN_POST, true);
+							int[] leading = new int[subInterval.getSubIntervalCount()];
+							int[] trailing = new int[leading.length];
+							for (int j = 0; j < subInterval.getSubIntervalCount(); j++) {
+								LayoutInterval subSubInterval = subInterval.getSubInterval(j);
+								leading[j] = getPosition(subSubInterval, dimension, LEADING);
+								trailing[j] = getPosition(subSubInterval, dimension, TRAILING);
+							}
+							// Update some gaps
+							LayoutInterval lastPre = null;
+							LayoutInterval lastPreGap = null;
+							LayoutInterval firstPostGap = null;
+							LayoutInterval firstMid = null;
+							LayoutInterval lastMid = null;
+							LayoutInterval firstPost = null;
+							for (int j = 0; j < subInterval.getSubIntervalCount(); j++) {
+								LayoutInterval subSubInterval = subInterval.getSubInterval(j);
+								boolean pre = subSubInterval.hasAttribute(LayoutInterval.ATTR_ALIGN_PRE);
+								boolean post = subSubInterval.hasAttribute(LayoutInterval.ATTR_ALIGN_POST);
+								if (pre && !post) {
+									lastPreGap = subSubInterval;
+								}
+								if (post && !pre) {
+									if (firstPostGap == null) {
+										firstPostGap = subSubInterval;
+									}
+								}
+								if (pre && post) {
+									if (firstMid == null) {
+										firstMid = subSubInterval;
+									}
+									lastMid = subSubInterval;
+								}
+							}
+							firstPost = firstPostGap;
+							lastPre = lastPreGap;
+							if (firstPostGap != null && !firstPostGap.isEmptySpace()) {
+								firstPostGap = null;
+							}
+							if (lastPreGap != null && !lastPreGap.isEmptySpace()) {
+								lastPreGap = null;
+							}
+							if (alignment == LEADING) {
+								int bias = Math.max(0, maxPre - minMid);
+								int shift = LayoutInterval.getEffectiveAlignment(firstMid) == LEADING ? bias : 0;
+								if (lastPreGap != null) {
+									int delta = shortenGap(
+											lastPreGap,
+											getPosition(firstMid, dimension, LEADING) - minMid - shift);
+									trailing[subInterval.indexOf(lastPreGap)] -= delta;
+								}
+								shift = LayoutInterval.getEffectiveAlignment(lastMid) == LEADING ? bias : 0;
+								if (firstPostGap != null) {
+									int delta = shortenGap(
+											firstPostGap,
+											maxMidWidth - (getPosition(lastMid, dimension, TRAILING) - minMid) + shift);
+									leading[subInterval.indexOf(firstPostGap)] += delta;
+								}
+							}
+							if (alignment == TRAILING) {
+								int bias = Math.max(0, maxMid - minPost);
+								int shift = LayoutInterval.getEffectiveAlignment(lastMid) == TRAILING ? bias : 0;
+								if (firstPostGap != null) {
+									int delta = shortenGap(
+											firstPostGap,
+											maxMid - getPosition(lastMid, dimension, TRAILING) - shift);
+									leading[subInterval.indexOf(firstPostGap)] += delta;
+								}
+								shift = LayoutInterval.getEffectiveAlignment(firstMid) == TRAILING ? bias : 0;
+								if (lastPreGap != null) {
+									int delta = shortenGap(
+											lastPreGap,
+											maxMidWidth - (maxMid - getPosition(firstMid, dimension, LEADING)) + shift);
+									trailing[subInterval.indexOf(lastPreGap)] -= delta;
+								}
+							}
+							// Set alignment of sequences
+							setAlignmentAccordingEffectiveAlignment(preSeq, lastPre);
+							setAlignmentAccordingEffectiveAlignment(midSeq, firstMid);
+							setAlignmentAccordingEffectiveAlignment(postSeq, firstPost);
+							for (int j = subInterval.getSubIntervalCount() - 1; j >= 0; j--) {
+								LayoutInterval subSubInterval = subInterval.getSubInterval(j);
+								boolean pre = subSubInterval.hasAttribute(LayoutInterval.ATTR_ALIGN_PRE);
+								boolean post = subSubInterval.hasAttribute(LayoutInterval.ATTR_ALIGN_POST);
+								assert pre || post;
+								LayoutInterval seqToInsertInto;
+								if (pre && !post && (alignment == LEADING || closed)) {
+									seqToInsertInto = preSeq;
+								} else if (post && !pre && (alignment == TRAILING || closed)) {
+									seqToInsertInto = postSeq;
+								} else {
+									seqToInsertInto = midSeq;
+								}
+								expandCurrentSpace(seqToInsertInto, dimension, leading[j], trailing[j]);
+								layoutModel.removeInterval(subSubInterval);
+								layoutModel.addInterval(subSubInterval, seqToInsertInto, 0);
+							}
+							putGroupToGroup(preSeq, prePar, 0);
+							putGroupToGroup(midSeq, midPar, 0);
+							putGroupToGroup(postSeq, postPar, 0);
+						} else {
+							boolean pre = subInterval.hasAttribute(LayoutInterval.ATTR_ALIGN_PRE);
+							boolean post = subInterval.hasAttribute(LayoutInterval.ATTR_ALIGN_POST);
+							if (!pre && !post) {
+								removedSeqs.add(subInterval);
+							} else if (pre && !post && (alignment == LEADING || closed)) {
+								layoutModel.addInterval(subInterval, prePar, 0);
+								prePar.getCurrentSpace().expand(subInterval.getCurrentSpace());
+							} else if (post && !pre && (alignment == TRAILING || closed)) {
+								layoutModel.addInterval(subInterval, postPar, 0);
+								postPar.getCurrentSpace().expand(subInterval.getCurrentSpace());
+							} else {
+								layoutModel.addInterval(subInterval, midPar, 0);
+								midPar.getCurrentSpace().expand(subInterval.getCurrentSpace());
+							}
+						}
+					}
+					LayoutInterval parent = interval.getParent();
+					int index;
+					if (parent != null) {
+						index = layoutModel.removeInterval(interval);
+					} else {
+						parent = interval;
+						index = 0;
+					}
+					if (!parent.isSequential()) {
+						LayoutInterval seq = new LayoutInterval(SEQUENTIAL);
+						layoutModel.changeIntervalAttribute(seq, LayoutInterval.ATTR_ALIGN_PRE, true);
+						layoutModel.changeIntervalAttribute(seq, LayoutInterval.ATTR_ALIGN_POST, true);
+						layoutModel.addInterval(seq, parent, index);
+						index = 0;
+						parent = seq;
+					}
+					putGroupToGroup(postPar, parent, index);
+					interval = putGroupToGroup(midPar, parent, index, optimize);
+					putGroupToGroup(prePar, parent, index);
+				}
+			}
+		}
+		return interval;
+	}
 
-  private LayoutInterval putGroupToGroup(LayoutInterval groupToInsert,
-      LayoutInterval group,
-      int index) {
-    return putGroupToGroup(groupToInsert, group, index, true);
-  }
+	private LayoutInterval putGroupToGroup(LayoutInterval groupToInsert,
+			LayoutInterval group,
+			int index) {
+		return putGroupToGroup(groupToInsert, group, index, true);
+	}
 
-  private LayoutInterval putGroupToGroup(LayoutInterval groupToInsert,
-      LayoutInterval group,
-      int index,
-      boolean optimize) {
-    // Remove empty spaces from parallel group
-    if (groupToInsert.isParallel()) {
-      LayoutInterval emptySpace = null;
-      for (int i = groupToInsert.getSubIntervalCount() - 1; i >= 0; i--) {
-        LayoutInterval interval = groupToInsert.getSubInterval(i);
-        if (interval.isEmptySpace()) {
-          emptySpace = interval;
-          layoutModel.removeInterval(interval);
-        }
-      }
-      if (groupToInsert.getSubIntervalCount() == 0 && emptySpace != null) {
-        // Use the last empty space as a replacement for the group - handled below
-        layoutModel.addInterval(emptySpace, groupToInsert, 0);
-      }
-    }
-    if (groupToInsert.getSubIntervalCount() > 0) {
-      LayoutRegion region = groupToInsert.getCurrentSpace();
-      while (optimize && groupToInsert.getSubIntervalCount() == 1) {
-        LayoutInterval interval = groupToInsert.getSubInterval(0);
-        layoutModel.removeInterval(interval);
-        layoutModel.setIntervalAlignment(interval, groupToInsert.getAlignment());
-        groupToInsert = interval;
-      }
-      if (optimize && groupToInsert.isSequential() && group.isSequential()) {
-        for (int i = groupToInsert.getSubIntervalCount() - 1; i >= 0; i--) {
-          LayoutInterval subInterval = groupToInsert.getSubInterval(i);
-          layoutModel.removeInterval(subInterval);
-          layoutModel.addInterval(subInterval, group, index);
-        }
-        groupToInsert = null;
-      } else {
-        layoutModel.addInterval(groupToInsert, group, index);
-      }
-      group.getCurrentSpace().expand(region);
-    }
-    return groupToInsert;
-  }
+	private LayoutInterval putGroupToGroup(LayoutInterval groupToInsert,
+			LayoutInterval group,
+			int index,
+			boolean optimize) {
+		// Remove empty spaces from parallel group
+		if (groupToInsert.isParallel()) {
+			LayoutInterval emptySpace = null;
+			for (int i = groupToInsert.getSubIntervalCount() - 1; i >= 0; i--) {
+				LayoutInterval interval = groupToInsert.getSubInterval(i);
+				if (interval.isEmptySpace()) {
+					emptySpace = interval;
+					layoutModel.removeInterval(interval);
+				}
+			}
+			if (groupToInsert.getSubIntervalCount() == 0 && emptySpace != null) {
+				// Use the last empty space as a replacement for the group - handled below
+				layoutModel.addInterval(emptySpace, groupToInsert, 0);
+			}
+		}
+		if (groupToInsert.getSubIntervalCount() > 0) {
+			LayoutRegion region = groupToInsert.getCurrentSpace();
+			while (optimize && groupToInsert.getSubIntervalCount() == 1) {
+				LayoutInterval interval = groupToInsert.getSubInterval(0);
+				layoutModel.removeInterval(interval);
+				layoutModel.setIntervalAlignment(interval, groupToInsert.getAlignment());
+				groupToInsert = interval;
+			}
+			if (optimize && groupToInsert.isSequential() && group.isSequential()) {
+				for (int i = groupToInsert.getSubIntervalCount() - 1; i >= 0; i--) {
+					LayoutInterval subInterval = groupToInsert.getSubInterval(i);
+					layoutModel.removeInterval(subInterval);
+					layoutModel.addInterval(subInterval, group, index);
+				}
+				groupToInsert = null;
+			} else {
+				layoutModel.addInterval(groupToInsert, group, index);
+			}
+			group.getCurrentSpace().expand(region);
+		}
+		return groupToInsert;
+	}
 
-  /**
-   * Expands the current space of <code>interval</code>.
-   *
-   * @param interval
-   *          interval whose current space should be expanded.
-   * @param dimension
-   *          dimension in which the expansion occurs.
-   * @param leading
-   *          lower bound of the expansion.
-   * @param trailing
-   *          upper bound of the expansion.
-   */
-  private void expandCurrentSpace(LayoutInterval interval,
-      int dimension,
-      int leading,
-      int trailing) {
-    LayoutRegion region = new LayoutRegion();
-    region.positions[dimension][LEADING] = leading;
-    region.positions[dimension][TRAILING] = trailing;
-    interval.getCurrentSpace().expand(region, dimension);
-  }
+	/**
+	 * Expands the current space of <code>interval</code>.
+	 *
+	 * @param interval
+	 *          interval whose current space should be expanded.
+	 * @param dimension
+	 *          dimension in which the expansion occurs.
+	 * @param leading
+	 *          lower bound of the expansion.
+	 * @param trailing
+	 *          upper bound of the expansion.
+	 */
+	private void expandCurrentSpace(LayoutInterval interval,
+			int dimension,
+			int leading,
+			int trailing) {
+		LayoutRegion region = new LayoutRegion();
+		region.positions[dimension][LEADING] = leading;
+		region.positions[dimension][TRAILING] = trailing;
+		interval.getCurrentSpace().expand(region, dimension);
+	}
 
-  private int getPosition(LayoutInterval interval, int dimension, int alignment) {
-    if (interval.isEmptySpace()) {
-      LayoutInterval parent = interval.getParent();
-      assert parent.isSequential() && (alignment == LEADING || alignment == TRAILING);
-      int index = parent.indexOf(interval);
-      if (alignment == LEADING) {
-        return index > 0
-            ? parent.getSubInterval(index - 1).getCurrentSpace().positions[dimension][TRAILING]
-            : parent.getCurrentSpace().positions[dimension][LEADING];
-      } else { // alignment == TRAILING
-        return index + 1 < parent.getSubIntervalCount()
-            ? parent.getSubInterval(index + 1).getCurrentSpace().positions[dimension][LEADING]
-            : parent.getCurrentSpace().positions[dimension][TRAILING];
-      }
-    } else {
-      return interval.getCurrentSpace().positions[dimension][alignment];
-    }
-  }
+	private int getPosition(LayoutInterval interval, int dimension, int alignment) {
+		if (interval.isEmptySpace()) {
+			LayoutInterval parent = interval.getParent();
+			assert parent.isSequential() && (alignment == LEADING || alignment == TRAILING);
+			int index = parent.indexOf(interval);
+			if (alignment == LEADING) {
+				return index > 0
+						? parent.getSubInterval(index - 1).getCurrentSpace().positions[dimension][TRAILING]
+								: parent.getCurrentSpace().positions[dimension][LEADING];
+			} else { // alignment == TRAILING
+				return index + 1 < parent.getSubIntervalCount()
+						? parent.getSubInterval(index + 1).getCurrentSpace().positions[dimension][LEADING]
+								: parent.getCurrentSpace().positions[dimension][TRAILING];
+			}
+		} else {
+			return interval.getCurrentSpace().positions[dimension][alignment];
+		}
+	}
 
-  /**
-   * Ensures that the nearest parallel parent of the given intervals is the passed one.
-   *
-   * @param intervals
-   *          intervals that should be transfered into the given parallel parent.
-   * @param parParent
-   *          parallel group that is already parent (but maybe not the nearest parallel parent) of
-   *          the given intervals.
-   * @param requested
-   *          alignment.
-   * @return <code>List</code> of intervals (gaps) that should become resizable.
-   */
-  private List<LayoutInterval> transferToParallelParent(LayoutInterval[] intervals,
-      LayoutInterval parParent,
-      int alignment,
-      boolean closed) {
-    // Determine dimension used to align components
-    LayoutComponent temp = intervals[0].getComponent();
-    int dimension = temp.getLayoutInterval(HORIZONTAL) == intervals[0] ? HORIZONTAL : VERTICAL;
-    // Calculate extreme coordinates
-    int leadingPosition = Short.MAX_VALUE;
-    int trailingPosition = 0;
-    int targetEffAlignment = LayoutConstants.DEFAULT;
-    for (int i = 0; i < intervals.length; i++) {
-      LayoutInterval interval = intervals[i];
-      // This method should be called only for components
-      assert interval.isComponent();
-      LayoutRegion region = interval.getCurrentSpace();
-      int leading = region.positions[dimension][LEADING];
-      int trailing = region.positions[dimension][TRAILING];
-      leadingPosition = Math.min(leading, leadingPosition);
-      trailingPosition = Math.max(trailing, trailingPosition);
-      int effAlignment = LayoutInterval.getEffectiveAlignment(interval);
-      if ((effAlignment == LEADING || effAlignment == TRAILING)
-          && (targetEffAlignment == DEFAULT || effAlignment == alignment)) {
-        targetEffAlignment = effAlignment;
-      }
-    }
-    boolean resizable = false;
-    boolean sequenceResizable;
-    boolean leadingGaps = true;
-    boolean trailingGaps = true;
-    List<LayoutInterval> gapsToResize = new LinkedList<LayoutInterval>();
-    List<LayoutInterval> sequenceGapsToResize;
-    LayoutInterval[] firstIntervals = new LayoutInterval[intervals.length];
-    LayoutInterval[] lastIntervals = new LayoutInterval[intervals.length];
-    // List of new sequence groups for individual intervals
-    List<LayoutInterval> intervalList = Arrays.asList(intervals);
-    List<List<LayoutInterval>> newSequences = new LinkedList<List<LayoutInterval>>();
-    Map<LayoutInterval, Integer> gapSizes = new HashMap<LayoutInterval, Integer>();
-    for (int i = 0; i < intervals.length; i++) {
-      LayoutInterval interval = intervals[i];
-      // Find intervals that should be in the same sequence with the transfered interval
-      List<LayoutInterval> transferedComponents = transferedComponents(intervals, i, parParent);
-      LayoutInterval firstInterval = null;
-      LayoutInterval lastInterval = null;
-      for (int j = transferedComponents.size() - 1; j >= 0; j--) {
-        LayoutInterval trInterval = transferedComponents.get(j);
-        if (intervalList.contains(trInterval)) {
-          firstInterval = trInterval;
-          if (lastInterval == null) {
-            lastInterval = trInterval;
-          }
-        } else if (alignment == CENTER) {
-          transferedComponents.remove(trInterval);
-        }
-      }
-      firstIntervals[i] = firstInterval;
-      lastIntervals[i] = lastInterval;
-      // List of LayoutIntervals in the new sequence group
-      List<LayoutInterval> newSequenceList = new LinkedList<LayoutInterval>();
-      newSequences.add(newSequenceList);
-      sequenceResizable = false;
-      sequenceGapsToResize = new LinkedList<LayoutInterval>();
-      Iterator<LayoutInterval> iter = transferedComponents.iterator();
-      // Determine leading gap of the sequence
-      LayoutRegion parentRegion = parParent.getCurrentSpace();
-      LayoutInterval leadingInterval = iter.next();
-      LayoutRegion leadingRegion = leadingInterval.getCurrentSpace();
-      if (alignment == TRAILING && !closed) {
-        int preGap = leadingRegion.positions[dimension][LEADING]
-            - parentRegion.positions[dimension][LEADING];
-        LayoutInterval gapInterval =
-            LayoutInterval.getNeighbor(leadingInterval, SEQUENTIAL, LEADING);
-        leadingGaps = leadingGaps && preGap != 0;
-        if (gapInterval != null
-            && gapInterval.isEmptySpace()
-            && parParent.isParentOf(gapInterval)
-            && LayoutInterval.getIntervalCurrentSize(gapInterval, dimension) == preGap) {
-          LayoutInterval gap = cloneGap(gapInterval);
-          newSequenceList.add(gap);
-          gapSizes.put(gap, Integer.valueOf(preGap));
-          if (alignment == TRAILING) {
-            sequenceResizable = sequenceResizable || LayoutInterval.canResize(gap);
-          }
-        } else {
-          maybeAddGap(newSequenceList, preGap, true);
-          if (preGap != 0 && alignment == TRAILING && leadingInterval == firstInterval) {
-            LayoutInterval gap = newSequenceList.get(newSequenceList.size() - 1);
-            if (LayoutInterval.getEffectiveAlignment(leadingInterval) == TRAILING) {
-              layoutModel.setIntervalSize(gap, USE_PREFERRED_SIZE, preGap, USE_PREFERRED_SIZE);
-              sequenceGapsToResize.add(gap);
-            }
-          }
-        }
-      }
-      // Determine content of the sequence
-      boolean afterDefiningInterval = false;
-      newSequenceList.add(leadingInterval);
-      while (iter.hasNext()) {
-        if (leadingInterval == interval) {
-          afterDefiningInterval = true;
-        }
-        LayoutInterval trailingInterval = iter.next();
-        if (alignment == TRAILING && (!afterDefiningInterval || leadingInterval == interval)
-            || alignment == LEADING && afterDefiningInterval) {
-          sequenceResizable = sequenceResizable || LayoutInterval.canResize(leadingInterval);
-        }
-        // Determine gap between before the processed interval
-        LayoutRegion trailingRegion = trailingInterval.getCurrentSpace();
-        LayoutInterval gapInterval =
-            LayoutInterval.getNeighbor(leadingInterval, SEQUENTIAL, TRAILING);
-        int gapSize = trailingRegion.positions[dimension][LEADING]
-            - leadingRegion.positions[dimension][TRAILING];
-        boolean gapFound = false;
-        if (gapInterval.isEmptySpace()) {
-          LayoutInterval neighbor = LayoutInterval.getNeighbor(gapInterval, SEQUENTIAL, TRAILING);
-          if (neighbor == trailingInterval) {
-            gapFound = true;
-            LayoutInterval gap = cloneGap(gapInterval);
-            newSequenceList.add(gap);
-            gapSizes.put(gap, Integer.valueOf(gapSize));
-            if (alignment == TRAILING && !afterDefiningInterval
-                || alignment == LEADING && afterDefiningInterval) {
-              sequenceResizable = sequenceResizable || LayoutInterval.canResize(gap);
-            }
-          }
-        }
-        if (!gapFound) {
-          maybeAddGap(newSequenceList, gapSize, alignment == CENTER);
-        }
-        if (leadingInterval == lastInterval
-            && alignment == LEADING
-            && LayoutInterval.getEffectiveAlignment(trailingInterval) == TRAILING
-            || trailingInterval == firstInterval
-                && alignment == TRAILING
-                && LayoutInterval.getEffectiveAlignment(leadingInterval) == LEADING) {
-          LayoutInterval gap = newSequenceList.get(newSequenceList.size() - 1);
-          if (!LayoutInterval.canResize(gap)) {
-            sequenceGapsToResize.add(gap);
-          }
-        }
-        newSequenceList.add(trailingInterval);
-        leadingInterval = trailingInterval;
-        leadingRegion = trailingRegion;
-      }
-      // Determine trailing gap of the sequence
-      if (alignment == LEADING || alignment == TRAILING && leadingInterval == lastInterval) {
-        sequenceResizable = sequenceResizable || LayoutInterval.canResize(leadingInterval);
-      }
-      if (alignment == LEADING && !closed) {
-        int postGap = parentRegion.positions[dimension][TRAILING]
-            - leadingRegion.positions[dimension][TRAILING];
-        trailingGaps = trailingGaps && postGap != 0;
-        LayoutInterval gapInterval =
-            LayoutInterval.getNeighbor(leadingInterval, SEQUENTIAL, TRAILING);
-        if (gapInterval != null
-            && gapInterval.isEmptySpace()
-            && parParent.isParentOf(gapInterval)
-            && LayoutInterval.getIntervalCurrentSize(gapInterval, dimension) == postGap) {
-          LayoutInterval gap = cloneGap(gapInterval);
-          newSequenceList.add(gap);
-          gapSizes.put(gap, Integer.valueOf(postGap));
-          if (alignment == LEADING) {
-            sequenceResizable = sequenceResizable || LayoutInterval.canResize(gap);
-          }
-        } else {
-          maybeAddGap(newSequenceList, postGap, true);
-        }
-      }
-      resizable = resizable || sequenceResizable;
-      if (!sequenceResizable) {
-        gapsToResize.addAll(sequenceGapsToResize);
-      }
-    }
-    // Modify transfered gaps adjacent to aligned components
-    if (alignment != CENTER) {
-      Iterator<List<LayoutInterval>> listIter = newSequences.iterator();
-      for (int i = 0; i < intervals.length; i++) {
-        List<LayoutInterval> newSequenceList = listIter.next();
-        Iterator<LayoutInterval> iter = newSequenceList.iterator();
-        LayoutInterval gapCandidate = null;
-        while (iter.hasNext()) {
-          LayoutInterval interval = iter.next();
-          if (interval == firstIntervals[i] && alignment == LEADING
-              || interval == lastIntervals[i] && alignment == TRAILING) {
-            LayoutRegion region = interval.getCurrentSpace();
-            int diff = 0;
-            if (alignment == TRAILING) {
-              if (iter.hasNext()) {
-                gapCandidate = iter.next();
-                diff = trailingPosition - region.positions[dimension][TRAILING];
-              } else {
-                break;
-              }
-            } else {
-              diff = region.positions[dimension][LEADING] - leadingPosition;
-            }
-            if (gapCandidate != null && gapCandidate.isEmptySpace()) {
-              if (!leadingGaps && alignment == LEADING && newSequenceList.indexOf(gapCandidate) == 0
-                  || !trailingGaps && alignment == TRAILING && !iter.hasNext()) {
-                newSequenceList.remove(gapCandidate);
-              } else {
-                Integer size = gapSizes.get(gapCandidate);
-                int minSize = gapCandidate.getMinimumSize();
-                int prefSize = gapCandidate.getPreferredSize();
-                int maxSize = gapCandidate.getMaximumSize();
-                if (diff > 0) {
-                  if (size != null) {
-                    int actualSize = size.intValue();
-                    diff += prefSize - actualSize;
-                  }
-                  if (minSize >= 0) {
-                    minSize = minSize - diff > 0 ? minSize - diff : NOT_EXPLICITLY_DEFINED;
-                  }
-                  if (prefSize >= 0) {
-                    prefSize = prefSize - diff > 0 ? prefSize - diff : NOT_EXPLICITLY_DEFINED;
-                  }
-                  if (maxSize >= 0 && maxSize != Short.MAX_VALUE) {
-                    maxSize = maxSize - diff > 0 ? maxSize - diff : USE_PREFERRED_SIZE;
-                  }
-                }
-                if (targetEffAlignment == alignment && maxSize == Short.MAX_VALUE) {
-                  maxSize = USE_PREFERRED_SIZE;
-                }
-                layoutModel.setIntervalSize(gapCandidate, minSize, prefSize, maxSize);
-              }
-            }
-            break;
-          }
-          gapCandidate = interval;
-        }
-      }
-    }
-    // The content of all new sequence groups is known.
-    // We can update the layout model.
-    Iterator<List<LayoutInterval>> listIter = newSequences.iterator();
-    while (listIter.hasNext()) {
-      List<LayoutInterval> newSequenceList = listIter.next();
-      LayoutInterval newSequence = new LayoutInterval(SEQUENTIAL);
-      if (alignment == CENTER) {
-        newSequence.setAlignment(CENTER);
-      }
-      Iterator<LayoutInterval> iter = newSequenceList.iterator();
-      int sequenceAlignment = DEFAULT;
-      while (iter.hasNext()) {
-        LayoutInterval compInterval = iter.next();
-        if (compInterval.isComponent()) { // e.g. compInterval.getParent() != null
-          if (sequenceAlignment == DEFAULT) {
-            sequenceAlignment = LayoutInterval.getEffectiveAlignment(compInterval);
-          }
-          designer.takeOutInterval(compInterval, parParent);
-          layoutModel.setIntervalAlignment(compInterval, DEFAULT);
-        }
-        layoutModel.addInterval(compInterval, newSequence, -1);
-      }
-      if (alignment != CENTER && !LayoutInterval.wantResize(newSequence)) {
-        newSequence.setAlignment(sequenceAlignment);
-      }
-      if (newSequenceList.size() == 1) {
-        LayoutInterval compInterval = newSequenceList.get(0);
-        layoutModel.removeInterval(compInterval);
-        if (newSequence.getAlignment() != DEFAULT) {
-          layoutModel.setIntervalAlignment(compInterval, newSequence.getAlignment());
-        }
-        newSequence = compInterval;
-      }
-      layoutModel.addInterval(newSequence, parParent, -1);
-    }
-    if (alignment == CENTER) {
-      layoutModel.setGroupAlignment(parParent, alignment);
-    }
-    // Check resizability
-    if (gapsToResize.size() > 0 && !resizable && alignment != CENTER) {
-      operations.suppressGroupResizing(parParent);
-      Iterator<LayoutInterval> iter = gapsToResize.iterator();
-      while (iter.hasNext()) {
-        LayoutInterval gap = iter.next();
-        layoutModel.changeIntervalAttribute(gap, LayoutInterval.ATTRIBUTE_FORMER_FILL, false);
-        layoutModel.changeIntervalAttribute(gap, LayoutInterval.ATTRIBUTE_FILL, true);
-      }
-    }
-    return gapsToResize;
-  }
+	/**
+	 * Ensures that the nearest parallel parent of the given intervals is the passed one.
+	 *
+	 * @param intervals
+	 *          intervals that should be transfered into the given parallel parent.
+	 * @param parParent
+	 *          parallel group that is already parent (but maybe not the nearest parallel parent) of
+	 *          the given intervals.
+	 * @param requested
+	 *          alignment.
+	 * @return <code>List</code> of intervals (gaps) that should become resizable.
+	 */
+	private List<LayoutInterval> transferToParallelParent(LayoutInterval[] intervals,
+			LayoutInterval parParent,
+			int alignment,
+			boolean closed) {
+		// Determine dimension used to align components
+		LayoutComponent temp = intervals[0].getComponent();
+		int dimension = temp.getLayoutInterval(HORIZONTAL) == intervals[0] ? HORIZONTAL : VERTICAL;
+		// Calculate extreme coordinates
+		int leadingPosition = Short.MAX_VALUE;
+		int trailingPosition = 0;
+		int targetEffAlignment = LayoutConstants.DEFAULT;
+		for (int i = 0; i < intervals.length; i++) {
+			LayoutInterval interval = intervals[i];
+			// This method should be called only for components
+			assert interval.isComponent();
+			LayoutRegion region = interval.getCurrentSpace();
+			int leading = region.positions[dimension][LEADING];
+			int trailing = region.positions[dimension][TRAILING];
+			leadingPosition = Math.min(leading, leadingPosition);
+			trailingPosition = Math.max(trailing, trailingPosition);
+			int effAlignment = LayoutInterval.getEffectiveAlignment(interval);
+			if ((effAlignment == LEADING || effAlignment == TRAILING)
+					&& (targetEffAlignment == DEFAULT || effAlignment == alignment)) {
+				targetEffAlignment = effAlignment;
+			}
+		}
+		boolean resizable = false;
+		boolean sequenceResizable;
+		boolean leadingGaps = true;
+		boolean trailingGaps = true;
+		List<LayoutInterval> gapsToResize = new LinkedList<LayoutInterval>();
+		List<LayoutInterval> sequenceGapsToResize;
+		LayoutInterval[] firstIntervals = new LayoutInterval[intervals.length];
+		LayoutInterval[] lastIntervals = new LayoutInterval[intervals.length];
+		// List of new sequence groups for individual intervals
+		List<LayoutInterval> intervalList = Arrays.asList(intervals);
+		List<List<LayoutInterval>> newSequences = new LinkedList<List<LayoutInterval>>();
+		Map<LayoutInterval, Integer> gapSizes = new HashMap<LayoutInterval, Integer>();
+		for (int i = 0; i < intervals.length; i++) {
+			LayoutInterval interval = intervals[i];
+			// Find intervals that should be in the same sequence with the transfered interval
+			List<LayoutInterval> transferedComponents = transferedComponents(intervals, i, parParent);
+			LayoutInterval firstInterval = null;
+			LayoutInterval lastInterval = null;
+			for (int j = transferedComponents.size() - 1; j >= 0; j--) {
+				LayoutInterval trInterval = transferedComponents.get(j);
+				if (intervalList.contains(trInterval)) {
+					firstInterval = trInterval;
+					if (lastInterval == null) {
+						lastInterval = trInterval;
+					}
+				} else if (alignment == CENTER) {
+					transferedComponents.remove(trInterval);
+				}
+			}
+			firstIntervals[i] = firstInterval;
+			lastIntervals[i] = lastInterval;
+			// List of LayoutIntervals in the new sequence group
+			List<LayoutInterval> newSequenceList = new LinkedList<LayoutInterval>();
+			newSequences.add(newSequenceList);
+			sequenceResizable = false;
+			sequenceGapsToResize = new LinkedList<LayoutInterval>();
+			Iterator<LayoutInterval> iter = transferedComponents.iterator();
+			// Determine leading gap of the sequence
+			LayoutRegion parentRegion = parParent.getCurrentSpace();
+			LayoutInterval leadingInterval = iter.next();
+			LayoutRegion leadingRegion = leadingInterval.getCurrentSpace();
+			if (alignment == TRAILING && !closed) {
+				int preGap = leadingRegion.positions[dimension][LEADING]
+						- parentRegion.positions[dimension][LEADING];
+				LayoutInterval gapInterval =
+						LayoutInterval.getNeighbor(leadingInterval, SEQUENTIAL, LEADING);
+				leadingGaps = leadingGaps && preGap != 0;
+				if (gapInterval != null
+						&& gapInterval.isEmptySpace()
+						&& parParent.isParentOf(gapInterval)
+						&& LayoutInterval.getIntervalCurrentSize(gapInterval, dimension) == preGap) {
+					LayoutInterval gap = cloneGap(gapInterval);
+					newSequenceList.add(gap);
+					gapSizes.put(gap, Integer.valueOf(preGap));
+					if (alignment == TRAILING) {
+						sequenceResizable = sequenceResizable || LayoutInterval.canResize(gap);
+					}
+				} else {
+					maybeAddGap(newSequenceList, preGap, true);
+					if (preGap != 0 && alignment == TRAILING && leadingInterval == firstInterval) {
+						LayoutInterval gap = newSequenceList.get(newSequenceList.size() - 1);
+						if (LayoutInterval.getEffectiveAlignment(leadingInterval) == TRAILING) {
+							layoutModel.setIntervalSize(gap, USE_PREFERRED_SIZE, preGap, USE_PREFERRED_SIZE);
+							sequenceGapsToResize.add(gap);
+						}
+					}
+				}
+			}
+			// Determine content of the sequence
+			boolean afterDefiningInterval = false;
+			newSequenceList.add(leadingInterval);
+			while (iter.hasNext()) {
+				if (leadingInterval == interval) {
+					afterDefiningInterval = true;
+				}
+				LayoutInterval trailingInterval = iter.next();
+				if (alignment == TRAILING && (!afterDefiningInterval || leadingInterval == interval)
+						|| alignment == LEADING && afterDefiningInterval) {
+					sequenceResizable = sequenceResizable || LayoutInterval.canResize(leadingInterval);
+				}
+				// Determine gap between before the processed interval
+				LayoutRegion trailingRegion = trailingInterval.getCurrentSpace();
+				LayoutInterval gapInterval =
+						LayoutInterval.getNeighbor(leadingInterval, SEQUENTIAL, TRAILING);
+				int gapSize = trailingRegion.positions[dimension][LEADING]
+						- leadingRegion.positions[dimension][TRAILING];
+				boolean gapFound = false;
+				if (gapInterval.isEmptySpace()) {
+					LayoutInterval neighbor = LayoutInterval.getNeighbor(gapInterval, SEQUENTIAL, TRAILING);
+					if (neighbor == trailingInterval) {
+						gapFound = true;
+						LayoutInterval gap = cloneGap(gapInterval);
+						newSequenceList.add(gap);
+						gapSizes.put(gap, Integer.valueOf(gapSize));
+						if (alignment == TRAILING && !afterDefiningInterval
+								|| alignment == LEADING && afterDefiningInterval) {
+							sequenceResizable = sequenceResizable || LayoutInterval.canResize(gap);
+						}
+					}
+				}
+				if (!gapFound) {
+					maybeAddGap(newSequenceList, gapSize, alignment == CENTER);
+				}
+				if (leadingInterval == lastInterval
+						&& alignment == LEADING
+						&& LayoutInterval.getEffectiveAlignment(trailingInterval) == TRAILING
+						|| trailingInterval == firstInterval
+						&& alignment == TRAILING
+						&& LayoutInterval.getEffectiveAlignment(leadingInterval) == LEADING) {
+					LayoutInterval gap = newSequenceList.get(newSequenceList.size() - 1);
+					if (!LayoutInterval.canResize(gap)) {
+						sequenceGapsToResize.add(gap);
+					}
+				}
+				newSequenceList.add(trailingInterval);
+				leadingInterval = trailingInterval;
+				leadingRegion = trailingRegion;
+			}
+			// Determine trailing gap of the sequence
+			if (alignment == LEADING || alignment == TRAILING && leadingInterval == lastInterval) {
+				sequenceResizable = sequenceResizable || LayoutInterval.canResize(leadingInterval);
+			}
+			if (alignment == LEADING && !closed) {
+				int postGap = parentRegion.positions[dimension][TRAILING]
+						- leadingRegion.positions[dimension][TRAILING];
+				trailingGaps = trailingGaps && postGap != 0;
+				LayoutInterval gapInterval =
+						LayoutInterval.getNeighbor(leadingInterval, SEQUENTIAL, TRAILING);
+				if (gapInterval != null
+						&& gapInterval.isEmptySpace()
+						&& parParent.isParentOf(gapInterval)
+						&& LayoutInterval.getIntervalCurrentSize(gapInterval, dimension) == postGap) {
+					LayoutInterval gap = cloneGap(gapInterval);
+					newSequenceList.add(gap);
+					gapSizes.put(gap, Integer.valueOf(postGap));
+					if (alignment == LEADING) {
+						sequenceResizable = sequenceResizable || LayoutInterval.canResize(gap);
+					}
+				} else {
+					maybeAddGap(newSequenceList, postGap, true);
+				}
+			}
+			resizable = resizable || sequenceResizable;
+			if (!sequenceResizable) {
+				gapsToResize.addAll(sequenceGapsToResize);
+			}
+		}
+		// Modify transfered gaps adjacent to aligned components
+		if (alignment != CENTER) {
+			Iterator<List<LayoutInterval>> listIter = newSequences.iterator();
+			for (int i = 0; i < intervals.length; i++) {
+				List<LayoutInterval> newSequenceList = listIter.next();
+				Iterator<LayoutInterval> iter = newSequenceList.iterator();
+				LayoutInterval gapCandidate = null;
+				while (iter.hasNext()) {
+					LayoutInterval interval = iter.next();
+					if (interval == firstIntervals[i] && alignment == LEADING
+							|| interval == lastIntervals[i] && alignment == TRAILING) {
+						LayoutRegion region = interval.getCurrentSpace();
+						int diff = 0;
+						if (alignment == TRAILING) {
+							if (iter.hasNext()) {
+								gapCandidate = iter.next();
+								diff = trailingPosition - region.positions[dimension][TRAILING];
+							} else {
+								break;
+							}
+						} else {
+							diff = region.positions[dimension][LEADING] - leadingPosition;
+						}
+						if (gapCandidate != null && gapCandidate.isEmptySpace()) {
+							if (!leadingGaps && alignment == LEADING && newSequenceList.indexOf(gapCandidate) == 0
+									|| !trailingGaps && alignment == TRAILING && !iter.hasNext()) {
+								newSequenceList.remove(gapCandidate);
+							} else {
+								Integer size = gapSizes.get(gapCandidate);
+								int minSize = gapCandidate.getMinimumSize();
+								int prefSize = gapCandidate.getPreferredSize();
+								int maxSize = gapCandidate.getMaximumSize();
+								if (diff > 0) {
+									if (size != null) {
+										int actualSize = size.intValue();
+										diff += prefSize - actualSize;
+									}
+									if (minSize >= 0) {
+										minSize = minSize - diff > 0 ? minSize - diff : NOT_EXPLICITLY_DEFINED;
+									}
+									if (prefSize >= 0) {
+										prefSize = prefSize - diff > 0 ? prefSize - diff : NOT_EXPLICITLY_DEFINED;
+									}
+									if (maxSize >= 0 && maxSize != Short.MAX_VALUE) {
+										maxSize = maxSize - diff > 0 ? maxSize - diff : USE_PREFERRED_SIZE;
+									}
+								}
+								if (targetEffAlignment == alignment && maxSize == Short.MAX_VALUE) {
+									maxSize = USE_PREFERRED_SIZE;
+								}
+								layoutModel.setIntervalSize(gapCandidate, minSize, prefSize, maxSize);
+							}
+						}
+						break;
+					}
+					gapCandidate = interval;
+				}
+			}
+		}
+		// The content of all new sequence groups is known.
+		// We can update the layout model.
+		Iterator<List<LayoutInterval>> listIter = newSequences.iterator();
+		while (listIter.hasNext()) {
+			List<LayoutInterval> newSequenceList = listIter.next();
+			LayoutInterval newSequence = new LayoutInterval(SEQUENTIAL);
+			if (alignment == CENTER) {
+				newSequence.setAlignment(CENTER);
+			}
+			Iterator<LayoutInterval> iter = newSequenceList.iterator();
+			int sequenceAlignment = DEFAULT;
+			while (iter.hasNext()) {
+				LayoutInterval compInterval = iter.next();
+				if (compInterval.isComponent()) { // e.g. compInterval.getParent() != null
+					if (sequenceAlignment == DEFAULT) {
+						sequenceAlignment = LayoutInterval.getEffectiveAlignment(compInterval);
+					}
+					designer.takeOutInterval(compInterval, parParent);
+					layoutModel.setIntervalAlignment(compInterval, DEFAULT);
+				}
+				layoutModel.addInterval(compInterval, newSequence, -1);
+			}
+			if (alignment != CENTER && !LayoutInterval.wantResize(newSequence)) {
+				newSequence.setAlignment(sequenceAlignment);
+			}
+			if (newSequenceList.size() == 1) {
+				LayoutInterval compInterval = newSequenceList.get(0);
+				layoutModel.removeInterval(compInterval);
+				if (newSequence.getAlignment() != DEFAULT) {
+					layoutModel.setIntervalAlignment(compInterval, newSequence.getAlignment());
+				}
+				newSequence = compInterval;
+			}
+			layoutModel.addInterval(newSequence, parParent, -1);
+		}
+		if (alignment == CENTER) {
+			layoutModel.setGroupAlignment(parParent, alignment);
+		}
+		// Check resizability
+		if (gapsToResize.size() > 0 && !resizable && alignment != CENTER) {
+			operations.suppressGroupResizing(parParent);
+			Iterator<LayoutInterval> iter = gapsToResize.iterator();
+			while (iter.hasNext()) {
+				LayoutInterval gap = iter.next();
+				layoutModel.changeIntervalAttribute(gap, LayoutInterval.ATTRIBUTE_FORMER_FILL, false);
+				layoutModel.changeIntervalAttribute(gap, LayoutInterval.ATTRIBUTE_FILL, true);
+			}
+		}
+		return gapsToResize;
+	}
 
-  /**
-   * PENDING Determines layout components that will be transfered to the specified parallel parent
-   * together with the given layout component.
-   *
-   * @param interval
-   *          layout component to transfer to the parallel parent.
-   * @param parParent
-   *          parallel parent to transfer the component to.
-   * @return <code>List</code> of <code>LayoutInterval</code> objects.
-   */
-  private List<LayoutInterval> transferedComponents(LayoutInterval[] intervals,
-      int index,
-      LayoutInterval parParent) {
-    LayoutInterval interval = intervals[index];
-    LayoutInterval oppInterval = oppositeComponentInterval(interval);
-    List<LayoutInterval> transferedComponents = new LinkedList<LayoutInterval>();
-    List<LayoutInterval> components = new LinkedList<LayoutInterval>();
-    componentsInGroup(parParent, components);
-    /*for (int i=0; i<intervals.length; i++) {
+	/**
+	 * PENDING Determines layout components that will be transfered to the specified parallel parent
+	 * together with the given layout component.
+	 *
+	 * @param interval
+	 *          layout component to transfer to the parallel parent.
+	 * @param parParent
+	 *          parallel parent to transfer the component to.
+	 * @return <code>List</code> of <code>LayoutInterval</code> objects.
+	 */
+	private List<LayoutInterval> transferedComponents(LayoutInterval[] intervals,
+			int index,
+			LayoutInterval parParent) {
+		LayoutInterval interval = intervals[index];
+		LayoutInterval oppInterval = oppositeComponentInterval(interval);
+		List<LayoutInterval> transferedComponents = new LinkedList<LayoutInterval>();
+		List<LayoutInterval> components = new LinkedList<LayoutInterval>();
+		componentsInGroup(parParent, components);
+		/*for (int i=0; i<intervals.length; i++) {
         if (i == index) continue;
         transferCandidates(interval, intervals[i], components);
     }*/
-    Iterator<LayoutInterval> iter = components.iterator();
-    while (iter.hasNext()) {
-      LayoutInterval candidate = iter.next();
-      LayoutInterval oppCandidate = oppositeComponentInterval(candidate);
-      if (alignedIntervals(oppInterval, oppCandidate, BASELINE)
-          || alignedIntervals(oppInterval, oppCandidate, LEADING)
-          || alignedIntervals(oppInterval, oppCandidate, TRAILING)
-          || alignedIntervals(oppInterval, oppCandidate, CENTER)) {
-        if (parParent.isParentOf(candidate)) {
-          transferedComponents.add(candidate);
-        }
-      }
-    }
-    if (!transferedComponents.contains(interval)) {
-      transferedComponents.add(interval);
-    }
-    // Sort layout components according to their current bounds
-    Collections.sort(transferedComponents, new Comparator<LayoutInterval>() {
-      @Override
-      public int compare(LayoutInterval interval1, LayoutInterval interval2) {
-        LayoutComponent comp = interval1.getComponent();
-        int dimension = comp.getLayoutInterval(VERTICAL) == interval1 ? VERTICAL : HORIZONTAL;
-        LayoutRegion region1 = interval1.getCurrentSpace();
-        LayoutRegion region2 = interval2.getCurrentSpace();
-        int value1 = region1.positions[dimension][LEADING];
-        int value2 = region2.positions[dimension][LEADING];
-        return value1 - value2;
-      }
-    });
-    return transferedComponents;
-  }
+		Iterator<LayoutInterval> iter = components.iterator();
+		while (iter.hasNext()) {
+			LayoutInterval candidate = iter.next();
+			LayoutInterval oppCandidate = oppositeComponentInterval(candidate);
+			if (alignedIntervals(oppInterval, oppCandidate, BASELINE)
+					|| alignedIntervals(oppInterval, oppCandidate, LEADING)
+					|| alignedIntervals(oppInterval, oppCandidate, TRAILING)
+					|| alignedIntervals(oppInterval, oppCandidate, CENTER)) {
+				if (parParent.isParentOf(candidate)) {
+					transferedComponents.add(candidate);
+				}
+			}
+		}
+		if (!transferedComponents.contains(interval)) {
+			transferedComponents.add(interval);
+		}
+		// Sort layout components according to their current bounds
+		Collections.sort(transferedComponents, new Comparator<LayoutInterval>() {
+			@Override
+			public int compare(LayoutInterval interval1, LayoutInterval interval2) {
+				LayoutComponent comp = interval1.getComponent();
+				int dimension = comp.getLayoutInterval(VERTICAL) == interval1 ? VERTICAL : HORIZONTAL;
+				LayoutRegion region1 = interval1.getCurrentSpace();
+				LayoutRegion region2 = interval2.getCurrentSpace();
+				int value1 = region1.positions[dimension][LEADING];
+				int value2 = region2.positions[dimension][LEADING];
+				return value1 - value2;
+			}
+		});
+		return transferedComponents;
+	}
 
-  /**
-   * Places all components that are in the <code>group</code> into <code>components</code>
-   * collection.
-   *
-   * @param group
-   *          layout interval that is scanned for components.
-   * @param components
-   *          collection of <code>LayoutInterval</code>s of layout components in the group.
-   */
-  private void componentsInGroup(LayoutInterval group, Collection<LayoutInterval> components) {
-    Iterator<LayoutInterval> iter = group.getSubIntervals();
-    while (iter.hasNext()) {
-      LayoutInterval interval = iter.next();
-      if (interval.isGroup()) {
-        componentsInGroup(interval, components);
-      } else if (interval.isComponent() && !components.contains(interval)) {
-        components.add(interval);
-      }
-    }
-  }
+	/**
+	 * Places all components that are in the <code>group</code> into <code>components</code>
+	 * collection.
+	 *
+	 * @param group
+	 *          layout interval that is scanned for components.
+	 * @param components
+	 *          collection of <code>LayoutInterval</code>s of layout components in the group.
+	 */
+	private void componentsInGroup(LayoutInterval group, Collection<LayoutInterval> components) {
+		Iterator<LayoutInterval> iter = group.getSubIntervals();
+		while (iter.hasNext()) {
+			LayoutInterval interval = iter.next();
+			if (interval.isGroup()) {
+				componentsInGroup(interval, components);
+			} else if (interval.isComponent() && !components.contains(interval)) {
+				components.add(interval);
+			}
+		}
+	}
 
-  /**
-   * Aligns given intervals to a parallel group. The intervals are supposed to have the same first
-   * parallel parent.
-   */
-  private boolean align(LayoutInterval[] leadingInts,
-      LayoutInterval[] trailingInts,
-      boolean closed,
-      int dimension,
-      int alignment) {
-    // find common parallel group for aligned intervals
-    LayoutInterval commonGroup = null;
-    LayoutInterval[] intervals = leadingInts;
-    for (int i = 0; i < intervals.length; i++) {
-      LayoutInterval interval = intervals[i];
-      LayoutInterval parent = interval.getParent();
-      if (!parent.isParallel()) {
-        parent = parent.getParent();
-        assert parent.isParallel();
-      }
-      if (commonGroup == null || parent != commonGroup && parent.isParentOf(commonGroup)) {
-        commonGroup = parent;
-      } else {
-        assert parent == commonGroup || commonGroup.isParentOf(parent);
-      }
-    }
-    // prepare separation to groups
-    List<LayoutInterval> aligned = new LinkedList<LayoutInterval>();
-    List<List> restLeading = new LinkedList<List>();
-    List<List> restTrailing = new LinkedList<List>();
-    int mainEffectiveAlign = -1;
-    int originalCount = commonGroup.getSubIntervalCount();
-    for (int i = 0; i < intervals.length; i++) {
-      LayoutInterval interval = intervals[i];
-      LayoutInterval parent = interval.getParent();
-      LayoutInterval parParent = parent.isParallel() ? parent : parent.getParent();
-      if (parParent != commonGroup) {
-        interval = getAlignSubstitute(interval, commonGroup, alignment);
-        if (interval == null) {
-          return false; // cannot align
-        }
-        parent = interval.getParent();
-      }
-      if (parent.isSequential()) {
-        mainEffectiveAlign = LayoutInterval.getEffectiveAlignment(interval); // [need better way to collect - here it takes the last one...]
-        // extract the interval surroundings
-        int extractCount = operations.extract(
-            interval,
-            closed ? trailingInts[i] : interval,
-            alignment,
-            closed,
-            restLeading,
-            restTrailing);
-        if (extractCount == 1) { // the parent won't be reused
-          layoutModel.removeInterval(parent);
-          aligned.add(interval);
-        } else { // we'll reuse the parent sequence in the new group
-          aligned.add(parent);
-        }
-      } else {
-        aligned.add(interval);
-      }
-    }
-    // prepare the group where the aligned intervals will be placed
-    LayoutInterval group;
-    LayoutInterval commonSeq;
-    boolean remainder = !restLeading.isEmpty() || !restTrailing.isEmpty();
-    if (!remainder && mainEffectiveAlign == alignment
-        || aligned.size() == originalCount && commonGroup.getParent() != null) { // reuse the original group - avoid unnecessary nesting
-      group = commonGroup;
-      if (remainder) { // need a sequence for the remainder groups
-        LayoutInterval groupParent = group.getParent();
-        if (groupParent.isSequential()) {
-          commonSeq = groupParent;
-        } else { // insert a new one
-          int index = layoutModel.removeInterval(group);
-          commonSeq = new LayoutInterval(SEQUENTIAL);
-          commonSeq.setAlignment(group.getAlignment());
-          layoutModel.addInterval(commonSeq, groupParent, index);
-          layoutModel.setIntervalAlignment(group, DEFAULT);
-          layoutModel.addInterval(group, commonSeq, -1);
-        }
-      } else {
-        commonSeq = null;
-      }
-    } else { // need to create a new group
-      group = new LayoutInterval(PARALLEL);
-      if (remainder) { // need a new sequence for the remainder groups
-        commonSeq = new LayoutInterval(SEQUENTIAL);
-        commonSeq.add(group, -1);
-        layoutModel.addInterval(commonSeq, commonGroup, -1);
-      } else {
-        commonSeq = null;
-        layoutModel.addInterval(group, commonGroup, -1);
-      }
-      layoutModel.setGroupAlignment(group, alignment);
-    }
-    // add the intervals and their neighbors to the main aligned group
-    // [need to fix the resizability (fill) and compute effective alignment]
-    for (Iterator<LayoutInterval> it = aligned.iterator(); it.hasNext();) {
-      LayoutInterval interval = it.next();
-      if (interval.getParent() != group) {
-        layoutModel.removeInterval(interval);
-        operations.addContent(interval, group, -1);
-      }
-      layoutModel.setIntervalAlignment(interval, alignment);
-    }
-    // create the remainder groups around the main one
-    if (!restLeading.isEmpty()) {
-      // [should change to operations.addGroupContent]
-      designer.createRemainderGroup(
-          restLeading,
-          commonSeq,
-          commonSeq.indexOf(group),
-          LEADING,
-          mainEffectiveAlign,
-          dimension);
-    }
-    if (!restTrailing.isEmpty()) {
-      // [should change to operations.addGroupContent]
-      designer.createRemainderGroup(
-          restTrailing,
-          commonSeq,
-          commonSeq.indexOf(group),
-          TRAILING,
-          mainEffectiveAlign,
-          dimension);
-    }
-    return true;
-  }
+	/**
+	 * Aligns given intervals to a parallel group. The intervals are supposed to have the same first
+	 * parallel parent.
+	 */
+	private boolean align(LayoutInterval[] leadingInts,
+			LayoutInterval[] trailingInts,
+			boolean closed,
+			int dimension,
+			int alignment) {
+		// find common parallel group for aligned intervals
+		LayoutInterval commonGroup = null;
+		LayoutInterval[] intervals = leadingInts;
+		for (int i = 0; i < intervals.length; i++) {
+			LayoutInterval interval = intervals[i];
+			LayoutInterval parent = interval.getParent();
+			if (!parent.isParallel()) {
+				parent = parent.getParent();
+				assert parent.isParallel();
+			}
+			if (commonGroup == null || parent != commonGroup && parent.isParentOf(commonGroup)) {
+				commonGroup = parent;
+			} else {
+				assert parent == commonGroup || commonGroup.isParentOf(parent);
+			}
+		}
+		// prepare separation to groups
+		List<LayoutInterval> aligned = new LinkedList<LayoutInterval>();
+		List<List> restLeading = new LinkedList<List>();
+		List<List> restTrailing = new LinkedList<List>();
+		int mainEffectiveAlign = -1;
+		int originalCount = commonGroup.getSubIntervalCount();
+		for (int i = 0; i < intervals.length; i++) {
+			LayoutInterval interval = intervals[i];
+			LayoutInterval parent = interval.getParent();
+			LayoutInterval parParent = parent.isParallel() ? parent : parent.getParent();
+			if (parParent != commonGroup) {
+				interval = getAlignSubstitute(interval, commonGroup, alignment);
+				if (interval == null) {
+					return false; // cannot align
+				}
+				parent = interval.getParent();
+			}
+			if (parent.isSequential()) {
+				mainEffectiveAlign = LayoutInterval.getEffectiveAlignment(interval); // [need better way to collect - here it takes the last one...]
+				// extract the interval surroundings
+				int extractCount = operations.extract(
+						interval,
+						closed ? trailingInts[i] : interval,
+								alignment,
+								closed,
+								restLeading,
+								restTrailing);
+				if (extractCount == 1) { // the parent won't be reused
+					layoutModel.removeInterval(parent);
+					aligned.add(interval);
+				} else { // we'll reuse the parent sequence in the new group
+					aligned.add(parent);
+				}
+			} else {
+				aligned.add(interval);
+			}
+		}
+		// prepare the group where the aligned intervals will be placed
+		LayoutInterval group;
+		LayoutInterval commonSeq;
+		boolean remainder = !restLeading.isEmpty() || !restTrailing.isEmpty();
+		if (!remainder && mainEffectiveAlign == alignment
+				|| aligned.size() == originalCount && commonGroup.getParent() != null) { // reuse the original group - avoid unnecessary nesting
+			group = commonGroup;
+			if (remainder) { // need a sequence for the remainder groups
+				LayoutInterval groupParent = group.getParent();
+				if (groupParent.isSequential()) {
+					commonSeq = groupParent;
+				} else { // insert a new one
+					int index = layoutModel.removeInterval(group);
+					commonSeq = new LayoutInterval(SEQUENTIAL);
+					commonSeq.setAlignment(group.getAlignment());
+					layoutModel.addInterval(commonSeq, groupParent, index);
+					layoutModel.setIntervalAlignment(group, DEFAULT);
+					layoutModel.addInterval(group, commonSeq, -1);
+				}
+			} else {
+				commonSeq = null;
+			}
+		} else { // need to create a new group
+			group = new LayoutInterval(PARALLEL);
+			if (remainder) { // need a new sequence for the remainder groups
+				commonSeq = new LayoutInterval(SEQUENTIAL);
+				commonSeq.add(group, -1);
+				layoutModel.addInterval(commonSeq, commonGroup, -1);
+			} else {
+				commonSeq = null;
+				layoutModel.addInterval(group, commonGroup, -1);
+			}
+			layoutModel.setGroupAlignment(group, alignment);
+		}
+		// add the intervals and their neighbors to the main aligned group
+		// [need to fix the resizability (fill) and compute effective alignment]
+		for (Iterator<LayoutInterval> it = aligned.iterator(); it.hasNext();) {
+			LayoutInterval interval = it.next();
+			if (interval.getParent() != group) {
+				layoutModel.removeInterval(interval);
+				operations.addContent(interval, group, -1);
+			}
+			layoutModel.setIntervalAlignment(interval, alignment);
+		}
+		// create the remainder groups around the main one
+		if (!restLeading.isEmpty()) {
+			// [should change to operations.addGroupContent]
+			designer.createRemainderGroup(
+					restLeading,
+					commonSeq,
+					commonSeq.indexOf(group),
+					LEADING,
+					mainEffectiveAlign,
+					dimension);
+		}
+		if (!restTrailing.isEmpty()) {
+			// [should change to operations.addGroupContent]
+			designer.createRemainderGroup(
+					restTrailing,
+					commonSeq,
+					commonSeq.indexOf(group),
+					TRAILING,
+					mainEffectiveAlign,
+					dimension);
+		}
+		return true;
+	}
 
-  /**
-   * Clones given layout interval (empty space).
-   *
-   * @return clone of the given layout interval (empty space).
-   */
-  private LayoutInterval cloneGap(LayoutInterval interval) {
-    assert interval.isEmptySpace();
-    LayoutInterval gap = new LayoutInterval(SINGLE);
-    gap.setMinimumSize(interval.getMinimumSize());
-    gap.setPreferredSize(interval.getPreferredSize());
-    gap.setMaximumSize(interval.getMaximumSize());
-    return gap;
-  }
+	/**
+	 * Clones given layout interval (empty space).
+	 *
+	 * @return clone of the given layout interval (empty space).
+	 */
+	private LayoutInterval cloneGap(LayoutInterval interval) {
+		assert interval.isEmptySpace();
+		LayoutInterval gap = new LayoutInterval(SINGLE);
+		gap.setMinimumSize(interval.getMinimumSize());
+		gap.setPreferredSize(interval.getPreferredSize());
+		gap.setMaximumSize(interval.getMaximumSize());
+		return gap;
+	}
 
-  /**
-   * Helper method that adds layout interval (empty space) to the given list (when the specified
-   * size is positive).
-   *
-   * @param list
-   *          list the gap should be added to.
-   * @param size
-   *          size of the original space.
-   */
-  private void maybeAddGap(List<LayoutInterval> list, int size, boolean forceSize) {
-    if (size > 0) {
-      LayoutInterval gapInterval = new LayoutInterval(SINGLE);
-      if (forceSize) {
-        layoutModel.setIntervalSize(gapInterval, size, size, size);
-      }
-      list.add(gapInterval);
-    }
-  }
+	/**
+	 * Helper method that adds layout interval (empty space) to the given list (when the specified
+	 * size is positive).
+	 *
+	 * @param list
+	 *          list the gap should be added to.
+	 * @param size
+	 *          size of the original space.
+	 */
+	private void maybeAddGap(List<LayoutInterval> list, int size, boolean forceSize) {
+		if (size > 0) {
+			LayoutInterval gapInterval = new LayoutInterval(SINGLE);
+			if (forceSize) {
+				layoutModel.setIntervalSize(gapInterval, size, size, size);
+			}
+			list.add(gapInterval);
+		}
+	}
 
-  private static boolean compatibleGroupAlignment(int groupAlign, int align) {
-    return groupAlign == align
-        || (groupAlign == LEADING || groupAlign == TRAILING)
-            && (align == LEADING || align == TRAILING || align == DEFAULT);
-  }
+	private static boolean compatibleGroupAlignment(int groupAlign, int align) {
+		return groupAlign == align
+				|| (groupAlign == LEADING || groupAlign == TRAILING)
+				&& (align == LEADING || align == TRAILING || align == DEFAULT);
+	}
 
-  private static boolean alignedIntervals(LayoutInterval interval1,
-      LayoutInterval interval2,
-      int alignment) {
-    LayoutInterval commonParent;
-    LayoutInterval otherInterval;
-    if (interval1.isParentOf(interval2)) {
-      commonParent = interval1;
-      otherInterval = interval2;
-    } else if (interval2.isParentOf(interval1)) {
-      commonParent = interval2;
-      otherInterval = interval1;
-    } else {
-      commonParent = interval1.getParent();
-      while (commonParent != null) {
-        if (!hasAlignmentInParent(interval1, alignment)) {
-          return false;
-        }
-        if (commonParent.isParentOf(interval2)) {
-          break;
-        }
-        interval1 = commonParent;
-        commonParent = interval1.getParent();
-      }
-      if (commonParent == null) {
-        return false;
-      }
-      otherInterval = interval2;
-    }
-    do {
-      if (!hasAlignmentInParent(otherInterval, alignment)) {
-        return false;
-      }
-      otherInterval = otherInterval.getParent();
-    } while (otherInterval != commonParent);
-    return true;
-  }
+	private static boolean alignedIntervals(LayoutInterval interval1,
+			LayoutInterval interval2,
+			int alignment) {
+		LayoutInterval commonParent;
+		LayoutInterval otherInterval;
+		if (interval1.isParentOf(interval2)) {
+			commonParent = interval1;
+			otherInterval = interval2;
+		} else if (interval2.isParentOf(interval1)) {
+			commonParent = interval2;
+			otherInterval = interval1;
+		} else {
+			commonParent = interval1.getParent();
+			while (commonParent != null) {
+				if (!hasAlignmentInParent(interval1, alignment)) {
+					return false;
+				}
+				if (commonParent.isParentOf(interval2)) {
+					break;
+				}
+				interval1 = commonParent;
+				commonParent = interval1.getParent();
+			}
+			if (commonParent == null) {
+				return false;
+			}
+			otherInterval = interval2;
+		}
+		do {
+			if (!hasAlignmentInParent(otherInterval, alignment)) {
+				return false;
+			}
+			otherInterval = otherInterval.getParent();
+		} while (otherInterval != commonParent);
+		return true;
+	}
 
-  private static boolean hasAlignmentInParent(LayoutInterval interval, int alignment) {
-    LayoutInterval parent = interval.getParent();
-    if (parent.isSequential()) {
-      if (alignment == LEADING) {
-        return parent.getSubInterval(0) == interval;
-      }
-      if (alignment == TRAILING) {
-        return parent.getSubInterval(parent.getSubIntervalCount() - 1) == interval;
-      }
-      return false;
-    } else { // parallel group
-      assert interval.getAlignment() != alignment
-          || compatibleGroupAlignment(parent.getGroupAlignment(), alignment);
-      return interval.getAlignment() == alignment || LayoutInterval.wantResize(interval);
-    }
-  }
+	private static boolean hasAlignmentInParent(LayoutInterval interval, int alignment) {
+		LayoutInterval parent = interval.getParent();
+		if (parent.isSequential()) {
+			if (alignment == LEADING) {
+				return parent.getSubInterval(0) == interval;
+			}
+			if (alignment == TRAILING) {
+				return parent.getSubInterval(parent.getSubIntervalCount() - 1) == interval;
+			}
+			return false;
+		} else { // parallel group
+			assert interval.getAlignment() != alignment
+					|| compatibleGroupAlignment(parent.getGroupAlignment(), alignment);
+			return interval.getAlignment() == alignment || LayoutInterval.wantResize(interval);
+		}
+	}
 
-  private static LayoutInterval getAlignSubstitute(LayoutInterval toAlignWith,
-      LayoutInterval commonParParent,
-      int alignment) {
-    assert alignment == LEADING || alignment == TRAILING;
-    while (toAlignWith != null
-        && LayoutInterval.getFirstParent(toAlignWith, PARALLEL) != commonParParent) {
-      if (LayoutInterval.isAlignedAtBorder(toAlignWith, alignment)) {
-        toAlignWith = toAlignWith.getParent();
-      } else {
-        return null;
-      }
-    }
-    return toAlignWith;
-  }
+	private static LayoutInterval getAlignSubstitute(LayoutInterval toAlignWith,
+			LayoutInterval commonParParent,
+			int alignment) {
+		assert alignment == LEADING || alignment == TRAILING;
+		while (toAlignWith != null
+				&& LayoutInterval.getFirstParent(toAlignWith, PARALLEL) != commonParParent) {
+			if (LayoutInterval.isAlignedAtBorder(toAlignWith, alignment)) {
+				toAlignWith = toAlignWith.getParent();
+			} else {
+				return null;
+			}
+		}
+		return toAlignWith;
+	}
 
-  /**
-   * Returns layout interval for the opposite dimension for the given layout interval of a layout
-   * component.
-   *
-   * @param interval
-   *          layout interval of some layout component.
-   * @return layout interval for the opposite dimension for the given layout interval of a layout
-   *         component.
-   */
-  private LayoutInterval oppositeComponentInterval(LayoutInterval interval) {
-    assert interval.isComponent();
-    LayoutComponent component = interval.getComponent();
-    int oppDimension = component.getLayoutInterval(HORIZONTAL) == interval ? VERTICAL : HORIZONTAL;
-    return component.getLayoutInterval(oppDimension);
-  }
+	/**
+	 * Returns layout interval for the opposite dimension for the given layout interval of a layout
+	 * component.
+	 *
+	 * @param interval
+	 *          layout interval of some layout component.
+	 * @return layout interval for the opposite dimension for the given layout interval of a layout
+	 *         component.
+	 */
+	private LayoutInterval oppositeComponentInterval(LayoutInterval interval) {
+		assert interval.isComponent();
+		LayoutComponent component = interval.getComponent();
+		int oppDimension = component.getLayoutInterval(HORIZONTAL) == interval ? VERTICAL : HORIZONTAL;
+		return component.getLayoutInterval(oppDimension);
+	}
 
-  private int shortenGap(LayoutInterval gap, int delta) {
-    assert gap.isEmptySpace();
-    int prefSize = gap.getPreferredSize();
-    if (prefSize == NOT_EXPLICITLY_DEFINED) {
-      return 0; // don't shorten paddings
-    } else {
-      int newPref = prefSize - delta;
-      newPref = newPref > 0 ? newPref : NOT_EXPLICITLY_DEFINED; // Use padding
-      if (LayoutInterval.canResize(gap)) {
-        layoutModel.setIntervalSize(gap, NOT_EXPLICITLY_DEFINED, newPref, Short.MAX_VALUE);
-      } else {
-        layoutModel.setIntervalSize(gap, USE_PREFERRED_SIZE, newPref, USE_PREFERRED_SIZE);
-      }
-      return prefSize > delta ? delta : prefSize;
-    }
-  }
+	private int shortenGap(LayoutInterval gap, int delta) {
+		assert gap.isEmptySpace();
+		int prefSize = gap.getPreferredSize();
+		if (prefSize == NOT_EXPLICITLY_DEFINED) {
+			return 0; // don't shorten paddings
+		} else {
+			int newPref = prefSize - delta;
+			newPref = newPref > 0 ? newPref : NOT_EXPLICITLY_DEFINED; // Use padding
+			if (LayoutInterval.canResize(gap)) {
+				layoutModel.setIntervalSize(gap, NOT_EXPLICITLY_DEFINED, newPref, Short.MAX_VALUE);
+			} else {
+				layoutModel.setIntervalSize(gap, USE_PREFERRED_SIZE, newPref, USE_PREFERRED_SIZE);
+			}
+			return prefSize > delta ? delta : prefSize;
+		}
+	}
 
-  private void returnRemovedIntervals(LayoutInterval parParent,
-      List<LayoutInterval> removed,
-      int dimension) {
-    LayoutRegion parRegion = parParent.getCurrentSpace();
-    Iterator<LayoutInterval> iter = removed.iterator();
-    while (iter.hasNext()) {
-      LayoutInterval interval = iter.next();
-      LayoutRegion region = interval.getCurrentSpace();
-      int pre = Math.max(
-          0,
-          region.positions[dimension][LEADING] - parRegion.positions[dimension][LEADING]);
-      int post = Math.max(
-          0,
-          parRegion.positions[dimension][TRAILING] - region.positions[dimension][TRAILING]);
-      if ((pre != 0 || post != 0) && !interval.isSequential()) {
-        LayoutInterval seq = new LayoutInterval(SEQUENTIAL);
-        if (interval.getAlignment() != BASELINE) {
-          layoutModel.setIntervalAlignment(seq, interval.getAlignment());
-        }
-        layoutModel.setIntervalAlignment(interval, DEFAULT);
-        layoutModel.addInterval(interval, seq, -1);
-        interval = seq;
-      }
-      // interval.isSequence() by now - remove boundary empty spaces
-      if (pre != 0) {
-        LayoutInterval first = interval.getSubInterval(0);
-        if (first.isEmptySpace()) {
-          layoutModel.removeInterval(first);
-          region = interval.getSubInterval(0).getCurrentSpace();
-          pre = Math.max(
-              0,
-              region.positions[dimension][LEADING] - parRegion.positions[dimension][LEADING]);
-        }
-      }
-      if (post != 0) {
-        LayoutInterval last = interval.getSubInterval(interval.getSubIntervalCount() - 1);
-        if (last.isEmptySpace()) {
-          layoutModel.removeInterval(last);
-          region = interval.getSubInterval(interval.getSubIntervalCount() - 1).getCurrentSpace();
-          post = Math.max(
-              0,
-              parRegion.positions[dimension][TRAILING] - region.positions[dimension][TRAILING]);
-        }
-      }
-      // Insert new empty spaces
-      if (pre != 0) {
-        LayoutInterval gap = new LayoutInterval(SINGLE);
-        gap.setSize(pre);
-        if (interval.getAlignment() == TRAILING) {
-          designer.setIntervalResizing(gap, true);
-        }
-        layoutModel.addInterval(gap, interval, 0);
-      }
-      if (post != 0) {
-        LayoutInterval gap = new LayoutInterval(SINGLE);
-        gap.setSize(post);
-        if (interval.getAlignment() == LEADING) {
-          designer.setIntervalResizing(gap, true);
-        }
-        layoutModel.addInterval(gap, interval, -1);
-      }
-      // Insert into parParent
-      layoutModel.addInterval(interval, parParent, -1);
-    }
-  }
+	private void returnRemovedIntervals(LayoutInterval parParent,
+			List<LayoutInterval> removed,
+			int dimension) {
+		LayoutRegion parRegion = parParent.getCurrentSpace();
+		Iterator<LayoutInterval> iter = removed.iterator();
+		while (iter.hasNext()) {
+			LayoutInterval interval = iter.next();
+			LayoutRegion region = interval.getCurrentSpace();
+			int pre = Math.max(
+					0,
+					region.positions[dimension][LEADING] - parRegion.positions[dimension][LEADING]);
+			int post = Math.max(
+					0,
+					parRegion.positions[dimension][TRAILING] - region.positions[dimension][TRAILING]);
+			if ((pre != 0 || post != 0) && !interval.isSequential()) {
+				LayoutInterval seq = new LayoutInterval(SEQUENTIAL);
+				if (interval.getAlignment() != BASELINE) {
+					layoutModel.setIntervalAlignment(seq, interval.getAlignment());
+				}
+				layoutModel.setIntervalAlignment(interval, DEFAULT);
+				layoutModel.addInterval(interval, seq, -1);
+				interval = seq;
+			}
+			// interval.isSequence() by now - remove boundary empty spaces
+			if (pre != 0) {
+				LayoutInterval first = interval.getSubInterval(0);
+				if (first.isEmptySpace()) {
+					layoutModel.removeInterval(first);
+					region = interval.getSubInterval(0).getCurrentSpace();
+					pre = Math.max(
+							0,
+							region.positions[dimension][LEADING] - parRegion.positions[dimension][LEADING]);
+				}
+			}
+			if (post != 0) {
+				LayoutInterval last = interval.getSubInterval(interval.getSubIntervalCount() - 1);
+				if (last.isEmptySpace()) {
+					layoutModel.removeInterval(last);
+					region = interval.getSubInterval(interval.getSubIntervalCount() - 1).getCurrentSpace();
+					post = Math.max(
+							0,
+							parRegion.positions[dimension][TRAILING] - region.positions[dimension][TRAILING]);
+				}
+			}
+			// Insert new empty spaces
+			if (pre != 0) {
+				LayoutInterval gap = new LayoutInterval(SINGLE);
+				gap.setSize(pre);
+				if (interval.getAlignment() == TRAILING) {
+					designer.setIntervalResizing(gap, true);
+				}
+				layoutModel.addInterval(gap, interval, 0);
+			}
+			if (post != 0) {
+				LayoutInterval gap = new LayoutInterval(SINGLE);
+				gap.setSize(post);
+				if (interval.getAlignment() == LEADING) {
+					designer.setIntervalResizing(gap, true);
+				}
+				layoutModel.addInterval(gap, interval, -1);
+			}
+			// Insert into parParent
+			layoutModel.addInterval(interval, parParent, -1);
+		}
+	}
 
-  private void setAlignmentAccordingEffectiveAlignment(LayoutInterval aligned,
-      LayoutInterval interval) {
-    if (interval == null) {
-      return;
-    }
-    int alignment = LayoutInterval.getEffectiveAlignment(interval);
-    if (alignment == LEADING || alignment == TRAILING) {
-      layoutModel.setIntervalAlignment(aligned, alignment);
-    }
-  }
+	private void setAlignmentAccordingEffectiveAlignment(LayoutInterval aligned,
+			LayoutInterval interval) {
+		if (interval == null) {
+			return;
+		}
+		int alignment = LayoutInterval.getEffectiveAlignment(interval);
+		if (alignment == LEADING || alignment == TRAILING) {
+			layoutModel.setIntervalAlignment(aligned, alignment);
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.layout.group/netbeans-src/org/netbeans/modules/form/layoutdesign/LayoutComponent.java b/org.eclipse.wb.layout.group/netbeans-src/org/netbeans/modules/form/layoutdesign/LayoutComponent.java
index f4532bad0..9824facb9 100644
--- a/org.eclipse.wb.layout.group/netbeans-src/org/netbeans/modules/form/layoutdesign/LayoutComponent.java
+++ b/org.eclipse.wb.layout.group/netbeans-src/org/netbeans/modules/form/layoutdesign/LayoutComponent.java
@@ -52,366 +52,366 @@
  * @author Tomas Pavek
  */
 public final class LayoutComponent implements LayoutConstants {
-  // Identification of the component in the model
-  private String componentId;
-  // The parent component of this component
-  private LayoutComponent parentComponent;
-  // Layout intervals representing the component in the layout hierarchy.
-  // There is one interval for each dimension.
-  private final LayoutInterval[] layoutIntervals;
-  // Potential resizability of the component in the design area.
-  private boolean[] resizability;
-  // Root layout intervals of a container layout. There is one interval for
-  // each dimension. Defined by components that are layout containers, i.e.
-  // managing layout of their subcomponents. Otherwise the array is null.
-  private List<LayoutInterval[]> layoutRoots;
-  // Subcomponents of this component.
-  private List<LayoutComponent> subComponents;
-  private final PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport(this);
-  // horizontal size-link
-  private int horizontalLinkId = NOT_EXPLICITLY_DEFINED;
-  // vertical size-link
-  private int verticalLinkId = NOT_EXPLICITLY_DEFINED;
-
-  // -----
-  // setup
-  public LayoutComponent(String id, boolean isContainer) {
-    if (id == null) {
-      throw new NullPointerException();
-    }
-    componentId = id;
-    layoutIntervals = new LayoutInterval[DIM_COUNT];
-    for (int i = 0; i < DIM_COUNT; i++) {
-      layoutIntervals[i] = new LayoutInterval(SINGLE);
-      layoutIntervals[i].setComponent(this);
-      layoutIntervals[i].setSizes(USE_PREFERRED_SIZE, NOT_EXPLICITLY_DEFINED, USE_PREFERRED_SIZE);
-    }
-    if (isContainer) {
-      createRoots();
-    }
-  }
-
-  public LayoutComponent(String id, boolean isContainer, int initialWidth, int initialHeight) {
-    this(id, isContainer);
-    if (isContainer) {
-      LayoutInterval[] defaultRoots = layoutRoots.get(0);
-      for (int i = 0; i < DIM_COUNT; i++) {
-        LayoutInterval gap = new LayoutInterval(SINGLE);
-        gap.setSizes(0, i == HORIZONTAL ? initialWidth : initialHeight, Short.MAX_VALUE);
-        defaultRoots[i].add(gap, 0);
-      }
-    } else {
-      layoutIntervals[HORIZONTAL].setPreferredSize(initialWidth);
-      layoutIntervals[VERTICAL].setPreferredSize(initialHeight);
-    }
-  }
-
-  private void createRoots() {
-    layoutRoots = new LinkedList<LayoutInterval[]>();
-    addNewLayoutRoots();
-  }
-
-  // -----
-  void setId(String id) {
-    componentId = id;
-  }
-
-  public String getId() {
-    return componentId;
-  }
-
-  public LayoutComponent getParent() {
-    return parentComponent;
-  }
-
-  public boolean isParentOf(LayoutComponent comp) {
-    do {
-      comp = comp.getParent();
-      if (comp == this) {
-        return true;
-      }
-    } while (comp != null);
-    return false;
-  }
-
-  static LayoutComponent getCommonParent(LayoutComponent comp1, LayoutComponent comp2) {
-    // Find all parents of given components
-    Iterator<LayoutComponent> parents1 = parentsOfComponent(comp1).iterator();
-    Iterator<LayoutComponent> parents2 = parentsOfComponent(comp2).iterator();
-    LayoutComponent parent1 = parents1.next();
-    LayoutComponent parent2 = parents2.next();
-    // Candidate for the common parent
-    LayoutComponent parent = null;
-    while (parent1 == parent2) {
-      parent = parent1;
-      if (parents1.hasNext()) {
-        parent1 = parents1.next();
-      } else {
-        break;
-      }
-      if (parents2.hasNext()) {
-        parent2 = parents2.next();
-      } else {
-        break;
-      }
-    }
-    return parent;
-  }
-
-  private static List<LayoutComponent> parentsOfComponent(LayoutComponent comp) {
-    List<LayoutComponent> parents = new LinkedList<LayoutComponent>();
-    while (comp != null) {
-      parents.add(0, comp);
-      comp = comp.getParent();
-    }
-    return parents;
-  }
-
-  public LayoutInterval getLayoutInterval(int dimension) {
-    return layoutIntervals[dimension];
-  }
-
-  void setLayoutInterval(LayoutInterval interval, int dimension) {
-    layoutIntervals[dimension] = interval;
-  }
-
-  public boolean isLayoutContainer() {
-    return layoutRoots != null;
-  }
-
-  void setResizability(boolean[] resizability) {
-    this.resizability = resizability;
-  }
-
-  boolean[] getResizability() {
-    return resizability;
-  }
-
-  LayoutInterval[] getParentRoots() {
-    return parentComponent != null ? parentComponent.getLayoutRoots(layoutIntervals[0]) : null;
-  }
-
-  // -----
-  // subcomponents
-  public List<LayoutComponent> getSubcomponents() {
-    return subComponents != null && subComponents.size() > 0
-        ? Collections.unmodifiableList(subComponents)
-        : Collections.EMPTY_LIST;
-  }
-
-  int getSubComponentCount() {
-    return subComponents == null ? 0 : subComponents.size();
-  }
-
-  LayoutComponent getSubComponent(int index) {
-    return subComponents.get(index);
-  }
-
-  int indexOf(LayoutComponent comp) {
-    return subComponents != null ? subComponents.indexOf(comp) : -1;
-  }
-
-  //    int add(LayoutComponent comp) {
-  //        return add(comp, -1);
-  //    }
-  int addComponent(LayoutComponent comp, int index) {
-    assert isLayoutContainer();
-    if (subComponents == null) {
-      subComponents = new LinkedList<LayoutComponent>();
-    }
-    if (index < 0) {
-      index = subComponents.size();
-    }
-    subComponents.add(index, comp);
-    comp.parentComponent = this;
-    return index;
-  }
-
-  int removeComponent(LayoutComponent comp) {
-    if (subComponents != null) {
-      Iterator it = subComponents.iterator();
-      int index = -1;
-      while (it.hasNext()) {
-        index++;
-        if (comp == it.next()) {
-          it.remove();
-          comp.parentComponent = null;
-          return index;
-        }
-      }
-    }
-    return -1;
-  }
-
-  // -----
-  // container's layout roots
-  public int getLayoutRootCount() {
-    return layoutRoots != null ? layoutRoots.size() : 0;
-  }
-
-  public LayoutInterval getLayoutRoot(int rootIndex, int dimension) {
-    return layoutRoots.get(rootIndex)[dimension];
-  }
-
-  LayoutInterval getDefaultLayoutRoot(int dimension) {
-    return layoutRoots.get(0)[dimension];
-  }
-
-  public List<LayoutInterval[]> getLayoutRoots() {
-    return layoutRoots;
-  }
-
-  void setLayoutRoots(List<LayoutInterval[]> roots) {
-    if (roots == null && layoutRoots != null) {
-      // instead of no roots create default empty roots (to keep this a container)
-      // for no roots use setLayoutContainer(false, null)
-      createRoots();
-    } else {
-      layoutRoots = roots;
-    }
-  }
-
-  LayoutInterval[] getLayoutRoots(LayoutInterval interval) {
-    interval = LayoutInterval.getRoot(interval);
-    for (LayoutInterval[] roots : layoutRoots) {
-      for (int dim = 0; dim < DIM_COUNT; dim++) {
-        if (interval == roots[dim]) {
-          return roots;
-        }
-      }
-    }
-    return null;
-  }
-
-  int getLayoutRootsIndex(LayoutInterval interval) {
-    interval = LayoutInterval.getRoot(interval);
-    int index = -1;
-    for (LayoutInterval[] roots : layoutRoots) {
-      index++;
-      for (int dim = 0; dim < DIM_COUNT; dim++) {
-        if (interval == roots[dim]) {
-          return index;
-        }
-      }
-    }
-    return -1;
-  }
-
-  void addLayoutRoots(LayoutInterval[] roots, int index) {
-    if (index < 0) {
-      index = layoutRoots.size();
-    }
-    layoutRoots.add(index, roots);
-  }
-
-  int removeLayoutRoots(LayoutInterval[] roots) {
-    Iterator<LayoutInterval[]> it = layoutRoots.iterator();
-    int index = -1;
-    while (it.hasNext()) {
-      index++;
-      if (roots == it.next()) {
-        it.remove();
-        return index;
-      }
-    }
-    return -1;
-  }
-
-  LayoutInterval[] addNewLayoutRoots() {
-    LayoutInterval[] roots = new LayoutInterval[DIM_COUNT];
-    for (int i = 0; i < DIM_COUNT; i++) {
-      roots[i] = new LayoutInterval(PARALLEL);
-    }
-    layoutRoots.add(roots);
-    return roots;
-  }
-
-  void setLayoutContainer(boolean isContainer, List<LayoutInterval[]> roots) {
-    if (isContainer != isLayoutContainer()) {
-      if (isContainer) {
-        if (roots == null) {
-          createRoots();
-        } else {
-          layoutRoots = roots;
-        }
-      } else {
-        layoutRoots = null;
-        subComponents = null;
-      }
-    }
-  }
-
-  // -----
-  // current state of the layout - current position and size of component
-  // kept to be available quickly for the layout designer
-  void setCurrentBounds(Rectangle bounds, int baseline) {
-    LayoutRegion space = layoutIntervals[0].getCurrentSpace();
-    space.set(bounds, baseline > 0 ? bounds.y + baseline : LayoutRegion.UNKNOWN);
-    for (int i = 1; i < layoutIntervals.length; i++) {
-      layoutIntervals[i].setCurrentSpace(space);
-    }
-  }
-
-  void setCurrentInterior(Rectangle bounds) {
-    LayoutRegion space = null;
-    for (LayoutInterval[] roots : layoutRoots) {
-      for (int i = 0; i < roots.length; i++) {
-        if (space == null) {
-          space = roots[i].getCurrentSpace();
-          space.set(bounds, LayoutRegion.UNKNOWN);
-        } else {
-          roots[i].setCurrentSpace(space);
-        }
-      }
-    }
-  }
-
-  // -----
-  /**
-   * @return whether this intervals size is linked with some other component in a direction
-   *         horizontal or vertical
-   */
-  public boolean isLinkSized(int dimension) {
-    if (dimension == HORIZONTAL) {
-      return NOT_EXPLICITLY_DEFINED != horizontalLinkId;
-    }
-    return NOT_EXPLICITLY_DEFINED != verticalLinkId;
-  }
-
-  /**
-   * @return whether this intervals size is linked with some other component in a direction
-   *         horizontal or vertical
-   */
-  public int getLinkSizeId(int dimension) {
-    if (dimension == HORIZONTAL) {
-      return horizontalLinkId;
-    }
-    return verticalLinkId;
-  }
-
-  /**
-   * @return whether this intervals size is linked with some other component in a direction
-   *         horizontal or vertical
-   */
-  public void setLinkSizeId(int id, int dimension) {
-    if (dimension == HORIZONTAL) {
-      horizontalLinkId = id;
-    } else {
-      verticalLinkId = id;
-    }
-  }
-
-  // -----
-  // listener support
-  public void addPropertyChangeListener(PropertyChangeListener listener) {
-    propertyChangeSupport.addPropertyChangeListener(listener);
-  }
-
-  public void removePropertyChangeListener(PropertyChangeListener listener) {
-    propertyChangeSupport.removePropertyChangeListener(listener);
-  }
-
-  void firePropertyChange(String propertyName, Object oldValue, Object newValue) {
-    propertyChangeSupport.firePropertyChange(propertyName, oldValue, newValue);
-  }
+	// Identification of the component in the model
+	private String componentId;
+	// The parent component of this component
+	private LayoutComponent parentComponent;
+	// Layout intervals representing the component in the layout hierarchy.
+	// There is one interval for each dimension.
+	private final LayoutInterval[] layoutIntervals;
+	// Potential resizability of the component in the design area.
+	private boolean[] resizability;
+	// Root layout intervals of a container layout. There is one interval for
+	// each dimension. Defined by components that are layout containers, i.e.
+	// managing layout of their subcomponents. Otherwise the array is null.
+	private List<LayoutInterval[]> layoutRoots;
+	// Subcomponents of this component.
+	private List<LayoutComponent> subComponents;
+	private final PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport(this);
+	// horizontal size-link
+	private int horizontalLinkId = NOT_EXPLICITLY_DEFINED;
+	// vertical size-link
+	private int verticalLinkId = NOT_EXPLICITLY_DEFINED;
+
+	// -----
+	// setup
+	public LayoutComponent(String id, boolean isContainer) {
+		if (id == null) {
+			throw new NullPointerException();
+		}
+		componentId = id;
+		layoutIntervals = new LayoutInterval[DIM_COUNT];
+		for (int i = 0; i < DIM_COUNT; i++) {
+			layoutIntervals[i] = new LayoutInterval(SINGLE);
+			layoutIntervals[i].setComponent(this);
+			layoutIntervals[i].setSizes(USE_PREFERRED_SIZE, NOT_EXPLICITLY_DEFINED, USE_PREFERRED_SIZE);
+		}
+		if (isContainer) {
+			createRoots();
+		}
+	}
+
+	public LayoutComponent(String id, boolean isContainer, int initialWidth, int initialHeight) {
+		this(id, isContainer);
+		if (isContainer) {
+			LayoutInterval[] defaultRoots = layoutRoots.get(0);
+			for (int i = 0; i < DIM_COUNT; i++) {
+				LayoutInterval gap = new LayoutInterval(SINGLE);
+				gap.setSizes(0, i == HORIZONTAL ? initialWidth : initialHeight, Short.MAX_VALUE);
+				defaultRoots[i].add(gap, 0);
+			}
+		} else {
+			layoutIntervals[HORIZONTAL].setPreferredSize(initialWidth);
+			layoutIntervals[VERTICAL].setPreferredSize(initialHeight);
+		}
+	}
+
+	private void createRoots() {
+		layoutRoots = new LinkedList<LayoutInterval[]>();
+		addNewLayoutRoots();
+	}
+
+	// -----
+	void setId(String id) {
+		componentId = id;
+	}
+
+	public String getId() {
+		return componentId;
+	}
+
+	public LayoutComponent getParent() {
+		return parentComponent;
+	}
+
+	public boolean isParentOf(LayoutComponent comp) {
+		do {
+			comp = comp.getParent();
+			if (comp == this) {
+				return true;
+			}
+		} while (comp != null);
+		return false;
+	}
+
+	static LayoutComponent getCommonParent(LayoutComponent comp1, LayoutComponent comp2) {
+		// Find all parents of given components
+		Iterator<LayoutComponent> parents1 = parentsOfComponent(comp1).iterator();
+		Iterator<LayoutComponent> parents2 = parentsOfComponent(comp2).iterator();
+		LayoutComponent parent1 = parents1.next();
+		LayoutComponent parent2 = parents2.next();
+		// Candidate for the common parent
+		LayoutComponent parent = null;
+		while (parent1 == parent2) {
+			parent = parent1;
+			if (parents1.hasNext()) {
+				parent1 = parents1.next();
+			} else {
+				break;
+			}
+			if (parents2.hasNext()) {
+				parent2 = parents2.next();
+			} else {
+				break;
+			}
+		}
+		return parent;
+	}
+
+	private static List<LayoutComponent> parentsOfComponent(LayoutComponent comp) {
+		List<LayoutComponent> parents = new LinkedList<LayoutComponent>();
+		while (comp != null) {
+			parents.add(0, comp);
+			comp = comp.getParent();
+		}
+		return parents;
+	}
+
+	public LayoutInterval getLayoutInterval(int dimension) {
+		return layoutIntervals[dimension];
+	}
+
+	void setLayoutInterval(LayoutInterval interval, int dimension) {
+		layoutIntervals[dimension] = interval;
+	}
+
+	public boolean isLayoutContainer() {
+		return layoutRoots != null;
+	}
+
+	void setResizability(boolean[] resizability) {
+		this.resizability = resizability;
+	}
+
+	boolean[] getResizability() {
+		return resizability;
+	}
+
+	LayoutInterval[] getParentRoots() {
+		return parentComponent != null ? parentComponent.getLayoutRoots(layoutIntervals[0]) : null;
+	}
+
+	// -----
+	// subcomponents
+	public List<LayoutComponent> getSubcomponents() {
+		return subComponents != null && subComponents.size() > 0
+				? Collections.unmodifiableList(subComponents)
+						: Collections.EMPTY_LIST;
+	}
+
+	int getSubComponentCount() {
+		return subComponents == null ? 0 : subComponents.size();
+	}
+
+	LayoutComponent getSubComponent(int index) {
+		return subComponents.get(index);
+	}
+
+	int indexOf(LayoutComponent comp) {
+		return subComponents != null ? subComponents.indexOf(comp) : -1;
+	}
+
+	//    int add(LayoutComponent comp) {
+	//        return add(comp, -1);
+	//    }
+	int addComponent(LayoutComponent comp, int index) {
+		assert isLayoutContainer();
+		if (subComponents == null) {
+			subComponents = new LinkedList<LayoutComponent>();
+		}
+		if (index < 0) {
+			index = subComponents.size();
+		}
+		subComponents.add(index, comp);
+		comp.parentComponent = this;
+		return index;
+	}
+
+	int removeComponent(LayoutComponent comp) {
+		if (subComponents != null) {
+			Iterator it = subComponents.iterator();
+			int index = -1;
+			while (it.hasNext()) {
+				index++;
+				if (comp == it.next()) {
+					it.remove();
+					comp.parentComponent = null;
+					return index;
+				}
+			}
+		}
+		return -1;
+	}
+
+	// -----
+	// container's layout roots
+	public int getLayoutRootCount() {
+		return layoutRoots != null ? layoutRoots.size() : 0;
+	}
+
+	public LayoutInterval getLayoutRoot(int rootIndex, int dimension) {
+		return layoutRoots.get(rootIndex)[dimension];
+	}
+
+	LayoutInterval getDefaultLayoutRoot(int dimension) {
+		return layoutRoots.get(0)[dimension];
+	}
+
+	public List<LayoutInterval[]> getLayoutRoots() {
+		return layoutRoots;
+	}
+
+	void setLayoutRoots(List<LayoutInterval[]> roots) {
+		if (roots == null && layoutRoots != null) {
+			// instead of no roots create default empty roots (to keep this a container)
+			// for no roots use setLayoutContainer(false, null)
+			createRoots();
+		} else {
+			layoutRoots = roots;
+		}
+	}
+
+	LayoutInterval[] getLayoutRoots(LayoutInterval interval) {
+		interval = LayoutInterval.getRoot(interval);
+		for (LayoutInterval[] roots : layoutRoots) {
+			for (int dim = 0; dim < DIM_COUNT; dim++) {
+				if (interval == roots[dim]) {
+					return roots;
+				}
+			}
+		}
+		return null;
+	}
+
+	int getLayoutRootsIndex(LayoutInterval interval) {
+		interval = LayoutInterval.getRoot(interval);
+		int index = -1;
+		for (LayoutInterval[] roots : layoutRoots) {
+			index++;
+			for (int dim = 0; dim < DIM_COUNT; dim++) {
+				if (interval == roots[dim]) {
+					return index;
+				}
+			}
+		}
+		return -1;
+	}
+
+	void addLayoutRoots(LayoutInterval[] roots, int index) {
+		if (index < 0) {
+			index = layoutRoots.size();
+		}
+		layoutRoots.add(index, roots);
+	}
+
+	int removeLayoutRoots(LayoutInterval[] roots) {
+		Iterator<LayoutInterval[]> it = layoutRoots.iterator();
+		int index = -1;
+		while (it.hasNext()) {
+			index++;
+			if (roots == it.next()) {
+				it.remove();
+				return index;
+			}
+		}
+		return -1;
+	}
+
+	LayoutInterval[] addNewLayoutRoots() {
+		LayoutInterval[] roots = new LayoutInterval[DIM_COUNT];
+		for (int i = 0; i < DIM_COUNT; i++) {
+			roots[i] = new LayoutInterval(PARALLEL);
+		}
+		layoutRoots.add(roots);
+		return roots;
+	}
+
+	void setLayoutContainer(boolean isContainer, List<LayoutInterval[]> roots) {
+		if (isContainer != isLayoutContainer()) {
+			if (isContainer) {
+				if (roots == null) {
+					createRoots();
+				} else {
+					layoutRoots = roots;
+				}
+			} else {
+				layoutRoots = null;
+				subComponents = null;
+			}
+		}
+	}
+
+	// -----
+	// current state of the layout - current position and size of component
+	// kept to be available quickly for the layout designer
+	void setCurrentBounds(Rectangle bounds, int baseline) {
+		LayoutRegion space = layoutIntervals[0].getCurrentSpace();
+		space.set(bounds, baseline > 0 ? bounds.y + baseline : LayoutRegion.UNKNOWN);
+		for (int i = 1; i < layoutIntervals.length; i++) {
+			layoutIntervals[i].setCurrentSpace(space);
+		}
+	}
+
+	void setCurrentInterior(Rectangle bounds) {
+		LayoutRegion space = null;
+		for (LayoutInterval[] roots : layoutRoots) {
+			for (int i = 0; i < roots.length; i++) {
+				if (space == null) {
+					space = roots[i].getCurrentSpace();
+					space.set(bounds, LayoutRegion.UNKNOWN);
+				} else {
+					roots[i].setCurrentSpace(space);
+				}
+			}
+		}
+	}
+
+	// -----
+	/**
+	 * @return whether this intervals size is linked with some other component in a direction
+	 *         horizontal or vertical
+	 */
+	public boolean isLinkSized(int dimension) {
+		if (dimension == HORIZONTAL) {
+			return NOT_EXPLICITLY_DEFINED != horizontalLinkId;
+		}
+		return NOT_EXPLICITLY_DEFINED != verticalLinkId;
+	}
+
+	/**
+	 * @return whether this intervals size is linked with some other component in a direction
+	 *         horizontal or vertical
+	 */
+	public int getLinkSizeId(int dimension) {
+		if (dimension == HORIZONTAL) {
+			return horizontalLinkId;
+		}
+		return verticalLinkId;
+	}
+
+	/**
+	 * @return whether this intervals size is linked with some other component in a direction
+	 *         horizontal or vertical
+	 */
+	public void setLinkSizeId(int id, int dimension) {
+		if (dimension == HORIZONTAL) {
+			horizontalLinkId = id;
+		} else {
+			verticalLinkId = id;
+		}
+	}
+
+	// -----
+	// listener support
+	public void addPropertyChangeListener(PropertyChangeListener listener) {
+		propertyChangeSupport.addPropertyChangeListener(listener);
+	}
+
+	public void removePropertyChangeListener(PropertyChangeListener listener) {
+		propertyChangeSupport.removePropertyChangeListener(listener);
+	}
+
+	void firePropertyChange(String propertyName, Object oldValue, Object newValue) {
+		propertyChangeSupport.firePropertyChange(propertyName, oldValue, newValue);
+	}
 }
diff --git a/org.eclipse.wb.layout.group/netbeans-src/org/netbeans/modules/form/layoutdesign/LayoutConstants.java b/org.eclipse.wb.layout.group/netbeans-src/org/netbeans/modules/form/layoutdesign/LayoutConstants.java
index e59d80a39..1617f6e0f 100644
--- a/org.eclipse.wb.layout.group/netbeans-src/org/netbeans/modules/form/layoutdesign/LayoutConstants.java
+++ b/org.eclipse.wb.layout.group/netbeans-src/org/netbeans/modules/form/layoutdesign/LayoutConstants.java
@@ -34,74 +34,74 @@
  * @author Tomas Pavek
  */
 public interface LayoutConstants {
-  // size constants
-  /**
-   * Indicates a size or position not defined in the layout model; it must be obtained elsewhere
-   * (e.g. from a real component).
-   */
-  int NOT_EXPLICITLY_DEFINED = -1;
-  /**
-   * Specifies that a min or max size value should be the same as the preferred size value.
-   */
-  int USE_PREFERRED_SIZE = -2;
+	// size constants
+	/**
+	 * Indicates a size or position not defined in the layout model; it must be obtained elsewhere
+	 * (e.g. from a real component).
+	 */
+	int NOT_EXPLICITLY_DEFINED = -1;
+	/**
+	 * Specifies that a min or max size value should be the same as the preferred size value.
+	 */
+	int USE_PREFERRED_SIZE = -2;
 
-  /**
-   * Possible types of preferred default gaps (paddings).
-   */
-  enum PaddingType {
-    RELATED, UNRELATED, INDENT, SEPARATE
-  }
+	/**
+	 * Possible types of preferred default gaps (paddings).
+	 */
+	enum PaddingType {
+		RELATED, UNRELATED, INDENT, SEPARATE
+	}
 
-  // keep this order for old tests using int (so the index matches the old number)
-  final PaddingType[] PADDINGS = {
-      PaddingType.RELATED,
-      PaddingType.UNRELATED,
-      PaddingType.INDENT,
-      PaddingType.SEPARATE};
-  // structure type constants
-  /**
-   * Indicates a single layout interval without internal structure.
-   */
-  int SINGLE = 101;
-  /**
-   * Indicates a layout interval containing a sequence of sub-intervals (placed one after anoother).
-   */
-  int SEQUENTIAL = 102;
-  /**
-   * Indicates a layout interval containing sub-intervals arranged parallely.
-   */
-  int PARALLEL = 103;
-  // alignment constants (independent on orientation/axis)
-  // also serves the role of index to array of positions
-  int DEFAULT = -1;
-  int LEADING = 0;
-  int TRAILING = 1;
-  int CENTER = 2;
-  int BASELINE = 3;
-  // orientation constants (dimensions)
-  /**
-   * Constant/index of the horizontal orientation (X axis).
-   */
-  int HORIZONTAL = 0;
-  /**
-   * Constant/index of the vertical orientation (Y axis).
-   */
-  int VERTICAL = 1;
-  /**
-   * The number of dimensions. Obviously 2 ;)
-   */
-  int DIM_COUNT = 2;
-  // other constants
-  //    int MAX_OUT = Short.MAX_VALUE;
-  //    int MIN_OUT = Short.MIN_VALUE;
-  String PROP_HORIZONTAL_MIN_SIZE = "horizontalMinSize"; // NOI18N
-  String PROP_HORIZONTAL_PREF_SIZE = "horizontalPrefSize"; // NOI18N
-  String PROP_HORIZONTAL_MAX_SIZE = "horizontalMaxSize"; // NOI18N
-  String PROP_VERTICAL_MIN_SIZE = "verticalMinSize"; // NOI18N
-  String PROP_VERTICAL_PREF_SIZE = "verticalPrefSize"; // NOI18N
-  String PROP_VERTICAL_MAX_SIZE = "verticalMaxSize"; // NOI18N
-  // are components in same linksizegroup?
-  int INVALID = -1;
-  int FALSE = 0;
-  int TRUE = 1;
+	// keep this order for old tests using int (so the index matches the old number)
+	final PaddingType[] PADDINGS = {
+			PaddingType.RELATED,
+			PaddingType.UNRELATED,
+			PaddingType.INDENT,
+			PaddingType.SEPARATE};
+	// structure type constants
+	/**
+	 * Indicates a single layout interval without internal structure.
+	 */
+	int SINGLE = 101;
+	/**
+	 * Indicates a layout interval containing a sequence of sub-intervals (placed one after anoother).
+	 */
+	int SEQUENTIAL = 102;
+	/**
+	 * Indicates a layout interval containing sub-intervals arranged parallely.
+	 */
+	int PARALLEL = 103;
+	// alignment constants (independent on orientation/axis)
+	// also serves the role of index to array of positions
+	int DEFAULT = -1;
+	int LEADING = 0;
+	int TRAILING = 1;
+	int CENTER = 2;
+	int BASELINE = 3;
+	// orientation constants (dimensions)
+	/**
+	 * Constant/index of the horizontal orientation (X axis).
+	 */
+	int HORIZONTAL = 0;
+	/**
+	 * Constant/index of the vertical orientation (Y axis).
+	 */
+	int VERTICAL = 1;
+	/**
+	 * The number of dimensions. Obviously 2 ;)
+	 */
+	int DIM_COUNT = 2;
+	// other constants
+	//    int MAX_OUT = Short.MAX_VALUE;
+	//    int MIN_OUT = Short.MIN_VALUE;
+	String PROP_HORIZONTAL_MIN_SIZE = "horizontalMinSize"; // NOI18N
+	String PROP_HORIZONTAL_PREF_SIZE = "horizontalPrefSize"; // NOI18N
+	String PROP_HORIZONTAL_MAX_SIZE = "horizontalMaxSize"; // NOI18N
+	String PROP_VERTICAL_MIN_SIZE = "verticalMinSize"; // NOI18N
+	String PROP_VERTICAL_PREF_SIZE = "verticalPrefSize"; // NOI18N
+	String PROP_VERTICAL_MAX_SIZE = "verticalMaxSize"; // NOI18N
+	// are components in same linksizegroup?
+	int INVALID = -1;
+	int FALSE = 0;
+	int TRUE = 1;
 }
diff --git a/org.eclipse.wb.layout.group/netbeans-src/org/netbeans/modules/form/layoutdesign/LayoutDesigner.java b/org.eclipse.wb.layout.group/netbeans-src/org/netbeans/modules/form/layoutdesign/LayoutDesigner.java
index 4f919400d..c8d6fa6fa 100644
--- a/org.eclipse.wb.layout.group/netbeans-src/org/netbeans/modules/form/layoutdesign/LayoutDesigner.java
+++ b/org.eclipse.wb.layout.group/netbeans-src/org/netbeans/modules/form/layoutdesign/LayoutDesigner.java
@@ -45,3147 +45,3147 @@
 import java.util.Set;
 
 public class LayoutDesigner implements LayoutConstants {
-  private final LayoutModel layoutModel;
-  private final VisualMapper visualMapper;
-  private LayoutDragger dragger;
-  private final LayoutOperations operations;
-  private final Listener modelListener;
-  private boolean imposeSize = true;
-  private boolean optimizeStructure = true;
-  private boolean visualStateUpToDate;
+	private final LayoutModel layoutModel;
+	private final VisualMapper visualMapper;
+	private LayoutDragger dragger;
+	private final LayoutOperations operations;
+	private final Listener modelListener;
+	private boolean imposeSize = true;
+	private boolean optimizeStructure = true;
+	private boolean visualStateUpToDate;
 
-  // -----
-  public LayoutDesigner(LayoutModel model, VisualMapper mapper) {
-    layoutModel = model;
-    visualMapper = mapper;
-    operations = new LayoutOperations(model, mapper);
-    modelListener = new Listener();
-    modelListener.activate();
-  }
+	// -----
+	public LayoutDesigner(LayoutModel model, VisualMapper mapper) {
+		layoutModel = model;
+		visualMapper = mapper;
+		operations = new LayoutOperations(model, mapper);
+		modelListener = new Listener();
+		modelListener.activate();
+	}
 
-  // -------
-  // updates of the current visual state stored in the model
-  public boolean updateCurrentState() {
-    Object changeMark = layoutModel.getChangeMark();
-    boolean changeRequired = imposeSize || optimizeStructure;
-    Set<LayoutComponent> updatedContainers = changeRequired ? new HashSet<LayoutComponent>() : null;
-    try {
-      if (changeRequired) {
-        modelListener.deactivate(); // some changes may happen...
-        destroyRedundantGroups(updatedContainers);
-        operations.mergeAdjacentGaps(updatedContainers);
-      }
-      updatePositions(updatedContainers);
-    } finally {
-      if (changeRequired) {
-        modelListener.activate();
-      }
-    }
-    if (changeRequired) {
-      imposeSize = optimizeStructure = false;
-      if (updatedContainers != null) {
-        Iterator<LayoutComponent> it = updatedContainers.iterator();
-        while (it.hasNext()) {
-          LayoutComponent cont = it.next();
-          visualMapper.rebuildLayout(cont.getId());
-        }
-        updatePositions(null);
-      }
-    }
-    visualStateUpToDate = true;
-    return !changeMark.equals(layoutModel.getChangeMark());
-  }
+	// -------
+	// updates of the current visual state stored in the model
+	public boolean updateCurrentState() {
+		Object changeMark = layoutModel.getChangeMark();
+		boolean changeRequired = imposeSize || optimizeStructure;
+		Set<LayoutComponent> updatedContainers = changeRequired ? new HashSet<LayoutComponent>() : null;
+		try {
+			if (changeRequired) {
+				modelListener.deactivate(); // some changes may happen...
+				destroyRedundantGroups(updatedContainers);
+				operations.mergeAdjacentGaps(updatedContainers);
+			}
+			updatePositions(updatedContainers);
+		} finally {
+			if (changeRequired) {
+				modelListener.activate();
+			}
+		}
+		if (changeRequired) {
+			imposeSize = optimizeStructure = false;
+			if (updatedContainers != null) {
+				Iterator<LayoutComponent> it = updatedContainers.iterator();
+				while (it.hasNext()) {
+					LayoutComponent cont = it.next();
+					visualMapper.rebuildLayout(cont.getId());
+				}
+				updatePositions(null);
+			}
+		}
+		visualStateUpToDate = true;
+		return !changeMark.equals(layoutModel.getChangeMark());
+	}
 
-  public void externalSizeChangeHappened() {
-    imposeSize = true;
-    visualStateUpToDate = false;
-  }
+	public void externalSizeChangeHappened() {
+		imposeSize = true;
+		visualStateUpToDate = false;
+	}
 
-  void requireStructureOptimization() {
-    optimizeStructure = true;
-    visualStateUpToDate = false;
-    Iterator it = layoutModel.getAllComponents();
-    while (it.hasNext()) {
-      LayoutComponent comp = (LayoutComponent) it.next();
-      if (comp.isLayoutContainer()) {
-        LayoutInterval[] roots = getActiveLayoutRoots(comp);
-        for (int dim = 0; dim < DIM_COUNT; dim++) {
-          cleanDesignAttrs(roots[dim]);
-        }
-      }
-    }
-  }
+	void requireStructureOptimization() {
+		optimizeStructure = true;
+		visualStateUpToDate = false;
+		Iterator it = layoutModel.getAllComponents();
+		while (it.hasNext()) {
+			LayoutComponent comp = (LayoutComponent) it.next();
+			if (comp.isLayoutContainer()) {
+				LayoutInterval[] roots = getActiveLayoutRoots(comp);
+				for (int dim = 0; dim < DIM_COUNT; dim++) {
+					cleanDesignAttrs(roots[dim]);
+				}
+			}
+		}
+	}
 
-  private void updatePositions(Set<LayoutComponent> updatedContainers) {
-    Iterator it = layoutModel.getAllComponents();
-    while (it.hasNext()) {
-      LayoutComponent comp = (LayoutComponent) it.next();
-      if (!comp.isLayoutContainer()) {
-        continue;
-      }
-      if (optimizeStructure || imposeSize) {
-        // make sure the layout definition reflects the current size
-        if (imposeCurrentContainerSize(comp, null, false)) {
-          updatedContainers.add(comp);
-          if (optimizeStructure) {
-            for (LayoutInterval[] roots : comp.getLayoutRoots()) {
-              for (int dim = 0; dim < DIM_COUNT; dim++) {
-                optimizeGaps(roots[dim], dim, true);
-                destroyRedundantGroups(roots[dim]);
-              }
-            }
-          }
-          LayoutInterval[] roots = getActiveLayoutRoots(comp);
-          for (int dim = 0; dim < DIM_COUNT; dim++) {
-            updateDesignModifications(roots[dim], dim);
-          }
-        }
-      } else { // just update the current visual positions (LayoutRegion)
-        Rectangle bounds = visualMapper.getContainerInterior(comp.getId());
-        if (bounds != null) {
-          comp.setCurrentInterior(bounds);
-          for (LayoutComponent subComp : comp.getSubcomponents()) {
-            bounds = visualMapper.getComponentBounds(subComp.getId());
-            int baseline =
-                visualMapper.getBaselinePosition(subComp.getId(), bounds.width, bounds.height);
-            subComp.setCurrentBounds(bounds, baseline);
-          }
-          for (LayoutInterval[] roots : comp.getLayoutRoots()) {
-            for (int i = 0; i < DIM_COUNT; i++) {
-              updateLayoutStructure(roots[i], i, false);
-            }
-          }
-        }
-      }
-    }
-  }
+	private void updatePositions(Set<LayoutComponent> updatedContainers) {
+		Iterator it = layoutModel.getAllComponents();
+		while (it.hasNext()) {
+			LayoutComponent comp = (LayoutComponent) it.next();
+			if (!comp.isLayoutContainer()) {
+				continue;
+			}
+			if (optimizeStructure || imposeSize) {
+				// make sure the layout definition reflects the current size
+				if (imposeCurrentContainerSize(comp, null, false)) {
+					updatedContainers.add(comp);
+					if (optimizeStructure) {
+						for (LayoutInterval[] roots : comp.getLayoutRoots()) {
+							for (int dim = 0; dim < DIM_COUNT; dim++) {
+								optimizeGaps(roots[dim], dim, true);
+								destroyRedundantGroups(roots[dim]);
+							}
+						}
+					}
+					LayoutInterval[] roots = getActiveLayoutRoots(comp);
+					for (int dim = 0; dim < DIM_COUNT; dim++) {
+						updateDesignModifications(roots[dim], dim);
+					}
+				}
+			} else { // just update the current visual positions (LayoutRegion)
+				Rectangle bounds = visualMapper.getContainerInterior(comp.getId());
+				if (bounds != null) {
+					comp.setCurrentInterior(bounds);
+					for (LayoutComponent subComp : comp.getSubcomponents()) {
+						bounds = visualMapper.getComponentBounds(subComp.getId());
+						int baseline =
+								visualMapper.getBaselinePosition(subComp.getId(), bounds.width, bounds.height);
+						subComp.setCurrentBounds(bounds, baseline);
+					}
+					for (LayoutInterval[] roots : comp.getLayoutRoots()) {
+						for (int i = 0; i < DIM_COUNT; i++) {
+							updateLayoutStructure(roots[i], i, false);
+						}
+					}
+				}
+			}
+		}
+	}
 
-  // recursive
-  /**
-   * Updates current space (LayoutRegion) of all groups in the layout. Also for all intervals having
-   * the preferred size explicitly defined the pref size is updated according to the current state.
-   * Min and max sizes as well if they are the same as pref.
-   */
-  void updateLayoutStructure(LayoutInterval interval, int dimension, boolean imposeGaps) {
-    LayoutRegion space = interval.getCurrentSpace();
-    boolean baseline = interval.getGroupAlignment() == BASELINE;
-    boolean first = true;
-    boolean firstResizingSpace = false;
-    int leadingSpace = 0;
-    boolean skipNext = false;
-    Iterator it = interval.getSubIntervals();
-    while (it.hasNext()) {
-      LayoutInterval sub = (LayoutInterval) it.next();
-      if (sub.isEmptySpace()) {
-        if (!interval.isSequential()) {
-          // filling gap in empty root group
-          assert interval.getParent() == null;
-          if (imposeGaps && space.isSet(dimension)) {
-            imposeCurrentGapSize(sub, space.size(dimension), dimension);
-          }
-        } else if (first || !it.hasNext()) {
-          // first or last gap in sequence
-          int min = sub.getMinimumSize(true);
-          int pref = sub.getPreferredSize(true);
-          int max = sub.getMaximumSize(true);
-          if ((min == pref || min == USE_PREFERRED_SIZE)
-              && (pref == max || max == USE_PREFERRED_SIZE)
-              && pref != NOT_EXPLICITLY_DEFINED) {
-            // Fixed size gap
-            if (first) {
-              leadingSpace = pref;
-            } else {
-              space.reshape(dimension, TRAILING, pref);
-            }
-          } else {
-            int currentPref = LayoutRegion.UNKNOWN;
-            LayoutInterval sibling =
-                LayoutInterval.getNeighbor(sub, SEQUENTIAL, first ? LEADING : TRAILING);
-            if (sibling == null) {
-              LayoutRegion rootSpace = LayoutInterval.getRoot(interval).getCurrentSpace();
-              if (first) {
-                firstResizingSpace = true;
-                leadingSpace = -rootSpace.positions[dimension][LEADING];
-              } else { // last
-                currentPref =
-                    rootSpace.positions[dimension][TRAILING] - space.positions[dimension][TRAILING];
-                space.reshape(dimension, TRAILING, currentPref);
-              }
-            } else if (sibling.isEmptySpace()) {
-              LayoutInterval parent = interval.getParent();
-              LayoutInterval alignedParent = parent;
-              int align = first ? LEADING : TRAILING;
-              while (parent != null && LayoutInterval.isAlignedAtBorder(interval, parent, align)) {
-                alignedParent = parent;
-                parent = parent.getParent();
-              }
-              LayoutInterval parComp =
-                  LayoutUtils.getOutermostComponent(alignedParent, dimension, align);
-              // [this assert is maybe too strong - it's ok if the component at least touches the border - but that's hard to determine here]
-              //                            assert LayoutInterval.isAlignedAtBorder(parComp, interval.getParent(), first ? LEADING : TRAILING);
-              LayoutRegion parSpace = parComp.getCurrentSpace();
-              if (first) {
-                firstResizingSpace = true;
-                leadingSpace = -parSpace.positions[dimension][LEADING];
-              } else {
-                currentPref =
-                    parSpace.positions[dimension][TRAILING] - space.positions[dimension][TRAILING];
-                space.reshape(dimension, TRAILING, currentPref);
-              }
-            } else {
-              if (first) {
-                firstResizingSpace = true;
-                LayoutRegion sibSpace = sibling.getCurrentSpace();
-                leadingSpace = -sibSpace.positions[dimension][TRAILING];
-              } else {
-                LayoutRegion sibSpace = sibling.getCurrentSpace();
-                if (!sibling.isComponent()) {
-                  sibSpace.reset();
-                  updateLayoutStructure(sibling, dimension, imposeGaps);
-                  skipNext = true;
-                }
-                int sibPos = sibSpace.positions[dimension][LEADING];
-                if (sibPos != LayoutRegion.UNKNOWN) { // Issue 62320
-                  currentPref = sibPos - space.positions[dimension][TRAILING];
-                  space.reshape(dimension, TRAILING, currentPref);
-                }
-              }
-            }
-            if (imposeGaps && currentPref != LayoutRegion.UNKNOWN) { // last resizing gap
-              imposeCurrentGapSize(sub, currentPref, dimension);
-            }
-          }
-        } else if (imposeGaps) {
-          LayoutInterval sibling = LayoutInterval.getDirectNeighbor(sub, TRAILING, false);
-          assert !sibling.isEmptySpace();
-          LayoutRegion sibSpace = sibling.getCurrentSpace();
-          if (!sibling.isComponent()) {
-            sibSpace.reset();
-            updateLayoutStructure(sibling, dimension, imposeGaps);
-            skipNext = true;
-          }
-          int currentSize = LayoutRegion.distance(space, sibSpace, dimension, TRAILING, LEADING);
-          imposeCurrentGapSize(sub, currentSize, dimension);
-        }
-        first = false;
-        continue;
-      }
-      LayoutRegion subSpace = sub.getCurrentSpace();
-      if (skipNext) { // this subgroup has been processed in advance
-        skipNext = false;
-      } else if (sub.isGroup()) {
-        assert sub.getSubIntervalCount() > 0; // consistency check - there should be no empty groups
-        subSpace.reset();
-        /*if (interval.getParent() == null) {
+	// recursive
+	/**
+	 * Updates current space (LayoutRegion) of all groups in the layout. Also for all intervals having
+	 * the preferred size explicitly defined the pref size is updated according to the current state.
+	 * Min and max sizes as well if they are the same as pref.
+	 */
+	void updateLayoutStructure(LayoutInterval interval, int dimension, boolean imposeGaps) {
+		LayoutRegion space = interval.getCurrentSpace();
+		boolean baseline = interval.getGroupAlignment() == BASELINE;
+		boolean first = true;
+		boolean firstResizingSpace = false;
+		int leadingSpace = 0;
+		boolean skipNext = false;
+		Iterator it = interval.getSubIntervals();
+		while (it.hasNext()) {
+			LayoutInterval sub = (LayoutInterval) it.next();
+			if (sub.isEmptySpace()) {
+				if (!interval.isSequential()) {
+					// filling gap in empty root group
+					assert interval.getParent() == null;
+					if (imposeGaps && space.isSet(dimension)) {
+						imposeCurrentGapSize(sub, space.size(dimension), dimension);
+					}
+				} else if (first || !it.hasNext()) {
+					// first or last gap in sequence
+					int min = sub.getMinimumSize(true);
+					int pref = sub.getPreferredSize(true);
+					int max = sub.getMaximumSize(true);
+					if ((min == pref || min == USE_PREFERRED_SIZE)
+							&& (pref == max || max == USE_PREFERRED_SIZE)
+							&& pref != NOT_EXPLICITLY_DEFINED) {
+						// Fixed size gap
+						if (first) {
+							leadingSpace = pref;
+						} else {
+							space.reshape(dimension, TRAILING, pref);
+						}
+					} else {
+						int currentPref = LayoutRegion.UNKNOWN;
+						LayoutInterval sibling =
+								LayoutInterval.getNeighbor(sub, SEQUENTIAL, first ? LEADING : TRAILING);
+						if (sibling == null) {
+							LayoutRegion rootSpace = LayoutInterval.getRoot(interval).getCurrentSpace();
+							if (first) {
+								firstResizingSpace = true;
+								leadingSpace = -rootSpace.positions[dimension][LEADING];
+							} else { // last
+								currentPref =
+										rootSpace.positions[dimension][TRAILING] - space.positions[dimension][TRAILING];
+								space.reshape(dimension, TRAILING, currentPref);
+							}
+						} else if (sibling.isEmptySpace()) {
+							LayoutInterval parent = interval.getParent();
+							LayoutInterval alignedParent = parent;
+							int align = first ? LEADING : TRAILING;
+							while (parent != null && LayoutInterval.isAlignedAtBorder(interval, parent, align)) {
+								alignedParent = parent;
+								parent = parent.getParent();
+							}
+							LayoutInterval parComp =
+									LayoutUtils.getOutermostComponent(alignedParent, dimension, align);
+							// [this assert is maybe too strong - it's ok if the component at least touches the border - but that's hard to determine here]
+							//                            assert LayoutInterval.isAlignedAtBorder(parComp, interval.getParent(), first ? LEADING : TRAILING);
+							LayoutRegion parSpace = parComp.getCurrentSpace();
+							if (first) {
+								firstResizingSpace = true;
+								leadingSpace = -parSpace.positions[dimension][LEADING];
+							} else {
+								currentPref =
+										parSpace.positions[dimension][TRAILING] - space.positions[dimension][TRAILING];
+								space.reshape(dimension, TRAILING, currentPref);
+							}
+						} else {
+							if (first) {
+								firstResizingSpace = true;
+								LayoutRegion sibSpace = sibling.getCurrentSpace();
+								leadingSpace = -sibSpace.positions[dimension][TRAILING];
+							} else {
+								LayoutRegion sibSpace = sibling.getCurrentSpace();
+								if (!sibling.isComponent()) {
+									sibSpace.reset();
+									updateLayoutStructure(sibling, dimension, imposeGaps);
+									skipNext = true;
+								}
+								int sibPos = sibSpace.positions[dimension][LEADING];
+								if (sibPos != LayoutRegion.UNKNOWN) { // Issue 62320
+									currentPref = sibPos - space.positions[dimension][TRAILING];
+									space.reshape(dimension, TRAILING, currentPref);
+								}
+							}
+						}
+						if (imposeGaps && currentPref != LayoutRegion.UNKNOWN) { // last resizing gap
+							imposeCurrentGapSize(sub, currentPref, dimension);
+						}
+					}
+				} else if (imposeGaps) {
+					LayoutInterval sibling = LayoutInterval.getDirectNeighbor(sub, TRAILING, false);
+					assert !sibling.isEmptySpace();
+					LayoutRegion sibSpace = sibling.getCurrentSpace();
+					if (!sibling.isComponent()) {
+						sibSpace.reset();
+						updateLayoutStructure(sibling, dimension, imposeGaps);
+						skipNext = true;
+					}
+					int currentSize = LayoutRegion.distance(space, sibSpace, dimension, TRAILING, LEADING);
+					imposeCurrentGapSize(sub, currentSize, dimension);
+				}
+				first = false;
+				continue;
+			}
+			LayoutRegion subSpace = sub.getCurrentSpace();
+			if (skipNext) { // this subgroup has been processed in advance
+				skipNext = false;
+			} else if (sub.isGroup()) {
+				assert sub.getSubIntervalCount() > 0; // consistency check - there should be no empty groups
+				subSpace.reset();
+				/*if (interval.getParent() == null) {
             subSpace.set(space, dimension); // root space is known
         }*/
-        updateLayoutStructure(sub, dimension, imposeGaps);
-      }
-      space.expand(subSpace);
-      if (baseline && sub.isComponent()) {
-        int baselinePos = subSpace.positions[dimension][BASELINE];
-        if (baselinePos != LayoutRegion.UNKNOWN) {
-          space.positions[dimension][BASELINE] = baselinePos;
-          baseline = false;
-        }
-      }
-      if (firstResizingSpace) {
-        leadingSpace += space.positions[dimension][LEADING];
-        firstResizingSpace = false;
-        if (imposeGaps) {
-          imposeCurrentGapSize(interval.getSubInterval(0), leadingSpace, dimension);
-        }
-      }
-      first = false;
-    }
-    if (leadingSpace != 0) {
-      space.reshape(dimension, LEADING, -leadingSpace);
-    }
-  }
+				updateLayoutStructure(sub, dimension, imposeGaps);
+			}
+			space.expand(subSpace);
+			if (baseline && sub.isComponent()) {
+				int baselinePos = subSpace.positions[dimension][BASELINE];
+				if (baselinePos != LayoutRegion.UNKNOWN) {
+					space.positions[dimension][BASELINE] = baselinePos;
+					baseline = false;
+				}
+			}
+			if (firstResizingSpace) {
+				leadingSpace += space.positions[dimension][LEADING];
+				firstResizingSpace = false;
+				if (imposeGaps) {
+					imposeCurrentGapSize(interval.getSubInterval(0), leadingSpace, dimension);
+				}
+			}
+			first = false;
+		}
+		if (leadingSpace != 0) {
+			space.reshape(dimension, LEADING, -leadingSpace);
+		}
+	}
 
-  // -----
-  // adding, moving, resizing
-  /**
-   * Determines a subset of components that can be visually dragged together. If the components are
-   * in diferrent containers then no dragging is possible (returns empty list). Otherwise the
-   * components that have the same parent and are under the same layout roots are returned.
-   * Nonexisting or parent-less components are ignored.
-   *
-   * @param component
-   *          Ids of components selected for dragging
-   * @return List of Ids of components that can be dragged together
-   */
-  public List<String> getDraggableComponents(List<String> componentIds) {
-    LayoutComponent container = null;
-    List<String> draggable = null;
-    int commonLayer = -1;
-    for (String compId : componentIds) {
-      LayoutComponent comp = layoutModel.getLayoutComponent(compId);
-      if (comp == null || comp.getParent() == null) {
-        continue;
-      }
-      if (container == null) {
-        container = comp.getParent();
-      } else if (comp.getParent() != container) {
-        return Collections.emptyList();
-      }
-      int layerIndex = container.getLayoutRootsIndex(comp.getLayoutInterval(HORIZONTAL));
-      assert layerIndex >= 0;
-      if (layerIndex >= commonLayer) {
-        if (commonLayer < 0) {
-          draggable = new ArrayList<String>(componentIds.size());
-        } else if (layerIndex > commonLayer) {
-          draggable.clear();
-        }
-        commonLayer = layerIndex;
-        draggable.add(compId);
-      }
-    }
-    if (draggable == null) {
-      draggable = Collections.emptyList();
-    }
-    return draggable;
-  }
+	// -----
+	// adding, moving, resizing
+	/**
+	 * Determines a subset of components that can be visually dragged together. If the components are
+	 * in diferrent containers then no dragging is possible (returns empty list). Otherwise the
+	 * components that have the same parent and are under the same layout roots are returned.
+	 * Nonexisting or parent-less components are ignored.
+	 *
+	 * @param component
+	 *          Ids of components selected for dragging
+	 * @return List of Ids of components that can be dragged together
+	 */
+	public List<String> getDraggableComponents(List<String> componentIds) {
+		LayoutComponent container = null;
+		List<String> draggable = null;
+		int commonLayer = -1;
+		for (String compId : componentIds) {
+			LayoutComponent comp = layoutModel.getLayoutComponent(compId);
+			if (comp == null || comp.getParent() == null) {
+				continue;
+			}
+			if (container == null) {
+				container = comp.getParent();
+			} else if (comp.getParent() != container) {
+				return Collections.emptyList();
+			}
+			int layerIndex = container.getLayoutRootsIndex(comp.getLayoutInterval(HORIZONTAL));
+			assert layerIndex >= 0;
+			if (layerIndex >= commonLayer) {
+				if (commonLayer < 0) {
+					draggable = new ArrayList<String>(componentIds.size());
+				} else if (layerIndex > commonLayer) {
+					draggable.clear();
+				}
+				commonLayer = layerIndex;
+				draggable.add(compId);
+			}
+		}
+		if (draggable == null) {
+			draggable = Collections.emptyList();
+		}
+		return draggable;
+	}
 
-  /**
-   * Checks whether given component is "unplaced" - i.e. in other than default layer. Result of
-   * adding without mouse positioning (e.g. copying). In current model such a component needs to be
-   * moved additionally by the user to be placed in the default layer among other components.
-   *
-   * @param compId
-   *          id of the component
-   * @return true if the component is placed in an additional layer
-   */
-  public boolean isUnplacedComponent(String compId) {
-    LayoutComponent comp = layoutModel.getLayoutComponent(compId);
-    if (comp != null) {
-      LayoutComponent cont = comp.getParent();
-      return cont != null
-          && comp.getParentRoots()[HORIZONTAL] != cont.getDefaultLayoutRoot(HORIZONTAL);
-    }
-    return false;
-  }
+	/**
+	 * Checks whether given component is "unplaced" - i.e. in other than default layer. Result of
+	 * adding without mouse positioning (e.g. copying). In current model such a component needs to be
+	 * moved additionally by the user to be placed in the default layer among other components.
+	 *
+	 * @param compId
+	 *          id of the component
+	 * @return true if the component is placed in an additional layer
+	 */
+	public boolean isUnplacedComponent(String compId) {
+		LayoutComponent comp = layoutModel.getLayoutComponent(compId);
+		if (comp != null) {
+			LayoutComponent cont = comp.getParent();
+			return cont != null
+					&& comp.getParentRoots()[HORIZONTAL] != cont.getDefaultLayoutRoot(HORIZONTAL);
+		}
+		return false;
+	}
 
-  public void startAdding(LayoutComponent[] comps,
-      Rectangle[] bounds,
-      Point hotspot,
-      String defaultContId) {
-    prepareDragger(comps, bounds, hotspot, LayoutDragger.ALL_EDGES);
-    if (defaultContId != null) {
-      setDragTarget(layoutModel.getLayoutComponent(defaultContId), comps, false);
-    }
-  }
+	public void startAdding(LayoutComponent[] comps,
+			Rectangle[] bounds,
+			Point hotspot,
+			String defaultContId) {
+		prepareDragger(comps, bounds, hotspot, LayoutDragger.ALL_EDGES);
+		if (defaultContId != null) {
+			setDragTarget(layoutModel.getLayoutComponent(defaultContId), comps, false);
+		}
+	}
 
-  public void startMoving(String[] compIds, Rectangle[] bounds, Point hotspot) {
-    LayoutComponent[] comps = new LayoutComponent[compIds.length];
-    for (int i = 0; i < compIds.length; i++) {
-      comps[i] = layoutModel.getLayoutComponent(compIds[i]);
-    }
-    prepareDragger(comps, bounds, hotspot, LayoutDragger.ALL_EDGES);
-    setDragTarget(comps[0].getParent(), comps, false);
-  }
+	public void startMoving(String[] compIds, Rectangle[] bounds, Point hotspot) {
+		LayoutComponent[] comps = new LayoutComponent[compIds.length];
+		for (int i = 0; i < compIds.length; i++) {
+			comps[i] = layoutModel.getLayoutComponent(compIds[i]);
+		}
+		prepareDragger(comps, bounds, hotspot, LayoutDragger.ALL_EDGES);
+		setDragTarget(comps[0].getParent(), comps, false);
+	}
 
-  // [change to one component only?]
-  public void startResizing(String[] compIds,
-      Rectangle[] bounds,
-      Point hotspot,
-      int[] resizeEdges,
-      boolean inLayout) {
-    LayoutComponent[] comps = new LayoutComponent[compIds.length];
-    for (int i = 0; i < compIds.length; i++) {
-      comps[i] = layoutModel.getLayoutComponent(compIds[i]);
-    }
-    int[] edges = new int[DIM_COUNT];
-    for (int i = 0; i < DIM_COUNT; i++) {
-      edges[i] = resizeEdges[i] == LEADING || resizeEdges[i] == TRAILING
-          ? resizeEdges[i]
-          : LayoutRegion.NO_POINT;
-    }
-    prepareDragger(comps, bounds, hotspot, edges);
-    if (inLayout) {
-      setDragTarget(comps[0].getParent(), comps, true);
-    } else {
-      setDragTarget(null, null, true);
-    }
-  }
+	// [change to one component only?]
+	public void startResizing(String[] compIds,
+			Rectangle[] bounds,
+			Point hotspot,
+			int[] resizeEdges,
+			boolean inLayout) {
+		LayoutComponent[] comps = new LayoutComponent[compIds.length];
+		for (int i = 0; i < compIds.length; i++) {
+			comps[i] = layoutModel.getLayoutComponent(compIds[i]);
+		}
+		int[] edges = new int[DIM_COUNT];
+		for (int i = 0; i < DIM_COUNT; i++) {
+			edges[i] = resizeEdges[i] == LEADING || resizeEdges[i] == TRAILING
+					? resizeEdges[i]
+							: LayoutRegion.NO_POINT;
+		}
+		prepareDragger(comps, bounds, hotspot, edges);
+		if (inLayout) {
+			setDragTarget(comps[0].getParent(), comps, true);
+		} else {
+			setDragTarget(null, null, true);
+		}
+	}
 
-  private void prepareDragger(LayoutComponent[] comps,
-      Rectangle[] bounds,
-      Point hotspot,
-      int[] edges) {
-    if (comps.length != bounds.length) {
-      throw new IllegalArgumentException();
-    }
-    LayoutRegion[] movingFormation = new LayoutRegion[bounds.length];
-    for (int i = 0; i < bounds.length; i++) {
-      int baseline =
-          visualMapper.getBaselinePosition(comps[i].getId(), bounds[i].width, bounds[i].height);
-      int baselinePos = baseline > 0 ? bounds[i].y + baseline : LayoutRegion.UNKNOWN;
-      movingFormation[i] = new LayoutRegion();
-      movingFormation[i].set(bounds[i], baselinePos);
-    }
-    dragger = new LayoutDragger(comps,
-        movingFormation,
-        new int[]{hotspot.x, hotspot.y},
-        edges,
-        visualMapper);
-  }
+	private void prepareDragger(LayoutComponent[] comps,
+			Rectangle[] bounds,
+			Point hotspot,
+			int[] edges) {
+		if (comps.length != bounds.length) {
+			throw new IllegalArgumentException();
+		}
+		LayoutRegion[] movingFormation = new LayoutRegion[bounds.length];
+		for (int i = 0; i < bounds.length; i++) {
+			int baseline =
+					visualMapper.getBaselinePosition(comps[i].getId(), bounds[i].width, bounds[i].height);
+			int baselinePos = baseline > 0 ? bounds[i].y + baseline : LayoutRegion.UNKNOWN;
+			movingFormation[i] = new LayoutRegion();
+			movingFormation[i].set(bounds[i], baselinePos);
+		}
+		dragger = new LayoutDragger(comps,
+				movingFormation,
+				new int[]{hotspot.x, hotspot.y},
+				edges,
+				visualMapper);
+	}
 
-  /**
-   * @param p
-   *          mouse cursor position in coordinates of the whole design area; it is adjusted if the
-   *          position is changed (due to a snap effect)
-   * @param containerId
-   *          for container the cursor is currently moved over, can be null if e.g. a root container
-   *          is resized
-   * @param autoPositioning
-   *          if true, searching for optimal position will be performed - a found position will be
-   *          painted and the moving component snapped to it
-   * @param lockDimension
-   *          if true, one dimension is locked for this move (does not change); the dimension to
-   *          lock must have aligned position found in previous move steps - if this is true for
-   *          both dimensions then the one with smaller delta is chosen
-   * @param bounds
-   *          (output) bounds of moving components after the move
-   */
-  public void move(Point p,
-      String containerId,
-      boolean autoPositioning,
-      boolean lockDimension,
-      Rectangle[] bounds) {
-    int x = p != null ? p.x : 0;
-    int y = p != null ? p.y : 0;
-    if (!visualStateUpToDate || dragger == null) {
-      return; // visual state of layout structure not updated yet (from last operation)
-    }
-    if (!dragger.isResizing() && (!lockDimension || dragger.getTargetContainer() == null)) {
-      setDragTarget(
-          layoutModel.getLayoutComponent(containerId),
-          dragger.getMovingComponents(),
-          false);
-    }
-    cursorPos[HORIZONTAL] = p.x;
-    cursorPos[VERTICAL] = p.y;
-    dragger.move(cursorPos, autoPositioning, lockDimension);
-    p.x = cursorPos[HORIZONTAL];
-    p.y = cursorPos[VERTICAL];
-    if (bounds != null) {
-      LayoutRegion[] current = dragger.getMovingBounds();
-      for (int i = 0; i < current.length; i++) {
-        current[i].toRectangle(bounds[i]);
-      }
-    }
-  }
+	/**
+	 * @param p
+	 *          mouse cursor position in coordinates of the whole design area; it is adjusted if the
+	 *          position is changed (due to a snap effect)
+	 * @param containerId
+	 *          for container the cursor is currently moved over, can be null if e.g. a root container
+	 *          is resized
+	 * @param autoPositioning
+	 *          if true, searching for optimal position will be performed - a found position will be
+	 *          painted and the moving component snapped to it
+	 * @param lockDimension
+	 *          if true, one dimension is locked for this move (does not change); the dimension to
+	 *          lock must have aligned position found in previous move steps - if this is true for
+	 *          both dimensions then the one with smaller delta is chosen
+	 * @param bounds
+	 *          (output) bounds of moving components after the move
+	 */
+	public void move(Point p,
+			String containerId,
+			boolean autoPositioning,
+			boolean lockDimension,
+			Rectangle[] bounds) {
+		int x = p != null ? p.x : 0;
+		int y = p != null ? p.y : 0;
+		if (!visualStateUpToDate || dragger == null) {
+			return; // visual state of layout structure not updated yet (from last operation)
+		}
+		if (!dragger.isResizing() && (!lockDimension || dragger.getTargetContainer() == null)) {
+			setDragTarget(
+					layoutModel.getLayoutComponent(containerId),
+					dragger.getMovingComponents(),
+					false);
+		}
+		cursorPos[HORIZONTAL] = p.x;
+		cursorPos[VERTICAL] = p.y;
+		dragger.move(cursorPos, autoPositioning, lockDimension);
+		p.x = cursorPos[HORIZONTAL];
+		p.y = cursorPos[VERTICAL];
+		if (bounds != null) {
+			LayoutRegion[] current = dragger.getMovingBounds();
+			for (int i = 0; i < current.length; i++) {
+				current[i].toRectangle(bounds[i]);
+			}
+		}
+	}
 
-  private void setDragTarget(LayoutComponent targetContainer,
-      LayoutComponent[] movingComps,
-      boolean resizing) {
-    LayoutComponent prevContainer = dragger.getTargetContainer();
-    LayoutInterval[] roots;
-    if (targetContainer != null) {
-      roots = resizing && movingComps.length > 0
-          ? movingComps[0].getParentRoots()
-          : getActiveLayoutRoots(targetContainer);
-    } else {
-      roots = null;
-    }
-    dragger.setTargetContainer(targetContainer, roots);
-    if (prevContainer != targetContainer) {
-      updateDraggingVisibility(prevContainer, movingComps, resizing, false);
-      updateDraggingVisibility(targetContainer, movingComps, resizing, true);
-    }
-  }
+	private void setDragTarget(LayoutComponent targetContainer,
+			LayoutComponent[] movingComps,
+			boolean resizing) {
+		LayoutComponent prevContainer = dragger.getTargetContainer();
+		LayoutInterval[] roots;
+		if (targetContainer != null) {
+			roots = resizing && movingComps.length > 0
+					? movingComps[0].getParentRoots()
+							: getActiveLayoutRoots(targetContainer);
+		} else {
+			roots = null;
+		}
+		dragger.setTargetContainer(targetContainer, roots);
+		if (prevContainer != targetContainer) {
+			updateDraggingVisibility(prevContainer, movingComps, resizing, false);
+			updateDraggingVisibility(targetContainer, movingComps, resizing, true);
+		}
+	}
 
-  // temporarily hide components from other layers when dragging in a container
-  private void updateDraggingVisibility(LayoutComponent container,
-      LayoutComponent[] movingComps,
-      boolean resizing,
-      boolean draggingIn) {
-    if (container != null) {
-      LayoutInterval[] targetRoots = resizing && movingComps.length > 0
-          ? movingComps[0].getParentRoots()
-          : getActiveLayoutRoots(container);
-      for (LayoutComponent comp : container.getSubcomponents()) {
-        for (LayoutComponent m : movingComps) {
-          if (m == comp) {
-            comp = null;
-            break;
-          }
-        }
-        if (comp != null
-            && LayoutInterval.getRoot(
-                comp.getLayoutInterval(HORIZONTAL)) != targetRoots[HORIZONTAL]) {
-          visualMapper.setComponentVisibility(comp.getId(), !draggingIn);
-        }
-      }
-    }
-  }
+	// temporarily hide components from other layers when dragging in a container
+	private void updateDraggingVisibility(LayoutComponent container,
+			LayoutComponent[] movingComps,
+			boolean resizing,
+			boolean draggingIn) {
+		if (container != null) {
+			LayoutInterval[] targetRoots = resizing && movingComps.length > 0
+					? movingComps[0].getParentRoots()
+							: getActiveLayoutRoots(container);
+			for (LayoutComponent comp : container.getSubcomponents()) {
+				for (LayoutComponent m : movingComps) {
+					if (m == comp) {
+						comp = null;
+						break;
+					}
+				}
+				if (comp != null
+						&& LayoutInterval.getRoot(
+								comp.getLayoutInterval(HORIZONTAL)) != targetRoots[HORIZONTAL]) {
+					visualMapper.setComponentVisibility(comp.getId(), !draggingIn);
+				}
+			}
+		}
+	}
 
-  public void endMoving(boolean committed) {
-    if (!committed && dragger == null) {
-      return; // redundant call
-    }
-    try {
-      LayoutComponent targetContainer = dragger.getTargetContainer();
-      LayoutComponent[] components = dragger.getMovingComponents();
-      updateDraggingVisibility(targetContainer, components, dragger.isResizing(), false);
-      if (committed) {
-        if (targetContainer != null) {
-          boolean newComponents = components[0].getParent() == null;
-          // determine the interval to add in each dimension
-          LayoutInterval[] addingInts;
-          if (components.length > 1) {
-            if (newComponents) { // adding multiple new components (not in layout)
-              // (special case - moving multiple components from another layout)
-              LayoutRegion movingSpace = dragger.getMovingSpace();
-              int dx = movingSpace.positions[HORIZONTAL][LEADING];
-              int dy = movingSpace.positions[HORIZONTAL][LEADING];
-              LayoutRegion[] movingBounds = dragger.getMovingBounds();
-              Map<LayoutComponent, Rectangle> compToRect =
-                  new HashMap<LayoutComponent, Rectangle>();
-              for (int i = 0; i < components.length; i++) {
-                Rectangle r = movingBounds[i].toRectangle(new Rectangle());
-                r.x -= dx;
-                r.y -= dy;
-                compToRect.put(components[i], r);
-              }
-              addingInts = LayoutModel.createIntervalsFromBounds(compToRect);
-            } else { // moving multiple existing components (already in layout, no resizing)
-              LayoutInterval[] commonParents = new LayoutInterval[DIM_COUNT];
-              Map<LayoutComponent, LayoutComponent> compMap =
-                  new HashMap<LayoutComponent, LayoutComponent>();
-              LayoutRegion origSpace = new LayoutRegion();
-              for (LayoutComponent comp : components) {
-                for (int dim = 0; dim < DIM_COUNT; dim++) {
-                  if (commonParents[dim] == null) {
-                    commonParents[dim] = comp.getLayoutInterval(dim);
-                  } else {
-                    commonParents[dim] = LayoutInterval.getCommonParent(
-                        commonParents[dim],
-                        comp.getLayoutInterval(dim));
-                  }
-                }
-                compMap.put(comp, comp); // moving the same components
-                origSpace.expand(comp.getLayoutInterval(HORIZONTAL).getCurrentSpace());
-              }
-              addingInts = new LayoutInterval[DIM_COUNT];
-              for (int dim = 0; dim < DIM_COUNT; dim++) {
-                addingInts[dim] = restrictedCopy(commonParents[dim], compMap, origSpace, dim, null);
-              }
-              // component intervals were moved to the new enclosing group,
-              // so also remove the components from their container
-              for (LayoutComponent comp : components) {
-                layoutModel.removeComponent(comp, false);
-              }
-            }
-          } else { // one component (adding/moving/resizing)
-            addingInts = new LayoutInterval[DIM_COUNT];
-            LayoutComponent comp = components[0];
-            for (int dim = 0; dim < DIM_COUNT; dim++) {
-              addingInts[dim] = comp.getLayoutInterval(dim);
-            }
-          }
-          if (newComponents) { // ensure the interval size matches the real component size
-            LayoutRegion[] movingBounds = dragger.getMovingBounds();
-            for (int i = 0; i < components.length; i++) {
-              LayoutComponent comp = components[i];
-              Dimension preferred = visualMapper.getComponentPreferredSize(comp.getId());
-              for (int dim = 0; dim < DIM_COUNT; dim++) {
-                int size = movingBounds[i].size(dim);
-                if (preferred == null
-                    || size != (dim == HORIZONTAL ? preferred.width : preferred.height)) {
-                  comp.getLayoutInterval(dim).setPreferredSize(size);
-                }
-              }
-            }
-          }
-          addComponents(components, targetContainer, addingInts, newComponents);
-        } else { // resizing root container
-          assert dragger.isResizing();
-          modelListener.deactivate(); // do not react on model changes
-          LayoutRegion space = dragger.getMovingBounds()[0];
-          for (int dim = 0; dim < DIM_COUNT; dim++) {
-            components[0].getLayoutInterval(dim).setCurrentSpace(space);
-          }
-          if (components[0].isLayoutContainer()) {
-            imposeCurrentContainerSize(components[0], dragger.getSizes(), true);
-          }
-        }
-        if (dragger.isResizing() && components[0].isLayoutContainer()) {
-          updateDesignModifications(components[0]);
-        }
-        visualStateUpToDate = false;
-      }
-    } finally {
-      dragger = null;
-    }
-  }
+	public void endMoving(boolean committed) {
+		if (!committed && dragger == null) {
+			return; // redundant call
+		}
+		try {
+			LayoutComponent targetContainer = dragger.getTargetContainer();
+			LayoutComponent[] components = dragger.getMovingComponents();
+			updateDraggingVisibility(targetContainer, components, dragger.isResizing(), false);
+			if (committed) {
+				if (targetContainer != null) {
+					boolean newComponents = components[0].getParent() == null;
+					// determine the interval to add in each dimension
+					LayoutInterval[] addingInts;
+					if (components.length > 1) {
+						if (newComponents) { // adding multiple new components (not in layout)
+							// (special case - moving multiple components from another layout)
+							LayoutRegion movingSpace = dragger.getMovingSpace();
+							int dx = movingSpace.positions[HORIZONTAL][LEADING];
+							int dy = movingSpace.positions[HORIZONTAL][LEADING];
+							LayoutRegion[] movingBounds = dragger.getMovingBounds();
+							Map<LayoutComponent, Rectangle> compToRect =
+									new HashMap<LayoutComponent, Rectangle>();
+							for (int i = 0; i < components.length; i++) {
+								Rectangle r = movingBounds[i].toRectangle(new Rectangle());
+								r.x -= dx;
+								r.y -= dy;
+								compToRect.put(components[i], r);
+							}
+							addingInts = LayoutModel.createIntervalsFromBounds(compToRect);
+						} else { // moving multiple existing components (already in layout, no resizing)
+							LayoutInterval[] commonParents = new LayoutInterval[DIM_COUNT];
+							Map<LayoutComponent, LayoutComponent> compMap =
+									new HashMap<LayoutComponent, LayoutComponent>();
+							LayoutRegion origSpace = new LayoutRegion();
+							for (LayoutComponent comp : components) {
+								for (int dim = 0; dim < DIM_COUNT; dim++) {
+									if (commonParents[dim] == null) {
+										commonParents[dim] = comp.getLayoutInterval(dim);
+									} else {
+										commonParents[dim] = LayoutInterval.getCommonParent(
+												commonParents[dim],
+												comp.getLayoutInterval(dim));
+									}
+								}
+								compMap.put(comp, comp); // moving the same components
+								origSpace.expand(comp.getLayoutInterval(HORIZONTAL).getCurrentSpace());
+							}
+							addingInts = new LayoutInterval[DIM_COUNT];
+							for (int dim = 0; dim < DIM_COUNT; dim++) {
+								addingInts[dim] = restrictedCopy(commonParents[dim], compMap, origSpace, dim, null);
+							}
+							// component intervals were moved to the new enclosing group,
+							// so also remove the components from their container
+							for (LayoutComponent comp : components) {
+								layoutModel.removeComponent(comp, false);
+							}
+						}
+					} else { // one component (adding/moving/resizing)
+						addingInts = new LayoutInterval[DIM_COUNT];
+						LayoutComponent comp = components[0];
+						for (int dim = 0; dim < DIM_COUNT; dim++) {
+							addingInts[dim] = comp.getLayoutInterval(dim);
+						}
+					}
+					if (newComponents) { // ensure the interval size matches the real component size
+						LayoutRegion[] movingBounds = dragger.getMovingBounds();
+						for (int i = 0; i < components.length; i++) {
+							LayoutComponent comp = components[i];
+							Dimension preferred = visualMapper.getComponentPreferredSize(comp.getId());
+							for (int dim = 0; dim < DIM_COUNT; dim++) {
+								int size = movingBounds[i].size(dim);
+								if (preferred == null
+										|| size != (dim == HORIZONTAL ? preferred.width : preferred.height)) {
+									comp.getLayoutInterval(dim).setPreferredSize(size);
+								}
+							}
+						}
+					}
+					addComponents(components, targetContainer, addingInts, newComponents);
+				} else { // resizing root container
+					assert dragger.isResizing();
+					modelListener.deactivate(); // do not react on model changes
+					LayoutRegion space = dragger.getMovingBounds()[0];
+					for (int dim = 0; dim < DIM_COUNT; dim++) {
+						components[0].getLayoutInterval(dim).setCurrentSpace(space);
+					}
+					if (components[0].isLayoutContainer()) {
+						imposeCurrentContainerSize(components[0], dragger.getSizes(), true);
+					}
+				}
+				if (dragger.isResizing() && components[0].isLayoutContainer()) {
+					updateDesignModifications(components[0]);
+				}
+				visualStateUpToDate = false;
+			}
+		} finally {
+			dragger = null;
+		}
+	}
 
-  private void addComponents(LayoutComponent[] components,
-      LayoutComponent targetContainer,
-      LayoutInterval[] addingInts,
-      boolean freshComponents) {
-    try {
-      LayoutFeeder layoutFeeder = new LayoutFeeder(operations, dragger, addingInts);
-      if (dragger.isResizing()) {
-        assert components.length == 1;
-        // there's just one component resized, stays in the same container,
-        // don't remove it, just the intervals
-        for (int dim = 0; dim < DIM_COUNT; dim++) {
-          LayoutInterval compInt = addingInts[dim];
-          if (compInt.getParent() != null
-              && compInt.getAlignment() != CENTER
-              && compInt.getAlignment() != BASELINE) {
-            layoutModel.removeInterval(compInt);
-            // hack: Don't remove resized interval in center or baseline,
-            // it might not be possible to restore.
-            // LayoutFeeder.addSimplyAligned will check it.
-          }
-        }
-        for (LayoutComponent comp : components) {
-          if (dragger.isResizing(HORIZONTAL)) {
-            layoutModel.removeComponentFromLinkSizedGroup(comp, HORIZONTAL);
-          }
-          if (dragger.isResizing(VERTICAL)) {
-            layoutModel.removeComponentFromLinkSizedGroup(comp, VERTICAL);
-          }
-        }
-      } else {
-        // moved components need to be removed from their original location
-        for (LayoutComponent comp : components) {
-          if (comp.getParent() != null) {
-            layoutModel.removeComponentAndIntervals(comp, false);
-          }
-        }
-      }
-      modelListener.deactivate(); // do not react on model changes during adding
-      // add the components to the model (to the target container)
-      if (!dragger.isResizing()) {
-        for (LayoutComponent comp : components) {
-          layoutModel.addComponent(comp, targetContainer, -1);
-        }
-      }
-      // add the components' intervals
-      layoutFeeder.add();
-      if (layoutFeeder.imposeSize) {
-        imposeSize = true;
-      }
-      if (layoutFeeder.optimizeStructure) {
-        optimizeStructure = true;
-      } // if an overlap occurred we can't calculate the correct sizes
-        // of resizing intervals, thus need to do real layout first (to
-        // get the right picture), then update the actual sizes, and then
-        // re-layout with design specific attributes (container resizing gap)
-      for (int dim = 0; dim < DIM_COUNT; dim++) {
-        destroyGroupIfRedundant(addingInts[dim], addingInts[dim].getParent());
-      }
-      for (LayoutComponent comp : components) {
-        if ((freshComponents || dragger.isResizing()) && comp.isLayoutContainer()) {
-          // container size needs to be defined from inside before the layout is built
-          imposeCurrentContainerSize(components[0], dragger.getSizes(), true);
-        } else if (dragger.isResizing()) {
-          // component might be resized to default size
-          for (int i = 0; i < DIM_COUNT; i++) {
-            if (dragger.snappedToDefaultSize(i)) {
-              operations.resizeInterval(comp.getLayoutInterval(i), NOT_EXPLICITLY_DEFINED);
-            }
-          }
-        }
-      }
-      updateDesignModifications(targetContainer);
-    } finally {
-      if (!modelListener.isActive()) {
-        modelListener.activate();
-      }
-    }
-  }
+	private void addComponents(LayoutComponent[] components,
+			LayoutComponent targetContainer,
+			LayoutInterval[] addingInts,
+			boolean freshComponents) {
+		try {
+			LayoutFeeder layoutFeeder = new LayoutFeeder(operations, dragger, addingInts);
+			if (dragger.isResizing()) {
+				assert components.length == 1;
+				// there's just one component resized, stays in the same container,
+				// don't remove it, just the intervals
+				for (int dim = 0; dim < DIM_COUNT; dim++) {
+					LayoutInterval compInt = addingInts[dim];
+					if (compInt.getParent() != null
+							&& compInt.getAlignment() != CENTER
+							&& compInt.getAlignment() != BASELINE) {
+						layoutModel.removeInterval(compInt);
+						// hack: Don't remove resized interval in center or baseline,
+						// it might not be possible to restore.
+						// LayoutFeeder.addSimplyAligned will check it.
+					}
+				}
+				for (LayoutComponent comp : components) {
+					if (dragger.isResizing(HORIZONTAL)) {
+						layoutModel.removeComponentFromLinkSizedGroup(comp, HORIZONTAL);
+					}
+					if (dragger.isResizing(VERTICAL)) {
+						layoutModel.removeComponentFromLinkSizedGroup(comp, VERTICAL);
+					}
+				}
+			} else {
+				// moved components need to be removed from their original location
+				for (LayoutComponent comp : components) {
+					if (comp.getParent() != null) {
+						layoutModel.removeComponentAndIntervals(comp, false);
+					}
+				}
+			}
+			modelListener.deactivate(); // do not react on model changes during adding
+			// add the components to the model (to the target container)
+			if (!dragger.isResizing()) {
+				for (LayoutComponent comp : components) {
+					layoutModel.addComponent(comp, targetContainer, -1);
+				}
+			}
+			// add the components' intervals
+			layoutFeeder.add();
+			if (layoutFeeder.imposeSize) {
+				imposeSize = true;
+			}
+			if (layoutFeeder.optimizeStructure) {
+				optimizeStructure = true;
+			} // if an overlap occurred we can't calculate the correct sizes
+			// of resizing intervals, thus need to do real layout first (to
+			// get the right picture), then update the actual sizes, and then
+			// re-layout with design specific attributes (container resizing gap)
+			for (int dim = 0; dim < DIM_COUNT; dim++) {
+				destroyGroupIfRedundant(addingInts[dim], addingInts[dim].getParent());
+			}
+			for (LayoutComponent comp : components) {
+				if ((freshComponents || dragger.isResizing()) && comp.isLayoutContainer()) {
+					// container size needs to be defined from inside before the layout is built
+					imposeCurrentContainerSize(components[0], dragger.getSizes(), true);
+				} else if (dragger.isResizing()) {
+					// component might be resized to default size
+					for (int i = 0; i < DIM_COUNT; i++) {
+						if (dragger.snappedToDefaultSize(i)) {
+							operations.resizeInterval(comp.getLayoutInterval(i), NOT_EXPLICITLY_DEFINED);
+						}
+					}
+				}
+			}
+			updateDesignModifications(targetContainer);
+		} finally {
+			if (!modelListener.isActive()) {
+				modelListener.activate();
+			}
+		}
+	}
 
-  private void addUnspecified(LayoutComponent[] components,
-      LayoutComponent targetContainer,
-      LayoutInterval[] addingInts) {
-    // add the components to the model (to the target container)
-    for (LayoutComponent comp : components) {
-      layoutModel.addComponent(comp, targetContainer, -1);
-    }
-    LayoutInterval[] targetRoots = layoutModel.addNewLayoutRoots(targetContainer);
-    for (int dim = 0; dim < DIM_COUNT; dim++) {
-      LayoutInterval interval = addingInts[dim];
-      LayoutInterval seq = interval.isSequential() ? interval : new LayoutInterval(SEQUENTIAL);
-      LayoutInterval gap = new LayoutInterval(SINGLE);
-      boolean resizing = LayoutInterval.wantResize(interval);
-      if (!resizing) {
-        gap.setSizes(0, 0, Short.MAX_VALUE);
-      }
-      seq.add(gap, 0);
-      if (interval != seq) {
-        layoutModel.addInterval(interval, seq, -1);
-        layoutModel.setIntervalAlignment(interval, DEFAULT);
-      }
-      gap = new LayoutInterval(SINGLE);
-      if (!resizing) {
-        gap.setSizes(0, 0, Short.MAX_VALUE);
-      }
-      seq.add(gap, -1);
-      layoutModel.addInterval(seq, targetRoots[dim], -1);
-    }
-  }
+	private void addUnspecified(LayoutComponent[] components,
+			LayoutComponent targetContainer,
+			LayoutInterval[] addingInts) {
+		// add the components to the model (to the target container)
+		for (LayoutComponent comp : components) {
+			layoutModel.addComponent(comp, targetContainer, -1);
+		}
+		LayoutInterval[] targetRoots = layoutModel.addNewLayoutRoots(targetContainer);
+		for (int dim = 0; dim < DIM_COUNT; dim++) {
+			LayoutInterval interval = addingInts[dim];
+			LayoutInterval seq = interval.isSequential() ? interval : new LayoutInterval(SEQUENTIAL);
+			LayoutInterval gap = new LayoutInterval(SINGLE);
+			boolean resizing = LayoutInterval.wantResize(interval);
+			if (!resizing) {
+				gap.setSizes(0, 0, Short.MAX_VALUE);
+			}
+			seq.add(gap, 0);
+			if (interval != seq) {
+				layoutModel.addInterval(interval, seq, -1);
+				layoutModel.setIntervalAlignment(interval, DEFAULT);
+			}
+			gap = new LayoutInterval(SINGLE);
+			if (!resizing) {
+				gap.setSizes(0, 0, Short.MAX_VALUE);
+			}
+			seq.add(gap, -1);
+			layoutModel.addInterval(seq, targetRoots[dim], -1);
+		}
+	}
 
-  private void addToEmpty(LayoutComponent[] components,
-      LayoutComponent targetContainer,
-      LayoutInterval[] addingInts) {
-    assert targetContainer.getSubComponentCount() == 0;
-    for (LayoutComponent comp : components) {
-      layoutModel.addComponent(comp, targetContainer, -1);
-    }
-    LayoutInterval[] roots = getActiveLayoutRoots(targetContainer);
-    for (int dim = 0; dim < DIM_COUNT; dim++) {
-      LayoutInterval root = roots[dim];
-      assert root.isParallel();
-      LayoutInterval interval = addingInts[dim];
-      if (!interval.isParallel()) {
-        layoutModel.addInterval(interval, root, -1);
-      } else {
-        while (interval.getSubIntervalCount() > 0) {
-          layoutModel.addInterval(interval.remove(0), root, -1);
-        }
-      }
-    }
-  }
+	private void addToEmpty(LayoutComponent[] components,
+			LayoutComponent targetContainer,
+			LayoutInterval[] addingInts) {
+		assert targetContainer.getSubComponentCount() == 0;
+		for (LayoutComponent comp : components) {
+			layoutModel.addComponent(comp, targetContainer, -1);
+		}
+		LayoutInterval[] roots = getActiveLayoutRoots(targetContainer);
+		for (int dim = 0; dim < DIM_COUNT; dim++) {
+			LayoutInterval root = roots[dim];
+			assert root.isParallel();
+			LayoutInterval interval = addingInts[dim];
+			if (!interval.isParallel()) {
+				layoutModel.addInterval(interval, root, -1);
+			} else {
+				while (interval.getSubIntervalCount() > 0) {
+					layoutModel.addInterval(interval.remove(0), root, -1);
+				}
+			}
+		}
+	}
 
-  /**
-   * Creates copy of the given interval restricted to specified components and region (
-   * <code>space</code>).
-   *
-   * @param interval
-   *          interval whose restricted copy should be created.
-   * @param componentMap
-   *          components that determine the restriction.
-   * @param space
-   *          region (current space) that determine the restriction.
-   * @param dimension
-   *          dimension that restricted layout interval belongs to.
-   * @param temp
-   *          internal helper parameter for recursive invocation. Pass <code>null</code> when you
-   *          invoke this method.
-   */
-  private LayoutInterval restrictedCopy(LayoutInterval interval,
-      Map<LayoutComponent, LayoutComponent> componentMap,
-      LayoutRegion space,
-      int dimension,
-      List<Object> temp) {
-    boolean processTemp = temp == null;
-    if (temp == null) {
-      temp = new LinkedList<Object>();
-    }
-    if (interval.isGroup()) {
-      boolean parallel = interval.isParallel();
-      LayoutInterval copy = LayoutInterval.cloneInterval(interval, null);
-      Iterator iter = interval.getSubIntervals();
-      int compCount = 0; // Number of components already copied to the group
-      boolean includeGap = false; // Helper variables that allow us to insert gaps
-      int firstGapToInclude = 0; // instead of components that has been filtered out.
-      int gapStart = interval.getCurrentSpace().positions[dimension][LEADING];
-      while (iter.hasNext()) {
-        LayoutInterval sub = (LayoutInterval) iter.next();
-        LayoutInterval subCopy = restrictedCopy(sub, componentMap, space, dimension, temp);
-        if (subCopy != null) {
-          if (!sub.isEmptySpace()) {
-            if (includeGap) {
-              gapStart = Math.max(space.positions[dimension][LEADING], gapStart);
-              int size = sub.getCurrentSpace().positions[dimension][LEADING] - gapStart;
-              integrateGap(copy, size, firstGapToInclude);
-              includeGap = false;
-            }
-            gapStart = sub.getCurrentSpace().positions[dimension][TRAILING];
-            firstGapToInclude = copy.getSubIntervalCount();
-          }
-          if (sub.isComponent()) {
-            // Remember where to add component intervals - they cannot
-            // be moved immediately because the model listener would
-            // destroy the adjacent intervals before we would be able
-            // to copy them.
-            temp.add(subCopy);
-            temp.add(copy);
-            temp.add(Integer.valueOf(subCopy.getRawAlignment()));
-            temp.add(Integer.valueOf(copy.getSubIntervalCount() + compCount));
-            compCount++;
-          } else {
-            layoutModel.addInterval(subCopy, copy, -1);
-          }
-        } else {
-          if (!parallel) {
-            includeGap = true;
-          }
-        }
-      }
-      if (includeGap) {
-        gapStart = Math.max(space.positions[dimension][LEADING], gapStart);
-        int gapEnd = Math.min(
-            space.positions[dimension][TRAILING],
-            interval.getCurrentSpace().positions[dimension][TRAILING]);
-        integrateGap(copy, gapEnd - gapStart, firstGapToInclude);
-      }
-      if (copy.getSubIntervalCount() + compCount > 0) {
-        if (processTemp) {
-          // Insert component intervals
-          iter = temp.iterator();
-          while (iter.hasNext()) {
-            LayoutInterval comp = (LayoutInterval) iter.next();
-            LayoutInterval parent = (LayoutInterval) iter.next();
-            int alignment = ((Integer) iter.next()).intValue();
-            int index = ((Integer) iter.next()).intValue();
-            if (comp.getParent() != null) { // component reused - not copied, just moved
-              layoutModel.removeInterval(comp);
-            }
-            layoutModel.setIntervalAlignment(comp, alignment);
-            layoutModel.addInterval(comp, parent, index);
-          }
-          // Consolidate the groups where the components has been added
-          boolean active = modelListener.isActive();
-          if (active) {
-            modelListener.deactivate();
-          }
-          iter = temp.iterator();
-          while (iter.hasNext()) {
-            iter.next(); // skip the component
-            LayoutInterval group = (LayoutInterval) iter.next();
-            iter.next();
-            iter.next(); // skip alignment and index
-            LayoutInterval parent = group.getParent();
-            while (group.getSubIntervalCount() == 1 && parent != null) {
-              LayoutInterval sub = group.getSubInterval(0);
-              layoutModel.removeInterval(sub);
-              int alignment = group.getAlignment();
-              int index = layoutModel.removeInterval(group);
-              layoutModel.setIntervalAlignment(sub, alignment);
-              layoutModel.addInterval(sub, parent, index);
-              group = sub;
-            }
-          }
-          compCount = 0;
-          if (active) {
-            modelListener.activate();
-          }
-        }
-        // consolidate copy
-        if (copy.getSubIntervalCount() == 1 && compCount == 0) {
-          boolean active = modelListener.isActive();
-          if (active) {
-            modelListener.deactivate();
-          }
-          LayoutInterval subCopy = copy.getSubInterval(0);
-          layoutModel.removeInterval(subCopy);
-          layoutModel.setIntervalAlignment(subCopy, copy.getAlignment());
-          if (copy.isSequential() && subCopy.isEmptySpace()) {
-            copy = null;
-          } else {
-            copy = subCopy;
-          }
-          if (active) {
-            modelListener.activate();
-          }
-        }
-        return copy;
-      } else {
-        return null;
-      }
-    } else if (interval.isComponent()) {
-      LayoutComponent comp = componentMap.get(interval.getComponent());
-      if (comp != null) {
-        if (comp != interval.getComponent()) { // there is a copied component available
-          interval = LayoutInterval.cloneInterval(interval, comp.getLayoutInterval(dimension));
-        } // otherwise the component will be moved from its original location
-        return interval;
-      } else { // skip this component
-        return null;
-      }
-    } else {
-      assert interval.isEmptySpace();
-      int[] bounds = emptySpaceBounds(interval, dimension);
-      int rangeStart = space.positions[dimension][LEADING];
-      int rangeEnd = space.positions[dimension][TRAILING];
-      if (bounds[0] < rangeEnd && bounds[1] > rangeStart) {
-        LayoutInterval gap = new LayoutInterval(SINGLE);
-        gap.setAttributes(interval.getAttributes());
-        if (bounds[0] < rangeStart || bounds[1] > rangeEnd) {
-          // Partial overlap with the provides space
-          int min = interval.getMinimumSize();
-          if (min >= 0) {
-            min = USE_PREFERRED_SIZE;
-          }
-          int pref = Math.min(bounds[1], rangeEnd) - Math.max(bounds[0], rangeStart);
-          int max = interval.getMaximumSize();
-          if (max >= 0) {
-            max = USE_PREFERRED_SIZE;
-          }
-          gap.setSizes(min, pref, max);
-        } else {
-          gap.setSizes(
-              interval.getMinimumSize(),
-              interval.getPreferredSize(),
-              interval.getMaximumSize());
-          gap.setPaddingType(interval.getPaddingType());
-        }
-        return gap;
-      } else {
-        // Outside the provided space
-        return null;
-      }
-    }
-  }
+	/**
+	 * Creates copy of the given interval restricted to specified components and region (
+	 * <code>space</code>).
+	 *
+	 * @param interval
+	 *          interval whose restricted copy should be created.
+	 * @param componentMap
+	 *          components that determine the restriction.
+	 * @param space
+	 *          region (current space) that determine the restriction.
+	 * @param dimension
+	 *          dimension that restricted layout interval belongs to.
+	 * @param temp
+	 *          internal helper parameter for recursive invocation. Pass <code>null</code> when you
+	 *          invoke this method.
+	 */
+	private LayoutInterval restrictedCopy(LayoutInterval interval,
+			Map<LayoutComponent, LayoutComponent> componentMap,
+			LayoutRegion space,
+			int dimension,
+			List<Object> temp) {
+		boolean processTemp = temp == null;
+		if (temp == null) {
+			temp = new LinkedList<Object>();
+		}
+		if (interval.isGroup()) {
+			boolean parallel = interval.isParallel();
+			LayoutInterval copy = LayoutInterval.cloneInterval(interval, null);
+			Iterator iter = interval.getSubIntervals();
+			int compCount = 0; // Number of components already copied to the group
+			boolean includeGap = false; // Helper variables that allow us to insert gaps
+			int firstGapToInclude = 0; // instead of components that has been filtered out.
+			int gapStart = interval.getCurrentSpace().positions[dimension][LEADING];
+			while (iter.hasNext()) {
+				LayoutInterval sub = (LayoutInterval) iter.next();
+				LayoutInterval subCopy = restrictedCopy(sub, componentMap, space, dimension, temp);
+				if (subCopy != null) {
+					if (!sub.isEmptySpace()) {
+						if (includeGap) {
+							gapStart = Math.max(space.positions[dimension][LEADING], gapStart);
+							int size = sub.getCurrentSpace().positions[dimension][LEADING] - gapStart;
+							integrateGap(copy, size, firstGapToInclude);
+							includeGap = false;
+						}
+						gapStart = sub.getCurrentSpace().positions[dimension][TRAILING];
+						firstGapToInclude = copy.getSubIntervalCount();
+					}
+					if (sub.isComponent()) {
+						// Remember where to add component intervals - they cannot
+						// be moved immediately because the model listener would
+						// destroy the adjacent intervals before we would be able
+						// to copy them.
+						temp.add(subCopy);
+						temp.add(copy);
+						temp.add(Integer.valueOf(subCopy.getRawAlignment()));
+						temp.add(Integer.valueOf(copy.getSubIntervalCount() + compCount));
+						compCount++;
+					} else {
+						layoutModel.addInterval(subCopy, copy, -1);
+					}
+				} else {
+					if (!parallel) {
+						includeGap = true;
+					}
+				}
+			}
+			if (includeGap) {
+				gapStart = Math.max(space.positions[dimension][LEADING], gapStart);
+				int gapEnd = Math.min(
+						space.positions[dimension][TRAILING],
+						interval.getCurrentSpace().positions[dimension][TRAILING]);
+				integrateGap(copy, gapEnd - gapStart, firstGapToInclude);
+			}
+			if (copy.getSubIntervalCount() + compCount > 0) {
+				if (processTemp) {
+					// Insert component intervals
+					iter = temp.iterator();
+					while (iter.hasNext()) {
+						LayoutInterval comp = (LayoutInterval) iter.next();
+						LayoutInterval parent = (LayoutInterval) iter.next();
+						int alignment = ((Integer) iter.next()).intValue();
+						int index = ((Integer) iter.next()).intValue();
+						if (comp.getParent() != null) { // component reused - not copied, just moved
+							layoutModel.removeInterval(comp);
+						}
+						layoutModel.setIntervalAlignment(comp, alignment);
+						layoutModel.addInterval(comp, parent, index);
+					}
+					// Consolidate the groups where the components has been added
+					boolean active = modelListener.isActive();
+					if (active) {
+						modelListener.deactivate();
+					}
+					iter = temp.iterator();
+					while (iter.hasNext()) {
+						iter.next(); // skip the component
+						LayoutInterval group = (LayoutInterval) iter.next();
+						iter.next();
+						iter.next(); // skip alignment and index
+						LayoutInterval parent = group.getParent();
+						while (group.getSubIntervalCount() == 1 && parent != null) {
+							LayoutInterval sub = group.getSubInterval(0);
+							layoutModel.removeInterval(sub);
+							int alignment = group.getAlignment();
+							int index = layoutModel.removeInterval(group);
+							layoutModel.setIntervalAlignment(sub, alignment);
+							layoutModel.addInterval(sub, parent, index);
+							group = sub;
+						}
+					}
+					compCount = 0;
+					if (active) {
+						modelListener.activate();
+					}
+				}
+				// consolidate copy
+				if (copy.getSubIntervalCount() == 1 && compCount == 0) {
+					boolean active = modelListener.isActive();
+					if (active) {
+						modelListener.deactivate();
+					}
+					LayoutInterval subCopy = copy.getSubInterval(0);
+					layoutModel.removeInterval(subCopy);
+					layoutModel.setIntervalAlignment(subCopy, copy.getAlignment());
+					if (copy.isSequential() && subCopy.isEmptySpace()) {
+						copy = null;
+					} else {
+						copy = subCopy;
+					}
+					if (active) {
+						modelListener.activate();
+					}
+				}
+				return copy;
+			} else {
+				return null;
+			}
+		} else if (interval.isComponent()) {
+			LayoutComponent comp = componentMap.get(interval.getComponent());
+			if (comp != null) {
+				if (comp != interval.getComponent()) { // there is a copied component available
+					interval = LayoutInterval.cloneInterval(interval, comp.getLayoutInterval(dimension));
+				} // otherwise the component will be moved from its original location
+				return interval;
+			} else { // skip this component
+				return null;
+			}
+		} else {
+			assert interval.isEmptySpace();
+			int[] bounds = emptySpaceBounds(interval, dimension);
+			int rangeStart = space.positions[dimension][LEADING];
+			int rangeEnd = space.positions[dimension][TRAILING];
+			if (bounds[0] < rangeEnd && bounds[1] > rangeStart) {
+				LayoutInterval gap = new LayoutInterval(SINGLE);
+				gap.setAttributes(interval.getAttributes());
+				if (bounds[0] < rangeStart || bounds[1] > rangeEnd) {
+					// Partial overlap with the provides space
+					int min = interval.getMinimumSize();
+					if (min >= 0) {
+						min = USE_PREFERRED_SIZE;
+					}
+					int pref = Math.min(bounds[1], rangeEnd) - Math.max(bounds[0], rangeStart);
+					int max = interval.getMaximumSize();
+					if (max >= 0) {
+						max = USE_PREFERRED_SIZE;
+					}
+					gap.setSizes(min, pref, max);
+				} else {
+					gap.setSizes(
+							interval.getMinimumSize(),
+							interval.getPreferredSize(),
+							interval.getMaximumSize());
+					gap.setPaddingType(interval.getPaddingType());
+				}
+				return gap;
+			} else {
+				// Outside the provided space
+				return null;
+			}
+		}
+	}
 
-  /**
-   * Helper method used by <code>restrictedCopy()</code> method. Replaces empty spaces at the end of
-   * the sequential group by an empty space of the specified size. Only empty spaces with index >=
-   * boundary are replaced.
-   *
-   * @param seqGroup
-   *          sequential group.
-   * @param size
-   *          size of the empty space that should be added.
-   * @param boundary
-   *          index in the sequential group that limits the replacement of the empty spaces.
-   */
-  private void integrateGap(LayoutInterval seqGroup, int size, int boundary) {
-    while (seqGroup.getSubIntervalCount() > boundary
-        && seqGroup.getSubInterval(seqGroup.getSubIntervalCount() - 1).isEmptySpace()) {
-      layoutModel.removeInterval(seqGroup.getSubInterval(seqGroup.getSubIntervalCount() - 1));
-    }
-    if (size > 0) {
-      LayoutInterval gap = new LayoutInterval(SINGLE);
-      gap.setSize(size);
-      layoutModel.addInterval(gap, seqGroup, -1);
-    }
-  }
+	/**
+	 * Helper method used by <code>restrictedCopy()</code> method. Replaces empty spaces at the end of
+	 * the sequential group by an empty space of the specified size. Only empty spaces with index >=
+	 * boundary are replaced.
+	 *
+	 * @param seqGroup
+	 *          sequential group.
+	 * @param size
+	 *          size of the empty space that should be added.
+	 * @param boundary
+	 *          index in the sequential group that limits the replacement of the empty spaces.
+	 */
+	private void integrateGap(LayoutInterval seqGroup, int size, int boundary) {
+		while (seqGroup.getSubIntervalCount() > boundary
+				&& seqGroup.getSubInterval(seqGroup.getSubIntervalCount() - 1).isEmptySpace()) {
+			layoutModel.removeInterval(seqGroup.getSubInterval(seqGroup.getSubIntervalCount() - 1));
+		}
+		if (size > 0) {
+			LayoutInterval gap = new LayoutInterval(SINGLE);
+			gap.setSize(size);
+			layoutModel.addInterval(gap, seqGroup, -1);
+		}
+	}
 
-  /**
-   * Returns bounds (e.g. current space) of the empty space in the given dimension.
-   *
-   * @param emptySpace
-   *          empty space.
-   * @param dimenion
-   *          dimension.
-   * @return array whose the first item is the leading bound of the empty space and the second item
-   *         is the trailing bound.
-   */
-  private int[] emptySpaceBounds(LayoutInterval emptySpace, int dimension) {
-    assert emptySpace.isEmptySpace();
-    int leading, trailing;
-    LayoutInterval parent = emptySpace.getParent();
-    int index = parent.indexOf(emptySpace);
-    if (index == 0) {
-      leading = parent.getCurrentSpace().positions[dimension][LEADING];
-    } else {
-      leading = parent.getSubInterval(index - 1).getCurrentSpace().positions[dimension][TRAILING];
-    }
-    if (index + 1 == parent.getSubIntervalCount()) {
-      trailing = parent.getCurrentSpace().positions[dimension][TRAILING];
-    } else {
-      trailing = parent.getSubInterval(index + 1).getCurrentSpace().positions[dimension][LEADING];
-    }
-    return new int[]{leading, trailing};
-  }
+	/**
+	 * Returns bounds (e.g. current space) of the empty space in the given dimension.
+	 *
+	 * @param emptySpace
+	 *          empty space.
+	 * @param dimenion
+	 *          dimension.
+	 * @return array whose the first item is the leading bound of the empty space and the second item
+	 *         is the trailing bound.
+	 */
+	private int[] emptySpaceBounds(LayoutInterval emptySpace, int dimension) {
+		assert emptySpace.isEmptySpace();
+		int leading, trailing;
+		LayoutInterval parent = emptySpace.getParent();
+		int index = parent.indexOf(emptySpace);
+		if (index == 0) {
+			leading = parent.getCurrentSpace().positions[dimension][LEADING];
+		} else {
+			leading = parent.getSubInterval(index - 1).getCurrentSpace().positions[dimension][TRAILING];
+		}
+		if (index + 1 == parent.getSubIntervalCount()) {
+			trailing = parent.getCurrentSpace().positions[dimension][TRAILING];
+		} else {
+			trailing = parent.getSubInterval(index + 1).getCurrentSpace().positions[dimension][LEADING];
+		}
+		return new int[]{leading, trailing};
+	}
 
-  /**
-   * Removes currently dragged components from layout model. Called when the components were dragged
-   * out of the form (or to a container not managed by this layout model).
-   */
-  public void removeDraggedComponents() {
-    if (dragger != null) {
-      LayoutComponent[] components = dragger.getMovingComponents();
-      for (int i = 0; i < components.length; i++) {
-        layoutModel.removeComponentAndIntervals(components[i], !components[i].isLayoutContainer());
-      }
-      endMoving(false);
-    }
-  }
+	/**
+	 * Removes currently dragged components from layout model. Called when the components were dragged
+	 * out of the form (or to a container not managed by this layout model).
+	 */
+	public void removeDraggedComponents() {
+		if (dragger != null) {
+			LayoutComponent[] components = dragger.getMovingComponents();
+			for (int i = 0; i < components.length; i++) {
+				layoutModel.removeComponentAndIntervals(components[i], !components[i].isLayoutContainer());
+			}
+			endMoving(false);
+		}
+	}
 
-  public void paintMoveFeedback(IFeedbacksDrawer g) {
-    if (dragger != null) { // Dragger might not be initialized yet
-      dragger.paintMoveFeedback(g);
-    }
-  }
+	public void paintMoveFeedback(IFeedbacksDrawer g) {
+		if (dragger != null) { // Dragger might not be initialized yet
+			dragger.paintMoveFeedback(g);
+		}
+	}
 
-  /**
-   * Paints layout information (alignment) for the selected component.
-   *
-   * @param g
-   *          graphics object to use.
-   * @param componentId
-   *          ID of selected component.
-   */
-  public void paintSelection(IFeedbacksDrawer g, String componentId) {
-    LayoutComponent comp = layoutModel.getLayoutComponent(componentId);
-    if (comp != null && comp.getParent() != null) {
-      paintSelection(g, comp, HORIZONTAL);
-      paintSelection(g, comp, VERTICAL);
-    }
-  }
+	/**
+	 * Paints layout information (alignment) for the selected component.
+	 *
+	 * @param g
+	 *          graphics object to use.
+	 * @param componentId
+	 *          ID of selected component.
+	 */
+	public void paintSelection(IFeedbacksDrawer g, String componentId) {
+		LayoutComponent comp = layoutModel.getLayoutComponent(componentId);
+		if (comp != null && comp.getParent() != null) {
+			paintSelection(g, comp, HORIZONTAL);
+			paintSelection(g, comp, VERTICAL);
+		}
+	}
 
-  /**
-   * Paints layout information (alignment) for the selected component and specified dimension.
-   *
-   * @param g
-   *          graphics object to use.
-   * @param component
-   *          selected layout component.
-   * @param dimension
-   *          dimension whose layout should be visualized.
-   */
-  private void paintSelection(IFeedbacksDrawer g, LayoutComponent component, int dimension) {
-    LayoutInterval interval = component.getLayoutInterval(dimension);
-    if (component.isLinkSized(HORIZONTAL) || component.isLinkSized(VERTICAL)) {
-      paintLinks(g, component);
-    }
-    // Paint baseline alignment
-    if (interval.getAlignment() == BASELINE) {
-      LayoutInterval alignedParent = interval.getParent();
-      int oppDimension = dimension == HORIZONTAL ? VERTICAL : HORIZONTAL;
-      LayoutRegion region = alignedParent.getCurrentSpace();
-      int x = region.positions[dimension][BASELINE];
-      int y1 = region.positions[oppDimension][LEADING];
-      int y2 = region.positions[oppDimension][TRAILING];
-      if (y1 != LayoutRegion.UNKNOWN && y2 != LayoutRegion.UNKNOWN) {
-        if (dimension == HORIZONTAL) {
-          g.drawLine(x, y1, x, y2);
-        } else {
-          g.drawLine(y1, x, y2, x);
-        }
-      }
-    }
-    int lastAlignment = -1;
-    while (interval.getParent() != null) {
-      LayoutInterval parent = interval.getParent();
-      if (parent.getType() == SEQUENTIAL) {
-        int alignment = LayoutInterval.getEffectiveAlignment(interval);
-        int index = parent.indexOf(interval);
-        int start, end;
-        switch (alignment) {
-          case LEADING :
-            start = 0;
-            end = index;
-            lastAlignment = LEADING;
-            break;
-          case TRAILING :
-            start = index + 1;
-            end = parent.getSubIntervalCount();
-            lastAlignment = TRAILING;
-            break;
-          default :
-            switch (lastAlignment) {
-              case LEADING :
-                start = 0;
-                end = index;
-                break;
-              case TRAILING :
-                start = index + 1;
-                end = parent.getSubIntervalCount();
-                break;
-              default :
-                start = 0;
-                end = parent.getSubIntervalCount();
-                break;
-            }
-        }
-        for (int i = start; i < end; i++) {
-          LayoutInterval candidate = parent.getSubInterval(i);
-          if (candidate.isEmptySpace()) {
-            paintAlignment(
-                g,
-                candidate,
-                dimension,
-                LayoutInterval.getEffectiveAlignment(candidate));
-          }
-        }
-      } else {
-        int alignment = interval.getAlignment();
-        if (!LayoutInterval.wantResizeInLayout(interval)) {
-          lastAlignment = alignment;
-        }
-        paintAlignment(g, interval, dimension, lastAlignment);
-      }
-      interval = interval.getParent();
-    }
-  }
+	/**
+	 * Paints layout information (alignment) for the selected component and specified dimension.
+	 *
+	 * @param g
+	 *          graphics object to use.
+	 * @param component
+	 *          selected layout component.
+	 * @param dimension
+	 *          dimension whose layout should be visualized.
+	 */
+	private void paintSelection(IFeedbacksDrawer g, LayoutComponent component, int dimension) {
+		LayoutInterval interval = component.getLayoutInterval(dimension);
+		if (component.isLinkSized(HORIZONTAL) || component.isLinkSized(VERTICAL)) {
+			paintLinks(g, component);
+		}
+		// Paint baseline alignment
+		if (interval.getAlignment() == BASELINE) {
+			LayoutInterval alignedParent = interval.getParent();
+			int oppDimension = dimension == HORIZONTAL ? VERTICAL : HORIZONTAL;
+			LayoutRegion region = alignedParent.getCurrentSpace();
+			int x = region.positions[dimension][BASELINE];
+			int y1 = region.positions[oppDimension][LEADING];
+			int y2 = region.positions[oppDimension][TRAILING];
+			if (y1 != LayoutRegion.UNKNOWN && y2 != LayoutRegion.UNKNOWN) {
+				if (dimension == HORIZONTAL) {
+					g.drawLine(x, y1, x, y2);
+				} else {
+					g.drawLine(y1, x, y2, x);
+				}
+			}
+		}
+		int lastAlignment = -1;
+		while (interval.getParent() != null) {
+			LayoutInterval parent = interval.getParent();
+			if (parent.getType() == SEQUENTIAL) {
+				int alignment = LayoutInterval.getEffectiveAlignment(interval);
+				int index = parent.indexOf(interval);
+				int start, end;
+				switch (alignment) {
+				case LEADING :
+					start = 0;
+					end = index;
+					lastAlignment = LEADING;
+					break;
+				case TRAILING :
+					start = index + 1;
+					end = parent.getSubIntervalCount();
+					lastAlignment = TRAILING;
+					break;
+				default :
+					switch (lastAlignment) {
+					case LEADING :
+						start = 0;
+						end = index;
+						break;
+					case TRAILING :
+						start = index + 1;
+						end = parent.getSubIntervalCount();
+						break;
+					default :
+						start = 0;
+						end = parent.getSubIntervalCount();
+						break;
+					}
+				}
+				for (int i = start; i < end; i++) {
+					LayoutInterval candidate = parent.getSubInterval(i);
+					if (candidate.isEmptySpace()) {
+						paintAlignment(
+								g,
+								candidate,
+								dimension,
+								LayoutInterval.getEffectiveAlignment(candidate));
+					}
+				}
+			} else {
+				int alignment = interval.getAlignment();
+				if (!LayoutInterval.wantResizeInLayout(interval)) {
+					lastAlignment = alignment;
+				}
+				paintAlignment(g, interval, dimension, lastAlignment);
+			}
+			interval = interval.getParent();
+		}
+	}
 
-  private void paintLinks(IFeedbacksDrawer g, LayoutComponent component) {
-    if (component.isLinkSized(HORIZONTAL) && component.isLinkSized(VERTICAL)) {
-      Map<Integer, List<String>> linkGroupsH = layoutModel.getLinkSizeGroups(HORIZONTAL);
-      Map<Integer, List<String>> linkGroupsV = layoutModel.getLinkSizeGroups(VERTICAL);
-      Integer linkIdH = Integer.valueOf(component.getLinkSizeId(HORIZONTAL));
-      Integer linkIdV = Integer.valueOf(component.getLinkSizeId(VERTICAL));
-      List<String> lH = linkGroupsH.get(linkIdH);
-      List<String> lV = linkGroupsV.get(linkIdV);
-      Set<String> merged = new HashSet<String>();
-      for (int i = 0; i < lH.size(); i++) {
-        merged.add(lH.get(i));
-      }
-      for (int i = 0; i < lV.size(); i++) {
-        merged.add(lV.get(i));
-      }
-      Iterator<String> mergedIt = merged.iterator();
-      while (mergedIt.hasNext()) {
-        String id = mergedIt.next();
-        LayoutComponent lc = layoutModel.getLayoutComponent(id);
-        LayoutInterval interval = lc.getLayoutInterval(HORIZONTAL);
-        LayoutRegion region = interval.getCurrentSpace();
-        int badgeDimension = 0;
-        if (lV.contains(id) && lH.contains(id)) {
-          badgeDimension = IFeedbacksDrawer.BOTH_DIMENSIONS;
-        } else {
-          if (lH.contains(lc.getId())) {
-            badgeDimension = HORIZONTAL;
-          }
-          if (lV.contains(lc.getId())) {
-            badgeDimension = VERTICAL;
-          }
-        }
-        int x = region.positions[HORIZONTAL][TRAILING];
-        int y = region.positions[VERTICAL][TRAILING];
-        g.drawLinkBadge(x, y, badgeDimension);
-      }
-    } else {
-      int dimension = component.isLinkSized(HORIZONTAL) ? HORIZONTAL : VERTICAL;
-      Map map = layoutModel.getLinkSizeGroups(dimension);
-      Integer linkId = Integer.valueOf(component.getLinkSizeId(dimension));
-      List l = (List) map.get(linkId);
-      Iterator mergedIt = l.iterator();
-      while (mergedIt.hasNext()) {
-        String id = (String) mergedIt.next();
-        LayoutComponent lc = layoutModel.getLayoutComponent(id);
-        LayoutInterval interval = lc.getLayoutInterval(dimension);
-        LayoutRegion region = interval.getCurrentSpace();
-        int x = region.positions[HORIZONTAL][TRAILING];
-        int y = region.positions[VERTICAL][TRAILING];
-        g.drawLinkBadge(x, y, dimension);
-      }
-    }
-  }
+	private void paintLinks(IFeedbacksDrawer g, LayoutComponent component) {
+		if (component.isLinkSized(HORIZONTAL) && component.isLinkSized(VERTICAL)) {
+			Map<Integer, List<String>> linkGroupsH = layoutModel.getLinkSizeGroups(HORIZONTAL);
+			Map<Integer, List<String>> linkGroupsV = layoutModel.getLinkSizeGroups(VERTICAL);
+			Integer linkIdH = Integer.valueOf(component.getLinkSizeId(HORIZONTAL));
+			Integer linkIdV = Integer.valueOf(component.getLinkSizeId(VERTICAL));
+			List<String> lH = linkGroupsH.get(linkIdH);
+			List<String> lV = linkGroupsV.get(linkIdV);
+			Set<String> merged = new HashSet<String>();
+			for (int i = 0; i < lH.size(); i++) {
+				merged.add(lH.get(i));
+			}
+			for (int i = 0; i < lV.size(); i++) {
+				merged.add(lV.get(i));
+			}
+			Iterator<String> mergedIt = merged.iterator();
+			while (mergedIt.hasNext()) {
+				String id = mergedIt.next();
+				LayoutComponent lc = layoutModel.getLayoutComponent(id);
+				LayoutInterval interval = lc.getLayoutInterval(HORIZONTAL);
+				LayoutRegion region = interval.getCurrentSpace();
+				int badgeDimension = 0;
+				if (lV.contains(id) && lH.contains(id)) {
+					badgeDimension = IFeedbacksDrawer.BOTH_DIMENSIONS;
+				} else {
+					if (lH.contains(lc.getId())) {
+						badgeDimension = HORIZONTAL;
+					}
+					if (lV.contains(lc.getId())) {
+						badgeDimension = VERTICAL;
+					}
+				}
+				int x = region.positions[HORIZONTAL][TRAILING];
+				int y = region.positions[VERTICAL][TRAILING];
+				g.drawLinkBadge(x, y, badgeDimension);
+			}
+		} else {
+			int dimension = component.isLinkSized(HORIZONTAL) ? HORIZONTAL : VERTICAL;
+			Map map = layoutModel.getLinkSizeGroups(dimension);
+			Integer linkId = Integer.valueOf(component.getLinkSizeId(dimension));
+			List l = (List) map.get(linkId);
+			Iterator mergedIt = l.iterator();
+			while (mergedIt.hasNext()) {
+				String id = (String) mergedIt.next();
+				LayoutComponent lc = layoutModel.getLayoutComponent(id);
+				LayoutInterval interval = lc.getLayoutInterval(dimension);
+				LayoutRegion region = interval.getCurrentSpace();
+				int x = region.positions[HORIZONTAL][TRAILING];
+				int y = region.positions[VERTICAL][TRAILING];
+				g.drawLinkBadge(x, y, dimension);
+			}
+		}
+	}
 
-  private void paintAlignment(IFeedbacksDrawer g,
-      LayoutInterval interval,
-      int dimension,
-      int alignment) {
-    LayoutInterval parent = interval.getParent();
-    boolean baseline = parent.isParallel() && parent.getGroupAlignment() == BASELINE;
-    LayoutRegion group = parent.getCurrentSpace();
-    int opposite = dimension == HORIZONTAL ? VERTICAL : HORIZONTAL;
-    int x1, x2, y;
-    if (interval.isEmptySpace()) {
-      int index = parent.indexOf(interval);
-      int[] ya, yb;
-      boolean x1group, x2group;
-      if (index == 0) {
-        x1 = group.positions[dimension][baseline ? BASELINE : LEADING];
-        ya = visualIntervalPosition(parent, opposite, LEADING);
-        x1group = LayoutInterval.getFirstParent(interval, PARALLEL).getParent() != null;
-      } else {
-        LayoutInterval x1int = parent.getSubInterval(index - 1);
-        if (x1int.isParallel() && x1int.getGroupAlignment() == BASELINE) {
-          x1 = x1int.getCurrentSpace().positions[dimension][BASELINE];
-        } else {
-          if (x1int.isEmptySpace()) {
-            return;
-          }
-          x1 = x1int.getCurrentSpace().positions[dimension][TRAILING];
-        }
-        ya = visualIntervalPosition(x1int, opposite, TRAILING);
-        x1group = x1int.isGroup();
-      }
-      if (index + 1 == parent.getSubIntervalCount()) {
-        x2 = group.positions[dimension][baseline ? BASELINE : TRAILING];
-        yb = visualIntervalPosition(parent, opposite, TRAILING);
-        x2group = LayoutInterval.getFirstParent(interval, PARALLEL).getParent() != null;
-      } else {
-        LayoutInterval x2int = parent.getSubInterval(index + 1);
-        if (x2int.isParallel() && x2int.getGroupAlignment() == BASELINE) {
-          x2 = x2int.getCurrentSpace().positions[dimension][BASELINE];
-        } else {
-          if (x2int.isEmptySpace()) {
-            return;
-          }
-          x2 = x2int.getCurrentSpace().positions[dimension][LEADING];
-        }
-        yb = visualIntervalPosition(x2int, opposite, LEADING);
-        x2group = x2int.isGroup();
-      }
-      if (x1 == LayoutRegion.UNKNOWN || x2 == LayoutRegion.UNKNOWN) {
-        return;
-      }
-      int y1 = Math.min(ya[1], yb[1]);
-      int y2 = Math.max(ya[0], yb[0]);
-      y = (y1 + y2) / 2;
-      if (ya[1] < yb[0] || yb[1] < ya[0]) {
-        // no intersection
-        if (dimension == HORIZONTAL) {
-          g.drawLine(x1, ya[0], x1, y);
-          g.drawLine(x1, ya[0], x1, ya[1]);
-          g.drawLine(x2, yb[0], x2, y);
-          g.drawLine(x2, yb[0], x2, yb[1]);
-        } else {
-          g.drawLine(ya[0], x1, y, x1);
-          g.drawLine(ya[0], x1, ya[1], x1);
-          g.drawLine(yb[0], x2, y, x2);
-          g.drawLine(yb[0], x2, yb[1], x2);
-        }
-      } else {
-        if (dimension == HORIZONTAL) {
-          if (x1group) {
-            g.drawLine(x1, ya[0], x1, ya[1]);
-          }
-          if (x2group) {
-            g.drawLine(x2, yb[0], x2, yb[1]);
-          }
-        } else {
-          if (x1group) {
-            g.drawLine(ya[0], x1, ya[1], x1);
-          }
-          if (x2group) {
-            g.drawLine(yb[0], x2, yb[1], x2);
-          }
-        }
-      }
-    } else {
-      LayoutRegion child = interval.getCurrentSpace();
-      if (alignment == LEADING || alignment == TRAILING) {
-        x1 = group.positions[dimension][baseline ? BASELINE : alignment];
-        if (interval.isParallel() && interval.getAlignment() == BASELINE) {
-          x2 = child.positions[dimension][BASELINE];
-        } else {
-          x2 = child.positions[dimension][alignment];
-        }
-      } else {
-        return;
-      }
-      if (x1 == LayoutRegion.UNKNOWN || x2 == LayoutRegion.UNKNOWN) {
-        return;
-      }
-      int[] pos = visualIntervalPosition(parent, opposite, alignment);
-      y = (pos[0] + pos[1]) / 2;
-      int xa = group.positions[dimension][LEADING];
-      int xb = group.positions[dimension][TRAILING];
-      if (parent.getParent() != null) {
-        if (dimension == HORIZONTAL) {
-          if (alignment == LEADING) {
-            g.drawLine(xa, pos[0], xa, pos[1]);
-          } else if (alignment == TRAILING) {
-            g.drawLine(xb, pos[0], xb, pos[1]);
-          }
-        } else {
-          if (alignment == LEADING) {
-            g.drawLine(pos[0], xa, pos[1], xa);
-          } else if (alignment == TRAILING) {
-            g.drawLine(pos[0], xb, pos[1], xb);
-          }
-        }
-      }
-    }
-    // Avoid overload of EQ when current space is incorrectly calculated.
-    if (x2 - x1 > 1
-        && Math.abs(y) <= Short.MAX_VALUE
-        && Math.abs(x1) <= Short.MAX_VALUE
-        && Math.abs(x2) <= Short.MAX_VALUE) {
-      int x, angle;
-      if (alignment == LEADING) {
-        x = x1;
-        angle = 180;
-      } else {
-        x = x2;
-        angle = 0;
-      }
-      x2--;
-      int diam = Math.min(4, x2 - x1);
-      if (dimension == HORIZONTAL) {
-        g.drawLine(x1, y, x2, y);
-        angle += 90;
-      } else {
-        g.drawLine(y, x1, y, x2);
-        int temp = x;
-        x = y;
-        y = temp;
-      }
-      if (alignment == LEADING || alignment == TRAILING) {
-        g.fillArc(x - diam, y - diam, 2 * diam, 2 * diam, angle, 180);
-      }
-    }
-  }
+	private void paintAlignment(IFeedbacksDrawer g,
+			LayoutInterval interval,
+			int dimension,
+			int alignment) {
+		LayoutInterval parent = interval.getParent();
+		boolean baseline = parent.isParallel() && parent.getGroupAlignment() == BASELINE;
+		LayoutRegion group = parent.getCurrentSpace();
+		int opposite = dimension == HORIZONTAL ? VERTICAL : HORIZONTAL;
+		int x1, x2, y;
+		if (interval.isEmptySpace()) {
+			int index = parent.indexOf(interval);
+			int[] ya, yb;
+			boolean x1group, x2group;
+			if (index == 0) {
+				x1 = group.positions[dimension][baseline ? BASELINE : LEADING];
+				ya = visualIntervalPosition(parent, opposite, LEADING);
+				x1group = LayoutInterval.getFirstParent(interval, PARALLEL).getParent() != null;
+			} else {
+				LayoutInterval x1int = parent.getSubInterval(index - 1);
+				if (x1int.isParallel() && x1int.getGroupAlignment() == BASELINE) {
+					x1 = x1int.getCurrentSpace().positions[dimension][BASELINE];
+				} else {
+					if (x1int.isEmptySpace()) {
+						return;
+					}
+					x1 = x1int.getCurrentSpace().positions[dimension][TRAILING];
+				}
+				ya = visualIntervalPosition(x1int, opposite, TRAILING);
+				x1group = x1int.isGroup();
+			}
+			if (index + 1 == parent.getSubIntervalCount()) {
+				x2 = group.positions[dimension][baseline ? BASELINE : TRAILING];
+				yb = visualIntervalPosition(parent, opposite, TRAILING);
+				x2group = LayoutInterval.getFirstParent(interval, PARALLEL).getParent() != null;
+			} else {
+				LayoutInterval x2int = parent.getSubInterval(index + 1);
+				if (x2int.isParallel() && x2int.getGroupAlignment() == BASELINE) {
+					x2 = x2int.getCurrentSpace().positions[dimension][BASELINE];
+				} else {
+					if (x2int.isEmptySpace()) {
+						return;
+					}
+					x2 = x2int.getCurrentSpace().positions[dimension][LEADING];
+				}
+				yb = visualIntervalPosition(x2int, opposite, LEADING);
+				x2group = x2int.isGroup();
+			}
+			if (x1 == LayoutRegion.UNKNOWN || x2 == LayoutRegion.UNKNOWN) {
+				return;
+			}
+			int y1 = Math.min(ya[1], yb[1]);
+			int y2 = Math.max(ya[0], yb[0]);
+			y = (y1 + y2) / 2;
+			if (ya[1] < yb[0] || yb[1] < ya[0]) {
+				// no intersection
+				if (dimension == HORIZONTAL) {
+					g.drawLine(x1, ya[0], x1, y);
+					g.drawLine(x1, ya[0], x1, ya[1]);
+					g.drawLine(x2, yb[0], x2, y);
+					g.drawLine(x2, yb[0], x2, yb[1]);
+				} else {
+					g.drawLine(ya[0], x1, y, x1);
+					g.drawLine(ya[0], x1, ya[1], x1);
+					g.drawLine(yb[0], x2, y, x2);
+					g.drawLine(yb[0], x2, yb[1], x2);
+				}
+			} else {
+				if (dimension == HORIZONTAL) {
+					if (x1group) {
+						g.drawLine(x1, ya[0], x1, ya[1]);
+					}
+					if (x2group) {
+						g.drawLine(x2, yb[0], x2, yb[1]);
+					}
+				} else {
+					if (x1group) {
+						g.drawLine(ya[0], x1, ya[1], x1);
+					}
+					if (x2group) {
+						g.drawLine(yb[0], x2, yb[1], x2);
+					}
+				}
+			}
+		} else {
+			LayoutRegion child = interval.getCurrentSpace();
+			if (alignment == LEADING || alignment == TRAILING) {
+				x1 = group.positions[dimension][baseline ? BASELINE : alignment];
+				if (interval.isParallel() && interval.getAlignment() == BASELINE) {
+					x2 = child.positions[dimension][BASELINE];
+				} else {
+					x2 = child.positions[dimension][alignment];
+				}
+			} else {
+				return;
+			}
+			if (x1 == LayoutRegion.UNKNOWN || x2 == LayoutRegion.UNKNOWN) {
+				return;
+			}
+			int[] pos = visualIntervalPosition(parent, opposite, alignment);
+			y = (pos[0] + pos[1]) / 2;
+			int xa = group.positions[dimension][LEADING];
+			int xb = group.positions[dimension][TRAILING];
+			if (parent.getParent() != null) {
+				if (dimension == HORIZONTAL) {
+					if (alignment == LEADING) {
+						g.drawLine(xa, pos[0], xa, pos[1]);
+					} else if (alignment == TRAILING) {
+						g.drawLine(xb, pos[0], xb, pos[1]);
+					}
+				} else {
+					if (alignment == LEADING) {
+						g.drawLine(pos[0], xa, pos[1], xa);
+					} else if (alignment == TRAILING) {
+						g.drawLine(pos[0], xb, pos[1], xb);
+					}
+				}
+			}
+		}
+		// Avoid overload of EQ when current space is incorrectly calculated.
+		if (x2 - x1 > 1
+				&& Math.abs(y) <= Short.MAX_VALUE
+				&& Math.abs(x1) <= Short.MAX_VALUE
+				&& Math.abs(x2) <= Short.MAX_VALUE) {
+			int x, angle;
+			if (alignment == LEADING) {
+				x = x1;
+				angle = 180;
+			} else {
+				x = x2;
+				angle = 0;
+			}
+			x2--;
+			int diam = Math.min(4, x2 - x1);
+			if (dimension == HORIZONTAL) {
+				g.drawLine(x1, y, x2, y);
+				angle += 90;
+			} else {
+				g.drawLine(y, x1, y, x2);
+				int temp = x;
+				x = y;
+				y = temp;
+			}
+			if (alignment == LEADING || alignment == TRAILING) {
+				g.fillArc(x - diam, y - diam, 2 * diam, 2 * diam, angle, 180);
+			}
+		}
+	}
 
-  private int[] visualIntervalPosition(LayoutInterval interval, int dimension, int alignment) {
-    int min = Short.MAX_VALUE;
-    int max = Short.MIN_VALUE;
-    if (interval.isParallel() && interval.getGroupAlignment() != BASELINE) {
-      Iterator iter = interval.getSubIntervals();
-      while (iter.hasNext()) {
-        LayoutInterval subInterval = (LayoutInterval) iter.next();
-        int imin, imax;
-        int oppDim = dimension == HORIZONTAL ? VERTICAL : HORIZONTAL;
-        if (LayoutInterval.isPlacedAtBorder(subInterval, oppDim, alignment)) {
-          if (subInterval.isParallel()) {
-            int[] ipos = visualIntervalPosition(subInterval, dimension, alignment);
-            imin = ipos[0];
-            imax = ipos[1];
-          } else if (!subInterval.isEmptySpace()) {
-            LayoutRegion region = subInterval.getCurrentSpace();
-            imin = region.positions[dimension][LEADING];
-            imax = region.positions[dimension][TRAILING];
-          } else {
-            imin = min;
-            imax = max;
-          }
-        } else {
-          imin = min;
-          imax = max;
-        }
-        if (min > imin) {
-          min = imin;
-        }
-        if (max < imax) {
-          max = imax;
-        }
-      }
-    }
-    if (!interval.isParallel() || min == Short.MAX_VALUE) {
-      LayoutRegion region = interval.getCurrentSpace();
-      min = region.positions[dimension][LEADING];
-      max = region.positions[dimension][TRAILING];
-    }
-    return new int[]{min, max};
-  }
+	private int[] visualIntervalPosition(LayoutInterval interval, int dimension, int alignment) {
+		int min = Short.MAX_VALUE;
+		int max = Short.MIN_VALUE;
+		if (interval.isParallel() && interval.getGroupAlignment() != BASELINE) {
+			Iterator iter = interval.getSubIntervals();
+			while (iter.hasNext()) {
+				LayoutInterval subInterval = (LayoutInterval) iter.next();
+				int imin, imax;
+				int oppDim = dimension == HORIZONTAL ? VERTICAL : HORIZONTAL;
+				if (LayoutInterval.isPlacedAtBorder(subInterval, oppDim, alignment)) {
+					if (subInterval.isParallel()) {
+						int[] ipos = visualIntervalPosition(subInterval, dimension, alignment);
+						imin = ipos[0];
+						imax = ipos[1];
+					} else if (!subInterval.isEmptySpace()) {
+						LayoutRegion region = subInterval.getCurrentSpace();
+						imin = region.positions[dimension][LEADING];
+						imax = region.positions[dimension][TRAILING];
+					} else {
+						imin = min;
+						imax = max;
+					}
+				} else {
+					imin = min;
+					imax = max;
+				}
+				if (min > imin) {
+					min = imin;
+				}
+				if (max < imax) {
+					max = imax;
+				}
+			}
+		}
+		if (!interval.isParallel() || min == Short.MAX_VALUE) {
+			LayoutRegion region = interval.getCurrentSpace();
+			min = region.positions[dimension][LEADING];
+			max = region.positions[dimension][TRAILING];
+		}
+		return new int[]{min, max};
+	}
 
-  // -----
-  // copying
-  /**
-   * Copy components with layout specified by sourceToTargetId map to the given target container.
-   * Assuming all components come from one container and one layer (layout roots pair), i.e. forming
-   * one piece of layout. If copying all components of one container to an empty container then
-   * exact 1:1 copy is created, otherwise the layout copy is placed into a separate layer not to
-   * interact with the existing layout. If copying within the same container, the copied components
-   * are placed slightly shifted from the original ones. Otherwise placed in the center. This method
-   * requires Ids for the copied components provided (LayoutComponent instances are cretated
-   * automatically).
-   *
-   * @param sourceModel
-   *          the source LayoutModel
-   * @param sourceToTargetId
-   *          components mapping between the original and the copied components' Ids; same Ids can
-   *          be used - then the components are moved
-   * @param targetContainerId
-   *          the Id of the target container
-   */
-  public void copyLayout(LayoutModel sourceModel,
-      Map<String, String> sourceToTargetId,
-      String targetContainerId) {
-    if (sourceToTargetId.size() == 0) {
-      return;
-    }
-    if (sourceModel == null) {
-      sourceModel = layoutModel;
-    }
-    Map.Entry<String, String> firstEntry = sourceToTargetId.entrySet().iterator().next();
-    LayoutComponent sourceContainer =
-        sourceModel.getLayoutComponent(firstEntry.getKey()).getParent();
-    LayoutComponent targetContainer = layoutModel.getLayoutComponent(targetContainerId);
-    if (sourceContainer != targetContainer
-        && sourceContainer.getSubComponentCount() == sourceToTargetId.size()
-        && (targetContainer == null || targetContainer.getSubComponentCount() == 0)) {
-      // copying/moving entire content of a container into an empty target container
-      if (sourceModel != layoutModel || !firstEntry.getKey().equals(firstEntry.getValue())) {
-        layoutModel.copyContainerLayout(sourceContainer, sourceToTargetId, targetContainer);
-      } else { // same source and target component - don't copy, just move
-        layoutModel.moveContainerLayout(sourceContainer, targetContainer);
-      }
-    } else { // copying part of the layout
-      // collect the components, create new if needed, compute bounds, ...
-      Map<LayoutComponent, LayoutComponent> sourceToTargetComp =
-          new HashMap<LayoutComponent, LayoutComponent>();
-      LayoutComponent[] sourceComponents = new LayoutComponent[sourceToTargetId.size()];
-      LayoutComponent[] targetComponents = new LayoutComponent[sourceToTargetId.size()];
-      Rectangle[] bounds = new Rectangle[sourceToTargetId.size()];
-      LayoutRegion overallSpace = new LayoutRegion();
-      LayoutInterval[] commonParents = new LayoutInterval[DIM_COUNT];
-      int i = 0;
-      for (Map.Entry<String, String> entry : sourceToTargetId.entrySet()) {
-        String sourceId = entry.getKey();
-        LayoutComponent sourceLC = sourceModel.getLayoutComponent(sourceId);
-        String targetId = entry.getValue();
-        LayoutComponent targetLC = layoutModel.getLayoutComponent(targetId);
-        if (targetLC == null) {
-          targetLC = new LayoutComponent(targetId, false);
-        } else if (targetLC.getParent() == targetContainer) {
-          throw new IllegalArgumentException(
-              "The component is already placed in the target layout container"); // NOI18N
-        }
-        sourceToTargetComp.put(sourceLC, targetLC);
-        targetComponents[i] = targetLC;
-        LayoutRegion space = sourceLC.getLayoutInterval(0).getCurrentSpace();
-        overallSpace.expand(space);
-        bounds[i] = space.toRectangle(new Rectangle());
-        sourceComponents[i] = sourceLC;
-        i++;
-        for (int dim = 0; dim < DIM_COUNT; dim++) {
-          if (commonParents[dim] == null) {
-            commonParents[dim] = sourceLC.getLayoutInterval(dim);
-          } else {
-            commonParents[dim] =
-                LayoutInterval.getCommonParent(commonParents[dim], sourceLC.getLayoutInterval(dim));
-          }
-        }
-      }
-      // copy the intervals
-      LayoutInterval[] addingInts = new LayoutInterval[DIM_COUNT];
-      for (int dim = 0; dim < DIM_COUNT; dim++) {
-        addingInts[dim] =
-            restrictedCopy(commonParents[dim], sourceToTargetComp, overallSpace, dim, null);
-      }
-      // place the copied intervals
-      int[] shift = getCopyShift(
-          sourceComponents,
-          targetContainer,
-          overallSpace,
-          sourceContainer == targetContainer);
-      if (shift != null) { // place near the original positions
-        // in case components are moved (not copied) make sure both the
-        // components and intervals are correctly removed from the original place
-        if (targetComponents.length > 1) {
-          // for multiple components the intervals are extracted in restrictedCopy
-          // (their common parent is removed), so now also remove the components
-          // so addComponents does not try to remove the intervals later
-          for (LayoutComponent comp : targetComponents) {
-            if (comp.getParent() != null) {
-              layoutModel.removeComponent(comp, false);
-            }
-          }
-        } // for single component both the component and intervals will be removed in addComponents
-        prepareDragger(targetComponents, bounds, new Point(0, 0), LayoutDragger.ALL_EDGES);
-        dragger.setTargetContainer(targetContainer, getTargetRootsForCopy(targetContainer));
-        dragger.move(shift, false, false);
-        addComponents(targetComponents, targetContainer, addingInts, false);
-        dragger = null;
-      } else { // place in center
-        for (LayoutComponent comp : targetComponents) {
-          if (comp.getParent() != null) { // moved component (not copied)
-            layoutModel.removeComponentAndIntervals(comp, false);
-          }
-        }
-        addUnspecified(targetComponents, targetContainer, addingInts);
-      }
-    }
-    visualStateUpToDate = false;
-  }
+	// -----
+	// copying
+	/**
+	 * Copy components with layout specified by sourceToTargetId map to the given target container.
+	 * Assuming all components come from one container and one layer (layout roots pair), i.e. forming
+	 * one piece of layout. If copying all components of one container to an empty container then
+	 * exact 1:1 copy is created, otherwise the layout copy is placed into a separate layer not to
+	 * interact with the existing layout. If copying within the same container, the copied components
+	 * are placed slightly shifted from the original ones. Otherwise placed in the center. This method
+	 * requires Ids for the copied components provided (LayoutComponent instances are cretated
+	 * automatically).
+	 *
+	 * @param sourceModel
+	 *          the source LayoutModel
+	 * @param sourceToTargetId
+	 *          components mapping between the original and the copied components' Ids; same Ids can
+	 *          be used - then the components are moved
+	 * @param targetContainerId
+	 *          the Id of the target container
+	 */
+	public void copyLayout(LayoutModel sourceModel,
+			Map<String, String> sourceToTargetId,
+			String targetContainerId) {
+		if (sourceToTargetId.size() == 0) {
+			return;
+		}
+		if (sourceModel == null) {
+			sourceModel = layoutModel;
+		}
+		Map.Entry<String, String> firstEntry = sourceToTargetId.entrySet().iterator().next();
+		LayoutComponent sourceContainer =
+				sourceModel.getLayoutComponent(firstEntry.getKey()).getParent();
+		LayoutComponent targetContainer = layoutModel.getLayoutComponent(targetContainerId);
+		if (sourceContainer != targetContainer
+				&& sourceContainer.getSubComponentCount() == sourceToTargetId.size()
+				&& (targetContainer == null || targetContainer.getSubComponentCount() == 0)) {
+			// copying/moving entire content of a container into an empty target container
+			if (sourceModel != layoutModel || !firstEntry.getKey().equals(firstEntry.getValue())) {
+				layoutModel.copyContainerLayout(sourceContainer, sourceToTargetId, targetContainer);
+			} else { // same source and target component - don't copy, just move
+				layoutModel.moveContainerLayout(sourceContainer, targetContainer);
+			}
+		} else { // copying part of the layout
+			// collect the components, create new if needed, compute bounds, ...
+			Map<LayoutComponent, LayoutComponent> sourceToTargetComp =
+					new HashMap<LayoutComponent, LayoutComponent>();
+			LayoutComponent[] sourceComponents = new LayoutComponent[sourceToTargetId.size()];
+			LayoutComponent[] targetComponents = new LayoutComponent[sourceToTargetId.size()];
+			Rectangle[] bounds = new Rectangle[sourceToTargetId.size()];
+			LayoutRegion overallSpace = new LayoutRegion();
+			LayoutInterval[] commonParents = new LayoutInterval[DIM_COUNT];
+			int i = 0;
+			for (Map.Entry<String, String> entry : sourceToTargetId.entrySet()) {
+				String sourceId = entry.getKey();
+				LayoutComponent sourceLC = sourceModel.getLayoutComponent(sourceId);
+				String targetId = entry.getValue();
+				LayoutComponent targetLC = layoutModel.getLayoutComponent(targetId);
+				if (targetLC == null) {
+					targetLC = new LayoutComponent(targetId, false);
+				} else if (targetLC.getParent() == targetContainer) {
+					throw new IllegalArgumentException(
+							"The component is already placed in the target layout container"); // NOI18N
+				}
+				sourceToTargetComp.put(sourceLC, targetLC);
+				targetComponents[i] = targetLC;
+				LayoutRegion space = sourceLC.getLayoutInterval(0).getCurrentSpace();
+				overallSpace.expand(space);
+				bounds[i] = space.toRectangle(new Rectangle());
+				sourceComponents[i] = sourceLC;
+				i++;
+				for (int dim = 0; dim < DIM_COUNT; dim++) {
+					if (commonParents[dim] == null) {
+						commonParents[dim] = sourceLC.getLayoutInterval(dim);
+					} else {
+						commonParents[dim] =
+								LayoutInterval.getCommonParent(commonParents[dim], sourceLC.getLayoutInterval(dim));
+					}
+				}
+			}
+			// copy the intervals
+			LayoutInterval[] addingInts = new LayoutInterval[DIM_COUNT];
+			for (int dim = 0; dim < DIM_COUNT; dim++) {
+				addingInts[dim] =
+						restrictedCopy(commonParents[dim], sourceToTargetComp, overallSpace, dim, null);
+			}
+			// place the copied intervals
+			int[] shift = getCopyShift(
+					sourceComponents,
+					targetContainer,
+					overallSpace,
+					sourceContainer == targetContainer);
+			if (shift != null) { // place near the original positions
+				// in case components are moved (not copied) make sure both the
+				// components and intervals are correctly removed from the original place
+				if (targetComponents.length > 1) {
+					// for multiple components the intervals are extracted in restrictedCopy
+					// (their common parent is removed), so now also remove the components
+					// so addComponents does not try to remove the intervals later
+					for (LayoutComponent comp : targetComponents) {
+						if (comp.getParent() != null) {
+							layoutModel.removeComponent(comp, false);
+						}
+					}
+				} // for single component both the component and intervals will be removed in addComponents
+				prepareDragger(targetComponents, bounds, new Point(0, 0), LayoutDragger.ALL_EDGES);
+				dragger.setTargetContainer(targetContainer, getTargetRootsForCopy(targetContainer));
+				dragger.move(shift, false, false);
+				addComponents(targetComponents, targetContainer, addingInts, false);
+				dragger = null;
+			} else { // place in center
+				for (LayoutComponent comp : targetComponents) {
+					if (comp.getParent() != null) { // moved component (not copied)
+						layoutModel.removeComponentAndIntervals(comp, false);
+					}
+				}
+				addUnspecified(targetComponents, targetContainer, addingInts);
+			}
+		}
+		visualStateUpToDate = false;
+	}
 
-  /**
-   * Copy components without layout to the given target container. The layout is determined from the
-   * visual bounds of the components. Can be used for copying external components (from different
-   * layout) to a container, or for converting container's layout to this layout model. New
-   * LayoutComponent instances are created as needed, added all to the specified target container
-   * (centered, in separate layer of layout roots).
-   *
-   * @param idToBounds
-   *          mapping component Ids to the visual bounds
-   * @param targetContainerId
-   *          the Id of the target container
-   * @param relative
-   *          if true then the position of the entire formation is set to 0, 0 before the conversion
-   *          starts
-   */
-  public void copyLayoutFromOutside(Map<String, Rectangle> idToBounds,
-      String targetContainerId,
-      boolean relative) {
-    LayoutComponent targetContainer = layoutModel.getLayoutComponent(targetContainerId);
-    if (targetContainer.getSubComponentCount() > 0) {
-      relative = true;
-    }
-    Map<LayoutComponent, Rectangle> compToBounds = new HashMap<LayoutComponent, Rectangle>();
-    LayoutComponent[] components = new LayoutComponent[idToBounds.size()];
-    int minX = Integer.MAX_VALUE;
-    int minY = Integer.MAX_VALUE;
-    int i = 0;
-    for (Map.Entry<String, Rectangle> entry : idToBounds.entrySet()) {
-      String targetId = entry.getKey();
-      LayoutComponent targetLC = layoutModel.getLayoutComponent(targetId);
-      if (targetLC == null) {
-        targetLC = new LayoutComponent(targetId, false);
-      } else if (targetLC.getParent() != null) {
-        throw new IllegalArgumentException(
-            "Target component already exists and is placed in the layout"); // NOI18N
-      }
-      Rectangle r = new Rectangle(entry.getValue());
-      compToBounds.put(targetLC, r);
-      components[i] = targetLC;
-      LayoutRegion compSpace = new LayoutRegion(r, LayoutRegion.UNKNOWN);
-      Dimension preferred = visualMapper.getComponentPreferredSize(targetId);
-      for (int dim = 0; dim < DIM_COUNT; dim++) {
-        int size = compSpace.size(dim);
-        if (preferred == null || size != (dim == HORIZONTAL ? preferred.width : preferred.height)) {
-          targetLC.getLayoutInterval(dim).setPreferredSize(compSpace.size(dim));
-        }
-      }
-      if (relative) {
-        minX = Math.min(minX, compSpace.positions[HORIZONTAL][LEADING]);
-        minY = Math.min(minY, compSpace.positions[VERTICAL][LEADING]);
-      }
-      i++;
-    }
-    if (relative) {
-      // need the overall bounds enclosure based on 0, 0
-      for (Rectangle r : compToBounds.values()) {
-        r.x -= minX;
-        r.y -= minY;
-      }
-    }
-    LayoutInterval[] addingInts = LayoutModel.createIntervalsFromBounds(compToBounds);
-    if (relative) {
-      addUnspecified(components, targetContainer, addingInts);
-    } else {
-      addToEmpty(components, targetContainer, addingInts);
-    }
-    visualStateUpToDate = false;
-  }
+	/**
+	 * Copy components without layout to the given target container. The layout is determined from the
+	 * visual bounds of the components. Can be used for copying external components (from different
+	 * layout) to a container, or for converting container's layout to this layout model. New
+	 * LayoutComponent instances are created as needed, added all to the specified target container
+	 * (centered, in separate layer of layout roots).
+	 *
+	 * @param idToBounds
+	 *          mapping component Ids to the visual bounds
+	 * @param targetContainerId
+	 *          the Id of the target container
+	 * @param relative
+	 *          if true then the position of the entire formation is set to 0, 0 before the conversion
+	 *          starts
+	 */
+	public void copyLayoutFromOutside(Map<String, Rectangle> idToBounds,
+			String targetContainerId,
+			boolean relative) {
+		LayoutComponent targetContainer = layoutModel.getLayoutComponent(targetContainerId);
+		if (targetContainer.getSubComponentCount() > 0) {
+			relative = true;
+		}
+		Map<LayoutComponent, Rectangle> compToBounds = new HashMap<LayoutComponent, Rectangle>();
+		LayoutComponent[] components = new LayoutComponent[idToBounds.size()];
+		int minX = Integer.MAX_VALUE;
+		int minY = Integer.MAX_VALUE;
+		int i = 0;
+		for (Map.Entry<String, Rectangle> entry : idToBounds.entrySet()) {
+			String targetId = entry.getKey();
+			LayoutComponent targetLC = layoutModel.getLayoutComponent(targetId);
+			if (targetLC == null) {
+				targetLC = new LayoutComponent(targetId, false);
+			} else if (targetLC.getParent() != null) {
+				throw new IllegalArgumentException(
+						"Target component already exists and is placed in the layout"); // NOI18N
+			}
+			Rectangle r = new Rectangle(entry.getValue());
+			compToBounds.put(targetLC, r);
+			components[i] = targetLC;
+			LayoutRegion compSpace = new LayoutRegion(r, LayoutRegion.UNKNOWN);
+			Dimension preferred = visualMapper.getComponentPreferredSize(targetId);
+			for (int dim = 0; dim < DIM_COUNT; dim++) {
+				int size = compSpace.size(dim);
+				if (preferred == null || size != (dim == HORIZONTAL ? preferred.width : preferred.height)) {
+					targetLC.getLayoutInterval(dim).setPreferredSize(compSpace.size(dim));
+				}
+			}
+			if (relative) {
+				minX = Math.min(minX, compSpace.positions[HORIZONTAL][LEADING]);
+				minY = Math.min(minY, compSpace.positions[VERTICAL][LEADING]);
+			}
+			i++;
+		}
+		if (relative) {
+			// need the overall bounds enclosure based on 0, 0
+			for (Rectangle r : compToBounds.values()) {
+				r.x -= minX;
+				r.y -= minY;
+			}
+		}
+		LayoutInterval[] addingInts = LayoutModel.createIntervalsFromBounds(compToBounds);
+		if (relative) {
+			addUnspecified(components, targetContainer, addingInts);
+		} else {
+			addToEmpty(components, targetContainer, addingInts);
+		}
+		visualStateUpToDate = false;
+	}
 
-  /**
-   * Duplicates layout of given components. Duplicated components are added sequentially along given
-   * axis (dimension), in parallel in the orthogonal dimension.
-   *
-   * @param sourceIds
-   *          Ids of the source components
-   * @param targetIds
-   *          Ids for the duplicates (non-existing layout components are created automatically with
-   *          the given Ids)
-   * @param dimension
-   *          the dimension in which the layout should be duplicated (extended sequentially);
-   *          HORIZONTAL, VERTICAL, or < 0
-   * @param direction
-   *          the direction of addition - LEADING or TRAILING
-   */
-  public void duplicateLayout(String[] sourceIds,
-      String[] targetIds,
-      int dimension,
-      int direction) {
-    LayoutComponent[] sourceComps = new LayoutComponent[sourceIds.length];
-    LayoutInterval[][] sourceIntervals = new LayoutInterval[DIM_COUNT][sourceIds.length];
-    LayoutComponent[] targetComps = new LayoutComponent[targetIds.length];
-    Map<LayoutComponent, LayoutComponent> compMap = new HashMap<LayoutComponent, LayoutComponent>();
-    LayoutComponent container = null;
-    for (int i = 0; i < sourceComps.length; i++) {
-      LayoutComponent sourceLC = layoutModel.getLayoutComponent(sourceIds[i]);
-      LayoutComponent parent = sourceLC.getParent();
-      if (i == 0) {
-        container = parent;
-      } else if (parent != container) {
-        throw new IllegalArgumentException("Duplicated components must be in the same container."); // NOI18N
-      }
-      sourceComps[i] = sourceLC;
-      LayoutComponent targetLC = layoutModel.getLayoutComponent(targetIds[i]);
-      if (targetLC == null) {
-        targetLC = new LayoutComponent(targetIds[i], false);
-      } else if (targetLC.getParent() != null) {
-        throw new IllegalArgumentException(
-            "Target component already exists and is placed in the layout"); // NOI18N
-      }
-      layoutModel.addComponent(targetLC, container, -1);
-      compMap.put(sourceLC, targetLC);
-      targetComps[i] = targetLC;
-      for (int dim = 0; dim < DIM_COUNT; dim++) {
-        LayoutInterval li = sourceLC.getLayoutInterval(dim);
-        sourceIntervals[dim][i] = li;
-      }
-    }
-    int seqDim = dimension < 0 ? getSeqDuplicatingDimension(sourceComps) : dimension;
-    int seqDir = direction < 0 ? getSeqDuplicatingDirection(sourceComps, seqDim) : direction;
-    int parDim = seqDim ^ 1;
-    try {
-      modelListener.deactivate(); // do not react on model changes during adding
-      duplicateSequentially(sourceIntervals[seqDim], compMap, seqDim, seqDir);
-      duplicateInParallel(sourceIntervals[parDim], compMap, parDim);
-      visualStateUpToDate = false;
-      optimizeStructure = true;
-      updateDesignModifications(container);
-    } finally {
-      if (!modelListener.isActive()) {
-        modelListener.activate();
-      }
-    }
-  }
+	/**
+	 * Duplicates layout of given components. Duplicated components are added sequentially along given
+	 * axis (dimension), in parallel in the orthogonal dimension.
+	 *
+	 * @param sourceIds
+	 *          Ids of the source components
+	 * @param targetIds
+	 *          Ids for the duplicates (non-existing layout components are created automatically with
+	 *          the given Ids)
+	 * @param dimension
+	 *          the dimension in which the layout should be duplicated (extended sequentially);
+	 *          HORIZONTAL, VERTICAL, or < 0
+	 * @param direction
+	 *          the direction of addition - LEADING or TRAILING
+	 */
+	public void duplicateLayout(String[] sourceIds,
+			String[] targetIds,
+			int dimension,
+			int direction) {
+		LayoutComponent[] sourceComps = new LayoutComponent[sourceIds.length];
+		LayoutInterval[][] sourceIntervals = new LayoutInterval[DIM_COUNT][sourceIds.length];
+		LayoutComponent[] targetComps = new LayoutComponent[targetIds.length];
+		Map<LayoutComponent, LayoutComponent> compMap = new HashMap<LayoutComponent, LayoutComponent>();
+		LayoutComponent container = null;
+		for (int i = 0; i < sourceComps.length; i++) {
+			LayoutComponent sourceLC = layoutModel.getLayoutComponent(sourceIds[i]);
+			LayoutComponent parent = sourceLC.getParent();
+			if (i == 0) {
+				container = parent;
+			} else if (parent != container) {
+				throw new IllegalArgumentException("Duplicated components must be in the same container."); // NOI18N
+			}
+			sourceComps[i] = sourceLC;
+			LayoutComponent targetLC = layoutModel.getLayoutComponent(targetIds[i]);
+			if (targetLC == null) {
+				targetLC = new LayoutComponent(targetIds[i], false);
+			} else if (targetLC.getParent() != null) {
+				throw new IllegalArgumentException(
+						"Target component already exists and is placed in the layout"); // NOI18N
+			}
+			layoutModel.addComponent(targetLC, container, -1);
+			compMap.put(sourceLC, targetLC);
+			targetComps[i] = targetLC;
+			for (int dim = 0; dim < DIM_COUNT; dim++) {
+				LayoutInterval li = sourceLC.getLayoutInterval(dim);
+				sourceIntervals[dim][i] = li;
+			}
+		}
+		int seqDim = dimension < 0 ? getSeqDuplicatingDimension(sourceComps) : dimension;
+		int seqDir = direction < 0 ? getSeqDuplicatingDirection(sourceComps, seqDim) : direction;
+		int parDim = seqDim ^ 1;
+		try {
+			modelListener.deactivate(); // do not react on model changes during adding
+			duplicateSequentially(sourceIntervals[seqDim], compMap, seqDim, seqDir);
+			duplicateInParallel(sourceIntervals[parDim], compMap, parDim);
+			visualStateUpToDate = false;
+			optimizeStructure = true;
+			updateDesignModifications(container);
+		} finally {
+			if (!modelListener.isActive()) {
+				modelListener.activate();
+			}
+		}
+	}
 
-  private static int getSeqDuplicatingDimension(LayoutComponent[] components) {
-    return VERTICAL;
-  }
+	private static int getSeqDuplicatingDimension(LayoutComponent[] components) {
+		return VERTICAL;
+	}
 
-  private static int getSeqDuplicatingDirection(LayoutComponent[] components, int dimension) {
-    return TRAILING;
-  }
+	private static int getSeqDuplicatingDirection(LayoutComponent[] components, int dimension) {
+		return TRAILING;
+	}
 
-  private void duplicateSequentially(LayoutInterval[] intervals,
-      Map<LayoutComponent, LayoutComponent> componentMap,
-      int dimension,
-      int direction) {
-    // determine roots to duplicate, eliminate subcontained
-    Set<LayoutInterval> dupRoots = new HashSet<LayoutInterval>();
-    for (LayoutInterval li : intervals) {
-      // check if not under already determined root
-      LayoutInterval parent = li.getParent();
-      while (parent != null) {
-        if (dupRoots.contains(parent)) {
-          break;
-        } else {
-          parent = parent.getParent();
-        }
-      }
-      if (parent == null) { // not determined yet
-        parent = li.getParent();
-        while (parent != null) {
-          if (shouldDuplicateWholeGroup(parent, li, intervals)) {
-            li = parent;
-            parent = li.getParent();
-          } else {
-            if (li.isGroup()) { // we might find a parent of some previous root
-              for (Iterator<LayoutInterval> it = dupRoots.iterator(); it.hasNext();) {
-                LayoutInterval dRoot = it.next();
-                if (li.isParentOf(dRoot)) {
-                  it.remove();
-                }
-              }
-            }
-            dupRoots.add(li);
-            break;
-          }
-        }
-        if (parent == null) { // whole layout root to be duplicated
-          dupRoots.clear();
-          dupRoots.add(li);
-          break;
-        }
-      }
-    }
-    // duplicate the roots
-    for (LayoutInterval dRoot : dupRoots) {
-      // prepare parent sequence
-      LayoutInterval seq;
-      LayoutInterval parent = dRoot.getParent();
-      if (parent != null) {
-        if (dRoot.isSequential()) {
-          seq = dRoot;
-        } else if (parent.isSequential()) {
-          seq = parent;
-        } else {
-          seq = new LayoutInterval(SEQUENTIAL);
-          layoutModel.addInterval(seq, parent, layoutModel.removeInterval(dRoot));
-          layoutModel.addInterval(dRoot, seq, -1);
-        }
-      } else { // duplicating entire layout root
-        LayoutInterval group = new LayoutInterval(PARALLEL);
-        group.setGroupAlignment(dRoot.getGroupAlignment());
-        while (dRoot.getSubIntervalCount() > 0) {
-          layoutModel.addInterval(layoutModel.removeInterval(dRoot, 0), group, -1);
-        }
-        seq = new LayoutInterval(SEQUENTIAL);
-        layoutModel.addInterval(seq, dRoot, -1);
-        layoutModel.addInterval(group, seq, -1);
-      }
-      // determine parts of the sequence to duplicate
-      int start = -1;
-      boolean wholeSeq = dupRoots.contains(seq);
-      LayoutRegion space = seq.getParent().getCurrentSpace();
-      for (int i = 0; i < seq.getSubIntervalCount(); i++) {
-        LayoutInterval sub = seq.getSubInterval(i);
-        boolean duplicate = !sub.isEmptySpace() && (wholeSeq || dupRoots.contains(sub));
-        boolean last = i + 1 == seq.getSubIntervalCount();
-        if (duplicate && start < 0) {
-          start = i;
-        }
-        if (start >= 0 && (!duplicate && !sub.isEmptySpace() || last)) {
-          int count = i - start;
-          if (last && duplicate) {
-            count++;
-          } else if (seq.getSubInterval(i - 1).isEmptySpace()) {
-            count--;
-          }
-          if (count > 0) { // copy the continuous section within the sequence
-            for (int j = start; j < start + count; j++) {
-              LayoutInterval li = seq.getSubInterval(j);
-              LayoutInterval copy = restrictedCopy(li, componentMap, space, dimension, null);
-              if (direction == LEADING) {
-                layoutModel.addInterval(copy, seq, start);
-                start++;
-                i++;
-                j++;
-              } else { // TRAILING
-                layoutModel.addInterval(copy, seq, j + count);
-                i++;
-              }
-            }
-            // need a gap between the original and duplicated section
-            int gapIndex;
-            LayoutInterval gap = null;
-            if (direction == LEADING) {
-              gapIndex = start + count; // here should be the original gap to use
-              if (gapIndex < seq.getSubIntervalCount()) {
-                gap = seq.getSubInterval(gapIndex);
-              }
-              gapIndex = start; // here it should be placed
-            } else { // TRAILING
-              gapIndex = start - 1; // here should be the original gap to use
-              if (gapIndex >= 0) {
-                gap = seq.getSubInterval(gapIndex);
-              }
-              gapIndex = start + count; // here it should be placed
-            }
-            LayoutInterval newGap = new LayoutInterval(SINGLE);
-            if (gap != null && gap.isEmptySpace()) {
-              LayoutInterval.cloneInterval(gap, newGap);
-            }
-            layoutModel.addInterval(newGap, seq, gapIndex);
-            i++;
-          }
-          start = -1;
-        }
-      }
-    }
-  }
+	private void duplicateSequentially(LayoutInterval[] intervals,
+			Map<LayoutComponent, LayoutComponent> componentMap,
+			int dimension,
+			int direction) {
+		// determine roots to duplicate, eliminate subcontained
+		Set<LayoutInterval> dupRoots = new HashSet<LayoutInterval>();
+		for (LayoutInterval li : intervals) {
+			// check if not under already determined root
+			LayoutInterval parent = li.getParent();
+			while (parent != null) {
+				if (dupRoots.contains(parent)) {
+					break;
+				} else {
+					parent = parent.getParent();
+				}
+			}
+			if (parent == null) { // not determined yet
+				parent = li.getParent();
+				while (parent != null) {
+					if (shouldDuplicateWholeGroup(parent, li, intervals)) {
+						li = parent;
+						parent = li.getParent();
+					} else {
+						if (li.isGroup()) { // we might find a parent of some previous root
+							for (Iterator<LayoutInterval> it = dupRoots.iterator(); it.hasNext();) {
+								LayoutInterval dRoot = it.next();
+								if (li.isParentOf(dRoot)) {
+									it.remove();
+								}
+							}
+						}
+						dupRoots.add(li);
+						break;
+					}
+				}
+				if (parent == null) { // whole layout root to be duplicated
+					dupRoots.clear();
+					dupRoots.add(li);
+					break;
+				}
+			}
+		}
+		// duplicate the roots
+		for (LayoutInterval dRoot : dupRoots) {
+			// prepare parent sequence
+			LayoutInterval seq;
+			LayoutInterval parent = dRoot.getParent();
+			if (parent != null) {
+				if (dRoot.isSequential()) {
+					seq = dRoot;
+				} else if (parent.isSequential()) {
+					seq = parent;
+				} else {
+					seq = new LayoutInterval(SEQUENTIAL);
+					layoutModel.addInterval(seq, parent, layoutModel.removeInterval(dRoot));
+					layoutModel.addInterval(dRoot, seq, -1);
+				}
+			} else { // duplicating entire layout root
+				LayoutInterval group = new LayoutInterval(PARALLEL);
+				group.setGroupAlignment(dRoot.getGroupAlignment());
+				while (dRoot.getSubIntervalCount() > 0) {
+					layoutModel.addInterval(layoutModel.removeInterval(dRoot, 0), group, -1);
+				}
+				seq = new LayoutInterval(SEQUENTIAL);
+				layoutModel.addInterval(seq, dRoot, -1);
+				layoutModel.addInterval(group, seq, -1);
+			}
+			// determine parts of the sequence to duplicate
+			int start = -1;
+			boolean wholeSeq = dupRoots.contains(seq);
+			LayoutRegion space = seq.getParent().getCurrentSpace();
+			for (int i = 0; i < seq.getSubIntervalCount(); i++) {
+				LayoutInterval sub = seq.getSubInterval(i);
+				boolean duplicate = !sub.isEmptySpace() && (wholeSeq || dupRoots.contains(sub));
+				boolean last = i + 1 == seq.getSubIntervalCount();
+				if (duplicate && start < 0) {
+					start = i;
+				}
+				if (start >= 0 && (!duplicate && !sub.isEmptySpace() || last)) {
+					int count = i - start;
+					if (last && duplicate) {
+						count++;
+					} else if (seq.getSubInterval(i - 1).isEmptySpace()) {
+						count--;
+					}
+					if (count > 0) { // copy the continuous section within the sequence
+						for (int j = start; j < start + count; j++) {
+							LayoutInterval li = seq.getSubInterval(j);
+							LayoutInterval copy = restrictedCopy(li, componentMap, space, dimension, null);
+							if (direction == LEADING) {
+								layoutModel.addInterval(copy, seq, start);
+								start++;
+								i++;
+								j++;
+							} else { // TRAILING
+								layoutModel.addInterval(copy, seq, j + count);
+								i++;
+							}
+						}
+						// need a gap between the original and duplicated section
+						int gapIndex;
+						LayoutInterval gap = null;
+						if (direction == LEADING) {
+							gapIndex = start + count; // here should be the original gap to use
+							if (gapIndex < seq.getSubIntervalCount()) {
+								gap = seq.getSubInterval(gapIndex);
+							}
+							gapIndex = start; // here it should be placed
+						} else { // TRAILING
+							gapIndex = start - 1; // here should be the original gap to use
+							if (gapIndex >= 0) {
+								gap = seq.getSubInterval(gapIndex);
+							}
+							gapIndex = start + count; // here it should be placed
+						}
+						LayoutInterval newGap = new LayoutInterval(SINGLE);
+						if (gap != null && gap.isEmptySpace()) {
+							LayoutInterval.cloneInterval(gap, newGap);
+						}
+						layoutModel.addInterval(newGap, seq, gapIndex);
+						i++;
+					}
+					start = -1;
+				}
+			}
+		}
+	}
 
-  private static boolean shouldDuplicateWholeGroup(LayoutInterval group,
-      LayoutInterval knownSub,
-      LayoutInterval[] dupIntervals) {
-    assert group.isGroup();
-    Iterator it = group.getSubIntervals();
-    while (it.hasNext()) {
-      LayoutInterval sub = (LayoutInterval) it.next();
-      if (sub == knownSub || sub.isEmptySpace()) {
-        continue;
-      }
-      boolean included;
-      if (sub.isGroup()) {
-        included = shouldDuplicateWholeGroup(sub, null, dupIntervals);
-      } else {
-        assert sub.isComponent();
-        included = false;
-        for (LayoutInterval li : dupIntervals) {
-          if (li == sub) {
-            included = true;
-            break;
-          }
-        }
-      }
-      if (included && group.isParallel()) {
-        return true; // one is enough in parallel group
-      }
-      if (!included && group.isSequential()) {
-        return false; // all required in a sequence
-      }
-    }
-    return group.isSequential();
-  }
+	private static boolean shouldDuplicateWholeGroup(LayoutInterval group,
+			LayoutInterval knownSub,
+			LayoutInterval[] dupIntervals) {
+		assert group.isGroup();
+		Iterator it = group.getSubIntervals();
+		while (it.hasNext()) {
+			LayoutInterval sub = (LayoutInterval) it.next();
+			if (sub == knownSub || sub.isEmptySpace()) {
+				continue;
+			}
+			boolean included;
+			if (sub.isGroup()) {
+				included = shouldDuplicateWholeGroup(sub, null, dupIntervals);
+			} else {
+				assert sub.isComponent();
+				included = false;
+				for (LayoutInterval li : dupIntervals) {
+					if (li == sub) {
+						included = true;
+						break;
+					}
+				}
+			}
+			if (included && group.isParallel()) {
+				return true; // one is enough in parallel group
+			}
+			if (!included && group.isSequential()) {
+				return false; // all required in a sequence
+			}
+		}
+		return group.isSequential();
+	}
 
-  private void duplicateInParallel(LayoutInterval[] intervals,
-      Map<LayoutComponent, LayoutComponent> componentMap,
-      int dimension) {
-    Map<LayoutInterval, LayoutInterval> intMap = new HashMap<LayoutInterval, LayoutInterval>();
-    for (LayoutInterval li : intervals) {
-      intMap.put(li, componentMap.get(li.getComponent()).getLayoutInterval(dimension));
-    }
-    for (LayoutInterval li : intervals) {
-      LayoutInterval copy = intMap.get(li);
-      if (copy == null) {
-        continue;
-      }
-      LayoutInterval parent = li.getParent();
-      if (parent.isParallel()) {
-        LayoutInterval.cloneInterval(li, copy);
-        layoutModel.setIntervalAlignment(copy, li.getRawAlignment());
-        layoutModel.addInterval(copy, parent, -1);
-      } else { // in sequence
-        int index = parent.indexOf(li);
-        int start = getDuplicationBoundary(parent, index, intMap.keySet(), LEADING);
-        int end = getDuplicationBoundary(parent, index, intMap.keySet(), TRAILING);
-        int gapStart =
-            LayoutUtils.getVisualPosition(parent.getSubInterval(start), dimension, LEADING);
-        LayoutInterval normalGap = null;
-        boolean substGap = false;
-        LayoutInterval parSeq = new LayoutInterval(SEQUENTIAL);
-        for (int i = start; i <= end; i++) {
-          LayoutInterval sub = parent.getSubInterval(i);
-          copy = intMap.remove(sub);
-          if (copy != null) {
-            LayoutInterval.cloneInterval(sub, copy);
-            if (normalGap != null) {
-              LayoutInterval copyGap = new LayoutInterval(SINGLE);
-              LayoutInterval.cloneInterval(normalGap, copyGap);
-              layoutModel.addInterval(copyGap, parSeq, -1);
-              normalGap = null;
-            } else if (substGap) {
-              LayoutInterval gap = new LayoutInterval(SINGLE);
-              int gapEnd = sub.getCurrentSpace().positions[dimension][LEADING];
-              gap.setSize(gapEnd - gapStart);
-              layoutModel.addInterval(gap, parSeq, -1);
-              substGap = false;
-            }
-            layoutModel.addInterval(copy, parSeq, -1);
-            gapStart = sub.getCurrentSpace().positions[dimension][TRAILING];
-          } else if (!sub.isEmptySpace()) { // skipped component
-            normalGap = null;
-            substGap = true;
-          } else if (!substGap) { // normal gap
-            normalGap = sub;
-          }
-        }
-        if (normalGap != null) {
-          LayoutInterval copyGap = new LayoutInterval(SINGLE);
-          LayoutInterval.cloneInterval(normalGap, copyGap);
-          layoutModel.addInterval(copyGap, parSeq, -1);
-        } else if (substGap) {
-          LayoutInterval gap = new LayoutInterval(SINGLE);
-          int gapEnd =
-              LayoutUtils.getVisualPosition(parent.getSubInterval(end), dimension, TRAILING);
-          gap.setSize(gapEnd - gapStart);
-          layoutModel.addInterval(gap, parSeq, -1);
-        }
-        operations.addParallelWithSequence(parSeq, parent, start, end, dimension);
-      }
-    }
-  }
+	private void duplicateInParallel(LayoutInterval[] intervals,
+			Map<LayoutComponent, LayoutComponent> componentMap,
+			int dimension) {
+		Map<LayoutInterval, LayoutInterval> intMap = new HashMap<LayoutInterval, LayoutInterval>();
+		for (LayoutInterval li : intervals) {
+			intMap.put(li, componentMap.get(li.getComponent()).getLayoutInterval(dimension));
+		}
+		for (LayoutInterval li : intervals) {
+			LayoutInterval copy = intMap.get(li);
+			if (copy == null) {
+				continue;
+			}
+			LayoutInterval parent = li.getParent();
+			if (parent.isParallel()) {
+				LayoutInterval.cloneInterval(li, copy);
+				layoutModel.setIntervalAlignment(copy, li.getRawAlignment());
+				layoutModel.addInterval(copy, parent, -1);
+			} else { // in sequence
+				int index = parent.indexOf(li);
+				int start = getDuplicationBoundary(parent, index, intMap.keySet(), LEADING);
+				int end = getDuplicationBoundary(parent, index, intMap.keySet(), TRAILING);
+				int gapStart =
+						LayoutUtils.getVisualPosition(parent.getSubInterval(start), dimension, LEADING);
+				LayoutInterval normalGap = null;
+				boolean substGap = false;
+				LayoutInterval parSeq = new LayoutInterval(SEQUENTIAL);
+				for (int i = start; i <= end; i++) {
+					LayoutInterval sub = parent.getSubInterval(i);
+					copy = intMap.remove(sub);
+					if (copy != null) {
+						LayoutInterval.cloneInterval(sub, copy);
+						if (normalGap != null) {
+							LayoutInterval copyGap = new LayoutInterval(SINGLE);
+							LayoutInterval.cloneInterval(normalGap, copyGap);
+							layoutModel.addInterval(copyGap, parSeq, -1);
+							normalGap = null;
+						} else if (substGap) {
+							LayoutInterval gap = new LayoutInterval(SINGLE);
+							int gapEnd = sub.getCurrentSpace().positions[dimension][LEADING];
+							gap.setSize(gapEnd - gapStart);
+							layoutModel.addInterval(gap, parSeq, -1);
+							substGap = false;
+						}
+						layoutModel.addInterval(copy, parSeq, -1);
+						gapStart = sub.getCurrentSpace().positions[dimension][TRAILING];
+					} else if (!sub.isEmptySpace()) { // skipped component
+						normalGap = null;
+						substGap = true;
+					} else if (!substGap) { // normal gap
+						normalGap = sub;
+					}
+				}
+				if (normalGap != null) {
+					LayoutInterval copyGap = new LayoutInterval(SINGLE);
+					LayoutInterval.cloneInterval(normalGap, copyGap);
+					layoutModel.addInterval(copyGap, parSeq, -1);
+				} else if (substGap) {
+					LayoutInterval gap = new LayoutInterval(SINGLE);
+					int gapEnd =
+							LayoutUtils.getVisualPosition(parent.getSubInterval(end), dimension, TRAILING);
+					gap.setSize(gapEnd - gapStart);
+					layoutModel.addInterval(gap, parSeq, -1);
+				}
+				operations.addParallelWithSequence(parSeq, parent, start, end, dimension);
+			}
+		}
+	}
 
-  private static int getDuplicationBoundary(LayoutInterval seq,
-      int index,
-      Set<LayoutInterval> dupIntervals,
-      int direction) {
-    assert seq.isSequential();
-    int d = direction == LEADING ? -1 : 1;
-    index += d;
-    while (index >= 0 && index < seq.getSubIntervalCount()) {
-      LayoutInterval sub = seq.getSubInterval(index);
-      if (sub.isParallel()) {
-        break; // [This forces enclosing the component in a closed group
-        // which might be unnecessary (at least in horizontal dimension, in
-        // vertical it is most probably ok). Maybe we should parallelize with
-        // parallel members if they don't contain another duplicated component.]
-      }
-      index += d;
-    }
-    return index - d;
-  }
+	private static int getDuplicationBoundary(LayoutInterval seq,
+			int index,
+			Set<LayoutInterval> dupIntervals,
+			int direction) {
+		assert seq.isSequential();
+		int d = direction == LEADING ? -1 : 1;
+		index += d;
+		while (index >= 0 && index < seq.getSubIntervalCount()) {
+			LayoutInterval sub = seq.getSubInterval(index);
+			if (sub.isParallel()) {
+				break; // [This forces enclosing the component in a closed group
+				// which might be unnecessary (at least in horizontal dimension, in
+				// vertical it is most probably ok). Maybe we should parallelize with
+				// parallel members if they don't contain another duplicated component.]
+			}
+			index += d;
+		}
+		return index - d;
+	}
 
-  public void encloseInContainer(String[] compIds, String contId) {
-    LayoutComponent enclosingCont = layoutModel.getLayoutComponent(contId);
-    if (enclosingCont == null) {
-      enclosingCont = new LayoutComponent(contId, true);
-    } else if (enclosingCont.getParent() != null) {
-      throw new IllegalArgumentException(
-          "Target container already exists and is placed in the layout"); // NOI18N
-    } else if (enclosingCont.getSubComponentCount() > 0) {
-      throw new IllegalArgumentException("Target container is not empty."); // NOI18N
-    }
-    LayoutComponent parentCont = null;
-    LayoutComponent[] components = new LayoutComponent[compIds.length];
-    //        LayoutComponent[][] borderComps = new LayoutComponent[DIM_COUNT][2];
-    LayoutInterval[] commonParents = new LayoutInterval[DIM_COUNT];
-    boolean[] resizing = new boolean[DIM_COUNT];
-    Map<LayoutComponent, LayoutComponent> compMap = new HashMap<LayoutComponent, LayoutComponent>();
-    LayoutRegion overallSpace = new LayoutRegion();
-    int i = 0;
-    for (String id : compIds) {
-      LayoutComponent comp = layoutModel.getLayoutComponent(id);
-      components[i++] = comp;
-      compMap.put(comp, comp);
-      if (parentCont == null) {
-        parentCont = comp.getParent();
-      }
-      LayoutRegion space = comp.getLayoutInterval(0).getCurrentSpace();
-      for (int dim = 0; dim < DIM_COUNT; dim++) {
-        //                if (!overallSpace.isSet(dim) || space.positions[dim][LEADING] < overallSpace.positions[dim][LEADING]) {
-        //                    borderComps[dim][LEADING] = comp;
-        //                } else if (!overallSpace.isSet(dim) || space.positions[dim][TRAILING] > overallSpace.positions[dim][TRAILING]) {
-        //                    borderComps[dim][TRAILING] = comp;
-        //                }
-        overallSpace.expand(space, dim);
-        if (commonParents[dim] == null) {
-          commonParents[dim] = comp.getLayoutInterval(dim);
-        } else {
-          commonParents[dim] =
-              LayoutInterval.getCommonParent(commonParents[dim], comp.getLayoutInterval(dim));
-        }
-      }
-    }
-    LayoutInterval[] parentRoots = new LayoutInterval[DIM_COUNT];
-    for (int dim = 0; dim < DIM_COUNT; dim++) {
-      parentRoots[dim] = LayoutInterval.getRoot(components[0].getLayoutInterval(dim));
-      resizing[dim] = LayoutInterval.wantResize(commonParents[dim]);
-    }
-    if (enclosingCont.isLayoutContainer()) {
-      LayoutInterval[] extractedInts = new LayoutInterval[DIM_COUNT];
-      for (int dim = 0; dim < DIM_COUNT; dim++) {
-        LayoutInterval extract = commonParents[dim];
-        if (extract.isComponent()) { // just one component being enclosed
-          layoutModel.removeInterval(extract);
-          extractedInts[dim] = extract;
-        } else {
-          extractedInts[dim] = restrictedCopy(extract, compMap, overallSpace, dim, null);
-        }
-      }
-      for (LayoutComponent comp : components) {
-        layoutModel.removeComponent(comp, false);
-        layoutModel.addComponent(comp, enclosingCont, -1);
-      }
-      for (int dim = 0; dim < DIM_COUNT; dim++) {
-        // make sure the root is empty (clear possible "offset" gap)
-        LayoutInterval root = enclosingCont.getDefaultLayoutRoot(dim);
-        for (int n = root.getSubIntervalCount(); n > 0; n--) {
-          root.remove(n - 1);
-        }
-        assert root.isParallel();
-        LayoutInterval seq = new LayoutInterval(SEQUENTIAL);
-        seq.add(new LayoutInterval(SINGLE), -1);
-        layoutModel.addInterval(extractedInts[dim], seq, -1);
-        seq.add(new LayoutInterval(SINGLE), -1);
-        layoutModel.addInterval(seq, root, -1);
-      }
-    } else {
-      for (LayoutComponent comp : components) {
-        layoutModel.removeComponentAndIntervals(comp, !comp.isLayoutContainer());
-      }
-    }
-    LayoutInterval[] addingInts = new LayoutInterval[DIM_COUNT];
-    for (int dim = 0; dim < DIM_COUNT; dim++) {
-      LayoutInterval interval = enclosingCont.getLayoutInterval(dim);
-      addingInts[dim] = interval;
-      interval.setSizes(
-          USE_PREFERRED_SIZE,
-          DEFAULT,
-          resizing[dim] ? Short.MAX_VALUE : USE_PREFERRED_SIZE);
-    }
-    // provisionally use dragger to position the container; maybe could be done better
-    prepareDragger(
-        new LayoutComponent[]{enclosingCont},
-        new Rectangle[]{overallSpace.toRectangle(new Rectangle())},
-        new Point(0, 0),
-        LayoutDragger.ALL_EDGES);
-    dragger.setTargetContainer(parentCont, parentRoots);
-    dragger.move(new int[]{10, 10}, true, false);
-    dragger.move(new int[]{0, 0}, true, false);
-    addComponents(new LayoutComponent[]{enclosingCont}, parentCont, addingInts, false);
-    dragger = null;
-    visualStateUpToDate = false;
-  }
+	public void encloseInContainer(String[] compIds, String contId) {
+		LayoutComponent enclosingCont = layoutModel.getLayoutComponent(contId);
+		if (enclosingCont == null) {
+			enclosingCont = new LayoutComponent(contId, true);
+		} else if (enclosingCont.getParent() != null) {
+			throw new IllegalArgumentException(
+					"Target container already exists and is placed in the layout"); // NOI18N
+		} else if (enclosingCont.getSubComponentCount() > 0) {
+			throw new IllegalArgumentException("Target container is not empty."); // NOI18N
+		}
+		LayoutComponent parentCont = null;
+		LayoutComponent[] components = new LayoutComponent[compIds.length];
+		//        LayoutComponent[][] borderComps = new LayoutComponent[DIM_COUNT][2];
+		LayoutInterval[] commonParents = new LayoutInterval[DIM_COUNT];
+		boolean[] resizing = new boolean[DIM_COUNT];
+		Map<LayoutComponent, LayoutComponent> compMap = new HashMap<LayoutComponent, LayoutComponent>();
+		LayoutRegion overallSpace = new LayoutRegion();
+		int i = 0;
+		for (String id : compIds) {
+			LayoutComponent comp = layoutModel.getLayoutComponent(id);
+			components[i++] = comp;
+			compMap.put(comp, comp);
+			if (parentCont == null) {
+				parentCont = comp.getParent();
+			}
+			LayoutRegion space = comp.getLayoutInterval(0).getCurrentSpace();
+			for (int dim = 0; dim < DIM_COUNT; dim++) {
+				//                if (!overallSpace.isSet(dim) || space.positions[dim][LEADING] < overallSpace.positions[dim][LEADING]) {
+				//                    borderComps[dim][LEADING] = comp;
+				//                } else if (!overallSpace.isSet(dim) || space.positions[dim][TRAILING] > overallSpace.positions[dim][TRAILING]) {
+				//                    borderComps[dim][TRAILING] = comp;
+				//                }
+				overallSpace.expand(space, dim);
+				if (commonParents[dim] == null) {
+					commonParents[dim] = comp.getLayoutInterval(dim);
+				} else {
+					commonParents[dim] =
+							LayoutInterval.getCommonParent(commonParents[dim], comp.getLayoutInterval(dim));
+				}
+			}
+		}
+		LayoutInterval[] parentRoots = new LayoutInterval[DIM_COUNT];
+		for (int dim = 0; dim < DIM_COUNT; dim++) {
+			parentRoots[dim] = LayoutInterval.getRoot(components[0].getLayoutInterval(dim));
+			resizing[dim] = LayoutInterval.wantResize(commonParents[dim]);
+		}
+		if (enclosingCont.isLayoutContainer()) {
+			LayoutInterval[] extractedInts = new LayoutInterval[DIM_COUNT];
+			for (int dim = 0; dim < DIM_COUNT; dim++) {
+				LayoutInterval extract = commonParents[dim];
+				if (extract.isComponent()) { // just one component being enclosed
+					layoutModel.removeInterval(extract);
+					extractedInts[dim] = extract;
+				} else {
+					extractedInts[dim] = restrictedCopy(extract, compMap, overallSpace, dim, null);
+				}
+			}
+			for (LayoutComponent comp : components) {
+				layoutModel.removeComponent(comp, false);
+				layoutModel.addComponent(comp, enclosingCont, -1);
+			}
+			for (int dim = 0; dim < DIM_COUNT; dim++) {
+				// make sure the root is empty (clear possible "offset" gap)
+				LayoutInterval root = enclosingCont.getDefaultLayoutRoot(dim);
+				for (int n = root.getSubIntervalCount(); n > 0; n--) {
+					root.remove(n - 1);
+				}
+				assert root.isParallel();
+				LayoutInterval seq = new LayoutInterval(SEQUENTIAL);
+				seq.add(new LayoutInterval(SINGLE), -1);
+				layoutModel.addInterval(extractedInts[dim], seq, -1);
+				seq.add(new LayoutInterval(SINGLE), -1);
+				layoutModel.addInterval(seq, root, -1);
+			}
+		} else {
+			for (LayoutComponent comp : components) {
+				layoutModel.removeComponentAndIntervals(comp, !comp.isLayoutContainer());
+			}
+		}
+		LayoutInterval[] addingInts = new LayoutInterval[DIM_COUNT];
+		for (int dim = 0; dim < DIM_COUNT; dim++) {
+			LayoutInterval interval = enclosingCont.getLayoutInterval(dim);
+			addingInts[dim] = interval;
+			interval.setSizes(
+					USE_PREFERRED_SIZE,
+					DEFAULT,
+					resizing[dim] ? Short.MAX_VALUE : USE_PREFERRED_SIZE);
+		}
+		// provisionally use dragger to position the container; maybe could be done better
+		prepareDragger(
+				new LayoutComponent[]{enclosingCont},
+				new Rectangle[]{overallSpace.toRectangle(new Rectangle())},
+				new Point(0, 0),
+				LayoutDragger.ALL_EDGES);
+		dragger.setTargetContainer(parentCont, parentRoots);
+		dragger.move(new int[]{10, 10}, true, false);
+		dragger.move(new int[]{0, 0}, true, false);
+		addComponents(new LayoutComponent[]{enclosingCont}, parentCont, addingInts, false);
+		dragger = null;
+		visualStateUpToDate = false;
+	}
 
-  /**
-   * Add a single new component (targetId) to given target container. No layout information is
-   * provided, so the component is placed on a default location in the layout. This means centered
-   * within the container, in a separate layer of layout roots (not to interact with the rest of the
-   * layout). The size of the component can be determined either by a "source" component (typically
-   * if adding a copy of another component), or by provided Dimension object (compSize).
-   *
-   * @param targetId
-   *          Id of the added component; may already be in the model, but not in a container;
-   *          created automatically if needed
-   * @param sourceId
-   *          Id of the source component - optional - if provided, the size definition of this
-   *          component is copied to the added component
-   * @param compSize
-   *          the size of the component - used if the source component is not provided to determine
-   *          the size from; can be null
-   * @param targetContainerId
-   *          the Id of the target container (must exist in the model)
-   */
-  public void addUnspecifiedComponent(String targetId,
-      String sourceId,
-      Dimension compSize,
-      String targetContainerId) {
-    LayoutComponent targetContainer = layoutModel.getLayoutComponent(targetContainerId);
-    LayoutComponent targetLC = layoutModel.getLayoutComponent(targetId);
-    if (targetLC == null) {
-      targetLC = new LayoutComponent(targetId, false);
-    } else if (targetLC.getParent() != null) {
-      if (targetLC.getParent() != targetContainer && targetId.equals(sourceId)) { // move from other container
-        layoutModel.removeComponentAndIntervals(targetLC, false);
-      } else {
-        throw new IllegalArgumentException(
-            "Target component already exists and is placed in the layout"); // NOI18N
-      }
-    }
-    LayoutComponent sourceLC = layoutModel.getLayoutComponent(sourceId);
-    LayoutInterval[] addingInts = new LayoutInterval[DIM_COUNT];
-    if (sourceLC != null) {
-      for (int dim = 0; dim < DIM_COUNT; dim++) {
-        LayoutInterval li = sourceLC.getLayoutInterval(dim);
-        addingInts[dim] = LayoutInterval.cloneInterval(li, targetLC.getLayoutInterval(dim));
-      }
-    } else {
-      Dimension preferred =
-          compSize != null ? visualMapper.getComponentPreferredSize(targetId) : null;
-      for (int dim = 0; dim < DIM_COUNT; dim++) {
-        LayoutInterval li = targetLC.getLayoutInterval(dim);
-        addingInts[dim] = li;
-        if (preferred != null) {
-          int size = dim == HORIZONTAL ? compSize.width : compSize.height;
-          int pref = dim == HORIZONTAL ? preferred.width : preferred.height;
-          if (size != pref) {
-            li.setPreferredSize(size);
-          }
-        }
-      }
-    }
-    addUnspecified(
-        new LayoutComponent[]{targetLC},
-        targetContainer, /*getTargetRootsForCopy(targetContainer),*/
-        addingInts);
-    visualStateUpToDate = false;
-  }
+	/**
+	 * Add a single new component (targetId) to given target container. No layout information is
+	 * provided, so the component is placed on a default location in the layout. This means centered
+	 * within the container, in a separate layer of layout roots (not to interact with the rest of the
+	 * layout). The size of the component can be determined either by a "source" component (typically
+	 * if adding a copy of another component), or by provided Dimension object (compSize).
+	 *
+	 * @param targetId
+	 *          Id of the added component; may already be in the model, but not in a container;
+	 *          created automatically if needed
+	 * @param sourceId
+	 *          Id of the source component - optional - if provided, the size definition of this
+	 *          component is copied to the added component
+	 * @param compSize
+	 *          the size of the component - used if the source component is not provided to determine
+	 *          the size from; can be null
+	 * @param targetContainerId
+	 *          the Id of the target container (must exist in the model)
+	 */
+	public void addUnspecifiedComponent(String targetId,
+			String sourceId,
+			Dimension compSize,
+			String targetContainerId) {
+		LayoutComponent targetContainer = layoutModel.getLayoutComponent(targetContainerId);
+		LayoutComponent targetLC = layoutModel.getLayoutComponent(targetId);
+		if (targetLC == null) {
+			targetLC = new LayoutComponent(targetId, false);
+		} else if (targetLC.getParent() != null) {
+			if (targetLC.getParent() != targetContainer && targetId.equals(sourceId)) { // move from other container
+				layoutModel.removeComponentAndIntervals(targetLC, false);
+			} else {
+				throw new IllegalArgumentException(
+						"Target component already exists and is placed in the layout"); // NOI18N
+			}
+		}
+		LayoutComponent sourceLC = layoutModel.getLayoutComponent(sourceId);
+		LayoutInterval[] addingInts = new LayoutInterval[DIM_COUNT];
+		if (sourceLC != null) {
+			for (int dim = 0; dim < DIM_COUNT; dim++) {
+				LayoutInterval li = sourceLC.getLayoutInterval(dim);
+				addingInts[dim] = LayoutInterval.cloneInterval(li, targetLC.getLayoutInterval(dim));
+			}
+		} else {
+			Dimension preferred =
+					compSize != null ? visualMapper.getComponentPreferredSize(targetId) : null;
+			for (int dim = 0; dim < DIM_COUNT; dim++) {
+				LayoutInterval li = targetLC.getLayoutInterval(dim);
+				addingInts[dim] = li;
+				if (preferred != null) {
+					int size = dim == HORIZONTAL ? compSize.width : compSize.height;
+					int pref = dim == HORIZONTAL ? preferred.width : preferred.height;
+					if (size != pref) {
+						li.setPreferredSize(size);
+					}
+				}
+			}
+		}
+		addUnspecified(
+				new LayoutComponent[]{targetLC},
+				targetContainer, /*getTargetRootsForCopy(targetContainer),*/
+				addingInts);
+		visualStateUpToDate = false;
+	}
 
-  /**
-   * Add a new component to the target layout. No layout information is provided, so the component
-   * is added to a default location. (This means centered within the container, in a separate layer
-   * of layout roots - not to interact with the rest of the layout.)
-   *
-   * @param component
-   *          the component to be added; may already exist in the model, but not placed in a
-   *          container
-   * @param targetContainerId
-   *          Id of the target container; can be null
-   */
-  public void addUnspecifiedComponent(LayoutComponent component, String targetContainerId) {
-    if (component.getParent() != null) {
-      throw new IllegalArgumentException(
-          "The component already exists and is placed in the layout"); // NOI18N
-    }
-    LayoutComponent targetContainer = layoutModel.getLayoutComponent(targetContainerId);
-    if (targetContainer == null) {
-      layoutModel.addRootComponent(component);
-    } else {
-      LayoutInterval[] addingInts = new LayoutInterval[DIM_COUNT];
-      for (int dim = 0; dim < DIM_COUNT; dim++) {
-        addingInts[dim] = component.getLayoutInterval(dim);
-      }
-      addUnspecified(new LayoutComponent[]{component}, targetContainer, addingInts);
-      visualStateUpToDate = false;
-    }
-  }
+	/**
+	 * Add a new component to the target layout. No layout information is provided, so the component
+	 * is added to a default location. (This means centered within the container, in a separate layer
+	 * of layout roots - not to interact with the rest of the layout.)
+	 *
+	 * @param component
+	 *          the component to be added; may already exist in the model, but not placed in a
+	 *          container
+	 * @param targetContainerId
+	 *          Id of the target container; can be null
+	 */
+	public void addUnspecifiedComponent(LayoutComponent component, String targetContainerId) {
+		if (component.getParent() != null) {
+			throw new IllegalArgumentException(
+					"The component already exists and is placed in the layout"); // NOI18N
+		}
+		LayoutComponent targetContainer = layoutModel.getLayoutComponent(targetContainerId);
+		if (targetContainer == null) {
+			layoutModel.addRootComponent(component);
+		} else {
+			LayoutInterval[] addingInts = new LayoutInterval[DIM_COUNT];
+			for (int dim = 0; dim < DIM_COUNT; dim++) {
+				addingInts[dim] = component.getLayoutInterval(dim);
+			}
+			addUnspecified(new LayoutComponent[]{component}, targetContainer, addingInts);
+			visualStateUpToDate = false;
+		}
+	}
 
-  private LayoutInterval[] getTargetRootsForCopy(LayoutComponent targetContainer) {
-    LayoutInterval[] roots = layoutModel.addNewLayoutRoots(targetContainer);
-    LayoutRegion space = getContainerSpace(targetContainer);
-    for (int i = 0; i < DIM_COUNT; i++) {
-      roots[i].setCurrentSpace(space);
-    }
-    return roots;
-  }
+	private LayoutInterval[] getTargetRootsForCopy(LayoutComponent targetContainer) {
+		LayoutInterval[] roots = layoutModel.addNewLayoutRoots(targetContainer);
+		LayoutRegion space = getContainerSpace(targetContainer);
+		for (int i = 0; i < DIM_COUNT; i++) {
+			roots[i].setCurrentSpace(space);
+		}
+		return roots;
+	}
 
-  private static int[] getCopyShift(LayoutComponent[] sourceComponents,
-      LayoutComponent targetContainer,
-      LayoutRegion compSpace,
-      boolean relative) {
-    LayoutRegion contSpace = getContainerSpace(targetContainer);
-    if (!compSpace.isSet() || !contSpace.isSet()) {
-      return null;
-    }
-    int[] move = new int[DIM_COUNT];
-    if (relative) {
-      for (int dim = 0; dim < DIM_COUNT; dim++) {
-        move[dim] = suggestCopyShift(sourceComponents, dim);
-      }
-      if (move[HORIZONTAL] == 0 && move[VERTICAL] == 0) {
-        move[HORIZONTAL] = move[VERTICAL] = 10;
-      }
-    } else {
-      for (int dim = 0; dim < DIM_COUNT; dim++) {
-        move[dim] = (contSpace.size(dim) - compSpace.size(dim)) / 2
-            - compSpace.positions[dim][LEADING]
-            + contSpace.positions[dim][LEADING];
-      }
-    }
-    return move;
-  }
+	private static int[] getCopyShift(LayoutComponent[] sourceComponents,
+			LayoutComponent targetContainer,
+			LayoutRegion compSpace,
+			boolean relative) {
+		LayoutRegion contSpace = getContainerSpace(targetContainer);
+		if (!compSpace.isSet() || !contSpace.isSet()) {
+			return null;
+		}
+		int[] move = new int[DIM_COUNT];
+		if (relative) {
+			for (int dim = 0; dim < DIM_COUNT; dim++) {
+				move[dim] = suggestCopyShift(sourceComponents, dim);
+			}
+			if (move[HORIZONTAL] == 0 && move[VERTICAL] == 0) {
+				move[HORIZONTAL] = move[VERTICAL] = 10;
+			}
+		} else {
+			for (int dim = 0; dim < DIM_COUNT; dim++) {
+				move[dim] = (contSpace.size(dim) - compSpace.size(dim)) / 2
+						- compSpace.positions[dim][LEADING]
+								+ contSpace.positions[dim][LEADING];
+			}
+		}
+		return move;
+	}
 
-  private static int suggestCopyShift(LayoutComponent[] sourceComponents, int dimension) {
-    if (!isAnyComponentSnappedToRoot(sourceComponents, dimension, TRAILING)) {
-      return 10;
-    } else if (!isAnyComponentSnappedToRoot(sourceComponents, dimension, LEADING)) {
-      return -10;
-    } else {
-      return 0; // snapped to root border on both sides
-    }
-  }
+	private static int suggestCopyShift(LayoutComponent[] sourceComponents, int dimension) {
+		if (!isAnyComponentSnappedToRoot(sourceComponents, dimension, TRAILING)) {
+			return 10;
+		} else if (!isAnyComponentSnappedToRoot(sourceComponents, dimension, LEADING)) {
+			return -10;
+		} else {
+			return 0; // snapped to root border on both sides
+		}
+	}
 
-  private static boolean isAnyComponentSnappedToRoot(LayoutComponent[] components,
-      int dimension,
-      int alignment) {
-    LayoutInterval root = null;
-    for (LayoutComponent comp : components) {
-      LayoutInterval compInt = comp.getLayoutInterval(dimension);
-      if (root == null) {
-        root = LayoutInterval.getRoot(compInt);
-      }
-      if (LayoutInterval.isPlacedAtBorder(compInt, root, dimension, alignment)
-          || isSnappedNextToInParent(compInt, root, dimension, alignment)) {
-        return true;
-      }
-    }
-    return false;
-  }
+	private static boolean isAnyComponentSnappedToRoot(LayoutComponent[] components,
+			int dimension,
+			int alignment) {
+		LayoutInterval root = null;
+		for (LayoutComponent comp : components) {
+			LayoutInterval compInt = comp.getLayoutInterval(dimension);
+			if (root == null) {
+				root = LayoutInterval.getRoot(compInt);
+			}
+			if (LayoutInterval.isPlacedAtBorder(compInt, root, dimension, alignment)
+					|| isSnappedNextToInParent(compInt, root, dimension, alignment)) {
+				return true;
+			}
+		}
+		return false;
+	}
 
-  // [move this to LayoutInterval?]
-  private static boolean isSnappedNextToInParent(LayoutInterval interval,
-      LayoutInterval parent,
-      int dimension,
-      int alignment) {
-    LayoutInterval gap = LayoutInterval.getNeighbor(interval, alignment, false, true, false);
-    if (gap != null && LayoutInterval.isFixedDefaultPadding(gap) && parent.isParentOf(gap)) {
-      LayoutInterval back = LayoutInterval.getDirectNeighbor(gap, alignment ^ 1, true);
-      if ((back == interval
-          || LayoutInterval.isPlacedAtBorder(interval, back, dimension, alignment))
-          && LayoutInterval.getNeighbor(gap, alignment, true, true, false) == null
-          && LayoutInterval.isPlacedAtBorder(gap.getParent(), parent, dimension, alignment)) {
-        return true;
-      }
-    }
-    return false;
-  }
+	// [move this to LayoutInterval?]
+	private static boolean isSnappedNextToInParent(LayoutInterval interval,
+			LayoutInterval parent,
+			int dimension,
+			int alignment) {
+		LayoutInterval gap = LayoutInterval.getNeighbor(interval, alignment, false, true, false);
+		if (gap != null && LayoutInterval.isFixedDefaultPadding(gap) && parent.isParentOf(gap)) {
+			LayoutInterval back = LayoutInterval.getDirectNeighbor(gap, alignment ^ 1, true);
+			if ((back == interval
+					|| LayoutInterval.isPlacedAtBorder(interval, back, dimension, alignment))
+					&& LayoutInterval.getNeighbor(gap, alignment, true, true, false) == null
+					&& LayoutInterval.isPlacedAtBorder(gap.getParent(), parent, dimension, alignment)) {
+				return true;
+			}
+		}
+		return false;
+	}
 
-  private static LayoutRegion getContainerSpace(LayoutComponent container) {
-    return container.getDefaultLayoutRoot(HORIZONTAL).getCurrentSpace();
-  }
+	private static LayoutRegion getContainerSpace(LayoutComponent container) {
+		return container.getDefaultLayoutRoot(HORIZONTAL).getCurrentSpace();
+	}
 
-  private LayoutInterval[] getActiveLayoutRoots(LayoutComponent container) {
-    return container.getLayoutRoots().get(0);
-    // [in future we may keep the default "layer" for each container stored somewhere]
-  }
+	private LayoutInterval[] getActiveLayoutRoots(LayoutComponent container) {
+		return container.getLayoutRoots().get(0);
+		// [in future we may keep the default "layer" for each container stored somewhere]
+	}
 
-  // -----
-  // LayoutModel.Listener implementation & related
-  class Listener implements LayoutModel.Listener {
-    private boolean active = false;
+	// -----
+	// LayoutModel.Listener implementation & related
+	class Listener implements LayoutModel.Listener {
+		private boolean active = false;
 
-    @Override
-    public void layoutChanged(LayoutEvent ev) {
-      if (!layoutModel.isUndoRedoInProgress()) {
-        deactivate();
-        LayoutDesigner.this.layoutChanged(ev);
-        activate();
-      }
-    }
+		@Override
+		public void layoutChanged(LayoutEvent ev) {
+			if (!layoutModel.isUndoRedoInProgress()) {
+				deactivate();
+				LayoutDesigner.this.layoutChanged(ev);
+				activate();
+			}
+		}
 
-    void activate() {
-      layoutModel.addListener(this);
-      active = true;
-    }
+		void activate() {
+			layoutModel.addListener(this);
+			active = true;
+		}
 
-    void deactivate() {
-      layoutModel.removeListener(this);
-      active = false;
-    }
+		void deactivate() {
+			layoutModel.removeListener(this);
+			active = false;
+		}
 
-    boolean isActive() {
-      return active;
-    }
-  }
+		boolean isActive() {
+			return active;
+		}
+	}
 
-  private void layoutChanged(LayoutEvent e) {
-    if (e.getType() == LayoutEvent.INTERVAL_REMOVED) {
-      // component interval was removed - need to clear neighbor gaps etc.
-      LayoutEvent.Interval ev = (LayoutEvent.Interval) e;
-      LayoutInterval interval = ev.getInterval();
-      LayoutComponent comp = interval.getComponent();
-      if (comp != null) {
-        int dim = -1;
-        for (int i = 0; i < DIM_COUNT; i++) {
-          if (comp.getLayoutInterval(i) == interval) {
-            dim = i;
-            break;
-          }
-        }
-        assert dim > -1;
-        LayoutInterval root = LayoutInterval.getRoot(ev.getParentInterval());
-        intervalRemoved(
-            ev.getParentInterval(),
-            ev.getIndex(),
-            true,
-            LayoutInterval.wantResize(interval),
-            dim);
-        LayoutComponent container = comp.getParent();
-        if (container != null && root.getSubIntervalCount() == 0) {
-          // Empty root - eliminate if it is an additional layer or
-          // default layer with just one additional (which then
-          // becomes default).
-          // Hack #127988: don't remove layout roots during resizing
-          // (resized component stays in additional layer - unlike moved).
-          boolean resizing = dragger != null && dragger.isResizing();
-          if (root == getActiveLayoutRoots(container)[dim]
-              && (container.getLayoutRootCount() != 2 || resizing)) {
-            propEmptyContainer(root, dim);
-          } else if (!resizing) {
-            layoutModel.removeLayoutRoots(container, root);
-          }
-        }
-      }
-    }
-  }
+	private void layoutChanged(LayoutEvent e) {
+		if (e.getType() == LayoutEvent.INTERVAL_REMOVED) {
+			// component interval was removed - need to clear neighbor gaps etc.
+			LayoutEvent.Interval ev = (LayoutEvent.Interval) e;
+			LayoutInterval interval = ev.getInterval();
+			LayoutComponent comp = interval.getComponent();
+			if (comp != null) {
+				int dim = -1;
+				for (int i = 0; i < DIM_COUNT; i++) {
+					if (comp.getLayoutInterval(i) == interval) {
+						dim = i;
+						break;
+					}
+				}
+				assert dim > -1;
+				LayoutInterval root = LayoutInterval.getRoot(ev.getParentInterval());
+				intervalRemoved(
+						ev.getParentInterval(),
+						ev.getIndex(),
+						true,
+						LayoutInterval.wantResize(interval),
+						dim);
+				LayoutComponent container = comp.getParent();
+				if (container != null && root.getSubIntervalCount() == 0) {
+					// Empty root - eliminate if it is an additional layer or
+					// default layer with just one additional (which then
+					// becomes default).
+					// Hack #127988: don't remove layout roots during resizing
+					// (resized component stays in additional layer - unlike moved).
+					boolean resizing = dragger != null && dragger.isResizing();
+					if (root == getActiveLayoutRoots(container)[dim]
+							&& (container.getLayoutRootCount() != 2 || resizing)) {
+						propEmptyContainer(root, dim);
+					} else if (!resizing) {
+						layoutModel.removeLayoutRoots(container, root);
+					}
+				}
+			}
+		}
+	}
 
-  // -----
-  private boolean isComponentResizable(LayoutComponent comp, int dimension) {
-    boolean[] res = comp.getResizability();
-    if (res == null) {
-      res = visualMapper.getComponentResizability(comp.getId(), new boolean[DIM_COUNT]);
-      comp.setResizability(res);
-    }
-    return res[dimension];
-  }
+	// -----
+	private boolean isComponentResizable(LayoutComponent comp, int dimension) {
+		boolean[] res = comp.getResizability();
+		if (res == null) {
+			res = visualMapper.getComponentResizability(comp.getId(), new boolean[DIM_COUNT]);
+			comp.setResizability(res);
+		}
+		return res[dimension];
+	}
 
-  /**
-   * Changes global alignment of the layout component.
-   *
-   * @param comp
-   *          component whose alignment should be changed.
-   * @param dimension
-   *          dimension the alignment should be applied in.
-   * @param alignment
-   *          desired alignment.
-   */
-  public void adjustComponentAlignment(LayoutComponent comp, int dimension, int alignment) {
-    modelListener.deactivate();
-    LayoutInterval interval = comp.getLayoutInterval(dimension);
-    // Skip non-resizable groups
-    LayoutInterval parent = interval.getParent();
-    while (parent != null) {
-      if (!LayoutInterval.canResize(parent)) {
-        interval = parent;
-      }
-      parent = parent.getParent();
-    }
-    assert !LayoutInterval.wantResize(interval);
-    boolean changed = false;
-    parent = interval.getParent();
-    while (parent != null) {
-      if (parent.isParallel()) {
-        if (LayoutInterval.wantResize(parent) && !LayoutInterval.wantResize(interval)) {
-          int alg = interval.getAlignment();
-          if (alg != alignment) {
-            // Add fixed gap and change alignment
-            int size = LayoutInterval.getIntervalCurrentSize(parent, dimension)
-                - LayoutInterval.getIntervalCurrentSize(interval, dimension);
-            if (size > 0) {
-              if (!interval.isSequential()) {
-                LayoutInterval seq = new LayoutInterval(SEQUENTIAL);
-                layoutModel.setIntervalAlignment(interval, DEFAULT);
-                int i = layoutModel.removeInterval(interval);
-                layoutModel.addInterval(interval, seq, -1);
-                layoutModel.addInterval(seq, parent, i);
-                interval = seq;
-              }
-              int index = alg == LEADING ? -1 : 0;
-              LayoutInterval gap = new LayoutInterval(SINGLE);
-              gap.setSize(size);
-              layoutModel.addInterval(gap, interval, index);
-            }
-            layoutModel.setIntervalAlignment(interval, alignment);
-          }
-          changed = true;
-        }
-      } else {
-        boolean before = true;
-        boolean seqChanged = false;
-        for (int i = 0; i < parent.getSubIntervalCount(); i++) {
-          LayoutInterval li = parent.getSubInterval(i);
-          if (li == interval) {
-            before = false;
-          } else if (LayoutInterval.wantResize(li)) {
-            if (before && alignment == LEADING || !before && alignment == TRAILING) {
-              assert li.isEmptySpace();
-              setIntervalResizing(li, false);
-              if (li.getPreferredSize() == 0) {
-                layoutModel.removeInterval(li);
-                i--;
-              }
-              seqChanged = true;
-            }
-          }
-        }
-        if (!changed && seqChanged) {
-          boolean insertGap = false;
-          int index = parent.indexOf(interval);
-          if (alignment == LEADING) {
-            if (parent.getSubIntervalCount() <= index + 1) {
-              insertGap = true;
-              index = -1;
-            } else {
-              index++;
-              LayoutInterval candidate = parent.getSubInterval(index);
-              if (candidate.isEmptySpace()) {
-                setIntervalResizing(candidate, true);
-              } else {
-                insertGap = true;
-              }
-            }
-          } else {
-            assert alignment == TRAILING;
-            if (index == 0) {
-              insertGap = true;
-            } else {
-              LayoutInterval candidate = parent.getSubInterval(index - 1);
-              if (candidate.isEmptySpace()) {
-                setIntervalResizing(candidate, true);
-              } else {
-                insertGap = true;
-              }
-            }
-          }
-          if (insertGap) {
-            LayoutInterval gap = new LayoutInterval(SINGLE);
-            setIntervalResizing(gap, true);
-            layoutModel.setIntervalSize(gap, 0, 0, gap.getMaximumSize());
-            layoutModel.addInterval(gap, parent, index);
-          }
-          changed = true;
-        }
-      }
-      interval = parent;
-      parent = parent.getParent();
-    }
-    updateDesignModifications(interval, dimension);
-    modelListener.activate();
-    visualStateUpToDate = false;
-  }
+	/**
+	 * Changes global alignment of the layout component.
+	 *
+	 * @param comp
+	 *          component whose alignment should be changed.
+	 * @param dimension
+	 *          dimension the alignment should be applied in.
+	 * @param alignment
+	 *          desired alignment.
+	 */
+	public void adjustComponentAlignment(LayoutComponent comp, int dimension, int alignment) {
+		modelListener.deactivate();
+		LayoutInterval interval = comp.getLayoutInterval(dimension);
+		// Skip non-resizable groups
+		LayoutInterval parent = interval.getParent();
+		while (parent != null) {
+			if (!LayoutInterval.canResize(parent)) {
+				interval = parent;
+			}
+			parent = parent.getParent();
+		}
+		assert !LayoutInterval.wantResize(interval);
+		boolean changed = false;
+		parent = interval.getParent();
+		while (parent != null) {
+			if (parent.isParallel()) {
+				if (LayoutInterval.wantResize(parent) && !LayoutInterval.wantResize(interval)) {
+					int alg = interval.getAlignment();
+					if (alg != alignment) {
+						// Add fixed gap and change alignment
+						int size = LayoutInterval.getIntervalCurrentSize(parent, dimension)
+								- LayoutInterval.getIntervalCurrentSize(interval, dimension);
+						if (size > 0) {
+							if (!interval.isSequential()) {
+								LayoutInterval seq = new LayoutInterval(SEQUENTIAL);
+								layoutModel.setIntervalAlignment(interval, DEFAULT);
+								int i = layoutModel.removeInterval(interval);
+								layoutModel.addInterval(interval, seq, -1);
+								layoutModel.addInterval(seq, parent, i);
+								interval = seq;
+							}
+							int index = alg == LEADING ? -1 : 0;
+							LayoutInterval gap = new LayoutInterval(SINGLE);
+							gap.setSize(size);
+							layoutModel.addInterval(gap, interval, index);
+						}
+						layoutModel.setIntervalAlignment(interval, alignment);
+					}
+					changed = true;
+				}
+			} else {
+				boolean before = true;
+				boolean seqChanged = false;
+				for (int i = 0; i < parent.getSubIntervalCount(); i++) {
+					LayoutInterval li = parent.getSubInterval(i);
+					if (li == interval) {
+						before = false;
+					} else if (LayoutInterval.wantResize(li)) {
+						if (before && alignment == LEADING || !before && alignment == TRAILING) {
+							assert li.isEmptySpace();
+							setIntervalResizing(li, false);
+							if (li.getPreferredSize() == 0) {
+								layoutModel.removeInterval(li);
+								i--;
+							}
+							seqChanged = true;
+						}
+					}
+				}
+				if (!changed && seqChanged) {
+					boolean insertGap = false;
+					int index = parent.indexOf(interval);
+					if (alignment == LEADING) {
+						if (parent.getSubIntervalCount() <= index + 1) {
+							insertGap = true;
+							index = -1;
+						} else {
+							index++;
+							LayoutInterval candidate = parent.getSubInterval(index);
+							if (candidate.isEmptySpace()) {
+								setIntervalResizing(candidate, true);
+							} else {
+								insertGap = true;
+							}
+						}
+					} else {
+						assert alignment == TRAILING;
+						if (index == 0) {
+							insertGap = true;
+						} else {
+							LayoutInterval candidate = parent.getSubInterval(index - 1);
+							if (candidate.isEmptySpace()) {
+								setIntervalResizing(candidate, true);
+							} else {
+								insertGap = true;
+							}
+						}
+					}
+					if (insertGap) {
+						LayoutInterval gap = new LayoutInterval(SINGLE);
+						setIntervalResizing(gap, true);
+						layoutModel.setIntervalSize(gap, 0, 0, gap.getMaximumSize());
+						layoutModel.addInterval(gap, parent, index);
+					}
+					changed = true;
+				}
+			}
+			interval = parent;
+			parent = parent.getParent();
+		}
+		updateDesignModifications(interval, dimension);
+		modelListener.activate();
+		visualStateUpToDate = false;
+	}
 
-  /**
-   * Returns alignment of the component as the first item of the array. The second item of the array
-   * indicates whether the alignment can be changed to leading or trailing (e.g. if the current
-   * value is not enforced by other resizable components). The returned alignment is global e.g. it
-   * shows which edge of the container the component will track.
-   *
-   * @param comp
-   *          component whose alignment should be determined.
-   * @param dimension
-   *          dimension in which the alignment should be determined.
-   * @return alignment (or -1 if the component doesn't have a global alignment) as the first item of
-   *         the array and (canBeChangedToLeading ? 1 : 0) + (canBeChangedToTrailing ? 2 : 0) as the
-   *         second item.
-   */
-  public int[] getAdjustableComponentAlignment(LayoutComponent comp, int dimension) {
-    // Desperate workaround for issue 121243 - do not throw exception if something went wrong
-    if (comp == null) {
-      return new int[]{-1, 0};
-    }
-    LayoutInterval interval = comp.getLayoutInterval(dimension);
-    boolean leadingFixed = true;
-    boolean trailingFixed = true;
-    boolean leadingAdjustable = true;
-    boolean trailingAdjustable = true;
-    if (LayoutInterval.wantResize(interval)) {
-      leadingFixed = trailingFixed = leadingAdjustable = trailingAdjustable = false;
-    }
-    LayoutInterval parent = interval.getParent();
-    while (parent != null) {
-      if (!LayoutInterval.canResize(parent)) {
-        leadingFixed = trailingFixed = leadingAdjustable = trailingAdjustable = true;
-      } else if (parent.isParallel()) {
-        if (LayoutInterval.wantResize(parent) && !LayoutInterval.wantResize(interval)) {
-          int alignment = interval.getAlignment();
-          if (alignment == LEADING) {
-            trailingFixed = false;
-          } else if (alignment == TRAILING) {
-            leadingFixed = false;
-          }
-        }
-      } else {
-        boolean before = true;
-        Iterator iter = parent.getSubIntervals();
-        while (iter.hasNext()) {
-          LayoutInterval li = (LayoutInterval) iter.next();
-          if (li == interval) {
-            before = false;
-          } else if (LayoutInterval.wantResize(li)) {
-            boolean space = li.isEmptySpace();
-            if (before) {
-              leadingFixed = false;
-              if (!space) {
-                leadingAdjustable = false;
-              }
-            } else {
-              trailingFixed = false;
-              if (!space) {
-                trailingAdjustable = false;
-              }
-            }
-          }
-        }
-      }
-      interval = parent;
-      parent = parent.getParent();
-    }
-    int adjustable =
-        (leadingAdjustable ? 1 << LEADING : 0) + (trailingAdjustable ? 1 << TRAILING : 0);
-    if (leadingFixed && trailingFixed) {
-      // As if top level group wantResize()
-      if (LEADING == interval.getGroupAlignment()) {
-        trailingFixed = false;
-      } else {
-        leadingFixed = false;
-      }
-    }
-    int alignment;
-    if (leadingFixed) {
-      // !trailingFixed
-      alignment = LEADING;
-    } else {
-      if (trailingFixed) {
-        alignment = TRAILING;
-      } else {
-        alignment = -1;
-      }
-    }
-    return new int[]{alignment, adjustable};
-  }
+	/**
+	 * Returns alignment of the component as the first item of the array. The second item of the array
+	 * indicates whether the alignment can be changed to leading or trailing (e.g. if the current
+	 * value is not enforced by other resizable components). The returned alignment is global e.g. it
+	 * shows which edge of the container the component will track.
+	 *
+	 * @param comp
+	 *          component whose alignment should be determined.
+	 * @param dimension
+	 *          dimension in which the alignment should be determined.
+	 * @return alignment (or -1 if the component doesn't have a global alignment) as the first item of
+	 *         the array and (canBeChangedToLeading ? 1 : 0) + (canBeChangedToTrailing ? 2 : 0) as the
+	 *         second item.
+	 */
+	public int[] getAdjustableComponentAlignment(LayoutComponent comp, int dimension) {
+		// Desperate workaround for issue 121243 - do not throw exception if something went wrong
+		if (comp == null) {
+			return new int[]{-1, 0};
+		}
+		LayoutInterval interval = comp.getLayoutInterval(dimension);
+		boolean leadingFixed = true;
+		boolean trailingFixed = true;
+		boolean leadingAdjustable = true;
+		boolean trailingAdjustable = true;
+		if (LayoutInterval.wantResize(interval)) {
+			leadingFixed = trailingFixed = leadingAdjustable = trailingAdjustable = false;
+		}
+		LayoutInterval parent = interval.getParent();
+		while (parent != null) {
+			if (!LayoutInterval.canResize(parent)) {
+				leadingFixed = trailingFixed = leadingAdjustable = trailingAdjustable = true;
+			} else if (parent.isParallel()) {
+				if (LayoutInterval.wantResize(parent) && !LayoutInterval.wantResize(interval)) {
+					int alignment = interval.getAlignment();
+					if (alignment == LEADING) {
+						trailingFixed = false;
+					} else if (alignment == TRAILING) {
+						leadingFixed = false;
+					}
+				}
+			} else {
+				boolean before = true;
+				Iterator iter = parent.getSubIntervals();
+				while (iter.hasNext()) {
+					LayoutInterval li = (LayoutInterval) iter.next();
+					if (li == interval) {
+						before = false;
+					} else if (LayoutInterval.wantResize(li)) {
+						boolean space = li.isEmptySpace();
+						if (before) {
+							leadingFixed = false;
+							if (!space) {
+								leadingAdjustable = false;
+							}
+						} else {
+							trailingFixed = false;
+							if (!space) {
+								trailingAdjustable = false;
+							}
+						}
+					}
+				}
+			}
+			interval = parent;
+			parent = parent.getParent();
+		}
+		int adjustable =
+				(leadingAdjustable ? 1 << LEADING : 0) + (trailingAdjustable ? 1 << TRAILING : 0);
+		if (leadingFixed && trailingFixed) {
+			// As if top level group wantResize()
+			if (LEADING == interval.getGroupAlignment()) {
+				trailingFixed = false;
+			} else {
+				leadingFixed = false;
+			}
+		}
+		int alignment;
+		if (leadingFixed) {
+			// !trailingFixed
+			alignment = LEADING;
+		} else {
+			if (trailingFixed) {
+				alignment = TRAILING;
+			} else {
+				alignment = -1;
+			}
+		}
+		return new int[]{alignment, adjustable};
+	}
 
-  /**
-   * Determines whether the component is resizing in the given direction.
-   *
-   * @param comp
-   *          component whose resizability should be determined.
-   * @param dimension
-   *          dimension in which the resizability should be determined.
-   * @return <code>true</code> if the component is resizing, returns <code>false</code> otherwise.
-   */
-  public boolean isComponentResizing(LayoutComponent comp, int dimension) {
-    LayoutInterval interval = comp.getLayoutInterval(dimension);
-    boolean fill = interval.hasAttribute(LayoutInterval.ATTRIBUTE_FILL);
-    return fill ? false : LayoutInterval.wantResizeInLayout(interval);
-  }
+	/**
+	 * Determines whether the component is resizing in the given direction.
+	 *
+	 * @param comp
+	 *          component whose resizability should be determined.
+	 * @param dimension
+	 *          dimension in which the resizability should be determined.
+	 * @return <code>true</code> if the component is resizing, returns <code>false</code> otherwise.
+	 */
+	public boolean isComponentResizing(LayoutComponent comp, int dimension) {
+		LayoutInterval interval = comp.getLayoutInterval(dimension);
+		boolean fill = interval.hasAttribute(LayoutInterval.ATTRIBUTE_FILL);
+		return fill ? false : LayoutInterval.wantResizeInLayout(interval);
+	}
 
-  /**
-   * Returns preferred size of the given interval (in pixels).
-   *
-   * @param interval
-   *          interval whose preferred size should be determined.
-   * @return preferred size of the given interval.
-   */
-  private int prefSizeOfInterval(LayoutInterval interval) {
-    int dimension = -1;
-    if (interval.isComponent()) {
-      LayoutComponent comp = interval.getComponent();
-      dimension = interval == comp.getLayoutInterval(HORIZONTAL) ? HORIZONTAL : VERTICAL;
-      if (comp.isLinkSized(dimension)) {
-        Collection linked = layoutModel.getLinkSizeGroups(dimension).get(
-            Integer.valueOf(comp.getLinkSizeId(dimension)));
-        Iterator iter = linked.iterator();
-        int prefSize = 0;
-        while (iter.hasNext()) {
-          String compId = (String) iter.next();
-          LayoutComponent component = layoutModel.getLayoutComponent(compId);
-          LayoutInterval intr = component.getLayoutInterval(dimension);
-          int pref = intr.getPreferredSize();
-          if (pref == NOT_EXPLICITLY_DEFINED) {
-            Dimension prefDim = visualMapper.getComponentPreferredSize(compId);
-            pref = dimension == HORIZONTAL ? prefDim.width : prefDim.height;
-          }
-          prefSize = Math.max(pref, prefSize);
-        }
-        return prefSize;
-      }
-    }
-    int prefSize = interval.getPreferredSize();
-    if (prefSize == NOT_EXPLICITLY_DEFINED) {
-      if (interval.isComponent()) {
-        LayoutComponent comp = interval.getComponent();
-        Dimension pref = visualMapper.getComponentPreferredSize(comp.getId());
-        return dimension == HORIZONTAL ? pref.width : pref.height;
-      } else if (interval.isEmptySpace()) {
-        return sizeOfEmptySpace(interval);
-      } else {
-        assert interval.isGroup();
-        prefSize = 0;
-        Iterator iter = interval.getSubIntervals();
-        if (interval.isSequential()) {
-          while (iter.hasNext()) {
-            LayoutInterval subInterval = (LayoutInterval) iter.next();
-            prefSize += prefSizeOfInterval(subInterval);
-          }
-        } else {
-          while (iter.hasNext()) {
-            LayoutInterval subInterval = (LayoutInterval) iter.next();
-            prefSize = Math.max(prefSize, prefSizeOfInterval(subInterval));
-          }
-        }
-      }
-    }
-    return prefSize;
-  }
+	/**
+	 * Returns preferred size of the given interval (in pixels).
+	 *
+	 * @param interval
+	 *          interval whose preferred size should be determined.
+	 * @return preferred size of the given interval.
+	 */
+	private int prefSizeOfInterval(LayoutInterval interval) {
+		int dimension = -1;
+		if (interval.isComponent()) {
+			LayoutComponent comp = interval.getComponent();
+			dimension = interval == comp.getLayoutInterval(HORIZONTAL) ? HORIZONTAL : VERTICAL;
+			if (comp.isLinkSized(dimension)) {
+				Collection linked = layoutModel.getLinkSizeGroups(dimension).get(
+						Integer.valueOf(comp.getLinkSizeId(dimension)));
+				Iterator iter = linked.iterator();
+				int prefSize = 0;
+				while (iter.hasNext()) {
+					String compId = (String) iter.next();
+					LayoutComponent component = layoutModel.getLayoutComponent(compId);
+					LayoutInterval intr = component.getLayoutInterval(dimension);
+					int pref = intr.getPreferredSize();
+					if (pref == NOT_EXPLICITLY_DEFINED) {
+						Dimension prefDim = visualMapper.getComponentPreferredSize(compId);
+						pref = dimension == HORIZONTAL ? prefDim.width : prefDim.height;
+					}
+					prefSize = Math.max(pref, prefSize);
+				}
+				return prefSize;
+			}
+		}
+		int prefSize = interval.getPreferredSize();
+		if (prefSize == NOT_EXPLICITLY_DEFINED) {
+			if (interval.isComponent()) {
+				LayoutComponent comp = interval.getComponent();
+				Dimension pref = visualMapper.getComponentPreferredSize(comp.getId());
+				return dimension == HORIZONTAL ? pref.width : pref.height;
+			} else if (interval.isEmptySpace()) {
+				return sizeOfEmptySpace(interval);
+			} else {
+				assert interval.isGroup();
+				prefSize = 0;
+				Iterator iter = interval.getSubIntervals();
+				if (interval.isSequential()) {
+					while (iter.hasNext()) {
+						LayoutInterval subInterval = (LayoutInterval) iter.next();
+						prefSize += prefSizeOfInterval(subInterval);
+					}
+				} else {
+					while (iter.hasNext()) {
+						LayoutInterval subInterval = (LayoutInterval) iter.next();
+						prefSize = Math.max(prefSize, prefSizeOfInterval(subInterval));
+					}
+				}
+			}
+		}
+		return prefSize;
+	}
 
-  /**
-   * Returns size of the empty space represented by the given layout interval.
-   *
-   * @param interval
-   *          layout interval that represents padding.
-   * @return size of the padding.
-   */
-  private int sizeOfEmptySpace(LayoutInterval interval) {
-    return LayoutUtils.getSizeOfDefaultGap(interval, visualMapper);
-  }
+	/**
+	 * Returns size of the empty space represented by the given layout interval.
+	 *
+	 * @param interval
+	 *          layout interval that represents padding.
+	 * @return size of the padding.
+	 */
+	private int sizeOfEmptySpace(LayoutInterval interval) {
+		return LayoutUtils.getSizeOfDefaultGap(interval, visualMapper);
+	}
 
-  /**
-   * Sets component resizability. Makes the component resizing or fixed.
-   *
-   * @param comp
-   *          component whose resizability should be set.
-   * @param dimension
-   *          dimension in which the resizability should be changed.
-   * @param resizable
-   *          determines whether the component should be made resizable in the given dimension.
-   */
-  public void setComponentResizing(LayoutComponent comp, int dimension, boolean resizing) {
-    modelListener.deactivate();
-    LayoutInterval interval = comp.getLayoutInterval(dimension);
-    // Unset the same-size if we are making the component resizable
-    if (resizing && comp.isLinkSized(dimension)) {
-      Collection linked = layoutModel.getLinkSizeGroups(dimension).get(
-          Integer.valueOf(comp.getLinkSizeId(dimension)));
-      Collection toChange;
-      if (linked.size() == 2) { // The second component will be unlinked, too.
-        toChange = linked;
-      } else {
-        toChange = Collections.singletonList(comp.getId());
-      }
-      Iterator iter = toChange.iterator();
-      while (iter.hasNext()) {
-        String compId = (String) iter.next();
-        LayoutComponent component = layoutModel.getLayoutComponent(compId);
-        LayoutInterval intr = component.getLayoutInterval(dimension);
-        Dimension prefDim = visualMapper.getComponentPreferredSize(compId);
-        int prefSize = dimension == HORIZONTAL ? prefDim.width : prefDim.height;
-        int currSize = intr.getCurrentSpace().size(dimension);
-        if (currSize == prefSize) {
-          currSize = NOT_EXPLICITLY_DEFINED;
-        }
-        layoutModel.setIntervalSize(intr, intr.getMinimumSize(), currSize, intr.getMaximumSize());
-      }
-    }
-    LayoutInterval parent = interval.getParent();
-    boolean fill = interval.hasAttribute(LayoutInterval.ATTRIBUTE_FILL);
-    boolean formerFill = interval.hasAttribute(LayoutInterval.ATTRIBUTE_FORMER_FILL);
-    if (fill || formerFill) {
-      switchFillAttribute(interval, resizing);
-    } else {
-      setIntervalResizing(interval, resizing);
-    }
-    int delta = 0;
-    if (!resizing) {
-      int currSize = LayoutInterval.getIntervalCurrentSize(interval, dimension);
-      int prefSize = prefSizeOfInterval(interval);
-      delta = currSize - prefSize;
-      if (delta != 0) {
-        layoutModel.setIntervalSize(
-            interval,
-            interval.getMinimumSize(),
-            currSize,
-            interval.getMaximumSize());
-      }
-    }
-    LayoutInterval intr = interval;
-    LayoutInterval par = parent;
-    while (par != null) {
-      if (par.isParallel() && resizing) {
-        int groupCurrSize = LayoutInterval.getIntervalCurrentSize(par, dimension);
-        int currSize = LayoutInterval.getIntervalCurrentSize(intr, dimension);
-        // PENDING currSize could change if groupPrefSize != groupCurrSize
-        if (groupCurrSize != currSize) {
-          LayoutInterval seqGroup = intr;
-          LayoutInterval space = new LayoutInterval(SINGLE);
-          space.setSize(groupCurrSize - currSize);
-          int alignment = intr.getAlignment();
-          int index = alignment == LEADING ? -1 : 0;
-          if (intr.isSequential()) {
-            int spaceIndex = alignment == LEADING ? intr.getSubIntervalCount() - 1 : 0;
-            LayoutInterval adjacentSpace = intr.getSubInterval(spaceIndex);
-            if (adjacentSpace.isEmptySpace()) {
-              int spaceSize = LayoutInterval.getIntervalCurrentSize(adjacentSpace, dimension);
-              layoutModel.removeInterval(adjacentSpace);
-              space.setSize(groupCurrSize - currSize + spaceSize);
-            }
-          } else {
-            seqGroup = new LayoutInterval(SEQUENTIAL);
-            layoutModel.setIntervalAlignment(intr, DEFAULT);
-            seqGroup.setAlignment(alignment);
-            int i = layoutModel.removeInterval(intr);
-            layoutModel.addInterval(intr, seqGroup, -1);
-            layoutModel.addInterval(seqGroup, par, i);
-          }
-          layoutModel.addInterval(space, seqGroup, index);
-          seqGroup.getCurrentSpace().set(dimension, par.getCurrentSpace());
-        }
-      } else if (par.isSequential()) {
-        // Change resizability of gaps
-        boolean parentSeq = parent == par;
-        List<LayoutInterval> resizableList = new LinkedList<LayoutInterval>();
-        int alignment = parentSeq ? LayoutInterval.getEffectiveAlignment(interval) : 0;
-        LayoutInterval leadingGap = null;
-        LayoutInterval trailingGap = null;
-        boolean afterDefining = false;
-        Iterator iter = par.getSubIntervals();
-        while (iter.hasNext()) {
-          LayoutInterval candidate = (LayoutInterval) iter.next();
-          if (candidate == interval) {
-            afterDefining = true;
-          }
-          if (candidate.isEmptySpace()) {
-            if (resizing) {
-              setIntervalResizing(candidate, false);
-              int currSize = LayoutInterval.getIntervalCurrentSize(candidate, dimension);
-              int prefSize = prefSizeOfInterval(candidate);
-              if (currSize != prefSize) {
-                layoutModel.setIntervalSize(
-                    candidate,
-                    candidate.getMinimumSize(),
-                    currSize,
-                    candidate.getMaximumSize());
-                delta += currSize - prefSize;
-              }
-            } else if (parentSeq) {
-              boolean wasFill = candidate.hasAttribute(LayoutInterval.ATTRIBUTE_FORMER_FILL);
-              boolean glue = candidate.getPreferredSize() != NOT_EXPLICITLY_DEFINED;
-              if (wasFill) {
-                trailingGap = candidate;
-              } else if (trailingGap == null
-                  || !trailingGap.hasAttribute(LayoutInterval.ATTRIBUTE_FORMER_FILL)) {
-                if (glue) {
-                  trailingGap = candidate;
-                } else {
-                  if (afterDefining
-                      && (trailingGap == null
-                          || trailingGap.getPreferredSize() == NOT_EXPLICITLY_DEFINED)) {
-                    trailingGap = candidate;
-                  }
-                }
-              }
-              if (leadingGap == null && !afterDefining) {
-                leadingGap = candidate;
-              } else {
-                if (wasFill
-                    && (leadingGap == null
-                        || !leadingGap.hasAttribute(LayoutInterval.ATTRIBUTE_FORMER_FILL))
-                    || glue
-                        && (leadingGap == null
-                            || !leadingGap.hasAttribute(LayoutInterval.ATTRIBUTE_FORMER_FILL)
-                                && leadingGap.getPreferredSize() == NOT_EXPLICITLY_DEFINED)) {
-                  leadingGap = candidate;
-                }
-              }
-            }
-          } else {
-            if (candidate.getMaximumSize() == Short.MAX_VALUE) {
-              resizableList.add(candidate);
-            }
-          }
-        }
-        if (resizableList.size() > 0) {
-          iter = resizableList.iterator();
-          delta = (LayoutInterval.getIntervalCurrentSize(par, dimension)
-              - prefSizeOfInterval(par)
-              + delta) / resizableList.size();
-          while (iter.hasNext()) {
-            LayoutInterval candidate = (LayoutInterval) iter.next();
-            if (candidate.isGroup()) {
-              // PENDING currSize could change - we can't modify prefSize of group directly
-            } else {
-              if (candidate == interval) {
-                if (delta != 0) {
-                  int prefSize = prefSizeOfInterval(candidate);
-                  layoutModel.setIntervalSize(
-                      candidate,
-                      candidate.getMinimumSize(),
-                      Math.max(0, prefSize - delta),
-                      candidate.getMaximumSize());
-                }
-              } else {
-                int currSize = LayoutInterval.getIntervalCurrentSize(candidate, dimension);
-                layoutModel.setIntervalSize(
-                    candidate,
-                    candidate.getMinimumSize(),
-                    Math.max(0, currSize - delta),
-                    candidate.getMaximumSize());
-              }
-            }
-          }
-        }
-        if (parentSeq) {
-          if (!LayoutInterval.wantResize(par)) {
-            LayoutInterval gap = null;
-            if (alignment == TRAILING && leadingGap != null) {
-              gap = leadingGap;
-              setIntervalResizing(leadingGap, !resizing);
-              layoutModel.changeIntervalAttribute(leadingGap, LayoutInterval.ATTRIBUTE_FILL, true);
-            }
-            if (alignment == LEADING && trailingGap != null) {
-              gap = trailingGap;
-              setIntervalResizing(trailingGap, !resizing);
-              layoutModel.changeIntervalAttribute(trailingGap, LayoutInterval.ATTRIBUTE_FILL, true);
-            }
-            if (gap != null && delta != 0 && gap.getPreferredSize() != NOT_EXPLICITLY_DEFINED) {
-              layoutModel.setIntervalSize(
-                  gap,
-                  gap.getMinimumSize(),
-                  Math.max(0, gap.getPreferredSize() - delta),
-                  gap.getMaximumSize());
-            }
-          }
-          parent = par.getParent(); // use parallel parent for group resizing check
-        }
-      }
-      intr = par;
-      par = par.getParent();
-    }
-    // Unset the same size once all changes in gap sizes are done
-    if (resizing) {
-      layoutModel.unsetSameSize(Collections.singletonList(comp.getId()), dimension);
-    }
-    modelListener.activate();
-    if (resizing) {
-      // cancel possible suppressed resizing
-      while (parent != null) {
-        if (!LayoutInterval.canResize(parent)) {
-          operations.enableGroupResizing(parent);
-        }
-        parent = parent.getParent();
-      }
-    } else {
-      // check if we should suppress resizing
-      while (parent != null) {
-        if (fillResizable(parent)) {
-          operations.suppressGroupResizing(parent);
-          parent = parent.getParent();
-        } else {
-          break;
-        }
-      }
-    }
-    updateDesignModifications(comp.getParent());
-    visualStateUpToDate = false;
-  }
+	/**
+	 * Sets component resizability. Makes the component resizing or fixed.
+	 *
+	 * @param comp
+	 *          component whose resizability should be set.
+	 * @param dimension
+	 *          dimension in which the resizability should be changed.
+	 * @param resizable
+	 *          determines whether the component should be made resizable in the given dimension.
+	 */
+	public void setComponentResizing(LayoutComponent comp, int dimension, boolean resizing) {
+		modelListener.deactivate();
+		LayoutInterval interval = comp.getLayoutInterval(dimension);
+		// Unset the same-size if we are making the component resizable
+		if (resizing && comp.isLinkSized(dimension)) {
+			Collection linked = layoutModel.getLinkSizeGroups(dimension).get(
+					Integer.valueOf(comp.getLinkSizeId(dimension)));
+			Collection toChange;
+			if (linked.size() == 2) { // The second component will be unlinked, too.
+				toChange = linked;
+			} else {
+				toChange = Collections.singletonList(comp.getId());
+			}
+			Iterator iter = toChange.iterator();
+			while (iter.hasNext()) {
+				String compId = (String) iter.next();
+				LayoutComponent component = layoutModel.getLayoutComponent(compId);
+				LayoutInterval intr = component.getLayoutInterval(dimension);
+				Dimension prefDim = visualMapper.getComponentPreferredSize(compId);
+				int prefSize = dimension == HORIZONTAL ? prefDim.width : prefDim.height;
+				int currSize = intr.getCurrentSpace().size(dimension);
+				if (currSize == prefSize) {
+					currSize = NOT_EXPLICITLY_DEFINED;
+				}
+				layoutModel.setIntervalSize(intr, intr.getMinimumSize(), currSize, intr.getMaximumSize());
+			}
+		}
+		LayoutInterval parent = interval.getParent();
+		boolean fill = interval.hasAttribute(LayoutInterval.ATTRIBUTE_FILL);
+		boolean formerFill = interval.hasAttribute(LayoutInterval.ATTRIBUTE_FORMER_FILL);
+		if (fill || formerFill) {
+			switchFillAttribute(interval, resizing);
+		} else {
+			setIntervalResizing(interval, resizing);
+		}
+		int delta = 0;
+		if (!resizing) {
+			int currSize = LayoutInterval.getIntervalCurrentSize(interval, dimension);
+			int prefSize = prefSizeOfInterval(interval);
+			delta = currSize - prefSize;
+			if (delta != 0) {
+				layoutModel.setIntervalSize(
+						interval,
+						interval.getMinimumSize(),
+						currSize,
+						interval.getMaximumSize());
+			}
+		}
+		LayoutInterval intr = interval;
+		LayoutInterval par = parent;
+		while (par != null) {
+			if (par.isParallel() && resizing) {
+				int groupCurrSize = LayoutInterval.getIntervalCurrentSize(par, dimension);
+				int currSize = LayoutInterval.getIntervalCurrentSize(intr, dimension);
+				// PENDING currSize could change if groupPrefSize != groupCurrSize
+				if (groupCurrSize != currSize) {
+					LayoutInterval seqGroup = intr;
+					LayoutInterval space = new LayoutInterval(SINGLE);
+					space.setSize(groupCurrSize - currSize);
+					int alignment = intr.getAlignment();
+					int index = alignment == LEADING ? -1 : 0;
+					if (intr.isSequential()) {
+						int spaceIndex = alignment == LEADING ? intr.getSubIntervalCount() - 1 : 0;
+						LayoutInterval adjacentSpace = intr.getSubInterval(spaceIndex);
+						if (adjacentSpace.isEmptySpace()) {
+							int spaceSize = LayoutInterval.getIntervalCurrentSize(adjacentSpace, dimension);
+							layoutModel.removeInterval(adjacentSpace);
+							space.setSize(groupCurrSize - currSize + spaceSize);
+						}
+					} else {
+						seqGroup = new LayoutInterval(SEQUENTIAL);
+						layoutModel.setIntervalAlignment(intr, DEFAULT);
+						seqGroup.setAlignment(alignment);
+						int i = layoutModel.removeInterval(intr);
+						layoutModel.addInterval(intr, seqGroup, -1);
+						layoutModel.addInterval(seqGroup, par, i);
+					}
+					layoutModel.addInterval(space, seqGroup, index);
+					seqGroup.getCurrentSpace().set(dimension, par.getCurrentSpace());
+				}
+			} else if (par.isSequential()) {
+				// Change resizability of gaps
+				boolean parentSeq = parent == par;
+				List<LayoutInterval> resizableList = new LinkedList<LayoutInterval>();
+				int alignment = parentSeq ? LayoutInterval.getEffectiveAlignment(interval) : 0;
+				LayoutInterval leadingGap = null;
+				LayoutInterval trailingGap = null;
+				boolean afterDefining = false;
+				Iterator iter = par.getSubIntervals();
+				while (iter.hasNext()) {
+					LayoutInterval candidate = (LayoutInterval) iter.next();
+					if (candidate == interval) {
+						afterDefining = true;
+					}
+					if (candidate.isEmptySpace()) {
+						if (resizing) {
+							setIntervalResizing(candidate, false);
+							int currSize = LayoutInterval.getIntervalCurrentSize(candidate, dimension);
+							int prefSize = prefSizeOfInterval(candidate);
+							if (currSize != prefSize) {
+								layoutModel.setIntervalSize(
+										candidate,
+										candidate.getMinimumSize(),
+										currSize,
+										candidate.getMaximumSize());
+								delta += currSize - prefSize;
+							}
+						} else if (parentSeq) {
+							boolean wasFill = candidate.hasAttribute(LayoutInterval.ATTRIBUTE_FORMER_FILL);
+							boolean glue = candidate.getPreferredSize() != NOT_EXPLICITLY_DEFINED;
+							if (wasFill) {
+								trailingGap = candidate;
+							} else if (trailingGap == null
+									|| !trailingGap.hasAttribute(LayoutInterval.ATTRIBUTE_FORMER_FILL)) {
+								if (glue) {
+									trailingGap = candidate;
+								} else {
+									if (afterDefining
+											&& (trailingGap == null
+											|| trailingGap.getPreferredSize() == NOT_EXPLICITLY_DEFINED)) {
+										trailingGap = candidate;
+									}
+								}
+							}
+							if (leadingGap == null && !afterDefining) {
+								leadingGap = candidate;
+							} else {
+								if (wasFill
+										&& (leadingGap == null
+										|| !leadingGap.hasAttribute(LayoutInterval.ATTRIBUTE_FORMER_FILL))
+										|| glue
+										&& (leadingGap == null
+										|| !leadingGap.hasAttribute(LayoutInterval.ATTRIBUTE_FORMER_FILL)
+										&& leadingGap.getPreferredSize() == NOT_EXPLICITLY_DEFINED)) {
+									leadingGap = candidate;
+								}
+							}
+						}
+					} else {
+						if (candidate.getMaximumSize() == Short.MAX_VALUE) {
+							resizableList.add(candidate);
+						}
+					}
+				}
+				if (resizableList.size() > 0) {
+					iter = resizableList.iterator();
+					delta = (LayoutInterval.getIntervalCurrentSize(par, dimension)
+							- prefSizeOfInterval(par)
+							+ delta) / resizableList.size();
+					while (iter.hasNext()) {
+						LayoutInterval candidate = (LayoutInterval) iter.next();
+						if (candidate.isGroup()) {
+							// PENDING currSize could change - we can't modify prefSize of group directly
+						} else {
+							if (candidate == interval) {
+								if (delta != 0) {
+									int prefSize = prefSizeOfInterval(candidate);
+									layoutModel.setIntervalSize(
+											candidate,
+											candidate.getMinimumSize(),
+											Math.max(0, prefSize - delta),
+											candidate.getMaximumSize());
+								}
+							} else {
+								int currSize = LayoutInterval.getIntervalCurrentSize(candidate, dimension);
+								layoutModel.setIntervalSize(
+										candidate,
+										candidate.getMinimumSize(),
+										Math.max(0, currSize - delta),
+										candidate.getMaximumSize());
+							}
+						}
+					}
+				}
+				if (parentSeq) {
+					if (!LayoutInterval.wantResize(par)) {
+						LayoutInterval gap = null;
+						if (alignment == TRAILING && leadingGap != null) {
+							gap = leadingGap;
+							setIntervalResizing(leadingGap, !resizing);
+							layoutModel.changeIntervalAttribute(leadingGap, LayoutInterval.ATTRIBUTE_FILL, true);
+						}
+						if (alignment == LEADING && trailingGap != null) {
+							gap = trailingGap;
+							setIntervalResizing(trailingGap, !resizing);
+							layoutModel.changeIntervalAttribute(trailingGap, LayoutInterval.ATTRIBUTE_FILL, true);
+						}
+						if (gap != null && delta != 0 && gap.getPreferredSize() != NOT_EXPLICITLY_DEFINED) {
+							layoutModel.setIntervalSize(
+									gap,
+									gap.getMinimumSize(),
+									Math.max(0, gap.getPreferredSize() - delta),
+									gap.getMaximumSize());
+						}
+					}
+					parent = par.getParent(); // use parallel parent for group resizing check
+				}
+			}
+			intr = par;
+			par = par.getParent();
+		}
+		// Unset the same size once all changes in gap sizes are done
+		if (resizing) {
+			layoutModel.unsetSameSize(Collections.singletonList(comp.getId()), dimension);
+		}
+		modelListener.activate();
+		if (resizing) {
+			// cancel possible suppressed resizing
+			while (parent != null) {
+				if (!LayoutInterval.canResize(parent)) {
+					operations.enableGroupResizing(parent);
+				}
+				parent = parent.getParent();
+			}
+		} else {
+			// check if we should suppress resizing
+			while (parent != null) {
+				if (fillResizable(parent)) {
+					operations.suppressGroupResizing(parent);
+					parent = parent.getParent();
+				} else {
+					break;
+				}
+			}
+		}
+		updateDesignModifications(comp.getParent());
+		visualStateUpToDate = false;
+	}
 
-  private boolean fillResizable(LayoutInterval interval) {
-    if (!LayoutInterval.canResize(interval)) {
-      return false;
-    }
-    if (interval.isGroup()) {
-      boolean subres = true;
-      Iterator it = interval.getSubIntervals();
-      while (it.hasNext()) {
-        LayoutInterval li = (LayoutInterval) it.next();
-        if (LayoutInterval.wantResize(li) && !fillResizable(li)) {
-          subres = false;
-          break;
-        }
-      }
-      return subres;
-    } else {
-      return interval.hasAttribute(LayoutInterval.ATTRIBUTE_FILL);
-    }
-  }
+	private boolean fillResizable(LayoutInterval interval) {
+		if (!LayoutInterval.canResize(interval)) {
+			return false;
+		}
+		if (interval.isGroup()) {
+			boolean subres = true;
+			Iterator it = interval.getSubIntervals();
+			while (it.hasNext()) {
+				LayoutInterval li = (LayoutInterval) it.next();
+				if (LayoutInterval.wantResize(li) && !fillResizable(li)) {
+					subres = false;
+					break;
+				}
+			}
+			return subres;
+		} else {
+			return interval.hasAttribute(LayoutInterval.ATTRIBUTE_FILL);
+		}
+	}
 
-  /**
-   * Checks if given components can be aligned together in a parallel group using the 'align'
-   * method. For now it is enough if the components are in the same container and layer (under same
-   * layout roots).
-   *
-   * @param componentIds
-   *          IDs of components that should be aligned
-   * @return true if the components can be aligned in a parallel group
-   */
-  public boolean canAlign(Collection<String> componentIds) {
-    if (componentIds != null && componentIds.size() > 1) {
-      LayoutInterval commonRoot = null;
-      for (String id : componentIds) {
-        LayoutComponent component = layoutModel.getLayoutComponent(id);
-        if (component == null || component.getParent() == null) {
-          return false;
-        }
-        LayoutInterval root = LayoutInterval.getRoot(component.getLayoutInterval(HORIZONTAL));
-        if (commonRoot == null) {
-          commonRoot = root;
-        } else if (root != commonRoot) {
-          return false;
-        }
-      }
-      return true;
-    }
-    return false;
-  }
+	/**
+	 * Checks if given components can be aligned together in a parallel group using the 'align'
+	 * method. For now it is enough if the components are in the same container and layer (under same
+	 * layout roots).
+	 *
+	 * @param componentIds
+	 *          IDs of components that should be aligned
+	 * @return true if the components can be aligned in a parallel group
+	 */
+	public boolean canAlign(Collection<String> componentIds) {
+		if (componentIds != null && componentIds.size() > 1) {
+			LayoutInterval commonRoot = null;
+			for (String id : componentIds) {
+				LayoutComponent component = layoutModel.getLayoutComponent(id);
+				if (component == null || component.getParent() == null) {
+					return false;
+				}
+				LayoutInterval root = LayoutInterval.getRoot(component.getLayoutInterval(HORIZONTAL));
+				if (commonRoot == null) {
+					commonRoot = root;
+				} else if (root != commonRoot) {
+					return false;
+				}
+			}
+			return true;
+		}
+		return false;
+	}
 
-  /**
-   * Aligns given components in the specified direction.
-   *
-   * @param componentIds
-   *          IDs of components that should be aligned.
-   * @param closed
-   *          determines if closed group should be created.
-   * @param dimension
-   *          dimension to align in.
-   * @param alignment
-   *          requested alignment.
-   */
-  public void align(Collection componentIds, boolean closed, int dimension, int alignment) {
-    LayoutInterval[] intervals = new LayoutInterval[componentIds.size()];
-    int counter = 0;
-    Iterator iter = componentIds.iterator();
-    while (iter.hasNext()) {
-      String id = (String) iter.next();
-      LayoutComponent component = layoutModel.getLayoutComponent(id);
-      intervals[counter++] = component.getLayoutInterval(dimension);
-    }
-    modelListener.deactivate();
-    try {
-      new LayoutAligner(this, layoutModel, operations).alignIntervals(
-          intervals,
-          closed,
-          dimension,
-          alignment);
-    } finally {
-      modelListener.activate();
-    }
-    requireStructureOptimization();
-  }
+	/**
+	 * Aligns given components in the specified direction.
+	 *
+	 * @param componentIds
+	 *          IDs of components that should be aligned.
+	 * @param closed
+	 *          determines if closed group should be created.
+	 * @param dimension
+	 *          dimension to align in.
+	 * @param alignment
+	 *          requested alignment.
+	 */
+	public void align(Collection componentIds, boolean closed, int dimension, int alignment) {
+		LayoutInterval[] intervals = new LayoutInterval[componentIds.size()];
+		int counter = 0;
+		Iterator iter = componentIds.iterator();
+		while (iter.hasNext()) {
+			String id = (String) iter.next();
+			LayoutComponent component = layoutModel.getLayoutComponent(id);
+			intervals[counter++] = component.getLayoutInterval(dimension);
+		}
+		modelListener.deactivate();
+		try {
+			new LayoutAligner(this, layoutModel, operations).alignIntervals(
+					intervals,
+					closed,
+					dimension,
+					alignment);
+		} finally {
+			modelListener.activate();
+		}
+		requireStructureOptimization();
+	}
 
-  private void destroyRedundantGroups(Set<LayoutComponent> updatedContainers) {
-    Iterator it = layoutModel.getAllComponents();
-    while (it.hasNext()) {
-      LayoutComponent comp = (LayoutComponent) it.next();
-      if (!comp.isLayoutContainer()) {
-        continue;
-      }
-      boolean updated = false;
-      for (LayoutInterval[] roots : comp.getLayoutRoots()) {
-        for (int dim = 0; dim < DIM_COUNT; dim++) {
-          updated = destroyRedundantGroups(roots[dim]) || updated;
-        }
-      }
-      if (updated) {
-        updatedContainers.add(comp);
-      }
-    }
-  }
+	private void destroyRedundantGroups(Set<LayoutComponent> updatedContainers) {
+		Iterator it = layoutModel.getAllComponents();
+		while (it.hasNext()) {
+			LayoutComponent comp = (LayoutComponent) it.next();
+			if (!comp.isLayoutContainer()) {
+				continue;
+			}
+			boolean updated = false;
+			for (LayoutInterval[] roots : comp.getLayoutRoots()) {
+				for (int dim = 0; dim < DIM_COUNT; dim++) {
+					updated = destroyRedundantGroups(roots[dim]) || updated;
+				}
+			}
+			if (updated) {
+				updatedContainers.add(comp);
+			}
+		}
+	}
 
-  private boolean destroyRedundantGroups(LayoutInterval interval) {
-    boolean updated = false;
-    for (int i = interval.getSubIntervalCount() - 1; i >= 0; i--) {
-      if (i >= interval.getSubIntervalCount()) {
-        continue;
-      }
-      LayoutInterval subInterval = interval.getSubInterval(i);
-      if (subInterval.isGroup()) {
-        destroyRedundantGroups(subInterval);
-        destroyGroupIfRedundant(subInterval, interval);
-        updated |= subInterval.getParent() == null;
-      }
-    }
-    return updated;
-  }
+	private boolean destroyRedundantGroups(LayoutInterval interval) {
+		boolean updated = false;
+		for (int i = interval.getSubIntervalCount() - 1; i >= 0; i--) {
+			if (i >= interval.getSubIntervalCount()) {
+				continue;
+			}
+			LayoutInterval subInterval = interval.getSubInterval(i);
+			if (subInterval.isGroup()) {
+				destroyRedundantGroups(subInterval);
+				destroyGroupIfRedundant(subInterval, interval);
+				updated |= subInterval.getParent() == null;
+			}
+		}
+		return updated;
+	}
 
-  /**
-   * Destroys the given group if it is redundant in the layout model.
-   *
-   * @param group
-   *          group whose necessity should be checked.
-   * @param boundary
-   *          parent of the group that limits the changes that should be made e.g. no changes
-   *          outside of this group even if it were itself redundant. Can be <code>null</code> if
-   *          there's no boundary.
-   */
-  void destroyGroupIfRedundant(LayoutInterval group, LayoutInterval boundary) {
-    if (group == null || !group.isGroup() || group == boundary) {
-      return;
-    }
-    LayoutInterval parent = group.getParent();
-    // Don't destroy root intervals
-    if (parent == null) {
-      return;
-    }
-    // Remove empty groups
-    if (LayoutInterval.getCount(group, LayoutRegion.ALL_POINTS, true) == 0) {
-      takeOutInterval(group, boundary);
-      return;
-    }
-    if (operations.dissolveRedundantGroup(group)) {
-      destroyGroupIfRedundant(parent, boundary);
-    }
-  }
+	/**
+	 * Destroys the given group if it is redundant in the layout model.
+	 *
+	 * @param group
+	 *          group whose necessity should be checked.
+	 * @param boundary
+	 *          parent of the group that limits the changes that should be made e.g. no changes
+	 *          outside of this group even if it were itself redundant. Can be <code>null</code> if
+	 *          there's no boundary.
+	 */
+	void destroyGroupIfRedundant(LayoutInterval group, LayoutInterval boundary) {
+		if (group == null || !group.isGroup() || group == boundary) {
+			return;
+		}
+		LayoutInterval parent = group.getParent();
+		// Don't destroy root intervals
+		if (parent == null) {
+			return;
+		}
+		// Remove empty groups
+		if (LayoutInterval.getCount(group, LayoutRegion.ALL_POINTS, true) == 0) {
+			takeOutInterval(group, boundary);
+			return;
+		}
+		if (operations.dissolveRedundantGroup(group)) {
+			destroyGroupIfRedundant(parent, boundary);
+		}
+	}
 
-  /**
-   * Removes the given interval from the layout model. Consolidates parent groups if necessary.
-   *
-   * @param interval
-   *          interval that should be removed.
-   * @param boundary
-   *          parent of the group that limits the changes that should be made e.g. no changes
-   *          outside of this group even if it were itself redundant. Can be <code>null</code> if
-   *          there's no boundary.
-   */
-  void takeOutInterval(LayoutInterval interval, LayoutInterval boundary) {
-    LayoutInterval parent = interval.getParent();
-    int index = parent.indexOf(interval);
-    List<LayoutInterval> toRemove = new LinkedList<LayoutInterval>();
-    toRemove.add(interval);
-    if (parent.isSequential()) {
-      // Remove leading gap
-      if (index > 0) {
-        LayoutInterval li = parent.getSubInterval(index - 1);
-        if (li.isEmptySpace()) {
-          toRemove.add(li);
-        }
-      }
-      // Remove trailing gap
-      if (index + 1 < parent.getSubIntervalCount()) {
-        LayoutInterval li = parent.getSubInterval(index + 1);
-        if (li.isEmptySpace()) {
-          toRemove.add(li);
-        }
-      }
-      // Add dummy gap if necessary
-      if (toRemove.size() == 3 && parent.getSubIntervalCount() > 3) {
-        LayoutInterval gap = new LayoutInterval(SINGLE);
-        if (interval.isComponent()
-            && interval.getComponent().getLayoutInterval(VERTICAL) == interval) {
-          int alignment = LayoutInterval.getEffectiveAlignment(interval);
-          int size = 0;
-          for (int i = 0; i < 3; i++) {
-            size += LayoutInterval.getIntervalCurrentSize(toRemove.get(i), VERTICAL);
-          }
-          gap.setSizes(
-              NOT_EXPLICITLY_DEFINED,
-              size,
-              alignment == TRAILING ? Short.MAX_VALUE : USE_PREFERRED_SIZE);
-        }
-        layoutModel.addInterval(gap, parent, index);
-      }
-    }
-    Iterator iter = toRemove.iterator();
-    while (iter.hasNext()) {
-      LayoutInterval remove = (LayoutInterval) iter.next();
-      layoutModel.removeInterval(remove);
-    }
-    // Consolidate parent
-    destroyGroupIfRedundant(parent, boundary);
-  }
+	/**
+	 * Removes the given interval from the layout model. Consolidates parent groups if necessary.
+	 *
+	 * @param interval
+	 *          interval that should be removed.
+	 * @param boundary
+	 *          parent of the group that limits the changes that should be made e.g. no changes
+	 *          outside of this group even if it were itself redundant. Can be <code>null</code> if
+	 *          there's no boundary.
+	 */
+	void takeOutInterval(LayoutInterval interval, LayoutInterval boundary) {
+		LayoutInterval parent = interval.getParent();
+		int index = parent.indexOf(interval);
+		List<LayoutInterval> toRemove = new LinkedList<LayoutInterval>();
+		toRemove.add(interval);
+		if (parent.isSequential()) {
+			// Remove leading gap
+			if (index > 0) {
+				LayoutInterval li = parent.getSubInterval(index - 1);
+				if (li.isEmptySpace()) {
+					toRemove.add(li);
+				}
+			}
+			// Remove trailing gap
+			if (index + 1 < parent.getSubIntervalCount()) {
+				LayoutInterval li = parent.getSubInterval(index + 1);
+				if (li.isEmptySpace()) {
+					toRemove.add(li);
+				}
+			}
+			// Add dummy gap if necessary
+			if (toRemove.size() == 3 && parent.getSubIntervalCount() > 3) {
+				LayoutInterval gap = new LayoutInterval(SINGLE);
+				if (interval.isComponent()
+						&& interval.getComponent().getLayoutInterval(VERTICAL) == interval) {
+					int alignment = LayoutInterval.getEffectiveAlignment(interval);
+					int size = 0;
+					for (int i = 0; i < 3; i++) {
+						size += LayoutInterval.getIntervalCurrentSize(toRemove.get(i), VERTICAL);
+					}
+					gap.setSizes(
+							NOT_EXPLICITLY_DEFINED,
+							size,
+							alignment == TRAILING ? Short.MAX_VALUE : USE_PREFERRED_SIZE);
+				}
+				layoutModel.addInterval(gap, parent, index);
+			}
+		}
+		Iterator iter = toRemove.iterator();
+		while (iter.hasNext()) {
+			LayoutInterval remove = (LayoutInterval) iter.next();
+			layoutModel.removeInterval(remove);
+		}
+		// Consolidate parent
+		destroyGroupIfRedundant(parent, boundary);
+	}
 
-  // -----
-  // [should change to operations.addGroupContent]
-  /**
-   * Creates a remainder parallel group (remainder to a main group of aligned intervals).
-   *
-   * @param list
-   *          the content of the group, output from 'extract' method
-   * @param seq
-   *          a sequential group where to add to
-   * @param index
-   *          the index of the main group in the sequence
-   * @param position
-   *          the position of the remainder group relative to the main group (LEADING or TRAILING)
-   * @param mainAlignment
-   *          effective alignment of the main group (LEADING or TRAILING or something else meaning
-   *          not aligned)
-   * @param dimension
-   *          dimension the remainder group is created in.
-   */
-  void createRemainderGroup(List list,
-      LayoutInterval seq,
-      int index,
-      int position,
-      int mainAlignment,
-      int dimension) {
-    assert seq.isSequential() && (position == LEADING || position == TRAILING);
-    if (position == TRAILING) {
-      index++;
-    }
-    // [revisit the way how spaces are handled - in accordance to optimizeGaps]
-    LayoutInterval gap = null;
-    LayoutInterval leadingGap = null;
-    LayoutInterval trailingGap = null;
-    boolean onlyGaps = true;
-    boolean gapLeads = true;
-    boolean gapTrails = true;
-    // Remove sequences just with one gap
-    for (int i = list.size() - 1; i >= 0; i--) {
-      List subList = (List) list.get(i);
-      if (subList.size() == 2) { // there is just one interval
-        int alignment = ((Integer) subList.get(0)).intValue();
-        LayoutInterval li = (LayoutInterval) subList.get(1);
-        if (li.isEmptySpace()) {
-          if (gap == null || li.getMaximumSize() > gap.getMaximumSize()) {
-            gap = li;
-          }
-          if (isFixedPadding(li)) {
-            if (alignment == LEADING) {
-              leadingGap = li;
-              gapTrails = false;
-            } else if (alignment == TRAILING) {
-              trailingGap = li;
-              gapLeads = false;
-            }
-          } else {
-            gapLeads = false;
-            gapTrails = false;
-          }
-          list.remove(i);
-        } else {
-          onlyGaps = false;
-        }
-      }
-    }
-    if (list.size() == 1) { // just one sequence, need not a group
-      List subList = (List) list.get(0);
-      Iterator itr = subList.iterator();
-      itr.next(); // skip alignment
-      do {
-        LayoutInterval li = (LayoutInterval) itr.next();
-        layoutModel.addInterval(li, seq, index++);
-      } while (itr.hasNext());
-      return;
-    }
-    // find common ending gaps, possibility to eliminate some...
-    for (Iterator it = list.iterator(); it.hasNext();) {
-      List subList = (List) it.next();
-      if (subList.size() != 2) { // there are more intervals (will form a sequential group)
-        onlyGaps = false;
-        boolean first = true;
-        Iterator itr = subList.iterator();
-        itr.next(); // skip seq. alignment
-        do {
-          LayoutInterval li = (LayoutInterval) itr.next();
-          if (first) {
-            first = false;
-            if (isFixedPadding(li)) {
-              leadingGap = li;
-            } else {
-              gapLeads = false;
-            }
-          } else if (!itr.hasNext()) {
-            if (isFixedPadding(li)) {
-              trailingGap = li;
-            } else {
-              gapTrails = false;
-            }
-          }
-        } while (itr.hasNext());
-      }
-    }
-    if (onlyGaps) {
-      operations.insertGapIntoSequence(gap, seq, index, dimension);
-      return;
-    }
-    // create group
-    LayoutInterval group = new LayoutInterval(PARALLEL);
-    if (position == mainAlignment) {
-      // [but this should eliminate resizability only for gaps...]
-      group.setMinimumSize(USE_PREFERRED_SIZE);
-      group.setMaximumSize(USE_PREFERRED_SIZE);
-    }
-    //        group.setGroupAlignment(alignment);
-    // fill the group
-    for (Iterator it = list.iterator(); it.hasNext();) {
-      List subList = (List) it.next();
-      if (gapLeads) {
-        subList.remove(1);
-      }
-      if (gapTrails) {
-        subList.remove(subList.size() - 1);
-      }
-      LayoutInterval interval;
-      if (subList.size() == 2) { // there is just one interval - use it directly
-        int alignment = ((Integer) subList.get(0)).intValue();
-        interval = (LayoutInterval) subList.get(1);
-        if (alignment == LEADING || alignment == TRAILING) {
-          layoutModel.setIntervalAlignment(interval, alignment);
-        }
-      } else { // there are more intervals - group them in a sequence
-        interval = new LayoutInterval(SEQUENTIAL);
-        Iterator itr = subList.iterator();
-        int alignment = ((Integer) itr.next()).intValue();
-        if (alignment == LEADING || alignment == TRAILING) {
-          interval.setAlignment(alignment);
-        }
-        do {
-          LayoutInterval li = (LayoutInterval) itr.next();
-          layoutModel.addInterval(li, interval, -1);
-        } while (itr.hasNext());
-      }
-      layoutModel.addInterval(interval, group, -1);
-    }
-    // add the group to the sequence
-    if (gapLeads) {
-      layoutModel.addInterval(leadingGap, seq, index++);
-    }
-    layoutModel.addInterval(group, seq, index++);
-    if (gapTrails) {
-      layoutModel.addInterval(trailingGap, seq, index);
-    }
-  }
+	// -----
+	// [should change to operations.addGroupContent]
+	/**
+	 * Creates a remainder parallel group (remainder to a main group of aligned intervals).
+	 *
+	 * @param list
+	 *          the content of the group, output from 'extract' method
+	 * @param seq
+	 *          a sequential group where to add to
+	 * @param index
+	 *          the index of the main group in the sequence
+	 * @param position
+	 *          the position of the remainder group relative to the main group (LEADING or TRAILING)
+	 * @param mainAlignment
+	 *          effective alignment of the main group (LEADING or TRAILING or something else meaning
+	 *          not aligned)
+	 * @param dimension
+	 *          dimension the remainder group is created in.
+	 */
+	void createRemainderGroup(List list,
+			LayoutInterval seq,
+			int index,
+			int position,
+			int mainAlignment,
+			int dimension) {
+		assert seq.isSequential() && (position == LEADING || position == TRAILING);
+		if (position == TRAILING) {
+			index++;
+		}
+		// [revisit the way how spaces are handled - in accordance to optimizeGaps]
+		LayoutInterval gap = null;
+		LayoutInterval leadingGap = null;
+		LayoutInterval trailingGap = null;
+		boolean onlyGaps = true;
+		boolean gapLeads = true;
+		boolean gapTrails = true;
+		// Remove sequences just with one gap
+		for (int i = list.size() - 1; i >= 0; i--) {
+			List subList = (List) list.get(i);
+			if (subList.size() == 2) { // there is just one interval
+				int alignment = ((Integer) subList.get(0)).intValue();
+				LayoutInterval li = (LayoutInterval) subList.get(1);
+				if (li.isEmptySpace()) {
+					if (gap == null || li.getMaximumSize() > gap.getMaximumSize()) {
+						gap = li;
+					}
+					if (isFixedPadding(li)) {
+						if (alignment == LEADING) {
+							leadingGap = li;
+							gapTrails = false;
+						} else if (alignment == TRAILING) {
+							trailingGap = li;
+							gapLeads = false;
+						}
+					} else {
+						gapLeads = false;
+						gapTrails = false;
+					}
+					list.remove(i);
+				} else {
+					onlyGaps = false;
+				}
+			}
+		}
+		if (list.size() == 1) { // just one sequence, need not a group
+			List subList = (List) list.get(0);
+			Iterator itr = subList.iterator();
+			itr.next(); // skip alignment
+			do {
+				LayoutInterval li = (LayoutInterval) itr.next();
+				layoutModel.addInterval(li, seq, index++);
+			} while (itr.hasNext());
+			return;
+		}
+		// find common ending gaps, possibility to eliminate some...
+		for (Iterator it = list.iterator(); it.hasNext();) {
+			List subList = (List) it.next();
+			if (subList.size() != 2) { // there are more intervals (will form a sequential group)
+				onlyGaps = false;
+				boolean first = true;
+				Iterator itr = subList.iterator();
+				itr.next(); // skip seq. alignment
+				do {
+					LayoutInterval li = (LayoutInterval) itr.next();
+					if (first) {
+						first = false;
+						if (isFixedPadding(li)) {
+							leadingGap = li;
+						} else {
+							gapLeads = false;
+						}
+					} else if (!itr.hasNext()) {
+						if (isFixedPadding(li)) {
+							trailingGap = li;
+						} else {
+							gapTrails = false;
+						}
+					}
+				} while (itr.hasNext());
+			}
+		}
+		if (onlyGaps) {
+			operations.insertGapIntoSequence(gap, seq, index, dimension);
+			return;
+		}
+		// create group
+		LayoutInterval group = new LayoutInterval(PARALLEL);
+		if (position == mainAlignment) {
+			// [but this should eliminate resizability only for gaps...]
+			group.setMinimumSize(USE_PREFERRED_SIZE);
+			group.setMaximumSize(USE_PREFERRED_SIZE);
+		}
+		//        group.setGroupAlignment(alignment);
+		// fill the group
+		for (Iterator it = list.iterator(); it.hasNext();) {
+			List subList = (List) it.next();
+			if (gapLeads) {
+				subList.remove(1);
+			}
+			if (gapTrails) {
+				subList.remove(subList.size() - 1);
+			}
+			LayoutInterval interval;
+			if (subList.size() == 2) { // there is just one interval - use it directly
+				int alignment = ((Integer) subList.get(0)).intValue();
+				interval = (LayoutInterval) subList.get(1);
+				if (alignment == LEADING || alignment == TRAILING) {
+					layoutModel.setIntervalAlignment(interval, alignment);
+				}
+			} else { // there are more intervals - group them in a sequence
+				interval = new LayoutInterval(SEQUENTIAL);
+				Iterator itr = subList.iterator();
+				int alignment = ((Integer) itr.next()).intValue();
+				if (alignment == LEADING || alignment == TRAILING) {
+					interval.setAlignment(alignment);
+				}
+				do {
+					LayoutInterval li = (LayoutInterval) itr.next();
+					layoutModel.addInterval(li, interval, -1);
+				} while (itr.hasNext());
+			}
+			layoutModel.addInterval(interval, group, -1);
+		}
+		// add the group to the sequence
+		if (gapLeads) {
+			layoutModel.addInterval(leadingGap, seq, index++);
+		}
+		layoutModel.addInterval(group, seq, index++);
+		if (gapTrails) {
+			layoutModel.addInterval(trailingGap, seq, index);
+		}
+	}
 
-  static boolean isFixedPadding(LayoutInterval interval) {
-    return interval.isEmptySpace()
-        && (interval.getMinimumSize() == NOT_EXPLICITLY_DEFINED
-            || interval.getMinimumSize() == USE_PREFERRED_SIZE)
-        && interval.getPreferredSize() == NOT_EXPLICITLY_DEFINED
-        && (interval.getMaximumSize() == NOT_EXPLICITLY_DEFINED
-            || interval.getMaximumSize() == USE_PREFERRED_SIZE);
-  }
+	static boolean isFixedPadding(LayoutInterval interval) {
+		return interval.isEmptySpace()
+				&& (interval.getMinimumSize() == NOT_EXPLICITLY_DEFINED
+				|| interval.getMinimumSize() == USE_PREFERRED_SIZE)
+				&& interval.getPreferredSize() == NOT_EXPLICITLY_DEFINED
+				&& (interval.getMaximumSize() == NOT_EXPLICITLY_DEFINED
+				|| interval.getMaximumSize() == USE_PREFERRED_SIZE);
+	}
 
-  // -----
-  // requires the layout image up-to-date (all positions known)
-  // requires the group contains some component (at least indirectly)
-  private int optimizeGaps(LayoutInterval group, int dimension, boolean recursive) {
-    assert group.isParallel();
-    // sub-groups first (not using iterator, intervals may change)
-    if (recursive) {
-      for (int i = 0; i < group.getSubIntervalCount(); i++) {
-        LayoutInterval li = group.getSubInterval(i);
-        if (li.isParallel()) {
-          optimizeGaps(li, dimension, recursive);
-        } else if (li.isSequential()) {
-          for (int ii = 0; ii < li.getSubIntervalCount(); ii++) {
-            LayoutInterval llii = li.getSubInterval(ii);
-            if (llii.isParallel()) {
-              int idx = optimizeGaps(llii, dimension, recursive);
-              if (idx >= 0) {
-                ii = idx;
-              }
-            }
-          }
-        }
-      }
-    }
-    if (group.getGroupAlignment() == BASELINE) {
-      return -1;
-    }
-    int nonEmptyCount = LayoutInterval.getCount(group, LayoutRegion.ALL_POINTS, true);
-    if (nonEmptyCount <= 1) {
-      if (group.getParent() == null) {
-        if (group.getSubIntervalCount() > 1) {
-          // [removing container supporting gap]
-          for (int i = group.getSubIntervalCount() - 1; i >= 0; i--) {
-            if (group.getSubInterval(i).isEmptySpace()) {
-              layoutModel.removeInterval(group, i);
-              break;
-            }
-          }
-        } else if (group.getSubIntervalCount() == 0) {
-          // [sort of hack - would be nice the filling gap is ensured somewhere else]
-          propEmptyContainer(group, dimension);
-        }
-      } else { // [dissolving one-member group should not be here]
-        assert nonEmptyCount == 1;
-        assert group.getSubIntervalCount() == 1;
-        LayoutInterval interval = group.getSubInterval(0);
-        //int alignment = interval.getAlignment();
-        layoutModel.removeInterval(interval);
-        layoutModel.setIntervalAlignment(interval, group.getAlignment());
-        LayoutInterval parent = group.getParent();
-        int index = layoutModel.removeInterval(group);
-        if (parent.isSequential() && interval.isSequential()) {
-          // dissolve the sequential group in its parent
-          for (int i = interval.getSubIntervalCount() - 1; i >= 0; i--) {
-            LayoutInterval subInterval = interval.getSubInterval(i);
-            layoutModel.removeInterval(subInterval);
-            layoutModel.addInterval(subInterval, parent, index);
-          }
-          eliminateConsecutiveGaps(parent, 0, dimension);
-        } else {
-          layoutModel.addInterval(interval, parent, index);
-        }
-/*                if (offsetGap != null) {
+	// -----
+	// requires the layout image up-to-date (all positions known)
+	// requires the group contains some component (at least indirectly)
+	private int optimizeGaps(LayoutInterval group, int dimension, boolean recursive) {
+		assert group.isParallel();
+		// sub-groups first (not using iterator, intervals may change)
+		if (recursive) {
+			for (int i = 0; i < group.getSubIntervalCount(); i++) {
+				LayoutInterval li = group.getSubInterval(i);
+				if (li.isParallel()) {
+					optimizeGaps(li, dimension, recursive);
+				} else if (li.isSequential()) {
+					for (int ii = 0; ii < li.getSubIntervalCount(); ii++) {
+						LayoutInterval llii = li.getSubInterval(ii);
+						if (llii.isParallel()) {
+							int idx = optimizeGaps(llii, dimension, recursive);
+							if (idx >= 0) {
+								ii = idx;
+							}
+						}
+					}
+				}
+			}
+		}
+		if (group.getGroupAlignment() == BASELINE) {
+			return -1;
+		}
+		int nonEmptyCount = LayoutInterval.getCount(group, LayoutRegion.ALL_POINTS, true);
+		if (nonEmptyCount <= 1) {
+			if (group.getParent() == null) {
+				if (group.getSubIntervalCount() > 1) {
+					// [removing container supporting gap]
+					for (int i = group.getSubIntervalCount() - 1; i >= 0; i--) {
+						if (group.getSubInterval(i).isEmptySpace()) {
+							layoutModel.removeInterval(group, i);
+							break;
+						}
+					}
+				} else if (group.getSubIntervalCount() == 0) {
+					// [sort of hack - would be nice the filling gap is ensured somewhere else]
+					propEmptyContainer(group, dimension);
+				}
+			} else { // [dissolving one-member group should not be here]
+				assert nonEmptyCount == 1;
+				assert group.getSubIntervalCount() == 1;
+				LayoutInterval interval = group.getSubInterval(0);
+				//int alignment = interval.getAlignment();
+				layoutModel.removeInterval(interval);
+				layoutModel.setIntervalAlignment(interval, group.getAlignment());
+				LayoutInterval parent = group.getParent();
+				int index = layoutModel.removeInterval(group);
+				if (parent.isSequential() && interval.isSequential()) {
+					// dissolve the sequential group in its parent
+					for (int i = interval.getSubIntervalCount() - 1; i >= 0; i--) {
+						LayoutInterval subInterval = interval.getSubInterval(i);
+						layoutModel.removeInterval(subInterval);
+						layoutModel.addInterval(subInterval, parent, index);
+					}
+					eliminateConsecutiveGaps(parent, 0, dimension);
+				} else {
+					layoutModel.addInterval(interval, parent, index);
+				}
+				/*                if (offsetGap != null) {
     // Reinsert/simulate behaviour of the removed offset gap.
     int size;
     if (parent.isSequential()) {
@@ -3200,978 +3200,978 @@ private int optimizeGaps(LayoutInterval group, int dimension, boolean recursive)
     layoutModel.addInterval(offsetGap, parent, index);
     eliminateConsecutiveGaps(parent, 0, dimension);
 } */
-      }
-      return -1;
-    }
-    return operations.optimizeGaps(group, dimension);
-  }
+			}
+			return -1;
+		}
+		return operations.optimizeGaps(group, dimension);
+	}
 
-  // -----
-  /**
-   * Sets interval resizability. Makes it resizing or fixed.
-   *
-   * @param interval
-   *          layout interval whose resizability should be set.
-   * @param resizable
-   *          determines whether the passed interval should be made resizable.
-   */
-  void setIntervalResizing(LayoutInterval interval, boolean resizable) {
-    switchFillAttribute(interval, resizable);
-    layoutModel.setIntervalSize(
-        interval,
-        resizable ? NOT_EXPLICITLY_DEFINED : USE_PREFERRED_SIZE,
-        interval.getPreferredSize(),
-        resizable ? Short.MAX_VALUE : USE_PREFERRED_SIZE);
-  }
+	// -----
+	/**
+	 * Sets interval resizability. Makes it resizing or fixed.
+	 *
+	 * @param interval
+	 *          layout interval whose resizability should be set.
+	 * @param resizable
+	 *          determines whether the passed interval should be made resizable.
+	 */
+	void setIntervalResizing(LayoutInterval interval, boolean resizable) {
+		switchFillAttribute(interval, resizable);
+		layoutModel.setIntervalSize(
+				interval,
+				resizable ? NOT_EXPLICITLY_DEFINED : USE_PREFERRED_SIZE,
+						interval.getPreferredSize(),
+						resizable ? Short.MAX_VALUE : USE_PREFERRED_SIZE);
+	}
 
-  // Changes fill attributes when interval becomes (non-)resizable.
-  private void switchFillAttribute(LayoutInterval interval, boolean resizable) {
-    if (resizable) {
-      if (interval.hasAttribute(LayoutInterval.ATTRIBUTE_FILL)) {
-        layoutModel.changeIntervalAttribute(interval, LayoutInterval.ATTRIBUTE_FORMER_FILL, true);
-        layoutModel.changeIntervalAttribute(interval, LayoutInterval.ATTRIBUTE_FILL, false);
-      }
-    } else {
-      if (interval.hasAttribute(LayoutInterval.ATTRIBUTE_FORMER_FILL)) {
-        layoutModel.changeIntervalAttribute(interval, LayoutInterval.ATTRIBUTE_FORMER_FILL, false);
-        layoutModel.changeIntervalAttribute(interval, LayoutInterval.ATTRIBUTE_FILL, true);
-      }
-    }
-  }
+	// Changes fill attributes when interval becomes (non-)resizable.
+	private void switchFillAttribute(LayoutInterval interval, boolean resizable) {
+		if (resizable) {
+			if (interval.hasAttribute(LayoutInterval.ATTRIBUTE_FILL)) {
+				layoutModel.changeIntervalAttribute(interval, LayoutInterval.ATTRIBUTE_FORMER_FILL, true);
+				layoutModel.changeIntervalAttribute(interval, LayoutInterval.ATTRIBUTE_FILL, false);
+			}
+		} else {
+			if (interval.hasAttribute(LayoutInterval.ATTRIBUTE_FORMER_FILL)) {
+				layoutModel.changeIntervalAttribute(interval, LayoutInterval.ATTRIBUTE_FORMER_FILL, false);
+				layoutModel.changeIntervalAttribute(interval, LayoutInterval.ATTRIBUTE_FILL, true);
+			}
+		}
+	}
 
-  // -----
-  public void setDefaultSize(String compId) {
-    LayoutComponent component = layoutModel.getLayoutComponent(compId);
-    if (component != null) {
-      setDefaultSize(component);
-    }
-  }
+	// -----
+	public void setDefaultSize(String compId) {
+		LayoutComponent component = layoutModel.getLayoutComponent(compId);
+		if (component != null) {
+			setDefaultSize(component);
+		}
+	}
 
-  private void setDefaultSize(LayoutComponent component) {
-    imposeSize = true;
-    if (component.isLayoutContainer()) {
-      for (LayoutComponent comp : component.getSubcomponents()) {
-        if (comp.isLayoutContainer()) {
-          setDefaultSize(comp);
-        }
-      }
-      for (LayoutInterval[] roots : component.getLayoutRoots()) {
-        for (int dim = 0; dim < DIM_COUNT; dim++) {
-          setDefaultSizeInContainer(roots[dim]);
-        }
-      }
-      updateDesignModifications(component);
-    } else {
-      operations.resizeInterval(component.getLayoutInterval(HORIZONTAL), NOT_EXPLICITLY_DEFINED);
-      operations.resizeInterval(component.getLayoutInterval(VERTICAL), NOT_EXPLICITLY_DEFINED);
-    }
-  }
+	private void setDefaultSize(LayoutComponent component) {
+		imposeSize = true;
+		if (component.isLayoutContainer()) {
+			for (LayoutComponent comp : component.getSubcomponents()) {
+				if (comp.isLayoutContainer()) {
+					setDefaultSize(comp);
+				}
+			}
+			for (LayoutInterval[] roots : component.getLayoutRoots()) {
+				for (int dim = 0; dim < DIM_COUNT; dim++) {
+					setDefaultSizeInContainer(roots[dim]);
+				}
+			}
+			updateDesignModifications(component);
+		} else {
+			operations.resizeInterval(component.getLayoutInterval(HORIZONTAL), NOT_EXPLICITLY_DEFINED);
+			operations.resizeInterval(component.getLayoutInterval(VERTICAL), NOT_EXPLICITLY_DEFINED);
+		}
+	}
 
-  private void setDefaultSizeInContainer(LayoutInterval interval) {
-    if (!interval.isGroup()) {
-      if (LayoutInterval.canResize(interval)) {
-        operations.resizeInterval(
-            interval,
-            interval.getMinimumSize() != USE_PREFERRED_SIZE
-                ? interval.getMinimumSize()
-                : NOT_EXPLICITLY_DEFINED);
-        interval.setAttribute(LayoutInterval.ATTR_FORCED_DEFAULT);
-      }
-    } else {
-      for (Iterator it = interval.getSubIntervals(); it.hasNext();) {
-        setDefaultSizeInContainer((LayoutInterval) it.next());
-      }
-    }
-  }
+	private void setDefaultSizeInContainer(LayoutInterval interval) {
+		if (!interval.isGroup()) {
+			if (LayoutInterval.canResize(interval)) {
+				operations.resizeInterval(
+						interval,
+						interval.getMinimumSize() != USE_PREFERRED_SIZE
+						? interval.getMinimumSize()
+								: NOT_EXPLICITLY_DEFINED);
+				interval.setAttribute(LayoutInterval.ATTR_FORCED_DEFAULT);
+			}
+		} else {
+			for (Iterator it = interval.getSubIntervals(); it.hasNext();) {
+				setDefaultSizeInContainer((LayoutInterval) it.next());
+			}
+		}
+	}
 
-  private void updateDesignModifications(LayoutComponent container) {
-    if (imposeSize || optimizeStructure) {
-      // additional update is going to happen after building the layout, so now
-      // just clean the design attrs, container resizing gap will be found later
-      LayoutInterval[] roots = getActiveLayoutRoots(container);
-      for (int dim = 0; dim < DIM_COUNT; dim++) {
-        cleanDesignAttrs(roots[dim]);
-      }
-    } else {
-      LayoutInterval[] roots = getActiveLayoutRoots(container);
-      for (int dim = 0; dim < DIM_COUNT; dim++) {
-        updateDesignModifications(roots[dim], dim);
-      }
-    }
-  }
+	private void updateDesignModifications(LayoutComponent container) {
+		if (imposeSize || optimizeStructure) {
+			// additional update is going to happen after building the layout, so now
+			// just clean the design attrs, container resizing gap will be found later
+			LayoutInterval[] roots = getActiveLayoutRoots(container);
+			for (int dim = 0; dim < DIM_COUNT; dim++) {
+				cleanDesignAttrs(roots[dim]);
+			}
+		} else {
+			LayoutInterval[] roots = getActiveLayoutRoots(container);
+			for (int dim = 0; dim < DIM_COUNT; dim++) {
+				updateDesignModifications(roots[dim], dim);
+			}
+		}
+	}
 
-  private void updateDesignModifications(LayoutInterval root, int dimension) {
-    cleanDesignAttrs(root);
-    findContainerResizingGap(root, dimension);
-  }
+	private void updateDesignModifications(LayoutInterval root, int dimension) {
+		cleanDesignAttrs(root);
+		findContainerResizingGap(root, dimension);
+	}
 
-  private static void cleanDesignAttrs(LayoutInterval group) {
-    group.unsetAttribute(LayoutInterval.DESIGN_ATTRS);
-    for (int i = 0, n = group.getSubIntervalCount(); i < n; i++) {
-      LayoutInterval li = group.getSubInterval(i);
-      if (li.isGroup()) {
-        cleanDesignAttrs(li);
-      } else {
-        li.unsetAttribute(LayoutInterval.DESIGN_ATTRS);
-      }
-    }
-  }
+	private static void cleanDesignAttrs(LayoutInterval group) {
+		group.unsetAttribute(LayoutInterval.DESIGN_ATTRS);
+		for (int i = 0, n = group.getSubIntervalCount(); i < n; i++) {
+			LayoutInterval li = group.getSubInterval(i);
+			if (li.isGroup()) {
+				cleanDesignAttrs(li);
+			} else {
+				li.unsetAttribute(LayoutInterval.DESIGN_ATTRS);
+			}
+		}
+	}
 
-  private void findContainerResizingGap(LayoutInterval rootInterval, int dimension) {
-    if (!LayoutInterval.wantResize(rootInterval) && // See issue 66849
-        LayoutInterval.getIntervalCurrentSize(rootInterval, dimension) != prefSizeOfInterval(
-            rootInterval)) {
-      // Resizing gap would change the layout
-      return;
-    }
-    // find gap for container resizing
-    int gapPosition = TRAILING;
-    LayoutInterval resGap = findContainerResizingGap(rootInterval, dimension, gapPosition);
-    if (resGap == null) {
-      gapPosition = LEADING;
-      resGap = findContainerResizingGap(rootInterval, dimension, gapPosition);
-      if (resGap == null) {
-        gapPosition = -1;
-        resGap = findContainerResizingGap(rootInterval, dimension, gapPosition);
-        if (resGap == null) {
-          return;
-        }
-      }
-    } else if (!LayoutInterval.canResize(resGap)) { // we prefer resizing gaps
-      LayoutInterval gap = findContainerResizingGap(rootInterval, dimension, LEADING);
-      if (gap != null && LayoutInterval.canResize(gap)) {
-        resGap = gap;
-        gapPosition = LEADING;
-      } else {
-        gap = findContainerResizingGap(rootInterval, dimension, -1);
-        if (gap != null && LayoutInterval.canResize(gap)) {
-          resGap = gap;
-          gapPosition = -1;
-        }
-      }
-    }
-    // mark the gap and all surrounding intervals
-    resGap.setAttribute(
-        LayoutInterval.ATTR_DESIGN_CONTAINER_GAP | LayoutInterval.ATTR_DESIGN_RESIZING);
-    LayoutInterval sub = resGap;
-    LayoutInterval parent = resGap.getParent();
-    do {
-      if (parent.isSequential()) {
-        for (Iterator it = parent.getSubIntervals(); it.hasNext();) {
-          LayoutInterval li = (LayoutInterval) it.next();
-          if (li != sub) {
-            li.setAttribute(LayoutInterval.ATTR_DESIGN_SUPPRESSED_RESIZING);
-          }
-        }
-      } else { // parallel parent
-        for (Iterator it = parent.getSubIntervals(); it.hasNext();) {
-          LayoutInterval interval = (LayoutInterval) it.next();
-          if (interval != sub) {
-            assert interval.isSequential();
-            if (interval.isSequential()) {
-              for (int i = 0, n = interval.getSubIntervalCount(); i < n; i++) {
-                LayoutInterval li = interval.getSubInterval(i);
-                if ((i == 0 && gapPosition == LEADING || i + 1 == n && gapPosition == TRAILING)
-                    && canBeContainerResizingGap(li)) { // parallel resizing gap
-                  li.setAttribute(LayoutInterval.ATTR_DESIGN_RESIZING);
-                } else {
-                  li.setAttribute(LayoutInterval.ATTR_DESIGN_SUPPRESSED_RESIZING);
-                }
-              }
-            } else {
-              interval.setAttribute(LayoutInterval.ATTR_DESIGN_SUPPRESSED_RESIZING);
-            }
-          }
-        }
-      }
-      sub = parent;
-      parent = sub.getParent();
-    } while (parent != null);
-  }
+	private void findContainerResizingGap(LayoutInterval rootInterval, int dimension) {
+		if (!LayoutInterval.wantResize(rootInterval) && // See issue 66849
+				LayoutInterval.getIntervalCurrentSize(rootInterval, dimension) != prefSizeOfInterval(
+						rootInterval)) {
+			// Resizing gap would change the layout
+			return;
+		}
+		// find gap for container resizing
+		int gapPosition = TRAILING;
+		LayoutInterval resGap = findContainerResizingGap(rootInterval, dimension, gapPosition);
+		if (resGap == null) {
+			gapPosition = LEADING;
+			resGap = findContainerResizingGap(rootInterval, dimension, gapPosition);
+			if (resGap == null) {
+				gapPosition = -1;
+				resGap = findContainerResizingGap(rootInterval, dimension, gapPosition);
+				if (resGap == null) {
+					return;
+				}
+			}
+		} else if (!LayoutInterval.canResize(resGap)) { // we prefer resizing gaps
+			LayoutInterval gap = findContainerResizingGap(rootInterval, dimension, LEADING);
+			if (gap != null && LayoutInterval.canResize(gap)) {
+				resGap = gap;
+				gapPosition = LEADING;
+			} else {
+				gap = findContainerResizingGap(rootInterval, dimension, -1);
+				if (gap != null && LayoutInterval.canResize(gap)) {
+					resGap = gap;
+					gapPosition = -1;
+				}
+			}
+		}
+		// mark the gap and all surrounding intervals
+		resGap.setAttribute(
+				LayoutInterval.ATTR_DESIGN_CONTAINER_GAP | LayoutInterval.ATTR_DESIGN_RESIZING);
+		LayoutInterval sub = resGap;
+		LayoutInterval parent = resGap.getParent();
+		do {
+			if (parent.isSequential()) {
+				for (Iterator it = parent.getSubIntervals(); it.hasNext();) {
+					LayoutInterval li = (LayoutInterval) it.next();
+					if (li != sub) {
+						li.setAttribute(LayoutInterval.ATTR_DESIGN_SUPPRESSED_RESIZING);
+					}
+				}
+			} else { // parallel parent
+				for (Iterator it = parent.getSubIntervals(); it.hasNext();) {
+					LayoutInterval interval = (LayoutInterval) it.next();
+					if (interval != sub) {
+						assert interval.isSequential();
+						if (interval.isSequential()) {
+							for (int i = 0, n = interval.getSubIntervalCount(); i < n; i++) {
+								LayoutInterval li = interval.getSubInterval(i);
+								if ((i == 0 && gapPosition == LEADING || i + 1 == n && gapPosition == TRAILING)
+										&& canBeContainerResizingGap(li)) { // parallel resizing gap
+									li.setAttribute(LayoutInterval.ATTR_DESIGN_RESIZING);
+								} else {
+									li.setAttribute(LayoutInterval.ATTR_DESIGN_SUPPRESSED_RESIZING);
+								}
+							}
+						} else {
+							interval.setAttribute(LayoutInterval.ATTR_DESIGN_SUPPRESSED_RESIZING);
+						}
+					}
+				}
+			}
+			sub = parent;
+			parent = sub.getParent();
+		} while (parent != null);
+	}
 
-  private static LayoutInterval findContainerResizingGap(LayoutInterval group,
-      int dimension,
-      int alignment) {
-    assert group.isParallel();
-    LayoutInterval theGap = null;
-    int gapSize = Integer.MAX_VALUE;
-    for (Iterator it = group.getSubIntervals(); it.hasNext();) {
-      LayoutInterval seq = (LayoutInterval) it.next();
-      if (!seq.isSequential()) {
-        return null;
-      }
-      int n = seq.getSubIntervalCount();
-      if (alignment == LEADING || alignment == TRAILING) {
-        // [check for the same resizability of the ending gaps]
-        LayoutInterval li = seq.getSubInterval(alignment == LEADING ? 0 : n - 1);
-        LayoutInterval gap;
-        if (canBeContainerResizingGap(li)
-            && (LayoutInterval.wantResize(seq)
-                || LayoutInterval.getEffectiveAlignment(li) == (alignment ^ 1))) { // making this gap resizing won't change the visual appearance of the sequence
-          gap = li;
-        } else if (li.isParallel()) {
-          gap = findContainerResizingGap(li, dimension, alignment);
-        } else {
-          gap = null; // not an ending gap
-        }
-        if (gap == null) {
-          return null;
-        }
-        LayoutInterval neighbor = LayoutInterval.getDirectNeighbor(gap, alignment ^ 1, false);
-        int p1 = neighbor.getCurrentSpace().positions[dimension][alignment];
-        int p2 = group.getCurrentSpace().positions[dimension][alignment];
-        int size = Math.abs(p2 - p1);
-        if (theGap == null || size < gapSize) {
-          theGap = gap;
-          gapSize = size;
-        }
-        //                if (LayoutInterval.canResize(gap) != LayoutInterval.canResize(theGap)) {
-        //                    return null;
-        //                }
-      } else { // somewhere in the middle - can be just one
-        for (int i = n - 2; i > 0; i--) {
-          LayoutInterval li = seq.getSubInterval(i);
-          if (canBeContainerResizingGap(li) && LayoutInterval.canResize(li)) {
-            return group.getSubIntervalCount() == 1 ? li : null;
-          }
-        }
-        return null;
-      }
-    }
-    return theGap;
-  }
+	private static LayoutInterval findContainerResizingGap(LayoutInterval group,
+			int dimension,
+			int alignment) {
+		assert group.isParallel();
+		LayoutInterval theGap = null;
+		int gapSize = Integer.MAX_VALUE;
+		for (Iterator it = group.getSubIntervals(); it.hasNext();) {
+			LayoutInterval seq = (LayoutInterval) it.next();
+			if (!seq.isSequential()) {
+				return null;
+			}
+			int n = seq.getSubIntervalCount();
+			if (alignment == LEADING || alignment == TRAILING) {
+				// [check for the same resizability of the ending gaps]
+				LayoutInterval li = seq.getSubInterval(alignment == LEADING ? 0 : n - 1);
+				LayoutInterval gap;
+				if (canBeContainerResizingGap(li)
+						&& (LayoutInterval.wantResize(seq)
+								|| LayoutInterval.getEffectiveAlignment(li) == (alignment ^ 1))) { // making this gap resizing won't change the visual appearance of the sequence
+					gap = li;
+				} else if (li.isParallel()) {
+					gap = findContainerResizingGap(li, dimension, alignment);
+				} else {
+					gap = null; // not an ending gap
+				}
+				if (gap == null) {
+					return null;
+				}
+				LayoutInterval neighbor = LayoutInterval.getDirectNeighbor(gap, alignment ^ 1, false);
+				int p1 = neighbor.getCurrentSpace().positions[dimension][alignment];
+				int p2 = group.getCurrentSpace().positions[dimension][alignment];
+				int size = Math.abs(p2 - p1);
+				if (theGap == null || size < gapSize) {
+					theGap = gap;
+					gapSize = size;
+				}
+				//                if (LayoutInterval.canResize(gap) != LayoutInterval.canResize(theGap)) {
+				//                    return null;
+				//                }
+			} else { // somewhere in the middle - can be just one
+				for (int i = n - 2; i > 0; i--) {
+					LayoutInterval li = seq.getSubInterval(i);
+					if (canBeContainerResizingGap(li) && LayoutInterval.canResize(li)) {
+						return group.getSubIntervalCount() == 1 ? li : null;
+					}
+				}
+				return null;
+			}
+		}
+		return theGap;
+	}
 
-  private static boolean canBeContainerResizingGap(LayoutInterval li) {
-    return li.isEmptySpace()
-        && (li.getPreferredSize() != NOT_EXPLICITLY_DEFINED
-            || li.getMaximumSize() >= Short.MAX_VALUE);
-  }
+	private static boolean canBeContainerResizingGap(LayoutInterval li) {
+		return li.isEmptySpace()
+				&& (li.getPreferredSize() != NOT_EXPLICITLY_DEFINED
+				|| li.getMaximumSize() >= Short.MAX_VALUE);
+	}
 
-  /**
-   * @param resizingDef
-   *          if provided the size change is caused "internally" (mouse operation driven by
-   *          LayoutDragger)
-   */
-  private boolean imposeCurrentContainerSize(LayoutComponent component,
-      LayoutDragger.SizeDef[] resizingDef,
-      boolean recursive) {
-    assert component.isLayoutContainer();
-    Rectangle interior = visualMapper.getContainerInterior(component.getId());
-    if (interior == null) {
-      return false; // this container is not built
-    }
-    component.setCurrentInterior(interior);
-    if (component.getParent() != null) {
-      Rectangle bounds = visualMapper.getComponentBounds(component.getId());
-      component.setCurrentBounds(
-          bounds,
-          visualMapper.getBaselinePosition(component.getId(), bounds.width, bounds.height));
-    }
-    for (LayoutComponent subComp : component.getSubcomponents()) {
-      Rectangle bounds = visualMapper.getComponentBounds(subComp.getId());
-      subComp.setCurrentBounds(
-          bounds,
-          visualMapper.getBaselinePosition(subComp.getId(), bounds.width, bounds.height));
-      if (subComp.isLayoutContainer()) {
-        if (recursive) {
-          imposeCurrentContainerSize(subComp, null, true);
-        }
-      } else {
-        imposeCurrentComponentSize(subComp);
-      }
-    }
-    Dimension minimum = null;
-    Dimension preferred = null;
-    for (int i = 0; i < DIM_COUNT; i++) {
-      LayoutInterval outer = component.getLayoutInterval(i);
-      int currentSize = outer.getCurrentSpace().size(i);
-      LayoutInterval defaultRoot = getActiveLayoutRoots(component)[i];
-      for (LayoutInterval[] roots : component.getLayoutRoots()) {
-        LayoutInterval root = roots[i];
-        boolean empty = root.getSubIntervalCount() == 0;
-        if (root == defaultRoot) {
-          if (empty) { // empty root group - add a filling gap
-            propEmptyContainer(root, i);
-          } else if (resizingDef != null && resizingDef[i] != null) {
-            // not empty, there can be a resizing gap inside the container
-            LayoutInterval resGap = resizingDef[i].getResizingGap();
-            if (resGap != null) { // this is it (special gap for design time resizing)
-              int size = resizingDef[i].getResizingGapSize(currentSize);
-              if (size == 0) { // remove the gap
-                LayoutInterval gapParent = resGap.getParent();
-                assert gapParent.isSequential();
-                int index = layoutModel.removeInterval(resGap);
-                assert index == 0 || index == gapParent.getSubIntervalCount();
-                if (gapParent.getSubIntervalCount() == 1) {
-                  LayoutInterval last = layoutModel.removeInterval(gapParent, 0);
-                  operations.addContent(
-                      last,
-                      gapParent.getParent(),
-                      layoutModel.removeInterval(gapParent));
-                } else if (LayoutInterval.canResize(resGap) && !LayoutInterval.wantResize(root)) {
-                  // don't lose resizability of the layout
-                  index = index == 0 ? gapParent.getSubIntervalCount() - 1 : 0;
-                  LayoutInterval otherGap = gapParent.getSubInterval(index);
-                  if (otherGap.isEmptySpace()) { // the gap should be resizing
-                    layoutModel.setIntervalSize(
-                        otherGap,
-                        NOT_EXPLICITLY_DEFINED,
-                        otherGap.getPreferredSize(),
-                        Short.MAX_VALUE);
-                  }
-                }
-              } else { // set gap size
-                operations.resizeInterval(resGap, size);
-                if (size == NOT_EXPLICITLY_DEFINED && LayoutInterval.canResize(resGap)) {
-                  // hack: eliminate unnecessary resizing of default padding gap
-                  resGap.setMaximumSize(USE_PREFERRED_SIZE);
-                  boolean layoutResizing = LayoutInterval.wantResize(root);
-                  resGap.setMaximumSize(Short.MAX_VALUE);
-                  if (layoutResizing) { // the gap should be fixed
-                    layoutModel.setIntervalSize(
-                        resGap,
-                        NOT_EXPLICITLY_DEFINED,
-                        NOT_EXPLICITLY_DEFINED,
-                        USE_PREFERRED_SIZE);
-                  }
-                }
-              }
-            } else if (!LayoutInterval.wantResize(root)) {
-              // no resizing gap in fixed layout of resizing container
-              int minLayoutSize = computeMinimumDesignSize(root);
-              int growth = root.getCurrentSpace().size(i) - minLayoutSize;
-              if (growth > 0) { // add new resizing gap at the end to hold the new extra space
-                LayoutInterval endGap = new LayoutInterval(SINGLE);
-                endGap.setSizes(NOT_EXPLICITLY_DEFINED, growth, Short.MAX_VALUE);
-                operations.insertGap(endGap, root, minLayoutSize, i, TRAILING);
-              }
-            }
-          }
-        }
-        if (!empty) {
-          updateLayoutStructure(root, i, true);
-        }
-      }
-      if (component.getParent() != null) {
-        if (minimum == null) {
-          minimum = visualMapper.getComponentMinimumSize(component.getId());
-          preferred = visualMapper.getComponentPreferredSize(component.getId());
-        }
-        int min = i == HORIZONTAL ? minimum.width : minimum.height;
-        boolean externalSize = visualMapper.hasExplicitPreferredSize(component.getId())
-            && currentSize != (i == HORIZONTAL ? preferred.width : preferred.height)
-            || currentSize < min
-            || currentSize > min && !LayoutInterval.wantResize(defaultRoot);
-        operations.resizeInterval(outer, externalSize ? currentSize : NOT_EXPLICITLY_DEFINED);
-      }
-    }
-    return true;
-  }
+	/**
+	 * @param resizingDef
+	 *          if provided the size change is caused "internally" (mouse operation driven by
+	 *          LayoutDragger)
+	 */
+	private boolean imposeCurrentContainerSize(LayoutComponent component,
+			LayoutDragger.SizeDef[] resizingDef,
+			boolean recursive) {
+		assert component.isLayoutContainer();
+		Rectangle interior = visualMapper.getContainerInterior(component.getId());
+		if (interior == null) {
+			return false; // this container is not built
+		}
+		component.setCurrentInterior(interior);
+		if (component.getParent() != null) {
+			Rectangle bounds = visualMapper.getComponentBounds(component.getId());
+			component.setCurrentBounds(
+					bounds,
+					visualMapper.getBaselinePosition(component.getId(), bounds.width, bounds.height));
+		}
+		for (LayoutComponent subComp : component.getSubcomponents()) {
+			Rectangle bounds = visualMapper.getComponentBounds(subComp.getId());
+			subComp.setCurrentBounds(
+					bounds,
+					visualMapper.getBaselinePosition(subComp.getId(), bounds.width, bounds.height));
+			if (subComp.isLayoutContainer()) {
+				if (recursive) {
+					imposeCurrentContainerSize(subComp, null, true);
+				}
+			} else {
+				imposeCurrentComponentSize(subComp);
+			}
+		}
+		Dimension minimum = null;
+		Dimension preferred = null;
+		for (int i = 0; i < DIM_COUNT; i++) {
+			LayoutInterval outer = component.getLayoutInterval(i);
+			int currentSize = outer.getCurrentSpace().size(i);
+			LayoutInterval defaultRoot = getActiveLayoutRoots(component)[i];
+			for (LayoutInterval[] roots : component.getLayoutRoots()) {
+				LayoutInterval root = roots[i];
+				boolean empty = root.getSubIntervalCount() == 0;
+				if (root == defaultRoot) {
+					if (empty) { // empty root group - add a filling gap
+						propEmptyContainer(root, i);
+					} else if (resizingDef != null && resizingDef[i] != null) {
+						// not empty, there can be a resizing gap inside the container
+						LayoutInterval resGap = resizingDef[i].getResizingGap();
+						if (resGap != null) { // this is it (special gap for design time resizing)
+							int size = resizingDef[i].getResizingGapSize(currentSize);
+							if (size == 0) { // remove the gap
+								LayoutInterval gapParent = resGap.getParent();
+								assert gapParent.isSequential();
+								int index = layoutModel.removeInterval(resGap);
+								assert index == 0 || index == gapParent.getSubIntervalCount();
+								if (gapParent.getSubIntervalCount() == 1) {
+									LayoutInterval last = layoutModel.removeInterval(gapParent, 0);
+									operations.addContent(
+											last,
+											gapParent.getParent(),
+											layoutModel.removeInterval(gapParent));
+								} else if (LayoutInterval.canResize(resGap) && !LayoutInterval.wantResize(root)) {
+									// don't lose resizability of the layout
+									index = index == 0 ? gapParent.getSubIntervalCount() - 1 : 0;
+									LayoutInterval otherGap = gapParent.getSubInterval(index);
+									if (otherGap.isEmptySpace()) { // the gap should be resizing
+										layoutModel.setIntervalSize(
+												otherGap,
+												NOT_EXPLICITLY_DEFINED,
+												otherGap.getPreferredSize(),
+												Short.MAX_VALUE);
+									}
+								}
+							} else { // set gap size
+								operations.resizeInterval(resGap, size);
+								if (size == NOT_EXPLICITLY_DEFINED && LayoutInterval.canResize(resGap)) {
+									// hack: eliminate unnecessary resizing of default padding gap
+									resGap.setMaximumSize(USE_PREFERRED_SIZE);
+									boolean layoutResizing = LayoutInterval.wantResize(root);
+									resGap.setMaximumSize(Short.MAX_VALUE);
+									if (layoutResizing) { // the gap should be fixed
+										layoutModel.setIntervalSize(
+												resGap,
+												NOT_EXPLICITLY_DEFINED,
+												NOT_EXPLICITLY_DEFINED,
+												USE_PREFERRED_SIZE);
+									}
+								}
+							}
+						} else if (!LayoutInterval.wantResize(root)) {
+							// no resizing gap in fixed layout of resizing container
+							int minLayoutSize = computeMinimumDesignSize(root);
+							int growth = root.getCurrentSpace().size(i) - minLayoutSize;
+							if (growth > 0) { // add new resizing gap at the end to hold the new extra space
+								LayoutInterval endGap = new LayoutInterval(SINGLE);
+								endGap.setSizes(NOT_EXPLICITLY_DEFINED, growth, Short.MAX_VALUE);
+								operations.insertGap(endGap, root, minLayoutSize, i, TRAILING);
+							}
+						}
+					}
+				}
+				if (!empty) {
+					updateLayoutStructure(root, i, true);
+				}
+			}
+			if (component.getParent() != null) {
+				if (minimum == null) {
+					minimum = visualMapper.getComponentMinimumSize(component.getId());
+					preferred = visualMapper.getComponentPreferredSize(component.getId());
+				}
+				int min = i == HORIZONTAL ? minimum.width : minimum.height;
+				boolean externalSize = visualMapper.hasExplicitPreferredSize(component.getId())
+						&& currentSize != (i == HORIZONTAL ? preferred.width : preferred.height)
+						|| currentSize < min
+						|| currentSize > min && !LayoutInterval.wantResize(defaultRoot);
+						operations.resizeInterval(outer, externalSize ? currentSize : NOT_EXPLICITLY_DEFINED);
+			}
+		}
+		return true;
+	}
 
-  private void imposeCurrentComponentSize(LayoutComponent component) {
-    Dimension preferred = visualMapper.getComponentPreferredSize(component.getId());
-    for (int i = 0; i < DIM_COUNT; i++) {
-      LayoutInterval li = component.getLayoutInterval(i);
-      int defPref = li.getPreferredSize();
-      if (!li.hasAttribute(LayoutInterval.ATTR_FORCED_DEFAULT)
-          && LayoutInterval.wantResizeInLayout(li)
-          && defPref != 0) { // == 0 subordinate component (filling)
-        // resizing component with size-defining role in parent
-        int current = li.getCurrentSpace().size(i);
-        int pref = i == HORIZONTAL ? preferred.width : preferred.height;
-        if (defPref == NOT_EXPLICITLY_DEFINED) {
-          defPref = pref;
-        }
-        if (defPref != current) {
-          operations.resizeInterval(li, current != pref ? current : NOT_EXPLICITLY_DEFINED);
-        }
-      }
-      li.unsetAttribute(LayoutInterval.ATTR_FORCED_DEFAULT);
-    }
-  }
+	private void imposeCurrentComponentSize(LayoutComponent component) {
+		Dimension preferred = visualMapper.getComponentPreferredSize(component.getId());
+		for (int i = 0; i < DIM_COUNT; i++) {
+			LayoutInterval li = component.getLayoutInterval(i);
+			int defPref = li.getPreferredSize();
+			if (!li.hasAttribute(LayoutInterval.ATTR_FORCED_DEFAULT)
+					&& LayoutInterval.wantResizeInLayout(li)
+					&& defPref != 0) { // == 0 subordinate component (filling)
+				// resizing component with size-defining role in parent
+				int current = li.getCurrentSpace().size(i);
+				int pref = i == HORIZONTAL ? preferred.width : preferred.height;
+				if (defPref == NOT_EXPLICITLY_DEFINED) {
+					defPref = pref;
+				}
+				if (defPref != current) {
+					operations.resizeInterval(li, current != pref ? current : NOT_EXPLICITLY_DEFINED);
+				}
+			}
+			li.unsetAttribute(LayoutInterval.ATTR_FORCED_DEFAULT);
+		}
+	}
 
-  private void imposeCurrentGapSize(LayoutInterval gap, int currentSize, int dimension) {
-    int pad = -1;
-    int min = gap.getMinimumSize();
-    int pref = gap.getPreferredSize();
-    if (pref == NOT_EXPLICITLY_DEFINED) {
-      if (!LayoutInterval.wantResizeInLayout(gap)) {
-        return; // don't change default gap if not resizing
-      }
-      pad = LayoutUtils.getSizeOfDefaultGap(gap, visualMapper);
-      pref = pad;
-    } else if (pref < 0) { // autocorrect invalid pref size (#159536)
-      pad = LayoutUtils.getSizeOfDefaultGap(gap, visualMapper);
-      pref = pad;
-    }
-    if (currentSize != pref) { // [check for canResize?]
-      if (min == NOT_EXPLICITLY_DEFINED) {
-        if (pad < 0) {
-          pad = LayoutUtils.getSizeOfDefaultGap(gap, visualMapper);
-        }
-        min = pad;
-      } else if (min == USE_PREFERRED_SIZE) {
-        min = pref;
-      }
-      if (currentSize < min) {
-        currentSize = min;
-      }
-      operations.resizeInterval(gap, currentSize == pad ? NOT_EXPLICITLY_DEFINED : currentSize);
-    }
-  }
+	private void imposeCurrentGapSize(LayoutInterval gap, int currentSize, int dimension) {
+		int pad = -1;
+		int min = gap.getMinimumSize();
+		int pref = gap.getPreferredSize();
+		if (pref == NOT_EXPLICITLY_DEFINED) {
+			if (!LayoutInterval.wantResizeInLayout(gap)) {
+				return; // don't change default gap if not resizing
+			}
+			pad = LayoutUtils.getSizeOfDefaultGap(gap, visualMapper);
+			pref = pad;
+		} else if (pref < 0) { // autocorrect invalid pref size (#159536)
+			pad = LayoutUtils.getSizeOfDefaultGap(gap, visualMapper);
+			pref = pad;
+		}
+		if (currentSize != pref) { // [check for canResize?]
+			if (min == NOT_EXPLICITLY_DEFINED) {
+				if (pad < 0) {
+					pad = LayoutUtils.getSizeOfDefaultGap(gap, visualMapper);
+				}
+				min = pad;
+			} else if (min == USE_PREFERRED_SIZE) {
+				min = pref;
+			}
+			if (currentSize < min) {
+				currentSize = min;
+			}
+			operations.resizeInterval(gap, currentSize == pad ? NOT_EXPLICITLY_DEFINED : currentSize);
+		}
+	}
 
-  private void propEmptyContainer(LayoutInterval root, int dimension) {
-    assert root.getParent() == null && root.getSubIntervalCount() == 0;
-    LayoutInterval gap = new LayoutInterval(SINGLE);
-    gap.setSizes(0, root.getCurrentSpace().size(dimension), Short.MAX_VALUE);
-    layoutModel.addInterval(gap, root, 0);
-  }
+	private void propEmptyContainer(LayoutInterval root, int dimension) {
+		assert root.getParent() == null && root.getSubIntervalCount() == 0;
+		LayoutInterval gap = new LayoutInterval(SINGLE);
+		gap.setSizes(0, root.getCurrentSpace().size(dimension), Short.MAX_VALUE);
+		layoutModel.addInterval(gap, root, 0);
+	}
 
-  private int computeMinimumDesignSize(LayoutInterval interval) {
-    int size = 0;
-    if (interval.isSingle()) {
-      int min = interval.getMinimumSize(true);
-      size = min == USE_PREFERRED_SIZE ? interval.getPreferredSize(true) : min;
-      if (size == NOT_EXPLICITLY_DEFINED) {
-        if (interval.isComponent()) {
-          LayoutComponent comp = interval.getComponent();
-          Dimension dim = min == USE_PREFERRED_SIZE
-              ? visualMapper.getComponentPreferredSize(comp.getId())
-              : visualMapper.getComponentMinimumSize(comp.getId());
-          size = interval == comp.getLayoutInterval(HORIZONTAL) ? dim.width : dim.height;
-        } else { // gap
-          size = LayoutUtils.getSizeOfDefaultGap(interval, visualMapper);
-        }
-      }
-    } else if (interval.isSequential()) {
-      for (int i = 0, n = interval.getSubIntervalCount(); i < n; i++) {
-        size += computeMinimumDesignSize(interval.getSubInterval(i));
-      }
-    } else { // parallel group
-      for (int i = 0, n = interval.getSubIntervalCount(); i < n; i++) {
-        size = Math.max(size, computeMinimumDesignSize(interval.getSubInterval(i)));
-      }
-    }
-    return size;
-  }
+	private int computeMinimumDesignSize(LayoutInterval interval) {
+		int size = 0;
+		if (interval.isSingle()) {
+			int min = interval.getMinimumSize(true);
+			size = min == USE_PREFERRED_SIZE ? interval.getPreferredSize(true) : min;
+			if (size == NOT_EXPLICITLY_DEFINED) {
+				if (interval.isComponent()) {
+					LayoutComponent comp = interval.getComponent();
+					Dimension dim = min == USE_PREFERRED_SIZE
+							? visualMapper.getComponentPreferredSize(comp.getId())
+									: visualMapper.getComponentMinimumSize(comp.getId());
+					size = interval == comp.getLayoutInterval(HORIZONTAL) ? dim.width : dim.height;
+				} else { // gap
+					size = LayoutUtils.getSizeOfDefaultGap(interval, visualMapper);
+				}
+			}
+		} else if (interval.isSequential()) {
+			for (int i = 0, n = interval.getSubIntervalCount(); i < n; i++) {
+				size += computeMinimumDesignSize(interval.getSubInterval(i));
+			}
+		} else { // parallel group
+			for (int i = 0, n = interval.getSubIntervalCount(); i < n; i++) {
+				size = Math.max(size, computeMinimumDesignSize(interval.getSubInterval(i)));
+			}
+		}
+		return size;
+	}
 
-  // -----
-  // recursive
-  private void intervalRemoved(LayoutInterval parent,
-      int index,
-      boolean primary,
-      boolean wasResizing,
-      int dimension) {
-    if (parent.isSequential()) {
-      LayoutInterval leadingGap;
-      LayoutInterval leadingNeighbor;
-      if (index > 0) {
-        LayoutInterval li = parent.getSubInterval(index - 1);
-        if (li.isEmptySpace()) {
-          leadingGap = li;
-          layoutModel.removeInterval(li);
-          index--;
-          leadingNeighbor = index > 0 ? parent.getSubInterval(index - 1) : null;
-        } else {
-          leadingGap = null;
-          leadingNeighbor = li;
-        }
-      } else {
-        leadingGap = null;
-        leadingNeighbor = null;
-      }
-      LayoutInterval trailingGap;
-      LayoutInterval trailingNeighbor;
-      if (index < parent.getSubIntervalCount()) {
-        LayoutInterval li = parent.getSubInterval(index);
-        if (li.isEmptySpace()) {
-          trailingGap = li;
-          layoutModel.removeInterval(li);
-          trailingNeighbor =
-              index < parent.getSubIntervalCount() ? parent.getSubInterval(index) : null;
-        } else {
-          trailingGap = null;
-          trailingNeighbor = li;
-        }
-      } else {
-        trailingGap = null;
-        trailingNeighbor = null;
-      }
-      if (!wasResizing
-          && (leadingGap != null && LayoutInterval.canResize(leadingGap)
-              || trailingGap != null && LayoutInterval.canResize(trailingGap))) {
-        wasResizing = true;
-      }
-      LayoutInterval superParent = parent.getParent();
-      // [check for last interval (count==1), if parallel superParent try to re-add the interval]
-      if (parent.getSubIntervalCount() == 0) { // nothing remained
-        int idx = layoutModel.removeInterval(parent);
-        if (superParent.getParent() != null) {
-          intervalRemoved(superParent, idx, false, wasResizing, dimension);
-        }
-        //                else if (superParent.getSubIntervalCount() == 0) { // empty root group - add a filling gap
-        //                    propEmptyContainer(superParent, dimension);
-        //                }
-      } else { // the sequence remains
-        boolean restResizing = LayoutInterval.contentWantResize(parent);
-        if (wasResizing && !restResizing) {
-          if (leadingNeighbor == null && parent.getAlignment() == LEADING) {
-            layoutModel.setIntervalAlignment(parent, TRAILING);
-          }
-          if (trailingNeighbor == null && parent.getAlignment() == TRAILING) {
-            layoutModel.setIntervalAlignment(parent, LEADING);
-          }
-        }
-        int cutSize = LayoutRegion.distance(
-            (leadingNeighbor != null ? leadingNeighbor : parent).getCurrentSpace(),
-            (trailingNeighbor != null ? trailingNeighbor : parent).getCurrentSpace(),
-            dimension,
-            leadingNeighbor != null ? TRAILING : LEADING,
-            trailingNeighbor != null ? LEADING : TRAILING);
-        if (leadingNeighbor != null && trailingNeighbor != null // inside a sequence
-            || superParent.getParent() == null // in root parallel group
-            || leadingNeighbor != null
-                && LayoutInterval.getEffectiveAlignment(leadingNeighbor, TRAILING) == TRAILING
-            || trailingNeighbor != null
-                && LayoutInterval.getEffectiveAlignment(trailingNeighbor, LEADING) == LEADING) { // create a placeholder gap
-          int min, max;
-          if (wasResizing && !restResizing) { // the gap should be resizing
-            min = NOT_EXPLICITLY_DEFINED;
-            max = Short.MAX_VALUE;
-          } else {
-            min = max = USE_PREFERRED_SIZE;
-          }
-          LayoutInterval gap = new LayoutInterval(SINGLE);
-          gap.setSizes(min, cutSize, max);
-          layoutModel.addInterval(gap, parent, index);
-        } else { // this is an "open" end - compensate the size in the parent
-          if (parent.getSubIntervalCount() == 1) {
-            LayoutInterval last = layoutModel.removeInterval(parent, 0);
-            layoutModel.addInterval(last, superParent, layoutModel.removeInterval(parent));
-            layoutModel.setIntervalAlignment(last, parent.getRawAlignment());
-          } else { // adjust current space of the parent sequence
-                   // (border interval at the open end removed)
-            int l = (trailingNeighbor != null && leadingNeighbor == null
-                ? trailingNeighbor
-                : parent).getCurrentSpace().positions[dimension][LEADING];
-            int t = (leadingNeighbor != null && trailingNeighbor == null
-                ? leadingNeighbor
-                : parent).getCurrentSpace().positions[dimension][TRAILING];
-            parent.getCurrentSpace().set(dimension, l, t);
-          }
-          maintainSize(
-              superParent,
-              wasResizing || restResizing,
-              dimension,
-              parent,
-              parent.getCurrentSpace().size(dimension) - cutSize);
-        }
-        if (wasResizing && !restResizing) {
-          operations.enableGroupResizing(superParent); // in case it was disabled
-        }
-      }
-    } else {
-      if (parent.getParent() == null) {
-        return; // Component placed directly in the root interval
-      }
-      assert parent.isParallel() && parent.getSubIntervalCount() > 0;
-      int groupAlign = parent.getGroupAlignment();
-      if (primary) {
-        if (groupAlign == LEADING || groupAlign == TRAILING) {
-          maintainSize(parent, wasResizing, dimension, null, 0);
-        } else {
-          preventParallelCollapse(parent, dimension);
-        }
-      }
-      if (parent.getSubIntervalCount() == 1 && parent.getParent() != null) { // last interval in parallel group
-        // cancel the group and move the interval up
-        LayoutInterval remaining = parent.getSubInterval(0);
-        layoutModel.removeInterval(remaining);
-        layoutModel.setIntervalAlignment(remaining, parent.getAlignment());
-        if (LayoutInterval.wantResize(remaining) && !LayoutInterval.canResize(parent)) {
-          // resizing interval in fixed group - make it fixed
-          if (remaining.isGroup()) {
-            operations.suppressGroupResizing(remaining);
-          } else {
-            layoutModel.setIntervalSize(
-                remaining,
-                USE_PREFERRED_SIZE,
-                remaining.getPreferredSize(),
-                USE_PREFERRED_SIZE);
-          }
-        }
-        LayoutInterval superParent = parent.getParent();
-        int i = layoutModel.removeInterval(parent);
-        operations.addContent(remaining, superParent, i);
-        if (remaining.isSequential() && superParent.isSequential()) {
-          // eliminate possible directly consecutive gaps
-          // [this could be done by the addContent method directly]
-          eliminateConsecutiveGaps(superParent, i, dimension);
-        }
-        // [TODO if parallel superParent try to re-add the interval]
-      } else if (wasResizing && !LayoutInterval.contentWantResize(parent)) {
-        operations.enableGroupResizing(parent);
-      }
-    }
-  }
+	// -----
+	// recursive
+	private void intervalRemoved(LayoutInterval parent,
+			int index,
+			boolean primary,
+			boolean wasResizing,
+			int dimension) {
+		if (parent.isSequential()) {
+			LayoutInterval leadingGap;
+			LayoutInterval leadingNeighbor;
+			if (index > 0) {
+				LayoutInterval li = parent.getSubInterval(index - 1);
+				if (li.isEmptySpace()) {
+					leadingGap = li;
+					layoutModel.removeInterval(li);
+					index--;
+					leadingNeighbor = index > 0 ? parent.getSubInterval(index - 1) : null;
+				} else {
+					leadingGap = null;
+					leadingNeighbor = li;
+				}
+			} else {
+				leadingGap = null;
+				leadingNeighbor = null;
+			}
+			LayoutInterval trailingGap;
+			LayoutInterval trailingNeighbor;
+			if (index < parent.getSubIntervalCount()) {
+				LayoutInterval li = parent.getSubInterval(index);
+				if (li.isEmptySpace()) {
+					trailingGap = li;
+					layoutModel.removeInterval(li);
+					trailingNeighbor =
+							index < parent.getSubIntervalCount() ? parent.getSubInterval(index) : null;
+				} else {
+					trailingGap = null;
+					trailingNeighbor = li;
+				}
+			} else {
+				trailingGap = null;
+				trailingNeighbor = null;
+			}
+			if (!wasResizing
+					&& (leadingGap != null && LayoutInterval.canResize(leadingGap)
+					|| trailingGap != null && LayoutInterval.canResize(trailingGap))) {
+				wasResizing = true;
+			}
+			LayoutInterval superParent = parent.getParent();
+			// [check for last interval (count==1), if parallel superParent try to re-add the interval]
+			if (parent.getSubIntervalCount() == 0) { // nothing remained
+				int idx = layoutModel.removeInterval(parent);
+				if (superParent.getParent() != null) {
+					intervalRemoved(superParent, idx, false, wasResizing, dimension);
+				}
+				//                else if (superParent.getSubIntervalCount() == 0) { // empty root group - add a filling gap
+				//                    propEmptyContainer(superParent, dimension);
+				//                }
+			} else { // the sequence remains
+				boolean restResizing = LayoutInterval.contentWantResize(parent);
+				if (wasResizing && !restResizing) {
+					if (leadingNeighbor == null && parent.getAlignment() == LEADING) {
+						layoutModel.setIntervalAlignment(parent, TRAILING);
+					}
+					if (trailingNeighbor == null && parent.getAlignment() == TRAILING) {
+						layoutModel.setIntervalAlignment(parent, LEADING);
+					}
+				}
+				int cutSize = LayoutRegion.distance(
+						(leadingNeighbor != null ? leadingNeighbor : parent).getCurrentSpace(),
+						(trailingNeighbor != null ? trailingNeighbor : parent).getCurrentSpace(),
+						dimension,
+						leadingNeighbor != null ? TRAILING : LEADING,
+								trailingNeighbor != null ? LEADING : TRAILING);
+				if (leadingNeighbor != null && trailingNeighbor != null // inside a sequence
+						|| superParent.getParent() == null // in root parallel group
+						|| leadingNeighbor != null
+						&& LayoutInterval.getEffectiveAlignment(leadingNeighbor, TRAILING) == TRAILING
+						|| trailingNeighbor != null
+						&& LayoutInterval.getEffectiveAlignment(trailingNeighbor, LEADING) == LEADING) { // create a placeholder gap
+					int min, max;
+					if (wasResizing && !restResizing) { // the gap should be resizing
+						min = NOT_EXPLICITLY_DEFINED;
+						max = Short.MAX_VALUE;
+					} else {
+						min = max = USE_PREFERRED_SIZE;
+					}
+					LayoutInterval gap = new LayoutInterval(SINGLE);
+					gap.setSizes(min, cutSize, max);
+					layoutModel.addInterval(gap, parent, index);
+				} else { // this is an "open" end - compensate the size in the parent
+					if (parent.getSubIntervalCount() == 1) {
+						LayoutInterval last = layoutModel.removeInterval(parent, 0);
+						layoutModel.addInterval(last, superParent, layoutModel.removeInterval(parent));
+						layoutModel.setIntervalAlignment(last, parent.getRawAlignment());
+					} else { // adjust current space of the parent sequence
+						// (border interval at the open end removed)
+						int l = (trailingNeighbor != null && leadingNeighbor == null
+								? trailingNeighbor
+										: parent).getCurrentSpace().positions[dimension][LEADING];
+						int t = (leadingNeighbor != null && trailingNeighbor == null
+								? leadingNeighbor
+										: parent).getCurrentSpace().positions[dimension][TRAILING];
+						parent.getCurrentSpace().set(dimension, l, t);
+					}
+					maintainSize(
+							superParent,
+							wasResizing || restResizing,
+							dimension,
+							parent,
+							parent.getCurrentSpace().size(dimension) - cutSize);
+				}
+				if (wasResizing && !restResizing) {
+					operations.enableGroupResizing(superParent); // in case it was disabled
+				}
+			}
+		} else {
+			if (parent.getParent() == null) {
+				return; // Component placed directly in the root interval
+			}
+			assert parent.isParallel() && parent.getSubIntervalCount() > 0;
+			int groupAlign = parent.getGroupAlignment();
+			if (primary) {
+				if (groupAlign == LEADING || groupAlign == TRAILING) {
+					maintainSize(parent, wasResizing, dimension, null, 0);
+				} else {
+					preventParallelCollapse(parent, dimension);
+				}
+			}
+			if (parent.getSubIntervalCount() == 1 && parent.getParent() != null) { // last interval in parallel group
+				// cancel the group and move the interval up
+				LayoutInterval remaining = parent.getSubInterval(0);
+				layoutModel.removeInterval(remaining);
+				layoutModel.setIntervalAlignment(remaining, parent.getAlignment());
+				if (LayoutInterval.wantResize(remaining) && !LayoutInterval.canResize(parent)) {
+					// resizing interval in fixed group - make it fixed
+					if (remaining.isGroup()) {
+						operations.suppressGroupResizing(remaining);
+					} else {
+						layoutModel.setIntervalSize(
+								remaining,
+								USE_PREFERRED_SIZE,
+								remaining.getPreferredSize(),
+								USE_PREFERRED_SIZE);
+					}
+				}
+				LayoutInterval superParent = parent.getParent();
+				int i = layoutModel.removeInterval(parent);
+				operations.addContent(remaining, superParent, i);
+				if (remaining.isSequential() && superParent.isSequential()) {
+					// eliminate possible directly consecutive gaps
+					// [this could be done by the addContent method directly]
+					eliminateConsecutiveGaps(superParent, i, dimension);
+				}
+				// [TODO if parallel superParent try to re-add the interval]
+			} else if (wasResizing && !LayoutInterval.contentWantResize(parent)) {
+				operations.enableGroupResizing(parent);
+			}
+		}
+	}
 
-  private void eliminateConsecutiveGaps(LayoutInterval group, int index, int dimension) {
-    assert group.isSequential();
-    if (index > 0) {
-      index--;
-    }
-    while (index < group.getSubIntervalCount() - 1) {
-      LayoutInterval current = group.getSubInterval(index);
-      LayoutInterval next = group.getSubInterval(index + 1);
-      if (current.isEmptySpace() && next.isEmptySpace()) {
-        int la;
-        LayoutRegion lr;
-        if (index > 0) {
-          la = TRAILING;
-          lr = group.getSubInterval(index - 1).getCurrentSpace();
-        } else {
-          la = LEADING;
-          lr = group.getCurrentSpace();
-        }
-        int ta;
-        LayoutRegion tr;
-        if (index + 2 < group.getSubIntervalCount()) {
-          ta = LEADING;
-          tr = group.getSubInterval(index + 2).getCurrentSpace();
-        } else {
-          ta = TRAILING;
-          tr = group.getCurrentSpace();
-        }
-        operations.eatGap(current, next, LayoutRegion.distance(lr, tr, dimension, la, ta));
-      } else {
-        index++;
-      }
-    }
-  }
+	private void eliminateConsecutiveGaps(LayoutInterval group, int index, int dimension) {
+		assert group.isSequential();
+		if (index > 0) {
+			index--;
+		}
+		while (index < group.getSubIntervalCount() - 1) {
+			LayoutInterval current = group.getSubInterval(index);
+			LayoutInterval next = group.getSubInterval(index + 1);
+			if (current.isEmptySpace() && next.isEmptySpace()) {
+				int la;
+				LayoutRegion lr;
+				if (index > 0) {
+					la = TRAILING;
+					lr = group.getSubInterval(index - 1).getCurrentSpace();
+				} else {
+					la = LEADING;
+					lr = group.getCurrentSpace();
+				}
+				int ta;
+				LayoutRegion tr;
+				if (index + 2 < group.getSubIntervalCount()) {
+					ta = LEADING;
+					tr = group.getSubInterval(index + 2).getCurrentSpace();
+				} else {
+					ta = TRAILING;
+					tr = group.getCurrentSpace();
+				}
+				operations.eatGap(current, next, LayoutRegion.distance(lr, tr, dimension, la, ta));
+			} else {
+				index++;
+			}
+		}
+	}
 
-  private void maintainSize(LayoutInterval group,
-      boolean wasResizing,
-      int dimension,
-      LayoutInterval excluded,
-      int excludedSize) {
-    assert group.isParallel(); // [also not used for center or baseline groups]
-    int groupSize = group.getCurrentSpace().size(dimension);
-    int[] groupPos = group.getCurrentSpace().positions[dimension];
-    boolean leadAlign = false;
-    boolean trailAlign = false;
-    int leadCompPos = Integer.MAX_VALUE;
-    int trailCompPos = Integer.MIN_VALUE;
-    int subSize = Integer.MIN_VALUE;
-    Iterator it = group.getSubIntervals();
-    while (it.hasNext()) {
-      LayoutInterval li = (LayoutInterval) it.next();
-      int align = li.getAlignment();
-      int l, t; // leading and trailing position of first and last component
-      if (li != excluded) {
-        int size = li.getCurrentSpace().size(dimension);
-        if (size >= groupSize) {
-          return;
-        }
-        if (size > subSize) {
-          subSize = size;
-        }
-        l = LayoutUtils.getOutermostComponent(
-            li,
-            dimension,
-            LEADING).getCurrentSpace().positions[dimension][LEADING];
-        t = LayoutUtils.getOutermostComponent(
-            li,
-            dimension,
-            TRAILING).getCurrentSpace().positions[dimension][TRAILING];
-      } else {
-        if (excludedSize > subSize) {
-          subSize = excludedSize;
-        }
-        if (align == LEADING) {
-          l = groupPos[LEADING];
-          t = groupPos[LEADING] + excludedSize;
-        } else {// TRAILING
-          l = groupPos[TRAILING] - excludedSize;
-          t = groupPos[TRAILING];
-        }
-      }
-      if (l < leadCompPos) {
-        leadCompPos = l;
-      }
-      if (t > trailCompPos) {
-        trailCompPos = t;
-      }
-      if (align == LEADING) {
-        leadAlign = true;
-      } else {
-        trailAlign = true;
-      }
-    }
-    if (leadAlign && trailAlign) {
-      optimizeGaps(group, dimension, false);
-    } else { // one open edge to compensate
-      if (!LayoutInterval.canResize(group)) { // resizing disabled on the group
-        wasResizing = false;
-      }
-      boolean resizing = LayoutInterval.wantResize(group);
-      LayoutInterval parent = group.getParent();
-      if (parent != null
-          && parent.isParallel()
-          && group.getAlignment() == (leadAlign ? LEADING : TRAILING)) { // the group can shrink and the parent compensate
-        maintainSize(parent, wasResizing && !resizing, dimension, group, subSize);
-        if (leadAlign) {
-          groupPos[TRAILING] = trailCompPos;
-        }
-        if (trailAlign) {
-          groupPos[LEADING] = leadCompPos;
-        }
-        groupPos[CENTER] = (groupPos[LEADING] + groupPos[LEADING]) / 2;
-      } else {
-        int increment = groupSize - subSize;
-        assert increment > 0;
-        LayoutInterval gap = new LayoutInterval(SINGLE);
-        int min, max;
-        if (!resizing && (wasResizing || parent == null)) {
-          min = NOT_EXPLICITLY_DEFINED;
-          max = Short.MAX_VALUE;
-        } else {
-          min = max = USE_PREFERRED_SIZE;
-        }
-        gap.setSizes(min, increment, max);
-        operations.insertGap(
-            gap,
-            group,
-            leadAlign ? trailCompPos : leadCompPos,
-            dimension,
-            leadAlign ? TRAILING : LEADING);
-        if (leadAlign) {
-          groupPos[TRAILING] = trailCompPos;
-        }
-        if (trailAlign) {
-          groupPos[LEADING] = leadCompPos;
-        }
-        groupPos[CENTER] = (groupPos[LEADING] + groupPos[LEADING]) / 2;
-        if (parent != null) {
-          if (parent.isSequential()) {
-            parent = parent.getParent();
-          }
-          optimizeGaps(parent, dimension, false);
-        }
-      }
-    }
-  }
+	private void maintainSize(LayoutInterval group,
+			boolean wasResizing,
+			int dimension,
+			LayoutInterval excluded,
+			int excludedSize) {
+		assert group.isParallel(); // [also not used for center or baseline groups]
+		int groupSize = group.getCurrentSpace().size(dimension);
+		int[] groupPos = group.getCurrentSpace().positions[dimension];
+		boolean leadAlign = false;
+		boolean trailAlign = false;
+		int leadCompPos = Integer.MAX_VALUE;
+		int trailCompPos = Integer.MIN_VALUE;
+		int subSize = Integer.MIN_VALUE;
+		Iterator it = group.getSubIntervals();
+		while (it.hasNext()) {
+			LayoutInterval li = (LayoutInterval) it.next();
+			int align = li.getAlignment();
+			int l, t; // leading and trailing position of first and last component
+			if (li != excluded) {
+				int size = li.getCurrentSpace().size(dimension);
+				if (size >= groupSize) {
+					return;
+				}
+				if (size > subSize) {
+					subSize = size;
+				}
+				l = LayoutUtils.getOutermostComponent(
+						li,
+						dimension,
+						LEADING).getCurrentSpace().positions[dimension][LEADING];
+				t = LayoutUtils.getOutermostComponent(
+						li,
+						dimension,
+						TRAILING).getCurrentSpace().positions[dimension][TRAILING];
+			} else {
+				if (excludedSize > subSize) {
+					subSize = excludedSize;
+				}
+				if (align == LEADING) {
+					l = groupPos[LEADING];
+					t = groupPos[LEADING] + excludedSize;
+				} else {// TRAILING
+					l = groupPos[TRAILING] - excludedSize;
+					t = groupPos[TRAILING];
+				}
+			}
+			if (l < leadCompPos) {
+				leadCompPos = l;
+			}
+			if (t > trailCompPos) {
+				trailCompPos = t;
+			}
+			if (align == LEADING) {
+				leadAlign = true;
+			} else {
+				trailAlign = true;
+			}
+		}
+		if (leadAlign && trailAlign) {
+			optimizeGaps(group, dimension, false);
+		} else { // one open edge to compensate
+			if (!LayoutInterval.canResize(group)) { // resizing disabled on the group
+				wasResizing = false;
+			}
+			boolean resizing = LayoutInterval.wantResize(group);
+			LayoutInterval parent = group.getParent();
+			if (parent != null
+					&& parent.isParallel()
+					&& group.getAlignment() == (leadAlign ? LEADING : TRAILING)) { // the group can shrink and the parent compensate
+				maintainSize(parent, wasResizing && !resizing, dimension, group, subSize);
+				if (leadAlign) {
+					groupPos[TRAILING] = trailCompPos;
+				}
+				if (trailAlign) {
+					groupPos[LEADING] = leadCompPos;
+				}
+				groupPos[CENTER] = (groupPos[LEADING] + groupPos[LEADING]) / 2;
+			} else {
+				int increment = groupSize - subSize;
+				assert increment > 0;
+				LayoutInterval gap = new LayoutInterval(SINGLE);
+				int min, max;
+				if (!resizing && (wasResizing || parent == null)) {
+					min = NOT_EXPLICITLY_DEFINED;
+					max = Short.MAX_VALUE;
+				} else {
+					min = max = USE_PREFERRED_SIZE;
+				}
+				gap.setSizes(min, increment, max);
+				operations.insertGap(
+						gap,
+						group,
+						leadAlign ? trailCompPos : leadCompPos,
+								dimension,
+								leadAlign ? TRAILING : LEADING);
+				if (leadAlign) {
+					groupPos[TRAILING] = trailCompPos;
+				}
+				if (trailAlign) {
+					groupPos[LEADING] = leadCompPos;
+				}
+				groupPos[CENTER] = (groupPos[LEADING] + groupPos[LEADING]) / 2;
+				if (parent != null) {
+					if (parent.isSequential()) {
+						parent = parent.getParent();
+					}
+					optimizeGaps(parent, dimension, false);
+				}
+			}
+		}
+	}
 
-  /**
-   * Deals with a special situation when a large centered or baselined component is deleted when
-   * there's something else in parallel yet not overlapping, but may overlap with the other
-   * components from the group once the big component disappears. In general this means some
-   * components are in parallel in both dimensions, not overlapping only thanks to the size of the
-   * group, supported by the big component. The solution is to place the components in a sequence
-   * (which might be now possible when the big component is away). This is just a workaround
-   * covering simple cases, mainly for old layouts. We now try to avoid components that are too high
-   * to align on baseline at all.
-   *
-   * @param group
-   *          The group from which an interval has just been deleted.
-   * @param dimension
-   */
-  private void preventParallelCollapse(LayoutInterval group, int dimension) {
-    assert group.getGroupAlignment() == CENTER || group.getGroupAlignment() == BASELINE;
-    // first determine if the group gets smaller with the component deleted
-    LayoutRegion groupSpace = group.getCurrentSpace();
-    LayoutRegion reducedSpace = new LayoutRegion();
-    Iterator<LayoutInterval> it = group.getSubIntervals();
-    while (it.hasNext()) {
-      LayoutInterval li = it.next();
-      reducedSpace.expand(li.getCurrentSpace(), dimension);
-    }
-    if (reducedSpace.size(dimension) < groupSpace.size(dimension)) {
-      // collect intervals that are in parallel but should be in sequence with 'group'
-      List<LayoutInterval> seqListL = null;
-      List<LayoutInterval> seqListT = null;
-      int minDistL = Integer.MAX_VALUE;
-      int minDistT = Integer.MAX_VALUE;
-      boolean found = false;
-      LayoutInterval parent = group.getParent();
-      while (parent != null) {
-        if (parent.isParallel()) {
-          if (parent.getGroupAlignment() == CENTER || parent.getGroupAlignment() == BASELINE) {
-            break;
-          }
-          it = parent.getSubIntervals();
-          while (it.hasNext()) {
-            LayoutInterval li = it.next();
-            if (li != group && !li.isParentOf(group)) {
-              LayoutRegion neighborSpace = li.getCurrentSpace();
-              if (LayoutRegion.overlap(neighborSpace, groupSpace, dimension ^ 1, 0)
-                  && LayoutRegion.overlap(neighborSpace, groupSpace, dimension, 0)
-                  && !LayoutRegion.overlap(neighborSpace, reducedSpace, dimension, 0)) {
-                // overlapped with original group but not with the reduced space without the removed interval
-                int dist = LayoutRegion.distance(
-                    neighborSpace,
-                    reducedSpace,
-                    dimension,
-                    TRAILING,
-                    LEADING);
-                if (dist >= 0) {
-                  if (seqListL == null) {
-                    seqListL = new ArrayList<LayoutInterval>();
-                  }
-                  seqListL.add(li);
-                  if (dist < minDistL) {
-                    minDistL = dist;
-                  }
-                } else {
-                  dist = LayoutRegion.distance(
-                      reducedSpace,
-                      neighborSpace,
-                      dimension,
-                      TRAILING,
-                      LEADING);
-                  if (seqListT == null) {
-                    seqListT = new ArrayList<LayoutInterval>();
-                  }
-                  seqListT.add(li);
-                  if (dist < minDistT) {
-                    minDistT = dist;
-                  }
-                }
-              }
-            }
-          }
-          found =
-              seqListL != null && !seqListL.isEmpty() || seqListT != null && !seqListT.isEmpty();
-          if (found) {
-            break;
-          }
-        }
-        parent = parent.getParent();
-      }
-      if (found) {
-        assert parent.isParallel();
-        LayoutInterval seq = null;
-        if (group.getParent().isParallel()) { // create new sequence
-          parent = group.getParent();
-          int index = layoutModel.removeInterval(group);
-          seq = new LayoutInterval(SEQUENTIAL);
-          seq.setAlignment(group.getAlignment());
-          layoutModel.setIntervalAlignment(group, DEFAULT);
-          layoutModel.addInterval(seq, parent, index);
-          layoutModel.addInterval(group, seq, -1);
-        } else { // try to reuse the sequence the group is in, the moved
-          // intervals need to be parallelized with the rest of the sequence
-          int indexInSeq = 0;
-          LayoutInterval p = group;
-          do {
-            LayoutInterval li = p;
-            p = p.getParent();
-            if (p.isSequential()) {
-              indexInSeq = p.indexOf(li);
-              seq = p;
-              break; // not clear which parent sequence to use,
-                     // stopping here we use the lowest
-            }
-          } while (p != parent);
-          if (seqListL != null && !seqListL.isEmpty()) {
-            // extract the leading intervals, skip neighbor gap
-            LayoutInterval sub = null;
-            while (indexInSeq > 0) {
-              LayoutInterval li = layoutModel.removeInterval(seq, 0);
-              indexInSeq--;
-              if (!li.isEmptySpace() || indexInSeq > 0) {
-                if (sub == null) {
-                  sub = new LayoutInterval(SEQUENTIAL);
-                  seqListL.add(sub);
-                }
-                layoutModel.addInterval(li, sub, -1);
-              }
-            }
-          }
-          if (seqListT != null && !seqListT.isEmpty()) {
-            // exctract the trailing intervals, skip neighbor gap
-            LayoutInterval sub = null;
-            while (indexInSeq + 1 < seq.getSubIntervalCount()) {
-              LayoutInterval li = layoutModel.removeInterval(seq, seq.getSubIntervalCount() - 1);
-              if (!li.isEmptySpace() || indexInSeq + 1 < seq.getSubIntervalCount()) {
-                if (sub == null) {
-                  sub = new LayoutInterval(SEQUENTIAL);
-                  seqListT.add(sub);
-                }
-                layoutModel.addInterval(li, sub, 0);
-              }
-            }
-          }
-        }
-        LayoutInterval seqIntL = createIntervalFromList(seqListL, LEADING);
-        if (seqIntL != null) {
-          LayoutInterval gap = new LayoutInterval(SINGLE);
-          gap.setSizes(minDistL, minDistL, minDistL);
-          layoutModel.addInterval(gap, seq, 0);
-          layoutModel.setIntervalAlignment(seqIntL, DEFAULT);
-          operations.addContent(seqIntL, seq, 0);
-        }
-        LayoutInterval seqIntT = createIntervalFromList(seqListT, TRAILING);
-        if (seqIntT != null) {
-          LayoutInterval gap = new LayoutInterval(SINGLE);
-          gap.setSizes(minDistT, minDistT, minDistT);
-          layoutModel.addInterval(gap, seq, -1);
-          layoutModel.setIntervalAlignment(seqIntT, DEFAULT);
-          operations.addContent(seqIntT, seq, -1);
-        }
-      }
-    }
-  }
+	/**
+	 * Deals with a special situation when a large centered or baselined component is deleted when
+	 * there's something else in parallel yet not overlapping, but may overlap with the other
+	 * components from the group once the big component disappears. In general this means some
+	 * components are in parallel in both dimensions, not overlapping only thanks to the size of the
+	 * group, supported by the big component. The solution is to place the components in a sequence
+	 * (which might be now possible when the big component is away). This is just a workaround
+	 * covering simple cases, mainly for old layouts. We now try to avoid components that are too high
+	 * to align on baseline at all.
+	 *
+	 * @param group
+	 *          The group from which an interval has just been deleted.
+	 * @param dimension
+	 */
+	private void preventParallelCollapse(LayoutInterval group, int dimension) {
+		assert group.getGroupAlignment() == CENTER || group.getGroupAlignment() == BASELINE;
+		// first determine if the group gets smaller with the component deleted
+		LayoutRegion groupSpace = group.getCurrentSpace();
+		LayoutRegion reducedSpace = new LayoutRegion();
+		Iterator<LayoutInterval> it = group.getSubIntervals();
+		while (it.hasNext()) {
+			LayoutInterval li = it.next();
+			reducedSpace.expand(li.getCurrentSpace(), dimension);
+		}
+		if (reducedSpace.size(dimension) < groupSpace.size(dimension)) {
+			// collect intervals that are in parallel but should be in sequence with 'group'
+			List<LayoutInterval> seqListL = null;
+			List<LayoutInterval> seqListT = null;
+			int minDistL = Integer.MAX_VALUE;
+			int minDistT = Integer.MAX_VALUE;
+			boolean found = false;
+			LayoutInterval parent = group.getParent();
+			while (parent != null) {
+				if (parent.isParallel()) {
+					if (parent.getGroupAlignment() == CENTER || parent.getGroupAlignment() == BASELINE) {
+						break;
+					}
+					it = parent.getSubIntervals();
+					while (it.hasNext()) {
+						LayoutInterval li = it.next();
+						if (li != group && !li.isParentOf(group)) {
+							LayoutRegion neighborSpace = li.getCurrentSpace();
+							if (LayoutRegion.overlap(neighborSpace, groupSpace, dimension ^ 1, 0)
+									&& LayoutRegion.overlap(neighborSpace, groupSpace, dimension, 0)
+									&& !LayoutRegion.overlap(neighborSpace, reducedSpace, dimension, 0)) {
+								// overlapped with original group but not with the reduced space without the removed interval
+								int dist = LayoutRegion.distance(
+										neighborSpace,
+										reducedSpace,
+										dimension,
+										TRAILING,
+										LEADING);
+								if (dist >= 0) {
+									if (seqListL == null) {
+										seqListL = new ArrayList<LayoutInterval>();
+									}
+									seqListL.add(li);
+									if (dist < minDistL) {
+										minDistL = dist;
+									}
+								} else {
+									dist = LayoutRegion.distance(
+											reducedSpace,
+											neighborSpace,
+											dimension,
+											TRAILING,
+											LEADING);
+									if (seqListT == null) {
+										seqListT = new ArrayList<LayoutInterval>();
+									}
+									seqListT.add(li);
+									if (dist < minDistT) {
+										minDistT = dist;
+									}
+								}
+							}
+						}
+					}
+					found =
+							seqListL != null && !seqListL.isEmpty() || seqListT != null && !seqListT.isEmpty();
+					if (found) {
+						break;
+					}
+				}
+				parent = parent.getParent();
+			}
+			if (found) {
+				assert parent.isParallel();
+				LayoutInterval seq = null;
+				if (group.getParent().isParallel()) { // create new sequence
+					parent = group.getParent();
+					int index = layoutModel.removeInterval(group);
+					seq = new LayoutInterval(SEQUENTIAL);
+					seq.setAlignment(group.getAlignment());
+					layoutModel.setIntervalAlignment(group, DEFAULT);
+					layoutModel.addInterval(seq, parent, index);
+					layoutModel.addInterval(group, seq, -1);
+				} else { // try to reuse the sequence the group is in, the moved
+					// intervals need to be parallelized with the rest of the sequence
+					int indexInSeq = 0;
+					LayoutInterval p = group;
+					do {
+						LayoutInterval li = p;
+						p = p.getParent();
+						if (p.isSequential()) {
+							indexInSeq = p.indexOf(li);
+							seq = p;
+							break; // not clear which parent sequence to use,
+							// stopping here we use the lowest
+						}
+					} while (p != parent);
+					if (seqListL != null && !seqListL.isEmpty()) {
+						// extract the leading intervals, skip neighbor gap
+						LayoutInterval sub = null;
+						while (indexInSeq > 0) {
+							LayoutInterval li = layoutModel.removeInterval(seq, 0);
+							indexInSeq--;
+							if (!li.isEmptySpace() || indexInSeq > 0) {
+								if (sub == null) {
+									sub = new LayoutInterval(SEQUENTIAL);
+									seqListL.add(sub);
+								}
+								layoutModel.addInterval(li, sub, -1);
+							}
+						}
+					}
+					if (seqListT != null && !seqListT.isEmpty()) {
+						// exctract the trailing intervals, skip neighbor gap
+						LayoutInterval sub = null;
+						while (indexInSeq + 1 < seq.getSubIntervalCount()) {
+							LayoutInterval li = layoutModel.removeInterval(seq, seq.getSubIntervalCount() - 1);
+							if (!li.isEmptySpace() || indexInSeq + 1 < seq.getSubIntervalCount()) {
+								if (sub == null) {
+									sub = new LayoutInterval(SEQUENTIAL);
+									seqListT.add(sub);
+								}
+								layoutModel.addInterval(li, sub, 0);
+							}
+						}
+					}
+				}
+				LayoutInterval seqIntL = createIntervalFromList(seqListL, LEADING);
+				if (seqIntL != null) {
+					LayoutInterval gap = new LayoutInterval(SINGLE);
+					gap.setSizes(minDistL, minDistL, minDistL);
+					layoutModel.addInterval(gap, seq, 0);
+					layoutModel.setIntervalAlignment(seqIntL, DEFAULT);
+					operations.addContent(seqIntL, seq, 0);
+				}
+				LayoutInterval seqIntT = createIntervalFromList(seqListT, TRAILING);
+				if (seqIntT != null) {
+					LayoutInterval gap = new LayoutInterval(SINGLE);
+					gap.setSizes(minDistT, minDistT, minDistT);
+					layoutModel.addInterval(gap, seq, -1);
+					layoutModel.setIntervalAlignment(seqIntT, DEFAULT);
+					operations.addContent(seqIntT, seq, -1);
+				}
+			}
+		}
+	}
 
-  private LayoutInterval createIntervalFromList(List<LayoutInterval> seqList, int alignment) {
-    LayoutInterval seqInt = null;
-    if (seqList != null && !seqList.isEmpty()) {
-      if (seqList.size() == 1) {
-        LayoutInterval li = seqList.get(0);
-        if (li.getParent() != null) {
-          layoutModel.removeInterval(li);
-        }
-        seqInt = li;
-      } else {
-        seqInt = new LayoutInterval(PARALLEL);
-        seqInt.setGroupAlignment(alignment);
-        for (LayoutInterval li : seqList) {
-          if (li.getParent() != null) {
-            layoutModel.removeInterval(li);
-          }
-          layoutModel.addInterval(li, seqInt, -1);
-        }
-      }
-    }
-    return seqInt;
-  }
+	private LayoutInterval createIntervalFromList(List<LayoutInterval> seqList, int alignment) {
+		LayoutInterval seqInt = null;
+		if (seqList != null && !seqList.isEmpty()) {
+			if (seqList.size() == 1) {
+				LayoutInterval li = seqList.get(0);
+				if (li.getParent() != null) {
+					layoutModel.removeInterval(li);
+				}
+				seqInt = li;
+			} else {
+				seqInt = new LayoutInterval(PARALLEL);
+				seqInt.setGroupAlignment(alignment);
+				for (LayoutInterval li : seqList) {
+					if (li.getParent() != null) {
+						layoutModel.removeInterval(li);
+					}
+					layoutModel.addInterval(li, seqInt, -1);
+				}
+			}
+		}
+		return seqInt;
+	}
 
-  public String[] positionCode() {
-    return dragger != null ? dragger.positionCode() : new String[2];
-  }
+	public String[] positionCode() {
+		return dragger != null ? dragger.positionCode() : new String[2];
+	}
 
-  // -----
-  // auxiliary fields holding temporary objects used frequently
-  // converted cursor position used during moving/resizing
-  private final int[] cursorPos = {0, 0};
-  // -----
-  // test generation support
-  static final String TEST_SWITCH = "netbeans.form.layout_test"; // NOI18N
-  /* stores test code lines */
-  public List<String> testCode = new ArrayList<String>();
-  // these below are used for removing unwanted move entries, otherwise the code can exceed 10000 lines in a few seconds of form editor work ;O)
-  private final List<String> testCode0 = new ArrayList<String>();
-  private final List<String> beforeMove = new ArrayList<String>();
-  private final List<String> move1 = new ArrayList<String>();
-  private final List<String> move2 = new ArrayList<String>();
-  private final boolean isMoving = false;
-  private int modelCounter = -1;
-  private final Point lastMovePoint = new Point(0, 0);
+	// -----
+	// auxiliary fields holding temporary objects used frequently
+	// converted cursor position used during moving/resizing
+	private final int[] cursorPos = {0, 0};
+	// -----
+	// test generation support
+	static final String TEST_SWITCH = "netbeans.form.layout_test"; // NOI18N
+	/* stores test code lines */
+	public List<String> testCode = new ArrayList<String>();
+	// these below are used for removing unwanted move entries, otherwise the code can exceed 10000 lines in a few seconds of form editor work ;O)
+	private final List<String> testCode0 = new ArrayList<String>();
+	private final List<String> beforeMove = new ArrayList<String>();
+	private final List<String> move1 = new ArrayList<String>();
+	private final List<String> move2 = new ArrayList<String>();
+	private final boolean isMoving = false;
+	private int modelCounter = -1;
+	private final Point lastMovePoint = new Point(0, 0);
 
-  public int getModelCounter() {
-    return modelCounter;
-  }
+	public int getModelCounter() {
+		return modelCounter;
+	}
 
-  public void setModelCounter(int modelCounter) {
-    this.modelCounter = modelCounter;
-  }
+	public void setModelCounter(int modelCounter) {
+		this.modelCounter = modelCounter;
+	}
 }
diff --git a/org.eclipse.wb.layout.group/netbeans-src/org/netbeans/modules/form/layoutdesign/LayoutDragger.java b/org.eclipse.wb.layout.group/netbeans-src/org/netbeans/modules/form/layoutdesign/LayoutDragger.java
index af58ad09d..fc73a1ca2 100644
--- a/org.eclipse.wb.layout.group/netbeans-src/org/netbeans/modules/form/layoutdesign/LayoutDragger.java
+++ b/org.eclipse.wb.layout.group/netbeans-src/org/netbeans/modules/form/layoutdesign/LayoutDragger.java
@@ -52,223 +52,223 @@
  * unpreferred position must have twice smaller distance, and be better by at least SNAP_DISTANCE/2
  */
 class LayoutDragger implements LayoutConstants {
-  private final VisualMapper visualMapper;
-  // fixed (initial) parameters of the operation ---
-  // type of the operation, one of ADDING, MOVING, RESIZING
-  private int operation;
-  private static final int ADDING = 0;
-  private static final int MOVING = 1;
-  private static final int RESIZING = 2;
-  // components being moved
-  private final LayoutComponent[] movingComponents;
-  // for each dimension defines what component edges are to be moved:
-  //   - LayoutRegion.ALL_POINTS means whole component is moved
-  //   - LEADING or TRAILING means the component is resized
-  //   - LayoutRegion.NO_POINT means the component is not changed in given dimension
-  private final int movingEdges[]; // array according to dimension (HORIZONTAL or VERTICAL)
-  // indicates whether the operation is resizing - according to movingEdges
-  //    private boolean resizing;
-  // initial components' positions and sizes (defines the formation to move)
-  private final LayoutRegion[] movingFormation;
-  // initial mouse cursor position (when moving/resizing starts)
-  private final int[] startCursorPosition;
-  private SizeDef[] sizing;
-  // parameters changed with each move step ---
-  // last mouse cursor position
-  private final int[] lastCursorPosition = new int[]{LayoutRegion.UNKNOWN, LayoutRegion.UNKNOWN};
-  // direction of mouse move from last position
-  private final int[] moveDirection = new int[]{LEADING, LEADING};
-  // dimension that is temporarily locked (kept unchanged)
-  private int lockedDimension = -1;
-  // container the components are being moved in/over
-  private LayoutComponent targetContainer;
-  // relevant root intervals where the moving/resizing components are targeted to
-  private LayoutInterval[] targetRoots;
-  // actual components' bounds of moving/resizing components
-  private final LayoutRegion[] movingBounds;
-  // last found positions for the moving/resizing component
-  private final PositionDef[] bestPositions = new PositionDef[DIM_COUNT];
-  // determines whether the dragged components can snap to baseline
-  private boolean canSnapToBaseline;
-  // the following fields hold various parameters used during the procedure
-  // of finding a suitable position for the moving/resizing components
-  // (fields are used not to need to pass the parameters through all the
-  // methods again and again and to avoid repetitive creation of arrays) ---
-  private LayoutRegion movingSpace;
-  private int dimension;
-  private boolean snapping;
-  // arrays of position candidates for the moving/resizing component
-  private final PositionDef[][] findingsNextTo;
-  private final PositionDef[][] findingsAligned;
-  // constants ---
-  static final int[] ALL_EDGES = {LayoutRegion.ALL_POINTS, LayoutRegion.ALL_POINTS};
-  // length of tips of painted guiding lines
-  private static final int GL_TIP = 8;
-  // distance in which components are drawn to guiding line
-  private static final int SNAP_DISTANCE = 8;
-  // max. orthogonal distance from a component to be still recognized as "next to"
-  private static final int ORT_DISTANCE = 8;
+	private final VisualMapper visualMapper;
+	// fixed (initial) parameters of the operation ---
+	// type of the operation, one of ADDING, MOVING, RESIZING
+	private int operation;
+	private static final int ADDING = 0;
+	private static final int MOVING = 1;
+	private static final int RESIZING = 2;
+	// components being moved
+	private final LayoutComponent[] movingComponents;
+	// for each dimension defines what component edges are to be moved:
+	//   - LayoutRegion.ALL_POINTS means whole component is moved
+	//   - LEADING or TRAILING means the component is resized
+	//   - LayoutRegion.NO_POINT means the component is not changed in given dimension
+	private final int movingEdges[]; // array according to dimension (HORIZONTAL or VERTICAL)
+	// indicates whether the operation is resizing - according to movingEdges
+	//    private boolean resizing;
+	// initial components' positions and sizes (defines the formation to move)
+	private final LayoutRegion[] movingFormation;
+	// initial mouse cursor position (when moving/resizing starts)
+	private final int[] startCursorPosition;
+	private SizeDef[] sizing;
+	// parameters changed with each move step ---
+	// last mouse cursor position
+	private final int[] lastCursorPosition = new int[]{LayoutRegion.UNKNOWN, LayoutRegion.UNKNOWN};
+	// direction of mouse move from last position
+	private final int[] moveDirection = new int[]{LEADING, LEADING};
+	// dimension that is temporarily locked (kept unchanged)
+	private int lockedDimension = -1;
+	// container the components are being moved in/over
+	private LayoutComponent targetContainer;
+	// relevant root intervals where the moving/resizing components are targeted to
+	private LayoutInterval[] targetRoots;
+	// actual components' bounds of moving/resizing components
+	private final LayoutRegion[] movingBounds;
+	// last found positions for the moving/resizing component
+	private final PositionDef[] bestPositions = new PositionDef[DIM_COUNT];
+	// determines whether the dragged components can snap to baseline
+	private boolean canSnapToBaseline;
+	// the following fields hold various parameters used during the procedure
+	// of finding a suitable position for the moving/resizing components
+	// (fields are used not to need to pass the parameters through all the
+	// methods again and again and to avoid repetitive creation of arrays) ---
+	private LayoutRegion movingSpace;
+	private int dimension;
+	private boolean snapping;
+	// arrays of position candidates for the moving/resizing component
+	private final PositionDef[][] findingsNextTo;
+	private final PositionDef[][] findingsAligned;
+	// constants ---
+	static final int[] ALL_EDGES = {LayoutRegion.ALL_POINTS, LayoutRegion.ALL_POINTS};
+	// length of tips of painted guiding lines
+	private static final int GL_TIP = 8;
+	// distance in which components are drawn to guiding line
+	private static final int SNAP_DISTANCE = 8;
+	// max. orthogonal distance from a component to be still recognized as "next to"
+	private static final int ORT_DISTANCE = 8;
 
-  // -----
-  // setup
-  LayoutDragger(LayoutComponent[] comps,
-      LayoutRegion[] compBounds,
-      int[] initialCursorPos,
-      int[] movingEdges,
-      VisualMapper mapper) {
-    for (int i = 0; i < DIM_COUNT; i++) {
-      if (movingEdges[i] == LEADING || movingEdges[i] == TRAILING) {
-        operation = RESIZING;
-        break;
-      }
-    }
-    if (operation != RESIZING) {
-      operation = comps[0].getParent() == null ? ADDING : MOVING;
-    }
-    movingComponents = comps;
-    movingFormation = compBounds;
-    startCursorPosition = initialCursorPos;
-    this.movingEdges = movingEdges;
-    visualMapper = mapper;
-    movingBounds = new LayoutRegion[compBounds.length];
-    movingSpace = new LayoutRegion();
-    for (int i = 0; i < compBounds.length; i++) {
-      movingBounds[i] = new LayoutRegion();
-      movingSpace.expand(compBounds[i]);
-    }
-    // set canSnapToBaseline field
-    if (comps.length == 1) {
-      canSnapToBaseline = true; // real baseline position will be checked on the first move
-    } else {
-      LayoutInterval parent = comps[0].getLayoutInterval(VERTICAL).getParent();
-      for (int i = 1; i < comps.length; i++) {
-        if (comps[i].getLayoutInterval(VERTICAL).getParent() != parent) {
-          parent = null;
-          break;
-        }
-      }
-      canSnapToBaseline = parent != null && parent.getGroupAlignment() == BASELINE;
-    }
-    findingsNextTo = new PositionDef[DIM_COUNT][];
-    findingsAligned = new PositionDef[DIM_COUNT][];
-    for (int i = 0; i < DIM_COUNT; i++) {
-      int n = LayoutRegion.POINT_COUNT[i];
-      findingsNextTo[i] = new PositionDef[n];
-      findingsAligned[i] = new PositionDef[n];
-      for (int j = 0; j < n; j++) {
-        findingsNextTo[i][j] = new PositionDef();
-        findingsAligned[i][j] = new PositionDef();
-      }
-    }
-    if (operation == RESIZING) {
-      prepareResizing();
-    }
-  }
+	// -----
+	// setup
+	LayoutDragger(LayoutComponent[] comps,
+			LayoutRegion[] compBounds,
+			int[] initialCursorPos,
+			int[] movingEdges,
+			VisualMapper mapper) {
+		for (int i = 0; i < DIM_COUNT; i++) {
+			if (movingEdges[i] == LEADING || movingEdges[i] == TRAILING) {
+				operation = RESIZING;
+				break;
+			}
+		}
+		if (operation != RESIZING) {
+			operation = comps[0].getParent() == null ? ADDING : MOVING;
+		}
+		movingComponents = comps;
+		movingFormation = compBounds;
+		startCursorPosition = initialCursorPos;
+		this.movingEdges = movingEdges;
+		visualMapper = mapper;
+		movingBounds = new LayoutRegion[compBounds.length];
+		movingSpace = new LayoutRegion();
+		for (int i = 0; i < compBounds.length; i++) {
+			movingBounds[i] = new LayoutRegion();
+			movingSpace.expand(compBounds[i]);
+		}
+		// set canSnapToBaseline field
+		if (comps.length == 1) {
+			canSnapToBaseline = true; // real baseline position will be checked on the first move
+		} else {
+			LayoutInterval parent = comps[0].getLayoutInterval(VERTICAL).getParent();
+			for (int i = 1; i < comps.length; i++) {
+				if (comps[i].getLayoutInterval(VERTICAL).getParent() != parent) {
+					parent = null;
+					break;
+				}
+			}
+			canSnapToBaseline = parent != null && parent.getGroupAlignment() == BASELINE;
+		}
+		findingsNextTo = new PositionDef[DIM_COUNT][];
+		findingsAligned = new PositionDef[DIM_COUNT][];
+		for (int i = 0; i < DIM_COUNT; i++) {
+			int n = LayoutRegion.POINT_COUNT[i];
+			findingsNextTo[i] = new PositionDef[n];
+			findingsAligned[i] = new PositionDef[n];
+			for (int j = 0; j < n; j++) {
+				findingsNextTo[i][j] = new PositionDef();
+				findingsAligned[i][j] = new PositionDef();
+			}
+		}
+		if (operation == RESIZING) {
+			prepareResizing();
+		}
+	}
 
-  private void prepareResizing() {
-    sizing = new SizeDef[DIM_COUNT];
-    LayoutComponent comp = movingComponents[0]; // [limitation: only one component can be resized]
-    LayoutRegion space = movingFormation[0];
-    java.awt.Dimension prefSize = null;
-    for (int i = 0; i < DIM_COUNT; i++) {
-      if (isResizing(i)) {
-        SizeDef sizeDef = new SizeDef();
-        sizing[i] = sizeDef;
-        sizeDef.originalSize = space.size(i);
-        if (comp.isLayoutContainer()) {
-          // [TODO: ideally the resizing gap should be handled for each layer]
-          LayoutInterval resGap = findResizingGap(comp.getDefaultLayoutRoot(i));
-          if (resGap != null) {
-            sizeDef.resizingGap = resGap;
-            sizeDef.originalGapSize = LayoutInterval.getIntervalCurrentSize(resGap, i);
-            sizeDef.preferredGapSize = LayoutUtils.getSizeOfDefaultGap(resGap, visualMapper);
-            sizeDef.preferredSize =
-                sizeDef.originalSize - sizeDef.originalGapSize + sizeDef.preferredGapSize;
-            sizeDef.zeroPreferredSize =
-                isZeroResizingGap(resGap)
-                    ? sizeDef.originalSize - sizeDef.originalGapSize
-                    : Short.MIN_VALUE;
-          } else {
-            if (prefSize == null) {
-              prefSize = visualMapper.getComponentMinimumSize(comp.getId());
-            }
-            sizeDef.preferredSize = i == HORIZONTAL ? prefSize.width : prefSize.height;
-          }
-        } else {
-          if (prefSize == null) {
-            prefSize = visualMapper.getComponentPreferredSize(comp.getId());
-          }
-          sizeDef.preferredSize = i == HORIZONTAL ? prefSize.width : prefSize.height;
-        }
-      }
-    }
-  }
+	private void prepareResizing() {
+		sizing = new SizeDef[DIM_COUNT];
+		LayoutComponent comp = movingComponents[0]; // [limitation: only one component can be resized]
+		LayoutRegion space = movingFormation[0];
+		java.awt.Dimension prefSize = null;
+		for (int i = 0; i < DIM_COUNT; i++) {
+			if (isResizing(i)) {
+				SizeDef sizeDef = new SizeDef();
+				sizing[i] = sizeDef;
+				sizeDef.originalSize = space.size(i);
+				if (comp.isLayoutContainer()) {
+					// [TODO: ideally the resizing gap should be handled for each layer]
+					LayoutInterval resGap = findResizingGap(comp.getDefaultLayoutRoot(i));
+					if (resGap != null) {
+						sizeDef.resizingGap = resGap;
+						sizeDef.originalGapSize = LayoutInterval.getIntervalCurrentSize(resGap, i);
+						sizeDef.preferredGapSize = LayoutUtils.getSizeOfDefaultGap(resGap, visualMapper);
+						sizeDef.preferredSize =
+								sizeDef.originalSize - sizeDef.originalGapSize + sizeDef.preferredGapSize;
+						sizeDef.zeroPreferredSize =
+								isZeroResizingGap(resGap)
+								? sizeDef.originalSize - sizeDef.originalGapSize
+										: Short.MIN_VALUE;
+					} else {
+						if (prefSize == null) {
+							prefSize = visualMapper.getComponentMinimumSize(comp.getId());
+						}
+						sizeDef.preferredSize = i == HORIZONTAL ? prefSize.width : prefSize.height;
+					}
+				} else {
+					if (prefSize == null) {
+						prefSize = visualMapper.getComponentPreferredSize(comp.getId());
+					}
+					sizeDef.preferredSize = i == HORIZONTAL ? prefSize.width : prefSize.height;
+				}
+			}
+		}
+	}
 
-  private LayoutInterval findResizingGap(LayoutInterval group) {
-    for (Iterator it = group.getSubIntervals(); it.hasNext();) {
-      LayoutInterval li = (LayoutInterval) it.next();
-      if (li.isEmptySpace() && li.hasAttribute(LayoutInterval.ATTR_DESIGN_CONTAINER_GAP)) {
-        return li;
-      } else if (li.isGroup()) {
-        LayoutInterval gap = findResizingGap(li);
-        if (gap != null) {
-          return gap;
-        }
-      }
-    }
-    return null;
-  }
+	private LayoutInterval findResizingGap(LayoutInterval group) {
+		for (Iterator it = group.getSubIntervals(); it.hasNext();) {
+			LayoutInterval li = (LayoutInterval) it.next();
+			if (li.isEmptySpace() && li.hasAttribute(LayoutInterval.ATTR_DESIGN_CONTAINER_GAP)) {
+				return li;
+			} else if (li.isGroup()) {
+				LayoutInterval gap = findResizingGap(li);
+				if (gap != null) {
+					return gap;
+				}
+			}
+		}
+		return null;
+	}
 
-  private static boolean isZeroResizingGap(LayoutInterval gap) {
-    return LayoutInterval.getNeighbor(gap, LEADING, false, true, false) == null
-        || LayoutInterval.getNeighbor(gap, TRAILING, false, true, false) == null;
-  }
+	private static boolean isZeroResizingGap(LayoutInterval gap) {
+		return LayoutInterval.getNeighbor(gap, LEADING, false, true, false) == null
+				|| LayoutInterval.getNeighbor(gap, TRAILING, false, true, false) == null;
+	}
 
-  void setTargetContainer(LayoutComponent container, LayoutInterval[] roots) {
-    targetContainer = container;
-    targetRoots = roots;
-  }
+	void setTargetContainer(LayoutComponent container, LayoutInterval[] roots) {
+		targetContainer = container;
+		targetRoots = roots;
+	}
 
-  LayoutComponent getTargetContainer() {
-    return targetContainer;
-  }
+	LayoutComponent getTargetContainer() {
+		return targetContainer;
+	}
 
-  LayoutInterval[] getTargetRoots() {
-    return targetRoots;
-  }
+	LayoutInterval[] getTargetRoots() {
+		return targetRoots;
+	}
 
-  boolean isResizing() {
-    return operation == RESIZING;
-  }
+	boolean isResizing() {
+		return operation == RESIZING;
+	}
 
-  boolean isResizing(int dim) {
-    return movingEdges[dim] == LEADING || movingEdges[dim] == TRAILING;
-  }
+	boolean isResizing(int dim) {
+		return movingEdges[dim] == LEADING || movingEdges[dim] == TRAILING;
+	}
 
-  int getResizingEdge(int dim) {
-    return movingEdges[dim];
-  }
+	int getResizingEdge(int dim) {
+		return movingEdges[dim];
+	}
 
-  LayoutComponent[] getMovingComponents() {
-    return movingComponents;
-  }
+	LayoutComponent[] getMovingComponents() {
+		return movingComponents;
+	}
 
-  VisualMapper getVisualMapper() {
-    return visualMapper;
-  }
+	VisualMapper getVisualMapper() {
+		return visualMapper;
+	}
 
-  // -----
-  // results
-  LayoutRegion[] getMovingBounds() {
-    return movingBounds;
-  }
+	// -----
+	// results
+	LayoutRegion[] getMovingBounds() {
+		return movingBounds;
+	}
 
-  LayoutRegion getMovingSpace() {
-    return movingSpace;
-  }
+	LayoutRegion getMovingSpace() {
+		return movingSpace;
+	}
 
-  PositionDef[] getPositions() {
-/*        for (dimension=0; dimension < DIM_COUNT; dimension++) {
+	PositionDef[] getPositions() {
+		/*        for (dimension=0; dimension < DIM_COUNT; dimension++) {
             if (movingEdges[dimension] != LayoutRegion.NO_POINT) {
                 PositionDef best = bestPositions[dimension];
                 if (best == null && !isResizing(dimension)) { // not found, retry without position restriction
@@ -277,1398 +277,1398 @@ PositionDef[] getPositions() {
                 }
             }
         } */
-    return bestPositions;
-  }
+		return bestPositions;
+	}
 
-  SizeDef[] getSizes() {
-    return sizing;
-  }
+	SizeDef[] getSizes() {
+		return sizing;
+	}
 
-  boolean snappedToDefaultSize(int dimension) {
-    if (isResizing(dimension) && bestPositions[dimension] == null) {
-      int size = movingSpace.size(dimension);
-      return size == sizing[dimension].preferredSize || size == sizing[dimension].zeroPreferredSize;
-    }
-    return false;
-  }
+	boolean snappedToDefaultSize(int dimension) {
+		if (isResizing(dimension) && bestPositions[dimension] == null) {
+			int size = movingSpace.size(dimension);
+			return size == sizing[dimension].preferredSize || size == sizing[dimension].zeroPreferredSize;
+		}
+		return false;
+	}
 
-  // -----
-  // moving & painting
-  void move(int[] cursorPos, boolean autoPositioning, boolean lockDimension) {
-    // translate mouse cursor position, compute move direction, ...
-    int lockCandidate = -1; // dimension that might be locked if there's aligned position
-    int minDelta = Integer.MAX_VALUE;
-    for (int i = 0; i < DIM_COUNT; i++) {
-      cursorPos[i] -= startCursorPosition[i]; // translate to diff from the initial state
-      int currentPos = cursorPos[i];
-      int lastPos = lastCursorPosition[i];
-      lastCursorPosition[i] = currentPos;
-      if (lastPos == LayoutRegion.UNKNOWN) { // first move step, can't calc direction
-        lockDimension = false; // can't lock yet
-      } else {
-        int delta = currentPos - lastPos;
-        if (delta != 0) { // position changed in this direction
-          moveDirection[i] = delta > 0 ? TRAILING : LEADING;
-        }
-        if (movingEdges[i] != LayoutRegion.ALL_POINTS) {
-          lockDimension = false; // can't lock - this is not pure moving
-        } else if (lockedDimension < 0) { // not locked yet
-          PositionDef pos = bestPositions[i];
-          if (pos != null && !pos.nextTo && delta < minDelta) {
-            lockCandidate = i;
-            minDelta = delta;
-          }
-        }
-      }
-    }
-    // check locked dimension
-    if (lockDimension) {
-      if (lockedDimension < 0) { // not set yet
-        lockedDimension = lockCandidate;
-      }
-    } else {
-      lockedDimension = -1;
-    }
-    // compute actual position of the moving components
-    for (int i = 0; i < movingBounds.length; i++) {
-      for (int j = 0; j < DIM_COUNT; j++) {
-        if (j != lockedDimension) {
-          movingBounds[i].set(j, movingFormation[i]);
-          movingBounds[i].reshape(j, movingEdges[j], cursorPos[j]);
-        }
-        // for locked dimension the space is already set and not changing
-      }
-    }
-    movingSpace = new LayoutRegion();
-    for (int i = 0; i < movingBounds.length; i++) {
-      movingSpace.expand(movingBounds[i]);
-    }
-    if (canSnapToBaseline) { // awfull, but working
-      int baselinePos = movingBounds[0].positions[VERTICAL][BASELINE];
-      if (baselinePos > 0) {
-        movingSpace.positions[VERTICAL][BASELINE] = baselinePos;
-      } else {
-        canSnapToBaseline = false;
-      }
-    }
-    // reset finding results
-    for (int i = 0; i < DIM_COUNT; i++) {
-      if (i != lockedDimension) {
-        bestPositions[i] = null;
-        for (int j = 0; j < LayoutRegion.POINT_COUNT[i]; j++) {
-          findingsNextTo[i][j].reset();
-          findingsAligned[i][j].reset();
-        }
-      }
-    }
-    // find position in the layout
-    snapping = autoPositioning;
-    if (autoPositioning) {
-      // important: looking for vertical position first
-      for (dimension = DIM_COUNT - 1; dimension >= 0; dimension--) {
-        if (dimension != lockedDimension && movingEdges[dimension] != LayoutRegion.NO_POINT) { // look for a suitable position in this dimension
-          int snapDistance = findBestPosition();
-          // snap effect
-          if (snapDistance != LayoutRegion.UNKNOWN) {
-            cursorPos[dimension] -= snapDistance;
-            for (int i = 0; i < movingBounds.length; i++) {
-              movingBounds[i].reshape(dimension, movingEdges[dimension], -snapDistance);
-            }
-            movingSpace.reshape(dimension, movingEdges[dimension], -snapDistance);
-          }
-        }
-      }
-    }
-    // translate mouse cursor position back to absolute coordinates
-    for (int i = 0; i < DIM_COUNT; i++) {
-      cursorPos[i] += startCursorPosition[i];
-    }
-  }
+	// -----
+	// moving & painting
+	void move(int[] cursorPos, boolean autoPositioning, boolean lockDimension) {
+		// translate mouse cursor position, compute move direction, ...
+		int lockCandidate = -1; // dimension that might be locked if there's aligned position
+		int minDelta = Integer.MAX_VALUE;
+		for (int i = 0; i < DIM_COUNT; i++) {
+			cursorPos[i] -= startCursorPosition[i]; // translate to diff from the initial state
+			int currentPos = cursorPos[i];
+			int lastPos = lastCursorPosition[i];
+			lastCursorPosition[i] = currentPos;
+			if (lastPos == LayoutRegion.UNKNOWN) { // first move step, can't calc direction
+				lockDimension = false; // can't lock yet
+			} else {
+				int delta = currentPos - lastPos;
+				if (delta != 0) { // position changed in this direction
+					moveDirection[i] = delta > 0 ? TRAILING : LEADING;
+				}
+				if (movingEdges[i] != LayoutRegion.ALL_POINTS) {
+					lockDimension = false; // can't lock - this is not pure moving
+				} else if (lockedDimension < 0) { // not locked yet
+					PositionDef pos = bestPositions[i];
+					if (pos != null && !pos.nextTo && delta < minDelta) {
+						lockCandidate = i;
+						minDelta = delta;
+					}
+				}
+			}
+		}
+		// check locked dimension
+		if (lockDimension) {
+			if (lockedDimension < 0) { // not set yet
+				lockedDimension = lockCandidate;
+			}
+		} else {
+			lockedDimension = -1;
+		}
+		// compute actual position of the moving components
+		for (int i = 0; i < movingBounds.length; i++) {
+			for (int j = 0; j < DIM_COUNT; j++) {
+				if (j != lockedDimension) {
+					movingBounds[i].set(j, movingFormation[i]);
+					movingBounds[i].reshape(j, movingEdges[j], cursorPos[j]);
+				}
+				// for locked dimension the space is already set and not changing
+			}
+		}
+		movingSpace = new LayoutRegion();
+		for (int i = 0; i < movingBounds.length; i++) {
+			movingSpace.expand(movingBounds[i]);
+		}
+		if (canSnapToBaseline) { // awfull, but working
+			int baselinePos = movingBounds[0].positions[VERTICAL][BASELINE];
+			if (baselinePos > 0) {
+				movingSpace.positions[VERTICAL][BASELINE] = baselinePos;
+			} else {
+				canSnapToBaseline = false;
+			}
+		}
+		// reset finding results
+		for (int i = 0; i < DIM_COUNT; i++) {
+			if (i != lockedDimension) {
+				bestPositions[i] = null;
+				for (int j = 0; j < LayoutRegion.POINT_COUNT[i]; j++) {
+					findingsNextTo[i][j].reset();
+					findingsAligned[i][j].reset();
+				}
+			}
+		}
+		// find position in the layout
+		snapping = autoPositioning;
+		if (autoPositioning) {
+			// important: looking for vertical position first
+			for (dimension = DIM_COUNT - 1; dimension >= 0; dimension--) {
+				if (dimension != lockedDimension && movingEdges[dimension] != LayoutRegion.NO_POINT) { // look for a suitable position in this dimension
+					int snapDistance = findBestPosition();
+					// snap effect
+					if (snapDistance != LayoutRegion.UNKNOWN) {
+						cursorPos[dimension] -= snapDistance;
+						for (int i = 0; i < movingBounds.length; i++) {
+							movingBounds[i].reshape(dimension, movingEdges[dimension], -snapDistance);
+						}
+						movingSpace.reshape(dimension, movingEdges[dimension], -snapDistance);
+					}
+				}
+			}
+		}
+		// translate mouse cursor position back to absolute coordinates
+		for (int i = 0; i < DIM_COUNT; i++) {
+			cursorPos[i] += startCursorPosition[i];
+		}
+	}
 
-  void paintMoveFeedback(IFeedbacksDrawer g) {
-    final int OVERLAP = 10;
-    for (int i = 0; i < DIM_COUNT; i++) {
-      LayoutDragger.PositionDef position = bestPositions[i];
-      if (position != null) {
-        boolean inRoot = position.interval.getParent() == null;
-        int dir = 1 - i; // opposite direction
-        int align = position.alignment;
-        LayoutInterval interval = position.interval;
-        LayoutInterval parent = interval.getParent();
-        boolean parentUsed;
-        do {
-          parentUsed = false;
-          if (parent != null && parent.isParallel()) {
-            // check if the interval alignment coincides with parent
-            if (align == LEADING || align == TRAILING) {
-              LayoutRegion parRegion = parent.getCurrentSpace();
-              if (!position.nextTo
-                  && LayoutRegion.distance(parRegion, movingSpace, i, align, align) == 0) {
-                parentUsed = true;
-              }
-            } else if (align == parent.getGroupAlignment()) {
-              parentUsed = true;
-            }
-          }
-          if (parentUsed) {
-            interval = parent;
-            parent = LayoutInterval.getFirstParent(parent, PARALLEL);
-          }
-        } while (parentUsed);
-        LayoutRegion posRegion = interval.getCurrentSpace();
-        LayoutRegion contRegion = targetRoots[0].getCurrentSpace();
-        int conty1 = contRegion.positions[dir][LEADING];
-        int conty2 = contRegion.positions[dir][TRAILING];
-        int posx = posRegion.positions[i][inRoot || !position.nextTo ? align : 1 - align];
-        int posy1 = posRegion.positions[dir][LEADING] - OVERLAP;
-        posy1 = Math.max(posy1, conty1);
-        int posy2 = posRegion.positions[dir][TRAILING] + OVERLAP;
-        posy2 = Math.min(posy2, conty2);
-        int x = movingSpace.positions[i][align];
-        int y1 = movingSpace.positions[dir][LEADING] - OVERLAP;
-        y1 = Math.max(y1, conty1);
-        int y2 = movingSpace.positions[dir][TRAILING] + OVERLAP;
-        y2 = Math.min(y2, conty2);
-        if (position.nextTo) { // adding next to
-          int padIndex = -1;
-          int paintedPad = 0;
-          if (position.paddingSizes != null && position.paddingSizes.length > 1) {
-            // more padding variants possible
-            assert position.paddingType != null && position.snapped;
-            for (int j = 0; j < PADDINGS.length; j++) {
-              if (PADDINGS[j] == position.paddingType) {
-                padIndex = j;
-                if (j > 0) {
-                  paintedPad = position.paddingSizes[j];
-                }
-                break;
-              }
-            }
-          }
-          if (i == HORIZONTAL) {
-            g.drawLine(x, Math.min(y1, posy1), x, Math.max(y2, posy2));
-          } else {
-            g.drawLine(Math.min(y1, posy1), x, Math.max(y2, posy2), x);
-          }
-          while (--padIndex >= 0) { // paint additional lines indicating smaller paddings
-            if (PADDINGS[padIndex] != PaddingType.INDENT) {
-              int pad = position.paddingSizes[padIndex];
-              int dx = paintedPad - pad;
-              x -= align == LEADING ? dx : -dx;
-              if (i == HORIZONTAL) {
-                g.drawLine(x, Math.min(y1, posy1), x, Math.max(y2, posy2));
-              } else {
-                g.drawLine(Math.min(y1, posy1), x, Math.max(y2, posy2), x);
-              }
-              paintedPad = pad;
-            }
-          }
-        } else { // adding aligned
-          //int ay1 = Math.min(y1, posy1);
-          //int ay2 = Math.max(y2, posy2);
-          if (x == posx) {
-            if (i == HORIZONTAL) {
-              g.drawLine(posx, Math.min(y1, posy1), posx, Math.max(y2, posy2));
-            } else {
-              g.drawLine(Math.min(y1, posy1), posx, Math.max(y2, posy2), posx);
-            }
-          } else { // indented position
-            if (i == HORIZONTAL) {
-              g.drawLine(posx, posy1, posx, posy2);
-              g.drawLine(x, y1, x, y2);
-            } else {
-              g.drawLine(posy1, posx, posy2, posx);
-              g.drawLine(y1, x, y2, x);
-            }
-          }
-        }
-      } else if (snappedToDefaultSize(i)) { // resizing snapped to default preferred size
-        int align = movingEdges[i];
-        int x1 = movingSpace.positions[i][align];
-        int x2 = movingSpace.positions[i][align ^ 1];
-        int y = movingSpace.positions[i ^ 1][CENTER];
-        if (i == HORIZONTAL) {
-          g.drawLine(x1, y, x2, y);
-        } else {
-          g.drawLine(y, x1, y, x2);
-        }
-      }
-    }
-  }
+	void paintMoveFeedback(IFeedbacksDrawer g) {
+		final int OVERLAP = 10;
+		for (int i = 0; i < DIM_COUNT; i++) {
+			LayoutDragger.PositionDef position = bestPositions[i];
+			if (position != null) {
+				boolean inRoot = position.interval.getParent() == null;
+				int dir = 1 - i; // opposite direction
+				int align = position.alignment;
+				LayoutInterval interval = position.interval;
+				LayoutInterval parent = interval.getParent();
+				boolean parentUsed;
+				do {
+					parentUsed = false;
+					if (parent != null && parent.isParallel()) {
+						// check if the interval alignment coincides with parent
+						if (align == LEADING || align == TRAILING) {
+							LayoutRegion parRegion = parent.getCurrentSpace();
+							if (!position.nextTo
+									&& LayoutRegion.distance(parRegion, movingSpace, i, align, align) == 0) {
+								parentUsed = true;
+							}
+						} else if (align == parent.getGroupAlignment()) {
+							parentUsed = true;
+						}
+					}
+					if (parentUsed) {
+						interval = parent;
+						parent = LayoutInterval.getFirstParent(parent, PARALLEL);
+					}
+				} while (parentUsed);
+				LayoutRegion posRegion = interval.getCurrentSpace();
+				LayoutRegion contRegion = targetRoots[0].getCurrentSpace();
+				int conty1 = contRegion.positions[dir][LEADING];
+				int conty2 = contRegion.positions[dir][TRAILING];
+				int posx = posRegion.positions[i][inRoot || !position.nextTo ? align : 1 - align];
+				int posy1 = posRegion.positions[dir][LEADING] - OVERLAP;
+				posy1 = Math.max(posy1, conty1);
+				int posy2 = posRegion.positions[dir][TRAILING] + OVERLAP;
+				posy2 = Math.min(posy2, conty2);
+				int x = movingSpace.positions[i][align];
+				int y1 = movingSpace.positions[dir][LEADING] - OVERLAP;
+				y1 = Math.max(y1, conty1);
+				int y2 = movingSpace.positions[dir][TRAILING] + OVERLAP;
+				y2 = Math.min(y2, conty2);
+				if (position.nextTo) { // adding next to
+					int padIndex = -1;
+					int paintedPad = 0;
+					if (position.paddingSizes != null && position.paddingSizes.length > 1) {
+						// more padding variants possible
+						assert position.paddingType != null && position.snapped;
+						for (int j = 0; j < PADDINGS.length; j++) {
+							if (PADDINGS[j] == position.paddingType) {
+								padIndex = j;
+								if (j > 0) {
+									paintedPad = position.paddingSizes[j];
+								}
+								break;
+							}
+						}
+					}
+					if (i == HORIZONTAL) {
+						g.drawLine(x, Math.min(y1, posy1), x, Math.max(y2, posy2));
+					} else {
+						g.drawLine(Math.min(y1, posy1), x, Math.max(y2, posy2), x);
+					}
+					while (--padIndex >= 0) { // paint additional lines indicating smaller paddings
+						if (PADDINGS[padIndex] != PaddingType.INDENT) {
+							int pad = position.paddingSizes[padIndex];
+							int dx = paintedPad - pad;
+							x -= align == LEADING ? dx : -dx;
+							if (i == HORIZONTAL) {
+								g.drawLine(x, Math.min(y1, posy1), x, Math.max(y2, posy2));
+							} else {
+								g.drawLine(Math.min(y1, posy1), x, Math.max(y2, posy2), x);
+							}
+							paintedPad = pad;
+						}
+					}
+				} else { // adding aligned
+					//int ay1 = Math.min(y1, posy1);
+					//int ay2 = Math.max(y2, posy2);
+					if (x == posx) {
+						if (i == HORIZONTAL) {
+							g.drawLine(posx, Math.min(y1, posy1), posx, Math.max(y2, posy2));
+						} else {
+							g.drawLine(Math.min(y1, posy1), posx, Math.max(y2, posy2), posx);
+						}
+					} else { // indented position
+						if (i == HORIZONTAL) {
+							g.drawLine(posx, posy1, posx, posy2);
+							g.drawLine(x, y1, x, y2);
+						} else {
+							g.drawLine(posy1, posx, posy2, posx);
+							g.drawLine(y1, x, y2, x);
+						}
+					}
+				}
+			} else if (snappedToDefaultSize(i)) { // resizing snapped to default preferred size
+				int align = movingEdges[i];
+				int x1 = movingSpace.positions[i][align];
+				int x2 = movingSpace.positions[i][align ^ 1];
+				int y = movingSpace.positions[i ^ 1][CENTER];
+				if (i == HORIZONTAL) {
+					g.drawLine(x1, y, x2, y);
+				} else {
+					g.drawLine(y, x1, y, x2);
+				}
+			}
+		}
+	}
 
-  String[] positionCode() {
-    String[] code = new String[DIM_COUNT];
-    for (int i = 0; i < DIM_COUNT; i++) {
-      LayoutDragger.PositionDef position = bestPositions[i];
-      if (position != null) {
-        int alignment = position.alignment;
-        if (position.nextTo) { // adding next to
-          String paddingCode = position.interval.getParent() == null// == targetContainer.getLayoutRoot(i)
-              ? "Container"
-              : paddingTypeCode(position.paddingType); // NOI18N
-          code[i] = "nextTo" + paddingCode // NOI18N
-              + dimensionCode(i)
-              + alignmentCode(alignment);
-        } else { // adding aligned
-          int x = movingSpace.positions[i][alignment];
-          int posx = position.interval.getCurrentSpace().positions[i][alignment];
-          if (x == posx) {
-            code[i] = "align" + dimensionCode(i) + alignmentCode(alignment); // NOI18N
-          } else {
-            code[i] = "indent"; // NOI18N
-          }
-        }
-      } else if (snappedToDefaultSize(i)) {
-        code[i] = "snappedToDefault" + dimensionCode(i); // NOI18N
-      }
-    }
-    if (code[0] == null) {
-      code[0] = code[1];
-      code[1] = null;
-    }
-    if (code[0] == null) {
-      code[0] = isResizing() ? "generalResizing" : "generalPosition"; // NOI18N
-    }
-    return code;
-  }
+	String[] positionCode() {
+		String[] code = new String[DIM_COUNT];
+		for (int i = 0; i < DIM_COUNT; i++) {
+			LayoutDragger.PositionDef position = bestPositions[i];
+			if (position != null) {
+				int alignment = position.alignment;
+				if (position.nextTo) { // adding next to
+					String paddingCode = position.interval.getParent() == null// == targetContainer.getLayoutRoot(i)
+							? "Container"
+									: paddingTypeCode(position.paddingType); // NOI18N
+					code[i] = "nextTo" + paddingCode // NOI18N
+							+ dimensionCode(i)
+							+ alignmentCode(alignment);
+				} else { // adding aligned
+					int x = movingSpace.positions[i][alignment];
+					int posx = position.interval.getCurrentSpace().positions[i][alignment];
+					if (x == posx) {
+						code[i] = "align" + dimensionCode(i) + alignmentCode(alignment); // NOI18N
+					} else {
+						code[i] = "indent"; // NOI18N
+					}
+				}
+			} else if (snappedToDefaultSize(i)) {
+				code[i] = "snappedToDefault" + dimensionCode(i); // NOI18N
+			}
+		}
+		if (code[0] == null) {
+			code[0] = code[1];
+			code[1] = null;
+		}
+		if (code[0] == null) {
+			code[0] = isResizing() ? "generalResizing" : "generalPosition"; // NOI18N
+		}
+		return code;
+	}
 
-  private static String dimensionCode(int dim) {
-    return dim == HORIZONTAL ? "Horizontal" : "Vertical"; // NOI18N
-  }
+	private static String dimensionCode(int dim) {
+		return dim == HORIZONTAL ? "Horizontal" : "Vertical"; // NOI18N
+	}
 
-  private static String alignmentCode(int alignment) {
-    String code = null;
-    switch (alignment) {
-      case LEADING :
-        code = "Leading";
-        break; // NOI18N
-      case TRAILING :
-        code = "Trailing";
-        break; // NOI18N
-      case BASELINE :
-        code = "Baseline";
-        break; // NOI18N
-    }
-    return code;
-  }
+	private static String alignmentCode(int alignment) {
+		String code = null;
+		switch (alignment) {
+		case LEADING :
+			code = "Leading";
+			break; // NOI18N
+		case TRAILING :
+			code = "Trailing";
+			break; // NOI18N
+		case BASELINE :
+			code = "Baseline";
+			break; // NOI18N
+		}
+		return code;
+	}
 
-  private static String paddingTypeCode(PaddingType paddingType) {
-    if (paddingType == PaddingType.UNRELATED) {
-      return "Unrelated"; // NOI18N
-    } else if (paddingType == PaddingType.SEPARATE) {
-      return "Separate"; // NOI18N
-    } else {
-      return "Related"; // NOI18N
-    }
-  }
+	private static String paddingTypeCode(PaddingType paddingType) {
+		if (paddingType == PaddingType.UNRELATED) {
+			return "Unrelated"; // NOI18N
+		} else if (paddingType == PaddingType.SEPARATE) {
+			return "Separate"; // NOI18N
+		} else {
+			return "Related"; // NOI18N
+		}
+	}
 
-  // -----
-  // finding position in the layout
-  /**
-   * For the moving/resizing component represented by 'movingSpace' finds the most suitable position
-   * the component could be placed to. Works in the dimension defined by 'dimension' field.
-   */
-  private int findBestPosition() {
-    PositionDef best;
-    int snapDistance = LayoutRegion.UNKNOWN;
-    if (targetContainer != null) {
-      PositionDef bestNextTo;
-      PositionDef bestAligned;
-      LayoutInterval layoutRoot = targetRoots[dimension];
-      int edges = movingEdges[dimension];
-      // [we could probably find the best position directly in scanning, not
-      //  separately for each alignment point, choosing the best one additionally here
-      //  (only issue is that BASELINE is preferred no matter the distance score)]
-      // 1st go through the layout and find position candidates
-      checkRootForNextTo(layoutRoot, edges);
-      scanLayoutForNextTo(layoutRoot, edges);
-      bestNextTo = chooseBestNextTo();
-      if (snapping) { // finding aligned position makes sense only if we can snap to it
-        checkRootForAligned(layoutRoot, edges);
-        scanLayoutForAligned(layoutRoot, edges);
-        bestAligned = chooseBestAligned();
-      } else {
-        bestAligned = null;
-      }
-      // 2nd choose the best position
-      if (bestAligned == null) {
-        best = bestNextTo;
-      } else if (bestNextTo == null) {
-        best = bestAligned;
-      } else { // both available
-        boolean preferredNextTo = isPreferredNextTo(bestNextTo, bestAligned);
-        int nextToDst = smallestDistance(findingsNextTo[dimension]);
-        int alignedDst = smallestDistance(findingsAligned[dimension]);
-        if (!relatedPositions(bestNextTo, bestAligned)) {
-          // penalize the aligned position according to distance in the other dimension
-          int alignedOrtDst =
-              Math.abs(LayoutRegion.nonOverlapDistance(
-                  bestAligned.interval.getCurrentSpace(),
-                  movingSpace,
-                  dimension ^ 1));
-          alignedDst = getDistanceScore(alignedDst, alignedOrtDst);
-        }
-        if (preferredNextTo) {
-          best =
-              alignedDst * 2 <= nextToDst && nextToDst - alignedDst >= SNAP_DISTANCE / 2
-                  ? bestAligned
-                  : bestNextTo;
-        } else {
-          best =
-              nextToDst * 2 <= alignedDst && alignedDst - nextToDst >= SNAP_DISTANCE / 2
-                  ? bestNextTo
-                  : bestAligned;
-        }
-        if (best == bestNextTo) {
-          PositionDef equalAligned = getAlignedEqualToNextTo(bestNextTo);
-          if (equalAligned != null) {
-            best = equalAligned;
-          }
-        }
-      }
-    } else {
-      best = null;
-    }
-    if (snapping) {
-      if (isResizing(dimension)) {
-        int prefSizeDiff = movingSpace.size(dimension) - sizing[dimension].preferredSize;
-        int zeroSizeDiff = movingSpace.size(dimension) - sizing[dimension].zeroPreferredSize;
-        int sizeDiff =
-            Math.abs(prefSizeDiff) <= Math.abs(zeroSizeDiff) ? prefSizeDiff : zeroSizeDiff;
-        int absDiff = Math.abs(sizeDiff);
-        if (absDiff < SNAP_DISTANCE && (best == null || absDiff < Math.abs(best.distance))) {
-          best = null; // snapping to preferred size has precedence here
-          snapDistance = movingEdges[dimension] == LEADING ? -sizeDiff : sizeDiff;
-        }
-      }
-      if (best != null) {
-        snapDistance = best.distance;
-      }
-    }
-    bestPositions[dimension] = best;
-    return snapDistance;
-  }
+	// -----
+	// finding position in the layout
+	/**
+	 * For the moving/resizing component represented by 'movingSpace' finds the most suitable position
+	 * the component could be placed to. Works in the dimension defined by 'dimension' field.
+	 */
+	private int findBestPosition() {
+		PositionDef best;
+		int snapDistance = LayoutRegion.UNKNOWN;
+		if (targetContainer != null) {
+			PositionDef bestNextTo;
+			PositionDef bestAligned;
+			LayoutInterval layoutRoot = targetRoots[dimension];
+			int edges = movingEdges[dimension];
+			// [we could probably find the best position directly in scanning, not
+			//  separately for each alignment point, choosing the best one additionally here
+			//  (only issue is that BASELINE is preferred no matter the distance score)]
+			// 1st go through the layout and find position candidates
+			checkRootForNextTo(layoutRoot, edges);
+			scanLayoutForNextTo(layoutRoot, edges);
+			bestNextTo = chooseBestNextTo();
+			if (snapping) { // finding aligned position makes sense only if we can snap to it
+				checkRootForAligned(layoutRoot, edges);
+				scanLayoutForAligned(layoutRoot, edges);
+				bestAligned = chooseBestAligned();
+			} else {
+				bestAligned = null;
+			}
+			// 2nd choose the best position
+			if (bestAligned == null) {
+				best = bestNextTo;
+			} else if (bestNextTo == null) {
+				best = bestAligned;
+			} else { // both available
+				boolean preferredNextTo = isPreferredNextTo(bestNextTo, bestAligned);
+				int nextToDst = smallestDistance(findingsNextTo[dimension]);
+				int alignedDst = smallestDistance(findingsAligned[dimension]);
+				if (!relatedPositions(bestNextTo, bestAligned)) {
+					// penalize the aligned position according to distance in the other dimension
+					int alignedOrtDst =
+							Math.abs(LayoutRegion.nonOverlapDistance(
+									bestAligned.interval.getCurrentSpace(),
+									movingSpace,
+									dimension ^ 1));
+					alignedDst = getDistanceScore(alignedDst, alignedOrtDst);
+				}
+				if (preferredNextTo) {
+					best =
+							alignedDst * 2 <= nextToDst && nextToDst - alignedDst >= SNAP_DISTANCE / 2
+							? bestAligned
+									: bestNextTo;
+				} else {
+					best =
+							nextToDst * 2 <= alignedDst && alignedDst - nextToDst >= SNAP_DISTANCE / 2
+							? bestNextTo
+									: bestAligned;
+				}
+				if (best == bestNextTo) {
+					PositionDef equalAligned = getAlignedEqualToNextTo(bestNextTo);
+					if (equalAligned != null) {
+						best = equalAligned;
+					}
+				}
+			}
+		} else {
+			best = null;
+		}
+		if (snapping) {
+			if (isResizing(dimension)) {
+				int prefSizeDiff = movingSpace.size(dimension) - sizing[dimension].preferredSize;
+				int zeroSizeDiff = movingSpace.size(dimension) - sizing[dimension].zeroPreferredSize;
+				int sizeDiff =
+						Math.abs(prefSizeDiff) <= Math.abs(zeroSizeDiff) ? prefSizeDiff : zeroSizeDiff;
+				int absDiff = Math.abs(sizeDiff);
+				if (absDiff < SNAP_DISTANCE && (best == null || absDiff < Math.abs(best.distance))) {
+					best = null; // snapping to preferred size has precedence here
+					snapDistance = movingEdges[dimension] == LEADING ? -sizeDiff : sizeDiff;
+				}
+			}
+			if (best != null) {
+				snapDistance = best.distance;
+			}
+		}
+		bestPositions[dimension] = best;
+		return snapDistance;
+	}
 
-  /**
-   * Checks distance of the leading/trailing edges of the moving component to the padding positions
-   * in the root layout interval. (Distance in root interval is checked differently than
-   * scanLayoutForNextTo method does.)
-   *
-   * @param layoutRoot
-   *          layout interval to be checked
-   * @param alignment
-   *          determines which edges of the moving space should be checked - can be LEADING or
-   *          TRAILING, or ALL_POINTS for both
-   */
-  private void checkRootForNextTo(LayoutInterval layoutRoot, int alignment) {
-    assert alignment == LayoutRegion.ALL_POINTS || alignment == LEADING || alignment == TRAILING;
-    if (operation == RESIZING && isValidNextToResizing(layoutRoot, alignment) != 1) {
-      return;
-    }
-    LayoutRegion rootSpace = layoutRoot.getCurrentSpace();
-    for (int i = LEADING; i <= TRAILING; i++) {
-      if (alignment == LayoutRegion.ALL_POINTS || alignment == i) {
-        int distance = LayoutRegion.distance(rootSpace, movingSpace, dimension, i, i);
-        assert distance != LayoutRegion.UNKNOWN;
-        if (snapping) {
-          // PENDING consider the resulting interval when moving more components
-          int pad =
-              findPaddings(
-                  null,
-                  movingComponents[0].getLayoutInterval(dimension),
-                  null,
-                  dimension,
-                  i)[0];
-          distance += i == LEADING ? -pad : pad;
-        }
-        if (!snapping || Math.abs(distance) < SNAP_DISTANCE) {
-          PositionDef bestSoFar = findingsNextTo[dimension][i];
-          assert !bestSoFar.isSet();
-          bestSoFar.interval = layoutRoot;
-          bestSoFar.alignment = i;
-          bestSoFar.distance = distance;
-          bestSoFar.nextTo = true;
-          bestSoFar.snapped = snapping && Math.abs(distance) < SNAP_DISTANCE;
-          bestSoFar.paddingType = null;
-          bestSoFar.paddingSizes = null;
-        }
-      }
-    }
-  }
+	/**
+	 * Checks distance of the leading/trailing edges of the moving component to the padding positions
+	 * in the root layout interval. (Distance in root interval is checked differently than
+	 * scanLayoutForNextTo method does.)
+	 *
+	 * @param layoutRoot
+	 *          layout interval to be checked
+	 * @param alignment
+	 *          determines which edges of the moving space should be checked - can be LEADING or
+	 *          TRAILING, or ALL_POINTS for both
+	 */
+	private void checkRootForNextTo(LayoutInterval layoutRoot, int alignment) {
+		assert alignment == LayoutRegion.ALL_POINTS || alignment == LEADING || alignment == TRAILING;
+		if (operation == RESIZING && isValidNextToResizing(layoutRoot, alignment) != 1) {
+			return;
+		}
+		LayoutRegion rootSpace = layoutRoot.getCurrentSpace();
+		for (int i = LEADING; i <= TRAILING; i++) {
+			if (alignment == LayoutRegion.ALL_POINTS || alignment == i) {
+				int distance = LayoutRegion.distance(rootSpace, movingSpace, dimension, i, i);
+				assert distance != LayoutRegion.UNKNOWN;
+				if (snapping) {
+					// PENDING consider the resulting interval when moving more components
+					int pad =
+							findPaddings(
+									null,
+									movingComponents[0].getLayoutInterval(dimension),
+									null,
+									dimension,
+									i)[0];
+					distance += i == LEADING ? -pad : pad;
+				}
+				if (!snapping || Math.abs(distance) < SNAP_DISTANCE) {
+					PositionDef bestSoFar = findingsNextTo[dimension][i];
+					assert !bestSoFar.isSet();
+					bestSoFar.interval = layoutRoot;
+					bestSoFar.alignment = i;
+					bestSoFar.distance = distance;
+					bestSoFar.nextTo = true;
+					bestSoFar.snapped = snapping && Math.abs(distance) < SNAP_DISTANCE;
+					bestSoFar.paddingType = null;
+					bestSoFar.paddingSizes = null;
+				}
+			}
+		}
+	}
 
-  /**
-   * Recursively scans given interval for suitable sub-intervals next to which the moving component
-   * could be suitably positioned.
-   *
-   * @param interval
-   *          group to scan
-   * @param alignment
-   *          determines which edges of the moving space should be checked - can be LEADING or
-   *          TRAILING, or ALL_POINTS for both
-   * @return position of the group as a whole to the moving space (corresponds to the edge by which
-   *         the moving component is attached)
-   */
-  private int scanLayoutForNextTo(LayoutInterval interval, int alignment) {
-    assert alignment == LayoutRegion.ALL_POINTS || alignment == LEADING || alignment == TRAILING;
-    int groupOuterAlignment = DEFAULT;
-    for (int idx = 0, count = interval.getSubIntervalCount(); idx < count; idx++) {
-      LayoutInterval sub = interval.getSubInterval(idx);
-      if (sub.isEmptySpace()) {
-        continue;
-      }
-      if (!orthogonalOverlap(interval, idx)) {
-        continue;
-      }
-      int nextToAlignment = DEFAULT;
-      if (sub.isComponent()) {
-        if (isValidInterval(sub)
-            && (operation != RESIZING || isValidNextToResizing(sub, alignment) == 1)) { // sub is a component, not being moved/resized
-          nextToAlignment = checkNextToPosition(sub, alignment);
-        }
-      } else if (sub.isSequential()) {
-        nextToAlignment = scanLayoutForNextTo(sub, alignment);
-      } else { // parallel group
-        // check if the group is not going to be dissolved (contains moving interval)
-        boolean validForRef = isValidInterval(sub);
-        int validResizing =
-            validForRef && operation == RESIZING ? isValidNextToResizing(sub, alignment) : 1;
-        int subGroupOuterAlign;
-        if (validResizing != -1 && canGoInsideForNextTo(sub, validForRef)) {
-          int align = alignment;
-          for (int i = LEADING; i <= TRAILING; i++) {
-            if (alignment != LayoutRegion.ALL_POINTS && i != alignment) {
-              continue; // skip irrelevant alignment
-            }
-            int insideDst =
-                LayoutRegion.distance(sub.getCurrentSpace(), movingSpace, dimension, i, i)
-                    * (i == LEADING ? 1 : -1);
-            if (insideDst < -SNAP_DISTANCE) {
-              // out of the subgroup - there is nothing "next to" inside
-              if (align == LayoutRegion.ALL_POINTS) {
-                align = i ^ 1;
-              } else {
-                align = LayoutRegion.NO_POINT;
-              }
-            }
-          }
-          if (align != LayoutRegion.NO_POINT) {
-            subGroupOuterAlign = scanLayoutForNextTo(sub, align);
-          } else {
-            subGroupOuterAlign = DEFAULT;
-          }
-        } else {
-          subGroupOuterAlign = alignment;
-        }
-        if (validForRef && validResizing == 1 && subGroupOuterAlign != DEFAULT) {
-          nextToAlignment = checkNextToPosition(sub, subGroupOuterAlign);
-        }
-      }
-      if (nextToAlignment != DEFAULT) {
-        if (interval.isSequential()) {
-          // for sequence only first and last intervals can be used for outer alignment
-          if (groupOuterAlignment == DEFAULT && (idx == 0 || idx + 1 == count)) {
-            if (idx != 0) {
-              nextToAlignment = nextToAlignment == TRAILING ? DEFAULT : LEADING;
-            } else if (idx + 1 != count) {
-              nextToAlignment = nextToAlignment == LEADING ? DEFAULT : TRAILING;
-            }
-            groupOuterAlignment = nextToAlignment;
-          }
-        } else {
-          // check if 'sub' is aligned at the corresponding border of the
-          // group - to know if the whole group could not be next to
-          if (LayoutInterval.wantResize(sub)) {
-            if (nextToAlignment == LayoutRegion.ALL_POINTS) {
-              groupOuterAlignment = LayoutRegion.ALL_POINTS; // both L and T can happen
-            } else if (groupOuterAlignment == DEFAULT) {
-              groupOuterAlignment = nextToAlignment; // "next to" side has 'sub' aligned
-            }
-          } else if ((nextToAlignment == LayoutRegion.ALL_POINTS || (nextToAlignment ^ 1) == sub.getAlignment())
-              && groupOuterAlignment == DEFAULT) { // 'sub' aligned at the "next to" side
-            groupOuterAlignment = sub.getAlignment() ^ 1;
-          }
-        }
-      }
-    }
-    return groupOuterAlignment;
-  }
+	/**
+	 * Recursively scans given interval for suitable sub-intervals next to which the moving component
+	 * could be suitably positioned.
+	 *
+	 * @param interval
+	 *          group to scan
+	 * @param alignment
+	 *          determines which edges of the moving space should be checked - can be LEADING or
+	 *          TRAILING, or ALL_POINTS for both
+	 * @return position of the group as a whole to the moving space (corresponds to the edge by which
+	 *         the moving component is attached)
+	 */
+	private int scanLayoutForNextTo(LayoutInterval interval, int alignment) {
+		assert alignment == LayoutRegion.ALL_POINTS || alignment == LEADING || alignment == TRAILING;
+		int groupOuterAlignment = DEFAULT;
+		for (int idx = 0, count = interval.getSubIntervalCount(); idx < count; idx++) {
+			LayoutInterval sub = interval.getSubInterval(idx);
+			if (sub.isEmptySpace()) {
+				continue;
+			}
+			if (!orthogonalOverlap(interval, idx)) {
+				continue;
+			}
+			int nextToAlignment = DEFAULT;
+			if (sub.isComponent()) {
+				if (isValidInterval(sub)
+						&& (operation != RESIZING || isValidNextToResizing(sub, alignment) == 1)) { // sub is a component, not being moved/resized
+					nextToAlignment = checkNextToPosition(sub, alignment);
+				}
+			} else if (sub.isSequential()) {
+				nextToAlignment = scanLayoutForNextTo(sub, alignment);
+			} else { // parallel group
+				// check if the group is not going to be dissolved (contains moving interval)
+				boolean validForRef = isValidInterval(sub);
+				int validResizing =
+						validForRef && operation == RESIZING ? isValidNextToResizing(sub, alignment) : 1;
+				int subGroupOuterAlign;
+				if (validResizing != -1 && canGoInsideForNextTo(sub, validForRef)) {
+					int align = alignment;
+					for (int i = LEADING; i <= TRAILING; i++) {
+						if (alignment != LayoutRegion.ALL_POINTS && i != alignment) {
+							continue; // skip irrelevant alignment
+						}
+						int insideDst =
+								LayoutRegion.distance(sub.getCurrentSpace(), movingSpace, dimension, i, i)
+								* (i == LEADING ? 1 : -1);
+						if (insideDst < -SNAP_DISTANCE) {
+							// out of the subgroup - there is nothing "next to" inside
+							if (align == LayoutRegion.ALL_POINTS) {
+								align = i ^ 1;
+							} else {
+								align = LayoutRegion.NO_POINT;
+							}
+						}
+					}
+					if (align != LayoutRegion.NO_POINT) {
+						subGroupOuterAlign = scanLayoutForNextTo(sub, align);
+					} else {
+						subGroupOuterAlign = DEFAULT;
+					}
+				} else {
+					subGroupOuterAlign = alignment;
+				}
+				if (validForRef && validResizing == 1 && subGroupOuterAlign != DEFAULT) {
+					nextToAlignment = checkNextToPosition(sub, subGroupOuterAlign);
+				}
+			}
+			if (nextToAlignment != DEFAULT) {
+				if (interval.isSequential()) {
+					// for sequence only first and last intervals can be used for outer alignment
+					if (groupOuterAlignment == DEFAULT && (idx == 0 || idx + 1 == count)) {
+						if (idx != 0) {
+							nextToAlignment = nextToAlignment == TRAILING ? DEFAULT : LEADING;
+						} else if (idx + 1 != count) {
+							nextToAlignment = nextToAlignment == LEADING ? DEFAULT : TRAILING;
+						}
+						groupOuterAlignment = nextToAlignment;
+					}
+				} else {
+					// check if 'sub' is aligned at the corresponding border of the
+					// group - to know if the whole group could not be next to
+					if (LayoutInterval.wantResize(sub)) {
+						if (nextToAlignment == LayoutRegion.ALL_POINTS) {
+							groupOuterAlignment = LayoutRegion.ALL_POINTS; // both L and T can happen
+						} else if (groupOuterAlignment == DEFAULT) {
+							groupOuterAlignment = nextToAlignment; // "next to" side has 'sub' aligned
+						}
+					} else if ((nextToAlignment == LayoutRegion.ALL_POINTS || (nextToAlignment ^ 1) == sub.getAlignment())
+							&& groupOuterAlignment == DEFAULT) { // 'sub' aligned at the "next to" side
+						groupOuterAlignment = sub.getAlignment() ^ 1;
+					}
+				}
+			}
+		}
+		return groupOuterAlignment;
+	}
 
-  /**
-   * Checks if moving interval can be considered as overlapping in the orthogonal dimension (thus
-   * being relevant for next to snapping) with given interval's sub-interval.
-   */
-  private boolean orthogonalOverlap(LayoutInterval interval, int index) {
-    LayoutInterval sub = interval.getSubInterval(index);
-    LayoutRegion subSpace = sub.getCurrentSpace();
-    if (LayoutRegion.overlap(movingSpace, subSpace, dimension ^ 1, 0)) {
-      return true;
-    }
-    if (dimension == VERTICAL) { // there may be some exceptions in vertical dimension
-      if (sub.isSequential()) {
-        return true;
-      }
-      // [note: can do this reliably only for root vertical sequence - with
-      //        more sequences LayoutFeeder might ignore it anyway]
-      if (interval.getParent() != null && interval.getParent().getSubIntervalCount() > 1) {
-        return false;
-      }
-      if (!LayoutRegion.overlap(movingSpace, interval.getCurrentSpace(), dimension, 0)) {
-        return true; // not in parallel with any sibling
-      }
-      if (interval.isSequential()) {
-        // check if it is before first or after last
-        if (LayoutRegion.distance(movingSpace, subSpace, dimension, TRAILING, LEADING) > 0) {
-          // moving interval is located in front of 'sub''
-          while (--index >= 0) {
-            LayoutInterval li = interval.getSubInterval(index);
-            if (!li.isEmptySpace() && isValidInterval(li)) {
-              break;
-            }
-          }
-          if (index < 0) {
-            return true;
-          }
-        } else if (LayoutRegion.distance(subSpace, movingSpace, dimension, TRAILING, LEADING) > 0) {
-          // moving interval is locate behind 'sub''
-          while (++index < interval.getSubIntervalCount()) {
-            LayoutInterval li = interval.getSubInterval(index);
-            if (!li.isEmptySpace() && isValidInterval(li)) {
-              break;
-            }
-          }
-          if (index == interval.getSubIntervalCount()) {
-            return true;
-          }
-        }
-      }
-    }
-    return false;
-  }
+	/**
+	 * Checks if moving interval can be considered as overlapping in the orthogonal dimension (thus
+	 * being relevant for next to snapping) with given interval's sub-interval.
+	 */
+	private boolean orthogonalOverlap(LayoutInterval interval, int index) {
+		LayoutInterval sub = interval.getSubInterval(index);
+		LayoutRegion subSpace = sub.getCurrentSpace();
+		if (LayoutRegion.overlap(movingSpace, subSpace, dimension ^ 1, 0)) {
+			return true;
+		}
+		if (dimension == VERTICAL) { // there may be some exceptions in vertical dimension
+			if (sub.isSequential()) {
+				return true;
+			}
+			// [note: can do this reliably only for root vertical sequence - with
+			//        more sequences LayoutFeeder might ignore it anyway]
+			if (interval.getParent() != null && interval.getParent().getSubIntervalCount() > 1) {
+				return false;
+			}
+			if (!LayoutRegion.overlap(movingSpace, interval.getCurrentSpace(), dimension, 0)) {
+				return true; // not in parallel with any sibling
+			}
+			if (interval.isSequential()) {
+				// check if it is before first or after last
+				if (LayoutRegion.distance(movingSpace, subSpace, dimension, TRAILING, LEADING) > 0) {
+					// moving interval is located in front of 'sub''
+					while (--index >= 0) {
+						LayoutInterval li = interval.getSubInterval(index);
+						if (!li.isEmptySpace() && isValidInterval(li)) {
+							break;
+						}
+					}
+					if (index < 0) {
+						return true;
+					}
+				} else if (LayoutRegion.distance(subSpace, movingSpace, dimension, TRAILING, LEADING) > 0) {
+					// moving interval is locate behind 'sub''
+					while (++index < interval.getSubIntervalCount()) {
+						LayoutInterval li = interval.getSubInterval(index);
+						if (!li.isEmptySpace() && isValidInterval(li)) {
+							break;
+						}
+					}
+					if (index == interval.getSubIntervalCount()) {
+						return true;
+					}
+				}
+			}
+		}
+		return false;
+	}
 
-  private int checkNextToPosition(LayoutInterval sub, int alignment) {
-    int nextToAlignment = DEFAULT;
-    LayoutRegion subSpace = sub.getCurrentSpace();
-    for (int i = LEADING; i <= TRAILING; i++) {
-      if (alignment != LayoutRegion.ALL_POINTS && i != alignment) {
-        continue; // skip irrelevant edge
-      }
-      boolean validDistance;
-      int distance = LayoutRegion.distance(subSpace, movingSpace, dimension, i ^ 1, i);
-      PaddingType paddingType = null;
-      int[] pads = null;
-      if (snapping) {
-        // if the examined interval already has neighbor default gap,
-        // then use its padding type and don't check other
-        LayoutInterval gap = LayoutInterval.getNeighbor(sub, i ^ 1, false, true, false);
-        if (gap != null && LayoutInterval.isFixedDefaultPadding(gap)) {
-          LayoutInterval neighbor = LayoutInterval.getNeighbor(gap, i ^ 1, true, true, false);
-          if (neighbor != null && isValidInterval(neighbor)) {
-            paddingType = gap.getPaddingType();
-            if (paddingType == null) {
-              paddingType = PaddingType.RELATED;
-            }
-          } // otherwise the gap is next to the moving interval, so not relevant
-        }
-        // PENDING consider the resulting interval when moving more components
-        pads =
-            findPaddings(
-                sub,
-                movingComponents[0].getLayoutInterval(dimension),
-                paddingType,
-                dimension,
-                i);
-        int orient = i == LEADING ? -1 : 1;
-        int padDst = distance + orient * pads[0];
-        if (paddingType == null) {
-          // find out the closest padding position and adjust the distance
-          paddingType = PaddingType.RELATED;
-          for (int j = 1; j < pads.length; j++) {
-            if (PADDINGS[j] != PaddingType.INDENT) {
-              int d = distance + orient * pads[j];
-              if (Math.abs(d) < Math.abs(padDst)) {
-                padDst = d;
-                paddingType = PADDINGS[j];
-              }
-            }
-          }
-        }
-        distance = padDst;
-        validDistance = Math.abs(distance) < SNAP_DISTANCE;
-      } else {
-        validDistance = i == LEADING ? distance > 0 : distance < 0;
-      }
-      if (validDistance) {
-        nextToAlignment = nextToAlignment == DEFAULT ? i : LayoutRegion.ALL_POINTS;
-        PositionDef bestSoFar = findingsNextTo[dimension][i];
-        if (!bestSoFar.isSet() || compareNextToPosition(sub, distance, bestSoFar) > 0) {
-          bestSoFar.interval = sub;
-          bestSoFar.alignment = i;
-          bestSoFar.distance = distance;
-          bestSoFar.nextTo = true;
-          bestSoFar.snapped = snapping;
-          bestSoFar.paddingType = paddingType;
-          bestSoFar.paddingSizes = pads;
-        }
-      }
-    }
-    return nextToAlignment;
-  }
+	private int checkNextToPosition(LayoutInterval sub, int alignment) {
+		int nextToAlignment = DEFAULT;
+		LayoutRegion subSpace = sub.getCurrentSpace();
+		for (int i = LEADING; i <= TRAILING; i++) {
+			if (alignment != LayoutRegion.ALL_POINTS && i != alignment) {
+				continue; // skip irrelevant edge
+			}
+			boolean validDistance;
+			int distance = LayoutRegion.distance(subSpace, movingSpace, dimension, i ^ 1, i);
+			PaddingType paddingType = null;
+			int[] pads = null;
+			if (snapping) {
+				// if the examined interval already has neighbor default gap,
+				// then use its padding type and don't check other
+				LayoutInterval gap = LayoutInterval.getNeighbor(sub, i ^ 1, false, true, false);
+				if (gap != null && LayoutInterval.isFixedDefaultPadding(gap)) {
+					LayoutInterval neighbor = LayoutInterval.getNeighbor(gap, i ^ 1, true, true, false);
+					if (neighbor != null && isValidInterval(neighbor)) {
+						paddingType = gap.getPaddingType();
+						if (paddingType == null) {
+							paddingType = PaddingType.RELATED;
+						}
+					} // otherwise the gap is next to the moving interval, so not relevant
+				}
+				// PENDING consider the resulting interval when moving more components
+				pads =
+						findPaddings(
+								sub,
+								movingComponents[0].getLayoutInterval(dimension),
+								paddingType,
+								dimension,
+								i);
+				int orient = i == LEADING ? -1 : 1;
+				int padDst = distance + orient * pads[0];
+				if (paddingType == null) {
+					// find out the closest padding position and adjust the distance
+					paddingType = PaddingType.RELATED;
+					for (int j = 1; j < pads.length; j++) {
+						if (PADDINGS[j] != PaddingType.INDENT) {
+							int d = distance + orient * pads[j];
+							if (Math.abs(d) < Math.abs(padDst)) {
+								padDst = d;
+								paddingType = PADDINGS[j];
+							}
+						}
+					}
+				}
+				distance = padDst;
+				validDistance = Math.abs(distance) < SNAP_DISTANCE;
+			} else {
+				validDistance = i == LEADING ? distance > 0 : distance < 0;
+			}
+			if (validDistance) {
+				nextToAlignment = nextToAlignment == DEFAULT ? i : LayoutRegion.ALL_POINTS;
+				PositionDef bestSoFar = findingsNextTo[dimension][i];
+				if (!bestSoFar.isSet() || compareNextToPosition(sub, distance, bestSoFar) > 0) {
+					bestSoFar.interval = sub;
+					bestSoFar.alignment = i;
+					bestSoFar.distance = distance;
+					bestSoFar.nextTo = true;
+					bestSoFar.snapped = snapping;
+					bestSoFar.paddingType = paddingType;
+					bestSoFar.paddingSizes = pads;
+				}
+			}
+		}
+		return nextToAlignment;
+	}
 
-  /**
-   * Compares given "next to" position with the best position found so far. Cares about the visual
-   * aspect only, not the logical structure.
-   *
-   * @return int as result of comparison: 1 - new position is better -1 - old position is better 0 -
-   *         the positions are equal
-   */
-  private int compareNextToPosition(LayoutInterval newInterval,
-      int newDistance,
-      PositionDef bestSoFar) {
-    if (!bestSoFar.isSet()) {
-      return 1; // best not set yet
-    }
-    LayoutRegion newSpace = newInterval.getCurrentSpace();
-    LayoutRegion oldSpace = bestSoFar.interval.getCurrentSpace();
-    int oldDistance = Math.abs(bestSoFar.distance);
-    // 1st compare the direct distance
-    if (newDistance < 0) {
-      newDistance = -newDistance;
-    }
-    if (newDistance != oldDistance) {
-      return newDistance < oldDistance ? 1 : -1;
-    }
-    if (newInterval.isParentOf(bestSoFar.interval)) {
-      return 1;
-    }
-    // 2nd compare the orthogonal distance
-    int newOrtDst = Math.abs(LayoutRegion.minDistance(newSpace, movingSpace, dimension ^ 1));
-    int oldOrtDst = Math.abs(LayoutRegion.minDistance(oldSpace, movingSpace, dimension ^ 1));
-    if (newOrtDst != oldOrtDst) {
-      return newOrtDst < oldOrtDst ? 1 : -1;
-    }
-    return 0;
-  }
+	/**
+	 * Compares given "next to" position with the best position found so far. Cares about the visual
+	 * aspect only, not the logical structure.
+	 *
+	 * @return int as result of comparison: 1 - new position is better -1 - old position is better 0 -
+	 *         the positions are equal
+	 */
+	private int compareNextToPosition(LayoutInterval newInterval,
+			int newDistance,
+			PositionDef bestSoFar) {
+		if (!bestSoFar.isSet()) {
+			return 1; // best not set yet
+		}
+		LayoutRegion newSpace = newInterval.getCurrentSpace();
+		LayoutRegion oldSpace = bestSoFar.interval.getCurrentSpace();
+		int oldDistance = Math.abs(bestSoFar.distance);
+		// 1st compare the direct distance
+		if (newDistance < 0) {
+			newDistance = -newDistance;
+		}
+		if (newDistance != oldDistance) {
+			return newDistance < oldDistance ? 1 : -1;
+		}
+		if (newInterval.isParentOf(bestSoFar.interval)) {
+			return 1;
+		}
+		// 2nd compare the orthogonal distance
+		int newOrtDst = Math.abs(LayoutRegion.minDistance(newSpace, movingSpace, dimension ^ 1));
+		int oldOrtDst = Math.abs(LayoutRegion.minDistance(oldSpace, movingSpace, dimension ^ 1));
+		if (newOrtDst != oldOrtDst) {
+			return newOrtDst < oldOrtDst ? 1 : -1;
+		}
+		return 0;
+	}
 
-  private static boolean canGoInsideForNextTo(LayoutInterval subGroup, boolean valid) {
-    // can't go inside a group if it has "closed" group alignment (center
-    // or baseline) - only can if the group is not valid (i.e. going to be
-    // removed so just one not-aligned interval might remain)
-    return subGroup.isSequential()
-        || subGroup.isParallel()
-        && (!valid || subGroup.getGroupAlignment() != CENTER
-            && subGroup.getGroupAlignment() != BASELINE);
-  }
+	private static boolean canGoInsideForNextTo(LayoutInterval subGroup, boolean valid) {
+		// can't go inside a group if it has "closed" group alignment (center
+		// or baseline) - only can if the group is not valid (i.e. going to be
+		// removed so just one not-aligned interval might remain)
+		return subGroup.isSequential()
+				|| subGroup.isParallel()
+				&& (!valid || subGroup.getGroupAlignment() != CENTER
+				&& subGroup.getGroupAlignment() != BASELINE);
+	}
 
-  /**
-   * Checks distance of the leading/trailing edges of the moving component to the border positions
-   * in the root layout interval. (Distance in root interval is checked differently than
-   * scanLayoutForAligned method does.)
-   *
-   * @param layoutRoot
-   *          layout interval to be checked
-   * @param alignment
-   *          determines which edges of the moving space should be checked - can be LEADING or
-   *          TRAILING, or ALL_POINTS for both
-   */
-  private void checkRootForAligned(LayoutInterval layoutRoot, int alignment) {
-    assert alignment == LayoutRegion.ALL_POINTS || alignment == LEADING || alignment == TRAILING;
-    if (operation == RESIZING && !isValidAlignedResizing(layoutRoot, alignment)) {
-      return;
-    }
-    LayoutRegion rootSpace = layoutRoot.getCurrentSpace();
-    for (int i = LEADING; i <= TRAILING; i++) {
-      if (alignment == LayoutRegion.ALL_POINTS || alignment == i) {
-        int distance = LayoutRegion.distance(rootSpace, movingSpace, dimension, i, i);
-        if (distance != LayoutRegion.UNKNOWN && Math.abs(distance) < SNAP_DISTANCE) { // compare the actual distance with the best one
-          PositionDef bestSoFar = findingsAligned[dimension][i];
-          assert !bestSoFar.isSet();
-          bestSoFar.interval = layoutRoot;
-          bestSoFar.alignment = i;
-          bestSoFar.distance = distance;
-          bestSoFar.nextTo = false;
-          bestSoFar.snapped = true;
-        }
-      }
-    }
-  }
+	/**
+	 * Checks distance of the leading/trailing edges of the moving component to the border positions
+	 * in the root layout interval. (Distance in root interval is checked differently than
+	 * scanLayoutForAligned method does.)
+	 *
+	 * @param layoutRoot
+	 *          layout interval to be checked
+	 * @param alignment
+	 *          determines which edges of the moving space should be checked - can be LEADING or
+	 *          TRAILING, or ALL_POINTS for both
+	 */
+	private void checkRootForAligned(LayoutInterval layoutRoot, int alignment) {
+		assert alignment == LayoutRegion.ALL_POINTS || alignment == LEADING || alignment == TRAILING;
+		if (operation == RESIZING && !isValidAlignedResizing(layoutRoot, alignment)) {
+			return;
+		}
+		LayoutRegion rootSpace = layoutRoot.getCurrentSpace();
+		for (int i = LEADING; i <= TRAILING; i++) {
+			if (alignment == LayoutRegion.ALL_POINTS || alignment == i) {
+				int distance = LayoutRegion.distance(rootSpace, movingSpace, dimension, i, i);
+				if (distance != LayoutRegion.UNKNOWN && Math.abs(distance) < SNAP_DISTANCE) { // compare the actual distance with the best one
+					PositionDef bestSoFar = findingsAligned[dimension][i];
+					assert !bestSoFar.isSet();
+					bestSoFar.interval = layoutRoot;
+					bestSoFar.alignment = i;
+					bestSoFar.distance = distance;
+					bestSoFar.nextTo = false;
+					bestSoFar.snapped = true;
+				}
+			}
+		}
+	}
 
-  /**
-   * Recursively scans given interval for suitable sub-intervals which the moving component could be
-   * aligned with.
-   *
-   * @param alignment
-   *          determines which edges of the moving space should be checked - can be LEADING or
-   *          TRAILING, or ALL_POINTS for both
-   */
-  private void scanLayoutForAligned(LayoutInterval interval, int alignment) {
-    assert alignment == LayoutRegion.ALL_POINTS || alignment == LEADING || alignment == TRAILING;
-    Iterator it = interval.getSubIntervals();
-    while (it.hasNext()) {
-      LayoutInterval sub = (LayoutInterval) it.next();
-      if (sub.isEmptySpace()) {
-        continue;
-      }
-      // can align with component, or with baseline group if moving comp has no baseline
-      boolean alignableClosedGroup =
-          sub.isGroup()
-              && sub.getGroupAlignment() == BASELINE
-              && !canSnapToBaseline
-              && isValidInterval(sub);
-      if ((sub.isComponent() && isValidInterval(sub) || alignableClosedGroup)
-          && (operation != RESIZING || isValidAlignedResizing(sub, alignment))) { // check distance of all alignment points of the moving
-                                                                                  // component to the examined interval space
-        for (int i = 0; i < LayoutRegion.POINT_COUNT[dimension]; i++) {
-          if (alignment == LayoutRegion.ALL_POINTS || i == alignment) {
-            int indentedDst = getIndentedDistance(sub, i);
-            int directDst = getDirectDistance(sub, i);
-            int distance = Math.abs(indentedDst) < Math.abs(directDst) ? indentedDst : directDst;
-            if (checkAlignedDistance(distance, sub.getCurrentSpace(), i)) {
-              // compare the actual distance with the best one
-              PositionDef bestSoFar = findingsAligned[dimension][i];
-              if (compareAlignedPosition(sub, distance, bestSoFar) >= 0) {
-                // >= 0 means we naturally prefer later components
-                bestSoFar.interval = sub;
-                bestSoFar.alignment = i;
-                bestSoFar.distance = distance;
-                bestSoFar.nextTo = false;
-                bestSoFar.snapped = true;
-              }
-            }
-          }
-        }
-      }
-      if (sub.getSubIntervalCount() > 0
-          && !alignableClosedGroup
-          && LayoutRegion.overlap(sub.getCurrentSpace(), movingSpace, dimension, SNAP_DISTANCE / 2)) { // the group overlaps with the moving space so it makes sense to dive into it
-        scanLayoutForAligned(sub, alignment);
-      }
-    }
-  }
+	/**
+	 * Recursively scans given interval for suitable sub-intervals which the moving component could be
+	 * aligned with.
+	 *
+	 * @param alignment
+	 *          determines which edges of the moving space should be checked - can be LEADING or
+	 *          TRAILING, or ALL_POINTS for both
+	 */
+	private void scanLayoutForAligned(LayoutInterval interval, int alignment) {
+		assert alignment == LayoutRegion.ALL_POINTS || alignment == LEADING || alignment == TRAILING;
+		Iterator it = interval.getSubIntervals();
+		while (it.hasNext()) {
+			LayoutInterval sub = (LayoutInterval) it.next();
+			if (sub.isEmptySpace()) {
+				continue;
+			}
+			// can align with component, or with baseline group if moving comp has no baseline
+			boolean alignableClosedGroup =
+					sub.isGroup()
+					&& sub.getGroupAlignment() == BASELINE
+					&& !canSnapToBaseline
+					&& isValidInterval(sub);
+			if ((sub.isComponent() && isValidInterval(sub) || alignableClosedGroup)
+					&& (operation != RESIZING || isValidAlignedResizing(sub, alignment))) { // check distance of all alignment points of the moving
+				// component to the examined interval space
+				for (int i = 0; i < LayoutRegion.POINT_COUNT[dimension]; i++) {
+					if (alignment == LayoutRegion.ALL_POINTS || i == alignment) {
+						int indentedDst = getIndentedDistance(sub, i);
+						int directDst = getDirectDistance(sub, i);
+						int distance = Math.abs(indentedDst) < Math.abs(directDst) ? indentedDst : directDst;
+						if (checkAlignedDistance(distance, sub.getCurrentSpace(), i)) {
+							// compare the actual distance with the best one
+							PositionDef bestSoFar = findingsAligned[dimension][i];
+							if (compareAlignedPosition(sub, distance, bestSoFar) >= 0) {
+								// >= 0 means we naturally prefer later components
+								bestSoFar.interval = sub;
+								bestSoFar.alignment = i;
+								bestSoFar.distance = distance;
+								bestSoFar.nextTo = false;
+								bestSoFar.snapped = true;
+							}
+						}
+					}
+				}
+			}
+			if (sub.getSubIntervalCount() > 0
+					&& !alignableClosedGroup
+					&& LayoutRegion.overlap(sub.getCurrentSpace(), movingSpace, dimension, SNAP_DISTANCE / 2)) { // the group overlaps with the moving space so it makes sense to dive into it
+				scanLayoutForAligned(sub, alignment);
+			}
+		}
+	}
 
-  private int getIndentedDistance(LayoutInterval interval, int alignment) {
-    if (dimension == HORIZONTAL && alignment == LEADING) {
-      // indented position is limited to horizontal dimension, left alignment
-      LayoutRegion examinedSpace = interval.getCurrentSpace();
-      int verticalDst =
-          LayoutRegion.distance(examinedSpace, movingSpace, VERTICAL, TRAILING, LEADING);
-      if (verticalDst >= 0 && verticalDst < 2 * SNAP_DISTANCE) {
-        // PENDING does it have a sense to generalize this for multiselection?
-        int indent = findIndent(interval.getComponent(), movingComponents[0], dimension, alignment);
-        if (indent > 0) {
-          return LayoutRegion.distance(examinedSpace, movingSpace, dimension, alignment, alignment)
-              - indent;
-        }
-      }
-    }
-    return Integer.MAX_VALUE;
-  }
+	private int getIndentedDistance(LayoutInterval interval, int alignment) {
+		if (dimension == HORIZONTAL && alignment == LEADING) {
+			// indented position is limited to horizontal dimension, left alignment
+			LayoutRegion examinedSpace = interval.getCurrentSpace();
+			int verticalDst =
+					LayoutRegion.distance(examinedSpace, movingSpace, VERTICAL, TRAILING, LEADING);
+			if (verticalDst >= 0 && verticalDst < 2 * SNAP_DISTANCE) {
+				// PENDING does it have a sense to generalize this for multiselection?
+				int indent = findIndent(interval.getComponent(), movingComponents[0], dimension, alignment);
+				if (indent > 0) {
+					return LayoutRegion.distance(examinedSpace, movingSpace, dimension, alignment, alignment)
+							- indent;
+				}
+			}
+		}
+		return Integer.MAX_VALUE;
+	}
 
-  private int getDirectDistance(LayoutInterval interval, int alignment) {
-    return checkValidAlignment(interval, alignment) ? LayoutRegion.distance(
-        interval.getCurrentSpace(),
-        movingSpace,
-        dimension,
-        alignment,
-        alignment) : Integer.MAX_VALUE;
-  }
+	private int getDirectDistance(LayoutInterval interval, int alignment) {
+		return checkValidAlignment(interval, alignment) ? LayoutRegion.distance(
+				interval.getCurrentSpace(),
+				movingSpace,
+				dimension,
+				alignment,
+				alignment) : Integer.MAX_VALUE;
+	}
 
-  private boolean checkValidAlignment(LayoutInterval interval, int alignment) {
-    int presentAlign = interval.getAlignment();
-    // check if the interval is not the last one to remain in parallel group
-    if (presentAlign != DEFAULT) {
-      boolean lastOne = true;
-      Iterator it = interval.getParent().getSubIntervals();
-      while (it.hasNext()) {
-        LayoutInterval li = (LayoutInterval) it.next();
-        if (li != interval && isValidInterval(li)) {
-          lastOne = false;
-          break;
-        }
-      }
-      if (lastOne) {
-        presentAlign = DEFAULT;
-      }
-    }
-    if (alignment == LEADING || alignment == TRAILING) {
-      // leading and trailing can't align with "closed" alignments
-      if (presentAlign == CENTER || presentAlign == BASELINE) {
-        return false;
-      }
-    } else if (alignment == CENTER) {
-      // center alignment is allowed only with already centered intervals
-      // (center alignment needs to be set up explicitly first)
-      if (presentAlign != CENTER) {
-        return false;
-      }
-    } else if (alignment == BASELINE) {
-      // baseline can't go with other "closed" alignments
-      if (presentAlign == CENTER) {
-        return false;
-      }
-    }
-    return true;
-  }
+	private boolean checkValidAlignment(LayoutInterval interval, int alignment) {
+		int presentAlign = interval.getAlignment();
+		// check if the interval is not the last one to remain in parallel group
+		if (presentAlign != DEFAULT) {
+			boolean lastOne = true;
+			Iterator it = interval.getParent().getSubIntervals();
+			while (it.hasNext()) {
+				LayoutInterval li = (LayoutInterval) it.next();
+				if (li != interval && isValidInterval(li)) {
+					lastOne = false;
+					break;
+				}
+			}
+			if (lastOne) {
+				presentAlign = DEFAULT;
+			}
+		}
+		if (alignment == LEADING || alignment == TRAILING) {
+			// leading and trailing can't align with "closed" alignments
+			if (presentAlign == CENTER || presentAlign == BASELINE) {
+				return false;
+			}
+		} else if (alignment == CENTER) {
+			// center alignment is allowed only with already centered intervals
+			// (center alignment needs to be set up explicitly first)
+			if (presentAlign != CENTER) {
+				return false;
+			}
+		} else if (alignment == BASELINE) {
+			// baseline can't go with other "closed" alignments
+			if (presentAlign == CENTER) {
+				return false;
+			}
+		}
+		return true;
+	}
 
-  private boolean checkAlignedDistance(int distance, LayoutRegion examinedSpace, int alignment) {
-    if (distance != LayoutRegion.UNKNOWN && Math.abs(distance) < SNAP_DISTANCE) {
-      // check if there is nothing in the way along the line of aligned edges
-      int x1, x2, y1, y2;
-      int indent =
-          movingSpace.positions[dimension][alignment]
-              - examinedSpace.positions[dimension][alignment]
-              - distance;
-      if (indent == 0) {
-        x1 = examinedSpace.positions[dimension][alignment] - SNAP_DISTANCE / 2;
-        x2 = examinedSpace.positions[dimension][alignment] + SNAP_DISTANCE / 2;
-        y2 = movingSpace.positions[dimension ^ 1][LEADING];
-      } else {
-        x1 = examinedSpace.positions[dimension][alignment];
-        x2 = x1 + indent + SNAP_DISTANCE / 2;
-        y2 = movingSpace.positions[dimension ^ 1][TRAILING];
-        // note indent is not offered at all by getIndentedDistance if
-        // the vertical position "does not match"
-      }
-      y1 = examinedSpace.positions[dimension ^ 1][TRAILING];
-      if (y1 > y2) {
-        y1 = movingSpace.positions[dimension ^ 1][TRAILING];
-        y2 = examinedSpace.positions[dimension ^ 1][LEADING];
-        if (y1 > y2) { // orthogonally overlaps - so can see it
-          return true;
-        }
-      }
-      return !contentOverlap(targetRoots[dimension], x1, x2, y1, y2, dimension);
-    }
-    return false;
-  }
+	private boolean checkAlignedDistance(int distance, LayoutRegion examinedSpace, int alignment) {
+		if (distance != LayoutRegion.UNKNOWN && Math.abs(distance) < SNAP_DISTANCE) {
+			// check if there is nothing in the way along the line of aligned edges
+			int x1, x2, y1, y2;
+			int indent =
+					movingSpace.positions[dimension][alignment]
+							- examinedSpace.positions[dimension][alignment]
+									- distance;
+			if (indent == 0) {
+				x1 = examinedSpace.positions[dimension][alignment] - SNAP_DISTANCE / 2;
+				x2 = examinedSpace.positions[dimension][alignment] + SNAP_DISTANCE / 2;
+				y2 = movingSpace.positions[dimension ^ 1][LEADING];
+			} else {
+				x1 = examinedSpace.positions[dimension][alignment];
+				x2 = x1 + indent + SNAP_DISTANCE / 2;
+				y2 = movingSpace.positions[dimension ^ 1][TRAILING];
+				// note indent is not offered at all by getIndentedDistance if
+				// the vertical position "does not match"
+			}
+			y1 = examinedSpace.positions[dimension ^ 1][TRAILING];
+			if (y1 > y2) {
+				y1 = movingSpace.positions[dimension ^ 1][TRAILING];
+				y2 = examinedSpace.positions[dimension ^ 1][LEADING];
+				if (y1 > y2) { // orthogonally overlaps - so can see it
+					return true;
+				}
+			}
+			return !contentOverlap(targetRoots[dimension], x1, x2, y1, y2, dimension);
+		}
+		return false;
+	}
 
-  private boolean contentOverlap(LayoutInterval group, int x1, int x2, int y1, int y2, int dim) {
-    int[][] groupPos = group.getCurrentSpace().positions;
-    for (int i = 0, n = group.getSubIntervalCount(); i < n; i++) {
-      LayoutInterval li = group.getSubInterval(i);
-      int _x1, _x2, _y1, _y2;
-      if (li.isEmptySpace()) {
-        if (group.isParallel()) {
-          continue;
-        }
-        _x1 =
-            i == 0
-                ? groupPos[dim][LEADING]
-                : group.getSubInterval(i - 1).getCurrentSpace().positions[dim][TRAILING];
-        _x2 =
-            i + 1 == n
-                ? groupPos[dim][TRAILING]
-                : group.getSubInterval(i + 1).getCurrentSpace().positions[dim][LEADING];
-        _y1 = groupPos[dim ^ 1][LEADING];
-        _y2 = groupPos[dim ^ 1][TRAILING];
-        if (_y1 < y1) {
-          _y2 = _y1;
-        } else if (_y2 > y2) {
-          _y1 = _y2;
-        }
-      } else {
-        int[][] positions = li.getCurrentSpace().positions;
-        _x1 = positions[dim][LEADING];
-        _x2 = positions[dim][TRAILING];
-        _y1 = positions[dim ^ 1][LEADING];
-        _y2 = positions[dim ^ 1][TRAILING];
-      }
-      if (_x1 < x2 && _x2 > x1 && _y1 < y2 && _y2 > y1) { // overlap
-        if (li.isComponent()) {
-          if (isValidInterval(li)) {
-            return true;
-          }
-        } else if (li.isEmptySpace()) {
-          if (i > 0 && i + 1 < n // first/last space is not in the way
-              && (li.getMinimumSize() == NOT_EXPLICITLY_DEFINED || li.getMinimumSize() == USE_PREFERRED_SIZE)
-              && li.getPreferredSize() == NOT_EXPLICITLY_DEFINED
-              && (li.getMaximumSize() == NOT_EXPLICITLY_DEFINED || li.getMaximumSize() == USE_PREFERRED_SIZE)) { // preferred padding might be in the way
-            LayoutInterval prev = group.getSubInterval(i - 1);
-            LayoutInterval next = group.getSubInterval(i + 1);
-            if ((!prev.isComponent() || isValidInterval(prev))
-                && (!next.isComponent() || isValidInterval(next))) { // preferred padding between valid intervals (i.e. not next to the moving component itself)
-              return true;
-            }
-          }
-          if (_x1 >= x1 && _x2 <= x2) {
-            return false; // goes over a gap in a sequence - so no overlap
-          }
-        } else if (li.isGroup() && contentOverlap(li, x1, x2, y1, y2, dim)) {
-          return true;
-        }
-      }
-    }
-    return false;
-  }
+	private boolean contentOverlap(LayoutInterval group, int x1, int x2, int y1, int y2, int dim) {
+		int[][] groupPos = group.getCurrentSpace().positions;
+		for (int i = 0, n = group.getSubIntervalCount(); i < n; i++) {
+			LayoutInterval li = group.getSubInterval(i);
+			int _x1, _x2, _y1, _y2;
+			if (li.isEmptySpace()) {
+				if (group.isParallel()) {
+					continue;
+				}
+				_x1 =
+						i == 0
+						? groupPos[dim][LEADING]
+								: group.getSubInterval(i - 1).getCurrentSpace().positions[dim][TRAILING];
+				_x2 =
+						i + 1 == n
+						? groupPos[dim][TRAILING]
+								: group.getSubInterval(i + 1).getCurrentSpace().positions[dim][LEADING];
+				_y1 = groupPos[dim ^ 1][LEADING];
+				_y2 = groupPos[dim ^ 1][TRAILING];
+				if (_y1 < y1) {
+					_y2 = _y1;
+				} else if (_y2 > y2) {
+					_y1 = _y2;
+				}
+			} else {
+				int[][] positions = li.getCurrentSpace().positions;
+				_x1 = positions[dim][LEADING];
+				_x2 = positions[dim][TRAILING];
+				_y1 = positions[dim ^ 1][LEADING];
+				_y2 = positions[dim ^ 1][TRAILING];
+			}
+			if (_x1 < x2 && _x2 > x1 && _y1 < y2 && _y2 > y1) { // overlap
+				if (li.isComponent()) {
+					if (isValidInterval(li)) {
+						return true;
+					}
+				} else if (li.isEmptySpace()) {
+					if (i > 0 && i + 1 < n // first/last space is not in the way
+							&& (li.getMinimumSize() == NOT_EXPLICITLY_DEFINED || li.getMinimumSize() == USE_PREFERRED_SIZE)
+							&& li.getPreferredSize() == NOT_EXPLICITLY_DEFINED
+							&& (li.getMaximumSize() == NOT_EXPLICITLY_DEFINED || li.getMaximumSize() == USE_PREFERRED_SIZE)) { // preferred padding might be in the way
+						LayoutInterval prev = group.getSubInterval(i - 1);
+						LayoutInterval next = group.getSubInterval(i + 1);
+						if ((!prev.isComponent() || isValidInterval(prev))
+								&& (!next.isComponent() || isValidInterval(next))) { // preferred padding between valid intervals (i.e. not next to the moving component itself)
+							return true;
+						}
+					}
+					if (_x1 >= x1 && _x2 <= x2) {
+						return false; // goes over a gap in a sequence - so no overlap
+					}
+				} else if (li.isGroup() && contentOverlap(li, x1, x2, y1, y2, dim)) {
+					return true;
+				}
+			}
+		}
+		return false;
+	}
 
-  /**
-   * @return int as result of comparison: 1 - new position is better -1 - old position is better 0 -
-   *         the positions are equal
-   */
-  private int compareAlignedPosition(LayoutInterval newInterval,
-      int newDistance,
-      PositionDef bestSoFar) {
-    if (!bestSoFar.isSet()) {
-      return 1; // best not set yet
-    }
-    // compute direct distance
-    if (newDistance < 0) {
-      newDistance = -newDistance;
-    }
-    int oldDistance = Math.abs(bestSoFar.distance);
-    if (newInterval.getParent() == null) {
-      return newDistance < oldDistance ? 1 : -1;
-    }
-    if (bestSoFar.interval.getParent() == null) {
-      return oldDistance < newDistance ? -1 : 1;
-    }
-    // compute orthogonal distance
-    LayoutRegion newSpace = newInterval.getCurrentSpace();
-    LayoutRegion oldSpace = bestSoFar.interval.getCurrentSpace();
-    int newOrtDst = Math.abs(LayoutRegion.nonOverlapDistance(newSpace, movingSpace, dimension ^ 1));
-    int oldOrtDst = Math.abs(LayoutRegion.nonOverlapDistance(oldSpace, movingSpace, dimension ^ 1));
-    // compute score
-    int newScore = getDistanceScore(newDistance, newOrtDst);
-    int oldScore = getDistanceScore(oldDistance, oldOrtDst);
-    if (newScore != oldScore) {
-      return newScore < oldScore ? 1 : -1;
-    }
-    return 0;
-  }
+	/**
+	 * @return int as result of comparison: 1 - new position is better -1 - old position is better 0 -
+	 *         the positions are equal
+	 */
+	private int compareAlignedPosition(LayoutInterval newInterval,
+			int newDistance,
+			PositionDef bestSoFar) {
+		if (!bestSoFar.isSet()) {
+			return 1; // best not set yet
+		}
+		// compute direct distance
+		if (newDistance < 0) {
+			newDistance = -newDistance;
+		}
+		int oldDistance = Math.abs(bestSoFar.distance);
+		if (newInterval.getParent() == null) {
+			return newDistance < oldDistance ? 1 : -1;
+		}
+		if (bestSoFar.interval.getParent() == null) {
+			return oldDistance < newDistance ? -1 : 1;
+		}
+		// compute orthogonal distance
+		LayoutRegion newSpace = newInterval.getCurrentSpace();
+		LayoutRegion oldSpace = bestSoFar.interval.getCurrentSpace();
+		int newOrtDst = Math.abs(LayoutRegion.nonOverlapDistance(newSpace, movingSpace, dimension ^ 1));
+		int oldOrtDst = Math.abs(LayoutRegion.nonOverlapDistance(oldSpace, movingSpace, dimension ^ 1));
+		// compute score
+		int newScore = getDistanceScore(newDistance, newOrtDst);
+		int oldScore = getDistanceScore(oldDistance, oldOrtDst);
+		if (newScore != oldScore) {
+			return newScore < oldScore ? 1 : -1;
+		}
+		return 0;
+	}
 
-  private static int getDistanceScore(int directDistance, int ortDistance) {
-    // orthogonal distance >= SNAP_DISTANCE is penalized
-    return directDistance + ortDistance / SNAP_DISTANCE;
-  }
+	private static int getDistanceScore(int directDistance, int ortDistance) {
+		// orthogonal distance >= SNAP_DISTANCE is penalized
+		return directDistance + ortDistance / SNAP_DISTANCE;
+	}
 
-  private PositionDef chooseBestNextTo() {
-    PositionDef[] positions = findingsNextTo[dimension];
-    PositionDef bestPos = null;
-    int bestDst = 0;
-    for (int i = 0; i < positions.length; i++) {
-      PositionDef pos = positions[i];
-      if (pos.isSet()) {
-        int dst = Math.abs(pos.distance);
-        if (bestPos == null || dst < bestDst || dst == bestDst && moveDirection[dimension] == i) {
-          bestPos = pos;
-          bestDst = dst;
-        }
-      }
-    }
-    return bestPos;
-  }
+	private PositionDef chooseBestNextTo() {
+		PositionDef[] positions = findingsNextTo[dimension];
+		PositionDef bestPos = null;
+		int bestDst = 0;
+		for (int i = 0; i < positions.length; i++) {
+			PositionDef pos = positions[i];
+			if (pos.isSet()) {
+				int dst = Math.abs(pos.distance);
+				if (bestPos == null || dst < bestDst || dst == bestDst && moveDirection[dimension] == i) {
+					bestPos = pos;
+					bestDst = dst;
+				}
+			}
+		}
+		return bestPos;
+	}
 
-  private PositionDef chooseBestAligned() {
-    PositionDef[] positions = findingsAligned[dimension];
-    PositionDef bestPos = null;
-    for (int i = positions.length - 1; i >= 0; i--) {
-      PositionDef pos = positions[i];
-      if (pos.isSet()) {
-        if (i == BASELINE || i == CENTER) {
-          return pos;
-        }
-        if (bestPos == null) {
-          bestPos = pos;
-        } else {
-          int c = compareAlignedPosition(pos.interval, pos.distance, bestPos);
-          if (c == 0) {
-            c = compareAlignedDirection(pos, bestPos);
-          }
-          if (c > 0) {// || (c == 0 && moveDirection[dimension] != bestPos.alignment)) {
-            bestPos = pos;
-          }
-        }
-      }
-    }
-    return bestPos;
-  }
+	private PositionDef chooseBestAligned() {
+		PositionDef[] positions = findingsAligned[dimension];
+		PositionDef bestPos = null;
+		for (int i = positions.length - 1; i >= 0; i--) {
+			PositionDef pos = positions[i];
+			if (pos.isSet()) {
+				if (i == BASELINE || i == CENTER) {
+					return pos;
+				}
+				if (bestPos == null) {
+					bestPos = pos;
+				} else {
+					int c = compareAlignedPosition(pos.interval, pos.distance, bestPos);
+					if (c == 0) {
+						c = compareAlignedDirection(pos, bestPos);
+					}
+					if (c > 0) {// || (c == 0 && moveDirection[dimension] != bestPos.alignment)) {
+						bestPos = pos;
+					}
+				}
+			}
+		}
+		return bestPos;
+	}
 
-  private int compareAlignedDirection(PositionDef pos1, PositionDef pos2) {
-    boolean p1 = isSuitableAlignment(pos1);
-    boolean p2 = isSuitableAlignment(pos2);
-    if (p1 == p2) {
-      p1 = pos1.alignment == moveDirection[dimension];
-      p2 = pos2.alignment == moveDirection[dimension];
-      if (p1 == p2) {
-        return 0;
-      }
-    }
-    return p1 ? 1 : -1;
-  }
+	private int compareAlignedDirection(PositionDef pos1, PositionDef pos2) {
+		boolean p1 = isSuitableAlignment(pos1);
+		boolean p2 = isSuitableAlignment(pos2);
+		if (p1 == p2) {
+			p1 = pos1.alignment == moveDirection[dimension];
+			p2 = pos2.alignment == moveDirection[dimension];
+			if (p1 == p2) {
+				return 0;
+			}
+		}
+		return p1 ? 1 : -1;
+	}
 
-  private static boolean isSuitableAlignment(PositionDef pos) {
-    assert pos.alignment == LEADING || pos.alignment == TRAILING;
-    LayoutInterval parParent = LayoutInterval.getFirstParent(pos.interval, PARALLEL);
-    return LayoutInterval.isAlignedAtBorder(pos.interval, parParent, pos.alignment)
-        || !LayoutInterval.isAlignedAtBorder(pos.interval, parParent, pos.alignment ^ 1);
-  }
+	private static boolean isSuitableAlignment(PositionDef pos) {
+		assert pos.alignment == LEADING || pos.alignment == TRAILING;
+		LayoutInterval parParent = LayoutInterval.getFirstParent(pos.interval, PARALLEL);
+		return LayoutInterval.isAlignedAtBorder(pos.interval, parParent, pos.alignment)
+				|| !LayoutInterval.isAlignedAtBorder(pos.interval, parParent, pos.alignment ^ 1);
+	}
 
-  private static int smallestDistance(PositionDef[] positions) {
-    int bestDst = -1;
-    for (int i = 0; i < positions.length; i++) {
-      PositionDef pos = positions[i];
-      if (pos.isSet()) {
-        int dst = Math.abs(pos.distance);
-        if (bestDst < 0 || dst < bestDst) {
-          bestDst = dst;
-        }
-      }
-    }
-    return bestDst;
-  }
+	private static int smallestDistance(PositionDef[] positions) {
+		int bestDst = -1;
+		for (int i = 0; i < positions.length; i++) {
+			PositionDef pos = positions[i];
+			if (pos.isSet()) {
+				int dst = Math.abs(pos.distance);
+				if (bestDst < 0 || dst < bestDst) {
+					bestDst = dst;
+				}
+			}
+		}
+		return bestDst;
+	}
 
-  private boolean isPreferredNextTo(PositionDef bestNextTo, PositionDef bestAligned) {
-    if (bestNextTo != null && bestAligned != null) {
-      if (operation == RESIZING) {
-        // prefer aligned resizing if already aligned at the other edge
-        // otherwise prefer next to
-        LayoutInterval resizing = movingComponents[0].getLayoutInterval(dimension);
-        int fixedEdge = movingEdges[dimension] ^ 1;
-        if (bestAligned.interval.isParentOf(resizing)) {
-          if (LayoutInterval.isAlignedAtBorder(resizing, bestAligned.interval, fixedEdge)) {
-            return false;
-          }
-        } else {
-          LayoutInterval commonParent =
-              LayoutInterval.getCommonParent(resizing, bestAligned.interval);
-          if (LayoutInterval.isAlignedAtBorder(resizing, commonParent, fixedEdge)
-              && LayoutInterval.isAlignedAtBorder(bestAligned.interval, commonParent, fixedEdge)) {
-            return false;
-          }
-        }
-        return true;
-      }
-    }
-    return dimension == HORIZONTAL;
-  }
+	private boolean isPreferredNextTo(PositionDef bestNextTo, PositionDef bestAligned) {
+		if (bestNextTo != null && bestAligned != null) {
+			if (operation == RESIZING) {
+				// prefer aligned resizing if already aligned at the other edge
+				// otherwise prefer next to
+				LayoutInterval resizing = movingComponents[0].getLayoutInterval(dimension);
+				int fixedEdge = movingEdges[dimension] ^ 1;
+				if (bestAligned.interval.isParentOf(resizing)) {
+					if (LayoutInterval.isAlignedAtBorder(resizing, bestAligned.interval, fixedEdge)) {
+						return false;
+					}
+				} else {
+					LayoutInterval commonParent =
+							LayoutInterval.getCommonParent(resizing, bestAligned.interval);
+					if (LayoutInterval.isAlignedAtBorder(resizing, commonParent, fixedEdge)
+							&& LayoutInterval.isAlignedAtBorder(bestAligned.interval, commonParent, fixedEdge)) {
+						return false;
+					}
+				}
+				return true;
+			}
+		}
+		return dimension == HORIZONTAL;
+	}
 
-  private static boolean relatedPositions(PositionDef nextTo, PositionDef aligned) {
-    if (nextTo.interval == null || aligned.interval == null) {
-      return false;
-    }
-    LayoutInterval neighbor =
-        LayoutInterval.getNeighbor(aligned.interval, nextTo.alignment, true, true, false);
-    return neighbor == nextTo.interval || neighbor == null && nextTo.interval.getParent() == null;
-  }
+	private static boolean relatedPositions(PositionDef nextTo, PositionDef aligned) {
+		if (nextTo.interval == null || aligned.interval == null) {
+			return false;
+		}
+		LayoutInterval neighbor =
+				LayoutInterval.getNeighbor(aligned.interval, nextTo.alignment, true, true, false);
+		return neighbor == nextTo.interval || neighbor == null && nextTo.interval.getParent() == null;
+	}
 
-  private PositionDef getAlignedEqualToNextTo(PositionDef bestNextTo) {
-    if (operation == RESIZING || !bestNextTo.snapped) {
-      return null;
-    }
-    int alignment = bestNextTo.alignment;
-    PositionDef alignedAlternative = findingsAligned[dimension][alignment];
-    if (alignedAlternative != null && alignedAlternative.distance == bestNextTo.distance) {
-      // choose aligned position if its interval is just next to
-      // bestNextTo.interval (both positions would lead to same result)
-      LayoutInterval neighbor =
-          LayoutInterval.getNeighbor(alignedAlternative.interval, alignment, true, true, false);
-      if (neighbor != null
-          && (neighbor == bestNextTo.interval || neighbor.isParentOf(bestNextTo.interval))) {
-        return alignedAlternative;
-      }
-    }
-    return null;
-  }
+	private PositionDef getAlignedEqualToNextTo(PositionDef bestNextTo) {
+		if (operation == RESIZING || !bestNextTo.snapped) {
+			return null;
+		}
+		int alignment = bestNextTo.alignment;
+		PositionDef alignedAlternative = findingsAligned[dimension][alignment];
+		if (alignedAlternative != null && alignedAlternative.distance == bestNextTo.distance) {
+			// choose aligned position if its interval is just next to
+			// bestNextTo.interval (both positions would lead to same result)
+			LayoutInterval neighbor =
+					LayoutInterval.getNeighbor(alignedAlternative.interval, alignment, true, true, false);
+			if (neighbor != null
+					&& (neighbor == bestNextTo.interval || neighbor.isParentOf(bestNextTo.interval))) {
+				return alignedAlternative;
+			}
+		}
+		return null;
+	}
 
-  /**
-   * Checks whether given interval can be used for the moving interval to relate to. Returns false
-   * for other moving intervals, or for groups that won't survive removal of the moving intervals
-   * from their original positions.
-   */
-  private boolean isValidInterval(LayoutInterval interval) {
-    if (operation == ADDING) {
-      return true;
-    }
-    if (interval.isGroup()) {
-      // as the moving intervals are going to be removed first, a valid
-      // group must contain at least two other intervals - otherwise it
-      // is dissolved before the moving intervals are re-added
-      int count = 0;
-      Iterator it = interval.getSubIntervals();
-      while (it.hasNext()) {
-        LayoutInterval li = (LayoutInterval) it.next();
-        if ((!li.isEmptySpace() || interval.isSequential()) && isValidInterval(li)) { // filling gap (in parallel group) does not count
-          count++;
-          if (count > 1) {
-            return true;
-          }
-        }
-      }
-      return false;
-    } else {
-      for (int i = 0; i < movingComponents.length; i++) {
-        if (movingComponents[i].getLayoutInterval(dimension) == interval) {
-          return false;
-        }
-      }
-      return true;
-    }
-  }
+	/**
+	 * Checks whether given interval can be used for the moving interval to relate to. Returns false
+	 * for other moving intervals, or for groups that won't survive removal of the moving intervals
+	 * from their original positions.
+	 */
+	private boolean isValidInterval(LayoutInterval interval) {
+		if (operation == ADDING) {
+			return true;
+		}
+		if (interval.isGroup()) {
+			// as the moving intervals are going to be removed first, a valid
+			// group must contain at least two other intervals - otherwise it
+			// is dissolved before the moving intervals are re-added
+			int count = 0;
+			Iterator it = interval.getSubIntervals();
+			while (it.hasNext()) {
+				LayoutInterval li = (LayoutInterval) it.next();
+				if ((!li.isEmptySpace() || interval.isSequential()) && isValidInterval(li)) { // filling gap (in parallel group) does not count
+					count++;
+					if (count > 1) {
+						return true;
+					}
+				}
+			}
+			return false;
+		} else {
+			for (int i = 0; i < movingComponents.length; i++) {
+				if (movingComponents[i].getLayoutInterval(dimension) == interval) {
+					return false;
+				}
+			}
+			return true;
+		}
+	}
 
-  /**
-   * @return 1 - is valid for next to resizing 0 - not valid, but some sub-interval could be -1 -
-   *         not valid, even no sub-interval
-   */
-  private int isValidNextToResizing(LayoutInterval interval, int alignment) {
-    assert alignment == LEADING || alignment == TRAILING;
-    LayoutInterval resizing = movingComponents[0].getLayoutInterval(dimension);
-    if (interval.isParentOf(resizing)) {
-      return interval.getParent() == null
-          && clearWayToParent(resizing, interval, dimension, alignment)
-          && (!toDeepToMerge(resizing, interval, alignment) || LayoutInterval.getNeighbor(
-              resizing,
-              alignment,
-              true,
-              true,
-              false) == null) ? 1 : 0;
-    }
-    LayoutInterval commonParent = LayoutInterval.getCommonParent(interval, resizing);
-    if (commonParent.isSequential()) {
-      if (toDeepToMerge(resizing, commonParent, alignment)
-          && LayoutInterval.getNeighbor(resizing, alignment, true, true, false) != interval) {
-        return -1;
-      }
-      resizing = getClearWayToParent(resizing, commonParent, dimension, alignment);
-      if (resizing == null) {
-        return -1;
-      }
-      while (interval.getParent() != commonParent) {
-        interval = interval.getParent();
-      }
-      int startIndex = commonParent.indexOf(alignment == LEADING ? interval : resizing) + 1;
-      int endIndex = commonParent.indexOf(alignment == LEADING ? resizing : interval) - 1;
-      return startIndex <= endIndex
-          && !LayoutUtils.contentOverlap(
-              movingSpace,
-              commonParent,
-              startIndex,
-              endIndex,
-              dimension ^ 1) ? 1 : -1;
-    }
-    return -1;
-  }
+	/**
+	 * @return 1 - is valid for next to resizing 0 - not valid, but some sub-interval could be -1 -
+	 *         not valid, even no sub-interval
+	 */
+	private int isValidNextToResizing(LayoutInterval interval, int alignment) {
+		assert alignment == LEADING || alignment == TRAILING;
+		LayoutInterval resizing = movingComponents[0].getLayoutInterval(dimension);
+		if (interval.isParentOf(resizing)) {
+			return interval.getParent() == null
+					&& clearWayToParent(resizing, interval, dimension, alignment)
+					&& (!toDeepToMerge(resizing, interval, alignment) || LayoutInterval.getNeighbor(
+							resizing,
+							alignment,
+							true,
+							true,
+							false) == null) ? 1 : 0;
+		}
+		LayoutInterval commonParent = LayoutInterval.getCommonParent(interval, resizing);
+		if (commonParent.isSequential()) {
+			if (toDeepToMerge(resizing, commonParent, alignment)
+					&& LayoutInterval.getNeighbor(resizing, alignment, true, true, false) != interval) {
+				return -1;
+			}
+			resizing = getClearWayToParent(resizing, commonParent, dimension, alignment);
+			if (resizing == null) {
+				return -1;
+			}
+			while (interval.getParent() != commonParent) {
+				interval = interval.getParent();
+			}
+			int startIndex = commonParent.indexOf(alignment == LEADING ? interval : resizing) + 1;
+			int endIndex = commonParent.indexOf(alignment == LEADING ? resizing : interval) - 1;
+			return startIndex <= endIndex
+					&& !LayoutUtils.contentOverlap(
+							movingSpace,
+							commonParent,
+							startIndex,
+							endIndex,
+							dimension ^ 1) ? 1 : -1;
+		}
+		return -1;
+	}
 
-  private boolean isValidAlignedResizing(LayoutInterval interval, int alignment) {
-    // the examined interval position must be reachable with positive size
-    // of the resizing interval
-    int dst =
-        LayoutRegion.distance(
-            movingSpace,
-            interval.getCurrentSpace(),
-            dimension,
-            alignment ^ 1,
-            alignment);
-    if (alignment == LEADING && dst <= 0 || alignment == TRAILING && dst >= 0) {
-      // now exclude resizing across an interval in the same sequence
-      LayoutInterval resizing = movingComponents[0].getLayoutInterval(dimension);
-      if (interval.isParentOf(resizing)) {
-        if (!clearWayToParent(resizing, interval, dimension, alignment)) {
-          return false;
-        }
-        if (toDeepToMerge(resizing, interval, alignment)) {
-          LayoutInterval neighbor =
-              LayoutInterval.getNeighbor(resizing, alignment, true, true, false);
-          if (neighbor != null && interval.isParentOf(neighbor)) {
-            return false;
-          }
-        }
-        return true;
-      } else {
-        LayoutInterval commonParent = LayoutInterval.getCommonParent(interval, resizing);
-        if (commonParent.isParallel()) {
-          return true;
-        }
-        if (toDeepToMerge(resizing, commonParent, alignment)) {
-          return false;
-        }
-        // if in a sequence, aligning is possible if the intervals don't overlap orthogonally
-        resizing = getClearWayToParent(resizing, commonParent, dimension, alignment);
-        if (resizing == null) {
-          return false;
-        }
-        while (interval.getParent() != commonParent) {
-          interval = interval.getParent();
-        }
-        int startIndex, endIndex;
-        if (alignment == LEADING) {
-          startIndex = commonParent.indexOf(interval);
-          endIndex = commonParent.indexOf(resizing) - 1;
-        } else { // TRAILING
-          startIndex = commonParent.indexOf(resizing) + 1;
-          endIndex = commonParent.indexOf(interval);
-        }
-        return startIndex <= endIndex
-            && !LayoutUtils.contentOverlap(
-                movingSpace,
-                commonParent,
-                startIndex,
-                endIndex,
-                dimension ^ 1);
-      }
-    }
-    return false;
-  }
+	private boolean isValidAlignedResizing(LayoutInterval interval, int alignment) {
+		// the examined interval position must be reachable with positive size
+		// of the resizing interval
+		int dst =
+				LayoutRegion.distance(
+						movingSpace,
+						interval.getCurrentSpace(),
+						dimension,
+						alignment ^ 1,
+						alignment);
+		if (alignment == LEADING && dst <= 0 || alignment == TRAILING && dst >= 0) {
+			// now exclude resizing across an interval in the same sequence
+			LayoutInterval resizing = movingComponents[0].getLayoutInterval(dimension);
+			if (interval.isParentOf(resizing)) {
+				if (!clearWayToParent(resizing, interval, dimension, alignment)) {
+					return false;
+				}
+				if (toDeepToMerge(resizing, interval, alignment)) {
+					LayoutInterval neighbor =
+							LayoutInterval.getNeighbor(resizing, alignment, true, true, false);
+					if (neighbor != null && interval.isParentOf(neighbor)) {
+						return false;
+					}
+				}
+				return true;
+			} else {
+				LayoutInterval commonParent = LayoutInterval.getCommonParent(interval, resizing);
+				if (commonParent.isParallel()) {
+					return true;
+				}
+				if (toDeepToMerge(resizing, commonParent, alignment)) {
+					return false;
+				}
+				// if in a sequence, aligning is possible if the intervals don't overlap orthogonally
+				resizing = getClearWayToParent(resizing, commonParent, dimension, alignment);
+				if (resizing == null) {
+					return false;
+				}
+				while (interval.getParent() != commonParent) {
+					interval = interval.getParent();
+				}
+				int startIndex, endIndex;
+				if (alignment == LEADING) {
+					startIndex = commonParent.indexOf(interval);
+					endIndex = commonParent.indexOf(resizing) - 1;
+				} else { // TRAILING
+					startIndex = commonParent.indexOf(resizing) + 1;
+					endIndex = commonParent.indexOf(interval);
+				}
+				return startIndex <= endIndex
+						&& !LayoutUtils.contentOverlap(
+								movingSpace,
+								commonParent,
+								startIndex,
+								endIndex,
+								dimension ^ 1);
+			}
+		}
+		return false;
+	}
 
-  private static boolean clearWayToParent(LayoutInterval interval,
-      LayoutInterval parent,
-      int dimension,
-      int alignment) {
-    return getClearWayToParent(interval, parent, dimension, alignment) != null;
-  }
+	private static boolean clearWayToParent(LayoutInterval interval,
+			LayoutInterval parent,
+			int dimension,
+			int alignment) {
+		return getClearWayToParent(interval, parent, dimension, alignment) != null;
+	}
 
-  private static LayoutInterval getClearWayToParent(LayoutInterval interval,
-      LayoutInterval topParent,
-      int dimension,
-      int alignment) {
-    LayoutRegion space = interval.getCurrentSpace();
-    LayoutInterval parent = interval.getParent();
-    while (parent != topParent) {
-      if (parent.isSequential()) {
-        int startIndex, endIndex;
-        if (alignment == LEADING) {
-          startIndex = 0;
-          endIndex = parent.indexOf(interval) - 1;
-        } else {
-          startIndex = parent.indexOf(interval) + 1;
-          endIndex = parent.getSubIntervalCount() - 1;
-        }
-        if (startIndex <= endIndex
-            && LayoutUtils.contentOverlap(space, parent, startIndex, endIndex, dimension ^ 1)) { // there is a sub-interval in the way
-          return null;
-        }
-      }
-      interval = parent;
-      parent = interval.getParent();
-    }
-    return interval;
-  }
+	private static LayoutInterval getClearWayToParent(LayoutInterval interval,
+			LayoutInterval topParent,
+			int dimension,
+			int alignment) {
+		LayoutRegion space = interval.getCurrentSpace();
+		LayoutInterval parent = interval.getParent();
+		while (parent != topParent) {
+			if (parent.isSequential()) {
+				int startIndex, endIndex;
+				if (alignment == LEADING) {
+					startIndex = 0;
+					endIndex = parent.indexOf(interval) - 1;
+				} else {
+					startIndex = parent.indexOf(interval) + 1;
+					endIndex = parent.getSubIntervalCount() - 1;
+				}
+				if (startIndex <= endIndex
+						&& LayoutUtils.contentOverlap(space, parent, startIndex, endIndex, dimension ^ 1)) { // there is a sub-interval in the way
+					return null;
+				}
+			}
+			interval = parent;
+			parent = interval.getParent();
+		}
+		return interval;
+	}
 
-  // When resizing we can't attach the component edge to a component that is
-  // more than one level of unaligned parallel groups away.
-  // See LayoutFeeder.accommodateSizeInSequence.
-  private static boolean toDeepToMerge(LayoutInterval interval, LayoutInterval parent, int alignment) {
-    int level = 0;
-    int a = DEFAULT;
-    LayoutInterval prev = null;
-    LayoutInterval p = interval.getParent();
-    while (p != parent) {
-      if (p.isParallel()) {
-        if (a == DEFAULT) {
-          a = interval.getAlignment();
-          if (a != alignment) {
-            level++;
-          }
-        } else if (!LayoutInterval.isAlignedAtBorder(prev, p, a)) {
-          level++;
-          if (level > 1) {
-            return true;
-          }
-        }
-        prev = p;
-      }
-      interval = p;
-      p = interval.getParent();
-    }
-    return level >= 2;
-  }
+	// When resizing we can't attach the component edge to a component that is
+	// more than one level of unaligned parallel groups away.
+	// See LayoutFeeder.accommodateSizeInSequence.
+	private static boolean toDeepToMerge(LayoutInterval interval, LayoutInterval parent, int alignment) {
+		int level = 0;
+		int a = DEFAULT;
+		LayoutInterval prev = null;
+		LayoutInterval p = interval.getParent();
+		while (p != parent) {
+			if (p.isParallel()) {
+				if (a == DEFAULT) {
+					a = interval.getAlignment();
+					if (a != alignment) {
+						level++;
+					}
+				} else if (!LayoutInterval.isAlignedAtBorder(prev, p, a)) {
+					level++;
+					if (level > 1) {
+						return true;
+					}
+				}
+				prev = p;
+			}
+			interval = p;
+			p = interval.getParent();
+		}
+		return level >= 2;
+	}
 
-  /**
-   * Finds value of padding between a moving component and given layout interval.
-   *
-   * @param alignment
-   *          edge of the component
-   */
-  int[] findPaddings(LayoutInterval interval,
-      LayoutInterval moving,
-      PaddingType paddingType,
-      int dimension,
-      int alignment) {
-    int oppAlignment = alignment == LEADING ? TRAILING : LEADING;
-    List movingComps = LayoutUtils.edgeSubComponents(moving, alignment);
-    List fixedComps = LayoutUtils.edgeSubComponents(interval, oppAlignment);
-    List sources = alignment == LEADING ? fixedComps : movingComps;
-    List targets = alignment == LEADING ? movingComps : fixedComps;
-    Map<String, LayoutRegion> map = new HashMap<String, LayoutRegion>();
-    for (int i = 0; i < movingComponents.length; i++) {
-      map.put(movingComponents[i].getId(), movingBounds[i]);
-    }
-    return LayoutUtils.getSizesOfDefaultGap(
-        sources,
-        targets,
-        paddingType,
-        visualMapper,
-        targetContainer.getId(),
-        map);
-  }
+	/**
+	 * Finds value of padding between a moving component and given layout interval.
+	 *
+	 * @param alignment
+	 *          edge of the component
+	 */
+	int[] findPaddings(LayoutInterval interval,
+			LayoutInterval moving,
+			PaddingType paddingType,
+			int dimension,
+			int alignment) {
+		int oppAlignment = alignment == LEADING ? TRAILING : LEADING;
+		List movingComps = LayoutUtils.edgeSubComponents(moving, alignment);
+		List fixedComps = LayoutUtils.edgeSubComponents(interval, oppAlignment);
+		List sources = alignment == LEADING ? fixedComps : movingComps;
+		List targets = alignment == LEADING ? movingComps : fixedComps;
+		Map<String, LayoutRegion> map = new HashMap<String, LayoutRegion>();
+		for (int i = 0; i < movingComponents.length; i++) {
+			map.put(movingComponents[i].getId(), movingBounds[i]);
+		}
+		return LayoutUtils.getSizesOfDefaultGap(
+				sources,
+				targets,
+				paddingType,
+				visualMapper,
+				targetContainer.getId(),
+				map);
+	}
 
-  /**
-   * @return <= 0 if no indentation is recommended for given component pair
-   */
-  int findIndent(LayoutComponent mainComp,
-      LayoutComponent indentedComp,
-      int dimension,
-      int alignment) {
-    return visualMapper.getPreferredPadding(
-        mainComp.getId(),
-        indentedComp.getId(),
-        dimension,
-        alignment,
-        PaddingType.INDENT);
-  }
+	/**
+	 * @return <= 0 if no indentation is recommended for given component pair
+	 */
+	int findIndent(LayoutComponent mainComp,
+			LayoutComponent indentedComp,
+			int dimension,
+			int alignment) {
+		return visualMapper.getPreferredPadding(
+				mainComp.getId(),
+				indentedComp.getId(),
+				dimension,
+				alignment,
+				PaddingType.INDENT);
+	}
 
-  // -----
-  // innerclasses
-  static class PositionDef {
-    private int distance = LayoutRegion.UNKNOWN;
-    LayoutInterval interval;
-    int alignment = LayoutRegion.NO_POINT;
-    boolean nextTo;
-    boolean snapped;
-    PaddingType paddingType;
-    private int[] paddingSizes; // remembered for painting
+	// -----
+	// innerclasses
+	static class PositionDef {
+		private int distance = LayoutRegion.UNKNOWN;
+		LayoutInterval interval;
+		int alignment = LayoutRegion.NO_POINT;
+		boolean nextTo;
+		boolean snapped;
+		PaddingType paddingType;
+		private int[] paddingSizes; // remembered for painting
 
-    private void reset() {
-      distance = LayoutRegion.UNKNOWN;
-      interval = null;
-      alignment = LayoutRegion.NO_POINT;
-    }
+		private void reset() {
+			distance = LayoutRegion.UNKNOWN;
+			interval = null;
+			alignment = LayoutRegion.NO_POINT;
+		}
 
-    private boolean isSet() {
-      return interval != null;
-    }
+		private boolean isSet() {
+			return interval != null;
+		}
 
-    @Override
-    public String toString() {
-      StringBuffer sb = new StringBuffer();
-      sb.append("distance=").append(distance); // NOI18N
-      sb.append(",alignment=").append(alignment); // NOI18N
-      sb.append(",nextTo=").append(nextTo); // NOI18N
-      sb.append(",snapped=").append(snapped); // NOI18N
-      return sb.toString();
-    }
-  }
-  static class SizeDef {
-    private int originalSize;
-    private int preferredSize;
-    private int zeroPreferredSize; // size of container if resizing gap goes to zero
-    private LayoutInterval resizingGap; // inside resizing container
-    private int originalGapSize;
-    private int preferredGapSize;
+		@Override
+		public String toString() {
+			StringBuffer sb = new StringBuffer();
+			sb.append("distance=").append(distance); // NOI18N
+			sb.append(",alignment=").append(alignment); // NOI18N
+			sb.append(",nextTo=").append(nextTo); // NOI18N
+			sb.append(",snapped=").append(snapped); // NOI18N
+			return sb.toString();
+		}
+	}
+	static class SizeDef {
+		private int originalSize;
+		private int preferredSize;
+		private int zeroPreferredSize; // size of container if resizing gap goes to zero
+		private LayoutInterval resizingGap; // inside resizing container
+		private int originalGapSize;
+		private int preferredGapSize;
 
-    LayoutInterval getResizingGap() {
-      return resizingGap;
-    }
+		LayoutInterval getResizingGap() {
+			return resizingGap;
+		}
 
-    int getResizingGapSize(int currentSize) {
-      if (resizingGap == null) {
-        return LayoutRegion.UNKNOWN;
-      }
-      if (currentSize == zeroPreferredSize) {
-        return 0;
-      }
-      int gapSize = originalGapSize - originalSize + currentSize;
-      return currentSize == preferredSize || gapSize < 0 ? //preferredGapSize
-          NOT_EXPLICITLY_DEFINED
-          : gapSize;
-    }
-  }
+		int getResizingGapSize(int currentSize) {
+			if (resizingGap == null) {
+				return LayoutRegion.UNKNOWN;
+			}
+			if (currentSize == zeroPreferredSize) {
+				return 0;
+			}
+			int gapSize = originalGapSize - originalSize + currentSize;
+			return currentSize == preferredSize || gapSize < 0 ? //preferredGapSize
+					NOT_EXPLICITLY_DEFINED
+					: gapSize;
+		}
+	}
 }
diff --git a/org.eclipse.wb.layout.group/netbeans-src/org/netbeans/modules/form/layoutdesign/LayoutEvent.java b/org.eclipse.wb.layout.group/netbeans-src/org/netbeans/modules/form/layoutdesign/LayoutEvent.java
index 0379521e7..67a3a4d03 100644
--- a/org.eclipse.wb.layout.group/netbeans-src/org/netbeans/modules/form/layoutdesign/LayoutEvent.java
+++ b/org.eclipse.wb.layout.group/netbeans-src/org/netbeans/modules/form/layoutdesign/LayoutEvent.java
@@ -37,339 +37,339 @@
  * Holds information about a change in the layout model. Is able to undo/redo the change.
  */
 abstract class LayoutEvent extends EventObject {
-  private static final long serialVersionUID = 1L;
-  static final int COMPONENT_ADDED = 1;
-  static final int COMPONENT_REMOVED = 2;
-  static final int LAYOUT_ROOTS_ADDED = 14;
-  static final int LAYOUT_ROOTS_REMOVED = 15;
-  static final int LAYOUT_ROOTS_CHANGED = 16;
-  static final int INTERVAL_ADDED = 3;
-  static final int INTERVAL_REMOVED = 4;
-  static final int INTERVAL_ALIGNMENT_CHANGED = 5;
-  static final int GROUP_ALIGNMENT_CHANGED = 6;
-  static final int INTERVAL_SIZE_CHANGED = 7;
-  static final int INTERVAL_PADDING_TYPE_CHANGED = 13;
-  static final int INTERVAL_ATTRIBUTES_CHANGED = 8;
-  static final int INTERVAL_LINKSIZE_CHANGED = 9;
-  static final int CONTAINER_ATTR_CHANGED = 10;
-  static final int COMPONENT_REGISTERED = 11;
-  static final int COMPONENT_UNREGISTERED = 12;
-  private final int changeType;
-
-  LayoutEvent(LayoutModel source, int changeType) {
-    super(source);
-    this.changeType = changeType;
-  }
-
-  LayoutModel getModel() {
-    return (LayoutModel) source;
-  }
-
-  int getType() {
-    return changeType;
-  }
-
-  abstract void undo();
-
-  abstract void redo();
-
-  // -----
-  /**
-   * Change event related to an interval.
-   */
-  static class Interval extends LayoutEvent {
-    private static final long serialVersionUID = 1L;
-    private LayoutInterval interval;
-    private LayoutInterval parentInt;
-    private int index;
-    private int oldAlignment;
-    private int newAlignment;
-    private int oldAttributes;
-    private int newAttributes;
-    private int[] oldSizes;
-    private int[] newSizes;
-    private LayoutConstants.PaddingType oldPaddingType;
-    private LayoutConstants.PaddingType newPaddingType;
-
-    Interval(LayoutModel source, int changeType) {
-      super(source, changeType);
-    }
-
-    void setInterval(LayoutInterval interval, LayoutInterval parent, int index) {
-      this.interval = interval;
-      parentInt = parent;
-      this.index = index;
-    }
-
-    void setAlignment(LayoutInterval interval, int oldAlign, int newAlign) {
-      this.interval = interval;
-      oldAlignment = oldAlign;
-      newAlignment = newAlign;
-    }
-
-    void setAttributes(LayoutInterval interval, int oldAttributes, int newAttributes) {
-      this.interval = interval;
-      this.oldAttributes = oldAttributes;
-      this.newAttributes = newAttributes;
-    }
-
-    void setSize(LayoutInterval interval,
-        int oldMin,
-        int oldPref,
-        int oldMax,
-        int newMin,
-        int newPref,
-        int newMax) {
-      this.interval = interval;
-      oldSizes = new int[]{oldMin, oldPref, oldMax};
-      newSizes = new int[]{newMin, newPref, newMax};
-    }
-
-    void setPaddingType(LayoutInterval interval,
-        LayoutConstants.PaddingType oldPadding,
-        LayoutConstants.PaddingType newPadding) {
-      this.interval = interval;
-      oldPaddingType = oldPadding;
-      newPaddingType = newPadding;
-    }
-
-    LayoutInterval getInterval() {
-      return interval;
-    }
-
-    LayoutInterval getParentInterval() {
-      return parentInt;
-    }
-
-    int getIndex() {
-      return index;
-    }
-
-    @Override
-    void undo() {
-      switch (getType()) {
-        case INTERVAL_ADDED :
-          undoIntervalAddition();
-          break;
-        case INTERVAL_REMOVED :
-          undoIntervalRemoval();
-          break;
-        case INTERVAL_ALIGNMENT_CHANGED :
-          // getModel().setIntervalAlignment(interval, oldAlignment);
-          interval.setAlignment(oldAlignment);
-          break;
-        case GROUP_ALIGNMENT_CHANGED :
-          // getModel().setGroupAlignment(interval, oldAlignment);
-          interval.setGroupAlignment(oldAlignment);
-          break;
-        case INTERVAL_SIZE_CHANGED :
-          // getModel().setIntervalSize(interval, oldSizes[0], oldSizes[1], oldSizes[2]);
-          interval.setSizes(oldSizes[0], oldSizes[1], oldSizes[2]);
-          break;
-        case INTERVAL_PADDING_TYPE_CHANGED :
-          interval.setPaddingType(oldPaddingType);
-          break;
-        case INTERVAL_ATTRIBUTES_CHANGED :
-          interval.setAttributes(oldAttributes);
-          break;
-      }
-    }
-
-    @Override
-    void redo() {
-      switch (getType()) {
-        case INTERVAL_ADDED :
-          undoIntervalRemoval();
-          break;
-        case INTERVAL_REMOVED :
-          undoIntervalAddition();
-          break;
-        case INTERVAL_ALIGNMENT_CHANGED :
-          // getModel().setIntervalAlignment(interval, newAlignment);
-          interval.setAlignment(newAlignment);
-          break;
-        case GROUP_ALIGNMENT_CHANGED :
-          // getModel().setGroupAlignment(interval, newAlignment);
-          interval.setGroupAlignment(newAlignment);
-          break;
-        case INTERVAL_SIZE_CHANGED :
-          // getModel().setIntervalSize(interval, newSizes[0], newSizes[1], newSizes[2]);
-          interval.setSizes(newSizes[0], newSizes[1], newSizes[2]);
-          break;
-        case INTERVAL_PADDING_TYPE_CHANGED :
-          interval.setPaddingType(newPaddingType);
-          break;
-        case INTERVAL_ATTRIBUTES_CHANGED :
-          interval.setAttributes(newAttributes);
-          break;
-      }
-    }
-
-    private void undoIntervalAddition() {
-      getModel().removeInterval(parentInt, index);
-    }
-
-    private void undoIntervalRemoval() {
-      getModel().addInterval(interval, parentInt, index);
-    }
-  }
-  /**
-   * Change event related to a component.
-   */
-  static class Component extends LayoutEvent {
-    private static final long serialVersionUID = 1L;
-    private LayoutComponent component;
-    private LayoutComponent parentComp;
-    private int index;
-    private List<LayoutInterval[]> oldLayoutRoots;
-    private List<LayoutInterval[]> newLayoutRoots;
-    private LayoutInterval[] layoutRoots;
-    private int oldLinkSizeId;
-    private int newLinkSizeId;
-    private int dimension;
-
-    Component(LayoutModel source, int changeType) {
-      super(source, changeType);
-    }
-
-    void setComponent(LayoutComponent comp) {
-      component = comp;
-    }
-
-    void setComponent(LayoutComponent comp, LayoutComponent parent, int index) {
-      component = comp;
-      parentComp = parent;
-      this.index = index;
-    }
-
-    void setContainer(LayoutComponent comp, List<LayoutInterval[]> rootsList) {
-      component = comp;
-      newLayoutRoots = rootsList;
-    }
-
-    void setLayoutRoots(LayoutComponent container, LayoutInterval[] roots, int index) {
-      component = container;
-      layoutRoots = roots;
-      this.index = index;
-    }
-
-    void setLayoutRoots(LayoutComponent container,
-        List<LayoutInterval[]> oldRoots,
-        List<LayoutInterval[]> newRoots) {
-      component = container;
-      oldLayoutRoots = oldRoots;
-      newLayoutRoots = newRoots;
-    }
-
-    void setLinkSizeGroup(LayoutComponent component,
-        int oldLinkSizeId,
-        int newLinkSizeId,
-        int dimension) {
-      this.component = component;
-      this.oldLinkSizeId = oldLinkSizeId;
-      this.newLinkSizeId = newLinkSizeId;
-      this.dimension = dimension;
-    }
-
-    @Override
-    void undo() {
-      switch (getType()) {
-        case COMPONENT_ADDED :
-          undoComponentAddition();
-          break;
-        case COMPONENT_REMOVED :
-          undoComponentRemoval();
-          break;
-        case LAYOUT_ROOTS_ADDED :
-          undoRootsAddition();
-          break;
-        case LAYOUT_ROOTS_REMOVED :
-          undoRootsRemoval();
-          break;
-        case LAYOUT_ROOTS_CHANGED :
-          component.setLayoutRoots(oldLayoutRoots);
-          break;
-        case INTERVAL_LINKSIZE_CHANGED :
-          undoLinkSize(oldLinkSizeId);
-          break;
-        case CONTAINER_ATTR_CHANGED :
-          changeContainerAttr();
-          break;
-        case COMPONENT_REGISTERED :
-          undoComponentRegistration();
-          break;
-        case COMPONENT_UNREGISTERED :
-          undoComponentUnregistration();
-          break;
-      }
-    }
-
-    @Override
-    void redo() {
-      switch (getType()) {
-        case COMPONENT_ADDED :
-          undoComponentRemoval();
-          break;
-        case COMPONENT_REMOVED :
-          undoComponentAddition();
-          break;
-        case LAYOUT_ROOTS_ADDED :
-          undoRootsRemoval();
-          break;
-        case LAYOUT_ROOTS_REMOVED :
-          undoRootsAddition();
-          break;
-        case LAYOUT_ROOTS_CHANGED :
-          component.setLayoutRoots(newLayoutRoots);
-          break;
-        case INTERVAL_LINKSIZE_CHANGED :
-          undoLinkSize(newLinkSizeId);
-          break;
-        case CONTAINER_ATTR_CHANGED :
-          changeContainerAttr();
-          break;
-        case COMPONENT_REGISTERED :
-          undoComponentUnregistration();
-          break;
-        case COMPONENT_UNREGISTERED :
-          undoComponentRegistration();
-          break;
-      }
-    }
-
-    private void undoLinkSize(int id) {
-      getModel().removeComponentFromLinkSizedGroup(component, dimension);
-      if (!(id == LayoutConstants.NOT_EXPLICITLY_DEFINED)) {
-        getModel().addComponentToLinkSizedGroupImpl(id, component.getId(), dimension);
-      }
-    }
-
-    private void undoComponentAddition() {
-      getModel().removeComponentImpl(component);
-    }
-
-    private void undoComponentRemoval() {
-      getModel().addComponentImpl(component, parentComp, index);
-    }
-
-    private void undoRootsAddition() {
-      component.removeLayoutRoots(layoutRoots);
-    }
-
-    private void undoRootsRemoval() {
-      component.addLayoutRoots(layoutRoots, index);
-    }
-
-    private void changeContainerAttr() {
-      component.setLayoutContainer(!component.isLayoutContainer(), newLayoutRoots);
-    }
-
-    private void undoComponentRegistration() {
-      getModel().unregisterComponentImpl(component);
-    }
-
-    private void undoComponentUnregistration() {
-      getModel().registerComponentImpl(component);
-    }
-  }
+	private static final long serialVersionUID = 1L;
+	static final int COMPONENT_ADDED = 1;
+	static final int COMPONENT_REMOVED = 2;
+	static final int LAYOUT_ROOTS_ADDED = 14;
+	static final int LAYOUT_ROOTS_REMOVED = 15;
+	static final int LAYOUT_ROOTS_CHANGED = 16;
+	static final int INTERVAL_ADDED = 3;
+	static final int INTERVAL_REMOVED = 4;
+	static final int INTERVAL_ALIGNMENT_CHANGED = 5;
+	static final int GROUP_ALIGNMENT_CHANGED = 6;
+	static final int INTERVAL_SIZE_CHANGED = 7;
+	static final int INTERVAL_PADDING_TYPE_CHANGED = 13;
+	static final int INTERVAL_ATTRIBUTES_CHANGED = 8;
+	static final int INTERVAL_LINKSIZE_CHANGED = 9;
+	static final int CONTAINER_ATTR_CHANGED = 10;
+	static final int COMPONENT_REGISTERED = 11;
+	static final int COMPONENT_UNREGISTERED = 12;
+	private final int changeType;
+
+	LayoutEvent(LayoutModel source, int changeType) {
+		super(source);
+		this.changeType = changeType;
+	}
+
+	LayoutModel getModel() {
+		return (LayoutModel) source;
+	}
+
+	int getType() {
+		return changeType;
+	}
+
+	abstract void undo();
+
+	abstract void redo();
+
+	// -----
+	/**
+	 * Change event related to an interval.
+	 */
+	static class Interval extends LayoutEvent {
+		private static final long serialVersionUID = 1L;
+		private LayoutInterval interval;
+		private LayoutInterval parentInt;
+		private int index;
+		private int oldAlignment;
+		private int newAlignment;
+		private int oldAttributes;
+		private int newAttributes;
+		private int[] oldSizes;
+		private int[] newSizes;
+		private LayoutConstants.PaddingType oldPaddingType;
+		private LayoutConstants.PaddingType newPaddingType;
+
+		Interval(LayoutModel source, int changeType) {
+			super(source, changeType);
+		}
+
+		void setInterval(LayoutInterval interval, LayoutInterval parent, int index) {
+			this.interval = interval;
+			parentInt = parent;
+			this.index = index;
+		}
+
+		void setAlignment(LayoutInterval interval, int oldAlign, int newAlign) {
+			this.interval = interval;
+			oldAlignment = oldAlign;
+			newAlignment = newAlign;
+		}
+
+		void setAttributes(LayoutInterval interval, int oldAttributes, int newAttributes) {
+			this.interval = interval;
+			this.oldAttributes = oldAttributes;
+			this.newAttributes = newAttributes;
+		}
+
+		void setSize(LayoutInterval interval,
+				int oldMin,
+				int oldPref,
+				int oldMax,
+				int newMin,
+				int newPref,
+				int newMax) {
+			this.interval = interval;
+			oldSizes = new int[]{oldMin, oldPref, oldMax};
+			newSizes = new int[]{newMin, newPref, newMax};
+		}
+
+		void setPaddingType(LayoutInterval interval,
+				LayoutConstants.PaddingType oldPadding,
+				LayoutConstants.PaddingType newPadding) {
+			this.interval = interval;
+			oldPaddingType = oldPadding;
+			newPaddingType = newPadding;
+		}
+
+		LayoutInterval getInterval() {
+			return interval;
+		}
+
+		LayoutInterval getParentInterval() {
+			return parentInt;
+		}
+
+		int getIndex() {
+			return index;
+		}
+
+		@Override
+		void undo() {
+			switch (getType()) {
+			case INTERVAL_ADDED :
+				undoIntervalAddition();
+				break;
+			case INTERVAL_REMOVED :
+				undoIntervalRemoval();
+				break;
+			case INTERVAL_ALIGNMENT_CHANGED :
+				// getModel().setIntervalAlignment(interval, oldAlignment);
+				interval.setAlignment(oldAlignment);
+				break;
+			case GROUP_ALIGNMENT_CHANGED :
+				// getModel().setGroupAlignment(interval, oldAlignment);
+				interval.setGroupAlignment(oldAlignment);
+				break;
+			case INTERVAL_SIZE_CHANGED :
+				// getModel().setIntervalSize(interval, oldSizes[0], oldSizes[1], oldSizes[2]);
+				interval.setSizes(oldSizes[0], oldSizes[1], oldSizes[2]);
+				break;
+			case INTERVAL_PADDING_TYPE_CHANGED :
+				interval.setPaddingType(oldPaddingType);
+				break;
+			case INTERVAL_ATTRIBUTES_CHANGED :
+				interval.setAttributes(oldAttributes);
+				break;
+			}
+		}
+
+		@Override
+		void redo() {
+			switch (getType()) {
+			case INTERVAL_ADDED :
+				undoIntervalRemoval();
+				break;
+			case INTERVAL_REMOVED :
+				undoIntervalAddition();
+				break;
+			case INTERVAL_ALIGNMENT_CHANGED :
+				// getModel().setIntervalAlignment(interval, newAlignment);
+				interval.setAlignment(newAlignment);
+				break;
+			case GROUP_ALIGNMENT_CHANGED :
+				// getModel().setGroupAlignment(interval, newAlignment);
+				interval.setGroupAlignment(newAlignment);
+				break;
+			case INTERVAL_SIZE_CHANGED :
+				// getModel().setIntervalSize(interval, newSizes[0], newSizes[1], newSizes[2]);
+				interval.setSizes(newSizes[0], newSizes[1], newSizes[2]);
+				break;
+			case INTERVAL_PADDING_TYPE_CHANGED :
+				interval.setPaddingType(newPaddingType);
+				break;
+			case INTERVAL_ATTRIBUTES_CHANGED :
+				interval.setAttributes(newAttributes);
+				break;
+			}
+		}
+
+		private void undoIntervalAddition() {
+			getModel().removeInterval(parentInt, index);
+		}
+
+		private void undoIntervalRemoval() {
+			getModel().addInterval(interval, parentInt, index);
+		}
+	}
+	/**
+	 * Change event related to a component.
+	 */
+	static class Component extends LayoutEvent {
+		private static final long serialVersionUID = 1L;
+		private LayoutComponent component;
+		private LayoutComponent parentComp;
+		private int index;
+		private List<LayoutInterval[]> oldLayoutRoots;
+		private List<LayoutInterval[]> newLayoutRoots;
+		private LayoutInterval[] layoutRoots;
+		private int oldLinkSizeId;
+		private int newLinkSizeId;
+		private int dimension;
+
+		Component(LayoutModel source, int changeType) {
+			super(source, changeType);
+		}
+
+		void setComponent(LayoutComponent comp) {
+			component = comp;
+		}
+
+		void setComponent(LayoutComponent comp, LayoutComponent parent, int index) {
+			component = comp;
+			parentComp = parent;
+			this.index = index;
+		}
+
+		void setContainer(LayoutComponent comp, List<LayoutInterval[]> rootsList) {
+			component = comp;
+			newLayoutRoots = rootsList;
+		}
+
+		void setLayoutRoots(LayoutComponent container, LayoutInterval[] roots, int index) {
+			component = container;
+			layoutRoots = roots;
+			this.index = index;
+		}
+
+		void setLayoutRoots(LayoutComponent container,
+				List<LayoutInterval[]> oldRoots,
+				List<LayoutInterval[]> newRoots) {
+			component = container;
+			oldLayoutRoots = oldRoots;
+			newLayoutRoots = newRoots;
+		}
+
+		void setLinkSizeGroup(LayoutComponent component,
+				int oldLinkSizeId,
+				int newLinkSizeId,
+				int dimension) {
+			this.component = component;
+			this.oldLinkSizeId = oldLinkSizeId;
+			this.newLinkSizeId = newLinkSizeId;
+			this.dimension = dimension;
+		}
+
+		@Override
+		void undo() {
+			switch (getType()) {
+			case COMPONENT_ADDED :
+				undoComponentAddition();
+				break;
+			case COMPONENT_REMOVED :
+				undoComponentRemoval();
+				break;
+			case LAYOUT_ROOTS_ADDED :
+				undoRootsAddition();
+				break;
+			case LAYOUT_ROOTS_REMOVED :
+				undoRootsRemoval();
+				break;
+			case LAYOUT_ROOTS_CHANGED :
+				component.setLayoutRoots(oldLayoutRoots);
+				break;
+			case INTERVAL_LINKSIZE_CHANGED :
+				undoLinkSize(oldLinkSizeId);
+				break;
+			case CONTAINER_ATTR_CHANGED :
+				changeContainerAttr();
+				break;
+			case COMPONENT_REGISTERED :
+				undoComponentRegistration();
+				break;
+			case COMPONENT_UNREGISTERED :
+				undoComponentUnregistration();
+				break;
+			}
+		}
+
+		@Override
+		void redo() {
+			switch (getType()) {
+			case COMPONENT_ADDED :
+				undoComponentRemoval();
+				break;
+			case COMPONENT_REMOVED :
+				undoComponentAddition();
+				break;
+			case LAYOUT_ROOTS_ADDED :
+				undoRootsRemoval();
+				break;
+			case LAYOUT_ROOTS_REMOVED :
+				undoRootsAddition();
+				break;
+			case LAYOUT_ROOTS_CHANGED :
+				component.setLayoutRoots(newLayoutRoots);
+				break;
+			case INTERVAL_LINKSIZE_CHANGED :
+				undoLinkSize(newLinkSizeId);
+				break;
+			case CONTAINER_ATTR_CHANGED :
+				changeContainerAttr();
+				break;
+			case COMPONENT_REGISTERED :
+				undoComponentUnregistration();
+				break;
+			case COMPONENT_UNREGISTERED :
+				undoComponentRegistration();
+				break;
+			}
+		}
+
+		private void undoLinkSize(int id) {
+			getModel().removeComponentFromLinkSizedGroup(component, dimension);
+			if (!(id == LayoutConstants.NOT_EXPLICITLY_DEFINED)) {
+				getModel().addComponentToLinkSizedGroupImpl(id, component.getId(), dimension);
+			}
+		}
+
+		private void undoComponentAddition() {
+			getModel().removeComponentImpl(component);
+		}
+
+		private void undoComponentRemoval() {
+			getModel().addComponentImpl(component, parentComp, index);
+		}
+
+		private void undoRootsAddition() {
+			component.removeLayoutRoots(layoutRoots);
+		}
+
+		private void undoRootsRemoval() {
+			component.addLayoutRoots(layoutRoots, index);
+		}
+
+		private void changeContainerAttr() {
+			component.setLayoutContainer(!component.isLayoutContainer(), newLayoutRoots);
+		}
+
+		private void undoComponentRegistration() {
+			getModel().unregisterComponentImpl(component);
+		}
+
+		private void undoComponentUnregistration() {
+			getModel().registerComponentImpl(component);
+		}
+	}
 }
diff --git a/org.eclipse.wb.layout.group/netbeans-src/org/netbeans/modules/form/layoutdesign/LayoutFeeder.java b/org.eclipse.wb.layout.group/netbeans-src/org/netbeans/modules/form/layoutdesign/LayoutFeeder.java
index 5274c7f41..d0484075a 100644
--- a/org.eclipse.wb.layout.group/netbeans-src/org/netbeans/modules/form/layoutdesign/LayoutFeeder.java
+++ b/org.eclipse.wb.layout.group/netbeans-src/org/netbeans/modules/form/layoutdesign/LayoutFeeder.java
@@ -46,652 +46,652 @@
  * @author Tomas Pavek
  */
 class LayoutFeeder implements LayoutConstants {
-  boolean imposeSize;
-  boolean optimizeStructure;
-  private final LayoutModel layoutModel;
-  private final LayoutOperations operations;
-  private final LayoutDragger dragger;
-  private final IncludeDesc[] originalPositions1 = new IncludeDesc[DIM_COUNT];
-  private final IncludeDesc[] originalPositions2 = new IncludeDesc[DIM_COUNT];
-  private final boolean[] originalLPositionsFixed = new boolean[DIM_COUNT];
-  private final boolean[] originalTPositionsFixed = new boolean[DIM_COUNT];
-  private final LayoutDragger.PositionDef[] newPositions = new LayoutDragger.PositionDef[DIM_COUNT];
-  private final LayoutInterval[] addingIntervals; // horizontal, vertical
-  private final boolean[] becomeResizing = new boolean[DIM_COUNT];
-  // working context (actual dimension)
-  private int dimension;
-  private LayoutInterval addingInterval;
-  private LayoutRegion addingSpace;
-  private boolean solveOverlap;
-  private boolean originalLPosFixed;
-  private boolean originalTPosFixed;
-  // params used when searching for the right place (inclusion)
-  private int aEdge;
-  private LayoutInterval aSnappedParallel;
-  private LayoutInterval aSnappedNextTo;
-  private PaddingType aPaddingType;
+	boolean imposeSize;
+	boolean optimizeStructure;
+	private final LayoutModel layoutModel;
+	private final LayoutOperations operations;
+	private final LayoutDragger dragger;
+	private final IncludeDesc[] originalPositions1 = new IncludeDesc[DIM_COUNT];
+	private final IncludeDesc[] originalPositions2 = new IncludeDesc[DIM_COUNT];
+	private final boolean[] originalLPositionsFixed = new boolean[DIM_COUNT];
+	private final boolean[] originalTPositionsFixed = new boolean[DIM_COUNT];
+	private final LayoutDragger.PositionDef[] newPositions = new LayoutDragger.PositionDef[DIM_COUNT];
+	private final LayoutInterval[] addingIntervals; // horizontal, vertical
+	private final boolean[] becomeResizing = new boolean[DIM_COUNT];
+	// working context (actual dimension)
+	private int dimension;
+	private LayoutInterval addingInterval;
+	private LayoutRegion addingSpace;
+	private boolean solveOverlap;
+	private boolean originalLPosFixed;
+	private boolean originalTPosFixed;
+	// params used when searching for the right place (inclusion)
+	private int aEdge;
+	private LayoutInterval aSnappedParallel;
+	private LayoutInterval aSnappedNextTo;
+	private PaddingType aPaddingType;
 
-  private static class IncludeDesc {
-    LayoutInterval parent;
-    int index = -1; // if adding next to
-    boolean newSubGroup; // can be true if parent is sequential (parallel subgroup for part of the sequence is to be created)
-    LayoutInterval neighbor; // if included in a sequence with single interval (which is not in sequence yet)
-    LayoutInterval snappedParallel; // not null if aligning in parallel
-    LayoutInterval snappedNextTo; // not null if snapped next to (can but need not be 'neighbor')
-    PaddingType paddingType; // type of padding if snapped (next to)
-    int alignment; // the edge this object defines (leading or trailing or default)
-    boolean fixedPosition; // whether distance from the neighbor is definitely fixed
-    int distance = Integer.MAX_VALUE;
-    int ortDistance = Integer.MAX_VALUE;
+	private static class IncludeDesc {
+		LayoutInterval parent;
+		int index = -1; // if adding next to
+		boolean newSubGroup; // can be true if parent is sequential (parallel subgroup for part of the sequence is to be created)
+		LayoutInterval neighbor; // if included in a sequence with single interval (which is not in sequence yet)
+		LayoutInterval snappedParallel; // not null if aligning in parallel
+		LayoutInterval snappedNextTo; // not null if snapped next to (can but need not be 'neighbor')
+		PaddingType paddingType; // type of padding if snapped (next to)
+		int alignment; // the edge this object defines (leading or trailing or default)
+		boolean fixedPosition; // whether distance from the neighbor is definitely fixed
+		int distance = Integer.MAX_VALUE;
+		int ortDistance = Integer.MAX_VALUE;
 
-    boolean snapped() {
-      return snappedNextTo != null || snappedParallel != null;
-    }
-  }
+		boolean snapped() {
+			return snappedNextTo != null || snappedParallel != null;
+		}
+	}
 
-  // -----
-  LayoutFeeder(LayoutOperations operations,
-      LayoutDragger dragger,
-      LayoutInterval[] addingIntervals) {
-    layoutModel = operations.getModel();
-    this.operations = operations;
-    this.dragger = dragger;
-    this.addingIntervals = addingIntervals;
-    for (int dim = 0; dim < DIM_COUNT; dim++) {
-      dimension = dim;
-      if (dragger.isResizing()) {
-        LayoutInterval adding = addingIntervals[dim];
-        if (dragger.isResizing(dim)) {
-          IncludeDesc pos = findOutCurrentPosition(adding, dim, dragger.getResizingEdge(dim) ^ 1);
-          LayoutDragger.PositionDef newPos = dragger.getPositions()[dim];
-          if ((newPos == null || !newPos.snapped) && !pos.snapped()) {
-            pos.alignment = LayoutInterval.getEffectiveAlignment(adding);
-          }
-          originalPositions1[dim] = pos;
-          newPositions[dim] = newPos;
-          becomeResizing[dim] = checkResizing(); // if to make the interval resizing
-        } else { // this dimension has not been resized
-          int alignment = DEFAULT;
-          IncludeDesc pos1 = findOutCurrentPosition(adding, dim, alignment);
-          originalPositions1[dim] = pos1;
-          alignment = pos1.alignment;
-          if (alignment == LEADING || alignment == TRAILING) {
-            IncludeDesc pos2 = findOutCurrentPosition(adding, dim, alignment ^ 1);
-            if (pos2.snapped()) {
-              originalPositions2[dim] = pos2;
-            } // don't remember second position if not snapped, one is enough
-          }
-        }
-        originalLPositionsFixed[dim] = isFixedRelativePosition(adding, LEADING);
-        originalTPositionsFixed[dim] = isFixedRelativePosition(adding, TRAILING);
-      } else {
-        newPositions[dim] = dragger.getPositions()[dim];
-      }
-    }
-  }
+	// -----
+	LayoutFeeder(LayoutOperations operations,
+			LayoutDragger dragger,
+			LayoutInterval[] addingIntervals) {
+		layoutModel = operations.getModel();
+		this.operations = operations;
+		this.dragger = dragger;
+		this.addingIntervals = addingIntervals;
+		for (int dim = 0; dim < DIM_COUNT; dim++) {
+			dimension = dim;
+			if (dragger.isResizing()) {
+				LayoutInterval adding = addingIntervals[dim];
+				if (dragger.isResizing(dim)) {
+					IncludeDesc pos = findOutCurrentPosition(adding, dim, dragger.getResizingEdge(dim) ^ 1);
+					LayoutDragger.PositionDef newPos = dragger.getPositions()[dim];
+					if ((newPos == null || !newPos.snapped) && !pos.snapped()) {
+						pos.alignment = LayoutInterval.getEffectiveAlignment(adding);
+					}
+					originalPositions1[dim] = pos;
+					newPositions[dim] = newPos;
+					becomeResizing[dim] = checkResizing(); // if to make the interval resizing
+				} else { // this dimension has not been resized
+					int alignment = DEFAULT;
+					IncludeDesc pos1 = findOutCurrentPosition(adding, dim, alignment);
+					originalPositions1[dim] = pos1;
+					alignment = pos1.alignment;
+					if (alignment == LEADING || alignment == TRAILING) {
+						IncludeDesc pos2 = findOutCurrentPosition(adding, dim, alignment ^ 1);
+						if (pos2.snapped()) {
+							originalPositions2[dim] = pos2;
+						} // don't remember second position if not snapped, one is enough
+					}
+				}
+				originalLPositionsFixed[dim] = isFixedRelativePosition(adding, LEADING);
+				originalTPositionsFixed[dim] = isFixedRelativePosition(adding, TRAILING);
+			} else {
+				newPositions[dim] = dragger.getPositions()[dim];
+			}
+		}
+	}
 
-  void add() {
-    int overlapDim = getDimensionSolvingOverlap(newPositions);
-    for (int dim = overlapDim, dc = 0; dc < DIM_COUNT; dim ^= 1, dc++) {
-      dimension = dim;
-      addingInterval = addingIntervals[dim];
-      addingSpace = dragger.getMovingSpace();
-      addingInterval.setCurrentSpace(addingSpace);
-      solveOverlap = overlapDim == dim;
-      IncludeDesc originalPos1 = originalPositions1[dim];
-      IncludeDesc originalPos2 = originalPositions2[dim];
-      correctNeighborInSequence(originalPos1);
-      correctNeighborInSequence(originalPos2);
-      if (dragger.isResizing()) {
-        originalLPosFixed = originalLPositionsFixed[dim];
-        originalTPosFixed = originalTPositionsFixed[dim];
-        if (dragger.isResizing(dim)) {
-          layoutModel.setIntervalSize(
-              addingInterval,
-              becomeResizing[dim] ? NOT_EXPLICITLY_DEFINED : USE_PREFERRED_SIZE,
-              addingSpace.size(dim),
-              becomeResizing[dim] ? Short.MAX_VALUE : USE_PREFERRED_SIZE);
-        }
-      }
-      LayoutDragger.PositionDef newPos = newPositions[dim];
-      if (newPos != null && (newPos.alignment == CENTER || newPos.alignment == BASELINE)) {
-        // hack: simplified adding to a closed group
-        aEdge = newPos.alignment;
-        aSnappedParallel = newPos.interval;
-        addSimplyAligned();
-        continue;
-      }
-      if (dragger.isResizing()
-          && (originalPos1.alignment == CENTER || originalPos1.alignment == BASELINE)) {
-        aEdge = originalPos1.alignment;
-        aSnappedParallel = originalPos1.snappedParallel;
-        addSimplyAligned();
-        continue;
-      }
-      // prepare task for searching the position
-      IncludeDesc inclusion1 = null;
-      IncludeDesc inclusion2 = null;
-      List<IncludeDesc> inclusions = new LinkedList<IncludeDesc>();
-      boolean preserveOriginal = false;
-      // if resizing in the other dimension then renew the original position
-      if (dragger.isResizing(dim ^ 1)) {
-        aEdge = originalPos1.alignment;
-        aSnappedParallel = originalPos1.snappedParallel;
-        aSnappedNextTo = originalPos1.snappedNextTo;
-        aPaddingType = originalPos1.paddingType;
-      }
-      // if snapped in dragger then always find the position
-      else if (newPos != null) {
-        aEdge = newPos.alignment;
-        aSnappedParallel = !newPos.nextTo ? newPos.interval : null;
-        aSnappedNextTo = newPos.snapped && newPos.nextTo ? newPos.interval : null;
-        aPaddingType = newPos.paddingType;
-        // if resizing only in this dimension then preserve the original position
-        preserveOriginal = dragger.isResizing(dim);
-      }
-      // if resizing only in this dimension and without snap then check for
-      // possible growing in parallel with part of its own parent sequence
-      else if (dragger.isResizing(dim)) {
-        aEdge = originalPos1.alignment;
-        aSnappedParallel = originalPos1.snappedParallel;
-        aSnappedNextTo = originalPos1.snappedNextTo;
-        aPaddingType = originalPos1.paddingType;
-        preserveOriginal = true;
-      }
-      // otherwise plain moving without snap
-      else {
-        aEdge = DEFAULT;
-        aSnappedParallel = aSnappedNextTo = null;
-        aPaddingType = null;
-      }
-      LayoutInterval root = dragger.getTargetRoots()[dim];
-      analyzeParallel(root, inclusions);
-      // make sure an inclusion for parallel aligning is considered, choose best inclusion
-      if (inclusions.isEmpty()) { // inclusion for parallel aligning not found
-        assert aSnappedParallel != null;
-        if (originalPos1 != null && originalPos1.alignment == aEdge) {
-          inclusions.add(originalPos1);
-        } else {
-          addAligningInclusion(inclusions);
-        }
-      } else {
-        IncludeDesc preferred = addAligningInclusion(inclusions); // make sure it is there...
-        if (inclusions.size() > 1) {
-          if (preferred == null || preserveOriginal && originalPos1.alignment == aEdge) {
-            preferred = originalPos1;
-          }
-          mergeParallelInclusions(inclusions, preferred, preserveOriginal);
-          assert inclusions.size() == 1;
-        }
-      }
-      IncludeDesc found = inclusions.get(0);
-      inclusions.clear();
-      if (preserveOriginal) { // resized in this dimension only
-        inclusion1 = originalPos1;
-        if (found != originalPos1) {
-          if (newPos != null) {
-            inclusion2 = found;
-          }
-          LayoutInterval origParent = originalPos1.parent;
-          if (found.parent == origParent && found.newSubGroup
-              || origParent.isSequential() && origParent.getParent() == found.parent) {
-            inclusion1.newSubGroup = true;
-          }
-        }
-      } else {
-        inclusion1 = found;
-        // second search needed if resizing in the other dimension
-        // and the second edge snapped in current dimension
-        if (dragger.isResizing(dim ^ 1) && (newPos != null || originalPos2 != null)) {
-          if (newPos != null) { // find inclusion based on position from dragger
-            assert dragger.isResizing(dim);
-            aEdge = newPos.alignment;
-            aSnappedParallel = !newPos.nextTo ? newPos.interval : null;
-            aSnappedNextTo = newPos.snapped && newPos.nextTo ? newPos.interval : null;
-            aPaddingType = newPos.paddingType;
-          } else { // need to renew the original position
-            assert !dragger.isResizing(dim);
-            aEdge = originalPos2.alignment;
-            aSnappedParallel = originalPos2.snappedParallel;
-            aSnappedNextTo = originalPos2.snappedNextTo;
-            aPaddingType = originalPos2.paddingType;
-          }
-          // second round searching
-          analyzeParallel(root, inclusions);
-          if (inclusions.isEmpty()) { // inclusion for parallel aligning not found
-            assert aSnappedParallel != null;
-            if (originalPos2 != null && originalPos2.alignment == aEdge) {
-              inclusions.add(originalPos2);
-            } else {
-              addAligningInclusion(inclusions);
-            }
-          } else {
-            IncludeDesc preferred = addAligningInclusion(inclusions);
-            if (inclusions.size() > 1) {
-              if (preferred == null) {
-                preferred = originalPos2 != null ? originalPos2 : originalPos1;
-              }
-              mergeParallelInclusions(inclusions, preferred, false);
-              assert inclusions.size() == 1;
-            }
-          }
-          inclusion2 = inclusions.get(0);
-          inclusions.clear();
-        }
-      }
-      if (!mergeSequentialInclusions(inclusion1, inclusion2)) {
-        inclusion2 = null;
-      }
-      addInterval(inclusion1, inclusion2);
-    }
-  }
+	void add() {
+		int overlapDim = getDimensionSolvingOverlap(newPositions);
+		for (int dim = overlapDim, dc = 0; dc < DIM_COUNT; dim ^= 1, dc++) {
+			dimension = dim;
+			addingInterval = addingIntervals[dim];
+			addingSpace = dragger.getMovingSpace();
+			addingInterval.setCurrentSpace(addingSpace);
+			solveOverlap = overlapDim == dim;
+			IncludeDesc originalPos1 = originalPositions1[dim];
+			IncludeDesc originalPos2 = originalPositions2[dim];
+			correctNeighborInSequence(originalPos1);
+			correctNeighborInSequence(originalPos2);
+			if (dragger.isResizing()) {
+				originalLPosFixed = originalLPositionsFixed[dim];
+				originalTPosFixed = originalTPositionsFixed[dim];
+				if (dragger.isResizing(dim)) {
+					layoutModel.setIntervalSize(
+							addingInterval,
+							becomeResizing[dim] ? NOT_EXPLICITLY_DEFINED : USE_PREFERRED_SIZE,
+									addingSpace.size(dim),
+									becomeResizing[dim] ? Short.MAX_VALUE : USE_PREFERRED_SIZE);
+				}
+			}
+			LayoutDragger.PositionDef newPos = newPositions[dim];
+			if (newPos != null && (newPos.alignment == CENTER || newPos.alignment == BASELINE)) {
+				// hack: simplified adding to a closed group
+				aEdge = newPos.alignment;
+				aSnappedParallel = newPos.interval;
+				addSimplyAligned();
+				continue;
+			}
+			if (dragger.isResizing()
+					&& (originalPos1.alignment == CENTER || originalPos1.alignment == BASELINE)) {
+				aEdge = originalPos1.alignment;
+				aSnappedParallel = originalPos1.snappedParallel;
+				addSimplyAligned();
+				continue;
+			}
+			// prepare task for searching the position
+			IncludeDesc inclusion1 = null;
+			IncludeDesc inclusion2 = null;
+			List<IncludeDesc> inclusions = new LinkedList<IncludeDesc>();
+			boolean preserveOriginal = false;
+			// if resizing in the other dimension then renew the original position
+			if (dragger.isResizing(dim ^ 1)) {
+				aEdge = originalPos1.alignment;
+				aSnappedParallel = originalPos1.snappedParallel;
+				aSnappedNextTo = originalPos1.snappedNextTo;
+				aPaddingType = originalPos1.paddingType;
+			}
+			// if snapped in dragger then always find the position
+			else if (newPos != null) {
+				aEdge = newPos.alignment;
+				aSnappedParallel = !newPos.nextTo ? newPos.interval : null;
+				aSnappedNextTo = newPos.snapped && newPos.nextTo ? newPos.interval : null;
+				aPaddingType = newPos.paddingType;
+				// if resizing only in this dimension then preserve the original position
+				preserveOriginal = dragger.isResizing(dim);
+			}
+			// if resizing only in this dimension and without snap then check for
+			// possible growing in parallel with part of its own parent sequence
+			else if (dragger.isResizing(dim)) {
+				aEdge = originalPos1.alignment;
+				aSnappedParallel = originalPos1.snappedParallel;
+				aSnappedNextTo = originalPos1.snappedNextTo;
+				aPaddingType = originalPos1.paddingType;
+				preserveOriginal = true;
+			}
+			// otherwise plain moving without snap
+			else {
+				aEdge = DEFAULT;
+				aSnappedParallel = aSnappedNextTo = null;
+				aPaddingType = null;
+			}
+			LayoutInterval root = dragger.getTargetRoots()[dim];
+			analyzeParallel(root, inclusions);
+			// make sure an inclusion for parallel aligning is considered, choose best inclusion
+			if (inclusions.isEmpty()) { // inclusion for parallel aligning not found
+				assert aSnappedParallel != null;
+				if (originalPos1 != null && originalPos1.alignment == aEdge) {
+					inclusions.add(originalPos1);
+				} else {
+					addAligningInclusion(inclusions);
+				}
+			} else {
+				IncludeDesc preferred = addAligningInclusion(inclusions); // make sure it is there...
+				if (inclusions.size() > 1) {
+					if (preferred == null || preserveOriginal && originalPos1.alignment == aEdge) {
+						preferred = originalPos1;
+					}
+					mergeParallelInclusions(inclusions, preferred, preserveOriginal);
+					assert inclusions.size() == 1;
+				}
+			}
+			IncludeDesc found = inclusions.get(0);
+			inclusions.clear();
+			if (preserveOriginal) { // resized in this dimension only
+				inclusion1 = originalPos1;
+				if (found != originalPos1) {
+					if (newPos != null) {
+						inclusion2 = found;
+					}
+					LayoutInterval origParent = originalPos1.parent;
+					if (found.parent == origParent && found.newSubGroup
+							|| origParent.isSequential() && origParent.getParent() == found.parent) {
+						inclusion1.newSubGroup = true;
+					}
+				}
+			} else {
+				inclusion1 = found;
+				// second search needed if resizing in the other dimension
+				// and the second edge snapped in current dimension
+				if (dragger.isResizing(dim ^ 1) && (newPos != null || originalPos2 != null)) {
+					if (newPos != null) { // find inclusion based on position from dragger
+						assert dragger.isResizing(dim);
+						aEdge = newPos.alignment;
+						aSnappedParallel = !newPos.nextTo ? newPos.interval : null;
+						aSnappedNextTo = newPos.snapped && newPos.nextTo ? newPos.interval : null;
+						aPaddingType = newPos.paddingType;
+					} else { // need to renew the original position
+						assert !dragger.isResizing(dim);
+						aEdge = originalPos2.alignment;
+						aSnappedParallel = originalPos2.snappedParallel;
+						aSnappedNextTo = originalPos2.snappedNextTo;
+						aPaddingType = originalPos2.paddingType;
+					}
+					// second round searching
+					analyzeParallel(root, inclusions);
+					if (inclusions.isEmpty()) { // inclusion for parallel aligning not found
+						assert aSnappedParallel != null;
+						if (originalPos2 != null && originalPos2.alignment == aEdge) {
+							inclusions.add(originalPos2);
+						} else {
+							addAligningInclusion(inclusions);
+						}
+					} else {
+						IncludeDesc preferred = addAligningInclusion(inclusions);
+						if (inclusions.size() > 1) {
+							if (preferred == null) {
+								preferred = originalPos2 != null ? originalPos2 : originalPos1;
+							}
+							mergeParallelInclusions(inclusions, preferred, false);
+							assert inclusions.size() == 1;
+						}
+					}
+					inclusion2 = inclusions.get(0);
+					inclusions.clear();
+				}
+			}
+			if (!mergeSequentialInclusions(inclusion1, inclusion2)) {
+				inclusion2 = null;
+			}
+			addInterval(inclusion1, inclusion2);
+		}
+	}
 
-  private static IncludeDesc findOutCurrentPosition(LayoutInterval interval,
-      int dimension,
-      int alignment) {
-    LayoutInterval parent = interval.getParent();
-    int nonEmptyCount = LayoutInterval.getCount(parent, LayoutRegion.ALL_POINTS, true);
-    IncludeDesc iDesc = new IncludeDesc();
-    if (parent.isSequential() && nonEmptyCount > 1) {
-      if (alignment < 0) {
-        alignment = LEADING;
-      }
-      if (nonEmptyCount == 2) { // the sequence may not survive when the interval is removed
-        // (if it survives, the inclusion gets corrected by 'correctNeighborInSequence' method)
-        iDesc.parent = parent.getParent();
-        int index = 0;
-        for (int i = parent.getSubIntervalCount() - 1; i >= 0; i--) {
-          LayoutInterval li = parent.getSubInterval(i);
-          if (li == interval) {
-            index = i;
-          } else if (!li.isEmptySpace()) {
-            iDesc.neighbor = li; // next to a single interval in parallel group
-            iDesc.index = index;
-            break;
-          }
-        }
-      } else { // simply goes to the sequence
-        iDesc.parent = parent;
-        iDesc.index = parent.indexOf(interval);
-      }
-    } else { // parallel parent
-      if (parent.isSequential()) {
-        parent = parent.getParent(); // alone in sequence, take parent
-        nonEmptyCount = LayoutInterval.getCount(parent, LayoutRegion.ALL_POINTS, true);
-        if (alignment < 0) {
-          alignment = LEADING;
-        }
-      } else {
-        int currentAlign = interval.getAlignment();
-        if (alignment < 0 || currentAlign != LEADING && currentAlign != TRAILING) {
-          alignment = currentAlign;
-        }
-      }
-      if (nonEmptyCount <= 2 && parent.getParent() != null) {
-        // parallel group will not survive when the interval is removed
-        LayoutInterval subGroup = parent;
-        parent = parent.getParent();
-        if (parent.isSequential()) {
-          boolean ortOverlap = false;
-          for (Iterator<LayoutInterval> it = parent.getSubIntervals(); it.hasNext();) {
-            LayoutInterval li = it.next();
-            if (!li.isEmptySpace()
-                && !li.isParentOf(interval)
-                && LayoutRegion.overlap(
-                    interval.getCurrentSpace(),
-                    li.getCurrentSpace(),
-                    dimension ^ 1,
-                    0)) { // orthogonal overlap - need to stay within the sequence
-              ortOverlap = true;
-              break;
-            }
-          }
-          if (ortOverlap) { // parallel with part of the sequence
-            iDesc.newSubGroup = true;
-            iDesc.index = parent.indexOf(subGroup);
-          } else {
-            // parallel with whole sequence
-            parent = parent.getParent();
-          }
-        }
-        iDesc.parent = parent;
-      } else {
-        iDesc.parent = parent; // simply goes to the parallel group
-      }
-    }
-    if (alignment == LEADING || alignment == TRAILING) {
-      iDesc.fixedPosition = isFixedRelativePosition(interval, alignment);
-    }
-    iDesc.snappedParallel = findAlignedInterval(interval, dimension, alignment);
-    // check for next to aligning
-    if (iDesc.snappedParallel == null && (alignment == LEADING || alignment == TRAILING)) {
-      LayoutInterval gap = LayoutInterval.getNeighbor(interval, alignment, false, true, false);
-      if (gap != null && LayoutInterval.isFixedDefaultPadding(gap)) {
-        LayoutInterval prev = LayoutInterval.getDirectNeighbor(gap, alignment ^ 1, true);
-        if (prev == interval
-            || LayoutInterval.isPlacedAtBorder(interval, prev, dimension, alignment)) {
-          LayoutInterval next = LayoutInterval.getNeighbor(gap, alignment, true, true, false);
-          if (next != null) {
-            if (next.getParent() == gap.getParent()
-                || next.getCurrentSpace().positions[dimension][alignment
-                    ^ 1] == gap.getParent().getCurrentSpace().positions[dimension][alignment]) { // the next interval is really at preferred distance
-              iDesc.snappedNextTo = next;
-              iDesc.paddingType = gap.getPaddingType();
-            }
-          } else { // likely next to the root group border
-            next = LayoutInterval.getRoot(interval);
-            if (LayoutInterval.isPlacedAtBorder(gap.getParent(), next, dimension, alignment)) {
-              iDesc.snappedNextTo = next;
-            }
-          }
-        }
-      }
-    }
-    iDesc.alignment = alignment;
-    return iDesc;
-  }
+	private static IncludeDesc findOutCurrentPosition(LayoutInterval interval,
+			int dimension,
+			int alignment) {
+		LayoutInterval parent = interval.getParent();
+		int nonEmptyCount = LayoutInterval.getCount(parent, LayoutRegion.ALL_POINTS, true);
+		IncludeDesc iDesc = new IncludeDesc();
+		if (parent.isSequential() && nonEmptyCount > 1) {
+			if (alignment < 0) {
+				alignment = LEADING;
+			}
+			if (nonEmptyCount == 2) { // the sequence may not survive when the interval is removed
+				// (if it survives, the inclusion gets corrected by 'correctNeighborInSequence' method)
+				iDesc.parent = parent.getParent();
+				int index = 0;
+				for (int i = parent.getSubIntervalCount() - 1; i >= 0; i--) {
+					LayoutInterval li = parent.getSubInterval(i);
+					if (li == interval) {
+						index = i;
+					} else if (!li.isEmptySpace()) {
+						iDesc.neighbor = li; // next to a single interval in parallel group
+						iDesc.index = index;
+						break;
+					}
+				}
+			} else { // simply goes to the sequence
+				iDesc.parent = parent;
+				iDesc.index = parent.indexOf(interval);
+			}
+		} else { // parallel parent
+			if (parent.isSequential()) {
+				parent = parent.getParent(); // alone in sequence, take parent
+				nonEmptyCount = LayoutInterval.getCount(parent, LayoutRegion.ALL_POINTS, true);
+				if (alignment < 0) {
+					alignment = LEADING;
+				}
+			} else {
+				int currentAlign = interval.getAlignment();
+				if (alignment < 0 || currentAlign != LEADING && currentAlign != TRAILING) {
+					alignment = currentAlign;
+				}
+			}
+			if (nonEmptyCount <= 2 && parent.getParent() != null) {
+				// parallel group will not survive when the interval is removed
+				LayoutInterval subGroup = parent;
+				parent = parent.getParent();
+				if (parent.isSequential()) {
+					boolean ortOverlap = false;
+					for (Iterator<LayoutInterval> it = parent.getSubIntervals(); it.hasNext();) {
+						LayoutInterval li = it.next();
+						if (!li.isEmptySpace()
+								&& !li.isParentOf(interval)
+								&& LayoutRegion.overlap(
+										interval.getCurrentSpace(),
+										li.getCurrentSpace(),
+										dimension ^ 1,
+										0)) { // orthogonal overlap - need to stay within the sequence
+							ortOverlap = true;
+							break;
+						}
+					}
+					if (ortOverlap) { // parallel with part of the sequence
+						iDesc.newSubGroup = true;
+						iDesc.index = parent.indexOf(subGroup);
+					} else {
+						// parallel with whole sequence
+						parent = parent.getParent();
+					}
+				}
+				iDesc.parent = parent;
+			} else {
+				iDesc.parent = parent; // simply goes to the parallel group
+			}
+		}
+		if (alignment == LEADING || alignment == TRAILING) {
+			iDesc.fixedPosition = isFixedRelativePosition(interval, alignment);
+		}
+		iDesc.snappedParallel = findAlignedInterval(interval, dimension, alignment);
+		// check for next to aligning
+		if (iDesc.snappedParallel == null && (alignment == LEADING || alignment == TRAILING)) {
+			LayoutInterval gap = LayoutInterval.getNeighbor(interval, alignment, false, true, false);
+			if (gap != null && LayoutInterval.isFixedDefaultPadding(gap)) {
+				LayoutInterval prev = LayoutInterval.getDirectNeighbor(gap, alignment ^ 1, true);
+				if (prev == interval
+						|| LayoutInterval.isPlacedAtBorder(interval, prev, dimension, alignment)) {
+					LayoutInterval next = LayoutInterval.getNeighbor(gap, alignment, true, true, false);
+					if (next != null) {
+						if (next.getParent() == gap.getParent()
+								|| next.getCurrentSpace().positions[dimension][alignment
+								                                               ^ 1] == gap.getParent().getCurrentSpace().positions[dimension][alignment]) { // the next interval is really at preferred distance
+							iDesc.snappedNextTo = next;
+							iDesc.paddingType = gap.getPaddingType();
+						}
+					} else { // likely next to the root group border
+						next = LayoutInterval.getRoot(interval);
+						if (LayoutInterval.isPlacedAtBorder(gap.getParent(), next, dimension, alignment)) {
+							iDesc.snappedNextTo = next;
+						}
+					}
+				}
+			}
+		}
+		iDesc.alignment = alignment;
+		return iDesc;
+	}
 
-  private static boolean isFixedRelativePosition(LayoutInterval interval, int edge) {
-    assert edge == LEADING || edge == TRAILING;
-    LayoutInterval parent = interval.getParent();
-    if (parent == null) {
-      return true;
-    }
-    if (parent.isSequential()) {
-      LayoutInterval li = LayoutInterval.getDirectNeighbor(interval, edge, false);
-      if (li != null) {
-        return !LayoutInterval.wantResize(li);
-      } else {
-        interval = parent;
-        parent = interval.getParent();
-      }
-    }
-    if (!LayoutInterval.isAlignedAtBorder(interval, parent, edge)
-        && LayoutInterval.contentWantResize(parent)) {
-      return false;
-    }
-    return isFixedRelativePosition(parent, edge);
-  }
+	private static boolean isFixedRelativePosition(LayoutInterval interval, int edge) {
+		assert edge == LEADING || edge == TRAILING;
+		LayoutInterval parent = interval.getParent();
+		if (parent == null) {
+			return true;
+		}
+		if (parent.isSequential()) {
+			LayoutInterval li = LayoutInterval.getDirectNeighbor(interval, edge, false);
+			if (li != null) {
+				return !LayoutInterval.wantResize(li);
+			} else {
+				interval = parent;
+				parent = interval.getParent();
+			}
+		}
+		if (!LayoutInterval.isAlignedAtBorder(interval, parent, edge)
+				&& LayoutInterval.contentWantResize(parent)) {
+			return false;
+		}
+		return isFixedRelativePosition(parent, edge);
+	}
 
-  private static LayoutInterval findAlignedInterval(LayoutInterval interval,
-      int dimension,
-      int alignment) {
-    LayoutInterval parent;
-    LayoutInterval alignedInterval = null;
-    // need to force parallel alignment in case of indented position whose
-    // parent parallel group won't survive removing of the resizing component
-    // (the resizing interval will target a higher group where the resulting
-    // indent gap might be different)
-    boolean indent = false;
-    parent = interval.getParent();
-    if ((alignment == LEADING || alignment == TRAILING)
-        && parent.isSequential()
-        && LayoutInterval.getCount(parent, -1, true) == 1) { // alone in sequence
-      LayoutInterval neighbor = LayoutInterval.getDirectNeighbor(interval, alignment, false);
-      if (neighbor != null
-          && neighbor.isEmptySpace()
-          && !LayoutInterval.canResize(neighbor)
-          && LayoutInterval.getCount(parent.getParent(), LayoutRegion.ALL_POINTS, true) == 2) { // otherwise only one sibling in parallel group - candidate for aligned interval
-        indent = true;
-      }
-    }
-    do {
-      parent = LayoutInterval.getFirstParent(interval, PARALLEL);
-      if (!indent) {
-        boolean aligned = alignment == LEADING || alignment == TRAILING
-            ? LayoutInterval.isAlignedAtBorder(interval, parent, alignment)
-            : interval.getParent() == parent && interval.getAlignment() == alignment;
-        if (!aligned) {
-          return null;
-        }
-        if (parent.getParent() == null) {
-          return parent; // aligned with root group
-        }
-      }
-      for (Iterator<LayoutInterval> it = parent.getSubIntervals(); it.hasNext();) {
-        LayoutInterval sub = it.next();
-        if (!sub.isEmptySpace() && sub != interval && !sub.isParentOf(interval)) {
-          if (alignment == LEADING || alignment == TRAILING) {
-            LayoutInterval li = LayoutUtils.getOutermostComponent(sub, dimension, alignment);
-            if (LayoutInterval.isAlignedAtBorder(li, parent, alignment)
-                || LayoutInterval.isPlacedAtBorder(li, parent, dimension, alignment)) { // here we have an aligned component
-              alignedInterval = li;
-            } else {
-              continue; // not aligned subinterval
-            }
-          } else {
-            alignedInterval = sub;
-          }
-          break;
-        }
-      }
-      if (indent) {
-        return alignedInterval;
-      }
-      interval = parent;
-    } while (alignedInterval == null);
-    return parent.getSubIntervalCount() > 2 ? parent : alignedInterval;
-  }
+	private static LayoutInterval findAlignedInterval(LayoutInterval interval,
+			int dimension,
+			int alignment) {
+		LayoutInterval parent;
+		LayoutInterval alignedInterval = null;
+		// need to force parallel alignment in case of indented position whose
+		// parent parallel group won't survive removing of the resizing component
+		// (the resizing interval will target a higher group where the resulting
+		// indent gap might be different)
+		boolean indent = false;
+		parent = interval.getParent();
+		if ((alignment == LEADING || alignment == TRAILING)
+				&& parent.isSequential()
+				&& LayoutInterval.getCount(parent, -1, true) == 1) { // alone in sequence
+			LayoutInterval neighbor = LayoutInterval.getDirectNeighbor(interval, alignment, false);
+			if (neighbor != null
+					&& neighbor.isEmptySpace()
+					&& !LayoutInterval.canResize(neighbor)
+					&& LayoutInterval.getCount(parent.getParent(), LayoutRegion.ALL_POINTS, true) == 2) { // otherwise only one sibling in parallel group - candidate for aligned interval
+				indent = true;
+			}
+		}
+		do {
+			parent = LayoutInterval.getFirstParent(interval, PARALLEL);
+			if (!indent) {
+				boolean aligned = alignment == LEADING || alignment == TRAILING
+						? LayoutInterval.isAlignedAtBorder(interval, parent, alignment)
+								: interval.getParent() == parent && interval.getAlignment() == alignment;
+				if (!aligned) {
+					return null;
+				}
+				if (parent.getParent() == null) {
+					return parent; // aligned with root group
+				}
+			}
+			for (Iterator<LayoutInterval> it = parent.getSubIntervals(); it.hasNext();) {
+				LayoutInterval sub = it.next();
+				if (!sub.isEmptySpace() && sub != interval && !sub.isParentOf(interval)) {
+					if (alignment == LEADING || alignment == TRAILING) {
+						LayoutInterval li = LayoutUtils.getOutermostComponent(sub, dimension, alignment);
+						if (LayoutInterval.isAlignedAtBorder(li, parent, alignment)
+								|| LayoutInterval.isPlacedAtBorder(li, parent, dimension, alignment)) { // here we have an aligned component
+							alignedInterval = li;
+						} else {
+							continue; // not aligned subinterval
+						}
+					} else {
+						alignedInterval = sub;
+					}
+					break;
+				}
+			}
+			if (indent) {
+				return alignedInterval;
+			}
+			interval = parent;
+		} while (alignedInterval == null);
+		return parent.getSubIntervalCount() > 2 ? parent : alignedInterval;
+	}
 
-  /**
-   * For inclusion derived from existing position (findOutCurrentPosition) checks if it does not
-   * refer to 'neighbor' being in sequential group. In such case the inclusion is changed to refer
-   * to the sequence (single neighbor is supposed to be in parallel group). This may happen if the
-   * sequence survived removal of the interval even with just one component remaining (because of
-   * gaps around it).
-   */
-  private static void correctNeighborInSequence(IncludeDesc iDesc) {
-    if (iDesc != null && iDesc.neighbor != null && iDesc.neighbor.getParent().isSequential()) {
-      assert iDesc.parent == iDesc.neighbor.getParent().getParent();
-      iDesc.parent = iDesc.neighbor.getParent();
-      iDesc.neighbor = null;
-    }
-  }
+	/**
+	 * For inclusion derived from existing position (findOutCurrentPosition) checks if it does not
+	 * refer to 'neighbor' being in sequential group. In such case the inclusion is changed to refer
+	 * to the sequence (single neighbor is supposed to be in parallel group). This may happen if the
+	 * sequence survived removal of the interval even with just one component remaining (because of
+	 * gaps around it).
+	 */
+	private static void correctNeighborInSequence(IncludeDesc iDesc) {
+		if (iDesc != null && iDesc.neighbor != null && iDesc.neighbor.getParent().isSequential()) {
+			assert iDesc.parent == iDesc.neighbor.getParent().getParent();
+			iDesc.parent = iDesc.neighbor.getParent();
+			iDesc.neighbor = null;
+		}
+	}
 
-  // -----
-  // overlap analysis
-  private int getDimensionSolvingOverlap(LayoutDragger.PositionDef[] positions) {
-    if (dragger.isResizing(HORIZONTAL) && !dragger.isResizing(VERTICAL)) {
-      return HORIZONTAL;
-    }
-    if (dragger.isResizing(VERTICAL) && !dragger.isResizing(HORIZONTAL)
-        || positions[HORIZONTAL] != null
-            && positions[HORIZONTAL].snapped
-            && (positions[VERTICAL] == null || !positions[VERTICAL].snapped)
-        || positions[VERTICAL] != null
-            && !positions[VERTICAL].nextTo
-            && positions[VERTICAL].snapped
-            && positions[VERTICAL].interval.getParent() == null
-            && !existsComponentPlacedAtBorder(
-                positions[VERTICAL].interval,
-                VERTICAL,
-                positions[VERTICAL].alignment)) {
-      return VERTICAL;
-    }
-    if (positions[VERTICAL] != null
-        && positions[VERTICAL].nextTo
-        && positions[VERTICAL].snapped
-        && positions[VERTICAL].interval.getParent() == null) {
-      int alignment = positions[VERTICAL].alignment;
-      int[][] overlapSides =
-          overlappingGapSides(dragger.getTargetRoots()[HORIZONTAL], dragger.getMovingSpace());
-      if ((alignment == LEADING || alignment == TRAILING)
-          && overlapSides[VERTICAL][1 - alignment] != 0
-          && overlapSides[VERTICAL][alignment] == 0) {
-        return VERTICAL;
-      }
-    }
-    if ((positions[HORIZONTAL] == null || !positions[HORIZONTAL].snapped)
-        && (positions[VERTICAL] == null || !positions[VERTICAL].snapped)) {
-      boolean[] overlapDim =
-          overlappingGapDimensions(dragger.getTargetRoots()[HORIZONTAL], dragger.getMovingSpace());
-      if (overlapDim[VERTICAL] && !overlapDim[HORIZONTAL]) {
-        return VERTICAL;
-      }
-    }
-    return HORIZONTAL;
-  }
+	// -----
+	// overlap analysis
+	private int getDimensionSolvingOverlap(LayoutDragger.PositionDef[] positions) {
+		if (dragger.isResizing(HORIZONTAL) && !dragger.isResizing(VERTICAL)) {
+			return HORIZONTAL;
+		}
+		if (dragger.isResizing(VERTICAL) && !dragger.isResizing(HORIZONTAL)
+				|| positions[HORIZONTAL] != null
+				&& positions[HORIZONTAL].snapped
+				&& (positions[VERTICAL] == null || !positions[VERTICAL].snapped)
+				|| positions[VERTICAL] != null
+				&& !positions[VERTICAL].nextTo
+				&& positions[VERTICAL].snapped
+				&& positions[VERTICAL].interval.getParent() == null
+				&& !existsComponentPlacedAtBorder(
+						positions[VERTICAL].interval,
+						VERTICAL,
+						positions[VERTICAL].alignment)) {
+			return VERTICAL;
+		}
+		if (positions[VERTICAL] != null
+				&& positions[VERTICAL].nextTo
+				&& positions[VERTICAL].snapped
+				&& positions[VERTICAL].interval.getParent() == null) {
+			int alignment = positions[VERTICAL].alignment;
+			int[][] overlapSides =
+					overlappingGapSides(dragger.getTargetRoots()[HORIZONTAL], dragger.getMovingSpace());
+			if ((alignment == LEADING || alignment == TRAILING)
+					&& overlapSides[VERTICAL][1 - alignment] != 0
+					&& overlapSides[VERTICAL][alignment] == 0) {
+				return VERTICAL;
+			}
+		}
+		if ((positions[HORIZONTAL] == null || !positions[HORIZONTAL].snapped)
+				&& (positions[VERTICAL] == null || !positions[VERTICAL].snapped)) {
+			boolean[] overlapDim =
+					overlappingGapDimensions(dragger.getTargetRoots()[HORIZONTAL], dragger.getMovingSpace());
+			if (overlapDim[VERTICAL] && !overlapDim[HORIZONTAL]) {
+				return VERTICAL;
+			}
+		}
+		return HORIZONTAL;
+	}
 
-  /**
-   * Checks whether there is a component placed at the border of the specified interval.
-   *
-   * @param interval
-   *          interval to check.
-   * @param dimension
-   *          dimension that should be considered.
-   * @param alignment
-   *          alignment that should be considered.
-   */
-  private static boolean existsComponentPlacedAtBorder(LayoutInterval interval,
-      int dimension,
-      int alignment) {
-    Iterator<LayoutInterval> iter = interval.getSubIntervals();
-    while (iter.hasNext()) {
-      LayoutInterval subInterval = iter.next();
-      if (LayoutInterval.isPlacedAtBorder(interval, dimension, alignment)) {
-        if (subInterval.isComponent()) {
-          return true;
-        } else if (subInterval.isGroup()) {
-          if (existsComponentPlacedAtBorder(subInterval, dimension, alignment)) {
-            return true;
-          }
-        }
-      }
-    }
-    return false;
-  }
+	/**
+	 * Checks whether there is a component placed at the border of the specified interval.
+	 *
+	 * @param interval
+	 *          interval to check.
+	 * @param dimension
+	 *          dimension that should be considered.
+	 * @param alignment
+	 *          alignment that should be considered.
+	 */
+	private static boolean existsComponentPlacedAtBorder(LayoutInterval interval,
+			int dimension,
+			int alignment) {
+		Iterator<LayoutInterval> iter = interval.getSubIntervals();
+		while (iter.hasNext()) {
+			LayoutInterval subInterval = iter.next();
+			if (LayoutInterval.isPlacedAtBorder(interval, dimension, alignment)) {
+				if (subInterval.isComponent()) {
+					return true;
+				} else if (subInterval.isGroup()) {
+					if (existsComponentPlacedAtBorder(subInterval, dimension, alignment)) {
+						return true;
+					}
+				}
+			}
+		}
+		return false;
+	}
 
-  /**
-   * Fills the given list by components that overlap with the <code>region</code>.
-   *
-   * @param overlaps
-   *          list that should be filled by overlapping components.
-   * @param group
-   *          layout group that is scanned by this method.
-   * @param region
-   *          region to check.
-   */
-  private static void fillOverlappingComponents(List<LayoutComponent> overlaps,
-      LayoutInterval group,
-      LayoutRegion region) {
-    Iterator<LayoutInterval> iter = group.getSubIntervals();
-    while (iter.hasNext()) {
-      LayoutInterval subInterval = iter.next();
-      if (subInterval.isGroup()) {
-        fillOverlappingComponents(overlaps, subInterval, region);
-      } else if (subInterval.isComponent()) {
-        LayoutComponent component = subInterval.getComponent();
-        LayoutRegion compRegion = subInterval.getCurrentSpace();
-        if (LayoutRegion.overlap(compRegion, region, HORIZONTAL, 0)
-            && LayoutRegion.overlap(compRegion, region, VERTICAL, 0)) {
-          overlaps.add(component);
-        }
-      }
-    }
-  }
+	/**
+	 * Fills the given list by components that overlap with the <code>region</code>.
+	 *
+	 * @param overlaps
+	 *          list that should be filled by overlapping components.
+	 * @param group
+	 *          layout group that is scanned by this method.
+	 * @param region
+	 *          region to check.
+	 */
+	private static void fillOverlappingComponents(List<LayoutComponent> overlaps,
+			LayoutInterval group,
+			LayoutRegion region) {
+		Iterator<LayoutInterval> iter = group.getSubIntervals();
+		while (iter.hasNext()) {
+			LayoutInterval subInterval = iter.next();
+			if (subInterval.isGroup()) {
+				fillOverlappingComponents(overlaps, subInterval, region);
+			} else if (subInterval.isComponent()) {
+				LayoutComponent component = subInterval.getComponent();
+				LayoutRegion compRegion = subInterval.getCurrentSpace();
+				if (LayoutRegion.overlap(compRegion, region, HORIZONTAL, 0)
+						&& LayoutRegion.overlap(compRegion, region, VERTICAL, 0)) {
+					overlaps.add(component);
+				}
+			}
+		}
+	}
 
-  // Helper method for getDimensionSolvingOverlap() method
-  private static boolean[] overlappingGapDimensions(LayoutInterval layoutRoot,
-      LayoutRegion region) {
-    boolean[] result = new boolean[2];
-    int[][] overlapSides = overlappingGapSides(layoutRoot, region);
-    for (int i = 0; i < DIM_COUNT; i++) {
-      result[i] = overlapSides[i][0] == 1 && overlapSides[i][1] == 1;
-    }
-    return result;
-  }
+	// Helper method for getDimensionSolvingOverlap() method
+	private static boolean[] overlappingGapDimensions(LayoutInterval layoutRoot,
+			LayoutRegion region) {
+		boolean[] result = new boolean[2];
+		int[][] overlapSides = overlappingGapSides(layoutRoot, region);
+		for (int i = 0; i < DIM_COUNT; i++) {
+			result[i] = overlapSides[i][0] == 1 && overlapSides[i][1] == 1;
+		}
+		return result;
+	}
 
-  // Helper method for getDimensionSolvingOverlap() method
-  private static int[][] overlappingGapSides(LayoutInterval layoutRoot, LayoutRegion region) {
-    int[][] overlapSides = new int[][]{{0, 0}, {0, 0}};
-    List<LayoutComponent> overlaps = new LinkedList<LayoutComponent>();
-    //        LayoutInterval layoutRoot = LayoutInterval.getRoot(positions[HORIZONTAL].interval);
-    fillOverlappingComponents(overlaps, layoutRoot, region);
-    Iterator<LayoutComponent> iter = overlaps.iterator();
-    while (iter.hasNext()) {
-      LayoutComponent component = iter.next();
-      LayoutRegion compRegion = component.getLayoutInterval(HORIZONTAL).getCurrentSpace();
-      for (int i = 0; i < DIM_COUNT; i++) {
-        int[] edges = overlappingSides(compRegion, region, i);
-        for (int j = 0; j < 2; j++) {
-          if (edges[j] == 1) {
-            overlapSides[i][j] = 1;
-          } else if (edges[j] == -1) {
-            if (overlapSides[i][j] == -1) {
-              overlapSides[i][j] = 1;
-            } else if (overlapSides[i][j] == 0) {
-              overlapSides[i][j] = -1;
-            }
-          }
-        }
-      }
-    }
-    return overlapSides;
-  }
+	// Helper method for getDimensionSolvingOverlap() method
+	private static int[][] overlappingGapSides(LayoutInterval layoutRoot, LayoutRegion region) {
+		int[][] overlapSides = new int[][]{{0, 0}, {0, 0}};
+		List<LayoutComponent> overlaps = new LinkedList<LayoutComponent>();
+		//        LayoutInterval layoutRoot = LayoutInterval.getRoot(positions[HORIZONTAL].interval);
+		fillOverlappingComponents(overlaps, layoutRoot, region);
+		Iterator<LayoutComponent> iter = overlaps.iterator();
+		while (iter.hasNext()) {
+			LayoutComponent component = iter.next();
+			LayoutRegion compRegion = component.getLayoutInterval(HORIZONTAL).getCurrentSpace();
+			for (int i = 0; i < DIM_COUNT; i++) {
+				int[] edges = overlappingSides(compRegion, region, i);
+				for (int j = 0; j < 2; j++) {
+					if (edges[j] == 1) {
+						overlapSides[i][j] = 1;
+					} else if (edges[j] == -1) {
+						if (overlapSides[i][j] == -1) {
+							overlapSides[i][j] = 1;
+						} else if (overlapSides[i][j] == 0) {
+							overlapSides[i][j] = -1;
+						}
+					}
+				}
+			}
+		}
+		return overlapSides;
+	}
 
-  // Helper method for overlappingGapSides() method
-  private static int[] overlappingSides(LayoutRegion compRegion,
-      LayoutRegion region,
-      int dimension) {
-    int[] sides = new int[2];
-    int compLeading = compRegion.positions[dimension][LEADING];
-    int compTrailing = compRegion.positions[dimension][TRAILING];
-    int regLeading = region.positions[dimension][LEADING];
-    int regTrailing = region.positions[dimension][TRAILING];
-    if (regLeading < compTrailing && compTrailing < regTrailing) {
-      sides[0] = 1;
-    }
-    if (regLeading < compLeading && compLeading < regTrailing) {
-      sides[1] = 1;
-    }
-    if (sides[0] == 1 && sides[1] == 1) {
-      sides[0] = sides[1] = -1;
-    }
-    return sides;
-  }
+	// Helper method for overlappingGapSides() method
+	private static int[] overlappingSides(LayoutRegion compRegion,
+			LayoutRegion region,
+			int dimension) {
+		int[] sides = new int[2];
+		int compLeading = compRegion.positions[dimension][LEADING];
+		int compTrailing = compRegion.positions[dimension][TRAILING];
+		int regLeading = region.positions[dimension][LEADING];
+		int regTrailing = region.positions[dimension][TRAILING];
+		if (regLeading < compTrailing && compTrailing < regTrailing) {
+			sides[0] = 1;
+		}
+		if (regLeading < compLeading && compLeading < regTrailing) {
+			sides[1] = 1;
+		}
+		if (sides[0] == 1 && sides[1] == 1) {
+			sides[0] = sides[1] = -1;
+		}
+		return sides;
+	}
 
-  // -----
-  // the following methods work in context of adding to actual dimension
-  private boolean checkResizing() {
-    LayoutInterval interval = addingIntervals[dimension];
-    int resizingEdge = dragger.getResizingEdge(dimension);
-    int fixedEdge = resizingEdge ^ 1;
-    LayoutDragger.PositionDef newPos = newPositions[dimension];
-    boolean resizing = false;
-    if (newPos != null && newPos.snapped && newPos.interval != null) {
-      int align1, align2;
-      if (newPos.interval.isParentOf(interval)) {
-        LayoutInterval parent = LayoutInterval.getFirstParent(interval, PARALLEL);
-        if (!LayoutRegion.pointInside(
-            dragger.getMovingSpace(),
-            resizingEdge,
-            parent.getCurrentSpace(),
-            dimension)) {
-          parent = newPos.interval;
-        }
-        align1 = LayoutInterval.getEffectiveAlignmentInParent(interval, parent, fixedEdge);
-        align2 = resizingEdge;
-      } else {
-        LayoutInterval parent = LayoutInterval.getCommonParent(interval, newPos.interval);
-        align1 = LayoutInterval.getEffectiveAlignmentInParent(interval, parent, fixedEdge);
-        align2 = newPos.nextTo
-            ? LayoutInterval.getEffectiveAlignmentInParent(
-                newPos.interval,
-                parent,
-                newPos.alignment ^ 1)
-            : resizingEdge;
-      }
-      if (align1 != align2
-          && (align1 == LEADING || align1 == TRAILING)
-          && (align2 == LEADING || align2 == TRAILING)) {
-        resizing = true;
-      }
-    }
-    // [perhaps we should consider also potential resizability of the component,
-    //  not only on resizing operation - the condition should be:
-    //  isComponentResizable(interval.getComponent(), dimension)  ]
-    return resizing;
-/*        if (pos2 != null) {
+	// -----
+	// the following methods work in context of adding to actual dimension
+	private boolean checkResizing() {
+		LayoutInterval interval = addingIntervals[dimension];
+		int resizingEdge = dragger.getResizingEdge(dimension);
+		int fixedEdge = resizingEdge ^ 1;
+		LayoutDragger.PositionDef newPos = newPositions[dimension];
+		boolean resizing = false;
+		if (newPos != null && newPos.snapped && newPos.interval != null) {
+			int align1, align2;
+			if (newPos.interval.isParentOf(interval)) {
+				LayoutInterval parent = LayoutInterval.getFirstParent(interval, PARALLEL);
+				if (!LayoutRegion.pointInside(
+						dragger.getMovingSpace(),
+						resizingEdge,
+						parent.getCurrentSpace(),
+						dimension)) {
+					parent = newPos.interval;
+				}
+				align1 = LayoutInterval.getEffectiveAlignmentInParent(interval, parent, fixedEdge);
+				align2 = resizingEdge;
+			} else {
+				LayoutInterval parent = LayoutInterval.getCommonParent(interval, newPos.interval);
+				align1 = LayoutInterval.getEffectiveAlignmentInParent(interval, parent, fixedEdge);
+				align2 = newPos.nextTo
+						? LayoutInterval.getEffectiveAlignmentInParent(
+								newPos.interval,
+								parent,
+								newPos.alignment ^ 1)
+								: resizingEdge;
+			}
+			if (align1 != align2
+					&& (align1 == LEADING || align1 == TRAILING)
+					&& (align2 == LEADING || align2 == TRAILING)) {
+				resizing = true;
+			}
+		}
+		// [perhaps we should consider also potential resizability of the component,
+		//  not only on resizing operation - the condition should be:
+		//  isComponentResizable(interval.getComponent(), dimension)  ]
+		return resizing;
+		/*        if (pos2 != null) {
 resizing = pos1.snapped && pos2.snapped;
 }
 else if (pos1.snapped) {
@@ -712,1403 +712,1403 @@ else if (pos1.snapped) {
 else {
 resizing = false;
 } */
-  }
+	}
 
-  /**
-   * Adds aligned with an interval to existing group, or creates new. (Now used only to a limited
-   * extent for closed groups only.)
-   */
-  private void addSimplyAligned() {
-    int alignment = aEdge;
-    assert alignment == CENTER || alignment == BASELINE;
-    layoutModel.setIntervalAlignment(addingInterval, alignment);
-    if (addingInterval.getParent() != null) {
-      // hack: resized interval in center/baseline has not been removed
-      return;
-    }
-    if (aSnappedParallel.isParallel() && aSnappedParallel.getGroupAlignment() == alignment) {
-      layoutModel.addInterval(addingInterval, aSnappedParallel, -1);
-      return;
-    }
-    LayoutInterval parent = aSnappedParallel.getParent();
-    if (parent.isParallel() && parent.getGroupAlignment() == alignment) {
-      layoutModel.addInterval(addingInterval, parent, -1);
-      return;
-    }
-    int alignIndex = layoutModel.removeInterval(aSnappedParallel);
-    LayoutInterval subGroup = new LayoutInterval(PARALLEL);
-    subGroup.setGroupAlignment(alignment);
-    if (parent.isParallel()) {
-      subGroup.setAlignment(aSnappedParallel.getAlignment());
-    }
-    layoutModel.setIntervalAlignment(aSnappedParallel, alignment);
-    layoutModel.addInterval(aSnappedParallel, subGroup, -1);
-    layoutModel.addInterval(addingInterval, subGroup, -1);
-    layoutModel.addInterval(subGroup, parent, alignIndex);
-  }
+	/**
+	 * Adds aligned with an interval to existing group, or creates new. (Now used only to a limited
+	 * extent for closed groups only.)
+	 */
+	private void addSimplyAligned() {
+		int alignment = aEdge;
+		assert alignment == CENTER || alignment == BASELINE;
+		layoutModel.setIntervalAlignment(addingInterval, alignment);
+		if (addingInterval.getParent() != null) {
+			// hack: resized interval in center/baseline has not been removed
+			return;
+		}
+		if (aSnappedParallel.isParallel() && aSnappedParallel.getGroupAlignment() == alignment) {
+			layoutModel.addInterval(addingInterval, aSnappedParallel, -1);
+			return;
+		}
+		LayoutInterval parent = aSnappedParallel.getParent();
+		if (parent.isParallel() && parent.getGroupAlignment() == alignment) {
+			layoutModel.addInterval(addingInterval, parent, -1);
+			return;
+		}
+		int alignIndex = layoutModel.removeInterval(aSnappedParallel);
+		LayoutInterval subGroup = new LayoutInterval(PARALLEL);
+		subGroup.setGroupAlignment(alignment);
+		if (parent.isParallel()) {
+			subGroup.setAlignment(aSnappedParallel.getAlignment());
+		}
+		layoutModel.setIntervalAlignment(aSnappedParallel, alignment);
+		layoutModel.addInterval(aSnappedParallel, subGroup, -1);
+		layoutModel.addInterval(addingInterval, subGroup, -1);
+		layoutModel.addInterval(subGroup, parent, alignIndex);
+	}
 
-  void addInterval(IncludeDesc iDesc1, IncludeDesc iDesc2) {
-    addToGroup(iDesc1, iDesc2, true);
-    // align in parallel if required
-    if (iDesc1.snappedParallel != null || iDesc2 != null && iDesc2.snappedParallel != null) {
-      if (iDesc2 != null && iDesc2.snappedParallel != null) {
-        alignInParallel(addingInterval, iDesc2.snappedParallel, iDesc2.alignment);
-      }
-      if (iDesc1.snappedParallel != null) {
-        alignInParallel(addingInterval, iDesc1.snappedParallel, iDesc1.alignment);
-      }
-    }
-    checkParallelResizing(addingInterval, iDesc1, iDesc2);
-    // post processing
-    LayoutInterval parent = addingInterval.getParent();
-    int accAlign = DEFAULT;
-    if (parent.isSequential()) {
-      int tryAlign = parent.getAlignment() != TRAILING ? TRAILING : LEADING;
-      if (LayoutInterval.getDirectNeighbor(addingInterval, tryAlign, true) == null) {
-        accAlign = tryAlign;
-      } else {
-        tryAlign ^= 1;
-        if (LayoutInterval.getDirectNeighbor(addingInterval, tryAlign, true) == null) {
-          accAlign = tryAlign;
-        }
-      }
-    } else {
-      accAlign = addingInterval.getAlignment() ^ 1;
-    }
-    if (accAlign != DEFAULT) {
-      accommodateOutPosition(addingInterval, accAlign); // adapt size of parent/neighbor
-    }
-    if (dragger.isResizing(dimension) && LayoutInterval.wantResize(addingInterval)) {
-      operations.suppressResizingOfSurroundingGaps(addingInterval);
-    }
-    // optimize gaps (may eliminate the sequence, also removes supporting gap in container)
-    operations.optimizeGaps(LayoutInterval.getFirstParent(addingInterval, PARALLEL), dimension);
-    parent = addingInterval.getParent();
-    if (parent.isSequential()) {// && !alignedInParallel)
-      int nonEmptyCount = LayoutInterval.getCount(parent, LayoutRegion.ALL_POINTS, true);
-      if (nonEmptyCount > 1 && dimension == HORIZONTAL) {
-        // check whether the added interval could not be rather placed
-        // in a neighbor parallel group
-        operations.moveInsideSequential(parent, dimension);
-      }
-    }
-    // avoid unnecessary parallel group nesting
-    operations.mergeParallelGroups(LayoutInterval.getFirstParent(addingInterval, PARALLEL));
-  }
+	void addInterval(IncludeDesc iDesc1, IncludeDesc iDesc2) {
+		addToGroup(iDesc1, iDesc2, true);
+		// align in parallel if required
+		if (iDesc1.snappedParallel != null || iDesc2 != null && iDesc2.snappedParallel != null) {
+			if (iDesc2 != null && iDesc2.snappedParallel != null) {
+				alignInParallel(addingInterval, iDesc2.snappedParallel, iDesc2.alignment);
+			}
+			if (iDesc1.snappedParallel != null) {
+				alignInParallel(addingInterval, iDesc1.snappedParallel, iDesc1.alignment);
+			}
+		}
+		checkParallelResizing(addingInterval, iDesc1, iDesc2);
+		// post processing
+		LayoutInterval parent = addingInterval.getParent();
+		int accAlign = DEFAULT;
+		if (parent.isSequential()) {
+			int tryAlign = parent.getAlignment() != TRAILING ? TRAILING : LEADING;
+			if (LayoutInterval.getDirectNeighbor(addingInterval, tryAlign, true) == null) {
+				accAlign = tryAlign;
+			} else {
+				tryAlign ^= 1;
+				if (LayoutInterval.getDirectNeighbor(addingInterval, tryAlign, true) == null) {
+					accAlign = tryAlign;
+				}
+			}
+		} else {
+			accAlign = addingInterval.getAlignment() ^ 1;
+		}
+		if (accAlign != DEFAULT) {
+			accommodateOutPosition(addingInterval, accAlign); // adapt size of parent/neighbor
+		}
+		if (dragger.isResizing(dimension) && LayoutInterval.wantResize(addingInterval)) {
+			operations.suppressResizingOfSurroundingGaps(addingInterval);
+		}
+		// optimize gaps (may eliminate the sequence, also removes supporting gap in container)
+		operations.optimizeGaps(LayoutInterval.getFirstParent(addingInterval, PARALLEL), dimension);
+		parent = addingInterval.getParent();
+		if (parent.isSequential()) {// && !alignedInParallel)
+			int nonEmptyCount = LayoutInterval.getCount(parent, LayoutRegion.ALL_POINTS, true);
+			if (nonEmptyCount > 1 && dimension == HORIZONTAL) {
+				// check whether the added interval could not be rather placed
+				// in a neighbor parallel group
+				operations.moveInsideSequential(parent, dimension);
+			}
+		}
+		// avoid unnecessary parallel group nesting
+		operations.mergeParallelGroups(LayoutInterval.getFirstParent(addingInterval, PARALLEL));
+	}
 
-  private void addToGroup(IncludeDesc iDesc1, IncludeDesc iDesc2, boolean definite) {
-    assert iDesc2 == null
-        || iDesc1.parent == iDesc2.parent
-            && iDesc1.newSubGroup == iDesc2.newSubGroup
-            && iDesc1.neighbor == iDesc2.neighbor;
-    LayoutInterval parent = iDesc1.parent;
-    LayoutInterval seq = null;
-    int index = 0;
-    if (parent.isSequential()) {
-      if (iDesc1.newSubGroup) {
-        LayoutRegion space = addingSpace;
-        //                if (dimension == VERTICAL) { // count in a margin in vertical direction
-        //                    // [because analyzeAdding uses it - maybe we should get rid of it completely]
-        //                    space = new LayoutRegion(space);
-        //                    space.reshape(VERTICAL, LEADING, -4);
-        //                    space.reshape(VERTICAL, TRAILING, 4);
-        //                }
-        LayoutInterval subgroup = extractParallelSequence(parent, space, false, iDesc1.alignment); // dimension == VERTICAL
-        if (subgroup != null) { // just for robustness - null only if something got screwed up
-          seq = new LayoutInterval(SEQUENTIAL);
-          parent = subgroup;
-        }
-      }
-      if (seq == null) {
-        seq = parent;
-        parent = seq.getParent();
-        index = iDesc1.index;
-      }
-    } else { // parallel parent
-      LayoutInterval neighbor = iDesc1.neighbor;
-      if (neighbor != null) {
-        assert neighbor.getParent() == parent;
-        seq = new LayoutInterval(SEQUENTIAL);
-        layoutModel.addInterval(seq, parent, layoutModel.removeInterval(neighbor));
-        seq.setAlignment(neighbor.getAlignment());
-        layoutModel.setIntervalAlignment(neighbor, DEFAULT);
-        layoutModel.addInterval(neighbor, seq, 0);
-        index = iDesc1.index;
-      } else {
-        seq = new LayoutInterval(SEQUENTIAL);
-        seq.setAlignment(iDesc1.alignment);
-      }
-    }
-    assert iDesc1.alignment >= 0 || iDesc2 == null;
-    assert iDesc2 == null || iDesc2.alignment == (iDesc1.alignment ^ 1);
-    assert parent.isParallel();
-    LayoutInterval[] neighbors = new LayoutInterval[2]; // LEADING, TRAILING
-    LayoutInterval[] gaps = new LayoutInterval[2]; // LEADING, TRAILING
-    LayoutInterval originalGap = null;
-    int[] centerDst = new int[2]; // LEADING, TRAILING
-    // find the neighbors for the adding interval
-    int count = seq.getSubIntervalCount();
-    if (index > count) {
-      index = count;
-    }
-    for (int i = LEADING; i <= TRAILING; i++) {
-      int idx1 = i == LEADING ? index - 1 : index;
-      int idx2 = i == LEADING ? index - 2 : index + 1;
-      if (idx1 >= 0 && idx1 < count) {
-        LayoutInterval li = seq.getSubInterval(idx1);
-        if (li.isEmptySpace()) {
-          originalGap = li;
-          if (idx2 >= 0 && idx2 < count) {
-            neighbors[i] = seq.getSubInterval(idx2);
-          }
-        } else {
-          neighbors[i] = li;
-        }
-      }
-      if (iDesc1.alignment < 0) { // no alignment known
-        centerDst[i] = addingSpace.positions[dimension][CENTER]
-            - (neighbors[i] != null
-                ? getPerceivedNeighborPosition(neighbors[i], addingSpace, dimension, i ^ 1)
-                : getPerceivedParentPosition(seq, parent, addingSpace, dimension, i));
-        if (i == TRAILING) {
-          centerDst[i] *= -1;
-        }
-      }
-    }
-    // compute leading and trailing gaps
-    int edges = 2;
-    for (int i = LEADING; edges > 0; i ^= 1, edges--) {
-      gaps[i] = null;
-      LayoutInterval outerNeighbor =
-          neighbors[i] == null ? LayoutInterval.getNeighbor(parent, i, false, true, false) : null;
-      IncludeDesc iiDesc = iDesc1.alignment < 0 || iDesc1.alignment == i ? iDesc1 : iDesc2;
-      if (neighbors[i] == null && iiDesc != null) { // at the start/end of the sequence
-        if (iiDesc.snappedNextTo != null
-            && outerNeighbor != null
-            && LayoutInterval.isDefaultPadding(outerNeighbor)) { // the padding is outside of the parent already
-          continue;
-        }
-        if (iiDesc.snappedParallel != null
-            && (!seq.isParentOf(iiDesc.snappedParallel) || originalGap == null)) { // starting/ending edge aligned in parallel - does not need a gap
-          continue;
-        }
-      }
-      boolean aligned;
-      if (iDesc1.alignment < 0) { // no specific alignment - decide based on distance
-        aligned =
-            centerDst[i] < centerDst[i ^ 1] || centerDst[i] == centerDst[i ^ 1] && i == LEADING;
-      } else if (iDesc2 != null) { // both positions defined
-        aligned = iiDesc.fixedPosition
-            || i == LEADING && originalLPosFixed
-            || i == TRAILING && originalTPosFixed;
-      } else { // single position only (either next to or parallel)
-        if (iDesc1.snappedParallel == null || !seq.isParentOf(iDesc1.snappedParallel)) {
-          aligned = i == iDesc1.alignment;
-        } else {
-          // special case - aligning with interval in the same sequence - to subst. its position
-          aligned = i == (iDesc1.alignment ^ 1);
-        }
-      }
-      boolean minorGap = false;
-      if (!aligned && neighbors[i] == null && originalGap == null) {
-        IncludeDesc otherDesc = iiDesc == iDesc1 ? iDesc2 : iDesc1;
-        LayoutInterval parallel = otherDesc != null ? otherDesc.snappedParallel : null;
-        // make sure new sequence has appropriate explicit alignment
-        if (parallel == null && seq.getSubIntervalCount() == 0 && seq.getAlignment() != (i ^ 1)) {
-          layoutModel.setIntervalAlignment(seq, i ^ 1);
-        }
-        if (outerNeighbor != null && outerNeighbor.isEmptySpace()) {
-          continue; // unaligned ending gap not needed - there's a gap outside the parent
-        } else { // minor gap if it does not need to define the parent size
-          minorGap = parallel != null && parallel.getParent() != null
-              || parent.getParent() != null && LayoutInterval.getCount(parent, i ^ 1, true) > 0;
-        }
-      }
-      boolean fixedGap = aligned;
-      if (!fixedGap) {
-        if (minorGap || LayoutInterval.wantResize(addingInterval)) {
-          fixedGap = true;
-        } else if (originalGap != null && !LayoutInterval.canResize(originalGap)) {
-          IncludeDesc otherDesc = iiDesc == iDesc1 ? iDesc2 : iDesc1;
-          if (otherDesc == null
-              || otherDesc.snappedParallel == null
-              || neighbors[i] == null
-              || LayoutInterval.getEffectiveAlignment(neighbors[i], i ^ 1) == (i ^ 1)) {
-            fixedGap = true;
-          }
-        } else if (originalGap == null) {
-          if (neighbors[i] != null
-              && LayoutInterval.getEffectiveAlignment(neighbors[i], i ^ 1) == (i ^ 1)
-              || LayoutInterval.wantResize(seq)) {
-            //                         || (neighbors[i] == null && !LayoutInterval.contentWantResize(parent)))
-            fixedGap = true;
-          }
-        }
-      }
-      LayoutInterval gap = new LayoutInterval(SINGLE);
-      if (!minorGap) {
-        if (iiDesc == null || iiDesc.snappedNextTo == null) {
-          // the gap possibly needs an explicit size
-          LayoutRegion space = iiDesc != null && iiDesc.snappedParallel != null
-              ? iiDesc.snappedParallel.getCurrentSpace()
-              : addingSpace;
-          int distance = neighbors[i] != null
-              ? LayoutRegion.distance(neighbors[i].getCurrentSpace(), space, dimension, i ^ 1, i)
-              : LayoutRegion.distance(parent.getCurrentSpace(), space, dimension, i, i);
-          if (i == TRAILING) {
-            distance *= -1;
-          }
-          if (distance > 0) {
-            int pad = neighbors[i] != null
-                || LayoutInterval.getNeighbor(parent, i, false, true, false) == null
-                    ? determineExpectingPadding(addingInterval, neighbors[i], seq, i)
-                    : Short.MIN_VALUE; // has no neighbor, but is not related to container border
-            if (distance > pad || fixedGap && distance != pad) {
-              gap.setPreferredSize(distance);
-              if (fixedGap) {
-                gap.setMinimumSize(USE_PREFERRED_SIZE);
-                gap.setMaximumSize(USE_PREFERRED_SIZE);
-              }
-            }
-          }
-        } else {
-          gap.setPaddingType(iiDesc.paddingType);
-        }
-      }
-      if (!fixedGap) {
-        gap.setMaximumSize(Short.MAX_VALUE);
-        // resizing gap may close the open parent group
-        IncludeDesc otherDesc = iiDesc == iDesc1 ? iDesc2 : iDesc1;
-        if (definite
-            && neighbors[i] != null
-            && parent.getParent() != null
-            && (otherDesc == null || otherDesc.alignment == DEFAULT)
-            && !isSignificantGroupEdge(seq, i ^ 1)) { // the aligned edge needs to be anchored out of parent (independently)
-          parent = separateSequence(seq, i ^ 1);
-          if (i == TRAILING) {
-            edges++; // we need to revisit the LEADING gap
-          }
-        }
-      }
-      gaps[i] = gap;
-    }
-    if (seq.getParent() == null) { // newly created sequence
-      assert seq.getSubIntervalCount() == 0;
-      if (gaps[LEADING] == null && gaps[TRAILING] == null) { // after all, the sequence is not needed
-        layoutModel.setIntervalAlignment(addingInterval, seq.getAlignment());
-        layoutModel.addInterval(addingInterval, parent, -1);
-        return;
-      } else {
-        layoutModel.addInterval(seq, parent, -1);
-      }
-    }
-    // aligning in parallel with interval in the same sequence was resolved
-    // by substituting its position
-    if (iDesc1.snappedParallel != null && seq.isParentOf(iDesc1.snappedParallel)) {
-      iDesc1.snappedParallel = null; // set to null not to try alignInParallel later
-    }
-    // finally add the surrounding gaps and the interval
-    if (originalGap != null) {
-      index = layoutModel.removeInterval(originalGap);
-    } else if (neighbors[TRAILING] != null) {
-      index = seq.indexOf(neighbors[TRAILING]);
-    } else if (neighbors[LEADING] != null) {
-      index = seq.getSubIntervalCount();
-    } else {
-      index = 0;
-    }
-    if (gaps[LEADING] != null) {
-      layoutModel.addInterval(gaps[LEADING], seq, index++);
-    }
-    layoutModel.setIntervalAlignment(addingInterval, DEFAULT);
-    layoutModel.addInterval(addingInterval, seq, index++);
-    if (gaps[TRAILING] != null) {
-      layoutModel.addInterval(gaps[TRAILING], seq, index);
-    }
-  }
+	private void addToGroup(IncludeDesc iDesc1, IncludeDesc iDesc2, boolean definite) {
+		assert iDesc2 == null
+				|| iDesc1.parent == iDesc2.parent
+				&& iDesc1.newSubGroup == iDesc2.newSubGroup
+				&& iDesc1.neighbor == iDesc2.neighbor;
+		LayoutInterval parent = iDesc1.parent;
+		LayoutInterval seq = null;
+		int index = 0;
+		if (parent.isSequential()) {
+			if (iDesc1.newSubGroup) {
+				LayoutRegion space = addingSpace;
+				//                if (dimension == VERTICAL) { // count in a margin in vertical direction
+				//                    // [because analyzeAdding uses it - maybe we should get rid of it completely]
+				//                    space = new LayoutRegion(space);
+				//                    space.reshape(VERTICAL, LEADING, -4);
+				//                    space.reshape(VERTICAL, TRAILING, 4);
+				//                }
+				LayoutInterval subgroup = extractParallelSequence(parent, space, false, iDesc1.alignment); // dimension == VERTICAL
+				if (subgroup != null) { // just for robustness - null only if something got screwed up
+					seq = new LayoutInterval(SEQUENTIAL);
+					parent = subgroup;
+				}
+			}
+			if (seq == null) {
+				seq = parent;
+				parent = seq.getParent();
+				index = iDesc1.index;
+			}
+		} else { // parallel parent
+			LayoutInterval neighbor = iDesc1.neighbor;
+			if (neighbor != null) {
+				assert neighbor.getParent() == parent;
+				seq = new LayoutInterval(SEQUENTIAL);
+				layoutModel.addInterval(seq, parent, layoutModel.removeInterval(neighbor));
+				seq.setAlignment(neighbor.getAlignment());
+				layoutModel.setIntervalAlignment(neighbor, DEFAULT);
+				layoutModel.addInterval(neighbor, seq, 0);
+				index = iDesc1.index;
+			} else {
+				seq = new LayoutInterval(SEQUENTIAL);
+				seq.setAlignment(iDesc1.alignment);
+			}
+		}
+		assert iDesc1.alignment >= 0 || iDesc2 == null;
+		assert iDesc2 == null || iDesc2.alignment == (iDesc1.alignment ^ 1);
+		assert parent.isParallel();
+		LayoutInterval[] neighbors = new LayoutInterval[2]; // LEADING, TRAILING
+		LayoutInterval[] gaps = new LayoutInterval[2]; // LEADING, TRAILING
+		LayoutInterval originalGap = null;
+		int[] centerDst = new int[2]; // LEADING, TRAILING
+		// find the neighbors for the adding interval
+		int count = seq.getSubIntervalCount();
+		if (index > count) {
+			index = count;
+		}
+		for (int i = LEADING; i <= TRAILING; i++) {
+			int idx1 = i == LEADING ? index - 1 : index;
+			int idx2 = i == LEADING ? index - 2 : index + 1;
+			if (idx1 >= 0 && idx1 < count) {
+				LayoutInterval li = seq.getSubInterval(idx1);
+				if (li.isEmptySpace()) {
+					originalGap = li;
+					if (idx2 >= 0 && idx2 < count) {
+						neighbors[i] = seq.getSubInterval(idx2);
+					}
+				} else {
+					neighbors[i] = li;
+				}
+			}
+			if (iDesc1.alignment < 0) { // no alignment known
+				centerDst[i] = addingSpace.positions[dimension][CENTER]
+						- (neighbors[i] != null
+						? getPerceivedNeighborPosition(neighbors[i], addingSpace, dimension, i ^ 1)
+								: getPerceivedParentPosition(seq, parent, addingSpace, dimension, i));
+				if (i == TRAILING) {
+					centerDst[i] *= -1;
+				}
+			}
+		}
+		// compute leading and trailing gaps
+		int edges = 2;
+		for (int i = LEADING; edges > 0; i ^= 1, edges--) {
+			gaps[i] = null;
+			LayoutInterval outerNeighbor =
+					neighbors[i] == null ? LayoutInterval.getNeighbor(parent, i, false, true, false) : null;
+			IncludeDesc iiDesc = iDesc1.alignment < 0 || iDesc1.alignment == i ? iDesc1 : iDesc2;
+			if (neighbors[i] == null && iiDesc != null) { // at the start/end of the sequence
+				if (iiDesc.snappedNextTo != null
+						&& outerNeighbor != null
+						&& LayoutInterval.isDefaultPadding(outerNeighbor)) { // the padding is outside of the parent already
+					continue;
+				}
+				if (iiDesc.snappedParallel != null
+						&& (!seq.isParentOf(iiDesc.snappedParallel) || originalGap == null)) { // starting/ending edge aligned in parallel - does not need a gap
+					continue;
+				}
+			}
+			boolean aligned;
+			if (iDesc1.alignment < 0) { // no specific alignment - decide based on distance
+				aligned =
+						centerDst[i] < centerDst[i ^ 1] || centerDst[i] == centerDst[i ^ 1] && i == LEADING;
+			} else if (iDesc2 != null) { // both positions defined
+				aligned = iiDesc.fixedPosition
+						|| i == LEADING && originalLPosFixed
+						|| i == TRAILING && originalTPosFixed;
+			} else { // single position only (either next to or parallel)
+				if (iDesc1.snappedParallel == null || !seq.isParentOf(iDesc1.snappedParallel)) {
+					aligned = i == iDesc1.alignment;
+				} else {
+					// special case - aligning with interval in the same sequence - to subst. its position
+					aligned = i == (iDesc1.alignment ^ 1);
+				}
+			}
+			boolean minorGap = false;
+			if (!aligned && neighbors[i] == null && originalGap == null) {
+				IncludeDesc otherDesc = iiDesc == iDesc1 ? iDesc2 : iDesc1;
+				LayoutInterval parallel = otherDesc != null ? otherDesc.snappedParallel : null;
+				// make sure new sequence has appropriate explicit alignment
+				if (parallel == null && seq.getSubIntervalCount() == 0 && seq.getAlignment() != (i ^ 1)) {
+					layoutModel.setIntervalAlignment(seq, i ^ 1);
+				}
+				if (outerNeighbor != null && outerNeighbor.isEmptySpace()) {
+					continue; // unaligned ending gap not needed - there's a gap outside the parent
+				} else { // minor gap if it does not need to define the parent size
+					minorGap = parallel != null && parallel.getParent() != null
+							|| parent.getParent() != null && LayoutInterval.getCount(parent, i ^ 1, true) > 0;
+				}
+			}
+			boolean fixedGap = aligned;
+			if (!fixedGap) {
+				if (minorGap || LayoutInterval.wantResize(addingInterval)) {
+					fixedGap = true;
+				} else if (originalGap != null && !LayoutInterval.canResize(originalGap)) {
+					IncludeDesc otherDesc = iiDesc == iDesc1 ? iDesc2 : iDesc1;
+					if (otherDesc == null
+							|| otherDesc.snappedParallel == null
+							|| neighbors[i] == null
+							|| LayoutInterval.getEffectiveAlignment(neighbors[i], i ^ 1) == (i ^ 1)) {
+						fixedGap = true;
+					}
+				} else if (originalGap == null) {
+					if (neighbors[i] != null
+							&& LayoutInterval.getEffectiveAlignment(neighbors[i], i ^ 1) == (i ^ 1)
+							|| LayoutInterval.wantResize(seq)) {
+						//                         || (neighbors[i] == null && !LayoutInterval.contentWantResize(parent)))
+						fixedGap = true;
+					}
+				}
+			}
+			LayoutInterval gap = new LayoutInterval(SINGLE);
+			if (!minorGap) {
+				if (iiDesc == null || iiDesc.snappedNextTo == null) {
+					// the gap possibly needs an explicit size
+					LayoutRegion space = iiDesc != null && iiDesc.snappedParallel != null
+							? iiDesc.snappedParallel.getCurrentSpace()
+									: addingSpace;
+					int distance = neighbors[i] != null
+							? LayoutRegion.distance(neighbors[i].getCurrentSpace(), space, dimension, i ^ 1, i)
+									: LayoutRegion.distance(parent.getCurrentSpace(), space, dimension, i, i);
+					if (i == TRAILING) {
+						distance *= -1;
+					}
+					if (distance > 0) {
+						int pad = neighbors[i] != null
+								|| LayoutInterval.getNeighbor(parent, i, false, true, false) == null
+								? determineExpectingPadding(addingInterval, neighbors[i], seq, i)
+										: Short.MIN_VALUE; // has no neighbor, but is not related to container border
+						if (distance > pad || fixedGap && distance != pad) {
+							gap.setPreferredSize(distance);
+							if (fixedGap) {
+								gap.setMinimumSize(USE_PREFERRED_SIZE);
+								gap.setMaximumSize(USE_PREFERRED_SIZE);
+							}
+						}
+					}
+				} else {
+					gap.setPaddingType(iiDesc.paddingType);
+				}
+			}
+			if (!fixedGap) {
+				gap.setMaximumSize(Short.MAX_VALUE);
+				// resizing gap may close the open parent group
+				IncludeDesc otherDesc = iiDesc == iDesc1 ? iDesc2 : iDesc1;
+				if (definite
+						&& neighbors[i] != null
+						&& parent.getParent() != null
+						&& (otherDesc == null || otherDesc.alignment == DEFAULT)
+						&& !isSignificantGroupEdge(seq, i ^ 1)) { // the aligned edge needs to be anchored out of parent (independently)
+					parent = separateSequence(seq, i ^ 1);
+					if (i == TRAILING) {
+						edges++; // we need to revisit the LEADING gap
+					}
+				}
+			}
+			gaps[i] = gap;
+		}
+		if (seq.getParent() == null) { // newly created sequence
+			assert seq.getSubIntervalCount() == 0;
+			if (gaps[LEADING] == null && gaps[TRAILING] == null) { // after all, the sequence is not needed
+				layoutModel.setIntervalAlignment(addingInterval, seq.getAlignment());
+				layoutModel.addInterval(addingInterval, parent, -1);
+				return;
+			} else {
+				layoutModel.addInterval(seq, parent, -1);
+			}
+		}
+		// aligning in parallel with interval in the same sequence was resolved
+		// by substituting its position
+		if (iDesc1.snappedParallel != null && seq.isParentOf(iDesc1.snappedParallel)) {
+			iDesc1.snappedParallel = null; // set to null not to try alignInParallel later
+		}
+		// finally add the surrounding gaps and the interval
+		if (originalGap != null) {
+			index = layoutModel.removeInterval(originalGap);
+		} else if (neighbors[TRAILING] != null) {
+			index = seq.indexOf(neighbors[TRAILING]);
+		} else if (neighbors[LEADING] != null) {
+			index = seq.getSubIntervalCount();
+		} else {
+			index = 0;
+		}
+		if (gaps[LEADING] != null) {
+			layoutModel.addInterval(gaps[LEADING], seq, index++);
+		}
+		layoutModel.setIntervalAlignment(addingInterval, DEFAULT);
+		layoutModel.addInterval(addingInterval, seq, index++);
+		if (gaps[TRAILING] != null) {
+			layoutModel.addInterval(gaps[TRAILING], seq, index);
+		}
+	}
 
-  private LayoutInterval extractParallelSequence(LayoutInterval seq,
-      LayoutRegion space,
-      boolean close,
-      int alignment) {
-    int count = seq.getSubIntervalCount();
-    int startIndex = 0;
-    int endIndex = count - 1;
-    int startPos = seq.getCurrentSpace().positions[dimension][LEADING];
-    int endPos = seq.getCurrentSpace().positions[dimension][TRAILING];
-    int point = alignment < 0 ? CENTER : alignment;
-    for (int i = 0; i < count; i++) {
-      LayoutInterval li = seq.getSubInterval(i);
-      if (li.isEmptySpace()) {
-        continue;
-      }
-      LayoutRegion subSpace = li.getCurrentSpace();
-      boolean forcedParallel = !solveOverlap && LayoutUtils.contentOverlap(space, li, dimension);
-      if (!forcedParallel && LayoutUtils.contentOverlap(space, li, dimension ^ 1)) { // orthogonal overlap
-        // this interval makes a hard boundary
-        if (getAddDirection(space, subSpace, dimension, point) == LEADING) {
-          // given interval is positioned before this subinterval (trailing boundary)
-          endIndex = i - 1;
-          endPos = subSpace.positions[dimension][LEADING];
-          break;
-        } else { // given interval points behind this one (leading boundary)
-          startIndex = i + 1;
-          startPos = subSpace.positions[dimension][TRAILING];
-        }
-      } else if (close) { // go for smallest parallel part possible
-        int[] detPos = space.positions[dimension];
-        int[] subPos = subSpace.positions[dimension];
-        if (detPos[LEADING] >= subPos[TRAILING]) {
-          startIndex = i + 1;
-          startPos = subPos[TRAILING];
-        } else if (detPos[LEADING] >= subPos[LEADING]) {
-          startIndex = i;
-          startPos = subPos[LEADING];
-        } else if (detPos[TRAILING] <= subPos[TRAILING]) {
-          if (detPos[TRAILING] > subPos[LEADING]) {
-            endIndex = i;
-            endPos = subPos[TRAILING];
-            break;
-          } else { // detPos[TRAILING] <= subPos[LEADING]
-            endIndex = i - 1;
-            endPos = subPos[LEADING];
-            break;
-          }
-        }
-      }
-    }
-    if (startIndex > endIndex) {
-      return null; // no part of the sequence can be parallel to the given space
-    }
-    if (startIndex == 0 && endIndex == count - 1) { // whole sequence is parallel
-      return seq.getParent();
-    }
-    LayoutInterval group = new LayoutInterval(PARALLEL);
-    //        int effAlign1 = getEffectiveAlignment(seq.getSubInterval(startIndex));
-    //        int effAlign2 = getEffectiveAlignment(seq.getSubInterval(endIndex));
-    //        int groupAlign = (effAlign1 == effAlign2 || effAlign2 < 0) ? effAlign1 : effAlign2;
-    if (alignment != DEFAULT) {
-      group.setGroupAlignment(/*groupAlign == LEADING || groupAlign == TRAILING ?
+	private LayoutInterval extractParallelSequence(LayoutInterval seq,
+			LayoutRegion space,
+			boolean close,
+			int alignment) {
+		int count = seq.getSubIntervalCount();
+		int startIndex = 0;
+		int endIndex = count - 1;
+		int startPos = seq.getCurrentSpace().positions[dimension][LEADING];
+		int endPos = seq.getCurrentSpace().positions[dimension][TRAILING];
+		int point = alignment < 0 ? CENTER : alignment;
+		for (int i = 0; i < count; i++) {
+			LayoutInterval li = seq.getSubInterval(i);
+			if (li.isEmptySpace()) {
+				continue;
+			}
+			LayoutRegion subSpace = li.getCurrentSpace();
+			boolean forcedParallel = !solveOverlap && LayoutUtils.contentOverlap(space, li, dimension);
+			if (!forcedParallel && LayoutUtils.contentOverlap(space, li, dimension ^ 1)) { // orthogonal overlap
+				// this interval makes a hard boundary
+				if (getAddDirection(space, subSpace, dimension, point) == LEADING) {
+					// given interval is positioned before this subinterval (trailing boundary)
+					endIndex = i - 1;
+					endPos = subSpace.positions[dimension][LEADING];
+					break;
+				} else { // given interval points behind this one (leading boundary)
+					startIndex = i + 1;
+					startPos = subSpace.positions[dimension][TRAILING];
+				}
+			} else if (close) { // go for smallest parallel part possible
+				int[] detPos = space.positions[dimension];
+				int[] subPos = subSpace.positions[dimension];
+				if (detPos[LEADING] >= subPos[TRAILING]) {
+					startIndex = i + 1;
+					startPos = subPos[TRAILING];
+				} else if (detPos[LEADING] >= subPos[LEADING]) {
+					startIndex = i;
+					startPos = subPos[LEADING];
+				} else if (detPos[TRAILING] <= subPos[TRAILING]) {
+					if (detPos[TRAILING] > subPos[LEADING]) {
+						endIndex = i;
+						endPos = subPos[TRAILING];
+						break;
+					} else { // detPos[TRAILING] <= subPos[LEADING]
+						endIndex = i - 1;
+						endPos = subPos[LEADING];
+						break;
+					}
+				}
+			}
+		}
+		if (startIndex > endIndex) {
+			return null; // no part of the sequence can be parallel to the given space
+		}
+		if (startIndex == 0 && endIndex == count - 1) { // whole sequence is parallel
+			return seq.getParent();
+		}
+		LayoutInterval group = new LayoutInterval(PARALLEL);
+		//        int effAlign1 = getEffectiveAlignment(seq.getSubInterval(startIndex));
+		//        int effAlign2 = getEffectiveAlignment(seq.getSubInterval(endIndex));
+		//        int groupAlign = (effAlign1 == effAlign2 || effAlign2 < 0) ? effAlign1 : effAlign2;
+		if (alignment != DEFAULT) {
+			group.setGroupAlignment(/*groupAlign == LEADING || groupAlign == TRAILING ?
                               groupAlign :*/alignment);
-    }
-    if (startIndex == endIndex) {
-      LayoutInterval li = layoutModel.removeInterval(seq, startIndex);
-      layoutModel.addInterval(li, group, 0);
-    } else {
-      LayoutInterval interSeq = new LayoutInterval(SEQUENTIAL);
-      group.add(interSeq, 0);
-      int i = startIndex;
-      while (i <= endIndex) {
-        LayoutInterval li = layoutModel.removeInterval(seq, i);
-        endIndex--;
-        layoutModel.addInterval(li, interSeq, -1);
-      }
-    }
-    layoutModel.addInterval(group, seq, startIndex);
-    group.getCurrentSpace().set(dimension, startPos, endPos);
-    return group;
-  }
+		}
+		if (startIndex == endIndex) {
+			LayoutInterval li = layoutModel.removeInterval(seq, startIndex);
+			layoutModel.addInterval(li, group, 0);
+		} else {
+			LayoutInterval interSeq = new LayoutInterval(SEQUENTIAL);
+			group.add(interSeq, 0);
+			int i = startIndex;
+			while (i <= endIndex) {
+				LayoutInterval li = layoutModel.removeInterval(seq, i);
+				endIndex--;
+				layoutModel.addInterval(li, interSeq, -1);
+			}
+		}
+		layoutModel.addInterval(group, seq, startIndex);
+		group.getCurrentSpace().set(dimension, startPos, endPos);
+		return group;
+	}
 
-  private static int getPerceivedParentPosition(LayoutInterval interval,
-      LayoutInterval parent,
-      LayoutRegion space,
-      int dimension,
-      int alignment) {
-    int position = Integer.MIN_VALUE;
-    do {
-      if (parent.isSequential()) {
-        interval = parent;
-        parent = interval.getParent();
-      }
-      LayoutInterval neighbor = null;
-      while (neighbor == null && parent.getParent() != null) {
-        boolean significantEdge = interval.getParent() != null
-            ? isSignificantGroupEdge(interval, alignment)
-            : LayoutInterval.isClosedGroup(parent, alignment);
-        if (significantEdge) {
-          break;
-        }
-        neighbor = LayoutInterval.getDirectNeighbor(parent, alignment, true);
-        if (neighbor == null) {
-          interval = parent;
-          parent = interval.getParent();
-          if (parent.isSequential()) {
-            interval = parent;
-            parent = interval.getParent();
-          }
-        }
-      }
-      if (neighbor == null) {
-        position = parent.getCurrentSpace().positions[dimension][alignment];
-      } else { // look for neighbor of the parent that has orthogonal overlap with the given space
-        do {
-          position = getPerceivedNeighborPosition(neighbor, space, dimension, alignment ^ 1);
-          if (position != Integer.MIN_VALUE) {
-            break;
-          } else {
-            // otherwise the space can "go through" this neighbor
-            neighbor = LayoutInterval.getDirectNeighbor(neighbor, alignment, true);
-          }
-        } while (neighbor != null);
-        if (neighbor == null) {
-          interval = parent;
-          parent = interval.getParent();
-        }
-      }
-    } while (position == Integer.MIN_VALUE);
-    return position;
-  }
+	private static int getPerceivedParentPosition(LayoutInterval interval,
+			LayoutInterval parent,
+			LayoutRegion space,
+			int dimension,
+			int alignment) {
+		int position = Integer.MIN_VALUE;
+		do {
+			if (parent.isSequential()) {
+				interval = parent;
+				parent = interval.getParent();
+			}
+			LayoutInterval neighbor = null;
+			while (neighbor == null && parent.getParent() != null) {
+				boolean significantEdge = interval.getParent() != null
+						? isSignificantGroupEdge(interval, alignment)
+								: LayoutInterval.isClosedGroup(parent, alignment);
+				if (significantEdge) {
+					break;
+				}
+				neighbor = LayoutInterval.getDirectNeighbor(parent, alignment, true);
+				if (neighbor == null) {
+					interval = parent;
+					parent = interval.getParent();
+					if (parent.isSequential()) {
+						interval = parent;
+						parent = interval.getParent();
+					}
+				}
+			}
+			if (neighbor == null) {
+				position = parent.getCurrentSpace().positions[dimension][alignment];
+			} else { // look for neighbor of the parent that has orthogonal overlap with the given space
+				do {
+					position = getPerceivedNeighborPosition(neighbor, space, dimension, alignment ^ 1);
+					if (position != Integer.MIN_VALUE) {
+						break;
+					} else {
+						// otherwise the space can "go through" this neighbor
+						neighbor = LayoutInterval.getDirectNeighbor(neighbor, alignment, true);
+					}
+				} while (neighbor != null);
+				if (neighbor == null) {
+					interval = parent;
+					parent = interval.getParent();
+				}
+			}
+		} while (position == Integer.MIN_VALUE);
+		return position;
+	}
 
-  private static boolean isSignificantGroupEdge(LayoutInterval interval, int alignment) {
-    LayoutInterval group = interval.getParent();
-    assert group.isParallel();
-    if (interval.getAlignment() == alignment || LayoutInterval.wantResize(interval)) {
-      return true;
-    }
-    if (!LayoutInterval.isClosedGroup(group, alignment)) {
-      return false;
-    }
-    if (!LayoutInterval.isExplicitlyClosedGroup(group)) { // naturally closed group
-      LayoutInterval neighborGap = LayoutInterval.getNeighbor(group, alignment, false, true, true);
-      if (neighborGap != null && LayoutInterval.isDefaultPadding(neighborGap)) {
-        // default padding means the group can be considered open at this edge
-        return false;
-      }
-    }
-    return true;
-  }
+	private static boolean isSignificantGroupEdge(LayoutInterval interval, int alignment) {
+		LayoutInterval group = interval.getParent();
+		assert group.isParallel();
+		if (interval.getAlignment() == alignment || LayoutInterval.wantResize(interval)) {
+			return true;
+		}
+		if (!LayoutInterval.isClosedGroup(group, alignment)) {
+			return false;
+		}
+		if (!LayoutInterval.isExplicitlyClosedGroup(group)) { // naturally closed group
+			LayoutInterval neighborGap = LayoutInterval.getNeighbor(group, alignment, false, true, true);
+			if (neighborGap != null && LayoutInterval.isDefaultPadding(neighborGap)) {
+				// default padding means the group can be considered open at this edge
+				return false;
+			}
+		}
+		return true;
+	}
 
-  private static int getPerceivedNeighborPosition(LayoutInterval neighbor,
-      LayoutRegion space,
-      int dimension,
-      int alignment) {
-    assert !neighbor.isEmptySpace();
-    if (neighbor.isComponent()) {
-      //            || (neighbor.isParallel() && LayoutInterval.isClosedGroup(neighbor, alignment)
-      //                && !LayoutRegion.overlap(neighbor.getCurrentSpace(), space, dimension, 0))
-      return neighbor.getCurrentSpace().positions[dimension][alignment];
-    }
-    int neighborPos = Integer.MIN_VALUE;
-    int n = neighbor.getSubIntervalCount();
-    int i, d;
-    if (neighbor.isParallel() || alignment == LEADING) {
-      d = 1;
-      i = 0;
-    } else {
-      d = -1;
-      i = n - 1;
-    }
-    while (i >= 0 && i < n) {
-      LayoutInterval sub = neighbor.getSubInterval(i);
-      i += d;
-      if (sub.isEmptySpace()
-          || sub.isComponent()
-              && !LayoutRegion.overlap(space, sub.getCurrentSpace(), dimension ^ 1, 0)) {
-        continue;
-      }
-      int pos = getPerceivedNeighborPosition(sub, space, dimension, alignment);
-      if (pos != Integer.MIN_VALUE) {
-        if (neighbor.isSequential()) {
-          neighborPos = pos;
-          break;
-        } else if (neighborPos == Integer.MIN_VALUE || pos * d < neighborPos * d) {
-          neighborPos = pos;
-          // continue, there can still be a closer position
-        }
-      }
-    }
-    return neighborPos;
-  }
+	private static int getPerceivedNeighborPosition(LayoutInterval neighbor,
+			LayoutRegion space,
+			int dimension,
+			int alignment) {
+		assert !neighbor.isEmptySpace();
+		if (neighbor.isComponent()) {
+			//            || (neighbor.isParallel() && LayoutInterval.isClosedGroup(neighbor, alignment)
+			//                && !LayoutRegion.overlap(neighbor.getCurrentSpace(), space, dimension, 0))
+			return neighbor.getCurrentSpace().positions[dimension][alignment];
+		}
+		int neighborPos = Integer.MIN_VALUE;
+		int n = neighbor.getSubIntervalCount();
+		int i, d;
+		if (neighbor.isParallel() || alignment == LEADING) {
+			d = 1;
+			i = 0;
+		} else {
+			d = -1;
+			i = n - 1;
+		}
+		while (i >= 0 && i < n) {
+			LayoutInterval sub = neighbor.getSubInterval(i);
+			i += d;
+			if (sub.isEmptySpace()
+					|| sub.isComponent()
+					&& !LayoutRegion.overlap(space, sub.getCurrentSpace(), dimension ^ 1, 0)) {
+				continue;
+			}
+			int pos = getPerceivedNeighborPosition(sub, space, dimension, alignment);
+			if (pos != Integer.MIN_VALUE) {
+				if (neighbor.isSequential()) {
+					neighborPos = pos;
+					break;
+				} else if (neighborPos == Integer.MIN_VALUE || pos * d < neighborPos * d) {
+					neighborPos = pos;
+					// continue, there can still be a closer position
+				}
+			}
+		}
+		return neighborPos;
+	}
 
-  private LayoutInterval separateSequence(LayoutInterval seq, int alignment) {
-    LayoutInterval parentPar = seq.getParent();
-    assert parentPar.isParallel();
-    while (!parentPar.getParent().isSequential()) {
-      parentPar = parentPar.getParent();
-    }
-    LayoutInterval parentSeq = parentPar.getParent(); // sequential
-    int d = alignment == LEADING ? -1 : 1;
-    int n = parentSeq.getSubIntervalCount();
-    int end = parentSeq.indexOf(parentPar) + d;
-    while (end >= 0 && end < n) {
-      LayoutInterval sub = parentSeq.getSubInterval(end);
-      if (!sub.isEmptySpace()) {
-        //                LayoutRegion subSpace = sub.getCurrentSpace();
-        //                if (sub.isParallel()
-        //                    && subSpace.positions[dimension][alignment^1]*d > addingSpace.positions[dimension][alignment]*d
-        //                    && LayoutInterval.isClosedGroup(sub, alignment))
-        if (LayoutUtils.contentOverlap(addingSpace, sub, dimension ^ 1)) {
-          break;
-        }
-      }
-      end += d;
-    }
-    int endPos = end >= 0 && end < n
-        ? parentSeq.getSubInterval(end).getCurrentSpace().positions[dimension][alignment ^ 1]
-        : parentSeq.getParent().getCurrentSpace().positions[dimension][alignment];
-    end -= d;
-    operations.parallelizeWithParentSequence(seq, end, dimension);
-    parentPar = seq.getParent();
-    parentPar.getCurrentSpace().positions[dimension][alignment] = endPos;
-    return parentPar;
-  }
+	private LayoutInterval separateSequence(LayoutInterval seq, int alignment) {
+		LayoutInterval parentPar = seq.getParent();
+		assert parentPar.isParallel();
+		while (!parentPar.getParent().isSequential()) {
+			parentPar = parentPar.getParent();
+		}
+		LayoutInterval parentSeq = parentPar.getParent(); // sequential
+		int d = alignment == LEADING ? -1 : 1;
+		int n = parentSeq.getSubIntervalCount();
+		int end = parentSeq.indexOf(parentPar) + d;
+		while (end >= 0 && end < n) {
+			LayoutInterval sub = parentSeq.getSubInterval(end);
+			if (!sub.isEmptySpace()) {
+				//                LayoutRegion subSpace = sub.getCurrentSpace();
+				//                if (sub.isParallel()
+				//                    && subSpace.positions[dimension][alignment^1]*d > addingSpace.positions[dimension][alignment]*d
+				//                    && LayoutInterval.isClosedGroup(sub, alignment))
+				if (LayoutUtils.contentOverlap(addingSpace, sub, dimension ^ 1)) {
+					break;
+				}
+			}
+			end += d;
+		}
+		int endPos = end >= 0 && end < n
+				? parentSeq.getSubInterval(end).getCurrentSpace().positions[dimension][alignment ^ 1]
+						: parentSeq.getParent().getCurrentSpace().positions[dimension][alignment];
+		end -= d;
+		operations.parallelizeWithParentSequence(seq, end, dimension);
+		parentPar = seq.getParent();
+		parentPar.getCurrentSpace().positions[dimension][alignment] = endPos;
+		return parentPar;
+	}
 
-  /**
-   * When an interval is added or resized out of current boundaries of its parent, this method tries
-   * to accommodate the size increment in the parent (and its parents). It acts according to the
-   * current visual position of the interval - how it exceeds the current parent border. In the
-   * simplest form the method tries to shorten the nearest gap in the parent sequence.
-   */
-  private void accommodateOutPosition(LayoutInterval interval,
-      /*int dimension,*/int alignment/*, boolean snapped*/) {
-    if (alignment == CENTER || alignment == BASELINE) {
-      return; // [but should consider these too...]
-    }
-    int pos = interval.getCurrentSpace().positions[dimension][alignment];
-    assert pos != LayoutRegion.UNKNOWN;
-    int sizeIncrement = Integer.MIN_VALUE;
-    int d = alignment == LEADING ? -1 : 1;
-    int[] groupPos = null;
-    LayoutInterval parent = interval.getParent();
-    LayoutInterval prev = null;
-    do {
-      if (parent.isSequential()) {
-        if (sizeIncrement > 0) {
-          int accommodated = accommodateSizeInSequence(interval, prev, sizeIncrement, alignment);
-          sizeIncrement -= accommodated;
-          if (groupPos != null) {
-            groupPos[alignment] += accommodated * d;
-          }
-        }
-        LayoutInterval neighbor = LayoutInterval.getDirectNeighbor(interval, alignment, false);
-        if (neighbor != null && (!neighbor.isEmptySpace() || LayoutInterval.canResize(neighbor))) {
-          // not a border interval in the sequence, can't go up
-          return;
-        }
-        prev = interval;
-      } else {
-        groupPos = parent.getCurrentSpace().positions[dimension];
-        if (groupPos[alignment] != LayoutRegion.UNKNOWN) {
-          sizeIncrement = (pos - groupPos[alignment]) * d;
-          if (sizeIncrement > 0) {
-            int subPos[] = interval.getCurrentSpace().positions[dimension];
-            if (!interval.getCurrentSpace().isSet(dimension)
-                || subPos[alignment] * d < groupPos[alignment] * d) { // update space of subgroup according to parent (needed if subgroup is also parallel)
-              subPos[alignment] = groupPos[alignment];
-            }
-          }
-        } else {
-          groupPos = null;
-        }
-        if (!interval.isSequential() || prev == null) {
-          prev = interval;
-        }
-      }
-      interval = parent;
-      parent = interval.getParent();
-    } while ((sizeIncrement > 0 || sizeIncrement == Integer.MIN_VALUE)
-        && parent != null
-        && (!parent.isParallel() || interval.getAlignment() != alignment));
-    // can't accommodate at the aligned side [but could probably turn to other side - update 'pos', etc]
-  }
+	/**
+	 * When an interval is added or resized out of current boundaries of its parent, this method tries
+	 * to accommodate the size increment in the parent (and its parents). It acts according to the
+	 * current visual position of the interval - how it exceeds the current parent border. In the
+	 * simplest form the method tries to shorten the nearest gap in the parent sequence.
+	 */
+	private void accommodateOutPosition(LayoutInterval interval,
+			/*int dimension,*/int alignment/*, boolean snapped*/) {
+		if (alignment == CENTER || alignment == BASELINE) {
+			return; // [but should consider these too...]
+		}
+		int pos = interval.getCurrentSpace().positions[dimension][alignment];
+		assert pos != LayoutRegion.UNKNOWN;
+		int sizeIncrement = Integer.MIN_VALUE;
+		int d = alignment == LEADING ? -1 : 1;
+		int[] groupPos = null;
+		LayoutInterval parent = interval.getParent();
+		LayoutInterval prev = null;
+		do {
+			if (parent.isSequential()) {
+				if (sizeIncrement > 0) {
+					int accommodated = accommodateSizeInSequence(interval, prev, sizeIncrement, alignment);
+					sizeIncrement -= accommodated;
+					if (groupPos != null) {
+						groupPos[alignment] += accommodated * d;
+					}
+				}
+				LayoutInterval neighbor = LayoutInterval.getDirectNeighbor(interval, alignment, false);
+				if (neighbor != null && (!neighbor.isEmptySpace() || LayoutInterval.canResize(neighbor))) {
+					// not a border interval in the sequence, can't go up
+					return;
+				}
+				prev = interval;
+			} else {
+				groupPos = parent.getCurrentSpace().positions[dimension];
+				if (groupPos[alignment] != LayoutRegion.UNKNOWN) {
+					sizeIncrement = (pos - groupPos[alignment]) * d;
+					if (sizeIncrement > 0) {
+						int subPos[] = interval.getCurrentSpace().positions[dimension];
+						if (!interval.getCurrentSpace().isSet(dimension)
+								|| subPos[alignment] * d < groupPos[alignment] * d) { // update space of subgroup according to parent (needed if subgroup is also parallel)
+							subPos[alignment] = groupPos[alignment];
+						}
+					}
+				} else {
+					groupPos = null;
+				}
+				if (!interval.isSequential() || prev == null) {
+					prev = interval;
+				}
+			}
+			interval = parent;
+			parent = interval.getParent();
+		} while ((sizeIncrement > 0 || sizeIncrement == Integer.MIN_VALUE)
+				&& parent != null
+				&& (!parent.isParallel() || interval.getAlignment() != alignment));
+		// can't accommodate at the aligned side [but could probably turn to other side - update 'pos', etc]
+	}
 
-  private int accommodateSizeInSequence(LayoutInterval interval,
-      LayoutInterval lower,
-      int sizeIncrement,
-      int alignment) {
-    LayoutInterval parent = interval.getParent();
-    assert parent.isSequential();
-    LayoutRegion space = lower.getCurrentSpace();
-    int increment = sizeIncrement;
-    int pos = interval.getCurrentSpace().positions[dimension][alignment];
-    int outPos = parent.getParent().getCurrentSpace().positions[dimension][alignment];
-    boolean parallel = false;
-    int d = alignment == LEADING ? -1 : 1;
-    int start = parent.indexOf(interval);
-    int end = lower.isComponent() ? start : -1;
-    int n = parent.getSubIntervalCount();
-    for (int i = start + d; i >= 0 && i < n; i += d) {
-      LayoutInterval li = parent.getSubInterval(i);
-      if (end != -1) { // consider parallel expansion of the sequence out
-                       // of its parent (similar to what separateSequence does)
-        int endPos = Integer.MIN_VALUE;
-        if (!li.isEmptySpace()) {
-          if (LayoutUtils.contentOverlap(space, li, dimension ^ 1)) {
-            if (end != start) {
-              end = i - d;
-              endPos = li.getCurrentSpace().positions[dimension][alignment ^ 1];
-            } else {
-              end = -1; // there was only a gap before
-            }
-          } else { // no orthogonal overlap, count this in
-            end = i;
-            if (!parallel && LayoutUtils.contentOverlap(space, li, dimension)) {
-              parallel = true;
-            }
-          }
-        }
-        if ((i == 0 || i + d == n) && endPos == Integer.MIN_VALUE && end != -1) { // last gap or non-overlapping
-          if (end != start && (parallel || dimension == HORIZONTAL)) {
-            end = i;
-            endPos = outPos;
-          } else {
-            end = -1; // only gap or not in parallel with anything (in vertical dimension)
-          }
-        }
-        if (endPos != Integer.MIN_VALUE) {
-          LayoutInterval toPar = lower.getParent().isSequential() ? lower.getParent() : lower;
-          LayoutInterval endGap = LayoutInterval.getDirectNeighbor(lower, alignment, false);
-          if (endGap == null && !LayoutInterval.isAlignedAtBorder(toPar, alignment)) {
-            endGap = new LayoutInterval(SINGLE);
-            if (!toPar.isSequential()) {
-              toPar = new LayoutInterval(SEQUENTIAL);
-              layoutModel.addInterval(toPar, lower.getParent(), layoutModel.removeInterval(lower));
-              layoutModel.setIntervalAlignment(toPar, lower.getRawAlignment());
-              layoutModel.setIntervalAlignment(lower, DEFAULT);
-              layoutModel.addInterval(lower, toPar, 0);
-            }
-            layoutModel.addInterval(endGap, toPar, alignment == LEADING ? 0 : -1);
-          } else {
-            assert endGap == null || endGap.isEmptySpace();
-          }
-          operations.parallelizeWithParentSequence(toPar, end, dimension);
-          if (alignment == TRAILING) {
-            i -= n - parent.getSubIntervalCount();
-          }
-          n = parent.getSubIntervalCount(); // adjust count
-          end = -1; // don't try anymore
-          increment -= Math.abs(endPos - pos);
-          if (increment < 0) {
-            increment = 0;
-          }
-          continue;
-        } else if (end == -1) { // no parallel expansion possible
-          i = start; // restart
-          continue;
-        }
-      }
-      // otherwise look for a gap to reduce
-      else if (li.isEmptySpace() && li.getPreferredSize() != NOT_EXPLICITLY_DEFINED) {
-        int pad = determinePadding(interval, li.getPaddingType(), dimension, alignment);
-        int currentSize = LayoutInterval.getIntervalCurrentSize(li, dimension);
-        int size = currentSize - increment;
-        if (size <= pad) {
-          size = NOT_EXPLICITLY_DEFINED;
-          increment -= currentSize - pad;
-        } else {
-          increment = 0;
-        }
-        operations.resizeInterval(li, size);
-        if (LayoutInterval.wantResize(li) && LayoutInterval.wantResize(interval)) {
-          // cancel gap resizing if the neighbor is also resizing
-          layoutModel.setIntervalSize(
-              li,
-              li.getMinimumSize(),
-              li.getPreferredSize(),
-              USE_PREFERRED_SIZE);
-        }
-        break;
-      } else {
-        interval = li;
-      }
-    }
-    return sizeIncrement - increment;
-  }
+	private int accommodateSizeInSequence(LayoutInterval interval,
+			LayoutInterval lower,
+			int sizeIncrement,
+			int alignment) {
+		LayoutInterval parent = interval.getParent();
+		assert parent.isSequential();
+		LayoutRegion space = lower.getCurrentSpace();
+		int increment = sizeIncrement;
+		int pos = interval.getCurrentSpace().positions[dimension][alignment];
+		int outPos = parent.getParent().getCurrentSpace().positions[dimension][alignment];
+		boolean parallel = false;
+		int d = alignment == LEADING ? -1 : 1;
+		int start = parent.indexOf(interval);
+		int end = lower.isComponent() ? start : -1;
+		int n = parent.getSubIntervalCount();
+		for (int i = start + d; i >= 0 && i < n; i += d) {
+			LayoutInterval li = parent.getSubInterval(i);
+			if (end != -1) { // consider parallel expansion of the sequence out
+				// of its parent (similar to what separateSequence does)
+				int endPos = Integer.MIN_VALUE;
+				if (!li.isEmptySpace()) {
+					if (LayoutUtils.contentOverlap(space, li, dimension ^ 1)) {
+						if (end != start) {
+							end = i - d;
+							endPos = li.getCurrentSpace().positions[dimension][alignment ^ 1];
+						} else {
+							end = -1; // there was only a gap before
+						}
+					} else { // no orthogonal overlap, count this in
+						end = i;
+						if (!parallel && LayoutUtils.contentOverlap(space, li, dimension)) {
+							parallel = true;
+						}
+					}
+				}
+				if ((i == 0 || i + d == n) && endPos == Integer.MIN_VALUE && end != -1) { // last gap or non-overlapping
+					if (end != start && (parallel || dimension == HORIZONTAL)) {
+						end = i;
+						endPos = outPos;
+					} else {
+						end = -1; // only gap or not in parallel with anything (in vertical dimension)
+					}
+				}
+				if (endPos != Integer.MIN_VALUE) {
+					LayoutInterval toPar = lower.getParent().isSequential() ? lower.getParent() : lower;
+					LayoutInterval endGap = LayoutInterval.getDirectNeighbor(lower, alignment, false);
+					if (endGap == null && !LayoutInterval.isAlignedAtBorder(toPar, alignment)) {
+						endGap = new LayoutInterval(SINGLE);
+						if (!toPar.isSequential()) {
+							toPar = new LayoutInterval(SEQUENTIAL);
+							layoutModel.addInterval(toPar, lower.getParent(), layoutModel.removeInterval(lower));
+							layoutModel.setIntervalAlignment(toPar, lower.getRawAlignment());
+							layoutModel.setIntervalAlignment(lower, DEFAULT);
+							layoutModel.addInterval(lower, toPar, 0);
+						}
+						layoutModel.addInterval(endGap, toPar, alignment == LEADING ? 0 : -1);
+					} else {
+						assert endGap == null || endGap.isEmptySpace();
+					}
+					operations.parallelizeWithParentSequence(toPar, end, dimension);
+					if (alignment == TRAILING) {
+						i -= n - parent.getSubIntervalCount();
+					}
+					n = parent.getSubIntervalCount(); // adjust count
+					end = -1; // don't try anymore
+					increment -= Math.abs(endPos - pos);
+					if (increment < 0) {
+						increment = 0;
+					}
+					continue;
+				} else if (end == -1) { // no parallel expansion possible
+					i = start; // restart
+					continue;
+				}
+			}
+			// otherwise look for a gap to reduce
+			else if (li.isEmptySpace() && li.getPreferredSize() != NOT_EXPLICITLY_DEFINED) {
+				int pad = determinePadding(interval, li.getPaddingType(), dimension, alignment);
+				int currentSize = LayoutInterval.getIntervalCurrentSize(li, dimension);
+				int size = currentSize - increment;
+				if (size <= pad) {
+					size = NOT_EXPLICITLY_DEFINED;
+					increment -= currentSize - pad;
+				} else {
+					increment = 0;
+				}
+				operations.resizeInterval(li, size);
+				if (LayoutInterval.wantResize(li) && LayoutInterval.wantResize(interval)) {
+					// cancel gap resizing if the neighbor is also resizing
+					layoutModel.setIntervalSize(
+							li,
+							li.getMinimumSize(),
+							li.getPreferredSize(),
+							USE_PREFERRED_SIZE);
+				}
+				break;
+			} else {
+				interval = li;
+			}
+		}
+		return sizeIncrement - increment;
+	}
 
-  /**
-   * This method aligns an interval (just simply added to the layout - so it is already placed
-   * correctly where it should appear) in parallel with another interval.
-   *
-   * @return parallel group with aligned intervals if some aligning changes happened, null if
-   *         addingInterval has already been aligned or could not be aligned
-   */
-  private LayoutInterval alignInParallel(LayoutInterval interval,
-      LayoutInterval toAlignWith,
-      int alignment) {
-    assert alignment == LEADING || alignment == TRAILING;
-    if (toAlignWith.isParentOf(interval) // already aligned to parent
-        || interval.isParentOf(toAlignWith)) // can't align with own subinterval
-    { // contained intervals can't be aligned
-      return null;
-    } else {
-      LayoutInterval commonParent = LayoutInterval.getCommonParent(interval, toAlignWith);
-      if (commonParent == null || commonParent.isSequential()) {
-        return null;
-      }
-    }
-    // if not in same parallel group try to substitute interval with parent
-    boolean resizing = LayoutInterval.wantResize(interval);
-    LayoutInterval aligning = interval; // may be substituted with parent
-    LayoutInterval parParent = LayoutInterval.getFirstParent(interval, PARALLEL);
-    while (!parParent.isParentOf(toAlignWith)) {
-      if (LayoutInterval.isAlignedAtBorder(aligning, parParent, alignment)) { // substitute with parent
-        //                // make sure parent space is up-to-date
-        //                parParent.getCurrentSpace().positions[dimension][alignment]
-        //                        = aligning.getCurrentSpace().positions[dimension][alignment];
-        // allow parent resizing if substituting for resizing interval
-        if (resizing && !LayoutInterval.canResize(parParent)) {
-          operations.enableGroupResizing(parParent);
-        }
-        aligning = parParent;
-        parParent = LayoutInterval.getFirstParent(aligning, PARALLEL);
-      } else {
-        parParent = null;
-      }
-      if (parParent == null) {
-        return null; // can't align with interval from different branch
-      }
-    }
-    boolean resizingOp = dragger.isResizing(dimension);
-    // hack: remove aligning interval temporarily not to influence next analysis
-    LayoutInterval tempRemoved = aligning;
-    while (tempRemoved.getParent() != parParent) {
-      tempRemoved = tempRemoved.getParent();
-    }
-    int removedIndex = parParent.remove(tempRemoved);
-    // check if we shouldn't rather align with a whole group (parent of toAlignWith)
-    boolean alignWithParent = false;
-    LayoutInterval alignParent;
-    do {
-      alignParent = LayoutInterval.getFirstParent(toAlignWith, PARALLEL);
-      if (alignParent == null) {
-        parParent.add(tempRemoved, removedIndex); // add back temporarily removed
-        return null; // aligning with parent (the interval must be already aligned)
-      }
-      if (canSubstAlignWithParent(toAlignWith, dimension, alignment, resizingOp)) {
-        // toAlignWith is at border so we can perhaps use the parent instead
-        if (alignParent == parParent) {
-          if (LayoutInterval.getNeighbor(aligning, alignment, false, true, false) == null) {
-            alignWithParent = true;
-          }
-        } else {
-          toAlignWith = alignParent;
-        }
-      }
-    } while (toAlignWith == alignParent);
-    parParent.add(tempRemoved, removedIndex); // add back temporarily removed
-    if (alignParent != parParent) {
-      return null; // can't align (toAlignWith is too deep)
-    }
-    if (aligning != interval) {
-      if (!LayoutInterval.isAlignedAtBorder(toAlignWith, alignment)) {
-        // may have problems with S-layout
-        int dst = LayoutRegion.distance(
-            aligning.getCurrentSpace(),
-            toAlignWith.getCurrentSpace(),
-            dimension,
-            alignment,
-            alignment) * (alignment == TRAILING ? -1 : 1);
-        if (dst > 0) { // try to eliminate effect of avoiding S-layout
-          // need to exclude 'interval' - remove it temporarily
-          tempRemoved = interval;
-          while (tempRemoved.getParent() != aligning) {
-            tempRemoved = tempRemoved.getParent();
-          }
-          removedIndex = aligning.remove(tempRemoved);
-          operations.cutStartingGap(aligning, dst, dimension, alignment);
-          aligning.add(tempRemoved, removedIndex); // add back temporarily removed
-        }
-      }
-      optimizeStructure = true;
-    }
-    // check congruence of effective alignment
-    int effAlign1 = LayoutInterval.getEffectiveAlignment(toAlignWith, alignment);
-    //        int effAlign2 = LayoutInterval.getEffectiveAlignment(aligning, alignment);
-    //        if (effAlign1 == (alignment^1) /*&& effAlign2 != effAlign1*/) {
-    //            LayoutInterval gap = LayoutInterval.getDirectNeighbor(aligning, alignment, false);
-    //            if (gap != null && gap.isEmptySpace()) {
-    //                layoutModel.setIntervalSize(gap, NOT_EXPLICITLY_DEFINED, gap.getPreferredSize(), Short.MAX_VALUE);
-    //            }
-    //            gap = LayoutInterval.getDirectNeighbor(aligning, alignment^1, false);
-    //            if (gap != null && gap.isEmptySpace() && LayoutInterval.getDirectNeighbor(gap, alignment^1, true) == null) {
-    //                layoutModel.setIntervalSize(gap, USE_PREFERRED_SIZE, gap.getPreferredSize(), USE_PREFERRED_SIZE);
-    //            }
-    //        }
-    // separate content out of the emerging group
-    List<LayoutInterval> alignedList = new ArrayList<LayoutInterval>(2);
-    List<List> remainder = new ArrayList<List>(2);
-    int originalCount = parParent.getSubIntervalCount();
-    int extAlign1 = extract(toAlignWith, alignedList, remainder, alignment);
-    extract(aligning, alignedList, remainder, alignment);
-    assert !alignWithParent || remainder.isEmpty();
-    // add indent if needed
-    int indent = LayoutRegion.distance(
-        toAlignWith.getCurrentSpace(),
-        interval.getCurrentSpace(),
-        dimension,
-        alignment,
-        alignment);
-    if (indent != 0) {
-      LayoutInterval indentGap = new LayoutInterval(SINGLE);
-      indentGap.setSize(Math.abs(indent));
-      // [need to use default padding for indent gap]
-      LayoutInterval parent = interval.getParent();
-      if (parent == null || !parent.isSequential()) {
-        LayoutInterval seq = new LayoutInterval(SEQUENTIAL);
-        if (parent != null) {
-          layoutModel.addInterval(seq, parent, layoutModel.removeInterval(interval));
-        }
-        layoutModel.setIntervalAlignment(interval, DEFAULT);
-        layoutModel.addInterval(interval, seq, 0);
-        parent = seq;
-      }
-      layoutModel.addInterval(indentGap, parent, alignment == LEADING ? 0 : -1);
-      if (interval == aligning) {
-        alignedList.set(alignedList.size() - 1, parent);
-      }
-    }
-    // prepare the group where the aligned intervals will be placed
-    LayoutInterval group;
-    LayoutInterval commonSeq;
-    if (alignWithParent || originalCount == 2 && parParent.getParent() != null) {
-      // reuse the original group - avoid unnecessary nesting
-      group = parParent;
-      if (!remainder.isEmpty()) { // need a sequence for the remainder group
-        LayoutInterval groupParent = group.getParent();
-        if (groupParent.isSequential()) {
-          commonSeq = groupParent;
-        } else { // insert a new one
-          int index = layoutModel.removeInterval(group);
-          commonSeq = new LayoutInterval(SEQUENTIAL);
-          commonSeq.setAlignment(group.getAlignment());
-          layoutModel.addInterval(commonSeq, groupParent, index);
-          //                    commonSeq.getCurrentSpace().set(dimension, groupParent.getCurrentSpace());
-          layoutModel.setIntervalAlignment(group, DEFAULT);
-          layoutModel.addInterval(group, commonSeq, -1);
-        }
-      } else {
-        commonSeq = null;
-      }
-    } else { // need to create a new group
-      group = new LayoutInterval(PARALLEL);
-      group.setGroupAlignment(alignment);
-      if (!remainder.isEmpty()) { // need a new sequence for the remainder group
-        commonSeq = new LayoutInterval(SEQUENTIAL);
-        commonSeq.add(group, 0);
-        if (effAlign1 == LEADING || effAlign1 == TRAILING) {
-          commonSeq.setAlignment(effAlign1);
-        }
-        layoutModel.addInterval(commonSeq, parParent, -1);
-        //                commonSeq.getCurrentSpace().set(dimension, parParent.getCurrentSpace());
-      } else {
-        commonSeq = null;
-        if (effAlign1 == LEADING || effAlign1 == TRAILING) {
-          group.setAlignment(effAlign1);
-        }
-        layoutModel.addInterval(group, parParent, -1);
-      }
-      if (alignment == LEADING || alignment == TRAILING) {
-        int alignPos = toAlignWith.getCurrentSpace().positions[dimension][alignment];
-        int outerPos = parParent.getCurrentSpace().positions[dimension][alignment ^ 1];
-        group.getCurrentSpace().set(
-            dimension,
-            alignment == LEADING ? alignPos : outerPos,
-            alignment == LEADING ? outerPos : alignPos);
-      }
-    }
-    // add the intervals and their separated neighbors to the aligned group
-    LayoutInterval aligning2 = alignedList.get(1);
-    if (aligning2.getParent() != group) {
-      if (aligning2.getParent() != null) {
-        layoutModel.removeInterval(aligning2);
-      }
-      layoutModel.addInterval(aligning2, group, -1);
-    }
-    if (!LayoutInterval.isAlignedAtBorder(aligning2, alignment)) {
-      layoutModel.setIntervalAlignment(aligning2, alignment);
-    }
-    LayoutInterval aligning1 = alignedList.get(0);
-    if (aligning1.getParent() != group) {
-      if (aligning1.getParent() != null) {
-        layoutModel.setIntervalAlignment(aligning1, extAlign1); //aligning1.getAlignment()); // remember explicit alignment
-        layoutModel.removeInterval(aligning1);
-      }
-      layoutModel.addInterval(aligning1, group, -1);
-    }
-    if (!resizingOp
-        && group.getSubIntervalCount() == 2
-        && !LayoutInterval.isAlignedAtBorder(aligning1, alignment)
-        && !LayoutInterval.isAlignedAtBorder(aligning2, alignment ^ 1)) {
-      layoutModel.setIntervalAlignment(aligning1, alignment);
-    }
-    // create the remainder group next to the aligned group
-    if (!remainder.isEmpty()) {
-      int index = commonSeq.indexOf(group);
-      if (alignment == TRAILING) {
-        index++;
-      }
-      LayoutInterval sideGroup = operations.addGroupContent(
-          remainder,
-          commonSeq,
-          index,
-          dimension,
-          alignment/*, effAlign*/);
-      if (sideGroup != null) {
-        int pos1 = parParent.getCurrentSpace().positions[dimension][alignment];
-        int pos2 = toAlignWith.getCurrentSpace().positions[dimension][alignment];
-        sideGroup.getCurrentSpace().set(
-            dimension,
-            alignment == LEADING ? pos1 : pos2,
-            alignment == LEADING ? pos2 : pos1);
-        operations.optimizeGaps(sideGroup, dimension);
-        operations.mergeParallelGroups(sideGroup);
-      }
-    }
-    return group;
-  }
+	/**
+	 * This method aligns an interval (just simply added to the layout - so it is already placed
+	 * correctly where it should appear) in parallel with another interval.
+	 *
+	 * @return parallel group with aligned intervals if some aligning changes happened, null if
+	 *         addingInterval has already been aligned or could not be aligned
+	 */
+	private LayoutInterval alignInParallel(LayoutInterval interval,
+			LayoutInterval toAlignWith,
+			int alignment) {
+		assert alignment == LEADING || alignment == TRAILING;
+		if (toAlignWith.isParentOf(interval) // already aligned to parent
+				|| interval.isParentOf(toAlignWith)) // can't align with own subinterval
+		{ // contained intervals can't be aligned
+			return null;
+		} else {
+			LayoutInterval commonParent = LayoutInterval.getCommonParent(interval, toAlignWith);
+			if (commonParent == null || commonParent.isSequential()) {
+				return null;
+			}
+		}
+		// if not in same parallel group try to substitute interval with parent
+		boolean resizing = LayoutInterval.wantResize(interval);
+		LayoutInterval aligning = interval; // may be substituted with parent
+		LayoutInterval parParent = LayoutInterval.getFirstParent(interval, PARALLEL);
+		while (!parParent.isParentOf(toAlignWith)) {
+			if (LayoutInterval.isAlignedAtBorder(aligning, parParent, alignment)) { // substitute with parent
+				//                // make sure parent space is up-to-date
+				//                parParent.getCurrentSpace().positions[dimension][alignment]
+				//                        = aligning.getCurrentSpace().positions[dimension][alignment];
+				// allow parent resizing if substituting for resizing interval
+				if (resizing && !LayoutInterval.canResize(parParent)) {
+					operations.enableGroupResizing(parParent);
+				}
+				aligning = parParent;
+				parParent = LayoutInterval.getFirstParent(aligning, PARALLEL);
+			} else {
+				parParent = null;
+			}
+			if (parParent == null) {
+				return null; // can't align with interval from different branch
+			}
+		}
+		boolean resizingOp = dragger.isResizing(dimension);
+		// hack: remove aligning interval temporarily not to influence next analysis
+		LayoutInterval tempRemoved = aligning;
+		while (tempRemoved.getParent() != parParent) {
+			tempRemoved = tempRemoved.getParent();
+		}
+		int removedIndex = parParent.remove(tempRemoved);
+		// check if we shouldn't rather align with a whole group (parent of toAlignWith)
+		boolean alignWithParent = false;
+		LayoutInterval alignParent;
+		do {
+			alignParent = LayoutInterval.getFirstParent(toAlignWith, PARALLEL);
+			if (alignParent == null) {
+				parParent.add(tempRemoved, removedIndex); // add back temporarily removed
+				return null; // aligning with parent (the interval must be already aligned)
+			}
+			if (canSubstAlignWithParent(toAlignWith, dimension, alignment, resizingOp)) {
+				// toAlignWith is at border so we can perhaps use the parent instead
+				if (alignParent == parParent) {
+					if (LayoutInterval.getNeighbor(aligning, alignment, false, true, false) == null) {
+						alignWithParent = true;
+					}
+				} else {
+					toAlignWith = alignParent;
+				}
+			}
+		} while (toAlignWith == alignParent);
+		parParent.add(tempRemoved, removedIndex); // add back temporarily removed
+		if (alignParent != parParent) {
+			return null; // can't align (toAlignWith is too deep)
+		}
+		if (aligning != interval) {
+			if (!LayoutInterval.isAlignedAtBorder(toAlignWith, alignment)) {
+				// may have problems with S-layout
+				int dst = LayoutRegion.distance(
+						aligning.getCurrentSpace(),
+						toAlignWith.getCurrentSpace(),
+						dimension,
+						alignment,
+						alignment) * (alignment == TRAILING ? -1 : 1);
+				if (dst > 0) { // try to eliminate effect of avoiding S-layout
+					// need to exclude 'interval' - remove it temporarily
+					tempRemoved = interval;
+					while (tempRemoved.getParent() != aligning) {
+						tempRemoved = tempRemoved.getParent();
+					}
+					removedIndex = aligning.remove(tempRemoved);
+					operations.cutStartingGap(aligning, dst, dimension, alignment);
+					aligning.add(tempRemoved, removedIndex); // add back temporarily removed
+				}
+			}
+			optimizeStructure = true;
+		}
+		// check congruence of effective alignment
+		int effAlign1 = LayoutInterval.getEffectiveAlignment(toAlignWith, alignment);
+		//        int effAlign2 = LayoutInterval.getEffectiveAlignment(aligning, alignment);
+		//        if (effAlign1 == (alignment^1) /*&& effAlign2 != effAlign1*/) {
+		//            LayoutInterval gap = LayoutInterval.getDirectNeighbor(aligning, alignment, false);
+		//            if (gap != null && gap.isEmptySpace()) {
+		//                layoutModel.setIntervalSize(gap, NOT_EXPLICITLY_DEFINED, gap.getPreferredSize(), Short.MAX_VALUE);
+		//            }
+		//            gap = LayoutInterval.getDirectNeighbor(aligning, alignment^1, false);
+		//            if (gap != null && gap.isEmptySpace() && LayoutInterval.getDirectNeighbor(gap, alignment^1, true) == null) {
+		//                layoutModel.setIntervalSize(gap, USE_PREFERRED_SIZE, gap.getPreferredSize(), USE_PREFERRED_SIZE);
+		//            }
+		//        }
+		// separate content out of the emerging group
+		List<LayoutInterval> alignedList = new ArrayList<LayoutInterval>(2);
+		List<List> remainder = new ArrayList<List>(2);
+		int originalCount = parParent.getSubIntervalCount();
+		int extAlign1 = extract(toAlignWith, alignedList, remainder, alignment);
+		extract(aligning, alignedList, remainder, alignment);
+		assert !alignWithParent || remainder.isEmpty();
+		// add indent if needed
+		int indent = LayoutRegion.distance(
+				toAlignWith.getCurrentSpace(),
+				interval.getCurrentSpace(),
+				dimension,
+				alignment,
+				alignment);
+		if (indent != 0) {
+			LayoutInterval indentGap = new LayoutInterval(SINGLE);
+			indentGap.setSize(Math.abs(indent));
+			// [need to use default padding for indent gap]
+			LayoutInterval parent = interval.getParent();
+			if (parent == null || !parent.isSequential()) {
+				LayoutInterval seq = new LayoutInterval(SEQUENTIAL);
+				if (parent != null) {
+					layoutModel.addInterval(seq, parent, layoutModel.removeInterval(interval));
+				}
+				layoutModel.setIntervalAlignment(interval, DEFAULT);
+				layoutModel.addInterval(interval, seq, 0);
+				parent = seq;
+			}
+			layoutModel.addInterval(indentGap, parent, alignment == LEADING ? 0 : -1);
+			if (interval == aligning) {
+				alignedList.set(alignedList.size() - 1, parent);
+			}
+		}
+		// prepare the group where the aligned intervals will be placed
+		LayoutInterval group;
+		LayoutInterval commonSeq;
+		if (alignWithParent || originalCount == 2 && parParent.getParent() != null) {
+			// reuse the original group - avoid unnecessary nesting
+			group = parParent;
+			if (!remainder.isEmpty()) { // need a sequence for the remainder group
+				LayoutInterval groupParent = group.getParent();
+				if (groupParent.isSequential()) {
+					commonSeq = groupParent;
+				} else { // insert a new one
+					int index = layoutModel.removeInterval(group);
+					commonSeq = new LayoutInterval(SEQUENTIAL);
+					commonSeq.setAlignment(group.getAlignment());
+					layoutModel.addInterval(commonSeq, groupParent, index);
+					//                    commonSeq.getCurrentSpace().set(dimension, groupParent.getCurrentSpace());
+					layoutModel.setIntervalAlignment(group, DEFAULT);
+					layoutModel.addInterval(group, commonSeq, -1);
+				}
+			} else {
+				commonSeq = null;
+			}
+		} else { // need to create a new group
+			group = new LayoutInterval(PARALLEL);
+			group.setGroupAlignment(alignment);
+			if (!remainder.isEmpty()) { // need a new sequence for the remainder group
+				commonSeq = new LayoutInterval(SEQUENTIAL);
+				commonSeq.add(group, 0);
+				if (effAlign1 == LEADING || effAlign1 == TRAILING) {
+					commonSeq.setAlignment(effAlign1);
+				}
+				layoutModel.addInterval(commonSeq, parParent, -1);
+				//                commonSeq.getCurrentSpace().set(dimension, parParent.getCurrentSpace());
+			} else {
+				commonSeq = null;
+				if (effAlign1 == LEADING || effAlign1 == TRAILING) {
+					group.setAlignment(effAlign1);
+				}
+				layoutModel.addInterval(group, parParent, -1);
+			}
+			if (alignment == LEADING || alignment == TRAILING) {
+				int alignPos = toAlignWith.getCurrentSpace().positions[dimension][alignment];
+				int outerPos = parParent.getCurrentSpace().positions[dimension][alignment ^ 1];
+				group.getCurrentSpace().set(
+						dimension,
+						alignment == LEADING ? alignPos : outerPos,
+								alignment == LEADING ? outerPos : alignPos);
+			}
+		}
+		// add the intervals and their separated neighbors to the aligned group
+		LayoutInterval aligning2 = alignedList.get(1);
+		if (aligning2.getParent() != group) {
+			if (aligning2.getParent() != null) {
+				layoutModel.removeInterval(aligning2);
+			}
+			layoutModel.addInterval(aligning2, group, -1);
+		}
+		if (!LayoutInterval.isAlignedAtBorder(aligning2, alignment)) {
+			layoutModel.setIntervalAlignment(aligning2, alignment);
+		}
+		LayoutInterval aligning1 = alignedList.get(0);
+		if (aligning1.getParent() != group) {
+			if (aligning1.getParent() != null) {
+				layoutModel.setIntervalAlignment(aligning1, extAlign1); //aligning1.getAlignment()); // remember explicit alignment
+				layoutModel.removeInterval(aligning1);
+			}
+			layoutModel.addInterval(aligning1, group, -1);
+		}
+		if (!resizingOp
+				&& group.getSubIntervalCount() == 2
+				&& !LayoutInterval.isAlignedAtBorder(aligning1, alignment)
+				&& !LayoutInterval.isAlignedAtBorder(aligning2, alignment ^ 1)) {
+			layoutModel.setIntervalAlignment(aligning1, alignment);
+		}
+		// create the remainder group next to the aligned group
+		if (!remainder.isEmpty()) {
+			int index = commonSeq.indexOf(group);
+			if (alignment == TRAILING) {
+				index++;
+			}
+			LayoutInterval sideGroup = operations.addGroupContent(
+					remainder,
+					commonSeq,
+					index,
+					dimension,
+					alignment/*, effAlign*/);
+			if (sideGroup != null) {
+				int pos1 = parParent.getCurrentSpace().positions[dimension][alignment];
+				int pos2 = toAlignWith.getCurrentSpace().positions[dimension][alignment];
+				sideGroup.getCurrentSpace().set(
+						dimension,
+						alignment == LEADING ? pos1 : pos2,
+								alignment == LEADING ? pos2 : pos1);
+				operations.optimizeGaps(sideGroup, dimension);
+				operations.mergeParallelGroups(sideGroup);
+			}
+		}
+		return group;
+	}
 
-  private int extract(LayoutInterval interval,
-      List<LayoutInterval> toAlign,
-      List<List> toRemain,
-      int alignment) {
-    int effAlign = LayoutInterval.getEffectiveAlignment(interval, alignment);
-    LayoutInterval parent = interval.getParent();
-    if (parent.isSequential()) {
-      int extractCount = operations.extract(
-          interval,
-          alignment,
-          false,
-          alignment == LEADING ? toRemain : null,
-          alignment == LEADING ? null : toRemain);
-      if (extractCount == 1) { // the parent won't be reused
-        if (effAlign == LEADING || effAlign == TRAILING) {
-          layoutModel.setIntervalAlignment(interval, effAlign);
-        }
-        layoutModel.removeInterval(parent);
-        toAlign.add(interval);
-      } else { // we'll reuse the parent sequence in the new group
-        toAlign.add(parent);
-      }
-    } else {
-      toAlign.add(interval);
-    }
-    return effAlign;
-  }
+	private int extract(LayoutInterval interval,
+			List<LayoutInterval> toAlign,
+			List<List> toRemain,
+			int alignment) {
+		int effAlign = LayoutInterval.getEffectiveAlignment(interval, alignment);
+		LayoutInterval parent = interval.getParent();
+		if (parent.isSequential()) {
+			int extractCount = operations.extract(
+					interval,
+					alignment,
+					false,
+					alignment == LEADING ? toRemain : null,
+							alignment == LEADING ? null : toRemain);
+			if (extractCount == 1) { // the parent won't be reused
+				if (effAlign == LEADING || effAlign == TRAILING) {
+					layoutModel.setIntervalAlignment(interval, effAlign);
+				}
+				layoutModel.removeInterval(parent);
+				toAlign.add(interval);
+			} else { // we'll reuse the parent sequence in the new group
+				toAlign.add(parent);
+			}
+		} else {
+			toAlign.add(interval);
+		}
+		return effAlign;
+	}
 
-  private void checkParallelResizing(LayoutInterval interval,
-      IncludeDesc iDesc1,
-      IncludeDesc iDesc2) {
-    LayoutInterval parallelInt;
-    LayoutInterval group = interval.getParent();
-    if (group.isSequential()) {
-      parallelInt = group;
-      group = group.getParent();
-    } else {
-      parallelInt = interval;
-    }
-    // do nothing in root and in parallel group tied closely to root on both edges
-    if (group.getParent() == null) {
-      return;
-    }
-    // a bit of "heuristics" follows...
-    int rootAlign = DEFAULT;
-    if (iDesc1.snappedNextTo != null && iDesc1.snappedNextTo.getParent() == null) {
-      rootAlign = iDesc1.alignment;
-    }
-    if (iDesc2 != null
-        && iDesc2.snappedNextTo != null
-        && iDesc2.snappedNextTo.getParent() == null) {
-      rootAlign = rootAlign == DEFAULT ? iDesc2.alignment : LayoutRegion.ALL_POINTS;
-    }
-    if (rootAlign == LEADING || rootAlign == TRAILING) {
-      // one edge snapped to root - check the other one for full span
-      int remIdx = group.remove(parallelInt); // temporarily
-      LayoutInterval neighbor = LayoutInterval.getNeighbor(group, rootAlign ^ 1, false, true, true);
-      if (neighbor != null
-          && neighbor.getPreferredSize() == NOT_EXPLICITLY_DEFINED
-          && LayoutInterval.isAlignedAtBorder(
-              neighbor.getParent(),
-              LayoutInterval.getRoot(neighbor),
-              rootAlign ^ 1)
-          || neighbor == null
-              && LayoutInterval.isAlignedAtBorder(
-                  group,
-                  LayoutInterval.getRoot(group),
-                  rootAlign ^ 1)) { // the other group edge tied closely to root
-        rootAlign = LayoutRegion.ALL_POINTS;
-      }
-      group.add(parallelInt, remIdx);
-    }
-    if (rootAlign == LayoutRegion.ALL_POINTS) {
-      return;
-    }
-    // find resizing neighbor gap of interval
-    LayoutInterval neighborGap = null;
-    if (interval != parallelInt) {
-      assert parallelInt.isSequential();
-      for (int i = LEADING; i <= TRAILING; i++) {
-        LayoutInterval gap = LayoutInterval.getDirectNeighbor(interval, i, false);
-        if (gap != null && gap.isEmptySpace() && LayoutInterval.canResize(gap)) {
-          neighborGap = gap;
-          break;
-        }
-      }
-    }
-    // interval or its neighbor gap must be resizing
-    if (LayoutInterval.wantResize(interval)) {
-      if (!dragger.isResizing(dimension)) {
-        return;
-      }
-    } else if (neighborGap == null) {
-      return;
-    }
-    if (!LayoutInterval.canResize(group)
-        && (iDesc1.snappedNextTo != null && !group.isParentOf(iDesc1.snappedNextTo)
-            || iDesc2 != null
-                && iDesc2.snappedNextTo != null
-                && !group.isParentOf(iDesc2.snappedNextTo))) { // snapped out of the group - it might not want to be suppressed (will check right away)
-      operations.enableGroupResizing(group);
-    }
-    if (LayoutInterval.canResize(group) && group.getParent() != null) {
-      // suppress par. group resizing if it is otherwise fixed
-      boolean contentResizing = false;
-      boolean samePosition = false;
-      for (Iterator<LayoutInterval> it = group.getSubIntervals(); it.hasNext();) {
-        LayoutInterval li = it.next();
-        if (li != parallelInt) {
-          if (LayoutInterval.wantResize(li)) {
-            contentResizing = true;
-            break;
-          }
-          if (!samePosition) {
-            int align = li.getAlignment();
-            if (align == LEADING || align == TRAILING) {
-              samePosition = getExpectedBorderPosition(
-                  parallelInt,
-                  dimension,
-                  align ^ 1) == getExpectedBorderPosition(li, dimension, align ^ 1);
-            }
-          }
-        }
-      }
-      if (!contentResizing && samePosition) {
-        operations.suppressGroupResizing(group);
-      }
-    }
-    if (!LayoutInterval.canResize(group)) {
-      // reset explicit size of interval or gap - subordinate to fixed content
-      layoutModel.changeIntervalAttribute(parallelInt, LayoutInterval.ATTRIBUTE_FILL, true);
-      if (neighborGap != null) {
-        layoutModel.setIntervalSize(
-            neighborGap,
-            NOT_EXPLICITLY_DEFINED,
-            NOT_EXPLICITLY_DEFINED,
-            Short.MAX_VALUE);
-      } else if (interval.isComponent()) {
-        java.awt.Dimension sizeLimit;
-        LayoutComponent lc = interval.getComponent();
-        sizeLimit = lc.isLayoutContainer()
-            ? operations.getMapper().getComponentMinimumSize(lc.getId())
-            : operations.getMapper().getComponentPreferredSize(lc.getId());
-        int pref = dimension == HORIZONTAL ? sizeLimit.width : sizeLimit.height;
-        if (interval.getPreferredSize() < pref) {
-          layoutModel.setIntervalSize(interval, 0, 0, interval.getMaximumSize());
-        } else {
-          layoutModel.setIntervalSize(
-              interval,
-              interval.getMinimumSize() != USE_PREFERRED_SIZE
-                  ? interval.getMinimumSize()
-                  : NOT_EXPLICITLY_DEFINED,
-              NOT_EXPLICITLY_DEFINED,
-              interval.getMaximumSize());
-        }
-      }
-    }
-    if (interval.isComponent()
-        && neighborGap == null
-        && (parallelInt == interval || LayoutInterval.getCount(parallelInt, DEFAULT, true) == 1)) { // look for same sized components
-      setParallelSameSize(group, parallelInt, dimension);
-    }
-  }
+	private void checkParallelResizing(LayoutInterval interval,
+			IncludeDesc iDesc1,
+			IncludeDesc iDesc2) {
+		LayoutInterval parallelInt;
+		LayoutInterval group = interval.getParent();
+		if (group.isSequential()) {
+			parallelInt = group;
+			group = group.getParent();
+		} else {
+			parallelInt = interval;
+		}
+		// do nothing in root and in parallel group tied closely to root on both edges
+		if (group.getParent() == null) {
+			return;
+		}
+		// a bit of "heuristics" follows...
+		int rootAlign = DEFAULT;
+		if (iDesc1.snappedNextTo != null && iDesc1.snappedNextTo.getParent() == null) {
+			rootAlign = iDesc1.alignment;
+		}
+		if (iDesc2 != null
+				&& iDesc2.snappedNextTo != null
+				&& iDesc2.snappedNextTo.getParent() == null) {
+			rootAlign = rootAlign == DEFAULT ? iDesc2.alignment : LayoutRegion.ALL_POINTS;
+		}
+		if (rootAlign == LEADING || rootAlign == TRAILING) {
+			// one edge snapped to root - check the other one for full span
+			int remIdx = group.remove(parallelInt); // temporarily
+			LayoutInterval neighbor = LayoutInterval.getNeighbor(group, rootAlign ^ 1, false, true, true);
+			if (neighbor != null
+					&& neighbor.getPreferredSize() == NOT_EXPLICITLY_DEFINED
+					&& LayoutInterval.isAlignedAtBorder(
+							neighbor.getParent(),
+							LayoutInterval.getRoot(neighbor),
+							rootAlign ^ 1)
+					|| neighbor == null
+					&& LayoutInterval.isAlignedAtBorder(
+							group,
+							LayoutInterval.getRoot(group),
+							rootAlign ^ 1)) { // the other group edge tied closely to root
+				rootAlign = LayoutRegion.ALL_POINTS;
+			}
+			group.add(parallelInt, remIdx);
+		}
+		if (rootAlign == LayoutRegion.ALL_POINTS) {
+			return;
+		}
+		// find resizing neighbor gap of interval
+		LayoutInterval neighborGap = null;
+		if (interval != parallelInt) {
+			assert parallelInt.isSequential();
+			for (int i = LEADING; i <= TRAILING; i++) {
+				LayoutInterval gap = LayoutInterval.getDirectNeighbor(interval, i, false);
+				if (gap != null && gap.isEmptySpace() && LayoutInterval.canResize(gap)) {
+					neighborGap = gap;
+					break;
+				}
+			}
+		}
+		// interval or its neighbor gap must be resizing
+		if (LayoutInterval.wantResize(interval)) {
+			if (!dragger.isResizing(dimension)) {
+				return;
+			}
+		} else if (neighborGap == null) {
+			return;
+		}
+		if (!LayoutInterval.canResize(group)
+				&& (iDesc1.snappedNextTo != null && !group.isParentOf(iDesc1.snappedNextTo)
+				|| iDesc2 != null
+				&& iDesc2.snappedNextTo != null
+				&& !group.isParentOf(iDesc2.snappedNextTo))) { // snapped out of the group - it might not want to be suppressed (will check right away)
+			operations.enableGroupResizing(group);
+		}
+		if (LayoutInterval.canResize(group) && group.getParent() != null) {
+			// suppress par. group resizing if it is otherwise fixed
+			boolean contentResizing = false;
+			boolean samePosition = false;
+			for (Iterator<LayoutInterval> it = group.getSubIntervals(); it.hasNext();) {
+				LayoutInterval li = it.next();
+				if (li != parallelInt) {
+					if (LayoutInterval.wantResize(li)) {
+						contentResizing = true;
+						break;
+					}
+					if (!samePosition) {
+						int align = li.getAlignment();
+						if (align == LEADING || align == TRAILING) {
+							samePosition = getExpectedBorderPosition(
+									parallelInt,
+									dimension,
+									align ^ 1) == getExpectedBorderPosition(li, dimension, align ^ 1);
+						}
+					}
+				}
+			}
+			if (!contentResizing && samePosition) {
+				operations.suppressGroupResizing(group);
+			}
+		}
+		if (!LayoutInterval.canResize(group)) {
+			// reset explicit size of interval or gap - subordinate to fixed content
+			layoutModel.changeIntervalAttribute(parallelInt, LayoutInterval.ATTRIBUTE_FILL, true);
+			if (neighborGap != null) {
+				layoutModel.setIntervalSize(
+						neighborGap,
+						NOT_EXPLICITLY_DEFINED,
+						NOT_EXPLICITLY_DEFINED,
+						Short.MAX_VALUE);
+			} else if (interval.isComponent()) {
+				java.awt.Dimension sizeLimit;
+				LayoutComponent lc = interval.getComponent();
+				sizeLimit = lc.isLayoutContainer()
+						? operations.getMapper().getComponentMinimumSize(lc.getId())
+								: operations.getMapper().getComponentPreferredSize(lc.getId());
+				int pref = dimension == HORIZONTAL ? sizeLimit.width : sizeLimit.height;
+				if (interval.getPreferredSize() < pref) {
+					layoutModel.setIntervalSize(interval, 0, 0, interval.getMaximumSize());
+				} else {
+					layoutModel.setIntervalSize(
+							interval,
+							interval.getMinimumSize() != USE_PREFERRED_SIZE
+							? interval.getMinimumSize()
+									: NOT_EXPLICITLY_DEFINED,
+									NOT_EXPLICITLY_DEFINED,
+									interval.getMaximumSize());
+				}
+			}
+		}
+		if (interval.isComponent()
+				&& neighborGap == null
+				&& (parallelInt == interval || LayoutInterval.getCount(parallelInt, DEFAULT, true) == 1)) { // look for same sized components
+			setParallelSameSize(group, parallelInt, dimension);
+		}
+	}
 
-  private void setParallelSameSize(LayoutInterval group, LayoutInterval aligned, int dimension) {
-    LayoutInterval alignedComp = getOneNonEmpty(aligned);
-    for (Iterator<LayoutInterval> it = group.getSubIntervals(); it.hasNext();) {
-      LayoutInterval li = it.next();
-      if (li != aligned) {
-        if (li.isParallel()) {
-          setParallelSameSize(li, alignedComp, dimension);
-        } else {
-          LayoutInterval sub = getOneNonEmpty(li);
-          if (sub != null
-              && LayoutRegion.sameSpace(
-                  alignedComp.getCurrentSpace(),
-                  sub.getCurrentSpace(),
-                  dimension)
-              && !LayoutInterval.wantResize(li)) { // viusally aligned subinterval
-            if (sub.isParallel()) {
-              setParallelSameSize(sub, alignedComp, dimension);
-            } else { // make this component filling the group - effectively keeping same size
-              layoutModel.setIntervalAlignment(li, aligned.getAlignment());
-              int min = sub.getMinimumSize();
-              layoutModel.setIntervalSize(
-                  sub,
-                  min != USE_PREFERRED_SIZE ? min : NOT_EXPLICITLY_DEFINED,
-                  sub.getPreferredSize(),
-                  Short.MAX_VALUE);
-              layoutModel.changeIntervalAttribute(sub, LayoutInterval.ATTRIBUTE_FILL, true);
-            }
-          }
-        }
-      }
-    }
-  }
+	private void setParallelSameSize(LayoutInterval group, LayoutInterval aligned, int dimension) {
+		LayoutInterval alignedComp = getOneNonEmpty(aligned);
+		for (Iterator<LayoutInterval> it = group.getSubIntervals(); it.hasNext();) {
+			LayoutInterval li = it.next();
+			if (li != aligned) {
+				if (li.isParallel()) {
+					setParallelSameSize(li, alignedComp, dimension);
+				} else {
+					LayoutInterval sub = getOneNonEmpty(li);
+					if (sub != null
+							&& LayoutRegion.sameSpace(
+									alignedComp.getCurrentSpace(),
+									sub.getCurrentSpace(),
+									dimension)
+							&& !LayoutInterval.wantResize(li)) { // viusally aligned subinterval
+						if (sub.isParallel()) {
+							setParallelSameSize(sub, alignedComp, dimension);
+						} else { // make this component filling the group - effectively keeping same size
+							layoutModel.setIntervalAlignment(li, aligned.getAlignment());
+							int min = sub.getMinimumSize();
+							layoutModel.setIntervalSize(
+									sub,
+									min != USE_PREFERRED_SIZE ? min : NOT_EXPLICITLY_DEFINED,
+											sub.getPreferredSize(),
+											Short.MAX_VALUE);
+							layoutModel.changeIntervalAttribute(sub, LayoutInterval.ATTRIBUTE_FILL, true);
+						}
+					}
+				}
+			}
+		}
+	}
 
-  private static LayoutInterval getOneNonEmpty(LayoutInterval interval) {
-    if (!interval.isSequential()) {
-      return interval;
-    }
-    LayoutInterval nonEmpty = null;
-    for (Iterator<LayoutInterval> it = interval.getSubIntervals(); it.hasNext();) {
-      LayoutInterval li = it.next();
-      if (!li.isEmptySpace()) {
-        if (nonEmpty == null) {
-          nonEmpty = li;
-        } else {
-          return null;
-        }
-      }
-    }
-    return nonEmpty;
-  }
+	private static LayoutInterval getOneNonEmpty(LayoutInterval interval) {
+		if (!interval.isSequential()) {
+			return interval;
+		}
+		LayoutInterval nonEmpty = null;
+		for (Iterator<LayoutInterval> it = interval.getSubIntervals(); it.hasNext();) {
+			LayoutInterval li = it.next();
+			if (!li.isEmptySpace()) {
+				if (nonEmpty == null) {
+					nonEmpty = li;
+				} else {
+					return null;
+				}
+			}
+		}
+		return nonEmpty;
+	}
 
-  private int getExpectedBorderPosition(LayoutInterval interval, int dimension, int alignment) {
-    LayoutInterval comp = LayoutUtils.getOutermostComponent(interval, dimension, alignment);
-    int pos = comp.getCurrentSpace().positions[dimension][alignment];
-    LayoutInterval neighbor = LayoutInterval.getNeighbor(comp, alignment, false, true, false);
-    if (neighbor != null && neighbor.isEmptySpace() && interval.isParentOf(neighbor)) {
-      int diff = neighbor.getPreferredSize();
-      if (diff == NOT_EXPLICITLY_DEFINED) {
-        diff = LayoutUtils.getSizeOfDefaultGap(neighbor, operations.getMapper());
-      }
-      if (alignment == LEADING) {
-        diff *= -1;
-      }
-      pos += diff;
-    }
-    return pos;
-  }
+	private int getExpectedBorderPosition(LayoutInterval interval, int dimension, int alignment) {
+		LayoutInterval comp = LayoutUtils.getOutermostComponent(interval, dimension, alignment);
+		int pos = comp.getCurrentSpace().positions[dimension][alignment];
+		LayoutInterval neighbor = LayoutInterval.getNeighbor(comp, alignment, false, true, false);
+		if (neighbor != null && neighbor.isEmptySpace() && interval.isParentOf(neighbor)) {
+			int diff = neighbor.getPreferredSize();
+			if (diff == NOT_EXPLICITLY_DEFINED) {
+				diff = LayoutUtils.getSizeOfDefaultGap(neighbor, operations.getMapper());
+			}
+			if (alignment == LEADING) {
+				diff *= -1;
+			}
+			pos += diff;
+		}
+		return pos;
+	}
 
-  private int determinePadding(LayoutInterval interval,
-      PaddingType paddingType,
-      int dimension,
-      int alignment) {
-    LayoutInterval neighbor = LayoutInterval.getNeighbor(interval, alignment, true, true, false);
-    if (paddingType == null) {
-      paddingType = PaddingType.RELATED;
-    }
-    return dragger.findPaddings(neighbor, interval, paddingType, dimension, alignment)[0];
-    // need to go through dragger as the component of 'interval' is not in model yet
-  }
+	private int determinePadding(LayoutInterval interval,
+			PaddingType paddingType,
+			int dimension,
+			int alignment) {
+		LayoutInterval neighbor = LayoutInterval.getNeighbor(interval, alignment, true, true, false);
+		if (paddingType == null) {
+			paddingType = PaddingType.RELATED;
+		}
+		return dragger.findPaddings(neighbor, interval, paddingType, dimension, alignment)[0];
+		// need to go through dragger as the component of 'interval' is not in model yet
+	}
 
-  /**
-   * Finds padding for an interval (yet to be added) in relation to a base interval or a parent
-   * interval border (base interval null)
-   *
-   * @param alignment
-   *          LEADING or TRAILING point of addingInt
-   */
-  private int determineExpectingPadding(LayoutInterval addingInt,
-      LayoutInterval baseInt,
-      LayoutInterval baseParent,
-      int alignment) {
-    if (baseInt == null) {
-      baseInt = LayoutInterval.getNeighbor(baseParent, SEQUENTIAL, alignment);
-    }
-    return dragger.findPaddings(baseInt, addingInt, PaddingType.RELATED, dimension, alignment)[0];
-  }
+	/**
+	 * Finds padding for an interval (yet to be added) in relation to a base interval or a parent
+	 * interval border (base interval null)
+	 *
+	 * @param alignment
+	 *          LEADING or TRAILING point of addingInt
+	 */
+	private int determineExpectingPadding(LayoutInterval addingInt,
+			LayoutInterval baseInt,
+			LayoutInterval baseParent,
+			int alignment) {
+		if (baseInt == null) {
+			baseInt = LayoutInterval.getNeighbor(baseParent, SEQUENTIAL, alignment);
+		}
+		return dragger.findPaddings(baseInt, addingInt, PaddingType.RELATED, dimension, alignment)[0];
+	}
 
-  // -----
-  private void analyzeParallel(LayoutInterval group, List<IncludeDesc> inclusions) {
-    Iterator<LayoutInterval> it = group.getSubIntervals();
-    while (it.hasNext()) {
-      LayoutInterval sub = it.next();
-      if (sub.isEmptySpace()) {
-        continue;
-      }
-      LayoutRegion subSpace = sub.getCurrentSpace();
-      if (sub.isParallel()
-          && pointInside(addingSpace, aEdge, sub, dimension)
-          && shouldEnterGroup(sub)) { // group space contains significant edge
-        analyzeParallel(sub, inclusions);
-      } else if (sub.isSequential()) {
-        // always analyze sequence - it may be valid even if there is no
-        // overlap (not required in vertical dimension)
-        analyzeSequential(sub, inclusions);
-      } else if (orthogonalOverlap(sub)) {
-        boolean dimOverlap = LayoutRegion.overlap(addingSpace, subSpace, dimension, 0);
-        if (dimOverlap && !solveOverlap) {
-          IncludeDesc origPos = originalPositions1[dimension];
-          if (origPos == null
-              || (aEdge ^ 1) != origPos.alignment
-              || origPos.parent != sub && !sub.isParentOf(origPos.parent)) { // don't want to deal with the overlap here
-            continue;
-          }
-          // otherwise overlapping enclosing space of 'sub' does not
-          // matter as the other edge of adding component resides
-          // inside 'sub', so this position should be in sequence
-        }
-        if (dimOverlap) {
-          imposeSize = true;
-        }
-        int distance = LayoutRegion.UNKNOWN;
-        if (aSnappedNextTo != null) {
-          // check if aSnappedNextTo is related to this position with 'sub' as neighbor
-          LayoutInterval neighbor;
-          if (sub == aSnappedNextTo
-              || sub.isParentOf(aSnappedNextTo)
-              || aSnappedNextTo.getParent() == null
-              || (neighbor =
-                  LayoutInterval.getNeighbor(sub, aEdge, true, true, false)) == aSnappedNextTo
-              || neighbor != null && neighbor.isParentOf(aSnappedNextTo)) { // nextTo snap is relevant to this position
-            distance = -1; // IncludeDesc.snappedNextTo will be set if distance == -1
-          }
-        }
-        if (distance != -1) {
-          if (!dimOverlap) { // determine distance from 'sub'
-            int dstL = LayoutRegion.distance(subSpace, addingSpace, dimension, TRAILING, LEADING);
-            int dstT = LayoutRegion.distance(addingSpace, subSpace, dimension, TRAILING, LEADING);
-            distance = dstL >= 0 ? dstL : dstT;
-          } else {
-            distance = 0; // overlapping
-          }
-        }
-        IncludeDesc iDesc = addInclusion(group, false, distance, 0, inclusions);
-        if (iDesc != null) {
-          iDesc.neighbor = sub;
-          int point = aEdge < 0 ? CENTER : aEdge;
-          iDesc.index = getAddDirection(addingSpace, subSpace, dimension, point) == LEADING ? 0 : 1;
-        }
-      }
-    }
-    if (inclusions.isEmpty()) { // no inclusion found yet
-      if (group.getParent() == null
-          && (aSnappedParallel == null || canAlignWith(aSnappedParallel, group, aEdge))) { // this is the last (top) valid group
-        int distance = aSnappedNextTo == group ? -1 : Integer.MAX_VALUE;
-        addInclusion(group, false, distance, Integer.MAX_VALUE, inclusions);
-      }
-    }
-  }
+	// -----
+	private void analyzeParallel(LayoutInterval group, List<IncludeDesc> inclusions) {
+		Iterator<LayoutInterval> it = group.getSubIntervals();
+		while (it.hasNext()) {
+			LayoutInterval sub = it.next();
+			if (sub.isEmptySpace()) {
+				continue;
+			}
+			LayoutRegion subSpace = sub.getCurrentSpace();
+			if (sub.isParallel()
+					&& pointInside(addingSpace, aEdge, sub, dimension)
+					&& shouldEnterGroup(sub)) { // group space contains significant edge
+				analyzeParallel(sub, inclusions);
+			} else if (sub.isSequential()) {
+				// always analyze sequence - it may be valid even if there is no
+				// overlap (not required in vertical dimension)
+				analyzeSequential(sub, inclusions);
+			} else if (orthogonalOverlap(sub)) {
+				boolean dimOverlap = LayoutRegion.overlap(addingSpace, subSpace, dimension, 0);
+				if (dimOverlap && !solveOverlap) {
+					IncludeDesc origPos = originalPositions1[dimension];
+					if (origPos == null
+							|| (aEdge ^ 1) != origPos.alignment
+							|| origPos.parent != sub && !sub.isParentOf(origPos.parent)) { // don't want to deal with the overlap here
+						continue;
+					}
+					// otherwise overlapping enclosing space of 'sub' does not
+					// matter as the other edge of adding component resides
+					// inside 'sub', so this position should be in sequence
+				}
+				if (dimOverlap) {
+					imposeSize = true;
+				}
+				int distance = LayoutRegion.UNKNOWN;
+				if (aSnappedNextTo != null) {
+					// check if aSnappedNextTo is related to this position with 'sub' as neighbor
+					LayoutInterval neighbor;
+					if (sub == aSnappedNextTo
+							|| sub.isParentOf(aSnappedNextTo)
+							|| aSnappedNextTo.getParent() == null
+							|| (neighbor =
+							LayoutInterval.getNeighbor(sub, aEdge, true, true, false)) == aSnappedNextTo
+							|| neighbor != null && neighbor.isParentOf(aSnappedNextTo)) { // nextTo snap is relevant to this position
+						distance = -1; // IncludeDesc.snappedNextTo will be set if distance == -1
+					}
+				}
+				if (distance != -1) {
+					if (!dimOverlap) { // determine distance from 'sub'
+						int dstL = LayoutRegion.distance(subSpace, addingSpace, dimension, TRAILING, LEADING);
+						int dstT = LayoutRegion.distance(addingSpace, subSpace, dimension, TRAILING, LEADING);
+						distance = dstL >= 0 ? dstL : dstT;
+					} else {
+						distance = 0; // overlapping
+					}
+				}
+				IncludeDesc iDesc = addInclusion(group, false, distance, 0, inclusions);
+				if (iDesc != null) {
+					iDesc.neighbor = sub;
+					int point = aEdge < 0 ? CENTER : aEdge;
+					iDesc.index = getAddDirection(addingSpace, subSpace, dimension, point) == LEADING ? 0 : 1;
+				}
+			}
+		}
+		if (inclusions.isEmpty()) { // no inclusion found yet
+			if (group.getParent() == null
+					&& (aSnappedParallel == null || canAlignWith(aSnappedParallel, group, aEdge))) { // this is the last (top) valid group
+				int distance = aSnappedNextTo == group ? -1 : Integer.MAX_VALUE;
+				addInclusion(group, false, distance, Integer.MAX_VALUE, inclusions);
+			}
+		}
+	}
 
-  private void analyzeSequential(LayoutInterval group, List<IncludeDesc> inclusions) {
-    boolean inSequence = false;
-    boolean parallelWithSequence = false;
-    int index = -1;
-    int distance = Integer.MAX_VALUE;
-    int ortDistance = Integer.MAX_VALUE;
-    for (int i = 0, n = group.getSubIntervalCount(); i < n; i++) {
-      LayoutInterval sub = group.getSubInterval(i);
-      if (sub.isEmptySpace()) {
-        if (index == i) {
-          index++;
-        }
-        continue;
-      }
-      LayoutRegion subSpace = sub.getCurrentSpace();
-      // first analyze the interval as a possible sub-group
-      if (sub.isParallel()
-          && pointInside(addingSpace, aEdge, sub, dimension)
-          && shouldEnterGroup(sub)) { // group space contains significant edge
-        int count = inclusions.size();
-        analyzeParallel(sub, inclusions);
-        if (inclusions.size() > count) {
-          return;
-        }
-      }
-      // second analyze the interval as a single element for "next to" placement
-      boolean ortOverlap = orthogonalOverlap(sub);
-      int margin = dimension == VERTICAL && !ortOverlap ? 4 : 0;
-      boolean dimOverlap = LayoutRegion.overlap(addingSpace, subSpace, dimension, margin);
-      // in vertical dimension always pretend orthogonal overlap if there
-      // is no overlap in horizontal dimension (i.e. force inserting into sequence)
-      if (ortOverlap || dimension == VERTICAL && !dimOverlap && !parallelWithSequence) {
-        if (dimOverlap) { // overlaps in both dimensions
-          if (!solveOverlap) { // don't want to solve the overlap in this sequence
-            IncludeDesc origPos = originalPositions1[dimension];
-            if (origPos == null
-                || (aEdge ^ 1) != origPos.alignment
-                || origPos.parent != sub && !sub.isParentOf(origPos.parent)) { // overlap will be solved in the other dimension
-              return;
-            }
-            // otherwise overlapping enclosing space of 'sub' does not
-            // matter as the other edge of adding component resides
-            // inside 'sub', so this position should be in sequence
-          }
-          if (ortOverlap) {
-            imposeSize = true;
-          }
-          inSequence = true;
-          distance = ortDistance = 0;
-        } else { // determine distance from the interval
-          int dstL = LayoutRegion.distance(subSpace, addingSpace, dimension, TRAILING, LEADING);
-          int dstT = LayoutRegion.distance(addingSpace, subSpace, dimension, TRAILING, LEADING);
-          if (dstL >= 0 && dstL < distance) {
-            distance = dstL;
-          }
-          if (dstT >= 0 && dstT < distance) {
-            distance = dstT;
-          }
-          if (ortOverlap) {
-            ortDistance = 0;
-            inSequence = true;
-          } else { // remember also the orthogonal distance
-            dstL = LayoutRegion.distance(subSpace, addingSpace, dimension ^ 1, TRAILING, LEADING);
-            dstT = LayoutRegion.distance(addingSpace, subSpace, dimension ^ 1, TRAILING, LEADING);
-            if (dstL > 0 && dstL < ortDistance) {
-              ortDistance = dstL;
-            }
-            if (dstT > 0 && dstT < ortDistance) {
-              ortDistance = dstT;
-            }
-          }
-        }
-        int point = aEdge < 0 ? CENTER : aEdge;
-        if (getAddDirection(addingSpace, subSpace, dimension, point) == LEADING) {
-          if (aEdge != LEADING) {
-            index = i;
-          }
-          break; // this interval is already after the adding one, no need to continue
-        } else { // intervals before this one are irrelevant
-          parallelWithSequence = false;
-          if (aEdge == LEADING) {
-            index = i + 1;
-          }
-        }
-      } else { // no orthogonal overlap, moreover in vertical dimension located parallelly
-        parallelWithSequence = true;
-      }
-    }
-    if (inSequence || dimension == VERTICAL && !parallelWithSequence) {
-      // so it make sense to add the interval to this sequence
-      if (aSnappedNextTo != null
-          && (group.isParentOf(aSnappedNextTo) || aSnappedNextTo.getParent() == null)) { // snapped interval is in this sequence, or it is the root group
-        distance = -1; // preferred distance
-      }
-      IncludeDesc iDesc =
-          addInclusion(group, parallelWithSequence, distance, ortDistance, inclusions);
-      if (iDesc != null) {
-        if (index == -1) {
-          index = aEdge == LEADING ? 0 : group.getSubIntervalCount();
-        }
-        iDesc.index = index;
-      }
-    }
-  }
+	private void analyzeSequential(LayoutInterval group, List<IncludeDesc> inclusions) {
+		boolean inSequence = false;
+		boolean parallelWithSequence = false;
+		int index = -1;
+		int distance = Integer.MAX_VALUE;
+		int ortDistance = Integer.MAX_VALUE;
+		for (int i = 0, n = group.getSubIntervalCount(); i < n; i++) {
+			LayoutInterval sub = group.getSubInterval(i);
+			if (sub.isEmptySpace()) {
+				if (index == i) {
+					index++;
+				}
+				continue;
+			}
+			LayoutRegion subSpace = sub.getCurrentSpace();
+			// first analyze the interval as a possible sub-group
+			if (sub.isParallel()
+					&& pointInside(addingSpace, aEdge, sub, dimension)
+					&& shouldEnterGroup(sub)) { // group space contains significant edge
+				int count = inclusions.size();
+				analyzeParallel(sub, inclusions);
+				if (inclusions.size() > count) {
+					return;
+				}
+			}
+			// second analyze the interval as a single element for "next to" placement
+			boolean ortOverlap = orthogonalOverlap(sub);
+			int margin = dimension == VERTICAL && !ortOverlap ? 4 : 0;
+			boolean dimOverlap = LayoutRegion.overlap(addingSpace, subSpace, dimension, margin);
+			// in vertical dimension always pretend orthogonal overlap if there
+			// is no overlap in horizontal dimension (i.e. force inserting into sequence)
+			if (ortOverlap || dimension == VERTICAL && !dimOverlap && !parallelWithSequence) {
+				if (dimOverlap) { // overlaps in both dimensions
+					if (!solveOverlap) { // don't want to solve the overlap in this sequence
+						IncludeDesc origPos = originalPositions1[dimension];
+						if (origPos == null
+								|| (aEdge ^ 1) != origPos.alignment
+								|| origPos.parent != sub && !sub.isParentOf(origPos.parent)) { // overlap will be solved in the other dimension
+							return;
+						}
+						// otherwise overlapping enclosing space of 'sub' does not
+						// matter as the other edge of adding component resides
+						// inside 'sub', so this position should be in sequence
+					}
+					if (ortOverlap) {
+						imposeSize = true;
+					}
+					inSequence = true;
+					distance = ortDistance = 0;
+				} else { // determine distance from the interval
+					int dstL = LayoutRegion.distance(subSpace, addingSpace, dimension, TRAILING, LEADING);
+					int dstT = LayoutRegion.distance(addingSpace, subSpace, dimension, TRAILING, LEADING);
+					if (dstL >= 0 && dstL < distance) {
+						distance = dstL;
+					}
+					if (dstT >= 0 && dstT < distance) {
+						distance = dstT;
+					}
+					if (ortOverlap) {
+						ortDistance = 0;
+						inSequence = true;
+					} else { // remember also the orthogonal distance
+						dstL = LayoutRegion.distance(subSpace, addingSpace, dimension ^ 1, TRAILING, LEADING);
+						dstT = LayoutRegion.distance(addingSpace, subSpace, dimension ^ 1, TRAILING, LEADING);
+						if (dstL > 0 && dstL < ortDistance) {
+							ortDistance = dstL;
+						}
+						if (dstT > 0 && dstT < ortDistance) {
+							ortDistance = dstT;
+						}
+					}
+				}
+				int point = aEdge < 0 ? CENTER : aEdge;
+				if (getAddDirection(addingSpace, subSpace, dimension, point) == LEADING) {
+					if (aEdge != LEADING) {
+						index = i;
+					}
+					break; // this interval is already after the adding one, no need to continue
+				} else { // intervals before this one are irrelevant
+					parallelWithSequence = false;
+					if (aEdge == LEADING) {
+						index = i + 1;
+					}
+				}
+			} else { // no orthogonal overlap, moreover in vertical dimension located parallelly
+				parallelWithSequence = true;
+			}
+		}
+		if (inSequence || dimension == VERTICAL && !parallelWithSequence) {
+			// so it make sense to add the interval to this sequence
+			if (aSnappedNextTo != null
+					&& (group.isParentOf(aSnappedNextTo) || aSnappedNextTo.getParent() == null)) { // snapped interval is in this sequence, or it is the root group
+				distance = -1; // preferred distance
+			}
+			IncludeDesc iDesc =
+					addInclusion(group, parallelWithSequence, distance, ortDistance, inclusions);
+			if (iDesc != null) {
+				if (index == -1) {
+					index = aEdge == LEADING ? 0 : group.getSubIntervalCount();
+				}
+				iDesc.index = index;
+			}
+		}
+	}
 
-  private static boolean pointInside(LayoutRegion space,
-      int alignment,
-      LayoutInterval group,
-      int dimension) {
-    LayoutRegion groupSpace = group.getCurrentSpace();
-    if (alignment != DEFAULT) {
-      return LayoutRegion.pointInside(space, alignment, groupSpace, dimension);
-    }
-    boolean leadingInside = LayoutRegion.pointInside(space, LEADING, groupSpace, dimension);
-    boolean trailingInside = LayoutRegion.pointInside(space, TRAILING, groupSpace, dimension);
-    return leadingInside && trailingInside
-        || leadingInside && !LayoutInterval.isClosedGroup(group, TRAILING)
-        || trailingInside && !LayoutInterval.isClosedGroup(group, LEADING);
-/*        int point = alignment < 0 ? CENTER : alignment;
+	private static boolean pointInside(LayoutRegion space,
+			int alignment,
+			LayoutInterval group,
+			int dimension) {
+		LayoutRegion groupSpace = group.getCurrentSpace();
+		if (alignment != DEFAULT) {
+			return LayoutRegion.pointInside(space, alignment, groupSpace, dimension);
+		}
+		boolean leadingInside = LayoutRegion.pointInside(space, LEADING, groupSpace, dimension);
+		boolean trailingInside = LayoutRegion.pointInside(space, TRAILING, groupSpace, dimension);
+		return leadingInside && trailingInside
+				|| leadingInside && !LayoutInterval.isClosedGroup(group, TRAILING)
+				|| trailingInside && !LayoutInterval.isClosedGroup(group, LEADING);
+		/*        int point = alignment < 0 ? CENTER : alignment;
 LayoutRegion groupSpace = group.getCurrentSpace();
 if (LayoutRegion.pointInside(space, point, groupSpace, dimension))
 return true;
@@ -2121,887 +2121,887 @@ private static boolean pointInside(LayoutRegion space,
 && LayoutRegion.pointInside(space, TRAILING, groupSpace, dimension));
 }
 return false; */
-  }
+	}
 
-  private boolean orthogonalOverlap(LayoutInterval interval) {
-    boolean ortOverlap;
-    if (solveOverlap
-        || !LayoutUtils.isOverlapPreventedInOtherDimension(addingInterval, interval, dimension)) {
-      // we are interested in the orthogonal overlap (i.e. overlap in the other dimension)
-      ortOverlap = LayoutUtils.contentOverlap(addingSpace, interval, dimension ^ 1);
-      if (ortOverlap
-          && dragger.isResizing(dimension)
-          && !dragger.isResizing(dimension ^ 1)
-          && originalPositions1[dimension] != null) { // there is overlap, but in case of resizing in one dimension
-                                                                                                                                            // only we should not consider overlap that was not cared of
-                                                                                                                                            // already before the resizing started (i.e. the resizing
-                                                                                                                                            // interval was not in sequence with the interval in question)
-        IncludeDesc original = originalPositions1[dimension];
-        LayoutInterval parent = original.parent;
-        if (parent.isParentOf(interval)) {
-          if (parent.isParallel()
-              && (original.neighbor == null
-                  || original.neighbor != interval && !original.neighbor.isParentOf(interval))) {
-            ortOverlap = false;
-          }
-        } else if (parent == interval) {
-          if (parent.isParallel() && original.neighbor == null) {
-            ortOverlap = false;
-          }
-        } else if (!interval.isParentOf(parent)) {
-          parent = LayoutInterval.getCommonParent(parent, interval);
-          if (parent != null && parent.isParallel()) {
-            ortOverlap = false;
-          }
-        }
-      }
-    }
-    // otherwise the overlap is prevented in the other dimension so we should
-    // not consider it (though the actual visual appearance might look so)
-    else {
-      ortOverlap = false;
-    }
-    return ortOverlap;
-  }
+	private boolean orthogonalOverlap(LayoutInterval interval) {
+		boolean ortOverlap;
+		if (solveOverlap
+				|| !LayoutUtils.isOverlapPreventedInOtherDimension(addingInterval, interval, dimension)) {
+			// we are interested in the orthogonal overlap (i.e. overlap in the other dimension)
+			ortOverlap = LayoutUtils.contentOverlap(addingSpace, interval, dimension ^ 1);
+			if (ortOverlap
+					&& dragger.isResizing(dimension)
+					&& !dragger.isResizing(dimension ^ 1)
+					&& originalPositions1[dimension] != null) { // there is overlap, but in case of resizing in one dimension
+				// only we should not consider overlap that was not cared of
+				// already before the resizing started (i.e. the resizing
+				// interval was not in sequence with the interval in question)
+				IncludeDesc original = originalPositions1[dimension];
+				LayoutInterval parent = original.parent;
+				if (parent.isParentOf(interval)) {
+					if (parent.isParallel()
+							&& (original.neighbor == null
+							|| original.neighbor != interval && !original.neighbor.isParentOf(interval))) {
+						ortOverlap = false;
+					}
+				} else if (parent == interval) {
+					if (parent.isParallel() && original.neighbor == null) {
+						ortOverlap = false;
+					}
+				} else if (!interval.isParentOf(parent)) {
+					parent = LayoutInterval.getCommonParent(parent, interval);
+					if (parent != null && parent.isParallel()) {
+						ortOverlap = false;
+					}
+				}
+			}
+		}
+		// otherwise the overlap is prevented in the other dimension so we should
+		// not consider it (though the actual visual appearance might look so)
+		else {
+			ortOverlap = false;
+		}
+		return ortOverlap;
+	}
 
-  private IncludeDesc addInclusion(LayoutInterval parent,
-      boolean subgroup,
-      int distance,
-      int ortDistance,
-      List<IncludeDesc> inclusions) {
-    if (!inclusions.isEmpty()) {
-      int index = inclusions.size() - 1;
-      IncludeDesc last = inclusions.get(index);
-      boolean useLast = false;
-      boolean useNew = false;
-      boolean ortOverlap1 = last.ortDistance == 0;
-      boolean ortOverlap2 = ortDistance == 0;
-      if (ortOverlap1 != ortOverlap2) {
-        useLast = ortOverlap1;
-        useNew = ortOverlap2;
-      } else if (ortOverlap1) { // both having orthogonal overlap
-        useLast = useNew = true;
-      } else { // none having orthogonal overlap (could happen in vertical dimension)
-        if (last.ortDistance != ortDistance) {
-          useLast = last.ortDistance < ortDistance;
-          useNew = ortDistance < last.ortDistance;
-        } else if (last.distance != distance) {
-          useLast = last.distance < distance;
-          useNew = distance < last.distance;
-        }
-      }
-      if (!useLast && !useNew) { // could not choose according to distance, so prefer deeper position
-        LayoutInterval parParent = last.parent.isParallel() ? last.parent : last.parent.getParent();
-        useNew = parParent.isParentOf(parent);
-        useLast = !useNew;
-      }
-      if (!useLast) {
-        inclusions.remove(index);
-      }
-      if (!useNew) {
-        return null;
-      }
-    }
-    IncludeDesc iDesc = new IncludeDesc();
-    iDesc.parent = parent;
-    iDesc.newSubGroup = subgroup;
-    iDesc.alignment = aEdge;
-    iDesc.snappedParallel = aSnappedParallel;
-    if (distance == -1) {
-      iDesc.snappedNextTo = aSnappedNextTo;
-      iDesc.paddingType = aPaddingType;
-      iDesc.fixedPosition = true;
-    }
-    iDesc.distance = distance;
-    iDesc.ortDistance = ortDistance;
-    inclusions.add(iDesc);
-    return iDesc;
-  }
+	private IncludeDesc addInclusion(LayoutInterval parent,
+			boolean subgroup,
+			int distance,
+			int ortDistance,
+			List<IncludeDesc> inclusions) {
+		if (!inclusions.isEmpty()) {
+			int index = inclusions.size() - 1;
+			IncludeDesc last = inclusions.get(index);
+			boolean useLast = false;
+			boolean useNew = false;
+			boolean ortOverlap1 = last.ortDistance == 0;
+			boolean ortOverlap2 = ortDistance == 0;
+			if (ortOverlap1 != ortOverlap2) {
+				useLast = ortOverlap1;
+				useNew = ortOverlap2;
+			} else if (ortOverlap1) { // both having orthogonal overlap
+				useLast = useNew = true;
+			} else { // none having orthogonal overlap (could happen in vertical dimension)
+				if (last.ortDistance != ortDistance) {
+					useLast = last.ortDistance < ortDistance;
+					useNew = ortDistance < last.ortDistance;
+				} else if (last.distance != distance) {
+					useLast = last.distance < distance;
+					useNew = distance < last.distance;
+				}
+			}
+			if (!useLast && !useNew) { // could not choose according to distance, so prefer deeper position
+				LayoutInterval parParent = last.parent.isParallel() ? last.parent : last.parent.getParent();
+				useNew = parParent.isParentOf(parent);
+				useLast = !useNew;
+			}
+			if (!useLast) {
+				inclusions.remove(index);
+			}
+			if (!useNew) {
+				return null;
+			}
+		}
+		IncludeDesc iDesc = new IncludeDesc();
+		iDesc.parent = parent;
+		iDesc.newSubGroup = subgroup;
+		iDesc.alignment = aEdge;
+		iDesc.snappedParallel = aSnappedParallel;
+		if (distance == -1) {
+			iDesc.snappedNextTo = aSnappedNextTo;
+			iDesc.paddingType = aPaddingType;
+			iDesc.fixedPosition = true;
+		}
+		iDesc.distance = distance;
+		iDesc.ortDistance = ortDistance;
+		inclusions.add(iDesc);
+		return iDesc;
+	}
 
-  /**
-   * Adds an inclusion for parallel aligning if none of found non-overlapping inclusions is
-   * compatible with the required aligning. Later mergeParallelInclusions may still unify the
-   * inclusions, but if not then the inclusion created here is used - because requested parallel
-   * aligning needs to be preserved even if overlapping can't be avoided.
-   */
-  private IncludeDesc addAligningInclusion(List<IncludeDesc> inclusions) {
-    if (aSnappedParallel == null) {
-      return null;
-    }
-    boolean compatibleFound = false;
-    for (IncludeDesc iDesc : inclusions) {
-      if (canAlignWith(aSnappedParallel, iDesc.parent, aEdge)) {
-        compatibleFound = true;
-        break;
-      }
-    }
-    if (!compatibleFound) {
-      IncludeDesc iDesc = new IncludeDesc();
-      iDesc.parent = aSnappedParallel.getParent() != null
-          ? LayoutInterval.getFirstParent(aSnappedParallel, PARALLEL)
-          : aSnappedParallel;
-      iDesc.snappedParallel = aSnappedParallel;
-      iDesc.alignment = aEdge;
-      inclusions.add(0, iDesc);
-      return iDesc;
-    } else {
-      return null;
-    }
-  }
+	/**
+	 * Adds an inclusion for parallel aligning if none of found non-overlapping inclusions is
+	 * compatible with the required aligning. Later mergeParallelInclusions may still unify the
+	 * inclusions, but if not then the inclusion created here is used - because requested parallel
+	 * aligning needs to be preserved even if overlapping can't be avoided.
+	 */
+	private IncludeDesc addAligningInclusion(List<IncludeDesc> inclusions) {
+		if (aSnappedParallel == null) {
+			return null;
+		}
+		boolean compatibleFound = false;
+		for (IncludeDesc iDesc : inclusions) {
+			if (canAlignWith(aSnappedParallel, iDesc.parent, aEdge)) {
+				compatibleFound = true;
+				break;
+			}
+		}
+		if (!compatibleFound) {
+			IncludeDesc iDesc = new IncludeDesc();
+			iDesc.parent = aSnappedParallel.getParent() != null
+					? LayoutInterval.getFirstParent(aSnappedParallel, PARALLEL)
+							: aSnappedParallel;
+			iDesc.snappedParallel = aSnappedParallel;
+			iDesc.alignment = aEdge;
+			inclusions.add(0, iDesc);
+			return iDesc;
+		} else {
+			return null;
+		}
+	}
 
-  /**
-   * @param preserveOriginal
-   *          if true, original inclusion needs to be preserved, will be merged with new inclusion
-   *          sequentially; if false, original inclusion is just consulted when choosing best
-   *          inclusion
-   */
-  private void mergeParallelInclusions(List<IncludeDesc> inclusions,
-      IncludeDesc original,
-      boolean preserveOriginal) {
-    // 1st step - find representative (best) inclusion
-    IncludeDesc best = null;
-    boolean bestOriginal = false;
-    for (IncludeDesc iDesc : inclusions) {
-      if (original == null || !preserveOriginal || canCombine(iDesc, original)) {
-        if (best != null) {
-          boolean originalCompatible =
-              original != null && !preserveOriginal && iDesc.parent == original.parent;
-          if (!bestOriginal && originalCompatible) {
-            best = iDesc;
-            bestOriginal = true;
-          } else if (bestOriginal == originalCompatible) {
-            LayoutInterval group1 =
-                best.parent.isSequential() ? best.parent.getParent() : best.parent;
-            LayoutInterval group2 =
-                iDesc.parent.isSequential() ? iDesc.parent.getParent() : iDesc.parent;
-            if (group1.isParentOf(group2)) {
-              best = iDesc; // deeper is better
-            } else if (!group2.isParentOf(group1) && iDesc.distance < best.distance) {
-              best = iDesc;
-            }
-          }
-        } else {
-          best = iDesc;
-          bestOriginal = original != null && !preserveOriginal && iDesc.parent == original.parent;
-        }
-      }
-    }
-    if (best == null) { // nothing compatible with original position
-      assert preserveOriginal;
-      inclusions.clear();
-      inclusions.add(original);
-      return;
-    }
-    LayoutInterval commonGroup = best.parent.isSequential() ? best.parent.getParent() : best.parent;
-    // 2nd remove incompatible inclusions, move compatible ones to same level
-    for (Iterator<IncludeDesc> it = inclusions.iterator(); it.hasNext();) {
-      IncludeDesc iDesc = it.next();
-      if (iDesc != best) {
-        if (!compatibleInclusions(iDesc, best, dimension)) {
-          it.remove();
-        } else {
-          LayoutInterval group =
-              iDesc.parent.isSequential() ? iDesc.parent.getParent() : iDesc.parent;
-          if (group.isParentOf(commonGroup)) {
-            LayoutInterval neighbor = iDesc.parent.isSequential() ? iDesc.parent : iDesc.neighbor;
-            layoutModel.removeInterval(neighbor);
-            // [what about the alignment?]
-            layoutModel.addInterval(neighbor, commonGroup, -1);
-            if (group.getSubIntervalCount() == 1) {
-              LayoutInterval parent = group.getParent();
-              LayoutInterval last = layoutModel.removeInterval(group, 0);
-              operations.addContent(last, parent, layoutModel.removeInterval(group));
-              if (commonGroup == last && commonGroup.getParent() == null) {
-                commonGroup = parent;
-              }
-              updateReplacedOriginalGroup(commonGroup, null);
-            }
-            if (iDesc.parent == group) {
-              iDesc.parent = commonGroup;
-            }
-          }
-        }
-      }
-    }
-    if (best.parent.isParallel()
-        && best.snappedParallel != null
-        && best.ortDistance != 0
-        && inclusions.size() > 1) { // forced inclusion by addAlignedInclusion
-      inclusions.remove(best);
-    }
-    if (inclusions.size() == 1) {
-      return;
-    }
-    // 3rd analyse inclusions requiring a subgroup (parallel with part of sequence)
-    LayoutInterval subGroup = null;
-    LayoutInterval nextTo = null;
-    List<List> separatedLeading = new LinkedList<List>();
-    List<List> separatedTrailing = new LinkedList<List>();
-    for (IncludeDesc iDesc : inclusions) {
-      if (iDesc.parent.isSequential() && iDesc.newSubGroup) {
-        LayoutInterval parSeq =
-            extractParallelSequence(iDesc.parent, addingSpace, false, iDesc.alignment);
-        assert parSeq.isParallel(); // parallel group with part of the original sequence
-        if (subGroup == null) {
-          subGroup = parSeq;
-        } else {
-          LayoutInterval sub = layoutModel.removeInterval(parSeq, 0);
-          layoutModel.addInterval(sub, subGroup, -1);
-        }
-        // extract surroundings of the group in the sequence
-        operations.extract(parSeq, DEFAULT, true, separatedLeading, separatedTrailing);
-        layoutModel.removeInterval(parSeq);
-        layoutModel.removeInterval(iDesc.parent);
-      }
-    }
-    int extractAlign = DEFAULT;
-    if (subGroup != null) {
-      if (separatedLeading.isEmpty()) {
-        extractAlign = TRAILING;
-      }
-      if (separatedTrailing.isEmpty()) {
-        extractAlign = LEADING;
-      }
-    }
-    // 4th collect surroundings of adding interval
-    // (the intervals will go into a side group in step 5, or into subgroup
-    //  of 'subGroup' next to the adding interval if in previous step some
-    //  content was separated into a parallel subgroup of a sequence)
-    LayoutInterval subsubGroup = null;
-    for (Iterator<IncludeDesc> it = inclusions.iterator(); it.hasNext();) {
-      IncludeDesc iDesc = it.next();
-      if (iDesc.parent.isParallel() || !iDesc.newSubGroup) {
-        addToGroup(iDesc, null, false);
-        //                mainEffectiveAlign = getEffectiveAlignment(interval);
-        operations.extract(
-            addingInterval,
-            extractAlign,
-            extractAlign == DEFAULT,
-            separatedLeading,
-            separatedTrailing);
-        LayoutInterval parent = addingInterval.getParent();
-        layoutModel.removeInterval(addingInterval);
-        layoutModel.removeInterval(parent);
-        if (extractAlign != DEFAULT && LayoutInterval.getCount(parent, DEFAULT, true) >= 1) {
-          if (subsubGroup == null) {
-            subsubGroup = new LayoutInterval(PARALLEL);
-            subsubGroup.setGroupAlignment(extractAlign);
-          }
-          operations.addContent(parent, subsubGroup, -1);
-        }
-      }
-      if (iDesc.snappedNextTo != null) {
-        nextTo = iDesc.snappedNextTo;
-      }
-      if (iDesc != best) {
-        it.remove();
-      }
-    }
-    // prepare the common group for merged content
-    int[] borderPos = commonGroup.getCurrentSpace().positions[dimension];
-    int[] neighborPos =
-        (subGroup != null ? subGroup : addingInterval).getCurrentSpace().positions[dimension];
-    LayoutInterval commonSeq;
-    int index;
-    if (commonGroup.getSubIntervalCount() == 0 && commonGroup.getParent() != null) {
-      // the common group got empty - eliminate it to avoid unncessary nesting
-      LayoutInterval parent = commonGroup.getParent();
-      index = layoutModel.removeInterval(commonGroup);
-      if (parent.isSequential()) {
-        commonSeq = parent;
-        commonGroup = parent.getParent();
-      } else { // parallel parent
-        commonSeq = new LayoutInterval(SEQUENTIAL);
-        commonSeq.setAlignment(commonGroup.getAlignment());
-        layoutModel.addInterval(commonSeq, parent, index);
-        commonGroup = parent;
-        index = 0;
-      }
-    } else {
-      commonSeq = new LayoutInterval(SEQUENTIAL);
-      layoutModel.addInterval(commonSeq, commonGroup, -1);
-      index = 0;
-    }
-    if (commonSeq.getSubIntervalCount() == 0) {
-      commonSeq.getCurrentSpace().set(dimension, commonGroup.getCurrentSpace());
-    }
-    updateReplacedOriginalGroup(commonGroup, commonSeq);
-    // 5th create groups of merged content around the adding component
-    LayoutInterval sideGroupLeading = null;
-    LayoutInterval sideGroupTrailing = null;
-    if (!separatedLeading.isEmpty()) {
-      int checkCount = commonSeq.getSubIntervalCount(); // remember ...
-      sideGroupLeading =
-          operations.addGroupContent(separatedLeading, commonSeq, index, dimension, LEADING); //, mainEffectiveAlign
-      index += commonSeq.getSubIntervalCount() - checkCount;
-    }
-    if (!separatedTrailing.isEmpty()) {
-      sideGroupTrailing =
-          operations.addGroupContent(separatedTrailing, commonSeq, index, dimension, TRAILING); //, mainEffectiveAlign
-    }
-    if (sideGroupLeading != null) {
-      int checkCount = commonSeq.getSubIntervalCount(); // remember ...
-      sideGroupLeading.getCurrentSpace().set(dimension, borderPos[LEADING], neighborPos[LEADING]);
-      operations.optimizeGaps(sideGroupLeading, dimension);
-      index += commonSeq.getSubIntervalCount() - checkCount;
-    }
-    if (sideGroupTrailing != null) {
-      sideGroupTrailing.getCurrentSpace().set(
-          dimension,
-          neighborPos[TRAILING],
-          borderPos[TRAILING]);
-      operations.optimizeGaps(sideGroupTrailing, dimension);
-    }
-    // 6th adjust the final inclusion
-    best.parent = commonSeq;
-    best.newSubGroup = false;
-    best.neighbor = null;
-    LayoutInterval separatingGap;
-    int gapIdx = index;
-    if (gapIdx == commonSeq.getSubIntervalCount()) {
-      gapIdx--;
-      separatingGap = commonSeq.getSubInterval(gapIdx);
-    } else {
-      separatingGap = commonSeq.getSubInterval(gapIdx);
-      if (!separatingGap.isEmptySpace()) {
-        gapIdx--;
-        if (gapIdx > 0) {
-          separatingGap = commonSeq.getSubInterval(gapIdx);
-        }
-      }
-    }
-    if (!separatingGap.isEmptySpace()) {
-      separatingGap = null;
-    } else if (subGroup == null) {
-      index = gapIdx;
-      // eliminate the gap if caused by addToGroup called to separate adding
-      // interval's surroundings to side groups; the gap will be created
-      // again when addToGroup is called definitively (for merged inclusions)
-      if (index == 0 && !LayoutInterval.isAlignedAtBorder(commonSeq, LEADING)) {
-        layoutModel.removeInterval(separatingGap);
-        separatingGap = null;
-      } else if (index == commonSeq.getSubIntervalCount() - 1
-          && !LayoutInterval.isAlignedAtBorder(commonSeq, TRAILING)) {
-        layoutModel.removeInterval(separatingGap);
-        separatingGap = null;
-      }
-    }
-    best.snappedNextTo = nextTo;
-    if (nextTo != null) {
-      best.fixedPosition = true;
-    }
-    // 7th resolve subgroup
-    if (subGroup != null) {
-      if (separatingGap != null
-          && (extractAlign == DEFAULT
-              || extractAlign == LEADING && index > gapIdx
-              || extractAlign == TRAILING && index <= gapIdx)) { // subGroup goes next to a separating gap - which is likely superflous
-                                                                                                                                                                    // (the extracted parallel sequence in subGroup has its own gap)
-        layoutModel.removeInterval(separatingGap);
-        if (index >= gapIdx && index > 0) {
-          index--;
-        }
-      }
-      int subIdx = index;
-      if (subsubGroup != null && subsubGroup.getSubIntervalCount() > 0) {
-        LayoutInterval seq = new LayoutInterval(SEQUENTIAL);
-        seq.setAlignment(best.alignment);
-        operations.addContent(subsubGroup, seq, 0);
-        layoutModel.addInterval(seq, subGroup, -1);
-        // [should run optimizeGaps on subsubGroup?]
-        best.parent = seq;
-        index = extractAlign == LEADING ? 0 : seq.getSubIntervalCount();
-      } else {
-        best.newSubGroup = true;
-      }
-      operations.addContent(subGroup, commonSeq, subIdx);
-      updateMovedOriginalNeighbor();
-    }
-    best.index = index;
-  }
+	/**
+	 * @param preserveOriginal
+	 *          if true, original inclusion needs to be preserved, will be merged with new inclusion
+	 *          sequentially; if false, original inclusion is just consulted when choosing best
+	 *          inclusion
+	 */
+	private void mergeParallelInclusions(List<IncludeDesc> inclusions,
+			IncludeDesc original,
+			boolean preserveOriginal) {
+		// 1st step - find representative (best) inclusion
+		IncludeDesc best = null;
+		boolean bestOriginal = false;
+		for (IncludeDesc iDesc : inclusions) {
+			if (original == null || !preserveOriginal || canCombine(iDesc, original)) {
+				if (best != null) {
+					boolean originalCompatible =
+							original != null && !preserveOriginal && iDesc.parent == original.parent;
+					if (!bestOriginal && originalCompatible) {
+						best = iDesc;
+						bestOriginal = true;
+					} else if (bestOriginal == originalCompatible) {
+						LayoutInterval group1 =
+								best.parent.isSequential() ? best.parent.getParent() : best.parent;
+						LayoutInterval group2 =
+								iDesc.parent.isSequential() ? iDesc.parent.getParent() : iDesc.parent;
+						if (group1.isParentOf(group2)) {
+							best = iDesc; // deeper is better
+						} else if (!group2.isParentOf(group1) && iDesc.distance < best.distance) {
+							best = iDesc;
+						}
+					}
+				} else {
+					best = iDesc;
+					bestOriginal = original != null && !preserveOriginal && iDesc.parent == original.parent;
+				}
+			}
+		}
+		if (best == null) { // nothing compatible with original position
+			assert preserveOriginal;
+			inclusions.clear();
+			inclusions.add(original);
+			return;
+		}
+		LayoutInterval commonGroup = best.parent.isSequential() ? best.parent.getParent() : best.parent;
+		// 2nd remove incompatible inclusions, move compatible ones to same level
+		for (Iterator<IncludeDesc> it = inclusions.iterator(); it.hasNext();) {
+			IncludeDesc iDesc = it.next();
+			if (iDesc != best) {
+				if (!compatibleInclusions(iDesc, best, dimension)) {
+					it.remove();
+				} else {
+					LayoutInterval group =
+							iDesc.parent.isSequential() ? iDesc.parent.getParent() : iDesc.parent;
+					if (group.isParentOf(commonGroup)) {
+						LayoutInterval neighbor = iDesc.parent.isSequential() ? iDesc.parent : iDesc.neighbor;
+						layoutModel.removeInterval(neighbor);
+						// [what about the alignment?]
+						layoutModel.addInterval(neighbor, commonGroup, -1);
+						if (group.getSubIntervalCount() == 1) {
+							LayoutInterval parent = group.getParent();
+							LayoutInterval last = layoutModel.removeInterval(group, 0);
+							operations.addContent(last, parent, layoutModel.removeInterval(group));
+							if (commonGroup == last && commonGroup.getParent() == null) {
+								commonGroup = parent;
+							}
+							updateReplacedOriginalGroup(commonGroup, null);
+						}
+						if (iDesc.parent == group) {
+							iDesc.parent = commonGroup;
+						}
+					}
+				}
+			}
+		}
+		if (best.parent.isParallel()
+				&& best.snappedParallel != null
+				&& best.ortDistance != 0
+				&& inclusions.size() > 1) { // forced inclusion by addAlignedInclusion
+			inclusions.remove(best);
+		}
+		if (inclusions.size() == 1) {
+			return;
+		}
+		// 3rd analyse inclusions requiring a subgroup (parallel with part of sequence)
+		LayoutInterval subGroup = null;
+		LayoutInterval nextTo = null;
+		List<List> separatedLeading = new LinkedList<List>();
+		List<List> separatedTrailing = new LinkedList<List>();
+		for (IncludeDesc iDesc : inclusions) {
+			if (iDesc.parent.isSequential() && iDesc.newSubGroup) {
+				LayoutInterval parSeq =
+						extractParallelSequence(iDesc.parent, addingSpace, false, iDesc.alignment);
+				assert parSeq.isParallel(); // parallel group with part of the original sequence
+				if (subGroup == null) {
+					subGroup = parSeq;
+				} else {
+					LayoutInterval sub = layoutModel.removeInterval(parSeq, 0);
+					layoutModel.addInterval(sub, subGroup, -1);
+				}
+				// extract surroundings of the group in the sequence
+				operations.extract(parSeq, DEFAULT, true, separatedLeading, separatedTrailing);
+				layoutModel.removeInterval(parSeq);
+				layoutModel.removeInterval(iDesc.parent);
+			}
+		}
+		int extractAlign = DEFAULT;
+		if (subGroup != null) {
+			if (separatedLeading.isEmpty()) {
+				extractAlign = TRAILING;
+			}
+			if (separatedTrailing.isEmpty()) {
+				extractAlign = LEADING;
+			}
+		}
+		// 4th collect surroundings of adding interval
+		// (the intervals will go into a side group in step 5, or into subgroup
+		//  of 'subGroup' next to the adding interval if in previous step some
+		//  content was separated into a parallel subgroup of a sequence)
+		LayoutInterval subsubGroup = null;
+		for (Iterator<IncludeDesc> it = inclusions.iterator(); it.hasNext();) {
+			IncludeDesc iDesc = it.next();
+			if (iDesc.parent.isParallel() || !iDesc.newSubGroup) {
+				addToGroup(iDesc, null, false);
+				//                mainEffectiveAlign = getEffectiveAlignment(interval);
+				operations.extract(
+						addingInterval,
+						extractAlign,
+						extractAlign == DEFAULT,
+						separatedLeading,
+						separatedTrailing);
+				LayoutInterval parent = addingInterval.getParent();
+				layoutModel.removeInterval(addingInterval);
+				layoutModel.removeInterval(parent);
+				if (extractAlign != DEFAULT && LayoutInterval.getCount(parent, DEFAULT, true) >= 1) {
+					if (subsubGroup == null) {
+						subsubGroup = new LayoutInterval(PARALLEL);
+						subsubGroup.setGroupAlignment(extractAlign);
+					}
+					operations.addContent(parent, subsubGroup, -1);
+				}
+			}
+			if (iDesc.snappedNextTo != null) {
+				nextTo = iDesc.snappedNextTo;
+			}
+			if (iDesc != best) {
+				it.remove();
+			}
+		}
+		// prepare the common group for merged content
+		int[] borderPos = commonGroup.getCurrentSpace().positions[dimension];
+		int[] neighborPos =
+				(subGroup != null ? subGroup : addingInterval).getCurrentSpace().positions[dimension];
+		LayoutInterval commonSeq;
+		int index;
+		if (commonGroup.getSubIntervalCount() == 0 && commonGroup.getParent() != null) {
+			// the common group got empty - eliminate it to avoid unncessary nesting
+			LayoutInterval parent = commonGroup.getParent();
+			index = layoutModel.removeInterval(commonGroup);
+			if (parent.isSequential()) {
+				commonSeq = parent;
+				commonGroup = parent.getParent();
+			} else { // parallel parent
+				commonSeq = new LayoutInterval(SEQUENTIAL);
+				commonSeq.setAlignment(commonGroup.getAlignment());
+				layoutModel.addInterval(commonSeq, parent, index);
+				commonGroup = parent;
+				index = 0;
+			}
+		} else {
+			commonSeq = new LayoutInterval(SEQUENTIAL);
+			layoutModel.addInterval(commonSeq, commonGroup, -1);
+			index = 0;
+		}
+		if (commonSeq.getSubIntervalCount() == 0) {
+			commonSeq.getCurrentSpace().set(dimension, commonGroup.getCurrentSpace());
+		}
+		updateReplacedOriginalGroup(commonGroup, commonSeq);
+		// 5th create groups of merged content around the adding component
+		LayoutInterval sideGroupLeading = null;
+		LayoutInterval sideGroupTrailing = null;
+		if (!separatedLeading.isEmpty()) {
+			int checkCount = commonSeq.getSubIntervalCount(); // remember ...
+			sideGroupLeading =
+					operations.addGroupContent(separatedLeading, commonSeq, index, dimension, LEADING); //, mainEffectiveAlign
+			index += commonSeq.getSubIntervalCount() - checkCount;
+		}
+		if (!separatedTrailing.isEmpty()) {
+			sideGroupTrailing =
+					operations.addGroupContent(separatedTrailing, commonSeq, index, dimension, TRAILING); //, mainEffectiveAlign
+		}
+		if (sideGroupLeading != null) {
+			int checkCount = commonSeq.getSubIntervalCount(); // remember ...
+			sideGroupLeading.getCurrentSpace().set(dimension, borderPos[LEADING], neighborPos[LEADING]);
+			operations.optimizeGaps(sideGroupLeading, dimension);
+			index += commonSeq.getSubIntervalCount() - checkCount;
+		}
+		if (sideGroupTrailing != null) {
+			sideGroupTrailing.getCurrentSpace().set(
+					dimension,
+					neighborPos[TRAILING],
+					borderPos[TRAILING]);
+			operations.optimizeGaps(sideGroupTrailing, dimension);
+		}
+		// 6th adjust the final inclusion
+		best.parent = commonSeq;
+		best.newSubGroup = false;
+		best.neighbor = null;
+		LayoutInterval separatingGap;
+		int gapIdx = index;
+		if (gapIdx == commonSeq.getSubIntervalCount()) {
+			gapIdx--;
+			separatingGap = commonSeq.getSubInterval(gapIdx);
+		} else {
+			separatingGap = commonSeq.getSubInterval(gapIdx);
+			if (!separatingGap.isEmptySpace()) {
+				gapIdx--;
+				if (gapIdx > 0) {
+					separatingGap = commonSeq.getSubInterval(gapIdx);
+				}
+			}
+		}
+		if (!separatingGap.isEmptySpace()) {
+			separatingGap = null;
+		} else if (subGroup == null) {
+			index = gapIdx;
+			// eliminate the gap if caused by addToGroup called to separate adding
+			// interval's surroundings to side groups; the gap will be created
+			// again when addToGroup is called definitively (for merged inclusions)
+			if (index == 0 && !LayoutInterval.isAlignedAtBorder(commonSeq, LEADING)) {
+				layoutModel.removeInterval(separatingGap);
+				separatingGap = null;
+			} else if (index == commonSeq.getSubIntervalCount() - 1
+					&& !LayoutInterval.isAlignedAtBorder(commonSeq, TRAILING)) {
+				layoutModel.removeInterval(separatingGap);
+				separatingGap = null;
+			}
+		}
+		best.snappedNextTo = nextTo;
+		if (nextTo != null) {
+			best.fixedPosition = true;
+		}
+		// 7th resolve subgroup
+		if (subGroup != null) {
+			if (separatingGap != null
+					&& (extractAlign == DEFAULT
+					|| extractAlign == LEADING && index > gapIdx
+					|| extractAlign == TRAILING && index <= gapIdx)) { // subGroup goes next to a separating gap - which is likely superflous
+				// (the extracted parallel sequence in subGroup has its own gap)
+				layoutModel.removeInterval(separatingGap);
+				if (index >= gapIdx && index > 0) {
+					index--;
+				}
+			}
+			int subIdx = index;
+			if (subsubGroup != null && subsubGroup.getSubIntervalCount() > 0) {
+				LayoutInterval seq = new LayoutInterval(SEQUENTIAL);
+				seq.setAlignment(best.alignment);
+				operations.addContent(subsubGroup, seq, 0);
+				layoutModel.addInterval(seq, subGroup, -1);
+				// [should run optimizeGaps on subsubGroup?]
+				best.parent = seq;
+				index = extractAlign == LEADING ? 0 : seq.getSubIntervalCount();
+			} else {
+				best.newSubGroup = true;
+			}
+			operations.addContent(subGroup, commonSeq, subIdx);
+			updateMovedOriginalNeighbor();
+		}
+		best.index = index;
+	}
 
-  private static boolean compatibleInclusions(IncludeDesc iDesc1,
-      IncludeDesc iDesc2,
-      int dimension) {
-    LayoutInterval group1 =
-        iDesc1.parent.isSequential() ? iDesc1.parent.getParent() : iDesc1.parent;
-    LayoutInterval group2 =
-        iDesc2.parent.isSequential() ? iDesc2.parent.getParent() : iDesc2.parent;
-    if (group1 == group2) {
-      return true;
-    }
-    if (group1.isParentOf(group2)) {
-      // swap so group2 is parent of group1 (iDesc1 the deeper inclusion)
-      LayoutInterval temp = group1;
-      group1 = group2;
-      group2 = temp;
-      IncludeDesc itemp = iDesc1;
-      iDesc1 = iDesc2;
-      iDesc2 = itemp;
-    } else if (!group2.isParentOf(group1)) {
-      return false;
-    }
-    LayoutInterval neighbor; // to be moved into the deeper group (in parallel)
-    if (iDesc2.parent.isSequential()) {
-      if (iDesc2.parent.isParentOf(iDesc1.parent)) {
-        // in the same sequence, can't combine in parallel
-        return false;
-      }
-      neighbor = iDesc2.parent;
-    } else {
-      neighbor = iDesc2.neighbor;
-    }
-    if (neighbor == null) {
-      return false;
-    }
-    LayoutRegion spaceToHold = neighbor.getCurrentSpace();
-    LayoutRegion spaceAvailable = group1.getCurrentSpace();
-    return LayoutRegion.pointInside(spaceToHold, LEADING, spaceAvailable, dimension)
-        && LayoutRegion.pointInside(spaceToHold, TRAILING, spaceAvailable, dimension);
-  }
+	private static boolean compatibleInclusions(IncludeDesc iDesc1,
+			IncludeDesc iDesc2,
+			int dimension) {
+		LayoutInterval group1 =
+				iDesc1.parent.isSequential() ? iDesc1.parent.getParent() : iDesc1.parent;
+		LayoutInterval group2 =
+				iDesc2.parent.isSequential() ? iDesc2.parent.getParent() : iDesc2.parent;
+		if (group1 == group2) {
+			return true;
+		}
+		if (group1.isParentOf(group2)) {
+			// swap so group2 is parent of group1 (iDesc1 the deeper inclusion)
+			LayoutInterval temp = group1;
+			group1 = group2;
+			group2 = temp;
+			IncludeDesc itemp = iDesc1;
+			iDesc1 = iDesc2;
+			iDesc2 = itemp;
+		} else if (!group2.isParentOf(group1)) {
+			return false;
+		}
+		LayoutInterval neighbor; // to be moved into the deeper group (in parallel)
+		if (iDesc2.parent.isSequential()) {
+			if (iDesc2.parent.isParentOf(iDesc1.parent)) {
+				// in the same sequence, can't combine in parallel
+				return false;
+			}
+			neighbor = iDesc2.parent;
+		} else {
+			neighbor = iDesc2.neighbor;
+		}
+		if (neighbor == null) {
+			return false;
+		}
+		LayoutRegion spaceToHold = neighbor.getCurrentSpace();
+		LayoutRegion spaceAvailable = group1.getCurrentSpace();
+		return LayoutRegion.pointInside(spaceToHold, LEADING, spaceAvailable, dimension)
+				&& LayoutRegion.pointInside(spaceToHold, TRAILING, spaceAvailable, dimension);
+	}
 
-  private void updateReplacedOriginalGroup(LayoutInterval newGroup, LayoutInterval newSeq) {
-    updateReplacedOriginalGroup(originalPositions1[dimension], newGroup, newSeq);
-    updateReplacedOriginalGroup(originalPositions2[dimension], newGroup, newSeq);
-  }
+	private void updateReplacedOriginalGroup(LayoutInterval newGroup, LayoutInterval newSeq) {
+		updateReplacedOriginalGroup(originalPositions1[dimension], newGroup, newSeq);
+		updateReplacedOriginalGroup(originalPositions2[dimension], newGroup, newSeq);
+	}
 
-  private static void updateReplacedOriginalGroup(IncludeDesc iDesc,
-      LayoutInterval newGroup,
-      LayoutInterval newSeq) {
-    if (iDesc != null && LayoutInterval.getRoot(newGroup) != LayoutInterval.getRoot(iDesc.parent)) {
-      if (iDesc.parent.isParallel()) {
-        iDesc.parent = newGroup;
-      } else if (newSeq != null) {
-        iDesc.parent = newSeq;
-      }
-    }
-  }
+	private static void updateReplacedOriginalGroup(IncludeDesc iDesc,
+			LayoutInterval newGroup,
+			LayoutInterval newSeq) {
+		if (iDesc != null && LayoutInterval.getRoot(newGroup) != LayoutInterval.getRoot(iDesc.parent)) {
+			if (iDesc.parent.isParallel()) {
+				iDesc.parent = newGroup;
+			} else if (newSeq != null) {
+				iDesc.parent = newSeq;
+			}
+		}
+	}
 
-  private void updateMovedOriginalNeighbor() {
-    updateMovedOriginalNeighbor(originalPositions1[dimension]);
-    updateMovedOriginalNeighbor(originalPositions2[dimension]);
-  }
+	private void updateMovedOriginalNeighbor() {
+		updateMovedOriginalNeighbor(originalPositions1[dimension]);
+		updateMovedOriginalNeighbor(originalPositions2[dimension]);
+	}
 
-  private static void updateMovedOriginalNeighbor(IncludeDesc iDesc) {
-    if (iDesc != null && iDesc.neighbor != null) {
-      iDesc.parent = LayoutInterval.getFirstParent(iDesc.neighbor, PARALLEL);
-      correctNeighborInSequence(iDesc);
-    }
-  }
+	private static void updateMovedOriginalNeighbor(IncludeDesc iDesc) {
+		if (iDesc != null && iDesc.neighbor != null) {
+			iDesc.parent = LayoutInterval.getFirstParent(iDesc.neighbor, PARALLEL);
+			correctNeighborInSequence(iDesc);
+		}
+	}
 
-  private boolean mergeSequentialInclusions(IncludeDesc iDesc1, IncludeDesc iDesc2) {
-    if (iDesc2 == null || !canCombine(iDesc1, iDesc2)) {
-      return false;
-    }
-    assert (iDesc1.alignment == LEADING || iDesc1.alignment == TRAILING)
-        && (iDesc2.alignment == LEADING || iDesc2.alignment == TRAILING)
-        && iDesc1.alignment == (iDesc2.alignment ^ 1);
-    if (iDesc1.parent == iDesc2.parent) {
-      return true;
-    }
-    LayoutInterval commonGroup;
-    boolean nextTo;
-    if (iDesc1.parent.isParentOf(iDesc2.parent)) {
-      commonGroup = iDesc1.parent;
-      nextTo =
-          iDesc1.neighbor != null || iDesc2.snappedNextTo != null || iDesc2.parent.isSequential();
-    } else if (iDesc2.parent.isParentOf(iDesc1.parent)) {
-      commonGroup = iDesc2.parent;
-      nextTo =
-          iDesc2.neighbor != null || iDesc1.snappedNextTo != null || iDesc1.parent.isSequential();
-    } else {
-      commonGroup = LayoutInterval.getFirstParent(iDesc1.parent, SEQUENTIAL);
-      nextTo = false;
-    }
-    if (commonGroup.isSequential() || nextTo) {
-      // inclusions in common sequence or the upper inclusion has the lower as neighbor
-      if (iDesc1.alignment == TRAILING) {
-        IncludeDesc temp = iDesc1;
-        iDesc1 = iDesc2;
-        iDesc2 = temp;
-      } // so iDesc1 is leading and iDesc2 trailing
-      int startIndex = 0;
-      LayoutInterval ext1 = null;
-      boolean startGap = false;
-      int endIndex = 0;
-      LayoutInterval ext2 = null;
-      boolean endGap = false;
-      if (commonGroup.isSequential()) {
-        if (commonGroup.isParentOf(iDesc1.parent)) {
-          ext1 = iDesc1.parent.isSequential() ? iDesc1.parent : iDesc1.neighbor;
-          if (ext1 != null) {
-            while (ext1.getParent().getParent() != commonGroup) {
-              ext1 = ext1.getParent();
-            }
-            startIndex = commonGroup.indexOf(ext1.getParent());
-          } else { // nothing to extract, just find out the index
-            LayoutInterval inCommon = iDesc1.parent;
-            while (inCommon.getParent() != commonGroup) {
-              inCommon = inCommon.getParent();
-            }
-            startIndex = commonGroup.indexOf(inCommon);
-          }
-        } else {
-          startIndex = iDesc1.index;
-          if (startIndex == commonGroup.getSubIntervalCount()) {
-            startIndex--;
-          }
-          startGap = commonGroup.getSubInterval(startIndex).isEmptySpace();
-        }
-        if (commonGroup.isParentOf(iDesc2.parent)) {
-          ext2 = iDesc2.parent.isSequential() ? iDesc2.parent : iDesc2.neighbor;
-          if (ext2 != null) {
-            while (ext2.getParent().getParent() != commonGroup) {
-              ext2 = ext2.getParent();
-            }
-            endIndex = commonGroup.indexOf(ext2.getParent());
-          } else {
-            LayoutInterval inCommon = iDesc2.parent;
-            while (inCommon.getParent() != commonGroup) {
-              inCommon = inCommon.getParent();
-            }
-            endIndex = commonGroup.indexOf(inCommon);
-          }
-        } else {
-          endIndex = iDesc2.index;
-          if (iDesc2.snappedParallel == null || !commonGroup.isParentOf(iDesc2.snappedParallel)) {
-            endGap = commonGroup.getSubInterval(--endIndex).isEmptySpace();
-          }
-        }
-      }
-      if ((endIndex > startIndex + 1 || endIndex == startIndex + 1 && !startGap && !endGap)
-          && (ext1 != null && !iDesc1.newSubGroup || ext2 != null && !iDesc2.newSubGroup)) { // there is a significant part of the common sequence to be parallelized
-        LayoutInterval parGroup;
-        if (startIndex == 0 && endIndex == commonGroup.getSubIntervalCount() - 1) {
-          // parallel with whole sequence
-          parGroup = commonGroup.getParent();
-        } else { // separate part of the original sequence
-          parGroup = new LayoutInterval(PARALLEL);
-          LayoutInterval parSeq = new LayoutInterval(SEQUENTIAL);
-          layoutModel.addInterval(parSeq, parGroup, 0);
-          parGroup.getCurrentSpace().set(
-              dimension,
-              LayoutUtils.getVisualPosition(
-                  commonGroup.getSubInterval(startIndex),
-                  dimension,
-                  LEADING),
-              LayoutUtils.getVisualPosition(
-                  commonGroup.getSubInterval(endIndex),
-                  dimension,
-                  TRAILING));
-          int i = startIndex;
-          while (i <= endIndex) {
-            LayoutInterval li = layoutModel.removeInterval(commonGroup, i);
-            endIndex--;
-            layoutModel.addInterval(li, parSeq, -1);
-          }
-          layoutModel.addInterval(parGroup, commonGroup, startIndex);
-        }
-        LayoutInterval extSeq = new LayoutInterval(SEQUENTIAL); // sequence for the extracted inclusion targets
-        layoutModel.addInterval(extSeq, parGroup, -1);
-        if (ext1 != null) {
-          LayoutInterval parent = ext1.getParent();
-          layoutModel.removeInterval(ext1);
-          if (parent.getSubIntervalCount() == 1) {
-            LayoutInterval last = layoutModel.removeInterval(parent, 0);
-            operations.addContent(last, parent.getParent(), layoutModel.removeInterval(parent));
-          }
-          operations.addContent(ext1, extSeq, 0);
-          if (ext2 != null) {
-            LayoutInterval gap = new LayoutInterval(SINGLE);
-            int size = LayoutRegion.distance(
-                ext1.getCurrentSpace(),
-                ext2.getCurrentSpace(),
-                dimension,
-                LEADING,
-                TRAILING);
-            gap.setSize(size);
-            layoutModel.addInterval(gap, extSeq, -1);
-            iDesc1.index = iDesc2.index = extSeq.indexOf(gap);
-          } else {
-            iDesc2.index = iDesc1.index;
-          }
-        } else {
-          iDesc1.index = iDesc2.index;
-        }
-        if (ext2 != null) {
-          LayoutInterval parent = ext2.getParent();
-          layoutModel.removeInterval(ext2);
-          if (parent.getSubIntervalCount() == 1) {
-            LayoutInterval last = layoutModel.removeInterval(parent, 0);
-            operations.addContent(last, parent.getParent(), layoutModel.removeInterval(parent));
-          }
-          operations.addContent(ext2, extSeq, -1);
-        }
-        iDesc1.parent = iDesc2.parent = extSeq;
-        iDesc1.newSubGroup = iDesc2.newSubGroup = false;
-        iDesc1.neighbor = iDesc2.neighbor = null;
-      } else { // end position, stay in subgroup
-        if (iDesc2.parent.isParentOf(iDesc1.parent)) {
-          iDesc2.parent = iDesc1.parent;
-          iDesc2.index = iDesc1.index;
-          iDesc2.newSubGroup = iDesc1.newSubGroup;
-          iDesc2.neighbor = iDesc1.neighbor;
-          if (endGap) {
-            iDesc2.fixedPosition = false;
-          }
-        } else if (iDesc1.parent.isParentOf(iDesc2.parent)) {
-          iDesc1.parent = iDesc2.parent;
-          iDesc1.index = iDesc2.index;
-          iDesc1.newSubGroup = iDesc2.newSubGroup;
-          iDesc1.neighbor = iDesc2.neighbor;
-          if (startGap) {
-            iDesc1.fixedPosition = false;
-          }
-        }
-      }
-    } else { // common group is parallel - there is nothing in sequence, so nothing to extract
-      assert iDesc1.parent.isParallel()
-          && iDesc2.parent.isParallel()
-          && (commonGroup == iDesc1.parent || commonGroup == iDesc2.parent)
-          && iDesc1.neighbor == null
-          && iDesc2.neighbor == null;
-      if (iDesc2.snappedNextTo == null && iDesc2.snappedParallel == null
-          || iDesc2.snappedParallel != null
-              && canAlignWith(iDesc2.snappedParallel, iDesc1.parent, iDesc2.alignment)) { // iDesc2 can adapt to iDesc1
-        iDesc2.parent = iDesc1.parent;
-        return true;
-      }
-      if (iDesc2.parent == commonGroup) {
-        IncludeDesc temp = iDesc1;
-        iDesc1 = iDesc2;
-        iDesc2 = temp;
-      } // so iDesc1 is super-group and iDesc2 subgroup
-      assert iDesc2.snappedNextTo == null;
-      if (iDesc2.snappedParallel == iDesc2.parent) {
-        iDesc2.parent = LayoutInterval.getFirstParent(iDesc2.parent, PARALLEL);
-        if (iDesc2.parent == iDesc1.parent) {
-          return true;
-        }
-      }
-      if (iDesc2.snappedParallel == null
-          || canAlignWith(iDesc2.snappedParallel, iDesc1.parent, iDesc2.alignment)) {
-        // subgroup is either not snapped at all, or can align also in parent group
-        iDesc2.parent = iDesc1.parent;
-        return true;
-      }
-      if (LayoutInterval.isAlignedAtBorder(iDesc2.parent, iDesc1.parent, iDesc1.alignment)) {
-        iDesc1.parent = iDesc2.parent;
-        return true; // subgroup is aligned to parent group edge
-      }
-      LayoutInterval seq = iDesc2.parent.getParent();
-      if (seq.isSequential() && seq.getParent() == iDesc1.parent) {
-        int index = seq.indexOf(iDesc2.parent) + (iDesc1.alignment == LEADING ? -1 : 1);
-        LayoutInterval gap =
-            index == 0 || index == seq.getSubIntervalCount() - 1 ? seq.getSubInterval(index) : null;
-        if (gap != null
-            && LayoutInterval.isFixedDefaultPadding(gap)
-            && iDesc1.snappedNextTo == iDesc1.parent
-            && LayoutInterval.wantResize(seq)) { // subgroup is at preferred gap from parent - corresponds to parent's snappedNextTo
-          iDesc1.parent = iDesc2.parent;
-          iDesc1.snappedNextTo = null;
-          iDesc1.snappedParallel = iDesc2.parent;
-          return true;
-        }
-        if (gap != null && gap.isEmptySpace() && iDesc1.snappedParallel == iDesc1.parent) {
-          // need to make the subgroup aligned to parent group
-          int gapSize = LayoutInterval.getIntervalCurrentSize(gap, dimension);
-          copyGapInsideGroup(gap, gapSize, iDesc2.parent, iDesc1.alignment);
-          layoutModel.removeInterval(gap);
-          iDesc1.parent = iDesc2.parent;
-          return true;
-        }
-      }
-      iDesc2.parent = iDesc1.parent; // prefer super-group otherwise
-    }
-    return true;
-  }
+	private boolean mergeSequentialInclusions(IncludeDesc iDesc1, IncludeDesc iDesc2) {
+		if (iDesc2 == null || !canCombine(iDesc1, iDesc2)) {
+			return false;
+		}
+		assert (iDesc1.alignment == LEADING || iDesc1.alignment == TRAILING)
+		&& (iDesc2.alignment == LEADING || iDesc2.alignment == TRAILING)
+		&& iDesc1.alignment == (iDesc2.alignment ^ 1);
+		if (iDesc1.parent == iDesc2.parent) {
+			return true;
+		}
+		LayoutInterval commonGroup;
+		boolean nextTo;
+		if (iDesc1.parent.isParentOf(iDesc2.parent)) {
+			commonGroup = iDesc1.parent;
+			nextTo =
+					iDesc1.neighbor != null || iDesc2.snappedNextTo != null || iDesc2.parent.isSequential();
+		} else if (iDesc2.parent.isParentOf(iDesc1.parent)) {
+			commonGroup = iDesc2.parent;
+			nextTo =
+					iDesc2.neighbor != null || iDesc1.snappedNextTo != null || iDesc1.parent.isSequential();
+		} else {
+			commonGroup = LayoutInterval.getFirstParent(iDesc1.parent, SEQUENTIAL);
+			nextTo = false;
+		}
+		if (commonGroup.isSequential() || nextTo) {
+			// inclusions in common sequence or the upper inclusion has the lower as neighbor
+			if (iDesc1.alignment == TRAILING) {
+				IncludeDesc temp = iDesc1;
+				iDesc1 = iDesc2;
+				iDesc2 = temp;
+			} // so iDesc1 is leading and iDesc2 trailing
+			int startIndex = 0;
+			LayoutInterval ext1 = null;
+			boolean startGap = false;
+			int endIndex = 0;
+			LayoutInterval ext2 = null;
+			boolean endGap = false;
+			if (commonGroup.isSequential()) {
+				if (commonGroup.isParentOf(iDesc1.parent)) {
+					ext1 = iDesc1.parent.isSequential() ? iDesc1.parent : iDesc1.neighbor;
+					if (ext1 != null) {
+						while (ext1.getParent().getParent() != commonGroup) {
+							ext1 = ext1.getParent();
+						}
+						startIndex = commonGroup.indexOf(ext1.getParent());
+					} else { // nothing to extract, just find out the index
+						LayoutInterval inCommon = iDesc1.parent;
+						while (inCommon.getParent() != commonGroup) {
+							inCommon = inCommon.getParent();
+						}
+						startIndex = commonGroup.indexOf(inCommon);
+					}
+				} else {
+					startIndex = iDesc1.index;
+					if (startIndex == commonGroup.getSubIntervalCount()) {
+						startIndex--;
+					}
+					startGap = commonGroup.getSubInterval(startIndex).isEmptySpace();
+				}
+				if (commonGroup.isParentOf(iDesc2.parent)) {
+					ext2 = iDesc2.parent.isSequential() ? iDesc2.parent : iDesc2.neighbor;
+					if (ext2 != null) {
+						while (ext2.getParent().getParent() != commonGroup) {
+							ext2 = ext2.getParent();
+						}
+						endIndex = commonGroup.indexOf(ext2.getParent());
+					} else {
+						LayoutInterval inCommon = iDesc2.parent;
+						while (inCommon.getParent() != commonGroup) {
+							inCommon = inCommon.getParent();
+						}
+						endIndex = commonGroup.indexOf(inCommon);
+					}
+				} else {
+					endIndex = iDesc2.index;
+					if (iDesc2.snappedParallel == null || !commonGroup.isParentOf(iDesc2.snappedParallel)) {
+						endGap = commonGroup.getSubInterval(--endIndex).isEmptySpace();
+					}
+				}
+			}
+			if ((endIndex > startIndex + 1 || endIndex == startIndex + 1 && !startGap && !endGap)
+					&& (ext1 != null && !iDesc1.newSubGroup || ext2 != null && !iDesc2.newSubGroup)) { // there is a significant part of the common sequence to be parallelized
+				LayoutInterval parGroup;
+				if (startIndex == 0 && endIndex == commonGroup.getSubIntervalCount() - 1) {
+					// parallel with whole sequence
+					parGroup = commonGroup.getParent();
+				} else { // separate part of the original sequence
+					parGroup = new LayoutInterval(PARALLEL);
+					LayoutInterval parSeq = new LayoutInterval(SEQUENTIAL);
+					layoutModel.addInterval(parSeq, parGroup, 0);
+					parGroup.getCurrentSpace().set(
+							dimension,
+							LayoutUtils.getVisualPosition(
+									commonGroup.getSubInterval(startIndex),
+									dimension,
+									LEADING),
+							LayoutUtils.getVisualPosition(
+									commonGroup.getSubInterval(endIndex),
+									dimension,
+									TRAILING));
+					int i = startIndex;
+					while (i <= endIndex) {
+						LayoutInterval li = layoutModel.removeInterval(commonGroup, i);
+						endIndex--;
+						layoutModel.addInterval(li, parSeq, -1);
+					}
+					layoutModel.addInterval(parGroup, commonGroup, startIndex);
+				}
+				LayoutInterval extSeq = new LayoutInterval(SEQUENTIAL); // sequence for the extracted inclusion targets
+				layoutModel.addInterval(extSeq, parGroup, -1);
+				if (ext1 != null) {
+					LayoutInterval parent = ext1.getParent();
+					layoutModel.removeInterval(ext1);
+					if (parent.getSubIntervalCount() == 1) {
+						LayoutInterval last = layoutModel.removeInterval(parent, 0);
+						operations.addContent(last, parent.getParent(), layoutModel.removeInterval(parent));
+					}
+					operations.addContent(ext1, extSeq, 0);
+					if (ext2 != null) {
+						LayoutInterval gap = new LayoutInterval(SINGLE);
+						int size = LayoutRegion.distance(
+								ext1.getCurrentSpace(),
+								ext2.getCurrentSpace(),
+								dimension,
+								LEADING,
+								TRAILING);
+						gap.setSize(size);
+						layoutModel.addInterval(gap, extSeq, -1);
+						iDesc1.index = iDesc2.index = extSeq.indexOf(gap);
+					} else {
+						iDesc2.index = iDesc1.index;
+					}
+				} else {
+					iDesc1.index = iDesc2.index;
+				}
+				if (ext2 != null) {
+					LayoutInterval parent = ext2.getParent();
+					layoutModel.removeInterval(ext2);
+					if (parent.getSubIntervalCount() == 1) {
+						LayoutInterval last = layoutModel.removeInterval(parent, 0);
+						operations.addContent(last, parent.getParent(), layoutModel.removeInterval(parent));
+					}
+					operations.addContent(ext2, extSeq, -1);
+				}
+				iDesc1.parent = iDesc2.parent = extSeq;
+				iDesc1.newSubGroup = iDesc2.newSubGroup = false;
+				iDesc1.neighbor = iDesc2.neighbor = null;
+			} else { // end position, stay in subgroup
+				if (iDesc2.parent.isParentOf(iDesc1.parent)) {
+					iDesc2.parent = iDesc1.parent;
+					iDesc2.index = iDesc1.index;
+					iDesc2.newSubGroup = iDesc1.newSubGroup;
+					iDesc2.neighbor = iDesc1.neighbor;
+					if (endGap) {
+						iDesc2.fixedPosition = false;
+					}
+				} else if (iDesc1.parent.isParentOf(iDesc2.parent)) {
+					iDesc1.parent = iDesc2.parent;
+					iDesc1.index = iDesc2.index;
+					iDesc1.newSubGroup = iDesc2.newSubGroup;
+					iDesc1.neighbor = iDesc2.neighbor;
+					if (startGap) {
+						iDesc1.fixedPosition = false;
+					}
+				}
+			}
+		} else { // common group is parallel - there is nothing in sequence, so nothing to extract
+			assert iDesc1.parent.isParallel()
+			&& iDesc2.parent.isParallel()
+			&& (commonGroup == iDesc1.parent || commonGroup == iDesc2.parent)
+			&& iDesc1.neighbor == null
+			&& iDesc2.neighbor == null;
+			if (iDesc2.snappedNextTo == null && iDesc2.snappedParallel == null
+					|| iDesc2.snappedParallel != null
+					&& canAlignWith(iDesc2.snappedParallel, iDesc1.parent, iDesc2.alignment)) { // iDesc2 can adapt to iDesc1
+				iDesc2.parent = iDesc1.parent;
+				return true;
+			}
+			if (iDesc2.parent == commonGroup) {
+				IncludeDesc temp = iDesc1;
+				iDesc1 = iDesc2;
+				iDesc2 = temp;
+			} // so iDesc1 is super-group and iDesc2 subgroup
+			assert iDesc2.snappedNextTo == null;
+			if (iDesc2.snappedParallel == iDesc2.parent) {
+				iDesc2.parent = LayoutInterval.getFirstParent(iDesc2.parent, PARALLEL);
+				if (iDesc2.parent == iDesc1.parent) {
+					return true;
+				}
+			}
+			if (iDesc2.snappedParallel == null
+					|| canAlignWith(iDesc2.snappedParallel, iDesc1.parent, iDesc2.alignment)) {
+				// subgroup is either not snapped at all, or can align also in parent group
+				iDesc2.parent = iDesc1.parent;
+				return true;
+			}
+			if (LayoutInterval.isAlignedAtBorder(iDesc2.parent, iDesc1.parent, iDesc1.alignment)) {
+				iDesc1.parent = iDesc2.parent;
+				return true; // subgroup is aligned to parent group edge
+			}
+			LayoutInterval seq = iDesc2.parent.getParent();
+			if (seq.isSequential() && seq.getParent() == iDesc1.parent) {
+				int index = seq.indexOf(iDesc2.parent) + (iDesc1.alignment == LEADING ? -1 : 1);
+				LayoutInterval gap =
+						index == 0 || index == seq.getSubIntervalCount() - 1 ? seq.getSubInterval(index) : null;
+				if (gap != null
+						&& LayoutInterval.isFixedDefaultPadding(gap)
+						&& iDesc1.snappedNextTo == iDesc1.parent
+						&& LayoutInterval.wantResize(seq)) { // subgroup is at preferred gap from parent - corresponds to parent's snappedNextTo
+					iDesc1.parent = iDesc2.parent;
+					iDesc1.snappedNextTo = null;
+					iDesc1.snappedParallel = iDesc2.parent;
+					return true;
+				}
+				if (gap != null && gap.isEmptySpace() && iDesc1.snappedParallel == iDesc1.parent) {
+					// need to make the subgroup aligned to parent group
+					int gapSize = LayoutInterval.getIntervalCurrentSize(gap, dimension);
+					copyGapInsideGroup(gap, gapSize, iDesc2.parent, iDesc1.alignment);
+					layoutModel.removeInterval(gap);
+					iDesc1.parent = iDesc2.parent;
+					return true;
+				}
+			}
+			iDesc2.parent = iDesc1.parent; // prefer super-group otherwise
+		}
+		return true;
+	}
 
-  /**
-   * Moves a gap next to a parallel group into the parallel group - i.e. each interval in the group
-   * gets extended by the gap. Sort of opposite to LayoutOperations.optimizeGaps.
-   *
-   * @param alignment
-   *          which side of the group is extended
-   */
-  private void copyGapInsideGroup(LayoutInterval gap,
-      int gapSize,
-      LayoutInterval group,
-      int alignment) {
-    assert gap.isEmptySpace() && (alignment == LEADING || alignment == TRAILING);
-    if (alignment == LEADING) {
-      gapSize = -gapSize;
-    }
-    group.getCurrentSpace().positions[dimension][alignment] += gapSize;
-    for (Iterator<LayoutInterval> it = group.getSubIntervals(); it.hasNext();) {
-      LayoutInterval sub = it.next();
-      LayoutInterval gapClone = LayoutInterval.cloneInterval(gap, null);
-      if (sub.isSequential()) {
-        sub.getCurrentSpace().positions[dimension][alignment] += gapSize;
-        int index = alignment == LEADING ? 0 : sub.getSubIntervalCount();
-        operations.insertGapIntoSequence(gapClone, sub, index, dimension);
-      } else {
-        LayoutInterval seq = new LayoutInterval(SEQUENTIAL);
-        seq.getCurrentSpace().set(dimension, sub.getCurrentSpace());
-        seq.getCurrentSpace().positions[dimension][alignment] += gapSize;
-        seq.setAlignment(sub.getRawAlignment());
-        layoutModel.addInterval(seq, group, layoutModel.removeInterval(sub));
-        layoutModel.setIntervalAlignment(sub, DEFAULT);
-        layoutModel.addInterval(sub, seq, 0);
-        layoutModel.addInterval(gapClone, seq, alignment == LEADING ? 0 : 1);
-      }
-    }
-  }
+	/**
+	 * Moves a gap next to a parallel group into the parallel group - i.e. each interval in the group
+	 * gets extended by the gap. Sort of opposite to LayoutOperations.optimizeGaps.
+	 *
+	 * @param alignment
+	 *          which side of the group is extended
+	 */
+	private void copyGapInsideGroup(LayoutInterval gap,
+			int gapSize,
+			LayoutInterval group,
+			int alignment) {
+		assert gap.isEmptySpace() && (alignment == LEADING || alignment == TRAILING);
+		if (alignment == LEADING) {
+			gapSize = -gapSize;
+		}
+		group.getCurrentSpace().positions[dimension][alignment] += gapSize;
+		for (Iterator<LayoutInterval> it = group.getSubIntervals(); it.hasNext();) {
+			LayoutInterval sub = it.next();
+			LayoutInterval gapClone = LayoutInterval.cloneInterval(gap, null);
+			if (sub.isSequential()) {
+				sub.getCurrentSpace().positions[dimension][alignment] += gapSize;
+				int index = alignment == LEADING ? 0 : sub.getSubIntervalCount();
+				operations.insertGapIntoSequence(gapClone, sub, index, dimension);
+			} else {
+				LayoutInterval seq = new LayoutInterval(SEQUENTIAL);
+				seq.getCurrentSpace().set(dimension, sub.getCurrentSpace());
+				seq.getCurrentSpace().positions[dimension][alignment] += gapSize;
+				seq.setAlignment(sub.getRawAlignment());
+				layoutModel.addInterval(seq, group, layoutModel.removeInterval(sub));
+				layoutModel.setIntervalAlignment(sub, DEFAULT);
+				layoutModel.addInterval(sub, seq, 0);
+				layoutModel.addInterval(gapClone, seq, alignment == LEADING ? 0 : 1);
+			}
+		}
+	}
 
-  private boolean shouldEnterGroup(LayoutInterval group) {
-    assert group.isParallel();
-    if (aSnappedParallel == null) {
-      return true;
-    }
-    if (group == aSnappedParallel || group.isParentOf(aSnappedParallel)) {
-      return true; // same tree
-    }
-    // Determine if within or under 'group' one might align in parallel
-    // with required 'aSnappedParallel' interval. So return false if content
-    // of 'group' is in an incompatible branch
-    LayoutInterval interval = aSnappedParallel;
-    LayoutInterval parent = LayoutInterval.getFirstParent(interval, PARALLEL);
-    while (parent != null) {
-      if (LayoutInterval.isAlignedAtBorder(interval, parent, aEdge)) {
-        if (parent.isParentOf(group) && LayoutInterval.isAlignedAtBorder(group, parent, aEdge)) {
-          return true;
-        }
-        interval = parent;
-        parent = LayoutInterval.getFirstParent(interval, PARALLEL);
-      } else {
-        parent = null;
-      }
-    }
-    return false;
-  }
+	private boolean shouldEnterGroup(LayoutInterval group) {
+		assert group.isParallel();
+		if (aSnappedParallel == null) {
+			return true;
+		}
+		if (group == aSnappedParallel || group.isParentOf(aSnappedParallel)) {
+			return true; // same tree
+		}
+		// Determine if within or under 'group' one might align in parallel
+		// with required 'aSnappedParallel' interval. So return false if content
+		// of 'group' is in an incompatible branch
+		LayoutInterval interval = aSnappedParallel;
+		LayoutInterval parent = LayoutInterval.getFirstParent(interval, PARALLEL);
+		while (parent != null) {
+			if (LayoutInterval.isAlignedAtBorder(interval, parent, aEdge)) {
+				if (parent.isParentOf(group) && LayoutInterval.isAlignedAtBorder(group, parent, aEdge)) {
+					return true;
+				}
+				interval = parent;
+				parent = LayoutInterval.getFirstParent(interval, PARALLEL);
+			} else {
+				parent = null;
+			}
+		}
+		return false;
+	}
 
-  /**
-   * @return whether being in 'group' (having it as first parallel parent) allows parallel align
-   *         with 'interval'
-   */
-  private boolean canAlignWith(LayoutInterval interval, LayoutInterval group, int alignment) {
-    if (group.isSequential()) {
-      group = group.getParent();
-    }
-    if (interval == group) {
-      return true; // can align to group border from inside
-    }
-    LayoutInterval parent = interval.getParent();
-    if (parent == null) {
-      parent = interval;
-    } else if (parent.isSequential()) {
-      parent = parent.getParent();
-    }
-    while (parent != null && parent != group && !parent.isParentOf(group)) {
-      if (canSubstAlignWithParent(interval, dimension, alignment, dragger.isResizing(dimension))) {
-        interval = parent;
-        parent = LayoutInterval.getFirstParent(interval, PARALLEL);
-      } else {
-        parent = null;
-      }
-    }
-    if (parent == null) {
-      return false;
-    }
-    if (parent == group) {
-      return true;
-    }
-    // otherwise parent.isParentOf(group)
-    return LayoutInterval.isAlignedAtBorder(group, parent, alignment);
-    // we silently assume that addingInterval will end up aligned in 'group'
-  }
+	/**
+	 * @return whether being in 'group' (having it as first parallel parent) allows parallel align
+	 *         with 'interval'
+	 */
+	private boolean canAlignWith(LayoutInterval interval, LayoutInterval group, int alignment) {
+		if (group.isSequential()) {
+			group = group.getParent();
+		}
+		if (interval == group) {
+			return true; // can align to group border from inside
+		}
+		LayoutInterval parent = interval.getParent();
+		if (parent == null) {
+			parent = interval;
+		} else if (parent.isSequential()) {
+			parent = parent.getParent();
+		}
+		while (parent != null && parent != group && !parent.isParentOf(group)) {
+			if (canSubstAlignWithParent(interval, dimension, alignment, dragger.isResizing(dimension))) {
+				interval = parent;
+				parent = LayoutInterval.getFirstParent(interval, PARALLEL);
+			} else {
+				parent = null;
+			}
+		}
+		if (parent == null) {
+			return false;
+		}
+		if (parent == group) {
+			return true;
+		}
+		// otherwise parent.isParentOf(group)
+		return LayoutInterval.isAlignedAtBorder(group, parent, alignment);
+		// we silently assume that addingInterval will end up aligned in 'group'
+	}
 
-  private static boolean canSubstAlignWithParent(LayoutInterval interval,
-      int dimension,
-      int alignment,
-      boolean placedAtBorderEnough) {
-    LayoutInterval parent = LayoutInterval.getFirstParent(interval, PARALLEL);
-    boolean aligned = LayoutInterval.isAlignedAtBorder(interval, parent, alignment);
-    if (!aligned
-        && LayoutInterval.getDirectNeighbor(interval, alignment, false) == null
-        && LayoutInterval.isPlacedAtBorder(interval, parent, dimension, alignment)) { // not aligned, but touching parallel group border
-      aligned = placedAtBorderEnough
-          || LayoutInterval.getDirectNeighbor(parent, alignment, true) != null
-          || LayoutInterval.isClosedGroup(parent, alignment);
-      if (!aligned) { // check if the group can be considered "closed" at alignment edge
-        boolean allTouching = true;
-        for (Iterator<LayoutInterval> it = parent.getSubIntervals(); it.hasNext();) {
-          LayoutInterval li = it.next();
-          if (li.getAlignment() == alignment || LayoutInterval.wantResize(li)) {
-            aligned = true;
-            break;
-          } else if (allTouching && !LayoutInterval.isPlacedAtBorder(li, dimension, alignment)) {
-            allTouching = false;
-          }
-        }
-        if (allTouching) {
-          aligned = true;
-        }
-      }
-    }
-    return aligned;
-  }
+	private static boolean canSubstAlignWithParent(LayoutInterval interval,
+			int dimension,
+			int alignment,
+			boolean placedAtBorderEnough) {
+		LayoutInterval parent = LayoutInterval.getFirstParent(interval, PARALLEL);
+		boolean aligned = LayoutInterval.isAlignedAtBorder(interval, parent, alignment);
+		if (!aligned
+				&& LayoutInterval.getDirectNeighbor(interval, alignment, false) == null
+				&& LayoutInterval.isPlacedAtBorder(interval, parent, dimension, alignment)) { // not aligned, but touching parallel group border
+			aligned = placedAtBorderEnough
+					|| LayoutInterval.getDirectNeighbor(parent, alignment, true) != null
+					|| LayoutInterval.isClosedGroup(parent, alignment);
+			if (!aligned) { // check if the group can be considered "closed" at alignment edge
+				boolean allTouching = true;
+				for (Iterator<LayoutInterval> it = parent.getSubIntervals(); it.hasNext();) {
+					LayoutInterval li = it.next();
+					if (li.getAlignment() == alignment || LayoutInterval.wantResize(li)) {
+						aligned = true;
+						break;
+					} else if (allTouching && !LayoutInterval.isPlacedAtBorder(li, dimension, alignment)) {
+						allTouching = false;
+					}
+				}
+				if (allTouching) {
+					aligned = true;
+				}
+			}
+		}
+		return aligned;
+	}
 
-  private boolean canCombine(IncludeDesc iDesc1, IncludeDesc iDesc2) {
-    if (iDesc1.parent == iDesc2.parent) {
-      return true;
-    }
-    if (iDesc1.parent.isParentOf(iDesc2.parent)) {
-      return isBorderInclusion(iDesc2);
-    } else if (iDesc2.parent.isParentOf(iDesc1.parent)) {
-      return isBorderInclusion(iDesc1);
-    } else {
-      LayoutInterval parParent1 =
-          iDesc1.parent.isParallel() ? iDesc1.parent : iDesc1.parent.getParent();
-      LayoutInterval parParent2 =
-          iDesc2.parent.isParallel() ? iDesc2.parent : iDesc2.parent.getParent();
-      return parParent1.getParent() == parParent2.getParent()
-          && isBorderInclusion(iDesc1)
-          && isBorderInclusion(iDesc2)
-          && LayoutInterval.getDirectNeighbor(parParent1, iDesc1.alignment ^ 1, true) == parParent2;
-    }
-  }
+	private boolean canCombine(IncludeDesc iDesc1, IncludeDesc iDesc2) {
+		if (iDesc1.parent == iDesc2.parent) {
+			return true;
+		}
+		if (iDesc1.parent.isParentOf(iDesc2.parent)) {
+			return isBorderInclusion(iDesc2);
+		} else if (iDesc2.parent.isParentOf(iDesc1.parent)) {
+			return isBorderInclusion(iDesc1);
+		} else {
+			LayoutInterval parParent1 =
+					iDesc1.parent.isParallel() ? iDesc1.parent : iDesc1.parent.getParent();
+			LayoutInterval parParent2 =
+					iDesc2.parent.isParallel() ? iDesc2.parent : iDesc2.parent.getParent();
+			return parParent1.getParent() == parParent2.getParent()
+					&& isBorderInclusion(iDesc1)
+					&& isBorderInclusion(iDesc2)
+					&& LayoutInterval.getDirectNeighbor(parParent1, iDesc1.alignment ^ 1, true) == parParent2;
+		}
+	}
 
-  private boolean isBorderInclusion(IncludeDesc iDesc) {
-    if (iDesc.alignment != LEADING && iDesc.alignment != TRAILING) {
-      return false;
-    }
-    if (iDesc.parent.isSequential()) {
-      int startIndex = iDesc.alignment == LEADING ? iDesc.index : 0;
-      int endIndex;
-      if (iDesc.alignment == LEADING) {
-        endIndex = iDesc.parent.getSubIntervalCount() - 1;
-      } else {
-        endIndex = iDesc.index - 1;
-        if (endIndex >= iDesc.parent.getSubIntervalCount()) {
-          // if comming from original position the original index might be too high
-          endIndex = iDesc.parent.getSubIntervalCount() - 1;
-        }
-      }
-      return startIndex > endIndex
-          || !LayoutUtils.contentOverlap(
-              addingSpace,
-              iDesc.parent,
-              startIndex,
-              endIndex,
-              dimension ^ 1);
-    }
-    return iDesc.neighbor == null
-        || iDesc.alignment == LEADING && iDesc.index >= 1
-        || iDesc.alignment == TRAILING && iDesc.index == 0;
-  }
+	private boolean isBorderInclusion(IncludeDesc iDesc) {
+		if (iDesc.alignment != LEADING && iDesc.alignment != TRAILING) {
+			return false;
+		}
+		if (iDesc.parent.isSequential()) {
+			int startIndex = iDesc.alignment == LEADING ? iDesc.index : 0;
+			int endIndex;
+			if (iDesc.alignment == LEADING) {
+				endIndex = iDesc.parent.getSubIntervalCount() - 1;
+			} else {
+				endIndex = iDesc.index - 1;
+				if (endIndex >= iDesc.parent.getSubIntervalCount()) {
+					// if comming from original position the original index might be too high
+					endIndex = iDesc.parent.getSubIntervalCount() - 1;
+				}
+			}
+			return startIndex > endIndex
+					|| !LayoutUtils.contentOverlap(
+							addingSpace,
+							iDesc.parent,
+							startIndex,
+							endIndex,
+							dimension ^ 1);
+		}
+		return iDesc.neighbor == null
+				|| iDesc.alignment == LEADING && iDesc.index >= 1
+				|| iDesc.alignment == TRAILING && iDesc.index == 0;
+	}
 
-  private static int getAddDirection(LayoutRegion adding,
-      LayoutRegion existing,
-      int dimension,
-      int alignment) {
-    return LayoutRegion.distance(adding, existing, dimension, alignment, CENTER) > 0
-        ? LEADING
-        : TRAILING;
-  }
+	private static int getAddDirection(LayoutRegion adding,
+			LayoutRegion existing,
+			int dimension,
+			int alignment) {
+		return LayoutRegion.distance(adding, existing, dimension, alignment, CENTER) > 0
+				? LEADING
+						: TRAILING;
+	}
 }
diff --git a/org.eclipse.wb.layout.group/netbeans-src/org/netbeans/modules/form/layoutdesign/LayoutInterval.java b/org.eclipse.wb.layout.group/netbeans-src/org/netbeans/modules/form/layoutdesign/LayoutInterval.java
index 493246d9a..6e5543986 100644
--- a/org.eclipse.wb.layout.group/netbeans-src/org/netbeans/modules/form/layoutdesign/LayoutInterval.java
+++ b/org.eclipse.wb.layout.group/netbeans-src/org/netbeans/modules/form/layoutdesign/LayoutInterval.java
@@ -40,1043 +40,1043 @@
  * @author Tomas Pavek
  */
 public final class LayoutInterval implements LayoutConstants {
-  static final int ATTRIBUTE_FILL = 1;
-  static final int ATTRIBUTE_FORMER_FILL = 2;
-  static final int ATTR_CLOSED_GROUP = 32;
-  // attributes denoting intervals with different size behavior in design time
-  static final int ATTR_DESIGN_CONTAINER_GAP = 4;
-  static final int ATTR_DESIGN_RESIZING = 8;
-  static final int ATTR_DESIGN_SUPPRESSED_RESIZING = 16;
-  // attributes used during aligning
-  static final int ATTR_ALIGN_PRE = 64;
-  static final int ATTR_ALIGN_POST = 128;
-  static final int ATTR_FORCED_DEFAULT = 256;
-  static final int DESIGN_ATTRS = ATTR_DESIGN_CONTAINER_GAP
-      | ATTR_DESIGN_RESIZING
-      | ATTR_DESIGN_SUPPRESSED_RESIZING
-      | ATTR_ALIGN_PRE
-      | ATTR_ALIGN_POST;
-  static final int ATTR_PERSISTENT_MASK = ATTRIBUTE_FILL
-      | ATTRIBUTE_FORMER_FILL
-      | ATTR_CLOSED_GROUP;
-  // type of the interval - SINGLE, SEQUENTIAL, PARALLEL
-  private final int type;
-  // additional attributes set on the interval as bit flags
-  private int attributes;
-  // alignment of the interval (if in a parallel group)
-  private int alignment = DEFAULT;
-  // parent interval (group )
-  private LayoutInterval parentInterval;
-  // internall alignment of a group (if this is a parallel group)
-  private int groupAlignment = LEADING;
-  // contained sub-intervals (if this is a group)
-  private List<LayoutInterval> subIntervals;
-  // associated LayoutComponent (if any)
-  private LayoutComponent layoutComponent;
-  // type of padding (default gap; if this is a preferred gap)
-  private PaddingType paddingType;
-  private String[] paddingDefComps; // 2 components, needed for INDENT gap
-  // minimum, preferred, and maximum size definitions
-  private int minSize;
-  private int prefSize;
-  private int maxSize;
-  // current position and size of the interval in the visual representation
-  private LayoutRegion currentSpace;
-
-  // -----
-  // setup methods - each setter should be called max. once after creation,
-  // other changes should be done via LayoutModel to be fired and recorded
-  // for undo/redo
-  public LayoutInterval(int type) {
-    this.type = type;
-    minSize = NOT_EXPLICITLY_DEFINED;
-    prefSize = NOT_EXPLICITLY_DEFINED;
-    if (type == SEQUENTIAL || type == PARALLEL) {
-      subIntervals = new ArrayList<LayoutInterval>();
-      maxSize = NOT_EXPLICITLY_DEFINED; // group can resize by default
-    } else {
-      assert type == SINGLE;
-      maxSize = USE_PREFERRED_SIZE;
-    }
-  }
-
-  public void setAlignment(int alignment) {
-    this.alignment = alignment;
-  }
-
-  public void setGroupAlignment(int alignment) {
-    assert alignment != DEFAULT && type == PARALLEL;
-    groupAlignment = alignment;
-  }
-
-  void setComponent(LayoutComponent comp) {
-    layoutComponent = comp;
-  }
-
-  void setMinimumSize(int size) {
-    // for groups we expect only two states - shrinking suppressed/allowed
-    assert isSingle() || size == USE_PREFERRED_SIZE || size == NOT_EXPLICITLY_DEFINED;
-    minSize = size;
-  }
-
-  public void setPreferredSize(int size) {
-    assert size != USE_PREFERRED_SIZE && isSingle() || size == NOT_EXPLICITLY_DEFINED; // groups should not have explicit size
-    prefSize = size;
-  }
-
-  public void setMaximumSize(int size) {
-    // for single interval the max size must be defined
-    // for groups only two states - growing suppressed or allowed
-    assert isSingle()
-        && size != NOT_EXPLICITLY_DEFINED
-        || isGroup()
-        && (size == USE_PREFERRED_SIZE || size == NOT_EXPLICITLY_DEFINED);
-    maxSize = size;
-  }
-
-  void setSize(int size) {
-    setMinimumSize(size);
-    setPreferredSize(size);
-    setMaximumSize(size);
-  }
-
-  public void setSizes(int min, int pref, int max) {
-    setMinimumSize(min);
-    setPreferredSize(pref);
-    setMaximumSize(max);
-  }
-
-  int getMinimumSize() {
-    return minSize;
-  }
-
-  int getPreferredSize() {
-    return prefSize;
-  }
-
-  int getMaximumSize() {
-    return maxSize;
-  }
-
-  public void setPaddingType(PaddingType type) {
-    paddingType = type;
-  }
-
-  String[] getPaddingDefComponents() {
-    return paddingDefComps;
-  }
-
-  void setPaddingDefComponents(String compId1, String compId2) {
-    if (compId1 == null) {
-      paddingDefComps = null;
-    } else {
-      paddingDefComps = new String[]{compId1, compId2};
-    }
-  }
-
-  // ---------
-  // public methods
-  /**
-   * Returns the type of the structure of the interval. It can be a single interval or a group with
-   * sub-intervals arranged either sequentially or parallelly.
-   *
-   * @return type of the interval: SINGLE, SEQUENTIAL, or PARALLEL
-   */
-  public int getType() {
-    return type;
-  }
-
-  /**
-   * Returns alignment of the interval within a parallel group. If the interval is not part of a
-   * parallel group, the alignment is meaningless.
-   *
-   * @return alignment of the interval within a parallel group (LEADING, TRAILING, CENTER, or
-   *         BASELINE); DEFAULT if in a sequential group
-   */
-  public int getAlignment() {
-    return alignment == DEFAULT && parentInterval != null && parentInterval.isParallel()
-        ? parentInterval.getGroupAlignment()
-        : alignment;
-  }
-
-  /**
-   * Returns the common alignment of sub-intervals within a group (makes sense only for a parallel
-   * group).
-   *
-   * @return alignment of the group (LEADING, TRAILING, CENTER, or BASELINE)
-   */
-  public int getGroupAlignment() {
-    return groupAlignment;
-  }
-
-  /**
-   * Returns the minimum size of the interval. Instead of a specific size it may return also one of
-   * the constants NOT_EXPLICITLY_DEFINED or USE_PREFERRED_SIZE.
-   *
-   * @param designTime
-   *          if true, size for design time layout is returned (design time behavior may be
-   *          different in terms of resizing)
-   * @return minimum interval size, or one of the constants: NOT_EXPLICITLY_DEFINED or
-   *         USE_PREFERRED_SIZE
-   */
-  public int getMinimumSize(boolean designTime) {
-    if (!designTime) {
-      return minSize;
-    }
-    if (hasAttribute(ATTR_DESIGN_SUPPRESSED_RESIZING)) {
-      assert !hasAttribute(ATTR_DESIGN_RESIZING);
-      return USE_PREFERRED_SIZE;
-    }
-    if (hasAttribute(ATTR_DESIGN_RESIZING)) {
-      return isEmptySpace() && getPreferredSize(designTime) != 0 ? NOT_EXPLICITLY_DEFINED : 0;
-    }
-    return minSize;
-  }
-
-  /**
-   * Returns the preferred size of the interval. If no specific size was set, it returns
-   * NOT_EXPLICITLY_DEFINED constant.
-   *
-   * @param designTime
-   *          if true, size for design time layout is returned (design time behavior may be
-   *          different in terms of resizing)
-   * @return preferred size of the interval, or NOT_EXPLICITLY_DEFINED constant
-   */
-  public int getPreferredSize(boolean designTime) {
-    return prefSize;
-  }
-
-  /**
-   * Returns the maximum size of the interval. Instead of a specific size it may return also one of
-   * the constants NOT_EXPLICITLY_DEFINED or USE_PREFERRED_SIZE.
-   *
-   * @param designTime
-   *          if true, size for design time layout is returned (design time behavior may be
-   *          different in terms of resizing)
-   * @return maximum interval size, or one of the constants: NOT_EXPLICITLY_DEFINED or
-   *         USE_PREFERRED_SIZE
-   */
-  public int getMaximumSize(boolean designTime) {
-    if (!designTime) {
-      return maxSize;
-    }
-    if (hasAttribute(ATTR_DESIGN_SUPPRESSED_RESIZING)) {
-      assert !hasAttribute(ATTR_DESIGN_RESIZING);
-      return USE_PREFERRED_SIZE;
-    }
-    if (hasAttribute(ATTR_DESIGN_RESIZING)) {
-      return Short.MAX_VALUE;
-    }
-    return maxSize;
-  }
-
-  /**
-   * Returns number of sub-intervals of this interval.
-   *
-   * @return number of sub-intervals of this interval, 0 if it is not a group
-   */
-  public int getSubIntervalCount() {
-    return subIntervals != null ? subIntervals.size() : 0;
-  }
-
-  /**
-   * Returns an iterator of sub-intervals.
-   *
-   * @return iterator of sub-intervals, empty if there are no sub-intervals
-   */
-  public Iterator<LayoutInterval> getSubIntervals() {
-    return subIntervals != null ? subIntervals.iterator() : Collections.EMPTY_LIST.iterator();
-  }
-
-  /**
-   * If this interval represents a component's width or height, this methods returns the component.
-   *
-   * @return LayoutComponent instance representing the associated component. Null if this interval
-   *         does not represent a component.
-   */
-  public LayoutComponent getComponent() {
-    return layoutComponent;
-  }
-
-  // helper methods (redundant - based on derived information)
-  public boolean isParallel() {
-    return type == PARALLEL;
-  }
-
-  public boolean isSequential() {
-    return type == SEQUENTIAL;
-  }
-
-  /**
-   * Returns whether this interval defines a lyout component.
-   *
-   * @return true if this interval represents a layout component, false otherwise
-   */
-  public boolean isComponent() {
-    return layoutComponent != null;
-  }
-
-  /**
-   * Returns whether this interval defines an "empty" space (gap) in the layout, not including nor
-   * being able to include any component.
-   *
-   * @return true if this is a single interval not representing a component, false otherwise
-   */
-  public boolean isEmptySpace() {
-    return type == SINGLE && layoutComponent == null;
-  }
-
-  public boolean isDefaultPadding(boolean designTime) {
-    return isEmptySpace()
-        && (getMinimumSize(designTime) == NOT_EXPLICITLY_DEFINED || getPreferredSize(designTime) == NOT_EXPLICITLY_DEFINED);
-  }
-
-  public PaddingType getPaddingType() {
-    return paddingType;
-  }
-
-  public boolean isSingle() {
-    return type == SINGLE;
-  }
-
-  /**
-   * Returns whether this interval represents a group structure that can have have sub-intervals.
-   *
-   * @return whether this interval is a group, either sequential or parallel
-   */
-  public boolean isGroup() {
-    return type == SEQUENTIAL || type == PARALLEL;
-  }
-
-  /**
-   * @return whether the interval is allowed to grow (according to its definition); if allowed, the
-   *         real growing possibility may still depend on the associated component
-   */
-  //    public boolean isAllowedToGrow() {
-  //        return maxSize != USE_PREFERRED_SIZE
-  //               && (prefSize == NOT_EXPLICITLY_DEFINED
-  //                   || maxSize == NOT_EXPLICITLY_DEFINED
-  //                   || maxSize > prefSize);
-  //    }
-  /**
-   * @return whether the interval is allowed to shrink (according to its definition); if allowed,
-   *         the real growing possibility may still depend on the associated component
-   */
-  //    public boolean isAllowedToShrink() {
-  //        return minSize != USE_PREFERRED_SIZE
-  //               && (prefSize == NOT_EXPLICITLY_DEFINED
-  //                   || minSize == NOT_EXPLICITLY_DEFINED
-  //                   || minSize < prefSize);
-  //    }
-  // end of public methods
-  // -----
-  boolean hasAttribute(int attr) {
-    return (attributes & attr) == attr;
-  }
-
-  void setAttribute(int attr) {
-    attributes |= attr;
-  }
-
-  void unsetAttribute(int attr) {
-    attributes &= ~attr;
-  }
-
-  /**
-   * Sets attributes of the layout interval. Should be used by persistence manager only!
-   *
-   * @param attrs
-   *          attributes.
-   */
-  void setAttributes(int attrs) {
-    attributes = attrs;
-  }
-
-  /**
-   * Returns attributes of this layout interval. You should use <code>hasAttribute()</code> when you
-   * are interested in one particular attribute.
-   */
-  int getAttributes() {
-    return attributes;
-  }
-
-  /**
-   * @return the value of the alignment field of the interval - unlike getAlignment() it does not
-   *         ask the parent if not set (DEFAULT)
-   */
-  int getRawAlignment() {
-    return alignment;
-  }
-
-  // -----
-  public LayoutInterval getParent() {
-    return parentInterval;
-  }
-
-  public int add(LayoutInterval interval, int index) {
-    if (getParent() == interval) {
-      throw new IllegalArgumentException("Cannot add parent as a sub-interval!"); // NOI18N
-    }
-    if (interval.isComponent()) { // Issue 118562
-      LayoutComponent comp = interval.getComponent();
-      for (LayoutInterval subInterval : subIntervals) {
-        if (subInterval.isComponent() && comp.equals(subInterval.getComponent())) {
-          if (System.getProperty("netbeans.ignore.issue118562") == null) { // NOI18N
-            throw new IllegalArgumentException("Cannot add a component into a group twice!"); // NOI18N
-          } else {
-            return -1;
-          }
-        }
-      }
-    }
-    if (index < 0) {
-      index = subIntervals.size();
-    }
-    subIntervals.add(index, interval);
-    interval.parentInterval = this;
-    return index;
-  }
-
-  int remove(LayoutInterval interval) {
-    int index = subIntervals.indexOf(interval);
-    if (index >= 0) {
-      subIntervals.remove(index);
-      interval.parentInterval = null;
-    }
-    return index;
-  }
-
-  LayoutInterval remove(int index) {
-    LayoutInterval interval = subIntervals.get(index);
-    subIntervals.remove(index);
-    interval.parentInterval = null;
-    return interval;
-  }
-
-  LayoutInterval getSubInterval(int index) {
-    return subIntervals != null ? subIntervals.get(index) : null;
-  }
-
-  int indexOf(LayoutInterval interval) {
-    return subIntervals != null ? subIntervals.indexOf(interval) : -1;
-  }
-
-  public boolean isParentOf(LayoutInterval interval) {
-    if (isGroup()) {
-      do {
-        interval = interval.getParent();
-        if (interval == this) {
-          return true;
-        }
-      } while (interval != null);
-    }
-    return false;
-  }
-
-  public LayoutInterval getRoot() {
-    return LayoutInterval.getRoot(this);
-  }
-
-  // -----
-  // current state of the layout - current position and size of layout
-  // interval kept to be available quickly for the layout designer
-  LayoutRegion getCurrentSpace() {
-    assert !isEmptySpace(); // [temporary - nobody should be interested in gap positions]
-    if (currentSpace == null) {
-      currentSpace = new LayoutRegion();
-    }
-    return currentSpace;
-  }
-
-  void setCurrentSpace(LayoutRegion space) {
-    currentSpace = space;
-  }
-
-  // -----
-  // static helper methods
-  /**
-   * @return the closest parent interval that matches given type
-   */
-  static LayoutInterval getFirstParent(LayoutInterval interval, int type) {
-    LayoutInterval parent = interval.getParent();
-    while (parent != null && parent.getType() != type) {
-      parent = parent.getParent();
-    }
-    return parent;
-  }
-
-  static LayoutInterval getRoot(LayoutInterval interval) {
-    while (interval.getParent() != null) {
-      interval = interval.getParent();
-    }
-    //        assert interval.isParallel();
-    return interval;
-  }
-
-  /**
-   * Finds common parent of the given intervals.
-   *
-   * @param intervals
-   *          intervals whose parent should be found.
-   * @return common parent of the given intervals.
-   */
-  static LayoutInterval getCommonParent(LayoutInterval[] intervals) {
-    assert intervals != null && intervals.length > 0;
-    LayoutInterval parent = intervals[0].getParent();
-    for (int i = 1; i < intervals.length; i++) {
-      parent = getCommonParent(parent, intervals[i]);
-    }
-    return parent;
-  }
-
-  /**
-   * Finds common parent of two given intervals. In case one interval is parent of the other then
-   * this interval is returned directly, not its parent.
-   *
-   * @param interval1
-   *          interval whose parent should be found.
-   * @param interval2
-   *          interval whose parent should be found.
-   * @return common parent of two given intervals.
-   */
-  static LayoutInterval getCommonParent(LayoutInterval interval1, LayoutInterval interval2) {
-    // Find all parents of given intervals
-    Iterator parents1 = parentsOfInterval(interval1).iterator();
-    Iterator parents2 = parentsOfInterval(interval2).iterator();
-    LayoutInterval parent1 = (LayoutInterval) parents1.next();
-    LayoutInterval parent2 = (LayoutInterval) parents2.next();
-    assert parent1 == parent2;
-    // Candidate for the common parent
-    LayoutInterval parent = null;
-    while (parent1 == parent2) {
-      parent = parent1;
-      if (parents1.hasNext()) {
-        parent1 = (LayoutInterval) parents1.next();
-      } else {
-        break;
-      }
-      if (parents2.hasNext()) {
-        parent2 = (LayoutInterval) parents2.next();
-      } else {
-        break;
-      }
-    }
-    return parent;
-  }
-
-  /**
-   * Calculates all parents of the given interval.
-   *
-   * @param interval
-   *          interval whose parents should be found.
-   * @return <code>List</code> of <code>LayoutInterval</code> objects that are parents of the given
-   *         interval. The root is the first in the list; the interval itelf is also included - at
-   *         the end.
-   */
-  private static List<LayoutInterval> parentsOfInterval(LayoutInterval interval) {
-    List<LayoutInterval> parents = new LinkedList<LayoutInterval>();
-    while (interval != null) {
-      parents.add(0, interval);
-      interval = interval.getParent();
-    }
-    return parents;
-  }
-
-  static int getCount(LayoutInterval group, int alignment, boolean nonEmpty) {
-    int n = 0;
-    Iterator it = group.getSubIntervals();
-    while (it.hasNext()) {
-      LayoutInterval li = (LayoutInterval) it.next();
-      if ((group.isSequential()
-          || alignment == LayoutRegion.ALL_POINTS
-          || li.getAlignment() == alignment || wantResize(li))
-          && (!nonEmpty || !li.isEmptySpace())) { // count in
-        n++;
-      }
-    }
-    return n;
-  }
-
-  static LayoutInterval getDirectNeighbor(LayoutInterval interval, int alignment, boolean nonEmpty) {
-    LayoutInterval parent = interval.getParent();
-    if (parent == null || parent.isParallel()) {
-      return null;
-    }
-    LayoutInterval neighbor = null;
-    int d = alignment == LEADING ? -1 : 1;
-    int n = parent.getSubIntervalCount();
-    int index = parent.indexOf(interval) + d;
-    while (index >= 0 && index < n && neighbor == null) {
-      LayoutInterval li = parent.getSubInterval(index);
-      index += d;
-      if (!nonEmpty || !li.isEmptySpace()) {
-        neighbor = li;
-      }
-    }
-    return neighbor;
-  }
-
-  /**
-   * @param alignment
-   *          direction in which the neighbor is looked for (LEADING or TRAILING)
-   * @param nonEmpty
-   *          true if empty spaces (gaps) should be skipped
-   * @param outOfParent
-   *          true if can go up (out of the first sequential parent) for an indirect neighbor
-   * @param aligned
-   *          true if the indirect neighbor must be in contact with the given interval
-   */
-  static LayoutInterval getNeighbor(LayoutInterval interval,
-      int alignment,
-      boolean nonEmpty,
-      boolean outOfParent,
-      boolean aligned) {
-    assert alignment == LEADING || alignment == TRAILING;
-    LayoutInterval neighbor = null;
-    LayoutInterval parent = interval;
-    int d = alignment == LEADING ? -1 : 1;
-    do {
-      do { // find sequential parent first
-        interval = parent;
-        parent = interval.getParent();
-        if (aligned
-            && parent != null
-            && parent.isParallel()
-            && !isAlignedAtBorder(interval, alignment)) { // interval not aligned in parent
-          parent = null;
-        }
-      } while (parent != null && parent.isParallel());
-      if (parent != null) { // look for the neighbor in the sequence
-        neighbor = getDirectNeighbor(interval, alignment, nonEmpty);
-      }
-    } while (neighbor == null && parent != null && outOfParent);
-    return neighbor;
-  }
-
-  static LayoutInterval getNeighbor(LayoutInterval interval, int parentType, int alignment) {
-    assert alignment == LEADING || alignment == TRAILING;
-    LayoutInterval sibling = null;
-    LayoutInterval parent = interval;
-    do {
-      do {
-        interval = parent;
-        parent = parent.getParent();
-      } while (parent != null && parent.getType() != parentType);
-      if (parent != null) {
-        List subs = parent.subIntervals;
-        int index = subs.indexOf(interval);
-        if (alignment == LEADING && index > 0) {
-          sibling = (LayoutInterval) subs.get(index - 1);
-        } else if (alignment == TRAILING && index + 1 < subs.size()) {
-          sibling = (LayoutInterval) subs.get(index + 1);
-        }
-      }
-    } while (parent != null && sibling == null);
-    return sibling;
-  }
-
-  static boolean startsWithEmptySpace(LayoutInterval interval, int alignment) {
-    assert alignment == LEADING || alignment == TRAILING;
-    if (interval.isSingle()) {
-      return interval.isEmptySpace();
-    }
-    if (interval.isSequential()) {
-      int index = alignment == LEADING ? 0 : interval.getSubIntervalCount() - 1;
-      return startsWithEmptySpace(interval.getSubInterval(index), alignment);
-    } else { // parallel group
-      for (Iterator it = interval.getSubIntervals(); it.hasNext();) {
-        LayoutInterval li = (LayoutInterval) it.next();
-        if (startsWithEmptySpace(li, alignment)) {
-          return true;
-        }
-      }
-    }
-    return false;
-  }
-
-  /**
-   * Checks whether an interval is permanently aligned to its parent at given border. (The asked
-   * relation is hard, always maintained by the layout.) For a sequential parent the interval is
-   * aligned if it is first or last. For parallel parent the interval must have the given alignment
-   * in the group, or be resizing.
-   */
-  static boolean isAlignedAtBorder(LayoutInterval interval, int alignment) {
-    if (alignment != LEADING && alignment != TRAILING) {
-      return false;
-    }
-    LayoutInterval parent = interval.getParent();
-    if (parent == null) {
-      return false;
-    }
-    if (parent.isSequential()) {
-      int index = alignment == LEADING ? 0 : parent.getSubIntervalCount() - 1;
-      return interval == parent.getSubInterval(index);
-    } else { // parallel parent
-      return interval.getAlignment() == alignment || wantResize(interval);
-    }
-  }
-
-  /**
-   * Checks whether an interval is permanently aligned with a given parent interval - need not be
-   * the direct parent. This is a multi-level version of the other (simple) isAlignedAtBorder
-   * method.
-   */
-  static boolean isAlignedAtBorder(LayoutInterval interval, LayoutInterval parent, int alignment) {
-    do {
-      if (!isAlignedAtBorder(interval, alignment)) {
-        return false;
-      }
-      interval = interval.getParent();
-    } while (interval != parent);
-    return true;
-  }
-
-  /**
-   * Checks whether given interval is placed at border side of its parent. Cares about the current
-   * visual situation only - the place may change if the alignment is not backed by the layout
-   * structure. Note this method requires the current visual state (positions) of the relevant
-   * intervals to be up-to-date.
-   */
-  static boolean isPlacedAtBorder(LayoutInterval interval, int dimension, int alignment) {
-    if (alignment != LEADING && alignment != TRAILING) {
-      return false;
-    }
-    LayoutInterval parent = interval.getParent();
-    if (parent == null) {
-      return false;
-    }
-    if (interval.isEmptySpace()) {
-      if (parent.isSequential()) {
-        int index = alignment == LEADING ? 0 : parent.getSubIntervalCount() - 1;
-        return interval == parent.getSubInterval(index);
-      } else { // gap in parallel parent
-        return true;
-      }
-    } else { // check visual position
-      return LayoutRegion.distance(
-          interval.getCurrentSpace(),
-          parent.getCurrentSpace(),
-          dimension,
-          alignment,
-          alignment) == 0;
-    }
-  }
-
-  /**
-   * Checks whether an interval is placed at border side of given parent (need not be the direct
-   * parent). This is a multi-level version of the simpler isPlacededAtBorder method. Note this
-   * method requires the current visual state (positions) of the relevant intervals to be
-   * up-to-date.
-   */
-  static boolean isPlacedAtBorder(LayoutInterval interval,
-      LayoutInterval parent,
-      int dimension,
-      int alignment) {
-    if (alignment != LEADING && alignment != TRAILING) {
-      return false;
-    }
-    if (interval.isEmptySpace()) {
-      LayoutInterval p = interval.getParent();
-      if (p.isSequential()) {
-        int index = alignment == LEADING ? 0 : p.getSubIntervalCount() - 1;
-        if (interval != p.getSubInterval(index)) {
-          return false;
-        }
-      }
-      if (p == parent) {
-        return true;
-      }
-      interval = p;
-    }
-    return LayoutRegion.distance(
-        interval.getCurrentSpace(),
-        parent.getCurrentSpace(),
-        dimension,
-        alignment,
-        alignment) == 0 && parent.isParentOf(interval);
-  }
-
-  // [to be replaced by separate methods like isAlignedAtBorder, isPlacedBorder, isLastInterval]
-  static boolean isBorderInterval(LayoutInterval interval, int alignment, boolean attached) {
-    LayoutInterval parent = interval.getParent();
-    if (parent != null && (alignment == LEADING || alignment == TRAILING)) {
-      if (parent.isSequential()) {
-        int index = alignment == LEADING ? 0 : parent.getSubIntervalCount() - 1;
-        while (index >= 0 && index < parent.getSubIntervalCount()) {
-          LayoutInterval li = parent.getSubInterval(index);
-          if (li == interval) {
-            return true;
-          } else if (attached || !li.isEmptySpace()) {
-            return false;
-          }
-          index += alignment == LEADING ? 1 : -1;
-        }
-      } else {
-        return !attached || interval.getAlignment() == alignment || wantResize(interval);
-      }
-      //                if (interval.getAlignment() == alignment) {
-      //                return interval.getCurrentSpace().positions[dimension][alignment]
-      //                       == parent.getCurrentSpace().positions[dimension][alignment];
-    }
-    return false;
-  }
-
-  static boolean isClosedGroup(LayoutInterval group, int alignment) {
-    assert group.isParallel();
-    if (group.hasAttribute(ATTR_CLOSED_GROUP)
-        || group.getGroupAlignment() == CENTER
-        || group.getGroupAlignment() == BASELINE) {
-      return true;
-    }
-    Iterator it = group.getSubIntervals();
-    while (it.hasNext()) {
-      LayoutInterval li = (LayoutInterval) it.next();
-      if (li.getAlignment() == alignment || wantResize(li)) {
-        return true;
-      }
-    }
-    return false;
-  }
-
-  static boolean isExplicitlyClosedGroup(LayoutInterval group) {
-    return group.hasAttribute(ATTR_CLOSED_GROUP);
-  }
-
-  static boolean isDefaultPadding(LayoutInterval interval) {
-    return interval.isEmptySpace()
-        && (interval.getMinimumSize() == NOT_EXPLICITLY_DEFINED || interval.getPreferredSize() == NOT_EXPLICITLY_DEFINED);
-  }
-
-  static boolean isFixedDefaultPadding(LayoutInterval interval) {
-    return interval.isEmptySpace()
-        && (interval.getMinimumSize() == NOT_EXPLICITLY_DEFINED || interval.getMinimumSize() == USE_PREFERRED_SIZE)
-        && interval.getPreferredSize() == NOT_EXPLICITLY_DEFINED
-        && (interval.getMaximumSize() == NOT_EXPLICITLY_DEFINED || interval.getMaximumSize() == USE_PREFERRED_SIZE);
-  }
-
-  /**
-   * @return whether given interval is allowed to resize (not defined as fixed)
-   */
-  static boolean canResize(LayoutInterval interval) {
-    // [don't care about shrinking, assuming min possibly not defined - is it ok?]
-    int max = interval.getMaximumSize();
-    int pref = interval.getPreferredSize();
-    assert interval.isGroup() || max != NOT_EXPLICITLY_DEFINED;
-    return max != pref && max != USE_PREFERRED_SIZE || max == NOT_EXPLICITLY_DEFINED;
-  }
-
-  /**
-   * Finds out whether given interval would resize if allowed (given more space by its parent).
-   *
-   * @return whether given interval would resize if given opportunity
-   */
-  static boolean wantResize(LayoutInterval interval) {
-    return canResize(interval) && (!interval.isGroup() || contentWantResize(interval));
-  }
-
-  /**
-   * Finds out whether given interval would resize if allowed (given more space by its parent). This
-   * method also considers resizing of the whole layout (some parent of the interval could block the
-   * resizing).
-   *
-   * @return whether given interval would resize if given opportunity
-   */
-  static boolean wantResizeInLayout(LayoutInterval interval) {
-    if (!wantResize(interval)) {
-      return false;
-    }
-    while (interval.getParent() != null) {
-      interval = interval.getParent();
-      if (!canResize(interval)) {
-        return false;
-      }
-    }
-    return true;
-  }
-
-  static boolean contentWantResize(LayoutInterval group) {
-    boolean subres = false;
-    Iterator it = group.getSubIntervals();
-    while (it.hasNext()) {
-      if (wantResize((LayoutInterval) it.next())) {
-        subres = true;
-        break;
-      }
-    }
-    return subres;
-  }
-
-  static int getIntervalCurrentSize(LayoutInterval interval, int dimension) {
-    if (!interval.isEmptySpace()) {
-      return interval.getCurrentSpace().size(dimension);
-    }
-    int posL;
-    int posT;
-    LayoutInterval parent = interval.getParent();
-    if (parent.isSequential()) {
-      int index = parent.indexOf(interval);
-      posL =
-          index > 0
-              ? parent.getSubInterval(index - 1).getCurrentSpace().positions[dimension][TRAILING]
-              : parent.getCurrentSpace().positions[dimension][LEADING];
-      posT =
-          index + 1 < parent.getSubIntervalCount()
-              ? parent.getSubInterval(index + 1).getCurrentSpace().positions[dimension][LEADING]
-              : parent.getCurrentSpace().positions[dimension][TRAILING];
-    } else {
-      posL = parent.getCurrentSpace().positions[dimension][LEADING];
-      posT = parent.getCurrentSpace().positions[dimension][TRAILING];
-    }
-    return posT - posL;
-  }
-
-  /**
-   * Computes effective alignment of an interval in its parent. In case of a sequential parent, the
-   * effective interval alignment depends on other intervals and their resizability. E.g. if a
-   * preceding interval is resizing then the interval is effectivelly "pushed" to the trailing end.
-   * If there are no other intervals resizing then the parent alignment is returned. If there are
-   * resizing intervals on both sides, or the interval itself is resizing, then the there is no
-   * (positive) effective alignment.
-   *
-   * @return LEADING, TRAILING, or DEFAULT
-   */
-  static int getEffectiveAlignment(LayoutInterval interval) {
-    LayoutInterval parent = interval.getParent();
-    if (parent.isParallel()) {
-      return interval.getAlignment();
-    }
-    if (LayoutInterval.wantResize(interval)) {
-      return DEFAULT;
-    }
-    boolean before = true;
-    boolean leadingFixed = true;
-    boolean trailingFixed = true;
-    Iterator it = parent.getSubIntervals();
-    do {
-      LayoutInterval li = (LayoutInterval) it.next();
-      if (li == interval) {
-        before = false;
-      } else if (LayoutInterval.wantResize(li)) {
-        if (before) {
-          leadingFixed = false;
-        } else {
-          trailingFixed = false;
-        }
-      }
-    } while (it.hasNext());
-    if (leadingFixed && !trailingFixed) {
-      return LEADING;
-    }
-    if (!leadingFixed && trailingFixed) {
-      return TRAILING;
-    }
-    if (leadingFixed && trailingFixed) {
-      return parent.getAlignment();
-    }
-    return DEFAULT; // !leadingFixed && !trailingFixed
-  }
-
-  /**
-   * Computes effective alignment of given interval's edge in its direct parent. In case of a
-   * sequential parent, the effective interval alignment depends on other intervals and their
-   * resizability.
-   *
-   * @return effective alignment within parent, or DEFAULT in case of ambiguous alignment in
-   *         sequential parent
-   */
-  static int getEffectiveAlignment(LayoutInterval interval, int edge) {
-    assert edge == LEADING || edge == TRAILING;
-    boolean wantResize = LayoutInterval.wantResize(interval);
-    LayoutInterval parent = interval.getParent();
-    if (parent.isParallel()) {
-      return wantResize ? edge : interval.getAlignment();
-    }
-    int n = parent.getSubIntervalCount();
-    int i = edge == LEADING ? 0 : n - 1;
-    int d = edge == LEADING ? 1 : -1;
-    boolean before = true;
-    boolean beforeFixed = true;
-    boolean afterFixed = true;
-    while (i >= 0 && i < n) {
-      LayoutInterval li = parent.getSubInterval(i);
-      if (li == interval) {
-        before = false;
-      } else if (LayoutInterval.wantResize(li)) {
-        if (before) {
-          beforeFixed = false;
-        } else {
-          afterFixed = false;
-        }
-      }
-      i += d;
-    }
-    if (beforeFixed && !afterFixed) {
-      return edge;
-    }
-    if (!beforeFixed && afterFixed) {
-      return edge ^ 1;
-    }
-    if (beforeFixed && afterFixed) {
-      if (wantResize) {
-        return edge;
-      } else {
-        int parentAlignment = parent.getAlignment();
-        if (parentAlignment == LEADING || parentAlignment == TRAILING) {
-          return parentAlignment;
-        }
-      }
-    }
-    return DEFAULT;
-  }
-
-  /**
-   * Computes effective alignment of an interval's edge relatively to given parent.
-   *
-   * @return effective alignment within parent, or DEFAULT in case of ambiguous alignment in
-   *         sequential parent
-   */
-  static int getEffectiveAlignmentInParent(LayoutInterval interval, LayoutInterval parent, int edge) {
-    assert parent.isParentOf(interval);
-    int alignment = edge;
-    do {
-      alignment = getEffectiveAlignment(interval, alignment);
-      interval = interval.getParent();
-      if (alignment != LEADING && alignment != TRAILING) {
-        while (interval != parent) {
-          if (getEffectiveAlignment(interval) != alignment) {
-            return DEFAULT;
-          }
-          interval = interval.getParent();
-        }
-      }
-    } while (interval != parent);
-    return alignment;
-  }
-
-  /**
-   * Creates clone of the given interval. Doesn't clone content of groups, nor it sets
-   * LayoutComponent. Just the type, alignments and sizes are copied.
-   *
-   * @param interval
-   *          interval to be cloned.
-   * @param clone
-   *          interval that should contain cloned data. Can be <code>null</code>.
-   * @return shallow clone of the interval.
-   */
-  static LayoutInterval cloneInterval(LayoutInterval interval, LayoutInterval clone) {
-    clone = clone == null ? new LayoutInterval(interval.getType()) : clone;
-    clone.setAlignment(interval.getAlignment());
-    clone.setAttributes(interval.getAttributes() & ATTR_PERSISTENT_MASK);
-    if (interval.getType() == PARALLEL) {
-      clone.setGroupAlignment(interval.getGroupAlignment());
-    }
-    clone.setSizes(
-        interval.getMinimumSize(),
-        interval.getPreferredSize(),
-        interval.getMaximumSize());
-    if (isDefaultPadding(interval)) {
-      clone.setPaddingType(interval.getPaddingType());
-    }
-    return clone;
-  }
+	static final int ATTRIBUTE_FILL = 1;
+	static final int ATTRIBUTE_FORMER_FILL = 2;
+	static final int ATTR_CLOSED_GROUP = 32;
+	// attributes denoting intervals with different size behavior in design time
+	static final int ATTR_DESIGN_CONTAINER_GAP = 4;
+	static final int ATTR_DESIGN_RESIZING = 8;
+	static final int ATTR_DESIGN_SUPPRESSED_RESIZING = 16;
+	// attributes used during aligning
+	static final int ATTR_ALIGN_PRE = 64;
+	static final int ATTR_ALIGN_POST = 128;
+	static final int ATTR_FORCED_DEFAULT = 256;
+	static final int DESIGN_ATTRS = ATTR_DESIGN_CONTAINER_GAP
+			| ATTR_DESIGN_RESIZING
+			| ATTR_DESIGN_SUPPRESSED_RESIZING
+			| ATTR_ALIGN_PRE
+			| ATTR_ALIGN_POST;
+	static final int ATTR_PERSISTENT_MASK = ATTRIBUTE_FILL
+			| ATTRIBUTE_FORMER_FILL
+			| ATTR_CLOSED_GROUP;
+	// type of the interval - SINGLE, SEQUENTIAL, PARALLEL
+	private final int type;
+	// additional attributes set on the interval as bit flags
+	private int attributes;
+	// alignment of the interval (if in a parallel group)
+	private int alignment = DEFAULT;
+	// parent interval (group )
+	private LayoutInterval parentInterval;
+	// internall alignment of a group (if this is a parallel group)
+	private int groupAlignment = LEADING;
+	// contained sub-intervals (if this is a group)
+	private List<LayoutInterval> subIntervals;
+	// associated LayoutComponent (if any)
+	private LayoutComponent layoutComponent;
+	// type of padding (default gap; if this is a preferred gap)
+	private PaddingType paddingType;
+	private String[] paddingDefComps; // 2 components, needed for INDENT gap
+	// minimum, preferred, and maximum size definitions
+	private int minSize;
+	private int prefSize;
+	private int maxSize;
+	// current position and size of the interval in the visual representation
+	private LayoutRegion currentSpace;
+
+	// -----
+	// setup methods - each setter should be called max. once after creation,
+	// other changes should be done via LayoutModel to be fired and recorded
+	// for undo/redo
+	public LayoutInterval(int type) {
+		this.type = type;
+		minSize = NOT_EXPLICITLY_DEFINED;
+		prefSize = NOT_EXPLICITLY_DEFINED;
+		if (type == SEQUENTIAL || type == PARALLEL) {
+			subIntervals = new ArrayList<LayoutInterval>();
+			maxSize = NOT_EXPLICITLY_DEFINED; // group can resize by default
+		} else {
+			assert type == SINGLE;
+			maxSize = USE_PREFERRED_SIZE;
+		}
+	}
+
+	public void setAlignment(int alignment) {
+		this.alignment = alignment;
+	}
+
+	public void setGroupAlignment(int alignment) {
+		assert alignment != DEFAULT && type == PARALLEL;
+		groupAlignment = alignment;
+	}
+
+	void setComponent(LayoutComponent comp) {
+		layoutComponent = comp;
+	}
+
+	void setMinimumSize(int size) {
+		// for groups we expect only two states - shrinking suppressed/allowed
+		assert isSingle() || size == USE_PREFERRED_SIZE || size == NOT_EXPLICITLY_DEFINED;
+		minSize = size;
+	}
+
+	public void setPreferredSize(int size) {
+		assert size != USE_PREFERRED_SIZE && isSingle() || size == NOT_EXPLICITLY_DEFINED; // groups should not have explicit size
+		prefSize = size;
+	}
+
+	public void setMaximumSize(int size) {
+		// for single interval the max size must be defined
+		// for groups only two states - growing suppressed or allowed
+		assert isSingle()
+		&& size != NOT_EXPLICITLY_DEFINED
+		|| isGroup()
+		&& (size == USE_PREFERRED_SIZE || size == NOT_EXPLICITLY_DEFINED);
+		maxSize = size;
+	}
+
+	void setSize(int size) {
+		setMinimumSize(size);
+		setPreferredSize(size);
+		setMaximumSize(size);
+	}
+
+	public void setSizes(int min, int pref, int max) {
+		setMinimumSize(min);
+		setPreferredSize(pref);
+		setMaximumSize(max);
+	}
+
+	int getMinimumSize() {
+		return minSize;
+	}
+
+	int getPreferredSize() {
+		return prefSize;
+	}
+
+	int getMaximumSize() {
+		return maxSize;
+	}
+
+	public void setPaddingType(PaddingType type) {
+		paddingType = type;
+	}
+
+	String[] getPaddingDefComponents() {
+		return paddingDefComps;
+	}
+
+	void setPaddingDefComponents(String compId1, String compId2) {
+		if (compId1 == null) {
+			paddingDefComps = null;
+		} else {
+			paddingDefComps = new String[]{compId1, compId2};
+		}
+	}
+
+	// ---------
+	// public methods
+	/**
+	 * Returns the type of the structure of the interval. It can be a single interval or a group with
+	 * sub-intervals arranged either sequentially or parallelly.
+	 *
+	 * @return type of the interval: SINGLE, SEQUENTIAL, or PARALLEL
+	 */
+	public int getType() {
+		return type;
+	}
+
+	/**
+	 * Returns alignment of the interval within a parallel group. If the interval is not part of a
+	 * parallel group, the alignment is meaningless.
+	 *
+	 * @return alignment of the interval within a parallel group (LEADING, TRAILING, CENTER, or
+	 *         BASELINE); DEFAULT if in a sequential group
+	 */
+	public int getAlignment() {
+		return alignment == DEFAULT && parentInterval != null && parentInterval.isParallel()
+				? parentInterval.getGroupAlignment()
+						: alignment;
+	}
+
+	/**
+	 * Returns the common alignment of sub-intervals within a group (makes sense only for a parallel
+	 * group).
+	 *
+	 * @return alignment of the group (LEADING, TRAILING, CENTER, or BASELINE)
+	 */
+	public int getGroupAlignment() {
+		return groupAlignment;
+	}
+
+	/**
+	 * Returns the minimum size of the interval. Instead of a specific size it may return also one of
+	 * the constants NOT_EXPLICITLY_DEFINED or USE_PREFERRED_SIZE.
+	 *
+	 * @param designTime
+	 *          if true, size for design time layout is returned (design time behavior may be
+	 *          different in terms of resizing)
+	 * @return minimum interval size, or one of the constants: NOT_EXPLICITLY_DEFINED or
+	 *         USE_PREFERRED_SIZE
+	 */
+	public int getMinimumSize(boolean designTime) {
+		if (!designTime) {
+			return minSize;
+		}
+		if (hasAttribute(ATTR_DESIGN_SUPPRESSED_RESIZING)) {
+			assert !hasAttribute(ATTR_DESIGN_RESIZING);
+			return USE_PREFERRED_SIZE;
+		}
+		if (hasAttribute(ATTR_DESIGN_RESIZING)) {
+			return isEmptySpace() && getPreferredSize(designTime) != 0 ? NOT_EXPLICITLY_DEFINED : 0;
+		}
+		return minSize;
+	}
+
+	/**
+	 * Returns the preferred size of the interval. If no specific size was set, it returns
+	 * NOT_EXPLICITLY_DEFINED constant.
+	 *
+	 * @param designTime
+	 *          if true, size for design time layout is returned (design time behavior may be
+	 *          different in terms of resizing)
+	 * @return preferred size of the interval, or NOT_EXPLICITLY_DEFINED constant
+	 */
+	public int getPreferredSize(boolean designTime) {
+		return prefSize;
+	}
+
+	/**
+	 * Returns the maximum size of the interval. Instead of a specific size it may return also one of
+	 * the constants NOT_EXPLICITLY_DEFINED or USE_PREFERRED_SIZE.
+	 *
+	 * @param designTime
+	 *          if true, size for design time layout is returned (design time behavior may be
+	 *          different in terms of resizing)
+	 * @return maximum interval size, or one of the constants: NOT_EXPLICITLY_DEFINED or
+	 *         USE_PREFERRED_SIZE
+	 */
+	public int getMaximumSize(boolean designTime) {
+		if (!designTime) {
+			return maxSize;
+		}
+		if (hasAttribute(ATTR_DESIGN_SUPPRESSED_RESIZING)) {
+			assert !hasAttribute(ATTR_DESIGN_RESIZING);
+			return USE_PREFERRED_SIZE;
+		}
+		if (hasAttribute(ATTR_DESIGN_RESIZING)) {
+			return Short.MAX_VALUE;
+		}
+		return maxSize;
+	}
+
+	/**
+	 * Returns number of sub-intervals of this interval.
+	 *
+	 * @return number of sub-intervals of this interval, 0 if it is not a group
+	 */
+	public int getSubIntervalCount() {
+		return subIntervals != null ? subIntervals.size() : 0;
+	}
+
+	/**
+	 * Returns an iterator of sub-intervals.
+	 *
+	 * @return iterator of sub-intervals, empty if there are no sub-intervals
+	 */
+	public Iterator<LayoutInterval> getSubIntervals() {
+		return subIntervals != null ? subIntervals.iterator() : Collections.EMPTY_LIST.iterator();
+	}
+
+	/**
+	 * If this interval represents a component's width or height, this methods returns the component.
+	 *
+	 * @return LayoutComponent instance representing the associated component. Null if this interval
+	 *         does not represent a component.
+	 */
+	public LayoutComponent getComponent() {
+		return layoutComponent;
+	}
+
+	// helper methods (redundant - based on derived information)
+	public boolean isParallel() {
+		return type == PARALLEL;
+	}
+
+	public boolean isSequential() {
+		return type == SEQUENTIAL;
+	}
+
+	/**
+	 * Returns whether this interval defines a lyout component.
+	 *
+	 * @return true if this interval represents a layout component, false otherwise
+	 */
+	public boolean isComponent() {
+		return layoutComponent != null;
+	}
+
+	/**
+	 * Returns whether this interval defines an "empty" space (gap) in the layout, not including nor
+	 * being able to include any component.
+	 *
+	 * @return true if this is a single interval not representing a component, false otherwise
+	 */
+	public boolean isEmptySpace() {
+		return type == SINGLE && layoutComponent == null;
+	}
+
+	public boolean isDefaultPadding(boolean designTime) {
+		return isEmptySpace()
+				&& (getMinimumSize(designTime) == NOT_EXPLICITLY_DEFINED || getPreferredSize(designTime) == NOT_EXPLICITLY_DEFINED);
+	}
+
+	public PaddingType getPaddingType() {
+		return paddingType;
+	}
+
+	public boolean isSingle() {
+		return type == SINGLE;
+	}
+
+	/**
+	 * Returns whether this interval represents a group structure that can have have sub-intervals.
+	 *
+	 * @return whether this interval is a group, either sequential or parallel
+	 */
+	public boolean isGroup() {
+		return type == SEQUENTIAL || type == PARALLEL;
+	}
+
+	/**
+	 * @return whether the interval is allowed to grow (according to its definition); if allowed, the
+	 *         real growing possibility may still depend on the associated component
+	 */
+	//    public boolean isAllowedToGrow() {
+	//        return maxSize != USE_PREFERRED_SIZE
+	//               && (prefSize == NOT_EXPLICITLY_DEFINED
+	//                   || maxSize == NOT_EXPLICITLY_DEFINED
+	//                   || maxSize > prefSize);
+	//    }
+	/**
+	 * @return whether the interval is allowed to shrink (according to its definition); if allowed,
+	 *         the real growing possibility may still depend on the associated component
+	 */
+	//    public boolean isAllowedToShrink() {
+	//        return minSize != USE_PREFERRED_SIZE
+	//               && (prefSize == NOT_EXPLICITLY_DEFINED
+	//                   || minSize == NOT_EXPLICITLY_DEFINED
+	//                   || minSize < prefSize);
+	//    }
+	// end of public methods
+	// -----
+	boolean hasAttribute(int attr) {
+		return (attributes & attr) == attr;
+	}
+
+	void setAttribute(int attr) {
+		attributes |= attr;
+	}
+
+	void unsetAttribute(int attr) {
+		attributes &= ~attr;
+	}
+
+	/**
+	 * Sets attributes of the layout interval. Should be used by persistence manager only!
+	 *
+	 * @param attrs
+	 *          attributes.
+	 */
+	void setAttributes(int attrs) {
+		attributes = attrs;
+	}
+
+	/**
+	 * Returns attributes of this layout interval. You should use <code>hasAttribute()</code> when you
+	 * are interested in one particular attribute.
+	 */
+	int getAttributes() {
+		return attributes;
+	}
+
+	/**
+	 * @return the value of the alignment field of the interval - unlike getAlignment() it does not
+	 *         ask the parent if not set (DEFAULT)
+	 */
+	int getRawAlignment() {
+		return alignment;
+	}
+
+	// -----
+	public LayoutInterval getParent() {
+		return parentInterval;
+	}
+
+	public int add(LayoutInterval interval, int index) {
+		if (getParent() == interval) {
+			throw new IllegalArgumentException("Cannot add parent as a sub-interval!"); // NOI18N
+		}
+		if (interval.isComponent()) { // Issue 118562
+			LayoutComponent comp = interval.getComponent();
+			for (LayoutInterval subInterval : subIntervals) {
+				if (subInterval.isComponent() && comp.equals(subInterval.getComponent())) {
+					if (System.getProperty("netbeans.ignore.issue118562") == null) { // NOI18N
+						throw new IllegalArgumentException("Cannot add a component into a group twice!"); // NOI18N
+					} else {
+						return -1;
+					}
+				}
+			}
+		}
+		if (index < 0) {
+			index = subIntervals.size();
+		}
+		subIntervals.add(index, interval);
+		interval.parentInterval = this;
+		return index;
+	}
+
+	int remove(LayoutInterval interval) {
+		int index = subIntervals.indexOf(interval);
+		if (index >= 0) {
+			subIntervals.remove(index);
+			interval.parentInterval = null;
+		}
+		return index;
+	}
+
+	LayoutInterval remove(int index) {
+		LayoutInterval interval = subIntervals.get(index);
+		subIntervals.remove(index);
+		interval.parentInterval = null;
+		return interval;
+	}
+
+	LayoutInterval getSubInterval(int index) {
+		return subIntervals != null ? subIntervals.get(index) : null;
+	}
+
+	int indexOf(LayoutInterval interval) {
+		return subIntervals != null ? subIntervals.indexOf(interval) : -1;
+	}
+
+	public boolean isParentOf(LayoutInterval interval) {
+		if (isGroup()) {
+			do {
+				interval = interval.getParent();
+				if (interval == this) {
+					return true;
+				}
+			} while (interval != null);
+		}
+		return false;
+	}
+
+	public LayoutInterval getRoot() {
+		return LayoutInterval.getRoot(this);
+	}
+
+	// -----
+	// current state of the layout - current position and size of layout
+	// interval kept to be available quickly for the layout designer
+	LayoutRegion getCurrentSpace() {
+		assert !isEmptySpace(); // [temporary - nobody should be interested in gap positions]
+		if (currentSpace == null) {
+			currentSpace = new LayoutRegion();
+		}
+		return currentSpace;
+	}
+
+	void setCurrentSpace(LayoutRegion space) {
+		currentSpace = space;
+	}
+
+	// -----
+	// static helper methods
+	/**
+	 * @return the closest parent interval that matches given type
+	 */
+	static LayoutInterval getFirstParent(LayoutInterval interval, int type) {
+		LayoutInterval parent = interval.getParent();
+		while (parent != null && parent.getType() != type) {
+			parent = parent.getParent();
+		}
+		return parent;
+	}
+
+	static LayoutInterval getRoot(LayoutInterval interval) {
+		while (interval.getParent() != null) {
+			interval = interval.getParent();
+		}
+		//        assert interval.isParallel();
+		return interval;
+	}
+
+	/**
+	 * Finds common parent of the given intervals.
+	 *
+	 * @param intervals
+	 *          intervals whose parent should be found.
+	 * @return common parent of the given intervals.
+	 */
+	static LayoutInterval getCommonParent(LayoutInterval[] intervals) {
+		assert intervals != null && intervals.length > 0;
+		LayoutInterval parent = intervals[0].getParent();
+		for (int i = 1; i < intervals.length; i++) {
+			parent = getCommonParent(parent, intervals[i]);
+		}
+		return parent;
+	}
+
+	/**
+	 * Finds common parent of two given intervals. In case one interval is parent of the other then
+	 * this interval is returned directly, not its parent.
+	 *
+	 * @param interval1
+	 *          interval whose parent should be found.
+	 * @param interval2
+	 *          interval whose parent should be found.
+	 * @return common parent of two given intervals.
+	 */
+	static LayoutInterval getCommonParent(LayoutInterval interval1, LayoutInterval interval2) {
+		// Find all parents of given intervals
+		Iterator parents1 = parentsOfInterval(interval1).iterator();
+		Iterator parents2 = parentsOfInterval(interval2).iterator();
+		LayoutInterval parent1 = (LayoutInterval) parents1.next();
+		LayoutInterval parent2 = (LayoutInterval) parents2.next();
+		assert parent1 == parent2;
+		// Candidate for the common parent
+		LayoutInterval parent = null;
+		while (parent1 == parent2) {
+			parent = parent1;
+			if (parents1.hasNext()) {
+				parent1 = (LayoutInterval) parents1.next();
+			} else {
+				break;
+			}
+			if (parents2.hasNext()) {
+				parent2 = (LayoutInterval) parents2.next();
+			} else {
+				break;
+			}
+		}
+		return parent;
+	}
+
+	/**
+	 * Calculates all parents of the given interval.
+	 *
+	 * @param interval
+	 *          interval whose parents should be found.
+	 * @return <code>List</code> of <code>LayoutInterval</code> objects that are parents of the given
+	 *         interval. The root is the first in the list; the interval itelf is also included - at
+	 *         the end.
+	 */
+	private static List<LayoutInterval> parentsOfInterval(LayoutInterval interval) {
+		List<LayoutInterval> parents = new LinkedList<LayoutInterval>();
+		while (interval != null) {
+			parents.add(0, interval);
+			interval = interval.getParent();
+		}
+		return parents;
+	}
+
+	static int getCount(LayoutInterval group, int alignment, boolean nonEmpty) {
+		int n = 0;
+		Iterator it = group.getSubIntervals();
+		while (it.hasNext()) {
+			LayoutInterval li = (LayoutInterval) it.next();
+			if ((group.isSequential()
+					|| alignment == LayoutRegion.ALL_POINTS
+					|| li.getAlignment() == alignment || wantResize(li))
+					&& (!nonEmpty || !li.isEmptySpace())) { // count in
+				n++;
+			}
+		}
+		return n;
+	}
+
+	static LayoutInterval getDirectNeighbor(LayoutInterval interval, int alignment, boolean nonEmpty) {
+		LayoutInterval parent = interval.getParent();
+		if (parent == null || parent.isParallel()) {
+			return null;
+		}
+		LayoutInterval neighbor = null;
+		int d = alignment == LEADING ? -1 : 1;
+		int n = parent.getSubIntervalCount();
+		int index = parent.indexOf(interval) + d;
+		while (index >= 0 && index < n && neighbor == null) {
+			LayoutInterval li = parent.getSubInterval(index);
+			index += d;
+			if (!nonEmpty || !li.isEmptySpace()) {
+				neighbor = li;
+			}
+		}
+		return neighbor;
+	}
+
+	/**
+	 * @param alignment
+	 *          direction in which the neighbor is looked for (LEADING or TRAILING)
+	 * @param nonEmpty
+	 *          true if empty spaces (gaps) should be skipped
+	 * @param outOfParent
+	 *          true if can go up (out of the first sequential parent) for an indirect neighbor
+	 * @param aligned
+	 *          true if the indirect neighbor must be in contact with the given interval
+	 */
+	static LayoutInterval getNeighbor(LayoutInterval interval,
+			int alignment,
+			boolean nonEmpty,
+			boolean outOfParent,
+			boolean aligned) {
+		assert alignment == LEADING || alignment == TRAILING;
+		LayoutInterval neighbor = null;
+		LayoutInterval parent = interval;
+		int d = alignment == LEADING ? -1 : 1;
+		do {
+			do { // find sequential parent first
+				interval = parent;
+				parent = interval.getParent();
+				if (aligned
+						&& parent != null
+						&& parent.isParallel()
+						&& !isAlignedAtBorder(interval, alignment)) { // interval not aligned in parent
+					parent = null;
+				}
+			} while (parent != null && parent.isParallel());
+			if (parent != null) { // look for the neighbor in the sequence
+				neighbor = getDirectNeighbor(interval, alignment, nonEmpty);
+			}
+		} while (neighbor == null && parent != null && outOfParent);
+		return neighbor;
+	}
+
+	static LayoutInterval getNeighbor(LayoutInterval interval, int parentType, int alignment) {
+		assert alignment == LEADING || alignment == TRAILING;
+		LayoutInterval sibling = null;
+		LayoutInterval parent = interval;
+		do {
+			do {
+				interval = parent;
+				parent = parent.getParent();
+			} while (parent != null && parent.getType() != parentType);
+			if (parent != null) {
+				List subs = parent.subIntervals;
+				int index = subs.indexOf(interval);
+				if (alignment == LEADING && index > 0) {
+					sibling = (LayoutInterval) subs.get(index - 1);
+				} else if (alignment == TRAILING && index + 1 < subs.size()) {
+					sibling = (LayoutInterval) subs.get(index + 1);
+				}
+			}
+		} while (parent != null && sibling == null);
+		return sibling;
+	}
+
+	static boolean startsWithEmptySpace(LayoutInterval interval, int alignment) {
+		assert alignment == LEADING || alignment == TRAILING;
+		if (interval.isSingle()) {
+			return interval.isEmptySpace();
+		}
+		if (interval.isSequential()) {
+			int index = alignment == LEADING ? 0 : interval.getSubIntervalCount() - 1;
+			return startsWithEmptySpace(interval.getSubInterval(index), alignment);
+		} else { // parallel group
+			for (Iterator it = interval.getSubIntervals(); it.hasNext();) {
+				LayoutInterval li = (LayoutInterval) it.next();
+				if (startsWithEmptySpace(li, alignment)) {
+					return true;
+				}
+			}
+		}
+		return false;
+	}
+
+	/**
+	 * Checks whether an interval is permanently aligned to its parent at given border. (The asked
+	 * relation is hard, always maintained by the layout.) For a sequential parent the interval is
+	 * aligned if it is first or last. For parallel parent the interval must have the given alignment
+	 * in the group, or be resizing.
+	 */
+	static boolean isAlignedAtBorder(LayoutInterval interval, int alignment) {
+		if (alignment != LEADING && alignment != TRAILING) {
+			return false;
+		}
+		LayoutInterval parent = interval.getParent();
+		if (parent == null) {
+			return false;
+		}
+		if (parent.isSequential()) {
+			int index = alignment == LEADING ? 0 : parent.getSubIntervalCount() - 1;
+			return interval == parent.getSubInterval(index);
+		} else { // parallel parent
+			return interval.getAlignment() == alignment || wantResize(interval);
+		}
+	}
+
+	/**
+	 * Checks whether an interval is permanently aligned with a given parent interval - need not be
+	 * the direct parent. This is a multi-level version of the other (simple) isAlignedAtBorder
+	 * method.
+	 */
+	static boolean isAlignedAtBorder(LayoutInterval interval, LayoutInterval parent, int alignment) {
+		do {
+			if (!isAlignedAtBorder(interval, alignment)) {
+				return false;
+			}
+			interval = interval.getParent();
+		} while (interval != parent);
+		return true;
+	}
+
+	/**
+	 * Checks whether given interval is placed at border side of its parent. Cares about the current
+	 * visual situation only - the place may change if the alignment is not backed by the layout
+	 * structure. Note this method requires the current visual state (positions) of the relevant
+	 * intervals to be up-to-date.
+	 */
+	static boolean isPlacedAtBorder(LayoutInterval interval, int dimension, int alignment) {
+		if (alignment != LEADING && alignment != TRAILING) {
+			return false;
+		}
+		LayoutInterval parent = interval.getParent();
+		if (parent == null) {
+			return false;
+		}
+		if (interval.isEmptySpace()) {
+			if (parent.isSequential()) {
+				int index = alignment == LEADING ? 0 : parent.getSubIntervalCount() - 1;
+				return interval == parent.getSubInterval(index);
+			} else { // gap in parallel parent
+				return true;
+			}
+		} else { // check visual position
+			return LayoutRegion.distance(
+					interval.getCurrentSpace(),
+					parent.getCurrentSpace(),
+					dimension,
+					alignment,
+					alignment) == 0;
+		}
+	}
+
+	/**
+	 * Checks whether an interval is placed at border side of given parent (need not be the direct
+	 * parent). This is a multi-level version of the simpler isPlacededAtBorder method. Note this
+	 * method requires the current visual state (positions) of the relevant intervals to be
+	 * up-to-date.
+	 */
+	static boolean isPlacedAtBorder(LayoutInterval interval,
+			LayoutInterval parent,
+			int dimension,
+			int alignment) {
+		if (alignment != LEADING && alignment != TRAILING) {
+			return false;
+		}
+		if (interval.isEmptySpace()) {
+			LayoutInterval p = interval.getParent();
+			if (p.isSequential()) {
+				int index = alignment == LEADING ? 0 : p.getSubIntervalCount() - 1;
+				if (interval != p.getSubInterval(index)) {
+					return false;
+				}
+			}
+			if (p == parent) {
+				return true;
+			}
+			interval = p;
+		}
+		return LayoutRegion.distance(
+				interval.getCurrentSpace(),
+				parent.getCurrentSpace(),
+				dimension,
+				alignment,
+				alignment) == 0 && parent.isParentOf(interval);
+	}
+
+	// [to be replaced by separate methods like isAlignedAtBorder, isPlacedBorder, isLastInterval]
+	static boolean isBorderInterval(LayoutInterval interval, int alignment, boolean attached) {
+		LayoutInterval parent = interval.getParent();
+		if (parent != null && (alignment == LEADING || alignment == TRAILING)) {
+			if (parent.isSequential()) {
+				int index = alignment == LEADING ? 0 : parent.getSubIntervalCount() - 1;
+				while (index >= 0 && index < parent.getSubIntervalCount()) {
+					LayoutInterval li = parent.getSubInterval(index);
+					if (li == interval) {
+						return true;
+					} else if (attached || !li.isEmptySpace()) {
+						return false;
+					}
+					index += alignment == LEADING ? 1 : -1;
+				}
+			} else {
+				return !attached || interval.getAlignment() == alignment || wantResize(interval);
+			}
+			//                if (interval.getAlignment() == alignment) {
+			//                return interval.getCurrentSpace().positions[dimension][alignment]
+			//                       == parent.getCurrentSpace().positions[dimension][alignment];
+		}
+		return false;
+	}
+
+	static boolean isClosedGroup(LayoutInterval group, int alignment) {
+		assert group.isParallel();
+		if (group.hasAttribute(ATTR_CLOSED_GROUP)
+				|| group.getGroupAlignment() == CENTER
+				|| group.getGroupAlignment() == BASELINE) {
+			return true;
+		}
+		Iterator it = group.getSubIntervals();
+		while (it.hasNext()) {
+			LayoutInterval li = (LayoutInterval) it.next();
+			if (li.getAlignment() == alignment || wantResize(li)) {
+				return true;
+			}
+		}
+		return false;
+	}
+
+	static boolean isExplicitlyClosedGroup(LayoutInterval group) {
+		return group.hasAttribute(ATTR_CLOSED_GROUP);
+	}
+
+	static boolean isDefaultPadding(LayoutInterval interval) {
+		return interval.isEmptySpace()
+				&& (interval.getMinimumSize() == NOT_EXPLICITLY_DEFINED || interval.getPreferredSize() == NOT_EXPLICITLY_DEFINED);
+	}
+
+	static boolean isFixedDefaultPadding(LayoutInterval interval) {
+		return interval.isEmptySpace()
+				&& (interval.getMinimumSize() == NOT_EXPLICITLY_DEFINED || interval.getMinimumSize() == USE_PREFERRED_SIZE)
+				&& interval.getPreferredSize() == NOT_EXPLICITLY_DEFINED
+				&& (interval.getMaximumSize() == NOT_EXPLICITLY_DEFINED || interval.getMaximumSize() == USE_PREFERRED_SIZE);
+	}
+
+	/**
+	 * @return whether given interval is allowed to resize (not defined as fixed)
+	 */
+	static boolean canResize(LayoutInterval interval) {
+		// [don't care about shrinking, assuming min possibly not defined - is it ok?]
+		int max = interval.getMaximumSize();
+		int pref = interval.getPreferredSize();
+		assert interval.isGroup() || max != NOT_EXPLICITLY_DEFINED;
+		return max != pref && max != USE_PREFERRED_SIZE || max == NOT_EXPLICITLY_DEFINED;
+	}
+
+	/**
+	 * Finds out whether given interval would resize if allowed (given more space by its parent).
+	 *
+	 * @return whether given interval would resize if given opportunity
+	 */
+	static boolean wantResize(LayoutInterval interval) {
+		return canResize(interval) && (!interval.isGroup() || contentWantResize(interval));
+	}
+
+	/**
+	 * Finds out whether given interval would resize if allowed (given more space by its parent). This
+	 * method also considers resizing of the whole layout (some parent of the interval could block the
+	 * resizing).
+	 *
+	 * @return whether given interval would resize if given opportunity
+	 */
+	static boolean wantResizeInLayout(LayoutInterval interval) {
+		if (!wantResize(interval)) {
+			return false;
+		}
+		while (interval.getParent() != null) {
+			interval = interval.getParent();
+			if (!canResize(interval)) {
+				return false;
+			}
+		}
+		return true;
+	}
+
+	static boolean contentWantResize(LayoutInterval group) {
+		boolean subres = false;
+		Iterator it = group.getSubIntervals();
+		while (it.hasNext()) {
+			if (wantResize((LayoutInterval) it.next())) {
+				subres = true;
+				break;
+			}
+		}
+		return subres;
+	}
+
+	static int getIntervalCurrentSize(LayoutInterval interval, int dimension) {
+		if (!interval.isEmptySpace()) {
+			return interval.getCurrentSpace().size(dimension);
+		}
+		int posL;
+		int posT;
+		LayoutInterval parent = interval.getParent();
+		if (parent.isSequential()) {
+			int index = parent.indexOf(interval);
+			posL =
+					index > 0
+					? parent.getSubInterval(index - 1).getCurrentSpace().positions[dimension][TRAILING]
+							: parent.getCurrentSpace().positions[dimension][LEADING];
+					posT =
+							index + 1 < parent.getSubIntervalCount()
+							? parent.getSubInterval(index + 1).getCurrentSpace().positions[dimension][LEADING]
+									: parent.getCurrentSpace().positions[dimension][TRAILING];
+		} else {
+			posL = parent.getCurrentSpace().positions[dimension][LEADING];
+			posT = parent.getCurrentSpace().positions[dimension][TRAILING];
+		}
+		return posT - posL;
+	}
+
+	/**
+	 * Computes effective alignment of an interval in its parent. In case of a sequential parent, the
+	 * effective interval alignment depends on other intervals and their resizability. E.g. if a
+	 * preceding interval is resizing then the interval is effectivelly "pushed" to the trailing end.
+	 * If there are no other intervals resizing then the parent alignment is returned. If there are
+	 * resizing intervals on both sides, or the interval itself is resizing, then the there is no
+	 * (positive) effective alignment.
+	 *
+	 * @return LEADING, TRAILING, or DEFAULT
+	 */
+	static int getEffectiveAlignment(LayoutInterval interval) {
+		LayoutInterval parent = interval.getParent();
+		if (parent.isParallel()) {
+			return interval.getAlignment();
+		}
+		if (LayoutInterval.wantResize(interval)) {
+			return DEFAULT;
+		}
+		boolean before = true;
+		boolean leadingFixed = true;
+		boolean trailingFixed = true;
+		Iterator it = parent.getSubIntervals();
+		do {
+			LayoutInterval li = (LayoutInterval) it.next();
+			if (li == interval) {
+				before = false;
+			} else if (LayoutInterval.wantResize(li)) {
+				if (before) {
+					leadingFixed = false;
+				} else {
+					trailingFixed = false;
+				}
+			}
+		} while (it.hasNext());
+		if (leadingFixed && !trailingFixed) {
+			return LEADING;
+		}
+		if (!leadingFixed && trailingFixed) {
+			return TRAILING;
+		}
+		if (leadingFixed && trailingFixed) {
+			return parent.getAlignment();
+		}
+		return DEFAULT; // !leadingFixed && !trailingFixed
+	}
+
+	/**
+	 * Computes effective alignment of given interval's edge in its direct parent. In case of a
+	 * sequential parent, the effective interval alignment depends on other intervals and their
+	 * resizability.
+	 *
+	 * @return effective alignment within parent, or DEFAULT in case of ambiguous alignment in
+	 *         sequential parent
+	 */
+	static int getEffectiveAlignment(LayoutInterval interval, int edge) {
+		assert edge == LEADING || edge == TRAILING;
+		boolean wantResize = LayoutInterval.wantResize(interval);
+		LayoutInterval parent = interval.getParent();
+		if (parent.isParallel()) {
+			return wantResize ? edge : interval.getAlignment();
+		}
+		int n = parent.getSubIntervalCount();
+		int i = edge == LEADING ? 0 : n - 1;
+		int d = edge == LEADING ? 1 : -1;
+		boolean before = true;
+		boolean beforeFixed = true;
+		boolean afterFixed = true;
+		while (i >= 0 && i < n) {
+			LayoutInterval li = parent.getSubInterval(i);
+			if (li == interval) {
+				before = false;
+			} else if (LayoutInterval.wantResize(li)) {
+				if (before) {
+					beforeFixed = false;
+				} else {
+					afterFixed = false;
+				}
+			}
+			i += d;
+		}
+		if (beforeFixed && !afterFixed) {
+			return edge;
+		}
+		if (!beforeFixed && afterFixed) {
+			return edge ^ 1;
+		}
+		if (beforeFixed && afterFixed) {
+			if (wantResize) {
+				return edge;
+			} else {
+				int parentAlignment = parent.getAlignment();
+				if (parentAlignment == LEADING || parentAlignment == TRAILING) {
+					return parentAlignment;
+				}
+			}
+		}
+		return DEFAULT;
+	}
+
+	/**
+	 * Computes effective alignment of an interval's edge relatively to given parent.
+	 *
+	 * @return effective alignment within parent, or DEFAULT in case of ambiguous alignment in
+	 *         sequential parent
+	 */
+	static int getEffectiveAlignmentInParent(LayoutInterval interval, LayoutInterval parent, int edge) {
+		assert parent.isParentOf(interval);
+		int alignment = edge;
+		do {
+			alignment = getEffectiveAlignment(interval, alignment);
+			interval = interval.getParent();
+			if (alignment != LEADING && alignment != TRAILING) {
+				while (interval != parent) {
+					if (getEffectiveAlignment(interval) != alignment) {
+						return DEFAULT;
+					}
+					interval = interval.getParent();
+				}
+			}
+		} while (interval != parent);
+		return alignment;
+	}
+
+	/**
+	 * Creates clone of the given interval. Doesn't clone content of groups, nor it sets
+	 * LayoutComponent. Just the type, alignments and sizes are copied.
+	 *
+	 * @param interval
+	 *          interval to be cloned.
+	 * @param clone
+	 *          interval that should contain cloned data. Can be <code>null</code>.
+	 * @return shallow clone of the interval.
+	 */
+	static LayoutInterval cloneInterval(LayoutInterval interval, LayoutInterval clone) {
+		clone = clone == null ? new LayoutInterval(interval.getType()) : clone;
+		clone.setAlignment(interval.getAlignment());
+		clone.setAttributes(interval.getAttributes() & ATTR_PERSISTENT_MASK);
+		if (interval.getType() == PARALLEL) {
+			clone.setGroupAlignment(interval.getGroupAlignment());
+		}
+		clone.setSizes(
+				interval.getMinimumSize(),
+				interval.getPreferredSize(),
+				interval.getMaximumSize());
+		if (isDefaultPadding(interval)) {
+			clone.setPaddingType(interval.getPaddingType());
+		}
+		return clone;
+	}
 }
diff --git a/org.eclipse.wb.layout.group/netbeans-src/org/netbeans/modules/form/layoutdesign/LayoutModel.java b/org.eclipse.wb.layout.group/netbeans-src/org/netbeans/modules/form/layoutdesign/LayoutModel.java
index 576f8ab07..0f1e2fc26 100644
--- a/org.eclipse.wb.layout.group/netbeans-src/org/netbeans/modules/form/layoutdesign/LayoutModel.java
+++ b/org.eclipse.wb.layout.group/netbeans-src/org/netbeans/modules/form/layoutdesign/LayoutModel.java
@@ -56,1222 +56,1222 @@
  * @author Tomas Pavek, Jan Stola
  */
 public class LayoutModel implements LayoutConstants {
-  // map String component Id -> LayoutComponent instance
-  private final Map<String, LayoutComponent> idToComponents =
-      new HashMap<String, LayoutComponent>();
-  // list of listeners registered on LayoutModel
-  private ArrayList<Listener> listeners;
-  // layout changes recording and undo/redo
-  private boolean recordingChanges = true;
-  private boolean undoRedoInProgress;
-  private int changeMark;
-  private int oldestMark;
-  private final int changeCountHardLimit = 10000;
-  private final Map<Integer, LayoutEvent> undoMap = new HashMap<Integer, LayoutEvent>(500);
-  private final Map<Integer, LayoutEvent> redoMap = new HashMap<Integer, LayoutEvent>(100);
-  private LayoutUndoableEdit lastUndoableEdit;
-  // remembers whether the model was corrected/upgraded during loading
-  private boolean corrected;
-
-  // -----
-  /**
-   * Basic mapping method. Returns LayoutComponent for given Id.
-   *
-   * @return LayoutComponent of given Id, null if there is no such component registered in the model
-   */
-  public LayoutComponent getLayoutComponent(String compId) {
-    return idToComponents.get(compId);
-  }
-
-  public void addRootComponent(LayoutComponent comp) {
-    addComponent(comp, null, -1);
-  }
-
-  public void removeComponent(String compId, boolean fromModel) {
-    LayoutComponent comp = getLayoutComponent(compId);
-    if (comp != null) {
-      removeComponentAndIntervals(comp, fromModel);
-    }
-  }
-
-  /**
-   * @return false if the component does not exist in the layout model
-   */
-  public boolean changeComponentToContainer(String componentId) {
-    LayoutComponent component = getLayoutComponent(componentId);
-    if (component != null) {
-      setLayoutContainer(component, true);
-      return true;
-    }
-    return false;
-  }
-
-  /**
-   * Changes a container to a component (that cannot contain sub-components). All its current
-   * sub-components are removed. Those not being containers are also removed from the model -
-   * containers remain in model.
-   *
-   * @return false if the component does not exist in the layout model
-   */
-  public boolean changeContainerToComponent(String componentId) {
-    LayoutComponent component = getLayoutComponent(componentId);
-    if (component == null) {
-      return false;
-    }
-    // remove subcomponents
-    for (int i = component.getSubComponentCount() - 1; i >= 0; i--) {
-      LayoutComponent sub = component.getSubComponent(i);
-      if (sub.isLayoutContainer()) {
-        // subcontainer stays in layout model, but need to remove its
-        // layout interval from parent layout (now invalid)
-        removeComponentAndIntervals(sub, false);
-      } else {
-        // remove from layout model, don't have to remove from layout
-        // (thrown away as a whole)
-        removeComponent(sub, true);
-      }
-    }
-    // cancel container (also disconnects its layout)
-    setLayoutContainer(component, false);
-    // container changed to component can stay in model only if it has some parent
-    if (component.getParent() == null) {
-      removeComponent(component, true);
-    }
-    return true;
-  }
-
-  // -----
-  void registerComponent(LayoutComponent comp, boolean recursive) {
-    registerComponentImpl(comp);
-    if (recursive && comp.isLayoutContainer()) {
-      for (LayoutComponent subComp : comp.getSubcomponents()) {
-        registerComponent(subComp, recursive);
-      }
-    }
-  }
-
-  void registerComponentImpl(LayoutComponent comp) {
-    LayoutComponent lc = idToComponents.put(comp.getId(), comp);
-    if (lc != comp) {
-      // record undo/redo and fire event
-      LayoutEvent.Component ev = new LayoutEvent.Component(this, LayoutEvent.COMPONENT_REGISTERED);
-      ev.setComponent(comp);
-      addChange(ev);
-      fireEvent(ev);
-    } // else noop => don't need change event
-  }
-
-  void unregisterComponent(LayoutComponent comp, boolean recursive) {
-    if (recursive && comp.isLayoutContainer()) {
-      for (LayoutComponent subComp : comp.getSubcomponents()) {
-        unregisterComponent(subComp, recursive);
-      }
-    }
-    removeComponentFromLinkSizedGroup(comp, HORIZONTAL);
-    removeComponentFromLinkSizedGroup(comp, VERTICAL);
-    unregisterComponentImpl(comp);
-  }
-
-  void unregisterComponentImpl(LayoutComponent comp) {
-    LayoutComponent lc = idToComponents.remove(comp.getId());
-    if (lc != null) {
-      // record undo/redo and fire event
-      LayoutEvent.Component ev =
-          new LayoutEvent.Component(this, LayoutEvent.COMPONENT_UNREGISTERED);
-      ev.setComponent(comp);
-      addChange(ev);
-      fireEvent(ev);
-    } // else noop => don't need change event
-  }
-
-  public void changeComponentId(LayoutComponent comp, String newId) {
-    for (int i = 0; i < DIM_COUNT; i++) {
-      Integer linkIdInt = Integer.valueOf(comp.getLinkSizeId(i));
-      List<String> l = getLinkSizeGroups(i).get(linkIdInt);
-      if (l != null) {
-        int oldIndex = l.indexOf(comp.getId());
-        l.remove(comp.getId());
-        l.add(oldIndex, newId);
-      }
-    }
-    unregisterComponentImpl(comp);
-    comp.setId(newId);
-    registerComponentImpl(comp);
-  }
-
-  void replaceComponent(LayoutComponent comp, LayoutComponent substComp) {
-    assert substComp.getParent() == null;
-    for (int i = 0; i < DIM_COUNT; i++) {
-      LayoutInterval interval = comp.getLayoutInterval(i);
-      LayoutInterval substInt = substComp.getLayoutInterval(i);
-      assert substInt.getParent() == null;
-      setIntervalAlignment(substInt, interval.getRawAlignment());
-      setIntervalSize(
-          substInt,
-          interval.getMinimumSize(),
-          interval.getPreferredSize(),
-          interval.getMaximumSize());
-      LayoutInterval parentInt = interval.getParent();
-      if (parentInt != null) {
-        int index = removeInterval(interval);
-        addInterval(substInt, parentInt, index);
-      }
-    }
-    LayoutComponent parent = comp.getParent();
-    if (parent != null) {
-      int index = removeComponentImpl(comp);
-      addComponentImpl(substComp, parent, index);
-    }
-    unregisterComponentImpl(comp);
-    registerComponentImpl(substComp);
-  }
-
-  Iterator getAllComponents() {
-    return idToComponents.values().iterator();
-  }
-
-  // Note this method does not care about adding the layout intervals of the
-  // component, it must be done in advance.
-  public void addComponent(LayoutComponent component, LayoutComponent parent, int index) {
-    addComponentImpl(component, parent, index);
-    registerComponent(component, true);
-  }
-
-  void addComponentImpl(LayoutComponent component, LayoutComponent parent, int index) {
-    assert component.getParent() == null;
-    if (parent != null) {
-      assert getLayoutComponent(parent.getId()) == parent;
-      index = parent.addComponent(component, index);
-    } else {
-      assert component.isLayoutContainer();
-    }
-    // record undo/redo and fire event
-    LayoutEvent.Component ev = new LayoutEvent.Component(this, LayoutEvent.COMPONENT_ADDED);
-    ev.setComponent(component, parent, index);
-    addChange(ev);
-    fireEvent(ev);
-  }
-
-  // Low level removal - removes the component from parent, unregisters it,
-  // records the change for undo/redo, and fires an event. Does nothing to
-  // the layout intervals of the component.
-  void removeComponent(LayoutComponent component, boolean fromModel) {
-    removeComponentImpl(component);
-    if (fromModel && getLayoutComponent(component.getId()) != null) {
-      unregisterComponent(component, true);
-    }
-  }
-
-  int removeComponentImpl(LayoutComponent component) {
-    int index;
-    LayoutComponent parent = component.getParent();
-    if (parent != null) {
-      index = parent.removeComponent(component);
-    } else {
-      return -1; // the removal operation is "noop"
-    }
-    // record undo/redo and fire event
-    LayoutEvent.Component ev = new LayoutEvent.Component(this, LayoutEvent.COMPONENT_REMOVED);
-    ev.setComponent(component, parent, index);
-    addChange(ev);
-    fireEvent(ev);
-    return index;
-  }
-
-  void removeComponentAndIntervals(LayoutComponent comp, boolean fromModel) {
-    if (comp.getParent() != null) {
-      for (int i = 0; i < DIM_COUNT; i++) {
-        LayoutInterval interval = comp.getLayoutInterval(i);
-        if (interval.getParent() != null) {
-          removeInterval(interval);
-        }
-      }
-    }
-    removeComponent(comp, fromModel);
-  }
-
-  LayoutInterval[] addNewLayoutRoots(LayoutComponent container) {
-    LayoutInterval[] newRoots = container.addNewLayoutRoots();
-    // record undo/redo (don't fire event)
-    LayoutEvent.Component ev = new LayoutEvent.Component(this, LayoutEvent.LAYOUT_ROOTS_ADDED);
-    ev.setLayoutRoots(container, newRoots, -1);
-    addChange(ev);
-    return newRoots;
-  }
-
-  LayoutInterval[] removeLayoutRoots(LayoutComponent container, LayoutInterval oneRoot) {
-    LayoutInterval[] roots = container.getLayoutRoots(oneRoot);
-    if (roots != null) {
-      int index = container.removeLayoutRoots(roots);
-      // record undo/redo (don't fire event)
-      LayoutEvent.Component ev = new LayoutEvent.Component(this, LayoutEvent.LAYOUT_ROOTS_REMOVED);
-      ev.setLayoutRoots(container, roots, index);
-      addChange(ev);
-    }
-    return roots;
-  }
-
-  void addInterval(LayoutInterval interval, LayoutInterval parent, int index) {
-    assert interval.getParent() == null;
-    index = parent.add(interval, index);
-    // record undo/redo and fire event
-    LayoutEvent.Interval ev = new LayoutEvent.Interval(this, LayoutEvent.INTERVAL_ADDED);
-    ev.setInterval(interval, parent, index);
-    addChange(ev);
-    fireEvent(ev);
-  }
-
-  // Low level removal - removes the interval from parent, records the
-  // change for undo/redo, and fires an event.
-  int removeInterval(LayoutInterval interval) {
-    LayoutInterval parent = interval.getParent();
-    int index = parent.remove(interval);
-    // record undo/redo and fire event
-    LayoutEvent.Interval ev = new LayoutEvent.Interval(this, LayoutEvent.INTERVAL_REMOVED);
-    ev.setInterval(interval, parent, index);
-    addChange(ev);
-    fireEvent(ev);
-    return index;
-  }
-
-  LayoutInterval removeInterval(LayoutInterval parent, int index) {
-    LayoutInterval interval = parent.remove(index);
-    // record undo/redo and fire event
-    LayoutEvent.Interval ev = new LayoutEvent.Interval(this, LayoutEvent.INTERVAL_REMOVED);
-    ev.setInterval(interval, parent, index);
-    addChange(ev);
-    fireEvent(ev);
-    return interval;
-  }
-
-  void changeIntervalAttribute(LayoutInterval interval, int attribute, boolean set) {
-    int oldAttributes = interval.getAttributes();
-    if (set) {
-      interval.setAttribute(attribute);
-    } else {
-      interval.unsetAttribute(attribute);
-    }
-    int newAttributes = interval.getAttributes();
-    // record undo/redo (don't fire event)
-    LayoutEvent.Interval ev =
-        new LayoutEvent.Interval(this, LayoutEvent.INTERVAL_ATTRIBUTES_CHANGED);
-    ev.setAttributes(interval, oldAttributes, newAttributes);
-    addChange(ev);
-  }
-
-  void setIntervalAlignment(LayoutInterval interval, int alignment) {
-    int oldAlignment = interval.getRawAlignment();
-    interval.setAlignment(alignment);
-    // record undo/redo (don't fire event)
-    LayoutEvent.Interval ev =
-        new LayoutEvent.Interval(this, LayoutEvent.INTERVAL_ALIGNMENT_CHANGED);
-    ev.setAlignment(interval, oldAlignment, alignment);
-    addChange(ev);
-  }
-
-  void setGroupAlignment(LayoutInterval group, int alignment) {
-    int oldAlignment = group.getGroupAlignment();
-    if (alignment == oldAlignment) {
-      return;
-    }
-    group.setGroupAlignment(alignment);
-    // record undo/redo (don't fire event)
-    LayoutEvent.Interval ev = new LayoutEvent.Interval(this, LayoutEvent.GROUP_ALIGNMENT_CHANGED);
-    ev.setAlignment(group, oldAlignment, alignment);
-    addChange(ev);
-  }
-
-  void setLayoutContainer(LayoutComponent component, boolean container) {
-    boolean oldContainer = component.isLayoutContainer();
-    if (oldContainer != container) {
-      List<LayoutInterval[]> roots = component.getLayoutRoots();
-      component.setLayoutContainer(container, null);
-      // record undo/redo (don't fire event)
-      LayoutEvent.Component ev =
-          new LayoutEvent.Component(this, LayoutEvent.CONTAINER_ATTR_CHANGED);
-      ev.setContainer(component, roots);
-      addChange(ev);
-    }
-  }
-
-  public void setIntervalSize(LayoutInterval interval, int min, int pref, int max) {
-    int oldMin = interval.getMinimumSize();
-    int oldPref = interval.getPreferredSize();
-    int oldMax = interval.getMaximumSize();
-    if (min == oldMin && pref == oldPref && max == oldMax) {
-      return; // no change
-    }
-    interval.setSizes(min, pref, max);
-    if (interval.isComponent()) {
-      LayoutComponent comp = interval.getComponent();
-      boolean horizontal = interval == comp.getLayoutInterval(HORIZONTAL);
-      if (oldMin != min) {
-        comp.firePropertyChange(
-            horizontal ? PROP_HORIZONTAL_MIN_SIZE : PROP_VERTICAL_MIN_SIZE,
-            Integer.valueOf(oldMin),
-            Integer.valueOf(min));
-      }
-      if (oldPref != pref) {
-        comp.firePropertyChange(
-            horizontal ? PROP_HORIZONTAL_PREF_SIZE : PROP_VERTICAL_PREF_SIZE,
-            Integer.valueOf(oldPref),
-            Integer.valueOf(pref));
-      }
-      if (oldMax != max) {
-        comp.firePropertyChange(
-            horizontal ? PROP_HORIZONTAL_MAX_SIZE : PROP_VERTICAL_MAX_SIZE,
-            Integer.valueOf(oldMax),
-            Integer.valueOf(max));
-      }
-    }
-    // record undo/redo (don't fire event)
-    LayoutEvent.Interval ev = new LayoutEvent.Interval(this, LayoutEvent.INTERVAL_SIZE_CHANGED);
-    ev.setSize(interval, oldMin, oldPref, oldMax, min, pref, max);
-    addChange(ev);
-  }
-
-  public void setPaddingType(LayoutInterval interval, PaddingType paddingType) {
-    PaddingType oldPadding = interval.getPaddingType();
-    if (oldPadding != paddingType) {
-      interval.setPaddingType(paddingType);
-      // record undo/redo (don't fire event)
-      LayoutEvent.Interval ev =
-          new LayoutEvent.Interval(this, LayoutEvent.INTERVAL_PADDING_TYPE_CHANGED);
-      ev.setPaddingType(interval, oldPadding, paddingType);
-      addChange(ev);
-    }
-  }
-
-  /**
-   * Does a non-recursive copy of components and layout of given source container. Assuming the
-   * target container is empty (or does not exist yet). LayoutComponent instances are created
-   * automatically as needed, using the provided IDs.
-   *
-   * @param sourceModel
-   *          the source LayoutModel
-   * @param sourceContainerId
-   *          ID of the source container
-   * @param sourceToTargetId
-   *          mapping between the original and the copied components' IDs
-   * @param targetContainerId
-   *          ID of the target container
-   */
-  public void copyContainerLayout(LayoutModel sourceModel,
-      String sourceContainerId,
-      Map<String, String> sourceToTargetId,
-      String targetContainerId) {
-    LayoutComponent sourceContainer = sourceModel.getLayoutComponent(sourceContainerId);
-    LayoutComponent targetContainer = getLayoutComponent(targetContainerId);
-    if (targetContainer == null) {
-      targetContainer = new LayoutComponent(targetContainerId, true);
-      addRootComponent(targetContainer);
-    } else if (!targetContainer.isLayoutContainer()) {
-      changeComponentToContainer(targetContainerId);
-    }
-    copyContainerLayout(sourceContainer, sourceToTargetId, targetContainer);
-  }
-
-  void copyContainerLayout(LayoutComponent sourceContainer,
-      Map<String, String> sourceToTargetId,
-      LayoutComponent targetContainer) {
-    // Create LayoutComponents
-    for (LayoutComponent sourceComp : sourceContainer.getSubcomponents()) {
-      String targetId = sourceToTargetId.get(sourceComp.getId());
-      LayoutComponent targetComp = getLayoutComponent(targetId);
-      if (targetComp == null) {
-        targetComp = new LayoutComponent(targetId, sourceComp.isLayoutContainer());
-      }
-      if (targetComp.getParent() == null) {
-        addComponent(targetComp, targetContainer, -1);
-      }
-    }
-    // Copy LayoutIntervals
-    int i = 0;
-    for (LayoutInterval[] sourceRoots : sourceContainer.getLayoutRoots()) {
-      if (i == targetContainer.getLayoutRootCount()) {
-        addNewLayoutRoots(targetContainer);
-      }
-      for (int dim = 0; dim < DIM_COUNT; dim++) {
-        copySubIntervals(sourceRoots[dim], targetContainer.getLayoutRoot(i, dim), sourceToTargetId);
-      }
-      i++;
-    }
-  }
-
-  private void copySubIntervals(LayoutInterval sourceInterval,
-      LayoutInterval targetInterval,
-      Map/*<String,String>*/ sourceToTargetIds) {
-    Iterator iter = sourceInterval.getSubIntervals();
-    while (iter.hasNext()) {
-      LayoutInterval sourceSub = (LayoutInterval) iter.next();
-      LayoutInterval clone = null;
-      if (sourceSub.isComponent()) {
-        String compId = (String) sourceToTargetIds.get(sourceSub.getComponent().getId());
-        LayoutComponent comp = getLayoutComponent(compId);
-        int dimension = sourceSub == sourceSub.getComponent().getLayoutInterval(HORIZONTAL)
-            ? HORIZONTAL
-            : VERTICAL;
-        clone = comp.getLayoutInterval(dimension);
-      }
-      LayoutInterval targetSub = LayoutInterval.cloneInterval(sourceSub, clone);
-      if (sourceSub.isGroup()) {
-        copySubIntervals(sourceSub, targetSub, sourceToTargetIds);
-      }
-      addInterval(targetSub, targetInterval, -1);
-    }
-  }
-
-  // assuming target container is empty
-  void moveContainerLayout(LayoutComponent sourceContainer, LayoutComponent targetContainer) {
-    if (!sourceContainer.isLayoutContainer()
-        || !targetContainer.isLayoutContainer()
-        || targetContainer.getSubComponentCount() > 0) {
-      throw new IllegalArgumentException();
-    }
-    while (sourceContainer.getSubComponentCount() > 0) {
-      LayoutComponent sub = sourceContainer.getSubComponent(0);
-      removeComponent(sub, false);
-      addComponent(sub, targetContainer, -1);
-    }
-    List<LayoutInterval[]> sourceRoots = sourceContainer.getLayoutRoots();
-    sourceContainer.setLayoutRoots(null); // clear
-    LayoutEvent.Component ev = new LayoutEvent.Component(this, LayoutEvent.LAYOUT_ROOTS_CHANGED);
-    ev.setLayoutRoots(sourceContainer, sourceRoots, null);
-    addChange(ev);
-    targetContainer.setLayoutRoots(sourceRoots);
-    ev = new LayoutEvent.Component(this, LayoutEvent.LAYOUT_ROOTS_CHANGED);
-    ev.setLayoutRoots(targetContainer, null, sourceRoots);
-    addChange(ev);
-  }
-
-  static LayoutInterval[] createIntervalsFromBounds(Map<LayoutComponent, Rectangle> compToBounds) {
-    RegionInfo region = new RegionInfo(compToBounds);
-    region.calculateIntervals();
-    LayoutInterval[] result = new LayoutInterval[DIM_COUNT];
-    for (int dim = 0; dim < DIM_COUNT; dim++) {
-      result[dim] = region.getInterval(dim);
-    }
-    return result;
-  }
-
-  private static class RegionInfo {
-    private LayoutInterval horizontal = null;
-    private LayoutInterval vertical = null;
-    private final Map<LayoutComponent, Rectangle> compToBounds;
-    private int minx;
-    private int maxx;
-    private int miny;
-    private int maxy;
-    private int dimension;
-
-    public RegionInfo(Map<LayoutComponent, Rectangle> compToBounds) {
-      this.compToBounds = compToBounds;
-      dimension = -1;
-      minx = miny = 0;
-      updateRegionBounds();
-    }
-
-    private RegionInfo(Map<LayoutComponent, Rectangle> compToBounds, int dimension) {
-      this.compToBounds = compToBounds;
-      this.dimension = dimension;
-      minx = miny = Short.MAX_VALUE;
-      updateRegionBounds();
-    }
-
-    private void updateRegionBounds() {
-      maxy = maxx = Short.MIN_VALUE;
-      for (Rectangle bounds : compToBounds.values()) {
-        minx = Math.min(minx, bounds.x);
-        miny = Math.min(miny, bounds.y);
-        maxx = Math.max(maxx, bounds.x + bounds.width);
-        maxy = Math.max(maxy, bounds.y + bounds.height);
-      }
-    }
-
-    public void calculateIntervals() {
-      if (compToBounds.size() == 1) {
-        Map.Entry<LayoutComponent, Rectangle> e = compToBounds.entrySet().iterator().next();
-        LayoutComponent comp = e.getKey();
-        Rectangle bounds = e.getValue();
-        horizontal = comp.getLayoutInterval(HORIZONTAL);
-        horizontal = prefixByGap(horizontal, bounds.x - minx);
-        vertical = comp.getLayoutInterval(VERTICAL);
-        vertical = prefixByGap(vertical, bounds.y - miny);
-        return;
-      }
-      int effDim = -1;
-      List<Map<LayoutComponent, Rectangle>> parts = null;
-      Map<LayoutComponent, Rectangle> removedCompToBounds = null;
-      do {
-        boolean remove = dimension == -1 && effDim == HORIZONTAL || dimension != -1 && effDim != -1;
-        if (remove) {
-          effDim = -1;
-        }
-        if (dimension == -1) {
-          switch (effDim) {
-            case -1 :
-              effDim = VERTICAL;
-              break;
-            case VERTICAL :
-              effDim = HORIZONTAL;
-              break;
-            case HORIZONTAL :
-              remove = true;
-          }
-        } else {
-          effDim = dimension;
-        }
-        if (remove) { // no cut found, remove some component
-          Map.Entry<LayoutComponent, Rectangle> e = compToBounds.entrySet().iterator().next();
-          LayoutComponent comp = e.getKey();
-          Rectangle bounds = e.getValue();
-          if (removedCompToBounds == null) {
-            removedCompToBounds = new HashMap<LayoutComponent, Rectangle>();
-          }
-          removedCompToBounds.put(comp, bounds);
-          compToBounds.remove(comp);
-        }
-        Set<Integer> cutSet = createPossibleCuts(effDim);
-        parts = cutIntoParts(cutSet, effDim);
-      } while (!compToBounds.isEmpty() && parts.isEmpty());
-      dimension = effDim;
-      List<RegionInfo> regions = new LinkedList<RegionInfo>();
-      Iterator<Map<LayoutComponent, Rectangle>> iter = parts.iterator();
-      while (iter.hasNext()) {
-        Map<LayoutComponent, Rectangle> part = iter.next();
-        RegionInfo region = new RegionInfo(part, dimension == HORIZONTAL ? VERTICAL : HORIZONTAL);
-        region.calculateIntervals();
-        regions.add(region);
-      }
-      mergeSubRegions(regions, dimension);
-      if (removedCompToBounds != null) {
-        for (int dim = HORIZONTAL; dim <= VERTICAL; dim++) {
-          LayoutInterval parent = dim == HORIZONTAL ? horizontal : vertical;
-          if (!parent.isParallel()) {
-            LayoutInterval parGroup = new LayoutInterval(PARALLEL);
-            parGroup.add(parent, -1);
-            if (dim == HORIZONTAL) {
-              horizontal = parGroup;
-            } else {
-              vertical = parGroup;
-            }
-            parent = parGroup;
-          }
-          for (Map.Entry<LayoutComponent, Rectangle> entry : removedCompToBounds.entrySet()) {
-            LayoutComponent comp = entry.getKey();
-            Rectangle bounds = entry.getValue();
-            LayoutInterval interval = comp.getLayoutInterval(dim);
-            int gap = dim == HORIZONTAL ? bounds.x - minx : bounds.y - miny;
-            interval = prefixByGap(interval, gap);
-            parent.add(interval, -1);
-          }
-        }
-      }
-    }
-
-    private SortedSet<Integer> createPossibleCuts(int dimension) {
-      SortedSet<Integer> cutSet = new TreeSet<Integer>();
-      for (Rectangle bounds : compToBounds.values()) {
-        // Leading lines are sufficient
-        int leading = dimension == HORIZONTAL ? bounds.x : bounds.y;
-        cutSet.add(Integer.valueOf(leading));
-      }
-      cutSet.add(Integer.valueOf(dimension == HORIZONTAL ? maxx : maxy));
-      return cutSet;
-    }
-
-    private List<Map<LayoutComponent, Rectangle>> cutIntoParts(Set<Integer> cutSet, int dimension) {
-      List<Map<LayoutComponent, Rectangle>> parts =
-          new LinkedList<Map<LayoutComponent, Rectangle>>();
-      Iterator<Integer> iter = cutSet.iterator();
-      while (iter.hasNext()) {
-        Integer cutInt = iter.next();
-        int cut = cutInt.intValue();
-        boolean isCut = true;
-        Map<LayoutComponent, Rectangle> preCompToBounds = new HashMap<LayoutComponent, Rectangle>();
-        Map<LayoutComponent, Rectangle> postCompToBounds =
-            new HashMap<LayoutComponent, Rectangle>();
-        Iterator<Map.Entry<LayoutComponent, Rectangle>> it = compToBounds.entrySet().iterator();
-        while (isCut && it.hasNext()) {
-          Map.Entry<LayoutComponent, Rectangle> entry = it.next();
-          LayoutComponent comp = entry.getKey();
-          Rectangle bounds = entry.getValue();
-          int leading = dimension == HORIZONTAL ? bounds.x : bounds.y;
-          int trailing = leading + (dimension == HORIZONTAL ? bounds.width : bounds.height);
-          if (leading >= cut) {
-            postCompToBounds.put(comp, bounds);
-          } else if (trailing <= cut) {
-            preCompToBounds.put(comp, bounds);
-          } else {
-            isCut = false;
-          }
-        }
-        if (isCut && !preCompToBounds.isEmpty()
-        // the last cut candidate (end of the region) cannot be the first cut
-            && (!parts.isEmpty() || preCompToBounds.size() != compToBounds.size())) {
-          compToBounds.keySet().removeAll(preCompToBounds.keySet());
-          parts.add(preCompToBounds);
-        }
-      }
-      return parts;
-    }
-
-    private void mergeSubRegions(List regions, int dimension) {
-      if (regions.size() == 0) {
-        horizontal = new LayoutInterval(PARALLEL);
-        vertical = new LayoutInterval(PARALLEL);
-        return;
-      }
-      LayoutInterval seqGroup = new LayoutInterval(SEQUENTIAL);
-      LayoutInterval parGroup = new LayoutInterval(PARALLEL);
-      int lastSeqTrailing = dimension == HORIZONTAL ? minx : miny;
-      Iterator iter = regions.iterator();
-      while (iter.hasNext()) {
-        RegionInfo region = (RegionInfo) iter.next();
-        LayoutInterval seqInterval;
-        LayoutInterval parInterval;
-        int seqGap;
-        int parGap;
-        if (dimension == HORIZONTAL) {
-          seqInterval = region.horizontal;
-          parInterval = region.vertical;
-          parGap = region.miny - miny;
-          seqGap = region.minx - lastSeqTrailing;
-          lastSeqTrailing = region.maxx;
-        } else {
-          seqInterval = region.vertical;
-          parInterval = region.horizontal;
-          parGap = region.minx - minx;
-          seqGap = region.miny - lastSeqTrailing;
-          lastSeqTrailing = region.maxy;
-        }
-        // PENDING optimization of the resulting layout model
-        if (seqGap > 0) {
-          LayoutInterval gap = new LayoutInterval(SINGLE);
-          gap.setSize(seqGap);
-          seqGroup.add(gap, -1);
-        }
-        seqGroup.add(seqInterval, -1);
-        parInterval = prefixByGap(parInterval, parGap);
-        parGroup.add(parInterval, -1);
-      }
-      if (dimension == HORIZONTAL) {
-        horizontal = seqGroup;
-        vertical = parGroup;
-      } else {
-        horizontal = parGroup;
-        vertical = seqGroup;
-      }
-    }
-
-    private LayoutInterval prefixByGap(LayoutInterval interval, int size) {
-      if (size > 0) {
-        LayoutInterval gap = new LayoutInterval(SINGLE);
-        gap.setSize(size);
-        if (interval.isSequential()) {
-          interval.add(gap, 0);
-        } else {
-          LayoutInterval group = new LayoutInterval(SEQUENTIAL);
-          group.add(gap, -1);
-          group.add(interval, -1);
-          interval = group;
-        }
-      }
-      return interval;
-    }
-
-    public LayoutInterval getInterval(int dimension) {
-      return dimension == HORIZONTAL ? horizontal : vertical;
-    }
-  }
-
-  // -----
-  // listeners registration, firing methods (no synchronization)
-  void addListener(Listener l) {
-    if (listeners == null) {
-      listeners = new ArrayList<Listener>();
-    } else {
-      listeners.remove(l);
-    }
-    listeners.add(l);
-  }
-
-  void removeListener(Listener l) {
-    if (listeners != null) {
-      listeners.remove(l);
-    }
-  }
-
-  private void fireEvent(LayoutEvent event) {
-    if (listeners != null && listeners.size() > 0) {
-      Iterator it = ((List) listeners.clone()).iterator();
-      while (it.hasNext()) {
-        ((Listener) it.next()).layoutChanged(event);
-      }
-    }
-  }
-
-  /**
-   * Listener interface for changes in the layout model.
-   */
-  interface Listener {
-    void layoutChanged(LayoutEvent ev);
-  }
-
-  // -----
-  // changes recording and undo/redo
-  public boolean isChangeRecording() {
-    return recordingChanges;
-  }
-
-  public void setChangeRecording(boolean record) {
-    recordingChanges = record;
-  }
-
-  boolean isUndoRedoInProgress() {
-    return undoRedoInProgress;
-  }
-
-  public Object getChangeMark() {
-    return Integer.valueOf(changeMark);
-  }
-
-  public void endUndoableEdit() {
-    if (lastUndoableEdit != null) {
-      lastUndoableEdit.endMark = getChangeMark();
-      lastUndoableEdit = null;
-    }
-  }
-
-  public boolean isUndoableEditInProgress() {
-    return lastUndoableEdit != null;
-  }
-
-  public UndoableEdit getUndoableEdit() {
-    if (recordingChanges && !undoRedoInProgress) {
-      LayoutUndoableEdit undoEdit = new LayoutUndoableEdit();
-      undoEdit.startMark = getChangeMark();
-      endUndoableEdit();
-      lastUndoableEdit = undoEdit;
-      return undoEdit;
-    }
-    return null;
-  }
-
-  private void addChange(LayoutEvent change) {
-    if (recordingChanges && !undoRedoInProgress) {
-      redoMap.clear();
-      if (undoMap.size() == 0) {
-        oldestMark = changeMark;
-      }
-      undoMap.put(Integer.valueOf(changeMark++), change);
-      while (undoMap.size() > changeCountHardLimit) {
-        undoMap.remove(Integer.valueOf(oldestMark++));
-      }
-    }
-  }
-
-  boolean undo(Object startMark, Object endMark) {
-    assert !undoRedoInProgress;
-    if (!undoMap.containsKey(startMark)) {
-      return false; // the mark is not present in the undo queue
-    }
-    int start = ((Integer) startMark).intValue();
-    int end = ((Integer) endMark).intValue();
-    undoRedoInProgress = true;
-    while (end > start) {
-      Integer key = Integer.valueOf(--end);
-      LayoutEvent change = undoMap.remove(key);
-      if (change != null) {
-        change.undo();
-        redoMap.put(key, change);
-      }
-    }
-    undoRedoInProgress = false;
-    return true;
-  }
-
-  boolean redo(Object startMark, Object endMark) {
-    assert !undoRedoInProgress;
-    if (!redoMap.containsKey(startMark)) {
-      return false; // the mark is not present in the redo queue
-    }
-    int start = ((Integer) startMark).intValue();
-    int end = ((Integer) endMark).intValue();
-    undoRedoInProgress = true;
-    while (start < end) {
-      Integer key = Integer.valueOf(start++);
-      LayoutEvent change = redoMap.remove(key);
-      if (change != null) {
-        change.redo();
-        undoMap.put(key, change);
-      }
-    }
-    undoRedoInProgress = false;
-    return true;
-  }
-
-  void releaseChanges(Object fromMark, Object toMark) {
-    int m1 = ((Integer) fromMark).intValue();
-    int m2 = ((Integer) toMark).intValue();
-    while (m1 < m2) {
-      Object m = Integer.valueOf(m1);
-      undoMap.remove(m);
-      redoMap.remove(m);
-      m1++;
-    }
-  }
-
-  /**
-   * UndoableEdit implementation for series of changes in layout model.
-   */
-  private class LayoutUndoableEdit extends AbstractUndoableEdit {
-    private static final long serialVersionUID = 1L;
-    private Object startMark;
-    private Object endMark;
-
-    @Override
-    public void undo() throws CannotUndoException {
-      super.undo();
-      if (endMark == null) {
-        assert lastUndoableEdit == this;
-        endMark = getChangeMark();
-        lastUndoableEdit = null;
-      }
-      LayoutModel.this.undo(startMark, endMark);
-    }
-
-    @Override
-    public void redo() throws CannotRedoException {
-      super.redo();
-      LayoutModel.this.redo(startMark, endMark);
-    }
-
-    @Override
-    public String getUndoPresentationName() {
-      return ""; // NOI18N
-    }
-
-    @Override
-    public String getRedoPresentationName() {
-      return ""; // NOI18N
-    }
-
-    @Override
-    public void die() {
-      releaseChanges(startMark, endMark != null ? endMark : getChangeMark());
-    }
-  }
-
-  /**
-   * Returns dump of the layout model. For debugging and testing purposes only.
-   *
-   * @return dump of the layout model.
-   */
-  public String dump(final Map<String, String> idToNameMap) {
-    Set<LayoutComponent> roots = new TreeSet<LayoutComponent>(new Comparator<LayoutComponent>() {
-      // comparator to ensure stable order of dump; according to tree
-      // hierarchy, order within container, name
-      @Override
-      public int compare(LayoutComponent lc1, LayoutComponent lc2) {
-        if (lc1 == lc2) {
-          return 0;
-        }
-        // parent always first
-        if (lc1.isParentOf(lc2)) {
-          return -1;
-        }
-        if (lc2.isParentOf(lc1)) {
-          return 1;
-        }
-        // get the same level under common parent
-        LayoutComponent parent = LayoutComponent.getCommonParent(lc1, lc2);
-        while (lc1.getParent() != parent) {
-          lc1 = lc1.getParent();
-        }
-        while (lc2.getParent() != parent) {
-          lc2 = lc2.getParent();
-        }
-        if (parent != null) { // in the same tree
-          return parent.indexOf(lc1) < parent.indexOf(lc2) ? -1 : 1;
-        } else { // in distinct trees
-          String id1 = lc1.getId();
-          String id2 = lc2.getId();
-          if (idToNameMap != null) {
-            id1 = idToNameMap.get(id1);
-            id2 = idToNameMap.get(id2);
-            if (id1 == null) {
-              return -1;
-            }
-            if (id2 == null) {
-              return 1;
-            }
-          }
-          return id1.compareTo(id2);
-        }
-      }
-    });
-    Iterator<Map.Entry<String, LayoutComponent>> iter = idToComponents.entrySet().iterator();
-    while (iter.hasNext()) {
-      Map.Entry<String, LayoutComponent> entry = iter.next();
-      LayoutComponent comp = entry.getValue();
-      if (comp.isLayoutContainer()) {
-        roots.add(comp);
-      }
-    }
-    StringBuilder sb = new StringBuilder();
-    sb.append("<LayoutModel>\n"); // NOI18N
-    Iterator rootIter = roots.iterator();
-    while (rootIter.hasNext()) {
-      LayoutComponent root = (LayoutComponent) rootIter.next();
-      String rootId = root.getId();
-      if (idToNameMap != null) {
-        rootId = idToNameMap.get(rootId);
-      }
-      if (rootId != null) {
-        sb.append("  <Root id=\"" + rootId + "\">\n"); // NOI18N
-      } else {
-        sb.append("  <Root>\n"); // NOI18N
-      }
-      sb.append(saveContainerLayout(root, idToNameMap, 2, true));
-      sb.append("  </Root>\n"); // NOI18N
-    }
-    sb.append("</LayoutModel>\n"); // NOI18N
-    return sb.toString();
-  }
-
-  /**
-   * Returns dump of the layout interval.
-   *
-   * @param interval
-   *          interval whose dump should be returned.
-   * @param dimension
-   *          dimension in which the layout interval resides.
-   */
-  public String dump(LayoutInterval interval, int dimension) {
-    return LayoutPersistenceManager.dumpInterval(this, interval, dimension, 2);
-  }
-
-  /**
-   * Saves given layout container into a String.
-   *
-   * @param container
-   *          the layout container to be saved
-   * @param idToNameMap
-   *          map for translating component Ids to names suitable for saving
-   * @param indent
-   *          determines size of indentation
-   * @param humanReadable
-   *          determines whether constants should be replaced by human readable expressions
-   * @return dump of the layout model of given container
-   */
-  public String saveContainerLayout(LayoutComponent container,
-      Map<String, String> idToNameMap,
-      int indent,
-      boolean humanReadable) {
-    return LayoutPersistenceManager.saveContainer(
-        this,
-        container,
-        idToNameMap,
-        indent,
-        humanReadable);
-  }
-
-  /**
-   * Loads the layout of the given container.
-   *
-   * @param containerId
-   *          ID of the layout container to be loaded
-   * @param layoutNodeList
-   *          XML data to load
-   * @param nameToIdMap
-   *          map from component names to component IDs
-   */
-  public void loadContainerLayout(String containerId,
-      org.w3c.dom.NodeList layoutNodeList,
-      Map<String, String> nameToIdMap) throws java.io.IOException {
-    LayoutPersistenceManager.loadContainer(this, containerId, layoutNodeList, nameToIdMap);
-  }
-
-  /**
-   * Returns whether the model was repaired (because of some error found) or upgraded automatically
-   * during loading. After loading, it might be a good idea to save the corrected state, so to mark
-   * the loaded layout as modified.
-   *
-   * @return whether the model was changed during loading or saving
-   */
-  public boolean wasCorrected() {
-    return corrected;
-  }
-
-  void setCorrected() {
-    corrected = true;
-  }
-
-  /*
-   * LINKSIZE
-   */
-  // each object in the map is a List and contains list of components within the group
-  private final Map<Integer, List<String>> linkSizeGroupsH = new HashMap<Integer, List<String>>();
-  private final Map<Integer, List<String>> linkSizeGroupsV = new HashMap<Integer, List<String>>();
-  private int maxLinkGroupId = 0;
-
-  public void addComponentToLinkSizedGroup(int groupId, String compId, int dimension) {
-    if (NOT_EXPLICITLY_DEFINED == groupId) { //
-      return;
-    }
-    if (maxLinkGroupId < groupId) {
-      maxLinkGroupId = groupId;
-    }
-    Integer groupIdInt = Integer.valueOf(groupId);
-    Map<Integer, List<String>> linkSizeGroups =
-        dimension == HORIZONTAL ? linkSizeGroupsH : linkSizeGroupsV;
-    List<String> l = linkSizeGroups.get(groupIdInt);
-    if (l != null && (l.contains(compId) || !sameContainer(compId, l.get(0)))) {
-      return;
-    }
-    addComponentToLinkSizedGroupImpl(groupId, compId, dimension);
-  }
-
-  void addComponentToLinkSizedGroupImpl(int groupId, String compId, int dimension) {
-    LayoutComponent lc = getLayoutComponent(compId);
-    Integer groupIdInt = Integer.valueOf(groupId);
-    Map<Integer, List<String>> linkSizeGroups =
-        dimension == HORIZONTAL ? linkSizeGroupsH : linkSizeGroupsV;
-    List<String> l = linkSizeGroups.get(groupIdInt);
-    if (l != null) {
-      l.add(lc.getId());
-    } else {
-      l = new ArrayList<String>();
-      l.add(lc.getId());
-      linkSizeGroups.put(groupIdInt, l);
-    }
-    int oldLinkSizeId = lc.getLinkSizeId(dimension);
-    lc.setLinkSizeId(groupId, dimension);
-    // record undo/redo and fire event
-    LayoutEvent.Component ev =
-        new LayoutEvent.Component(this, LayoutEvent.INTERVAL_LINKSIZE_CHANGED);
-    ev.setLinkSizeGroup(lc, oldLinkSizeId, groupId, dimension);
-    addChange(ev);
-    fireEvent(ev);
-  }
-
-  private boolean sameContainer(String compId1, String compId2) {
-    LayoutComponent lc1 = getLayoutComponent(compId1);
-    LayoutComponent lc2 = getLayoutComponent(compId2);
-    return lc1.getParent().equals(lc2.getParent());
-  }
-
-  void removeComponentFromLinkSizedGroup(LayoutComponent comp, int dimension) {
-    if (comp == null) {
-      return;
-    }
-    int linkId = comp.getLinkSizeId(dimension);
-    if (linkId != NOT_EXPLICITLY_DEFINED) {
-      Map<Integer, List<String>> map = dimension == HORIZONTAL ? linkSizeGroupsH : linkSizeGroupsV;
-      Integer linkIdInt = Integer.valueOf(linkId);
-      List<String> l = map.get(linkIdInt);
-      l.remove(comp.getId());
-      comp.setLinkSizeId(NOT_EXPLICITLY_DEFINED, dimension);
-      if (l.size() == 1) {
-        LayoutComponent lc = getLayoutComponent(l.get(0));
-        int oldLinkSizeId = lc.getLinkSizeId(dimension);
-        lc.setLinkSizeId(NOT_EXPLICITLY_DEFINED, dimension);
-        map.remove(linkIdInt);
-        // record undo/redo and fire event
-        LayoutEvent.Component ev =
-            new LayoutEvent.Component(this, LayoutEvent.INTERVAL_LINKSIZE_CHANGED);
-        ev.setLinkSizeGroup(lc, oldLinkSizeId, NOT_EXPLICITLY_DEFINED, dimension);
-        addChange(ev);
-        fireEvent(ev);
-      }
-      if (l.size() == 0) {
-        map.remove(linkIdInt);
-      }
-      // record undo/redo and fire event
-      LayoutEvent.Component ev =
-          new LayoutEvent.Component(this, LayoutEvent.INTERVAL_LINKSIZE_CHANGED);
-      ev.setLinkSizeGroup(comp, linkId, NOT_EXPLICITLY_DEFINED, dimension);
-      addChange(ev);
-      fireEvent(ev);
-    }
-  }
-
-  /**
-   * @return returns FALSE if components are not linked, and if so, they are linked in the same
-   *         group returns TRUE if all components are in the same linksize group returns INVALID if
-   *         none of above is true
-   */
-  public int areComponentsLinkSized(List<String> components, int dimension) {
-    if (components.size() == 1) {
-      String id = components.get(0);
-      boolean retVal = getLayoutComponent(id).isLinkSized(dimension);
-      return retVal ? TRUE : FALSE;
-    }
-    Iterator i = components.iterator();
-    List<Integer> idsFound = new ArrayList<Integer>();
-    while (i.hasNext()) {
-      String cid = (String) i.next();
-      LayoutComponent lc = getLayoutComponent(cid);
-      Integer linkSizeId = Integer.valueOf(lc.getLinkSizeId(dimension));
-      if (!idsFound.contains(linkSizeId)) {
-        idsFound.add(linkSizeId);
-      }
-      if (idsFound.size() > 2) { // components are from at least two different groups
-        return INVALID;
-      }
-    }
-    if (idsFound.size() == 1) {
-      if (idsFound.contains(Integer.valueOf(NOT_EXPLICITLY_DEFINED))) {
-        return FALSE;
-      }
-      return TRUE;
-    }
-    if (idsFound.contains(Integer.valueOf(NOT_EXPLICITLY_DEFINED))) { // == 2 elements
-      return FALSE;
-    } else {
-      return INVALID;
-    }
-  }
-
-  Map<Integer, List<String>> getLinkSizeGroups(int dimension) {
-    if (HORIZONTAL == dimension) {
-      return linkSizeGroupsH;
-    }
-    if (VERTICAL == dimension) {
-      return linkSizeGroupsV;
-    }
-    return null; // incorrect dimension passed
-  }
-
-  public void unsetSameSize(List/*<String>*/ components, int dimension) {
-    Iterator i = components.iterator();
-    while (i.hasNext()) {
-      String cid = (String) i.next();
-      LayoutComponent lc = getLayoutComponent(cid);
-      removeComponentFromLinkSizedGroup(lc, dimension);
-    }
-  }
-
-  public void setSameSize(List/*<String>*/ components, int dimension) {
-    Iterator i = components.iterator();
-    int groupId = findGroupId(components, dimension);
-    while (i.hasNext()) {
-      String cid = (String) i.next();
-      LayoutComponent lc = getLayoutComponent(cid);
-      addComponentToLinkSizedGroup(groupId, lc.getId(), dimension);
-    }
-  }
-
-  private int findGroupId(List/*<String*/ components, int dimension) {
-    Iterator i = components.iterator();
-    while (i.hasNext()) {
-      String cid = (String) i.next();
-      LayoutComponent lc = getLayoutComponent(cid);
-      if (lc.isLinkSized(dimension)) {
-        return lc.getLinkSizeId(dimension);
-      }
-    }
-    return ++maxLinkGroupId;
-  }
+	// map String component Id -> LayoutComponent instance
+	private final Map<String, LayoutComponent> idToComponents =
+			new HashMap<String, LayoutComponent>();
+	// list of listeners registered on LayoutModel
+	private ArrayList<Listener> listeners;
+	// layout changes recording and undo/redo
+	private boolean recordingChanges = true;
+	private boolean undoRedoInProgress;
+	private int changeMark;
+	private int oldestMark;
+	private final int changeCountHardLimit = 10000;
+	private final Map<Integer, LayoutEvent> undoMap = new HashMap<Integer, LayoutEvent>(500);
+	private final Map<Integer, LayoutEvent> redoMap = new HashMap<Integer, LayoutEvent>(100);
+	private LayoutUndoableEdit lastUndoableEdit;
+	// remembers whether the model was corrected/upgraded during loading
+	private boolean corrected;
+
+	// -----
+	/**
+	 * Basic mapping method. Returns LayoutComponent for given Id.
+	 *
+	 * @return LayoutComponent of given Id, null if there is no such component registered in the model
+	 */
+	public LayoutComponent getLayoutComponent(String compId) {
+		return idToComponents.get(compId);
+	}
+
+	public void addRootComponent(LayoutComponent comp) {
+		addComponent(comp, null, -1);
+	}
+
+	public void removeComponent(String compId, boolean fromModel) {
+		LayoutComponent comp = getLayoutComponent(compId);
+		if (comp != null) {
+			removeComponentAndIntervals(comp, fromModel);
+		}
+	}
+
+	/**
+	 * @return false if the component does not exist in the layout model
+	 */
+	public boolean changeComponentToContainer(String componentId) {
+		LayoutComponent component = getLayoutComponent(componentId);
+		if (component != null) {
+			setLayoutContainer(component, true);
+			return true;
+		}
+		return false;
+	}
+
+	/**
+	 * Changes a container to a component (that cannot contain sub-components). All its current
+	 * sub-components are removed. Those not being containers are also removed from the model -
+	 * containers remain in model.
+	 *
+	 * @return false if the component does not exist in the layout model
+	 */
+	public boolean changeContainerToComponent(String componentId) {
+		LayoutComponent component = getLayoutComponent(componentId);
+		if (component == null) {
+			return false;
+		}
+		// remove subcomponents
+		for (int i = component.getSubComponentCount() - 1; i >= 0; i--) {
+			LayoutComponent sub = component.getSubComponent(i);
+			if (sub.isLayoutContainer()) {
+				// subcontainer stays in layout model, but need to remove its
+				// layout interval from parent layout (now invalid)
+				removeComponentAndIntervals(sub, false);
+			} else {
+				// remove from layout model, don't have to remove from layout
+				// (thrown away as a whole)
+				removeComponent(sub, true);
+			}
+		}
+		// cancel container (also disconnects its layout)
+		setLayoutContainer(component, false);
+		// container changed to component can stay in model only if it has some parent
+		if (component.getParent() == null) {
+			removeComponent(component, true);
+		}
+		return true;
+	}
+
+	// -----
+	void registerComponent(LayoutComponent comp, boolean recursive) {
+		registerComponentImpl(comp);
+		if (recursive && comp.isLayoutContainer()) {
+			for (LayoutComponent subComp : comp.getSubcomponents()) {
+				registerComponent(subComp, recursive);
+			}
+		}
+	}
+
+	void registerComponentImpl(LayoutComponent comp) {
+		LayoutComponent lc = idToComponents.put(comp.getId(), comp);
+		if (lc != comp) {
+			// record undo/redo and fire event
+			LayoutEvent.Component ev = new LayoutEvent.Component(this, LayoutEvent.COMPONENT_REGISTERED);
+			ev.setComponent(comp);
+			addChange(ev);
+			fireEvent(ev);
+		} // else noop => don't need change event
+	}
+
+	void unregisterComponent(LayoutComponent comp, boolean recursive) {
+		if (recursive && comp.isLayoutContainer()) {
+			for (LayoutComponent subComp : comp.getSubcomponents()) {
+				unregisterComponent(subComp, recursive);
+			}
+		}
+		removeComponentFromLinkSizedGroup(comp, HORIZONTAL);
+		removeComponentFromLinkSizedGroup(comp, VERTICAL);
+		unregisterComponentImpl(comp);
+	}
+
+	void unregisterComponentImpl(LayoutComponent comp) {
+		LayoutComponent lc = idToComponents.remove(comp.getId());
+		if (lc != null) {
+			// record undo/redo and fire event
+			LayoutEvent.Component ev =
+					new LayoutEvent.Component(this, LayoutEvent.COMPONENT_UNREGISTERED);
+			ev.setComponent(comp);
+			addChange(ev);
+			fireEvent(ev);
+		} // else noop => don't need change event
+	}
+
+	public void changeComponentId(LayoutComponent comp, String newId) {
+		for (int i = 0; i < DIM_COUNT; i++) {
+			Integer linkIdInt = Integer.valueOf(comp.getLinkSizeId(i));
+			List<String> l = getLinkSizeGroups(i).get(linkIdInt);
+			if (l != null) {
+				int oldIndex = l.indexOf(comp.getId());
+				l.remove(comp.getId());
+				l.add(oldIndex, newId);
+			}
+		}
+		unregisterComponentImpl(comp);
+		comp.setId(newId);
+		registerComponentImpl(comp);
+	}
+
+	void replaceComponent(LayoutComponent comp, LayoutComponent substComp) {
+		assert substComp.getParent() == null;
+		for (int i = 0; i < DIM_COUNT; i++) {
+			LayoutInterval interval = comp.getLayoutInterval(i);
+			LayoutInterval substInt = substComp.getLayoutInterval(i);
+			assert substInt.getParent() == null;
+			setIntervalAlignment(substInt, interval.getRawAlignment());
+			setIntervalSize(
+					substInt,
+					interval.getMinimumSize(),
+					interval.getPreferredSize(),
+					interval.getMaximumSize());
+			LayoutInterval parentInt = interval.getParent();
+			if (parentInt != null) {
+				int index = removeInterval(interval);
+				addInterval(substInt, parentInt, index);
+			}
+		}
+		LayoutComponent parent = comp.getParent();
+		if (parent != null) {
+			int index = removeComponentImpl(comp);
+			addComponentImpl(substComp, parent, index);
+		}
+		unregisterComponentImpl(comp);
+		registerComponentImpl(substComp);
+	}
+
+	Iterator getAllComponents() {
+		return idToComponents.values().iterator();
+	}
+
+	// Note this method does not care about adding the layout intervals of the
+	// component, it must be done in advance.
+	public void addComponent(LayoutComponent component, LayoutComponent parent, int index) {
+		addComponentImpl(component, parent, index);
+		registerComponent(component, true);
+	}
+
+	void addComponentImpl(LayoutComponent component, LayoutComponent parent, int index) {
+		assert component.getParent() == null;
+		if (parent != null) {
+			assert getLayoutComponent(parent.getId()) == parent;
+			index = parent.addComponent(component, index);
+		} else {
+			assert component.isLayoutContainer();
+		}
+		// record undo/redo and fire event
+		LayoutEvent.Component ev = new LayoutEvent.Component(this, LayoutEvent.COMPONENT_ADDED);
+		ev.setComponent(component, parent, index);
+		addChange(ev);
+		fireEvent(ev);
+	}
+
+	// Low level removal - removes the component from parent, unregisters it,
+	// records the change for undo/redo, and fires an event. Does nothing to
+	// the layout intervals of the component.
+	void removeComponent(LayoutComponent component, boolean fromModel) {
+		removeComponentImpl(component);
+		if (fromModel && getLayoutComponent(component.getId()) != null) {
+			unregisterComponent(component, true);
+		}
+	}
+
+	int removeComponentImpl(LayoutComponent component) {
+		int index;
+		LayoutComponent parent = component.getParent();
+		if (parent != null) {
+			index = parent.removeComponent(component);
+		} else {
+			return -1; // the removal operation is "noop"
+		}
+		// record undo/redo and fire event
+		LayoutEvent.Component ev = new LayoutEvent.Component(this, LayoutEvent.COMPONENT_REMOVED);
+		ev.setComponent(component, parent, index);
+		addChange(ev);
+		fireEvent(ev);
+		return index;
+	}
+
+	void removeComponentAndIntervals(LayoutComponent comp, boolean fromModel) {
+		if (comp.getParent() != null) {
+			for (int i = 0; i < DIM_COUNT; i++) {
+				LayoutInterval interval = comp.getLayoutInterval(i);
+				if (interval.getParent() != null) {
+					removeInterval(interval);
+				}
+			}
+		}
+		removeComponent(comp, fromModel);
+	}
+
+	LayoutInterval[] addNewLayoutRoots(LayoutComponent container) {
+		LayoutInterval[] newRoots = container.addNewLayoutRoots();
+		// record undo/redo (don't fire event)
+		LayoutEvent.Component ev = new LayoutEvent.Component(this, LayoutEvent.LAYOUT_ROOTS_ADDED);
+		ev.setLayoutRoots(container, newRoots, -1);
+		addChange(ev);
+		return newRoots;
+	}
+
+	LayoutInterval[] removeLayoutRoots(LayoutComponent container, LayoutInterval oneRoot) {
+		LayoutInterval[] roots = container.getLayoutRoots(oneRoot);
+		if (roots != null) {
+			int index = container.removeLayoutRoots(roots);
+			// record undo/redo (don't fire event)
+			LayoutEvent.Component ev = new LayoutEvent.Component(this, LayoutEvent.LAYOUT_ROOTS_REMOVED);
+			ev.setLayoutRoots(container, roots, index);
+			addChange(ev);
+		}
+		return roots;
+	}
+
+	void addInterval(LayoutInterval interval, LayoutInterval parent, int index) {
+		assert interval.getParent() == null;
+		index = parent.add(interval, index);
+		// record undo/redo and fire event
+		LayoutEvent.Interval ev = new LayoutEvent.Interval(this, LayoutEvent.INTERVAL_ADDED);
+		ev.setInterval(interval, parent, index);
+		addChange(ev);
+		fireEvent(ev);
+	}
+
+	// Low level removal - removes the interval from parent, records the
+	// change for undo/redo, and fires an event.
+	int removeInterval(LayoutInterval interval) {
+		LayoutInterval parent = interval.getParent();
+		int index = parent.remove(interval);
+		// record undo/redo and fire event
+		LayoutEvent.Interval ev = new LayoutEvent.Interval(this, LayoutEvent.INTERVAL_REMOVED);
+		ev.setInterval(interval, parent, index);
+		addChange(ev);
+		fireEvent(ev);
+		return index;
+	}
+
+	LayoutInterval removeInterval(LayoutInterval parent, int index) {
+		LayoutInterval interval = parent.remove(index);
+		// record undo/redo and fire event
+		LayoutEvent.Interval ev = new LayoutEvent.Interval(this, LayoutEvent.INTERVAL_REMOVED);
+		ev.setInterval(interval, parent, index);
+		addChange(ev);
+		fireEvent(ev);
+		return interval;
+	}
+
+	void changeIntervalAttribute(LayoutInterval interval, int attribute, boolean set) {
+		int oldAttributes = interval.getAttributes();
+		if (set) {
+			interval.setAttribute(attribute);
+		} else {
+			interval.unsetAttribute(attribute);
+		}
+		int newAttributes = interval.getAttributes();
+		// record undo/redo (don't fire event)
+		LayoutEvent.Interval ev =
+				new LayoutEvent.Interval(this, LayoutEvent.INTERVAL_ATTRIBUTES_CHANGED);
+		ev.setAttributes(interval, oldAttributes, newAttributes);
+		addChange(ev);
+	}
+
+	void setIntervalAlignment(LayoutInterval interval, int alignment) {
+		int oldAlignment = interval.getRawAlignment();
+		interval.setAlignment(alignment);
+		// record undo/redo (don't fire event)
+		LayoutEvent.Interval ev =
+				new LayoutEvent.Interval(this, LayoutEvent.INTERVAL_ALIGNMENT_CHANGED);
+		ev.setAlignment(interval, oldAlignment, alignment);
+		addChange(ev);
+	}
+
+	void setGroupAlignment(LayoutInterval group, int alignment) {
+		int oldAlignment = group.getGroupAlignment();
+		if (alignment == oldAlignment) {
+			return;
+		}
+		group.setGroupAlignment(alignment);
+		// record undo/redo (don't fire event)
+		LayoutEvent.Interval ev = new LayoutEvent.Interval(this, LayoutEvent.GROUP_ALIGNMENT_CHANGED);
+		ev.setAlignment(group, oldAlignment, alignment);
+		addChange(ev);
+	}
+
+	void setLayoutContainer(LayoutComponent component, boolean container) {
+		boolean oldContainer = component.isLayoutContainer();
+		if (oldContainer != container) {
+			List<LayoutInterval[]> roots = component.getLayoutRoots();
+			component.setLayoutContainer(container, null);
+			// record undo/redo (don't fire event)
+			LayoutEvent.Component ev =
+					new LayoutEvent.Component(this, LayoutEvent.CONTAINER_ATTR_CHANGED);
+			ev.setContainer(component, roots);
+			addChange(ev);
+		}
+	}
+
+	public void setIntervalSize(LayoutInterval interval, int min, int pref, int max) {
+		int oldMin = interval.getMinimumSize();
+		int oldPref = interval.getPreferredSize();
+		int oldMax = interval.getMaximumSize();
+		if (min == oldMin && pref == oldPref && max == oldMax) {
+			return; // no change
+		}
+		interval.setSizes(min, pref, max);
+		if (interval.isComponent()) {
+			LayoutComponent comp = interval.getComponent();
+			boolean horizontal = interval == comp.getLayoutInterval(HORIZONTAL);
+			if (oldMin != min) {
+				comp.firePropertyChange(
+						horizontal ? PROP_HORIZONTAL_MIN_SIZE : PROP_VERTICAL_MIN_SIZE,
+								Integer.valueOf(oldMin),
+								Integer.valueOf(min));
+			}
+			if (oldPref != pref) {
+				comp.firePropertyChange(
+						horizontal ? PROP_HORIZONTAL_PREF_SIZE : PROP_VERTICAL_PREF_SIZE,
+								Integer.valueOf(oldPref),
+								Integer.valueOf(pref));
+			}
+			if (oldMax != max) {
+				comp.firePropertyChange(
+						horizontal ? PROP_HORIZONTAL_MAX_SIZE : PROP_VERTICAL_MAX_SIZE,
+								Integer.valueOf(oldMax),
+								Integer.valueOf(max));
+			}
+		}
+		// record undo/redo (don't fire event)
+		LayoutEvent.Interval ev = new LayoutEvent.Interval(this, LayoutEvent.INTERVAL_SIZE_CHANGED);
+		ev.setSize(interval, oldMin, oldPref, oldMax, min, pref, max);
+		addChange(ev);
+	}
+
+	public void setPaddingType(LayoutInterval interval, PaddingType paddingType) {
+		PaddingType oldPadding = interval.getPaddingType();
+		if (oldPadding != paddingType) {
+			interval.setPaddingType(paddingType);
+			// record undo/redo (don't fire event)
+			LayoutEvent.Interval ev =
+					new LayoutEvent.Interval(this, LayoutEvent.INTERVAL_PADDING_TYPE_CHANGED);
+			ev.setPaddingType(interval, oldPadding, paddingType);
+			addChange(ev);
+		}
+	}
+
+	/**
+	 * Does a non-recursive copy of components and layout of given source container. Assuming the
+	 * target container is empty (or does not exist yet). LayoutComponent instances are created
+	 * automatically as needed, using the provided IDs.
+	 *
+	 * @param sourceModel
+	 *          the source LayoutModel
+	 * @param sourceContainerId
+	 *          ID of the source container
+	 * @param sourceToTargetId
+	 *          mapping between the original and the copied components' IDs
+	 * @param targetContainerId
+	 *          ID of the target container
+	 */
+	public void copyContainerLayout(LayoutModel sourceModel,
+			String sourceContainerId,
+			Map<String, String> sourceToTargetId,
+			String targetContainerId) {
+		LayoutComponent sourceContainer = sourceModel.getLayoutComponent(sourceContainerId);
+		LayoutComponent targetContainer = getLayoutComponent(targetContainerId);
+		if (targetContainer == null) {
+			targetContainer = new LayoutComponent(targetContainerId, true);
+			addRootComponent(targetContainer);
+		} else if (!targetContainer.isLayoutContainer()) {
+			changeComponentToContainer(targetContainerId);
+		}
+		copyContainerLayout(sourceContainer, sourceToTargetId, targetContainer);
+	}
+
+	void copyContainerLayout(LayoutComponent sourceContainer,
+			Map<String, String> sourceToTargetId,
+			LayoutComponent targetContainer) {
+		// Create LayoutComponents
+		for (LayoutComponent sourceComp : sourceContainer.getSubcomponents()) {
+			String targetId = sourceToTargetId.get(sourceComp.getId());
+			LayoutComponent targetComp = getLayoutComponent(targetId);
+			if (targetComp == null) {
+				targetComp = new LayoutComponent(targetId, sourceComp.isLayoutContainer());
+			}
+			if (targetComp.getParent() == null) {
+				addComponent(targetComp, targetContainer, -1);
+			}
+		}
+		// Copy LayoutIntervals
+		int i = 0;
+		for (LayoutInterval[] sourceRoots : sourceContainer.getLayoutRoots()) {
+			if (i == targetContainer.getLayoutRootCount()) {
+				addNewLayoutRoots(targetContainer);
+			}
+			for (int dim = 0; dim < DIM_COUNT; dim++) {
+				copySubIntervals(sourceRoots[dim], targetContainer.getLayoutRoot(i, dim), sourceToTargetId);
+			}
+			i++;
+		}
+	}
+
+	private void copySubIntervals(LayoutInterval sourceInterval,
+			LayoutInterval targetInterval,
+			Map/*<String,String>*/ sourceToTargetIds) {
+		Iterator iter = sourceInterval.getSubIntervals();
+		while (iter.hasNext()) {
+			LayoutInterval sourceSub = (LayoutInterval) iter.next();
+			LayoutInterval clone = null;
+			if (sourceSub.isComponent()) {
+				String compId = (String) sourceToTargetIds.get(sourceSub.getComponent().getId());
+				LayoutComponent comp = getLayoutComponent(compId);
+				int dimension = sourceSub == sourceSub.getComponent().getLayoutInterval(HORIZONTAL)
+						? HORIZONTAL
+								: VERTICAL;
+				clone = comp.getLayoutInterval(dimension);
+			}
+			LayoutInterval targetSub = LayoutInterval.cloneInterval(sourceSub, clone);
+			if (sourceSub.isGroup()) {
+				copySubIntervals(sourceSub, targetSub, sourceToTargetIds);
+			}
+			addInterval(targetSub, targetInterval, -1);
+		}
+	}
+
+	// assuming target container is empty
+	void moveContainerLayout(LayoutComponent sourceContainer, LayoutComponent targetContainer) {
+		if (!sourceContainer.isLayoutContainer()
+				|| !targetContainer.isLayoutContainer()
+				|| targetContainer.getSubComponentCount() > 0) {
+			throw new IllegalArgumentException();
+		}
+		while (sourceContainer.getSubComponentCount() > 0) {
+			LayoutComponent sub = sourceContainer.getSubComponent(0);
+			removeComponent(sub, false);
+			addComponent(sub, targetContainer, -1);
+		}
+		List<LayoutInterval[]> sourceRoots = sourceContainer.getLayoutRoots();
+		sourceContainer.setLayoutRoots(null); // clear
+		LayoutEvent.Component ev = new LayoutEvent.Component(this, LayoutEvent.LAYOUT_ROOTS_CHANGED);
+		ev.setLayoutRoots(sourceContainer, sourceRoots, null);
+		addChange(ev);
+		targetContainer.setLayoutRoots(sourceRoots);
+		ev = new LayoutEvent.Component(this, LayoutEvent.LAYOUT_ROOTS_CHANGED);
+		ev.setLayoutRoots(targetContainer, null, sourceRoots);
+		addChange(ev);
+	}
+
+	static LayoutInterval[] createIntervalsFromBounds(Map<LayoutComponent, Rectangle> compToBounds) {
+		RegionInfo region = new RegionInfo(compToBounds);
+		region.calculateIntervals();
+		LayoutInterval[] result = new LayoutInterval[DIM_COUNT];
+		for (int dim = 0; dim < DIM_COUNT; dim++) {
+			result[dim] = region.getInterval(dim);
+		}
+		return result;
+	}
+
+	private static class RegionInfo {
+		private LayoutInterval horizontal = null;
+		private LayoutInterval vertical = null;
+		private final Map<LayoutComponent, Rectangle> compToBounds;
+		private int minx;
+		private int maxx;
+		private int miny;
+		private int maxy;
+		private int dimension;
+
+		public RegionInfo(Map<LayoutComponent, Rectangle> compToBounds) {
+			this.compToBounds = compToBounds;
+			dimension = -1;
+			minx = miny = 0;
+			updateRegionBounds();
+		}
+
+		private RegionInfo(Map<LayoutComponent, Rectangle> compToBounds, int dimension) {
+			this.compToBounds = compToBounds;
+			this.dimension = dimension;
+			minx = miny = Short.MAX_VALUE;
+			updateRegionBounds();
+		}
+
+		private void updateRegionBounds() {
+			maxy = maxx = Short.MIN_VALUE;
+			for (Rectangle bounds : compToBounds.values()) {
+				minx = Math.min(minx, bounds.x);
+				miny = Math.min(miny, bounds.y);
+				maxx = Math.max(maxx, bounds.x + bounds.width);
+				maxy = Math.max(maxy, bounds.y + bounds.height);
+			}
+		}
+
+		public void calculateIntervals() {
+			if (compToBounds.size() == 1) {
+				Map.Entry<LayoutComponent, Rectangle> e = compToBounds.entrySet().iterator().next();
+				LayoutComponent comp = e.getKey();
+				Rectangle bounds = e.getValue();
+				horizontal = comp.getLayoutInterval(HORIZONTAL);
+				horizontal = prefixByGap(horizontal, bounds.x - minx);
+				vertical = comp.getLayoutInterval(VERTICAL);
+				vertical = prefixByGap(vertical, bounds.y - miny);
+				return;
+			}
+			int effDim = -1;
+			List<Map<LayoutComponent, Rectangle>> parts = null;
+			Map<LayoutComponent, Rectangle> removedCompToBounds = null;
+			do {
+				boolean remove = dimension == -1 && effDim == HORIZONTAL || dimension != -1 && effDim != -1;
+				if (remove) {
+					effDim = -1;
+				}
+				if (dimension == -1) {
+					switch (effDim) {
+					case -1 :
+						effDim = VERTICAL;
+						break;
+					case VERTICAL :
+						effDim = HORIZONTAL;
+						break;
+					case HORIZONTAL :
+						remove = true;
+					}
+				} else {
+					effDim = dimension;
+				}
+				if (remove) { // no cut found, remove some component
+					Map.Entry<LayoutComponent, Rectangle> e = compToBounds.entrySet().iterator().next();
+					LayoutComponent comp = e.getKey();
+					Rectangle bounds = e.getValue();
+					if (removedCompToBounds == null) {
+						removedCompToBounds = new HashMap<LayoutComponent, Rectangle>();
+					}
+					removedCompToBounds.put(comp, bounds);
+					compToBounds.remove(comp);
+				}
+				Set<Integer> cutSet = createPossibleCuts(effDim);
+				parts = cutIntoParts(cutSet, effDim);
+			} while (!compToBounds.isEmpty() && parts.isEmpty());
+			dimension = effDim;
+			List<RegionInfo> regions = new LinkedList<RegionInfo>();
+			Iterator<Map<LayoutComponent, Rectangle>> iter = parts.iterator();
+			while (iter.hasNext()) {
+				Map<LayoutComponent, Rectangle> part = iter.next();
+				RegionInfo region = new RegionInfo(part, dimension == HORIZONTAL ? VERTICAL : HORIZONTAL);
+				region.calculateIntervals();
+				regions.add(region);
+			}
+			mergeSubRegions(regions, dimension);
+			if (removedCompToBounds != null) {
+				for (int dim = HORIZONTAL; dim <= VERTICAL; dim++) {
+					LayoutInterval parent = dim == HORIZONTAL ? horizontal : vertical;
+					if (!parent.isParallel()) {
+						LayoutInterval parGroup = new LayoutInterval(PARALLEL);
+						parGroup.add(parent, -1);
+						if (dim == HORIZONTAL) {
+							horizontal = parGroup;
+						} else {
+							vertical = parGroup;
+						}
+						parent = parGroup;
+					}
+					for (Map.Entry<LayoutComponent, Rectangle> entry : removedCompToBounds.entrySet()) {
+						LayoutComponent comp = entry.getKey();
+						Rectangle bounds = entry.getValue();
+						LayoutInterval interval = comp.getLayoutInterval(dim);
+						int gap = dim == HORIZONTAL ? bounds.x - minx : bounds.y - miny;
+						interval = prefixByGap(interval, gap);
+						parent.add(interval, -1);
+					}
+				}
+			}
+		}
+
+		private SortedSet<Integer> createPossibleCuts(int dimension) {
+			SortedSet<Integer> cutSet = new TreeSet<Integer>();
+			for (Rectangle bounds : compToBounds.values()) {
+				// Leading lines are sufficient
+				int leading = dimension == HORIZONTAL ? bounds.x : bounds.y;
+				cutSet.add(Integer.valueOf(leading));
+			}
+			cutSet.add(Integer.valueOf(dimension == HORIZONTAL ? maxx : maxy));
+			return cutSet;
+		}
+
+		private List<Map<LayoutComponent, Rectangle>> cutIntoParts(Set<Integer> cutSet, int dimension) {
+			List<Map<LayoutComponent, Rectangle>> parts =
+					new LinkedList<Map<LayoutComponent, Rectangle>>();
+			Iterator<Integer> iter = cutSet.iterator();
+			while (iter.hasNext()) {
+				Integer cutInt = iter.next();
+				int cut = cutInt.intValue();
+				boolean isCut = true;
+				Map<LayoutComponent, Rectangle> preCompToBounds = new HashMap<LayoutComponent, Rectangle>();
+				Map<LayoutComponent, Rectangle> postCompToBounds =
+						new HashMap<LayoutComponent, Rectangle>();
+				Iterator<Map.Entry<LayoutComponent, Rectangle>> it = compToBounds.entrySet().iterator();
+				while (isCut && it.hasNext()) {
+					Map.Entry<LayoutComponent, Rectangle> entry = it.next();
+					LayoutComponent comp = entry.getKey();
+					Rectangle bounds = entry.getValue();
+					int leading = dimension == HORIZONTAL ? bounds.x : bounds.y;
+					int trailing = leading + (dimension == HORIZONTAL ? bounds.width : bounds.height);
+					if (leading >= cut) {
+						postCompToBounds.put(comp, bounds);
+					} else if (trailing <= cut) {
+						preCompToBounds.put(comp, bounds);
+					} else {
+						isCut = false;
+					}
+				}
+				if (isCut && !preCompToBounds.isEmpty()
+						// the last cut candidate (end of the region) cannot be the first cut
+						&& (!parts.isEmpty() || preCompToBounds.size() != compToBounds.size())) {
+					compToBounds.keySet().removeAll(preCompToBounds.keySet());
+					parts.add(preCompToBounds);
+				}
+			}
+			return parts;
+		}
+
+		private void mergeSubRegions(List regions, int dimension) {
+			if (regions.size() == 0) {
+				horizontal = new LayoutInterval(PARALLEL);
+				vertical = new LayoutInterval(PARALLEL);
+				return;
+			}
+			LayoutInterval seqGroup = new LayoutInterval(SEQUENTIAL);
+			LayoutInterval parGroup = new LayoutInterval(PARALLEL);
+			int lastSeqTrailing = dimension == HORIZONTAL ? minx : miny;
+			Iterator iter = regions.iterator();
+			while (iter.hasNext()) {
+				RegionInfo region = (RegionInfo) iter.next();
+				LayoutInterval seqInterval;
+				LayoutInterval parInterval;
+				int seqGap;
+				int parGap;
+				if (dimension == HORIZONTAL) {
+					seqInterval = region.horizontal;
+					parInterval = region.vertical;
+					parGap = region.miny - miny;
+					seqGap = region.minx - lastSeqTrailing;
+					lastSeqTrailing = region.maxx;
+				} else {
+					seqInterval = region.vertical;
+					parInterval = region.horizontal;
+					parGap = region.minx - minx;
+					seqGap = region.miny - lastSeqTrailing;
+					lastSeqTrailing = region.maxy;
+				}
+				// PENDING optimization of the resulting layout model
+				if (seqGap > 0) {
+					LayoutInterval gap = new LayoutInterval(SINGLE);
+					gap.setSize(seqGap);
+					seqGroup.add(gap, -1);
+				}
+				seqGroup.add(seqInterval, -1);
+				parInterval = prefixByGap(parInterval, parGap);
+				parGroup.add(parInterval, -1);
+			}
+			if (dimension == HORIZONTAL) {
+				horizontal = seqGroup;
+				vertical = parGroup;
+			} else {
+				horizontal = parGroup;
+				vertical = seqGroup;
+			}
+		}
+
+		private LayoutInterval prefixByGap(LayoutInterval interval, int size) {
+			if (size > 0) {
+				LayoutInterval gap = new LayoutInterval(SINGLE);
+				gap.setSize(size);
+				if (interval.isSequential()) {
+					interval.add(gap, 0);
+				} else {
+					LayoutInterval group = new LayoutInterval(SEQUENTIAL);
+					group.add(gap, -1);
+					group.add(interval, -1);
+					interval = group;
+				}
+			}
+			return interval;
+		}
+
+		public LayoutInterval getInterval(int dimension) {
+			return dimension == HORIZONTAL ? horizontal : vertical;
+		}
+	}
+
+	// -----
+	// listeners registration, firing methods (no synchronization)
+	void addListener(Listener l) {
+		if (listeners == null) {
+			listeners = new ArrayList<Listener>();
+		} else {
+			listeners.remove(l);
+		}
+		listeners.add(l);
+	}
+
+	void removeListener(Listener l) {
+		if (listeners != null) {
+			listeners.remove(l);
+		}
+	}
+
+	private void fireEvent(LayoutEvent event) {
+		if (listeners != null && listeners.size() > 0) {
+			Iterator it = ((List) listeners.clone()).iterator();
+			while (it.hasNext()) {
+				((Listener) it.next()).layoutChanged(event);
+			}
+		}
+	}
+
+	/**
+	 * Listener interface for changes in the layout model.
+	 */
+	interface Listener {
+		void layoutChanged(LayoutEvent ev);
+	}
+
+	// -----
+	// changes recording and undo/redo
+	public boolean isChangeRecording() {
+		return recordingChanges;
+	}
+
+	public void setChangeRecording(boolean record) {
+		recordingChanges = record;
+	}
+
+	boolean isUndoRedoInProgress() {
+		return undoRedoInProgress;
+	}
+
+	public Object getChangeMark() {
+		return Integer.valueOf(changeMark);
+	}
+
+	public void endUndoableEdit() {
+		if (lastUndoableEdit != null) {
+			lastUndoableEdit.endMark = getChangeMark();
+			lastUndoableEdit = null;
+		}
+	}
+
+	public boolean isUndoableEditInProgress() {
+		return lastUndoableEdit != null;
+	}
+
+	public UndoableEdit getUndoableEdit() {
+		if (recordingChanges && !undoRedoInProgress) {
+			LayoutUndoableEdit undoEdit = new LayoutUndoableEdit();
+			undoEdit.startMark = getChangeMark();
+			endUndoableEdit();
+			lastUndoableEdit = undoEdit;
+			return undoEdit;
+		}
+		return null;
+	}
+
+	private void addChange(LayoutEvent change) {
+		if (recordingChanges && !undoRedoInProgress) {
+			redoMap.clear();
+			if (undoMap.size() == 0) {
+				oldestMark = changeMark;
+			}
+			undoMap.put(Integer.valueOf(changeMark++), change);
+			while (undoMap.size() > changeCountHardLimit) {
+				undoMap.remove(Integer.valueOf(oldestMark++));
+			}
+		}
+	}
+
+	boolean undo(Object startMark, Object endMark) {
+		assert !undoRedoInProgress;
+		if (!undoMap.containsKey(startMark)) {
+			return false; // the mark is not present in the undo queue
+		}
+		int start = ((Integer) startMark).intValue();
+		int end = ((Integer) endMark).intValue();
+		undoRedoInProgress = true;
+		while (end > start) {
+			Integer key = Integer.valueOf(--end);
+			LayoutEvent change = undoMap.remove(key);
+			if (change != null) {
+				change.undo();
+				redoMap.put(key, change);
+			}
+		}
+		undoRedoInProgress = false;
+		return true;
+	}
+
+	boolean redo(Object startMark, Object endMark) {
+		assert !undoRedoInProgress;
+		if (!redoMap.containsKey(startMark)) {
+			return false; // the mark is not present in the redo queue
+		}
+		int start = ((Integer) startMark).intValue();
+		int end = ((Integer) endMark).intValue();
+		undoRedoInProgress = true;
+		while (start < end) {
+			Integer key = Integer.valueOf(start++);
+			LayoutEvent change = redoMap.remove(key);
+			if (change != null) {
+				change.redo();
+				undoMap.put(key, change);
+			}
+		}
+		undoRedoInProgress = false;
+		return true;
+	}
+
+	void releaseChanges(Object fromMark, Object toMark) {
+		int m1 = ((Integer) fromMark).intValue();
+		int m2 = ((Integer) toMark).intValue();
+		while (m1 < m2) {
+			Object m = Integer.valueOf(m1);
+			undoMap.remove(m);
+			redoMap.remove(m);
+			m1++;
+		}
+	}
+
+	/**
+	 * UndoableEdit implementation for series of changes in layout model.
+	 */
+	private class LayoutUndoableEdit extends AbstractUndoableEdit {
+		private static final long serialVersionUID = 1L;
+		private Object startMark;
+		private Object endMark;
+
+		@Override
+		public void undo() throws CannotUndoException {
+			super.undo();
+			if (endMark == null) {
+				assert lastUndoableEdit == this;
+				endMark = getChangeMark();
+				lastUndoableEdit = null;
+			}
+			LayoutModel.this.undo(startMark, endMark);
+		}
+
+		@Override
+		public void redo() throws CannotRedoException {
+			super.redo();
+			LayoutModel.this.redo(startMark, endMark);
+		}
+
+		@Override
+		public String getUndoPresentationName() {
+			return ""; // NOI18N
+		}
+
+		@Override
+		public String getRedoPresentationName() {
+			return ""; // NOI18N
+		}
+
+		@Override
+		public void die() {
+			releaseChanges(startMark, endMark != null ? endMark : getChangeMark());
+		}
+	}
+
+	/**
+	 * Returns dump of the layout model. For debugging and testing purposes only.
+	 *
+	 * @return dump of the layout model.
+	 */
+	public String dump(final Map<String, String> idToNameMap) {
+		Set<LayoutComponent> roots = new TreeSet<LayoutComponent>(new Comparator<LayoutComponent>() {
+			// comparator to ensure stable order of dump; according to tree
+			// hierarchy, order within container, name
+			@Override
+			public int compare(LayoutComponent lc1, LayoutComponent lc2) {
+				if (lc1 == lc2) {
+					return 0;
+				}
+				// parent always first
+				if (lc1.isParentOf(lc2)) {
+					return -1;
+				}
+				if (lc2.isParentOf(lc1)) {
+					return 1;
+				}
+				// get the same level under common parent
+				LayoutComponent parent = LayoutComponent.getCommonParent(lc1, lc2);
+				while (lc1.getParent() != parent) {
+					lc1 = lc1.getParent();
+				}
+				while (lc2.getParent() != parent) {
+					lc2 = lc2.getParent();
+				}
+				if (parent != null) { // in the same tree
+					return parent.indexOf(lc1) < parent.indexOf(lc2) ? -1 : 1;
+				} else { // in distinct trees
+					String id1 = lc1.getId();
+					String id2 = lc2.getId();
+					if (idToNameMap != null) {
+						id1 = idToNameMap.get(id1);
+						id2 = idToNameMap.get(id2);
+						if (id1 == null) {
+							return -1;
+						}
+						if (id2 == null) {
+							return 1;
+						}
+					}
+					return id1.compareTo(id2);
+				}
+			}
+		});
+		Iterator<Map.Entry<String, LayoutComponent>> iter = idToComponents.entrySet().iterator();
+		while (iter.hasNext()) {
+			Map.Entry<String, LayoutComponent> entry = iter.next();
+			LayoutComponent comp = entry.getValue();
+			if (comp.isLayoutContainer()) {
+				roots.add(comp);
+			}
+		}
+		StringBuilder sb = new StringBuilder();
+		sb.append("<LayoutModel>\n"); // NOI18N
+		Iterator rootIter = roots.iterator();
+		while (rootIter.hasNext()) {
+			LayoutComponent root = (LayoutComponent) rootIter.next();
+			String rootId = root.getId();
+			if (idToNameMap != null) {
+				rootId = idToNameMap.get(rootId);
+			}
+			if (rootId != null) {
+				sb.append("  <Root id=\"" + rootId + "\">\n"); // NOI18N
+			} else {
+				sb.append("  <Root>\n"); // NOI18N
+			}
+			sb.append(saveContainerLayout(root, idToNameMap, 2, true));
+			sb.append("  </Root>\n"); // NOI18N
+		}
+		sb.append("</LayoutModel>\n"); // NOI18N
+		return sb.toString();
+	}
+
+	/**
+	 * Returns dump of the layout interval.
+	 *
+	 * @param interval
+	 *          interval whose dump should be returned.
+	 * @param dimension
+	 *          dimension in which the layout interval resides.
+	 */
+	public String dump(LayoutInterval interval, int dimension) {
+		return LayoutPersistenceManager.dumpInterval(this, interval, dimension, 2);
+	}
+
+	/**
+	 * Saves given layout container into a String.
+	 *
+	 * @param container
+	 *          the layout container to be saved
+	 * @param idToNameMap
+	 *          map for translating component Ids to names suitable for saving
+	 * @param indent
+	 *          determines size of indentation
+	 * @param humanReadable
+	 *          determines whether constants should be replaced by human readable expressions
+	 * @return dump of the layout model of given container
+	 */
+	public String saveContainerLayout(LayoutComponent container,
+			Map<String, String> idToNameMap,
+			int indent,
+			boolean humanReadable) {
+		return LayoutPersistenceManager.saveContainer(
+				this,
+				container,
+				idToNameMap,
+				indent,
+				humanReadable);
+	}
+
+	/**
+	 * Loads the layout of the given container.
+	 *
+	 * @param containerId
+	 *          ID of the layout container to be loaded
+	 * @param layoutNodeList
+	 *          XML data to load
+	 * @param nameToIdMap
+	 *          map from component names to component IDs
+	 */
+	public void loadContainerLayout(String containerId,
+			org.w3c.dom.NodeList layoutNodeList,
+			Map<String, String> nameToIdMap) throws java.io.IOException {
+		LayoutPersistenceManager.loadContainer(this, containerId, layoutNodeList, nameToIdMap);
+	}
+
+	/**
+	 * Returns whether the model was repaired (because of some error found) or upgraded automatically
+	 * during loading. After loading, it might be a good idea to save the corrected state, so to mark
+	 * the loaded layout as modified.
+	 *
+	 * @return whether the model was changed during loading or saving
+	 */
+	public boolean wasCorrected() {
+		return corrected;
+	}
+
+	void setCorrected() {
+		corrected = true;
+	}
+
+	/*
+	 * LINKSIZE
+	 */
+	// each object in the map is a List and contains list of components within the group
+	private final Map<Integer, List<String>> linkSizeGroupsH = new HashMap<Integer, List<String>>();
+	private final Map<Integer, List<String>> linkSizeGroupsV = new HashMap<Integer, List<String>>();
+	private int maxLinkGroupId = 0;
+
+	public void addComponentToLinkSizedGroup(int groupId, String compId, int dimension) {
+		if (NOT_EXPLICITLY_DEFINED == groupId) { //
+			return;
+		}
+		if (maxLinkGroupId < groupId) {
+			maxLinkGroupId = groupId;
+		}
+		Integer groupIdInt = Integer.valueOf(groupId);
+		Map<Integer, List<String>> linkSizeGroups =
+				dimension == HORIZONTAL ? linkSizeGroupsH : linkSizeGroupsV;
+		List<String> l = linkSizeGroups.get(groupIdInt);
+		if (l != null && (l.contains(compId) || !sameContainer(compId, l.get(0)))) {
+			return;
+		}
+		addComponentToLinkSizedGroupImpl(groupId, compId, dimension);
+	}
+
+	void addComponentToLinkSizedGroupImpl(int groupId, String compId, int dimension) {
+		LayoutComponent lc = getLayoutComponent(compId);
+		Integer groupIdInt = Integer.valueOf(groupId);
+		Map<Integer, List<String>> linkSizeGroups =
+				dimension == HORIZONTAL ? linkSizeGroupsH : linkSizeGroupsV;
+		List<String> l = linkSizeGroups.get(groupIdInt);
+		if (l != null) {
+			l.add(lc.getId());
+		} else {
+			l = new ArrayList<String>();
+			l.add(lc.getId());
+			linkSizeGroups.put(groupIdInt, l);
+		}
+		int oldLinkSizeId = lc.getLinkSizeId(dimension);
+		lc.setLinkSizeId(groupId, dimension);
+		// record undo/redo and fire event
+		LayoutEvent.Component ev =
+				new LayoutEvent.Component(this, LayoutEvent.INTERVAL_LINKSIZE_CHANGED);
+		ev.setLinkSizeGroup(lc, oldLinkSizeId, groupId, dimension);
+		addChange(ev);
+		fireEvent(ev);
+	}
+
+	private boolean sameContainer(String compId1, String compId2) {
+		LayoutComponent lc1 = getLayoutComponent(compId1);
+		LayoutComponent lc2 = getLayoutComponent(compId2);
+		return lc1.getParent().equals(lc2.getParent());
+	}
+
+	void removeComponentFromLinkSizedGroup(LayoutComponent comp, int dimension) {
+		if (comp == null) {
+			return;
+		}
+		int linkId = comp.getLinkSizeId(dimension);
+		if (linkId != NOT_EXPLICITLY_DEFINED) {
+			Map<Integer, List<String>> map = dimension == HORIZONTAL ? linkSizeGroupsH : linkSizeGroupsV;
+			Integer linkIdInt = Integer.valueOf(linkId);
+			List<String> l = map.get(linkIdInt);
+			l.remove(comp.getId());
+			comp.setLinkSizeId(NOT_EXPLICITLY_DEFINED, dimension);
+			if (l.size() == 1) {
+				LayoutComponent lc = getLayoutComponent(l.get(0));
+				int oldLinkSizeId = lc.getLinkSizeId(dimension);
+				lc.setLinkSizeId(NOT_EXPLICITLY_DEFINED, dimension);
+				map.remove(linkIdInt);
+				// record undo/redo and fire event
+				LayoutEvent.Component ev =
+						new LayoutEvent.Component(this, LayoutEvent.INTERVAL_LINKSIZE_CHANGED);
+				ev.setLinkSizeGroup(lc, oldLinkSizeId, NOT_EXPLICITLY_DEFINED, dimension);
+				addChange(ev);
+				fireEvent(ev);
+			}
+			if (l.size() == 0) {
+				map.remove(linkIdInt);
+			}
+			// record undo/redo and fire event
+			LayoutEvent.Component ev =
+					new LayoutEvent.Component(this, LayoutEvent.INTERVAL_LINKSIZE_CHANGED);
+			ev.setLinkSizeGroup(comp, linkId, NOT_EXPLICITLY_DEFINED, dimension);
+			addChange(ev);
+			fireEvent(ev);
+		}
+	}
+
+	/**
+	 * @return returns FALSE if components are not linked, and if so, they are linked in the same
+	 *         group returns TRUE if all components are in the same linksize group returns INVALID if
+	 *         none of above is true
+	 */
+	public int areComponentsLinkSized(List<String> components, int dimension) {
+		if (components.size() == 1) {
+			String id = components.get(0);
+			boolean retVal = getLayoutComponent(id).isLinkSized(dimension);
+			return retVal ? TRUE : FALSE;
+		}
+		Iterator i = components.iterator();
+		List<Integer> idsFound = new ArrayList<Integer>();
+		while (i.hasNext()) {
+			String cid = (String) i.next();
+			LayoutComponent lc = getLayoutComponent(cid);
+			Integer linkSizeId = Integer.valueOf(lc.getLinkSizeId(dimension));
+			if (!idsFound.contains(linkSizeId)) {
+				idsFound.add(linkSizeId);
+			}
+			if (idsFound.size() > 2) { // components are from at least two different groups
+				return INVALID;
+			}
+		}
+		if (idsFound.size() == 1) {
+			if (idsFound.contains(Integer.valueOf(NOT_EXPLICITLY_DEFINED))) {
+				return FALSE;
+			}
+			return TRUE;
+		}
+		if (idsFound.contains(Integer.valueOf(NOT_EXPLICITLY_DEFINED))) { // == 2 elements
+			return FALSE;
+		} else {
+			return INVALID;
+		}
+	}
+
+	Map<Integer, List<String>> getLinkSizeGroups(int dimension) {
+		if (HORIZONTAL == dimension) {
+			return linkSizeGroupsH;
+		}
+		if (VERTICAL == dimension) {
+			return linkSizeGroupsV;
+		}
+		return null; // incorrect dimension passed
+	}
+
+	public void unsetSameSize(List/*<String>*/ components, int dimension) {
+		Iterator i = components.iterator();
+		while (i.hasNext()) {
+			String cid = (String) i.next();
+			LayoutComponent lc = getLayoutComponent(cid);
+			removeComponentFromLinkSizedGroup(lc, dimension);
+		}
+	}
+
+	public void setSameSize(List/*<String>*/ components, int dimension) {
+		Iterator i = components.iterator();
+		int groupId = findGroupId(components, dimension);
+		while (i.hasNext()) {
+			String cid = (String) i.next();
+			LayoutComponent lc = getLayoutComponent(cid);
+			addComponentToLinkSizedGroup(groupId, lc.getId(), dimension);
+		}
+	}
+
+	private int findGroupId(List/*<String*/ components, int dimension) {
+		Iterator i = components.iterator();
+		while (i.hasNext()) {
+			String cid = (String) i.next();
+			LayoutComponent lc = getLayoutComponent(cid);
+			if (lc.isLinkSized(dimension)) {
+				return lc.getLinkSizeId(dimension);
+			}
+		}
+		return ++maxLinkGroupId;
+	}
 }
diff --git a/org.eclipse.wb.layout.group/netbeans-src/org/netbeans/modules/form/layoutdesign/LayoutOperations.java b/org.eclipse.wb.layout.group/netbeans-src/org/netbeans/modules/form/layoutdesign/LayoutOperations.java
index 08f13b1e0..ee047c822 100644
--- a/org.eclipse.wb.layout.group/netbeans-src/org/netbeans/modules/form/layoutdesign/LayoutOperations.java
+++ b/org.eclipse.wb.layout.group/netbeans-src/org/netbeans/modules/form/layoutdesign/LayoutOperations.java
@@ -41,1383 +41,1383 @@
  * @author Tomas Pavek
  */
 class LayoutOperations implements LayoutConstants {
-  private final LayoutModel layoutModel;
-  private final VisualMapper visualMapper;
+	private final LayoutModel layoutModel;
+	private final VisualMapper visualMapper;
 
-  LayoutOperations(LayoutModel model, VisualMapper mapper) {
-    layoutModel = model;
-    visualMapper = mapper;
-  }
+	LayoutOperations(LayoutModel model, VisualMapper mapper) {
+		layoutModel = model;
+		visualMapper = mapper;
+	}
 
-  LayoutModel getModel() {
-    return layoutModel;
-  }
+	LayoutModel getModel() {
+		return layoutModel;
+	}
 
-  VisualMapper getMapper() {
-    return visualMapper;
-  }
+	VisualMapper getMapper() {
+		return visualMapper;
+	}
 
-  // -----
-  /**
-   * Extracts surroundings of given interval (placed in a sequential group). Extracted intervals are
-   * removed and go to the 'restLeading' and 'restTrailing' lists. Does not extract/remove the
-   * interval itself.
-   */
-  int extract(LayoutInterval interval,
-      int alignment,
-      boolean closed,
-      List<List> restLeading,
-      List<List> restTrailing) {
-    return extract(interval, interval, alignment, closed, restLeading, restTrailing);
-  }
+	// -----
+	/**
+	 * Extracts surroundings of given interval (placed in a sequential group). Extracted intervals are
+	 * removed and go to the 'restLeading' and 'restTrailing' lists. Does not extract/remove the
+	 * interval itself.
+	 */
+	int extract(LayoutInterval interval,
+			int alignment,
+			boolean closed,
+			List<List> restLeading,
+			List<List> restTrailing) {
+		return extract(interval, interval, alignment, closed, restLeading, restTrailing);
+	}
 
-  int extract(LayoutInterval leading,
-      LayoutInterval trailing,
-      int alignment,
-      boolean closed,
-      List<List> restLeading,
-      List<List> restTrailing) {
-    LayoutInterval seq = leading.getParent();
-    assert seq.isSequential();
-    int leadingIndex = seq.indexOf(leading);
-    int trailingIndex = seq.indexOf(trailing);
-    int count = seq.getSubIntervalCount();
-    int extractCount;
-    if (closed) {
-      extractCount = trailingIndex - leadingIndex + 1;
-    } else if (alignment != LEADING && alignment != TRAILING) {
-      extractCount = 1;
-    } else {
-      extractCount = alignment == LEADING ? count - leadingIndex : leadingIndex + 1;
-    }
-    if (extractCount < seq.getSubIntervalCount()) {
-      List<Object/*Integer or LayoutInterval*/> toRemainL = null;
-      List<Object/*Integer or LayoutInterval*/> toRemainT = null;
-      int startIndex = alignment == LEADING ? leadingIndex : leadingIndex - extractCount + 1;
-      int endIndex = alignment == LEADING ? trailingIndex + extractCount - 1 : trailingIndex;
-      Iterator it = seq.getSubIntervals();
-      for (int idx = 0; it.hasNext(); idx++) {
-        LayoutInterval li = (LayoutInterval) it.next();
-        if (idx < startIndex) {
-          if (toRemainL == null) {
-            toRemainL = new LinkedList<Object>();
-            toRemainL.add(Integer.valueOf(LayoutInterval.getEffectiveAlignment(li)));
-          }
-          toRemainL.add(li);
-        } else if (idx > endIndex) {
-          if (toRemainT == null) {
-            toRemainT = new LinkedList<Object>();
-            toRemainT.add(Integer.valueOf(LayoutInterval.getEffectiveAlignment(li)));
-          }
-          toRemainT.add(li);
-        }
-      }
-      if (toRemainL != null) {
-        it = toRemainL.iterator();
-        it.next();
-        do {
-          layoutModel.removeInterval((LayoutInterval) it.next());
-        } while (it.hasNext());
-        restLeading.add(toRemainL);
-      }
-      if (toRemainT != null) {
-        it = toRemainT.iterator();
-        it.next();
-        do {
-          layoutModel.removeInterval((LayoutInterval) it.next());
-        } while (it.hasNext());
-        restTrailing.add(toRemainT);
-      }
-    }
-    return extractCount;
-  }
+	int extract(LayoutInterval leading,
+			LayoutInterval trailing,
+			int alignment,
+			boolean closed,
+			List<List> restLeading,
+			List<List> restTrailing) {
+		LayoutInterval seq = leading.getParent();
+		assert seq.isSequential();
+		int leadingIndex = seq.indexOf(leading);
+		int trailingIndex = seq.indexOf(trailing);
+		int count = seq.getSubIntervalCount();
+		int extractCount;
+		if (closed) {
+			extractCount = trailingIndex - leadingIndex + 1;
+		} else if (alignment != LEADING && alignment != TRAILING) {
+			extractCount = 1;
+		} else {
+			extractCount = alignment == LEADING ? count - leadingIndex : leadingIndex + 1;
+		}
+		if (extractCount < seq.getSubIntervalCount()) {
+			List<Object/*Integer or LayoutInterval*/> toRemainL = null;
+			List<Object/*Integer or LayoutInterval*/> toRemainT = null;
+			int startIndex = alignment == LEADING ? leadingIndex : leadingIndex - extractCount + 1;
+			int endIndex = alignment == LEADING ? trailingIndex + extractCount - 1 : trailingIndex;
+			Iterator it = seq.getSubIntervals();
+			for (int idx = 0; it.hasNext(); idx++) {
+				LayoutInterval li = (LayoutInterval) it.next();
+				if (idx < startIndex) {
+					if (toRemainL == null) {
+						toRemainL = new LinkedList<Object>();
+						toRemainL.add(Integer.valueOf(LayoutInterval.getEffectiveAlignment(li)));
+					}
+					toRemainL.add(li);
+				} else if (idx > endIndex) {
+					if (toRemainT == null) {
+						toRemainT = new LinkedList<Object>();
+						toRemainT.add(Integer.valueOf(LayoutInterval.getEffectiveAlignment(li)));
+					}
+					toRemainT.add(li);
+				}
+			}
+			if (toRemainL != null) {
+				it = toRemainL.iterator();
+				it.next();
+				do {
+					layoutModel.removeInterval((LayoutInterval) it.next());
+				} while (it.hasNext());
+				restLeading.add(toRemainL);
+			}
+			if (toRemainT != null) {
+				it = toRemainT.iterator();
+				it.next();
+				do {
+					layoutModel.removeInterval((LayoutInterval) it.next());
+				} while (it.hasNext());
+				restTrailing.add(toRemainT);
+			}
+		}
+		return extractCount;
+	}
 
-  /**
-   * Adds parallel content of a group specified in List to given sequence. Used to create a
-   * remainder parallel group to a group of aligned intervals.
-   *
-   * @param list
-   *          the content of the group, output from 'extract' method
-   * @param seq
-   *          a sequential group where to add to
-   * @param index
-   *          the index in the sequence where to add
-   * @param dimension
-   * @param position
-   *          the position of the remainder group relative to the main group (LEADING or TRAILING)
-   *          // * @param mainAlignment effective alignment of the main group (LEADING or // *
-   *          TRAILING or something else meaning not aligned)
-   * @return parallel group if it has been created, or null
-   */
-  LayoutInterval addGroupContent(List<List> list,
-      LayoutInterval seq,
-      int index,
-      int dimension,
-      int position/*, int mainAlignment*/) {
-    assert seq.isSequential() && (position == LEADING || position == TRAILING);
-    boolean resizingFillGap = false;
-    LayoutInterval commonGap = null;
-    boolean onlyGaps = true;
-    // Remove sequences just with one gap
-    for (int i = list.size() - 1; i >= 0; i--) {
-      List subList = list.get(i);
-      assert subList.size() >= 2;
-      if (subList.size() == 2) { // there is just one interval
-        LayoutInterval li = (LayoutInterval) subList.get(1);
-        if (li.isEmptySpace()) {
-          if (commonGap == null || li.getPreferredSize() > commonGap.getPreferredSize()) {
-            commonGap = li;
-          }
-          if (LayoutInterval.canResize(li)) {
-            resizingFillGap = true;
-          }
-          list.remove(i);
-        } else {
-          onlyGaps = false;
-        }
-      } else {
-        onlyGaps = false;
-      }
-    }
-    if (onlyGaps) { // just one gap
-      if (resizingFillGap && !LayoutInterval.canResize(commonGap)) {
-        layoutModel.setIntervalSize(
-            commonGap,
-            NOT_EXPLICITLY_DEFINED,
-            commonGap.getPreferredSize(),
-            Short.MAX_VALUE);
-      }
-      insertGapIntoSequence(commonGap, seq, index, dimension);
-      return null;
-    }
-    if (list.size() == 1) { // just one sequence
-      List subList = list.get(0);
-      for (int n = subList.size(), i = n - 1; i > 0; i--) { // skip alignment at 0
-        LayoutInterval li = (LayoutInterval) subList.get(i);
-        if (resizingFillGap
-            && li.isEmptySpace()
-            && !LayoutInterval.canResize(li)
-            && (i == 1 && position == TRAILING || i == n - 1 && position == LEADING)) { // make the end gap resizing
-          layoutModel.setIntervalSize(
-              li,
-              NOT_EXPLICITLY_DEFINED,
-              li.getPreferredSize(),
-              Short.MAX_VALUE);
-        }
-        if (i == 1 && li.isEmptySpace()) {
-          insertGapIntoSequence(li, seq, index, dimension);
-        } else {
-          layoutModel.addInterval(li, seq, index);
-        }
-      }
-      return null;
-    }
-    // create parallel group for multiple intervals/sequences
-    LayoutInterval group = new LayoutInterval(PARALLEL);
-    //        if (position == mainAlignment) {
-    //            // [but this should eliminate resizability only for gaps...]
-    //            group.setMinimumSize(USE_PREFERRED_SIZE);
-    //            group.setMaximumSize(USE_PREFERRED_SIZE);
-    //        }
-    ////        group.setGroupAlignment(alignment);
-    // fill the group
-    for (Iterator it = list.iterator(); it.hasNext();) {
-      List subList = (List) it.next();
-      LayoutInterval interval;
-      if (subList.size() == 2) { // there is just one interval - use it directly
-        int alignment = ((Integer) subList.get(0)).intValue();
-        interval = (LayoutInterval) subList.get(1);
-        if (alignment == LEADING || alignment == TRAILING) {
-          layoutModel.setIntervalAlignment(interval, alignment);
-        }
-      } else { // there are more intervals - create sequence
-        interval = new LayoutInterval(SEQUENTIAL);
-        int alignment = ((Integer) subList.get(0)).intValue();
-        if (alignment == LEADING || alignment == TRAILING) {
-          interval.setAlignment(alignment);
-        }
-        for (int i = 1, n = subList.size(); i < n; i++) {
-          LayoutInterval li = (LayoutInterval) subList.get(i);
-          if (resizingFillGap
-              && li.isEmptySpace()
-              && !LayoutInterval.canResize(li)
-              && (i == 1 && position == TRAILING || i == n - 1 && position == LEADING)) { // make the end gap resizing
-            layoutModel.setIntervalSize(
-                li,
-                NOT_EXPLICITLY_DEFINED,
-                li.getPreferredSize(),
-                Short.MAX_VALUE);
-          }
-          layoutModel.addInterval(li, interval, -1);
-        }
-      }
-      layoutModel.addInterval(interval, group, -1);
-    }
-    layoutModel.addInterval(group, seq, index);
-    return group;
-  }
+	/**
+	 * Adds parallel content of a group specified in List to given sequence. Used to create a
+	 * remainder parallel group to a group of aligned intervals.
+	 *
+	 * @param list
+	 *          the content of the group, output from 'extract' method
+	 * @param seq
+	 *          a sequential group where to add to
+	 * @param index
+	 *          the index in the sequence where to add
+	 * @param dimension
+	 * @param position
+	 *          the position of the remainder group relative to the main group (LEADING or TRAILING)
+	 *          // * @param mainAlignment effective alignment of the main group (LEADING or // *
+	 *          TRAILING or something else meaning not aligned)
+	 * @return parallel group if it has been created, or null
+	 */
+	LayoutInterval addGroupContent(List<List> list,
+			LayoutInterval seq,
+			int index,
+			int dimension,
+			int position/*, int mainAlignment*/) {
+		assert seq.isSequential() && (position == LEADING || position == TRAILING);
+		boolean resizingFillGap = false;
+		LayoutInterval commonGap = null;
+		boolean onlyGaps = true;
+		// Remove sequences just with one gap
+		for (int i = list.size() - 1; i >= 0; i--) {
+			List subList = list.get(i);
+			assert subList.size() >= 2;
+			if (subList.size() == 2) { // there is just one interval
+				LayoutInterval li = (LayoutInterval) subList.get(1);
+				if (li.isEmptySpace()) {
+					if (commonGap == null || li.getPreferredSize() > commonGap.getPreferredSize()) {
+						commonGap = li;
+					}
+					if (LayoutInterval.canResize(li)) {
+						resizingFillGap = true;
+					}
+					list.remove(i);
+				} else {
+					onlyGaps = false;
+				}
+			} else {
+				onlyGaps = false;
+			}
+		}
+		if (onlyGaps) { // just one gap
+			if (resizingFillGap && !LayoutInterval.canResize(commonGap)) {
+				layoutModel.setIntervalSize(
+						commonGap,
+						NOT_EXPLICITLY_DEFINED,
+						commonGap.getPreferredSize(),
+						Short.MAX_VALUE);
+			}
+			insertGapIntoSequence(commonGap, seq, index, dimension);
+			return null;
+		}
+		if (list.size() == 1) { // just one sequence
+			List subList = list.get(0);
+			for (int n = subList.size(), i = n - 1; i > 0; i--) { // skip alignment at 0
+				LayoutInterval li = (LayoutInterval) subList.get(i);
+				if (resizingFillGap
+						&& li.isEmptySpace()
+						&& !LayoutInterval.canResize(li)
+						&& (i == 1 && position == TRAILING || i == n - 1 && position == LEADING)) { // make the end gap resizing
+					layoutModel.setIntervalSize(
+							li,
+							NOT_EXPLICITLY_DEFINED,
+							li.getPreferredSize(),
+							Short.MAX_VALUE);
+				}
+				if (i == 1 && li.isEmptySpace()) {
+					insertGapIntoSequence(li, seq, index, dimension);
+				} else {
+					layoutModel.addInterval(li, seq, index);
+				}
+			}
+			return null;
+		}
+		// create parallel group for multiple intervals/sequences
+		LayoutInterval group = new LayoutInterval(PARALLEL);
+		//        if (position == mainAlignment) {
+		//            // [but this should eliminate resizability only for gaps...]
+		//            group.setMinimumSize(USE_PREFERRED_SIZE);
+		//            group.setMaximumSize(USE_PREFERRED_SIZE);
+		//        }
+		////        group.setGroupAlignment(alignment);
+		// fill the group
+		for (Iterator it = list.iterator(); it.hasNext();) {
+			List subList = (List) it.next();
+			LayoutInterval interval;
+			if (subList.size() == 2) { // there is just one interval - use it directly
+				int alignment = ((Integer) subList.get(0)).intValue();
+				interval = (LayoutInterval) subList.get(1);
+				if (alignment == LEADING || alignment == TRAILING) {
+					layoutModel.setIntervalAlignment(interval, alignment);
+				}
+			} else { // there are more intervals - create sequence
+				interval = new LayoutInterval(SEQUENTIAL);
+				int alignment = ((Integer) subList.get(0)).intValue();
+				if (alignment == LEADING || alignment == TRAILING) {
+					interval.setAlignment(alignment);
+				}
+				for (int i = 1, n = subList.size(); i < n; i++) {
+					LayoutInterval li = (LayoutInterval) subList.get(i);
+					if (resizingFillGap
+							&& li.isEmptySpace()
+							&& !LayoutInterval.canResize(li)
+							&& (i == 1 && position == TRAILING || i == n - 1 && position == LEADING)) { // make the end gap resizing
+						layoutModel.setIntervalSize(
+								li,
+								NOT_EXPLICITLY_DEFINED,
+								li.getPreferredSize(),
+								Short.MAX_VALUE);
+					}
+					layoutModel.addInterval(li, interval, -1);
+				}
+			}
+			layoutModel.addInterval(interval, group, -1);
+		}
+		layoutModel.addInterval(group, seq, index);
+		return group;
+	}
 
-  /**
-   * Adds 'interval' to 'target'. In case of 'interval' is a group, it is dismounted to individual
-   * intervals if needed (e.g. if adding sequence to sequence), or if producing equal result with
-   * less nesting (e.g. when adding parallel group to parallel group with same alignment). Also
-   * redundant groups are canceled (containing just one interval).
-   */
-  boolean addContent(LayoutInterval interval, LayoutInterval target, int index) {
-    if (interval.isGroup() && interval.getSubIntervalCount() == 1) {
-      return addContent(layoutModel.removeInterval(interval, 0), target, index);
-    }
-    if (interval.isSequential() && target.isSequential()) {
-      if (index < 0) {
-        index = target.getSubIntervalCount();
-      }
-      while (interval.getSubIntervalCount() > 0) {
-        LayoutInterval li = layoutModel.removeInterval(interval, 0);
-        layoutModel.addInterval(li, target, index++);
-      }
-      return true;
-    } else if (interval.isParallel() && target.isParallel()) {
-      int align = interval.getAlignment();
-      if (align == DEFAULT) {
-        align = target.getGroupAlignment();
-      }
-      boolean sameAlign = true;
-      Iterator<LayoutInterval> it = interval.getSubIntervals();
-      while (it.hasNext()) {
-        LayoutInterval li = it.next();
-        if (LayoutInterval.wantResize(li)) { // will span over whole target group
-          sameAlign = true;
-          break;
-        }
-        if (li.getAlignment() != align) {
-          sameAlign = false;
-        }
-      }
-      if (sameAlign
-          && (LayoutInterval.canResize(interval)
-              || !LayoutInterval.canResize(target)
-              || !LayoutInterval.wantResize(target))) { // can dismantle the group
-        assert interval.getParent() == null;
-        while (interval.getSubIntervalCount() > 0) {
-          LayoutInterval li = interval.getSubInterval(0);
-          if (li.getRawAlignment() == DEFAULT
-              && interval.getGroupAlignment() != target.getGroupAlignment()) { // force alignment explicitly
-            layoutModel.setIntervalAlignment(li, li.getAlignment());
-          }
-          layoutModel.removeInterval(li);
-          layoutModel.addInterval(li, target, index);
-          if (index >= 0) {
-            index++;
-          }
-        }
-        if (!LayoutInterval.canResize(interval) && LayoutInterval.canResize(target)) {
-          suppressGroupResizing(target);
-        }
-        return true;
-      } else { // need to add the group as a whole
-        layoutModel.addInterval(interval, target, index);
-      }
-    } else {
-      if (target.isSequential() && interval.getRawAlignment() != DEFAULT) {
-        layoutModel.setIntervalAlignment(interval, DEFAULT);
-      }
-      layoutModel.addInterval(interval, target, index);
-    }
-    return false;
-  }
+	/**
+	 * Adds 'interval' to 'target'. In case of 'interval' is a group, it is dismounted to individual
+	 * intervals if needed (e.g. if adding sequence to sequence), or if producing equal result with
+	 * less nesting (e.g. when adding parallel group to parallel group with same alignment). Also
+	 * redundant groups are canceled (containing just one interval).
+	 */
+	boolean addContent(LayoutInterval interval, LayoutInterval target, int index) {
+		if (interval.isGroup() && interval.getSubIntervalCount() == 1) {
+			return addContent(layoutModel.removeInterval(interval, 0), target, index);
+		}
+		if (interval.isSequential() && target.isSequential()) {
+			if (index < 0) {
+				index = target.getSubIntervalCount();
+			}
+			while (interval.getSubIntervalCount() > 0) {
+				LayoutInterval li = layoutModel.removeInterval(interval, 0);
+				layoutModel.addInterval(li, target, index++);
+			}
+			return true;
+		} else if (interval.isParallel() && target.isParallel()) {
+			int align = interval.getAlignment();
+			if (align == DEFAULT) {
+				align = target.getGroupAlignment();
+			}
+			boolean sameAlign = true;
+			Iterator<LayoutInterval> it = interval.getSubIntervals();
+			while (it.hasNext()) {
+				LayoutInterval li = it.next();
+				if (LayoutInterval.wantResize(li)) { // will span over whole target group
+					sameAlign = true;
+					break;
+				}
+				if (li.getAlignment() != align) {
+					sameAlign = false;
+				}
+			}
+			if (sameAlign
+					&& (LayoutInterval.canResize(interval)
+							|| !LayoutInterval.canResize(target)
+							|| !LayoutInterval.wantResize(target))) { // can dismantle the group
+				assert interval.getParent() == null;
+				while (interval.getSubIntervalCount() > 0) {
+					LayoutInterval li = interval.getSubInterval(0);
+					if (li.getRawAlignment() == DEFAULT
+							&& interval.getGroupAlignment() != target.getGroupAlignment()) { // force alignment explicitly
+						layoutModel.setIntervalAlignment(li, li.getAlignment());
+					}
+					layoutModel.removeInterval(li);
+					layoutModel.addInterval(li, target, index);
+					if (index >= 0) {
+						index++;
+					}
+				}
+				if (!LayoutInterval.canResize(interval) && LayoutInterval.canResize(target)) {
+					suppressGroupResizing(target);
+				}
+				return true;
+			} else { // need to add the group as a whole
+				layoutModel.addInterval(interval, target, index);
+			}
+		} else {
+			if (target.isSequential() && interval.getRawAlignment() != DEFAULT) {
+				layoutModel.setIntervalAlignment(interval, DEFAULT);
+			}
+			layoutModel.addInterval(interval, target, index);
+		}
+		return false;
+	}
 
-  void resizeInterval(LayoutInterval interval, int size) {
-    assert size >= 0 || size == NOT_EXPLICITLY_DEFINED;
-    int min = interval.getMinimumSize() == interval.getPreferredSize()
-        && interval.getMaximumSize() < Short.MAX_VALUE ? size : interval.getMinimumSize();
-    int max = interval.getMaximumSize() == interval.getPreferredSize()
-        ? size == NOT_EXPLICITLY_DEFINED ? USE_PREFERRED_SIZE : size
-        : interval.getMaximumSize();
-    layoutModel.setIntervalSize(interval, min, size, max);
-  }
+	void resizeInterval(LayoutInterval interval, int size) {
+		assert size >= 0 || size == NOT_EXPLICITLY_DEFINED;
+		int min = interval.getMinimumSize() == interval.getPreferredSize()
+				&& interval.getMaximumSize() < Short.MAX_VALUE ? size : interval.getMinimumSize();
+		int max = interval.getMaximumSize() == interval.getPreferredSize()
+				? size == NOT_EXPLICITLY_DEFINED ? USE_PREFERRED_SIZE : size
+						: interval.getMaximumSize();
+		layoutModel.setIntervalSize(interval, min, size, max);
+	}
 
-  void suppressGroupResizing(LayoutInterval group) {
-    // don't for root group
-    if (group.getParent() != null) {
-      layoutModel.setIntervalSize(
-          group,
-          group.getMinimumSize(),
-          group.getPreferredSize(),
-          USE_PREFERRED_SIZE);
-    }
-  }
+	void suppressGroupResizing(LayoutInterval group) {
+		// don't for root group
+		if (group.getParent() != null) {
+			layoutModel.setIntervalSize(
+					group,
+					group.getMinimumSize(),
+					group.getPreferredSize(),
+					USE_PREFERRED_SIZE);
+		}
+	}
 
-  void enableGroupResizing(LayoutInterval group) {
-    layoutModel.setIntervalSize(
-        group,
-        group.getMinimumSize(),
-        group.getPreferredSize(),
-        NOT_EXPLICITLY_DEFINED);
-  }
+	void enableGroupResizing(LayoutInterval group) {
+		layoutModel.setIntervalSize(
+				group,
+				group.getMinimumSize(),
+				group.getPreferredSize(),
+				NOT_EXPLICITLY_DEFINED);
+	}
 
-  void mergeParallelGroups(LayoutInterval group) {
-    assert group.isParallel();
-    if (!group.isParallel()) {
-      return;
-    }
-    for (int i = group.getSubIntervalCount() - 1; i >= 0; i--) {
-      LayoutInterval sub = group.getSubInterval(i);
-      if (sub.isParallel()) {
-        mergeParallelGroups(sub);
-        dissolveRedundantGroup(sub);
-      }
-    }
-  }
+	void mergeParallelGroups(LayoutInterval group) {
+		assert group.isParallel();
+		if (!group.isParallel()) {
+			return;
+		}
+		for (int i = group.getSubIntervalCount() - 1; i >= 0; i--) {
+			LayoutInterval sub = group.getSubInterval(i);
+			if (sub.isParallel()) {
+				mergeParallelGroups(sub);
+				dissolveRedundantGroup(sub);
+			}
+		}
+	}
 
-  /**
-   * Dissolves given group to parent group in case it is redundant.
-   *
-   * @return true if the group was dissolved
-   */
-  boolean dissolveRedundantGroup(LayoutInterval group) {
-    LayoutInterval parent = group.getParent();
-    if (parent == null) {
-      return false;
-    }
-    boolean dissolve = false;
-    if (group.getSubIntervalCount() == 1) {
-      dissolve = true;
-    } else if (group.isSequential() && parent.isSequential()) {
-      dissolve = true;
-    } else if (group.isParallel() && parent.isParallel()) {
-      // check for compatible alignment and resizability
-      int align = group.getAlignment();
-      boolean sameAlign = true;
-      boolean subResizing = false;
-      Iterator<LayoutInterval> it = group.getSubIntervals();
-      while (it.hasNext()) {
-        LayoutInterval li = it.next();
-        if (!subResizing && LayoutInterval.wantResize(li)) {
-          subResizing = true;
-        }
-        if (li.getAlignment() != align && group.getSubIntervalCount() > 1) {
-          sameAlign = false;
-        }
-      }
-      boolean compatible;
-      if (subResizing && (sameAlign || group.getGroupAlignment() != BASELINE)) {
-        compatible = false;
-        if (LayoutInterval.canResize(group) || !LayoutInterval.canResize(parent)) {
-          it = parent.getSubIntervals();
-          while (it.hasNext()) {
-            LayoutInterval li = it.next();
-            if (li != group && LayoutInterval.wantResize(li)) {
-              compatible = true;
-              break;
-            }
-          }
-          if (!compatible) {
-            LayoutInterval neighbor =
-                LayoutInterval.getNeighbor(parent, group.getAlignment() ^ 1, false, true, true);
-            if (neighbor != null
-                && neighbor.isEmptySpace()
-                && neighbor.getPreferredSize() == NOT_EXPLICITLY_DEFINED) { // default fixed padding means there is no space for
-                                                                                                                            // independent size change, so the subgroup can be merged
-              compatible = true;
-            }
-          }
-        }
-      } else {
-        compatible = sameAlign;
-      }
-      dissolve = compatible;
-    }
-    if (dissolve) { // the sub-group can be dissolved into parent group
-      int index = layoutModel.removeInterval(group);
-      while (group.getSubIntervalCount() > 0) {
-        LayoutInterval li = group.getSubInterval(0);
-        if (parent.isParallel()) { // moving to parallel group
-          if (group.isParallel()) { // from parallel group
-            if (li.getRawAlignment() == DEFAULT
-                && group.getGroupAlignment() != parent.getGroupAlignment()) { // force alignment explicitly
-              layoutModel.setIntervalAlignment(li, li.getAlignment());
-            }
-          } else { // from sequential group
-            layoutModel.setIntervalAlignment(li, group.getRawAlignment());
-          }
-        } else { // moving to sequential group
-          if (li.getRawAlignment() != DEFAULT) {
-            layoutModel.setIntervalAlignment(li, DEFAULT);
-          }
-        }
-        layoutModel.removeInterval(li);
-        group.remove(li);
-        layoutModel.addInterval(li, parent, index++);
-      }
-      return true;
-    }
-    return false;
-  }
+	/**
+	 * Dissolves given group to parent group in case it is redundant.
+	 *
+	 * @return true if the group was dissolved
+	 */
+	boolean dissolveRedundantGroup(LayoutInterval group) {
+		LayoutInterval parent = group.getParent();
+		if (parent == null) {
+			return false;
+		}
+		boolean dissolve = false;
+		if (group.getSubIntervalCount() == 1) {
+			dissolve = true;
+		} else if (group.isSequential() && parent.isSequential()) {
+			dissolve = true;
+		} else if (group.isParallel() && parent.isParallel()) {
+			// check for compatible alignment and resizability
+			int align = group.getAlignment();
+			boolean sameAlign = true;
+			boolean subResizing = false;
+			Iterator<LayoutInterval> it = group.getSubIntervals();
+			while (it.hasNext()) {
+				LayoutInterval li = it.next();
+				if (!subResizing && LayoutInterval.wantResize(li)) {
+					subResizing = true;
+				}
+				if (li.getAlignment() != align && group.getSubIntervalCount() > 1) {
+					sameAlign = false;
+				}
+			}
+			boolean compatible;
+			if (subResizing && (sameAlign || group.getGroupAlignment() != BASELINE)) {
+				compatible = false;
+				if (LayoutInterval.canResize(group) || !LayoutInterval.canResize(parent)) {
+					it = parent.getSubIntervals();
+					while (it.hasNext()) {
+						LayoutInterval li = it.next();
+						if (li != group && LayoutInterval.wantResize(li)) {
+							compatible = true;
+							break;
+						}
+					}
+					if (!compatible) {
+						LayoutInterval neighbor =
+								LayoutInterval.getNeighbor(parent, group.getAlignment() ^ 1, false, true, true);
+						if (neighbor != null
+								&& neighbor.isEmptySpace()
+								&& neighbor.getPreferredSize() == NOT_EXPLICITLY_DEFINED) { // default fixed padding means there is no space for
+							// independent size change, so the subgroup can be merged
+							compatible = true;
+						}
+					}
+				}
+			} else {
+				compatible = sameAlign;
+			}
+			dissolve = compatible;
+		}
+		if (dissolve) { // the sub-group can be dissolved into parent group
+			int index = layoutModel.removeInterval(group);
+			while (group.getSubIntervalCount() > 0) {
+				LayoutInterval li = group.getSubInterval(0);
+				if (parent.isParallel()) { // moving to parallel group
+					if (group.isParallel()) { // from parallel group
+						if (li.getRawAlignment() == DEFAULT
+								&& group.getGroupAlignment() != parent.getGroupAlignment()) { // force alignment explicitly
+							layoutModel.setIntervalAlignment(li, li.getAlignment());
+						}
+					} else { // from sequential group
+						layoutModel.setIntervalAlignment(li, group.getRawAlignment());
+					}
+				} else { // moving to sequential group
+					if (li.getRawAlignment() != DEFAULT) {
+						layoutModel.setIntervalAlignment(li, DEFAULT);
+					}
+				}
+				layoutModel.removeInterval(li);
+				group.remove(li);
+				layoutModel.addInterval(li, parent, index++);
+			}
+			return true;
+		}
+		return false;
+	}
 
-  /**
-   * This method goes through a sequential group and moves each interval next to an open edge of a
-   * parallel group into the group.
-   *
-   * @param parent
-   *          sequential group to process
-   * @param dimension
-   */
-  void moveInsideSequential(LayoutInterval parent, int dimension) {
-    assert parent.isSequential();
-    if (!parent.isSequential()) {
-      return;
-    }
-    int alignment = LEADING;
-    do {
-      LayoutInterval extend = findIntervalToExtend(parent, dimension, alignment);
-      if (extend == null) {
-        if (alignment == LEADING) {
-          alignment = TRAILING;
-          extend = findIntervalToExtend(parent, dimension, alignment);
-        }
-        if (extend == null) {
-          break;
-        }
-      }
-      LayoutInterval inGroup = extend.getParent(); // group to infiltrate
-      LayoutInterval outGroup = inGroup;
-      while (outGroup.getParent() != parent) {
-        outGroup = outGroup.getParent();
-      }
-      int index = parent.indexOf(outGroup);
-      int d = alignment == LEADING ? -1 : 1;
-      // will the group remain open at the opposite edge?
-      boolean commonEndingGap = true;
-      for (int i = index - d, n = parent.getSubIntervalCount(); i >= 0 && i < n; i -= d) {
-        LayoutInterval li = parent.getSubInterval(i);
-        if ((!li.isEmptySpace() || i - d >= 0 && i - d < n) // ignore last gap
-            && LayoutInterval.wantResize(li)) { // resizing interval will close the group
-                                                // possibly need to separate the rest of the group not to be influenced
-          LayoutInterval endGap = parent.getSubInterval(alignment == LEADING ? n - 1 : 0);
-          if (endGap == null || endGap.getPreferredSize() != NOT_EXPLICITLY_DEFINED) {
-            commonEndingGap = false;
-            LayoutInterval closing = extend;
-            int borderPos = parent.getCurrentSpace().positions[dimension][alignment ^ 1];
-            do {
-              LayoutInterval par = closing.getParent();
-              if (par.isParallel()) {
-                separateGroupContent(closing, borderPos, dimension, alignment ^ 1);
-              }
-              closing = par;
-            } while (closing != outGroup);
-          }
-          break;
-        }
-      }
-      int extendPos = extend.getCurrentSpace().positions[dimension][alignment ^ 1];
-      if (!extend.isSequential()) {
-        LayoutInterval seq = new LayoutInterval(SEQUENTIAL);
-        seq.setAlignment(extend.getAlignment());
-        layoutModel.addInterval(seq, inGroup, layoutModel.removeInterval(extend));
-        layoutModel.setIntervalAlignment(extend, DEFAULT);
-        layoutModel.addInterval(extend, seq, 0);
-        extend = seq;
-      }
-      // move the intervals from outside inside the group, next to found interval (extend)
-      LayoutInterval connectingGap = null;
-      int idx, addIdx;
-      if (alignment == LEADING) {
-        idx = index + 1; // start behind the group
-        addIdx = extend.getSubIntervalCount(); // add behind the interval
-      } else {
-        idx = index - 1; // start before the group
-        addIdx = 0; // add before the interval
-      }
-      while (idx >= 0 && idx < parent.getSubIntervalCount()) {
-        LayoutInterval li = parent.getSubInterval(idx);
-        if (li.isEmptySpace()) {
-          if (connectingGap == null) { // first gap
-            if (extendPos != outGroup.getCurrentSpace().positions[dimension][alignment ^ 1]) {
-              // need to extend the first gap (extended interval inside group is smaller than the group)
-              int neighborPos =
-                  parent.getSubInterval(idx - d).getCurrentSpace().positions[dimension][alignment];
-              int distance = d * (extendPos - neighborPos);
-              if (distance > 0) {
-                resizeInterval(li, distance);
-              }
-            }
-            connectingGap = li;
-          } else if ((idx == 0 || idx == parent.getSubIntervalCount() - 1) && commonEndingGap) { // keep the last gap out
-            break;
-          }
-        }
-        layoutModel.removeInterval(li);
-        layoutModel.addInterval(li, extend, addIdx);
-        if (alignment == LEADING) {
-          addIdx++;
-        } else {
-          idx--;
-        }
-      }
-      // check if the sequence was not whole moved into the group
-      if (parent.getSubIntervalCount() == 1) { // only neighborGroup remained, eliminate the parent group
-        assert outGroup == parent.getSubInterval(0);
-        layoutModel.removeInterval(outGroup);
-        LayoutInterval superParent = parent.getParent();
-        addContent(outGroup, superParent, layoutModel.removeInterval(parent));
-        break;
-      }
-    } while (true);
-  }
+	/**
+	 * This method goes through a sequential group and moves each interval next to an open edge of a
+	 * parallel group into the group.
+	 *
+	 * @param parent
+	 *          sequential group to process
+	 * @param dimension
+	 */
+	void moveInsideSequential(LayoutInterval parent, int dimension) {
+		assert parent.isSequential();
+		if (!parent.isSequential()) {
+			return;
+		}
+		int alignment = LEADING;
+		do {
+			LayoutInterval extend = findIntervalToExtend(parent, dimension, alignment);
+			if (extend == null) {
+				if (alignment == LEADING) {
+					alignment = TRAILING;
+					extend = findIntervalToExtend(parent, dimension, alignment);
+				}
+				if (extend == null) {
+					break;
+				}
+			}
+			LayoutInterval inGroup = extend.getParent(); // group to infiltrate
+			LayoutInterval outGroup = inGroup;
+			while (outGroup.getParent() != parent) {
+				outGroup = outGroup.getParent();
+			}
+			int index = parent.indexOf(outGroup);
+			int d = alignment == LEADING ? -1 : 1;
+			// will the group remain open at the opposite edge?
+			boolean commonEndingGap = true;
+			for (int i = index - d, n = parent.getSubIntervalCount(); i >= 0 && i < n; i -= d) {
+				LayoutInterval li = parent.getSubInterval(i);
+				if ((!li.isEmptySpace() || i - d >= 0 && i - d < n) // ignore last gap
+						&& LayoutInterval.wantResize(li)) { // resizing interval will close the group
+					// possibly need to separate the rest of the group not to be influenced
+					LayoutInterval endGap = parent.getSubInterval(alignment == LEADING ? n - 1 : 0);
+					if (endGap == null || endGap.getPreferredSize() != NOT_EXPLICITLY_DEFINED) {
+						commonEndingGap = false;
+						LayoutInterval closing = extend;
+						int borderPos = parent.getCurrentSpace().positions[dimension][alignment ^ 1];
+						do {
+							LayoutInterval par = closing.getParent();
+							if (par.isParallel()) {
+								separateGroupContent(closing, borderPos, dimension, alignment ^ 1);
+							}
+							closing = par;
+						} while (closing != outGroup);
+					}
+					break;
+				}
+			}
+			int extendPos = extend.getCurrentSpace().positions[dimension][alignment ^ 1];
+			if (!extend.isSequential()) {
+				LayoutInterval seq = new LayoutInterval(SEQUENTIAL);
+				seq.setAlignment(extend.getAlignment());
+				layoutModel.addInterval(seq, inGroup, layoutModel.removeInterval(extend));
+				layoutModel.setIntervalAlignment(extend, DEFAULT);
+				layoutModel.addInterval(extend, seq, 0);
+				extend = seq;
+			}
+			// move the intervals from outside inside the group, next to found interval (extend)
+			LayoutInterval connectingGap = null;
+			int idx, addIdx;
+			if (alignment == LEADING) {
+				idx = index + 1; // start behind the group
+				addIdx = extend.getSubIntervalCount(); // add behind the interval
+			} else {
+				idx = index - 1; // start before the group
+				addIdx = 0; // add before the interval
+			}
+			while (idx >= 0 && idx < parent.getSubIntervalCount()) {
+				LayoutInterval li = parent.getSubInterval(idx);
+				if (li.isEmptySpace()) {
+					if (connectingGap == null) { // first gap
+						if (extendPos != outGroup.getCurrentSpace().positions[dimension][alignment ^ 1]) {
+							// need to extend the first gap (extended interval inside group is smaller than the group)
+							int neighborPos =
+									parent.getSubInterval(idx - d).getCurrentSpace().positions[dimension][alignment];
+							int distance = d * (extendPos - neighborPos);
+							if (distance > 0) {
+								resizeInterval(li, distance);
+							}
+						}
+						connectingGap = li;
+					} else if ((idx == 0 || idx == parent.getSubIntervalCount() - 1) && commonEndingGap) { // keep the last gap out
+						break;
+					}
+				}
+				layoutModel.removeInterval(li);
+				layoutModel.addInterval(li, extend, addIdx);
+				if (alignment == LEADING) {
+					addIdx++;
+				} else {
+					idx--;
+				}
+			}
+			// check if the sequence was not whole moved into the group
+			if (parent.getSubIntervalCount() == 1) { // only neighborGroup remained, eliminate the parent group
+				assert outGroup == parent.getSubInterval(0);
+				layoutModel.removeInterval(outGroup);
+				LayoutInterval superParent = parent.getParent();
+				addContent(outGroup, superParent, layoutModel.removeInterval(parent));
+				break;
+			}
+		} while (true);
+	}
 
-  private LayoutInterval findIntervalToExtend(LayoutInterval parent, int dimension, int alignment) {
-    int d = alignment == LEADING ? -1 : 1;
-    int count = parent.getSubIntervalCount();
-    int idx = alignment == LEADING ? count - 1 : 0;
-    boolean atBorder = true;
-    boolean gap = false;
-    while (idx >= 0 && idx < parent.getSubIntervalCount()) {
-      LayoutInterval sub = parent.getSubInterval(idx);
-      if (sub.isEmptySpace()) {
-        gap = true;
-      } else {
-        if (!atBorder
-            && gap
-            && sub.isParallel()
-            && !LayoutInterval.isClosedGroup(sub, alignment ^ 1)) { // this open parallel sub-group might be a candidate to move inside to
-          int startIndex, endIndex;
-          if (alignment == LEADING) {
-            startIndex = idx + 1;
-            endIndex = parent.getSubIntervalCount() - 1;
-          } else {
-            startIndex = 0;
-            endIndex = idx - 1;
-          }
-          LayoutInterval extend =
-              prepareGroupExtension(sub, parent, startIndex, endIndex, dimension, alignment ^ 1);
-          if (extend != null) {
-            return extend;
-          }
-        }
-        gap = false;
-        atBorder = false;
-      }
-      idx += d;
-    }
-    return null;
-  }
+	private LayoutInterval findIntervalToExtend(LayoutInterval parent, int dimension, int alignment) {
+		int d = alignment == LEADING ? -1 : 1;
+		int count = parent.getSubIntervalCount();
+		int idx = alignment == LEADING ? count - 1 : 0;
+		boolean atBorder = true;
+		boolean gap = false;
+		while (idx >= 0 && idx < parent.getSubIntervalCount()) {
+			LayoutInterval sub = parent.getSubInterval(idx);
+			if (sub.isEmptySpace()) {
+				gap = true;
+			} else {
+				if (!atBorder
+						&& gap
+						&& sub.isParallel()
+						&& !LayoutInterval.isClosedGroup(sub, alignment ^ 1)) { // this open parallel sub-group might be a candidate to move inside to
+					int startIndex, endIndex;
+					if (alignment == LEADING) {
+						startIndex = idx + 1;
+						endIndex = parent.getSubIntervalCount() - 1;
+					} else {
+						startIndex = 0;
+						endIndex = idx - 1;
+					}
+					LayoutInterval extend =
+							prepareGroupExtension(sub, parent, startIndex, endIndex, dimension, alignment ^ 1);
+					if (extend != null) {
+						return extend;
+					}
+				}
+				gap = false;
+				atBorder = false;
+			}
+			idx += d;
+		}
+		return null;
+	}
 
-  private LayoutInterval prepareGroupExtension(LayoutInterval group,
-      LayoutInterval parent,
-      int startIndex,
-      int endIndex,
-      int dimension,
-      int alignment) {
-    boolean allOverlapping = true;
-    LayoutInterval singleOverlap = null;
-    List<LayoutInterval> overlapList = null;
-    // looking for all intervals the given space is located next to
-    Iterator<LayoutInterval> it = group.getSubIntervals();
-    while (it.hasNext()) {
-      LayoutInterval li = it.next();
-      if (!li.isEmptySpace()) {
-        if (LayoutUtils.contentOverlap(li, parent, startIndex, endIndex, dimension ^ 1)) {
-          // interval overlaps orthogonally
-          if (singleOverlap == null) {
-            singleOverlap = li;
-          } else {
-            if (overlapList == null) {
-              overlapList = new LinkedList<LayoutInterval>();
-              overlapList.add(singleOverlap);
-            }
-            overlapList.add(li);
-          }
-        } else {
-          allOverlapping = false;
-        }
-      }
-    }
-    if (allOverlapping || singleOverlap == null) {
-      return null; // spans whole group or nothing
-    }
-    if (overlapList != null) { // overlaps multiple intervals
-      LayoutInterval subGroup = new LayoutInterval(PARALLEL);
-      subGroup.setGroupAlignment(alignment ^ 1);
-      subGroup.setAlignment(alignment ^ 1);
-      int index = -1;
-      do {
-        LayoutInterval li = overlapList.remove(0);
-        int idx = layoutModel.removeInterval(li);
-        if (index < 0) {
-          index = idx;
-        }
-        layoutModel.addInterval(li, subGroup, -1);
-        subGroup.getCurrentSpace().expand(li.getCurrentSpace());
-      } while (overlapList.size() > 0);
-      layoutModel.addInterval(subGroup, group, index);
-      singleOverlap = subGroup;
-    } else {
-      LayoutInterval subParallel;
-      if (singleOverlap.isSequential()) {
-        subParallel = singleOverlap.getSubInterval(
-            alignment == LEADING ? 0 : singleOverlap.getSubIntervalCount() - 1);
-        if (!subParallel.isParallel()) {
-          subParallel = null;
-        }
-      } else if (singleOverlap.isParallel()) {
-        subParallel = singleOverlap;
-      } else {
-        subParallel = null;
-      }
-      if (subParallel != null && !LayoutInterval.isClosedGroup(subParallel, alignment)) {
-        LayoutInterval subOverlap =
-            prepareGroupExtension(subParallel, parent, startIndex, endIndex, dimension, alignment);
-        if (subOverlap != null) {
-          singleOverlap = subOverlap;
-        }
-      }
-    }
-    return singleOverlap;
-  }
+	private LayoutInterval prepareGroupExtension(LayoutInterval group,
+			LayoutInterval parent,
+			int startIndex,
+			int endIndex,
+			int dimension,
+			int alignment) {
+		boolean allOverlapping = true;
+		LayoutInterval singleOverlap = null;
+		List<LayoutInterval> overlapList = null;
+		// looking for all intervals the given space is located next to
+		Iterator<LayoutInterval> it = group.getSubIntervals();
+		while (it.hasNext()) {
+			LayoutInterval li = it.next();
+			if (!li.isEmptySpace()) {
+				if (LayoutUtils.contentOverlap(li, parent, startIndex, endIndex, dimension ^ 1)) {
+					// interval overlaps orthogonally
+					if (singleOverlap == null) {
+						singleOverlap = li;
+					} else {
+						if (overlapList == null) {
+							overlapList = new LinkedList<LayoutInterval>();
+							overlapList.add(singleOverlap);
+						}
+						overlapList.add(li);
+					}
+				} else {
+					allOverlapping = false;
+				}
+			}
+		}
+		if (allOverlapping || singleOverlap == null) {
+			return null; // spans whole group or nothing
+		}
+		if (overlapList != null) { // overlaps multiple intervals
+			LayoutInterval subGroup = new LayoutInterval(PARALLEL);
+			subGroup.setGroupAlignment(alignment ^ 1);
+			subGroup.setAlignment(alignment ^ 1);
+			int index = -1;
+			do {
+				LayoutInterval li = overlapList.remove(0);
+				int idx = layoutModel.removeInterval(li);
+				if (index < 0) {
+					index = idx;
+				}
+				layoutModel.addInterval(li, subGroup, -1);
+				subGroup.getCurrentSpace().expand(li.getCurrentSpace());
+			} while (overlapList.size() > 0);
+			layoutModel.addInterval(subGroup, group, index);
+			singleOverlap = subGroup;
+		} else {
+			LayoutInterval subParallel;
+			if (singleOverlap.isSequential()) {
+				subParallel = singleOverlap.getSubInterval(
+						alignment == LEADING ? 0 : singleOverlap.getSubIntervalCount() - 1);
+				if (!subParallel.isParallel()) {
+					subParallel = null;
+				}
+			} else if (singleOverlap.isParallel()) {
+				subParallel = singleOverlap;
+			} else {
+				subParallel = null;
+			}
+			if (subParallel != null && !LayoutInterval.isClosedGroup(subParallel, alignment)) {
+				LayoutInterval subOverlap =
+						prepareGroupExtension(subParallel, parent, startIndex, endIndex, dimension, alignment);
+				if (subOverlap != null) {
+					singleOverlap = subOverlap;
+				}
+			}
+		}
+		return singleOverlap;
+	}
 
-  // [couldn't parallelizeWithParentSequence be used instead? or LayoutFeeder.separateSequence?]
-  private void separateGroupContent(LayoutInterval separate,
-      int outPos,
-      int dimension,
-      int alignment) {
-    LayoutInterval group = separate.getParent();
-    assert group.isParallel();
-    LayoutInterval remainder = null;
-    LayoutInterval remainderGroup = null;
-    LayoutRegion remainderSpace = null;
-    for (int i = 0; i < group.getSubIntervalCount();) {
-      LayoutInterval li = group.getSubInterval(i);
-      if (li != separate) {
-        assert li.getAlignment() == (alignment ^ 1);
-        layoutModel.removeInterval(li);
-        if (remainder == null) {
-          remainder = li;
-        } else {
-          if (remainderGroup == null) {
-            remainderGroup = new LayoutInterval(PARALLEL);
-            remainderGroup.setAlignment(alignment ^ 1);
-            remainderGroup.setGroupAlignment(alignment ^ 1);
-            layoutModel.addInterval(remainder, remainderGroup, 0);
-            remainder = remainderGroup;
-          }
-          layoutModel.addInterval(li, remainderGroup, -1);
-        }
-        if (!li.isEmptySpace()) {
-          if (remainderSpace == null) {
-            remainderSpace = new LayoutRegion();
-          }
-          remainderSpace.expand(li.getCurrentSpace());
-        }
-      } else {
-        i++;
-      }
-    }
-    remainder.setCurrentSpace(remainderSpace);
-    LayoutInterval remainderGap;
-    int remainderPos = remainderSpace.positions[dimension][alignment];
-    if (LayoutRegion.isValidCoordinate(outPos)) {
-      int gapSize = alignment == LEADING ? remainderPos - outPos : outPos - remainderPos;
-      remainderGap = new LayoutInterval(SINGLE);
-      remainderGap.setSizes(NOT_EXPLICITLY_DEFINED, gapSize, Short.MAX_VALUE);
-    } else { // take the existing gap next to group [this case is not used currently]
-      remainderGap = LayoutInterval.getDirectNeighbor(group, alignment, false);
-      if (remainderGap != null && remainderGap.isEmptySpace()) {
-        layoutModel.removeInterval(remainderGap);
-        // [should check for last interval in parent]
-        LayoutInterval neighbor = LayoutInterval.getDirectNeighbor(group, alignment, true);
-        outPos = neighbor != null
-            ? neighbor.getCurrentSpace().positions[dimension][alignment ^ 1]
-            : group.getParent().getCurrentSpace().positions[dimension][alignment];
-        int gapSize = alignment == LEADING ? remainderPos - outPos : outPos - remainderPos;
-        resizeInterval(remainderGap, gapSize);
-      } else {
-        remainderGap = null;
-      }
-    }
-    if (remainderGap != null) {
-      LayoutInterval seq;
-      if (remainder.isSequential()) {
-        seq = remainder;
-      } else {
-        seq = new LayoutInterval(SEQUENTIAL);
-        layoutModel.setIntervalAlignment(remainder, DEFAULT);
-        layoutModel.addInterval(remainder, seq, 0);
-      }
-      layoutModel.addInterval(remainderGap, seq, alignment == LEADING ? 0 : -1);
-      layoutModel.addInterval(seq, group, -1);
-      group.getCurrentSpace().positions[dimension][alignment] = outPos;
-    } else {
-      layoutModel.addInterval(remainder, group, -1);
-    }
-  }
+	// [couldn't parallelizeWithParentSequence be used instead? or LayoutFeeder.separateSequence?]
+	private void separateGroupContent(LayoutInterval separate,
+			int outPos,
+			int dimension,
+			int alignment) {
+		LayoutInterval group = separate.getParent();
+		assert group.isParallel();
+		LayoutInterval remainder = null;
+		LayoutInterval remainderGroup = null;
+		LayoutRegion remainderSpace = null;
+		for (int i = 0; i < group.getSubIntervalCount();) {
+			LayoutInterval li = group.getSubInterval(i);
+			if (li != separate) {
+				assert li.getAlignment() == (alignment ^ 1);
+				layoutModel.removeInterval(li);
+				if (remainder == null) {
+					remainder = li;
+				} else {
+					if (remainderGroup == null) {
+						remainderGroup = new LayoutInterval(PARALLEL);
+						remainderGroup.setAlignment(alignment ^ 1);
+						remainderGroup.setGroupAlignment(alignment ^ 1);
+						layoutModel.addInterval(remainder, remainderGroup, 0);
+						remainder = remainderGroup;
+					}
+					layoutModel.addInterval(li, remainderGroup, -1);
+				}
+				if (!li.isEmptySpace()) {
+					if (remainderSpace == null) {
+						remainderSpace = new LayoutRegion();
+					}
+					remainderSpace.expand(li.getCurrentSpace());
+				}
+			} else {
+				i++;
+			}
+		}
+		remainder.setCurrentSpace(remainderSpace);
+		LayoutInterval remainderGap;
+		int remainderPos = remainderSpace.positions[dimension][alignment];
+		if (LayoutRegion.isValidCoordinate(outPos)) {
+			int gapSize = alignment == LEADING ? remainderPos - outPos : outPos - remainderPos;
+			remainderGap = new LayoutInterval(SINGLE);
+			remainderGap.setSizes(NOT_EXPLICITLY_DEFINED, gapSize, Short.MAX_VALUE);
+		} else { // take the existing gap next to group [this case is not used currently]
+			remainderGap = LayoutInterval.getDirectNeighbor(group, alignment, false);
+			if (remainderGap != null && remainderGap.isEmptySpace()) {
+				layoutModel.removeInterval(remainderGap);
+				// [should check for last interval in parent]
+				LayoutInterval neighbor = LayoutInterval.getDirectNeighbor(group, alignment, true);
+				outPos = neighbor != null
+						? neighbor.getCurrentSpace().positions[dimension][alignment ^ 1]
+								: group.getParent().getCurrentSpace().positions[dimension][alignment];
+				int gapSize = alignment == LEADING ? remainderPos - outPos : outPos - remainderPos;
+				resizeInterval(remainderGap, gapSize);
+			} else {
+				remainderGap = null;
+			}
+		}
+		if (remainderGap != null) {
+			LayoutInterval seq;
+			if (remainder.isSequential()) {
+				seq = remainder;
+			} else {
+				seq = new LayoutInterval(SEQUENTIAL);
+				layoutModel.setIntervalAlignment(remainder, DEFAULT);
+				layoutModel.addInterval(remainder, seq, 0);
+			}
+			layoutModel.addInterval(remainderGap, seq, alignment == LEADING ? 0 : -1);
+			layoutModel.addInterval(seq, group, -1);
+			group.getCurrentSpace().positions[dimension][alignment] = outPos;
+		} else {
+			layoutModel.addInterval(remainder, group, -1);
+		}
+	}
 
-  /**
-   * Makes given interval parallel with part of its parent sequence.
-   */
-  void parallelizeWithParentSequence(LayoutInterval interval, int endIndex, int dimension) {
-    LayoutInterval parent = interval.getParent();
-    assert parent.isParallel();
-    LayoutInterval parParent = parent;
-    while (!parParent.getParent().isSequential()) {
-      parParent = parParent.getParent();
-    }
-    LayoutInterval parentSeq = parParent.getParent();
-    int startIndex = parentSeq.indexOf(parParent);
-    if (endIndex < 0) {
-      endIndex = parentSeq.getSubIntervalCount() - 1;
-    } else if (startIndex > endIndex) {
-      int temp = startIndex;
-      startIndex = endIndex;
-      endIndex = temp;
-    }
-    layoutModel.removeInterval(interval);
-    if (interval.getAlignment() == DEFAULT) {
-      layoutModel.setIntervalAlignment(interval, parent.getGroupAlignment());
-    }
-    addParallelWithSequence(interval, parentSeq, startIndex, endIndex, dimension);
-    if (parent.getSubIntervalCount() == 1) {
-      addContent(
-          layoutModel.removeInterval(parent, 0),
-          parent.getParent(),
-          layoutModel.removeInterval(parent));
-    } else if (parent.getSubIntervalCount() == 0) {
-      layoutModel.removeInterval(parent);
-    }
-  }
+	/**
+	 * Makes given interval parallel with part of its parent sequence.
+	 */
+	void parallelizeWithParentSequence(LayoutInterval interval, int endIndex, int dimension) {
+		LayoutInterval parent = interval.getParent();
+		assert parent.isParallel();
+		LayoutInterval parParent = parent;
+		while (!parParent.getParent().isSequential()) {
+			parParent = parParent.getParent();
+		}
+		LayoutInterval parentSeq = parParent.getParent();
+		int startIndex = parentSeq.indexOf(parParent);
+		if (endIndex < 0) {
+			endIndex = parentSeq.getSubIntervalCount() - 1;
+		} else if (startIndex > endIndex) {
+			int temp = startIndex;
+			startIndex = endIndex;
+			endIndex = temp;
+		}
+		layoutModel.removeInterval(interval);
+		if (interval.getAlignment() == DEFAULT) {
+			layoutModel.setIntervalAlignment(interval, parent.getGroupAlignment());
+		}
+		addParallelWithSequence(interval, parentSeq, startIndex, endIndex, dimension);
+		if (parent.getSubIntervalCount() == 1) {
+			addContent(
+					layoutModel.removeInterval(parent, 0),
+					parent.getParent(),
+					layoutModel.removeInterval(parent));
+		} else if (parent.getSubIntervalCount() == 0) {
+			layoutModel.removeInterval(parent);
+		}
+	}
 
-  void addParallelWithSequence(LayoutInterval interval,
-      LayoutInterval seq,
-      int startIndex,
-      int endIndex,
-      int dimension) {
-    LayoutInterval group;
-    if (startIndex > 0 || endIndex < seq.getSubIntervalCount() - 1) {
-      group = new LayoutInterval(PARALLEL);
-      if (interval.getAlignment() != DEFAULT) {
-        group.setGroupAlignment(interval.getAlignment());
-      }
-      int startPos =
-          LayoutUtils.getVisualPosition(seq.getSubInterval(startIndex), dimension, LEADING);
-      int endPos = LayoutUtils.getVisualPosition(seq.getSubInterval(endIndex), dimension, TRAILING);
-      group.getCurrentSpace().set(dimension, startPos, endPos);
-      if (startIndex != endIndex) {
-        LayoutInterval subSeq = new LayoutInterval(SEQUENTIAL);
-        subSeq.setAlignment(seq.getAlignment());
-        for (int n = endIndex - startIndex + 1; n > 0; n--) {
-          layoutModel.addInterval(layoutModel.removeInterval(seq, startIndex), subSeq, -1);
-        }
-        layoutModel.addInterval(subSeq, group, 0);
-      } else {
-        layoutModel.addInterval(layoutModel.removeInterval(seq, startIndex), group, 0);
-      }
-      layoutModel.addInterval(group, seq, startIndex);
-    } else {
-      group = seq.getParent();
-    }
-    layoutModel.addInterval(interval, group, -1);
-  }
+	void addParallelWithSequence(LayoutInterval interval,
+			LayoutInterval seq,
+			int startIndex,
+			int endIndex,
+			int dimension) {
+		LayoutInterval group;
+		if (startIndex > 0 || endIndex < seq.getSubIntervalCount() - 1) {
+			group = new LayoutInterval(PARALLEL);
+			if (interval.getAlignment() != DEFAULT) {
+				group.setGroupAlignment(interval.getAlignment());
+			}
+			int startPos =
+					LayoutUtils.getVisualPosition(seq.getSubInterval(startIndex), dimension, LEADING);
+			int endPos = LayoutUtils.getVisualPosition(seq.getSubInterval(endIndex), dimension, TRAILING);
+			group.getCurrentSpace().set(dimension, startPos, endPos);
+			if (startIndex != endIndex) {
+				LayoutInterval subSeq = new LayoutInterval(SEQUENTIAL);
+				subSeq.setAlignment(seq.getAlignment());
+				for (int n = endIndex - startIndex + 1; n > 0; n--) {
+					layoutModel.addInterval(layoutModel.removeInterval(seq, startIndex), subSeq, -1);
+				}
+				layoutModel.addInterval(subSeq, group, 0);
+			} else {
+				layoutModel.addInterval(layoutModel.removeInterval(seq, startIndex), group, 0);
+			}
+			layoutModel.addInterval(group, seq, startIndex);
+		} else {
+			group = seq.getParent();
+		}
+		layoutModel.addInterval(interval, group, -1);
+	}
 
-  int optimizeGaps(LayoutInterval group, int dimension) {
-    boolean anyAlignedLeading = false; // if false the group is open at leading edge
-    boolean anyAlignedTrailing = false; // if false the group is open at trailing edge
-    boolean anyAlignedBoth = false;
-    boolean anyGapLeading = false; // if true there is some gap at the leading edge
-    boolean anyGapTrailing = false; // if true there is some gap at the trailing edge
-    boolean sameMinGapLeading = true; // if true all intervals are aligned with the same gap at leading edge
-    boolean sameMinGapTrailing = true; // if true all intervals are aligned with the same gap at trailing edge
-    int commonGapLeadingSize = Integer.MIN_VALUE;
-    int commonGapTrailingSize = Integer.MIN_VALUE;
-    // first analyze the group
-    for (int i = 0; i < group.getSubIntervalCount(); i++) {
-      LayoutInterval li = group.getSubInterval(i);
-      if (li.isEmptySpace()) { // remove container supporting gap
-        if (group.getSubIntervalCount() > 1) {
-          layoutModel.removeInterval(group, i);
-          i--;
-          continue;
-        }
-      }
-      boolean leadingAlign = false;
-      boolean trailingAlign = false;
-      LayoutInterval leadingGap = null;
-      LayoutInterval trailingGap = null;
-      boolean contentResizing = false;
-      boolean noResizing = false;
-      if (li.isSequential()) {
-        // find out effective alignment of the sequence content without border gaps
-        boolean leadGapRes = false;
-        boolean trailGapRes = false;
-        for (int j = 0; j < li.getSubIntervalCount(); j++) {
-          LayoutInterval sub = li.getSubInterval(j);
-          if (j == 0 && sub.isEmptySpace()) {
-            leadingGap = sub;
-            leadGapRes = LayoutInterval.wantResize(sub);
-          } else if (j + 1 == li.getSubIntervalCount() && sub.isEmptySpace()) {
-            trailingGap = sub;
-            trailGapRes = LayoutInterval.wantResize(sub);
-          } else if (!contentResizing && LayoutInterval.wantResize(sub)) {
-            contentResizing = true;
-          }
-        }
-        if (!contentResizing) {
-          if (leadGapRes || trailGapRes) {
-            leadingAlign = trailGapRes && !leadGapRes;
-            trailingAlign = leadGapRes && !trailGapRes;
-          } else {
-            noResizing = true;
-          }
-        }
-      } else if (LayoutInterval.wantResize(li)) {
-        contentResizing = true;
-      } else {
-        noResizing = true;
-      }
-      if (contentResizing) {
-        leadingAlign = trailingAlign = true;
-      } else if (noResizing) {
-        int alignment = li.getAlignment();
-        leadingAlign = alignment == LEADING;
-        trailingAlign = alignment == TRAILING;
-      }
-      if (leadingAlign) {
-        anyAlignedLeading = true;
-        if (trailingAlign) {
-          anyAlignedBoth = true;
-        }
-      }
-      if (trailingAlign) {
-        anyAlignedTrailing = true;
-      }
-      if (leadingGap != null) {
-        anyGapLeading = true;
-        if (sameMinGapLeading) {
-          int size = leadingAlign || leadingGap.getMinimumSize() == USE_PREFERRED_SIZE
-              ? leadingGap.getPreferredSize()
-              : leadingGap.getMinimumSize();
-          if (commonGapLeadingSize != Integer.MIN_VALUE) {
-            if (size != commonGapLeadingSize) {
-              sameMinGapLeading = false;
-            }
-          } else {
-            commonGapLeadingSize = size;
-          }
-        }
-      } else {
-        sameMinGapLeading = false;
-      }
-      if (trailingGap != null) {
-        anyGapTrailing = true;
-        if (sameMinGapTrailing) {
-          int size = trailingAlign || trailingGap.getMinimumSize() == USE_PREFERRED_SIZE
-              ? trailingGap.getPreferredSize()
-              : trailingGap.getMinimumSize();
-          if (commonGapTrailingSize != Integer.MIN_VALUE) {
-            if (size != commonGapTrailingSize) {
-              sameMinGapTrailing = false;
-            }
-          } else {
-            commonGapTrailingSize = size;
-          }
-        }
-      } else {
-        sameMinGapTrailing = false;
-      }
-    }
-    if (group.getSubIntervalCount() <= 1 || !anyGapLeading && !anyGapTrailing) {
-      return -1;
-    }
-    if (!anyAlignedBoth) {
-      // can't reduce common minimum gap if anything aligned to opposite egde
-      if (anyAlignedTrailing) {
-        sameMinGapLeading = false;
-      }
-      if (anyAlignedLeading) {
-        sameMinGapTrailing = false;
-      }
-    }
-    int[] groupOuterPos = group.getCurrentSpace().positions[dimension];
-    assert groupOuterPos[LEADING] > Short.MIN_VALUE && groupOuterPos[TRAILING] > Short.MIN_VALUE;
-    int groupInnerPosLeading = LayoutUtils.getOutermostComponent(
-        group,
-        dimension,
-        LEADING).getCurrentSpace().positions[dimension][LEADING];
-    int groupInnerPosTrailing = LayoutUtils.getOutermostComponent(
-        group,
-        dimension,
-        TRAILING).getCurrentSpace().positions[dimension][TRAILING];
-    PaddingType defaultPaddingLeading = null; // if not null, the leading padding has default preferred size
-    PaddingType defaultPaddingTrailing = null; // if not null, the trailing padding has default preferred size
-    boolean resizingGapLeading = false;
-    boolean resizingGapTrailing = false;
-    // remove gaps where needed
-    for (int i = 0; i < group.getSubIntervalCount(); i++) {
-      LayoutInterval li = group.getSubInterval(i);
-      if (li.isSequential()) {
-        if (anyGapLeading) {
-          LayoutInterval gap = li.getSubInterval(0);
-          if (gap.isEmptySpace()) {
-            if (gap.getPreferredSize() == NOT_EXPLICITLY_DEFINED) {
-              LayoutInterval neighbor =
-                  LayoutInterval.getNeighbor(gap, LEADING, false, true, false);
-              if (neighbor != null
-                  && neighbor.isEmptySpace()
-                  && neighbor.getPreferredSize() == NOT_EXPLICITLY_DEFINED) {
-                // preferred gap with preferred gap neighbor - would not work
-                layoutModel.removeInterval(gap);
-                gap = null;
-              }
-            }
-            if (gap != null && (!anyAlignedLeading || sameMinGapLeading)) {
-              if (gap.getPreferredSize() == NOT_EXPLICITLY_DEFINED
-                  && isEndingDefaultGapEffective(li, dimension, LEADING)) { // default padding to be used as common gap
-                defaultPaddingLeading = gap.getPaddingType();
-                if (defaultPaddingLeading == null) {
-                  defaultPaddingLeading = PaddingType.RELATED;
-                }
-              }
-              if (gap.getMaximumSize() >= Short.MAX_VALUE) {
-                if (li.getAlignment() == LEADING) {
-                  layoutModel.setIntervalAlignment(li, TRAILING);
-                }
-                if (!anyAlignedLeading) {
-                  resizingGapLeading = true;
-                }
-              }
-              layoutModel.removeInterval(gap);
-            }
-          }
-        }
-        if (anyGapTrailing) {
-          LayoutInterval gap = li.getSubInterval(li.getSubIntervalCount() - 1);
-          if (gap.isEmptySpace()) {
-            if (gap.getPreferredSize() == NOT_EXPLICITLY_DEFINED) {
-              LayoutInterval neighbor =
-                  LayoutInterval.getNeighbor(gap, TRAILING, false, true, false);
-              if (neighbor != null
-                  && neighbor.isEmptySpace()
-                  && neighbor.getPreferredSize() == NOT_EXPLICITLY_DEFINED) {
-                // preferred gap with preferred gap neighbor - would not work
-                layoutModel.removeInterval(gap);
-                gap = null;
-              }
-            }
-            if (gap != null && (!anyAlignedTrailing || sameMinGapTrailing)) {
-              if (gap.getPreferredSize() == NOT_EXPLICITLY_DEFINED
-                  && isEndingDefaultGapEffective(li, dimension, TRAILING)) { // default padding to be used as common gap
-                defaultPaddingTrailing = gap.getPaddingType();
-                if (defaultPaddingTrailing == null) {
-                  defaultPaddingTrailing = PaddingType.RELATED;
-                }
-              }
-              if (gap.getMaximumSize() >= Short.MAX_VALUE) {
-                if (li.getAlignment() == TRAILING) {
-                  layoutModel.setIntervalAlignment(li, LEADING);
-                }
-                if (!anyAlignedTrailing) {
-                  resizingGapTrailing = true;
-                }
-              }
-              layoutModel.removeInterval(gap);
-            }
-          }
-        }
-        if (li.getSubIntervalCount() == 1) {
-          // only one interval remained in sequence - cancel the sequence
-          layoutModel.removeInterval(group, i); // removes li from group
-          LayoutInterval sub = layoutModel.removeInterval(li, 0); // removes last interval from li
-          layoutModel.setIntervalAlignment(sub, li.getRawAlignment());
-          layoutModel.addInterval(sub, group, i);
-        }
-      }
-    }
-    LayoutInterval leadingGap = null;
-    LayoutInterval trailingGap = null;
-    if (anyGapLeading) {
-      if (!anyAlignedLeading) { // group is open at leading edge
-        int size = groupInnerPosLeading - groupOuterPos[LEADING];
-        if (size > 0 || defaultPaddingLeading != null) {
-          leadingGap = new LayoutInterval(SINGLE);
-          if (defaultPaddingLeading != null) {
-            leadingGap.setPaddingType(defaultPaddingLeading);
-          } else {
-            leadingGap.setPreferredSize(size);
-            if (!resizingGapLeading) {
-              leadingGap.setMinimumSize(USE_PREFERRED_SIZE);
-            }
-          }
-          if (resizingGapLeading) {
-            leadingGap.setMaximumSize(Short.MAX_VALUE);
-          }
-        }
-      } else if (sameMinGapLeading) {
-        leadingGap = new LayoutInterval(SINGLE);
-        //                int size = commonGapLeading.getMinimumSize();
-        //                if (size == USE_PREFERRED_SIZE)
-        //                    size = commonGapLeading.getPreferredSize();
-        //                leadingGap.setSizes(size, size, USE_PREFERRED_SIZE);
-        leadingGap.setSizes(commonGapLeadingSize, commonGapLeadingSize, USE_PREFERRED_SIZE);
-        if (commonGapLeadingSize == DEFAULT) {
-          leadingGap.setPaddingType(defaultPaddingLeading);
-        }
-      }
-    }
-    if (anyGapTrailing) {
-      if (!anyAlignedTrailing) { // group is open at trailing edge
-        int size = groupOuterPos[TRAILING] - groupInnerPosTrailing;
-        if (size > 0 || defaultPaddingTrailing != null) {
-          trailingGap = new LayoutInterval(SINGLE);
-          if (defaultPaddingTrailing != null) {
-            trailingGap.setPaddingType(defaultPaddingTrailing);
-          } else {
-            trailingGap.setPreferredSize(size);
-            if (!resizingGapTrailing) {
-              trailingGap.setMinimumSize(USE_PREFERRED_SIZE);
-            }
-          }
-          if (resizingGapTrailing) {
-            trailingGap.setMaximumSize(Short.MAX_VALUE);
-          }
-        }
-      } else if (sameMinGapTrailing) {
-        trailingGap = new LayoutInterval(SINGLE);
-        //                int size = commonGapTrailing.getMinimumSize();
-        //                if (size == USE_PREFERRED_SIZE)
-        //                    size = commonGapTrailing.getPreferredSize();
-        //                trailingGap.setSizes(size, size, USE_PREFERRED_SIZE);
-        trailingGap.setSizes(commonGapTrailingSize, commonGapTrailingSize, USE_PREFERRED_SIZE);
-        if (commonGapTrailingSize == DEFAULT) {
-          trailingGap.setPaddingType(defaultPaddingTrailing);
-        }
-      }
-    }
-    if (leadingGap != null || trailingGap != null) {
-      if (leadingGap != null || !LayoutRegion.isValidCoordinate(groupOuterPos[LEADING])) {
-        groupOuterPos[LEADING] = groupInnerPosLeading;
-      }
-      if (trailingGap != null || !LayoutRegion.isValidCoordinate(groupOuterPos[TRAILING])) {
-        groupOuterPos[TRAILING] = groupInnerPosTrailing;
-      }
-      groupOuterPos[CENTER] = (groupInnerPosLeading + groupInnerPosTrailing) / 2;
-      if (leadingGap != null) {
-        group = insertGap(leadingGap, group, groupInnerPosLeading, dimension, LEADING);
-      }
-      if (trailingGap != null) {
-        group = insertGap(trailingGap, group, groupInnerPosTrailing, dimension, TRAILING);
-      }
-      LayoutInterval parent = group.getParent();
-      return parent != null ? parent.indexOf(group) : -1;//idx;
-    }
-    return -1;
-  }
+	int optimizeGaps(LayoutInterval group, int dimension) {
+		boolean anyAlignedLeading = false; // if false the group is open at leading edge
+		boolean anyAlignedTrailing = false; // if false the group is open at trailing edge
+		boolean anyAlignedBoth = false;
+		boolean anyGapLeading = false; // if true there is some gap at the leading edge
+		boolean anyGapTrailing = false; // if true there is some gap at the trailing edge
+		boolean sameMinGapLeading = true; // if true all intervals are aligned with the same gap at leading edge
+		boolean sameMinGapTrailing = true; // if true all intervals are aligned with the same gap at trailing edge
+		int commonGapLeadingSize = Integer.MIN_VALUE;
+		int commonGapTrailingSize = Integer.MIN_VALUE;
+		// first analyze the group
+		for (int i = 0; i < group.getSubIntervalCount(); i++) {
+			LayoutInterval li = group.getSubInterval(i);
+			if (li.isEmptySpace()) { // remove container supporting gap
+				if (group.getSubIntervalCount() > 1) {
+					layoutModel.removeInterval(group, i);
+					i--;
+					continue;
+				}
+			}
+			boolean leadingAlign = false;
+			boolean trailingAlign = false;
+			LayoutInterval leadingGap = null;
+			LayoutInterval trailingGap = null;
+			boolean contentResizing = false;
+			boolean noResizing = false;
+			if (li.isSequential()) {
+				// find out effective alignment of the sequence content without border gaps
+				boolean leadGapRes = false;
+				boolean trailGapRes = false;
+				for (int j = 0; j < li.getSubIntervalCount(); j++) {
+					LayoutInterval sub = li.getSubInterval(j);
+					if (j == 0 && sub.isEmptySpace()) {
+						leadingGap = sub;
+						leadGapRes = LayoutInterval.wantResize(sub);
+					} else if (j + 1 == li.getSubIntervalCount() && sub.isEmptySpace()) {
+						trailingGap = sub;
+						trailGapRes = LayoutInterval.wantResize(sub);
+					} else if (!contentResizing && LayoutInterval.wantResize(sub)) {
+						contentResizing = true;
+					}
+				}
+				if (!contentResizing) {
+					if (leadGapRes || trailGapRes) {
+						leadingAlign = trailGapRes && !leadGapRes;
+						trailingAlign = leadGapRes && !trailGapRes;
+					} else {
+						noResizing = true;
+					}
+				}
+			} else if (LayoutInterval.wantResize(li)) {
+				contentResizing = true;
+			} else {
+				noResizing = true;
+			}
+			if (contentResizing) {
+				leadingAlign = trailingAlign = true;
+			} else if (noResizing) {
+				int alignment = li.getAlignment();
+				leadingAlign = alignment == LEADING;
+				trailingAlign = alignment == TRAILING;
+			}
+			if (leadingAlign) {
+				anyAlignedLeading = true;
+				if (trailingAlign) {
+					anyAlignedBoth = true;
+				}
+			}
+			if (trailingAlign) {
+				anyAlignedTrailing = true;
+			}
+			if (leadingGap != null) {
+				anyGapLeading = true;
+				if (sameMinGapLeading) {
+					int size = leadingAlign || leadingGap.getMinimumSize() == USE_PREFERRED_SIZE
+							? leadingGap.getPreferredSize()
+									: leadingGap.getMinimumSize();
+					if (commonGapLeadingSize != Integer.MIN_VALUE) {
+						if (size != commonGapLeadingSize) {
+							sameMinGapLeading = false;
+						}
+					} else {
+						commonGapLeadingSize = size;
+					}
+				}
+			} else {
+				sameMinGapLeading = false;
+			}
+			if (trailingGap != null) {
+				anyGapTrailing = true;
+				if (sameMinGapTrailing) {
+					int size = trailingAlign || trailingGap.getMinimumSize() == USE_PREFERRED_SIZE
+							? trailingGap.getPreferredSize()
+									: trailingGap.getMinimumSize();
+					if (commonGapTrailingSize != Integer.MIN_VALUE) {
+						if (size != commonGapTrailingSize) {
+							sameMinGapTrailing = false;
+						}
+					} else {
+						commonGapTrailingSize = size;
+					}
+				}
+			} else {
+				sameMinGapTrailing = false;
+			}
+		}
+		if (group.getSubIntervalCount() <= 1 || !anyGapLeading && !anyGapTrailing) {
+			return -1;
+		}
+		if (!anyAlignedBoth) {
+			// can't reduce common minimum gap if anything aligned to opposite egde
+			if (anyAlignedTrailing) {
+				sameMinGapLeading = false;
+			}
+			if (anyAlignedLeading) {
+				sameMinGapTrailing = false;
+			}
+		}
+		int[] groupOuterPos = group.getCurrentSpace().positions[dimension];
+		assert groupOuterPos[LEADING] > Short.MIN_VALUE && groupOuterPos[TRAILING] > Short.MIN_VALUE;
+		int groupInnerPosLeading = LayoutUtils.getOutermostComponent(
+				group,
+				dimension,
+				LEADING).getCurrentSpace().positions[dimension][LEADING];
+		int groupInnerPosTrailing = LayoutUtils.getOutermostComponent(
+				group,
+				dimension,
+				TRAILING).getCurrentSpace().positions[dimension][TRAILING];
+		PaddingType defaultPaddingLeading = null; // if not null, the leading padding has default preferred size
+		PaddingType defaultPaddingTrailing = null; // if not null, the trailing padding has default preferred size
+		boolean resizingGapLeading = false;
+		boolean resizingGapTrailing = false;
+		// remove gaps where needed
+		for (int i = 0; i < group.getSubIntervalCount(); i++) {
+			LayoutInterval li = group.getSubInterval(i);
+			if (li.isSequential()) {
+				if (anyGapLeading) {
+					LayoutInterval gap = li.getSubInterval(0);
+					if (gap.isEmptySpace()) {
+						if (gap.getPreferredSize() == NOT_EXPLICITLY_DEFINED) {
+							LayoutInterval neighbor =
+									LayoutInterval.getNeighbor(gap, LEADING, false, true, false);
+							if (neighbor != null
+									&& neighbor.isEmptySpace()
+									&& neighbor.getPreferredSize() == NOT_EXPLICITLY_DEFINED) {
+								// preferred gap with preferred gap neighbor - would not work
+								layoutModel.removeInterval(gap);
+								gap = null;
+							}
+						}
+						if (gap != null && (!anyAlignedLeading || sameMinGapLeading)) {
+							if (gap.getPreferredSize() == NOT_EXPLICITLY_DEFINED
+									&& isEndingDefaultGapEffective(li, dimension, LEADING)) { // default padding to be used as common gap
+								defaultPaddingLeading = gap.getPaddingType();
+								if (defaultPaddingLeading == null) {
+									defaultPaddingLeading = PaddingType.RELATED;
+								}
+							}
+							if (gap.getMaximumSize() >= Short.MAX_VALUE) {
+								if (li.getAlignment() == LEADING) {
+									layoutModel.setIntervalAlignment(li, TRAILING);
+								}
+								if (!anyAlignedLeading) {
+									resizingGapLeading = true;
+								}
+							}
+							layoutModel.removeInterval(gap);
+						}
+					}
+				}
+				if (anyGapTrailing) {
+					LayoutInterval gap = li.getSubInterval(li.getSubIntervalCount() - 1);
+					if (gap.isEmptySpace()) {
+						if (gap.getPreferredSize() == NOT_EXPLICITLY_DEFINED) {
+							LayoutInterval neighbor =
+									LayoutInterval.getNeighbor(gap, TRAILING, false, true, false);
+							if (neighbor != null
+									&& neighbor.isEmptySpace()
+									&& neighbor.getPreferredSize() == NOT_EXPLICITLY_DEFINED) {
+								// preferred gap with preferred gap neighbor - would not work
+								layoutModel.removeInterval(gap);
+								gap = null;
+							}
+						}
+						if (gap != null && (!anyAlignedTrailing || sameMinGapTrailing)) {
+							if (gap.getPreferredSize() == NOT_EXPLICITLY_DEFINED
+									&& isEndingDefaultGapEffective(li, dimension, TRAILING)) { // default padding to be used as common gap
+								defaultPaddingTrailing = gap.getPaddingType();
+								if (defaultPaddingTrailing == null) {
+									defaultPaddingTrailing = PaddingType.RELATED;
+								}
+							}
+							if (gap.getMaximumSize() >= Short.MAX_VALUE) {
+								if (li.getAlignment() == TRAILING) {
+									layoutModel.setIntervalAlignment(li, LEADING);
+								}
+								if (!anyAlignedTrailing) {
+									resizingGapTrailing = true;
+								}
+							}
+							layoutModel.removeInterval(gap);
+						}
+					}
+				}
+				if (li.getSubIntervalCount() == 1) {
+					// only one interval remained in sequence - cancel the sequence
+					layoutModel.removeInterval(group, i); // removes li from group
+					LayoutInterval sub = layoutModel.removeInterval(li, 0); // removes last interval from li
+					layoutModel.setIntervalAlignment(sub, li.getRawAlignment());
+					layoutModel.addInterval(sub, group, i);
+				}
+			}
+		}
+		LayoutInterval leadingGap = null;
+		LayoutInterval trailingGap = null;
+		if (anyGapLeading) {
+			if (!anyAlignedLeading) { // group is open at leading edge
+				int size = groupInnerPosLeading - groupOuterPos[LEADING];
+				if (size > 0 || defaultPaddingLeading != null) {
+					leadingGap = new LayoutInterval(SINGLE);
+					if (defaultPaddingLeading != null) {
+						leadingGap.setPaddingType(defaultPaddingLeading);
+					} else {
+						leadingGap.setPreferredSize(size);
+						if (!resizingGapLeading) {
+							leadingGap.setMinimumSize(USE_PREFERRED_SIZE);
+						}
+					}
+					if (resizingGapLeading) {
+						leadingGap.setMaximumSize(Short.MAX_VALUE);
+					}
+				}
+			} else if (sameMinGapLeading) {
+				leadingGap = new LayoutInterval(SINGLE);
+				//                int size = commonGapLeading.getMinimumSize();
+				//                if (size == USE_PREFERRED_SIZE)
+				//                    size = commonGapLeading.getPreferredSize();
+				//                leadingGap.setSizes(size, size, USE_PREFERRED_SIZE);
+				leadingGap.setSizes(commonGapLeadingSize, commonGapLeadingSize, USE_PREFERRED_SIZE);
+				if (commonGapLeadingSize == DEFAULT) {
+					leadingGap.setPaddingType(defaultPaddingLeading);
+				}
+			}
+		}
+		if (anyGapTrailing) {
+			if (!anyAlignedTrailing) { // group is open at trailing edge
+				int size = groupOuterPos[TRAILING] - groupInnerPosTrailing;
+				if (size > 0 || defaultPaddingTrailing != null) {
+					trailingGap = new LayoutInterval(SINGLE);
+					if (defaultPaddingTrailing != null) {
+						trailingGap.setPaddingType(defaultPaddingTrailing);
+					} else {
+						trailingGap.setPreferredSize(size);
+						if (!resizingGapTrailing) {
+							trailingGap.setMinimumSize(USE_PREFERRED_SIZE);
+						}
+					}
+					if (resizingGapTrailing) {
+						trailingGap.setMaximumSize(Short.MAX_VALUE);
+					}
+				}
+			} else if (sameMinGapTrailing) {
+				trailingGap = new LayoutInterval(SINGLE);
+				//                int size = commonGapTrailing.getMinimumSize();
+				//                if (size == USE_PREFERRED_SIZE)
+				//                    size = commonGapTrailing.getPreferredSize();
+				//                trailingGap.setSizes(size, size, USE_PREFERRED_SIZE);
+				trailingGap.setSizes(commonGapTrailingSize, commonGapTrailingSize, USE_PREFERRED_SIZE);
+				if (commonGapTrailingSize == DEFAULT) {
+					trailingGap.setPaddingType(defaultPaddingTrailing);
+				}
+			}
+		}
+		if (leadingGap != null || trailingGap != null) {
+			if (leadingGap != null || !LayoutRegion.isValidCoordinate(groupOuterPos[LEADING])) {
+				groupOuterPos[LEADING] = groupInnerPosLeading;
+			}
+			if (trailingGap != null || !LayoutRegion.isValidCoordinate(groupOuterPos[TRAILING])) {
+				groupOuterPos[TRAILING] = groupInnerPosTrailing;
+			}
+			groupOuterPos[CENTER] = (groupInnerPosLeading + groupInnerPosTrailing) / 2;
+			if (leadingGap != null) {
+				group = insertGap(leadingGap, group, groupInnerPosLeading, dimension, LEADING);
+			}
+			if (trailingGap != null) {
+				group = insertGap(trailingGap, group, groupInnerPosTrailing, dimension, TRAILING);
+			}
+			LayoutInterval parent = group.getParent();
+			return parent != null ? parent.indexOf(group) : -1;//idx;
+		}
+		return -1;
+	}
 
-  private boolean isEndingDefaultGapEffective(LayoutInterval seq, int dimension, int alignment) {
-    assert seq.isSequential() && (alignment == LEADING || alignment == TRAILING);
-    int idx = alignment == LEADING ? 0 : seq.getSubIntervalCount() - 1;
-    int d = alignment == LEADING ? 1 : -1;
-    LayoutInterval gap = seq.getSubInterval(idx);
-    LayoutInterval neighbor = seq.getSubInterval(idx + d);
-    if (LayoutInterval.getEffectiveAlignment(neighbor, alignment) == alignment) {
-      return true; // aligned
-    } else {
-      int prefDistance = LayoutUtils.getSizeOfDefaultGap(gap, visualMapper);
-      int pos1 = neighbor.getCurrentSpace().positions[dimension][alignment];
-      LayoutInterval outerNeighbor = LayoutInterval.getNeighbor(gap, alignment, true, true, false);
-      int pos2 = outerNeighbor != null
-          ? outerNeighbor.getCurrentSpace().positions[dimension][alignment ^ 1]
-          : LayoutInterval.getRoot(seq).getCurrentSpace().positions[dimension][alignment];
-      int currentDistance = (pos1 - pos2) * d;
-      return currentDistance <= prefDistance;
-    }
-  }
+	private boolean isEndingDefaultGapEffective(LayoutInterval seq, int dimension, int alignment) {
+		assert seq.isSequential() && (alignment == LEADING || alignment == TRAILING);
+		int idx = alignment == LEADING ? 0 : seq.getSubIntervalCount() - 1;
+		int d = alignment == LEADING ? 1 : -1;
+		LayoutInterval gap = seq.getSubInterval(idx);
+		LayoutInterval neighbor = seq.getSubInterval(idx + d);
+		if (LayoutInterval.getEffectiveAlignment(neighbor, alignment) == alignment) {
+			return true; // aligned
+		} else {
+			int prefDistance = LayoutUtils.getSizeOfDefaultGap(gap, visualMapper);
+			int pos1 = neighbor.getCurrentSpace().positions[dimension][alignment];
+			LayoutInterval outerNeighbor = LayoutInterval.getNeighbor(gap, alignment, true, true, false);
+			int pos2 = outerNeighbor != null
+					? outerNeighbor.getCurrentSpace().positions[dimension][alignment ^ 1]
+							: LayoutInterval.getRoot(seq).getCurrentSpace().positions[dimension][alignment];
+			int currentDistance = (pos1 - pos2) * d;
+			return currentDistance <= prefDistance;
+		}
+	}
 
-  boolean cutStartingGap(LayoutInterval group, int size, int dimension, int alignment) {
-    assert group.isGroup() && size > 0 && (alignment == LEADING || alignment == TRAILING);
-    // [just very simple impl. for now - considering just one sequence...]
-    LayoutInterval seq = null;
-    if (group.isSequential()) {
-      seq = group;
-    } else if (group.getSubIntervalCount() == 1) {
-      LayoutInterval li = group.getSubInterval(0);
-      if (li.isSequential() && LayoutInterval.isAlignedAtBorder(li, alignment)) {
-        seq = li;
-      }
-    }
-    if (seq != null && seq.getSubIntervalCount() > 1) {
-      LayoutInterval gap =
-          seq.getSubInterval(alignment == LEADING ? 0 : seq.getSubIntervalCount() - 1);
-      LayoutInterval neighbor = LayoutInterval.getDirectNeighbor(gap, alignment ^ 1, true);
-      if (gap != null && gap.isEmptySpace() && neighbor != null) {
-        int currentSize = gap.getPreferredSize();
-        if (currentSize == NOT_EXPLICITLY_DEFINED) {
-          currentSize = LayoutRegion.distance(
-              group.getCurrentSpace(),
-              neighbor.getCurrentSpace(),
-              dimension,
-              alignment,
-              alignment) * (alignment == TRAILING ? -1 : 1);
-        }
-        if (currentSize >= size) {
-          if (currentSize > size) {
-            resizeInterval(gap, currentSize - size);
-          } else {
-            layoutModel.removeInterval(gap);
-          }
-          return true;
-        }
-      }
-    }
-    return false;
-  }
+	boolean cutStartingGap(LayoutInterval group, int size, int dimension, int alignment) {
+		assert group.isGroup() && size > 0 && (alignment == LEADING || alignment == TRAILING);
+		// [just very simple impl. for now - considering just one sequence...]
+		LayoutInterval seq = null;
+		if (group.isSequential()) {
+			seq = group;
+		} else if (group.getSubIntervalCount() == 1) {
+			LayoutInterval li = group.getSubInterval(0);
+			if (li.isSequential() && LayoutInterval.isAlignedAtBorder(li, alignment)) {
+				seq = li;
+			}
+		}
+		if (seq != null && seq.getSubIntervalCount() > 1) {
+			LayoutInterval gap =
+					seq.getSubInterval(alignment == LEADING ? 0 : seq.getSubIntervalCount() - 1);
+			LayoutInterval neighbor = LayoutInterval.getDirectNeighbor(gap, alignment ^ 1, true);
+			if (gap != null && gap.isEmptySpace() && neighbor != null) {
+				int currentSize = gap.getPreferredSize();
+				if (currentSize == NOT_EXPLICITLY_DEFINED) {
+					currentSize = LayoutRegion.distance(
+							group.getCurrentSpace(),
+							neighbor.getCurrentSpace(),
+							dimension,
+							alignment,
+							alignment) * (alignment == TRAILING ? -1 : 1);
+				}
+				if (currentSize >= size) {
+					if (currentSize > size) {
+						resizeInterval(gap, currentSize - size);
+					} else {
+						layoutModel.removeInterval(gap);
+					}
+					return true;
+				}
+			}
+		}
+		return false;
+	}
 
-  /**
-   * Inserts a gap before or after specified interval. If in a sequence, the method takes care about
-   * merging gaps if there is already some as neighbor. Expects the actual positions of the sequence
-   * are up-to-date.
-   *
-   * @param gap
-   *          the gap to be inserted
-   * @param interval
-   *          the interval before or after which the gap is added
-   * @param pos
-   *          expected real position of the end of the interval where the gap is added (need not
-   *          correspond to that stored in the interval)
-   * @param dimension
-   * @param alignment
-   *          at which side of the interval the gap is added (LEADING or TRAILING)
-   */
-  LayoutInterval insertGap(LayoutInterval gap,
-      LayoutInterval interval,
-      int pos,
-      int dimension,
-      int alignment) {
-    assert alignment == LEADING || alignment == TRAILING;
-    assert !interval.isSequential();
-    assert gap.isEmptySpace();
-    LayoutInterval parent = interval.getParent();
-    if (parent == null) {
-      assert interval.isParallel();
-      parent = interval;
-      if (parent.getSubIntervalCount() > 1) {
-        LayoutInterval seq = new LayoutInterval(SEQUENTIAL);
-        seq.getCurrentSpace().set(
-            dimension,
-            alignment == LEADING ? pos : interval.getCurrentSpace().positions[dimension][LEADING],
-            alignment == LEADING ? interval.getCurrentSpace().positions[dimension][TRAILING] : pos);
-        layoutModel.addInterval(seq, parent, -1);
-        interval = new LayoutInterval(PARALLEL);
-        interval.getCurrentSpace().set(dimension, parent.getCurrentSpace());
-        layoutModel.addInterval(interval, seq, 0);
-        while (parent.getSubIntervalCount() > 1) {
-          layoutModel.addInterval(layoutModel.removeInterval(parent, 0), interval, -1);
-        }
-        parent = seq;
-      } else {
-        interval = parent.getSubInterval(0);
-        if (interval.isSequential()) {
-          parent = interval;
-          int subIdx = alignment == LEADING ? 0 : parent.getSubIntervalCount() - 1;
-          interval = parent.getSubInterval(subIdx);
-          if (interval.isEmptySpace()) {
-            subIdx += alignment == LEADING ? 1 : -1;
-            LayoutInterval neighbor = subIdx >= 0 && subIdx < parent.getSubIntervalCount()
-                ? parent.getSubInterval(subIdx)
-                : null;
-            int[] outerSpace = parent.getParent().getCurrentSpace().positions[dimension];
-            int otherPos = neighbor != null
-                ? neighbor.getCurrentSpace().positions[dimension][alignment]
-                : outerSpace[alignment ^ 1];
-            int mergedSize = (outerSpace[alignment] - otherPos) * (alignment == LEADING ? -1 : 1);
-            eatGap(interval, gap, mergedSize);
-            return neighbor != null ? neighbor : interval;
-          }
-        } else {
-          LayoutInterval seq = new LayoutInterval(SEQUENTIAL);
-          seq.getCurrentSpace().set(
-              dimension,
-              alignment == LEADING ? pos : interval.getCurrentSpace().positions[dimension][LEADING],
-              alignment == LEADING
-                  ? interval.getCurrentSpace().positions[dimension][TRAILING]
-                  : pos);
-          layoutModel.addInterval(seq, parent, -1);
-          layoutModel.removeInterval(interval);
-          layoutModel.addInterval(interval, seq, -1);
-          parent = seq;
-        }
-      }
-    }
-    if (parent.isSequential()) {
-      // we can't use insertGapIntoSequence here because 'pos' can be special
-      LayoutInterval neighbor = LayoutInterval.getDirectNeighbor(interval, alignment, false);
-      if (neighbor != null && neighbor.isEmptySpace()) {
-        LayoutInterval next = LayoutInterval.getDirectNeighbor(neighbor, alignment, false);
-        int otherPos = next != null
-            ? next.getCurrentSpace().positions[dimension][alignment ^ 1]
-            : parent.getCurrentSpace().positions[dimension][alignment];
-        int mergedSize = (pos - otherPos) * (alignment == LEADING ? 1 : -1);
-        eatGap(neighbor, gap, mergedSize);
-      } else {
-        int idx = parent.indexOf(interval) + (alignment == LEADING ? 0 : 1);
-        layoutModel.addInterval(gap, parent, idx);
-      }
-    } else { // parallel parent
-      LayoutInterval seq = new LayoutInterval(SEQUENTIAL);
-      int idx = layoutModel.removeInterval(interval);
-      seq.setAlignment(interval.getAlignment());
-      seq.getCurrentSpace().set(
-          dimension,
-          alignment == LEADING ? pos : interval.getCurrentSpace().positions[dimension][LEADING],
-          alignment == LEADING ? interval.getCurrentSpace().positions[dimension][TRAILING] : pos);
-      layoutModel.addInterval(seq, parent, idx);
-      layoutModel.setIntervalAlignment(interval, DEFAULT);
-      layoutModel.addInterval(interval, seq, 0);
-      layoutModel.addInterval(gap, seq, alignment == LEADING ? 0 : 1);
-    }
-    return interval;
-  }
+	/**
+	 * Inserts a gap before or after specified interval. If in a sequence, the method takes care about
+	 * merging gaps if there is already some as neighbor. Expects the actual positions of the sequence
+	 * are up-to-date.
+	 *
+	 * @param gap
+	 *          the gap to be inserted
+	 * @param interval
+	 *          the interval before or after which the gap is added
+	 * @param pos
+	 *          expected real position of the end of the interval where the gap is added (need not
+	 *          correspond to that stored in the interval)
+	 * @param dimension
+	 * @param alignment
+	 *          at which side of the interval the gap is added (LEADING or TRAILING)
+	 */
+	LayoutInterval insertGap(LayoutInterval gap,
+			LayoutInterval interval,
+			int pos,
+			int dimension,
+			int alignment) {
+		assert alignment == LEADING || alignment == TRAILING;
+		assert !interval.isSequential();
+		assert gap.isEmptySpace();
+		LayoutInterval parent = interval.getParent();
+		if (parent == null) {
+			assert interval.isParallel();
+			parent = interval;
+			if (parent.getSubIntervalCount() > 1) {
+				LayoutInterval seq = new LayoutInterval(SEQUENTIAL);
+				seq.getCurrentSpace().set(
+						dimension,
+						alignment == LEADING ? pos : interval.getCurrentSpace().positions[dimension][LEADING],
+								alignment == LEADING ? interval.getCurrentSpace().positions[dimension][TRAILING] : pos);
+				layoutModel.addInterval(seq, parent, -1);
+				interval = new LayoutInterval(PARALLEL);
+				interval.getCurrentSpace().set(dimension, parent.getCurrentSpace());
+				layoutModel.addInterval(interval, seq, 0);
+				while (parent.getSubIntervalCount() > 1) {
+					layoutModel.addInterval(layoutModel.removeInterval(parent, 0), interval, -1);
+				}
+				parent = seq;
+			} else {
+				interval = parent.getSubInterval(0);
+				if (interval.isSequential()) {
+					parent = interval;
+					int subIdx = alignment == LEADING ? 0 : parent.getSubIntervalCount() - 1;
+					interval = parent.getSubInterval(subIdx);
+					if (interval.isEmptySpace()) {
+						subIdx += alignment == LEADING ? 1 : -1;
+						LayoutInterval neighbor = subIdx >= 0 && subIdx < parent.getSubIntervalCount()
+								? parent.getSubInterval(subIdx)
+										: null;
+						int[] outerSpace = parent.getParent().getCurrentSpace().positions[dimension];
+						int otherPos = neighbor != null
+								? neighbor.getCurrentSpace().positions[dimension][alignment]
+										: outerSpace[alignment ^ 1];
+						int mergedSize = (outerSpace[alignment] - otherPos) * (alignment == LEADING ? -1 : 1);
+						eatGap(interval, gap, mergedSize);
+						return neighbor != null ? neighbor : interval;
+					}
+				} else {
+					LayoutInterval seq = new LayoutInterval(SEQUENTIAL);
+					seq.getCurrentSpace().set(
+							dimension,
+							alignment == LEADING ? pos : interval.getCurrentSpace().positions[dimension][LEADING],
+									alignment == LEADING
+									? interval.getCurrentSpace().positions[dimension][TRAILING]
+											: pos);
+					layoutModel.addInterval(seq, parent, -1);
+					layoutModel.removeInterval(interval);
+					layoutModel.addInterval(interval, seq, -1);
+					parent = seq;
+				}
+			}
+		}
+		if (parent.isSequential()) {
+			// we can't use insertGapIntoSequence here because 'pos' can be special
+			LayoutInterval neighbor = LayoutInterval.getDirectNeighbor(interval, alignment, false);
+			if (neighbor != null && neighbor.isEmptySpace()) {
+				LayoutInterval next = LayoutInterval.getDirectNeighbor(neighbor, alignment, false);
+				int otherPos = next != null
+						? next.getCurrentSpace().positions[dimension][alignment ^ 1]
+								: parent.getCurrentSpace().positions[dimension][alignment];
+				int mergedSize = (pos - otherPos) * (alignment == LEADING ? 1 : -1);
+				eatGap(neighbor, gap, mergedSize);
+			} else {
+				int idx = parent.indexOf(interval) + (alignment == LEADING ? 0 : 1);
+				layoutModel.addInterval(gap, parent, idx);
+			}
+		} else { // parallel parent
+			LayoutInterval seq = new LayoutInterval(SEQUENTIAL);
+			int idx = layoutModel.removeInterval(interval);
+			seq.setAlignment(interval.getAlignment());
+			seq.getCurrentSpace().set(
+					dimension,
+					alignment == LEADING ? pos : interval.getCurrentSpace().positions[dimension][LEADING],
+							alignment == LEADING ? interval.getCurrentSpace().positions[dimension][TRAILING] : pos);
+			layoutModel.addInterval(seq, parent, idx);
+			layoutModel.setIntervalAlignment(interval, DEFAULT);
+			layoutModel.addInterval(interval, seq, 0);
+			layoutModel.addInterval(gap, seq, alignment == LEADING ? 0 : 1);
+		}
+		return interval;
+	}
 
-  int insertGapIntoSequence(LayoutInterval gap, LayoutInterval seq, int index, int dimension) {
-    assert gap.isEmptySpace();
-    LayoutInterval otherGap = null;
-    int alignment = DEFAULT;
-    if (index >= 0 && index < seq.getSubIntervalCount()) {
-      otherGap = seq.getSubInterval(index);
-      if (otherGap.isEmptySpace()) {
-        alignment = TRAILING;
-      }
-    }
-    if (alignment == DEFAULT && index > 0) {
-      otherGap = seq.getSubInterval(index - 1);
-      if (otherGap.isEmptySpace()) {
-        alignment = LEADING;
-      }
-    }
-    if (alignment == DEFAULT) {
-      layoutModel.addInterval(gap, seq, index);
-      return index; // gap was added normally
-    }
-    int pos1, pos2;
-    LayoutInterval neighbor = LayoutInterval.getDirectNeighbor(otherGap, alignment, true);
-    pos1 = neighbor != null
-        ? neighbor.getCurrentSpace().positions[dimension][alignment ^ 1]
-        : seq.getCurrentSpace().positions[dimension][alignment];
-    neighbor = LayoutInterval.getDirectNeighbor(otherGap, alignment ^ 1, true);
-    pos2 = neighbor != null
-        ? neighbor.getCurrentSpace().positions[dimension][alignment]
-        : seq.getCurrentSpace().positions[dimension][alignment ^ 1];
-    eatGap(otherGap, gap, Math.abs(pos2 - pos1));
-    return alignment == LEADING ? index - 1 : index; // gap was eaten
-  }
+	int insertGapIntoSequence(LayoutInterval gap, LayoutInterval seq, int index, int dimension) {
+		assert gap.isEmptySpace();
+		LayoutInterval otherGap = null;
+		int alignment = DEFAULT;
+		if (index >= 0 && index < seq.getSubIntervalCount()) {
+			otherGap = seq.getSubInterval(index);
+			if (otherGap.isEmptySpace()) {
+				alignment = TRAILING;
+			}
+		}
+		if (alignment == DEFAULT && index > 0) {
+			otherGap = seq.getSubInterval(index - 1);
+			if (otherGap.isEmptySpace()) {
+				alignment = LEADING;
+			}
+		}
+		if (alignment == DEFAULT) {
+			layoutModel.addInterval(gap, seq, index);
+			return index; // gap was added normally
+		}
+		int pos1, pos2;
+		LayoutInterval neighbor = LayoutInterval.getDirectNeighbor(otherGap, alignment, true);
+		pos1 = neighbor != null
+				? neighbor.getCurrentSpace().positions[dimension][alignment ^ 1]
+						: seq.getCurrentSpace().positions[dimension][alignment];
+		neighbor = LayoutInterval.getDirectNeighbor(otherGap, alignment ^ 1, true);
+		pos2 = neighbor != null
+				? neighbor.getCurrentSpace().positions[dimension][alignment]
+						: seq.getCurrentSpace().positions[dimension][alignment ^ 1];
+		eatGap(otherGap, gap, Math.abs(pos2 - pos1));
+		return alignment == LEADING ? index - 1 : index; // gap was eaten
+	}
 
-  void eatGap(LayoutInterval main, LayoutInterval eaten, int currentMergedSize) {
-    int min;
-    int min1 = main.getMinimumSize();
-    if (min1 == USE_PREFERRED_SIZE) {
-      min1 = main.getPreferredSize();
-    }
-    int min2 = eaten.getMinimumSize();
-    if (min2 == USE_PREFERRED_SIZE) {
-      min2 = eaten.getPreferredSize();
-    }
-    if (min1 == 0) {
-      min = min2;
-    } else if (min2 == 0) {
-      min = min1;
-    } else if (!LayoutInterval.canResize(main) && !LayoutInterval.canResize(eaten)) {
-      min = USE_PREFERRED_SIZE;
-    } else if (min1 == NOT_EXPLICITLY_DEFINED || min2 == NOT_EXPLICITLY_DEFINED) {
-      min = NOT_EXPLICITLY_DEFINED;
-    } else {
-      min = min1 + min2;
-    }
-    int pref;
-    int pref1 = main.getPreferredSize();
-    int pref2 = eaten.getPreferredSize();
-    if (pref1 == 0) {
-      pref = pref2;
-    } else if (pref2 == 0) {
-      pref = pref1;
-    } else if (pref1 == NOT_EXPLICITLY_DEFINED || pref2 == NOT_EXPLICITLY_DEFINED) {
-      pref = currentMergedSize;
-    } else {
-      pref = pref1 + pref2;
-    }
-    int max = main.getMaximumSize() >= Short.MAX_VALUE || eaten.getMaximumSize() >= Short.MAX_VALUE
-        ? Short.MAX_VALUE
-        : USE_PREFERRED_SIZE;
-    layoutModel.setIntervalSize(main, min, pref, max);
-    if (eaten.getParent() != null) {
-      layoutModel.removeInterval(eaten);
-    }
-  }
+	void eatGap(LayoutInterval main, LayoutInterval eaten, int currentMergedSize) {
+		int min;
+		int min1 = main.getMinimumSize();
+		if (min1 == USE_PREFERRED_SIZE) {
+			min1 = main.getPreferredSize();
+		}
+		int min2 = eaten.getMinimumSize();
+		if (min2 == USE_PREFERRED_SIZE) {
+			min2 = eaten.getPreferredSize();
+		}
+		if (min1 == 0) {
+			min = min2;
+		} else if (min2 == 0) {
+			min = min1;
+		} else if (!LayoutInterval.canResize(main) && !LayoutInterval.canResize(eaten)) {
+			min = USE_PREFERRED_SIZE;
+		} else if (min1 == NOT_EXPLICITLY_DEFINED || min2 == NOT_EXPLICITLY_DEFINED) {
+			min = NOT_EXPLICITLY_DEFINED;
+		} else {
+			min = min1 + min2;
+		}
+		int pref;
+		int pref1 = main.getPreferredSize();
+		int pref2 = eaten.getPreferredSize();
+		if (pref1 == 0) {
+			pref = pref2;
+		} else if (pref2 == 0) {
+			pref = pref1;
+		} else if (pref1 == NOT_EXPLICITLY_DEFINED || pref2 == NOT_EXPLICITLY_DEFINED) {
+			pref = currentMergedSize;
+		} else {
+			pref = pref1 + pref2;
+		}
+		int max = main.getMaximumSize() >= Short.MAX_VALUE || eaten.getMaximumSize() >= Short.MAX_VALUE
+				? Short.MAX_VALUE
+						: USE_PREFERRED_SIZE;
+		layoutModel.setIntervalSize(main, min, pref, max);
+		if (eaten.getParent() != null) {
+			layoutModel.removeInterval(eaten);
+		}
+	}
 
-  void mergeAdjacentGaps(Set<LayoutComponent> updatedContainers) {
-    Iterator it = layoutModel.getAllComponents();
-    while (it.hasNext()) {
-      LayoutComponent comp = (LayoutComponent) it.next();
-      if (!comp.isLayoutContainer()) {
-        continue;
-      }
-      boolean updated = false;
-      for (LayoutInterval[] roots : comp.getLayoutRoots()) {
-        for (int dim = 0; dim < DIM_COUNT; dim++) {
-          updated = mergeAdjacentGaps(roots[dim], dim) || updated;
-        }
-      }
-      if (updated) {
-        updatedContainers.add(comp);
-      }
-    }
-  }
+	void mergeAdjacentGaps(Set<LayoutComponent> updatedContainers) {
+		Iterator it = layoutModel.getAllComponents();
+		while (it.hasNext()) {
+			LayoutComponent comp = (LayoutComponent) it.next();
+			if (!comp.isLayoutContainer()) {
+				continue;
+			}
+			boolean updated = false;
+			for (LayoutInterval[] roots : comp.getLayoutRoots()) {
+				for (int dim = 0; dim < DIM_COUNT; dim++) {
+					updated = mergeAdjacentGaps(roots[dim], dim) || updated;
+				}
+			}
+			if (updated) {
+				updatedContainers.add(comp);
+			}
+		}
+	}
 
-  boolean mergeAdjacentGaps(LayoutInterval root, int dimension) {
-    assert root.isGroup();
-    boolean updated = false;
-    if (root.isSequential()) {
-      for (int i = 0; i < root.getSubIntervalCount(); i++) {
-        LayoutInterval interval = root.getSubInterval(i);
-        if (interval.isEmptySpace() && i + 1 < root.getSubIntervalCount()) {
-          LayoutInterval next = root.getSubInterval(i + 1);
-          if (next.isEmptySpace()) {
-            if (i + 2 < root.getSubIntervalCount()) {
-              LayoutInterval nextNext = root.getSubInterval(i + 2);
-              if (nextNext.isEmptySpace()) {
-                i--; // The merged gap should be merged with nextNext gap
-              }
-            }
-            updated = true;
-            eatGap(interval, next, NOT_EXPLICITLY_DEFINED);
-          }
-        }
-      }
-    }
-    Iterator<LayoutInterval> iter = root.getSubIntervals();
-    while (iter.hasNext()) {
-      LayoutInterval subInterval = iter.next();
-      if (subInterval.isGroup()) {
-        updated = updated || mergeAdjacentGaps(subInterval, dimension);
-      }
-    }
-    return updated;
-  }
+	boolean mergeAdjacentGaps(LayoutInterval root, int dimension) {
+		assert root.isGroup();
+		boolean updated = false;
+		if (root.isSequential()) {
+			for (int i = 0; i < root.getSubIntervalCount(); i++) {
+				LayoutInterval interval = root.getSubInterval(i);
+				if (interval.isEmptySpace() && i + 1 < root.getSubIntervalCount()) {
+					LayoutInterval next = root.getSubInterval(i + 1);
+					if (next.isEmptySpace()) {
+						if (i + 2 < root.getSubIntervalCount()) {
+							LayoutInterval nextNext = root.getSubInterval(i + 2);
+							if (nextNext.isEmptySpace()) {
+								i--; // The merged gap should be merged with nextNext gap
+							}
+						}
+						updated = true;
+						eatGap(interval, next, NOT_EXPLICITLY_DEFINED);
+					}
+				}
+			}
+		}
+		Iterator<LayoutInterval> iter = root.getSubIntervals();
+		while (iter.hasNext()) {
+			LayoutInterval subInterval = iter.next();
+			if (subInterval.isGroup()) {
+				updated = updated || mergeAdjacentGaps(subInterval, dimension);
+			}
+		}
+		return updated;
+	}
 
-  void suppressResizingOfSurroundingGaps(LayoutInterval interval) {
-    LayoutInterval parent = interval.getParent();
-    while (parent != null) {
-      if (parent.isSequential()) {
-        for (Iterator<LayoutInterval> it = parent.getSubIntervals(); it.hasNext();) {
-          LayoutInterval sub = it.next();
-          if (sub != interval && sub.isEmptySpace() && LayoutInterval.canResize(sub)) {
-            int pref = sub.getPreferredSize();
-            int min = sub.getMinimumSize() != pref ? USE_PREFERRED_SIZE : pref;
-            int max = USE_PREFERRED_SIZE;
-            layoutModel.setIntervalSize(sub, min, pref, max);
-          }
-        }
-      } else if (!LayoutInterval.canResize(parent)) {
-        break;
-      }
-      interval = parent;
-      parent = interval.getParent();
-    }
-  }
+	void suppressResizingOfSurroundingGaps(LayoutInterval interval) {
+		LayoutInterval parent = interval.getParent();
+		while (parent != null) {
+			if (parent.isSequential()) {
+				for (Iterator<LayoutInterval> it = parent.getSubIntervals(); it.hasNext();) {
+					LayoutInterval sub = it.next();
+					if (sub != interval && sub.isEmptySpace() && LayoutInterval.canResize(sub)) {
+						int pref = sub.getPreferredSize();
+						int min = sub.getMinimumSize() != pref ? USE_PREFERRED_SIZE : pref;
+						int max = USE_PREFERRED_SIZE;
+						layoutModel.setIntervalSize(sub, min, pref, max);
+					}
+				}
+			} else if (!LayoutInterval.canResize(parent)) {
+				break;
+			}
+			interval = parent;
+			parent = interval.getParent();
+		}
+	}
 }
diff --git a/org.eclipse.wb.layout.group/netbeans-src/org/netbeans/modules/form/layoutdesign/LayoutPersistenceManager.java b/org.eclipse.wb.layout.group/netbeans-src/org/netbeans/modules/form/layoutdesign/LayoutPersistenceManager.java
index 68fd0e5f3..52c268bc7 100644
--- a/org.eclipse.wb.layout.group/netbeans-src/org/netbeans/modules/form/layoutdesign/LayoutPersistenceManager.java
+++ b/org.eclipse.wb.layout.group/netbeans-src/org/netbeans/modules/form/layoutdesign/LayoutPersistenceManager.java
@@ -45,720 +45,720 @@
  * @author Jan Stola
  */
 class LayoutPersistenceManager implements LayoutConstants {
-  /** Layout model to load/save. */
-  private final LayoutModel layoutModel;
-  /** Currently processed layout container. */
-  private LayoutComponent layoutContainer;
-  /** Index of the currently processed layout root interval. */
-  private int rootIndex;
-  /** Currently processed dimension. */
-  private int dimension;
-  /** Map from component IDs to names or vice versa. */
-  private Map<String, String> idNameMap;
-  /** Determines whether constants should be replaces by human readable expressions. */
-  private boolean humanReadable;
-  /** Size of current indent. */
-  private int indent;
-  /** String buffer used to save layout. */
-  private StringBuilder sb;
-  // elements names
-  static final String XML_DIMENSION_LAYOUT = "DimensionLayout"; // NOI18N
-  static final String XML_GROUP = "Group"; // NOI18N
-  static final String XML_COMPONENT = "Component"; // NOI18N
-  static final String XML_EMPTY_SPACE = "EmptySpace"; // NOI18N
-  // attributes names
-  static final String ATTR_DIMENSION_DIM = "dim"; // NOI18N
-  static final String ATTR_GROUP_TYPE = "type"; // NOI18N
-  static final String ATTR_PADDING_TYPE = "type"; // NOI18N
-  static final String ATTR_SIZE_MIN = "min"; // NOI18N
-  static final String ATTR_SIZE_PREF = "pref"; // NOI18N
-  static final String ATTR_SIZE_MAX = "max"; // NOI18N
-  static final String ATTR_ALIGNMENT = "alignment"; // NOI18N
-  static final String ATTR_GROUP_ALIGNMENT = "groupAlignment"; // NOI18N
-  static final String ATTR_LINK_SIZE = "linkSize"; // NOI18N
-  static final String ATTR_COMPONENT_ID = "id"; // NOI18N
-  static final String ATTR_ATTRIBUTES = "attributes"; // NOI18N
-  static final String ATTR_ROOT_INDEX = "rootIndex"; // NOI18N
-  // attribute values
-  static final String VALUE_DIMENSION_HORIZONTAL = "horizontal"; // NOI18N
-  static final String VALUE_DIMENSION_VERTICAL = "vertical"; // NOI18N
-  static final String VALUE_ALIGNMENT_LEADING = "leading"; // NOI18N
-  static final String VALUE_ALIGNMENT_TRAILING = "trailing"; // NOI18N
-  static final String VALUE_ALIGNMENT_CENTER = "center"; // NOI18N
-  static final String VALUE_ALIGNMENT_BASELINE = "baseline"; // NOI18N
-  static final String VALUE_SIZE_PREFERRED = "$pref"; // NOI18N
-  static final String VALUE_SIZE_MAX = "Short.MAX_VALUE"; // NOI18N
-  static final String VALUE_GROUP_PARALLEL = "parallel"; // NOI18N
-  static final String VALUE_GROUP_SEQUENTIAL = "sequential"; // NOI18N
-  static final String VALUE_PADDING_RELATED = "related"; // NOI18N
-  static final String VALUE_PADDING_UNRELATED = "unrelated"; // NOI18N
-  static final String VALUE_PADDING_SEPARATE = "separate"; // NOI18N
-  static final String VALUE_PADDING_INDENT = "indent"; // NOI18N
+	/** Layout model to load/save. */
+	private final LayoutModel layoutModel;
+	/** Currently processed layout container. */
+	private LayoutComponent layoutContainer;
+	/** Index of the currently processed layout root interval. */
+	private int rootIndex;
+	/** Currently processed dimension. */
+	private int dimension;
+	/** Map from component IDs to names or vice versa. */
+	private Map<String, String> idNameMap;
+	/** Determines whether constants should be replaces by human readable expressions. */
+	private boolean humanReadable;
+	/** Size of current indent. */
+	private int indent;
+	/** String buffer used to save layout. */
+	private StringBuilder sb;
+	// elements names
+	static final String XML_DIMENSION_LAYOUT = "DimensionLayout"; // NOI18N
+	static final String XML_GROUP = "Group"; // NOI18N
+	static final String XML_COMPONENT = "Component"; // NOI18N
+	static final String XML_EMPTY_SPACE = "EmptySpace"; // NOI18N
+	// attributes names
+	static final String ATTR_DIMENSION_DIM = "dim"; // NOI18N
+	static final String ATTR_GROUP_TYPE = "type"; // NOI18N
+	static final String ATTR_PADDING_TYPE = "type"; // NOI18N
+	static final String ATTR_SIZE_MIN = "min"; // NOI18N
+	static final String ATTR_SIZE_PREF = "pref"; // NOI18N
+	static final String ATTR_SIZE_MAX = "max"; // NOI18N
+	static final String ATTR_ALIGNMENT = "alignment"; // NOI18N
+	static final String ATTR_GROUP_ALIGNMENT = "groupAlignment"; // NOI18N
+	static final String ATTR_LINK_SIZE = "linkSize"; // NOI18N
+	static final String ATTR_COMPONENT_ID = "id"; // NOI18N
+	static final String ATTR_ATTRIBUTES = "attributes"; // NOI18N
+	static final String ATTR_ROOT_INDEX = "rootIndex"; // NOI18N
+	// attribute values
+	static final String VALUE_DIMENSION_HORIZONTAL = "horizontal"; // NOI18N
+	static final String VALUE_DIMENSION_VERTICAL = "vertical"; // NOI18N
+	static final String VALUE_ALIGNMENT_LEADING = "leading"; // NOI18N
+	static final String VALUE_ALIGNMENT_TRAILING = "trailing"; // NOI18N
+	static final String VALUE_ALIGNMENT_CENTER = "center"; // NOI18N
+	static final String VALUE_ALIGNMENT_BASELINE = "baseline"; // NOI18N
+	static final String VALUE_SIZE_PREFERRED = "$pref"; // NOI18N
+	static final String VALUE_SIZE_MAX = "Short.MAX_VALUE"; // NOI18N
+	static final String VALUE_GROUP_PARALLEL = "parallel"; // NOI18N
+	static final String VALUE_GROUP_SEQUENTIAL = "sequential"; // NOI18N
+	static final String VALUE_PADDING_RELATED = "related"; // NOI18N
+	static final String VALUE_PADDING_UNRELATED = "unrelated"; // NOI18N
+	static final String VALUE_PADDING_SEPARATE = "separate"; // NOI18N
+	static final String VALUE_PADDING_INDENT = "indent"; // NOI18N
 
-  /**
-   * Creates new <code>LayoutPersistenceManager</code>.
-   *
-   * @param layoutModel
-   *          layout model to load/save.
-   */
-  private LayoutPersistenceManager(LayoutModel layoutModel) {
-    this.layoutModel = layoutModel;
-  }
+	/**
+	 * Creates new <code>LayoutPersistenceManager</code>.
+	 *
+	 * @param layoutModel
+	 *          layout model to load/save.
+	 */
+	private LayoutPersistenceManager(LayoutModel layoutModel) {
+		this.layoutModel = layoutModel;
+	}
 
-  /**
-   * Returns the layout model saved as XML in a String.
-   *
-   * @param layoutModel
-   *          layout model to save
-   * @param container
-   *          the layout container to be saved
-   * @param idToNameMap
-   *          map for translating component Ids to names suitable for saving
-   * @param indent
-   *          determines size of indentation
-   * @param humanReadable
-   *          determines whether constants should be replaced by human readable expressions
-   * @return the layout model saved in a String
-   */
-  static String saveContainer(LayoutModel layoutModel,
-      LayoutComponent container,
-      Map<String, String> idToNameMap,
-      int indent,
-      boolean humanReadable) {
-    LayoutPersistenceManager lpm = new LayoutPersistenceManager(layoutModel);
-    lpm.layoutContainer = container;
-    lpm.idNameMap = idToNameMap;
-    lpm.indent = indent;
-    lpm.humanReadable = humanReadable;
-    return lpm.saveLayout();
-  }
+	/**
+	 * Returns the layout model saved as XML in a String.
+	 *
+	 * @param layoutModel
+	 *          layout model to save
+	 * @param container
+	 *          the layout container to be saved
+	 * @param idToNameMap
+	 *          map for translating component Ids to names suitable for saving
+	 * @param indent
+	 *          determines size of indentation
+	 * @param humanReadable
+	 *          determines whether constants should be replaced by human readable expressions
+	 * @return the layout model saved in a String
+	 */
+	static String saveContainer(LayoutModel layoutModel,
+			LayoutComponent container,
+			Map<String, String> idToNameMap,
+			int indent,
+			boolean humanReadable) {
+		LayoutPersistenceManager lpm = new LayoutPersistenceManager(layoutModel);
+		lpm.layoutContainer = container;
+		lpm.idNameMap = idToNameMap;
+		lpm.indent = indent;
+		lpm.humanReadable = humanReadable;
+		return lpm.saveLayout();
+	}
 
-  private String saveLayout() {
-    sb = new StringBuilder();
-    for (dimension = 0; dimension < DIM_COUNT; dimension++) {
-      indent().append('<').append(XML_DIMENSION_LAYOUT);
-      sb.append(' ').append(ATTR_DIMENSION_DIM).append("=\""); // NOI18N
-      if (humanReadable) {
-        switch (dimension) {
-          case HORIZONTAL :
-            sb.append(VALUE_DIMENSION_HORIZONTAL);
-            break;
-          case VERTICAL :
-            sb.append(VALUE_DIMENSION_VERTICAL);
-            break;
-          default :
-            sb.append(dimension);
-            break;
-        }
-      } else {
-        sb.append(dimension);
-      }
-      sb.append("\">\n"); // NOI18N
-      // in case of multiple roots save the additional roots under the first one
-      rootIndex = 0;
-      saveInterval(layoutContainer.getLayoutRoot(0, dimension));
-      indent().append("</").append(XML_DIMENSION_LAYOUT).append(">\n"); // NOI18N
-    }
-    return sb.toString();
-  }
+	private String saveLayout() {
+		sb = new StringBuilder();
+		for (dimension = 0; dimension < DIM_COUNT; dimension++) {
+			indent().append('<').append(XML_DIMENSION_LAYOUT);
+			sb.append(' ').append(ATTR_DIMENSION_DIM).append("=\""); // NOI18N
+			if (humanReadable) {
+				switch (dimension) {
+				case HORIZONTAL :
+					sb.append(VALUE_DIMENSION_HORIZONTAL);
+					break;
+				case VERTICAL :
+					sb.append(VALUE_DIMENSION_VERTICAL);
+					break;
+				default :
+					sb.append(dimension);
+					break;
+				}
+			} else {
+				sb.append(dimension);
+			}
+			sb.append("\">\n"); // NOI18N
+			// in case of multiple roots save the additional roots under the first one
+			rootIndex = 0;
+			saveInterval(layoutContainer.getLayoutRoot(0, dimension));
+			indent().append("</").append(XML_DIMENSION_LAYOUT).append(">\n"); // NOI18N
+		}
+		return sb.toString();
+	}
 
-  /**
-   * Returns dump of the layout interval.
-   *
-   * @param layoutModel
-   *          layout model to dump
-   * @param interval
-   *          the layout interval that should be dumped
-   * @param dimension
-   *          the dimension where the interval belongs
-   * @param indent
-   *          determines size of indentation
-   * @return dump of the layout model
-   */
-  static String dumpInterval(LayoutModel layoutModel,
-      LayoutInterval interval,
-      int dimension,
-      int indent) {
-    LayoutPersistenceManager lpm = new LayoutPersistenceManager(layoutModel);
-    lpm.indent = indent;
-    lpm.humanReadable = true;
-    lpm.dimension = dimension;
-    lpm.sb = new StringBuilder();
-    lpm.saveInterval(interval);
-    return lpm.sb.toString();
-  }
+	/**
+	 * Returns dump of the layout interval.
+	 *
+	 * @param layoutModel
+	 *          layout model to dump
+	 * @param interval
+	 *          the layout interval that should be dumped
+	 * @param dimension
+	 *          the dimension where the interval belongs
+	 * @param indent
+	 *          determines size of indentation
+	 * @return dump of the layout model
+	 */
+	static String dumpInterval(LayoutModel layoutModel,
+			LayoutInterval interval,
+			int dimension,
+			int indent) {
+		LayoutPersistenceManager lpm = new LayoutPersistenceManager(layoutModel);
+		lpm.indent = indent;
+		lpm.humanReadable = true;
+		lpm.dimension = dimension;
+		lpm.sb = new StringBuilder();
+		lpm.saveInterval(interval);
+		return lpm.sb.toString();
+	}
 
-  /**
-   * Dumps the information about the given layout interval.
-   *
-   * @param interval
-   *          layout interval to dump.
-   */
-  private void saveInterval(LayoutInterval interval) {
-    indent++;
-    indent();
-    if (interval.isGroup()) {
-      sb.append('<').append(XML_GROUP).append(' ');
-      sb.append(ATTR_GROUP_TYPE).append("=\""); // NOI18N
-      if (humanReadable) {
-        sb.append(interval.isParallel() ? VALUE_GROUP_PARALLEL : VALUE_GROUP_SEQUENTIAL);
-      } else {
-        sb.append(interval.getType());
-      }
-      sb.append("\""); // NOI18N
-      if (interval.getParent() == null && rootIndex > 0) {
-        // mark the additional roots by a root index attribute
-        sb.append(" ").append(ATTR_ROOT_INDEX).append("=\""); // NOI18N
-        sb.append(rootIndex);
-        sb.append("\""); // NOI18N
-      }
-      saveAlignment(interval.getRawAlignment(), false);
-      if (interval.isParallel()) {
-        saveAlignment(interval.getGroupAlignment(), true);
-      }
-      saveSize(interval.getMinimumSize(), ATTR_SIZE_MIN);
-      saveSize(interval.getMaximumSize(), ATTR_SIZE_MAX);
-      saveAttributes(interval.getAttributes());
-      sb.append(">\n"); // NOI18N
-      indent++;
-      Iterator<LayoutInterval> iter = interval.getSubIntervals();
-      while (iter.hasNext()) {
-        LayoutInterval subInterval = iter.next();
-        saveInterval(subInterval);
-      }
-      if (interval.getParent() == null && rootIndex == 0 && layoutContainer != null) {
-        // save the additional roots under the main one
-        for (int i = 1; i < layoutContainer.getLayoutRootCount(); i++) {
-          rootIndex = i;
-          saveInterval(layoutContainer.getLayoutRoot(rootIndex, dimension));
-        }
-      }
-      indent--;
-      indent().append("</").append(XML_GROUP).append(">\n"); // NOI18N
-    } else {
-      if (interval.isComponent()) {
-        String name = interval.getComponent().getId();
-        if (idNameMap != null) {
-          name = idNameMap.get(name);
-          assert name != null;
-        }
-        sb.append('<').append(XML_COMPONENT).append(' ');
-        sb.append(ATTR_COMPONENT_ID).append("=\"").append(name).append("\""); // NOI18N
-        saveLinkSize(interval.getComponent().getLinkSizeId(dimension));
-        saveAlignment(interval.getRawAlignment(), false);
-      } else if (interval.isEmptySpace()) {
-        sb.append('<').append(XML_EMPTY_SPACE);
-        if (interval.isDefaultPadding(false)) {
-          savePaddingType(interval.getPaddingType());
-          // TBD save components for indent gap
-        }
-      } else {
-        assert false;
-      }
-      saveSize(interval.getMinimumSize(), ATTR_SIZE_MIN);
-      saveSize(interval.getPreferredSize(), ATTR_SIZE_PREF);
-      saveSize(interval.getMaximumSize(), ATTR_SIZE_MAX);
-      saveAttributes(interval.getAttributes());
-      sb.append("/>\n"); // NOI18N
-    }
-    indent--;
-  }
+	/**
+	 * Dumps the information about the given layout interval.
+	 *
+	 * @param interval
+	 *          layout interval to dump.
+	 */
+	private void saveInterval(LayoutInterval interval) {
+		indent++;
+		indent();
+		if (interval.isGroup()) {
+			sb.append('<').append(XML_GROUP).append(' ');
+			sb.append(ATTR_GROUP_TYPE).append("=\""); // NOI18N
+			if (humanReadable) {
+				sb.append(interval.isParallel() ? VALUE_GROUP_PARALLEL : VALUE_GROUP_SEQUENTIAL);
+			} else {
+				sb.append(interval.getType());
+			}
+			sb.append("\""); // NOI18N
+			if (interval.getParent() == null && rootIndex > 0) {
+				// mark the additional roots by a root index attribute
+				sb.append(" ").append(ATTR_ROOT_INDEX).append("=\""); // NOI18N
+				sb.append(rootIndex);
+				sb.append("\""); // NOI18N
+			}
+			saveAlignment(interval.getRawAlignment(), false);
+			if (interval.isParallel()) {
+				saveAlignment(interval.getGroupAlignment(), true);
+			}
+			saveSize(interval.getMinimumSize(), ATTR_SIZE_MIN);
+			saveSize(interval.getMaximumSize(), ATTR_SIZE_MAX);
+			saveAttributes(interval.getAttributes());
+			sb.append(">\n"); // NOI18N
+			indent++;
+			Iterator<LayoutInterval> iter = interval.getSubIntervals();
+			while (iter.hasNext()) {
+				LayoutInterval subInterval = iter.next();
+				saveInterval(subInterval);
+			}
+			if (interval.getParent() == null && rootIndex == 0 && layoutContainer != null) {
+				// save the additional roots under the main one
+				for (int i = 1; i < layoutContainer.getLayoutRootCount(); i++) {
+					rootIndex = i;
+					saveInterval(layoutContainer.getLayoutRoot(rootIndex, dimension));
+				}
+			}
+			indent--;
+			indent().append("</").append(XML_GROUP).append(">\n"); // NOI18N
+		} else {
+			if (interval.isComponent()) {
+				String name = interval.getComponent().getId();
+				if (idNameMap != null) {
+					name = idNameMap.get(name);
+					assert name != null;
+				}
+				sb.append('<').append(XML_COMPONENT).append(' ');
+				sb.append(ATTR_COMPONENT_ID).append("=\"").append(name).append("\""); // NOI18N
+				saveLinkSize(interval.getComponent().getLinkSizeId(dimension));
+				saveAlignment(interval.getRawAlignment(), false);
+			} else if (interval.isEmptySpace()) {
+				sb.append('<').append(XML_EMPTY_SPACE);
+				if (interval.isDefaultPadding(false)) {
+					savePaddingType(interval.getPaddingType());
+					// TBD save components for indent gap
+				}
+			} else {
+				assert false;
+			}
+			saveSize(interval.getMinimumSize(), ATTR_SIZE_MIN);
+			saveSize(interval.getPreferredSize(), ATTR_SIZE_PREF);
+			saveSize(interval.getMaximumSize(), ATTR_SIZE_MAX);
+			saveAttributes(interval.getAttributes());
+			sb.append("/>\n"); // NOI18N
+		}
+		indent--;
+	}
 
-  /**
-   * Saves linkSize group identifier
-   *
-   * @param linksizeid
-   */
-  private void saveLinkSize(int linkSizeId) {
-    if (linkSizeId != NOT_EXPLICITLY_DEFINED) {
-      sb.append(" ").append(ATTR_LINK_SIZE).append("=\"").append(linkSizeId).append("\""); // NOI18N
-    }
-  }
+	/**
+	 * Saves linkSize group identifier
+	 *
+	 * @param linksizeid
+	 */
+	private void saveLinkSize(int linkSizeId) {
+		if (linkSizeId != NOT_EXPLICITLY_DEFINED) {
+			sb.append(" ").append(ATTR_LINK_SIZE).append("=\"").append(linkSizeId).append("\""); // NOI18N
+		}
+	}
 
-  /**
-   * Saves group/interval alignemnt.
-   *
-   * @param alignemnt
-   *          alignment to save.
-   * @param group
-   *          determines whether it is a group alignment.
-   */
-  private void saveAlignment(int alignment, boolean group) {
-    String attrPrefix = " " + (group ? ATTR_GROUP_ALIGNMENT : ATTR_ALIGNMENT) + "=\""; // NOI18N
-    if (humanReadable) {
-      if (alignment != DEFAULT) {
-        sb.append(attrPrefix);
-        switch (alignment) {
-          case LEADING :
-            sb.append(VALUE_ALIGNMENT_LEADING);
-            break;
-          case TRAILING :
-            sb.append(VALUE_ALIGNMENT_TRAILING);
-            break;
-          case CENTER :
-            sb.append(VALUE_ALIGNMENT_CENTER);
-            break;
-          case BASELINE :
-            sb.append(VALUE_ALIGNMENT_BASELINE);
-            break;
-          default :
-            assert false;
-        }
-        sb.append("\""); // NOI18N
-      }
-    } else {
-      if (alignment != DEFAULT) {
-        sb.append(attrPrefix).append(alignment).append("\""); // NOI18N
-      }
-    }
-  }
+	/**
+	 * Saves group/interval alignemnt.
+	 *
+	 * @param alignemnt
+	 *          alignment to save.
+	 * @param group
+	 *          determines whether it is a group alignment.
+	 */
+	private void saveAlignment(int alignment, boolean group) {
+		String attrPrefix = " " + (group ? ATTR_GROUP_ALIGNMENT : ATTR_ALIGNMENT) + "=\""; // NOI18N
+		if (humanReadable) {
+			if (alignment != DEFAULT) {
+				sb.append(attrPrefix);
+				switch (alignment) {
+				case LEADING :
+					sb.append(VALUE_ALIGNMENT_LEADING);
+					break;
+				case TRAILING :
+					sb.append(VALUE_ALIGNMENT_TRAILING);
+					break;
+				case CENTER :
+					sb.append(VALUE_ALIGNMENT_CENTER);
+					break;
+				case BASELINE :
+					sb.append(VALUE_ALIGNMENT_BASELINE);
+					break;
+				default :
+					assert false;
+				}
+				sb.append("\""); // NOI18N
+			}
+		} else {
+			if (alignment != DEFAULT) {
+				sb.append(attrPrefix).append(alignment).append("\""); // NOI18N
+			}
+		}
+	}
 
-  /**
-   * Saves size parameter of some layout interval.
-   *
-   * @param size
-   *          value of the size parameter.
-   * @param attr
-   *          name of the size parameter.
-   */
-  private void saveSize(int size, String attr) {
-    String attrPrefix = " " + attr + "=\""; // NOI18N
-    if (humanReadable) {
-      if (size != NOT_EXPLICITLY_DEFINED) {
-        sb.append(attrPrefix);
-        if (size == USE_PREFERRED_SIZE) {
-          sb.append(VALUE_SIZE_PREFERRED);
-        } else {
-          if (size == Short.MAX_VALUE) {
-            sb.append(VALUE_SIZE_MAX);
-          } else {
-            sb.append(size);
-          }
-        }
-        sb.append("\""); // NOI18N
-      }
-    } else {
-      if (size != NOT_EXPLICITLY_DEFINED) {
-        sb.append(attrPrefix).append(size).append("\""); // NOI18N
-      }
-    }
-  }
+	/**
+	 * Saves size parameter of some layout interval.
+	 *
+	 * @param size
+	 *          value of the size parameter.
+	 * @param attr
+	 *          name of the size parameter.
+	 */
+	private void saveSize(int size, String attr) {
+		String attrPrefix = " " + attr + "=\""; // NOI18N
+		if (humanReadable) {
+			if (size != NOT_EXPLICITLY_DEFINED) {
+				sb.append(attrPrefix);
+				if (size == USE_PREFERRED_SIZE) {
+					sb.append(VALUE_SIZE_PREFERRED);
+				} else {
+					if (size == Short.MAX_VALUE) {
+						sb.append(VALUE_SIZE_MAX);
+					} else {
+						sb.append(size);
+					}
+				}
+				sb.append("\""); // NOI18N
+			}
+		} else {
+			if (size != NOT_EXPLICITLY_DEFINED) {
+				sb.append(attrPrefix).append(size).append("\""); // NOI18N
+			}
+		}
+	}
 
-  private void savePaddingType(LayoutConstants.PaddingType paddingType) {
-    if (paddingType != null && paddingType != LayoutConstants.PaddingType.RELATED) {
-      sb.append(' ').append(ATTR_PADDING_TYPE).append("=\""); // NOI18N
-      String str;
-      switch (paddingType) {
-        case UNRELATED :
-          str = VALUE_PADDING_UNRELATED;
-          break;
-        case SEPARATE :
-          str = VALUE_PADDING_SEPARATE;
-          break;
-        case INDENT :
-          str = VALUE_PADDING_INDENT;
-          break;
-        default :
-          str = VALUE_PADDING_RELATED;
-          break;
-      }
-      sb.append(str).append("\""); // NOI18N
-    }
-  }
+	private void savePaddingType(LayoutConstants.PaddingType paddingType) {
+		if (paddingType != null && paddingType != LayoutConstants.PaddingType.RELATED) {
+			sb.append(' ').append(ATTR_PADDING_TYPE).append("=\""); // NOI18N
+			String str;
+			switch (paddingType) {
+			case UNRELATED :
+				str = VALUE_PADDING_UNRELATED;
+				break;
+			case SEPARATE :
+				str = VALUE_PADDING_SEPARATE;
+				break;
+			case INDENT :
+				str = VALUE_PADDING_INDENT;
+				break;
+			default :
+				str = VALUE_PADDING_RELATED;
+				break;
+			}
+			sb.append(str).append("\""); // NOI18N
+		}
+	}
 
-  /**
-   * Saves attributes of some layout interval.
-   *
-   * @param attributes
-   *          attributes of some layout interval.
-   */
-  private void saveAttributes(int attributes) {
-    if (!humanReadable) {
-      attributes &= LayoutInterval.ATTR_PERSISTENT_MASK;
-    }
-    sb.append(' ').append(ATTR_ATTRIBUTES).append("=\""); // NOI18N
-    sb.append(attributes).append("\""); // NOI18N
-  }
+	/**
+	 * Saves attributes of some layout interval.
+	 *
+	 * @param attributes
+	 *          attributes of some layout interval.
+	 */
+	private void saveAttributes(int attributes) {
+		if (!humanReadable) {
+			attributes &= LayoutInterval.ATTR_PERSISTENT_MASK;
+		}
+		sb.append(' ').append(ATTR_ATTRIBUTES).append("=\""); // NOI18N
+		sb.append(attributes).append("\""); // NOI18N
+	}
 
-  /**
-   * Performs indentation.
-   *
-   * @return indented <code>StringBuffer</code>.
-   */
-  private StringBuilder indent() {
-    char[] spaces = new char[2 * indent];
-    Arrays.fill(spaces, ' ');
-    return sb.append(spaces);
-  }
+	/**
+	 * Performs indentation.
+	 *
+	 * @return indented <code>StringBuffer</code>.
+	 */
+	private StringBuilder indent() {
+		char[] spaces = new char[2 * indent];
+		Arrays.fill(spaces, ' ');
+		return sb.append(spaces);
+	}
 
-  /**
-   * Loads the layout of the given container. Does not load containers recursively, is called for
-   * each container separately.
-   *
-   * @param layoutModel
-   *          layout model to load
-   * @param containerId
-   *          ID of the layout container to be loaded
-   * @param layoutNodeList
-   *          XML data to load
-   * @param nameToIdMap
-   *          map from component names to component IDs
-   */
-  static void loadContainer(LayoutModel layoutModel,
-      String containerId,
-      NodeList layoutNodeList,
-      Map<String, String> nameToIdMap) throws java.io.IOException {
-    LayoutPersistenceManager lpm = new LayoutPersistenceManager(layoutModel);
-    lpm.idNameMap = nameToIdMap;
-    lpm.loadLayout(containerId, layoutNodeList);
-  }
+	/**
+	 * Loads the layout of the given container. Does not load containers recursively, is called for
+	 * each container separately.
+	 *
+	 * @param layoutModel
+	 *          layout model to load
+	 * @param containerId
+	 *          ID of the layout container to be loaded
+	 * @param layoutNodeList
+	 *          XML data to load
+	 * @param nameToIdMap
+	 *          map from component names to component IDs
+	 */
+	static void loadContainer(LayoutModel layoutModel,
+			String containerId,
+			NodeList layoutNodeList,
+			Map<String, String> nameToIdMap) throws java.io.IOException {
+		LayoutPersistenceManager lpm = new LayoutPersistenceManager(layoutModel);
+		lpm.idNameMap = nameToIdMap;
+		lpm.loadLayout(containerId, layoutNodeList);
+	}
 
-  // should be called only on newly created LayoutPersistenceManager for each
-  // loaded container (don't call repeatedly)
-  private void loadLayout(String containerId, NodeList layoutNodeList) throws java.io.IOException {
-    layoutContainer = layoutModel.getLayoutComponent(containerId);
-    if (layoutContainer == null) {
-      layoutContainer = new LayoutComponent(containerId, true);
-      layoutModel.addRootComponent(layoutContainer);
-    }
-    for (int i = 0; i < layoutNodeList.getLength(); i++) {
-      Node dimLayoutNode = layoutNodeList.item(i);
-      if (!(dimLayoutNode instanceof Element)
-          || !dimLayoutNode.getNodeName().equals(XML_DIMENSION_LAYOUT)) {
-        continue;
-      }
-      Node dimAttrNode = dimLayoutNode.getAttributes().getNamedItem(ATTR_DIMENSION_DIM);
-      dimension = integerFromNode(dimAttrNode);
-      rootIndex = 0;
-      LayoutInterval layoutRoot = layoutContainer.getLayoutRoot(0, dimension);
-      NodeList subNodes = dimLayoutNode.getChildNodes();
-      for (int j = 0; j < subNodes.getLength(); j++) {
-        Node node = subNodes.item(j);
-        if (node instanceof Element) {
-          loadGroup(layoutRoot, node);
-          break; // just one root is loaded
-        }
-      }
-    }
-    correctMissingName(); // recover from missing component name if needed
-  }
+	// should be called only on newly created LayoutPersistenceManager for each
+	// loaded container (don't call repeatedly)
+	private void loadLayout(String containerId, NodeList layoutNodeList) throws java.io.IOException {
+		layoutContainer = layoutModel.getLayoutComponent(containerId);
+		if (layoutContainer == null) {
+			layoutContainer = new LayoutComponent(containerId, true);
+			layoutModel.addRootComponent(layoutContainer);
+		}
+		for (int i = 0; i < layoutNodeList.getLength(); i++) {
+			Node dimLayoutNode = layoutNodeList.item(i);
+			if (!(dimLayoutNode instanceof Element)
+					|| !dimLayoutNode.getNodeName().equals(XML_DIMENSION_LAYOUT)) {
+				continue;
+			}
+			Node dimAttrNode = dimLayoutNode.getAttributes().getNamedItem(ATTR_DIMENSION_DIM);
+			dimension = integerFromNode(dimAttrNode);
+			rootIndex = 0;
+			LayoutInterval layoutRoot = layoutContainer.getLayoutRoot(0, dimension);
+			NodeList subNodes = dimLayoutNode.getChildNodes();
+			for (int j = 0; j < subNodes.getLength(); j++) {
+				Node node = subNodes.item(j);
+				if (node instanceof Element) {
+					loadGroup(layoutRoot, node);
+					break; // just one root is loaded
+				}
+			}
+		}
+		correctMissingName(); // recover from missing component name if needed
+	}
 
-  /**
-   * Loads layout of the given group.
-   *
-   * @param group
-   *          group whose layout information should be loaded.
-   * @param groupNode
-   *          node holding the information about the layout of the group.
-   */
-  private void loadGroup(LayoutInterval group, Node groupNode) throws java.io.IOException {
-    NamedNodeMap attrMap = groupNode.getAttributes();
-    Node alignmentNode = attrMap.getNamedItem(ATTR_ALIGNMENT);
-    Node groupAlignmentNode = attrMap.getNamedItem(ATTR_GROUP_ALIGNMENT);
-    Node minNode = attrMap.getNamedItem(ATTR_SIZE_MIN);
-    Node maxNode = attrMap.getNamedItem(ATTR_SIZE_MAX);
-    int alignment = alignmentNode == null ? DEFAULT : integerFromNode(alignmentNode);
-    group.setAlignment(alignment);
-    if (group.isParallel()) {
-      int groupAlignment =
-          groupAlignmentNode == null ? DEFAULT : integerFromNode(groupAlignmentNode);
-      if (groupAlignment != DEFAULT) {
-        group.setGroupAlignment(groupAlignment);
-      }
-    }
-    int min = minNode == null ? NOT_EXPLICITLY_DEFINED : integerFromNode(minNode);
-    int max = maxNode == null ? NOT_EXPLICITLY_DEFINED : integerFromNode(maxNode);
-    group.setMinimumSize(min);
-    group.setMaximumSize(max);
-    loadAttributes(group, attrMap);
-    NodeList subNodes = groupNode.getChildNodes();
-    for (int i = 0; i < subNodes.getLength(); i++) {
-      Node subNode = subNodes.item(i);
-      if (!(subNode instanceof Element)) {
-        continue;
-      }
-      String nodeName = subNode.getNodeName();
-      if (XML_GROUP.equals(nodeName)) {
-        LayoutInterval subGroup = null;
-        int groupType = integerFromNode(subNode.getAttributes().getNamedItem(ATTR_GROUP_TYPE));
-        // the sub-group might represent an additional separate root
-        if (group.getParent() == null && groupType == PARALLEL) {
-          Node rootIndexNode = subNode.getAttributes().getNamedItem(ATTR_ROOT_INDEX);
-          if (rootIndexNode != null) {
-            rootIndex = integerFromNode(rootIndexNode);
-            while (rootIndex >= layoutContainer.getLayoutRootCount()) {
-              layoutContainer.addNewLayoutRoots();
-            }
-            subGroup = layoutContainer.getLayoutRoot(rootIndex, dimension);
-          }
-        }
-        if (subGroup == null) { // this is a normal group
-          subGroup = new LayoutInterval(groupType);
-          group.add(subGroup, -1);
-        }
-        loadGroup(subGroup, subNode);
-      } else if (XML_EMPTY_SPACE.equals(nodeName)) {
-        loadEmptySpace(group, subNode);
-      } else {
-        assert XML_COMPONENT.equals(nodeName);
-        loadComponent(group, subNode);
-      }
-    }
-    if (dimension == VERTICAL) {
-      checkAndFixGroup(group);
-    }
-  }
+	/**
+	 * Loads layout of the given group.
+	 *
+	 * @param group
+	 *          group whose layout information should be loaded.
+	 * @param groupNode
+	 *          node holding the information about the layout of the group.
+	 */
+	private void loadGroup(LayoutInterval group, Node groupNode) throws java.io.IOException {
+		NamedNodeMap attrMap = groupNode.getAttributes();
+		Node alignmentNode = attrMap.getNamedItem(ATTR_ALIGNMENT);
+		Node groupAlignmentNode = attrMap.getNamedItem(ATTR_GROUP_ALIGNMENT);
+		Node minNode = attrMap.getNamedItem(ATTR_SIZE_MIN);
+		Node maxNode = attrMap.getNamedItem(ATTR_SIZE_MAX);
+		int alignment = alignmentNode == null ? DEFAULT : integerFromNode(alignmentNode);
+		group.setAlignment(alignment);
+		if (group.isParallel()) {
+			int groupAlignment =
+					groupAlignmentNode == null ? DEFAULT : integerFromNode(groupAlignmentNode);
+			if (groupAlignment != DEFAULT) {
+				group.setGroupAlignment(groupAlignment);
+			}
+		}
+		int min = minNode == null ? NOT_EXPLICITLY_DEFINED : integerFromNode(minNode);
+		int max = maxNode == null ? NOT_EXPLICITLY_DEFINED : integerFromNode(maxNode);
+		group.setMinimumSize(min);
+		group.setMaximumSize(max);
+		loadAttributes(group, attrMap);
+		NodeList subNodes = groupNode.getChildNodes();
+		for (int i = 0; i < subNodes.getLength(); i++) {
+			Node subNode = subNodes.item(i);
+			if (!(subNode instanceof Element)) {
+				continue;
+			}
+			String nodeName = subNode.getNodeName();
+			if (XML_GROUP.equals(nodeName)) {
+				LayoutInterval subGroup = null;
+				int groupType = integerFromNode(subNode.getAttributes().getNamedItem(ATTR_GROUP_TYPE));
+				// the sub-group might represent an additional separate root
+				if (group.getParent() == null && groupType == PARALLEL) {
+					Node rootIndexNode = subNode.getAttributes().getNamedItem(ATTR_ROOT_INDEX);
+					if (rootIndexNode != null) {
+						rootIndex = integerFromNode(rootIndexNode);
+						while (rootIndex >= layoutContainer.getLayoutRootCount()) {
+							layoutContainer.addNewLayoutRoots();
+						}
+						subGroup = layoutContainer.getLayoutRoot(rootIndex, dimension);
+					}
+				}
+				if (subGroup == null) { // this is a normal group
+					subGroup = new LayoutInterval(groupType);
+					group.add(subGroup, -1);
+				}
+				loadGroup(subGroup, subNode);
+			} else if (XML_EMPTY_SPACE.equals(nodeName)) {
+				loadEmptySpace(group, subNode);
+			} else {
+				assert XML_COMPONENT.equals(nodeName);
+				loadComponent(group, subNode);
+			}
+		}
+		if (dimension == VERTICAL) {
+			checkAndFixGroup(group);
+		}
+	}
 
-  /**
-   * Loads information about empty space.
-   *
-   * @param parent
-   *          layout parent of the empty space.
-   * @param spaceNode
-   *          node with the information about the empty space.
-   */
-  private void loadEmptySpace(LayoutInterval parent, Node spaceNode) {
-    LayoutInterval space = new LayoutInterval(SINGLE);
-    NamedNodeMap attrMap = spaceNode.getAttributes();
-    loadSizes(space, attrMap);
-    loadAttributes(space, attrMap);
-    parent.add(space, -1);
-  }
+	/**
+	 * Loads information about empty space.
+	 *
+	 * @param parent
+	 *          layout parent of the empty space.
+	 * @param spaceNode
+	 *          node with the information about the empty space.
+	 */
+	private void loadEmptySpace(LayoutInterval parent, Node spaceNode) {
+		LayoutInterval space = new LayoutInterval(SINGLE);
+		NamedNodeMap attrMap = spaceNode.getAttributes();
+		loadSizes(space, attrMap);
+		loadAttributes(space, attrMap);
+		parent.add(space, -1);
+	}
 
-  /**
-   * Loads information about component.
-   *
-   * @param parent
-   *          layout parent of the loaded layout interval.
-   * @param componentNode
-   *          node with the information about the component.
-   */
-  private void loadComponent(LayoutInterval parent, Node componentNode) throws java.io.IOException {
-    NamedNodeMap attrMap = componentNode.getAttributes();
-    String name = attrMap.getNamedItem(ATTR_COMPONENT_ID).getNodeValue();
-    Node linkSizeId = attrMap.getNamedItem(ATTR_LINK_SIZE);
-    String id = idNameMap.get(name);
-    if (id == null) { // try to workaround the missing name error (issue 77092)
-      id = useTemporaryId(name);
-    }
-    Node alignmentNode = attrMap.getNamedItem(ATTR_ALIGNMENT);
-    int alignment = alignmentNode == null ? DEFAULT : integerFromNode(alignmentNode);
-    LayoutComponent layoutComponent = layoutModel.getLayoutComponent(id);
-    if (layoutComponent == null) {
-      layoutComponent = new LayoutComponent(id, false);
-      // assuming the layout tree is loaded from bottom, so if a component
-      // is not yet in the model at this point, it can only be a component,
-      // not a container (that would be already loaded)
-    }
-    if (layoutComponent.getParent() == null) {
-      layoutModel.addComponent(layoutComponent, layoutContainer, -1);
-    }
-    LayoutInterval interval = layoutComponent.getLayoutInterval(dimension);
-    interval.setAlignment(alignment);
-    if (linkSizeId != null) {
-      layoutModel.addComponentToLinkSizedGroup(
-          integerFromNode(linkSizeId),
-          layoutComponent.getId(),
-          dimension);
-    }
-    loadSizes(interval, attrMap);
-    loadAttributes(interval, attrMap);
-    parent.add(interval, -1);
-  }
+	/**
+	 * Loads information about component.
+	 *
+	 * @param parent
+	 *          layout parent of the loaded layout interval.
+	 * @param componentNode
+	 *          node with the information about the component.
+	 */
+	private void loadComponent(LayoutInterval parent, Node componentNode) throws java.io.IOException {
+		NamedNodeMap attrMap = componentNode.getAttributes();
+		String name = attrMap.getNamedItem(ATTR_COMPONENT_ID).getNodeValue();
+		Node linkSizeId = attrMap.getNamedItem(ATTR_LINK_SIZE);
+		String id = idNameMap.get(name);
+		if (id == null) { // try to workaround the missing name error (issue 77092)
+			id = useTemporaryId(name);
+		}
+		Node alignmentNode = attrMap.getNamedItem(ATTR_ALIGNMENT);
+		int alignment = alignmentNode == null ? DEFAULT : integerFromNode(alignmentNode);
+		LayoutComponent layoutComponent = layoutModel.getLayoutComponent(id);
+		if (layoutComponent == null) {
+			layoutComponent = new LayoutComponent(id, false);
+			// assuming the layout tree is loaded from bottom, so if a component
+			// is not yet in the model at this point, it can only be a component,
+			// not a container (that would be already loaded)
+		}
+		if (layoutComponent.getParent() == null) {
+			layoutModel.addComponent(layoutComponent, layoutContainer, -1);
+		}
+		LayoutInterval interval = layoutComponent.getLayoutInterval(dimension);
+		interval.setAlignment(alignment);
+		if (linkSizeId != null) {
+			layoutModel.addComponentToLinkSizedGroup(
+					integerFromNode(linkSizeId),
+					layoutComponent.getId(),
+					dimension);
+		}
+		loadSizes(interval, attrMap);
+		loadAttributes(interval, attrMap);
+		parent.add(interval, -1);
+	}
 
-  /**
-   * Loads size information of the given interval.
-   *
-   * @param interval
-   *          layout interval whose size information should be loaded.
-   * @param attrMap
-   *          map with size information.
-   */
-  private void loadSizes(LayoutInterval interval, org.w3c.dom.NamedNodeMap attrMap) {
-    Node minNode = attrMap.getNamedItem(ATTR_SIZE_MIN);
-    Node prefNode = attrMap.getNamedItem(ATTR_SIZE_PREF);
-    Node maxNode = attrMap.getNamedItem(ATTR_SIZE_MAX);
-    int min = minNode == null ? NOT_EXPLICITLY_DEFINED : integerFromNode(minNode);
-    int pref = prefNode == null ? NOT_EXPLICITLY_DEFINED : integerFromNode(prefNode);
-    int max = maxNode == null ? NOT_EXPLICITLY_DEFINED : integerFromNode(maxNode);
-    if (pref != NOT_EXPLICITLY_DEFINED && pref < 0) { // autocorrect invalid pref size (#159536)
-      System.err.println(
-          "WARNING: Invalid preferred size (" // NOI18N
-              + Integer.toString(pref)
-              + ") of a layout interval encountered, reset to default."); // NOI18N
-      pref = NOT_EXPLICITLY_DEFINED;
-      layoutModel.setCorrected();
-    }
-    interval.setSizes(min, pref, max);
-    if (interval.isDefaultPadding(false)) {
-      Node paddingNode = attrMap.getNamedItem(ATTR_PADDING_TYPE);
-      String paddingStr = paddingNode != null ? paddingNode.getNodeValue() : null;
-      PaddingType paddingType = null;
-      if (paddingStr != null && !paddingStr.equals(VALUE_PADDING_RELATED)) {
-        if (paddingStr.equals(VALUE_PADDING_UNRELATED)) {
-          paddingType = LayoutConstants.PaddingType.UNRELATED;
-        } else if (paddingStr.equals(VALUE_PADDING_SEPARATE)) {
-          paddingType = LayoutConstants.PaddingType.SEPARATE;
-        } else if (paddingStr.equals(VALUE_PADDING_INDENT)) {
-          paddingType = LayoutConstants.PaddingType.INDENT;
-        }
-      }
-      if (paddingType != null) {
-        interval.setPaddingType(paddingType);
-        // TBD read components for indent
-      }
-    }
-  }
+	/**
+	 * Loads size information of the given interval.
+	 *
+	 * @param interval
+	 *          layout interval whose size information should be loaded.
+	 * @param attrMap
+	 *          map with size information.
+	 */
+	private void loadSizes(LayoutInterval interval, org.w3c.dom.NamedNodeMap attrMap) {
+		Node minNode = attrMap.getNamedItem(ATTR_SIZE_MIN);
+		Node prefNode = attrMap.getNamedItem(ATTR_SIZE_PREF);
+		Node maxNode = attrMap.getNamedItem(ATTR_SIZE_MAX);
+		int min = minNode == null ? NOT_EXPLICITLY_DEFINED : integerFromNode(minNode);
+		int pref = prefNode == null ? NOT_EXPLICITLY_DEFINED : integerFromNode(prefNode);
+		int max = maxNode == null ? NOT_EXPLICITLY_DEFINED : integerFromNode(maxNode);
+		if (pref != NOT_EXPLICITLY_DEFINED && pref < 0) { // autocorrect invalid pref size (#159536)
+			System.err.println(
+					"WARNING: Invalid preferred size (" // NOI18N
+					+ Integer.toString(pref)
+					+ ") of a layout interval encountered, reset to default."); // NOI18N
+			pref = NOT_EXPLICITLY_DEFINED;
+			layoutModel.setCorrected();
+		}
+		interval.setSizes(min, pref, max);
+		if (interval.isDefaultPadding(false)) {
+			Node paddingNode = attrMap.getNamedItem(ATTR_PADDING_TYPE);
+			String paddingStr = paddingNode != null ? paddingNode.getNodeValue() : null;
+			PaddingType paddingType = null;
+			if (paddingStr != null && !paddingStr.equals(VALUE_PADDING_RELATED)) {
+				if (paddingStr.equals(VALUE_PADDING_UNRELATED)) {
+					paddingType = LayoutConstants.PaddingType.UNRELATED;
+				} else if (paddingStr.equals(VALUE_PADDING_SEPARATE)) {
+					paddingType = LayoutConstants.PaddingType.SEPARATE;
+				} else if (paddingStr.equals(VALUE_PADDING_INDENT)) {
+					paddingType = LayoutConstants.PaddingType.INDENT;
+				}
+			}
+			if (paddingType != null) {
+				interval.setPaddingType(paddingType);
+				// TBD read components for indent
+			}
+		}
+	}
 
-  /**
-   * Loads attributes of the given interval.
-   *
-   * @param interval
-   *          layout interval whose attributes should be loaded.
-   * @param attrMap
-   *          map with attribute information.
-   */
-  private void loadAttributes(LayoutInterval interval, org.w3c.dom.NamedNodeMap attrMap) {
-    Node attributesNode = attrMap.getNamedItem(ATTR_ATTRIBUTES);
-    int attributes = 0;
-    if (attributesNode != null) {
-      attributes = integerFromNode(attributesNode);
-      attributes &= LayoutInterval.ATTR_PERSISTENT_MASK;
-    }
-    interval.setAttributes(attributes);
-  }
+	/**
+	 * Loads attributes of the given interval.
+	 *
+	 * @param interval
+	 *          layout interval whose attributes should be loaded.
+	 * @param attrMap
+	 *          map with attribute information.
+	 */
+	private void loadAttributes(LayoutInterval interval, org.w3c.dom.NamedNodeMap attrMap) {
+		Node attributesNode = attrMap.getNamedItem(ATTR_ATTRIBUTES);
+		int attributes = 0;
+		if (attributesNode != null) {
+			attributes = integerFromNode(attributesNode);
+			attributes &= LayoutInterval.ATTR_PERSISTENT_MASK;
+		}
+		interval.setAttributes(attributes);
+	}
 
-  /**
-   * Extracts integer value from the given node.
-   *
-   * @param node
-   *          node that has integer as its value.
-   * @return integer value extracted from the given node.
-   */
-  private static int integerFromNode(Node node) {
-    String nodeStr = node.getNodeValue();
-    return Integer.parseInt(nodeStr);
-  }
+	/**
+	 * Extracts integer value from the given node.
+	 *
+	 * @param node
+	 *          node that has integer as its value.
+	 * @return integer value extracted from the given node.
+	 */
+	private static int integerFromNode(Node node) {
+		String nodeStr = node.getNodeValue();
+		return Integer.parseInt(nodeStr);
+	}
 
-  // -----
-  // error recovery
-  /**
-   * This method is used during loading to check the alignment validity of given group and its
-   * subintervals. It checks use of BASELINE alignment of the group and the subintervals. Some
-   * invalid combinations were allowed by GroupLayout in version 1.0. See issue 78035 for details.
-   * This method also fixes the invalid combinations and sets the 'corrected' flag. This is needed
-   * for loading because wrong layouts still might exist from the past (and we still can't quite
-   * exclude it can't be created even now). BASELINE group can only contain BASELINE intervals, and
-   * vice versa, BASELINE interval can only be placed in BASELINE group. BASELINE can be set only on
-   * individual components. LEADING, TRAILING and CENTER alignments can be combined freely.
-   */
-  private void checkAndFixGroup(LayoutInterval group) {
-    if (group.isParallel()) {
-      int groupAlign = group.getGroupAlignment();
-      int baselineCount = 0;
-      Iterator<LayoutInterval> iter = group.getSubIntervals();
-      while (iter.hasNext()) {
-        LayoutInterval subInterval = iter.next();
-        if (subInterval.getAlignment() == BASELINE) {
-          if (!subInterval.isComponent()) {
-            subInterval.setAlignment(groupAlign == BASELINE ? LEADING : DEFAULT);
-            layoutModel.setCorrected();
-            System.err.println("WARNING: Invalid use of BASELINE [1], corrected automatically"); // NOI18N
-          } else {
-            baselineCount++;
-          }
-        }
-      }
-      if (baselineCount > 0) {
-        if (baselineCount < group.getSubIntervalCount()) {
-          // separate baseline intervals to a subgroup
-          LayoutInterval subGroup = new LayoutInterval(PARALLEL);
-          subGroup.setGroupAlignment(BASELINE);
-          for (int i = 0; i < group.getSubIntervalCount();) {
-            LayoutInterval subInterval = group.getSubInterval(i);
-            if (subInterval.getAlignment() == BASELINE) {
-              group.remove(i);
-              subGroup.add(subInterval, -1);
-            } else {
-              i++;
-            }
-          }
-          if (groupAlign == BASELINE) {
-            group.setGroupAlignment(LEADING);
-          }
-          group.add(subGroup, -1);
-          layoutModel.setCorrected();
-          System.err.println("WARNING: Invalid use of BASELINE [2], corrected automatically"); // NOI18N
-        } else if (groupAlign != BASELINE) {
-          group.setGroupAlignment(BASELINE);
-          layoutModel.setCorrected();
-          System.err.println("WARNING: Invalid use of BASELINE [3], corrected automatically"); // NOI18N
-        }
-      } else if (groupAlign == BASELINE && group.getSubIntervalCount() > 0) {
-        group.setGroupAlignment(LEADING);
-        layoutModel.setCorrected();
-        System.err.println("WARNING: Invalid use of BASELINE [4], corrected automatically"); // NOI18N
-      }
-    }
-  }
+	// -----
+	// error recovery
+	/**
+	 * This method is used during loading to check the alignment validity of given group and its
+	 * subintervals. It checks use of BASELINE alignment of the group and the subintervals. Some
+	 * invalid combinations were allowed by GroupLayout in version 1.0. See issue 78035 for details.
+	 * This method also fixes the invalid combinations and sets the 'corrected' flag. This is needed
+	 * for loading because wrong layouts still might exist from the past (and we still can't quite
+	 * exclude it can't be created even now). BASELINE group can only contain BASELINE intervals, and
+	 * vice versa, BASELINE interval can only be placed in BASELINE group. BASELINE can be set only on
+	 * individual components. LEADING, TRAILING and CENTER alignments can be combined freely.
+	 */
+	private void checkAndFixGroup(LayoutInterval group) {
+		if (group.isParallel()) {
+			int groupAlign = group.getGroupAlignment();
+			int baselineCount = 0;
+			Iterator<LayoutInterval> iter = group.getSubIntervals();
+			while (iter.hasNext()) {
+				LayoutInterval subInterval = iter.next();
+				if (subInterval.getAlignment() == BASELINE) {
+					if (!subInterval.isComponent()) {
+						subInterval.setAlignment(groupAlign == BASELINE ? LEADING : DEFAULT);
+						layoutModel.setCorrected();
+						System.err.println("WARNING: Invalid use of BASELINE [1], corrected automatically"); // NOI18N
+					} else {
+						baselineCount++;
+					}
+				}
+			}
+			if (baselineCount > 0) {
+				if (baselineCount < group.getSubIntervalCount()) {
+					// separate baseline intervals to a subgroup
+					LayoutInterval subGroup = new LayoutInterval(PARALLEL);
+					subGroup.setGroupAlignment(BASELINE);
+					for (int i = 0; i < group.getSubIntervalCount();) {
+						LayoutInterval subInterval = group.getSubInterval(i);
+						if (subInterval.getAlignment() == BASELINE) {
+							group.remove(i);
+							subGroup.add(subInterval, -1);
+						} else {
+							i++;
+						}
+					}
+					if (groupAlign == BASELINE) {
+						group.setGroupAlignment(LEADING);
+					}
+					group.add(subGroup, -1);
+					layoutModel.setCorrected();
+					System.err.println("WARNING: Invalid use of BASELINE [2], corrected automatically"); // NOI18N
+				} else if (groupAlign != BASELINE) {
+					group.setGroupAlignment(BASELINE);
+					layoutModel.setCorrected();
+					System.err.println("WARNING: Invalid use of BASELINE [3], corrected automatically"); // NOI18N
+				}
+			} else if (groupAlign == BASELINE && group.getSubIntervalCount() > 0) {
+				group.setGroupAlignment(LEADING);
+				layoutModel.setCorrected();
+				System.err.println("WARNING: Invalid use of BASELINE [4], corrected automatically"); // NOI18N
+			}
+		}
+	}
 
-  // The following code tries to fix a missing component name in the layout
-  // definition. Due to a bug (see issues 77092, 76749) it may happen that
-  // one component in the layout XML has "null" or duplicate name (while it is
-  // correct in the metacomponent). If it is the only wrong name in the
-  // container then it can be deduced from the map provided for converting
-  // names to IDs (it is the only ID not used).
-  private final String TEMPORARY_ID = "<temp_id>"; // NOI18N
-  private String missingNameH;
-  private String missingNameV;
+	// The following code tries to fix a missing component name in the layout
+	// definition. Due to a bug (see issues 77092, 76749) it may happen that
+	// one component in the layout XML has "null" or duplicate name (while it is
+	// correct in the metacomponent). If it is the only wrong name in the
+	// container then it can be deduced from the map provided for converting
+	// names to IDs (it is the only ID not used).
+	private final String TEMPORARY_ID = "<temp_id>"; // NOI18N
+	private String missingNameH;
+	private String missingNameV;
 
-  private String useTemporaryId(String name) throws java.io.IOException {
-    if (dimension == HORIZONTAL) {
-      if (missingNameH == null && (missingNameV == null || missingNameV.equals(name))) {
-        missingNameH = name;
-        return TEMPORARY_ID;
-      }
-    } else if (dimension == VERTICAL) {
-      if (missingNameV == null && (missingNameH == null || missingNameH.equals(name))) {
-        missingNameV = name;
-        return TEMPORARY_ID;
-      }
-    }
-    throw new java.io.IOException("Undefined component referenced in layout: " + name); // NOI18N
-  }
+	private String useTemporaryId(String name) throws java.io.IOException {
+		if (dimension == HORIZONTAL) {
+			if (missingNameH == null && (missingNameV == null || missingNameV.equals(name))) {
+				missingNameH = name;
+				return TEMPORARY_ID;
+			}
+		} else if (dimension == VERTICAL) {
+			if (missingNameV == null && (missingNameH == null || missingNameH.equals(name))) {
+				missingNameV = name;
+				return TEMPORARY_ID;
+			}
+		}
+		throw new java.io.IOException("Undefined component referenced in layout: " + name); // NOI18N
+	}
 
-  private void correctMissingName() throws java.io.IOException {
-    if (missingNameH == null && missingNameV == null) {
-      return; // no problem
-    }
-    if (missingNameH != null
-        && missingNameV != null
-        && missingNameH.equals(missingNameV)
-        && idNameMap.size() == layoutContainer.getSubComponentCount()) { // we have one unknown name in each dimension, let's infer it from the idNameMap
-      for (Map.Entry<String, String> e : idNameMap.entrySet()) { // name -> id
-        String id = e.getValue();
-        LayoutComponent comp = layoutModel.getLayoutComponent(id);
-        if (comp == null) { // this is the missing id, set it to the temporary component
-          comp = layoutModel.getLayoutComponent(TEMPORARY_ID);
-          layoutModel.changeComponentId(comp, id);
-        } else if (comp.getParent() == null) { // already loaded as a container
-          // replace the temporary component
-          LayoutComponent tempComp = layoutModel.getLayoutComponent(TEMPORARY_ID);
-          layoutModel.replaceComponent(tempComp, comp);
-        } else {
-          continue;
-        }
-        layoutModel.setCorrected();
-        System.err.println(
-            "WARNING: Invalid component name in layout: "
-                + missingNameH // NOI18N
-                + ", corrected automatically to: "
-                + e.getKey()); // NOI18N
-        return;
-      }
-    }
-    layoutModel.removeComponent(TEMPORARY_ID, true);
-    throw new java.io.IOException("Undefined component referenced in layout: " // NOI18N
-        + (missingNameH != null ? missingNameH : missingNameV));
-  }
+	private void correctMissingName() throws java.io.IOException {
+		if (missingNameH == null && missingNameV == null) {
+			return; // no problem
+		}
+		if (missingNameH != null
+				&& missingNameV != null
+				&& missingNameH.equals(missingNameV)
+				&& idNameMap.size() == layoutContainer.getSubComponentCount()) { // we have one unknown name in each dimension, let's infer it from the idNameMap
+			for (Map.Entry<String, String> e : idNameMap.entrySet()) { // name -> id
+				String id = e.getValue();
+				LayoutComponent comp = layoutModel.getLayoutComponent(id);
+				if (comp == null) { // this is the missing id, set it to the temporary component
+					comp = layoutModel.getLayoutComponent(TEMPORARY_ID);
+					layoutModel.changeComponentId(comp, id);
+				} else if (comp.getParent() == null) { // already loaded as a container
+					// replace the temporary component
+					LayoutComponent tempComp = layoutModel.getLayoutComponent(TEMPORARY_ID);
+					layoutModel.replaceComponent(tempComp, comp);
+				} else {
+					continue;
+				}
+				layoutModel.setCorrected();
+				System.err.println(
+						"WARNING: Invalid component name in layout: "
+								+ missingNameH // NOI18N
+								+ ", corrected automatically to: "
+								+ e.getKey()); // NOI18N
+				return;
+			}
+		}
+		layoutModel.removeComponent(TEMPORARY_ID, true);
+		throw new java.io.IOException("Undefined component referenced in layout: " // NOI18N
+				+ (missingNameH != null ? missingNameH : missingNameV));
+	}
 }
diff --git a/org.eclipse.wb.layout.group/netbeans-src/org/netbeans/modules/form/layoutdesign/LayoutRegion.java b/org.eclipse.wb.layout.group/netbeans-src/org/netbeans/modules/form/layoutdesign/LayoutRegion.java
index 0cc126e56..cde26d355 100644
--- a/org.eclipse.wb.layout.group/netbeans-src/org/netbeans/modules/form/layoutdesign/LayoutRegion.java
+++ b/org.eclipse.wb.layout.group/netbeans-src/org/netbeans/modules/form/layoutdesign/LayoutRegion.java
@@ -37,197 +37,197 @@
  * center positions. For vertical dimension also the "baseline" position.
  */
 class LayoutRegion implements LayoutConstants {
-  // number of tracked points for each dimension
-  static final int[] POINT_COUNT = new int[]{3, 4};
-  // all points - used as param where no particular but all points should be used
-  static final int ALL_POINTS = Integer.MAX_VALUE;
-  // no point - used as param where no point should be processed
-  static final int NO_POINT = Integer.MIN_VALUE;
-  // unknown point position value
-  static final int UNKNOWN = Integer.MIN_VALUE;
-  // array of tracked positions - for each tracked point within each dimension
-  // - for HORIZONTAL dimension there are LEADING, TRAILING, CENTER points
-  // - for VERTICAL dimension there are LEADING, TRAILING, CENTER, BASELINE points
-  // (the constants can be used as indexes to the array)
-  int positions[][];
+	// number of tracked points for each dimension
+	static final int[] POINT_COUNT = new int[]{3, 4};
+	// all points - used as param where no particular but all points should be used
+	static final int ALL_POINTS = Integer.MAX_VALUE;
+	// no point - used as param where no point should be processed
+	static final int NO_POINT = Integer.MIN_VALUE;
+	// unknown point position value
+	static final int UNKNOWN = Integer.MIN_VALUE;
+	// array of tracked positions - for each tracked point within each dimension
+	// - for HORIZONTAL dimension there are LEADING, TRAILING, CENTER points
+	// - for VERTICAL dimension there are LEADING, TRAILING, CENTER, BASELINE points
+	// (the constants can be used as indexes to the array)
+	int positions[][];
 
-  LayoutRegion() {
-    positions = new int[DIM_COUNT][];
-    positions[HORIZONTAL] = new int[]{UNKNOWN, UNKNOWN, UNKNOWN};
-    positions[VERTICAL] = new int[]{UNKNOWN, UNKNOWN, UNKNOWN, UNKNOWN}; // including BASELINE
-  }
+	LayoutRegion() {
+		positions = new int[DIM_COUNT][];
+		positions[HORIZONTAL] = new int[]{UNKNOWN, UNKNOWN, UNKNOWN};
+		positions[VERTICAL] = new int[]{UNKNOWN, UNKNOWN, UNKNOWN, UNKNOWN}; // including BASELINE
+	}
 
-  LayoutRegion(LayoutRegion reg) {
-    this();
-    set(reg);
-  }
+	LayoutRegion(LayoutRegion reg) {
+		this();
+		set(reg);
+	}
 
-  LayoutRegion(Rectangle bounds, int baselinePos) {
-    this();
-    set(bounds, baselinePos);
-  }
+	LayoutRegion(Rectangle bounds, int baselinePos) {
+		this();
+		set(bounds, baselinePos);
+	}
 
-  boolean isSet() {
-    return isSet(HORIZONTAL) && isSet(VERTICAL);
-  }
+	boolean isSet() {
+		return isSet(HORIZONTAL) && isSet(VERTICAL);
+	}
 
-  boolean isSet(int dimension) {
-    return positions[dimension][LEADING] != UNKNOWN && positions[dimension][TRAILING] != UNKNOWN;
-  }
+	boolean isSet(int dimension) {
+		return positions[dimension][LEADING] != UNKNOWN && positions[dimension][TRAILING] != UNKNOWN;
+	}
 
-  int size(int dimension) {
-    int trail = positions[dimension][TRAILING];
-    int lead = positions[dimension][LEADING];
-    return trail != UNKNOWN && lead != UNKNOWN ? trail - lead : UNKNOWN;
-  }
+	int size(int dimension) {
+		int trail = positions[dimension][TRAILING];
+		int lead = positions[dimension][LEADING];
+		return trail != UNKNOWN && lead != UNKNOWN ? trail - lead : UNKNOWN;
+	}
 
-  /**
-   * Sets up the region based on given bounds rectangle and baseline position.
-   */
-  void set(Rectangle bounds, int baselinePos) {
-    int[] horiz = positions[HORIZONTAL];
-    horiz[LEADING] = bounds.x;
-    horiz[TRAILING] = bounds.x + bounds.width;
-    horiz[CENTER] = bounds.x + bounds.width / 2;
-    int[] vert = positions[VERTICAL];
-    vert[LEADING] = bounds.y;
-    vert[TRAILING] = bounds.y + bounds.height;
-    vert[CENTER] = bounds.y + bounds.height / 2;
-    vert[BASELINE] = baselinePos;
-  }
+	/**
+	 * Sets up the region based on given bounds rectangle and baseline position.
+	 */
+	void set(Rectangle bounds, int baselinePos) {
+		int[] horiz = positions[HORIZONTAL];
+		horiz[LEADING] = bounds.x;
+		horiz[TRAILING] = bounds.x + bounds.width;
+		horiz[CENTER] = bounds.x + bounds.width / 2;
+		int[] vert = positions[VERTICAL];
+		vert[LEADING] = bounds.y;
+		vert[TRAILING] = bounds.y + bounds.height;
+		vert[CENTER] = bounds.y + bounds.height / 2;
+		vert[BASELINE] = baselinePos;
+	}
 
-  /**
-   * Converts the region to a rectangle.
-   *
-   * @param bounds
-   *          rectangle to be set (output)
-   * @return Rectangle updated with actual position values (same instance as passed in as parameter)
-   */
-  Rectangle toRectangle(Rectangle bounds) {
-    int[] horiz = positions[HORIZONTAL];
-    bounds.x = horiz[LEADING];
-    bounds.width = horiz[TRAILING] - bounds.x;
-    int[] vert = positions[VERTICAL];
-    bounds.y = vert[LEADING];
-    bounds.height = vert[TRAILING] - bounds.y;
-    return bounds;
-  }
+	/**
+	 * Converts the region to a rectangle.
+	 *
+	 * @param bounds
+	 *          rectangle to be set (output)
+	 * @return Rectangle updated with actual position values (same instance as passed in as parameter)
+	 */
+	Rectangle toRectangle(Rectangle bounds) {
+		int[] horiz = positions[HORIZONTAL];
+		bounds.x = horiz[LEADING];
+		bounds.width = horiz[TRAILING] - bounds.x;
+		int[] vert = positions[VERTICAL];
+		bounds.y = vert[LEADING];
+		bounds.height = vert[TRAILING] - bounds.y;
+		return bounds;
+	}
 
-  /**
-   * Copies all position values from another region.
-   */
-  void set(LayoutRegion reg) {
-    for (int i = 0; i < DIM_COUNT; i++) {
-      set(i, reg);
-    }
-  }
+	/**
+	 * Copies all position values from another region.
+	 */
+	void set(LayoutRegion reg) {
+		for (int i = 0; i < DIM_COUNT; i++) {
+			set(i, reg);
+		}
+	}
 
-  /**
-   * Copies position values of given dimension from another region.
-   */
-  void set(int dimension, LayoutRegion reg) {
-    int[] pos = positions[dimension];
-    int[] setPos = reg.positions[dimension];
-    for (int j = 0; j < pos.length; j++) {
-      pos[j] = setPos[j];
-    }
-  }
+	/**
+	 * Copies position values of given dimension from another region.
+	 */
+	void set(int dimension, LayoutRegion reg) {
+		int[] pos = positions[dimension];
+		int[] setPos = reg.positions[dimension];
+		for (int j = 0; j < pos.length; j++) {
+			pos[j] = setPos[j];
+		}
+	}
 
-  void set(int dimension, int leading, int trailing) {
-    int[] pos = positions[dimension];
-    if (pos[LEADING] != leading || pos[TRAILING] != trailing) {
-      pos[LEADING] = leading;
-      pos[TRAILING] = trailing;
-      pos[CENTER] = leading != UNKNOWN && trailing != UNKNOWN ? (leading + trailing) / 2 : UNKNOWN;
-      if (dimension == VERTICAL) {
-        pos[BASELINE] = UNKNOWN; // undefined after change
-      }
-    }
-  }
+	void set(int dimension, int leading, int trailing) {
+		int[] pos = positions[dimension];
+		if (pos[LEADING] != leading || pos[TRAILING] != trailing) {
+			pos[LEADING] = leading;
+			pos[TRAILING] = trailing;
+			pos[CENTER] = leading != UNKNOWN && trailing != UNKNOWN ? (leading + trailing) / 2 : UNKNOWN;
+			if (dimension == VERTICAL) {
+				pos[BASELINE] = UNKNOWN; // undefined after change
+			}
+		}
+	}
 
-  /**
-   * Reverts the region to unset state - like it was just after the creation.
-   */
-  void reset() {
-    for (int i = 0; i < DIM_COUNT; i++) {
-      int[] pos = positions[i];
-      for (int j = 0; j < pos.length; j++) {
-        pos[j] = UNKNOWN;
-      }
-    }
-  }
+	/**
+	 * Reverts the region to unset state - like it was just after the creation.
+	 */
+	void reset() {
+		for (int i = 0; i < DIM_COUNT; i++) {
+			int[] pos = positions[i];
+			for (int j = 0; j < pos.length; j++) {
+				pos[j] = UNKNOWN;
+			}
+		}
+	}
 
-  /**
-   * @param points
-   *          array of alignment constants (LEADING or TRAILING) defining for each dimension which
-   *          point should be moved (can be null to move everything)
-   */
-  void reshape(int[] points, int[] moves) {
-    for (int i = 0; i < DIM_COUNT; i++) {
-      reshape(i, (points != null ? points[i] : ALL_POINTS), moves[i]);
-    }
-  }
+	/**
+	 * @param points
+	 *          array of alignment constants (LEADING or TRAILING) defining for each dimension which
+	 *          point should be moved (can be null to move everything)
+	 */
+	void reshape(int[] points, int[] moves) {
+		for (int i = 0; i < DIM_COUNT; i++) {
+			reshape(i, (points != null ? points[i] : ALL_POINTS), moves[i]);
+		}
+	}
 
-  void reshape(int dimension, int align, int move) {
-    int[] pos = positions[dimension];
-    if (align == ALL_POINTS) { // move everything
-      for (int j = 0; j < pos.length; j++) {
-        if (pos[j] != UNKNOWN) {
-          pos[j] += move;
-        }
-      }
-    } else if (align != NO_POINT) { // move only the desired point
-      assert align == LEADING || align == TRAILING;
-      if (pos[align] != UNKNOWN) {
-        pos[align] += move;
-        if (pos[LEADING] != UNKNOWN && pos[TRAILING] != UNKNOWN) {
-          if (pos[LEADING] > pos[TRAILING]) { // don't allow negative size
-            pos[align] = pos[align ^ 1];
-          }
-          pos[CENTER] = (pos[LEADING] + pos[TRAILING]) / 2;
-        }
-        if (dimension == VERTICAL && move != 0) {
-          pos[BASELINE] = UNKNOWN; // undefined after resizing
-        }
-      }
-    }
-  }
+	void reshape(int dimension, int align, int move) {
+		int[] pos = positions[dimension];
+		if (align == ALL_POINTS) { // move everything
+			for (int j = 0; j < pos.length; j++) {
+				if (pos[j] != UNKNOWN) {
+					pos[j] += move;
+				}
+			}
+		} else if (align != NO_POINT) { // move only the desired point
+			assert align == LEADING || align == TRAILING;
+			if (pos[align] != UNKNOWN) {
+				pos[align] += move;
+				if (pos[LEADING] != UNKNOWN && pos[TRAILING] != UNKNOWN) {
+					if (pos[LEADING] > pos[TRAILING]) { // don't allow negative size
+						pos[align] = pos[align ^ 1];
+					}
+					pos[CENTER] = (pos[LEADING] + pos[TRAILING]) / 2;
+				}
+				if (dimension == VERTICAL && move != 0) {
+					pos[BASELINE] = UNKNOWN; // undefined after resizing
+				}
+			}
+		}
+	}
 
-  /**
-   * Grows to bounds of given region.
-   */
-  void expand(LayoutRegion reg) {
-    for (int i = 0; i < DIM_COUNT; i++) {
-      expand(reg, i);
-    }
-  }
+	/**
+	 * Grows to bounds of given region.
+	 */
+	void expand(LayoutRegion reg) {
+		for (int i = 0; i < DIM_COUNT; i++) {
+			expand(reg, i);
+		}
+	}
 
-  void expand(LayoutRegion reg, int dimension) {
-    int[] pos = positions[dimension];
-    int[] exPos = reg.positions[dimension];
-    if (exPos[LEADING] != UNKNOWN && (pos[LEADING] == UNKNOWN || exPos[LEADING] < pos[LEADING])) {
-      pos[LEADING] = exPos[LEADING];
-    }
-    if (exPos[TRAILING] != UNKNOWN && (pos[TRAILING] == UNKNOWN || exPos[TRAILING] > pos[TRAILING])) {
-      pos[TRAILING] = exPos[TRAILING];
-    }
-    if (pos[LEADING] != UNKNOWN && pos[TRAILING] != UNKNOWN) {
-      pos[CENTER] = (pos[LEADING] + pos[TRAILING]) / 2;
-    }
-  }
+	void expand(LayoutRegion reg, int dimension) {
+		int[] pos = positions[dimension];
+		int[] exPos = reg.positions[dimension];
+		if (exPos[LEADING] != UNKNOWN && (pos[LEADING] == UNKNOWN || exPos[LEADING] < pos[LEADING])) {
+			pos[LEADING] = exPos[LEADING];
+		}
+		if (exPos[TRAILING] != UNKNOWN && (pos[TRAILING] == UNKNOWN || exPos[TRAILING] > pos[TRAILING])) {
+			pos[TRAILING] = exPos[TRAILING];
+		}
+		if (pos[LEADING] != UNKNOWN && pos[TRAILING] != UNKNOWN) {
+			pos[CENTER] = (pos[LEADING] + pos[TRAILING]) / 2;
+		}
+	}
 
-  /**
-   * @param sp1
-   *          base LayoutSpace
-   * @param sp2
-   *          compared LayoutSpace
-   * @param points
-   *          array of alignment constants defining what points should be compared in each dimension
-   *          (can be null if it does not matter)
-   * @param diffs
-   *          output array with the position difference for each dimension
-   */
-/*    static void positionDiff(LayoutSpace sp1, LayoutSpace sp2,
+	/**
+	 * @param sp1
+	 *          base LayoutSpace
+	 * @param sp2
+	 *          compared LayoutSpace
+	 * @param points
+	 *          array of alignment constants defining what points should be compared in each dimension
+	 *          (can be null if it does not matter)
+	 * @param diffs
+	 *          output array with the position difference for each dimension
+	 */
+	/*    static void positionDiff(LayoutSpace sp1, LayoutSpace sp2,
                              int[] points, int[] diffs)
     {
         for (int i=0; i < DIM_COUNT; i++) {
@@ -243,127 +243,127 @@ void expand(LayoutRegion reg, int dimension) {
             }
         }
     } */
-  static boolean isValidCoordinate(int pos) {
-    return pos > Short.MIN_VALUE && pos < Short.MAX_VALUE;
-  }
+	static boolean isValidCoordinate(int pos) {
+		return pos > Short.MIN_VALUE && pos < Short.MAX_VALUE;
+	}
 
-  /**
-   * @param r1
-   *          base LayoutRegion
-   * @param r2
-   *          compared LayoutRegion
-   * @param dimension
-   *          HORIZONTAL or VERTICAL (dimension index)
-   * @param align1
-   *          alignment constant of a point in base LayoutRegion
-   * @param align2
-   *          alignment constant of a point in compared LayoutRegion
-   * @return distance sp2 - sp1 in given dimension between given points
-   */
-  static int distance(LayoutRegion r1, LayoutRegion r2, int dimension, int align1, int align2) {
-    int pos1 = r1.positions[dimension][align1];
-    int pos2 = r2.positions[dimension][align2];
-    return pos1 != UNKNOWN && pos2 != UNKNOWN ? pos2 - pos1 : UNKNOWN;
-  }
+	/**
+	 * @param r1
+	 *          base LayoutRegion
+	 * @param r2
+	 *          compared LayoutRegion
+	 * @param dimension
+	 *          HORIZONTAL or VERTICAL (dimension index)
+	 * @param align1
+	 *          alignment constant of a point in base LayoutRegion
+	 * @param align2
+	 *          alignment constant of a point in compared LayoutRegion
+	 * @return distance sp2 - sp1 in given dimension between given points
+	 */
+	static int distance(LayoutRegion r1, LayoutRegion r2, int dimension, int align1, int align2) {
+		int pos1 = r1.positions[dimension][align1];
+		int pos2 = r2.positions[dimension][align2];
+		return pos1 != UNKNOWN && pos2 != UNKNOWN ? pos2 - pos1 : UNKNOWN;
+	}
 
-  /**
-   * Goes through all points of given two regions in given dimension and finds the smallest distance
-   * (abs) between the regions. Positive value is returned if r2 has higher position.
-   *
-   * @return the smallest distance between the corresponding points of given regions in given
-   *         dimension
-   */
-  static int minDistance(LayoutRegion r1, LayoutRegion r2, int dimension) {
-    int[] pos1 = r1.positions[dimension];
-    int[] pos2 = r2.positions[dimension];
-    int min = UNKNOWN;
-    int sign = 1;
-    for (int i = 0; i < pos1.length; i++) {
-      if (pos1[i] != UNKNOWN && pos2[i] != UNKNOWN) {
-        int dst = pos2[i] - pos1[i];
-        int s;
-        if (dst < 0) {
-          dst = -dst;
-          s = -1;
-        } else {
-          s = 1;
-        }
-        if (min == UNKNOWN || dst < min) {
-          min = dst;
-          sign = s;
-        }
-      }
-    }
-    return min * sign;
-  }
+	/**
+	 * Goes through all points of given two regions in given dimension and finds the smallest distance
+	 * (abs) between the regions. Positive value is returned if r2 has higher position.
+	 *
+	 * @return the smallest distance between the corresponding points of given regions in given
+	 *         dimension
+	 */
+	static int minDistance(LayoutRegion r1, LayoutRegion r2, int dimension) {
+		int[] pos1 = r1.positions[dimension];
+		int[] pos2 = r2.positions[dimension];
+		int min = UNKNOWN;
+		int sign = 1;
+		for (int i = 0; i < pos1.length; i++) {
+			if (pos1[i] != UNKNOWN && pos2[i] != UNKNOWN) {
+				int dst = pos2[i] - pos1[i];
+				int s;
+				if (dst < 0) {
+					dst = -dst;
+					s = -1;
+				} else {
+					s = 1;
+				}
+				if (min == UNKNOWN || dst < min) {
+					min = dst;
+					sign = s;
+				}
+			}
+		}
+		return min * sign;
+	}
 
-  /**
-   * Computes distance between two regions supposing they do not overlap. The distance is between
-   * LEADING point of one region and TRAILING of the other (or vice versa, depending on their
-   * relative position). Positive value is returned if r2 has higher position.
-   *
-   * @return the distance between two regions if they don't overlap, or 0 if they overlap
-   */
-  static int nonOverlapDistance(LayoutRegion r1, LayoutRegion r2, int dimension) {
-    int[] pos1 = r1.positions[dimension];
-    int[] pos2 = r2.positions[dimension];
-    int dst = pos2[LEADING] - pos1[TRAILING];
-    if (dst >= 0) {
-      return dst;
-    }
-    dst = pos2[TRAILING] - pos1[LEADING];
-    if (dst <= 0) {
-      return dst;
-    }
-    return 0;
-  }
+	/**
+	 * Computes distance between two regions supposing they do not overlap. The distance is between
+	 * LEADING point of one region and TRAILING of the other (or vice versa, depending on their
+	 * relative position). Positive value is returned if r2 has higher position.
+	 *
+	 * @return the distance between two regions if they don't overlap, or 0 if they overlap
+	 */
+	static int nonOverlapDistance(LayoutRegion r1, LayoutRegion r2, int dimension) {
+		int[] pos1 = r1.positions[dimension];
+		int[] pos2 = r2.positions[dimension];
+		int dst = pos2[LEADING] - pos1[TRAILING];
+		if (dst >= 0) {
+			return dst;
+		}
+		dst = pos2[TRAILING] - pos1[LEADING];
+		if (dst <= 0) {
+			return dst;
+		}
+		return 0;
+	}
 
-  /**
-   * Checks whether a point of 'contained' region (described by 'alignment') is inside the
-   * 'container' region's area in given 'dimension'.
-   *
-   * @return whether a point of a region is inside the other region
-   */
-  static boolean pointInside(LayoutRegion contained,
-      int alignment,
-      LayoutRegion container,
-      int dimension) {
-    int[] pos = container.positions[dimension];
-    int point = contained.positions[dimension][alignment];
-    assert point != UNKNOWN && pos[LEADING] != UNKNOWN && pos[TRAILING] != UNKNOWN;
-    if (alignment == LEADING) {
-      return point >= pos[LEADING] && point < pos[TRAILING];
-    }
-    //        if (alignment == TRAILING) {
-    return point > pos[LEADING] && point <= pos[TRAILING];
-    //        }
-  }
+	/**
+	 * Checks whether a point of 'contained' region (described by 'alignment') is inside the
+	 * 'container' region's area in given 'dimension'.
+	 *
+	 * @return whether a point of a region is inside the other region
+	 */
+	static boolean pointInside(LayoutRegion contained,
+			int alignment,
+			LayoutRegion container,
+			int dimension) {
+		int[] pos = container.positions[dimension];
+		int point = contained.positions[dimension][alignment];
+		assert point != UNKNOWN && pos[LEADING] != UNKNOWN && pos[TRAILING] != UNKNOWN;
+		if (alignment == LEADING) {
+			return point >= pos[LEADING] && point < pos[TRAILING];
+		}
+		//        if (alignment == TRAILING) {
+		return point > pos[LEADING] && point <= pos[TRAILING];
+		//        }
+	}
 
-  /**
-   * @return whether the given regions overlap in given dimension
-   */
-  static boolean overlap(LayoutRegion r1, LayoutRegion r2, int dimension, int margin) {
-    int[] pos1 = r1.positions[dimension];
-    int[] pos2 = r2.positions[dimension];
-    assert pos1[LEADING] != UNKNOWN
-        && pos1[TRAILING] != UNKNOWN
-        && pos2[LEADING] != UNKNOWN
-        && pos2[TRAILING] != UNKNOWN;
-    return pos1[TRAILING] + margin > pos2[LEADING] && pos1[LEADING] - margin < pos2[TRAILING];
-  }
+	/**
+	 * @return whether the given regions overlap in given dimension
+	 */
+	static boolean overlap(LayoutRegion r1, LayoutRegion r2, int dimension, int margin) {
+		int[] pos1 = r1.positions[dimension];
+		int[] pos2 = r2.positions[dimension];
+		assert pos1[LEADING] != UNKNOWN
+				&& pos1[TRAILING] != UNKNOWN
+				&& pos2[LEADING] != UNKNOWN
+				&& pos2[TRAILING] != UNKNOWN;
+		return pos1[TRAILING] + margin > pos2[LEADING] && pos1[LEADING] - margin < pos2[TRAILING];
+	}
 
-  /**
-   * @return whether given regions occupy the same space
-   */
-  static boolean sameSpace(LayoutRegion r1, LayoutRegion r2) {
-    return sameSpace(r1, r2, HORIZONTAL) && sameSpace(r1, r2, VERTICAL);
-  }
+	/**
+	 * @return whether given regions occupy the same space
+	 */
+	static boolean sameSpace(LayoutRegion r1, LayoutRegion r2) {
+		return sameSpace(r1, r2, HORIZONTAL) && sameSpace(r1, r2, VERTICAL);
+	}
 
-  /**
-   * @return whether given regions occupy the same space in given dimension
-   */
-  static boolean sameSpace(LayoutRegion r1, LayoutRegion r2, int dimension) {
-    return r1.positions[dimension][LEADING] == r2.positions[dimension][LEADING]
-        && r1.positions[dimension][TRAILING] == r2.positions[dimension][TRAILING];
-  }
+	/**
+	 * @return whether given regions occupy the same space in given dimension
+	 */
+	static boolean sameSpace(LayoutRegion r1, LayoutRegion r2, int dimension) {
+		return r1.positions[dimension][LEADING] == r2.positions[dimension][LEADING]
+				&& r1.positions[dimension][TRAILING] == r2.positions[dimension][TRAILING];
+	}
 }
diff --git a/org.eclipse.wb.layout.group/netbeans-src/org/netbeans/modules/form/layoutdesign/LayoutUtils.java b/org.eclipse.wb.layout.group/netbeans-src/org/netbeans/modules/form/layoutdesign/LayoutUtils.java
index cc64e975a..94ab19253 100644
--- a/org.eclipse.wb.layout.group/netbeans-src/org/netbeans/modules/form/layoutdesign/LayoutUtils.java
+++ b/org.eclipse.wb.layout.group/netbeans-src/org/netbeans/modules/form/layoutdesign/LayoutUtils.java
@@ -44,560 +44,560 @@
  * @author Tomas Pavek
  */
 public class LayoutUtils implements LayoutConstants {
-  private LayoutUtils() {
-  }
+	private LayoutUtils() {
+	}
 
-  public static LayoutInterval getAdjacentEmptySpace(LayoutComponent comp,
-      int dimension,
-      int direction) {
-    LayoutInterval interval = comp.getLayoutInterval(dimension);
-    LayoutInterval gap = LayoutInterval.getNeighbor(interval, direction, false, true, false);
-    if (gap != null && gap.isEmptySpace()) {
-      LayoutInterval gapNeighbor = LayoutInterval.getDirectNeighbor(gap, direction ^ 1, true);
-      if (gapNeighbor == interval
-          || LayoutInterval.isPlacedAtBorder(interval, gapNeighbor, dimension, direction)) {
-        return gap;
-      }
-    }
-    return null;
-    //        LayoutInterval parent;
-    //        while ((parent = interval.getParent()) != null) {
-    //            if (parent.isSequential()) {
-    //                int index = parent.indexOf(interval);
-    //                if (direction == LEADING) {
-    //                    if (index == 0) {
-    //                        interval = parent;
-    //                    } else {
-    //                        LayoutInterval candidate = parent.getSubInterval(index-1);
-    //                        return candidate.isEmptySpace() ? candidate : null;
-    //                    }
-    //                } else {
-    //                    if (index == parent.getSubIntervalCount()-1) {
-    //                        interval = parent;
-    //                    } else {
-    //                        LayoutInterval candidate = parent.getSubInterval(index+1);
-    //                        return candidate.isEmptySpace() ? candidate : null;
-    //                    }
-    //                }
-    //            } else {
-    //                // PENDING how should we determine the space: isAlignedAtBorder, isPlacedAtBorder, any?
-    //                if (LayoutInterval.isPlacedAtBorder(interval, dimension, direction)) {
-    //                    interval = parent;
-    //                } else {
-    //                    return null;
-    //                }
-    //            }
-    //        }
-    //        return null;
-  }
+	public static LayoutInterval getAdjacentEmptySpace(LayoutComponent comp,
+			int dimension,
+			int direction) {
+		LayoutInterval interval = comp.getLayoutInterval(dimension);
+		LayoutInterval gap = LayoutInterval.getNeighbor(interval, direction, false, true, false);
+		if (gap != null && gap.isEmptySpace()) {
+			LayoutInterval gapNeighbor = LayoutInterval.getDirectNeighbor(gap, direction ^ 1, true);
+			if (gapNeighbor == interval
+					|| LayoutInterval.isPlacedAtBorder(interval, gapNeighbor, dimension, direction)) {
+				return gap;
+			}
+		}
+		return null;
+		//        LayoutInterval parent;
+		//        while ((parent = interval.getParent()) != null) {
+		//            if (parent.isSequential()) {
+		//                int index = parent.indexOf(interval);
+		//                if (direction == LEADING) {
+		//                    if (index == 0) {
+		//                        interval = parent;
+		//                    } else {
+		//                        LayoutInterval candidate = parent.getSubInterval(index-1);
+		//                        return candidate.isEmptySpace() ? candidate : null;
+		//                    }
+		//                } else {
+		//                    if (index == parent.getSubIntervalCount()-1) {
+		//                        interval = parent;
+		//                    } else {
+		//                        LayoutInterval candidate = parent.getSubInterval(index+1);
+		//                        return candidate.isEmptySpace() ? candidate : null;
+		//                    }
+		//                }
+		//            } else {
+		//                // PENDING how should we determine the space: isAlignedAtBorder, isPlacedAtBorder, any?
+		//                if (LayoutInterval.isPlacedAtBorder(interval, dimension, direction)) {
+		//                    interval = parent;
+		//                } else {
+		//                    return null;
+		//                }
+		//            }
+		//        }
+		//        return null;
+	}
 
-  public static boolean hasAdjacentComponent(LayoutComponent comp, int dimension, int direction) {
-    return LayoutInterval.getNeighbor(
-        comp.getLayoutInterval(dimension),
-        direction,
-        true,
-        true,
-        false) != null;
-  }
+	public static boolean hasAdjacentComponent(LayoutComponent comp, int dimension, int direction) {
+		return LayoutInterval.getNeighbor(
+				comp.getLayoutInterval(dimension),
+				direction,
+				true,
+				true,
+				false) != null;
+	}
 
-  // -----
-  // package private utils
-  static LayoutInterval getOutermostComponent(LayoutInterval interval, int dimension, int alignment) {
-    if (interval.isComponent()) {
-      return interval;
-    }
-    assert alignment == LEADING || alignment == TRAILING;
-    if (interval.isSequential()) {
-      int d = alignment == LEADING ? 1 : -1;
-      int i = alignment == LEADING ? 0 : interval.getSubIntervalCount() - 1;
-      while (i >= 0 && i < interval.getSubIntervalCount()) {
-        LayoutInterval li = interval.getSubInterval(i);
-        if (li.isEmptySpace()) {
-          i += d;
-        }
-        //                else if (li.isComponent()) {
-        //                    return li;
-        //                }
-        else {
-          return getOutermostComponent(li, dimension, alignment);
-        }
-      }
-      //            return null;
-    } else if (interval.isParallel()) {
-      LayoutInterval best = null;
-      int pos = Integer.MAX_VALUE;
-      for (int i = 0, n = interval.getSubIntervalCount(); i < n; i++) {
-        LayoutInterval li = getOutermostComponent(interval.getSubInterval(i), dimension, alignment);
-        if (li != null) {
-          if (LayoutInterval.isAlignedAtBorder(li, interval, alignment)) {
-            return li;
-          }
-          int p =
-              li.getCurrentSpace().positions[dimension][alignment]
-                  * (alignment == LEADING ? 1 : -1);
-          if (p < pos) {
-            best = li;
-            pos = p;
-          }
-        }
-      }
-      return best;
-    }
-    //        else if (interval.isComponent()) {
-    //            return interval;
-    //        }
-    return null;
-  }
+	// -----
+	// package private utils
+	static LayoutInterval getOutermostComponent(LayoutInterval interval, int dimension, int alignment) {
+		if (interval.isComponent()) {
+			return interval;
+		}
+		assert alignment == LEADING || alignment == TRAILING;
+		if (interval.isSequential()) {
+			int d = alignment == LEADING ? 1 : -1;
+			int i = alignment == LEADING ? 0 : interval.getSubIntervalCount() - 1;
+			while (i >= 0 && i < interval.getSubIntervalCount()) {
+				LayoutInterval li = interval.getSubInterval(i);
+				if (li.isEmptySpace()) {
+					i += d;
+				}
+				//                else if (li.isComponent()) {
+				//                    return li;
+				//                }
+				else {
+					return getOutermostComponent(li, dimension, alignment);
+				}
+			}
+			//            return null;
+		} else if (interval.isParallel()) {
+			LayoutInterval best = null;
+			int pos = Integer.MAX_VALUE;
+			for (int i = 0, n = interval.getSubIntervalCount(); i < n; i++) {
+				LayoutInterval li = getOutermostComponent(interval.getSubInterval(i), dimension, alignment);
+				if (li != null) {
+					if (LayoutInterval.isAlignedAtBorder(li, interval, alignment)) {
+						return li;
+					}
+					int p =
+							li.getCurrentSpace().positions[dimension][alignment]
+									* (alignment == LEADING ? 1 : -1);
+					if (p < pos) {
+						best = li;
+						pos = p;
+					}
+				}
+			}
+			return best;
+		}
+		//        else if (interval.isComponent()) {
+		//            return interval;
+		//        }
+		return null;
+	}
 
-  /**
-   * Returns size of the empty space represented by the given layout interval.
-   *
-   * @param interval
-   *          layout interval that represents padding.
-   * @return size of the padding.
-   */
-  public static int getSizeOfDefaultGap(LayoutInterval interval, VisualMapper visualMapper) {
-    assert interval.isEmptySpace();
-    LayoutInterval parent = interval.getParent();
-    if (parent.isParallel()) {
-      return interval.getPreferredSize();
-    }
-    // Find intervals that contain sources and targets
-    LayoutInterval candidate = interval;
-    LayoutInterval srcInt = null;
-    LayoutInterval targetInt = null;
-    while (parent != null && (srcInt == null || targetInt == null)) {
-      int index = parent.indexOf(candidate);
-      if (srcInt == null && index > 0) {
-        srcInt = parent.getSubInterval(index - 1);
-      }
-      if (targetInt == null && index < parent.getSubIntervalCount() - 1) {
-        targetInt = parent.getSubInterval(index + 1);
-      }
-      if (srcInt == null || targetInt == null) {
-        do {
-          candidate = parent;
-          parent = parent.getParent();
-        } while (parent != null && parent.isParallel());
-      }
-    }
-    // Find sources and targets inside srcInt and targetInt
-    List sources = edgeSubComponents(srcInt, TRAILING);
-    List targets = edgeSubComponents(targetInt, LEADING);
-    // Calculate size of gap from sources and targets and their positions
-    return getSizesOfDefaultGap(
-        sources,
-        targets,
-        interval.getPaddingType(),
-        visualMapper,
-        null,
-        Collections.EMPTY_MAP)[0];
-  }
+	/**
+	 * Returns size of the empty space represented by the given layout interval.
+	 *
+	 * @param interval
+	 *          layout interval that represents padding.
+	 * @return size of the padding.
+	 */
+	public static int getSizeOfDefaultGap(LayoutInterval interval, VisualMapper visualMapper) {
+		assert interval.isEmptySpace();
+		LayoutInterval parent = interval.getParent();
+		if (parent.isParallel()) {
+			return interval.getPreferredSize();
+		}
+		// Find intervals that contain sources and targets
+		LayoutInterval candidate = interval;
+		LayoutInterval srcInt = null;
+		LayoutInterval targetInt = null;
+		while (parent != null && (srcInt == null || targetInt == null)) {
+			int index = parent.indexOf(candidate);
+			if (srcInt == null && index > 0) {
+				srcInt = parent.getSubInterval(index - 1);
+			}
+			if (targetInt == null && index < parent.getSubIntervalCount() - 1) {
+				targetInt = parent.getSubInterval(index + 1);
+			}
+			if (srcInt == null || targetInt == null) {
+				do {
+					candidate = parent;
+					parent = parent.getParent();
+				} while (parent != null && parent.isParallel());
+			}
+		}
+		// Find sources and targets inside srcInt and targetInt
+		List sources = edgeSubComponents(srcInt, TRAILING);
+		List targets = edgeSubComponents(targetInt, LEADING);
+		// Calculate size of gap from sources and targets and their positions
+		return getSizesOfDefaultGap(
+				sources,
+				targets,
+				interval.getPaddingType(),
+				visualMapper,
+				null,
+				Collections.EMPTY_MAP)[0];
+	}
 
-  /**
-   * Finds out the sizes of given types of default gaps between the trailing edge of a set of
-   * "source" components and the leading edge of a set of "target" components.
-   *
-   * @param gapType
-   *          the padding type whose size should be returned, or null if all types should be
-   *          determined
-   * @return array of sizes - one element if specific padding type is asked or four elements if null
-   *         is provided
-   */
-  static int[] getSizesOfDefaultGap(List sources,
-      List targets,
-      PaddingType gapType,
-      VisualMapper visualMapper,
-      String contId,
-      Map<String, LayoutRegion> boundsMap) {
-    if (sources != null && sources.isEmpty() || targets != null && targets.isEmpty()) {
-      return new int[]{0}; // Preferred gap not between components
-    }
-    sources = sources == null ? Collections.EMPTY_LIST : sources;
-    targets = targets == null ? Collections.EMPTY_LIST : targets;
-    boolean containerGap = false;
-    int containerGapAlignment = -1;
-    LayoutInterval temp = null;
-    if (sources.isEmpty()) {
-      if (targets.isEmpty()) {
-        return new int[]{0};
-      } else {
-        // Leading container gap
-        containerGap = true;
-        containerGapAlignment = LEADING;
-        temp = (LayoutInterval) targets.get(0);
-      }
-    } else {
-      temp = (LayoutInterval) sources.get(0);
-      if (targets.isEmpty()) {
-        // Trailing container gap
-        containerGap = true;
-        containerGapAlignment = TRAILING;
-      }
-    }
-    int dimension =
-        temp == temp.getComponent().getLayoutInterval(HORIZONTAL) ? HORIZONTAL : VERTICAL;
-    // Calculate max of sources and min of targets
-    int max = Short.MIN_VALUE;
-    int min = Short.MAX_VALUE;
-    boolean positionsNotUpdated = false;
-    Iterator iter = sources.iterator();
-    while (iter.hasNext()) {
-      LayoutInterval source = (LayoutInterval) iter.next();
-      LayoutRegion region = sizeOfEmptySpaceHelper(source, boundsMap);
-      int trailing = region.positions[dimension][TRAILING];
-      if (trailing == LayoutRegion.UNKNOWN) {
-        positionsNotUpdated = true;
-        break;
-      } else {
-        max = Math.max(max, trailing);
-      }
-    }
-    iter = targets.iterator();
-    while (iter.hasNext()) {
-      LayoutInterval target = (LayoutInterval) iter.next();
-      LayoutRegion region = sizeOfEmptySpaceHelper(target, boundsMap);
-      int leading = region.positions[dimension][LEADING];
-      if (leading == LayoutRegion.UNKNOWN) {
-        positionsNotUpdated = true;
-        break;
-      } else {
-        min = Math.min(min, leading);
-      }
-    }
-    int[] sizes;
-    if (containerGap) {
-      sizes = new int[1];
-      iter = sources.isEmpty() ? targets.iterator() : sources.iterator();
-      while (iter.hasNext()) {
-        LayoutInterval interval = (LayoutInterval) iter.next();
-        LayoutComponent component = interval.getComponent();
-        LayoutRegion region = sizeOfEmptySpaceHelper(interval, boundsMap);
-        String parentId = contId == null ? component.getParent().getId() : contId;
-        int padding =
-            visualMapper.getPreferredPaddingInParent(
-                parentId,
-                component.getId(),
-                dimension,
-                containerGapAlignment);
-        int position = region.positions[dimension][containerGapAlignment];
-        int delta = containerGapAlignment == LEADING ? position - min : max - position;
-        if (!positionsNotUpdated) {
-          padding -= delta;
-        }
-        sizes[0] = Math.max(sizes[0], padding);
-      }
-    } else {
-      PaddingType[] paddingTypes = // just one, or all types of gaps
-          gapType != null ? new PaddingType[]{gapType} : PADDINGS;
-      sizes = new int[paddingTypes.length];
-      Iterator srcIter = sources.iterator();
-      while (srcIter.hasNext()) {
-        LayoutInterval srcCandidate = (LayoutInterval) srcIter.next();
-        String srcId = srcCandidate.getComponent().getId();
-        LayoutRegion srcRegion = sizeOfEmptySpaceHelper(srcCandidate, boundsMap);
-        int srcDelta = max - srcRegion.positions[dimension][TRAILING];
-        Iterator targetIter = targets.iterator();
-        while (targetIter.hasNext()) {
-          LayoutInterval targetCandidate = (LayoutInterval) targetIter.next();
-          String targetId = targetCandidate.getComponent().getId();
-          LayoutRegion targetRegion = sizeOfEmptySpaceHelper(targetCandidate, boundsMap);
-          int targetDelta = targetRegion.positions[dimension][LEADING] - min;
-          for (int i = 0; i < paddingTypes.length; i++) {
-            PaddingType type = paddingTypes[i];
-            int padding =
-                visualMapper.getPreferredPadding(srcId, targetId, dimension, LEADING, type);
-            if (!positionsNotUpdated) {
-              padding -= srcDelta + targetDelta;
-            }
-            sizes[i] = Math.max(sizes[i], padding);
-          }
-        }
-      }
-    }
-    return sizes;
-  }
+	/**
+	 * Finds out the sizes of given types of default gaps between the trailing edge of a set of
+	 * "source" components and the leading edge of a set of "target" components.
+	 *
+	 * @param gapType
+	 *          the padding type whose size should be returned, or null if all types should be
+	 *          determined
+	 * @return array of sizes - one element if specific padding type is asked or four elements if null
+	 *         is provided
+	 */
+	static int[] getSizesOfDefaultGap(List sources,
+			List targets,
+			PaddingType gapType,
+			VisualMapper visualMapper,
+			String contId,
+			Map<String, LayoutRegion> boundsMap) {
+		if (sources != null && sources.isEmpty() || targets != null && targets.isEmpty()) {
+			return new int[]{0}; // Preferred gap not between components
+		}
+		sources = sources == null ? Collections.EMPTY_LIST : sources;
+		targets = targets == null ? Collections.EMPTY_LIST : targets;
+		boolean containerGap = false;
+		int containerGapAlignment = -1;
+		LayoutInterval temp = null;
+		if (sources.isEmpty()) {
+			if (targets.isEmpty()) {
+				return new int[]{0};
+			} else {
+				// Leading container gap
+				containerGap = true;
+				containerGapAlignment = LEADING;
+				temp = (LayoutInterval) targets.get(0);
+			}
+		} else {
+			temp = (LayoutInterval) sources.get(0);
+			if (targets.isEmpty()) {
+				// Trailing container gap
+				containerGap = true;
+				containerGapAlignment = TRAILING;
+			}
+		}
+		int dimension =
+				temp == temp.getComponent().getLayoutInterval(HORIZONTAL) ? HORIZONTAL : VERTICAL;
+		// Calculate max of sources and min of targets
+		int max = Short.MIN_VALUE;
+		int min = Short.MAX_VALUE;
+		boolean positionsNotUpdated = false;
+		Iterator iter = sources.iterator();
+		while (iter.hasNext()) {
+			LayoutInterval source = (LayoutInterval) iter.next();
+			LayoutRegion region = sizeOfEmptySpaceHelper(source, boundsMap);
+			int trailing = region.positions[dimension][TRAILING];
+			if (trailing == LayoutRegion.UNKNOWN) {
+				positionsNotUpdated = true;
+				break;
+			} else {
+				max = Math.max(max, trailing);
+			}
+		}
+		iter = targets.iterator();
+		while (iter.hasNext()) {
+			LayoutInterval target = (LayoutInterval) iter.next();
+			LayoutRegion region = sizeOfEmptySpaceHelper(target, boundsMap);
+			int leading = region.positions[dimension][LEADING];
+			if (leading == LayoutRegion.UNKNOWN) {
+				positionsNotUpdated = true;
+				break;
+			} else {
+				min = Math.min(min, leading);
+			}
+		}
+		int[] sizes;
+		if (containerGap) {
+			sizes = new int[1];
+			iter = sources.isEmpty() ? targets.iterator() : sources.iterator();
+			while (iter.hasNext()) {
+				LayoutInterval interval = (LayoutInterval) iter.next();
+				LayoutComponent component = interval.getComponent();
+				LayoutRegion region = sizeOfEmptySpaceHelper(interval, boundsMap);
+				String parentId = contId == null ? component.getParent().getId() : contId;
+				int padding =
+						visualMapper.getPreferredPaddingInParent(
+								parentId,
+								component.getId(),
+								dimension,
+								containerGapAlignment);
+				int position = region.positions[dimension][containerGapAlignment];
+				int delta = containerGapAlignment == LEADING ? position - min : max - position;
+				if (!positionsNotUpdated) {
+					padding -= delta;
+				}
+				sizes[0] = Math.max(sizes[0], padding);
+			}
+		} else {
+			PaddingType[] paddingTypes = // just one, or all types of gaps
+					gapType != null ? new PaddingType[]{gapType} : PADDINGS;
+			sizes = new int[paddingTypes.length];
+			Iterator srcIter = sources.iterator();
+			while (srcIter.hasNext()) {
+				LayoutInterval srcCandidate = (LayoutInterval) srcIter.next();
+				String srcId = srcCandidate.getComponent().getId();
+				LayoutRegion srcRegion = sizeOfEmptySpaceHelper(srcCandidate, boundsMap);
+				int srcDelta = max - srcRegion.positions[dimension][TRAILING];
+				Iterator targetIter = targets.iterator();
+				while (targetIter.hasNext()) {
+					LayoutInterval targetCandidate = (LayoutInterval) targetIter.next();
+					String targetId = targetCandidate.getComponent().getId();
+					LayoutRegion targetRegion = sizeOfEmptySpaceHelper(targetCandidate, boundsMap);
+					int targetDelta = targetRegion.positions[dimension][LEADING] - min;
+					for (int i = 0; i < paddingTypes.length; i++) {
+						PaddingType type = paddingTypes[i];
+						int padding =
+								visualMapper.getPreferredPadding(srcId, targetId, dimension, LEADING, type);
+						if (!positionsNotUpdated) {
+							padding -= srcDelta + targetDelta;
+						}
+						sizes[i] = Math.max(sizes[i], padding);
+					}
+				}
+			}
+		}
+		return sizes;
+	}
 
-  private static LayoutRegion sizeOfEmptySpaceHelper(LayoutInterval interval,
-      Map<String, LayoutRegion> boundsMap) {
-    LayoutComponent component = interval.getComponent();
-    String compId = component.getId();
-    if (boundsMap.containsKey(compId)) {
-      return boundsMap.get(compId);
-    } else {
-      return interval.getCurrentSpace();
-    }
-  }
+	private static LayoutRegion sizeOfEmptySpaceHelper(LayoutInterval interval,
+			Map<String, LayoutRegion> boundsMap) {
+		LayoutComponent component = interval.getComponent();
+		String compId = component.getId();
+		if (boundsMap.containsKey(compId)) {
+			return boundsMap.get(compId);
+		} else {
+			return interval.getCurrentSpace();
+		}
+	}
 
-  static int getVisualPosition(LayoutInterval interval, int dimension, int alignment) {
-    if (interval.isEmptySpace()) {
-      assert alignment == LEADING || alignment == TRAILING;
-      LayoutInterval neighbor = LayoutInterval.getDirectNeighbor(interval, alignment, false);
-      if (neighbor != null) {
-        interval = neighbor;
-        alignment ^= 1;
-      } else {
-        interval = LayoutInterval.getFirstParent(interval, PARALLEL);
-      }
-    }
-    return interval.getCurrentSpace().positions[dimension][alignment];
-  }
+	static int getVisualPosition(LayoutInterval interval, int dimension, int alignment) {
+		if (interval.isEmptySpace()) {
+			assert alignment == LEADING || alignment == TRAILING;
+			LayoutInterval neighbor = LayoutInterval.getDirectNeighbor(interval, alignment, false);
+			if (neighbor != null) {
+				interval = neighbor;
+				alignment ^= 1;
+			} else {
+				interval = LayoutInterval.getFirstParent(interval, PARALLEL);
+			}
+		}
+		return interval.getCurrentSpace().positions[dimension][alignment];
+	}
 
-  /**
-   * Returns list of components that reside in the <code>root</code> layout interval - the list
-   * contains only components whose layout intervals lie at the specified edge (<code>LEADING</code>
-   * or <code>TRAILING</code>) of the <code>root</code> layout interval.
-   *
-   * @param root
-   *          layout interval that will be scanned.
-   * @param edge
-   *          the requested edge the components shoul be next to.
-   * @return <code>List</code> of <code>LayoutInterval</code>s that represent
-   *         <code>LayoutComponent</code>s.
-   */
-  static List<LayoutInterval> edgeSubComponents(LayoutInterval root, int edge) {
-    List<LayoutInterval> components = null;
-    List<LayoutInterval> candidates = new LinkedList<LayoutInterval>();
-    if (root != null) {
-      components = new LinkedList<LayoutInterval>();
-      candidates.add(root);
-    }
-    while (!candidates.isEmpty()) {
-      LayoutInterval candidate = candidates.get(0);
-      candidates.remove(candidate);
-      if (candidate.isGroup()) {
-        if (candidate.isSequential()) {
-          int index = edge == LEADING ? 0 : candidate.getSubIntervalCount() - 1;
-          candidates.add(candidate.getSubInterval(index));
-        } else {
-          Iterator<LayoutInterval> subs = candidate.getSubIntervals();
-          while (subs.hasNext()) {
-            candidates.add(subs.next());
-          }
-        }
-      } else if (candidate.isComponent()) {
-        components.add(candidate);
-      }
-    }
-    return components;
-  }
+	/**
+	 * Returns list of components that reside in the <code>root</code> layout interval - the list
+	 * contains only components whose layout intervals lie at the specified edge (<code>LEADING</code>
+	 * or <code>TRAILING</code>) of the <code>root</code> layout interval.
+	 *
+	 * @param root
+	 *          layout interval that will be scanned.
+	 * @param edge
+	 *          the requested edge the components shoul be next to.
+	 * @return <code>List</code> of <code>LayoutInterval</code>s that represent
+	 *         <code>LayoutComponent</code>s.
+	 */
+	static List<LayoutInterval> edgeSubComponents(LayoutInterval root, int edge) {
+		List<LayoutInterval> components = null;
+		List<LayoutInterval> candidates = new LinkedList<LayoutInterval>();
+		if (root != null) {
+			components = new LinkedList<LayoutInterval>();
+			candidates.add(root);
+		}
+		while (!candidates.isEmpty()) {
+			LayoutInterval candidate = candidates.get(0);
+			candidates.remove(candidate);
+			if (candidate.isGroup()) {
+				if (candidate.isSequential()) {
+					int index = edge == LEADING ? 0 : candidate.getSubIntervalCount() - 1;
+					candidates.add(candidate.getSubInterval(index));
+				} else {
+					Iterator<LayoutInterval> subs = candidate.getSubIntervals();
+					while (subs.hasNext()) {
+						candidates.add(subs.next());
+					}
+				}
+			} else if (candidate.isComponent()) {
+				components.add(candidate);
+			}
+		}
+		return components;
+	}
 
-  /**
-   * Computes whether a space overlaps with content of given interval. The difference from
-   * LayoutRegion.overlap(...) is that this method goes recursivelly down to components in case
-   * interval is a group - does not use the union space for whole group (which might be inaccurate).
-   */
-  static boolean contentOverlap(LayoutRegion space, LayoutInterval interval, int dimension) {
-    return contentOverlap(space, interval, -1, -1, dimension);
-  }
+	/**
+	 * Computes whether a space overlaps with content of given interval. The difference from
+	 * LayoutRegion.overlap(...) is that this method goes recursivelly down to components in case
+	 * interval is a group - does not use the union space for whole group (which might be inaccurate).
+	 */
+	static boolean contentOverlap(LayoutRegion space, LayoutInterval interval, int dimension) {
+		return contentOverlap(space, interval, -1, -1, dimension);
+	}
 
-  static boolean contentOverlap(LayoutRegion space,
-      LayoutInterval interval,
-      int fromIndex,
-      int toIndex,
-      int dimension) {
-    LayoutRegion examinedSpace = interval.getCurrentSpace();
-    if (!interval.isGroup()) {
-      return LayoutRegion.overlap(space, examinedSpace, dimension, 0);
-    }
-    boolean overlap =
-        !examinedSpace.isSet(dimension) || LayoutRegion.overlap(space, examinedSpace, dimension, 0);
-    if (overlap) {
-      if (fromIndex < 0) {
-        fromIndex = 0;
-      }
-      if (toIndex < 0) {
-        toIndex = interval.getSubIntervalCount() - 1;
-      }
-      assert fromIndex <= toIndex;
-      overlap = false;
-      for (int i = fromIndex; i <= toIndex; i++) {
-        LayoutInterval li = interval.getSubInterval(i);
-        if (!li.isEmptySpace() && contentOverlap(space, li, dimension)) {
-          overlap = true;
-          break;
-        }
-      }
-    }
-    return overlap;
-  }
+	static boolean contentOverlap(LayoutRegion space,
+			LayoutInterval interval,
+			int fromIndex,
+			int toIndex,
+			int dimension) {
+		LayoutRegion examinedSpace = interval.getCurrentSpace();
+		if (!interval.isGroup()) {
+			return LayoutRegion.overlap(space, examinedSpace, dimension, 0);
+		}
+		boolean overlap =
+				!examinedSpace.isSet(dimension) || LayoutRegion.overlap(space, examinedSpace, dimension, 0);
+		if (overlap) {
+			if (fromIndex < 0) {
+				fromIndex = 0;
+			}
+			if (toIndex < 0) {
+				toIndex = interval.getSubIntervalCount() - 1;
+			}
+			assert fromIndex <= toIndex;
+			overlap = false;
+			for (int i = fromIndex; i <= toIndex; i++) {
+				LayoutInterval li = interval.getSubInterval(i);
+				if (!li.isEmptySpace() && contentOverlap(space, li, dimension)) {
+					overlap = true;
+					break;
+				}
+			}
+		}
+		return overlap;
+	}
 
-  /**
-   * Finds out whether components under one interval overlap with components under another interval
-   * (in given dimension).
-   */
-  static boolean contentOverlap(LayoutInterval interval1, LayoutInterval interval2, int dimension) {
-    return contentOverlap(interval1, interval2, -1, -1, dimension);
-  }
+	/**
+	 * Finds out whether components under one interval overlap with components under another interval
+	 * (in given dimension).
+	 */
+	static boolean contentOverlap(LayoutInterval interval1, LayoutInterval interval2, int dimension) {
+		return contentOverlap(interval1, interval2, -1, -1, dimension);
+	}
 
-  /**
-   * @param fromIndex
-   *          initial index of sub-interval in interval2
-   * @param toIndex
-   *          last index to consider under interval2
-   */
-  static boolean contentOverlap(LayoutInterval interval1,
-      LayoutInterval interval2,
-      int fromIndex,
-      int toIndex,
-      int dimension) {
-    if (!interval2.isGroup()) {
-      if (!interval1.isGroup()) {
-        return LayoutRegion.overlap(
-            interval1.getCurrentSpace(),
-            interval2.getCurrentSpace(),
-            dimension,
-            0);
-      }
-      LayoutInterval temp = interval1;
-      interval1 = interval2;
-      interval2 = temp;
-    }
-    // [more efficient algorithm based on region merging and ordering could be found...]
-    List<LayoutInterval> int2list = null;
-    List<LayoutInterval> addList = null;
-    Iterator it1 = getComponentIterator(interval1);
-    while (it1.hasNext()) {
-      LayoutRegion space1 = ((LayoutInterval) it1.next()).getCurrentSpace();
-      Iterator it2 =
-          int2list != null ? int2list.iterator() : getComponentIterator(
-              interval2,
-              fromIndex,
-              toIndex);
-      if (int2list == null && it1.hasNext()) {
-        int2list = new LinkedList<LayoutInterval>();
-        addList = int2list;
-      }
-      while (it2.hasNext()) {
-        LayoutInterval li2 = (LayoutInterval) it2.next();
-        if (LayoutRegion.overlap(space1, li2.getCurrentSpace(), dimension, 0)) {
-          return true;
-        }
-        if (addList != null) {
-          addList.add(li2);
-        }
-      }
-      addList = null;
-    }
-    return false;
-  }
+	/**
+	 * @param fromIndex
+	 *          initial index of sub-interval in interval2
+	 * @param toIndex
+	 *          last index to consider under interval2
+	 */
+	static boolean contentOverlap(LayoutInterval interval1,
+			LayoutInterval interval2,
+			int fromIndex,
+			int toIndex,
+			int dimension) {
+		if (!interval2.isGroup()) {
+			if (!interval1.isGroup()) {
+				return LayoutRegion.overlap(
+						interval1.getCurrentSpace(),
+						interval2.getCurrentSpace(),
+						dimension,
+						0);
+			}
+			LayoutInterval temp = interval1;
+			interval1 = interval2;
+			interval2 = temp;
+		}
+		// [more efficient algorithm based on region merging and ordering could be found...]
+		List<LayoutInterval> int2list = null;
+		List<LayoutInterval> addList = null;
+		Iterator it1 = getComponentIterator(interval1);
+		while (it1.hasNext()) {
+			LayoutRegion space1 = ((LayoutInterval) it1.next()).getCurrentSpace();
+			Iterator it2 =
+					int2list != null ? int2list.iterator() : getComponentIterator(
+							interval2,
+							fromIndex,
+							toIndex);
+			if (int2list == null && it1.hasNext()) {
+				int2list = new LinkedList<LayoutInterval>();
+				addList = int2list;
+			}
+			while (it2.hasNext()) {
+				LayoutInterval li2 = (LayoutInterval) it2.next();
+				if (LayoutRegion.overlap(space1, li2.getCurrentSpace(), dimension, 0)) {
+					return true;
+				}
+				if (addList != null) {
+					addList.add(li2);
+				}
+			}
+			addList = null;
+		}
+		return false;
+	}
 
-  /**
-   * Checks the layout structure of the orthogonal dimension whether an overlap of a component
-   * interval with another interval (or its subintervals) is prevented - i.e. if in the orthogonal
-   * dimension the intervals of the same components are placed sequentially.
-   */
-  static boolean isOverlapPreventedInOtherDimension(LayoutInterval compInterval,
-      LayoutInterval interval,
-      int dimension) {
-    int otherDim = dimension ^ 1;
-    compInterval = (LayoutInterval) getComponentIterator(compInterval).next();
-    LayoutComponent component = compInterval.getComponent();
-    LayoutInterval otherCompInterval = component.getLayoutInterval(otherDim);
-    Iterator it = getComponentIterator(interval);
-    assert it.hasNext();
-    do {
-      LayoutComponent comp = ((LayoutInterval) it.next()).getComponent();
-      LayoutInterval otherInterval = comp.getLayoutInterval(otherDim);
-      LayoutInterval parent = LayoutInterval.getCommonParent(otherCompInterval, otherInterval);
-      if (parent == null || parent.isParallel()) {
-        return false;
-      }
-    } while (it.hasNext());
-    return true;
-  }
+	/**
+	 * Checks the layout structure of the orthogonal dimension whether an overlap of a component
+	 * interval with another interval (or its subintervals) is prevented - i.e. if in the orthogonal
+	 * dimension the intervals of the same components are placed sequentially.
+	 */
+	static boolean isOverlapPreventedInOtherDimension(LayoutInterval compInterval,
+			LayoutInterval interval,
+			int dimension) {
+		int otherDim = dimension ^ 1;
+		compInterval = (LayoutInterval) getComponentIterator(compInterval).next();
+		LayoutComponent component = compInterval.getComponent();
+		LayoutInterval otherCompInterval = component.getLayoutInterval(otherDim);
+		Iterator it = getComponentIterator(interval);
+		assert it.hasNext();
+		do {
+			LayoutComponent comp = ((LayoutInterval) it.next()).getComponent();
+			LayoutInterval otherInterval = comp.getLayoutInterval(otherDim);
+			LayoutInterval parent = LayoutInterval.getCommonParent(otherCompInterval, otherInterval);
+			if (parent == null || parent.isParallel()) {
+				return false;
+			}
+		} while (it.hasNext());
+		return true;
+	}
 
-  static Iterator getComponentIterator(LayoutInterval interval) {
-    return new ComponentIterator(interval, 0, interval.getSubIntervalCount() - 1);
-  }
+	static Iterator getComponentIterator(LayoutInterval interval) {
+		return new ComponentIterator(interval, 0, interval.getSubIntervalCount() - 1);
+	}
 
-  static Iterator getComponentIterator(LayoutInterval interval, int startIndex, int endIndex) {
-    return new ComponentIterator(interval, startIndex, endIndex);
-  }
+	static Iterator getComponentIterator(LayoutInterval interval, int startIndex, int endIndex) {
+		return new ComponentIterator(interval, startIndex, endIndex);
+	}
 
-  private static class ComponentIterator implements Iterator {
-    private final LayoutInterval root;
-    private final int startIndex, endIndex;
-    private final boolean initialized;
-    private int index;
-    private LayoutInterval next;
+	private static class ComponentIterator implements Iterator {
+		private final LayoutInterval root;
+		private final int startIndex, endIndex;
+		private final boolean initialized;
+		private int index;
+		private LayoutInterval next;
 
-    ComponentIterator(LayoutInterval interval, int startIndex, int endIndex) {
-      root = interval;
-      this.startIndex = startIndex;
-      this.endIndex = endIndex;
-      findNext();
-      initialized = true;
-    }
+		ComponentIterator(LayoutInterval interval, int startIndex, int endIndex) {
+			root = interval;
+			this.startIndex = startIndex;
+			this.endIndex = endIndex;
+			findNext();
+			initialized = true;
+		}
 
-    private void findNext() {
-      LayoutInterval parent;
-      int idx;
-      if (next == null) {
-        if (initialized) {
-          return;
-        }
-        if (!root.isGroup()) {
-          if (root.isComponent()) {
-            next = root;
-          }
-          return;
-        }
-        parent = root; // let's start from root
-        idx = startIndex;
-      } else if (next != root) { // somewhere in the structure
-        parent = next.getParent();
-        idx = index + 1;
-      } else { // root is component, already used
-        next = null;
-        return;
-      }
-      next = null;
-      do {
-        while (idx < parent.getSubIntervalCount()) {
-          if (parent == root && idx > endIndex) {
-            return; // out of the root set
-          }
-          LayoutInterval sub = parent.getSubInterval(idx);
-          if (sub.isComponent()) { // that's it
-            next = sub;
-            index = idx;
-            return;
-          }
-          if (sub.isGroup()) { // go down
-            parent = sub;
-            idx = 0;
-          } else {
-            idx++;
-          }
-        }
-        if (parent != root) { // go up
-          idx = parent.getParent().indexOf(parent) + 1;
-          parent = parent.getParent();
-        } else {
-          break; // all scanned
-        }
-      } while (true);
-    }
+		private void findNext() {
+			LayoutInterval parent;
+			int idx;
+			if (next == null) {
+				if (initialized) {
+					return;
+				}
+				if (!root.isGroup()) {
+					if (root.isComponent()) {
+						next = root;
+					}
+					return;
+				}
+				parent = root; // let's start from root
+				idx = startIndex;
+			} else if (next != root) { // somewhere in the structure
+				parent = next.getParent();
+				idx = index + 1;
+			} else { // root is component, already used
+				next = null;
+				return;
+			}
+			next = null;
+			do {
+				while (idx < parent.getSubIntervalCount()) {
+					if (parent == root && idx > endIndex) {
+						return; // out of the root set
+					}
+					LayoutInterval sub = parent.getSubInterval(idx);
+					if (sub.isComponent()) { // that's it
+						next = sub;
+						index = idx;
+						return;
+					}
+					if (sub.isGroup()) { // go down
+						parent = sub;
+						idx = 0;
+					} else {
+						idx++;
+					}
+				}
+				if (parent != root) { // go up
+					idx = parent.getParent().indexOf(parent) + 1;
+					parent = parent.getParent();
+				} else {
+					break; // all scanned
+				}
+			} while (true);
+		}
 
-    @Override
-    public boolean hasNext() {
-      return next != null;
-    }
+		@Override
+		public boolean hasNext() {
+			return next != null;
+		}
 
-    @Override
-    public Object next() {
-      if (next == null) {
-        throw new NoSuchElementException();
-      }
-      Object ret = next;
-      findNext();
-      return ret;
-    }
+		@Override
+		public Object next() {
+			if (next == null) {
+				throw new NoSuchElementException();
+			}
+			Object ret = next;
+			findNext();
+			return ret;
+		}
 
-    @Override
-    public void remove() {
-      throw new UnsupportedOperationException();
-    }
-  }
+		@Override
+		public void remove() {
+			throw new UnsupportedOperationException();
+		}
+	}
 }
diff --git a/org.eclipse.wb.layout.group/netbeans-src/org/netbeans/modules/form/layoutdesign/VisualMapper.java b/org.eclipse.wb.layout.group/netbeans-src/org/netbeans/modules/form/layoutdesign/VisualMapper.java
index 36e6cc187..813f5e17b 100644
--- a/org.eclipse.wb.layout.group/netbeans-src/org/netbeans/modules/form/layoutdesign/VisualMapper.java
+++ b/org.eclipse.wb.layout.group/netbeans-src/org/netbeans/modules/form/layoutdesign/VisualMapper.java
@@ -34,91 +34,91 @@
 import java.awt.Rectangle;
 
 public interface VisualMapper extends LayoutConstants {
-  /**
-   * Default value for PADDING_SEPARATED type of gap.
-   */
-  public static final int PADDING_SEPARATE_VALUE = 18;
+	/**
+	 * Default value for PADDING_SEPARATED type of gap.
+	 */
+	public static final int PADDING_SEPARATE_VALUE = 18;
 
-  //    String getTopComponentId();
-  /**
-   * Provides actual bounds (position and size) of a component - as it appears in the visual design
-   * area. The position should be in coordinates of the whole design visualization.
-   *
-   * @param componentId
-   * @return actual bounds of given component, null if the component is not currently visualized in
-   *         the design area
-   */
-  Rectangle getComponentBounds(String componentId);
+	//    String getTopComponentId();
+	/**
+	 * Provides actual bounds (position and size) of a component - as it appears in the visual design
+	 * area. The position should be in coordinates of the whole design visualization.
+	 *
+	 * @param componentId
+	 * @return actual bounds of given component, null if the component is not currently visualized in
+	 *         the design area
+	 */
+	Rectangle getComponentBounds(String componentId);
 
-  /**
-   * Provides actual position and size of the interior of a component container - as it appears in
-   * the visual design area. (The interior differs from the outer bounds in that it should reflect
-   * the borders or other insets). The position should be in coordinates of the whole design
-   * visualization.
-   *
-   * @param componentId
-   * @return actual interior of given component, null if the component is not currently visualized
-   *         in the design area
-   */
-  Rectangle getContainerInterior(String componentId);
+	/**
+	 * Provides actual position and size of the interior of a component container - as it appears in
+	 * the visual design area. (The interior differs from the outer bounds in that it should reflect
+	 * the borders or other insets). The position should be in coordinates of the whole design
+	 * visualization.
+	 *
+	 * @param componentId
+	 * @return actual interior of given component, null if the component is not currently visualized
+	 *         in the design area
+	 */
+	Rectangle getContainerInterior(String componentId);
 
-  Dimension getComponentMinimumSize(String componentId);
+	Dimension getComponentMinimumSize(String componentId);
 
-  Dimension getComponentPreferredSize(String componentId);
+	Dimension getComponentPreferredSize(String componentId);
 
-  boolean hasExplicitPreferredSize(String componentId);
+	boolean hasExplicitPreferredSize(String componentId);
 
-  /**
-   * Provides preferred padding (optimal amount of space) between two components.
-   *
-   * @param component1Id
-   *          first component Id
-   * @param component2Id
-   *          second component Id
-   * @param dimension
-   *          the dimension (HORIZONTAL or VERTICAL) in which the components are positioned
-   * @param comp2Alignment
-   *          the edge (LEADING or TRAILING) at which the second component is placed next to the
-   *          first component
-   * @param paddingType
-   *          padding type (RELATED, UNRELATED, SEPARATE or INDENT)
-   * @return preferred padding (amount of space) between the given components
-   */
-  int getPreferredPadding(String component1Id,
-      String component2Id,
-      int dimension,
-      int comp2Alignment,
-      PaddingType paddingType);
+	/**
+	 * Provides preferred padding (optimal amount of space) between two components.
+	 *
+	 * @param component1Id
+	 *          first component Id
+	 * @param component2Id
+	 *          second component Id
+	 * @param dimension
+	 *          the dimension (HORIZONTAL or VERTICAL) in which the components are positioned
+	 * @param comp2Alignment
+	 *          the edge (LEADING or TRAILING) at which the second component is placed next to the
+	 *          first component
+	 * @param paddingType
+	 *          padding type (RELATED, UNRELATED, SEPARATE or INDENT)
+	 * @return preferred padding (amount of space) between the given components
+	 */
+	int getPreferredPadding(String component1Id,
+			String component2Id,
+			int dimension,
+			int comp2Alignment,
+			PaddingType paddingType);
 
-  /**
-   * Provides preferred padding (optimal amount of space) between a component and its parent's
-   * border.
-   *
-   * @param parentId
-   *          Id of the parent container
-   * @param componentId
-   *          Id of the component
-   * @param dimension
-   *          the dimension (HORIZONTAL or VERTICAL) in which the component is positioned
-   * @param compALignment
-   *          the edge (LEADING or TRAILING) of the component which should be placed next to the
-   *          parent's border
-   * @return preferred padding (amount of space) between the component and its parent's border
-   */
-  int getPreferredPaddingInParent(String parentId,
-      String componentId,
-      int dimension,
-      int compAlignment);
+	/**
+	 * Provides preferred padding (optimal amount of space) between a component and its parent's
+	 * border.
+	 *
+	 * @param parentId
+	 *          Id of the parent container
+	 * @param componentId
+	 *          Id of the component
+	 * @param dimension
+	 *          the dimension (HORIZONTAL or VERTICAL) in which the component is positioned
+	 * @param compALignment
+	 *          the edge (LEADING or TRAILING) of the component which should be placed next to the
+	 *          parent's border
+	 * @return preferred padding (amount of space) between the component and its parent's border
+	 */
+	int getPreferredPaddingInParent(String parentId,
+			String componentId,
+			int dimension,
+			int compAlignment);
 
-  int getBaselinePosition(String componentId, int width, int height);
+	int getBaselinePosition(String componentId, int width, int height);
 
-  boolean[] getComponentResizability(String compId, boolean[] resizability);
+	boolean[] getComponentResizability(String compId, boolean[] resizability);
 
-  /**
-   * Rebuilds the layout of given container. Called if LayoutDesigner needs immediate update of the
-   * layout according to the model.
-   */
-  void rebuildLayout(String containerId);
+	/**
+	 * Rebuilds the layout of given container. Called if LayoutDesigner needs immediate update of the
+	 * layout according to the model.
+	 */
+	void rebuildLayout(String containerId);
 
-  void setComponentVisibility(String componentId, boolean visible);
+	void setComponentVisibility(String componentId, boolean visible);
 }
diff --git a/org.eclipse.wb.layout.group/netbeans-src/org/netbeans/modules/form/layoutdesign/support/SwingLayoutCodeGenerator.java b/org.eclipse.wb.layout.group/netbeans-src/org/netbeans/modules/form/layoutdesign/support/SwingLayoutCodeGenerator.java
index ef44f534e..61f61e973 100644
--- a/org.eclipse.wb.layout.group/netbeans-src/org/netbeans/modules/form/layoutdesign/support/SwingLayoutCodeGenerator.java
+++ b/org.eclipse.wb.layout.group/netbeans-src/org/netbeans/modules/form/layoutdesign/support/SwingLayoutCodeGenerator.java
@@ -53,514 +53,514 @@
  * @author Jan Stola
  */
 public class SwingLayoutCodeGenerator {
-  private static final String INDENT = "\t";
-  private static final String LAYOUT_VAR_NAME = "layout"; // NOI18N
-  private String layoutVarName;
-  private boolean useLayoutLibrary;
-  /**
-   * Maps from component ID to <code>ComponentInfo</code>.
-   */
-  private final Map<String, ComponentInfo> componentIDMap;
+	private static final String INDENT = "\t";
+	private static final String LAYOUT_VAR_NAME = "layout"; // NOI18N
+	private String layoutVarName;
+	private boolean useLayoutLibrary;
+	/**
+	 * Maps from component ID to <code>ComponentInfo</code>.
+	 */
+	private final Map<String, ComponentInfo> componentIDMap;
 
-  /**
-   * Creates new <code>SwingLayoutCodeGenerator</code>.
-   *
-   * @param layoutModel
-   *          layout model of the form.
-   */
-  public SwingLayoutCodeGenerator(LayoutModel layoutModel) {
-    componentIDMap = new HashMap<String, ComponentInfo>();
-  }
+	/**
+	 * Creates new <code>SwingLayoutCodeGenerator</code>.
+	 *
+	 * @param layoutModel
+	 *          layout model of the form.
+	 */
+	public SwingLayoutCodeGenerator(LayoutModel layoutModel) {
+		componentIDMap = new HashMap<String, ComponentInfo>();
+	}
 
-  /**
-   * Generates Java layout code for the specified container. The generated code is written to the
-   * <code>writer</code>.
-   *
-   * @param writer
-   *          the writer to generate the code into.
-   * @param container
-   *          the container whose code should be generated.
-   * @param contExprStr
-   *          code expression representing the container.
-   * @param contVarName
-   *          variable name of the container, used to derive the local variable name for the layout
-   *          instance
-   * @param infos
-   *          data about subcomponents.
-   * @param useLibrary
-   *          whether to use swing-layout library or Java 6 code
-   */
-  public void generateContainerLayout(Writer writer,
-      LayoutComponent container,
-      String contVarName,
-      ComponentInfo infos[],
-      boolean useLibrary) throws IOException {
-    useLayoutLibrary = useLibrary;
-    if (contVarName == null) {
-      layoutVarName = LAYOUT_VAR_NAME;
-    } else {
-      layoutVarName = contVarName;
-    }
-    fillMap(infos);
-    // generateInstantiation(writer, contExprStr);
-    LayoutInterval[][] extraRoots;
-    int rootCount = container.getLayoutRootCount();
-    if (rootCount > 1) {
-      // prepare generating multiple roots into one group
-      extraRoots = new LayoutInterval[LayoutConstants.DIM_COUNT][rootCount - 1];
-      for (int i = 1; i < rootCount; i++) {
-        for (int dim = 0; dim < LayoutConstants.DIM_COUNT; dim++) {
-          extraRoots[dim][i - 1] = container.getLayoutRoot(i, dim);
-          assert extraRoots[dim][i - 1].isParallel();
-        }
-      }
-    } else {
-      extraRoots = null;
-    }
-    for (int dim = 0; dim < LayoutConstants.DIM_COUNT; dim++) {
-      StringBuilder sb = new StringBuilder();
-      sb.append(INDENT);
-      composeGroup(
-          sb,
-          container.getLayoutRoot(0, dim),
-          extraRoots != null ? extraRoots[dim] : null,
-          true,
-          true,
-          INDENT);
-      writer.write(
-          layoutVarName
-              + (dim == LayoutConstants.HORIZONTAL
-                  ? ".setHorizontalGroup(\n"
-                  : ".setVerticalGroup(\n") // NOI18N
-              + sb.toString()
-              + "\n);\n"); // NOI18N
-      sb = new StringBuilder();
-      composeLinks(sb, container, layoutVarName, dim);
-      writer.write(sb.toString());
-    }
-  }
+	/**
+	 * Generates Java layout code for the specified container. The generated code is written to the
+	 * <code>writer</code>.
+	 *
+	 * @param writer
+	 *          the writer to generate the code into.
+	 * @param container
+	 *          the container whose code should be generated.
+	 * @param contExprStr
+	 *          code expression representing the container.
+	 * @param contVarName
+	 *          variable name of the container, used to derive the local variable name for the layout
+	 *          instance
+	 * @param infos
+	 *          data about subcomponents.
+	 * @param useLibrary
+	 *          whether to use swing-layout library or Java 6 code
+	 */
+	public void generateContainerLayout(Writer writer,
+			LayoutComponent container,
+			String contVarName,
+			ComponentInfo infos[],
+			boolean useLibrary) throws IOException {
+		useLayoutLibrary = useLibrary;
+		if (contVarName == null) {
+			layoutVarName = LAYOUT_VAR_NAME;
+		} else {
+			layoutVarName = contVarName;
+		}
+		fillMap(infos);
+		// generateInstantiation(writer, contExprStr);
+		LayoutInterval[][] extraRoots;
+		int rootCount = container.getLayoutRootCount();
+		if (rootCount > 1) {
+			// prepare generating multiple roots into one group
+			extraRoots = new LayoutInterval[LayoutConstants.DIM_COUNT][rootCount - 1];
+			for (int i = 1; i < rootCount; i++) {
+				for (int dim = 0; dim < LayoutConstants.DIM_COUNT; dim++) {
+					extraRoots[dim][i - 1] = container.getLayoutRoot(i, dim);
+					assert extraRoots[dim][i - 1].isParallel();
+				}
+			}
+		} else {
+			extraRoots = null;
+		}
+		for (int dim = 0; dim < LayoutConstants.DIM_COUNT; dim++) {
+			StringBuilder sb = new StringBuilder();
+			sb.append(INDENT);
+			composeGroup(
+					sb,
+					container.getLayoutRoot(0, dim),
+					extraRoots != null ? extraRoots[dim] : null,
+							true,
+							true,
+							INDENT);
+			writer.write(
+					layoutVarName
+					+ (dim == LayoutConstants.HORIZONTAL
+					? ".setHorizontalGroup(\n"
+							: ".setVerticalGroup(\n") // NOI18N
+					+ sb.toString()
+					+ "\n);\n"); // NOI18N
+			sb = new StringBuilder();
+			composeLinks(sb, container, layoutVarName, dim);
+			writer.write(sb.toString());
+		}
+	}
 
-  /**
-   * Fills the <code>componentIDMap</code>.
-   *
-   * @param infos
-   *          information about components.
-   */
-  private void fillMap(ComponentInfo[] infos) {
-    for (int counter = 0; counter < infos.length; counter++) {
-      componentIDMap.put(infos[counter].id, infos[counter]);
-    }
-  }
+	/**
+	 * Fills the <code>componentIDMap</code>.
+	 *
+	 * @param infos
+	 *          information about components.
+	 */
+	private void fillMap(ComponentInfo[] infos) {
+		for (int counter = 0; counter < infos.length; counter++) {
+			componentIDMap.put(infos[counter].id, infos[counter]);
+		}
+	}
 
-  /**
-   * Generates the "header" of the code e.g. instantiation of the layout and call to the
-   * <code>setLayout</code> method.
-   */
-  private void generateInstantiation(Writer writer, String contExprStr) throws IOException {
-    writer.write(getLayoutName() + " " + layoutVarName + " "); // NOI18N
-    writer.write("= new " + getLayoutName() + "(" + contExprStr + ");\n"); // NOI18N
-    writer.write(contExprStr + ".setLayout(" + layoutVarName + ");\n"); // NOI18N
-  }
+	/**
+	 * Generates the "header" of the code e.g. instantiation of the layout and call to the
+	 * <code>setLayout</code> method.
+	 */
+	private void generateInstantiation(Writer writer, String contExprStr) throws IOException {
+		writer.write(getLayoutName() + " " + layoutVarName + " "); // NOI18N
+		writer.write("= new " + getLayoutName() + "(" + contExprStr + ");\n"); // NOI18N
+		writer.write(contExprStr + ".setLayout(" + layoutVarName + ");\n"); // NOI18N
+	}
 
-  /**
-   * Generates layout code for a group that corresponds to the <code>interval</code>.
-   *
-   * @param layout
-   *          buffer to generate the code into.
-   * @param interval
-   *          layout model of the group.
-   */
-  private void composeGroup(StringBuilder layout,
-      LayoutInterval group,
-      LayoutInterval[] extraGroups,
-      boolean first,
-      boolean last,
-      String indent) throws IOException {
-    int groupAlignment = group.getGroupAlignment();
-    if (group.isParallel()) {
-      boolean notResizable = group.getMaximumSize(false) == LayoutConstants.USE_PREFERRED_SIZE;
-      String alignmentStr = convertAlignment(groupAlignment);
-      layout.append(layoutVarName).append(".createParallelGroup("); // NOI18N
-      layout.append(alignmentStr);
-      if (notResizable) {
-        layout.append(", false"); // NOI18N
-      }
-      layout.append(")"); // NOI18N
-    } else {
-      layout.append(layoutVarName).append(".createSequentialGroup()"); // NOI18N
-    }
-    Iterator subIntervals = group.getSubIntervals();
-    while (subIntervals.hasNext()) {
-      layout.append("\n"); // NOI18N
-      LayoutInterval subInterval = (LayoutInterval) subIntervals.next();
-      fillGroup(
-          layout,
-          subInterval,
-          first,
-          last && (!group.isSequential() || !subIntervals.hasNext() && extraGroups == null),
-          groupAlignment,
-          INDENT + indent);
-      if (first && group.isSequential()) {
-        first = false;
-      }
-    }
-    if (extraGroups != null) {
-      for (LayoutInterval g : extraGroups) {
-        layout.append("\n"); // NOI18N
-        fillGroup(layout, g, first, last, groupAlignment, INDENT);
-        // assuming extra groups are always parallel
-      }
-    }
-  }
+	/**
+	 * Generates layout code for a group that corresponds to the <code>interval</code>.
+	 *
+	 * @param layout
+	 *          buffer to generate the code into.
+	 * @param interval
+	 *          layout model of the group.
+	 */
+	private void composeGroup(StringBuilder layout,
+			LayoutInterval group,
+			LayoutInterval[] extraGroups,
+			boolean first,
+			boolean last,
+			String indent) throws IOException {
+		int groupAlignment = group.getGroupAlignment();
+		if (group.isParallel()) {
+			boolean notResizable = group.getMaximumSize(false) == LayoutConstants.USE_PREFERRED_SIZE;
+			String alignmentStr = convertAlignment(groupAlignment);
+			layout.append(layoutVarName).append(".createParallelGroup("); // NOI18N
+			layout.append(alignmentStr);
+			if (notResizable) {
+				layout.append(", false"); // NOI18N
+			}
+			layout.append(")"); // NOI18N
+		} else {
+			layout.append(layoutVarName).append(".createSequentialGroup()"); // NOI18N
+		}
+		Iterator subIntervals = group.getSubIntervals();
+		while (subIntervals.hasNext()) {
+			layout.append("\n"); // NOI18N
+			LayoutInterval subInterval = (LayoutInterval) subIntervals.next();
+			fillGroup(
+					layout,
+					subInterval,
+					first,
+					last && (!group.isSequential() || !subIntervals.hasNext() && extraGroups == null),
+					groupAlignment,
+					INDENT + indent);
+			if (first && group.isSequential()) {
+				first = false;
+			}
+		}
+		if (extraGroups != null) {
+			for (LayoutInterval g : extraGroups) {
+				layout.append("\n"); // NOI18N
+				fillGroup(layout, g, first, last, groupAlignment, INDENT);
+				// assuming extra groups are always parallel
+			}
+		}
+	}
 
-  /**
-   * Generate layout code for one element in the group.
-   *
-   * @param layout
-   *          buffer to generate the code into.
-   * @param interval
-   *          layout model of the element.
-   * @param groupAlignment
-   *          alignment of the enclosing group.
-   */
-  private void fillGroup(StringBuilder layout,
-      LayoutInterval interval,
-      boolean first,
-      boolean last,
-      int groupAlignment,
-      String indent) throws IOException {
-    if (interval.isGroup()) {
-      layout.append(indent);
-      layout.append(getAddGroupStr());
-      int alignment = interval.getAlignment();
-      if (alignment != LayoutConstants.DEFAULT
-          && interval.getParent().isParallel()
-          && alignment != groupAlignment
-          && alignment != LayoutConstants.BASELINE
-          && groupAlignment != LayoutConstants.BASELINE) {
-        String alignmentStr = convertAlignment(alignment);
-        layout.append(alignmentStr).append(", "); // NOI18N
-      }
-      composeGroup(layout, interval, null, first, last, indent);
-    } else {
-      int min = interval.getMinimumSize(false);
-      int pref = interval.getPreferredSize(false);
-      int max = interval.getMaximumSize(false);
-      if (interval.isComponent()) {
-        layout.append(indent);
-        layout.append(getAddComponentStr());
-        int alignment = interval.getAlignment();
-        LayoutComponent layoutComp = interval.getComponent();
-        ComponentInfo info = componentIDMap.get(layoutComp.getId());
-        if (min == LayoutConstants.NOT_EXPLICITLY_DEFINED) {
-          int dimension = layoutComp.getLayoutInterval(LayoutConstants.HORIZONTAL) == interval
-              ? LayoutConstants.HORIZONTAL
-              : LayoutConstants.VERTICAL;
-          if (dimension == LayoutConstants.HORIZONTAL
-              && info.clazz.getName().equals("javax.swing.JComboBox")) { // Issue 68612 // NOI18N
-            min = 0;
-          } else if (pref >= 0) {
-            int compMin =
-                dimension == LayoutConstants.HORIZONTAL ? info.minSize.width : info.minSize.height;
-            if (compMin > pref) {
-              min = LayoutConstants.USE_PREFERRED_SIZE;
-            }
-          }
-        }
-        assert info.variableName != null;
-        if (interval.getParent().isSequential()
-            || alignment == LayoutConstants.DEFAULT
-            || alignment == groupAlignment
-            || alignment == LayoutConstants.BASELINE
-            || groupAlignment == LayoutConstants.BASELINE) {
-          layout.append(info.variableName);
-        } else {
-          String alignmentStr = convertAlignment(alignment);
-          if (useLayoutLibrary()) {
-            layout.append(alignmentStr).append(", ").append(info.variableName); // NOI18N
-          } else {
-            // in JDK the component comes first
-            layout.append(info.variableName).append(", ").append(alignmentStr); // NOI18N
-          }
-        }
-        int status = SwingLayoutUtils.getResizableStatus(info.clazz);
-        if (!(pref == LayoutConstants.NOT_EXPLICITLY_DEFINED
-            && (min == LayoutConstants.NOT_EXPLICITLY_DEFINED
-                || min == LayoutConstants.USE_PREFERRED_SIZE
-                    && !info.sizingChanged
-                    && status == SwingLayoutUtils.STATUS_NON_RESIZABLE)
-            && (max == LayoutConstants.NOT_EXPLICITLY_DEFINED
-                || max == LayoutConstants.USE_PREFERRED_SIZE
-                    && !info.sizingChanged
-                    && status == SwingLayoutUtils.STATUS_NON_RESIZABLE
-                || max == Short.MAX_VALUE
-                    && !info.sizingChanged
-                    && status == SwingLayoutUtils.STATUS_RESIZABLE))) {
-          layout.append(", "); // NOI18N
-          generateSizeParams(layout, min, pref, max);
-        }
-      } else if (interval.isEmptySpace()) {
-        boolean preferredGap;
-        LayoutConstants.PaddingType gapType = interval.getPaddingType();
-        if (interval.isDefaultPadding(false)) {
-          if (gapType != null && gapType == LayoutConstants.PaddingType.SEPARATE) {
-            // special case - SEPARATE padding not known by LayoutStyle
-            preferredGap = false;
-            if (min == LayoutConstants.NOT_EXPLICITLY_DEFINED) {
-              min = VisualMapper.PADDING_SEPARATE_VALUE;
-            }
-            if (pref == LayoutConstants.NOT_EXPLICITLY_DEFINED) {
-              pref = VisualMapper.PADDING_SEPARATE_VALUE;
-            }
-          } else {
-            preferredGap = true;
-          }
-        } else {
-          preferredGap = false;
-        }
-        if (preferredGap) {
-          if (first || last) {
-            layout.append(indent);
-            layout.append(getAddContainerGapStr());
-          } else {
-            layout.append(indent);
-            layout.append(getAddPreferredGapStr());
-            if (gapType == LayoutConstants.PaddingType.INDENT) {
-              // TBD: comp1, comp2
-              pref = max = LayoutConstants.NOT_EXPLICITLY_DEFINED; // always fixed
-            }
-            layout.append(getPaddingTypeStr(gapType));
-          }
-          if (pref != LayoutConstants.NOT_EXPLICITLY_DEFINED
-              || max != LayoutConstants.NOT_EXPLICITLY_DEFINED
-                  // NOT_EXPLICITLY_DEFINED is the same as USE_PREFERRED_SIZE in this case
-                  && max != LayoutConstants.USE_PREFERRED_SIZE) {
-            if (!first && !last) {
-              layout.append(',').append(' ');
-            }
-            layout.append(convertSize(pref)).append(", "); // NOI18N
-            layout.append(convertSize(max));
-          }
-        } else {
-          if (min == LayoutConstants.USE_PREFERRED_SIZE) {
-            min = pref;
-          }
-          if (max == LayoutConstants.USE_PREFERRED_SIZE) {
-            max = pref;
-          }
-          layout.append(indent);
-          layout.append(getAddGapStr());
-          if (min < 0) {
-            min = pref; // min == GroupLayout.PREFERRED_SIZE
-          }
-          min = Math.min(pref, min);
-          max = Math.max(pref, max);
-          if (min == pref && pref == max) {
-            layout.append(convertSize(pref));
-          } else {
-            generateSizeParams(layout, min, pref, max);
-          }
-        }
-      } else {
-        assert false;
-      }
-    }
-    layout.append(")"); // NOI18N
-  }
+	/**
+	 * Generate layout code for one element in the group.
+	 *
+	 * @param layout
+	 *          buffer to generate the code into.
+	 * @param interval
+	 *          layout model of the element.
+	 * @param groupAlignment
+	 *          alignment of the enclosing group.
+	 */
+	private void fillGroup(StringBuilder layout,
+			LayoutInterval interval,
+			boolean first,
+			boolean last,
+			int groupAlignment,
+			String indent) throws IOException {
+		if (interval.isGroup()) {
+			layout.append(indent);
+			layout.append(getAddGroupStr());
+			int alignment = interval.getAlignment();
+			if (alignment != LayoutConstants.DEFAULT
+					&& interval.getParent().isParallel()
+					&& alignment != groupAlignment
+					&& alignment != LayoutConstants.BASELINE
+					&& groupAlignment != LayoutConstants.BASELINE) {
+				String alignmentStr = convertAlignment(alignment);
+				layout.append(alignmentStr).append(", "); // NOI18N
+			}
+			composeGroup(layout, interval, null, first, last, indent);
+		} else {
+			int min = interval.getMinimumSize(false);
+			int pref = interval.getPreferredSize(false);
+			int max = interval.getMaximumSize(false);
+			if (interval.isComponent()) {
+				layout.append(indent);
+				layout.append(getAddComponentStr());
+				int alignment = interval.getAlignment();
+				LayoutComponent layoutComp = interval.getComponent();
+				ComponentInfo info = componentIDMap.get(layoutComp.getId());
+				if (min == LayoutConstants.NOT_EXPLICITLY_DEFINED) {
+					int dimension = layoutComp.getLayoutInterval(LayoutConstants.HORIZONTAL) == interval
+							? LayoutConstants.HORIZONTAL
+									: LayoutConstants.VERTICAL;
+					if (dimension == LayoutConstants.HORIZONTAL
+							&& info.clazz.getName().equals("javax.swing.JComboBox")) { // Issue 68612 // NOI18N
+						min = 0;
+					} else if (pref >= 0) {
+						int compMin =
+								dimension == LayoutConstants.HORIZONTAL ? info.minSize.width : info.minSize.height;
+						if (compMin > pref) {
+							min = LayoutConstants.USE_PREFERRED_SIZE;
+						}
+					}
+				}
+				assert info.variableName != null;
+				if (interval.getParent().isSequential()
+						|| alignment == LayoutConstants.DEFAULT
+						|| alignment == groupAlignment
+						|| alignment == LayoutConstants.BASELINE
+						|| groupAlignment == LayoutConstants.BASELINE) {
+					layout.append(info.variableName);
+				} else {
+					String alignmentStr = convertAlignment(alignment);
+					if (useLayoutLibrary()) {
+						layout.append(alignmentStr).append(", ").append(info.variableName); // NOI18N
+					} else {
+						// in JDK the component comes first
+						layout.append(info.variableName).append(", ").append(alignmentStr); // NOI18N
+					}
+				}
+				int status = SwingLayoutUtils.getResizableStatus(info.clazz);
+				if (!(pref == LayoutConstants.NOT_EXPLICITLY_DEFINED
+						&& (min == LayoutConstants.NOT_EXPLICITLY_DEFINED
+						|| min == LayoutConstants.USE_PREFERRED_SIZE
+						&& !info.sizingChanged
+						&& status == SwingLayoutUtils.STATUS_NON_RESIZABLE)
+						&& (max == LayoutConstants.NOT_EXPLICITLY_DEFINED
+						|| max == LayoutConstants.USE_PREFERRED_SIZE
+						&& !info.sizingChanged
+						&& status == SwingLayoutUtils.STATUS_NON_RESIZABLE
+						|| max == Short.MAX_VALUE
+						&& !info.sizingChanged
+						&& status == SwingLayoutUtils.STATUS_RESIZABLE))) {
+					layout.append(", "); // NOI18N
+					generateSizeParams(layout, min, pref, max);
+				}
+			} else if (interval.isEmptySpace()) {
+				boolean preferredGap;
+				LayoutConstants.PaddingType gapType = interval.getPaddingType();
+				if (interval.isDefaultPadding(false)) {
+					if (gapType != null && gapType == LayoutConstants.PaddingType.SEPARATE) {
+						// special case - SEPARATE padding not known by LayoutStyle
+						preferredGap = false;
+						if (min == LayoutConstants.NOT_EXPLICITLY_DEFINED) {
+							min = VisualMapper.PADDING_SEPARATE_VALUE;
+						}
+						if (pref == LayoutConstants.NOT_EXPLICITLY_DEFINED) {
+							pref = VisualMapper.PADDING_SEPARATE_VALUE;
+						}
+					} else {
+						preferredGap = true;
+					}
+				} else {
+					preferredGap = false;
+				}
+				if (preferredGap) {
+					if (first || last) {
+						layout.append(indent);
+						layout.append(getAddContainerGapStr());
+					} else {
+						layout.append(indent);
+						layout.append(getAddPreferredGapStr());
+						if (gapType == LayoutConstants.PaddingType.INDENT) {
+							// TBD: comp1, comp2
+							pref = max = LayoutConstants.NOT_EXPLICITLY_DEFINED; // always fixed
+						}
+						layout.append(getPaddingTypeStr(gapType));
+					}
+					if (pref != LayoutConstants.NOT_EXPLICITLY_DEFINED
+							|| max != LayoutConstants.NOT_EXPLICITLY_DEFINED
+							// NOT_EXPLICITLY_DEFINED is the same as USE_PREFERRED_SIZE in this case
+							&& max != LayoutConstants.USE_PREFERRED_SIZE) {
+						if (!first && !last) {
+							layout.append(',').append(' ');
+						}
+						layout.append(convertSize(pref)).append(", "); // NOI18N
+						layout.append(convertSize(max));
+					}
+				} else {
+					if (min == LayoutConstants.USE_PREFERRED_SIZE) {
+						min = pref;
+					}
+					if (max == LayoutConstants.USE_PREFERRED_SIZE) {
+						max = pref;
+					}
+					layout.append(indent);
+					layout.append(getAddGapStr());
+					if (min < 0) {
+						min = pref; // min == GroupLayout.PREFERRED_SIZE
+					}
+					min = Math.min(pref, min);
+					max = Math.max(pref, max);
+					if (min == pref && pref == max) {
+						layout.append(convertSize(pref));
+					} else {
+						generateSizeParams(layout, min, pref, max);
+					}
+				}
+			} else {
+				assert false;
+			}
+		}
+		layout.append(")"); // NOI18N
+	}
 
-  /**
-   * Generates minimum/preferred/maximum size parameters..
-   *
-   * @param layout
-   *          buffer to generate the code into.
-   * @param min
-   *          minimum size.
-   * @param pref
-   *          preferred size.
-   * @param max
-   *          maximum size.
-   */
-  private void generateSizeParams(StringBuilder layout, int min, int pref, int max) {
-    layout.append(convertSize(min)).append(", "); // NOI18N
-    layout.append(convertSize(pref)).append(", "); // NOI18N
-    layout.append(convertSize(max));
-  }
+	/**
+	 * Generates minimum/preferred/maximum size parameters..
+	 *
+	 * @param layout
+	 *          buffer to generate the code into.
+	 * @param min
+	 *          minimum size.
+	 * @param pref
+	 *          preferred size.
+	 * @param max
+	 *          maximum size.
+	 */
+	private void generateSizeParams(StringBuilder layout, int min, int pref, int max) {
+		layout.append(convertSize(min)).append(", "); // NOI18N
+		layout.append(convertSize(pref)).append(", "); // NOI18N
+		layout.append(convertSize(max));
+	}
 
-  /**
-   * Converts alignment from the layout model constants to <code>GroupLayout</code> constants.
-   *
-   * @param alignment
-   *          layout model alignment constant.
-   * @return <code>GroupLayout</code> alignment constant that corresponds to the given layout model
-   *         one.
-   */
-  private String convertAlignment(int alignment) {
-    String groupAlignment = null;
-    switch (alignment) {
-      case LayoutConstants.LEADING :
-        groupAlignment = "LEADING";
-        break; // NOI18N
-      case LayoutConstants.TRAILING :
-        groupAlignment = "TRAILING";
-        break; // NOI18N
-      case LayoutConstants.CENTER :
-        groupAlignment = "CENTER";
-        break; // NOI18N
-      case LayoutConstants.BASELINE :
-        groupAlignment = "BASELINE";
-        break; // NOI18N
-      default :
-        assert false;
-        break;
-    }
-    return useLayoutLibrary() ? getLayoutName() + "." + groupAlignment : // NOI18N
-        getLayoutName() + ".Alignment." + groupAlignment; // NOI18N
-  }
+	/**
+	 * Converts alignment from the layout model constants to <code>GroupLayout</code> constants.
+	 *
+	 * @param alignment
+	 *          layout model alignment constant.
+	 * @return <code>GroupLayout</code> alignment constant that corresponds to the given layout model
+	 *         one.
+	 */
+	private String convertAlignment(int alignment) {
+		String groupAlignment = null;
+		switch (alignment) {
+		case LayoutConstants.LEADING :
+			groupAlignment = "LEADING";
+			break; // NOI18N
+		case LayoutConstants.TRAILING :
+			groupAlignment = "TRAILING";
+			break; // NOI18N
+		case LayoutConstants.CENTER :
+			groupAlignment = "CENTER";
+			break; // NOI18N
+		case LayoutConstants.BASELINE :
+			groupAlignment = "BASELINE";
+			break; // NOI18N
+		default :
+			assert false;
+			break;
+		}
+		return useLayoutLibrary() ? getLayoutName() + "." + groupAlignment : // NOI18N
+			getLayoutName() + ".Alignment." + groupAlignment; // NOI18N
+	}
 
-  /**
-   * Converts minimum/preferred/maximums size from the layout model constants to
-   * <code>GroupLayout</code> constants.
-   *
-   * @param size
-   *          minimum/preferred/maximum size from layout model.
-   * @return minimum/preferred/maximum size or <code>GroupLayout</code> constant that corresponds to
-   *         the given layout model one.
-   */
-  private String convertSize(int size) {
-    String convertedSize;
-    switch (size) {
-      case LayoutConstants.NOT_EXPLICITLY_DEFINED :
-        convertedSize = getLayoutName() + ".DEFAULT_SIZE";
-        break; // NOI18N
-      case LayoutConstants.USE_PREFERRED_SIZE :
-        convertedSize = getLayoutName() + ".PREFERRED_SIZE";
-        break; // NOI18N
-      case Short.MAX_VALUE :
-        convertedSize = "Short.MAX_VALUE";
-        break; // NOI18N
-      default :
-        assert size >= 0;
-        convertedSize = Integer.toString(size);
-        break;
-    }
-    return convertedSize;
-  }
+	/**
+	 * Converts minimum/preferred/maximums size from the layout model constants to
+	 * <code>GroupLayout</code> constants.
+	 *
+	 * @param size
+	 *          minimum/preferred/maximum size from layout model.
+	 * @return minimum/preferred/maximum size or <code>GroupLayout</code> constant that corresponds to
+	 *         the given layout model one.
+	 */
+	private String convertSize(int size) {
+		String convertedSize;
+		switch (size) {
+		case LayoutConstants.NOT_EXPLICITLY_DEFINED :
+			convertedSize = getLayoutName() + ".DEFAULT_SIZE";
+			break; // NOI18N
+		case LayoutConstants.USE_PREFERRED_SIZE :
+			convertedSize = getLayoutName() + ".PREFERRED_SIZE";
+			break; // NOI18N
+		case Short.MAX_VALUE :
+			convertedSize = "Short.MAX_VALUE";
+			break; // NOI18N
+		default :
+			assert size >= 0;
+			convertedSize = Integer.toString(size);
+			break;
+		}
+		return convertedSize;
+	}
 
-  private void composeLinks(StringBuilder layout,
-      LayoutComponent containerLC,
-      String layoutVarName,
-      int dimension) throws IOException {
-    Map<Integer, List<String>> linkSizeGroups =
-        SwingLayoutUtils.createLinkSizeGroups(containerLC, dimension);
-    Collection<List<String>> linkGroups = linkSizeGroups.values();
-    Iterator<List<String>> linkGroupsIt = linkGroups.iterator();
-    while (linkGroupsIt.hasNext()) {
-      List<String> l = linkGroupsIt.next();
-      // sort so that the generated line is always the same when no changes were made
-      Collections.sort(l, new Comparator<String>() {
-        @Override
-        public int compare(String id1, String id2) {
-          ComponentInfo info1 = componentIDMap.get(id1);
-          ComponentInfo info2 = componentIDMap.get(id2);
-          return info1.variableName.compareTo(info2.variableName);
-        }
-      });
-      if (l.size() > 1) {
-        layout.append("\n\n" + layoutVarName + ".linkSize("); // NOI18N
-        if (!useLayoutLibrary()) {
-          layout.append("javax.swing.SwingConstants"); // NOI18N
-          layout.append(dimension == LayoutConstants.HORIZONTAL ? ".HORIZONTAL, " : ".VERTICAL, "); // NOI18N
-        }
-        layout.append("new java.awt.Component[] {"); //NOI18N
-        Iterator<String> i = l.iterator();
-        boolean first = true;
-        while (i.hasNext()) {
-          String cid = i.next();
-          ComponentInfo info = componentIDMap.get(cid);
-          if (first) {
-            first = false;
-            layout.append(info.variableName);
-          } else {
-            layout.append(", " + info.variableName); // NOI18N
-          }
-        }
-        layout.append("}"); // NOI18N
-        if (useLayoutLibrary()) {
-          layout.append(", "); // NOI18N
-          layout.append(getLayoutName());
-          layout.append(dimension == LayoutConstants.HORIZONTAL ? ".HORIZONTAL" : ".VERTICAL"); // NOI18N
-        }
-        layout.append(");\n\n"); // NOI18N
-      }
-    }
-  }
+	private void composeLinks(StringBuilder layout,
+			LayoutComponent containerLC,
+			String layoutVarName,
+			int dimension) throws IOException {
+		Map<Integer, List<String>> linkSizeGroups =
+				SwingLayoutUtils.createLinkSizeGroups(containerLC, dimension);
+		Collection<List<String>> linkGroups = linkSizeGroups.values();
+		Iterator<List<String>> linkGroupsIt = linkGroups.iterator();
+		while (linkGroupsIt.hasNext()) {
+			List<String> l = linkGroupsIt.next();
+			// sort so that the generated line is always the same when no changes were made
+			Collections.sort(l, new Comparator<String>() {
+				@Override
+				public int compare(String id1, String id2) {
+					ComponentInfo info1 = componentIDMap.get(id1);
+					ComponentInfo info2 = componentIDMap.get(id2);
+					return info1.variableName.compareTo(info2.variableName);
+				}
+			});
+			if (l.size() > 1) {
+				layout.append("\n\n" + layoutVarName + ".linkSize("); // NOI18N
+				if (!useLayoutLibrary()) {
+					layout.append("javax.swing.SwingConstants"); // NOI18N
+					layout.append(dimension == LayoutConstants.HORIZONTAL ? ".HORIZONTAL, " : ".VERTICAL, "); // NOI18N
+				}
+				layout.append("new java.awt.Component[] {"); //NOI18N
+				Iterator<String> i = l.iterator();
+				boolean first = true;
+				while (i.hasNext()) {
+					String cid = i.next();
+					ComponentInfo info = componentIDMap.get(cid);
+					if (first) {
+						first = false;
+						layout.append(info.variableName);
+					} else {
+						layout.append(", " + info.variableName); // NOI18N
+					}
+				}
+				layout.append("}"); // NOI18N
+				if (useLayoutLibrary()) {
+					layout.append(", "); // NOI18N
+					layout.append(getLayoutName());
+					layout.append(dimension == LayoutConstants.HORIZONTAL ? ".HORIZONTAL" : ".VERTICAL"); // NOI18N
+				}
+				layout.append(");\n\n"); // NOI18N
+			}
+		}
+	}
 
-  /**
-   * Information about one component.
-   */
-  public static class ComponentInfo {
-    /** ID of the component. */
-    public String id;
-    /** Variable name of the component. */
-    public String variableName;
-    /** The component's class. */
-    public Class clazz;
-    /** The component's minimum size. */
-    public Dimension minSize;
-    /**
-     * Determines whether size properties (e.g. minimumSize, preferredSize or maximumSize properties
-     * of the component has been changed).
-     */
-    public boolean sizingChanged;
-  }
+	/**
+	 * Information about one component.
+	 */
+	public static class ComponentInfo {
+		/** ID of the component. */
+		public String id;
+		/** Variable name of the component. */
+		public String variableName;
+		/** The component's class. */
+		public Class clazz;
+		/** The component's minimum size. */
+		public Dimension minSize;
+		/**
+		 * Determines whether size properties (e.g. minimumSize, preferredSize or maximumSize properties
+		 * of the component has been changed).
+		 */
+		public boolean sizingChanged;
+	}
 
-  // -----
-  // type of generated code: swing-layout library vs JDK
-  boolean useLayoutLibrary() {
-    return useLayoutLibrary;
-  }
+	// -----
+	// type of generated code: swing-layout library vs JDK
+	boolean useLayoutLibrary() {
+		return useLayoutLibrary;
+	}
 
-  private String getLayoutName() {
-    return useLayoutLibrary() ? "org.jdesktop.layout.GroupLayout" : "javax.swing.GroupLayout"; // NOI18N
-  }
+	private String getLayoutName() {
+		return useLayoutLibrary() ? "org.jdesktop.layout.GroupLayout" : "javax.swing.GroupLayout"; // NOI18N
+	}
 
-  private String getLayoutStyleName() {
-    return useLayoutLibrary() ? "org.jdesktop.layout.LayoutStyle" : "javax.swing.LayoutStyle"; // NOI18N
-  }
+	private String getLayoutStyleName() {
+		return useLayoutLibrary() ? "org.jdesktop.layout.LayoutStyle" : "javax.swing.LayoutStyle"; // NOI18N
+	}
 
-  private String getAddComponentStr() {
-    return useLayoutLibrary() ? ".add(" : ".addComponent("; // NOI18N
-  }
+	private String getAddComponentStr() {
+		return useLayoutLibrary() ? ".add(" : ".addComponent("; // NOI18N
+	}
 
-  private String getAddGapStr() {
-    return useLayoutLibrary() ? ".add(" : ".addGap("; // NOI18N
-  }
+	private String getAddGapStr() {
+		return useLayoutLibrary() ? ".add(" : ".addGap("; // NOI18N
+	}
 
-  private String getAddPreferredGapStr() {
-    return ".addPreferredGap("; // NOI18N
-  }
+	private String getAddPreferredGapStr() {
+		return ".addPreferredGap("; // NOI18N
+	}
 
-  private String getAddContainerGapStr() {
-    return ".addContainerGap("; // NOI18N
-  }
+	private String getAddContainerGapStr() {
+		return ".addContainerGap("; // NOI18N
+	}
 
-  private String getAddGroupStr() {
-    return useLayoutLibrary() ? ".add(" : ".addGroup("; // NOI18N
-  }
+	private String getAddGroupStr() {
+		return useLayoutLibrary() ? ".add(" : ".addGroup("; // NOI18N
+	}
 
-  private String getPaddingTypeStr(LayoutConstants.PaddingType paddingType) {
-    String str;
-    if (paddingType == null || paddingType == LayoutConstants.PaddingType.RELATED) {
-      str = ".RELATED"; // NOI18N
-    } else if (paddingType == LayoutConstants.PaddingType.UNRELATED) {
-      str = ".UNRELATED"; // NOI18N
-    } else if (paddingType == LayoutConstants.PaddingType.INDENT) {
-      str = ".INDENT"; // NOI18N
-    } else {
-      return null;
-    }
-    return getLayoutStyleName()
-        + (useLayoutLibrary ? "" : ".ComponentPlacement") // NOI18N
-        + str;
-  }
+	private String getPaddingTypeStr(LayoutConstants.PaddingType paddingType) {
+		String str;
+		if (paddingType == null || paddingType == LayoutConstants.PaddingType.RELATED) {
+			str = ".RELATED"; // NOI18N
+		} else if (paddingType == LayoutConstants.PaddingType.UNRELATED) {
+			str = ".UNRELATED"; // NOI18N
+		} else if (paddingType == LayoutConstants.PaddingType.INDENT) {
+			str = ".INDENT"; // NOI18N
+		} else {
+			return null;
+		}
+		return getLayoutStyleName()
+				+ (useLayoutLibrary ? "" : ".ComponentPlacement") // NOI18N
+				+ str;
+	}
 }
diff --git a/org.eclipse.wb.layout.group/netbeans-src/org/netbeans/modules/form/layoutdesign/support/SwingLayoutUtils.java b/org.eclipse.wb.layout.group/netbeans-src/org/netbeans/modules/form/layoutdesign/support/SwingLayoutUtils.java
index 7aea7c194..52124208d 100644
--- a/org.eclipse.wb.layout.group/netbeans-src/org/netbeans/modules/form/layoutdesign/support/SwingLayoutUtils.java
+++ b/org.eclipse.wb.layout.group/netbeans-src/org/netbeans/modules/form/layoutdesign/support/SwingLayoutUtils.java
@@ -46,96 +46,96 @@
  * @author Jan Stola
  */
 public class SwingLayoutUtils {
-  /** The default resizability of the component is not known. */
-  public static final int STATUS_UNKNOWN = -1;
-  /** The component is not resizable by default. */
-  public static final int STATUS_NON_RESIZABLE = 0;
-  /** The component is resizable by default. */
-  public static final int STATUS_RESIZABLE = 1;
-  /**
-   * Contains class names of non-resizable components e.g. components that are non-resizable unless
-   * one (or more) of minimumSize, preferredSize or maximumSize properties is changed.
-   */
-  private static Set<String> nonResizableComponents = new HashSet<String>();
-  static {
-    nonResizableComponents.addAll(
-        Arrays.asList(
-            new String[]{
-                "javax.swing.JLabel", // NOI18N
-                "javax.swing.JButton", // NOI18N
-                "javax.swing.JToggleButton", // NOI18N
-                "javax.swing.JCheckBox", // NOI18N
-                "javax.swing.JRadioButton", // NOI18N
-                "javax.swing.JList", // NOI18N
-            }));
-  }
-  /**
-   * Contains class names of resizable components e.g. components that are resizable unless one (or
-   * more) of minimumSize, preferredSize or maximumSize properties is changed.
-   */
-  private static Set<String> resizableComponents = new HashSet<String>();
-  static {
-    resizableComponents.addAll(
-        Arrays.asList(
-            new String[]{
-                "javax.swing.JComboBox", // NOI18N
-                "javax.swing.JTextField", // NOI18N
-                "javax.swing.JTextArea", // NOI18N
-                "javax.swing.JTabbedPane", // NOI18N
-                "javax.swing.JScrollPane", // NOI18N
-                "javax.swing.JSplitPane", // NOI18N
-                "javax.swing.JFormattedTextField", // NOI18N
-                "javax.swing.JPasswordField", // NOI18N
-                "javax.swing.JSpinner", // NOI18N
-                "javax.swing.JSeparator", // NOI18N
-                "javax.swing.JTextPane", // NOI18N
-                "javax.swing.JEditorPane", // NOI18N
-                "javax.swing.JInternalFrame", // NOI18N
-                "javax.swing.JLayeredPane", // NOI18N
-                "javax.swing.JDesktopPane" // NOI18N
-            }));
-  }
+	/** The default resizability of the component is not known. */
+	public static final int STATUS_UNKNOWN = -1;
+	/** The component is not resizable by default. */
+	public static final int STATUS_NON_RESIZABLE = 0;
+	/** The component is resizable by default. */
+	public static final int STATUS_RESIZABLE = 1;
+	/**
+	 * Contains class names of non-resizable components e.g. components that are non-resizable unless
+	 * one (or more) of minimumSize, preferredSize or maximumSize properties is changed.
+	 */
+	private static Set<String> nonResizableComponents = new HashSet<String>();
+	static {
+		nonResizableComponents.addAll(
+				Arrays.asList(
+						new String[]{
+								"javax.swing.JLabel", // NOI18N
+								"javax.swing.JButton", // NOI18N
+								"javax.swing.JToggleButton", // NOI18N
+								"javax.swing.JCheckBox", // NOI18N
+								"javax.swing.JRadioButton", // NOI18N
+								"javax.swing.JList", // NOI18N
+						}));
+	}
+	/**
+	 * Contains class names of resizable components e.g. components that are resizable unless one (or
+	 * more) of minimumSize, preferredSize or maximumSize properties is changed.
+	 */
+	private static Set<String> resizableComponents = new HashSet<String>();
+	static {
+		resizableComponents.addAll(
+				Arrays.asList(
+						new String[]{
+								"javax.swing.JComboBox", // NOI18N
+								"javax.swing.JTextField", // NOI18N
+								"javax.swing.JTextArea", // NOI18N
+								"javax.swing.JTabbedPane", // NOI18N
+								"javax.swing.JScrollPane", // NOI18N
+								"javax.swing.JSplitPane", // NOI18N
+								"javax.swing.JFormattedTextField", // NOI18N
+								"javax.swing.JPasswordField", // NOI18N
+								"javax.swing.JSpinner", // NOI18N
+								"javax.swing.JSeparator", // NOI18N
+								"javax.swing.JTextPane", // NOI18N
+								"javax.swing.JEditorPane", // NOI18N
+								"javax.swing.JInternalFrame", // NOI18N
+								"javax.swing.JLayeredPane", // NOI18N
+								"javax.swing.JDesktopPane" // NOI18N
+						}));
+	}
 
-  /**
-   * Determines whether the given class represents component that is resizable (by default) or not.
-   *
-   * @param componentClass
-   *          <code>Class</code> object corresponding to component we are interested in.
-   * @return <code>STATUS_RESIZABLE</code>, <code>STATUS_NON_RESIZABLE</code> or
-   *         <code>STATUS_UNKNOWN</code>.
-   */
-  public static int getResizableStatus(Class componentClass) {
-    String className = componentClass.getName();
-    if (resizableComponents.contains(className)) {
-      return STATUS_RESIZABLE;
-    }
-    if (nonResizableComponents.contains(className)) {
-      return STATUS_NON_RESIZABLE;
-    }
-    return STATUS_UNKNOWN;
-  }
+	/**
+	 * Determines whether the given class represents component that is resizable (by default) or not.
+	 *
+	 * @param componentClass
+	 *          <code>Class</code> object corresponding to component we are interested in.
+	 * @return <code>STATUS_RESIZABLE</code>, <code>STATUS_NON_RESIZABLE</code> or
+	 *         <code>STATUS_UNKNOWN</code>.
+	 */
+	public static int getResizableStatus(Class componentClass) {
+		String className = componentClass.getName();
+		if (resizableComponents.contains(className)) {
+			return STATUS_RESIZABLE;
+		}
+		if (nonResizableComponents.contains(className)) {
+			return STATUS_NON_RESIZABLE;
+		}
+		return STATUS_UNKNOWN;
+	}
 
-  public static Map<Integer, List<String>> createLinkSizeGroups(LayoutComponent layoutComponent,
-      int dimension) {
-    Map<Integer, List<String>> linkSizeGroup = new HashMap<Integer, List<String>>();
-    if (layoutComponent.isLayoutContainer()) {
-      for (LayoutComponent lc : layoutComponent.getSubcomponents()) {
-        if (lc != null) {
-          if (lc.isLinkSized(dimension)) {
-            String cid = lc.getId();
-            Integer id = Integer.valueOf(lc.getLinkSizeId(dimension));
-            List<String> l = linkSizeGroup.get(id);
-            if (l == null) {
-              l = new ArrayList<String>();
-              l.add(cid);
-              linkSizeGroup.put(id, l);
-            } else {
-              l.add(cid);
-            }
-          }
-        }
-      }
-    }
-    return linkSizeGroup;
-  }
+	public static Map<Integer, List<String>> createLinkSizeGroups(LayoutComponent layoutComponent,
+			int dimension) {
+		Map<Integer, List<String>> linkSizeGroup = new HashMap<Integer, List<String>>();
+		if (layoutComponent.isLayoutContainer()) {
+			for (LayoutComponent lc : layoutComponent.getSubcomponents()) {
+				if (lc != null) {
+					if (lc.isLinkSized(dimension)) {
+						String cid = lc.getId();
+						Integer id = Integer.valueOf(lc.getLinkSizeId(dimension));
+						List<String> l = linkSizeGroup.get(id);
+						if (l == null) {
+							l = new ArrayList<String>();
+							l.add(cid);
+							linkSizeGroup.put(id, l);
+						} else {
+							l.add(cid);
+						}
+					}
+				}
+			}
+		}
+		return linkSizeGroup;
+	}
 }
diff --git a/org.eclipse.wb.layout.group/src/org/eclipse/wb/internal/layout/group/Messages.java b/org.eclipse.wb.layout.group/src/org/eclipse/wb/internal/layout/group/Messages.java
index adf9c6f27..b4dd78cb1 100644
--- a/org.eclipse.wb.layout.group/src/org/eclipse/wb/internal/layout/group/Messages.java
+++ b/org.eclipse.wb.layout.group/src/org/eclipse/wb/internal/layout/group/Messages.java
@@ -3,39 +3,39 @@
 import org.eclipse.osgi.util.NLS;
 
 public class Messages extends NLS {
-  private static final String BUNDLE_NAME = "org.eclipse.wb.internal.layout.group.Messages"; //$NON-NLS-1$
-  public static String AlignmentsSupport_linkHeight;
-  public static String AlignmentsSupport_linkWidth;
-  public static String AnchorsSupport_anchorBottom;
-  public static String AnchorsSupport_anchoredBottom;
-  public static String AnchorsSupport_anchoredLeft;
-  public static String AnchorsSupport_anchoredRight;
-  public static String AnchorsSupport_anchoredTop;
-  public static String AnchorsSupport_anchorLeft;
-  public static String AnchorsSupport_anchorRight;
-  public static String AnchorsSupport_anchorsMenu;
-  public static String AnchorsSupport_anchorTop;
-  public static String AnchorsSupport_autoResizable;
-  public static String AnchorsSupport_autoResizeMenu;
-  public static String AnchorsSupport_resizableHorizontal;
-  public static String AnchorsSupport_resizableVertical;
-  public static String ConstraintsDialog_title;
-  public static String GroupLayoutAlignmentPage_alignmentGroup;
-  public static String GroupLayoutSpacesPage_componentGroup;
-  public static String GroupLayoutSpacesPage_defaultSpace;
-  public static String GroupLayoutSpacesPage_setDefaultSize;
-  public static String GroupLayoutSpacesPage_sizeGroup;
-  public static String GroupLayoutSpacesPage_sizeHeight;
-  public static String GroupLayoutSpacesPage_sizeWidth;
-  public static String GroupLayoutSpacesPage_spaceGroup;
-  public static String LayoutAssistantSupport_constraintsTabTitle;
-  public static String LayoutAssistantSupport_layoutTabTitle;
-  public static String MiscActions_setDefaultSize;
-  static {
-    // initialize resource bundle
-    NLS.initializeMessages(BUNDLE_NAME, Messages.class);
-  }
+	private static final String BUNDLE_NAME = "org.eclipse.wb.internal.layout.group.Messages"; //$NON-NLS-1$
+	public static String AlignmentsSupport_linkHeight;
+	public static String AlignmentsSupport_linkWidth;
+	public static String AnchorsSupport_anchorBottom;
+	public static String AnchorsSupport_anchoredBottom;
+	public static String AnchorsSupport_anchoredLeft;
+	public static String AnchorsSupport_anchoredRight;
+	public static String AnchorsSupport_anchoredTop;
+	public static String AnchorsSupport_anchorLeft;
+	public static String AnchorsSupport_anchorRight;
+	public static String AnchorsSupport_anchorsMenu;
+	public static String AnchorsSupport_anchorTop;
+	public static String AnchorsSupport_autoResizable;
+	public static String AnchorsSupport_autoResizeMenu;
+	public static String AnchorsSupport_resizableHorizontal;
+	public static String AnchorsSupport_resizableVertical;
+	public static String ConstraintsDialog_title;
+	public static String GroupLayoutAlignmentPage_alignmentGroup;
+	public static String GroupLayoutSpacesPage_componentGroup;
+	public static String GroupLayoutSpacesPage_defaultSpace;
+	public static String GroupLayoutSpacesPage_setDefaultSize;
+	public static String GroupLayoutSpacesPage_sizeGroup;
+	public static String GroupLayoutSpacesPage_sizeHeight;
+	public static String GroupLayoutSpacesPage_sizeWidth;
+	public static String GroupLayoutSpacesPage_spaceGroup;
+	public static String LayoutAssistantSupport_constraintsTabTitle;
+	public static String LayoutAssistantSupport_layoutTabTitle;
+	public static String MiscActions_setDefaultSize;
+	static {
+		// initialize resource bundle
+		NLS.initializeMessages(BUNDLE_NAME, Messages.class);
+	}
 
-  private Messages() {
-  }
+	private Messages() {
+	}
 }
diff --git a/org.eclipse.wb.layout.group/src/org/eclipse/wb/internal/layout/group/gef/FeedbacksDrawer.java b/org.eclipse.wb.layout.group/src/org/eclipse/wb/internal/layout/group/gef/FeedbacksDrawer.java
index 8c459db96..5de1de167 100644
--- a/org.eclipse.wb.layout.group/src/org/eclipse/wb/internal/layout/group/gef/FeedbacksDrawer.java
+++ b/org.eclipse.wb.layout.group/src/org/eclipse/wb/internal/layout/group/gef/FeedbacksDrawer.java
@@ -34,124 +34,124 @@
  * @author mitin_aa
  */
 final class FeedbacksDrawer implements IFeedbacksDrawer {
-  private final IFeedbacksHelper m_helper;
-  private final List<Figure> m_feedbacks = Lists.newArrayList();
-  private static final Image[] m_images = {null, null, null};
+	private final IFeedbacksHelper m_helper;
+	private final List<Figure> m_feedbacks = Lists.newArrayList();
+	private static final Image[] m_images = {null, null, null};
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FeedbacksDrawer(IFeedbacksHelper h) {
-    m_helper = h;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FeedbacksDrawer(IFeedbacksHelper h) {
+		m_helper = h;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IFeedbackDrawer
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void drawLine(int x1, int y1, int x2, int y2) {
-    Polyline line = createLineFeedback(x1, y1, x2, y2);
-    line.setForeground(AbsolutePolicyUtils.COLOR_FEEDBACK);
-    m_feedbacks.add(line);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IFeedbackDrawer
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void drawLine(int x1, int y1, int x2, int y2) {
+		Polyline line = createLineFeedback(x1, y1, x2, y2);
+		line.setForeground(AbsolutePolicyUtils.COLOR_FEEDBACK);
+		m_feedbacks.add(line);
+	}
 
-  @Override
-  public void fillArc(int x,
-      int y,
-      final int width,
-      final int height,
-      final int startAngle,
-      final int arcAngle) {
-    Figure figure = new Figure() {
-      @Override
-      protected void paintClientArea(Graphics graphics) {
-        graphics.setBackgroundColor(AbsolutePolicyUtils.COLOR_FEEDBACK);
-        graphics.gc.setAntialias(SWT.ON);
-        graphics.fillArc(1, 1, width - 1, height - 1, startAngle, arcAngle);
-      }
-    };
-    Point point = new Point(x, y);
-    m_helper.translateModelToFeedback(point);
-    figure.setBounds(new Rectangle(point.x, point.y, width, height));
-    m_helper.addFeedback2(figure);
-    m_feedbacks.add(figure);
-  }
+	@Override
+	public void fillArc(int x,
+			int y,
+			final int width,
+			final int height,
+			final int startAngle,
+			final int arcAngle) {
+		Figure figure = new Figure() {
+			@Override
+			protected void paintClientArea(Graphics graphics) {
+				graphics.setBackgroundColor(AbsolutePolicyUtils.COLOR_FEEDBACK);
+				graphics.gc.setAntialias(SWT.ON);
+				graphics.fillArc(1, 1, width - 1, height - 1, startAngle, arcAngle);
+			}
+		};
+		Point point = new Point(x, y);
+		m_helper.translateModelToFeedback(point);
+		figure.setBounds(new Rectangle(point.x, point.y, width, height));
+		m_helper.addFeedback2(figure);
+		m_feedbacks.add(figure);
+	}
 
-  @Override
-  public void drawLinkBadge(int x, int y, int dimension) {
-    final Image image = getImage(dimension);
-    Figure figure = new Figure() {
-      @Override
-      protected void paintClientArea(Graphics graphics) {
-        // draw image
-        if (image != null) {
-          graphics.drawImage(image, 0, 0);
-        }
-      }
-    };
-    org.eclipse.swt.graphics.Rectangle imageBounds = image.getBounds();
-    Rectangle bounds =
-        new Rectangle(x - imageBounds.width - 2,
-            y - imageBounds.height - 2,
-            imageBounds.width,
-            imageBounds.height);
-    m_helper.translateModelToFeedback(bounds);
-    figure.setBounds(bounds);
-    m_feedbacks.add(figure);
-    m_helper.addFeedback2(figure);
-  }
+	@Override
+	public void drawLinkBadge(int x, int y, int dimension) {
+		final Image image = getImage(dimension);
+		Figure figure = new Figure() {
+			@Override
+			protected void paintClientArea(Graphics graphics) {
+				// draw image
+				if (image != null) {
+					graphics.drawImage(image, 0, 0);
+				}
+			}
+		};
+		org.eclipse.swt.graphics.Rectangle imageBounds = image.getBounds();
+		Rectangle bounds =
+				new Rectangle(x - imageBounds.width - 2,
+						y - imageBounds.height - 2,
+						imageBounds.width,
+						imageBounds.height);
+		m_helper.translateModelToFeedback(bounds);
+		figure.setBounds(bounds);
+		m_feedbacks.add(figure);
+		m_helper.addFeedback2(figure);
+	}
 
-  private Image getImage(int dimension) {
-    if (m_images[dimension] == null) {
-      m_images[dimension] = loadImage("linked" + dimension + ".png");
-    }
-    return m_images[dimension];
-  }
+	private Image getImage(int dimension) {
+		if (m_images[dimension] == null) {
+			m_images[dimension] = loadImage("linked" + dimension + ".png");
+		}
+		return m_images[dimension];
+	}
 
-  private Image loadImage(String name) {
-    InputStream resourceAsStream = getClass().getResourceAsStream(name);
-    return new Image(null, resourceAsStream);
-  }
+	private Image loadImage(String name) {
+		InputStream resourceAsStream = getClass().getResourceAsStream(name);
+		return new Image(null, resourceAsStream);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Feedbacks drawing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Creates line figure, translates given model coordinates into feedback and adds created line
-   * into feedback layer
-   */
-  protected final Polyline createLineFeedback(int x1, int y1, int x2, int y2) {
-    // prepare points
-    Point begin = new Point(x1, y1);
-    Point end = new Point(x2, y2);
-    m_helper.translateModelToFeedback(begin);
-    m_helper.translateModelToFeedback(end);
-    // create feedback
-    Polyline line = new Polyline();
-    line.addPoint(begin);
-    line.addPoint(end);
-    line.setLineStyle(SWT.LINE_DOT);
-    m_helper.addFeedback2(line);
-    return line;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Feedbacks drawing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Creates line figure, translates given model coordinates into feedback and adds created line
+	 * into feedback layer
+	 */
+	protected final Polyline createLineFeedback(int x1, int y1, int x2, int y2) {
+		// prepare points
+		Point begin = new Point(x1, y1);
+		Point end = new Point(x2, y2);
+		m_helper.translateModelToFeedback(begin);
+		m_helper.translateModelToFeedback(end);
+		// create feedback
+		Polyline line = new Polyline();
+		line.addPoint(begin);
+		line.addPoint(end);
+		line.setLineStyle(SWT.LINE_DOT);
+		m_helper.addFeedback2(line);
+		return line;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void removeFeedbacks() {
-    for (Figure figure : m_feedbacks) {
-      if (figure != null) {
-        FigureUtils.removeFigure(figure);
-      }
-    }
-    m_feedbacks.clear();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void removeFeedbacks() {
+		for (Figure figure : m_feedbacks) {
+			if (figure != null) {
+				FigureUtils.removeFigure(figure);
+			}
+		}
+		m_feedbacks.clear();
+	}
 }
diff --git a/org.eclipse.wb.layout.group/src/org/eclipse/wb/internal/layout/group/gef/GroupLayoutEditPolicy2.java b/org.eclipse.wb.layout.group/src/org/eclipse/wb/internal/layout/group/gef/GroupLayoutEditPolicy2.java
index 266b0789c..8b9a8986c 100644
--- a/org.eclipse.wb.layout.group/src/org/eclipse/wb/internal/layout/group/gef/GroupLayoutEditPolicy2.java
+++ b/org.eclipse.wb.layout.group/src/org/eclipse/wb/internal/layout/group/gef/GroupLayoutEditPolicy2.java
@@ -489,11 +489,11 @@ protected void executeEdit() throws Exception {
 				@SuppressWarnings("unchecked")
 				List<AbstractComponentInfo> models = (List<AbstractComponentInfo>) CollectionUtils.collect(editParts,
 						new Transformer() {
-							@Override
-							public Object transform(Object input) {
-								return ((EditPart) input).getModel();
-							}
-						});
+					@Override
+					public Object transform(Object input) {
+						return ((EditPart) input).getModel();
+					}
+				});
 				m_layout.command_add(models);
 			}
 		};
diff --git a/org.eclipse.wb.layout.group/src/org/eclipse/wb/internal/layout/group/gef/GroupSelectionEditPolicy2.java b/org.eclipse.wb.layout.group/src/org/eclipse/wb/internal/layout/group/gef/GroupSelectionEditPolicy2.java
index d059f4f9d..96f3f5258 100644
--- a/org.eclipse.wb.layout.group/src/org/eclipse/wb/internal/layout/group/gef/GroupSelectionEditPolicy2.java
+++ b/org.eclipse.wb.layout.group/src/org/eclipse/wb/internal/layout/group/gef/GroupSelectionEditPolicy2.java
@@ -57,417 +57,417 @@
  * @author mitin_aa
  */
 public class GroupSelectionEditPolicy2 extends SelectionEditPolicy
-    implements
-      IFeedbacksHelper,
-      LayoutConstants {
-  // constants
-  public static final String REQ_RESIZE = "_grouplayout_resize";
-  private static final int MIN_LEFT_SPACE = 10;
-  private static final int INITIAL_RIGHT_SPACE = 10;
-  private static final int FIGURES_SPACE = 10;
-  // fields
-  private final IGroupLayoutInfo m_layout;
-  private final AnchorsSupport m_anchorsSupport;
-  private final FeedbacksDrawer m_feedbacksDrawer;
-  private List<Figure> m_alignmentFigures;
-  private boolean m_resizeInProgress;
-  private Figure m_dragFeedback;
-  private java.awt.Rectangle[] m_movingBounds;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public GroupSelectionEditPolicy2(IGroupLayoutInfo layoutModel) {
-    m_layout = layoutModel;
-    m_feedbacksDrawer = new FeedbacksDrawer(this);
-    m_anchorsSupport = new AnchorsSupport(m_layout);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Handles
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected List<Handle> createSelectionHandles() {
-    List<Handle> handles = Lists.newArrayList();
-    MoveHandle moveHandle = new MoveHandle(getHost());
-    handles.add(moveHandle);
-    handles.add(createResizeHandle(IPositionConstants.NORTH));
-    handles.add(createResizeHandle(IPositionConstants.SOUTH));
-    handles.add(createResizeHandle(IPositionConstants.WEST));
-    handles.add(createResizeHandle(IPositionConstants.EAST));
-    handles.add(createResizeHandle(IPositionConstants.SOUTH_EAST));
-    handles.add(createResizeHandle(IPositionConstants.SOUTH_WEST));
-    handles.add(createResizeHandle(IPositionConstants.NORTH_WEST));
-    handles.add(createResizeHandle(IPositionConstants.NORTH_EAST));
-    return handles;
-  }
-
-  /**
-   * @return the {@link ResizeHandle} for given direction.
-   */
-  private Handle createResizeHandle(int direction) {
-    ResizeHandle handle = new ResizeHandle(getHost(), direction);
-    handle.setDragTrackerTool(new ResizeTracker(direction, REQ_RESIZE));
-    return handle;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Selection
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void showSelection() {
-    super.showSelection();
-    String componentID = ObjectInfoUtils.getId((JavaInfo) getHostModel());
-    LayoutDesigner layoutDesigner = m_layout.getLayoutDesigner();
-    layoutDesigner.updateCurrentState();
-    layoutDesigner.paintSelection(m_feedbacksDrawer, componentID);
-    if (getHost().getSelected() == EditPart.SELECTED_PRIMARY) {
-      showAlignmentFigures();
-    }
-  }
-
-  @Override
-  protected void hideSelection() {
-    removeFeedbacks();
-    super.hideSelection();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Feedbacks
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void removeFeedbacks() {
-    m_feedbacksDrawer.removeFeedbacks();
-    if (m_dragFeedback != null) {
-      removeFeedback(m_dragFeedback);
-      m_dragFeedback = null;
-    }
-    hideAlignmentFigures();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IFeedbacksHelper
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void addFeedback2(Figure figure) {
-    addFeedback(figure);
-  }
-
-  @Override
-  public void translateModelToFeedback(Translatable t) {
-    PolicyUtils.translateModelToFeedback(this, t);
-    t.performTranslate(getClientAreaOffset());
-  }
-
-  private Point getClientAreaOffset() {
-    Insets insets = m_layout.getContainerInsets();
-    return new Point(insets.left, insets.top);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Routing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean understandsRequest(Request request) {
-    return super.understandsRequest(request) || request.getType() == REQ_RESIZE;
-  }
-
-  @Override
-  public void showSourceFeedback(Request request) {
-    showResizeFeedback((ChangeBoundsRequest) request);
-  }
-
-  @Override
-  public void eraseSourceFeedback(Request request) {
-    removeFeedbacks();
-    m_resizeInProgress = false;
-    m_movingBounds = null;
-  }
-
-  private void showResizeFeedback(ChangeBoundsRequest request) {
-    // resizing multiple parts not supported
-    if (request.getEditParts().size() > 1) {
-      return;
-    }
-    // hide feedbacks
-    m_feedbacksDrawer.removeFeedbacks();
-    hideAlignmentFigures();
-    // prepare
-    int direction = request.getResizeDirection();
-    Point location = request.getLocation().getCopy();
-    PolicyUtils.translateAbsoluteToModel(this, location);
-    LayoutDesigner layoutDesigner = m_layout.getLayoutDesigner();
-    AbstractComponentInfo hostModel = (AbstractComponentInfo) getHostModel();
-    if (!m_resizeInProgress) {
-      m_resizeInProgress = true;
-      String[] resizingComponents = new String[]{ObjectInfoUtils.getId(hostModel)};
-      m_movingBounds =
-          new java.awt.Rectangle[]{GroupLayoutUtils.getBoundsInLayout(m_layout, hostModel)};
-      int[] resizeEdges = setupResizeEdges(direction);
-      layoutDesigner.startResizing(
-          resizingComponents,
-          m_movingBounds,
-          new java.awt.Point(location.x, location.y),
-          resizeEdges,
-          true);
-      m_dragFeedback = new Figure();
-      m_dragFeedback.setBorder(new LineBorder(AbsolutePolicyUtils.COLOR_OUTLINE));
-      addFeedback(m_dragFeedback);
-    }
-    String id = ObjectInfoUtils.getId(m_layout.getLayoutContainer());
-    java.awt.Rectangle[] movedBounds = new java.awt.Rectangle[]{new java.awt.Rectangle()};
-    for (int i = 0; i < movedBounds.length; i++) {
-      movedBounds[i] = new java.awt.Rectangle();
-      movedBounds[i].width = m_movingBounds[i].width;
-      movedBounds[i].height = m_movingBounds[i].height;
-    }
-    layoutDesigner.move(
-        new java.awt.Point(location.x, location.y),
-        id,
-        !DesignerPlugin.isShiftPressed(),
-        false,
-        movedBounds);
-    layoutDesigner.paintMoveFeedback(m_feedbacksDrawer);
-    Rectangle newBounds = GroupLayoutUtils.get(movedBounds[0]);
-    translateModelToFeedback(newBounds);
-    m_dragFeedback.setBounds(newBounds);
-  }
-
-  private int[] setupResizeEdges(int direction) {
-    int[] resizeEdges = new int[2];
-    int horiz = direction & (IPositionConstants.EAST | IPositionConstants.WEST);
-    if (horiz == IPositionConstants.WEST) {
-      resizeEdges[HORIZONTAL] = LEADING;
-    } else if (horiz == IPositionConstants.EAST) {
-      resizeEdges[HORIZONTAL] = TRAILING;
-    } else {
-      resizeEdges[HORIZONTAL] = DEFAULT;
-    }
-    int vert = direction & (IPositionConstants.NORTH | IPositionConstants.SOUTH);
-    if (vert == IPositionConstants.NORTH) {
-      resizeEdges[VERTICAL] = LEADING;
-    } else if (vert == IPositionConstants.SOUTH) {
-      resizeEdges[VERTICAL] = TRAILING;
-    } else {
-      resizeEdges[VERTICAL] = DEFAULT;
-    }
-    return resizeEdges;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Command getCommand(Request request) {
-    if (REQ_RESIZE.equals(request.getType())) {
-      // resizing multiple components is not supported by Matisse
-      if (((ChangeBoundsRequest) request).getEditParts().size() > 1) {
-        return null;
-      }
-      return new EditCommand(m_layout.getAdapter(JavaInfo.class)) {
-        @Override
-        protected void executeEdit() throws Exception {
-          m_layout.command_commit();
-        }
-      };
-    }
-    return null;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Alignment figures
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the alignment figure for given component and axis.
-   */
-  protected Figure createAlignmentFigure(final AbstractComponentInfo widget,
-      final boolean isHorizontal) {
-    IEditPartViewer viewer = getHost().getViewer();
-    return isHorizontal
-        ? new HorizontalPopupFigure(viewer, widget)
-        : new VerticalPopupFigure(viewer, widget);
-  }
-
-  /**
-   * Shows alignment figures for host {@link EditPart} and its siblings.
-   */
-  public final void showAlignmentFigures() {
-    if (m_alignmentFigures == null) {
-      m_alignmentFigures = Lists.newArrayList();
-      // show cell figures for all children of host's parent
-      {
-        Collection<EditPart> editParts = getHost().getParent().getChildren();
-        for (EditPart editPart : editParts) {
-          showAlignmentFigures(editPart);
-        }
-      }
-    }
-  }
-
-  /**
-   * Hides alignment figures for this host and its siblings.
-   */
-  public final void hideAlignmentFigures() {
-    if (m_alignmentFigures != null) {
-      for (Figure figure : m_alignmentFigures) {
-        figure.getParent().remove(figure);
-      }
-      m_alignmentFigures = null;
-    }
-  }
-
-  /**
-   * Shows all possible alignment figures for given edit part.
-   */
-  private void showAlignmentFigures(EditPart editPart) {
-    // check model
-    AbstractComponentInfo widget;
-    {
-      Object model = editPart.getModel();
-      if (!(model instanceof AbstractComponentInfo)) {
-        return;
-      }
-      widget = (AbstractComponentInfo) model;
-    }
-    // check if we can show alignment figures for this control
-    {
-      String showFiguresString = null;
-      if (!LayoutPolicyUtils.shouldShowSideFigures(showFiguresString, editPart)) {
-        return;
-      }
-    }
-    // show alignment figures
-    {
-      int offset = INITIAL_RIGHT_SPACE;
-      {
-        Figure horizontalFigure = createAlignmentFigure(widget, true);
-        if (horizontalFigure != null) {
-          offset += horizontalFigure.getSize().width;
-          addAlignmentFigure(widget, horizontalFigure, offset);
-          offset += FIGURES_SPACE;
-        }
-      }
-      {
-        Figure verticalFigure = createAlignmentFigure(widget, false);
-        if (verticalFigure != null) {
-          offset += verticalFigure.getSize().width;
-          addAlignmentFigure(widget, verticalFigure, offset);
-          offset += FIGURES_SPACE;
-        }
-      }
-    }
-  }
-
-  /**
-   * Adds alignment figure at given offset from right side of component's cells.
-   */
-  private void addAlignmentFigure(AbstractComponentInfo component, Figure figure, int offset) {
-    Figure layer = getLayer(IEditPartViewer.CLICKABLE_LAYER);
-    // prepare rectangle for cells used by component (in layer coordinates)
-    Rectangle cellRect;
-    {
-      cellRect = component.getModelBounds().getCopy();
-      PolicyUtils.translateModelToFeedback(this, cellRect);
-    }
-    // prepare location and size
-    Point figureLocation;
-    {
-      Dimension figureSize = figure.getSize();
-      figureLocation = new Point(cellRect.right() - offset, cellRect.y - figureSize.height / 2);
-      if (figureLocation.x < cellRect.x + MIN_LEFT_SPACE) {
-        return;
-      }
-    }
-    // add alignment figure
-    layer.add(figure);
-    figure.setLocation(figureLocation);
-    m_alignmentFigures.add(figure);
-  } ////////////////////////////////////////////////////////////////////////////
-
-  //
-  // Popup figures
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private class HorizontalPopupFigure extends AbstractPopupFigure {
-    private final AbstractComponentInfo m_component;
-
-    protected HorizontalPopupFigure(IEditPartViewer viewer, AbstractComponentInfo component) {
-      super(viewer, 9, 5);
-      m_component = component;
-    }
-
-    @Override
-    protected Image getImage() {
-      int anchors = m_anchorsSupport.getCurrentAnchors(m_component, true);
-      IImageProvider imageProvider = getImageProvider();
-      switch (anchors) {
-        case AnchorsSupport.RESIZABLE :
-          return imageProvider.getImage("info/layout/groupLayout/h/both.gif");
-        case LEADING :
-          return imageProvider.getImage("info/layout/groupLayout/h/left.gif");
-        case TRAILING :
-          return imageProvider.getImage("info/layout/groupLayout/h/right.gif");
-        default :
-          return imageProvider.getImage("info/layout/groupLayout/h/default.gif");
-      }
-    }
-
-    @Override
-    protected void fillMenu(IMenuManager manager) {
-      m_anchorsSupport.fillContributionManager(m_component, manager, true);
-    }
-  }
-  private class VerticalPopupFigure extends AbstractPopupFigure {
-    private final AbstractComponentInfo m_component;
-
-    protected VerticalPopupFigure(IEditPartViewer viewer, AbstractComponentInfo component) {
-      super(viewer, 5, 9);
-      m_component = component;
-    }
-
-    @Override
-    protected Image getImage() {
-      int anchors = m_anchorsSupport.getCurrentAnchors(m_component, false);
-      IImageProvider imageProvider = getImageProvider();
-      switch (anchors) {
-        case AnchorsSupport.RESIZABLE :
-          return imageProvider.getImage("info/layout/groupLayout/v/both.gif");
-        case LEADING :
-          return imageProvider.getImage("info/layout/groupLayout/v/top.gif");
-        case TRAILING :
-          return imageProvider.getImage("info/layout/groupLayout/v/bottom.gif");
-        default :
-          return imageProvider.getImage("info/layout/groupLayout/v/default.gif");
-      }
-    }
-
-    @Override
-    protected void fillMenu(IMenuManager manager) {
-      m_anchorsSupport.fillContributionManager(m_component, manager, false);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Misc
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private IImageProvider getImageProvider() {
-    return m_layout.getAdapter(IImageProvider.class);
-  }
+implements
+IFeedbacksHelper,
+LayoutConstants {
+	// constants
+	public static final String REQ_RESIZE = "_grouplayout_resize";
+	private static final int MIN_LEFT_SPACE = 10;
+	private static final int INITIAL_RIGHT_SPACE = 10;
+	private static final int FIGURES_SPACE = 10;
+	// fields
+	private final IGroupLayoutInfo m_layout;
+	private final AnchorsSupport m_anchorsSupport;
+	private final FeedbacksDrawer m_feedbacksDrawer;
+	private List<Figure> m_alignmentFigures;
+	private boolean m_resizeInProgress;
+	private Figure m_dragFeedback;
+	private java.awt.Rectangle[] m_movingBounds;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public GroupSelectionEditPolicy2(IGroupLayoutInfo layoutModel) {
+		m_layout = layoutModel;
+		m_feedbacksDrawer = new FeedbacksDrawer(this);
+		m_anchorsSupport = new AnchorsSupport(m_layout);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Handles
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected List<Handle> createSelectionHandles() {
+		List<Handle> handles = Lists.newArrayList();
+		MoveHandle moveHandle = new MoveHandle(getHost());
+		handles.add(moveHandle);
+		handles.add(createResizeHandle(IPositionConstants.NORTH));
+		handles.add(createResizeHandle(IPositionConstants.SOUTH));
+		handles.add(createResizeHandle(IPositionConstants.WEST));
+		handles.add(createResizeHandle(IPositionConstants.EAST));
+		handles.add(createResizeHandle(IPositionConstants.SOUTH_EAST));
+		handles.add(createResizeHandle(IPositionConstants.SOUTH_WEST));
+		handles.add(createResizeHandle(IPositionConstants.NORTH_WEST));
+		handles.add(createResizeHandle(IPositionConstants.NORTH_EAST));
+		return handles;
+	}
+
+	/**
+	 * @return the {@link ResizeHandle} for given direction.
+	 */
+	private Handle createResizeHandle(int direction) {
+		ResizeHandle handle = new ResizeHandle(getHost(), direction);
+		handle.setDragTrackerTool(new ResizeTracker(direction, REQ_RESIZE));
+		return handle;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Selection
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void showSelection() {
+		super.showSelection();
+		String componentID = ObjectInfoUtils.getId((JavaInfo) getHostModel());
+		LayoutDesigner layoutDesigner = m_layout.getLayoutDesigner();
+		layoutDesigner.updateCurrentState();
+		layoutDesigner.paintSelection(m_feedbacksDrawer, componentID);
+		if (getHost().getSelected() == EditPart.SELECTED_PRIMARY) {
+			showAlignmentFigures();
+		}
+	}
+
+	@Override
+	protected void hideSelection() {
+		removeFeedbacks();
+		super.hideSelection();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Feedbacks
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void removeFeedbacks() {
+		m_feedbacksDrawer.removeFeedbacks();
+		if (m_dragFeedback != null) {
+			removeFeedback(m_dragFeedback);
+			m_dragFeedback = null;
+		}
+		hideAlignmentFigures();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IFeedbacksHelper
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void addFeedback2(Figure figure) {
+		addFeedback(figure);
+	}
+
+	@Override
+	public void translateModelToFeedback(Translatable t) {
+		PolicyUtils.translateModelToFeedback(this, t);
+		t.performTranslate(getClientAreaOffset());
+	}
+
+	private Point getClientAreaOffset() {
+		Insets insets = m_layout.getContainerInsets();
+		return new Point(insets.left, insets.top);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Routing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean understandsRequest(Request request) {
+		return super.understandsRequest(request) || request.getType() == REQ_RESIZE;
+	}
+
+	@Override
+	public void showSourceFeedback(Request request) {
+		showResizeFeedback((ChangeBoundsRequest) request);
+	}
+
+	@Override
+	public void eraseSourceFeedback(Request request) {
+		removeFeedbacks();
+		m_resizeInProgress = false;
+		m_movingBounds = null;
+	}
+
+	private void showResizeFeedback(ChangeBoundsRequest request) {
+		// resizing multiple parts not supported
+		if (request.getEditParts().size() > 1) {
+			return;
+		}
+		// hide feedbacks
+		m_feedbacksDrawer.removeFeedbacks();
+		hideAlignmentFigures();
+		// prepare
+		int direction = request.getResizeDirection();
+		Point location = request.getLocation().getCopy();
+		PolicyUtils.translateAbsoluteToModel(this, location);
+		LayoutDesigner layoutDesigner = m_layout.getLayoutDesigner();
+		AbstractComponentInfo hostModel = (AbstractComponentInfo) getHostModel();
+		if (!m_resizeInProgress) {
+			m_resizeInProgress = true;
+			String[] resizingComponents = new String[]{ObjectInfoUtils.getId(hostModel)};
+			m_movingBounds =
+					new java.awt.Rectangle[]{GroupLayoutUtils.getBoundsInLayout(m_layout, hostModel)};
+			int[] resizeEdges = setupResizeEdges(direction);
+			layoutDesigner.startResizing(
+					resizingComponents,
+					m_movingBounds,
+					new java.awt.Point(location.x, location.y),
+					resizeEdges,
+					true);
+			m_dragFeedback = new Figure();
+			m_dragFeedback.setBorder(new LineBorder(AbsolutePolicyUtils.COLOR_OUTLINE));
+			addFeedback(m_dragFeedback);
+		}
+		String id = ObjectInfoUtils.getId(m_layout.getLayoutContainer());
+		java.awt.Rectangle[] movedBounds = new java.awt.Rectangle[]{new java.awt.Rectangle()};
+		for (int i = 0; i < movedBounds.length; i++) {
+			movedBounds[i] = new java.awt.Rectangle();
+			movedBounds[i].width = m_movingBounds[i].width;
+			movedBounds[i].height = m_movingBounds[i].height;
+		}
+		layoutDesigner.move(
+				new java.awt.Point(location.x, location.y),
+				id,
+				!DesignerPlugin.isShiftPressed(),
+				false,
+				movedBounds);
+		layoutDesigner.paintMoveFeedback(m_feedbacksDrawer);
+		Rectangle newBounds = GroupLayoutUtils.get(movedBounds[0]);
+		translateModelToFeedback(newBounds);
+		m_dragFeedback.setBounds(newBounds);
+	}
+
+	private int[] setupResizeEdges(int direction) {
+		int[] resizeEdges = new int[2];
+		int horiz = direction & (IPositionConstants.EAST | IPositionConstants.WEST);
+		if (horiz == IPositionConstants.WEST) {
+			resizeEdges[HORIZONTAL] = LEADING;
+		} else if (horiz == IPositionConstants.EAST) {
+			resizeEdges[HORIZONTAL] = TRAILING;
+		} else {
+			resizeEdges[HORIZONTAL] = DEFAULT;
+		}
+		int vert = direction & (IPositionConstants.NORTH | IPositionConstants.SOUTH);
+		if (vert == IPositionConstants.NORTH) {
+			resizeEdges[VERTICAL] = LEADING;
+		} else if (vert == IPositionConstants.SOUTH) {
+			resizeEdges[VERTICAL] = TRAILING;
+		} else {
+			resizeEdges[VERTICAL] = DEFAULT;
+		}
+		return resizeEdges;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Command getCommand(Request request) {
+		if (REQ_RESIZE.equals(request.getType())) {
+			// resizing multiple components is not supported by Matisse
+			if (((ChangeBoundsRequest) request).getEditParts().size() > 1) {
+				return null;
+			}
+			return new EditCommand(m_layout.getAdapter(JavaInfo.class)) {
+				@Override
+				protected void executeEdit() throws Exception {
+					m_layout.command_commit();
+				}
+			};
+		}
+		return null;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Alignment figures
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the alignment figure for given component and axis.
+	 */
+	protected Figure createAlignmentFigure(final AbstractComponentInfo widget,
+			final boolean isHorizontal) {
+		IEditPartViewer viewer = getHost().getViewer();
+		return isHorizontal
+				? new HorizontalPopupFigure(viewer, widget)
+						: new VerticalPopupFigure(viewer, widget);
+	}
+
+	/**
+	 * Shows alignment figures for host {@link EditPart} and its siblings.
+	 */
+	public final void showAlignmentFigures() {
+		if (m_alignmentFigures == null) {
+			m_alignmentFigures = Lists.newArrayList();
+			// show cell figures for all children of host's parent
+			{
+				Collection<EditPart> editParts = getHost().getParent().getChildren();
+				for (EditPart editPart : editParts) {
+					showAlignmentFigures(editPart);
+				}
+			}
+		}
+	}
+
+	/**
+	 * Hides alignment figures for this host and its siblings.
+	 */
+	public final void hideAlignmentFigures() {
+		if (m_alignmentFigures != null) {
+			for (Figure figure : m_alignmentFigures) {
+				figure.getParent().remove(figure);
+			}
+			m_alignmentFigures = null;
+		}
+	}
+
+	/**
+	 * Shows all possible alignment figures for given edit part.
+	 */
+	private void showAlignmentFigures(EditPart editPart) {
+		// check model
+		AbstractComponentInfo widget;
+		{
+			Object model = editPart.getModel();
+			if (!(model instanceof AbstractComponentInfo)) {
+				return;
+			}
+			widget = (AbstractComponentInfo) model;
+		}
+		// check if we can show alignment figures for this control
+		{
+			String showFiguresString = null;
+			if (!LayoutPolicyUtils.shouldShowSideFigures(showFiguresString, editPart)) {
+				return;
+			}
+		}
+		// show alignment figures
+		{
+			int offset = INITIAL_RIGHT_SPACE;
+			{
+				Figure horizontalFigure = createAlignmentFigure(widget, true);
+				if (horizontalFigure != null) {
+					offset += horizontalFigure.getSize().width;
+					addAlignmentFigure(widget, horizontalFigure, offset);
+					offset += FIGURES_SPACE;
+				}
+			}
+			{
+				Figure verticalFigure = createAlignmentFigure(widget, false);
+				if (verticalFigure != null) {
+					offset += verticalFigure.getSize().width;
+					addAlignmentFigure(widget, verticalFigure, offset);
+					offset += FIGURES_SPACE;
+				}
+			}
+		}
+	}
+
+	/**
+	 * Adds alignment figure at given offset from right side of component's cells.
+	 */
+	private void addAlignmentFigure(AbstractComponentInfo component, Figure figure, int offset) {
+		Figure layer = getLayer(IEditPartViewer.CLICKABLE_LAYER);
+		// prepare rectangle for cells used by component (in layer coordinates)
+		Rectangle cellRect;
+		{
+			cellRect = component.getModelBounds().getCopy();
+			PolicyUtils.translateModelToFeedback(this, cellRect);
+		}
+		// prepare location and size
+		Point figureLocation;
+		{
+			Dimension figureSize = figure.getSize();
+			figureLocation = new Point(cellRect.right() - offset, cellRect.y - figureSize.height / 2);
+			if (figureLocation.x < cellRect.x + MIN_LEFT_SPACE) {
+				return;
+			}
+		}
+		// add alignment figure
+		layer.add(figure);
+		figure.setLocation(figureLocation);
+		m_alignmentFigures.add(figure);
+	} ////////////////////////////////////////////////////////////////////////////
+
+	//
+	// Popup figures
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private class HorizontalPopupFigure extends AbstractPopupFigure {
+		private final AbstractComponentInfo m_component;
+
+		protected HorizontalPopupFigure(IEditPartViewer viewer, AbstractComponentInfo component) {
+			super(viewer, 9, 5);
+			m_component = component;
+		}
+
+		@Override
+		protected Image getImage() {
+			int anchors = m_anchorsSupport.getCurrentAnchors(m_component, true);
+			IImageProvider imageProvider = getImageProvider();
+			switch (anchors) {
+			case AnchorsSupport.RESIZABLE :
+				return imageProvider.getImage("info/layout/groupLayout/h/both.gif");
+			case LEADING :
+				return imageProvider.getImage("info/layout/groupLayout/h/left.gif");
+			case TRAILING :
+				return imageProvider.getImage("info/layout/groupLayout/h/right.gif");
+			default :
+				return imageProvider.getImage("info/layout/groupLayout/h/default.gif");
+			}
+		}
+
+		@Override
+		protected void fillMenu(IMenuManager manager) {
+			m_anchorsSupport.fillContributionManager(m_component, manager, true);
+		}
+	}
+	private class VerticalPopupFigure extends AbstractPopupFigure {
+		private final AbstractComponentInfo m_component;
+
+		protected VerticalPopupFigure(IEditPartViewer viewer, AbstractComponentInfo component) {
+			super(viewer, 5, 9);
+			m_component = component;
+		}
+
+		@Override
+		protected Image getImage() {
+			int anchors = m_anchorsSupport.getCurrentAnchors(m_component, false);
+			IImageProvider imageProvider = getImageProvider();
+			switch (anchors) {
+			case AnchorsSupport.RESIZABLE :
+				return imageProvider.getImage("info/layout/groupLayout/v/both.gif");
+			case LEADING :
+				return imageProvider.getImage("info/layout/groupLayout/v/top.gif");
+			case TRAILING :
+				return imageProvider.getImage("info/layout/groupLayout/v/bottom.gif");
+			default :
+				return imageProvider.getImage("info/layout/groupLayout/v/default.gif");
+			}
+		}
+
+		@Override
+		protected void fillMenu(IMenuManager manager) {
+			m_anchorsSupport.fillContributionManager(m_component, manager, false);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Misc
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private IImageProvider getImageProvider() {
+		return m_layout.getAdapter(IImageProvider.class);
+	}
 }
diff --git a/org.eclipse.wb.layout.group/src/org/eclipse/wb/internal/layout/group/gef/IFeedbacksHelper.java b/org.eclipse.wb.layout.group/src/org/eclipse/wb/internal/layout/group/gef/IFeedbacksHelper.java
index 15af7bc16..007d5f392 100644
--- a/org.eclipse.wb.layout.group/src/org/eclipse/wb/internal/layout/group/gef/IFeedbacksHelper.java
+++ b/org.eclipse.wb.layout.group/src/org/eclipse/wb/internal/layout/group/gef/IFeedbacksHelper.java
@@ -20,13 +20,13 @@
  * @author mitin_aa
  */
 public interface IFeedbacksHelper {
-  /**
-   * Translates the {@link Translatable} from model to feedback coordinate systems.
-   */
-  void translateModelToFeedback(Translatable t);
+	/**
+	 * Translates the {@link Translatable} from model to feedback coordinate systems.
+	 */
+	void translateModelToFeedback(Translatable t);
 
-  /**
-   * Adds a figure to appropriate layer.
-   */
-  void addFeedback2(Figure figure);
+	/**
+	 * Adds a figure to appropriate layer.
+	 */
+	void addFeedback2(Figure figure);
 }
diff --git a/org.eclipse.wb.layout.group/src/org/eclipse/wb/internal/layout/group/model/AlignmentsSupport.java b/org.eclipse.wb.layout.group/src/org/eclipse/wb/internal/layout/group/model/AlignmentsSupport.java
index c67c244f5..4648f7be4 100644
--- a/org.eclipse.wb.layout.group/src/org/eclipse/wb/internal/layout/group/model/AlignmentsSupport.java
+++ b/org.eclipse.wb.layout.group/src/org/eclipse/wb/internal/layout/group/model/AlignmentsSupport.java
@@ -27,232 +27,232 @@
 import java.util.List;
 
 public final class AlignmentsSupport<C extends IAbstractComponentInfo>
-    extends
-      AbstractAlignmentActionsSupport<C> implements LayoutConstants {
-  private final IGroupLayoutInfo m_layout;
+extends
+AbstractAlignmentActionsSupport<C> implements LayoutConstants {
+	private final IGroupLayoutInfo m_layout;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AlignmentsSupport(IGroupLayoutInfo layout) {
-    m_layout = layout;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AlignmentsSupport(IGroupLayoutInfo layout) {
+		m_layout = layout;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Fill
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Fill actions list.
-   */
-  @Override
-  protected void fillActions(List<Object> actions) {
-    addAlignmentActions(actions);
-    addSizeActions(actions);
-    addCenterInContainerActions(actions);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Fill
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Fill actions list.
+	 */
+	@Override
+	protected void fillActions(List<Object> actions) {
+		addAlignmentActions(actions);
+		addSizeActions(actions);
+		addCenterInContainerActions(actions);
+	}
 
-  @Override
-  protected void addSizeActions(List<Object> actions) {
-    // create size actions
-    actions.add(new Separator());
-    actions.add(new SelectionAction("width", Messages.AlignmentsSupport_linkWidth, ALIGN_WIDTH));
-    actions.add(new SelectionAction("height", Messages.AlignmentsSupport_linkHeight, ALIGN_HEIGHT));
-  }
+	@Override
+	protected void addSizeActions(List<Object> actions) {
+		// create size actions
+		actions.add(new Separator());
+		actions.add(new SelectionAction("width", Messages.AlignmentsSupport_linkWidth, ALIGN_WIDTH));
+		actions.add(new SelectionAction("height", Messages.AlignmentsSupport_linkHeight, ALIGN_HEIGHT));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Actions
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void commandAlignLeft() throws Exception {
-    action_alignEdge(m_components, HORIZONTAL, LEADING);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Actions
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void commandAlignLeft() throws Exception {
+		action_alignEdge(m_components, HORIZONTAL, LEADING);
+	}
 
-  @Override
-  protected void commandAlignRight() throws Exception {
-    action_alignEdge(m_components, HORIZONTAL, TRAILING);
-  }
+	@Override
+	protected void commandAlignRight() throws Exception {
+		action_alignEdge(m_components, HORIZONTAL, TRAILING);
+	}
 
-  @Override
-  protected void commandAlignTop() throws Exception {
-    action_alignEdge(m_components, VERTICAL, LEADING);
-  }
+	@Override
+	protected void commandAlignTop() throws Exception {
+		action_alignEdge(m_components, VERTICAL, LEADING);
+	}
 
-  @Override
-  protected void commandAlignBottom() throws Exception {
-    action_alignEdge(m_components, VERTICAL, TRAILING);
-  }
+	@Override
+	protected void commandAlignBottom() throws Exception {
+		action_alignEdge(m_components, VERTICAL, TRAILING);
+	}
 
-  @Override
-  protected void commandAlignCenterHorizontally() throws Exception {
-    action_alignCenter(m_components, true);
-  }
+	@Override
+	protected void commandAlignCenterHorizontally() throws Exception {
+		action_alignCenter(m_components, true);
+	}
 
-  @Override
-  protected void commandAlignCenterVertically() throws Exception {
-    action_alignCenter(m_components, false);
-  }
+	@Override
+	protected void commandAlignCenterVertically() throws Exception {
+		action_alignCenter(m_components, false);
+	}
 
-  @Override
-  protected void commandCenterHorizontally() throws Exception {
-    action_centerInParent(m_components, true);
-  }
+	@Override
+	protected void commandCenterHorizontally() throws Exception {
+		action_centerInParent(m_components, true);
+	}
 
-  @Override
-  protected void commandCenterVertically() throws Exception {
-    action_centerInParent(m_components, false);
-  }
+	@Override
+	protected void commandCenterVertically() throws Exception {
+		action_centerInParent(m_components, false);
+	}
 
-  @Override
-  protected void commandReplicateWidth() throws Exception {
-    action_toggleSameSize(m_components, true);
-  }
+	@Override
+	protected void commandReplicateWidth() throws Exception {
+		action_toggleSameSize(m_components, true);
+	}
 
-  @Override
-  protected void commandReplicateHeight() throws Exception {
-    action_toggleSameSize(m_components, false);
-  }
+	@Override
+	protected void commandReplicateHeight() throws Exception {
+		action_toggleSameSize(m_components, false);
+	}
 
-  @Override
-  protected void commandDistributeSpaceHorizontally() throws Exception {
-  }
+	@Override
+	protected void commandDistributeSpaceHorizontally() throws Exception {
+	}
 
-  @Override
-  protected void commandDistributeSpaceVertically() throws Exception {
-  }
+	@Override
+	protected void commandDistributeSpaceVertically() throws Exception {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Misc/Helpers
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected final IAbstractComponentInfo getLayoutContainer() {
-    return m_layout.getLayoutContainer();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Misc/Helpers
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected final IAbstractComponentInfo getLayoutContainer() {
+		return m_layout.getLayoutContainer();
+	}
 
-  @Override
-  protected boolean isComponentInfo(ObjectInfo object) {
-    return m_layout.isRelatedComponent(object);
-  }
+	@Override
+	protected boolean isComponentInfo(ObjectInfo object) {
+		return m_layout.isRelatedComponent(object);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Alignment
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void action_alignEdge(List<C> components, int dimension, int edge) throws Exception {
-    LayoutDesigner layoutDesigner = m_layout.getLayoutDesigner();
-    layoutDesigner.align(GroupLayoutUtils.getIdsList(components), true, dimension, edge);
-    layoutDesigner.updateCurrentState();
-    m_layout.saveLayout();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Alignment
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void action_alignEdge(List<C> components, int dimension, int edge) throws Exception {
+		LayoutDesigner layoutDesigner = m_layout.getLayoutDesigner();
+		layoutDesigner.align(GroupLayoutUtils.getIdsList(components), true, dimension, edge);
+		layoutDesigner.updateCurrentState();
+		m_layout.saveLayout();
+	}
 
-  public void action_alignCenter(List<C> components, boolean isHorizontal) throws Exception {
-    LayoutDesigner layoutDesigner = m_layout.getLayoutDesigner();
-    final String id = ObjectInfoUtils.getId(getLayoutContainer().getUnderlyingModel());
-    final java.awt.Rectangle[] movingBounds = new java.awt.Rectangle[components.size()];
-    int i = 0;
-    for (IAbstractComponentInfo component : components) {
-      movingBounds[i++] = GroupLayoutUtils.getBoundsInLayout(m_layout, component);
-    }
-    org.eclipse.draw2d.geometry.Rectangle unionBounds =
-        GroupLayoutUtils.getRectangleUnion(movingBounds);
-    int middlePointInArea =
-        isHorizontal ? unionBounds.x + unionBounds.width / 2 : unionBounds.y
-            + unionBounds.height
-            / 2;
-    i = 0;
-    for (IAbstractComponentInfo component : components) {
-      java.awt.Rectangle componentBounds = movingBounds[i];
-      String[] movindIds = new String[]{ObjectInfoUtils.getId(component.getUnderlyingModel())};
-      java.awt.Rectangle[] movedBounds =
-          new java.awt.Rectangle[]{new java.awt.Rectangle(0,
-              0,
-              componentBounds.width,
-              componentBounds.height)};
-      layoutDesigner.startMoving(
-          movindIds,
-          new java.awt.Rectangle[]{componentBounds},
-          new java.awt.Point(0, 0));
-      int middlePoint =
-          isHorizontal ? componentBounds.width / 2 + componentBounds.x : componentBounds.height
-              / 2
-              + componentBounds.y;
-      int moveDelta = middlePointInArea - middlePoint;
-      if (moveDelta != 0) {
-        java.awt.Point moveDeltaPoint =
-            isHorizontal ? new java.awt.Point(moveDelta, 0) : new java.awt.Point(0, moveDelta);
-        layoutDesigner.move(moveDeltaPoint, id, false, false, movedBounds);
-        layoutDesigner.endMoving(true);
-        layoutDesigner.updateCurrentState();
-      } else {
-        layoutDesigner.endMoving(false);
-      }
-      i++;
-    }
-    m_layout.saveLayout();
-  }
+	public void action_alignCenter(List<C> components, boolean isHorizontal) throws Exception {
+		LayoutDesigner layoutDesigner = m_layout.getLayoutDesigner();
+		final String id = ObjectInfoUtils.getId(getLayoutContainer().getUnderlyingModel());
+		final java.awt.Rectangle[] movingBounds = new java.awt.Rectangle[components.size()];
+		int i = 0;
+		for (IAbstractComponentInfo component : components) {
+			movingBounds[i++] = GroupLayoutUtils.getBoundsInLayout(m_layout, component);
+		}
+		org.eclipse.draw2d.geometry.Rectangle unionBounds =
+				GroupLayoutUtils.getRectangleUnion(movingBounds);
+		int middlePointInArea =
+				isHorizontal ? unionBounds.x + unionBounds.width / 2 : unionBounds.y
+						+ unionBounds.height
+						/ 2;
+		i = 0;
+		for (IAbstractComponentInfo component : components) {
+			java.awt.Rectangle componentBounds = movingBounds[i];
+			String[] movindIds = new String[]{ObjectInfoUtils.getId(component.getUnderlyingModel())};
+			java.awt.Rectangle[] movedBounds =
+					new java.awt.Rectangle[]{new java.awt.Rectangle(0,
+							0,
+							componentBounds.width,
+							componentBounds.height)};
+			layoutDesigner.startMoving(
+					movindIds,
+					new java.awt.Rectangle[]{componentBounds},
+					new java.awt.Point(0, 0));
+			int middlePoint =
+					isHorizontal ? componentBounds.width / 2 + componentBounds.x : componentBounds.height
+							/ 2
+							+ componentBounds.y;
+			int moveDelta = middlePointInArea - middlePoint;
+			if (moveDelta != 0) {
+				java.awt.Point moveDeltaPoint =
+						isHorizontal ? new java.awt.Point(moveDelta, 0) : new java.awt.Point(0, moveDelta);
+				layoutDesigner.move(moveDeltaPoint, id, false, false, movedBounds);
+				layoutDesigner.endMoving(true);
+				layoutDesigner.updateCurrentState();
+			} else {
+				layoutDesigner.endMoving(false);
+			}
+			i++;
+		}
+		m_layout.saveLayout();
+	}
 
-  public void action_centerInParent(List<C> components, boolean isHorizontal) throws Exception {
-    Rectangle parentBounds = getLayoutContainer().getModelBounds();
-    java.awt.Rectangle[] movingBounds = new java.awt.Rectangle[components.size()];
-    String[] movingIds = new String[components.size()];
-    int i = 0;
-    for (IAbstractComponentInfo component : components) {
-      movingIds[i] = ObjectInfoUtils.getId(component.getUnderlyingModel());
-      movingBounds[i++] = GroupLayoutUtils.getBoundsInLayout(m_layout, component);
-    }
-    Rectangle unionBounds = GroupLayoutUtils.getRectangleUnion(movingBounds);
-    LayoutDesigner layoutDesigner = m_layout.getLayoutDesigner();
-    layoutDesigner.startMoving(movingIds, movingBounds, new java.awt.Point(0, 0));
-    String id = ObjectInfoUtils.getId(getLayoutContainer().getUnderlyingModel());
-    java.awt.Rectangle[] movedBounds = new java.awt.Rectangle[components.size()];
-    for (int j = 0; j < movedBounds.length; j++) {
-      movedBounds[j] = new java.awt.Rectangle();
-      movedBounds[j].width = movingBounds[j].width;
-      movedBounds[j].height = movingBounds[j].height;
-    }
-    int middlePointInParent = isHorizontal ? parentBounds.width / 2 : parentBounds.height / 2;
-    int middlePoint =
-        isHorizontal ? unionBounds.width / 2 + unionBounds.x : unionBounds.height
-            / 2
-            + unionBounds.y;
-    int moveDelta = middlePointInParent - middlePoint;
-    if (moveDelta != 0) {
-      java.awt.Point moveDeltaPoint =
-          isHorizontal ? new java.awt.Point(moveDelta, 0) : new java.awt.Point(0, moveDelta);
-      layoutDesigner.move(moveDeltaPoint, id, false, false, movedBounds);
-      layoutDesigner.endMoving(true);
-      layoutDesigner.updateCurrentState();
-    } else {
-      layoutDesigner.endMoving(false);
-    }
-    m_layout.saveLayout();
-  }
+	public void action_centerInParent(List<C> components, boolean isHorizontal) throws Exception {
+		Rectangle parentBounds = getLayoutContainer().getModelBounds();
+		java.awt.Rectangle[] movingBounds = new java.awt.Rectangle[components.size()];
+		String[] movingIds = new String[components.size()];
+		int i = 0;
+		for (IAbstractComponentInfo component : components) {
+			movingIds[i] = ObjectInfoUtils.getId(component.getUnderlyingModel());
+			movingBounds[i++] = GroupLayoutUtils.getBoundsInLayout(m_layout, component);
+		}
+		Rectangle unionBounds = GroupLayoutUtils.getRectangleUnion(movingBounds);
+		LayoutDesigner layoutDesigner = m_layout.getLayoutDesigner();
+		layoutDesigner.startMoving(movingIds, movingBounds, new java.awt.Point(0, 0));
+		String id = ObjectInfoUtils.getId(getLayoutContainer().getUnderlyingModel());
+		java.awt.Rectangle[] movedBounds = new java.awt.Rectangle[components.size()];
+		for (int j = 0; j < movedBounds.length; j++) {
+			movedBounds[j] = new java.awt.Rectangle();
+			movedBounds[j].width = movingBounds[j].width;
+			movedBounds[j].height = movingBounds[j].height;
+		}
+		int middlePointInParent = isHorizontal ? parentBounds.width / 2 : parentBounds.height / 2;
+		int middlePoint =
+				isHorizontal ? unionBounds.width / 2 + unionBounds.x : unionBounds.height
+						/ 2
+						+ unionBounds.y;
+		int moveDelta = middlePointInParent - middlePoint;
+		if (moveDelta != 0) {
+			java.awt.Point moveDeltaPoint =
+					isHorizontal ? new java.awt.Point(moveDelta, 0) : new java.awt.Point(0, moveDelta);
+			layoutDesigner.move(moveDeltaPoint, id, false, false, movedBounds);
+			layoutDesigner.endMoving(true);
+			layoutDesigner.updateCurrentState();
+		} else {
+			layoutDesigner.endMoving(false);
+		}
+		m_layout.saveLayout();
+	}
 
-  public void action_toggleSameSize(List<C> components, boolean isHorizontal) throws Exception {
-    int dimension = isHorizontal ? HORIZONTAL : VERTICAL;
-    List<String> idsList = GroupLayoutUtils.getIdsList(components);
-    LayoutModel layoutModel = m_layout.getLayoutModel();
-    int linked = layoutModel.areComponentsLinkSized(idsList, dimension);
-    LayoutDesigner layoutDesigner = m_layout.getLayoutDesigner();
-    if (linked == FALSE) {
-      for (String id : idsList) {
-        final LayoutComponent layoutComponent = layoutModel.getLayoutComponent(id);
-        if (layoutDesigner.isComponentResizing(layoutComponent, dimension)) {
-          layoutDesigner.setComponentResizing(layoutComponent, dimension, false);
-        }
-      }
-      layoutModel.setSameSize(idsList, dimension);
-    } else if (linked == TRUE) {
-      layoutModel.unsetSameSize(idsList, dimension);
-    }
-    m_layout.saveLayout();
-  }
+	public void action_toggleSameSize(List<C> components, boolean isHorizontal) throws Exception {
+		int dimension = isHorizontal ? HORIZONTAL : VERTICAL;
+		List<String> idsList = GroupLayoutUtils.getIdsList(components);
+		LayoutModel layoutModel = m_layout.getLayoutModel();
+		int linked = layoutModel.areComponentsLinkSized(idsList, dimension);
+		LayoutDesigner layoutDesigner = m_layout.getLayoutDesigner();
+		if (linked == FALSE) {
+			for (String id : idsList) {
+				final LayoutComponent layoutComponent = layoutModel.getLayoutComponent(id);
+				if (layoutDesigner.isComponentResizing(layoutComponent, dimension)) {
+					layoutDesigner.setComponentResizing(layoutComponent, dimension, false);
+				}
+			}
+			layoutModel.setSameSize(idsList, dimension);
+		} else if (linked == TRUE) {
+			layoutModel.unsetSameSize(idsList, dimension);
+		}
+		m_layout.saveLayout();
+	}
 }
diff --git a/org.eclipse.wb.layout.group/src/org/eclipse/wb/internal/layout/group/model/AnchorsSupport.java b/org.eclipse.wb.layout.group/src/org/eclipse/wb/internal/layout/group/model/AnchorsSupport.java
index f0d345204..699d1d009 100644
--- a/org.eclipse.wb.layout.group/src/org/eclipse/wb/internal/layout/group/model/AnchorsSupport.java
+++ b/org.eclipse.wb.layout.group/src/org/eclipse/wb/internal/layout/group/model/AnchorsSupport.java
@@ -29,326 +29,326 @@
 import org.netbeans.modules.form.layoutdesign.VisualMapper;
 
 public final class AnchorsSupport implements LayoutConstants {
-  // constant
-  public static final int RESIZABLE = 2;
-  // layout field
-  private final IGroupLayoutInfo m_layout;
+	// constant
+	public static final int RESIZABLE = 2;
+	// layout field
+	private final IGroupLayoutInfo m_layout;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AnchorsSupport(IGroupLayoutInfo layout) {
-    m_layout = layout;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AnchorsSupport(IGroupLayoutInfo layout) {
+		m_layout = layout;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void fillContextMenu(AbstractComponentInfo component, IMenuManager manager) {
-    {
-      IMenuManager anchorsManager = new MenuManager(Messages.AnchorsSupport_anchorsMenu);
-      manager.appendToGroup(IContextMenuConstants.GROUP_CONSTRAINTS, anchorsManager);
-      anchorsManager.add(
-          new SetAnchorAction(component,
-              Messages.AnchorsSupport_anchorLeft,
-              "h/menu/left.gif",
-              true,
-              LEADING));
-      anchorsManager.add(
-          new SetAnchorAction(component,
-              Messages.AnchorsSupport_anchorRight,
-              "h/menu/right.gif",
-              true,
-              TRAILING));
-      anchorsManager.add(
-          new SetAnchorAction(component,
-              Messages.AnchorsSupport_anchorTop,
-              "v/menu/top.gif",
-              false,
-              LEADING));
-      anchorsManager.add(
-          new SetAnchorAction(component,
-              Messages.AnchorsSupport_anchorBottom,
-              "v/menu/bottom.gif",
-              false,
-              TRAILING));
-    }
-    {
-      IMenuManager autoResigingManager = new MenuManager(Messages.AnchorsSupport_autoResizeMenu);
-      manager.appendToGroup(IContextMenuConstants.GROUP_CONSTRAINTS, autoResigingManager);
-      autoResigingManager.add(new ToggleResizeableAction(component, "h/menu/both.gif", true));
-      autoResigingManager.add(new ToggleResizeableAction(component, "v/menu/both.gif", false));
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void fillContextMenu(AbstractComponentInfo component, IMenuManager manager) {
+		{
+			IMenuManager anchorsManager = new MenuManager(Messages.AnchorsSupport_anchorsMenu);
+			manager.appendToGroup(IContextMenuConstants.GROUP_CONSTRAINTS, anchorsManager);
+			anchorsManager.add(
+					new SetAnchorAction(component,
+							Messages.AnchorsSupport_anchorLeft,
+							"h/menu/left.gif",
+							true,
+							LEADING));
+			anchorsManager.add(
+					new SetAnchorAction(component,
+							Messages.AnchorsSupport_anchorRight,
+							"h/menu/right.gif",
+							true,
+							TRAILING));
+			anchorsManager.add(
+					new SetAnchorAction(component,
+							Messages.AnchorsSupport_anchorTop,
+							"v/menu/top.gif",
+							false,
+							LEADING));
+			anchorsManager.add(
+					new SetAnchorAction(component,
+							Messages.AnchorsSupport_anchorBottom,
+							"v/menu/bottom.gif",
+							false,
+							TRAILING));
+		}
+		{
+			IMenuManager autoResigingManager = new MenuManager(Messages.AnchorsSupport_autoResizeMenu);
+			manager.appendToGroup(IContextMenuConstants.GROUP_CONSTRAINTS, autoResigingManager);
+			autoResigingManager.add(new ToggleResizeableAction(component, "h/menu/both.gif", true));
+			autoResigingManager.add(new ToggleResizeableAction(component, "v/menu/both.gif", false));
+		}
+	}
 
-  public void fillContributionManager(AbstractComponentInfo component,
-      IContributionManager manager,
-      boolean isHorizontal) {
-    if (isHorizontal) {
-      manager.add(
-          new SetAnchorAction(component,
-              Messages.AnchorsSupport_anchoredLeft,
-              "h/menu/left.gif",
-              true,
-              LEADING));
-      manager.add(
-          new SetAnchorAction(component,
-              Messages.AnchorsSupport_anchoredRight,
-              "h/menu/right.gif",
-              true,
-              TRAILING));
-      manager.add(new MakeResizeableAction(component, "h/menu/both.gif", isHorizontal));
-    } else {
-      manager.add(
-          new SetAnchorAction(component,
-              Messages.AnchorsSupport_anchoredTop,
-              "v/menu/top.gif",
-              false,
-              LEADING));
-      manager.add(
-          new SetAnchorAction(component,
-              Messages.AnchorsSupport_anchoredBottom,
-              "v/menu/bottom.gif",
-              false,
-              TRAILING));
-      manager.add(new MakeResizeableAction(component, "v/menu/both.gif", isHorizontal));
-    }
-  }
+	public void fillContributionManager(AbstractComponentInfo component,
+			IContributionManager manager,
+			boolean isHorizontal) {
+		if (isHorizontal) {
+			manager.add(
+					new SetAnchorAction(component,
+							Messages.AnchorsSupport_anchoredLeft,
+							"h/menu/left.gif",
+							true,
+							LEADING));
+			manager.add(
+					new SetAnchorAction(component,
+							Messages.AnchorsSupport_anchoredRight,
+							"h/menu/right.gif",
+							true,
+							TRAILING));
+			manager.add(new MakeResizeableAction(component, "h/menu/both.gif", isHorizontal));
+		} else {
+			manager.add(
+					new SetAnchorAction(component,
+							Messages.AnchorsSupport_anchoredTop,
+							"v/menu/top.gif",
+							false,
+							LEADING));
+			manager.add(
+					new SetAnchorAction(component,
+							Messages.AnchorsSupport_anchoredBottom,
+							"v/menu/bottom.gif",
+							false,
+							TRAILING));
+			manager.add(new MakeResizeableAction(component, "v/menu/both.gif", isHorizontal));
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Anchors/Resizability
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private boolean isComponentResizable(AbstractComponentInfo component, boolean isHorizontal) {
-    int dimension = isHorizontal ? HORIZONTAL : VERTICAL;
-    LayoutComponent layoutComponent = getLayoutComponent(component);
-    return m_layout.getLayoutDesigner().isComponentResizing(layoutComponent, dimension);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Anchors/Resizability
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private boolean isComponentResizable(AbstractComponentInfo component, boolean isHorizontal) {
+		int dimension = isHorizontal ? HORIZONTAL : VERTICAL;
+		LayoutComponent layoutComponent = getLayoutComponent(component);
+		return m_layout.getLayoutDesigner().isComponentResizing(layoutComponent, dimension);
+	}
 
-  public int getCurrentAnchors(AbstractComponentInfo component, boolean isHorizontal) {
-    if (isComponentResizable(component, isHorizontal)) {
-      return RESIZABLE;
-    } else {
-      return getCurrentAlignment(component, isHorizontal);
-    }
-  }
+	public int getCurrentAnchors(AbstractComponentInfo component, boolean isHorizontal) {
+		if (isComponentResizable(component, isHorizontal)) {
+			return RESIZABLE;
+		} else {
+			return getCurrentAlignment(component, isHorizontal);
+		}
+	}
 
-  private int getCurrentAlignment(AbstractComponentInfo component, boolean isHorizontal) {
-    int dimension = isHorizontal ? HORIZONTAL : VERTICAL;
-    LayoutComponent layoutComp = getLayoutComponent(component);
-    int[] alignment =
-        m_layout.getLayoutDesigner().getAdjustableComponentAlignment(layoutComp, dimension);
-    return alignment[0];
-  }
+	private int getCurrentAlignment(AbstractComponentInfo component, boolean isHorizontal) {
+		int dimension = isHorizontal ? HORIZONTAL : VERTICAL;
+		LayoutComponent layoutComp = getLayoutComponent(component);
+		int[] alignment =
+				m_layout.getLayoutDesigner().getAdjustableComponentAlignment(layoutComp, dimension);
+		return alignment[0];
+	}
 
-  public Integer getEmptySpaceValue(AbstractComponentInfo aroundComponent,
-      int dimension,
-      int direction) {
-    LayoutInterval space = getEmptySpaceInterval(aroundComponent, dimension, direction);
-    if (space != null) {
-      return space.getPreferredSize(false);
-    }
-    return null;
-  }
+	public Integer getEmptySpaceValue(AbstractComponentInfo aroundComponent,
+			int dimension,
+			int direction) {
+		LayoutInterval space = getEmptySpaceInterval(aroundComponent, dimension, direction);
+		if (space != null) {
+			return space.getPreferredSize(false);
+		}
+		return null;
+	}
 
-  public Integer getDefaultGapSize(AbstractComponentInfo aroundComponent,
-      int dimension,
-      int direction) {
-    LayoutInterval space = getEmptySpaceInterval(aroundComponent, dimension, direction);
-    if (space != null) {
-      return Integer.valueOf(
-          LayoutUtils.getSizeOfDefaultGap(space, m_layout.getAdapter(VisualMapper.class)));
-    }
-    return null;
-  }
+	public Integer getDefaultGapSize(AbstractComponentInfo aroundComponent,
+			int dimension,
+			int direction) {
+		LayoutInterval space = getEmptySpaceInterval(aroundComponent, dimension, direction);
+		if (space != null) {
+			return Integer.valueOf(
+					LayoutUtils.getSizeOfDefaultGap(space, m_layout.getAdapter(VisualMapper.class)));
+		}
+		return null;
+	}
 
-  private LayoutInterval getEmptySpaceInterval(AbstractComponentInfo aroundComponent,
-      int dimension,
-      int direction) {
-    LayoutComponent comp = getLayoutComponent(aroundComponent);
-    return LayoutUtils.getAdjacentEmptySpace(comp, dimension, direction);
-  }
+	private LayoutInterval getEmptySpaceInterval(AbstractComponentInfo aroundComponent,
+			int dimension,
+			int direction) {
+		LayoutComponent comp = getLayoutComponent(aroundComponent);
+		return LayoutUtils.getAdjacentEmptySpace(comp, dimension, direction);
+	}
 
-  private LayoutComponent getLayoutComponent(AbstractComponentInfo component) {
-    return GroupLayoutUtils.getLayoutComponent(m_layout, component);
-  }
+	private LayoutComponent getLayoutComponent(AbstractComponentInfo component) {
+		return GroupLayoutUtils.getLayoutComponent(m_layout, component);
+	}
 
-  private void action_setResizability(AbstractComponentInfo component,
-      boolean isHorizontal,
-      boolean resizable) throws Exception {
-    int dimension = isHorizontal ? HORIZONTAL : VERTICAL;
-    LayoutComponent layoutComponent = getLayoutComponent(component);
-    if (isComponentResizable(component, isHorizontal) != resizable) {
-      LayoutDesigner layoutDesigner = m_layout.getLayoutDesigner();
-      layoutDesigner.setComponentResizing(layoutComponent, dimension, resizable);
-      layoutDesigner.updateCurrentState();
-      m_layout.saveLayout();
-    }
-  }
+	private void action_setResizability(AbstractComponentInfo component,
+			boolean isHorizontal,
+			boolean resizable) throws Exception {
+		int dimension = isHorizontal ? HORIZONTAL : VERTICAL;
+		LayoutComponent layoutComponent = getLayoutComponent(component);
+		if (isComponentResizable(component, isHorizontal) != resizable) {
+			LayoutDesigner layoutDesigner = m_layout.getLayoutDesigner();
+			layoutDesigner.setComponentResizing(layoutComponent, dimension, resizable);
+			layoutDesigner.updateCurrentState();
+			m_layout.saveLayout();
+		}
+	}
 
-  private void action_setAlignment(AbstractComponentInfo component,
-      boolean isHorizontal,
-      int newAlignment) throws Exception {
-    int dimension = isHorizontal ? HORIZONTAL : VERTICAL;
-    LayoutComponent layoutComp = getLayoutComponent(component);
-    LayoutDesigner layoutDesigner = m_layout.getLayoutDesigner();
-    int[] alignment = layoutDesigner.getAdjustableComponentAlignment(layoutComp, dimension);
-    if ((alignment[1] & 1 << newAlignment) != 0 && alignment[0] != newAlignment) {
-      layoutDesigner.adjustComponentAlignment(layoutComp, dimension, newAlignment);
-      layoutDesigner.updateCurrentState();
-      m_layout.saveLayout();
-    }
-  }
+	private void action_setAlignment(AbstractComponentInfo component,
+			boolean isHorizontal,
+			int newAlignment) throws Exception {
+		int dimension = isHorizontal ? HORIZONTAL : VERTICAL;
+		LayoutComponent layoutComp = getLayoutComponent(component);
+		LayoutDesigner layoutDesigner = m_layout.getLayoutDesigner();
+		int[] alignment = layoutDesigner.getAdjustableComponentAlignment(layoutComp, dimension);
+		if ((alignment[1] & 1 << newAlignment) != 0 && alignment[0] != newAlignment) {
+			layoutDesigner.adjustComponentAlignment(layoutComp, dimension, newAlignment);
+			layoutDesigner.updateCurrentState();
+			m_layout.saveLayout();
+		}
+	}
 
-  public void action_setComponentSize(AbstractComponentInfo component, int dimension, int value)
-      throws Exception {
-    if (value < 0 && value != NOT_EXPLICITLY_DEFINED) {
-      return;
-    }
-    LayoutComponent layoutComponent = getLayoutComponent(component);
-    LayoutInterval space = layoutComponent.getLayoutInterval(dimension);
-    if (space != null) {
-      int pref = space.getPreferredSize(false);
-      int max = space.getMaximumSize(false);
-      int min = space.getMinimumSize(false);
-      if (value != pref) {
-        m_layout.getLayoutModel().setIntervalSize(space, min, value, max);
-        m_layout.saveLayout();
-      }
-    }
-  }
+	public void action_setComponentSize(AbstractComponentInfo component, int dimension, int value)
+			throws Exception {
+		if (value < 0 && value != NOT_EXPLICITLY_DEFINED) {
+			return;
+		}
+		LayoutComponent layoutComponent = getLayoutComponent(component);
+		LayoutInterval space = layoutComponent.getLayoutInterval(dimension);
+		if (space != null) {
+			int pref = space.getPreferredSize(false);
+			int max = space.getMaximumSize(false);
+			int min = space.getMinimumSize(false);
+			if (value != pref) {
+				m_layout.getLayoutModel().setIntervalSize(space, min, value, max);
+				m_layout.saveLayout();
+			}
+		}
+	}
 
-  public void action_setEmptySpaceProperties(AbstractComponentInfo aroundComponent,
-      int dimension,
-      int direction,
-      int gapSize) throws Exception {
-    LayoutInterval space = getEmptySpaceInterval(aroundComponent, dimension, direction);
-    if (space != null) {
-      int pref = space.getPreferredSize(false);
-      int max = space.getMaximumSize(false);
-      boolean isResizable = max != USE_PREFERRED_SIZE && max != pref;
-      if (pref != gapSize) {
-        m_layout.getLayoutModel().setIntervalSize(
-            space,
-            isResizable ? NOT_EXPLICITLY_DEFINED : USE_PREFERRED_SIZE,
-            gapSize,
-            isResizable ? Short.MAX_VALUE : USE_PREFERRED_SIZE);
-        m_layout.saveLayout();
-      }
-    }
-  }
+	public void action_setEmptySpaceProperties(AbstractComponentInfo aroundComponent,
+			int dimension,
+			int direction,
+			int gapSize) throws Exception {
+		LayoutInterval space = getEmptySpaceInterval(aroundComponent, dimension, direction);
+		if (space != null) {
+			int pref = space.getPreferredSize(false);
+			int max = space.getMaximumSize(false);
+			boolean isResizable = max != USE_PREFERRED_SIZE && max != pref;
+			if (pref != gapSize) {
+				m_layout.getLayoutModel().setIntervalSize(
+						space,
+						isResizable ? NOT_EXPLICITLY_DEFINED : USE_PREFERRED_SIZE,
+								gapSize,
+								isResizable ? Short.MAX_VALUE : USE_PREFERRED_SIZE);
+				m_layout.saveLayout();
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Action classes
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final class SetAnchorAction extends ObjectInfoAction {
-    private final int m_alignment;
-    private final AbstractComponentInfo m_component;
-    private final boolean m_isHorizontal;
-    private final boolean m_alreadySet;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Action classes
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final class SetAnchorAction extends ObjectInfoAction {
+		private final int m_alignment;
+		private final AbstractComponentInfo m_component;
+		private final boolean m_isHorizontal;
+		private final boolean m_alreadySet;
 
-    private SetAnchorAction(AbstractComponentInfo component,
-        String text,
-        String imageName,
-        boolean isHorizontal,
-        int alignment) {
-      super(component,
-          text,
-          new ImageImageDescriptor(
-              getImageProvider().getImage("info/layout/groupLayout/" + imageName)),
-          AS_CHECK_BOX);
-      m_isHorizontal = isHorizontal;
-      m_component = component;
-      m_alignment = alignment;
-      m_alreadySet = getCurrentAnchors(component, isHorizontal) == alignment;
-      setEnabled(component != null);
-      setChecked(m_alreadySet);
-    }
+		private SetAnchorAction(AbstractComponentInfo component,
+				String text,
+				String imageName,
+				boolean isHorizontal,
+				int alignment) {
+			super(component,
+					text,
+					new ImageImageDescriptor(
+							getImageProvider().getImage("info/layout/groupLayout/" + imageName)),
+					AS_CHECK_BOX);
+			m_isHorizontal = isHorizontal;
+			m_component = component;
+			m_alignment = alignment;
+			m_alreadySet = getCurrentAnchors(component, isHorizontal) == alignment;
+			setEnabled(component != null);
+			setChecked(m_alreadySet);
+		}
 
-    @Override
-    protected void runEx() throws Exception {
-      action_setResizability(m_component, m_isHorizontal, false);
-      action_setAlignment(m_component, m_isHorizontal, m_alignment);
-    }
+		@Override
+		protected void runEx() throws Exception {
+			action_setResizability(m_component, m_isHorizontal, false);
+			action_setAlignment(m_component, m_isHorizontal, m_alignment);
+		}
 
-    @Override
-    protected boolean shouldRun() throws Exception {
-      return !m_alreadySet;
-    }
-  }
-  private final class MakeResizeableAction extends ObjectInfoAction {
-    private final boolean m_isHorizontal;
-    private final AbstractComponentInfo m_component;
-    private final boolean m_alreadySet;
+		@Override
+		protected boolean shouldRun() throws Exception {
+			return !m_alreadySet;
+		}
+	}
+	private final class MakeResizeableAction extends ObjectInfoAction {
+		private final boolean m_isHorizontal;
+		private final AbstractComponentInfo m_component;
+		private final boolean m_alreadySet;
 
-    private MakeResizeableAction(AbstractComponentInfo component,
-        String imageName,
-        boolean isHorizontal) {
-      super(component,
-          Messages.AnchorsSupport_autoResizable,
-          new ImageImageDescriptor(
-              getImageProvider().getImage("info/layout/groupLayout/" + imageName)),
-          AS_CHECK_BOX);
-      m_component = component;
-      m_isHorizontal = isHorizontal;
-      setEnabled(component != null);
-      boolean isResizable = isComponentResizable(component, isHorizontal);
-      setChecked(isResizable);
-      m_alreadySet = isResizable == true;
-    }
+		private MakeResizeableAction(AbstractComponentInfo component,
+				String imageName,
+				boolean isHorizontal) {
+			super(component,
+					Messages.AnchorsSupport_autoResizable,
+					new ImageImageDescriptor(
+							getImageProvider().getImage("info/layout/groupLayout/" + imageName)),
+					AS_CHECK_BOX);
+			m_component = component;
+			m_isHorizontal = isHorizontal;
+			setEnabled(component != null);
+			boolean isResizable = isComponentResizable(component, isHorizontal);
+			setChecked(isResizable);
+			m_alreadySet = isResizable == true;
+		}
 
-    @Override
-    protected void runEx() throws Exception {
-      action_setResizability(m_component, m_isHorizontal, true);
-    }
+		@Override
+		protected void runEx() throws Exception {
+			action_setResizability(m_component, m_isHorizontal, true);
+		}
 
-    @Override
-    protected boolean shouldRun() throws Exception {
-      return !m_alreadySet;
-    }
-  }
-  private final class ToggleResizeableAction extends ObjectInfoAction {
-    private final boolean m_isHorizontal;
-    private final AbstractComponentInfo m_component;
+		@Override
+		protected boolean shouldRun() throws Exception {
+			return !m_alreadySet;
+		}
+	}
+	private final class ToggleResizeableAction extends ObjectInfoAction {
+		private final boolean m_isHorizontal;
+		private final AbstractComponentInfo m_component;
 
-    private ToggleResizeableAction(AbstractComponentInfo component,
-        String imageName,
-        boolean isHorizontal) {
-      super(component,
-          isHorizontal
-              ? Messages.AnchorsSupport_resizableHorizontal
-              : Messages.AnchorsSupport_resizableVertical,
-          new ImageImageDescriptor(
-              getImageProvider().getImage("info/layout/groupLayout/" + imageName)),
-          AS_CHECK_BOX);
-      m_component = component;
-      m_isHorizontal = isHorizontal;
-      setEnabled(component != null);
-      setChecked(isComponentResizable(component, isHorizontal));
-    }
+		private ToggleResizeableAction(AbstractComponentInfo component,
+				String imageName,
+				boolean isHorizontal) {
+			super(component,
+					isHorizontal
+					? Messages.AnchorsSupport_resizableHorizontal
+							: Messages.AnchorsSupport_resizableVertical,
+							new ImageImageDescriptor(
+									getImageProvider().getImage("info/layout/groupLayout/" + imageName)),
+							AS_CHECK_BOX);
+			m_component = component;
+			m_isHorizontal = isHorizontal;
+			setEnabled(component != null);
+			setChecked(isComponentResizable(component, isHorizontal));
+		}
 
-    @Override
-    protected void runEx() throws Exception {
-      action_setResizability(
-          m_component,
-          m_isHorizontal,
-          !isComponentResizable(m_component, m_isHorizontal));
-    }
-  }
+		@Override
+		protected void runEx() throws Exception {
+			action_setResizability(
+					m_component,
+					m_isHorizontal,
+					!isComponentResizable(m_component, m_isHorizontal));
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Misc
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private IImageProvider getImageProvider() {
-    return m_layout.getAdapter(IImageProvider.class);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Misc
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private IImageProvider getImageProvider() {
+		return m_layout.getAdapter(IImageProvider.class);
+	}
 }
diff --git a/org.eclipse.wb.layout.group/src/org/eclipse/wb/internal/layout/group/model/GroupLayoutClipboardCommand.java b/org.eclipse.wb.layout.group/src/org/eclipse/wb/internal/layout/group/model/GroupLayoutClipboardCommand.java
index 77c754196..a59709cdb 100644
--- a/org.eclipse.wb.layout.group/src/org/eclipse/wb/internal/layout/group/model/GroupLayoutClipboardCommand.java
+++ b/org.eclipse.wb.layout.group/src/org/eclipse/wb/internal/layout/group/model/GroupLayoutClipboardCommand.java
@@ -32,64 +32,64 @@
  * @author mitin_aa
  */
 public abstract class GroupLayoutClipboardCommand extends ClipboardCommand {
-  private static final long serialVersionUID = 0L;
-  private final String m_layoutXml;
+	private static final long serialVersionUID = 0L;
+	private final String m_layoutXml;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public GroupLayoutClipboardCommand(GroupLayoutSupport _this) {
-    Map<String, String> componentsMap = Maps.newHashMap();
-    // map current component ids to xml ids; this requires child order preserving
-    int i = 0;
-    for (AbstractComponentInfo component : _this.getLayoutChildren()) {
-      componentsMap.put(ObjectInfoUtils.getId(component), "" + i++);
-    }
-    // store to xml
-    m_layoutXml =
-        "<layout>"
-            + _this.getLayoutModel().saveContainerLayout(
-                _this.getLayoutRoot(),
-                componentsMap,
-                0,
-                false)
-            + "</layout>";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public GroupLayoutClipboardCommand(GroupLayoutSupport _this) {
+		Map<String, String> componentsMap = Maps.newHashMap();
+		// map current component ids to xml ids; this requires child order preserving
+		int i = 0;
+		for (AbstractComponentInfo component : _this.getLayoutChildren()) {
+			componentsMap.put(ObjectInfoUtils.getId(component), "" + i++);
+		}
+		// store to xml
+		m_layoutXml =
+				"<layout>"
+						+ _this.getLayoutModel().saveContainerLayout(
+								_this.getLayoutRoot(),
+								componentsMap,
+								0,
+								false)
+						+ "</layout>";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ClipboardCommand
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final void execute(JavaInfo javaInfo) throws Exception {
-    try {
-      // prepare
-      GroupLayoutSupport _this = getLayoutSupport(javaInfo);
-      // map xml ids back to newly created component ids
-      Map<String, String> componentsMap = Maps.newHashMap();
-      int i = 0;
-      for (AbstractComponentInfo component : _this.getLayoutChildren()) {
-        componentsMap.put("" + i++, ObjectInfoUtils.getId(component));
-      }
-      // parse xml
-      Document document =
-          DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(
-              IOUtils.toInputStream(m_layoutXml));
-      NodeList nodes = document.getChildNodes().item(0).getChildNodes();
-      // load
-      _this.getLayoutModel().loadContainerLayout(
-          ObjectInfoUtils.getId(_this.getLayoutContainer()),
-          nodes,
-          componentsMap);
-      // save
-      _this.saveLayout();
-    } catch (Throwable e) {
-      DesignerPlugin.log(e);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ClipboardCommand
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final void execute(JavaInfo javaInfo) throws Exception {
+		try {
+			// prepare
+			GroupLayoutSupport _this = getLayoutSupport(javaInfo);
+			// map xml ids back to newly created component ids
+			Map<String, String> componentsMap = Maps.newHashMap();
+			int i = 0;
+			for (AbstractComponentInfo component : _this.getLayoutChildren()) {
+				componentsMap.put("" + i++, ObjectInfoUtils.getId(component));
+			}
+			// parse xml
+			Document document =
+					DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(
+							IOUtils.toInputStream(m_layoutXml));
+			NodeList nodes = document.getChildNodes().item(0).getChildNodes();
+			// load
+			_this.getLayoutModel().loadContainerLayout(
+					ObjectInfoUtils.getId(_this.getLayoutContainer()),
+					nodes,
+					componentsMap);
+			// save
+			_this.saveLayout();
+		} catch (Throwable e) {
+			DesignerPlugin.log(e);
+		}
+	}
 
-  protected abstract GroupLayoutSupport getLayoutSupport(JavaInfo container);
+	protected abstract GroupLayoutSupport getLayoutSupport(JavaInfo container);
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.layout.group/src/org/eclipse/wb/internal/layout/group/model/GroupLayoutCodeSupport.java b/org.eclipse.wb.layout.group/src/org/eclipse/wb/internal/layout/group/model/GroupLayoutCodeSupport.java
index b959755a9..4e094de5c 100644
--- a/org.eclipse.wb.layout.group/src/org/eclipse/wb/internal/layout/group/model/GroupLayoutCodeSupport.java
+++ b/org.eclipse.wb.layout.group/src/org/eclipse/wb/internal/layout/group/model/GroupLayoutCodeSupport.java
@@ -42,276 +42,276 @@
  * @author mitin_aa
  */
 public abstract class GroupLayoutCodeSupport implements LayoutConstants {
-  public final static Object ASSOCIATION_EXPRESSION_KEY = GroupLayoutCodeSupport.class;
-  protected static final String ID_CREATE_PARALLEL_GROUP = "createParallelGroup";
-  protected static final String ID_CREATE_BASELINE_GROUP = "createBaselineGroup";
-  final static String ID_CREATE_SEQUENTIAL_GROUP = "createSequentialGroup";
-  final static String PROPERTY_NAME_GROUP = "group";
-  protected static final String ID_SET_HORIZONTAL_GROUP = "setHorizontalGroup";
-  protected static final String ID_SET_VERTICAL_GROUP = "setVerticalGroup";
-  protected static final String ID_LINK_SIZE = "linkSize";
-  protected static final String ID_ADD_CONTAINER_GAP = "addContainerGap";
-  protected static final String ID_ADD_PREFERRED_GAP = "addPreferredGap";
-  //
-  protected String GROUP_LAYOUT_CLASS_NAME;
-  protected String GROUP_LAYOUT_GROUP_CLASS_NAME;
-  protected String ID_ADD_GAP;
-  protected String ID_ADD_COMPONENT;
-  protected String ID_ADD_GROUP;
-  protected String SIGNATURE_SET_HORIZONTAL_GROUP;
-  protected String SIGNATURE_SET_VERTICAL_GROUP;
-  protected String SIGNATURE_LINK_SIZE;
-  protected String SIGNATURE_LINK_SIZE_AXIS;
-  //
-  protected IAdaptable m_layoutAdaptable;
+	public final static Object ASSOCIATION_EXPRESSION_KEY = GroupLayoutCodeSupport.class;
+	protected static final String ID_CREATE_PARALLEL_GROUP = "createParallelGroup";
+	protected static final String ID_CREATE_BASELINE_GROUP = "createBaselineGroup";
+	final static String ID_CREATE_SEQUENTIAL_GROUP = "createSequentialGroup";
+	final static String PROPERTY_NAME_GROUP = "group";
+	protected static final String ID_SET_HORIZONTAL_GROUP = "setHorizontalGroup";
+	protected static final String ID_SET_VERTICAL_GROUP = "setVerticalGroup";
+	protected static final String ID_LINK_SIZE = "linkSize";
+	protected static final String ID_ADD_CONTAINER_GAP = "addContainerGap";
+	protected static final String ID_ADD_PREFERRED_GAP = "addPreferredGap";
+	//
+	protected String GROUP_LAYOUT_CLASS_NAME;
+	protected String GROUP_LAYOUT_GROUP_CLASS_NAME;
+	protected String ID_ADD_GAP;
+	protected String ID_ADD_COMPONENT;
+	protected String ID_ADD_GROUP;
+	protected String SIGNATURE_SET_HORIZONTAL_GROUP;
+	protected String SIGNATURE_SET_VERTICAL_GROUP;
+	protected String SIGNATURE_LINK_SIZE;
+	protected String SIGNATURE_LINK_SIZE_AXIS;
+	//
+	protected IAdaptable m_layoutAdaptable;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public GroupLayoutCodeSupport(IAdaptable layout) {
-    m_layoutAdaptable = layout;
-    // support changing 'main' layout JavaInfo instance, used by Swing while converting from old-style layout.
-    getJavaInfo().addBroadcastListener(new JavaEventListener() {
-      @Override
-      public void replaceChildAfter(JavaInfo parent, JavaInfo oldChild, JavaInfo newChild)
-          throws Exception {
-        if (oldChild == m_layoutAdaptable) {
-          m_layoutAdaptable = (IAdaptable) newChild;
-        }
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public GroupLayoutCodeSupport(IAdaptable layout) {
+		m_layoutAdaptable = layout;
+		// support changing 'main' layout JavaInfo instance, used by Swing while converting from old-style layout.
+		getJavaInfo().addBroadcastListener(new JavaEventListener() {
+			@Override
+			public void replaceChildAfter(JavaInfo parent, JavaInfo oldChild, JavaInfo newChild)
+					throws Exception {
+				if (oldChild == m_layoutAdaptable) {
+					m_layoutAdaptable = (IAdaptable) newChild;
+				}
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parse
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void parse() {
-    LayoutInterval rootGroupH = null;
-    LayoutInterval rootGroupV = null;
-    {
-      try {
-        rootGroupH = parseGroup(SIGNATURE_SET_HORIZONTAL_GROUP, HORIZONTAL);
-        rootGroupV = parseGroup(SIGNATURE_SET_VERTICAL_GROUP, VERTICAL);
-      } catch (Throwable e) {
-        throw new DesignerException(1100, e);
-      }
-      if (rootGroupH == null || rootGroupV == null) {
-        throw new DesignerException(1100);
-      }
-    }
-    // root component should already exist!
-    LayoutInterval[] rootIntervals = getRootComponent().getLayoutRoots().get(0);
-    rootIntervals[HORIZONTAL] = rootGroupH;
-    rootIntervals[VERTICAL] = rootGroupV;
-    // parse linked sizes
-    parseLinkedSizes();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parse
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void parse() {
+		LayoutInterval rootGroupH = null;
+		LayoutInterval rootGroupV = null;
+		{
+			try {
+				rootGroupH = parseGroup(SIGNATURE_SET_HORIZONTAL_GROUP, HORIZONTAL);
+				rootGroupV = parseGroup(SIGNATURE_SET_VERTICAL_GROUP, VERTICAL);
+			} catch (Throwable e) {
+				throw new DesignerException(1100, e);
+			}
+			if (rootGroupH == null || rootGroupV == null) {
+				throw new DesignerException(1100);
+			}
+		}
+		// root component should already exist!
+		LayoutInterval[] rootIntervals = getRootComponent().getLayoutRoots().get(0);
+		rootIntervals[HORIZONTAL] = rootGroupH;
+		rootIntervals[VERTICAL] = rootGroupV;
+		// parse linked sizes
+		parseLinkedSizes();
+	}
 
-  private LayoutInterval parseGroup(String methodName, int dimension) {
-    MethodInvocation invocation = getJavaInfo().getMethodInvocation(methodName);
-    if (invocation != null) {
-      GroupLayoutParserVisitor2 parser =
-          new GroupLayoutParserVisitor2(getLayout().getLayoutContainer(), dimension, this);
-      invocation.accept(parser);
-      return checkRootGroup(parser.getRootGroup());
-    } else {
-      // no method invocation
-      return new LayoutInterval(PARALLEL);
-    }
-  }
+	private LayoutInterval parseGroup(String methodName, int dimension) {
+		MethodInvocation invocation = getJavaInfo().getMethodInvocation(methodName);
+		if (invocation != null) {
+			GroupLayoutParserVisitor2 parser =
+					new GroupLayoutParserVisitor2(getLayout().getLayoutContainer(), dimension, this);
+			invocation.accept(parser);
+			return checkRootGroup(parser.getRootGroup());
+		} else {
+			// no method invocation
+			return new LayoutInterval(PARALLEL);
+		}
+	}
 
-  /**
-   * Netbeans model requires root group always as PARALLEL type. Hand-coded UI or other UI builders
-   * may skip this type of group if it has the only one child. The workaround is go move root group
-   * inside new parallel group.
-   */
-  private LayoutInterval checkRootGroup(LayoutInterval root) {
-    if (!root.isParallel()) {
-      LayoutInterval newRoot = new LayoutInterval(PARALLEL);
-      newRoot.add(root, -1);
-      return newRoot;
-    }
-    return root;
-  }
+	/**
+	 * Netbeans model requires root group always as PARALLEL type. Hand-coded UI or other UI builders
+	 * may skip this type of group if it has the only one child. The workaround is go move root group
+	 * inside new parallel group.
+	 */
+	private LayoutInterval checkRootGroup(LayoutInterval root) {
+		if (!root.isParallel()) {
+			LayoutInterval newRoot = new LayoutInterval(PARALLEL);
+			newRoot.add(root, -1);
+			return newRoot;
+		}
+		return root;
+	}
 
-  private void parseLinkedSizes() {
-    int linkID = 0;
-    for (MethodInvocation invocation : getJavaInfo().getMethodInvocations(SIGNATURE_LINK_SIZE)) {
-      List<Expression> arguments = DomGenerics.arguments(invocation);
-      Expression arg = arguments.get(0);
-      // old way
-      if (arg instanceof ArrayCreation) {
-        ArrayCreation arrayCreation = (ArrayCreation) arg;
-        ArrayInitializer arrayInitializer = arrayCreation.getInitializer();
-        List<Expression> expressions = DomGenerics.expressions(arrayInitializer);
-        for (Expression expression : expressions) {
-          addLinkedSize(linkID, expression);
-        }
-      } else {
-        // list of components as args should be here
-        for (int i = 0; i < arguments.size(); ++i) {
-          addLinkedSize(linkID, arguments.get(i));
-        }
-      }
-      linkID++;
-    }
-    for (MethodInvocation invocation : getJavaInfo().getMethodInvocations(SIGNATURE_LINK_SIZE_AXIS)) {
-      List<Expression> arguments = DomGenerics.arguments(invocation);
-      Expression axisArg = arguments.get(0);
-      int componentsArgIndex = 1;
-      if (arguments.size() == 2 && axisArg instanceof ArrayCreation) {
-        // standalone lib and SWT
-        axisArg = arguments.get(1);
-        componentsArgIndex = 0;
-      }
-      int axis = convertDimension((Integer) JavaInfoEvaluationHelper.getValue(axisArg));
-      Expression arg = arguments.get(componentsArgIndex);
-      // old way
-      if (arg instanceof ArrayCreation) {
-        ArrayCreation arrayCreation = (ArrayCreation) arg;
-        ArrayInitializer arrayInitializer = arrayCreation.getInitializer();
-        List<Expression> expressions = DomGenerics.expressions(arrayInitializer);
-        for (Expression expression : expressions) {
-          addLinkedSize(axis, linkID, expression);
-        }
-      } else {
-        // list of components as args should be here
-        for (int i = 1; i < arguments.size(); ++i) {
-          addLinkedSize(axis, linkID, arguments.get(i));
-        }
-      }
-      linkID++;
-    }
-  }
+	private void parseLinkedSizes() {
+		int linkID = 0;
+		for (MethodInvocation invocation : getJavaInfo().getMethodInvocations(SIGNATURE_LINK_SIZE)) {
+			List<Expression> arguments = DomGenerics.arguments(invocation);
+			Expression arg = arguments.get(0);
+			// old way
+			if (arg instanceof ArrayCreation) {
+				ArrayCreation arrayCreation = (ArrayCreation) arg;
+				ArrayInitializer arrayInitializer = arrayCreation.getInitializer();
+				List<Expression> expressions = DomGenerics.expressions(arrayInitializer);
+				for (Expression expression : expressions) {
+					addLinkedSize(linkID, expression);
+				}
+			} else {
+				// list of components as args should be here
+				for (int i = 0; i < arguments.size(); ++i) {
+					addLinkedSize(linkID, arguments.get(i));
+				}
+			}
+			linkID++;
+		}
+		for (MethodInvocation invocation : getJavaInfo().getMethodInvocations(SIGNATURE_LINK_SIZE_AXIS)) {
+			List<Expression> arguments = DomGenerics.arguments(invocation);
+			Expression axisArg = arguments.get(0);
+			int componentsArgIndex = 1;
+			if (arguments.size() == 2 && axisArg instanceof ArrayCreation) {
+				// standalone lib and SWT
+				axisArg = arguments.get(1);
+				componentsArgIndex = 0;
+			}
+			int axis = convertDimension((Integer) JavaInfoEvaluationHelper.getValue(axisArg));
+			Expression arg = arguments.get(componentsArgIndex);
+			// old way
+			if (arg instanceof ArrayCreation) {
+				ArrayCreation arrayCreation = (ArrayCreation) arg;
+				ArrayInitializer arrayInitializer = arrayCreation.getInitializer();
+				List<Expression> expressions = DomGenerics.expressions(arrayInitializer);
+				for (Expression expression : expressions) {
+					addLinkedSize(axis, linkID, expression);
+				}
+			} else {
+				// list of components as args should be here
+				for (int i = 1; i < arguments.size(); ++i) {
+					addLinkedSize(axis, linkID, arguments.get(i));
+				}
+			}
+			linkID++;
+		}
+	}
 
-  private void addLinkedSize(int linkID, Expression expression) {
-    JavaInfo component = getJavaInfo(expression);
-    String id = ObjectInfoUtils.getId(component);
-    getLayout().getLayoutModel().addComponentToLinkSizedGroup(linkID, id, HORIZONTAL);
-    getLayout().getLayoutModel().addComponentToLinkSizedGroup(linkID, id, VERTICAL);
-  }
+	private void addLinkedSize(int linkID, Expression expression) {
+		JavaInfo component = getJavaInfo(expression);
+		String id = ObjectInfoUtils.getId(component);
+		getLayout().getLayoutModel().addComponentToLinkSizedGroup(linkID, id, HORIZONTAL);
+		getLayout().getLayoutModel().addComponentToLinkSizedGroup(linkID, id, VERTICAL);
+	}
 
-  private void addLinkedSize(int axis, int linkID, Expression expression) {
-    JavaInfo component = getJavaInfo(expression);
-    String id = ObjectInfoUtils.getId(component);
-    getLayout().getLayoutModel().addComponentToLinkSizedGroup(linkID, id, axis);
-  }
+	private void addLinkedSize(int axis, int linkID, Expression expression) {
+		JavaInfo component = getJavaInfo(expression);
+		String id = ObjectInfoUtils.getId(component);
+		getLayout().getLayoutModel().addComponentToLinkSizedGroup(linkID, id, axis);
+	}
 
-  protected int convertDimension(int dimension) {
-    return dimension;
-  }
+	protected int convertDimension(int dimension) {
+		return dimension;
+	}
 
-  protected abstract void checkComponent(AbstractComponentInfo component, int dimension);
+	protected abstract void checkComponent(AbstractComponentInfo component, int dimension);
 
-  protected abstract void setGroupAlignment(LayoutInterval group, Expression arg);
+	protected abstract void setGroupAlignment(LayoutInterval group, Expression arg);
 
-  protected abstract void setAlignment(LayoutInterval interval, Expression arg);
+	protected abstract void setAlignment(LayoutInterval interval, Expression arg);
 
-  protected abstract void setPaddingType(LayoutInterval gap, Expression arg);
+	protected abstract void setPaddingType(LayoutInterval gap, Expression arg);
 
-  protected abstract boolean isComponent(Expression arg);
+	protected abstract boolean isComponent(Expression arg);
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Save
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void saveLayout(List<AbstractComponentInfo> components) throws Exception {
-    // remove all previous layout code
-    JavaInfo layoutJavaInfo = getJavaInfo();
-    layoutJavaInfo.removeMethodInvocations(SIGNATURE_SET_HORIZONTAL_GROUP);
-    layoutJavaInfo.removeMethodInvocations(SIGNATURE_SET_VERTICAL_GROUP);
-    layoutJavaInfo.removeMethodInvocations(SIGNATURE_LINK_SIZE);
-    layoutJavaInfo.removeMethodInvocations(SIGNATURE_LINK_SIZE_AXIS);
-    // add generated code
-    // prepare
-    String layoutCode = prepareLayoutCode(components);
-    // fill layout
-    String horizontalGroupCode = extractGroupCode(layoutCode, ID_SET_HORIZONTAL_GROUP);
-    String verticalGroupCode = extractGroupCode(layoutCode, ID_SET_VERTICAL_GROUP);
-    {
-      layoutJavaInfo.addMethodInvocation(SIGNATURE_SET_HORIZONTAL_GROUP, horizontalGroupCode);
-      layoutJavaInfo.addMethodInvocation(SIGNATURE_SET_VERTICAL_GROUP, verticalGroupCode);
-    }
-    // linked size components
-    List<String> linkSizesCode = extractLinkSizeCode(layoutCode);
-    for (String linkSizeCode : linkSizesCode) {
-      layoutJavaInfo.addMethodInvocation(SIGNATURE_LINK_SIZE_AXIS, linkSizeCode);
-    }
-    // TODO: add 'pack()' method invocation if needed
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Save
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void saveLayout(List<AbstractComponentInfo> components) throws Exception {
+		// remove all previous layout code
+		JavaInfo layoutJavaInfo = getJavaInfo();
+		layoutJavaInfo.removeMethodInvocations(SIGNATURE_SET_HORIZONTAL_GROUP);
+		layoutJavaInfo.removeMethodInvocations(SIGNATURE_SET_VERTICAL_GROUP);
+		layoutJavaInfo.removeMethodInvocations(SIGNATURE_LINK_SIZE);
+		layoutJavaInfo.removeMethodInvocations(SIGNATURE_LINK_SIZE_AXIS);
+		// add generated code
+		// prepare
+		String layoutCode = prepareLayoutCode(components);
+		// fill layout
+		String horizontalGroupCode = extractGroupCode(layoutCode, ID_SET_HORIZONTAL_GROUP);
+		String verticalGroupCode = extractGroupCode(layoutCode, ID_SET_VERTICAL_GROUP);
+		{
+			layoutJavaInfo.addMethodInvocation(SIGNATURE_SET_HORIZONTAL_GROUP, horizontalGroupCode);
+			layoutJavaInfo.addMethodInvocation(SIGNATURE_SET_VERTICAL_GROUP, verticalGroupCode);
+		}
+		// linked size components
+		List<String> linkSizesCode = extractLinkSizeCode(layoutCode);
+		for (String linkSizeCode : linkSizesCode) {
+			layoutJavaInfo.addMethodInvocation(SIGNATURE_LINK_SIZE_AXIS, linkSizeCode);
+		}
+		// TODO: add 'pack()' method invocation if needed
+	}
 
-  private String extractGroupCode(String layoutCode, String invocationString) {
-    int beginIndex = layoutCode.indexOf(invocationString);
-    if (beginIndex == -1) {
-      throw new DesignerException(1200);
-    }
-    beginIndex += invocationString.length();
-    int endIndex = layoutCode.indexOf(";", beginIndex);
-    if (endIndex == -1) {
-      throw new DesignerException(1200);
-    }
-    String result = layoutCode.substring(beginIndex + 1, endIndex - 1);
-    return result;
-  }
+	private String extractGroupCode(String layoutCode, String invocationString) {
+		int beginIndex = layoutCode.indexOf(invocationString);
+		if (beginIndex == -1) {
+			throw new DesignerException(1200);
+		}
+		beginIndex += invocationString.length();
+		int endIndex = layoutCode.indexOf(";", beginIndex);
+		if (endIndex == -1) {
+			throw new DesignerException(1200);
+		}
+		String result = layoutCode.substring(beginIndex + 1, endIndex - 1);
+		return result;
+	}
 
-  private List<String> extractLinkSizeCode(String layoutCode) {
-    List<String> result = Lists.newArrayList();
-    int beginIndex = 0;
-    while (true) {
-      beginIndex = layoutCode.indexOf(ID_LINK_SIZE, beginIndex);
-      if (beginIndex == -1) {
-        // nothing (more) found
-        break;
-      }
-      beginIndex += ID_LINK_SIZE.length();
-      int endIndex = layoutCode.indexOf(";", beginIndex);
-      if (endIndex == -1) {
-        // probably should throw an exception?
-        break;
-      }
-      String code = layoutCode.substring(beginIndex + 1, endIndex - 1);
-      result.add(code);
-      beginIndex = endIndex;
-    }
-    return result;
-  }
+	private List<String> extractLinkSizeCode(String layoutCode) {
+		List<String> result = Lists.newArrayList();
+		int beginIndex = 0;
+		while (true) {
+			beginIndex = layoutCode.indexOf(ID_LINK_SIZE, beginIndex);
+			if (beginIndex == -1) {
+				// nothing (more) found
+				break;
+			}
+			beginIndex += ID_LINK_SIZE.length();
+			int endIndex = layoutCode.indexOf(";", beginIndex);
+			if (endIndex == -1) {
+				// probably should throw an exception?
+				break;
+			}
+			String code = layoutCode.substring(beginIndex + 1, endIndex - 1);
+			result.add(code);
+			beginIndex = endIndex;
+		}
+		return result;
+	}
 
-  protected final String getLayoutReference() throws Exception {
-    StatementTarget target = getJavaInfo().getVariableSupport().getStatementTarget();
-    return getJavaInfo().getVariableSupport().getReferenceExpression(new NodeTarget(target));
-  }
+	protected final String getLayoutReference() throws Exception {
+		StatementTarget target = getJavaInfo().getVariableSupport().getStatementTarget();
+		return getJavaInfo().getVariableSupport().getReferenceExpression(new NodeTarget(target));
+	}
 
-  protected abstract String prepareLayoutCode(List<AbstractComponentInfo> components)
-      throws Exception;
+	protected abstract String prepareLayoutCode(List<AbstractComponentInfo> components)
+			throws Exception;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Misc
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected final IGroupLayoutInfo getLayout() {
-    return m_layoutAdaptable.getAdapter(IGroupLayoutInfo.class);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Misc
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected final IGroupLayoutInfo getLayout() {
+		return m_layoutAdaptable.getAdapter(IGroupLayoutInfo.class);
+	}
 
-  private JavaInfo getJavaInfo() {
-    return m_layoutAdaptable.getAdapter(JavaInfo.class);
-  }
+	private JavaInfo getJavaInfo() {
+		return m_layoutAdaptable.getAdapter(JavaInfo.class);
+	}
 
-  private JavaInfo getJavaInfo(Expression expression) {
-    return JavaInfoResolver.getJavaInfo(getJavaInfo(), expression);
-  }
+	private JavaInfo getJavaInfo(Expression expression) {
+		return JavaInfoResolver.getJavaInfo(getJavaInfo(), expression);
+	}
 
-  protected final LayoutComponent getRootComponent() {
-    return getLayout().getLayoutModel().getLayoutComponent(
-        ObjectInfoUtils.getId(getLayout().getLayoutContainer()));
-  }
+	protected final LayoutComponent getRootComponent() {
+		return getLayout().getLayoutModel().getLayoutComponent(
+				ObjectInfoUtils.getId(getLayout().getLayoutContainer()));
+	}
 
-  public LayoutModel getLayoutModel() {
-    return getLayout().getLayoutModel();
-  }
+	public LayoutModel getLayoutModel() {
+		return getLayout().getLayoutModel();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.layout.group/src/org/eclipse/wb/internal/layout/group/model/GroupLayoutParserVisitor2.java b/org.eclipse.wb.layout.group/src/org/eclipse/wb/internal/layout/group/model/GroupLayoutParserVisitor2.java
index 58683a383..4b41382cd 100644
--- a/org.eclipse.wb.layout.group/src/org/eclipse/wb/internal/layout/group/model/GroupLayoutParserVisitor2.java
+++ b/org.eclipse.wb.layout.group/src/org/eclipse/wb/internal/layout/group/model/GroupLayoutParserVisitor2.java
@@ -30,300 +30,300 @@
 import org.netbeans.modules.form.layoutdesign.LayoutModel;
 
 final class GroupLayoutParserVisitor2 extends ASTVisitor implements LayoutConstants {
-  private final String m_methodName;
-  private final AbstractComponentInfo m_container;
-  private LayoutInterval m_rootGroup;
-  private final LayoutModel m_layoutModel;
-  private final int m_dimension;
-  private final GroupLayoutCodeSupport m_codeSupport;
+	private final String m_methodName;
+	private final AbstractComponentInfo m_container;
+	private LayoutInterval m_rootGroup;
+	private final LayoutModel m_layoutModel;
+	private final int m_dimension;
+	private final GroupLayoutCodeSupport m_codeSupport;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public GroupLayoutParserVisitor2(AbstractComponentInfo container,
-      int dimension,
-      GroupLayoutCodeSupport codeSupport) {
-    m_codeSupport = codeSupport;
-    m_layoutModel = codeSupport.getLayoutModel();
-    m_methodName =
-        dimension == HORIZONTAL
-            ? codeSupport.SIGNATURE_SET_HORIZONTAL_GROUP
-            : codeSupport.SIGNATURE_SET_VERTICAL_GROUP;
-    m_container = container;
-    m_dimension = dimension;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public GroupLayoutParserVisitor2(AbstractComponentInfo container,
+			int dimension,
+			GroupLayoutCodeSupport codeSupport) {
+		m_codeSupport = codeSupport;
+		m_layoutModel = codeSupport.getLayoutModel();
+		m_methodName =
+				dimension == HORIZONTAL
+				? codeSupport.SIGNATURE_SET_HORIZONTAL_GROUP
+						: codeSupport.SIGNATURE_SET_VERTICAL_GROUP;
+		m_container = container;
+		m_dimension = dimension;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Visitors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void endVisit(MethodInvocation node) {
-    String identifier = node.getName().getIdentifier();
-    Expression nodeExpression = node.getExpression();
-    int argumentsSize = node.arguments().size();
-    if (identifier.equals(m_codeSupport.ID_ADD_GROUP)
-        || identifier.equals(m_codeSupport.ID_ADD_COMPONENT)
-        || identifier.equals(m_codeSupport.ID_ADD_GAP)) {
-      if (argumentsSize == 0) {
-        throw new IllegalArgumentException("add*() methods with no arguments are not supported.");
-      }
-      Expression arg0 = (Expression) node.arguments().get(0);
-      LayoutInterval parentGroup =
-          (LayoutInterval) nodeExpression.getProperty(GroupLayoutCodeSupport.PROPERTY_NAME_GROUP);
-      // addGroup(Group group)
-      if (AstNodeUtils.isSuccessorOf(arg0, m_codeSupport.GROUP_LAYOUT_GROUP_CLASS_NAME)) {
-        // add group into group
-        LayoutInterval group =
-            (LayoutInterval) arg0.getProperty(GroupLayoutCodeSupport.PROPERTY_NAME_GROUP);
-        parentGroup.add(group, -1);
-        node.setProperty(GroupLayoutCodeSupport.PROPERTY_NAME_GROUP, parentGroup);
-      }
-      if (argumentsSize == 2) {
-        Expression arg1 = (Expression) node.arguments().get(1);
-        // addGroup(Aligment, Group group)
-        if (AstNodeUtils.isSuccessorOf(arg1, m_codeSupport.GROUP_LAYOUT_GROUP_CLASS_NAME)
-            && identifier.equals(m_codeSupport.ID_ADD_GROUP)) {
-          // add group into group
-          LayoutInterval group =
-              (LayoutInterval) arg1.getProperty(GroupLayoutCodeSupport.PROPERTY_NAME_GROUP);
-          m_codeSupport.setGroupAlignment(parentGroup, arg0);
-          parentGroup.add(group, -1);
-          node.setProperty(GroupLayoutCodeSupport.PROPERTY_NAME_GROUP, parentGroup);
-        }
-      }
-      // addComponent(Component component)
-      if ((argumentsSize == 1 || argumentsSize == 4) && m_codeSupport.isComponent(arg0)) {
-        JavaInfo widget = JavaInfoResolver.getJavaInfo(m_container, arg0);
-        LayoutInterval group =
-            (LayoutInterval) nodeExpression.getProperty(GroupLayoutCodeSupport.PROPERTY_NAME_GROUP);
-        if (widget != null) {
-          LayoutInterval interval = addChild((AbstractComponentInfo) widget, arg0);
-          // addComponent(Component component, int min, int pref, int max)
-          if (argumentsSize == 4) {
-            setSizes(
-                interval,
-                (Expression) node.arguments().get(1),
-                (Expression) node.arguments().get(2),
-                (Expression) node.arguments().get(3));
-          }
-          group.add(interval, -1);
-        }
-        node.setProperty(GroupLayoutCodeSupport.PROPERTY_NAME_GROUP, group);
-        return;
-      }
-      // addGap(int pref)
-      if (AstNodeUtils.isSuccessorOf(arg0, int.class) && argumentsSize == 1) {
-        LayoutInterval group =
-            (LayoutInterval) nodeExpression.getProperty(GroupLayoutCodeSupport.PROPERTY_NAME_GROUP);
-        LayoutInterval space = new LayoutInterval(SINGLE);
-        setSize(space, (Expression) node.arguments().get(0));
-        group.add(space, -1);
-        node.setProperty(GroupLayoutCodeSupport.PROPERTY_NAME_GROUP, group);
-      }
-      // addGap(int min, int pref, int max)
-      if (AstNodeUtils.isSuccessorOf(arg0, int.class) && argumentsSize == 3) {
-        LayoutInterval group =
-            (LayoutInterval) nodeExpression.getProperty(GroupLayoutCodeSupport.PROPERTY_NAME_GROUP);
-        LayoutInterval space = new LayoutInterval(SINGLE);
-        setSizes(
-            space,
-            (Expression) node.arguments().get(0),
-            (Expression) node.arguments().get(1),
-            (Expression) node.arguments().get(2));
-        group.add(space, -1);
-        node.setProperty(GroupLayoutCodeSupport.PROPERTY_NAME_GROUP, group);
-      }
-      if (argumentsSize > 1
-          && argumentsSize != 4
-          && identifier.equals(m_codeSupport.ID_ADD_COMPONENT)) {
-        // addComponent(Component component, Alignment alignment)
-        JavaInfo widget = null;
-        LayoutInterval group =
-            (LayoutInterval) nodeExpression.getProperty(GroupLayoutCodeSupport.PROPERTY_NAME_GROUP);
-        Expression arg1 = (Expression) node.arguments().get(1);
-        Expression widgetArg;
-        Expression alignmentArg;
-        if (m_codeSupport.isComponent(arg0)) {
-          // JDK GL
-          widgetArg = arg0;
-          alignmentArg = arg1;
-        } else {
-          // standalone GL & SWT GL
-          widgetArg = arg1;
-          alignmentArg = arg0;
-        }
-        widget = JavaInfoResolver.getJavaInfo(m_container, widgetArg);
-        if (widget != null) {
-          LayoutInterval interval = addChild((AbstractComponentInfo) widget, widgetArg);
-          m_codeSupport.setAlignment(interval, alignmentArg);
-          // addComponent(Component component, Alignment alignment, int min, int pref, int max)
-          if (argumentsSize == 5) {
-            setSizes(
-                interval,
-                (Expression) node.arguments().get(2),
-                (Expression) node.arguments().get(3),
-                (Expression) node.arguments().get(4));
-          }
-          group.add(interval, -1);
-        }
-        node.setProperty(GroupLayoutCodeSupport.PROPERTY_NAME_GROUP, group);
-      }
-    } else if (identifier.equals(GroupLayoutCodeSupport.ID_ADD_PREFERRED_GAP)) {
-      LayoutInterval group =
-          (LayoutInterval) nodeExpression.getProperty(GroupLayoutCodeSupport.PROPERTY_NAME_GROUP);
-      if (group.isSequential()) {
-        LayoutInterval space = new LayoutInterval(SINGLE);
-        switch (argumentsSize) {
-          case 1 :
-            // addPreferredGap(ComponentPlacement)
-            m_codeSupport.setPaddingType(space, (Expression) node.arguments().get(0));
-            break;
-          case 3 :
-          case 4 : {
-            // also cover standalone lib methods
-            Expression arg0 = (Expression) node.arguments().get(0);
-            Expression arg1 = (Expression) node.arguments().get(1);
-            if (m_codeSupport.isComponent(arg0) && m_codeSupport.isComponent(arg1)) {
-              // addPreferredGap(JComponent, JComponent, ComponentPlacement)
-              m_codeSupport.setPaddingType(space, (Expression) node.arguments().get(2));
-            } else {
-              // addPreferredGap(ComponentPlacement, int, int)
-              m_codeSupport.setPaddingType(space, (Expression) node.arguments().get(0));
-              setSizes(
-                  space,
-                  (Expression) node.arguments().get(1),
-                  (Expression) node.arguments().get(2));
-            }
-            break;
-          }
-          case 5 :
-            // addPreferredGap(JComponent, JComponent, ComponentPlacement, int, int)
-            m_codeSupport.setPaddingType(space, (Expression) node.arguments().get(2));
-            setSizes(
-                space,
-                (Expression) node.arguments().get(3),
-                (Expression) node.arguments().get(4));
-            break;
-        }
-        group.add(space, -1);
-      }
-      node.setProperty(GroupLayoutCodeSupport.PROPERTY_NAME_GROUP, group);
-    } else if (identifier.equals(GroupLayoutCodeSupport.ID_ADD_CONTAINER_GAP)) {
-      LayoutInterval group =
-          (LayoutInterval) nodeExpression.getProperty(GroupLayoutCodeSupport.PROPERTY_NAME_GROUP);
-      LayoutInterval space = new LayoutInterval(SINGLE);
-      if (argumentsSize == 2) {
-        setGapSizes(
-            space,
-            (Expression) node.arguments().get(0),
-            (Expression) node.arguments().get(1));
-      }
-      group.add(space, -1);
-      node.setProperty(GroupLayoutCodeSupport.PROPERTY_NAME_GROUP, group);
-    } else if (identifier.equals(GroupLayoutCodeSupport.ID_CREATE_SEQUENTIAL_GROUP)
-        && argumentsSize == 0) {
-      LayoutInterval sequentialGroup = new LayoutInterval(SEQUENTIAL);
-      node.setProperty(GroupLayoutCodeSupport.PROPERTY_NAME_GROUP, sequentialGroup);
-    } else if (identifier.equals(GroupLayoutCodeSupport.ID_CREATE_PARALLEL_GROUP)) {
-      LayoutInterval parallelGroup = new LayoutInterval(PARALLEL);
-      if (argumentsSize > 0) {
-        m_codeSupport.setGroupAlignment(parallelGroup, (Expression) node.arguments().get(0));
-        // createParallelGroup(Alignment, boolean)
-        if (argumentsSize > 1) {
-          setGroupResizeable(parallelGroup, (Expression) node.arguments().get(1));
-        }
-      }
-      node.setProperty(GroupLayoutCodeSupport.PROPERTY_NAME_GROUP, parallelGroup);
-    } else if (identifier.equals(GroupLayoutCodeSupport.ID_CREATE_BASELINE_GROUP)) {
-      // createBaselineGroup(boolean, boolean)
-      LayoutInterval parallelGroup = new LayoutInterval(PARALLEL);
-      parallelGroup.setGroupAlignment(BASELINE);
-      if (argumentsSize > 0) {
-        setGroupResizeable(parallelGroup, (Expression) node.arguments().get(0));
-      }
-      node.setProperty(GroupLayoutCodeSupport.PROPERTY_NAME_GROUP, parallelGroup);
-    } else if (m_methodName.startsWith(identifier) && node.arguments().size() == 1) {
-      ASTNode arg0 = (ASTNode) node.arguments().get(0);
-      if (arg0 instanceof MethodInvocation) {
-        MethodInvocation mi = (MethodInvocation) arg0;
-        m_rootGroup = (LayoutInterval) mi.getProperty(GroupLayoutCodeSupport.PROPERTY_NAME_GROUP);
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Visitors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void endVisit(MethodInvocation node) {
+		String identifier = node.getName().getIdentifier();
+		Expression nodeExpression = node.getExpression();
+		int argumentsSize = node.arguments().size();
+		if (identifier.equals(m_codeSupport.ID_ADD_GROUP)
+				|| identifier.equals(m_codeSupport.ID_ADD_COMPONENT)
+				|| identifier.equals(m_codeSupport.ID_ADD_GAP)) {
+			if (argumentsSize == 0) {
+				throw new IllegalArgumentException("add*() methods with no arguments are not supported.");
+			}
+			Expression arg0 = (Expression) node.arguments().get(0);
+			LayoutInterval parentGroup =
+					(LayoutInterval) nodeExpression.getProperty(GroupLayoutCodeSupport.PROPERTY_NAME_GROUP);
+			// addGroup(Group group)
+			if (AstNodeUtils.isSuccessorOf(arg0, m_codeSupport.GROUP_LAYOUT_GROUP_CLASS_NAME)) {
+				// add group into group
+				LayoutInterval group =
+						(LayoutInterval) arg0.getProperty(GroupLayoutCodeSupport.PROPERTY_NAME_GROUP);
+				parentGroup.add(group, -1);
+				node.setProperty(GroupLayoutCodeSupport.PROPERTY_NAME_GROUP, parentGroup);
+			}
+			if (argumentsSize == 2) {
+				Expression arg1 = (Expression) node.arguments().get(1);
+				// addGroup(Aligment, Group group)
+				if (AstNodeUtils.isSuccessorOf(arg1, m_codeSupport.GROUP_LAYOUT_GROUP_CLASS_NAME)
+						&& identifier.equals(m_codeSupport.ID_ADD_GROUP)) {
+					// add group into group
+					LayoutInterval group =
+							(LayoutInterval) arg1.getProperty(GroupLayoutCodeSupport.PROPERTY_NAME_GROUP);
+					m_codeSupport.setGroupAlignment(parentGroup, arg0);
+					parentGroup.add(group, -1);
+					node.setProperty(GroupLayoutCodeSupport.PROPERTY_NAME_GROUP, parentGroup);
+				}
+			}
+			// addComponent(Component component)
+			if ((argumentsSize == 1 || argumentsSize == 4) && m_codeSupport.isComponent(arg0)) {
+				JavaInfo widget = JavaInfoResolver.getJavaInfo(m_container, arg0);
+				LayoutInterval group =
+						(LayoutInterval) nodeExpression.getProperty(GroupLayoutCodeSupport.PROPERTY_NAME_GROUP);
+				if (widget != null) {
+					LayoutInterval interval = addChild((AbstractComponentInfo) widget, arg0);
+					// addComponent(Component component, int min, int pref, int max)
+					if (argumentsSize == 4) {
+						setSizes(
+								interval,
+								(Expression) node.arguments().get(1),
+								(Expression) node.arguments().get(2),
+								(Expression) node.arguments().get(3));
+					}
+					group.add(interval, -1);
+				}
+				node.setProperty(GroupLayoutCodeSupport.PROPERTY_NAME_GROUP, group);
+				return;
+			}
+			// addGap(int pref)
+			if (AstNodeUtils.isSuccessorOf(arg0, int.class) && argumentsSize == 1) {
+				LayoutInterval group =
+						(LayoutInterval) nodeExpression.getProperty(GroupLayoutCodeSupport.PROPERTY_NAME_GROUP);
+				LayoutInterval space = new LayoutInterval(SINGLE);
+				setSize(space, (Expression) node.arguments().get(0));
+				group.add(space, -1);
+				node.setProperty(GroupLayoutCodeSupport.PROPERTY_NAME_GROUP, group);
+			}
+			// addGap(int min, int pref, int max)
+			if (AstNodeUtils.isSuccessorOf(arg0, int.class) && argumentsSize == 3) {
+				LayoutInterval group =
+						(LayoutInterval) nodeExpression.getProperty(GroupLayoutCodeSupport.PROPERTY_NAME_GROUP);
+				LayoutInterval space = new LayoutInterval(SINGLE);
+				setSizes(
+						space,
+						(Expression) node.arguments().get(0),
+						(Expression) node.arguments().get(1),
+						(Expression) node.arguments().get(2));
+				group.add(space, -1);
+				node.setProperty(GroupLayoutCodeSupport.PROPERTY_NAME_GROUP, group);
+			}
+			if (argumentsSize > 1
+					&& argumentsSize != 4
+					&& identifier.equals(m_codeSupport.ID_ADD_COMPONENT)) {
+				// addComponent(Component component, Alignment alignment)
+				JavaInfo widget = null;
+				LayoutInterval group =
+						(LayoutInterval) nodeExpression.getProperty(GroupLayoutCodeSupport.PROPERTY_NAME_GROUP);
+				Expression arg1 = (Expression) node.arguments().get(1);
+				Expression widgetArg;
+				Expression alignmentArg;
+				if (m_codeSupport.isComponent(arg0)) {
+					// JDK GL
+					widgetArg = arg0;
+					alignmentArg = arg1;
+				} else {
+					// standalone GL & SWT GL
+					widgetArg = arg1;
+					alignmentArg = arg0;
+				}
+				widget = JavaInfoResolver.getJavaInfo(m_container, widgetArg);
+				if (widget != null) {
+					LayoutInterval interval = addChild((AbstractComponentInfo) widget, widgetArg);
+					m_codeSupport.setAlignment(interval, alignmentArg);
+					// addComponent(Component component, Alignment alignment, int min, int pref, int max)
+					if (argumentsSize == 5) {
+						setSizes(
+								interval,
+								(Expression) node.arguments().get(2),
+								(Expression) node.arguments().get(3),
+								(Expression) node.arguments().get(4));
+					}
+					group.add(interval, -1);
+				}
+				node.setProperty(GroupLayoutCodeSupport.PROPERTY_NAME_GROUP, group);
+			}
+		} else if (identifier.equals(GroupLayoutCodeSupport.ID_ADD_PREFERRED_GAP)) {
+			LayoutInterval group =
+					(LayoutInterval) nodeExpression.getProperty(GroupLayoutCodeSupport.PROPERTY_NAME_GROUP);
+			if (group.isSequential()) {
+				LayoutInterval space = new LayoutInterval(SINGLE);
+				switch (argumentsSize) {
+				case 1 :
+					// addPreferredGap(ComponentPlacement)
+					m_codeSupport.setPaddingType(space, (Expression) node.arguments().get(0));
+					break;
+				case 3 :
+				case 4 : {
+					// also cover standalone lib methods
+					Expression arg0 = (Expression) node.arguments().get(0);
+					Expression arg1 = (Expression) node.arguments().get(1);
+					if (m_codeSupport.isComponent(arg0) && m_codeSupport.isComponent(arg1)) {
+						// addPreferredGap(JComponent, JComponent, ComponentPlacement)
+						m_codeSupport.setPaddingType(space, (Expression) node.arguments().get(2));
+					} else {
+						// addPreferredGap(ComponentPlacement, int, int)
+						m_codeSupport.setPaddingType(space, (Expression) node.arguments().get(0));
+						setSizes(
+								space,
+								(Expression) node.arguments().get(1),
+								(Expression) node.arguments().get(2));
+					}
+					break;
+				}
+				case 5 :
+					// addPreferredGap(JComponent, JComponent, ComponentPlacement, int, int)
+					m_codeSupport.setPaddingType(space, (Expression) node.arguments().get(2));
+					setSizes(
+							space,
+							(Expression) node.arguments().get(3),
+							(Expression) node.arguments().get(4));
+					break;
+				}
+				group.add(space, -1);
+			}
+			node.setProperty(GroupLayoutCodeSupport.PROPERTY_NAME_GROUP, group);
+		} else if (identifier.equals(GroupLayoutCodeSupport.ID_ADD_CONTAINER_GAP)) {
+			LayoutInterval group =
+					(LayoutInterval) nodeExpression.getProperty(GroupLayoutCodeSupport.PROPERTY_NAME_GROUP);
+			LayoutInterval space = new LayoutInterval(SINGLE);
+			if (argumentsSize == 2) {
+				setGapSizes(
+						space,
+						(Expression) node.arguments().get(0),
+						(Expression) node.arguments().get(1));
+			}
+			group.add(space, -1);
+			node.setProperty(GroupLayoutCodeSupport.PROPERTY_NAME_GROUP, group);
+		} else if (identifier.equals(GroupLayoutCodeSupport.ID_CREATE_SEQUENTIAL_GROUP)
+				&& argumentsSize == 0) {
+			LayoutInterval sequentialGroup = new LayoutInterval(SEQUENTIAL);
+			node.setProperty(GroupLayoutCodeSupport.PROPERTY_NAME_GROUP, sequentialGroup);
+		} else if (identifier.equals(GroupLayoutCodeSupport.ID_CREATE_PARALLEL_GROUP)) {
+			LayoutInterval parallelGroup = new LayoutInterval(PARALLEL);
+			if (argumentsSize > 0) {
+				m_codeSupport.setGroupAlignment(parallelGroup, (Expression) node.arguments().get(0));
+				// createParallelGroup(Alignment, boolean)
+				if (argumentsSize > 1) {
+					setGroupResizeable(parallelGroup, (Expression) node.arguments().get(1));
+				}
+			}
+			node.setProperty(GroupLayoutCodeSupport.PROPERTY_NAME_GROUP, parallelGroup);
+		} else if (identifier.equals(GroupLayoutCodeSupport.ID_CREATE_BASELINE_GROUP)) {
+			// createBaselineGroup(boolean, boolean)
+			LayoutInterval parallelGroup = new LayoutInterval(PARALLEL);
+			parallelGroup.setGroupAlignment(BASELINE);
+			if (argumentsSize > 0) {
+				setGroupResizeable(parallelGroup, (Expression) node.arguments().get(0));
+			}
+			node.setProperty(GroupLayoutCodeSupport.PROPERTY_NAME_GROUP, parallelGroup);
+		} else if (m_methodName.startsWith(identifier) && node.arguments().size() == 1) {
+			ASTNode arg0 = (ASTNode) node.arguments().get(0);
+			if (arg0 instanceof MethodInvocation) {
+				MethodInvocation mi = (MethodInvocation) arg0;
+				m_rootGroup = (LayoutInterval) mi.getProperty(GroupLayoutCodeSupport.PROPERTY_NAME_GROUP);
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Helper methods
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private LayoutInterval addChild(final AbstractComponentInfo widget,
-      final Expression associationExpression) {
-    return ExecutionUtils.runObject(new RunnableObjectEx<LayoutInterval>() {
-      @Override
-      public LayoutInterval runObject() throws Exception {
-        // widget may be already added to parent using previous dimension parsing
-        if (widget.getParent() == null && !m_container.getChildren().contains(widget)) {
-          m_container.addChild(widget);
-        }
-        // remember last association expression
-        widget.putArbitraryValue(
-            GroupLayoutCodeSupport.ASSOCIATION_EXPRESSION_KEY,
-            associationExpression);
-        //
-        String id = ObjectInfoUtils.getId(widget);
-        LayoutComponent layoutComponent = m_layoutModel.getLayoutComponent(id);
-        if (layoutComponent == null) {
-          layoutComponent = new LayoutComponent(id, false);
-        }
-        if (layoutComponent.getParent() == null) {
-          LayoutComponent root =
-              m_layoutModel.getLayoutComponent(ObjectInfoUtils.getId(m_container));
-          m_layoutModel.addComponent(layoutComponent, root, -1);
-        }
-        m_codeSupport.checkComponent(widget, m_dimension);
-        return layoutComponent.getLayoutInterval(m_dimension);
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Helper methods
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private LayoutInterval addChild(final AbstractComponentInfo widget,
+			final Expression associationExpression) {
+		return ExecutionUtils.runObject(new RunnableObjectEx<LayoutInterval>() {
+			@Override
+			public LayoutInterval runObject() throws Exception {
+				// widget may be already added to parent using previous dimension parsing
+				if (widget.getParent() == null && !m_container.getChildren().contains(widget)) {
+					m_container.addChild(widget);
+				}
+				// remember last association expression
+				widget.putArbitraryValue(
+						GroupLayoutCodeSupport.ASSOCIATION_EXPRESSION_KEY,
+						associationExpression);
+				//
+				String id = ObjectInfoUtils.getId(widget);
+				LayoutComponent layoutComponent = m_layoutModel.getLayoutComponent(id);
+				if (layoutComponent == null) {
+					layoutComponent = new LayoutComponent(id, false);
+				}
+				if (layoutComponent.getParent() == null) {
+					LayoutComponent root =
+							m_layoutModel.getLayoutComponent(ObjectInfoUtils.getId(m_container));
+					m_layoutModel.addComponent(layoutComponent, root, -1);
+				}
+				m_codeSupport.checkComponent(widget, m_dimension);
+				return layoutComponent.getLayoutInterval(m_dimension);
+			}
+		});
+	}
 
-  private void setSize(LayoutInterval interval, Expression val) {
-    Number value = (Number) JavaInfoEvaluationHelper.getValue(val);
-    int intValue = value.intValue();
-    interval.setSizes(intValue, intValue, intValue);
-  }
+	private void setSize(LayoutInterval interval, Expression val) {
+		Number value = (Number) JavaInfoEvaluationHelper.getValue(val);
+		int intValue = value.intValue();
+		interval.setSizes(intValue, intValue, intValue);
+	}
 
-  private void setSizes(LayoutInterval interval, Expression min, Expression pref, Expression max) {
-    Number minValue = (Number) JavaInfoEvaluationHelper.getValue(min);
-    Number prefValue = (Number) JavaInfoEvaluationHelper.getValue(pref);
-    Number maxValue = (Number) JavaInfoEvaluationHelper.getValue(max);
-    interval.setSizes(minValue.intValue(), prefValue.intValue(), maxValue.intValue());
-  }
+	private void setSizes(LayoutInterval interval, Expression min, Expression pref, Expression max) {
+		Number minValue = (Number) JavaInfoEvaluationHelper.getValue(min);
+		Number prefValue = (Number) JavaInfoEvaluationHelper.getValue(pref);
+		Number maxValue = (Number) JavaInfoEvaluationHelper.getValue(max);
+		interval.setSizes(minValue.intValue(), prefValue.intValue(), maxValue.intValue());
+	}
 
-  private void setSizes(LayoutInterval interval, Expression pref, Expression max) {
-    Number prefValue = (Number) JavaInfoEvaluationHelper.getValue(pref);
-    Number maxValue = (Number) JavaInfoEvaluationHelper.getValue(max);
-    interval.setSizes(NOT_EXPLICITLY_DEFINED, prefValue.intValue(), maxValue.intValue());
-  }
+	private void setSizes(LayoutInterval interval, Expression pref, Expression max) {
+		Number prefValue = (Number) JavaInfoEvaluationHelper.getValue(pref);
+		Number maxValue = (Number) JavaInfoEvaluationHelper.getValue(max);
+		interval.setSizes(NOT_EXPLICITLY_DEFINED, prefValue.intValue(), maxValue.intValue());
+	}
 
-  private void setGapSizes(LayoutInterval interval, Expression pref, Expression max) {
-    Number prefValue = (Number) JavaInfoEvaluationHelper.getValue(pref);
-    Number maxValue = (Number) JavaInfoEvaluationHelper.getValue(max);
-    interval.setPreferredSize(prefValue.intValue());
-    interval.setMaximumSize(maxValue.intValue());
-  }
+	private void setGapSizes(LayoutInterval interval, Expression pref, Expression max) {
+		Number prefValue = (Number) JavaInfoEvaluationHelper.getValue(pref);
+		Number maxValue = (Number) JavaInfoEvaluationHelper.getValue(max);
+		interval.setPreferredSize(prefValue.intValue());
+		interval.setMaximumSize(maxValue.intValue());
+	}
 
-  private void setGroupResizeable(final LayoutInterval group, final Expression arg0) {
-    Boolean resizeable = (Boolean) JavaInfoEvaluationHelper.getValue(arg0);
-    if (!resizeable) {
-      group.setMaximumSize(USE_PREFERRED_SIZE);
-    }
-  }
+	private void setGroupResizeable(final LayoutInterval group, final Expression arg0) {
+		Boolean resizeable = (Boolean) JavaInfoEvaluationHelper.getValue(arg0);
+		if (!resizeable) {
+			group.setMaximumSize(USE_PREFERRED_SIZE);
+		}
+	}
 
-  public LayoutInterval getRootGroup() {
-    return m_rootGroup;
-  }
+	public LayoutInterval getRootGroup() {
+		return m_rootGroup;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.layout.group/src/org/eclipse/wb/internal/layout/group/model/GroupLayoutSupport.java b/org.eclipse.wb.layout.group/src/org/eclipse/wb/internal/layout/group/model/GroupLayoutSupport.java
index c36d9dfcf..e5d498623 100644
--- a/org.eclipse.wb.layout.group/src/org/eclipse/wb/internal/layout/group/model/GroupLayoutSupport.java
+++ b/org.eclipse.wb.layout.group/src/org/eclipse/wb/internal/layout/group/model/GroupLayoutSupport.java
@@ -51,345 +51,345 @@
  * @author mitin_aa
  */
 public abstract class GroupLayoutSupport implements IGroupLayoutInfo, LayoutConstants {
-  private final GroupLayoutCodeSupport m_codeSupport;
-  // netbeans model
-  private LayoutModel m_layoutModel;
-  private LayoutDesigner m_layoutDesigner;
-  private LayoutComponent m_root;
-  private JavaInfo m_layout;
-  private final VisualMapper m_visualMapper;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public GroupLayoutSupport(JavaInfo layout,
-      GroupLayoutCodeSupport codeSupport,
-      VisualMapper visualMapper) {
-    m_layout = layout;
-    m_codeSupport = codeSupport;
-    m_visualMapper = visualMapper;
-    m_layout.addBroadcastListener(new ObjectInfoDelete() {
-      @Override
-      public void before(ObjectInfo parent, ObjectInfo child) throws Exception {
-        if (parent instanceof JavaInfo) {
-          JavaInfo parentJava = (JavaInfo) parent;
-          // don't do any processing if parent is deleting.
-          if (!parentJava.isDeleting()) {
-            if (isOurChild(parent, child) && child instanceof AbstractComponentInfo) {
-              command_delete(child);
-            }
-          }
-        }
-      }
-    });
-    m_layout.addBroadcastListener(new JavaEventListener() {
-      @Override
-      public void bindComponents(List<JavaInfo> components) throws Exception {
-        initializeLayout();
-        parse();
-      }
-
-      private ObjectInfo m_childToDelete;
-
-      @Override
-      public void moveBefore(JavaInfo child, ObjectInfo oldParent, JavaInfo newParent)
-          throws Exception {
-        if (oldParent != newParent && isOurChild(oldParent, child)) {
-          m_childToDelete = child;
-        }
-      }
-
-      @Override
-      public void moveAfter(JavaInfo child, ObjectInfo oldParent, JavaInfo newParent)
-          throws Exception {
-        if (m_childToDelete != null
-            && child == m_childToDelete
-            && oldParent == getLayoutContainer()
-            && newParent != oldParent) {
-          try {
-            command_delete(child);
-          } finally {
-            m_childToDelete = null;
-          }
-        }
-      }
-
-      @Override
-      public void replaceChildAfter(JavaInfo parent, JavaInfo oldChild, JavaInfo newChild)
-          throws Exception {
-        if (oldChild == m_layout) {
-          // support changing 'main' layout JavaInfo instance, used by Swing while converting from old-style layout.
-          m_layout = newChild;
-        } else {
-          LayoutComponent comp = m_layoutModel.getLayoutComponent(ObjectInfoUtils.getId(oldChild));
-          if (comp != null) {
-            m_layoutModel.changeComponentId(comp, ObjectInfoUtils.getId(newChild));
-          }
-        }
-      }
-    });
-    m_layout.addBroadcastListener(new ObjectEventListener() {
-      @Override
-      public void addContextMenu(List<? extends ObjectInfo> objects,
-          ObjectInfo object,
-          IMenuManager manager) throws Exception {
-        if (isRelatedComponent(object)) {
-          contributeComponentContextMenu(manager, (AbstractComponentInfo) object);
-        }
-      }
-
-      @Override
-      public void addSelectionActions(List<ObjectInfo> objects, List<Object> actions)
-          throws Exception {
-        AbstractAlignmentActionsSupport<?> alignmentSupport = getAlignmentActionsSupport();
-        alignmentSupport.addAlignmentActions(objects, actions);
-      }
-
-      @Override
-      public void refreshed() throws Exception {
-        // don't refresh if on 'live' component.
-        if (m_layout.getParent() != null && getLayoutDesigner() != null) {
-          getLayoutDesigner().updateCurrentState();
-        }
-      }
-    });
-    // LA
-    new LayoutAssistantSupport(this);
-  }
-
-  private boolean isOurChild(ObjectInfo parent, ObjectInfo child) {
-    return getLayoutContainer() == parent && parent != null && parent.getChildren().contains(child);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Initialize
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void initializeLayout() {
-    m_layoutModel = new LayoutModel();
-    m_layoutDesigner = new LayoutDesigner(getLayoutModel(), m_visualMapper);
-    m_root = new LayoutComponent(ObjectInfoUtils.getId(getLayoutContainer()), true);
-    getLayoutModel().addRootComponent(m_root);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parse/Save
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected void parse() throws Exception {
-    m_codeSupport.parse();
-    // update associations if needed
-    for (JavaInfo javaInfo : getLayoutChildren()) {
-      AssociationObject associationObject = getAssociationObject();
-      if (associationObject != null) {
-        javaInfo.setAssociation(associationObject.getAssociation());
-      }
-    }
-  }
-
-  @Override
-  public void saveLayout() throws Exception {
-    List<AbstractComponentInfo> components = getLayoutChildren();
-    // set new association if needed
-    for (AbstractComponentInfo component : components) {
-      AssociationObject associationObject = getAssociationObject();
-      if (associationObject != null) {
-        Association association = component.getAssociation();
-        if (association != null
-            && !associationObject.getAssociation().getClass().isAssignableFrom(
-                association.getClass())) {
-          association.remove();
-          component.setAssociation(associationObject.getAssociation());
-        }
-      }
-    }
-    m_codeSupport.saveLayout(components);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // New layout setup
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void onSet() throws Exception {
-    initializeLayout();
-    // prepare components
-    List<AbstractComponentInfo> components = getLayoutChildren();
-    Map<String, Rectangle> boundsMap = Maps.newHashMap();
-    for (AbstractComponentInfo component : components) {
-      // remove association and set new if needed
-      AssociationObject associationObject = getAssociationObject();
-      if (associationObject != null) {
-        Association association = component.getAssociation();
-        if (association != null) {
-          association.remove();
-        }
-        component.setAssociation(associationObject.getAssociation());
-      }
-      // store bounds by id
-      boundsMap.put(
-          ObjectInfoUtils.getId(component),
-          GroupLayoutUtils.getBoundsInLayout(this, component));
-    }
-    // do create layout
-    getLayoutDesigner().copyLayoutFromOutside(
-        boundsMap,
-        ObjectInfoUtils.getId(getLayoutContainer()),
-        false);
-    // update and save
-    getLayoutDesigner().updateCurrentState();
-    saveLayout();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Helpers/Misc
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public LayoutComponent createLayoutComponent(AbstractComponentInfo component) {
-    return new LayoutComponent(ObjectInfoUtils.getId(component), false);
-  }
-
-  /**
-   * @return the list of non-deleted children of this container.
-   */
-  @SuppressWarnings("unchecked")
-  public final List<AbstractComponentInfo> getLayoutChildren() {
-    return (List<AbstractComponentInfo>) CollectionUtils.select(getComponents(), new Predicate() {
-      @Override
-      public boolean evaluate(Object object) {
-        JavaInfo javaInfo = (JavaInfo) object;
-        return !javaInfo.isDeleted() && !javaInfo.isDeleting();
-      }
-    });
-  }
-
-  protected abstract List<?> getComponents();
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands support
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void command_create(AbstractComponentInfo newObject) throws Exception {
-    getLayoutDesigner().endMoving(true);
-    addComponentImpl(newObject);
-    saveLayout();
-  }
-
-  @Override
-  public void command_add(List<AbstractComponentInfo> models) throws Exception {
-    getLayoutDesigner().endMoving(true);
-    for (AbstractComponentInfo newChild : models) {
-      JavaInfoUtils.move(newChild, getAssociationObject(), getLayoutContainer(), null);
-    }
-    saveLayout();
-  }
-
-  @Override
-  public void command_paste(List<JavaInfoMemento> mementos) throws Exception {
-    getLayoutDesigner().endMoving(true);
-    for (JavaInfoMemento memento : mementos) {
-      addComponentImpl((AbstractComponentInfo) memento.create(m_layout));
-      memento.apply();
-    }
-    saveLayout();
-  }
-
-  /**
-   * Adds new component into this layout, removes {@link BlockStatementGenerator} if needed.
-   */
-  public final void addComponentImpl(AbstractComponentInfo newComponent) throws Exception {
-    StatementGenerator statementGenerator = GenerationUtils.getStatementGenerator(newComponent);
-    if (statementGenerator instanceof BlockStatementGenerator) {
-      statementGenerator = PureFlatStatementGenerator.INSTANCE;
-    }
-    JavaInfoUtils.add(
-        newComponent,
-        GenerationUtils.getVariableSupport(newComponent),
-        statementGenerator,
-        getAssociationObject(),
-        getLayoutContainer(),
-        m_layout);
-  }
-
-  @Override
-  public void command_commit() throws Exception {
-    getLayoutDesigner().endMoving(true);
-    saveLayout();
-  }
-
-  protected final void command_delete(ObjectInfo child) throws Exception {
-    getLayoutModel().removeComponent(ObjectInfoUtils.getId(child), true);
-    saveLayout();
-  }
-
-  protected abstract AssociationObject getAssociationObject();
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Popup menu/Selection actions
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void contributeComponentContextMenu(IMenuManager manager, AbstractComponentInfo component) {
-    new AnchorsSupport(this).fillContextMenu(component, manager);
-    MiscActions.fillContextMenu(this, component, manager);
-  }
-
-  private AbstractAlignmentActionsSupport<?> m_alignmentsSupport;
-
-  private AbstractAlignmentActionsSupport<?> getAlignmentActionsSupport() {
-    if (m_alignmentsSupport == null) {
-      m_alignmentsSupport = new AlignmentsSupport<AbstractComponentInfo>(this);
-    }
-    return m_alignmentsSupport;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final LayoutDesigner getLayoutDesigner() {
-    return m_layoutDesigner;
-  }
-
-  @Override
-  public final LayoutModel getLayoutModel() {
-    return m_layoutModel;
-  }
-
-  protected final LayoutComponent getLayoutRoot() {
-    return m_root;
-  }
-
-  protected final JavaInfo getLayout() {
-    return m_layout;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IAdaptable
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public <T> T getAdapter(Class<T> adapter) {
-    if (JavaInfo.class.isAssignableFrom(adapter)) {
-      return adapter.cast(m_layout);
-    } else if (VisualMapper.class.isAssignableFrom(adapter)) {
-      return adapter.cast(m_visualMapper);
-    } else if (IImageProvider.class.isAssignableFrom(adapter)) {
-      return adapter.cast(getImageProvider());
-    }
-    return null;
-  }
-
-  protected abstract IImageProvider getImageProvider();
+	private final GroupLayoutCodeSupport m_codeSupport;
+	// netbeans model
+	private LayoutModel m_layoutModel;
+	private LayoutDesigner m_layoutDesigner;
+	private LayoutComponent m_root;
+	private JavaInfo m_layout;
+	private final VisualMapper m_visualMapper;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public GroupLayoutSupport(JavaInfo layout,
+			GroupLayoutCodeSupport codeSupport,
+			VisualMapper visualMapper) {
+		m_layout = layout;
+		m_codeSupport = codeSupport;
+		m_visualMapper = visualMapper;
+		m_layout.addBroadcastListener(new ObjectInfoDelete() {
+			@Override
+			public void before(ObjectInfo parent, ObjectInfo child) throws Exception {
+				if (parent instanceof JavaInfo) {
+					JavaInfo parentJava = (JavaInfo) parent;
+					// don't do any processing if parent is deleting.
+					if (!parentJava.isDeleting()) {
+						if (isOurChild(parent, child) && child instanceof AbstractComponentInfo) {
+							command_delete(child);
+						}
+					}
+				}
+			}
+		});
+		m_layout.addBroadcastListener(new JavaEventListener() {
+			@Override
+			public void bindComponents(List<JavaInfo> components) throws Exception {
+				initializeLayout();
+				parse();
+			}
+
+			private ObjectInfo m_childToDelete;
+
+			@Override
+			public void moveBefore(JavaInfo child, ObjectInfo oldParent, JavaInfo newParent)
+					throws Exception {
+				if (oldParent != newParent && isOurChild(oldParent, child)) {
+					m_childToDelete = child;
+				}
+			}
+
+			@Override
+			public void moveAfter(JavaInfo child, ObjectInfo oldParent, JavaInfo newParent)
+					throws Exception {
+				if (m_childToDelete != null
+						&& child == m_childToDelete
+						&& oldParent == getLayoutContainer()
+						&& newParent != oldParent) {
+					try {
+						command_delete(child);
+					} finally {
+						m_childToDelete = null;
+					}
+				}
+			}
+
+			@Override
+			public void replaceChildAfter(JavaInfo parent, JavaInfo oldChild, JavaInfo newChild)
+					throws Exception {
+				if (oldChild == m_layout) {
+					// support changing 'main' layout JavaInfo instance, used by Swing while converting from old-style layout.
+					m_layout = newChild;
+				} else {
+					LayoutComponent comp = m_layoutModel.getLayoutComponent(ObjectInfoUtils.getId(oldChild));
+					if (comp != null) {
+						m_layoutModel.changeComponentId(comp, ObjectInfoUtils.getId(newChild));
+					}
+				}
+			}
+		});
+		m_layout.addBroadcastListener(new ObjectEventListener() {
+			@Override
+			public void addContextMenu(List<? extends ObjectInfo> objects,
+					ObjectInfo object,
+					IMenuManager manager) throws Exception {
+				if (isRelatedComponent(object)) {
+					contributeComponentContextMenu(manager, (AbstractComponentInfo) object);
+				}
+			}
+
+			@Override
+			public void addSelectionActions(List<ObjectInfo> objects, List<Object> actions)
+					throws Exception {
+				AbstractAlignmentActionsSupport<?> alignmentSupport = getAlignmentActionsSupport();
+				alignmentSupport.addAlignmentActions(objects, actions);
+			}
+
+			@Override
+			public void refreshed() throws Exception {
+				// don't refresh if on 'live' component.
+				if (m_layout.getParent() != null && getLayoutDesigner() != null) {
+					getLayoutDesigner().updateCurrentState();
+				}
+			}
+		});
+		// LA
+		new LayoutAssistantSupport(this);
+	}
+
+	private boolean isOurChild(ObjectInfo parent, ObjectInfo child) {
+		return getLayoutContainer() == parent && parent != null && parent.getChildren().contains(child);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Initialize
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void initializeLayout() {
+		m_layoutModel = new LayoutModel();
+		m_layoutDesigner = new LayoutDesigner(getLayoutModel(), m_visualMapper);
+		m_root = new LayoutComponent(ObjectInfoUtils.getId(getLayoutContainer()), true);
+		getLayoutModel().addRootComponent(m_root);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parse/Save
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected void parse() throws Exception {
+		m_codeSupport.parse();
+		// update associations if needed
+		for (JavaInfo javaInfo : getLayoutChildren()) {
+			AssociationObject associationObject = getAssociationObject();
+			if (associationObject != null) {
+				javaInfo.setAssociation(associationObject.getAssociation());
+			}
+		}
+	}
+
+	@Override
+	public void saveLayout() throws Exception {
+		List<AbstractComponentInfo> components = getLayoutChildren();
+		// set new association if needed
+		for (AbstractComponentInfo component : components) {
+			AssociationObject associationObject = getAssociationObject();
+			if (associationObject != null) {
+				Association association = component.getAssociation();
+				if (association != null
+						&& !associationObject.getAssociation().getClass().isAssignableFrom(
+								association.getClass())) {
+					association.remove();
+					component.setAssociation(associationObject.getAssociation());
+				}
+			}
+		}
+		m_codeSupport.saveLayout(components);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// New layout setup
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void onSet() throws Exception {
+		initializeLayout();
+		// prepare components
+		List<AbstractComponentInfo> components = getLayoutChildren();
+		Map<String, Rectangle> boundsMap = Maps.newHashMap();
+		for (AbstractComponentInfo component : components) {
+			// remove association and set new if needed
+			AssociationObject associationObject = getAssociationObject();
+			if (associationObject != null) {
+				Association association = component.getAssociation();
+				if (association != null) {
+					association.remove();
+				}
+				component.setAssociation(associationObject.getAssociation());
+			}
+			// store bounds by id
+			boundsMap.put(
+					ObjectInfoUtils.getId(component),
+					GroupLayoutUtils.getBoundsInLayout(this, component));
+		}
+		// do create layout
+		getLayoutDesigner().copyLayoutFromOutside(
+				boundsMap,
+				ObjectInfoUtils.getId(getLayoutContainer()),
+				false);
+		// update and save
+		getLayoutDesigner().updateCurrentState();
+		saveLayout();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Helpers/Misc
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public LayoutComponent createLayoutComponent(AbstractComponentInfo component) {
+		return new LayoutComponent(ObjectInfoUtils.getId(component), false);
+	}
+
+	/**
+	 * @return the list of non-deleted children of this container.
+	 */
+	@SuppressWarnings("unchecked")
+	public final List<AbstractComponentInfo> getLayoutChildren() {
+		return (List<AbstractComponentInfo>) CollectionUtils.select(getComponents(), new Predicate() {
+			@Override
+			public boolean evaluate(Object object) {
+				JavaInfo javaInfo = (JavaInfo) object;
+				return !javaInfo.isDeleted() && !javaInfo.isDeleting();
+			}
+		});
+	}
+
+	protected abstract List<?> getComponents();
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands support
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void command_create(AbstractComponentInfo newObject) throws Exception {
+		getLayoutDesigner().endMoving(true);
+		addComponentImpl(newObject);
+		saveLayout();
+	}
+
+	@Override
+	public void command_add(List<AbstractComponentInfo> models) throws Exception {
+		getLayoutDesigner().endMoving(true);
+		for (AbstractComponentInfo newChild : models) {
+			JavaInfoUtils.move(newChild, getAssociationObject(), getLayoutContainer(), null);
+		}
+		saveLayout();
+	}
+
+	@Override
+	public void command_paste(List<JavaInfoMemento> mementos) throws Exception {
+		getLayoutDesigner().endMoving(true);
+		for (JavaInfoMemento memento : mementos) {
+			addComponentImpl((AbstractComponentInfo) memento.create(m_layout));
+			memento.apply();
+		}
+		saveLayout();
+	}
+
+	/**
+	 * Adds new component into this layout, removes {@link BlockStatementGenerator} if needed.
+	 */
+	public final void addComponentImpl(AbstractComponentInfo newComponent) throws Exception {
+		StatementGenerator statementGenerator = GenerationUtils.getStatementGenerator(newComponent);
+		if (statementGenerator instanceof BlockStatementGenerator) {
+			statementGenerator = PureFlatStatementGenerator.INSTANCE;
+		}
+		JavaInfoUtils.add(
+				newComponent,
+				GenerationUtils.getVariableSupport(newComponent),
+				statementGenerator,
+				getAssociationObject(),
+				getLayoutContainer(),
+				m_layout);
+	}
+
+	@Override
+	public void command_commit() throws Exception {
+		getLayoutDesigner().endMoving(true);
+		saveLayout();
+	}
+
+	protected final void command_delete(ObjectInfo child) throws Exception {
+		getLayoutModel().removeComponent(ObjectInfoUtils.getId(child), true);
+		saveLayout();
+	}
+
+	protected abstract AssociationObject getAssociationObject();
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Popup menu/Selection actions
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void contributeComponentContextMenu(IMenuManager manager, AbstractComponentInfo component) {
+		new AnchorsSupport(this).fillContextMenu(component, manager);
+		MiscActions.fillContextMenu(this, component, manager);
+	}
+
+	private AbstractAlignmentActionsSupport<?> m_alignmentsSupport;
+
+	private AbstractAlignmentActionsSupport<?> getAlignmentActionsSupport() {
+		if (m_alignmentsSupport == null) {
+			m_alignmentsSupport = new AlignmentsSupport<AbstractComponentInfo>(this);
+		}
+		return m_alignmentsSupport;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final LayoutDesigner getLayoutDesigner() {
+		return m_layoutDesigner;
+	}
+
+	@Override
+	public final LayoutModel getLayoutModel() {
+		return m_layoutModel;
+	}
+
+	protected final LayoutComponent getLayoutRoot() {
+		return m_root;
+	}
+
+	protected final JavaInfo getLayout() {
+		return m_layout;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IAdaptable
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public <T> T getAdapter(Class<T> adapter) {
+		if (JavaInfo.class.isAssignableFrom(adapter)) {
+			return adapter.cast(m_layout);
+		} else if (VisualMapper.class.isAssignableFrom(adapter)) {
+			return adapter.cast(m_visualMapper);
+		} else if (IImageProvider.class.isAssignableFrom(adapter)) {
+			return adapter.cast(getImageProvider());
+		}
+		return null;
+	}
+
+	protected abstract IImageProvider getImageProvider();
 }
diff --git a/org.eclipse.wb.layout.group/src/org/eclipse/wb/internal/layout/group/model/GroupLayoutUtils.java b/org.eclipse.wb.layout.group/src/org/eclipse/wb/internal/layout/group/model/GroupLayoutUtils.java
index eaca28b1a..c293d4434 100644
--- a/org.eclipse.wb.layout.group/src/org/eclipse/wb/internal/layout/group/model/GroupLayoutUtils.java
+++ b/org.eclipse.wb.layout.group/src/org/eclipse/wb/internal/layout/group/model/GroupLayoutUtils.java
@@ -29,76 +29,76 @@
  * @author mitin_aa
  */
 public final class GroupLayoutUtils {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private GroupLayoutUtils() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private GroupLayoutUtils() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link LayoutComponent} instance associated with given
-   *         {@link AbstractComponentInfo} instance. May return <code>null</code>.
-   */
-  public static LayoutComponent getLayoutComponent(IGroupLayoutInfo layout,
-      IAbstractComponentInfo component) {
-    return layout.getLayoutModel().getLayoutComponent(
-        ObjectInfoUtils.getId(component.getUnderlyingModel()));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link LayoutComponent} instance associated with given
+	 *         {@link AbstractComponentInfo} instance. May return <code>null</code>.
+	 */
+	public static LayoutComponent getLayoutComponent(IGroupLayoutInfo layout,
+			IAbstractComponentInfo component) {
+		return layout.getLayoutModel().getLayoutComponent(
+				ObjectInfoUtils.getId(component.getUnderlyingModel()));
+	}
 
-  /**
-   * @return the {@link List} of ids corresponding to list of {@link AbstractComponentInfo}.
-   */
-  public static <C extends IAbstractComponentInfo> List<String> getIdsList(final List<C> components) {
-    final List<String> idsList = Lists.newArrayList();
-    for (C component : components) {
-      idsList.add(ObjectInfoUtils.getId(component.getUnderlyingModel()));
-    }
-    return idsList;
-  }
+	/**
+	 * @return the {@link List} of ids corresponding to list of {@link AbstractComponentInfo}.
+	 */
+	public static <C extends IAbstractComponentInfo> List<String> getIdsList(final List<C> components) {
+		final List<String> idsList = Lists.newArrayList();
+		for (C component : components) {
+			idsList.add(ObjectInfoUtils.getId(component.getUnderlyingModel()));
+		}
+		return idsList;
+	}
 
-  /**
-   * @return the draw2d rectangle by doing a union of AWT rectangles.
-   */
-  public static org.eclipse.draw2d.geometry.Rectangle getRectangleUnion(final java.awt.Rectangle[] boundsArray) {
-    org.eclipse.draw2d.geometry.Rectangle unionBounds = get(boundsArray[0]);
-    for (int i = 1; i < boundsArray.length; i++) {
-      unionBounds.union(get(boundsArray[i]));
-    }
-    return unionBounds;
-  }
+	/**
+	 * @return the draw2d rectangle by doing a union of AWT rectangles.
+	 */
+	public static org.eclipse.draw2d.geometry.Rectangle getRectangleUnion(final java.awt.Rectangle[] boundsArray) {
+		org.eclipse.draw2d.geometry.Rectangle unionBounds = get(boundsArray[0]);
+		for (int i = 1; i < boundsArray.length; i++) {
+			unionBounds.union(get(boundsArray[i]));
+		}
+		return unionBounds;
+	}
 
-  /**
-   * @return the bounds in GroupLayout container client area coordinates.
-   */
-  public static java.awt.Rectangle getBoundsInLayout(IGroupLayoutInfo layout,
-      IAbstractComponentInfo model) {
-    Rectangle modelBounds = model.getModelBounds().getCopy();
-    Insets insets = layout.getContainerInsets();
-    modelBounds.performTranslate(-insets.left, -insets.top);
-    return get(modelBounds);
-  }
+	/**
+	 * @return the bounds in GroupLayout container client area coordinates.
+	 */
+	public static java.awt.Rectangle getBoundsInLayout(IGroupLayoutInfo layout,
+			IAbstractComponentInfo model) {
+		Rectangle modelBounds = model.getModelBounds().getCopy();
+		Insets insets = layout.getContainerInsets();
+		modelBounds.performTranslate(-insets.left, -insets.top);
+		return get(modelBounds);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // system transformation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the draw2d {@link org.eclipse.draw2d.geometry.Rectangle} for given AWT
-   *         {@link java.awt.Rectangle}.
-   */
-  public static org.eclipse.draw2d.geometry.Rectangle get(java.awt.Rectangle o) {
-    return new org.eclipse.draw2d.geometry.Rectangle(o.x, o.y, o.width, o.height);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// system transformation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the draw2d {@link org.eclipse.draw2d.geometry.Rectangle} for given AWT
+	 *         {@link java.awt.Rectangle}.
+	 */
+	public static org.eclipse.draw2d.geometry.Rectangle get(java.awt.Rectangle o) {
+		return new org.eclipse.draw2d.geometry.Rectangle(o.x, o.y, o.width, o.height);
+	}
 
-  public static java.awt.Rectangle get(org.eclipse.draw2d.geometry.Rectangle o) {
-    return new java.awt.Rectangle(o.x, o.y, o.width, o.height);
-  }
+	public static java.awt.Rectangle get(org.eclipse.draw2d.geometry.Rectangle o) {
+		return new java.awt.Rectangle(o.x, o.y, o.width, o.height);
+	}
 }
diff --git a/org.eclipse.wb.layout.group/src/org/eclipse/wb/internal/layout/group/model/IGroupLayoutInfo.java b/org.eclipse.wb.layout.group/src/org/eclipse/wb/internal/layout/group/model/IGroupLayoutInfo.java
index de0a62788..718729ddc 100644
--- a/org.eclipse.wb.layout.group/src/org/eclipse/wb/internal/layout/group/model/IGroupLayoutInfo.java
+++ b/org.eclipse.wb.layout.group/src/org/eclipse/wb/internal/layout/group/model/IGroupLayoutInfo.java
@@ -29,26 +29,26 @@
  * @author mitin_aa
  */
 public interface IGroupLayoutInfo extends IAdaptable {
-  LayoutDesigner getLayoutDesigner();
+	LayoutDesigner getLayoutDesigner();
 
-  LayoutModel getLayoutModel();
+	LayoutModel getLayoutModel();
 
-  AbstractComponentInfo getLayoutContainer();
+	AbstractComponentInfo getLayoutContainer();
 
-  Insets getContainerInsets();
+	Insets getContainerInsets();
 
-  boolean isRelatedComponent(ObjectInfo component);
+	boolean isRelatedComponent(ObjectInfo component);
 
-  LayoutComponent createLayoutComponent(AbstractComponentInfo model);
+	LayoutComponent createLayoutComponent(AbstractComponentInfo model);
 
-  void saveLayout() throws Exception;
+	void saveLayout() throws Exception;
 
-  //
-  void command_commit() throws Exception;
+	//
+	void command_commit() throws Exception;
 
-  void command_paste(List<JavaInfoMemento> mementos) throws Exception;
+	void command_paste(List<JavaInfoMemento> mementos) throws Exception;
 
-  void command_create(AbstractComponentInfo newObject) throws Exception;
+	void command_create(AbstractComponentInfo newObject) throws Exception;
 
-  void command_add(List<AbstractComponentInfo> models) throws Exception;
+	void command_add(List<AbstractComponentInfo> models) throws Exception;
 }
diff --git a/org.eclipse.wb.layout.group/src/org/eclipse/wb/internal/layout/group/model/MiscActions.java b/org.eclipse.wb.layout.group/src/org/eclipse/wb/internal/layout/group/model/MiscActions.java
index 86e819507..f24464f6a 100644
--- a/org.eclipse.wb.layout.group/src/org/eclipse/wb/internal/layout/group/model/MiscActions.java
+++ b/org.eclipse.wb.layout.group/src/org/eclipse/wb/internal/layout/group/model/MiscActions.java
@@ -25,58 +25,58 @@
  * @author mitin_aa
  */
 public class MiscActions {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Private Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private MiscActions() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Private Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private MiscActions() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static void fillContextMenu(IGroupLayoutInfo layout,
-      AbstractComponentInfo component,
-      IMenuManager manager) {
-    manager.appendToGroup(
-        IContextMenuConstants.GROUP_CONSTRAINTS,
-        new SetDefaultSizeAction(layout, component));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static void fillContextMenu(IGroupLayoutInfo layout,
+			AbstractComponentInfo component,
+			IMenuManager manager) {
+		manager.appendToGroup(
+				IContextMenuConstants.GROUP_CONSTRAINTS,
+				new SetDefaultSizeAction(layout, component));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Impl
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static void action_setComponentDefaultSize(IGroupLayoutInfo layout, JavaInfo component)
-      throws Exception {
-    String id = ObjectInfoUtils.getId(component);
-    layout.getLayoutDesigner().setDefaultSize(id);
-    layout.saveLayout();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Impl
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static void action_setComponentDefaultSize(IGroupLayoutInfo layout, JavaInfo component)
+			throws Exception {
+		String id = ObjectInfoUtils.getId(component);
+		layout.getLayoutDesigner().setDefaultSize(id);
+		layout.saveLayout();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Action
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final static class SetDefaultSizeAction extends ObjectInfoAction {
-    private final AbstractComponentInfo m_component;
-    private final IGroupLayoutInfo m_layout;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Action
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final static class SetDefaultSizeAction extends ObjectInfoAction {
+		private final AbstractComponentInfo m_component;
+		private final IGroupLayoutInfo m_layout;
 
-    private SetDefaultSizeAction(IGroupLayoutInfo layout, AbstractComponentInfo component) {
-      super(component, Messages.MiscActions_setDefaultSize);
-      m_layout = layout;
-      m_component = component;
-      setEnabled(component != null);
-    }
+		private SetDefaultSizeAction(IGroupLayoutInfo layout, AbstractComponentInfo component) {
+			super(component, Messages.MiscActions_setDefaultSize);
+			m_layout = layout;
+			m_component = component;
+			setEnabled(component != null);
+		}
 
-    @Override
-    protected void runEx() throws Exception {
-      action_setComponentDefaultSize(m_layout, m_component);
-    }
-  }
+		@Override
+		protected void runEx() throws Exception {
+			action_setComponentDefaultSize(m_layout, m_component);
+		}
+	}
 }
diff --git a/org.eclipse.wb.layout.group/src/org/eclipse/wb/internal/layout/group/model/assistant/ConstraintsDialog.java b/org.eclipse.wb.layout.group/src/org/eclipse/wb/internal/layout/group/model/assistant/ConstraintsDialog.java
index 6f9dbc4d8..fc088bb8a 100644
--- a/org.eclipse.wb.layout.group/src/org/eclipse/wb/internal/layout/group/model/assistant/ConstraintsDialog.java
+++ b/org.eclipse.wb.layout.group/src/org/eclipse/wb/internal/layout/group/model/assistant/ConstraintsDialog.java
@@ -26,48 +26,48 @@
  * @author mitin_aa
  */
 public final class ConstraintsDialog extends Dialog {
-  private final AbstractComponentInfo m_component;
-  private final IGroupLayoutInfo m_layout;
-  private GroupLayoutSpacesPage m_groupLayoutSpacesPage;
+	private final AbstractComponentInfo m_component;
+	private final IGroupLayoutInfo m_layout;
+	private GroupLayoutSpacesPage m_groupLayoutSpacesPage;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ConstraintsDialog(Shell parentShell,
-      IGroupLayoutInfo layout,
-      AbstractComponentInfo component) {
-    super(parentShell);
-    m_layout = layout;
-    m_component = component;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ConstraintsDialog(Shell parentShell,
+			IGroupLayoutInfo layout,
+			AbstractComponentInfo component) {
+		super(parentShell);
+		m_layout = layout;
+		m_component = component;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Contents
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected final Control createContents(Composite parent) {
-    Composite container = (Composite) super.createDialogArea(parent);
-    container.setLayout(new FillLayout());
-    m_groupLayoutSpacesPage = new GroupLayoutSpacesPage(container, m_layout, m_component);
-    return container;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Contents
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected final Control createContents(Composite parent) {
+		Composite container = (Composite) super.createDialogArea(parent);
+		container.setLayout(new FillLayout());
+		m_groupLayoutSpacesPage = new GroupLayoutSpacesPage(container, m_layout, m_component);
+		return container;
+	}
 
-  @Override
-  protected void configureShell(Shell newShell) {
-    super.configureShell(newShell);
-    newShell.setText(Messages.ConstraintsDialog_title);
-  }
+	@Override
+	protected void configureShell(Shell newShell) {
+		super.configureShell(newShell);
+		newShell.setText(Messages.ConstraintsDialog_title);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Update
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public final void updateUI() {
-    m_groupLayoutSpacesPage.updatePage();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Update
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public final void updateUI() {
+		m_groupLayoutSpacesPage.updatePage();
+	}
 }
diff --git a/org.eclipse.wb.layout.group/src/org/eclipse/wb/internal/layout/group/model/assistant/GroupLayoutAlignmentPage.java b/org.eclipse.wb.layout.group/src/org/eclipse/wb/internal/layout/group/model/assistant/GroupLayoutAlignmentPage.java
index 22553bfb6..8eb36a379 100644
--- a/org.eclipse.wb.layout.group/src/org/eclipse/wb/internal/layout/group/model/assistant/GroupLayoutAlignmentPage.java
+++ b/org.eclipse.wb.layout.group/src/org/eclipse/wb/internal/layout/group/model/assistant/GroupLayoutAlignmentPage.java
@@ -39,63 +39,63 @@
  * @author mitin_aa
  */
 public final class GroupLayoutAlignmentPage extends Composite
-    implements
-      ILayoutAssistantPage,
-      LayoutConstants {
-  private final IGroupLayoutInfo m_layout;
-  private final List<ObjectInfo> m_objects;
-  private ToolBarManager m_toolBarManager;
+implements
+ILayoutAssistantPage,
+LayoutConstants {
+	private final IGroupLayoutInfo m_layout;
+	private final List<ObjectInfo> m_objects;
+	private ToolBarManager m_toolBarManager;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public GroupLayoutAlignmentPage(Composite parent,
-      IGroupLayoutInfo layout,
-      List<ObjectInfo> objects) {
-    super(parent, SWT.NONE);
-    // fields
-    m_layout = layout;
-    m_objects = objects;
-    // UI
-    GridLayoutFactory.create(this).noMargins().noSpacing();
-    // put everything into a top group
-    Group topGroup = new Group(this, SWT.NONE);
-    GridDataFactory.create(topGroup).grab().fill();
-    GridLayoutFactory.create(topGroup);
-    topGroup.setText(Messages.GroupLayoutAlignmentPage_alignmentGroup);
-    {
-      m_toolBarManager = new ToolBarManager(SWT.FLAT);
-      ToolBar toolBar = m_toolBarManager.createControl(topGroup);
-      GridDataFactory.create(toolBar).alignHC();
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public GroupLayoutAlignmentPage(Composite parent,
+			IGroupLayoutInfo layout,
+			List<ObjectInfo> objects) {
+		super(parent, SWT.NONE);
+		// fields
+		m_layout = layout;
+		m_objects = objects;
+		// UI
+		GridLayoutFactory.create(this).noMargins().noSpacing();
+		// put everything into a top group
+		Group topGroup = new Group(this, SWT.NONE);
+		GridDataFactory.create(topGroup).grab().fill();
+		GridLayoutFactory.create(topGroup);
+		topGroup.setText(Messages.GroupLayoutAlignmentPage_alignmentGroup);
+		{
+			m_toolBarManager = new ToolBarManager(SWT.FLAT);
+			ToolBar toolBar = m_toolBarManager.createControl(topGroup);
+			GridDataFactory.create(toolBar).alignHC();
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ILayoutAssistantPage
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void updatePage() {
-    m_toolBarManager.removeAll();
-    List<ObjectInfo> sel = Lists.newArrayList();
-    List<Object> actions = Lists.newArrayList();
-    CollectionUtils.addAll(sel, m_objects.iterator());
-    new AlignmentsSupport(m_layout).addAlignmentActions(sel, actions);
-    for (Object action : actions) {
-      if (action instanceof IContributionItem) {
-        m_toolBarManager.add((IContributionItem) action);
-      } else if (action instanceof IAction) {
-        m_toolBarManager.add((IAction) action);
-      }
-    }
-    m_toolBarManager.update(true);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ILayoutAssistantPage
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void updatePage() {
+		m_toolBarManager.removeAll();
+		List<ObjectInfo> sel = Lists.newArrayList();
+		List<Object> actions = Lists.newArrayList();
+		CollectionUtils.addAll(sel, m_objects.iterator());
+		new AlignmentsSupport(m_layout).addAlignmentActions(sel, actions);
+		for (Object action : actions) {
+			if (action instanceof IContributionItem) {
+				m_toolBarManager.add((IContributionItem) action);
+			} else if (action instanceof IAction) {
+				m_toolBarManager.add((IAction) action);
+			}
+		}
+		m_toolBarManager.update(true);
+	}
 
-  @Override
-  public boolean isPageValid() {
-    return true;
-  }
+	@Override
+	public boolean isPageValid() {
+		return true;
+	}
 }
diff --git a/org.eclipse.wb.layout.group/src/org/eclipse/wb/internal/layout/group/model/assistant/GroupLayoutSpacesPage.java b/org.eclipse.wb.layout.group/src/org/eclipse/wb/internal/layout/group/model/assistant/GroupLayoutSpacesPage.java
index 7dace4b42..04b9b08f3 100644
--- a/org.eclipse.wb.layout.group/src/org/eclipse/wb/internal/layout/group/model/assistant/GroupLayoutSpacesPage.java
+++ b/org.eclipse.wb.layout.group/src/org/eclipse/wb/internal/layout/group/model/assistant/GroupLayoutSpacesPage.java
@@ -49,309 +49,309 @@
  * @author mitin_aa
  */
 public final class GroupLayoutSpacesPage extends Composite
-    implements
-      ILayoutAssistantPage,
-      LayoutConstants {
-  private final IGroupLayoutInfo m_layout;
-  private final AbstractComponentInfo m_javaInfo;
-  private final AnchorsSupport m_anchorsSupport;
-  private final SpaceComposite[] m_spaceComposites = new SpaceComposite[4];
-  private final ComponentComposite m_componentComposite;
+implements
+ILayoutAssistantPage,
+LayoutConstants {
+	private final IGroupLayoutInfo m_layout;
+	private final AbstractComponentInfo m_javaInfo;
+	private final AnchorsSupport m_anchorsSupport;
+	private final SpaceComposite[] m_spaceComposites = new SpaceComposite[4];
+	private final ComponentComposite m_componentComposite;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public GroupLayoutSpacesPage(Composite parent, IGroupLayoutInfo layout, ObjectInfo javaInfo) {
-    super(parent, SWT.NONE);
-    // fields
-    m_layout = layout;
-    m_javaInfo = (AbstractComponentInfo) javaInfo;
-    m_anchorsSupport = new AnchorsSupport(m_layout);
-    // UI
-    GridLayoutFactory.create(this).noMargins().noSpacing();
-    // put everything into a top group
-    Group topGroup = new Group(this, SWT.NONE);
-    GridDataFactory.create(topGroup).grab().fill();
-    GridLayoutFactory.create(topGroup).columns(3);
-    topGroup.setText(Messages.GroupLayoutSpacesPage_spaceGroup);
-    {
-      new Label(topGroup, SWT.NONE);
-      m_spaceComposites[0] = new SpaceComposite(topGroup, LEADING, VERTICAL);
-      new Label(topGroup, SWT.NONE);
-    }
-    {
-      m_spaceComposites[1] = new SpaceComposite(topGroup, LEADING, HORIZONTAL);
-      {
-        Group group = new Group(topGroup, SWT.NONE);
-        GridDataFactory.create(group).grab().fill();
-        GridLayoutFactory.create(group);
-        group.setText(Messages.GroupLayoutSpacesPage_componentGroup);
-        m_componentComposite = new ComponentComposite(group);
-      }
-      m_spaceComposites[2] = new SpaceComposite(topGroup, TRAILING, HORIZONTAL);
-    }
-    {
-      new Label(topGroup, SWT.NONE);
-      m_spaceComposites[3] = new SpaceComposite(topGroup, TRAILING, VERTICAL);
-      new Label(topGroup, SWT.NONE);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public GroupLayoutSpacesPage(Composite parent, IGroupLayoutInfo layout, ObjectInfo javaInfo) {
+		super(parent, SWT.NONE);
+		// fields
+		m_layout = layout;
+		m_javaInfo = (AbstractComponentInfo) javaInfo;
+		m_anchorsSupport = new AnchorsSupport(m_layout);
+		// UI
+		GridLayoutFactory.create(this).noMargins().noSpacing();
+		// put everything into a top group
+		Group topGroup = new Group(this, SWT.NONE);
+		GridDataFactory.create(topGroup).grab().fill();
+		GridLayoutFactory.create(topGroup).columns(3);
+		topGroup.setText(Messages.GroupLayoutSpacesPage_spaceGroup);
+		{
+			new Label(topGroup, SWT.NONE);
+			m_spaceComposites[0] = new SpaceComposite(topGroup, LEADING, VERTICAL);
+			new Label(topGroup, SWT.NONE);
+		}
+		{
+			m_spaceComposites[1] = new SpaceComposite(topGroup, LEADING, HORIZONTAL);
+			{
+				Group group = new Group(topGroup, SWT.NONE);
+				GridDataFactory.create(group).grab().fill();
+				GridLayoutFactory.create(group);
+				group.setText(Messages.GroupLayoutSpacesPage_componentGroup);
+				m_componentComposite = new ComponentComposite(group);
+			}
+			m_spaceComposites[2] = new SpaceComposite(topGroup, TRAILING, HORIZONTAL);
+		}
+		{
+			new Label(topGroup, SWT.NONE);
+			m_spaceComposites[3] = new SpaceComposite(topGroup, TRAILING, VERTICAL);
+			new Label(topGroup, SWT.NONE);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ILayoutAssistantPage
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void updatePage() {
-    for (int i = 0; i < m_spaceComposites.length; i++) {
-      m_spaceComposites[i].updateUI();
-    }
-    m_componentComposite.updateUI();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ILayoutAssistantPage
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void updatePage() {
+		for (int i = 0; i < m_spaceComposites.length; i++) {
+			m_spaceComposites[i].updateUI();
+		}
+		m_componentComposite.updateUI();
+	}
 
-  @Override
-  public boolean isPageValid() {
-    return true;
-  }
+	@Override
+	public boolean isPageValid() {
+		return true;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // UI creation helpers
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private CSpinner createSpinner(Composite componentComposite) {
-    CSpinner spinner = new CSpinner(componentComposite, SWT.BORDER);
-    GridDataFactory.create(spinner).hintHC(7);
-    spinner.setMaximum(Short.MAX_VALUE);
-    return spinner;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// UI creation helpers
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private CSpinner createSpinner(Composite componentComposite) {
+		CSpinner spinner = new CSpinner(componentComposite, SWT.BORDER);
+		GridDataFactory.create(spinner).hintHC(7);
+		spinner.setMaximum(Short.MAX_VALUE);
+		return spinner;
+	}
 
-  private void createSpinnerNotifier(CSpinner spinner, Listener listener) {
-    new CSpinnerDeferredNotifier(spinner, 500, listener);
-  }
+	private void createSpinnerNotifier(CSpinner spinner, Listener listener) {
+		new CSpinnerDeferredNotifier(spinner, 500, listener);
+	}
 
-  /**
-   * Creates button control to set default width/height and adds given {@link SelectionListener}.
-   */
-  private Control createClearButton(Composite parent, SelectionListener selectionListener) {
-    ToolBar toolBar = new ToolBar(parent, SWT.FLAT | SWT.RIGHT);
-    ToolItem toolItem = new ToolItem(toolBar, SWT.NONE);
-    toolItem.setImage(m_layout.getAdapter(IImageProvider.class).getImage(
-        "info/layout/groupLayout/clear.gif"));
-    toolItem.setToolTipText(Messages.GroupLayoutSpacesPage_setDefaultSize);
-    toolItem.addSelectionListener(selectionListener);
-    return toolBar;
-  }
+	/**
+	 * Creates button control to set default width/height and adds given {@link SelectionListener}.
+	 */
+	private Control createClearButton(Composite parent, SelectionListener selectionListener) {
+		ToolBar toolBar = new ToolBar(parent, SWT.FLAT | SWT.RIGHT);
+		ToolItem toolItem = new ToolItem(toolBar, SWT.NONE);
+		toolItem.setImage(m_layout.getAdapter(IImageProvider.class).getImage(
+				"info/layout/groupLayout/clear.gif"));
+		toolItem.setToolTipText(Messages.GroupLayoutSpacesPage_setDefaultSize);
+		toolItem.addSelectionListener(selectionListener);
+		return toolBar;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Misc
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void setComponentSize(final int dimension, final int value) {
-    ExecutionUtils.run(m_layout.getAdapter(JavaInfo.class), new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        m_anchorsSupport.action_setComponentSize(m_javaInfo, dimension, value);
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Misc
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void setComponentSize(final int dimension, final int value) {
+		ExecutionUtils.run(m_layout.getAdapter(JavaInfo.class), new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				m_anchorsSupport.action_setComponentSize(m_javaInfo, dimension, value);
+			}
+		});
+	}
 
-  private void updateAnchors(ToolBarManager manager, boolean isHorizontal) {
-    manager.removeAll();
-    m_anchorsSupport.fillContributionManager(m_javaInfo, manager, isHorizontal);
-    manager.update(true);
-  }
+	private void updateAnchors(ToolBarManager manager, boolean isHorizontal) {
+		manager.removeAll();
+		m_anchorsSupport.fillContributionManager(m_javaInfo, manager, isHorizontal);
+		manager.update(true);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Component composite
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final class ComponentComposite extends Composite {
-    private CSpinner m_widthSpinner;
-    private CSpinner m_heightSpinner;
-    private ToolBarManager m_verticalAnchorsManager;
-    private ToolBarManager m_horizontalAnchorsManager;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Component composite
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final class ComponentComposite extends Composite {
+		private CSpinner m_widthSpinner;
+		private CSpinner m_heightSpinner;
+		private ToolBarManager m_verticalAnchorsManager;
+		private ToolBarManager m_horizontalAnchorsManager;
 
-    public ComponentComposite(Composite parent) {
-      super(parent, SWT.NONE);
-      GridLayoutFactory.create(this).columns(2).noMargins().noSpacing();
-      {
-        m_horizontalAnchorsManager = new ToolBarManager(SWT.FLAT);
-        m_anchorsSupport.fillContributionManager(m_javaInfo, m_horizontalAnchorsManager, true);
-        ToolBar toolBar = m_horizontalAnchorsManager.createControl(this);
-        GridDataFactory.create(toolBar).alignHC();
-      }
-      {
-        new Label(this, SWT.NONE);
-      }
-      {
-        Group sizeGroup = new Group(this, SWT.NONE);
-        GridDataFactory.create(sizeGroup).alignVM().grab();
-        GridLayoutFactory.create(sizeGroup).columns(3);
-        sizeGroup.setText(Messages.GroupLayoutSpacesPage_sizeGroup);
-        {
-          new Label(sizeGroup, SWT.NONE).setText(Messages.GroupLayoutSpacesPage_sizeWidth);
-          m_widthSpinner = createSpinner(sizeGroup);
-          createSpinnerNotifier(m_widthSpinner, new ComponentSizeSetListener(HORIZONTAL));
-          createClearButton(sizeGroup, new ComponentSizeSetDefaultListener(HORIZONTAL));
-        }
-        {
-          new Label(sizeGroup, SWT.NONE).setText(Messages.GroupLayoutSpacesPage_sizeHeight);
-          m_heightSpinner = createSpinner(sizeGroup);
-          createSpinnerNotifier(m_heightSpinner, new ComponentSizeSetListener(VERTICAL));
-          createClearButton(sizeGroup, new ComponentSizeSetDefaultListener(VERTICAL));
-        }
-      }
-      {
-        m_verticalAnchorsManager = new ToolBarManager(SWT.FLAT | SWT.VERTICAL);
-        new AnchorsSupport(m_layout).fillContributionManager(
-            m_javaInfo,
-            m_verticalAnchorsManager,
-            false);
-        ToolBar toolBar = m_verticalAnchorsManager.createControl(this);
-        GridDataFactory.create(toolBar).grabV().alignVM();
-      }
-    }
+		public ComponentComposite(Composite parent) {
+			super(parent, SWT.NONE);
+			GridLayoutFactory.create(this).columns(2).noMargins().noSpacing();
+			{
+				m_horizontalAnchorsManager = new ToolBarManager(SWT.FLAT);
+				m_anchorsSupport.fillContributionManager(m_javaInfo, m_horizontalAnchorsManager, true);
+				ToolBar toolBar = m_horizontalAnchorsManager.createControl(this);
+				GridDataFactory.create(toolBar).alignHC();
+			}
+			{
+				new Label(this, SWT.NONE);
+			}
+			{
+				Group sizeGroup = new Group(this, SWT.NONE);
+				GridDataFactory.create(sizeGroup).alignVM().grab();
+				GridLayoutFactory.create(sizeGroup).columns(3);
+				sizeGroup.setText(Messages.GroupLayoutSpacesPage_sizeGroup);
+				{
+					new Label(sizeGroup, SWT.NONE).setText(Messages.GroupLayoutSpacesPage_sizeWidth);
+					m_widthSpinner = createSpinner(sizeGroup);
+					createSpinnerNotifier(m_widthSpinner, new ComponentSizeSetListener(HORIZONTAL));
+					createClearButton(sizeGroup, new ComponentSizeSetDefaultListener(HORIZONTAL));
+				}
+				{
+					new Label(sizeGroup, SWT.NONE).setText(Messages.GroupLayoutSpacesPage_sizeHeight);
+					m_heightSpinner = createSpinner(sizeGroup);
+					createSpinnerNotifier(m_heightSpinner, new ComponentSizeSetListener(VERTICAL));
+					createClearButton(sizeGroup, new ComponentSizeSetDefaultListener(VERTICAL));
+				}
+			}
+			{
+				m_verticalAnchorsManager = new ToolBarManager(SWT.FLAT | SWT.VERTICAL);
+				new AnchorsSupport(m_layout).fillContributionManager(
+						m_javaInfo,
+						m_verticalAnchorsManager,
+						false);
+				ToolBar toolBar = m_verticalAnchorsManager.createControl(this);
+				GridDataFactory.create(toolBar).grabV().alignVM();
+			}
+		}
 
-    public void updateUI() {
-      Rectangle bounds = m_javaInfo.getBounds();
-      m_widthSpinner.setSelection(bounds.width);
-      m_heightSpinner.setSelection(bounds.height);
-      updateAnchors(m_horizontalAnchorsManager, true);
-      updateAnchors(m_verticalAnchorsManager, false);
-    }
-  }
-  private final class ComponentSizeSetDefaultListener extends SelectionAdapter {
-    private final int m_dimension;
+		public void updateUI() {
+			Rectangle bounds = m_javaInfo.getBounds();
+			m_widthSpinner.setSelection(bounds.width);
+			m_heightSpinner.setSelection(bounds.height);
+			updateAnchors(m_horizontalAnchorsManager, true);
+			updateAnchors(m_verticalAnchorsManager, false);
+		}
+	}
+	private final class ComponentSizeSetDefaultListener extends SelectionAdapter {
+		private final int m_dimension;
 
-    public ComponentSizeSetDefaultListener(int dimension) {
-      m_dimension = dimension;
-    }
+		public ComponentSizeSetDefaultListener(int dimension) {
+			m_dimension = dimension;
+		}
 
-    @Override
-    public void widgetSelected(SelectionEvent e) {
-      setComponentSize(m_dimension, NOT_EXPLICITLY_DEFINED);
-    }
-  }
-  private final class ComponentSizeSetListener implements Listener {
-    private final int m_dimension;
+		@Override
+		public void widgetSelected(SelectionEvent e) {
+			setComponentSize(m_dimension, NOT_EXPLICITLY_DEFINED);
+		}
+	}
+	private final class ComponentSizeSetListener implements Listener {
+		private final int m_dimension;
 
-    public ComponentSizeSetListener(int dimension) {
-      m_dimension = dimension;
-    }
+		public ComponentSizeSetListener(int dimension) {
+			m_dimension = dimension;
+		}
 
-    @Override
-    public void handleEvent(Event event) {
-      if (event.type == SWT.Selection && event.doit) {
-        CSpinner spinner = (CSpinner) event.widget;
-        final int value = spinner.getSelection();
-        if (value > 0) {
-          setComponentSize(m_dimension, value);
-        }
-      }
-    }
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Space composite
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final class SpaceComposite extends Composite {
-    private final CSpinner m_spinner;
-    private final Button m_button;
-    private final int m_direction;
-    private final int m_dimension;
+		@Override
+		public void handleEvent(Event event) {
+			if (event.type == SWT.Selection && event.doit) {
+				CSpinner spinner = (CSpinner) event.widget;
+				final int value = spinner.getSelection();
+				if (value > 0) {
+					setComponentSize(m_dimension, value);
+				}
+			}
+		}
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Space composite
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final class SpaceComposite extends Composite {
+		private final CSpinner m_spinner;
+		private final Button m_button;
+		private final int m_direction;
+		private final int m_dimension;
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public SpaceComposite(Composite parent, final int direction, final int dimension) {
-      super(parent, SWT.NONE);
-      m_direction = direction;
-      m_dimension = dimension;
-      // UI
-      GridDataFactory.create(this).alignHC();
-      GridLayoutFactory.create(this).noMargins().noSpacing();
-      if (dimension == VERTICAL) {
-        GridLayoutFactory.modify(this).columns(2);
-      }
-      m_spinner = createSpinner(this);
-      m_button = new Button(this, SWT.CHECK);
-      m_button.setText(Messages.GroupLayoutSpacesPage_defaultSpace);
-      // install listeners
-      m_button.addSelectionListener(new SelectionAdapter() {
-        @Override
-        public void widgetSelected(SelectionEvent e) {
-          int gapValue;
-          if (m_button.getSelection()) {
-            gapValue = NOT_EXPLICITLY_DEFINED;
-          } else {
-            gapValue = m_spinner.getSelection();
-          }
-          setGapValue(gapValue);
-        }
-      });
-      createSpinnerNotifier(m_spinner, new Listener() {
-        @Override
-        public void handleEvent(Event event) {
-          if (event.type == SWT.Selection && event.doit) {
-            int gapValue = m_spinner.getSelection();
-            int defaultGapSize =
-                m_anchorsSupport.getDefaultGapSize(m_javaInfo, m_dimension, m_direction).intValue();
-            if (gapValue < 1 || gapValue == defaultGapSize) {
-              gapValue = NOT_EXPLICITLY_DEFINED;
-            }
-            setGapValue(gapValue);
-          }
-        }
-      });
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public SpaceComposite(Composite parent, final int direction, final int dimension) {
+			super(parent, SWT.NONE);
+			m_direction = direction;
+			m_dimension = dimension;
+			// UI
+			GridDataFactory.create(this).alignHC();
+			GridLayoutFactory.create(this).noMargins().noSpacing();
+			if (dimension == VERTICAL) {
+				GridLayoutFactory.modify(this).columns(2);
+			}
+			m_spinner = createSpinner(this);
+			m_button = new Button(this, SWT.CHECK);
+			m_button.setText(Messages.GroupLayoutSpacesPage_defaultSpace);
+			// install listeners
+			m_button.addSelectionListener(new SelectionAdapter() {
+				@Override
+				public void widgetSelected(SelectionEvent e) {
+					int gapValue;
+					if (m_button.getSelection()) {
+						gapValue = NOT_EXPLICITLY_DEFINED;
+					} else {
+						gapValue = m_spinner.getSelection();
+					}
+					setGapValue(gapValue);
+				}
+			});
+			createSpinnerNotifier(m_spinner, new Listener() {
+				@Override
+				public void handleEvent(Event event) {
+					if (event.type == SWT.Selection && event.doit) {
+						int gapValue = m_spinner.getSelection();
+						int defaultGapSize =
+								m_anchorsSupport.getDefaultGapSize(m_javaInfo, m_dimension, m_direction).intValue();
+						if (gapValue < 1 || gapValue == defaultGapSize) {
+							gapValue = NOT_EXPLICITLY_DEFINED;
+						}
+						setGapValue(gapValue);
+					}
+				}
+			});
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Update
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    private void updateUI() {
-      Integer emptySpaceValue =
-          m_anchorsSupport.getEmptySpaceValue(m_javaInfo, m_dimension, m_direction);
-      if (emptySpaceValue != null) {
-        int gapSize = emptySpaceValue.intValue();
-        final boolean isDefault = gapSize == NOT_EXPLICITLY_DEFINED;
-        if (isDefault) {
-          gapSize =
-              m_anchorsSupport.getDefaultGapSize(m_javaInfo, m_dimension, m_direction).intValue();
-        }
-        m_spinner.setSelection(gapSize);
-        m_button.setSelection(isDefault);
-      } else {
-        setEnabled(false);
-      }
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Update
+		//
+		////////////////////////////////////////////////////////////////////////////
+		private void updateUI() {
+			Integer emptySpaceValue =
+					m_anchorsSupport.getEmptySpaceValue(m_javaInfo, m_dimension, m_direction);
+			if (emptySpaceValue != null) {
+				int gapSize = emptySpaceValue.intValue();
+				final boolean isDefault = gapSize == NOT_EXPLICITLY_DEFINED;
+				if (isDefault) {
+					gapSize =
+							m_anchorsSupport.getDefaultGapSize(m_javaInfo, m_dimension, m_direction).intValue();
+				}
+				m_spinner.setSelection(gapSize);
+				m_button.setSelection(isDefault);
+			} else {
+				setEnabled(false);
+			}
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Helper
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    private void setGapValue(final int gapValue) {
-      ExecutionUtils.run(m_layout.getAdapter(JavaInfo.class), new RunnableEx() {
-        @Override
-        public void run() throws Exception {
-          m_anchorsSupport.action_setEmptySpaceProperties(
-              m_javaInfo,
-              m_dimension,
-              m_direction,
-              gapValue);
-        }
-      });
-    }
-  }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Helper
+		//
+		////////////////////////////////////////////////////////////////////////////
+		private void setGapValue(final int gapValue) {
+			ExecutionUtils.run(m_layout.getAdapter(JavaInfo.class), new RunnableEx() {
+				@Override
+				public void run() throws Exception {
+					m_anchorsSupport.action_setEmptySpaceProperties(
+							m_javaInfo,
+							m_dimension,
+							m_direction,
+							gapValue);
+				}
+			});
+		}
+	}
 }
diff --git a/org.eclipse.wb.layout.group/src/org/eclipse/wb/internal/layout/group/model/assistant/LayoutAssistantSupport.java b/org.eclipse.wb.layout.group/src/org/eclipse/wb/internal/layout/group/model/assistant/LayoutAssistantSupport.java
index e5d602787..6bc0f1b51 100644
--- a/org.eclipse.wb.layout.group/src/org/eclipse/wb/internal/layout/group/model/assistant/LayoutAssistantSupport.java
+++ b/org.eclipse.wb.layout.group/src/org/eclipse/wb/internal/layout/group/model/assistant/LayoutAssistantSupport.java
@@ -39,102 +39,102 @@
  * @author mitin_aa
  */
 public class LayoutAssistantSupport {
-  private final IGroupLayoutInfo m_layout;
-  private ConstraintsDialog m_constraintsDialog;
+	private final IGroupLayoutInfo m_layout;
+	private ConstraintsDialog m_constraintsDialog;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public LayoutAssistantSupport(IGroupLayoutInfo layout) {
-    m_layout = layout;
-    // assistant
-    getJavaInfo().addBroadcastListener(new LayoutAssistantListener() {
-      @Override
-      public void createAssistantPages(List<ObjectInfo> objects,
-          TabFolder folder,
-          List<ILayoutAssistantPage> pages) throws Exception {
-        LayoutAssistantSupport.this.createAssistantPages(objects, folder, pages);
-      }
-    });
-    // constraints property
-    getJavaInfo().addBroadcastListener(new JavaInfoAddProperties() {
-      @Override
-      public void invoke(JavaInfo javaInfo, List<Property> properties) throws Exception {
-        if (m_layout.isRelatedComponent(javaInfo)) {
-          addConstraintsProperty(properties, (AbstractComponentInfo) javaInfo);
-        }
-      }
-    });
-    getJavaInfo().addBroadcastListener(new ObjectEventListener() {
-      @Override
-      public void refreshed() throws Exception {
-        updateConstraintsDialog();
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public LayoutAssistantSupport(IGroupLayoutInfo layout) {
+		m_layout = layout;
+		// assistant
+		getJavaInfo().addBroadcastListener(new LayoutAssistantListener() {
+			@Override
+			public void createAssistantPages(List<ObjectInfo> objects,
+					TabFolder folder,
+					List<ILayoutAssistantPage> pages) throws Exception {
+				LayoutAssistantSupport.this.createAssistantPages(objects, folder, pages);
+			}
+		});
+		// constraints property
+		getJavaInfo().addBroadcastListener(new JavaInfoAddProperties() {
+			@Override
+			public void invoke(JavaInfo javaInfo, List<Property> properties) throws Exception {
+				if (m_layout.isRelatedComponent(javaInfo)) {
+					addConstraintsProperty(properties, (AbstractComponentInfo) javaInfo);
+				}
+			}
+		});
+		getJavaInfo().addBroadcastListener(new ObjectEventListener() {
+			@Override
+			public void refreshed() throws Exception {
+				updateConstraintsDialog();
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Assistant
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void createAssistantPages(List<ObjectInfo> objects,
-      TabFolder folder,
-      List<ILayoutAssistantPage> pages) throws Exception {
-    if (!objects.isEmpty() && m_layout.isRelatedComponent(objects.get(0))) {
-      Composite page;
-      if (objects.size() == 1) {
-        page = new GroupLayoutSpacesPage(folder, m_layout, objects.get(0));
-      } else {
-        page = new GroupLayoutAlignmentPage(folder, m_layout, objects);
-      }
-      TabFactory.item(folder).text(Messages.LayoutAssistantSupport_layoutTabTitle).control(page);
-      pages.add((ILayoutAssistantPage) page);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Assistant
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void createAssistantPages(List<ObjectInfo> objects,
+			TabFolder folder,
+			List<ILayoutAssistantPage> pages) throws Exception {
+		if (!objects.isEmpty() && m_layout.isRelatedComponent(objects.get(0))) {
+			Composite page;
+			if (objects.size() == 1) {
+				page = new GroupLayoutSpacesPage(folder, m_layout, objects.get(0));
+			} else {
+				page = new GroupLayoutAlignmentPage(folder, m_layout, objects);
+			}
+			TabFactory.item(folder).text(Messages.LayoutAssistantSupport_layoutTabTitle).control(page);
+			pages.add((ILayoutAssistantPage) page);
+		}
+	}
 
-  protected void addConstraintsProperty(List<Property> properties,
-      final AbstractComponentInfo component) {
-    String name = getJavaInfo().getDescription().getComponentClass().getName();
-    ComplexProperty constraintsProperty = new ComplexProperty(Messages.LayoutAssistantSupport_constraintsTabTitle, "(" + name + ")") {
-      @Override
-      public boolean isModified() throws Exception {
-        return true;
-      }
-    };
-    constraintsProperty.setCategory(PropertyCategory.system(6));
-    constraintsProperty.setEditorPresentation(new ButtonPropertyEditorPresentation() {
-      @Override
-      protected void onClick(PropertyTable propertyTable, Property property) throws Exception {
-        m_constraintsDialog = new ConstraintsDialog(propertyTable.getShell(), m_layout, component);
-        m_constraintsDialog.create();
-        m_constraintsDialog.getShell().addDisposeListener(new DisposeListener() {
-          @Override
-          public void widgetDisposed(DisposeEvent e) {
-            m_constraintsDialog = null;
-          }
-        });
-        m_constraintsDialog.updateUI();
-        m_constraintsDialog.open();
-      }
-    });
-    properties.add(constraintsProperty);
-  }
+	protected void addConstraintsProperty(List<Property> properties,
+			final AbstractComponentInfo component) {
+		String name = getJavaInfo().getDescription().getComponentClass().getName();
+		ComplexProperty constraintsProperty = new ComplexProperty(Messages.LayoutAssistantSupport_constraintsTabTitle, "(" + name + ")") {
+			@Override
+			public boolean isModified() throws Exception {
+				return true;
+			}
+		};
+		constraintsProperty.setCategory(PropertyCategory.system(6));
+		constraintsProperty.setEditorPresentation(new ButtonPropertyEditorPresentation() {
+			@Override
+			protected void onClick(PropertyTable propertyTable, Property property) throws Exception {
+				m_constraintsDialog = new ConstraintsDialog(propertyTable.getShell(), m_layout, component);
+				m_constraintsDialog.create();
+				m_constraintsDialog.getShell().addDisposeListener(new DisposeListener() {
+					@Override
+					public void widgetDisposed(DisposeEvent e) {
+						m_constraintsDialog = null;
+					}
+				});
+				m_constraintsDialog.updateUI();
+				m_constraintsDialog.open();
+			}
+		});
+		properties.add(constraintsProperty);
+	}
 
-  protected void updateConstraintsDialog() {
-    if (m_constraintsDialog != null) {
-      m_constraintsDialog.updateUI();
-    }
-  }
+	protected void updateConstraintsDialog() {
+		if (m_constraintsDialog != null) {
+			m_constraintsDialog.updateUI();
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Misc
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private JavaInfo getJavaInfo() {
-    return m_layout.getAdapter(JavaInfo.class);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Misc
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private JavaInfo getJavaInfo() {
+		return m_layout.getAdapter(JavaInfo.class);
+	}
 }
diff --git a/org.eclipse.wb.os.linux/src/org/eclipse/wb/internal/os/linux/Activator.java b/org.eclipse.wb.os.linux/src/org/eclipse/wb/internal/os/linux/Activator.java
index 489309327..835c60e26 100644
--- a/org.eclipse.wb.os.linux/src/org/eclipse/wb/internal/os/linux/Activator.java
+++ b/org.eclipse.wb.os.linux/src/org/eclipse/wb/internal/os/linux/Activator.java
@@ -35,90 +35,90 @@
  * @coverage os.linux
  */
 public class Activator extends AbstractUIPlugin {
-  public static final String PLUGIN_ID = "org.eclipse.wb.os.linux";
-  //
-  private static Activator m_plugin;
+	public static final String PLUGIN_ID = "org.eclipse.wb.os.linux";
+	//
+	private static Activator m_plugin;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Life cycle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void start(BundleContext context) throws Exception {
-    super.start(context);
-    m_plugin = this;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Life cycle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+		m_plugin = this;
+	}
 
-  @Override
-  public void stop(BundleContext context) throws Exception {
-    m_plugin = null;
-    super.stop(context);
-  }
+	@Override
+	public void stop(BundleContext context) throws Exception {
+		m_plugin = null;
+		super.stop(context);
+	}
 
-  /**
-   * Returns the shared instance.
-   */
-  public static Activator getDefault() {
-    return m_plugin;
-  }
+	/**
+	 * Returns the shared instance.
+	 */
+	public static Activator getDefault() {
+		return m_plugin;
+	}
 
-  public static void logError(String text, Throwable error) {
-    getDefault().getLog().log(new Status(IStatus.ERROR, PLUGIN_ID, text, error));
-  }
+	public static void logError(String text, Throwable error) {
+		getDefault().getLog().log(new Status(IStatus.ERROR, PLUGIN_ID, text, error));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Files
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link InputStream} for file from plugin directory.
-   */
-  public static InputStream getFile(String path) {
-    try {
-      URL url = new URL(getInstallURL(), path);
-      return url.openStream();
-    } catch (Throwable e) {
-      throw ReflectionUtils.propagate(e);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Files
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link InputStream} for file from plugin directory.
+	 */
+	public static InputStream getFile(String path) {
+		try {
+			URL url = new URL(getInstallURL(), path);
+			return url.openStream();
+		} catch (Throwable e) {
+			throw ReflectionUtils.propagate(e);
+		}
+	}
 
-  /**
-   * @return the install {@link URL} for this {@link Plugin}.
-   */
-  public static URL getInstallURL() {
-    return getInstallUrl(getDefault());
-  }
+	/**
+	 * @return the install {@link URL} for this {@link Plugin}.
+	 */
+	public static URL getInstallURL() {
+		return getInstallUrl(getDefault());
+	}
 
-  /**
-   * @return the install {@link URL} for given {@link Plugin}.
-   */
-  private static URL getInstallUrl(Plugin plugin) {
-    return plugin.getBundle().getEntry("/");
-  }
+	/**
+	 * @return the install {@link URL} for given {@link Plugin}.
+	 */
+	private static URL getInstallUrl(Plugin plugin) {
+		return plugin.getBundle().getEntry("/");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Images
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final Map<String, Image> m_nameToIconMap = Maps.newHashMap();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Images
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final Map<String, Image> m_nameToIconMap = Maps.newHashMap();
 
-  /**
-   * @return the {@link Image} from "icons" directory.
-   */
-  public static Image getImage(String path) {
-    Image image = m_nameToIconMap.get(path);
-    if (image == null) {
-      InputStream is = getFile("icons/" + path);
-      try {
-        image = new Image(Display.getCurrent(), is);
-        m_nameToIconMap.put(path, image);
-      } finally {
-        IOUtils.closeQuietly(is);
-      }
-    }
-    return image;
-  }
+	/**
+	 * @return the {@link Image} from "icons" directory.
+	 */
+	public static Image getImage(String path) {
+		Image image = m_nameToIconMap.get(path);
+		if (image == null) {
+			InputStream is = getFile("icons/" + path);
+			try {
+				image = new Image(Display.getCurrent(), is);
+				m_nameToIconMap.put(path, image);
+			} finally {
+				IOUtils.closeQuietly(is);
+			}
+		}
+		return image;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.os.linux/src/org/eclipse/wb/internal/os/linux/IScreenshotCallback.java b/org.eclipse.wb.os.linux/src/org/eclipse/wb/internal/os/linux/IScreenshotCallback.java
index 92fc0bb5f..abd25b8b5 100644
--- a/org.eclipse.wb.os.linux/src/org/eclipse/wb/internal/os/linux/IScreenshotCallback.java
+++ b/org.eclipse.wb.os.linux/src/org/eclipse/wb/internal/os/linux/IScreenshotCallback.java
@@ -18,13 +18,13 @@
  * @coverage os.linux
  */
 public interface IScreenshotCallback<H extends Number> {
-  /**
-   * Called from native code when the <code>pixmap</code> available for <code>handle</code>.
-   *
-   * @param handle
-   *          the handle of widget (GtkWidget*).
-   * @param pixmap
-   *          the pixmap (GdkPixmap*).
-   */
-  void storeImage(H handle, H pixmap);
+	/**
+	 * Called from native code when the <code>pixmap</code> available for <code>handle</code>.
+	 *
+	 * @param handle
+	 *          the handle of widget (GtkWidget*).
+	 * @param pixmap
+	 *          the pixmap (GdkPixmap*).
+	 */
+	void storeImage(H handle, H pixmap);
 }
diff --git a/org.eclipse.wb.os.linux/src/org/eclipse/wb/internal/os/linux/Messages.java b/org.eclipse.wb.os.linux/src/org/eclipse/wb/internal/os/linux/Messages.java
index 7a4c22978..cb08ba38e 100644
--- a/org.eclipse.wb.os.linux/src/org/eclipse/wb/internal/os/linux/Messages.java
+++ b/org.eclipse.wb.os.linux/src/org/eclipse/wb/internal/os/linux/Messages.java
@@ -3,12 +3,12 @@
 import org.eclipse.osgi.util.NLS;
 
 public class Messages extends NLS {
-  private static final String BUNDLE_NAME = "org.eclipse.wb.internal.os.linux.Messages"; //$NON-NLS-1$
-  static {
-    // initialize resource bundle
-    NLS.initializeMessages(BUNDLE_NAME, Messages.class);
-  }
+	private static final String BUNDLE_NAME = "org.eclipse.wb.internal.os.linux.Messages"; //$NON-NLS-1$
+	static {
+		// initialize resource bundle
+		NLS.initializeMessages(BUNDLE_NAME, Messages.class);
+	}
 
-  private Messages() {
-  }
+	private Messages() {
+	}
 }
diff --git a/org.eclipse.wb.os.linux/src/org/eclipse/wb/internal/os/linux/OSSupportLinux.java b/org.eclipse.wb.os.linux/src/org/eclipse/wb/internal/os/linux/OSSupportLinux.java
index 424522223..ac2069937 100644
--- a/org.eclipse.wb.os.linux/src/org/eclipse/wb/internal/os/linux/OSSupportLinux.java
+++ b/org.eclipse.wb.os.linux/src/org/eclipse/wb/internal/os/linux/OSSupportLinux.java
@@ -55,709 +55,709 @@
 import java.util.Set;
 
 public abstract class OSSupportLinux<H extends Number> extends OSSupport {
-  static {
-    System.loadLibrary("wbp3");
-  }
-
-  // constants
-  private static final Color TITLE_BORDER_COLOR_DARKEST =
-      DrawUtils.getShiftedColor(IColorConstants.titleBackground, -24);
-  private static final Color TITLE_BORDER_COLOR_DARKER =
-      DrawUtils.getShiftedColor(IColorConstants.titleBackground, -16);
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected static final OSSupport INSTANCE = new Impl64();
-  private String m_oldShellText;
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Screen shot
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Map<H, Control> m_controlsRegistry;
-  private boolean m_eclipseToggledOnTop;
-  private Shell m_eclipseShell;
-
-  /**
-   * Prepares to screen shot: register controls. See {@link #registerControl(Control)} for details.
-   */
-  private void prepareScreenshot(Shell shell) throws Exception {
-    createRegistry();
-    registerControl(shell);
-    registerByHandle(shell, "shellHandle");
-  }
-
-  /**
-   * Creates the registry of {@link Control}s.
-   */
-  private void createRegistry() {
-    m_controlsRegistry = Maps.newHashMap();
-  }
-
-  /**
-   * Registers the control to be checked in screen shot callback. Every control can be registered
-   * multiple times. The first image handle received for this control in callback is "root" for this
-   * control and should be bound as {@link Image}.
-   */
-  private void registerControl(Control control) throws Exception {
-    // check size
-    Point size = control.getSize();
-    if (size.x == 0 || size.y == 0) {
-      return;
-    }
-    {
-      registerByHandle(control, "fixedHandle");
-      registerByHandle(control, "handle");
-    }
-    control.setData(WBP_IMAGE, null);
-    // traverse children
-    if (control instanceof Composite) {
-      Composite composite = (Composite) control;
-      for (Control child : composite.getChildren()) {
-        registerControl(child);
-      }
-    }
-  }
-
-  /**
-   * Tries to get the <code>handleName</code> {@link Field} from <code>control</code>. If the field
-   * exists, fills <code>m_needsImage</code>.
-   */
-  private void registerByHandle(Control control, String handleName) throws Exception {
-    H handle = getHandleValue(control, handleName);
-    if (handle != null) {
-      m_controlsRegistry.put(handle, control);
-    }
-  }
-
-  /**
-   * Gets the {@link Shell} of given {@link Control}.
-   *
-   * @return the found parent {@link Shell} or throws {@link AssertionFailedException} if the given
-   *         <code>controlObject</code> is not instance of {@link Control}.
-   */
-  private Shell getShell(Object controlObject) {
-    Assert.instanceOf(Control.class, controlObject);
-    Control control = (Control) controlObject;
-    return control.getShell();
-  }
-
-  @Override
-  public void beginShot(Object controlObject) {
-    Shell shell = layoutShell(controlObject);
-    // setup key title to be used by compiz WM (if enabled)
-    changeTitle(shell);
-    if (!isWorkaroundsDisabled()) {
-      // prepare
-      _begin_shot(getShellHandle(shell));
-      try {
-        // Bug/feature is SWT: since the widget is already shown, the Shell.setVisible() invocation
-        // has no effect, so we've end up with wrong shell trimming.
-        // The workaround is to call adjustTrim() explicitly.
-        ReflectionUtils.invokeMethod(shell, "adjustTrim()", new Object[0]);
-      } catch (Throwable e) {
-        DesignerPlugin.log(e);
-      }
-      m_eclipseShell = DesignerPlugin.getShell();
-      // sometimes can be null, don't know why.
-      if (m_eclipseShell != null) {
-        m_eclipseToggledOnTop = _toggle_above(getShellHandle(m_eclipseShell), false);
-      }
-    } else {
-      shell.setLocation(10000, 10000);
-      shell.setVisible(true);
-    }
-  }
-
-  @Override
-  public void endShot(Object controlObject) {
-    // hide shell. The shell should be visible during all the period of fetching visual data.
-    super.endShot(controlObject);
-    Shell shell = getShell(controlObject);
-    // restore title
-    restoreTitle(shell);
-    if (!isWorkaroundsDisabled()) {
-      _end_shot(getShellHandle(shell));
-      if (m_eclipseShell != null) {
-        _toggle_above(getShellHandle(m_eclipseShell), m_eclipseToggledOnTop);
-      }
-    }
-  }
-
-  private void changeTitle(Shell shell) {
-    m_oldShellText = shell.getText();
-    shell.setText("__wbp_preview_window");
-  }
-
-  private void restoreTitle(Shell shell) {
-    shell.setText(m_oldShellText);
-  }
-
-  @Override
-  public void makeShots(Object controlObject) throws Exception {
-    Shell shell = getShell(controlObject);
-    makeShots0(shell);
-    // check for decorations and draw if needed
-    drawDecorations(shell, shell.getDisplay());
-  }
-
-  /**
-   * Screen shot algorithm is the following:
-   *
-   * <pre>
-   * 1. Register controls which requires the image. See {@link #registerControl(Control)}.
-   * 2. Create the callback, which should be passed into native code. See {@link #_makeShot(int, IScreenshotCallback)}.
-   * 3. While traversing the gtk widgets/gdk windows in native code, the callback returns native widget handle and the image handle
-   *    for it (see {@link IScreenshotCallback}). At this time if the control found in registry, the received image handle converted
-   *    into {@link Image} and bound to control (see {@link #bindImage(Display, Control, int)}).
-   *    Otherwise, the image handle is disposed later (because it may be used in drawing in native code).
-   * 4. Since its not possible to capture window decorations, it needs to be drawn manually. The root shell image replaced with
-   *    the one with decorations (if applicable/available to draw).
-   * </pre>
-   */
-  private void makeShots0(final Shell shell) throws Exception {
-    prepareScreenshot(shell);
-    // get the handle for the root window
-    H shellHandle = getShellHandle(shell);
-    final Set<H> disposeImageHandles = Sets.newHashSet();
-    // apply shot magic
-    _makeShot(shellHandle, new IScreenshotCallback<H>() {
-      @Override
-      public void storeImage(H handle, H imageHandle) {
-        // get the registered control by handle
-        Control imageForControl = m_controlsRegistry.get(handle);
-        if (imageForControl == null || !bindImage(imageForControl, imageHandle)) {
-          // this means given image handle used to draw the gtk widget internally
-          disposeImageHandles.add(imageHandle);
-        }
-      }
-    });
-    // done, dispose image handles needed to draw internally.
-    for (H imageHandle : disposeImageHandles) {
-      _disposeImageHandle(imageHandle);
-    }
-  }
-
-  private boolean bindImage(final Control control, final H imageHandle) {
-    return ExecutionUtils.runObject(new RunnableObjectEx<Boolean>() {
-      @Override
-      public Boolean runObject() throws Exception {
-        if (control.getData(WBP_NEED_IMAGE) != null && control.getData(WBP_IMAGE) == null) {
-          Image image = createImage(imageHandle);
-          control.setData(WBP_IMAGE, image);
-          return true;
-        }
-        return false;
-      }
-    });
-  }
-
-  /**
-   * Warning: single component only! Do not use for creating screen shot of hierarchy!
-   */
-  @Override
-  public Image makeShot(Control control) throws Exception {
-    Shell shell = getShell(control);
-    // get the handle for the control
-    shell.setLocation(10000, 10000);
-    shell.setVisible(true);
-    changeTitle(shell);
-    Rectangle controlBounds = control.getBounds();
-    if (controlBounds.width == 0 || controlBounds.height == 0) {
-      return null;
-    }
-    try {
-      H widgetHandle = getHandleValue(shell, "fixedHandle");
-      if (widgetHandle == null) {
-        // may be null, roll back to "handle"
-        widgetHandle = getHandleValue(shell, "handle");
-      }
-      // apply shot magic
-      H imageHandle = _makeShot(widgetHandle, null);
-      return createImage(imageHandle);
-    } finally {
-      shell.setVisible(false);
-      restoreTitle(shell);
-    }
-  }
-
-  /**
-   * Draws decorations if available/applicable.
-   */
-  private void drawDecorations(Shell shell, final Display display) {
-    Rectangle shellBounds = shell.getBounds();
-    Image shellImage = (Image) shell.getData(WBP_IMAGE);
-    if (shellImage != null) {
-      Rectangle imageBounds = shellImage.getBounds();
-      Point offset = shell.toControl(shell.getLocation());
-      offset.x = -offset.x;
-      offset.y = -offset.y;
-      // adjust by menu bar size
-      if (shell.getMenuBar() != null) {
-        offset.y -= getWidgetBounds(shell.getMenuBar()).height;
-      }
-      // draw
-      Image decoratedShellImage = new Image(display, shellBounds);
-      GC gc = new GC(decoratedShellImage);
-      // draw background
-      gc.setBackground(IColorConstants.titleBackground);
-      gc.fillRectangle(0, 0, shellBounds.width, shellBounds.height);
-      // draw title if any
-      if ((shell.getStyle() & SWT.TITLE) != 0) {
-        // title area gradient
-        gc.setForeground(IColorConstants.titleGradient);
-        gc.fillGradientRectangle(0, 0, shellBounds.width, offset.y, true);
-        int buttonGapX = offset.x - 1;
-        int nextPositionX;
-        // buttons and title
-        {
-          // menu button
-          Image buttonImage = Activator.getImage("decorations/button-menu-icon.png");
-          Rectangle buttonImageBounds = buttonImage.getBounds();
-          int buttonOffsetY = offset.y / 2 - buttonImageBounds.height / 2;
-          gc.drawImage(buttonImage, buttonGapX, buttonOffsetY);
-          nextPositionX = buttonGapX + buttonImageBounds.width + buttonGapX;
-        }
-        {
-          // Shell title
-          String shellTitle = m_oldShellText;
-          if (!StringUtils.isEmpty(shellTitle)) {
-            gc.setForeground(IColorConstants.titleForeground);
-            Point titleExtent = gc.stringExtent(shellTitle);
-            gc.drawString(shellTitle, nextPositionX, offset.y / 2 - titleExtent.y / 2, true);
-          }
-        }
-        {
-          // close button
-          Image buttonImage = Activator.getImage("decorations/button-close-icon.png");
-          Rectangle buttonImageBounds = buttonImage.getBounds();
-          nextPositionX = shellBounds.width - buttonImageBounds.width - buttonGapX;
-          int buttonOffsetY = offset.y / 2 - buttonImageBounds.height / 2;
-          gc.drawImage(buttonImage, nextPositionX, buttonOffsetY);
-          nextPositionX -= buttonGapX + buttonImageBounds.width;
-        }
-        {
-          // maximize button
-          Image buttonImage = Activator.getImage("decorations/button-max-icon.png");
-          Rectangle buttonImageBounds = buttonImage.getBounds();
-          int buttonOffsetY = offset.y / 2 - buttonImageBounds.height / 2;
-          gc.drawImage(buttonImage, nextPositionX, buttonOffsetY);
-          nextPositionX -= buttonGapX + buttonImageBounds.width;
-        }
-        {
-          // minimize button
-          Image buttonImage = Activator.getImage("decorations/button-min-icon.png");
-          Rectangle buttonImageBounds = buttonImage.getBounds();
-          int buttonOffsetY = offset.y / 2 - buttonImageBounds.height / 2;
-          gc.drawImage(buttonImage, nextPositionX, buttonOffsetY);
-        }
-        // outline
-        gc.setForeground(TITLE_BORDER_COLOR_DARKEST);
-        gc.drawRectangle(offset.x - 1, offset.y - 1, imageBounds.width + 1, imageBounds.height + 1);
-        gc.setForeground(TITLE_BORDER_COLOR_DARKER);
-        gc.drawRectangle(offset.x - 2, offset.y - 2, imageBounds.width + 3, imageBounds.height + 3);
-        // shell screen shot
-        gc.drawImage(shellImage, offset.x, offset.y);
-        // done
-        gc.dispose();
-        shellImage.dispose();
-        shell.setData(WBP_IMAGE, decoratedShellImage);
-      }
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Calls native code, pass there the handle of {@link Control} and returns widget's bounds as
-   * {@link Rectangle}.
-   *
-   * @return the widget's bounds as {@link Rectangle}.
-   */
-  private Rectangle getWidgetBounds(Object widget) {
-    H widgetHandle = getHandleValue(widget, "handle");
-    int[] sizes = new int[4];
-    _getWidgetBounds(widgetHandle, sizes);
-    return new Rectangle(sizes[0], sizes[1], sizes[2], sizes[3]);
-  }
-
-  /**
-   * @return the handle value of the {@link Shell} using reflection.
-   */
-  private H getShellHandle(Shell shell) {
-    H widgetHandle = getHandleValue(shell, "fixedHandle");
-    if (widgetHandle == null) {
-      // may be null, roll back to "shellHandle"
-      widgetHandle = getHandleValue(shell, "shellHandle");
-    }
-    return widgetHandle;
-  }
-
-  /**
-   * <p>
-   * If we are still using GTK3, we have to manually handle the GTK locks, in case we plan to run
-   * AWT operations within the SWT event queue. Otherwise there is the risk of a deadlock, in case
-   * SWT already holds a lock on the GDK threads and AWT attempts to acquire it as well.
-   * </p>
-   * <p>
-   * Access has to be done via reflection, in order to avoid compilation errors when checking out
-   * the workspace on Windows or MacOS, as the GTK classes are only available on a Linux system.
-   * </p>
-   *
-   * @return {@code true}, if WindowBuilder is already using GTK4. Otherwise {@code false}.
-   * @see #gdkThreadsEnter()
-   * @see #gdkThreadsLeave()
-   */
-  private static boolean isGtk4() {
-    try {
-      return ReflectionUtils.getFieldBoolean(
-          OSSupportLinux.class.getClassLoader().loadClass("org.eclipse.swt.internal.gtk.GTK"),
-          "GTK4");
-    } catch (ReflectiveOperationException e) {
-      DesignerPlugin.log(e.getMessage(), e);
-      return false;
-    }
-  }
-
-  /**
-   * <p>
-   * Calls the native {@code gdk_threads_enter} method. Has to be done <b>after</b> performing an
-   * AWT operation to re-acquire the lock for the SWT event queue.
-   * </p>
-   * <p>
-   * Access has to be done via reflection, in order to avoid compilation errors when checking out
-   * the workspace on Windows or MacOS, as the GTK classes are only available on a Linux system.
-   * </p>
-   * <p>
-   * This method may <b>only</b> be called when using GTK3!
-   * </p>
-   *
-   * @see #isGtk4()
-   * @see <a href="https://docs.gtk.org/gdk3/func.threads_enter.html">GTK3</a>
-   */
-  private static void gdkThreadsEnter() {
-    try {
-      ReflectionUtils.invokeMethod(
-          OSSupportLinux.class.getClassLoader().loadClass("org.eclipse.swt.internal.gtk.GDK"),
-          "gdk_threads_enter()");
-    } catch (Exception e) {
-      DesignerPlugin.log(e.getMessage(), e);
-    }
-  }
-
-  /**
-   * <p>
-   * Calls the native {@code gdk_threads_leave} method. Has to be done <b>before</b> performing an
-   * AWT operation, to release the lock currently held by the SWT event queue.
-   * </p>
-   * <p>
-   * Access has to be done via reflection, in order to avoid compilation errors when checking out
-   * the workspace on Windows or MacOS, as the GTK classes are only available on a Linux system.
-   * </p>
-   * <p>
-   * This method may <b>only</b> be called when using GTK3!
-   * </p>
-   *
-   * @see #isGtk4()
-   * @see <a href="https://docs.gtk.org/gdk3/func.threads_leave.html">GTK3</a>
-   */
-  private static void gdkThreadsLeave() {
-    try {
-      ReflectionUtils.invokeMethod(
-          OSSupportLinux.class.getClassLoader().loadClass("org.eclipse.swt.internal.gtk.GDK"),
-          "gdk_threads_leave()");
-    } catch (Exception e) {
-      DesignerPlugin.log(e.getMessage(), e);
-    }
-  }
-
-  /**
-   * @return the H extends Number value as native pointer for native handles. Note: returns
-   *         <code>null</code> if handle is 0 or cannot be obtained.
-   */
-  protected abstract H getHandleValue(Object widget, String fieldName);
-
-  /**
-   * @return the Image instance created by SWT internal method Image.gtk_new which uses external
-   *         GtkPixmap* or cairo_surface_t* pointer.
-   */
-  protected abstract Image createImage0(H imageHandle) throws Exception;
-
-  private Image createImage(H imageHandle) throws Exception {
-    Image image = createImage0(imageHandle);
-    // BUG in SWT: Image instance is not fully initialized
-    // See https://bugs.eclipse.org/bugs/show_bug.cgi?id=382175
-    Image newImage = new Image(null, image.getImageData());
-    image.dispose();
-    return newImage;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Menu
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Image getMenuPopupVisualData(Menu menu, int[] bounds) throws Exception {
-    // create new image and fetch item sizes
-    H handle = getHandleValue(menu, "handle");
-    H imageHandle = _fetchMenuVisualData(handle, bounds);
-    // set new handle to image
-    return createImage(imageHandle);
-  }
-
-  /**
-   * Fetches the all menu bar item's bounds and returns as {@link List} of {@link Rectangle}.
-   */
-  @Override
-  public Image getMenuBarVisualData(Menu menu, List<Rectangle> bounds) {
-    for (int i = 0; i < menu.getItemCount(); ++i) {
-      MenuItem item = menu.getItem(i);
-      bounds.add(getWidgetBounds(item));
-    }
-    return null;
-  }
-
-  /**
-   * Fetches the menu bar bounds.
-   */
-  @Override
-  public final Rectangle getMenuBarBounds(Menu menu) {
-    Rectangle bounds = getWidgetBounds(menu);
-    Shell shell = menu.getShell();
-    Point p = shell.toControl(shell.getLocation());
-    p.x = -p.x;
-    p.y = -p.y - bounds.height;
-    return new Rectangle(p.x, p.y, bounds.width, bounds.height);
-  }
-
-  @Override
-  public final int getDefaultMenuBarHeight() {
-    // no way :(
-    return 24;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // TabItem
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final Rectangle getTabItemBounds(Object tabItem) {
-    return getWidgetBounds(tabItem);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Troubleshooting
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private boolean isWorkaroundsDisabled() {
-    return Boolean.parseBoolean(System.getProperty("__wbp.linux.disableScreenshotWorkarounds"));
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Alpha
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void setAlpha(Shell shell, int alpha) {
-    _setAlpha(getShellHandle(shell), alpha);
-  }
-
-  @Override
-  public int getAlpha(Shell shell) {
-    return _getAlpha(getShellHandle(shell));
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tree
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean isPlusMinusTreeClick(Tree tree, int x, int y) {
-    return _isPlusMinusTreeClick(getHandleValue(tree, "handle"), x, y);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AWT/Swing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-
-  /**
-   * <p>
-   * Executes the given runnable synchronously within the AWT event queue. If the
-   * current thread is already the AWT thread, the job is executed directly.
-   * </p>
-   * <p>
-   * Linux synchronizes GTK calls. Meaning if this method is called from within
-   * the SWT UI thread, then we may have already acquired the lock. If we then
-   * execute the job in the AWT UI thread and wait for its completion, we risk a
-   * deadlock, as the AWT thread may also try to acquire the same lock.
-   * </p>
-   * <p>
-   * In order to avoid this problem, the SWT thread has to explicitly leave the
-   * critical region before and re-enter it, immediately after the AWT job has
-   * been executed. This operation is safe, as the current thread blocks any
-   * further SWT updates, meaning the AWT thread is the only one who can interact
-   * with GDK for this brief duration.
-   * </p>
-   * <p>
-   * Note that this behavior is only relevant for GTK3. Those methods have been
-   * marked as deprecated in GTK 3.6 and removed in GTK4. Threads are assumed to
-   * always be executed in the main thread, rendering this problem obsolete.
-   * </p>
-   *
-   * @param job The runnable to be executed in the AWT UI thread
-   */
-  @Override
-  public void runAwt(Runnable job) {
-    Display display = Display.getCurrent();
-    try {
-      if (display != null && !isGtk4()) {
-        gdkThreadsLeave();
-      }
-      super.runAwt(job);
-    } finally {
-      if (display != null && !isGtk4()) {
-        gdkThreadsEnter();
-      }
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Native
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if pointer is over {@link TreeItem} plus/minus sign.
-   */
-  private static native <H extends Number> boolean _isPlusMinusTreeClick(H handle, int x, int y);
-
-  /**
-   * Sets the <code>alpha</code> value for given <code>shell</code>.
-   *
-   * @param shellHandle
-   *          the handle of {@link Shell}.
-   * @param alpha
-   *          the value of alpha, 0-255, not validated.
-   */
-  private static native <H extends Number> void _setAlpha(H shellHandle, int alpha);
-
-  /**
-   * Returns the current alpha value for given <code>shellHandle</code>.
-   *
-   * @param shellHandle
-   *          the handle of {@link Shell}.
-   * @return the alpha value.
-   */
-  private static native <H extends Number> int _getAlpha(H shellHandle);
-
-  /**
-   * Fills the given array of int with bounds as x, y, width, height sequence.
-   *
-   * @param widgetHandle
-   *          the handle (GtkWidget*) of widget.
-   * @param bounds
-   *          the array of integer with size 4.
-   */
-  private static native <H extends Number> void _getWidgetBounds(H widgetHandle, int[] bounds);
-
-  /**
-   * Fetches the menu data: returns item bounds as plain array and the image handle of menu image.
-   *
-   * @param menuHandle
-   *          the handle (GtkWidget*) of menu.
-   * @param bounds
-   *          the array of integer with size 4 * menu item count.
-   * @return the GdkPixmap* or cairo_surface_t* of menu widget.
-   */
-  private static native <H extends Number> H _fetchMenuVisualData(H menuHandle, int[] bounds);
-
-  /**
-   * Causes taking the screen shot.
-   *
-   * @param windowHandle
-   *          the handle (GtkWidget*) of root gtk widget of {@link Shell}.
-   * @param callback
-   *          the instance of {@link IScreenshotCallback}. Can be <code>null</code>.
-   * @return the GdkPixmap* or cairo_surface_t* of {@link Shell}.
-   */
-  private static native <H extends Number> H _makeShot(H windowHandle,
-      IScreenshotCallback<H> callback);
-
-  /**
-   * Do dispose for given <code>imageHandle</code>.
-   */
-  private static native <H extends Number> void _disposeImageHandle(H imageHandle);
-
-  /**
-   * Toggles the "above" X Window property. If <code>forceToggle</code> is <code>false</code> then
-   * no toggling if window already has the "above" property set.
-   *
-   * @param windowHandle
-   *          the handle (GtkWidget*) of root gtk widget of {@link Shell}.
-   * @param forceToggle
-   *          if <code>true</code> then toggling occurred without paying attention to current state.
-   * @return <code>true</code> if toggling occurred.
-   */
-  private static native <H extends Number> boolean _toggle_above(H windowHandle,
-      boolean forceToggle);
-
-  /**
-   * Prepares the preview window to screen shot.
-   */
-  private static native <H extends Number> boolean _begin_shot(H windowHandle);
-
-  /**
-   * Finalizes the process of screen shot.
-   */
-  private static native <H extends Number> boolean _end_shot(H windowHandle);
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Implementations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final class Impl64 extends OSSupportLinux<Long> {
-    private final VisualDataMockupProvider mockupProvider = new VisualDataMockupProvider();
-
-    @Override
-    protected Long getHandleValue(Object widget, String fieldName) {
-      long value = ReflectionUtils.getFieldLong(widget, fieldName);
-      if (value != 0) {
-        return value;
-      }
-      return null;
-    }
-
-    @Override
-    public Image getMenuPopupVisualData(Menu menu, int[] bounds) throws Exception {
-      return mockupProvider.mockMenuPopupVisualData(menu, bounds);
-    }
-
-    @Override
-    protected Image createImage0(Long imageHandle) throws Exception {
-      return (Image) ReflectionUtils.invokeMethod2(
-          Image.class,
-          "gtk_new",
-          Device.class,
-          int.class,
-          long.class,
-          long.class,
-          null,
-          SWT.BITMAP,
-          imageHandle.longValue(),
-          0);
-    }
-  }
+	static {
+		System.loadLibrary("wbp3");
+	}
+
+	// constants
+	private static final Color TITLE_BORDER_COLOR_DARKEST =
+			DrawUtils.getShiftedColor(IColorConstants.titleBackground, -24);
+	private static final Color TITLE_BORDER_COLOR_DARKER =
+			DrawUtils.getShiftedColor(IColorConstants.titleBackground, -16);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected static final OSSupport INSTANCE = new Impl64();
+	private String m_oldShellText;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Screen shot
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Map<H, Control> m_controlsRegistry;
+	private boolean m_eclipseToggledOnTop;
+	private Shell m_eclipseShell;
+
+	/**
+	 * Prepares to screen shot: register controls. See {@link #registerControl(Control)} for details.
+	 */
+	private void prepareScreenshot(Shell shell) throws Exception {
+		createRegistry();
+		registerControl(shell);
+		registerByHandle(shell, "shellHandle");
+	}
+
+	/**
+	 * Creates the registry of {@link Control}s.
+	 */
+	private void createRegistry() {
+		m_controlsRegistry = Maps.newHashMap();
+	}
+
+	/**
+	 * Registers the control to be checked in screen shot callback. Every control can be registered
+	 * multiple times. The first image handle received for this control in callback is "root" for this
+	 * control and should be bound as {@link Image}.
+	 */
+	private void registerControl(Control control) throws Exception {
+		// check size
+		Point size = control.getSize();
+		if (size.x == 0 || size.y == 0) {
+			return;
+		}
+		{
+			registerByHandle(control, "fixedHandle");
+			registerByHandle(control, "handle");
+		}
+		control.setData(WBP_IMAGE, null);
+		// traverse children
+		if (control instanceof Composite) {
+			Composite composite = (Composite) control;
+			for (Control child : composite.getChildren()) {
+				registerControl(child);
+			}
+		}
+	}
+
+	/**
+	 * Tries to get the <code>handleName</code> {@link Field} from <code>control</code>. If the field
+	 * exists, fills <code>m_needsImage</code>.
+	 */
+	private void registerByHandle(Control control, String handleName) throws Exception {
+		H handle = getHandleValue(control, handleName);
+		if (handle != null) {
+			m_controlsRegistry.put(handle, control);
+		}
+	}
+
+	/**
+	 * Gets the {@link Shell} of given {@link Control}.
+	 *
+	 * @return the found parent {@link Shell} or throws {@link AssertionFailedException} if the given
+	 *         <code>controlObject</code> is not instance of {@link Control}.
+	 */
+	private Shell getShell(Object controlObject) {
+		Assert.instanceOf(Control.class, controlObject);
+		Control control = (Control) controlObject;
+		return control.getShell();
+	}
+
+	@Override
+	public void beginShot(Object controlObject) {
+		Shell shell = layoutShell(controlObject);
+		// setup key title to be used by compiz WM (if enabled)
+		changeTitle(shell);
+		if (!isWorkaroundsDisabled()) {
+			// prepare
+			_begin_shot(getShellHandle(shell));
+			try {
+				// Bug/feature is SWT: since the widget is already shown, the Shell.setVisible() invocation
+				// has no effect, so we've end up with wrong shell trimming.
+				// The workaround is to call adjustTrim() explicitly.
+				ReflectionUtils.invokeMethod(shell, "adjustTrim()", new Object[0]);
+			} catch (Throwable e) {
+				DesignerPlugin.log(e);
+			}
+			m_eclipseShell = DesignerPlugin.getShell();
+			// sometimes can be null, don't know why.
+			if (m_eclipseShell != null) {
+				m_eclipseToggledOnTop = _toggle_above(getShellHandle(m_eclipseShell), false);
+			}
+		} else {
+			shell.setLocation(10000, 10000);
+			shell.setVisible(true);
+		}
+	}
+
+	@Override
+	public void endShot(Object controlObject) {
+		// hide shell. The shell should be visible during all the period of fetching visual data.
+		super.endShot(controlObject);
+		Shell shell = getShell(controlObject);
+		// restore title
+		restoreTitle(shell);
+		if (!isWorkaroundsDisabled()) {
+			_end_shot(getShellHandle(shell));
+			if (m_eclipseShell != null) {
+				_toggle_above(getShellHandle(m_eclipseShell), m_eclipseToggledOnTop);
+			}
+		}
+	}
+
+	private void changeTitle(Shell shell) {
+		m_oldShellText = shell.getText();
+		shell.setText("__wbp_preview_window");
+	}
+
+	private void restoreTitle(Shell shell) {
+		shell.setText(m_oldShellText);
+	}
+
+	@Override
+	public void makeShots(Object controlObject) throws Exception {
+		Shell shell = getShell(controlObject);
+		makeShots0(shell);
+		// check for decorations and draw if needed
+		drawDecorations(shell, shell.getDisplay());
+	}
+
+	/**
+	 * Screen shot algorithm is the following:
+	 *
+	 * <pre>
+	 * 1. Register controls which requires the image. See {@link #registerControl(Control)}.
+	 * 2. Create the callback, which should be passed into native code. See {@link #_makeShot(int, IScreenshotCallback)}.
+	 * 3. While traversing the gtk widgets/gdk windows in native code, the callback returns native widget handle and the image handle
+	 *    for it (see {@link IScreenshotCallback}). At this time if the control found in registry, the received image handle converted
+	 *    into {@link Image} and bound to control (see {@link #bindImage(Display, Control, int)}).
+	 *    Otherwise, the image handle is disposed later (because it may be used in drawing in native code).
+	 * 4. Since its not possible to capture window decorations, it needs to be drawn manually. The root shell image replaced with
+	 *    the one with decorations (if applicable/available to draw).
+	 * </pre>
+	 */
+	private void makeShots0(final Shell shell) throws Exception {
+		prepareScreenshot(shell);
+		// get the handle for the root window
+		H shellHandle = getShellHandle(shell);
+		final Set<H> disposeImageHandles = Sets.newHashSet();
+		// apply shot magic
+		_makeShot(shellHandle, new IScreenshotCallback<H>() {
+			@Override
+			public void storeImage(H handle, H imageHandle) {
+				// get the registered control by handle
+				Control imageForControl = m_controlsRegistry.get(handle);
+				if (imageForControl == null || !bindImage(imageForControl, imageHandle)) {
+					// this means given image handle used to draw the gtk widget internally
+					disposeImageHandles.add(imageHandle);
+				}
+			}
+		});
+		// done, dispose image handles needed to draw internally.
+		for (H imageHandle : disposeImageHandles) {
+			_disposeImageHandle(imageHandle);
+		}
+	}
+
+	private boolean bindImage(final Control control, final H imageHandle) {
+		return ExecutionUtils.runObject(new RunnableObjectEx<Boolean>() {
+			@Override
+			public Boolean runObject() throws Exception {
+				if (control.getData(WBP_NEED_IMAGE) != null && control.getData(WBP_IMAGE) == null) {
+					Image image = createImage(imageHandle);
+					control.setData(WBP_IMAGE, image);
+					return true;
+				}
+				return false;
+			}
+		});
+	}
+
+	/**
+	 * Warning: single component only! Do not use for creating screen shot of hierarchy!
+	 */
+	@Override
+	public Image makeShot(Control control) throws Exception {
+		Shell shell = getShell(control);
+		// get the handle for the control
+		shell.setLocation(10000, 10000);
+		shell.setVisible(true);
+		changeTitle(shell);
+		Rectangle controlBounds = control.getBounds();
+		if (controlBounds.width == 0 || controlBounds.height == 0) {
+			return null;
+		}
+		try {
+			H widgetHandle = getHandleValue(shell, "fixedHandle");
+			if (widgetHandle == null) {
+				// may be null, roll back to "handle"
+				widgetHandle = getHandleValue(shell, "handle");
+			}
+			// apply shot magic
+			H imageHandle = _makeShot(widgetHandle, null);
+			return createImage(imageHandle);
+		} finally {
+			shell.setVisible(false);
+			restoreTitle(shell);
+		}
+	}
+
+	/**
+	 * Draws decorations if available/applicable.
+	 */
+	private void drawDecorations(Shell shell, final Display display) {
+		Rectangle shellBounds = shell.getBounds();
+		Image shellImage = (Image) shell.getData(WBP_IMAGE);
+		if (shellImage != null) {
+			Rectangle imageBounds = shellImage.getBounds();
+			Point offset = shell.toControl(shell.getLocation());
+			offset.x = -offset.x;
+			offset.y = -offset.y;
+			// adjust by menu bar size
+			if (shell.getMenuBar() != null) {
+				offset.y -= getWidgetBounds(shell.getMenuBar()).height;
+			}
+			// draw
+			Image decoratedShellImage = new Image(display, shellBounds);
+			GC gc = new GC(decoratedShellImage);
+			// draw background
+			gc.setBackground(IColorConstants.titleBackground);
+			gc.fillRectangle(0, 0, shellBounds.width, shellBounds.height);
+			// draw title if any
+			if ((shell.getStyle() & SWT.TITLE) != 0) {
+				// title area gradient
+				gc.setForeground(IColorConstants.titleGradient);
+				gc.fillGradientRectangle(0, 0, shellBounds.width, offset.y, true);
+				int buttonGapX = offset.x - 1;
+				int nextPositionX;
+				// buttons and title
+				{
+					// menu button
+					Image buttonImage = Activator.getImage("decorations/button-menu-icon.png");
+					Rectangle buttonImageBounds = buttonImage.getBounds();
+					int buttonOffsetY = offset.y / 2 - buttonImageBounds.height / 2;
+					gc.drawImage(buttonImage, buttonGapX, buttonOffsetY);
+					nextPositionX = buttonGapX + buttonImageBounds.width + buttonGapX;
+				}
+				{
+					// Shell title
+					String shellTitle = m_oldShellText;
+					if (!StringUtils.isEmpty(shellTitle)) {
+						gc.setForeground(IColorConstants.titleForeground);
+						Point titleExtent = gc.stringExtent(shellTitle);
+						gc.drawString(shellTitle, nextPositionX, offset.y / 2 - titleExtent.y / 2, true);
+					}
+				}
+				{
+					// close button
+					Image buttonImage = Activator.getImage("decorations/button-close-icon.png");
+					Rectangle buttonImageBounds = buttonImage.getBounds();
+					nextPositionX = shellBounds.width - buttonImageBounds.width - buttonGapX;
+					int buttonOffsetY = offset.y / 2 - buttonImageBounds.height / 2;
+					gc.drawImage(buttonImage, nextPositionX, buttonOffsetY);
+					nextPositionX -= buttonGapX + buttonImageBounds.width;
+				}
+				{
+					// maximize button
+					Image buttonImage = Activator.getImage("decorations/button-max-icon.png");
+					Rectangle buttonImageBounds = buttonImage.getBounds();
+					int buttonOffsetY = offset.y / 2 - buttonImageBounds.height / 2;
+					gc.drawImage(buttonImage, nextPositionX, buttonOffsetY);
+					nextPositionX -= buttonGapX + buttonImageBounds.width;
+				}
+				{
+					// minimize button
+					Image buttonImage = Activator.getImage("decorations/button-min-icon.png");
+					Rectangle buttonImageBounds = buttonImage.getBounds();
+					int buttonOffsetY = offset.y / 2 - buttonImageBounds.height / 2;
+					gc.drawImage(buttonImage, nextPositionX, buttonOffsetY);
+				}
+				// outline
+				gc.setForeground(TITLE_BORDER_COLOR_DARKEST);
+				gc.drawRectangle(offset.x - 1, offset.y - 1, imageBounds.width + 1, imageBounds.height + 1);
+				gc.setForeground(TITLE_BORDER_COLOR_DARKER);
+				gc.drawRectangle(offset.x - 2, offset.y - 2, imageBounds.width + 3, imageBounds.height + 3);
+				// shell screen shot
+				gc.drawImage(shellImage, offset.x, offset.y);
+				// done
+				gc.dispose();
+				shellImage.dispose();
+				shell.setData(WBP_IMAGE, decoratedShellImage);
+			}
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Calls native code, pass there the handle of {@link Control} and returns widget's bounds as
+	 * {@link Rectangle}.
+	 *
+	 * @return the widget's bounds as {@link Rectangle}.
+	 */
+	private Rectangle getWidgetBounds(Object widget) {
+		H widgetHandle = getHandleValue(widget, "handle");
+		int[] sizes = new int[4];
+		_getWidgetBounds(widgetHandle, sizes);
+		return new Rectangle(sizes[0], sizes[1], sizes[2], sizes[3]);
+	}
+
+	/**
+	 * @return the handle value of the {@link Shell} using reflection.
+	 */
+	private H getShellHandle(Shell shell) {
+		H widgetHandle = getHandleValue(shell, "fixedHandle");
+		if (widgetHandle == null) {
+			// may be null, roll back to "shellHandle"
+			widgetHandle = getHandleValue(shell, "shellHandle");
+		}
+		return widgetHandle;
+	}
+
+	/**
+	 * <p>
+	 * If we are still using GTK3, we have to manually handle the GTK locks, in case we plan to run
+	 * AWT operations within the SWT event queue. Otherwise there is the risk of a deadlock, in case
+	 * SWT already holds a lock on the GDK threads and AWT attempts to acquire it as well.
+	 * </p>
+	 * <p>
+	 * Access has to be done via reflection, in order to avoid compilation errors when checking out
+	 * the workspace on Windows or MacOS, as the GTK classes are only available on a Linux system.
+	 * </p>
+	 *
+	 * @return {@code true}, if WindowBuilder is already using GTK4. Otherwise {@code false}.
+	 * @see #gdkThreadsEnter()
+	 * @see #gdkThreadsLeave()
+	 */
+	private static boolean isGtk4() {
+		try {
+			return ReflectionUtils.getFieldBoolean(
+					OSSupportLinux.class.getClassLoader().loadClass("org.eclipse.swt.internal.gtk.GTK"),
+					"GTK4");
+		} catch (ReflectiveOperationException e) {
+			DesignerPlugin.log(e.getMessage(), e);
+			return false;
+		}
+	}
+
+	/**
+	 * <p>
+	 * Calls the native {@code gdk_threads_enter} method. Has to be done <b>after</b> performing an
+	 * AWT operation to re-acquire the lock for the SWT event queue.
+	 * </p>
+	 * <p>
+	 * Access has to be done via reflection, in order to avoid compilation errors when checking out
+	 * the workspace on Windows or MacOS, as the GTK classes are only available on a Linux system.
+	 * </p>
+	 * <p>
+	 * This method may <b>only</b> be called when using GTK3!
+	 * </p>
+	 *
+	 * @see #isGtk4()
+	 * @see <a href="https://docs.gtk.org/gdk3/func.threads_enter.html">GTK3</a>
+	 */
+	private static void gdkThreadsEnter() {
+		try {
+			ReflectionUtils.invokeMethod(
+					OSSupportLinux.class.getClassLoader().loadClass("org.eclipse.swt.internal.gtk.GDK"),
+					"gdk_threads_enter()");
+		} catch (Exception e) {
+			DesignerPlugin.log(e.getMessage(), e);
+		}
+	}
+
+	/**
+	 * <p>
+	 * Calls the native {@code gdk_threads_leave} method. Has to be done <b>before</b> performing an
+	 * AWT operation, to release the lock currently held by the SWT event queue.
+	 * </p>
+	 * <p>
+	 * Access has to be done via reflection, in order to avoid compilation errors when checking out
+	 * the workspace on Windows or MacOS, as the GTK classes are only available on a Linux system.
+	 * </p>
+	 * <p>
+	 * This method may <b>only</b> be called when using GTK3!
+	 * </p>
+	 *
+	 * @see #isGtk4()
+	 * @see <a href="https://docs.gtk.org/gdk3/func.threads_leave.html">GTK3</a>
+	 */
+	private static void gdkThreadsLeave() {
+		try {
+			ReflectionUtils.invokeMethod(
+					OSSupportLinux.class.getClassLoader().loadClass("org.eclipse.swt.internal.gtk.GDK"),
+					"gdk_threads_leave()");
+		} catch (Exception e) {
+			DesignerPlugin.log(e.getMessage(), e);
+		}
+	}
+
+	/**
+	 * @return the H extends Number value as native pointer for native handles. Note: returns
+	 *         <code>null</code> if handle is 0 or cannot be obtained.
+	 */
+	protected abstract H getHandleValue(Object widget, String fieldName);
+
+	/**
+	 * @return the Image instance created by SWT internal method Image.gtk_new which uses external
+	 *         GtkPixmap* or cairo_surface_t* pointer.
+	 */
+	protected abstract Image createImage0(H imageHandle) throws Exception;
+
+	private Image createImage(H imageHandle) throws Exception {
+		Image image = createImage0(imageHandle);
+		// BUG in SWT: Image instance is not fully initialized
+		// See https://bugs.eclipse.org/bugs/show_bug.cgi?id=382175
+		Image newImage = new Image(null, image.getImageData());
+		image.dispose();
+		return newImage;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Menu
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Image getMenuPopupVisualData(Menu menu, int[] bounds) throws Exception {
+		// create new image and fetch item sizes
+		H handle = getHandleValue(menu, "handle");
+		H imageHandle = _fetchMenuVisualData(handle, bounds);
+		// set new handle to image
+		return createImage(imageHandle);
+	}
+
+	/**
+	 * Fetches the all menu bar item's bounds and returns as {@link List} of {@link Rectangle}.
+	 */
+	@Override
+	public Image getMenuBarVisualData(Menu menu, List<Rectangle> bounds) {
+		for (int i = 0; i < menu.getItemCount(); ++i) {
+			MenuItem item = menu.getItem(i);
+			bounds.add(getWidgetBounds(item));
+		}
+		return null;
+	}
+
+	/**
+	 * Fetches the menu bar bounds.
+	 */
+	@Override
+	public final Rectangle getMenuBarBounds(Menu menu) {
+		Rectangle bounds = getWidgetBounds(menu);
+		Shell shell = menu.getShell();
+		Point p = shell.toControl(shell.getLocation());
+		p.x = -p.x;
+		p.y = -p.y - bounds.height;
+		return new Rectangle(p.x, p.y, bounds.width, bounds.height);
+	}
+
+	@Override
+	public final int getDefaultMenuBarHeight() {
+		// no way :(
+		return 24;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// TabItem
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final Rectangle getTabItemBounds(Object tabItem) {
+		return getWidgetBounds(tabItem);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Troubleshooting
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private boolean isWorkaroundsDisabled() {
+		return Boolean.parseBoolean(System.getProperty("__wbp.linux.disableScreenshotWorkarounds"));
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Alpha
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void setAlpha(Shell shell, int alpha) {
+		_setAlpha(getShellHandle(shell), alpha);
+	}
+
+	@Override
+	public int getAlpha(Shell shell) {
+		return _getAlpha(getShellHandle(shell));
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tree
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean isPlusMinusTreeClick(Tree tree, int x, int y) {
+		return _isPlusMinusTreeClick(getHandleValue(tree, "handle"), x, y);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AWT/Swing
+	//
+	////////////////////////////////////////////////////////////////////////////
+
+	/**
+	 * <p>
+	 * Executes the given runnable synchronously within the AWT event queue. If the
+	 * current thread is already the AWT thread, the job is executed directly.
+	 * </p>
+	 * <p>
+	 * Linux synchronizes GTK calls. Meaning if this method is called from within
+	 * the SWT UI thread, then we may have already acquired the lock. If we then
+	 * execute the job in the AWT UI thread and wait for its completion, we risk a
+	 * deadlock, as the AWT thread may also try to acquire the same lock.
+	 * </p>
+	 * <p>
+	 * In order to avoid this problem, the SWT thread has to explicitly leave the
+	 * critical region before and re-enter it, immediately after the AWT job has
+	 * been executed. This operation is safe, as the current thread blocks any
+	 * further SWT updates, meaning the AWT thread is the only one who can interact
+	 * with GDK for this brief duration.
+	 * </p>
+	 * <p>
+	 * Note that this behavior is only relevant for GTK3. Those methods have been
+	 * marked as deprecated in GTK 3.6 and removed in GTK4. Threads are assumed to
+	 * always be executed in the main thread, rendering this problem obsolete.
+	 * </p>
+	 *
+	 * @param job The runnable to be executed in the AWT UI thread
+	 */
+	@Override
+	public void runAwt(Runnable job) {
+		Display display = Display.getCurrent();
+		try {
+			if (display != null && !isGtk4()) {
+				gdkThreadsLeave();
+			}
+			super.runAwt(job);
+		} finally {
+			if (display != null && !isGtk4()) {
+				gdkThreadsEnter();
+			}
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Native
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if pointer is over {@link TreeItem} plus/minus sign.
+	 */
+	private static native <H extends Number> boolean _isPlusMinusTreeClick(H handle, int x, int y);
+
+	/**
+	 * Sets the <code>alpha</code> value for given <code>shell</code>.
+	 *
+	 * @param shellHandle
+	 *          the handle of {@link Shell}.
+	 * @param alpha
+	 *          the value of alpha, 0-255, not validated.
+	 */
+	private static native <H extends Number> void _setAlpha(H shellHandle, int alpha);
+
+	/**
+	 * Returns the current alpha value for given <code>shellHandle</code>.
+	 *
+	 * @param shellHandle
+	 *          the handle of {@link Shell}.
+	 * @return the alpha value.
+	 */
+	private static native <H extends Number> int _getAlpha(H shellHandle);
+
+	/**
+	 * Fills the given array of int with bounds as x, y, width, height sequence.
+	 *
+	 * @param widgetHandle
+	 *          the handle (GtkWidget*) of widget.
+	 * @param bounds
+	 *          the array of integer with size 4.
+	 */
+	private static native <H extends Number> void _getWidgetBounds(H widgetHandle, int[] bounds);
+
+	/**
+	 * Fetches the menu data: returns item bounds as plain array and the image handle of menu image.
+	 *
+	 * @param menuHandle
+	 *          the handle (GtkWidget*) of menu.
+	 * @param bounds
+	 *          the array of integer with size 4 * menu item count.
+	 * @return the GdkPixmap* or cairo_surface_t* of menu widget.
+	 */
+	private static native <H extends Number> H _fetchMenuVisualData(H menuHandle, int[] bounds);
+
+	/**
+	 * Causes taking the screen shot.
+	 *
+	 * @param windowHandle
+	 *          the handle (GtkWidget*) of root gtk widget of {@link Shell}.
+	 * @param callback
+	 *          the instance of {@link IScreenshotCallback}. Can be <code>null</code>.
+	 * @return the GdkPixmap* or cairo_surface_t* of {@link Shell}.
+	 */
+	private static native <H extends Number> H _makeShot(H windowHandle,
+			IScreenshotCallback<H> callback);
+
+	/**
+	 * Do dispose for given <code>imageHandle</code>.
+	 */
+	private static native <H extends Number> void _disposeImageHandle(H imageHandle);
+
+	/**
+	 * Toggles the "above" X Window property. If <code>forceToggle</code> is <code>false</code> then
+	 * no toggling if window already has the "above" property set.
+	 *
+	 * @param windowHandle
+	 *          the handle (GtkWidget*) of root gtk widget of {@link Shell}.
+	 * @param forceToggle
+	 *          if <code>true</code> then toggling occurred without paying attention to current state.
+	 * @return <code>true</code> if toggling occurred.
+	 */
+	private static native <H extends Number> boolean _toggle_above(H windowHandle,
+			boolean forceToggle);
+
+	/**
+	 * Prepares the preview window to screen shot.
+	 */
+	private static native <H extends Number> boolean _begin_shot(H windowHandle);
+
+	/**
+	 * Finalizes the process of screen shot.
+	 */
+	private static native <H extends Number> boolean _end_shot(H windowHandle);
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Implementations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final class Impl64 extends OSSupportLinux<Long> {
+		private final VisualDataMockupProvider mockupProvider = new VisualDataMockupProvider();
+
+		@Override
+		protected Long getHandleValue(Object widget, String fieldName) {
+			long value = ReflectionUtils.getFieldLong(widget, fieldName);
+			if (value != 0) {
+				return value;
+			}
+			return null;
+		}
+
+		@Override
+		public Image getMenuPopupVisualData(Menu menu, int[] bounds) throws Exception {
+			return mockupProvider.mockMenuPopupVisualData(menu, bounds);
+		}
+
+		@Override
+		protected Image createImage0(Long imageHandle) throws Exception {
+			return (Image) ReflectionUtils.invokeMethod2(
+					Image.class,
+					"gtk_new",
+					Device.class,
+					int.class,
+					long.class,
+					long.class,
+					null,
+					SWT.BITMAP,
+					imageHandle.longValue(),
+					0);
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.os.macosx/src/org/eclipse/wb/internal/os/macosx/OSSupportMacOSX.java b/org.eclipse.wb.os.macosx/src/org/eclipse/wb/internal/os/macosx/OSSupportMacOSX.java
index 2f6830341..e6ef4d5bc 100644
--- a/org.eclipse.wb.os.macosx/src/org/eclipse/wb/internal/os/macosx/OSSupportMacOSX.java
+++ b/org.eclipse.wb.os.macosx/src/org/eclipse/wb/internal/os/macosx/OSSupportMacOSX.java
@@ -42,302 +42,302 @@
  * @coverage os.macosx
  */
 public abstract class OSSupportMacOSX extends OSSupport {
-  // constants
-  private static final String FLIP_FLAG = "windowbuilder.osx.flip";//$NON-NLS-1$
-  protected static final int DEFAULT_MENU_ITEM_OFFSET_X = 6;
-  protected static final int DEFAULT_MENU_ITEM_OFFSET_Y = 5;
-  private static final int TAB_ITEM_OFFSET_Y = 8;
-  private static final int TAB_ITEM_EXTRA_WIDTH = 25;
-  protected static final OSSupport INSTANCE = new OSSupportMacOSXCocoa.Cocoa64();
-  private static boolean mustFlipImage; // Initialized in static block below
-  static {
-    String osVersion = System.getProperties().get("os.version").toString();
-    Object flip_flag_is_set = System.getProperties().get(FLIP_FLAG);
-    // OS_VERSION IS composed of : version.mod.patch
-    int version = Integer.parseInt(osVersion.split("\\.")[0]);//$NON-NLS-1$
-    int mod = Integer.parseInt(osVersion.split("\\.")[1]);//$NON-NLS-1$
-    boolean isHighSierraOrMore = version > 10 || version == 10 && mod >= 13;
-    // Flip image for HighSierra, Mojave, Catalina and next OS X versions
-    mustFlipImage = flip_flag_is_set != null ? Boolean.getBoolean(FLIP_FLAG) : isHighSierraOrMore;
-  }
+	// constants
+	private static final String FLIP_FLAG = "windowbuilder.osx.flip";//$NON-NLS-1$
+	protected static final int DEFAULT_MENU_ITEM_OFFSET_X = 6;
+	protected static final int DEFAULT_MENU_ITEM_OFFSET_Y = 5;
+	private static final int TAB_ITEM_OFFSET_Y = 8;
+	private static final int TAB_ITEM_EXTRA_WIDTH = 25;
+	protected static final OSSupport INSTANCE = new OSSupportMacOSXCocoa.Cocoa64();
+	private static boolean mustFlipImage; // Initialized in static block below
+	static {
+		String osVersion = System.getProperties().get("os.version").toString();
+		Object flip_flag_is_set = System.getProperties().get(FLIP_FLAG);
+		// OS_VERSION IS composed of : version.mod.patch
+		int version = Integer.parseInt(osVersion.split("\\.")[0]);//$NON-NLS-1$
+		int mod = Integer.parseInt(osVersion.split("\\.")[1]);//$NON-NLS-1$
+		boolean isHighSierraOrMore = version > 10 || version == 10 && mod >= 13;
+		// Flip image for HighSierra, Mojave, Catalina and next OS X versions
+		mustFlipImage = flip_flag_is_set != null ? Boolean.getBoolean(FLIP_FLAG) : isHighSierraOrMore;
+	}
 
-  protected OSSupportMacOSX() {
-  }
+	protected OSSupportMacOSX() {
+	}
 
-  @Override
-  public void beginShot(Object controlObject) {
-    // disabling shell redraw prevents painting events
-    // to be dispatched to design canvas. These events can
-    // cause painting already disposed images, ex., for action instances,
-    // which are already disposed but image references are still alive
-    // in it's presentation in widgets tree (see Case 40141).
-    DesignerPlugin.getShell().setRedraw(false);
-    super.beginShot(controlObject);
-  }
+	@Override
+	public void beginShot(Object controlObject) {
+		// disabling shell redraw prevents painting events
+		// to be dispatched to design canvas. These events can
+		// cause painting already disposed images, ex., for action instances,
+		// which are already disposed but image references are still alive
+		// in it's presentation in widgets tree (see Case 40141).
+		DesignerPlugin.getShell().setRedraw(false);
+		super.beginShot(controlObject);
+	}
 
-  @Override
-  public void endShot(Object controlObject) {
-    super.endShot(controlObject);
-    DesignerPlugin.getShell().setRedraw(true);
-  }
+	@Override
+	public void endShot(Object controlObject) {
+		super.endShot(controlObject);
+		DesignerPlugin.getShell().setRedraw(true);
+	}
 
-  @Override
-  public void makeShots(Object controlObject) throws Exception {
-    // do create shots
-    Control control = (Control) controlObject;
-    try {
-      //			reverseDrawingOrder(control);
-      Image sourceShot = makeShot(control);
-      if (mustFlipImage) {
-        Image reverseShot = reverseImage(sourceShot);
-        sourceShot.dispose();
-        control.setData(WBP_IMAGE, reverseShot);
-      }
-      control.getShell().setVisible(false);
-    } finally {
-      //			reverseDrawingOrder(control);
-    }
-  }
+	@Override
+	public void makeShots(Object controlObject) throws Exception {
+		// do create shots
+		Control control = (Control) controlObject;
+		try {
+			//			reverseDrawingOrder(control);
+			Image sourceShot = makeShot(control);
+			if (mustFlipImage) {
+				Image reverseShot = reverseImage(sourceShot);
+				sourceShot.dispose();
+				control.setData(WBP_IMAGE, reverseShot);
+			}
+			control.getShell().setVisible(false);
+		} finally {
+			//			reverseDrawingOrder(control);
+		}
+	}
 
-  /**
-   * Reverse image which is upside down on Macos X High Sierra See bug #526091
-   *
-   * @param image
-   * @return the reverse Image
-   */
-  public Image reverseImage(Image image) {
-    // Image must be flipped and then rotated twice ! BUT ONLY ON HIGH SIERRA
-    ImageData flip = flip(image.getImageData(), false);
-    ImageData rotate1 = rotate(flip, SWT.LEFT);
-    ImageData rotate = rotate(rotate1, SWT.LEFT);
-    final Image result = new Image(image.getDevice(), rotate);
-    return result;
-  }
+	/**
+	 * Reverse image which is upside down on Macos X High Sierra See bug #526091
+	 *
+	 * @param image
+	 * @return the reverse Image
+	 */
+	public Image reverseImage(Image image) {
+		// Image must be flipped and then rotated twice ! BUT ONLY ON HIGH SIERRA
+		ImageData flip = flip(image.getImageData(), false);
+		ImageData rotate1 = rotate(flip, SWT.LEFT);
+		ImageData rotate = rotate(rotate1, SWT.LEFT);
+		final Image result = new Image(image.getDevice(), rotate);
+		return result;
+	}
 
-  /*
+	/*
    The following 'flip' and 'rotate' methods have been copied from the Snippet139.
    They are needed to fix the bug #526091, 539850 and 559596
-  */
-  static ImageData rotate(ImageData srcData, int direction) {
-    int bytesPerPixel = srcData.bytesPerLine / srcData.width;
-    int destBytesPerLine =
-        direction == SWT.DOWN ? srcData.width * bytesPerPixel : srcData.height * bytesPerPixel;
-    byte[] newData = new byte[direction == SWT.DOWN
-        ? srcData.height * destBytesPerLine
-        : srcData.width * destBytesPerLine];
-    int width = 0, height = 0;
-    for (int srcY = 0; srcY < srcData.height; srcY++) {
-      for (int srcX = 0; srcX < srcData.width; srcX++) {
-        int destX = 0, destY = 0, destIndex = 0, srcIndex = 0;
-        switch (direction) {
-          case SWT.LEFT : // left 90 degrees
-            destX = srcY;
-            destY = srcData.width - srcX - 1;
-            width = srcData.height;
-            height = srcData.width;
-            break;
-          case SWT.RIGHT : // right 90 degrees
-            destX = srcData.height - srcY - 1;
-            destY = srcX;
-            width = srcData.height;
-            height = srcData.width;
-            break;
-          case SWT.DOWN : // 180 degrees
-            destX = srcData.width - srcX - 1;
-            destY = srcData.height - srcY - 1;
-            width = srcData.width;
-            height = srcData.height;
-            break;
-        }
-        destIndex = destY * destBytesPerLine + destX * bytesPerPixel;
-        srcIndex = srcY * srcData.bytesPerLine + srcX * bytesPerPixel;
-        System.arraycopy(srcData.data, srcIndex, newData, destIndex, bytesPerPixel);
-      }
-    }
-    // destBytesPerLine is used as scanlinePad to ensure that no padding is required
-    return new ImageData(width,
-        height,
-        srcData.depth,
-        srcData.palette,
-        srcData.scanlinePad,
-        newData);
-  }
+	 */
+	static ImageData rotate(ImageData srcData, int direction) {
+		int bytesPerPixel = srcData.bytesPerLine / srcData.width;
+		int destBytesPerLine =
+				direction == SWT.DOWN ? srcData.width * bytesPerPixel : srcData.height * bytesPerPixel;
+		byte[] newData = new byte[direction == SWT.DOWN
+				? srcData.height * destBytesPerLine
+						: srcData.width * destBytesPerLine];
+		int width = 0, height = 0;
+		for (int srcY = 0; srcY < srcData.height; srcY++) {
+			for (int srcX = 0; srcX < srcData.width; srcX++) {
+				int destX = 0, destY = 0, destIndex = 0, srcIndex = 0;
+				switch (direction) {
+				case SWT.LEFT : // left 90 degrees
+					destX = srcY;
+					destY = srcData.width - srcX - 1;
+					width = srcData.height;
+					height = srcData.width;
+					break;
+				case SWT.RIGHT : // right 90 degrees
+					destX = srcData.height - srcY - 1;
+					destY = srcX;
+					width = srcData.height;
+					height = srcData.width;
+					break;
+				case SWT.DOWN : // 180 degrees
+					destX = srcData.width - srcX - 1;
+					destY = srcData.height - srcY - 1;
+					width = srcData.width;
+					height = srcData.height;
+					break;
+				}
+				destIndex = destY * destBytesPerLine + destX * bytesPerPixel;
+				srcIndex = srcY * srcData.bytesPerLine + srcX * bytesPerPixel;
+				System.arraycopy(srcData.data, srcIndex, newData, destIndex, bytesPerPixel);
+			}
+		}
+		// destBytesPerLine is used as scanlinePad to ensure that no padding is required
+		return new ImageData(width,
+				height,
+				srcData.depth,
+				srcData.palette,
+				srcData.scanlinePad,
+				newData);
+	}
 
-  static ImageData flip(ImageData srcData, boolean vertical) {
-    int bytesPerPixel = srcData.bytesPerLine / srcData.width;
-    int destBytesPerLine = srcData.width * bytesPerPixel;
-    byte[] newData = new byte[srcData.data.length];
-    for (int srcY = 0; srcY < srcData.height; srcY++) {
-      for (int srcX = 0; srcX < srcData.width; srcX++) {
-        int destX = 0, destY = 0, destIndex = 0, srcIndex = 0;
-        if (vertical) {
-          destX = srcX;
-          destY = srcData.height - srcY - 1;
-        } else {
-          destX = srcData.width - srcX - 1;
-          destY = srcY;
-        }
-        destIndex = destY * destBytesPerLine + destX * bytesPerPixel;
-        srcIndex = srcY * srcData.bytesPerLine + srcX * bytesPerPixel;
-        System.arraycopy(srcData.data, srcIndex, newData, destIndex, bytesPerPixel);
-      }
-    }
-    // destBytesPerLine is used as scanlinePad to ensure that no padding is required
-    return new ImageData(srcData.width,
-        srcData.height,
-        srcData.depth,
-        srcData.palette,
-        srcData.scanlinePad,
-        newData);
-  }
+	static ImageData flip(ImageData srcData, boolean vertical) {
+		int bytesPerPixel = srcData.bytesPerLine / srcData.width;
+		int destBytesPerLine = srcData.width * bytesPerPixel;
+		byte[] newData = new byte[srcData.data.length];
+		for (int srcY = 0; srcY < srcData.height; srcY++) {
+			for (int srcX = 0; srcX < srcData.width; srcX++) {
+				int destX = 0, destY = 0, destIndex = 0, srcIndex = 0;
+				if (vertical) {
+					destX = srcX;
+					destY = srcData.height - srcY - 1;
+				} else {
+					destX = srcData.width - srcX - 1;
+					destY = srcY;
+				}
+				destIndex = destY * destBytesPerLine + destX * bytesPerPixel;
+				srcIndex = srcY * srcData.bytesPerLine + srcX * bytesPerPixel;
+				System.arraycopy(srcData.data, srcIndex, newData, destIndex, bytesPerPixel);
+			}
+		}
+		// destBytesPerLine is used as scanlinePad to ensure that no padding is required
+		return new ImageData(srcData.width,
+				srcData.height,
+				srcData.depth,
+				srcData.palette,
+				srcData.scanlinePad,
+				newData);
+	}
 
-  /**
-   * @return <code>true</code> if the given menu item is the separator item.
-   */
-  protected static boolean isSeparatorItem(MenuItem item) {
-    return (item.getStyle() & SWT.SEPARATOR) != 0;
-  }
+	/**
+	 * @return <code>true</code> if the given menu item is the separator item.
+	 */
+	protected static boolean isSeparatorItem(MenuItem item) {
+		return (item.getStyle() & SWT.SEPARATOR) != 0;
+	}
 
-  @Override
-  public Image getMenuBarVisualData(Menu menu, List<Rectangle> bounds) {
-    int height = getDefaultMenuBarHeight();
-    Image image = new Image(menu.getDisplay(), menu.getParent().getSize().x, height);
-    GC gc = new GC(image);
-    // calc bounds first
-    int menuWidth = 5;
-    for (int i = 0; i < menu.getItemCount(); ++i) {
-      MenuItem item = menu.getItem(i);
-      String text = item.getText();
-      int itemWidth = 5;
-      if (text != null) {
-        Point textDimensions = gc.stringExtent(text);
-        itemWidth = textDimensions.x + 10;
-      }
-      bounds.add(new Rectangle(menuWidth, 0, itemWidth, height));
-      menuWidth += itemWidth;
-    }
-    gc.dispose();
-    if (image.getBounds().width < menuWidth) {
-      image.dispose();
-      image = new Image(menu.getDisplay(), menuWidth, height);
-    }
-    // draw
-    gc = new GC(image);
-    gc.setBackground(IColorConstants.menuBackground);
-    gc.fillRectangle(image.getBounds());
-    gc.setForeground(IColorConstants.menuForeground);
-    for (int i = 0; i < menu.getItemCount(); ++i) {
-      MenuItem item = menu.getItem(i);
-      String text = item.getText();
-      if (text != null) {
-        Rectangle itemBounds = bounds.get(i);
-        gc.drawString(text, itemBounds.x + 5, itemBounds.y + 2, true);
-      }
-    }
-    gc.dispose();
-    return image;
-  }
+	@Override
+	public Image getMenuBarVisualData(Menu menu, List<Rectangle> bounds) {
+		int height = getDefaultMenuBarHeight();
+		Image image = new Image(menu.getDisplay(), menu.getParent().getSize().x, height);
+		GC gc = new GC(image);
+		// calc bounds first
+		int menuWidth = 5;
+		for (int i = 0; i < menu.getItemCount(); ++i) {
+			MenuItem item = menu.getItem(i);
+			String text = item.getText();
+			int itemWidth = 5;
+			if (text != null) {
+				Point textDimensions = gc.stringExtent(text);
+				itemWidth = textDimensions.x + 10;
+			}
+			bounds.add(new Rectangle(menuWidth, 0, itemWidth, height));
+			menuWidth += itemWidth;
+		}
+		gc.dispose();
+		if (image.getBounds().width < menuWidth) {
+			image.dispose();
+			image = new Image(menu.getDisplay(), menuWidth, height);
+		}
+		// draw
+		gc = new GC(image);
+		gc.setBackground(IColorConstants.menuBackground);
+		gc.fillRectangle(image.getBounds());
+		gc.setForeground(IColorConstants.menuForeground);
+		for (int i = 0; i < menu.getItemCount(); ++i) {
+			MenuItem item = menu.getItem(i);
+			String text = item.getText();
+			if (text != null) {
+				Rectangle itemBounds = bounds.get(i);
+				gc.drawString(text, itemBounds.x + 5, itemBounds.y + 2, true);
+			}
+		}
+		gc.dispose();
+		return image;
+	}
 
-  @Override
-  public Rectangle getMenuBarBounds(Menu menu) {
-    throw new NotImplementedException("OSX menu bar bounds should be get using menu bar image.");
-  }
+	@Override
+	public Rectangle getMenuBarBounds(Menu menu) {
+		throw new NotImplementedException("OSX menu bar bounds should be get using menu bar image.");
+	}
 
-  /**
-   * For separator items there is no way to get item bounds because the separator item has no custom
-   * draw flag and native part doesn't receive draw messages for to get item bounds. the workaround
-   * is to approximate separator location based on previous item.
-   */
-  protected void fixupSeparatorItems(Menu menu, int[] bounds, int[] menuSize, int[] itemsBounds) {
-    // for separator items there is no way to get item bounds because the separator item has no custom draw
-    // flag and native part doesn't receive draw messages for to get item bounds.
-    // the workaround is to approximate separator location based on previous item.
-    MenuItem firstItem = menu.getItem(0);
-    int itemOffsetX = isSeparatorItem(firstItem) ? DEFAULT_MENU_ITEM_OFFSET_X : itemsBounds[0];
-    int itemOffsetY = isSeparatorItem(firstItem) ? DEFAULT_MENU_ITEM_OFFSET_Y : itemsBounds[1] / 2;
-    for (int i = 0; i < menu.getItemCount(); ++i) {
-      if (isSeparatorItem(menu.getItem(i))) {
-        if (i > 0) {
-          itemsBounds[i * 4 + 0] = itemsBounds[(i - 1) * 4 + 0];
-          itemsBounds[i * 4 + 1] = itemsBounds[(i - 1) * 4 + 1] + itemsBounds[(i - 1) * 4 + 3];
-        } else {
-          itemsBounds[i * 4 + 0] = itemOffsetX;
-          itemsBounds[i * 4 + 1] = itemOffsetY * 2;
-        }
-        itemsBounds[i * 4 + 2] = menuSize[2];
-        itemsBounds[i * 4 + 3] = VisualDataMockupProvider.MENU_ITEM_SEPARATOR_HEIGHT;
-      }
-      //
-      bounds[i * 4 + 0] = itemsBounds[i * 4 + 0] - itemOffsetX;
-      bounds[i * 4 + 1] = itemsBounds[i * 4 + 1] - itemOffsetY;
-      bounds[i * 4 + 2] = itemsBounds[i * 4 + 2];
-      bounds[i * 4 + 3] = itemsBounds[i * 4 + 3];
-    }
-  }
+	/**
+	 * For separator items there is no way to get item bounds because the separator item has no custom
+	 * draw flag and native part doesn't receive draw messages for to get item bounds. the workaround
+	 * is to approximate separator location based on previous item.
+	 */
+	protected void fixupSeparatorItems(Menu menu, int[] bounds, int[] menuSize, int[] itemsBounds) {
+		// for separator items there is no way to get item bounds because the separator item has no custom draw
+		// flag and native part doesn't receive draw messages for to get item bounds.
+		// the workaround is to approximate separator location based on previous item.
+		MenuItem firstItem = menu.getItem(0);
+		int itemOffsetX = isSeparatorItem(firstItem) ? DEFAULT_MENU_ITEM_OFFSET_X : itemsBounds[0];
+		int itemOffsetY = isSeparatorItem(firstItem) ? DEFAULT_MENU_ITEM_OFFSET_Y : itemsBounds[1] / 2;
+		for (int i = 0; i < menu.getItemCount(); ++i) {
+			if (isSeparatorItem(menu.getItem(i))) {
+				if (i > 0) {
+					itemsBounds[i * 4 + 0] = itemsBounds[(i - 1) * 4 + 0];
+					itemsBounds[i * 4 + 1] = itemsBounds[(i - 1) * 4 + 1] + itemsBounds[(i - 1) * 4 + 3];
+				} else {
+					itemsBounds[i * 4 + 0] = itemOffsetX;
+					itemsBounds[i * 4 + 1] = itemOffsetY * 2;
+				}
+				itemsBounds[i * 4 + 2] = menuSize[2];
+				itemsBounds[i * 4 + 3] = VisualDataMockupProvider.MENU_ITEM_SEPARATOR_HEIGHT;
+			}
+			//
+			bounds[i * 4 + 0] = itemsBounds[i * 4 + 0] - itemOffsetX;
+			bounds[i * 4 + 1] = itemsBounds[i * 4 + 1] - itemOffsetY;
+			bounds[i * 4 + 2] = itemsBounds[i * 4 + 2];
+			bounds[i * 4 + 3] = itemsBounds[i * 4 + 3];
+		}
+	}
 
-  @Override
-  public Rectangle getTabItemBounds(Object item) {
-    TabItem tabItem = (TabItem) item;
-    TabFolder folder = tabItem.getParent();
-    GC gc = new GC(folder);
-    Point folderSize = folder.getSize();
-    int thisItemOffsetX = 0;
-    int thisItemWidth = 0;
-    int thisItemHeight = 0;
-    int itemsWidth = 0;
-    for (int i = 0; i < folder.getItemCount(); i++) {
-      TabItem childItem = folder.getItem(i);
-      Point itemSize = calculateItemSize(childItem, gc);
-      if (childItem == tabItem) {
-        thisItemOffsetX = itemsWidth;
-        thisItemWidth = itemSize.x;
-        thisItemHeight = itemSize.y;
-      }
-      itemsWidth += itemSize.x;
-    }
-    gc.dispose();
-    return new Rectangle(folderSize.x / 2 - itemsWidth / 2 + thisItemOffsetX,
-        TAB_ITEM_OFFSET_Y,
-        thisItemWidth,
-        thisItemHeight);
-  }
+	@Override
+	public Rectangle getTabItemBounds(Object item) {
+		TabItem tabItem = (TabItem) item;
+		TabFolder folder = tabItem.getParent();
+		GC gc = new GC(folder);
+		Point folderSize = folder.getSize();
+		int thisItemOffsetX = 0;
+		int thisItemWidth = 0;
+		int thisItemHeight = 0;
+		int itemsWidth = 0;
+		for (int i = 0; i < folder.getItemCount(); i++) {
+			TabItem childItem = folder.getItem(i);
+			Point itemSize = calculateItemSize(childItem, gc);
+			if (childItem == tabItem) {
+				thisItemOffsetX = itemsWidth;
+				thisItemWidth = itemSize.x;
+				thisItemHeight = itemSize.y;
+			}
+			itemsWidth += itemSize.x;
+		}
+		gc.dispose();
+		return new Rectangle(folderSize.x / 2 - itemsWidth / 2 + thisItemOffsetX,
+				TAB_ITEM_OFFSET_Y,
+				thisItemWidth,
+				thisItemHeight);
+	}
 
-  /**
-   * Returns the empiric size of this {@link TabItem}. Based on {@link TabItem#calculateWidth())
-   * function.
-   *
-   * @param item
-   *          the instance of {@link TabItem}.
-   * @param gc
-   *          the GC of parent TabFolder.
-   * @return the empiric size of this {@link TabItem}.
-   */
-  private Point calculateItemSize(TabItem item, GC gc) {
-    int width = 0;
-    int imageHeight = 0;
-    int textHeight = 0;
-    Image image = item.getImage();
-    String text = item.getText();
-    if (image != null) {
-      Rectangle imageBounds = image.getBounds();
-      width = imageBounds.width + 2;
-      imageHeight = imageBounds.height;
-    }
-    if (text != null && text.length() > 0) {
-      Point stringExtent = gc.stringExtent(text);
-      width += stringExtent.x;
-      textHeight = stringExtent.y + 2;
-    }
-    return new Point(width + TAB_ITEM_EXTRA_WIDTH, Math.max(imageHeight, textHeight));
-  }
+	/**
+	 * Returns the empiric size of this {@link TabItem}. Based on {@link TabItem#calculateWidth())
+	 * function.
+	 *
+	 * @param item
+	 *          the instance of {@link TabItem}.
+	 * @param gc
+	 *          the GC of parent TabFolder.
+	 * @return the empiric size of this {@link TabItem}.
+	 */
+	private Point calculateItemSize(TabItem item, GC gc) {
+		int width = 0;
+		int imageHeight = 0;
+		int textHeight = 0;
+		Image image = item.getImage();
+		String text = item.getText();
+		if (image != null) {
+			Rectangle imageBounds = image.getBounds();
+			width = imageBounds.width + 2;
+			imageHeight = imageBounds.height;
+		}
+		if (text != null && text.length() > 0) {
+			Point stringExtent = gc.stringExtent(text);
+			width += stringExtent.x;
+			textHeight = stringExtent.y + 2;
+		}
+		return new Point(width + TAB_ITEM_EXTRA_WIDTH, Math.max(imageHeight, textHeight));
+	}
 
-  @Override
-  public boolean isPlusMinusTreeClick(Tree tree, int x, int y) {
-    return false;
-  }
+	@Override
+	public boolean isPlusMinusTreeClick(Tree tree, int x, int y) {
+		return false;
+	}
 
-  @Override
-  public int[] getPushButtonInsets() {
-    return new int[4];
-  }
+	@Override
+	public int[] getPushButtonInsets() {
+		return new int[4];
+	}
 }
diff --git a/org.eclipse.wb.os.macosx/src/org/eclipse/wb/internal/os/macosx/OSSupportMacOSXCocoa.java b/org.eclipse.wb.os.macosx/src/org/eclipse/wb/internal/os/macosx/OSSupportMacOSXCocoa.java
index 37d569186..44e11d99c 100644
--- a/org.eclipse.wb.os.macosx/src/org/eclipse/wb/internal/os/macosx/OSSupportMacOSXCocoa.java
+++ b/org.eclipse.wb.os.macosx/src/org/eclipse/wb/internal/os/macosx/OSSupportMacOSXCocoa.java
@@ -33,283 +33,283 @@
  * @author mitin_aa
  */
 public abstract class OSSupportMacOSXCocoa<H extends Number> extends OSSupportMacOSX {
-  static {
-    try {
-      System.loadLibrary("wbp-cocoa");
-    } catch (Throwable e) {
-      e.printStackTrace();
-    }
-  }
+	static {
+		try {
+			System.loadLibrary("wbp-cocoa");
+		} catch (Throwable e) {
+			e.printStackTrace();
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Shot
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void makeShellVisible(Shell shell) {
-    shell.setVisible(true);
-    // calling shell.setVisible() brings the window to front by calling -[NSWindow orderFront]
-    // which causes flickering. The workaround is to send the window back immediately,
-    // so window manager won't display it at the screen, but window views remains visible.
-    _orderOut(getID(shell, "window"));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Shot
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void makeShellVisible(Shell shell) {
+		shell.setVisible(true);
+		// calling shell.setVisible() brings the window to front by calling -[NSWindow orderFront]
+		// which causes flickering. The workaround is to send the window back immediately,
+		// so window manager won't display it at the screen, but window views remains visible.
+		_orderOut(getID(shell, "window"));
+	}
 
-  @Override
-  public Image makeShot(Control control) throws Exception {
-    try {
-      Rectangle bounds = control.getBounds();
-      if (bounds.width <= 0 || bounds.height <= 0) {
-        return null;
-      }
-      H view = getID(control, "view");
-      Image image = new Image(control.getDisplay(), bounds);
-      GC gc = new GC(image);
-      H context = getID(gc, "handle");
-      if (control instanceof Shell) {
-        _makeWindowShot(view, context);
-      } else {
-        Composite parent = control.getParent();
-        _makeShot(view, getID(parent, "view"), context);
-      }
-      gc.dispose();
-      control.setData(WBP_IMAGE, image);
-      // process children if any
-      if (control instanceof Composite && !(control instanceof Browser)) {
-        Composite composite = (Composite) control;
-        Control[] children = composite.getChildren();
-        for (int i = 0; i < children.length; i++) {
-          Control child = children[children.length - 1 - i];
-          if (!child.isVisible()) {
-            continue;
-          }
-          Image childImage = makeShot(child);
-          if (childImage == null) {
-            continue;
-          }
-          child.setData(OSSupport.WBP_IMAGE, childImage);
-        }
-      }
-      // all done
-      return image;
-    } catch (Throwable e) {
-      throw ReflectionUtils.propagate(e);
-    }
-  }
+	@Override
+	public Image makeShot(Control control) throws Exception {
+		try {
+			Rectangle bounds = control.getBounds();
+			if (bounds.width <= 0 || bounds.height <= 0) {
+				return null;
+			}
+			H view = getID(control, "view");
+			Image image = new Image(control.getDisplay(), bounds);
+			GC gc = new GC(image);
+			H context = getID(gc, "handle");
+			if (control instanceof Shell) {
+				_makeWindowShot(view, context);
+			} else {
+				Composite parent = control.getParent();
+				_makeShot(view, getID(parent, "view"), context);
+			}
+			gc.dispose();
+			control.setData(WBP_IMAGE, image);
+			// process children if any
+			if (control instanceof Composite && !(control instanceof Browser)) {
+				Composite composite = (Composite) control;
+				Control[] children = composite.getChildren();
+				for (int i = 0; i < children.length; i++) {
+					Control child = children[children.length - 1 - i];
+					if (!child.isVisible()) {
+						continue;
+					}
+					Image childImage = makeShot(child);
+					if (childImage == null) {
+						continue;
+					}
+					child.setData(OSSupport.WBP_IMAGE, childImage);
+				}
+			}
+			// all done
+			return image;
+		} catch (Throwable e) {
+			throw ReflectionUtils.propagate(e);
+		}
+	}
 
-  /**
-   * @return the Cocoa id field.
-   */
-  protected abstract H getID(Object control, String string);
+	/**
+	 * @return the Cocoa id field.
+	 */
+	protected abstract H getID(Object control, String string);
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Menu
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public int getDefaultMenuBarHeight() {
-    return _getMenuBarHeight();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Menu
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public int getDefaultMenuBarHeight() {
+		return _getMenuBarHeight();
+	}
 
-  @Override
-  public Image getMenuPopupVisualData(Menu menu, int[] bounds) throws Exception {
-    H handle = getID(menu, "nsMenu");
-    int menuSize[] = new int[4];
-    int itemsBounds[] = new int[bounds.length];
-    _fetchPopupMenuBounds(handle, menuSize);
-    Image image = new Image(menu.getDisplay(), menuSize[2], menuSize[3]);
-    GC gc = new GC(image);
-    _fetchPopupMenuVisualData(handle, getID(gc, "handle"), itemsBounds);
-    fixupSeparatorItems(menu, bounds, menuSize, itemsBounds);
-    gc.dispose();
-    return image;
-  }
+	@Override
+	public Image getMenuPopupVisualData(Menu menu, int[] bounds) throws Exception {
+		H handle = getID(menu, "nsMenu");
+		int menuSize[] = new int[4];
+		int itemsBounds[] = new int[bounds.length];
+		_fetchPopupMenuBounds(handle, menuSize);
+		Image image = new Image(menu.getDisplay(), menuSize[2], menuSize[3]);
+		GC gc = new GC(image);
+		_fetchPopupMenuVisualData(handle, getID(gc, "handle"), itemsBounds);
+		fixupSeparatorItems(menu, bounds, menuSize, itemsBounds);
+		gc.dispose();
+		return image;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Misc
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public int getAlpha(Shell shell) {
-    return _getAlpha(getID(shell, "window"));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Misc
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public int getAlpha(Shell shell) {
+		return _getAlpha(getID(shell, "window"));
+	}
 
-  @Override
-  public void setAlpha(Shell shell, int alpha) {
-    _setAlpha(getID(shell, "window"), alpha);
-  }
+	@Override
+	public void setAlpha(Shell shell, int alpha) {
+		_setAlpha(getID(shell, "window"), alpha);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AWT/Swing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Image makeShotAwt(final Object component, final int width, final int height) {
-    final Image[] toReturn = new Image[]{null};
-    final Display display = DesignerPlugin.getStandardDisplay();
-    display.syncExec(new Runnable() {
-      @Override
-      public void run() {
-        toReturn[0] = makeShotAwt0(display, component, width, height);
-      }
-    });
-    return toReturn[0];
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AWT/Swing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Image makeShotAwt(final Object component, final int width, final int height) {
+		final Image[] toReturn = new Image[]{null};
+		final Display display = DesignerPlugin.getStandardDisplay();
+		display.syncExec(new Runnable() {
+			@Override
+			public void run() {
+				toReturn[0] = makeShotAwt0(display, component, width, height);
+			}
+		});
+		return toReturn[0];
+	}
 
-  private Image makeShotAwt0(Display display, Object component, int width, int height) {
-    GC gc = null;
-    try {
-      Image image = new Image(display, width, height);
-      gc = new GC(image);
-      H context = getID(gc, "handle");
-      Number peerId = getComponentPeerId(component);
-      Number parentId = findParentComponentPeerId(component);
-      if (peerId == null || parentId == null || peerId.equals(parentId)) {
-        return null;
-      }
-      _makeShot(peerId, parentId, context);
-      return image;
-    } catch (Throwable e) {
-      // ignore and return null;
-    } finally {
-      if (gc != null) {
-        gc.dispose();
-      }
-    }
-    return null;
-  }
+	private Image makeShotAwt0(Display display, Object component, int width, int height) {
+		GC gc = null;
+		try {
+			Image image = new Image(display, width, height);
+			gc = new GC(image);
+			H context = getID(gc, "handle");
+			Number peerId = getComponentPeerId(component);
+			Number parentId = findParentComponentPeerId(component);
+			if (peerId == null || parentId == null || peerId.equals(parentId)) {
+				return null;
+			}
+			_makeShot(peerId, parentId, context);
+			return image;
+		} catch (Throwable e) {
+			// ignore and return null;
+		} finally {
+			if (gc != null) {
+				gc.dispose();
+			}
+		}
+		return null;
+	}
 
-  private static Number findParentComponentPeerId(Object component) throws Exception {
-    for (component = getParentComponent(component); component != null; component =
-        getParentComponent(component)) {
-      Number peerId = getComponentPeerId(component);
-      if (peerId != null) {
-        return peerId;
-      }
-    }
-    return null;
-  }
+	private static Number findParentComponentPeerId(Object component) throws Exception {
+		for (component = getParentComponent(component); component != null; component =
+				getParentComponent(component)) {
+			Number peerId = getComponentPeerId(component);
+			if (peerId != null) {
+				return peerId;
+			}
+		}
+		return null;
+	}
 
-  private static Object getParentComponent(Object component) throws Exception {
-    return ReflectionUtils.invokeMethod2(component, "getParent");
-  }
+	private static Object getParentComponent(Object component) throws Exception {
+		return ReflectionUtils.invokeMethod2(component, "getParent");
+	}
 
-  private static Number getComponentPeerId(Object component) {
-    try {
-      boolean hasPeer = (Boolean) ReflectionUtils.invokeMethod2(component, "isDisplayable");
-      if (hasPeer) {
-        Object peer = ReflectionUtils.getFieldObject(component, "peer");
-        if (peer != null) {
-          return (Number) ReflectionUtils.invokeMethod2(peer, "getViewPtr");
-        }
-      }
-    } catch (Throwable e) {
-      // ignore and return null
-    }
-    return null;
-  }
+	private static Number getComponentPeerId(Object component) {
+		try {
+			boolean hasPeer = (Boolean) ReflectionUtils.invokeMethod2(component, "isDisplayable");
+			if (hasPeer) {
+				Object peer = ReflectionUtils.getFieldObject(component, "peer");
+				if (peer != null) {
+					return (Number) ReflectionUtils.invokeMethod2(peer, "getViewPtr");
+				}
+			}
+		} catch (Throwable e) {
+			// ignore and return null
+		}
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Native code
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Removes the window from screen by invoking -[NSWindow orderOut:].
-   *
-   * @param window
-   *          the native handle of the window, <code>NSWindow*</code>.
-   */
-  private static native <H extends Number> void _orderOut(H window);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Native code
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Removes the window from screen by invoking -[NSWindow orderOut:].
+	 *
+	 * @param window
+	 *          the native handle of the window, <code>NSWindow*</code>.
+	 */
+	private static native <H extends Number> void _orderOut(H window);
 
-  /**
-   * Creates the image of the control.
-   *
-   * @param view
-   *          the native handle of the view of the control, <code>NSView*</code>.
-   * @param parentView
-   *          the native handle of the parent view of the control, <code>NSView*</code>.
-   * @param context
-   *          the native handle to the graphics context on which view should be drawn,
-   *          <code>NSGraphicsContext*</code>.
-   */
-  private static native <H extends Number> void _makeShot(H view, H parentView, H context);
+	/**
+	 * Creates the image of the control.
+	 *
+	 * @param view
+	 *          the native handle of the view of the control, <code>NSView*</code>.
+	 * @param parentView
+	 *          the native handle of the parent view of the control, <code>NSView*</code>.
+	 * @param context
+	 *          the native handle to the graphics context on which view should be drawn,
+	 *          <code>NSGraphicsContext*</code>.
+	 */
+	private static native <H extends Number> void _makeShot(H view, H parentView, H context);
 
-  /**
-   * Creates the image of the shell as NSView.
-   *
-   * @param view
-   *          the native handle of the root view of the shell, <code>NSView*</code>.
-   * @param context
-   *          the native handle to the graphics context on which view should be drawn,
-   *          <code>NSGraphicsContext*</code>.
-   */
-  private static native <H extends Number> void _makeWindowShot(H view, H context);
+	/**
+	 * Creates the image of the shell as NSView.
+	 *
+	 * @param view
+	 *          the native handle of the root view of the shell, <code>NSView*</code>.
+	 * @param context
+	 *          the native handle to the graphics context on which view should be drawn,
+	 *          <code>NSGraphicsContext*</code>.
+	 */
+	private static native <H extends Number> void _makeWindowShot(H view, H context);
 
-  /**
-   * Calls API function which returns the menu bar height.
-   */
-  private static native int _getMenuBarHeight();
+	/**
+	 * Calls API function which returns the menu bar height.
+	 */
+	private static native int _getMenuBarHeight();
 
-  /**
-   * Fetches the menu data: returns item bounds as plain array and the draws the menu image on the
-   * given context
-   *
-   * @param menuHandle
-   *          the handle of menu.
-   * @param itemsSizes
-   *          the bounds of menu items (output).
-   * @param context
-   *          the native handle to the graphics context on which menu should be drawn,
-   *          <code>NSGraphicsContext*</code>.
-   */
-  private static native <H extends Number> void _fetchPopupMenuVisualData(H menuHandle,
-      H context,
-      int[] itemsSizes);
+	/**
+	 * Fetches the menu data: returns item bounds as plain array and the draws the menu image on the
+	 * given context
+	 *
+	 * @param menuHandle
+	 *          the handle of menu.
+	 * @param itemsSizes
+	 *          the bounds of menu items (output).
+	 * @param context
+	 *          the native handle to the graphics context on which menu should be drawn,
+	 *          <code>NSGraphicsContext*</code>.
+	 */
+	private static native <H extends Number> void _fetchPopupMenuVisualData(H menuHandle,
+			H context,
+			int[] itemsSizes);
 
-  /**
-   * Fetches the menu bounds.
-   *
-   * @param menuHandle
-   *          the handle of menu.
-   * @param menuSize
-   *          the bounds of menu (output).
-   */
-  private static native <H extends Number> void _fetchPopupMenuBounds(H menuHandle, int[] menuSize);
+	/**
+	 * Fetches the menu bounds.
+	 *
+	 * @param menuHandle
+	 *          the handle of menu.
+	 * @param menuSize
+	 *          the bounds of menu (output).
+	 */
+	private static native <H extends Number> void _fetchPopupMenuBounds(H menuHandle, int[] menuSize);
 
-  /**
-   * Sets alpha value to NSWindow.
-   */
-  private static native <H extends Number> void _setAlpha(H handle, int alpha);
+	/**
+	 * Sets alpha value to NSWindow.
+	 */
+	private static native <H extends Number> void _setAlpha(H handle, int alpha);
 
-  /**
-   * Gets alpha value from NSWindow.
-   */
-  private static native <H extends Number> int _getAlpha(H handle);
+	/**
+	 * Gets alpha value from NSWindow.
+	 */
+	private static native <H extends Number> int _getAlpha(H handle);
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Implementations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final class Cocoa64 extends OSSupportMacOSXCocoa<Long> {
-    private final VisualDataMockupProvider mockupProvider = new VisualDataMockupProvider();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Implementations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final class Cocoa64 extends OSSupportMacOSXCocoa<Long> {
+		private final VisualDataMockupProvider mockupProvider = new VisualDataMockupProvider();
 
-    @Override
-    protected Long getID(Object control, String string) {
-      Object fieldObject = ReflectionUtils.getFieldObject(control, string);
-      return (Long) ReflectionUtils.getFieldObject(fieldObject, "id");
-    }
+		@Override
+		protected Long getID(Object control, String string) {
+			Object fieldObject = ReflectionUtils.getFieldObject(control, string);
+			return (Long) ReflectionUtils.getFieldObject(fieldObject, "id");
+		}
 
-    /**
-     * 64-bit Cocoa has no way to get the screen shot of the popup menu.
-     */
-    @Override
-    public Image getMenuPopupVisualData(Menu menu, int[] bounds) throws Exception {
-      return mockupProvider.mockMenuPopupVisualData(menu, bounds);
-    }
-  }
+		/**
+		 * 64-bit Cocoa has no way to get the screen shot of the popup menu.
+		 */
+		@Override
+		public Image getMenuPopupVisualData(Menu menu, int[] bounds) throws Exception {
+			return mockupProvider.mockMenuPopupVisualData(menu, bounds);
+		}
+	}
 }
diff --git a/org.eclipse.wb.os.win32/src/org/eclipse/wb/internal/os/win32/OSSupportWin32.java b/org.eclipse.wb.os.win32/src/org/eclipse/wb/internal/os/win32/OSSupportWin32.java
index 78f24e50d..6811f62fa 100644
--- a/org.eclipse.wb.os.win32/src/org/eclipse/wb/internal/os/win32/OSSupportWin32.java
+++ b/org.eclipse.wb.os.win32/src/org/eclipse/wb/internal/os/win32/OSSupportWin32.java
@@ -40,346 +40,346 @@
  * @coverage os.win32
  */
 public abstract class OSSupportWin32<H extends Number> extends OSSupport {
-  static {
-    System.loadLibrary("wbp");
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected static final OSSupport INSTANCE = new Impl64();
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Screen Shot
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final void makeShots(Object controlObject) throws Exception {
-    Control control = (Control) controlObject;
-    try {
-      reverseDrawingOrder(control);
-      makeShotsHierarchy(control);
-    } finally {
-      reverseDrawingOrder(control);
-    }
-  }
-
-  /**
-   * For unknown reason, when we do screen shot using WM_PRINT, <em>last</em> {@link Control} is
-   * displayed on the top of drawing order, however when we run application, Windows displays
-   * <em>first</em> on the top of drawing order. So, we reverse drawing order before making screen
-   * shot, and restore drawing order after this.
-   */
-  private static void reverseDrawingOrder(Control control) {
-// 20130423(scheglov) disabled because of http://www.eclipse.org/forums/index.php/t/476687/
-//    if (control instanceof Composite) {
-//      Composite composite = (Composite) control;
-//      for (Control child : composite.getChildren()) {
-//        child.moveAbove(null);
-//        reverseDrawingOrder(child);
-//      }
-//    }
-  }
-
-  /**
-   * Creates screen shots for all {@link Control}'s in hierarchy marked with
-   * <code>WBP_NEED_IMAGE</code>.
-   */
-  private void makeShotsHierarchy(Control control) throws Exception {
-    if (control.getData(WBP_NEED_IMAGE) != null) {
-      // check size
-      Point size = control.getSize();
-      if (size.x == 0 || size.y == 0) {
-        return;
-      }
-      // set image
-      control.setData(WBP_IMAGE, makeShot(control));
-      // create images for children
-      if (control instanceof Composite) {
-        Composite composite = (Composite) control;
-        for (Control child : composite.getChildren()) {
-          makeShotsHierarchy(child);
-        }
-      }
-    }
-  }
-
-  @Override
-  public final Image makeShot(Control control) throws Exception {
-    Rectangle bounds = control.getBounds();
-    if (bounds.width == 0 || bounds.height == 0) {
-      return null;
-    }
-    Image image = new Image(Display.getCurrent(), bounds.width, bounds.height);
-    GC gc = new GC(image);
-    try {
-      makeShotImpl(control, gc);
-    } finally {
-      gc.dispose();
-    }
-    //
-    return image;
-  }
-
-  protected void makeShotImpl(Control control, GC gc) {
-    _makeShot(getHandleField(control), getHandleField(gc));
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // TabItem
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final Rectangle getTabItemBounds(Object tabItemObject) {
-    TabFolder tabFolder = ((TabItem) tabItemObject).getParent();
-    int index = ArrayUtils.indexOf(tabFolder.getItems(), tabItemObject);
-    int[] bounds = new int[4];
-    getTabItemBounds(tabFolder, index, bounds);
-    // convert into Rectangle
-    int borderOffset = (tabFolder.getStyle() & SWT.BORDER) != 0 ? 2 : 0;
-    int x = bounds[0]/*itemRect.left*/ + borderOffset;
-    int y = bounds[2]/*itemRect.top*/ + borderOffset;
-    int width = bounds[1]/*itemRect.right*/ - bounds[0]/*itemRect.left*/;
-    int height = bounds[3]/*itemRect.bottom*/ - bounds[2]/*itemRect.top*/;
-    return new Rectangle(x, y, width, height);
-  }
-
-  private void getTabItemBounds(TabFolder tabFolder, int index, int[] bounds) {
-    _getTabItemBounds(getHandleField(tabFolder), index, bounds);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Menu
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final Rectangle getMenuBarBounds(Menu menu) {
-    Decorations shell = getMenuParent(menu);
-    int[] bounds = new int[4];
-    if (getMenuBarOrItemBounds(shell, 0, bounds)) {
-      int width = bounds[1] - bounds[0]; // info.right - info.left;
-      int height = bounds[3] - bounds[2]; // info.bottom - info.top;
-      //
-      Point shellLocation = shell.getLocation();
-      return new Rectangle(bounds[0] /*info.left*/ - shellLocation.x,
-          bounds[2] /*info.top*/
-              - shellLocation.y,
-          width,
-          height);
-    }
-    throw new RuntimeException("OS function call failed.");
-  }
-
-  @Override
-  public Image getMenuBarVisualData(Menu menu, List<Rectangle> dimensions) {
-    Decorations shell = getMenuParent(menu);
-    int[] offsetBounds = new int[4];
-    if (!getMenuBarOrItemBounds(shell, 1, offsetBounds)) {
-      throw new RuntimeException("OS function call failed.");
-    }
-    for (int index = 0; index < menu.getItemCount(); ++index) {
-      int[] bounds = new int[4];
-      if (!getMenuBarOrItemBounds(shell, index + 1, bounds)) {
-        throw new IllegalStateException("OS function call failed.");
-      }
-      int x = bounds[0] - offsetBounds[0]; // barInfo.left - offsetBarInfo.left;
-      int y = bounds[2] - offsetBounds[2]; // barInfo.top - offsetBarInfo.top;
-      int width = bounds[1] - bounds[0]; // barInfo.right - barInfo.left;
-      int height = bounds[3] - bounds[2]; // barInfo.bottom - barInfo.top;
-      dimensions.add(new Rectangle(x, y, width, height));
-    }
-    return null;
-  }
-
-  /**
-   * Checks this menu parent, it should have menu bar set for the given menu.
-   */
-  private Decorations getMenuParent(Menu menu) {
-    Decorations shell = menu.getParent();
-    if (shell.getMenuBar() != menu) {
-      throw new IllegalArgumentException("Invalid menu parent.");
-    }
-    return shell;
-  }
-
-  private boolean getMenuBarOrItemBounds(Decorations shell, int index, int[] bounds) {
-    return _getMenuBarOrItemBounds(getHandleField(shell), index, bounds);
-  }
-
-  @Override
-  public Image getMenuPopupVisualData(Menu menu, int[] bounds) throws Exception {
-    // create fake image
-    Image image = new Image(Display.getCurrent(), 1, 1);
-    // free system resource
-    _DeleteObject(getHandleField(image));
-    H handle =
-        _fetchPopupMenuVisualData(getHandleField(menu.getShell()), getHandleField(menu), bounds);
-    // set new handle to image
-    ReflectionUtils.setField(image, "handle", handle);
-    return image;
-  }
-
-  @Override
-  public int getDefaultMenuBarHeight() {
-    return _getDefaultMenuBarHeight();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Alpha
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void setAlpha(Shell shell, int alpha) {
-    _setAlpha(getHandleField(shell), alpha);
-  }
-
-  @Override
-  public int getAlpha(Shell shell) {
-    return _getAlpha(getHandleField(shell));
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tree click
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean isPlusMinusTreeClick(Tree tree, int x, int y) {
-    return _isPlusMinusTreeClick(getHandleField(tree), x, y);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Misc
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void scroll(Control cursorControl, int count) {
-    _scroll(getHandleField(cursorControl), count);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the "handle" field value of given <code>object</code>.
-   */
-  protected abstract H getHandleField(Object object);
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Native
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Calls GetMenuBarInfo and fills the given array of int with bounds in a left, right, top, bottom
-   * sequence.
-   *
-   * @param shellHandle
-   *          the handle of {@link Shell} which bar menu belongs to.
-   * @param itemIndex
-   *          the item index to fetch bounds of. Passing zero value returns the bounds of menu bar.
-   * @param bounds
-   *          the array of integer with size 4.
-   */
-  private static native <H extends Number> boolean _getMenuBarOrItemBounds(H shellHandle,
-      int itemIndex,
-      int[] bounds);
-
-  /**
-   * Fetches the menu data: returns item bounds as plain array and the HBITMAP of menu image.
-   *
-   * @param shellHandle
-   *          the handle of menu parent shell.
-   * @param menuHandle
-   *          the handle of menu.
-   * @param bounds
-   *          the array of integer with size 4 * menu item count.
-   * @return the HBITMAP of menu widget.
-   */
-  private static native <H extends Number> H _fetchPopupMenuVisualData(H shellHandle,
-      H menuHandle,
-      int[] itemBounds);
-
-  /**
-   * @return the result of GetSystemMetrics(SM_CYMENU) invocation;
-   */
-  private static native int _getDefaultMenuBarHeight();
-
-  /**
-   * Scrolls by <code>count</code> positions.
-   */
-  private static native <H extends Number> void _scroll(H handle, int count);
-
-  /**
-   * Causes taking the screen shot.
-   *
-   * @param windowHandle
-   *          the handle of {@link Shell}.
-   * @param dcHandle
-   *          the handle {@link GC} to paint to.
-   */
-  private static native <H extends Number> void _makeShot(H windowHandle, H dcHandle);
-
-  /**
-   * @return <code>true</code> if pointer is over {@link TreeItem} plus/minus sign.
-   */
-  private static native <H extends Number> boolean _isPlusMinusTreeClick(H handle, int x, int y);
-
-  /**
-   * Sets the <code>alpha</code> value for given <code>shell</code>.
-   *
-   * @param shellHandle
-   *          the handle of {@link Shell}.
-   * @param alpha
-   *          the value of alpha, 0-255, not validated.
-   */
-  private static native <H extends Number> void _setAlpha(H shellHandle, int alpha);
-
-  /**
-   * Returns the current alpha value for given <code>shellHandle</code>.
-   *
-   * @param shellHandle
-   *          the handle of {@link Shell}.
-   * @return the alpha value.
-   */
-  private static native <H extends Number> int _getAlpha(H shellHandle);
-
-  /**
-   * Fills the given array of int with bounds in a left, right, top, bottom sequence.
-   *
-   * @param tabFolderHandle
-   *          the handle of {@link TabFolder}.
-   * @param itemIndex
-   *          the {@link TabItem} index to fetch bounds of.
-   * @param bounds
-   *          the array of integer with size 4.
-   */
-  private static native <H extends Number> void _getTabItemBounds(H tabFolderHandle,
-      int itemIndex,
-      int[] bounds);
-
-  /**
-   * Simply calls DeleteObject() for given <code>handle</code>.
-   */
-  private static native <H extends Number> void _DeleteObject(H handle);
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Implementations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-
-  private static final class Impl64 extends OSSupportWin32<Long> {
-    @Override
-    protected Long getHandleField(Object object) {
-      return ReflectionUtils.getFieldLong(object, "handle");
-    }
-  }
+	static {
+		System.loadLibrary("wbp");
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected static final OSSupport INSTANCE = new Impl64();
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Screen Shot
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final void makeShots(Object controlObject) throws Exception {
+		Control control = (Control) controlObject;
+		try {
+			reverseDrawingOrder(control);
+			makeShotsHierarchy(control);
+		} finally {
+			reverseDrawingOrder(control);
+		}
+	}
+
+	/**
+	 * For unknown reason, when we do screen shot using WM_PRINT, <em>last</em> {@link Control} is
+	 * displayed on the top of drawing order, however when we run application, Windows displays
+	 * <em>first</em> on the top of drawing order. So, we reverse drawing order before making screen
+	 * shot, and restore drawing order after this.
+	 */
+	private static void reverseDrawingOrder(Control control) {
+		// 20130423(scheglov) disabled because of http://www.eclipse.org/forums/index.php/t/476687/
+		//    if (control instanceof Composite) {
+		//      Composite composite = (Composite) control;
+		//      for (Control child : composite.getChildren()) {
+		//        child.moveAbove(null);
+		//        reverseDrawingOrder(child);
+		//      }
+		//    }
+	}
+
+	/**
+	 * Creates screen shots for all {@link Control}'s in hierarchy marked with
+	 * <code>WBP_NEED_IMAGE</code>.
+	 */
+	private void makeShotsHierarchy(Control control) throws Exception {
+		if (control.getData(WBP_NEED_IMAGE) != null) {
+			// check size
+			Point size = control.getSize();
+			if (size.x == 0 || size.y == 0) {
+				return;
+			}
+			// set image
+			control.setData(WBP_IMAGE, makeShot(control));
+			// create images for children
+			if (control instanceof Composite) {
+				Composite composite = (Composite) control;
+				for (Control child : composite.getChildren()) {
+					makeShotsHierarchy(child);
+				}
+			}
+		}
+	}
+
+	@Override
+	public final Image makeShot(Control control) throws Exception {
+		Rectangle bounds = control.getBounds();
+		if (bounds.width == 0 || bounds.height == 0) {
+			return null;
+		}
+		Image image = new Image(Display.getCurrent(), bounds.width, bounds.height);
+		GC gc = new GC(image);
+		try {
+			makeShotImpl(control, gc);
+		} finally {
+			gc.dispose();
+		}
+		//
+		return image;
+	}
+
+	protected void makeShotImpl(Control control, GC gc) {
+		_makeShot(getHandleField(control), getHandleField(gc));
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// TabItem
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final Rectangle getTabItemBounds(Object tabItemObject) {
+		TabFolder tabFolder = ((TabItem) tabItemObject).getParent();
+		int index = ArrayUtils.indexOf(tabFolder.getItems(), tabItemObject);
+		int[] bounds = new int[4];
+		getTabItemBounds(tabFolder, index, bounds);
+		// convert into Rectangle
+		int borderOffset = (tabFolder.getStyle() & SWT.BORDER) != 0 ? 2 : 0;
+		int x = bounds[0]/*itemRect.left*/ + borderOffset;
+		int y = bounds[2]/*itemRect.top*/ + borderOffset;
+		int width = bounds[1]/*itemRect.right*/ - bounds[0]/*itemRect.left*/;
+		int height = bounds[3]/*itemRect.bottom*/ - bounds[2]/*itemRect.top*/;
+		return new Rectangle(x, y, width, height);
+	}
+
+	private void getTabItemBounds(TabFolder tabFolder, int index, int[] bounds) {
+		_getTabItemBounds(getHandleField(tabFolder), index, bounds);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Menu
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final Rectangle getMenuBarBounds(Menu menu) {
+		Decorations shell = getMenuParent(menu);
+		int[] bounds = new int[4];
+		if (getMenuBarOrItemBounds(shell, 0, bounds)) {
+			int width = bounds[1] - bounds[0]; // info.right - info.left;
+			int height = bounds[3] - bounds[2]; // info.bottom - info.top;
+			//
+			Point shellLocation = shell.getLocation();
+			return new Rectangle(bounds[0] /*info.left*/ - shellLocation.x,
+					bounds[2] /*info.top*/
+							- shellLocation.y,
+							width,
+							height);
+		}
+		throw new RuntimeException("OS function call failed.");
+	}
+
+	@Override
+	public Image getMenuBarVisualData(Menu menu, List<Rectangle> dimensions) {
+		Decorations shell = getMenuParent(menu);
+		int[] offsetBounds = new int[4];
+		if (!getMenuBarOrItemBounds(shell, 1, offsetBounds)) {
+			throw new RuntimeException("OS function call failed.");
+		}
+		for (int index = 0; index < menu.getItemCount(); ++index) {
+			int[] bounds = new int[4];
+			if (!getMenuBarOrItemBounds(shell, index + 1, bounds)) {
+				throw new IllegalStateException("OS function call failed.");
+			}
+			int x = bounds[0] - offsetBounds[0]; // barInfo.left - offsetBarInfo.left;
+			int y = bounds[2] - offsetBounds[2]; // barInfo.top - offsetBarInfo.top;
+			int width = bounds[1] - bounds[0]; // barInfo.right - barInfo.left;
+			int height = bounds[3] - bounds[2]; // barInfo.bottom - barInfo.top;
+			dimensions.add(new Rectangle(x, y, width, height));
+		}
+		return null;
+	}
+
+	/**
+	 * Checks this menu parent, it should have menu bar set for the given menu.
+	 */
+	private Decorations getMenuParent(Menu menu) {
+		Decorations shell = menu.getParent();
+		if (shell.getMenuBar() != menu) {
+			throw new IllegalArgumentException("Invalid menu parent.");
+		}
+		return shell;
+	}
+
+	private boolean getMenuBarOrItemBounds(Decorations shell, int index, int[] bounds) {
+		return _getMenuBarOrItemBounds(getHandleField(shell), index, bounds);
+	}
+
+	@Override
+	public Image getMenuPopupVisualData(Menu menu, int[] bounds) throws Exception {
+		// create fake image
+		Image image = new Image(Display.getCurrent(), 1, 1);
+		// free system resource
+		_DeleteObject(getHandleField(image));
+		H handle =
+				_fetchPopupMenuVisualData(getHandleField(menu.getShell()), getHandleField(menu), bounds);
+		// set new handle to image
+		ReflectionUtils.setField(image, "handle", handle);
+		return image;
+	}
+
+	@Override
+	public int getDefaultMenuBarHeight() {
+		return _getDefaultMenuBarHeight();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Alpha
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void setAlpha(Shell shell, int alpha) {
+		_setAlpha(getHandleField(shell), alpha);
+	}
+
+	@Override
+	public int getAlpha(Shell shell) {
+		return _getAlpha(getHandleField(shell));
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tree click
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean isPlusMinusTreeClick(Tree tree, int x, int y) {
+		return _isPlusMinusTreeClick(getHandleField(tree), x, y);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Misc
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void scroll(Control cursorControl, int count) {
+		_scroll(getHandleField(cursorControl), count);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the "handle" field value of given <code>object</code>.
+	 */
+	protected abstract H getHandleField(Object object);
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Native
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Calls GetMenuBarInfo and fills the given array of int with bounds in a left, right, top, bottom
+	 * sequence.
+	 *
+	 * @param shellHandle
+	 *          the handle of {@link Shell} which bar menu belongs to.
+	 * @param itemIndex
+	 *          the item index to fetch bounds of. Passing zero value returns the bounds of menu bar.
+	 * @param bounds
+	 *          the array of integer with size 4.
+	 */
+	private static native <H extends Number> boolean _getMenuBarOrItemBounds(H shellHandle,
+			int itemIndex,
+			int[] bounds);
+
+	/**
+	 * Fetches the menu data: returns item bounds as plain array and the HBITMAP of menu image.
+	 *
+	 * @param shellHandle
+	 *          the handle of menu parent shell.
+	 * @param menuHandle
+	 *          the handle of menu.
+	 * @param bounds
+	 *          the array of integer with size 4 * menu item count.
+	 * @return the HBITMAP of menu widget.
+	 */
+	private static native <H extends Number> H _fetchPopupMenuVisualData(H shellHandle,
+			H menuHandle,
+			int[] itemBounds);
+
+	/**
+	 * @return the result of GetSystemMetrics(SM_CYMENU) invocation;
+	 */
+	private static native int _getDefaultMenuBarHeight();
+
+	/**
+	 * Scrolls by <code>count</code> positions.
+	 */
+	private static native <H extends Number> void _scroll(H handle, int count);
+
+	/**
+	 * Causes taking the screen shot.
+	 *
+	 * @param windowHandle
+	 *          the handle of {@link Shell}.
+	 * @param dcHandle
+	 *          the handle {@link GC} to paint to.
+	 */
+	private static native <H extends Number> void _makeShot(H windowHandle, H dcHandle);
+
+	/**
+	 * @return <code>true</code> if pointer is over {@link TreeItem} plus/minus sign.
+	 */
+	private static native <H extends Number> boolean _isPlusMinusTreeClick(H handle, int x, int y);
+
+	/**
+	 * Sets the <code>alpha</code> value for given <code>shell</code>.
+	 *
+	 * @param shellHandle
+	 *          the handle of {@link Shell}.
+	 * @param alpha
+	 *          the value of alpha, 0-255, not validated.
+	 */
+	private static native <H extends Number> void _setAlpha(H shellHandle, int alpha);
+
+	/**
+	 * Returns the current alpha value for given <code>shellHandle</code>.
+	 *
+	 * @param shellHandle
+	 *          the handle of {@link Shell}.
+	 * @return the alpha value.
+	 */
+	private static native <H extends Number> int _getAlpha(H shellHandle);
+
+	/**
+	 * Fills the given array of int with bounds in a left, right, top, bottom sequence.
+	 *
+	 * @param tabFolderHandle
+	 *          the handle of {@link TabFolder}.
+	 * @param itemIndex
+	 *          the {@link TabItem} index to fetch bounds of.
+	 * @param bounds
+	 *          the array of integer with size 4.
+	 */
+	private static native <H extends Number> void _getTabItemBounds(H tabFolderHandle,
+			int itemIndex,
+			int[] bounds);
+
+	/**
+	 * Simply calls DeleteObject() for given <code>handle</code>.
+	 */
+	private static native <H extends Number> void _DeleteObject(H handle);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Implementations
+	//
+	////////////////////////////////////////////////////////////////////////////
+
+	private static final class Impl64 extends OSSupportWin32<Long> {
+		@Override
+		protected Long getHandleField(Object object) {
+			return ReflectionUtils.getFieldLong(object, "handle");
+		}
+	}
 }
diff --git a/org.eclipse.wb.os/src/org/eclipse/wb/os/Activator.java b/org.eclipse.wb.os/src/org/eclipse/wb/os/Activator.java
index 74ca39564..ecf54db16 100644
--- a/org.eclipse.wb.os/src/org/eclipse/wb/os/Activator.java
+++ b/org.eclipse.wb.os/src/org/eclipse/wb/os/Activator.java
@@ -20,37 +20,37 @@
  * @coverage os.core
  */
 public class Activator extends AbstractUIPlugin {
-  // The plug-in ID
-  public static final String PLUGIN_ID = "org.eclipse.wb.os";
-  // The shared instance
-  private static Activator plugin;
+	// The plug-in ID
+	public static final String PLUGIN_ID = "org.eclipse.wb.os";
+	// The shared instance
+	private static Activator plugin;
 
-  /*
-   * (non-Javadoc)
-   * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
-   */
-  @Override
-  public void start(BundleContext context) throws Exception {
-    super.start(context);
-    plugin = this;
-  }
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
+	 */
+	@Override
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+		plugin = this;
+	}
 
-  /*
-   * (non-Javadoc)
-   * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
-   */
-  @Override
-  public void stop(BundleContext context) throws Exception {
-    plugin = null;
-    super.stop(context);
-  }
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
+	 */
+	@Override
+	public void stop(BundleContext context) throws Exception {
+		plugin = null;
+		super.stop(context);
+	}
 
-  /**
-   * Returns the shared instance
-   *
-   * @return the shared instance
-   */
-  public static Activator getDefault() {
-    return plugin;
-  }
+	/**
+	 * Returns the shared instance
+	 *
+	 * @return the shared instance
+	 */
+	public static Activator getDefault() {
+		return plugin;
+	}
 }
diff --git a/org.eclipse.wb.os/src/org/eclipse/wb/os/OSSupport.java b/org.eclipse.wb.os/src/org/eclipse/wb/os/OSSupport.java
index 2b4be013a..08b3fded4 100644
--- a/org.eclipse.wb.os/src/org/eclipse/wb/os/OSSupport.java
+++ b/org.eclipse.wb.os/src/org/eclipse/wb/os/OSSupport.java
@@ -39,309 +39,309 @@
  * @coverage os.core
  */
 public abstract class OSSupport {
-  private static final OSSupport INSTANCE = getInstance();
+	private static final OSSupport INSTANCE = getInstance();
 
-  /**
-   * @return the {@link OSSupport} for current platform using extension point.
-   */
-  public static OSSupport get() {
-    return INSTANCE;
-  }
+	/**
+	 * @return the {@link OSSupport} for current platform using extension point.
+	 */
+	public static OSSupport get() {
+		return INSTANCE;
+	}
 
-  private static OSSupport getInstance() {
-    try {
-      IConfigurationElement configurationElements[] =
-          Platform.getExtensionRegistry().getConfigurationElementsFor(
-              "org.eclipse.wb.os",
-              "OSSupport");
-      for (IConfigurationElement element : configurationElements) {
-        IExtension extension = element.getDeclaringExtension();
-        String id = extension.getContributor().getName();
-        Bundle bundle = Platform.getBundle(id);
-        String className = element.getAttribute("class");
-        Class<?> loadedClass = bundle.loadClass(className);
-        Field field = loadedClass.getDeclaredField("INSTANCE");
-        field.setAccessible(true);
-        return (OSSupport) field.get(null);
-      }
-      throw new OSSupportError("Can't find the support for current OS.");
-    } catch (Throwable e) {
-      throw new OSSupportError("Can't initialize the support for current OS: ", e);
-    }
-  }
+	private static OSSupport getInstance() {
+		try {
+			IConfigurationElement configurationElements[] =
+					Platform.getExtensionRegistry().getConfigurationElementsFor(
+							"org.eclipse.wb.os",
+							"OSSupport");
+			for (IConfigurationElement element : configurationElements) {
+				IExtension extension = element.getDeclaringExtension();
+				String id = extension.getContributor().getName();
+				Bundle bundle = Platform.getBundle(id);
+				String className = element.getAttribute("class");
+				Class<?> loadedClass = bundle.loadClass(className);
+				Field field = loadedClass.getDeclaredField("INSTANCE");
+				field.setAccessible(true);
+				return (OSSupport) field.get(null);
+			}
+			throw new OSSupportError("Can't find the support for current OS.");
+		} catch (Throwable e) {
+			throw new OSSupportError("Can't initialize the support for current OS: ", e);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Screen Shot
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final String WBP_DISABLED_REDRAW = "WBP_DISABLED_REDRAW";
-  public static final String WBP_NEED_IMAGE = "WBP_NEED_IMAGE";
-  public static final String WBP_IMAGE = "WBP_IMAGE";
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Screen Shot
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final String WBP_DISABLED_REDRAW = "WBP_DISABLED_REDRAW";
+	public static final String WBP_NEED_IMAGE = "WBP_NEED_IMAGE";
+	public static final String WBP_IMAGE = "WBP_IMAGE";
 
-  /**
-   * Prepares shots for all {@link Control}'s in hierarchy that have flag {@link #WBP_NEED_IMAGE}.
-   * Created image can be requested using {@link ToolkitSupport#getShotImage(Object)}.
-   *
-   * Note: the control may have <code>null</code> as image, ex. if the control has the invalid size.
-   */
-  public abstract void makeShots(Object control) throws Exception;
+	/**
+	 * Prepares shots for all {@link Control}'s in hierarchy that have flag {@link #WBP_NEED_IMAGE}.
+	 * Created image can be requested using {@link ToolkitSupport#getShotImage(Object)}.
+	 *
+	 * Note: the control may have <code>null</code> as image, ex. if the control has the invalid size.
+	 */
+	public abstract void makeShots(Object control) throws Exception;
 
-  /**
-   * Prepares the process of taking screen shot. Overridden in Linux.
-   *
-   * @param control
-   *          the {@link Control}.
-   */
-  public void beginShot(Object controlObject) {
-    Shell shell = layoutShell(controlObject);
-    // make visible
-    makeShellVisible(shell);
-  }
+	/**
+	 * Prepares the process of taking screen shot. Overridden in Linux.
+	 *
+	 * @param control
+	 *          the {@link Control}.
+	 */
+	public void beginShot(Object controlObject) {
+		Shell shell = layoutShell(controlObject);
+		// make visible
+		makeShellVisible(shell);
+	}
 
-  /**
-   * Makes the top level control visible.
-   */
-  protected void makeShellVisible(Shell shell) {
-    shell.setLocation(-10000, -10000);
-    shell.setVisible(true);
-  }
+	/**
+	 * Makes the top level control visible.
+	 */
+	protected void makeShellVisible(Shell shell) {
+		shell.setLocation(-10000, -10000);
+		shell.setVisible(true);
+	}
 
-  protected final Shell layoutShell(Object controlObject) {
-    Control control = (Control) controlObject;
-    Shell shell = control.getShell();
-    doLayout(shell);
-    fixZeroSizes_begin(shell);
-    return shell;
-  }
+	protected final Shell layoutShell(Object controlObject) {
+		Control control = (Control) controlObject;
+		Shell shell = control.getShell();
+		doLayout(shell);
+		fixZeroSizes_begin(shell);
+		return shell;
+	}
 
-  /**
-   * Ensures that layout is performed for all {@link Composite}-s, even if some of them are in
-   * "null" layout, so layout request is not propagated to them automatically.
-   *
-   * @param control
-   *          the {@link Control} to layout if required and is {@link Composite}.
-   */
-  private static void doLayout(Control control) {
-    if (control instanceof Composite) {
-      Composite composite = (Composite) control;
-      // layout children
-      for (Control child : composite.getChildren()) {
-        doLayout(child);
-      }
-      // layout this Composite
-      composite.layout();
-    }
-  }
+	/**
+	 * Ensures that layout is performed for all {@link Composite}-s, even if some of them are in
+	 * "null" layout, so layout request is not propagated to them automatically.
+	 *
+	 * @param control
+	 *          the {@link Control} to layout if required and is {@link Composite}.
+	 */
+	private static void doLayout(Control control) {
+		if (control instanceof Composite) {
+			Composite composite = (Composite) control;
+			// layout children
+			for (Control child : composite.getChildren()) {
+				doLayout(child);
+			}
+			// layout this Composite
+			composite.layout();
+		}
+	}
 
-  /**
-   * Finalizes the process of taking screen shot. Overridden in Linux.
-   *
-   * @param control
-   *          the {@link Control}.
-   */
-  public void endShot(Object controlObject) {
-    Control control = (Control) controlObject;
-    fixZeroSizes_end(control);
-    Shell shell = control.getShell();
-    shell.setVisible(false);
-  }
+	/**
+	 * Finalizes the process of taking screen shot. Overridden in Linux.
+	 *
+	 * @param control
+	 *          the {@link Control}.
+	 */
+	public void endShot(Object controlObject) {
+		Control control = (Control) controlObject;
+		fixZeroSizes_end(control);
+		Shell shell = control.getShell();
+		shell.setVisible(false);
+	}
 
-  /**
-   * Return the {@link Image} of given {@link Control}.
-   *
-   * Note: may return <code>null</code> as image, ex. if the control has the invalid size. See also
-   * {@link OSSupport#makeShots(Object)}.
-   *
-   * @return the {@link Image} of given {@link Control}.
-   */
-  public abstract Image makeShot(Control control) throws Exception;
+	/**
+	 * Return the {@link Image} of given {@link Control}.
+	 *
+	 * Note: may return <code>null</code> as image, ex. if the control has the invalid size. See also
+	 * {@link OSSupport#makeShots(Object)}.
+	 *
+	 * @return the {@link Image} of given {@link Control}.
+	 */
+	public abstract Image makeShot(Control control) throws Exception;
 
-  /**
-   * @return the default height of single-line menu bar according to system metrics (if available).
-   */
-  public abstract int getDefaultMenuBarHeight();
+	/**
+	 * @return the default height of single-line menu bar according to system metrics (if available).
+	 */
+	public abstract int getDefaultMenuBarHeight();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Fix zero size
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Some controls can have zero sizes, and we can't draw it. The fix is to cancel drawing.
-   */
-  private static void fixZeroSizes_begin(Control control) {
-    // fix this Control
-    if (control.getBounds().isEmpty()) {
-      control.setData(WBP_DISABLED_REDRAW, Boolean.TRUE);
-      control.setRedraw(false);
-    }
-    // fix children
-    if (control instanceof Composite) {
-      Composite composite = (Composite) control;
-      for (Control child : composite.getChildren()) {
-        fixZeroSizes_begin(child);
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Fix zero size
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Some controls can have zero sizes, and we can't draw it. The fix is to cancel drawing.
+	 */
+	private static void fixZeroSizes_begin(Control control) {
+		// fix this Control
+		if (control.getBounds().isEmpty()) {
+			control.setData(WBP_DISABLED_REDRAW, Boolean.TRUE);
+			control.setRedraw(false);
+		}
+		// fix children
+		if (control instanceof Composite) {
+			Composite composite = (Composite) control;
+			for (Control child : composite.getChildren()) {
+				fixZeroSizes_begin(child);
+			}
+		}
+	}
 
-  /**
-   * "End" operation for {@link #fixZeroSizes_begin(Control)}. We should enable drawing after screen
-   * shot, because some containers (such as {@link TabFolder}) manage bounds of its children
-   * dynamically. So, we should not disable drawing forever, only when we need this.
-   */
-  private static void fixZeroSizes_end(Control control) {
-    // fix this Control
-    if (control.getData(WBP_DISABLED_REDRAW) != null) {
-      control.setData(WBP_DISABLED_REDRAW, null);
-      control.setRedraw(true);
-    }
-    // fix children
-    if (control instanceof Composite) {
-      Composite composite = (Composite) control;
-      for (Control child : composite.getChildren()) {
-        fixZeroSizes_end(child);
-      }
-    }
-  }
+	/**
+	 * "End" operation for {@link #fixZeroSizes_begin(Control)}. We should enable drawing after screen
+	 * shot, because some containers (such as {@link TabFolder}) manage bounds of its children
+	 * dynamically. So, we should not disable drawing forever, only when we need this.
+	 */
+	private static void fixZeroSizes_end(Control control) {
+		// fix this Control
+		if (control.getData(WBP_DISABLED_REDRAW) != null) {
+			control.setData(WBP_DISABLED_REDRAW, null);
+			control.setRedraw(true);
+		}
+		// fix children
+		if (control instanceof Composite) {
+			Composite composite = (Composite) control;
+			for (Control child : composite.getChildren()) {
+				fixZeroSizes_end(child);
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // TabItem bounds
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the bounds of {@link TabItem}.
-   */
-  public abstract Rectangle getTabItemBounds(Object item);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// TabItem bounds
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the bounds of {@link TabItem}.
+	 */
+	public abstract Rectangle getTabItemBounds(Object item);
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Shell Opacity
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets the <code>alpha</code> value for given <code>shell</code>.
-   *
-   * @param shell
-   *          the instance of {@link Shell} to set the alpha.
-   * @param alpha
-   *          the value of alpha, 0-255, not validated.
-   */
-  public abstract void setAlpha(Shell shell, int alpha);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Shell Opacity
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets the <code>alpha</code> value for given <code>shell</code>.
+	 *
+	 * @param shell
+	 *          the instance of {@link Shell} to set the alpha.
+	 * @param alpha
+	 *          the value of alpha, 0-255, not validated.
+	 */
+	public abstract void setAlpha(Shell shell, int alpha);
 
-  /**
-   * Returns the current alpha value for given <code>shell</code>.
-   *
-   * @param shell
-   *          the instance of {@link Shell} to get the alpha.
-   * @return the alpha value.
-   */
-  public abstract int getAlpha(Shell shell);
+	/**
+	 * Returns the current alpha value for given <code>shell</code>.
+	 *
+	 * @param shell
+	 *          the instance of {@link Shell} to get the alpha.
+	 * @return the alpha value.
+	 */
+	public abstract int getAlpha(Shell shell);
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Menu
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Returns the {@link Image} of popup or drop-down menu and fills the menu items bounds array.
-   *
-   * @return the {@link Image} of popup or drop-down menu and fills the menu items bounds array.
-   */
-  public abstract Image getMenuPopupVisualData(Menu menu, int[] bounds) throws Exception;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Menu
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Returns the {@link Image} of popup or drop-down menu and fills the menu items bounds array.
+	 *
+	 * @return the {@link Image} of popup or drop-down menu and fills the menu items bounds array.
+	 */
+	public abstract Image getMenuPopupVisualData(Menu menu, int[] bounds) throws Exception;
 
-  /**
-   * Returns <code>null</code> in most cases except MacOSX. Fills the {@link List} of
-   * {@link Rectangle} with items bounds of bar menu in <code>bounds</code> parameter.
-   *
-   * @param menu
-   *          the {@link Menu} with style {@link SWT#BAR}.
-   * @param bounds
-   *          the {@link List} of {@link Rectangle} to fill with items bounds values.
-   * @return under MacOSX returns the image of menu bar, otherwise returns <code>null</code>.
-   */
-  public abstract Image getMenuBarVisualData(Menu menu, List<Rectangle> bounds);
+	/**
+	 * Returns <code>null</code> in most cases except MacOSX. Fills the {@link List} of
+	 * {@link Rectangle} with items bounds of bar menu in <code>bounds</code> parameter.
+	 *
+	 * @param menu
+	 *          the {@link Menu} with style {@link SWT#BAR}.
+	 * @param bounds
+	 *          the {@link List} of {@link Rectangle} to fill with items bounds values.
+	 * @return under MacOSX returns the image of menu bar, otherwise returns <code>null</code>.
+	 */
+	public abstract Image getMenuBarVisualData(Menu menu, List<Rectangle> bounds);
 
-  /**
-   * Returns the bounds of given bar menu.
-   *
-   * @param menu
-   *          the {@link Menu} with style {@link SWT#BAR}.
-   * @return the bounds of given bar menu.
-   */
-  public abstract Rectangle getMenuBarBounds(Menu menu);
+	/**
+	 * Returns the bounds of given bar menu.
+	 *
+	 * @param menu
+	 *          the {@link Menu} with style {@link SWT#BAR}.
+	 * @return the bounds of given bar menu.
+	 */
+	public abstract Rectangle getMenuBarBounds(Menu menu);
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tree
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if pointer is over {@link TreeItem} plus/minus sign.
-   */
-  public abstract boolean isPlusMinusTreeClick(Tree tree, int x, int y);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tree
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if pointer is over {@link TreeItem} plus/minus sign.
+	 */
+	public abstract boolean isPlusMinusTreeClick(Tree tree, int x, int y);
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Control
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the insets for push button, useful in MacOSX. Insets values order is left, right, top,
-   *         bottom.
-   */
-  public int[] getPushButtonInsets() {
-    return new int[]{};
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Control
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the insets for push button, useful in MacOSX. Insets values order is left, right, top,
+	 *         bottom.
+	 */
+	public int[] getPushButtonInsets() {
+		return new int[]{};
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Misc
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Scrolls the <code>cursorControl</code> by <code>count</code> positions. Implemented as
-   * Windows-only.
-   *
-   * @param cursorControl
-   *          the {@link Control} to scroll.
-   * @param count
-   *          the scroll count.
-   */
-  public void scroll(Control cursorControl, int count) {
-    // does nothing
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Misc
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Scrolls the <code>cursorControl</code> by <code>count</code> positions. Implemented as
+	 * Windows-only.
+	 *
+	 * @param cursorControl
+	 *          the {@link Control} to scroll.
+	 * @param count
+	 *          the scroll count.
+	 */
+	public void scroll(Control cursorControl, int count) {
+		// does nothing
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AWT/Swing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Attempts to take shot from AWT component's native peer. Returns <code>null</code> if no peer,
-   * cannot determine native handle or any other low-level error or improper state determined.
-   */
-  public Image makeShotAwt(Object component, int width, int height) {
-    // do nothing by default
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AWT/Swing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Attempts to take shot from AWT component's native peer. Returns <code>null</code> if no peer,
+	 * cannot determine native handle or any other low-level error or improper state determined.
+	 */
+	public Image makeShotAwt(Object component, int width, int height) {
+		// do nothing by default
+		return null;
+	}
 
-  /**
-   * Executes the given runnable synchronously within the AWT event queue. If the
-   * current thread is already the AWT thread, the job is executed directly.
-   *
-   * @param job The runnable to be executed in the AWT UI thread
-   */
-  public void runAwt(Runnable job) {
-    if (EventQueue.isDispatchThread()) {
-      job.run();
-    } else {
-      try {
-        EventQueue.invokeAndWait(job);
-      } catch (InvocationTargetException | InterruptedException e) {
-        Platform.getLog(OSSupport.class).error(e.getMessage(), e);
-      }
-    }
-  }
+	/**
+	 * Executes the given runnable synchronously within the AWT event queue. If the
+	 * current thread is already the AWT thread, the job is executed directly.
+	 *
+	 * @param job The runnable to be executed in the AWT UI thread
+	 */
+	public void runAwt(Runnable job) {
+		if (EventQueue.isDispatchThread()) {
+			job.run();
+		} else {
+			try {
+				EventQueue.invokeAndWait(job);
+			} catch (InvocationTargetException | InterruptedException e) {
+				Platform.getLog(OSSupport.class).error(e.getMessage(), e);
+			}
+		}
+	}
 }
diff --git a/org.eclipse.wb.os/src/org/eclipse/wb/os/OSSupportError.java b/org.eclipse.wb.os/src/org/eclipse/wb/os/OSSupportError.java
index de3a628a8..ec6f0bc99 100644
--- a/org.eclipse.wb.os/src/org/eclipse/wb/os/OSSupportError.java
+++ b/org.eclipse.wb.os/src/org/eclipse/wb/os/OSSupportError.java
@@ -17,19 +17,19 @@
  * @coverage os.core
  */
 public class OSSupportError extends Error {
-  private static final long serialVersionUID = 1L;
-  public static final int ERROR_CODE = 900;
+	private static final long serialVersionUID = 1L;
+	public static final int ERROR_CODE = 900;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public OSSupportError(String string, Throwable e) {
-    super(string, e);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public OSSupportError(String string, Throwable e) {
+		super(string, e);
+	}
 
-  public OSSupportError(String string) {
-    super(string);
-  }
+	public OSSupportError(String string) {
+		super(string);
+	}
 }
diff --git a/org.eclipse.wb.rcp.SWT_AWT/src/org/eclipse/wb/internal/rcp/swtawt/Activator.java b/org.eclipse.wb.rcp.SWT_AWT/src/org/eclipse/wb/internal/rcp/swtawt/Activator.java
index 77c8de9c6..e22949192 100644
--- a/org.eclipse.wb.rcp.SWT_AWT/src/org/eclipse/wb/internal/rcp/swtawt/Activator.java
+++ b/org.eclipse.wb.rcp.SWT_AWT/src/org/eclipse/wb/internal/rcp/swtawt/Activator.java
@@ -27,60 +27,60 @@
  * @coverage rcp
  */
 public class Activator extends Plugin {
-  public static final String PLUGIN_ID = "org.eclipse.wb.rcp.SWT_AWT";
-  private static Activator m_plugin;
+	public static final String PLUGIN_ID = "org.eclipse.wb.rcp.SWT_AWT";
+	private static Activator m_plugin;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Life cycle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void stop(BundleContext context) throws Exception {
-    m_plugin = null;
-    super.stop(context);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Life cycle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void stop(BundleContext context) throws Exception {
+		m_plugin = null;
+		super.stop(context);
+	}
 
-  @Override
-  public void start(BundleContext context) throws Exception {
-    // TODO Auto-generated method stub
-    super.start(context);
-    m_plugin = this;
-  }
+	@Override
+	public void start(BundleContext context) throws Exception {
+		// TODO Auto-generated method stub
+		super.start(context);
+		m_plugin = this;
+	}
 
-  /**
-   * Returns the shared instance.
-   */
-  public static Activator getDefault() {
-    return m_plugin;
-  }
+	/**
+	 * Returns the shared instance.
+	 */
+	public static Activator getDefault() {
+		return m_plugin;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Resources
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final BundleResourceProvider m_resourceProvider =
-      BundleResourceProvider.get(PLUGIN_ID);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Resources
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final BundleResourceProvider m_resourceProvider =
+			BundleResourceProvider.get(PLUGIN_ID);
 
-  /**
-   * @return the {@link InputStream} for file from plugin directory.
-   */
-  public static InputStream getFile(String path) {
-    return m_resourceProvider.getFile(path);
-  }
+	/**
+	 * @return the {@link InputStream} for file from plugin directory.
+	 */
+	public static InputStream getFile(String path) {
+		return m_resourceProvider.getFile(path);
+	}
 
-  /**
-   * @return the {@link Image} from "icons" directory, with caching.
-   */
-  public static Image getImage(String path) {
-    return m_resourceProvider.getImage("icons/" + path);
-  }
+	/**
+	 * @return the {@link Image} from "icons" directory, with caching.
+	 */
+	public static Image getImage(String path) {
+		return m_resourceProvider.getImage("icons/" + path);
+	}
 
-  /**
-   * @return the {@link ImageDescriptor} from "icons" directory.
-   */
-  public static ImageDescriptor getImageDescriptor(String path) {
-    return m_resourceProvider.getImageDescriptor("icons/" + path);
-  }
+	/**
+	 * @return the {@link ImageDescriptor} from "icons" directory.
+	 */
+	public static ImageDescriptor getImageDescriptor(String path) {
+		return m_resourceProvider.getImageDescriptor("icons/" + path);
+	}
 }
diff --git a/org.eclipse.wb.rcp.SWT_AWT/src/org/eclipse/wb/internal/rcp/swtawt/Messages.java b/org.eclipse.wb.rcp.SWT_AWT/src/org/eclipse/wb/internal/rcp/swtawt/Messages.java
index 6d54d42f4..912052986 100644
--- a/org.eclipse.wb.rcp.SWT_AWT/src/org/eclipse/wb/internal/rcp/swtawt/Messages.java
+++ b/org.eclipse.wb.rcp.SWT_AWT/src/org/eclipse/wb/internal/rcp/swtawt/Messages.java
@@ -3,14 +3,14 @@
 import org.eclipse.osgi.util.NLS;
 
 public class Messages extends NLS {
-  private static final String BUNDLE_NAME = "org.eclipse.wb.internal.rcp.swtawt.Messages"; //$NON-NLS-1$
-  public static String SwingCompositeEntryInfo_description;
-  public static String SwingCompositeEntryInfo_name;
-  static {
-    // initialize resource bundle
-    NLS.initializeMessages(BUNDLE_NAME, Messages.class);
-  }
+	private static final String BUNDLE_NAME = "org.eclipse.wb.internal.rcp.swtawt.Messages"; //$NON-NLS-1$
+	public static String SwingCompositeEntryInfo_description;
+	public static String SwingCompositeEntryInfo_name;
+	static {
+		// initialize resource bundle
+		NLS.initializeMessages(BUNDLE_NAME, Messages.class);
+	}
 
-  private Messages() {
-  }
+	private Messages() {
+	}
 }
diff --git a/org.eclipse.wb.rcp.SWT_AWT/src/org/eclipse/wb/internal/rcp/swtawt/palette/SwingCompositeEntryInfo.java b/org.eclipse.wb.rcp.SWT_AWT/src/org/eclipse/wb/internal/rcp/swtawt/palette/SwingCompositeEntryInfo.java
index e7e2c8f4b..ce8fba445 100644
--- a/org.eclipse.wb.rcp.SWT_AWT/src/org/eclipse/wb/internal/rcp/swtawt/palette/SwingCompositeEntryInfo.java
+++ b/org.eclipse.wb.rcp.SWT_AWT/src/org/eclipse/wb/internal/rcp/swtawt/palette/SwingCompositeEntryInfo.java
@@ -46,121 +46,121 @@
  * @coverage rcp.editor.palette
  */
 public final class SwingCompositeEntryInfo extends ToolEntryInfo {
-  private static final Image ICON = Activator.getImage("info/SWT_AWT/Composite_SWT_AWT.png");
+	private static final Image ICON = Activator.getImage("info/SWT_AWT/Composite_SWT_AWT.png");
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SwingCompositeEntryInfo() {
-    setId(getClass().getName());
-    setName(Messages.SwingCompositeEntryInfo_name);
-    setDescription(Messages.SwingCompositeEntryInfo_description);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SwingCompositeEntryInfo() {
+		setId(getClass().getName());
+		setName(Messages.SwingCompositeEntryInfo_name);
+		setDescription(Messages.SwingCompositeEntryInfo_description);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // EntryInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Image getIcon() {
-    return ICON;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// EntryInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Image getIcon() {
+		return ICON;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ToolEntryInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Tool createTool() throws Exception {
-    ICreationFactory factory = new ICreationFactory() {
-      private JavaInfo m_javaInfo;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ToolEntryInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Tool createTool() throws Exception {
+		ICreationFactory factory = new ICreationFactory() {
+			private JavaInfo m_javaInfo;
 
-      @Override
-      public void activate() throws Exception {
-        m_javaInfo = createEmbeddedComposite();
-      }
+			@Override
+			public void activate() throws Exception {
+				m_javaInfo = createEmbeddedComposite();
+			}
 
-      @Override
-      public Object getNewObject() {
-        return m_javaInfo;
-      }
-    };
-    return new CreationTool(factory);
-  }
+			@Override
+			public Object getNewObject() {
+				return m_javaInfo;
+			}
+		};
+		return new CreationTool(factory);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Implementation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private JavaInfo createEmbeddedComposite() throws Exception {
-    final JavaInfo composite =
-        JavaInfoUtils.createJavaInfo(m_editor, Composite.class, new ConstructorCreationSupport());
-    composite.addBroadcastListener(new JavaEventListener() {
-      @Override
-      public void addAfter(JavaInfo parent, JavaInfo child) throws Exception {
-        if (child == composite) {
-          composite.removeBroadcastListener(this);
-          fillEmbeddedComposite(composite);
-        }
-      }
-    });
-    return composite;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Implementation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private JavaInfo createEmbeddedComposite() throws Exception {
+		final JavaInfo composite =
+				JavaInfoUtils.createJavaInfo(m_editor, Composite.class, new ConstructorCreationSupport());
+		composite.addBroadcastListener(new JavaEventListener() {
+			@Override
+			public void addAfter(JavaInfo parent, JavaInfo child) throws Exception {
+				if (child == composite) {
+					composite.removeBroadcastListener(this);
+					fillEmbeddedComposite(composite);
+				}
+			}
+		});
+		return composite;
+	}
 
-  private void fillEmbeddedComposite(JavaInfo composite) throws Exception {
-    composite.getPropertyByTitle("Style").setValue(SWT.EMBEDDED);
-    // SWT_AWT.new_Frame()
-    ContainerInfo frame;
-    {
-      FactoryMethodDescription methodDescription =
-          FactoryDescriptionHelper.getDescription(
-              m_editor,
-              SWT_AWT.class,
-              "new_Frame(org.eclipse.swt.widgets.Composite)",
-              true);
-      ComponentDescription componentDescription =
-          ComponentDescriptionHelper.getDescription(m_editor, methodDescription);
-      frame =
-          (ContainerInfo) JavaInfoUtils.createJavaInfo(
-              m_editor,
-              componentDescription,
-              new StaticFactoryCreationSupport(methodDescription));
-      JavaInfoUtils.add(frame, null, composite, null);
-      frame.getRoot().refreshLight();
-    }
-    // java.awt.Panel
-    ContainerInfo panel;
-    {
-      panel =
-          (ContainerInfo) JavaInfoUtils.createJavaInfo(
-              m_editor,
-              Panel.class,
-              new ConstructorCreationSupport());
-      ((BorderLayoutInfo) frame.getLayout()).command_CREATE(panel, null);
-      frame.getRoot().refreshLight();
-    }
-    // set java.awt.BorderLayout on Panel
-    {
-      BorderLayoutInfo borderLayout =
-          (BorderLayoutInfo) JavaInfoUtils.createJavaInfo(
-              m_editor,
-              BorderLayout.class,
-              new ConstructorCreationSupport());
-      panel.setLayout(borderLayout);
-    }
-    // javax.swing.JRootPane
-    {
-      ContainerInfo rootPane =
-          (ContainerInfo) JavaInfoUtils.createJavaInfo(
-              m_editor,
-              JRootPane.class,
-              new ConstructorCreationSupport());
-      ((BorderLayoutInfo) panel.getLayout()).command_CREATE(rootPane, null);
-    }
-  }
+	private void fillEmbeddedComposite(JavaInfo composite) throws Exception {
+		composite.getPropertyByTitle("Style").setValue(SWT.EMBEDDED);
+		// SWT_AWT.new_Frame()
+		ContainerInfo frame;
+		{
+			FactoryMethodDescription methodDescription =
+					FactoryDescriptionHelper.getDescription(
+							m_editor,
+							SWT_AWT.class,
+							"new_Frame(org.eclipse.swt.widgets.Composite)",
+							true);
+			ComponentDescription componentDescription =
+					ComponentDescriptionHelper.getDescription(m_editor, methodDescription);
+			frame =
+					(ContainerInfo) JavaInfoUtils.createJavaInfo(
+							m_editor,
+							componentDescription,
+							new StaticFactoryCreationSupport(methodDescription));
+			JavaInfoUtils.add(frame, null, composite, null);
+			frame.getRoot().refreshLight();
+		}
+		// java.awt.Panel
+		ContainerInfo panel;
+		{
+			panel =
+					(ContainerInfo) JavaInfoUtils.createJavaInfo(
+							m_editor,
+							Panel.class,
+							new ConstructorCreationSupport());
+			((BorderLayoutInfo) frame.getLayout()).command_CREATE(panel, null);
+			frame.getRoot().refreshLight();
+		}
+		// set java.awt.BorderLayout on Panel
+		{
+			BorderLayoutInfo borderLayout =
+					(BorderLayoutInfo) JavaInfoUtils.createJavaInfo(
+							m_editor,
+							BorderLayout.class,
+							new ConstructorCreationSupport());
+			panel.setLayout(borderLayout);
+		}
+		// javax.swing.JRootPane
+		{
+			ContainerInfo rootPane =
+					(ContainerInfo) JavaInfoUtils.createJavaInfo(
+							m_editor,
+							JRootPane.class,
+							new ConstructorCreationSupport());
+			((BorderLayoutInfo) panel.getLayout()).command_CREATE(rootPane, null);
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/Activator.java b/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/Activator.java
index 5676ba3c6..ffc17e438 100644
--- a/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/Activator.java
+++ b/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/Activator.java
@@ -27,69 +27,69 @@
  * @author lobas_av
  */
 public class Activator extends AbstractUIPlugin {
-  public static final String PLUGIN_ID = "org.eclipse.wb.rcp.databinding.emf";
-  private static Activator m_plugin;
+	public static final String PLUGIN_ID = "org.eclipse.wb.rcp.databinding.emf";
+	private static Activator m_plugin;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Life cycle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void stop(BundleContext context) throws Exception {
-    m_plugin = null;
-    super.stop(context);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Life cycle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void stop(BundleContext context) throws Exception {
+		m_plugin = null;
+		super.stop(context);
+	}
 
-  @Override
-  public void start(BundleContext context) throws Exception {
-    // TODO Auto-generated method stub
-    super.start(context);
-    m_plugin = this;
-  }
+	@Override
+	public void start(BundleContext context) throws Exception {
+		// TODO Auto-generated method stub
+		super.start(context);
+		m_plugin = this;
+	}
 
-  public static Activator getDefault() {
-    return m_plugin;
-  }
+	public static Activator getDefault() {
+		return m_plugin;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Resources
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final BundleResourceProvider m_resourceProvider =
-      BundleResourceProvider.get(PLUGIN_ID);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Resources
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final BundleResourceProvider m_resourceProvider =
+			BundleResourceProvider.get(PLUGIN_ID);
 
-  /**
-   * @return the {@link InputStream} for file from plugin directory.
-   */
-  public static InputStream getFile(String path) {
-    return m_resourceProvider.getFile(path);
-  }
+	/**
+	 * @return the {@link InputStream} for file from plugin directory.
+	 */
+	public static InputStream getFile(String path) {
+		return m_resourceProvider.getFile(path);
+	}
 
-  /**
-   * @return the {@link Image} from "icons" directory, with caching.
-   */
-  public static Image getImage(String path) {
-    return m_resourceProvider.getImage("icons/" + path);
-  }
+	/**
+	 * @return the {@link Image} from "icons" directory, with caching.
+	 */
+	public static Image getImage(String path) {
+		return m_resourceProvider.getImage("icons/" + path);
+	}
 
-  /**
-   * @return the {@link ImageDescriptor} from "icons" directory.
-   */
-  public static ImageDescriptor getImageDescriptor(String path) {
-    return m_resourceProvider.getImageDescriptor("icons/" + path);
-  }
+	/**
+	 * @return the {@link ImageDescriptor} from "icons" directory.
+	 */
+	public static ImageDescriptor getImageDescriptor(String path) {
+		return m_resourceProvider.getImageDescriptor("icons/" + path);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Preferences
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Returns preference store for DB plugin.
-   */
-  public static IPreferenceStore getStore() {
-    return m_plugin.getPreferenceStore();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Preferences
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Returns preference store for DB plugin.
+	 */
+	public static IPreferenceStore getStore() {
+		return m_plugin.getPreferenceStore();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/Messages.java b/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/Messages.java
index 8750fb154..f1ee3b03c 100644
--- a/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/Messages.java
+++ b/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/Messages.java
@@ -3,18 +3,18 @@
 import org.eclipse.osgi.util.NLS;
 
 public class Messages extends NLS {
-  private static final String BUNDLE_NAME = "org.eclipse.wb.internal.rcp.databinding.emf.Messages"; //$NON-NLS-1$
-  public static String EmfObserveTypeContainer_argumentNotFound;
-  public static String EmfObserveTypeContainer_masterObservableArgumentNotFound;
-  public static String EmfObserveTypeContainer_masterObservableNotFound;
-  public static String EmfPropertiesCodeSupport_argumentNotFound;
-  public static String EmfPropertiesCodeSupport_beanPropertyNotFound;
-  public static String GlobalObservableFactory_for25Button;
-  static {
-    // initialize resource bundle
-    NLS.initializeMessages(BUNDLE_NAME, Messages.class);
-  }
+	private static final String BUNDLE_NAME = "org.eclipse.wb.internal.rcp.databinding.emf.Messages"; //$NON-NLS-1$
+	public static String EmfObserveTypeContainer_argumentNotFound;
+	public static String EmfObserveTypeContainer_masterObservableArgumentNotFound;
+	public static String EmfObserveTypeContainer_masterObservableNotFound;
+	public static String EmfPropertiesCodeSupport_argumentNotFound;
+	public static String EmfPropertiesCodeSupport_beanPropertyNotFound;
+	public static String GlobalObservableFactory_for25Button;
+	static {
+		// initialize resource bundle
+		NLS.initializeMessages(BUNDLE_NAME, Messages.class);
+	}
 
-  private Messages() {
-  }
+	private Messages() {
+	}
 }
diff --git a/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/AutomaticWizardStub.java b/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/AutomaticWizardStub.java
index bc03a71d7..679310b26 100644
--- a/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/AutomaticWizardStub.java
+++ b/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/AutomaticWizardStub.java
@@ -29,50 +29,50 @@
  * @coverage bindings.rcp.emf.model
  */
 public final class AutomaticWizardStub implements IAutomaticWizardStub {
-  private final List<PropertyInfo> m_properties;
+	private final List<PropertyInfo> m_properties;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AutomaticWizardStub(IJavaProject javaProject,
-      ClassLoader classLoader,
-      Class<?> eObjectClass) throws Exception {
-    List<VariableDeclarationFragment> fragments = Collections.emptyList();
-    PropertiesSupport propertiesSupport =
-        new PropertiesSupport(javaProject, classLoader, fragments);
-    m_properties = propertiesSupport.getProperties(eObjectClass);
-    EmfObserveTypeContainer.ensureDBLibraries(
-        javaProject,
-        "org.eclipse.emf.databinding.EMFObservables",
-        "org.eclipse.emf.databinding");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AutomaticWizardStub(IJavaProject javaProject,
+			ClassLoader classLoader,
+			Class<?> eObjectClass) throws Exception {
+		List<VariableDeclarationFragment> fragments = Collections.emptyList();
+		PropertiesSupport propertiesSupport =
+				new PropertiesSupport(javaProject, classLoader, fragments);
+		m_properties = propertiesSupport.getProperties(eObjectClass);
+		EmfObserveTypeContainer.ensureDBLibraries(
+				javaProject,
+				"org.eclipse.emf.databinding.EMFObservables",
+				"org.eclipse.emf.databinding");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IAutomaticWizardStub
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void addImports(Collection<String> importList) {
-    importList.add("org.eclipse.emf.databinding.EMFObservables");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IAutomaticWizardStub
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void addImports(Collection<String> importList) {
+		importList.add("org.eclipse.emf.databinding.EMFObservables");
+	}
 
-  @Override
-  public String createSourceCode(String fieldName, String propertyName) {
-    for (PropertyInfo property : m_properties) {
-      if (propertyName.equals(property.name)) {
-        return "\t\tIObservableValue "
-            + propertyName
-            + "ObserveValue = EMFObservables.observeValue("
-            + fieldName
-            + ", "
-            + property.reference
-            + ");";
-      }
-    }
-    Assert.fail("Undefine property: " + propertyName);
-    return null;
-  }
+	@Override
+	public String createSourceCode(String fieldName, String propertyName) {
+		for (PropertyInfo property : m_properties) {
+			if (propertyName.equals(property.name)) {
+				return "\t\tIObservableValue "
+						+ propertyName
+						+ "ObserveValue = EMFObservables.observeValue("
+						+ fieldName
+						+ ", "
+						+ property.reference
+						+ ");";
+			}
+		}
+		Assert.fail("Undefine property: " + propertyName);
+		return null;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/CreatorManager.java b/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/CreatorManager.java
index cac654a14..bb9d9e1d2 100644
--- a/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/CreatorManager.java
+++ b/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/CreatorManager.java
@@ -28,271 +28,271 @@
  * @coverage bindings.rcp.emf.model
  */
 final class CreatorManager {
-  public static final Map<String, LocalModelCreator> METHOD_CREATORS = Maps.newHashMap();
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Factories
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final ILocalModelCreator VALUE_PROPERTY_CREATOR = new ILocalModelCreator() {
-    @Override
-    public AstObjectInfo create(EmfObserveTypeContainer container,
-        AstEditor editor,
-        Expression[] arguments,
-        IModelResolver resolver,
-        ModelCreator<EmfObserveTypeContainer> modelCreator) throws Exception {
-      return container.createValueProperty(editor, arguments, modelCreator.startIndex0);
-    }
-  };
-  private static final ILocalModelCreator EDIT_VALUE_PROPERTY_CREATOR = new ILocalModelCreator() {
-    @Override
-    public AstObjectInfo create(EmfObserveTypeContainer container,
-        AstEditor editor,
-        Expression[] arguments,
-        IModelResolver resolver,
-        ModelCreator<EmfObserveTypeContainer> modelCreator) throws Exception {
-      return container.createValuePropertyEdit(editor, arguments, modelCreator.startIndex0);
-    }
-  };
-  private static final ILocalModelCreator VALUE_PATH_PROPERTY_CREATOR = new ILocalModelCreator() {
-    @Override
-    public AstObjectInfo create(EmfObserveTypeContainer container,
-        AstEditor editor,
-        Expression[] arguments,
-        IModelResolver resolver,
-        ModelCreator<EmfObserveTypeContainer> modelCreator) throws Exception {
-      return container.createValuePathProperty(editor, arguments, modelCreator.startIndex0);
-    }
-  };
-  private static final ILocalModelCreator EDIT_PATH_VALUE_PROPERTY_CREATOR =
-      new ILocalModelCreator() {
-        @Override
-        public AstObjectInfo create(EmfObserveTypeContainer container,
-            AstEditor editor,
-            Expression[] arguments,
-            IModelResolver resolver,
-            ModelCreator<EmfObserveTypeContainer> modelCreator) throws Exception {
-          return container.createValuePathPropertyEdit(editor, arguments, modelCreator.startIndex0);
-        }
-      };
-  private static final ILocalModelCreator VALUE_CREATOR = new ILocalModelCreator() {
-    @Override
-    public AstObjectInfo create(EmfObserveTypeContainer container,
-        AstEditor editor,
-        Expression[] arguments,
-        IModelResolver resolver,
-        ModelCreator<EmfObserveTypeContainer> modelCreator) throws Exception {
-      return container.createValue(editor, arguments, modelCreator.startIndex0);
-    }
-  };
-  private static final ILocalModelCreator EDIT_VALUE_CREATOR = new ILocalModelCreator() {
-    @Override
-    public AstObjectInfo create(EmfObserveTypeContainer container,
-        AstEditor editor,
-        Expression[] arguments,
-        IModelResolver resolver,
-        ModelCreator<EmfObserveTypeContainer> modelCreator) throws Exception {
-      return container.createValueEdit(editor, arguments, modelCreator.startIndex0);
-    }
-  };
-  private static final ILocalModelCreator LIST_CREATOR = new ILocalModelCreator() {
-    @Override
-    public AstObjectInfo create(EmfObserveTypeContainer container,
-        AstEditor editor,
-        Expression[] arguments,
-        IModelResolver resolver,
-        ModelCreator<EmfObserveTypeContainer> modelCreator) throws Exception {
-      return container.createList(editor, arguments, modelCreator.startIndex0);
-    }
-  };
-  private static final ILocalModelCreator EDIT_LIST_CREATOR = new ILocalModelCreator() {
-    @Override
-    public AstObjectInfo create(EmfObserveTypeContainer container,
-        AstEditor editor,
-        Expression[] arguments,
-        IModelResolver resolver,
-        ModelCreator<EmfObserveTypeContainer> modelCreator) throws Exception {
-      return container.createListEdit(editor, arguments, modelCreator.startIndex0);
-    }
-  };
-  private static final ILocalModelCreator LIST_PROPERTY_CREATOR = new ILocalModelCreator() {
-    @Override
-    public AstObjectInfo create(EmfObserveTypeContainer container,
-        AstEditor editor,
-        Expression[] arguments,
-        IModelResolver resolver,
-        ModelCreator<EmfObserveTypeContainer> modelCreator) throws Exception {
-      return container.createListProperty(editor, arguments, modelCreator.startIndex0);
-    }
-  };
-  private static final ILocalModelCreator EDIT_LIST_PROPERTY_CREATOR = new ILocalModelCreator() {
-    @Override
-    public AstObjectInfo create(EmfObserveTypeContainer container,
-        AstEditor editor,
-        Expression[] arguments,
-        IModelResolver resolver,
-        ModelCreator<EmfObserveTypeContainer> modelCreator) throws Exception {
-      return container.createListPropertyEdit(editor, arguments, modelCreator.startIndex0);
-    }
-  };
-  private static final ILocalModelCreator LIST_PATH_PROPERTY_CREATOR = new ILocalModelCreator() {
-    @Override
-    public AstObjectInfo create(EmfObserveTypeContainer container,
-        AstEditor editor,
-        Expression[] arguments,
-        IModelResolver resolver,
-        ModelCreator<EmfObserveTypeContainer> modelCreator) throws Exception {
-      return container.createListPathProperty(editor, arguments, modelCreator.startIndex0);
-    }
-  };
-  private static final ILocalModelCreator EDIT_LIST_PATH_PROPERTY_CREATOR =
-      new ILocalModelCreator() {
-        @Override
-        public AstObjectInfo create(EmfObserveTypeContainer container,
-            AstEditor editor,
-            Expression[] arguments,
-            IModelResolver resolver,
-            ModelCreator<EmfObserveTypeContainer> modelCreator) throws Exception {
-          return container.createListPathPropertyEdit(editor, arguments, modelCreator.startIndex0);
-        }
-      };
-  private static final ILocalModelCreator DETAIL_VALUE_CREATOR = new ILocalModelCreator() {
-    @Override
-    public AstObjectInfo create(EmfObserveTypeContainer container,
-        AstEditor editor,
-        Expression[] arguments,
-        IModelResolver resolver,
-        ModelCreator<EmfObserveTypeContainer> modelCreator) throws Exception {
-      return container.createDetailValue(editor, arguments, modelCreator.startIndex0, resolver);
-    }
-  };
-  private static final ILocalModelCreator EDIT_DETAIL_VALUE_CREATOR = new ILocalModelCreator() {
-    @Override
-    public AstObjectInfo create(EmfObserveTypeContainer container,
-        AstEditor editor,
-        Expression[] arguments,
-        IModelResolver resolver,
-        ModelCreator<EmfObserveTypeContainer> modelCreator) throws Exception {
-      return container.createDetailValueEdit(editor, arguments, modelCreator.startIndex0, resolver);
-    }
-  };
-  private static final ILocalModelCreator DETAIL_LIST_CREATOR = new ILocalModelCreator() {
-    @Override
-    public AstObjectInfo create(EmfObserveTypeContainer container,
-        AstEditor editor,
-        Expression[] arguments,
-        IModelResolver resolver,
-        ModelCreator<EmfObserveTypeContainer> modelCreator) throws Exception {
-      return container.createDetailList(editor, arguments, modelCreator.startIndex0, resolver);
-    }
-  };
-  private static final ILocalModelCreator EDIT_DETAIL_LIST_CREATOR = new ILocalModelCreator() {
-    @Override
-    public AstObjectInfo create(EmfObserveTypeContainer container,
-        AstEditor editor,
-        Expression[] arguments,
-        IModelResolver resolver,
-        ModelCreator<EmfObserveTypeContainer> modelCreator) throws Exception {
-      return container.createDetailListEdit(editor, arguments, modelCreator.startIndex0, resolver);
-    }
-  };
-  private static final ILocalModelCreator MAPS_CREATOR = new ILocalModelCreator() {
-    @Override
-    public AstObjectInfo create(EmfObserveTypeContainer container,
-        AstEditor editor,
-        Expression[] arguments,
-        IModelResolver resolver,
-        ModelCreator<EmfObserveTypeContainer> modelCreator) throws Exception {
-      return container.createMaps(editor, arguments, modelCreator.startIndex0, resolver);
-    }
-  };
-  private static final ILocalModelCreator EDIT_MAPS_CREATOR = new ILocalModelCreator() {
-    @Override
-    public AstObjectInfo create(EmfObserveTypeContainer container,
-        AstEditor editor,
-        Expression[] arguments,
-        IModelResolver resolver,
-        ModelCreator<EmfObserveTypeContainer> modelCreator) throws Exception {
-      return container.createMapsEdit(editor, arguments, modelCreator.startIndex0, resolver);
-    }
-  };
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Creators
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  static {
-    METHOD_CREATORS.put(
-        "org.eclipse.emf.databinding.EMFObservables.observeValue(org.eclipse.emf.ecore.EObject,org.eclipse.emf.ecore.EStructuralFeature)",
-        new LocalModelCreator(0, VALUE_CREATOR));
-    METHOD_CREATORS.put(
-        "org.eclipse.emf.databinding.EMFObservables.observeValue(org.eclipse.core.databinding.observable.Realm,org.eclipse.emf.ecore.EObject,org.eclipse.emf.ecore.EStructuralFeature)",
-        new LocalModelCreator(1, VALUE_CREATOR));
-    METHOD_CREATORS.put(
-        "org.eclipse.emf.databinding.edit.EMFEditObservables.observeValue(org.eclipse.emf.edit.domain.EditingDomain,org.eclipse.emf.ecore.EObject,org.eclipse.emf.ecore.EStructuralFeature)",
-        new LocalModelCreator(0, EDIT_VALUE_CREATOR));
-    METHOD_CREATORS.put(
-        "org.eclipse.emf.databinding.edit.EMFEditObservables.observeValue(org.eclipse.core.databinding.observable.Realm,org.eclipse.emf.edit.domain.EditingDomain,org.eclipse.emf.ecore.EObject,org.eclipse.emf.ecore.EStructuralFeature)",
-        new LocalModelCreator(1, EDIT_VALUE_CREATOR));
-    //
-    METHOD_CREATORS.put(
-        "org.eclipse.emf.databinding.EMFProperties.value(org.eclipse.emf.ecore.EStructuralFeature)",
-        new LocalModelCreator(0, VALUE_PROPERTY_CREATOR));
-    METHOD_CREATORS.put(
-        "org.eclipse.emf.databinding.EMFProperties.value(org.eclipse.emf.databinding.FeaturePath)",
-        new LocalModelCreator(0, VALUE_PATH_PROPERTY_CREATOR));
-    METHOD_CREATORS.put(
-        "org.eclipse.emf.databinding.edit.EMFEditProperties.value(org.eclipse.emf.edit.domain.EditingDomain,org.eclipse.emf.ecore.EStructuralFeature)",
-        new LocalModelCreator(0, EDIT_VALUE_PROPERTY_CREATOR));
-    METHOD_CREATORS.put(
-        "org.eclipse.emf.databinding.edit.EMFEditProperties.value(org.eclipse.emf.edit.domain.EditingDomain,org.eclipse.emf.databinding.FeaturePath)",
-        new LocalModelCreator(0, EDIT_PATH_VALUE_PROPERTY_CREATOR));
-    //
-    METHOD_CREATORS.put(
-        "org.eclipse.emf.databinding.EMFObservables.observeList(org.eclipse.emf.ecore.EObject,org.eclipse.emf.ecore.EStructuralFeature)",
-        new LocalModelCreator(0, LIST_CREATOR));
-    METHOD_CREATORS.put(
-        "org.eclipse.emf.databinding.EMFObservables.observeList(org.eclipse.core.databinding.observable.Realm,org.eclipse.emf.ecore.EObject,org.eclipse.emf.ecore.EStructuralFeature)",
-        new LocalModelCreator(1, LIST_CREATOR));
-    METHOD_CREATORS.put(
-        "org.eclipse.emf.databinding.edit.EMFEditObservables.observeList(org.eclipse.emf.edit.domain.EditingDomain,org.eclipse.emf.ecore.EObject,org.eclipse.emf.ecore.EStructuralFeature)",
-        new LocalModelCreator(0, EDIT_LIST_CREATOR));
-    METHOD_CREATORS.put(
-        "org.eclipse.emf.databinding.edit.EMFEditObservables.observeList(org.eclipse.core.databinding.observable.Realm,org.eclipse.emf.edit.domain.EditingDomain,org.eclipse.emf.ecore.EObject,org.eclipse.emf.ecore.EStructuralFeature)",
-        new LocalModelCreator(1, EDIT_LIST_CREATOR));
-    //
-    METHOD_CREATORS.put(
-        "org.eclipse.emf.databinding.EMFProperties.list(org.eclipse.emf.ecore.EStructuralFeature)",
-        new LocalModelCreator(0, LIST_PROPERTY_CREATOR));
-    METHOD_CREATORS.put(
-        "org.eclipse.emf.databinding.EMFProperties.list(org.eclipse.emf.databinding.FeaturePath)",
-        new LocalModelCreator(0, LIST_PATH_PROPERTY_CREATOR));
-    METHOD_CREATORS.put(
-        "org.eclipse.emf.databinding.edit.EMFEditProperties.list(org.eclipse.emf.edit.domain.EditingDomain,org.eclipse.emf.ecore.EStructuralFeature)",
-        new LocalModelCreator(0, EDIT_LIST_PROPERTY_CREATOR));
-    METHOD_CREATORS.put(
-        "org.eclipse.emf.databinding.edit.EMFEditProperties.list(org.eclipse.emf.edit.domain.EditingDomain,org.eclipse.emf.databinding.FeaturePath)",
-        new LocalModelCreator(0, EDIT_LIST_PATH_PROPERTY_CREATOR));
-    //
-    METHOD_CREATORS.put(
-        "org.eclipse.emf.databinding.EMFObservables.observeDetailValue(org.eclipse.core.databinding.observable.Realm,org.eclipse.core.databinding.observable.value.IObservableValue,org.eclipse.emf.ecore.EStructuralFeature)",
-        new LocalModelCreator(1, DETAIL_VALUE_CREATOR));
-    METHOD_CREATORS.put(
-        "org.eclipse.emf.databinding.edit.EMFEditObservables.observeDetailValue(org.eclipse.core.databinding.observable.Realm,org.eclipse.emf.edit.domain.EditingDomain,org.eclipse.core.databinding.observable.value.IObservableValue,org.eclipse.emf.ecore.EStructuralFeature)",
-        new LocalModelCreator(1, EDIT_DETAIL_VALUE_CREATOR));
-    //
-    METHOD_CREATORS.put(
-        "org.eclipse.emf.databinding.EMFObservables.observeDetailList(org.eclipse.core.databinding.observable.Realm,org.eclipse.core.databinding.observable.value.IObservableValue,org.eclipse.emf.ecore.EStructuralFeature)",
-        new LocalModelCreator(1, DETAIL_LIST_CREATOR));
-    METHOD_CREATORS.put(
-        "org.eclipse.emf.databinding.edit.EMFEditObservables.observeDetailList(org.eclipse.core.databinding.observable.Realm,org.eclipse.emf.edit.domain.EditingDomain,org.eclipse.core.databinding.observable.value.IObservableValue,org.eclipse.emf.ecore.EStructuralFeature)",
-        new LocalModelCreator(1, EDIT_DETAIL_LIST_CREATOR));
-    //
-    METHOD_CREATORS.put(
-        "org.eclipse.emf.databinding.EMFObservables.observeMaps(org.eclipse.core.databinding.observable.set.IObservableSet,org.eclipse.emf.ecore.EStructuralFeature[])",
-        new LocalModelCreator(0, MAPS_CREATOR));
-    METHOD_CREATORS.put(
-        "org.eclipse.emf.databinding.edit.EMFEditObservables.observeMaps(org.eclipse.emf.edit.domain.EditingDomain,org.eclipse.core.databinding.observable.set.IObservableSet,org.eclipse.emf.ecore.EStructuralFeature[])",
-        new LocalModelCreator(0, EDIT_MAPS_CREATOR));
-  }
+	public static final Map<String, LocalModelCreator> METHOD_CREATORS = Maps.newHashMap();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Factories
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final ILocalModelCreator VALUE_PROPERTY_CREATOR = new ILocalModelCreator() {
+		@Override
+		public AstObjectInfo create(EmfObserveTypeContainer container,
+				AstEditor editor,
+				Expression[] arguments,
+				IModelResolver resolver,
+				ModelCreator<EmfObserveTypeContainer> modelCreator) throws Exception {
+			return container.createValueProperty(editor, arguments, modelCreator.startIndex0);
+		}
+	};
+	private static final ILocalModelCreator EDIT_VALUE_PROPERTY_CREATOR = new ILocalModelCreator() {
+		@Override
+		public AstObjectInfo create(EmfObserveTypeContainer container,
+				AstEditor editor,
+				Expression[] arguments,
+				IModelResolver resolver,
+				ModelCreator<EmfObserveTypeContainer> modelCreator) throws Exception {
+			return container.createValuePropertyEdit(editor, arguments, modelCreator.startIndex0);
+		}
+	};
+	private static final ILocalModelCreator VALUE_PATH_PROPERTY_CREATOR = new ILocalModelCreator() {
+		@Override
+		public AstObjectInfo create(EmfObserveTypeContainer container,
+				AstEditor editor,
+				Expression[] arguments,
+				IModelResolver resolver,
+				ModelCreator<EmfObserveTypeContainer> modelCreator) throws Exception {
+			return container.createValuePathProperty(editor, arguments, modelCreator.startIndex0);
+		}
+	};
+	private static final ILocalModelCreator EDIT_PATH_VALUE_PROPERTY_CREATOR =
+			new ILocalModelCreator() {
+		@Override
+		public AstObjectInfo create(EmfObserveTypeContainer container,
+				AstEditor editor,
+				Expression[] arguments,
+				IModelResolver resolver,
+				ModelCreator<EmfObserveTypeContainer> modelCreator) throws Exception {
+			return container.createValuePathPropertyEdit(editor, arguments, modelCreator.startIndex0);
+		}
+	};
+	private static final ILocalModelCreator VALUE_CREATOR = new ILocalModelCreator() {
+		@Override
+		public AstObjectInfo create(EmfObserveTypeContainer container,
+				AstEditor editor,
+				Expression[] arguments,
+				IModelResolver resolver,
+				ModelCreator<EmfObserveTypeContainer> modelCreator) throws Exception {
+			return container.createValue(editor, arguments, modelCreator.startIndex0);
+		}
+	};
+	private static final ILocalModelCreator EDIT_VALUE_CREATOR = new ILocalModelCreator() {
+		@Override
+		public AstObjectInfo create(EmfObserveTypeContainer container,
+				AstEditor editor,
+				Expression[] arguments,
+				IModelResolver resolver,
+				ModelCreator<EmfObserveTypeContainer> modelCreator) throws Exception {
+			return container.createValueEdit(editor, arguments, modelCreator.startIndex0);
+		}
+	};
+	private static final ILocalModelCreator LIST_CREATOR = new ILocalModelCreator() {
+		@Override
+		public AstObjectInfo create(EmfObserveTypeContainer container,
+				AstEditor editor,
+				Expression[] arguments,
+				IModelResolver resolver,
+				ModelCreator<EmfObserveTypeContainer> modelCreator) throws Exception {
+			return container.createList(editor, arguments, modelCreator.startIndex0);
+		}
+	};
+	private static final ILocalModelCreator EDIT_LIST_CREATOR = new ILocalModelCreator() {
+		@Override
+		public AstObjectInfo create(EmfObserveTypeContainer container,
+				AstEditor editor,
+				Expression[] arguments,
+				IModelResolver resolver,
+				ModelCreator<EmfObserveTypeContainer> modelCreator) throws Exception {
+			return container.createListEdit(editor, arguments, modelCreator.startIndex0);
+		}
+	};
+	private static final ILocalModelCreator LIST_PROPERTY_CREATOR = new ILocalModelCreator() {
+		@Override
+		public AstObjectInfo create(EmfObserveTypeContainer container,
+				AstEditor editor,
+				Expression[] arguments,
+				IModelResolver resolver,
+				ModelCreator<EmfObserveTypeContainer> modelCreator) throws Exception {
+			return container.createListProperty(editor, arguments, modelCreator.startIndex0);
+		}
+	};
+	private static final ILocalModelCreator EDIT_LIST_PROPERTY_CREATOR = new ILocalModelCreator() {
+		@Override
+		public AstObjectInfo create(EmfObserveTypeContainer container,
+				AstEditor editor,
+				Expression[] arguments,
+				IModelResolver resolver,
+				ModelCreator<EmfObserveTypeContainer> modelCreator) throws Exception {
+			return container.createListPropertyEdit(editor, arguments, modelCreator.startIndex0);
+		}
+	};
+	private static final ILocalModelCreator LIST_PATH_PROPERTY_CREATOR = new ILocalModelCreator() {
+		@Override
+		public AstObjectInfo create(EmfObserveTypeContainer container,
+				AstEditor editor,
+				Expression[] arguments,
+				IModelResolver resolver,
+				ModelCreator<EmfObserveTypeContainer> modelCreator) throws Exception {
+			return container.createListPathProperty(editor, arguments, modelCreator.startIndex0);
+		}
+	};
+	private static final ILocalModelCreator EDIT_LIST_PATH_PROPERTY_CREATOR =
+			new ILocalModelCreator() {
+		@Override
+		public AstObjectInfo create(EmfObserveTypeContainer container,
+				AstEditor editor,
+				Expression[] arguments,
+				IModelResolver resolver,
+				ModelCreator<EmfObserveTypeContainer> modelCreator) throws Exception {
+			return container.createListPathPropertyEdit(editor, arguments, modelCreator.startIndex0);
+		}
+	};
+	private static final ILocalModelCreator DETAIL_VALUE_CREATOR = new ILocalModelCreator() {
+		@Override
+		public AstObjectInfo create(EmfObserveTypeContainer container,
+				AstEditor editor,
+				Expression[] arguments,
+				IModelResolver resolver,
+				ModelCreator<EmfObserveTypeContainer> modelCreator) throws Exception {
+			return container.createDetailValue(editor, arguments, modelCreator.startIndex0, resolver);
+		}
+	};
+	private static final ILocalModelCreator EDIT_DETAIL_VALUE_CREATOR = new ILocalModelCreator() {
+		@Override
+		public AstObjectInfo create(EmfObserveTypeContainer container,
+				AstEditor editor,
+				Expression[] arguments,
+				IModelResolver resolver,
+				ModelCreator<EmfObserveTypeContainer> modelCreator) throws Exception {
+			return container.createDetailValueEdit(editor, arguments, modelCreator.startIndex0, resolver);
+		}
+	};
+	private static final ILocalModelCreator DETAIL_LIST_CREATOR = new ILocalModelCreator() {
+		@Override
+		public AstObjectInfo create(EmfObserveTypeContainer container,
+				AstEditor editor,
+				Expression[] arguments,
+				IModelResolver resolver,
+				ModelCreator<EmfObserveTypeContainer> modelCreator) throws Exception {
+			return container.createDetailList(editor, arguments, modelCreator.startIndex0, resolver);
+		}
+	};
+	private static final ILocalModelCreator EDIT_DETAIL_LIST_CREATOR = new ILocalModelCreator() {
+		@Override
+		public AstObjectInfo create(EmfObserveTypeContainer container,
+				AstEditor editor,
+				Expression[] arguments,
+				IModelResolver resolver,
+				ModelCreator<EmfObserveTypeContainer> modelCreator) throws Exception {
+			return container.createDetailListEdit(editor, arguments, modelCreator.startIndex0, resolver);
+		}
+	};
+	private static final ILocalModelCreator MAPS_CREATOR = new ILocalModelCreator() {
+		@Override
+		public AstObjectInfo create(EmfObserveTypeContainer container,
+				AstEditor editor,
+				Expression[] arguments,
+				IModelResolver resolver,
+				ModelCreator<EmfObserveTypeContainer> modelCreator) throws Exception {
+			return container.createMaps(editor, arguments, modelCreator.startIndex0, resolver);
+		}
+	};
+	private static final ILocalModelCreator EDIT_MAPS_CREATOR = new ILocalModelCreator() {
+		@Override
+		public AstObjectInfo create(EmfObserveTypeContainer container,
+				AstEditor editor,
+				Expression[] arguments,
+				IModelResolver resolver,
+				ModelCreator<EmfObserveTypeContainer> modelCreator) throws Exception {
+			return container.createMapsEdit(editor, arguments, modelCreator.startIndex0, resolver);
+		}
+	};
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Creators
+	//
+	////////////////////////////////////////////////////////////////////////////
+	static {
+		METHOD_CREATORS.put(
+				"org.eclipse.emf.databinding.EMFObservables.observeValue(org.eclipse.emf.ecore.EObject,org.eclipse.emf.ecore.EStructuralFeature)",
+				new LocalModelCreator(0, VALUE_CREATOR));
+		METHOD_CREATORS.put(
+				"org.eclipse.emf.databinding.EMFObservables.observeValue(org.eclipse.core.databinding.observable.Realm,org.eclipse.emf.ecore.EObject,org.eclipse.emf.ecore.EStructuralFeature)",
+				new LocalModelCreator(1, VALUE_CREATOR));
+		METHOD_CREATORS.put(
+				"org.eclipse.emf.databinding.edit.EMFEditObservables.observeValue(org.eclipse.emf.edit.domain.EditingDomain,org.eclipse.emf.ecore.EObject,org.eclipse.emf.ecore.EStructuralFeature)",
+				new LocalModelCreator(0, EDIT_VALUE_CREATOR));
+		METHOD_CREATORS.put(
+				"org.eclipse.emf.databinding.edit.EMFEditObservables.observeValue(org.eclipse.core.databinding.observable.Realm,org.eclipse.emf.edit.domain.EditingDomain,org.eclipse.emf.ecore.EObject,org.eclipse.emf.ecore.EStructuralFeature)",
+				new LocalModelCreator(1, EDIT_VALUE_CREATOR));
+		//
+		METHOD_CREATORS.put(
+				"org.eclipse.emf.databinding.EMFProperties.value(org.eclipse.emf.ecore.EStructuralFeature)",
+				new LocalModelCreator(0, VALUE_PROPERTY_CREATOR));
+		METHOD_CREATORS.put(
+				"org.eclipse.emf.databinding.EMFProperties.value(org.eclipse.emf.databinding.FeaturePath)",
+				new LocalModelCreator(0, VALUE_PATH_PROPERTY_CREATOR));
+		METHOD_CREATORS.put(
+				"org.eclipse.emf.databinding.edit.EMFEditProperties.value(org.eclipse.emf.edit.domain.EditingDomain,org.eclipse.emf.ecore.EStructuralFeature)",
+				new LocalModelCreator(0, EDIT_VALUE_PROPERTY_CREATOR));
+		METHOD_CREATORS.put(
+				"org.eclipse.emf.databinding.edit.EMFEditProperties.value(org.eclipse.emf.edit.domain.EditingDomain,org.eclipse.emf.databinding.FeaturePath)",
+				new LocalModelCreator(0, EDIT_PATH_VALUE_PROPERTY_CREATOR));
+		//
+		METHOD_CREATORS.put(
+				"org.eclipse.emf.databinding.EMFObservables.observeList(org.eclipse.emf.ecore.EObject,org.eclipse.emf.ecore.EStructuralFeature)",
+				new LocalModelCreator(0, LIST_CREATOR));
+		METHOD_CREATORS.put(
+				"org.eclipse.emf.databinding.EMFObservables.observeList(org.eclipse.core.databinding.observable.Realm,org.eclipse.emf.ecore.EObject,org.eclipse.emf.ecore.EStructuralFeature)",
+				new LocalModelCreator(1, LIST_CREATOR));
+		METHOD_CREATORS.put(
+				"org.eclipse.emf.databinding.edit.EMFEditObservables.observeList(org.eclipse.emf.edit.domain.EditingDomain,org.eclipse.emf.ecore.EObject,org.eclipse.emf.ecore.EStructuralFeature)",
+				new LocalModelCreator(0, EDIT_LIST_CREATOR));
+		METHOD_CREATORS.put(
+				"org.eclipse.emf.databinding.edit.EMFEditObservables.observeList(org.eclipse.core.databinding.observable.Realm,org.eclipse.emf.edit.domain.EditingDomain,org.eclipse.emf.ecore.EObject,org.eclipse.emf.ecore.EStructuralFeature)",
+				new LocalModelCreator(1, EDIT_LIST_CREATOR));
+		//
+		METHOD_CREATORS.put(
+				"org.eclipse.emf.databinding.EMFProperties.list(org.eclipse.emf.ecore.EStructuralFeature)",
+				new LocalModelCreator(0, LIST_PROPERTY_CREATOR));
+		METHOD_CREATORS.put(
+				"org.eclipse.emf.databinding.EMFProperties.list(org.eclipse.emf.databinding.FeaturePath)",
+				new LocalModelCreator(0, LIST_PATH_PROPERTY_CREATOR));
+		METHOD_CREATORS.put(
+				"org.eclipse.emf.databinding.edit.EMFEditProperties.list(org.eclipse.emf.edit.domain.EditingDomain,org.eclipse.emf.ecore.EStructuralFeature)",
+				new LocalModelCreator(0, EDIT_LIST_PROPERTY_CREATOR));
+		METHOD_CREATORS.put(
+				"org.eclipse.emf.databinding.edit.EMFEditProperties.list(org.eclipse.emf.edit.domain.EditingDomain,org.eclipse.emf.databinding.FeaturePath)",
+				new LocalModelCreator(0, EDIT_LIST_PATH_PROPERTY_CREATOR));
+		//
+		METHOD_CREATORS.put(
+				"org.eclipse.emf.databinding.EMFObservables.observeDetailValue(org.eclipse.core.databinding.observable.Realm,org.eclipse.core.databinding.observable.value.IObservableValue,org.eclipse.emf.ecore.EStructuralFeature)",
+				new LocalModelCreator(1, DETAIL_VALUE_CREATOR));
+		METHOD_CREATORS.put(
+				"org.eclipse.emf.databinding.edit.EMFEditObservables.observeDetailValue(org.eclipse.core.databinding.observable.Realm,org.eclipse.emf.edit.domain.EditingDomain,org.eclipse.core.databinding.observable.value.IObservableValue,org.eclipse.emf.ecore.EStructuralFeature)",
+				new LocalModelCreator(1, EDIT_DETAIL_VALUE_CREATOR));
+		//
+		METHOD_CREATORS.put(
+				"org.eclipse.emf.databinding.EMFObservables.observeDetailList(org.eclipse.core.databinding.observable.Realm,org.eclipse.core.databinding.observable.value.IObservableValue,org.eclipse.emf.ecore.EStructuralFeature)",
+				new LocalModelCreator(1, DETAIL_LIST_CREATOR));
+		METHOD_CREATORS.put(
+				"org.eclipse.emf.databinding.edit.EMFEditObservables.observeDetailList(org.eclipse.core.databinding.observable.Realm,org.eclipse.emf.edit.domain.EditingDomain,org.eclipse.core.databinding.observable.value.IObservableValue,org.eclipse.emf.ecore.EStructuralFeature)",
+				new LocalModelCreator(1, EDIT_DETAIL_LIST_CREATOR));
+		//
+		METHOD_CREATORS.put(
+				"org.eclipse.emf.databinding.EMFObservables.observeMaps(org.eclipse.core.databinding.observable.set.IObservableSet,org.eclipse.emf.ecore.EStructuralFeature[])",
+				new LocalModelCreator(0, MAPS_CREATOR));
+		METHOD_CREATORS.put(
+				"org.eclipse.emf.databinding.edit.EMFEditObservables.observeMaps(org.eclipse.emf.edit.domain.EditingDomain,org.eclipse.core.databinding.observable.set.IObservableSet,org.eclipse.emf.ecore.EStructuralFeature[])",
+				new LocalModelCreator(0, EDIT_MAPS_CREATOR));
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/EmfObserveTypeContainer.java b/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/EmfObserveTypeContainer.java
index 85f979718..acc0e4043 100644
--- a/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/EmfObserveTypeContainer.java
+++ b/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/EmfObserveTypeContainer.java
@@ -84,663 +84,663 @@
  * @coverage bindings.rcp.emf.model
  */
 public final class EmfObserveTypeContainer extends ObserveTypeContainer {
-  public static final ObserveType TYPE = new ObserveType("Eclipse Modeling Framework",
-      Activator.getImage("EMF_ObserveType2.png"));
-  private List<EObjectBindableInfo> m_observables = Collections.emptyList();
-  private JavaInfo m_javaInfoRoot;
-  private PropertiesSupport m_propertiesSupport;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public EmfObserveTypeContainer() {
-    super(TYPE, false, false);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Accept
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean accept(JavaInfo javaInfoRoot) {
-    try {
-      IJavaProject javaProject = javaInfoRoot.getEditor().getJavaProject();
-      return ProjectUtils.hasType(javaProject, "org.eclipse.emf.ecore.EObject");
-    } catch (Throwable e) {
-      return false;
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public PropertiesSupport getPropertiesSupport() {
-    return m_propertiesSupport;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IObserveTypeContainer
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public List<IObserveInfo> getObservables() {
-    return CoreUtils.cast(m_observables);
-  }
-
-  @Override
-  public void synchronizeObserves(JavaInfo root, final AstEditor editor, TypeDeclaration rootNode)
-      throws Exception {
-    IJavaProject javaProject = editor.getJavaProject();
-    ClassLoader classLoader = JavaInfoUtils.getClassLoader(m_javaInfoRoot);
-    List<VariableDeclarationFragment> fragments = CoreUtils.getFieldFragments(rootNode);
-    m_propertiesSupport = new PropertiesSupport(javaProject, classLoader, fragments);
-    //
-    for (Iterator<VariableDeclarationFragment> I = fragments.iterator(); I.hasNext();) {
-      try {
-        VariableDeclarationFragment fragment = I.next();
-        Type type = CoreUtils.getType(fragment, false);
-        Class<?> eObjectClass = loadClass(AstNodeUtils.getFullyQualifiedName(type, true));
-        //
-        if (!eObjectClass.isInterface()
-            || !m_propertiesSupport.getEObjectClass().isAssignableFrom(eObjectClass)
-            && !CoreUtils.isAssignableFrom(m_propertiesSupport.getIObservableValue(), eObjectClass)) {
-          I.remove();
-        }
-      } catch (ClassNotFoundException e) {
-        I.remove();
-      }
-    }
-    //
-    SynchronizeManager.synchronizeObjects(
-        m_observables,
-        fragments,
-        new ISynchronizeProcessor<VariableDeclarationFragment, EObjectBindableInfo>() {
-          @Override
-          public boolean handleObject(EObjectBindableInfo object) {
-            return true;
-          }
-
-          @Override
-          public VariableDeclarationFragment getKeyObject(EObjectBindableInfo eObject) {
-            return eObject.getFragment();
-          }
-
-          @Override
-          public boolean equals(VariableDeclarationFragment key0, VariableDeclarationFragment key1) {
-            return key0 == key1;
-          }
-
-          @Override
-          public EObjectBindableInfo findObject(Map<VariableDeclarationFragment, EObjectBindableInfo> keyObjectToObject,
-              VariableDeclarationFragment key) throws Exception {
-            return null;
-          }
-
-          @Override
-          public EObjectBindableInfo createObject(VariableDeclarationFragment fragment)
-              throws Exception {
-            try {
-              Type type = CoreUtils.getType(fragment, true);
-              // prepare bean class
-              Class<?> eObjectClass = loadClass(AstNodeUtils.getFullyQualifiedName(type, true));
-              return new EObjectBindableInfo(eObjectClass, fragment, m_propertiesSupport, null);
-            } catch (ClassNotFoundException e) {
-              AbstractParser.addError(
-                  editor,
-                  "ClassNotFoundException: " + fragment,
-                  new Throwable());
-              return null;
-            }
-          }
-
-          @Override
-          public void update(EObjectBindableInfo object) throws Exception {
-          }
-        });
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parse
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void createObservables(JavaInfo root,
-      IModelResolver resolver,
-      AstEditor editor,
-      TypeDeclaration rootNode) throws Exception {
-    m_javaInfoRoot = root;
-    m_observables = Lists.newArrayList();
-    //
-    IJavaProject javaProject = editor.getJavaProject();
-    ClassLoader classLoader = JavaInfoUtils.getClassLoader(m_javaInfoRoot);
-    List<VariableDeclarationFragment> fragments = CoreUtils.getFieldFragments(rootNode);
-    //
-    m_propertiesSupport = new PropertiesSupport(javaProject, classLoader, fragments);
-    //
-    for (VariableDeclarationFragment fragment : fragments) {
-      try {
-        // prepare type
-        Type type = CoreUtils.getType(fragment, true);
-        // prepare bean class
-        Class<?> eObjectClass = loadClass(AstNodeUtils.getFullyQualifiedName(type, true));
-        //
-        if (eObjectClass.isInterface()
-            && (m_propertiesSupport.getEObjectClass().isAssignableFrom(eObjectClass) || CoreUtils.isAssignableFrom(
-                m_propertiesSupport.getIObservableValue(),
-                eObjectClass))) {
-          m_observables.add(new EObjectBindableInfo(eObjectClass,
-              fragment,
-              m_propertiesSupport,
-              resolver));
-        }
-      } catch (ClassNotFoundException e) {
-        AbstractParser.addError(editor, "ClassNotFoundException: " + fragment, new Throwable());
-      } catch (Throwable e) {
-        throw ReflectionUtils.propagate(e);
-      }
-    }
-  }
-
-  @Override
-  public AstObjectInfo parseExpression(AstEditor editor,
-      String signature,
-      ClassInstanceCreation creation,
-      Expression[] arguments,
-      IModelResolver resolver,
-      IDatabindingsProvider provider) throws Exception {
-    ITypeBinding binding = AstNodeUtils.getTypeBinding(creation);
-    if (binding == null) {
-      return null;
-    }
-    //
-    // IObservableFactory
-    //
-    if (AstNodeUtils.isSuccessorOf(
-        binding,
-        "org.eclipse.core.databinding.observable.masterdetail.IObservableFactory")) {
-      String className = AstNodeUtils.getFullyQualifiedName(binding, false);
-      //
-      if (AstNodeUtils.isSuccessorOf(
-          binding,
-          "org.eclipse.wb.rcp.databinding.EMFBeansListObservableFactory")) {
-        return createObserveFactory(editor, signature, arguments, className, false);
-      }
-      if (AstNodeUtils.isSuccessorOf(
-          binding,
-          "org.eclipse.wb.rcp.databinding.EMFEditBeansListObservableFactory")) {
-        return createObserveFactory(editor, signature, arguments, className, true);
-      }
-    }
-    //
-    // TreeStructureAdvisor
-    //
-    if (AstNodeUtils.isSuccessorOf(binding, "org.eclipse.wb.rcp.databinding.EMFTreeBeanAdvisor")) {
-      Assert.isTrue(signature.endsWith("<init>(org.eclipse.emf.ecore.EStructuralFeature,org.eclipse.emf.ecore.EStructuralFeature,org.eclipse.emf.ecore.EStructuralFeature)"));
-      // create advisor
-      EmfTreeBeanAdvisorInfo advisorInfo = new EmfTreeBeanAdvisorInfo(m_propertiesSupport);
-      // prepare parent property
-      advisorInfo.setEMFParentProperty(getArgumentReference(editor, arguments[0]));
-      // prepare children property
-      advisorInfo.setEMFChildrenProperty(getArgumentReference(editor, arguments[1]));
-      // prepare hasChildren property
-      advisorInfo.setEMFHasChildrenProperty(getArgumentReference(editor, arguments[2]));
-      //
-      return advisorInfo;
-    }
-    //
-    // LabelProvider
-    //
-    if (AstNodeUtils.isSuccessorOf(
-        binding,
-        "org.eclipse.wb.rcp.databinding.EMFTreeObservableLabelProvider")) {
-      Assert.isTrue(signature.endsWith("<init>(org.eclipse.core.databinding.observable.set.IObservableSet,org.eclipse.emf.ecore.EStructuralFeature,org.eclipse.emf.ecore.EStructuralFeature)"));
-      // prepare allElements observable
-      KnownElementsObservableInfo allElementsObservable =
-          (KnownElementsObservableInfo) resolver.getModel(arguments[0]);
-      if (allElementsObservable == null) {
-        AbstractParser.addError(
-            editor,
-            MessageFormat.format(Messages.EmfObserveTypeContainer_argumentNotFound, arguments[0]),
-            new Throwable());
-        return null;
-      }
-      // create label provider
-      EmfTreeObservableLabelProviderInfo labelProvider =
-          new EmfTreeObservableLabelProviderInfo(AstNodeUtils.getFullyQualifiedName(binding, false),
-              allElementsObservable,
-              m_propertiesSupport);
-      // prepare text property
-      labelProvider.setEMFTextProperty(getArgumentReference(editor, arguments[1]));
-      // prepare image property
-      labelProvider.setEMFImageProperty(getArgumentReference(editor, arguments[2]));
-      //
-      return labelProvider;
-    }
-    return null;
-  }
-
-  private static String getArgumentReference(AstEditor editor, Expression argument) {
-    if (argument instanceof NullLiteral) {
-      return null;
-    }
-    return CoreUtils.getNodeReference(argument);
-  }
-
-  EmfBeansObservableFactoryInfo createObserveFactory(AstEditor editor,
-      String signature,
-      Expression[] arguments,
-      String className,
-      boolean editingDomain) throws Exception {
-    if (editingDomain) {
-      m_propertiesSupport.checkEditingDomain(arguments[1]);
-      Assert.isTrue(signature.endsWith("<init>(java.lang.Class,org.eclipse.emf.edit.domain.EditingDomain,org.eclipse.emf.ecore.EStructuralFeature)"));
-    } else {
-      Assert.isTrue(signature.endsWith("<init>(java.lang.Class,org.eclipse.emf.ecore.EStructuralFeature)"));
-    }
-    // create factory
-    EmfBeansObservableFactoryInfo observableFactory =
-        EmfBeansObservableFactoryInfo.create(className, m_propertiesSupport);
-    // prepare element type
-    observableFactory.setElementType(CoreUtils.evaluate(Class.class, editor, arguments[0]));
-    // prepare property
-    observableFactory.setEMFPropertyReference(CoreUtils.getNodeReference(arguments[editingDomain
-        ? 2
-        : 1]));
-    //
-    return observableFactory;
-  }
-
-  @Override
-  public AstObjectInfo parseExpression(AstEditor editor,
-      String signature,
-      MethodInvocation invocation,
-      Expression[] arguments,
-      IModelResolver resolver) throws Exception {
-    LocalModelCreator modelCreator = CreatorManager.METHOD_CREATORS.get(signature);
-    if (modelCreator != null) {
-      return modelCreator.create(this, editor, arguments, resolver);
-    }
-    return null;
-  }
-
-  AstObjectInfo createValueProperty(AstEditor editor, Expression[] arguments, int startIndex) {
-    EmfValuePropertyCodeSupport codeSupport = new EmfValuePropertyCodeSupport();
-    codeSupport.setParserPropertyReference(CoreUtils.getNodeReference(arguments[startIndex]));
-    return codeSupport;
-  }
-
-  AstObjectInfo createValuePropertyEdit(AstEditor editor, Expression[] arguments, int startIndex)
-      throws Exception {
-    m_propertiesSupport.checkEditingDomain(arguments[startIndex]);
-    return createValueProperty(editor, arguments, startIndex + 1);
-  }
-
-  private static String getPathPropertyReference(Expression expression) {
-    Assert.instanceOf(MethodInvocation.class, expression);
-    StringBuffer reference = new StringBuffer("org.eclipse.emf.databinding.FeaturePath.fromList(");
-    int index = 0;
-    for (Expression argument : DomGenerics.arguments(expression)) {
-      if (index > 0) {
-        reference.append(", ");
-      }
-      reference.append(CoreUtils.getNodeReference(argument));
-      index++;
-    }
-    Assert.isTrue(index > 0);
-    reference.append(")");
-    return reference.toString();
-  }
-
-  AstObjectInfo createValuePathProperty(AstEditor editor, Expression[] arguments, int startIndex) {
-    EmfValuePropertyCodeSupport codeSupport = new EmfValuePropertyCodeSupport();
-    codeSupport.setParserPropertyReference(getPathPropertyReference(arguments[startIndex]));
-    return codeSupport;
-  }
-
-  AstObjectInfo createValuePathPropertyEdit(AstEditor editor, Expression[] arguments, int startIndex)
-      throws Exception {
-    m_propertiesSupport.checkEditingDomain(arguments[startIndex]);
-    return createValuePathProperty(editor, arguments, startIndex + 1);
-  }
-
-  AstObjectInfo createListProperty(AstEditor editor, Expression[] arguments, int startIndex) {
-    EmfListPropertyCodeSupport codeSupport = new EmfListPropertyCodeSupport();
-    codeSupport.setParserPropertyReference(CoreUtils.getNodeReference(arguments[startIndex]));
-    return codeSupport;
-  }
-
-  AstObjectInfo createListPropertyEdit(AstEditor editor, Expression[] arguments, int startIndex)
-      throws Exception {
-    m_propertiesSupport.checkEditingDomain(arguments[startIndex]);
-    return createListProperty(editor, arguments, startIndex + 1);
-  }
-
-  AstObjectInfo createListPathProperty(AstEditor editor, Expression[] arguments, int startIndex) {
-    EmfListPropertyCodeSupport codeSupport = new EmfListPropertyCodeSupport();
-    codeSupport.setParserPropertyReference(getPathPropertyReference(arguments[startIndex]));
-    return codeSupport;
-  }
-
-  AstObjectInfo createListPathPropertyEdit(AstEditor editor, Expression[] arguments, int startIndex)
-      throws Exception {
-    m_propertiesSupport.checkEditingDomain(arguments[startIndex]);
-    return createListPathProperty(editor, arguments, startIndex + 1);
-  }
-
-  AstObjectInfo createValue(AstEditor editor, Expression[] arguments, int startIndex)
-      throws Exception {
-    // prepare object
-    EObjectBindableInfo eObject = getEObject(arguments[startIndex]);
-    if (eObject == null) {
-      AbstractParser.addError(editor, MessageFormat.format(
-          Messages.EmfObserveTypeContainer_argumentNotFound,
-          arguments[startIndex]), new Throwable());
-      return null;
-    }
-    // prepare property
-    EPropertyBindableInfo eProperty = getEProperty(eObject, arguments[startIndex + 1]);
-    // create observable
-    ObservableInfo observable = new ValueEmfObservableInfo(eObject, eProperty);
-    observable.setCodeSupport(new EmfObservableValueCodeSupport());
-    //
-    return observable;
-  }
-
-  AstObjectInfo createValueEdit(AstEditor editor, Expression[] arguments, int startIndex)
-      throws Exception {
-    m_propertiesSupport.checkEditingDomain(arguments[startIndex]);
-    return createValue(editor, arguments, startIndex + 1);
-  }
-
-  AstObjectInfo createList(AstEditor editor, Expression[] arguments, int startIndex)
-      throws Exception {
-    // prepare object
-    EObjectBindableInfo eObject = getEObject(arguments[startIndex]);
-    if (eObject == null) {
-      AbstractParser.addError(editor, MessageFormat.format(
-          Messages.EmfObserveTypeContainer_argumentNotFound,
-          arguments[startIndex]), new Throwable());
-      return null;
-    }
-    // prepare property
-    EPropertyBindableInfo eProperty = getEProperty(eObject, arguments[startIndex + 1]);
-    // create observable
-    ObservableInfo observable = new ListEmfObservableInfo(eObject, eProperty);
-    observable.setCodeSupport(new EmfObservableListCodeSupport());
-    //
-    return observable;
-  }
-
-  AstObjectInfo createListEdit(AstEditor editor, Expression[] arguments, int startIndex)
-      throws Exception {
-    m_propertiesSupport.checkEditingDomain(arguments[startIndex]);
-    return createList(editor, arguments, startIndex + 1);
-  }
-
-  public static ObservableInfo getMasterObservable(AstEditor editor,
-      IModelResolver resolver,
-      Expression expression) throws Exception {
-    // prepare master detail observable
-    ObservableInfo masterDetailObservable =
-        (ObservableInfo) resolver.getModel(expression, new IModelResolverFilter() {
-          @Override
-          public boolean accept(IModelSupport modelSupport) throws Exception {
-            if (modelSupport instanceof DirectFieldModelSupport) {
-              ObservableInfo observable = (ObservableInfo) modelSupport.getModel();
-              return observable.getBindableObject().getType() == TYPE;
-            }
-            return true;
-          }
-        });
-    if (masterDetailObservable == null) {
-      AbstractParser.addError(editor, MessageFormat.format(
-          Messages.EmfObserveTypeContainer_masterObservableNotFound,
-          expression), new Throwable());
-      return null;
-    }
-    Assert.instanceOf(IMasterDetailProvider.class, masterDetailObservable);
-    // extract master observable
-    IMasterDetailProvider masterDetailProvider = (IMasterDetailProvider) masterDetailObservable;
-    ObservableInfo masterObservable = masterDetailProvider.getMasterObservable();
-    //
-    return masterObservable;
-  }
-
-  private void addEMFPackage(Expression expression) throws Exception {
-    if (expression instanceof QualifiedName) {
-      QualifiedName qualifiedName = (QualifiedName) expression;
-      String literalsClass =
-          AstNodeUtils.getTypeBinding(qualifiedName.getQualifier()).getQualifiedName();
-      m_propertiesSupport.addPackage(literalsClass);
-    }
-  }
-
-  AstObjectInfo createDetailValue(AstEditor editor,
-      Expression[] arguments,
-      int startIndex,
-      IModelResolver resolver) throws Exception {
-    // prepare master
-    ObservableInfo masterObservable = getMasterObservable(editor, resolver, arguments[startIndex]);
-    if (masterObservable == null) {
-      AbstractParser.addError(editor, MessageFormat.format(
-          Messages.EmfObserveTypeContainer_masterObservableArgumentNotFound,
-          arguments[startIndex]), new Throwable());
-      return null;
-    }
-    // prepare detail property
-    addEMFPackage(arguments[startIndex + 1]);
-    String detailPropertyReference = CoreUtils.getNodeReference(arguments[startIndex + 1]);
-    // create observable
-    DetailValueEmfObservableInfo observeDetailValue =
-        new DetailValueEmfObservableInfo(masterObservable, m_propertiesSupport);
-    observeDetailValue.setDetailPropertyReference(null, detailPropertyReference);
-    observeDetailValue.setCodeSupport(new EmfObservableDetailValueCodeSupport());
-    //
-    return observeDetailValue;
-  }
-
-  AstObjectInfo createDetailValueEdit(AstEditor editor,
-      Expression[] arguments,
-      int startIndex,
-      IModelResolver resolver) throws Exception {
-    m_propertiesSupport.checkEditingDomain(arguments[startIndex]);
-    return createDetailValue(editor, arguments, startIndex + 1, resolver);
-  }
-
-  AstObjectInfo createDetailList(AstEditor editor,
-      Expression[] arguments,
-      int startIndex,
-      IModelResolver resolver) throws Exception {
-    // prepare master
-    ObservableInfo masterObservable = getMasterObservable(editor, resolver, arguments[startIndex]);
-    if (masterObservable == null) {
-      AbstractParser.addError(editor, MessageFormat.format(
-          Messages.EmfObserveTypeContainer_masterObservableArgumentNotFound,
-          arguments[startIndex]), new Throwable());
-      return null;
-    }
-    // prepare detail property
-    addEMFPackage(arguments[startIndex + 1]);
-    String detailPropertyReference = CoreUtils.getNodeReference(arguments[startIndex + 1]);
-    // create observable
-    DetailListEmfObservableInfo observeDetailList =
-        new DetailListEmfObservableInfo(masterObservable, m_propertiesSupport);
-    observeDetailList.setDetailPropertyReference(null, detailPropertyReference);
-    observeDetailList.setCodeSupport(new EmfObservableDetailListCodeSupport());
-    //
-    return observeDetailList;
-  }
-
-  AstObjectInfo createDetailListEdit(AstEditor editor,
-      Expression[] arguments,
-      int startIndex,
-      IModelResolver resolver) throws Exception {
-    m_propertiesSupport.checkEditingDomain(arguments[startIndex]);
-    return createDetailList(editor, arguments, startIndex + 1, resolver);
-  }
-
-  AstObjectInfo createMaps(AstEditor editor,
-      Expression[] arguments,
-      int startIndex,
-      IModelResolver resolver) throws Exception {
-    // prepare domain
-    ObservableInfo domainObservable = (ObservableInfo) resolver.getModel(arguments[startIndex]);
-    if (domainObservable == null) {
-      AbstractParser.addError(editor, MessageFormat.format(
-          Messages.EmfObserveTypeContainer_argumentNotFound,
-          arguments[startIndex]), new Throwable());
-      return null;
-    }
-    // prepare reference properties
-    Assert.instanceOf(ArrayCreation.class, arguments[startIndex + 1]);
-    ArrayCreation arrayReferenceProperties = (ArrayCreation) arguments[startIndex + 1];
-    List<Expression> expressionReferenceProperties =
-        DomGenerics.expressions(arrayReferenceProperties.getInitializer());
-    List<String> referenceProperties = Lists.newArrayList();
-    for (Expression expression : expressionReferenceProperties) {
-      Assert.instanceOf(QualifiedName.class, expression);
-      referenceProperties.add(CoreUtils.getNodeReference(expression));
-    }
-    if (!expressionReferenceProperties.isEmpty()) {
-      addEMFPackage(expressionReferenceProperties.get(0));
-    }
-    // create observable
-    MapsEmfObservableInfo observeMaps =
-        new MapsEmfObservableInfo(domainObservable, m_propertiesSupport);
-    observeMaps.setEMFProperties(referenceProperties);
-    return observeMaps;
-  }
-
-  AstObjectInfo createMapsEdit(AstEditor editor,
-      Expression[] arguments,
-      int startIndex,
-      IModelResolver resolver) throws Exception {
-    m_propertiesSupport.checkEditingDomain(arguments[startIndex]);
-    return createMaps(editor, arguments, startIndex + 1, resolver);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Helper method for load classes over editor class loader.
-   */
-  private Class<?> loadClass(String className) throws Exception {
-    return CoreUtils.load(JavaInfoUtils.getClassLoader(m_javaInfoRoot), className);
-  }
-
-  /**
-   * @return {@link EObjectBindableInfo} that association with given {@link Expression}.
-   */
-  public EObjectBindableInfo getEObject(Expression expression) throws Exception {
-    // prepare reference
-    String reference = CoreUtils.getNodeReference(expression);
-    // find object
-    for (EObjectBindableInfo bindableObject : m_observables) {
-      EObjectBindableInfo result = (EObjectBindableInfo) bindableObject.resolveReference(reference);
-      //
-      if (result != null) {
-        return result;
-      }
-    }
-    //
-    return null;
-  }
-
-  /**
-   * @return {@link EPropertyBindableInfo} property that association with given {@link Expression}.
-   */
-  private EPropertyBindableInfo getEProperty(EObjectBindableInfo eObject, Expression expression)
-      throws Exception {
-    // prepare reference
-    String reference = CoreUtils.getNodeReference(expression);
-    // find property
-    EPropertyBindableInfo eProperty = eObject.resolvePropertyReference(reference);
-    //
-    if (eProperty == null) {
-      eProperty = new EPropertyBindableInfo(null, null, null, "", "");
-    }
-    //
-    return eProperty;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Classpath
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean ensureDBLibraries(IJavaProject javaProject) throws Exception {
-    String testClass;
-    String pluginName;
-    {
-      // CASE-385522 do not add dependences if no bindings exists
-      int bindingsCount = 0;
-      for (IObserveInfo observeInfo : getObservables()) {
-        if (observeInfo instanceof BindableInfo) {
-          BindableInfo bindableInfo = (BindableInfo) observeInfo;
-          bindingsCount += bindableInfo.getBindings().size();
-        }
-      }
-      if (bindingsCount == 0) {
-        return false;
-      }
-    }
-    if (m_propertiesSupport.isEditingDomainMode()) {
-      testClass = "org.eclipse.emf.databinding.edit.EMFEditObservables";
-      pluginName = "org.eclipse.emf.databinding.edit";
-    } else {
-      testClass = "org.eclipse.emf.databinding.EMFObservables";
-      pluginName = "org.eclipse.emf.databinding";
-    }
-    return ensureDBLibraries(javaProject, testClass, pluginName);
-  }
-
-  public static boolean ensureDBLibraries(IJavaProject javaProject,
-      String testClass,
-      String pluginName) throws Exception {
-    boolean addLibrary = !ProjectUtils.hasType(javaProject, testClass);
-    if (addLibrary) {
-      IProject project = javaProject.getProject();
-      // check 'java project' or 'plugin project'
-      if (project.hasNature("org.eclipse.pde.PluginNature")) {
-        // add to plugin imports
-        if (addLibrary) {
-          PdeUtils.get(project).addPluginImport(pluginName);
-        }
-      } else {
-        // add to project .classpath
-        if (addLibrary) {
-          ProjectUtils.addPluginLibraries(javaProject, pluginName);
-        }
-      }
-    }
-    return addLibrary;
-  }
-
-  @Override
-  public void ensureDesignerResources(IJavaProject javaProject) throws Exception {
-    String[] classes =
-        {"", "EMFListenerSupport", "EMFTreeBeanAdvisor", "EMFTreeObservableLabelProvider"};
-    if (m_propertiesSupport.isEditingDomainMode()) {
-      classes[0] = "EMFEditBeansListObservableFactory";
-    } else {
-      classes[0] = "EMFBeansListObservableFactory";
-    }
-    for (int i = 0; i < classes.length; i++) {
-      ProjectUtils.ensureResourceType(
-          javaProject,
-          Activator.getDefault().getBundle(),
-          "org.eclipse.wb.rcp.databinding." + classes[i]);
-    }
-  }
+	public static final ObserveType TYPE = new ObserveType("Eclipse Modeling Framework",
+			Activator.getImage("EMF_ObserveType2.png"));
+	private List<EObjectBindableInfo> m_observables = Collections.emptyList();
+	private JavaInfo m_javaInfoRoot;
+	private PropertiesSupport m_propertiesSupport;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public EmfObserveTypeContainer() {
+		super(TYPE, false, false);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Accept
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean accept(JavaInfo javaInfoRoot) {
+		try {
+			IJavaProject javaProject = javaInfoRoot.getEditor().getJavaProject();
+			return ProjectUtils.hasType(javaProject, "org.eclipse.emf.ecore.EObject");
+		} catch (Throwable e) {
+			return false;
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public PropertiesSupport getPropertiesSupport() {
+		return m_propertiesSupport;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IObserveTypeContainer
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public List<IObserveInfo> getObservables() {
+		return CoreUtils.cast(m_observables);
+	}
+
+	@Override
+	public void synchronizeObserves(JavaInfo root, final AstEditor editor, TypeDeclaration rootNode)
+			throws Exception {
+		IJavaProject javaProject = editor.getJavaProject();
+		ClassLoader classLoader = JavaInfoUtils.getClassLoader(m_javaInfoRoot);
+		List<VariableDeclarationFragment> fragments = CoreUtils.getFieldFragments(rootNode);
+		m_propertiesSupport = new PropertiesSupport(javaProject, classLoader, fragments);
+		//
+		for (Iterator<VariableDeclarationFragment> I = fragments.iterator(); I.hasNext();) {
+			try {
+				VariableDeclarationFragment fragment = I.next();
+				Type type = CoreUtils.getType(fragment, false);
+				Class<?> eObjectClass = loadClass(AstNodeUtils.getFullyQualifiedName(type, true));
+				//
+				if (!eObjectClass.isInterface()
+						|| !m_propertiesSupport.getEObjectClass().isAssignableFrom(eObjectClass)
+						&& !CoreUtils.isAssignableFrom(m_propertiesSupport.getIObservableValue(), eObjectClass)) {
+					I.remove();
+				}
+			} catch (ClassNotFoundException e) {
+				I.remove();
+			}
+		}
+		//
+		SynchronizeManager.synchronizeObjects(
+				m_observables,
+				fragments,
+				new ISynchronizeProcessor<VariableDeclarationFragment, EObjectBindableInfo>() {
+					@Override
+					public boolean handleObject(EObjectBindableInfo object) {
+						return true;
+					}
+
+					@Override
+					public VariableDeclarationFragment getKeyObject(EObjectBindableInfo eObject) {
+						return eObject.getFragment();
+					}
+
+					@Override
+					public boolean equals(VariableDeclarationFragment key0, VariableDeclarationFragment key1) {
+						return key0 == key1;
+					}
+
+					@Override
+					public EObjectBindableInfo findObject(Map<VariableDeclarationFragment, EObjectBindableInfo> keyObjectToObject,
+							VariableDeclarationFragment key) throws Exception {
+						return null;
+					}
+
+					@Override
+					public EObjectBindableInfo createObject(VariableDeclarationFragment fragment)
+							throws Exception {
+						try {
+							Type type = CoreUtils.getType(fragment, true);
+							// prepare bean class
+							Class<?> eObjectClass = loadClass(AstNodeUtils.getFullyQualifiedName(type, true));
+							return new EObjectBindableInfo(eObjectClass, fragment, m_propertiesSupport, null);
+						} catch (ClassNotFoundException e) {
+							AbstractParser.addError(
+									editor,
+									"ClassNotFoundException: " + fragment,
+									new Throwable());
+							return null;
+						}
+					}
+
+					@Override
+					public void update(EObjectBindableInfo object) throws Exception {
+					}
+				});
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parse
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void createObservables(JavaInfo root,
+			IModelResolver resolver,
+			AstEditor editor,
+			TypeDeclaration rootNode) throws Exception {
+		m_javaInfoRoot = root;
+		m_observables = Lists.newArrayList();
+		//
+		IJavaProject javaProject = editor.getJavaProject();
+		ClassLoader classLoader = JavaInfoUtils.getClassLoader(m_javaInfoRoot);
+		List<VariableDeclarationFragment> fragments = CoreUtils.getFieldFragments(rootNode);
+		//
+		m_propertiesSupport = new PropertiesSupport(javaProject, classLoader, fragments);
+		//
+		for (VariableDeclarationFragment fragment : fragments) {
+			try {
+				// prepare type
+				Type type = CoreUtils.getType(fragment, true);
+				// prepare bean class
+				Class<?> eObjectClass = loadClass(AstNodeUtils.getFullyQualifiedName(type, true));
+				//
+				if (eObjectClass.isInterface()
+						&& (m_propertiesSupport.getEObjectClass().isAssignableFrom(eObjectClass) || CoreUtils.isAssignableFrom(
+								m_propertiesSupport.getIObservableValue(),
+								eObjectClass))) {
+					m_observables.add(new EObjectBindableInfo(eObjectClass,
+							fragment,
+							m_propertiesSupport,
+							resolver));
+				}
+			} catch (ClassNotFoundException e) {
+				AbstractParser.addError(editor, "ClassNotFoundException: " + fragment, new Throwable());
+			} catch (Throwable e) {
+				throw ReflectionUtils.propagate(e);
+			}
+		}
+	}
+
+	@Override
+	public AstObjectInfo parseExpression(AstEditor editor,
+			String signature,
+			ClassInstanceCreation creation,
+			Expression[] arguments,
+			IModelResolver resolver,
+			IDatabindingsProvider provider) throws Exception {
+		ITypeBinding binding = AstNodeUtils.getTypeBinding(creation);
+		if (binding == null) {
+			return null;
+		}
+		//
+		// IObservableFactory
+		//
+		if (AstNodeUtils.isSuccessorOf(
+				binding,
+				"org.eclipse.core.databinding.observable.masterdetail.IObservableFactory")) {
+			String className = AstNodeUtils.getFullyQualifiedName(binding, false);
+			//
+			if (AstNodeUtils.isSuccessorOf(
+					binding,
+					"org.eclipse.wb.rcp.databinding.EMFBeansListObservableFactory")) {
+				return createObserveFactory(editor, signature, arguments, className, false);
+			}
+			if (AstNodeUtils.isSuccessorOf(
+					binding,
+					"org.eclipse.wb.rcp.databinding.EMFEditBeansListObservableFactory")) {
+				return createObserveFactory(editor, signature, arguments, className, true);
+			}
+		}
+		//
+		// TreeStructureAdvisor
+		//
+		if (AstNodeUtils.isSuccessorOf(binding, "org.eclipse.wb.rcp.databinding.EMFTreeBeanAdvisor")) {
+			Assert.isTrue(signature.endsWith("<init>(org.eclipse.emf.ecore.EStructuralFeature,org.eclipse.emf.ecore.EStructuralFeature,org.eclipse.emf.ecore.EStructuralFeature)"));
+			// create advisor
+			EmfTreeBeanAdvisorInfo advisorInfo = new EmfTreeBeanAdvisorInfo(m_propertiesSupport);
+			// prepare parent property
+			advisorInfo.setEMFParentProperty(getArgumentReference(editor, arguments[0]));
+			// prepare children property
+			advisorInfo.setEMFChildrenProperty(getArgumentReference(editor, arguments[1]));
+			// prepare hasChildren property
+			advisorInfo.setEMFHasChildrenProperty(getArgumentReference(editor, arguments[2]));
+			//
+			return advisorInfo;
+		}
+		//
+		// LabelProvider
+		//
+		if (AstNodeUtils.isSuccessorOf(
+				binding,
+				"org.eclipse.wb.rcp.databinding.EMFTreeObservableLabelProvider")) {
+			Assert.isTrue(signature.endsWith("<init>(org.eclipse.core.databinding.observable.set.IObservableSet,org.eclipse.emf.ecore.EStructuralFeature,org.eclipse.emf.ecore.EStructuralFeature)"));
+			// prepare allElements observable
+			KnownElementsObservableInfo allElementsObservable =
+					(KnownElementsObservableInfo) resolver.getModel(arguments[0]);
+			if (allElementsObservable == null) {
+				AbstractParser.addError(
+						editor,
+						MessageFormat.format(Messages.EmfObserveTypeContainer_argumentNotFound, arguments[0]),
+						new Throwable());
+				return null;
+			}
+			// create label provider
+			EmfTreeObservableLabelProviderInfo labelProvider =
+					new EmfTreeObservableLabelProviderInfo(AstNodeUtils.getFullyQualifiedName(binding, false),
+							allElementsObservable,
+							m_propertiesSupport);
+			// prepare text property
+			labelProvider.setEMFTextProperty(getArgumentReference(editor, arguments[1]));
+			// prepare image property
+			labelProvider.setEMFImageProperty(getArgumentReference(editor, arguments[2]));
+			//
+			return labelProvider;
+		}
+		return null;
+	}
+
+	private static String getArgumentReference(AstEditor editor, Expression argument) {
+		if (argument instanceof NullLiteral) {
+			return null;
+		}
+		return CoreUtils.getNodeReference(argument);
+	}
+
+	EmfBeansObservableFactoryInfo createObserveFactory(AstEditor editor,
+			String signature,
+			Expression[] arguments,
+			String className,
+			boolean editingDomain) throws Exception {
+		if (editingDomain) {
+			m_propertiesSupport.checkEditingDomain(arguments[1]);
+			Assert.isTrue(signature.endsWith("<init>(java.lang.Class,org.eclipse.emf.edit.domain.EditingDomain,org.eclipse.emf.ecore.EStructuralFeature)"));
+		} else {
+			Assert.isTrue(signature.endsWith("<init>(java.lang.Class,org.eclipse.emf.ecore.EStructuralFeature)"));
+		}
+		// create factory
+		EmfBeansObservableFactoryInfo observableFactory =
+				EmfBeansObservableFactoryInfo.create(className, m_propertiesSupport);
+		// prepare element type
+		observableFactory.setElementType(CoreUtils.evaluate(Class.class, editor, arguments[0]));
+		// prepare property
+		observableFactory.setEMFPropertyReference(CoreUtils.getNodeReference(arguments[editingDomain
+		                                                                               ? 2
+		                                                                            		   : 1]));
+		//
+		return observableFactory;
+	}
+
+	@Override
+	public AstObjectInfo parseExpression(AstEditor editor,
+			String signature,
+			MethodInvocation invocation,
+			Expression[] arguments,
+			IModelResolver resolver) throws Exception {
+		LocalModelCreator modelCreator = CreatorManager.METHOD_CREATORS.get(signature);
+		if (modelCreator != null) {
+			return modelCreator.create(this, editor, arguments, resolver);
+		}
+		return null;
+	}
+
+	AstObjectInfo createValueProperty(AstEditor editor, Expression[] arguments, int startIndex) {
+		EmfValuePropertyCodeSupport codeSupport = new EmfValuePropertyCodeSupport();
+		codeSupport.setParserPropertyReference(CoreUtils.getNodeReference(arguments[startIndex]));
+		return codeSupport;
+	}
+
+	AstObjectInfo createValuePropertyEdit(AstEditor editor, Expression[] arguments, int startIndex)
+			throws Exception {
+		m_propertiesSupport.checkEditingDomain(arguments[startIndex]);
+		return createValueProperty(editor, arguments, startIndex + 1);
+	}
+
+	private static String getPathPropertyReference(Expression expression) {
+		Assert.instanceOf(MethodInvocation.class, expression);
+		StringBuffer reference = new StringBuffer("org.eclipse.emf.databinding.FeaturePath.fromList(");
+		int index = 0;
+		for (Expression argument : DomGenerics.arguments(expression)) {
+			if (index > 0) {
+				reference.append(", ");
+			}
+			reference.append(CoreUtils.getNodeReference(argument));
+			index++;
+		}
+		Assert.isTrue(index > 0);
+		reference.append(")");
+		return reference.toString();
+	}
+
+	AstObjectInfo createValuePathProperty(AstEditor editor, Expression[] arguments, int startIndex) {
+		EmfValuePropertyCodeSupport codeSupport = new EmfValuePropertyCodeSupport();
+		codeSupport.setParserPropertyReference(getPathPropertyReference(arguments[startIndex]));
+		return codeSupport;
+	}
+
+	AstObjectInfo createValuePathPropertyEdit(AstEditor editor, Expression[] arguments, int startIndex)
+			throws Exception {
+		m_propertiesSupport.checkEditingDomain(arguments[startIndex]);
+		return createValuePathProperty(editor, arguments, startIndex + 1);
+	}
+
+	AstObjectInfo createListProperty(AstEditor editor, Expression[] arguments, int startIndex) {
+		EmfListPropertyCodeSupport codeSupport = new EmfListPropertyCodeSupport();
+		codeSupport.setParserPropertyReference(CoreUtils.getNodeReference(arguments[startIndex]));
+		return codeSupport;
+	}
+
+	AstObjectInfo createListPropertyEdit(AstEditor editor, Expression[] arguments, int startIndex)
+			throws Exception {
+		m_propertiesSupport.checkEditingDomain(arguments[startIndex]);
+		return createListProperty(editor, arguments, startIndex + 1);
+	}
+
+	AstObjectInfo createListPathProperty(AstEditor editor, Expression[] arguments, int startIndex) {
+		EmfListPropertyCodeSupport codeSupport = new EmfListPropertyCodeSupport();
+		codeSupport.setParserPropertyReference(getPathPropertyReference(arguments[startIndex]));
+		return codeSupport;
+	}
+
+	AstObjectInfo createListPathPropertyEdit(AstEditor editor, Expression[] arguments, int startIndex)
+			throws Exception {
+		m_propertiesSupport.checkEditingDomain(arguments[startIndex]);
+		return createListPathProperty(editor, arguments, startIndex + 1);
+	}
+
+	AstObjectInfo createValue(AstEditor editor, Expression[] arguments, int startIndex)
+			throws Exception {
+		// prepare object
+		EObjectBindableInfo eObject = getEObject(arguments[startIndex]);
+		if (eObject == null) {
+			AbstractParser.addError(editor, MessageFormat.format(
+					Messages.EmfObserveTypeContainer_argumentNotFound,
+					arguments[startIndex]), new Throwable());
+			return null;
+		}
+		// prepare property
+		EPropertyBindableInfo eProperty = getEProperty(eObject, arguments[startIndex + 1]);
+		// create observable
+		ObservableInfo observable = new ValueEmfObservableInfo(eObject, eProperty);
+		observable.setCodeSupport(new EmfObservableValueCodeSupport());
+		//
+		return observable;
+	}
+
+	AstObjectInfo createValueEdit(AstEditor editor, Expression[] arguments, int startIndex)
+			throws Exception {
+		m_propertiesSupport.checkEditingDomain(arguments[startIndex]);
+		return createValue(editor, arguments, startIndex + 1);
+	}
+
+	AstObjectInfo createList(AstEditor editor, Expression[] arguments, int startIndex)
+			throws Exception {
+		// prepare object
+		EObjectBindableInfo eObject = getEObject(arguments[startIndex]);
+		if (eObject == null) {
+			AbstractParser.addError(editor, MessageFormat.format(
+					Messages.EmfObserveTypeContainer_argumentNotFound,
+					arguments[startIndex]), new Throwable());
+			return null;
+		}
+		// prepare property
+		EPropertyBindableInfo eProperty = getEProperty(eObject, arguments[startIndex + 1]);
+		// create observable
+		ObservableInfo observable = new ListEmfObservableInfo(eObject, eProperty);
+		observable.setCodeSupport(new EmfObservableListCodeSupport());
+		//
+		return observable;
+	}
+
+	AstObjectInfo createListEdit(AstEditor editor, Expression[] arguments, int startIndex)
+			throws Exception {
+		m_propertiesSupport.checkEditingDomain(arguments[startIndex]);
+		return createList(editor, arguments, startIndex + 1);
+	}
+
+	public static ObservableInfo getMasterObservable(AstEditor editor,
+			IModelResolver resolver,
+			Expression expression) throws Exception {
+		// prepare master detail observable
+		ObservableInfo masterDetailObservable =
+				(ObservableInfo) resolver.getModel(expression, new IModelResolverFilter() {
+					@Override
+					public boolean accept(IModelSupport modelSupport) throws Exception {
+						if (modelSupport instanceof DirectFieldModelSupport) {
+							ObservableInfo observable = (ObservableInfo) modelSupport.getModel();
+							return observable.getBindableObject().getType() == TYPE;
+						}
+						return true;
+					}
+				});
+		if (masterDetailObservable == null) {
+			AbstractParser.addError(editor, MessageFormat.format(
+					Messages.EmfObserveTypeContainer_masterObservableNotFound,
+					expression), new Throwable());
+			return null;
+		}
+		Assert.instanceOf(IMasterDetailProvider.class, masterDetailObservable);
+		// extract master observable
+		IMasterDetailProvider masterDetailProvider = (IMasterDetailProvider) masterDetailObservable;
+		ObservableInfo masterObservable = masterDetailProvider.getMasterObservable();
+		//
+		return masterObservable;
+	}
+
+	private void addEMFPackage(Expression expression) throws Exception {
+		if (expression instanceof QualifiedName) {
+			QualifiedName qualifiedName = (QualifiedName) expression;
+			String literalsClass =
+					AstNodeUtils.getTypeBinding(qualifiedName.getQualifier()).getQualifiedName();
+			m_propertiesSupport.addPackage(literalsClass);
+		}
+	}
+
+	AstObjectInfo createDetailValue(AstEditor editor,
+			Expression[] arguments,
+			int startIndex,
+			IModelResolver resolver) throws Exception {
+		// prepare master
+		ObservableInfo masterObservable = getMasterObservable(editor, resolver, arguments[startIndex]);
+		if (masterObservable == null) {
+			AbstractParser.addError(editor, MessageFormat.format(
+					Messages.EmfObserveTypeContainer_masterObservableArgumentNotFound,
+					arguments[startIndex]), new Throwable());
+			return null;
+		}
+		// prepare detail property
+		addEMFPackage(arguments[startIndex + 1]);
+		String detailPropertyReference = CoreUtils.getNodeReference(arguments[startIndex + 1]);
+		// create observable
+		DetailValueEmfObservableInfo observeDetailValue =
+				new DetailValueEmfObservableInfo(masterObservable, m_propertiesSupport);
+		observeDetailValue.setDetailPropertyReference(null, detailPropertyReference);
+		observeDetailValue.setCodeSupport(new EmfObservableDetailValueCodeSupport());
+		//
+		return observeDetailValue;
+	}
+
+	AstObjectInfo createDetailValueEdit(AstEditor editor,
+			Expression[] arguments,
+			int startIndex,
+			IModelResolver resolver) throws Exception {
+		m_propertiesSupport.checkEditingDomain(arguments[startIndex]);
+		return createDetailValue(editor, arguments, startIndex + 1, resolver);
+	}
+
+	AstObjectInfo createDetailList(AstEditor editor,
+			Expression[] arguments,
+			int startIndex,
+			IModelResolver resolver) throws Exception {
+		// prepare master
+		ObservableInfo masterObservable = getMasterObservable(editor, resolver, arguments[startIndex]);
+		if (masterObservable == null) {
+			AbstractParser.addError(editor, MessageFormat.format(
+					Messages.EmfObserveTypeContainer_masterObservableArgumentNotFound,
+					arguments[startIndex]), new Throwable());
+			return null;
+		}
+		// prepare detail property
+		addEMFPackage(arguments[startIndex + 1]);
+		String detailPropertyReference = CoreUtils.getNodeReference(arguments[startIndex + 1]);
+		// create observable
+		DetailListEmfObservableInfo observeDetailList =
+				new DetailListEmfObservableInfo(masterObservable, m_propertiesSupport);
+		observeDetailList.setDetailPropertyReference(null, detailPropertyReference);
+		observeDetailList.setCodeSupport(new EmfObservableDetailListCodeSupport());
+		//
+		return observeDetailList;
+	}
+
+	AstObjectInfo createDetailListEdit(AstEditor editor,
+			Expression[] arguments,
+			int startIndex,
+			IModelResolver resolver) throws Exception {
+		m_propertiesSupport.checkEditingDomain(arguments[startIndex]);
+		return createDetailList(editor, arguments, startIndex + 1, resolver);
+	}
+
+	AstObjectInfo createMaps(AstEditor editor,
+			Expression[] arguments,
+			int startIndex,
+			IModelResolver resolver) throws Exception {
+		// prepare domain
+		ObservableInfo domainObservable = (ObservableInfo) resolver.getModel(arguments[startIndex]);
+		if (domainObservable == null) {
+			AbstractParser.addError(editor, MessageFormat.format(
+					Messages.EmfObserveTypeContainer_argumentNotFound,
+					arguments[startIndex]), new Throwable());
+			return null;
+		}
+		// prepare reference properties
+		Assert.instanceOf(ArrayCreation.class, arguments[startIndex + 1]);
+		ArrayCreation arrayReferenceProperties = (ArrayCreation) arguments[startIndex + 1];
+		List<Expression> expressionReferenceProperties =
+				DomGenerics.expressions(arrayReferenceProperties.getInitializer());
+		List<String> referenceProperties = Lists.newArrayList();
+		for (Expression expression : expressionReferenceProperties) {
+			Assert.instanceOf(QualifiedName.class, expression);
+			referenceProperties.add(CoreUtils.getNodeReference(expression));
+		}
+		if (!expressionReferenceProperties.isEmpty()) {
+			addEMFPackage(expressionReferenceProperties.get(0));
+		}
+		// create observable
+		MapsEmfObservableInfo observeMaps =
+				new MapsEmfObservableInfo(domainObservable, m_propertiesSupport);
+		observeMaps.setEMFProperties(referenceProperties);
+		return observeMaps;
+	}
+
+	AstObjectInfo createMapsEdit(AstEditor editor,
+			Expression[] arguments,
+			int startIndex,
+			IModelResolver resolver) throws Exception {
+		m_propertiesSupport.checkEditingDomain(arguments[startIndex]);
+		return createMaps(editor, arguments, startIndex + 1, resolver);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Helper method for load classes over editor class loader.
+	 */
+	private Class<?> loadClass(String className) throws Exception {
+		return CoreUtils.load(JavaInfoUtils.getClassLoader(m_javaInfoRoot), className);
+	}
+
+	/**
+	 * @return {@link EObjectBindableInfo} that association with given {@link Expression}.
+	 */
+	public EObjectBindableInfo getEObject(Expression expression) throws Exception {
+		// prepare reference
+		String reference = CoreUtils.getNodeReference(expression);
+		// find object
+		for (EObjectBindableInfo bindableObject : m_observables) {
+			EObjectBindableInfo result = (EObjectBindableInfo) bindableObject.resolveReference(reference);
+			//
+			if (result != null) {
+				return result;
+			}
+		}
+		//
+		return null;
+	}
+
+	/**
+	 * @return {@link EPropertyBindableInfo} property that association with given {@link Expression}.
+	 */
+	private EPropertyBindableInfo getEProperty(EObjectBindableInfo eObject, Expression expression)
+			throws Exception {
+		// prepare reference
+		String reference = CoreUtils.getNodeReference(expression);
+		// find property
+		EPropertyBindableInfo eProperty = eObject.resolvePropertyReference(reference);
+		//
+		if (eProperty == null) {
+			eProperty = new EPropertyBindableInfo(null, null, null, "", "");
+		}
+		//
+		return eProperty;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Classpath
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean ensureDBLibraries(IJavaProject javaProject) throws Exception {
+		String testClass;
+		String pluginName;
+		{
+			// CASE-385522 do not add dependences if no bindings exists
+			int bindingsCount = 0;
+			for (IObserveInfo observeInfo : getObservables()) {
+				if (observeInfo instanceof BindableInfo) {
+					BindableInfo bindableInfo = (BindableInfo) observeInfo;
+					bindingsCount += bindableInfo.getBindings().size();
+				}
+			}
+			if (bindingsCount == 0) {
+				return false;
+			}
+		}
+		if (m_propertiesSupport.isEditingDomainMode()) {
+			testClass = "org.eclipse.emf.databinding.edit.EMFEditObservables";
+			pluginName = "org.eclipse.emf.databinding.edit";
+		} else {
+			testClass = "org.eclipse.emf.databinding.EMFObservables";
+			pluginName = "org.eclipse.emf.databinding";
+		}
+		return ensureDBLibraries(javaProject, testClass, pluginName);
+	}
+
+	public static boolean ensureDBLibraries(IJavaProject javaProject,
+			String testClass,
+			String pluginName) throws Exception {
+		boolean addLibrary = !ProjectUtils.hasType(javaProject, testClass);
+		if (addLibrary) {
+			IProject project = javaProject.getProject();
+			// check 'java project' or 'plugin project'
+			if (project.hasNature("org.eclipse.pde.PluginNature")) {
+				// add to plugin imports
+				if (addLibrary) {
+					PdeUtils.get(project).addPluginImport(pluginName);
+				}
+			} else {
+				// add to project .classpath
+				if (addLibrary) {
+					ProjectUtils.addPluginLibraries(javaProject, pluginName);
+				}
+			}
+		}
+		return addLibrary;
+	}
+
+	@Override
+	public void ensureDesignerResources(IJavaProject javaProject) throws Exception {
+		String[] classes =
+			{"", "EMFListenerSupport", "EMFTreeBeanAdvisor", "EMFTreeObservableLabelProvider"};
+		if (m_propertiesSupport.isEditingDomainMode()) {
+			classes[0] = "EMFEditBeansListObservableFactory";
+		} else {
+			classes[0] = "EMFBeansListObservableFactory";
+		}
+		for (int i = 0; i < classes.length; i++) {
+			ProjectUtils.ensureResourceType(
+					javaProject,
+					Activator.getDefault().getBundle(),
+					"org.eclipse.wb.rcp.databinding." + classes[i]);
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/GlobalObservableFactory.java b/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/GlobalObservableFactory.java
index d45311bb5..bd23a31d6 100644
--- a/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/GlobalObservableFactory.java
+++ b/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/GlobalObservableFactory.java
@@ -79,285 +79,285 @@
  * @coverage bindings.rcp.emf.model
  */
 public final class GlobalObservableFactory implements IGlobalObservableFactory {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IGlobalObservableFactory: Observable
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public ObservableInfo createDetailObservable(SingleSelectionObservableInfo masterObservable,
-      BindableInfo object,
-      Type type) throws Exception {
-    if (masterObservable.isViewer()) {
-      // prepare input
-      ObservableInfo inputObservable = null;
-      BindableInfo property = object.resolvePropertyReference("setInput");
-      for (AbstractBindingInfo binding : object.getBindings()) {
-        if (binding.getTargetProperty() == property) {
-          AbstractViewerInputBindingInfo viewerBinding = (AbstractViewerInputBindingInfo) binding;
-          inputObservable = viewerBinding.getInputObservable();
-          break;
-        }
-      }
-      // create detail observable
-      if (inputObservable instanceof ListEmfObservableInfo) {
-        PropertiesSupport propertiesSupport = getPropertiesSupport(inputObservable);
-        boolean version_2_5 = propertiesSupport.isEMFProperties();
-        ObservableInfo observable = null;
-        //
-        if (type == Type.OnlyValue) {
-          observable = new DetailValueEmfObservableInfo(masterObservable, propertiesSupport);
-          //
-          if (version_2_5) {
-            observable.setCodeSupport(new EmfValuePropertyDetailCodeSupport());
-          } else {
-            observable.setCodeSupport(new EmfObservableDetailValueCodeSupport());
-          }
-        } else if (type == Type.OnlyList) {
-          observable = new DetailListEmfObservableInfo(masterObservable, propertiesSupport);
-          //
-          if (version_2_5) {
-            observable.setCodeSupport(new EmfListPropertyDetailCodeSupport());
-          } else {
-            observable.setCodeSupport(new EmfObservableDetailListCodeSupport());
-          }
-        }
-        return observable;
-      }
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IGlobalObservableFactory: Observable
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public ObservableInfo createDetailObservable(SingleSelectionObservableInfo masterObservable,
+			BindableInfo object,
+			Type type) throws Exception {
+		if (masterObservable.isViewer()) {
+			// prepare input
+			ObservableInfo inputObservable = null;
+			BindableInfo property = object.resolvePropertyReference("setInput");
+			for (AbstractBindingInfo binding : object.getBindings()) {
+				if (binding.getTargetProperty() == property) {
+					AbstractViewerInputBindingInfo viewerBinding = (AbstractViewerInputBindingInfo) binding;
+					inputObservable = viewerBinding.getInputObservable();
+					break;
+				}
+			}
+			// create detail observable
+			if (inputObservable instanceof ListEmfObservableInfo) {
+				PropertiesSupport propertiesSupport = getPropertiesSupport(inputObservable);
+				boolean version_2_5 = propertiesSupport.isEMFProperties();
+				ObservableInfo observable = null;
+				//
+				if (type == Type.OnlyValue) {
+					observable = new DetailValueEmfObservableInfo(masterObservable, propertiesSupport);
+					//
+					if (version_2_5) {
+						observable.setCodeSupport(new EmfValuePropertyDetailCodeSupport());
+					} else {
+						observable.setCodeSupport(new EmfObservableDetailValueCodeSupport());
+					}
+				} else if (type == Type.OnlyList) {
+					observable = new DetailListEmfObservableInfo(masterObservable, propertiesSupport);
+					//
+					if (version_2_5) {
+						observable.setCodeSupport(new EmfListPropertyDetailCodeSupport());
+					} else {
+						observable.setCodeSupport(new EmfObservableDetailListCodeSupport());
+					}
+				}
+				return observable;
+			}
+		}
+		return null;
+	}
 
-  @Override
-  public MapsBeanObservableInfo createObserveMaps(ObservableInfo inputObservable,
-      ObservableInfo domainObservable,
-      Class<?> elementType,
-      boolean[] useViewerSupport) throws Exception {
-    if (inputObservable instanceof ListEmfObservableInfo
-        || inputObservable instanceof DetailListEmfObservableInfo) {
-      useViewerSupport[0] = false;
-      MapsEmfObservableInfo observeMaps =
-          new MapsEmfObservableInfo(domainObservable, getPropertiesSupport(inputObservable));
-      observeMaps.setElementType(elementType);
-      return observeMaps;
-    }
-    return null;
-  }
+	@Override
+	public MapsBeanObservableInfo createObserveMaps(ObservableInfo inputObservable,
+			ObservableInfo domainObservable,
+			Class<?> elementType,
+			boolean[] useViewerSupport) throws Exception {
+		if (inputObservable instanceof ListEmfObservableInfo
+				|| inputObservable instanceof DetailListEmfObservableInfo) {
+			useViewerSupport[0] = false;
+			MapsEmfObservableInfo observeMaps =
+					new MapsEmfObservableInfo(domainObservable, getPropertiesSupport(inputObservable));
+			observeMaps.setElementType(elementType);
+			return observeMaps;
+		}
+		return null;
+	}
 
-  @Override
-  public BeansObservableFactoryInfo createTreeObservableFactory(ObservableInfo inputObservable,
-      boolean asList) throws Exception {
-    if (asList
-        && (inputObservable instanceof ListEmfObservableInfo || inputObservable instanceof DetailListEmfObservableInfo)) {
-      return EmfBeansObservableFactoryInfo.create(null, getPropertiesSupport(inputObservable));
-    }
-    return null;
-  }
+	@Override
+	public BeansObservableFactoryInfo createTreeObservableFactory(ObservableInfo inputObservable,
+			boolean asList) throws Exception {
+		if (asList
+				&& (inputObservable instanceof ListEmfObservableInfo || inputObservable instanceof DetailListEmfObservableInfo)) {
+			return EmfBeansObservableFactoryInfo.create(null, getPropertiesSupport(inputObservable));
+		}
+		return null;
+	}
 
-  @Override
-  public TreeBeanAdvisorInfo createTreeBeanAdvisor(ObservableInfo inputObservable) throws Exception {
-    if (inputObservable instanceof ListEmfObservableInfo
-        || inputObservable instanceof DetailListEmfObservableInfo) {
-      return new EmfTreeBeanAdvisorInfo(getPropertiesSupport(inputObservable));
-    }
-    return null;
-  }
+	@Override
+	public TreeBeanAdvisorInfo createTreeBeanAdvisor(ObservableInfo inputObservable) throws Exception {
+		if (inputObservable instanceof ListEmfObservableInfo
+				|| inputObservable instanceof DetailListEmfObservableInfo) {
+			return new EmfTreeBeanAdvisorInfo(getPropertiesSupport(inputObservable));
+		}
+		return null;
+	}
 
-  @Override
-  public TreeObservableLabelProviderInfo createTreeLabelProvider(ObservableInfo inputObservable,
-      KnownElementsObservableInfo allElementsObservable) throws Exception {
-    if (inputObservable instanceof ListEmfObservableInfo
-        || inputObservable instanceof DetailListEmfObservableInfo) {
-      return new EmfTreeObservableLabelProviderInfo(allElementsObservable,
-          getPropertiesSupport(inputObservable));
-    }
-    return null;
-  }
+	@Override
+	public TreeObservableLabelProviderInfo createTreeLabelProvider(ObservableInfo inputObservable,
+			KnownElementsObservableInfo allElementsObservable) throws Exception {
+		if (inputObservable instanceof ListEmfObservableInfo
+				|| inputObservable instanceof DetailListEmfObservableInfo) {
+			return new EmfTreeObservableLabelProviderInfo(allElementsObservable,
+					getPropertiesSupport(inputObservable));
+		}
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IGlobalObservableFactory: UI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void configureChooseElementForViewerInput(ObservableInfo inputObservable,
-      ChooseClassAndPropertiesConfiguration configuration) throws Exception {
-    if (inputObservable instanceof ListEmfObservableInfo
-        || inputObservable instanceof DetailListEmfObservableInfo) {
-      final PropertiesSupport propertiesSupport = getPropertiesSupport(inputObservable);
-      configuration.setBaseClassName("org.eclipse.emf.ecore.EObject");
-      configuration.addPropertiesFilter(new IPropertiesFilter() {
-        @Override
-        public List<PropertyAdapter> filterProperties(Class<?> choosenClass,
-            List<PropertyAdapter> properties) throws Exception {
-          properties = Lists.newArrayList();
-          for (PropertyInfo emfPropertyInfo : propertiesSupport.getProperties(choosenClass)) {
-            properties.add(new ChooseClassAndTreePropertiesUiContentProvider.ObservePropertyAdapter(null,
-                new EPropertyBindableInfo(propertiesSupport,
-                    null,
-                    emfPropertyInfo.type,
-                    emfPropertyInfo.name,
-                    "\"" + emfPropertyInfo.name + "\"")));
-          }
-          return properties;
-        }
-      });
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IGlobalObservableFactory: UI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void configureChooseElementForViewerInput(ObservableInfo inputObservable,
+			ChooseClassAndPropertiesConfiguration configuration) throws Exception {
+		if (inputObservable instanceof ListEmfObservableInfo
+				|| inputObservable instanceof DetailListEmfObservableInfo) {
+			final PropertiesSupport propertiesSupport = getPropertiesSupport(inputObservable);
+			configuration.setBaseClassName("org.eclipse.emf.ecore.EObject");
+			configuration.addPropertiesFilter(new IPropertiesFilter() {
+				@Override
+				public List<PropertyAdapter> filterProperties(Class<?> choosenClass,
+						List<PropertyAdapter> properties) throws Exception {
+					properties = Lists.newArrayList();
+					for (PropertyInfo emfPropertyInfo : propertiesSupport.getProperties(choosenClass)) {
+						properties.add(new ChooseClassAndTreePropertiesUiContentProvider.ObservePropertyAdapter(null,
+								new EPropertyBindableInfo(propertiesSupport,
+										null,
+										emfPropertyInfo.type,
+										emfPropertyInfo.name,
+										"\"" + emfPropertyInfo.name + "\"")));
+					}
+					return properties;
+				}
+			});
+		}
+	}
 
-  @Override
-  public void configureChooseElementForTreeViewerInput(ObservableInfo inputObservable,
-      ChooseClassConfiguration configuration) throws Exception {
-    if (inputObservable instanceof ListEmfObservableInfo
-        || inputObservable instanceof DetailListEmfObservableInfo) {
-      configuration.setBaseClassName("org.eclipse.emf.ecore.EObject");
-    }
-  }
+	@Override
+	public void configureChooseElementForTreeViewerInput(ObservableInfo inputObservable,
+			ChooseClassConfiguration configuration) throws Exception {
+		if (inputObservable instanceof ListEmfObservableInfo
+				|| inputObservable instanceof DetailListEmfObservableInfo) {
+			configuration.setBaseClassName("org.eclipse.emf.ecore.EObject");
+		}
+	}
 
-  @Override
-  public void filterElementPropertiesForTreeViewerInput(ObservableInfo inputObservable,
-      Class<?> elementType,
-      List<PropertyDescriptor> descriptors) throws Exception {
-    if (inputObservable instanceof ListEmfObservableInfo
-        || inputObservable instanceof DetailListEmfObservableInfo) {
-      descriptors.clear();
-      PropertiesSupport propertiesSupport = getPropertiesSupport(inputObservable);
-      for (PropertyInfo emfProperty : propertiesSupport.getProperties(elementType)) {
-        descriptors.add(createProperty(emfProperty.name, emfProperty.type));
-      }
-    }
-  }
+	@Override
+	public void filterElementPropertiesForTreeViewerInput(ObservableInfo inputObservable,
+			Class<?> elementType,
+			List<PropertyDescriptor> descriptors) throws Exception {
+		if (inputObservable instanceof ListEmfObservableInfo
+				|| inputObservable instanceof DetailListEmfObservableInfo) {
+			descriptors.clear();
+			PropertiesSupport propertiesSupport = getPropertiesSupport(inputObservable);
+			for (PropertyInfo emfProperty : propertiesSupport.getProperties(elementType)) {
+				descriptors.add(createProperty(emfProperty.name, emfProperty.type));
+			}
+		}
+	}
 
-  private static Method m_setPropertyType;
+	private static Method m_setPropertyType;
 
-  public static PropertyDescriptor createProperty(String name, Class<?> type) throws Exception {
-    // create property
-    PropertyDescriptor property = new PropertyDescriptor(name, (Method) null, (Method) null) {
-      @Override
-      public int hashCode() {
-        return System.identityHashCode(this);
-      }
+	public static PropertyDescriptor createProperty(String name, Class<?> type) throws Exception {
+		// create property
+		PropertyDescriptor property = new PropertyDescriptor(name, (Method) null, (Method) null) {
+			@Override
+			public int hashCode() {
+				return System.identityHashCode(this);
+			}
 
-      @Override
-      public boolean equals(Object object) {
-        return this == object;
-      }
-    };
-    // prepare internal setter setPropertyType()
-    if (m_setPropertyType == null) {
-      m_setPropertyType =
-          PropertyDescriptor.class.getDeclaredMethod("setPropertyType", new Class[]{Class.class});
-      m_setPropertyType.setAccessible(true);
-    }
-    // configure property
-    m_setPropertyType.invoke(property, new Object[]{type});
-    return property;
-  }
+			@Override
+			public boolean equals(Object object) {
+				return this == object;
+			}
+		};
+		// prepare internal setter setPropertyType()
+		if (m_setPropertyType == null) {
+			m_setPropertyType =
+					PropertyDescriptor.class.getDeclaredMethod("setPropertyType", new Class[]{Class.class});
+			m_setPropertyType.setAccessible(true);
+		}
+		// configure property
+		m_setPropertyType.invoke(property, new Object[]{type});
+		return property;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static PropertiesSupport getPropertiesSupport(ObservableInfo observable) {
-    if (observable instanceof DetailEmfObservableInfo) {
-      DetailEmfObservableInfo detailObservable = (DetailEmfObservableInfo) observable;
-      return detailObservable.getPropertiesSupport();
-    }
-    EObjectBindableInfo eObject = (EObjectBindableInfo) observable.getBindableObject();
-    return eObject.getPropertiesSupport();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static PropertiesSupport getPropertiesSupport(ObservableInfo observable) {
+		if (observable instanceof DetailEmfObservableInfo) {
+			DetailEmfObservableInfo detailObservable = (DetailEmfObservableInfo) observable;
+			return detailObservable.getPropertiesSupport();
+		}
+		EObjectBindableInfo eObject = (EObjectBindableInfo) observable.getBindableObject();
+		return eObject.getPropertiesSupport();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Automatic Wizard
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void automaticWizardConfigure(ChooseClassAndPropertiesConfiguration configuration) {
-    configuration.setBaseClassName("org.eclipse.emf.ecore.EObject");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Automatic Wizard
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void automaticWizardConfigure(ChooseClassAndPropertiesConfiguration configuration) {
+		configuration.setBaseClassName("org.eclipse.emf.ecore.EObject");
+	}
 
-  @Override
-  public List<PropertyAdapter> automaticWizardGetProperties(IJavaProject javaProject,
-      ClassLoader classLoader,
-      Class<?> eObjectClass) throws Exception {
-    if (isEMFObject(classLoader, eObjectClass)) {
-      List<PropertyAdapter> properties = Lists.newArrayList();
-      List<VariableDeclarationFragment> fragments = Collections.emptyList();
-      PropertiesSupport propertiesSupport =
-          new PropertiesSupport(javaProject, classLoader, fragments);
-      //
-      for (PropertyInfo emfPropertyInfo : propertiesSupport.getProperties(eObjectClass)) {
-        properties.add(new PropertyAdapter(emfPropertyInfo.name, emfPropertyInfo.type));
-      }
-      return properties;
-    }
-    return null;
-  }
+	@Override
+	public List<PropertyAdapter> automaticWizardGetProperties(IJavaProject javaProject,
+			ClassLoader classLoader,
+			Class<?> eObjectClass) throws Exception {
+		if (isEMFObject(classLoader, eObjectClass)) {
+			List<PropertyAdapter> properties = Lists.newArrayList();
+			List<VariableDeclarationFragment> fragments = Collections.emptyList();
+			PropertiesSupport propertiesSupport =
+					new PropertiesSupport(javaProject, classLoader, fragments);
+			//
+			for (PropertyInfo emfPropertyInfo : propertiesSupport.getProperties(eObjectClass)) {
+				properties.add(new PropertyAdapter(emfPropertyInfo.name, emfPropertyInfo.type));
+			}
+			return properties;
+		}
+		return null;
+	}
 
-  @Override
-  public IAutomaticWizardStub automaticWizardCreateStub(IJavaProject javaProject,
-      ClassLoader classLoader,
-      Class<?> eObjectClass) throws Exception {
-    if (isEMFObject(classLoader, eObjectClass)) {
-      return new AutomaticWizardStub(javaProject, classLoader, eObjectClass);
-    }
-    return null;
-  }
+	@Override
+	public IAutomaticWizardStub automaticWizardCreateStub(IJavaProject javaProject,
+			ClassLoader classLoader,
+			Class<?> eObjectClass) throws Exception {
+		if (isEMFObject(classLoader, eObjectClass)) {
+			return new AutomaticWizardStub(javaProject, classLoader, eObjectClass);
+		}
+		return null;
+	}
 
-  private static boolean isEMFObject(ClassLoader classLoader, Class<?> eObjectClass) {
-    try {
-      Class<?> EObjectClass = classLoader.loadClass("org.eclipse.emf.ecore.EObject");
-      return eObjectClass.isInterface() && EObjectClass.isAssignableFrom(eObjectClass);
-    } catch (Throwable e) {
-      return false;
-    }
-  }
+	private static boolean isEMFObject(ClassLoader classLoader, Class<?> eObjectClass) {
+		try {
+			Class<?> EObjectClass = classLoader.loadClass("org.eclipse.emf.ecore.EObject");
+			return eObjectClass.isInterface() && EObjectClass.isAssignableFrom(eObjectClass);
+		} catch (Throwable e) {
+			return false;
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Controller
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean moveBean(IObserveInfo observe,
-      AstEditor controllerEditor,
-      TypeDeclaration controllerRootNode) throws Exception {
-    if (observe instanceof EObjectBindableInfo) {
-      EObjectBindableInfo eObject = (EObjectBindableInfo) observe;
-      VariableDeclarationFragment fragment = eObject.getFragment();
-      FieldDeclaration fieldDeclaration = AstNodeUtils.getEnclosingFieldDeclaration(fragment);
-      String modifier =
-          Modifier.ModifierKeyword.fromFlagValue(fieldDeclaration.getModifiers()).toString();
-      //
-      controllerEditor.addFieldDeclaration(modifier
-          + " "
-          + eObject.getObjectType().getName()
-          + " "
-          + fragment.getName().getIdentifier()
-          + ";", new BodyDeclarationTarget(controllerRootNode, true));
-      //
-      return true;
-    }
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Controller
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean moveBean(IObserveInfo observe,
+			AstEditor controllerEditor,
+			TypeDeclaration controllerRootNode) throws Exception {
+		if (observe instanceof EObjectBindableInfo) {
+			EObjectBindableInfo eObject = (EObjectBindableInfo) observe;
+			VariableDeclarationFragment fragment = eObject.getFragment();
+			FieldDeclaration fieldDeclaration = AstNodeUtils.getEnclosingFieldDeclaration(fragment);
+			String modifier =
+					Modifier.ModifierKeyword.fromFlagValue(fieldDeclaration.getModifiers()).toString();
+			//
+			controllerEditor.addFieldDeclaration(modifier
+					+ " "
+					+ eObject.getObjectType().getName()
+					+ " "
+					+ fragment.getName().getIdentifier()
+					+ ";", new BodyDeclarationTarget(controllerRootNode, true));
+			//
+			return true;
+		}
+		return false;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Preferences
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void confgureCodeGenerationPreferencePage(Composite parent, DataBindManager bindManager)
-      throws Exception {
-    Button generateCodeFor25Button = new Button(parent, SWT.CHECK);
-    GridDataFactory.create(generateCodeFor25Button).fillH().grabH();
-    generateCodeFor25Button.setText(Messages.GlobalObservableFactory_for25Button);
-    //
-    bindManager.bind(
-        new CheckButtonEditor(generateCodeFor25Button),
-        new BooleanPreferenceProvider(Activator.getStore(),
-            IPreferenceConstants.GENERATE_CODE_FOR_VERSION_2_5));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Preferences
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void confgureCodeGenerationPreferencePage(Composite parent, DataBindManager bindManager)
+			throws Exception {
+		Button generateCodeFor25Button = new Button(parent, SWT.CHECK);
+		GridDataFactory.create(generateCodeFor25Button).fillH().grabH();
+		generateCodeFor25Button.setText(Messages.GlobalObservableFactory_for25Button);
+		//
+		bindManager.bind(
+				new CheckButtonEditor(generateCodeFor25Button),
+				new BooleanPreferenceProvider(Activator.getStore(),
+						IPreferenceConstants.GENERATE_CODE_FOR_VERSION_2_5));
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/LocalModelCreator.java b/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/LocalModelCreator.java
index 6a9c43cfa..a74e48d75 100644
--- a/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/LocalModelCreator.java
+++ b/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/LocalModelCreator.java
@@ -17,20 +17,20 @@
  * @coverage bindings.rcp.emf.model
  */
 final class LocalModelCreator extends ModelCreator<EmfObserveTypeContainer> {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public LocalModelCreator(ILocalModelCreator creator) {
-    super(creator);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public LocalModelCreator(ILocalModelCreator creator) {
+		super(creator);
+	}
 
-  public LocalModelCreator(int startIndex, ILocalModelCreator creator) {
-    super(startIndex, creator);
-  }
+	public LocalModelCreator(int startIndex, ILocalModelCreator creator) {
+		super(startIndex, creator);
+	}
 
-  public LocalModelCreator(int startIndex0, int startIndex1, ILocalModelCreator creator) {
-    super(startIndex0, startIndex1, creator);
-  }
+	public LocalModelCreator(int startIndex0, int startIndex1, ILocalModelCreator creator) {
+		super(startIndex0, startIndex1, creator);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/bindables/DirectPropertyBindableInfo.java b/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/bindables/DirectPropertyBindableInfo.java
index 9be129c86..469c14801 100644
--- a/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/bindables/DirectPropertyBindableInfo.java
+++ b/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/bindables/DirectPropertyBindableInfo.java
@@ -29,55 +29,55 @@
  * @coverage bindings.rcp.emf.model
  */
 public class DirectPropertyBindableInfo extends EPropertyBindableInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DirectPropertyBindableInfo(Class<?> objectType) {
-    super(objectType, "", new SimpleObservePresentation(DirectObservableInfo.DETAIL_PROPERTY_NAME,
-        TypeImageProvider.DIRECT_IMAGE));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DirectPropertyBindableInfo(Class<?> objectType) {
+		super(objectType, "", new SimpleObservePresentation(DirectObservableInfo.DETAIL_PROPERTY_NAME,
+				TypeImageProvider.DIRECT_IMAGE));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Creation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final IObservableFactory m_observableFactory = new IObservableFactory() {
-    @Override
-    public Type getType() throws Exception {
-      return Type.Detail;
-    }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Creation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final IObservableFactory m_observableFactory = new IObservableFactory() {
+		@Override
+		public Type getType() throws Exception {
+			return Type.Detail;
+		}
 
-    @Override
-    public ObservableInfo createObservable(BindableInfo object,
-        BindableInfo property,
-        Type type,
-        boolean version_1_3) throws Exception {
-      EObjectBindableInfo eObject = (EObjectBindableInfo) object;
-      PropertiesSupport propertiesSupport = eObject.getPropertiesSupport();
-      // create master
-      DirectObservableInfo masterObservable = new DirectObservableInfo(object, property);
-      // create detail
-      ObservableInfo observable = null;
-      switch (type) {
-        case OnlyValue :
-          observable = new DetailValueEmfObservableInfo(masterObservable, propertiesSupport);
-          observable.setCodeSupport(new EmfObservableDetailValueCodeSupport());
-          break;
-        case OnlyList :
-          observable = new DetailListEmfObservableInfo(masterObservable, propertiesSupport);
-          observable.setCodeSupport(new EmfObservableDetailListCodeSupport());
-          break;
-      }
-      Assert.isNotNull(observable);
-      return observable;
-    }
-  };
+		@Override
+		public ObservableInfo createObservable(BindableInfo object,
+				BindableInfo property,
+				Type type,
+				boolean version_1_3) throws Exception {
+			EObjectBindableInfo eObject = (EObjectBindableInfo) object;
+			PropertiesSupport propertiesSupport = eObject.getPropertiesSupport();
+			// create master
+			DirectObservableInfo masterObservable = new DirectObservableInfo(object, property);
+			// create detail
+			ObservableInfo observable = null;
+			switch (type) {
+			case OnlyValue :
+				observable = new DetailValueEmfObservableInfo(masterObservable, propertiesSupport);
+				observable.setCodeSupport(new EmfObservableDetailValueCodeSupport());
+				break;
+			case OnlyList :
+				observable = new DetailListEmfObservableInfo(masterObservable, propertiesSupport);
+				observable.setCodeSupport(new EmfObservableDetailListCodeSupport());
+				break;
+			}
+			Assert.isNotNull(observable);
+			return observable;
+		}
+	};
 
-  @Override
-  public IObservableFactory getObservableFactory() throws Exception {
-    return m_observableFactory;
-  }
+	@Override
+	public IObservableFactory getObservableFactory() throws Exception {
+		return m_observableFactory;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/bindables/EObjectBindableInfo.java b/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/bindables/EObjectBindableInfo.java
index 5fe101049..2d326373d 100644
--- a/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/bindables/EObjectBindableInfo.java
+++ b/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/bindables/EObjectBindableInfo.java
@@ -39,119 +39,119 @@
  * @coverage bindings.rcp.emf.model
  */
 public final class EObjectBindableInfo extends BindableInfo {
-  private final VariableDeclarationFragment m_fragment;
-  private final PropertiesSupport m_propertiesSupport;
-  private final IObservePresentation m_presentation;
-  private final List<EPropertyBindableInfo> m_properties = Lists.newArrayList();
+	private final VariableDeclarationFragment m_fragment;
+	private final PropertiesSupport m_propertiesSupport;
+	private final IObservePresentation m_presentation;
+	private final List<EPropertyBindableInfo> m_properties = Lists.newArrayList();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public EObjectBindableInfo(Class<?> objectType,
-      VariableDeclarationFragment fragment,
-      PropertiesSupport propertiesSupport,
-      IModelResolver resolver) throws Exception {
-    super(objectType, new FragmentReferenceProvider(fragment));
-    setBindingDecoration(SwtResourceManager.TOP_RIGHT);
-    m_fragment = fragment;
-    m_propertiesSupport = propertiesSupport;
-    m_presentation = new EObjectObservePresentation(this);
-    // add properties
-    for (PropertyInfo propertyInfo : propertiesSupport.getProperties(objectType)) {
-      m_properties.add(new EPropertyBindableInfo(propertiesSupport,
-          null,
-          propertyInfo.type,
-          propertyInfo.name,
-          propertyInfo.reference));
-    }
-    // check observable object
-    if (CoreUtils.isAssignableFrom(m_propertiesSupport.getIObservableValue(), objectType)) {
-      DirectPropertyBindableInfo property = new DirectPropertyBindableInfo(objectType);
-      m_properties.add(property);
-      //
-      if (resolver != null) {
-        DirectObservableInfo directObservable = new DirectObservableInfo(this, property);
-        resolver.addModelSupport(new DirectFieldModelSupport(directObservable));
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public EObjectBindableInfo(Class<?> objectType,
+			VariableDeclarationFragment fragment,
+			PropertiesSupport propertiesSupport,
+			IModelResolver resolver) throws Exception {
+		super(objectType, new FragmentReferenceProvider(fragment));
+		setBindingDecoration(SwtResourceManager.TOP_RIGHT);
+		m_fragment = fragment;
+		m_propertiesSupport = propertiesSupport;
+		m_presentation = new EObjectObservePresentation(this);
+		// add properties
+		for (PropertyInfo propertyInfo : propertiesSupport.getProperties(objectType)) {
+			m_properties.add(new EPropertyBindableInfo(propertiesSupport,
+					null,
+					propertyInfo.type,
+					propertyInfo.name,
+					propertyInfo.reference));
+		}
+		// check observable object
+		if (CoreUtils.isAssignableFrom(m_propertiesSupport.getIObservableValue(), objectType)) {
+			DirectPropertyBindableInfo property = new DirectPropertyBindableInfo(objectType);
+			m_properties.add(property);
+			//
+			if (resolver != null) {
+				DirectObservableInfo directObservable = new DirectObservableInfo(this, property);
+				resolver.addModelSupport(new DirectFieldModelSupport(directObservable));
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public VariableDeclarationFragment getFragment() {
-    return m_fragment;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public VariableDeclarationFragment getFragment() {
+		return m_fragment;
+	}
 
-  public PropertiesSupport getPropertiesSupport() {
-    return m_propertiesSupport;
-  }
+	public PropertiesSupport getPropertiesSupport() {
+		return m_propertiesSupport;
+	}
 
-  @Override
-  public EPropertyBindableInfo resolvePropertyReference(String reference) throws Exception {
-    if (reference.startsWith("org.eclipse.emf.databinding.FeaturePath.fromList(")) {
-      reference = StringUtils.substringBetween(reference, "(", ")");
-      String[] references = StringUtils.split(reference, ", ");
-      //
-      for (EPropertyBindableInfo property : m_properties) {
-        if (references[0].equals(property.getReference())) {
-          return property.resolvePropertyReference(references, 1);
-        }
-      }
-    } else {
-      for (EPropertyBindableInfo property : m_properties) {
-        if (reference.equals(property.getReference())) {
-          return property;
-        }
-      }
-    }
-    return null;
-  }
+	@Override
+	public EPropertyBindableInfo resolvePropertyReference(String reference) throws Exception {
+		if (reference.startsWith("org.eclipse.emf.databinding.FeaturePath.fromList(")) {
+			reference = StringUtils.substringBetween(reference, "(", ")");
+			String[] references = StringUtils.split(reference, ", ");
+			//
+			for (EPropertyBindableInfo property : m_properties) {
+				if (references[0].equals(property.getReference())) {
+					return property.resolvePropertyReference(references, 1);
+				}
+			}
+		} else {
+			for (EPropertyBindableInfo property : m_properties) {
+				if (reference.equals(property.getReference())) {
+					return property;
+				}
+			}
+		}
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Hierarchy
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public IObserveInfo getParent() {
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Hierarchy
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public IObserveInfo getParent() {
+		return null;
+	}
 
-  @Override
-  protected List<BindableInfo> getChildren() {
-    return Collections.emptyList();
-  }
+	@Override
+	protected List<BindableInfo> getChildren() {
+		return Collections.emptyList();
+	}
 
-  @Override
-  public List<IObserveInfo> getChildren(ChildrenContext context) {
-    if (context == ChildrenContext.ChildrenForPropertiesTable) {
-      return CoreUtils.cast(m_properties);
-    }
-    return Collections.emptyList();
-  }
+	@Override
+	public List<IObserveInfo> getChildren(ChildrenContext context) {
+		if (context == ChildrenContext.ChildrenForPropertiesTable) {
+			return CoreUtils.cast(m_properties);
+		}
+		return Collections.emptyList();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public IObservePresentation getPresentation() {
-    return m_presentation;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public IObservePresentation getPresentation() {
+		return m_presentation;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ObserveType
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public ObserveType getType() {
-    return EmfObserveTypeContainer.TYPE;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ObserveType
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public ObserveType getType() {
+		return EmfObserveTypeContainer.TYPE;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/bindables/EObjectObservePresentation.java b/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/bindables/EObjectObservePresentation.java
index a12754e72..9ecd10c8e 100644
--- a/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/bindables/EObjectObservePresentation.java
+++ b/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/bindables/EObjectObservePresentation.java
@@ -24,42 +24,42 @@
  * @coverage bindings.rcp.emf.model
  */
 public final class EObjectObservePresentation extends ObservePresentation {
-  private static final Image IMAGE = Activator.getImage("EObject.gif");
-  private final EObjectBindableInfo m_eObject;
+	private static final Image IMAGE = Activator.getImage("EObject.gif");
+	private final EObjectBindableInfo m_eObject;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public EObjectObservePresentation(EObjectBindableInfo eObject) {
-    m_eObject = eObject;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public EObjectObservePresentation(EObjectBindableInfo eObject) {
+		m_eObject = eObject;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ObservePresentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Image getInternalImage() throws Exception {
-    return IMAGE;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ObservePresentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Image getInternalImage() throws Exception {
+		return IMAGE;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IObservePresentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getText() throws Exception {
-    return m_eObject.getReference()
-        + " - "
-        + ClassUtils.getShortClassName(m_eObject.getObjectType());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IObservePresentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getText() throws Exception {
+		return m_eObject.getReference()
+				+ " - "
+				+ ClassUtils.getShortClassName(m_eObject.getObjectType());
+	}
 
-  @Override
-  public String getTextForBinding() throws Exception {
-    return m_eObject.getReference();
-  }
+	@Override
+	public String getTextForBinding() throws Exception {
+		return m_eObject.getReference();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/bindables/EPropertyBindableInfo.java b/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/bindables/EPropertyBindableInfo.java
index 721e49ac0..cb852f628 100644
--- a/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/bindables/EPropertyBindableInfo.java
+++ b/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/bindables/EPropertyBindableInfo.java
@@ -45,211 +45,211 @@
  * @coverage bindings.rcp.emf.model
  */
 public class EPropertyBindableInfo extends BindableInfo implements IObserveDecoration {
-  private PropertiesSupport m_propertiesSupport;
-  private EPropertyBindableInfo m_parent;
-  private List<EPropertyBindableInfo> m_properties;
-  private final IObservePresentation m_presentation;
-  private final IObserveDecorator m_decorator;
-  private String m_internalReference;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public EPropertyBindableInfo(PropertiesSupport propertiesSupport,
-      EPropertyBindableInfo parent,
-      Class<?> objectType,
-      String text,
-      String reference) {
-    this(objectType, reference, new SimpleObservePresentation(text,
-        TypeImageProvider.getImage(objectType)));
-    m_propertiesSupport = propertiesSupport;
-    m_parent = parent;
-    m_internalReference = reference;
-  }
-
-  protected EPropertyBindableInfo(Class<?> objectType,
-      String reference,
-      IObservePresentation presentation) {
-    super(objectType, reference);
-    m_presentation = presentation;
-    m_decorator = BeanSupport.getDecorator(objectType);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected EPropertyBindableInfo resolvePropertyReference(String[] reference, int index)
-      throws Exception {
-    if (reference.length == index) {
-      return this;
-    }
-    getChildren(ChildrenContext.ChildrenForPropertiesTable);
-    String referenceValue = reference[index];
-    for (EPropertyBindableInfo property : m_properties) {
-      if (referenceValue.equals(property.m_internalReference)) {
-        return property.resolvePropertyReference(reference, index + 1);
-      }
-    }
-    return null;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Hierarchy
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public IObserveInfo getParent() {
-    return m_parent;
-  }
-
-  @Override
-  protected List<BindableInfo> getChildren() {
-    return Collections.emptyList();
-  }
-
-  @Override
-  public List<IObserveInfo> getChildren(ChildrenContext context) {
-    if (context == ChildrenContext.ChildrenForPropertiesTable
-        && m_propertiesSupport.availableEMFProperties()) {
-      if (m_properties == null) {
-        try {
-          // add properties
-          if (m_propertiesSupport != null
-              && m_propertiesSupport.getEObjectClass().isAssignableFrom(getObjectType())) {
-            List<PropertyInfo> properties = m_propertiesSupport.getProperties(getObjectType());
-            if (properties.isEmpty()) {
-              m_properties = Collections.emptyList();
-            } else {
-              StringBuffer reference = new StringBuffer();
-              EPropertyBindableInfo eProperty = this;
-              do {
-                if (reference.length() > 0) {
-                  reference.insert(0, ", ");
-                }
-                reference.insert(0, eProperty.m_internalReference);
-                eProperty = eProperty.m_parent;
-              } while (eProperty != null);
-              reference.insert(0, "org.eclipse.emf.databinding.FeaturePath.fromList(");
-              reference.append(", ");
-              //
-              m_properties = Lists.newArrayList();
-              for (PropertyInfo propertyInfo : properties) {
-                EPropertyBindableInfo property =
-                    new EPropertyBindableInfo(m_propertiesSupport,
-                        this,
-                        propertyInfo.type,
-                        propertyInfo.name,
-                        reference.toString() + propertyInfo.reference + ")");
-                property.m_internalReference = propertyInfo.reference;
-                m_properties.add(property);
-              }
-            }
-          } else {
-            m_properties = Collections.emptyList();
-          }
-        } catch (Throwable e) {
-          DesignerPlugin.log(e);
-          m_properties = Collections.emptyList();
-        }
-      }
-      return CoreUtils.cast(m_properties);
-    }
-    return Collections.emptyList();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public IObservePresentation getPresentation() {
-    return m_presentation;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IObserveDecoration
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public IObserveDecorator getDecorator() {
-    return m_decorator;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ObserveType
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public ObserveType getType() {
-    return EmfObserveTypeContainer.TYPE;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Creation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final IObservableFactory m_observableFactory = new IObservableFactory() {
-    private Type m_type;
-
-    @Override
-    public Type getType() throws Exception {
-      if (m_type == null) {
-        // calculate type
-        if (List.class.isAssignableFrom(getObjectType())) {
-          m_type = Type.List;
-        } else {
-          m_type = Type.Any;
-        }
-      }
-      return m_type;
-    }
-
-    @Override
-    public ObservableInfo createObservable(BindableInfo object,
-        BindableInfo eProperty,
-        Type type,
-        boolean version_1_3) throws Exception {
-      Assert.isNotNull(type);
-      Assert.isTrue(eProperty == EPropertyBindableInfo.this);
-      EObjectBindableInfo eObject = (EObjectBindableInfo) object;
-      boolean version_2_5 = m_parent != null || eObject.getPropertiesSupport().isEMFProperties();
-      // create observable
-      ObservableInfo observable = null;
-      switch (type) {
-        case OnlyValue :
-          observable = new ValueEmfObservableInfo(eObject, EPropertyBindableInfo.this);
-          if (version_2_5) {
-            observable.setCodeSupport(new EmfValuePropertyCodeSupport());
-          } else {
-            observable.setCodeSupport(new EmfObservableValueCodeSupport());
-          }
-          break;
-        case OnlyList :
-          observable = new ListEmfObservableInfo(eObject, EPropertyBindableInfo.this);
-          if (version_2_5) {
-            observable.setCodeSupport(new EmfListPropertyCodeSupport());
-          } else {
-            observable.setCodeSupport(new EmfObservableListCodeSupport());
-          }
-          break;
-      }
-      //
-      Assert.isNotNull(observable);
-      return observable;
-    }
-  };
-
-  @Override
-  public IObservableFactory getObservableFactory() throws Exception {
-    return m_observableFactory;
-  }
+	private PropertiesSupport m_propertiesSupport;
+	private EPropertyBindableInfo m_parent;
+	private List<EPropertyBindableInfo> m_properties;
+	private final IObservePresentation m_presentation;
+	private final IObserveDecorator m_decorator;
+	private String m_internalReference;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public EPropertyBindableInfo(PropertiesSupport propertiesSupport,
+			EPropertyBindableInfo parent,
+			Class<?> objectType,
+			String text,
+			String reference) {
+		this(objectType, reference, new SimpleObservePresentation(text,
+				TypeImageProvider.getImage(objectType)));
+		m_propertiesSupport = propertiesSupport;
+		m_parent = parent;
+		m_internalReference = reference;
+	}
+
+	protected EPropertyBindableInfo(Class<?> objectType,
+			String reference,
+			IObservePresentation presentation) {
+		super(objectType, reference);
+		m_presentation = presentation;
+		m_decorator = BeanSupport.getDecorator(objectType);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected EPropertyBindableInfo resolvePropertyReference(String[] reference, int index)
+			throws Exception {
+		if (reference.length == index) {
+			return this;
+		}
+		getChildren(ChildrenContext.ChildrenForPropertiesTable);
+		String referenceValue = reference[index];
+		for (EPropertyBindableInfo property : m_properties) {
+			if (referenceValue.equals(property.m_internalReference)) {
+				return property.resolvePropertyReference(reference, index + 1);
+			}
+		}
+		return null;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Hierarchy
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public IObserveInfo getParent() {
+		return m_parent;
+	}
+
+	@Override
+	protected List<BindableInfo> getChildren() {
+		return Collections.emptyList();
+	}
+
+	@Override
+	public List<IObserveInfo> getChildren(ChildrenContext context) {
+		if (context == ChildrenContext.ChildrenForPropertiesTable
+				&& m_propertiesSupport.availableEMFProperties()) {
+			if (m_properties == null) {
+				try {
+					// add properties
+					if (m_propertiesSupport != null
+							&& m_propertiesSupport.getEObjectClass().isAssignableFrom(getObjectType())) {
+						List<PropertyInfo> properties = m_propertiesSupport.getProperties(getObjectType());
+						if (properties.isEmpty()) {
+							m_properties = Collections.emptyList();
+						} else {
+							StringBuffer reference = new StringBuffer();
+							EPropertyBindableInfo eProperty = this;
+							do {
+								if (reference.length() > 0) {
+									reference.insert(0, ", ");
+								}
+								reference.insert(0, eProperty.m_internalReference);
+								eProperty = eProperty.m_parent;
+							} while (eProperty != null);
+							reference.insert(0, "org.eclipse.emf.databinding.FeaturePath.fromList(");
+							reference.append(", ");
+							//
+							m_properties = Lists.newArrayList();
+							for (PropertyInfo propertyInfo : properties) {
+								EPropertyBindableInfo property =
+										new EPropertyBindableInfo(m_propertiesSupport,
+												this,
+												propertyInfo.type,
+												propertyInfo.name,
+												reference.toString() + propertyInfo.reference + ")");
+								property.m_internalReference = propertyInfo.reference;
+								m_properties.add(property);
+							}
+						}
+					} else {
+						m_properties = Collections.emptyList();
+					}
+				} catch (Throwable e) {
+					DesignerPlugin.log(e);
+					m_properties = Collections.emptyList();
+				}
+			}
+			return CoreUtils.cast(m_properties);
+		}
+		return Collections.emptyList();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public IObservePresentation getPresentation() {
+		return m_presentation;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IObserveDecoration
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public IObserveDecorator getDecorator() {
+		return m_decorator;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ObserveType
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public ObserveType getType() {
+		return EmfObserveTypeContainer.TYPE;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Creation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final IObservableFactory m_observableFactory = new IObservableFactory() {
+		private Type m_type;
+
+		@Override
+		public Type getType() throws Exception {
+			if (m_type == null) {
+				// calculate type
+				if (List.class.isAssignableFrom(getObjectType())) {
+					m_type = Type.List;
+				} else {
+					m_type = Type.Any;
+				}
+			}
+			return m_type;
+		}
+
+		@Override
+		public ObservableInfo createObservable(BindableInfo object,
+				BindableInfo eProperty,
+				Type type,
+				boolean version_1_3) throws Exception {
+			Assert.isNotNull(type);
+			Assert.isTrue(eProperty == EPropertyBindableInfo.this);
+			EObjectBindableInfo eObject = (EObjectBindableInfo) object;
+			boolean version_2_5 = m_parent != null || eObject.getPropertiesSupport().isEMFProperties();
+			// create observable
+			ObservableInfo observable = null;
+			switch (type) {
+			case OnlyValue :
+				observable = new ValueEmfObservableInfo(eObject, EPropertyBindableInfo.this);
+				if (version_2_5) {
+					observable.setCodeSupport(new EmfValuePropertyCodeSupport());
+				} else {
+					observable.setCodeSupport(new EmfObservableValueCodeSupport());
+				}
+				break;
+			case OnlyList :
+				observable = new ListEmfObservableInfo(eObject, EPropertyBindableInfo.this);
+				if (version_2_5) {
+					observable.setCodeSupport(new EmfListPropertyCodeSupport());
+				} else {
+					observable.setCodeSupport(new EmfObservableListCodeSupport());
+				}
+				break;
+			}
+			//
+			Assert.isNotNull(observable);
+			return observable;
+		}
+	};
+
+	@Override
+	public IObservableFactory getObservableFactory() throws Exception {
+		return m_observableFactory;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/bindables/EmfCodeGenUtil.java b/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/bindables/EmfCodeGenUtil.java
index 5787f0e5e..83dc6ee5c 100644
--- a/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/bindables/EmfCodeGenUtil.java
+++ b/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/bindables/EmfCodeGenUtil.java
@@ -23,131 +23,131 @@
  * @coverage bindings.rcp.emf.model
  */
 public final class EmfCodeGenUtil {
-  public static String unformat(String emfClassName) {
-    int removeIndex = 0;
-    for (int length = emfClassName.length(); removeIndex < length; removeIndex++) {
-      if (emfClassName.charAt(removeIndex) != '_') {
-        break;
-      }
-    }
-    int removeLength = emfClassName.length();
-    for (int i = removeLength - 1; i >= 0; i--) {
-      if (emfClassName.charAt(i) == '_') {
-        removeLength--;
-      } else {
-        break;
-      }
-    }
-    if (removeIndex > 0 || removeLength < emfClassName.length()) {
-      emfClassName = emfClassName.substring(removeIndex, removeLength);
-    }
-    emfClassName = StringUtils.capitalize(emfClassName.toLowerCase());
-    StringBuffer result = new StringBuffer();
-    for (int i = 0, length = emfClassName.length(); i < length; i++) {
-      char ch = emfClassName.charAt(i);
-      if (ch == '_') {
-        result.append(Character.toUpperCase(emfClassName.charAt(i + 1)));
-        i++;
-      } else {
-        result.append(ch);
-      }
-    }
-    return result.toString();
-  }
+	public static String unformat(String emfClassName) {
+		int removeIndex = 0;
+		for (int length = emfClassName.length(); removeIndex < length; removeIndex++) {
+			if (emfClassName.charAt(removeIndex) != '_') {
+				break;
+			}
+		}
+		int removeLength = emfClassName.length();
+		for (int i = removeLength - 1; i >= 0; i--) {
+			if (emfClassName.charAt(i) == '_') {
+				removeLength--;
+			} else {
+				break;
+			}
+		}
+		if (removeIndex > 0 || removeLength < emfClassName.length()) {
+			emfClassName = emfClassName.substring(removeIndex, removeLength);
+		}
+		emfClassName = StringUtils.capitalize(emfClassName.toLowerCase());
+		StringBuffer result = new StringBuffer();
+		for (int i = 0, length = emfClassName.length(); i < length; i++) {
+			char ch = emfClassName.charAt(i);
+			if (ch == '_') {
+				result.append(Character.toUpperCase(emfClassName.charAt(i + 1)));
+				i++;
+			} else {
+				result.append(ch);
+			}
+		}
+		return result.toString();
+	}
 
-  /**
-   * Formats a name by parsing it into words separated by underscores and/or mixed-casing and then
-   * recombining them using the specified separator. A prefix can also be given to be recognized as
-   * a separate word or to be trimmed. Leading underscores can be ignored or can cause a leading
-   * separator to be prepended.
-   *
-   * @since 2.2
-   */
-  public static String format(String name,
-      char separator,
-      String prefix,
-      boolean includePrefix,
-      boolean includeLeadingSeparator) {
-    String leadingSeparators = includeLeadingSeparator ? getLeadingSeparators(name, '_') : null;
-    if (leadingSeparators != null) {
-      name = name.substring(leadingSeparators.length());
-    }
-    List<String> parsedName = new ArrayList<String>();
-    if (prefix != null
-        && name.startsWith(prefix)
-        && name.length() > prefix.length()
-        && Character.isUpperCase(name.charAt(prefix.length()))) {
-      name = name.substring(prefix.length());
-      if (includePrefix) {
-        parsedName = parseName(prefix, '_');
-      }
-    }
-    if (name.length() != 0) {
-      parsedName.addAll(parseName(name, '_'));
-    }
-    StringBuilder result = new StringBuilder();
-    for (Iterator<String> nameIter = parsedName.iterator(); nameIter.hasNext();) {
-      String nameComponent = nameIter.next();
-      result.append(nameComponent);
-      if (nameIter.hasNext() && nameComponent.length() > 1) {
-        result.append(separator);
-      }
-    }
-    if (result.length() == 0 && prefix != null) {
-      result.append(prefix);
-    }
-    return leadingSeparators != null ? "_" + result.toString() : result.toString();
-  }
+	/**
+	 * Formats a name by parsing it into words separated by underscores and/or mixed-casing and then
+	 * recombining them using the specified separator. A prefix can also be given to be recognized as
+	 * a separate word or to be trimmed. Leading underscores can be ignored or can cause a leading
+	 * separator to be prepended.
+	 *
+	 * @since 2.2
+	 */
+	public static String format(String name,
+			char separator,
+			String prefix,
+			boolean includePrefix,
+			boolean includeLeadingSeparator) {
+		String leadingSeparators = includeLeadingSeparator ? getLeadingSeparators(name, '_') : null;
+		if (leadingSeparators != null) {
+			name = name.substring(leadingSeparators.length());
+		}
+		List<String> parsedName = new ArrayList<String>();
+		if (prefix != null
+				&& name.startsWith(prefix)
+				&& name.length() > prefix.length()
+				&& Character.isUpperCase(name.charAt(prefix.length()))) {
+			name = name.substring(prefix.length());
+			if (includePrefix) {
+				parsedName = parseName(prefix, '_');
+			}
+		}
+		if (name.length() != 0) {
+			parsedName.addAll(parseName(name, '_'));
+		}
+		StringBuilder result = new StringBuilder();
+		for (Iterator<String> nameIter = parsedName.iterator(); nameIter.hasNext();) {
+			String nameComponent = nameIter.next();
+			result.append(nameComponent);
+			if (nameIter.hasNext() && nameComponent.length() > 1) {
+				result.append(separator);
+			}
+		}
+		if (result.length() == 0 && prefix != null) {
+			result.append(prefix);
+		}
+		return leadingSeparators != null ? "_" + result.toString() : result.toString();
+	}
 
-  private static String getLeadingSeparators(String name, char separator) {
-    int i = 0;
-    for (int len = name.length(); i < len && name.charAt(i) == separator; i++) {
-      // the for loop's condition finds the separator
-    }
-    return i != 0 ? name.substring(0, i) : null;
-  }
+	private static String getLeadingSeparators(String name, char separator) {
+		int i = 0;
+		for (int len = name.length(); i < len && name.charAt(i) == separator; i++) {
+			// the for loop's condition finds the separator
+		}
+		return i != 0 ? name.substring(0, i) : null;
+	}
 
-  /**
-   * This method breaks sourceName into words delimited by separator and/or mixed-case naming.
-   */
-  public static List<String> parseName(String sourceName, char separator) {
-    List<String> result = new ArrayList<String>();
-    if (sourceName != null) {
-      StringBuilder currentWord = new StringBuilder();
-      boolean lastIsLower = false;
-      for (int index = 0, length = sourceName.length(); index < length; ++index) {
-        char curChar = sourceName.charAt(index);
-        if (Character.isUpperCase(curChar)
-            || !lastIsLower
-            && Character.isDigit(curChar)
-            || curChar == separator) {
-          if (lastIsLower
-              && currentWord.length() > 1
-              || curChar == separator
-              && currentWord.length() > 0) {
-            result.add(currentWord.toString());
-            currentWord = new StringBuilder();
-          }
-          lastIsLower = false;
-        } else {
-          if (!lastIsLower) {
-            int currentWordLength = currentWord.length();
-            if (currentWordLength > 1) {
-              char lastChar = currentWord.charAt(--currentWordLength);
-              currentWord.setLength(currentWordLength);
-              result.add(currentWord.toString());
-              currentWord = new StringBuilder();
-              currentWord.append(lastChar);
-            }
-          }
-          lastIsLower = true;
-        }
-        if (curChar != separator) {
-          currentWord.append(curChar);
-        }
-      }
-      result.add(currentWord.toString());
-    }
-    return result;
-  }
+	/**
+	 * This method breaks sourceName into words delimited by separator and/or mixed-case naming.
+	 */
+	public static List<String> parseName(String sourceName, char separator) {
+		List<String> result = new ArrayList<String>();
+		if (sourceName != null) {
+			StringBuilder currentWord = new StringBuilder();
+			boolean lastIsLower = false;
+			for (int index = 0, length = sourceName.length(); index < length; ++index) {
+				char curChar = sourceName.charAt(index);
+				if (Character.isUpperCase(curChar)
+						|| !lastIsLower
+						&& Character.isDigit(curChar)
+						|| curChar == separator) {
+					if (lastIsLower
+							&& currentWord.length() > 1
+							|| curChar == separator
+							&& currentWord.length() > 0) {
+						result.add(currentWord.toString());
+						currentWord = new StringBuilder();
+					}
+					lastIsLower = false;
+				} else {
+					if (!lastIsLower) {
+						int currentWordLength = currentWord.length();
+						if (currentWordLength > 1) {
+							char lastChar = currentWord.charAt(--currentWordLength);
+							currentWord.setLength(currentWordLength);
+							result.add(currentWord.toString());
+							currentWord = new StringBuilder();
+							currentWord.append(lastChar);
+						}
+					}
+					lastIsLower = true;
+				}
+				if (curChar != separator) {
+					currentWord.append(curChar);
+				}
+			}
+			result.add(currentWord.toString());
+		}
+		return result;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/bindables/HierarchySupport.java b/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/bindables/HierarchySupport.java
index 22747c10c..0e4e46042 100644
--- a/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/bindables/HierarchySupport.java
+++ b/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/bindables/HierarchySupport.java
@@ -32,135 +32,135 @@
  * @coverage bindings.rcp.emf.model
  */
 public class HierarchySupport {
-  private final List<HierarchyElement> m_roots = Lists.newArrayList();
-  private final Map<String, HierarchyElement> m_nameToElement = Maps.newHashMap();
-  private final PropertiesSupport m_propertiesSupport;
-  private final boolean m_addProperties;
+	private final List<HierarchyElement> m_roots = Lists.newArrayList();
+	private final Map<String, HierarchyElement> m_nameToElement = Maps.newHashMap();
+	private final PropertiesSupport m_propertiesSupport;
+	private final boolean m_addProperties;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public HierarchySupport(PropertiesSupport propertiesSupport, boolean addProperties) {
-    m_propertiesSupport = propertiesSupport;
-    m_addProperties = addProperties;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public HierarchySupport(PropertiesSupport propertiesSupport, boolean addProperties) {
+		m_propertiesSupport = propertiesSupport;
+		m_addProperties = addProperties;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void addClass(ClassInfo classInfo) throws Exception {
-    loadClass(classInfo);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void addClass(ClassInfo classInfo) throws Exception {
+		loadClass(classInfo);
+	}
 
-  private HierarchyElement loadClass(ClassInfo classInfo) throws Exception {
-    if (classInfo.thisClass == null) {
-      return null;
-    }
-    String className = classInfo.thisClass.getName();
-    HierarchyElement element = m_nameToElement.get(className);
-    if (element == null) {
-      element = loadClassHierarchy(classInfo.thisClass);
-    }
-    element.classInfo = classInfo;
-    if (m_addProperties) {
-      element.properties.addAll(classInfo.properties);
-    }
-    return element;
-  }
+	private HierarchyElement loadClass(ClassInfo classInfo) throws Exception {
+		if (classInfo.thisClass == null) {
+			return null;
+		}
+		String className = classInfo.thisClass.getName();
+		HierarchyElement element = m_nameToElement.get(className);
+		if (element == null) {
+			element = loadClassHierarchy(classInfo.thisClass);
+		}
+		element.classInfo = classInfo;
+		if (m_addProperties) {
+			element.properties.addAll(classInfo.properties);
+		}
+		return element;
+	}
 
-  private HierarchyElement loadClassHierarchy(Class<?> clazz) throws Exception {
-    HierarchyElement element = new HierarchyElement();
-    String className = clazz.getName();
-    String packageName = CodeUtils.getPackage(className);
-    m_nameToElement.put(className, element);
-    for (Class<?> superClass : clazz.getInterfaces()) {
-      String superClassName = superClass.getName();
-      HierarchyElement superElement = m_nameToElement.get(superClassName);
-      if (superElement == null) {
-        String superPackageName = CodeUtils.getPackage(superClassName);
-        if (superPackageName.equals(packageName)) {
-          superElement = loadClassHierarchy(superClass);
-        } else {
-          ClassInfo superClassInfo = m_propertiesSupport.getClassInfo(superClass);
-          if (superClassInfo != null) {
-            superElement = loadClass(superClassInfo);
-          } else {
-            superElement = loadClassHierarchy(superClass);
-          }
-          m_roots.add(superElement);
-        }
-      }
-      superElement.elements.add(element);
-    }
-    return element;
-  }
+	private HierarchyElement loadClassHierarchy(Class<?> clazz) throws Exception {
+		HierarchyElement element = new HierarchyElement();
+		String className = clazz.getName();
+		String packageName = CodeUtils.getPackage(className);
+		m_nameToElement.put(className, element);
+		for (Class<?> superClass : clazz.getInterfaces()) {
+			String superClassName = superClass.getName();
+			HierarchyElement superElement = m_nameToElement.get(superClassName);
+			if (superElement == null) {
+				String superPackageName = CodeUtils.getPackage(superClassName);
+				if (superPackageName.equals(packageName)) {
+					superElement = loadClassHierarchy(superClass);
+				} else {
+					ClassInfo superClassInfo = m_propertiesSupport.getClassInfo(superClass);
+					if (superClassInfo != null) {
+						superElement = loadClass(superClassInfo);
+					} else {
+						superElement = loadClassHierarchy(superClass);
+					}
+					m_roots.add(superElement);
+				}
+			}
+			superElement.elements.add(element);
+		}
+		return element;
+	}
 
-  public void joinClasses() {
-    for (HierarchyElement root : m_roots) {
-      joinClass(root);
-    }
-    for (HierarchyElement root : m_roots) {
-      sortProperties(root);
-    }
-  }
+	public void joinClasses() {
+		for (HierarchyElement root : m_roots) {
+			joinClass(root);
+		}
+		for (HierarchyElement root : m_roots) {
+			sortProperties(root);
+		}
+	}
 
-  private void joinClass(HierarchyElement element) {
-    if (element.classInfo != null) {
-      for (HierarchyElement childElement : element.elements) {
-        for (PropertyInfo property : element.classInfo.properties) {
-          if (childElement.properties.add(property) && childElement.classInfo != null) {
-            childElement.classInfo.properties.add(property);
-            childElement.sort = true;
-          }
-        }
-      }
-    }
-    for (HierarchyElement childElement : element.elements) {
-      joinClass(childElement);
-    }
-  }
+	private void joinClass(HierarchyElement element) {
+		if (element.classInfo != null) {
+			for (HierarchyElement childElement : element.elements) {
+				for (PropertyInfo property : element.classInfo.properties) {
+					if (childElement.properties.add(property) && childElement.classInfo != null) {
+						childElement.classInfo.properties.add(property);
+						childElement.sort = true;
+					}
+				}
+			}
+		}
+		for (HierarchyElement childElement : element.elements) {
+			joinClass(childElement);
+		}
+	}
 
-  private void sortProperties(HierarchyElement element) {
-    if (element.sort && element.classInfo != null) {
-      element.sort = false;
-      Collections.sort(element.classInfo.properties, new Comparator<PropertyInfo>() {
-        @Override
-        public int compare(PropertyInfo property1, PropertyInfo property2) {
-          return property1.name.compareTo(property2.name);
-        }
-      });
-    }
-    for (HierarchyElement childElement : element.elements) {
-      sortProperties(childElement);
-    }
-  }
+	private void sortProperties(HierarchyElement element) {
+		if (element.sort && element.classInfo != null) {
+			element.sort = false;
+			Collections.sort(element.classInfo.properties, new Comparator<PropertyInfo>() {
+				@Override
+				public int compare(PropertyInfo property1, PropertyInfo property2) {
+					return property1.name.compareTo(property2.name);
+				}
+			});
+		}
+		for (HierarchyElement childElement : element.elements) {
+			sortProperties(childElement);
+		}
+	}
 
-  public ClassInfo getLastClass() {
-    List<HierarchyElement> elements = m_roots;
-    while (true) {
-      Assert.isTrue(!elements.isEmpty());
-      HierarchyElement element = elements.get(0);
-      if (element.elements.isEmpty()) {
-        Assert.isNotNull(element.classInfo);
-        return element.classInfo;
-      }
-      elements = element.elements;
-    }
-  }
+	public ClassInfo getLastClass() {
+		List<HierarchyElement> elements = m_roots;
+		while (true) {
+			Assert.isTrue(!elements.isEmpty());
+			HierarchyElement element = elements.get(0);
+			if (element.elements.isEmpty()) {
+				Assert.isNotNull(element.classInfo);
+				return element.classInfo;
+			}
+			elements = element.elements;
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Classes
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static class HierarchyElement {
-    ClassInfo classInfo;
-    Set<PropertyInfo> properties = Sets.newHashSet();
-    List<HierarchyElement> elements = Lists.newArrayList();
-    boolean sort;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Classes
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static class HierarchyElement {
+		ClassInfo classInfo;
+		Set<PropertyInfo> properties = Sets.newHashSet();
+		List<HierarchyElement> elements = Lists.newArrayList();
+		boolean sort;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/bindables/PropertiesSupport.java b/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/bindables/PropertiesSupport.java
index d91d47a27..c90c7ca4b 100644
--- a/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/bindables/PropertiesSupport.java
+++ b/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/bindables/PropertiesSupport.java
@@ -51,451 +51,451 @@
  * @coverage bindings.rcp.emf.model
  */
 public class PropertiesSupport {
-  private final Map<String, PackageInfo> m_packages = Maps.newHashMap();
-  private final IJavaProject m_javaProject;
-  private final ClassLoader m_classLoader;
-  private final Class<?> m_EPackage;
-  private final Class<?> m_EObject;
-  private final Class<?> m_EClass;
-  private final Class<?> m_EAttribute;
-  private final Class<?> m_EReference;
-  private final Class<?> m_EStructuralFeature;
-  private Class<?> m_EditingDomain;
-  private String m_editingDomainReference;
-  private boolean m_isEMFProperties;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public PropertiesSupport(IJavaProject javaProject,
-      ClassLoader classLoader,
-      List<VariableDeclarationFragment> fragments) throws Exception {
-    m_javaProject = javaProject;
-    m_classLoader = classLoader;
-    // EMF classes
-    m_EPackage = m_classLoader.loadClass("org.eclipse.emf.ecore.EPackage");
-    m_EObject = m_classLoader.loadClass("org.eclipse.emf.ecore.EObject");
-    m_EClass = m_classLoader.loadClass("org.eclipse.emf.ecore.EClass");
-    m_EAttribute = m_classLoader.loadClass("org.eclipse.emf.ecore.EAttribute");
-    m_EReference = m_classLoader.loadClass("org.eclipse.emf.ecore.EReference");
-    m_EStructuralFeature = m_classLoader.loadClass("org.eclipse.emf.ecore.EStructuralFeature");
-    // EMF Edit classes
-    try {
-      m_EditingDomain = m_classLoader.loadClass("org.eclipse.emf.edit.domain.EditingDomain");
-      for (VariableDeclarationFragment fragment : fragments) {
-        Type type = CoreUtils.getType(fragment, false);
-        Class<?> eObjectClass =
-            classLoader.loadClass(AstNodeUtils.getFullyQualifiedName(type, true));
-        if (m_EditingDomain.isAssignableFrom(eObjectClass)) {
-          Assert.isNull(m_editingDomainReference);
-          m_editingDomainReference = fragment.getName().getIdentifier();
-        }
-      }
-    } catch (Throwable e) {
-    }
-    try {
-      m_classLoader.loadClass("org.eclipse.emf.databinding.EMFProperties");
-      m_isEMFProperties = true;
-    } catch (Throwable e) {
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public Class<?> getEObjectClass() {
-    return m_EObject;
-  }
-
-  public Class<?> getEStructuralFeature() {
-    return m_EStructuralFeature;
-  }
-
-  public Class<?> getEditingDomainClass() {
-    return m_EditingDomain;
-  }
-
-  public Class<?> getIObservableSetClass() {
-    try {
-      return m_classLoader.loadClass("org.eclipse.core.databinding.observable.set.IObservableSet");
-    } catch (Throwable e) {
-      return null;
-    }
-  }
-
-  public boolean availableEMFProperties() {
-    return m_isEMFProperties;
-  }
-
-  public boolean isEMFProperties() {
-    return m_isEMFProperties
-        && Activator.getStore().getBoolean(IPreferenceConstants.GENERATE_CODE_FOR_VERSION_2_5);
-  }
-
-  public Class<?> getIObservableValue() {
-    try {
-      return m_classLoader.loadClass("org.eclipse.core.databinding.observable.value.IObservableValue");
-    } catch (Throwable e) {
-      return null;
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // EditingDomain
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void checkEditingDomain(Expression expression) throws Exception {
-    Assert.isNotNull(m_editingDomainReference);
-    Assert.isTrue(m_editingDomainReference.equals(CoreUtils.getNodeReference(expression)));
-  }
-
-  public boolean isEditingDomainMode() {
-    return m_editingDomainReference != null;
-  }
-
-  public String getEditingDomainReference() {
-    return m_editingDomainReference;
-  }
-
-  public String getEMFObservablesCode(String methodStart) {
-    if (m_editingDomainReference != null) {
-      return " = org.eclipse.emf.databinding.edit.EMFEditObservables."
-          + methodStart
-          + m_editingDomainReference
-          + ", ";
-    }
-    return " = org.eclipse.emf.databinding.EMFObservables." + methodStart;
-  }
-
-  public String getEMFPropertiesCode(String methodStart) {
-    if (m_editingDomainReference != null) {
-      return " = org.eclipse.emf.databinding.edit.EMFEditProperties."
-          + methodStart
-          + m_editingDomainReference
-          + ", ";
-    }
-    return " = org.eclipse.emf.databinding.EMFProperties." + methodStart;
-  }
-
-  public static String getEMFObservablesCode(BindableInfo bindableObject, String methodStart)
-      throws Exception {
-    EObjectBindableInfo eObject = (EObjectBindableInfo) bindableObject;
-    return eObject.getPropertiesSupport().getEMFObservablesCode(methodStart);
-  }
-
-  public static String getEMFPropertiesCode(BindableInfo bindableObject, String methodStart)
-      throws Exception {
-    EObjectBindableInfo eObject = (EObjectBindableInfo) bindableObject;
-    return eObject.getPropertiesSupport().getEMFPropertiesCode(methodStart);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Properties
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public List<PropertyInfo> getProperties(Class<?> eObjectClass) throws Exception {
-    ClassInfo classInfo = getClassInfo(eObjectClass);
-    return classInfo == null ? Collections.<PropertyInfo>emptyList() : classInfo.properties;
-  }
-
-  public PropertyInfo getProperty(Class<?> eObjectClass, String propertyName) throws Exception {
-    List<PropertyInfo> emfProperties = getProperties(eObjectClass);
-    Assert.isTrue(!CollectionUtils.isEmpty(emfProperties));
-    //
-    for (PropertyInfo property : emfProperties) {
-      if (propertyName.equals(property.name)) {
-        return property;
-      }
-    }
-    //
-    return null;
-  }
-
-  /**
-   * @return {@code [ClassInfo, PropertyInfo, String:packagePrefix]}
-   */
-  public Object[] getClassInfoForProperty(String emfProperty) throws Exception {
-    for (Map.Entry<String, PackageInfo> packageEntry : m_packages.entrySet()) {
-      if (emfProperty.startsWith(packageEntry.getKey())) {
-        for (Map.Entry<String, ClassInfo> classEntry : packageEntry.getValue().classes.entrySet()) {
-          ClassInfo classInfo = classEntry.getValue();
-          for (PropertyInfo property : classInfo.properties) {
-            if (emfProperty.equals(property.reference)) {
-              if (classInfo.thisClass == null) {
-                try {
-                  classInfo.thisClass =
-                      m_classLoader.loadClass(packageEntry.getKey()
-                          + "."
-                          + EmfCodeGenUtil.unformat(classInfo.className));
-                } catch (Throwable e) {
-                }
-              }
-              return new Object[]{property.parent, property, packageEntry.getKey()};
-            }
-          }
-        }
-      }
-    }
-    return null;
-  }
-
-  public ClassInfo getClassInfo(Class<?> eObjectClass) throws Exception {
-    PackageInfo packageInfo = getPackageInfo(eObjectClass);
-    String emfClassName =
-        EmfCodeGenUtil.format(eObjectClass.getSimpleName(), '_', null, true, true).toUpperCase(
-            Locale.ENGLISH);
-    ClassInfo classInfo = packageInfo.classes.get(emfClassName);
-    if (classInfo == null) {
-      for (Map.Entry<String, ClassInfo> entry : packageInfo.classes.entrySet()) {
-        if (entry.getKey().endsWith(emfClassName)) {
-          emfClassName = entry.getKey();
-          classInfo = entry.getValue();
-          break;
-        }
-      }
-    }
-    return classInfo;
-  }
-
-  public void addPackage(String packageAnyClass) throws Exception {
-    getPackageInfo(packageAnyClass);
-  }
-
-  private HierarchySupport m_hierarchySupport = null;
-
-  private PackageInfo getPackageInfo(Class<?> eObjectClass) throws Exception {
-    return getPackageInfo(eObjectClass.getName());
-  }
-
-  private PackageInfo getPackageInfo(String packageAnyClass) throws Exception {
-    String packageName = CodeUtils.getPackage(packageAnyClass);
-    PackageInfo packageInfo = m_packages.get(packageName);
-    if (packageInfo == null) {
-      packageInfo = loadPackage(packageAnyClass);
-      if (packageInfo == null) {
-        packageInfo = new PackageInfo(packageName);
-      } else {
-        m_packages.put(packageName, packageInfo);
-        // build hierarchy
-        boolean processJoin = false;
-        if (m_hierarchySupport == null) {
-          m_hierarchySupport = new HierarchySupport(this, true);
-          processJoin = true;
-        }
-        for (Map.Entry<String, ClassInfo> entry : packageInfo.classes.entrySet()) {
-          ClassInfo classInfo = entry.getValue();
-          m_hierarchySupport.addClass(classInfo);
-        }
-        if (processJoin) {
-          m_hierarchySupport.joinClasses();
-          m_hierarchySupport = null;
-        }
-        //packageInfo.status = InfoStatus.LOADED;
-      }
-    }
-    return packageInfo;
-  }
-
-  private PackageInfo loadPackage(String packageAnyClass) throws Exception {
-    IType packageAnyType = m_javaProject.findType(packageAnyClass);
-    if (packageAnyType == null) {
-      return null;
-    }
-    Set<String> allClasses = new HashSet<String>();
-    IPackageFragment packageFragment = packageAnyType.getPackageFragment();
-    // collect all class names
-    {
-      for (IClassFile classFile : packageFragment.getClassFiles()) {
-        IType type = classFile.getType();
-        if (type != null) {
-          allClasses.add(type.getFullyQualifiedName());
-        }
-      }
-      for (ICompilationUnit compilationUnit : packageFragment.getCompilationUnits()) {
-        IType type = compilationUnit.findPrimaryType();
-        if (type != null) {
-          allClasses.add(type.getFullyQualifiedName());
-        }
-      }
-    }
-    //
-    for (IClassFile classFile : packageFragment.getClassFiles()) {
-      Map<String, ClassInfo> packageClasses = getPackageClassInfos(classFile.getType(), allClasses);
-      if (packageClasses != null) {
-        return new PackageInfo(packageFragment.getElementName(), packageClasses);
-      }
-    }
-    for (ICompilationUnit compilationUnit : packageFragment.getCompilationUnits()) {
-      Map<String, ClassInfo> packageClasses =
-          getPackageClassInfos(compilationUnit.findPrimaryType(), allClasses);
-      if (packageClasses != null) {
-        return new PackageInfo(packageFragment.getElementName(), packageClasses);
-      }
-    }
-    return null;
-  }
-
-  private Map<String, ClassInfo> getPackageClassInfos(IType packageAnyType, Set<String> allClasses)
-      throws JavaModelException, Exception {
-    Map<String, ClassInfo> packageClasses = null;
-    if (packageAnyType != null) {
-      try {
-        Class<?> packageClass = m_classLoader.loadClass(packageAnyType.getFullyQualifiedName());
-        if (m_EPackage != packageClass && m_EPackage.isAssignableFrom(packageClass)) {
-          IType literalsType = packageAnyType.getType("Literals");
-          if (literalsType != null) {
-            packageClasses = loadEmfClassInfos(literalsType, allClasses);
-          }
-        }
-      } catch (ClassNotFoundException e) {
-        // nothing to do
-      }
-    }
-    return packageClasses;
-  }
-
-  private Map<String, ClassInfo> loadEmfClassInfos(IType literalsType, Set<String> allClasses)
-      throws Exception {
-    Class<?> literalsClass = m_classLoader.loadClass(literalsType.getFullyQualifiedName());
-    String packageName = literalsClass.getPackage().getName();
-    Map<String, ClassInfo> packageClasses = Maps.newHashMap();
-    String literalsReference = literalsType.getFullyQualifiedName('.') + ".";
-    List<Field> eClasses = Lists.newArrayList();
-    List<Field> eProperties = Lists.newArrayList();
-    // collect literals
-    for (Field field : literalsClass.getFields()) {
-      Class<?> fieldType = field.getType();
-      if (m_EClass.isAssignableFrom(fieldType)) {
-        eClasses.add(field);
-      } else if (m_EAttribute.isAssignableFrom(fieldType)
-          || m_EReference.isAssignableFrom(fieldType)
-          || m_EStructuralFeature.isAssignableFrom(fieldType)) {
-        eProperties.add(field);
-      }
-    }
-    // process EClass & its properties
-    for (Field eClassField : eClasses) {
-      String fieldName = eClassField.getName();
-      ClassInfo classInfo = new ClassInfo(fieldName);
-      packageClasses.put(fieldName, classInfo);
-      //
-      String unformatClassName = packageName + "." + EmfCodeGenUtil.unformat(classInfo.className);
-      //
-      try {
-        classInfo.thisClass = m_classLoader.loadClass(unformatClassName);
-      } catch (Throwable e) {
-        for (String className : allClasses) {
-          if (unformatClassName.equalsIgnoreCase(className)) {
-            try {
-              classInfo.thisClass = m_classLoader.loadClass(className);
-            } catch (Throwable t) {
-            }
-          }
-        }
-      }
-      //
-      String propertyPrefix = fieldName + "__";
-      for (Field ePropertyField : eProperties) {
-        String propertyName = ePropertyField.getName();
-        if (propertyName.startsWith(propertyPrefix)) {
-          classInfo.properties.add(new PropertyInfo(classInfo,
-              literalsReference + propertyName,
-              propertyName.substring(propertyPrefix.length())));
-        }
-      }
-    }
-    //
-    for (ClassInfo classInfo : packageClasses.values()) {
-      linkClassProperties(classInfo);
-    }
-    //
-    return packageClasses;
-  }
-
-  private static void linkClassProperties(ClassInfo classInfo) throws Exception {
-    if (classInfo.status != InfoStatus.LOADED && classInfo.thisClass != null) {
-      classInfo.status = InfoStatus.LOADING;
-      List<PropertyInfo> newProperties = Lists.newArrayList();
-      for (PropertyDescriptor descriptor : BeanSupport.getPropertyDescriptors(classInfo.thisClass)) {
-        String propertyName =
-            EmfCodeGenUtil.format(descriptor.getName(), '_', null, false, false).toUpperCase(
-                Locale.ENGLISH);
-        for (PropertyInfo propertyInfo : classInfo.properties) {
-          if (propertyName.equals(propertyInfo.internalName)) {
-            propertyInfo.name = descriptor.getName();
-            propertyInfo.type = descriptor.getPropertyType();
-            newProperties.add(propertyInfo);
-            classInfo.properties.remove(propertyInfo);
-            break;
-          }
-        }
-      }
-      Collections.sort(newProperties, new Comparator<PropertyInfo>() {
-        @Override
-        public int compare(PropertyInfo property1, PropertyInfo property2) {
-          return property1.name.compareTo(property2.name);
-        }
-      });
-      //
-      classInfo.properties = newProperties;
-      classInfo.status = InfoStatus.LOADED;
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Classes
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static enum InfoStatus {
-    NEW, LOADING, LOADED
-  }
-  private static class PackageInfo {
-    //InfoStatus status = InfoStatus.NEW;
-    //final String packageName;
-    final Map<String, ClassInfo> classes;
-
-    PackageInfo(String packageName) {
-      this(packageName, Maps.<String, ClassInfo>newHashMap());
-    }
-
-    PackageInfo(String packageName, Map<String, ClassInfo> classes) {
-      //this.packageName = packageName;
-      this.classes = classes;
-    }
-  }
-  public static class ClassInfo {
-    InfoStatus status = InfoStatus.NEW;
-    public final String className;
-    public Class<?> thisClass;
-    public List<PropertyInfo> properties = Lists.newArrayList();
-
-    ClassInfo(String className) {
-      this.className = className;
-    }
-  }
-  public static class PropertyInfo {
-    public ClassInfo parent;
-    public String name;
-    public Class<?> type;
-    public String reference;
-    public String internalName;
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    PropertyInfo(ClassInfo parent, String reference, String internalName) {
-      this.parent = parent;
-      this.reference = reference;
-      this.internalName = internalName;
-    }
-  }
+	private final Map<String, PackageInfo> m_packages = Maps.newHashMap();
+	private final IJavaProject m_javaProject;
+	private final ClassLoader m_classLoader;
+	private final Class<?> m_EPackage;
+	private final Class<?> m_EObject;
+	private final Class<?> m_EClass;
+	private final Class<?> m_EAttribute;
+	private final Class<?> m_EReference;
+	private final Class<?> m_EStructuralFeature;
+	private Class<?> m_EditingDomain;
+	private String m_editingDomainReference;
+	private boolean m_isEMFProperties;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public PropertiesSupport(IJavaProject javaProject,
+			ClassLoader classLoader,
+			List<VariableDeclarationFragment> fragments) throws Exception {
+		m_javaProject = javaProject;
+		m_classLoader = classLoader;
+		// EMF classes
+		m_EPackage = m_classLoader.loadClass("org.eclipse.emf.ecore.EPackage");
+		m_EObject = m_classLoader.loadClass("org.eclipse.emf.ecore.EObject");
+		m_EClass = m_classLoader.loadClass("org.eclipse.emf.ecore.EClass");
+		m_EAttribute = m_classLoader.loadClass("org.eclipse.emf.ecore.EAttribute");
+		m_EReference = m_classLoader.loadClass("org.eclipse.emf.ecore.EReference");
+		m_EStructuralFeature = m_classLoader.loadClass("org.eclipse.emf.ecore.EStructuralFeature");
+		// EMF Edit classes
+		try {
+			m_EditingDomain = m_classLoader.loadClass("org.eclipse.emf.edit.domain.EditingDomain");
+			for (VariableDeclarationFragment fragment : fragments) {
+				Type type = CoreUtils.getType(fragment, false);
+				Class<?> eObjectClass =
+						classLoader.loadClass(AstNodeUtils.getFullyQualifiedName(type, true));
+				if (m_EditingDomain.isAssignableFrom(eObjectClass)) {
+					Assert.isNull(m_editingDomainReference);
+					m_editingDomainReference = fragment.getName().getIdentifier();
+				}
+			}
+		} catch (Throwable e) {
+		}
+		try {
+			m_classLoader.loadClass("org.eclipse.emf.databinding.EMFProperties");
+			m_isEMFProperties = true;
+		} catch (Throwable e) {
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public Class<?> getEObjectClass() {
+		return m_EObject;
+	}
+
+	public Class<?> getEStructuralFeature() {
+		return m_EStructuralFeature;
+	}
+
+	public Class<?> getEditingDomainClass() {
+		return m_EditingDomain;
+	}
+
+	public Class<?> getIObservableSetClass() {
+		try {
+			return m_classLoader.loadClass("org.eclipse.core.databinding.observable.set.IObservableSet");
+		} catch (Throwable e) {
+			return null;
+		}
+	}
+
+	public boolean availableEMFProperties() {
+		return m_isEMFProperties;
+	}
+
+	public boolean isEMFProperties() {
+		return m_isEMFProperties
+				&& Activator.getStore().getBoolean(IPreferenceConstants.GENERATE_CODE_FOR_VERSION_2_5);
+	}
+
+	public Class<?> getIObservableValue() {
+		try {
+			return m_classLoader.loadClass("org.eclipse.core.databinding.observable.value.IObservableValue");
+		} catch (Throwable e) {
+			return null;
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// EditingDomain
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void checkEditingDomain(Expression expression) throws Exception {
+		Assert.isNotNull(m_editingDomainReference);
+		Assert.isTrue(m_editingDomainReference.equals(CoreUtils.getNodeReference(expression)));
+	}
+
+	public boolean isEditingDomainMode() {
+		return m_editingDomainReference != null;
+	}
+
+	public String getEditingDomainReference() {
+		return m_editingDomainReference;
+	}
+
+	public String getEMFObservablesCode(String methodStart) {
+		if (m_editingDomainReference != null) {
+			return " = org.eclipse.emf.databinding.edit.EMFEditObservables."
+					+ methodStart
+					+ m_editingDomainReference
+					+ ", ";
+		}
+		return " = org.eclipse.emf.databinding.EMFObservables." + methodStart;
+	}
+
+	public String getEMFPropertiesCode(String methodStart) {
+		if (m_editingDomainReference != null) {
+			return " = org.eclipse.emf.databinding.edit.EMFEditProperties."
+					+ methodStart
+					+ m_editingDomainReference
+					+ ", ";
+		}
+		return " = org.eclipse.emf.databinding.EMFProperties." + methodStart;
+	}
+
+	public static String getEMFObservablesCode(BindableInfo bindableObject, String methodStart)
+			throws Exception {
+		EObjectBindableInfo eObject = (EObjectBindableInfo) bindableObject;
+		return eObject.getPropertiesSupport().getEMFObservablesCode(methodStart);
+	}
+
+	public static String getEMFPropertiesCode(BindableInfo bindableObject, String methodStart)
+			throws Exception {
+		EObjectBindableInfo eObject = (EObjectBindableInfo) bindableObject;
+		return eObject.getPropertiesSupport().getEMFPropertiesCode(methodStart);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Properties
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public List<PropertyInfo> getProperties(Class<?> eObjectClass) throws Exception {
+		ClassInfo classInfo = getClassInfo(eObjectClass);
+		return classInfo == null ? Collections.<PropertyInfo>emptyList() : classInfo.properties;
+	}
+
+	public PropertyInfo getProperty(Class<?> eObjectClass, String propertyName) throws Exception {
+		List<PropertyInfo> emfProperties = getProperties(eObjectClass);
+		Assert.isTrue(!CollectionUtils.isEmpty(emfProperties));
+		//
+		for (PropertyInfo property : emfProperties) {
+			if (propertyName.equals(property.name)) {
+				return property;
+			}
+		}
+		//
+		return null;
+	}
+
+	/**
+	 * @return {@code [ClassInfo, PropertyInfo, String:packagePrefix]}
+	 */
+	public Object[] getClassInfoForProperty(String emfProperty) throws Exception {
+		for (Map.Entry<String, PackageInfo> packageEntry : m_packages.entrySet()) {
+			if (emfProperty.startsWith(packageEntry.getKey())) {
+				for (Map.Entry<String, ClassInfo> classEntry : packageEntry.getValue().classes.entrySet()) {
+					ClassInfo classInfo = classEntry.getValue();
+					for (PropertyInfo property : classInfo.properties) {
+						if (emfProperty.equals(property.reference)) {
+							if (classInfo.thisClass == null) {
+								try {
+									classInfo.thisClass =
+											m_classLoader.loadClass(packageEntry.getKey()
+													+ "."
+													+ EmfCodeGenUtil.unformat(classInfo.className));
+								} catch (Throwable e) {
+								}
+							}
+							return new Object[]{property.parent, property, packageEntry.getKey()};
+						}
+					}
+				}
+			}
+		}
+		return null;
+	}
+
+	public ClassInfo getClassInfo(Class<?> eObjectClass) throws Exception {
+		PackageInfo packageInfo = getPackageInfo(eObjectClass);
+		String emfClassName =
+				EmfCodeGenUtil.format(eObjectClass.getSimpleName(), '_', null, true, true).toUpperCase(
+						Locale.ENGLISH);
+		ClassInfo classInfo = packageInfo.classes.get(emfClassName);
+		if (classInfo == null) {
+			for (Map.Entry<String, ClassInfo> entry : packageInfo.classes.entrySet()) {
+				if (entry.getKey().endsWith(emfClassName)) {
+					emfClassName = entry.getKey();
+					classInfo = entry.getValue();
+					break;
+				}
+			}
+		}
+		return classInfo;
+	}
+
+	public void addPackage(String packageAnyClass) throws Exception {
+		getPackageInfo(packageAnyClass);
+	}
+
+	private HierarchySupport m_hierarchySupport = null;
+
+	private PackageInfo getPackageInfo(Class<?> eObjectClass) throws Exception {
+		return getPackageInfo(eObjectClass.getName());
+	}
+
+	private PackageInfo getPackageInfo(String packageAnyClass) throws Exception {
+		String packageName = CodeUtils.getPackage(packageAnyClass);
+		PackageInfo packageInfo = m_packages.get(packageName);
+		if (packageInfo == null) {
+			packageInfo = loadPackage(packageAnyClass);
+			if (packageInfo == null) {
+				packageInfo = new PackageInfo(packageName);
+			} else {
+				m_packages.put(packageName, packageInfo);
+				// build hierarchy
+				boolean processJoin = false;
+				if (m_hierarchySupport == null) {
+					m_hierarchySupport = new HierarchySupport(this, true);
+					processJoin = true;
+				}
+				for (Map.Entry<String, ClassInfo> entry : packageInfo.classes.entrySet()) {
+					ClassInfo classInfo = entry.getValue();
+					m_hierarchySupport.addClass(classInfo);
+				}
+				if (processJoin) {
+					m_hierarchySupport.joinClasses();
+					m_hierarchySupport = null;
+				}
+				//packageInfo.status = InfoStatus.LOADED;
+			}
+		}
+		return packageInfo;
+	}
+
+	private PackageInfo loadPackage(String packageAnyClass) throws Exception {
+		IType packageAnyType = m_javaProject.findType(packageAnyClass);
+		if (packageAnyType == null) {
+			return null;
+		}
+		Set<String> allClasses = new HashSet<String>();
+		IPackageFragment packageFragment = packageAnyType.getPackageFragment();
+		// collect all class names
+		{
+			for (IClassFile classFile : packageFragment.getClassFiles()) {
+				IType type = classFile.getType();
+				if (type != null) {
+					allClasses.add(type.getFullyQualifiedName());
+				}
+			}
+			for (ICompilationUnit compilationUnit : packageFragment.getCompilationUnits()) {
+				IType type = compilationUnit.findPrimaryType();
+				if (type != null) {
+					allClasses.add(type.getFullyQualifiedName());
+				}
+			}
+		}
+		//
+		for (IClassFile classFile : packageFragment.getClassFiles()) {
+			Map<String, ClassInfo> packageClasses = getPackageClassInfos(classFile.getType(), allClasses);
+			if (packageClasses != null) {
+				return new PackageInfo(packageFragment.getElementName(), packageClasses);
+			}
+		}
+		for (ICompilationUnit compilationUnit : packageFragment.getCompilationUnits()) {
+			Map<String, ClassInfo> packageClasses =
+					getPackageClassInfos(compilationUnit.findPrimaryType(), allClasses);
+			if (packageClasses != null) {
+				return new PackageInfo(packageFragment.getElementName(), packageClasses);
+			}
+		}
+		return null;
+	}
+
+	private Map<String, ClassInfo> getPackageClassInfos(IType packageAnyType, Set<String> allClasses)
+			throws JavaModelException, Exception {
+		Map<String, ClassInfo> packageClasses = null;
+		if (packageAnyType != null) {
+			try {
+				Class<?> packageClass = m_classLoader.loadClass(packageAnyType.getFullyQualifiedName());
+				if (m_EPackage != packageClass && m_EPackage.isAssignableFrom(packageClass)) {
+					IType literalsType = packageAnyType.getType("Literals");
+					if (literalsType != null) {
+						packageClasses = loadEmfClassInfos(literalsType, allClasses);
+					}
+				}
+			} catch (ClassNotFoundException e) {
+				// nothing to do
+			}
+		}
+		return packageClasses;
+	}
+
+	private Map<String, ClassInfo> loadEmfClassInfos(IType literalsType, Set<String> allClasses)
+			throws Exception {
+		Class<?> literalsClass = m_classLoader.loadClass(literalsType.getFullyQualifiedName());
+		String packageName = literalsClass.getPackage().getName();
+		Map<String, ClassInfo> packageClasses = Maps.newHashMap();
+		String literalsReference = literalsType.getFullyQualifiedName('.') + ".";
+		List<Field> eClasses = Lists.newArrayList();
+		List<Field> eProperties = Lists.newArrayList();
+		// collect literals
+		for (Field field : literalsClass.getFields()) {
+			Class<?> fieldType = field.getType();
+			if (m_EClass.isAssignableFrom(fieldType)) {
+				eClasses.add(field);
+			} else if (m_EAttribute.isAssignableFrom(fieldType)
+					|| m_EReference.isAssignableFrom(fieldType)
+					|| m_EStructuralFeature.isAssignableFrom(fieldType)) {
+				eProperties.add(field);
+			}
+		}
+		// process EClass & its properties
+		for (Field eClassField : eClasses) {
+			String fieldName = eClassField.getName();
+			ClassInfo classInfo = new ClassInfo(fieldName);
+			packageClasses.put(fieldName, classInfo);
+			//
+			String unformatClassName = packageName + "." + EmfCodeGenUtil.unformat(classInfo.className);
+			//
+			try {
+				classInfo.thisClass = m_classLoader.loadClass(unformatClassName);
+			} catch (Throwable e) {
+				for (String className : allClasses) {
+					if (unformatClassName.equalsIgnoreCase(className)) {
+						try {
+							classInfo.thisClass = m_classLoader.loadClass(className);
+						} catch (Throwable t) {
+						}
+					}
+				}
+			}
+			//
+			String propertyPrefix = fieldName + "__";
+			for (Field ePropertyField : eProperties) {
+				String propertyName = ePropertyField.getName();
+				if (propertyName.startsWith(propertyPrefix)) {
+					classInfo.properties.add(new PropertyInfo(classInfo,
+							literalsReference + propertyName,
+							propertyName.substring(propertyPrefix.length())));
+				}
+			}
+		}
+		//
+		for (ClassInfo classInfo : packageClasses.values()) {
+			linkClassProperties(classInfo);
+		}
+		//
+		return packageClasses;
+	}
+
+	private static void linkClassProperties(ClassInfo classInfo) throws Exception {
+		if (classInfo.status != InfoStatus.LOADED && classInfo.thisClass != null) {
+			classInfo.status = InfoStatus.LOADING;
+			List<PropertyInfo> newProperties = Lists.newArrayList();
+			for (PropertyDescriptor descriptor : BeanSupport.getPropertyDescriptors(classInfo.thisClass)) {
+				String propertyName =
+						EmfCodeGenUtil.format(descriptor.getName(), '_', null, false, false).toUpperCase(
+								Locale.ENGLISH);
+				for (PropertyInfo propertyInfo : classInfo.properties) {
+					if (propertyName.equals(propertyInfo.internalName)) {
+						propertyInfo.name = descriptor.getName();
+						propertyInfo.type = descriptor.getPropertyType();
+						newProperties.add(propertyInfo);
+						classInfo.properties.remove(propertyInfo);
+						break;
+					}
+				}
+			}
+			Collections.sort(newProperties, new Comparator<PropertyInfo>() {
+				@Override
+				public int compare(PropertyInfo property1, PropertyInfo property2) {
+					return property1.name.compareTo(property2.name);
+				}
+			});
+			//
+			classInfo.properties = newProperties;
+			classInfo.status = InfoStatus.LOADED;
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Classes
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static enum InfoStatus {
+		NEW, LOADING, LOADED
+	}
+	private static class PackageInfo {
+		//InfoStatus status = InfoStatus.NEW;
+		//final String packageName;
+		final Map<String, ClassInfo> classes;
+
+		PackageInfo(String packageName) {
+			this(packageName, Maps.<String, ClassInfo>newHashMap());
+		}
+
+		PackageInfo(String packageName, Map<String, ClassInfo> classes) {
+			//this.packageName = packageName;
+			this.classes = classes;
+		}
+	}
+	public static class ClassInfo {
+		InfoStatus status = InfoStatus.NEW;
+		public final String className;
+		public Class<?> thisClass;
+		public List<PropertyInfo> properties = Lists.newArrayList();
+
+		ClassInfo(String className) {
+			this.className = className;
+		}
+	}
+	public static class PropertyInfo {
+		public ClassInfo parent;
+		public String name;
+		public Class<?> type;
+		public String reference;
+		public String internalName;
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		PropertyInfo(ClassInfo parent, String reference, String internalName) {
+			this.parent = parent;
+			this.reference = reference;
+			this.internalName = internalName;
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/observables/DetailEmfObservableInfo.java b/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/observables/DetailEmfObservableInfo.java
index 9cf35101f..f3737af37 100644
--- a/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/observables/DetailEmfObservableInfo.java
+++ b/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/observables/DetailEmfObservableInfo.java
@@ -42,149 +42,149 @@
  * @coverage bindings.rcp.emf.model
  */
 public abstract class DetailEmfObservableInfo extends DetailBeanObservableInfo {
-  private final PropertiesSupport m_propertiesSupport;
-  private String m_detailEMFPropertyName;
+	private final PropertiesSupport m_propertiesSupport;
+	private String m_detailEMFPropertyName;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DetailEmfObservableInfo(ObservableInfo masterObservable,
-      PropertiesSupport propertiesSupport) {
-    super(masterObservable, null, null, null);
-    m_propertiesSupport = propertiesSupport;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DetailEmfObservableInfo(ObservableInfo masterObservable,
+			PropertiesSupport propertiesSupport) {
+		super(masterObservable, null, null, null);
+		m_propertiesSupport = propertiesSupport;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void setDetailPropertyReference(Class<?> detailBeanClass, String detailPropertyReference)
-      throws Exception {
-    m_detailPropertyReference = detailPropertyReference;
-    //
-    if (detailBeanClass == null) {
-      if (detailPropertyReference.startsWith("org.eclipse.emf.databinding.FeaturePath.fromList(")) {
-        detailPropertyReference = StringUtils.substringBetween(detailPropertyReference, "(", ")");
-        String[] references = StringUtils.split(detailPropertyReference, ", ");
-        detailPropertyReference = references[references.length - 1];
-      }
-    } else {
-      m_detailBeanClass = detailBeanClass;
-    }
-    // prepare EMF class info
-    Object[] result = m_propertiesSupport.getClassInfoForProperty(detailPropertyReference);
-    Assert.isNotNull(result);
-    // prepare detail class
-    if (detailBeanClass == null) {
-      ClassInfo classInfo = (ClassInfo) result[0];
-      m_detailBeanClass = classInfo.thisClass;
-    }
-    // prepare EMF property
-    PropertyInfo emfPropertyInfo = (PropertyInfo) result[1];
-    Assert.isNotNull(emfPropertyInfo.type);
-    m_detailPropertyType = emfPropertyInfo.type;
-    //
-    m_detailEMFPropertyName = "\"" + emfPropertyInfo.name + "\"";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void setDetailPropertyReference(Class<?> detailBeanClass, String detailPropertyReference)
+			throws Exception {
+		m_detailPropertyReference = detailPropertyReference;
+		//
+		if (detailBeanClass == null) {
+			if (detailPropertyReference.startsWith("org.eclipse.emf.databinding.FeaturePath.fromList(")) {
+				detailPropertyReference = StringUtils.substringBetween(detailPropertyReference, "(", ")");
+				String[] references = StringUtils.split(detailPropertyReference, ", ");
+				detailPropertyReference = references[references.length - 1];
+			}
+		} else {
+			m_detailBeanClass = detailBeanClass;
+		}
+		// prepare EMF class info
+		Object[] result = m_propertiesSupport.getClassInfoForProperty(detailPropertyReference);
+		Assert.isNotNull(result);
+		// prepare detail class
+		if (detailBeanClass == null) {
+			ClassInfo classInfo = (ClassInfo) result[0];
+			m_detailBeanClass = classInfo.thisClass;
+		}
+		// prepare EMF property
+		PropertyInfo emfPropertyInfo = (PropertyInfo) result[1];
+		Assert.isNotNull(emfPropertyInfo.type);
+		m_detailPropertyType = emfPropertyInfo.type;
+		//
+		m_detailEMFPropertyName = "\"" + emfPropertyInfo.name + "\"";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public PropertiesSupport getPropertiesSupport() {
-    return m_propertiesSupport;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public PropertiesSupport getPropertiesSupport() {
+		return m_propertiesSupport;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getPresentationText() throws Exception {
-    String presentationProperty = StringUtils.defaultIfEmpty(m_detailEMFPropertyName, "?????");
-    String presentationPropertyType =
-        m_detailPropertyType == null ? "?????" : ClassUtils.getShortClassName(m_detailPropertyType);
-    return m_masterObservable.getPresentationText()
-        + ".detail"
-        + getPresentationPrefix()
-        + "("
-        + presentationProperty
-        + ", "
-        + presentationPropertyType
-        + ".class)";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getPresentationText() throws Exception {
+		String presentationProperty = StringUtils.defaultIfEmpty(m_detailEMFPropertyName, "?????");
+		String presentationPropertyType =
+				m_detailPropertyType == null ? "?????" : ClassUtils.getShortClassName(m_detailPropertyType);
+		return m_masterObservable.getPresentationText()
+				+ ".detail"
+				+ getPresentationPrefix()
+				+ "("
+				+ presentationProperty
+				+ ", "
+				+ presentationPropertyType
+				+ ".class)";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void createContentProviders(List<IUiContentProvider> providers,
-      BindingUiContentProviderContext context,
-      DatabindingsProvider provider) throws Exception {
-    m_masterObservable.createContentProviders(providers, context, provider);
-    //
-    ChooseClassAndPropertiesConfiguration configuration =
-        new ChooseClassAndPropertiesConfiguration(getConfiguration());
-    configuration.setBaseClassName("org.eclipse.emf.ecore.EObject");
-    //
-    providers.add(new ObservableDetailUiContentProvider(configuration, this, provider) {
-      @Override
-      protected List<PropertyAdapter> getProperties(Class<?> choosenClass) throws Exception {
-        List<PropertyAdapter> properties = Lists.newArrayList();
-        for (PropertyInfo emfPropertyInfo : m_propertiesSupport.getProperties(choosenClass)) {
-          properties.add(new ChooseClassAndTreePropertiesUiContentProvider.ObservePropertyAdapter(null,
-              new EPropertyBindableInfo(m_propertiesSupport,
-                  null,
-                  emfPropertyInfo.type,
-                  emfPropertyInfo.name,
-                  emfPropertyInfo.reference)));
-        }
-        return properties;
-      }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void createContentProviders(List<IUiContentProvider> providers,
+			BindingUiContentProviderContext context,
+			DatabindingsProvider provider) throws Exception {
+		m_masterObservable.createContentProviders(providers, context, provider);
+		//
+		ChooseClassAndPropertiesConfiguration configuration =
+				new ChooseClassAndPropertiesConfiguration(getConfiguration());
+		configuration.setBaseClassName("org.eclipse.emf.ecore.EObject");
+		//
+		providers.add(new ObservableDetailUiContentProvider(configuration, this, provider) {
+			@Override
+			protected List<PropertyAdapter> getProperties(Class<?> choosenClass) throws Exception {
+				List<PropertyAdapter> properties = Lists.newArrayList();
+				for (PropertyInfo emfPropertyInfo : m_propertiesSupport.getProperties(choosenClass)) {
+					properties.add(new ChooseClassAndTreePropertiesUiContentProvider.ObservePropertyAdapter(null,
+							new EPropertyBindableInfo(m_propertiesSupport,
+									null,
+									emfPropertyInfo.type,
+									emfPropertyInfo.name,
+									emfPropertyInfo.reference)));
+				}
+				return properties;
+			}
 
-      @Override
-      protected void setClassNameAndProperties(Class<?> beanClass,
-          String beanClassName,
-          List<String> properties) throws Exception {
-        if (beanClassName == null) {
-          setClassName(CoreUtils.getClassName(beanClass));
-        } else {
-          setClassName(beanClassName);
-        }
-        //
-        EObjectBindableInfo eObject =
-            new EObjectBindableInfo(beanClass, null, m_propertiesSupport, null);
-        //
-        Object[] adapters = new Object[properties.size()];
-        for (int i = 0; i < adapters.length; i++) {
-          adapters[i] =
-              convertPropertyToAdapter(eObject.resolvePropertyReference(properties.get(i)));
-        }
-        //
-        setCheckedAndExpand(adapters);
-        calculatePropertiesFinish();
-      }
+			@Override
+			protected void setClassNameAndProperties(Class<?> beanClass,
+					String beanClassName,
+					List<String> properties) throws Exception {
+				if (beanClassName == null) {
+					setClassName(CoreUtils.getClassName(beanClass));
+				} else {
+					setClassName(beanClassName);
+				}
+				//
+				EObjectBindableInfo eObject =
+						new EObjectBindableInfo(beanClass, null, m_propertiesSupport, null);
+				//
+				Object[] adapters = new Object[properties.size()];
+				for (int i = 0; i < adapters.length; i++) {
+					adapters[i] =
+							convertPropertyToAdapter(eObject.resolvePropertyReference(properties.get(i)));
+				}
+				//
+				setCheckedAndExpand(adapters);
+				calculatePropertiesFinish();
+			}
 
-      @Override
-      protected ObservePropertyAdapter convertPropertyToAdapter(IObserveInfo observe)
-          throws Exception {
-        if (observe instanceof EPropertyBindableInfo) {
-          EPropertyBindableInfo property = (EPropertyBindableInfo) observe;
-          ObservePropertyAdapter adapter =
-              new ObservePropertyAdapter(convertPropertyToAdapter(property.getParent()), property);
-          adapter.addToParent();
-          return adapter;
-        }
-        return null;
-      }
-    });
-  }
+			@Override
+			protected ObservePropertyAdapter convertPropertyToAdapter(IObserveInfo observe)
+					throws Exception {
+				if (observe instanceof EPropertyBindableInfo) {
+					EPropertyBindableInfo property = (EPropertyBindableInfo) observe;
+					ObservePropertyAdapter adapter =
+							new ObservePropertyAdapter(convertPropertyToAdapter(property.getParent()), property);
+					adapter.addToParent();
+					return adapter;
+				}
+				return null;
+			}
+		});
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/observables/DetailListEmfObservableInfo.java b/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/observables/DetailListEmfObservableInfo.java
index 1dc6c50f5..a99e38ee6 100644
--- a/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/observables/DetailListEmfObservableInfo.java
+++ b/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/observables/DetailListEmfObservableInfo.java
@@ -20,23 +20,23 @@
  * @coverage bindings.rcp.emf.model
  */
 public final class DetailListEmfObservableInfo extends DetailEmfObservableInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DetailListEmfObservableInfo(ObservableInfo masterObservable,
-      PropertiesSupport propertiesSupport) {
-    super(masterObservable, propertiesSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DetailListEmfObservableInfo(ObservableInfo masterObservable,
+			PropertiesSupport propertiesSupport) {
+		super(masterObservable, propertiesSupport);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getPresentationPrefix() {
-    return "List";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getPresentationPrefix() {
+		return "List";
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/observables/DetailValueEmfObservableInfo.java b/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/observables/DetailValueEmfObservableInfo.java
index c8f729fa5..da9ffb5c1 100644
--- a/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/observables/DetailValueEmfObservableInfo.java
+++ b/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/observables/DetailValueEmfObservableInfo.java
@@ -20,23 +20,23 @@
  * @coverage bindings.rcp.emf.model
  */
 public final class DetailValueEmfObservableInfo extends DetailEmfObservableInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DetailValueEmfObservableInfo(ObservableInfo masterObservable,
-      PropertiesSupport propertiesSupport) {
-    super(masterObservable, propertiesSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DetailValueEmfObservableInfo(ObservableInfo masterObservable,
+			PropertiesSupport propertiesSupport) {
+		super(masterObservable, propertiesSupport);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getPresentationPrefix() {
-    return "Value";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getPresentationPrefix() {
+		return "Value";
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/observables/EmfObservableDetailListCodeSupport.java b/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/observables/EmfObservableDetailListCodeSupport.java
index 9823e8bf3..aa6d68f7c 100644
--- a/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/observables/EmfObservableDetailListCodeSupport.java
+++ b/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/observables/EmfObservableDetailListCodeSupport.java
@@ -23,25 +23,25 @@
  *
  */
 public class EmfObservableDetailListCodeSupport extends BeanObservableDetailCodeSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // BeanObservableDetailCodeSupport
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void addDetailSourceCode(List<String> lines,
-      CodeGenerationSupport generationSupport,
-      DetailBeanObservableInfo observable,
-      ObservableInfo masterObservable) throws Exception {
-    DetailEmfObservableInfo emfObservable = (DetailEmfObservableInfo) observable;
-    //
-    lines.add("org.eclipse.core.databinding.observable.list.IObservableList "
-        + observable.getVariableIdentifier()
-        + emfObservable.getPropertiesSupport().getEMFObservablesCode(
-            "observeDetailList(org.eclipse.core.databinding.observable.Realm.getDefault(), ")
-        + masterObservable.getVariableIdentifier()
-        + ", "
-        + emfObservable.getDetailPropertyReference()
-        + ");");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// BeanObservableDetailCodeSupport
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void addDetailSourceCode(List<String> lines,
+			CodeGenerationSupport generationSupport,
+			DetailBeanObservableInfo observable,
+			ObservableInfo masterObservable) throws Exception {
+		DetailEmfObservableInfo emfObservable = (DetailEmfObservableInfo) observable;
+		//
+		lines.add("org.eclipse.core.databinding.observable.list.IObservableList "
+				+ observable.getVariableIdentifier()
+				+ emfObservable.getPropertiesSupport().getEMFObservablesCode(
+						"observeDetailList(org.eclipse.core.databinding.observable.Realm.getDefault(), ")
+				+ masterObservable.getVariableIdentifier()
+				+ ", "
+				+ emfObservable.getDetailPropertyReference()
+				+ ");");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/observables/EmfObservableDetailValueCodeSupport.java b/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/observables/EmfObservableDetailValueCodeSupport.java
index d3a695b26..82be63767 100644
--- a/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/observables/EmfObservableDetailValueCodeSupport.java
+++ b/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/observables/EmfObservableDetailValueCodeSupport.java
@@ -23,25 +23,25 @@
  *
  */
 public class EmfObservableDetailValueCodeSupport extends BeanObservableDetailCodeSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // BeanObservableDetailCodeSupport
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void addDetailSourceCode(List<String> lines,
-      CodeGenerationSupport generationSupport,
-      DetailBeanObservableInfo observable,
-      ObservableInfo masterObservable) throws Exception {
-    DetailEmfObservableInfo emfObservable = (DetailEmfObservableInfo) observable;
-    //
-    lines.add("org.eclipse.core.databinding.observable.value.IObservableValue "
-        + observable.getVariableIdentifier()
-        + emfObservable.getPropertiesSupport().getEMFObservablesCode(
-            "observeDetailValue(org.eclipse.core.databinding.observable.Realm.getDefault(), ")
-        + masterObservable.getVariableIdentifier()
-        + ", "
-        + emfObservable.getDetailPropertyReference()
-        + ");");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// BeanObservableDetailCodeSupport
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void addDetailSourceCode(List<String> lines,
+			CodeGenerationSupport generationSupport,
+			DetailBeanObservableInfo observable,
+			ObservableInfo masterObservable) throws Exception {
+		DetailEmfObservableInfo emfObservable = (DetailEmfObservableInfo) observable;
+		//
+		lines.add("org.eclipse.core.databinding.observable.value.IObservableValue "
+				+ observable.getVariableIdentifier()
+				+ emfObservable.getPropertiesSupport().getEMFObservablesCode(
+						"observeDetailValue(org.eclipse.core.databinding.observable.Realm.getDefault(), ")
+				+ masterObservable.getVariableIdentifier()
+				+ ", "
+				+ emfObservable.getDetailPropertyReference()
+				+ ");");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/observables/EmfObservableListCodeSupport.java b/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/observables/EmfObservableListCodeSupport.java
index 181dbb8fc..744e2ee48 100644
--- a/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/observables/EmfObservableListCodeSupport.java
+++ b/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/observables/EmfObservableListCodeSupport.java
@@ -23,31 +23,31 @@
  *
  */
 public class EmfObservableListCodeSupport extends ObservableCodeSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ObservableCodeSupport
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void addSourceCode(ObservableInfo observable,
-      List<String> lines,
-      CodeGenerationSupport generationSupport) throws Exception {
-    // prepare variable
-    if (observable.getVariableIdentifier() == null) {
-      observable.setVariableIdentifier(generationSupport.generateLocalName(
-          observable.getBindableObject().getReference(),
-          observable.getBindableProperty().getPresentation().getText(),
-          "ObserveList"));
-    }
-    // add code
-    lines.add("org.eclipse.core.databinding.observable.list.IObservableList "
-        + observable.getVariableIdentifier()
-        + PropertiesSupport.getEMFObservablesCode(
-            observable.getBindableObject(),
-            "observeList(org.eclipse.core.databinding.observable.Realm.getDefault(), ")
-        + observable.getBindableObject().getReference()
-        + ", "
-        + observable.getBindableProperty().getReference()
-        + ");");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ObservableCodeSupport
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void addSourceCode(ObservableInfo observable,
+			List<String> lines,
+			CodeGenerationSupport generationSupport) throws Exception {
+		// prepare variable
+		if (observable.getVariableIdentifier() == null) {
+			observable.setVariableIdentifier(generationSupport.generateLocalName(
+					observable.getBindableObject().getReference(),
+					observable.getBindableProperty().getPresentation().getText(),
+					"ObserveList"));
+		}
+		// add code
+		lines.add("org.eclipse.core.databinding.observable.list.IObservableList "
+				+ observable.getVariableIdentifier()
+				+ PropertiesSupport.getEMFObservablesCode(
+						observable.getBindableObject(),
+						"observeList(org.eclipse.core.databinding.observable.Realm.getDefault(), ")
+				+ observable.getBindableObject().getReference()
+				+ ", "
+				+ observable.getBindableProperty().getReference()
+				+ ");");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/observables/EmfObservableValueCodeSupport.java b/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/observables/EmfObservableValueCodeSupport.java
index a8463a45a..da328bc2e 100644
--- a/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/observables/EmfObservableValueCodeSupport.java
+++ b/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/observables/EmfObservableValueCodeSupport.java
@@ -23,29 +23,29 @@
  *
  */
 public class EmfObservableValueCodeSupport extends ObservableCodeSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ObservableCodeSupport
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void addSourceCode(ObservableInfo observable,
-      List<String> lines,
-      CodeGenerationSupport generationSupport) throws Exception {
-    // prepare variable
-    if (observable.getVariableIdentifier() == null) {
-      observable.setVariableIdentifier(generationSupport.generateLocalName(
-          observable.getBindableObject().getReference(),
-          observable.getBindableProperty().getPresentation().getText(),
-          "ObserveValue"));
-    }
-    // add code
-    lines.add("org.eclipse.core.databinding.observable.value.IObservableValue "
-        + observable.getVariableIdentifier()
-        + PropertiesSupport.getEMFObservablesCode(observable.getBindableObject(), "observeValue(")
-        + observable.getBindableObject().getReference()
-        + ", "
-        + observable.getBindableProperty().getReference()
-        + ");");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ObservableCodeSupport
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void addSourceCode(ObservableInfo observable,
+			List<String> lines,
+			CodeGenerationSupport generationSupport) throws Exception {
+		// prepare variable
+		if (observable.getVariableIdentifier() == null) {
+			observable.setVariableIdentifier(generationSupport.generateLocalName(
+					observable.getBindableObject().getReference(),
+					observable.getBindableProperty().getPresentation().getText(),
+					"ObserveValue"));
+		}
+		// add code
+		lines.add("org.eclipse.core.databinding.observable.value.IObservableValue "
+				+ observable.getVariableIdentifier()
+				+ PropertiesSupport.getEMFObservablesCode(observable.getBindableObject(), "observeValue(")
+				+ observable.getBindableObject().getReference()
+				+ ", "
+				+ observable.getBindableProperty().getReference()
+				+ ");");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/observables/ListEmfObservableInfo.java b/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/observables/ListEmfObservableInfo.java
index a378b45e1..75751078b 100644
--- a/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/observables/ListEmfObservableInfo.java
+++ b/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/observables/ListEmfObservableInfo.java
@@ -21,22 +21,22 @@
  * @coverage bindings.rcp.emf.model
  */
 public final class ListEmfObservableInfo extends BeanObservableInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ListEmfObservableInfo(EObjectBindableInfo eObject, EPropertyBindableInfo eProperty) {
-    super(eObject, eProperty);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ListEmfObservableInfo(EObjectBindableInfo eObject, EPropertyBindableInfo eProperty) {
+		super(eObject, eProperty);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getPresentationText() throws Exception {
-    return super.getPresentationText() + "(List)";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getPresentationText() throws Exception {
+		return super.getPresentationText() + "(List)";
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/observables/MapsEmfObservableInfo.java b/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/observables/MapsEmfObservableInfo.java
index 112e60121..8ae458247 100644
--- a/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/observables/MapsEmfObservableInfo.java
+++ b/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/observables/MapsEmfObservableInfo.java
@@ -34,109 +34,109 @@
  * @coverage bindings.rcp.emf.model
  */
 public class MapsEmfObservableInfo extends MapsBeanObservableInfo {
-  private final PropertiesSupport m_propertiesSupport;
-  private List<PropertyInfo> m_emfProperties;
+	private final PropertiesSupport m_propertiesSupport;
+	private List<PropertyInfo> m_emfProperties;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public MapsEmfObservableInfo(ObservableInfo domainObservable, PropertiesSupport propertiesSupport) {
-    super(domainObservable, null, null);
-    m_propertiesSupport = propertiesSupport;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public MapsEmfObservableInfo(ObservableInfo domainObservable, PropertiesSupport propertiesSupport) {
+		super(domainObservable, null, null);
+		m_propertiesSupport = propertiesSupport;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void setProperties(String[] properties) throws Exception {
-    super.setProperties(properties);
-    // prepare EMF properties
-    List<PropertyInfo> emfProperties = m_propertiesSupport.getProperties(getElementType());
-    Assert.isTrue(!CollectionUtils.isEmpty(emfProperties));
-    // bind properties to EMF properties
-    m_emfProperties = Lists.newArrayList();
-    //
-    for (String propertyName : properties) {
-      for (PropertyInfo property : emfProperties) {
-        if (propertyName.equals(property.name)) {
-          m_emfProperties.add(property);
-          break;
-        }
-      }
-    }
-    //
-    Assert.equals(properties.length, m_emfProperties.size());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void setProperties(String[] properties) throws Exception {
+		super.setProperties(properties);
+		// prepare EMF properties
+		List<PropertyInfo> emfProperties = m_propertiesSupport.getProperties(getElementType());
+		Assert.isTrue(!CollectionUtils.isEmpty(emfProperties));
+		// bind properties to EMF properties
+		m_emfProperties = Lists.newArrayList();
+		//
+		for (String propertyName : properties) {
+			for (PropertyInfo property : emfProperties) {
+				if (propertyName.equals(property.name)) {
+					m_emfProperties.add(property);
+					break;
+				}
+			}
+		}
+		//
+		Assert.equals(properties.length, m_emfProperties.size());
+	}
 
-  public void setEMFProperties(List<String> referenceProperties) throws Exception {
-    Assert.isTrue(!CollectionUtils.isEmpty(referenceProperties));
-    // prepare EMF class info
-    Object[] firstResult = m_propertiesSupport.getClassInfoForProperty(referenceProperties.get(0));
-    Assert.isNotNull(firstResult);
-    //
-    m_emfProperties = Lists.newArrayList();
-    List<String> properties = Lists.newArrayList();
-    HierarchySupport hierarchySupport = new HierarchySupport(m_propertiesSupport, false);
-    // prepare EMF properties
-    for (String propertyReference : referenceProperties) {
-      Object[] result = m_propertiesSupport.getClassInfoForProperty(propertyReference);
-      Assert.isNotNull(result);
-      ClassInfo classInfo = (ClassInfo) result[0];
-      Assert.isNotNull(classInfo.thisClass);
-      hierarchySupport.addClass(classInfo);
-      //
-      for (PropertyInfo property : classInfo.properties) {
-        if (propertyReference.equals(property.reference)) {
-          m_emfProperties.add(property);
-          properties.add(property.name);
-          break;
-        }
-      }
-    }
-    // prepare element type
-    ClassInfo lastClassInfo = hierarchySupport.getLastClass();
-    setElementType(lastClassInfo.thisClass);
-    //
-    Assert.equals(referenceProperties.size(), m_emfProperties.size());
-    super.setProperties(properties.toArray(new String[properties.size()]));
-  }
+	public void setEMFProperties(List<String> referenceProperties) throws Exception {
+		Assert.isTrue(!CollectionUtils.isEmpty(referenceProperties));
+		// prepare EMF class info
+		Object[] firstResult = m_propertiesSupport.getClassInfoForProperty(referenceProperties.get(0));
+		Assert.isNotNull(firstResult);
+		//
+		m_emfProperties = Lists.newArrayList();
+		List<String> properties = Lists.newArrayList();
+		HierarchySupport hierarchySupport = new HierarchySupport(m_propertiesSupport, false);
+		// prepare EMF properties
+		for (String propertyReference : referenceProperties) {
+			Object[] result = m_propertiesSupport.getClassInfoForProperty(propertyReference);
+			Assert.isNotNull(result);
+			ClassInfo classInfo = (ClassInfo) result[0];
+			Assert.isNotNull(classInfo.thisClass);
+			hierarchySupport.addClass(classInfo);
+			//
+			for (PropertyInfo property : classInfo.properties) {
+				if (propertyReference.equals(property.reference)) {
+					m_emfProperties.add(property);
+					properties.add(property.name);
+					break;
+				}
+			}
+		}
+		// prepare element type
+		ClassInfo lastClassInfo = hierarchySupport.getLastClass();
+		setElementType(lastClassInfo.thisClass);
+		//
+		Assert.equals(referenceProperties.size(), m_emfProperties.size());
+		super.setProperties(properties.toArray(new String[properties.size()]));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void addSourceCode(List<String> lines, CodeGenerationSupport generationSupport)
-      throws Exception {
-    // prepare variable
-    if (getVariableIdentifier() == null) {
-      setVariableIdentifier(generationSupport.generateLocalName("observeMaps"));
-    }
-    // prepare properties
-    StringBuffer properties = new StringBuffer();
-    for (Iterator<PropertyInfo> I = m_emfProperties.iterator(); I.hasNext();) {
-      PropertyInfo property = I.next();
-      properties.append(property.reference);
-      if (I.hasNext()) {
-        properties.append(", ");
-      }
-    }
-    // add code
-    KnownElementsObservableInfo domainObservable =
-        (KnownElementsObservableInfo) getDomainObservable();
-    //
-    lines.add("org.eclipse.core.databinding.observable.map.IObservableMap[] "
-        + getVariableIdentifier()
-        + m_propertiesSupport.getEMFObservablesCode("observeMaps(")
-        + domainObservable.getSourceCode()
-        + ", new org.eclipse.emf.ecore.EStructuralFeature[]{"
-        + properties.toString()
-        + "});");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void addSourceCode(List<String> lines, CodeGenerationSupport generationSupport)
+			throws Exception {
+		// prepare variable
+		if (getVariableIdentifier() == null) {
+			setVariableIdentifier(generationSupport.generateLocalName("observeMaps"));
+		}
+		// prepare properties
+		StringBuffer properties = new StringBuffer();
+		for (Iterator<PropertyInfo> I = m_emfProperties.iterator(); I.hasNext();) {
+			PropertyInfo property = I.next();
+			properties.append(property.reference);
+			if (I.hasNext()) {
+				properties.append(", ");
+			}
+		}
+		// add code
+		KnownElementsObservableInfo domainObservable =
+				(KnownElementsObservableInfo) getDomainObservable();
+		//
+		lines.add("org.eclipse.core.databinding.observable.map.IObservableMap[] "
+				+ getVariableIdentifier()
+				+ m_propertiesSupport.getEMFObservablesCode("observeMaps(")
+				+ domainObservable.getSourceCode()
+				+ ", new org.eclipse.emf.ecore.EStructuralFeature[]{"
+				+ properties.toString()
+				+ "});");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/observables/ValueEmfObservableInfo.java b/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/observables/ValueEmfObservableInfo.java
index 1a1bef2e5..02400a3a4 100644
--- a/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/observables/ValueEmfObservableInfo.java
+++ b/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/observables/ValueEmfObservableInfo.java
@@ -21,12 +21,12 @@
  * @coverage bindings.rcp.emf.model
  */
 public final class ValueEmfObservableInfo extends BeanObservableInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ValueEmfObservableInfo(EObjectBindableInfo eObject, EPropertyBindableInfo eProperty) {
-    super(eObject, eProperty);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ValueEmfObservableInfo(EObjectBindableInfo eObject, EPropertyBindableInfo eProperty) {
+		super(eObject, eProperty);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/observables/designer/EmfBeansObservableFactoryInfo.java b/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/observables/designer/EmfBeansObservableFactoryInfo.java
index 7885a3766..8d06391b8 100644
--- a/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/observables/designer/EmfBeansObservableFactoryInfo.java
+++ b/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/observables/designer/EmfBeansObservableFactoryInfo.java
@@ -25,104 +25,104 @@
  * @coverage bindings.rcp.emf.model
  */
 public final class EmfBeansObservableFactoryInfo extends BeansObservableFactoryInfo {
-  private final String m_baseClassName;
-  private final Class<?>[] m_constructorParameters;
-  private final PropertiesSupport m_propertiesSupport;
-  private PropertyInfo m_emfProperty;
+	private final String m_baseClassName;
+	private final Class<?>[] m_constructorParameters;
+	private final PropertiesSupport m_propertiesSupport;
+	private PropertyInfo m_emfProperty;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Creation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private EmfBeansObservableFactoryInfo(String className,
-      String baseClassName,
-      Class<?>[] constructorParameters,
-      PropertiesSupport propertiesSupport) {
-    super(className);
-    m_baseClassName = baseClassName;
-    m_constructorParameters = constructorParameters;
-    m_propertiesSupport = propertiesSupport;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Creation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private EmfBeansObservableFactoryInfo(String className,
+			String baseClassName,
+			Class<?>[] constructorParameters,
+			PropertiesSupport propertiesSupport) {
+		super(className);
+		m_baseClassName = baseClassName;
+		m_constructorParameters = constructorParameters;
+		m_propertiesSupport = propertiesSupport;
+	}
 
-  public static EmfBeansObservableFactoryInfo create(String className,
-      PropertiesSupport propertiesSupport) {
-    String baseClassName;
-    Class<?>[] constructorParameters;
-    if (propertiesSupport.isEditingDomainMode()) {
-      baseClassName = "org.eclipse.wb.rcp.databinding.EMFEditBeansListObservableFactory";
-      constructorParameters =
-          new Class[]{
-              Class.class,
-              propertiesSupport.getEditingDomainClass(),
-              propertiesSupport.getEStructuralFeature()};
-    } else {
-      baseClassName = "org.eclipse.wb.rcp.databinding.EMFBeansListObservableFactory";
-      constructorParameters = new Class[]{Class.class, propertiesSupport.getEStructuralFeature()};
-    }
-    if (className == null) {
-      className = baseClassName;
-    }
-    return new EmfBeansObservableFactoryInfo(className,
-        baseClassName,
-        constructorParameters,
-        propertiesSupport);
-  }
+	public static EmfBeansObservableFactoryInfo create(String className,
+			PropertiesSupport propertiesSupport) {
+		String baseClassName;
+		Class<?>[] constructorParameters;
+		if (propertiesSupport.isEditingDomainMode()) {
+			baseClassName = "org.eclipse.wb.rcp.databinding.EMFEditBeansListObservableFactory";
+			constructorParameters =
+					new Class[]{
+							Class.class,
+							propertiesSupport.getEditingDomainClass(),
+							propertiesSupport.getEStructuralFeature()};
+		} else {
+			baseClassName = "org.eclipse.wb.rcp.databinding.EMFBeansListObservableFactory";
+			constructorParameters = new Class[]{Class.class, propertiesSupport.getEStructuralFeature()};
+		}
+		if (className == null) {
+			className = baseClassName;
+		}
+		return new EmfBeansObservableFactoryInfo(className,
+				baseClassName,
+				constructorParameters,
+				propertiesSupport);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void setPropertyName(String propertyName) throws Exception {
-    super.setPropertyName(propertyName);
-    //
-    m_emfProperty = m_propertiesSupport.getProperty(getElementType(), propertyName);
-    Assert.isNotNull(m_emfProperty);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void setPropertyName(String propertyName) throws Exception {
+		super.setPropertyName(propertyName);
+		//
+		m_emfProperty = m_propertiesSupport.getProperty(getElementType(), propertyName);
+		Assert.isNotNull(m_emfProperty);
+	}
 
-  public void setEMFPropertyReference(String propertyReference) throws Exception {
-    Object[] result = m_propertiesSupport.getClassInfoForProperty(propertyReference);
-    Assert.isNotNull(result);
-    //
-    m_emfProperty = (PropertyInfo) result[1];
-    m_propertyName = m_emfProperty.name;
-  }
+	public void setEMFPropertyReference(String propertyReference) throws Exception {
+		Object[] result = m_propertiesSupport.getClassInfoForProperty(propertyReference);
+		Assert.isNotNull(result);
+		//
+		m_emfProperty = (PropertyInfo) result[1];
+		m_propertyName = m_emfProperty.name;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void configure(ChooseClassConfiguration configuration) {
-    configuration.setValueScope(m_baseClassName);
-    configuration.setClearValue(m_baseClassName);
-    configuration.setBaseClassName(m_baseClassName);
-    configuration.setConstructorParameters(m_constructorParameters);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void configure(ChooseClassConfiguration configuration) {
+		configuration.setValueScope(m_baseClassName);
+		configuration.setClearValue(m_baseClassName);
+		configuration.setBaseClassName(m_baseClassName);
+		configuration.setConstructorParameters(m_constructorParameters);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void addSourceCode(List<String> lines) throws Exception {
-    String domainCode =
-        m_propertiesSupport.isEditingDomainMode() ? m_propertiesSupport.getEditingDomainReference()
-            + ", " : "";
-    lines.add(m_className
-        + " "
-        + getVariableIdentifier()
-        + " = new "
-        + m_className
-        + "("
-        + m_elementType.getName()
-        + ".class, "
-        + domainCode
-        + m_emfProperty.reference
-        + ");");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void addSourceCode(List<String> lines) throws Exception {
+		String domainCode =
+				m_propertiesSupport.isEditingDomainMode() ? m_propertiesSupport.getEditingDomainReference()
+						+ ", " : "";
+		lines.add(m_className
+				+ " "
+				+ getVariableIdentifier()
+				+ " = new "
+				+ m_className
+				+ "("
+				+ m_elementType.getName()
+				+ ".class, "
+				+ domainCode
+				+ m_emfProperty.reference
+				+ ");");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/observables/designer/EmfTreeBeanAdvisorInfo.java b/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/observables/designer/EmfTreeBeanAdvisorInfo.java
index 57db0dcaf..81d125e09 100644
--- a/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/observables/designer/EmfTreeBeanAdvisorInfo.java
+++ b/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/observables/designer/EmfTreeBeanAdvisorInfo.java
@@ -25,129 +25,129 @@
  * @coverage bindings.rcp.emf.model
  */
 public class EmfTreeBeanAdvisorInfo extends TreeBeanAdvisorInfo {
-  private static final String ADVISOR_CLASS = "org.eclipse.wb.rcp.databinding.EMFTreeBeanAdvisor";
-  private final PropertiesSupport m_propertiesSupport;
-  private PropertyInfo m_parentProperty;
-  private PropertyInfo m_childrenProperty;
-  private PropertyInfo m_hasChildrenProperty;
+	private static final String ADVISOR_CLASS = "org.eclipse.wb.rcp.databinding.EMFTreeBeanAdvisor";
+	private final PropertiesSupport m_propertiesSupport;
+	private PropertyInfo m_parentProperty;
+	private PropertyInfo m_childrenProperty;
+	private PropertyInfo m_hasChildrenProperty;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public EmfTreeBeanAdvisorInfo(PropertiesSupport propertiesSupport) {
-    m_propertiesSupport = propertiesSupport;
-    setClassName(ADVISOR_CLASS);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public EmfTreeBeanAdvisorInfo(PropertiesSupport propertiesSupport) {
+		m_propertiesSupport = propertiesSupport;
+		setClassName(ADVISOR_CLASS);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void setParentProperty(String parentProperty) throws Exception {
-    super.setParentProperty(parentProperty);
-    //
-    m_parentProperty = m_propertiesSupport.getProperty(getElementType(), parentProperty);
-    Assert.isNotNull(m_parentProperty);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void setParentProperty(String parentProperty) throws Exception {
+		super.setParentProperty(parentProperty);
+		//
+		m_parentProperty = m_propertiesSupport.getProperty(getElementType(), parentProperty);
+		Assert.isNotNull(m_parentProperty);
+	}
 
-  public void setEMFParentProperty(String parentPropertyReference) throws Exception {
-    if (parentPropertyReference == null) {
-      m_parentProperty = null;
-      super.setParentProperty(null);
-    } else {
-      Object[] result = m_propertiesSupport.getClassInfoForProperty(parentPropertyReference);
-      Assert.isNotNull(result);
-      //
-      m_parentProperty = (PropertyInfo) result[1];
-      super.setParentProperty(m_parentProperty.name);
-    }
-  }
+	public void setEMFParentProperty(String parentPropertyReference) throws Exception {
+		if (parentPropertyReference == null) {
+			m_parentProperty = null;
+			super.setParentProperty(null);
+		} else {
+			Object[] result = m_propertiesSupport.getClassInfoForProperty(parentPropertyReference);
+			Assert.isNotNull(result);
+			//
+			m_parentProperty = (PropertyInfo) result[1];
+			super.setParentProperty(m_parentProperty.name);
+		}
+	}
 
-  @Override
-  public void setChildrenProperty(String childrenProperty) throws Exception {
-    super.setChildrenProperty(childrenProperty);
-    //
-    m_childrenProperty = m_propertiesSupport.getProperty(getElementType(), childrenProperty);
-    Assert.isNotNull(m_childrenProperty);
-  }
+	@Override
+	public void setChildrenProperty(String childrenProperty) throws Exception {
+		super.setChildrenProperty(childrenProperty);
+		//
+		m_childrenProperty = m_propertiesSupport.getProperty(getElementType(), childrenProperty);
+		Assert.isNotNull(m_childrenProperty);
+	}
 
-  public void setEMFChildrenProperty(String childrenPropertyReference) throws Exception {
-    if (childrenPropertyReference == null) {
-      m_childrenProperty = null;
-      super.setChildrenProperty(null);
-    } else {
-      Object[] result = m_propertiesSupport.getClassInfoForProperty(childrenPropertyReference);
-      Assert.isNotNull(result);
-      //
-      m_childrenProperty = (PropertyInfo) result[1];
-      super.setChildrenProperty(m_childrenProperty.name);
-    }
-  }
+	public void setEMFChildrenProperty(String childrenPropertyReference) throws Exception {
+		if (childrenPropertyReference == null) {
+			m_childrenProperty = null;
+			super.setChildrenProperty(null);
+		} else {
+			Object[] result = m_propertiesSupport.getClassInfoForProperty(childrenPropertyReference);
+			Assert.isNotNull(result);
+			//
+			m_childrenProperty = (PropertyInfo) result[1];
+			super.setChildrenProperty(m_childrenProperty.name);
+		}
+	}
 
-  @Override
-  public void setHasChildrenProperty(String hasChildrenProperty) throws Exception {
-    super.setHasChildrenProperty(hasChildrenProperty);
-    //
-    m_hasChildrenProperty = m_propertiesSupport.getProperty(getElementType(), hasChildrenProperty);
-    Assert.isNotNull(m_hasChildrenProperty);
-  }
+	@Override
+	public void setHasChildrenProperty(String hasChildrenProperty) throws Exception {
+		super.setHasChildrenProperty(hasChildrenProperty);
+		//
+		m_hasChildrenProperty = m_propertiesSupport.getProperty(getElementType(), hasChildrenProperty);
+		Assert.isNotNull(m_hasChildrenProperty);
+	}
 
-  public void setEMFHasChildrenProperty(String hasChildrenPropertyReference) throws Exception {
-    if (hasChildrenPropertyReference == null) {
-      m_hasChildrenProperty = null;
-      super.setHasChildrenProperty(null);
-    } else {
-      Object[] result = m_propertiesSupport.getClassInfoForProperty(hasChildrenPropertyReference);
-      Assert.isNotNull(result);
-      //
-      m_hasChildrenProperty = (PropertyInfo) result[1];
-      super.setHasChildrenProperty(m_hasChildrenProperty.name);
-    }
-  }
+	public void setEMFHasChildrenProperty(String hasChildrenPropertyReference) throws Exception {
+		if (hasChildrenPropertyReference == null) {
+			m_hasChildrenProperty = null;
+			super.setHasChildrenProperty(null);
+		} else {
+			Object[] result = m_propertiesSupport.getClassInfoForProperty(hasChildrenPropertyReference);
+			Assert.isNotNull(result);
+			//
+			m_hasChildrenProperty = (PropertyInfo) result[1];
+			super.setHasChildrenProperty(m_hasChildrenProperty.name);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void configure(ChooseClassConfiguration configuration) {
-    configuration.setValueScope(ADVISOR_CLASS);
-    configuration.setClearValue(ADVISOR_CLASS);
-    configuration.setBaseClassName(ADVISOR_CLASS);
-    Class<?> eStructuralFeature = m_propertiesSupport.getEStructuralFeature();
-    configuration.setConstructorParameters(new Class[]{
-        eStructuralFeature,
-        eStructuralFeature,
-        eStructuralFeature});
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void configure(ChooseClassConfiguration configuration) {
+		configuration.setValueScope(ADVISOR_CLASS);
+		configuration.setClearValue(ADVISOR_CLASS);
+		configuration.setBaseClassName(ADVISOR_CLASS);
+		Class<?> eStructuralFeature = m_propertiesSupport.getEStructuralFeature();
+		configuration.setConstructorParameters(new Class[]{
+				eStructuralFeature,
+				eStructuralFeature,
+				eStructuralFeature});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void addSourceCode(List<String> lines) throws Exception {
-    String parentProperty = m_parentProperty == null ? "null" : m_parentProperty.reference;
-    String childrenProperty = m_childrenProperty == null ? "null" : m_childrenProperty.reference;
-    String hasChildrenProperty =
-        m_hasChildrenProperty == null ? "null" : m_hasChildrenProperty.reference;
-    lines.add(ADVISOR_CLASS
-        + " "
-        + getVariableIdentifier()
-        + " = new "
-        + m_className
-        + "("
-        + parentProperty
-        + ", "
-        + childrenProperty
-        + ", "
-        + hasChildrenProperty
-        + ");");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void addSourceCode(List<String> lines) throws Exception {
+		String parentProperty = m_parentProperty == null ? "null" : m_parentProperty.reference;
+		String childrenProperty = m_childrenProperty == null ? "null" : m_childrenProperty.reference;
+		String hasChildrenProperty =
+				m_hasChildrenProperty == null ? "null" : m_hasChildrenProperty.reference;
+		lines.add(ADVISOR_CLASS
+				+ " "
+				+ getVariableIdentifier()
+				+ " = new "
+				+ m_className
+				+ "("
+				+ parentProperty
+				+ ", "
+				+ childrenProperty
+				+ ", "
+				+ hasChildrenProperty
+				+ ");");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/observables/designer/EmfTreeObservableLabelProviderInfo.java b/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/observables/designer/EmfTreeObservableLabelProviderInfo.java
index 6caee1695..d2f216e0a 100644
--- a/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/observables/designer/EmfTreeObservableLabelProviderInfo.java
+++ b/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/observables/designer/EmfTreeObservableLabelProviderInfo.java
@@ -27,117 +27,117 @@
  * @coverage bindings.rcp.emf.model
  */
 public class EmfTreeObservableLabelProviderInfo extends TreeObservableLabelProviderInfo {
-  private static final String PROVIDER_CLASS =
-      "org.eclipse.wb.rcp.databinding.EMFTreeObservableLabelProvider";
-  private final PropertiesSupport m_propertiesSupport;
-  private PropertyInfo m_textProperty;
-  private PropertyInfo m_imageProperty;
+	private static final String PROVIDER_CLASS =
+			"org.eclipse.wb.rcp.databinding.EMFTreeObservableLabelProvider";
+	private final PropertiesSupport m_propertiesSupport;
+	private PropertyInfo m_textProperty;
+	private PropertyInfo m_imageProperty;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public EmfTreeObservableLabelProviderInfo(String className,
-      KnownElementsObservableInfo allElementsObservable,
-      PropertiesSupport propertiesSupport) {
-    super(className, allElementsObservable);
-    m_propertiesSupport = propertiesSupport;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public EmfTreeObservableLabelProviderInfo(String className,
+			KnownElementsObservableInfo allElementsObservable,
+			PropertiesSupport propertiesSupport) {
+		super(className, allElementsObservable);
+		m_propertiesSupport = propertiesSupport;
+	}
 
-  public EmfTreeObservableLabelProviderInfo(KnownElementsObservableInfo allElementsObservable,
-      PropertiesSupport propertiesSupport) {
-    this(PROVIDER_CLASS, allElementsObservable, propertiesSupport);
-  }
+	public EmfTreeObservableLabelProviderInfo(KnownElementsObservableInfo allElementsObservable,
+			PropertiesSupport propertiesSupport) {
+		this(PROVIDER_CLASS, allElementsObservable, propertiesSupport);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void setTextProperty(String textProperty) throws Exception {
-    super.setTextProperty(textProperty);
-    //
-    m_textProperty = m_propertiesSupport.getProperty(getElementType(), textProperty);
-    Assert.isNotNull(m_textProperty);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void setTextProperty(String textProperty) throws Exception {
+		super.setTextProperty(textProperty);
+		//
+		m_textProperty = m_propertiesSupport.getProperty(getElementType(), textProperty);
+		Assert.isNotNull(m_textProperty);
+	}
 
-  public void setEMFTextProperty(String textPropertyReference) throws Exception {
-    if (textPropertyReference == null) {
-      m_textProperty = null;
-      super.setTextProperty(null);
-    } else {
-      Object[] result = m_propertiesSupport.getClassInfoForProperty(textPropertyReference);
-      Assert.isNotNull(result);
-      //
-      m_textProperty = (PropertyInfo) result[1];
-      super.setTextProperty(m_textProperty.name);
-    }
-  }
+	public void setEMFTextProperty(String textPropertyReference) throws Exception {
+		if (textPropertyReference == null) {
+			m_textProperty = null;
+			super.setTextProperty(null);
+		} else {
+			Object[] result = m_propertiesSupport.getClassInfoForProperty(textPropertyReference);
+			Assert.isNotNull(result);
+			//
+			m_textProperty = (PropertyInfo) result[1];
+			super.setTextProperty(m_textProperty.name);
+		}
+	}
 
-  @Override
-  public void setImageProperty(String imageProperty) throws Exception {
-    super.setImageProperty(imageProperty);
-    //
-    m_imageProperty = m_propertiesSupport.getProperty(getElementType(), imageProperty);
-    Assert.isNotNull(m_imageProperty);
-  }
+	@Override
+	public void setImageProperty(String imageProperty) throws Exception {
+		super.setImageProperty(imageProperty);
+		//
+		m_imageProperty = m_propertiesSupport.getProperty(getElementType(), imageProperty);
+		Assert.isNotNull(m_imageProperty);
+	}
 
-  public void setEMFImageProperty(String imagePropertyReference) throws Exception {
-    if (imagePropertyReference == null) {
-      m_imageProperty = null;
-      super.setImageProperty(null);
-    } else {
-      Object[] result = m_propertiesSupport.getClassInfoForProperty(imagePropertyReference);
-      Assert.isNotNull(result);
-      //
-      m_imageProperty = (PropertyInfo) result[1];
-      super.setImageProperty(m_imageProperty.name);
-    }
-  }
+	public void setEMFImageProperty(String imagePropertyReference) throws Exception {
+		if (imagePropertyReference == null) {
+			m_imageProperty = null;
+			super.setImageProperty(null);
+		} else {
+			Object[] result = m_propertiesSupport.getClassInfoForProperty(imagePropertyReference);
+			Assert.isNotNull(result);
+			//
+			m_imageProperty = (PropertyInfo) result[1];
+			super.setImageProperty(m_imageProperty.name);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void configure(ChooseClassConfiguration configuration, boolean useClear) {
-    configuration.setValueScope(PROVIDER_CLASS);
-    if (useClear) {
-      configuration.setClearValue(PROVIDER_CLASS);
-    }
-    configuration.setBaseClassName(PROVIDER_CLASS);
-    //
-    Class<?> iObservableSetClass = m_propertiesSupport.getIObservableSetClass();
-    if (iObservableSetClass != null) {
-      Class<?> eStructuralFeature = m_propertiesSupport.getEStructuralFeature();
-      configuration.setConstructorParameters(new Class[]{
-          iObservableSetClass,
-          eStructuralFeature,
-          eStructuralFeature});
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void configure(ChooseClassConfiguration configuration, boolean useClear) {
+		configuration.setValueScope(PROVIDER_CLASS);
+		if (useClear) {
+			configuration.setClearValue(PROVIDER_CLASS);
+		}
+		configuration.setBaseClassName(PROVIDER_CLASS);
+		//
+		Class<?> iObservableSetClass = m_propertiesSupport.getIObservableSetClass();
+		if (iObservableSetClass != null) {
+			Class<?> eStructuralFeature = m_propertiesSupport.getEStructuralFeature();
+			configuration.setConstructorParameters(new Class[]{
+					iObservableSetClass,
+					eStructuralFeature,
+					eStructuralFeature});
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getSourceCode(List<String> lines, CodeGenerationSupport generationSupport)
-      throws Exception {
-    String textProperty = m_textProperty == null ? "null" : m_textProperty.reference;
-    String imageProperty = m_imageProperty == null ? "null" : m_imageProperty.reference;
-    return "new "
-        + m_className
-        + "("
-        + getAllElementsObservable().getSourceCode()
-        + ", "
-        + textProperty
-        + ", "
-        + imageProperty
-        + ")";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getSourceCode(List<String> lines, CodeGenerationSupport generationSupport)
+			throws Exception {
+		String textProperty = m_textProperty == null ? "null" : m_textProperty.reference;
+		String imageProperty = m_imageProperty == null ? "null" : m_imageProperty.reference;
+		return "new "
+		+ m_className
+		+ "("
+		+ getAllElementsObservable().getSourceCode()
+		+ ", "
+		+ textProperty
+		+ ", "
+		+ imageProperty
+		+ ")";
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/observables/properties/EmfListPropertyCodeSupport.java b/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/observables/properties/EmfListPropertyCodeSupport.java
index 3de333686..5b326606c 100644
--- a/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/observables/properties/EmfListPropertyCodeSupport.java
+++ b/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/observables/properties/EmfListPropertyCodeSupport.java
@@ -27,77 +27,77 @@
  *
  */
 public class EmfListPropertyCodeSupport extends EmfPropertiesCodeSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public EmfListPropertyCodeSupport() {
-    super("org.eclipse.core.databinding.property.list.IListProperty");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public EmfListPropertyCodeSupport() {
+		super("org.eclipse.core.databinding.property.list.IListProperty");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parser
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected ObservableInfo createObservable(EObjectBindableInfo eObject,
-      EPropertyBindableInfo eProperty) {
-    return new ListEmfObservableInfo(eObject, eProperty);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parser
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected ObservableInfo createObservable(EObjectBindableInfo eObject,
+			EPropertyBindableInfo eProperty) {
+		return new ListEmfObservableInfo(eObject, eProperty);
+	}
 
-  @Override
-  protected ObservableInfo createDetailObservable(ObservableInfo masterObservable,
-      PropertiesSupport propertiesSupport) throws Exception {
-    Assert.isNotNull(m_parserPropertyReference);
-    //
-    DetailListEmfObservableInfo observeDetailList =
-        new DetailListEmfObservableInfo(masterObservable, propertiesSupport);
-    observeDetailList.setDetailPropertyReference(null, m_parserPropertyReference);
-    observeDetailList.setCodeSupport(new EmfListPropertyDetailCodeSupport());
-    //
-    return observeDetailList;
-  }
+	@Override
+	protected ObservableInfo createDetailObservable(ObservableInfo masterObservable,
+			PropertiesSupport propertiesSupport) throws Exception {
+		Assert.isNotNull(m_parserPropertyReference);
+		//
+		DetailListEmfObservableInfo observeDetailList =
+				new DetailListEmfObservableInfo(masterObservable, propertiesSupport);
+		observeDetailList.setDetailPropertyReference(null, m_parserPropertyReference);
+		observeDetailList.setCodeSupport(new EmfListPropertyDetailCodeSupport());
+		//
+		return observeDetailList;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void addSourceCode(ObservableInfo observable,
-      List<String> lines,
-      CodeGenerationSupport generationSupport) throws Exception {
-    // prepare variable
-    if (observable.getVariableIdentifier() == null) {
-      observable.setVariableIdentifier(generationSupport.generateLocalName(
-          observable.getBindableObject().getReference(),
-          observable.getBindableProperty().getPresentation().getText(),
-          "ObserveList"));
-    }
-    //
-    String sourceCode =
-        PropertiesSupport.getEMFPropertiesCode(observable.getBindableObject(), "list(")
-            + observable.getBindableProperty().getReference()
-            + ")";
-    if (getVariableIdentifier() != null) {
-      if (generationSupport.addModel(this)) {
-        if (generationSupport.addModel(this)) {
-          lines.add("org.eclipse.core.databinding.beans.IBeanListProperty "
-              + getVariableIdentifier()
-              + sourceCode
-              + ";");
-        }
-      }
-      sourceCode = getVariableIdentifier();
-    }
-    // add code
-    lines.add("org.eclipse.core.databinding.observable.list.IObservableList "
-        + observable.getVariableIdentifier()
-        + sourceCode
-        + ".observe("
-        + observable.getBindableObject().getReference()
-        + ");");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void addSourceCode(ObservableInfo observable,
+			List<String> lines,
+			CodeGenerationSupport generationSupport) throws Exception {
+		// prepare variable
+		if (observable.getVariableIdentifier() == null) {
+			observable.setVariableIdentifier(generationSupport.generateLocalName(
+					observable.getBindableObject().getReference(),
+					observable.getBindableProperty().getPresentation().getText(),
+					"ObserveList"));
+		}
+		//
+		String sourceCode =
+				PropertiesSupport.getEMFPropertiesCode(observable.getBindableObject(), "list(")
+				+ observable.getBindableProperty().getReference()
+				+ ")";
+		if (getVariableIdentifier() != null) {
+			if (generationSupport.addModel(this)) {
+				if (generationSupport.addModel(this)) {
+					lines.add("org.eclipse.core.databinding.beans.IBeanListProperty "
+							+ getVariableIdentifier()
+							+ sourceCode
+							+ ";");
+				}
+			}
+			sourceCode = getVariableIdentifier();
+		}
+		// add code
+		lines.add("org.eclipse.core.databinding.observable.list.IObservableList "
+				+ observable.getVariableIdentifier()
+				+ sourceCode
+				+ ".observe("
+				+ observable.getBindableObject().getReference()
+				+ ");");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/observables/properties/EmfListPropertyDetailCodeSupport.java b/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/observables/properties/EmfListPropertyDetailCodeSupport.java
index ee7afe21c..69b0400f6 100644
--- a/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/observables/properties/EmfListPropertyDetailCodeSupport.java
+++ b/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/observables/properties/EmfListPropertyDetailCodeSupport.java
@@ -25,35 +25,35 @@
  *
  */
 public class EmfListPropertyDetailCodeSupport extends BeanObservableDetailCodeSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void addDetailSourceCode(List<String> lines,
-      CodeGenerationSupport generationSupport,
-      DetailBeanObservableInfo observable,
-      ObservableInfo masterObservable) throws Exception {
-    DetailEmfObservableInfo emfObservable = (DetailEmfObservableInfo) observable;
-    //
-    String sourceCode =
-        emfObservable.getPropertiesSupport().getEMFPropertiesCode("list(")
-            + emfObservable.getDetailPropertyReference()
-            + ")";
-    if (getVariableIdentifier() != null) {
-      lines.add("org.eclipse.core.databinding.beans.IBeanListProperty "
-          + getVariableIdentifier()
-          + sourceCode
-          + ";");
-      sourceCode = " = " + getVariableIdentifier();
-    }
-    // add code
-    lines.add("org.eclipse.core.databinding.observable.list.IObservableList "
-        + observable.getVariableIdentifier()
-        + sourceCode
-        + ".observeDetail("
-        + masterObservable.getVariableIdentifier()
-        + ");");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void addDetailSourceCode(List<String> lines,
+			CodeGenerationSupport generationSupport,
+			DetailBeanObservableInfo observable,
+			ObservableInfo masterObservable) throws Exception {
+		DetailEmfObservableInfo emfObservable = (DetailEmfObservableInfo) observable;
+		//
+		String sourceCode =
+				emfObservable.getPropertiesSupport().getEMFPropertiesCode("list(")
+				+ emfObservable.getDetailPropertyReference()
+				+ ")";
+		if (getVariableIdentifier() != null) {
+			lines.add("org.eclipse.core.databinding.beans.IBeanListProperty "
+					+ getVariableIdentifier()
+					+ sourceCode
+					+ ";");
+			sourceCode = " = " + getVariableIdentifier();
+		}
+		// add code
+		lines.add("org.eclipse.core.databinding.observable.list.IObservableList "
+				+ observable.getVariableIdentifier()
+				+ sourceCode
+				+ ".observeDetail("
+				+ masterObservable.getVariableIdentifier()
+				+ ");");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/observables/properties/EmfPropertiesCodeSupport.java b/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/observables/properties/EmfPropertiesCodeSupport.java
index 851089ad7..562eeaa09 100644
--- a/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/observables/properties/EmfPropertiesCodeSupport.java
+++ b/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/observables/properties/EmfPropertiesCodeSupport.java
@@ -36,103 +36,103 @@
  *
  */
 public abstract class EmfPropertiesCodeSupport extends ObservableCodeSupport {
-  private final String m_observeSignature0;
-  private final String m_observeSignature1;
-  private final String m_observeDetailSignature;
-  protected String m_parserPropertyReference;
+	private final String m_observeSignature0;
+	private final String m_observeSignature1;
+	private final String m_observeDetailSignature;
+	protected String m_parserPropertyReference;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public EmfPropertiesCodeSupport(String parseClass) {
-    m_observeSignature0 = parseClass + ".observe(java.lang.Object)";
-    m_observeSignature1 =
-        parseClass + ".observe(org.eclipse.core.databinding.observable.Realm,java.lang.Object)";
-    m_observeDetailSignature =
-        parseClass
-            + ".observeDetail(org.eclipse.core.databinding.observable.value.IObservableValue)";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public EmfPropertiesCodeSupport(String parseClass) {
+		m_observeSignature0 = parseClass + ".observe(java.lang.Object)";
+		m_observeSignature1 =
+				parseClass + ".observe(org.eclipse.core.databinding.observable.Realm,java.lang.Object)";
+		m_observeDetailSignature =
+				parseClass
+				+ ".observeDetail(org.eclipse.core.databinding.observable.value.IObservableValue)";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public final void setParserPropertyReference(String propertyReference) {
-    m_parserPropertyReference = propertyReference;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public final void setParserPropertyReference(String propertyReference) {
+		m_parserPropertyReference = propertyReference;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parser
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public AstObjectInfo parseExpression(AstEditor editor,
-      String signature,
-      MethodInvocation invocation,
-      Expression[] arguments,
-      IModelResolver resolver,
-      IDatabindingsProvider provider) throws Exception {
-    //
-    EmfObserveTypeContainer container =
-        (EmfObserveTypeContainer) DatabindingsProvider.cast(provider).getContainer(
-            EmfObserveTypeContainer.TYPE);
-    // extract bean expression
-    Expression beanExpression;
-    if (m_observeSignature0.equals(signature)) {
-      beanExpression = arguments[0];
-    } else if (m_observeSignature1.equals(signature)) {
-      beanExpression = arguments[1];
-    } else if (m_observeDetailSignature.equals(signature)) {
-      ObservableInfo masterObservable =
-          EmfObserveTypeContainer.getMasterObservable(editor, resolver, arguments[0]);
-      Assert.isNotNull(masterObservable);
-      //
-      return createDetailObservable(masterObservable, container.getPropertiesSupport());
-    } else {
-      return null;
-    }
-    //
-    EObjectBindableInfo eObject = container.getEObject(beanExpression);
-    if (eObject == null) {
-      AbstractParser.addError(
-          editor,
-          MessageFormat.format(Messages.EmfPropertiesCodeSupport_argumentNotFound, beanExpression),
-          new Throwable());
-      return null;
-    }
-    // create observable
-    return createObservable(editor, eObject);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parser
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public AstObjectInfo parseExpression(AstEditor editor,
+			String signature,
+			MethodInvocation invocation,
+			Expression[] arguments,
+			IModelResolver resolver,
+			IDatabindingsProvider provider) throws Exception {
+		//
+		EmfObserveTypeContainer container =
+				(EmfObserveTypeContainer) DatabindingsProvider.cast(provider).getContainer(
+						EmfObserveTypeContainer.TYPE);
+		// extract bean expression
+		Expression beanExpression;
+		if (m_observeSignature0.equals(signature)) {
+			beanExpression = arguments[0];
+		} else if (m_observeSignature1.equals(signature)) {
+			beanExpression = arguments[1];
+		} else if (m_observeDetailSignature.equals(signature)) {
+			ObservableInfo masterObservable =
+					EmfObserveTypeContainer.getMasterObservable(editor, resolver, arguments[0]);
+			Assert.isNotNull(masterObservable);
+			//
+			return createDetailObservable(masterObservable, container.getPropertiesSupport());
+		} else {
+			return null;
+		}
+		//
+		EObjectBindableInfo eObject = container.getEObject(beanExpression);
+		if (eObject == null) {
+			AbstractParser.addError(
+					editor,
+					MessageFormat.format(Messages.EmfPropertiesCodeSupport_argumentNotFound, beanExpression),
+					new Throwable());
+			return null;
+		}
+		// create observable
+		return createObservable(editor, eObject);
+	}
 
-  protected ObservableInfo createObservable(AstEditor editor, EObjectBindableInfo eObject)
-      throws Exception {
-    EPropertyBindableInfo eProperty = eObject.resolvePropertyReference(m_parserPropertyReference);
-    if (eProperty == null) {
-      AbstractParser.addError(editor, MessageFormat.format(
-          Messages.EmfPropertiesCodeSupport_beanPropertyNotFound,
-          m_parserPropertyReference,
-          eObject.getReference()), new Throwable());
-      eProperty = new EPropertyBindableInfo(null, null, null, "", "");
-    }
-    //
-    ObservableInfo observable = createObservable(eObject, eProperty);
-    observable.setCodeSupport(this);
-    return observable;
-  }
+	protected ObservableInfo createObservable(AstEditor editor, EObjectBindableInfo eObject)
+			throws Exception {
+		EPropertyBindableInfo eProperty = eObject.resolvePropertyReference(m_parserPropertyReference);
+		if (eProperty == null) {
+			AbstractParser.addError(editor, MessageFormat.format(
+					Messages.EmfPropertiesCodeSupport_beanPropertyNotFound,
+					m_parserPropertyReference,
+					eObject.getReference()), new Throwable());
+			eProperty = new EPropertyBindableInfo(null, null, null, "", "");
+		}
+		//
+		ObservableInfo observable = createObservable(eObject, eProperty);
+		observable.setCodeSupport(this);
+		return observable;
+	}
 
-  /**
-   * @return {@link ObservableInfo} model for given object and property.
-   */
-  protected abstract ObservableInfo createObservable(EObjectBindableInfo eObject,
-      EPropertyBindableInfo eProperty);
+	/**
+	 * @return {@link ObservableInfo} model for given object and property.
+	 */
+	protected abstract ObservableInfo createObservable(EObjectBindableInfo eObject,
+			EPropertyBindableInfo eProperty);
 
-  /**
-   * @return {@link ObservableInfo} detail model for given master {@link ObservableInfo}.
-   */
-  protected abstract ObservableInfo createDetailObservable(ObservableInfo masterObservable,
-      PropertiesSupport propertiesSupport) throws Exception;
+	/**
+	 * @return {@link ObservableInfo} detail model for given master {@link ObservableInfo}.
+	 */
+	protected abstract ObservableInfo createDetailObservable(ObservableInfo masterObservable,
+			PropertiesSupport propertiesSupport) throws Exception;
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/observables/properties/EmfValuePropertyCodeSupport.java b/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/observables/properties/EmfValuePropertyCodeSupport.java
index b8ce3672e..f6faa206d 100644
--- a/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/observables/properties/EmfValuePropertyCodeSupport.java
+++ b/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/observables/properties/EmfValuePropertyCodeSupport.java
@@ -27,77 +27,77 @@
  *
  */
 public class EmfValuePropertyCodeSupport extends EmfPropertiesCodeSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public EmfValuePropertyCodeSupport() {
-    super("org.eclipse.core.databinding.property.value.IValueProperty");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public EmfValuePropertyCodeSupport() {
+		super("org.eclipse.core.databinding.property.value.IValueProperty");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parser
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected ObservableInfo createObservable(EObjectBindableInfo eObject,
-      EPropertyBindableInfo eProperty) {
-    return new ValueEmfObservableInfo(eObject, eProperty);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parser
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected ObservableInfo createObservable(EObjectBindableInfo eObject,
+			EPropertyBindableInfo eProperty) {
+		return new ValueEmfObservableInfo(eObject, eProperty);
+	}
 
-  @Override
-  protected ObservableInfo createDetailObservable(ObservableInfo masterObservable,
-      PropertiesSupport propertiesSupport) throws Exception {
-    Assert.isNotNull(m_parserPropertyReference);
-    //
-    DetailValueEmfObservableInfo observeDetailValue =
-        new DetailValueEmfObservableInfo(masterObservable, propertiesSupport);
-    observeDetailValue.setDetailPropertyReference(null, m_parserPropertyReference);
-    observeDetailValue.setCodeSupport(new EmfValuePropertyDetailCodeSupport());
-    //
-    return observeDetailValue;
-  }
+	@Override
+	protected ObservableInfo createDetailObservable(ObservableInfo masterObservable,
+			PropertiesSupport propertiesSupport) throws Exception {
+		Assert.isNotNull(m_parserPropertyReference);
+		//
+		DetailValueEmfObservableInfo observeDetailValue =
+				new DetailValueEmfObservableInfo(masterObservable, propertiesSupport);
+		observeDetailValue.setDetailPropertyReference(null, m_parserPropertyReference);
+		observeDetailValue.setCodeSupport(new EmfValuePropertyDetailCodeSupport());
+		//
+		return observeDetailValue;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void addSourceCode(ObservableInfo observable,
-      List<String> lines,
-      CodeGenerationSupport generationSupport) throws Exception {
-    // prepare variable
-    if (observable.getVariableIdentifier() == null) {
-      observable.setVariableIdentifier(generationSupport.generateLocalName(
-          observable.getBindableObject().getReference(),
-          observable.getBindableProperty().getPresentation().getText(),
-          "ObserveValue"));
-    }
-    //
-    String sourceCode =
-        PropertiesSupport.getEMFPropertiesCode(observable.getBindableObject(), "value(")
-            + observable.getBindableProperty().getReference()
-            + ")";
-    if (getVariableIdentifier() != null) {
-      if (generationSupport.addModel(this)) {
-        if (generationSupport.addModel(this)) {
-          lines.add("org.eclipse.core.databinding.beans.IBeanValueProperty "
-              + getVariableIdentifier()
-              + sourceCode
-              + ";");
-        }
-      }
-      sourceCode = getVariableIdentifier();
-    }
-    // add code
-    lines.add("org.eclipse.core.databinding.observable.value.IObservableValue "
-        + observable.getVariableIdentifier()
-        + sourceCode
-        + ".observe("
-        + observable.getBindableObject().getReference()
-        + ");");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void addSourceCode(ObservableInfo observable,
+			List<String> lines,
+			CodeGenerationSupport generationSupport) throws Exception {
+		// prepare variable
+		if (observable.getVariableIdentifier() == null) {
+			observable.setVariableIdentifier(generationSupport.generateLocalName(
+					observable.getBindableObject().getReference(),
+					observable.getBindableProperty().getPresentation().getText(),
+					"ObserveValue"));
+		}
+		//
+		String sourceCode =
+				PropertiesSupport.getEMFPropertiesCode(observable.getBindableObject(), "value(")
+				+ observable.getBindableProperty().getReference()
+				+ ")";
+		if (getVariableIdentifier() != null) {
+			if (generationSupport.addModel(this)) {
+				if (generationSupport.addModel(this)) {
+					lines.add("org.eclipse.core.databinding.beans.IBeanValueProperty "
+							+ getVariableIdentifier()
+							+ sourceCode
+							+ ";");
+				}
+			}
+			sourceCode = getVariableIdentifier();
+		}
+		// add code
+		lines.add("org.eclipse.core.databinding.observable.value.IObservableValue "
+				+ observable.getVariableIdentifier()
+				+ sourceCode
+				+ ".observe("
+				+ observable.getBindableObject().getReference()
+				+ ");");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/observables/properties/EmfValuePropertyDetailCodeSupport.java b/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/observables/properties/EmfValuePropertyDetailCodeSupport.java
index 63a7e7fab..dc3a1aa07 100644
--- a/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/observables/properties/EmfValuePropertyDetailCodeSupport.java
+++ b/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/model/observables/properties/EmfValuePropertyDetailCodeSupport.java
@@ -25,35 +25,35 @@
  *
  */
 public class EmfValuePropertyDetailCodeSupport extends BeanObservableDetailCodeSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void addDetailSourceCode(List<String> lines,
-      CodeGenerationSupport generationSupport,
-      DetailBeanObservableInfo observable,
-      ObservableInfo masterObservable) throws Exception {
-    DetailEmfObservableInfo emfObservable = (DetailEmfObservableInfo) observable;
-    //
-    String sourceCode =
-        emfObservable.getPropertiesSupport().getEMFPropertiesCode("value(")
-            + emfObservable.getDetailPropertyReference()
-            + ")";
-    if (getVariableIdentifier() != null) {
-      lines.add("org.eclipse.core.databinding.beans.IBeanValueProperty "
-          + getVariableIdentifier()
-          + sourceCode
-          + ";");
-      sourceCode = " = " + getVariableIdentifier();
-    }
-    // add code
-    lines.add("org.eclipse.core.databinding.observable.value.IObservableValue "
-        + observable.getVariableIdentifier()
-        + sourceCode
-        + ".observeDetail("
-        + masterObservable.getVariableIdentifier()
-        + ");");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void addDetailSourceCode(List<String> lines,
+			CodeGenerationSupport generationSupport,
+			DetailBeanObservableInfo observable,
+			ObservableInfo masterObservable) throws Exception {
+		DetailEmfObservableInfo emfObservable = (DetailEmfObservableInfo) observable;
+		//
+		String sourceCode =
+				emfObservable.getPropertiesSupport().getEMFPropertiesCode("value(")
+				+ emfObservable.getDetailPropertyReference()
+				+ ")";
+		if (getVariableIdentifier() != null) {
+			lines.add("org.eclipse.core.databinding.beans.IBeanValueProperty "
+					+ getVariableIdentifier()
+					+ sourceCode
+					+ ";");
+			sourceCode = " = " + getVariableIdentifier();
+		}
+		// add code
+		lines.add("org.eclipse.core.databinding.observable.value.IObservableValue "
+				+ observable.getVariableIdentifier()
+				+ sourceCode
+				+ ".observeDetail("
+				+ masterObservable.getVariableIdentifier()
+				+ ");");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/preferences/IPreferenceConstants.java b/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/preferences/IPreferenceConstants.java
index fae707920..98656efb1 100644
--- a/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/preferences/IPreferenceConstants.java
+++ b/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/preferences/IPreferenceConstants.java
@@ -16,5 +16,5 @@
  *
  */
 public interface IPreferenceConstants {
-  String GENERATE_CODE_FOR_VERSION_2_5 = "EMF_GENERATE_CODE_FOR_VERSION_2_5";
+	String GENERATE_CODE_FOR_VERSION_2_5 = "EMF_GENERATE_CODE_FOR_VERSION_2_5";
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/preferences/PreferenceInitializer.java b/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/preferences/PreferenceInitializer.java
index d0ab286f1..98458bcbd 100644
--- a/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/preferences/PreferenceInitializer.java
+++ b/org.eclipse.wb.rcp.databinding.emf/src/org/eclipse/wb/internal/rcp/databinding/emf/preferences/PreferenceInitializer.java
@@ -21,14 +21,14 @@
  *
  */
 public class PreferenceInitializer extends AbstractPreferenceInitializer {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AbstractPreferenceInitializer
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void initializeDefaultPreferences() {
-    IPreferenceStore store = Activator.getStore();
-    store.setDefault(IPreferenceConstants.GENERATE_CODE_FOR_VERSION_2_5, false);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AbstractPreferenceInitializer
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void initializeDefaultPreferences() {
+		IPreferenceStore store = Activator.getStore();
+		store.setDefault(IPreferenceConstants.GENERATE_CODE_FOR_VERSION_2_5, false);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/Activator.java b/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/Activator.java
index fe8dc3145..6b55b391e 100644
--- a/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/Activator.java
+++ b/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/Activator.java
@@ -25,61 +25,61 @@
  * @author lobas_av
  */
 public final class Activator extends AbstractUIPlugin {
-  public static final String PLUGIN_ID = "org.eclipse.wb.rcp.databinding.xwt";
-  private static Activator m_plugin;
+	public static final String PLUGIN_ID = "org.eclipse.wb.rcp.databinding.xwt";
+	private static Activator m_plugin;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Life cycle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void stop(BundleContext context) throws Exception {
-    m_plugin = null;
-    super.stop(context);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Life cycle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void stop(BundleContext context) throws Exception {
+		m_plugin = null;
+		super.stop(context);
+	}
 
-  @Override
-  public void start(BundleContext context) throws Exception {
-    super.start(context);
-    m_plugin = this;
-  }
+	@Override
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+		m_plugin = this;
+	}
 
-  public static Activator getDefault() {
-    return m_plugin;
-  }
+	public static Activator getDefault() {
+		return m_plugin;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Resources
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final BundleResourceProvider m_resourceProvider =
-      BundleResourceProvider.get(PLUGIN_ID);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Resources
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final BundleResourceProvider m_resourceProvider =
+			BundleResourceProvider.get(PLUGIN_ID);
 
-  /**
-   * @return the {@link Image} from "icons" directory, with caching.
-   */
-  public static Image getImage(String path) {
-    return m_resourceProvider.getImage("icons/" + path);
-  }
+	/**
+	 * @return the {@link Image} from "icons" directory, with caching.
+	 */
+	public static Image getImage(String path) {
+		return m_resourceProvider.getImage("icons/" + path);
+	}
 
-  /**
-   * @return the {@link ImageDescriptor} from "icons" directory.
-   */
-  public static ImageDescriptor getImageDescriptor(String path) {
-    return m_resourceProvider.getImageDescriptor("icons/" + path);
-  }
+	/**
+	 * @return the {@link ImageDescriptor} from "icons" directory.
+	 */
+	public static ImageDescriptor getImageDescriptor(String path) {
+		return m_resourceProvider.getImageDescriptor("icons/" + path);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Preferences
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Returns preference store for DB plugin.
-   */
-  public static IPreferenceStore getStore() {
-    return m_plugin.getPreferenceStore();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Preferences
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Returns preference store for DB plugin.
+	 */
+	public static IPreferenceStore getStore() {
+		return m_plugin.getPreferenceStore();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/DatabindingFactory.java b/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/DatabindingFactory.java
index 1f501b699..68a6fb0ac 100644
--- a/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/DatabindingFactory.java
+++ b/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/DatabindingFactory.java
@@ -24,38 +24,38 @@
  * @coverage bindings.xwt.model
  */
 public final class DatabindingFactory implements IDatabindingFactory {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IDatabindingFactory
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public IDatabindingsProvider createProvider(XmlObjectInfo xmlObjectRoot) throws Exception {
-    // check root
-    if (isRCPRootObject(xmlObjectRoot)) {
-      // create provider
-      DatabindingsProvider provider = new DatabindingsProvider(xmlObjectRoot);
-      // parse
-      DatabindingParser.parse(provider);
-      // events
-      provider.hookXmlObjectEvents();
-      //
-      return provider;
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IDatabindingFactory
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public IDatabindingsProvider createProvider(XmlObjectInfo xmlObjectRoot) throws Exception {
+		// check root
+		if (isRCPRootObject(xmlObjectRoot)) {
+			// create provider
+			DatabindingsProvider provider = new DatabindingsProvider(xmlObjectRoot);
+			// parse
+			DatabindingParser.parse(provider);
+			// events
+			provider.hookXmlObjectEvents();
+			//
+			return provider;
+		}
+		return null;
+	}
 
-  @Override
-  public AbstractUIPlugin getPlugin() {
-    return Activator.getDefault();
-  }
+	@Override
+	public AbstractUIPlugin getPlugin() {
+		return Activator.getDefault();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static boolean isRCPRootObject(XmlObjectInfo xmlObjectRoot) throws Exception {
-    return xmlObjectRoot.getDescription().getToolkit().getId() == org.eclipse.wb.internal.rcp.preferences.IPreferenceConstants.TOOLKIT_ID;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static boolean isRCPRootObject(XmlObjectInfo xmlObjectRoot) throws Exception {
+		return xmlObjectRoot.getDescription().getToolkit().getId() == org.eclipse.wb.internal.rcp.preferences.IPreferenceConstants.TOOLKIT_ID;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/DatabindingsProvider.java b/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/DatabindingsProvider.java
index 6e678333d..fb43441ec 100644
--- a/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/DatabindingsProvider.java
+++ b/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/DatabindingsProvider.java
@@ -66,323 +66,323 @@
  *
  */
 public final class DatabindingsProvider implements IDatabindingsProvider {
-  private final XmlObjectInfo m_xmlObjectRoot;
-  private final List<ObserveTypeContainer> m_containers = Lists.newArrayList();
-  private final List<BindingInfo> m_bindings = Lists.newArrayList();
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DatabindingsProvider(XmlObjectInfo xmlObjectRoot) throws Exception {
-    m_xmlObjectRoot = xmlObjectRoot;
-    // prepare containers
-    m_containers.add(new BeansObserveTypeContainer());
-    m_containers.add(new WidgetsObserveTypeContainer());
-    //
-    for (ObserveTypeContainer container : m_containers) {
-      container.initialize(this);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Internals
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public XmlObjectInfo getXmlObjectRoot() {
-    return m_xmlObjectRoot;
-  }
-
-  public void addWarning(String message, Throwable e) {
-    m_xmlObjectRoot.getContext().addWarning(new EditorWarning(message, e));
-  }
-
-  public List<ObserveTypeContainer> getContainers() {
-    return m_containers;
-  }
-
-  public ObserveTypeContainer getContainer(ObserveType type) {
-    if (type == ObserveType.BEANS) {
-      return m_containers.get(0);
-    }
-    if (type == ObserveType.WIDGETS) {
-      return m_containers.get(1);
-    }
-    return null;
-  }
-
-  public void hookXmlObjectEvents() throws Exception {
-    // update observes
-    new SynchronizeManager(this, m_xmlObjectRoot);
-    // handle delete info's
-    new XmlObjectDeleteManager(this);
-    // decorate info's
-    new XmlObjectDecorator(this);
-    // properties
-    new XmlObjectPropertiesManager(this);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Bindings
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void configureBindingViewer(IDialogSettings settings, TableViewer viewer) {
-    // prepare table
-    Table table = viewer.getTable();
-    // binding type image column
-    TableColumn bindingColumn = new TableColumn(table, SWT.NONE);
-    bindingColumn.setWidth(23);
-    bindingColumn.setResizable(false);
-    // target column
-    TableColumn targetColumn = UiUtils.createSmartColumn(table, settings, "TargetColumn", 250);
-    targetColumn.setText(Messages.DatabindingsProvider_targetColumn);
-    // model column
-    TableColumn modelColumn = UiUtils.createSmartColumn(table, settings, "ModelColumn", 250);
-    modelColumn.setText(Messages.DatabindingsProvider_modelColumn);
-    // mode column
-    TableColumn modeColumn = new TableColumn(table, SWT.NONE);
-    modeColumn.setText(Messages.DatabindingsProvider_modeColumn);
-    modeColumn.setWidth(100);
-    // label provider
-    viewer.setLabelProvider(new BindingLabelProvider());
-  }
-
-  @Override
-  public List<IBindingInfo> getBindings() {
-    return CoreUtils.cast(m_bindings);
-  }
-
-  public List<BindingInfo> getBindings0() {
-    return m_bindings;
-  }
-
-  @Override
-  public String getBindingPresentationText(IBindingInfo binding) throws Exception {
-    return null;
-  }
-
-  @Override
-  public void gotoDefinition(IBindingInfo ibinding) {
-    BindingInfo binding = (BindingInfo) ibinding;
-    int position = binding.getDefinitionOffset();
-    if (position != -1) {
-      IDesignPageSite site = IDesignPageSite.Helper.getSite(m_xmlObjectRoot);
-      site.openSourcePosition(position);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Types
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public List<ObserveType> getTypes() {
-    return ObserveType.TYPES;
-  }
-
-  @Override
-  public ObserveType getTargetStartType() {
-    return ObserveType.WIDGETS;
-  }
-
-  @Override
-  public ObserveType getModelStartType() {
-    return ObserveType.BEANS;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Observes
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public IBaseLabelProvider createPropertiesViewerLabelProvider(TreeViewer viewer) {
-    return new ObserveDecoratingLabelProvider(viewer);
-  }
-
-  @Override
-  public List<PropertyFilter> getObservePropertyFilters() {
-    return org.eclipse.wb.internal.rcp.databinding.DatabindingsProvider.observePropertyFilters();
-  }
-
-  @Override
-  public List<IObserveInfo> getObserves(ObserveType type) {
-    ObserveTypeContainer container = getContainer(type);
-    return container == null ? Collections.<IObserveInfo>emptyList() : container.getObservables();
-  }
-
-  @Override
-  public void synchronizeObserves() throws Exception {
-    // XXX synchronize for bindings
-    for (ObserveTypeContainer container : m_containers) {
-      container.synchronizeObserves();
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // UI editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public List<IUiContentProvider> getContentProviders(IBindingInfo ibinding, IPageListener listener)
-      throws Exception {
-    List<IUiContentProvider> providers = Lists.newArrayList();
-    BindingInfo binding = (BindingInfo) ibinding;
-    binding.createContentProviders(providers, listener, this);
-    return providers;
-  }
-
-  @Override
-  public void fillExternalBindingActions(ToolBar toolBar, Menu contextMenu) {
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Validate
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean validate(IObserveInfo target,
-      IObserveInfo targetProperty,
-      IObserveInfo model,
-      IObserveInfo modelProperty) throws Exception {
-    if (!(target instanceof WidgetBindableInfo)) {
-      return false;
-    }
-    return org.eclipse.wb.internal.rcp.databinding.DatabindingsProvider.doValidate(
-        CoreUtils.<AbstractBindingInfo>cast(m_bindings),
-        target,
-        targetProperty,
-        model,
-        modelProperty);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Creation/Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public IBindingInfo createBinding(IObserveInfo target,
-      IObserveInfo targetProperty,
-      IObserveInfo model,
-      IObserveInfo modelProperty) throws Exception {
-    // prepare target
-    BindableInfo targetBindable = (BindableInfo) target;
-    BindableInfo targetBindableProperty = (BindableInfo) targetProperty;
-    IObservableFactory targetFactory = targetBindableProperty.getObservableFactory();
-    // prepare model
-    BindableInfo modelBindable = (BindableInfo) model;
-    BindableInfo modelBindableProperty = (BindableInfo) modelProperty;
-    IObservableFactory modelFactory = modelBindableProperty.getObservableFactory();
-    // calculate type
-    Type type =
-        org.eclipse.wb.internal.rcp.databinding.DatabindingsProvider.calculateObserveType(
-            targetFactory,
-            modelFactory);
-    // handle input type
-    if (type == Type.Input) {
-      // XXX
-      throw new UnsupportedOperationException();
-    }
-    // create binding
-    BindingInfo binding =
-        new BindingInfo(targetBindable,
-            targetBindableProperty,
-            modelBindable,
-            modelBindableProperty);
-    binding.setDocumentEditor(new AttributeDocumentEditor(binding));
-    //
-    return binding;
-  }
-
-  @Override
-  public void addBinding(final IBindingInfo ibinding) {
-    ExecutionUtils.runLog(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        BindingInfo binding = (BindingInfo) ibinding;
-        binding.create();
-        binding.getDocumentEditor().add();
-        m_bindings.add(binding);
-      }
-    });
-  }
-
-  @Override
-  public void editBinding(final IBindingInfo ibinding) {
-    ExecutionUtils.runLog(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        BindingInfo binding = (BindingInfo) ibinding;
-        binding.getDocumentEditor().update();
-      }
-    });
-  }
-
-  @Override
-  public void deleteBinding(final IBindingInfo ibinding) {
-    ExecutionUtils.runLog(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        BindingInfo binding = (BindingInfo) ibinding;
-        binding.delete();
-        binding.getDocumentEditor().delete();
-        m_bindings.remove(binding);
-      }
-    });
-  }
-
-  @Override
-  public void deleteAllBindings() {
-    ExecutionUtils.runLog(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        for (BindingInfo binding : m_bindings) {
-          binding.delete();
-          binding.getDocumentEditor().delete();
-        }
-        m_bindings.clear();
-      }
-    });
-  }
-
-  @Override
-  public void deleteBindings(JavaInfo javaInfo) throws Exception {
-    throw new UnsupportedOperationException();
-  }
-
-  @Override
-  public boolean canMoveBinding(IBindingInfo binding, int targetIndex, boolean upDown) {
-    return false;
-  }
-
-  @Override
-  public void moveBinding(IBindingInfo binding, int sourceIndex, int targetIndex, boolean upDown) {
-    throw new UnsupportedOperationException();
-  }
-
-  @Override
-  public void setBindingPage(Object bindingPage) {
-  }
-
-  @Override
-  public void refreshDesigner() {
-    IEditorPart editor =
-        DesignerPlugin.getActiveWorkbenchWindow().getActivePage().getActiveEditor();
-    if (editor instanceof AbstractXmlEditor) {
-      AbstractXmlEditor xmlEditor = (AbstractXmlEditor) editor;
-      xmlEditor.getDesignPage().refreshGEF();
-    }
-  }
-
-  @Override
-  public void saveEdit() {
-  }
+	private final XmlObjectInfo m_xmlObjectRoot;
+	private final List<ObserveTypeContainer> m_containers = Lists.newArrayList();
+	private final List<BindingInfo> m_bindings = Lists.newArrayList();
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DatabindingsProvider(XmlObjectInfo xmlObjectRoot) throws Exception {
+		m_xmlObjectRoot = xmlObjectRoot;
+		// prepare containers
+		m_containers.add(new BeansObserveTypeContainer());
+		m_containers.add(new WidgetsObserveTypeContainer());
+		//
+		for (ObserveTypeContainer container : m_containers) {
+			container.initialize(this);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Internals
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public XmlObjectInfo getXmlObjectRoot() {
+		return m_xmlObjectRoot;
+	}
+
+	public void addWarning(String message, Throwable e) {
+		m_xmlObjectRoot.getContext().addWarning(new EditorWarning(message, e));
+	}
+
+	public List<ObserveTypeContainer> getContainers() {
+		return m_containers;
+	}
+
+	public ObserveTypeContainer getContainer(ObserveType type) {
+		if (type == ObserveType.BEANS) {
+			return m_containers.get(0);
+		}
+		if (type == ObserveType.WIDGETS) {
+			return m_containers.get(1);
+		}
+		return null;
+	}
+
+	public void hookXmlObjectEvents() throws Exception {
+		// update observes
+		new SynchronizeManager(this, m_xmlObjectRoot);
+		// handle delete info's
+		new XmlObjectDeleteManager(this);
+		// decorate info's
+		new XmlObjectDecorator(this);
+		// properties
+		new XmlObjectPropertiesManager(this);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Bindings
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void configureBindingViewer(IDialogSettings settings, TableViewer viewer) {
+		// prepare table
+		Table table = viewer.getTable();
+		// binding type image column
+		TableColumn bindingColumn = new TableColumn(table, SWT.NONE);
+		bindingColumn.setWidth(23);
+		bindingColumn.setResizable(false);
+		// target column
+		TableColumn targetColumn = UiUtils.createSmartColumn(table, settings, "TargetColumn", 250);
+		targetColumn.setText(Messages.DatabindingsProvider_targetColumn);
+		// model column
+		TableColumn modelColumn = UiUtils.createSmartColumn(table, settings, "ModelColumn", 250);
+		modelColumn.setText(Messages.DatabindingsProvider_modelColumn);
+		// mode column
+		TableColumn modeColumn = new TableColumn(table, SWT.NONE);
+		modeColumn.setText(Messages.DatabindingsProvider_modeColumn);
+		modeColumn.setWidth(100);
+		// label provider
+		viewer.setLabelProvider(new BindingLabelProvider());
+	}
+
+	@Override
+	public List<IBindingInfo> getBindings() {
+		return CoreUtils.cast(m_bindings);
+	}
+
+	public List<BindingInfo> getBindings0() {
+		return m_bindings;
+	}
+
+	@Override
+	public String getBindingPresentationText(IBindingInfo binding) throws Exception {
+		return null;
+	}
+
+	@Override
+	public void gotoDefinition(IBindingInfo ibinding) {
+		BindingInfo binding = (BindingInfo) ibinding;
+		int position = binding.getDefinitionOffset();
+		if (position != -1) {
+			IDesignPageSite site = IDesignPageSite.Helper.getSite(m_xmlObjectRoot);
+			site.openSourcePosition(position);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Types
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public List<ObserveType> getTypes() {
+		return ObserveType.TYPES;
+	}
+
+	@Override
+	public ObserveType getTargetStartType() {
+		return ObserveType.WIDGETS;
+	}
+
+	@Override
+	public ObserveType getModelStartType() {
+		return ObserveType.BEANS;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Observes
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public IBaseLabelProvider createPropertiesViewerLabelProvider(TreeViewer viewer) {
+		return new ObserveDecoratingLabelProvider(viewer);
+	}
+
+	@Override
+	public List<PropertyFilter> getObservePropertyFilters() {
+		return org.eclipse.wb.internal.rcp.databinding.DatabindingsProvider.observePropertyFilters();
+	}
+
+	@Override
+	public List<IObserveInfo> getObserves(ObserveType type) {
+		ObserveTypeContainer container = getContainer(type);
+		return container == null ? Collections.<IObserveInfo>emptyList() : container.getObservables();
+	}
+
+	@Override
+	public void synchronizeObserves() throws Exception {
+		// XXX synchronize for bindings
+		for (ObserveTypeContainer container : m_containers) {
+			container.synchronizeObserves();
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// UI editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public List<IUiContentProvider> getContentProviders(IBindingInfo ibinding, IPageListener listener)
+			throws Exception {
+		List<IUiContentProvider> providers = Lists.newArrayList();
+		BindingInfo binding = (BindingInfo) ibinding;
+		binding.createContentProviders(providers, listener, this);
+		return providers;
+	}
+
+	@Override
+	public void fillExternalBindingActions(ToolBar toolBar, Menu contextMenu) {
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Validate
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean validate(IObserveInfo target,
+			IObserveInfo targetProperty,
+			IObserveInfo model,
+			IObserveInfo modelProperty) throws Exception {
+		if (!(target instanceof WidgetBindableInfo)) {
+			return false;
+		}
+		return org.eclipse.wb.internal.rcp.databinding.DatabindingsProvider.doValidate(
+				CoreUtils.<AbstractBindingInfo>cast(m_bindings),
+				target,
+				targetProperty,
+				model,
+				modelProperty);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Creation/Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public IBindingInfo createBinding(IObserveInfo target,
+			IObserveInfo targetProperty,
+			IObserveInfo model,
+			IObserveInfo modelProperty) throws Exception {
+		// prepare target
+		BindableInfo targetBindable = (BindableInfo) target;
+		BindableInfo targetBindableProperty = (BindableInfo) targetProperty;
+		IObservableFactory targetFactory = targetBindableProperty.getObservableFactory();
+		// prepare model
+		BindableInfo modelBindable = (BindableInfo) model;
+		BindableInfo modelBindableProperty = (BindableInfo) modelProperty;
+		IObservableFactory modelFactory = modelBindableProperty.getObservableFactory();
+		// calculate type
+		Type type =
+				org.eclipse.wb.internal.rcp.databinding.DatabindingsProvider.calculateObserveType(
+						targetFactory,
+						modelFactory);
+		// handle input type
+		if (type == Type.Input) {
+			// XXX
+			throw new UnsupportedOperationException();
+		}
+		// create binding
+		BindingInfo binding =
+				new BindingInfo(targetBindable,
+						targetBindableProperty,
+						modelBindable,
+						modelBindableProperty);
+		binding.setDocumentEditor(new AttributeDocumentEditor(binding));
+		//
+		return binding;
+	}
+
+	@Override
+	public void addBinding(final IBindingInfo ibinding) {
+		ExecutionUtils.runLog(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				BindingInfo binding = (BindingInfo) ibinding;
+				binding.create();
+				binding.getDocumentEditor().add();
+				m_bindings.add(binding);
+			}
+		});
+	}
+
+	@Override
+	public void editBinding(final IBindingInfo ibinding) {
+		ExecutionUtils.runLog(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				BindingInfo binding = (BindingInfo) ibinding;
+				binding.getDocumentEditor().update();
+			}
+		});
+	}
+
+	@Override
+	public void deleteBinding(final IBindingInfo ibinding) {
+		ExecutionUtils.runLog(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				BindingInfo binding = (BindingInfo) ibinding;
+				binding.delete();
+				binding.getDocumentEditor().delete();
+				m_bindings.remove(binding);
+			}
+		});
+	}
+
+	@Override
+	public void deleteAllBindings() {
+		ExecutionUtils.runLog(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				for (BindingInfo binding : m_bindings) {
+					binding.delete();
+					binding.getDocumentEditor().delete();
+				}
+				m_bindings.clear();
+			}
+		});
+	}
+
+	@Override
+	public void deleteBindings(JavaInfo javaInfo) throws Exception {
+		throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public boolean canMoveBinding(IBindingInfo binding, int targetIndex, boolean upDown) {
+		return false;
+	}
+
+	@Override
+	public void moveBinding(IBindingInfo binding, int sourceIndex, int targetIndex, boolean upDown) {
+		throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public void setBindingPage(Object bindingPage) {
+	}
+
+	@Override
+	public void refreshDesigner() {
+		IEditorPart editor =
+				DesignerPlugin.getActiveWorkbenchWindow().getActivePage().getActiveEditor();
+		if (editor instanceof AbstractXmlEditor) {
+			AbstractXmlEditor xmlEditor = (AbstractXmlEditor) editor;
+			xmlEditor.getDesignPage().refreshGEF();
+		}
+	}
+
+	@Override
+	public void saveEdit() {
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/DesignPageFactory.java b/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/DesignPageFactory.java
index b4451395c..d3e041da3 100644
--- a/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/DesignPageFactory.java
+++ b/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/DesignPageFactory.java
@@ -27,44 +27,44 @@
  *
  */
 public final class DesignPageFactory implements IXmlEditorPageFactory {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IXMLEditorPageFactory
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void createPages(AbstractXmlEditor editor, List<IXmlEditorPage> pages) {
-    if (isXWT(editor)) {
-      BindingXmlPage.addPage(pages);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IXMLEditorPageFactory
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void createPages(AbstractXmlEditor editor, List<IXmlEditorPage> pages) {
+		if (isXWT(editor)) {
+			BindingXmlPage.addPage(pages);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static boolean isXWT(AbstractXmlEditor editor) {
-    try {
-      IDocument document = editor.getDocument();
-      FindReplaceDocumentAdapter finder = new FindReplaceDocumentAdapter(document);
-      IRegion region = finder.find(0, "xmlns", true, false, false, false);
-      if (region != null) {
-        int start = region.getOffset() + region.getLength();
-        region =
-            finder.find(
-                start,
-                "\"http://www.eclipse.org/xwt/presentation\"",
-                true,
-                false,
-                false,
-                false);
-        if (region != null) {
-          return "=".equals(document.get(start, region.getOffset() - start).trim());
-        }
-      }
-    } catch (Throwable e) {
-    }
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static boolean isXWT(AbstractXmlEditor editor) {
+		try {
+			IDocument document = editor.getDocument();
+			FindReplaceDocumentAdapter finder = new FindReplaceDocumentAdapter(document);
+			IRegion region = finder.find(0, "xmlns", true, false, false, false);
+			if (region != null) {
+				int start = region.getOffset() + region.getLength();
+				region =
+						finder.find(
+								start,
+								"\"http://www.eclipse.org/xwt/presentation\"",
+								true,
+								false,
+								false,
+								false);
+				if (region != null) {
+					return "=".equals(document.get(start, region.getOffset() - start).trim());
+				}
+			}
+		} catch (Throwable e) {
+		}
+		return false;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/Messages.java b/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/Messages.java
index df934e2ec..3eed6dbda 100644
--- a/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/Messages.java
+++ b/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/Messages.java
@@ -3,41 +3,41 @@
 import org.eclipse.osgi.util.NLS;
 
 public class Messages extends NLS {
-  private static final String BUNDLE_NAME = "org.eclipse.wb.internal.rcp.databinding.xwt.Messages"; //$NON-NLS-1$
-  public static String BindingInfo_listenerMessage;
-  public static String BindingInfo_listenerTitle;
-  public static String BindingInfo_modelTitle;
-  public static String BindingInfo_targetTitle;
-  public static String BindingsProperty_syncDoesNotWork;
-  public static String ConverterInfo_converterClassNotFound;
-  public static String ConverterInfo_converterNotFound;
-  public static String ConverterInfo_errorMessage;
-  public static String ConverterInfo_errorMessagePrefix;
-  public static String ConverterInfo_providerTitle;
-  public static String DatabindingParser_beanNotFound;
-  public static String DatabindingParser_beanPropertyNotFound;
-  public static String DatabindingParser_widgetNotFound;
-  public static String DatabindingParser_widgetPropertyNotFound;
-  public static String DatabindingsProvider_modeColumn;
-  public static String DatabindingsProvider_modelColumn;
-  public static String DatabindingsProvider_targetColumn;
-  public static String ModeContentProvider_title;
-  public static String TriggerContentProvider_title;
-  public static String ValidationInfo_validatorClassNotFound;
-  public static String ValidationInfo_validatorNotFound;
-  public static String ValidationUiContentProvider_abstractClass;
-  public static String ValidationUiContentProvider_addButton;
-  public static String ValidationUiContentProvider_noClass;
-  public static String ValidationUiContentProvider_noPublicConstructor;
-  public static String ValidationUiContentProvider_notExistClass;
-  public static String ValidationUiContentProvider_notPublicClass;
-  public static String ValidationUiContentProvider_removeButton;
-  public static String ValidationUiContentProvider_title;
-  static {
-    // initialize resource bundle
-    NLS.initializeMessages(BUNDLE_NAME, Messages.class);
-  }
+	private static final String BUNDLE_NAME = "org.eclipse.wb.internal.rcp.databinding.xwt.Messages"; //$NON-NLS-1$
+	public static String BindingInfo_listenerMessage;
+	public static String BindingInfo_listenerTitle;
+	public static String BindingInfo_modelTitle;
+	public static String BindingInfo_targetTitle;
+	public static String BindingsProperty_syncDoesNotWork;
+	public static String ConverterInfo_converterClassNotFound;
+	public static String ConverterInfo_converterNotFound;
+	public static String ConverterInfo_errorMessage;
+	public static String ConverterInfo_errorMessagePrefix;
+	public static String ConverterInfo_providerTitle;
+	public static String DatabindingParser_beanNotFound;
+	public static String DatabindingParser_beanPropertyNotFound;
+	public static String DatabindingParser_widgetNotFound;
+	public static String DatabindingParser_widgetPropertyNotFound;
+	public static String DatabindingsProvider_modeColumn;
+	public static String DatabindingsProvider_modelColumn;
+	public static String DatabindingsProvider_targetColumn;
+	public static String ModeContentProvider_title;
+	public static String TriggerContentProvider_title;
+	public static String ValidationInfo_validatorClassNotFound;
+	public static String ValidationInfo_validatorNotFound;
+	public static String ValidationUiContentProvider_abstractClass;
+	public static String ValidationUiContentProvider_addButton;
+	public static String ValidationUiContentProvider_noClass;
+	public static String ValidationUiContentProvider_noPublicConstructor;
+	public static String ValidationUiContentProvider_notExistClass;
+	public static String ValidationUiContentProvider_notPublicClass;
+	public static String ValidationUiContentProvider_removeButton;
+	public static String ValidationUiContentProvider_title;
+	static {
+		// initialize resource bundle
+		NLS.initializeMessages(BUNDLE_NAME, Messages.class);
+	}
 
-  private Messages() {
-  }
+	private Messages() {
+	}
 }
diff --git a/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/model/AttributeDocumentEditor.java b/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/model/AttributeDocumentEditor.java
index 4f276ce27..4e2cd5d50 100644
--- a/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/model/AttributeDocumentEditor.java
+++ b/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/model/AttributeDocumentEditor.java
@@ -26,113 +26,113 @@
  *
  */
 public class AttributeDocumentEditor implements IDocumentEditor {
-  private final BindingInfo m_binding;
-  private DocumentAttribute m_attribute;
+	private final BindingInfo m_binding;
+	private DocumentAttribute m_attribute;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AttributeDocumentEditor(BindingInfo binding) {
-    m_binding = binding;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AttributeDocumentEditor(BindingInfo binding) {
+		m_binding = binding;
+	}
 
-  public AttributeDocumentEditor(BindingInfo binding, DocumentAttribute attribute) {
-    m_binding = binding;
-    m_attribute = attribute;
-  }
+	public AttributeDocumentEditor(BindingInfo binding, DocumentAttribute attribute) {
+		m_binding = binding;
+		m_attribute = attribute;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  //
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private String getValue() throws Exception {
-    StringBuffer value = new StringBuffer("{Binding ");
-    //
-    if (m_binding.getModel() instanceof WidgetBindableInfo) {
-      WidgetBindableInfo model = (WidgetBindableInfo) m_binding.getModel();
-      String modelProperty = m_binding.getModelProperty().getPresentation().getText();
-      value.append(" elementName=" + model.getReference() + ", Path=" + modelProperty);
-    } else {
-      BindableInfo modelProperty = (BindableInfo) m_binding.getModelProperty();
-      String property = StringUtils.remove(modelProperty.getReference(), '"');
-      //
-      XmlElementBeanBindableInfo model = (XmlElementBeanBindableInfo) m_binding.getModel();
-      if (!model.isDataContext()) {
-        property = "{StaticResource " + property + "}";
-      }
-      //
-      value.append(" Path=" + property);
-    }
-    //
-    if (m_binding.getMode() != 0) {
-      value.append(", Mode=" + BindingInfo.MODES[m_binding.getMode()]);
-    }
-    if (m_binding.getTriger() != 0) {
-      value.append(", updateSourceTrigger=" + BindingInfo.TRIGGERS[m_binding.getTriger()]);
-    }
-    //
-    m_binding.getConverter().appendValue(value);
-    m_binding.getValidator().appendValue(value);
-    //
-    value.append("}");
-    //
-    return value.toString();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	//
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private String getValue() throws Exception {
+		StringBuffer value = new StringBuffer("{Binding ");
+		//
+		if (m_binding.getModel() instanceof WidgetBindableInfo) {
+			WidgetBindableInfo model = (WidgetBindableInfo) m_binding.getModel();
+			String modelProperty = m_binding.getModelProperty().getPresentation().getText();
+			value.append(" elementName=" + model.getReference() + ", Path=" + modelProperty);
+		} else {
+			BindableInfo modelProperty = (BindableInfo) m_binding.getModelProperty();
+			String property = StringUtils.remove(modelProperty.getReference(), '"');
+			//
+			XmlElementBeanBindableInfo model = (XmlElementBeanBindableInfo) m_binding.getModel();
+			if (!model.isDataContext()) {
+				property = "{StaticResource " + property + "}";
+			}
+			//
+			value.append(" Path=" + property);
+		}
+		//
+		if (m_binding.getMode() != 0) {
+			value.append(", Mode=" + BindingInfo.MODES[m_binding.getMode()]);
+		}
+		if (m_binding.getTriger() != 0) {
+			value.append(", updateSourceTrigger=" + BindingInfo.TRIGGERS[m_binding.getTriger()]);
+		}
+		//
+		m_binding.getConverter().appendValue(value);
+		m_binding.getValidator().appendValue(value);
+		//
+		value.append("}");
+		//
+		return value.toString();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IDocumentEditor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void add() throws Exception {
-    m_binding.modify(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        if (m_binding.getModel() instanceof WidgetBindableInfo) {
-          WidgetBindableInfo model = (WidgetBindableInfo) m_binding.getModel();
-          XmlObjectReferenceProvider.generateName(model.getXMLObjectInfo());
-        }
-        //
-        String property = m_binding.getTargetProperty().getPresentation().getText();
-        DocumentElement element = m_binding.getTargetElement();
-        m_attribute = element.setAttribute(property, getValue());
-        m_binding.getConverter().applyChanges(m_attribute);
-        m_binding.getValidator().applyChanges(m_attribute);
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IDocumentEditor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void add() throws Exception {
+		m_binding.modify(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				if (m_binding.getModel() instanceof WidgetBindableInfo) {
+					WidgetBindableInfo model = (WidgetBindableInfo) m_binding.getModel();
+					XmlObjectReferenceProvider.generateName(model.getXMLObjectInfo());
+				}
+				//
+				String property = m_binding.getTargetProperty().getPresentation().getText();
+				DocumentElement element = m_binding.getTargetElement();
+				m_attribute = element.setAttribute(property, getValue());
+				m_binding.getConverter().applyChanges(m_attribute);
+				m_binding.getValidator().applyChanges(m_attribute);
+			}
+		});
+	}
 
-  @Override
-  public void delete() throws Exception {
-    m_binding.modify(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        m_binding.getTargetElement().removeDocumentAttribute(m_attribute);
-      }
-    });
-  }
+	@Override
+	public void delete() throws Exception {
+		m_binding.modify(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				m_binding.getTargetElement().removeDocumentAttribute(m_attribute);
+			}
+		});
+	}
 
-  @Override
-  public void update() throws Exception {
-    final String value = getValue();
-    if (!value.equals(m_attribute.getValue())) {
-      m_binding.modify(new RunnableEx() {
-        @Override
-        public void run() throws Exception {
-          m_attribute.setValue(value);
-          m_binding.getConverter().applyChanges(m_attribute);
-          m_binding.getValidator().applyChanges(m_attribute);
-        }
-      });
-    }
-  }
+	@Override
+	public void update() throws Exception {
+		final String value = getValue();
+		if (!value.equals(m_attribute.getValue())) {
+			m_binding.modify(new RunnableEx() {
+				@Override
+				public void run() throws Exception {
+					m_attribute.setValue(value);
+					m_binding.getConverter().applyChanges(m_attribute);
+					m_binding.getValidator().applyChanges(m_attribute);
+				}
+			});
+		}
+	}
 
-  @Override
-  public int getDefinitionOffset() {
-    return m_attribute == null ? -1 : m_attribute.getValueOffset();
-  }
+	@Override
+	public int getDefinitionOffset() {
+		return m_attribute == null ? -1 : m_attribute.getValueOffset();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/model/BindingInfo.java b/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/model/BindingInfo.java
index ce7d98328..b059c5802 100644
--- a/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/model/BindingInfo.java
+++ b/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/model/BindingInfo.java
@@ -38,212 +38,212 @@
  *
  */
 public class BindingInfo extends AbstractBindingInfo {
-  public static final String[] MODES = {"TwoWay", "OneWay", "OneTime"};
-  private static final String[] modes = {"twoway", "oneway", "onetime"};
-  //
-  public static final String[] TRIGGERS = {"Default", "PropertyChanged", "LostFocus"};
-  private static final String[] triggers = {"default", "propertychanged", "lostfocus"};
-  //
-  private final BindableInfo m_target;
-  private final BindableInfo m_targetProperty;
-  private final BindableInfo m_model;
-  private final BindableInfo m_modelProperty;
-  private int m_mode;
-  private int m_trigger;
-  private final ConverterInfo m_converter = new ConverterInfo();
-  private final ValidationInfo m_validator = new ValidationInfo();
-  private IDocumentEditor m_documentEditor;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public BindingInfo(BindableInfo target,
-      BindableInfo targetProperty,
-      BindableInfo model,
-      BindableInfo modelProperty) {
-    m_target = target;
-    m_targetProperty = targetProperty;
-    m_model = model;
-    m_modelProperty = modelProperty;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Target
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DocumentElement getTargetElement() {
-    WidgetBindableInfo target = (WidgetBindableInfo) m_target;
-    return target.getXMLObjectInfo().getElement();
-  }
-
-  public void modify(RunnableEx runnable) throws Exception {
-    WidgetBindableInfo target = (WidgetBindableInfo) m_target;
-    XmlObjectInfo objectInfo = target.getXMLObjectInfo();
-    //
-    objectInfo.startEdit();
-    runnable.run();
-    objectInfo.endEdit();
-  }
-
-  @Override
-  public IObserveInfo getTarget() {
-    return m_target;
-  }
-
-  @Override
-  public IObserveInfo getTargetProperty() {
-    return m_targetProperty;
-  }
-
-  public String getTargetPresentationText() throws Exception {
-    return m_target.getPresentation().getTextForBinding()
-        + "."
-        + m_targetProperty.getPresentation().getTextForBinding();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Model
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public IObserveInfo getModel() {
-    return m_model;
-  }
-
-  @Override
-  public IObserveInfo getModelProperty() {
-    return m_modelProperty;
-  }
-
-  public String getModelPresentationText() throws Exception {
-    return m_model.getPresentation().getTextForBinding()
-        + "."
-        + m_modelProperty.getPresentation().getTextForBinding();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public int getMode() {
-    return m_mode;
-  }
-
-  public void setMode(int mode) {
-    m_mode = mode;
-  }
-
-  public void setMode(String mode) {
-    if (mode == null) {
-      m_mode = 0;
-    } else {
-      m_mode = ArrayUtils.indexOf(modes, mode.toLowerCase());
-      if (m_mode == -1) {
-        m_mode = 0;
-      }
-    }
-  }
-
-  public int getTriger() {
-    return m_trigger;
-  }
-
-  public void setTrigger(int trigger) {
-    m_trigger = trigger;
-  }
-
-  public void setTrigger(String trigger) {
-    if (trigger == null) {
-      m_trigger = 0;
-    } else {
-      m_trigger = ArrayUtils.indexOf(triggers, trigger.toLowerCase());
-      if (m_trigger == -1) {
-        m_trigger = 0;
-      }
-    }
-  }
-
-  public ConverterInfo getConverter() {
-    return m_converter;
-  }
-
-  public ValidationInfo getValidator() {
-    return m_validator;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  //
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void addSourceCode(DataBindingContextInfo context,
-      List<String> lines,
-      CodeGenerationSupport generationSupport) throws Exception {
-    throw new UnsupportedOperationException();
-  }
-
-  public IDocumentEditor getDocumentEditor() {
-    return m_documentEditor;
-  }
-
-  public void setDocumentEditor(IDocumentEditor documentEditor) {
-    m_documentEditor = documentEditor;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  //
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public int getDefinitionOffset() {
-    return m_documentEditor.getDefinitionOffset();
-  }
-
-  @Override
-  public String getDefinitionSource(org.eclipse.wb.internal.rcp.databinding.DatabindingsProvider provider)
-      throws Exception {
-    throw new UnsupportedOperationException();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Create {@link IUiContentProvider} content providers for edit this model.
-   */
-  public void createContentProviders(List<IUiContentProvider> providers,
-      IPageListener listener,
-      DatabindingsProvider provider) throws Exception {
-    // configure page
-    listener.setTitle(Messages.BindingInfo_listenerTitle);
-    listener.setMessage(Messages.BindingInfo_listenerMessage);
-    // add target editors
-    providers.add(new LabelUiContentProvider(Messages.BindingInfo_targetTitle,
-        getTargetPresentationText()));
-    // add model editors
-    providers.add(new LabelUiContentProvider(Messages.BindingInfo_modelTitle,
-        getModelPresentationText()));
-    // separator
-    providers.add(new SeparatorUiContentProvider());
-    // add binding editors
-    providers.add(new ModeContentProvider(this));
-    providers.add(new TriggerContentProvider(this));
-    m_converter.createContentProviders(providers, listener, provider);
-    m_validator.createContentProviders(providers, listener, provider);
-  }
-
-  @Override
-  public void createContentProviders(List<IUiContentProvider> providers,
-      IPageListener listener,
-      org.eclipse.wb.internal.rcp.databinding.DatabindingsProvider provider) throws Exception {
-    throw new UnsupportedOperationException();
-  }
+	public static final String[] MODES = {"TwoWay", "OneWay", "OneTime"};
+	private static final String[] modes = {"twoway", "oneway", "onetime"};
+	//
+	public static final String[] TRIGGERS = {"Default", "PropertyChanged", "LostFocus"};
+	private static final String[] triggers = {"default", "propertychanged", "lostfocus"};
+	//
+	private final BindableInfo m_target;
+	private final BindableInfo m_targetProperty;
+	private final BindableInfo m_model;
+	private final BindableInfo m_modelProperty;
+	private int m_mode;
+	private int m_trigger;
+	private final ConverterInfo m_converter = new ConverterInfo();
+	private final ValidationInfo m_validator = new ValidationInfo();
+	private IDocumentEditor m_documentEditor;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public BindingInfo(BindableInfo target,
+			BindableInfo targetProperty,
+			BindableInfo model,
+			BindableInfo modelProperty) {
+		m_target = target;
+		m_targetProperty = targetProperty;
+		m_model = model;
+		m_modelProperty = modelProperty;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Target
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DocumentElement getTargetElement() {
+		WidgetBindableInfo target = (WidgetBindableInfo) m_target;
+		return target.getXMLObjectInfo().getElement();
+	}
+
+	public void modify(RunnableEx runnable) throws Exception {
+		WidgetBindableInfo target = (WidgetBindableInfo) m_target;
+		XmlObjectInfo objectInfo = target.getXMLObjectInfo();
+		//
+		objectInfo.startEdit();
+		runnable.run();
+		objectInfo.endEdit();
+	}
+
+	@Override
+	public IObserveInfo getTarget() {
+		return m_target;
+	}
+
+	@Override
+	public IObserveInfo getTargetProperty() {
+		return m_targetProperty;
+	}
+
+	public String getTargetPresentationText() throws Exception {
+		return m_target.getPresentation().getTextForBinding()
+				+ "."
+				+ m_targetProperty.getPresentation().getTextForBinding();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Model
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public IObserveInfo getModel() {
+		return m_model;
+	}
+
+	@Override
+	public IObserveInfo getModelProperty() {
+		return m_modelProperty;
+	}
+
+	public String getModelPresentationText() throws Exception {
+		return m_model.getPresentation().getTextForBinding()
+				+ "."
+				+ m_modelProperty.getPresentation().getTextForBinding();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public int getMode() {
+		return m_mode;
+	}
+
+	public void setMode(int mode) {
+		m_mode = mode;
+	}
+
+	public void setMode(String mode) {
+		if (mode == null) {
+			m_mode = 0;
+		} else {
+			m_mode = ArrayUtils.indexOf(modes, mode.toLowerCase());
+			if (m_mode == -1) {
+				m_mode = 0;
+			}
+		}
+	}
+
+	public int getTriger() {
+		return m_trigger;
+	}
+
+	public void setTrigger(int trigger) {
+		m_trigger = trigger;
+	}
+
+	public void setTrigger(String trigger) {
+		if (trigger == null) {
+			m_trigger = 0;
+		} else {
+			m_trigger = ArrayUtils.indexOf(triggers, trigger.toLowerCase());
+			if (m_trigger == -1) {
+				m_trigger = 0;
+			}
+		}
+	}
+
+	public ConverterInfo getConverter() {
+		return m_converter;
+	}
+
+	public ValidationInfo getValidator() {
+		return m_validator;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	//
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void addSourceCode(DataBindingContextInfo context,
+			List<String> lines,
+			CodeGenerationSupport generationSupport) throws Exception {
+		throw new UnsupportedOperationException();
+	}
+
+	public IDocumentEditor getDocumentEditor() {
+		return m_documentEditor;
+	}
+
+	public void setDocumentEditor(IDocumentEditor documentEditor) {
+		m_documentEditor = documentEditor;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	//
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public int getDefinitionOffset() {
+		return m_documentEditor.getDefinitionOffset();
+	}
+
+	@Override
+	public String getDefinitionSource(org.eclipse.wb.internal.rcp.databinding.DatabindingsProvider provider)
+			throws Exception {
+		throw new UnsupportedOperationException();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Create {@link IUiContentProvider} content providers for edit this model.
+	 */
+	public void createContentProviders(List<IUiContentProvider> providers,
+			IPageListener listener,
+			DatabindingsProvider provider) throws Exception {
+		// configure page
+		listener.setTitle(Messages.BindingInfo_listenerTitle);
+		listener.setMessage(Messages.BindingInfo_listenerMessage);
+		// add target editors
+		providers.add(new LabelUiContentProvider(Messages.BindingInfo_targetTitle,
+				getTargetPresentationText()));
+		// add model editors
+		providers.add(new LabelUiContentProvider(Messages.BindingInfo_modelTitle,
+				getModelPresentationText()));
+		// separator
+		providers.add(new SeparatorUiContentProvider());
+		// add binding editors
+		providers.add(new ModeContentProvider(this));
+		providers.add(new TriggerContentProvider(this));
+		m_converter.createContentProviders(providers, listener, provider);
+		m_validator.createContentProviders(providers, listener, provider);
+	}
+
+	@Override
+	public void createContentProviders(List<IUiContentProvider> providers,
+			IPageListener listener,
+			org.eclipse.wb.internal.rcp.databinding.DatabindingsProvider provider) throws Exception {
+		throw new UnsupportedOperationException();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/model/ConverterInfo.java b/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/model/ConverterInfo.java
index 9a508d092..a9bdca524 100644
--- a/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/model/ConverterInfo.java
+++ b/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/model/ConverterInfo.java
@@ -40,254 +40,254 @@
  *
  */
 public class ConverterInfo {
-  private boolean m_element;
-  private boolean m_staticResurce;
-  private String m_resourceReference;
-  private String m_className;
-  private String m_namespace;
-  private boolean m_update;
+	private boolean m_element;
+	private boolean m_staticResurce;
+	private String m_resourceReference;
+	private String m_className;
+	private String m_namespace;
+	private boolean m_update;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  //
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void parse(DatabindingsProvider provider, DocumentElement element) throws Exception {
-    if (element != null) {
-      List<DocumentElement> children = element.getChildren();
-      if (children.size() == 1) {
-        parseClass(provider, element.getRoot(), children.get(0).getTag());
-      } else {
-        provider.addWarning(
-            MessageFormat.format(Messages.ConverterInfo_converterNotFound, element),
-            new Throwable());
-      }
-      m_element = true;
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	//
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void parse(DatabindingsProvider provider, DocumentElement element) throws Exception {
+		if (element != null) {
+			List<DocumentElement> children = element.getChildren();
+			if (children.size() == 1) {
+				parseClass(provider, element.getRoot(), children.get(0).getTag());
+			} else {
+				provider.addWarning(
+						MessageFormat.format(Messages.ConverterInfo_converterNotFound, element),
+						new Throwable());
+			}
+			m_element = true;
+		}
+	}
 
-  public void parse(DatabindingsProvider provider, DocumentElement root, String attribute)
-      throws Exception {
-    m_staticResurce = attribute != null && attribute.startsWith("{StaticResource");
-    //
-    if (m_staticResurce) {
-      m_resourceReference = StringUtils.substringBetween(attribute, "{StaticResource", "}").trim();
-      //
-      BeansObserveTypeContainer beanContainer =
-          (BeansObserveTypeContainer) provider.getContainer(ObserveType.BEANS);
-      if (beanContainer.resolve(m_resourceReference) == null) {
-        m_staticResurce = false;
-        m_resourceReference = null;
-        provider.addWarning(
-            MessageFormat.format(Messages.ConverterInfo_converterNotFound, attribute),
-            new Throwable());
-      }
-    } else {
-      parseClass(provider, root, attribute);
-    }
-  }
+	public void parse(DatabindingsProvider provider, DocumentElement root, String attribute)
+			throws Exception {
+		m_staticResurce = attribute != null && attribute.startsWith("{StaticResource");
+		//
+		if (m_staticResurce) {
+			m_resourceReference = StringUtils.substringBetween(attribute, "{StaticResource", "}").trim();
+			//
+			BeansObserveTypeContainer beanContainer =
+					(BeansObserveTypeContainer) provider.getContainer(ObserveType.BEANS);
+			if (beanContainer.resolve(m_resourceReference) == null) {
+				m_staticResurce = false;
+				m_resourceReference = null;
+				provider.addWarning(
+						MessageFormat.format(Messages.ConverterInfo_converterNotFound, attribute),
+						new Throwable());
+			}
+		} else {
+			parseClass(provider, root, attribute);
+		}
+	}
 
-  private void parseClass(DatabindingsProvider provider, DocumentElement root, String value)
-      throws Exception {
-    m_namespace = StringUtils.substringBefore(value, ":");
-    String packageValue = root.getAttribute("xmlns:" + m_namespace);
-    //
-    if (packageValue == null) {
-      m_namespace = null;
-      provider.addWarning(
-          MessageFormat.format(Messages.ConverterInfo_converterNotFound, value),
-          new Throwable());
-    } else {
-      m_className =
-          StringUtils.substringAfter(packageValue, "clr-namespace:")
-              + "."
-              + StringUtils.substringAfter(value, ":");
-      try {
-        ClassLoader classLoader = provider.getXmlObjectRoot().getContext().getClassLoader();
-        classLoader.loadClass(m_className);
-      } catch (ClassNotFoundException e) {
-        m_className = null;
-        m_namespace = null;
-        provider.addWarning(
-            MessageFormat.format(Messages.ConverterInfo_converterClassNotFound, m_className),
-            new Throwable());
-      }
-    }
-  }
+	private void parseClass(DatabindingsProvider provider, DocumentElement root, String value)
+			throws Exception {
+		m_namespace = StringUtils.substringBefore(value, ":");
+		String packageValue = root.getAttribute("xmlns:" + m_namespace);
+		//
+		if (packageValue == null) {
+			m_namespace = null;
+			provider.addWarning(
+					MessageFormat.format(Messages.ConverterInfo_converterNotFound, value),
+					new Throwable());
+		} else {
+			m_className =
+					StringUtils.substringAfter(packageValue, "clr-namespace:")
+					+ "."
+					+ StringUtils.substringAfter(value, ":");
+			try {
+				ClassLoader classLoader = provider.getXmlObjectRoot().getContext().getClassLoader();
+				classLoader.loadClass(m_className);
+			} catch (ClassNotFoundException e) {
+				m_className = null;
+				m_namespace = null;
+				provider.addWarning(
+						MessageFormat.format(Messages.ConverterInfo_converterClassNotFound, m_className),
+						new Throwable());
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  //
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public String getValue() {
-    return m_staticResurce ? m_resourceReference : m_className;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	//
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public String getValue() {
+		return m_staticResurce ? m_resourceReference : m_className;
+	}
 
-  public void setValue(String value, boolean staticResurce) throws Exception {
-    m_update = true;
-    //
-    if (value == null) {
-      if (m_resourceReference == null && m_className == null) {
-        return;
-      }
-      //
-      m_staticResurce = false;
-      m_resourceReference = null;
-      m_className = null;
-      m_namespace = null;
-    } else {
-      if (m_staticResurce == staticResurce && value.equals(getValue())) {
-        return;
-      }
-      //
-      m_staticResurce = staticResurce;
-      //
-      if (m_staticResurce) {
-        m_resourceReference = value;
-        m_className = null;
-        m_namespace = null;
-      } else {
-        if (m_namespace != null) {
-          String oldPackageName = ClassUtils.getPackageName(m_className);
-          String newPackageName = ClassUtils.getPackageName(value);
-          //
-          if (!oldPackageName.equals(newPackageName)) {
-            m_namespace = null;
-          }
-        }
-        //
-        m_resourceReference = null;
-        m_className = value;
-      }
-    }
-  }
+	public void setValue(String value, boolean staticResurce) throws Exception {
+		m_update = true;
+		//
+		if (value == null) {
+			if (m_resourceReference == null && m_className == null) {
+				return;
+			}
+			//
+			m_staticResurce = false;
+			m_resourceReference = null;
+			m_className = null;
+			m_namespace = null;
+		} else {
+			if (m_staticResurce == staticResurce && value.equals(getValue())) {
+				return;
+			}
+			//
+			m_staticResurce = staticResurce;
+			//
+			if (m_staticResurce) {
+				m_resourceReference = value;
+				m_className = null;
+				m_namespace = null;
+			} else {
+				if (m_namespace != null) {
+					String oldPackageName = ClassUtils.getPackageName(m_className);
+					String newPackageName = ClassUtils.getPackageName(value);
+					//
+					if (!oldPackageName.equals(newPackageName)) {
+						m_namespace = null;
+					}
+				}
+				//
+				m_resourceReference = null;
+				m_className = value;
+			}
+		}
+	}
 
-  public void appendValue(StringBuffer value) throws Exception {
-    if (m_update && getValue() != null) {
-      value.append(", converter=");
-      if (m_staticResurce) {
-        value.append("{StaticResource " + m_resourceReference + "}");
-      } else {
-        value.append(StringUtils.defaultString(m_namespace)
-            + ":"
-            + ClassUtils.getShortClassName(m_className));
-      }
-    }
-  }
+	public void appendValue(StringBuffer value) throws Exception {
+		if (m_update && getValue() != null) {
+			value.append(", converter=");
+			if (m_staticResurce) {
+				value.append("{StaticResource " + m_resourceReference + "}");
+			} else {
+				value.append(StringUtils.defaultString(m_namespace)
+						+ ":"
+						+ ClassUtils.getShortClassName(m_className));
+			}
+		}
+	}
 
-  public boolean update() throws Exception {
-    return m_update;
-  }
+	public boolean update() throws Exception {
+		return m_update;
+	}
 
-  public void applyChanges(AbstractDocumentObject object) throws Exception {
-    if (m_update) {
-      if (object instanceof DocumentAttribute) {
-        if (m_className != null && m_namespace == null) {
-          DocumentAttribute attribute = (DocumentAttribute) object;
-          createNamespace(attribute.getEnclosingElement().getRoot());
-          //
-          String value = attribute.getValue();
-          int index = value.indexOf("converter=") + 10;
-          attribute.setValue(value.substring(0, index) + m_namespace + value.substring(index));
-        }
-      } else {
-        DocumentElement bindingElement = (DocumentElement) object;
-        DocumentElement converterElement = bindingElement.getChild("Binding.converter", true);
-        if (getValue() == null) {
-          if (converterElement != null) {
-            converterElement.remove();
-          }
-        } else {
-          if (m_namespace == null) {
-            createNamespace(bindingElement.getRoot());
-          }
-          String value = m_namespace + ":" + ClassUtils.getShortClassName(m_className);
-          //
-          if (converterElement == null) {
-            converterElement = new DocumentElement("Binding.converter");
-            converterElement.addChild(new DocumentElement(value));
-            bindingElement.addChild(converterElement);
-          } else {
-            List<DocumentElement> children = converterElement.getChildren();
-            if (children.size() == 1) {
-              children.get(0).setTag(value);
-            } else {
-              converterElement.removeChildren();
-              converterElement.addChild(new DocumentElement(value));
-            }
-          }
-        }
-      }
-      m_update = false;
-    }
-  }
+	public void applyChanges(AbstractDocumentObject object) throws Exception {
+		if (m_update) {
+			if (object instanceof DocumentAttribute) {
+				if (m_className != null && m_namespace == null) {
+					DocumentAttribute attribute = (DocumentAttribute) object;
+					createNamespace(attribute.getEnclosingElement().getRoot());
+					//
+					String value = attribute.getValue();
+					int index = value.indexOf("converter=") + 10;
+					attribute.setValue(value.substring(0, index) + m_namespace + value.substring(index));
+				}
+			} else {
+				DocumentElement bindingElement = (DocumentElement) object;
+				DocumentElement converterElement = bindingElement.getChild("Binding.converter", true);
+				if (getValue() == null) {
+					if (converterElement != null) {
+						converterElement.remove();
+					}
+				} else {
+					if (m_namespace == null) {
+						createNamespace(bindingElement.getRoot());
+					}
+					String value = m_namespace + ":" + ClassUtils.getShortClassName(m_className);
+					//
+					if (converterElement == null) {
+						converterElement = new DocumentElement("Binding.converter");
+						converterElement.addChild(new DocumentElement(value));
+						bindingElement.addChild(converterElement);
+					} else {
+						List<DocumentElement> children = converterElement.getChildren();
+						if (children.size() == 1) {
+							children.get(0).setTag(value);
+						} else {
+							converterElement.removeChildren();
+							converterElement.addChild(new DocumentElement(value));
+						}
+					}
+				}
+			}
+			m_update = false;
+		}
+	}
 
-  private void createNamespace(DocumentElement rootElement) throws Exception {
-    Set<String> domains = Sets.newHashSet();
-    String domainName = "clr-namespace:" + ClassUtils.getPackageName(m_className);
-    for (DocumentAttribute attribute : rootElement.getDocumentAttributes()) {
-      if (attribute.getName().startsWith("xmlns:")
-          && attribute.getValue().startsWith("clr-namespace:")) {
-        String domainNameSpace = attribute.getName().substring(6);
-        if (attribute.getValue().equals(domainName)) {
-          m_namespace = domainNameSpace;
-          return;
-        }
-        domains.add(domainNameSpace);
-      }
-    }
-    //
-    int index = 0;
-    while (true) {
-      String domainNameSpace = "c" + Integer.toString(index);
-      if (domains.contains(domainNameSpace)) {
-        index++;
-      } else {
-        m_namespace = domainNameSpace;
-        rootElement.setAttribute("xmlns:" + domainNameSpace, domainName);
-        return;
-      }
-    }
-  }
+	private void createNamespace(DocumentElement rootElement) throws Exception {
+		Set<String> domains = Sets.newHashSet();
+		String domainName = "clr-namespace:" + ClassUtils.getPackageName(m_className);
+		for (DocumentAttribute attribute : rootElement.getDocumentAttributes()) {
+			if (attribute.getName().startsWith("xmlns:")
+					&& attribute.getValue().startsWith("clr-namespace:")) {
+				String domainNameSpace = attribute.getName().substring(6);
+				if (attribute.getValue().equals(domainName)) {
+					m_namespace = domainNameSpace;
+					return;
+				}
+				domains.add(domainNameSpace);
+			}
+		}
+		//
+		int index = 0;
+		while (true) {
+			String domainNameSpace = "c" + Integer.toString(index);
+			if (domains.contains(domainNameSpace)) {
+				index++;
+			} else {
+				m_namespace = domainNameSpace;
+				rootElement.setAttribute("xmlns:" + domainNameSpace, domainName);
+				return;
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  //
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Create {@link IUiContentProvider} content providers for edit this model.
-   */
-  public void createContentProviders(List<IUiContentProvider> providers,
-      IPageListener listener,
-      DatabindingsProvider provider) throws Exception {
-    ChooseClassConfiguration configuration = new ChooseClassConfiguration();
-    configuration.setDialogFieldLabel(Messages.ConverterInfo_providerTitle);
-    configuration.setValueScope("org.eclipse.e4.xwt.IValueConverter");
-    configuration.setClearValue("N/S");
-    configuration.setBaseClassName("org.eclipse.e4.xwt.IValueConverter");
-    configuration.setConstructorParameters(ArrayUtils.EMPTY_CLASS_ARRAY);
-    configuration.setEmptyClassErrorMessage(Messages.ConverterInfo_errorMessage);
-    configuration.setErrorMessagePrefix(Messages.ConverterInfo_errorMessagePrefix);
-    //
-    if (!m_element) {
-      ClassLoader classLoader = provider.getXmlObjectRoot().getContext().getClassLoader();
-      Class<?> ConverterClass = classLoader.loadClass("org.eclipse.e4.xwt.IValueConverter");
-      List<String> defaultValues = Lists.newArrayList();
-      BeansObserveTypeContainer beanContainer =
-          (BeansObserveTypeContainer) provider.getContainer(ObserveType.BEANS);
-      for (BeanBindableInfo bindable : beanContainer.getObservables0()) {
-        if (ConverterClass.isAssignableFrom(bindable.getObjectType())) {
-          defaultValues.add(bindable.getReference());
-        }
-      }
-      //
-      if (!defaultValues.isEmpty()) {
-        configuration.setDefaultValues(defaultValues.toArray(new String[defaultValues.size()]));
-      }
-    }
-    //
-    providers.add(new ConverterUiContentProvider(provider, configuration, this));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	//
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Create {@link IUiContentProvider} content providers for edit this model.
+	 */
+	public void createContentProviders(List<IUiContentProvider> providers,
+			IPageListener listener,
+			DatabindingsProvider provider) throws Exception {
+		ChooseClassConfiguration configuration = new ChooseClassConfiguration();
+		configuration.setDialogFieldLabel(Messages.ConverterInfo_providerTitle);
+		configuration.setValueScope("org.eclipse.e4.xwt.IValueConverter");
+		configuration.setClearValue("N/S");
+		configuration.setBaseClassName("org.eclipse.e4.xwt.IValueConverter");
+		configuration.setConstructorParameters(ArrayUtils.EMPTY_CLASS_ARRAY);
+		configuration.setEmptyClassErrorMessage(Messages.ConverterInfo_errorMessage);
+		configuration.setErrorMessagePrefix(Messages.ConverterInfo_errorMessagePrefix);
+		//
+		if (!m_element) {
+			ClassLoader classLoader = provider.getXmlObjectRoot().getContext().getClassLoader();
+			Class<?> ConverterClass = classLoader.loadClass("org.eclipse.e4.xwt.IValueConverter");
+			List<String> defaultValues = Lists.newArrayList();
+			BeansObserveTypeContainer beanContainer =
+					(BeansObserveTypeContainer) provider.getContainer(ObserveType.BEANS);
+			for (BeanBindableInfo bindable : beanContainer.getObservables0()) {
+				if (ConverterClass.isAssignableFrom(bindable.getObjectType())) {
+					defaultValues.add(bindable.getReference());
+				}
+			}
+			//
+			if (!defaultValues.isEmpty()) {
+				configuration.setDefaultValues(defaultValues.toArray(new String[defaultValues.size()]));
+			}
+		}
+		//
+		providers.add(new ConverterUiContentProvider(provider, configuration, this));
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/model/ElementDocumentEditor.java b/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/model/ElementDocumentEditor.java
index 0c9be411f..a0e988efb 100644
--- a/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/model/ElementDocumentEditor.java
+++ b/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/model/ElementDocumentEditor.java
@@ -29,194 +29,194 @@
  *
  */
 public class ElementDocumentEditor implements IDocumentEditor {
-  private final BindingInfo m_binding;
-  private final DocumentElement m_element;
-  private final List<AttributeEditor> m_editors = Lists.newArrayList();
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ElementDocumentEditor(BindingInfo binding, DocumentElement element) {
-    m_binding = binding;
-    m_element = element;
-    //
-    m_editors.add(new AttributeEditor("ElementName") {
-      @Override
-      protected String getValue() throws Exception {
-        if (m_binding.getModel() instanceof WidgetBindableInfo) {
-          WidgetBindableInfo model = (WidgetBindableInfo) m_binding.getModel();
-          return model.getReference();
-        }
-        return null;
-      }
-    });
-    m_editors.add(new AttributeEditor("Path") {
-      @Override
-      protected String getValue() throws Exception {
-        if (m_binding.getModel() instanceof WidgetBindableInfo) {
-          return m_binding.getModelProperty().getPresentation().getText();
-        }
-        //
-        BindableInfo modelProperty = (BindableInfo) m_binding.getModelProperty();
-        String property = StringUtils.remove(modelProperty.getReference(), '"');
-        //
-        XmlElementBeanBindableInfo model = (XmlElementBeanBindableInfo) m_binding.getModel();
-        if (!model.isDataContext()) {
-          property = "{StaticResource " + property + "}";
-        }
-        //
-        return property;
-      }
-    });
-    m_editors.add(new AttributeEditor("Mode") {
-      @Override
-      protected String getValue() throws Exception {
-        return m_binding.getMode() == 0 ? null : BindingInfo.MODES[m_binding.getMode()];
-      }
-    });
-    m_editors.add(new AttributeEditor("UpdateSourceTrigger") {
-      @Override
-      protected String getValue() throws Exception {
-        return m_binding.getTriger() == 0 ? null : BindingInfo.TRIGGERS[m_binding.getTriger()];
-      }
-    });
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IDocumentEditor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void add() throws Exception {
-    throw new UnsupportedOperationException();
-  }
-
-  @Override
-  public void delete() throws Exception {
-    m_binding.modify(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        m_element.remove();
-      }
-    });
-  }
-
-  @Override
-  public void update() throws Exception {
-    boolean updates = false;
-    for (AttributeEditor editor : m_editors) {
-      updates |= editor.update();
-    }
-    //
-    updates |= m_binding.getConverter().update();
-    updates |= m_binding.getValidator().update();
-    //
-    if (updates) {
-      m_binding.modify(new RunnableEx() {
-        @Override
-        public void run() throws Exception {
-          for (AttributeEditor editor : m_editors) {
-            editor.save();
-          }
-          m_binding.getConverter().applyChanges(m_element);
-          m_binding.getValidator().applyChanges(m_element);
-        }
-      });
-    }
-  }
-
-  @Override
-  public int getDefinitionOffset() {
-    return m_element.getOffset() + m_element.getTag().length() + 1;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  //
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private abstract class AttributeEditor {
-    static final int ADD = 1;
-    static final int REMOVE = 2;
-    static final int UPDATE = 3;
-    //
-    private final String m_name;
-    private DocumentAttribute m_attribute;
-    private boolean m_update;
-    private String m_value;
-    private int m_command;
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public AttributeEditor(String name) {
-      m_name = name;
-      for (DocumentAttribute attribute : m_element.getDocumentAttributes()) {
-        if (name.equalsIgnoreCase(attribute.getName())) {
-          m_attribute = attribute;
-          break;
-        }
-      }
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    //
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public boolean update() throws Exception {
-      m_value = getValue();
-      if (m_attribute == null) {
-        if (m_value == null) {
-          clear();
-        } else {
-          m_update = true;
-          m_command = ADD;
-        }
-      } else {
-        if (m_value == null) {
-          m_update = true;
-          m_command = REMOVE;
-        } else if (m_value.equals(m_attribute.getValue())) {
-          clear();
-        } else {
-          m_update = true;
-          m_command = UPDATE;
-        }
-      }
-      return m_update;
-    }
-
-    public void save() throws Exception {
-      if (m_update) {
-        switch (m_command) {
-          case ADD :
-            m_attribute = m_element.setAttribute(m_name, m_value);
-            break;
-          case REMOVE :
-            m_element.removeDocumentAttribute(m_attribute);
-            m_attribute = null;
-            break;
-          case UPDATE :
-            m_attribute.setValue(m_value);
-            break;
-        }
-        //
-        clear();
-      }
-    }
-
-    private void clear() {
-      m_update = false;
-      m_command = 0;
-      m_value = null;
-    }
-
-    protected abstract String getValue() throws Exception;
-  }
+	private final BindingInfo m_binding;
+	private final DocumentElement m_element;
+	private final List<AttributeEditor> m_editors = Lists.newArrayList();
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ElementDocumentEditor(BindingInfo binding, DocumentElement element) {
+		m_binding = binding;
+		m_element = element;
+		//
+		m_editors.add(new AttributeEditor("ElementName") {
+			@Override
+			protected String getValue() throws Exception {
+				if (m_binding.getModel() instanceof WidgetBindableInfo) {
+					WidgetBindableInfo model = (WidgetBindableInfo) m_binding.getModel();
+					return model.getReference();
+				}
+				return null;
+			}
+		});
+		m_editors.add(new AttributeEditor("Path") {
+			@Override
+			protected String getValue() throws Exception {
+				if (m_binding.getModel() instanceof WidgetBindableInfo) {
+					return m_binding.getModelProperty().getPresentation().getText();
+				}
+				//
+				BindableInfo modelProperty = (BindableInfo) m_binding.getModelProperty();
+				String property = StringUtils.remove(modelProperty.getReference(), '"');
+				//
+				XmlElementBeanBindableInfo model = (XmlElementBeanBindableInfo) m_binding.getModel();
+				if (!model.isDataContext()) {
+					property = "{StaticResource " + property + "}";
+				}
+				//
+				return property;
+			}
+		});
+		m_editors.add(new AttributeEditor("Mode") {
+			@Override
+			protected String getValue() throws Exception {
+				return m_binding.getMode() == 0 ? null : BindingInfo.MODES[m_binding.getMode()];
+			}
+		});
+		m_editors.add(new AttributeEditor("UpdateSourceTrigger") {
+			@Override
+			protected String getValue() throws Exception {
+				return m_binding.getTriger() == 0 ? null : BindingInfo.TRIGGERS[m_binding.getTriger()];
+			}
+		});
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IDocumentEditor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void add() throws Exception {
+		throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public void delete() throws Exception {
+		m_binding.modify(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				m_element.remove();
+			}
+		});
+	}
+
+	@Override
+	public void update() throws Exception {
+		boolean updates = false;
+		for (AttributeEditor editor : m_editors) {
+			updates |= editor.update();
+		}
+		//
+		updates |= m_binding.getConverter().update();
+		updates |= m_binding.getValidator().update();
+		//
+		if (updates) {
+			m_binding.modify(new RunnableEx() {
+				@Override
+				public void run() throws Exception {
+					for (AttributeEditor editor : m_editors) {
+						editor.save();
+					}
+					m_binding.getConverter().applyChanges(m_element);
+					m_binding.getValidator().applyChanges(m_element);
+				}
+			});
+		}
+	}
+
+	@Override
+	public int getDefinitionOffset() {
+		return m_element.getOffset() + m_element.getTag().length() + 1;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	//
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private abstract class AttributeEditor {
+		static final int ADD = 1;
+		static final int REMOVE = 2;
+		static final int UPDATE = 3;
+		//
+		private final String m_name;
+		private DocumentAttribute m_attribute;
+		private boolean m_update;
+		private String m_value;
+		private int m_command;
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public AttributeEditor(String name) {
+			m_name = name;
+			for (DocumentAttribute attribute : m_element.getDocumentAttributes()) {
+				if (name.equalsIgnoreCase(attribute.getName())) {
+					m_attribute = attribute;
+					break;
+				}
+			}
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		//
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public boolean update() throws Exception {
+			m_value = getValue();
+			if (m_attribute == null) {
+				if (m_value == null) {
+					clear();
+				} else {
+					m_update = true;
+					m_command = ADD;
+				}
+			} else {
+				if (m_value == null) {
+					m_update = true;
+					m_command = REMOVE;
+				} else if (m_value.equals(m_attribute.getValue())) {
+					clear();
+				} else {
+					m_update = true;
+					m_command = UPDATE;
+				}
+			}
+			return m_update;
+		}
+
+		public void save() throws Exception {
+			if (m_update) {
+				switch (m_command) {
+				case ADD :
+					m_attribute = m_element.setAttribute(m_name, m_value);
+					break;
+				case REMOVE :
+					m_element.removeDocumentAttribute(m_attribute);
+					m_attribute = null;
+					break;
+				case UPDATE :
+					m_attribute.setValue(m_value);
+					break;
+				}
+				//
+				clear();
+			}
+		}
+
+		private void clear() {
+			m_update = false;
+			m_command = 0;
+			m_value = null;
+		}
+
+		protected abstract String getValue() throws Exception;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/model/IDocumentEditor.java b/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/model/IDocumentEditor.java
index 28e64e7bd..93e0faff9 100644
--- a/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/model/IDocumentEditor.java
+++ b/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/model/IDocumentEditor.java
@@ -16,21 +16,21 @@
  *
  */
 public interface IDocumentEditor {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  //
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  void add() throws Exception;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	//
+	//
+	////////////////////////////////////////////////////////////////////////////
+	void add() throws Exception;
 
-  void delete() throws Exception;
+	void delete() throws Exception;
 
-  void update() throws Exception;
+	void update() throws Exception;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  //
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  int getDefinitionOffset();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	//
+	//
+	////////////////////////////////////////////////////////////////////////////
+	int getDefinitionOffset();
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/model/ObserveTypeContainer.java b/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/model/ObserveTypeContainer.java
index e0fec0940..49845eeae 100644
--- a/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/model/ObserveTypeContainer.java
+++ b/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/model/ObserveTypeContainer.java
@@ -30,72 +30,72 @@
  *
  */
 public abstract class ObserveTypeContainer
-    extends
-      org.eclipse.wb.internal.core.databinding.model.ObserveTypeContainer {
-  protected DatabindingsProvider m_provider;
+extends
+org.eclipse.wb.internal.core.databinding.model.ObserveTypeContainer {
+	protected DatabindingsProvider m_provider;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ObserveTypeContainer(ObserveType observeType, boolean isTarget, boolean isModel) {
-    super(observeType, isTarget, isModel);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ObserveTypeContainer(ObserveType observeType, boolean isTarget, boolean isModel) {
+		super(observeType, isTarget, isModel);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Initialize
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final void initialize(IDatabindingsProvider provider) throws Exception {
-    m_provider = (DatabindingsProvider) provider;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Initialize
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final void initialize(IDatabindingsProvider provider) throws Exception {
+		m_provider = (DatabindingsProvider) provider;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IObserveInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final void createObservables(JavaInfo root,
-      IModelResolver resolver,
-      AstEditor editor,
-      TypeDeclaration rootNode) throws Exception {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IObserveInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final void createObservables(JavaInfo root,
+			IModelResolver resolver,
+			AstEditor editor,
+			TypeDeclaration rootNode) throws Exception {
+	}
 
-  @Override
-  public final void synchronizeObserves(JavaInfo root, AstEditor editor, TypeDeclaration rootNode)
-      throws Exception {
-  }
+	@Override
+	public final void synchronizeObserves(JavaInfo root, AstEditor editor, TypeDeclaration rootNode)
+			throws Exception {
+	}
 
-  public void synchronizeObserves() throws Exception {
-  }
+	public void synchronizeObserves() throws Exception {
+	}
 
-  public abstract void createObservables(XmlObjectInfo xmlObjectRoot) throws Exception;
+	public abstract void createObservables(XmlObjectInfo xmlObjectRoot) throws Exception;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parser
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final AstObjectInfo parseExpression(AstEditor editor,
-      String signature,
-      ClassInstanceCreation creation,
-      Expression[] arguments,
-      IModelResolver resolver,
-      IDatabindingsProvider provider) throws Exception {
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parser
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final AstObjectInfo parseExpression(AstEditor editor,
+			String signature,
+			ClassInstanceCreation creation,
+			Expression[] arguments,
+			IModelResolver resolver,
+			IDatabindingsProvider provider) throws Exception {
+		return null;
+	}
 
-  @Override
-  public final AstObjectInfo parseExpression(AstEditor editor,
-      String signature,
-      MethodInvocation invocation,
-      Expression[] arguments,
-      IModelResolver resolver) throws Exception {
-    return null;
-  }
+	@Override
+	public final AstObjectInfo parseExpression(AstEditor editor,
+			String signature,
+			MethodInvocation invocation,
+			Expression[] arguments,
+			IModelResolver resolver) throws Exception {
+		return null;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/model/TreeViewerBindingInfo.java b/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/model/TreeViewerBindingInfo.java
index 4b2ad95c4..33c531c94 100644
--- a/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/model/TreeViewerBindingInfo.java
+++ b/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/model/TreeViewerBindingInfo.java
@@ -26,80 +26,80 @@
  *
  */
 public class TreeViewerBindingInfo extends AbstractBindingInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public TreeViewerBindingInfo() {
-    // TODO Auto-generated constructor stub
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public TreeViewerBindingInfo() {
+		// TODO Auto-generated constructor stub
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Target
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public IObserveInfo getTarget() {
-    // TODO Auto-generated method stub
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Target
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public IObserveInfo getTarget() {
+		// TODO Auto-generated method stub
+		return null;
+	}
 
-  @Override
-  public IObserveInfo getTargetProperty() {
-    // TODO Auto-generated method stub
-    return null;
-  }
+	@Override
+	public IObserveInfo getTargetProperty() {
+		// TODO Auto-generated method stub
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Model
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public IObserveInfo getModel() {
-    // TODO Auto-generated method stub
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Model
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public IObserveInfo getModel() {
+		// TODO Auto-generated method stub
+		return null;
+	}
 
-  @Override
-  public IObserveInfo getModelProperty() {
-    // TODO Auto-generated method stub
-    return null;
-  }
+	@Override
+	public IObserveInfo getModelProperty() {
+		// TODO Auto-generated method stub
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  //
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void addSourceCode(DataBindingContextInfo context,
-      List<String> lines,
-      CodeGenerationSupport generationSupport) throws Exception {
-    throw new UnsupportedOperationException();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	//
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void addSourceCode(DataBindingContextInfo context,
+			List<String> lines,
+			CodeGenerationSupport generationSupport) throws Exception {
+		throw new UnsupportedOperationException();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  //
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getDefinitionSource(DatabindingsProvider provider) throws Exception {
-    throw new UnsupportedOperationException();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	//
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getDefinitionSource(DatabindingsProvider provider) throws Exception {
+		throw new UnsupportedOperationException();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void createContentProviders(List<IUiContentProvider> providers,
-      IPageListener listener,
-      DatabindingsProvider provider) throws Exception {
-    // TODO Auto-generated method stub
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void createContentProviders(List<IUiContentProvider> providers,
+			IPageListener listener,
+			DatabindingsProvider provider) throws Exception {
+		// TODO Auto-generated method stub
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/model/ValidationInfo.java b/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/model/ValidationInfo.java
index eb2ba9a0d..2acf9664b 100644
--- a/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/model/ValidationInfo.java
+++ b/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/model/ValidationInfo.java
@@ -35,248 +35,248 @@
  *
  */
 public class ValidationInfo {
-  private List<String> m_classNames = Lists.newArrayList();
-  private Map<String, String> m_namespaceToPackage = Maps.newHashMap();
-  private final Map<String, String> m_packageToNamespace = Maps.newHashMap();
-  private boolean m_update;
+	private List<String> m_classNames = Lists.newArrayList();
+	private Map<String, String> m_namespaceToPackage = Maps.newHashMap();
+	private final Map<String, String> m_packageToNamespace = Maps.newHashMap();
+	private boolean m_update;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  //
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void parse(DatabindingsProvider provider,
-      DocumentElement validationRules,
-      DocumentElement validationRule) throws Exception {
-    if (validationRules != null) {
-      parseNamespaces(validationRules.getRoot());
-      for (DocumentElement child : validationRules.getChildren()) {
-        parseClass(provider, child.getTag());
-      }
-    } else if (validationRule != null) {
-      List<DocumentElement> children = validationRule.getChildren();
-      if (!children.isEmpty()) {
-        parseNamespaces(validationRule.getRoot());
-        parseClass(provider, children.get(0).getTag());
-      }
-    }
-    m_namespaceToPackage = null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	//
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void parse(DatabindingsProvider provider,
+			DocumentElement validationRules,
+			DocumentElement validationRule) throws Exception {
+		if (validationRules != null) {
+			parseNamespaces(validationRules.getRoot());
+			for (DocumentElement child : validationRules.getChildren()) {
+				parseClass(provider, child.getTag());
+			}
+		} else if (validationRule != null) {
+			List<DocumentElement> children = validationRule.getChildren();
+			if (!children.isEmpty()) {
+				parseNamespaces(validationRule.getRoot());
+				parseClass(provider, children.get(0).getTag());
+			}
+		}
+		m_namespaceToPackage = null;
+	}
 
-  public void parse(DatabindingsProvider provider,
-      DocumentElement root,
-      String validationRules,
-      String validationRule) throws Exception {
-    if (validationRules != null) {
-      parseNamespaces(root);
-      String[] rules =
-          StringUtils.split(StringUtils.substringBetween(validationRules, "{", "}"), ',');
-      //
-      for (String rule : rules) {
-        parseClass(provider, rule.trim());
-      }
-    } else if (validationRule != null) {
-      parseNamespaces(root);
-      parseClass(provider, validationRule);
-    } else {
-      parseNamespaces(root);
-    }
-    m_namespaceToPackage = null;
-  }
+	public void parse(DatabindingsProvider provider,
+			DocumentElement root,
+			String validationRules,
+			String validationRule) throws Exception {
+		if (validationRules != null) {
+			parseNamespaces(root);
+			String[] rules =
+					StringUtils.split(StringUtils.substringBetween(validationRules, "{", "}"), ',');
+			//
+			for (String rule : rules) {
+				parseClass(provider, rule.trim());
+			}
+		} else if (validationRule != null) {
+			parseNamespaces(root);
+			parseClass(provider, validationRule);
+		} else {
+			parseNamespaces(root);
+		}
+		m_namespaceToPackage = null;
+	}
 
-  private void parseNamespaces(DocumentElement root) {
-    for (DocumentAttribute attribute : root.getDocumentAttributes()) {
-      String name = attribute.getName();
-      if (name.startsWith("xmlns:")) {
-        String value = attribute.getValue();
-        if (value.startsWith("clr-namespace:")) {
-          String namespace = name.substring(6);
-          String packageValue = value.substring(14);
-          //
-          m_namespaceToPackage.put(namespace, packageValue);
-          m_packageToNamespace.put(packageValue, namespace);
-        }
-      }
-    }
-  }
+	private void parseNamespaces(DocumentElement root) {
+		for (DocumentAttribute attribute : root.getDocumentAttributes()) {
+			String name = attribute.getName();
+			if (name.startsWith("xmlns:")) {
+				String value = attribute.getValue();
+				if (value.startsWith("clr-namespace:")) {
+					String namespace = name.substring(6);
+					String packageValue = value.substring(14);
+					//
+					m_namespaceToPackage.put(namespace, packageValue);
+					m_packageToNamespace.put(packageValue, namespace);
+				}
+			}
+		}
+	}
 
-  private void parseClass(DatabindingsProvider provider, String value) throws Exception {
-    String namespace = StringUtils.substringBefore(value, ":");
-    String packageValue = m_namespaceToPackage.get(namespace);
-    //
-    if (packageValue == null) {
-      provider.addWarning(
-          MessageFormat.format(Messages.ValidationInfo_validatorNotFound, value),
-          new Throwable());
-    } else {
-      String className = packageValue + "." + StringUtils.substringAfter(value, ":");
-      //
-      try {
-        ClassLoader classLoader = provider.getXmlObjectRoot().getContext().getClassLoader();
-        classLoader.loadClass(className);
-        m_classNames.add(className);
-      } catch (ClassNotFoundException e) {
-        provider.addWarning(
-            MessageFormat.format(Messages.ValidationInfo_validatorClassNotFound, className),
-            new Throwable());
-      }
-    }
-  }
+	private void parseClass(DatabindingsProvider provider, String value) throws Exception {
+		String namespace = StringUtils.substringBefore(value, ":");
+		String packageValue = m_namespaceToPackage.get(namespace);
+		//
+		if (packageValue == null) {
+			provider.addWarning(
+					MessageFormat.format(Messages.ValidationInfo_validatorNotFound, value),
+					new Throwable());
+		} else {
+			String className = packageValue + "." + StringUtils.substringAfter(value, ":");
+			//
+			try {
+				ClassLoader classLoader = provider.getXmlObjectRoot().getContext().getClassLoader();
+				classLoader.loadClass(className);
+				m_classNames.add(className);
+			} catch (ClassNotFoundException e) {
+				provider.addWarning(
+						MessageFormat.format(Messages.ValidationInfo_validatorClassNotFound, className),
+						new Throwable());
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  //
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public List<String> getClassNames() {
-    return m_classNames;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	//
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public List<String> getClassNames() {
+		return m_classNames;
+	}
 
-  public void setClassNames(List<String> classNames) {
-    m_update = true;
-    if (!classNames.equals(m_classNames)) {
-      m_classNames = classNames;
-    }
-  }
+	public void setClassNames(List<String> classNames) {
+		m_update = true;
+		if (!classNames.equals(m_classNames)) {
+			m_classNames = classNames;
+		}
+	}
 
-  public void appendValue(StringBuffer value) throws Exception {
-    if (m_update && !m_classNames.isEmpty()) {
-      if (m_classNames.size() == 1) {
-        String className = m_classNames.get(0);
-        String namespace = m_packageToNamespace.get(ClassUtils.getPackageName(className));
-        value.append(", validationRule="
-            + StringUtils.defaultString(namespace)
-            + ":"
-            + ClassUtils.getShortClassName(className));
-      } else {
-        value.append(", validationRules={");
-        int index = 0;
-        for (String className : m_classNames) {
-          if (index++ > 0) {
-            value.append(", ");
-          }
-          String namespace = m_packageToNamespace.get(ClassUtils.getPackageName(className));
-          value.append(StringUtils.defaultString(namespace)
-              + ":"
-              + ClassUtils.getShortClassName(className));
-        }
-        value.append("}");
-      }
-    }
-  }
+	public void appendValue(StringBuffer value) throws Exception {
+		if (m_update && !m_classNames.isEmpty()) {
+			if (m_classNames.size() == 1) {
+				String className = m_classNames.get(0);
+				String namespace = m_packageToNamespace.get(ClassUtils.getPackageName(className));
+				value.append(", validationRule="
+						+ StringUtils.defaultString(namespace)
+						+ ":"
+						+ ClassUtils.getShortClassName(className));
+			} else {
+				value.append(", validationRules={");
+				int index = 0;
+				for (String className : m_classNames) {
+					if (index++ > 0) {
+						value.append(", ");
+					}
+					String namespace = m_packageToNamespace.get(ClassUtils.getPackageName(className));
+					value.append(StringUtils.defaultString(namespace)
+							+ ":"
+							+ ClassUtils.getShortClassName(className));
+				}
+				value.append("}");
+			}
+		}
+	}
 
-  public boolean update() throws Exception {
-    return m_update;
-  }
+	public boolean update() throws Exception {
+		return m_update;
+	}
 
-  public void applyChanges(AbstractDocumentObject object) throws Exception {
-    if (m_update) {
-      if (object instanceof DocumentAttribute) {
-        if (m_classNames.size() == 1) {
-          String className = m_classNames.get(0);
-          String namespace = m_packageToNamespace.get(ClassUtils.getPackageName(className));
-          if (namespace == null) {
-            DocumentAttribute attribute = (DocumentAttribute) object;
-            namespace = getNamespace(attribute.getEnclosingElement().getRoot(), className);
-            //
-            String value = attribute.getValue();
-            int index = value.indexOf("validationRule=") + 15;
-            attribute.setValue(value.substring(0, index) + namespace + value.substring(index));
-          }
-        } else {
-          List<String> nonExistingNamespace = Lists.newArrayList();
-          DocumentAttribute attribute = (DocumentAttribute) object;
-          for (String className : m_classNames) {
-            String namespace = m_packageToNamespace.get(ClassUtils.getPackageName(className));
-            if (namespace == null || nonExistingNamespace.contains(namespace)) {
-              if (namespace == null) {
-                // create non-existing namespace
-                namespace = getNamespace(attribute.getEnclosingElement().getRoot(), className);
-                nonExistingNamespace.add(namespace);
-              }
-              //
-              String value = attribute.getValue();
-              int index =
-                  value.indexOf(
-                      ":" + ClassUtils.getShortClassName(className),
-                      value.indexOf("validationRules=") + 16);
-              attribute.setValue(value.substring(0, index) + namespace + value.substring(index));
-            }
-          }
-        }
-      } else {
-        DocumentElement bindingElement = (DocumentElement) object;
-        if (m_classNames.isEmpty()) {
-          DocumentElement validationRules =
-              bindingElement.getChild("Binding.validationRules", true);
-          if (validationRules != null) {
-            validationRules.remove();
-          }
-          //
-          DocumentElement validationRule = bindingElement.getChild("Binding.validationRule", true);
-          if (validationRule != null) {
-            validationRule.remove();
-          }
-        } else {
-          DocumentElement validationRule = bindingElement.getChild("Binding.validationRule", true);
-          if (validationRule != null) {
-            validationRule.remove();
-          }
-          //
-          DocumentElement validationRules =
-              bindingElement.getChild("Binding.validationRules", true);
-          if (validationRules == null) {
-            validationRules = new DocumentElement("Binding.validationRule");
-            bindingElement.addChild(validationRules);
-          } else {
-            validationRules.removeChildren();
-          }
-          //
-          DocumentElement rootElement = bindingElement.getRoot();
-          //
-          for (String className : m_classNames) {
-            DocumentElement ruleElement = new DocumentElement();
-            ruleElement.setTag(getNamespace(rootElement, className)
-                + ":"
-                + ClassUtils.getShortClassName(className));
-            validationRules.addChild(ruleElement);
-          }
-        }
-      }
-      m_update = false;
-    }
-  }
+	public void applyChanges(AbstractDocumentObject object) throws Exception {
+		if (m_update) {
+			if (object instanceof DocumentAttribute) {
+				if (m_classNames.size() == 1) {
+					String className = m_classNames.get(0);
+					String namespace = m_packageToNamespace.get(ClassUtils.getPackageName(className));
+					if (namespace == null) {
+						DocumentAttribute attribute = (DocumentAttribute) object;
+						namespace = getNamespace(attribute.getEnclosingElement().getRoot(), className);
+						//
+						String value = attribute.getValue();
+						int index = value.indexOf("validationRule=") + 15;
+						attribute.setValue(value.substring(0, index) + namespace + value.substring(index));
+					}
+				} else {
+					List<String> nonExistingNamespace = Lists.newArrayList();
+					DocumentAttribute attribute = (DocumentAttribute) object;
+					for (String className : m_classNames) {
+						String namespace = m_packageToNamespace.get(ClassUtils.getPackageName(className));
+						if (namespace == null || nonExistingNamespace.contains(namespace)) {
+							if (namespace == null) {
+								// create non-existing namespace
+								namespace = getNamespace(attribute.getEnclosingElement().getRoot(), className);
+								nonExistingNamespace.add(namespace);
+							}
+							//
+							String value = attribute.getValue();
+							int index =
+									value.indexOf(
+											":" + ClassUtils.getShortClassName(className),
+											value.indexOf("validationRules=") + 16);
+							attribute.setValue(value.substring(0, index) + namespace + value.substring(index));
+						}
+					}
+				}
+			} else {
+				DocumentElement bindingElement = (DocumentElement) object;
+				if (m_classNames.isEmpty()) {
+					DocumentElement validationRules =
+							bindingElement.getChild("Binding.validationRules", true);
+					if (validationRules != null) {
+						validationRules.remove();
+					}
+					//
+					DocumentElement validationRule = bindingElement.getChild("Binding.validationRule", true);
+					if (validationRule != null) {
+						validationRule.remove();
+					}
+				} else {
+					DocumentElement validationRule = bindingElement.getChild("Binding.validationRule", true);
+					if (validationRule != null) {
+						validationRule.remove();
+					}
+					//
+					DocumentElement validationRules =
+							bindingElement.getChild("Binding.validationRules", true);
+					if (validationRules == null) {
+						validationRules = new DocumentElement("Binding.validationRule");
+						bindingElement.addChild(validationRules);
+					} else {
+						validationRules.removeChildren();
+					}
+					//
+					DocumentElement rootElement = bindingElement.getRoot();
+					//
+					for (String className : m_classNames) {
+						DocumentElement ruleElement = new DocumentElement();
+						ruleElement.setTag(getNamespace(rootElement, className)
+								+ ":"
+								+ ClassUtils.getShortClassName(className));
+						validationRules.addChild(ruleElement);
+					}
+				}
+			}
+			m_update = false;
+		}
+	}
 
-  private String getNamespace(DocumentElement rootElement, String className) throws Exception {
-    String packageValue = ClassUtils.getPackageName(className);
-    String namespace = m_packageToNamespace.get(packageValue);
-    if (namespace == null) {
-      int index = 0;
-      while (true) {
-        namespace = "v" + Integer.toString(index);
-        if (m_packageToNamespace.containsValue(namespace)) {
-          index++;
-        } else {
-          m_packageToNamespace.put(packageValue, namespace);
-          rootElement.setAttribute("xmlns:" + namespace, "clr-namespace:" + packageValue);
-          break;
-        }
-      }
-    }
-    return namespace;
-  }
+	private String getNamespace(DocumentElement rootElement, String className) throws Exception {
+		String packageValue = ClassUtils.getPackageName(className);
+		String namespace = m_packageToNamespace.get(packageValue);
+		if (namespace == null) {
+			int index = 0;
+			while (true) {
+				namespace = "v" + Integer.toString(index);
+				if (m_packageToNamespace.containsValue(namespace)) {
+					index++;
+				} else {
+					m_packageToNamespace.put(packageValue, namespace);
+					rootElement.setAttribute("xmlns:" + namespace, "clr-namespace:" + packageValue);
+					break;
+				}
+			}
+		}
+		return namespace;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  //
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Create {@link IUiContentProvider} content providers for edit this model.
-   */
-  public void createContentProviders(List<IUiContentProvider> providers,
-      IPageListener listener,
-      DatabindingsProvider provider) throws Exception {
-    providers.add(new ValidationUiContentProvider(provider, this));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	//
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Create {@link IUiContentProvider} content providers for edit this model.
+	 */
+	public void createContentProviders(List<IUiContentProvider> providers,
+			IPageListener listener,
+			DatabindingsProvider provider) throws Exception {
+		providers.add(new ValidationUiContentProvider(provider, this));
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/model/ViewerBindingInfo.java b/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/model/ViewerBindingInfo.java
index 5ecf1cb66..88eb7756d 100644
--- a/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/model/ViewerBindingInfo.java
+++ b/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/model/ViewerBindingInfo.java
@@ -26,80 +26,80 @@
  *
  */
 public class ViewerBindingInfo extends AbstractBindingInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ViewerBindingInfo() {
-    // TODO Auto-generated constructor stub
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ViewerBindingInfo() {
+		// TODO Auto-generated constructor stub
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Target
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public IObserveInfo getTarget() {
-    // TODO Auto-generated method stub
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Target
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public IObserveInfo getTarget() {
+		// TODO Auto-generated method stub
+		return null;
+	}
 
-  @Override
-  public IObserveInfo getTargetProperty() {
-    // TODO Auto-generated method stub
-    return null;
-  }
+	@Override
+	public IObserveInfo getTargetProperty() {
+		// TODO Auto-generated method stub
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Model
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public IObserveInfo getModel() {
-    // TODO Auto-generated method stub
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Model
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public IObserveInfo getModel() {
+		// TODO Auto-generated method stub
+		return null;
+	}
 
-  @Override
-  public IObserveInfo getModelProperty() {
-    // TODO Auto-generated method stub
-    return null;
-  }
+	@Override
+	public IObserveInfo getModelProperty() {
+		// TODO Auto-generated method stub
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  //
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void addSourceCode(DataBindingContextInfo context,
-      List<String> lines,
-      CodeGenerationSupport generationSupport) throws Exception {
-    throw new UnsupportedOperationException();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	//
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void addSourceCode(DataBindingContextInfo context,
+			List<String> lines,
+			CodeGenerationSupport generationSupport) throws Exception {
+		throw new UnsupportedOperationException();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  //
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getDefinitionSource(DatabindingsProvider provider) throws Exception {
-    throw new UnsupportedOperationException();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	//
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getDefinitionSource(DatabindingsProvider provider) throws Exception {
+		throw new UnsupportedOperationException();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void createContentProviders(List<IUiContentProvider> providers,
-      IPageListener listener,
-      DatabindingsProvider provider) throws Exception {
-    // TODO Auto-generated method stub
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void createContentProviders(List<IUiContentProvider> providers,
+			IPageListener listener,
+			DatabindingsProvider provider) throws Exception {
+		// TODO Auto-generated method stub
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/model/XmlObjectDecorator.java b/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/model/XmlObjectDecorator.java
index 600b4e92b..ad6ca4e91 100644
--- a/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/model/XmlObjectDecorator.java
+++ b/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/model/XmlObjectDecorator.java
@@ -23,37 +23,37 @@
  *
  */
 public class XmlObjectDecorator extends JavaInfoDecorator {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public XmlObjectDecorator(DatabindingsProvider provider) {
-    super(provider, provider.getXmlObjectRoot());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public XmlObjectDecorator(DatabindingsProvider provider) {
+		super(provider, provider.getXmlObjectRoot());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // JavaInfoDecorator
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected boolean accept(ObjectInfo object) throws Exception {
-    return object instanceof XmlObjectInfo;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// JavaInfoDecorator
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected boolean accept(ObjectInfo object) throws Exception {
+		return object instanceof XmlObjectInfo;
+	}
 
-  @Override
-  protected boolean equals(ObjectInfo object, String objectReference, IObserveInfo iobserve)
-      throws Exception {
-    if (iobserve instanceof WidgetBindableInfo) {
-      WidgetBindableInfo widget = (WidgetBindableInfo) iobserve;
-      return object == widget.getXMLObjectInfo();
-    }
-    return false;
-  }
+	@Override
+	protected boolean equals(ObjectInfo object, String objectReference, IObserveInfo iobserve)
+			throws Exception {
+		if (iobserve instanceof WidgetBindableInfo) {
+			WidgetBindableInfo widget = (WidgetBindableInfo) iobserve;
+			return object == widget.getXMLObjectInfo();
+		}
+		return false;
+	}
 
-  @Override
-  protected String getReference(ObjectInfo object) throws Exception {
-    return "";
-  }
+	@Override
+	protected String getReference(ObjectInfo object) throws Exception {
+		return "";
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/model/XmlObjectDeleteManager.java b/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/model/XmlObjectDeleteManager.java
index 3adb02a9d..94c714045 100644
--- a/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/model/XmlObjectDeleteManager.java
+++ b/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/model/XmlObjectDeleteManager.java
@@ -26,42 +26,42 @@
  *
  */
 public class XmlObjectDeleteManager extends JavaInfoDeleteManager {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public XmlObjectDeleteManager(DatabindingsProvider provider) {
-    super(provider, provider.getXmlObjectRoot());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public XmlObjectDeleteManager(DatabindingsProvider provider) {
+		super(provider, provider.getXmlObjectRoot());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  //
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected boolean accept(ObjectInfo object) throws Exception {
-    return object instanceof XmlObjectInfo;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	//
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected boolean accept(ObjectInfo object) throws Exception {
+		return object instanceof XmlObjectInfo;
+	}
 
-  @Override
-  protected void deleteBinding(IBindingInfo binding, List<IBindingInfo> bindings) throws Exception {
-    m_provider.deleteBinding(binding);
-  }
+	@Override
+	protected void deleteBinding(IBindingInfo binding, List<IBindingInfo> bindings) throws Exception {
+		m_provider.deleteBinding(binding);
+	}
 
-  @Override
-  protected boolean equals(ObjectInfo object, String javaInfoReference, IObserveInfo iobserve)
-      throws Exception {
-    if (iobserve instanceof WidgetBindableInfo) {
-      WidgetBindableInfo widget = (WidgetBindableInfo) iobserve;
-      return object == widget.getXMLObjectInfo();
-    }
-    return false;
-  }
+	@Override
+	protected boolean equals(ObjectInfo object, String javaInfoReference, IObserveInfo iobserve)
+			throws Exception {
+		if (iobserve instanceof WidgetBindableInfo) {
+			WidgetBindableInfo widget = (WidgetBindableInfo) iobserve;
+			return object == widget.getXMLObjectInfo();
+		}
+		return false;
+	}
 
-  @Override
-  protected String getReference(ObjectInfo object) throws Exception {
-    return "";
-  }
+	@Override
+	protected String getReference(ObjectInfo object) throws Exception {
+		return "";
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/model/beans/BeansObserveTypeContainer.java b/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/model/beans/BeansObserveTypeContainer.java
index 32fb6d913..72c39d3cf 100644
--- a/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/model/beans/BeansObserveTypeContainer.java
+++ b/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/model/beans/BeansObserveTypeContainer.java
@@ -41,129 +41,129 @@
  *
  */
 public final class BeansObserveTypeContainer extends ObserveTypeContainer {
-  public static final String NAMESPACE_KEY = "xmlns:";
-  private static final String NAMESPACE_VALUE = "clr-namespace:";
-  //
-  private XmlObjectInfo m_xmlObjectRoot;
-  private List<BeanBindableInfo> m_observables = Collections.emptyList();
-  private BeanBindableInfo m_dataContext;
+	public static final String NAMESPACE_KEY = "xmlns:";
+	private static final String NAMESPACE_VALUE = "clr-namespace:";
+	//
+	private XmlObjectInfo m_xmlObjectRoot;
+	private List<BeanBindableInfo> m_observables = Collections.emptyList();
+	private BeanBindableInfo m_dataContext;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public BeansObserveTypeContainer() {
-    super(ObserveType.BEANS, false, true);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public BeansObserveTypeContainer() {
+		super(ObserveType.BEANS, false, true);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IObserveInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void createObservables(XmlObjectInfo xmlObjectRoot) throws Exception {
-    m_observables = Lists.newArrayList();
-    m_xmlObjectRoot = xmlObjectRoot;
-    // handle XML elements
-    final ClassLoader classLoader = m_xmlObjectRoot.getContext().getClassLoader();
-    final BeanSupport beanSupport = new BeanSupport(classLoader, null);
-    final Class<?> BindingContextClass =
-        classLoader.loadClass("org.eclipse.e4.xwt.databinding.BindingContext");
-    //
-    DocumentElement rootElement = m_xmlObjectRoot.getElement();
-    //
-    final Map<String, String> namespaceToPackage = Maps.newHashMap();
-    final String[] xKey = new String[1];
-    final String[] dataContextReference = new String[1];
-    //
-    for (DocumentAttribute attribute : rootElement.getDocumentAttributes()) {
-      String name = attribute.getName();
-      String value = attribute.getValue();
-      if (name.startsWith(NAMESPACE_KEY)) {
-        if (value.startsWith(NAMESPACE_VALUE)) {
-          namespaceToPackage.put(
-              name.substring(NAMESPACE_KEY.length()),
-              value.substring(NAMESPACE_VALUE.length()));
-        } else if (value.equals("http://www.eclipse.org/xwt")) {
-          xKey[0] = name.substring(NAMESPACE_KEY.length()) + ":Key";
-        }
-      } else if (name.equalsIgnoreCase("DataContext")) {
-        dataContextReference[0] =
-            StringUtils.substringBetween(value, "{StaticResource", "}").trim();
-      }
-    }
-    //
-    rootElement.accept(new DocumentModelVisitor() {
-      @Override
-      public boolean visit(DocumentElement element) {
-        if (element.getTag().endsWith(".Resources")) {
-          for (DocumentElement child : element.getChildren()) {
-            try {
-              String elementName = child.getTag();
-              Class<?> beanClass = null;
-              //
-              if (elementName.equalsIgnoreCase("BindingContext")) {
-                beanClass = BindingContextClass;
-              } else {
-                int index = elementName.indexOf(':');
-                String beanClassName =
-                    namespaceToPackage.get(elementName.substring(0, index))
-                        + "."
-                        + elementName.substring(index + 1);
-                beanClass = CoreUtils.load(classLoader, beanClassName);
-              }
-              //
-              IReferenceProvider referenceProvider =
-                  new StringReferenceProvider(child.getAttribute(xKey[0]));
-              boolean dataContext =
-                  referenceProvider.getReference().equals(dataContextReference[0]);
-              //
-              XmlElementBeanBindableInfo bindable =
-                  new XmlElementBeanBindableInfo(beanSupport,
-                      beanClass,
-                      referenceProvider,
-                      null,
-                      dataContext);
-              m_observables.add(bindable);
-              if (dataContext) {
-                m_dataContext = bindable;
-              }
-            } catch (ClassNotFoundException e) {
-              m_xmlObjectRoot.getContext().addWarning(
-                  new EditorWarning("ClassNotFoundException: " + element, new Throwable()));
-            } catch (Throwable e) {
-              throw ReflectionUtils.propagate(e);
-            }
-          }
-          return false;
-        }
-        return true;
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IObserveInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void createObservables(XmlObjectInfo xmlObjectRoot) throws Exception {
+		m_observables = Lists.newArrayList();
+		m_xmlObjectRoot = xmlObjectRoot;
+		// handle XML elements
+		final ClassLoader classLoader = m_xmlObjectRoot.getContext().getClassLoader();
+		final BeanSupport beanSupport = new BeanSupport(classLoader, null);
+		final Class<?> BindingContextClass =
+				classLoader.loadClass("org.eclipse.e4.xwt.databinding.BindingContext");
+		//
+		DocumentElement rootElement = m_xmlObjectRoot.getElement();
+		//
+		final Map<String, String> namespaceToPackage = Maps.newHashMap();
+		final String[] xKey = new String[1];
+		final String[] dataContextReference = new String[1];
+		//
+		for (DocumentAttribute attribute : rootElement.getDocumentAttributes()) {
+			String name = attribute.getName();
+			String value = attribute.getValue();
+			if (name.startsWith(NAMESPACE_KEY)) {
+				if (value.startsWith(NAMESPACE_VALUE)) {
+					namespaceToPackage.put(
+							name.substring(NAMESPACE_KEY.length()),
+							value.substring(NAMESPACE_VALUE.length()));
+				} else if (value.equals("http://www.eclipse.org/xwt")) {
+					xKey[0] = name.substring(NAMESPACE_KEY.length()) + ":Key";
+				}
+			} else if (name.equalsIgnoreCase("DataContext")) {
+				dataContextReference[0] =
+						StringUtils.substringBetween(value, "{StaticResource", "}").trim();
+			}
+		}
+		//
+		rootElement.accept(new DocumentModelVisitor() {
+			@Override
+			public boolean visit(DocumentElement element) {
+				if (element.getTag().endsWith(".Resources")) {
+					for (DocumentElement child : element.getChildren()) {
+						try {
+							String elementName = child.getTag();
+							Class<?> beanClass = null;
+							//
+							if (elementName.equalsIgnoreCase("BindingContext")) {
+								beanClass = BindingContextClass;
+							} else {
+								int index = elementName.indexOf(':');
+								String beanClassName =
+										namespaceToPackage.get(elementName.substring(0, index))
+										+ "."
+										+ elementName.substring(index + 1);
+								beanClass = CoreUtils.load(classLoader, beanClassName);
+							}
+							//
+							IReferenceProvider referenceProvider =
+									new StringReferenceProvider(child.getAttribute(xKey[0]));
+							boolean dataContext =
+									referenceProvider.getReference().equals(dataContextReference[0]);
+							//
+							XmlElementBeanBindableInfo bindable =
+									new XmlElementBeanBindableInfo(beanSupport,
+											beanClass,
+											referenceProvider,
+											null,
+											dataContext);
+							m_observables.add(bindable);
+							if (dataContext) {
+								m_dataContext = bindable;
+							}
+						} catch (ClassNotFoundException e) {
+							m_xmlObjectRoot.getContext().addWarning(
+									new EditorWarning("ClassNotFoundException: " + element, new Throwable()));
+						} catch (Throwable e) {
+							throw ReflectionUtils.propagate(e);
+						}
+					}
+					return false;
+				}
+				return true;
+			}
+		});
+	}
 
-  @Override
-  public List<IObserveInfo> getObservables() {
-    return CoreUtils.cast(m_observables);
-  }
+	@Override
+	public List<IObserveInfo> getObservables() {
+		return CoreUtils.cast(m_observables);
+	}
 
-  public List<BeanBindableInfo> getObservables0() {
-    return m_observables;
-  }
+	public List<BeanBindableInfo> getObservables0() {
+		return m_observables;
+	}
 
-  public BeanBindableInfo getDataContext() {
-    return m_dataContext;
-  }
+	public BeanBindableInfo getDataContext() {
+		return m_dataContext;
+	}
 
-  public final BindableInfo resolve(String reference) throws Exception {
-    for (BeanBindableInfo bindable : m_observables) {
-      BindableInfo result = bindable.resolveReference(reference);
-      if (result != null) {
-        return result;
-      }
-    }
-    return null;
-  }
+	public final BindableInfo resolve(String reference) throws Exception {
+		for (BeanBindableInfo bindable : m_observables) {
+			BindableInfo result = bindable.resolveReference(reference);
+			if (result != null) {
+				return result;
+			}
+		}
+		return null;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/model/beans/XmlElementBeanBindableInfo.java b/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/model/beans/XmlElementBeanBindableInfo.java
index 8c88e3a41..d1917de6b 100644
--- a/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/model/beans/XmlElementBeanBindableInfo.java
+++ b/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/model/beans/XmlElementBeanBindableInfo.java
@@ -22,29 +22,29 @@
  *
  */
 public class XmlElementBeanBindableInfo extends BeanBindableInfo {
-  private final boolean m_dataContext;
+	private final boolean m_dataContext;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public XmlElementBeanBindableInfo(BeanSupport beanSupport,
-      Class<?> objectType,
-      IReferenceProvider referenceProvider,
-      XmlObjectInfo objectInfo,
-      boolean dataContext) throws Exception {
-    super(beanSupport, null, objectType, referenceProvider, objectInfo);
-    m_dataContext = dataContext;
-    setBindingDecoration(SwtResourceManager.TOP_RIGHT);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public XmlElementBeanBindableInfo(BeanSupport beanSupport,
+			Class<?> objectType,
+			IReferenceProvider referenceProvider,
+			XmlObjectInfo objectInfo,
+			boolean dataContext) throws Exception {
+		super(beanSupport, null, objectType, referenceProvider, objectInfo);
+		m_dataContext = dataContext;
+		setBindingDecoration(SwtResourceManager.TOP_RIGHT);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public boolean isDataContext() {
-    return m_dataContext;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public boolean isDataContext() {
+		return m_dataContext;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/model/widgets/WidgetBindableInfo.java b/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/model/widgets/WidgetBindableInfo.java
index 3a51f321f..95e3f768e 100644
--- a/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/model/widgets/WidgetBindableInfo.java
+++ b/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/model/widgets/WidgetBindableInfo.java
@@ -34,172 +34,172 @@
  *
  */
 public class WidgetBindableInfo extends BindableInfo {
-  private final XmlObjectInfo m_xmlObjectInfo;
-  private final WidgetBindableInfo m_parent;
-  private final List<WidgetBindableInfo> m_children = Lists.newArrayList();
-  private final List<WidgetPropertyBindableInfo> m_properties;
-  private final XmlObjectObservePresentation m_presentation;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public WidgetBindableInfo(final XmlObjectInfo xmlObjectInfo, WidgetBindableInfo parent)
-      throws Exception {
-    super(xmlObjectInfo.getDescription().getComponentClass(),
-        new XmlObjectReferenceProvider(xmlObjectInfo));
-    m_xmlObjectInfo = xmlObjectInfo;
-    m_parent = parent;
-    m_presentation = new XmlObjectObservePresentation(xmlObjectInfo);
-    // prepare children
-    List<XmlObjectInfo> childrenInfos =
-        SynchronizeManager.getChildren(xmlObjectInfo, XmlObjectInfo.class);
-    for (XmlObjectInfo childInfo : childrenInfos) {
-      m_children.add(new WidgetBindableInfo(childInfo, this));
-    }
-    // prepare properties
-    m_properties = PropertiesSupport.getProperties(getClassLoader(), getObjectType());
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public XmlObjectInfo getXMLObjectInfo() {
-    return m_xmlObjectInfo;
-  }
-
-  public ClassLoader getClassLoader() {
-    return m_xmlObjectInfo.getContext().getClassLoader();
-  }
-
-  public WidgetBindableInfo resolve(XmlObjectInfo xmlObjectInfo) {
-    if (m_xmlObjectInfo == xmlObjectInfo) {
-      return this;
-    }
-    for (WidgetBindableInfo child : m_children) {
-      WidgetBindableInfo result = child.resolve(xmlObjectInfo);
-      if (result != null) {
-        return result;
-      }
-    }
-    return null;
-  }
-
-  public WidgetBindableInfo resolve(DocumentElement element) {
-    if (m_xmlObjectInfo.getElement() == element) {
-      return this;
-    }
-    for (WidgetBindableInfo child : m_children) {
-      WidgetBindableInfo result = child.resolve(element);
-      if (result != null) {
-        return result;
-      }
-    }
-    return null;
-  }
-
-  public WidgetPropertyBindableInfo resolvePropertyByText(String text) throws Exception {
-    for (WidgetPropertyBindableInfo property : m_properties) {
-      if (text.equalsIgnoreCase(property.getPresentation().getText())) {
-        return property;
-      }
-    }
-    return null;
-  }
-
-  public void update() throws Exception {
-    // prepare new objectInfo's
-    List<XmlObjectInfo> objectInfos =
-        SynchronizeManager.getChildren(m_xmlObjectInfo, XmlObjectInfo.class);
-    //
-    SynchronizeManager.synchronizeObjects(
-        m_children,
-        objectInfos,
-        new ISynchronizeProcessor<XmlObjectInfo, WidgetBindableInfo>() {
-          @Override
-          public boolean handleObject(WidgetBindableInfo object) {
-            return true;
-          }
-
-          @Override
-          public XmlObjectInfo getKeyObject(WidgetBindableInfo widget) {
-            return widget.m_xmlObjectInfo;
-          }
-
-          @Override
-          public boolean equals(XmlObjectInfo key0, XmlObjectInfo key1) {
-            return key0 == key1;
-          }
-
-          @Override
-          public WidgetBindableInfo findObject(Map<XmlObjectInfo, WidgetBindableInfo> keyObjectToObject,
-              XmlObjectInfo key) throws Exception {
-            return null;
-          }
-
-          @Override
-          public WidgetBindableInfo createObject(XmlObjectInfo objectInfo) throws Exception {
-            return new WidgetBindableInfo(objectInfo, WidgetBindableInfo.this);
-          }
-
-          @Override
-          public void update(WidgetBindableInfo widget) throws Exception {
-            widget.update();
-          }
-        });
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // BindableInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected List<BindableInfo> getChildren() {
-    return CoreUtils.cast(m_children);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Hierarchy
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public IObserveInfo getParent() {
-    return m_parent;
-  }
-
-  @Override
-  public List<IObserveInfo> getChildren(ChildrenContext context) {
-    if (context == ChildrenContext.ChildrenForMasterTable) {
-      return CoreUtils.cast(m_children);
-    }
-    if (context == ChildrenContext.ChildrenForPropertiesTable) {
-      return CoreUtils.cast(m_properties);
-    }
-    return Collections.emptyList();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public IObservePresentation getPresentation() {
-    return m_presentation;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ObserveType
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public ObserveType getType() {
-    return ObserveType.WIDGETS;
-  }
+	private final XmlObjectInfo m_xmlObjectInfo;
+	private final WidgetBindableInfo m_parent;
+	private final List<WidgetBindableInfo> m_children = Lists.newArrayList();
+	private final List<WidgetPropertyBindableInfo> m_properties;
+	private final XmlObjectObservePresentation m_presentation;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public WidgetBindableInfo(final XmlObjectInfo xmlObjectInfo, WidgetBindableInfo parent)
+			throws Exception {
+		super(xmlObjectInfo.getDescription().getComponentClass(),
+				new XmlObjectReferenceProvider(xmlObjectInfo));
+		m_xmlObjectInfo = xmlObjectInfo;
+		m_parent = parent;
+		m_presentation = new XmlObjectObservePresentation(xmlObjectInfo);
+		// prepare children
+		List<XmlObjectInfo> childrenInfos =
+				SynchronizeManager.getChildren(xmlObjectInfo, XmlObjectInfo.class);
+		for (XmlObjectInfo childInfo : childrenInfos) {
+			m_children.add(new WidgetBindableInfo(childInfo, this));
+		}
+		// prepare properties
+		m_properties = PropertiesSupport.getProperties(getClassLoader(), getObjectType());
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public XmlObjectInfo getXMLObjectInfo() {
+		return m_xmlObjectInfo;
+	}
+
+	public ClassLoader getClassLoader() {
+		return m_xmlObjectInfo.getContext().getClassLoader();
+	}
+
+	public WidgetBindableInfo resolve(XmlObjectInfo xmlObjectInfo) {
+		if (m_xmlObjectInfo == xmlObjectInfo) {
+			return this;
+		}
+		for (WidgetBindableInfo child : m_children) {
+			WidgetBindableInfo result = child.resolve(xmlObjectInfo);
+			if (result != null) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	public WidgetBindableInfo resolve(DocumentElement element) {
+		if (m_xmlObjectInfo.getElement() == element) {
+			return this;
+		}
+		for (WidgetBindableInfo child : m_children) {
+			WidgetBindableInfo result = child.resolve(element);
+			if (result != null) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	public WidgetPropertyBindableInfo resolvePropertyByText(String text) throws Exception {
+		for (WidgetPropertyBindableInfo property : m_properties) {
+			if (text.equalsIgnoreCase(property.getPresentation().getText())) {
+				return property;
+			}
+		}
+		return null;
+	}
+
+	public void update() throws Exception {
+		// prepare new objectInfo's
+		List<XmlObjectInfo> objectInfos =
+				SynchronizeManager.getChildren(m_xmlObjectInfo, XmlObjectInfo.class);
+		//
+		SynchronizeManager.synchronizeObjects(
+				m_children,
+				objectInfos,
+				new ISynchronizeProcessor<XmlObjectInfo, WidgetBindableInfo>() {
+					@Override
+					public boolean handleObject(WidgetBindableInfo object) {
+						return true;
+					}
+
+					@Override
+					public XmlObjectInfo getKeyObject(WidgetBindableInfo widget) {
+						return widget.m_xmlObjectInfo;
+					}
+
+					@Override
+					public boolean equals(XmlObjectInfo key0, XmlObjectInfo key1) {
+						return key0 == key1;
+					}
+
+					@Override
+					public WidgetBindableInfo findObject(Map<XmlObjectInfo, WidgetBindableInfo> keyObjectToObject,
+							XmlObjectInfo key) throws Exception {
+						return null;
+					}
+
+					@Override
+					public WidgetBindableInfo createObject(XmlObjectInfo objectInfo) throws Exception {
+						return new WidgetBindableInfo(objectInfo, WidgetBindableInfo.this);
+					}
+
+					@Override
+					public void update(WidgetBindableInfo widget) throws Exception {
+						widget.update();
+					}
+				});
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// BindableInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected List<BindableInfo> getChildren() {
+		return CoreUtils.cast(m_children);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Hierarchy
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public IObserveInfo getParent() {
+		return m_parent;
+	}
+
+	@Override
+	public List<IObserveInfo> getChildren(ChildrenContext context) {
+		if (context == ChildrenContext.ChildrenForMasterTable) {
+			return CoreUtils.cast(m_children);
+		}
+		if (context == ChildrenContext.ChildrenForPropertiesTable) {
+			return CoreUtils.cast(m_properties);
+		}
+		return Collections.emptyList();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public IObservePresentation getPresentation() {
+		return m_presentation;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ObserveType
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public ObserveType getType() {
+		return ObserveType.WIDGETS;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/model/widgets/WidgetsObserveTypeContainer.java b/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/model/widgets/WidgetsObserveTypeContainer.java
index 94190048e..7932b31c4 100644
--- a/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/model/widgets/WidgetsObserveTypeContainer.java
+++ b/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/model/widgets/WidgetsObserveTypeContainer.java
@@ -28,54 +28,54 @@
  *
  */
 public final class WidgetsObserveTypeContainer extends ObserveTypeContainer {
-  private List<WidgetBindableInfo> m_observables = Collections.emptyList();
+	private List<WidgetBindableInfo> m_observables = Collections.emptyList();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public WidgetsObserveTypeContainer() {
-    super(ObserveType.WIDGETS, true, false);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public WidgetsObserveTypeContainer() {
+		super(ObserveType.WIDGETS, true, false);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IObserveInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void synchronizeObserves() throws Exception {
-    for (WidgetBindableInfo widget : m_observables) {
-      widget.update();
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IObserveInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void synchronizeObserves() throws Exception {
+		for (WidgetBindableInfo widget : m_observables) {
+			widget.update();
+		}
+	}
 
-  @Override
-  public void createObservables(XmlObjectInfo xmlObjectRoot) throws Exception {
-    m_observables = Lists.newArrayList();
-    m_observables.add(new WidgetBindableInfo(xmlObjectRoot, null));
-  }
+	@Override
+	public void createObservables(XmlObjectInfo xmlObjectRoot) throws Exception {
+		m_observables = Lists.newArrayList();
+		m_observables.add(new WidgetBindableInfo(xmlObjectRoot, null));
+	}
 
-  @Override
-  public List<IObserveInfo> getObservables() {
-    return CoreUtils.cast(m_observables);
-  }
+	@Override
+	public List<IObserveInfo> getObservables() {
+		return CoreUtils.cast(m_observables);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public WidgetBindableInfo resolve(XmlObjectInfo xmlObjectInfo) {
-    return m_observables.get(0).resolve(xmlObjectInfo);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public WidgetBindableInfo resolve(XmlObjectInfo xmlObjectInfo) {
+		return m_observables.get(0).resolve(xmlObjectInfo);
+	}
 
-  public WidgetBindableInfo resolve(DocumentElement element) {
-    return m_observables.get(0).resolve(element);
-  }
+	public WidgetBindableInfo resolve(DocumentElement element) {
+		return m_observables.get(0).resolve(element);
+	}
 
-  public WidgetBindableInfo resolve(String reference) throws Exception {
-    return (WidgetBindableInfo) m_observables.get(0).resolveReference(reference);
-  }
+	public WidgetBindableInfo resolve(String reference) throws Exception {
+		return (WidgetBindableInfo) m_observables.get(0).resolveReference(reference);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/model/widgets/XmlObjectObservePresentation.java b/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/model/widgets/XmlObjectObservePresentation.java
index d5424755c..016a5fca0 100644
--- a/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/model/widgets/XmlObjectObservePresentation.java
+++ b/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/model/widgets/XmlObjectObservePresentation.java
@@ -21,33 +21,33 @@
  *
  */
 public class XmlObjectObservePresentation extends JavaInfoObservePresentation {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public XmlObjectObservePresentation(ObjectInfo javaInfo) {
-    super(javaInfo);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public XmlObjectObservePresentation(ObjectInfo javaInfo) {
+		super(javaInfo);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  //
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getText() throws Exception {
-    String text = super.getText();
-    String reference = XmlObjectReferenceProvider.getName(m_javaInfo);
-    if (!StringUtils.isEmpty(reference)) {
-      text += " - " + reference;
-    }
-    return text;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	//
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getText() throws Exception {
+		String text = super.getText();
+		String reference = XmlObjectReferenceProvider.getName(m_javaInfo);
+		if (!StringUtils.isEmpty(reference)) {
+			text += " - " + reference;
+		}
+		return text;
+	}
 
-  @Override
-  public String getTextForBinding() throws Exception {
-    String reference = XmlObjectReferenceProvider.getName(m_javaInfo);
-    return StringUtils.isEmpty(reference) ? super.getText() : reference;
-  }
+	@Override
+	public String getTextForBinding() throws Exception {
+		String reference = XmlObjectReferenceProvider.getName(m_javaInfo);
+		return StringUtils.isEmpty(reference) ? super.getText() : reference;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/model/widgets/XmlObjectReferenceProvider.java b/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/model/widgets/XmlObjectReferenceProvider.java
index b91ff7fc4..44daa645e 100644
--- a/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/model/widgets/XmlObjectReferenceProvider.java
+++ b/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/model/widgets/XmlObjectReferenceProvider.java
@@ -33,81 +33,81 @@
  *
  */
 public class XmlObjectReferenceProvider implements IReferenceProvider {
-  private final XmlObjectInfo m_objectInfo;
-  private final String m_defaultReference;
+	private final XmlObjectInfo m_objectInfo;
+	private final String m_defaultReference;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public XmlObjectReferenceProvider(XmlObjectInfo objectInfo) {
-    m_objectInfo = objectInfo;
-    m_defaultReference = UUID.randomUUID().toString();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public XmlObjectReferenceProvider(XmlObjectInfo objectInfo) {
+		m_objectInfo = objectInfo;
+		m_defaultReference = UUID.randomUUID().toString();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IReferenceProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getReference() throws Exception {
-    return StringUtils.defaultString(getName(m_objectInfo), m_defaultReference);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IReferenceProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getReference() throws Exception {
+		return StringUtils.defaultString(getName(m_objectInfo), m_defaultReference);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static String getName(ObjectInfo objectInfo) throws Exception {
-    Property property = objectInfo.getPropertyByTitle("Name");
-    if (property == null) {
-      return null;
-    }
-    Object value = property.getValue();
-    return value == Property.UNKNOWN_VALUE ? null : (String) value;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static String getName(ObjectInfo objectInfo) throws Exception {
+		Property property = objectInfo.getPropertyByTitle("Name");
+		if (property == null) {
+			return null;
+		}
+		Object value = property.getValue();
+		return value == Property.UNKNOWN_VALUE ? null : (String) value;
+	}
 
-  public static void generateName(XmlObjectInfo objectInfo) throws Exception {
-    if (getName(objectInfo) == null) {
-      final Set<String> variables = Sets.newHashSet();
-      //
-      DocumentElement rootElement = objectInfo.getElement().getRoot();
-      final String[] xName = new String[1];
-      //
-      for (DocumentAttribute attribute : rootElement.getDocumentAttributes()) {
-        String name = attribute.getName();
-        String value = attribute.getValue();
-        if (name.startsWith(BeansObserveTypeContainer.NAMESPACE_KEY)) {
-          if (value.equals("http://www.eclipse.org/xwt")) {
-            xName[0] = name.substring(BeansObserveTypeContainer.NAMESPACE_KEY.length()) + ":Name";
-            break;
-          }
-        }
-      }
-      //
-      rootElement.accept(new DocumentModelVisitor() {
-        @Override
-        public void visit(DocumentAttribute attribute) {
-          if (attribute.getName().equalsIgnoreCase(xName[0])) {
-            variables.add(attribute.getValue());
-          }
-        }
-      });
-      //
-      String baseVariable =
-          StringUtils.uncapitalize(ClassUtils.getShortClassName(objectInfo.getDescription().getComponentClass()));
-      String variable = baseVariable;
-      int variableIndex = 1;
-      // ensure unique
-      while (variables.contains(variable)) {
-        variable = baseVariable + "_" + Integer.toString(variableIndex++);
-      }
-      //
-      Property property = objectInfo.getPropertyByTitle("Name");
-      property.setValue(variable);
-    }
-  }
+	public static void generateName(XmlObjectInfo objectInfo) throws Exception {
+		if (getName(objectInfo) == null) {
+			final Set<String> variables = Sets.newHashSet();
+			//
+			DocumentElement rootElement = objectInfo.getElement().getRoot();
+			final String[] xName = new String[1];
+			//
+			for (DocumentAttribute attribute : rootElement.getDocumentAttributes()) {
+				String name = attribute.getName();
+				String value = attribute.getValue();
+				if (name.startsWith(BeansObserveTypeContainer.NAMESPACE_KEY)) {
+					if (value.equals("http://www.eclipse.org/xwt")) {
+						xName[0] = name.substring(BeansObserveTypeContainer.NAMESPACE_KEY.length()) + ":Name";
+						break;
+					}
+				}
+			}
+			//
+			rootElement.accept(new DocumentModelVisitor() {
+				@Override
+				public void visit(DocumentAttribute attribute) {
+					if (attribute.getName().equalsIgnoreCase(xName[0])) {
+						variables.add(attribute.getValue());
+					}
+				}
+			});
+			//
+			String baseVariable =
+					StringUtils.uncapitalize(ClassUtils.getShortClassName(objectInfo.getDescription().getComponentClass()));
+			String variable = baseVariable;
+			int variableIndex = 1;
+			// ensure unique
+			while (variables.contains(variable)) {
+				variable = baseVariable + "_" + Integer.toString(variableIndex++);
+			}
+			//
+			Property property = objectInfo.getPropertyByTitle("Name");
+			property.setValue(variable);
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/parser/DatabindingParser.java b/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/parser/DatabindingParser.java
index 1217479b4..50eced997 100644
--- a/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/parser/DatabindingParser.java
+++ b/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/parser/DatabindingParser.java
@@ -45,250 +45,250 @@
  *
  */
 public final class DatabindingParser {
-  private static final String BINDING = "{binding ";
-  private final XmlObjectInfo m_xmlObjectRoot;
-  private final DatabindingsProvider m_provider;
-  private final BeansObserveTypeContainer m_beanContainer;
-  private final WidgetsObserveTypeContainer m_widgetContainer;
+	private static final String BINDING = "{binding ";
+	private final XmlObjectInfo m_xmlObjectRoot;
+	private final DatabindingsProvider m_provider;
+	private final BeansObserveTypeContainer m_beanContainer;
+	private final WidgetsObserveTypeContainer m_widgetContainer;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parse
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static void parse(DatabindingsProvider provider) throws Exception {
-    new DatabindingParser(provider.getXmlObjectRoot(), provider);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parse
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static void parse(DatabindingsProvider provider) throws Exception {
+		new DatabindingParser(provider.getXmlObjectRoot(), provider);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private DatabindingParser(XmlObjectInfo xmlObjectRoot, DatabindingsProvider provider)
-      throws Exception {
-    m_xmlObjectRoot = xmlObjectRoot;
-    m_provider = provider;
-    m_beanContainer = (BeansObserveTypeContainer) m_provider.getContainer(ObserveType.BEANS);
-    m_widgetContainer = (WidgetsObserveTypeContainer) m_provider.getContainer(ObserveType.WIDGETS);
-    //
-    for (ObserveTypeContainer container : provider.getContainers()) {
-      container.createObservables(m_xmlObjectRoot);
-    }
-    m_xmlObjectRoot.addBroadcastListener(new ObjectInfoTreeComplete() {
-      @Override
-      public void invoke() throws Exception {
-        m_xmlObjectRoot.removeBroadcastListener(this);
-        parse();
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private DatabindingParser(XmlObjectInfo xmlObjectRoot, DatabindingsProvider provider)
+			throws Exception {
+		m_xmlObjectRoot = xmlObjectRoot;
+		m_provider = provider;
+		m_beanContainer = (BeansObserveTypeContainer) m_provider.getContainer(ObserveType.BEANS);
+		m_widgetContainer = (WidgetsObserveTypeContainer) m_provider.getContainer(ObserveType.WIDGETS);
+		//
+		for (ObserveTypeContainer container : provider.getContainers()) {
+			container.createObservables(m_xmlObjectRoot);
+		}
+		m_xmlObjectRoot.addBroadcastListener(new ObjectInfoTreeComplete() {
+			@Override
+			public void invoke() throws Exception {
+				m_xmlObjectRoot.removeBroadcastListener(this);
+				parse();
+			}
+		});
+	}
 
-  private void parse() throws Exception {
-    m_xmlObjectRoot.getElement().accept(new DocumentModelVisitor() {
-      @Override
-      public boolean visit(DocumentElement element) {
-        if (element.getTag().equalsIgnoreCase("binding")) {
-          DocumentElement propertyElement = element.getParent();
-          if (propertyElement.getTag().equalsIgnoreCase("MultiBinding")) {
-            // XXX
-          } else {
-            try {
-              DocumentElement objectElement = propertyElement.getParent();
-              String property =
-                  StringUtils.substringAfter(propertyElement.getTag(), ".").toLowerCase();
-              //
-              BindingInfo binding = parseBinding(objectElement, property, getAttributes(element));
-              if (binding != null) {
-                binding.getConverter().parse(
-                    m_provider,
-                    element.getChild("Binding.converter", true));
-                binding.getValidator().parse(
-                    m_provider,
-                    element.getChild("Binding.validationRules", true),
-                    element.getChild("Binding.validationRule", true));
-                binding.setDocumentEditor(new ElementDocumentEditor(binding, element));
-              }
-            } catch (Throwable e) {
-              e.printStackTrace(); // XXX
-            }
-          }
-        } else {
-          for (DocumentAttribute attribute : element.getDocumentAttributes()) {
-            String value = attribute.getValue();
-            if (value.toLowerCase().startsWith(BINDING) && value.endsWith("}")) {
-              try {
-                Map<String, String> attributes =
-                    getAttributes(value.substring(BINDING.length(), value.length() - 1));
-                BindingInfo binding =
-                    parseBinding(element, attribute.getName().toLowerCase(), attributes);
-                if (binding != null) {
-                  binding.getConverter().parse(
-                      m_provider,
-                      element.getRoot(),
-                      attributes.get("converter"));
-                  binding.getValidator().parse(
-                      m_provider,
-                      element.getRoot(),
-                      attributes.get("validationrules"),
-                      attributes.get("validationrule"));
-                  binding.setDocumentEditor(new AttributeDocumentEditor(binding, attribute));
-                }
-              } catch (Throwable e) {
-                e.printStackTrace(); // XXX
-              }
-            }
-          }
-        }
-        return true;
-      }
-    });
-    //
-    for (BindingInfo binding : m_provider.getBindings0()) {
-      binding.postParse();
-    }
-  }
+	private void parse() throws Exception {
+		m_xmlObjectRoot.getElement().accept(new DocumentModelVisitor() {
+			@Override
+			public boolean visit(DocumentElement element) {
+				if (element.getTag().equalsIgnoreCase("binding")) {
+					DocumentElement propertyElement = element.getParent();
+					if (propertyElement.getTag().equalsIgnoreCase("MultiBinding")) {
+						// XXX
+					} else {
+						try {
+							DocumentElement objectElement = propertyElement.getParent();
+							String property =
+									StringUtils.substringAfter(propertyElement.getTag(), ".").toLowerCase();
+							//
+							BindingInfo binding = parseBinding(objectElement, property, getAttributes(element));
+							if (binding != null) {
+								binding.getConverter().parse(
+										m_provider,
+										element.getChild("Binding.converter", true));
+								binding.getValidator().parse(
+										m_provider,
+										element.getChild("Binding.validationRules", true),
+										element.getChild("Binding.validationRule", true));
+								binding.setDocumentEditor(new ElementDocumentEditor(binding, element));
+							}
+						} catch (Throwable e) {
+							e.printStackTrace(); // XXX
+						}
+					}
+				} else {
+					for (DocumentAttribute attribute : element.getDocumentAttributes()) {
+						String value = attribute.getValue();
+						if (value.toLowerCase().startsWith(BINDING) && value.endsWith("}")) {
+							try {
+								Map<String, String> attributes =
+										getAttributes(value.substring(BINDING.length(), value.length() - 1));
+								BindingInfo binding =
+										parseBinding(element, attribute.getName().toLowerCase(), attributes);
+								if (binding != null) {
+									binding.getConverter().parse(
+											m_provider,
+											element.getRoot(),
+											attributes.get("converter"));
+									binding.getValidator().parse(
+											m_provider,
+											element.getRoot(),
+											attributes.get("validationrules"),
+											attributes.get("validationrule"));
+									binding.setDocumentEditor(new AttributeDocumentEditor(binding, attribute));
+								}
+							} catch (Throwable e) {
+								e.printStackTrace(); // XXX
+							}
+						}
+					}
+				}
+				return true;
+			}
+		});
+		//
+		for (BindingInfo binding : m_provider.getBindings0()) {
+			binding.postParse();
+		}
+	}
 
-  private BindingInfo parseBinding(DocumentElement element,
-      String property,
-      Map<String, String> attributes) throws Exception {
-    WidgetBindableInfo target = m_widgetContainer.resolve(element);
-    if (target == null) {
-      m_provider.addWarning(
-          MessageFormat.format(Messages.DatabindingParser_widgetNotFound, element),
-          new Throwable());
-      return null;
-    }
-    //
-    WidgetPropertyBindableInfo targetProperty = target.resolvePropertyByText(property);
-    if (targetProperty == null) {
-      m_provider.addWarning(
-          MessageFormat.format(Messages.DatabindingParser_widgetPropertyNotFound, element, property),
-          new Throwable());
-      return null;
-    }
-    //
-    String path = attributes.get("path");
-    String elementName = attributes.get("elementname");
-    //
-    if (elementName != null) {
-      WidgetBindableInfo model = m_widgetContainer.resolve(elementName);
-      if (model == null) {
-        m_provider.addWarning(
-            MessageFormat.format(Messages.DatabindingParser_widgetNotFound, elementName),
-            new Throwable());
-        return null;
-      }
-      //
-      if (path.toLowerCase().startsWith("singleselection.(") && path.endsWith(")")) {
-        if (property.equalsIgnoreCase("input")) {
-          // XXX
-        }
-        // XXX
-        return null;
-      }
-      //
-      WidgetPropertyBindableInfo modelProperty = model.resolvePropertyByText(path.toLowerCase());
-      if (modelProperty == null) {
-        m_provider.addWarning(
-            MessageFormat.format(Messages.DatabindingParser_widgetPropertyNotFound, element, path),
-            new Throwable());
-        return null;
-      }
-      //
-      return createBinding(target, targetProperty, model, modelProperty, attributes);
-    }
-    //
-    BeanBindableInfo model = null;
-    String source = attributes.get("source");
-    //
-    if (source != null) {
-      String sourceReference = StringUtils.substringBetween(source, "{StaticResource", "}").trim();
-      model = (BeanBindableInfo) m_beanContainer.resolve(sourceReference);
-    } else {
-      model = m_beanContainer.getDataContext();
-    }
-    //
-    if (model == null) {
-      m_provider.addWarning(Messages.DatabindingParser_beanNotFound, new Throwable());
-      return null;
-    }
-    //
-    PropertyBindableInfo modelProperty =
-        model.resolvePropertyReference("\"" + path.toLowerCase() + "\"");
-    if (modelProperty == null) {
-      m_provider.addWarning(
-          MessageFormat.format(Messages.DatabindingParser_beanPropertyNotFound, path),
-          new Throwable());
-      return null;
-    }
-    //
-    if (property.equalsIgnoreCase("input")) {
-      // XXX
-      return null;
-    }
-    //
-    return createBinding(target, targetProperty, model, modelProperty, attributes);
-  }
+	private BindingInfo parseBinding(DocumentElement element,
+			String property,
+			Map<String, String> attributes) throws Exception {
+		WidgetBindableInfo target = m_widgetContainer.resolve(element);
+		if (target == null) {
+			m_provider.addWarning(
+					MessageFormat.format(Messages.DatabindingParser_widgetNotFound, element),
+					new Throwable());
+			return null;
+		}
+		//
+		WidgetPropertyBindableInfo targetProperty = target.resolvePropertyByText(property);
+		if (targetProperty == null) {
+			m_provider.addWarning(
+					MessageFormat.format(Messages.DatabindingParser_widgetPropertyNotFound, element, property),
+					new Throwable());
+			return null;
+		}
+		//
+		String path = attributes.get("path");
+		String elementName = attributes.get("elementname");
+		//
+		if (elementName != null) {
+			WidgetBindableInfo model = m_widgetContainer.resolve(elementName);
+			if (model == null) {
+				m_provider.addWarning(
+						MessageFormat.format(Messages.DatabindingParser_widgetNotFound, elementName),
+						new Throwable());
+				return null;
+			}
+			//
+			if (path.toLowerCase().startsWith("singleselection.(") && path.endsWith(")")) {
+				if (property.equalsIgnoreCase("input")) {
+					// XXX
+				}
+				// XXX
+				return null;
+			}
+			//
+			WidgetPropertyBindableInfo modelProperty = model.resolvePropertyByText(path.toLowerCase());
+			if (modelProperty == null) {
+				m_provider.addWarning(
+						MessageFormat.format(Messages.DatabindingParser_widgetPropertyNotFound, element, path),
+						new Throwable());
+				return null;
+			}
+			//
+			return createBinding(target, targetProperty, model, modelProperty, attributes);
+		}
+		//
+		BeanBindableInfo model = null;
+		String source = attributes.get("source");
+		//
+		if (source != null) {
+			String sourceReference = StringUtils.substringBetween(source, "{StaticResource", "}").trim();
+			model = (BeanBindableInfo) m_beanContainer.resolve(sourceReference);
+		} else {
+			model = m_beanContainer.getDataContext();
+		}
+		//
+		if (model == null) {
+			m_provider.addWarning(Messages.DatabindingParser_beanNotFound, new Throwable());
+			return null;
+		}
+		//
+		PropertyBindableInfo modelProperty =
+				model.resolvePropertyReference("\"" + path.toLowerCase() + "\"");
+		if (modelProperty == null) {
+			m_provider.addWarning(
+					MessageFormat.format(Messages.DatabindingParser_beanPropertyNotFound, path),
+					new Throwable());
+			return null;
+		}
+		//
+		if (property.equalsIgnoreCase("input")) {
+			// XXX
+			return null;
+		}
+		//
+		return createBinding(target, targetProperty, model, modelProperty, attributes);
+	}
 
-  private BindingInfo createBinding(BindableInfo target,
-      BindableInfo targetProperty,
-      BindableInfo model,
-      BindableInfo modelProperty,
-      Map<String, String> attributes) throws Exception {
-    BindingInfo binding = new BindingInfo(target, targetProperty, model, modelProperty);
-    binding.setMode(attributes.get("mode"));
-    binding.setTrigger(attributes.get("updatesourcetrigger"));
-    m_provider.getBindings0().add(binding);
-    return binding;
-  }
+	private BindingInfo createBinding(BindableInfo target,
+			BindableInfo targetProperty,
+			BindableInfo model,
+			BindableInfo modelProperty,
+			Map<String, String> attributes) throws Exception {
+		BindingInfo binding = new BindingInfo(target, targetProperty, model, modelProperty);
+		binding.setMode(attributes.get("mode"));
+		binding.setTrigger(attributes.get("updatesourcetrigger"));
+		m_provider.getBindings0().add(binding);
+		return binding;
+	}
 
-  private static Map<String, String> getAttributes(DocumentElement element) {
-    Map<String, String> attributes = Maps.newHashMap();
-    for (DocumentAttribute attribute : element.getDocumentAttributes()) {
-      attributes.put(attribute.getName().toLowerCase(), attribute.getValue());
-    }
-    return attributes;
-  }
+	private static Map<String, String> getAttributes(DocumentElement element) {
+		Map<String, String> attributes = Maps.newHashMap();
+		for (DocumentAttribute attribute : element.getDocumentAttributes()) {
+			attributes.put(attribute.getName().toLowerCase(), attribute.getValue());
+		}
+		return attributes;
+	}
 
-  private static Map<String, String> getAttributes(String value) {
-    Map<String, String> attributes = Maps.newHashMap();
-    for (String pair : splitAttributePairs(value, " \t,")) {
-      String[] values = StringUtils.split(pair, '=');
-      if (values.length == 2) {
-        attributes.put(values[0].toLowerCase(), values[1]);
-      }
-    }
-    return attributes;
-  }
+	private static Map<String, String> getAttributes(String value) {
+		Map<String, String> attributes = Maps.newHashMap();
+		for (String pair : splitAttributePairs(value, " \t,")) {
+			String[] values = StringUtils.split(pair, '=');
+			if (values.length == 2) {
+				attributes.put(values[0].toLowerCase(), values[1]);
+			}
+		}
+		return attributes;
+	}
 
-  private static List<String> splitAttributePairs(String str, String separatorChars) {
-    // StringUtils.split(str, separatorChars)
-    List<String> attributePairs = Lists.newArrayList();
-    int lastSeparatorPosition = 0;
-    int innerCounter = 0;
-    for (int i = 0; i < str.length(); i++) {
-      char curChar = str.charAt(i);
-      if (curChar == '{') {
-        innerCounter++;
-      } else if (curChar == '}') {
-        --innerCounter;
-      } else if (innerCounter == 0) {
-        if (separatorChars.indexOf(curChar) >= 0) {
-          String substring = str.substring(lastSeparatorPosition, i).trim();
-          if (!StringUtils.isEmpty(substring)) {
-            attributePairs.add(substring);
-          }
-          lastSeparatorPosition = i + 1;
-        }
-      }
-    }
-    if (lastSeparatorPosition < str.length()) {
-      String substring = str.substring(lastSeparatorPosition).trim();
-      if (!StringUtils.isEmpty(substring)) {
-        attributePairs.add(substring);
-      }
-    }
-    return attributePairs;
-  }
+	private static List<String> splitAttributePairs(String str, String separatorChars) {
+		// StringUtils.split(str, separatorChars)
+		List<String> attributePairs = Lists.newArrayList();
+		int lastSeparatorPosition = 0;
+		int innerCounter = 0;
+		for (int i = 0; i < str.length(); i++) {
+			char curChar = str.charAt(i);
+			if (curChar == '{') {
+				innerCounter++;
+			} else if (curChar == '}') {
+				--innerCounter;
+			} else if (innerCounter == 0) {
+				if (separatorChars.indexOf(curChar) >= 0) {
+					String substring = str.substring(lastSeparatorPosition, i).trim();
+					if (!StringUtils.isEmpty(substring)) {
+						attributePairs.add(substring);
+					}
+					lastSeparatorPosition = i + 1;
+				}
+			}
+		}
+		if (lastSeparatorPosition < str.length()) {
+			String substring = str.substring(lastSeparatorPosition).trim();
+			if (!StringUtils.isEmpty(substring)) {
+				attributePairs.add(substring);
+			}
+		}
+		return attributePairs;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/ui/contentproviders/ConverterUiContentProvider.java b/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/ui/contentproviders/ConverterUiContentProvider.java
index 13ea8a4c1..17a170fa8 100644
--- a/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/ui/contentproviders/ConverterUiContentProvider.java
+++ b/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/ui/contentproviders/ConverterUiContentProvider.java
@@ -27,58 +27,58 @@
  *
  */
 public class ConverterUiContentProvider extends ChooseClassUiContentProvider {
-  private final DatabindingsProvider m_provider;
-  private final ConverterInfo m_converter;
+	private final DatabindingsProvider m_provider;
+	private final ConverterInfo m_converter;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ConverterUiContentProvider(DatabindingsProvider provider,
-      ChooseClassConfiguration configuration,
-      ConverterInfo converter) {
-    super(configuration);
-    m_provider = provider;
-    m_converter = converter;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ConverterUiContentProvider(DatabindingsProvider provider,
+			ChooseClassConfiguration configuration,
+			ConverterInfo converter) {
+		super(configuration);
+		m_provider = provider;
+		m_converter = converter;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  //
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Class<?> loadClass(String className) throws ClassNotFoundException {
-    return CoreUtils.load(m_provider.getXmlObjectRoot().getContext().getClassLoader(), className);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	//
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Class<?> loadClass(String className) throws ClassNotFoundException {
+		return CoreUtils.load(m_provider.getXmlObjectRoot().getContext().getClassLoader(), className);
+	}
 
-  @Override
-  protected IJavaProject getJavaProject() {
-    return m_provider.getXmlObjectRoot().getContext().getJavaProject();
-  }
+	@Override
+	protected IJavaProject getJavaProject() {
+		return m_provider.getXmlObjectRoot().getContext().getJavaProject();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Update
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void updateFromObject() throws Exception {
-    setClassName(StringUtils.defaultString(m_converter.getValue(), "N/S"));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Update
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void updateFromObject() throws Exception {
+		setClassName(StringUtils.defaultString(m_converter.getValue(), "N/S"));
+	}
 
-  @Override
-  public void saveToObject() throws Exception {
-    String className = getClassName();
-    // check set or clear value
-    if ("N/S".equals(className)) {
-      m_converter.setValue(null, false);
-    } else {
-      String[] defaultValues = getConfiguration().getDefaultValues();
-      boolean staticResurce =
-          defaultValues == null ? false : ArrayUtils.contains(defaultValues, className);
-      m_converter.setValue(className, staticResurce);
-    }
-  }
+	@Override
+	public void saveToObject() throws Exception {
+		String className = getClassName();
+		// check set or clear value
+		if ("N/S".equals(className)) {
+			m_converter.setValue(null, false);
+		} else {
+			String[] defaultValues = getConfiguration().getDefaultValues();
+			boolean staticResurce =
+					defaultValues == null ? false : ArrayUtils.contains(defaultValues, className);
+			m_converter.setValue(className, staticResurce);
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/ui/contentproviders/ModeContentProvider.java b/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/ui/contentproviders/ModeContentProvider.java
index 284614819..a53d15237 100644
--- a/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/ui/contentproviders/ModeContentProvider.java
+++ b/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/ui/contentproviders/ModeContentProvider.java
@@ -24,43 +24,43 @@
  *
  */
 public class ModeContentProvider extends DialogFieldUiContentProvider {
-  private final ComboDialogField m_dialogField;
-  private final BindingInfo m_binding;
+	private final ComboDialogField m_dialogField;
+	private final BindingInfo m_binding;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ModeContentProvider(BindingInfo binding) {
-    m_binding = binding;
-    m_dialogField = new ComboDialogField(SWT.BORDER | SWT.READ_ONLY);
-    m_dialogField.setLabelText(Messages.ModeContentProvider_title);
-    m_dialogField.setItems(BindingInfo.MODES);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ModeContentProvider(BindingInfo binding) {
+		m_binding = binding;
+		m_dialogField = new ComboDialogField(SWT.BORDER | SWT.READ_ONLY);
+		m_dialogField.setLabelText(Messages.ModeContentProvider_title);
+		m_dialogField.setItems(BindingInfo.MODES);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AbstractUIContentProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public DialogField getDialogField() {
-    return m_dialogField;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AbstractUIContentProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public DialogField getDialogField() {
+		return m_dialogField;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Update
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void updateFromObject() throws Exception {
-    m_dialogField.selectItem(m_binding.getMode());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Update
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void updateFromObject() throws Exception {
+		m_dialogField.selectItem(m_binding.getMode());
+	}
 
-  @Override
-  public void saveToObject() throws Exception {
-    m_binding.setMode(m_dialogField.getSelectionIndex());
-  }
+	@Override
+	public void saveToObject() throws Exception {
+		m_binding.setMode(m_dialogField.getSelectionIndex());
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/ui/contentproviders/TriggerContentProvider.java b/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/ui/contentproviders/TriggerContentProvider.java
index b0c809cc4..d80c5a0ee 100644
--- a/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/ui/contentproviders/TriggerContentProvider.java
+++ b/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/ui/contentproviders/TriggerContentProvider.java
@@ -24,43 +24,43 @@
  *
  */
 public class TriggerContentProvider extends DialogFieldUiContentProvider {
-  private final ComboDialogField m_dialogField;
-  private final BindingInfo m_binding;
+	private final ComboDialogField m_dialogField;
+	private final BindingInfo m_binding;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public TriggerContentProvider(BindingInfo binding) {
-    m_binding = binding;
-    m_dialogField = new ComboDialogField(SWT.BORDER | SWT.READ_ONLY);
-    m_dialogField.setLabelText(Messages.TriggerContentProvider_title);
-    m_dialogField.setItems(BindingInfo.TRIGGERS);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public TriggerContentProvider(BindingInfo binding) {
+		m_binding = binding;
+		m_dialogField = new ComboDialogField(SWT.BORDER | SWT.READ_ONLY);
+		m_dialogField.setLabelText(Messages.TriggerContentProvider_title);
+		m_dialogField.setItems(BindingInfo.TRIGGERS);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AbstractUIContentProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public DialogField getDialogField() {
-    return m_dialogField;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AbstractUIContentProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public DialogField getDialogField() {
+		return m_dialogField;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Update
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void updateFromObject() throws Exception {
-    m_dialogField.selectItem(m_binding.getTriger());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Update
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void updateFromObject() throws Exception {
+		m_dialogField.selectItem(m_binding.getTriger());
+	}
 
-  @Override
-  public void saveToObject() throws Exception {
-    m_binding.setTrigger(m_dialogField.getSelectionIndex());
-  }
+	@Override
+	public void saveToObject() throws Exception {
+		m_binding.setTrigger(m_dialogField.getSelectionIndex());
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/ui/contentproviders/ValidationUiContentProvider.java b/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/ui/contentproviders/ValidationUiContentProvider.java
index 5dc29cbbd..67a48771d 100644
--- a/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/ui/contentproviders/ValidationUiContentProvider.java
+++ b/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/ui/contentproviders/ValidationUiContentProvider.java
@@ -44,234 +44,234 @@
  *
  */
 public class ValidationUiContentProvider extends DialogFieldUiContentProvider {
-  private static final Image CLASS_IMAGE = Activator.getImage("class_obj.gif");
-  private static final Image ERROR_IMAGE = Activator.getImage("error_obj.gif");
-  //
-  private final ListDialogField m_dialogField;
-  //
-  private final DatabindingsProvider m_provider;
-  private final ValidationInfo m_validator;
+	private static final Image CLASS_IMAGE = Activator.getImage("class_obj.gif");
+	private static final Image ERROR_IMAGE = Activator.getImage("error_obj.gif");
+	//
+	private final ListDialogField m_dialogField;
+	//
+	private final DatabindingsProvider m_provider;
+	private final ValidationInfo m_validator;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ValidationUiContentProvider(DatabindingsProvider provider, ValidationInfo validator) {
-    m_provider = provider;
-    m_validator = validator;
-    m_dialogField =
-        new ListDialogField(m_listAdapter, new String[]{
-            Messages.ValidationUiContentProvider_addButton,
-            Messages.ValidationUiContentProvider_removeButton}, new LabelProvider());
-    m_dialogField.setRemoveButtonIndex(1);
-    m_dialogField.setLabelText(Messages.ValidationUiContentProvider_title);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ValidationUiContentProvider(DatabindingsProvider provider, ValidationInfo validator) {
+		m_provider = provider;
+		m_validator = validator;
+		m_dialogField =
+				new ListDialogField(m_listAdapter, new String[]{
+						Messages.ValidationUiContentProvider_addButton,
+						Messages.ValidationUiContentProvider_removeButton}, new LabelProvider());
+		m_dialogField.setRemoveButtonIndex(1);
+		m_dialogField.setLabelText(Messages.ValidationUiContentProvider_title);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  //
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public DialogField getDialogField() {
-    return m_dialogField;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	//
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public DialogField getDialogField() {
+		return m_dialogField;
+	}
 
-  @Override
-  public void createContent(Composite parent, int columns) {
-    super.createContent(parent, columns);
-    GridData data = (GridData) m_dialogField.getListControl(null).getLayoutData();
-    data.verticalAlignment = GridData.BEGINNING;
-    data.grabExcessVerticalSpace = false;
-  }
+	@Override
+	public void createContent(Composite parent, int columns) {
+		super.createContent(parent, columns);
+		GridData data = (GridData) m_dialogField.getListControl(null).getLayoutData();
+		data.verticalAlignment = GridData.BEGINNING;
+		data.grabExcessVerticalSpace = false;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  //
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final IListAdapter m_listAdapter = new IListAdapter() {
-    @Override
-    public void selectionChanged(ListDialogField field) {
-    }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	//
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final IListAdapter m_listAdapter = new IListAdapter() {
+		@Override
+		public void selectionChanged(ListDialogField field) {
+		}
 
-    @Override
-    public void doubleClicked(ListDialogField field) {
-    }
+		@Override
+		public void doubleClicked(ListDialogField field) {
+		}
 
-    @Override
-    public void customButtonPressed(ListDialogField field, int index) {
-      if (index == 0) {
-        handleAdd();
-      }
-    }
-  };
-  private final IDialogFieldListener m_changeListener = new IDialogFieldListener() {
-    @Override
-    public void dialogFieldChanged(DialogField field) {
-      calculateFinish();
-    }
-  };
+		@Override
+		public void customButtonPressed(ListDialogField field, int index) {
+			if (index == 0) {
+				handleAdd();
+			}
+		}
+	};
+	private final IDialogFieldListener m_changeListener = new IDialogFieldListener() {
+		@Override
+		public void dialogFieldChanged(DialogField field) {
+			calculateFinish();
+		}
+	};
 
-  private void handleAdd() {
-    try {
-      String className =
-          UiUtils.chooseType(
-              getShell(),
-              getJavaProject(),
-              "org.eclipse.e4.xwt.IValidationRule",
-              IJavaElementSearchConstants.CONSIDER_CLASSES);
-      if (className != null) {
-        m_dialogField.setDialogFieldListener(null);
-        //
-        int size = m_dialogField.getSize();
-        for (int i = 0; i < size; i++) {
-          ClassInfo info = (ClassInfo) m_dialogField.getElement(i);
-          if (className.equals(info.className)) {
-            m_dialogField.selectElements(new StructuredSelection(info));
-            return;
-          }
-        }
-        //
-        ClassInfo info = createInfo(className);
-        m_dialogField.addElement(info);
-        m_dialogField.selectElements(new StructuredSelection(info));
-      }
-    } catch (Throwable e) {
-      DesignerPlugin.log(e);
-    } finally {
-      m_dialogField.setDialogFieldListener(m_changeListener);
-    }
-  }
+	private void handleAdd() {
+		try {
+			String className =
+					UiUtils.chooseType(
+							getShell(),
+							getJavaProject(),
+							"org.eclipse.e4.xwt.IValidationRule",
+							IJavaElementSearchConstants.CONSIDER_CLASSES);
+			if (className != null) {
+				m_dialogField.setDialogFieldListener(null);
+				//
+				int size = m_dialogField.getSize();
+				for (int i = 0; i < size; i++) {
+					ClassInfo info = (ClassInfo) m_dialogField.getElement(i);
+					if (className.equals(info.className)) {
+						m_dialogField.selectElements(new StructuredSelection(info));
+						return;
+					}
+				}
+				//
+				ClassInfo info = createInfo(className);
+				m_dialogField.addElement(info);
+				m_dialogField.selectElements(new StructuredSelection(info));
+			}
+		} catch (Throwable e) {
+			DesignerPlugin.log(e);
+		} finally {
+			m_dialogField.setDialogFieldListener(m_changeListener);
+		}
+	}
 
-  private ClassInfo createInfo(String className) {
-    ClassInfo info = new ClassInfo();
-    info.className = className;
-    //
-    if (className.length() == 0) {
-      info.message = Messages.ValidationUiContentProvider_noClass;
-    } else {
-      if (className.startsWith("{") && className.endsWith("}")) {
-        return info;
-      }
-      //
-      try {
-        // check load class
-        Class<?> testClass = loadClass(className);
-        // check permissions
-        int modifiers = testClass.getModifiers();
-        if (!Modifier.isPublic(modifiers)) {
-          info.message = Messages.ValidationUiContentProvider_notPublicClass;
-          return info;
-        }
-        if (Modifier.isAbstract(modifiers)) {
-          info.message = Messages.ValidationUiContentProvider_abstractClass;
-          return info;
-        }
-        // check constructor
-        boolean noConstructor = true;
-        try {
-          testClass.getConstructor(ArrayUtils.EMPTY_CLASS_ARRAY);
-          noConstructor = false;
-        } catch (SecurityException e) {
-        } catch (NoSuchMethodException e) {
-        }
-        // prepare error message for constructor
-        if (noConstructor) {
-          info.message =
-              Messages.ValidationUiContentProvider_noPublicConstructor
-                  + ClassUtils.getShortClassName(className)
-                  + "().";
-        }
-      } catch (ClassNotFoundException e) {
-        info.message = Messages.ValidationUiContentProvider_notExistClass;
-      }
-    }
-    return info;
-  }
+	private ClassInfo createInfo(String className) {
+		ClassInfo info = new ClassInfo();
+		info.className = className;
+		//
+		if (className.length() == 0) {
+			info.message = Messages.ValidationUiContentProvider_noClass;
+		} else {
+			if (className.startsWith("{") && className.endsWith("}")) {
+				return info;
+			}
+			//
+			try {
+				// check load class
+				Class<?> testClass = loadClass(className);
+				// check permissions
+				int modifiers = testClass.getModifiers();
+				if (!Modifier.isPublic(modifiers)) {
+					info.message = Messages.ValidationUiContentProvider_notPublicClass;
+					return info;
+				}
+				if (Modifier.isAbstract(modifiers)) {
+					info.message = Messages.ValidationUiContentProvider_abstractClass;
+					return info;
+				}
+				// check constructor
+				boolean noConstructor = true;
+				try {
+					testClass.getConstructor(ArrayUtils.EMPTY_CLASS_ARRAY);
+					noConstructor = false;
+				} catch (SecurityException e) {
+				} catch (NoSuchMethodException e) {
+				}
+				// prepare error message for constructor
+				if (noConstructor) {
+					info.message =
+							Messages.ValidationUiContentProvider_noPublicConstructor
+							+ ClassUtils.getShortClassName(className)
+							+ "().";
+				}
+			} catch (ClassNotFoundException e) {
+				info.message = Messages.ValidationUiContentProvider_notExistClass;
+			}
+		}
+		return info;
+	}
 
-  private void calculateFinish() {
-    int size = m_dialogField.getSize();
-    for (int i = 0; i < size; i++) {
-      ClassInfo info = (ClassInfo) m_dialogField.getElement(i);
-      if (info.message != null) {
-        setErrorMessage(info.message);
-        return;
-      }
-    }
-    setErrorMessage(null);
-  }
+	private void calculateFinish() {
+		int size = m_dialogField.getSize();
+		for (int i = 0; i < size; i++) {
+			ClassInfo info = (ClassInfo) m_dialogField.getElement(i);
+			if (info.message != null) {
+				setErrorMessage(info.message);
+				return;
+			}
+		}
+		setErrorMessage(null);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  //
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void updateFromObject() throws Exception {
-    List<ClassInfo> infos = Lists.newArrayList();
-    for (String className : m_validator.getClassNames()) {
-      infos.add(createInfo(className));
-    }
-    //
-    m_dialogField.setElements(infos);
-    m_dialogField.setDialogFieldListener(m_changeListener);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	//
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void updateFromObject() throws Exception {
+		List<ClassInfo> infos = Lists.newArrayList();
+		for (String className : m_validator.getClassNames()) {
+			infos.add(createInfo(className));
+		}
+		//
+		m_dialogField.setElements(infos);
+		m_dialogField.setDialogFieldListener(m_changeListener);
+	}
 
-  @Override
-  public void saveToObject() throws Exception {
-    List<String> classNames = Lists.newArrayList();
-    //
-    int size = m_dialogField.getSize();
-    for (int i = 0; i < size; i++) {
-      ClassInfo info = (ClassInfo) m_dialogField.getElement(i);
-      classNames.add(info.className);
-    }
-    //
-    m_validator.setClassNames(classNames);
-  }
+	@Override
+	public void saveToObject() throws Exception {
+		List<String> classNames = Lists.newArrayList();
+		//
+		int size = m_dialogField.getSize();
+		for (int i = 0; i < size; i++) {
+			ClassInfo info = (ClassInfo) m_dialogField.getElement(i);
+			classNames.add(info.className);
+		}
+		//
+		m_validator.setClassNames(classNames);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  //
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Class<?> loadClass(String className) throws ClassNotFoundException {
-    return CoreUtils.load(m_provider.getXmlObjectRoot().getContext().getClassLoader(), className);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	//
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Class<?> loadClass(String className) throws ClassNotFoundException {
+		return CoreUtils.load(m_provider.getXmlObjectRoot().getContext().getClassLoader(), className);
+	}
 
-  @Override
-  protected IJavaProject getJavaProject() {
-    return m_provider.getXmlObjectRoot().getContext().getJavaProject();
-  }
+	@Override
+	protected IJavaProject getJavaProject() {
+		return m_provider.getXmlObjectRoot().getContext().getJavaProject();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  //
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static class ClassInfo {
-    String message;
-    String className;
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  //
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static class LabelProvider extends org.eclipse.jface.viewers.LabelProvider {
-    @Override
-    public Image getImage(Object element) {
-      ClassInfo info = (ClassInfo) element;
-      return info.message == null ? CLASS_IMAGE : ERROR_IMAGE;
-    }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	//
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static class ClassInfo {
+		String message;
+		String className;
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	//
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static class LabelProvider extends org.eclipse.jface.viewers.LabelProvider {
+		@Override
+		public Image getImage(Object element) {
+			ClassInfo info = (ClassInfo) element;
+			return info.message == null ? CLASS_IMAGE : ERROR_IMAGE;
+		}
 
-    @Override
-    public String getText(Object element) {
-      ClassInfo info = (ClassInfo) element;
-      return info.className;
-    }
-  }
+		@Override
+		public String getText(Object element) {
+			ClassInfo info = (ClassInfo) element;
+			return info.className;
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/ui/property/BindingProperty.java b/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/ui/property/BindingProperty.java
index cac71ced8..e78a4c6d0 100644
--- a/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/ui/property/BindingProperty.java
+++ b/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/ui/property/BindingProperty.java
@@ -21,23 +21,23 @@
  * @coverage bindings.xwt.ui.properties
  */
 public class BindingProperty extends AbstractBindingProperty {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public BindingProperty(Context context) {
-    super(context);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public BindingProperty(Context context) {
+		super(context);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AbstractBindingProperty
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getText() throws Exception {
-    int column = m_isTarget ? 2 : 1;
-    return BindingLabelProvider.INSTANCE.getColumnText(m_binding, column);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AbstractBindingProperty
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getText() throws Exception {
+		int column = m_isTarget ? 2 : 1;
+		return BindingLabelProvider.INSTANCE.getColumnText(m_binding, column);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/ui/property/BindingsProperty.java b/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/ui/property/BindingsProperty.java
index ea7cdeb81..b425f9177 100644
--- a/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/ui/property/BindingsProperty.java
+++ b/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/ui/property/BindingsProperty.java
@@ -35,59 +35,59 @@
  *
  */
 public class BindingsProperty extends AbstractBindingsProperty {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public BindingsProperty(Context context) {
-    super(context);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public BindingsProperty(Context context) {
+		super(context);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  //
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Property[] createProperties() throws Exception {
-    DatabindingsProvider provider = (DatabindingsProvider) m_context.provider;
-    WidgetsObserveTypeContainer container =
-        (WidgetsObserveTypeContainer) provider.getContainer(ObserveType.WIDGETS);
-    m_context.observeObject = container.resolve((XmlObjectInfo) m_context.objectInfo);
-    //
-    Assert.isNotNull(
-        m_context.observeObject,
-        MessageFormat.format(
-            Messages.BindingsProperty_syncDoesNotWork,
-            SynchronizeManager.class.getName(),
-            m_context.objectInfo));
-    List<IObserveInfo> observes =
-        m_context.observeObject.getChildren(ChildrenContext.ChildrenForPropertiesTable);
-    //
-    Property[] properties = new Property[observes.size()];
-    for (int i = 0; i < properties.length; i++) {
-      properties[i] = new ObserveProperty(m_context, observes.get(i));
-    }
-    return properties;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	//
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Property[] createProperties() throws Exception {
+		DatabindingsProvider provider = (DatabindingsProvider) m_context.provider;
+		WidgetsObserveTypeContainer container =
+				(WidgetsObserveTypeContainer) provider.getContainer(ObserveType.WIDGETS);
+		m_context.observeObject = container.resolve((XmlObjectInfo) m_context.objectInfo);
+		//
+		Assert.isNotNull(
+				m_context.observeObject,
+				MessageFormat.format(
+						Messages.BindingsProperty_syncDoesNotWork,
+						SynchronizeManager.class.getName(),
+						m_context.objectInfo));
+		List<IObserveInfo> observes =
+				m_context.observeObject.getChildren(ChildrenContext.ChildrenForPropertiesTable);
+		//
+		Property[] properties = new Property[observes.size()];
+		for (int i = 0; i < properties.length; i++) {
+			properties[i] = new ObserveProperty(m_context, observes.get(i));
+		}
+		return properties;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  //
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void addBindingAction(IMenuManager menu,
-      IBindingInfo binding,
-      IObserveInfo observeProperty,
-      boolean isTarget) throws Exception {
-    // TODO Auto-generated method stub
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	//
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void addBindingAction(IMenuManager menu,
+			IBindingInfo binding,
+			IObserveInfo observeProperty,
+			boolean isTarget) throws Exception {
+		// TODO Auto-generated method stub
+	}
 
-  @Override
-  protected boolean checkEquals(IObserveInfo observe) throws Exception {
-    // TODO Auto-generated method stub
-    return false;
-  }
+	@Override
+	protected boolean checkEquals(IObserveInfo observe) throws Exception {
+		// TODO Auto-generated method stub
+		return false;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/ui/property/ObserveProperty.java b/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/ui/property/ObserveProperty.java
index 1830ffbac..97a932178 100644
--- a/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/ui/property/ObserveProperty.java
+++ b/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/ui/property/ObserveProperty.java
@@ -21,24 +21,24 @@
  * @coverage bindings.xwt.ui.properties
  */
 public class ObserveProperty
-    extends
-      org.eclipse.wb.internal.rcp.databinding.ui.property.ObserveProperty {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ObserveProperty(Context context, IObserveInfo observeProperty) throws Exception {
-    super(context, observeProperty);
-  }
+extends
+org.eclipse.wb.internal.rcp.databinding.ui.property.ObserveProperty {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ObserveProperty(Context context, IObserveInfo observeProperty) throws Exception {
+		super(context, observeProperty);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AbstractObserveProperty
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public AbstractBindingProperty createBindingProperty() throws Exception {
-    return new BindingProperty(m_context);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AbstractObserveProperty
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public AbstractBindingProperty createBindingProperty() throws Exception {
+		return new BindingProperty(m_context);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/ui/property/XmlObjectPropertiesManager.java b/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/ui/property/XmlObjectPropertiesManager.java
index e3a66f4b0..f72cb7f43 100644
--- a/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/ui/property/XmlObjectPropertiesManager.java
+++ b/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/ui/property/XmlObjectPropertiesManager.java
@@ -27,33 +27,33 @@
  *
  */
 public class XmlObjectPropertiesManager extends AbstracXmlObjectPropertiesManager {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public XmlObjectPropertiesManager(DatabindingsProvider provider) {
-    super(provider, provider.getXmlObjectRoot());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public XmlObjectPropertiesManager(DatabindingsProvider provider) {
+		super(provider, provider.getXmlObjectRoot());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AbstractJavaInfoPropertiesManager
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected boolean isCreateProperty(ObjectInfo objectInfo) throws Exception {
-    // temporary disabled bindings property for Layout_Info, LayoutData_Info & etc.
-    // FIXME if (objectInfo instanceof XMLObject_Info) {
-    if (objectInfo instanceof AbstractComponentInfo || objectInfo instanceof ViewerInfo) {
-      XmlObjectInfo xmlObjectInfo = (XmlObjectInfo) objectInfo;
-      return !XmlObjectUtils.hasTrueParameter(xmlObjectInfo, "databinding.disable");
-    }
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AbstractJavaInfoPropertiesManager
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected boolean isCreateProperty(ObjectInfo objectInfo) throws Exception {
+		// temporary disabled bindings property for Layout_Info, LayoutData_Info & etc.
+		// FIXME if (objectInfo instanceof XMLObject_Info) {
+		if (objectInfo instanceof AbstractComponentInfo || objectInfo instanceof ViewerInfo) {
+			XmlObjectInfo xmlObjectInfo = (XmlObjectInfo) objectInfo;
+			return !XmlObjectUtils.hasTrueParameter(xmlObjectInfo, "databinding.disable");
+		}
+		return false;
+	}
 
-  @Override
-  protected AbstractBindingsProperty createProperty(ObjectInfo objectInfo) throws Exception {
-    return new BindingsProperty(new Context(Activator.getDefault(), m_provider, objectInfo));
-  }
+	@Override
+	protected AbstractBindingsProperty createProperty(ObjectInfo objectInfo) throws Exception {
+		return new BindingsProperty(new Context(Activator.getDefault(), m_provider, objectInfo));
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/ui/providers/BindingLabelProvider.java b/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/ui/providers/BindingLabelProvider.java
index acc2bd179..f21f0c6c9 100644
--- a/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/ui/providers/BindingLabelProvider.java
+++ b/org.eclipse.wb.rcp.databinding.xwt/src/org/eclipse/wb/internal/rcp/databinding/xwt/ui/providers/BindingLabelProvider.java
@@ -25,57 +25,57 @@
  *
  */
 public class BindingLabelProvider extends LabelProvider implements ITableLabelProvider {
-  public static final BindingLabelProvider INSTANCE = new BindingLabelProvider();
+	public static final BindingLabelProvider INSTANCE = new BindingLabelProvider();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ITableLabelProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getColumnText(final Object element, final int column) {
-    return ExecutionUtils.runObjectLog(new RunnableObjectEx<String>() {
-      @Override
-      public String runObject() throws Exception {
-        BindingInfo binding = (BindingInfo) element;
-        switch (column) {
-          case 1 :
-            // target
-            return binding.getTargetPresentationText();
-          case 2 :
-            // model
-            return binding.getModelPresentationText();
-          case 3 :
-            // mode
-            return BindingInfo.MODES[binding.getMode()];
-          default :
-            return null;
-        }
-      }
-    }, "<exception, see log>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ITableLabelProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getColumnText(final Object element, final int column) {
+		return ExecutionUtils.runObjectLog(new RunnableObjectEx<String>() {
+			@Override
+			public String runObject() throws Exception {
+				BindingInfo binding = (BindingInfo) element;
+				switch (column) {
+				case 1 :
+					// target
+					return binding.getTargetPresentationText();
+				case 2 :
+					// model
+					return binding.getModelPresentationText();
+				case 3 :
+					// mode
+					return BindingInfo.MODES[binding.getMode()];
+				default :
+					return null;
+				}
+			}
+		}, "<exception, see log>");
+	}
 
-  @Override
-  public Image getColumnImage(Object element, int column) {
-    Image image = null;
-    if (column == 0) {
-      // binding
-      image =
-          org.eclipse.wb.internal.rcp.databinding.ui.providers.BindingLabelProvider.BIND_VALUE_IMAGE;
-      // delay
-      if (isDelayBinding(element)) {
-        image =
-            SwtResourceManager.decorateImage(
-                image,
-                org.eclipse.wb.internal.rcp.databinding.ui.providers.BindingLabelProvider.CLOCK_DECORATION_IMAGE,
-                SwtResourceManager.BOTTOM_RIGHT);
-      }
-    }
-    return image;
-  }
+	@Override
+	public Image getColumnImage(Object element, int column) {
+		Image image = null;
+		if (column == 0) {
+			// binding
+			image =
+					org.eclipse.wb.internal.rcp.databinding.ui.providers.BindingLabelProvider.BIND_VALUE_IMAGE;
+			// delay
+			if (isDelayBinding(element)) {
+				image =
+						SwtResourceManager.decorateImage(
+								image,
+								org.eclipse.wb.internal.rcp.databinding.ui.providers.BindingLabelProvider.CLOCK_DECORATION_IMAGE,
+								SwtResourceManager.BOTTOM_RIGHT);
+			}
+		}
+		return image;
+	}
 
-  private static boolean isDelayBinding(Object element) {
-    // XXX
-    return false;
-  }
+	private static boolean isDelayBinding(Object element) {
+		// XXX
+		return false;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/Activator.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/Activator.java
index ca313b527..854a8f6c8 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/Activator.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/Activator.java
@@ -27,68 +27,68 @@
  * @author lobas_av
  */
 public final class Activator extends AbstractUIPlugin {
-  public static final String PLUGIN_ID = "org.eclipse.wb.rcp.databinding";
-  private static Activator m_plugin;
+	public static final String PLUGIN_ID = "org.eclipse.wb.rcp.databinding";
+	private static Activator m_plugin;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Life cycle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void stop(BundleContext context) throws Exception {
-    m_plugin = null;
-    super.stop(context);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Life cycle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void stop(BundleContext context) throws Exception {
+		m_plugin = null;
+		super.stop(context);
+	}
 
-  @Override
-  public void start(BundleContext context) throws Exception {
-    super.start(context);
-    m_plugin = this;
-  }
+	@Override
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+		m_plugin = this;
+	}
 
-  public static Activator getDefault() {
-    return m_plugin;
-  }
+	public static Activator getDefault() {
+		return m_plugin;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Resources
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final BundleResourceProvider m_resourceProvider =
-      BundleResourceProvider.get(PLUGIN_ID);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Resources
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final BundleResourceProvider m_resourceProvider =
+			BundleResourceProvider.get(PLUGIN_ID);
 
-  /**
-   * @return the {@link InputStream} for file from plugin directory.
-   */
-  public static InputStream getFile(String path) {
-    return m_resourceProvider.getFile(path);
-  }
+	/**
+	 * @return the {@link InputStream} for file from plugin directory.
+	 */
+	public static InputStream getFile(String path) {
+		return m_resourceProvider.getFile(path);
+	}
 
-  /**
-   * @return the {@link Image} from "icons" directory, with caching.
-   */
-  public static Image getImage(String path) {
-    return m_resourceProvider.getImage("icons/" + path);
-  }
+	/**
+	 * @return the {@link Image} from "icons" directory, with caching.
+	 */
+	public static Image getImage(String path) {
+		return m_resourceProvider.getImage("icons/" + path);
+	}
 
-  /**
-   * @return the {@link ImageDescriptor} from "icons" directory.
-   */
-  public static ImageDescriptor getImageDescriptor(String path) {
-    return m_resourceProvider.getImageDescriptor("icons/" + path);
-  }
+	/**
+	 * @return the {@link ImageDescriptor} from "icons" directory.
+	 */
+	public static ImageDescriptor getImageDescriptor(String path) {
+		return m_resourceProvider.getImageDescriptor("icons/" + path);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Preferences
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Returns preference store for DB plugin.
-   */
-  public static IPreferenceStore getStore() {
-    return m_plugin.getPreferenceStore();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Preferences
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Returns preference store for DB plugin.
+	 */
+	public static IPreferenceStore getStore() {
+		return m_plugin.getPreferenceStore();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/DatabindingsProvider.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/DatabindingsProvider.java
index 7bf74b1a5..318116f65 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/DatabindingsProvider.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/DatabindingsProvider.java
@@ -86,786 +86,786 @@
  * @coverage bindings.rcp.model
  */
 public final class DatabindingsProvider implements IDatabindingsProvider {
-  private static List<PropertyFilter> m_filters;
-  private final JavaInfo m_javaInfoRoot;
-  private final List<ObserveTypeContainer> m_containers;
-  private final List<ObserveType> m_types = Lists.newArrayList();
-  private final Map<ObserveType, ObserveTypeContainer> m_typeToContainer = Maps.newHashMap();
-  private ObserveType m_targetStartType;
-  private ObserveType m_modelStartType;
-  private BindingDesignPage m_bindingPage;
-  private JavaInfoDeleteManager m_javaInfoDeleteManager;
-  private final DataBindingsRootInfo m_rootInfo = new DataBindingsRootInfo();
-  private TypeDeclaration m_rootNode;
-  private AstEditor m_astEditor;
-  private boolean m_controller;
-  private String m_controllerViewerField;
-  private boolean m_synchronizeObserves = true;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected DatabindingsProvider() {
-    m_javaInfoRoot = null;
-    m_containers = Lists.newArrayList();
-  }
-
-  public DatabindingsProvider(JavaInfo javaInfoRoot) throws Exception {
-    m_javaInfoRoot = javaInfoRoot;
-    // load containers
-    m_containers =
-        ExternalFactoriesHelper.getElementsInstances(
-            ObserveTypeContainer.class,
-            "org.eclipse.wb.rcp.databinding.observeTypeContainer",
-            "container");
-    // prepare containers
-    for (Iterator<ObserveTypeContainer> I = m_containers.iterator(); I.hasNext();) {
-      ObserveTypeContainer container = I.next();
-      if (container.accept(m_javaInfoRoot)) {
-        container.initialize(this);
-        ObserveType observeType = container.getObserveType();
-        m_types.add(observeType);
-        m_typeToContainer.put(observeType, container);
-        //
-        if (container.isTargetStartType()) {
-          m_targetStartType = observeType;
-        }
-        if (container.isModelStartType()) {
-          m_modelStartType = observeType;
-        }
-      } else {
-        I.remove();
-      }
-    }
-    //
-    m_rootNode = JavaInfoUtils.getTypeDeclaration(m_javaInfoRoot);
-    m_astEditor = m_javaInfoRoot.getEditor();
-    // find controller
-    if (m_rootNode != null) {
-      ControllerSupport.configure(this);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Internals
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static DatabindingsProvider cast(IDatabindingsProvider provider) {
-    return (DatabindingsProvider) provider;
-  }
-
-  public List<ObserveTypeContainer> getContainers() {
-    return m_containers;
-  }
-
-  public ObserveTypeContainer getContainer(ObserveType type) {
-    return m_typeToContainer.get(type);
-  }
-
-  public JavaInfo getJavaInfoRoot() {
-    return m_javaInfoRoot;
-  }
-
-  public DataBindingsRootInfo getRootInfo() {
-    return m_rootInfo;
-  }
-
-  public void hookJavaInfoEvents() throws Exception {
-    // update observes
-    new SynchronizeManager(this, m_javaInfoRoot);
-    // handle delete info's
-    m_javaInfoDeleteManager = new JavaInfoDeleteManager(this);
-    // decorate info's
-    new JavaInfoDecorator(this);
-    // properties
-    new JavaInfoPropertiesManager(this, m_javaInfoRoot);
-  }
-
-  public TypeDeclaration getRootNode() {
-    return m_rootNode;
-  }
-
-  public void setRootNode(TypeDeclaration rootNode) {
-    m_rootNode = rootNode;
-  }
-
-  public AstEditor getAstEditor() {
-    return m_astEditor;
-  }
-
-  public void setAstEditor(AstEditor astEditor) {
-    m_astEditor = astEditor;
-  }
-
-  public boolean isController() {
-    return m_controller;
-  }
-
-  public void setController(boolean controller) {
-    m_controller = controller;
-  }
-
-  public String getControllerViewerField() {
-    return m_controllerViewerField;
-  }
-
-  public void setControllerViewerField(String controllerViewerField) {
-    m_controllerViewerField = controllerViewerField;
-  }
-
-  public void setSynchronizeObserves(boolean synchronizeObserves) {
-    m_synchronizeObserves = synchronizeObserves;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Bindings
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void configureBindingViewer(IDialogSettings settings, TableViewer viewer) {
-    // prepare table
-    Table table = viewer.getTable();
-    // binding type image column
-    TableColumn bindingColumn = new TableColumn(table, SWT.NONE);
-    bindingColumn.setWidth(23);
-    bindingColumn.setResizable(false);
-    // target column
-    TableColumn targetColumn = UiUtils.createSmartColumn(table, settings, "TargetColumn", 250);
-    targetColumn.setText(Messages.DatabindingsProvider_targetColumn);
-    // model column
-    TableColumn modelColumn = UiUtils.createSmartColumn(table, settings, "ModelColumn", 250);
-    modelColumn.setText(Messages.DatabindingsProvider_modelColumn);
-    // target strategy column
-    TableColumn targetStrategyColumn =
-        UiUtils.createSmartColumn(table, settings, "TargetStrategyColumn", 170);
-    targetStrategyColumn.setText(Messages.DatabindingsProvider_targetStrategyColumn);
-    // model strategy column
-    TableColumn modelStrategyColumn =
-        UiUtils.createSmartColumn(table, settings, "ModelStrategyColumn", 170);
-    modelStrategyColumn.setText(Messages.DatabindingsProvider_modelStrategyColumn);
-    // binding variable column
-    TableColumn variableBindingColumn =
-        UiUtils.createSmartColumn(table, settings, "VariableBindingColumn", 250);
-    variableBindingColumn.setText(Messages.DatabindingsProvider_bindingColumn);
-    // label provider
-    viewer.setLabelProvider(new BindingLabelProvider());
-  }
-
-  public List<AbstractBindingInfo> getBindings0() {
-    return m_rootInfo.getContextInfo().getBindings();
-  }
-
-  @Override
-  public List<IBindingInfo> getBindings() {
-    return CoreUtils.cast(getBindings0());
-  }
-
-  @Override
-  public String getBindingPresentationText(final IBindingInfo binding) throws Exception {
-    return null;
-  }
-
-  @Override
-  public void gotoDefinition(IBindingInfo ibinding) {
-    try {
-      AbstractBindingInfo binding = (AbstractBindingInfo) ibinding;
-      String source = binding.getDefinitionSource(this);
-      //
-      if (source != null) {
-        int position = m_javaInfoRoot.getEditor().getEnclosingNode(source).getStartPosition();
-        IDesignPageSite site = IDesignPageSite.Helper.getSite(m_javaInfoRoot);
-        site.openSourcePosition(position);
-      }
-    } catch (Throwable e) {
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Types
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public List<ObserveType> getTypes() {
-    return m_types;
-  }
-
-  @Override
-  public ObserveType getTargetStartType() {
-    return m_targetStartType;
-  }
-
-  @Override
-  public ObserveType getModelStartType() {
-    return m_modelStartType;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Observes
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public IBaseLabelProvider createPropertiesViewerLabelProvider(TreeViewer viewer) {
-    return new ObserveDecoratingLabelProvider(viewer);
-  }
-
-  @Override
-  public List<PropertyFilter> getObservePropertyFilters() {
-    return observePropertyFilters();
-  }
-
-  public static List<PropertyFilter> observePropertyFilters() {
-    if (m_filters == null) {
-      m_filters = Lists.newArrayList();
-      // advanced
-      m_filters.add(new AdvancedPropertyFilter());
-      // any type
-      m_filters.add(new AllPropertiesFilter(Messages.DatabindingsProvider_filterAllTypes,
-          TypeImageProvider.OBJECT_IMAGE));
-      // String, byte, char
-      m_filters.add(new TypesPropertyFilter("String",
-          TypeImageProvider.STRING_IMAGE,
-          String.class,
-          byte.class,
-          char.class));
-      // boolean
-      m_filters.add(new TypesPropertyFilter("Boolean",
-          TypeImageProvider.BOOLEAN_IMAGE,
-          boolean.class,
-          Boolean.class));
-      // int, short, long, float, double
-      m_filters.add(new TypesPropertyFilter("Numbers",
-          TypeImageProvider.NUMBER_IMAGE,
-          int.class,
-          short.class,
-          long.class,
-          float.class,
-          double.class));
-      // SWT Color
-      m_filters.add(new TypesPropertyFilter("Color", TypeImageProvider.COLOR_IMAGE, Color.class));
-      // SWT Font
-      m_filters.add(new TypesPropertyFilter("Font", TypeImageProvider.FONT_IMAGE, Font.class));
-    }
-    return m_filters;
-  }
-
-  @Override
-  public List<IObserveInfo> getObserves(ObserveType type) {
-    ObserveTypeContainer container = m_typeToContainer.get(type);
-    return container == null ? Collections.<IObserveInfo>emptyList() : container.getObservables();
-  }
-
-  @Override
-  public void synchronizeObserves() throws Exception {
-    if (m_synchronizeObserves) {
-      for (ObserveTypeContainer container : m_containers) {
-        container.synchronizeObserves(m_javaInfoRoot, m_astEditor, m_rootNode);
-      }
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // UI editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public List<IUiContentProvider> getContentProviders(IBindingInfo ibinding, IPageListener listener)
-      throws Exception {
-    AbstractBindingInfo binding = (AbstractBindingInfo) ibinding;
-    List<IUiContentProvider> providers = Lists.newArrayList();
-    binding.createContentProviders(providers, listener, this);
-    return providers;
-  }
-
-  @Override
-  public void fillExternalBindingActions(ToolBar toolBar, Menu contextMenu) {
-    // TODO remove this code?
-    if ("".length() > 0 && !m_controller) {
-      SelectionListener listener = new SelectionAdapter() {
-        @Override
-        public void widgetSelected(SelectionEvent e) {
-          ControllerSupport.convertToController(
-              DatabindingsProvider.this,
-              m_javaInfoRoot,
-              m_astEditor,
-              m_rootNode);
-        }
-      };
-      // separator
-      new ToolItem(toolBar, SWT.SEPARATOR);
-      // convert to controller
-      ToolItem convertToControllerToolItem = new ToolItem(toolBar, SWT.NONE);
-      convertToControllerToolItem.setToolTipText(Messages.DatabindingsProvider_convertToController);
-      convertToControllerToolItem.setImage(Activator.getImage("newjprj_wiz.gif"));
-      convertToControllerToolItem.addSelectionListener(listener);
-      // separator
-      new MenuItem(contextMenu, SWT.SEPARATOR);
-      // convert to controller
-      MenuItem convertToControllerMenuItem = new MenuItem(contextMenu, SWT.NONE);
-      convertToControllerMenuItem.setText(Messages.DatabindingsProvider_convertToController);
-      convertToControllerMenuItem.setImage(Activator.getImage("newjprj_wiz.gif"));
-      convertToControllerMenuItem.addSelectionListener(listener);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Validate
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean validate(IObserveInfo target,
-      IObserveInfo targetProperty,
-      IObserveInfo model,
-      IObserveInfo modelProperty) throws Exception {
-    return doValidate(getBindings0(), target, targetProperty, model, modelProperty);
-  }
-
-  public static boolean doValidate(List<AbstractBindingInfo> bindings,
-      IObserveInfo target,
-      IObserveInfo targetProperty,
-      IObserveInfo model,
-      IObserveInfo modelProperty) throws Exception {
-    // ignore itself
-    if (target == model && targetProperty == modelProperty) {
-      return false;
-    }
-    // prepare binable's
-    BindableInfo targetBindable = (BindableInfo) target;
-    BindableInfo targetPropertyBindable = (BindableInfo) targetProperty;
-    IObservableFactory targetFactory = targetPropertyBindable.getObservableFactory();
-    BindableInfo modelBindable = (BindableInfo) model;
-    BindableInfo modelPropertyBindable = (BindableInfo) modelProperty;
-    IObservableFactory modelFactory = modelPropertyBindable.getObservableFactory();
-    // ignore null factories
-    if (targetFactory == null || modelFactory == null) {
-      return false;
-    }
-    //
-    Type targetType = targetFactory.getType();
-    Type modelType = modelFactory.getType();
-    //
-    if (targetType == Type.Input
-        || targetType == Type.InputCollection
-        || modelType == Type.Input
-        || modelType == Type.InputCollection) {
-      // ignore no collection type for input
-      if (targetType == modelType) {
-        return false;
-      }
-      if (targetType == Type.InputCollection) {
-        if (modelType != Type.Input) {
-          return false;
-        }
-      } else if (modelType == Type.InputCollection) {
-        if (targetType != Type.Input) {
-          return false;
-        }
-      } else if (targetType == Type.Input) {
-        if (!validateInput(modelType)) {
-          return false;
-        }
-      } else if (!validateInput(targetType)) {
-        return false;
-      }
-      if (targetType == Type.Input) {
-        if (findBinding(bindings, target, targetProperty)) {
-          return false;
-        }
-      } else if (findBinding(bindings, model, modelProperty)) {
-        return false;
-      }
-    } else if (targetType == modelType) {
-      if (modelType == Type.Detail) {
-        return false;
-      }
-    } else {
-      if (targetType == Type.OnlyList) {
-        if (!validateOnlyList(modelType)) {
-          return false;
-        }
-      } else if (modelType == Type.OnlyList) {
-        if (!validateOnlyList(targetType)) {
-          return false;
-        }
-      } else if (targetType == Type.OnlySet) {
-        if (!validateOnlySet(modelType)) {
-          return false;
-        }
-      } else if (modelType == Type.OnlySet) {
-        if (!validateOnlySet(targetType)) {
-          return false;
-        }
-      } else if (targetType == Type.OnlyValue) {
-        if (!validateOnlyValue(modelType)) {
-          return false;
-        }
-      } else if (modelType == Type.OnlyValue) {
-        if (!validateOnlyValue(targetType)) {
-          return false;
-        }
-      } else if (targetType == Type.List) {
-        if (!validateList(modelType)) {
-          return false;
-        }
-      } else if (modelType == Type.List) {
-        if (!validateList(targetType)) {
-          return false;
-        }
-      } else if (targetType == Type.Set) {
-        if (!validateSet(modelType)) {
-          return false;
-        }
-      } else if (modelType == Type.Set) {
-        if (!validateSet(targetType)) {
-          return false;
-        }
-      } else if (targetType == Type.Any) {
-        if (!validateAny(modelType)) {
-          return false;
-        }
-      } else if (modelType == Type.Any) {
-        if (!validateAny(targetType)) {
-          return false;
-        }
-      } else if (targetType == Type.Detail) {
-        if (!validateDetail(modelType)) {
-          return false;
-        }
-      } else if (modelType == Type.Detail) {
-        if (!validateDetail(targetType)) {
-          return false;
-        }
-      }
-    }
-    // Sub-properties not allowed for sets, lists, maps.
-    // see http://www.eclipse.org/forums/index.php/t/262915/
-    if (modelType == Type.List
-        || modelType == Type.OnlyList
-        || modelType == Type.Set
-        || modelType == Type.OnlySet) {
-      if (modelProperty.getParent() != null) {
-        return false;
-      }
-    }
-    // ignore itself
-    return !targetBindable.getReference().equals(modelBindable.getReference())
-        || !targetPropertyBindable.getReference().equals(modelPropertyBindable.getReference());
-  }
-
-  private static boolean findBinding(List<AbstractBindingInfo> bindings,
-      IObserveInfo object,
-      IObserveInfo property) {
-    for (AbstractBindingInfo binding : bindings) {
-      if (binding.getTarget() == object && binding.getTargetProperty() == property) {
-        return true;
-      }
-      if (binding.getModel() == object && binding.getModelProperty() == property) {
-        return true;
-      }
-    }
-    return false;
-  }
-
-  private static boolean validateInput(Type type) throws Exception {
-    return type == Type.InputCollection
-        || type == Type.OnlyList
-        || type == Type.OnlySet
-        || type == Type.List
-        || type == Type.Set
-        || type == Type.Detail;
-  }
-
-  private static boolean validateOnlyList(Type type) {
-    return type == Type.List || type == Type.Detail;
-  }
-
-  private static boolean validateOnlySet(Type type) {
-    return type == Type.Set || type == Type.Detail;
-  }
-
-  private static boolean validateOnlyValue(Type type) {
-    return type == Type.List || type == Type.Set || type == Type.Any || type == Type.Detail;
-  }
-
-  private static boolean validateList(Type type) {
-    return type == Type.OnlyList
-        || type == Type.OnlyValue
-        || type == Type.Any
-        || type == Type.Detail;
-  }
-
-  private static boolean validateSet(Type type) {
-    return type == Type.OnlySet
-        || type == Type.OnlyValue
-        || type == Type.Any
-        || type == Type.Detail;
-  }
-
-  private static boolean validateAny(Type type) {
-    return type == Type.OnlyValue || type == Type.List || type == Type.Set || type == Type.Detail;
-  }
-
-  private static boolean validateDetail(Type type) {
-    return type == Type.OnlyList
-        || type == Type.OnlySet
-        || type == Type.OnlyValue
-        || type == Type.List
-        || type == Type.Set
-        || type == Type.Any;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Creation/Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public IBindingInfo createBinding(IObserveInfo target,
-      IObserveInfo targetProperty,
-      IObserveInfo model,
-      IObserveInfo modelProperty) throws Exception {
-    // prepare target
-    BindableInfo targetBindable = (BindableInfo) target;
-    BindableInfo targetBindableProperty = (BindableInfo) targetProperty;
-    IObservableFactory targetFactory = targetBindableProperty.getObservableFactory();
-    // prepare model
-    BindableInfo modelBindable = (BindableInfo) model;
-    BindableInfo modelBindableProperty = (BindableInfo) modelProperty;
-    IObservableFactory modelFactory = modelBindableProperty.getObservableFactory();
-    //
-    // calculate type
-    Type type = calculateObserveType(targetFactory, modelFactory);
-    // handle input type
-    if (type == Type.Input) {
-      return AbstractViewerInputBindingInfo.createBinding(
-          targetBindable,
-          targetBindableProperty,
-          modelBindable,
-          modelBindableProperty,
-          this);
-    }
-    // create observable's
-    ObservableInfo targetObservable =
-        createObservable(targetFactory, targetBindable, targetBindableProperty, type);
-    ObservableInfo modelObservable =
-        createObservable(modelFactory, modelBindable, modelBindableProperty, type);
-    // create binding
-    switch (type) {
-      case OnlyValue :
-        return new ValueBindingInfo(targetObservable, modelObservable);
-      case OnlyList :
-        return new ListBindingInfo(targetObservable, modelObservable);
-      case OnlySet :
-        return new SetBindingInfo(targetObservable, modelObservable);
-    }
-    //
-    Assert.fail("");
-    return null;
-  }
-
-  public ObservableInfo createObservable(IObservableFactory factory,
-      BindableInfo bindable,
-      BindableInfo property,
-      Type type) throws Exception {
-    boolean version_1_3 =
-        Activator.getStore().getBoolean(IPreferenceConstants.GENERATE_CODE_FOR_VERSION_1_3);
-    ObservableInfo newObservable = factory.createObservable(bindable, property, type, version_1_3);
-    //
-    for (IBindingInfo ibinding : getBindings()) {
-      if (ibinding instanceof BindingInfo) {
-        BindingInfo binding = (BindingInfo) ibinding;
-        // check target
-        ObservableInfo targetObservable = binding.getTargetObservable();
-        if (targetObservable.canShared()
-            && binding.getTarget() == bindable
-            && binding.getTargetProperty() == property
-            && targetObservable.getClass() == newObservable.getClass()) {
-          return targetObservable;
-        }
-        // check model
-        ObservableInfo modelObservable = binding.getModelObservable();
-        if (modelObservable.canShared()
-            && binding.getModel() == bindable
-            && binding.getModelProperty() == property
-            && modelObservable.getClass() == newObservable.getClass()) {
-          return modelObservable;
-        }
-      } else {
-        AbstractViewerInputBindingInfo binding = (AbstractViewerInputBindingInfo) ibinding;
-        // check viewer input
-        ObservableInfo inputObservable = binding.getInputObservable();
-        if (inputObservable.canShared()
-            && binding.getModel() == bindable
-            && binding.getModelProperty() == property
-            && inputObservable.getClass() == newObservable.getClass()) {
-          return inputObservable;
-        }
-      }
-    }
-    return newObservable;
-  }
-
-  public static Type calculateObserveType(IObservableFactory targetFactory,
-      IObservableFactory modelFactory) throws Exception {
-    Type targetType = targetFactory.getType();
-    Type modelType = modelFactory.getType();
-    // input
-    if (targetType == Type.Input || modelType == Type.Input) {
-      return Type.Input;
-    }
-    // equal
-    if (targetType == modelType) {
-      switch (targetType) {
-        case List :
-          return Type.OnlyList;
-        case Set :
-          return Type.OnlySet;
-        case Any :
-          return Type.OnlyValue;
-      }
-      return targetType;
-    }
-    // Value
-    if (targetType == Type.OnlyValue
-        || targetType == Type.Any
-        || modelType == Type.OnlyValue
-        || modelType == Type.Any) {
-      return Type.OnlyValue;
-    }
-    // List
-    if (targetType == Type.OnlyList
-        || targetType == Type.List
-        || modelType == Type.OnlyList
-        || modelType == Type.List) {
-      return Type.OnlyList;
-    }
-    // Set
-    if (targetType == Type.OnlySet
-        || targetType == Type.Set
-        || modelType == Type.OnlySet
-        || modelType == Type.Set) {
-      return Type.OnlySet;
-    }
-    // default
-    return Type.OnlyValue;
-  }
-
-  @Override
-  public void addBinding(final IBindingInfo ibinding) {
-    // post process
-    ExecutionUtils.runLog(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        AbstractBindingInfo binding = (AbstractBindingInfo) ibinding;
-        binding.create();
-      }
-    });
-    // add
-    getBindings().add(ibinding);
-    // save
-    saveEdit();
-  }
-
-  @Override
-  public void editBinding(IBindingInfo binding) {
-    saveEdit();
-  }
-
-  @Override
-  public void deleteBinding(final IBindingInfo ibinding) {
-    // delete
-    ExecutionUtils.runLog(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        AbstractBindingInfo binding = (AbstractBindingInfo) ibinding;
-        binding.delete();
-      }
-    });
-    getBindings().remove(ibinding);
-    // save
-    saveEdit();
-  }
-
-  @Override
-  public void deleteAllBindings() {
-    // delete all
-    ExecutionUtils.runLog(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        for (AbstractBindingInfo binding : getBindings0()) {
-          binding.delete();
-        }
-      }
-    });
-    getBindings().clear();
-    // save
-    saveEdit();
-  }
-
-  @Override
-  public void deleteBindings(JavaInfo javaInfo) throws Exception {
-    if (m_javaInfoDeleteManager != null) {
-      m_javaInfoDeleteManager.deleteJavaInfo(javaInfo);
-    }
-  }
-
-  @Override
-  public boolean canMoveBinding(IBindingInfo binding, int targetIndex, boolean upDown) {
-    return true;
-  }
-
-  @Override
-  public void moveBinding(IBindingInfo binding, int sourceIndex, int targetIndex, boolean upDown) {
-    // do reorder
-    List<IBindingInfo> bindings = getBindings();
-    bindings.remove(sourceIndex);
-    bindings.add(targetIndex, binding);
-    // save
-    saveEdit();
-  }
-
-  @Override
-  public void setBindingPage(Object bindingPage) {
-    m_bindingPage = (BindingDesignPage) bindingPage;
-  }
-
-  @Override
-  public void refreshDesigner() {
-  }
-
-  @Override
-  public void saveEdit() {
-    saveEdit(false);
-  }
-
-  public void saveEdit(final boolean needReparse) {
-    final boolean[] reparse = new boolean[1];
-    ExecutionUtils.run(m_javaInfoRoot, new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        reparse[0] =
-            m_rootInfo.commit(m_astEditor, m_rootNode, m_javaInfoRoot, m_containers, m_controller);
-        // check reparse
-        if (reparse[0] || needReparse) {
-          BindingDesignPage.handleReparse(m_bindingPage, m_javaInfoRoot);
-        }
-      }
-    });
-    // check synchronize
-    if (!reparse[0]) {
-      ExecutionUtils.runLog(new RunnableEx() {
-        @Override
-        public void run() throws Exception {
-          synchronizeObserves();
-        }
-      });
-    }
-  }
+	private static List<PropertyFilter> m_filters;
+	private final JavaInfo m_javaInfoRoot;
+	private final List<ObserveTypeContainer> m_containers;
+	private final List<ObserveType> m_types = Lists.newArrayList();
+	private final Map<ObserveType, ObserveTypeContainer> m_typeToContainer = Maps.newHashMap();
+	private ObserveType m_targetStartType;
+	private ObserveType m_modelStartType;
+	private BindingDesignPage m_bindingPage;
+	private JavaInfoDeleteManager m_javaInfoDeleteManager;
+	private final DataBindingsRootInfo m_rootInfo = new DataBindingsRootInfo();
+	private TypeDeclaration m_rootNode;
+	private AstEditor m_astEditor;
+	private boolean m_controller;
+	private String m_controllerViewerField;
+	private boolean m_synchronizeObserves = true;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected DatabindingsProvider() {
+		m_javaInfoRoot = null;
+		m_containers = Lists.newArrayList();
+	}
+
+	public DatabindingsProvider(JavaInfo javaInfoRoot) throws Exception {
+		m_javaInfoRoot = javaInfoRoot;
+		// load containers
+		m_containers =
+				ExternalFactoriesHelper.getElementsInstances(
+						ObserveTypeContainer.class,
+						"org.eclipse.wb.rcp.databinding.observeTypeContainer",
+						"container");
+		// prepare containers
+		for (Iterator<ObserveTypeContainer> I = m_containers.iterator(); I.hasNext();) {
+			ObserveTypeContainer container = I.next();
+			if (container.accept(m_javaInfoRoot)) {
+				container.initialize(this);
+				ObserveType observeType = container.getObserveType();
+				m_types.add(observeType);
+				m_typeToContainer.put(observeType, container);
+				//
+				if (container.isTargetStartType()) {
+					m_targetStartType = observeType;
+				}
+				if (container.isModelStartType()) {
+					m_modelStartType = observeType;
+				}
+			} else {
+				I.remove();
+			}
+		}
+		//
+		m_rootNode = JavaInfoUtils.getTypeDeclaration(m_javaInfoRoot);
+		m_astEditor = m_javaInfoRoot.getEditor();
+		// find controller
+		if (m_rootNode != null) {
+			ControllerSupport.configure(this);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Internals
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static DatabindingsProvider cast(IDatabindingsProvider provider) {
+		return (DatabindingsProvider) provider;
+	}
+
+	public List<ObserveTypeContainer> getContainers() {
+		return m_containers;
+	}
+
+	public ObserveTypeContainer getContainer(ObserveType type) {
+		return m_typeToContainer.get(type);
+	}
+
+	public JavaInfo getJavaInfoRoot() {
+		return m_javaInfoRoot;
+	}
+
+	public DataBindingsRootInfo getRootInfo() {
+		return m_rootInfo;
+	}
+
+	public void hookJavaInfoEvents() throws Exception {
+		// update observes
+		new SynchronizeManager(this, m_javaInfoRoot);
+		// handle delete info's
+		m_javaInfoDeleteManager = new JavaInfoDeleteManager(this);
+		// decorate info's
+		new JavaInfoDecorator(this);
+		// properties
+		new JavaInfoPropertiesManager(this, m_javaInfoRoot);
+	}
+
+	public TypeDeclaration getRootNode() {
+		return m_rootNode;
+	}
+
+	public void setRootNode(TypeDeclaration rootNode) {
+		m_rootNode = rootNode;
+	}
+
+	public AstEditor getAstEditor() {
+		return m_astEditor;
+	}
+
+	public void setAstEditor(AstEditor astEditor) {
+		m_astEditor = astEditor;
+	}
+
+	public boolean isController() {
+		return m_controller;
+	}
+
+	public void setController(boolean controller) {
+		m_controller = controller;
+	}
+
+	public String getControllerViewerField() {
+		return m_controllerViewerField;
+	}
+
+	public void setControllerViewerField(String controllerViewerField) {
+		m_controllerViewerField = controllerViewerField;
+	}
+
+	public void setSynchronizeObserves(boolean synchronizeObserves) {
+		m_synchronizeObserves = synchronizeObserves;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Bindings
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void configureBindingViewer(IDialogSettings settings, TableViewer viewer) {
+		// prepare table
+		Table table = viewer.getTable();
+		// binding type image column
+		TableColumn bindingColumn = new TableColumn(table, SWT.NONE);
+		bindingColumn.setWidth(23);
+		bindingColumn.setResizable(false);
+		// target column
+		TableColumn targetColumn = UiUtils.createSmartColumn(table, settings, "TargetColumn", 250);
+		targetColumn.setText(Messages.DatabindingsProvider_targetColumn);
+		// model column
+		TableColumn modelColumn = UiUtils.createSmartColumn(table, settings, "ModelColumn", 250);
+		modelColumn.setText(Messages.DatabindingsProvider_modelColumn);
+		// target strategy column
+		TableColumn targetStrategyColumn =
+				UiUtils.createSmartColumn(table, settings, "TargetStrategyColumn", 170);
+		targetStrategyColumn.setText(Messages.DatabindingsProvider_targetStrategyColumn);
+		// model strategy column
+		TableColumn modelStrategyColumn =
+				UiUtils.createSmartColumn(table, settings, "ModelStrategyColumn", 170);
+		modelStrategyColumn.setText(Messages.DatabindingsProvider_modelStrategyColumn);
+		// binding variable column
+		TableColumn variableBindingColumn =
+				UiUtils.createSmartColumn(table, settings, "VariableBindingColumn", 250);
+		variableBindingColumn.setText(Messages.DatabindingsProvider_bindingColumn);
+		// label provider
+		viewer.setLabelProvider(new BindingLabelProvider());
+	}
+
+	public List<AbstractBindingInfo> getBindings0() {
+		return m_rootInfo.getContextInfo().getBindings();
+	}
+
+	@Override
+	public List<IBindingInfo> getBindings() {
+		return CoreUtils.cast(getBindings0());
+	}
+
+	@Override
+	public String getBindingPresentationText(final IBindingInfo binding) throws Exception {
+		return null;
+	}
+
+	@Override
+	public void gotoDefinition(IBindingInfo ibinding) {
+		try {
+			AbstractBindingInfo binding = (AbstractBindingInfo) ibinding;
+			String source = binding.getDefinitionSource(this);
+			//
+			if (source != null) {
+				int position = m_javaInfoRoot.getEditor().getEnclosingNode(source).getStartPosition();
+				IDesignPageSite site = IDesignPageSite.Helper.getSite(m_javaInfoRoot);
+				site.openSourcePosition(position);
+			}
+		} catch (Throwable e) {
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Types
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public List<ObserveType> getTypes() {
+		return m_types;
+	}
+
+	@Override
+	public ObserveType getTargetStartType() {
+		return m_targetStartType;
+	}
+
+	@Override
+	public ObserveType getModelStartType() {
+		return m_modelStartType;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Observes
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public IBaseLabelProvider createPropertiesViewerLabelProvider(TreeViewer viewer) {
+		return new ObserveDecoratingLabelProvider(viewer);
+	}
+
+	@Override
+	public List<PropertyFilter> getObservePropertyFilters() {
+		return observePropertyFilters();
+	}
+
+	public static List<PropertyFilter> observePropertyFilters() {
+		if (m_filters == null) {
+			m_filters = Lists.newArrayList();
+			// advanced
+			m_filters.add(new AdvancedPropertyFilter());
+			// any type
+			m_filters.add(new AllPropertiesFilter(Messages.DatabindingsProvider_filterAllTypes,
+					TypeImageProvider.OBJECT_IMAGE));
+			// String, byte, char
+			m_filters.add(new TypesPropertyFilter("String",
+					TypeImageProvider.STRING_IMAGE,
+					String.class,
+					byte.class,
+					char.class));
+			// boolean
+			m_filters.add(new TypesPropertyFilter("Boolean",
+					TypeImageProvider.BOOLEAN_IMAGE,
+					boolean.class,
+					Boolean.class));
+			// int, short, long, float, double
+			m_filters.add(new TypesPropertyFilter("Numbers",
+					TypeImageProvider.NUMBER_IMAGE,
+					int.class,
+					short.class,
+					long.class,
+					float.class,
+					double.class));
+			// SWT Color
+			m_filters.add(new TypesPropertyFilter("Color", TypeImageProvider.COLOR_IMAGE, Color.class));
+			// SWT Font
+			m_filters.add(new TypesPropertyFilter("Font", TypeImageProvider.FONT_IMAGE, Font.class));
+		}
+		return m_filters;
+	}
+
+	@Override
+	public List<IObserveInfo> getObserves(ObserveType type) {
+		ObserveTypeContainer container = m_typeToContainer.get(type);
+		return container == null ? Collections.<IObserveInfo>emptyList() : container.getObservables();
+	}
+
+	@Override
+	public void synchronizeObserves() throws Exception {
+		if (m_synchronizeObserves) {
+			for (ObserveTypeContainer container : m_containers) {
+				container.synchronizeObserves(m_javaInfoRoot, m_astEditor, m_rootNode);
+			}
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// UI editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public List<IUiContentProvider> getContentProviders(IBindingInfo ibinding, IPageListener listener)
+			throws Exception {
+		AbstractBindingInfo binding = (AbstractBindingInfo) ibinding;
+		List<IUiContentProvider> providers = Lists.newArrayList();
+		binding.createContentProviders(providers, listener, this);
+		return providers;
+	}
+
+	@Override
+	public void fillExternalBindingActions(ToolBar toolBar, Menu contextMenu) {
+		// TODO remove this code?
+		if ("".length() > 0 && !m_controller) {
+			SelectionListener listener = new SelectionAdapter() {
+				@Override
+				public void widgetSelected(SelectionEvent e) {
+					ControllerSupport.convertToController(
+							DatabindingsProvider.this,
+							m_javaInfoRoot,
+							m_astEditor,
+							m_rootNode);
+				}
+			};
+			// separator
+			new ToolItem(toolBar, SWT.SEPARATOR);
+			// convert to controller
+			ToolItem convertToControllerToolItem = new ToolItem(toolBar, SWT.NONE);
+			convertToControllerToolItem.setToolTipText(Messages.DatabindingsProvider_convertToController);
+			convertToControllerToolItem.setImage(Activator.getImage("newjprj_wiz.gif"));
+			convertToControllerToolItem.addSelectionListener(listener);
+			// separator
+			new MenuItem(contextMenu, SWT.SEPARATOR);
+			// convert to controller
+			MenuItem convertToControllerMenuItem = new MenuItem(contextMenu, SWT.NONE);
+			convertToControllerMenuItem.setText(Messages.DatabindingsProvider_convertToController);
+			convertToControllerMenuItem.setImage(Activator.getImage("newjprj_wiz.gif"));
+			convertToControllerMenuItem.addSelectionListener(listener);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Validate
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean validate(IObserveInfo target,
+			IObserveInfo targetProperty,
+			IObserveInfo model,
+			IObserveInfo modelProperty) throws Exception {
+		return doValidate(getBindings0(), target, targetProperty, model, modelProperty);
+	}
+
+	public static boolean doValidate(List<AbstractBindingInfo> bindings,
+			IObserveInfo target,
+			IObserveInfo targetProperty,
+			IObserveInfo model,
+			IObserveInfo modelProperty) throws Exception {
+		// ignore itself
+		if (target == model && targetProperty == modelProperty) {
+			return false;
+		}
+		// prepare binable's
+		BindableInfo targetBindable = (BindableInfo) target;
+		BindableInfo targetPropertyBindable = (BindableInfo) targetProperty;
+		IObservableFactory targetFactory = targetPropertyBindable.getObservableFactory();
+		BindableInfo modelBindable = (BindableInfo) model;
+		BindableInfo modelPropertyBindable = (BindableInfo) modelProperty;
+		IObservableFactory modelFactory = modelPropertyBindable.getObservableFactory();
+		// ignore null factories
+		if (targetFactory == null || modelFactory == null) {
+			return false;
+		}
+		//
+		Type targetType = targetFactory.getType();
+		Type modelType = modelFactory.getType();
+		//
+		if (targetType == Type.Input
+				|| targetType == Type.InputCollection
+				|| modelType == Type.Input
+				|| modelType == Type.InputCollection) {
+			// ignore no collection type for input
+			if (targetType == modelType) {
+				return false;
+			}
+			if (targetType == Type.InputCollection) {
+				if (modelType != Type.Input) {
+					return false;
+				}
+			} else if (modelType == Type.InputCollection) {
+				if (targetType != Type.Input) {
+					return false;
+				}
+			} else if (targetType == Type.Input) {
+				if (!validateInput(modelType)) {
+					return false;
+				}
+			} else if (!validateInput(targetType)) {
+				return false;
+			}
+			if (targetType == Type.Input) {
+				if (findBinding(bindings, target, targetProperty)) {
+					return false;
+				}
+			} else if (findBinding(bindings, model, modelProperty)) {
+				return false;
+			}
+		} else if (targetType == modelType) {
+			if (modelType == Type.Detail) {
+				return false;
+			}
+		} else {
+			if (targetType == Type.OnlyList) {
+				if (!validateOnlyList(modelType)) {
+					return false;
+				}
+			} else if (modelType == Type.OnlyList) {
+				if (!validateOnlyList(targetType)) {
+					return false;
+				}
+			} else if (targetType == Type.OnlySet) {
+				if (!validateOnlySet(modelType)) {
+					return false;
+				}
+			} else if (modelType == Type.OnlySet) {
+				if (!validateOnlySet(targetType)) {
+					return false;
+				}
+			} else if (targetType == Type.OnlyValue) {
+				if (!validateOnlyValue(modelType)) {
+					return false;
+				}
+			} else if (modelType == Type.OnlyValue) {
+				if (!validateOnlyValue(targetType)) {
+					return false;
+				}
+			} else if (targetType == Type.List) {
+				if (!validateList(modelType)) {
+					return false;
+				}
+			} else if (modelType == Type.List) {
+				if (!validateList(targetType)) {
+					return false;
+				}
+			} else if (targetType == Type.Set) {
+				if (!validateSet(modelType)) {
+					return false;
+				}
+			} else if (modelType == Type.Set) {
+				if (!validateSet(targetType)) {
+					return false;
+				}
+			} else if (targetType == Type.Any) {
+				if (!validateAny(modelType)) {
+					return false;
+				}
+			} else if (modelType == Type.Any) {
+				if (!validateAny(targetType)) {
+					return false;
+				}
+			} else if (targetType == Type.Detail) {
+				if (!validateDetail(modelType)) {
+					return false;
+				}
+			} else if (modelType == Type.Detail) {
+				if (!validateDetail(targetType)) {
+					return false;
+				}
+			}
+		}
+		// Sub-properties not allowed for sets, lists, maps.
+		// see http://www.eclipse.org/forums/index.php/t/262915/
+		if (modelType == Type.List
+				|| modelType == Type.OnlyList
+				|| modelType == Type.Set
+				|| modelType == Type.OnlySet) {
+			if (modelProperty.getParent() != null) {
+				return false;
+			}
+		}
+		// ignore itself
+		return !targetBindable.getReference().equals(modelBindable.getReference())
+				|| !targetPropertyBindable.getReference().equals(modelPropertyBindable.getReference());
+	}
+
+	private static boolean findBinding(List<AbstractBindingInfo> bindings,
+			IObserveInfo object,
+			IObserveInfo property) {
+		for (AbstractBindingInfo binding : bindings) {
+			if (binding.getTarget() == object && binding.getTargetProperty() == property) {
+				return true;
+			}
+			if (binding.getModel() == object && binding.getModelProperty() == property) {
+				return true;
+			}
+		}
+		return false;
+	}
+
+	private static boolean validateInput(Type type) throws Exception {
+		return type == Type.InputCollection
+				|| type == Type.OnlyList
+				|| type == Type.OnlySet
+				|| type == Type.List
+				|| type == Type.Set
+				|| type == Type.Detail;
+	}
+
+	private static boolean validateOnlyList(Type type) {
+		return type == Type.List || type == Type.Detail;
+	}
+
+	private static boolean validateOnlySet(Type type) {
+		return type == Type.Set || type == Type.Detail;
+	}
+
+	private static boolean validateOnlyValue(Type type) {
+		return type == Type.List || type == Type.Set || type == Type.Any || type == Type.Detail;
+	}
+
+	private static boolean validateList(Type type) {
+		return type == Type.OnlyList
+				|| type == Type.OnlyValue
+				|| type == Type.Any
+				|| type == Type.Detail;
+	}
+
+	private static boolean validateSet(Type type) {
+		return type == Type.OnlySet
+				|| type == Type.OnlyValue
+				|| type == Type.Any
+				|| type == Type.Detail;
+	}
+
+	private static boolean validateAny(Type type) {
+		return type == Type.OnlyValue || type == Type.List || type == Type.Set || type == Type.Detail;
+	}
+
+	private static boolean validateDetail(Type type) {
+		return type == Type.OnlyList
+				|| type == Type.OnlySet
+				|| type == Type.OnlyValue
+				|| type == Type.List
+				|| type == Type.Set
+				|| type == Type.Any;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Creation/Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public IBindingInfo createBinding(IObserveInfo target,
+			IObserveInfo targetProperty,
+			IObserveInfo model,
+			IObserveInfo modelProperty) throws Exception {
+		// prepare target
+		BindableInfo targetBindable = (BindableInfo) target;
+		BindableInfo targetBindableProperty = (BindableInfo) targetProperty;
+		IObservableFactory targetFactory = targetBindableProperty.getObservableFactory();
+		// prepare model
+		BindableInfo modelBindable = (BindableInfo) model;
+		BindableInfo modelBindableProperty = (BindableInfo) modelProperty;
+		IObservableFactory modelFactory = modelBindableProperty.getObservableFactory();
+		//
+		// calculate type
+		Type type = calculateObserveType(targetFactory, modelFactory);
+		// handle input type
+		if (type == Type.Input) {
+			return AbstractViewerInputBindingInfo.createBinding(
+					targetBindable,
+					targetBindableProperty,
+					modelBindable,
+					modelBindableProperty,
+					this);
+		}
+		// create observable's
+		ObservableInfo targetObservable =
+				createObservable(targetFactory, targetBindable, targetBindableProperty, type);
+		ObservableInfo modelObservable =
+				createObservable(modelFactory, modelBindable, modelBindableProperty, type);
+		// create binding
+		switch (type) {
+		case OnlyValue :
+			return new ValueBindingInfo(targetObservable, modelObservable);
+		case OnlyList :
+			return new ListBindingInfo(targetObservable, modelObservable);
+		case OnlySet :
+			return new SetBindingInfo(targetObservable, modelObservable);
+		}
+		//
+		Assert.fail("");
+		return null;
+	}
+
+	public ObservableInfo createObservable(IObservableFactory factory,
+			BindableInfo bindable,
+			BindableInfo property,
+			Type type) throws Exception {
+		boolean version_1_3 =
+				Activator.getStore().getBoolean(IPreferenceConstants.GENERATE_CODE_FOR_VERSION_1_3);
+		ObservableInfo newObservable = factory.createObservable(bindable, property, type, version_1_3);
+		//
+		for (IBindingInfo ibinding : getBindings()) {
+			if (ibinding instanceof BindingInfo) {
+				BindingInfo binding = (BindingInfo) ibinding;
+				// check target
+				ObservableInfo targetObservable = binding.getTargetObservable();
+				if (targetObservable.canShared()
+						&& binding.getTarget() == bindable
+						&& binding.getTargetProperty() == property
+						&& targetObservable.getClass() == newObservable.getClass()) {
+					return targetObservable;
+				}
+				// check model
+				ObservableInfo modelObservable = binding.getModelObservable();
+				if (modelObservable.canShared()
+						&& binding.getModel() == bindable
+						&& binding.getModelProperty() == property
+						&& modelObservable.getClass() == newObservable.getClass()) {
+					return modelObservable;
+				}
+			} else {
+				AbstractViewerInputBindingInfo binding = (AbstractViewerInputBindingInfo) ibinding;
+				// check viewer input
+				ObservableInfo inputObservable = binding.getInputObservable();
+				if (inputObservable.canShared()
+						&& binding.getModel() == bindable
+						&& binding.getModelProperty() == property
+						&& inputObservable.getClass() == newObservable.getClass()) {
+					return inputObservable;
+				}
+			}
+		}
+		return newObservable;
+	}
+
+	public static Type calculateObserveType(IObservableFactory targetFactory,
+			IObservableFactory modelFactory) throws Exception {
+		Type targetType = targetFactory.getType();
+		Type modelType = modelFactory.getType();
+		// input
+		if (targetType == Type.Input || modelType == Type.Input) {
+			return Type.Input;
+		}
+		// equal
+		if (targetType == modelType) {
+			switch (targetType) {
+			case List :
+				return Type.OnlyList;
+			case Set :
+				return Type.OnlySet;
+			case Any :
+				return Type.OnlyValue;
+			}
+			return targetType;
+		}
+		// Value
+		if (targetType == Type.OnlyValue
+				|| targetType == Type.Any
+				|| modelType == Type.OnlyValue
+				|| modelType == Type.Any) {
+			return Type.OnlyValue;
+		}
+		// List
+		if (targetType == Type.OnlyList
+				|| targetType == Type.List
+				|| modelType == Type.OnlyList
+				|| modelType == Type.List) {
+			return Type.OnlyList;
+		}
+		// Set
+		if (targetType == Type.OnlySet
+				|| targetType == Type.Set
+				|| modelType == Type.OnlySet
+				|| modelType == Type.Set) {
+			return Type.OnlySet;
+		}
+		// default
+		return Type.OnlyValue;
+	}
+
+	@Override
+	public void addBinding(final IBindingInfo ibinding) {
+		// post process
+		ExecutionUtils.runLog(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				AbstractBindingInfo binding = (AbstractBindingInfo) ibinding;
+				binding.create();
+			}
+		});
+		// add
+		getBindings().add(ibinding);
+		// save
+		saveEdit();
+	}
+
+	@Override
+	public void editBinding(IBindingInfo binding) {
+		saveEdit();
+	}
+
+	@Override
+	public void deleteBinding(final IBindingInfo ibinding) {
+		// delete
+		ExecutionUtils.runLog(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				AbstractBindingInfo binding = (AbstractBindingInfo) ibinding;
+				binding.delete();
+			}
+		});
+		getBindings().remove(ibinding);
+		// save
+		saveEdit();
+	}
+
+	@Override
+	public void deleteAllBindings() {
+		// delete all
+		ExecutionUtils.runLog(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				for (AbstractBindingInfo binding : getBindings0()) {
+					binding.delete();
+				}
+			}
+		});
+		getBindings().clear();
+		// save
+		saveEdit();
+	}
+
+	@Override
+	public void deleteBindings(JavaInfo javaInfo) throws Exception {
+		if (m_javaInfoDeleteManager != null) {
+			m_javaInfoDeleteManager.deleteJavaInfo(javaInfo);
+		}
+	}
+
+	@Override
+	public boolean canMoveBinding(IBindingInfo binding, int targetIndex, boolean upDown) {
+		return true;
+	}
+
+	@Override
+	public void moveBinding(IBindingInfo binding, int sourceIndex, int targetIndex, boolean upDown) {
+		// do reorder
+		List<IBindingInfo> bindings = getBindings();
+		bindings.remove(sourceIndex);
+		bindings.add(targetIndex, binding);
+		// save
+		saveEdit();
+	}
+
+	@Override
+	public void setBindingPage(Object bindingPage) {
+		m_bindingPage = (BindingDesignPage) bindingPage;
+	}
+
+	@Override
+	public void refreshDesigner() {
+	}
+
+	@Override
+	public void saveEdit() {
+		saveEdit(false);
+	}
+
+	public void saveEdit(final boolean needReparse) {
+		final boolean[] reparse = new boolean[1];
+		ExecutionUtils.run(m_javaInfoRoot, new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				reparse[0] =
+						m_rootInfo.commit(m_astEditor, m_rootNode, m_javaInfoRoot, m_containers, m_controller);
+				// check reparse
+				if (reparse[0] || needReparse) {
+					BindingDesignPage.handleReparse(m_bindingPage, m_javaInfoRoot);
+				}
+			}
+		});
+		// check synchronize
+		if (!reparse[0]) {
+			ExecutionUtils.runLog(new RunnableEx() {
+				@Override
+				public void run() throws Exception {
+					synchronizeObserves();
+				}
+			});
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/DesignPageFactory.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/DesignPageFactory.java
index ffe4d979a..47eaf4af6 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/DesignPageFactory.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/DesignPageFactory.java
@@ -31,70 +31,70 @@
  * @coverage bindings.rcp.ui
  */
 public final class DesignPageFactory implements IEditorPageFactory {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IDesignPageFactory
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void createPages(IDesignerEditor editor, List<IEditorPage> pages) {
-    if (isRCP(editor)) {
-      BindingDesignPage.addPage(pages);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IDesignPageFactory
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void createPages(IDesignerEditor editor, List<IEditorPage> pages) {
+		if (isRCP(editor)) {
+			BindingDesignPage.addPage(pages);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static boolean isRCP(IDesignerEditor editor) {
-    try {
-      ICompilationUnit compilationUnit = editor.getCompilationUnit();
-      IJavaProject project = compilationUnit.getJavaProject();
-      // check "big" SWT
-      if (project.findType("org.eclipse.swt.custom.SashForm") != null
-          && project.findType("org.eclipse.ercp.swt.mobile.MobileShell") == null) {
-        IImportDeclaration[] imports = compilationUnit.getImports();
-        //
-        for (IType type : compilationUnit.getTypes()) {
-          String superclassName = type.getSuperclassName();
-          // ignore ActionBarAdvisor
-          if ("org.eclipse.ui.application.ActionBarAdvisor".equals(superclassName)
-              || "ActionBarAdvisor".equals(superclassName)
-              && isImport(imports, "org.eclipse.ui.application.ActionBarAdvisor")) {
-            return false;
-          }
-          String[] superInterfaceNames = type.getSuperInterfaceNames();
-          // ignore perspectives
-          if (ArrayUtils.contains(superInterfaceNames, "org.eclipse.ui.IPerspectiveFactory")
-              || ArrayUtils.contains(superInterfaceNames, "IPerspectiveFactory")
-              && isImport(imports, "org.eclipse.ui.IPerspectiveFactory")) {
-            return false;
-          }
-        }
-        // check SWT, JFace or Eclipse UI imports
-        for (IImportDeclaration importDeclaration : imports) {
-          String elementName = importDeclaration.getElementName();
-          if (elementName.startsWith("org.eclipse.swt")
-              || elementName.startsWith("org.eclipse.jface")
-              || elementName.startsWith("org.eclipse.ui")) {
-            return true;
-          }
-        }
-      }
-    } catch (Throwable e) {
-    }
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static boolean isRCP(IDesignerEditor editor) {
+		try {
+			ICompilationUnit compilationUnit = editor.getCompilationUnit();
+			IJavaProject project = compilationUnit.getJavaProject();
+			// check "big" SWT
+			if (project.findType("org.eclipse.swt.custom.SashForm") != null
+					&& project.findType("org.eclipse.ercp.swt.mobile.MobileShell") == null) {
+				IImportDeclaration[] imports = compilationUnit.getImports();
+				//
+				for (IType type : compilationUnit.getTypes()) {
+					String superclassName = type.getSuperclassName();
+					// ignore ActionBarAdvisor
+					if ("org.eclipse.ui.application.ActionBarAdvisor".equals(superclassName)
+							|| "ActionBarAdvisor".equals(superclassName)
+							&& isImport(imports, "org.eclipse.ui.application.ActionBarAdvisor")) {
+						return false;
+					}
+					String[] superInterfaceNames = type.getSuperInterfaceNames();
+					// ignore perspectives
+					if (ArrayUtils.contains(superInterfaceNames, "org.eclipse.ui.IPerspectiveFactory")
+							|| ArrayUtils.contains(superInterfaceNames, "IPerspectiveFactory")
+							&& isImport(imports, "org.eclipse.ui.IPerspectiveFactory")) {
+						return false;
+					}
+				}
+				// check SWT, JFace or Eclipse UI imports
+				for (IImportDeclaration importDeclaration : imports) {
+					String elementName = importDeclaration.getElementName();
+					if (elementName.startsWith("org.eclipse.swt")
+							|| elementName.startsWith("org.eclipse.jface")
+							|| elementName.startsWith("org.eclipse.ui")) {
+						return true;
+					}
+				}
+			}
+		} catch (Throwable e) {
+		}
+		return false;
+	}
 
-  private static boolean isImport(IImportDeclaration[] imports, String name) {
-    for (IImportDeclaration importDeclaration : imports) {
-      String elementName = importDeclaration.getElementName();
-      if (name.equals(elementName)) {
-        return true;
-      }
-    }
-    return false;
-  }
+	private static boolean isImport(IImportDeclaration[] imports, String name) {
+		for (IImportDeclaration importDeclaration : imports) {
+			String elementName = importDeclaration.getElementName();
+			if (name.equals(elementName)) {
+				return true;
+			}
+		}
+		return false;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/JFaceDatabindingsFactory.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/JFaceDatabindingsFactory.java
index 8cae1739e..323a2db6c 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/JFaceDatabindingsFactory.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/JFaceDatabindingsFactory.java
@@ -24,37 +24,37 @@
  * @coverage bindings.rcp.model
  */
 public final class JFaceDatabindingsFactory implements IDatabindingFactory {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IDatabindingFactory
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public IDatabindingsProvider createProvider(JavaInfo javaInfoRoot) throws Exception {
-    // check root
-    if (isRCPRootObject(javaInfoRoot)) {
-      // create provider
-      DatabindingsProvider provider = new DatabindingsProvider(javaInfoRoot);
-      // parse
-      DatabindingParser.parse(provider);
-      // events
-      provider.hookJavaInfoEvents();
-      return provider;
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IDatabindingFactory
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public IDatabindingsProvider createProvider(JavaInfo javaInfoRoot) throws Exception {
+		// check root
+		if (isRCPRootObject(javaInfoRoot)) {
+			// create provider
+			DatabindingsProvider provider = new DatabindingsProvider(javaInfoRoot);
+			// parse
+			DatabindingParser.parse(provider);
+			// events
+			provider.hookJavaInfoEvents();
+			return provider;
+		}
+		return null;
+	}
 
-  @Override
-  public AbstractUIPlugin getPlugin() {
-    return Activator.getDefault();
-  }
+	@Override
+	public AbstractUIPlugin getPlugin() {
+		return Activator.getDefault();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static boolean isRCPRootObject(JavaInfo javaInfoRoot) throws Exception {
-    return javaInfoRoot.getDescription().getToolkit().getId() == org.eclipse.wb.internal.rcp.preferences.IPreferenceConstants.TOOLKIT_ID;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static boolean isRCPRootObject(JavaInfo javaInfoRoot) throws Exception {
+		return javaInfoRoot.getDescription().getToolkit().getId() == org.eclipse.wb.internal.rcp.preferences.IPreferenceConstants.TOOLKIT_ID;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/Messages.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/Messages.java
index 7fad3994f..f40f21303 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/Messages.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/Messages.java
@@ -3,192 +3,192 @@
 import org.eclipse.osgi.util.NLS;
 
 public class Messages extends NLS {
-  private static final String BUNDLE_NAME = "org.eclipse.wb.internal.rcp.databinding.Messages"; //$NON-NLS-1$
-  public static String AbstractWidgetPropertiesCodeSupport_widgetArgumentNotFound;
-  public static String AdvancedPropertyFilter_title;
-  public static String AutomaticDatabindingFirstPage_controllerFieldLabel;
-  public static String AutomaticDatabindingWizard_firstPageDescription;
-  public static String AutomaticDatabindingWizard_firstPageTitle;
-  public static String AutomaticDatabindingWizard_secondPageDescription;
-  public static String AutomaticDatabindingWizard_secondPageTitle;
-  public static String AutomaticDatabindingWizard_windowTitle;
-  public static String BeanPropertiesCodeSupport_argumentNotFound;
-  public static String BeanPropertiesCodeSupport_propertyNotFound;
-  public static String BeansObserveTypeContainer_argumentNotFound;
-  public static String BeansObserveTypeContainer_beanPropertyNotFound;
-  public static String BeansObserveTypeContainer_domainObservableArgumentNotFound;
-  public static String BeansObserveTypeContainer_masterObservableArgumentNotFound;
-  public static String BeansObserveTypeContainer_masterObservableNotFound;
-  public static String BindingInfo_listenerMessage;
-  public static String BindingInfo_listenerTitle;
-  public static String BindingInfo_modelLabel;
-  public static String BindingInfo_targetLabel;
-  public static String BindingInfo_undefinedBindingField;
-  public static String CheckedElementsObservableInfo_emptyMessage;
-  public static String CheckedElementsObservableInfo_errorPrefix;
-  public static String CheckedElementsObservableInfo_label;
-  public static String DataBindingContextInfo_modelArgumentNotFound;
-  public static String DataBindingContextInfo_targetArgumentNotFound;
-  public static String DataBindingContextInfo_undefinedStrategy;
-  public static String DatabindingsProvider_bindingColumn;
-  public static String DatabindingsProvider_convertToController;
-  public static String DatabindingsProvider_filterAllTypes;
-  public static String DatabindingsProvider_modelColumn;
-  public static String DatabindingsProvider_modelStrategyColumn;
-  public static String DatabindingsProvider_targetColumn;
-  public static String DatabindingsProvider_targetStrategyColumn;
-  public static String DbCodeGenerationPreferencePage_27;
-  public static String DbCodeGenerationPreferencePage_28;
-  public static String DbCodeGenerationPreferencePage_29;
-  public static String DbCodeGenerationPreferencePage_30;
-  public static String DbCodeGenerationPreferencePage_31;
-  public static String DbCodeGenerationPreferencePage_32;
-  public static String DbCodeGenerationPreferencePage_33;
-  public static String DbCodeGenerationPreferencePage_34;
-  public static String DbCodeGenerationPreferencePage_35;
-  public static String DbCodeGenerationPreferencePage_36;
-  public static String DbCodeGenerationPreferencePage_37;
-  public static String DbCodeGenerationPreferencePage_38;
-  public static String DbCodeGenerationPreferencePage_39;
-  public static String DbCodeGenerationPreferencePage_40;
-  public static String DbCodeGenerationPreferencePage_addDbIntoComposite;
-  public static String DbCodeGenerationPreferencePage_addDbInvocation;
-  public static String DbCodeGenerationPreferencePage_assignDbReturnValue;
-  public static String DbCodeGenerationPreferencePage_dbMethodAccess;
-  public static String DbCodeGenerationPreferencePage_defaultValueStrategyGroup;
-  public static String DbCodeGenerationPreferencePage_defaultValueStrategyLabel;
-  public static String DbCodeGenerationPreferencePage_dontUseDeprecatedBeansObservables;
-  public static String DbCodeGenerationPreferencePage_encloseIntoTryCatch;
-  public static String DbCodeGenerationPreferencePage_generate13Observables;
-  public static String DbCodeGenerationPreferencePage_preview;
-  public static String DbCodeGenerationPreferencePage_updateListStrategy;
-  public static String DbCodeGenerationPreferencePage_updateSetStrategy;
-  public static String DbCodeGenerationPreferencePage_useViewerSupport;
-  public static String DetailBeanObservableInfo_errorMessage;
-  public static String DetailBeanObservableInfo_errorMessagePrefix;
-  public static String DetailBeanObservableInfo_objectLabel;
-  public static String DetailBeanObservableInfo_propertiesErrorMessage;
-  public static String DetailBeanObservableInfo_propertiesLabel;
-  public static String DetailPropertyCodeSupport_widgetArgumentNotFound;
-  public static String LabelProviderInfo_errorMessage;
-  public static String LabelProviderInfo_errorMessagePrefix;
-  public static String LabelProviderInfo_label;
-  public static String ObservableCollectionTreeContentProviderInfo_chooseEmptyMessage;
-  public static String ObservableCollectionTreeContentProviderInfo_chooseLabel;
-  public static String ObservableCollectionTreeContentProviderInfo_chooseMessagePrefix;
-  public static String ObservableFactoryInfo_emptyMessage;
-  public static String ObservableFactoryInfo_errorPrefix;
-  public static String ObservableFactoryInfo_label;
-  public static String ObservableMapLabelProviderInfo_emptyMessage;
-  public static String ObservableMapLabelProviderInfo_errorPrefix;
-  public static String ObservableMapLabelProviderInfo_title;
-  public static String SingleSelectionObservableInfo_viewerDelay;
-  public static String SwtObservableInfo_swtDelay;
-  public static String SwtTextEventsUiContentProvider_eventsLabel;
-  public static String TreeContentLabelProvidersUiContentProvider_childrenGroup;
-  public static String TreeContentLabelProvidersUiContentProvider_errorMessage1;
-  public static String TreeContentLabelProvidersUiContentProvider_errorMessage2;
-  public static String TreeContentLabelProvidersUiContentProvider_hasChildrenGroup;
-  public static String TreeContentLabelProvidersUiContentProvider_imageGroup;
-  public static String TreeContentLabelProvidersUiContentProvider_parentGroup;
-  public static String TreeContentLabelProvidersUiContentProvider_propertiesLabel;
-  public static String TreeContentLabelProvidersUiContentProvider_textGroup;
-  public static String TreeInputElementUiContentProvider_choodJFacePropertiesErrorMessage;
-  public static String TreeInputElementUiContentProvider_chooseDesigner;
-  public static String TreeInputElementUiContentProvider_chooseDesignerEmptyMessage;
-  public static String TreeInputElementUiContentProvider_chooseDesignerErrorPrefix;
-  public static String TreeInputElementUiContentProvider_chooseJFace;
-  public static String TreeInputElementUiContentProvider_chooseJFaceEmptyMessage;
-  public static String TreeInputElementUiContentProvider_chooseJFaceMessagePrefix;
-  public static String TreeInputElementUiContentProvider_chooseJFacePropertiesLabel;
-  public static String TreeInputElementUiContentProvider_designerSupport;
-  public static String TreeInputElementUiContentProvider_jfaceSupport;
-  public static String TreeStructureAdvisorInfo_errorMessage;
-  public static String TreeStructureAdvisorInfo_errorMessagePrefix;
-  public static String TreeStructureAdvisorInfo_label;
-  public static String TreeViewerInputBindingInfo_chooseEmptyMessage;
-  public static String TreeViewerInputBindingInfo_chooseErrorPrefix;
-  public static String TreeViewerInputBindingInfo_chooseLabel;
-  public static String TreeViewerInputBindingInfo_errorMessage;
-  public static String TreeViewerInputBindingInfo_inputLabel;
-  public static String TreeViewerInputBindingInfo_title;
-  public static String TreeViewerInputBindingInfo_viewerLabel;
-  public static String UpdateListStrategyInfo_title;
-  public static String UpdateListStrategyInfo_undefinedListStrategy;
-  public static String UpdateSetStrategyInfo_errUndefinedStratery;
-  public static String UpdateSetStrategyInfo_strategyLabel;
-  public static String UpdateStrategyInfo_chooseErrorMessage;
-  public static String UpdateStrategyInfo_chooseErrorMessagePrefix;
-  public static String UpdateStrategyInfo_chooseLabel;
-  public static String UpdateStrategyInfo_converterArgumentNotFound;
-  public static String UpdateStrategyInfo_errorMessage;
-  public static String UpdateStrategyInfo_errorMessagePrefix;
-  public static String UpdateStrategyPropertiesUiContentProvider_Target2Model;
-  public static String UpdateStrategyPropertiesUiContentProvider_Model2Target;
-  public static String UpdateStrategyPropertiesUiContentProvider_strategyProperties;
-  public static String UpdateStrategyPropertiesUiContentProvider_strategyPropertiesDots;
-  public static String UpdateValueStrategyInfo_title;
-  public static String UpdateValueStrategyInfo_undefinedValueStrategy;
-  public static String UpdateValueStrategyInfo_validatorArgumentNotFound;
-  public static String UpdateValueStrategyInfo_validatorErrorMessage;
-  public static String UpdateValueStrategyInfo_validatorErrorMessagePrefix;
-  public static String ViewerColumnsUiContentProvider_cellEditorColumn;
-  public static String ViewerColumnsUiContentProvider_configureEditingSupportLabel;
-  public static String ViewerColumnsUiContentProvider_configureEditingSupportMessage;
-  public static String ViewerColumnsUiContentProvider_configureEditingSupportProperties;
-  public static String ViewerColumnsUiContentProvider_deleteButton;
-  public static String ViewerColumnsUiContentProvider_editButton;
-  public static String ViewerColumnsUiContentProvider_elementPropertyColumn;
-  public static String ViewerColumnsUiContentProvider_viewerColumn;
-  public static String ViewerColumnsUiContentProvider_viewerColumns;
-  public static String ViewerColumnsUiContentProvider_viewerColumnsDots;
-  public static String ViewerInputBindingInfo_elementClassEmptyMessage;
-  public static String ViewerInputBindingInfo_elementClassErrorPrefix;
-  public static String ViewerInputBindingInfo_elementClassLabel;
-  public static String ViewerInputBindingInfo_elementClassPropertiesErrorMessage;
-  public static String ViewerInputBindingInfo_elementClassPropertiesLabel;
-  public static String ViewerInputBindingInfo_inputLabel;
-  public static String ViewerInputBindingInfo_message;
-  public static String ViewerInputBindingInfo_title;
-  public static String ViewerInputBindingInfo_viewerLabel;
-  public static String ViewerInputParser_advisorArgumentNotFound;
-  public static String ViewerInputParser_argumentNotFound;
-  public static String ViewerInputParser_cellEditorNotFound;
-  public static String ViewerInputParser_cellEditorPropertyNotFound;
-  public static String ViewerInputParser_contentProviderNotFound;
-  public static String ViewerInputParser_doubleInvocation;
-  public static String ViewerInputParser_editingSupportNotFound;
-  public static String ViewerInputParser_elementPropertyNotFound;
-  public static String ViewerInputParser_labelProviderArgumentNotFound;
-  public static String ViewerInputParser_modelViewerNotFound;
-  public static String ViewerInputParser_objectFactoryArgumentNotFound;
-  public static String ViewerInputParser_undefinedDataBindingContext;
-  public static String ViewerInputParser_viewerColumnNotFound;
-  public static String ViewerInputParser_viewerDoubleInvocation;
-  public static String ViewerInputParser_viewerInputArgumentNotFound;
-  public static String ViewerInputParser_viewerInputModelNotFound;
-  public static String ViewerInputParser_viewerNotFound;
-  public static String ViewerPropertySingleSelectionCodeSupport_argumentNotFound;
-  public static String VirtualEditingSupportInfo_cellEditorLabel;
-  public static String VirtualEditingSupportInfo_chooseBeanEmptyMessage;
-  public static String VirtualEditingSupportInfo_chooseBeanErrorPrefix;
-  public static String VirtualEditingSupportInfo_chooseBeanLabel;
-  public static String VirtualEditingSupportInfo_chooseBeanPropertiesErrorMessage;
-  public static String VirtualEditingSupportInfo_chooseBeanPropertiesLabel;
-  public static String VirtualEditingSupportInfo_chooseEmptyMessage;
-  public static String VirtualEditingSupportInfo_chooseErrorPrefix;
-  public static String VirtualEditingSupportInfo_chooseLabel;
-  public static String VirtualEditingSupportInfo_choosePropertiesLabel;
-  public static String VirtualEditingSupportInfo_choosePropertyMessage;
-  public static String VirtualEditingSupportInfo_elementProperty;
-  public static String WidgetsObserveTypeContainer_observableArgumentNotFound;
-  public static String WidgetsObserveTypeContainer_viewerArgumentNotFound;
-  public static String WidgetsObserveTypeContainer_widgetArgumentNotFound;
-  static {
-    // initialize resource bundle
-    NLS.initializeMessages(BUNDLE_NAME, Messages.class);
-  }
+	private static final String BUNDLE_NAME = "org.eclipse.wb.internal.rcp.databinding.Messages"; //$NON-NLS-1$
+	public static String AbstractWidgetPropertiesCodeSupport_widgetArgumentNotFound;
+	public static String AdvancedPropertyFilter_title;
+	public static String AutomaticDatabindingFirstPage_controllerFieldLabel;
+	public static String AutomaticDatabindingWizard_firstPageDescription;
+	public static String AutomaticDatabindingWizard_firstPageTitle;
+	public static String AutomaticDatabindingWizard_secondPageDescription;
+	public static String AutomaticDatabindingWizard_secondPageTitle;
+	public static String AutomaticDatabindingWizard_windowTitle;
+	public static String BeanPropertiesCodeSupport_argumentNotFound;
+	public static String BeanPropertiesCodeSupport_propertyNotFound;
+	public static String BeansObserveTypeContainer_argumentNotFound;
+	public static String BeansObserveTypeContainer_beanPropertyNotFound;
+	public static String BeansObserveTypeContainer_domainObservableArgumentNotFound;
+	public static String BeansObserveTypeContainer_masterObservableArgumentNotFound;
+	public static String BeansObserveTypeContainer_masterObservableNotFound;
+	public static String BindingInfo_listenerMessage;
+	public static String BindingInfo_listenerTitle;
+	public static String BindingInfo_modelLabel;
+	public static String BindingInfo_targetLabel;
+	public static String BindingInfo_undefinedBindingField;
+	public static String CheckedElementsObservableInfo_emptyMessage;
+	public static String CheckedElementsObservableInfo_errorPrefix;
+	public static String CheckedElementsObservableInfo_label;
+	public static String DataBindingContextInfo_modelArgumentNotFound;
+	public static String DataBindingContextInfo_targetArgumentNotFound;
+	public static String DataBindingContextInfo_undefinedStrategy;
+	public static String DatabindingsProvider_bindingColumn;
+	public static String DatabindingsProvider_convertToController;
+	public static String DatabindingsProvider_filterAllTypes;
+	public static String DatabindingsProvider_modelColumn;
+	public static String DatabindingsProvider_modelStrategyColumn;
+	public static String DatabindingsProvider_targetColumn;
+	public static String DatabindingsProvider_targetStrategyColumn;
+	public static String DbCodeGenerationPreferencePage_27;
+	public static String DbCodeGenerationPreferencePage_28;
+	public static String DbCodeGenerationPreferencePage_29;
+	public static String DbCodeGenerationPreferencePage_30;
+	public static String DbCodeGenerationPreferencePage_31;
+	public static String DbCodeGenerationPreferencePage_32;
+	public static String DbCodeGenerationPreferencePage_33;
+	public static String DbCodeGenerationPreferencePage_34;
+	public static String DbCodeGenerationPreferencePage_35;
+	public static String DbCodeGenerationPreferencePage_36;
+	public static String DbCodeGenerationPreferencePage_37;
+	public static String DbCodeGenerationPreferencePage_38;
+	public static String DbCodeGenerationPreferencePage_39;
+	public static String DbCodeGenerationPreferencePage_40;
+	public static String DbCodeGenerationPreferencePage_addDbIntoComposite;
+	public static String DbCodeGenerationPreferencePage_addDbInvocation;
+	public static String DbCodeGenerationPreferencePage_assignDbReturnValue;
+	public static String DbCodeGenerationPreferencePage_dbMethodAccess;
+	public static String DbCodeGenerationPreferencePage_defaultValueStrategyGroup;
+	public static String DbCodeGenerationPreferencePage_defaultValueStrategyLabel;
+	public static String DbCodeGenerationPreferencePage_dontUseDeprecatedBeansObservables;
+	public static String DbCodeGenerationPreferencePage_encloseIntoTryCatch;
+	public static String DbCodeGenerationPreferencePage_generate13Observables;
+	public static String DbCodeGenerationPreferencePage_preview;
+	public static String DbCodeGenerationPreferencePage_updateListStrategy;
+	public static String DbCodeGenerationPreferencePage_updateSetStrategy;
+	public static String DbCodeGenerationPreferencePage_useViewerSupport;
+	public static String DetailBeanObservableInfo_errorMessage;
+	public static String DetailBeanObservableInfo_errorMessagePrefix;
+	public static String DetailBeanObservableInfo_objectLabel;
+	public static String DetailBeanObservableInfo_propertiesErrorMessage;
+	public static String DetailBeanObservableInfo_propertiesLabel;
+	public static String DetailPropertyCodeSupport_widgetArgumentNotFound;
+	public static String LabelProviderInfo_errorMessage;
+	public static String LabelProviderInfo_errorMessagePrefix;
+	public static String LabelProviderInfo_label;
+	public static String ObservableCollectionTreeContentProviderInfo_chooseEmptyMessage;
+	public static String ObservableCollectionTreeContentProviderInfo_chooseLabel;
+	public static String ObservableCollectionTreeContentProviderInfo_chooseMessagePrefix;
+	public static String ObservableFactoryInfo_emptyMessage;
+	public static String ObservableFactoryInfo_errorPrefix;
+	public static String ObservableFactoryInfo_label;
+	public static String ObservableMapLabelProviderInfo_emptyMessage;
+	public static String ObservableMapLabelProviderInfo_errorPrefix;
+	public static String ObservableMapLabelProviderInfo_title;
+	public static String SingleSelectionObservableInfo_viewerDelay;
+	public static String SwtObservableInfo_swtDelay;
+	public static String SwtTextEventsUiContentProvider_eventsLabel;
+	public static String TreeContentLabelProvidersUiContentProvider_childrenGroup;
+	public static String TreeContentLabelProvidersUiContentProvider_errorMessage1;
+	public static String TreeContentLabelProvidersUiContentProvider_errorMessage2;
+	public static String TreeContentLabelProvidersUiContentProvider_hasChildrenGroup;
+	public static String TreeContentLabelProvidersUiContentProvider_imageGroup;
+	public static String TreeContentLabelProvidersUiContentProvider_parentGroup;
+	public static String TreeContentLabelProvidersUiContentProvider_propertiesLabel;
+	public static String TreeContentLabelProvidersUiContentProvider_textGroup;
+	public static String TreeInputElementUiContentProvider_choodJFacePropertiesErrorMessage;
+	public static String TreeInputElementUiContentProvider_chooseDesigner;
+	public static String TreeInputElementUiContentProvider_chooseDesignerEmptyMessage;
+	public static String TreeInputElementUiContentProvider_chooseDesignerErrorPrefix;
+	public static String TreeInputElementUiContentProvider_chooseJFace;
+	public static String TreeInputElementUiContentProvider_chooseJFaceEmptyMessage;
+	public static String TreeInputElementUiContentProvider_chooseJFaceMessagePrefix;
+	public static String TreeInputElementUiContentProvider_chooseJFacePropertiesLabel;
+	public static String TreeInputElementUiContentProvider_designerSupport;
+	public static String TreeInputElementUiContentProvider_jfaceSupport;
+	public static String TreeStructureAdvisorInfo_errorMessage;
+	public static String TreeStructureAdvisorInfo_errorMessagePrefix;
+	public static String TreeStructureAdvisorInfo_label;
+	public static String TreeViewerInputBindingInfo_chooseEmptyMessage;
+	public static String TreeViewerInputBindingInfo_chooseErrorPrefix;
+	public static String TreeViewerInputBindingInfo_chooseLabel;
+	public static String TreeViewerInputBindingInfo_errorMessage;
+	public static String TreeViewerInputBindingInfo_inputLabel;
+	public static String TreeViewerInputBindingInfo_title;
+	public static String TreeViewerInputBindingInfo_viewerLabel;
+	public static String UpdateListStrategyInfo_title;
+	public static String UpdateListStrategyInfo_undefinedListStrategy;
+	public static String UpdateSetStrategyInfo_errUndefinedStratery;
+	public static String UpdateSetStrategyInfo_strategyLabel;
+	public static String UpdateStrategyInfo_chooseErrorMessage;
+	public static String UpdateStrategyInfo_chooseErrorMessagePrefix;
+	public static String UpdateStrategyInfo_chooseLabel;
+	public static String UpdateStrategyInfo_converterArgumentNotFound;
+	public static String UpdateStrategyInfo_errorMessage;
+	public static String UpdateStrategyInfo_errorMessagePrefix;
+	public static String UpdateStrategyPropertiesUiContentProvider_Target2Model;
+	public static String UpdateStrategyPropertiesUiContentProvider_Model2Target;
+	public static String UpdateStrategyPropertiesUiContentProvider_strategyProperties;
+	public static String UpdateStrategyPropertiesUiContentProvider_strategyPropertiesDots;
+	public static String UpdateValueStrategyInfo_title;
+	public static String UpdateValueStrategyInfo_undefinedValueStrategy;
+	public static String UpdateValueStrategyInfo_validatorArgumentNotFound;
+	public static String UpdateValueStrategyInfo_validatorErrorMessage;
+	public static String UpdateValueStrategyInfo_validatorErrorMessagePrefix;
+	public static String ViewerColumnsUiContentProvider_cellEditorColumn;
+	public static String ViewerColumnsUiContentProvider_configureEditingSupportLabel;
+	public static String ViewerColumnsUiContentProvider_configureEditingSupportMessage;
+	public static String ViewerColumnsUiContentProvider_configureEditingSupportProperties;
+	public static String ViewerColumnsUiContentProvider_deleteButton;
+	public static String ViewerColumnsUiContentProvider_editButton;
+	public static String ViewerColumnsUiContentProvider_elementPropertyColumn;
+	public static String ViewerColumnsUiContentProvider_viewerColumn;
+	public static String ViewerColumnsUiContentProvider_viewerColumns;
+	public static String ViewerColumnsUiContentProvider_viewerColumnsDots;
+	public static String ViewerInputBindingInfo_elementClassEmptyMessage;
+	public static String ViewerInputBindingInfo_elementClassErrorPrefix;
+	public static String ViewerInputBindingInfo_elementClassLabel;
+	public static String ViewerInputBindingInfo_elementClassPropertiesErrorMessage;
+	public static String ViewerInputBindingInfo_elementClassPropertiesLabel;
+	public static String ViewerInputBindingInfo_inputLabel;
+	public static String ViewerInputBindingInfo_message;
+	public static String ViewerInputBindingInfo_title;
+	public static String ViewerInputBindingInfo_viewerLabel;
+	public static String ViewerInputParser_advisorArgumentNotFound;
+	public static String ViewerInputParser_argumentNotFound;
+	public static String ViewerInputParser_cellEditorNotFound;
+	public static String ViewerInputParser_cellEditorPropertyNotFound;
+	public static String ViewerInputParser_contentProviderNotFound;
+	public static String ViewerInputParser_doubleInvocation;
+	public static String ViewerInputParser_editingSupportNotFound;
+	public static String ViewerInputParser_elementPropertyNotFound;
+	public static String ViewerInputParser_labelProviderArgumentNotFound;
+	public static String ViewerInputParser_modelViewerNotFound;
+	public static String ViewerInputParser_objectFactoryArgumentNotFound;
+	public static String ViewerInputParser_undefinedDataBindingContext;
+	public static String ViewerInputParser_viewerColumnNotFound;
+	public static String ViewerInputParser_viewerDoubleInvocation;
+	public static String ViewerInputParser_viewerInputArgumentNotFound;
+	public static String ViewerInputParser_viewerInputModelNotFound;
+	public static String ViewerInputParser_viewerNotFound;
+	public static String ViewerPropertySingleSelectionCodeSupport_argumentNotFound;
+	public static String VirtualEditingSupportInfo_cellEditorLabel;
+	public static String VirtualEditingSupportInfo_chooseBeanEmptyMessage;
+	public static String VirtualEditingSupportInfo_chooseBeanErrorPrefix;
+	public static String VirtualEditingSupportInfo_chooseBeanLabel;
+	public static String VirtualEditingSupportInfo_chooseBeanPropertiesErrorMessage;
+	public static String VirtualEditingSupportInfo_chooseBeanPropertiesLabel;
+	public static String VirtualEditingSupportInfo_chooseEmptyMessage;
+	public static String VirtualEditingSupportInfo_chooseErrorPrefix;
+	public static String VirtualEditingSupportInfo_chooseLabel;
+	public static String VirtualEditingSupportInfo_choosePropertiesLabel;
+	public static String VirtualEditingSupportInfo_choosePropertyMessage;
+	public static String VirtualEditingSupportInfo_elementProperty;
+	public static String WidgetsObserveTypeContainer_observableArgumentNotFound;
+	public static String WidgetsObserveTypeContainer_viewerArgumentNotFound;
+	public static String WidgetsObserveTypeContainer_widgetArgumentNotFound;
+	static {
+		// initialize resource bundle
+		NLS.initializeMessages(BUNDLE_NAME, Messages.class);
+	}
 
-  private Messages() {
-  }
+	private Messages() {
+	}
 }
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/AbstractBindingInfo.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/AbstractBindingInfo.java
index 8c7c28349..a574e62ad 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/AbstractBindingInfo.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/AbstractBindingInfo.java
@@ -28,63 +28,63 @@
  * @coverage bindings.rcp.model
  */
 public abstract class AbstractBindingInfo extends AstObjectInfo implements IBindingInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parser
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * This method is invoked as last step of parsing.
-   */
-  public void postParse() throws Exception {
-    create();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parser
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * This method is invoked as last step of parsing.
+	 */
+	public void postParse() throws Exception {
+		create();
+	}
 
-  public void create() throws Exception {
-    ((BindableInfo) getTarget()).createBinding(this);
-    ((BindableInfo) getTargetProperty()).createBinding(this);
-    ((BindableInfo) getModel()).createBinding(this);
-    ((BindableInfo) getModelProperty()).createBinding(this);
-  }
+	public void create() throws Exception {
+		((BindableInfo) getTarget()).createBinding(this);
+		((BindableInfo) getTargetProperty()).createBinding(this);
+		((BindableInfo) getModel()).createBinding(this);
+		((BindableInfo) getModelProperty()).createBinding(this);
+	}
 
-  public void delete() throws Exception {
-    ((BindableInfo) getTarget()).deleteBinding(this);
-    ((BindableInfo) getTargetProperty()).deleteBinding(this);
-    ((BindableInfo) getModel()).deleteBinding(this);
-    ((BindableInfo) getModelProperty()).deleteBinding(this);
-  }
+	public void delete() throws Exception {
+		((BindableInfo) getTarget()).deleteBinding(this);
+		((BindableInfo) getTargetProperty()).deleteBinding(this);
+		((BindableInfo) getModel()).deleteBinding(this);
+		((BindableInfo) getModelProperty()).deleteBinding(this);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Definition
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return source code for find definition into source code.
-   */
-  public abstract String getDefinitionSource(DatabindingsProvider provider) throws Exception;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Definition
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return source code for find definition into source code.
+	 */
+	public abstract String getDefinitionSource(DatabindingsProvider provider) throws Exception;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Create {@link IUiContentProvider} content providers for edit this model.
-   */
-  public abstract void createContentProviders(List<IUiContentProvider> providers,
-      IPageListener listener,
-      DatabindingsProvider provider) throws Exception;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Create {@link IUiContentProvider} content providers for edit this model.
+	 */
+	public abstract void createContentProviders(List<IUiContentProvider> providers,
+			IPageListener listener,
+			DatabindingsProvider provider) throws Exception;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Add source code association with this model.
-   */
-  public abstract void addSourceCode(DataBindingContextInfo context,
-      List<String> lines,
-      CodeGenerationSupport generationSupport) throws Exception;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Add source code association with this model.
+	 */
+	public abstract void addSourceCode(DataBindingContextInfo context,
+			List<String> lines,
+			CodeGenerationSupport generationSupport) throws Exception;
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/BindableInfo.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/BindableInfo.java
index 020bdc089..55ce81a13 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/BindableInfo.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/BindableInfo.java
@@ -30,152 +30,152 @@
  * @coverage bindings.rcp.model
  */
 public abstract class BindableInfo implements IObserveInfo {
-  private Class<?> m_objectType;
-  private IReferenceProvider m_referenceProvider;
-  private int m_bindingDecorationCorner;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public BindableInfo(Class<?> objectType, String reference) {
-    this(objectType, new StringReferenceProvider(reference));
-  }
-
-  public BindableInfo(Class<?> objectType, IReferenceProvider referenceProvider) {
-    m_objectType = objectType;
-    m_referenceProvider = referenceProvider;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return {@link Class} type of bindable object or property.
-   */
-  public final Class<?> getObjectType() {
-    return m_objectType;
-  }
-
-  /**
-   * Sets {@link Class} type of bindable object or property.
-   */
-  protected final void setObjectType(Class<?> objectType) {
-    m_objectType = objectType;
-  }
-
-  /**
-   * @return {@link IReferenceProvider} reference provider on bindable object or property.
-   */
-  public final IReferenceProvider getReferenceProvider() {
-    return m_referenceProvider;
-  }
-
-  /**
-   * Sets {@link IReferenceProvider} reference provider on bindable object or property.
-   */
-  public final void setReferenceProvider(IReferenceProvider referenceProvider) {
-    m_referenceProvider = referenceProvider;
-  }
-
-  /**
-   * @return the reference on bindable object or property.
-   */
-  public final String getReference() throws Exception {
-    return m_referenceProvider.getReference();
-  }
-
-  /**
-   * @return {@link BindableInfo} object that represented given reference or <code>null</code>.
-   */
-  public final BindableInfo resolveReference(String reference) throws Exception {
-    if (reference.equals(getReference())) {
-      return this;
-    }
-    for (BindableInfo child : getChildren()) {
-      BindableInfo result = child.resolveReference(reference);
-      if (result != null) {
-        return result;
-      }
-    }
-    return null;
-  }
-
-  /**
-   * @return {@link BindableInfo} property that association with given reference or
-   *         <code>null</code>.
-   */
-  public BindableInfo resolvePropertyReference(String reference) throws Exception {
-    throw new UnsupportedOperationException();
-  }
-
-  /**
-   * @return {@link BindableInfo} collection with sub models.
-   */
-  protected abstract List<BindableInfo> getChildren();
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Creation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return {@link IObservableFactory} for create observable.
-   */
-  public IObservableFactory getObservableFactory() throws Exception {
-    throw new UnsupportedOperationException();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  //
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private List<AbstractBindingInfo> m_bindings;
-
-  /**
-   * This method is invoked as last step of create new observable.
-   */
-  public void createBinding(AbstractBindingInfo binding) throws Exception {
-    if (m_bindings == null) {
-      m_bindings = Lists.newArrayList();
-    }
-    m_bindings.add(binding);
-    updateBindingDecoration();
-  }
-
-  public void deleteBinding(AbstractBindingInfo binding) throws Exception {
-    m_bindings.remove(binding);
-    if (m_bindings.isEmpty()) {
-      m_bindings = null;
-    }
-    updateBindingDecoration();
-  }
-
-  public List<AbstractBindingInfo> getBindings() {
-    if (m_bindings == null) {
-      return Collections.emptyList();
-    }
-    return m_bindings;
-  }
-
-  protected final void setBindingDecoration(int decorationCorner) {
-    m_bindingDecorationCorner = decorationCorner;
-  }
-
-  private void updateBindingDecoration() throws Exception {
-    if (m_bindingDecorationCorner != 0) {
-      IObservePresentation presentation = getPresentation();
-      if (presentation instanceof IObservePresentationDecorator) {
-        IObservePresentationDecorator presentationDecorator =
-            (IObservePresentationDecorator) presentation;
-        presentationDecorator.setBindingDecorator(CollectionUtils.isEmpty(m_bindings)
-            ? 0
-            : m_bindingDecorationCorner);
-      }
-    }
-  }
+	private Class<?> m_objectType;
+	private IReferenceProvider m_referenceProvider;
+	private int m_bindingDecorationCorner;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public BindableInfo(Class<?> objectType, String reference) {
+		this(objectType, new StringReferenceProvider(reference));
+	}
+
+	public BindableInfo(Class<?> objectType, IReferenceProvider referenceProvider) {
+		m_objectType = objectType;
+		m_referenceProvider = referenceProvider;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return {@link Class} type of bindable object or property.
+	 */
+	public final Class<?> getObjectType() {
+		return m_objectType;
+	}
+
+	/**
+	 * Sets {@link Class} type of bindable object or property.
+	 */
+	protected final void setObjectType(Class<?> objectType) {
+		m_objectType = objectType;
+	}
+
+	/**
+	 * @return {@link IReferenceProvider} reference provider on bindable object or property.
+	 */
+	public final IReferenceProvider getReferenceProvider() {
+		return m_referenceProvider;
+	}
+
+	/**
+	 * Sets {@link IReferenceProvider} reference provider on bindable object or property.
+	 */
+	public final void setReferenceProvider(IReferenceProvider referenceProvider) {
+		m_referenceProvider = referenceProvider;
+	}
+
+	/**
+	 * @return the reference on bindable object or property.
+	 */
+	public final String getReference() throws Exception {
+		return m_referenceProvider.getReference();
+	}
+
+	/**
+	 * @return {@link BindableInfo} object that represented given reference or <code>null</code>.
+	 */
+	public final BindableInfo resolveReference(String reference) throws Exception {
+		if (reference.equals(getReference())) {
+			return this;
+		}
+		for (BindableInfo child : getChildren()) {
+			BindableInfo result = child.resolveReference(reference);
+			if (result != null) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * @return {@link BindableInfo} property that association with given reference or
+	 *         <code>null</code>.
+	 */
+	public BindableInfo resolvePropertyReference(String reference) throws Exception {
+		throw new UnsupportedOperationException();
+	}
+
+	/**
+	 * @return {@link BindableInfo} collection with sub models.
+	 */
+	protected abstract List<BindableInfo> getChildren();
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Creation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return {@link IObservableFactory} for create observable.
+	 */
+	public IObservableFactory getObservableFactory() throws Exception {
+		throw new UnsupportedOperationException();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	//
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private List<AbstractBindingInfo> m_bindings;
+
+	/**
+	 * This method is invoked as last step of create new observable.
+	 */
+	public void createBinding(AbstractBindingInfo binding) throws Exception {
+		if (m_bindings == null) {
+			m_bindings = Lists.newArrayList();
+		}
+		m_bindings.add(binding);
+		updateBindingDecoration();
+	}
+
+	public void deleteBinding(AbstractBindingInfo binding) throws Exception {
+		m_bindings.remove(binding);
+		if (m_bindings.isEmpty()) {
+			m_bindings = null;
+		}
+		updateBindingDecoration();
+	}
+
+	public List<AbstractBindingInfo> getBindings() {
+		if (m_bindings == null) {
+			return Collections.emptyList();
+		}
+		return m_bindings;
+	}
+
+	protected final void setBindingDecoration(int decorationCorner) {
+		m_bindingDecorationCorner = decorationCorner;
+	}
+
+	private void updateBindingDecoration() throws Exception {
+		if (m_bindingDecorationCorner != 0) {
+			IObservePresentation presentation = getPresentation();
+			if (presentation instanceof IObservePresentationDecorator) {
+				IObservePresentationDecorator presentationDecorator =
+						(IObservePresentationDecorator) presentation;
+				presentationDecorator.setBindingDecorator(CollectionUtils.isEmpty(m_bindings)
+						? 0
+								: m_bindingDecorationCorner);
+			}
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/ControllerSupport.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/ControllerSupport.java
index f0e3276b3..fba30231b 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/ControllerSupport.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/ControllerSupport.java
@@ -90,668 +90,668 @@
  * @coverage bindings.rcp.model
  */
 public class ControllerSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Configure
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static void configure(final DatabindingsProvider provider) throws Exception {
-    // detect controller
-    final StringBuffer controllerClass = new StringBuffer();
-    provider.getRootNode().accept(new ASTVisitor() {
-      @Override
-      public void endVisit(ClassInstanceCreation creation) {
-        String className = AstNodeUtils.getFullyQualifiedName(creation, false);
-        List<Expression> arguments = DomGenerics.arguments(creation);
-        if (className.endsWith("Controller")
-            && arguments.size() == 1
-            && arguments.get(0) instanceof ThisExpression) {
-          provider.setController(true);
-          controllerClass.append(className);
-        }
-      }
-    });
-    //
-    if (provider.isController()) {
-      // create controller ASTEditor
-      IType controllerType =
-          provider.getAstEditor().getJavaProject().findType(controllerClass.toString());
-      ICompilationUnit controllerUnit = controllerType.getCompilationUnit();
-      AstEditor astEditor = new AstEditor(controllerUnit);
-      // create controller EditorState
-      EditorState thisEditorState = EditorState.get(provider.getAstEditor());
-      EditorState controllerEditorState = EditorState.get(astEditor);
-      controllerEditorState.initialize(
-          thisEditorState.getToolkitId(),
-          thisEditorState.getEditorLoader());
-      controllerEditorState.setFlowDescription(thisEditorState.getFlowDescription());
-      // prepare controller root AST node
-      TypeDeclaration rootNode = DomGenerics.types(astEditor.getAstUnit()).get(0);
-      // prepare reference to this into controller
-      String rootClassName = AstNodeUtils.getFullyQualifiedName(provider.getRootNode(), false);
-      for (FieldDeclaration field : rootNode.getFields()) {
-        org.eclipse.jdt.core.dom.Type type = field.getType();
-        if (type == null || AstNodeUtils.getTypeBinding(type) == null) {
-          continue;
-        }
-        //
-        String fieldClassName = AstNodeUtils.getFullyQualifiedName(type, false);
-        if (rootClassName.equals(fieldClassName)) {
-          VariableDeclarationFragment fragment = DomGenerics.fragments(field).get(0);
-          provider.setControllerViewerField(fragment.getName().getIdentifier());
-          break;
-        }
-      }
-      // replace to controller data
-      provider.setAstEditor(astEditor);
-      provider.setRootNode(rootNode);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Configure
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static void configure(final DatabindingsProvider provider) throws Exception {
+		// detect controller
+		final StringBuffer controllerClass = new StringBuffer();
+		provider.getRootNode().accept(new ASTVisitor() {
+			@Override
+			public void endVisit(ClassInstanceCreation creation) {
+				String className = AstNodeUtils.getFullyQualifiedName(creation, false);
+				List<Expression> arguments = DomGenerics.arguments(creation);
+				if (className.endsWith("Controller")
+						&& arguments.size() == 1
+						&& arguments.get(0) instanceof ThisExpression) {
+					provider.setController(true);
+					controllerClass.append(className);
+				}
+			}
+		});
+		//
+		if (provider.isController()) {
+			// create controller ASTEditor
+			IType controllerType =
+					provider.getAstEditor().getJavaProject().findType(controllerClass.toString());
+			ICompilationUnit controllerUnit = controllerType.getCompilationUnit();
+			AstEditor astEditor = new AstEditor(controllerUnit);
+			// create controller EditorState
+			EditorState thisEditorState = EditorState.get(provider.getAstEditor());
+			EditorState controllerEditorState = EditorState.get(astEditor);
+			controllerEditorState.initialize(
+					thisEditorState.getToolkitId(),
+					thisEditorState.getEditorLoader());
+			controllerEditorState.setFlowDescription(thisEditorState.getFlowDescription());
+			// prepare controller root AST node
+			TypeDeclaration rootNode = DomGenerics.types(astEditor.getAstUnit()).get(0);
+			// prepare reference to this into controller
+			String rootClassName = AstNodeUtils.getFullyQualifiedName(provider.getRootNode(), false);
+			for (FieldDeclaration field : rootNode.getFields()) {
+				org.eclipse.jdt.core.dom.Type type = field.getType();
+				if (type == null || AstNodeUtils.getTypeBinding(type) == null) {
+					continue;
+				}
+				//
+				String fieldClassName = AstNodeUtils.getFullyQualifiedName(type, false);
+				if (rootClassName.equals(fieldClassName)) {
+					VariableDeclarationFragment fragment = DomGenerics.fragments(field).get(0);
+					provider.setControllerViewerField(fragment.getName().getIdentifier());
+					break;
+				}
+			}
+			// replace to controller data
+			provider.setAstEditor(astEditor);
+			provider.setRootNode(rootNode);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Reference
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static String getReference(DatabindingsProvider provider, JavaInfo javaInfo)
-      throws Exception {
-    String localReference = JavaInfoReferenceProvider.getReference(javaInfo);
-    if (localReference != null) {
-      if ("this".equals(localReference)) {
-        return provider.getControllerViewerField();
-      }
-      MethodDeclaration[] methods = JavaInfoUtils.getTypeDeclaration(javaInfo).getMethods();
-      for (MethodDeclaration method : methods) {
-        String methodName = method.getName().getIdentifier();
-        if (methodName.startsWith("get")
-            && method.parameters().isEmpty()
-            && Modifier.isPublic(method.getModifiers())) {
-          final Expression[] expressions = new Expression[1];
-          method.accept(new ASTVisitor() {
-            @Override
-            public void endVisit(ReturnStatement node) {
-              expressions[0] = node.getExpression();
-            }
-          });
-          if (expressions[0] != null && AstNodeUtils.isVariable(expressions[0])) {
-            if (localReference.equals(CoreUtils.getNodeReference(expressions[0]))) {
-              return provider.getControllerViewerField() + "." + methodName + "()";
-            }
-          }
-        }
-      }
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Reference
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static String getReference(DatabindingsProvider provider, JavaInfo javaInfo)
+			throws Exception {
+		String localReference = JavaInfoReferenceProvider.getReference(javaInfo);
+		if (localReference != null) {
+			if ("this".equals(localReference)) {
+				return provider.getControllerViewerField();
+			}
+			MethodDeclaration[] methods = JavaInfoUtils.getTypeDeclaration(javaInfo).getMethods();
+			for (MethodDeclaration method : methods) {
+				String methodName = method.getName().getIdentifier();
+				if (methodName.startsWith("get")
+						&& method.parameters().isEmpty()
+						&& Modifier.isPublic(method.getModifiers())) {
+					final Expression[] expressions = new Expression[1];
+					method.accept(new ASTVisitor() {
+						@Override
+						public void endVisit(ReturnStatement node) {
+							expressions[0] = node.getExpression();
+						}
+					});
+					if (expressions[0] != null && AstNodeUtils.isVariable(expressions[0])) {
+						if (localReference.equals(CoreUtils.getNodeReference(expressions[0]))) {
+							return provider.getControllerViewerField() + "." + methodName + "()";
+						}
+					}
+				}
+			}
+		}
+		return null;
+	}
 
-  /**
-   * Create for given {@link JavaInfo} public getter method.
-   */
-  public static String ensureControllerReference(DatabindingsProvider provider,
-      JavaInfo javaInfo,
-      boolean commit) throws Exception {
-    // prepare target
-    TypeDeclaration typeDeclaration = JavaInfoUtils.getTypeDeclaration(javaInfo);
-    BodyDeclarationTarget target = new BodyDeclarationTarget(typeDeclaration, null, false);
-    // prepare method name
-    String reference = JavaInfoReferenceProvider.getReference(javaInfo);
-    String fieldPrefix = JavaCore.getOption(JavaCore.CODEASSIST_FIELD_PREFIXES);
-    fieldPrefix = fieldPrefix == null ? "m_" : fieldPrefix;
-    String methodName =
-        "get" + StringUtils.capitalize(StringUtils.removeStart(reference, fieldPrefix)) + "()";
-    // prepare method header
-    String header =
-        "public " + javaInfo.getDescription().getComponentClass().getName() + " " + methodName;
-    // prepare method lines
-    List<String> methodLines = ImmutableList.of("return " + reference + ";");
-    // add method
-    javaInfo.getEditor().addMethodDeclaration(header, methodLines, target);
-    if (commit) {
-      javaInfo.getEditor().commitChanges();
-    }
-    // controller reference
-    return provider.getControllerViewerField() + "." + methodName;
-  }
+	/**
+	 * Create for given {@link JavaInfo} public getter method.
+	 */
+	public static String ensureControllerReference(DatabindingsProvider provider,
+			JavaInfo javaInfo,
+			boolean commit) throws Exception {
+		// prepare target
+		TypeDeclaration typeDeclaration = JavaInfoUtils.getTypeDeclaration(javaInfo);
+		BodyDeclarationTarget target = new BodyDeclarationTarget(typeDeclaration, null, false);
+		// prepare method name
+		String reference = JavaInfoReferenceProvider.getReference(javaInfo);
+		String fieldPrefix = JavaCore.getOption(JavaCore.CODEASSIST_FIELD_PREFIXES);
+		fieldPrefix = fieldPrefix == null ? "m_" : fieldPrefix;
+		String methodName =
+				"get" + StringUtils.capitalize(StringUtils.removeStart(reference, fieldPrefix)) + "()";
+		// prepare method header
+		String header =
+				"public " + javaInfo.getDescription().getComponentClass().getName() + " " + methodName;
+		// prepare method lines
+		List<String> methodLines = ImmutableList.of("return " + reference + ";");
+		// add method
+		javaInfo.getEditor().addMethodDeclaration(header, methodLines, target);
+		if (commit) {
+			javaInfo.getEditor().commitChanges();
+		}
+		// controller reference
+		return provider.getControllerViewerField() + "." + methodName;
+	}
 
-  /**
-   * Convert controller widget reference to host widget reference.
-   */
-  public static Expression convertWidgetBindableExpression(DatabindingsProvider provider,
-      List<WidgetBindableInfo> observables,
-      Expression expression) throws Exception {
-    if (provider.isController()) {
-      if (expression instanceof MethodInvocation) {
-        MethodInvocation invocation = (MethodInvocation) expression;
-        String reference = CoreUtils.getNodeReference(invocation.getExpression());
-        //
-        if (provider.getControllerViewerField().equals(reference)) {
-          TypeDeclaration rootNode =
-              JavaInfoUtils.getTypeDeclaration(observables.get(0).getJavaInfo());
-          MethodDeclaration method =
-              AstNodeUtils.getMethodByName(rootNode, invocation.getName().getIdentifier());
-          //
-          final Expression[] expressions = new Expression[1];
-          method.accept(new ASTVisitor() {
-            @Override
-            public void endVisit(ReturnStatement node) {
-              expressions[0] = node.getExpression();
-            }
-          });
-          expression = expressions[0];
-        }
-      } else if (provider.getControllerViewerField().equals(
-          CoreUtils.getSafeNodeReference(expression))) {
-        return null;
-      }
-    }
-    return expression;
-  }
+	/**
+	 * Convert controller widget reference to host widget reference.
+	 */
+	public static Expression convertWidgetBindableExpression(DatabindingsProvider provider,
+			List<WidgetBindableInfo> observables,
+			Expression expression) throws Exception {
+		if (provider.isController()) {
+			if (expression instanceof MethodInvocation) {
+				MethodInvocation invocation = (MethodInvocation) expression;
+				String reference = CoreUtils.getNodeReference(invocation.getExpression());
+				//
+				if (provider.getControllerViewerField().equals(reference)) {
+					TypeDeclaration rootNode =
+							JavaInfoUtils.getTypeDeclaration(observables.get(0).getJavaInfo());
+					MethodDeclaration method =
+							AstNodeUtils.getMethodByName(rootNode, invocation.getName().getIdentifier());
+					//
+					final Expression[] expressions = new Expression[1];
+					method.accept(new ASTVisitor() {
+						@Override
+						public void endVisit(ReturnStatement node) {
+							expressions[0] = node.getExpression();
+						}
+					});
+					expression = expressions[0];
+				}
+			} else if (provider.getControllerViewerField().equals(
+					CoreUtils.getSafeNodeReference(expression))) {
+				return null;
+			}
+		}
+		return expression;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Save
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @SuppressWarnings("unchecked")
-  public static void doSave(AstEditor editor, JavaInfo rootJavaInfo) throws Exception {
-    // save changes
-    editor.commitChanges();
-    editor.getModelUnit().getBuffer().save(null, true);
-    // reset modification stamp for controller file
-    IResource resource = editor.getModelUnit().getResource();
-    Map<IResource, Long> dependencies =
-        (Map<IResource, Long>) rootJavaInfo.getEditor().getGlobalValue("JavaInfo.dependencies");
-    dependencies.put(resource, resource.getModificationStamp());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Save
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@SuppressWarnings("unchecked")
+	public static void doSave(AstEditor editor, JavaInfo rootJavaInfo) throws Exception {
+		// save changes
+		editor.commitChanges();
+		editor.getModelUnit().getBuffer().save(null, true);
+		// reset modification stamp for controller file
+		IResource resource = editor.getModelUnit().getResource();
+		Map<IResource, Long> dependencies =
+				(Map<IResource, Long>) rootJavaInfo.getEditor().getGlobalValue("JavaInfo.dependencies");
+		dependencies.put(resource, resource.getModificationStamp());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AutoWizard
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static String automaticWizardPerformSubstitutions(AutomaticDatabindingFirstPage firstWizardPage,
-      String code,
-      ImportsManager imports,
-      IJavaProject javaProject,
-      ClassLoader classLoader,
-      Class<?> beanClass,
-      List<PropertyAdapter> properties,
-      Map<PropertyAdapter, AbstractDescriptor[]> propertyToEditor) throws Exception {
-    InputStream controllerStream = Activator.getFile("templates/Controller.jvt");
-    String controllerCode = IOUtils.toString(controllerStream);
-    IOUtils.closeQuietly(controllerStream);
-    //
-    String hostClassName = ClassUtils.getShortClassName(firstWizardPage.getTypeName());
-    String hostVariable = StringUtils.uncapitalize(hostClassName);
-    String hostField = "m_" + hostVariable;
-    //
-    controllerCode = StringUtils.replace(controllerCode, "%HostClass%", hostClassName);
-    controllerCode = StringUtils.replace(controllerCode, "%HostVariable%", hostVariable);
-    controllerCode = StringUtils.replace(controllerCode, "%HostField%", hostField);
-    //
-    String begin = "";
-    String end = "\t\t";
-    String widgetStart = "";
-    boolean blockMode = SwtDatabindingProvider.useBlockMode();
-    if (blockMode) {
-      begin = "\t\t{\r\n";
-      end = "\t\t}";
-      widgetStart = "\t";
-    }
-    // prepare imports
-    Collection<String> hostImportList = Sets.newHashSet();
-    hostImportList.add(SWT.class.getName());
-    hostImportList.add("org.eclipse.swt.widgets.Label");
-    hostImportList.add("org.eclipse.swt.layout.GridLayout");
-    hostImportList.add("org.eclipse.swt.layout.GridData");
-    //
-    Collection<String> controllerImportList = Sets.newHashSet();
-    controllerImportList.add(SWT.class.getName());
-    controllerImportList.add("org.eclipse.jface.databinding.swt.SWTObservables");
-    controllerImportList.add("org.eclipse.core.databinding.observable.value.IObservableValue");
-    controllerImportList.add("org.eclipse.core.databinding.UpdateValueStrategy");
-    //
-    DataBindingsCodeUtils.ensureDBLibraries(javaProject);
-    //
-    IAutomaticWizardStub automaticWizardStub =
-        GlobalFactoryHelper.automaticWizardCreateStub(javaProject, classLoader, beanClass);
-    //
-    String observeMethod = null;
-    if (automaticWizardStub == null) {
-      if (ObservableInfo.isPojoBean(beanClass)) {
-        String pojoClassName = DataBindingsCodeUtils.getPojoObservablesClass();
-        observeMethod =
-            "ObserveValue = " + ClassUtils.getShortClassName(pojoClassName) + ".observeValue(";
-        controllerImportList.add(pojoClassName);
-      } else {
-        observeMethod = "ObserveValue = BeansObservables.observeValue(";
-        controllerImportList.add("org.eclipse.core.databinding.beans.BeansObservables");
-      }
-    } else {
-      automaticWizardStub.addImports(controllerImportList);
-    }
-    // prepare bean
-    String beanClassName = CoreUtils.getClassName(beanClass);
-    String beanClassShortName = ClassUtils.getShortClassName(beanClassName);
-    String fieldPrefix = JavaCore.getOption(JavaCore.CODEASSIST_FIELD_PREFIXES);
-    String fieldName = fieldPrefix + StringUtils.uncapitalize(beanClassShortName);
-    controllerCode = StringUtils.replace(controllerCode, "%BeanClass%", beanClassName);
-    //
-    if (ReflectionUtils.getConstructorBySignature(beanClass, "<init>()") == null) {
-      controllerCode = StringUtils.replace(controllerCode, "%BeanField%", fieldName);
-    } else {
-      controllerCode =
-          StringUtils.replace(controllerCode, "%BeanField%", fieldName
-              + " = new "
-              + beanClassName
-              + "()");
-    }
-    //
-    IPreferenceStore preferences = ToolkitProvider.DESCRIPTION.getPreferences();
-    String accessPrefix =
-        preferences.getBoolean(FieldUniqueVariableSupport.P_PREFIX_THIS) ? "this." : "";
-    controllerCode =
-        StringUtils.replace(controllerCode, "%BeanFieldAccess%", accessPrefix + fieldName);
-    //
-    controllerCode =
-        StringUtils.replace(
-            controllerCode,
-            "%BeanName%",
-            StringUtils.capitalize(beanClassShortName));
-    // prepare code
-    StringBuffer widgetFields = new StringBuffer();
-    StringBuffer widgets = new StringBuffer();
-    String swtContainer = StringUtils.substringBetween(code, "%Widgets%", "%");
-    String swtContainerWithDot = "this".equals(swtContainer) ? "" : swtContainer + ".";
-    //
-    StringBuffer observables = new StringBuffer();
-    StringBuffer bindings = new StringBuffer();
-    StringBuffer widgetGetters = new StringBuffer();
-    //
-    hostImportList.add(GridLayout.class.getName());
-    widgets.append("\t\t" + swtContainerWithDot + "setLayout(new GridLayout(2, false));\r\n");
-    if (!blockMode) {
-      widgets.append("\t\t\r\n");
-    }
-    //
-    for (Iterator<PropertyAdapter> I = properties.iterator(); I.hasNext();) {
-      PropertyAdapter property = I.next();
-      Object[] editorData = propertyToEditor.get(property);
-      SwtWidgetDescriptor widgetDescriptor = (SwtWidgetDescriptor) editorData[0];
-      JFaceBindingStrategyDescriptor strategyDescriptor =
-          (JFaceBindingStrategyDescriptor) editorData[1];
-      //
-      String propertyName = property.getName();
-      String widgetClassName = widgetDescriptor.getClassName();
-      String widgetFieldName = fieldPrefix + propertyName + widgetClassName;
-      String widgetFieldAccess = accessPrefix + widgetFieldName;
-      String widgetAccessor = "get" + StringUtils.capitalize(propertyName) + widgetClassName + "()";
-      String widgetControllerAccessor = hostField + "." + widgetAccessor;
-      // getter
-      widgetGetters.append("method\n\tpublic "
-          + widgetClassName
-          + " "
-          + widgetAccessor
-          + " {\n\t\treturn "
-          + widgetFieldName
-          + ";\n\t}\n\n");
-      // field
-      widgetFields.append("\r\nfield\r\n\tprivate " + widgetClassName + " " + widgetFieldName + ";");
-      // widget
-      widgets.append(begin);
-      widgets.append(widgetStart
-          + "\t\tnew Label("
-          + swtContainer
-          + ", SWT.NONE).setText(\""
-          + StringUtils.capitalize(propertyName)
-          + ":\");\r\n");
-      widgets.append(end + "\r\n");
-      //
-      widgets.append(begin);
-      widgets.append("\t\t"
-          + widgetFieldAccess
-          + " = "
-          + widgetDescriptor.getCreateCode(swtContainer)
-          + ";\r\n");
-      widgets.append(widgetStart
-          + "\t\t"
-          + widgetFieldAccess
-          + ".setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));\r\n");
-      widgets.append(end);
-      // observables
-      observables.append("\t\tIObservableValue "
-          + propertyName
-          + "ObserveWidget = "
-          + widgetDescriptor.getBindingCode(widgetControllerAccessor)
-          + ";\r\n");
-      if (automaticWizardStub == null) {
-        observables.append("\t\tIObservableValue "
-            + propertyName
-            + observeMethod
-            + fieldName
-            + ", \""
-            + propertyName
-            + "\");");
-      } else {
-        observables.append(automaticWizardStub.createSourceCode(fieldName, propertyName));
-      }
-      // bindings
-      bindings.append("\t\tbindingContext.bindValue("
-          + propertyName
-          + "ObserveWidget, "
-          + propertyName
-          + "ObserveValue, "
-          + strategyDescriptor.getTargetStrategyCode()
-          + ", "
-          + strategyDescriptor.getModelStrategyCode()
-          + ");");
-      //
-      if (I.hasNext()) {
-        widgetFields.append("\r\n");
-        widgets.append("\r\n");
-        observables.append("\r\n");
-        bindings.append("\r\n");
-      }
-      //
-      hostImportList.add(widgetDescriptor.getFullClassName());
-    }
-    // replace template patterns
-    String controllerClass = hostClassName + "Controller";
-    code = StringUtils.replace(code, "%ControllerClass%", controllerClass);
-    code = StringUtils.replace(code, "%WidgetFields%", widgetFields.toString());
-    code = StringUtils.replace(code, "%Widgets%" + swtContainer + "%", widgets.toString());
-    code = StringUtils.replace(code, "%WidgetGetters%", widgetGetters.toString());
-    //
-    controllerCode = StringUtils.replace(controllerCode, "%Observables%", observables.toString());
-    controllerCode = StringUtils.replace(controllerCode, "%Bindings%", bindings.toString());
-    // add imports
-    for (String qualifiedTypeName : hostImportList) {
-      imports.addImport(qualifiedTypeName);
-    }
-    StringBuffer controllerImportString = new StringBuffer();
-    for (String controllerImport : controllerImportList) {
-      controllerImportString.append("import " + controllerImport + ";\n");
-    }
-    controllerCode =
-        StringUtils.replace(controllerCode, "%imports%", controllerImportString.toString());
-    //
-    IPackageFragment packageFragment = firstWizardPage.getPackageFragment();
-    //
-    String packageString = packageFragment.getElementName();
-    if (packageString.length() > 0) {
-      packageString = "package " + packageString + ";";
-    }
-    controllerCode = StringUtils.replace(controllerCode, "%package%", packageString);
-    //
-    IPath packagePath = packageFragment.getPath().removeFirstSegments(1);
-    IFile controllerFile =
-        javaProject.getProject().getFile(packagePath.append(controllerClass + ".java"));
-    IOUtils2.setFileContents(controllerFile, controllerCode);
-    //
-    return code;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AutoWizard
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static String automaticWizardPerformSubstitutions(AutomaticDatabindingFirstPage firstWizardPage,
+			String code,
+			ImportsManager imports,
+			IJavaProject javaProject,
+			ClassLoader classLoader,
+			Class<?> beanClass,
+			List<PropertyAdapter> properties,
+			Map<PropertyAdapter, AbstractDescriptor[]> propertyToEditor) throws Exception {
+		InputStream controllerStream = Activator.getFile("templates/Controller.jvt");
+		String controllerCode = IOUtils.toString(controllerStream);
+		IOUtils.closeQuietly(controllerStream);
+		//
+		String hostClassName = ClassUtils.getShortClassName(firstWizardPage.getTypeName());
+		String hostVariable = StringUtils.uncapitalize(hostClassName);
+		String hostField = "m_" + hostVariable;
+		//
+		controllerCode = StringUtils.replace(controllerCode, "%HostClass%", hostClassName);
+		controllerCode = StringUtils.replace(controllerCode, "%HostVariable%", hostVariable);
+		controllerCode = StringUtils.replace(controllerCode, "%HostField%", hostField);
+		//
+		String begin = "";
+		String end = "\t\t";
+		String widgetStart = "";
+		boolean blockMode = SwtDatabindingProvider.useBlockMode();
+		if (blockMode) {
+			begin = "\t\t{\r\n";
+			end = "\t\t}";
+			widgetStart = "\t";
+		}
+		// prepare imports
+		Collection<String> hostImportList = Sets.newHashSet();
+		hostImportList.add(SWT.class.getName());
+		hostImportList.add("org.eclipse.swt.widgets.Label");
+		hostImportList.add("org.eclipse.swt.layout.GridLayout");
+		hostImportList.add("org.eclipse.swt.layout.GridData");
+		//
+		Collection<String> controllerImportList = Sets.newHashSet();
+		controllerImportList.add(SWT.class.getName());
+		controllerImportList.add("org.eclipse.jface.databinding.swt.SWTObservables");
+		controllerImportList.add("org.eclipse.core.databinding.observable.value.IObservableValue");
+		controllerImportList.add("org.eclipse.core.databinding.UpdateValueStrategy");
+		//
+		DataBindingsCodeUtils.ensureDBLibraries(javaProject);
+		//
+		IAutomaticWizardStub automaticWizardStub =
+				GlobalFactoryHelper.automaticWizardCreateStub(javaProject, classLoader, beanClass);
+		//
+		String observeMethod = null;
+		if (automaticWizardStub == null) {
+			if (ObservableInfo.isPojoBean(beanClass)) {
+				String pojoClassName = DataBindingsCodeUtils.getPojoObservablesClass();
+				observeMethod =
+						"ObserveValue = " + ClassUtils.getShortClassName(pojoClassName) + ".observeValue(";
+				controllerImportList.add(pojoClassName);
+			} else {
+				observeMethod = "ObserveValue = BeansObservables.observeValue(";
+				controllerImportList.add("org.eclipse.core.databinding.beans.BeansObservables");
+			}
+		} else {
+			automaticWizardStub.addImports(controllerImportList);
+		}
+		// prepare bean
+		String beanClassName = CoreUtils.getClassName(beanClass);
+		String beanClassShortName = ClassUtils.getShortClassName(beanClassName);
+		String fieldPrefix = JavaCore.getOption(JavaCore.CODEASSIST_FIELD_PREFIXES);
+		String fieldName = fieldPrefix + StringUtils.uncapitalize(beanClassShortName);
+		controllerCode = StringUtils.replace(controllerCode, "%BeanClass%", beanClassName);
+		//
+		if (ReflectionUtils.getConstructorBySignature(beanClass, "<init>()") == null) {
+			controllerCode = StringUtils.replace(controllerCode, "%BeanField%", fieldName);
+		} else {
+			controllerCode =
+					StringUtils.replace(controllerCode, "%BeanField%", fieldName
+							+ " = new "
+							+ beanClassName
+							+ "()");
+		}
+		//
+		IPreferenceStore preferences = ToolkitProvider.DESCRIPTION.getPreferences();
+		String accessPrefix =
+				preferences.getBoolean(FieldUniqueVariableSupport.P_PREFIX_THIS) ? "this." : "";
+		controllerCode =
+				StringUtils.replace(controllerCode, "%BeanFieldAccess%", accessPrefix + fieldName);
+		//
+		controllerCode =
+				StringUtils.replace(
+						controllerCode,
+						"%BeanName%",
+						StringUtils.capitalize(beanClassShortName));
+		// prepare code
+		StringBuffer widgetFields = new StringBuffer();
+		StringBuffer widgets = new StringBuffer();
+		String swtContainer = StringUtils.substringBetween(code, "%Widgets%", "%");
+		String swtContainerWithDot = "this".equals(swtContainer) ? "" : swtContainer + ".";
+		//
+		StringBuffer observables = new StringBuffer();
+		StringBuffer bindings = new StringBuffer();
+		StringBuffer widgetGetters = new StringBuffer();
+		//
+		hostImportList.add(GridLayout.class.getName());
+		widgets.append("\t\t" + swtContainerWithDot + "setLayout(new GridLayout(2, false));\r\n");
+		if (!blockMode) {
+			widgets.append("\t\t\r\n");
+		}
+		//
+		for (Iterator<PropertyAdapter> I = properties.iterator(); I.hasNext();) {
+			PropertyAdapter property = I.next();
+			Object[] editorData = propertyToEditor.get(property);
+			SwtWidgetDescriptor widgetDescriptor = (SwtWidgetDescriptor) editorData[0];
+			JFaceBindingStrategyDescriptor strategyDescriptor =
+					(JFaceBindingStrategyDescriptor) editorData[1];
+			//
+			String propertyName = property.getName();
+			String widgetClassName = widgetDescriptor.getClassName();
+			String widgetFieldName = fieldPrefix + propertyName + widgetClassName;
+			String widgetFieldAccess = accessPrefix + widgetFieldName;
+			String widgetAccessor = "get" + StringUtils.capitalize(propertyName) + widgetClassName + "()";
+			String widgetControllerAccessor = hostField + "." + widgetAccessor;
+			// getter
+			widgetGetters.append("method\n\tpublic "
+					+ widgetClassName
+					+ " "
+					+ widgetAccessor
+					+ " {\n\t\treturn "
+					+ widgetFieldName
+					+ ";\n\t}\n\n");
+			// field
+			widgetFields.append("\r\nfield\r\n\tprivate " + widgetClassName + " " + widgetFieldName + ";");
+			// widget
+			widgets.append(begin);
+			widgets.append(widgetStart
+					+ "\t\tnew Label("
+					+ swtContainer
+					+ ", SWT.NONE).setText(\""
+					+ StringUtils.capitalize(propertyName)
+					+ ":\");\r\n");
+			widgets.append(end + "\r\n");
+			//
+			widgets.append(begin);
+			widgets.append("\t\t"
+					+ widgetFieldAccess
+					+ " = "
+					+ widgetDescriptor.getCreateCode(swtContainer)
+					+ ";\r\n");
+			widgets.append(widgetStart
+					+ "\t\t"
+					+ widgetFieldAccess
+					+ ".setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));\r\n");
+			widgets.append(end);
+			// observables
+			observables.append("\t\tIObservableValue "
+					+ propertyName
+					+ "ObserveWidget = "
+					+ widgetDescriptor.getBindingCode(widgetControllerAccessor)
+					+ ";\r\n");
+			if (automaticWizardStub == null) {
+				observables.append("\t\tIObservableValue "
+						+ propertyName
+						+ observeMethod
+						+ fieldName
+						+ ", \""
+						+ propertyName
+						+ "\");");
+			} else {
+				observables.append(automaticWizardStub.createSourceCode(fieldName, propertyName));
+			}
+			// bindings
+			bindings.append("\t\tbindingContext.bindValue("
+					+ propertyName
+					+ "ObserveWidget, "
+					+ propertyName
+					+ "ObserveValue, "
+					+ strategyDescriptor.getTargetStrategyCode()
+					+ ", "
+					+ strategyDescriptor.getModelStrategyCode()
+					+ ");");
+			//
+			if (I.hasNext()) {
+				widgetFields.append("\r\n");
+				widgets.append("\r\n");
+				observables.append("\r\n");
+				bindings.append("\r\n");
+			}
+			//
+			hostImportList.add(widgetDescriptor.getFullClassName());
+		}
+		// replace template patterns
+		String controllerClass = hostClassName + "Controller";
+		code = StringUtils.replace(code, "%ControllerClass%", controllerClass);
+		code = StringUtils.replace(code, "%WidgetFields%", widgetFields.toString());
+		code = StringUtils.replace(code, "%Widgets%" + swtContainer + "%", widgets.toString());
+		code = StringUtils.replace(code, "%WidgetGetters%", widgetGetters.toString());
+		//
+		controllerCode = StringUtils.replace(controllerCode, "%Observables%", observables.toString());
+		controllerCode = StringUtils.replace(controllerCode, "%Bindings%", bindings.toString());
+		// add imports
+		for (String qualifiedTypeName : hostImportList) {
+			imports.addImport(qualifiedTypeName);
+		}
+		StringBuffer controllerImportString = new StringBuffer();
+		for (String controllerImport : controllerImportList) {
+			controllerImportString.append("import " + controllerImport + ";\n");
+		}
+		controllerCode =
+				StringUtils.replace(controllerCode, "%imports%", controllerImportString.toString());
+		//
+		IPackageFragment packageFragment = firstWizardPage.getPackageFragment();
+		//
+		String packageString = packageFragment.getElementName();
+		if (packageString.length() > 0) {
+			packageString = "package " + packageString + ";";
+		}
+		controllerCode = StringUtils.replace(controllerCode, "%package%", packageString);
+		//
+		IPath packagePath = packageFragment.getPath().removeFirstSegments(1);
+		IFile controllerFile =
+				javaProject.getProject().getFile(packagePath.append(controllerClass + ".java"));
+		IOUtils2.setFileContents(controllerFile, controllerCode);
+		//
+		return code;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Convert
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Move method {@code initDataBindings()} code to separate controller class.
-   */
-  public static void convertToController(DatabindingsProvider provider,
-      JavaInfo javaInfoRoot,
-      AstEditor editor,
-      TypeDeclaration rootNode) {
-    try {
-      convertJavaInfosToGetters(provider, editor, rootNode);
-      createContollerClass(provider, editor, rootNode);
-      moveBeans(provider);
-      removeInitDatabindings(provider, editor, rootNode);
-      addControllerInvocation(javaInfoRoot, editor, rootNode);
-      //
-      provider.saveEdit(true);
-      //
-      editor.commitChanges();
-      editor.getModelUnit().getBuffer().save(null, true);
-    } catch (Throwable e) {
-      DesignerPlugin.log(e);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Convert
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Move method {@code initDataBindings()} code to separate controller class.
+	 */
+	public static void convertToController(DatabindingsProvider provider,
+			JavaInfo javaInfoRoot,
+			AstEditor editor,
+			TypeDeclaration rootNode) {
+		try {
+			convertJavaInfosToGetters(provider, editor, rootNode);
+			createContollerClass(provider, editor, rootNode);
+			moveBeans(provider);
+			removeInitDatabindings(provider, editor, rootNode);
+			addControllerInvocation(javaInfoRoot, editor, rootNode);
+			//
+			provider.saveEdit(true);
+			//
+			editor.commitChanges();
+			editor.getModelUnit().getBuffer().save(null, true);
+		} catch (Throwable e) {
+			DesignerPlugin.log(e);
+		}
+	}
 
-  private static void convertJavaInfosToGetters(DatabindingsProvider provider,
-      AstEditor editor,
-      TypeDeclaration rootNode) throws Exception {
-    provider.setController(true);
-    provider.setControllerViewerField("m_"
-        + StringUtils.uncapitalize(rootNode.getName().getIdentifier()));
-    //
-    List<IBindingInfo> bindings = provider.getBindings();
-    for (IBindingInfo binding : bindings) {
-      convertJavaInfoToGetter(provider, binding.getModel());
-      convertJavaInfoToGetter(provider, binding.getTarget());
-    }
-    editor.commitChanges();
-  }
+	private static void convertJavaInfosToGetters(DatabindingsProvider provider,
+			AstEditor editor,
+			TypeDeclaration rootNode) throws Exception {
+		provider.setController(true);
+		provider.setControllerViewerField("m_"
+				+ StringUtils.uncapitalize(rootNode.getName().getIdentifier()));
+		//
+		List<IBindingInfo> bindings = provider.getBindings();
+		for (IBindingInfo binding : bindings) {
+			convertJavaInfoToGetter(provider, binding.getModel());
+			convertJavaInfoToGetter(provider, binding.getTarget());
+		}
+		editor.commitChanges();
+	}
 
-  private static void convertJavaInfoToGetter(DatabindingsProvider provider, IObserveInfo observe)
-      throws Exception {
-    if (observe instanceof WidgetBindableInfo) {
-      WidgetBindableInfo widgetBindable = (WidgetBindableInfo) observe;
-      JavaInfo javaInfo = widgetBindable.getJavaInfo();
-      if (getReference(provider, javaInfo) == null) {
-        ensureControllerReference(provider, javaInfo, false);
-      }
-      JavaInfoReferenceProvider referenceProvider =
-          (JavaInfoReferenceProvider) widgetBindable.getReferenceProvider();
-      referenceProvider.setJavaInfo(javaInfo);
-    }
-  }
+	private static void convertJavaInfoToGetter(DatabindingsProvider provider, IObserveInfo observe)
+			throws Exception {
+		if (observe instanceof WidgetBindableInfo) {
+			WidgetBindableInfo widgetBindable = (WidgetBindableInfo) observe;
+			JavaInfo javaInfo = widgetBindable.getJavaInfo();
+			if (getReference(provider, javaInfo) == null) {
+				ensureControllerReference(provider, javaInfo, false);
+			}
+			JavaInfoReferenceProvider referenceProvider =
+					(JavaInfoReferenceProvider) widgetBindable.getReferenceProvider();
+			referenceProvider.setJavaInfo(javaInfo);
+		}
+	}
 
-  private static void createContollerClass(DatabindingsProvider provider,
-      AstEditor editor,
-      TypeDeclaration rootNode) throws Exception {
-    String endOfLine = editor.getGeneration().getEndOfLine();
-    //
-    StringBuffer controllerCode = new StringBuffer();
-    //
-    IType hostType =
-        editor.getJavaProject().findType(AstNodeUtils.getFullyQualifiedName(rootNode, false));
-    IPackageFragment packageFragment = hostType.getPackageFragment();
-    //
-    String hostClass = rootNode.getName().getIdentifier();
-    String controllerClass = hostClass + "Controller";
-    String hostVariable = StringUtils.uncapitalize(hostClass);
-    String hostField = "m_" + hostVariable;
-    String fullControllerClass = controllerClass;
-    //
-    String packageString = packageFragment.getElementName();
-    if (packageString.length() > 0) {
-      controllerCode.append("package " + packageString + ";" + endOfLine + endOfLine);
-      fullControllerClass = packageString + "." + controllerClass;
-    }
-    //
-    controllerCode.append("public class " + controllerClass + " {" + endOfLine);
-    controllerCode.append("\tprivate " + hostClass + " " + hostField + ";" + endOfLine + endOfLine);
-    controllerCode.append("\tpublic "
-        + controllerClass
-        + "("
-        + hostClass
-        + " "
-        + hostVariable
-        + ") {"
-        + endOfLine);
-    controllerCode.append("\t\t" + hostField + " = " + hostVariable + ";" + endOfLine);
-    controllerCode.append("\t}" + endOfLine);
-    controllerCode.append("}");
-    //
-    IPath packagePath = packageFragment.getPath().removeFirstSegments(1);
-    IFile controllerFile =
-        editor.getJavaProject().getProject().getFile(packagePath.append(controllerClass + ".java"));
-    IOUtils2.setFileContents(controllerFile, controllerCode.toString());
-    //
-    ProjectUtils.waitForAutoBuild();
-    //
-    IType controllerType = editor.getJavaProject().findType(fullControllerClass);
-    ICompilationUnit controllerUnit = controllerType.getCompilationUnit();
-    AstEditor controllerASTEditor = new AstEditor(controllerUnit);
-    // create controller EditorState
-    EditorState thisEditorState = EditorState.get(provider.getAstEditor());
-    EditorState controllerEditorState = EditorState.get(controllerASTEditor);
-    controllerEditorState.initialize(
-        thisEditorState.getToolkitId(),
-        thisEditorState.getEditorLoader());
-    controllerEditorState.setFlowDescription(thisEditorState.getFlowDescription());
-    // prepare controller root AST node
-    TypeDeclaration controllerRootNode = DomGenerics.types(controllerASTEditor.getAstUnit()).get(0);
-    //
-    provider.setAstEditor(controllerASTEditor);
-    provider.setRootNode(controllerRootNode);
-  }
+	private static void createContollerClass(DatabindingsProvider provider,
+			AstEditor editor,
+			TypeDeclaration rootNode) throws Exception {
+		String endOfLine = editor.getGeneration().getEndOfLine();
+		//
+		StringBuffer controllerCode = new StringBuffer();
+		//
+		IType hostType =
+				editor.getJavaProject().findType(AstNodeUtils.getFullyQualifiedName(rootNode, false));
+		IPackageFragment packageFragment = hostType.getPackageFragment();
+		//
+		String hostClass = rootNode.getName().getIdentifier();
+		String controllerClass = hostClass + "Controller";
+		String hostVariable = StringUtils.uncapitalize(hostClass);
+		String hostField = "m_" + hostVariable;
+		String fullControllerClass = controllerClass;
+		//
+		String packageString = packageFragment.getElementName();
+		if (packageString.length() > 0) {
+			controllerCode.append("package " + packageString + ";" + endOfLine + endOfLine);
+			fullControllerClass = packageString + "." + controllerClass;
+		}
+		//
+		controllerCode.append("public class " + controllerClass + " {" + endOfLine);
+		controllerCode.append("\tprivate " + hostClass + " " + hostField + ";" + endOfLine + endOfLine);
+		controllerCode.append("\tpublic "
+				+ controllerClass
+				+ "("
+				+ hostClass
+				+ " "
+				+ hostVariable
+				+ ") {"
+				+ endOfLine);
+		controllerCode.append("\t\t" + hostField + " = " + hostVariable + ";" + endOfLine);
+		controllerCode.append("\t}" + endOfLine);
+		controllerCode.append("}");
+		//
+		IPath packagePath = packageFragment.getPath().removeFirstSegments(1);
+		IFile controllerFile =
+				editor.getJavaProject().getProject().getFile(packagePath.append(controllerClass + ".java"));
+		IOUtils2.setFileContents(controllerFile, controllerCode.toString());
+		//
+		ProjectUtils.waitForAutoBuild();
+		//
+		IType controllerType = editor.getJavaProject().findType(fullControllerClass);
+		ICompilationUnit controllerUnit = controllerType.getCompilationUnit();
+		AstEditor controllerASTEditor = new AstEditor(controllerUnit);
+		// create controller EditorState
+		EditorState thisEditorState = EditorState.get(provider.getAstEditor());
+		EditorState controllerEditorState = EditorState.get(controllerASTEditor);
+		controllerEditorState.initialize(
+				thisEditorState.getToolkitId(),
+				thisEditorState.getEditorLoader());
+		controllerEditorState.setFlowDescription(thisEditorState.getFlowDescription());
+		// prepare controller root AST node
+		TypeDeclaration controllerRootNode = DomGenerics.types(controllerASTEditor.getAstUnit()).get(0);
+		//
+		provider.setAstEditor(controllerASTEditor);
+		provider.setRootNode(controllerRootNode);
+	}
 
-  private static void moveBeans(DatabindingsProvider provider) throws Exception {
-    AstEditor controllerASTEditor = provider.getAstEditor();
-    TypeDeclaration controllerRootNode = provider.getRootNode();
-    List<IBindingInfo> bindings = provider.getBindings();
-    int size = bindings.size();
-    Set<IObserveInfo> observes = Sets.newHashSet();
-    for (int i = size - 1; i >= 0; i--) {
-      IBindingInfo binding = bindings.get(i);
-      IObserveInfo model = binding.getModel();
-      if (observes.add(model)) {
-        moveBean(provider, model, controllerASTEditor, controllerRootNode);
-      }
-      IObserveInfo target = binding.getTarget();
-      if (observes.add(target)) {
-        moveBean(provider, target, controllerASTEditor, controllerRootNode);
-      }
-    }
-    //
-    controllerASTEditor.commitChanges();
-    controllerASTEditor.getModelUnit().getBuffer().save(null, true);
-  }
+	private static void moveBeans(DatabindingsProvider provider) throws Exception {
+		AstEditor controllerASTEditor = provider.getAstEditor();
+		TypeDeclaration controllerRootNode = provider.getRootNode();
+		List<IBindingInfo> bindings = provider.getBindings();
+		int size = bindings.size();
+		Set<IObserveInfo> observes = Sets.newHashSet();
+		for (int i = size - 1; i >= 0; i--) {
+			IBindingInfo binding = bindings.get(i);
+			IObserveInfo model = binding.getModel();
+			if (observes.add(model)) {
+				moveBean(provider, model, controllerASTEditor, controllerRootNode);
+			}
+			IObserveInfo target = binding.getTarget();
+			if (observes.add(target)) {
+				moveBean(provider, target, controllerASTEditor, controllerRootNode);
+			}
+		}
+		//
+		controllerASTEditor.commitChanges();
+		controllerASTEditor.getModelUnit().getBuffer().save(null, true);
+	}
 
-  private static void moveBean(DatabindingsProvider provider,
-      IObserveInfo observe,
-      AstEditor controllerEditor,
-      TypeDeclaration controllerRootNode) throws Exception {
-    if (observe instanceof FieldBeanBindableInfo) {
-      //
-      FieldBeanBindableInfo fieldBindable = (FieldBeanBindableInfo) observe;
-      VariableDeclarationFragment fragment = fieldBindable.getFragment();
-      //
-      if (fragment != null) {
-        FieldDeclaration fieldDeclaration = AstNodeUtils.getEnclosingFieldDeclaration(fragment);
-        String modifier =
-            Modifier.ModifierKeyword.fromFlagValue(fieldDeclaration.getModifiers()).toString();
-        //
-        controllerEditor.addFieldDeclaration(
-            modifier
-                + " "
-                + CoreUtils.getClassName(fieldBindable.getObjectType())
-                + " "
-                + fragment.getName().getIdentifier()
-                + ";",
-            new BodyDeclarationTarget(controllerRootNode, true));
-      }
-    } else if (observe instanceof MethodBeanBindableInfo) {
-      IObserveInfo parentObserve = observe.getParent();
-      if (parentObserve == null) {
-        MethodBeanBindableInfo methodBindable = (MethodBeanBindableInfo) observe;
-        methodBindable.setReferenceProvider(new StringReferenceProvider(provider.getControllerViewerField()
-            + "."
-            + methodBindable.getReference()));
-      } else {
-        moveBean(provider, parentObserve, controllerEditor, controllerRootNode);
-      }
-    } else {
-      GlobalFactoryHelper.moveBean(observe, controllerEditor, controllerRootNode);
-    }
-  }
+	private static void moveBean(DatabindingsProvider provider,
+			IObserveInfo observe,
+			AstEditor controllerEditor,
+			TypeDeclaration controllerRootNode) throws Exception {
+		if (observe instanceof FieldBeanBindableInfo) {
+			//
+			FieldBeanBindableInfo fieldBindable = (FieldBeanBindableInfo) observe;
+			VariableDeclarationFragment fragment = fieldBindable.getFragment();
+			//
+			if (fragment != null) {
+				FieldDeclaration fieldDeclaration = AstNodeUtils.getEnclosingFieldDeclaration(fragment);
+				String modifier =
+						Modifier.ModifierKeyword.fromFlagValue(fieldDeclaration.getModifiers()).toString();
+				//
+				controllerEditor.addFieldDeclaration(
+						modifier
+						+ " "
+						+ CoreUtils.getClassName(fieldBindable.getObjectType())
+						+ " "
+						+ fragment.getName().getIdentifier()
+						+ ";",
+						new BodyDeclarationTarget(controllerRootNode, true));
+			}
+		} else if (observe instanceof MethodBeanBindableInfo) {
+			IObserveInfo parentObserve = observe.getParent();
+			if (parentObserve == null) {
+				MethodBeanBindableInfo methodBindable = (MethodBeanBindableInfo) observe;
+				methodBindable.setReferenceProvider(new StringReferenceProvider(provider.getControllerViewerField()
+						+ "."
+						+ methodBindable.getReference()));
+			} else {
+				moveBean(provider, parentObserve, controllerEditor, controllerRootNode);
+			}
+		} else {
+			GlobalFactoryHelper.moveBean(observe, controllerEditor, controllerRootNode);
+		}
+	}
 
-  private static void removeInitDatabindings(DatabindingsProvider provider,
-      AstEditor editor,
-      TypeDeclaration rootNode) throws Exception {
-    MethodDeclaration initDataBindings = provider.getRootInfo().getInitDataBindings();
-    if (initDataBindings != null) {
-      final String signature = AstNodeUtils.getMethodSignature(initDataBindings);
-      final List<Statement> statements = Lists.newArrayList();
-      rootNode.accept(new ASTVisitor() {
-        @Override
-        public void endVisit(MethodInvocation node) {
-          if (signature.equals(AstNodeUtils.getMethodSignature(node))) {
-            statements.add(AstNodeUtils.getEnclosingStatement(node));
-          }
-        }
-      });
-      for (Statement statement : statements) {
-        editor.removeStatement(statement);
-      }
-      //
-      editor.removeBodyDeclaration(initDataBindings);
-      provider.getRootInfo().setInitDataBindings(null);
-    }
-  }
+	private static void removeInitDatabindings(DatabindingsProvider provider,
+			AstEditor editor,
+			TypeDeclaration rootNode) throws Exception {
+		MethodDeclaration initDataBindings = provider.getRootInfo().getInitDataBindings();
+		if (initDataBindings != null) {
+			final String signature = AstNodeUtils.getMethodSignature(initDataBindings);
+			final List<Statement> statements = Lists.newArrayList();
+			rootNode.accept(new ASTVisitor() {
+				@Override
+				public void endVisit(MethodInvocation node) {
+					if (signature.equals(AstNodeUtils.getMethodSignature(node))) {
+						statements.add(AstNodeUtils.getEnclosingStatement(node));
+					}
+				}
+			});
+			for (Statement statement : statements) {
+				editor.removeStatement(statement);
+			}
+			//
+			editor.removeBodyDeclaration(initDataBindings);
+			provider.getRootInfo().setInitDataBindings(null);
+		}
+	}
 
-  private static void addControllerInvocation(JavaInfo javaInfoRoot,
-      AstEditor editor,
-      TypeDeclaration rootNode) throws Exception {
-    MethodDeclaration lastInfoMethod =
-        DataBindingsCodeUtils.getLastInfoDeclaration(null, javaInfoRoot);
-    ShellVisitor visitor = new ShellVisitor();
-    lastInfoMethod.accept(visitor);
-    //
-    Statement shellOpenStatement = visitor.getShellOpenStatement();
-    List<Statement> statements = DomGenerics.statements(lastInfoMethod.getBody());
-    StatementTarget methodTarget;
-    //
-    if (shellOpenStatement != null) {
-      methodTarget = new StatementTarget(shellOpenStatement, true);
-    } else if (statements.isEmpty()) {
-      methodTarget = new StatementTarget(lastInfoMethod, true);
-    } else {
-      Statement lastStatement = statements.get(statements.size() - 1);
-      methodTarget = new StatementTarget(lastStatement, lastStatement instanceof ReturnStatement);
-    }
-    //
-    editor.addStatement(
-        "new " + rootNode.getName().getIdentifier() + "Controller(this);",
-        methodTarget);
-    editor.commitChanges();
-  }
+	private static void addControllerInvocation(JavaInfo javaInfoRoot,
+			AstEditor editor,
+			TypeDeclaration rootNode) throws Exception {
+		MethodDeclaration lastInfoMethod =
+				DataBindingsCodeUtils.getLastInfoDeclaration(null, javaInfoRoot);
+		ShellVisitor visitor = new ShellVisitor();
+		lastInfoMethod.accept(visitor);
+		//
+		Statement shellOpenStatement = visitor.getShellOpenStatement();
+		List<Statement> statements = DomGenerics.statements(lastInfoMethod.getBody());
+		StatementTarget methodTarget;
+		//
+		if (shellOpenStatement != null) {
+			methodTarget = new StatementTarget(shellOpenStatement, true);
+		} else if (statements.isEmpty()) {
+			methodTarget = new StatementTarget(lastInfoMethod, true);
+		} else {
+			Statement lastStatement = statements.get(statements.size() - 1);
+			methodTarget = new StatementTarget(lastStatement, lastStatement instanceof ReturnStatement);
+		}
+		//
+		editor.addStatement(
+				"new " + rootNode.getName().getIdentifier() + "Controller(this);",
+				methodTarget);
+		editor.commitChanges();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ShellVisitor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static class ShellVisitor extends ASTVisitor {
-    private Statement m_shellOpenStatement;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ShellVisitor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static class ShellVisitor extends ASTVisitor {
+		private Statement m_shellOpenStatement;
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // ASTVisitor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public boolean visit(MethodInvocation node) {
-      String methodName = node.getName().getIdentifier();
-      if (node.arguments().isEmpty()
-          && "open".equals(methodName)
-          && AstNodeUtils.isSuccessorOf(node.getExpression(), "org.eclipse.swt.widgets.Shell")) {
-        Assert.isNull(m_shellOpenStatement, "Double invoke %shell%.open()");
-        m_shellOpenStatement = AstNodeUtils.getEnclosingStatement(node);
-      }
-      return false;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// ASTVisitor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public boolean visit(MethodInvocation node) {
+			String methodName = node.getName().getIdentifier();
+			if (node.arguments().isEmpty()
+					&& "open".equals(methodName)
+					&& AstNodeUtils.isSuccessorOf(node.getExpression(), "org.eclipse.swt.widgets.Shell")) {
+				Assert.isNull(m_shellOpenStatement, "Double invoke %shell%.open()");
+				m_shellOpenStatement = AstNodeUtils.getEnclosingStatement(node);
+			}
+			return false;
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Access
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public Statement getShellOpenStatement() {
-      return m_shellOpenStatement;
-    }
-  }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Access
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public Statement getShellOpenStatement() {
+			return m_shellOpenStatement;
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/DataBindingsCodeUtils.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/DataBindingsCodeUtils.java
index 22c0867c2..aee06fb9b 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/DataBindingsCodeUtils.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/DataBindingsCodeUtils.java
@@ -54,391 +54,391 @@
  * @coverage bindings.rcp.model
  */
 public final class DataBindingsCodeUtils {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static String getPojoObservablesClass() {
-    return "org.eclipse.core.databinding.beans.PojoObservables";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static String getPojoObservablesClass() {
+		return "org.eclipse.core.databinding.beans.PojoObservables";
+	}
 
-  /**
-   * Check add to project classpath or plugin require bundles JFace bindings libraries.
-   */
-  public static boolean ensureDBLibraries(IJavaProject javaProject) throws Exception {
-    // calculate required plugins
-    boolean addDatabindingCore =
-        !ProjectUtils.hasType(javaProject, "org.eclipse.core.databinding.Binding");
-    boolean addDatabindingBeans =
-        !ProjectUtils.hasType(javaProject, "org.eclipse.core.databinding.beans.typed.BeanProperties");
-    boolean addDatabindingObservable =
-        ReflectivePDE.findModel("org.eclipse.core.databinding.observable") != null
-            && !ProjectUtils.hasType(
-                javaProject,
-                "org.eclipse.core.databinding.observable.Observables");
-    boolean addDatabindingProperty =
-        ReflectivePDE.findModel("org.eclipse.core.databinding.property") != null
-            && !ProjectUtils.hasType(javaProject, "org.eclipse.core.databinding.property.IProperty");
-    boolean addDatabindingJFace =
-        !ProjectUtils.hasType(javaProject, "org.eclipse.jface.databinding.swt.typed.WidgetProperties");
-    boolean addEquinoxCommon =
-        !ProjectUtils.hasType(javaProject, "org.eclipse.core.runtime.Status");
-    boolean addComIbmIcu = !ProjectUtils.hasType(javaProject, "com.ibm.icu.text.NumberFormat");
-    // check required plugins
-    if (addDatabindingCore
-        || addDatabindingBeans
-        || addDatabindingObservable
-        || addDatabindingProperty
-        || addDatabindingJFace) {
-      IProject project = javaProject.getProject();
-      // check 'java project' or 'plugin project'
-      if (project.hasNature("org.eclipse.pde.PluginNature")) {
-        // collect plugin imports
-        List<String> pluginIds = Lists.newArrayList();
-        if (addDatabindingCore) {
-          pluginIds.add("org.eclipse.core.databinding");
-        }
-        if (addDatabindingBeans) {
-          pluginIds.add("org.eclipse.core.databinding.beans");
-        }
-        if (addDatabindingObservable) {
-          pluginIds.add("org.eclipse.core.databinding.observable");
-        }
-        if (addDatabindingProperty) {
-          pluginIds.add("org.eclipse.core.databinding.property");
-        }
-        if (addDatabindingJFace) {
-          pluginIds.add("org.eclipse.jface.databinding");
-        }
-        if (addEquinoxCommon) {
-          pluginIds.add("org.eclipse.equinox.common");
-        }
-        if (addComIbmIcu) {
-          pluginIds.add("com.ibm.icu");
-        }
-        // add to plugin imports
-        if (!pluginIds.isEmpty()) {
-          PdeUtils.get(project).addPluginImport(pluginIds);
-        }
-      } else {
-        // add to project .classpath
-        if (addDatabindingCore) {
-          ProjectUtils.addPluginLibraries(javaProject, "org.eclipse.core.databinding");
-        }
-        if (addDatabindingBeans) {
-          ProjectUtils.addPluginLibraries(javaProject, "org.eclipse.core.databinding.beans");
-        }
-        if (addDatabindingObservable) {
-          ProjectUtils.addPluginLibraries(javaProject, "org.eclipse.core.databinding.observable");
-        }
-        if (addDatabindingProperty) {
-          ProjectUtils.addPluginLibraries(javaProject, "org.eclipse.core.databinding.property");
-        }
-        if (addDatabindingJFace) {
-          ProjectUtils.addPluginLibraries(javaProject, "org.eclipse.jface.databinding");
-        }
-        if (addEquinoxCommon) {
-          ProjectUtils.addPluginLibraries(javaProject, "org.eclipse.equinox.common");
-        }
-        if (addComIbmIcu) {
-          ProjectUtils.addPluginLibraries(javaProject, "com.ibm.icu");
-        }
-      }
-      ProjectUtils.waitForAutoBuild();
-      return true;
-    }
-    return false;
-  }
+	/**
+	 * Check add to project classpath or plugin require bundles JFace bindings libraries.
+	 */
+	public static boolean ensureDBLibraries(IJavaProject javaProject) throws Exception {
+		// calculate required plugins
+		boolean addDatabindingCore =
+				!ProjectUtils.hasType(javaProject, "org.eclipse.core.databinding.Binding");
+		boolean addDatabindingBeans =
+				!ProjectUtils.hasType(javaProject, "org.eclipse.core.databinding.beans.typed.BeanProperties");
+		boolean addDatabindingObservable =
+				ReflectivePDE.findModel("org.eclipse.core.databinding.observable") != null
+				&& !ProjectUtils.hasType(
+						javaProject,
+						"org.eclipse.core.databinding.observable.Observables");
+		boolean addDatabindingProperty =
+				ReflectivePDE.findModel("org.eclipse.core.databinding.property") != null
+				&& !ProjectUtils.hasType(javaProject, "org.eclipse.core.databinding.property.IProperty");
+		boolean addDatabindingJFace =
+				!ProjectUtils.hasType(javaProject, "org.eclipse.jface.databinding.swt.typed.WidgetProperties");
+		boolean addEquinoxCommon =
+				!ProjectUtils.hasType(javaProject, "org.eclipse.core.runtime.Status");
+		boolean addComIbmIcu = !ProjectUtils.hasType(javaProject, "com.ibm.icu.text.NumberFormat");
+		// check required plugins
+		if (addDatabindingCore
+				|| addDatabindingBeans
+				|| addDatabindingObservable
+				|| addDatabindingProperty
+				|| addDatabindingJFace) {
+			IProject project = javaProject.getProject();
+			// check 'java project' or 'plugin project'
+			if (project.hasNature("org.eclipse.pde.PluginNature")) {
+				// collect plugin imports
+				List<String> pluginIds = Lists.newArrayList();
+				if (addDatabindingCore) {
+					pluginIds.add("org.eclipse.core.databinding");
+				}
+				if (addDatabindingBeans) {
+					pluginIds.add("org.eclipse.core.databinding.beans");
+				}
+				if (addDatabindingObservable) {
+					pluginIds.add("org.eclipse.core.databinding.observable");
+				}
+				if (addDatabindingProperty) {
+					pluginIds.add("org.eclipse.core.databinding.property");
+				}
+				if (addDatabindingJFace) {
+					pluginIds.add("org.eclipse.jface.databinding");
+				}
+				if (addEquinoxCommon) {
+					pluginIds.add("org.eclipse.equinox.common");
+				}
+				if (addComIbmIcu) {
+					pluginIds.add("com.ibm.icu");
+				}
+				// add to plugin imports
+				if (!pluginIds.isEmpty()) {
+					PdeUtils.get(project).addPluginImport(pluginIds);
+				}
+			} else {
+				// add to project .classpath
+				if (addDatabindingCore) {
+					ProjectUtils.addPluginLibraries(javaProject, "org.eclipse.core.databinding");
+				}
+				if (addDatabindingBeans) {
+					ProjectUtils.addPluginLibraries(javaProject, "org.eclipse.core.databinding.beans");
+				}
+				if (addDatabindingObservable) {
+					ProjectUtils.addPluginLibraries(javaProject, "org.eclipse.core.databinding.observable");
+				}
+				if (addDatabindingProperty) {
+					ProjectUtils.addPluginLibraries(javaProject, "org.eclipse.core.databinding.property");
+				}
+				if (addDatabindingJFace) {
+					ProjectUtils.addPluginLibraries(javaProject, "org.eclipse.jface.databinding");
+				}
+				if (addEquinoxCommon) {
+					ProjectUtils.addPluginLibraries(javaProject, "org.eclipse.equinox.common");
+				}
+				if (addComIbmIcu) {
+					ProjectUtils.addPluginLibraries(javaProject, "com.ibm.icu");
+				}
+			}
+			ProjectUtils.waitForAutoBuild();
+			return true;
+		}
+		return false;
+	}
 
-  /**
-   * Check add to client {@link IJavaProject} Designer support code for TreeViewer.
-   */
-  public static void ensureDesignerResources(IJavaProject javaProject) throws Exception {
-    String[] classes =
-        {
-            "Utils",
-            "IdentityWrapper",
-            "ListenerSupport",
-            "TreeObservableLabelProvider",
-            "TreeBeanAdvisor",
-            "BeansObservableFactory",
-            "BeansListObservableFactory",
-            "BeansSetObservableFactory"};
-    for (int i = 0; i < classes.length; i++) {
-      ProjectUtils.ensureResourceType(
-          javaProject,
-          Activator.getDefault().getBundle(),
-          "org.eclipse.wb.rcp.databinding." + classes[i]);
-    }
-  }
+	/**
+	 * Check add to client {@link IJavaProject} Designer support code for TreeViewer.
+	 */
+	public static void ensureDesignerResources(IJavaProject javaProject) throws Exception {
+		String[] classes =
+			{
+					"Utils",
+					"IdentityWrapper",
+					"ListenerSupport",
+					"TreeObservableLabelProvider",
+					"TreeBeanAdvisor",
+					"BeansObservableFactory",
+					"BeansListObservableFactory",
+			"BeansSetObservableFactory"};
+		for (int i = 0; i < classes.length; i++) {
+			ProjectUtils.ensureResourceType(
+					javaProject,
+					Activator.getDefault().getBundle(),
+					"org.eclipse.wb.rcp.databinding." + classes[i]);
+		}
+	}
 
-  /**
-   * @return {@link MethodDeclaration} for last {@link JavaInfo} into hierarchy.
-   */
-  public static MethodDeclaration getLastInfoDeclaration(MethodDeclaration initDataBindings,
-      JavaInfo rootJavaInfo) throws Exception {
-    LastWidgetVisitor visitor = new LastWidgetVisitor(initDataBindings, rootJavaInfo);
-    MethodDeclaration method = JavaInfoUtils.getMethodDeclaration(visitor.getLastInfo());
-    Assert.isNotNull(method);
-    return method;
-  }
+	/**
+	 * @return {@link MethodDeclaration} for last {@link JavaInfo} into hierarchy.
+	 */
+	public static MethodDeclaration getLastInfoDeclaration(MethodDeclaration initDataBindings,
+			JavaInfo rootJavaInfo) throws Exception {
+		LastWidgetVisitor visitor = new LastWidgetVisitor(initDataBindings, rootJavaInfo);
+		MethodDeclaration method = JavaInfoUtils.getMethodDeclaration(visitor.getLastInfo());
+		Assert.isNotNull(method);
+		return method;
+	}
 
-  /**
-   * Check add invocation <code>initDataBindings()</code> to method {@link MethodDeclaration}
-   * <code>lastInfoMethod</code>.
-   */
-  public static void ensureInvokeInitDataBindings(JavaInfo rootJavaInfo,
-      AstEditor editor,
-      TypeDeclaration typeDeclaration,
-      MethodDeclaration lastInfoMethod) throws Exception {
-    IPreferenceStore store = Activator.getStore();
-    if (!store.getBoolean(IPreferenceConstants.ADD_INVOKE_INITDB_TO_GUI)) {
-      return;
-    }
-    if (rootJavaInfo != null
-        && !store.getBoolean(IPreferenceConstants.ADD_INVOKE_INITDB_TO_COMPOSITE_CONSTRUCTOR)
-        && JavaInfoUtils.getMethodDeclaration(rootJavaInfo).isConstructor()
-        && isComposite(rootJavaInfo)) {
-      return;
-    }
-    // find call initDataBindings()
-    InitDataBindingsVisitor visitor = new InitDataBindingsVisitor();
-    lastInfoMethod.accept(visitor);
-    //
-    if (visitor.isInvoke()) {
-      return;
-    }
-    // prepare invoke source
-    String initDBInvokeSource = prepareDBInvokeSource(editor, typeDeclaration, lastInfoMethod);
-    // add initDataBindings()
-    Statement shellOpenStatement = visitor.getShellOpenStatement();
-    List<Statement> statements = DomGenerics.statements(lastInfoMethod.getBody());
-    StatementTarget methodTarget;
-    //
-    if (shellOpenStatement != null) {
-      methodTarget = new StatementTarget(shellOpenStatement, true);
-    } else if (statements.isEmpty()) {
-      methodTarget = new StatementTarget(lastInfoMethod, true);
-    } else {
-      Statement lastStatement = statements.get(statements.size() - 1);
-      methodTarget = new StatementTarget(lastStatement, lastStatement instanceof ReturnStatement);
-    }
-    //
-    editor.addStatement(initDBInvokeSource, methodTarget);
-  }
+	/**
+	 * Check add invocation <code>initDataBindings()</code> to method {@link MethodDeclaration}
+	 * <code>lastInfoMethod</code>.
+	 */
+	public static void ensureInvokeInitDataBindings(JavaInfo rootJavaInfo,
+			AstEditor editor,
+			TypeDeclaration typeDeclaration,
+			MethodDeclaration lastInfoMethod) throws Exception {
+		IPreferenceStore store = Activator.getStore();
+		if (!store.getBoolean(IPreferenceConstants.ADD_INVOKE_INITDB_TO_GUI)) {
+			return;
+		}
+		if (rootJavaInfo != null
+				&& !store.getBoolean(IPreferenceConstants.ADD_INVOKE_INITDB_TO_COMPOSITE_CONSTRUCTOR)
+				&& JavaInfoUtils.getMethodDeclaration(rootJavaInfo).isConstructor()
+				&& isComposite(rootJavaInfo)) {
+			return;
+		}
+		// find call initDataBindings()
+		InitDataBindingsVisitor visitor = new InitDataBindingsVisitor();
+		lastInfoMethod.accept(visitor);
+		//
+		if (visitor.isInvoke()) {
+			return;
+		}
+		// prepare invoke source
+		String initDBInvokeSource = prepareDBInvokeSource(editor, typeDeclaration, lastInfoMethod);
+		// add initDataBindings()
+		Statement shellOpenStatement = visitor.getShellOpenStatement();
+		List<Statement> statements = DomGenerics.statements(lastInfoMethod.getBody());
+		StatementTarget methodTarget;
+		//
+		if (shellOpenStatement != null) {
+			methodTarget = new StatementTarget(shellOpenStatement, true);
+		} else if (statements.isEmpty()) {
+			methodTarget = new StatementTarget(lastInfoMethod, true);
+		} else {
+			Statement lastStatement = statements.get(statements.size() - 1);
+			methodTarget = new StatementTarget(lastStatement, lastStatement instanceof ReturnStatement);
+		}
+		//
+		editor.addStatement(initDBInvokeSource, methodTarget);
+	}
 
-  private static boolean isComposite(JavaInfo javaInfo) throws Exception {
-    Class<?> componentClass = javaInfo.getDescription().getComponentClass();
-    if (org.eclipse.swt.widgets.Composite.class.isAssignableFrom(componentClass)) {
-      return !org.eclipse.swt.widgets.Decorations.class.isAssignableFrom(componentClass);
-    }
-    return false;
-  }
+	private static boolean isComposite(JavaInfo javaInfo) throws Exception {
+		Class<?> componentClass = javaInfo.getDescription().getComponentClass();
+		if (org.eclipse.swt.widgets.Composite.class.isAssignableFrom(componentClass)) {
+			return !org.eclipse.swt.widgets.Decorations.class.isAssignableFrom(componentClass);
+		}
+		return false;
+	}
 
-  private static String prepareDBInvokeSource(AstEditor editor,
-      TypeDeclaration typeDeclaration,
-      MethodDeclaration lastInfoMethod) throws Exception {
-    if (Modifier.isStatic(lastInfoMethod.getModifiers())
-        || !Activator.getStore().getBoolean(IPreferenceConstants.ADD_INITDB_TO_FIELD)) {
-      return DataBindingsRootInfo.INIT_DATA_BINDINGS_METHOD_NAME + "();";
-    }
-    // check create context field
-    for (FieldDeclaration field : typeDeclaration.getFields()) {
-      Type type = field.getType();
-      if (type == null || AstNodeUtils.getTypeBinding(type) == null) {
-        continue;
-      }
-      //
-      String fieldType = AstNodeUtils.getFullyQualifiedName(type, false);
-      //
-      if ("org.eclipse.core.databinding.DataBindingContext".equals(fieldType)) {
-        Assert.equals(1, field.fragments().size());
-        VariableDeclarationFragment fragment = DomGenerics.fragments(field).get(0);
-        return fragment.getName().getIdentifier()
-            + " = "
-            + DataBindingsRootInfo.INIT_DATA_BINDINGS_METHOD_NAME
-            + "();";
-      }
-    }
-    // create context field
-    BodyDeclarationTarget fieldTarget = new BodyDeclarationTarget(typeDeclaration, null, true);
-    editor.addFieldDeclaration(
-        "private org.eclipse.core.databinding.DataBindingContext m_bindingContext;",
-        fieldTarget);
-    return "m_bindingContext = " + DataBindingsRootInfo.INIT_DATA_BINDINGS_METHOD_NAME + "();";
-  }
+	private static String prepareDBInvokeSource(AstEditor editor,
+			TypeDeclaration typeDeclaration,
+			MethodDeclaration lastInfoMethod) throws Exception {
+		if (Modifier.isStatic(lastInfoMethod.getModifiers())
+				|| !Activator.getStore().getBoolean(IPreferenceConstants.ADD_INITDB_TO_FIELD)) {
+			return DataBindingsRootInfo.INIT_DATA_BINDINGS_METHOD_NAME + "();";
+		}
+		// check create context field
+		for (FieldDeclaration field : typeDeclaration.getFields()) {
+			Type type = field.getType();
+			if (type == null || AstNodeUtils.getTypeBinding(type) == null) {
+				continue;
+			}
+			//
+			String fieldType = AstNodeUtils.getFullyQualifiedName(type, false);
+			//
+			if ("org.eclipse.core.databinding.DataBindingContext".equals(fieldType)) {
+				Assert.equals(1, field.fragments().size());
+				VariableDeclarationFragment fragment = DomGenerics.fragments(field).get(0);
+				return fragment.getName().getIdentifier()
+						+ " = "
+						+ DataBindingsRootInfo.INIT_DATA_BINDINGS_METHOD_NAME
+						+ "();";
+			}
+		}
+		// create context field
+		BodyDeclarationTarget fieldTarget = new BodyDeclarationTarget(typeDeclaration, null, true);
+		editor.addFieldDeclaration(
+				"private org.eclipse.core.databinding.DataBindingContext m_bindingContext;",
+				fieldTarget);
+		return "m_bindingContext = " + DataBindingsRootInfo.INIT_DATA_BINDINGS_METHOD_NAME + "();";
+	}
 
-  /**
-   * Check move source code from <code><b>public static void main(String[])</b></code> to
-   * <code>Realm.runWithDefault()</code>.
-   */
-  public static void ensureEnclosingRealmOfMain(AstEditor editor) throws Exception {
-    TypeDeclaration type = DomGenerics.types(editor.getAstUnit()).get(0);
-    MethodDeclaration mainMethod =
-        AstNodeUtils.getMethodBySignature(type, "main(java.lang.String[])");
-    //
-    if (mainMethod == null) {
-      return;
-    }
-    // check Realm enclosing
-    RealmMethodVisitor visitor = new RealmMethodVisitor();
-    mainMethod.accept(visitor);
-    if (visitor.isEnclosing()) {
-      return;
-    }
-    //
-    List<Statement> oldStatements =
-        Lists.newArrayList(DomGenerics.statements(mainMethod.getBody()));
-    //
-    Statement displayStatement =
-        editor.addStatement(
-            "org.eclipse.swt.widgets.Display display = org.eclipse.swt.widgets.Display.getDefault();",
-            new StatementTarget(mainMethod, true));
-    //
-    List<String> lines = Lists.newArrayList();
-    lines.add("org.eclipse.core.databinding.observable.Realm.runWithDefault(org.eclipse.jface.databinding.swt.DisplayRealm.getRealm(display), new java.lang.Runnable() {");
-    lines.add("\tpublic void run() {");
-    lines.add("\t}");
-    lines.add("});");
-    //
-    Statement realmStatement =
-        editor.addStatement(lines, new StatementTarget(displayStatement, false));
-    //
-    final Block[] runBody = new Block[1];
-    realmStatement.accept(new ASTVisitor() {
-      @Override
-      public boolean visit(MethodDeclaration node) {
-        runBody[0] = node.getBody();
-        return false;
-      }
-    });
-    //
-    Assert.isNotNull(runBody[0]);
-    StatementTarget moveTarget = new StatementTarget(runBody[0], false);
-    //
-    for (Statement statement : oldStatements) {
-      editor.moveStatement(statement, moveTarget);
-    }
-  }
+	/**
+	 * Check move source code from <code><b>public static void main(String[])</b></code> to
+	 * <code>Realm.runWithDefault()</code>.
+	 */
+	public static void ensureEnclosingRealmOfMain(AstEditor editor) throws Exception {
+		TypeDeclaration type = DomGenerics.types(editor.getAstUnit()).get(0);
+		MethodDeclaration mainMethod =
+				AstNodeUtils.getMethodBySignature(type, "main(java.lang.String[])");
+		//
+		if (mainMethod == null) {
+			return;
+		}
+		// check Realm enclosing
+		RealmMethodVisitor visitor = new RealmMethodVisitor();
+		mainMethod.accept(visitor);
+		if (visitor.isEnclosing()) {
+			return;
+		}
+		//
+		List<Statement> oldStatements =
+				Lists.newArrayList(DomGenerics.statements(mainMethod.getBody()));
+		//
+		Statement displayStatement =
+				editor.addStatement(
+						"org.eclipse.swt.widgets.Display display = org.eclipse.swt.widgets.Display.getDefault();",
+						new StatementTarget(mainMethod, true));
+		//
+		List<String> lines = Lists.newArrayList();
+		lines.add("org.eclipse.core.databinding.observable.Realm.runWithDefault(org.eclipse.jface.databinding.swt.DisplayRealm.getRealm(display), new java.lang.Runnable() {");
+		lines.add("\tpublic void run() {");
+		lines.add("\t}");
+		lines.add("});");
+		//
+		Statement realmStatement =
+				editor.addStatement(lines, new StatementTarget(displayStatement, false));
+		//
+		final Block[] runBody = new Block[1];
+		realmStatement.accept(new ASTVisitor() {
+			@Override
+			public boolean visit(MethodDeclaration node) {
+				runBody[0] = node.getBody();
+				return false;
+			}
+		});
+		//
+		Assert.isNotNull(runBody[0]);
+		StatementTarget moveTarget = new StatementTarget(runBody[0], false);
+		//
+		for (Statement statement : oldStatements) {
+			editor.moveStatement(statement, moveTarget);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Visitors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * This visitor do find last {@link WidgetInfo} into hierarchy.
-   */
-  private static class LastWidgetVisitor extends ObjectInfoVisitor {
-    private final MethodDeclaration m_initDataBindings;
-    private JavaInfo m_lastInfo;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Visitors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * This visitor do find last {@link WidgetInfo} into hierarchy.
+	 */
+	private static class LastWidgetVisitor extends ObjectInfoVisitor {
+		private final MethodDeclaration m_initDataBindings;
+		private JavaInfo m_lastInfo;
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public LastWidgetVisitor(MethodDeclaration initDataBindings, JavaInfo rootJavaInfo)
-        throws Exception {
-      m_initDataBindings = initDataBindings;
-      m_lastInfo = rootJavaInfo;
-      rootJavaInfo.accept0(this);
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public LastWidgetVisitor(MethodDeclaration initDataBindings, JavaInfo rootJavaInfo)
+				throws Exception {
+			m_initDataBindings = initDataBindings;
+			m_lastInfo = rootJavaInfo;
+			rootJavaInfo.accept0(this);
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Access
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public JavaInfo getLastInfo() {
-      return m_lastInfo;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Access
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public JavaInfo getLastInfo() {
+			return m_lastInfo;
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // ObjectInfoVisitor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public boolean visit(ObjectInfo objectInfo) throws Exception {
-      if (objectInfo instanceof WidgetInfo) {
-        WidgetInfo widgetInfo = (WidgetInfo) objectInfo;
-        if (JavaInfoUtils.getMethodDeclaration(widgetInfo) != m_initDataBindings) {
-          m_lastInfo = widgetInfo;
-        }
-      }
-      return true;
-    }
-  }
-  /**
-   * This visitor do find invocation <code>initDataBindings()</code> into AST.
-   */
-  private static class InitDataBindingsVisitor extends ASTVisitor {
-    private boolean m_invoke;
-    private Statement m_shellOpenStatement;
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// ObjectInfoVisitor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public boolean visit(ObjectInfo objectInfo) throws Exception {
+			if (objectInfo instanceof WidgetInfo) {
+				WidgetInfo widgetInfo = (WidgetInfo) objectInfo;
+				if (JavaInfoUtils.getMethodDeclaration(widgetInfo) != m_initDataBindings) {
+					m_lastInfo = widgetInfo;
+				}
+			}
+			return true;
+		}
+	}
+	/**
+	 * This visitor do find invocation <code>initDataBindings()</code> into AST.
+	 */
+	private static class InitDataBindingsVisitor extends ASTVisitor {
+		private boolean m_invoke;
+		private Statement m_shellOpenStatement;
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // ASTVisitor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public boolean visit(MethodInvocation node) {
-      String methodName = node.getName().getIdentifier();
-      if (node.arguments().isEmpty()) {
-        if ("initDataBindings".equals(methodName)) {
-          Assert.isTrue(!m_invoke, "Double invoke initDataBindings()");
-          m_invoke = true;
-        } else if ("open".equals(methodName)
-            && AstNodeUtils.isSuccessorOf(node.getExpression(), "org.eclipse.swt.widgets.Shell")) {
-          Assert.isNull(m_shellOpenStatement, "Double invoke %shell%.open()");
-          m_shellOpenStatement = AstNodeUtils.getEnclosingStatement(node);
-        }
-      }
-      return false;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// ASTVisitor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public boolean visit(MethodInvocation node) {
+			String methodName = node.getName().getIdentifier();
+			if (node.arguments().isEmpty()) {
+				if ("initDataBindings".equals(methodName)) {
+					Assert.isTrue(!m_invoke, "Double invoke initDataBindings()");
+					m_invoke = true;
+				} else if ("open".equals(methodName)
+						&& AstNodeUtils.isSuccessorOf(node.getExpression(), "org.eclipse.swt.widgets.Shell")) {
+					Assert.isNull(m_shellOpenStatement, "Double invoke %shell%.open()");
+					m_shellOpenStatement = AstNodeUtils.getEnclosingStatement(node);
+				}
+			}
+			return false;
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Access
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public boolean isInvoke() {
-      return m_invoke;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Access
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public boolean isInvoke() {
+			return m_invoke;
+		}
 
-    public Statement getShellOpenStatement() {
-      return m_shellOpenStatement;
-    }
-  }
-  /**
-   * This visitor do find invocation <code>Realm.runWithDefault()</code> into AST.
-   */
-  private static class RealmMethodVisitor extends ASTVisitor {
-    private boolean m_enclosing;
+		public Statement getShellOpenStatement() {
+			return m_shellOpenStatement;
+		}
+	}
+	/**
+	 * This visitor do find invocation <code>Realm.runWithDefault()</code> into AST.
+	 */
+	private static class RealmMethodVisitor extends ASTVisitor {
+		private boolean m_enclosing;
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // ASTVisitor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public boolean visit(MethodInvocation invocation) {
-      if (!m_enclosing) {
-        m_enclosing =
-            "org.eclipse.core.databinding.observable.Realm.runWithDefault(org.eclipse.core.databinding.observable.Realm,java.lang.Runnable)".equals(CoreUtils.getMethodSignature(invocation));
-      }
-      return false;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// ASTVisitor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public boolean visit(MethodInvocation invocation) {
+			if (!m_enclosing) {
+				m_enclosing =
+						"org.eclipse.core.databinding.observable.Realm.runWithDefault(org.eclipse.core.databinding.observable.Realm,java.lang.Runnable)".equals(CoreUtils.getMethodSignature(invocation));
+			}
+			return false;
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Access
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public boolean isEnclosing() {
-      return m_enclosing;
-    }
-  }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Access
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public boolean isEnclosing() {
+			return m_enclosing;
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/DataBindingsRootInfo.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/DataBindingsRootInfo.java
index c484b1ee0..62e3c502a 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/DataBindingsRootInfo.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/DataBindingsRootInfo.java
@@ -53,177 +53,177 @@
  * @coverage bindings.rcp.model
  */
 public final class DataBindingsRootInfo implements ISubParser {
-  public static final String INIT_DATA_BINDINGS_METHOD_NAME = "initDataBindings";
-  public static final String[] ACCESS_VALUES = {"public ", "protected ", "private ", ""};
-  private MethodDeclaration m_initDataBindings;
-  private final DataBindingContextInfo m_contextInfo = new DataBindingContextInfo();
+	public static final String INIT_DATA_BINDINGS_METHOD_NAME = "initDataBindings";
+	public static final String[] ACCESS_VALUES = {"public ", "protected ", "private ", ""};
+	private MethodDeclaration m_initDataBindings;
+	private final DataBindingContextInfo m_contextInfo = new DataBindingContextInfo();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public MethodDeclaration getInitDataBindings() {
-    return m_initDataBindings;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public MethodDeclaration getInitDataBindings() {
+		return m_initDataBindings;
+	}
 
-  public void setInitDataBindings(MethodDeclaration initDataBindings) {
-    m_initDataBindings = initDataBindings;
-  }
+	public void setInitDataBindings(MethodDeclaration initDataBindings) {
+		m_initDataBindings = initDataBindings;
+	}
 
-  public DataBindingContextInfo getContextInfo() {
-    return m_contextInfo;
-  }
+	public DataBindingContextInfo getContextInfo() {
+		return m_contextInfo;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parser
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public AstObjectInfo parseExpression(AstEditor editor,
-      String signature,
-      ClassInstanceCreation creation,
-      Expression[] arguments,
-      IModelResolver resolver,
-      IDatabindingsProvider provider) throws Exception {
-    ITypeBinding binding = AstNodeUtils.getTypeBinding(creation);
-    if (binding == null) {
-      return null;
-    }
-    // context
-    if ("org.eclipse.core.databinding.DataBindingContext.<init>()".equals(signature)) {
-      return m_contextInfo;
-    }
-    // value strategy
-    if (AstNodeUtils.isSuccessorOf(binding, "org.eclipse.core.databinding.UpdateValueStrategy")) {
-      UpdateValueStrategyInfo strategy = new UpdateValueStrategyInfo(creation, arguments);
-      resolver.addModelSupport(new StrategyModelSupport(strategy, creation));
-      return null;
-    }
-    // list strategy
-    if (AstNodeUtils.isSuccessorOf(binding, "org.eclipse.core.databinding.UpdateListStrategy")) {
-      UpdateListStrategyInfo strategy = new UpdateListStrategyInfo(creation, arguments);
-      resolver.addModelSupport(new StrategyModelSupport(strategy, creation));
-      return null;
-    }
-    // set strategy
-    if (AstNodeUtils.isSuccessorOf(binding, "org.eclipse.core.databinding.UpdateSetStrategy")) {
-      UpdateSetStrategyInfo strategy = new UpdateSetStrategyInfo(creation, arguments);
-      resolver.addModelSupport(new StrategyModelSupport(strategy, creation));
-      return null;
-    }
-    // validator
-    if (AstNodeUtils.isSuccessorOf(binding, "org.eclipse.core.databinding.validation.IValidator")) {
-      return new ValidatorInfo(editor, creation);
-    }
-    // converter
-    if (AstNodeUtils.isSuccessorOf(binding, "org.eclipse.core.databinding.conversion.IConverter")) {
-      return new ConverterInfo(editor, creation);
-    }
-    //
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parser
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public AstObjectInfo parseExpression(AstEditor editor,
+			String signature,
+			ClassInstanceCreation creation,
+			Expression[] arguments,
+			IModelResolver resolver,
+			IDatabindingsProvider provider) throws Exception {
+		ITypeBinding binding = AstNodeUtils.getTypeBinding(creation);
+		if (binding == null) {
+			return null;
+		}
+		// context
+		if ("org.eclipse.core.databinding.DataBindingContext.<init>()".equals(signature)) {
+			return m_contextInfo;
+		}
+		// value strategy
+		if (AstNodeUtils.isSuccessorOf(binding, "org.eclipse.core.databinding.UpdateValueStrategy")) {
+			UpdateValueStrategyInfo strategy = new UpdateValueStrategyInfo(creation, arguments);
+			resolver.addModelSupport(new StrategyModelSupport(strategy, creation));
+			return null;
+		}
+		// list strategy
+		if (AstNodeUtils.isSuccessorOf(binding, "org.eclipse.core.databinding.UpdateListStrategy")) {
+			UpdateListStrategyInfo strategy = new UpdateListStrategyInfo(creation, arguments);
+			resolver.addModelSupport(new StrategyModelSupport(strategy, creation));
+			return null;
+		}
+		// set strategy
+		if (AstNodeUtils.isSuccessorOf(binding, "org.eclipse.core.databinding.UpdateSetStrategy")) {
+			UpdateSetStrategyInfo strategy = new UpdateSetStrategyInfo(creation, arguments);
+			resolver.addModelSupport(new StrategyModelSupport(strategy, creation));
+			return null;
+		}
+		// validator
+		if (AstNodeUtils.isSuccessorOf(binding, "org.eclipse.core.databinding.validation.IValidator")) {
+			return new ValidatorInfo(editor, creation);
+		}
+		// converter
+		if (AstNodeUtils.isSuccessorOf(binding, "org.eclipse.core.databinding.conversion.IConverter")) {
+			return new ConverterInfo(editor, creation);
+		}
+		//
+		return null;
+	}
 
-  @Override
-  public AstObjectInfo parseExpression(AstEditor editor,
-      String signature,
-      MethodInvocation invocation,
-      Expression[] arguments,
-      IModelResolver resolver) throws Exception {
-    if (signature.endsWith("initializeContext(org.eclipse.core.databinding.DataBindingContext)")
-        && AstNodeUtils.getLocalMethodDeclaration(invocation) != null) {
-      Assert.isNotNull(m_contextInfo);
-      m_contextInfo.addInitializeContext(true);
-    }
-    return null;
-  }
+	@Override
+	public AstObjectInfo parseExpression(AstEditor editor,
+			String signature,
+			MethodInvocation invocation,
+			Expression[] arguments,
+			IModelResolver resolver) throws Exception {
+		if (signature.endsWith("initializeContext(org.eclipse.core.databinding.DataBindingContext)")
+				&& AstNodeUtils.getLocalMethodDeclaration(invocation) != null) {
+			Assert.isNotNull(m_contextInfo);
+			m_contextInfo.addInitializeContext(true);
+		}
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Save model changes to source code.
-   */
-  public boolean commit(AstEditor editor,
-      TypeDeclaration typeDeclaration,
-      JavaInfo rootJavaInfo,
-      List<ObserveTypeContainer> containers,
-      boolean controller) throws Exception {
-    IJavaProject javaProject = editor.getJavaProject();
-    CodeGenerationSupport generationSupport = new CodeGenerationSupport(false, m_contextInfo);
-    //
-    boolean reparse = DataBindingsCodeUtils.ensureDBLibraries(javaProject);
-    for (ObserveTypeContainer container : containers) {
-      reparse |= container.ensureDBLibraries(javaProject);
-    }
-    //
-    if (ensureDesignerResources()) {
-      DataBindingsCodeUtils.ensureDesignerResources(javaProject);
-      for (ObserveTypeContainer container : containers) {
-        container.ensureDesignerResources(javaProject);
-      }
-    }
-    // remove old method
-    if (m_initDataBindings != null) {
-      editor.removeBodyDeclaration(m_initDataBindings);
-    }
-    // prepare source code
-    List<String> methodLines = Lists.newArrayList();
-    m_contextInfo.addSourceCode(editor, methodLines, generationSupport);
-    //
-    BodyDeclarationTarget target = new BodyDeclarationTarget(typeDeclaration, null, false);
-    //
-    MethodDeclaration lastInfoMethod =
-        controller
-            ? AstNodeUtils.getConstructors(typeDeclaration).get(0)
-            : DataBindingsCodeUtils.getLastInfoDeclaration(m_initDataBindings, rootJavaInfo);
-    // create new method
-    m_initDataBindings =
-        editor.addMethodDeclaration(createMethodHeader(lastInfoMethod), methodLines, target);
-    // check call initDataBindings() after creation all widgets
-    DataBindingsCodeUtils.ensureInvokeInitDataBindings(
-        controller ? null : rootJavaInfo,
-        editor,
-        typeDeclaration,
-        lastInfoMethod);
-    // check work application main method over Realm
-    DataBindingsCodeUtils.ensureEnclosingRealmOfMain(rootJavaInfo.getEditor());
-    //
-    if (controller) {
-      ControllerSupport.doSave(editor, rootJavaInfo);
-    }
-    //
-    return reparse;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Save model changes to source code.
+	 */
+	public boolean commit(AstEditor editor,
+			TypeDeclaration typeDeclaration,
+			JavaInfo rootJavaInfo,
+			List<ObserveTypeContainer> containers,
+			boolean controller) throws Exception {
+		IJavaProject javaProject = editor.getJavaProject();
+		CodeGenerationSupport generationSupport = new CodeGenerationSupport(false, m_contextInfo);
+		//
+		boolean reparse = DataBindingsCodeUtils.ensureDBLibraries(javaProject);
+		for (ObserveTypeContainer container : containers) {
+			reparse |= container.ensureDBLibraries(javaProject);
+		}
+		//
+		if (ensureDesignerResources()) {
+			DataBindingsCodeUtils.ensureDesignerResources(javaProject);
+			for (ObserveTypeContainer container : containers) {
+				container.ensureDesignerResources(javaProject);
+			}
+		}
+		// remove old method
+		if (m_initDataBindings != null) {
+			editor.removeBodyDeclaration(m_initDataBindings);
+		}
+		// prepare source code
+		List<String> methodLines = Lists.newArrayList();
+		m_contextInfo.addSourceCode(editor, methodLines, generationSupport);
+		//
+		BodyDeclarationTarget target = new BodyDeclarationTarget(typeDeclaration, null, false);
+		//
+		MethodDeclaration lastInfoMethod =
+				controller
+				? AstNodeUtils.getConstructors(typeDeclaration).get(0)
+						: DataBindingsCodeUtils.getLastInfoDeclaration(m_initDataBindings, rootJavaInfo);
+		// create new method
+		m_initDataBindings =
+				editor.addMethodDeclaration(createMethodHeader(lastInfoMethod), methodLines, target);
+		// check call initDataBindings() after creation all widgets
+		DataBindingsCodeUtils.ensureInvokeInitDataBindings(
+				controller ? null : rootJavaInfo,
+						editor,
+						typeDeclaration,
+						lastInfoMethod);
+		// check work application main method over Realm
+		DataBindingsCodeUtils.ensureEnclosingRealmOfMain(rootJavaInfo.getEditor());
+		//
+		if (controller) {
+			ControllerSupport.doSave(editor, rootJavaInfo);
+		}
+		//
+		return reparse;
+	}
 
-  private boolean ensureDesignerResources() {
-    for (AbstractBindingInfo binding : m_contextInfo.getBindings()) {
-      if (binding instanceof TreeViewerInputBindingInfo) {
-        TreeViewerInputBindingInfo treeBinding = (TreeViewerInputBindingInfo) binding;
-        if (treeBinding.isDesignerMode()) {
-          return true;
-        }
-      }
-    }
-    return false;
-  }
+	private boolean ensureDesignerResources() {
+		for (AbstractBindingInfo binding : m_contextInfo.getBindings()) {
+			if (binding instanceof TreeViewerInputBindingInfo) {
+				TreeViewerInputBindingInfo treeBinding = (TreeViewerInputBindingInfo) binding;
+				if (treeBinding.isDesignerMode()) {
+					return true;
+				}
+			}
+		}
+		return false;
+	}
 
-  private static String createMethodHeader(MethodDeclaration lastInfoMethod) throws Exception {
-    int access = Activator.getStore().getInt(IPreferenceConstants.INITDB_GENERATE_ACCESS);
-    // check static
-    if (Modifier.isStatic(lastInfoMethod.getModifiers())) {
-      return ACCESS_VALUES[access]
-          + "static org.eclipse.core.databinding.DataBindingContext "
-          + INIT_DATA_BINDINGS_METHOD_NAME
-          + "()";
-    }
-    // normal
-    return ACCESS_VALUES[access]
-        + "org.eclipse.core.databinding.DataBindingContext "
-        + INIT_DATA_BINDINGS_METHOD_NAME
-        + "()";
-  }
+	private static String createMethodHeader(MethodDeclaration lastInfoMethod) throws Exception {
+		int access = Activator.getStore().getInt(IPreferenceConstants.INITDB_GENERATE_ACCESS);
+		// check static
+		if (Modifier.isStatic(lastInfoMethod.getModifiers())) {
+			return ACCESS_VALUES[access]
+					+ "static org.eclipse.core.databinding.DataBindingContext "
+					+ INIT_DATA_BINDINGS_METHOD_NAME
+					+ "()";
+		}
+		// normal
+		return ACCESS_VALUES[access]
+				+ "org.eclipse.core.databinding.DataBindingContext "
+				+ INIT_DATA_BINDINGS_METHOD_NAME
+				+ "()";
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/GlobalFactoryHelper.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/GlobalFactoryHelper.java
index b7f64715d..7ebe50341 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/GlobalFactoryHelper.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/GlobalFactoryHelper.java
@@ -40,184 +40,184 @@
  * @coverage bindings.rcp.model
  */
 public final class GlobalFactoryHelper {
-  private static List<IGlobalObservableFactory> m_factories;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Observable
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final ObservableInfo createDetailObservable(SingleSelectionObservableInfo masterObservable,
-      BindableInfo object,
-      Type type) throws Exception {
-    for (IGlobalObservableFactory factory : getFactories()) {
-      ObservableInfo detailObservable =
-          factory.createDetailObservable(masterObservable, object, type);
-      if (detailObservable != null) {
-        return detailObservable;
-      }
-    }
-    return null;
-  }
-
-  public static final MapsBeanObservableInfo createObserveMaps(ObservableInfo inputObservable,
-      ObservableInfo domainObservable,
-      Class<?> elementType,
-      boolean[] useViewerSupport) throws Exception {
-    for (IGlobalObservableFactory factory : getFactories()) {
-      MapsBeanObservableInfo observeMaps =
-          factory.createObserveMaps(
-              inputObservable,
-              domainObservable,
-              elementType,
-              useViewerSupport);
-      if (observeMaps != null) {
-        return observeMaps;
-      }
-    }
-    return null;
-  }
-
-  public static BeansObservableFactoryInfo createTreeObservableFactory(ObservableInfo inputObservable,
-      boolean asList) throws Exception {
-    for (IGlobalObservableFactory factory : getFactories()) {
-      BeansObservableFactoryInfo treeObservableFactory =
-          factory.createTreeObservableFactory(inputObservable, asList);
-      if (treeObservableFactory != null) {
-        return treeObservableFactory;
-      }
-    }
-    return null;
-  }
-
-  public static TreeBeanAdvisorInfo createTreeBeanAdvisor(ObservableInfo inputObservable)
-      throws Exception {
-    for (IGlobalObservableFactory factory : getFactories()) {
-      TreeBeanAdvisorInfo treeBeanAdvisor = factory.createTreeBeanAdvisor(inputObservable);
-      if (treeBeanAdvisor != null) {
-        return treeBeanAdvisor;
-      }
-    }
-    return null;
-  }
-
-  public static TreeObservableLabelProviderInfo createTreeLabelProvider(ObservableInfo inputObservable,
-      KnownElementsObservableInfo allElementsObservable) throws Exception {
-    for (IGlobalObservableFactory factory : getFactories()) {
-      TreeObservableLabelProviderInfo treeLabelProvider =
-          factory.createTreeLabelProvider(inputObservable, allElementsObservable);
-      if (treeLabelProvider != null) {
-        return treeLabelProvider;
-      }
-    }
-    return null;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // UI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static void configureChooseElementForViewerInput(ObservableInfo inputObservable,
-      ChooseClassAndPropertiesConfiguration configuration) throws Exception {
-    for (IGlobalObservableFactory factory : getFactories()) {
-      factory.configureChooseElementForViewerInput(inputObservable, configuration);
-    }
-  }
-
-  public static void configureChooseElementForTreeViewerInput(ObservableInfo inputObservable,
-      ChooseClassConfiguration configuration) throws Exception {
-    for (IGlobalObservableFactory factory : getFactories()) {
-      factory.configureChooseElementForTreeViewerInput(inputObservable, configuration);
-    }
-  }
-
-  public static void filterElementPropertiesForViewerInput(ObservableInfo inputObservable,
-      Class<?> elementType,
-      List<PropertyDescriptor> descriptors) throws Exception {
-    for (IGlobalObservableFactory factory : getFactories()) {
-      factory.filterElementPropertiesForTreeViewerInput(inputObservable, elementType, descriptors);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Automatic Wizard
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static void automaticWizardConfigure(ChooseClassAndPropertiesConfiguration configuration)
-      throws Exception {
-    for (IGlobalObservableFactory factory : getFactories()) {
-      factory.automaticWizardConfigure(configuration);
-    }
-  }
-
-  public static List<PropertyAdapter> automaticWizardGetProperties(IJavaProject javaProject,
-      ClassLoader classLoader,
-      Class<?> choosenClass) throws Exception {
-    for (IGlobalObservableFactory factory : getFactories()) {
-      List<PropertyAdapter> properties =
-          factory.automaticWizardGetProperties(javaProject, classLoader, choosenClass);
-      if (properties != null) {
-        return properties;
-      }
-    }
-    return null;
-  }
-
-  public static IAutomaticWizardStub automaticWizardCreateStub(IJavaProject javaProject,
-      ClassLoader classLoader,
-      Class<?> choosenClass) throws Exception {
-    for (IGlobalObservableFactory factory : getFactories()) {
-      IAutomaticWizardStub automaticWizardStub =
-          factory.automaticWizardCreateStub(javaProject, classLoader, choosenClass);
-      if (automaticWizardStub != null) {
-        return automaticWizardStub;
-      }
-    }
-    return null;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Controller
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static void moveBean(IObserveInfo observe,
-      AstEditor controllerEditor,
-      TypeDeclaration controllerRootNode) throws Exception {
-    for (IGlobalObservableFactory factory : getFactories()) {
-      if (factory.moveBean(observe, controllerEditor, controllerRootNode)) {
-        break;
-      }
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Preferences
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static void confgureCodeGenerationPreferencePage(Composite parent,
-      DataBindManager bindManager) throws Exception {
-    for (IGlobalObservableFactory factory : getFactories()) {
-      factory.confgureCodeGenerationPreferencePage(parent, bindManager);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static List<IGlobalObservableFactory> getFactories() throws Exception {
-    if (m_factories == null) {
-      m_factories =
-          ExternalFactoriesHelper.getElementsInstances(
-              IGlobalObservableFactory.class,
-              "org.eclipse.wb.rcp.databinding.observeFactory",
-              "factory");
-    }
-    return m_factories;
-  }
+	private static List<IGlobalObservableFactory> m_factories;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Observable
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final ObservableInfo createDetailObservable(SingleSelectionObservableInfo masterObservable,
+			BindableInfo object,
+			Type type) throws Exception {
+		for (IGlobalObservableFactory factory : getFactories()) {
+			ObservableInfo detailObservable =
+					factory.createDetailObservable(masterObservable, object, type);
+			if (detailObservable != null) {
+				return detailObservable;
+			}
+		}
+		return null;
+	}
+
+	public static final MapsBeanObservableInfo createObserveMaps(ObservableInfo inputObservable,
+			ObservableInfo domainObservable,
+			Class<?> elementType,
+			boolean[] useViewerSupport) throws Exception {
+		for (IGlobalObservableFactory factory : getFactories()) {
+			MapsBeanObservableInfo observeMaps =
+					factory.createObserveMaps(
+							inputObservable,
+							domainObservable,
+							elementType,
+							useViewerSupport);
+			if (observeMaps != null) {
+				return observeMaps;
+			}
+		}
+		return null;
+	}
+
+	public static BeansObservableFactoryInfo createTreeObservableFactory(ObservableInfo inputObservable,
+			boolean asList) throws Exception {
+		for (IGlobalObservableFactory factory : getFactories()) {
+			BeansObservableFactoryInfo treeObservableFactory =
+					factory.createTreeObservableFactory(inputObservable, asList);
+			if (treeObservableFactory != null) {
+				return treeObservableFactory;
+			}
+		}
+		return null;
+	}
+
+	public static TreeBeanAdvisorInfo createTreeBeanAdvisor(ObservableInfo inputObservable)
+			throws Exception {
+		for (IGlobalObservableFactory factory : getFactories()) {
+			TreeBeanAdvisorInfo treeBeanAdvisor = factory.createTreeBeanAdvisor(inputObservable);
+			if (treeBeanAdvisor != null) {
+				return treeBeanAdvisor;
+			}
+		}
+		return null;
+	}
+
+	public static TreeObservableLabelProviderInfo createTreeLabelProvider(ObservableInfo inputObservable,
+			KnownElementsObservableInfo allElementsObservable) throws Exception {
+		for (IGlobalObservableFactory factory : getFactories()) {
+			TreeObservableLabelProviderInfo treeLabelProvider =
+					factory.createTreeLabelProvider(inputObservable, allElementsObservable);
+			if (treeLabelProvider != null) {
+				return treeLabelProvider;
+			}
+		}
+		return null;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// UI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static void configureChooseElementForViewerInput(ObservableInfo inputObservable,
+			ChooseClassAndPropertiesConfiguration configuration) throws Exception {
+		for (IGlobalObservableFactory factory : getFactories()) {
+			factory.configureChooseElementForViewerInput(inputObservable, configuration);
+		}
+	}
+
+	public static void configureChooseElementForTreeViewerInput(ObservableInfo inputObservable,
+			ChooseClassConfiguration configuration) throws Exception {
+		for (IGlobalObservableFactory factory : getFactories()) {
+			factory.configureChooseElementForTreeViewerInput(inputObservable, configuration);
+		}
+	}
+
+	public static void filterElementPropertiesForViewerInput(ObservableInfo inputObservable,
+			Class<?> elementType,
+			List<PropertyDescriptor> descriptors) throws Exception {
+		for (IGlobalObservableFactory factory : getFactories()) {
+			factory.filterElementPropertiesForTreeViewerInput(inputObservable, elementType, descriptors);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Automatic Wizard
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static void automaticWizardConfigure(ChooseClassAndPropertiesConfiguration configuration)
+			throws Exception {
+		for (IGlobalObservableFactory factory : getFactories()) {
+			factory.automaticWizardConfigure(configuration);
+		}
+	}
+
+	public static List<PropertyAdapter> automaticWizardGetProperties(IJavaProject javaProject,
+			ClassLoader classLoader,
+			Class<?> choosenClass) throws Exception {
+		for (IGlobalObservableFactory factory : getFactories()) {
+			List<PropertyAdapter> properties =
+					factory.automaticWizardGetProperties(javaProject, classLoader, choosenClass);
+			if (properties != null) {
+				return properties;
+			}
+		}
+		return null;
+	}
+
+	public static IAutomaticWizardStub automaticWizardCreateStub(IJavaProject javaProject,
+			ClassLoader classLoader,
+			Class<?> choosenClass) throws Exception {
+		for (IGlobalObservableFactory factory : getFactories()) {
+			IAutomaticWizardStub automaticWizardStub =
+					factory.automaticWizardCreateStub(javaProject, classLoader, choosenClass);
+			if (automaticWizardStub != null) {
+				return automaticWizardStub;
+			}
+		}
+		return null;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Controller
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static void moveBean(IObserveInfo observe,
+			AstEditor controllerEditor,
+			TypeDeclaration controllerRootNode) throws Exception {
+		for (IGlobalObservableFactory factory : getFactories()) {
+			if (factory.moveBean(observe, controllerEditor, controllerRootNode)) {
+				break;
+			}
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Preferences
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static void confgureCodeGenerationPreferencePage(Composite parent,
+			DataBindManager bindManager) throws Exception {
+		for (IGlobalObservableFactory factory : getFactories()) {
+			factory.confgureCodeGenerationPreferencePage(parent, bindManager);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static List<IGlobalObservableFactory> getFactories() throws Exception {
+		if (m_factories == null) {
+			m_factories =
+					ExternalFactoriesHelper.getElementsInstances(
+							IGlobalObservableFactory.class,
+							"org.eclipse.wb.rcp.databinding.observeFactory",
+							"factory");
+		}
+		return m_factories;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/IGlobalObservableFactory.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/IGlobalObservableFactory.java
index 84b16be51..1d99a32e4 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/IGlobalObservableFactory.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/IGlobalObservableFactory.java
@@ -39,114 +39,114 @@
  * @coverage bindings.rcp.model
  */
 public interface IGlobalObservableFactory {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Observable
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return {@link ObservableInfo} improvement detail observable or <code>null</code> otherwise.
-   */
-  ObservableInfo createDetailObservable(SingleSelectionObservableInfo masterObservable,
-      BindableInfo object,
-      Type type) throws Exception;
-
-  /**
-   * @return {@link MapsBeanObservableInfo} improvement maps observe or <code>null</code> otherwise.
-   */
-  MapsBeanObservableInfo createObserveMaps(ObservableInfo inputObservable,
-      ObservableInfo domainObservable,
-      Class<?> elementType,
-      boolean[] useViewerSupport) throws Exception;
-
-  /**
-   * @return {@link BeansObservableFactoryInfo} improvement tree observable factory or
-   *         <code>null</code> otherwise.
-   */
-  BeansObservableFactoryInfo createTreeObservableFactory(ObservableInfo inputObservable,
-      boolean asList) throws Exception;
-
-  /**
-   * @return {@link TreeBeanAdvisorInfo} improvement tree advisor or <code>null</code> otherwise.
-   */
-  TreeBeanAdvisorInfo createTreeBeanAdvisor(ObservableInfo inputObservable) throws Exception;
-
-  /**
-   * @return {@link TreeObservableLabelProviderInfo} improvement tree label provider or
-   *         <code>null</code> otherwise.
-   */
-  TreeObservableLabelProviderInfo createTreeLabelProvider(ObservableInfo inputObservable,
-      KnownElementsObservableInfo allElementsObservable) throws Exception;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // UI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Configure {@link ChooseClassAndPropertiesConfiguration} for viewer input content provider.
-   */
-  void configureChooseElementForViewerInput(ObservableInfo inputObservable,
-      ChooseClassAndPropertiesConfiguration configuration) throws Exception;
-
-  /**
-   * Configure {@link ChooseClassConfiguration} for tree viewer input content provider.
-   */
-  void configureChooseElementForTreeViewerInput(ObservableInfo inputObservable,
-      ChooseClassConfiguration configuration) throws Exception;
-
-  /**
-   * Filter given properties (f.e. include only EMF properties).
-   */
-  void filterElementPropertiesForTreeViewerInput(ObservableInfo inputObservable,
-      Class<?> elementType,
-      List<PropertyDescriptor> descriptors) throws Exception;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Automatic Wizard
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Add additional settings (value scope, label provider and etc.) to
-   * {@link ChooseClassAndPropertiesConfiguration}.
-   */
-  void automaticWizardConfigure(ChooseClassAndPropertiesConfiguration configuration);
-
-  /**
-   * @return the list of improvement {@link PropertyAdapter} properties for auto wizard or
-   *         <code>null</code> otherwise.
-   */
-  List<PropertyAdapter> automaticWizardGetProperties(IJavaProject javaProject,
-      ClassLoader classLoader,
-      Class<?> choosenClass) throws Exception;
-
-  /**
-   * @return {@link IAutomaticWizardStub} for special configure auto wizard operation or
-   *         <code>null</code> otherwise.
-   */
-  IAutomaticWizardStub automaticWizardCreateStub(IJavaProject javaProject,
-      ClassLoader classLoader,
-      Class<?> choosenClass) throws Exception;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Controller
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if do move given {@link IObserveInfo} to controller class or
-   *         <code>false</code> otherwise.
-   */
-  boolean moveBean(IObserveInfo observe,
-      AstEditor controllerEditor,
-      TypeDeclaration controllerRootNode) throws Exception;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Preferences
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  void confgureCodeGenerationPreferencePage(Composite parent, DataBindManager bindManager)
-      throws Exception;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Observable
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return {@link ObservableInfo} improvement detail observable or <code>null</code> otherwise.
+	 */
+	ObservableInfo createDetailObservable(SingleSelectionObservableInfo masterObservable,
+			BindableInfo object,
+			Type type) throws Exception;
+
+	/**
+	 * @return {@link MapsBeanObservableInfo} improvement maps observe or <code>null</code> otherwise.
+	 */
+	MapsBeanObservableInfo createObserveMaps(ObservableInfo inputObservable,
+			ObservableInfo domainObservable,
+			Class<?> elementType,
+			boolean[] useViewerSupport) throws Exception;
+
+	/**
+	 * @return {@link BeansObservableFactoryInfo} improvement tree observable factory or
+	 *         <code>null</code> otherwise.
+	 */
+	BeansObservableFactoryInfo createTreeObservableFactory(ObservableInfo inputObservable,
+			boolean asList) throws Exception;
+
+	/**
+	 * @return {@link TreeBeanAdvisorInfo} improvement tree advisor or <code>null</code> otherwise.
+	 */
+	TreeBeanAdvisorInfo createTreeBeanAdvisor(ObservableInfo inputObservable) throws Exception;
+
+	/**
+	 * @return {@link TreeObservableLabelProviderInfo} improvement tree label provider or
+	 *         <code>null</code> otherwise.
+	 */
+	TreeObservableLabelProviderInfo createTreeLabelProvider(ObservableInfo inputObservable,
+			KnownElementsObservableInfo allElementsObservable) throws Exception;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// UI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Configure {@link ChooseClassAndPropertiesConfiguration} for viewer input content provider.
+	 */
+	void configureChooseElementForViewerInput(ObservableInfo inputObservable,
+			ChooseClassAndPropertiesConfiguration configuration) throws Exception;
+
+	/**
+	 * Configure {@link ChooseClassConfiguration} for tree viewer input content provider.
+	 */
+	void configureChooseElementForTreeViewerInput(ObservableInfo inputObservable,
+			ChooseClassConfiguration configuration) throws Exception;
+
+	/**
+	 * Filter given properties (f.e. include only EMF properties).
+	 */
+	void filterElementPropertiesForTreeViewerInput(ObservableInfo inputObservable,
+			Class<?> elementType,
+			List<PropertyDescriptor> descriptors) throws Exception;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Automatic Wizard
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Add additional settings (value scope, label provider and etc.) to
+	 * {@link ChooseClassAndPropertiesConfiguration}.
+	 */
+	void automaticWizardConfigure(ChooseClassAndPropertiesConfiguration configuration);
+
+	/**
+	 * @return the list of improvement {@link PropertyAdapter} properties for auto wizard or
+	 *         <code>null</code> otherwise.
+	 */
+	List<PropertyAdapter> automaticWizardGetProperties(IJavaProject javaProject,
+			ClassLoader classLoader,
+			Class<?> choosenClass) throws Exception;
+
+	/**
+	 * @return {@link IAutomaticWizardStub} for special configure auto wizard operation or
+	 *         <code>null</code> otherwise.
+	 */
+	IAutomaticWizardStub automaticWizardCreateStub(IJavaProject javaProject,
+			ClassLoader classLoader,
+			Class<?> choosenClass) throws Exception;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Controller
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if do move given {@link IObserveInfo} to controller class or
+	 *         <code>false</code> otherwise.
+	 */
+	boolean moveBean(IObserveInfo observe,
+			AstEditor controllerEditor,
+			TypeDeclaration controllerRootNode) throws Exception;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Preferences
+	//
+	////////////////////////////////////////////////////////////////////////////
+	void confgureCodeGenerationPreferencePage(Composite parent, DataBindManager bindManager)
+			throws Exception;
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/IObservableFactory.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/IObservableFactory.java
index 86c67e981..60e38e16c 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/IObservableFactory.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/IObservableFactory.java
@@ -17,60 +17,60 @@
  * @coverage bindings.rcp.model
  */
 public interface IObservableFactory {
-  /**
-   * @return {@link Type} of this factory.
-   */
-  Type getType() throws Exception;
+	/**
+	 * @return {@link Type} of this factory.
+	 */
+	Type getType() throws Exception;
 
-  /**
-   * Create {@link ObservableInfo} for given <code>object</code> and <code>property</code> with
-   * required <code>type</code>.
-   */
-  ObservableInfo createObservable(BindableInfo object,
-      BindableInfo property,
-      Type type,
-      boolean version_1_3) throws Exception;
+	/**
+	 * Create {@link ObservableInfo} for given <code>object</code> and <code>property</code> with
+	 * required <code>type</code>.
+	 */
+	ObservableInfo createObservable(BindableInfo object,
+			BindableInfo property,
+			Type type,
+			boolean version_1_3) throws Exception;
 
-  /**
-   * Observable type which work this factory.
-   */
-  enum Type {
-    /**
-     * Work only with <code>observeValue()</code>.
-     */
-    OnlyValue,
-    /**
-     * Work only with <code>observeList()</code>.
-     */
-    OnlyList,
-    /**
-     * Work only with <code>observeSet()</code>.
-     */
-    OnlySet,
-    /**
-     * Undefined.
-     */
-    Any,
-    /**
-     * Object type is <code>List</code>, but may be work with any <code>bindXXX()</code>.
-     */
-    List,
-    /**
-     * Object type is <code>Set</code>, but may be work with any <code>bindXXX()</code>.
-     */
-    Set,
-    /**
-     * Binding input for JFace viewers.
-     */
-    Input,
-    /**
-     * Object type is collection (maybe List, maybe Set) and use only for binding input for JFace
-     * viewers.
-     */
-    InputCollection,
-    /**
-     * Work only with <code>observeDetailXXX()</code>.
-     */
-    Detail
-  }
+	/**
+	 * Observable type which work this factory.
+	 */
+	enum Type {
+		/**
+		 * Work only with <code>observeValue()</code>.
+		 */
+		OnlyValue,
+		/**
+		 * Work only with <code>observeList()</code>.
+		 */
+		OnlyList,
+		/**
+		 * Work only with <code>observeSet()</code>.
+		 */
+		OnlySet,
+		/**
+		 * Undefined.
+		 */
+		Any,
+		/**
+		 * Object type is <code>List</code>, but may be work with any <code>bindXXX()</code>.
+		 */
+		List,
+		/**
+		 * Object type is <code>Set</code>, but may be work with any <code>bindXXX()</code>.
+		 */
+		Set,
+		/**
+		 * Binding input for JFace viewers.
+		 */
+		Input,
+		/**
+		 * Object type is collection (maybe List, maybe Set) and use only for binding input for JFace
+		 * viewers.
+		 */
+		InputCollection,
+		/**
+		 * Work only with <code>observeDetailXXX()</code>.
+		 */
+		Detail
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/JavaInfoDecorator.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/JavaInfoDecorator.java
index 30e5d22e7..aec895804 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/JavaInfoDecorator.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/JavaInfoDecorator.java
@@ -26,39 +26,39 @@
  * @coverage bindings.rcp.model
  */
 public final class JavaInfoDecorator
-    extends
-      org.eclipse.wb.internal.core.databinding.model.presentation.JavaInfoDecorator {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public JavaInfoDecorator(DatabindingsProvider provider) {
-    super(provider, provider.getJavaInfoRoot());
-  }
+extends
+org.eclipse.wb.internal.core.databinding.model.presentation.JavaInfoDecorator {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public JavaInfoDecorator(DatabindingsProvider provider) {
+		super(provider, provider.getJavaInfoRoot());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Handle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected boolean accept(ObjectInfo object) throws Exception {
-    return object instanceof AbstractComponentInfo
-        || object instanceof ViewerInfo
-        || object.getParent() instanceof NonVisualBeanContainerInfo;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Handle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected boolean accept(ObjectInfo object) throws Exception {
+		return object instanceof AbstractComponentInfo
+				|| object instanceof ViewerInfo
+				|| object.getParent() instanceof NonVisualBeanContainerInfo;
+	}
 
-  @Override
-  protected String getReference(ObjectInfo object) throws Exception {
-    return JavaInfoReferenceProvider.getReference((JavaInfo) object);
-  }
+	@Override
+	protected String getReference(ObjectInfo object) throws Exception {
+		return JavaInfoReferenceProvider.getReference((JavaInfo) object);
+	}
 
-  @Override
-  protected boolean equals(ObjectInfo object, String objectReference, IObserveInfo iobserve)
-      throws Exception {
-    BindableInfo bindable = (BindableInfo) iobserve;
-    return JavaInfoDeleteManager.checkWidget((JavaInfo) object, bindable)
-        || objectReference.equals(bindable.getReference());
-  }
+	@Override
+	protected boolean equals(ObjectInfo object, String objectReference, IObserveInfo iobserve)
+			throws Exception {
+		BindableInfo bindable = (BindableInfo) iobserve;
+		return JavaInfoDeleteManager.checkWidget((JavaInfo) object, bindable)
+				|| objectReference.equals(bindable.getReference());
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/JavaInfoDeleteManager.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/JavaInfoDeleteManager.java
index 193f003a5..512b23aaa 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/JavaInfoDeleteManager.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/JavaInfoDeleteManager.java
@@ -31,53 +31,53 @@
  * @coverage bindings.rcp.model
  */
 public final class JavaInfoDeleteManager
-    extends
-      org.eclipse.wb.internal.core.databinding.model.JavaInfoDeleteManager {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public JavaInfoDeleteManager(DatabindingsProvider provider) {
-    super(provider, provider.getJavaInfoRoot());
-  }
+extends
+org.eclipse.wb.internal.core.databinding.model.JavaInfoDeleteManager {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public JavaInfoDeleteManager(DatabindingsProvider provider) {
+		super(provider, provider.getJavaInfoRoot());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Handle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void deleteBinding(IBindingInfo ibinding, List<IBindingInfo> bindings) throws Exception {
-    AbstractBindingInfo binding = (AbstractBindingInfo) ibinding;
-    binding.delete();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Handle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void deleteBinding(IBindingInfo ibinding, List<IBindingInfo> bindings) throws Exception {
+		AbstractBindingInfo binding = (AbstractBindingInfo) ibinding;
+		binding.delete();
+	}
 
-  @Override
-  protected boolean accept(ObjectInfo javaInfo) throws Exception {
-    return javaInfo instanceof AbstractComponentInfo
-        || javaInfo instanceof ViewerInfo
-        || javaInfo.getParent() instanceof NonVisualBeanContainerInfo;
-  }
+	@Override
+	protected boolean accept(ObjectInfo javaInfo) throws Exception {
+		return javaInfo instanceof AbstractComponentInfo
+				|| javaInfo instanceof ViewerInfo
+				|| javaInfo.getParent() instanceof NonVisualBeanContainerInfo;
+	}
 
-  @Override
-  protected String getReference(ObjectInfo javaInfo) throws Exception {
-    return JavaInfoReferenceProvider.getReference((JavaInfo) javaInfo);
-  }
+	@Override
+	protected String getReference(ObjectInfo javaInfo) throws Exception {
+		return JavaInfoReferenceProvider.getReference((JavaInfo) javaInfo);
+	}
 
-  @Override
-  protected boolean equals(ObjectInfo javaInfo, String javaInfoReference, IObserveInfo iobserve)
-      throws Exception {
-    BindableInfo bindable = (BindableInfo) iobserve;
-    return checkWidget((JavaInfo) javaInfo, bindable)
-        || javaInfoReference.equals(bindable.getReference());
-  }
+	@Override
+	protected boolean equals(ObjectInfo javaInfo, String javaInfoReference, IObserveInfo iobserve)
+			throws Exception {
+		BindableInfo bindable = (BindableInfo) iobserve;
+		return checkWidget((JavaInfo) javaInfo, bindable)
+				|| javaInfoReference.equals(bindable.getReference());
+	}
 
-  static boolean checkWidget(JavaInfo javaInfo, BindableInfo bindable) {
-    if (bindable instanceof WidgetBindableInfo) {
-      WidgetBindableInfo widgetBindable = (WidgetBindableInfo) bindable;
-      return javaInfo == widgetBindable.getJavaInfo();
-    }
-    return false;
-  }
+	static boolean checkWidget(JavaInfo javaInfo, BindableInfo bindable) {
+		if (bindable instanceof WidgetBindableInfo) {
+			WidgetBindableInfo widgetBindable = (WidgetBindableInfo) bindable;
+			return javaInfo == widgetBindable.getJavaInfo();
+		}
+		return false;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/ObservableCodeSupport.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/ObservableCodeSupport.java
index ecac28d63..61fd5d59f 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/ObservableCodeSupport.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/ObservableCodeSupport.java
@@ -23,22 +23,22 @@
  * @coverage bindings.rcp.model
  */
 public abstract class ObservableCodeSupport extends AstObjectInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final void addSourceCode(List<String> lines, CodeGenerationSupport generationSupport)
-      throws Exception {
-    throw new UnsupportedOperationException();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final void addSourceCode(List<String> lines, CodeGenerationSupport generationSupport)
+			throws Exception {
+		throw new UnsupportedOperationException();
+	}
 
-  /**
-   * Generate source code association with given {@link ObservableInfo} observable and add to
-   * <code>lines</code>.
-   */
-  public abstract void addSourceCode(ObservableInfo observable,
-      List<String> lines,
-      CodeGenerationSupport generationSupport) throws Exception;
+	/**
+	 * Generate source code association with given {@link ObservableInfo} observable and add to
+	 * <code>lines</code>.
+	 */
+	public abstract void addSourceCode(ObservableInfo observable,
+			List<String> lines,
+			CodeGenerationSupport generationSupport) throws Exception;
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/ObservableInfo.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/ObservableInfo.java
index 0539c82f1..7d478b6cf 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/ObservableInfo.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/ObservableInfo.java
@@ -27,111 +27,111 @@
  * @coverage bindings.rcp.model
  */
 public abstract class ObservableInfo extends AstObjectInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return {@link BindableInfo} observable object model.
-   */
-  public abstract BindableInfo getBindableObject();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return {@link BindableInfo} observable object model.
+	 */
+	public abstract BindableInfo getBindableObject();
 
-  /**
-   * @return {@link BindableInfo} observable property model.
-   */
-  public abstract BindableInfo getBindableProperty();
+	/**
+	 * @return {@link BindableInfo} observable property model.
+	 */
+	public abstract BindableInfo getBindableProperty();
 
-  /**
-   * @return <code>true</code> if this model may be use for more bindings.
-   */
-  public boolean canShared() {
-    return false;
-  }
+	/**
+	 * @return <code>true</code> if this model may be use for more bindings.
+	 */
+	public boolean canShared() {
+		return false;
+	}
 
-  /**
-   * @return {@code true} if bindable object not supported Java Bean model.
-   */
-  public final boolean isPojoBindable() {
-    BindableInfo parent = (BindableInfo) getBindableProperty().getParent();
-    if (parent != null) {
-      return isPojoBean(parent.getObjectType());
-    }
-    return isPojoBean(getBindableObject().getObjectType());
-  }
+	/**
+	 * @return {@code true} if bindable object not supported Java Bean model.
+	 */
+	public final boolean isPojoBindable() {
+		BindableInfo parent = (BindableInfo) getBindableProperty().getParent();
+		if (parent != null) {
+			return isPojoBean(parent.getObjectType());
+		}
+		return isPojoBean(getBindableObject().getObjectType());
+	}
 
-  public static boolean isPojoBean(Class<?> beanClass) {
-    return isNotExistMethod(
-        beanClass,
-        "addPropertyChangeListener(java.beans.PropertyChangeListener)")
-        && isNotExistMethod(
-            beanClass,
-            "addPropertyChangeListener(java.lang.String,java.beans.PropertyChangeListener)");
-  }
+	public static boolean isPojoBean(Class<?> beanClass) {
+		return isNotExistMethod(
+				beanClass,
+				"addPropertyChangeListener(java.beans.PropertyChangeListener)")
+				&& isNotExistMethod(
+						beanClass,
+						"addPropertyChangeListener(java.lang.String,java.beans.PropertyChangeListener)");
+	}
 
-  private static boolean isNotExistMethod(Class<?> beanClass, String signature) {
-    return ReflectionUtils.getMethodBySignature(beanClass, signature) == null;
-  }
+	private static boolean isNotExistMethod(Class<?> beanClass, String signature) {
+		return ReflectionUtils.getMethodBySignature(beanClass, signature) == null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getPresentationText() throws Exception {
-    return getBindableObject().getPresentation().getTextForBinding()
-        + "."
-        + getBindableProperty().getPresentation().getTextForBinding();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getPresentationText() throws Exception {
+		return getBindableObject().getPresentation().getTextForBinding()
+				+ "."
+				+ getBindableProperty().getPresentation().getTextForBinding();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Create {@link IUiContentProvider} content providers for edit this model.
-   */
-  public void createContentProviders(List<IUiContentProvider> providers,
-      BindingUiContentProviderContext context,
-      DatabindingsProvider provider) throws Exception {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Create {@link IUiContentProvider} content providers for edit this model.
+	 */
+	public void createContentProviders(List<IUiContentProvider> providers,
+			BindingUiContentProviderContext context,
+			DatabindingsProvider provider) throws Exception {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected ObservableCodeSupport m_codeSupport;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected ObservableCodeSupport m_codeSupport;
 
-  /**
-   * XXX
-   */
-  public final void setCodeSupport(ObservableCodeSupport codeSupport) {
-    m_codeSupport = codeSupport;
-  }
+	/**
+	 * XXX
+	 */
+	public final void setCodeSupport(ObservableCodeSupport codeSupport) {
+		m_codeSupport = codeSupport;
+	}
 
-  @Override
-  public void addSourceCode(List<String> lines, CodeGenerationSupport generationSupport)
-      throws Exception {
-    if (m_codeSupport == null) {
-      super.addSourceCode(lines, generationSupport);
-    } else {
-      m_codeSupport.addSourceCode(this, lines, generationSupport);
-    }
-  }
+	@Override
+	public void addSourceCode(List<String> lines, CodeGenerationSupport generationSupport)
+			throws Exception {
+		if (m_codeSupport == null) {
+			super.addSourceCode(lines, generationSupport);
+		} else {
+			m_codeSupport.addSourceCode(this, lines, generationSupport);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Visiting
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void accept(AstObjectInfoVisitor visitor) throws Exception {
-    super.accept(visitor);
-    if (m_codeSupport != null) {
-      m_codeSupport.accept(visitor);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Visiting
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void accept(AstObjectInfoVisitor visitor) throws Exception {
+		super.accept(visitor);
+		if (m_codeSupport != null) {
+			m_codeSupport.accept(visitor);
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/SimpleClassObjectInfo.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/SimpleClassObjectInfo.java
index 241211c83..612c6d190 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/SimpleClassObjectInfo.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/SimpleClassObjectInfo.java
@@ -21,40 +21,40 @@
  * @coverage bindings.rcp.model
  */
 public abstract class SimpleClassObjectInfo extends AstObjectInfo {
-  protected String m_className;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SimpleClassObjectInfo() {
-  }
-
-  public SimpleClassObjectInfo(String className) {
-    m_className = className;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public String getClassName() {
-    return m_className;
-  }
-
-  public void setClassName(String className) {
-    m_className = className;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getPresentationText() throws Exception {
-    return ClassUtils.getShortClassName(m_className);
-  }
+	protected String m_className;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SimpleClassObjectInfo() {
+	}
+
+	public SimpleClassObjectInfo(String className) {
+		m_className = className;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public String getClassName() {
+		return m_className;
+	}
+
+	public void setClassName(String className) {
+		m_className = className;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getPresentationText() throws Exception {
+		return ClassUtils.getShortClassName(m_className);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/BeansObserveTypeContainer.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/BeansObserveTypeContainer.java
index e834989c8..40a15a5e4 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/BeansObserveTypeContainer.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/BeansObserveTypeContainer.java
@@ -105,965 +105,965 @@
  * @coverage bindings.rcp.model.beans
  */
 public final class BeansObserveTypeContainer extends ObserveTypeContainer {
-  private DatabindingsProvider m_provider;
-  private List<BeanBindableInfo> m_observables = Collections.emptyList();
-  private JavaInfo m_rootJavaInfo;
+	private DatabindingsProvider m_provider;
+	private List<BeanBindableInfo> m_observables = Collections.emptyList();
+	private JavaInfo m_rootJavaInfo;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public BeansObserveTypeContainer() {
-    super(ObserveType.BEANS, false, true);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public BeansObserveTypeContainer() {
+		super(ObserveType.BEANS, false, true);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Initialize
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void initialize(IDatabindingsProvider provider) throws Exception {
-    m_provider = (DatabindingsProvider) provider;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Initialize
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void initialize(IDatabindingsProvider provider) throws Exception {
+		m_provider = (DatabindingsProvider) provider;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IObserveTypeContainer
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public List<IObserveInfo> getObservables() {
-    return CoreUtils.cast(m_observables);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IObserveTypeContainer
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public List<IObserveInfo> getObservables() {
+		return CoreUtils.cast(m_observables);
+	}
 
-  @Override
-  public void synchronizeObserves(JavaInfo root, AstEditor editor, TypeDeclaration rootNode)
-      throws Exception {
-    ClassLoader classLoader = EditorState.get(m_rootJavaInfo.getEditor()).getEditorLoader();
-    BeanSupport beanSupport = new BeanSupport(classLoader, null);
-    beanSupport.setProvider(m_provider);
-    // update
-    synchronizeFields(beanSupport, rootNode);
-    synchronizeLocalComposites(beanSupport);
-    synchronizeLocalVariables(beanSupport, rootNode);
-  }
+	@Override
+	public void synchronizeObserves(JavaInfo root, AstEditor editor, TypeDeclaration rootNode)
+			throws Exception {
+		ClassLoader classLoader = EditorState.get(m_rootJavaInfo.getEditor()).getEditorLoader();
+		BeanSupport beanSupport = new BeanSupport(classLoader, null);
+		beanSupport.setProvider(m_provider);
+		// update
+		synchronizeFields(beanSupport, rootNode);
+		synchronizeLocalComposites(beanSupport);
+		synchronizeLocalVariables(beanSupport, rootNode);
+	}
 
-  private void synchronizeFields(final BeanSupport beanSupport, TypeDeclaration rootNode)
-      throws Exception {
-    SynchronizeManager.synchronizeObjects(
-        m_observables,
-        CoreUtils.getFieldFragments(rootNode),
-        new ISynchronizeProcessor<VariableDeclarationFragment, BeanBindableInfo>() {
-          @Override
-          public boolean handleObject(BeanBindableInfo bindable) {
-            return bindable instanceof FieldBeanBindableInfo
-                && ((FieldBeanBindableInfo) bindable).getFragment() != null;
-          }
+	private void synchronizeFields(final BeanSupport beanSupport, TypeDeclaration rootNode)
+			throws Exception {
+		SynchronizeManager.synchronizeObjects(
+				m_observables,
+				CoreUtils.getFieldFragments(rootNode),
+				new ISynchronizeProcessor<VariableDeclarationFragment, BeanBindableInfo>() {
+					@Override
+					public boolean handleObject(BeanBindableInfo bindable) {
+						return bindable instanceof FieldBeanBindableInfo
+								&& ((FieldBeanBindableInfo) bindable).getFragment() != null;
+					}
 
-          @Override
-          public VariableDeclarationFragment getKeyObject(BeanBindableInfo bindable) {
-            FieldBeanBindableInfo bean = (FieldBeanBindableInfo) bindable;
-            return bean.getFragment();
-          }
+					@Override
+					public VariableDeclarationFragment getKeyObject(BeanBindableInfo bindable) {
+						FieldBeanBindableInfo bean = (FieldBeanBindableInfo) bindable;
+						return bean.getFragment();
+					}
 
-          @Override
-          public boolean equals(VariableDeclarationFragment key0, VariableDeclarationFragment key1) {
-            return key0 == key1;
-          }
+					@Override
+					public boolean equals(VariableDeclarationFragment key0, VariableDeclarationFragment key1) {
+						return key0 == key1;
+					}
 
-          @Override
-          public BeanBindableInfo findObject(Map<VariableDeclarationFragment, BeanBindableInfo> keyObjectToObject,
-              VariableDeclarationFragment key) throws Exception {
-            return null;
-          }
+					@Override
+					public BeanBindableInfo findObject(Map<VariableDeclarationFragment, BeanBindableInfo> keyObjectToObject,
+							VariableDeclarationFragment key) throws Exception {
+						return null;
+					}
 
-          @Override
-          public BeanBindableInfo createObject(VariableDeclarationFragment fragment)
-              throws Exception {
-            try {
-              // prepare bean class
-              Type type = CoreUtils.getType(fragment, true);
-              Class<?> beanClass = loadClass(AstNodeUtils.getFullyQualifiedName(type, true));
-              // prepare JavaInfo
-              JavaInfo widget = getJavaInfoRepresentedBy(fragment.getName().getIdentifier());
-              //
-              return new FieldBeanBindableInfo(beanSupport, fragment, beanClass, widget);
-            } catch (ClassNotFoundException e) {
-              AbstractParser.addError(m_provider.getAstEditor(), "ClassNotFoundException: "
-                  + fragment, new Throwable());
-              return null;
-            }
-          }
+					@Override
+					public BeanBindableInfo createObject(VariableDeclarationFragment fragment)
+							throws Exception {
+						try {
+							// prepare bean class
+							Type type = CoreUtils.getType(fragment, true);
+							Class<?> beanClass = loadClass(AstNodeUtils.getFullyQualifiedName(type, true));
+							// prepare JavaInfo
+							JavaInfo widget = getJavaInfoRepresentedBy(fragment.getName().getIdentifier());
+							//
+							return new FieldBeanBindableInfo(beanSupport, fragment, beanClass, widget);
+						} catch (ClassNotFoundException e) {
+							AbstractParser.addError(m_provider.getAstEditor(), "ClassNotFoundException: "
+									+ fragment, new Throwable());
+							return null;
+						}
+					}
 
-          @Override
-          public void update(BeanBindableInfo bindable) throws Exception {
-            FieldBeanBindableInfo bean = (FieldBeanBindableInfo) bindable;
-            bean.update(BeansObserveTypeContainer.this);
-          }
-        });
-  }
+					@Override
+					public void update(BeanBindableInfo bindable) throws Exception {
+						FieldBeanBindableInfo bean = (FieldBeanBindableInfo) bindable;
+						bean.update(BeansObserveTypeContainer.this);
+					}
+				});
+	}
 
-  private void synchronizeLocalComposites(final BeanSupport beanSupport) throws Exception {
-    int observableSize = m_observables.size();
-    int localCompositeIndex = -1;
-    // find first local Composite
-    for (int i = 0; i < observableSize; i++) {
-      BeanBindableInfo bindable = m_observables.get(i);
-      if (bindable instanceof FieldBeanBindableInfo
-          && ((FieldBeanBindableInfo) bindable).getFragment() == null) {
-        localCompositeIndex = i;
-        break;
-      }
-    }
-    // or last field
-    if (localCompositeIndex == -1) {
-      for (int i = 0; i < observableSize; i++) {
-        BeanBindableInfo bindable = m_observables.get(i);
-        if (bindable instanceof FieldBeanBindableInfo
-            && ((FieldBeanBindableInfo) bindable).getFragment() != null) {
-          localCompositeIndex = i + 1;
-          break;
-        }
-      }
-    }
-    // or sets as first item
-    if (localCompositeIndex == -1) {
-      localCompositeIndex = 0;
-    }
-    // update local Composites
-    SynchronizeManager.synchronizeObjects(
-        m_observables.subList(localCompositeIndex, observableSize),
-        getLocalComposites(),
-        new ISynchronizeProcessor<JavaInfo, BeanBindableInfo>() {
-          @Override
-          public boolean handleObject(BeanBindableInfo bindable) {
-            return bindable instanceof FieldBeanBindableInfo
-                && ((FieldBeanBindableInfo) bindable).getFragment() == null;
-          }
+	private void synchronizeLocalComposites(final BeanSupport beanSupport) throws Exception {
+		int observableSize = m_observables.size();
+		int localCompositeIndex = -1;
+		// find first local Composite
+		for (int i = 0; i < observableSize; i++) {
+			BeanBindableInfo bindable = m_observables.get(i);
+			if (bindable instanceof FieldBeanBindableInfo
+					&& ((FieldBeanBindableInfo) bindable).getFragment() == null) {
+				localCompositeIndex = i;
+				break;
+			}
+		}
+		// or last field
+		if (localCompositeIndex == -1) {
+			for (int i = 0; i < observableSize; i++) {
+				BeanBindableInfo bindable = m_observables.get(i);
+				if (bindable instanceof FieldBeanBindableInfo
+						&& ((FieldBeanBindableInfo) bindable).getFragment() != null) {
+					localCompositeIndex = i + 1;
+					break;
+				}
+			}
+		}
+		// or sets as first item
+		if (localCompositeIndex == -1) {
+			localCompositeIndex = 0;
+		}
+		// update local Composites
+		SynchronizeManager.synchronizeObjects(
+				m_observables.subList(localCompositeIndex, observableSize),
+				getLocalComposites(),
+				new ISynchronizeProcessor<JavaInfo, BeanBindableInfo>() {
+					@Override
+					public boolean handleObject(BeanBindableInfo bindable) {
+						return bindable instanceof FieldBeanBindableInfo
+								&& ((FieldBeanBindableInfo) bindable).getFragment() == null;
+					}
 
-          @Override
-          public JavaInfo getKeyObject(BeanBindableInfo bindable) {
-            FieldBeanBindableInfo fieldBindable = (FieldBeanBindableInfo) bindable;
-            return fieldBindable.getHostJavaInfo();
-          }
+					@Override
+					public JavaInfo getKeyObject(BeanBindableInfo bindable) {
+						FieldBeanBindableInfo fieldBindable = (FieldBeanBindableInfo) bindable;
+						return fieldBindable.getHostJavaInfo();
+					}
 
-          @Override
-          public boolean equals(JavaInfo key0, JavaInfo key1) {
-            return key0 == key1;
-          }
+					@Override
+					public boolean equals(JavaInfo key0, JavaInfo key1) {
+						return key0 == key1;
+					}
 
-          @Override
-          public BeanBindableInfo findObject(Map<JavaInfo, BeanBindableInfo> keyObjectToObject,
-              JavaInfo key) throws Exception {
-            return null;
-          }
+					@Override
+					public BeanBindableInfo findObject(Map<JavaInfo, BeanBindableInfo> keyObjectToObject,
+							JavaInfo key) throws Exception {
+						return null;
+					}
 
-          @Override
-          public BeanBindableInfo createObject(JavaInfo javaInfo) throws Exception {
-            // prepare bean class
-            Class<?> componentClass = javaInfo.getDescription().getComponentClass();
-            // prepare reference provider
-            IReferenceProvider javaReferenceProvider =
-                new JavaInfoReferenceProvider(javaInfo, m_provider);
-            FragmentReferenceProvider referenceProvider =
-                new FragmentReferenceProvider(javaReferenceProvider);
-            //
-            return new FieldBeanBindableInfo(beanSupport,
-                null,
-                componentClass,
-                referenceProvider,
-                javaInfo);
-          }
+					@Override
+					public BeanBindableInfo createObject(JavaInfo javaInfo) throws Exception {
+						// prepare bean class
+						Class<?> componentClass = javaInfo.getDescription().getComponentClass();
+						// prepare reference provider
+						IReferenceProvider javaReferenceProvider =
+								new JavaInfoReferenceProvider(javaInfo, m_provider);
+						FragmentReferenceProvider referenceProvider =
+								new FragmentReferenceProvider(javaReferenceProvider);
+						//
+						return new FieldBeanBindableInfo(beanSupport,
+								null,
+								componentClass,
+								referenceProvider,
+								javaInfo);
+					}
 
-          @Override
-          public void update(BeanBindableInfo bindable) throws Exception {
-            FieldBeanBindableInfo bean = (FieldBeanBindableInfo) bindable;
-            bean.update(BeansObserveTypeContainer.this);
-          }
-        });
-  }
+					@Override
+					public void update(BeanBindableInfo bindable) throws Exception {
+						FieldBeanBindableInfo bean = (FieldBeanBindableInfo) bindable;
+						bean.update(BeansObserveTypeContainer.this);
+					}
+				});
+	}
 
-  private void synchronizeLocalVariables(final BeanSupport beanSupport, TypeDeclaration rootNode)
-      throws Exception {
-    int observableSize = m_observables.size();
-    int localVariableIndex = observableSize;
-    //
-    for (int i = 0; i < observableSize; i++) {
-      if (m_observables.get(i) instanceof LocalVariableBindableInfo) {
-        localVariableIndex = i;
-        break;
-      }
-    }
-    // update local variables
-    SynchronizeManager.synchronizeObjects(
-        m_observables.subList(localVariableIndex, observableSize),
-        CoreUtils.getLocalFragments(rootNode, DataBindingsRootInfo.INIT_DATA_BINDINGS_METHOD_NAME),
-        new ISynchronizeProcessor<VariableDeclarationFragment, BeanBindableInfo>() {
-          @Override
-          public boolean handleObject(BeanBindableInfo object) {
-            return true;
-          }
+	private void synchronizeLocalVariables(final BeanSupport beanSupport, TypeDeclaration rootNode)
+			throws Exception {
+		int observableSize = m_observables.size();
+		int localVariableIndex = observableSize;
+		//
+		for (int i = 0; i < observableSize; i++) {
+			if (m_observables.get(i) instanceof LocalVariableBindableInfo) {
+				localVariableIndex = i;
+				break;
+			}
+		}
+		// update local variables
+		SynchronizeManager.synchronizeObjects(
+				m_observables.subList(localVariableIndex, observableSize),
+				CoreUtils.getLocalFragments(rootNode, DataBindingsRootInfo.INIT_DATA_BINDINGS_METHOD_NAME),
+				new ISynchronizeProcessor<VariableDeclarationFragment, BeanBindableInfo>() {
+					@Override
+					public boolean handleObject(BeanBindableInfo object) {
+						return true;
+					}
 
-          @Override
-          public VariableDeclarationFragment getKeyObject(BeanBindableInfo bindable) {
-            LocalVariableBindableInfo bean = (LocalVariableBindableInfo) bindable;
-            return bean.getFragment();
-          }
+					@Override
+					public VariableDeclarationFragment getKeyObject(BeanBindableInfo bindable) {
+						LocalVariableBindableInfo bean = (LocalVariableBindableInfo) bindable;
+						return bean.getFragment();
+					}
 
-          @Override
-          public boolean equals(VariableDeclarationFragment fragment0,
-              VariableDeclarationFragment fragment1) {
-            return fragment0.getName().getIdentifier().equals(fragment1.getName().getIdentifier());
-          }
+					@Override
+					public boolean equals(VariableDeclarationFragment fragment0,
+							VariableDeclarationFragment fragment1) {
+						return fragment0.getName().getIdentifier().equals(fragment1.getName().getIdentifier());
+					}
 
-          @Override
-          public BeanBindableInfo findObject(Map<VariableDeclarationFragment, BeanBindableInfo> keyObjectToObject,
-              VariableDeclarationFragment key) throws Exception {
-            return null;
-          }
+					@Override
+					public BeanBindableInfo findObject(Map<VariableDeclarationFragment, BeanBindableInfo> keyObjectToObject,
+							VariableDeclarationFragment key) throws Exception {
+						return null;
+					}
 
-          @Override
-          public BeanBindableInfo createObject(VariableDeclarationFragment fragment)
-              throws Exception {
-            try {
-              // prepare bean class
-              ITypeBinding typeBinding = CoreUtils.getType(fragment, true);
-              Class<?> beanClass = loadClass(AstNodeUtils.getFullyQualifiedName(typeBinding, true));
-              return new LocalVariableBindableInfo(beanSupport, fragment, beanClass);
-            } catch (ClassNotFoundException e) {
-              AbstractParser.addError(m_provider.getAstEditor(), "ClassNotFoundException: "
-                  + fragment, new Throwable());
-              return null;
-            }
-          }
+					@Override
+					public BeanBindableInfo createObject(VariableDeclarationFragment fragment)
+							throws Exception {
+						try {
+							// prepare bean class
+							ITypeBinding typeBinding = CoreUtils.getType(fragment, true);
+							Class<?> beanClass = loadClass(AstNodeUtils.getFullyQualifiedName(typeBinding, true));
+							return new LocalVariableBindableInfo(beanSupport, fragment, beanClass);
+						} catch (ClassNotFoundException e) {
+							AbstractParser.addError(m_provider.getAstEditor(), "ClassNotFoundException: "
+									+ fragment, new Throwable());
+							return null;
+						}
+					}
 
-          @Override
-          public void update(BeanBindableInfo object) throws Exception {
-          }
-        });
-  }
+					@Override
+					public void update(BeanBindableInfo object) throws Exception {
+					}
+				});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parser
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private List<JavaInfo> getLocalComposites() throws Exception {
-    final List<JavaInfo> composites = Lists.newArrayList();
-    final Class<?> compositeClass = loadClass("org.eclipse.swt.widgets.Composite");
-    m_rootJavaInfo.accept(new ObjectInfoVisitor() {
-      @Override
-      public void endVisit(ObjectInfo objectInfo) throws Exception {
-        if (objectInfo instanceof JavaInfo) {
-          JavaInfo javaInfo = (JavaInfo) objectInfo;
-          VariableSupport variableSupport = javaInfo.getVariableSupport();
-          Class<?> componentClass = javaInfo.getDescription().getComponentClass();
-          if (componentClass != null
-              && !compositeClass.getName().startsWith("org.eclipse.swt.")
-              && compositeClass.isAssignableFrom(componentClass)
-              && variableSupport instanceof LocalVariableSupport
-              && variableSupport.canConvertLocalToField()
-              && JavaInfoReferenceProvider.getReference(javaInfo) != null) {
-            composites.add(javaInfo);
-          }
-        }
-      }
-    });
-    return composites;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parser
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private List<JavaInfo> getLocalComposites() throws Exception {
+		final List<JavaInfo> composites = Lists.newArrayList();
+		final Class<?> compositeClass = loadClass("org.eclipse.swt.widgets.Composite");
+		m_rootJavaInfo.accept(new ObjectInfoVisitor() {
+			@Override
+			public void endVisit(ObjectInfo objectInfo) throws Exception {
+				if (objectInfo instanceof JavaInfo) {
+					JavaInfo javaInfo = (JavaInfo) objectInfo;
+					VariableSupport variableSupport = javaInfo.getVariableSupport();
+					Class<?> componentClass = javaInfo.getDescription().getComponentClass();
+					if (componentClass != null
+							&& !compositeClass.getName().startsWith("org.eclipse.swt.")
+							&& compositeClass.isAssignableFrom(componentClass)
+							&& variableSupport instanceof LocalVariableSupport
+							&& variableSupport.canConvertLocalToField()
+							&& JavaInfoReferenceProvider.getReference(javaInfo) != null) {
+						composites.add(javaInfo);
+					}
+				}
+			}
+		});
+		return composites;
+	}
 
-  @Override
-  public void createObservables(JavaInfo root,
-      final IModelResolver resolver,
-      AstEditor editor,
-      TypeDeclaration rootNode) throws Exception {
-    m_rootJavaInfo = root;
-    m_observables = Lists.newArrayList();
-    // handle fields
-    ClassLoader classLoader = EditorState.get(m_rootJavaInfo.getEditor()).getEditorLoader();
-    BeanSupport beanSupport = new BeanSupport(classLoader, resolver);
-    beanSupport.setProvider(m_provider);
-    //
-    for (VariableDeclarationFragment fragment : CoreUtils.getFieldFragments(rootNode)) {
-      try {
-        // prepare bean class
-        Type type = CoreUtils.getType(fragment, true);
-        Class<?> beanClass = loadClass(AstNodeUtils.getFullyQualifiedName(type, true));
-        // prepare association widget
-        JavaInfo widget = getJavaInfoRepresentedBy(fragment.getName().getIdentifier());
-        //
-        m_observables.add(new FieldBeanBindableInfo(beanSupport, fragment, beanClass, widget));
-      } catch (ClassNotFoundException e) {
-        AbstractParser.addError(editor, "ClassNotFoundException: " + fragment, new Throwable());
-      } catch (Throwable e) {
-        throw ReflectionUtils.propagate(e);
-      }
-    }
-    // handle all Composite declared as local variable
-    for (JavaInfo javaInfo : getLocalComposites()) {
-      // prepare bean class
-      Class<?> componentClass = javaInfo.getDescription().getComponentClass();
-      // prepare reference provider
-      IReferenceProvider javaReferenceProvider =
-          new JavaInfoReferenceProvider(javaInfo, m_provider);
-      FragmentReferenceProvider referenceProvider =
-          new FragmentReferenceProvider(javaReferenceProvider);
-      //
-      m_observables.add(new FieldBeanBindableInfo(beanSupport,
-          null,
-          componentClass,
-          referenceProvider,
-          javaInfo));
-    }
-    // prepare super class
-    Class<?> superClass = Object.class;
-    if (rootNode.getSuperclassType() != null) {
-      String className = AstNodeUtils.getFullyQualifiedName(rootNode.getSuperclassType(), true);
-      try {
-        superClass = loadClass(className);
-      } catch (ClassNotFoundException e) {
-        AbstractParser.addError(editor, "ClassNotFoundException: " + className, new Throwable());
-        superClass = Object.class;
-      }
-    }
-    // handle methods from super class
-    Set<String> methodNames = Sets.newHashSet();
-    //
-    BeanInfo beanInfo = Introspector.getBeanInfo(superClass);
-    for (PropertyDescriptor descriptor : beanInfo.getPropertyDescriptors()) {
-      if (BeanSupport.isGetter(descriptor)) {
-        String methodName = descriptor.getReadMethod().getName();
-        if (!DataBindingsRootInfo.INIT_DATA_BINDINGS_METHOD_NAME.equals(methodName)) {
-          methodNames.add(methodName);
-          m_observables.add(new MethodBeanBindableInfo(beanSupport,
-              null,
-              descriptor.getPropertyType(),
-              methodName + "()"));
-        }
-      }
-    }
-    // handle local methods
-    for (MethodDeclaration method : rootNode.getMethods()) {
-      String methodName = method.getName().getIdentifier();
-      if (!methodNames.contains(methodName)
-          && !DataBindingsRootInfo.INIT_DATA_BINDINGS_METHOD_NAME.equals(methodName)
-          && methodName.startsWith("get")) {
-        IMethodBinding binding = AstNodeUtils.getMethodBinding(method);
-        ITypeBinding returnType = binding == null ? null : binding.getReturnType();
-        //
-        if (CoreUtils.isIncludeTypeBinding(returnType)) {
-          String className = AstNodeUtils.getFullyQualifiedName(returnType, true);
-          try {
-            Class<?> propertyClass = loadClass(className);
-            //
-            m_observables.add(new MethodBeanBindableInfo(beanSupport,
-                null,
-                propertyClass,
-                methodName + "()"));
-          } catch (ClassNotFoundException e) {
-            AbstractParser.addError(editor, "ClassNotFoundException: " + className, new Throwable());
-          }
-        }
-      }
-    }
-    // handle initDataBindings() local variables
-    for (VariableDeclarationFragment fragment : CoreUtils.getLocalFragments(
-        rootNode,
-        DataBindingsRootInfo.INIT_DATA_BINDINGS_METHOD_NAME)) {
-      try {
-        // prepare bean class
-        ITypeBinding typeBinding = CoreUtils.getType(fragment, true);
-        Class<?> beanClass = loadClass(AstNodeUtils.getFullyQualifiedName(typeBinding, true));
-        m_observables.add(new LocalVariableBindableInfo(beanSupport, fragment, beanClass));
-      } catch (ClassNotFoundException e) {
-        AbstractParser.addError(editor, "ClassNotFoundException: " + fragment, new Throwable());
-      } catch (Throwable e) {
-        throw ReflectionUtils.propagate(e);
-      }
-    }
-  }
+	@Override
+	public void createObservables(JavaInfo root,
+			final IModelResolver resolver,
+			AstEditor editor,
+			TypeDeclaration rootNode) throws Exception {
+		m_rootJavaInfo = root;
+		m_observables = Lists.newArrayList();
+		// handle fields
+		ClassLoader classLoader = EditorState.get(m_rootJavaInfo.getEditor()).getEditorLoader();
+		BeanSupport beanSupport = new BeanSupport(classLoader, resolver);
+		beanSupport.setProvider(m_provider);
+		//
+		for (VariableDeclarationFragment fragment : CoreUtils.getFieldFragments(rootNode)) {
+			try {
+				// prepare bean class
+				Type type = CoreUtils.getType(fragment, true);
+				Class<?> beanClass = loadClass(AstNodeUtils.getFullyQualifiedName(type, true));
+				// prepare association widget
+				JavaInfo widget = getJavaInfoRepresentedBy(fragment.getName().getIdentifier());
+				//
+				m_observables.add(new FieldBeanBindableInfo(beanSupport, fragment, beanClass, widget));
+			} catch (ClassNotFoundException e) {
+				AbstractParser.addError(editor, "ClassNotFoundException: " + fragment, new Throwable());
+			} catch (Throwable e) {
+				throw ReflectionUtils.propagate(e);
+			}
+		}
+		// handle all Composite declared as local variable
+		for (JavaInfo javaInfo : getLocalComposites()) {
+			// prepare bean class
+			Class<?> componentClass = javaInfo.getDescription().getComponentClass();
+			// prepare reference provider
+			IReferenceProvider javaReferenceProvider =
+					new JavaInfoReferenceProvider(javaInfo, m_provider);
+			FragmentReferenceProvider referenceProvider =
+					new FragmentReferenceProvider(javaReferenceProvider);
+			//
+			m_observables.add(new FieldBeanBindableInfo(beanSupport,
+					null,
+					componentClass,
+					referenceProvider,
+					javaInfo));
+		}
+		// prepare super class
+		Class<?> superClass = Object.class;
+		if (rootNode.getSuperclassType() != null) {
+			String className = AstNodeUtils.getFullyQualifiedName(rootNode.getSuperclassType(), true);
+			try {
+				superClass = loadClass(className);
+			} catch (ClassNotFoundException e) {
+				AbstractParser.addError(editor, "ClassNotFoundException: " + className, new Throwable());
+				superClass = Object.class;
+			}
+		}
+		// handle methods from super class
+		Set<String> methodNames = Sets.newHashSet();
+		//
+		BeanInfo beanInfo = Introspector.getBeanInfo(superClass);
+		for (PropertyDescriptor descriptor : beanInfo.getPropertyDescriptors()) {
+			if (BeanSupport.isGetter(descriptor)) {
+				String methodName = descriptor.getReadMethod().getName();
+				if (!DataBindingsRootInfo.INIT_DATA_BINDINGS_METHOD_NAME.equals(methodName)) {
+					methodNames.add(methodName);
+					m_observables.add(new MethodBeanBindableInfo(beanSupport,
+							null,
+							descriptor.getPropertyType(),
+							methodName + "()"));
+				}
+			}
+		}
+		// handle local methods
+		for (MethodDeclaration method : rootNode.getMethods()) {
+			String methodName = method.getName().getIdentifier();
+			if (!methodNames.contains(methodName)
+					&& !DataBindingsRootInfo.INIT_DATA_BINDINGS_METHOD_NAME.equals(methodName)
+					&& methodName.startsWith("get")) {
+				IMethodBinding binding = AstNodeUtils.getMethodBinding(method);
+				ITypeBinding returnType = binding == null ? null : binding.getReturnType();
+				//
+				if (CoreUtils.isIncludeTypeBinding(returnType)) {
+					String className = AstNodeUtils.getFullyQualifiedName(returnType, true);
+					try {
+						Class<?> propertyClass = loadClass(className);
+						//
+						m_observables.add(new MethodBeanBindableInfo(beanSupport,
+								null,
+								propertyClass,
+								methodName + "()"));
+					} catch (ClassNotFoundException e) {
+						AbstractParser.addError(editor, "ClassNotFoundException: " + className, new Throwable());
+					}
+				}
+			}
+		}
+		// handle initDataBindings() local variables
+		for (VariableDeclarationFragment fragment : CoreUtils.getLocalFragments(
+				rootNode,
+				DataBindingsRootInfo.INIT_DATA_BINDINGS_METHOD_NAME)) {
+			try {
+				// prepare bean class
+				ITypeBinding typeBinding = CoreUtils.getType(fragment, true);
+				Class<?> beanClass = loadClass(AstNodeUtils.getFullyQualifiedName(typeBinding, true));
+				m_observables.add(new LocalVariableBindableInfo(beanSupport, fragment, beanClass));
+			} catch (ClassNotFoundException e) {
+				AbstractParser.addError(editor, "ClassNotFoundException: " + fragment, new Throwable());
+			} catch (Throwable e) {
+				throw ReflectionUtils.propagate(e);
+			}
+		}
+	}
 
-  @Override
-  public AstObjectInfo parseExpression(AstEditor editor,
-      String signature,
-      ClassInstanceCreation creation,
-      Expression[] arguments,
-      IModelResolver resolver,
-      IDatabindingsProvider provider) throws Exception {
-    LocalModelCreator modelCreator = CreatorManager.CONSTRUCTOR_CREATORS.get(signature);
-    if (modelCreator != null) {
-      return modelCreator.create(this, editor, arguments, resolver);
-    }
-    return null;
-  }
+	@Override
+	public AstObjectInfo parseExpression(AstEditor editor,
+			String signature,
+			ClassInstanceCreation creation,
+			Expression[] arguments,
+			IModelResolver resolver,
+			IDatabindingsProvider provider) throws Exception {
+		LocalModelCreator modelCreator = CreatorManager.CONSTRUCTOR_CREATORS.get(signature);
+		if (modelCreator != null) {
+			return modelCreator.create(this, editor, arguments, resolver);
+		}
+		return null;
+	}
 
-  @Override
-  public AstObjectInfo parseExpression(AstEditor editor,
-      String signature,
-      MethodInvocation invocation,
-      Expression[] arguments,
-      IModelResolver resolver) throws Exception {
-    LocalModelCreator modelCreator = CreatorManager.METHOD_CREATORS.get(signature);
-    if (modelCreator != null) {
-      return modelCreator.create(this, editor, arguments, resolver);
-    }
-    return null;
-  }
+	@Override
+	public AstObjectInfo parseExpression(AstEditor editor,
+			String signature,
+			MethodInvocation invocation,
+			Expression[] arguments,
+			IModelResolver resolver) throws Exception {
+		LocalModelCreator modelCreator = CreatorManager.METHOD_CREATORS.get(signature);
+		if (modelCreator != null) {
+			return modelCreator.create(this, editor, arguments, resolver);
+		}
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Creators
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Create {@link ValueBeanObservableInfo}.
-   */
-  AstObjectInfo createValue(AstEditor editor, Expression[] arguments, int startIndex)
-      throws Exception {
-    // prepare object
-    BeanBindableInfo bindableObject = getBindableObject(arguments[startIndex]);
-    if (bindableObject == null) {
-      AbstractParser.addError(editor, MessageFormat.format(
-          Messages.BeansObserveTypeContainer_argumentNotFound,
-          arguments[startIndex]), new Throwable());
-      return null;
-    }
-    // prepare property
-    BeanPropertyBindableInfo bindableProperty =
-        getBindableProperty(bindableObject, editor, arguments[startIndex + 1]);
-    // create observable
-    ValueBeanObservableInfo observable =
-        new ValueBeanObservableInfo(bindableObject, bindableProperty);
-    observable.setCodeSupport(new BeanObservableValueCodeSupport());
-    return observable;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Creators
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Create {@link ValueBeanObservableInfo}.
+	 */
+	AstObjectInfo createValue(AstEditor editor, Expression[] arguments, int startIndex)
+			throws Exception {
+		// prepare object
+		BeanBindableInfo bindableObject = getBindableObject(arguments[startIndex]);
+		if (bindableObject == null) {
+			AbstractParser.addError(editor, MessageFormat.format(
+					Messages.BeansObserveTypeContainer_argumentNotFound,
+					arguments[startIndex]), new Throwable());
+			return null;
+		}
+		// prepare property
+		BeanPropertyBindableInfo bindableProperty =
+				getBindableProperty(bindableObject, editor, arguments[startIndex + 1]);
+		// create observable
+		ValueBeanObservableInfo observable =
+				new ValueBeanObservableInfo(bindableObject, bindableProperty);
+		observable.setCodeSupport(new BeanObservableValueCodeSupport());
+		return observable;
+	}
 
-  /**
-   * create {@link ListBeanObservableInfo}.
-   */
-  AstObjectInfo createList(AstEditor editor, Expression[] arguments, int startIndex)
-      throws Exception {
-    // prepare object
-    BeanBindableInfo bindableObject = getBindableObject(arguments[startIndex]);
-    if (bindableObject == null) {
-      AbstractParser.addError(editor, MessageFormat.format(
-          Messages.BeansObserveTypeContainer_argumentNotFound,
-          arguments[startIndex]), new Throwable());
-      return null;
-    }
-    // prepare property
-    BeanPropertyBindableInfo bindableProperty =
-        getBindableProperty(bindableObject, editor, arguments[startIndex + 1]);
-    // create observable
-    ListBeanObservableInfo observable =
-        new ListBeanObservableInfo(bindableObject, bindableProperty);
-    observable.setCodeSupport(new BeanObservableListCodeSupport());
-    return observable;
-  }
+	/**
+	 * create {@link ListBeanObservableInfo}.
+	 */
+	AstObjectInfo createList(AstEditor editor, Expression[] arguments, int startIndex)
+			throws Exception {
+		// prepare object
+		BeanBindableInfo bindableObject = getBindableObject(arguments[startIndex]);
+		if (bindableObject == null) {
+			AbstractParser.addError(editor, MessageFormat.format(
+					Messages.BeansObserveTypeContainer_argumentNotFound,
+					arguments[startIndex]), new Throwable());
+			return null;
+		}
+		// prepare property
+		BeanPropertyBindableInfo bindableProperty =
+				getBindableProperty(bindableObject, editor, arguments[startIndex + 1]);
+		// create observable
+		ListBeanObservableInfo observable =
+				new ListBeanObservableInfo(bindableObject, bindableProperty);
+		observable.setCodeSupport(new BeanObservableListCodeSupport());
+		return observable;
+	}
 
-  /**
-   * Create {@link SetBeanObservableInfo}.
-   */
-  AstObjectInfo createSet(AstEditor editor, Expression[] arguments, int startIndex)
-      throws Exception {
-    // prepare object
-    BeanBindableInfo bindableObject = getBindableObject(arguments[startIndex]);
-    if (bindableObject == null) {
-      AbstractParser.addError(editor, MessageFormat.format(
-          Messages.BeansObserveTypeContainer_argumentNotFound,
-          arguments[startIndex]), new Throwable());
-      return null;
-    }
-    // prepare property
-    BeanPropertyBindableInfo bindableProperty =
-        getBindableProperty(bindableObject, editor, arguments[startIndex + 1]);
-    // create observable
-    SetBeanObservableInfo observable = new SetBeanObservableInfo(bindableObject, bindableProperty);
-    observable.setCodeSupport(new BeanObservableSetCodeSupport());
-    return observable;
-  }
+	/**
+	 * Create {@link SetBeanObservableInfo}.
+	 */
+	AstObjectInfo createSet(AstEditor editor, Expression[] arguments, int startIndex)
+			throws Exception {
+		// prepare object
+		BeanBindableInfo bindableObject = getBindableObject(arguments[startIndex]);
+		if (bindableObject == null) {
+			AbstractParser.addError(editor, MessageFormat.format(
+					Messages.BeansObserveTypeContainer_argumentNotFound,
+					arguments[startIndex]), new Throwable());
+			return null;
+		}
+		// prepare property
+		BeanPropertyBindableInfo bindableProperty =
+				getBindableProperty(bindableObject, editor, arguments[startIndex + 1]);
+		// create observable
+		SetBeanObservableInfo observable = new SetBeanObservableInfo(bindableObject, bindableProperty);
+		observable.setCodeSupport(new BeanObservableSetCodeSupport());
+		return observable;
+	}
 
-  AstObjectInfo createValueProperty(AstEditor editor,
-      Expression[] arguments,
-      int propertyIndex,
-      int typeIndex,
-      int beanTypeIndex,
-      boolean isPojo) throws Exception {
-    ValuePropertyCodeSupport codeSupport = new ValuePropertyCodeSupport();
-    configureBeanProperty(
-        editor,
-        arguments,
-        propertyIndex,
-        typeIndex,
-        beanTypeIndex,
-        isPojo,
-        codeSupport);
-    return codeSupport;
-  }
+	AstObjectInfo createValueProperty(AstEditor editor,
+			Expression[] arguments,
+			int propertyIndex,
+			int typeIndex,
+			int beanTypeIndex,
+			boolean isPojo) throws Exception {
+		ValuePropertyCodeSupport codeSupport = new ValuePropertyCodeSupport();
+		configureBeanProperty(
+				editor,
+				arguments,
+				propertyIndex,
+				typeIndex,
+				beanTypeIndex,
+				isPojo,
+				codeSupport);
+		return codeSupport;
+	}
 
-  AstObjectInfo createListProperty(AstEditor editor,
-      Expression[] arguments,
-      int propertyIndex,
-      int typeIndex,
-      int beanTypeIndex,
-      boolean isPojo) throws Exception {
-    ListPropertyCodeSupport codeSupport = new ListPropertyCodeSupport();
-    configureBeanProperty(
-        editor,
-        arguments,
-        propertyIndex,
-        typeIndex,
-        beanTypeIndex,
-        isPojo,
-        codeSupport);
-    return codeSupport;
-  }
+	AstObjectInfo createListProperty(AstEditor editor,
+			Expression[] arguments,
+			int propertyIndex,
+			int typeIndex,
+			int beanTypeIndex,
+			boolean isPojo) throws Exception {
+		ListPropertyCodeSupport codeSupport = new ListPropertyCodeSupport();
+		configureBeanProperty(
+				editor,
+				arguments,
+				propertyIndex,
+				typeIndex,
+				beanTypeIndex,
+				isPojo,
+				codeSupport);
+		return codeSupport;
+	}
 
-  AstObjectInfo createSetProperty(AstEditor editor,
-      Expression[] arguments,
-      int propertyIndex,
-      int typeIndex,
-      int beanTypeIndex,
-      boolean isPojo) throws Exception {
-    SetPropertyCodeSupport codeSupport = new SetPropertyCodeSupport();
-    configureBeanProperty(
-        editor,
-        arguments,
-        propertyIndex,
-        typeIndex,
-        beanTypeIndex,
-        isPojo,
-        codeSupport);
-    return codeSupport;
-  }
+	AstObjectInfo createSetProperty(AstEditor editor,
+			Expression[] arguments,
+			int propertyIndex,
+			int typeIndex,
+			int beanTypeIndex,
+			boolean isPojo) throws Exception {
+		SetPropertyCodeSupport codeSupport = new SetPropertyCodeSupport();
+		configureBeanProperty(
+				editor,
+				arguments,
+				propertyIndex,
+				typeIndex,
+				beanTypeIndex,
+				isPojo,
+				codeSupport);
+		return codeSupport;
+	}
 
-  void configureBeanProperty(AstEditor editor,
-      Expression[] arguments,
-      int propertyIndex,
-      int typeIndex,
-      int beanTypeIndex,
-      boolean isPojo,
-      BeanPropertiesCodeSupport codeSupport) throws Exception {
-    // prepare reference
-    String propertyName = CoreUtils.evaluate(String.class, editor, arguments[propertyIndex]);
-    codeSupport.setParserPropertyReference("\"" + propertyName + "\"");
-    // property class
-    codeSupport.setParserPropertyType(CoreUtils.evaluate(Class.class, editor, arguments, typeIndex));
-    // pojo
-    codeSupport.setPojoBindable(isPojo);
-    // bean class
-    codeSupport.setBeanType(CoreUtils.evaluate(Class.class, editor, arguments, beanTypeIndex));
-  }
+	void configureBeanProperty(AstEditor editor,
+			Expression[] arguments,
+			int propertyIndex,
+			int typeIndex,
+			int beanTypeIndex,
+			boolean isPojo,
+			BeanPropertiesCodeSupport codeSupport) throws Exception {
+		// prepare reference
+		String propertyName = CoreUtils.evaluate(String.class, editor, arguments[propertyIndex]);
+		codeSupport.setParserPropertyReference("\"" + propertyName + "\"");
+		// property class
+		codeSupport.setParserPropertyType(CoreUtils.evaluate(Class.class, editor, arguments, typeIndex));
+		// pojo
+		codeSupport.setPojoBindable(isPojo);
+		// bean class
+		codeSupport.setBeanType(CoreUtils.evaluate(Class.class, editor, arguments, beanTypeIndex));
+	}
 
-  /**
-   * Create {@link DetailValueBeanObservableInfo}.
-   */
-  AstObjectInfo createDetailValue(AstEditor editor,
-      Expression[] arguments,
-      IModelResolver resolver,
-      int masterIndex,
-      int propertyIndex,
-      int beanTypeIndex,
-      boolean isPojo) throws Exception {
-    // prepare master
-    ObservableInfo masterObservable = getMasterObservable(editor, resolver, arguments[masterIndex]);
-    if (masterObservable == null) {
-      AbstractParser.addError(editor, MessageFormat.format(
-          Messages.BeansObserveTypeContainer_masterObservableArgumentNotFound,
-          arguments[masterIndex]), new Throwable());
-      return null;
-    }
-    // prepare bean type
-    Class<?> beanType = CoreUtils.evaluate(Class.class, editor, arguments, beanTypeIndex);
-    // prepare detail property
-    String detailPropertyReference =
-        "\"" + CoreUtils.evaluate(String.class, editor, arguments[propertyIndex]) + "\"";
-    Class<?> detailPropertyType =
-        CoreUtils.evaluate(Class.class, editor, arguments[propertyIndex + 1]);
-    // create observable
-    DetailValueBeanObservableInfo observable =
-        new DetailValueBeanObservableInfo(masterObservable,
-            beanType,
-            detailPropertyReference,
-            detailPropertyType);
-    observable.setPojoBindable(isPojo);
-    observable.setCodeSupport(new BeanObservableDetailValueCodeSupport());
-    return observable;
-  }
+	/**
+	 * Create {@link DetailValueBeanObservableInfo}.
+	 */
+	AstObjectInfo createDetailValue(AstEditor editor,
+			Expression[] arguments,
+			IModelResolver resolver,
+			int masterIndex,
+			int propertyIndex,
+			int beanTypeIndex,
+			boolean isPojo) throws Exception {
+		// prepare master
+		ObservableInfo masterObservable = getMasterObservable(editor, resolver, arguments[masterIndex]);
+		if (masterObservable == null) {
+			AbstractParser.addError(editor, MessageFormat.format(
+					Messages.BeansObserveTypeContainer_masterObservableArgumentNotFound,
+					arguments[masterIndex]), new Throwable());
+			return null;
+		}
+		// prepare bean type
+		Class<?> beanType = CoreUtils.evaluate(Class.class, editor, arguments, beanTypeIndex);
+		// prepare detail property
+		String detailPropertyReference =
+				"\"" + CoreUtils.evaluate(String.class, editor, arguments[propertyIndex]) + "\"";
+		Class<?> detailPropertyType =
+				CoreUtils.evaluate(Class.class, editor, arguments[propertyIndex + 1]);
+		// create observable
+		DetailValueBeanObservableInfo observable =
+				new DetailValueBeanObservableInfo(masterObservable,
+						beanType,
+						detailPropertyReference,
+						detailPropertyType);
+		observable.setPojoBindable(isPojo);
+		observable.setCodeSupport(new BeanObservableDetailValueCodeSupport());
+		return observable;
+	}
 
-  /**
-   * Create {@link DetailListBeanObservableInfo}.
-   */
-  AstObjectInfo createDetailList(AstEditor editor,
-      Expression[] arguments,
-      IModelResolver resolver,
-      int startIndex,
-      boolean isPojo) throws Exception {
-    // prepare master
-    ObservableInfo masterObservable = getMasterObservable(editor, resolver, arguments[startIndex]);
-    if (masterObservable == null) {
-      AbstractParser.addError(editor, MessageFormat.format(
-          Messages.BeansObserveTypeContainer_masterObservableArgumentNotFound,
-          arguments[startIndex]), new Throwable());
-      return null;
-    }
-    // prepare detail property
-    String detailPropertyReference =
-        "\"" + CoreUtils.evaluate(String.class, editor, arguments[startIndex + 1]) + "\"";
-    Class<?> detailPropertyType =
-        CoreUtils.evaluate(Class.class, editor, arguments[startIndex + 2]);
-    // create observable
-    DetailListBeanObservableInfo observable =
-        new DetailListBeanObservableInfo(masterObservable,
-            null,
-            detailPropertyReference,
-            detailPropertyType);
-    observable.setPojoBindable(isPojo);
-    observable.setCodeSupport(new BeanObservableDetailListCodeSupport());
-    return observable;
-  }
+	/**
+	 * Create {@link DetailListBeanObservableInfo}.
+	 */
+	AstObjectInfo createDetailList(AstEditor editor,
+			Expression[] arguments,
+			IModelResolver resolver,
+			int startIndex,
+			boolean isPojo) throws Exception {
+		// prepare master
+		ObservableInfo masterObservable = getMasterObservable(editor, resolver, arguments[startIndex]);
+		if (masterObservable == null) {
+			AbstractParser.addError(editor, MessageFormat.format(
+					Messages.BeansObserveTypeContainer_masterObservableArgumentNotFound,
+					arguments[startIndex]), new Throwable());
+			return null;
+		}
+		// prepare detail property
+		String detailPropertyReference =
+				"\"" + CoreUtils.evaluate(String.class, editor, arguments[startIndex + 1]) + "\"";
+		Class<?> detailPropertyType =
+				CoreUtils.evaluate(Class.class, editor, arguments[startIndex + 2]);
+		// create observable
+		DetailListBeanObservableInfo observable =
+				new DetailListBeanObservableInfo(masterObservable,
+						null,
+						detailPropertyReference,
+						detailPropertyType);
+		observable.setPojoBindable(isPojo);
+		observable.setCodeSupport(new BeanObservableDetailListCodeSupport());
+		return observable;
+	}
 
-  /**
-   * Create {@link DetailSetBeanObservableInfo}.
-   */
-  AstObjectInfo createDetailSet(AstEditor editor,
-      Expression[] arguments,
-      IModelResolver resolver,
-      int startIndex,
-      boolean isPojo) throws Exception {
-    // prepare master
-    ObservableInfo masterObservable = getMasterObservable(editor, resolver, arguments[startIndex]);
-    if (masterObservable == null) {
-      AbstractParser.addError(editor, MessageFormat.format(
-          Messages.BeansObserveTypeContainer_masterObservableArgumentNotFound,
-          arguments[startIndex]), new Throwable());
-      return null;
-    }
-    // prepare detail property
-    String detailPropertyReference =
-        "\"" + CoreUtils.evaluate(String.class, editor, arguments[startIndex + 1]) + "\"";
-    Class<?> detailPropertyType =
-        CoreUtils.evaluate(Class.class, editor, arguments[startIndex + 2]);
-    // create observable
-    DetailSetBeanObservableInfo observable =
-        new DetailSetBeanObservableInfo(masterObservable,
-            null,
-            detailPropertyReference,
-            detailPropertyType);
-    observable.setPojoBindable(isPojo);
-    observable.setCodeSupport(new BeanObservableDetailSetCodeSupport());
-    return observable;
-  }
+	/**
+	 * Create {@link DetailSetBeanObservableInfo}.
+	 */
+	AstObjectInfo createDetailSet(AstEditor editor,
+			Expression[] arguments,
+			IModelResolver resolver,
+			int startIndex,
+			boolean isPojo) throws Exception {
+		// prepare master
+		ObservableInfo masterObservable = getMasterObservable(editor, resolver, arguments[startIndex]);
+		if (masterObservable == null) {
+			AbstractParser.addError(editor, MessageFormat.format(
+					Messages.BeansObserveTypeContainer_masterObservableArgumentNotFound,
+					arguments[startIndex]), new Throwable());
+			return null;
+		}
+		// prepare detail property
+		String detailPropertyReference =
+				"\"" + CoreUtils.evaluate(String.class, editor, arguments[startIndex + 1]) + "\"";
+		Class<?> detailPropertyType =
+				CoreUtils.evaluate(Class.class, editor, arguments[startIndex + 2]);
+		// create observable
+		DetailSetBeanObservableInfo observable =
+				new DetailSetBeanObservableInfo(masterObservable,
+						null,
+						detailPropertyReference,
+						detailPropertyType);
+		observable.setPojoBindable(isPojo);
+		observable.setCodeSupport(new BeanObservableDetailSetCodeSupport());
+		return observable;
+	}
 
-  /**
-   * Create {@link MapsBeanObservableInfo}.
-   */
-  AstObjectInfo createMaps(AstEditor editor, Expression[] arguments, IModelResolver resolver)
-      throws Exception {
-    // prepare domain
-    ObservableInfo domainObservable = (ObservableInfo) resolver.getModel(arguments[0]);
-    if (domainObservable == null) {
-      AbstractParser.addError(editor, MessageFormat.format(
-          Messages.BeansObserveTypeContainer_domainObservableArgumentNotFound,
-          arguments[0]), new Throwable());
-      return null;
-    }
-    // prepare element type
-    Class<?> elementType = CoreUtils.evaluate(Class.class, editor, arguments[1]);
-    // prepare properties
-    String[] properties = CoreUtils.evaluate(String[].class, editor, arguments[2]);
-    // create observable
-    return new MapsBeanObservableInfo(domainObservable, elementType, properties);
-  }
+	/**
+	 * Create {@link MapsBeanObservableInfo}.
+	 */
+	AstObjectInfo createMaps(AstEditor editor, Expression[] arguments, IModelResolver resolver)
+			throws Exception {
+		// prepare domain
+		ObservableInfo domainObservable = (ObservableInfo) resolver.getModel(arguments[0]);
+		if (domainObservable == null) {
+			AbstractParser.addError(editor, MessageFormat.format(
+					Messages.BeansObserveTypeContainer_domainObservableArgumentNotFound,
+					arguments[0]), new Throwable());
+			return null;
+		}
+		// prepare element type
+		Class<?> elementType = CoreUtils.evaluate(Class.class, editor, arguments[1]);
+		// prepare properties
+		String[] properties = CoreUtils.evaluate(String[].class, editor, arguments[2]);
+		// create observable
+		return new MapsBeanObservableInfo(domainObservable, elementType, properties);
+	}
 
-  /**
-   * Create {@link MapsBeanObservableInfo}.
-   */
-  AstObjectInfo createMap(AstEditor editor, Expression[] arguments, IModelResolver resolver)
-      throws Exception {
-    // prepare domain
-    ObservableInfo domainObservable = (ObservableInfo) resolver.getModel(arguments[0]);
-    if (domainObservable == null) {
-      AbstractParser.addError(editor, MessageFormat.format(
-          Messages.BeansObserveTypeContainer_domainObservableArgumentNotFound,
-          arguments[0]), new Throwable());
-      return null;
-    }
-    // prepare element type
-    Class<?> elementType = CoreUtils.evaluate(Class.class, editor, arguments[1]);
-    // prepare properties
-    String property = CoreUtils.evaluate(String.class, editor, arguments[2]);
-    // create observable
-    return new MapsBeanObservableInfo(domainObservable, elementType, new String[]{property});
-  }
+	/**
+	 * Create {@link MapsBeanObservableInfo}.
+	 */
+	AstObjectInfo createMap(AstEditor editor, Expression[] arguments, IModelResolver resolver)
+			throws Exception {
+		// prepare domain
+		ObservableInfo domainObservable = (ObservableInfo) resolver.getModel(arguments[0]);
+		if (domainObservable == null) {
+			AbstractParser.addError(editor, MessageFormat.format(
+					Messages.BeansObserveTypeContainer_domainObservableArgumentNotFound,
+					arguments[0]), new Throwable());
+			return null;
+		}
+		// prepare element type
+		Class<?> elementType = CoreUtils.evaluate(Class.class, editor, arguments[1]);
+		// prepare properties
+		String property = CoreUtils.evaluate(String.class, editor, arguments[2]);
+		// create observable
+		return new MapsBeanObservableInfo(domainObservable, elementType, new String[]{property});
+	}
 
-  /**
-   * Create {@link WritableListBeanObservableInfo}.
-   */
-  AstObjectInfo createWritableList(AstEditor editor,
-      Expression[] arguments,
-      IModelResolver resolver,
-      int startIndex) throws Exception {
-    // prepare object
-    BeanBindableInfo bindableObject = getBindableObject(arguments[startIndex]);
-    if (bindableObject == null) {
-      AbstractParser.addError(editor, MessageFormat.format(
-          Messages.BeansObserveTypeContainer_argumentNotFound,
-          arguments[startIndex]), new Throwable());
-      return null;
-    }
-    // prepare property
-    CollectionPropertyBindableInfo bindableProperty =
-        (CollectionPropertyBindableInfo) bindableObject.resolvePropertyReference(bindableObject.getReference());
-    Assert.isNotNull(bindableProperty);
-    // prepare element type
-    Class<?> elementType = CoreUtils.evaluate(Class.class, editor, arguments[startIndex + 1]);
-    // create observable
-    WritableListBeanObservableInfo observable =
-        new WritableListBeanObservableInfo(bindableObject, bindableProperty, elementType);
-    observable.setCodeSupport(new WritableListCodeSupport());
-    return observable;
-  }
+	/**
+	 * Create {@link WritableListBeanObservableInfo}.
+	 */
+	AstObjectInfo createWritableList(AstEditor editor,
+			Expression[] arguments,
+			IModelResolver resolver,
+			int startIndex) throws Exception {
+		// prepare object
+		BeanBindableInfo bindableObject = getBindableObject(arguments[startIndex]);
+		if (bindableObject == null) {
+			AbstractParser.addError(editor, MessageFormat.format(
+					Messages.BeansObserveTypeContainer_argumentNotFound,
+					arguments[startIndex]), new Throwable());
+			return null;
+		}
+		// prepare property
+		CollectionPropertyBindableInfo bindableProperty =
+				(CollectionPropertyBindableInfo) bindableObject.resolvePropertyReference(bindableObject.getReference());
+		Assert.isNotNull(bindableProperty);
+		// prepare element type
+		Class<?> elementType = CoreUtils.evaluate(Class.class, editor, arguments[startIndex + 1]);
+		// create observable
+		WritableListBeanObservableInfo observable =
+				new WritableListBeanObservableInfo(bindableObject, bindableProperty, elementType);
+		observable.setCodeSupport(new WritableListCodeSupport());
+		return observable;
+	}
 
-  /**
-   * Create {@link WritableSetBeanObservableInfo}.
-   */
-  AstObjectInfo createWritableSet(AstEditor editor,
-      Expression[] arguments,
-      IModelResolver resolver,
-      int startIndex) throws Exception {
-    // prepare object
-    BeanBindableInfo bindableObject = getBindableObject(arguments[startIndex]);
-    if (bindableObject == null) {
-      AbstractParser.addError(editor, MessageFormat.format(
-          Messages.BeansObserveTypeContainer_argumentNotFound,
-          arguments[startIndex]), new Throwable());
-      return null;
-    }
-    // prepare property
-    CollectionPropertyBindableInfo bindableProperty =
-        (CollectionPropertyBindableInfo) bindableObject.resolvePropertyReference(bindableObject.getReference());
-    Assert.isNotNull(bindableProperty);
-    // prepare element type
-    Class<?> elementType = CoreUtils.evaluate(Class.class, editor, arguments[startIndex + 1]);
-    // create observable
-    WritableSetBeanObservableInfo observable =
-        new WritableSetBeanObservableInfo(bindableObject, bindableProperty, elementType);
-    observable.setCodeSupport(new WritableSetCodeSupport());
-    return observable;
-  }
+	/**
+	 * Create {@link WritableSetBeanObservableInfo}.
+	 */
+	AstObjectInfo createWritableSet(AstEditor editor,
+			Expression[] arguments,
+			IModelResolver resolver,
+			int startIndex) throws Exception {
+		// prepare object
+		BeanBindableInfo bindableObject = getBindableObject(arguments[startIndex]);
+		if (bindableObject == null) {
+			AbstractParser.addError(editor, MessageFormat.format(
+					Messages.BeansObserveTypeContainer_argumentNotFound,
+					arguments[startIndex]), new Throwable());
+			return null;
+		}
+		// prepare property
+		CollectionPropertyBindableInfo bindableProperty =
+				(CollectionPropertyBindableInfo) bindableObject.resolvePropertyReference(bindableObject.getReference());
+		Assert.isNotNull(bindableProperty);
+		// prepare element type
+		Class<?> elementType = CoreUtils.evaluate(Class.class, editor, arguments[startIndex + 1]);
+		// create observable
+		WritableSetBeanObservableInfo observable =
+				new WritableSetBeanObservableInfo(bindableObject, bindableProperty, elementType);
+		observable.setCodeSupport(new WritableSetCodeSupport());
+		return observable;
+	}
 
-  AstObjectInfo createSelfList(AstEditor editor, Expression[] arguments) throws Exception {
-    SelfListCodeSupport codeSupport = new SelfListCodeSupport();
-    codeSupport.setParserPropertyType(CoreUtils.evaluate(Class.class, editor, arguments[0]));
-    return codeSupport;
-  }
+	AstObjectInfo createSelfList(AstEditor editor, Expression[] arguments) throws Exception {
+		SelfListCodeSupport codeSupport = new SelfListCodeSupport();
+		codeSupport.setParserPropertyType(CoreUtils.evaluate(Class.class, editor, arguments[0]));
+		return codeSupport;
+	}
 
-  AstObjectInfo createSelfSet(AstEditor editor, Expression[] arguments) throws Exception {
-    SelfSetCodeSupport codeSupport = new SelfSetCodeSupport();
-    codeSupport.setParserPropertyType(CoreUtils.evaluate(Class.class, editor, arguments[0]));
-    return codeSupport;
-  }
+	AstObjectInfo createSelfSet(AstEditor editor, Expression[] arguments) throws Exception {
+		SelfSetCodeSupport codeSupport = new SelfSetCodeSupport();
+		codeSupport.setParserPropertyType(CoreUtils.evaluate(Class.class, editor, arguments[0]));
+		return codeSupport;
+	}
 
-  AstObjectInfo createSingleSelection(AstEditor editor,
-      Expression[] arguments,
-      IModelResolver resolver) throws Exception {
-    BeanBindableInfo bindableObject =
-        m_rootJavaInfo.getChildRepresentedBy(arguments[0]) == null
-            ? getBindableObject(arguments[0])
-            : null;
-    if (bindableObject != null) {
-      SingleSelectionObservableInfo observable = new SingleSelectionObservableInfo(bindableObject);
-      observable.setCodeSupport(new SingleSelectionObservableCodeSupport());
-      return observable;
-    }
-    return null;
-  }
+	AstObjectInfo createSingleSelection(AstEditor editor,
+			Expression[] arguments,
+			IModelResolver resolver) throws Exception {
+		BeanBindableInfo bindableObject =
+				m_rootJavaInfo.getChildRepresentedBy(arguments[0]) == null
+				? getBindableObject(arguments[0])
+						: null;
+		if (bindableObject != null) {
+			SingleSelectionObservableInfo observable = new SingleSelectionObservableInfo(bindableObject);
+			observable.setCodeSupport(new SingleSelectionObservableCodeSupport());
+			return observable;
+		}
+		return null;
+	}
 
-  AstObjectInfo createMultiSelection(AstEditor editor,
-      Expression[] arguments,
-      IModelResolver resolver) throws Exception {
-    BeanBindableInfo bindableObject =
-        m_rootJavaInfo.getChildRepresentedBy(arguments[0]) == null
-            ? getBindableObject(arguments[0])
-            : null;
-    if (bindableObject != null) {
-      MultiSelectionObservableInfo observable = new MultiSelectionObservableInfo(bindableObject);
-      observable.setCodeSupport(new MultiSelectionObservableCodeSupport());
-      return observable;
-    }
-    return null;
-  }
+	AstObjectInfo createMultiSelection(AstEditor editor,
+			Expression[] arguments,
+			IModelResolver resolver) throws Exception {
+		BeanBindableInfo bindableObject =
+				m_rootJavaInfo.getChildRepresentedBy(arguments[0]) == null
+				? getBindableObject(arguments[0])
+						: null;
+		if (bindableObject != null) {
+			MultiSelectionObservableInfo observable = new MultiSelectionObservableInfo(bindableObject);
+			observable.setCodeSupport(new MultiSelectionObservableCodeSupport());
+			return observable;
+		}
+		return null;
+	}
 
-  AstObjectInfo createCheckedElements(AstEditor editor,
-      Expression[] arguments,
-      IModelResolver resolver) throws Exception {
-    BeanBindableInfo bindableObject =
-        m_rootJavaInfo.getChildRepresentedBy(arguments[0]) == null
-            ? getBindableObject(arguments[0])
-            : null;
-    if (bindableObject != null) {
-      // prepare element type
-      Class<?> elementType = CoreUtils.evaluate(Class.class, editor, arguments[1]);
-      //
-      CheckedElementsObservableInfo observable =
-          new CheckedElementsObservableInfo(bindableObject, elementType);
-      observable.setCodeSupport(new CheckedElementsObservableCodeSupport());
-      return observable;
-    }
-    return null;
-  }
+	AstObjectInfo createCheckedElements(AstEditor editor,
+			Expression[] arguments,
+			IModelResolver resolver) throws Exception {
+		BeanBindableInfo bindableObject =
+				m_rootJavaInfo.getChildRepresentedBy(arguments[0]) == null
+				? getBindableObject(arguments[0])
+						: null;
+		if (bindableObject != null) {
+			// prepare element type
+			Class<?> elementType = CoreUtils.evaluate(Class.class, editor, arguments[1]);
+			//
+			CheckedElementsObservableInfo observable =
+					new CheckedElementsObservableInfo(bindableObject, elementType);
+			observable.setCodeSupport(new CheckedElementsObservableCodeSupport());
+			return observable;
+		}
+		return null;
+	}
 
-  AstObjectInfo createListFactory(AstEditor editor,
-      Expression[] arguments,
-      int startIndex,
-      boolean isPojo) throws Exception {
-    BeansObservableListFactoryInfo observableFactory = new BeansObservableListFactoryInfo();
-    observableFactory.setPojoBindable(isPojo);
-    // prepare property
-    observableFactory.setPropertyName("\""
-        + CoreUtils.evaluate(String.class, editor, arguments[startIndex])
-        + "\"");
-    // prepare element type
-    observableFactory.setElementType(CoreUtils.evaluate(
-        Class.class,
-        editor,
-        arguments[startIndex + 1]));
-    //
-    return observableFactory;
-  }
+	AstObjectInfo createListFactory(AstEditor editor,
+			Expression[] arguments,
+			int startIndex,
+			boolean isPojo) throws Exception {
+		BeansObservableListFactoryInfo observableFactory = new BeansObservableListFactoryInfo();
+		observableFactory.setPojoBindable(isPojo);
+		// prepare property
+		observableFactory.setPropertyName("\""
+				+ CoreUtils.evaluate(String.class, editor, arguments[startIndex])
+				+ "\"");
+		// prepare element type
+		observableFactory.setElementType(CoreUtils.evaluate(
+				Class.class,
+				editor,
+				arguments[startIndex + 1]));
+		//
+		return observableFactory;
+	}
 
-  AstObjectInfo createSetFactory(AstEditor editor,
-      Expression[] arguments,
-      int startIndex,
-      boolean isPojo) throws Exception {
-    BeansObservableSetFactoryInfo observableFactory = new BeansObservableSetFactoryInfo();
-    observableFactory.setPojoBindable(isPojo);
-    // prepare property
-    observableFactory.setPropertyName("\""
-        + CoreUtils.evaluate(String.class, editor, arguments[startIndex])
-        + "\"");
-    // prepare element type
-    observableFactory.setElementType(CoreUtils.evaluate(
-        Class.class,
-        editor,
-        arguments[startIndex + 1]));
-    //
-    return observableFactory;
-  }
+	AstObjectInfo createSetFactory(AstEditor editor,
+			Expression[] arguments,
+			int startIndex,
+			boolean isPojo) throws Exception {
+		BeansObservableSetFactoryInfo observableFactory = new BeansObservableSetFactoryInfo();
+		observableFactory.setPojoBindable(isPojo);
+		// prepare property
+		observableFactory.setPropertyName("\""
+				+ CoreUtils.evaluate(String.class, editor, arguments[startIndex])
+				+ "\"");
+		// prepare element type
+		observableFactory.setElementType(CoreUtils.evaluate(
+				Class.class,
+				editor,
+				arguments[startIndex + 1]));
+		//
+		return observableFactory;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return {@link BeanBindableInfo} that association with given {@link Expression}.
-   */
-  public BeanBindableInfo getBindableObject(Expression expression) throws Exception {
-    // prepare reference
-    String reference = CoreUtils.getNodeReference(expression);
-    // find object
-    for (BeanBindableInfo bindableObject : m_observables) {
-      BeanBindableInfo result = (BeanBindableInfo) bindableObject.resolveReference(reference);
-      //
-      if (result != null) {
-        return result;
-      }
-    }
-    //
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return {@link BeanBindableInfo} that association with given {@link Expression}.
+	 */
+	public BeanBindableInfo getBindableObject(Expression expression) throws Exception {
+		// prepare reference
+		String reference = CoreUtils.getNodeReference(expression);
+		// find object
+		for (BeanBindableInfo bindableObject : m_observables) {
+			BeanBindableInfo result = (BeanBindableInfo) bindableObject.resolveReference(reference);
+			//
+			if (result != null) {
+				return result;
+			}
+		}
+		//
+		return null;
+	}
 
-  public BeanBindableInfo resolve(JavaInfo javaInfo) throws Exception {
-    // prepare reference
-    String reference = JavaInfoReferenceProvider.getReference(javaInfo);
-    Assert.isNotNull(reference);
-    // find object
-    for (BeanBindableInfo bindableObject : m_observables) {
-      BeanBindableInfo result = (BeanBindableInfo) bindableObject.resolveReference(reference);
-      //
-      if (result != null) {
-        return result;
-      }
-    }
-    //
-    return null;
-  }
+	public BeanBindableInfo resolve(JavaInfo javaInfo) throws Exception {
+		// prepare reference
+		String reference = JavaInfoReferenceProvider.getReference(javaInfo);
+		Assert.isNotNull(reference);
+		// find object
+		for (BeanBindableInfo bindableObject : m_observables) {
+			BeanBindableInfo result = (BeanBindableInfo) bindableObject.resolveReference(reference);
+			//
+			if (result != null) {
+				return result;
+			}
+		}
+		//
+		return null;
+	}
 
-  /**
-   * @return {@link BeanPropertyBindableInfo} property that association with given
-   *         {@link Expression}.
-   */
-  private BeanPropertyBindableInfo getBindableProperty(BeanBindableInfo bindableObject,
-      AstEditor editor,
-      Expression expression) throws Exception {
-    // prepare reference
-    String propertyName = CoreUtils.evaluate(String.class, editor, expression);
-    String propertyReference = "\"" + propertyName + "\"";
-    // find property
-    BeanPropertyBindableInfo bindableProperty =
-        (BeanPropertyBindableInfo) bindableObject.resolvePropertyReference(propertyReference);
-    if (bindableProperty == null) {
-      AbstractParser.addError(editor, MessageFormat.format(
-          Messages.BeansObserveTypeContainer_beanPropertyNotFound,
-          expression,
-          bindableObject.getReference()), new Throwable());
-      bindableProperty =
-          new BeanPropertyBindableInfo(bindableObject.getBeanSupport(),
-              null,
-              propertyName,
-              null,
-              propertyReference);
-    }
-    return bindableProperty;
-  }
+	/**
+	 * @return {@link BeanPropertyBindableInfo} property that association with given
+	 *         {@link Expression}.
+	 */
+	private BeanPropertyBindableInfo getBindableProperty(BeanBindableInfo bindableObject,
+			AstEditor editor,
+			Expression expression) throws Exception {
+		// prepare reference
+		String propertyName = CoreUtils.evaluate(String.class, editor, expression);
+		String propertyReference = "\"" + propertyName + "\"";
+		// find property
+		BeanPropertyBindableInfo bindableProperty =
+				(BeanPropertyBindableInfo) bindableObject.resolvePropertyReference(propertyReference);
+		if (bindableProperty == null) {
+			AbstractParser.addError(editor, MessageFormat.format(
+					Messages.BeansObserveTypeContainer_beanPropertyNotFound,
+					expression,
+					bindableObject.getReference()), new Throwable());
+			bindableProperty =
+					new BeanPropertyBindableInfo(bindableObject.getBeanSupport(),
+							null,
+							propertyName,
+							null,
+							propertyReference);
+		}
+		return bindableProperty;
+	}
 
-  /**
-   * @return {@link ObservableInfo} master that association with given {@link Expression}.
-   */
-  public static ObservableInfo getMasterObservable(AstEditor editor,
-      IModelResolver resolver,
-      Expression expression) throws Exception {
-    // prepare master detail observable
-    ObservableInfo masterDetailObservable = (ObservableInfo) resolver.getModel(expression);
-    if (masterDetailObservable == null) {
-      AbstractParser.addError(editor, MessageFormat.format(
-          Messages.BeansObserveTypeContainer_masterObservableNotFound,
-          expression), new Throwable());
-      return null;
-    }
-    Assert.instanceOf(IMasterDetailProvider.class, masterDetailObservable);
-    // extract master observable
-    IMasterDetailProvider masterDetailProvider = (IMasterDetailProvider) masterDetailObservable;
-    ObservableInfo masterObservable = masterDetailProvider.getMasterObservable();
-    //
-    return masterObservable;
-  }
+	/**
+	 * @return {@link ObservableInfo} master that association with given {@link Expression}.
+	 */
+	public static ObservableInfo getMasterObservable(AstEditor editor,
+			IModelResolver resolver,
+			Expression expression) throws Exception {
+		// prepare master detail observable
+		ObservableInfo masterDetailObservable = (ObservableInfo) resolver.getModel(expression);
+		if (masterDetailObservable == null) {
+			AbstractParser.addError(editor, MessageFormat.format(
+					Messages.BeansObserveTypeContainer_masterObservableNotFound,
+					expression), new Throwable());
+			return null;
+		}
+		Assert.instanceOf(IMasterDetailProvider.class, masterDetailObservable);
+		// extract master observable
+		IMasterDetailProvider masterDetailProvider = (IMasterDetailProvider) masterDetailObservable;
+		ObservableInfo masterObservable = masterDetailProvider.getMasterObservable();
+		//
+		return masterObservable;
+	}
 
-  /**
-   * Helper method for load classes over editor class loader.
-   */
-  private Class<?> loadClass(String className) throws Exception {
-    return CoreUtils.load(EditorState.get(m_rootJavaInfo.getEditor()).getEditorLoader(), className);
-  }
+	/**
+	 * Helper method for load classes over editor class loader.
+	 */
+	private Class<?> loadClass(String className) throws Exception {
+		return CoreUtils.load(EditorState.get(m_rootJavaInfo.getEditor()).getEditorLoader(), className);
+	}
 
-  public JavaInfo getJavaInfoRepresentedBy(final String variable) {
-    final JavaInfo result[] = new JavaInfo[1];
-    m_rootJavaInfo.accept(new ObjectInfoVisitor() {
-      @Override
-      public boolean visit(ObjectInfo objectInfo) throws Exception {
-        if (result[0] == null && objectInfo instanceof JavaInfo) {
-          JavaInfo javaInfo = (JavaInfo) objectInfo;
-          if (variable.equals(JavaInfoReferenceProvider.getReference(javaInfo))) {
-            result[0] = javaInfo;
-          }
-        }
-        return result[0] == null;
-      }
-    });
-    return result[0];
-  }
+	public JavaInfo getJavaInfoRepresentedBy(final String variable) {
+		final JavaInfo result[] = new JavaInfo[1];
+		m_rootJavaInfo.accept(new ObjectInfoVisitor() {
+			@Override
+			public boolean visit(ObjectInfo objectInfo) throws Exception {
+				if (result[0] == null && objectInfo instanceof JavaInfo) {
+					JavaInfo javaInfo = (JavaInfo) objectInfo;
+					if (variable.equals(JavaInfoReferenceProvider.getReference(javaInfo))) {
+						result[0] = javaInfo;
+					}
+				}
+				return result[0] == null;
+			}
+		});
+		return result[0];
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/CreatorManager.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/CreatorManager.java
index 953aea32e..5ec934468 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/CreatorManager.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/CreatorManager.java
@@ -27,495 +27,495 @@
  * @coverage bindings.rcp.model.beans
  */
 final class CreatorManager {
-  public static final Map<String, LocalModelCreator> CONSTRUCTOR_CREATORS = Maps.newHashMap();
-  public static final Map<String, LocalModelCreator> METHOD_CREATORS = Maps.newHashMap();
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Factories
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final ILocalModelCreator VALUE_CREATOR = new ILocalModelCreator() {
-    @Override
-    public AstObjectInfo create(BeansObserveTypeContainer container,
-        AstEditor editor,
-        Expression[] arguments,
-        IModelResolver resolver,
-        ModelCreator<BeansObserveTypeContainer> modelCreator) throws Exception {
-      return container.createValue(editor, arguments, modelCreator.startIndex0);
-    }
-  };
-  private static final ILocalModelCreator VALUE_PROPERTY_CREATOR = new ILocalModelCreator() {
-    @Override
-    public AstObjectInfo create(BeansObserveTypeContainer container,
-        AstEditor editor,
-        Expression[] arguments,
-        IModelResolver resolver,
-        ModelCreator<BeansObserveTypeContainer> modelCreator) throws Exception {
-      return container.createValueProperty(
-          editor,
-          arguments,
-          modelCreator.startIndex0,
-          modelCreator.startIndex1,
-          modelCreator.startIndex2,
-          modelCreator.isPojo);
-    }
-  };
-  private static final ILocalModelCreator LIST_CREATOR = new ILocalModelCreator() {
-    @Override
-    public AstObjectInfo create(BeansObserveTypeContainer container,
-        AstEditor editor,
-        Expression[] arguments,
-        IModelResolver resolver,
-        ModelCreator<BeansObserveTypeContainer> modelCreator) throws Exception {
-      return container.createList(editor, arguments, modelCreator.startIndex0);
-    }
-  };
-  private static final ILocalModelCreator LIST_PROPERTY_CREATOR = new ILocalModelCreator() {
-    @Override
-    public AstObjectInfo create(BeansObserveTypeContainer container,
-        AstEditor editor,
-        Expression[] arguments,
-        IModelResolver resolver,
-        ModelCreator<BeansObserveTypeContainer> modelCreator) throws Exception {
-      return container.createListProperty(
-          editor,
-          arguments,
-          modelCreator.startIndex0,
-          modelCreator.startIndex1,
-          modelCreator.startIndex2,
-          modelCreator.isPojo);
-    }
-  };
-  private static final ILocalModelCreator SET_CREATOR = new ILocalModelCreator() {
-    @Override
-    public AstObjectInfo create(BeansObserveTypeContainer container,
-        AstEditor editor,
-        Expression[] arguments,
-        IModelResolver resolver,
-        ModelCreator<BeansObserveTypeContainer> modelCreator) throws Exception {
-      return container.createSet(editor, arguments, modelCreator.startIndex0);
-    }
-  };
-  private static final ILocalModelCreator SET_PROPERTY_CREATOR = new ILocalModelCreator() {
-    @Override
-    public AstObjectInfo create(BeansObserveTypeContainer container,
-        AstEditor editor,
-        Expression[] arguments,
-        IModelResolver resolver,
-        ModelCreator<BeansObserveTypeContainer> modelCreator) throws Exception {
-      return container.createSetProperty(
-          editor,
-          arguments,
-          modelCreator.startIndex0,
-          modelCreator.startIndex1,
-          modelCreator.startIndex2,
-          modelCreator.isPojo);
-    }
-  };
-  private static final ILocalModelCreator DETAIL_VALUE_CREATOR = new ILocalModelCreator() {
-    @Override
-    public AstObjectInfo create(BeansObserveTypeContainer container,
-        AstEditor editor,
-        Expression[] arguments,
-        IModelResolver resolver,
-        ModelCreator<BeansObserveTypeContainer> modelCreator) throws Exception {
-      return container.createDetailValue(
-          editor,
-          arguments,
-          resolver,
-          modelCreator.startIndex0,
-          modelCreator.startIndex1,
-          modelCreator.startIndex2,
-          modelCreator.isPojo);
-    }
-  };
-  private static final ILocalModelCreator DETAIL_LIST_CREATOR = new ILocalModelCreator() {
-    @Override
-    public AstObjectInfo create(BeansObserveTypeContainer container,
-        AstEditor editor,
-        Expression[] arguments,
-        IModelResolver resolver,
-        ModelCreator<BeansObserveTypeContainer> modelCreator) throws Exception {
-      return container.createDetailList(
-          editor,
-          arguments,
-          resolver,
-          modelCreator.startIndex0,
-          modelCreator.isPojo);
-    }
-  };
-  private static final ILocalModelCreator DETAIL_SET_CREATOR = new ILocalModelCreator() {
-    @Override
-    public AstObjectInfo create(BeansObserveTypeContainer container,
-        AstEditor editor,
-        Expression[] arguments,
-        IModelResolver resolver,
-        ModelCreator<BeansObserveTypeContainer> modelCreator) throws Exception {
-      return container.createDetailSet(
-          editor,
-          arguments,
-          resolver,
-          modelCreator.startIndex0,
-          modelCreator.isPojo);
-    }
-  };
-  private static final ILocalModelCreator MAPS_CREATOR = new ILocalModelCreator() {
-    @Override
-    public AstObjectInfo create(BeansObserveTypeContainer container,
-        AstEditor editor,
-        Expression[] arguments,
-        IModelResolver resolver,
-        ModelCreator<BeansObserveTypeContainer> modelCreator) throws Exception {
-      return container.createMaps(editor, arguments, resolver);
-    }
-  };
-  private static final ILocalModelCreator MAP_CREATOR = new ILocalModelCreator() {
-    @Override
-    public AstObjectInfo create(BeansObserveTypeContainer container,
-        AstEditor editor,
-        Expression[] arguments,
-        IModelResolver resolver,
-        ModelCreator<BeansObserveTypeContainer> modelCreator) throws Exception {
-      return container.createMap(editor, arguments, resolver);
-    }
-  };
-  private static final ILocalModelCreator SINGLE_SELECTION_CREATOR = new ILocalModelCreator() {
-    @Override
-    public AstObjectInfo create(BeansObserveTypeContainer container,
-        AstEditor editor,
-        Expression[] arguments,
-        IModelResolver resolver,
-        ModelCreator<BeansObserveTypeContainer> modelCreator) throws Exception {
-      return container.createSingleSelection(editor, arguments, resolver);
-    }
-  };
-  private static final ILocalModelCreator MULTI_SELECTION_CREATOR = new ILocalModelCreator() {
-    @Override
-    public AstObjectInfo create(BeansObserveTypeContainer container,
-        AstEditor editor,
-        Expression[] arguments,
-        IModelResolver resolver,
-        ModelCreator<BeansObserveTypeContainer> modelCreator) throws Exception {
-      return container.createMultiSelection(editor, arguments, resolver);
-    }
-  };
-  private static final ILocalModelCreator CHECKED_ELEMENTS_CREATOR = new ILocalModelCreator() {
-    @Override
-    public AstObjectInfo create(BeansObserveTypeContainer container,
-        AstEditor editor,
-        Expression[] arguments,
-        IModelResolver resolver,
-        ModelCreator<BeansObserveTypeContainer> modelCreator) throws Exception {
-      return container.createCheckedElements(editor, arguments, resolver);
-    }
-  };
-  private static final ILocalModelCreator WRITABLE_LIST_CREATOR = new ILocalModelCreator() {
-    @Override
-    public AstObjectInfo create(BeansObserveTypeContainer container,
-        AstEditor editor,
-        Expression[] arguments,
-        IModelResolver resolver,
-        ModelCreator<BeansObserveTypeContainer> modelCreator) throws Exception {
-      return container.createWritableList(editor, arguments, resolver, modelCreator.startIndex0);
-    }
-  };
-  private static final ILocalModelCreator WRITABLE_SET_CREATOR = new ILocalModelCreator() {
-    @Override
-    public AstObjectInfo create(BeansObserveTypeContainer container,
-        AstEditor editor,
-        Expression[] arguments,
-        IModelResolver resolver,
-        ModelCreator<BeansObserveTypeContainer> modelCreator) throws Exception {
-      return container.createWritableSet(editor, arguments, resolver, modelCreator.startIndex0);
-    }
-  };
-  private static final ILocalModelCreator SELF_LIST_CREATOR = new ILocalModelCreator() {
-    @Override
-    public AstObjectInfo create(BeansObserveTypeContainer container,
-        AstEditor editor,
-        Expression[] arguments,
-        IModelResolver resolver,
-        ModelCreator<BeansObserveTypeContainer> modelCreator) throws Exception {
-      return container.createSelfList(editor, arguments);
-    }
-  };
-  private static final ILocalModelCreator SELF_SET_CREATOR = new ILocalModelCreator() {
-    @Override
-    public AstObjectInfo create(BeansObserveTypeContainer container,
-        AstEditor editor,
-        Expression[] arguments,
-        IModelResolver resolver,
-        ModelCreator<BeansObserveTypeContainer> modelCreator) throws Exception {
-      return container.createSelfSet(editor, arguments);
-    }
-  };
-  private static final ILocalModelCreator LIST_FACTORY_CREATOR = new ILocalModelCreator() {
-    @Override
-    public AstObjectInfo create(BeansObserveTypeContainer container,
-        AstEditor editor,
-        Expression[] arguments,
-        IModelResolver resolver,
-        ModelCreator<BeansObserveTypeContainer> modelCreator) throws Exception {
-      return container.createListFactory(
-          editor,
-          arguments,
-          modelCreator.startIndex0,
-          modelCreator.isPojo);
-    }
-  };
-  private static final ILocalModelCreator SET_FACTORY_CREATOR = new ILocalModelCreator() {
-    @Override
-    public AstObjectInfo create(BeansObserveTypeContainer container,
-        AstEditor editor,
-        Expression[] arguments,
-        IModelResolver resolver,
-        ModelCreator<BeansObserveTypeContainer> modelCreator) throws Exception {
-      return container.createSetFactory(
-          editor,
-          arguments,
-          modelCreator.startIndex0,
-          modelCreator.isPojo);
-    }
-  };
+	public static final Map<String, LocalModelCreator> CONSTRUCTOR_CREATORS = Maps.newHashMap();
+	public static final Map<String, LocalModelCreator> METHOD_CREATORS = Maps.newHashMap();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Factories
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final ILocalModelCreator VALUE_CREATOR = new ILocalModelCreator() {
+		@Override
+		public AstObjectInfo create(BeansObserveTypeContainer container,
+				AstEditor editor,
+				Expression[] arguments,
+				IModelResolver resolver,
+				ModelCreator<BeansObserveTypeContainer> modelCreator) throws Exception {
+			return container.createValue(editor, arguments, modelCreator.startIndex0);
+		}
+	};
+	private static final ILocalModelCreator VALUE_PROPERTY_CREATOR = new ILocalModelCreator() {
+		@Override
+		public AstObjectInfo create(BeansObserveTypeContainer container,
+				AstEditor editor,
+				Expression[] arguments,
+				IModelResolver resolver,
+				ModelCreator<BeansObserveTypeContainer> modelCreator) throws Exception {
+			return container.createValueProperty(
+					editor,
+					arguments,
+					modelCreator.startIndex0,
+					modelCreator.startIndex1,
+					modelCreator.startIndex2,
+					modelCreator.isPojo);
+		}
+	};
+	private static final ILocalModelCreator LIST_CREATOR = new ILocalModelCreator() {
+		@Override
+		public AstObjectInfo create(BeansObserveTypeContainer container,
+				AstEditor editor,
+				Expression[] arguments,
+				IModelResolver resolver,
+				ModelCreator<BeansObserveTypeContainer> modelCreator) throws Exception {
+			return container.createList(editor, arguments, modelCreator.startIndex0);
+		}
+	};
+	private static final ILocalModelCreator LIST_PROPERTY_CREATOR = new ILocalModelCreator() {
+		@Override
+		public AstObjectInfo create(BeansObserveTypeContainer container,
+				AstEditor editor,
+				Expression[] arguments,
+				IModelResolver resolver,
+				ModelCreator<BeansObserveTypeContainer> modelCreator) throws Exception {
+			return container.createListProperty(
+					editor,
+					arguments,
+					modelCreator.startIndex0,
+					modelCreator.startIndex1,
+					modelCreator.startIndex2,
+					modelCreator.isPojo);
+		}
+	};
+	private static final ILocalModelCreator SET_CREATOR = new ILocalModelCreator() {
+		@Override
+		public AstObjectInfo create(BeansObserveTypeContainer container,
+				AstEditor editor,
+				Expression[] arguments,
+				IModelResolver resolver,
+				ModelCreator<BeansObserveTypeContainer> modelCreator) throws Exception {
+			return container.createSet(editor, arguments, modelCreator.startIndex0);
+		}
+	};
+	private static final ILocalModelCreator SET_PROPERTY_CREATOR = new ILocalModelCreator() {
+		@Override
+		public AstObjectInfo create(BeansObserveTypeContainer container,
+				AstEditor editor,
+				Expression[] arguments,
+				IModelResolver resolver,
+				ModelCreator<BeansObserveTypeContainer> modelCreator) throws Exception {
+			return container.createSetProperty(
+					editor,
+					arguments,
+					modelCreator.startIndex0,
+					modelCreator.startIndex1,
+					modelCreator.startIndex2,
+					modelCreator.isPojo);
+		}
+	};
+	private static final ILocalModelCreator DETAIL_VALUE_CREATOR = new ILocalModelCreator() {
+		@Override
+		public AstObjectInfo create(BeansObserveTypeContainer container,
+				AstEditor editor,
+				Expression[] arguments,
+				IModelResolver resolver,
+				ModelCreator<BeansObserveTypeContainer> modelCreator) throws Exception {
+			return container.createDetailValue(
+					editor,
+					arguments,
+					resolver,
+					modelCreator.startIndex0,
+					modelCreator.startIndex1,
+					modelCreator.startIndex2,
+					modelCreator.isPojo);
+		}
+	};
+	private static final ILocalModelCreator DETAIL_LIST_CREATOR = new ILocalModelCreator() {
+		@Override
+		public AstObjectInfo create(BeansObserveTypeContainer container,
+				AstEditor editor,
+				Expression[] arguments,
+				IModelResolver resolver,
+				ModelCreator<BeansObserveTypeContainer> modelCreator) throws Exception {
+			return container.createDetailList(
+					editor,
+					arguments,
+					resolver,
+					modelCreator.startIndex0,
+					modelCreator.isPojo);
+		}
+	};
+	private static final ILocalModelCreator DETAIL_SET_CREATOR = new ILocalModelCreator() {
+		@Override
+		public AstObjectInfo create(BeansObserveTypeContainer container,
+				AstEditor editor,
+				Expression[] arguments,
+				IModelResolver resolver,
+				ModelCreator<BeansObserveTypeContainer> modelCreator) throws Exception {
+			return container.createDetailSet(
+					editor,
+					arguments,
+					resolver,
+					modelCreator.startIndex0,
+					modelCreator.isPojo);
+		}
+	};
+	private static final ILocalModelCreator MAPS_CREATOR = new ILocalModelCreator() {
+		@Override
+		public AstObjectInfo create(BeansObserveTypeContainer container,
+				AstEditor editor,
+				Expression[] arguments,
+				IModelResolver resolver,
+				ModelCreator<BeansObserveTypeContainer> modelCreator) throws Exception {
+			return container.createMaps(editor, arguments, resolver);
+		}
+	};
+	private static final ILocalModelCreator MAP_CREATOR = new ILocalModelCreator() {
+		@Override
+		public AstObjectInfo create(BeansObserveTypeContainer container,
+				AstEditor editor,
+				Expression[] arguments,
+				IModelResolver resolver,
+				ModelCreator<BeansObserveTypeContainer> modelCreator) throws Exception {
+			return container.createMap(editor, arguments, resolver);
+		}
+	};
+	private static final ILocalModelCreator SINGLE_SELECTION_CREATOR = new ILocalModelCreator() {
+		@Override
+		public AstObjectInfo create(BeansObserveTypeContainer container,
+				AstEditor editor,
+				Expression[] arguments,
+				IModelResolver resolver,
+				ModelCreator<BeansObserveTypeContainer> modelCreator) throws Exception {
+			return container.createSingleSelection(editor, arguments, resolver);
+		}
+	};
+	private static final ILocalModelCreator MULTI_SELECTION_CREATOR = new ILocalModelCreator() {
+		@Override
+		public AstObjectInfo create(BeansObserveTypeContainer container,
+				AstEditor editor,
+				Expression[] arguments,
+				IModelResolver resolver,
+				ModelCreator<BeansObserveTypeContainer> modelCreator) throws Exception {
+			return container.createMultiSelection(editor, arguments, resolver);
+		}
+	};
+	private static final ILocalModelCreator CHECKED_ELEMENTS_CREATOR = new ILocalModelCreator() {
+		@Override
+		public AstObjectInfo create(BeansObserveTypeContainer container,
+				AstEditor editor,
+				Expression[] arguments,
+				IModelResolver resolver,
+				ModelCreator<BeansObserveTypeContainer> modelCreator) throws Exception {
+			return container.createCheckedElements(editor, arguments, resolver);
+		}
+	};
+	private static final ILocalModelCreator WRITABLE_LIST_CREATOR = new ILocalModelCreator() {
+		@Override
+		public AstObjectInfo create(BeansObserveTypeContainer container,
+				AstEditor editor,
+				Expression[] arguments,
+				IModelResolver resolver,
+				ModelCreator<BeansObserveTypeContainer> modelCreator) throws Exception {
+			return container.createWritableList(editor, arguments, resolver, modelCreator.startIndex0);
+		}
+	};
+	private static final ILocalModelCreator WRITABLE_SET_CREATOR = new ILocalModelCreator() {
+		@Override
+		public AstObjectInfo create(BeansObserveTypeContainer container,
+				AstEditor editor,
+				Expression[] arguments,
+				IModelResolver resolver,
+				ModelCreator<BeansObserveTypeContainer> modelCreator) throws Exception {
+			return container.createWritableSet(editor, arguments, resolver, modelCreator.startIndex0);
+		}
+	};
+	private static final ILocalModelCreator SELF_LIST_CREATOR = new ILocalModelCreator() {
+		@Override
+		public AstObjectInfo create(BeansObserveTypeContainer container,
+				AstEditor editor,
+				Expression[] arguments,
+				IModelResolver resolver,
+				ModelCreator<BeansObserveTypeContainer> modelCreator) throws Exception {
+			return container.createSelfList(editor, arguments);
+		}
+	};
+	private static final ILocalModelCreator SELF_SET_CREATOR = new ILocalModelCreator() {
+		@Override
+		public AstObjectInfo create(BeansObserveTypeContainer container,
+				AstEditor editor,
+				Expression[] arguments,
+				IModelResolver resolver,
+				ModelCreator<BeansObserveTypeContainer> modelCreator) throws Exception {
+			return container.createSelfSet(editor, arguments);
+		}
+	};
+	private static final ILocalModelCreator LIST_FACTORY_CREATOR = new ILocalModelCreator() {
+		@Override
+		public AstObjectInfo create(BeansObserveTypeContainer container,
+				AstEditor editor,
+				Expression[] arguments,
+				IModelResolver resolver,
+				ModelCreator<BeansObserveTypeContainer> modelCreator) throws Exception {
+			return container.createListFactory(
+					editor,
+					arguments,
+					modelCreator.startIndex0,
+					modelCreator.isPojo);
+		}
+	};
+	private static final ILocalModelCreator SET_FACTORY_CREATOR = new ILocalModelCreator() {
+		@Override
+		public AstObjectInfo create(BeansObserveTypeContainer container,
+				AstEditor editor,
+				Expression[] arguments,
+				IModelResolver resolver,
+				ModelCreator<BeansObserveTypeContainer> modelCreator) throws Exception {
+			return container.createSetFactory(
+					editor,
+					arguments,
+					modelCreator.startIndex0,
+					modelCreator.isPojo);
+		}
+	};
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Creators
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static void methodCreator(LocalModelCreator modelCreator, String... signatures) {
-    for (String signature : signatures) {
-      METHOD_CREATORS.put(signature, modelCreator);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Creators
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static void methodCreator(LocalModelCreator modelCreator, String... signatures) {
+		for (String signature : signatures) {
+			METHOD_CREATORS.put(signature, modelCreator);
+		}
+	}
 
-  static {
-    methodCreator(
-        new LocalModelCreator(0, VALUE_CREATOR),
-        "org.eclipse.core.databinding.beans.BeansObservables.observeValue(java.lang.Object,java.lang.String)",
-        "org.eclipse.core.databinding.beans.PojoObservables.observeValue(java.lang.Object,java.lang.String)");
-    methodCreator(
-        new LocalModelCreator(1, VALUE_CREATOR),
-        "org.eclipse.core.databinding.beans.BeansObservables.observeValue(org.eclipse.core.databinding.observable.Realm,java.lang.Object,java.lang.String)",
-        "org.eclipse.core.databinding.beans.PojoObservables.observeValue(org.eclipse.core.databinding.observable.Realm,java.lang.Object,java.lang.String)");
-    METHOD_CREATORS.put(
-        "org.eclipse.core.databinding.beans.typed.BeanProperties.value(java.lang.String)",
-        new LocalModelCreator(0, VALUE_PROPERTY_CREATOR));
-    METHOD_CREATORS.put(
-        "org.eclipse.core.databinding.beans.typed.BeanProperties.value(java.lang.String,java.lang.Class)",
-        new LocalModelCreator(0, 1, VALUE_PROPERTY_CREATOR));
-    METHOD_CREATORS.put(
-        "org.eclipse.core.databinding.beans.typed.BeanProperties.value(java.lang.Class,java.lang.String)",
-        new LocalModelCreator(1, -1, 0, VALUE_PROPERTY_CREATOR));
-    METHOD_CREATORS.put(
-        "org.eclipse.core.databinding.beans.typed.BeanProperties.value(java.lang.Class,java.lang.String,java.lang.Class)",
-        new LocalModelCreator(1, 2, 0, VALUE_PROPERTY_CREATOR));
-    METHOD_CREATORS.put(
-        "org.eclipse.core.databinding.beans.typed.PojoProperties.value(java.lang.String)",
-        new LocalModelCreator(0, true, VALUE_PROPERTY_CREATOR));
-    METHOD_CREATORS.put(
-        "org.eclipse.core.databinding.beans.typed.PojoProperties.value(java.lang.String,java.lang.Class)",
-        new LocalModelCreator(0, 1, true, VALUE_PROPERTY_CREATOR));
-    METHOD_CREATORS.put(
-        "org.eclipse.core.databinding.beans.typed.PojoProperties.value(java.lang.Class,java.lang.String)",
-        new LocalModelCreator(1, -1, 0, true, VALUE_PROPERTY_CREATOR));
-    METHOD_CREATORS.put(
-        "org.eclipse.core.databinding.beans.typed.PojoProperties.value(java.lang.Class,java.lang.String,java.lang.Class)",
-        new LocalModelCreator(1, 2, 0, true, VALUE_PROPERTY_CREATOR));
-    //
-    methodCreator(
-        new LocalModelCreator(0, LIST_CREATOR),
-        "org.eclipse.core.databinding.beans.BeansObservables.observeList(java.lang.Object,java.lang.String)",
-        "org.eclipse.core.databinding.beans.PojoObservables.observeList(java.lang.Object,java.lang.String)");
-    methodCreator(
-        new LocalModelCreator(0, LIST_CREATOR),
-        "org.eclipse.core.databinding.beans.BeansObservables.observeList(java.lang.Object,java.lang.String,java.lang.Class)",
-        "org.eclipse.core.databinding.beans.PojoObservables.observeList(java.lang.Object,java.lang.String,java.lang.Class)");
-    methodCreator(
-        new LocalModelCreator(1, LIST_CREATOR),
-        "org.eclipse.core.databinding.beans.BeansObservables.observeList(org.eclipse.core.databinding.observable.Realm,java.lang.Object,java.lang.String)",
-        "org.eclipse.core.databinding.beans.PojoObservables.observeList(org.eclipse.core.databinding.observable.Realm,java.lang.Object,java.lang.String)");
-    methodCreator(
-        new LocalModelCreator(1, LIST_CREATOR),
-        "org.eclipse.core.databinding.beans.BeansObservables.observeList(org.eclipse.core.databinding.observable.Realm,java.lang.Object,java.lang.String,java.lang.Class)",
-        "org.eclipse.core.databinding.beans.PojoObservables.observeList(org.eclipse.core.databinding.observable.Realm,java.lang.Object,java.lang.String,java.lang.Class)");
-    METHOD_CREATORS.put(
-        "org.eclipse.core.databinding.beans.typed.BeanProperties.list(java.lang.String)",
-        new LocalModelCreator(0, LIST_PROPERTY_CREATOR));
-    METHOD_CREATORS.put(
-        "org.eclipse.core.databinding.beans.typed.BeanProperties.list(java.lang.String,java.lang.Class)",
-        new LocalModelCreator(0, 1, LIST_PROPERTY_CREATOR));
-    METHOD_CREATORS.put(
-        "org.eclipse.core.databinding.beans.typed.BeanProperties.list(java.lang.Class,java.lang.String)",
-        new LocalModelCreator(1, -1, 0, LIST_PROPERTY_CREATOR));
-    METHOD_CREATORS.put(
-        "org.eclipse.core.databinding.beans.typed.BeanProperties.list(java.lang.Class,java.lang.String,java.lang.Class)",
-        new LocalModelCreator(1, 2, 0, LIST_PROPERTY_CREATOR));
-    METHOD_CREATORS.put(
-        "org.eclipse.core.databinding.beans.typed.PojoProperties.list(java.lang.String)",
-        new LocalModelCreator(0, true, LIST_PROPERTY_CREATOR));
-    METHOD_CREATORS.put(
-        "org.eclipse.core.databinding.beans.typed.PojoProperties.list(java.lang.String,java.lang.Class)",
-        new LocalModelCreator(0, 1, true, LIST_PROPERTY_CREATOR));
-    METHOD_CREATORS.put(
-        "org.eclipse.core.databinding.beans.typed.PojoProperties.list(java.lang.Class,java.lang.String)",
-        new LocalModelCreator(1, -1, 0, true, LIST_PROPERTY_CREATOR));
-    METHOD_CREATORS.put(
-        "org.eclipse.core.databinding.beans.typed.PojoProperties.list(java.lang.Class,java.lang.String,java.lang.Class)",
-        new LocalModelCreator(1, 2, 0, true, LIST_PROPERTY_CREATOR));
-    //
-    methodCreator(
-        new LocalModelCreator(0, SET_CREATOR),
-        "org.eclipse.core.databinding.beans.BeansObservables.observeSet(java.lang.Object,java.lang.String)",
-        "org.eclipse.core.databinding.beans.PojoObservables.observeSet(java.lang.Object,java.lang.String)");
-    methodCreator(
-        new LocalModelCreator(0, SET_CREATOR),
-        "org.eclipse.core.databinding.beans.BeansObservables.observeSet(java.lang.Object,java.lang.String,java.lang.Class)",
-        "org.eclipse.core.databinding.beans.PojoObservables.observeSet(java.lang.Object,java.lang.String,java.lang.Class)");
-    methodCreator(
-        new LocalModelCreator(1, SET_CREATOR),
-        "org.eclipse.core.databinding.beans.BeansObservables.observeSet(org.eclipse.core.databinding.observable.Realm,java.lang.Object,java.lang.String)",
-        "org.eclipse.core.databinding.beans.PojoObservables.observeSet(org.eclipse.core.databinding.observable.Realm,java.lang.Object,java.lang.String)");
-    methodCreator(
-        new LocalModelCreator(1, SET_CREATOR),
-        "org.eclipse.core.databinding.beans.BeansObservables.observeSet(org.eclipse.core.databinding.observable.Realm,java.lang.Object,java.lang.String,java.lang.Class)",
-        "org.eclipse.core.databinding.beans.PojoObservables.observeSet(org.eclipse.core.databinding.observable.Realm,java.lang.Object,java.lang.String,java.lang.Class)");
-    METHOD_CREATORS.put(
-        "org.eclipse.core.databinding.beans.typed.BeanProperties.set(java.lang.String)",
-        new LocalModelCreator(0, SET_PROPERTY_CREATOR));
-    METHOD_CREATORS.put(
-        "org.eclipse.core.databinding.beans.typed.BeanProperties.set(java.lang.String,java.lang.Class)",
-        new LocalModelCreator(0, 1, SET_PROPERTY_CREATOR));
-    METHOD_CREATORS.put(
-        "org.eclipse.core.databinding.beans.typed.BeanProperties.set(java.lang.Class,java.lang.String)",
-        new LocalModelCreator(1, -1, 0, SET_PROPERTY_CREATOR));
-    METHOD_CREATORS.put(
-        "org.eclipse.core.databinding.beans.typed.BeanProperties.set(java.lang.Class,java.lang.String,java.lang.Class)",
-        new LocalModelCreator(1, 2, 0, SET_PROPERTY_CREATOR));
-    METHOD_CREATORS.put(
-        "org.eclipse.core.databinding.beans.typed.PojoProperties.set(java.lang.String)",
-        new LocalModelCreator(0, true, SET_PROPERTY_CREATOR));
-    METHOD_CREATORS.put(
-        "org.eclipse.core.databinding.beans.typed.PojoProperties.set(java.lang.String,java.lang.Class)",
-        new LocalModelCreator(0, 1, true, SET_PROPERTY_CREATOR));
-    METHOD_CREATORS.put(
-        "org.eclipse.core.databinding.beans.typed.PojoProperties.set(java.lang.Class,java.lang.String)",
-        new LocalModelCreator(1, -1, 0, true, SET_PROPERTY_CREATOR));
-    METHOD_CREATORS.put(
-        "org.eclipse.core.databinding.beans.typed.PojoProperties.set(java.lang.Class,java.lang.String,java.lang.Class)",
-        new LocalModelCreator(1, 2, 0, true, SET_PROPERTY_CREATOR));
-    //
-    METHOD_CREATORS.put(
-        "org.eclipse.core.databinding.beans.BeansObservables.observeDetailValue(org.eclipse.core.databinding.observable.value.IObservableValue,java.lang.String,java.lang.Class)",
-        new LocalModelCreator(0, 1, DETAIL_VALUE_CREATOR));
-    METHOD_CREATORS.put(
-        "org.eclipse.core.databinding.beans.PojoObservables.observeDetailValue(org.eclipse.core.databinding.observable.value.IObservableValue,java.lang.String,java.lang.Class)",
-        new LocalModelCreator(0, 1, true, DETAIL_VALUE_CREATOR));
-    METHOD_CREATORS.put(
-        "org.eclipse.core.databinding.beans.BeansObservables.observeDetailValue(org.eclipse.core.databinding.observable.Realm,org.eclipse.core.databinding.observable.value.IObservableValue,java.lang.String,java.lang.Class)",
-        new LocalModelCreator(1, 2, DETAIL_VALUE_CREATOR));
-    METHOD_CREATORS.put(
-        "org.eclipse.core.databinding.beans.PojoObservables.observeDetailValue(org.eclipse.core.databinding.observable.Realm,org.eclipse.core.databinding.observable.value.IObservableValue,java.lang.String,java.lang.Class)",
-        new LocalModelCreator(1, 2, true, DETAIL_VALUE_CREATOR));
-    METHOD_CREATORS.put(
-        "org.eclipse.core.databinding.beans.BeansObservables.observeDetailValue(org.eclipse.core.databinding.observable.value.IObservableValue,java.lang.Class,java.lang.String,java.lang.Class)",
-        new LocalModelCreator(0, 2, 1, DETAIL_VALUE_CREATOR));
-    METHOD_CREATORS.put(
-        "org.eclipse.core.databinding.beans.BeansObservables.observeDetailValue(org.eclipse.core.databinding.observable.Realm,org.eclipse.core.databinding.observable.value.IObservableValue,java.lang.Class,java.lang.String,java.lang.Class)",
-        new LocalModelCreator(1, 3, 2, DETAIL_VALUE_CREATOR));
-    //
-    METHOD_CREATORS.put(
-        "org.eclipse.core.databinding.beans.BeansObservables.observeDetailList(org.eclipse.core.databinding.observable.value.IObservableValue,java.lang.String,java.lang.Class)",
-        new LocalModelCreator(0, DETAIL_LIST_CREATOR));
-    METHOD_CREATORS.put(
-        "org.eclipse.core.databinding.beans.PojoObservables.observeDetailList(org.eclipse.core.databinding.observable.value.IObservableValue,java.lang.String,java.lang.Class)",
-        new LocalModelCreator(0, true, DETAIL_LIST_CREATOR));
-    METHOD_CREATORS.put(
-        "org.eclipse.core.databinding.beans.BeansObservables.observeDetailList(org.eclipse.core.databinding.observable.Realm,org.eclipse.core.databinding.observable.value.IObservableValue,java.lang.String,java.lang.Class)",
-        new LocalModelCreator(1, DETAIL_LIST_CREATOR));
-    METHOD_CREATORS.put(
-        "org.eclipse.core.databinding.beans.PojoObservables.observeDetailList(org.eclipse.core.databinding.observable.Realm,org.eclipse.core.databinding.observable.value.IObservableValue,java.lang.String,java.lang.Class)",
-        new LocalModelCreator(1, true, DETAIL_LIST_CREATOR));
-    //
-    METHOD_CREATORS.put(
-        "org.eclipse.core.databinding.beans.BeansObservables.observeDetailSet(org.eclipse.core.databinding.observable.value.IObservableValue,java.lang.String,java.lang.Class)",
-        new LocalModelCreator(0, DETAIL_SET_CREATOR));
-    METHOD_CREATORS.put(
-        "org.eclipse.core.databinding.beans.PojoObservables.observeDetailSet(org.eclipse.core.databinding.observable.value.IObservableValue,java.lang.String,java.lang.Class)",
-        new LocalModelCreator(0, true, DETAIL_SET_CREATOR));
-    METHOD_CREATORS.put(
-        "org.eclipse.core.databinding.beans.BeansObservables.observeDetailSet(org.eclipse.core.databinding.observable.Realm,org.eclipse.core.databinding.observable.value.IObservableValue,java.lang.String,java.lang.Class)",
-        new LocalModelCreator(1, DETAIL_SET_CREATOR));
-    METHOD_CREATORS.put(
-        "org.eclipse.core.databinding.beans.PojoObservables.observeDetailSet(org.eclipse.core.databinding.observable.Realm,org.eclipse.core.databinding.observable.value.IObservableValue,java.lang.String,java.lang.Class)",
-        new LocalModelCreator(1, true, DETAIL_SET_CREATOR));
-    //
-    methodCreator(
-        new LocalModelCreator(MAPS_CREATOR),
-        "org.eclipse.core.databinding.beans.BeansObservables.observeMaps(org.eclipse.core.databinding.observable.set.IObservableSet,java.lang.Class,java.lang.String[])",
-        "org.eclipse.core.databinding.beans.PojoObservables.observeMaps(org.eclipse.core.databinding.observable.set.IObservableSet,java.lang.Class,java.lang.String[])");
-    methodCreator(
-        new LocalModelCreator(MAP_CREATOR),
-        "org.eclipse.core.databinding.beans.BeansObservables.observeMap(org.eclipse.core.databinding.observable.set.IObservableSet,java.lang.Class,java.lang.String)",
-        "org.eclipse.core.databinding.beans.PojoObservables.observeMap(org.eclipse.core.databinding.observable.set.IObservableSet,java.lang.Class,java.lang.String)");
-    //
-    METHOD_CREATORS.put(
-        "org.eclipse.jface.databinding.viewers.ViewersObservables.observeSingleSelection(org.eclipse.jface.viewers.ISelectionProvider)",
-        new LocalModelCreator(SINGLE_SELECTION_CREATOR));
-    //
-    METHOD_CREATORS.put(
-        "org.eclipse.jface.databinding.viewers.ViewersObservables.observeMultiSelection(org.eclipse.jface.viewers.ISelectionProvider)",
-        new LocalModelCreator(MULTI_SELECTION_CREATOR));
-    //
-    METHOD_CREATORS.put(
-        "org.eclipse.jface.databinding.viewers.ViewersObservables.observeCheckedElements(org.eclipse.jface.viewers.ICheckable,java.lang.Object)",
-        new LocalModelCreator(CHECKED_ELEMENTS_CREATOR));
-    //
-    METHOD_CREATORS.put(
-        "org.eclipse.core.databinding.beans.BeansObservables.listFactory(java.lang.String,java.lang.Class)",
-        new LocalModelCreator(LIST_FACTORY_CREATOR));
-    METHOD_CREATORS.put(
-        "org.eclipse.core.databinding.beans.BeansObservables.listFactory(org.eclipse.core.databinding.observable.Realm,java.lang.String,java.lang.Class)",
-        new LocalModelCreator(1, LIST_FACTORY_CREATOR));
-    METHOD_CREATORS.put(
-        "org.eclipse.core.databinding.beans.PojoObservables.listFactory(java.lang.String,java.lang.Class)",
-        new LocalModelCreator(true, LIST_FACTORY_CREATOR));
-    METHOD_CREATORS.put(
-        "org.eclipse.core.databinding.beans.PojoObservables.listFactory(org.eclipse.core.databinding.observable.Realm,java.lang.String,java.lang.Class)",
-        new LocalModelCreator(1, true, LIST_FACTORY_CREATOR));
-    //
-    METHOD_CREATORS.put(
-        "org.eclipse.core.databinding.beans.BeansObservables.setFactory(java.lang.String,java.lang.Class)",
-        new LocalModelCreator(SET_FACTORY_CREATOR));
-    METHOD_CREATORS.put(
-        "org.eclipse.core.databinding.beans.BeansObservables.setFactory(org.eclipse.core.databinding.observable.Realm,java.lang.String,java.lang.Class)",
-        new LocalModelCreator(1, SET_FACTORY_CREATOR));
-    METHOD_CREATORS.put(
-        "org.eclipse.core.databinding.beans.PojoObservables.setFactory(java.lang.String,java.lang.Class)",
-        new LocalModelCreator(true, SET_FACTORY_CREATOR));
-    METHOD_CREATORS.put(
-        "org.eclipse.core.databinding.beans.PojoObservables.setFactory(org.eclipse.core.databinding.observable.Realm,java.lang.String,java.lang.Class)",
-        new LocalModelCreator(1, true, SET_FACTORY_CREATOR));
-    //
-    CONSTRUCTOR_CREATORS.put(
-        "org.eclipse.core.databinding.observable.list.WritableList.<init>(java.util.List,java.lang.Object)",
-        new LocalModelCreator(0, WRITABLE_LIST_CREATOR));
-    CONSTRUCTOR_CREATORS.put(
-        "org.eclipse.core.databinding.observable.list.WritableList.<init>(org.eclipse.core.databinding.observable.Realm,java.util.List,java.lang.Object)",
-        new LocalModelCreator(1, WRITABLE_LIST_CREATOR));
-    //
-    CONSTRUCTOR_CREATORS.put(
-        "org.eclipse.core.databinding.observable.set.WritableSet.<init>(java.util.Collection,java.lang.Object)",
-        new LocalModelCreator(0, WRITABLE_SET_CREATOR));
-    CONSTRUCTOR_CREATORS.put(
-        "org.eclipse.core.databinding.observable.set.WritableSet.<init>(org.eclipse.core.databinding.observable.Realm,java.util.Collection,java.lang.Object)",
-        new LocalModelCreator(1, WRITABLE_SET_CREATOR));
-    //
-    METHOD_CREATORS.put(
-        "org.eclipse.core.databinding.property.Properties.selfList(java.lang.Object)",
-        new LocalModelCreator(SELF_LIST_CREATOR));
-    METHOD_CREATORS.put(
-        "org.eclipse.core.databinding.property.Properties.selfSet(java.lang.Object)",
-        new LocalModelCreator(SELF_SET_CREATOR));
-  }
+	static {
+		methodCreator(
+				new LocalModelCreator(0, VALUE_CREATOR),
+				"org.eclipse.core.databinding.beans.BeansObservables.observeValue(java.lang.Object,java.lang.String)",
+				"org.eclipse.core.databinding.beans.PojoObservables.observeValue(java.lang.Object,java.lang.String)");
+		methodCreator(
+				new LocalModelCreator(1, VALUE_CREATOR),
+				"org.eclipse.core.databinding.beans.BeansObservables.observeValue(org.eclipse.core.databinding.observable.Realm,java.lang.Object,java.lang.String)",
+				"org.eclipse.core.databinding.beans.PojoObservables.observeValue(org.eclipse.core.databinding.observable.Realm,java.lang.Object,java.lang.String)");
+		METHOD_CREATORS.put(
+				"org.eclipse.core.databinding.beans.typed.BeanProperties.value(java.lang.String)",
+				new LocalModelCreator(0, VALUE_PROPERTY_CREATOR));
+		METHOD_CREATORS.put(
+				"org.eclipse.core.databinding.beans.typed.BeanProperties.value(java.lang.String,java.lang.Class)",
+				new LocalModelCreator(0, 1, VALUE_PROPERTY_CREATOR));
+		METHOD_CREATORS.put(
+				"org.eclipse.core.databinding.beans.typed.BeanProperties.value(java.lang.Class,java.lang.String)",
+				new LocalModelCreator(1, -1, 0, VALUE_PROPERTY_CREATOR));
+		METHOD_CREATORS.put(
+				"org.eclipse.core.databinding.beans.typed.BeanProperties.value(java.lang.Class,java.lang.String,java.lang.Class)",
+				new LocalModelCreator(1, 2, 0, VALUE_PROPERTY_CREATOR));
+		METHOD_CREATORS.put(
+				"org.eclipse.core.databinding.beans.typed.PojoProperties.value(java.lang.String)",
+				new LocalModelCreator(0, true, VALUE_PROPERTY_CREATOR));
+		METHOD_CREATORS.put(
+				"org.eclipse.core.databinding.beans.typed.PojoProperties.value(java.lang.String,java.lang.Class)",
+				new LocalModelCreator(0, 1, true, VALUE_PROPERTY_CREATOR));
+		METHOD_CREATORS.put(
+				"org.eclipse.core.databinding.beans.typed.PojoProperties.value(java.lang.Class,java.lang.String)",
+				new LocalModelCreator(1, -1, 0, true, VALUE_PROPERTY_CREATOR));
+		METHOD_CREATORS.put(
+				"org.eclipse.core.databinding.beans.typed.PojoProperties.value(java.lang.Class,java.lang.String,java.lang.Class)",
+				new LocalModelCreator(1, 2, 0, true, VALUE_PROPERTY_CREATOR));
+		//
+		methodCreator(
+				new LocalModelCreator(0, LIST_CREATOR),
+				"org.eclipse.core.databinding.beans.BeansObservables.observeList(java.lang.Object,java.lang.String)",
+				"org.eclipse.core.databinding.beans.PojoObservables.observeList(java.lang.Object,java.lang.String)");
+		methodCreator(
+				new LocalModelCreator(0, LIST_CREATOR),
+				"org.eclipse.core.databinding.beans.BeansObservables.observeList(java.lang.Object,java.lang.String,java.lang.Class)",
+				"org.eclipse.core.databinding.beans.PojoObservables.observeList(java.lang.Object,java.lang.String,java.lang.Class)");
+		methodCreator(
+				new LocalModelCreator(1, LIST_CREATOR),
+				"org.eclipse.core.databinding.beans.BeansObservables.observeList(org.eclipse.core.databinding.observable.Realm,java.lang.Object,java.lang.String)",
+				"org.eclipse.core.databinding.beans.PojoObservables.observeList(org.eclipse.core.databinding.observable.Realm,java.lang.Object,java.lang.String)");
+		methodCreator(
+				new LocalModelCreator(1, LIST_CREATOR),
+				"org.eclipse.core.databinding.beans.BeansObservables.observeList(org.eclipse.core.databinding.observable.Realm,java.lang.Object,java.lang.String,java.lang.Class)",
+				"org.eclipse.core.databinding.beans.PojoObservables.observeList(org.eclipse.core.databinding.observable.Realm,java.lang.Object,java.lang.String,java.lang.Class)");
+		METHOD_CREATORS.put(
+				"org.eclipse.core.databinding.beans.typed.BeanProperties.list(java.lang.String)",
+				new LocalModelCreator(0, LIST_PROPERTY_CREATOR));
+		METHOD_CREATORS.put(
+				"org.eclipse.core.databinding.beans.typed.BeanProperties.list(java.lang.String,java.lang.Class)",
+				new LocalModelCreator(0, 1, LIST_PROPERTY_CREATOR));
+		METHOD_CREATORS.put(
+				"org.eclipse.core.databinding.beans.typed.BeanProperties.list(java.lang.Class,java.lang.String)",
+				new LocalModelCreator(1, -1, 0, LIST_PROPERTY_CREATOR));
+		METHOD_CREATORS.put(
+				"org.eclipse.core.databinding.beans.typed.BeanProperties.list(java.lang.Class,java.lang.String,java.lang.Class)",
+				new LocalModelCreator(1, 2, 0, LIST_PROPERTY_CREATOR));
+		METHOD_CREATORS.put(
+				"org.eclipse.core.databinding.beans.typed.PojoProperties.list(java.lang.String)",
+				new LocalModelCreator(0, true, LIST_PROPERTY_CREATOR));
+		METHOD_CREATORS.put(
+				"org.eclipse.core.databinding.beans.typed.PojoProperties.list(java.lang.String,java.lang.Class)",
+				new LocalModelCreator(0, 1, true, LIST_PROPERTY_CREATOR));
+		METHOD_CREATORS.put(
+				"org.eclipse.core.databinding.beans.typed.PojoProperties.list(java.lang.Class,java.lang.String)",
+				new LocalModelCreator(1, -1, 0, true, LIST_PROPERTY_CREATOR));
+		METHOD_CREATORS.put(
+				"org.eclipse.core.databinding.beans.typed.PojoProperties.list(java.lang.Class,java.lang.String,java.lang.Class)",
+				new LocalModelCreator(1, 2, 0, true, LIST_PROPERTY_CREATOR));
+		//
+		methodCreator(
+				new LocalModelCreator(0, SET_CREATOR),
+				"org.eclipse.core.databinding.beans.BeansObservables.observeSet(java.lang.Object,java.lang.String)",
+				"org.eclipse.core.databinding.beans.PojoObservables.observeSet(java.lang.Object,java.lang.String)");
+		methodCreator(
+				new LocalModelCreator(0, SET_CREATOR),
+				"org.eclipse.core.databinding.beans.BeansObservables.observeSet(java.lang.Object,java.lang.String,java.lang.Class)",
+				"org.eclipse.core.databinding.beans.PojoObservables.observeSet(java.lang.Object,java.lang.String,java.lang.Class)");
+		methodCreator(
+				new LocalModelCreator(1, SET_CREATOR),
+				"org.eclipse.core.databinding.beans.BeansObservables.observeSet(org.eclipse.core.databinding.observable.Realm,java.lang.Object,java.lang.String)",
+				"org.eclipse.core.databinding.beans.PojoObservables.observeSet(org.eclipse.core.databinding.observable.Realm,java.lang.Object,java.lang.String)");
+		methodCreator(
+				new LocalModelCreator(1, SET_CREATOR),
+				"org.eclipse.core.databinding.beans.BeansObservables.observeSet(org.eclipse.core.databinding.observable.Realm,java.lang.Object,java.lang.String,java.lang.Class)",
+				"org.eclipse.core.databinding.beans.PojoObservables.observeSet(org.eclipse.core.databinding.observable.Realm,java.lang.Object,java.lang.String,java.lang.Class)");
+		METHOD_CREATORS.put(
+				"org.eclipse.core.databinding.beans.typed.BeanProperties.set(java.lang.String)",
+				new LocalModelCreator(0, SET_PROPERTY_CREATOR));
+		METHOD_CREATORS.put(
+				"org.eclipse.core.databinding.beans.typed.BeanProperties.set(java.lang.String,java.lang.Class)",
+				new LocalModelCreator(0, 1, SET_PROPERTY_CREATOR));
+		METHOD_CREATORS.put(
+				"org.eclipse.core.databinding.beans.typed.BeanProperties.set(java.lang.Class,java.lang.String)",
+				new LocalModelCreator(1, -1, 0, SET_PROPERTY_CREATOR));
+		METHOD_CREATORS.put(
+				"org.eclipse.core.databinding.beans.typed.BeanProperties.set(java.lang.Class,java.lang.String,java.lang.Class)",
+				new LocalModelCreator(1, 2, 0, SET_PROPERTY_CREATOR));
+		METHOD_CREATORS.put(
+				"org.eclipse.core.databinding.beans.typed.PojoProperties.set(java.lang.String)",
+				new LocalModelCreator(0, true, SET_PROPERTY_CREATOR));
+		METHOD_CREATORS.put(
+				"org.eclipse.core.databinding.beans.typed.PojoProperties.set(java.lang.String,java.lang.Class)",
+				new LocalModelCreator(0, 1, true, SET_PROPERTY_CREATOR));
+		METHOD_CREATORS.put(
+				"org.eclipse.core.databinding.beans.typed.PojoProperties.set(java.lang.Class,java.lang.String)",
+				new LocalModelCreator(1, -1, 0, true, SET_PROPERTY_CREATOR));
+		METHOD_CREATORS.put(
+				"org.eclipse.core.databinding.beans.typed.PojoProperties.set(java.lang.Class,java.lang.String,java.lang.Class)",
+				new LocalModelCreator(1, 2, 0, true, SET_PROPERTY_CREATOR));
+		//
+		METHOD_CREATORS.put(
+				"org.eclipse.core.databinding.beans.BeansObservables.observeDetailValue(org.eclipse.core.databinding.observable.value.IObservableValue,java.lang.String,java.lang.Class)",
+				new LocalModelCreator(0, 1, DETAIL_VALUE_CREATOR));
+		METHOD_CREATORS.put(
+				"org.eclipse.core.databinding.beans.PojoObservables.observeDetailValue(org.eclipse.core.databinding.observable.value.IObservableValue,java.lang.String,java.lang.Class)",
+				new LocalModelCreator(0, 1, true, DETAIL_VALUE_CREATOR));
+		METHOD_CREATORS.put(
+				"org.eclipse.core.databinding.beans.BeansObservables.observeDetailValue(org.eclipse.core.databinding.observable.Realm,org.eclipse.core.databinding.observable.value.IObservableValue,java.lang.String,java.lang.Class)",
+				new LocalModelCreator(1, 2, DETAIL_VALUE_CREATOR));
+		METHOD_CREATORS.put(
+				"org.eclipse.core.databinding.beans.PojoObservables.observeDetailValue(org.eclipse.core.databinding.observable.Realm,org.eclipse.core.databinding.observable.value.IObservableValue,java.lang.String,java.lang.Class)",
+				new LocalModelCreator(1, 2, true, DETAIL_VALUE_CREATOR));
+		METHOD_CREATORS.put(
+				"org.eclipse.core.databinding.beans.BeansObservables.observeDetailValue(org.eclipse.core.databinding.observable.value.IObservableValue,java.lang.Class,java.lang.String,java.lang.Class)",
+				new LocalModelCreator(0, 2, 1, DETAIL_VALUE_CREATOR));
+		METHOD_CREATORS.put(
+				"org.eclipse.core.databinding.beans.BeansObservables.observeDetailValue(org.eclipse.core.databinding.observable.Realm,org.eclipse.core.databinding.observable.value.IObservableValue,java.lang.Class,java.lang.String,java.lang.Class)",
+				new LocalModelCreator(1, 3, 2, DETAIL_VALUE_CREATOR));
+		//
+		METHOD_CREATORS.put(
+				"org.eclipse.core.databinding.beans.BeansObservables.observeDetailList(org.eclipse.core.databinding.observable.value.IObservableValue,java.lang.String,java.lang.Class)",
+				new LocalModelCreator(0, DETAIL_LIST_CREATOR));
+		METHOD_CREATORS.put(
+				"org.eclipse.core.databinding.beans.PojoObservables.observeDetailList(org.eclipse.core.databinding.observable.value.IObservableValue,java.lang.String,java.lang.Class)",
+				new LocalModelCreator(0, true, DETAIL_LIST_CREATOR));
+		METHOD_CREATORS.put(
+				"org.eclipse.core.databinding.beans.BeansObservables.observeDetailList(org.eclipse.core.databinding.observable.Realm,org.eclipse.core.databinding.observable.value.IObservableValue,java.lang.String,java.lang.Class)",
+				new LocalModelCreator(1, DETAIL_LIST_CREATOR));
+		METHOD_CREATORS.put(
+				"org.eclipse.core.databinding.beans.PojoObservables.observeDetailList(org.eclipse.core.databinding.observable.Realm,org.eclipse.core.databinding.observable.value.IObservableValue,java.lang.String,java.lang.Class)",
+				new LocalModelCreator(1, true, DETAIL_LIST_CREATOR));
+		//
+		METHOD_CREATORS.put(
+				"org.eclipse.core.databinding.beans.BeansObservables.observeDetailSet(org.eclipse.core.databinding.observable.value.IObservableValue,java.lang.String,java.lang.Class)",
+				new LocalModelCreator(0, DETAIL_SET_CREATOR));
+		METHOD_CREATORS.put(
+				"org.eclipse.core.databinding.beans.PojoObservables.observeDetailSet(org.eclipse.core.databinding.observable.value.IObservableValue,java.lang.String,java.lang.Class)",
+				new LocalModelCreator(0, true, DETAIL_SET_CREATOR));
+		METHOD_CREATORS.put(
+				"org.eclipse.core.databinding.beans.BeansObservables.observeDetailSet(org.eclipse.core.databinding.observable.Realm,org.eclipse.core.databinding.observable.value.IObservableValue,java.lang.String,java.lang.Class)",
+				new LocalModelCreator(1, DETAIL_SET_CREATOR));
+		METHOD_CREATORS.put(
+				"org.eclipse.core.databinding.beans.PojoObservables.observeDetailSet(org.eclipse.core.databinding.observable.Realm,org.eclipse.core.databinding.observable.value.IObservableValue,java.lang.String,java.lang.Class)",
+				new LocalModelCreator(1, true, DETAIL_SET_CREATOR));
+		//
+		methodCreator(
+				new LocalModelCreator(MAPS_CREATOR),
+				"org.eclipse.core.databinding.beans.BeansObservables.observeMaps(org.eclipse.core.databinding.observable.set.IObservableSet,java.lang.Class,java.lang.String[])",
+				"org.eclipse.core.databinding.beans.PojoObservables.observeMaps(org.eclipse.core.databinding.observable.set.IObservableSet,java.lang.Class,java.lang.String[])");
+		methodCreator(
+				new LocalModelCreator(MAP_CREATOR),
+				"org.eclipse.core.databinding.beans.BeansObservables.observeMap(org.eclipse.core.databinding.observable.set.IObservableSet,java.lang.Class,java.lang.String)",
+				"org.eclipse.core.databinding.beans.PojoObservables.observeMap(org.eclipse.core.databinding.observable.set.IObservableSet,java.lang.Class,java.lang.String)");
+		//
+		METHOD_CREATORS.put(
+				"org.eclipse.jface.databinding.viewers.ViewersObservables.observeSingleSelection(org.eclipse.jface.viewers.ISelectionProvider)",
+				new LocalModelCreator(SINGLE_SELECTION_CREATOR));
+		//
+		METHOD_CREATORS.put(
+				"org.eclipse.jface.databinding.viewers.ViewersObservables.observeMultiSelection(org.eclipse.jface.viewers.ISelectionProvider)",
+				new LocalModelCreator(MULTI_SELECTION_CREATOR));
+		//
+		METHOD_CREATORS.put(
+				"org.eclipse.jface.databinding.viewers.ViewersObservables.observeCheckedElements(org.eclipse.jface.viewers.ICheckable,java.lang.Object)",
+				new LocalModelCreator(CHECKED_ELEMENTS_CREATOR));
+		//
+		METHOD_CREATORS.put(
+				"org.eclipse.core.databinding.beans.BeansObservables.listFactory(java.lang.String,java.lang.Class)",
+				new LocalModelCreator(LIST_FACTORY_CREATOR));
+		METHOD_CREATORS.put(
+				"org.eclipse.core.databinding.beans.BeansObservables.listFactory(org.eclipse.core.databinding.observable.Realm,java.lang.String,java.lang.Class)",
+				new LocalModelCreator(1, LIST_FACTORY_CREATOR));
+		METHOD_CREATORS.put(
+				"org.eclipse.core.databinding.beans.PojoObservables.listFactory(java.lang.String,java.lang.Class)",
+				new LocalModelCreator(true, LIST_FACTORY_CREATOR));
+		METHOD_CREATORS.put(
+				"org.eclipse.core.databinding.beans.PojoObservables.listFactory(org.eclipse.core.databinding.observable.Realm,java.lang.String,java.lang.Class)",
+				new LocalModelCreator(1, true, LIST_FACTORY_CREATOR));
+		//
+		METHOD_CREATORS.put(
+				"org.eclipse.core.databinding.beans.BeansObservables.setFactory(java.lang.String,java.lang.Class)",
+				new LocalModelCreator(SET_FACTORY_CREATOR));
+		METHOD_CREATORS.put(
+				"org.eclipse.core.databinding.beans.BeansObservables.setFactory(org.eclipse.core.databinding.observable.Realm,java.lang.String,java.lang.Class)",
+				new LocalModelCreator(1, SET_FACTORY_CREATOR));
+		METHOD_CREATORS.put(
+				"org.eclipse.core.databinding.beans.PojoObservables.setFactory(java.lang.String,java.lang.Class)",
+				new LocalModelCreator(true, SET_FACTORY_CREATOR));
+		METHOD_CREATORS.put(
+				"org.eclipse.core.databinding.beans.PojoObservables.setFactory(org.eclipse.core.databinding.observable.Realm,java.lang.String,java.lang.Class)",
+				new LocalModelCreator(1, true, SET_FACTORY_CREATOR));
+		//
+		CONSTRUCTOR_CREATORS.put(
+				"org.eclipse.core.databinding.observable.list.WritableList.<init>(java.util.List,java.lang.Object)",
+				new LocalModelCreator(0, WRITABLE_LIST_CREATOR));
+		CONSTRUCTOR_CREATORS.put(
+				"org.eclipse.core.databinding.observable.list.WritableList.<init>(org.eclipse.core.databinding.observable.Realm,java.util.List,java.lang.Object)",
+				new LocalModelCreator(1, WRITABLE_LIST_CREATOR));
+		//
+		CONSTRUCTOR_CREATORS.put(
+				"org.eclipse.core.databinding.observable.set.WritableSet.<init>(java.util.Collection,java.lang.Object)",
+				new LocalModelCreator(0, WRITABLE_SET_CREATOR));
+		CONSTRUCTOR_CREATORS.put(
+				"org.eclipse.core.databinding.observable.set.WritableSet.<init>(org.eclipse.core.databinding.observable.Realm,java.util.Collection,java.lang.Object)",
+				new LocalModelCreator(1, WRITABLE_SET_CREATOR));
+		//
+		METHOD_CREATORS.put(
+				"org.eclipse.core.databinding.property.Properties.selfList(java.lang.Object)",
+				new LocalModelCreator(SELF_LIST_CREATOR));
+		METHOD_CREATORS.put(
+				"org.eclipse.core.databinding.property.Properties.selfSet(java.lang.Object)",
+				new LocalModelCreator(SELF_SET_CREATOR));
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/IMasterDetailProvider.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/IMasterDetailProvider.java
index dbd152e1c..ef902212a 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/IMasterDetailProvider.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/IMasterDetailProvider.java
@@ -23,8 +23,8 @@
  * @coverage bindings.rcp.model.beans
  */
 public interface IMasterDetailProvider {
-  /**
-   * @return the master {@link ObservableInfo}.
-   */
-  ObservableInfo getMasterObservable() throws Exception;
+	/**
+	 * @return the master {@link ObservableInfo}.
+	 */
+	ObservableInfo getMasterObservable() throws Exception;
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/IModelCreator.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/IModelCreator.java
index a98a6f062..c79183d7f 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/IModelCreator.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/IModelCreator.java
@@ -24,13 +24,13 @@
  * @coverage bindings.rcp.model.beans
  */
 public interface IModelCreator<T> {
-  /**
-   * @return {@link AstObjectInfo} for AST <code>MethodInvocation</code> or
-   *         <code>ClassInstanceCreation</code> with {@link Expression} arument's.
-   */
-  AstObjectInfo create(T container,
-      AstEditor editor,
-      Expression[] arguments,
-      IModelResolver resolver,
-      ModelCreator<T> modelCreator) throws Exception;
+	/**
+	 * @return {@link AstObjectInfo} for AST <code>MethodInvocation</code> or
+	 *         <code>ClassInstanceCreation</code> with {@link Expression} arument's.
+	 */
+	AstObjectInfo create(T container,
+			AstEditor editor,
+			Expression[] arguments,
+			IModelResolver resolver,
+			ModelCreator<T> modelCreator) throws Exception;
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/LocalModelCreator.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/LocalModelCreator.java
index bfba768fb..76d6145a0 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/LocalModelCreator.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/LocalModelCreator.java
@@ -15,54 +15,54 @@
  * @coverage bindings.rcp.model.beans
  */
 final class LocalModelCreator extends ModelCreator<BeansObserveTypeContainer> {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public LocalModelCreator(ILocalModelCreator creator) {
-    super(creator);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public LocalModelCreator(ILocalModelCreator creator) {
+		super(creator);
+	}
 
-  public LocalModelCreator(int startIndex, ILocalModelCreator creator) {
-    super(startIndex, creator);
-  }
+	public LocalModelCreator(int startIndex, ILocalModelCreator creator) {
+		super(startIndex, creator);
+	}
 
-  public LocalModelCreator(int startIndex0, int startIndex1, ILocalModelCreator creator) {
-    super(startIndex0, startIndex1, creator);
-  }
+	public LocalModelCreator(int startIndex0, int startIndex1, ILocalModelCreator creator) {
+		super(startIndex0, startIndex1, creator);
+	}
 
-  public LocalModelCreator(int startIndex0,
-      int startIndex1,
-      int startIndex2,
-      ILocalModelCreator creator) {
-    super(startIndex0, startIndex1, startIndex2, creator);
-  }
+	public LocalModelCreator(int startIndex0,
+			int startIndex1,
+			int startIndex2,
+			ILocalModelCreator creator) {
+		super(startIndex0, startIndex1, startIndex2, creator);
+	}
 
-  public LocalModelCreator(boolean isPojo, ILocalModelCreator creator) {
-    super(creator);
-    this.isPojo = isPojo;
-  }
+	public LocalModelCreator(boolean isPojo, ILocalModelCreator creator) {
+		super(creator);
+		this.isPojo = isPojo;
+	}
 
-  public LocalModelCreator(int startIndex, boolean isPojo, ILocalModelCreator creator) {
-    super(startIndex, creator);
-    this.isPojo = isPojo;
-  }
+	public LocalModelCreator(int startIndex, boolean isPojo, ILocalModelCreator creator) {
+		super(startIndex, creator);
+		this.isPojo = isPojo;
+	}
 
-  public LocalModelCreator(int startIndex0,
-      int startIndex1,
-      boolean isPojo,
-      ILocalModelCreator creator) {
-    super(startIndex0, startIndex1, creator);
-    this.isPojo = isPojo;
-  }
+	public LocalModelCreator(int startIndex0,
+			int startIndex1,
+			boolean isPojo,
+			ILocalModelCreator creator) {
+		super(startIndex0, startIndex1, creator);
+		this.isPojo = isPojo;
+	}
 
-  public LocalModelCreator(int startIndex0,
-      int startIndex1,
-      int startIndex2,
-      boolean isPojo,
-      ILocalModelCreator creator) {
-    super(startIndex0, startIndex1, startIndex2, creator);
-    this.isPojo = isPojo;
-  }
+	public LocalModelCreator(int startIndex0,
+			int startIndex1,
+			int startIndex2,
+			boolean isPojo,
+			ILocalModelCreator creator) {
+		super(startIndex0, startIndex1, startIndex2, creator);
+		this.isPojo = isPojo;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/ModelCreator.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/ModelCreator.java
index 045e28c04..cb64fae92 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/ModelCreator.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/ModelCreator.java
@@ -23,48 +23,48 @@
  * @coverage bindings.rcp.model.beans
  */
 public class ModelCreator<T> {
-  public int startIndex0 = -1;
-  public int startIndex1 = -1;
-  public int startIndex2 = -1;
-  public boolean isPojo;
-  private final IModelCreator<T> m_creator;
+	public int startIndex0 = -1;
+	public int startIndex1 = -1;
+	public int startIndex2 = -1;
+	public boolean isPojo;
+	private final IModelCreator<T> m_creator;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ModelCreator(IModelCreator<T> creator) {
-    m_creator = creator;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ModelCreator(IModelCreator<T> creator) {
+		m_creator = creator;
+	}
 
-  public ModelCreator(int startIndex, IModelCreator<T> creator) {
-    this.startIndex0 = startIndex;
-    m_creator = creator;
-  }
+	public ModelCreator(int startIndex, IModelCreator<T> creator) {
+		this.startIndex0 = startIndex;
+		m_creator = creator;
+	}
 
-  public ModelCreator(int startIndex0, int startIndex1, IModelCreator<T> creator) {
-    this.startIndex0 = startIndex0;
-    this.startIndex1 = startIndex1;
-    m_creator = creator;
-  }
+	public ModelCreator(int startIndex0, int startIndex1, IModelCreator<T> creator) {
+		this.startIndex0 = startIndex0;
+		this.startIndex1 = startIndex1;
+		m_creator = creator;
+	}
 
-  public ModelCreator(int startIndex0, int startIndex1, int startIndex2, IModelCreator<T> creator) {
-    this.startIndex0 = startIndex0;
-    this.startIndex1 = startIndex1;
-    this.startIndex2 = startIndex2;
-    m_creator = creator;
-  }
+	public ModelCreator(int startIndex0, int startIndex1, int startIndex2, IModelCreator<T> creator) {
+		this.startIndex0 = startIndex0;
+		this.startIndex1 = startIndex1;
+		this.startIndex2 = startIndex2;
+		m_creator = creator;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Creation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AstObjectInfo create(T container,
-      AstEditor editor,
-      Expression[] arguments,
-      IModelResolver resolver) throws Exception {
-    return m_creator.create(container, editor, arguments, resolver, this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Creation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AstObjectInfo create(T container,
+			AstEditor editor,
+			Expression[] arguments,
+			IModelResolver resolver) throws Exception {
+		return m_creator.create(container, editor, arguments, resolver, this);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/bindables/BeanBindableInfo.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/bindables/BeanBindableInfo.java
index 7e8d1d72e..1ee7f87cf 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/bindables/BeanBindableInfo.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/bindables/BeanBindableInfo.java
@@ -30,167 +30,167 @@
  * @coverage bindings.rcp.model.beans
  */
 public class BeanBindableInfo extends BindableInfo {
-  private final BeanSupport m_beanSupport;
-  private final IObservePresentation m_presentation;
-  protected List<BeanBindableInfo> m_children = Collections.emptyList();
-  private List<PropertyBindableInfo> m_properties;
-  private final IObserveInfo m_parent;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public BeanBindableInfo(BeanSupport beanSupport,
-      IObserveInfo parent,
-      Class<?> objectType,
-      IReferenceProvider referenceProvider,
-      ObjectInfo javaInfo) throws Exception {
-    this(beanSupport, parent, objectType, referenceProvider, referenceProvider, javaInfo);
-  }
-
-  public BeanBindableInfo(BeanSupport beanSupport,
-      IObserveInfo parent,
-      Class<?> objectType,
-      IReferenceProvider referenceProvider,
-      IReferenceProvider presentationReferenceProvider,
-      ObjectInfo javaInfo) throws Exception {
-    this(beanSupport,
-        parent,
-        objectType,
-        referenceProvider,
-        new BeanBindablePresentation(objectType,
-            presentationReferenceProvider,
-            javaInfo,
-            beanSupport.getBeanImage(objectType, javaInfo)));
-  }
-
-  public BeanBindableInfo(BeanSupport beanSupport,
-      IObserveInfo parent,
-      Class<?> objectType,
-      IReferenceProvider referenceProvider,
-      IObservePresentation presentation) {
-    super(objectType, referenceProvider);
-    m_beanSupport = beanSupport;
-    m_parent = parent;
-    m_presentation = presentation;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // BindableInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public final BeanSupport getBeanSupport() {
-    return m_beanSupport;
-  }
-
-  public final void setProperties(List<PropertyBindableInfo> properties) {
-    m_properties = properties;
-  }
-
-  @Override
-  protected final List<BindableInfo> getChildren() {
-    return CoreUtils.cast(m_children);
-  }
-
-  /**
-   * Access to properties.
-   */
-  public final List<PropertyBindableInfo> getProperties() {
-    // prepare properties
-    if (m_properties == null) {
-      m_properties = m_beanSupport.getProperties(this);
-    }
-    return m_properties;
-  }
-
-  /**
-   * @return {@link PropertyBindableInfo} property that association with given reference or or
-   *         <code>null</code>.
-   */
-  @Override
-  public final PropertyBindableInfo resolvePropertyReference(String reference) throws Exception {
-    if (reference.indexOf('.') == -1 || !reference.startsWith("\"")) {
-      for (PropertyBindableInfo property : getProperties()) {
-        if (reference.equals(property.getReference())) {
-          return property;
-        }
-      }
-    } else {
-      String localReference = StringUtils.removeStart(reference, "\"");
-      localReference = StringUtils.removeEnd(localReference, "\"");
-      return resolvePropertyReference(reference, StringUtils.split(localReference, "."), 0);
-    }
-    return null;
-  }
-
-  protected final PropertyBindableInfo resolvePropertyReference(String reference,
-      String[] references,
-      int index) throws Exception {
-    if (index == references.length - 1) {
-      for (PropertyBindableInfo property : getProperties()) {
-        if (reference.equals(property.getReference())) {
-          return property;
-        }
-      }
-    } else {
-      String localReference = references[index];
-      //
-      for (PropertyBindableInfo property : getProperties()) {
-        String propertyReference = StringUtils.removeStart(property.getReference(), "\"");
-        propertyReference = StringUtils.removeEnd(propertyReference, "\"");
-        int pointIndex = propertyReference.lastIndexOf('.');
-        //
-        if (pointIndex != -1) {
-          propertyReference = propertyReference.substring(pointIndex + 1);
-        }
-        if (localReference.equals(propertyReference)) {
-          return property.resolvePropertyReference(reference, references, index + 1);
-        }
-      }
-    }
-    return null;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Hierarchy
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final IObserveInfo getParent() {
-    return m_parent;
-  }
-
-  @Override
-  public List<IObserveInfo> getChildren(ChildrenContext context) {
-    if (context == ChildrenContext.ChildrenForMasterTable) {
-      return CoreUtils.cast(m_children);
-    }
-    if (context == ChildrenContext.ChildrenForPropertiesTable) {
-      return CoreUtils.cast(getProperties());
-    }
-    return Collections.emptyList();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final IObservePresentation getPresentation() {
-    return m_presentation;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ObserveType
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final ObserveType getType() {
-    return ObserveType.BEANS;
-  }
+	private final BeanSupport m_beanSupport;
+	private final IObservePresentation m_presentation;
+	protected List<BeanBindableInfo> m_children = Collections.emptyList();
+	private List<PropertyBindableInfo> m_properties;
+	private final IObserveInfo m_parent;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public BeanBindableInfo(BeanSupport beanSupport,
+			IObserveInfo parent,
+			Class<?> objectType,
+			IReferenceProvider referenceProvider,
+			ObjectInfo javaInfo) throws Exception {
+		this(beanSupport, parent, objectType, referenceProvider, referenceProvider, javaInfo);
+	}
+
+	public BeanBindableInfo(BeanSupport beanSupport,
+			IObserveInfo parent,
+			Class<?> objectType,
+			IReferenceProvider referenceProvider,
+			IReferenceProvider presentationReferenceProvider,
+			ObjectInfo javaInfo) throws Exception {
+		this(beanSupport,
+				parent,
+				objectType,
+				referenceProvider,
+				new BeanBindablePresentation(objectType,
+						presentationReferenceProvider,
+						javaInfo,
+						beanSupport.getBeanImage(objectType, javaInfo)));
+	}
+
+	public BeanBindableInfo(BeanSupport beanSupport,
+			IObserveInfo parent,
+			Class<?> objectType,
+			IReferenceProvider referenceProvider,
+			IObservePresentation presentation) {
+		super(objectType, referenceProvider);
+		m_beanSupport = beanSupport;
+		m_parent = parent;
+		m_presentation = presentation;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// BindableInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public final BeanSupport getBeanSupport() {
+		return m_beanSupport;
+	}
+
+	public final void setProperties(List<PropertyBindableInfo> properties) {
+		m_properties = properties;
+	}
+
+	@Override
+	protected final List<BindableInfo> getChildren() {
+		return CoreUtils.cast(m_children);
+	}
+
+	/**
+	 * Access to properties.
+	 */
+	public final List<PropertyBindableInfo> getProperties() {
+		// prepare properties
+		if (m_properties == null) {
+			m_properties = m_beanSupport.getProperties(this);
+		}
+		return m_properties;
+	}
+
+	/**
+	 * @return {@link PropertyBindableInfo} property that association with given reference or or
+	 *         <code>null</code>.
+	 */
+	@Override
+	public final PropertyBindableInfo resolvePropertyReference(String reference) throws Exception {
+		if (reference.indexOf('.') == -1 || !reference.startsWith("\"")) {
+			for (PropertyBindableInfo property : getProperties()) {
+				if (reference.equals(property.getReference())) {
+					return property;
+				}
+			}
+		} else {
+			String localReference = StringUtils.removeStart(reference, "\"");
+			localReference = StringUtils.removeEnd(localReference, "\"");
+			return resolvePropertyReference(reference, StringUtils.split(localReference, "."), 0);
+		}
+		return null;
+	}
+
+	protected final PropertyBindableInfo resolvePropertyReference(String reference,
+			String[] references,
+			int index) throws Exception {
+		if (index == references.length - 1) {
+			for (PropertyBindableInfo property : getProperties()) {
+				if (reference.equals(property.getReference())) {
+					return property;
+				}
+			}
+		} else {
+			String localReference = references[index];
+			//
+			for (PropertyBindableInfo property : getProperties()) {
+				String propertyReference = StringUtils.removeStart(property.getReference(), "\"");
+				propertyReference = StringUtils.removeEnd(propertyReference, "\"");
+				int pointIndex = propertyReference.lastIndexOf('.');
+				//
+				if (pointIndex != -1) {
+					propertyReference = propertyReference.substring(pointIndex + 1);
+				}
+				if (localReference.equals(propertyReference)) {
+					return property.resolvePropertyReference(reference, references, index + 1);
+				}
+			}
+		}
+		return null;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Hierarchy
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final IObserveInfo getParent() {
+		return m_parent;
+	}
+
+	@Override
+	public List<IObserveInfo> getChildren(ChildrenContext context) {
+		if (context == ChildrenContext.ChildrenForMasterTable) {
+			return CoreUtils.cast(m_children);
+		}
+		if (context == ChildrenContext.ChildrenForPropertiesTable) {
+			return CoreUtils.cast(getProperties());
+		}
+		return Collections.emptyList();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final IObservePresentation getPresentation() {
+		return m_presentation;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ObserveType
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final ObserveType getType() {
+		return ObserveType.BEANS;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/bindables/BeanBindablePresentation.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/bindables/BeanBindablePresentation.java
index d729f08c8..726560870 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/bindables/BeanBindablePresentation.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/bindables/BeanBindablePresentation.java
@@ -26,72 +26,72 @@
  * @coverage bindings.rcp.model.beans
  */
 public final class BeanBindablePresentation extends ObservePresentation {
-  private Class<?> m_objectType;
-  private final IReferenceProvider m_presentation;
-  private ObjectInfo m_javaInfo;
-  private Image m_beanImage;
+	private Class<?> m_objectType;
+	private final IReferenceProvider m_presentation;
+	private ObjectInfo m_javaInfo;
+	private Image m_beanImage;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public BeanBindablePresentation(Class<?> objectType,
-      IReferenceProvider presentation,
-      ObjectInfo javaInfo,
-      Image beanImage) {
-    m_objectType = objectType;
-    m_presentation = presentation;
-    m_javaInfo = javaInfo;
-    m_beanImage = beanImage;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public BeanBindablePresentation(Class<?> objectType,
+			IReferenceProvider presentation,
+			ObjectInfo javaInfo,
+			Image beanImage) {
+		m_objectType = objectType;
+		m_presentation = presentation;
+		m_javaInfo = javaInfo;
+		m_beanImage = beanImage;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public JavaInfo getJavaInfo() {
-    return (JavaInfo) m_javaInfo;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public JavaInfo getJavaInfo() {
+		return (JavaInfo) m_javaInfo;
+	}
 
-  public void setJavaInfo(JavaInfo javaInfo) {
-    m_javaInfo = javaInfo;
-  }
+	public void setJavaInfo(JavaInfo javaInfo) {
+		m_javaInfo = javaInfo;
+	}
 
-  public void setObjectType(Class<?> objectType) {
-    m_objectType = objectType;
-  }
+	public void setObjectType(Class<?> objectType) {
+		m_objectType = objectType;
+	}
 
-  public void setBeanImage(Image beanImage) {
-    m_beanImage = beanImage;
-  }
+	public void setBeanImage(Image beanImage) {
+		m_beanImage = beanImage;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ObservePresentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Image getInternalImage() throws Exception {
-    if (m_beanImage == null && m_javaInfo == null) {
-      return null;
-    }
-    return m_beanImage == null ? m_javaInfo.getPresentation().getIcon() : m_beanImage;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ObservePresentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Image getInternalImage() throws Exception {
+		if (m_beanImage == null && m_javaInfo == null) {
+			return null;
+		}
+		return m_beanImage == null ? m_javaInfo.getPresentation().getIcon() : m_beanImage;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IObservePresentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getText() throws Exception {
-    return m_presentation.getReference() + " - " + ClassUtils.getShortClassName(m_objectType);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IObservePresentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getText() throws Exception {
+		return m_presentation.getReference() + " - " + ClassUtils.getShortClassName(m_objectType);
+	}
 
-  @Override
-  public String getTextForBinding() throws Exception {
-    return m_presentation.getReference();
-  }
+	@Override
+	public String getTextForBinding() throws Exception {
+		return m_presentation.getReference();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/bindables/BeanPropertyBindableInfo.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/bindables/BeanPropertyBindableInfo.java
index e6e3faaf2..de10ec212 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/bindables/BeanPropertyBindableInfo.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/bindables/BeanPropertyBindableInfo.java
@@ -39,108 +39,108 @@
  * @coverage bindings.rcp.model.beans
  */
 public class BeanPropertyBindableInfo extends PropertyBindableInfo {
-  private final IObserveDecorator m_decorator;
+	private final IObserveDecorator m_decorator;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public BeanPropertyBindableInfo(BeanSupport beanSupport,
-      IObserveInfo parent,
-      String text,
-      Class<?> objectType,
-      String reference) {
-    super(beanSupport, parent, text, objectType, reference);
-    m_decorator = BeanSupport.getDecorator(objectType);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public BeanPropertyBindableInfo(BeanSupport beanSupport,
+			IObserveInfo parent,
+			String text,
+			Class<?> objectType,
+			String reference) {
+		super(beanSupport, parent, text, objectType, reference);
+		m_decorator = BeanSupport.getDecorator(objectType);
+	}
 
-  public BeanPropertyBindableInfo(BeanSupport beanSupport,
-      IObserveInfo parent,
-      Class<?> objectType,
-      String reference,
-      IObservePresentation presentation) {
-    super(beanSupport, parent, objectType, new StringReferenceProvider(reference), presentation);
-    m_decorator = BeanSupport.getDecorator(objectType);
-  }
+	public BeanPropertyBindableInfo(BeanSupport beanSupport,
+			IObserveInfo parent,
+			Class<?> objectType,
+			String reference,
+			IObservePresentation presentation) {
+		super(beanSupport, parent, objectType, new StringReferenceProvider(reference), presentation);
+		m_decorator = BeanSupport.getDecorator(objectType);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Creation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final IObservableFactory m_observableFactory = new IObservableFactory() {
-    private Type m_type;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Creation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final IObservableFactory m_observableFactory = new IObservableFactory() {
+		private Type m_type;
 
-    @Override
-    public Type getType() throws Exception {
-      if (m_type == null) {
-        // calculate type
-        if (List.class.isAssignableFrom(getObjectType())) {
-          m_type = Type.List;
-        } else if (Set.class.isAssignableFrom(getObjectType())) {
-          m_type = Type.Set;
-        } else {
-          m_type = Type.Any;
-        }
-      }
-      return m_type;
-    }
+		@Override
+		public Type getType() throws Exception {
+			if (m_type == null) {
+				// calculate type
+				if (List.class.isAssignableFrom(getObjectType())) {
+					m_type = Type.List;
+				} else if (Set.class.isAssignableFrom(getObjectType())) {
+					m_type = Type.Set;
+				} else {
+					m_type = Type.Any;
+				}
+			}
+			return m_type;
+		}
 
-    @Override
-    public ObservableInfo createObservable(BindableInfo object,
-        BindableInfo property,
-        Type type,
-        boolean version_1_3) throws Exception {
-      Assert.isNotNull(type);
-      Assert.isTrue(property == BeanPropertyBindableInfo.this);
-      BeanBindableInfo bindableObject = (BeanBindableInfo) object;
-      // create observable
-      BeanObservableInfo observable = null;
-      switch (type) {
-        case OnlyValue :
-          observable = new ValueBeanObservableInfo(bindableObject, BeanPropertyBindableInfo.this);
-          if (version_1_3) {
-            observable.setCodeSupport(new ValuePropertyCodeSupport());
-          } else {
-            observable.setCodeSupport(new BeanObservableValueCodeSupport());
-          }
-          break;
-        case OnlyList :
-          observable = new ListBeanObservableInfo(bindableObject, BeanPropertyBindableInfo.this);
-          if (version_1_3) {
-            observable.setCodeSupport(new ListPropertyCodeSupport());
-          } else {
-            observable.setCodeSupport(new BeanObservableListCodeSupport());
-          }
-          break;
-        case OnlySet :
-          observable = new SetBeanObservableInfo(bindableObject, BeanPropertyBindableInfo.this);
-          if (version_1_3) {
-            observable.setCodeSupport(new SetPropertyCodeSupport());
-          } else {
-            observable.setCodeSupport(new BeanObservableSetCodeSupport());
-          }
-          break;
-      }
-      //
-      Assert.isNotNull(observable);
-      return observable;
-    }
-  };
+		@Override
+		public ObservableInfo createObservable(BindableInfo object,
+				BindableInfo property,
+				Type type,
+				boolean version_1_3) throws Exception {
+			Assert.isNotNull(type);
+			Assert.isTrue(property == BeanPropertyBindableInfo.this);
+			BeanBindableInfo bindableObject = (BeanBindableInfo) object;
+			// create observable
+			BeanObservableInfo observable = null;
+			switch (type) {
+			case OnlyValue :
+				observable = new ValueBeanObservableInfo(bindableObject, BeanPropertyBindableInfo.this);
+				if (version_1_3) {
+					observable.setCodeSupport(new ValuePropertyCodeSupport());
+				} else {
+					observable.setCodeSupport(new BeanObservableValueCodeSupport());
+				}
+				break;
+			case OnlyList :
+				observable = new ListBeanObservableInfo(bindableObject, BeanPropertyBindableInfo.this);
+				if (version_1_3) {
+					observable.setCodeSupport(new ListPropertyCodeSupport());
+				} else {
+					observable.setCodeSupport(new BeanObservableListCodeSupport());
+				}
+				break;
+			case OnlySet :
+				observable = new SetBeanObservableInfo(bindableObject, BeanPropertyBindableInfo.this);
+				if (version_1_3) {
+					observable.setCodeSupport(new SetPropertyCodeSupport());
+				} else {
+					observable.setCodeSupport(new BeanObservableSetCodeSupport());
+				}
+				break;
+			}
+			//
+			Assert.isNotNull(observable);
+			return observable;
+		}
+	};
 
-  @Override
-  public final IObservableFactory getObservableFactory() throws Exception {
-    return m_observableFactory;
-  }
+	@Override
+	public final IObservableFactory getObservableFactory() throws Exception {
+		return m_observableFactory;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final IObserveDecorator getDecorator() {
-    return m_decorator;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final IObserveDecorator getDecorator() {
+		return m_decorator;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/bindables/BeanPropertyDescriptorBindableInfo.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/bindables/BeanPropertyDescriptorBindableInfo.java
index 0eccc7e94..1014a5384 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/bindables/BeanPropertyDescriptorBindableInfo.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/bindables/BeanPropertyDescriptorBindableInfo.java
@@ -26,60 +26,60 @@
  * @coverage bindings.rcp.model.beans
  */
 public final class BeanPropertyDescriptorBindableInfo extends BeanPropertyBindableInfo {
-  private final PropertyDescriptor m_descriptor;
+	private final PropertyDescriptor m_descriptor;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public BeanPropertyDescriptorBindableInfo(BeanSupport beanSupport,
-      IObserveInfo parent,
-      PropertyDescriptor descriptor) throws Exception {
-    super(beanSupport, parent, descriptor.getPropertyType(), createReference(
-        parent,
-        descriptor.getName()), createPresentation(
-        parent,
-        descriptor.getName(),
-        descriptor.getPropertyType()));
-    m_descriptor = descriptor;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public BeanPropertyDescriptorBindableInfo(BeanSupport beanSupport,
+			IObserveInfo parent,
+			PropertyDescriptor descriptor) throws Exception {
+		super(beanSupport, parent, descriptor.getPropertyType(), createReference(
+				parent,
+				descriptor.getName()), createPresentation(
+						parent,
+						descriptor.getName(),
+						descriptor.getPropertyType()));
+		m_descriptor = descriptor;
+	}
 
-  private static String createReference(IObserveInfo parent, String reference) throws Exception {
-    if (parent instanceof BeanPropertyDescriptorBindableInfo) {
-      BeanPropertyDescriptorBindableInfo bindableParent =
-          (BeanPropertyDescriptorBindableInfo) parent;
-      return StringUtils.removeEnd(bindableParent.getReference(), "\"") + "." + reference + "\"";
-    }
-    return "\"" + reference + "\"";
-  }
+	private static String createReference(IObserveInfo parent, String reference) throws Exception {
+		if (parent instanceof BeanPropertyDescriptorBindableInfo) {
+			BeanPropertyDescriptorBindableInfo bindableParent =
+					(BeanPropertyDescriptorBindableInfo) parent;
+			return StringUtils.removeEnd(bindableParent.getReference(), "\"") + "." + reference + "\"";
+		}
+		return "\"" + reference + "\"";
+	}
 
-  private static IObservePresentation createPresentation(IObserveInfo parent,
-      String reference,
-      Class<?> objectType) throws Exception {
-    if (parent instanceof BeanPropertyDescriptorBindableInfo) {
-      BeanPropertyDescriptorBindableInfo bindableParent =
-          (BeanPropertyDescriptorBindableInfo) parent;
-      String parentReference = StringUtils.removeStart(bindableParent.getReference(), "\"");
-      parentReference = StringUtils.removeEnd(parentReference, "\"");
-      //
-      final String bindingReference = parentReference + "." + reference;
-      return new SimpleObservePresentation(reference,
-          bindingReference,
-          TypeImageProvider.getImage(objectType));
-    }
-    return new SimpleObservePresentation(reference, TypeImageProvider.getImage(objectType));
-  }
+	private static IObservePresentation createPresentation(IObserveInfo parent,
+			String reference,
+			Class<?> objectType) throws Exception {
+		if (parent instanceof BeanPropertyDescriptorBindableInfo) {
+			BeanPropertyDescriptorBindableInfo bindableParent =
+					(BeanPropertyDescriptorBindableInfo) parent;
+			String parentReference = StringUtils.removeStart(bindableParent.getReference(), "\"");
+			parentReference = StringUtils.removeEnd(parentReference, "\"");
+			//
+			final String bindingReference = parentReference + "." + reference;
+			return new SimpleObservePresentation(reference,
+					bindingReference,
+					TypeImageProvider.getImage(objectType));
+		}
+		return new SimpleObservePresentation(reference, TypeImageProvider.getImage(objectType));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Access to property {@link PropertyDescriptor}.
-   */
-  public PropertyDescriptor getDescriptor() {
-    return m_descriptor;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Access to property {@link PropertyDescriptor}.
+	 */
+	public PropertyDescriptor getDescriptor() {
+		return m_descriptor;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/bindables/BeanSupport.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/bindables/BeanSupport.java
index 34a1c4283..498d7e276 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/bindables/BeanSupport.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/bindables/BeanSupport.java
@@ -58,406 +58,406 @@
  * @coverage bindings.rcp.model.beans
  */
 public final class BeanSupport {
-  private final Map<Class<?>, Image> m_classToImage = Maps.newHashMap();
-  private final IModelResolver m_resolver;
-  private final Class<?> m_IObservable;
-  private final Class<?> m_IObservableValue;
-  private final Class<?> m_IObservableList;
-  private final Class<?> m_IObservableSet;
-  private final Class<?> m_ISelectionProvider;
-  private final Class<?> m_ICheckable;
-  private final Class<?> m_Viewer;
-  private DatabindingsProvider m_provider;
+	private final Map<Class<?>, Image> m_classToImage = Maps.newHashMap();
+	private final IModelResolver m_resolver;
+	private final Class<?> m_IObservable;
+	private final Class<?> m_IObservableValue;
+	private final Class<?> m_IObservableList;
+	private final Class<?> m_IObservableSet;
+	private final Class<?> m_ISelectionProvider;
+	private final Class<?> m_ICheckable;
+	private final Class<?> m_Viewer;
+	private DatabindingsProvider m_provider;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public BeanSupport(ClassLoader classLoader, IModelResolver resolver) {
-    m_resolver = resolver;
-    m_IObservable =
-        CoreUtils.loadClass(classLoader, "org.eclipse.core.databinding.observable.IObservable");
-    m_IObservableValue =
-        CoreUtils.loadClass(
-            classLoader,
-            "org.eclipse.core.databinding.observable.value.IObservableValue");
-    m_IObservableList =
-        CoreUtils.loadClass(
-            classLoader,
-            "org.eclipse.core.databinding.observable.list.IObservableList");
-    m_IObservableSet =
-        CoreUtils.loadClass(
-            classLoader,
-            "org.eclipse.core.databinding.observable.set.IObservableSet");
-    m_ISelectionProvider =
-        CoreUtils.loadClass(classLoader, "org.eclipse.jface.viewers.ISelectionProvider");
-    m_ICheckable = CoreUtils.loadClass(classLoader, "org.eclipse.jface.viewers.ICheckable");
-    m_Viewer = CoreUtils.loadClass(classLoader, "org.eclipse.jface.viewers.Viewer");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public BeanSupport(ClassLoader classLoader, IModelResolver resolver) {
+		m_resolver = resolver;
+		m_IObservable =
+				CoreUtils.loadClass(classLoader, "org.eclipse.core.databinding.observable.IObservable");
+		m_IObservableValue =
+				CoreUtils.loadClass(
+						classLoader,
+						"org.eclipse.core.databinding.observable.value.IObservableValue");
+		m_IObservableList =
+				CoreUtils.loadClass(
+						classLoader,
+						"org.eclipse.core.databinding.observable.list.IObservableList");
+		m_IObservableSet =
+				CoreUtils.loadClass(
+						classLoader,
+						"org.eclipse.core.databinding.observable.set.IObservableSet");
+		m_ISelectionProvider =
+				CoreUtils.loadClass(classLoader, "org.eclipse.jface.viewers.ISelectionProvider");
+		m_ICheckable = CoreUtils.loadClass(classLoader, "org.eclipse.jface.viewers.ICheckable");
+		m_Viewer = CoreUtils.loadClass(classLoader, "org.eclipse.jface.viewers.Viewer");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DatabindingsProvider getProvider() {
-    return m_provider;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DatabindingsProvider getProvider() {
+		return m_provider;
+	}
 
-  public void setProvider(DatabindingsProvider provider) {
-    m_provider = provider;
-  }
+	public void setProvider(DatabindingsProvider provider) {
+		m_provider = provider;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Properties
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return {@link PropertyBindableInfo} properties for given bean {@link Class}.
-   */
-  public List<PropertyBindableInfo> getProperties(BeanBindableInfo beanObjectInfo) {
-    try {
-      boolean topLevel =
-          beanObjectInfo instanceof FieldBeanBindableInfo
-              || beanObjectInfo instanceof MethodBeanBindableInfo
-              || beanObjectInfo instanceof LocalVariableBindableInfo;
-      IObserveInfo parent = topLevel ? null : beanObjectInfo;
-      Class<?> beanClass = beanObjectInfo.getObjectType();
-      // load properties
-      List<PropertyBindableInfo> properties = Lists.newArrayList();
-      boolean version_1_3 =
-          Activator.getStore().getBoolean(IPreferenceConstants.GENERATE_CODE_FOR_VERSION_1_3);
-      // load properties
-      for (PropertyDescriptor descriptor : getPropertyDescriptors(beanClass)) {
-        Class<?> propertyType = descriptor.getPropertyType();
-        //
-        if (topLevel
-            && propertyType != null
-            && CoreUtils.isAssignableFrom(m_IObservable, propertyType)
-            && isGetter(descriptor)) {
-          // property with observable (direct) type
-          //
-          // calculate type
-          IObservableFactory.Type directType = getDirectType(propertyType);
-          //
-          if (directType == null) {
-            // unknown observable type
-            properties.add(new DirectPropertyBindableInfo(this, parent, descriptor));
-          } else {
-            // create direct factory
-            IObservableFactory observableFactory = DirectObservableFactory.forProperty(directType);
-            // create direct property
-            DirectPropertyBindableInfo property =
-                new DirectPropertyBindableInfo(this, parent, descriptor, observableFactory);
-            properties.add(property);
-            // add direct observable
-            if (m_resolver != null) {
-              ObservableInfo directObservable =
-                  observableFactory.createObservable(
-                      beanObjectInfo,
-                      property,
-                      directType,
-                      version_1_3);
-              m_resolver.addModelSupport(new DirectModelSupport(directObservable));
-            }
-          }
-        } else {
-          // simple property
-          properties.add(new BeanPropertyDescriptorBindableInfo(this, parent, descriptor));
-        }
-      }
-      // sort properties
-      Collections.sort(properties, ObserveComparator.INSTANCE);
-      //
-      // special cases for bean class
-      //
-      if (topLevel) {
-        if (CoreUtils.isAssignableFrom(m_IObservable, beanClass)) {
-          // bean class is observable
-          //
-          // calculate type
-          IObservableFactory.Type directType = getDirectType(beanClass);
-          //
-          if (directType == null) {
-            // unknown observable type
-            properties.clear();
-          } else {
-            // create direct factory
-            IObservableFactory observableFactory = DirectObservableFactory.forBean(directType);
-            // create fake direct property
-            DirectPropertyBindableInfo property =
-                new DirectPropertyBindableInfo(this,
-                    parent,
-                    getDirectName(directType),
-                    beanClass,
-                    StringReferenceProvider.EMPTY,
-                    observableFactory);
-            //
-            properties.add(0, property);
-            // add direct observable
-            if (m_resolver != null) {
-              ObservableInfo directObservable =
-                  observableFactory.createObservable(
-                      beanObjectInfo,
-                      property,
-                      directType,
-                      version_1_3);
-              m_resolver.addModelSupport(new DirectFieldModelSupport(directObservable));
-            }
-            //
-            if (directType == IObservableFactory.Type.OnlyValue) {
-              // add fake direct detail property
-              properties.add(1, new DirectPropertyBindableInfo(this,
-                  parent,
-                  DirectObservableInfo.DETAIL_PROPERTY_NAME,
-                  beanClass,
-                  StringReferenceProvider.EMPTY,
-                  DirectObservableFactory.forDetailBean()));
-            }
-          }
-        } else if (List.class.isAssignableFrom(beanClass)) {
-          // bean class is List
-          properties.add(0, new CollectionPropertyBindableInfo(this,
-              parent,
-              "Collection as WritableList/Properties.selfList()",
-              beanClass,
-              beanObjectInfo.getReferenceProvider()));
-        } else if (Set.class.isAssignableFrom(beanClass)) {
-          // bean class is Set
-          properties.add(0, new CollectionPropertyBindableInfo(this,
-              parent,
-              "Collection as WritableSet/Properties.selfSet()",
-              beanClass,
-              beanObjectInfo.getReferenceProvider()));
-        } else if (!CoreUtils.isAssignableFrom(m_Viewer, beanClass)) {
-          boolean selection = false;
-          if (CoreUtils.isAssignableFrom(m_ISelectionProvider, beanClass)) {
-            selection = true;
-            properties.add(0, new ViewerObservablePropertyBindableInfo(this,
-                parent,
-                "single selection",
-                TypeImageProvider.OBJECT_IMAGE,
-                Object.class,
-                "observeSingleSelection",
-                ViewerObservableFactory.SINGLE_SELECTION,
-                IObserveDecorator.BOLD));
-            properties.add(1, new ViewerObservablePropertyBindableInfo(this,
-                parent,
-                PropertiesSupport.DETAIL_SINGLE_SELECTION_NAME,
-                TypeImageProvider.OBJECT_IMAGE,
-                Object.class,
-                "observeSingleSelection",
-                ViewerObservableFactory.DETAIL_SINGLE_SELECTION,
-                IObserveDecorator.BOLD));
-            properties.add(2, new ViewerObservablePropertyBindableInfo(this,
-                parent,
-                "multi selection",
-                TypeImageProvider.COLLECTION_IMAGE,
-                Object.class,
-                "observeMultiSelection",
-                ViewerObservableFactory.MULTI_SELECTION,
-                IObserveDecorator.BOLD));
-          }
-          if (CoreUtils.isAssignableFrom(m_ICheckable, beanClass)) {
-            properties.add(selection ? 3 : 0, new ViewerObservablePropertyBindableInfo(this,
-                parent,
-                "checked elements",
-                TypeImageProvider.COLLECTION_IMAGE,
-                Object.class,
-                "observeCheckedElements",
-                ViewerObservableFactory.CHECKED_ELEMENTS,
-                IObserveDecorator.BOLD));
-          }
-        }
-      }
-      //
-      return properties;
-    } catch (Throwable e) {
-      DesignerPlugin.log(e);
-      return Collections.emptyList();
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Properties
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return {@link PropertyBindableInfo} properties for given bean {@link Class}.
+	 */
+	public List<PropertyBindableInfo> getProperties(BeanBindableInfo beanObjectInfo) {
+		try {
+			boolean topLevel =
+					beanObjectInfo instanceof FieldBeanBindableInfo
+					|| beanObjectInfo instanceof MethodBeanBindableInfo
+					|| beanObjectInfo instanceof LocalVariableBindableInfo;
+			IObserveInfo parent = topLevel ? null : beanObjectInfo;
+			Class<?> beanClass = beanObjectInfo.getObjectType();
+			// load properties
+			List<PropertyBindableInfo> properties = Lists.newArrayList();
+			boolean version_1_3 =
+					Activator.getStore().getBoolean(IPreferenceConstants.GENERATE_CODE_FOR_VERSION_1_3);
+			// load properties
+			for (PropertyDescriptor descriptor : getPropertyDescriptors(beanClass)) {
+				Class<?> propertyType = descriptor.getPropertyType();
+				//
+				if (topLevel
+						&& propertyType != null
+						&& CoreUtils.isAssignableFrom(m_IObservable, propertyType)
+						&& isGetter(descriptor)) {
+					// property with observable (direct) type
+					//
+					// calculate type
+					IObservableFactory.Type directType = getDirectType(propertyType);
+					//
+					if (directType == null) {
+						// unknown observable type
+						properties.add(new DirectPropertyBindableInfo(this, parent, descriptor));
+					} else {
+						// create direct factory
+						IObservableFactory observableFactory = DirectObservableFactory.forProperty(directType);
+						// create direct property
+						DirectPropertyBindableInfo property =
+								new DirectPropertyBindableInfo(this, parent, descriptor, observableFactory);
+						properties.add(property);
+						// add direct observable
+						if (m_resolver != null) {
+							ObservableInfo directObservable =
+									observableFactory.createObservable(
+											beanObjectInfo,
+											property,
+											directType,
+											version_1_3);
+							m_resolver.addModelSupport(new DirectModelSupport(directObservable));
+						}
+					}
+				} else {
+					// simple property
+					properties.add(new BeanPropertyDescriptorBindableInfo(this, parent, descriptor));
+				}
+			}
+			// sort properties
+			Collections.sort(properties, ObserveComparator.INSTANCE);
+			//
+			// special cases for bean class
+			//
+			if (topLevel) {
+				if (CoreUtils.isAssignableFrom(m_IObservable, beanClass)) {
+					// bean class is observable
+					//
+					// calculate type
+					IObservableFactory.Type directType = getDirectType(beanClass);
+					//
+					if (directType == null) {
+						// unknown observable type
+						properties.clear();
+					} else {
+						// create direct factory
+						IObservableFactory observableFactory = DirectObservableFactory.forBean(directType);
+						// create fake direct property
+						DirectPropertyBindableInfo property =
+								new DirectPropertyBindableInfo(this,
+										parent,
+										getDirectName(directType),
+										beanClass,
+										StringReferenceProvider.EMPTY,
+										observableFactory);
+						//
+						properties.add(0, property);
+						// add direct observable
+						if (m_resolver != null) {
+							ObservableInfo directObservable =
+									observableFactory.createObservable(
+											beanObjectInfo,
+											property,
+											directType,
+											version_1_3);
+							m_resolver.addModelSupport(new DirectFieldModelSupport(directObservable));
+						}
+						//
+						if (directType == IObservableFactory.Type.OnlyValue) {
+							// add fake direct detail property
+							properties.add(1, new DirectPropertyBindableInfo(this,
+									parent,
+									DirectObservableInfo.DETAIL_PROPERTY_NAME,
+									beanClass,
+									StringReferenceProvider.EMPTY,
+									DirectObservableFactory.forDetailBean()));
+						}
+					}
+				} else if (List.class.isAssignableFrom(beanClass)) {
+					// bean class is List
+					properties.add(0, new CollectionPropertyBindableInfo(this,
+							parent,
+							"Collection as WritableList/Properties.selfList()",
+							beanClass,
+							beanObjectInfo.getReferenceProvider()));
+				} else if (Set.class.isAssignableFrom(beanClass)) {
+					// bean class is Set
+					properties.add(0, new CollectionPropertyBindableInfo(this,
+							parent,
+							"Collection as WritableSet/Properties.selfSet()",
+							beanClass,
+							beanObjectInfo.getReferenceProvider()));
+				} else if (!CoreUtils.isAssignableFrom(m_Viewer, beanClass)) {
+					boolean selection = false;
+					if (CoreUtils.isAssignableFrom(m_ISelectionProvider, beanClass)) {
+						selection = true;
+						properties.add(0, new ViewerObservablePropertyBindableInfo(this,
+								parent,
+								"single selection",
+								TypeImageProvider.OBJECT_IMAGE,
+								Object.class,
+								"observeSingleSelection",
+								ViewerObservableFactory.SINGLE_SELECTION,
+								IObserveDecorator.BOLD));
+						properties.add(1, new ViewerObservablePropertyBindableInfo(this,
+								parent,
+								PropertiesSupport.DETAIL_SINGLE_SELECTION_NAME,
+								TypeImageProvider.OBJECT_IMAGE,
+								Object.class,
+								"observeSingleSelection",
+								ViewerObservableFactory.DETAIL_SINGLE_SELECTION,
+								IObserveDecorator.BOLD));
+						properties.add(2, new ViewerObservablePropertyBindableInfo(this,
+								parent,
+								"multi selection",
+								TypeImageProvider.COLLECTION_IMAGE,
+								Object.class,
+								"observeMultiSelection",
+								ViewerObservableFactory.MULTI_SELECTION,
+								IObserveDecorator.BOLD));
+					}
+					if (CoreUtils.isAssignableFrom(m_ICheckable, beanClass)) {
+						properties.add(selection ? 3 : 0, new ViewerObservablePropertyBindableInfo(this,
+								parent,
+								"checked elements",
+								TypeImageProvider.COLLECTION_IMAGE,
+								Object.class,
+								"observeCheckedElements",
+								ViewerObservableFactory.CHECKED_ELEMENTS,
+								IObserveDecorator.BOLD));
+					}
+				}
+			}
+			//
+			return properties;
+		} catch (Throwable e) {
+			DesignerPlugin.log(e);
+			return Collections.emptyList();
+		}
+	}
 
-  private IObservableFactory.Type getDirectType(Class<?> beanClass) {
-    if (CoreUtils.isAssignableFrom(m_IObservableValue, beanClass)) {
-      return IObservableFactory.Type.OnlyValue;
-    }
-    if (CoreUtils.isAssignableFrom(m_IObservableList, beanClass)) {
-      return IObservableFactory.Type.OnlyList;
-    }
-    if (CoreUtils.isAssignableFrom(m_IObservableSet, beanClass)) {
-      return IObservableFactory.Type.OnlySet;
-    }
-    return null;
-  }
+	private IObservableFactory.Type getDirectType(Class<?> beanClass) {
+		if (CoreUtils.isAssignableFrom(m_IObservableValue, beanClass)) {
+			return IObservableFactory.Type.OnlyValue;
+		}
+		if (CoreUtils.isAssignableFrom(m_IObservableList, beanClass)) {
+			return IObservableFactory.Type.OnlyList;
+		}
+		if (CoreUtils.isAssignableFrom(m_IObservableSet, beanClass)) {
+			return IObservableFactory.Type.OnlySet;
+		}
+		return null;
+	}
 
-  private static String getDirectName(IObservableFactory.Type type) {
-    switch (type) {
-      case OnlyValue :
-        return "Object as IObservableValue";
-      case OnlyList :
-        return "Object as IObservableList";
-      case OnlySet :
-        return "Object as IObservableSet";
-    }
-    return null;
-  }
+	private static String getDirectName(IObservableFactory.Type type) {
+		switch (type) {
+		case OnlyValue :
+			return "Object as IObservableValue";
+		case OnlyList :
+			return "Object as IObservableList";
+		case OnlySet :
+			return "Object as IObservableSet";
+		}
+		return null;
+	}
 
-  /**
-   * @return <code>true</code> if given {@link PropertyDescriptor} describe property with
-   *         <code>getter</code> method and with not primitive and not array type.
-   */
-  public static boolean isGetter(PropertyDescriptor descriptor) {
-    // check NPE
-    if (descriptor == null) {
-      return false;
-    }
-    // check type
-    Class<?> type = descriptor.getPropertyType();
-    //
-    if (type == null || type.isArray() || type.isPrimitive()) {
-      return false;
-    }
-    // check getter method
-    return descriptor.getReadMethod() != null;
-  }
+	/**
+	 * @return <code>true</code> if given {@link PropertyDescriptor} describe property with
+	 *         <code>getter</code> method and with not primitive and not array type.
+	 */
+	public static boolean isGetter(PropertyDescriptor descriptor) {
+		// check NPE
+		if (descriptor == null) {
+			return false;
+		}
+		// check type
+		Class<?> type = descriptor.getPropertyType();
+		//
+		if (type == null || type.isArray() || type.isPrimitive()) {
+			return false;
+		}
+		// check getter method
+		return descriptor.getReadMethod() != null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Descriptors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final Map<Class<?>, List<PropertyDescriptor>> m_classToDescriptors = Maps.newHashMap();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Descriptors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final Map<Class<?>, List<PropertyDescriptor>> m_classToDescriptors = Maps.newHashMap();
 
-  /**
-   * @return {@link PropertyDescriptor} properties for given bean {@link Class}.
-   */
-  public List<PropertyDescriptor> getLocalPropertyDescriptors(Class<?> beanClass) throws Exception {
-    List<PropertyDescriptor> descriptors = m_classToDescriptors.get(beanClass);
-    if (descriptors == null) {
-      descriptors = getPropertyDescriptors(beanClass);
-      m_classToDescriptors.put(beanClass, descriptors);
-      Collections.sort(descriptors, new Comparator<PropertyDescriptor>() {
-        @Override
-        public int compare(PropertyDescriptor descriptor1, PropertyDescriptor descriptor2) {
-          return descriptor1.getName().compareTo(descriptor2.getName());
-        }
-      });
-    }
-    return descriptors;
-  }
+	/**
+	 * @return {@link PropertyDescriptor} properties for given bean {@link Class}.
+	 */
+	public List<PropertyDescriptor> getLocalPropertyDescriptors(Class<?> beanClass) throws Exception {
+		List<PropertyDescriptor> descriptors = m_classToDescriptors.get(beanClass);
+		if (descriptors == null) {
+			descriptors = getPropertyDescriptors(beanClass);
+			m_classToDescriptors.put(beanClass, descriptors);
+			Collections.sort(descriptors, new Comparator<PropertyDescriptor>() {
+				@Override
+				public int compare(PropertyDescriptor descriptor1, PropertyDescriptor descriptor2) {
+					return descriptor1.getName().compareTo(descriptor2.getName());
+				}
+			});
+		}
+		return descriptors;
+	}
 
-  /**
-   * @return {@link PropertyDescriptor} properties for given bean {@link Class}.
-   */
-  public static List<PropertyDescriptor> getPropertyDescriptors(Class<?> beanClass)
-      throws Exception {
-    List<PropertyDescriptor> descriptors = Lists.newArrayList();
-    // handle interfaces
-    if (beanClass.isInterface() || Modifier.isAbstract(beanClass.getModifiers())) {
-      List<Class<?>> interfaces = CoreUtils.cast(ClassUtils.getAllInterfaces(beanClass));
-      for (Class<?> i : interfaces) {
-        BeanInfo beanInfo = Introspector.getBeanInfo(i);
-        addDescriptors(descriptors, beanInfo.getPropertyDescriptors());
-      }
-    }
-    // handle bean
-    BeanInfo beanInfo = Introspector.getBeanInfo(beanClass);
-    addDescriptors(descriptors, beanInfo.getPropertyDescriptors());
-    //
-    return descriptors;
-  }
+	/**
+	 * @return {@link PropertyDescriptor} properties for given bean {@link Class}.
+	 */
+	public static List<PropertyDescriptor> getPropertyDescriptors(Class<?> beanClass)
+			throws Exception {
+		List<PropertyDescriptor> descriptors = Lists.newArrayList();
+		// handle interfaces
+		if (beanClass.isInterface() || Modifier.isAbstract(beanClass.getModifiers())) {
+			List<Class<?>> interfaces = CoreUtils.cast(ClassUtils.getAllInterfaces(beanClass));
+			for (Class<?> i : interfaces) {
+				BeanInfo beanInfo = Introspector.getBeanInfo(i);
+				addDescriptors(descriptors, beanInfo.getPropertyDescriptors());
+			}
+		}
+		// handle bean
+		BeanInfo beanInfo = Introspector.getBeanInfo(beanClass);
+		addDescriptors(descriptors, beanInfo.getPropertyDescriptors());
+		//
+		return descriptors;
+	}
 
-  private static void addDescriptors(List<PropertyDescriptor> descriptors,
-      PropertyDescriptor[] newDescriptors) {
-    int count = descriptors.size();
-    if (count > 0) {
-      // filter equal properties
-      for (int i = 0; i < newDescriptors.length; i++) {
-        PropertyDescriptor newDescriptor = newDescriptors[i];
-        if (newDescriptor.getPropertyType() == null) {
-          continue;
-        }
-        //
-        String name = newDescriptor.getName();
-        boolean addDescriptor = true;
-        //
-        for (int j = 0; j < count; j++) {
-          PropertyDescriptor descriptor = descriptors.get(j);
-          if (name.equals(descriptor.getName())) {
-            addDescriptor = false;
-            break;
-          }
-        }
-        if (addDescriptor) {
-          descriptors.add(newDescriptor);
-        }
-      }
-    } else {
-      // add all properties
-      for (PropertyDescriptor descriptor : newDescriptors) {
-        if (descriptor.getPropertyType() != null) {
-          descriptors.add(descriptor);
-        }
-      }
-    }
-  }
+	private static void addDescriptors(List<PropertyDescriptor> descriptors,
+			PropertyDescriptor[] newDescriptors) {
+		int count = descriptors.size();
+		if (count > 0) {
+			// filter equal properties
+			for (int i = 0; i < newDescriptors.length; i++) {
+				PropertyDescriptor newDescriptor = newDescriptors[i];
+				if (newDescriptor.getPropertyType() == null) {
+					continue;
+				}
+				//
+				String name = newDescriptor.getName();
+				boolean addDescriptor = true;
+				//
+				for (int j = 0; j < count; j++) {
+					PropertyDescriptor descriptor = descriptors.get(j);
+					if (name.equals(descriptor.getName())) {
+						addDescriptor = false;
+						break;
+					}
+				}
+				if (addDescriptor) {
+					descriptors.add(newDescriptor);
+				}
+			}
+		} else {
+			// add all properties
+			for (PropertyDescriptor descriptor : newDescriptors) {
+				if (descriptor.getPropertyType() != null) {
+					descriptors.add(descriptor);
+				}
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Image
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return {@link Image} represented given bean class.
-   */
-  public Image getBeanImage(Class<?> beanClass, ObjectInfo javaInfo) throws Exception {
-    // check java info
-    if (javaInfo != null) {
-      return null;
-    }
-    // prepare cached image
-    Image beanImage = m_classToImage.get(beanClass);
-    // check load image
-    if (beanImage == null) {
-      try {
-        // load AWT image
-        BeanInfo beanInfo = Introspector.getBeanInfo(beanClass);
-        java.awt.Image awtBeanIcon = beanInfo.getIcon(BeanInfo.ICON_COLOR_16x16);
-        if (awtBeanIcon == null) {
-          // set default
-          beanImage = Activator.getImage("javabean.gif");
-        } else {
-          // convert to SWT image
-          // FIXME: memory leak
-          beanImage = ImageUtils.convertToSWT(awtBeanIcon);
-        }
-      } catch (Throwable e) {
-        // set default
-        beanImage = Activator.getImage("javabean.gif");
-      }
-      m_classToImage.put(beanClass, beanImage);
-    }
-    return beanImage;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Image
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return {@link Image} represented given bean class.
+	 */
+	public Image getBeanImage(Class<?> beanClass, ObjectInfo javaInfo) throws Exception {
+		// check java info
+		if (javaInfo != null) {
+			return null;
+		}
+		// prepare cached image
+		Image beanImage = m_classToImage.get(beanClass);
+		// check load image
+		if (beanImage == null) {
+			try {
+				// load AWT image
+				BeanInfo beanInfo = Introspector.getBeanInfo(beanClass);
+				java.awt.Image awtBeanIcon = beanInfo.getIcon(BeanInfo.ICON_COLOR_16x16);
+				if (awtBeanIcon == null) {
+					// set default
+					beanImage = Activator.getImage("javabean.gif");
+				} else {
+					// convert to SWT image
+					// FIXME: memory leak
+					beanImage = ImageUtils.convertToSWT(awtBeanIcon);
+				}
+			} catch (Throwable e) {
+				// set default
+				beanImage = Activator.getImage("javabean.gif");
+			}
+			m_classToImage.put(beanClass, beanImage);
+		}
+		return beanImage;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static IObserveDecorator getDecorator(Class<?> beanClass) {
-    if (beanClass == null || beanClass == Class.class || beanClass == Object.class) {
-      return IObserveDecorator.HIDDEN;
-    }
-    if (beanClass == String.class || Collection.class.isAssignableFrom(beanClass)) {
-      return IObserveDecorator.BOLD;
-    }
-    if (beanClass.isArray() || beanClass.getName().startsWith("org.eclipse.")) {
-      return IObserveDecorator.ITALIC;
-    }
-    return IObserveDecorator.DEFAULT;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static IObserveDecorator getDecorator(Class<?> beanClass) {
+		if (beanClass == null || beanClass == Class.class || beanClass == Object.class) {
+			return IObserveDecorator.HIDDEN;
+		}
+		if (beanClass == String.class || Collection.class.isAssignableFrom(beanClass)) {
+			return IObserveDecorator.BOLD;
+		}
+		if (beanClass.isArray() || beanClass.getName().startsWith("org.eclipse.")) {
+			return IObserveDecorator.ITALIC;
+		}
+		return IObserveDecorator.DEFAULT;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/bindables/CollectionPropertyBindableInfo.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/bindables/CollectionPropertyBindableInfo.java
index 3364b6eb2..e17122fbe 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/bindables/CollectionPropertyBindableInfo.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/bindables/CollectionPropertyBindableInfo.java
@@ -33,79 +33,79 @@
  * @coverage bindings.rcp.model.beans
  */
 public final class CollectionPropertyBindableInfo extends PropertyBindableInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CollectionPropertyBindableInfo(BeanSupport beanSupport,
-      IObserveInfo parent,
-      String text,
-      Class<?> objectType,
-      IReferenceProvider referenceProvider) {
-    super(beanSupport, parent, text, objectType, referenceProvider);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CollectionPropertyBindableInfo(BeanSupport beanSupport,
+			IObserveInfo parent,
+			String text,
+			Class<?> objectType,
+			IReferenceProvider referenceProvider) {
+		super(beanSupport, parent, text, objectType, referenceProvider);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Hierarchy
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public List<IObserveInfo> getChildren(ChildrenContext context) {
-    return Collections.emptyList();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Hierarchy
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public List<IObserveInfo> getChildren(ChildrenContext context) {
+		return Collections.emptyList();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // PropertyBindableInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public IObservableFactory getObservableFactory() throws Exception {
-    return new IObservableFactory() {
-      @Override
-      public Type getType() throws Exception {
-        return Type.InputCollection;
-      }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// PropertyBindableInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public IObservableFactory getObservableFactory() throws Exception {
+		return new IObservableFactory() {
+			@Override
+			public Type getType() throws Exception {
+				return Type.InputCollection;
+			}
 
-      @Override
-      public ObservableInfo createObservable(BindableInfo object,
-          BindableInfo property,
-          Type type,
-          boolean version_1_3) throws Exception {
-        BeanBindableInfo bindableObject = (BeanBindableInfo) object;
-        CollectionPropertyBindableInfo bindableProperty = (CollectionPropertyBindableInfo) property;
-        //
-        if (List.class.isAssignableFrom(getObjectType())) {
-          WritableListBeanObservableInfo observable =
-              new WritableListBeanObservableInfo(bindableObject, bindableProperty, null);
-          if (version_1_3) {
-            observable.setCodeSupport(new SelfListCodeSupport());
-          } else {
-            observable.setCodeSupport(new WritableListCodeSupport());
-          }
-          return observable;
-        }
-        WritableSetBeanObservableInfo observable =
-            new WritableSetBeanObservableInfo(bindableObject, bindableProperty, null);
-        if (version_1_3) {
-          observable.setCodeSupport(new SelfSetCodeSupport());
-        } else {
-          observable.setCodeSupport(new WritableSetCodeSupport());
-        }
-        return observable;
-      }
-    };
-  }
+			@Override
+			public ObservableInfo createObservable(BindableInfo object,
+					BindableInfo property,
+					Type type,
+					boolean version_1_3) throws Exception {
+				BeanBindableInfo bindableObject = (BeanBindableInfo) object;
+				CollectionPropertyBindableInfo bindableProperty = (CollectionPropertyBindableInfo) property;
+				//
+				if (List.class.isAssignableFrom(getObjectType())) {
+					WritableListBeanObservableInfo observable =
+							new WritableListBeanObservableInfo(bindableObject, bindableProperty, null);
+					if (version_1_3) {
+						observable.setCodeSupport(new SelfListCodeSupport());
+					} else {
+						observable.setCodeSupport(new WritableListCodeSupport());
+					}
+					return observable;
+				}
+				WritableSetBeanObservableInfo observable =
+						new WritableSetBeanObservableInfo(bindableObject, bindableProperty, null);
+				if (version_1_3) {
+					observable.setCodeSupport(new SelfSetCodeSupport());
+				} else {
+					observable.setCodeSupport(new WritableSetCodeSupport());
+				}
+				return observable;
+			}
+		};
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public IObserveDecorator getDecorator() {
-    return IObserveDecorator.BOLD;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public IObserveDecorator getDecorator() {
+		return IObserveDecorator.BOLD;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/bindables/FieldBeanBindableInfo.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/bindables/FieldBeanBindableInfo.java
index f6a7625d0..07861fa42 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/bindables/FieldBeanBindableInfo.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/bindables/FieldBeanBindableInfo.java
@@ -37,134 +37,134 @@
  * @coverage bindings.rcp.model.beans
  */
 public final class FieldBeanBindableInfo extends BeanBindableInfo {
-  private JavaInfo m_hostJavaInfo;
-  private VariableDeclarationFragment m_fragment;
+	private JavaInfo m_hostJavaInfo;
+	private VariableDeclarationFragment m_fragment;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FieldBeanBindableInfo(BeanSupport beanSupport,
-      VariableDeclarationFragment fragment,
-      Class<?> objectType,
-      JavaInfo javaInfo) throws Exception {
-    this(beanSupport, fragment, objectType, new FragmentReferenceProvider(fragment), javaInfo);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FieldBeanBindableInfo(BeanSupport beanSupport,
+			VariableDeclarationFragment fragment,
+			Class<?> objectType,
+			JavaInfo javaInfo) throws Exception {
+		this(beanSupport, fragment, objectType, new FragmentReferenceProvider(fragment), javaInfo);
+	}
 
-  public FieldBeanBindableInfo(BeanSupport beanSupport,
-      VariableDeclarationFragment fragment,
-      Class<?> objectType,
-      IReferenceProvider referenceProvider,
-      JavaInfo javaInfo) throws Exception {
-    super(beanSupport, null, objectType, referenceProvider, javaInfo);
-    setBindingDecoration(SwtResourceManager.TOP_RIGHT);
-    m_hostJavaInfo = fragment == null ? javaInfo : null;
-    m_fragment = fragment;
-    m_children = Lists.newArrayList();
-    // add "getter" properties contains sub properties to children
-    for (PropertyBindableInfo property : getProperties()) {
-      if (property instanceof BeanPropertyDescriptorBindableInfo) {
-        BeanPropertyDescriptorBindableInfo descriptorProperty =
-            (BeanPropertyDescriptorBindableInfo) property;
-        PropertyDescriptor descriptor = descriptorProperty.getDescriptor();
-        //
-        if (BeanSupport.isGetter(descriptor)) {
-          String propertyName = descriptor.getReadMethod().getName() + "()";
-          MethodBeanBindableInfo newChildren =
-              new MethodBeanBindableInfo(beanSupport,
-                  this,
-                  descriptor.getPropertyType(),
-                  new CompoundReferenceProvider(getReferenceProvider(), "." + propertyName),
-                  new StringReferenceProvider(getReference() + "." + propertyName));
-          //
-          if (newChildren.getProperties().size() > 1) {
-            m_children.add(newChildren);
-          }
-        }
-      }
-    }
-  }
+	public FieldBeanBindableInfo(BeanSupport beanSupport,
+			VariableDeclarationFragment fragment,
+			Class<?> objectType,
+			IReferenceProvider referenceProvider,
+			JavaInfo javaInfo) throws Exception {
+		super(beanSupport, null, objectType, referenceProvider, javaInfo);
+		setBindingDecoration(SwtResourceManager.TOP_RIGHT);
+		m_hostJavaInfo = fragment == null ? javaInfo : null;
+		m_fragment = fragment;
+		m_children = Lists.newArrayList();
+		// add "getter" properties contains sub properties to children
+		for (PropertyBindableInfo property : getProperties()) {
+			if (property instanceof BeanPropertyDescriptorBindableInfo) {
+				BeanPropertyDescriptorBindableInfo descriptorProperty =
+						(BeanPropertyDescriptorBindableInfo) property;
+				PropertyDescriptor descriptor = descriptorProperty.getDescriptor();
+				//
+				if (BeanSupport.isGetter(descriptor)) {
+					String propertyName = descriptor.getReadMethod().getName() + "()";
+					MethodBeanBindableInfo newChildren =
+							new MethodBeanBindableInfo(beanSupport,
+									this,
+									descriptor.getPropertyType(),
+									new CompoundReferenceProvider(getReferenceProvider(), "." + propertyName),
+									new StringReferenceProvider(getReference() + "." + propertyName));
+					//
+					if (newChildren.getProperties().size() > 1) {
+						m_children.add(newChildren);
+					}
+				}
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Access to field {@link VariableDeclarationFragment}.
-   */
-  public VariableDeclarationFragment getFragment() {
-    return m_fragment;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Access to field {@link VariableDeclarationFragment}.
+	 */
+	public VariableDeclarationFragment getFragment() {
+		return m_fragment;
+	}
 
-  public JavaInfo getHostJavaInfo() {
-    return m_hostJavaInfo;
-  }
+	public JavaInfo getHostJavaInfo() {
+		return m_hostJavaInfo;
+	}
 
-  public void update(BeansObserveTypeContainer container) throws Exception {
-    BeanBindablePresentation presentation = (BeanBindablePresentation) getPresentation();
-    //
-    JavaInfo oldJavaInfo = m_hostJavaInfo;
-    if (m_hostJavaInfo == null) {
-      oldJavaInfo = presentation.getJavaInfo();
-    }
-    //
-    if (oldJavaInfo != null && oldJavaInfo.isDeleted()) {
-      JavaInfo newJavaInfo =
-          container.getJavaInfoRepresentedBy(m_fragment.getName().getIdentifier());
-      if (newJavaInfo == null) {
-        return;
-      }
-      Class<?> componentClass = newJavaInfo.getDescription().getComponentClass();
-      //
-      setObjectType(componentClass);
-      //
-      presentation.setJavaInfo(newJavaInfo);
-      presentation.setObjectType(componentClass);
-      presentation.setBeanImage(getBeanSupport().getBeanImage(componentClass, newJavaInfo));
-      //
-      if (m_hostJavaInfo != null) {
-        m_hostJavaInfo = newJavaInfo;
-        FragmentReferenceProvider fragmentProvider =
-            (FragmentReferenceProvider) getReferenceProvider();
-        JavaInfoReferenceProvider javaInfoProvider =
-            (JavaInfoReferenceProvider) fragmentProvider.getProvider();
-        javaInfoProvider.setJavaInfo(newJavaInfo);
-      }
-    }
-  }
+	public void update(BeansObserveTypeContainer container) throws Exception {
+		BeanBindablePresentation presentation = (BeanBindablePresentation) getPresentation();
+		//
+		JavaInfo oldJavaInfo = m_hostJavaInfo;
+		if (m_hostJavaInfo == null) {
+			oldJavaInfo = presentation.getJavaInfo();
+		}
+		//
+		if (oldJavaInfo != null && oldJavaInfo.isDeleted()) {
+			JavaInfo newJavaInfo =
+					container.getJavaInfoRepresentedBy(m_fragment.getName().getIdentifier());
+			if (newJavaInfo == null) {
+				return;
+			}
+			Class<?> componentClass = newJavaInfo.getDescription().getComponentClass();
+			//
+			setObjectType(componentClass);
+			//
+			presentation.setJavaInfo(newJavaInfo);
+			presentation.setObjectType(componentClass);
+			presentation.setBeanImage(getBeanSupport().getBeanImage(componentClass, newJavaInfo));
+			//
+			if (m_hostJavaInfo != null) {
+				m_hostJavaInfo = newJavaInfo;
+				FragmentReferenceProvider fragmentProvider =
+						(FragmentReferenceProvider) getReferenceProvider();
+				JavaInfoReferenceProvider javaInfoProvider =
+						(JavaInfoReferenceProvider) fragmentProvider.getProvider();
+				javaInfoProvider.setJavaInfo(newJavaInfo);
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Creation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void createBinding(AbstractBindingInfo binding) throws Exception {
-    super.createBinding(binding);
-    // ensure convert local variable to field
-    if (m_fragment == null) {
-      // disable synchronize
-      DatabindingsProvider provider = getBeanSupport().getProvider();
-      provider.setSynchronizeObserves(false);
-      //
-      try {
-        // do convert
-        m_hostJavaInfo.getVariableSupport().convertLocalToField();
-        // prepare fragment
-        TypeDeclaration typeDeclaration = JavaInfoUtils.getTypeDeclaration(m_hostJavaInfo);
-        String fieldName = m_hostJavaInfo.getVariableSupport().getName();
-        m_fragment = AstNodeUtils.getFieldFragmentByName(typeDeclaration, fieldName);
-        // configure reference
-        FragmentReferenceProvider referenceProvider =
-            (FragmentReferenceProvider) getReferenceProvider();
-        referenceProvider.setFragment(m_fragment);
-      } finally {
-        // do synchronize
-        provider.setSynchronizeObserves(true);
-        provider.synchronizeObserves();
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Creation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void createBinding(AbstractBindingInfo binding) throws Exception {
+		super.createBinding(binding);
+		// ensure convert local variable to field
+		if (m_fragment == null) {
+			// disable synchronize
+			DatabindingsProvider provider = getBeanSupport().getProvider();
+			provider.setSynchronizeObserves(false);
+			//
+			try {
+				// do convert
+				m_hostJavaInfo.getVariableSupport().convertLocalToField();
+				// prepare fragment
+				TypeDeclaration typeDeclaration = JavaInfoUtils.getTypeDeclaration(m_hostJavaInfo);
+				String fieldName = m_hostJavaInfo.getVariableSupport().getName();
+				m_fragment = AstNodeUtils.getFieldFragmentByName(typeDeclaration, fieldName);
+				// configure reference
+				FragmentReferenceProvider referenceProvider =
+						(FragmentReferenceProvider) getReferenceProvider();
+				referenceProvider.setFragment(m_fragment);
+			} finally {
+				// do synchronize
+				provider.setSynchronizeObserves(true);
+				provider.synchronizeObserves();
+			}
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/bindables/LocalVariableBindableInfo.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/bindables/LocalVariableBindableInfo.java
index c47eb3b34..898248be6 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/bindables/LocalVariableBindableInfo.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/bindables/LocalVariableBindableInfo.java
@@ -23,34 +23,34 @@
  * @coverage bindings.rcp.model.beans
  */
 public class LocalVariableBindableInfo extends BeanBindableInfo {
-  private final VariableDeclarationFragment m_fragment;
+	private final VariableDeclarationFragment m_fragment;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public LocalVariableBindableInfo(BeanSupport beanSupport,
-      VariableDeclarationFragment fragment,
-      Class<?> objectType) throws Exception {
-    super(beanSupport,
-        null,
-        objectType,
-        new FragmentReferenceProvider(fragment),
-        new BeanBindablePresentation(objectType,
-            new FragmentReferenceProvider(fragment),
-            null,
-            Activator.getImage("localvariable_obj.gif")));
-    setBindingDecoration(SwtResourceManager.TOP_RIGHT);
-    m_fragment = fragment;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public LocalVariableBindableInfo(BeanSupport beanSupport,
+			VariableDeclarationFragment fragment,
+			Class<?> objectType) throws Exception {
+		super(beanSupport,
+				null,
+				objectType,
+				new FragmentReferenceProvider(fragment),
+				new BeanBindablePresentation(objectType,
+						new FragmentReferenceProvider(fragment),
+						null,
+						Activator.getImage("localvariable_obj.gif")));
+		setBindingDecoration(SwtResourceManager.TOP_RIGHT);
+		m_fragment = fragment;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public VariableDeclarationFragment getFragment() {
-    return m_fragment;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public VariableDeclarationFragment getFragment() {
+		return m_fragment;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/bindables/MethodBeanBindableInfo.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/bindables/MethodBeanBindableInfo.java
index 4916a88b6..03d69c37f 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/bindables/MethodBeanBindableInfo.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/bindables/MethodBeanBindableInfo.java
@@ -25,33 +25,33 @@
  * @coverage bindings.rcp.model.beans
  */
 public final class MethodBeanBindableInfo extends BeanBindableInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public MethodBeanBindableInfo(BeanSupport beanSupport,
-      IObserveInfo parent,
-      Class<?> objectType,
-      String reference) throws Exception {
-    this(beanSupport, parent, objectType, new StringReferenceProvider(reference), null);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public MethodBeanBindableInfo(BeanSupport beanSupport,
+			IObserveInfo parent,
+			Class<?> objectType,
+			String reference) throws Exception {
+		this(beanSupport, parent, objectType, new StringReferenceProvider(reference), null);
+	}
 
-  public MethodBeanBindableInfo(BeanSupport beanSupport,
-      IObserveInfo parent,
-      Class<?> objectType,
-      IReferenceProvider referenceProvider,
-      IReferenceProvider presentationReferenceProvider) throws Exception {
-    super(beanSupport, parent, objectType, referenceProvider, createPresentation(
-        referenceProvider,
-        presentationReferenceProvider));
-    setBindingDecoration(SwtResourceManager.TOP_RIGHT);
-  }
+	public MethodBeanBindableInfo(BeanSupport beanSupport,
+			IObserveInfo parent,
+			Class<?> objectType,
+			IReferenceProvider referenceProvider,
+			IReferenceProvider presentationReferenceProvider) throws Exception {
+		super(beanSupport, parent, objectType, referenceProvider, createPresentation(
+				referenceProvider,
+				presentationReferenceProvider));
+		setBindingDecoration(SwtResourceManager.TOP_RIGHT);
+	}
 
-  private static IObservePresentation createPresentation(IReferenceProvider referenceProvider,
-      IReferenceProvider presentationReferenceProvider) throws Exception {
-    IReferenceProvider provider =
-        presentationReferenceProvider == null ? referenceProvider : presentationReferenceProvider;
-    return new SimpleObservePresentation(provider.getReference(), TypeImageProvider.METHOD_IMAGE);
-  }
+	private static IObservePresentation createPresentation(IReferenceProvider referenceProvider,
+			IReferenceProvider presentationReferenceProvider) throws Exception {
+		IReferenceProvider provider =
+				presentationReferenceProvider == null ? referenceProvider : presentationReferenceProvider;
+		return new SimpleObservePresentation(provider.getReference(), TypeImageProvider.METHOD_IMAGE);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/bindables/PropertyBindableInfo.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/bindables/PropertyBindableInfo.java
index 841e39432..549eadc61 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/bindables/PropertyBindableInfo.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/bindables/PropertyBindableInfo.java
@@ -29,68 +29,68 @@
  * @coverage bindings.rcp.model.beans
  */
 public abstract class PropertyBindableInfo extends BeanBindableInfo implements IObserveDecoration {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public PropertyBindableInfo(BeanSupport beanSupport,
-      IObserveInfo parent,
-      Class<?> objectType,
-      IReferenceProvider referenceProvider,
-      IObservePresentation presentation) {
-    super(beanSupport, parent, objectType, referenceProvider, presentation);
-    setBindingDecoration(SwtResourceManager.TOP_LEFT);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public PropertyBindableInfo(BeanSupport beanSupport,
+			IObserveInfo parent,
+			Class<?> objectType,
+			IReferenceProvider referenceProvider,
+			IObservePresentation presentation) {
+		super(beanSupport, parent, objectType, referenceProvider, presentation);
+		setBindingDecoration(SwtResourceManager.TOP_LEFT);
+	}
 
-  public PropertyBindableInfo(BeanSupport beanSupport,
-      IObserveInfo parent,
-      String text,
-      Image image,
-      Class<?> objectType,
-      IReferenceProvider referenceProvider) {
-    this(beanSupport, parent, objectType, referenceProvider, new SimpleObservePresentation(text,
-        image));
-  }
+	public PropertyBindableInfo(BeanSupport beanSupport,
+			IObserveInfo parent,
+			String text,
+			Image image,
+			Class<?> objectType,
+			IReferenceProvider referenceProvider) {
+		this(beanSupport, parent, objectType, referenceProvider, new SimpleObservePresentation(text,
+				image));
+	}
 
-  public PropertyBindableInfo(BeanSupport beanSupport,
-      IObserveInfo parent,
-      String text,
-      Image image,
-      Class<?> objectType,
-      String reference) {
-    this(beanSupport, parent, text, image, objectType, new StringReferenceProvider(reference));
-  }
+	public PropertyBindableInfo(BeanSupport beanSupport,
+			IObserveInfo parent,
+			String text,
+			Image image,
+			Class<?> objectType,
+			String reference) {
+		this(beanSupport, parent, text, image, objectType, new StringReferenceProvider(reference));
+	}
 
-  public PropertyBindableInfo(BeanSupport beanSupport,
-      IObserveInfo parent,
-      String text,
-      Class<?> objectType,
-      String reference) {
-    this(beanSupport, parent, text, TypeImageProvider.getImage(objectType), objectType, reference);
-  }
+	public PropertyBindableInfo(BeanSupport beanSupport,
+			IObserveInfo parent,
+			String text,
+			Class<?> objectType,
+			String reference) {
+		this(beanSupport, parent, text, TypeImageProvider.getImage(objectType), objectType, reference);
+	}
 
-  public PropertyBindableInfo(BeanSupport beanSupport,
-      IObserveInfo parent,
-      String text,
-      Class<?> objectType,
-      IReferenceProvider referenceProvider) {
-    this(beanSupport,
-        parent,
-        text,
-        TypeImageProvider.getImage(objectType),
-        objectType,
-        referenceProvider);
-  }
+	public PropertyBindableInfo(BeanSupport beanSupport,
+			IObserveInfo parent,
+			String text,
+			Class<?> objectType,
+			IReferenceProvider referenceProvider) {
+		this(beanSupport,
+				parent,
+				text,
+				TypeImageProvider.getImage(objectType),
+				objectType,
+				referenceProvider);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Creation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return {@link IObservableFactory} for create observables with this property.
-   */
-  @Override
-  public abstract IObservableFactory getObservableFactory() throws Exception;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Creation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return {@link IObservableFactory} for create observables with this property.
+	 */
+	@Override
+	public abstract IObservableFactory getObservableFactory() throws Exception;
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/bindables/ViewerObservablePropertyBindableInfo.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/bindables/ViewerObservablePropertyBindableInfo.java
index fd6afe05e..f7b441ad6 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/bindables/ViewerObservablePropertyBindableInfo.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/bindables/ViewerObservablePropertyBindableInfo.java
@@ -28,54 +28,54 @@
  * @coverage bindings.rcp.model.beans
  */
 public final class ViewerObservablePropertyBindableInfo extends PropertyBindableInfo {
-  private final IObservableFactory m_factory;
-  private final IObserveDecorator m_decorator;
+	private final IObservableFactory m_factory;
+	private final IObserveDecorator m_decorator;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ViewerObservablePropertyBindableInfo(BeanSupport beanSupport,
-      IObserveInfo parent,
-      String text,
-      Image image,
-      Class<?> objectType,
-      String reference,
-      IObservableFactory factory,
-      IObserveDecorator decorator) {
-    super(beanSupport, parent, text, image, objectType, reference);
-    m_factory = factory;
-    m_decorator = decorator;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ViewerObservablePropertyBindableInfo(BeanSupport beanSupport,
+			IObserveInfo parent,
+			String text,
+			Image image,
+			Class<?> objectType,
+			String reference,
+			IObservableFactory factory,
+			IObserveDecorator decorator) {
+		super(beanSupport, parent, text, image, objectType, reference);
+		m_factory = factory;
+		m_decorator = decorator;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Hierarchy
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public List<IObserveInfo> getChildren(ChildrenContext context) {
-    return Collections.emptyList();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Hierarchy
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public List<IObserveInfo> getChildren(ChildrenContext context) {
+		return Collections.emptyList();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Creation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public IObservableFactory getObservableFactory() throws Exception {
-    return m_factory;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Creation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public IObservableFactory getObservableFactory() throws Exception {
+		return m_factory;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IObserveDecoration
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public IObserveDecorator getDecorator() {
-    return m_decorator;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IObserveDecoration
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public IObserveDecorator getDecorator() {
+		return m_decorator;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/direct/DirectFieldModelSupport.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/direct/DirectFieldModelSupport.java
index f143f4175..6a596b8ee 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/direct/DirectFieldModelSupport.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/direct/DirectFieldModelSupport.java
@@ -25,32 +25,32 @@
  * @coverage bindings.rcp.model.beans
  */
 public final class DirectFieldModelSupport implements IModelSupport {
-  private final ObservableInfo m_observable;
+	private final ObservableInfo m_observable;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DirectFieldModelSupport(ObservableInfo observable) {
-    m_observable = observable;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DirectFieldModelSupport(ObservableInfo observable) {
+		m_observable = observable;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IModelSupport
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public AstObjectInfo getModel() {
-    return m_observable;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IModelSupport
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public AstObjectInfo getModel() {
+		return m_observable;
+	}
 
-  @Override
-  public boolean isRepresentedBy(Expression expression) throws Exception {
-    if (AstNodeUtils.isVariable(expression)) {
-      return m_observable.getVariableIdentifier().equals(CoreUtils.getNodeReference(expression));
-    }
-    return false;
-  }
+	@Override
+	public boolean isRepresentedBy(Expression expression) throws Exception {
+		if (AstNodeUtils.isVariable(expression)) {
+			return m_observable.getVariableIdentifier().equals(CoreUtils.getNodeReference(expression));
+		}
+		return false;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/direct/DirectModelSupport.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/direct/DirectModelSupport.java
index 7478c4145..cd5af9ba9 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/direct/DirectModelSupport.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/direct/DirectModelSupport.java
@@ -25,32 +25,32 @@
  * @coverage bindings.rcp.model.beans
  */
 public final class DirectModelSupport implements IModelSupport {
-  private final ObservableInfo m_observable;
+	private final ObservableInfo m_observable;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DirectModelSupport(ObservableInfo observable) {
-    m_observable = observable;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DirectModelSupport(ObservableInfo observable) {
+		m_observable = observable;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IModelSupport
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public AstObjectInfo getModel() {
-    return m_observable;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IModelSupport
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public AstObjectInfo getModel() {
+		return m_observable;
+	}
 
-  @Override
-  public boolean isRepresentedBy(Expression expression) throws Exception {
-    if (expression instanceof MethodInvocation) {
-      return m_observable.getVariableIdentifier().equals(CoreUtils.getNodeReference(expression));
-    }
-    return false;
-  }
+	@Override
+	public boolean isRepresentedBy(Expression expression) throws Exception {
+		if (expression instanceof MethodInvocation) {
+			return m_observable.getVariableIdentifier().equals(CoreUtils.getNodeReference(expression));
+		}
+		return false;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/direct/DirectObservableFactory.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/direct/DirectObservableFactory.java
index 98ee740cd..1ceec309f 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/direct/DirectObservableFactory.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/direct/DirectObservableFactory.java
@@ -33,125 +33,125 @@
  * @coverage bindings.rcp.model.beans
  */
 public abstract class DirectObservableFactory implements IObservableFactory {
-  private final Type m_type;
+	private final Type m_type;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private DirectObservableFactory(Type type) {
-    m_type = type;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private DirectObservableFactory(Type type) {
+		m_type = type;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IObservableFactory
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final Type getType() throws Exception {
-    return m_type;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IObservableFactory
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final Type getType() throws Exception {
+		return m_type;
+	}
 
-  @Override
-  public final ObservableInfo createObservable(BindableInfo object,
-      BindableInfo property,
-      Type type,
-      boolean version_1_3) throws Exception {
-    BeanBindableInfo bindableObject = (BeanBindableInfo) object;
-    DirectPropertyBindableInfo directProperty = (DirectPropertyBindableInfo) property;
-    return createObservable(bindableObject, directProperty, type, version_1_3);
-  }
+	@Override
+	public final ObservableInfo createObservable(BindableInfo object,
+			BindableInfo property,
+			Type type,
+			boolean version_1_3) throws Exception {
+		BeanBindableInfo bindableObject = (BeanBindableInfo) object;
+		DirectPropertyBindableInfo directProperty = (DirectPropertyBindableInfo) property;
+		return createObservable(bindableObject, directProperty, type, version_1_3);
+	}
 
-  /**
-   * Create {@link ObservableInfo} for given <code>bindableObject</code> and <code>property</code>
-   * with given {@link Type}.
-   */
-  protected abstract ObservableInfo createObservable(BeanBindableInfo bindableObject,
-      DirectPropertyBindableInfo property,
-      Type type,
-      boolean version_1_3) throws Exception;
+	/**
+	 * Create {@link ObservableInfo} for given <code>bindableObject</code> and <code>property</code>
+	 * with given {@link Type}.
+	 */
+	protected abstract ObservableInfo createObservable(BeanBindableInfo bindableObject,
+			DirectPropertyBindableInfo property,
+			Type type,
+			boolean version_1_3) throws Exception;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Factories
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Factory for create {@link DirectPropertyObservableInfo} with given {@link Type}.
-   */
-  public static IObservableFactory forProperty(Type type) {
-    return new DirectObservableFactory(type) {
-      @Override
-      protected ObservableInfo createObservable(BeanBindableInfo bindableObject,
-          DirectPropertyBindableInfo property,
-          Type type,
-          boolean version_1_3) throws Exception {
-        return new DirectPropertyObservableInfo(bindableObject, property);
-      }
-    };
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Factories
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Factory for create {@link DirectPropertyObservableInfo} with given {@link Type}.
+	 */
+	public static IObservableFactory forProperty(Type type) {
+		return new DirectObservableFactory(type) {
+			@Override
+			protected ObservableInfo createObservable(BeanBindableInfo bindableObject,
+					DirectPropertyBindableInfo property,
+					Type type,
+					boolean version_1_3) throws Exception {
+				return new DirectPropertyObservableInfo(bindableObject, property);
+			}
+		};
+	}
 
-  /**
-   * Factory for create {@link DirectObservableInfo} with given {@link Type}.
-   */
-  public static IObservableFactory forBean(Type type) {
-    return new DirectObservableFactory(type) {
-      @Override
-      protected ObservableInfo createObservable(BeanBindableInfo bindableObject,
-          DirectPropertyBindableInfo property,
-          Type type,
-          boolean version_1_3) throws Exception {
-        return new DirectObservableInfo(bindableObject, property);
-      }
-    };
-  }
+	/**
+	 * Factory for create {@link DirectObservableInfo} with given {@link Type}.
+	 */
+	public static IObservableFactory forBean(Type type) {
+		return new DirectObservableFactory(type) {
+			@Override
+			protected ObservableInfo createObservable(BeanBindableInfo bindableObject,
+					DirectPropertyBindableInfo property,
+					Type type,
+					boolean version_1_3) throws Exception {
+				return new DirectObservableInfo(bindableObject, property);
+			}
+		};
+	}
 
-  /**
-   * Factory with type {@link Type#Detail} for create master-detail observable's.
-   */
-  public static IObservableFactory forDetailBean() {
-    return new DirectObservableFactory(Type.Detail) {
-      @Override
-      protected ObservableInfo createObservable(BeanBindableInfo bindableObject,
-          DirectPropertyBindableInfo property,
-          Type type,
-          boolean version_1_3) throws Exception {
-        // create master
-        DirectObservableInfo masterObservable = new DirectObservableInfo(bindableObject, property);
-        // create detail
-        DetailBeanObservableInfo observable = null;
-        switch (type) {
-          case OnlyValue :
-            observable = new DetailValueBeanObservableInfo(masterObservable, null, null, null);
-            if (version_1_3) {
-              observable.setCodeSupport(new ValuePropertyDetailCodeSupport());
-            } else {
-              observable.setCodeSupport(new BeanObservableDetailValueCodeSupport());
-            }
-            break;
-          case OnlyList :
-            observable = new DetailListBeanObservableInfo(masterObservable, null, null, null);
-            if (version_1_3) {
-              observable.setCodeSupport(new ListPropertyDetailCodeSupport());
-            } else {
-              observable.setCodeSupport(new BeanObservableDetailListCodeSupport());
-            }
-            break;
-          case OnlySet :
-            observable = new DetailSetBeanObservableInfo(masterObservable, null, null, null);
-            if (version_1_3) {
-              observable.setCodeSupport(new SetPropertyDetailCodeSupport());
-            } else {
-              observable.setCodeSupport(new BeanObservableDetailSetCodeSupport());
-            }
-            break;
-        }
-        Assert.isNotNull(observable);
-        observable.setPojoBindable(masterObservable.isPojoBindable());
-        return observable;
-      }
-    };
-  }
+	/**
+	 * Factory with type {@link Type#Detail} for create master-detail observable's.
+	 */
+	public static IObservableFactory forDetailBean() {
+		return new DirectObservableFactory(Type.Detail) {
+			@Override
+			protected ObservableInfo createObservable(BeanBindableInfo bindableObject,
+					DirectPropertyBindableInfo property,
+					Type type,
+					boolean version_1_3) throws Exception {
+				// create master
+				DirectObservableInfo masterObservable = new DirectObservableInfo(bindableObject, property);
+				// create detail
+				DetailBeanObservableInfo observable = null;
+				switch (type) {
+				case OnlyValue :
+					observable = new DetailValueBeanObservableInfo(masterObservable, null, null, null);
+					if (version_1_3) {
+						observable.setCodeSupport(new ValuePropertyDetailCodeSupport());
+					} else {
+						observable.setCodeSupport(new BeanObservableDetailValueCodeSupport());
+					}
+					break;
+				case OnlyList :
+					observable = new DetailListBeanObservableInfo(masterObservable, null, null, null);
+					if (version_1_3) {
+						observable.setCodeSupport(new ListPropertyDetailCodeSupport());
+					} else {
+						observable.setCodeSupport(new BeanObservableDetailListCodeSupport());
+					}
+					break;
+				case OnlySet :
+					observable = new DetailSetBeanObservableInfo(masterObservable, null, null, null);
+					if (version_1_3) {
+						observable.setCodeSupport(new SetPropertyDetailCodeSupport());
+					} else {
+						observable.setCodeSupport(new BeanObservableDetailSetCodeSupport());
+					}
+					break;
+				}
+				Assert.isNotNull(observable);
+				observable.setPojoBindable(masterObservable.isPojoBindable());
+				return observable;
+			}
+		};
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/direct/DirectObservableInfo.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/direct/DirectObservableInfo.java
index 5ca633d54..2f9732636 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/direct/DirectObservableInfo.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/direct/DirectObservableInfo.java
@@ -23,51 +23,51 @@
  * @coverage bindings.rcp.model.beans
  */
 public final class DirectObservableInfo extends DirectPropertyObservableInfo
-    implements
-      IMasterDetailProvider {
-  public static final String DETAIL_PROPERTY_NAME = "Detail for IObservableValue";
+implements
+IMasterDetailProvider {
+	public static final String DETAIL_PROPERTY_NAME = "Detail for IObservableValue";
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DirectObservableInfo(BindableInfo bindableObject, BindableInfo property) {
-    super(bindableObject, property);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DirectObservableInfo(BindableInfo bindableObject, BindableInfo property) {
+		super(bindableObject, property);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Variable
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getVariableIdentifier() throws Exception {
-    return m_bindableObject.getReference();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Variable
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getVariableIdentifier() throws Exception {
+		return m_bindableObject.getReference();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IMasterDetailProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public ObservableInfo getMasterObservable() throws Exception {
-    for (IObserveInfo property : m_bindableObject.getChildren(ChildrenContext.ChildrenForPropertiesTable)) {
-      if (DETAIL_PROPERTY_NAME.equals(property.getPresentation().getText())) {
-        return new DirectObservableInfo(m_bindableObject, (BindableInfo) property);
-      }
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IMasterDetailProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public ObservableInfo getMasterObservable() throws Exception {
+		for (IObserveInfo property : m_bindableObject.getChildren(ChildrenContext.ChildrenForPropertiesTable)) {
+			if (DETAIL_PROPERTY_NAME.equals(property.getPresentation().getText())) {
+				return new DirectObservableInfo(m_bindableObject, (BindableInfo) property);
+			}
+		}
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getPresentationText() throws Exception {
-    return getBindableObject().getPresentation().getTextForBinding();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getPresentationText() throws Exception {
+		return getBindableObject().getPresentation().getTextForBinding();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/direct/DirectPropertyBindableInfo.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/direct/DirectPropertyBindableInfo.java
index e1218cde0..ff0f65896 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/direct/DirectPropertyBindableInfo.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/direct/DirectPropertyBindableInfo.java
@@ -29,75 +29,75 @@
  * @coverage bindings.rcp.model.beans
  */
 public final class DirectPropertyBindableInfo extends PropertyBindableInfo {
-  private final IObservableFactory m_observableFactory;
+	private final IObservableFactory m_observableFactory;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DirectPropertyBindableInfo(BeanSupport beanSupport,
-      IObserveInfo parent,
-      PropertyDescriptor descriptor) {
-    super(beanSupport,
-        parent,
-        descriptor.getReadMethod().getName() + "()",
-        TypeImageProvider.OBJECT_IMAGE,
-        descriptor.getPropertyType(),
-        descriptor.getReadMethod().getName() + "()");
-    m_observableFactory = null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DirectPropertyBindableInfo(BeanSupport beanSupport,
+			IObserveInfo parent,
+			PropertyDescriptor descriptor) {
+		super(beanSupport,
+				parent,
+				descriptor.getReadMethod().getName() + "()",
+				TypeImageProvider.OBJECT_IMAGE,
+				descriptor.getPropertyType(),
+				descriptor.getReadMethod().getName() + "()");
+		m_observableFactory = null;
+	}
 
-  public DirectPropertyBindableInfo(BeanSupport beanSupport,
-      IObserveInfo parent,
-      PropertyDescriptor descriptor,
-      IObservableFactory observableFactory) {
-    super(beanSupport,
-        parent,
-        descriptor.getReadMethod().getName() + "()",
-        TypeImageProvider.DIRECT_IMAGE,
-        descriptor.getPropertyType(),
-        descriptor.getReadMethod().getName() + "()");
-    m_observableFactory = observableFactory;
-  }
+	public DirectPropertyBindableInfo(BeanSupport beanSupport,
+			IObserveInfo parent,
+			PropertyDescriptor descriptor,
+			IObservableFactory observableFactory) {
+		super(beanSupport,
+				parent,
+				descriptor.getReadMethod().getName() + "()",
+				TypeImageProvider.DIRECT_IMAGE,
+				descriptor.getPropertyType(),
+				descriptor.getReadMethod().getName() + "()");
+		m_observableFactory = observableFactory;
+	}
 
-  public DirectPropertyBindableInfo(BeanSupport beanSupport,
-      IObserveInfo parent,
-      String text,
-      Class<?> objectType,
-      IReferenceProvider referenceProvider,
-      IObservableFactory observableFactory) {
-    super(beanSupport, parent, text, TypeImageProvider.DIRECT_IMAGE, objectType, referenceProvider);
-    m_observableFactory = observableFactory;
-  }
+	public DirectPropertyBindableInfo(BeanSupport beanSupport,
+			IObserveInfo parent,
+			String text,
+			Class<?> objectType,
+			IReferenceProvider referenceProvider,
+			IObservableFactory observableFactory) {
+		super(beanSupport, parent, text, TypeImageProvider.DIRECT_IMAGE, objectType, referenceProvider);
+		m_observableFactory = observableFactory;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Hierarchy
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public List<IObserveInfo> getChildren(ChildrenContext context) {
-    return Collections.emptyList();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Hierarchy
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public List<IObserveInfo> getChildren(ChildrenContext context) {
+		return Collections.emptyList();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Creation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public IObservableFactory getObservableFactory() throws Exception {
-    return m_observableFactory;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Creation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public IObservableFactory getObservableFactory() throws Exception {
+		return m_observableFactory;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public IObserveDecorator getDecorator() {
-    return IObserveDecorator.BOLD_ITALIC;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public IObserveDecorator getDecorator() {
+		return IObserveDecorator.BOLD_ITALIC;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/direct/DirectPropertyObservableInfo.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/direct/DirectPropertyObservableInfo.java
index aedbd354f..963a3653b 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/direct/DirectPropertyObservableInfo.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/direct/DirectPropertyObservableInfo.java
@@ -23,56 +23,56 @@
  * @coverage bindings.rcp.model.beans
  */
 public class DirectPropertyObservableInfo extends ObservableInfo {
-  protected final BindableInfo m_bindableObject;
-  protected final BindableInfo m_property;
+	protected final BindableInfo m_bindableObject;
+	protected final BindableInfo m_property;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DirectPropertyObservableInfo(BindableInfo bindableObject, BindableInfo property) {
-    m_bindableObject = bindableObject;
-    m_property = property;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DirectPropertyObservableInfo(BindableInfo bindableObject, BindableInfo property) {
+		m_bindableObject = bindableObject;
+		m_property = property;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Variable
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getVariableIdentifier() throws Exception {
-    return m_bindableObject.getReference() + "." + m_property.getReference();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Variable
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getVariableIdentifier() throws Exception {
+		return m_bindableObject.getReference() + "." + m_property.getReference();
+	}
 
-  @Override
-  public final void setVariableIdentifier(String identifier) {
-    throw new UnsupportedOperationException();
-  }
+	@Override
+	public final void setVariableIdentifier(String identifier) {
+		throw new UnsupportedOperationException();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ObservableInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final BindableInfo getBindableObject() {
-    return m_bindableObject;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ObservableInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final BindableInfo getBindableObject() {
+		return m_bindableObject;
+	}
 
-  @Override
-  public final BindableInfo getBindableProperty() {
-    return m_property;
-  }
+	@Override
+	public final BindableInfo getBindableProperty() {
+		return m_property;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final void addSourceCode(List<String> lines, CodeGenerationSupport generationSupport)
-      throws Exception {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final void addSourceCode(List<String> lines, CodeGenerationSupport generationSupport)
+			throws Exception {
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/BeanObservableInfo.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/BeanObservableInfo.java
index bafdb5799..b42db2e52 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/BeanObservableInfo.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/BeanObservableInfo.java
@@ -21,46 +21,46 @@
  * @coverage bindings.rcp.model.beans
  */
 public abstract class BeanObservableInfo extends ObservableInfo implements IMasterDetailProvider {
-  protected final BindableInfo m_bindableObject;
-  protected final BindableInfo m_bindableProperty;
+	protected final BindableInfo m_bindableObject;
+	protected final BindableInfo m_bindableProperty;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public BeanObservableInfo(BindableInfo bindableObject, BindableInfo bindableProperty) {
-    m_bindableObject = bindableObject;
-    m_bindableProperty = bindableProperty;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public BeanObservableInfo(BindableInfo bindableObject, BindableInfo bindableProperty) {
+		m_bindableObject = bindableObject;
+		m_bindableProperty = bindableProperty;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ObservableInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final BindableInfo getBindableObject() {
-    return m_bindableObject;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ObservableInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final BindableInfo getBindableObject() {
+		return m_bindableObject;
+	}
 
-  @Override
-  public final BindableInfo getBindableProperty() {
-    return m_bindableProperty;
-  }
+	@Override
+	public final BindableInfo getBindableProperty() {
+		return m_bindableProperty;
+	}
 
-  @Override
-  public final boolean canShared() {
-    return true;
-  }
+	@Override
+	public final boolean canShared() {
+		return true;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IMasterDetailProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final ObservableInfo getMasterObservable() throws Exception {
-    return this;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IMasterDetailProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final ObservableInfo getMasterObservable() throws Exception {
+		return this;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/CollectionObservableInfo.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/CollectionObservableInfo.java
index eb1ffa1cc..485d75bef 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/CollectionObservableInfo.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/CollectionObservableInfo.java
@@ -24,72 +24,72 @@
  * @coverage bindings.rcp.model.beans
  */
 public abstract class CollectionObservableInfo extends ObservableInfo {
-  protected final BeanBindableInfo m_bindableObject;
-  protected final CollectionPropertyBindableInfo m_bindableProperty;
-  protected Class<?> m_elementType;
+	protected final BeanBindableInfo m_bindableObject;
+	protected final CollectionPropertyBindableInfo m_bindableProperty;
+	protected Class<?> m_elementType;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CollectionObservableInfo(BeanBindableInfo bindableObject,
-      CollectionPropertyBindableInfo bindableProperty,
-      Class<?> elementType) {
-    m_bindableObject = bindableObject;
-    m_bindableProperty = bindableProperty;
-    m_elementType = elementType;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CollectionObservableInfo(BeanBindableInfo bindableObject,
+			CollectionPropertyBindableInfo bindableProperty,
+			Class<?> elementType) {
+		m_bindableObject = bindableObject;
+		m_bindableProperty = bindableProperty;
+		m_elementType = elementType;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public final Class<?> getElementType() {
-    return m_elementType;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public final Class<?> getElementType() {
+		return m_elementType;
+	}
 
-  public final void setElementType(Class<?> elementType) {
-    m_elementType = elementType;
-  }
+	public final void setElementType(Class<?> elementType) {
+		m_elementType = elementType;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ObservableInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final BindableInfo getBindableObject() {
-    return m_bindableObject;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ObservableInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final BindableInfo getBindableObject() {
+		return m_bindableObject;
+	}
 
-  @Override
-  public final BindableInfo getBindableProperty() {
-    return m_bindableProperty;
-  }
+	@Override
+	public final BindableInfo getBindableProperty() {
+		return m_bindableProperty;
+	}
 
-  @Override
-  public final boolean canShared() {
-    return true;
-  }
+	@Override
+	public final boolean canShared() {
+		return true;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final String getPresentationText() throws Exception {
-    String elementTypeName =
-        m_elementType == null ? "?????" : ClassUtils.getShortClassName(m_elementType);
-    return getPresentationPrefix()
-        + "("
-        + getBindableObject().getPresentation().getTextForBinding()
-        + ", "
-        + elementTypeName
-        + ".class)";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final String getPresentationText() throws Exception {
+		String elementTypeName =
+				m_elementType == null ? "?????" : ClassUtils.getShortClassName(m_elementType);
+		return getPresentationPrefix()
+				+ "("
+				+ getBindableObject().getPresentation().getTextForBinding()
+				+ ", "
+				+ elementTypeName
+				+ ".class)";
+	}
 
-  protected abstract String getPresentationPrefix();
+	protected abstract String getPresentationPrefix();
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/DetailBeanObservableInfo.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/DetailBeanObservableInfo.java
index 69548798e..2472e4d48 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/DetailBeanObservableInfo.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/DetailBeanObservableInfo.java
@@ -32,145 +32,145 @@
  * @coverage bindings.rcp.model.beans
  */
 public abstract class DetailBeanObservableInfo extends ObservableInfo {
-  private static ChooseClassAndPropertiesConfiguration m_configuration;
-  protected final ObservableInfo m_masterObservable;
-  protected Class<?> m_detailBeanClass;
-  protected String m_detailPropertyReference;
-  protected Class<?> m_detailPropertyType;
-  protected boolean m_isPojoBindable;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DetailBeanObservableInfo(ObservableInfo masterObservable,
-      Class<?> detailBeanClass,
-      String detailPropertyReference,
-      Class<?> detailPropertyType) {
-    m_masterObservable = masterObservable;
-    m_detailBeanClass = detailBeanClass;
-    m_detailPropertyReference = detailPropertyReference;
-    m_detailPropertyType = detailPropertyType;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public final ObservableInfo getMasterObservable() {
-    return m_masterObservable;
-  }
-
-  public final Class<?> getDetailBeanClass() {
-    return m_detailBeanClass;
-  }
-
-  public final String getDetailPropertyReference() {
-    return m_detailPropertyReference;
-  }
-
-  public void setDetailPropertyReference(Class<?> detailBeanClass, String detailPropertyReference)
-      throws Exception {
-    if (!detailBeanClass.equals(m_detailBeanClass)) {
-      m_detailBeanClass = detailBeanClass;
-      m_isPojoBindable = isPojoBean(m_detailBeanClass);
-    }
-    m_detailPropertyReference = detailPropertyReference;
-  }
-
-  public final Class<?> getDetailPropertyType() {
-    return m_detailPropertyType;
-  }
-
-  public final void setDetailPropertyType(Class<?> detailPropertyType) {
-    m_detailPropertyType = detailPropertyType;
-  }
-
-  public final boolean isPojoBindable0() {
-    return m_isPojoBindable;
-  }
-
-  public void setPojoBindable(boolean isPojoBindable) {
-    m_isPojoBindable = isPojoBindable;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ObservableInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final BindableInfo getBindableObject() {
-    return m_masterObservable.getBindableObject();
-  }
-
-  @Override
-  public final BindableInfo getBindableProperty() {
-    return m_masterObservable.getBindableProperty();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getPresentationText() throws Exception {
-    String presentationProperty = StringUtils.defaultIfEmpty(m_detailPropertyReference, "?????");
-    String presentationPropertyType =
-        m_detailPropertyType == null ? "?????" : ClassUtils.getShortClassName(m_detailPropertyType);
-    return m_masterObservable.getPresentationText()
-        + ".detail"
-        + getPresentationPrefix()
-        + "("
-        + presentationProperty
-        + ", "
-        + presentationPropertyType
-        + ".class)";
-  }
-
-  /**
-   * @return presentation prefix for this observable.
-   */
-  public abstract String getPresentationPrefix();
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void createContentProviders(List<IUiContentProvider> providers,
-      BindingUiContentProviderContext context,
-      DatabindingsProvider provider) throws Exception {
-    m_masterObservable.createContentProviders(providers, context, provider);
-    providers.add(new ObservableDetailUiContentProvider(getConfiguration(), this, provider));
-  }
-
-  protected ChooseClassAndPropertiesConfiguration getConfiguration() {
-    if (m_configuration == null) {
-      m_configuration = new ChooseClassAndPropertiesConfiguration();
-      m_configuration.setDialogFieldLabel(Messages.DetailBeanObservableInfo_objectLabel);
-      m_configuration.setValueScope("beans");
-      m_configuration.setChooseInterfaces(true);
-      m_configuration.setEmptyClassErrorMessage(Messages.DetailBeanObservableInfo_errorMessage);
-      m_configuration.setErrorMessagePrefix(Messages.DetailBeanObservableInfo_errorMessagePrefix);
-      m_configuration.setPropertiesLabel(Messages.DetailBeanObservableInfo_propertiesLabel);
-      m_configuration.setPropertiesErrorMessage(Messages.DetailBeanObservableInfo_propertiesErrorMessage);
-    }
-    return m_configuration;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Visiting
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final void accept(AstObjectInfoVisitor visitor) throws Exception {
-    super.accept(visitor);
-    m_masterObservable.accept(visitor);
-  }
+	private static ChooseClassAndPropertiesConfiguration m_configuration;
+	protected final ObservableInfo m_masterObservable;
+	protected Class<?> m_detailBeanClass;
+	protected String m_detailPropertyReference;
+	protected Class<?> m_detailPropertyType;
+	protected boolean m_isPojoBindable;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DetailBeanObservableInfo(ObservableInfo masterObservable,
+			Class<?> detailBeanClass,
+			String detailPropertyReference,
+			Class<?> detailPropertyType) {
+		m_masterObservable = masterObservable;
+		m_detailBeanClass = detailBeanClass;
+		m_detailPropertyReference = detailPropertyReference;
+		m_detailPropertyType = detailPropertyType;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public final ObservableInfo getMasterObservable() {
+		return m_masterObservable;
+	}
+
+	public final Class<?> getDetailBeanClass() {
+		return m_detailBeanClass;
+	}
+
+	public final String getDetailPropertyReference() {
+		return m_detailPropertyReference;
+	}
+
+	public void setDetailPropertyReference(Class<?> detailBeanClass, String detailPropertyReference)
+			throws Exception {
+		if (!detailBeanClass.equals(m_detailBeanClass)) {
+			m_detailBeanClass = detailBeanClass;
+			m_isPojoBindable = isPojoBean(m_detailBeanClass);
+		}
+		m_detailPropertyReference = detailPropertyReference;
+	}
+
+	public final Class<?> getDetailPropertyType() {
+		return m_detailPropertyType;
+	}
+
+	public final void setDetailPropertyType(Class<?> detailPropertyType) {
+		m_detailPropertyType = detailPropertyType;
+	}
+
+	public final boolean isPojoBindable0() {
+		return m_isPojoBindable;
+	}
+
+	public void setPojoBindable(boolean isPojoBindable) {
+		m_isPojoBindable = isPojoBindable;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ObservableInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final BindableInfo getBindableObject() {
+		return m_masterObservable.getBindableObject();
+	}
+
+	@Override
+	public final BindableInfo getBindableProperty() {
+		return m_masterObservable.getBindableProperty();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getPresentationText() throws Exception {
+		String presentationProperty = StringUtils.defaultIfEmpty(m_detailPropertyReference, "?????");
+		String presentationPropertyType =
+				m_detailPropertyType == null ? "?????" : ClassUtils.getShortClassName(m_detailPropertyType);
+		return m_masterObservable.getPresentationText()
+				+ ".detail"
+				+ getPresentationPrefix()
+				+ "("
+				+ presentationProperty
+				+ ", "
+				+ presentationPropertyType
+				+ ".class)";
+	}
+
+	/**
+	 * @return presentation prefix for this observable.
+	 */
+	public abstract String getPresentationPrefix();
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void createContentProviders(List<IUiContentProvider> providers,
+			BindingUiContentProviderContext context,
+			DatabindingsProvider provider) throws Exception {
+		m_masterObservable.createContentProviders(providers, context, provider);
+		providers.add(new ObservableDetailUiContentProvider(getConfiguration(), this, provider));
+	}
+
+	protected ChooseClassAndPropertiesConfiguration getConfiguration() {
+		if (m_configuration == null) {
+			m_configuration = new ChooseClassAndPropertiesConfiguration();
+			m_configuration.setDialogFieldLabel(Messages.DetailBeanObservableInfo_objectLabel);
+			m_configuration.setValueScope("beans");
+			m_configuration.setChooseInterfaces(true);
+			m_configuration.setEmptyClassErrorMessage(Messages.DetailBeanObservableInfo_errorMessage);
+			m_configuration.setErrorMessagePrefix(Messages.DetailBeanObservableInfo_errorMessagePrefix);
+			m_configuration.setPropertiesLabel(Messages.DetailBeanObservableInfo_propertiesLabel);
+			m_configuration.setPropertiesErrorMessage(Messages.DetailBeanObservableInfo_propertiesErrorMessage);
+		}
+		return m_configuration;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Visiting
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final void accept(AstObjectInfoVisitor visitor) throws Exception {
+		super.accept(visitor);
+		m_masterObservable.accept(visitor);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/DetailListBeanObservableInfo.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/DetailListBeanObservableInfo.java
index 2db7eb70e..8e280b07b 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/DetailListBeanObservableInfo.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/DetailListBeanObservableInfo.java
@@ -19,25 +19,25 @@
  * @coverage bindings.rcp.model.beans
  */
 public final class DetailListBeanObservableInfo extends DetailBeanObservableInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DetailListBeanObservableInfo(ObservableInfo masterObservable,
-      Class<?> detailBeanClass,
-      String detailPropertyReference,
-      Class<?> detailPropertyType) {
-    super(masterObservable, detailBeanClass, detailPropertyReference, detailPropertyType);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DetailListBeanObservableInfo(ObservableInfo masterObservable,
+			Class<?> detailBeanClass,
+			String detailPropertyReference,
+			Class<?> detailPropertyType) {
+		super(masterObservable, detailBeanClass, detailPropertyReference, detailPropertyType);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getPresentationPrefix() {
-    return "List";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getPresentationPrefix() {
+		return "List";
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/DetailSetBeanObservableInfo.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/DetailSetBeanObservableInfo.java
index ff57f5dd5..4cf7339d4 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/DetailSetBeanObservableInfo.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/DetailSetBeanObservableInfo.java
@@ -19,25 +19,25 @@
  * @coverage bindings.rcp.model.beans
  */
 public final class DetailSetBeanObservableInfo extends DetailBeanObservableInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DetailSetBeanObservableInfo(ObservableInfo masterObservable,
-      Class<?> detailBeanClass,
-      String detailPropertyReference,
-      Class<?> detailPropertyType) {
-    super(masterObservable, detailBeanClass, detailPropertyReference, detailPropertyType);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DetailSetBeanObservableInfo(ObservableInfo masterObservable,
+			Class<?> detailBeanClass,
+			String detailPropertyReference,
+			Class<?> detailPropertyType) {
+		super(masterObservable, detailBeanClass, detailPropertyReference, detailPropertyType);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getPresentationPrefix() {
-    return "Set";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getPresentationPrefix() {
+		return "Set";
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/DetailValueBeanObservableInfo.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/DetailValueBeanObservableInfo.java
index 6c998723a..38cd53ded 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/DetailValueBeanObservableInfo.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/DetailValueBeanObservableInfo.java
@@ -19,25 +19,25 @@
  * @coverage bindings.rcp.model.beans
  */
 public final class DetailValueBeanObservableInfo extends DetailBeanObservableInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DetailValueBeanObservableInfo(ObservableInfo masterObservable,
-      Class<?> detailBeanClass,
-      String detailPropertyReference,
-      Class<?> detailPropertyType) {
-    super(masterObservable, detailBeanClass, detailPropertyReference, detailPropertyType);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DetailValueBeanObservableInfo(ObservableInfo masterObservable,
+			Class<?> detailBeanClass,
+			String detailPropertyReference,
+			Class<?> detailPropertyType) {
+		super(masterObservable, detailBeanClass, detailPropertyReference, detailPropertyType);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getPresentationPrefix() {
-    return "Value";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getPresentationPrefix() {
+		return "Value";
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/ListBeanObservableInfo.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/ListBeanObservableInfo.java
index 36411ccfe..68bb613f1 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/ListBeanObservableInfo.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/ListBeanObservableInfo.java
@@ -20,23 +20,23 @@
  * @coverage bindings.rcp.model.beans
  */
 public final class ListBeanObservableInfo extends BeanObservableInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ListBeanObservableInfo(BeanBindableInfo bindableObject,
-      BeanPropertyBindableInfo bindableProperty) {
-    super(bindableObject, bindableProperty);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ListBeanObservableInfo(BeanBindableInfo bindableObject,
+			BeanPropertyBindableInfo bindableProperty) {
+		super(bindableObject, bindableProperty);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getPresentationText() throws Exception {
-    return super.getPresentationText() + "(List)";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getPresentationText() throws Exception {
+		return super.getPresentationText() + "(List)";
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/MapsBeanObservableInfo.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/MapsBeanObservableInfo.java
index ac9279ca3..92e5bb19b 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/MapsBeanObservableInfo.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/MapsBeanObservableInfo.java
@@ -29,128 +29,128 @@
  * @coverage bindings.rcp.model.beans
  */
 public class MapsBeanObservableInfo extends ObservableInfo {
-  private final ObservableInfo m_domainObservable;
-  private Class<?> m_elementType;
-  private String[] m_properties;
+	private final ObservableInfo m_domainObservable;
+	private Class<?> m_elementType;
+	private String[] m_properties;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public MapsBeanObservableInfo(DetailBeanObservableInfo observable) {
-    this(observable.getMasterObservable(), observable.getDetailBeanClass(),
-        new String[] { observable.getDetailPropertyReference() });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public MapsBeanObservableInfo(DetailBeanObservableInfo observable) {
+		this(observable.getMasterObservable(), observable.getDetailBeanClass(),
+				new String[] { observable.getDetailPropertyReference() });
+	}
 
-  public MapsBeanObservableInfo(ObservableInfo domainObservable,
-      Class<?> elementType,
-      String[] properties) {
-    m_domainObservable = domainObservable;
-    m_elementType = elementType;
-    m_properties = properties;
-  }
+	public MapsBeanObservableInfo(ObservableInfo domainObservable,
+			Class<?> elementType,
+			String[] properties) {
+		m_domainObservable = domainObservable;
+		m_elementType = elementType;
+		m_properties = properties;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ObservableInfo getDomainObservable() {
-    return m_domainObservable;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ObservableInfo getDomainObservable() {
+		return m_domainObservable;
+	}
 
-  public Class<?> getElementType() {
-    return m_elementType;
-  }
+	public Class<?> getElementType() {
+		return m_elementType;
+	}
 
-  public void setElementType(Class<?> elementType) {
-    m_elementType = elementType;
-  }
+	public void setElementType(Class<?> elementType) {
+		m_elementType = elementType;
+	}
 
-  public String[] getProperties() {
-    return m_properties;
-  }
+	public String[] getProperties() {
+		return m_properties;
+	}
 
-  public void setProperties(String[] properties) throws Exception {
-    m_properties = properties;
-  }
+	public void setProperties(String[] properties) throws Exception {
+		m_properties = properties;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ObservableInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public BindableInfo getBindableObject() {
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ObservableInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public BindableInfo getBindableObject() {
+		return null;
+	}
 
-  @Override
-  public BindableInfo getBindableProperty() {
-    return null;
-  }
+	@Override
+	public BindableInfo getBindableProperty() {
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void addSourceCode(List<String> lines, CodeGenerationSupport generationSupport)
-      throws Exception {
-    // prepare variable
-    if (getVariableIdentifier() == null) {
-      if (m_properties.length == 1) {
-        setVariableIdentifier(generationSupport.generateLocalName("observeMap"));
-      } else {
-        setVariableIdentifier(generationSupport.generateLocalName("observeMaps"));
-      }
-    }
-    //
-    KnownElementsObservableInfo domainObservable = (KnownElementsObservableInfo) m_domainObservable;
-    //
-    if (m_properties.length == 1) {
-      String observeMethod =
-          isPojoBean(m_elementType)
-              ? " = " + DataBindingsCodeUtils.getPojoObservablesClass() + ".observeMap("
-              : " = org.eclipse.core.databinding.beans.BeansObservables.observeMap(";
-      // add code
-      lines.add("org.eclipse.core.databinding.observable.map.IObservableMap "
-          + getVariableIdentifier()
-          + observeMethod
-          + domainObservable.getSourceCode()
-          + ", "
-          + CoreUtils.getClassName(m_elementType)
-          + ".class, \""
-          + m_properties[0]
-          + "\");");
-    } else {
-      String observeMethod =
-          isPojoBean(m_elementType)
-              ? " = " + DataBindingsCodeUtils.getPojoObservablesClass() + ".observeMaps("
-              : " = org.eclipse.core.databinding.beans.BeansObservables.observeMaps(";
-      // add code
-      lines.add("org.eclipse.core.databinding.observable.map.IObservableMap[] "
-          + getVariableIdentifier()
-          + observeMethod
-          + domainObservable.getSourceCode()
-          + ", "
-          + CoreUtils.getClassName(m_elementType)
-          + ".class, new java.lang.String[]{\""
-          + StringUtils.join(m_properties, "\", \"")
-          + "\"});");
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void addSourceCode(List<String> lines, CodeGenerationSupport generationSupport)
+			throws Exception {
+		// prepare variable
+		if (getVariableIdentifier() == null) {
+			if (m_properties.length == 1) {
+				setVariableIdentifier(generationSupport.generateLocalName("observeMap"));
+			} else {
+				setVariableIdentifier(generationSupport.generateLocalName("observeMaps"));
+			}
+		}
+		//
+		KnownElementsObservableInfo domainObservable = (KnownElementsObservableInfo) m_domainObservable;
+		//
+		if (m_properties.length == 1) {
+			String observeMethod =
+					isPojoBean(m_elementType)
+					? " = " + DataBindingsCodeUtils.getPojoObservablesClass() + ".observeMap("
+							: " = org.eclipse.core.databinding.beans.BeansObservables.observeMap(";
+			// add code
+			lines.add("org.eclipse.core.databinding.observable.map.IObservableMap "
+					+ getVariableIdentifier()
+					+ observeMethod
+					+ domainObservable.getSourceCode()
+					+ ", "
+					+ CoreUtils.getClassName(m_elementType)
+					+ ".class, \""
+					+ m_properties[0]
+							+ "\");");
+		} else {
+			String observeMethod =
+					isPojoBean(m_elementType)
+					? " = " + DataBindingsCodeUtils.getPojoObservablesClass() + ".observeMaps("
+							: " = org.eclipse.core.databinding.beans.BeansObservables.observeMaps(";
+			// add code
+			lines.add("org.eclipse.core.databinding.observable.map.IObservableMap[] "
+					+ getVariableIdentifier()
+					+ observeMethod
+					+ domainObservable.getSourceCode()
+					+ ", "
+					+ CoreUtils.getClassName(m_elementType)
+					+ ".class, new java.lang.String[]{\""
+					+ StringUtils.join(m_properties, "\", \"")
+					+ "\"});");
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Visiting
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void accept(AstObjectInfoVisitor visitor) throws Exception {
-    super.accept(visitor);
-    m_domainObservable.accept(visitor);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Visiting
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void accept(AstObjectInfoVisitor visitor) throws Exception {
+		super.accept(visitor);
+		m_domainObservable.accept(visitor);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/SetBeanObservableInfo.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/SetBeanObservableInfo.java
index 060368e75..ae77e346d 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/SetBeanObservableInfo.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/SetBeanObservableInfo.java
@@ -20,23 +20,23 @@
  * @coverage bindings.rcp.model.beans
  */
 public final class SetBeanObservableInfo extends BeanObservableInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SetBeanObservableInfo(BeanBindableInfo bindableObject,
-      BeanPropertyBindableInfo bindableProperty) {
-    super(bindableObject, bindableProperty);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SetBeanObservableInfo(BeanBindableInfo bindableObject,
+			BeanPropertyBindableInfo bindableProperty) {
+		super(bindableObject, bindableProperty);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getPresentationText() throws Exception {
-    return super.getPresentationText() + "(Set)";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getPresentationText() throws Exception {
+		return super.getPresentationText() + "(Set)";
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/ValueBeanObservableInfo.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/ValueBeanObservableInfo.java
index 1944b4e8e..360f14691 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/ValueBeanObservableInfo.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/ValueBeanObservableInfo.java
@@ -20,13 +20,13 @@
  * @coverage bindings.rcp.model.beans
  */
 public final class ValueBeanObservableInfo extends BeanObservableInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ValueBeanObservableInfo(BeanBindableInfo bindableObject,
-      BeanPropertyBindableInfo bindableProperty) {
-    super(bindableObject, bindableProperty);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ValueBeanObservableInfo(BeanBindableInfo bindableObject,
+			BeanPropertyBindableInfo bindableProperty) {
+		super(bindableObject, bindableProperty);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/WritableListBeanObservableInfo.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/WritableListBeanObservableInfo.java
index 89445ca23..e84451767 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/WritableListBeanObservableInfo.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/WritableListBeanObservableInfo.java
@@ -20,24 +20,24 @@
  * @coverage bindings.rcp.model.beans
  */
 public final class WritableListBeanObservableInfo extends CollectionObservableInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public WritableListBeanObservableInfo(BeanBindableInfo bindableObject,
-      CollectionPropertyBindableInfo bindableProperty,
-      Class<?> elementType) {
-    super(bindableObject, bindableProperty, elementType);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public WritableListBeanObservableInfo(BeanBindableInfo bindableObject,
+			CollectionPropertyBindableInfo bindableProperty,
+			Class<?> elementType) {
+		super(bindableObject, bindableProperty, elementType);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getPresentationPrefix() {
-    return "WritableList";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getPresentationPrefix() {
+		return "WritableList";
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/WritableSetBeanObservableInfo.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/WritableSetBeanObservableInfo.java
index 381075fe9..568b1a242 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/WritableSetBeanObservableInfo.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/WritableSetBeanObservableInfo.java
@@ -20,24 +20,24 @@
  * @coverage bindings.rcp.model.beans
  */
 public final class WritableSetBeanObservableInfo extends CollectionObservableInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public WritableSetBeanObservableInfo(BeanBindableInfo bindableObject,
-      CollectionPropertyBindableInfo bindableProperty,
-      Class<?> elementType) {
-    super(bindableObject, bindableProperty, elementType);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public WritableSetBeanObservableInfo(BeanBindableInfo bindableObject,
+			CollectionPropertyBindableInfo bindableProperty,
+			Class<?> elementType) {
+		super(bindableObject, bindableProperty, elementType);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getPresentationPrefix() {
-    return "WritableSet";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getPresentationPrefix() {
+		return "WritableSet";
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/properties/BeanPropertiesCodeSupport.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/properties/BeanPropertiesCodeSupport.java
index 5f4301540..a7c826c53 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/properties/BeanPropertiesCodeSupport.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/properties/BeanPropertiesCodeSupport.java
@@ -50,174 +50,174 @@
  * @coverage bindings.rcp.model.beans
  */
 public abstract class BeanPropertiesCodeSupport extends ObservableCodeSupport {
-  protected Map<String, Integer> m_observeSignatures = new HashMap<>();
-  protected Set<String> m_observeDetailSignatures = new HashSet<>();
-  protected Class<?> m_parserBeanType;
-  protected String m_parserPropertyReference;
-  protected Class<?> m_parserPropertyType;
-  protected boolean m_parserIsPojo;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public BeanPropertiesCodeSupport() {
-    m_observeSignatures
-        .put(getObservableType() + ".observe(java.lang.Object)", 0);
-    m_observeSignatures
-        .put(getObservableType() + ".observe(org.eclipse.core.databinding.observable.Realm,java.lang.Object)", 1);
-    m_observeDetailSignatures
-        .add(getObservableType() + ".observeDetail(org.eclipse.core.databinding.observable.value.IObservableValue)");
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public final void setBeanType(Class<?> beanType) throws Exception {
-    m_parserBeanType = beanType;
-    if (m_parserBeanType != null
-        && m_parserPropertyReference != null
-        && m_parserPropertyType == null) {
-      String propertyName = StringUtils.remove(m_parserPropertyReference, "\"");
-      for (PropertyDescriptor descriptor : BeanSupport.getPropertyDescriptors(m_parserBeanType)) {
-        if (propertyName.equals(descriptor.getName())) {
-          m_parserPropertyType = descriptor.getPropertyType();
-          break;
-        }
-      }
-    }
-  }
-
-  public final String getParserPropertyReference() {
-    return m_parserPropertyReference;
-  }
-
-  public final void setParserPropertyReference(String propertyReference) {
-    m_parserPropertyReference = propertyReference;
-  }
-
-  public final void setParserPropertyType(Class<?> propertyType) {
-    m_parserPropertyType = propertyType;
-  }
-
-  public final Class<?> getParserPropertyType() {
-    return m_parserPropertyType;
-  }
-
-  public final boolean parserIsPojo() {
-    return m_parserIsPojo;
-  }
-
-  public final void setPojoBindable(boolean isPojoBindable) {
-    m_parserIsPojo = isPojoBindable;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parser
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public AstObjectInfo parseExpression(AstEditor editor,
-      String signature,
-      MethodInvocation invocation,
-      Expression[] arguments,
-      IModelResolver resolver,
-      IDatabindingsProvider provider) throws Exception {
-    BeansObserveTypeContainer container =
-        (BeansObserveTypeContainer) DatabindingsProvider.cast(provider).getContainer(
-            ObserveType.BEANS);
-    // extract bean expression
-    Expression beanExpression;
-    if (m_observeSignatures.containsKey(signature)) {
-      beanExpression = arguments[m_observeSignatures.get(signature)];
-    } else if (m_observeDetailSignatures.contains(signature)) {
-      ObservableInfo masterObservable =
-          BeansObserveTypeContainer.getMasterObservable(editor, resolver, arguments[0]);
-      if (masterObservable == null) {
-        // try find in bean observes...
-        BeanBindableInfo bindableInfo = container.getBindableObject(arguments[0]);
-        PropertyBindableInfo detailProperty = null;
-        for (PropertyBindableInfo property : bindableInfo.getProperties()) {
-          if (DirectObservableInfo.DETAIL_PROPERTY_NAME.equals(
-              property.getPresentation().getText())) {
-            detailProperty = property;
-            break;
-          }
-        }
-        Assert.isNotNull(detailProperty);
-        masterObservable = new DirectObservableInfo(bindableInfo, detailProperty);
-      }
-      Assert.isNotNull(masterObservable);
-      //
-      return createDetailObservable(masterObservable);
-    } else {
-      return null;
-    }
-    // prepare bean model
-    BeanBindableInfo bindableObject = container.getBindableObject(beanExpression);
-    if (bindableObject == null) {
-      AbstractParser.addError(
-          editor,
-          MessageFormat.format(Messages.BeanPropertiesCodeSupport_argumentNotFound, beanExpression),
-          new Throwable());
-      return null;
-    }
-    // create observable
-    return createObservable(editor, bindableObject);
-  }
-
-  /**
-   * @return {@link ObservableInfo} detail model for given master {@link ObservableInfo}.
-   */
-  protected ObservableInfo createDetailObservable(ObservableInfo masterObservable)
-      throws Exception {
-    throw new UnsupportedOperationException();
-  }
-
-  protected ObservableInfo createObservable(AstEditor editor, BeanBindableInfo bindableObject)
-      throws Exception {
-    // prepare property
-    BeanPropertyBindableInfo bindableProperty =
-        (BeanPropertyBindableInfo) bindableObject.resolvePropertyReference(
-            m_parserPropertyReference);
-    if (bindableProperty == null) {
-      AbstractParser.addError(
-          editor,
-          MessageFormat.format(
-              Messages.BeanPropertiesCodeSupport_propertyNotFound,
-              m_parserPropertyReference,
-              bindableObject.getReference()),
-          new Throwable());
-      bindableProperty = new BeanPropertyBindableInfo(bindableObject.getBeanSupport(),
-          null,
-          m_parserPropertyReference,
-          null,
-          m_parserPropertyReference);
-    }
-    //
-    ObservableInfo observable = createObservable(bindableObject, bindableProperty);
-    observable.setCodeSupport(this);
-    return observable;
-  }
-
-  protected abstract String getObservableType();
-
-  /**
-   * @return {@link ObservableInfo} model for given object and property.
-   */
-  protected abstract ObservableInfo createObservable(BeanBindableInfo bindableObject,
-      BeanPropertyBindableInfo bindableProperty) throws Exception;
-
-  /**
-   * @return the source code for given {@link DetailBeanObservableInfo} detail observable.
-   */
-  public String getDetailSourceCode(DetailBeanObservableInfo detailObservable,
-      List<String> lines,
-      CodeGenerationSupport generationSupport) throws Exception {
-    throw new UnsupportedOperationException();
-  }
+	protected Map<String, Integer> m_observeSignatures = new HashMap<>();
+	protected Set<String> m_observeDetailSignatures = new HashSet<>();
+	protected Class<?> m_parserBeanType;
+	protected String m_parserPropertyReference;
+	protected Class<?> m_parserPropertyType;
+	protected boolean m_parserIsPojo;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public BeanPropertiesCodeSupport() {
+		m_observeSignatures
+		.put(getObservableType() + ".observe(java.lang.Object)", 0);
+		m_observeSignatures
+		.put(getObservableType() + ".observe(org.eclipse.core.databinding.observable.Realm,java.lang.Object)", 1);
+		m_observeDetailSignatures
+		.add(getObservableType() + ".observeDetail(org.eclipse.core.databinding.observable.value.IObservableValue)");
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public final void setBeanType(Class<?> beanType) throws Exception {
+		m_parserBeanType = beanType;
+		if (m_parserBeanType != null
+				&& m_parserPropertyReference != null
+				&& m_parserPropertyType == null) {
+			String propertyName = StringUtils.remove(m_parserPropertyReference, "\"");
+			for (PropertyDescriptor descriptor : BeanSupport.getPropertyDescriptors(m_parserBeanType)) {
+				if (propertyName.equals(descriptor.getName())) {
+					m_parserPropertyType = descriptor.getPropertyType();
+					break;
+				}
+			}
+		}
+	}
+
+	public final String getParserPropertyReference() {
+		return m_parserPropertyReference;
+	}
+
+	public final void setParserPropertyReference(String propertyReference) {
+		m_parserPropertyReference = propertyReference;
+	}
+
+	public final void setParserPropertyType(Class<?> propertyType) {
+		m_parserPropertyType = propertyType;
+	}
+
+	public final Class<?> getParserPropertyType() {
+		return m_parserPropertyType;
+	}
+
+	public final boolean parserIsPojo() {
+		return m_parserIsPojo;
+	}
+
+	public final void setPojoBindable(boolean isPojoBindable) {
+		m_parserIsPojo = isPojoBindable;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parser
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public AstObjectInfo parseExpression(AstEditor editor,
+			String signature,
+			MethodInvocation invocation,
+			Expression[] arguments,
+			IModelResolver resolver,
+			IDatabindingsProvider provider) throws Exception {
+		BeansObserveTypeContainer container =
+				(BeansObserveTypeContainer) DatabindingsProvider.cast(provider).getContainer(
+						ObserveType.BEANS);
+		// extract bean expression
+		Expression beanExpression;
+		if (m_observeSignatures.containsKey(signature)) {
+			beanExpression = arguments[m_observeSignatures.get(signature)];
+		} else if (m_observeDetailSignatures.contains(signature)) {
+			ObservableInfo masterObservable =
+					BeansObserveTypeContainer.getMasterObservable(editor, resolver, arguments[0]);
+			if (masterObservable == null) {
+				// try find in bean observes...
+				BeanBindableInfo bindableInfo = container.getBindableObject(arguments[0]);
+				PropertyBindableInfo detailProperty = null;
+				for (PropertyBindableInfo property : bindableInfo.getProperties()) {
+					if (DirectObservableInfo.DETAIL_PROPERTY_NAME.equals(
+							property.getPresentation().getText())) {
+						detailProperty = property;
+						break;
+					}
+				}
+				Assert.isNotNull(detailProperty);
+				masterObservable = new DirectObservableInfo(bindableInfo, detailProperty);
+			}
+			Assert.isNotNull(masterObservable);
+			//
+			return createDetailObservable(masterObservable);
+		} else {
+			return null;
+		}
+		// prepare bean model
+		BeanBindableInfo bindableObject = container.getBindableObject(beanExpression);
+		if (bindableObject == null) {
+			AbstractParser.addError(
+					editor,
+					MessageFormat.format(Messages.BeanPropertiesCodeSupport_argumentNotFound, beanExpression),
+					new Throwable());
+			return null;
+		}
+		// create observable
+		return createObservable(editor, bindableObject);
+	}
+
+	/**
+	 * @return {@link ObservableInfo} detail model for given master {@link ObservableInfo}.
+	 */
+	protected ObservableInfo createDetailObservable(ObservableInfo masterObservable)
+			throws Exception {
+		throw new UnsupportedOperationException();
+	}
+
+	protected ObservableInfo createObservable(AstEditor editor, BeanBindableInfo bindableObject)
+			throws Exception {
+		// prepare property
+		BeanPropertyBindableInfo bindableProperty =
+				(BeanPropertyBindableInfo) bindableObject.resolvePropertyReference(
+						m_parserPropertyReference);
+		if (bindableProperty == null) {
+			AbstractParser.addError(
+					editor,
+					MessageFormat.format(
+							Messages.BeanPropertiesCodeSupport_propertyNotFound,
+							m_parserPropertyReference,
+							bindableObject.getReference()),
+					new Throwable());
+			bindableProperty = new BeanPropertyBindableInfo(bindableObject.getBeanSupport(),
+					null,
+					m_parserPropertyReference,
+					null,
+					m_parserPropertyReference);
+		}
+		//
+		ObservableInfo observable = createObservable(bindableObject, bindableProperty);
+		observable.setCodeSupport(this);
+		return observable;
+	}
+
+	protected abstract String getObservableType();
+
+	/**
+	 * @return {@link ObservableInfo} model for given object and property.
+	 */
+	protected abstract ObservableInfo createObservable(BeanBindableInfo bindableObject,
+			BeanPropertyBindableInfo bindableProperty) throws Exception;
+
+	/**
+	 * @return the source code for given {@link DetailBeanObservableInfo} detail observable.
+	 */
+	public String getDetailSourceCode(DetailBeanObservableInfo detailObservable,
+			List<String> lines,
+			CodeGenerationSupport generationSupport) throws Exception {
+		throw new UnsupportedOperationException();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/properties/ListPropertyCodeSupport.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/properties/ListPropertyCodeSupport.java
index 37f623b6d..9781b1448 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/properties/ListPropertyCodeSupport.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/properties/ListPropertyCodeSupport.java
@@ -29,107 +29,107 @@
  * @coverage bindings.rcp.model.beans
  */
 public class ListPropertyCodeSupport extends BeanPropertiesCodeSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getObservableType() {
-    return "org.eclipse.core.databinding.property.list.IListProperty";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getObservableType() {
+		return "org.eclipse.core.databinding.property.list.IListProperty";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parser
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected ObservableInfo createObservable(BeanBindableInfo bindableObject,
-      BeanPropertyBindableInfo bindableProperty) throws Exception {
-    return new ListBeanObservableInfo(bindableObject, bindableProperty);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parser
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected ObservableInfo createObservable(BeanBindableInfo bindableObject,
+			BeanPropertyBindableInfo bindableProperty) throws Exception {
+		return new ListBeanObservableInfo(bindableObject, bindableProperty);
+	}
 
-  @Override
-  protected ObservableInfo createDetailObservable(ObservableInfo masterObservable) throws Exception {
-    Assert.isNotNull(m_parserPropertyReference);
-    Assert.isNotNull(m_parserPropertyType);
-    DetailListBeanObservableInfo observable =
-        new DetailListBeanObservableInfo(masterObservable,
-            m_parserBeanType,
-            m_parserPropertyReference,
-            m_parserPropertyType);
-    observable.setPojoBindable(parserIsPojo());
-    observable.setCodeSupport(new ListPropertyDetailCodeSupport());
-    return observable;
-  }
+	@Override
+	protected ObservableInfo createDetailObservable(ObservableInfo masterObservable) throws Exception {
+		Assert.isNotNull(m_parserPropertyReference);
+		Assert.isNotNull(m_parserPropertyType);
+		DetailListBeanObservableInfo observable =
+				new DetailListBeanObservableInfo(masterObservable,
+						m_parserBeanType,
+						m_parserPropertyReference,
+						m_parserPropertyType);
+		observable.setPojoBindable(parserIsPojo());
+		observable.setCodeSupport(new ListPropertyDetailCodeSupport());
+		return observable;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void addSourceCode(ObservableInfo observable,
-      List<String> lines,
-      CodeGenerationSupport generationSupport) throws Exception {
-    // prepare variable
-    if (observable.getVariableIdentifier() == null) {
-      observable.setVariableIdentifier(generationSupport.generateLocalName(
-          observable.getBindableProperty().getReference(),
-          observable.getBindableObject().getReference(),
-          "ObserveList"));
-    }
-    //
-    String sourceCode =
-        observable.isPojoBindable()
-            ? "org.eclipse.core.databinding.beans.typed.PojoProperties"
-            : "org.eclipse.core.databinding.beans.typed.BeanProperties";
-    sourceCode += ".list(" + observable.getBindableProperty().getReference() + ")";
-    if (getVariableIdentifier() != null) {
-      if (generationSupport.addModel(this)) {
-        lines.add("org.eclipse.core.databinding.beans.IBeanListProperty "
-            + getVariableIdentifier()
-            + " = "
-            + sourceCode
-            + ";");
-      }
-      sourceCode = getVariableIdentifier();
-    }
-    // add code
-    lines.add("org.eclipse.core.databinding.observable.list.IObservableList "
-        + observable.getVariableIdentifier()
-        + " = "
-        + sourceCode
-        + ".observe("
-        + observable.getBindableObject().getReference()
-        + ");");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void addSourceCode(ObservableInfo observable,
+			List<String> lines,
+			CodeGenerationSupport generationSupport) throws Exception {
+		// prepare variable
+		if (observable.getVariableIdentifier() == null) {
+			observable.setVariableIdentifier(generationSupport.generateLocalName(
+					observable.getBindableProperty().getReference(),
+					observable.getBindableObject().getReference(),
+					"ObserveList"));
+		}
+		//
+		String sourceCode =
+				observable.isPojoBindable()
+				? "org.eclipse.core.databinding.beans.typed.PojoProperties"
+						: "org.eclipse.core.databinding.beans.typed.BeanProperties";
+		sourceCode += ".list(" + observable.getBindableProperty().getReference() + ")";
+		if (getVariableIdentifier() != null) {
+			if (generationSupport.addModel(this)) {
+				lines.add("org.eclipse.core.databinding.beans.IBeanListProperty "
+						+ getVariableIdentifier()
+						+ " = "
+						+ sourceCode
+						+ ";");
+			}
+			sourceCode = getVariableIdentifier();
+		}
+		// add code
+		lines.add("org.eclipse.core.databinding.observable.list.IObservableList "
+				+ observable.getVariableIdentifier()
+				+ " = "
+				+ sourceCode
+				+ ".observe("
+				+ observable.getBindableObject().getReference()
+				+ ");");
+	}
 
-  @Override
-  public String getDetailSourceCode(DetailBeanObservableInfo detailObservable,
-      List<String> lines,
-      CodeGenerationSupport generationSupport) throws Exception {
-    String sourceCode =
-        m_parserIsPojo
-            ? "org.eclipse.core.databinding.beans.typed.PojoProperties"
-            : "org.eclipse.core.databinding.beans.typed.BeanProperties";
-    sourceCode +=
-        ".list("
-            + detailObservable.getDetailPropertyReference()
-            + ", "
-            + CoreUtils.getClassName(detailObservable.getDetailPropertyType())
-            + ".class)";
-    if (getVariableIdentifier() == null) {
-      return sourceCode;
-    }
-    if (generationSupport.addModel(this)) {
-      lines.add("org.eclipse.core.databinding.beans.IBeanListProperty "
-          + getVariableIdentifier()
-          + " = "
-          + sourceCode
-          + ";");
-    }
-    return getVariableIdentifier();
-  }
+	@Override
+	public String getDetailSourceCode(DetailBeanObservableInfo detailObservable,
+			List<String> lines,
+			CodeGenerationSupport generationSupport) throws Exception {
+		String sourceCode =
+				m_parserIsPojo
+				? "org.eclipse.core.databinding.beans.typed.PojoProperties"
+						: "org.eclipse.core.databinding.beans.typed.BeanProperties";
+		sourceCode +=
+				".list("
+						+ detailObservable.getDetailPropertyReference()
+						+ ", "
+						+ CoreUtils.getClassName(detailObservable.getDetailPropertyType())
+						+ ".class)";
+		if (getVariableIdentifier() == null) {
+			return sourceCode;
+		}
+		if (generationSupport.addModel(this)) {
+			lines.add("org.eclipse.core.databinding.beans.IBeanListProperty "
+					+ getVariableIdentifier()
+					+ " = "
+					+ sourceCode
+					+ ";");
+		}
+		return getVariableIdentifier();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/properties/ListPropertyDetailCodeSupport.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/properties/ListPropertyDetailCodeSupport.java
index 1180a2b0f..48cfdad6a 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/properties/ListPropertyDetailCodeSupport.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/properties/ListPropertyDetailCodeSupport.java
@@ -25,47 +25,47 @@
  * @coverage bindings.rcp.model.beans
  */
 public class ListPropertyDetailCodeSupport extends BeanObservableDetailCodeSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void addDetailSourceCode(List<String> lines,
-      CodeGenerationSupport generationSupport,
-      DetailBeanObservableInfo observable,
-      ObservableInfo masterObservable) throws Exception {
-    //
-    String sourceCode =
-        observable.isPojoBindable0()
-            ? "org.eclipse.core.databinding.beans.typed.PojoProperties"
-            : "org.eclipse.core.databinding.beans.typed.BeanProperties";
-    String beanClassCode =
-        observable.getDetailBeanClass() == null
-            ? ""
-            : CoreUtils.getClassName(observable.getDetailBeanClass()) + ".class, ";
-    sourceCode +=
-        ".list("
-            + beanClassCode
-            + observable.getDetailPropertyReference()
-            + ", "
-            + CoreUtils.getClassName(observable.getDetailPropertyType())
-            + ".class)";
-    if (getVariableIdentifier() != null) {
-      lines.add("org.eclipse.core.databinding.beans.IBeanListProperty "
-          + getVariableIdentifier()
-          + " = "
-          + sourceCode
-          + ";");
-      sourceCode = getVariableIdentifier();
-    }
-    // add code
-    lines.add("org.eclipse.core.databinding.observable.list.IObservableList "
-        + observable.getVariableIdentifier()
-        + " = "
-        + sourceCode
-        + ".observeDetail("
-        + masterObservable.getVariableIdentifier()
-        + ");");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void addDetailSourceCode(List<String> lines,
+			CodeGenerationSupport generationSupport,
+			DetailBeanObservableInfo observable,
+			ObservableInfo masterObservable) throws Exception {
+		//
+		String sourceCode =
+				observable.isPojoBindable0()
+				? "org.eclipse.core.databinding.beans.typed.PojoProperties"
+						: "org.eclipse.core.databinding.beans.typed.BeanProperties";
+		String beanClassCode =
+				observable.getDetailBeanClass() == null
+				? ""
+						: CoreUtils.getClassName(observable.getDetailBeanClass()) + ".class, ";
+		sourceCode +=
+				".list("
+						+ beanClassCode
+						+ observable.getDetailPropertyReference()
+						+ ", "
+						+ CoreUtils.getClassName(observable.getDetailPropertyType())
+						+ ".class)";
+		if (getVariableIdentifier() != null) {
+			lines.add("org.eclipse.core.databinding.beans.IBeanListProperty "
+					+ getVariableIdentifier()
+					+ " = "
+					+ sourceCode
+					+ ";");
+			sourceCode = getVariableIdentifier();
+		}
+		// add code
+		lines.add("org.eclipse.core.databinding.observable.list.IObservableList "
+				+ observable.getVariableIdentifier()
+				+ " = "
+				+ sourceCode
+				+ ".observeDetail("
+				+ masterObservable.getVariableIdentifier()
+				+ ");");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/properties/SelfListCodeSupport.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/properties/SelfListCodeSupport.java
index e09a0b8c1..47175c690 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/properties/SelfListCodeSupport.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/properties/SelfListCodeSupport.java
@@ -30,74 +30,74 @@
  * @coverage bindings.rcp.model.beans
  */
 public class SelfListCodeSupport extends BeanPropertiesCodeSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getObservableType() {
-    return "org.eclipse.core.databinding.property.list.IListProperty";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getObservableType() {
+		return "org.eclipse.core.databinding.property.list.IListProperty";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parser
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected ObservableInfo createObservable(AstEditor editor, BeanBindableInfo bindableObject)
-      throws Exception {
-    CollectionPropertyBindableInfo bindableProperty =
-        (CollectionPropertyBindableInfo) bindableObject.resolvePropertyReference(bindableObject.getReference());
-    Assert.isNotNull(bindableProperty);
-    WritableListBeanObservableInfo observable =
-        new WritableListBeanObservableInfo(bindableObject, bindableProperty, m_parserPropertyType);
-    observable.setCodeSupport(this);
-    return observable;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parser
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected ObservableInfo createObservable(AstEditor editor, BeanBindableInfo bindableObject)
+			throws Exception {
+		CollectionPropertyBindableInfo bindableProperty =
+				(CollectionPropertyBindableInfo) bindableObject.resolvePropertyReference(bindableObject.getReference());
+		Assert.isNotNull(bindableProperty);
+		WritableListBeanObservableInfo observable =
+				new WritableListBeanObservableInfo(bindableObject, bindableProperty, m_parserPropertyType);
+		observable.setCodeSupport(this);
+		return observable;
+	}
 
-  @Override
-  protected ObservableInfo createObservable(BeanBindableInfo bindableObject,
-      BeanPropertyBindableInfo bindableProperty) throws Exception {
-    throw new UnsupportedOperationException();
-  }
+	@Override
+	protected ObservableInfo createObservable(BeanBindableInfo bindableObject,
+			BeanPropertyBindableInfo bindableProperty) throws Exception {
+		throw new UnsupportedOperationException();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void addSourceCode(ObservableInfo observable,
-      List<String> lines,
-      CodeGenerationSupport generationSupport) throws Exception {
-    // prepare variable
-    if (observable.getVariableIdentifier() == null) {
-      observable.setVariableIdentifier(generationSupport.generateLocalName("SelfList"));
-    }
-    // add code
-    CollectionObservableInfo collectionObservable = (CollectionObservableInfo) observable;
-    String sourceCode =
-        "org.eclipse.core.databinding.property.Properties.selfList("
-            + CoreUtils.getClassName(collectionObservable.getElementType())
-            + ".class)";
-    if (getVariableIdentifier() != null) {
-      if (generationSupport.addModel(this)) {
-        lines.add("org.eclipse.core.databinding.property.list.IListProperty "
-            + getVariableIdentifier()
-            + " = "
-            + sourceCode
-            + ";");
-      }
-      sourceCode = getVariableIdentifier();
-    }
-    lines.add("org.eclipse.core.databinding.observable.list.IObservableList "
-        + observable.getVariableIdentifier()
-        + " = "
-        + sourceCode
-        + ".observe("
-        + observable.getBindableObject().getReference()
-        + ");");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void addSourceCode(ObservableInfo observable,
+			List<String> lines,
+			CodeGenerationSupport generationSupport) throws Exception {
+		// prepare variable
+		if (observable.getVariableIdentifier() == null) {
+			observable.setVariableIdentifier(generationSupport.generateLocalName("SelfList"));
+		}
+		// add code
+		CollectionObservableInfo collectionObservable = (CollectionObservableInfo) observable;
+		String sourceCode =
+				"org.eclipse.core.databinding.property.Properties.selfList("
+						+ CoreUtils.getClassName(collectionObservable.getElementType())
+						+ ".class)";
+		if (getVariableIdentifier() != null) {
+			if (generationSupport.addModel(this)) {
+				lines.add("org.eclipse.core.databinding.property.list.IListProperty "
+						+ getVariableIdentifier()
+						+ " = "
+						+ sourceCode
+						+ ";");
+			}
+			sourceCode = getVariableIdentifier();
+		}
+		lines.add("org.eclipse.core.databinding.observable.list.IObservableList "
+				+ observable.getVariableIdentifier()
+				+ " = "
+				+ sourceCode
+				+ ".observe("
+				+ observable.getBindableObject().getReference()
+				+ ");");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/properties/SelfSetCodeSupport.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/properties/SelfSetCodeSupport.java
index bfdb2de00..1823d5a03 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/properties/SelfSetCodeSupport.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/properties/SelfSetCodeSupport.java
@@ -30,74 +30,74 @@
  * @coverage bindings.rcp.model.beans
  */
 public class SelfSetCodeSupport extends BeanPropertiesCodeSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getObservableType() {
-    return "org.eclipse.core.databinding.property.set.ISetProperty";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getObservableType() {
+		return "org.eclipse.core.databinding.property.set.ISetProperty";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parser
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected ObservableInfo createObservable(AstEditor editor, BeanBindableInfo bindableObject)
-      throws Exception {
-    CollectionPropertyBindableInfo bindableProperty =
-        (CollectionPropertyBindableInfo) bindableObject.resolvePropertyReference(bindableObject.getReference());
-    Assert.isNotNull(bindableProperty);
-    WritableSetBeanObservableInfo observable =
-        new WritableSetBeanObservableInfo(bindableObject, bindableProperty, m_parserPropertyType);
-    observable.setCodeSupport(this);
-    return observable;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parser
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected ObservableInfo createObservable(AstEditor editor, BeanBindableInfo bindableObject)
+			throws Exception {
+		CollectionPropertyBindableInfo bindableProperty =
+				(CollectionPropertyBindableInfo) bindableObject.resolvePropertyReference(bindableObject.getReference());
+		Assert.isNotNull(bindableProperty);
+		WritableSetBeanObservableInfo observable =
+				new WritableSetBeanObservableInfo(bindableObject, bindableProperty, m_parserPropertyType);
+		observable.setCodeSupport(this);
+		return observable;
+	}
 
-  @Override
-  protected ObservableInfo createObservable(BeanBindableInfo bindableObject,
-      BeanPropertyBindableInfo bindableProperty) throws Exception {
-    throw new UnsupportedOperationException();
-  }
+	@Override
+	protected ObservableInfo createObservable(BeanBindableInfo bindableObject,
+			BeanPropertyBindableInfo bindableProperty) throws Exception {
+		throw new UnsupportedOperationException();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void addSourceCode(ObservableInfo observable,
-      List<String> lines,
-      CodeGenerationSupport generationSupport) throws Exception {
-    // prepare variable
-    if (observable.getVariableIdentifier() == null) {
-      observable.setVariableIdentifier(generationSupport.generateLocalName("SelfSet"));
-    }
-    // add code
-    CollectionObservableInfo collectionObservable = (CollectionObservableInfo) observable;
-    String sourceCode =
-        "org.eclipse.core.databinding.property.Properties.selfSet("
-            + CoreUtils.getClassName(collectionObservable.getElementType())
-            + ".class)";
-    if (getVariableIdentifier() != null) {
-      if (generationSupport.addModel(this)) {
-        lines.add("org.eclipse.core.databinding.property.set.ISetProperty "
-            + getVariableIdentifier()
-            + " = "
-            + sourceCode
-            + ";");
-      }
-      sourceCode = getVariableIdentifier();
-    }
-    lines.add("org.eclipse.core.databinding.observable.set.IObservableSet "
-        + observable.getVariableIdentifier()
-        + " = "
-        + sourceCode
-        + ".observe("
-        + observable.getBindableObject().getReference()
-        + ");");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void addSourceCode(ObservableInfo observable,
+			List<String> lines,
+			CodeGenerationSupport generationSupport) throws Exception {
+		// prepare variable
+		if (observable.getVariableIdentifier() == null) {
+			observable.setVariableIdentifier(generationSupport.generateLocalName("SelfSet"));
+		}
+		// add code
+		CollectionObservableInfo collectionObservable = (CollectionObservableInfo) observable;
+		String sourceCode =
+				"org.eclipse.core.databinding.property.Properties.selfSet("
+						+ CoreUtils.getClassName(collectionObservable.getElementType())
+						+ ".class)";
+		if (getVariableIdentifier() != null) {
+			if (generationSupport.addModel(this)) {
+				lines.add("org.eclipse.core.databinding.property.set.ISetProperty "
+						+ getVariableIdentifier()
+						+ " = "
+						+ sourceCode
+						+ ";");
+			}
+			sourceCode = getVariableIdentifier();
+		}
+		lines.add("org.eclipse.core.databinding.observable.set.IObservableSet "
+				+ observable.getVariableIdentifier()
+				+ " = "
+				+ sourceCode
+				+ ".observe("
+				+ observable.getBindableObject().getReference()
+				+ ");");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/properties/SetPropertyCodeSupport.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/properties/SetPropertyCodeSupport.java
index 5bb36fe95..67b089dee 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/properties/SetPropertyCodeSupport.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/properties/SetPropertyCodeSupport.java
@@ -29,107 +29,107 @@
  * @coverage bindings.rcp.model.beans
  */
 public class SetPropertyCodeSupport extends BeanPropertiesCodeSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getObservableType() {
-    return "org.eclipse.core.databinding.property.set.ISetProperty";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getObservableType() {
+		return "org.eclipse.core.databinding.property.set.ISetProperty";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parser
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected ObservableInfo createObservable(BeanBindableInfo bindableObject,
-      BeanPropertyBindableInfo bindableProperty) throws Exception {
-    return new SetBeanObservableInfo(bindableObject, bindableProperty);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parser
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected ObservableInfo createObservable(BeanBindableInfo bindableObject,
+			BeanPropertyBindableInfo bindableProperty) throws Exception {
+		return new SetBeanObservableInfo(bindableObject, bindableProperty);
+	}
 
-  @Override
-  protected ObservableInfo createDetailObservable(ObservableInfo masterObservable) throws Exception {
-    Assert.isNotNull(m_parserPropertyReference);
-    Assert.isNotNull(m_parserPropertyType);
-    DetailSetBeanObservableInfo observable =
-        new DetailSetBeanObservableInfo(masterObservable,
-            m_parserBeanType,
-            m_parserPropertyReference,
-            m_parserPropertyType);
-    observable.setPojoBindable(parserIsPojo());
-    observable.setCodeSupport(new SetPropertyDetailCodeSupport());
-    return observable;
-  }
+	@Override
+	protected ObservableInfo createDetailObservable(ObservableInfo masterObservable) throws Exception {
+		Assert.isNotNull(m_parserPropertyReference);
+		Assert.isNotNull(m_parserPropertyType);
+		DetailSetBeanObservableInfo observable =
+				new DetailSetBeanObservableInfo(masterObservable,
+						m_parserBeanType,
+						m_parserPropertyReference,
+						m_parserPropertyType);
+		observable.setPojoBindable(parserIsPojo());
+		observable.setCodeSupport(new SetPropertyDetailCodeSupport());
+		return observable;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void addSourceCode(ObservableInfo observable,
-      List<String> lines,
-      CodeGenerationSupport generationSupport) throws Exception {
-    // prepare variable
-    if (observable.getVariableIdentifier() == null) {
-      observable.setVariableIdentifier(generationSupport.generateLocalName(
-          observable.getBindableProperty().getReference(),
-          observable.getBindableObject().getReference(),
-          "ObserveSet"));
-    }
-    //
-    String sourceCode =
-        observable.isPojoBindable()
-            ? "org.eclipse.core.databinding.beans.typed.PojoProperties"
-            : "org.eclipse.core.databinding.beans.typed.BeanProperties";
-    sourceCode += ".set(" + observable.getBindableProperty().getReference() + ")";
-    if (getVariableIdentifier() != null) {
-      if (generationSupport.addModel(this)) {
-        lines.add("org.eclipse.core.databinding.beans.IBeanSetProperty "
-            + getVariableIdentifier()
-            + " = "
-            + sourceCode
-            + ";");
-      }
-      sourceCode = getVariableIdentifier();
-    }
-    // add code
-    lines.add("org.eclipse.core.databinding.observable.set.IObservableSet "
-        + observable.getVariableIdentifier()
-        + " = "
-        + sourceCode
-        + ".observe("
-        + observable.getBindableObject().getReference()
-        + ");");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void addSourceCode(ObservableInfo observable,
+			List<String> lines,
+			CodeGenerationSupport generationSupport) throws Exception {
+		// prepare variable
+		if (observable.getVariableIdentifier() == null) {
+			observable.setVariableIdentifier(generationSupport.generateLocalName(
+					observable.getBindableProperty().getReference(),
+					observable.getBindableObject().getReference(),
+					"ObserveSet"));
+		}
+		//
+		String sourceCode =
+				observable.isPojoBindable()
+				? "org.eclipse.core.databinding.beans.typed.PojoProperties"
+						: "org.eclipse.core.databinding.beans.typed.BeanProperties";
+		sourceCode += ".set(" + observable.getBindableProperty().getReference() + ")";
+		if (getVariableIdentifier() != null) {
+			if (generationSupport.addModel(this)) {
+				lines.add("org.eclipse.core.databinding.beans.IBeanSetProperty "
+						+ getVariableIdentifier()
+						+ " = "
+						+ sourceCode
+						+ ";");
+			}
+			sourceCode = getVariableIdentifier();
+		}
+		// add code
+		lines.add("org.eclipse.core.databinding.observable.set.IObservableSet "
+				+ observable.getVariableIdentifier()
+				+ " = "
+				+ sourceCode
+				+ ".observe("
+				+ observable.getBindableObject().getReference()
+				+ ");");
+	}
 
-  @Override
-  public String getDetailSourceCode(DetailBeanObservableInfo detailObservable,
-      List<String> lines,
-      CodeGenerationSupport generationSupport) throws Exception {
-    String sourceCode =
-        m_parserIsPojo
-            ? "org.eclipse.core.databinding.beans.typed.PojoProperties"
-            : "org.eclipse.core.databinding.beans.typed.BeanProperties";
-    sourceCode +=
-        ".set("
-            + detailObservable.getDetailPropertyReference()
-            + ", "
-            + CoreUtils.getClassName(detailObservable.getDetailPropertyType())
-            + ".class)";
-    if (getVariableIdentifier() == null) {
-      return sourceCode;
-    }
-    if (generationSupport.addModel(this)) {
-      lines.add("org.eclipse.core.databinding.observable.set.IObservableSet "
-          + getVariableIdentifier()
-          + " = "
-          + sourceCode
-          + ";");
-    }
-    return getVariableIdentifier();
-  }
+	@Override
+	public String getDetailSourceCode(DetailBeanObservableInfo detailObservable,
+			List<String> lines,
+			CodeGenerationSupport generationSupport) throws Exception {
+		String sourceCode =
+				m_parserIsPojo
+				? "org.eclipse.core.databinding.beans.typed.PojoProperties"
+						: "org.eclipse.core.databinding.beans.typed.BeanProperties";
+		sourceCode +=
+				".set("
+						+ detailObservable.getDetailPropertyReference()
+						+ ", "
+						+ CoreUtils.getClassName(detailObservable.getDetailPropertyType())
+						+ ".class)";
+		if (getVariableIdentifier() == null) {
+			return sourceCode;
+		}
+		if (generationSupport.addModel(this)) {
+			lines.add("org.eclipse.core.databinding.observable.set.IObservableSet "
+					+ getVariableIdentifier()
+					+ " = "
+					+ sourceCode
+					+ ";");
+		}
+		return getVariableIdentifier();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/properties/SetPropertyDetailCodeSupport.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/properties/SetPropertyDetailCodeSupport.java
index d7602771f..39001ae3e 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/properties/SetPropertyDetailCodeSupport.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/properties/SetPropertyDetailCodeSupport.java
@@ -25,46 +25,46 @@
  * @coverage bindings.rcp.model.beans
  */
 public class SetPropertyDetailCodeSupport extends BeanObservableDetailCodeSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void addDetailSourceCode(List<String> lines,
-      CodeGenerationSupport generationSupport,
-      DetailBeanObservableInfo observable,
-      ObservableInfo masterObservable) throws Exception {
-    String sourceCode =
-        observable.isPojoBindable0()
-            ? "org.eclipse.core.databinding.beans.typed.PojoProperties"
-            : "org.eclipse.core.databinding.beans.typed.BeanProperties";
-    String beanClassCode =
-        observable.getDetailBeanClass() == null
-            ? ""
-            : CoreUtils.getClassName(observable.getDetailBeanClass()) + ".class, ";
-    sourceCode +=
-        ".set("
-            + beanClassCode
-            + observable.getDetailPropertyReference()
-            + ", "
-            + CoreUtils.getClassName(observable.getDetailPropertyType())
-            + ".class)";
-    if (getVariableIdentifier() != null) {
-      lines.add("org.eclipse.core.databinding.beans.IBeanSetProperty "
-          + getVariableIdentifier()
-          + " = "
-          + sourceCode
-          + ";");
-      sourceCode = getVariableIdentifier();
-    }
-    // add code
-    lines.add("org.eclipse.core.databinding.observable.set.IObservableSet "
-        + observable.getVariableIdentifier()
-        + " = "
-        + sourceCode
-        + ".observeDetail("
-        + masterObservable.getVariableIdentifier()
-        + ");");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void addDetailSourceCode(List<String> lines,
+			CodeGenerationSupport generationSupport,
+			DetailBeanObservableInfo observable,
+			ObservableInfo masterObservable) throws Exception {
+		String sourceCode =
+				observable.isPojoBindable0()
+				? "org.eclipse.core.databinding.beans.typed.PojoProperties"
+						: "org.eclipse.core.databinding.beans.typed.BeanProperties";
+		String beanClassCode =
+				observable.getDetailBeanClass() == null
+				? ""
+						: CoreUtils.getClassName(observable.getDetailBeanClass()) + ".class, ";
+		sourceCode +=
+				".set("
+						+ beanClassCode
+						+ observable.getDetailPropertyReference()
+						+ ", "
+						+ CoreUtils.getClassName(observable.getDetailPropertyType())
+						+ ".class)";
+		if (getVariableIdentifier() != null) {
+			lines.add("org.eclipse.core.databinding.beans.IBeanSetProperty "
+					+ getVariableIdentifier()
+					+ " = "
+					+ sourceCode
+					+ ";");
+			sourceCode = getVariableIdentifier();
+		}
+		// add code
+		lines.add("org.eclipse.core.databinding.observable.set.IObservableSet "
+				+ observable.getVariableIdentifier()
+				+ " = "
+				+ sourceCode
+				+ ".observeDetail("
+				+ masterObservable.getVariableIdentifier()
+				+ ");");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/properties/ValuePropertyCodeSupport.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/properties/ValuePropertyCodeSupport.java
index acb6cbba7..8e8b1f6e7 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/properties/ValuePropertyCodeSupport.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/properties/ValuePropertyCodeSupport.java
@@ -29,138 +29,138 @@
  * @coverage bindings.rcp.model.beans
  */
 public class ValuePropertyCodeSupport extends BeanPropertiesCodeSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ValuePropertyCodeSupport() {
-    m_observeDetailSignatures
-        .add(getObservableType() + ".observeDetail(org.eclipse.core.databinding.observable.list.IObservableList)");
-    m_observeDetailSignatures
-        .add(getObservableType() + ".observeDetail(org.eclipse.core.databinding.observable.set.IObservableSet)");
-    m_observeDetailSignatures
-        .add(getObservableType() + ".observeDetail(org.eclipse.core.databinding.observable.map.IObservableMap)");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ValuePropertyCodeSupport() {
+		m_observeDetailSignatures
+		.add(getObservableType() + ".observeDetail(org.eclipse.core.databinding.observable.list.IObservableList)");
+		m_observeDetailSignatures
+		.add(getObservableType() + ".observeDetail(org.eclipse.core.databinding.observable.set.IObservableSet)");
+		m_observeDetailSignatures
+		.add(getObservableType() + ".observeDetail(org.eclipse.core.databinding.observable.map.IObservableMap)");
+	}
 
-  @Override
-  protected String getObservableType() {
-    return "org.eclipse.core.databinding.property.value.IValueProperty";
-  }
+	@Override
+	protected String getObservableType() {
+		return "org.eclipse.core.databinding.property.value.IValueProperty";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parser
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected ObservableInfo createObservable(BeanBindableInfo bindableObject,
-      BeanPropertyBindableInfo bindableProperty) throws Exception {
-    return new ValueBeanObservableInfo(bindableObject, bindableProperty);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parser
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected ObservableInfo createObservable(BeanBindableInfo bindableObject,
+			BeanPropertyBindableInfo bindableProperty) throws Exception {
+		return new ValueBeanObservableInfo(bindableObject, bindableProperty);
+	}
 
-  @Override
-  protected ObservableInfo createDetailObservable(ObservableInfo masterObservable) throws Exception {
-    Assert.isNotNull(m_parserPropertyReference);
-    Assert.isNotNull(m_parserPropertyType);
-    DetailValueBeanObservableInfo observable =
-        new DetailValueBeanObservableInfo(masterObservable,
-            m_parserBeanType,
-            m_parserPropertyReference,
-            m_parserPropertyType);
-    observable.setPojoBindable(parserIsPojo());
-    observable.setCodeSupport(new ValuePropertyDetailCodeSupport());
-    return observable;
-  }
+	@Override
+	protected ObservableInfo createDetailObservable(ObservableInfo masterObservable) throws Exception {
+		Assert.isNotNull(m_parserPropertyReference);
+		Assert.isNotNull(m_parserPropertyType);
+		DetailValueBeanObservableInfo observable =
+				new DetailValueBeanObservableInfo(masterObservable,
+						m_parserBeanType,
+						m_parserPropertyReference,
+						m_parserPropertyType);
+		observable.setPojoBindable(parserIsPojo());
+		observable.setCodeSupport(new ValuePropertyDetailCodeSupport());
+		return observable;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void addSourceCode(ObservableInfo observable,
-      List<String> lines,
-      CodeGenerationSupport generationSupport) throws Exception {
-    // special case - ValueProperty use without observable
-    if (observable == null) {
-      if (getVariableIdentifier() == null) {
-        setVariableIdentifier(generationSupport.generateLocalName("valueProperty"));
-      }
-      if (generationSupport.addModel(this)) {
-        String sourceCode =
-            m_parserIsPojo
-                ? "org.eclipse.core.databinding.beans.typed.PojoProperties"
-                : "org.eclipse.core.databinding.beans.typed.BeanProperties";
-        lines.add("org.eclipse.core.databinding.beans.IBeanValueProperty "
-            + getVariableIdentifier()
-            + " = "
-            + sourceCode
-            + ".value("
-            + m_parserPropertyReference
-            + ");");
-      }
-      return;
-    }
-    // prepare variable
-    if (observable.getVariableIdentifier() == null) {
-      observable.setVariableIdentifier(generationSupport.generateLocalName(
-          observable.getBindableProperty().getReference(),
-          observable.getBindableObject().getReference(),
-          "ObserveValue"));
-    }
-    //
-    String sourceCode =
-        observable.isPojoBindable()
-            ? "org.eclipse.core.databinding.beans.typed.PojoProperties"
-            : "org.eclipse.core.databinding.beans.typed.BeanProperties";
-    sourceCode += ".value(" + observable.getBindableProperty().getReference() + ")";
-    if (getVariableIdentifier() != null) {
-      if (generationSupport.addModel(this)) {
-        if (generationSupport.addModel(this)) {
-          lines.add("org.eclipse.core.databinding.beans.IBeanValueProperty "
-              + getVariableIdentifier()
-              + " = "
-              + sourceCode
-              + ";");
-        }
-      }
-      sourceCode = getVariableIdentifier();
-    }
-    // add code
-    lines.add("org.eclipse.core.databinding.observable.value.IObservableValue "
-        + observable.getVariableIdentifier()
-        + " = "
-        + sourceCode
-        + ".observe("
-        + observable.getBindableObject().getReference()
-        + ");");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void addSourceCode(ObservableInfo observable,
+			List<String> lines,
+			CodeGenerationSupport generationSupport) throws Exception {
+		// special case - ValueProperty use without observable
+		if (observable == null) {
+			if (getVariableIdentifier() == null) {
+				setVariableIdentifier(generationSupport.generateLocalName("valueProperty"));
+			}
+			if (generationSupport.addModel(this)) {
+				String sourceCode =
+						m_parserIsPojo
+						? "org.eclipse.core.databinding.beans.typed.PojoProperties"
+								: "org.eclipse.core.databinding.beans.typed.BeanProperties";
+				lines.add("org.eclipse.core.databinding.beans.IBeanValueProperty "
+						+ getVariableIdentifier()
+						+ " = "
+						+ sourceCode
+						+ ".value("
+						+ m_parserPropertyReference
+						+ ");");
+			}
+			return;
+		}
+		// prepare variable
+		if (observable.getVariableIdentifier() == null) {
+			observable.setVariableIdentifier(generationSupport.generateLocalName(
+					observable.getBindableProperty().getReference(),
+					observable.getBindableObject().getReference(),
+					"ObserveValue"));
+		}
+		//
+		String sourceCode =
+				observable.isPojoBindable()
+				? "org.eclipse.core.databinding.beans.typed.PojoProperties"
+						: "org.eclipse.core.databinding.beans.typed.BeanProperties";
+		sourceCode += ".value(" + observable.getBindableProperty().getReference() + ")";
+		if (getVariableIdentifier() != null) {
+			if (generationSupport.addModel(this)) {
+				if (generationSupport.addModel(this)) {
+					lines.add("org.eclipse.core.databinding.beans.IBeanValueProperty "
+							+ getVariableIdentifier()
+							+ " = "
+							+ sourceCode
+							+ ";");
+				}
+			}
+			sourceCode = getVariableIdentifier();
+		}
+		// add code
+		lines.add("org.eclipse.core.databinding.observable.value.IObservableValue "
+				+ observable.getVariableIdentifier()
+				+ " = "
+				+ sourceCode
+				+ ".observe("
+				+ observable.getBindableObject().getReference()
+				+ ");");
+	}
 
-  @Override
-  public String getDetailSourceCode(DetailBeanObservableInfo detailObservable,
-      List<String> lines,
-      CodeGenerationSupport generationSupport) throws Exception {
-    String sourceCode =
-        m_parserIsPojo
-            ? "org.eclipse.core.databinding.beans.typed.PojoProperties"
-            : "org.eclipse.core.databinding.beans.typed.BeanProperties";
-    sourceCode +=
-        ".value("
-            + detailObservable.getDetailPropertyReference()
-            + ", "
-            + CoreUtils.getClassName(detailObservable.getDetailPropertyType())
-            + ".class)";
-    if (getVariableIdentifier() == null) {
-      return sourceCode;
-    }
-    if (generationSupport.addModel(this)) {
-      lines.add("org.eclipse.core.databinding.beans.IBeanValueProperty "
-          + getVariableIdentifier()
-          + " = "
-          + sourceCode
-          + ";");
-    }
-    return getVariableIdentifier();
-  }
+	@Override
+	public String getDetailSourceCode(DetailBeanObservableInfo detailObservable,
+			List<String> lines,
+			CodeGenerationSupport generationSupport) throws Exception {
+		String sourceCode =
+				m_parserIsPojo
+				? "org.eclipse.core.databinding.beans.typed.PojoProperties"
+						: "org.eclipse.core.databinding.beans.typed.BeanProperties";
+		sourceCode +=
+				".value("
+						+ detailObservable.getDetailPropertyReference()
+						+ ", "
+						+ CoreUtils.getClassName(detailObservable.getDetailPropertyType())
+						+ ".class)";
+		if (getVariableIdentifier() == null) {
+			return sourceCode;
+		}
+		if (generationSupport.addModel(this)) {
+			lines.add("org.eclipse.core.databinding.beans.IBeanValueProperty "
+					+ getVariableIdentifier()
+					+ " = "
+					+ sourceCode
+					+ ";");
+		}
+		return getVariableIdentifier();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/properties/ValuePropertyDetailCodeSupport.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/properties/ValuePropertyDetailCodeSupport.java
index e7a991f14..376012c54 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/properties/ValuePropertyDetailCodeSupport.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/properties/ValuePropertyDetailCodeSupport.java
@@ -25,46 +25,46 @@
  * @coverage bindings.rcp.model.beans
  */
 public class ValuePropertyDetailCodeSupport extends BeanObservableDetailCodeSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void addDetailSourceCode(List<String> lines,
-      CodeGenerationSupport generationSupport,
-      DetailBeanObservableInfo observable,
-      ObservableInfo masterObservable) throws Exception {
-    String sourceCode =
-        observable.isPojoBindable0()
-            ? "org.eclipse.core.databinding.beans.typed.PojoProperties"
-            : "org.eclipse.core.databinding.beans.typed.BeanProperties";
-    String beanClassCode =
-        observable.getDetailBeanClass() == null
-            ? ""
-            : CoreUtils.getClassName(observable.getDetailBeanClass()) + ".class, ";
-    sourceCode +=
-        ".value("
-            + beanClassCode
-            + observable.getDetailPropertyReference()
-            + ", "
-            + CoreUtils.getClassName(observable.getDetailPropertyType())
-            + ".class)";
-    if (getVariableIdentifier() != null) {
-      lines.add("org.eclipse.core.databinding.beans.IBeanValueProperty "
-          + getVariableIdentifier()
-          + " = "
-          + sourceCode
-          + ";");
-      sourceCode = getVariableIdentifier();
-    }
-    // add code
-    lines.add("org.eclipse.core.databinding.observable.value.IObservableValue "
-        + observable.getVariableIdentifier()
-        + " = "
-        + sourceCode
-        + ".observeDetail("
-        + masterObservable.getVariableIdentifier()
-        + ");");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void addDetailSourceCode(List<String> lines,
+			CodeGenerationSupport generationSupport,
+			DetailBeanObservableInfo observable,
+			ObservableInfo masterObservable) throws Exception {
+		String sourceCode =
+				observable.isPojoBindable0()
+				? "org.eclipse.core.databinding.beans.typed.PojoProperties"
+						: "org.eclipse.core.databinding.beans.typed.BeanProperties";
+		String beanClassCode =
+				observable.getDetailBeanClass() == null
+				? ""
+						: CoreUtils.getClassName(observable.getDetailBeanClass()) + ".class, ";
+		sourceCode +=
+				".value("
+						+ beanClassCode
+						+ observable.getDetailPropertyReference()
+						+ ", "
+						+ CoreUtils.getClassName(observable.getDetailPropertyType())
+						+ ".class)";
+		if (getVariableIdentifier() != null) {
+			lines.add("org.eclipse.core.databinding.beans.IBeanValueProperty "
+					+ getVariableIdentifier()
+					+ " = "
+					+ sourceCode
+					+ ";");
+			sourceCode = getVariableIdentifier();
+		}
+		// add code
+		lines.add("org.eclipse.core.databinding.observable.value.IObservableValue "
+				+ observable.getVariableIdentifier()
+				+ " = "
+				+ sourceCode
+				+ ".observeDetail("
+				+ masterObservable.getVariableIdentifier()
+				+ ");");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/standard/BeanObservableDetailCodeSupport.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/standard/BeanObservableDetailCodeSupport.java
index 265d27050..88bb19115 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/standard/BeanObservableDetailCodeSupport.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/standard/BeanObservableDetailCodeSupport.java
@@ -24,35 +24,35 @@
  * @coverage bindings.rcp.model.beans
  */
 public abstract class BeanObservableDetailCodeSupport extends ObservableCodeSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void addSourceCode(ObservableInfo observable,
-      List<String> lines,
-      CodeGenerationSupport generationSupport) throws Exception {
-    DetailBeanObservableInfo detailObservable = (DetailBeanObservableInfo) observable;
-    ObservableInfo masterObservable = detailObservable.getMasterObservable();
-    // prepare variable
-    if (observable.getVariableIdentifier() == null) {
-      observable.setVariableIdentifier(generationSupport.generateLocalName(
-          observable.getBindableObject().getReference(),
-          detailObservable.getDetailPropertyReference(),
-          "ObserveDetail" + detailObservable.getPresentationPrefix()));
-    }
-    // add master observable code
-    generationSupport.addSourceCode(masterObservable, lines);
-    // add code
-    addDetailSourceCode(lines, generationSupport, detailObservable, masterObservable);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void addSourceCode(ObservableInfo observable,
+			List<String> lines,
+			CodeGenerationSupport generationSupport) throws Exception {
+		DetailBeanObservableInfo detailObservable = (DetailBeanObservableInfo) observable;
+		ObservableInfo masterObservable = detailObservable.getMasterObservable();
+		// prepare variable
+		if (observable.getVariableIdentifier() == null) {
+			observable.setVariableIdentifier(generationSupport.generateLocalName(
+					observable.getBindableObject().getReference(),
+					detailObservable.getDetailPropertyReference(),
+					"ObserveDetail" + detailObservable.getPresentationPrefix()));
+		}
+		// add master observable code
+		generationSupport.addSourceCode(masterObservable, lines);
+		// add code
+		addDetailSourceCode(lines, generationSupport, detailObservable, masterObservable);
+	}
 
-  /**
-   * @return the source code for create this observable.
-   */
-  protected abstract void addDetailSourceCode(List<String> lines,
-      CodeGenerationSupport generationSupport,
-      DetailBeanObservableInfo observable,
-      ObservableInfo masterObservable) throws Exception;
+	/**
+	 * @return the source code for create this observable.
+	 */
+	protected abstract void addDetailSourceCode(List<String> lines,
+			CodeGenerationSupport generationSupport,
+			DetailBeanObservableInfo observable,
+			ObservableInfo masterObservable) throws Exception;
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/standard/BeanObservableDetailListCodeSupport.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/standard/BeanObservableDetailListCodeSupport.java
index 24ca1d0cc..6cd9f9871 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/standard/BeanObservableDetailListCodeSupport.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/standard/BeanObservableDetailListCodeSupport.java
@@ -27,35 +27,35 @@
  * @coverage bindings.rcp.model.beans
  */
 public class BeanObservableDetailListCodeSupport extends BeanObservableDetailCodeSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void addDetailSourceCode(List<String> lines,
-      CodeGenerationSupport generationSupport,
-      DetailBeanObservableInfo observable,
-      ObservableInfo masterObservable) throws Exception {
-    boolean dontUseDeprecatedMethods =
-        Activator.getStore().getBoolean(IPreferenceConstants.DONT_USE_DEPRECATED_METHODS);
-    String realmCode =
-        dontUseDeprecatedMethods
-            ? ""
-            : "org.eclipse.core.databinding.observable.Realm.getDefault(), ";
-    String observeMethod =
-        observable.isPojoBindable0()
-            ? " = " + DataBindingsCodeUtils.getPojoObservablesClass() + ".observeDetailList("
-            : " = org.eclipse.core.databinding.beans.BeansObservables.observeDetailList(";
-    lines.add("org.eclipse.core.databinding.observable.list.IObservableList "
-        + observable.getVariableIdentifier()
-        + observeMethod
-        + realmCode
-        + masterObservable.getVariableIdentifier()
-        + ", "
-        + observable.getDetailPropertyReference()
-        + ", "
-        + CoreUtils.getClassName(observable.getDetailPropertyType())
-        + ".class);");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void addDetailSourceCode(List<String> lines,
+			CodeGenerationSupport generationSupport,
+			DetailBeanObservableInfo observable,
+			ObservableInfo masterObservable) throws Exception {
+		boolean dontUseDeprecatedMethods =
+				Activator.getStore().getBoolean(IPreferenceConstants.DONT_USE_DEPRECATED_METHODS);
+		String realmCode =
+				dontUseDeprecatedMethods
+				? ""
+						: "org.eclipse.core.databinding.observable.Realm.getDefault(), ";
+		String observeMethod =
+				observable.isPojoBindable0()
+				? " = " + DataBindingsCodeUtils.getPojoObservablesClass() + ".observeDetailList("
+						: " = org.eclipse.core.databinding.beans.BeansObservables.observeDetailList(";
+		lines.add("org.eclipse.core.databinding.observable.list.IObservableList "
+				+ observable.getVariableIdentifier()
+				+ observeMethod
+				+ realmCode
+				+ masterObservable.getVariableIdentifier()
+				+ ", "
+						+ observable.getDetailPropertyReference()
+						+ ", "
+						+ CoreUtils.getClassName(observable.getDetailPropertyType())
+						+ ".class);");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/standard/BeanObservableDetailSetCodeSupport.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/standard/BeanObservableDetailSetCodeSupport.java
index 2868c084a..feec585a1 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/standard/BeanObservableDetailSetCodeSupport.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/standard/BeanObservableDetailSetCodeSupport.java
@@ -27,35 +27,35 @@
  * @coverage bindings.rcp.model.beans
  */
 public class BeanObservableDetailSetCodeSupport extends BeanObservableDetailCodeSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void addDetailSourceCode(List<String> lines,
-      CodeGenerationSupport generationSupport,
-      DetailBeanObservableInfo observable,
-      ObservableInfo masterObservable) throws Exception {
-    boolean dontUseDeprecatedMethods =
-        Activator.getStore().getBoolean(IPreferenceConstants.DONT_USE_DEPRECATED_METHODS);
-    String realmCode =
-        dontUseDeprecatedMethods
-            ? ""
-            : "org.eclipse.core.databinding.observable.Realm.getDefault(), ";
-    String observeMethod =
-        observable.isPojoBindable0()
-            ? " = " + DataBindingsCodeUtils.getPojoObservablesClass() + ".observeDetailSet("
-            : " = org.eclipse.core.databinding.beans.BeansObservables.observeDetailSet(";
-    lines.add("org.eclipse.core.databinding.observable.set.IObservableSet "
-        + observable.getVariableIdentifier()
-        + observeMethod
-        + realmCode
-        + masterObservable.getVariableIdentifier()
-        + ", "
-        + observable.getDetailPropertyReference()
-        + ", "
-        + CoreUtils.getClassName(observable.getDetailPropertyType())
-        + ".class);");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void addDetailSourceCode(List<String> lines,
+			CodeGenerationSupport generationSupport,
+			DetailBeanObservableInfo observable,
+			ObservableInfo masterObservable) throws Exception {
+		boolean dontUseDeprecatedMethods =
+				Activator.getStore().getBoolean(IPreferenceConstants.DONT_USE_DEPRECATED_METHODS);
+		String realmCode =
+				dontUseDeprecatedMethods
+				? ""
+						: "org.eclipse.core.databinding.observable.Realm.getDefault(), ";
+		String observeMethod =
+				observable.isPojoBindable0()
+				? " = " + DataBindingsCodeUtils.getPojoObservablesClass() + ".observeDetailSet("
+						: " = org.eclipse.core.databinding.beans.BeansObservables.observeDetailSet(";
+		lines.add("org.eclipse.core.databinding.observable.set.IObservableSet "
+				+ observable.getVariableIdentifier()
+				+ observeMethod
+				+ realmCode
+				+ masterObservable.getVariableIdentifier()
+				+ ", "
+						+ observable.getDetailPropertyReference()
+						+ ", "
+						+ CoreUtils.getClassName(observable.getDetailPropertyType())
+						+ ".class);");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/standard/BeanObservableDetailValueCodeSupport.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/standard/BeanObservableDetailValueCodeSupport.java
index 764d67826..1f9991676 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/standard/BeanObservableDetailValueCodeSupport.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/standard/BeanObservableDetailValueCodeSupport.java
@@ -27,40 +27,40 @@
  * @coverage bindings.rcp.model.beans
  */
 public class BeanObservableDetailValueCodeSupport extends BeanObservableDetailCodeSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void addDetailSourceCode(List<String> lines,
-      CodeGenerationSupport generationSupport,
-      DetailBeanObservableInfo observable,
-      ObservableInfo masterObservable) throws Exception {
-    boolean dontUseDeprecatedMethods =
-        Activator.getStore().getBoolean(IPreferenceConstants.DONT_USE_DEPRECATED_METHODS);
-    String realmCode =
-        dontUseDeprecatedMethods
-            ? ""
-            : "org.eclipse.core.databinding.observable.Realm.getDefault(), ";
-    String observeMethod =
-        observable.isPojoBindable0()
-            ? " = " + DataBindingsCodeUtils.getPojoObservablesClass() + ".observeDetailValue("
-            : " = org.eclipse.core.databinding.beans.BeansObservables.observeDetailValue(";
-    String masterTypeCode =
-        observable.getDetailBeanClass() == null || observable.isPojoBindable0()
-            ? ""
-            : CoreUtils.getClassName(observable.getDetailBeanClass()) + ".class, ";
-    lines.add("org.eclipse.core.databinding.observable.value.IObservableValue "
-        + observable.getVariableIdentifier()
-        + observeMethod
-        + realmCode
-        + masterObservable.getVariableIdentifier()
-        + ", "
-        + masterTypeCode
-        + observable.getDetailPropertyReference()
-        + ", "
-        + CoreUtils.getClassName(observable.getDetailPropertyType())
-        + ".class);");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void addDetailSourceCode(List<String> lines,
+			CodeGenerationSupport generationSupport,
+			DetailBeanObservableInfo observable,
+			ObservableInfo masterObservable) throws Exception {
+		boolean dontUseDeprecatedMethods =
+				Activator.getStore().getBoolean(IPreferenceConstants.DONT_USE_DEPRECATED_METHODS);
+		String realmCode =
+				dontUseDeprecatedMethods
+				? ""
+						: "org.eclipse.core.databinding.observable.Realm.getDefault(), ";
+		String observeMethod =
+				observable.isPojoBindable0()
+				? " = " + DataBindingsCodeUtils.getPojoObservablesClass() + ".observeDetailValue("
+						: " = org.eclipse.core.databinding.beans.BeansObservables.observeDetailValue(";
+		String masterTypeCode =
+				observable.getDetailBeanClass() == null || observable.isPojoBindable0()
+				? ""
+						: CoreUtils.getClassName(observable.getDetailBeanClass()) + ".class, ";
+		lines.add("org.eclipse.core.databinding.observable.value.IObservableValue "
+				+ observable.getVariableIdentifier()
+				+ observeMethod
+				+ realmCode
+				+ masterObservable.getVariableIdentifier()
+				+ ", "
+						+ masterTypeCode
+						+ observable.getDetailPropertyReference()
+						+ ", "
+						+ CoreUtils.getClassName(observable.getDetailPropertyType())
+						+ ".class);");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/standard/BeanObservableListCodeSupport.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/standard/BeanObservableListCodeSupport.java
index 575c3be46..a8a641878 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/standard/BeanObservableListCodeSupport.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/standard/BeanObservableListCodeSupport.java
@@ -24,36 +24,36 @@
  * @coverage bindings.rcp.model.beans
  */
 public class BeanObservableListCodeSupport extends ObservableCodeSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void addSourceCode(ObservableInfo observable,
-      List<String> lines,
-      CodeGenerationSupport generationSupport) throws Exception {
-    // prepare variable
-    if (observable.getVariableIdentifier() == null) {
-      observable.setVariableIdentifier(generationSupport.generateLocalName(
-          observable.getBindableObject().getReference(),
-          observable.getBindableProperty().getReference(),
-          "ObserveList"));
-    }
-    // calculate observable method
-    String observeMethod =
-        observable.isPojoBindable()
-            ? " = "
-                + DataBindingsCodeUtils.getPojoObservablesClass()
-                + ".observeList(org.eclipse.core.databinding.observable.Realm.getDefault(), "
-            : " = org.eclipse.core.databinding.beans.BeansObservables.observeList(org.eclipse.core.databinding.observable.Realm.getDefault(), ";
-    // add code
-    lines.add("org.eclipse.core.databinding.observable.list.IObservableList "
-        + observable.getVariableIdentifier()
-        + observeMethod
-        + observable.getBindableObject().getReference()
-        + ", "
-        + observable.getBindableProperty().getReference()
-        + ");");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void addSourceCode(ObservableInfo observable,
+			List<String> lines,
+			CodeGenerationSupport generationSupport) throws Exception {
+		// prepare variable
+		if (observable.getVariableIdentifier() == null) {
+			observable.setVariableIdentifier(generationSupport.generateLocalName(
+					observable.getBindableObject().getReference(),
+					observable.getBindableProperty().getReference(),
+					"ObserveList"));
+		}
+		// calculate observable method
+		String observeMethod =
+				observable.isPojoBindable()
+				? " = "
+				+ DataBindingsCodeUtils.getPojoObservablesClass()
+				+ ".observeList(org.eclipse.core.databinding.observable.Realm.getDefault(), "
+				: " = org.eclipse.core.databinding.beans.BeansObservables.observeList(org.eclipse.core.databinding.observable.Realm.getDefault(), ";
+		// add code
+		lines.add("org.eclipse.core.databinding.observable.list.IObservableList "
+				+ observable.getVariableIdentifier()
+				+ observeMethod
+				+ observable.getBindableObject().getReference()
+				+ ", "
+				+ observable.getBindableProperty().getReference()
+				+ ");");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/standard/BeanObservableSetCodeSupport.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/standard/BeanObservableSetCodeSupport.java
index 1bf6fc54a..8506698d4 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/standard/BeanObservableSetCodeSupport.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/standard/BeanObservableSetCodeSupport.java
@@ -24,36 +24,36 @@
  * @coverage bindings.rcp.model.beans
  */
 public class BeanObservableSetCodeSupport extends ObservableCodeSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void addSourceCode(ObservableInfo observable,
-      List<String> lines,
-      CodeGenerationSupport generationSupport) throws Exception {
-    // prepare variable
-    if (observable.getVariableIdentifier() == null) {
-      observable.setVariableIdentifier(generationSupport.generateLocalName(
-          observable.getBindableObject().getReference(),
-          observable.getBindableProperty().getReference(),
-          "ObserveSet"));
-    }
-    // calculate observable method
-    String observeMethod =
-        observable.isPojoBindable()
-            ? " = "
-                + DataBindingsCodeUtils.getPojoObservablesClass()
-                + ".observeSet(org.eclipse.core.databinding.observable.Realm.getDefault(), "
-            : " = org.eclipse.core.databinding.beans.BeansObservables.observeSet(org.eclipse.core.databinding.observable.Realm.getDefault(), ";
-    // add code
-    lines.add("org.eclipse.core.databinding.observable.set.IObservableSet "
-        + observable.getVariableIdentifier()
-        + observeMethod
-        + observable.getBindableObject().getReference()
-        + ", "
-        + observable.getBindableProperty().getReference()
-        + ");");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void addSourceCode(ObservableInfo observable,
+			List<String> lines,
+			CodeGenerationSupport generationSupport) throws Exception {
+		// prepare variable
+		if (observable.getVariableIdentifier() == null) {
+			observable.setVariableIdentifier(generationSupport.generateLocalName(
+					observable.getBindableObject().getReference(),
+					observable.getBindableProperty().getReference(),
+					"ObserveSet"));
+		}
+		// calculate observable method
+		String observeMethod =
+				observable.isPojoBindable()
+				? " = "
+				+ DataBindingsCodeUtils.getPojoObservablesClass()
+				+ ".observeSet(org.eclipse.core.databinding.observable.Realm.getDefault(), "
+				: " = org.eclipse.core.databinding.beans.BeansObservables.observeSet(org.eclipse.core.databinding.observable.Realm.getDefault(), ";
+		// add code
+		lines.add("org.eclipse.core.databinding.observable.set.IObservableSet "
+				+ observable.getVariableIdentifier()
+				+ observeMethod
+				+ observable.getBindableObject().getReference()
+				+ ", "
+				+ observable.getBindableProperty().getReference()
+				+ ");");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/standard/BeanObservableValueCodeSupport.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/standard/BeanObservableValueCodeSupport.java
index 2a46d5857..38871adc0 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/standard/BeanObservableValueCodeSupport.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/standard/BeanObservableValueCodeSupport.java
@@ -24,34 +24,34 @@
  * @coverage bindings.rcp.model.beans
  */
 public class BeanObservableValueCodeSupport extends ObservableCodeSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void addSourceCode(ObservableInfo observable,
-      List<String> lines,
-      CodeGenerationSupport generationSupport) throws Exception {
-    // prepare variable
-    if (observable.getVariableIdentifier() == null) {
-      observable.setVariableIdentifier(generationSupport.generateLocalName(
-          observable.getBindableObject().getReference(),
-          observable.getBindableProperty().getReference(),
-          "ObserveValue"));
-    }
-    // calculate observable method
-    String observeMethod =
-        observable.isPojoBindable()
-            ? " = " + DataBindingsCodeUtils.getPojoObservablesClass() + ".observeValue("
-            : " = org.eclipse.core.databinding.beans.BeansObservables.observeValue(";
-    // add code
-    lines.add("org.eclipse.core.databinding.observable.value.IObservableValue "
-        + observable.getVariableIdentifier()
-        + observeMethod
-        + observable.getBindableObject().getReference()
-        + ", "
-        + observable.getBindableProperty().getReference()
-        + ");");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void addSourceCode(ObservableInfo observable,
+			List<String> lines,
+			CodeGenerationSupport generationSupport) throws Exception {
+		// prepare variable
+		if (observable.getVariableIdentifier() == null) {
+			observable.setVariableIdentifier(generationSupport.generateLocalName(
+					observable.getBindableObject().getReference(),
+					observable.getBindableProperty().getReference(),
+					"ObserveValue"));
+		}
+		// calculate observable method
+		String observeMethod =
+				observable.isPojoBindable()
+				? " = " + DataBindingsCodeUtils.getPojoObservablesClass() + ".observeValue("
+						: " = org.eclipse.core.databinding.beans.BeansObservables.observeValue(";
+		// add code
+		lines.add("org.eclipse.core.databinding.observable.value.IObservableValue "
+				+ observable.getVariableIdentifier()
+				+ observeMethod
+				+ observable.getBindableObject().getReference()
+				+ ", "
+				+ observable.getBindableProperty().getReference()
+				+ ");");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/standard/WritableListCodeSupport.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/standard/WritableListCodeSupport.java
index a347fd0de..6ac56040c 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/standard/WritableListCodeSupport.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/standard/WritableListCodeSupport.java
@@ -25,27 +25,27 @@
  * @coverage bindings.rcp.model.beans
  */
 public class WritableListCodeSupport extends ObservableCodeSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void addSourceCode(ObservableInfo observable,
-      List<String> lines,
-      CodeGenerationSupport generationSupport) throws Exception {
-    // prepare variable
-    if (observable.getVariableIdentifier() == null) {
-      observable.setVariableIdentifier(generationSupport.generateLocalName("WritableList"));
-    }
-    // add code
-    CollectionObservableInfo collectionObservable = (CollectionObservableInfo) observable;
-    lines.add("org.eclipse.core.databinding.observable.list.WritableList "
-        + observable.getVariableIdentifier()
-        + " = new org.eclipse.core.databinding.observable.list.WritableList("
-        + observable.getBindableObject().getReference()
-        + ", "
-        + CoreUtils.getClassName(collectionObservable.getElementType())
-        + ".class);");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void addSourceCode(ObservableInfo observable,
+			List<String> lines,
+			CodeGenerationSupport generationSupport) throws Exception {
+		// prepare variable
+		if (observable.getVariableIdentifier() == null) {
+			observable.setVariableIdentifier(generationSupport.generateLocalName("WritableList"));
+		}
+		// add code
+		CollectionObservableInfo collectionObservable = (CollectionObservableInfo) observable;
+		lines.add("org.eclipse.core.databinding.observable.list.WritableList "
+				+ observable.getVariableIdentifier()
+				+ " = new org.eclipse.core.databinding.observable.list.WritableList("
+				+ observable.getBindableObject().getReference()
+				+ ", "
+				+ CoreUtils.getClassName(collectionObservable.getElementType())
+				+ ".class);");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/standard/WritableSetCodeSupport.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/standard/WritableSetCodeSupport.java
index 2f4f9fbe9..79c8e35a0 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/standard/WritableSetCodeSupport.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/beans/observables/standard/WritableSetCodeSupport.java
@@ -25,27 +25,27 @@
  * @coverage bindings.rcp.model.beans
  */
 public class WritableSetCodeSupport extends ObservableCodeSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void addSourceCode(ObservableInfo observable,
-      List<String> lines,
-      CodeGenerationSupport generationSupport) throws Exception {
-    // prepare variable
-    if (observable.getVariableIdentifier() == null) {
-      observable.setVariableIdentifier(generationSupport.generateLocalName("WritableSet"));
-    }
-    // add code
-    CollectionObservableInfo collectionObservable = (CollectionObservableInfo) observable;
-    lines.add("org.eclipse.core.databinding.observable.set.WritableSet "
-        + observable.getVariableIdentifier()
-        + " = new org.eclipse.core.databinding.observable.set.WritableSet("
-        + observable.getBindableObject().getReference()
-        + ", "
-        + CoreUtils.getClassName(collectionObservable.getElementType())
-        + ".class);");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void addSourceCode(ObservableInfo observable,
+			List<String> lines,
+			CodeGenerationSupport generationSupport) throws Exception {
+		// prepare variable
+		if (observable.getVariableIdentifier() == null) {
+			observable.setVariableIdentifier(generationSupport.generateLocalName("WritableSet"));
+		}
+		// add code
+		CollectionObservableInfo collectionObservable = (CollectionObservableInfo) observable;
+		lines.add("org.eclipse.core.databinding.observable.set.WritableSet "
+				+ observable.getVariableIdentifier()
+				+ " = new org.eclipse.core.databinding.observable.set.WritableSet("
+				+ observable.getBindableObject().getReference()
+				+ ", "
+				+ CoreUtils.getClassName(collectionObservable.getElementType())
+				+ ".class);");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/context/BindingInfo.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/context/BindingInfo.java
index 436d30eff..3be29bb2b 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/context/BindingInfo.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/context/BindingInfo.java
@@ -47,255 +47,255 @@
  * @coverage bindings.rcp.model.context
  */
 public abstract class BindingInfo extends AbstractBindingInfo implements IASTObjectInfo2 {
-  protected final ObservableInfo m_target;
-  protected final ObservableInfo m_model;
-  protected UpdateStrategyInfo m_targetStrategy;
-  protected UpdateStrategyInfo m_modelStrategy;
+	protected final ObservableInfo m_target;
+	protected final ObservableInfo m_model;
+	protected UpdateStrategyInfo m_targetStrategy;
+	protected UpdateStrategyInfo m_modelStrategy;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public BindingInfo(ObservableInfo target, ObservableInfo model) {
-    m_target = target;
-    m_model = model;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public BindingInfo(ObservableInfo target, ObservableInfo model) {
+		m_target = target;
+		m_model = model;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return target {@link ObservableInfo}.
-   */
-  public final ObservableInfo getTargetObservable() {
-    return m_target;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return target {@link ObservableInfo}.
+	 */
+	public final ObservableInfo getTargetObservable() {
+		return m_target;
+	}
 
-  /**
-   * @return model {@link ObservableInfo}.
-   */
-  public final ObservableInfo getModelObservable() {
-    return m_model;
-  }
+	/**
+	 * @return model {@link ObservableInfo}.
+	 */
+	public final ObservableInfo getModelObservable() {
+		return m_model;
+	}
 
-  /**
-   * @return target {@link UpdateStrategyInfo}.
-   */
-  public final UpdateStrategyInfo getTargetStrategy() {
-    return m_targetStrategy;
-  }
+	/**
+	 * @return target {@link UpdateStrategyInfo}.
+	 */
+	public final UpdateStrategyInfo getTargetStrategy() {
+		return m_targetStrategy;
+	}
 
-  /**
-   * @return model {@link UpdateStrategyInfo}.
-   */
-  public final UpdateStrategyInfo getModelStrategy() {
-    return m_modelStrategy;
-  }
+	/**
+	 * @return model {@link UpdateStrategyInfo}.
+	 */
+	public final UpdateStrategyInfo getModelStrategy() {
+		return m_modelStrategy;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IBindingInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final IObserveInfo getTarget() {
-    return m_target.getBindableObject();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IBindingInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final IObserveInfo getTarget() {
+		return m_target.getBindableObject();
+	}
 
-  @Override
-  public final IObserveInfo getTargetProperty() {
-    return m_target.getBindableProperty();
-  }
+	@Override
+	public final IObserveInfo getTargetProperty() {
+		return m_target.getBindableProperty();
+	}
 
-  @Override
-  public final IObserveInfo getModel() {
-    return m_model.getBindableObject();
-  }
+	@Override
+	public final IObserveInfo getModel() {
+		return m_model.getBindableObject();
+	}
 
-  @Override
-  public final IObserveInfo getModelProperty() {
-    return m_model.getBindableProperty();
-  }
+	@Override
+	public final IObserveInfo getModelProperty() {
+		return m_model.getBindableProperty();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final void createContentProviders(List<IUiContentProvider> providers,
-      IPageListener listener,
-      DatabindingsProvider provider) throws Exception {
-    // configure page
-    listener.setTitle(Messages.BindingInfo_listenerTitle);
-    listener.setMessage(Messages.BindingInfo_listenerMessage);
-    //
-    BindingUiContentProviderContext context = new BindingUiContentProviderContext();
-    // add target editors
-    context.setDirection("Target");
-    providers.add(new LabelUiContentProvider(Messages.BindingInfo_targetLabel,
-        m_target.getPresentationText()));
-    m_target.createContentProviders(providers, context, provider);
-    m_targetStrategy.createContentProviders(providers, context);
-    //
-    providers.add(new SeparatorUiContentProvider());
-    // add model editors
-    context.setDirection("Model");
-    providers.add(new LabelUiContentProvider(Messages.BindingInfo_modelLabel,
-        m_model.getPresentationText()));
-    m_model.createContentProviders(providers, context, provider);
-    m_modelStrategy.createContentProviders(providers, context);
-    //
-    // binding self properties
-    providers.add(new SeparatorUiContentProvider());
-    providers.add(new BindingContentProvider(this, provider.getJavaInfoRoot()));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final void createContentProviders(List<IUiContentProvider> providers,
+			IPageListener listener,
+			DatabindingsProvider provider) throws Exception {
+		// configure page
+		listener.setTitle(Messages.BindingInfo_listenerTitle);
+		listener.setMessage(Messages.BindingInfo_listenerMessage);
+		//
+		BindingUiContentProviderContext context = new BindingUiContentProviderContext();
+		// add target editors
+		context.setDirection("Target");
+		providers.add(new LabelUiContentProvider(Messages.BindingInfo_targetLabel,
+				m_target.getPresentationText()));
+		m_target.createContentProviders(providers, context, provider);
+		m_targetStrategy.createContentProviders(providers, context);
+		//
+		providers.add(new SeparatorUiContentProvider());
+		// add model editors
+		context.setDirection("Model");
+		providers.add(new LabelUiContentProvider(Messages.BindingInfo_modelLabel,
+				m_model.getPresentationText()));
+		m_model.createContentProviders(providers, context, provider);
+		m_modelStrategy.createContentProviders(providers, context);
+		//
+		// binding self properties
+		providers.add(new SeparatorUiContentProvider());
+		providers.add(new BindingContentProvider(this, provider.getJavaInfoRoot()));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Variable
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean isField() {
-    try {
-      return getVariableIdentifier() != null;
-    } catch (Throwable e) {
-      return false;
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Variable
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean isField() {
+		try {
+			return getVariableIdentifier() != null;
+		} catch (Throwable e) {
+			return false;
+		}
+	}
 
-  @Override
-  public void setField() {
-  }
+	@Override
+	public void setField() {
+	}
 
-  @Override
-  public void setVariableIdentifier(final JavaInfo javaInfoRoot,
-      final String newVariable,
-      boolean field) {
-    try {
-      final String oldVariable = getVariableIdentifier();
-      setVariableIdentifier(newVariable);
-      final TypeDeclaration rootNode = JavaInfoUtils.getTypeDeclaration(javaInfoRoot);
-      //
-      if (oldVariable == null && newVariable != null) {
-        ExecutionUtils.run(javaInfoRoot, new RunnableEx() {
-          @Override
-          public void run() throws Exception {
-            BodyDeclarationTarget fieldTarget = new BodyDeclarationTarget(rootNode, null, true);
-            javaInfoRoot.getEditor().addFieldDeclaration(
-                "private org.eclipse.core.databinding.Binding " + newVariable + ";",
-                fieldTarget);
-          }
-        });
-      } else if (oldVariable != null && newVariable == null) {
-        ExecutionUtils.run(javaInfoRoot, new RunnableEx() {
-          @Override
-          public void run() throws Exception {
-            for (FieldDeclaration field : rootNode.getFields()) {
-              VariableDeclarationFragment fragment = DomGenerics.fragments(field).get(0);
-              if (fragment.getName().getIdentifier().equals(oldVariable)) {
-                javaInfoRoot.getEditor().removeBodyDeclaration(field);
-                return;
-              }
-            }
-            Assert.fail(Messages.BindingInfo_undefinedBindingField + oldVariable);
-          }
-        });
-      } else if (oldVariable != null && newVariable != null && !oldVariable.equals(newVariable)) {
-        ExecutionUtils.run(javaInfoRoot, new RunnableEx() {
-          @Override
-          public void run() throws Exception {
-            for (FieldDeclaration field : rootNode.getFields()) {
-              VariableDeclarationFragment fragment = DomGenerics.fragments(field).get(0);
-              if (fragment.getName().getIdentifier().equals(oldVariable)) {
-                javaInfoRoot.getEditor().setIdentifier(fragment.getName(), newVariable);
-                return;
-              }
-            }
-            Assert.fail(Messages.BindingInfo_undefinedBindingField + oldVariable);
-          }
-        });
-      }
-    } catch (Throwable e) {
-      DesignerPlugin.log(e);
-    }
-  }
+	@Override
+	public void setVariableIdentifier(final JavaInfo javaInfoRoot,
+			final String newVariable,
+			boolean field) {
+		try {
+			final String oldVariable = getVariableIdentifier();
+			setVariableIdentifier(newVariable);
+			final TypeDeclaration rootNode = JavaInfoUtils.getTypeDeclaration(javaInfoRoot);
+			//
+			if (oldVariable == null && newVariable != null) {
+				ExecutionUtils.run(javaInfoRoot, new RunnableEx() {
+					@Override
+					public void run() throws Exception {
+						BodyDeclarationTarget fieldTarget = new BodyDeclarationTarget(rootNode, null, true);
+						javaInfoRoot.getEditor().addFieldDeclaration(
+								"private org.eclipse.core.databinding.Binding " + newVariable + ";",
+								fieldTarget);
+					}
+				});
+			} else if (oldVariable != null && newVariable == null) {
+				ExecutionUtils.run(javaInfoRoot, new RunnableEx() {
+					@Override
+					public void run() throws Exception {
+						for (FieldDeclaration field : rootNode.getFields()) {
+							VariableDeclarationFragment fragment = DomGenerics.fragments(field).get(0);
+							if (fragment.getName().getIdentifier().equals(oldVariable)) {
+								javaInfoRoot.getEditor().removeBodyDeclaration(field);
+								return;
+							}
+						}
+						Assert.fail(Messages.BindingInfo_undefinedBindingField + oldVariable);
+					}
+				});
+			} else if (oldVariable != null && newVariable != null && !oldVariable.equals(newVariable)) {
+				ExecutionUtils.run(javaInfoRoot, new RunnableEx() {
+					@Override
+					public void run() throws Exception {
+						for (FieldDeclaration field : rootNode.getFields()) {
+							VariableDeclarationFragment fragment = DomGenerics.fragments(field).get(0);
+							if (fragment.getName().getIdentifier().equals(oldVariable)) {
+								javaInfoRoot.getEditor().setIdentifier(fragment.getName(), newVariable);
+								return;
+							}
+						}
+						Assert.fail(Messages.BindingInfo_undefinedBindingField + oldVariable);
+					}
+				});
+			}
+		} catch (Throwable e) {
+			DesignerPlugin.log(e);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Definition
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final String getDefinitionSource(DatabindingsProvider provider) throws Exception {
-    DataBindingContextInfo context = provider.getRootInfo().getContextInfo();
-    return context.getVariableIdentifier()
-        + "."
-        + getBindingMethod()
-        + "("
-        + m_target.getVariableIdentifier()
-        + ", "
-        + m_model.getVariableIdentifier();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Definition
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final String getDefinitionSource(DatabindingsProvider provider) throws Exception {
+		DataBindingContextInfo context = provider.getRootInfo().getContextInfo();
+		return context.getVariableIdentifier()
+				+ "."
+				+ getBindingMethod()
+				+ "("
+				+ m_target.getVariableIdentifier()
+				+ ", "
+				+ m_model.getVariableIdentifier();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final void addSourceCode(DataBindingContextInfo context,
-      List<String> lines,
-      CodeGenerationSupport generationSupport) throws Exception {
-    // target source code
-    generationSupport.addSourceCode(m_target, lines);
-    // model source code
-    generationSupport.addSourceCode(m_model, lines);
-    // target strategy source code
-    String targetStrategy = m_targetStrategy.getSourceCode(lines, generationSupport);
-    // model strategy source code
-    String modelStrategy = m_modelStrategy.getSourceCode(lines, generationSupport);
-    // create binding source code
-    String variable = getVariableIdentifier();
-    if (variable == null) {
-      variable = "";
-    } else {
-      variable += " = ";
-    }
-    lines.add(variable
-        + context.getVariableIdentifier()
-        + "."
-        + getBindingMethod()
-        + "("
-        + m_target.getVariableIdentifier()
-        + ", "
-        + m_model.getVariableIdentifier()
-        + ", "
-        + targetStrategy
-        + ", "
-        + modelStrategy
-        + ");");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final void addSourceCode(DataBindingContextInfo context,
+			List<String> lines,
+			CodeGenerationSupport generationSupport) throws Exception {
+		// target source code
+		generationSupport.addSourceCode(m_target, lines);
+		// model source code
+		generationSupport.addSourceCode(m_model, lines);
+		// target strategy source code
+		String targetStrategy = m_targetStrategy.getSourceCode(lines, generationSupport);
+		// model strategy source code
+		String modelStrategy = m_modelStrategy.getSourceCode(lines, generationSupport);
+		// create binding source code
+		String variable = getVariableIdentifier();
+		if (variable == null) {
+			variable = "";
+		} else {
+			variable += " = ";
+		}
+		lines.add(variable
+				+ context.getVariableIdentifier()
+				+ "."
+				+ getBindingMethod()
+				+ "("
+				+ m_target.getVariableIdentifier()
+				+ ", "
+				+ m_model.getVariableIdentifier()
+				+ ", "
+				+ targetStrategy
+				+ ", "
+				+ modelStrategy
+				+ ");");
+	}
 
-  protected abstract String getBindingMethod();
+	protected abstract String getBindingMethod();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Visiting
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final void accept(AstObjectInfoVisitor visitor) throws Exception {
-    super.accept(visitor);
-    // target
-    m_target.accept(visitor);
-    m_targetStrategy.accept(visitor);
-    // model
-    m_model.accept(visitor);
-    m_modelStrategy.accept(visitor);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Visiting
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final void accept(AstObjectInfoVisitor visitor) throws Exception {
+		super.accept(visitor);
+		// target
+		m_target.accept(visitor);
+		m_targetStrategy.accept(visitor);
+		// model
+		m_model.accept(visitor);
+		m_modelStrategy.accept(visitor);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/context/BindingUiContentProviderContext.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/context/BindingUiContentProviderContext.java
index 5011bae2c..dcfccae69 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/context/BindingUiContentProviderContext.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/context/BindingUiContentProviderContext.java
@@ -26,39 +26,39 @@
  * @coverage bindings.rcp.model.context
  */
 public final class BindingUiContentProviderContext {
-  private final Map<String, Object> m_values = Maps.newHashMap();
-  private String m_direction;
+	private final Map<String, Object> m_values = Maps.newHashMap();
+	private String m_direction;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the direction for current state.
-   */
-  public String getDirection() {
-    return m_direction;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the direction for current state.
+	 */
+	public String getDirection() {
+		return m_direction;
+	}
 
-  /**
-   * Sets current direction (target, model and etc.).
-   */
-  public void setDirection(String direction) {
-    m_direction = direction;
-  }
+	/**
+	 * Sets current direction (target, model and etc.).
+	 */
+	public void setDirection(String direction) {
+		m_direction = direction;
+	}
 
-  /**
-   * @return the value for given name.
-   */
-  public Object getValue(String name) {
-    return m_values.get(name);
-  }
+	/**
+	 * @return the value for given name.
+	 */
+	public Object getValue(String name) {
+		return m_values.get(name);
+	}
 
-  /**
-   * Sets value for given name.
-   */
-  public void setValue(String name, Object value) {
-    m_values.put(name, value);
-  }
+	/**
+	 * Sets value for given name.
+	 */
+	public void setValue(String name, Object value) {
+		m_values.put(name, value);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/context/DataBindingContextInfo.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/context/DataBindingContextInfo.java
index f9f49c965..a23c8992b 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/context/DataBindingContextInfo.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/context/DataBindingContextInfo.java
@@ -43,256 +43,256 @@
  * @coverage bindings.rcp.model.context
  */
 public final class DataBindingContextInfo extends AstObjectInfo {
-  private static final String BIND_VALUE_METHOD_1 =
-      "org.eclipse.core.databinding.DataBindingContext.bindValue(org.eclipse.core.databinding.observable.value.IObservableValue,org.eclipse.core.databinding.observable.value.IObservableValue,org.eclipse.core.databinding.UpdateValueStrategy,org.eclipse.core.databinding.UpdateValueStrategy)";
-  private static final String BIND_VALUE_METHOD_2 =
-      "org.eclipse.core.databinding.DataBindingContext.bindValue(org.eclipse.core.databinding.observable.value.IObservableValue,org.eclipse.core.databinding.observable.value.IObservableValue)";
-  private static final String BIND_LIST_METHOD_1 =
-      "org.eclipse.core.databinding.DataBindingContext.bindList(org.eclipse.core.databinding.observable.list.IObservableList,org.eclipse.core.databinding.observable.list.IObservableList,org.eclipse.core.databinding.UpdateListStrategy,org.eclipse.core.databinding.UpdateListStrategy)";
-  private static final String BIND_LIST_METHOD_2 =
-      "org.eclipse.core.databinding.DataBindingContext.bindList(org.eclipse.core.databinding.observable.list.IObservableList,org.eclipse.core.databinding.observable.list.IObservableList)";
-  private static final String BIND_SET_METHOD_1 =
-      "org.eclipse.core.databinding.DataBindingContext.bindSet(org.eclipse.core.databinding.observable.set.IObservableSet,org.eclipse.core.databinding.observable.set.IObservableSet,org.eclipse.core.databinding.UpdateSetStrategy,org.eclipse.core.databinding.UpdateSetStrategy)";
-  private static final String BIND_SET_METHOD_2 =
-      "org.eclipse.core.databinding.DataBindingContext.bindSet(org.eclipse.core.databinding.observable.set.IObservableSet,org.eclipse.core.databinding.observable.set.IObservableSet)";
-  //
-  private final List<AbstractBindingInfo> m_bindings = Lists.newArrayList();
-  private boolean m_addInitializeContext;
-  private String m_userTryCatchBlock;
+	private static final String BIND_VALUE_METHOD_1 =
+			"org.eclipse.core.databinding.DataBindingContext.bindValue(org.eclipse.core.databinding.observable.value.IObservableValue,org.eclipse.core.databinding.observable.value.IObservableValue,org.eclipse.core.databinding.UpdateValueStrategy,org.eclipse.core.databinding.UpdateValueStrategy)";
+	private static final String BIND_VALUE_METHOD_2 =
+			"org.eclipse.core.databinding.DataBindingContext.bindValue(org.eclipse.core.databinding.observable.value.IObservableValue,org.eclipse.core.databinding.observable.value.IObservableValue)";
+	private static final String BIND_LIST_METHOD_1 =
+			"org.eclipse.core.databinding.DataBindingContext.bindList(org.eclipse.core.databinding.observable.list.IObservableList,org.eclipse.core.databinding.observable.list.IObservableList,org.eclipse.core.databinding.UpdateListStrategy,org.eclipse.core.databinding.UpdateListStrategy)";
+	private static final String BIND_LIST_METHOD_2 =
+			"org.eclipse.core.databinding.DataBindingContext.bindList(org.eclipse.core.databinding.observable.list.IObservableList,org.eclipse.core.databinding.observable.list.IObservableList)";
+	private static final String BIND_SET_METHOD_1 =
+			"org.eclipse.core.databinding.DataBindingContext.bindSet(org.eclipse.core.databinding.observable.set.IObservableSet,org.eclipse.core.databinding.observable.set.IObservableSet,org.eclipse.core.databinding.UpdateSetStrategy,org.eclipse.core.databinding.UpdateSetStrategy)";
+	private static final String BIND_SET_METHOD_2 =
+			"org.eclipse.core.databinding.DataBindingContext.bindSet(org.eclipse.core.databinding.observable.set.IObservableSet,org.eclipse.core.databinding.observable.set.IObservableSet)";
+	//
+	private final List<AbstractBindingInfo> m_bindings = Lists.newArrayList();
+	private boolean m_addInitializeContext;
+	private String m_userTryCatchBlock;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public List<AbstractBindingInfo> getBindings() {
-    return m_bindings;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public List<AbstractBindingInfo> getBindings() {
+		return m_bindings;
+	}
 
-  public boolean isAddInitializeContext() {
-    return m_addInitializeContext;
-  }
+	public boolean isAddInitializeContext() {
+		return m_addInitializeContext;
+	}
 
-  public void addInitializeContext(boolean addInitializeContext) {
-    m_addInitializeContext = addInitializeContext;
-  }
+	public void addInitializeContext(boolean addInitializeContext) {
+		m_addInitializeContext = addInitializeContext;
+	}
 
-  public String getUserTryCatchBlock() {
-    return m_userTryCatchBlock;
-  }
+	public String getUserTryCatchBlock() {
+		return m_userTryCatchBlock;
+	}
 
-  public void setUserTryCatchBlock(String userTryCatchBlock) {
-    m_userTryCatchBlock = userTryCatchBlock;
-  }
+	public void setUserTryCatchBlock(String userTryCatchBlock) {
+		m_userTryCatchBlock = userTryCatchBlock;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parser
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public AstObjectInfo parseExpression(AstEditor editor,
-      String signature,
-      MethodInvocation invocation,
-      Expression[] arguments,
-      IModelResolver resolver,
-      IDatabindingsProvider provider) throws Exception {
-    //
-    // DataBindingContext.bindValue(IObservableValue, IObservableValue)
-    // DataBindingContext.bindValue(IObservableValue, IObservableValue, UpdateValueStrategy, UpdateValueStrategy)
-    //
-    if (BIND_VALUE_METHOD_1.equals(signature) || BIND_VALUE_METHOD_2.equals(signature)) {
-      // prepare target
-      ObservableInfo target = (ObservableInfo) resolver.getModel(arguments[0]);
-      if (target == null) {
-        AbstractParser.addError(editor, MessageFormat.format(
-            Messages.DataBindingContextInfo_targetArgumentNotFound,
-            arguments[0]), new Throwable());
-        return null;
-      }
-      // prepare model
-      ObservableInfo model = (ObservableInfo) resolver.getModel(arguments[1]);
-      if (model == null) {
-        AbstractParser.addError(editor, MessageFormat.format(
-            Messages.DataBindingContextInfo_modelArgumentNotFound,
-            arguments[1]), new Throwable());
-        return null;
-      }
-      // prepare target strategy
-      UpdateValueStrategyInfo targetStrategy = null;
-      if (arguments.length == 4) {
-        targetStrategy = (UpdateValueStrategyInfo) resolver.getModel(arguments[2]);
-        checkStrategy(editor, targetStrategy, arguments[2]);
-      }
-      // prepare model strategy
-      UpdateValueStrategyInfo modelStrategy = null;
-      if (arguments.length == 4) {
-        modelStrategy = (UpdateValueStrategyInfo) resolver.getModel(arguments[3]);
-        checkStrategy(editor, modelStrategy, arguments[3]);
-      }
-      // create binding
-      BindingInfo binding = new ValueBindingInfo(target, model, targetStrategy, modelStrategy);
-      m_bindings.add(binding);
-      //
-      return binding;
-    }
-    //
-    // DataBindingContext.bindList(IObservableList, IObservableList)
-    // DataBindingContext.bindList(IObservableList, IObservableList, UpdateListStrategy, UpdateListStrategy)
-    //
-    if (BIND_LIST_METHOD_1.equals(signature) || BIND_LIST_METHOD_2.equals(signature)) {
-      // prepare target
-      ObservableInfo target = (ObservableInfo) resolver.getModel(arguments[0]);
-      if (target == null) {
-        AbstractParser.addError(editor, MessageFormat.format(
-            Messages.DataBindingContextInfo_targetArgumentNotFound,
-            arguments[0]), new Throwable());
-        return null;
-      }
-      // prepare model
-      ObservableInfo model = (ObservableInfo) resolver.getModel(arguments[1]);
-      if (model == null) {
-        AbstractParser.addError(editor, MessageFormat.format(
-            Messages.DataBindingContextInfo_modelArgumentNotFound,
-            arguments[1]), new Throwable());
-        return null;
-      }
-      // prepare target strategy
-      UpdateListStrategyInfo targetStrategy = null;
-      if (arguments.length == 4) {
-        targetStrategy = (UpdateListStrategyInfo) resolver.getModel(arguments[2]);
-        checkStrategy(editor, targetStrategy, arguments[2]);
-      }
-      // prepare model strategy
-      UpdateListStrategyInfo modelStrategy = null;
-      if (arguments.length == 4) {
-        modelStrategy = (UpdateListStrategyInfo) resolver.getModel(arguments[3]);
-        checkStrategy(editor, modelStrategy, arguments[3]);
-      }
-      // create binding
-      BindingInfo binding = new ListBindingInfo(target, model, targetStrategy, modelStrategy);
-      m_bindings.add(binding);
-      //
-      return binding;
-    }
-    //
-    // DataBindingContext.bindSet(IObservableSet, IObservableSet)
-    // DataBindingContext.bindSet(IObservableSet, IObservableSet, UpdateSetStrategy, UpdateSetStrategy)
-    //
-    if (BIND_SET_METHOD_1.equals(signature) || BIND_SET_METHOD_2.equals(signature)) {
-      // prepare target
-      ObservableInfo target = (ObservableInfo) resolver.getModel(arguments[0]);
-      if (target == null) {
-        AbstractParser.addError(editor, MessageFormat.format(
-            Messages.DataBindingContextInfo_targetArgumentNotFound,
-            arguments[0]), new Throwable());
-        return null;
-      }
-      // prepare model
-      ObservableInfo model = (ObservableInfo) resolver.getModel(arguments[1]);
-      if (model == null) {
-        AbstractParser.addError(editor, MessageFormat.format(
-            Messages.DataBindingContextInfo_modelArgumentNotFound,
-            arguments[1]), new Throwable());
-        return null;
-      }
-      // prepare target strategy
-      UpdateSetStrategyInfo targetStrategy = null;
-      if (arguments.length == 4) {
-        targetStrategy = (UpdateSetStrategyInfo) resolver.getModel(arguments[2]);
-        checkStrategy(editor, targetStrategy, arguments[2]);
-      }
-      // prepare model strategy
-      UpdateSetStrategyInfo modelStrategy = null;
-      if (arguments.length == 4) {
-        modelStrategy = (UpdateSetStrategyInfo) resolver.getModel(arguments[3]);
-        checkStrategy(editor, modelStrategy, arguments[3]);
-      }
-      // create binding
-      BindingInfo binding = new SetBindingInfo(target, model, targetStrategy, modelStrategy);
-      m_bindings.add(binding);
-      //
-      return binding;
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parser
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public AstObjectInfo parseExpression(AstEditor editor,
+			String signature,
+			MethodInvocation invocation,
+			Expression[] arguments,
+			IModelResolver resolver,
+			IDatabindingsProvider provider) throws Exception {
+		//
+		// DataBindingContext.bindValue(IObservableValue, IObservableValue)
+		// DataBindingContext.bindValue(IObservableValue, IObservableValue, UpdateValueStrategy, UpdateValueStrategy)
+		//
+		if (BIND_VALUE_METHOD_1.equals(signature) || BIND_VALUE_METHOD_2.equals(signature)) {
+			// prepare target
+			ObservableInfo target = (ObservableInfo) resolver.getModel(arguments[0]);
+			if (target == null) {
+				AbstractParser.addError(editor, MessageFormat.format(
+						Messages.DataBindingContextInfo_targetArgumentNotFound,
+						arguments[0]), new Throwable());
+				return null;
+			}
+			// prepare model
+			ObservableInfo model = (ObservableInfo) resolver.getModel(arguments[1]);
+			if (model == null) {
+				AbstractParser.addError(editor, MessageFormat.format(
+						Messages.DataBindingContextInfo_modelArgumentNotFound,
+						arguments[1]), new Throwable());
+				return null;
+			}
+			// prepare target strategy
+			UpdateValueStrategyInfo targetStrategy = null;
+			if (arguments.length == 4) {
+				targetStrategy = (UpdateValueStrategyInfo) resolver.getModel(arguments[2]);
+				checkStrategy(editor, targetStrategy, arguments[2]);
+			}
+			// prepare model strategy
+			UpdateValueStrategyInfo modelStrategy = null;
+			if (arguments.length == 4) {
+				modelStrategy = (UpdateValueStrategyInfo) resolver.getModel(arguments[3]);
+				checkStrategy(editor, modelStrategy, arguments[3]);
+			}
+			// create binding
+			BindingInfo binding = new ValueBindingInfo(target, model, targetStrategy, modelStrategy);
+			m_bindings.add(binding);
+			//
+			return binding;
+		}
+		//
+		// DataBindingContext.bindList(IObservableList, IObservableList)
+		// DataBindingContext.bindList(IObservableList, IObservableList, UpdateListStrategy, UpdateListStrategy)
+		//
+		if (BIND_LIST_METHOD_1.equals(signature) || BIND_LIST_METHOD_2.equals(signature)) {
+			// prepare target
+			ObservableInfo target = (ObservableInfo) resolver.getModel(arguments[0]);
+			if (target == null) {
+				AbstractParser.addError(editor, MessageFormat.format(
+						Messages.DataBindingContextInfo_targetArgumentNotFound,
+						arguments[0]), new Throwable());
+				return null;
+			}
+			// prepare model
+			ObservableInfo model = (ObservableInfo) resolver.getModel(arguments[1]);
+			if (model == null) {
+				AbstractParser.addError(editor, MessageFormat.format(
+						Messages.DataBindingContextInfo_modelArgumentNotFound,
+						arguments[1]), new Throwable());
+				return null;
+			}
+			// prepare target strategy
+			UpdateListStrategyInfo targetStrategy = null;
+			if (arguments.length == 4) {
+				targetStrategy = (UpdateListStrategyInfo) resolver.getModel(arguments[2]);
+				checkStrategy(editor, targetStrategy, arguments[2]);
+			}
+			// prepare model strategy
+			UpdateListStrategyInfo modelStrategy = null;
+			if (arguments.length == 4) {
+				modelStrategy = (UpdateListStrategyInfo) resolver.getModel(arguments[3]);
+				checkStrategy(editor, modelStrategy, arguments[3]);
+			}
+			// create binding
+			BindingInfo binding = new ListBindingInfo(target, model, targetStrategy, modelStrategy);
+			m_bindings.add(binding);
+			//
+			return binding;
+		}
+		//
+		// DataBindingContext.bindSet(IObservableSet, IObservableSet)
+		// DataBindingContext.bindSet(IObservableSet, IObservableSet, UpdateSetStrategy, UpdateSetStrategy)
+		//
+		if (BIND_SET_METHOD_1.equals(signature) || BIND_SET_METHOD_2.equals(signature)) {
+			// prepare target
+			ObservableInfo target = (ObservableInfo) resolver.getModel(arguments[0]);
+			if (target == null) {
+				AbstractParser.addError(editor, MessageFormat.format(
+						Messages.DataBindingContextInfo_targetArgumentNotFound,
+						arguments[0]), new Throwable());
+				return null;
+			}
+			// prepare model
+			ObservableInfo model = (ObservableInfo) resolver.getModel(arguments[1]);
+			if (model == null) {
+				AbstractParser.addError(editor, MessageFormat.format(
+						Messages.DataBindingContextInfo_modelArgumentNotFound,
+						arguments[1]), new Throwable());
+				return null;
+			}
+			// prepare target strategy
+			UpdateSetStrategyInfo targetStrategy = null;
+			if (arguments.length == 4) {
+				targetStrategy = (UpdateSetStrategyInfo) resolver.getModel(arguments[2]);
+				checkStrategy(editor, targetStrategy, arguments[2]);
+			}
+			// prepare model strategy
+			UpdateSetStrategyInfo modelStrategy = null;
+			if (arguments.length == 4) {
+				modelStrategy = (UpdateSetStrategyInfo) resolver.getModel(arguments[3]);
+				checkStrategy(editor, modelStrategy, arguments[3]);
+			}
+			// create binding
+			BindingInfo binding = new SetBindingInfo(target, model, targetStrategy, modelStrategy);
+			m_bindings.add(binding);
+			//
+			return binding;
+		}
+		return null;
+	}
 
-  private static void checkStrategy(AstEditor editor, Object strategy, Expression expression) {
-    if (strategy == null) {
-      if (expression instanceof NullLiteral) {
-      } else {
-        AbstractParser.addError(
-            editor,
-            MessageFormat.format(Messages.DataBindingContextInfo_undefinedStrategy, expression),
-            new Throwable());
-      }
-    }
-  }
+	private static void checkStrategy(AstEditor editor, Object strategy, Expression expression) {
+		if (strategy == null) {
+			if (expression instanceof NullLiteral) {
+			} else {
+				AbstractParser.addError(
+						editor,
+						MessageFormat.format(Messages.DataBindingContextInfo_undefinedStrategy, expression),
+						new Throwable());
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void addSourceCode(AstEditor editor,
-      List<String> lines,
-      CodeGenerationSupport generationSupport) throws Exception {
-    // sets variable
-    if (getVariableIdentifier() == null) {
-      setVariableIdentifier("bindingContext");
-    }
-    // create content
-    lines.add("org.eclipse.core.databinding.DataBindingContext "
-        + getVariableIdentifier()
-        + " = new org.eclipse.core.databinding.DataBindingContext();");
-    // try {
-    boolean addTryCatch = Activator.getStore().getBoolean(IPreferenceConstants.INITDB_TRY_CATCH);
-    if (m_userTryCatchBlock != null || addTryCatch) {
-      lines.add("//");
-      lines.add("try {");
-    }
-    // check add user initialize method
-    if (m_addInitializeContext) {
-      lines.add("initializeContext(" + getVariableIdentifier() + ");");
-    }
-    boolean addLineComment = m_addInitializeContext || m_userTryCatchBlock == null && !addTryCatch;
-    // add bindings
-    for (AbstractBindingInfo binding : m_bindings) {
-      if (addLineComment) {
-        lines.add("//");
-      }
-      addLineComment = true;
-      binding.addSourceCode(this, lines, generationSupport);
-    }
-    // } catch () {}
-    if (m_userTryCatchBlock != null || addTryCatch) {
-      String indent = editor.getGeneration().getIndentation(1);
-      int count = lines.size();
-      for (int i = 3; i < count; i++) {
-        lines.set(i, indent + lines.get(i));
-      }
-    }
-    if (m_userTryCatchBlock != null) {
-      lines.add(m_userTryCatchBlock);
-    } else if (addTryCatch) {
-      lines.add("} catch(Throwable e) {}");
-    }
-    // add return
-    lines.add("//");
-    lines.add("return " + getVariableIdentifier() + ";");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void addSourceCode(AstEditor editor,
+			List<String> lines,
+			CodeGenerationSupport generationSupport) throws Exception {
+		// sets variable
+		if (getVariableIdentifier() == null) {
+			setVariableIdentifier("bindingContext");
+		}
+		// create content
+		lines.add("org.eclipse.core.databinding.DataBindingContext "
+				+ getVariableIdentifier()
+				+ " = new org.eclipse.core.databinding.DataBindingContext();");
+		// try {
+		boolean addTryCatch = Activator.getStore().getBoolean(IPreferenceConstants.INITDB_TRY_CATCH);
+		if (m_userTryCatchBlock != null || addTryCatch) {
+			lines.add("//");
+			lines.add("try {");
+		}
+		// check add user initialize method
+		if (m_addInitializeContext) {
+			lines.add("initializeContext(" + getVariableIdentifier() + ");");
+		}
+		boolean addLineComment = m_addInitializeContext || m_userTryCatchBlock == null && !addTryCatch;
+		// add bindings
+		for (AbstractBindingInfo binding : m_bindings) {
+			if (addLineComment) {
+				lines.add("//");
+			}
+			addLineComment = true;
+			binding.addSourceCode(this, lines, generationSupport);
+		}
+		// } catch () {}
+		if (m_userTryCatchBlock != null || addTryCatch) {
+			String indent = editor.getGeneration().getIndentation(1);
+			int count = lines.size();
+			for (int i = 3; i < count; i++) {
+				lines.set(i, indent + lines.get(i));
+			}
+		}
+		if (m_userTryCatchBlock != null) {
+			lines.add(m_userTryCatchBlock);
+		} else if (addTryCatch) {
+			lines.add("} catch(Throwable e) {}");
+		}
+		// add return
+		lines.add("//");
+		lines.add("return " + getVariableIdentifier() + ";");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Visiting
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final void accept(AstObjectInfoVisitor visitor) throws Exception {
-    super.accept(visitor);
-    // visit to bindings
-    for (AbstractBindingInfo binding : m_bindings) {
-      binding.accept(visitor);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Visiting
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final void accept(AstObjectInfoVisitor visitor) throws Exception {
+		super.accept(visitor);
+		// visit to bindings
+		for (AbstractBindingInfo binding : m_bindings) {
+			binding.accept(visitor);
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/context/ListBindingInfo.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/context/ListBindingInfo.java
index 69f6fb328..74ff37d75 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/context/ListBindingInfo.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/context/ListBindingInfo.java
@@ -20,31 +20,31 @@
  * @coverage bindings.rcp.model.context
  */
 public final class ListBindingInfo extends BindingInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ListBindingInfo(ObservableInfo target, ObservableInfo model) {
-    this(target, model, null, null);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ListBindingInfo(ObservableInfo target, ObservableInfo model) {
+		this(target, model, null, null);
+	}
 
-  public ListBindingInfo(ObservableInfo target,
-      ObservableInfo model,
-      UpdateListStrategyInfo targetStrategy,
-      UpdateListStrategyInfo modelStrategy) {
-    super(target, model);
-    m_targetStrategy = targetStrategy == null ? new UpdateListStrategyInfo() : targetStrategy;
-    m_modelStrategy = modelStrategy == null ? new UpdateListStrategyInfo() : modelStrategy;
-  }
+	public ListBindingInfo(ObservableInfo target,
+			ObservableInfo model,
+			UpdateListStrategyInfo targetStrategy,
+			UpdateListStrategyInfo modelStrategy) {
+		super(target, model);
+		m_targetStrategy = targetStrategy == null ? new UpdateListStrategyInfo() : targetStrategy;
+		m_modelStrategy = modelStrategy == null ? new UpdateListStrategyInfo() : modelStrategy;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getBindingMethod() {
-    return "bindList";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getBindingMethod() {
+		return "bindList";
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/context/SetBindingInfo.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/context/SetBindingInfo.java
index 92e74fbb4..9a96073c9 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/context/SetBindingInfo.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/context/SetBindingInfo.java
@@ -20,31 +20,31 @@
  * @coverage bindings.rcp.model.context
  */
 public final class SetBindingInfo extends BindingInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SetBindingInfo(ObservableInfo target, ObservableInfo model) {
-    this(target, model, null, null);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SetBindingInfo(ObservableInfo target, ObservableInfo model) {
+		this(target, model, null, null);
+	}
 
-  public SetBindingInfo(ObservableInfo target,
-      ObservableInfo model,
-      UpdateSetStrategyInfo targetStrategy,
-      UpdateSetStrategyInfo modelStrategy) {
-    super(target, model);
-    m_targetStrategy = targetStrategy == null ? new UpdateSetStrategyInfo() : targetStrategy;
-    m_modelStrategy = modelStrategy == null ? new UpdateSetStrategyInfo() : modelStrategy;
-  }
+	public SetBindingInfo(ObservableInfo target,
+			ObservableInfo model,
+			UpdateSetStrategyInfo targetStrategy,
+			UpdateSetStrategyInfo modelStrategy) {
+		super(target, model);
+		m_targetStrategy = targetStrategy == null ? new UpdateSetStrategyInfo() : targetStrategy;
+		m_modelStrategy = modelStrategy == null ? new UpdateSetStrategyInfo() : modelStrategy;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getBindingMethod() {
-    return "bindSet";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getBindingMethod() {
+		return "bindSet";
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/context/ValueBindingInfo.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/context/ValueBindingInfo.java
index ac0a3b3bf..c5442fb53 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/context/ValueBindingInfo.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/context/ValueBindingInfo.java
@@ -20,31 +20,31 @@
  * @coverage bindings.rcp.model.context
  */
 public final class ValueBindingInfo extends BindingInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ValueBindingInfo(ObservableInfo target, ObservableInfo model) {
-    this(target, model, null, null);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ValueBindingInfo(ObservableInfo target, ObservableInfo model) {
+		this(target, model, null, null);
+	}
 
-  public ValueBindingInfo(ObservableInfo target,
-      ObservableInfo model,
-      UpdateValueStrategyInfo targetStrategy,
-      UpdateValueStrategyInfo modelStrategy) {
-    super(target, model);
-    m_targetStrategy = targetStrategy == null ? new UpdateValueStrategyInfo() : targetStrategy;
-    m_modelStrategy = modelStrategy == null ? new UpdateValueStrategyInfo() : modelStrategy;
-  }
+	public ValueBindingInfo(ObservableInfo target,
+			ObservableInfo model,
+			UpdateValueStrategyInfo targetStrategy,
+			UpdateValueStrategyInfo modelStrategy) {
+		super(target, model);
+		m_targetStrategy = targetStrategy == null ? new UpdateValueStrategyInfo() : targetStrategy;
+		m_modelStrategy = modelStrategy == null ? new UpdateValueStrategyInfo() : modelStrategy;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getBindingMethod() {
-    return "bindValue";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getBindingMethod() {
+		return "bindValue";
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/context/strategies/ConverterInfo.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/context/strategies/ConverterInfo.java
index b173752a5..53b0cf107 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/context/strategies/ConverterInfo.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/context/strategies/ConverterInfo.java
@@ -21,26 +21,26 @@
  * @coverage bindings.rcp.model.context
  */
 public final class ConverterInfo extends StrategyPropertyInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ConverterInfo(String className) {
-    super(className);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ConverterInfo(String className) {
+		super(className);
+	}
 
-  public ConverterInfo(AstEditor editor, ClassInstanceCreation creation) {
-    super(editor, creation);
-  }
+	public ConverterInfo(AstEditor editor, ClassInstanceCreation creation) {
+		super(editor, creation);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getBaseClassName() {
-    return "org.eclipse.core.databinding.conversion.IConverter";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getBaseClassName() {
+		return "org.eclipse.core.databinding.conversion.IConverter";
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/context/strategies/StrategyModelSupport.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/context/strategies/StrategyModelSupport.java
index fb00002ab..0a410d4c3 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/context/strategies/StrategyModelSupport.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/context/strategies/StrategyModelSupport.java
@@ -25,39 +25,39 @@
  * @coverage bindings.rcp.model.context
  */
 public class StrategyModelSupport extends AstModelSupport {
-  private final List<Expression> m_invocations = Lists.newArrayList();
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public StrategyModelSupport(AstObjectInfo model, Expression creation) {
-    super(model, creation);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void addInvocation(MethodInvocation invocation) {
-    m_invocations.add(invocation);
-    calculateNameReference(invocation);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IModelSupport
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean isRepresentedBy(Expression expression) throws Exception {
-    for (Expression invocation : m_invocations) {
-      if (invocation == expression) {
-        return true;
-      }
-    }
-    return super.isRepresentedBy(expression);
-  }
+	private final List<Expression> m_invocations = Lists.newArrayList();
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public StrategyModelSupport(AstObjectInfo model, Expression creation) {
+		super(model, creation);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void addInvocation(MethodInvocation invocation) {
+		m_invocations.add(invocation);
+		calculateNameReference(invocation);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IModelSupport
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean isRepresentedBy(Expression expression) throws Exception {
+		for (Expression invocation : m_invocations) {
+			if (invocation == expression) {
+				return true;
+			}
+		}
+		return super.isRepresentedBy(expression);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/context/strategies/StrategyPropertyInfo.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/context/strategies/StrategyPropertyInfo.java
index 074fd952a..36468c7b8 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/context/strategies/StrategyPropertyInfo.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/context/strategies/StrategyPropertyInfo.java
@@ -27,83 +27,83 @@
  * @coverage bindings.rcp.model.context
  */
 public abstract class StrategyPropertyInfo extends SimpleClassObjectInfo {
-  private boolean m_anonymous = false;
-  private String m_anonymousSource;
+	private boolean m_anonymous = false;
+	private String m_anonymousSource;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public StrategyPropertyInfo(String className) {
-    super(className);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public StrategyPropertyInfo(String className) {
+		super(className);
+	}
 
-  public StrategyPropertyInfo(AstEditor editor, ClassInstanceCreation creation) {
-    String className = AstNodeUtils.getFullyQualifiedName(creation, false);
-    if (creation.arguments().isEmpty()) {
-      ITypeBinding typeBinding = AstNodeUtils.getTypeBinding(creation);
-      if (typeBinding.isAnonymous()) {
-        m_anonymous = true;
-        m_anonymousSource = editor.getSource(creation);
-        className += " <<Anonymous>>";
-      }
-    } else {
-      String source = editor.getSource(creation);
-      int index = source.indexOf('(');
-      className += source.substring(index);
-    }
-    setClassName(className);
-  }
+	public StrategyPropertyInfo(AstEditor editor, ClassInstanceCreation creation) {
+		String className = AstNodeUtils.getFullyQualifiedName(creation, false);
+		if (creation.arguments().isEmpty()) {
+			ITypeBinding typeBinding = AstNodeUtils.getTypeBinding(creation);
+			if (typeBinding.isAnonymous()) {
+				m_anonymous = true;
+				m_anonymousSource = editor.getSource(creation);
+				className += " <<Anonymous>>";
+			}
+		} else {
+			String source = editor.getSource(creation);
+			int index = source.indexOf('(');
+			className += source.substring(index);
+		}
+		setClassName(className);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public boolean isAnonymous() {
-    return m_anonymous;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public boolean isAnonymous() {
+		return m_anonymous;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public final String getSourceCode(List<String> lines, CodeGenerationSupport generationSupport)
-      throws Exception {
-    String variable = getVariableIdentifier();
-    // check anonymous
-    if (m_anonymous) {
-      // check variable
-      if (variable == null) {
-        // no variable
-        return m_anonymousSource;
-      }
-      // variable mode
-      lines.add(getBaseClassName() + " " + variable + " = " + m_anonymousSource + ";");
-      return variable;
-    }
-    // normal
-    String defaultCostructor = m_className.indexOf('(') == -1 ? "()" : "";
-    // check variable
-    if (variable == null) {
-      // no variable
-      return "new " + m_className + defaultCostructor;
-    }
-    // variable mode
-    lines.add(getBaseClassName()
-        + " "
-        + variable
-        + " = new "
-        + m_className
-        + defaultCostructor
-        + ";");
-    return variable;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public final String getSourceCode(List<String> lines, CodeGenerationSupport generationSupport)
+			throws Exception {
+		String variable = getVariableIdentifier();
+		// check anonymous
+		if (m_anonymous) {
+			// check variable
+			if (variable == null) {
+				// no variable
+				return m_anonymousSource;
+			}
+			// variable mode
+			lines.add(getBaseClassName() + " " + variable + " = " + m_anonymousSource + ";");
+			return variable;
+		}
+		// normal
+		String defaultCostructor = m_className.indexOf('(') == -1 ? "()" : "";
+		// check variable
+		if (variable == null) {
+			// no variable
+			return "new " + m_className + defaultCostructor;
+		}
+		// variable mode
+		lines.add(getBaseClassName()
+				+ " "
+				+ variable
+				+ " = new "
+				+ m_className
+				+ defaultCostructor
+				+ ";");
+		return variable;
+	}
 
-  /**
-   * @return the model class name.
-   */
-  protected abstract String getBaseClassName();
+	/**
+	 * @return the model class name.
+	 */
+	protected abstract String getBaseClassName();
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/context/strategies/UpdateListStrategyInfo.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/context/strategies/UpdateListStrategyInfo.java
index c66ea3ec9..f91667b5c 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/context/strategies/UpdateListStrategyInfo.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/context/strategies/UpdateListStrategyInfo.java
@@ -33,125 +33,125 @@
  * @coverage bindings.rcp.model.context
  */
 public final class UpdateListStrategyInfo extends UpdateStrategyInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public UpdateListStrategyInfo() {
-    setStringValue(Activator.getStore().getString(IPreferenceConstants.UPDATE_LIST_STRATEGY_DEFAULT));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public UpdateListStrategyInfo() {
+		setStringValue(Activator.getStore().getString(IPreferenceConstants.UPDATE_LIST_STRATEGY_DEFAULT));
+	}
 
-  public UpdateListStrategyInfo(ClassInstanceCreation creation, Expression[] arguments) {
-    super(creation, arguments);
-  }
+	public UpdateListStrategyInfo(ClassInstanceCreation creation, Expression[] arguments) {
+		super(creation, arguments);
+	}
 
-  /**
-   * Note: this constructor used only for tests.
-   */
-  public UpdateListStrategyInfo(StrategyType strategyType,
-      Object strategyValue,
-      ConverterInfo converter) {
-    super(strategyType, strategyValue, converter);
-  }
+	/**
+	 * Note: this constructor used only for tests.
+	 */
+	public UpdateListStrategyInfo(StrategyType strategyType,
+			Object strategyValue,
+			ConverterInfo converter) {
+		super(strategyType, strategyValue, converter);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getStrategyClass() {
-    return "org.eclipse.core.databinding.UpdateListStrategy";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getStrategyClass() {
+		return "org.eclipse.core.databinding.UpdateListStrategy";
+	}
 
-  @Override
-  protected Object getStrategyValue(String value) {
-    if (value == null) {
-      return Value.POLICY_UPDATE;
-    }
-    if (value.endsWith("POLICY_NEVER")) {
-      return Value.POLICY_NEVER;
-    }
-    if (value.endsWith("POLICY_ON_REQUEST")) {
-      return Value.POLICY_ON_REQUEST;
-    }
-    if (value.endsWith("POLICY_UPDATE")) {
-      return Value.POLICY_UPDATE;
-    }
-    //
-    Assert.fail(Messages.UpdateListStrategyInfo_undefinedListStrategy + value);
-    return null;
-  }
+	@Override
+	protected Object getStrategyValue(String value) {
+		if (value == null) {
+			return Value.POLICY_UPDATE;
+		}
+		if (value.endsWith("POLICY_NEVER")) {
+			return Value.POLICY_NEVER;
+		}
+		if (value.endsWith("POLICY_ON_REQUEST")) {
+			return Value.POLICY_ON_REQUEST;
+		}
+		if (value.endsWith("POLICY_UPDATE")) {
+			return Value.POLICY_UPDATE;
+		}
+		//
+		Assert.fail(Messages.UpdateListStrategyInfo_undefinedListStrategy + value);
+		return null;
+	}
 
-  @Override
-  protected String getStrategyStringValue() {
-    switch ((Value) m_strategyValue) {
-      case POLICY_NEVER :
-        return "POLICY_NEVER";
-      case POLICY_ON_REQUEST :
-        return "POLICY_ON_REQUEST";
-      case POLICY_UPDATE :
-        return "POLICY_UPDATE";
-    }
-    Assert.fail(Messages.UpdateListStrategyInfo_undefinedListStrategy + m_strategyValue);
-    return null;
-  }
+	@Override
+	protected String getStrategyStringValue() {
+		switch ((Value) m_strategyValue) {
+		case POLICY_NEVER :
+			return "POLICY_NEVER";
+		case POLICY_ON_REQUEST :
+			return "POLICY_ON_REQUEST";
+		case POLICY_UPDATE :
+			return "POLICY_UPDATE";
+		}
+		Assert.fail(Messages.UpdateListStrategyInfo_undefinedListStrategy + m_strategyValue);
+		return null;
+	}
 
-  @Override
-  public void setStringValue(String value) {
-    if (value.endsWith("POLICY_NEVER")) {
-      m_strategyType = StrategyType.IntConstructor;
-      m_strategyValue = Value.POLICY_NEVER;
-    } else if (value.endsWith("POLICY_ON_REQUEST")) {
-      m_strategyType = StrategyType.IntConstructor;
-      m_strategyValue = Value.POLICY_ON_REQUEST;
-    } else if (value.endsWith("POLICY_UPDATE")) {
-      m_strategyType = StrategyType.Null;
-      m_strategyValue = Value.POLICY_UPDATE;
-    } else {
-      m_strategyType = StrategyType.ExtendetClass;
-      m_strategyValue = value;
-    }
-  }
+	@Override
+	public void setStringValue(String value) {
+		if (value.endsWith("POLICY_NEVER")) {
+			m_strategyType = StrategyType.IntConstructor;
+			m_strategyValue = Value.POLICY_NEVER;
+		} else if (value.endsWith("POLICY_ON_REQUEST")) {
+			m_strategyType = StrategyType.IntConstructor;
+			m_strategyValue = Value.POLICY_ON_REQUEST;
+		} else if (value.endsWith("POLICY_UPDATE")) {
+			m_strategyType = StrategyType.Null;
+			m_strategyValue = Value.POLICY_UPDATE;
+		} else {
+			m_strategyType = StrategyType.ExtendetClass;
+			m_strategyValue = value;
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected ChooseClassConfiguration createConfiguration(BindingUiContentProviderContext context) {
-    ChooseClassConfiguration configuration = super.createConfiguration(context);
-    configuration.setDialogFieldLabel(Messages.UpdateListStrategyInfo_title);
-    configuration.setDefaultValues(new String[]{
-        "POLICY_UPDATE",
-        "POLICY_NEVER",
-        "POLICY_ON_REQUEST"});
-    return configuration;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected ChooseClassConfiguration createConfiguration(BindingUiContentProviderContext context) {
+		ChooseClassConfiguration configuration = super.createConfiguration(context);
+		configuration.setDialogFieldLabel(Messages.UpdateListStrategyInfo_title);
+		configuration.setDefaultValues(new String[]{
+				"POLICY_UPDATE",
+				"POLICY_NEVER",
+		"POLICY_ON_REQUEST"});
+		return configuration;
+	}
 
-  @Override
-  public void createContentProviders(List<IUiContentProvider> providers,
-      BindingUiContentProviderContext context) throws Exception {
-    // self editor
-    providers.add(new UpdateStrategyUiContentProvider(createConfiguration(context), this));
-    // properties editor
-    UpdateStrategyPropertiesUiContentProvider propertiesUIContentProvider =
-        new UpdateStrategyPropertiesUiContentProvider(context.getDirection());
-    // converter
-    propertiesUIContentProvider.addProvider(new ConverterUiContentProvider(createConverterConfiguration(context),
-        this));
-    //
-    providers.add(propertiesUIContentProvider);
-  }
+	@Override
+	public void createContentProviders(List<IUiContentProvider> providers,
+			BindingUiContentProviderContext context) throws Exception {
+		// self editor
+		providers.add(new UpdateStrategyUiContentProvider(createConfiguration(context), this));
+		// properties editor
+		UpdateStrategyPropertiesUiContentProvider propertiesUIContentProvider =
+				new UpdateStrategyPropertiesUiContentProvider(context.getDirection());
+		// converter
+		propertiesUIContentProvider.addProvider(new ConverterUiContentProvider(createConverterConfiguration(context),
+				this));
+		//
+		providers.add(propertiesUIContentProvider);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Values
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static enum Value {
-    POLICY_NEVER, POLICY_ON_REQUEST, POLICY_UPDATE
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Values
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static enum Value {
+		POLICY_NEVER, POLICY_ON_REQUEST, POLICY_UPDATE
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/context/strategies/UpdateSetStrategyInfo.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/context/strategies/UpdateSetStrategyInfo.java
index f47c705f9..efe620477 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/context/strategies/UpdateSetStrategyInfo.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/context/strategies/UpdateSetStrategyInfo.java
@@ -33,125 +33,125 @@
  * @coverage bindings.rcp.model.context
  */
 public final class UpdateSetStrategyInfo extends UpdateStrategyInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public UpdateSetStrategyInfo() {
-    setStringValue(Activator.getStore().getString(IPreferenceConstants.UPDATE_SET_STRATEGY_DEFAULT));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public UpdateSetStrategyInfo() {
+		setStringValue(Activator.getStore().getString(IPreferenceConstants.UPDATE_SET_STRATEGY_DEFAULT));
+	}
 
-  public UpdateSetStrategyInfo(ClassInstanceCreation creation, Expression[] arguments) {
-    super(creation, arguments);
-  }
+	public UpdateSetStrategyInfo(ClassInstanceCreation creation, Expression[] arguments) {
+		super(creation, arguments);
+	}
 
-  /**
-   * Note: this constructor used only for tests.
-   */
-  public UpdateSetStrategyInfo(StrategyType strategyType,
-      Object strategyValue,
-      ConverterInfo converter) {
-    super(strategyType, strategyValue, converter);
-  }
+	/**
+	 * Note: this constructor used only for tests.
+	 */
+	public UpdateSetStrategyInfo(StrategyType strategyType,
+			Object strategyValue,
+			ConverterInfo converter) {
+		super(strategyType, strategyValue, converter);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getStrategyClass() {
-    return "org.eclipse.core.databinding.UpdateSetStrategy";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getStrategyClass() {
+		return "org.eclipse.core.databinding.UpdateSetStrategy";
+	}
 
-  @Override
-  protected Object getStrategyValue(String value) {
-    if (value == null) {
-      return Value.POLICY_UPDATE;
-    }
-    if (value.endsWith("POLICY_NEVER")) {
-      return Value.POLICY_NEVER;
-    }
-    if (value.endsWith("POLICY_ON_REQUEST")) {
-      return Value.POLICY_ON_REQUEST;
-    }
-    if (value.endsWith("POLICY_UPDATE")) {
-      return Value.POLICY_UPDATE;
-    }
-    //
-    Assert.fail(Messages.UpdateSetStrategyInfo_errUndefinedStratery + value);
-    return null;
-  }
+	@Override
+	protected Object getStrategyValue(String value) {
+		if (value == null) {
+			return Value.POLICY_UPDATE;
+		}
+		if (value.endsWith("POLICY_NEVER")) {
+			return Value.POLICY_NEVER;
+		}
+		if (value.endsWith("POLICY_ON_REQUEST")) {
+			return Value.POLICY_ON_REQUEST;
+		}
+		if (value.endsWith("POLICY_UPDATE")) {
+			return Value.POLICY_UPDATE;
+		}
+		//
+		Assert.fail(Messages.UpdateSetStrategyInfo_errUndefinedStratery + value);
+		return null;
+	}
 
-  @Override
-  protected String getStrategyStringValue() {
-    switch ((Value) m_strategyValue) {
-      case POLICY_NEVER :
-        return "POLICY_NEVER";
-      case POLICY_ON_REQUEST :
-        return "POLICY_ON_REQUEST";
-      case POLICY_UPDATE :
-        return "POLICY_UPDATE";
-    }
-    Assert.fail(Messages.UpdateSetStrategyInfo_errUndefinedStratery + m_strategyValue);
-    return null;
-  }
+	@Override
+	protected String getStrategyStringValue() {
+		switch ((Value) m_strategyValue) {
+		case POLICY_NEVER :
+			return "POLICY_NEVER";
+		case POLICY_ON_REQUEST :
+			return "POLICY_ON_REQUEST";
+		case POLICY_UPDATE :
+			return "POLICY_UPDATE";
+		}
+		Assert.fail(Messages.UpdateSetStrategyInfo_errUndefinedStratery + m_strategyValue);
+		return null;
+	}
 
-  @Override
-  public void setStringValue(String value) {
-    if (value.endsWith("POLICY_NEVER")) {
-      m_strategyType = StrategyType.IntConstructor;
-      m_strategyValue = Value.POLICY_NEVER;
-    } else if (value.endsWith("POLICY_ON_REQUEST")) {
-      m_strategyType = StrategyType.IntConstructor;
-      m_strategyValue = Value.POLICY_ON_REQUEST;
-    } else if (value.endsWith("POLICY_UPDATE")) {
-      m_strategyType = StrategyType.Null;
-      m_strategyValue = Value.POLICY_UPDATE;
-    } else {
-      m_strategyType = StrategyType.ExtendetClass;
-      m_strategyValue = value;
-    }
-  }
+	@Override
+	public void setStringValue(String value) {
+		if (value.endsWith("POLICY_NEVER")) {
+			m_strategyType = StrategyType.IntConstructor;
+			m_strategyValue = Value.POLICY_NEVER;
+		} else if (value.endsWith("POLICY_ON_REQUEST")) {
+			m_strategyType = StrategyType.IntConstructor;
+			m_strategyValue = Value.POLICY_ON_REQUEST;
+		} else if (value.endsWith("POLICY_UPDATE")) {
+			m_strategyType = StrategyType.Null;
+			m_strategyValue = Value.POLICY_UPDATE;
+		} else {
+			m_strategyType = StrategyType.ExtendetClass;
+			m_strategyValue = value;
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected ChooseClassConfiguration createConfiguration(BindingUiContentProviderContext context) {
-    ChooseClassConfiguration configuration = super.createConfiguration(context);
-    configuration.setDialogFieldLabel(Messages.UpdateSetStrategyInfo_strategyLabel);
-    configuration.setDefaultValues(new String[]{
-        "POLICY_UPDATE",
-        "POLICY_NEVER",
-        "POLICY_ON_REQUEST"});
-    return configuration;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected ChooseClassConfiguration createConfiguration(BindingUiContentProviderContext context) {
+		ChooseClassConfiguration configuration = super.createConfiguration(context);
+		configuration.setDialogFieldLabel(Messages.UpdateSetStrategyInfo_strategyLabel);
+		configuration.setDefaultValues(new String[]{
+				"POLICY_UPDATE",
+				"POLICY_NEVER",
+		"POLICY_ON_REQUEST"});
+		return configuration;
+	}
 
-  @Override
-  public void createContentProviders(List<IUiContentProvider> providers,
-      BindingUiContentProviderContext context) throws Exception {
-    // self editor
-    providers.add(new UpdateStrategyUiContentProvider(createConfiguration(context), this));
-    // properties editor
-    UpdateStrategyPropertiesUiContentProvider propertiesUIContentProvider =
-        new UpdateStrategyPropertiesUiContentProvider(context.getDirection());
-    // converter
-    propertiesUIContentProvider.addProvider(new ConverterUiContentProvider(createConverterConfiguration(context),
-        this));
-    //
-    providers.add(propertiesUIContentProvider);
-  }
+	@Override
+	public void createContentProviders(List<IUiContentProvider> providers,
+			BindingUiContentProviderContext context) throws Exception {
+		// self editor
+		providers.add(new UpdateStrategyUiContentProvider(createConfiguration(context), this));
+		// properties editor
+		UpdateStrategyPropertiesUiContentProvider propertiesUIContentProvider =
+				new UpdateStrategyPropertiesUiContentProvider(context.getDirection());
+		// converter
+		propertiesUIContentProvider.addProvider(new ConverterUiContentProvider(createConverterConfiguration(context),
+				this));
+		//
+		providers.add(propertiesUIContentProvider);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Values
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static enum Value {
-    POLICY_NEVER, POLICY_ON_REQUEST, POLICY_UPDATE
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Values
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static enum Value {
+		POLICY_NEVER, POLICY_ON_REQUEST, POLICY_UPDATE
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/context/strategies/UpdateStrategyInfo.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/context/strategies/UpdateStrategyInfo.java
index 645d10442..9a524da16 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/context/strategies/UpdateStrategyInfo.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/context/strategies/UpdateStrategyInfo.java
@@ -42,365 +42,365 @@
  * @coverage bindings.rcp.model.context
  */
 public abstract class UpdateStrategyInfo extends AstObjectInfo {
-  protected StrategyType m_strategyType;
-  protected Object m_strategyValue;
-  protected ConverterInfo m_converter;
+	protected StrategyType m_strategyType;
+	protected Object m_strategyValue;
+	protected ConverterInfo m_converter;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected UpdateStrategyInfo() {
-    m_strategyType = StrategyType.Null;
-    m_strategyValue = getStrategyValue(null);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected UpdateStrategyInfo() {
+		m_strategyType = StrategyType.Null;
+		m_strategyValue = getStrategyValue(null);
+	}
 
-  protected UpdateStrategyInfo(ClassInstanceCreation creation, Expression[] arguments) {
-    String className = AstNodeUtils.getFullyQualifiedName(creation, false);
-    // parse value
-    if (arguments.length == 0) {
-      // default constructor
-      if (getStrategyClass().equals(className)) {
-        // original strategy
-        m_strategyType = StrategyType.DefaultConstructor;
-        m_strategyValue = getStrategyValue(null);
-      } else {
-        // inherit strategy
-        m_strategyType = StrategyType.ExtendetClass;
-        m_strategyValue = className;
-      }
-    } else {
-      // original strategy with one parameter
-      if (getStrategyClass().equals(className) && arguments.length == 1) {
-        m_strategyType = StrategyType.IntConstructor;
-        Expression expression = AstNodeUtils.getActualVariableExpression(arguments[0]);
-        m_strategyValue = getStrategyValue(expression.toString());
-      } else {
-        String source = EditorState.getActiveJavaInfo().getEditor().getSource(creation);
-        int index = source.indexOf('(');
-        // inherit strategy
-        m_strategyType = StrategyType.ExtendetClass;
-        m_strategyValue = className + source.substring(index);
-      }
-    }
-  }
+	protected UpdateStrategyInfo(ClassInstanceCreation creation, Expression[] arguments) {
+		String className = AstNodeUtils.getFullyQualifiedName(creation, false);
+		// parse value
+		if (arguments.length == 0) {
+			// default constructor
+			if (getStrategyClass().equals(className)) {
+				// original strategy
+				m_strategyType = StrategyType.DefaultConstructor;
+				m_strategyValue = getStrategyValue(null);
+			} else {
+				// inherit strategy
+				m_strategyType = StrategyType.ExtendetClass;
+				m_strategyValue = className;
+			}
+		} else {
+			// original strategy with one parameter
+			if (getStrategyClass().equals(className) && arguments.length == 1) {
+				m_strategyType = StrategyType.IntConstructor;
+				Expression expression = AstNodeUtils.getActualVariableExpression(arguments[0]);
+				m_strategyValue = getStrategyValue(expression.toString());
+			} else {
+				String source = EditorState.getActiveJavaInfo().getEditor().getSource(creation);
+				int index = source.indexOf('(');
+				// inherit strategy
+				m_strategyType = StrategyType.ExtendetClass;
+				m_strategyValue = className + source.substring(index);
+			}
+		}
+	}
 
-  /**
-   * Note: this constructor used only for tests.
-   */
-  protected UpdateStrategyInfo(StrategyType strategyType,
-      Object strategyValue,
-      ConverterInfo converter) {
-    m_strategyType = strategyType;
-    m_strategyValue = strategyValue;
-    m_converter = converter;
-  }
+	/**
+	 * Note: this constructor used only for tests.
+	 */
+	protected UpdateStrategyInfo(StrategyType strategyType,
+			Object strategyValue,
+			ConverterInfo converter) {
+		m_strategyType = strategyType;
+		m_strategyValue = strategyValue;
+		m_converter = converter;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parser
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public AstObjectInfo parseExpression(AstEditor editor,
-      String signature,
-      MethodInvocation invocation,
-      Expression[] arguments,
-      IModelResolver resolver,
-      IDatabindingsProvider provider) throws Exception {
-    // parse converter
-    if ("setConverter".equals(invocation.getName().getIdentifier())) {
-      Assert.isLegal(arguments.length == 1);
-      Assert.isNull(m_converter);
-      AstObjectInfo model = resolver.getModel(arguments[0]);
-      if (model instanceof ConverterInfo) {
-        m_converter = (ConverterInfo) model;
-      } else {
-        // A class can implement both IConverter and IValidator
-        m_converter = new ConverterInfo(editor, (ClassInstanceCreation) arguments[0]);
-      }
-      if (m_converter == null) {
-        AbstractParser.addError(
-            editor,
-            MessageFormat.format(
-                Messages.UpdateStrategyInfo_converterArgumentNotFound,
-                arguments[0]),
-            new Throwable());
-      } else {
-        IModelSupport modelSupport = resolver.getModelSupport(invocation.getExpression());
-        if (modelSupport instanceof StrategyModelSupport) {
-          StrategyModelSupport strategyModelSupport = (StrategyModelSupport) modelSupport;
-          strategyModelSupport.addInvocation(invocation);
-        }
-      }
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parser
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public AstObjectInfo parseExpression(AstEditor editor,
+			String signature,
+			MethodInvocation invocation,
+			Expression[] arguments,
+			IModelResolver resolver,
+			IDatabindingsProvider provider) throws Exception {
+		// parse converter
+		if ("setConverter".equals(invocation.getName().getIdentifier())) {
+			Assert.isLegal(arguments.length == 1);
+			Assert.isNull(m_converter);
+			AstObjectInfo model = resolver.getModel(arguments[0]);
+			if (model instanceof ConverterInfo) {
+				m_converter = (ConverterInfo) model;
+			} else {
+				// A class can implement both IConverter and IValidator
+				m_converter = new ConverterInfo(editor, (ClassInstanceCreation) arguments[0]);
+			}
+			if (m_converter == null) {
+				AbstractParser.addError(
+						editor,
+						MessageFormat.format(
+								Messages.UpdateStrategyInfo_converterArgumentNotFound,
+								arguments[0]),
+						new Throwable());
+			} else {
+				IModelSupport modelSupport = resolver.getModelSupport(invocation.getExpression());
+				if (modelSupport instanceof StrategyModelSupport) {
+					StrategyModelSupport strategyModelSupport = (StrategyModelSupport) modelSupport;
+					strategyModelSupport.addInvocation(invocation);
+				}
+			}
+		}
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return {@link StrategyType} for this strategy.
-   */
-  public final StrategyType getStrategyType() {
-    return m_strategyType;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return {@link StrategyType} for this strategy.
+	 */
+	public final StrategyType getStrategyType() {
+		return m_strategyType;
+	}
 
-  /**
-   * @return the current value for this strategy, may be <code>String</code> or <code>enum</code>.
-   */
-  public final Object getStrategyValue() {
-    return m_strategyValue;
-  }
+	/**
+	 * @return the current value for this strategy, may be <code>String</code> or <code>enum</code>.
+	 */
+	public final Object getStrategyValue() {
+		return m_strategyValue;
+	}
 
-  /**
-   * @return string presentation for current value.
-   */
-  public final String getStringValue() {
-    if (m_strategyType == StrategyType.ExtendetClass) {
-      return (String) m_strategyValue;
-    }
-    return getStrategyStringValue();
-  }
+	/**
+	 * @return string presentation for current value.
+	 */
+	public final String getStringValue() {
+		if (m_strategyType == StrategyType.ExtendetClass) {
+			return (String) m_strategyValue;
+		}
+		return getStrategyStringValue();
+	}
 
-  protected abstract String getStrategyClass();
+	protected abstract String getStrategyClass();
 
-  /**
-   * @return strategy value (<code>enum</code> and etc.) for given string value.
-   */
-  protected abstract Object getStrategyValue(String value);
+	/**
+	 * @return strategy value (<code>enum</code> and etc.) for given string value.
+	 */
+	protected abstract Object getStrategyValue(String value);
 
-  /**
-   * @return string presentation for current value.
-   */
-  protected abstract String getStrategyStringValue();
+	/**
+	 * @return string presentation for current value.
+	 */
+	protected abstract String getStrategyStringValue();
 
-  /**
-   * Sets strategy value.
-   */
-  public abstract void setStringValue(String value);
+	/**
+	 * Sets strategy value.
+	 */
+	public abstract void setStringValue(String value);
 
-  /**
-   * @return {@link ConverterInfo} for this strategy, may be <code>null</code>.
-   */
-  public final ConverterInfo getConverter() {
-    return m_converter;
-  }
+	/**
+	 * @return {@link ConverterInfo} for this strategy, may be <code>null</code>.
+	 */
+	public final ConverterInfo getConverter() {
+		return m_converter;
+	}
 
-  /**
-   * Sets or clear {@link ConverterInfo} for this strategy.
-   */
-  public void setConverter(ConverterInfo converter) {
-    m_converter = converter;
-  }
+	/**
+	 * Sets or clear {@link ConverterInfo} for this strategy.
+	 */
+	public void setConverter(ConverterInfo converter) {
+		m_converter = converter;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final String getPresentationText() throws Exception {
-    return getStringValue();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final String getPresentationText() throws Exception {
+		return getStringValue();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Create configuration for edit this strategy.
-   */
-  protected ChooseClassConfiguration createConfiguration(BindingUiContentProviderContext context) {
-    ChooseClassConfiguration configuration = new ChooseClassConfiguration();
-    configuration.setValueScope(getStrategyClass());
-    configuration.setRetargetClassName(getStrategyClass(), "POLICY_UPDATE");
-    configuration.setBaseClassName(getStrategyClass());
-    configuration.setConstructorParameters(ArrayUtils.EMPTY_CLASS_ARRAY);
-    configuration.setEmptyClassErrorMessage(
-        MessageFormat.format(Messages.UpdateStrategyInfo_errorMessage, context.getDirection()));
-    configuration.setErrorMessagePrefix(
-        MessageFormat.format(
-            Messages.UpdateStrategyInfo_errorMessagePrefix,
-            context.getDirection()));
-    //
-    if (m_strategyType == StrategyType.ExtendetClass
-        && m_strategyValue.toString().indexOf('(') != -1) {
-      configuration.addDefaultStart(m_strategyValue.toString());
-    }
-    //
-    return configuration;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Create configuration for edit this strategy.
+	 */
+	protected ChooseClassConfiguration createConfiguration(BindingUiContentProviderContext context) {
+		ChooseClassConfiguration configuration = new ChooseClassConfiguration();
+		configuration.setValueScope(getStrategyClass());
+		configuration.setRetargetClassName(getStrategyClass(), "POLICY_UPDATE");
+		configuration.setBaseClassName(getStrategyClass());
+		configuration.setConstructorParameters(ArrayUtils.EMPTY_CLASS_ARRAY);
+		configuration.setEmptyClassErrorMessage(
+				MessageFormat.format(Messages.UpdateStrategyInfo_errorMessage, context.getDirection()));
+		configuration.setErrorMessagePrefix(
+				MessageFormat.format(
+						Messages.UpdateStrategyInfo_errorMessagePrefix,
+						context.getDirection()));
+		//
+		if (m_strategyType == StrategyType.ExtendetClass
+				&& m_strategyValue.toString().indexOf('(') != -1) {
+			configuration.addDefaultStart(m_strategyValue.toString());
+		}
+		//
+		return configuration;
+	}
 
-  /**
-   * Create configuration for edit strategy convert.
-   */
-  protected final ChooseClassConfiguration createConverterConfiguration(
-      BindingUiContentProviderContext context) {
-    ChooseClassConfiguration configuration = new ChooseClassConfiguration();
-    configuration.setDialogFieldLabel(Messages.UpdateStrategyInfo_chooseLabel);
-    configuration.setValueScope("org.eclipse.core.databinding.conversion.IConverter");
-    configuration.setClearValue("N/S");
-    configuration.setBaseClassName("org.eclipse.core.databinding.conversion.IConverter");
-    configuration.setConstructorParameters(ArrayUtils.EMPTY_CLASS_ARRAY);
-    configuration.setEmptyClassErrorMessage(
-        MessageFormat.format(
-            Messages.UpdateStrategyInfo_chooseErrorMessage,
-            context.getDirection()));
-    configuration.setErrorMessagePrefix(
-        MessageFormat.format(
-            Messages.UpdateStrategyInfo_chooseErrorMessagePrefix,
-            context.getDirection()));
-    //
-    if (m_converter != null
-        && (m_converter.isAnonymous() || m_converter.getClassName().indexOf('(') != -1)) {
-      configuration.addDefaultStart(m_converter.getClassName());
-    }
-    //
-    return configuration;
-  }
+	/**
+	 * Create configuration for edit strategy convert.
+	 */
+	protected final ChooseClassConfiguration createConverterConfiguration(
+			BindingUiContentProviderContext context) {
+		ChooseClassConfiguration configuration = new ChooseClassConfiguration();
+		configuration.setDialogFieldLabel(Messages.UpdateStrategyInfo_chooseLabel);
+		configuration.setValueScope("org.eclipse.core.databinding.conversion.IConverter");
+		configuration.setClearValue("N/S");
+		configuration.setBaseClassName("org.eclipse.core.databinding.conversion.IConverter");
+		configuration.setConstructorParameters(ArrayUtils.EMPTY_CLASS_ARRAY);
+		configuration.setEmptyClassErrorMessage(
+				MessageFormat.format(
+						Messages.UpdateStrategyInfo_chooseErrorMessage,
+						context.getDirection()));
+		configuration.setErrorMessagePrefix(
+				MessageFormat.format(
+						Messages.UpdateStrategyInfo_chooseErrorMessagePrefix,
+						context.getDirection()));
+		//
+		if (m_converter != null
+				&& (m_converter.isAnonymous() || m_converter.getClassName().indexOf('(') != -1)) {
+			configuration.addDefaultStart(m_converter.getClassName());
+		}
+		//
+		return configuration;
+	}
 
-  /**
-   * Create {@link IUiContentProvider} content providers for edit this model.
-   */
-  public abstract void createContentProviders(List<IUiContentProvider> providers,
-      BindingUiContentProviderContext context) throws Exception;
+	/**
+	 * Create {@link IUiContentProvider} content providers for edit this model.
+	 */
+	public abstract void createContentProviders(List<IUiContentProvider> providers,
+			BindingUiContentProviderContext context) throws Exception;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Generate source code association with this object.
-   */
-  public final String getSourceCode(List<String> lines, CodeGenerationSupport generationSupport)
-      throws Exception {
-    // handle variable
-    boolean hasVariable = sourceCodeHasVariable();
-    //
-    if (getVariableIdentifier() == null) {
-      if (hasVariable) {
-        setVariableIdentifier(generationSupport.generateLocalName("strategy"));
-      }
-    } else {
-      hasVariable = true;
-    }
-    //
-    String strategyClassName = getStrategyClass();
-    // generate code
-    switch (m_strategyType) {
-      case Null :
-        if (!hasVariable) {
-          setVariableIdentifier(null);
-          return "null";
-        }
-      case DefaultConstructor :
-        if (hasVariable) {
-          lines.add(
-              strategyClassName
-                  + " "
-                  + getVariableIdentifier()
-                  + " = "
-                  + "new "
-                  + strategyClassName
-                  + "();");
-        } else {
-          return "new " + strategyClassName + "()";
-        }
-        break;
-      case IntConstructor :
-        if (hasVariable) {
-          lines.add(
-              strategyClassName
-                  + " "
-                  + getVariableIdentifier()
-                  + " = new "
-                  + strategyClassName
-                  + "("
-                  + strategyClassName
-                  + "."
-                  + getStrategyStringValue()
-                  + ");");
-        } else {
-          return "new "
-              + strategyClassName
-              + "("
-              + strategyClassName
-              + "."
-              + getStrategyStringValue()
-              + ")";
-        }
-        break;
-      case ExtendetClass :
-        String defaultCostructor = m_strategyValue.toString().indexOf('(') == -1 ? "()" : "";
-        if (hasVariable) {
-          lines.add(
-              strategyClassName
-                  + " "
-                  + getVariableIdentifier()
-                  + " = new "
-                  + m_strategyValue
-                  + defaultCostructor
-                  + ";");
-        } else {
-          return "new " + m_strategyValue + defaultCostructor;
-        }
-        break;
-    }
-    //
-    addSourceCodeForProperties(lines, generationSupport);
-    //
-    Assert.isTrue(hasVariable);
-    return getVariableIdentifier();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Generate source code association with this object.
+	 */
+	public final String getSourceCode(List<String> lines, CodeGenerationSupport generationSupport)
+			throws Exception {
+		// handle variable
+		boolean hasVariable = sourceCodeHasVariable();
+		//
+		if (getVariableIdentifier() == null) {
+			if (hasVariable) {
+				setVariableIdentifier(generationSupport.generateLocalName("strategy"));
+			}
+		} else {
+			hasVariable = true;
+		}
+		//
+		String strategyClassName = getStrategyClass();
+		// generate code
+		switch (m_strategyType) {
+		case Null :
+			if (!hasVariable) {
+				setVariableIdentifier(null);
+				return "null";
+			}
+		case DefaultConstructor :
+			if (hasVariable) {
+				lines.add(
+						strategyClassName
+						+ " "
+						+ getVariableIdentifier()
+						+ " = "
+						+ "new "
+						+ strategyClassName
+						+ "();");
+			} else {
+				return "new " + strategyClassName + "()";
+			}
+			break;
+		case IntConstructor :
+			if (hasVariable) {
+				lines.add(
+						strategyClassName
+						+ " "
+						+ getVariableIdentifier()
+						+ " = new "
+						+ strategyClassName
+						+ "("
+						+ strategyClassName
+						+ "."
+						+ getStrategyStringValue()
+						+ ");");
+			} else {
+				return "new "
+						+ strategyClassName
+						+ "("
+						+ strategyClassName
+						+ "."
+						+ getStrategyStringValue()
+						+ ")";
+			}
+			break;
+		case ExtendetClass :
+			String defaultCostructor = m_strategyValue.toString().indexOf('(') == -1 ? "()" : "";
+			if (hasVariable) {
+				lines.add(
+						strategyClassName
+						+ " "
+						+ getVariableIdentifier()
+						+ " = new "
+						+ m_strategyValue
+						+ defaultCostructor
+						+ ";");
+			} else {
+				return "new " + m_strategyValue + defaultCostructor;
+			}
+			break;
+		}
+		//
+		addSourceCodeForProperties(lines, generationSupport);
+		//
+		Assert.isTrue(hasVariable);
+		return getVariableIdentifier();
+	}
 
-  /**
-   * @return <code>true</code> if strategy creation need assignment to variable.
-   */
-  protected boolean sourceCodeHasVariable() {
-    return m_converter != null;
-  }
+	/**
+	 * @return <code>true</code> if strategy creation need assignment to variable.
+	 */
+	protected boolean sourceCodeHasVariable() {
+		return m_converter != null;
+	}
 
-  /**
-   * Add additional source code (converter, validators, etc.).
-   */
-  protected void addSourceCodeForProperties(List<String> lines,
-      CodeGenerationSupport generationSupport) throws Exception {
-    if (m_converter != null) {
-      lines.add(
-          getVariableIdentifier()
-              + ".setConverter("
-              + m_converter.getSourceCode(lines, generationSupport)
-              + ");");
-    }
-  }
+	/**
+	 * Add additional source code (converter, validators, etc.).
+	 */
+	protected void addSourceCodeForProperties(List<String> lines,
+			CodeGenerationSupport generationSupport) throws Exception {
+		if (m_converter != null) {
+			lines.add(
+					getVariableIdentifier()
+					+ ".setConverter("
+					+ m_converter.getSourceCode(lines, generationSupport)
+					+ ");");
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Visiting
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void accept(AstObjectInfoVisitor visitor) throws Exception {
-    super.accept(visitor);
-    // visit to converter
-    if (m_converter != null) {
-      m_converter.accept(visitor);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Visiting
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void accept(AstObjectInfoVisitor visitor) throws Exception {
+		super.accept(visitor);
+		// visit to converter
+		if (m_converter != null) {
+			m_converter.accept(visitor);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Type
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static enum StrategyType {
-    Null, DefaultConstructor, IntConstructor, ExtendetClass
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Type
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static enum StrategyType {
+		Null, DefaultConstructor, IntConstructor, ExtendetClass
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/context/strategies/UpdateValueStrategyInfo.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/context/strategies/UpdateValueStrategyInfo.java
index 8a8b61d16..4717b3210 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/context/strategies/UpdateValueStrategyInfo.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/context/strategies/UpdateValueStrategyInfo.java
@@ -49,286 +49,286 @@
  * @coverage bindings.rcp.model.context
  */
 public final class UpdateValueStrategyInfo extends UpdateStrategyInfo {
-  private static final String[] VALIDATORS = {
-      "setAfterConvertValidator",
-      "setAfterGetValidator",
-      "setBeforeSetValidator"};
-  private final Map<String, ValidatorInfo> m_validators = Maps.newHashMap();
+	private static final String[] VALIDATORS = {
+			"setAfterConvertValidator",
+			"setAfterGetValidator",
+	"setBeforeSetValidator"};
+	private final Map<String, ValidatorInfo> m_validators = Maps.newHashMap();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public UpdateValueStrategyInfo() {
-    setStringValue(Activator.getStore().getString(
-        IPreferenceConstants.UPDATE_VALUE_STRATEGY_DEFAULT));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public UpdateValueStrategyInfo() {
+		setStringValue(Activator.getStore().getString(
+				IPreferenceConstants.UPDATE_VALUE_STRATEGY_DEFAULT));
+	}
 
-  public UpdateValueStrategyInfo(ClassInstanceCreation creation, Expression[] arguments) {
-    super(creation, arguments);
-  }
+	public UpdateValueStrategyInfo(ClassInstanceCreation creation, Expression[] arguments) {
+		super(creation, arguments);
+	}
 
-  /**
-   * Note: this constructor used only for tests.
-   */
-  public UpdateValueStrategyInfo(StrategyType strategyType,
-      Object strategyValue,
-      ConverterInfo converter) {
-    super(strategyType, strategyValue, converter);
-  }
+	/**
+	 * Note: this constructor used only for tests.
+	 */
+	public UpdateValueStrategyInfo(StrategyType strategyType,
+			Object strategyValue,
+			ConverterInfo converter) {
+		super(strategyType, strategyValue, converter);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parser
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public AstObjectInfo parseExpression(AstEditor editor,
-      String signature,
-      MethodInvocation invocation,
-      Expression[] arguments,
-      IModelResolver resolver,
-      IDatabindingsProvider provider) throws Exception {
-    String methodName = invocation.getName().getIdentifier();
-    // parse validator
-    if (ArrayUtils.contains(VALIDATORS, methodName)) {
-      Assert.isLegal(arguments.length == 1);
-      Assert.isNull(m_validators.get(methodName));
-      ValidatorInfo validator = (ValidatorInfo) resolver.getModel(arguments[0]);
-      if (validator == null) {
-        AbstractParser.addError(editor, MessageFormat.format(
-            Messages.UpdateValueStrategyInfo_validatorArgumentNotFound,
-            arguments[0]), new Throwable());
-      } else {
-        m_validators.put(methodName, validator);
-        //
-        IModelSupport modelSupport = resolver.getModelSupport(invocation.getExpression());
-        if (modelSupport instanceof StrategyModelSupport) {
-          StrategyModelSupport strategyModelSupport = (StrategyModelSupport) modelSupport;
-          strategyModelSupport.addInvocation(invocation);
-        }
-      }
-    }
-    //
-    return super.parseExpression(editor, signature, invocation, arguments, resolver, provider);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parser
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public AstObjectInfo parseExpression(AstEditor editor,
+			String signature,
+			MethodInvocation invocation,
+			Expression[] arguments,
+			IModelResolver resolver,
+			IDatabindingsProvider provider) throws Exception {
+		String methodName = invocation.getName().getIdentifier();
+		// parse validator
+		if (ArrayUtils.contains(VALIDATORS, methodName)) {
+			Assert.isLegal(arguments.length == 1);
+			Assert.isNull(m_validators.get(methodName));
+			ValidatorInfo validator = (ValidatorInfo) resolver.getModel(arguments[0]);
+			if (validator == null) {
+				AbstractParser.addError(editor, MessageFormat.format(
+						Messages.UpdateValueStrategyInfo_validatorArgumentNotFound,
+						arguments[0]), new Throwable());
+			} else {
+				m_validators.put(methodName, validator);
+				//
+				IModelSupport modelSupport = resolver.getModelSupport(invocation.getExpression());
+				if (modelSupport instanceof StrategyModelSupport) {
+					StrategyModelSupport strategyModelSupport = (StrategyModelSupport) modelSupport;
+					strategyModelSupport.addInvocation(invocation);
+				}
+			}
+		}
+		//
+		return super.parseExpression(editor, signature, invocation, arguments, resolver, provider);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getStrategyClass() {
-    return "org.eclipse.core.databinding.UpdateValueStrategy";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getStrategyClass() {
+		return "org.eclipse.core.databinding.UpdateValueStrategy";
+	}
 
-  @Override
-  protected Object getStrategyValue(String value) {
-    if (value == null) {
-      return Value.POLICY_UPDATE;
-    }
-    if (value.endsWith("POLICY_NEVER")) {
-      return Value.POLICY_NEVER;
-    }
-    if (value.endsWith("POLICY_ON_REQUEST")) {
-      return Value.POLICY_ON_REQUEST;
-    }
-    if (value.endsWith("POLICY_CONVERT")) {
-      return Value.POLICY_CONVERT;
-    }
-    if (value.endsWith("POLICY_UPDATE")) {
-      return Value.POLICY_UPDATE;
-    }
-    //
-    Assert.fail(Messages.UpdateValueStrategyInfo_undefinedValueStrategy + value);
-    return null;
-  }
+	@Override
+	protected Object getStrategyValue(String value) {
+		if (value == null) {
+			return Value.POLICY_UPDATE;
+		}
+		if (value.endsWith("POLICY_NEVER")) {
+			return Value.POLICY_NEVER;
+		}
+		if (value.endsWith("POLICY_ON_REQUEST")) {
+			return Value.POLICY_ON_REQUEST;
+		}
+		if (value.endsWith("POLICY_CONVERT")) {
+			return Value.POLICY_CONVERT;
+		}
+		if (value.endsWith("POLICY_UPDATE")) {
+			return Value.POLICY_UPDATE;
+		}
+		//
+		Assert.fail(Messages.UpdateValueStrategyInfo_undefinedValueStrategy + value);
+		return null;
+	}
 
-  @Override
-  protected String getStrategyStringValue() {
-    switch ((Value) m_strategyValue) {
-      case POLICY_NEVER :
-        return "POLICY_NEVER";
-      case POLICY_ON_REQUEST :
-        return "POLICY_ON_REQUEST";
-      case POLICY_CONVERT :
-        return "POLICY_CONVERT";
-      case POLICY_UPDATE :
-        return "POLICY_UPDATE";
-    }
-    Assert.fail(Messages.UpdateValueStrategyInfo_undefinedValueStrategy + m_strategyValue);
-    return null;
-  }
+	@Override
+	protected String getStrategyStringValue() {
+		switch ((Value) m_strategyValue) {
+		case POLICY_NEVER :
+			return "POLICY_NEVER";
+		case POLICY_ON_REQUEST :
+			return "POLICY_ON_REQUEST";
+		case POLICY_CONVERT :
+			return "POLICY_CONVERT";
+		case POLICY_UPDATE :
+			return "POLICY_UPDATE";
+		}
+		Assert.fail(Messages.UpdateValueStrategyInfo_undefinedValueStrategy + m_strategyValue);
+		return null;
+	}
 
-  @Override
-  public void setStringValue(String value) {
-    if (value.endsWith("POLICY_NEVER")) {
-      m_strategyType = StrategyType.IntConstructor;
-      m_strategyValue = Value.POLICY_NEVER;
-    } else if (value.endsWith("POLICY_ON_REQUEST")) {
-      m_strategyType = StrategyType.IntConstructor;
-      m_strategyValue = Value.POLICY_ON_REQUEST;
-    } else if (value.endsWith("POLICY_CONVERT")) {
-      m_strategyType = StrategyType.IntConstructor;
-      m_strategyValue = Value.POLICY_CONVERT;
-    } else if (value.endsWith("POLICY_UPDATE")) {
-      m_strategyType = StrategyType.Null;
-      m_strategyValue = Value.POLICY_UPDATE;
-    } else {
-      m_strategyType = StrategyType.ExtendetClass;
-      m_strategyValue = value;
-    }
-  }
+	@Override
+	public void setStringValue(String value) {
+		if (value.endsWith("POLICY_NEVER")) {
+			m_strategyType = StrategyType.IntConstructor;
+			m_strategyValue = Value.POLICY_NEVER;
+		} else if (value.endsWith("POLICY_ON_REQUEST")) {
+			m_strategyType = StrategyType.IntConstructor;
+			m_strategyValue = Value.POLICY_ON_REQUEST;
+		} else if (value.endsWith("POLICY_CONVERT")) {
+			m_strategyType = StrategyType.IntConstructor;
+			m_strategyValue = Value.POLICY_CONVERT;
+		} else if (value.endsWith("POLICY_UPDATE")) {
+			m_strategyType = StrategyType.Null;
+			m_strategyValue = Value.POLICY_UPDATE;
+		} else {
+			m_strategyType = StrategyType.ExtendetClass;
+			m_strategyValue = value;
+		}
+	}
 
-  public ValidatorInfo getAfterConvertValidator() {
-    return m_validators.get(VALIDATORS[0]);
-  }
+	public ValidatorInfo getAfterConvertValidator() {
+		return m_validators.get(VALIDATORS[0]);
+	}
 
-  public ValidatorInfo getAfterGetValidator() {
-    return m_validators.get(VALIDATORS[1]);
-  }
+	public ValidatorInfo getAfterGetValidator() {
+		return m_validators.get(VALIDATORS[1]);
+	}
 
-  public ValidatorInfo getBeforeSetValidator() {
-    return m_validators.get(VALIDATORS[2]);
-  }
+	public ValidatorInfo getBeforeSetValidator() {
+		return m_validators.get(VALIDATORS[2]);
+	}
 
-  public ValidatorInfo getValidator(String name) {
-    Assert.isTrue(ArrayUtils.contains(VALIDATORS, name));
-    return m_validators.get(name);
-  }
+	public ValidatorInfo getValidator(String name) {
+		Assert.isTrue(ArrayUtils.contains(VALIDATORS, name));
+		return m_validators.get(name);
+	}
 
-  public void setValidator(String name, ValidatorInfo validator) {
-    Assert.isTrue(ArrayUtils.contains(VALIDATORS, name));
-    if (validator == null) {
-      // add validator
-      m_validators.remove(name);
-    } else {
-      // replace validator
-      m_validators.put(name, validator);
-    }
-  }
+	public void setValidator(String name, ValidatorInfo validator) {
+		Assert.isTrue(ArrayUtils.contains(VALIDATORS, name));
+		if (validator == null) {
+			// add validator
+			m_validators.remove(name);
+		} else {
+			// replace validator
+			m_validators.put(name, validator);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected ChooseClassConfiguration createConfiguration(BindingUiContentProviderContext context) {
-    ChooseClassConfiguration configuration = super.createConfiguration(context);
-    configuration.setDialogFieldLabel(Messages.UpdateValueStrategyInfo_title);
-    configuration.setDefaultValues(new String[]{
-        "POLICY_UPDATE",
-        "POLICY_NEVER",
-        "POLICY_ON_REQUEST",
-        "POLICY_CONVERT"});
-    return configuration;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected ChooseClassConfiguration createConfiguration(BindingUiContentProviderContext context) {
+		ChooseClassConfiguration configuration = super.createConfiguration(context);
+		configuration.setDialogFieldLabel(Messages.UpdateValueStrategyInfo_title);
+		configuration.setDefaultValues(new String[]{
+				"POLICY_UPDATE",
+				"POLICY_NEVER",
+				"POLICY_ON_REQUEST",
+		"POLICY_CONVERT"});
+		return configuration;
+	}
 
-  /**
-   * Create configuration for edit strategy validator.
-   */
-  private ChooseClassConfiguration createValidatorConfiguration(BindingUiContentProviderContext context,
-      String name,
-      ValidatorInfo validator) {
-    ChooseClassConfiguration configuration = new ChooseClassConfiguration();
-    configuration.setDialogFieldLabel(name + ":");
-    configuration.setValueScope("org.eclipse.core.databinding.validation.IValidator");
-    configuration.setClearValue("N/S");
-    configuration.setBaseClassName("org.eclipse.core.databinding.validation.IValidator");
-    configuration.setConstructorParameters(ArrayUtils.EMPTY_CLASS_ARRAY);
-    configuration.setEmptyClassErrorMessage(MessageFormat.format(
-        Messages.UpdateValueStrategyInfo_validatorErrorMessage,
-        context.getDirection(),
-        name));
-    configuration.setErrorMessagePrefix(MessageFormat.format(
-        Messages.UpdateValueStrategyInfo_validatorErrorMessagePrefix,
-        context.getDirection(),
-        name));
-    //
-    if (validator != null
-        && (validator.isAnonymous() || validator.getClassName().indexOf('(') != -1)) {
-      configuration.addDefaultStart(validator.getClassName());
-    }
-    //
-    return configuration;
-  }
+	/**
+	 * Create configuration for edit strategy validator.
+	 */
+	private ChooseClassConfiguration createValidatorConfiguration(BindingUiContentProviderContext context,
+			String name,
+			ValidatorInfo validator) {
+		ChooseClassConfiguration configuration = new ChooseClassConfiguration();
+		configuration.setDialogFieldLabel(name + ":");
+		configuration.setValueScope("org.eclipse.core.databinding.validation.IValidator");
+		configuration.setClearValue("N/S");
+		configuration.setBaseClassName("org.eclipse.core.databinding.validation.IValidator");
+		configuration.setConstructorParameters(ArrayUtils.EMPTY_CLASS_ARRAY);
+		configuration.setEmptyClassErrorMessage(MessageFormat.format(
+				Messages.UpdateValueStrategyInfo_validatorErrorMessage,
+				context.getDirection(),
+				name));
+		configuration.setErrorMessagePrefix(MessageFormat.format(
+				Messages.UpdateValueStrategyInfo_validatorErrorMessagePrefix,
+				context.getDirection(),
+				name));
+		//
+		if (validator != null
+				&& (validator.isAnonymous() || validator.getClassName().indexOf('(') != -1)) {
+			configuration.addDefaultStart(validator.getClassName());
+		}
+		//
+		return configuration;
+	}
 
-  @Override
-  public void createContentProviders(List<IUiContentProvider> providers,
-      BindingUiContentProviderContext context) throws Exception {
-    // self editor
-    providers.add(new UpdateStrategyUiContentProvider(createConfiguration(context), this));
-    // properties editor
-    UpdateStrategyPropertiesUiContentProvider propertiesUIContentProvider =
-        new UpdateStrategyPropertiesUiContentProvider(context.getDirection());
-    // validators
-    propertiesUIContentProvider.addProvider(new ValidatorUiContentProvider(createValidatorConfiguration(
-        context,
-        "AfterConvertValidator",
-        m_validators.get(VALIDATORS[0])), this, VALIDATORS[0]));
-    propertiesUIContentProvider.addProvider(new ValidatorUiContentProvider(createValidatorConfiguration(
-        context,
-        "AfterGetValidator",
-        m_validators.get(VALIDATORS[1])), this, VALIDATORS[1]));
-    propertiesUIContentProvider.addProvider(new ValidatorUiContentProvider(createValidatorConfiguration(
-        context,
-        "BeforeSetValidator",
-        m_validators.get(VALIDATORS[2])), this, VALIDATORS[2]));
-    // converter
-    propertiesUIContentProvider.addProvider(new ConverterUiContentProvider(createConverterConfiguration(context),
-        this));
-    //
-    providers.add(propertiesUIContentProvider);
-  }
+	@Override
+	public void createContentProviders(List<IUiContentProvider> providers,
+			BindingUiContentProviderContext context) throws Exception {
+		// self editor
+		providers.add(new UpdateStrategyUiContentProvider(createConfiguration(context), this));
+		// properties editor
+		UpdateStrategyPropertiesUiContentProvider propertiesUIContentProvider =
+				new UpdateStrategyPropertiesUiContentProvider(context.getDirection());
+		// validators
+		propertiesUIContentProvider.addProvider(new ValidatorUiContentProvider(createValidatorConfiguration(
+				context,
+				"AfterConvertValidator",
+				m_validators.get(VALIDATORS[0])), this, VALIDATORS[0]));
+		propertiesUIContentProvider.addProvider(new ValidatorUiContentProvider(createValidatorConfiguration(
+				context,
+				"AfterGetValidator",
+				m_validators.get(VALIDATORS[1])), this, VALIDATORS[1]));
+		propertiesUIContentProvider.addProvider(new ValidatorUiContentProvider(createValidatorConfiguration(
+				context,
+				"BeforeSetValidator",
+				m_validators.get(VALIDATORS[2])), this, VALIDATORS[2]));
+		// converter
+		propertiesUIContentProvider.addProvider(new ConverterUiContentProvider(createConverterConfiguration(context),
+				this));
+		//
+		providers.add(propertiesUIContentProvider);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected boolean sourceCodeHasVariable() {
-    return m_converter != null || !m_validators.isEmpty();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected boolean sourceCodeHasVariable() {
+		return m_converter != null || !m_validators.isEmpty();
+	}
 
-  @Override
-  protected void addSourceCodeForProperties(List<String> lines,
-      CodeGenerationSupport generationSupport) throws Exception {
-    super.addSourceCodeForProperties(lines, generationSupport);
-    // add validators
-    for (Map.Entry<String, ValidatorInfo> entry : m_validators.entrySet()) {
-      lines.add(getVariableIdentifier()
-          + "."
-          + entry.getKey()
-          + "("
-          + entry.getValue().getSourceCode(lines, generationSupport)
-          + ");");
-    }
-  }
+	@Override
+	protected void addSourceCodeForProperties(List<String> lines,
+			CodeGenerationSupport generationSupport) throws Exception {
+		super.addSourceCodeForProperties(lines, generationSupport);
+		// add validators
+		for (Map.Entry<String, ValidatorInfo> entry : m_validators.entrySet()) {
+			lines.add(getVariableIdentifier()
+					+ "."
+					+ entry.getKey()
+					+ "("
+					+ entry.getValue().getSourceCode(lines, generationSupport)
+					+ ");");
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Visiting
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void accept(AstObjectInfoVisitor visitor) throws Exception {
-    super.accept(visitor);
-    // visit to validators
-    for (Map.Entry<String, ValidatorInfo> entry : m_validators.entrySet()) {
-      entry.getValue().accept(visitor);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Visiting
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void accept(AstObjectInfoVisitor visitor) throws Exception {
+		super.accept(visitor);
+		// visit to validators
+		for (Map.Entry<String, ValidatorInfo> entry : m_validators.entrySet()) {
+			entry.getValue().accept(visitor);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Values
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static enum Value {
-    POLICY_NEVER, POLICY_ON_REQUEST, POLICY_CONVERT, POLICY_UPDATE
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Values
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static enum Value {
+		POLICY_NEVER, POLICY_ON_REQUEST, POLICY_CONVERT, POLICY_UPDATE
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/context/strategies/ValidatorInfo.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/context/strategies/ValidatorInfo.java
index b757b8a3f..a9ff16f3c 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/context/strategies/ValidatorInfo.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/context/strategies/ValidatorInfo.java
@@ -21,26 +21,26 @@
  * @coverage bindings.rcp.model.context
  */
 public final class ValidatorInfo extends StrategyPropertyInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ValidatorInfo(String className) {
-    super(className);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ValidatorInfo(String className) {
+		super(className);
+	}
 
-  public ValidatorInfo(AstEditor editor, ClassInstanceCreation creation) {
-    super(editor, creation);
-  }
+	public ValidatorInfo(AstEditor editor, ClassInstanceCreation creation) {
+		super(editor, creation);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getBaseClassName() {
-    return "org.eclipse.core.databinding.validation.IValidator";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getBaseClassName() {
+		return "org.eclipse.core.databinding.validation.IValidator";
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/WidgetsObserveTypeContainer.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/WidgetsObserveTypeContainer.java
index 5abcf2b13..cd581c96e 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/WidgetsObserveTypeContainer.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/WidgetsObserveTypeContainer.java
@@ -77,363 +77,363 @@
  * @coverage bindings.rcp.model.widgets
  */
 public final class WidgetsObserveTypeContainer extends ObserveTypeContainer {
-  private static final String SWT_DELAY_OBSERVABLE_METHOD =
-      "org.eclipse.jface.databinding.swt.SWTObservables.observeDelayedValue(int,org.eclipse.jface.databinding.swt.ISWTObservableValue)";
-  private static final String TEXT_OBSERVABLE_METHOD_1 =
-      "org.eclipse.jface.databinding.swt.SWTObservables.observeText(org.eclipse.swt.widgets.Control,int)";
-  private static final String TEXT_OBSERVABLE_METHOD_2 =
-      "org.eclipse.jface.databinding.swt.SWTObservables.observeText(org.eclipse.swt.widgets.Control,int[])";
-  private static final String TEXT_OBSERVABLE_METHOD_3 =
-      "org.eclipse.jface.databinding.swt.SWTObservables.observeText(org.eclipse.swt.widgets.Widget)";
-  private static final String TEXT_OBSERVABLE_METHOD_4 =
-      "org.eclipse.jface.databinding.swt.SWTObservables.observeText(org.eclipse.swt.widgets.Control)";
-  private static final String ITEMS_OBSERVABLE_METHOD =
-      "org.eclipse.jface.databinding.swt.SWTObservables.observeItems(org.eclipse.swt.widgets.Control)";
-  private static final String[] OBSERVABLE_METHODS =
-      {
-          "org.eclipse.jface.databinding.swt.SWTObservables.observeEnabled(org.eclipse.swt.widgets.Control)",
-          "org.eclipse.jface.databinding.swt.SWTObservables.observeVisible(org.eclipse.swt.widgets.Control)",
-          "org.eclipse.jface.databinding.swt.SWTObservables.observeTooltipText(org.eclipse.swt.widgets.Widget)",
-          "org.eclipse.jface.databinding.swt.SWTObservables.observeTooltipText(org.eclipse.swt.widgets.Control)",
-          "org.eclipse.jface.databinding.swt.SWTObservables.observeSelection(org.eclipse.swt.widgets.Control)",
-          "org.eclipse.jface.databinding.swt.SWTObservables.observeMin(org.eclipse.swt.widgets.Control)",
-          "org.eclipse.jface.databinding.swt.SWTObservables.observeMax(org.eclipse.swt.widgets.Control)",
-          TEXT_OBSERVABLE_METHOD_1,
-          TEXT_OBSERVABLE_METHOD_2,
-          TEXT_OBSERVABLE_METHOD_3,
-          TEXT_OBSERVABLE_METHOD_4,
-          ITEMS_OBSERVABLE_METHOD,
-          "org.eclipse.jface.databinding.swt.SWTObservables.observeMessage(org.eclipse.swt.widgets.Widget)",
-          "org.eclipse.jface.databinding.swt.SWTObservables.observeImage(org.eclipse.swt.widgets.Widget)",
-          "org.eclipse.jface.databinding.swt.SWTObservables.observeSingleSelectionIndex(org.eclipse.swt.widgets.Control)",
-          "org.eclipse.jface.databinding.swt.SWTObservables.observeForeground(org.eclipse.swt.widgets.Control)",
-          "org.eclipse.jface.databinding.swt.SWTObservables.observeBackground(org.eclipse.swt.widgets.Control)",
-          "org.eclipse.jface.databinding.swt.SWTObservables.observeFont(org.eclipse.swt.widgets.Control)",
-          "org.eclipse.jface.databinding.swt.SWTObservables.observeSize(org.eclipse.swt.widgets.Control)",
-          "org.eclipse.jface.databinding.swt.SWTObservables.observeLocation(org.eclipse.swt.widgets.Control)",
-          "org.eclipse.jface.databinding.swt.SWTObservables.observeFocus(org.eclipse.swt.widgets.Control)",
-          "org.eclipse.jface.databinding.swt.SWTObservables.observeBounds(org.eclipse.swt.widgets.Control)",
-          "org.eclipse.jface.databinding.swt.SWTObservables.observeEditable(org.eclipse.swt.widgets.Control)"};
-  private static final String VIEWER_DELAY_OBSERVABLE_METHOD =
-      "org.eclipse.jface.databinding.viewers.ViewersObservables.observeDelayedValue(int,org.eclipse.jface.databinding.viewers.IViewerObservableValue)";
-  private static final String[] OBSERVABLE_VIEWER_SINGLE_SELECTION_METHODS =
-      {
-          "org.eclipse.jface.databinding.viewers.ViewersObservables.observeSingleSelection(org.eclipse.jface.viewers.ISelectionProvider)",
-          "org.eclipse.jface.databinding.viewers.ViewersObservables.observeSingleSelection(org.eclipse.jface.viewers.Viewer)"};
-  private static final String[] OBSERVABLE_VIEWER_MULTI_SELECTION_METHODS =
-      {
-          "org.eclipse.jface.databinding.viewers.ViewersObservables.observeMultiSelection(org.eclipse.jface.viewers.ISelectionProvider)",
-          "org.eclipse.jface.databinding.viewers.ViewersObservables.observeMultiSelection(org.eclipse.jface.viewers.Viewer)"};
-  private static final String[] OBSERVABLE_VIEWER_CHECKED_ELEMENTS_METHODS =
-      {
-          "org.eclipse.jface.databinding.viewers.ViewersObservables.observeCheckedElements(org.eclipse.jface.viewers.ICheckable,java.lang.Object)",
-          "org.eclipse.jface.databinding.viewers.ViewersObservables.observeCheckedElements(org.eclipse.jface.viewers.CheckboxTableViewer,java.lang.Object)",
-          "org.eclipse.jface.databinding.viewers.ViewersObservables.observeCheckedElements(org.eclipse.jface.viewers.CheckboxTreeViewer,java.lang.Object)"};
-  private static final String OBSERVABLE_VIEWER_FILTERS_METHOD =
-      "org.eclipse.jface.databinding.viewers.ViewersObservables.observeFilters(org.eclipse.jface.viewers.StructuredViewer)";
-  private static final Map<String, String> WIDGET_PROPERTIES_METHODS = new HashMap<>();
-  static {
-    WIDGET_PROPERTIES_METHODS.put("org.eclipse.jface.databinding.swt.typed.WidgetProperties.background()", "org.eclipse.swt.widgets.Control");
-    WIDGET_PROPERTIES_METHODS.put("org.eclipse.jface.databinding.swt.typed.WidgetProperties.bounds()", "org.eclipse.swt.widgets.Control");
-    WIDGET_PROPERTIES_METHODS.put("org.eclipse.jface.databinding.swt.typed.WidgetProperties.editable()", "org.eclipse.swt.widgets.Control");
-    WIDGET_PROPERTIES_METHODS.put("org.eclipse.jface.databinding.swt.typed.WidgetProperties.enabled()", "org.eclipse.swt.widgets.Widget");
-    WIDGET_PROPERTIES_METHODS.put("org.eclipse.jface.databinding.swt.typed.WidgetProperties.focused()", "org.eclipse.swt.widgets.Control");
-    WIDGET_PROPERTIES_METHODS.put("org.eclipse.jface.databinding.swt.typed.WidgetProperties.font()", "org.eclipse.swt.widgets.Control");
-    WIDGET_PROPERTIES_METHODS.put("org.eclipse.jface.databinding.swt.typed.WidgetProperties.foreground()", "org.eclipse.swt.widgets.Control");
-    WIDGET_PROPERTIES_METHODS.put("org.eclipse.jface.databinding.swt.typed.WidgetProperties.image()", "org.eclipse.swt.widgets.Widget");
-    WIDGET_PROPERTIES_METHODS.put("org.eclipse.jface.databinding.swt.typed.WidgetProperties.location()", "org.eclipse.swt.widgets.Control");
-    WIDGET_PROPERTIES_METHODS.put("org.eclipse.jface.databinding.swt.typed.WidgetProperties.maximum()", "org.eclipse.swt.widgets.Control");
-    WIDGET_PROPERTIES_METHODS.put("org.eclipse.jface.databinding.swt.typed.WidgetProperties.message()", "org.eclipse.swt.widgets.Widget");
-    WIDGET_PROPERTIES_METHODS.put("org.eclipse.jface.databinding.swt.typed.WidgetProperties.minimum()", "org.eclipse.swt.widgets.Control");
-    WIDGET_PROPERTIES_METHODS.put("org.eclipse.jface.databinding.swt.typed.WidgetProperties.widgetSelection()", "org.eclipse.swt.widgets.Widget");
-    WIDGET_PROPERTIES_METHODS.put("org.eclipse.jface.databinding.swt.typed.WidgetProperties.dateTimeSelection()", "org.eclipse.swt.widgets.DateTime");
-    WIDGET_PROPERTIES_METHODS.put("org.eclipse.jface.databinding.swt.typed.WidgetProperties.localDateSelection()", "org.eclipse.swt.widgets.DateTime");
-    WIDGET_PROPERTIES_METHODS.put("org.eclipse.jface.databinding.swt.typed.WidgetProperties.localTimeSelection()", "org.eclipse.swt.widgets.DateTime");
-    WIDGET_PROPERTIES_METHODS.put("org.eclipse.jface.databinding.swt.typed.WidgetProperties.buttonSelection()", "org.eclipse.swt.widgets.Button");
-    WIDGET_PROPERTIES_METHODS.put("org.eclipse.jface.databinding.swt.typed.WidgetProperties.comboSelection()", "org.eclipse.swt.widgets.Combo");
-    WIDGET_PROPERTIES_METHODS.put("org.eclipse.jface.databinding.swt.typed.WidgetProperties.ccomboSelection()", "org.eclipse.swt.custom.CCombo");
-    WIDGET_PROPERTIES_METHODS.put("org.eclipse.jface.databinding.swt.typed.WidgetProperties.listSelection()", "org.eclipse.swt.widgets.List");
-    WIDGET_PROPERTIES_METHODS.put("org.eclipse.jface.databinding.swt.typed.WidgetProperties.menuItemSelection()", "org.eclipse.swt.widgets.MenuItem");
-    WIDGET_PROPERTIES_METHODS.put("org.eclipse.jface.databinding.swt.typed.WidgetProperties.scaleSelection()", "org.eclipse.swt.widgets.Scale");
-    WIDGET_PROPERTIES_METHODS.put("org.eclipse.jface.databinding.swt.typed.WidgetProperties.sliderSelection()", "org.eclipse.swt.widgets.Slider");
-    WIDGET_PROPERTIES_METHODS.put("org.eclipse.jface.databinding.swt.typed.WidgetProperties.spinnerSelection()", "org.eclipse.swt.widgets.Spinner");
-    WIDGET_PROPERTIES_METHODS.put("org.eclipse.jface.databinding.swt.typed.WidgetProperties.singleSelectionIndex()", "org.eclipse.swt.widgets.Control");
-    WIDGET_PROPERTIES_METHODS.put("org.eclipse.jface.databinding.swt.typed.WidgetProperties.size()", "org.eclipse.swt.widgets.Control");
-    WIDGET_PROPERTIES_METHODS.put("org.eclipse.jface.databinding.swt.typed.WidgetProperties.tooltipText()", "org.eclipse.swt.widgets.Widget");
-    WIDGET_PROPERTIES_METHODS.put("org.eclipse.jface.databinding.swt.typed.WidgetProperties.visible()", "org.eclipse.swt.widgets.Widget");
-  };
-  private static final String ITEMS_WIDGET_PROPERTY =
-      "org.eclipse.jface.databinding.swt.typed.WidgetProperties.items()";
-  private static final String[] TEXT_WIDGET_PROPERTIES = {
-      "org.eclipse.jface.databinding.swt.typed.WidgetProperties.text()",
-      "org.eclipse.jface.databinding.swt.typed.WidgetProperties.text(int)",
-      "org.eclipse.jface.databinding.swt.typed.WidgetProperties.text(int[])"};
-  private static final String SINGLE_SELECTION_VIEWER_PROPERTY =
-      "org.eclipse.jface.databinding.viewers.typed.ViewerProperties.singleSelection()";
-  private static final String MULTI_SELECTION_VIEWER_PROPERTY =
-      "org.eclipse.jface.databinding.viewers.typed.ViewerProperties.multipleSelection()";
-  private static final Set<String> CHECKED_ELEMENTS_VIEWER_PROPERTIES = Set.of(
-      "org.eclipse.jface.databinding.viewers.typed.ViewerProperties.checkedElements(java.lang.Object)",
-      "org.eclipse.jface.databinding.viewers.typed.ViewerProperties.checkedElements(java.lang.Class)");
-  private static final String FILTERS_ELEMENTS_VIEWER_PROPERTY =
-      "org.eclipse.jface.databinding.viewers.typed.ViewerProperties.filters()";
-  private List<WidgetBindableInfo> m_observables = Collections.emptyList();
-  private DatabindingsProvider m_provider;
+	private static final String SWT_DELAY_OBSERVABLE_METHOD =
+			"org.eclipse.jface.databinding.swt.SWTObservables.observeDelayedValue(int,org.eclipse.jface.databinding.swt.ISWTObservableValue)";
+	private static final String TEXT_OBSERVABLE_METHOD_1 =
+			"org.eclipse.jface.databinding.swt.SWTObservables.observeText(org.eclipse.swt.widgets.Control,int)";
+	private static final String TEXT_OBSERVABLE_METHOD_2 =
+			"org.eclipse.jface.databinding.swt.SWTObservables.observeText(org.eclipse.swt.widgets.Control,int[])";
+	private static final String TEXT_OBSERVABLE_METHOD_3 =
+			"org.eclipse.jface.databinding.swt.SWTObservables.observeText(org.eclipse.swt.widgets.Widget)";
+	private static final String TEXT_OBSERVABLE_METHOD_4 =
+			"org.eclipse.jface.databinding.swt.SWTObservables.observeText(org.eclipse.swt.widgets.Control)";
+	private static final String ITEMS_OBSERVABLE_METHOD =
+			"org.eclipse.jface.databinding.swt.SWTObservables.observeItems(org.eclipse.swt.widgets.Control)";
+	private static final String[] OBSERVABLE_METHODS =
+		{
+				"org.eclipse.jface.databinding.swt.SWTObservables.observeEnabled(org.eclipse.swt.widgets.Control)",
+				"org.eclipse.jface.databinding.swt.SWTObservables.observeVisible(org.eclipse.swt.widgets.Control)",
+				"org.eclipse.jface.databinding.swt.SWTObservables.observeTooltipText(org.eclipse.swt.widgets.Widget)",
+				"org.eclipse.jface.databinding.swt.SWTObservables.observeTooltipText(org.eclipse.swt.widgets.Control)",
+				"org.eclipse.jface.databinding.swt.SWTObservables.observeSelection(org.eclipse.swt.widgets.Control)",
+				"org.eclipse.jface.databinding.swt.SWTObservables.observeMin(org.eclipse.swt.widgets.Control)",
+				"org.eclipse.jface.databinding.swt.SWTObservables.observeMax(org.eclipse.swt.widgets.Control)",
+				TEXT_OBSERVABLE_METHOD_1,
+				TEXT_OBSERVABLE_METHOD_2,
+				TEXT_OBSERVABLE_METHOD_3,
+				TEXT_OBSERVABLE_METHOD_4,
+				ITEMS_OBSERVABLE_METHOD,
+				"org.eclipse.jface.databinding.swt.SWTObservables.observeMessage(org.eclipse.swt.widgets.Widget)",
+				"org.eclipse.jface.databinding.swt.SWTObservables.observeImage(org.eclipse.swt.widgets.Widget)",
+				"org.eclipse.jface.databinding.swt.SWTObservables.observeSingleSelectionIndex(org.eclipse.swt.widgets.Control)",
+				"org.eclipse.jface.databinding.swt.SWTObservables.observeForeground(org.eclipse.swt.widgets.Control)",
+				"org.eclipse.jface.databinding.swt.SWTObservables.observeBackground(org.eclipse.swt.widgets.Control)",
+				"org.eclipse.jface.databinding.swt.SWTObservables.observeFont(org.eclipse.swt.widgets.Control)",
+				"org.eclipse.jface.databinding.swt.SWTObservables.observeSize(org.eclipse.swt.widgets.Control)",
+				"org.eclipse.jface.databinding.swt.SWTObservables.observeLocation(org.eclipse.swt.widgets.Control)",
+				"org.eclipse.jface.databinding.swt.SWTObservables.observeFocus(org.eclipse.swt.widgets.Control)",
+				"org.eclipse.jface.databinding.swt.SWTObservables.observeBounds(org.eclipse.swt.widgets.Control)",
+		"org.eclipse.jface.databinding.swt.SWTObservables.observeEditable(org.eclipse.swt.widgets.Control)"};
+	private static final String VIEWER_DELAY_OBSERVABLE_METHOD =
+			"org.eclipse.jface.databinding.viewers.ViewersObservables.observeDelayedValue(int,org.eclipse.jface.databinding.viewers.IViewerObservableValue)";
+	private static final String[] OBSERVABLE_VIEWER_SINGLE_SELECTION_METHODS =
+		{
+				"org.eclipse.jface.databinding.viewers.ViewersObservables.observeSingleSelection(org.eclipse.jface.viewers.ISelectionProvider)",
+		"org.eclipse.jface.databinding.viewers.ViewersObservables.observeSingleSelection(org.eclipse.jface.viewers.Viewer)"};
+	private static final String[] OBSERVABLE_VIEWER_MULTI_SELECTION_METHODS =
+		{
+				"org.eclipse.jface.databinding.viewers.ViewersObservables.observeMultiSelection(org.eclipse.jface.viewers.ISelectionProvider)",
+		"org.eclipse.jface.databinding.viewers.ViewersObservables.observeMultiSelection(org.eclipse.jface.viewers.Viewer)"};
+	private static final String[] OBSERVABLE_VIEWER_CHECKED_ELEMENTS_METHODS =
+		{
+				"org.eclipse.jface.databinding.viewers.ViewersObservables.observeCheckedElements(org.eclipse.jface.viewers.ICheckable,java.lang.Object)",
+				"org.eclipse.jface.databinding.viewers.ViewersObservables.observeCheckedElements(org.eclipse.jface.viewers.CheckboxTableViewer,java.lang.Object)",
+		"org.eclipse.jface.databinding.viewers.ViewersObservables.observeCheckedElements(org.eclipse.jface.viewers.CheckboxTreeViewer,java.lang.Object)"};
+	private static final String OBSERVABLE_VIEWER_FILTERS_METHOD =
+			"org.eclipse.jface.databinding.viewers.ViewersObservables.observeFilters(org.eclipse.jface.viewers.StructuredViewer)";
+	private static final Map<String, String> WIDGET_PROPERTIES_METHODS = new HashMap<>();
+	static {
+		WIDGET_PROPERTIES_METHODS.put("org.eclipse.jface.databinding.swt.typed.WidgetProperties.background()", "org.eclipse.swt.widgets.Control");
+		WIDGET_PROPERTIES_METHODS.put("org.eclipse.jface.databinding.swt.typed.WidgetProperties.bounds()", "org.eclipse.swt.widgets.Control");
+		WIDGET_PROPERTIES_METHODS.put("org.eclipse.jface.databinding.swt.typed.WidgetProperties.editable()", "org.eclipse.swt.widgets.Control");
+		WIDGET_PROPERTIES_METHODS.put("org.eclipse.jface.databinding.swt.typed.WidgetProperties.enabled()", "org.eclipse.swt.widgets.Widget");
+		WIDGET_PROPERTIES_METHODS.put("org.eclipse.jface.databinding.swt.typed.WidgetProperties.focused()", "org.eclipse.swt.widgets.Control");
+		WIDGET_PROPERTIES_METHODS.put("org.eclipse.jface.databinding.swt.typed.WidgetProperties.font()", "org.eclipse.swt.widgets.Control");
+		WIDGET_PROPERTIES_METHODS.put("org.eclipse.jface.databinding.swt.typed.WidgetProperties.foreground()", "org.eclipse.swt.widgets.Control");
+		WIDGET_PROPERTIES_METHODS.put("org.eclipse.jface.databinding.swt.typed.WidgetProperties.image()", "org.eclipse.swt.widgets.Widget");
+		WIDGET_PROPERTIES_METHODS.put("org.eclipse.jface.databinding.swt.typed.WidgetProperties.location()", "org.eclipse.swt.widgets.Control");
+		WIDGET_PROPERTIES_METHODS.put("org.eclipse.jface.databinding.swt.typed.WidgetProperties.maximum()", "org.eclipse.swt.widgets.Control");
+		WIDGET_PROPERTIES_METHODS.put("org.eclipse.jface.databinding.swt.typed.WidgetProperties.message()", "org.eclipse.swt.widgets.Widget");
+		WIDGET_PROPERTIES_METHODS.put("org.eclipse.jface.databinding.swt.typed.WidgetProperties.minimum()", "org.eclipse.swt.widgets.Control");
+		WIDGET_PROPERTIES_METHODS.put("org.eclipse.jface.databinding.swt.typed.WidgetProperties.widgetSelection()", "org.eclipse.swt.widgets.Widget");
+		WIDGET_PROPERTIES_METHODS.put("org.eclipse.jface.databinding.swt.typed.WidgetProperties.dateTimeSelection()", "org.eclipse.swt.widgets.DateTime");
+		WIDGET_PROPERTIES_METHODS.put("org.eclipse.jface.databinding.swt.typed.WidgetProperties.localDateSelection()", "org.eclipse.swt.widgets.DateTime");
+		WIDGET_PROPERTIES_METHODS.put("org.eclipse.jface.databinding.swt.typed.WidgetProperties.localTimeSelection()", "org.eclipse.swt.widgets.DateTime");
+		WIDGET_PROPERTIES_METHODS.put("org.eclipse.jface.databinding.swt.typed.WidgetProperties.buttonSelection()", "org.eclipse.swt.widgets.Button");
+		WIDGET_PROPERTIES_METHODS.put("org.eclipse.jface.databinding.swt.typed.WidgetProperties.comboSelection()", "org.eclipse.swt.widgets.Combo");
+		WIDGET_PROPERTIES_METHODS.put("org.eclipse.jface.databinding.swt.typed.WidgetProperties.ccomboSelection()", "org.eclipse.swt.custom.CCombo");
+		WIDGET_PROPERTIES_METHODS.put("org.eclipse.jface.databinding.swt.typed.WidgetProperties.listSelection()", "org.eclipse.swt.widgets.List");
+		WIDGET_PROPERTIES_METHODS.put("org.eclipse.jface.databinding.swt.typed.WidgetProperties.menuItemSelection()", "org.eclipse.swt.widgets.MenuItem");
+		WIDGET_PROPERTIES_METHODS.put("org.eclipse.jface.databinding.swt.typed.WidgetProperties.scaleSelection()", "org.eclipse.swt.widgets.Scale");
+		WIDGET_PROPERTIES_METHODS.put("org.eclipse.jface.databinding.swt.typed.WidgetProperties.sliderSelection()", "org.eclipse.swt.widgets.Slider");
+		WIDGET_PROPERTIES_METHODS.put("org.eclipse.jface.databinding.swt.typed.WidgetProperties.spinnerSelection()", "org.eclipse.swt.widgets.Spinner");
+		WIDGET_PROPERTIES_METHODS.put("org.eclipse.jface.databinding.swt.typed.WidgetProperties.singleSelectionIndex()", "org.eclipse.swt.widgets.Control");
+		WIDGET_PROPERTIES_METHODS.put("org.eclipse.jface.databinding.swt.typed.WidgetProperties.size()", "org.eclipse.swt.widgets.Control");
+		WIDGET_PROPERTIES_METHODS.put("org.eclipse.jface.databinding.swt.typed.WidgetProperties.tooltipText()", "org.eclipse.swt.widgets.Widget");
+		WIDGET_PROPERTIES_METHODS.put("org.eclipse.jface.databinding.swt.typed.WidgetProperties.visible()", "org.eclipse.swt.widgets.Widget");
+	};
+	private static final String ITEMS_WIDGET_PROPERTY =
+			"org.eclipse.jface.databinding.swt.typed.WidgetProperties.items()";
+	private static final String[] TEXT_WIDGET_PROPERTIES = {
+			"org.eclipse.jface.databinding.swt.typed.WidgetProperties.text()",
+			"org.eclipse.jface.databinding.swt.typed.WidgetProperties.text(int)",
+	"org.eclipse.jface.databinding.swt.typed.WidgetProperties.text(int[])"};
+	private static final String SINGLE_SELECTION_VIEWER_PROPERTY =
+			"org.eclipse.jface.databinding.viewers.typed.ViewerProperties.singleSelection()";
+	private static final String MULTI_SELECTION_VIEWER_PROPERTY =
+			"org.eclipse.jface.databinding.viewers.typed.ViewerProperties.multipleSelection()";
+	private static final Set<String> CHECKED_ELEMENTS_VIEWER_PROPERTIES = Set.of(
+			"org.eclipse.jface.databinding.viewers.typed.ViewerProperties.checkedElements(java.lang.Object)",
+			"org.eclipse.jface.databinding.viewers.typed.ViewerProperties.checkedElements(java.lang.Class)");
+	private static final String FILTERS_ELEMENTS_VIEWER_PROPERTY =
+			"org.eclipse.jface.databinding.viewers.typed.ViewerProperties.filters()";
+	private List<WidgetBindableInfo> m_observables = Collections.emptyList();
+	private DatabindingsProvider m_provider;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public WidgetsObserveTypeContainer() {
-    super(ObserveType.WIDGETS, true, false);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public WidgetsObserveTypeContainer() {
+		super(ObserveType.WIDGETS, true, false);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Initialize
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void initialize(IDatabindingsProvider provider) throws Exception {
-    m_provider = (DatabindingsProvider) provider;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Initialize
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void initialize(IDatabindingsProvider provider) throws Exception {
+		m_provider = (DatabindingsProvider) provider;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IObserveTypeContainer
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public List<IObserveInfo> getObservables() {
-    return CoreUtils.cast(m_observables);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IObserveTypeContainer
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public List<IObserveInfo> getObservables() {
+		return CoreUtils.cast(m_observables);
+	}
 
-  @Override
-  public void synchronizeObserves(JavaInfo root, AstEditor editor, TypeDeclaration rootNode)
-      throws Exception {
-    for (WidgetBindableInfo widget : m_observables) {
-      widget.update(m_provider);
-    }
-  }
+	@Override
+	public void synchronizeObserves(JavaInfo root, AstEditor editor, TypeDeclaration rootNode)
+			throws Exception {
+		for (WidgetBindableInfo widget : m_observables) {
+			widget.update(m_provider);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return {@link WidgetBindableInfo} association with given {@link Expression}.
-   */
-  public WidgetBindableInfo getBindableWidget(Expression expression) throws Exception {
-    expression =
-        ControllerSupport.convertWidgetBindableExpression(m_provider, m_observables, expression);
-    return m_observables.get(0).resolveReference(expression);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return {@link WidgetBindableInfo} association with given {@link Expression}.
+	 */
+	public WidgetBindableInfo getBindableWidget(Expression expression) throws Exception {
+		expression =
+				ControllerSupport.convertWidgetBindableExpression(m_provider, m_observables, expression);
+		return m_observables.get(0).resolveReference(expression);
+	}
 
-  public WidgetBindableInfo resolve(JavaInfo javaInfo) {
-    return m_observables.get(0).resolve(javaInfo);
-  }
+	public WidgetBindableInfo resolve(JavaInfo javaInfo) {
+		return m_observables.get(0).resolve(javaInfo);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parser
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void createObservables(JavaInfo root,
-      IModelResolver resolver,
-      AstEditor editor,
-      TypeDeclaration rootNode) throws Exception {
-    m_observables = Lists.newArrayList();
-    m_observables.add(new WidgetBindableInfo(root, m_provider));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parser
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void createObservables(JavaInfo root,
+			IModelResolver resolver,
+			AstEditor editor,
+			TypeDeclaration rootNode) throws Exception {
+		m_observables = Lists.newArrayList();
+		m_observables.add(new WidgetBindableInfo(root, m_provider));
+	}
 
-  @Override
-  public AstObjectInfo parseExpression(AstEditor editor,
-      String signature,
-      ClassInstanceCreation creation,
-      Expression[] arguments,
-      IModelResolver resolver,
-      IDatabindingsProvider provider) throws Exception {
-    return null;
-  }
+	@Override
+	public AstObjectInfo parseExpression(AstEditor editor,
+			String signature,
+			ClassInstanceCreation creation,
+			Expression[] arguments,
+			IModelResolver resolver,
+			IDatabindingsProvider provider) throws Exception {
+		return null;
+	}
 
-  @Override
-  public AstObjectInfo parseExpression(AstEditor editor,
-      String signature,
-      MethodInvocation invocation,
-      Expression[] arguments,
-      IModelResolver resolver) throws Exception {
-    if (ArrayUtils.contains(OBSERVABLE_METHODS, signature)) {
-      // SWTObservables.observeXXX(Control, ...)
-      //
-      // prepare widget
-      WidgetBindableInfo bindableWidget = getBindableWidget(arguments[0]);
-      if (bindableWidget == null) {
-        AbstractParser.addError(editor, MessageFormat.format(
-            Messages.WidgetsObserveTypeContainer_widgetArgumentNotFound,
-            arguments[0]), new Throwable());
-        return null;
-      }
-      // prepare property
-      WidgetPropertyBindableInfo bindableProperty =
-          bindableWidget.resolvePropertyReference(invocation.getName().getIdentifier());
-      Assert.isNotNull(bindableProperty);
-      //
-      if (TEXT_OBSERVABLE_METHOD_1.equals(signature)) {
-        int updateEvent = CoreUtils.evaluate(Integer.class, editor, arguments[1]);
-        TextSwtObservableInfo observable =
-            new TextSwtObservableInfo(bindableWidget, bindableProperty, updateEvent);
-        observable.setCodeSupport(new SwtObservableTextCodeSupport());
-        return observable;
-      }
-      if (TEXT_OBSERVABLE_METHOD_2.equals(signature)) {
-        int[] updateEvents = CoreUtils.evaluate(int[].class, editor, arguments[1]);
-        TextSwtObservableInfo observable =
-            new TextSwtObservableInfo(bindableWidget, bindableProperty, updateEvents);
-        observable.setCodeSupport(new SwtObservableTextCodeSupport());
-        return observable;
-      }
-      Class<?> objectType = bindableWidget.getObjectType();
-      if ((TEXT_OBSERVABLE_METHOD_3.equals(signature) || TEXT_OBSERVABLE_METHOD_4.equals(signature))
-          && (Text.class.isAssignableFrom(objectType) || StyledText.class.isAssignableFrom(objectType))) {
-        TextSwtObservableInfo observable =
-            new TextSwtObservableInfo(bindableWidget, bindableProperty, ArrayUtils.EMPTY_INT_ARRAY);
-        observable.setCodeSupport(new SwtObservableTextCodeSupport());
-        return observable;
-      }
-      //
-      if (ITEMS_OBSERVABLE_METHOD.equals(signature)) {
-        ItemsSwtObservableInfo observable =
-            new ItemsSwtObservableInfo(bindableWidget, bindableProperty);
-        observable.setCodeSupport(new SwtObservableItemsCodeSupport());
-        return observable;
-      }
-      //
-      SwtObservableInfo observable = new SwtObservableInfo(bindableWidget, bindableProperty);
-      observable.setCodeSupport(new SwtObservableCodeSupport());
-      return observable;
-    } else if (SWT_DELAY_OBSERVABLE_METHOD.equals(signature)
-        || VIEWER_DELAY_OBSERVABLE_METHOD.equals(signature)) {
-      // SWTObservables.observeDelayedValue(int, ISWTObservableValue)
-      // ViewersObservables.observeDelayedValue(int, IViewerObservableValue)
-      //
-      // prepare observable
-      ObservableInfo observableInfo = (ObservableInfo) resolver.getModel(arguments[1]);
-      if (observableInfo == null) {
-        AbstractParser.addError(editor, MessageFormat.format(
-            Messages.WidgetsObserveTypeContainer_observableArgumentNotFound,
-            arguments[1]), new Throwable());
-        return null;
-      }
-      Assert.isNull(observableInfo.getVariableIdentifier());
-      Assert.instanceOf(IDelayValueProvider.class, observableInfo);
-      //
-      // prepare delay value
-      int delayValue = CoreUtils.evaluate(Integer.class, editor, arguments[0]);
-      IDelayValueProvider delayValueProvider = (IDelayValueProvider) observableInfo;
-      delayValueProvider.setDelayValue(delayValue);
-      //
-      return observableInfo;
-    } else if (ArrayUtils.contains(OBSERVABLE_VIEWER_SINGLE_SELECTION_METHODS, signature)) {
-      // ViewersObservables.observeSingleSelection(Viewer)
-      // ViewersObservables.observeSingleSelection(ISelectionProvider)
-      //
-      WidgetBindableInfo bindableWidget = getBindableWidget(arguments[0]);
-      if (bindableWidget == null) {
-        AbstractParser.addError(editor, MessageFormat.format(
-            Messages.WidgetsObserveTypeContainer_viewerArgumentNotFound,
-            arguments[0]), new Throwable());
-        return null;
-      }
-      SingleSelectionObservableInfo observable = new SingleSelectionObservableInfo(bindableWidget);
-      observable.setCodeSupport(new SingleSelectionObservableCodeSupport());
-      return observable;
-    } else if (ArrayUtils.contains(OBSERVABLE_VIEWER_MULTI_SELECTION_METHODS, signature)) {
-      // ViewersObservables.observeMultiSelection(Viewer)
-      // ViewersObservables.observeMultiSelection(ISelectionProvider)
-      //
-      WidgetBindableInfo bindableWidget = getBindableWidget(arguments[0]);
-      if (bindableWidget == null) {
-        AbstractParser.addError(editor, MessageFormat.format(
-            Messages.WidgetsObserveTypeContainer_viewerArgumentNotFound,
-            arguments[0]), new Throwable());
-        return null;
-      }
-      MultiSelectionObservableInfo observable = new MultiSelectionObservableInfo(bindableWidget);
-      observable.setCodeSupport(new MultiSelectionObservableCodeSupport());
-      return observable;
-    } else if (ArrayUtils.contains(OBSERVABLE_VIEWER_CHECKED_ELEMENTS_METHODS, signature)) {
-      // ViewersObservables.observeCheckedElements(ICheckable, Object)
-      // ViewersObservables.observeCheckedElements(CheckboxTableViewer, Object)
-      // ViewersObservables.observeCheckedElements(CheckboxTreeViewer, Object)
-      //
-      // prepare viewer
-      WidgetBindableInfo bindableWidget = getBindableWidget(arguments[0]);
-      if (bindableWidget == null) {
-        AbstractParser.addError(editor, MessageFormat.format(
-            Messages.WidgetsObserveTypeContainer_viewerArgumentNotFound,
-            arguments[0]), new Throwable());
-        return null;
-      }
-      // prepare element type
-      Class<?> elementType = CoreUtils.evaluate(Class.class, editor, arguments[1]);
-      //
-      CheckedElementsObservableInfo observable =
-          new CheckedElementsObservableInfo(bindableWidget, elementType);
-      observable.setCodeSupport(new CheckedElementsObservableCodeSupport());
-      return observable;
-    } else if (OBSERVABLE_VIEWER_FILTERS_METHOD.equals(signature)) {
-      // ViewersObservables.observeFilters(StructuredViewer)
-      //
-      WidgetBindableInfo bindableWidget = getBindableWidget(arguments[0]);
-      if (bindableWidget == null) {
-        AbstractParser.addError(editor, MessageFormat.format(
-            Messages.WidgetsObserveTypeContainer_viewerArgumentNotFound,
-            arguments[0]), new Throwable());
-        return null;
-      }
-      FiltersObservableInfo observable = new FiltersObservableInfo(bindableWidget);
-      observable.setCodeSupport(new FiltersObservableCodeSupport());
-      return observable;
-    } else if (WIDGET_PROPERTIES_METHODS.containsKey(signature)) {
-      // WidgetProperties.XXXX()
-      return new WidgetPropertiesCodeSupport(
-          SwtProperties.SWT_OBSERVABLES_TO_WIDGET_PROPERTIES.getOrDefault(invocation.getName().getIdentifier(), invocation.getName().getIdentifier()),
-          WIDGET_PROPERTIES_METHODS.get(signature));
-    } else if (ITEMS_WIDGET_PROPERTY.equals(signature)) {
-      // WidgetProperties.items()
-      return new WidgetPropertyItemsCodeSupport();
-    } else if (ArrayUtils.contains(TEXT_WIDGET_PROPERTIES, signature)) {
-      // WidgetProperties.text(...)
-      int[] events = ArrayUtils.EMPTY_INT_ARRAY;
-      if (arguments.length == 1) {
-        Object objectValue = CoreUtils.evaluateObject(editor, arguments[0]);
-        if (objectValue instanceof Integer) {
-          Integer value = (Integer) objectValue;
-          events = new int[]{value.intValue()};
-        } else if (objectValue instanceof int[]) {
-          events = (int[]) objectValue;
-        } else {
-          Assert.fail("");
-        }
-      }
-      return new WidgetPropertyTextCodeSupport(events);
-    } else if (SINGLE_SELECTION_VIEWER_PROPERTY.equals(signature)) {
-      // ViewerProperties.singleSelection()
-      return new ViewerPropertySingleSelectionCodeSupport();
-    } else if (MULTI_SELECTION_VIEWER_PROPERTY.equals(signature)) {
-      // ViewerProperties.multipleSelection()
-      return new ViewerPropertyMultiSelectionCodeSupport();
-    } else if (CHECKED_ELEMENTS_VIEWER_PROPERTIES.contains(signature)) {
-      // ViewerProperties.checkedElements(...)
-      Class<?> elementType = CoreUtils.evaluate(Class.class, editor, arguments[0]);
-      return new ViewerPropertyCheckedElementsCodeSupport(elementType);
-    } else if (FILTERS_ELEMENTS_VIEWER_PROPERTY.equals(signature)) {
-      // ViewerProperties.filters()
-      return new ViewerPropertyFiltersCodeSupport();
-    }
-    return null;
-  }
+	@Override
+	public AstObjectInfo parseExpression(AstEditor editor,
+			String signature,
+			MethodInvocation invocation,
+			Expression[] arguments,
+			IModelResolver resolver) throws Exception {
+		if (ArrayUtils.contains(OBSERVABLE_METHODS, signature)) {
+			// SWTObservables.observeXXX(Control, ...)
+			//
+			// prepare widget
+			WidgetBindableInfo bindableWidget = getBindableWidget(arguments[0]);
+			if (bindableWidget == null) {
+				AbstractParser.addError(editor, MessageFormat.format(
+						Messages.WidgetsObserveTypeContainer_widgetArgumentNotFound,
+						arguments[0]), new Throwable());
+				return null;
+			}
+			// prepare property
+			WidgetPropertyBindableInfo bindableProperty =
+					bindableWidget.resolvePropertyReference(invocation.getName().getIdentifier());
+			Assert.isNotNull(bindableProperty);
+			//
+			if (TEXT_OBSERVABLE_METHOD_1.equals(signature)) {
+				int updateEvent = CoreUtils.evaluate(Integer.class, editor, arguments[1]);
+				TextSwtObservableInfo observable =
+						new TextSwtObservableInfo(bindableWidget, bindableProperty, updateEvent);
+				observable.setCodeSupport(new SwtObservableTextCodeSupport());
+				return observable;
+			}
+			if (TEXT_OBSERVABLE_METHOD_2.equals(signature)) {
+				int[] updateEvents = CoreUtils.evaluate(int[].class, editor, arguments[1]);
+				TextSwtObservableInfo observable =
+						new TextSwtObservableInfo(bindableWidget, bindableProperty, updateEvents);
+				observable.setCodeSupport(new SwtObservableTextCodeSupport());
+				return observable;
+			}
+			Class<?> objectType = bindableWidget.getObjectType();
+			if ((TEXT_OBSERVABLE_METHOD_3.equals(signature) || TEXT_OBSERVABLE_METHOD_4.equals(signature))
+					&& (Text.class.isAssignableFrom(objectType) || StyledText.class.isAssignableFrom(objectType))) {
+				TextSwtObservableInfo observable =
+						new TextSwtObservableInfo(bindableWidget, bindableProperty, ArrayUtils.EMPTY_INT_ARRAY);
+				observable.setCodeSupport(new SwtObservableTextCodeSupport());
+				return observable;
+			}
+			//
+			if (ITEMS_OBSERVABLE_METHOD.equals(signature)) {
+				ItemsSwtObservableInfo observable =
+						new ItemsSwtObservableInfo(bindableWidget, bindableProperty);
+				observable.setCodeSupport(new SwtObservableItemsCodeSupport());
+				return observable;
+			}
+			//
+			SwtObservableInfo observable = new SwtObservableInfo(bindableWidget, bindableProperty);
+			observable.setCodeSupport(new SwtObservableCodeSupport());
+			return observable;
+		} else if (SWT_DELAY_OBSERVABLE_METHOD.equals(signature)
+				|| VIEWER_DELAY_OBSERVABLE_METHOD.equals(signature)) {
+			// SWTObservables.observeDelayedValue(int, ISWTObservableValue)
+			// ViewersObservables.observeDelayedValue(int, IViewerObservableValue)
+			//
+			// prepare observable
+			ObservableInfo observableInfo = (ObservableInfo) resolver.getModel(arguments[1]);
+			if (observableInfo == null) {
+				AbstractParser.addError(editor, MessageFormat.format(
+						Messages.WidgetsObserveTypeContainer_observableArgumentNotFound,
+						arguments[1]), new Throwable());
+				return null;
+			}
+			Assert.isNull(observableInfo.getVariableIdentifier());
+			Assert.instanceOf(IDelayValueProvider.class, observableInfo);
+			//
+			// prepare delay value
+			int delayValue = CoreUtils.evaluate(Integer.class, editor, arguments[0]);
+			IDelayValueProvider delayValueProvider = (IDelayValueProvider) observableInfo;
+			delayValueProvider.setDelayValue(delayValue);
+			//
+			return observableInfo;
+		} else if (ArrayUtils.contains(OBSERVABLE_VIEWER_SINGLE_SELECTION_METHODS, signature)) {
+			// ViewersObservables.observeSingleSelection(Viewer)
+			// ViewersObservables.observeSingleSelection(ISelectionProvider)
+			//
+			WidgetBindableInfo bindableWidget = getBindableWidget(arguments[0]);
+			if (bindableWidget == null) {
+				AbstractParser.addError(editor, MessageFormat.format(
+						Messages.WidgetsObserveTypeContainer_viewerArgumentNotFound,
+						arguments[0]), new Throwable());
+				return null;
+			}
+			SingleSelectionObservableInfo observable = new SingleSelectionObservableInfo(bindableWidget);
+			observable.setCodeSupport(new SingleSelectionObservableCodeSupport());
+			return observable;
+		} else if (ArrayUtils.contains(OBSERVABLE_VIEWER_MULTI_SELECTION_METHODS, signature)) {
+			// ViewersObservables.observeMultiSelection(Viewer)
+			// ViewersObservables.observeMultiSelection(ISelectionProvider)
+			//
+			WidgetBindableInfo bindableWidget = getBindableWidget(arguments[0]);
+			if (bindableWidget == null) {
+				AbstractParser.addError(editor, MessageFormat.format(
+						Messages.WidgetsObserveTypeContainer_viewerArgumentNotFound,
+						arguments[0]), new Throwable());
+				return null;
+			}
+			MultiSelectionObservableInfo observable = new MultiSelectionObservableInfo(bindableWidget);
+			observable.setCodeSupport(new MultiSelectionObservableCodeSupport());
+			return observable;
+		} else if (ArrayUtils.contains(OBSERVABLE_VIEWER_CHECKED_ELEMENTS_METHODS, signature)) {
+			// ViewersObservables.observeCheckedElements(ICheckable, Object)
+			// ViewersObservables.observeCheckedElements(CheckboxTableViewer, Object)
+			// ViewersObservables.observeCheckedElements(CheckboxTreeViewer, Object)
+			//
+			// prepare viewer
+			WidgetBindableInfo bindableWidget = getBindableWidget(arguments[0]);
+			if (bindableWidget == null) {
+				AbstractParser.addError(editor, MessageFormat.format(
+						Messages.WidgetsObserveTypeContainer_viewerArgumentNotFound,
+						arguments[0]), new Throwable());
+				return null;
+			}
+			// prepare element type
+			Class<?> elementType = CoreUtils.evaluate(Class.class, editor, arguments[1]);
+			//
+			CheckedElementsObservableInfo observable =
+					new CheckedElementsObservableInfo(bindableWidget, elementType);
+			observable.setCodeSupport(new CheckedElementsObservableCodeSupport());
+			return observable;
+		} else if (OBSERVABLE_VIEWER_FILTERS_METHOD.equals(signature)) {
+			// ViewersObservables.observeFilters(StructuredViewer)
+			//
+			WidgetBindableInfo bindableWidget = getBindableWidget(arguments[0]);
+			if (bindableWidget == null) {
+				AbstractParser.addError(editor, MessageFormat.format(
+						Messages.WidgetsObserveTypeContainer_viewerArgumentNotFound,
+						arguments[0]), new Throwable());
+				return null;
+			}
+			FiltersObservableInfo observable = new FiltersObservableInfo(bindableWidget);
+			observable.setCodeSupport(new FiltersObservableCodeSupport());
+			return observable;
+		} else if (WIDGET_PROPERTIES_METHODS.containsKey(signature)) {
+			// WidgetProperties.XXXX()
+			return new WidgetPropertiesCodeSupport(
+					SwtProperties.SWT_OBSERVABLES_TO_WIDGET_PROPERTIES.getOrDefault(invocation.getName().getIdentifier(), invocation.getName().getIdentifier()),
+					WIDGET_PROPERTIES_METHODS.get(signature));
+		} else if (ITEMS_WIDGET_PROPERTY.equals(signature)) {
+			// WidgetProperties.items()
+			return new WidgetPropertyItemsCodeSupport();
+		} else if (ArrayUtils.contains(TEXT_WIDGET_PROPERTIES, signature)) {
+			// WidgetProperties.text(...)
+			int[] events = ArrayUtils.EMPTY_INT_ARRAY;
+			if (arguments.length == 1) {
+				Object objectValue = CoreUtils.evaluateObject(editor, arguments[0]);
+				if (objectValue instanceof Integer) {
+					Integer value = (Integer) objectValue;
+					events = new int[]{value.intValue()};
+				} else if (objectValue instanceof int[]) {
+					events = (int[]) objectValue;
+				} else {
+					Assert.fail("");
+				}
+			}
+			return new WidgetPropertyTextCodeSupport(events);
+		} else if (SINGLE_SELECTION_VIEWER_PROPERTY.equals(signature)) {
+			// ViewerProperties.singleSelection()
+			return new ViewerPropertySingleSelectionCodeSupport();
+		} else if (MULTI_SELECTION_VIEWER_PROPERTY.equals(signature)) {
+			// ViewerProperties.multipleSelection()
+			return new ViewerPropertyMultiSelectionCodeSupport();
+		} else if (CHECKED_ELEMENTS_VIEWER_PROPERTIES.contains(signature)) {
+			// ViewerProperties.checkedElements(...)
+			Class<?> elementType = CoreUtils.evaluate(Class.class, editor, arguments[0]);
+			return new ViewerPropertyCheckedElementsCodeSupport(elementType);
+		} else if (FILTERS_ELEMENTS_VIEWER_PROPERTY.equals(signature)) {
+			// ViewerProperties.filters()
+			return new ViewerPropertyFiltersCodeSupport();
+		}
+		return null;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/bindables/JavaInfoObservePresentation.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/bindables/JavaInfoObservePresentation.java
index fbb72be7c..24b90f122 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/bindables/JavaInfoObservePresentation.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/bindables/JavaInfoObservePresentation.java
@@ -21,27 +21,27 @@
  * @coverage bindings.rcp.model.widgets
  */
 public final class JavaInfoObservePresentation
-    extends
-      org.eclipse.wb.internal.core.databinding.model.presentation.JavaInfoObservePresentation {
-  private final IReferenceProvider m_referenceProvider;
+extends
+org.eclipse.wb.internal.core.databinding.model.presentation.JavaInfoObservePresentation {
+	private final IReferenceProvider m_referenceProvider;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public JavaInfoObservePresentation(JavaInfo javaInfo, IReferenceProvider referenceProvider) {
-    super(javaInfo);
-    m_referenceProvider = referenceProvider;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public JavaInfoObservePresentation(JavaInfo javaInfo, IReferenceProvider referenceProvider) {
+		super(javaInfo);
+		m_referenceProvider = referenceProvider;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IObservePresentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getTextForBinding() throws Exception {
-    return m_referenceProvider.getReference();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IObservePresentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getTextForBinding() throws Exception {
+		return m_referenceProvider.getReference();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/bindables/JavaInfoReferenceProvider.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/bindables/JavaInfoReferenceProvider.java
index 5c5cdc157..3b51b7122 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/bindables/JavaInfoReferenceProvider.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/bindables/JavaInfoReferenceProvider.java
@@ -34,92 +34,92 @@
  * @coverage bindings.rcp.model.widgets
  */
 public final class JavaInfoReferenceProvider implements IReferenceProvider {
-  private final DatabindingsProvider m_provider;
-  private JavaInfo m_javaInfo;
-  private String m_controllerReference;
-  private boolean m_isControllerReference;
+	private final DatabindingsProvider m_provider;
+	private JavaInfo m_javaInfo;
+	private String m_controllerReference;
+	private boolean m_isControllerReference;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public JavaInfoReferenceProvider(JavaInfo javaInfo, DatabindingsProvider provider)
-      throws Exception {
-    m_provider = provider;
-    setJavaInfo(javaInfo);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public JavaInfoReferenceProvider(JavaInfo javaInfo, DatabindingsProvider provider)
+			throws Exception {
+		m_provider = provider;
+		setJavaInfo(javaInfo);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void setJavaInfo(JavaInfo javaInfo) throws Exception {
-    m_javaInfo = javaInfo;
-    //
-    m_isControllerReference = m_provider.isController();
-    m_controllerReference =
-        m_isControllerReference ? ControllerSupport.getReference(m_provider, m_javaInfo) : null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void setJavaInfo(JavaInfo javaInfo) throws Exception {
+		m_javaInfo = javaInfo;
+		//
+		m_isControllerReference = m_provider.isController();
+		m_controllerReference =
+				m_isControllerReference ? ControllerSupport.getReference(m_provider, m_javaInfo) : null;
+	}
 
-  public String getControllerReference() {
-    return m_controllerReference;
-  }
+	public String getControllerReference() {
+		return m_controllerReference;
+	}
 
-  public void ensureControllerReference() throws Exception {
-    if (m_isControllerReference && m_controllerReference == null) {
-      m_controllerReference =
-          ControllerSupport.ensureControllerReference(m_provider, m_javaInfo, true);
-    }
-  }
+	public void ensureControllerReference() throws Exception {
+		if (m_isControllerReference && m_controllerReference == null) {
+			m_controllerReference =
+					ControllerSupport.ensureControllerReference(m_provider, m_javaInfo, true);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IReferenceProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getReference() throws Exception {
-    return m_isControllerReference && m_controllerReference != null
-        ? m_controllerReference
-        : getReference(m_javaInfo);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IReferenceProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getReference() throws Exception {
+		return m_isControllerReference && m_controllerReference != null
+				? m_controllerReference
+						: getReference(m_javaInfo);
+	}
 
-  public static String getReference(JavaInfo javaInfo) throws Exception {
-    VariableSupport variableSupport = javaInfo.getVariableSupport();
-    // handle this
-    if (variableSupport instanceof ThisVariableSupport) {
-      return "this";
-    }
-    // handle named variable
-    if (variableSupport instanceof AbstractSimpleVariableSupport && variableSupport.hasName()) {
-      return variableSupport.getName();
-    }
-    // handle exposed
-    if (variableSupport instanceof ExposedPropertyVariableSupport
-        || variableSupport instanceof ExposedFieldVariableSupport) {
-      try {
-        for (ASTNode node : javaInfo.getRelatedNodes()) {
-          if (AstNodeUtils.isVariable(node)) {
-            return CoreUtils.getNodeReference(node);
-          }
-        }
-      } catch (Throwable e) {
-      }
-      ObjectInfo parent = javaInfo.getParent();
-      if (parent instanceof JavaInfo) {
-        JavaInfo parentJava = (JavaInfo) parent;
-        if (javaInfo instanceof ViewerInfo
-            && parentJava.getVariableSupport() instanceof WrapperMethodControlVariableSupport) {
-          parentJava = parentJava.getParentJava();
-        }
-        String reference = getReference(parentJava);
-        if (reference != null) {
-          return reference + "." + variableSupport.getTitle();
-        }
-      }
-    }
-    return null;
-  }
+	public static String getReference(JavaInfo javaInfo) throws Exception {
+		VariableSupport variableSupport = javaInfo.getVariableSupport();
+		// handle this
+		if (variableSupport instanceof ThisVariableSupport) {
+			return "this";
+		}
+		// handle named variable
+		if (variableSupport instanceof AbstractSimpleVariableSupport && variableSupport.hasName()) {
+			return variableSupport.getName();
+		}
+		// handle exposed
+		if (variableSupport instanceof ExposedPropertyVariableSupport
+				|| variableSupport instanceof ExposedFieldVariableSupport) {
+			try {
+				for (ASTNode node : javaInfo.getRelatedNodes()) {
+					if (AstNodeUtils.isVariable(node)) {
+						return CoreUtils.getNodeReference(node);
+					}
+				}
+			} catch (Throwable e) {
+			}
+			ObjectInfo parent = javaInfo.getParent();
+			if (parent instanceof JavaInfo) {
+				JavaInfo parentJava = (JavaInfo) parent;
+				if (javaInfo instanceof ViewerInfo
+						&& parentJava.getVariableSupport() instanceof WrapperMethodControlVariableSupport) {
+					parentJava = parentJava.getParentJava();
+				}
+				String reference = getReference(parentJava);
+				if (reference != null) {
+					return reference + "." + variableSupport.getTitle();
+				}
+			}
+		}
+		return null;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/bindables/PropertiesSupport.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/bindables/PropertiesSupport.java
index 7fab4208c..9a3bbeb94 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/bindables/PropertiesSupport.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/bindables/PropertiesSupport.java
@@ -51,259 +51,259 @@
  * @coverage bindings.rcp.model.widgets
  */
 public final class PropertiesSupport {
-  public static final String DETAIL_SINGLE_SELECTION_NAME = "part of selection";
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Properties
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  static {
-    WidgetPropertyBindableInfo tooltipText =
-        new WidgetPropertyBindableInfo("tooltipText",
-            String.class,
-            "observeTooltipText",
-            IObserveDecorator.DEFAULT);
-    //
-    SwtProperties.createControlProperties(tooltipText);
-    //
-    SwtProperties.createDateTimeProperties();
-    //
-    WidgetPropertyBindableInfo text_Text_StyledText =
-        new WidgetPropertyBindableInfo("text",
-            String.class,
-            "observeText",
-            SwtObservableFactory.SWT_TEXT,
-            IObserveDecorator.BOLD);
-    //
-    WidgetPropertyBindableInfo message =
-        new WidgetPropertyBindableInfo("message",
-            String.class,
-            "observeMessage",
-            IObserveDecorator.BOLD);
-    //
-    SwtProperties.createTextProperties(text_Text_StyledText, message);
-    SwtProperties.createStyledTextProperties(text_Text_StyledText);
-    SwtProperties.createToolTipProperties(message);
-    //
-    WidgetPropertyBindableInfo selectionInt =
-        new WidgetPropertyBindableInfo("selection",
-            int.class,
-            "observeSelection",
-            IObserveDecorator.BOLD);
-    //
-    WidgetPropertyBindableInfo min =
-        new WidgetPropertyBindableInfo("minimum", int.class, "observeMin", IObserveDecorator.BOLD);
-    //
-    WidgetPropertyBindableInfo max =
-        new WidgetPropertyBindableInfo("maximum", int.class, "observeMax", IObserveDecorator.BOLD);
-    //
-    SwtProperties.createSpinnerProperties(selectionInt, min, max);
-    SwtProperties.createScaleProperties(selectionInt, min, max);
-    //
-    WidgetPropertyBindableInfo text =
-        new WidgetPropertyBindableInfo("text", String.class, "observeText", IObserveDecorator.BOLD);
-    //
-    WidgetPropertyBindableInfo image =
-        new WidgetPropertyBindableInfo("image", Image.class, "observeImage", IObserveDecorator.BOLD);
-    //
-    SwtProperties.createButtonProperties(text, image);
-    SwtProperties.createLabelProperties(text, image);
-    SwtProperties.createCLabelProperties(text, image);
-    SwtProperties.createLinkProperties(text);
-    SwtProperties.createShellProperties(text);
-    SwtProperties.createFormProperties(text);
-    //
-    WidgetPropertyBindableInfo selectionString =
-        new WidgetPropertyBindableInfo("selection",
-            String.class,
-            "observeSelection",
-            IObserveDecorator.BOLD);
-    //
-    WidgetPropertyBindableInfo items =
-        new WidgetPropertyBindableInfo("items",
-            List.class,
-            "observeItems",
-            SwtObservableFactory.SWT_ITEMS,
-            IObserveDecorator.BOLD);
-    //
-    WidgetPropertyBindableInfo selectionIndex =
-        new WidgetPropertyBindableInfo("singleSelectionIndex",
-            int.class,
-            "observeSingleSelectionIndex",
-            IObserveDecorator.BOLD);
-    //
-    SwtProperties.createComboProperties(text, selectionString, items, selectionIndex);
-    SwtProperties.createCComboProperties(text, selectionString, items, selectionIndex);
-    SwtProperties.createListProperties(selectionString, items, selectionIndex);
-    SwtProperties.createTableProperties(selectionIndex);
-    SwtProperties.createItemProperties(text, image);
-    SwtProperties.createTableColumnProperties(tooltipText);
-    SwtProperties.createTreeColumnProperties(tooltipText);
-    SwtProperties.createToolItemProperties(tooltipText);
-    SwtProperties.createTrayItemProperties(tooltipText);
-    SwtProperties.createTabItemProperties(tooltipText);
-    SwtProperties.createCTabItemProperties(tooltipText);
-    SwtProperties.createViewerProperties();
-    SwtProperties.createStructuredViewerProperties();
-    SwtProperties.createCheckableViewerProperties();
-  }
+	public static final String DETAIL_SINGLE_SELECTION_NAME = "part of selection";
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Properties
+	//
+	////////////////////////////////////////////////////////////////////////////
+	static {
+		WidgetPropertyBindableInfo tooltipText =
+				new WidgetPropertyBindableInfo("tooltipText",
+						String.class,
+						"observeTooltipText",
+						IObserveDecorator.DEFAULT);
+		//
+		SwtProperties.createControlProperties(tooltipText);
+		//
+		SwtProperties.createDateTimeProperties();
+		//
+		WidgetPropertyBindableInfo text_Text_StyledText =
+				new WidgetPropertyBindableInfo("text",
+						String.class,
+						"observeText",
+						SwtObservableFactory.SWT_TEXT,
+						IObserveDecorator.BOLD);
+		//
+		WidgetPropertyBindableInfo message =
+				new WidgetPropertyBindableInfo("message",
+						String.class,
+						"observeMessage",
+						IObserveDecorator.BOLD);
+		//
+		SwtProperties.createTextProperties(text_Text_StyledText, message);
+		SwtProperties.createStyledTextProperties(text_Text_StyledText);
+		SwtProperties.createToolTipProperties(message);
+		//
+		WidgetPropertyBindableInfo selectionInt =
+				new WidgetPropertyBindableInfo("selection",
+						int.class,
+						"observeSelection",
+						IObserveDecorator.BOLD);
+		//
+		WidgetPropertyBindableInfo min =
+				new WidgetPropertyBindableInfo("minimum", int.class, "observeMin", IObserveDecorator.BOLD);
+		//
+		WidgetPropertyBindableInfo max =
+				new WidgetPropertyBindableInfo("maximum", int.class, "observeMax", IObserveDecorator.BOLD);
+		//
+		SwtProperties.createSpinnerProperties(selectionInt, min, max);
+		SwtProperties.createScaleProperties(selectionInt, min, max);
+		//
+		WidgetPropertyBindableInfo text =
+				new WidgetPropertyBindableInfo("text", String.class, "observeText", IObserveDecorator.BOLD);
+		//
+		WidgetPropertyBindableInfo image =
+				new WidgetPropertyBindableInfo("image", Image.class, "observeImage", IObserveDecorator.BOLD);
+		//
+		SwtProperties.createButtonProperties(text, image);
+		SwtProperties.createLabelProperties(text, image);
+		SwtProperties.createCLabelProperties(text, image);
+		SwtProperties.createLinkProperties(text);
+		SwtProperties.createShellProperties(text);
+		SwtProperties.createFormProperties(text);
+		//
+		WidgetPropertyBindableInfo selectionString =
+				new WidgetPropertyBindableInfo("selection",
+						String.class,
+						"observeSelection",
+						IObserveDecorator.BOLD);
+		//
+		WidgetPropertyBindableInfo items =
+				new WidgetPropertyBindableInfo("items",
+						List.class,
+						"observeItems",
+						SwtObservableFactory.SWT_ITEMS,
+						IObserveDecorator.BOLD);
+		//
+		WidgetPropertyBindableInfo selectionIndex =
+				new WidgetPropertyBindableInfo("singleSelectionIndex",
+						int.class,
+						"observeSingleSelectionIndex",
+						IObserveDecorator.BOLD);
+		//
+		SwtProperties.createComboProperties(text, selectionString, items, selectionIndex);
+		SwtProperties.createCComboProperties(text, selectionString, items, selectionIndex);
+		SwtProperties.createListProperties(selectionString, items, selectionIndex);
+		SwtProperties.createTableProperties(selectionIndex);
+		SwtProperties.createItemProperties(text, image);
+		SwtProperties.createTableColumnProperties(tooltipText);
+		SwtProperties.createTreeColumnProperties(tooltipText);
+		SwtProperties.createToolItemProperties(tooltipText);
+		SwtProperties.createTrayItemProperties(tooltipText);
+		SwtProperties.createTabItemProperties(tooltipText);
+		SwtProperties.createCTabItemProperties(tooltipText);
+		SwtProperties.createViewerProperties();
+		SwtProperties.createStructuredViewerProperties();
+		SwtProperties.createCheckableViewerProperties();
+	}
 
-  /**
-   * @return {@link WidgetPropertyBindableInfo} properties for given widget {@link Class}.
-   */
-  public static List<WidgetPropertyBindableInfo> getProperties(ClassLoader classLoader,
-      Class<?> widgetClass) throws Exception {
-    return createBindables(getProperties0(classLoader, widgetClass));
-  }
+	/**
+	 * @return {@link WidgetPropertyBindableInfo} properties for given widget {@link Class}.
+	 */
+	public static List<WidgetPropertyBindableInfo> getProperties(ClassLoader classLoader,
+			Class<?> widgetClass) throws Exception {
+		return createBindables(getProperties0(classLoader, widgetClass));
+	}
 
-  /**
-   * @return {@link WidgetPropertyBindableInfo} properties for given widget {@link Class}.
-   */
-  private static List<WidgetPropertyBindableInfo> getProperties0(ClassLoader classLoader,
-      Class<?> widgetClass) throws Exception {
-    // TableColumn
-    if (TableColumn.class.isAssignableFrom(widgetClass)) {
-      return SwtProperties.TABLE_COLUMN;
-    }
-    // TreeColumn
-    if (TreeColumn.class.isAssignableFrom(widgetClass)) {
-      return SwtProperties.TREE_COLUMN;
-    }
-    // ToolItem
-    if (ToolItem.class.isAssignableFrom(widgetClass)) {
-      return SwtProperties.TOOL_ITEM;
-    }
-    // TrayItem
-    if (TrayItem.class.isAssignableFrom(widgetClass)) {
-      return SwtProperties.TRAY_ITEM;
-    }
-    // TabItem
-    if (TabItem.class.isAssignableFrom(widgetClass)) {
-      return SwtProperties.TAB_ITEM;
-    }
-    // CTabItem
-    if (CTabItem.class.isAssignableFrom(widgetClass)) {
-      return SwtProperties.CTAB_ITEM;
-    }
-    // ToolTip
-    if (ToolTip.class.isAssignableFrom(widgetClass)) {
-      return SwtProperties.TOOL_TIP;
-    }
-    // Item
-    if (Item.class.isAssignableFrom(widgetClass)) {
-      return SwtProperties.ITEM;
-    }
-    // StyledText
-    if (StyledText.class.isAssignableFrom(widgetClass)) {
-      return SwtProperties.STYLED_TEXT;
-    }
-    // Button
-    if (Button.class.isAssignableFrom(widgetClass)) {
-      return SwtProperties.BUTTON;
-    }
-    // Text
-    if (Text.class.isAssignableFrom(widgetClass)) {
-      return SwtProperties.TEXT;
-    }
-    // Spinner
-    if (Spinner.class.isAssignableFrom(widgetClass)) {
-      return SwtProperties.SPINNER;
-    }
-    // Scale
-    if (Scale.class.isAssignableFrom(widgetClass)) {
-      return SwtProperties.SCALE;
-    }
-    // Label
-    if (Label.class.isAssignableFrom(widgetClass)) {
-      return SwtProperties.LABEL;
-    }
-    // CLabel
-    if (CLabel.class.isAssignableFrom(widgetClass)) {
-      return SwtProperties.CLABEL;
-    }
-    // Link
-    if (Link.class.isAssignableFrom(widgetClass)) {
-      return SwtProperties.LINK;
-    }
-    // Shell
-    if (Shell.class.isAssignableFrom(widgetClass)) {
-      return SwtProperties.SHELL;
-    }
-    // Form
-    if (Form.class.isAssignableFrom(widgetClass)) {
-      return SwtProperties.FORM;
-    }
-    // Combo
-    if (Combo.class.isAssignableFrom(widgetClass)) {
-      return SwtProperties.COMBO;
-    }
-    // CCombo
-    if (CCombo.class.isAssignableFrom(widgetClass)) {
-      return SwtProperties.CCOMBO;
-    }
-    // List
-    if (org.eclipse.swt.widgets.List.class.isAssignableFrom(widgetClass)) {
-      return SwtProperties.LIST;
-    }
-    // Table
-    if (Table.class.isAssignableFrom(widgetClass)) {
-      return SwtProperties.TABLE;
-    }
-    // DateTime (since 3.3)
-    if (CoreUtils.isAssignableFrom(classLoader, "org.eclipse.swt.widgets.DateTime", widgetClass)) {
-      return SwtProperties.DATE_TIME;
-    }
-    // Control
-    if (Control.class.isAssignableFrom(widgetClass)) {
-      return SwtProperties.CONTROL;
-    }
-    // CheckboxTableViewer
-    // CheckboxTreeViewer
-    if (CoreUtils.isAssignableFrom(
-        classLoader,
-        "org.eclipse.jface.viewers.CheckboxTableViewer",
-        widgetClass)
-        || CoreUtils.isAssignableFrom(
-            classLoader,
-            "org.eclipse.jface.viewers.CheckboxTreeViewer",
-            widgetClass)) {
-      return SwtProperties.CHECKABLE_VIEWER;
-    }
-    // StructuredViewer
-    if (CoreUtils.isAssignableFrom(
-        classLoader,
-        "org.eclipse.jface.viewers.StructuredViewer",
-        widgetClass)) {
-      return SwtProperties.STRUCTURED_VIEWER;
-    }
-    // Viewer
-    if (CoreUtils.isAssignableFrom(classLoader, "org.eclipse.jface.viewers.Viewer", widgetClass)) {
-      return SwtProperties.VIEWER;
-    }
-    return Collections.emptyList();
-  }
+	/**
+	 * @return {@link WidgetPropertyBindableInfo} properties for given widget {@link Class}.
+	 */
+	private static List<WidgetPropertyBindableInfo> getProperties0(ClassLoader classLoader,
+			Class<?> widgetClass) throws Exception {
+		// TableColumn
+		if (TableColumn.class.isAssignableFrom(widgetClass)) {
+			return SwtProperties.TABLE_COLUMN;
+		}
+		// TreeColumn
+		if (TreeColumn.class.isAssignableFrom(widgetClass)) {
+			return SwtProperties.TREE_COLUMN;
+		}
+		// ToolItem
+		if (ToolItem.class.isAssignableFrom(widgetClass)) {
+			return SwtProperties.TOOL_ITEM;
+		}
+		// TrayItem
+		if (TrayItem.class.isAssignableFrom(widgetClass)) {
+			return SwtProperties.TRAY_ITEM;
+		}
+		// TabItem
+		if (TabItem.class.isAssignableFrom(widgetClass)) {
+			return SwtProperties.TAB_ITEM;
+		}
+		// CTabItem
+		if (CTabItem.class.isAssignableFrom(widgetClass)) {
+			return SwtProperties.CTAB_ITEM;
+		}
+		// ToolTip
+		if (ToolTip.class.isAssignableFrom(widgetClass)) {
+			return SwtProperties.TOOL_TIP;
+		}
+		// Item
+		if (Item.class.isAssignableFrom(widgetClass)) {
+			return SwtProperties.ITEM;
+		}
+		// StyledText
+		if (StyledText.class.isAssignableFrom(widgetClass)) {
+			return SwtProperties.STYLED_TEXT;
+		}
+		// Button
+		if (Button.class.isAssignableFrom(widgetClass)) {
+			return SwtProperties.BUTTON;
+		}
+		// Text
+		if (Text.class.isAssignableFrom(widgetClass)) {
+			return SwtProperties.TEXT;
+		}
+		// Spinner
+		if (Spinner.class.isAssignableFrom(widgetClass)) {
+			return SwtProperties.SPINNER;
+		}
+		// Scale
+		if (Scale.class.isAssignableFrom(widgetClass)) {
+			return SwtProperties.SCALE;
+		}
+		// Label
+		if (Label.class.isAssignableFrom(widgetClass)) {
+			return SwtProperties.LABEL;
+		}
+		// CLabel
+		if (CLabel.class.isAssignableFrom(widgetClass)) {
+			return SwtProperties.CLABEL;
+		}
+		// Link
+		if (Link.class.isAssignableFrom(widgetClass)) {
+			return SwtProperties.LINK;
+		}
+		// Shell
+		if (Shell.class.isAssignableFrom(widgetClass)) {
+			return SwtProperties.SHELL;
+		}
+		// Form
+		if (Form.class.isAssignableFrom(widgetClass)) {
+			return SwtProperties.FORM;
+		}
+		// Combo
+		if (Combo.class.isAssignableFrom(widgetClass)) {
+			return SwtProperties.COMBO;
+		}
+		// CCombo
+		if (CCombo.class.isAssignableFrom(widgetClass)) {
+			return SwtProperties.CCOMBO;
+		}
+		// List
+		if (org.eclipse.swt.widgets.List.class.isAssignableFrom(widgetClass)) {
+			return SwtProperties.LIST;
+		}
+		// Table
+		if (Table.class.isAssignableFrom(widgetClass)) {
+			return SwtProperties.TABLE;
+		}
+		// DateTime (since 3.3)
+		if (CoreUtils.isAssignableFrom(classLoader, "org.eclipse.swt.widgets.DateTime", widgetClass)) {
+			return SwtProperties.DATE_TIME;
+		}
+		// Control
+		if (Control.class.isAssignableFrom(widgetClass)) {
+			return SwtProperties.CONTROL;
+		}
+		// CheckboxTableViewer
+		// CheckboxTreeViewer
+		if (CoreUtils.isAssignableFrom(
+				classLoader,
+				"org.eclipse.jface.viewers.CheckboxTableViewer",
+				widgetClass)
+				|| CoreUtils.isAssignableFrom(
+						classLoader,
+						"org.eclipse.jface.viewers.CheckboxTreeViewer",
+						widgetClass)) {
+			return SwtProperties.CHECKABLE_VIEWER;
+		}
+		// StructuredViewer
+		if (CoreUtils.isAssignableFrom(
+				classLoader,
+				"org.eclipse.jface.viewers.StructuredViewer",
+				widgetClass)) {
+			return SwtProperties.STRUCTURED_VIEWER;
+		}
+		// Viewer
+		if (CoreUtils.isAssignableFrom(classLoader, "org.eclipse.jface.viewers.Viewer", widgetClass)) {
+			return SwtProperties.VIEWER;
+		}
+		return Collections.emptyList();
+	}
 
-  private static List<WidgetPropertyBindableInfo> createBindables(List<WidgetPropertyBindableInfo> staticBindables) {
-    List<WidgetPropertyBindableInfo> bindables = Lists.newArrayList();
-    for (WidgetPropertyBindableInfo bindable : staticBindables) {
-      bindables.add(new WidgetPropertyBindableInfo(bindable));
-    }
-    return bindables;
-  }
+	private static List<WidgetPropertyBindableInfo> createBindables(List<WidgetPropertyBindableInfo> staticBindables) {
+		List<WidgetPropertyBindableInfo> bindables = Lists.newArrayList();
+		for (WidgetPropertyBindableInfo bindable : staticBindables) {
+			bindables.add(new WidgetPropertyBindableInfo(bindable));
+		}
+		return bindables;
+	}
 
-  /**
-   * @return {@code true} if given {@link JavaInfo} should observe over SWTObservables.
-   */
-  public static boolean isObservableInfo(JavaInfo javaInfo) throws Exception {
-    Class<?> widgetClass = javaInfo.getDescription().getComponentClass();
-    //
-    if (Control.class.isAssignableFrom(widgetClass)
-        || ToolTip.class.isAssignableFrom(widgetClass)
-        || Item.class.isAssignableFrom(widgetClass)) {
-      return true;
-    }
-    //
-    ClassLoader classLoader = EditorState.get(javaInfo.getEditor()).getEditorLoader();
-    return CoreUtils.isAssignableFrom(classLoader, "org.eclipse.jface.viewers.Viewer", widgetClass);
-  }
+	/**
+	 * @return {@code true} if given {@link JavaInfo} should observe over SWTObservables.
+	 */
+	public static boolean isObservableInfo(JavaInfo javaInfo) throws Exception {
+		Class<?> widgetClass = javaInfo.getDescription().getComponentClass();
+		//
+		if (Control.class.isAssignableFrom(widgetClass)
+				|| ToolTip.class.isAssignableFrom(widgetClass)
+				|| Item.class.isAssignableFrom(widgetClass)) {
+			return true;
+		}
+		//
+		ClassLoader classLoader = EditorState.get(javaInfo.getEditor()).getEditorLoader();
+		return CoreUtils.isAssignableFrom(classLoader, "org.eclipse.jface.viewers.Viewer", widgetClass);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/bindables/SwtObservableFactory.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/bindables/SwtObservableFactory.java
index 06d098282..1d6354e64 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/bindables/SwtObservableFactory.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/bindables/SwtObservableFactory.java
@@ -31,105 +31,105 @@
  * @coverage bindings.rcp.model.widgets
  */
 abstract class SwtObservableFactory implements IObservableFactory {
-  private final Type m_type;
+	private final Type m_type;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SwtObservableFactory(Type type) {
-    Assert.isTrue(type == Type.OnlyValue || type == Type.OnlyList);
-    m_type = type;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SwtObservableFactory(Type type) {
+		Assert.isTrue(type == Type.OnlyValue || type == Type.OnlyList);
+		m_type = type;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IObservableFactory
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final Type getType() throws Exception {
-    return m_type;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IObservableFactory
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final Type getType() throws Exception {
+		return m_type;
+	}
 
-  @Override
-  public final ObservableInfo createObservable(BindableInfo object,
-      BindableInfo property,
-      Type type,
-      boolean version_1_3) throws Exception {
-    // prepare widget
-    WidgetBindableInfo bindableWidget = (WidgetBindableInfo) object;
-    // prepare property
-    WidgetPropertyBindableInfo bindableProperty = (WidgetPropertyBindableInfo) property;
-    // create observable
-    return createObservable(bindableWidget, bindableProperty, version_1_3);
-  }
+	@Override
+	public final ObservableInfo createObservable(BindableInfo object,
+			BindableInfo property,
+			Type type,
+			boolean version_1_3) throws Exception {
+		// prepare widget
+		WidgetBindableInfo bindableWidget = (WidgetBindableInfo) object;
+		// prepare property
+		WidgetPropertyBindableInfo bindableProperty = (WidgetPropertyBindableInfo) property;
+		// create observable
+		return createObservable(bindableWidget, bindableProperty, version_1_3);
+	}
 
-  /**
-   * Create {@link ObservableInfo} for given <code>bindableWidget</code> and
-   * <code>bindableProperty</code>.
-   */
-  protected abstract ObservableInfo createObservable(WidgetBindableInfo bindableWidget,
-      WidgetPropertyBindableInfo bindableProperty,
-      boolean version_1_3) throws Exception;
+	/**
+	 * Create {@link ObservableInfo} for given <code>bindableWidget</code> and
+	 * <code>bindableProperty</code>.
+	 */
+	protected abstract ObservableInfo createObservable(WidgetBindableInfo bindableWidget,
+			WidgetPropertyBindableInfo bindableProperty,
+			boolean version_1_3) throws Exception;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Factories
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Factory with type {@link Type#OnlyValue} for create {@link SwtObservableInfo}.
-   */
-  public static final IObservableFactory SWT = new SwtObservableFactory(Type.OnlyValue) {
-    @Override
-    protected ObservableInfo createObservable(WidgetBindableInfo bindableWidget,
-        WidgetPropertyBindableInfo bindableProperty,
-        boolean version_1_3) throws Exception {
-      SwtObservableInfo observable = new SwtObservableInfo(bindableWidget, bindableProperty);
-      if (version_1_3) {
-        observable.setCodeSupport(new WidgetPropertiesCodeSupport(bindableProperty.getReference()));
-      } else {
-        observable.setCodeSupport(new SwtObservableCodeSupport());
-      }
-      return observable;
-    }
-  };
-  /**
-   * Factory with type {@link Type#OnlyValue} for create {@link TextSwtObservableInfo}.
-   */
-  public static final IObservableFactory SWT_TEXT = new SwtObservableFactory(Type.OnlyValue) {
-    @Override
-    protected ObservableInfo createObservable(WidgetBindableInfo bindableWidget,
-        WidgetPropertyBindableInfo bindableProperty,
-        boolean version_1_3) throws Exception {
-      TextSwtObservableInfo observable =
-          new TextSwtObservableInfo(bindableWidget, bindableProperty);
-      if (version_1_3) {
-        observable.setCodeSupport(new WidgetPropertyTextCodeSupport());
-      } else {
-        observable.setCodeSupport(new SwtObservableTextCodeSupport());
-      }
-      return observable;
-    }
-  };
-  /**
-   * Factory with type {@link Type#OnlyList} for create {@link ItemsSwtObservableInfo}.
-   */
-  public static final IObservableFactory SWT_ITEMS = new SwtObservableFactory(Type.OnlyList) {
-    @Override
-    protected ObservableInfo createObservable(WidgetBindableInfo bindableWidget,
-        WidgetPropertyBindableInfo bindableProperty,
-        boolean version_1_3) throws Exception {
-      ItemsSwtObservableInfo observable =
-          new ItemsSwtObservableInfo(bindableWidget, bindableProperty);
-      if (version_1_3) {
-        observable.setCodeSupport(new WidgetPropertyItemsCodeSupport());
-      } else {
-        observable.setCodeSupport(new SwtObservableItemsCodeSupport());
-      }
-      return observable;
-    }
-  };
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Factories
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Factory with type {@link Type#OnlyValue} for create {@link SwtObservableInfo}.
+	 */
+	public static final IObservableFactory SWT = new SwtObservableFactory(Type.OnlyValue) {
+		@Override
+		protected ObservableInfo createObservable(WidgetBindableInfo bindableWidget,
+				WidgetPropertyBindableInfo bindableProperty,
+				boolean version_1_3) throws Exception {
+			SwtObservableInfo observable = new SwtObservableInfo(bindableWidget, bindableProperty);
+			if (version_1_3) {
+				observable.setCodeSupport(new WidgetPropertiesCodeSupport(bindableProperty.getReference()));
+			} else {
+				observable.setCodeSupport(new SwtObservableCodeSupport());
+			}
+			return observable;
+		}
+	};
+	/**
+	 * Factory with type {@link Type#OnlyValue} for create {@link TextSwtObservableInfo}.
+	 */
+	public static final IObservableFactory SWT_TEXT = new SwtObservableFactory(Type.OnlyValue) {
+		@Override
+		protected ObservableInfo createObservable(WidgetBindableInfo bindableWidget,
+				WidgetPropertyBindableInfo bindableProperty,
+				boolean version_1_3) throws Exception {
+			TextSwtObservableInfo observable =
+					new TextSwtObservableInfo(bindableWidget, bindableProperty);
+			if (version_1_3) {
+				observable.setCodeSupport(new WidgetPropertyTextCodeSupport());
+			} else {
+				observable.setCodeSupport(new SwtObservableTextCodeSupport());
+			}
+			return observable;
+		}
+	};
+	/**
+	 * Factory with type {@link Type#OnlyList} for create {@link ItemsSwtObservableInfo}.
+	 */
+	public static final IObservableFactory SWT_ITEMS = new SwtObservableFactory(Type.OnlyList) {
+		@Override
+		protected ObservableInfo createObservable(WidgetBindableInfo bindableWidget,
+				WidgetPropertyBindableInfo bindableProperty,
+				boolean version_1_3) throws Exception {
+			ItemsSwtObservableInfo observable =
+					new ItemsSwtObservableInfo(bindableWidget, bindableProperty);
+			if (version_1_3) {
+				observable.setCodeSupport(new WidgetPropertyItemsCodeSupport());
+			} else {
+				observable.setCodeSupport(new SwtObservableItemsCodeSupport());
+			}
+			return observable;
+		}
+	};
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/bindables/SwtProperties.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/bindables/SwtProperties.java
index dc8a135e7..efe820d99 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/bindables/SwtProperties.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/bindables/SwtProperties.java
@@ -34,550 +34,550 @@
  * @coverage bindings.rcp.model.widgets
  */
 public final class SwtProperties {
-  static final List<WidgetPropertyBindableInfo> CONTROL = Lists.newArrayList();
-  static final List<WidgetPropertyBindableInfo> BUTTON = Lists.newArrayList();
-  static final List<WidgetPropertyBindableInfo> DATE_TIME = Lists.newArrayList();
-  static final List<WidgetPropertyBindableInfo> TEXT = Lists.newArrayList();
-  static final List<WidgetPropertyBindableInfo> STYLED_TEXT = Lists.newArrayList();
-  static final List<WidgetPropertyBindableInfo> TOOL_TIP = Lists.newArrayList();
-  static final List<WidgetPropertyBindableInfo> SPINNER = Lists.newArrayList();
-  static final List<WidgetPropertyBindableInfo> SCALE = Lists.newArrayList();
-  static final List<WidgetPropertyBindableInfo> LIST = Lists.newArrayList();
-  static final List<WidgetPropertyBindableInfo> TABLE = Lists.newArrayList();
-  static final List<WidgetPropertyBindableInfo> LINK = Lists.newArrayList();
-  static final List<WidgetPropertyBindableInfo> SHELL = Lists.newArrayList();
-  static final List<WidgetPropertyBindableInfo> FORM = Lists.newArrayList();
-  //
-  static final List<WidgetPropertyBindableInfo> LABEL = Lists.newArrayList();
-  static final List<WidgetPropertyBindableInfo> CLABEL = Lists.newArrayList();
-  //
-  static final List<WidgetPropertyBindableInfo> COMBO = Lists.newArrayList();
-  static final List<WidgetPropertyBindableInfo> CCOMBO = Lists.newArrayList();
-  //
-  static final List<WidgetPropertyBindableInfo> ITEM = Lists.newArrayList();
-  static final List<WidgetPropertyBindableInfo> TABLE_COLUMN = Lists.newArrayList();
-  static final List<WidgetPropertyBindableInfo> TREE_COLUMN = Lists.newArrayList();
-  static final List<WidgetPropertyBindableInfo> TOOL_ITEM = Lists.newArrayList();
-  static final List<WidgetPropertyBindableInfo> TRAY_ITEM = Lists.newArrayList();
-  //
-  static final List<WidgetPropertyBindableInfo> TAB_ITEM = Lists.newArrayList();
-  static final List<WidgetPropertyBindableInfo> CTAB_ITEM = Lists.newArrayList();
-  //
-  static final List<WidgetPropertyBindableInfo> VIEWER = Lists.newArrayList();
-  static final List<WidgetPropertyBindableInfo> STRUCTURED_VIEWER = Lists.newArrayList();
-  static final List<WidgetPropertyBindableInfo> CHECKABLE_VIEWER = Lists.newArrayList();
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Control
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  static void createControlProperties(WidgetPropertyBindableInfo tooltipText) {
-    CONTROL.add(new WidgetPropertyBindableInfo("enabled",
-        boolean.class,
-        "observeEnabled",
-        IObserveDecorator.DEFAULT));
-    CONTROL.add(new WidgetPropertyBindableInfo("visible",
-        boolean.class,
-        "observeVisible",
-        IObserveDecorator.DEFAULT));
-    CONTROL.add(tooltipText);
-    CONTROL.add(new WidgetPropertyBindableInfo("foreground",
-        Color.class,
-        "observeForeground",
-        IObserveDecorator.ITALIC));
-    CONTROL.add(new WidgetPropertyBindableInfo("background",
-        Color.class,
-        "observeBackground",
-        IObserveDecorator.ITALIC));
-    CONTROL.add(new WidgetPropertyBindableInfo("font",
-        Font.class,
-        "observeFont",
-        IObserveDecorator.ITALIC));
-    CONTROL.add(new WidgetPropertyBindableInfo("size",
-        Point.class,
-        "observeSize",
-        IObserveDecorator.ITALIC));
-    CONTROL.add(new WidgetPropertyBindableInfo("location",
-        Point.class,
-        "observeLocation",
-        IObserveDecorator.ITALIC));
-    CONTROL.add(new WidgetPropertyBindableInfo("focused",
-        boolean.class,
-        "observeFocus",
-        IObserveDecorator.DEFAULT));
-    CONTROL.add(new WidgetPropertyBindableInfo("bounds",
-        Rectangle.class,
-        "observeBounds",
-        IObserveDecorator.ITALIC));
-    //
-    Collections.sort(CONTROL, ObserveComparator.INSTANCE);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Button
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  static void createButtonProperties(WidgetPropertyBindableInfo text,
-      WidgetPropertyBindableInfo image) {
-    BUTTON.addAll(CONTROL);
-    BUTTON.add(new WidgetPropertyBindableInfo("selection",
-        boolean.class,
-        "observeSelection",
-        IObserveDecorator.BOLD));
-    BUTTON.add(text);
-    BUTTON.add(image);
-    //
-    Collections.sort(BUTTON, ObserveComparator.INSTANCE);
-  }
-
-  static void createDateTimeProperties() {
-    DATE_TIME.addAll(CONTROL);
-    DATE_TIME.add(new WidgetPropertyBindableInfo("selection",
-        java.util.Date.class,
-        "observeSelection",
-        IObserveDecorator.BOLD));
-    //
-    Collections.sort(DATE_TIME, ObserveComparator.INSTANCE);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Text
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  static void createTextProperties(WidgetPropertyBindableInfo text,
-      WidgetPropertyBindableInfo message) {
-    TEXT.addAll(CONTROL);
-    TEXT.add(new WidgetPropertyBindableInfo("editable",
-        boolean.class,
-        "observeEditable",
-        IObserveDecorator.BOLD));
-    TEXT.add(text);
-    TEXT.add(message);
-    //
-    Collections.sort(TEXT, ObserveComparator.INSTANCE);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // StyledText
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  static void createStyledTextProperties(WidgetPropertyBindableInfo text) {
-    STYLED_TEXT.addAll(CONTROL);
-    STYLED_TEXT.add(text);
-    //
-    Collections.sort(STYLED_TEXT, ObserveComparator.INSTANCE);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ToolTip
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  static void createToolTipProperties(WidgetPropertyBindableInfo message) {
-    TOOL_TIP.add(message);
-    //
-    Collections.sort(TOOL_TIP, ObserveComparator.INSTANCE);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Spinner
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  static void createSpinnerProperties(WidgetPropertyBindableInfo selection,
-      WidgetPropertyBindableInfo min,
-      WidgetPropertyBindableInfo max) {
-    SPINNER.addAll(CONTROL);
-    SPINNER.add(selection);
-    SPINNER.add(min);
-    SPINNER.add(max);
-    //
-    Collections.sort(SPINNER, ObserveComparator.INSTANCE);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Scale
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  static void createScaleProperties(WidgetPropertyBindableInfo selection,
-      WidgetPropertyBindableInfo min,
-      WidgetPropertyBindableInfo max) {
-    SCALE.addAll(CONTROL);
-    SCALE.add(selection);
-    SCALE.add(min);
-    SCALE.add(max);
-    //
-    Collections.sort(SCALE, ObserveComparator.INSTANCE);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Label
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  static void createLabelProperties(WidgetPropertyBindableInfo text,
-      WidgetPropertyBindableInfo image) {
-    LABEL.addAll(CONTROL);
-    LABEL.add(text);
-    LABEL.add(image);
-    //
-    Collections.sort(LABEL, ObserveComparator.INSTANCE);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Label
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  static void createCLabelProperties(WidgetPropertyBindableInfo text,
-      WidgetPropertyBindableInfo image) {
-    CLABEL.addAll(CONTROL);
-    CLABEL.add(text);
-    CLABEL.add(image);
-    //
-    Collections.sort(CLABEL, ObserveComparator.INSTANCE);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Link
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  static void createLinkProperties(WidgetPropertyBindableInfo text) {
-    LINK.addAll(CONTROL);
-    LINK.add(text);
-    //
-    Collections.sort(LINK, ObserveComparator.INSTANCE);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Shell
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  static void createShellProperties(WidgetPropertyBindableInfo text) {
-    SHELL.addAll(CONTROL);
-    SHELL.add(text);
-    //
-    Collections.sort(SHELL, ObserveComparator.INSTANCE);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Form
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  static void createFormProperties(WidgetPropertyBindableInfo text) {
-    FORM.addAll(CONTROL);
-    FORM.add(text);
-    //
-    Collections.sort(FORM, ObserveComparator.INSTANCE);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Combo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  static void createComboProperties(WidgetPropertyBindableInfo text,
-      WidgetPropertyBindableInfo selection,
-      WidgetPropertyBindableInfo items,
-      WidgetPropertyBindableInfo selectionIndex) {
-    COMBO.addAll(CONTROL);
-    COMBO.add(text);
-    COMBO.add(selection);
-    COMBO.add(items);
-    COMBO.add(selectionIndex);
-    //
-    Collections.sort(COMBO, ObserveComparator.INSTANCE);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // CCombo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  static void createCComboProperties(WidgetPropertyBindableInfo text,
-      WidgetPropertyBindableInfo selection,
-      WidgetPropertyBindableInfo items,
-      WidgetPropertyBindableInfo selectionIndex) {
-    CCOMBO.addAll(CONTROL);
-    CCOMBO.add(text);
-    CCOMBO.add(selection);
-    CCOMBO.add(items);
-    CCOMBO.add(selectionIndex);
-    //
-    Collections.sort(CCOMBO, ObserveComparator.INSTANCE);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // List
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  static void createListProperties(WidgetPropertyBindableInfo selection,
-      WidgetPropertyBindableInfo items,
-      WidgetPropertyBindableInfo selectionIndex) {
-    LIST.addAll(CONTROL);
-    LIST.add(selection);
-    LIST.add(items);
-    LIST.add(selectionIndex);
-    //
-    Collections.sort(LIST, ObserveComparator.INSTANCE);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Table
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  static void createTableProperties(WidgetPropertyBindableInfo selectionIndex) {
-    TABLE.addAll(CONTROL);
-    TABLE.add(selectionIndex);
-    //
-    Collections.sort(TABLE, ObserveComparator.INSTANCE);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Item
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  static void createItemProperties(WidgetPropertyBindableInfo text, WidgetPropertyBindableInfo image) {
-    ITEM.add(text);
-    ITEM.add(image);
-    //
-    Collections.sort(ITEM, ObserveComparator.INSTANCE);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // TableColumn
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  static void createTableColumnProperties(WidgetPropertyBindableInfo tooltipText) {
-    TABLE_COLUMN.addAll(ITEM);
-    TABLE_COLUMN.add(tooltipText);
-    //
-    Collections.sort(TABLE_COLUMN, ObserveComparator.INSTANCE);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // TreeColumn
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  static void createTreeColumnProperties(WidgetPropertyBindableInfo tooltipText) {
-    TREE_COLUMN.addAll(ITEM);
-    TREE_COLUMN.add(tooltipText);
-    //
-    Collections.sort(TREE_COLUMN, ObserveComparator.INSTANCE);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ToolItem
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  static void createToolItemProperties(WidgetPropertyBindableInfo tooltipText) {
-    TOOL_ITEM.addAll(ITEM);
-    TOOL_ITEM.add(tooltipText);
-    //
-    Collections.sort(TOOL_ITEM, ObserveComparator.INSTANCE);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // TrayItem
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  static void createTrayItemProperties(WidgetPropertyBindableInfo tooltipText) {
-    TRAY_ITEM.addAll(ITEM);
-    TRAY_ITEM.add(tooltipText);
-    //
-    Collections.sort(TRAY_ITEM, ObserveComparator.INSTANCE);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // TabItem
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  static void createTabItemProperties(WidgetPropertyBindableInfo tooltipText) {
-    TAB_ITEM.addAll(ITEM);
-    TAB_ITEM.add(tooltipText);
-    //
-    Collections.sort(TAB_ITEM, ObserveComparator.INSTANCE);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // CTabItem
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  static void createCTabItemProperties(WidgetPropertyBindableInfo tooltipText) {
-    CTAB_ITEM.addAll(ITEM);
-    CTAB_ITEM.add(tooltipText);
-    //
-    Collections.sort(CTAB_ITEM, ObserveComparator.INSTANCE);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Viewer
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  static void createViewerProperties() {
-    VIEWER.add(new WidgetPropertyBindableInfo("single selection",
-        TypeImageProvider.OBJECT_IMAGE,
-        Object.class,
-        "observeSingleSelection",
-        ViewerObservableFactory.SINGLE_SELECTION,
-        IObserveDecorator.DEFAULT));
-    VIEWER.add(new WidgetPropertyBindableInfo(PropertiesSupport.DETAIL_SINGLE_SELECTION_NAME,
-        TypeImageProvider.OBJECT_IMAGE,
-        Object.class,
-        "observeSingleSelection",
-        ViewerObservableFactory.DETAIL_SINGLE_SELECTION,
-        IObserveDecorator.DEFAULT));
-    VIEWER.add(new WidgetPropertyBindableInfo("multi selection",
-        TypeImageProvider.COLLECTION_IMAGE,
-        Object.class,
-        "observeMultiSelection",
-        ViewerObservableFactory.MULTI_SELECTION,
-        IObserveDecorator.DEFAULT));
-    VIEWER.add(new WidgetPropertyBindableInfo("input",
-        TypeImageProvider.VIEWER_IMAGE,
-        Object.class,
-        "setInput",
-        ViewerInputObservableFactory.INSTANCE,
-        IObserveDecorator.BOLD));
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // StructuredViewer
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  static void createStructuredViewerProperties() {
-    STRUCTURED_VIEWER.addAll(VIEWER);
-    STRUCTURED_VIEWER.add(3, new WidgetPropertyBindableInfo("filters",
-        TypeImageProvider.COLLECTION_IMAGE,
-        ViewerFilter.class,
-        "observeFilters",
-        ViewerObservableFactory.FILTERS,
-        IObserveDecorator.DEFAULT));
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // CheckableViewer
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  static void createCheckableViewerProperties() {
-    CHECKABLE_VIEWER.addAll(STRUCTURED_VIEWER);
-    CHECKABLE_VIEWER.add(3, new WidgetPropertyBindableInfo("checked elements",
-        TypeImageProvider.COLLECTION_IMAGE,
-        Object.class,
-        "observeCheckedElements",
-        ViewerObservableFactory.CHECKED_ELEMENTS,
-        IObserveDecorator.DEFAULT));
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Properties
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final Map<String, String> SWT_OBSERVABLES_TO_WIDGET_PROPERTIES = Maps.newHashMap();
-  static {
-    String[] keys =
-        {
-            "observeEnabled",
-            "observeVisible",
-            "observeTooltipText",
-            "observeSelection",
-            "observeMin",
-            "observeMax",
-            "observeText",
-            "observeMessage",
-            "observeImage",
-            "observeItems",
-            "observeSingleSelectionIndex",
-            "observeForeground",
-            "observeBackground",
-            "observeFont",
-            "observeSize",
-            "observeLocation",
-            "observeFocus",
-            "observeBounds",
-            "observeEditable",
-            "observeSingleSelection",
-            "observeMultiSelection",
-            "observeInput",
-            "observeCheckedElements",
-            "observeFilters",
-            // observeSelection method is overloaded...
-            "observeSelection",
-            "observeSelection",
-            "observeSelection",
-            "observeSelection",
-            "observeSelection",
-            "observeSelection",
-            "observeSelection",
-            "observeSelection",
-            "observeSelection",
-            "observeSelection",
-            "observeSelection",
-            "observeSelection"};
-    String[] values =
-        {
-            "enabled",
-            "visible",
-            "tooltipText",
-            "selection",
-            "minimum",
-            "maximum",
-            "text",
-            "message",
-            "image",
-            "items",
-            "singleSelectionIndex",
-            "foreground",
-            "background",
-            "font",
-            "size",
-            "location",
-            "focused",
-            "bounds",
-            "editable",
-            "singleSelection",
-            "multipleSelection",
-            "input",
-            "checkedElements",
-            "filters",
-            "dateTimeSelection",
-            "localDateSelection",
-            "localTimeSelection",
-            "buttonSelection",
-            "comboSelection",
-            "ccomboSelection",
-            "listSelection",
-            "menuItemSelection",
-            "scaleSelection",
-            "sliderSelection",
-            "spinnerSelection",
-            // widgetSelection -> observeSelection
-            "widgetSelection"};
-    //
-    for (int i = 0; i < keys.length; i++) {
-      SWT_OBSERVABLES_TO_WIDGET_PROPERTIES.put(keys[i], values[i]);
-      SWT_OBSERVABLES_TO_WIDGET_PROPERTIES.put(values[i], keys[i]);
-    }
-  }
+	static final List<WidgetPropertyBindableInfo> CONTROL = Lists.newArrayList();
+	static final List<WidgetPropertyBindableInfo> BUTTON = Lists.newArrayList();
+	static final List<WidgetPropertyBindableInfo> DATE_TIME = Lists.newArrayList();
+	static final List<WidgetPropertyBindableInfo> TEXT = Lists.newArrayList();
+	static final List<WidgetPropertyBindableInfo> STYLED_TEXT = Lists.newArrayList();
+	static final List<WidgetPropertyBindableInfo> TOOL_TIP = Lists.newArrayList();
+	static final List<WidgetPropertyBindableInfo> SPINNER = Lists.newArrayList();
+	static final List<WidgetPropertyBindableInfo> SCALE = Lists.newArrayList();
+	static final List<WidgetPropertyBindableInfo> LIST = Lists.newArrayList();
+	static final List<WidgetPropertyBindableInfo> TABLE = Lists.newArrayList();
+	static final List<WidgetPropertyBindableInfo> LINK = Lists.newArrayList();
+	static final List<WidgetPropertyBindableInfo> SHELL = Lists.newArrayList();
+	static final List<WidgetPropertyBindableInfo> FORM = Lists.newArrayList();
+	//
+	static final List<WidgetPropertyBindableInfo> LABEL = Lists.newArrayList();
+	static final List<WidgetPropertyBindableInfo> CLABEL = Lists.newArrayList();
+	//
+	static final List<WidgetPropertyBindableInfo> COMBO = Lists.newArrayList();
+	static final List<WidgetPropertyBindableInfo> CCOMBO = Lists.newArrayList();
+	//
+	static final List<WidgetPropertyBindableInfo> ITEM = Lists.newArrayList();
+	static final List<WidgetPropertyBindableInfo> TABLE_COLUMN = Lists.newArrayList();
+	static final List<WidgetPropertyBindableInfo> TREE_COLUMN = Lists.newArrayList();
+	static final List<WidgetPropertyBindableInfo> TOOL_ITEM = Lists.newArrayList();
+	static final List<WidgetPropertyBindableInfo> TRAY_ITEM = Lists.newArrayList();
+	//
+	static final List<WidgetPropertyBindableInfo> TAB_ITEM = Lists.newArrayList();
+	static final List<WidgetPropertyBindableInfo> CTAB_ITEM = Lists.newArrayList();
+	//
+	static final List<WidgetPropertyBindableInfo> VIEWER = Lists.newArrayList();
+	static final List<WidgetPropertyBindableInfo> STRUCTURED_VIEWER = Lists.newArrayList();
+	static final List<WidgetPropertyBindableInfo> CHECKABLE_VIEWER = Lists.newArrayList();
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Control
+	//
+	////////////////////////////////////////////////////////////////////////////
+	static void createControlProperties(WidgetPropertyBindableInfo tooltipText) {
+		CONTROL.add(new WidgetPropertyBindableInfo("enabled",
+				boolean.class,
+				"observeEnabled",
+				IObserveDecorator.DEFAULT));
+		CONTROL.add(new WidgetPropertyBindableInfo("visible",
+				boolean.class,
+				"observeVisible",
+				IObserveDecorator.DEFAULT));
+		CONTROL.add(tooltipText);
+		CONTROL.add(new WidgetPropertyBindableInfo("foreground",
+				Color.class,
+				"observeForeground",
+				IObserveDecorator.ITALIC));
+		CONTROL.add(new WidgetPropertyBindableInfo("background",
+				Color.class,
+				"observeBackground",
+				IObserveDecorator.ITALIC));
+		CONTROL.add(new WidgetPropertyBindableInfo("font",
+				Font.class,
+				"observeFont",
+				IObserveDecorator.ITALIC));
+		CONTROL.add(new WidgetPropertyBindableInfo("size",
+				Point.class,
+				"observeSize",
+				IObserveDecorator.ITALIC));
+		CONTROL.add(new WidgetPropertyBindableInfo("location",
+				Point.class,
+				"observeLocation",
+				IObserveDecorator.ITALIC));
+		CONTROL.add(new WidgetPropertyBindableInfo("focused",
+				boolean.class,
+				"observeFocus",
+				IObserveDecorator.DEFAULT));
+		CONTROL.add(new WidgetPropertyBindableInfo("bounds",
+				Rectangle.class,
+				"observeBounds",
+				IObserveDecorator.ITALIC));
+		//
+		Collections.sort(CONTROL, ObserveComparator.INSTANCE);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Button
+	//
+	////////////////////////////////////////////////////////////////////////////
+	static void createButtonProperties(WidgetPropertyBindableInfo text,
+			WidgetPropertyBindableInfo image) {
+		BUTTON.addAll(CONTROL);
+		BUTTON.add(new WidgetPropertyBindableInfo("selection",
+				boolean.class,
+				"observeSelection",
+				IObserveDecorator.BOLD));
+		BUTTON.add(text);
+		BUTTON.add(image);
+		//
+		Collections.sort(BUTTON, ObserveComparator.INSTANCE);
+	}
+
+	static void createDateTimeProperties() {
+		DATE_TIME.addAll(CONTROL);
+		DATE_TIME.add(new WidgetPropertyBindableInfo("selection",
+				java.util.Date.class,
+				"observeSelection",
+				IObserveDecorator.BOLD));
+		//
+		Collections.sort(DATE_TIME, ObserveComparator.INSTANCE);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Text
+	//
+	////////////////////////////////////////////////////////////////////////////
+	static void createTextProperties(WidgetPropertyBindableInfo text,
+			WidgetPropertyBindableInfo message) {
+		TEXT.addAll(CONTROL);
+		TEXT.add(new WidgetPropertyBindableInfo("editable",
+				boolean.class,
+				"observeEditable",
+				IObserveDecorator.BOLD));
+		TEXT.add(text);
+		TEXT.add(message);
+		//
+		Collections.sort(TEXT, ObserveComparator.INSTANCE);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// StyledText
+	//
+	////////////////////////////////////////////////////////////////////////////
+	static void createStyledTextProperties(WidgetPropertyBindableInfo text) {
+		STYLED_TEXT.addAll(CONTROL);
+		STYLED_TEXT.add(text);
+		//
+		Collections.sort(STYLED_TEXT, ObserveComparator.INSTANCE);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ToolTip
+	//
+	////////////////////////////////////////////////////////////////////////////
+	static void createToolTipProperties(WidgetPropertyBindableInfo message) {
+		TOOL_TIP.add(message);
+		//
+		Collections.sort(TOOL_TIP, ObserveComparator.INSTANCE);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Spinner
+	//
+	////////////////////////////////////////////////////////////////////////////
+	static void createSpinnerProperties(WidgetPropertyBindableInfo selection,
+			WidgetPropertyBindableInfo min,
+			WidgetPropertyBindableInfo max) {
+		SPINNER.addAll(CONTROL);
+		SPINNER.add(selection);
+		SPINNER.add(min);
+		SPINNER.add(max);
+		//
+		Collections.sort(SPINNER, ObserveComparator.INSTANCE);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Scale
+	//
+	////////////////////////////////////////////////////////////////////////////
+	static void createScaleProperties(WidgetPropertyBindableInfo selection,
+			WidgetPropertyBindableInfo min,
+			WidgetPropertyBindableInfo max) {
+		SCALE.addAll(CONTROL);
+		SCALE.add(selection);
+		SCALE.add(min);
+		SCALE.add(max);
+		//
+		Collections.sort(SCALE, ObserveComparator.INSTANCE);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Label
+	//
+	////////////////////////////////////////////////////////////////////////////
+	static void createLabelProperties(WidgetPropertyBindableInfo text,
+			WidgetPropertyBindableInfo image) {
+		LABEL.addAll(CONTROL);
+		LABEL.add(text);
+		LABEL.add(image);
+		//
+		Collections.sort(LABEL, ObserveComparator.INSTANCE);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Label
+	//
+	////////////////////////////////////////////////////////////////////////////
+	static void createCLabelProperties(WidgetPropertyBindableInfo text,
+			WidgetPropertyBindableInfo image) {
+		CLABEL.addAll(CONTROL);
+		CLABEL.add(text);
+		CLABEL.add(image);
+		//
+		Collections.sort(CLABEL, ObserveComparator.INSTANCE);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Link
+	//
+	////////////////////////////////////////////////////////////////////////////
+	static void createLinkProperties(WidgetPropertyBindableInfo text) {
+		LINK.addAll(CONTROL);
+		LINK.add(text);
+		//
+		Collections.sort(LINK, ObserveComparator.INSTANCE);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Shell
+	//
+	////////////////////////////////////////////////////////////////////////////
+	static void createShellProperties(WidgetPropertyBindableInfo text) {
+		SHELL.addAll(CONTROL);
+		SHELL.add(text);
+		//
+		Collections.sort(SHELL, ObserveComparator.INSTANCE);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Form
+	//
+	////////////////////////////////////////////////////////////////////////////
+	static void createFormProperties(WidgetPropertyBindableInfo text) {
+		FORM.addAll(CONTROL);
+		FORM.add(text);
+		//
+		Collections.sort(FORM, ObserveComparator.INSTANCE);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Combo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	static void createComboProperties(WidgetPropertyBindableInfo text,
+			WidgetPropertyBindableInfo selection,
+			WidgetPropertyBindableInfo items,
+			WidgetPropertyBindableInfo selectionIndex) {
+		COMBO.addAll(CONTROL);
+		COMBO.add(text);
+		COMBO.add(selection);
+		COMBO.add(items);
+		COMBO.add(selectionIndex);
+		//
+		Collections.sort(COMBO, ObserveComparator.INSTANCE);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// CCombo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	static void createCComboProperties(WidgetPropertyBindableInfo text,
+			WidgetPropertyBindableInfo selection,
+			WidgetPropertyBindableInfo items,
+			WidgetPropertyBindableInfo selectionIndex) {
+		CCOMBO.addAll(CONTROL);
+		CCOMBO.add(text);
+		CCOMBO.add(selection);
+		CCOMBO.add(items);
+		CCOMBO.add(selectionIndex);
+		//
+		Collections.sort(CCOMBO, ObserveComparator.INSTANCE);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// List
+	//
+	////////////////////////////////////////////////////////////////////////////
+	static void createListProperties(WidgetPropertyBindableInfo selection,
+			WidgetPropertyBindableInfo items,
+			WidgetPropertyBindableInfo selectionIndex) {
+		LIST.addAll(CONTROL);
+		LIST.add(selection);
+		LIST.add(items);
+		LIST.add(selectionIndex);
+		//
+		Collections.sort(LIST, ObserveComparator.INSTANCE);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Table
+	//
+	////////////////////////////////////////////////////////////////////////////
+	static void createTableProperties(WidgetPropertyBindableInfo selectionIndex) {
+		TABLE.addAll(CONTROL);
+		TABLE.add(selectionIndex);
+		//
+		Collections.sort(TABLE, ObserveComparator.INSTANCE);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Item
+	//
+	////////////////////////////////////////////////////////////////////////////
+	static void createItemProperties(WidgetPropertyBindableInfo text, WidgetPropertyBindableInfo image) {
+		ITEM.add(text);
+		ITEM.add(image);
+		//
+		Collections.sort(ITEM, ObserveComparator.INSTANCE);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// TableColumn
+	//
+	////////////////////////////////////////////////////////////////////////////
+	static void createTableColumnProperties(WidgetPropertyBindableInfo tooltipText) {
+		TABLE_COLUMN.addAll(ITEM);
+		TABLE_COLUMN.add(tooltipText);
+		//
+		Collections.sort(TABLE_COLUMN, ObserveComparator.INSTANCE);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// TreeColumn
+	//
+	////////////////////////////////////////////////////////////////////////////
+	static void createTreeColumnProperties(WidgetPropertyBindableInfo tooltipText) {
+		TREE_COLUMN.addAll(ITEM);
+		TREE_COLUMN.add(tooltipText);
+		//
+		Collections.sort(TREE_COLUMN, ObserveComparator.INSTANCE);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ToolItem
+	//
+	////////////////////////////////////////////////////////////////////////////
+	static void createToolItemProperties(WidgetPropertyBindableInfo tooltipText) {
+		TOOL_ITEM.addAll(ITEM);
+		TOOL_ITEM.add(tooltipText);
+		//
+		Collections.sort(TOOL_ITEM, ObserveComparator.INSTANCE);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// TrayItem
+	//
+	////////////////////////////////////////////////////////////////////////////
+	static void createTrayItemProperties(WidgetPropertyBindableInfo tooltipText) {
+		TRAY_ITEM.addAll(ITEM);
+		TRAY_ITEM.add(tooltipText);
+		//
+		Collections.sort(TRAY_ITEM, ObserveComparator.INSTANCE);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// TabItem
+	//
+	////////////////////////////////////////////////////////////////////////////
+	static void createTabItemProperties(WidgetPropertyBindableInfo tooltipText) {
+		TAB_ITEM.addAll(ITEM);
+		TAB_ITEM.add(tooltipText);
+		//
+		Collections.sort(TAB_ITEM, ObserveComparator.INSTANCE);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// CTabItem
+	//
+	////////////////////////////////////////////////////////////////////////////
+	static void createCTabItemProperties(WidgetPropertyBindableInfo tooltipText) {
+		CTAB_ITEM.addAll(ITEM);
+		CTAB_ITEM.add(tooltipText);
+		//
+		Collections.sort(CTAB_ITEM, ObserveComparator.INSTANCE);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Viewer
+	//
+	////////////////////////////////////////////////////////////////////////////
+	static void createViewerProperties() {
+		VIEWER.add(new WidgetPropertyBindableInfo("single selection",
+				TypeImageProvider.OBJECT_IMAGE,
+				Object.class,
+				"observeSingleSelection",
+				ViewerObservableFactory.SINGLE_SELECTION,
+				IObserveDecorator.DEFAULT));
+		VIEWER.add(new WidgetPropertyBindableInfo(PropertiesSupport.DETAIL_SINGLE_SELECTION_NAME,
+				TypeImageProvider.OBJECT_IMAGE,
+				Object.class,
+				"observeSingleSelection",
+				ViewerObservableFactory.DETAIL_SINGLE_SELECTION,
+				IObserveDecorator.DEFAULT));
+		VIEWER.add(new WidgetPropertyBindableInfo("multi selection",
+				TypeImageProvider.COLLECTION_IMAGE,
+				Object.class,
+				"observeMultiSelection",
+				ViewerObservableFactory.MULTI_SELECTION,
+				IObserveDecorator.DEFAULT));
+		VIEWER.add(new WidgetPropertyBindableInfo("input",
+				TypeImageProvider.VIEWER_IMAGE,
+				Object.class,
+				"setInput",
+				ViewerInputObservableFactory.INSTANCE,
+				IObserveDecorator.BOLD));
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// StructuredViewer
+	//
+	////////////////////////////////////////////////////////////////////////////
+	static void createStructuredViewerProperties() {
+		STRUCTURED_VIEWER.addAll(VIEWER);
+		STRUCTURED_VIEWER.add(3, new WidgetPropertyBindableInfo("filters",
+				TypeImageProvider.COLLECTION_IMAGE,
+				ViewerFilter.class,
+				"observeFilters",
+				ViewerObservableFactory.FILTERS,
+				IObserveDecorator.DEFAULT));
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// CheckableViewer
+	//
+	////////////////////////////////////////////////////////////////////////////
+	static void createCheckableViewerProperties() {
+		CHECKABLE_VIEWER.addAll(STRUCTURED_VIEWER);
+		CHECKABLE_VIEWER.add(3, new WidgetPropertyBindableInfo("checked elements",
+				TypeImageProvider.COLLECTION_IMAGE,
+				Object.class,
+				"observeCheckedElements",
+				ViewerObservableFactory.CHECKED_ELEMENTS,
+				IObserveDecorator.DEFAULT));
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Properties
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final Map<String, String> SWT_OBSERVABLES_TO_WIDGET_PROPERTIES = Maps.newHashMap();
+	static {
+		String[] keys =
+			{
+					"observeEnabled",
+					"observeVisible",
+					"observeTooltipText",
+					"observeSelection",
+					"observeMin",
+					"observeMax",
+					"observeText",
+					"observeMessage",
+					"observeImage",
+					"observeItems",
+					"observeSingleSelectionIndex",
+					"observeForeground",
+					"observeBackground",
+					"observeFont",
+					"observeSize",
+					"observeLocation",
+					"observeFocus",
+					"observeBounds",
+					"observeEditable",
+					"observeSingleSelection",
+					"observeMultiSelection",
+					"observeInput",
+					"observeCheckedElements",
+					"observeFilters",
+					// observeSelection method is overloaded...
+					"observeSelection",
+					"observeSelection",
+					"observeSelection",
+					"observeSelection",
+					"observeSelection",
+					"observeSelection",
+					"observeSelection",
+					"observeSelection",
+					"observeSelection",
+					"observeSelection",
+					"observeSelection",
+			"observeSelection"};
+		String[] values =
+			{
+					"enabled",
+					"visible",
+					"tooltipText",
+					"selection",
+					"minimum",
+					"maximum",
+					"text",
+					"message",
+					"image",
+					"items",
+					"singleSelectionIndex",
+					"foreground",
+					"background",
+					"font",
+					"size",
+					"location",
+					"focused",
+					"bounds",
+					"editable",
+					"singleSelection",
+					"multipleSelection",
+					"input",
+					"checkedElements",
+					"filters",
+					"dateTimeSelection",
+					"localDateSelection",
+					"localTimeSelection",
+					"buttonSelection",
+					"comboSelection",
+					"ccomboSelection",
+					"listSelection",
+					"menuItemSelection",
+					"scaleSelection",
+					"sliderSelection",
+					"spinnerSelection",
+					// widgetSelection -> observeSelection
+			"widgetSelection"};
+		//
+		for (int i = 0; i < keys.length; i++) {
+			SWT_OBSERVABLES_TO_WIDGET_PROPERTIES.put(keys[i], values[i]);
+			SWT_OBSERVABLES_TO_WIDGET_PROPERTIES.put(values[i], keys[i]);
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/bindables/ViewerInputObservableFactory.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/bindables/ViewerInputObservableFactory.java
index 07597fd24..2e0591797 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/bindables/ViewerInputObservableFactory.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/bindables/ViewerInputObservableFactory.java
@@ -21,23 +21,23 @@
  * @coverage bindings.rcp.model.widgets
  */
 public final class ViewerInputObservableFactory implements IObservableFactory {
-  public static final IObservableFactory INSTANCE = new ViewerInputObservableFactory();
+	public static final IObservableFactory INSTANCE = new ViewerInputObservableFactory();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IObservableFactory
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Type getType() throws Exception {
-    return Type.Input;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IObservableFactory
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Type getType() throws Exception {
+		return Type.Input;
+	}
 
-  @Override
-  public ObservableInfo createObservable(BindableInfo object,
-      BindableInfo property,
-      Type type,
-      boolean version_1_3) throws Exception {
-    return null;
-  }
+	@Override
+	public ObservableInfo createObservable(BindableInfo object,
+			BindableInfo property,
+			Type type,
+			boolean version_1_3) throws Exception {
+		return null;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/bindables/ViewerObservableFactory.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/bindables/ViewerObservableFactory.java
index 2380c81af..b381c3d8a 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/bindables/ViewerObservableFactory.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/bindables/ViewerObservableFactory.java
@@ -45,165 +45,165 @@
  * @coverage bindings.rcp.model.widgets
  */
 public abstract class ViewerObservableFactory implements IObservableFactory {
-  private final Type m_type;
+	private final Type m_type;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ViewerObservableFactory(Type type) {
-    Assert.isTrue(type == Type.OnlyValue
-        || type == Type.OnlyList
-        || type == Type.OnlySet
-        || type == Type.Detail);
-    m_type = type;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ViewerObservableFactory(Type type) {
+		Assert.isTrue(type == Type.OnlyValue
+				|| type == Type.OnlyList
+				|| type == Type.OnlySet
+				|| type == Type.Detail);
+		m_type = type;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IObservableFactory
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final Type getType() throws Exception {
-    return m_type;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IObservableFactory
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final Type getType() throws Exception {
+		return m_type;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Factories
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Factory with type {@link Type#OnlyValue} for create {@link SingleSelectionObservableInfo}.
-   */
-  public static final IObservableFactory SINGLE_SELECTION = new ViewerObservableFactory(
-      Type.OnlyValue) {
-    @Override
-    public ObservableInfo createObservable(BindableInfo object,
-        BindableInfo property,
-        Type type,
-        boolean version_1_3) throws Exception {
-      SingleSelectionObservableInfo observable = new SingleSelectionObservableInfo(object, property);
-      if (version_1_3) {
-        observable.setCodeSupport(new ViewerPropertySingleSelectionCodeSupport());
-      } else {
-        observable.setCodeSupport(new SingleSelectionObservableCodeSupport());
-      }
-      return observable;
-    }
-  };
-  /**
-   * Factory with type {@link Type#Detail} for create master-detail observable's.
-   */
-  public static final IObservableFactory DETAIL_SINGLE_SELECTION = new ViewerObservableFactory(
-      Type.Detail) {
-    @Override
-    public ObservableInfo createObservable(BindableInfo object,
-        BindableInfo property,
-        Type type,
-        boolean version_1_3) throws Exception {
-      // create master
-      SingleSelectionObservableInfo masterObservable =
-          (SingleSelectionObservableInfo) SINGLE_SELECTION.createObservable(
-              object,
-              property,
-              type,
-              version_1_3);
-      // create global detail
-      ObservableInfo detailObservable =
-          GlobalFactoryHelper.createDetailObservable(masterObservable, object, type);
-      if (detailObservable != null) {
-        return detailObservable;
-      }
-      // create detail
-      DetailBeanObservableInfo observable = null;
-      switch (type) {
-        case OnlyValue :
-          observable = new DetailValueBeanObservableInfo(masterObservable, null, null, null);
-          if (version_1_3) {
-            observable.setCodeSupport(new ValuePropertyDetailCodeSupport());
-          } else {
-            observable.setCodeSupport(new BeanObservableDetailValueCodeSupport());
-          }
-          break;
-        case OnlyList :
-          observable = new DetailListBeanObservableInfo(masterObservable, null, null, null);
-          if (version_1_3) {
-            observable.setCodeSupport(new ListPropertyDetailCodeSupport());
-          } else {
-            observable.setCodeSupport(new BeanObservableDetailListCodeSupport());
-          }
-          break;
-        case OnlySet :
-          observable = new DetailSetBeanObservableInfo(masterObservable, null, null, null);
-          if (version_1_3) {
-            observable.setCodeSupport(new SetPropertyDetailCodeSupport());
-          } else {
-            observable.setCodeSupport(new BeanObservableDetailSetCodeSupport());
-          }
-          break;
-      }
-      Assert.isNotNull(observable);
-      observable.setPojoBindable(masterObservable.isPojoBindable());
-      return observable;
-    }
-  };
-  /**
-   * Factory with type {@link Type#OnlyList} for create {@link MultiSelectionObservableInfo}.
-   */
-  public static final IObservableFactory MULTI_SELECTION = new ViewerObservableFactory(
-      Type.OnlyList) {
-    @Override
-    public ObservableInfo createObservable(BindableInfo object,
-        BindableInfo property,
-        Type type,
-        boolean version_1_3) throws Exception {
-      MultiSelectionObservableInfo observable = new MultiSelectionObservableInfo(object);
-      if (version_1_3) {
-        observable.setCodeSupport(new ViewerPropertyMultiSelectionCodeSupport());
-      } else {
-        observable.setCodeSupport(new MultiSelectionObservableCodeSupport());
-      }
-      return observable;
-    }
-  };
-  /**
-   * Factory with type {@link Type#OnlySet} for create {@link CheckedElementsObservableInfo}.
-   */
-  public static final IObservableFactory CHECKED_ELEMENTS = new ViewerObservableFactory(
-      Type.OnlySet) {
-    @Override
-    public ObservableInfo createObservable(BindableInfo object,
-        BindableInfo property,
-        Type type,
-        boolean version_1_3) throws Exception {
-      CheckedElementsObservableInfo observable = new CheckedElementsObservableInfo(object);
-      if (version_1_3) {
-        observable.setCodeSupport(new ViewerPropertyCheckedElementsCodeSupport());
-      } else {
-        observable.setCodeSupport(new CheckedElementsObservableCodeSupport());
-      }
-      return observable;
-    }
-  };
-  /**
-   * Factory with type {@link Type#OnlySet} for create {@link FiltersObservableInfo}.
-   */
-  public static final IObservableFactory FILTERS = new ViewerObservableFactory(Type.OnlySet) {
-    @Override
-    public ObservableInfo createObservable(BindableInfo object,
-        BindableInfo property,
-        Type type,
-        boolean version_1_3) throws Exception {
-      FiltersObservableInfo observable = new FiltersObservableInfo((WidgetBindableInfo) object);
-      if (version_1_3) {
-        observable.setCodeSupport(new ViewerPropertyFiltersCodeSupport());
-      } else {
-        observable.setCodeSupport(new FiltersObservableCodeSupport());
-      }
-      return observable;
-    }
-  };
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Factories
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Factory with type {@link Type#OnlyValue} for create {@link SingleSelectionObservableInfo}.
+	 */
+	public static final IObservableFactory SINGLE_SELECTION = new ViewerObservableFactory(
+			Type.OnlyValue) {
+		@Override
+		public ObservableInfo createObservable(BindableInfo object,
+				BindableInfo property,
+				Type type,
+				boolean version_1_3) throws Exception {
+			SingleSelectionObservableInfo observable = new SingleSelectionObservableInfo(object, property);
+			if (version_1_3) {
+				observable.setCodeSupport(new ViewerPropertySingleSelectionCodeSupport());
+			} else {
+				observable.setCodeSupport(new SingleSelectionObservableCodeSupport());
+			}
+			return observable;
+		}
+	};
+	/**
+	 * Factory with type {@link Type#Detail} for create master-detail observable's.
+	 */
+	public static final IObservableFactory DETAIL_SINGLE_SELECTION = new ViewerObservableFactory(
+			Type.Detail) {
+		@Override
+		public ObservableInfo createObservable(BindableInfo object,
+				BindableInfo property,
+				Type type,
+				boolean version_1_3) throws Exception {
+			// create master
+			SingleSelectionObservableInfo masterObservable =
+					(SingleSelectionObservableInfo) SINGLE_SELECTION.createObservable(
+							object,
+							property,
+							type,
+							version_1_3);
+			// create global detail
+			ObservableInfo detailObservable =
+					GlobalFactoryHelper.createDetailObservable(masterObservable, object, type);
+			if (detailObservable != null) {
+				return detailObservable;
+			}
+			// create detail
+			DetailBeanObservableInfo observable = null;
+			switch (type) {
+			case OnlyValue :
+				observable = new DetailValueBeanObservableInfo(masterObservable, null, null, null);
+				if (version_1_3) {
+					observable.setCodeSupport(new ValuePropertyDetailCodeSupport());
+				} else {
+					observable.setCodeSupport(new BeanObservableDetailValueCodeSupport());
+				}
+				break;
+			case OnlyList :
+				observable = new DetailListBeanObservableInfo(masterObservable, null, null, null);
+				if (version_1_3) {
+					observable.setCodeSupport(new ListPropertyDetailCodeSupport());
+				} else {
+					observable.setCodeSupport(new BeanObservableDetailListCodeSupport());
+				}
+				break;
+			case OnlySet :
+				observable = new DetailSetBeanObservableInfo(masterObservable, null, null, null);
+				if (version_1_3) {
+					observable.setCodeSupport(new SetPropertyDetailCodeSupport());
+				} else {
+					observable.setCodeSupport(new BeanObservableDetailSetCodeSupport());
+				}
+				break;
+			}
+			Assert.isNotNull(observable);
+			observable.setPojoBindable(masterObservable.isPojoBindable());
+			return observable;
+		}
+	};
+	/**
+	 * Factory with type {@link Type#OnlyList} for create {@link MultiSelectionObservableInfo}.
+	 */
+	public static final IObservableFactory MULTI_SELECTION = new ViewerObservableFactory(
+			Type.OnlyList) {
+		@Override
+		public ObservableInfo createObservable(BindableInfo object,
+				BindableInfo property,
+				Type type,
+				boolean version_1_3) throws Exception {
+			MultiSelectionObservableInfo observable = new MultiSelectionObservableInfo(object);
+			if (version_1_3) {
+				observable.setCodeSupport(new ViewerPropertyMultiSelectionCodeSupport());
+			} else {
+				observable.setCodeSupport(new MultiSelectionObservableCodeSupport());
+			}
+			return observable;
+		}
+	};
+	/**
+	 * Factory with type {@link Type#OnlySet} for create {@link CheckedElementsObservableInfo}.
+	 */
+	public static final IObservableFactory CHECKED_ELEMENTS = new ViewerObservableFactory(
+			Type.OnlySet) {
+		@Override
+		public ObservableInfo createObservable(BindableInfo object,
+				BindableInfo property,
+				Type type,
+				boolean version_1_3) throws Exception {
+			CheckedElementsObservableInfo observable = new CheckedElementsObservableInfo(object);
+			if (version_1_3) {
+				observable.setCodeSupport(new ViewerPropertyCheckedElementsCodeSupport());
+			} else {
+				observable.setCodeSupport(new CheckedElementsObservableCodeSupport());
+			}
+			return observable;
+		}
+	};
+	/**
+	 * Factory with type {@link Type#OnlySet} for create {@link FiltersObservableInfo}.
+	 */
+	public static final IObservableFactory FILTERS = new ViewerObservableFactory(Type.OnlySet) {
+		@Override
+		public ObservableInfo createObservable(BindableInfo object,
+				BindableInfo property,
+				Type type,
+				boolean version_1_3) throws Exception {
+			FiltersObservableInfo observable = new FiltersObservableInfo((WidgetBindableInfo) object);
+			if (version_1_3) {
+				observable.setCodeSupport(new ViewerPropertyFiltersCodeSupport());
+			} else {
+				observable.setCodeSupport(new FiltersObservableCodeSupport());
+			}
+			return observable;
+		}
+	};
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/bindables/WidgetBindableInfo.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/bindables/WidgetBindableInfo.java
index b45e5b18a..83ee75992 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/bindables/WidgetBindableInfo.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/bindables/WidgetBindableInfo.java
@@ -43,271 +43,271 @@
  * @coverage bindings.rcp.model.widgets
  */
 public final class WidgetBindableInfo extends BindableInfo {
-  private JavaInfo m_javaInfo;
-  private final WidgetBindableInfo m_parent;
-  private final List<WidgetBindableInfo> m_children = Lists.newArrayList();
-  private List<WidgetPropertyBindableInfo> m_properties;
-  private final IObservePresentation m_presentation;
+	private JavaInfo m_javaInfo;
+	private final WidgetBindableInfo m_parent;
+	private final List<WidgetBindableInfo> m_children = Lists.newArrayList();
+	private List<WidgetPropertyBindableInfo> m_properties;
+	private final IObservePresentation m_presentation;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public WidgetBindableInfo(JavaInfo javaInfo, DatabindingsProvider provider) throws Exception {
-    this(javaInfo, null, provider);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public WidgetBindableInfo(JavaInfo javaInfo, DatabindingsProvider provider) throws Exception {
+		this(javaInfo, null, provider);
+	}
 
-  public WidgetBindableInfo(JavaInfo javaInfo,
-      WidgetBindableInfo parent,
-      DatabindingsProvider provider) throws Exception {
-    super(javaInfo.getDescription().getComponentClass(), new JavaInfoReferenceProvider(javaInfo,
-        provider));
-    m_javaInfo = javaInfo;
-    m_parent = parent;
-    m_presentation = new JavaInfoObservePresentation(javaInfo, getReferenceProvider());
-    // prepare children
-    List<JavaInfo> childrenInfos = SynchronizeManager.getChildren(m_javaInfo, JavaInfo.class);
-    for (JavaInfo childInfo : childrenInfos) {
-      m_children.add(new WidgetBindableInfo(childInfo, this, provider));
-    }
-    // prepare properties
-    if (getReference() == null) {
-      m_properties = Collections.emptyList();
-    } else {
-      m_properties = PropertiesSupport.getProperties(getClassLoader(), getObjectType());
-    }
-  }
+	public WidgetBindableInfo(JavaInfo javaInfo,
+			WidgetBindableInfo parent,
+			DatabindingsProvider provider) throws Exception {
+		super(javaInfo.getDescription().getComponentClass(), new JavaInfoReferenceProvider(javaInfo,
+				provider));
+		m_javaInfo = javaInfo;
+		m_parent = parent;
+		m_presentation = new JavaInfoObservePresentation(javaInfo, getReferenceProvider());
+		// prepare children
+		List<JavaInfo> childrenInfos = SynchronizeManager.getChildren(m_javaInfo, JavaInfo.class);
+		for (JavaInfo childInfo : childrenInfos) {
+			m_children.add(new WidgetBindableInfo(childInfo, this, provider));
+		}
+		// prepare properties
+		if (getReference() == null) {
+			m_properties = Collections.emptyList();
+		} else {
+			m_properties = PropertiesSupport.getProperties(getClassLoader(), getObjectType());
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Creation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void createBinding(AbstractBindingInfo binding) throws Exception {
-    super.createBinding(binding);
-    // ensure convert local variable to field
-    ensureConvertToField();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Creation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void createBinding(AbstractBindingInfo binding) throws Exception {
+		super.createBinding(binding);
+		// ensure convert local variable to field
+		ensureConvertToField();
+	}
 
-  public void ensureConvertToField() throws Exception {
-    VariableSupport variableSupport = m_javaInfo.getVariableSupport();
-    if (variableSupport.canConvertLocalToField()) {
-      variableSupport.convertLocalToField();
-    }
-    if (variableSupport instanceof ExposedPropertyVariableSupport
-        || variableSupport instanceof ExposedFieldVariableSupport) {
-      WidgetBindableInfo parent = m_parent;
-      if (m_javaInfo instanceof ViewerInfo
-          && m_javaInfo.getParentJava().getVariableSupport() instanceof WrapperMethodControlVariableSupport) {
-        parent = m_parent.m_parent;
-      }
-      parent.ensureConvertToField();
-    }
-    JavaInfoReferenceProvider referenceProvider =
-        (JavaInfoReferenceProvider) getReferenceProvider();
-    referenceProvider.ensureControllerReference();
-  }
+	public void ensureConvertToField() throws Exception {
+		VariableSupport variableSupport = m_javaInfo.getVariableSupport();
+		if (variableSupport.canConvertLocalToField()) {
+			variableSupport.convertLocalToField();
+		}
+		if (variableSupport instanceof ExposedPropertyVariableSupport
+				|| variableSupport instanceof ExposedFieldVariableSupport) {
+			WidgetBindableInfo parent = m_parent;
+			if (m_javaInfo instanceof ViewerInfo
+					&& m_javaInfo.getParentJava().getVariableSupport() instanceof WrapperMethodControlVariableSupport) {
+				parent = m_parent.m_parent;
+			}
+			parent.ensureConvertToField();
+		}
+		JavaInfoReferenceProvider referenceProvider =
+				(JavaInfoReferenceProvider) getReferenceProvider();
+		referenceProvider.ensureControllerReference();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public JavaInfo getJavaInfo() {
-    return m_javaInfo;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public JavaInfo getJavaInfo() {
+		return m_javaInfo;
+	}
 
-  private void setJavaInfo(JavaInfo javaInfo) throws Exception {
-    // update info
-    m_javaInfo = javaInfo;
-    // update type
-    setObjectType(javaInfo.getDescription().getComponentClass());
-    // update reference
-    JavaInfoReferenceProvider referenceProvider =
-        (JavaInfoReferenceProvider) getReferenceProvider();
-    referenceProvider.setJavaInfo(javaInfo);
-    // update presentation
-    JavaInfoObservePresentation presentation = (JavaInfoObservePresentation) m_presentation;
-    presentation.setJavaInfo(javaInfo);
-    // update properties
-    if (getReference() == null) {
-      m_properties = Collections.emptyList();
-    } else {
-      m_properties = PropertiesSupport.getProperties(getClassLoader(), getObjectType());
-    }
-  }
+	private void setJavaInfo(JavaInfo javaInfo) throws Exception {
+		// update info
+		m_javaInfo = javaInfo;
+		// update type
+		setObjectType(javaInfo.getDescription().getComponentClass());
+		// update reference
+		JavaInfoReferenceProvider referenceProvider =
+				(JavaInfoReferenceProvider) getReferenceProvider();
+		referenceProvider.setJavaInfo(javaInfo);
+		// update presentation
+		JavaInfoObservePresentation presentation = (JavaInfoObservePresentation) m_presentation;
+		presentation.setJavaInfo(javaInfo);
+		// update properties
+		if (getReference() == null) {
+			m_properties = Collections.emptyList();
+		} else {
+			m_properties = PropertiesSupport.getProperties(getClassLoader(), getObjectType());
+		}
+	}
 
-  /**
-   * Update (reorder, add, remove) children {@link WidgetBindableInfo}.
-   */
-  public void update(final DatabindingsProvider provider) throws Exception {
-    // prepare new javaInfo's
-    List<JavaInfo> javaInfos = SynchronizeManager.getChildren(m_javaInfo, JavaInfo.class);
-    //
-    SynchronizeManager.synchronizeObjects(
-        m_children,
-        javaInfos,
-        new ISynchronizeProcessor<JavaInfo, WidgetBindableInfo>() {
-          @Override
-          public boolean handleObject(WidgetBindableInfo object) {
-            return true;
-          }
+	/**
+	 * Update (reorder, add, remove) children {@link WidgetBindableInfo}.
+	 */
+	public void update(final DatabindingsProvider provider) throws Exception {
+		// prepare new javaInfo's
+		List<JavaInfo> javaInfos = SynchronizeManager.getChildren(m_javaInfo, JavaInfo.class);
+		//
+		SynchronizeManager.synchronizeObjects(
+				m_children,
+				javaInfos,
+				new ISynchronizeProcessor<JavaInfo, WidgetBindableInfo>() {
+					@Override
+					public boolean handleObject(WidgetBindableInfo object) {
+						return true;
+					}
 
-          @Override
-          public JavaInfo getKeyObject(WidgetBindableInfo widget) {
-            return widget.m_javaInfo;
-          }
+					@Override
+					public JavaInfo getKeyObject(WidgetBindableInfo widget) {
+						return widget.m_javaInfo;
+					}
 
-          @Override
-          public boolean equals(JavaInfo key0, JavaInfo key1) {
-            return key0 == key1;
-          }
+					@Override
+					public boolean equals(JavaInfo key0, JavaInfo key1) {
+						return key0 == key1;
+					}
 
-          @Override
-          public WidgetBindableInfo findObject(Map<JavaInfo, WidgetBindableInfo> javaInfoToWidget,
-              JavaInfo javaInfo) throws Exception {
-            VariableSupport variableSupport = javaInfo.getVariableSupport();
-            for (Map.Entry<JavaInfo, WidgetBindableInfo> entry : javaInfoToWidget.entrySet()) {
-              if (entry.getKey().getVariableSupport() == variableSupport) {
-                WidgetBindableInfo widget = entry.getValue();
-                widget.setJavaInfo(javaInfo);
-                return widget;
-              }
-            }
-            return null;
-          }
+					@Override
+					public WidgetBindableInfo findObject(Map<JavaInfo, WidgetBindableInfo> javaInfoToWidget,
+							JavaInfo javaInfo) throws Exception {
+						VariableSupport variableSupport = javaInfo.getVariableSupport();
+						for (Map.Entry<JavaInfo, WidgetBindableInfo> entry : javaInfoToWidget.entrySet()) {
+							if (entry.getKey().getVariableSupport() == variableSupport) {
+								WidgetBindableInfo widget = entry.getValue();
+								widget.setJavaInfo(javaInfo);
+								return widget;
+							}
+						}
+						return null;
+					}
 
-          @Override
-          public WidgetBindableInfo createObject(JavaInfo javaInfo) throws Exception {
-            return new WidgetBindableInfo(javaInfo, WidgetBindableInfo.this, provider);
-          }
+					@Override
+					public WidgetBindableInfo createObject(JavaInfo javaInfo) throws Exception {
+						return new WidgetBindableInfo(javaInfo, WidgetBindableInfo.this, provider);
+					}
 
-          @Override
-          public void update(WidgetBindableInfo widget) throws Exception {
-            widget.update(provider);
-          }
-        });
-  }
+					@Override
+					public void update(WidgetBindableInfo widget) throws Exception {
+						widget.update(provider);
+					}
+				});
+	}
 
-  /**
-   * Helper method for access to editor class loader.
-   */
-  public ClassLoader getClassLoader() {
-    return EditorState.get(m_javaInfo.getEditor()).getEditorLoader();
-  }
+	/**
+	 * Helper method for access to editor class loader.
+	 */
+	public ClassLoader getClassLoader() {
+		return EditorState.get(m_javaInfo.getEditor()).getEditorLoader();
+	}
 
-  /**
-   * Access to properties.
-   */
-  public List<WidgetPropertyBindableInfo> getProperties() {
-    return m_properties;
-  }
+	/**
+	 * Access to properties.
+	 */
+	public List<WidgetPropertyBindableInfo> getProperties() {
+		return m_properties;
+	}
 
-  /**
-   * @return {@link WidgetBindableInfo} children that association with given {@link ASTNode} or
-   *         <code>null</code>.
-   */
-  public WidgetBindableInfo resolveReference(ASTNode node) throws Exception {
-    if (AstNodeUtils.isVariable(node)) {
-      if (AstNodeUtils.getVariableName(node).equals(
-          JavaInfoReferenceProvider.getReference(m_javaInfo))) {
-        return this;
-      }
-    } else if (m_javaInfo.isRepresentedBy(node)) {
-      return this;
-    }
-    for (WidgetBindableInfo child : m_children) {
-      WidgetBindableInfo result = child.resolveReference(node);
-      if (result != null) {
-        return result;
-      }
-    }
-    if (m_javaInfo.isRoot()) {
-      JavaInfo javaInfo = m_javaInfo.getChildRepresentedBy(node);
-      if (javaInfo != null) {
-        return resolve(javaInfo);
-      }
-    }
-    return null;
-  }
+	/**
+	 * @return {@link WidgetBindableInfo} children that association with given {@link ASTNode} or
+	 *         <code>null</code>.
+	 */
+	public WidgetBindableInfo resolveReference(ASTNode node) throws Exception {
+		if (AstNodeUtils.isVariable(node)) {
+			if (AstNodeUtils.getVariableName(node).equals(
+					JavaInfoReferenceProvider.getReference(m_javaInfo))) {
+				return this;
+			}
+		} else if (m_javaInfo.isRepresentedBy(node)) {
+			return this;
+		}
+		for (WidgetBindableInfo child : m_children) {
+			WidgetBindableInfo result = child.resolveReference(node);
+			if (result != null) {
+				return result;
+			}
+		}
+		if (m_javaInfo.isRoot()) {
+			JavaInfo javaInfo = m_javaInfo.getChildRepresentedBy(node);
+			if (javaInfo != null) {
+				return resolve(javaInfo);
+			}
+		}
+		return null;
+	}
 
-  public WidgetBindableInfo resolve(JavaInfo javaInfo) {
-    if (m_javaInfo == javaInfo) {
-      return this;
-    }
-    for (WidgetBindableInfo child : m_children) {
-      WidgetBindableInfo result = child.resolve(javaInfo);
-      if (result != null) {
-        return result;
-      }
-    }
-    return null;
-  }
+	public WidgetBindableInfo resolve(JavaInfo javaInfo) {
+		if (m_javaInfo == javaInfo) {
+			return this;
+		}
+		for (WidgetBindableInfo child : m_children) {
+			WidgetBindableInfo result = child.resolve(javaInfo);
+			if (result != null) {
+				return result;
+			}
+		}
+		return null;
+	}
 
-  /**
-   * @return {@link WidgetPropertyBindableInfo} property that association with given reference or
-   *         <code>null</code>.
-   */
-  @Override
-  public WidgetPropertyBindableInfo resolvePropertyReference(String reference) throws Exception {
-    for (WidgetPropertyBindableInfo property : m_properties) {
-      if (reference.equals(property.getReference())) {
-        return property;
-      }
-    }
-    return null;
-  }
+	/**
+	 * @return {@link WidgetPropertyBindableInfo} property that association with given reference or
+	 *         <code>null</code>.
+	 */
+	@Override
+	public WidgetPropertyBindableInfo resolvePropertyReference(String reference) throws Exception {
+		for (WidgetPropertyBindableInfo property : m_properties) {
+			if (reference.equals(property.getReference())) {
+				return property;
+			}
+		}
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // BindableInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected List<BindableInfo> getChildren() {
-    return CoreUtils.cast(m_children);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// BindableInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected List<BindableInfo> getChildren() {
+		return CoreUtils.cast(m_children);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Hierarchy
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public IObserveInfo getParent() {
-    return m_parent;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Hierarchy
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public IObserveInfo getParent() {
+		return m_parent;
+	}
 
-  @Override
-  public List<IObserveInfo> getChildren(ChildrenContext context) {
-    if (context == ChildrenContext.ChildrenForMasterTable) {
-      return CoreUtils.cast(m_children);
-    }
-    if (context == ChildrenContext.ChildrenForPropertiesTable) {
-      return CoreUtils.cast(m_properties);
-    }
-    return Collections.emptyList();
-  }
+	@Override
+	public List<IObserveInfo> getChildren(ChildrenContext context) {
+		if (context == ChildrenContext.ChildrenForMasterTable) {
+			return CoreUtils.cast(m_children);
+		}
+		if (context == ChildrenContext.ChildrenForPropertiesTable) {
+			return CoreUtils.cast(m_properties);
+		}
+		return Collections.emptyList();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public IObservePresentation getPresentation() {
-    return m_presentation;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public IObservePresentation getPresentation() {
+		return m_presentation;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ObserveType
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public ObserveType getType() {
-    return ObserveType.WIDGETS;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ObserveType
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public ObserveType getType() {
+		return ObserveType.WIDGETS;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/bindables/WidgetPropertyBindableInfo.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/bindables/WidgetPropertyBindableInfo.java
index e1afdef49..665f454b2 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/bindables/WidgetPropertyBindableInfo.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/bindables/WidgetPropertyBindableInfo.java
@@ -35,125 +35,125 @@
  * @coverage bindings.rcp.model.widgets
  */
 public final class WidgetPropertyBindableInfo extends BindableInfo implements IObserveDecoration {
-  private final IObservableFactory m_observableFactory;
-  private final IObservePresentation m_presentation;
-  private final IObserveDecorator m_decorator;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public WidgetPropertyBindableInfo(Class<?> objectType,
-      IReferenceProvider referenceProvider,
-      IObservableFactory observableFactory,
-      IObservePresentation presentation,
-      IObserveDecorator decorator) {
-    super(objectType, referenceProvider);
-    setBindingDecoration(SwtResourceManager.TOP_LEFT);
-    m_observableFactory = observableFactory;
-    m_presentation = presentation;
-    m_decorator = decorator;
-  }
-
-  public WidgetPropertyBindableInfo(String text,
-      Image image,
-      Class<?> objectType,
-      String reference,
-      IObservableFactory observableFactory,
-      IObserveDecorator decorator) {
-    this(objectType,
-        new StringReferenceProvider(reference),
-        observableFactory,
-        new SimpleObservePresentation(text, image),
-        decorator);
-  }
-
-  public WidgetPropertyBindableInfo(String text,
-      Class<?> objectType,
-      String reference,
-      IObservableFactory observableFactory,
-      IObserveDecorator decorator) {
-    this(text,
-        TypeImageProvider.getImage(objectType),
-        objectType,
-        reference,
-        observableFactory,
-        decorator);
-  }
-
-  public WidgetPropertyBindableInfo(String text,
-      Class<?> objectType,
-      String reference,
-      IObserveDecorator decorator) {
-    this(text, objectType, reference, SwtObservableFactory.SWT, decorator);
-  }
-
-  public WidgetPropertyBindableInfo(WidgetPropertyBindableInfo bindable) {
-    this(bindable.getObjectType(),
-        bindable.getReferenceProvider(),
-        bindable.m_observableFactory,
-        bindable.m_presentation,
-        bindable.m_decorator);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // BindableInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected List<BindableInfo> getChildren() {
-    return Collections.emptyList();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Hierarchy
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public IObserveInfo getParent() {
-    return null;
-  }
-
-  @Override
-  public List<IObserveInfo> getChildren(ChildrenContext context) {
-    return Collections.emptyList();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public IObservePresentation getPresentation() {
-    return m_presentation;
-  }
-
-  @Override
-  public IObserveDecorator getDecorator() {
-    return m_decorator;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Creation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public IObservableFactory getObservableFactory() throws Exception {
-    return m_observableFactory;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ObserveType
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public ObserveType getType() {
-    return ObserveType.WIDGETS;
-  }
+	private final IObservableFactory m_observableFactory;
+	private final IObservePresentation m_presentation;
+	private final IObserveDecorator m_decorator;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public WidgetPropertyBindableInfo(Class<?> objectType,
+			IReferenceProvider referenceProvider,
+			IObservableFactory observableFactory,
+			IObservePresentation presentation,
+			IObserveDecorator decorator) {
+		super(objectType, referenceProvider);
+		setBindingDecoration(SwtResourceManager.TOP_LEFT);
+		m_observableFactory = observableFactory;
+		m_presentation = presentation;
+		m_decorator = decorator;
+	}
+
+	public WidgetPropertyBindableInfo(String text,
+			Image image,
+			Class<?> objectType,
+			String reference,
+			IObservableFactory observableFactory,
+			IObserveDecorator decorator) {
+		this(objectType,
+				new StringReferenceProvider(reference),
+				observableFactory,
+				new SimpleObservePresentation(text, image),
+				decorator);
+	}
+
+	public WidgetPropertyBindableInfo(String text,
+			Class<?> objectType,
+			String reference,
+			IObservableFactory observableFactory,
+			IObserveDecorator decorator) {
+		this(text,
+				TypeImageProvider.getImage(objectType),
+				objectType,
+				reference,
+				observableFactory,
+				decorator);
+	}
+
+	public WidgetPropertyBindableInfo(String text,
+			Class<?> objectType,
+			String reference,
+			IObserveDecorator decorator) {
+		this(text, objectType, reference, SwtObservableFactory.SWT, decorator);
+	}
+
+	public WidgetPropertyBindableInfo(WidgetPropertyBindableInfo bindable) {
+		this(bindable.getObjectType(),
+				bindable.getReferenceProvider(),
+				bindable.m_observableFactory,
+				bindable.m_presentation,
+				bindable.m_decorator);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// BindableInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected List<BindableInfo> getChildren() {
+		return Collections.emptyList();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Hierarchy
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public IObserveInfo getParent() {
+		return null;
+	}
+
+	@Override
+	public List<IObserveInfo> getChildren(ChildrenContext context) {
+		return Collections.emptyList();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public IObservePresentation getPresentation() {
+		return m_presentation;
+	}
+
+	@Override
+	public IObserveDecorator getDecorator() {
+		return m_decorator;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Creation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public IObservableFactory getObservableFactory() throws Exception {
+		return m_observableFactory;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ObserveType
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public ObserveType getType() {
+		return ObserveType.WIDGETS;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/AbstractFactoryInfo.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/AbstractFactoryInfo.java
index 3ada9b524..82363eacf 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/AbstractFactoryInfo.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/AbstractFactoryInfo.java
@@ -27,113 +27,113 @@
  * @coverage bindings.rcp.model.widgets
  */
 public abstract class AbstractFactoryInfo extends BeansObservableFactoryInfo {
-  private final String m_method;
-  protected boolean m_isPojoBindable;
-  private boolean m_cancel;
+	private final String m_method;
+	protected boolean m_isPojoBindable;
+	private boolean m_cancel;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractFactoryInfo(String method) {
-    super(null);
-    m_method = method;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractFactoryInfo(String method) {
+		super(null);
+		m_method = method;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void setPojoBindable(boolean isPojoBindable) {
-    m_isPojoBindable = isPojoBindable;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void setPojoBindable(boolean isPojoBindable) {
+		m_isPojoBindable = isPojoBindable;
+	}
 
-  @Override
-  public boolean isDesignerMode() {
-    return false;
-  }
+	@Override
+	public boolean isDesignerMode() {
+		return false;
+	}
 
-  public String getOriginalClassName() {
-    return m_className;
-  }
+	public String getOriginalClassName() {
+		return m_className;
+	}
 
-  @Override
-  public String getClassName() {
-    StringBuffer buffer = new StringBuffer();
-    buffer.append("(");
-    if (m_propertyName == null) {
-      buffer.append("?????, ");
-    } else {
-      buffer.append(m_propertyName + ", ");
-    }
-    if (m_elementType == null) {
-      buffer.append("?????");
-    } else {
-      buffer.append(ClassUtils.getShortClassName(m_elementType));
-    }
-    buffer.append(".class)");
-    return m_method + buffer.toString();
-  }
+	@Override
+	public String getClassName() {
+		StringBuffer buffer = new StringBuffer();
+		buffer.append("(");
+		if (m_propertyName == null) {
+			buffer.append("?????, ");
+		} else {
+			buffer.append(m_propertyName + ", ");
+		}
+		if (m_elementType == null) {
+			buffer.append("?????");
+		} else {
+			buffer.append(ClassUtils.getShortClassName(m_elementType));
+		}
+		buffer.append(".class)");
+		return m_method + buffer.toString();
+	}
 
-  @Override
-  public void setClassName(String className) {
-    if (!className.startsWith(m_method)) {
-      m_cancel = true;
-      super.setClassName(className);
-    }
-  }
+	@Override
+	public void setClassName(String className) {
+		if (!className.startsWith(m_method)) {
+			m_cancel = true;
+			super.setClassName(className);
+		}
+	}
 
-  public boolean isCancel() {
-    return m_cancel;
-  }
+	public boolean isCancel() {
+		return m_cancel;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getPresentationText() throws Exception {
-    return getClassName();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getPresentationText() throws Exception {
+		return getClassName();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void configure(ChooseClassConfiguration configuration) {
-    configuration.setValueScope(m_method);
-    configuration.addDefaultStart(getClassName());
-    configuration.setBaseClassName("org.eclipse.core.databinding.observable.masterdetail.IObservableFactory");
-    configuration.setConstructorParameters(ArrayUtils.EMPTY_CLASS_ARRAY);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void configure(ChooseClassConfiguration configuration) {
+		configuration.setValueScope(m_method);
+		configuration.addDefaultStart(getClassName());
+		configuration.setBaseClassName("org.eclipse.core.databinding.observable.masterdetail.IObservableFactory");
+		configuration.setConstructorParameters(ArrayUtils.EMPTY_CLASS_ARRAY);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void addSourceCode(List<String> lines) throws Exception {
-    String beansClassName =
-        m_isPojoBindable
-            ? DataBindingsCodeUtils.getPojoObservablesClass()
-            : "org.eclipse.core.databinding.beans.BeansObservables";
-    lines.add("org.eclipse.core.databinding.observable.masterdetail.IObservableFactory "
-        + getVariableIdentifier()
-        + " = "
-        + beansClassName
-        + "."
-        + m_method
-        + "(org.eclipse.core.databinding.observable.Realm.getDefault(), "
-        + m_propertyName
-        + ", "
-        + CoreUtils.getClassName(m_elementType)
-        + ".class"
-        + ");");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void addSourceCode(List<String> lines) throws Exception {
+		String beansClassName =
+				m_isPojoBindable
+				? DataBindingsCodeUtils.getPojoObservablesClass()
+						: "org.eclipse.core.databinding.beans.BeansObservables";
+		lines.add("org.eclipse.core.databinding.observable.masterdetail.IObservableFactory "
+				+ getVariableIdentifier()
+				+ " = "
+				+ beansClassName
+				+ "."
+				+ m_method
+				+ "(org.eclipse.core.databinding.observable.Realm.getDefault(), "
+				+ m_propertyName
+				+ ", "
+				+ CoreUtils.getClassName(m_elementType)
+				+ ".class"
+				+ ");");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/AbstractLabelProviderInfo.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/AbstractLabelProviderInfo.java
index b3bc0b93c..91a6076ce 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/AbstractLabelProviderInfo.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/AbstractLabelProviderInfo.java
@@ -24,35 +24,35 @@
  * @coverage bindings.rcp.model.widgets
  */
 public abstract class AbstractLabelProviderInfo extends SimpleClassObjectInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractLabelProviderInfo(String className) {
-    super(className);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractLabelProviderInfo(String className) {
+		super(className);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Create {@link IUiContentProvider} content providers for edit this model.
-   */
-  public abstract void createContentProviders(List<IUiContentProvider> providers,
-      DatabindingsProvider provider,
-      boolean useClear);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Create {@link IUiContentProvider} content providers for edit this model.
+	 */
+	public abstract void createContentProviders(List<IUiContentProvider> providers,
+			DatabindingsProvider provider,
+			boolean useClear);
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Generate source code association with this object.
-   */
-  public abstract String getSourceCode(List<String> lines, CodeGenerationSupport generationSupport)
-      throws Exception;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Generate source code association with this object.
+	 */
+	public abstract String getSourceCode(List<String> lines, CodeGenerationSupport generationSupport)
+			throws Exception;
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/AbstractViewerInputBindingInfo.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/AbstractViewerInputBindingInfo.java
index cb1caa892..0df2ac0e2 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/AbstractViewerInputBindingInfo.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/AbstractViewerInputBindingInfo.java
@@ -54,413 +54,413 @@
  * @coverage bindings.rcp.model.widgets
  */
 public abstract class AbstractViewerInputBindingInfo extends AbstractBindingInfo {
-  protected final WidgetBindableInfo m_viewerBindable;
-  protected final WidgetPropertyBindableInfo m_viewerBindableProperty;
-  protected ObservableInfo m_inputObservable;
-  private CodeSupport m_codeSupport;
-  private final boolean m_isColumnViewer;
-  private final List<EditingSupportInfo> m_editingSupports;
+	protected final WidgetBindableInfo m_viewerBindable;
+	protected final WidgetPropertyBindableInfo m_viewerBindableProperty;
+	protected ObservableInfo m_inputObservable;
+	private CodeSupport m_codeSupport;
+	private final boolean m_isColumnViewer;
+	private final List<EditingSupportInfo> m_editingSupports;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractViewerInputBindingInfo(WidgetBindableInfo viewerBindable) throws Exception {
-    this(viewerBindable, viewerBindable.resolvePropertyReference("setInput"));
-    Assert.isNotNull(m_viewerBindableProperty);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractViewerInputBindingInfo(WidgetBindableInfo viewerBindable) throws Exception {
+		this(viewerBindable, viewerBindable.resolvePropertyReference("setInput"));
+		Assert.isNotNull(m_viewerBindableProperty);
+	}
 
-  public AbstractViewerInputBindingInfo(WidgetBindableInfo viewerBindable,
-      WidgetPropertyBindableInfo viewerBindableProperty) throws Exception {
-    m_viewerBindable = viewerBindable;
-    m_viewerBindableProperty = viewerBindableProperty;
-    //
-    m_isColumnViewer = isColumnViewer(m_viewerBindable);
-    m_editingSupports = m_isColumnViewer ? new ArrayList<EditingSupportInfo>() : null;
-  }
+	public AbstractViewerInputBindingInfo(WidgetBindableInfo viewerBindable,
+			WidgetPropertyBindableInfo viewerBindableProperty) throws Exception {
+		m_viewerBindable = viewerBindable;
+		m_viewerBindableProperty = viewerBindableProperty;
+		//
+		m_isColumnViewer = isColumnViewer(m_viewerBindable);
+		m_editingSupports = m_isColumnViewer ? new ArrayList<EditingSupportInfo>() : null;
+	}
 
-  private static final boolean isColumnViewer(WidgetBindableInfo bindableWidget) throws Exception {
-    return bindableWidget.getClassLoader().loadClass("org.eclipse.jface.viewers.ColumnViewer").isAssignableFrom(
-        bindableWidget.getObjectType());
-  }
+	private static final boolean isColumnViewer(WidgetBindableInfo bindableWidget) throws Exception {
+		return bindableWidget.getClassLoader().loadClass("org.eclipse.jface.viewers.ColumnViewer").isAssignableFrom(
+				bindableWidget.getObjectType());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public List<EditingSupportInfo> getEditingSupports() {
-    return m_editingSupports;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public List<EditingSupportInfo> getEditingSupports() {
+		return m_editingSupports;
+	}
 
-  public final CodeSupport getCodeSupport() {
-    return m_codeSupport;
-  }
+	public final CodeSupport getCodeSupport() {
+		return m_codeSupport;
+	}
 
-  public final void setCodeSupport(CodeSupport codeSupport) {
-    m_codeSupport = codeSupport;
-  }
+	public final void setCodeSupport(CodeSupport codeSupport) {
+		m_codeSupport = codeSupport;
+	}
 
-  public final ObservableInfo getInputObservable() {
-    return m_inputObservable;
-  }
+	public final ObservableInfo getInputObservable() {
+		return m_inputObservable;
+	}
 
-  public final void setInputObservable(ObservableInfo inputObservable) {
-    m_inputObservable = inputObservable;
-  }
+	public final void setInputObservable(ObservableInfo inputObservable) {
+		m_inputObservable = inputObservable;
+	}
 
-  public final WidgetBindableInfo getViewer() {
-    return m_viewerBindable;
-  }
+	public final WidgetBindableInfo getViewer() {
+		return m_viewerBindable;
+	}
 
-  /**
-   * Sets providers for new binding (during edit time).
-   */
-  public final void setNewInputObservable(ObservableInfo input,
-      DatabindingsProvider provider,
-      boolean useViewerSupport) throws Exception {
-    m_inputObservable = input;
-    // calculate element type
-    Class<?> elementType = null;
-    //
-    if (m_inputObservable instanceof DetailBeanObservableInfo) {
-      DetailBeanObservableInfo inputObservable = (DetailBeanObservableInfo) m_inputObservable;
-      elementType = inputObservable.getDetailPropertyType();
-    } else if (m_inputObservable instanceof ViewerObservableInfo) {
-      elementType = getViewerInutElementType(m_inputObservable, provider);
-    }
-    // sets providers
-    if (m_inputObservable instanceof DetailBeanObservableInfo) {
-      setDefaultProviders(true, elementType, useViewerSupport);
-    } else {
-      setDefaultProviders(
-          List.class.isAssignableFrom(m_inputObservable.getBindableProperty().getObjectType()),
-          elementType,
-          useViewerSupport);
-    }
-  }
+	/**
+	 * Sets providers for new binding (during edit time).
+	 */
+	public final void setNewInputObservable(ObservableInfo input,
+			DatabindingsProvider provider,
+			boolean useViewerSupport) throws Exception {
+		m_inputObservable = input;
+		// calculate element type
+		Class<?> elementType = null;
+		//
+		if (m_inputObservable instanceof DetailBeanObservableInfo) {
+			DetailBeanObservableInfo inputObservable = (DetailBeanObservableInfo) m_inputObservable;
+			elementType = inputObservable.getDetailPropertyType();
+		} else if (m_inputObservable instanceof ViewerObservableInfo) {
+			elementType = getViewerInutElementType(m_inputObservable, provider);
+		}
+		// sets providers
+		if (m_inputObservable instanceof DetailBeanObservableInfo) {
+			setDefaultProviders(true, elementType, useViewerSupport);
+		} else {
+			setDefaultProviders(
+					List.class.isAssignableFrom(m_inputObservable.getBindableProperty().getObjectType()),
+					elementType,
+					useViewerSupport);
+		}
+	}
 
-  /**
-   * Sets default providers for new binding.
-   */
-  public abstract void setDefaultProviders(boolean asList,
-      Class<?> elementType,
-      boolean useViewerSupport) throws Exception;
+	/**
+	 * Sets default providers for new binding.
+	 */
+	public abstract void setDefaultProviders(boolean asList,
+			Class<?> elementType,
+			boolean useViewerSupport) throws Exception;
 
-  /**
-   * @return {@link Class} of element into viewer input.
-   */
-  public Class<?> getElementType() {
-    if (m_inputObservable instanceof DetailBeanObservableInfo) {
-      DetailBeanObservableInfo inputObservable = (DetailBeanObservableInfo) m_inputObservable;
-      return inputObservable.getDetailPropertyType();
-    }
-    if (m_inputObservable instanceof CheckedElementsObservableInfo) {
-      CheckedElementsObservableInfo inputObservable =
-          (CheckedElementsObservableInfo) m_inputObservable;
-      return inputObservable.getElementType();
-    }
-    if (m_inputObservable instanceof CollectionObservableInfo) {
-      CollectionObservableInfo inputObservable = (CollectionObservableInfo) m_inputObservable;
-      return inputObservable.getElementType();
-    }
-    return null;
-  }
+	/**
+	 * @return {@link Class} of element into viewer input.
+	 */
+	public Class<?> getElementType() {
+		if (m_inputObservable instanceof DetailBeanObservableInfo) {
+			DetailBeanObservableInfo inputObservable = (DetailBeanObservableInfo) m_inputObservable;
+			return inputObservable.getDetailPropertyType();
+		}
+		if (m_inputObservable instanceof CheckedElementsObservableInfo) {
+			CheckedElementsObservableInfo inputObservable =
+					(CheckedElementsObservableInfo) m_inputObservable;
+			return inputObservable.getElementType();
+		}
+		if (m_inputObservable instanceof CollectionObservableInfo) {
+			CollectionObservableInfo inputObservable = (CollectionObservableInfo) m_inputObservable;
+			return inputObservable.getElementType();
+		}
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Definition
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final String getDefinitionSource(DatabindingsProvider provider) throws Exception {
-    return m_viewerBindable.getReference() + ".setInput";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Definition
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final String getDefinitionSource(DatabindingsProvider provider) throws Exception {
+		return m_viewerBindable.getReference() + ".setInput";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IBindingInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final IObserveInfo getTarget() {
-    return m_viewerBindable;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IBindingInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final IObserveInfo getTarget() {
+		return m_viewerBindable;
+	}
 
-  @Override
-  public final IObserveInfo getTargetProperty() {
-    return m_viewerBindableProperty;
-  }
+	@Override
+	public final IObserveInfo getTargetProperty() {
+		return m_viewerBindableProperty;
+	}
 
-  @Override
-  public final IObserveInfo getModel() {
-    return m_inputObservable.getBindableObject();
-  }
+	@Override
+	public final IObserveInfo getModel() {
+		return m_inputObservable.getBindableObject();
+	}
 
-  @Override
-  public final IObserveInfo getModelProperty() {
-    return m_inputObservable.getBindableProperty();
-  }
+	@Override
+	public final IObserveInfo getModelProperty() {
+		return m_inputObservable.getBindableProperty();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void createContentProviders(List<IUiContentProvider> providers,
-      IPageListener listener,
-      DatabindingsProvider provider) throws Exception {
-    if (m_isColumnViewer) {
-      List<WidgetBindableInfo> viewerColumns = Lists.newArrayList();
-      // prepare viewer columns
-      WidgetBindableInfo viewerControlBindable = (WidgetBindableInfo) m_viewerBindable.getParent();
-      for (IObserveInfo observe : viewerControlBindable.getChildren(ChildrenContext.ChildrenForMasterTable)) {
-        WidgetBindableInfo widgetBindable = (WidgetBindableInfo) observe;
-        // extract columns
-        if (widgetBindable.getJavaInfo() instanceof ItemInfo) {
-          for (IObserveInfo subObserve : widgetBindable.getChildren(ChildrenContext.ChildrenForMasterTable)) {
-            WidgetBindableInfo subWidgetBindable = (WidgetBindableInfo) subObserve;
-            // extract viewer columns
-            if (subWidgetBindable.getJavaInfo() instanceof ViewerColumnInfo) {
-              viewerColumns.add(subWidgetBindable);
-            }
-          }
-        }
-      }
-      //
-      if (!viewerColumns.isEmpty()) {
-        // prepare element type provider
-        VirtualEditingSupportInfo.IElementTypeProvider elementTypeProvider = null;
-        for (IUiContentProvider contentProvider : providers) {
-          // wrap Viewer editor
-          if (contentProvider instanceof InputElementUiContentProvider) {
-            final InputElementUiContentProvider inputElementContentProvider =
-                (InputElementUiContentProvider) contentProvider;
-            elementTypeProvider = new VirtualEditingSupportInfo.IElementTypeProvider() {
-              @Override
-              public Class<?> getElementType() throws Exception {
-                return inputElementContentProvider.getChoosenClass();
-              }
-            };
-            break;
-          }
-          // wrap TreeViewer editor
-          if (contentProvider instanceof TreeInputElementUiContentProvider) {
-            final TreeInputElementUiContentProvider inputElementContentProvider =
-                (TreeInputElementUiContentProvider) contentProvider;
-            elementTypeProvider = new VirtualEditingSupportInfo.IElementTypeProvider() {
-              @Override
-              public Class<?> getElementType() throws Exception {
-                return inputElementContentProvider.getCurrentElementType();
-              }
-            };
-            break;
-          }
-        }
-        // prepare configuration
-        ViewerColumnsConfiguration configuration =
-            new ViewerColumnsConfiguration(this,
-                elementTypeProvider,
-                viewerColumns,
-                m_editingSupports);
-        // prepare provider
-        providers.add(new ViewerColumnsUiContentProvider(configuration));
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void createContentProviders(List<IUiContentProvider> providers,
+			IPageListener listener,
+			DatabindingsProvider provider) throws Exception {
+		if (m_isColumnViewer) {
+			List<WidgetBindableInfo> viewerColumns = Lists.newArrayList();
+			// prepare viewer columns
+			WidgetBindableInfo viewerControlBindable = (WidgetBindableInfo) m_viewerBindable.getParent();
+			for (IObserveInfo observe : viewerControlBindable.getChildren(ChildrenContext.ChildrenForMasterTable)) {
+				WidgetBindableInfo widgetBindable = (WidgetBindableInfo) observe;
+				// extract columns
+				if (widgetBindable.getJavaInfo() instanceof ItemInfo) {
+					for (IObserveInfo subObserve : widgetBindable.getChildren(ChildrenContext.ChildrenForMasterTable)) {
+						WidgetBindableInfo subWidgetBindable = (WidgetBindableInfo) subObserve;
+						// extract viewer columns
+						if (subWidgetBindable.getJavaInfo() instanceof ViewerColumnInfo) {
+							viewerColumns.add(subWidgetBindable);
+						}
+					}
+				}
+			}
+			//
+			if (!viewerColumns.isEmpty()) {
+				// prepare element type provider
+				VirtualEditingSupportInfo.IElementTypeProvider elementTypeProvider = null;
+				for (IUiContentProvider contentProvider : providers) {
+					// wrap Viewer editor
+					if (contentProvider instanceof InputElementUiContentProvider) {
+						final InputElementUiContentProvider inputElementContentProvider =
+								(InputElementUiContentProvider) contentProvider;
+						elementTypeProvider = new VirtualEditingSupportInfo.IElementTypeProvider() {
+							@Override
+							public Class<?> getElementType() throws Exception {
+								return inputElementContentProvider.getChoosenClass();
+							}
+						};
+						break;
+					}
+					// wrap TreeViewer editor
+					if (contentProvider instanceof TreeInputElementUiContentProvider) {
+						final TreeInputElementUiContentProvider inputElementContentProvider =
+								(TreeInputElementUiContentProvider) contentProvider;
+						elementTypeProvider = new VirtualEditingSupportInfo.IElementTypeProvider() {
+							@Override
+							public Class<?> getElementType() throws Exception {
+								return inputElementContentProvider.getCurrentElementType();
+							}
+						};
+						break;
+					}
+				}
+				// prepare configuration
+				ViewerColumnsConfiguration configuration =
+						new ViewerColumnsConfiguration(this,
+								elementTypeProvider,
+								viewerColumns,
+								m_editingSupports);
+				// prepare provider
+				providers.add(new ViewerColumnsUiContentProvider(configuration));
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getPresentationText() throws Exception {
-    return m_viewerBindable.getPresentation().getTextForBinding()
-        + "."
-        + m_viewerBindableProperty.getPresentation().getTextForBinding();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getPresentationText() throws Exception {
+		return m_viewerBindable.getPresentation().getTextForBinding()
+				+ "."
+				+ m_viewerBindableProperty.getPresentation().getTextForBinding();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parser
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void postParse() throws Exception {
-    super.postParse();
-    Assert.isNotNull(m_inputObservable);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parser
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void postParse() throws Exception {
+		super.postParse();
+		Assert.isNotNull(m_inputObservable);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Generate source code association with this object and add to <code>lines</code>.
-   */
-  protected final void addSourceCode(DataBindingContextInfo context,
-      List<String> lines,
-      CodeGenerationSupport generationSupport,
-      ObservableCollectionContentProviderInfo contentProvider,
-      AbstractLabelProviderInfo labelProvider) throws Exception {
-    if (m_codeSupport == null) {
-      // prepare viewer reference
-      String viewerReference = m_viewerBindable.getReference();
-      // define content provider
-      contentProvider.addSourceCode(lines, generationSupport);
-      // add set label provider code
-      lines.add(viewerReference
-          + ".setLabelProvider("
-          + labelProvider.getSourceCode(lines, generationSupport)
-          + ");");
-      // add set content provider code
-      lines.add(viewerReference
-          + ".setContentProvider("
-          + contentProvider.getVariableIdentifier()
-          + ");");
-      lines.add("//");
-      // add input source code
-      generationSupport.addSourceCode(m_inputObservable, lines);
-      lines.add(viewerReference + ".setInput(" + m_inputObservable.getVariableIdentifier() + ");");
-    } else {
-      m_codeSupport.addSourceCode(lines, generationSupport);
-    }
-    // add editing support objects
-    if (!CollectionUtils.isEmpty(m_editingSupports)) {
-      for (EditingSupportInfo editingSupport : m_editingSupports) {
-        lines.add("//");
-        editingSupport.addSourceCode(context, lines, generationSupport);
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Generate source code association with this object and add to <code>lines</code>.
+	 */
+	protected final void addSourceCode(DataBindingContextInfo context,
+			List<String> lines,
+			CodeGenerationSupport generationSupport,
+			ObservableCollectionContentProviderInfo contentProvider,
+			AbstractLabelProviderInfo labelProvider) throws Exception {
+		if (m_codeSupport == null) {
+			// prepare viewer reference
+			String viewerReference = m_viewerBindable.getReference();
+			// define content provider
+			contentProvider.addSourceCode(lines, generationSupport);
+			// add set label provider code
+			lines.add(viewerReference
+					+ ".setLabelProvider("
+					+ labelProvider.getSourceCode(lines, generationSupport)
+					+ ");");
+			// add set content provider code
+			lines.add(viewerReference
+					+ ".setContentProvider("
+					+ contentProvider.getVariableIdentifier()
+					+ ");");
+			lines.add("//");
+			// add input source code
+			generationSupport.addSourceCode(m_inputObservable, lines);
+			lines.add(viewerReference + ".setInput(" + m_inputObservable.getVariableIdentifier() + ");");
+		} else {
+			m_codeSupport.addSourceCode(lines, generationSupport);
+		}
+		// add editing support objects
+		if (!CollectionUtils.isEmpty(m_editingSupports)) {
+			for (EditingSupportInfo editingSupport : m_editingSupports) {
+				lines.add("//");
+				editingSupport.addSourceCode(context, lines, generationSupport);
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Visiting
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected final void accept(AstObjectInfoVisitor visitor,
-      ObservableCollectionContentProviderInfo contentProvider,
-      AbstractLabelProviderInfo labelProvider) throws Exception {
-    super.accept(visitor);
-    contentProvider.accept(visitor);
-    labelProvider.accept(visitor);
-    m_inputObservable.accept(visitor);
-    if (m_codeSupport != null) {
-      m_codeSupport.accept(visitor);
-    }
-    if (!CollectionUtils.isEmpty(m_editingSupports)) {
-      for (EditingSupportInfo editingSupport : m_editingSupports) {
-        editingSupport.accept(visitor);
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Visiting
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected final void accept(AstObjectInfoVisitor visitor,
+			ObservableCollectionContentProviderInfo contentProvider,
+			AbstractLabelProviderInfo labelProvider) throws Exception {
+		super.accept(visitor);
+		contentProvider.accept(visitor);
+		labelProvider.accept(visitor);
+		m_inputObservable.accept(visitor);
+		if (m_codeSupport != null) {
+			m_codeSupport.accept(visitor);
+		}
+		if (!CollectionUtils.isEmpty(m_editingSupports)) {
+			for (EditingSupportInfo editingSupport : m_editingSupports) {
+				editingSupport.accept(visitor);
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Creation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Create {@link IBindingInfo} for <code>JFace</code> viewer input.
-   */
-  public static IBindingInfo createBinding(BindableInfo targetBindable,
-      BindableInfo targetBindableProperty,
-      BindableInfo modelBindable,
-      BindableInfo modelBindableProperty,
-      DatabindingsProvider provider) throws Exception {
-    // prepare observable factories
-    IObservableFactory targetFactory = targetBindableProperty.getObservableFactory();
-    IObservableFactory modelFactory = modelBindableProperty.getObservableFactory();
-    // check create over "target"
-    if (targetFactory.getType() == Type.Input) {
-      return createBinding(
-          targetBindable,
-          targetBindableProperty,
-          modelBindable,
-          modelBindableProperty,
-          modelFactory,
-          provider);
-    }
-    // create over "model"
-    return createBinding(
-        modelBindable,
-        modelBindableProperty,
-        targetBindable,
-        targetBindableProperty,
-        targetFactory,
-        provider);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Creation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Create {@link IBindingInfo} for <code>JFace</code> viewer input.
+	 */
+	public static IBindingInfo createBinding(BindableInfo targetBindable,
+			BindableInfo targetBindableProperty,
+			BindableInfo modelBindable,
+			BindableInfo modelBindableProperty,
+			DatabindingsProvider provider) throws Exception {
+		// prepare observable factories
+		IObservableFactory targetFactory = targetBindableProperty.getObservableFactory();
+		IObservableFactory modelFactory = modelBindableProperty.getObservableFactory();
+		// check create over "target"
+		if (targetFactory.getType() == Type.Input) {
+			return createBinding(
+					targetBindable,
+					targetBindableProperty,
+					modelBindable,
+					modelBindableProperty,
+					modelFactory,
+					provider);
+		}
+		// create over "model"
+		return createBinding(
+				modelBindable,
+				modelBindableProperty,
+				targetBindable,
+				targetBindableProperty,
+				targetFactory,
+				provider);
+	}
 
-  private static IBindingInfo createBinding(BindableInfo bindable,
-      BindableInfo bindableProperty,
-      BindableInfo inputBindable,
-      BindableInfo inputBindableProperty,
-      IObservableFactory inputFactory,
-      DatabindingsProvider provider) throws Exception {
-    // prepare viewer
-    WidgetBindableInfo viewerBindable = (WidgetBindableInfo) bindable;
-    // prepare property
-    WidgetPropertyBindableInfo viewerBindableProperty =
-        (WidgetPropertyBindableInfo) bindableProperty;
-    // create binding
-    Class<?> treeViewerClass =
-        viewerBindable.getClassLoader().loadClass("org.eclipse.jface.viewers.AbstractTreeViewer");
-    //
-    AbstractViewerInputBindingInfo binding =
-        treeViewerClass.isAssignableFrom(viewerBindable.getObjectType())
-            ? new TreeViewerInputBindingInfo(viewerBindable, viewerBindableProperty)
-            : new ViewerInputBindingInfo(viewerBindable, viewerBindableProperty);
-    // calculate type
-    Type type = inputFactory.getType();
-    switch (type) {
-      case Detail :
-      case List :
-        type = Type.OnlyList;
-        break;
-      case Set :
-        type = Type.OnlySet;
-        break;
-    }
-    //
-    boolean useViewerSupport =
-        Activator.getStore().getBoolean(IPreferenceConstants.USE_VIEWER_SUPPORT);
-    // sets default providers
-    binding.setNewInputObservable(
-        provider.createObservable(inputFactory, inputBindable, inputBindableProperty, type),
-        provider,
-        useViewerSupport);
-    return binding;
-  }
+	private static IBindingInfo createBinding(BindableInfo bindable,
+			BindableInfo bindableProperty,
+			BindableInfo inputBindable,
+			BindableInfo inputBindableProperty,
+			IObservableFactory inputFactory,
+			DatabindingsProvider provider) throws Exception {
+		// prepare viewer
+		WidgetBindableInfo viewerBindable = (WidgetBindableInfo) bindable;
+		// prepare property
+		WidgetPropertyBindableInfo viewerBindableProperty =
+				(WidgetPropertyBindableInfo) bindableProperty;
+		// create binding
+		Class<?> treeViewerClass =
+				viewerBindable.getClassLoader().loadClass("org.eclipse.jface.viewers.AbstractTreeViewer");
+		//
+		AbstractViewerInputBindingInfo binding =
+				treeViewerClass.isAssignableFrom(viewerBindable.getObjectType())
+				? new TreeViewerInputBindingInfo(viewerBindable, viewerBindableProperty)
+						: new ViewerInputBindingInfo(viewerBindable, viewerBindableProperty);
+		// calculate type
+		Type type = inputFactory.getType();
+		switch (type) {
+		case Detail :
+		case List :
+			type = Type.OnlyList;
+			break;
+		case Set :
+			type = Type.OnlySet;
+			break;
+		}
+		//
+		boolean useViewerSupport =
+				Activator.getStore().getBoolean(IPreferenceConstants.USE_VIEWER_SUPPORT);
+		// sets default providers
+		binding.setNewInputObservable(
+				provider.createObservable(inputFactory, inputBindable, inputBindableProperty, type),
+				provider,
+				useViewerSupport);
+		return binding;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return {@link Class} of element into given viewer input or <code>null</code> if its not set.
-   */
-  public static Class<?> getViewerInutElementType(ObservableInfo observable,
-      DatabindingsProvider provider) throws Exception {
-    if (observable.getBindableObject() instanceof WidgetBindableInfo) {
-      // prepare widget
-      WidgetBindableInfo widget = (WidgetBindableInfo) observable.getBindableObject();
-      // prepare input property
-      WidgetPropertyBindableInfo property = widget.resolvePropertyReference("setInput");
-      // find input binding
-      for (AbstractBindingInfo binding : provider.getBindings0()) {
-        if (binding.getTarget() == widget && binding.getTargetProperty() == property) {
-          AbstractViewerInputBindingInfo viewerBinding = (AbstractViewerInputBindingInfo) binding;
-          return viewerBinding.getElementType();
-        }
-      }
-    }
-    //
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return {@link Class} of element into given viewer input or <code>null</code> if its not set.
+	 */
+	public static Class<?> getViewerInutElementType(ObservableInfo observable,
+			DatabindingsProvider provider) throws Exception {
+		if (observable.getBindableObject() instanceof WidgetBindableInfo) {
+			// prepare widget
+			WidgetBindableInfo widget = (WidgetBindableInfo) observable.getBindableObject();
+			// prepare input property
+			WidgetPropertyBindableInfo property = widget.resolvePropertyReference("setInput");
+			// find input binding
+			for (AbstractBindingInfo binding : provider.getBindings0()) {
+				if (binding.getTarget() == widget && binding.getTargetProperty() == property) {
+					AbstractViewerInputBindingInfo viewerBinding = (AbstractViewerInputBindingInfo) binding;
+					return viewerBinding.getElementType();
+				}
+			}
+		}
+		//
+		return null;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/BeanFieldInputObservableInfo.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/BeanFieldInputObservableInfo.java
index 609b50d7b..635a9c45c 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/BeanFieldInputObservableInfo.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/BeanFieldInputObservableInfo.java
@@ -23,42 +23,42 @@
  * @coverage bindings.rcp.model.widgets
  */
 public class BeanFieldInputObservableInfo extends ObservableInfo {
-  private final BindableInfo m_object;
-  private final BindableInfo m_property;
+	private final BindableInfo m_object;
+	private final BindableInfo m_property;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public BeanFieldInputObservableInfo(BindableInfo object, BindableInfo property) {
-    m_object = object;
-    m_property = property;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public BeanFieldInputObservableInfo(BindableInfo object, BindableInfo property) {
+		m_object = object;
+		m_property = property;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ObservableInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public BindableInfo getBindableObject() {
-    return m_object;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ObservableInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public BindableInfo getBindableObject() {
+		return m_object;
+	}
 
-  @Override
-  public BindableInfo getBindableProperty() {
-    return m_property;
-  }
+	@Override
+	public BindableInfo getBindableProperty() {
+		return m_property;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Source code
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void addSourceCode(List<String> lines, CodeGenerationSupport generationSupport)
-      throws Exception {
-    setVariableIdentifier(m_object.getReference());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Source code
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void addSourceCode(List<String> lines, CodeGenerationSupport generationSupport)
+			throws Exception {
+		setVariableIdentifier(m_object.getReference());
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/BeansObservableListFactoryInfo.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/BeansObservableListFactoryInfo.java
index 71b62b955..168c8537e 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/BeansObservableListFactoryInfo.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/BeansObservableListFactoryInfo.java
@@ -16,12 +16,12 @@
  *
  */
 public class BeansObservableListFactoryInfo extends AbstractFactoryInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public BeansObservableListFactoryInfo() {
-    super("listFactory");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public BeansObservableListFactoryInfo() {
+		super("listFactory");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/BeansObservableSetFactoryInfo.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/BeansObservableSetFactoryInfo.java
index 10336d3a3..767183450 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/BeansObservableSetFactoryInfo.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/BeansObservableSetFactoryInfo.java
@@ -17,12 +17,12 @@
  * @coverage bindings.rcp.model.widgets
  */
 public class BeansObservableSetFactoryInfo extends AbstractFactoryInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public BeansObservableSetFactoryInfo() {
-    super("setFactory");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public BeansObservableSetFactoryInfo() {
+		super("setFactory");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/CellEditorControlPropertyCodeSupport.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/CellEditorControlPropertyCodeSupport.java
index 762b85cf1..aeb3ad739 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/CellEditorControlPropertyCodeSupport.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/CellEditorControlPropertyCodeSupport.java
@@ -32,41 +32,41 @@
  * @coverage bindings.rcp.model.widgets
  */
 public final class CellEditorControlPropertyCodeSupport extends ObservableCodeSupport {
-  private static final String VALUE_SIGNATURE =
-      "org.eclipse.core.databinding.property.value.IValueProperty.value(org.eclipse.core.databinding.property.value.IValueProperty)";
+	private static final String VALUE_SIGNATURE =
+			"org.eclipse.core.databinding.property.value.IValueProperty.value(org.eclipse.core.databinding.property.value.IValueProperty)";
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parser
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public AstObjectInfo parseExpression(AstEditor editor,
-      String signature,
-      MethodInvocation invocation,
-      Expression[] arguments,
-      IModelResolver resolver,
-      IDatabindingsProvider provider) throws Exception {
-    if (VALUE_SIGNATURE.equals(signature)) {
-      WidgetPropertiesCodeSupport detailCodeSupport =
-          (WidgetPropertiesCodeSupport) resolver.getModel(arguments[0]);
-      Assert.isNotNull(detailCodeSupport);
-      return new CellEditorValuePropertyCodeSupport(this, detailCodeSupport);
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parser
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public AstObjectInfo parseExpression(AstEditor editor,
+			String signature,
+			MethodInvocation invocation,
+			Expression[] arguments,
+			IModelResolver resolver,
+			IDatabindingsProvider provider) throws Exception {
+		if (VALUE_SIGNATURE.equals(signature)) {
+			WidgetPropertiesCodeSupport detailCodeSupport =
+					(WidgetPropertiesCodeSupport) resolver.getModel(arguments[0]);
+			Assert.isNotNull(detailCodeSupport);
+			return new CellEditorValuePropertyCodeSupport(this, detailCodeSupport);
+		}
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void addSourceCode(ObservableInfo observable,
-      List<String> lines,
-      CodeGenerationSupport generationSupport) throws Exception {
-    lines.add("org.eclipse.jface.databinding.viewers.CellEditorProperties "
-        + getVariableIdentifier()
-        + " = org.eclipse.jface.databinding.viewers.CellEditorProperties.control();");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void addSourceCode(ObservableInfo observable,
+			List<String> lines,
+			CodeGenerationSupport generationSupport) throws Exception {
+		lines.add("org.eclipse.jface.databinding.viewers.CellEditorProperties "
+				+ getVariableIdentifier()
+				+ " = org.eclipse.jface.databinding.viewers.CellEditorProperties.control();");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/CellEditorInfo.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/CellEditorInfo.java
index fe7e5ed62..02cebca92 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/CellEditorInfo.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/CellEditorInfo.java
@@ -29,84 +29,84 @@
  * @coverage bindings.rcp.model.widgets
  */
 public class CellEditorInfo extends SimpleClassObjectInfo {
-  private AbstractViewerInputBindingInfo m_viewerBinding;
+	private AbstractViewerInputBindingInfo m_viewerBinding;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CellEditorInfo(AstEditor editor, ClassInstanceCreation creation, String className) {
-    if (creation != null && !creation.arguments().isEmpty()) {
-      String source = editor.getSource(creation);
-      int index = source.indexOf('(');
-      className += source.substring(index);
-    }
-    setClassName(className);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CellEditorInfo(AstEditor editor, ClassInstanceCreation creation, String className) {
+		if (creation != null && !creation.arguments().isEmpty()) {
+			String source = editor.getSource(creation);
+			int index = source.indexOf('(');
+			className += source.substring(index);
+		}
+		setClassName(className);
+	}
 
-  public CellEditorInfo(AbstractViewerInputBindingInfo viewerBinding, String className)
-      throws Exception {
-    m_viewerBinding = viewerBinding;
-    setClassName0(className);
-  }
+	public CellEditorInfo(AbstractViewerInputBindingInfo viewerBinding, String className)
+			throws Exception {
+		m_viewerBinding = viewerBinding;
+		setClassName0(className);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void setViewerBinding(AbstractViewerInputBindingInfo viewerBinding) {
-    m_viewerBinding = viewerBinding;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void setViewerBinding(AbstractViewerInputBindingInfo viewerBinding) {
+		m_viewerBinding = viewerBinding;
+	}
 
-  public void setClassName0(String className) throws Exception {
-    if (className.indexOf('(') == -1) {
-      // prepare viewer control accessor
-      String viewerControlAccessCode = m_viewerBinding.getViewer().getReference();
-      if (m_viewerBinding instanceof ViewerInputBindingInfo) {
-        viewerControlAccessCode += ".getTable()";
-      } else {
-        viewerControlAccessCode += ".getTree()";
-      }
-      // find constructor with SWT parent
-      ClassLoader classLoader = JavaInfoUtils.getClassLoader(EditorState.getActiveJavaInfo());
-      Class<?> cellClass = CoreUtils.load(classLoader, className);
-      if (ReflectionUtils.getConstructorBySignature(
-          cellClass,
-          "<init>(org.eclipse.swt.widgets.Composite)") != null) {
-        className += "(" + viewerControlAccessCode + ")";
-      } else {
-        Class<?> comboCellClass =
-            classLoader.loadClass("org.eclipse.jface.viewers.ComboBoxCellEditor");
-        if (comboCellClass.isAssignableFrom(cellClass)
-            && ReflectionUtils.getConstructorBySignature(
-                cellClass,
-                "<init>(org.eclipse.swt.widgets.Composite,java.lang.String[])") != null) {
-          className += "(" + viewerControlAccessCode + ", new String[0])";
-        }
-      }
-    }
-    setClassName(className);
-  }
+	public void setClassName0(String className) throws Exception {
+		if (className.indexOf('(') == -1) {
+			// prepare viewer control accessor
+			String viewerControlAccessCode = m_viewerBinding.getViewer().getReference();
+			if (m_viewerBinding instanceof ViewerInputBindingInfo) {
+				viewerControlAccessCode += ".getTable()";
+			} else {
+				viewerControlAccessCode += ".getTree()";
+			}
+			// find constructor with SWT parent
+			ClassLoader classLoader = JavaInfoUtils.getClassLoader(EditorState.getActiveJavaInfo());
+			Class<?> cellClass = CoreUtils.load(classLoader, className);
+			if (ReflectionUtils.getConstructorBySignature(
+					cellClass,
+					"<init>(org.eclipse.swt.widgets.Composite)") != null) {
+				className += "(" + viewerControlAccessCode + ")";
+			} else {
+				Class<?> comboCellClass =
+						classLoader.loadClass("org.eclipse.jface.viewers.ComboBoxCellEditor");
+				if (comboCellClass.isAssignableFrom(cellClass)
+						&& ReflectionUtils.getConstructorBySignature(
+								cellClass,
+								"<init>(org.eclipse.swt.widgets.Composite,java.lang.String[])") != null) {
+					className += "(" + viewerControlAccessCode + ", new String[0])";
+				}
+			}
+		}
+		setClassName(className);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Source code
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void addSourceCode(List<String> lines, CodeGenerationSupport generationSupport)
-      throws Exception {
-    if (getVariableIdentifier() == null) {
-      setVariableIdentifier(generationSupport.generateLocalName("cellEditor"));
-    }
-    String defaultCostructor = m_className.indexOf('(') == -1 ? "()" : "";
-    lines.add("org.eclipse.jface.viewers.CellEditor "
-        + getVariableIdentifier()
-        + " = new "
-        + m_className
-        + defaultCostructor
-        + ";");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Source code
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void addSourceCode(List<String> lines, CodeGenerationSupport generationSupport)
+			throws Exception {
+		if (getVariableIdentifier() == null) {
+			setVariableIdentifier(generationSupport.generateLocalName("cellEditor"));
+		}
+		String defaultCostructor = m_className.indexOf('(') == -1 ? "()" : "";
+		lines.add("org.eclipse.jface.viewers.CellEditor "
+				+ getVariableIdentifier()
+				+ " = new "
+				+ m_className
+				+ defaultCostructor
+				+ ";");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/CellEditorValuePropertyCodeSupport.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/CellEditorValuePropertyCodeSupport.java
index a03c9852d..2c083f942 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/CellEditorValuePropertyCodeSupport.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/CellEditorValuePropertyCodeSupport.java
@@ -31,110 +31,110 @@
  * @coverage bindings.rcp.model.widgets
  */
 public final class CellEditorValuePropertyCodeSupport extends ObservableCodeSupport {
-  private CellEditorControlPropertyCodeSupport m_master;
-  private WidgetPropertiesCodeSupport m_detail;
+	private CellEditorControlPropertyCodeSupport m_master;
+	private WidgetPropertiesCodeSupport m_detail;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CellEditorValuePropertyCodeSupport(CellEditorControlPropertyCodeSupport master,
-      WidgetPropertiesCodeSupport detail) {
-    m_master = master;
-    m_detail = detail;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CellEditorValuePropertyCodeSupport(CellEditorControlPropertyCodeSupport master,
+			WidgetPropertiesCodeSupport detail) {
+		m_master = master;
+		m_detail = detail;
+	}
 
-  public CellEditorValuePropertyCodeSupport(ValuePropertyCodeSupport value) {
-    this(value.getParserPropertyReference());
-  }
+	public CellEditorValuePropertyCodeSupport(ValuePropertyCodeSupport value) {
+		this(value.getParserPropertyReference());
+	}
 
-  public CellEditorValuePropertyCodeSupport(String parsePropertyReference) {
-    setParsePropertyReference(parsePropertyReference);
-  }
+	public CellEditorValuePropertyCodeSupport(String parsePropertyReference) {
+		setParsePropertyReference(parsePropertyReference);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public String getParsePropertyReference() {
-    return (m_master == null ? "\"" : "\"control.")
-        + (m_detail == null ? "null" : getParsePropertyReference(m_detail.getPropertyReference()))
-        + "\"";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public String getParsePropertyReference() {
+		return (m_master == null ? "\"" : "\"control.")
+				+ (m_detail == null ? "null" : getParsePropertyReference(m_detail.getPropertyReference()))
+				+ "\"";
+	}
 
-  public void setParsePropertyReference(String parsePropertyReference) {
-    if (getParsePropertyReference().equals(parsePropertyReference)) {
-      return;
-    }
-    if (parsePropertyReference.startsWith("\"control.")) {
-      if (m_master == null) {
-        m_master = new CellEditorControlPropertyCodeSupport();
-      }
-      String propertyReference =
-          getParsePropertyReference(StringUtils.substringBetween(parsePropertyReference, ".", "\""));
-      m_detail = createDetail(propertyReference);
-    } else {
-      m_master = null;
-      String propertyReference =
-          getParsePropertyReference(StringUtils.substringBetween(parsePropertyReference, "\"", "\""));
-      m_detail = createDetail(propertyReference);
-    }
-  }
+	public void setParsePropertyReference(String parsePropertyReference) {
+		if (getParsePropertyReference().equals(parsePropertyReference)) {
+			return;
+		}
+		if (parsePropertyReference.startsWith("\"control.")) {
+			if (m_master == null) {
+				m_master = new CellEditorControlPropertyCodeSupport();
+			}
+			String propertyReference =
+					getParsePropertyReference(StringUtils.substringBetween(parsePropertyReference, ".", "\""));
+			m_detail = createDetail(propertyReference);
+		} else {
+			m_master = null;
+			String propertyReference =
+					getParsePropertyReference(StringUtils.substringBetween(parsePropertyReference, "\"", "\""));
+			m_detail = createDetail(propertyReference);
+		}
+	}
 
-  private WidgetPropertiesCodeSupport createDetail(String propertyReference) {
-    return "observeText".equals(propertyReference)
-        ? new WidgetPropertyTextCodeSupport(new int[]{SWT.Modify})
-        : new WidgetPropertiesCodeSupport(propertyReference);
-  }
+	private WidgetPropertiesCodeSupport createDetail(String propertyReference) {
+		return "observeText".equals(propertyReference)
+				? new WidgetPropertyTextCodeSupport(new int[]{SWT.Modify})
+						: new WidgetPropertiesCodeSupport(propertyReference);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void addSourceCode(ObservableInfo observable,
-      List<String> lines,
-      CodeGenerationSupport generationSupport) throws Exception {
-    // prepare variable
-    if (getVariableIdentifier() == null) {
-      setVariableIdentifier(generationSupport.generateLocalName("cellEditorProperty"));
-    }
-    if (m_master == null) {
-      // simple property
-      lines.add("org.eclipse.core.databinding.property.value.IValueProperty "
-          + getVariableIdentifier()
-          + " = org.eclipse.core.databinding.beans.typed.BeanProperties.value("
-          + getParsePropertyReference()
-          + ");");
-    } else {
-      // control.YYY property
-      String sourceCode;
-      if (m_master.getVariableIdentifier() == null) {
-        sourceCode = "org.eclipse.jface.databinding.viewers.CellEditorProperties.control()";
-      } else {
-        m_master.addSourceCode(null, lines, generationSupport);
-        sourceCode = m_master.getVariableIdentifier();
-      }
-      lines.add("org.eclipse.core.databinding.property.value.IValueProperty "
-          + getVariableIdentifier()
-          + " = "
-          + sourceCode
-          + ".value("
-          + m_detail.getSourceCode()
-          + ");");
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void addSourceCode(ObservableInfo observable,
+			List<String> lines,
+			CodeGenerationSupport generationSupport) throws Exception {
+		// prepare variable
+		if (getVariableIdentifier() == null) {
+			setVariableIdentifier(generationSupport.generateLocalName("cellEditorProperty"));
+		}
+		if (m_master == null) {
+			// simple property
+			lines.add("org.eclipse.core.databinding.property.value.IValueProperty "
+					+ getVariableIdentifier()
+					+ " = org.eclipse.core.databinding.beans.typed.BeanProperties.value("
+					+ getParsePropertyReference()
+					+ ");");
+		} else {
+			// control.YYY property
+			String sourceCode;
+			if (m_master.getVariableIdentifier() == null) {
+				sourceCode = "org.eclipse.jface.databinding.viewers.CellEditorProperties.control()";
+			} else {
+				m_master.addSourceCode(null, lines, generationSupport);
+				sourceCode = m_master.getVariableIdentifier();
+			}
+			lines.add("org.eclipse.core.databinding.property.value.IValueProperty "
+					+ getVariableIdentifier()
+					+ " = "
+					+ sourceCode
+					+ ".value("
+					+ m_detail.getSourceCode()
+					+ ");");
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utilities
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static String getParsePropertyReference(String reference) {
-    String parseReference = SwtProperties.SWT_OBSERVABLES_TO_WIDGET_PROPERTIES.get(reference);
-    return parseReference == null ? reference : parseReference;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utilities
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static String getParsePropertyReference(String reference) {
+		String parseReference = SwtProperties.SWT_OBSERVABLES_TO_WIDGET_PROPERTIES.get(reference);
+		return parseReference == null ? reference : parseReference;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/CodeSupport.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/CodeSupport.java
index ce0241ab6..ece9b0e09 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/CodeSupport.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/CodeSupport.java
@@ -22,15 +22,15 @@
  * @coverage bindings.rcp.model.widgets
  */
 public abstract class CodeSupport extends AstObjectInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Generate source code association with this object and add to <code>lines</code>.
-   */
-  @Override
-  public abstract void addSourceCode(List<String> lines, CodeGenerationSupport generationSupport)
-      throws Exception;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Generate source code association with this object and add to <code>lines</code>.
+	 */
+	@Override
+	public abstract void addSourceCode(List<String> lines, CodeGenerationSupport generationSupport)
+			throws Exception;
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/EditingSupportInfo.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/EditingSupportInfo.java
index 6d74f5aab..05cc20248 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/EditingSupportInfo.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/EditingSupportInfo.java
@@ -27,121 +27,121 @@
  * @author lobas_av
  */
 public final class EditingSupportInfo extends AstObjectInfo {
-  private WidgetBindableInfo m_viewerColumn;
-  private final AbstractViewerInputBindingInfo m_viewerBinding;
-  private final CellEditorInfo m_cellEditorInfo;
-  private final CellEditorValuePropertyCodeSupport m_cellEditorProperty;
-  private final ValuePropertyCodeSupport m_elementProperty;
+	private WidgetBindableInfo m_viewerColumn;
+	private final AbstractViewerInputBindingInfo m_viewerBinding;
+	private final CellEditorInfo m_cellEditorInfo;
+	private final CellEditorValuePropertyCodeSupport m_cellEditorProperty;
+	private final ValuePropertyCodeSupport m_elementProperty;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public EditingSupportInfo(AbstractViewerInputBindingInfo viewerBinding,
-      CellEditorInfo cellEditorInfo,
-      CellEditorValuePropertyCodeSupport cellEditorProperty,
-      ValuePropertyCodeSupport elementProperty) {
-    m_viewerBinding = viewerBinding;
-    m_cellEditorInfo = cellEditorInfo;
-    m_cellEditorProperty = cellEditorProperty;
-    m_elementProperty = elementProperty;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public EditingSupportInfo(AbstractViewerInputBindingInfo viewerBinding,
+			CellEditorInfo cellEditorInfo,
+			CellEditorValuePropertyCodeSupport cellEditorProperty,
+			ValuePropertyCodeSupport elementProperty) {
+		m_viewerBinding = viewerBinding;
+		m_cellEditorInfo = cellEditorInfo;
+		m_cellEditorProperty = cellEditorProperty;
+		m_elementProperty = elementProperty;
+	}
 
-  public EditingSupportInfo(AbstractViewerInputBindingInfo viewerBinding,
-      WidgetBindableInfo viewerColumn,
-      String cellEditorClassName,
-      String cellEditorProperty,
-      String elementProperty) throws Exception {
-    m_viewerBinding = viewerBinding;
-    m_viewerColumn = viewerColumn;
-    m_cellEditorInfo = new CellEditorInfo(m_viewerBinding, cellEditorClassName);
-    m_cellEditorProperty = new CellEditorValuePropertyCodeSupport(cellEditorProperty);
-    m_elementProperty = new ValuePropertyCodeSupport();
-    m_elementProperty.setParserPropertyReference(elementProperty);
-  }
+	public EditingSupportInfo(AbstractViewerInputBindingInfo viewerBinding,
+			WidgetBindableInfo viewerColumn,
+			String cellEditorClassName,
+			String cellEditorProperty,
+			String elementProperty) throws Exception {
+		m_viewerBinding = viewerBinding;
+		m_viewerColumn = viewerColumn;
+		m_cellEditorInfo = new CellEditorInfo(m_viewerBinding, cellEditorClassName);
+		m_cellEditorProperty = new CellEditorValuePropertyCodeSupport(cellEditorProperty);
+		m_elementProperty = new ValuePropertyCodeSupport();
+		m_elementProperty.setParserPropertyReference(elementProperty);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public WidgetBindableInfo getViewerColumn() {
-    return m_viewerColumn;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public WidgetBindableInfo getViewerColumn() {
+		return m_viewerColumn;
+	}
 
-  public void setViewerColumn(WidgetBindableInfo viewerColumn) {
-    m_viewerColumn = viewerColumn;
-    m_viewerBinding.getEditingSupports().add(this);
-    m_cellEditorInfo.setViewerBinding(m_viewerBinding);
-  }
+	public void setViewerColumn(WidgetBindableInfo viewerColumn) {
+		m_viewerColumn = viewerColumn;
+		m_viewerBinding.getEditingSupports().add(this);
+		m_cellEditorInfo.setViewerBinding(m_viewerBinding);
+	}
 
-  public AbstractViewerInputBindingInfo getViewerBinding() {
-    return m_viewerBinding;
-  }
+	public AbstractViewerInputBindingInfo getViewerBinding() {
+		return m_viewerBinding;
+	}
 
-  public CellEditorInfo getCellEditorInfo() {
-    return m_cellEditorInfo;
-  }
+	public CellEditorInfo getCellEditorInfo() {
+		return m_cellEditorInfo;
+	}
 
-  public CellEditorValuePropertyCodeSupport getCellEditorProperty() {
-    return m_cellEditorProperty;
-  }
+	public CellEditorValuePropertyCodeSupport getCellEditorProperty() {
+		return m_cellEditorProperty;
+	}
 
-  public ValuePropertyCodeSupport getElementProperty() {
-    return m_elementProperty;
-  }
+	public ValuePropertyCodeSupport getElementProperty() {
+		return m_elementProperty;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Visiting
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void accept(AstObjectInfoVisitor visitor) throws Exception {
-    super.accept(visitor);
-    m_cellEditorInfo.accept(visitor);
-    m_cellEditorProperty.accept(visitor);
-    m_elementProperty.accept(visitor);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Visiting
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void accept(AstObjectInfoVisitor visitor) throws Exception {
+		super.accept(visitor);
+		m_cellEditorInfo.accept(visitor);
+		m_cellEditorProperty.accept(visitor);
+		m_elementProperty.accept(visitor);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void addSourceCode(DataBindingContextInfo context,
-      List<String> lines,
-      CodeGenerationSupport generationSupport) throws Exception {
-    m_cellEditorInfo.addSourceCode(lines, generationSupport);
-    m_cellEditorProperty.addSourceCode(null, lines, generationSupport);
-    m_elementProperty.addSourceCode(null, lines, generationSupport);
-    //
-    String sourceCode =
-        "org.eclipse.jface.databinding.viewers.ObservableValueEditingSupport.create("
-            + m_viewerBinding.getViewer().getReference()
-            + ", "
-            + context.getVariableIdentifier()
-            + ", "
-            + m_cellEditorInfo.getVariableIdentifier()
-            + ", "
-            + m_cellEditorProperty.getVariableIdentifier()
-            + ", "
-            + m_elementProperty.getVariableIdentifier()
-            + ")";
-    //
-    if (getVariableIdentifier() == null) {
-      lines.add(m_viewerColumn.getReference() + ".setEditingSupport(" + sourceCode + ");");
-    } else {
-      lines.add("org.eclipse.jface.viewers.EditingSupport "
-          + getVariableIdentifier()
-          + " = "
-          + sourceCode
-          + ";");
-      lines.add(m_viewerColumn.getReference()
-          + ".setEditingSupport("
-          + getVariableIdentifier()
-          + "));");
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void addSourceCode(DataBindingContextInfo context,
+			List<String> lines,
+			CodeGenerationSupport generationSupport) throws Exception {
+		m_cellEditorInfo.addSourceCode(lines, generationSupport);
+		m_cellEditorProperty.addSourceCode(null, lines, generationSupport);
+		m_elementProperty.addSourceCode(null, lines, generationSupport);
+		//
+		String sourceCode =
+				"org.eclipse.jface.databinding.viewers.ObservableValueEditingSupport.create("
+						+ m_viewerBinding.getViewer().getReference()
+						+ ", "
+						+ context.getVariableIdentifier()
+						+ ", "
+						+ m_cellEditorInfo.getVariableIdentifier()
+						+ ", "
+						+ m_cellEditorProperty.getVariableIdentifier()
+						+ ", "
+						+ m_elementProperty.getVariableIdentifier()
+						+ ")";
+		//
+		if (getVariableIdentifier() == null) {
+			lines.add(m_viewerColumn.getReference() + ".setEditingSupport(" + sourceCode + ");");
+		} else {
+			lines.add("org.eclipse.jface.viewers.EditingSupport "
+					+ getVariableIdentifier()
+					+ " = "
+					+ sourceCode
+					+ ";");
+			lines.add(m_viewerColumn.getReference()
+					+ ".setEditingSupport("
+					+ getVariableIdentifier()
+					+ "));");
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/KnownElementsObservableInfo.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/KnownElementsObservableInfo.java
index f5042d6d4..fea7156fa 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/KnownElementsObservableInfo.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/KnownElementsObservableInfo.java
@@ -24,64 +24,64 @@
  * @coverage bindings.rcp.model.widgets
  */
 public final class KnownElementsObservableInfo extends ObservableInfo implements IMasterDetailProvider {
-  private final AstObjectInfo m_parent;
+	private final AstObjectInfo m_parent;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public KnownElementsObservableInfo(AstObjectInfo parent) {
-    m_parent = parent;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public KnownElementsObservableInfo(AstObjectInfo parent) {
+		m_parent = parent;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return {@link AstObjectInfo} for content provider.
-   */
-  public AstObjectInfo getParent() {
-    return m_parent;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return {@link AstObjectInfo} for content provider.
+	 */
+	public AstObjectInfo getParent() {
+		return m_parent;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ObservableInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public BindableInfo getBindableObject() {
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ObservableInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public BindableInfo getBindableObject() {
+		return null;
+	}
 
-  @Override
-  public BindableInfo getBindableProperty() {
-    return null;
-  }
+	@Override
+	public BindableInfo getBindableProperty() {
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return access source code.
-   */
-  public String getSourceCode() throws Exception {
-    return m_parent.getVariableIdentifier() + ".getKnownElements()";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return access source code.
+	 */
+	public String getSourceCode() throws Exception {
+		return m_parent.getVariableIdentifier() + ".getKnownElements()";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IMasterDetailProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IMasterDetailProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
 
-  @Override
-  public ObservableInfo getMasterObservable() throws Exception {
-    return this;
-  }
+	@Override
+	public ObservableInfo getMasterObservable() throws Exception {
+		return this;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/LabelProviderInfo.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/LabelProviderInfo.java
index 038f7f1a4..2fb8495e1 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/LabelProviderInfo.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/LabelProviderInfo.java
@@ -26,54 +26,54 @@
  * @coverage bindings.rcp.model.widgets
  */
 public class LabelProviderInfo extends AbstractLabelProviderInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public LabelProviderInfo(String className) {
-    super(className);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public LabelProviderInfo(String className) {
+		super(className);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Create {@link IUiContentProvider} content providers for edit this model.
-   */
-  @Override
-  public final void createContentProviders(List<IUiContentProvider> providers,
-      DatabindingsProvider provider,
-      boolean useClear) {
-    ChooseClassConfiguration configuration = new ChooseClassConfiguration();
-    configuration.setDialogFieldLabel(Messages.LabelProviderInfo_label);
-    configure(configuration, useClear);
-    configuration.setEmptyClassErrorMessage(Messages.LabelProviderInfo_errorMessage);
-    configuration.setErrorMessagePrefix(Messages.LabelProviderInfo_errorMessagePrefix);
-    providers.add(new SimpleClassUiContentProvider(configuration, this));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Create {@link IUiContentProvider} content providers for edit this model.
+	 */
+	@Override
+	public final void createContentProviders(List<IUiContentProvider> providers,
+			DatabindingsProvider provider,
+			boolean useClear) {
+		ChooseClassConfiguration configuration = new ChooseClassConfiguration();
+		configuration.setDialogFieldLabel(Messages.LabelProviderInfo_label);
+		configure(configuration, useClear);
+		configuration.setEmptyClassErrorMessage(Messages.LabelProviderInfo_errorMessage);
+		configuration.setErrorMessagePrefix(Messages.LabelProviderInfo_errorMessagePrefix);
+		providers.add(new SimpleClassUiContentProvider(configuration, this));
+	}
 
-  /**
-   * Create configuration for edit this label provider.
-   */
-  protected void configure(ChooseClassConfiguration configuration, boolean useClear) {
-    configuration.setValueScope("org.eclipse.jface.viewers.IBaseLabelProvider");
-    configuration.setBaseClassName("org.eclipse.jface.viewers.IBaseLabelProvider");
-    configuration.setDefaultValues(new String[]{
-        "org.eclipse.jface.databinding.viewers.ObservableMapLabelProvider",
-        "org.eclipse.jface.databinding.viewers.ObservableMapCellLabelProvider"});
-  }
+	/**
+	 * Create configuration for edit this label provider.
+	 */
+	protected void configure(ChooseClassConfiguration configuration, boolean useClear) {
+		configuration.setValueScope("org.eclipse.jface.viewers.IBaseLabelProvider");
+		configuration.setBaseClassName("org.eclipse.jface.viewers.IBaseLabelProvider");
+		configuration.setDefaultValues(new String[]{
+				"org.eclipse.jface.databinding.viewers.ObservableMapLabelProvider",
+		"org.eclipse.jface.databinding.viewers.ObservableMapCellLabelProvider"});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getSourceCode(List<String> lines, CodeGenerationSupport generationSupport)
-      throws Exception {
-    return "new " + m_className + "()";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getSourceCode(List<String> lines, CodeGenerationSupport generationSupport)
+			throws Exception {
+		return "new " + m_className + "()";
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/ObservableCollectionContentProviderInfo.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/ObservableCollectionContentProviderInfo.java
index 3e143f82c..07d44d2d4 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/ObservableCollectionContentProviderInfo.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/ObservableCollectionContentProviderInfo.java
@@ -26,30 +26,30 @@
  * @coverage bindings.rcp.model.widgets
  */
 public abstract class ObservableCollectionContentProviderInfo extends SimpleClassObjectInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ObservableCollectionContentProviderInfo(String className) {
-    super(className);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ObservableCollectionContentProviderInfo(String className) {
+		super(className);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parser
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final AstObjectInfo parseExpression(AstEditor editor,
-      String signature,
-      MethodInvocation invocation,
-      Expression[] arguments,
-      IModelResolver resolver,
-      IDatabindingsProvider provider) throws Exception {
-    if ("getKnownElements".equals(invocation.getName().getIdentifier())) {
-      return new KnownElementsObservableInfo(this);
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parser
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final AstObjectInfo parseExpression(AstEditor editor,
+			String signature,
+			MethodInvocation invocation,
+			Expression[] arguments,
+			IModelResolver resolver,
+			IDatabindingsProvider provider) throws Exception {
+		if ("getKnownElements".equals(invocation.getName().getIdentifier())) {
+			return new KnownElementsObservableInfo(this);
+		}
+		return null;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/ObservableCollectionTreeContentProviderInfo.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/ObservableCollectionTreeContentProviderInfo.java
index 88e75bd64..6608f2918 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/ObservableCollectionTreeContentProviderInfo.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/ObservableCollectionTreeContentProviderInfo.java
@@ -31,115 +31,115 @@
  * @coverage bindings.rcp.model.widgets
  */
 public abstract class ObservableCollectionTreeContentProviderInfo
-    extends
-      ObservableCollectionContentProviderInfo {
-  protected ObservableFactoryInfo m_factoryInfo;
-  protected TreeStructureAdvisorInfo m_advisorInfo;
+extends
+ObservableCollectionContentProviderInfo {
+	protected ObservableFactoryInfo m_factoryInfo;
+	protected TreeStructureAdvisorInfo m_advisorInfo;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ObservableCollectionTreeContentProviderInfo(String className,
-      ObservableFactoryInfo factoryInfo,
-      TreeStructureAdvisorInfo advisorInfo) {
-    super(className);
-    m_factoryInfo = factoryInfo;
-    m_advisorInfo = advisorInfo;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ObservableCollectionTreeContentProviderInfo(String className,
+			ObservableFactoryInfo factoryInfo,
+			TreeStructureAdvisorInfo advisorInfo) {
+		super(className);
+		m_factoryInfo = factoryInfo;
+		m_advisorInfo = advisorInfo;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public final ObservableFactoryInfo getFactoryInfo() {
-    return m_factoryInfo;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public final ObservableFactoryInfo getFactoryInfo() {
+		return m_factoryInfo;
+	}
 
-  public final void setFactoryInfo(ObservableFactoryInfo factoryInfo) {
-    m_factoryInfo = factoryInfo;
-  }
+	public final void setFactoryInfo(ObservableFactoryInfo factoryInfo) {
+		m_factoryInfo = factoryInfo;
+	}
 
-  public final TreeStructureAdvisorInfo getAdvisorInfo() {
-    return m_advisorInfo;
-  }
+	public final TreeStructureAdvisorInfo getAdvisorInfo() {
+		return m_advisorInfo;
+	}
 
-  public final void setAdvisorInfo(TreeStructureAdvisorInfo advisorInfo) {
-    m_advisorInfo = advisorInfo;
-  }
+	public final void setAdvisorInfo(TreeStructureAdvisorInfo advisorInfo) {
+		m_advisorInfo = advisorInfo;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Create {@link IUiContentProvider} content providers for edit this model.
-   */
-  public final void createContentProviders(List<IUiContentProvider> providers,
-      DatabindingsProvider provider,
-      boolean useClear) {
-    ChooseClassConfiguration configuration = new ChooseClassConfiguration();
-    configuration.setDialogFieldLabel(Messages.ObservableCollectionTreeContentProviderInfo_chooseLabel);
-    configure(configuration, useClear);
-    configuration.setConstructorParameters(new Class[]{
-        IObservableFactory.class,
-        TreeStructureAdvisor.class});
-    configuration.setEmptyClassErrorMessage(Messages.ObservableCollectionTreeContentProviderInfo_chooseEmptyMessage);
-    configuration.setErrorMessagePrefix(Messages.ObservableCollectionTreeContentProviderInfo_chooseMessagePrefix);
-    providers.add(new SimpleClassUiContentProvider(configuration, this));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Create {@link IUiContentProvider} content providers for edit this model.
+	 */
+	public final void createContentProviders(List<IUiContentProvider> providers,
+			DatabindingsProvider provider,
+			boolean useClear) {
+		ChooseClassConfiguration configuration = new ChooseClassConfiguration();
+		configuration.setDialogFieldLabel(Messages.ObservableCollectionTreeContentProviderInfo_chooseLabel);
+		configure(configuration, useClear);
+		configuration.setConstructorParameters(new Class[]{
+				IObservableFactory.class,
+				TreeStructureAdvisor.class});
+		configuration.setEmptyClassErrorMessage(Messages.ObservableCollectionTreeContentProviderInfo_chooseEmptyMessage);
+		configuration.setErrorMessagePrefix(Messages.ObservableCollectionTreeContentProviderInfo_chooseMessagePrefix);
+		providers.add(new SimpleClassUiContentProvider(configuration, this));
+	}
 
-  /**
-   * Create configuration for edit this model.
-   */
-  protected abstract void configure(ChooseClassConfiguration configuration, boolean useClear);
+	/**
+	 * Create configuration for edit this model.
+	 */
+	protected abstract void configure(ChooseClassConfiguration configuration, boolean useClear);
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final String getPresentationText() throws Exception {
-    String text = super.getPresentationText();
-    if (m_advisorInfo instanceof TreeBeanAdvisorInfo) {
-      text += "[" + m_advisorInfo.getPresentationText() + "]";
-    }
-    return text;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final String getPresentationText() throws Exception {
+		String text = super.getPresentationText();
+		if (m_advisorInfo instanceof TreeBeanAdvisorInfo) {
+			text += "[" + m_advisorInfo.getPresentationText() + "]";
+		}
+		return text;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void addSourceCode(List<String> lines, CodeGenerationSupport generationSupport)
-      throws Exception {
-    // prepare variable
-    if (getVariableIdentifier() == null) {
-      setVariableIdentifier(generationSupport.generateLocalName("treeContentProvider"));
-    }
-    // add factory code
-    m_factoryInfo.addSourceCode(lines, generationSupport);
-    // add advisor code
-    m_advisorInfo.addSourceCode(lines, generationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void addSourceCode(List<String> lines, CodeGenerationSupport generationSupport)
+			throws Exception {
+		// prepare variable
+		if (getVariableIdentifier() == null) {
+			setVariableIdentifier(generationSupport.generateLocalName("treeContentProvider"));
+		}
+		// add factory code
+		m_factoryInfo.addSourceCode(lines, generationSupport);
+		// add advisor code
+		m_advisorInfo.addSourceCode(lines, generationSupport);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Visiting
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final void accept(AstObjectInfoVisitor visitor) throws Exception {
-    super.accept(visitor);
-    // visit to factory
-    m_factoryInfo.accept(visitor);
-    // visit to advisor
-    m_advisorInfo.accept(visitor);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Visiting
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final void accept(AstObjectInfoVisitor visitor) throws Exception {
+		super.accept(visitor);
+		// visit to factory
+		m_factoryInfo.accept(visitor);
+		// visit to advisor
+		m_advisorInfo.accept(visitor);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/ObservableFactoryInfo.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/ObservableFactoryInfo.java
index 1800b201c..dfc22cd19 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/ObservableFactoryInfo.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/ObservableFactoryInfo.java
@@ -30,64 +30,64 @@
  * @coverage bindings.rcp.model.widgets
  */
 public class ObservableFactoryInfo extends SimpleClassObjectInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ObservableFactoryInfo(String className) {
-    super(className);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ObservableFactoryInfo(String className) {
+		super(className);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Create {@link IUiContentProvider} content providers for edit this model.
-   */
-  public final void createContentProviders(List<IUiContentProvider> providers,
-      DatabindingsProvider provider) {
-    ChooseClassConfiguration configuration = new ChooseClassConfiguration();
-    configuration.setDialogFieldLabel(Messages.ObservableFactoryInfo_label);
-    configure(configuration);
-    configuration.setEmptyClassErrorMessage(Messages.ObservableFactoryInfo_emptyMessage);
-    configuration.setErrorMessagePrefix(Messages.ObservableFactoryInfo_errorPrefix);
-    providers.add(new SimpleClassUiContentProvider(configuration, this));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Create {@link IUiContentProvider} content providers for edit this model.
+	 */
+	public final void createContentProviders(List<IUiContentProvider> providers,
+			DatabindingsProvider provider) {
+		ChooseClassConfiguration configuration = new ChooseClassConfiguration();
+		configuration.setDialogFieldLabel(Messages.ObservableFactoryInfo_label);
+		configure(configuration);
+		configuration.setEmptyClassErrorMessage(Messages.ObservableFactoryInfo_emptyMessage);
+		configuration.setErrorMessagePrefix(Messages.ObservableFactoryInfo_errorPrefix);
+		providers.add(new SimpleClassUiContentProvider(configuration, this));
+	}
 
-  /**
-   * Create configuration for edit this factory.
-   */
-  protected void configure(ChooseClassConfiguration configuration) {
-    configuration.setValueScope("org.eclipse.core.databinding.observable.masterdetail.IObservableFactory");
-    configuration.setBaseClassName("org.eclipse.core.databinding.observable.masterdetail.IObservableFactory");
-    configuration.setConstructorParameters(ArrayUtils.EMPTY_CLASS_ARRAY);
-  }
+	/**
+	 * Create configuration for edit this factory.
+	 */
+	protected void configure(ChooseClassConfiguration configuration) {
+		configuration.setValueScope("org.eclipse.core.databinding.observable.masterdetail.IObservableFactory");
+		configuration.setBaseClassName("org.eclipse.core.databinding.observable.masterdetail.IObservableFactory");
+		configuration.setConstructorParameters(ArrayUtils.EMPTY_CLASS_ARRAY);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final void addSourceCode(List<String> lines, CodeGenerationSupport generationSupport)
-      throws Exception {
-    if (getVariableIdentifier() == null) {
-      setVariableIdentifier(generationSupport.generateLocalName("treeObservableFactory"));
-    }
-    addSourceCode(lines);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final void addSourceCode(List<String> lines, CodeGenerationSupport generationSupport)
+			throws Exception {
+		if (getVariableIdentifier() == null) {
+			setVariableIdentifier(generationSupport.generateLocalName("treeObservableFactory"));
+		}
+		addSourceCode(lines);
+	}
 
-  /**
-   * Generate source code association with this object.
-   */
-  protected void addSourceCode(List<String> lines) throws Exception {
-    lines.add("org.eclipse.core.databinding.observable.masterdetail.IObservableFactory "
-        + getVariableIdentifier()
-        + " = new "
-        + m_className
-        + "();");
-  }
+	/**
+	 * Generate source code association with this object.
+	 */
+	protected void addSourceCode(List<String> lines) throws Exception {
+		lines.add("org.eclipse.core.databinding.observable.masterdetail.IObservableFactory "
+				+ getVariableIdentifier()
+				+ " = new "
+				+ m_className
+				+ "();");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/ObservableListContentProviderInfo.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/ObservableListContentProviderInfo.java
index 704a0861a..0c3864cdd 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/ObservableListContentProviderInfo.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/ObservableListContentProviderInfo.java
@@ -21,38 +21,38 @@
  * @coverage bindings.rcp.model.widgets
  */
 public final class ObservableListContentProviderInfo
-    extends
-      ObservableCollectionContentProviderInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ObservableListContentProviderInfo() {
-    super("org.eclipse.jface.databinding.viewers.ObservableListContentProvider");
-  }
+extends
+ObservableCollectionContentProviderInfo {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ObservableListContentProviderInfo() {
+		super("org.eclipse.jface.databinding.viewers.ObservableListContentProvider");
+	}
 
-  public ObservableListContentProviderInfo(String className) {
-    super(className);
-  }
+	public ObservableListContentProviderInfo(String className) {
+		super(className);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void addSourceCode(List<String> lines, CodeGenerationSupport generationSupport)
-      throws Exception {
-    // prepare variable
-    if (getVariableIdentifier() == null) {
-      setVariableIdentifier(generationSupport.generateLocalName("listContentProvider"));
-    }
-    // add code
-    lines.add("org.eclipse.jface.databinding.viewers.ObservableListContentProvider "
-        + getVariableIdentifier()
-        + " = new "
-        + m_className
-        + "();");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void addSourceCode(List<String> lines, CodeGenerationSupport generationSupport)
+			throws Exception {
+		// prepare variable
+		if (getVariableIdentifier() == null) {
+			setVariableIdentifier(generationSupport.generateLocalName("listContentProvider"));
+		}
+		// add code
+		lines.add("org.eclipse.jface.databinding.viewers.ObservableListContentProvider "
+				+ getVariableIdentifier()
+				+ " = new "
+				+ m_className
+				+ "();");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/ObservableListTreeContentProviderInfo.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/ObservableListTreeContentProviderInfo.java
index 8e644a9bb..6fa288d85 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/ObservableListTreeContentProviderInfo.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/ObservableListTreeContentProviderInfo.java
@@ -22,59 +22,59 @@
  * @coverage bindings.rcp.model.widgets
  */
 public final class ObservableListTreeContentProviderInfo
-    extends
-      ObservableCollectionTreeContentProviderInfo {
-  private static final String PROVIDER_CLASS =
-      "org.eclipse.jface.databinding.viewers.ObservableListTreeContentProvider";
+extends
+ObservableCollectionTreeContentProviderInfo {
+	private static final String PROVIDER_CLASS =
+			"org.eclipse.jface.databinding.viewers.ObservableListTreeContentProvider";
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ObservableListTreeContentProviderInfo(String className,
-      ObservableFactoryInfo factoryInfo,
-      TreeStructureAdvisorInfo advisorInfo) {
-    super(className, factoryInfo, advisorInfo);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ObservableListTreeContentProviderInfo(String className,
+			ObservableFactoryInfo factoryInfo,
+			TreeStructureAdvisorInfo advisorInfo) {
+		super(className, factoryInfo, advisorInfo);
+	}
 
-  public ObservableListTreeContentProviderInfo(ObservableFactoryInfo factoryInfo,
-      TreeStructureAdvisorInfo advisorInfo) {
-    this(PROVIDER_CLASS, factoryInfo, advisorInfo);
-  }
+	public ObservableListTreeContentProviderInfo(ObservableFactoryInfo factoryInfo,
+			TreeStructureAdvisorInfo advisorInfo) {
+		this(PROVIDER_CLASS, factoryInfo, advisorInfo);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void configure(ChooseClassConfiguration configuration, boolean useClear) {
-    configuration.setValueScope(PROVIDER_CLASS);
-    if (useClear) {
-      configuration.setClearValue(PROVIDER_CLASS);
-    }
-    configuration.setBaseClassName(PROVIDER_CLASS);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void configure(ChooseClassConfiguration configuration, boolean useClear) {
+		configuration.setValueScope(PROVIDER_CLASS);
+		if (useClear) {
+			configuration.setClearValue(PROVIDER_CLASS);
+		}
+		configuration.setBaseClassName(PROVIDER_CLASS);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void addSourceCode(List<String> lines, CodeGenerationSupport generationSupport)
-      throws Exception {
-    super.addSourceCode(lines, generationSupport);
-    // add code
-    lines.add("org.eclipse.jface.databinding.viewers.ObservableListTreeContentProvider "
-        + getVariableIdentifier()
-        + " = new "
-        + m_className
-        + "("
-        + m_factoryInfo.getVariableIdentifier()
-        + ", "
-        + m_advisorInfo.getVariableIdentifier()
-        + ");");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void addSourceCode(List<String> lines, CodeGenerationSupport generationSupport)
+			throws Exception {
+		super.addSourceCode(lines, generationSupport);
+		// add code
+		lines.add("org.eclipse.jface.databinding.viewers.ObservableListTreeContentProvider "
+				+ getVariableIdentifier()
+				+ " = new "
+				+ m_className
+				+ "("
+				+ m_factoryInfo.getVariableIdentifier()
+				+ ", "
+				+ m_advisorInfo.getVariableIdentifier()
+				+ ");");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/ObservableMapLabelProviderInfo.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/ObservableMapLabelProviderInfo.java
index 3517fae88..a1fa2ed84 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/ObservableMapLabelProviderInfo.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/ObservableMapLabelProviderInfo.java
@@ -32,103 +32,103 @@
  * @coverage bindings.rcp.model.widgets
  */
 public final class ObservableMapLabelProviderInfo extends AbstractLabelProviderInfo {
-  private static final String MAP_PROVIDER_CLASS =
-      "org.eclipse.jface.databinding.viewers.ObservableMapLabelProvider";
-  private final MapsBeanObservableInfo m_mapsObservable;
-  private AbstractViewerInputBindingInfo m_binding;
+	private static final String MAP_PROVIDER_CLASS =
+			"org.eclipse.jface.databinding.viewers.ObservableMapLabelProvider";
+	private final MapsBeanObservableInfo m_mapsObservable;
+	private AbstractViewerInputBindingInfo m_binding;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ObservableMapLabelProviderInfo(MapsBeanObservableInfo mapsObservable) {
-    this(MAP_PROVIDER_CLASS, mapsObservable);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ObservableMapLabelProviderInfo(MapsBeanObservableInfo mapsObservable) {
+		this(MAP_PROVIDER_CLASS, mapsObservable);
+	}
 
-  public ObservableMapLabelProviderInfo(String className, MapsBeanObservableInfo mapsObservable) {
-    super(className);
-    m_mapsObservable = mapsObservable;
-  }
+	public ObservableMapLabelProviderInfo(String className, MapsBeanObservableInfo mapsObservable) {
+		super(className);
+		m_mapsObservable = mapsObservable;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public MapsBeanObservableInfo getMapsObservable() {
-    return m_mapsObservable;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public MapsBeanObservableInfo getMapsObservable() {
+		return m_mapsObservable;
+	}
 
-  public void setBinding(AbstractViewerInputBindingInfo binding) {
-    m_binding = binding;
-  }
+	public void setBinding(AbstractViewerInputBindingInfo binding) {
+		m_binding = binding;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Create {@link IUiContentProvider} content providers for edit this model.
-   */
-  @Override
-  public void createContentProviders(List<IUiContentProvider> providers,
-      DatabindingsProvider provider,
-      boolean useClear) {
-    ChooseClassConfiguration configuration = new ChooseClassConfiguration();
-    configuration.setDialogFieldLabel(Messages.ObservableMapLabelProviderInfo_title);
-    configuration.setValueScope(MAP_PROVIDER_CLASS);
-    if (useClear) {
-      configuration.setClearValue(MAP_PROVIDER_CLASS);
-      configuration.setBaseClassNames(
-          MAP_PROVIDER_CLASS,
-          "org.eclipse.jface.databinding.viewers.ObservableMapCellLabelProvider");
-      configuration.setConstructorsParameters(
-          new Class[]{IObservableMap[].class},
-          new Class[]{IObservableMap.class});
-    } else {
-      configuration.setBaseClassName("org.eclipse.jface.viewers.IBaseLabelProvider");
-    }
-    configuration.setEmptyClassErrorMessage(Messages.ObservableMapLabelProviderInfo_emptyMessage);
-    configuration.setErrorMessagePrefix(Messages.ObservableMapLabelProviderInfo_errorPrefix);
-    //
-    SimpleClassUiContentProvider contentProvider =
-        new SimpleClassUiContentProvider(configuration, this);
-    contentProvider.getDialogField().setEnabled(m_binding.getCodeSupport() == null);
-    providers.add(contentProvider);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Create {@link IUiContentProvider} content providers for edit this model.
+	 */
+	@Override
+	public void createContentProviders(List<IUiContentProvider> providers,
+			DatabindingsProvider provider,
+			boolean useClear) {
+		ChooseClassConfiguration configuration = new ChooseClassConfiguration();
+		configuration.setDialogFieldLabel(Messages.ObservableMapLabelProviderInfo_title);
+		configuration.setValueScope(MAP_PROVIDER_CLASS);
+		if (useClear) {
+			configuration.setClearValue(MAP_PROVIDER_CLASS);
+			configuration.setBaseClassNames(
+					MAP_PROVIDER_CLASS,
+					"org.eclipse.jface.databinding.viewers.ObservableMapCellLabelProvider");
+			configuration.setConstructorsParameters(
+					new Class[]{IObservableMap[].class},
+					new Class[]{IObservableMap.class});
+		} else {
+			configuration.setBaseClassName("org.eclipse.jface.viewers.IBaseLabelProvider");
+		}
+		configuration.setEmptyClassErrorMessage(Messages.ObservableMapLabelProviderInfo_emptyMessage);
+		configuration.setErrorMessagePrefix(Messages.ObservableMapLabelProviderInfo_errorPrefix);
+		//
+		SimpleClassUiContentProvider contentProvider =
+				new SimpleClassUiContentProvider(configuration, this);
+		contentProvider.getDialogField().setEnabled(m_binding.getCodeSupport() == null);
+		providers.add(contentProvider);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getPresentationText() throws Exception {
-    return "ObservableMaps[" + StringUtils.join(m_mapsObservable.getProperties(), ", ") + "]";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getPresentationText() throws Exception {
+		return "ObservableMaps[" + StringUtils.join(m_mapsObservable.getProperties(), ", ") + "]";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getSourceCode(List<String> lines, CodeGenerationSupport generationSupport)
-      throws Exception {
-    generationSupport.addSourceCode(m_mapsObservable, lines);
-    return "new " + m_className + "(" + m_mapsObservable.getVariableIdentifier() + ")";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getSourceCode(List<String> lines, CodeGenerationSupport generationSupport)
+			throws Exception {
+		generationSupport.addSourceCode(m_mapsObservable, lines);
+		return "new " + m_className + "(" + m_mapsObservable.getVariableIdentifier() + ")";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Visiting
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void accept(AstObjectInfoVisitor visitor) throws Exception {
-    super.accept(visitor);
-    m_mapsObservable.accept(visitor);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Visiting
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void accept(AstObjectInfoVisitor visitor) throws Exception {
+		super.accept(visitor);
+		m_mapsObservable.accept(visitor);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/ObservableSetContentProviderInfo.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/ObservableSetContentProviderInfo.java
index 8d9a76313..760e46427 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/ObservableSetContentProviderInfo.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/ObservableSetContentProviderInfo.java
@@ -21,36 +21,36 @@
  * @coverage bindings.rcp.model.widgets
  */
 public final class ObservableSetContentProviderInfo extends ObservableCollectionContentProviderInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ObservableSetContentProviderInfo() {
-    super("org.eclipse.jface.databinding.viewers.ObservableSetContentProvider");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ObservableSetContentProviderInfo() {
+		super("org.eclipse.jface.databinding.viewers.ObservableSetContentProvider");
+	}
 
-  public ObservableSetContentProviderInfo(String className) {
-    super(className);
-  }
+	public ObservableSetContentProviderInfo(String className) {
+		super(className);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void addSourceCode(List<String> lines, CodeGenerationSupport generationSupport)
-      throws Exception {
-    // prepare variable
-    if (getVariableIdentifier() == null) {
-      setVariableIdentifier(generationSupport.generateLocalName("setContentProvider"));
-    }
-    // add code
-    lines.add("org.eclipse.jface.databinding.viewers.ObservableSetContentProvider "
-        + getVariableIdentifier()
-        + " = new "
-        + m_className
-        + "();");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void addSourceCode(List<String> lines, CodeGenerationSupport generationSupport)
+			throws Exception {
+		// prepare variable
+		if (getVariableIdentifier() == null) {
+			setVariableIdentifier(generationSupport.generateLocalName("setContentProvider"));
+		}
+		// add code
+		lines.add("org.eclipse.jface.databinding.viewers.ObservableSetContentProvider "
+				+ getVariableIdentifier()
+				+ " = new "
+				+ m_className
+				+ "();");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/ObservableSetTreeContentProviderInfo.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/ObservableSetTreeContentProviderInfo.java
index f60cbb4b0..a60ab64b0 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/ObservableSetTreeContentProviderInfo.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/ObservableSetTreeContentProviderInfo.java
@@ -22,59 +22,59 @@
  * @coverage bindings.rcp.model.widgets
  */
 public final class ObservableSetTreeContentProviderInfo
-    extends
-      ObservableCollectionTreeContentProviderInfo {
-  private static final String PROVIDER_CLASS =
-      "org.eclipse.jface.databinding.viewers.ObservableSetTreeContentProvider";
+extends
+ObservableCollectionTreeContentProviderInfo {
+	private static final String PROVIDER_CLASS =
+			"org.eclipse.jface.databinding.viewers.ObservableSetTreeContentProvider";
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ObservableSetTreeContentProviderInfo(String className,
-      ObservableFactoryInfo factoryInfo,
-      TreeStructureAdvisorInfo advisorInfo) {
-    super(className, factoryInfo, advisorInfo);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ObservableSetTreeContentProviderInfo(String className,
+			ObservableFactoryInfo factoryInfo,
+			TreeStructureAdvisorInfo advisorInfo) {
+		super(className, factoryInfo, advisorInfo);
+	}
 
-  public ObservableSetTreeContentProviderInfo(ObservableFactoryInfo factoryInfo,
-      TreeStructureAdvisorInfo advisorInfo) {
-    this(PROVIDER_CLASS, factoryInfo, advisorInfo);
-  }
+	public ObservableSetTreeContentProviderInfo(ObservableFactoryInfo factoryInfo,
+			TreeStructureAdvisorInfo advisorInfo) {
+		this(PROVIDER_CLASS, factoryInfo, advisorInfo);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void configure(ChooseClassConfiguration configuration, boolean useClear) {
-    configuration.setValueScope(PROVIDER_CLASS);
-    if (useClear) {
-      configuration.setClearValue(PROVIDER_CLASS);
-    }
-    configuration.setBaseClassName(PROVIDER_CLASS);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void configure(ChooseClassConfiguration configuration, boolean useClear) {
+		configuration.setValueScope(PROVIDER_CLASS);
+		if (useClear) {
+			configuration.setClearValue(PROVIDER_CLASS);
+		}
+		configuration.setBaseClassName(PROVIDER_CLASS);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void addSourceCode(List<String> lines, CodeGenerationSupport generationSupport)
-      throws Exception {
-    super.addSourceCode(lines, generationSupport);
-    // add code
-    lines.add("org.eclipse.jface.databinding.viewers.ObservableSetTreeContentProvider "
-        + getVariableIdentifier()
-        + " = new "
-        + m_className
-        + "("
-        + m_factoryInfo.getVariableIdentifier()
-        + ", "
-        + m_advisorInfo.getVariableIdentifier()
-        + ");");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void addSourceCode(List<String> lines, CodeGenerationSupport generationSupport)
+			throws Exception {
+		super.addSourceCode(lines, generationSupport);
+		// add code
+		lines.add("org.eclipse.jface.databinding.viewers.ObservableSetTreeContentProvider "
+				+ getVariableIdentifier()
+				+ " = new "
+				+ m_className
+				+ "("
+				+ m_factoryInfo.getVariableIdentifier()
+				+ ", "
+				+ m_advisorInfo.getVariableIdentifier()
+				+ ");");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/TreeStructureAdvisorInfo.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/TreeStructureAdvisorInfo.java
index 2343d0bff..7042ac307 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/TreeStructureAdvisorInfo.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/TreeStructureAdvisorInfo.java
@@ -29,64 +29,64 @@
  * @coverage bindings.rcp.model.widgets
  */
 public class TreeStructureAdvisorInfo extends SimpleClassObjectInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public TreeStructureAdvisorInfo(String className) {
-    super(className);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public TreeStructureAdvisorInfo(String className) {
+		super(className);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Create {@link IUiContentProvider} content providers for edit this model.
-   */
-  public final void createContentProviders(List<IUiContentProvider> providers,
-      DatabindingsProvider provider) {
-    ChooseClassConfiguration configuration = new ChooseClassConfiguration();
-    configuration.setDialogFieldLabel(Messages.TreeStructureAdvisorInfo_label);
-    configure(configuration);
-    configuration.setEmptyClassErrorMessage(Messages.TreeStructureAdvisorInfo_errorMessage);
-    configuration.setErrorMessagePrefix(Messages.TreeStructureAdvisorInfo_errorMessagePrefix);
-    providers.add(new SimpleClassUiContentProvider(configuration, this));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Create {@link IUiContentProvider} content providers for edit this model.
+	 */
+	public final void createContentProviders(List<IUiContentProvider> providers,
+			DatabindingsProvider provider) {
+		ChooseClassConfiguration configuration = new ChooseClassConfiguration();
+		configuration.setDialogFieldLabel(Messages.TreeStructureAdvisorInfo_label);
+		configure(configuration);
+		configuration.setEmptyClassErrorMessage(Messages.TreeStructureAdvisorInfo_errorMessage);
+		configuration.setErrorMessagePrefix(Messages.TreeStructureAdvisorInfo_errorMessagePrefix);
+		providers.add(new SimpleClassUiContentProvider(configuration, this));
+	}
 
-  /**
-   * Create configuration for edit this advisor.
-   */
-  protected void configure(ChooseClassConfiguration configuration) {
-    configuration.setValueScope("org.eclipse.jface.databinding.viewers.TreeStructureAdvisor");
-    configuration.setBaseClassName("org.eclipse.jface.databinding.viewers.TreeStructureAdvisor");
-    configuration.setConstructorParameters(ArrayUtils.EMPTY_CLASS_ARRAY);
-  }
+	/**
+	 * Create configuration for edit this advisor.
+	 */
+	protected void configure(ChooseClassConfiguration configuration) {
+		configuration.setValueScope("org.eclipse.jface.databinding.viewers.TreeStructureAdvisor");
+		configuration.setBaseClassName("org.eclipse.jface.databinding.viewers.TreeStructureAdvisor");
+		configuration.setConstructorParameters(ArrayUtils.EMPTY_CLASS_ARRAY);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final void addSourceCode(List<String> lines, CodeGenerationSupport generationSupport)
-      throws Exception {
-    if (getVariableIdentifier() == null) {
-      setVariableIdentifier(generationSupport.generateLocalName("treeAdvisor"));
-    }
-    addSourceCode(lines);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final void addSourceCode(List<String> lines, CodeGenerationSupport generationSupport)
+			throws Exception {
+		if (getVariableIdentifier() == null) {
+			setVariableIdentifier(generationSupport.generateLocalName("treeAdvisor"));
+		}
+		addSourceCode(lines);
+	}
 
-  /**
-   * Generate source code association with this object.
-   */
-  protected void addSourceCode(List<String> lines) throws Exception {
-    lines.add("org.eclipse.jface.databinding.viewers.TreeStructureAdvisor "
-        + getVariableIdentifier()
-        + " = new "
-        + m_className
-        + "();");
-  }
+	/**
+	 * Generate source code association with this object.
+	 */
+	protected void addSourceCode(List<String> lines) throws Exception {
+		lines.add("org.eclipse.jface.databinding.viewers.TreeStructureAdvisor "
+				+ getVariableIdentifier()
+				+ " = new "
+				+ m_className
+				+ "();");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/TreeViewerInputBindingInfo.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/TreeViewerInputBindingInfo.java
index 322e5747f..981f7bb62 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/TreeViewerInputBindingInfo.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/TreeViewerInputBindingInfo.java
@@ -45,196 +45,196 @@
  * @coverage bindings.rcp.model.widgets
  */
 public final class TreeViewerInputBindingInfo extends AbstractViewerInputBindingInfo {
-  private ObservableCollectionTreeContentProviderInfo m_contentProvider;
-  private AbstractLabelProviderInfo m_labelProvider;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public TreeViewerInputBindingInfo(WidgetBindableInfo viewerBindable) throws Exception {
-    super(viewerBindable);
-  }
-
-  public TreeViewerInputBindingInfo(WidgetBindableInfo viewerBindable,
-      WidgetPropertyBindableInfo viewerBindableProperty) throws Exception {
-    super(viewerBindable, viewerBindableProperty);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ObservableCollectionTreeContentProviderInfo getContentProvider() {
-    return m_contentProvider;
-  }
-
-  public void setContentProvider(ObservableCollectionTreeContentProviderInfo contentProvider) {
-    m_contentProvider = contentProvider;
-  }
-
-  public AbstractLabelProviderInfo getLabelProvider() {
-    return m_labelProvider;
-  }
-
-  public void setLabelProvider(AbstractLabelProviderInfo labelProvider) {
-    m_labelProvider = labelProvider;
-    if (m_labelProvider instanceof ObservableMapLabelProviderInfo) {
-      ObservableMapLabelProviderInfo mapsLabelProvider =
-          (ObservableMapLabelProviderInfo) m_labelProvider;
-      mapsLabelProvider.setBinding(this);
-    }
-  }
-
-  @Override
-  public Class<?> getElementType() {
-    ObservableFactoryInfo factoryInfo = m_contentProvider.getFactoryInfo();
-    if (factoryInfo instanceof BeansObservableFactoryInfo) {
-      BeansObservableFactoryInfo designerFactoryInfo = (BeansObservableFactoryInfo) factoryInfo;
-      return designerFactoryInfo.getElementType();
-    }
-    return super.getElementType();
-  }
-
-  public boolean isDesignerMode() {
-    if (m_contentProvider.getFactoryInfo() instanceof BeansObservableFactoryInfo) {
-      BeansObservableFactoryInfo factoryInfo =
-          (BeansObservableFactoryInfo) m_contentProvider.getFactoryInfo();
-      return factoryInfo.isDesignerMode();
-    }
-    return false;
-  }
-
-  @Override
-  public void setDefaultProviders(boolean asList, Class<?> elementType, boolean useViewerSupport)
-      throws Exception {
-    // create advisor
-    TreeBeanAdvisorInfo advisor = GlobalFactoryHelper.createTreeBeanAdvisor(m_inputObservable);
-    if (advisor == null) {
-      advisor = new TreeBeanAdvisorInfo();
-    }
-    advisor.setElementType(elementType);
-    // create factory
-    BeansObservableFactoryInfo factory =
-        GlobalFactoryHelper.createTreeObservableFactory(m_inputObservable, asList);
-    if (factory == null) {
-      factory = asList ? new BeansListObservableFactoryInfo() : new BeansSetObservableFactoryInfo();
-    }
-    factory.setElementType(elementType);
-    // create content provider
-    m_contentProvider =
-        asList
-            ? new ObservableListTreeContentProviderInfo(factory, advisor)
-            : new ObservableSetTreeContentProviderInfo(factory, advisor);
-    // create label provider
-    KnownElementsObservableInfo allElementsObservable =
-        new KnownElementsObservableInfo(m_contentProvider);
-    TreeObservableLabelProviderInfo labelProvider =
-        GlobalFactoryHelper.createTreeLabelProvider(m_inputObservable, allElementsObservable);
-    if (labelProvider == null) {
-      labelProvider = new TreeObservableLabelProviderInfo(allElementsObservable);
-    }
-    labelProvider.setElementType(elementType);
-    m_labelProvider = labelProvider;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void createContentProviders(List<IUiContentProvider> providers,
-      IPageListener listener,
-      DatabindingsProvider provider) throws Exception {
-    // configure page
-    listener.setTitle(Messages.TreeViewerInputBindingInfo_title);
-    listener.setMessage(Messages.TreeViewerInputBindingInfo_errorMessage);
-    //
-    providers.add(new LabelUiContentProvider(Messages.TreeViewerInputBindingInfo_viewerLabel,
-        m_viewerBindable.getPresentation().getTextForBinding()));
-    providers.add(new LabelUiContentProvider(Messages.TreeViewerInputBindingInfo_inputLabel,
-        m_inputObservable.getPresentationText()));
-    //
-    TreeInputElementUiContentProvider inputEditor =
-        new TreeInputElementUiContentProvider(this, listener, provider);
-    //
-    if (m_inputObservable instanceof DetailBeanObservableInfo) {
-      m_inputObservable.createContentProviders(providers, null, provider);
-      //
-      ChooseClassAndPropertiesUiContentProvider masterUIContentProvider =
-          (ChooseClassAndPropertiesUiContentProvider) providers.get(providers.size() - 1);
-      //
-      ChooseClassConfiguration configuration = new ChooseClassConfiguration();
-      configuration.setDialogFieldLabel(Messages.TreeViewerInputBindingInfo_chooseLabel);
-      configuration.setValueScope("beans1");
-      configuration.setChooseInterfaces(true);
-      configuration.setEmptyClassErrorMessage(Messages.TreeViewerInputBindingInfo_chooseEmptyMessage);
-      configuration.setErrorMessagePrefix(Messages.TreeViewerInputBindingInfo_chooseErrorPrefix);
-      //
-      TreeDetailUiContentProvider detailUIContentProvider =
-          new TreeDetailUiContentProvider(configuration,
-              (DetailBeanObservableInfo) m_inputObservable);
-      providers.add(detailUIContentProvider);
-      //
-      new ChooseClassAndPropertiesRouter(masterUIContentProvider, detailUIContentProvider);
-      new ChooseClassRouter(detailUIContentProvider,
-          new MultiTargetRunnable(detailUIContentProvider, inputEditor.getElementTypeUIProviders()));
-    }
-    //
-    providers.add(inputEditor);
-    //
-    super.createContentProviders(providers, listener, provider);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getPresentationText() throws Exception {
-    return super.getPresentationText()
-        + "("
-        + m_contentProvider.getPresentationText()
-        + ", "
-        + m_labelProvider.getPresentationText()
-        + ")";
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void addSourceCode(DataBindingContextInfo context,
-      List<String> lines,
-      CodeGenerationSupport generationSupport) throws Exception {
-    addSourceCode(context, lines, generationSupport, m_contentProvider, m_labelProvider);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parser
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void postParse() throws Exception {
-    super.postParse();
-    Assert.isNotNull(m_contentProvider);
-    Assert.isNotNull(m_labelProvider);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Visiting
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void accept(AstObjectInfoVisitor visitor) throws Exception {
-    accept(visitor, m_contentProvider, m_labelProvider);
-  }
+	private ObservableCollectionTreeContentProviderInfo m_contentProvider;
+	private AbstractLabelProviderInfo m_labelProvider;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public TreeViewerInputBindingInfo(WidgetBindableInfo viewerBindable) throws Exception {
+		super(viewerBindable);
+	}
+
+	public TreeViewerInputBindingInfo(WidgetBindableInfo viewerBindable,
+			WidgetPropertyBindableInfo viewerBindableProperty) throws Exception {
+		super(viewerBindable, viewerBindableProperty);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ObservableCollectionTreeContentProviderInfo getContentProvider() {
+		return m_contentProvider;
+	}
+
+	public void setContentProvider(ObservableCollectionTreeContentProviderInfo contentProvider) {
+		m_contentProvider = contentProvider;
+	}
+
+	public AbstractLabelProviderInfo getLabelProvider() {
+		return m_labelProvider;
+	}
+
+	public void setLabelProvider(AbstractLabelProviderInfo labelProvider) {
+		m_labelProvider = labelProvider;
+		if (m_labelProvider instanceof ObservableMapLabelProviderInfo) {
+			ObservableMapLabelProviderInfo mapsLabelProvider =
+					(ObservableMapLabelProviderInfo) m_labelProvider;
+			mapsLabelProvider.setBinding(this);
+		}
+	}
+
+	@Override
+	public Class<?> getElementType() {
+		ObservableFactoryInfo factoryInfo = m_contentProvider.getFactoryInfo();
+		if (factoryInfo instanceof BeansObservableFactoryInfo) {
+			BeansObservableFactoryInfo designerFactoryInfo = (BeansObservableFactoryInfo) factoryInfo;
+			return designerFactoryInfo.getElementType();
+		}
+		return super.getElementType();
+	}
+
+	public boolean isDesignerMode() {
+		if (m_contentProvider.getFactoryInfo() instanceof BeansObservableFactoryInfo) {
+			BeansObservableFactoryInfo factoryInfo =
+					(BeansObservableFactoryInfo) m_contentProvider.getFactoryInfo();
+			return factoryInfo.isDesignerMode();
+		}
+		return false;
+	}
+
+	@Override
+	public void setDefaultProviders(boolean asList, Class<?> elementType, boolean useViewerSupport)
+			throws Exception {
+		// create advisor
+		TreeBeanAdvisorInfo advisor = GlobalFactoryHelper.createTreeBeanAdvisor(m_inputObservable);
+		if (advisor == null) {
+			advisor = new TreeBeanAdvisorInfo();
+		}
+		advisor.setElementType(elementType);
+		// create factory
+		BeansObservableFactoryInfo factory =
+				GlobalFactoryHelper.createTreeObservableFactory(m_inputObservable, asList);
+		if (factory == null) {
+			factory = asList ? new BeansListObservableFactoryInfo() : new BeansSetObservableFactoryInfo();
+		}
+		factory.setElementType(elementType);
+		// create content provider
+		m_contentProvider =
+				asList
+				? new ObservableListTreeContentProviderInfo(factory, advisor)
+						: new ObservableSetTreeContentProviderInfo(factory, advisor);
+		// create label provider
+		KnownElementsObservableInfo allElementsObservable =
+				new KnownElementsObservableInfo(m_contentProvider);
+		TreeObservableLabelProviderInfo labelProvider =
+				GlobalFactoryHelper.createTreeLabelProvider(m_inputObservable, allElementsObservable);
+		if (labelProvider == null) {
+			labelProvider = new TreeObservableLabelProviderInfo(allElementsObservable);
+		}
+		labelProvider.setElementType(elementType);
+		m_labelProvider = labelProvider;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void createContentProviders(List<IUiContentProvider> providers,
+			IPageListener listener,
+			DatabindingsProvider provider) throws Exception {
+		// configure page
+		listener.setTitle(Messages.TreeViewerInputBindingInfo_title);
+		listener.setMessage(Messages.TreeViewerInputBindingInfo_errorMessage);
+		//
+		providers.add(new LabelUiContentProvider(Messages.TreeViewerInputBindingInfo_viewerLabel,
+				m_viewerBindable.getPresentation().getTextForBinding()));
+		providers.add(new LabelUiContentProvider(Messages.TreeViewerInputBindingInfo_inputLabel,
+				m_inputObservable.getPresentationText()));
+		//
+		TreeInputElementUiContentProvider inputEditor =
+				new TreeInputElementUiContentProvider(this, listener, provider);
+		//
+		if (m_inputObservable instanceof DetailBeanObservableInfo) {
+			m_inputObservable.createContentProviders(providers, null, provider);
+			//
+			ChooseClassAndPropertiesUiContentProvider masterUIContentProvider =
+					(ChooseClassAndPropertiesUiContentProvider) providers.get(providers.size() - 1);
+			//
+			ChooseClassConfiguration configuration = new ChooseClassConfiguration();
+			configuration.setDialogFieldLabel(Messages.TreeViewerInputBindingInfo_chooseLabel);
+			configuration.setValueScope("beans1");
+			configuration.setChooseInterfaces(true);
+			configuration.setEmptyClassErrorMessage(Messages.TreeViewerInputBindingInfo_chooseEmptyMessage);
+			configuration.setErrorMessagePrefix(Messages.TreeViewerInputBindingInfo_chooseErrorPrefix);
+			//
+			TreeDetailUiContentProvider detailUIContentProvider =
+					new TreeDetailUiContentProvider(configuration,
+							(DetailBeanObservableInfo) m_inputObservable);
+			providers.add(detailUIContentProvider);
+			//
+			new ChooseClassAndPropertiesRouter(masterUIContentProvider, detailUIContentProvider);
+			new ChooseClassRouter(detailUIContentProvider,
+					new MultiTargetRunnable(detailUIContentProvider, inputEditor.getElementTypeUIProviders()));
+		}
+		//
+		providers.add(inputEditor);
+		//
+		super.createContentProviders(providers, listener, provider);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getPresentationText() throws Exception {
+		return super.getPresentationText()
+				+ "("
+				+ m_contentProvider.getPresentationText()
+				+ ", "
+				+ m_labelProvider.getPresentationText()
+				+ ")";
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void addSourceCode(DataBindingContextInfo context,
+			List<String> lines,
+			CodeGenerationSupport generationSupport) throws Exception {
+		addSourceCode(context, lines, generationSupport, m_contentProvider, m_labelProvider);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parser
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void postParse() throws Exception {
+		super.postParse();
+		Assert.isNotNull(m_contentProvider);
+		Assert.isNotNull(m_labelProvider);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Visiting
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void accept(AstObjectInfoVisitor visitor) throws Exception {
+		accept(visitor, m_contentProvider, m_labelProvider);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/ViewerCodeSupport.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/ViewerCodeSupport.java
index d65eab9f1..144616056 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/ViewerCodeSupport.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/ViewerCodeSupport.java
@@ -25,44 +25,44 @@
  * @coverage bindings.rcp.model.widgets
  */
 public class ViewerCodeSupport extends CodeSupport {
-  private final ViewerInputBindingInfo m_binding;
+	private final ViewerInputBindingInfo m_binding;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ViewerCodeSupport(ViewerInputBindingInfo binding) {
-    m_binding = binding;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ViewerCodeSupport(ViewerInputBindingInfo binding) {
+		m_binding = binding;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void addSourceCode(List<String> lines, CodeGenerationSupport generationSupport)
-      throws Exception {
-    generationSupport.addSourceCode(m_binding.getInputObservable(), lines);
-    //
-    Class<?> elementType = m_binding.getElementType();
-    String[] properties = m_binding.getLabelProvider().getMapsObservable().getProperties();
-    String propertiesSourceCode =
-        ObservableInfo.isPojoBean(elementType)
-            ? "org.eclipse.core.databinding.beans.typed.PojoProperties"
-            : "org.eclipse.core.databinding.beans.typed.BeanProperties";
-    //
-    lines.add("org.eclipse.jface.databinding.viewers.ViewerSupport.bind("
-        + m_binding.getViewer().getReference()
-        + ", "
-        + m_binding.getInputObservable().getVariableIdentifier()
-        + ", "
-        + propertiesSourceCode
-        + ".values("
-        + CoreUtils.getClassName(elementType)
-        + ".class, new java.lang.String[]{\""
-        + StringUtils.join(properties, "\", \"")
-        + "\"}));");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void addSourceCode(List<String> lines, CodeGenerationSupport generationSupport)
+			throws Exception {
+		generationSupport.addSourceCode(m_binding.getInputObservable(), lines);
+		//
+		Class<?> elementType = m_binding.getElementType();
+		String[] properties = m_binding.getLabelProvider().getMapsObservable().getProperties();
+		String propertiesSourceCode =
+				ObservableInfo.isPojoBean(elementType)
+				? "org.eclipse.core.databinding.beans.typed.PojoProperties"
+						: "org.eclipse.core.databinding.beans.typed.BeanProperties";
+		//
+		lines.add("org.eclipse.jface.databinding.viewers.ViewerSupport.bind("
+				+ m_binding.getViewer().getReference()
+				+ ", "
+				+ m_binding.getInputObservable().getVariableIdentifier()
+				+ ", "
+				+ propertiesSourceCode
+				+ ".values("
+				+ CoreUtils.getClassName(elementType)
+				+ ".class, new java.lang.String[]{\""
+				+ StringUtils.join(properties, "\", \"")
+				+ "\"}));");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/ViewerInputBindingInfo.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/ViewerInputBindingInfo.java
index 0cb955dcf..b611958db 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/ViewerInputBindingInfo.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/ViewerInputBindingInfo.java
@@ -38,178 +38,178 @@
  * @coverage bindings.rcp.model.widgets
  */
 public final class ViewerInputBindingInfo extends AbstractViewerInputBindingInfo {
-  private ObservableCollectionContentProviderInfo m_contentProvider;
-  private ObservableMapLabelProviderInfo m_labelProvider;
+	private ObservableCollectionContentProviderInfo m_contentProvider;
+	private ObservableMapLabelProviderInfo m_labelProvider;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ViewerInputBindingInfo(WidgetBindableInfo viewerBindable) throws Exception {
-    super(viewerBindable);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ViewerInputBindingInfo(WidgetBindableInfo viewerBindable) throws Exception {
+		super(viewerBindable);
+	}
 
-  public ViewerInputBindingInfo(WidgetBindableInfo viewerBindable,
-      WidgetPropertyBindableInfo viewerBindableProperty) throws Exception {
-    super(viewerBindable, viewerBindableProperty);
-  }
+	public ViewerInputBindingInfo(WidgetBindableInfo viewerBindable,
+			WidgetPropertyBindableInfo viewerBindableProperty) throws Exception {
+		super(viewerBindable, viewerBindableProperty);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void setContentProvider(ObservableCollectionContentProviderInfo contentProvider) {
-    m_contentProvider = contentProvider;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void setContentProvider(ObservableCollectionContentProviderInfo contentProvider) {
+		m_contentProvider = contentProvider;
+	}
 
-  public ObservableMapLabelProviderInfo getLabelProvider() {
-    return m_labelProvider;
-  }
+	public ObservableMapLabelProviderInfo getLabelProvider() {
+		return m_labelProvider;
+	}
 
-  public void setLabelProvider(ObservableMapLabelProviderInfo labelProvider) {
-    m_labelProvider = labelProvider;
-    m_labelProvider.setBinding(this);
-  }
+	public void setLabelProvider(ObservableMapLabelProviderInfo labelProvider) {
+		m_labelProvider = labelProvider;
+		m_labelProvider.setBinding(this);
+	}
 
-  @Override
-  public void setDefaultProviders(boolean asList, Class<?> elementType, boolean useViewerSupport)
-      throws Exception {
-    boolean[] useViewerSupports = {useViewerSupport};
-    // create content provider
-    if (asList) {
-      m_contentProvider = new ObservableListContentProviderInfo();
-    } else {
-      m_contentProvider = new ObservableSetContentProviderInfo();
-    }
-    // create content provider accessor
-    KnownElementsObservableInfo knownElementsObservable =
-        new KnownElementsObservableInfo(m_contentProvider);
-    // create label provider
-    MapsBeanObservableInfo observeMaps =
-        GlobalFactoryHelper.createObserveMaps(
-            m_inputObservable,
-            knownElementsObservable,
-            elementType,
-            useViewerSupports);
-    if (observeMaps == null) {
-      observeMaps = new MapsBeanObservableInfo(knownElementsObservable, elementType, null);
-    }
-    setLabelProvider(new ObservableMapLabelProviderInfo(observeMaps));
-    //
-    if (useViewerSupports[0]) {
-      setCodeSupport(new ViewerCodeSupport(this));
-    }
-  }
+	@Override
+	public void setDefaultProviders(boolean asList, Class<?> elementType, boolean useViewerSupport)
+			throws Exception {
+		boolean[] useViewerSupports = {useViewerSupport};
+		// create content provider
+		if (asList) {
+			m_contentProvider = new ObservableListContentProviderInfo();
+		} else {
+			m_contentProvider = new ObservableSetContentProviderInfo();
+		}
+		// create content provider accessor
+		KnownElementsObservableInfo knownElementsObservable =
+				new KnownElementsObservableInfo(m_contentProvider);
+		// create label provider
+		MapsBeanObservableInfo observeMaps =
+				GlobalFactoryHelper.createObserveMaps(
+						m_inputObservable,
+						knownElementsObservable,
+						elementType,
+						useViewerSupports);
+		if (observeMaps == null) {
+			observeMaps = new MapsBeanObservableInfo(knownElementsObservable, elementType, null);
+		}
+		setLabelProvider(new ObservableMapLabelProviderInfo(observeMaps));
+		//
+		if (useViewerSupports[0]) {
+			setCodeSupport(new ViewerCodeSupport(this));
+		}
+	}
 
-  @Override
-  public Class<?> getElementType() {
-    return m_labelProvider == null
-        ? super.getElementType()
-        : m_labelProvider.getMapsObservable().getElementType();
-  }
+	@Override
+	public Class<?> getElementType() {
+		return m_labelProvider == null
+				? super.getElementType()
+						: m_labelProvider.getMapsObservable().getElementType();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void createContentProviders(List<IUiContentProvider> providers,
-      IPageListener listener,
-      DatabindingsProvider provider) throws Exception {
-    // configure page
-    listener.setTitle(Messages.ViewerInputBindingInfo_title);
-    listener.setMessage(Messages.ViewerInputBindingInfo_message);
-    //
-    providers.add(new LabelUiContentProvider(Messages.ViewerInputBindingInfo_viewerLabel,
-        m_viewerBindable.getPresentation().getTextForBinding()));
-    providers.add(new LabelUiContentProvider(Messages.ViewerInputBindingInfo_inputLabel,
-        m_inputObservable.getPresentationText()));
-    m_labelProvider.createContentProviders(providers, provider, true);
-    // element type editor
-    ChooseClassAndPropertiesConfiguration configuration =
-        new ChooseClassAndPropertiesConfiguration();
-    configuration.setDialogFieldLabel(Messages.ViewerInputBindingInfo_elementClassLabel);
-    configuration.setValueScope("beans");
-    configuration.setChooseInterfaces(true);
-    configuration.setEmptyClassErrorMessage(Messages.ViewerInputBindingInfo_elementClassEmptyMessage);
-    configuration.setErrorMessagePrefix(Messages.ViewerInputBindingInfo_elementClassErrorPrefix);
-    configuration.setPropertiesLabel(Messages.ViewerInputBindingInfo_elementClassPropertiesLabel);
-    configuration.setPropertiesMultiChecked(true);
-    configuration.setReorderMode(true);
-    configuration.setShowSelectionButtons(false);
-    configuration.setLoadedPropertiesCheckedStrategy(ChooseClassAndPropertiesConfiguration.LoadedPropertiesCheckedStrategy.None);
-    configuration.setPropertiesErrorMessage(Messages.ViewerInputBindingInfo_elementClassPropertiesErrorMessage);
-    //
-    if (m_inputObservable instanceof DetailBeanObservableInfo) {
-      configuration.setDialogFieldEnabled(false);
-      configuration.setValueScope("beans0");
-      m_inputObservable.createContentProviders(providers, null, provider);
-    }
-    //
-    GlobalFactoryHelper.configureChooseElementForViewerInput(m_inputObservable, configuration);
-    //
-    InputElementUiContentProvider inputUIContentProvider =
-        new InputElementUiContentProvider(configuration, this);
-    //
-    if (m_inputObservable instanceof DetailBeanObservableInfo) {
-      new ChooseClassAndPropertiesRouter((ChooseClassAndPropertiesUiContentProvider) providers.get(providers.size() - 1),
-          inputUIContentProvider);
-    }
-    //
-    providers.add(inputUIContentProvider);
-    //
-    super.createContentProviders(providers, listener, provider);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void createContentProviders(List<IUiContentProvider> providers,
+			IPageListener listener,
+			DatabindingsProvider provider) throws Exception {
+		// configure page
+		listener.setTitle(Messages.ViewerInputBindingInfo_title);
+		listener.setMessage(Messages.ViewerInputBindingInfo_message);
+		//
+		providers.add(new LabelUiContentProvider(Messages.ViewerInputBindingInfo_viewerLabel,
+				m_viewerBindable.getPresentation().getTextForBinding()));
+		providers.add(new LabelUiContentProvider(Messages.ViewerInputBindingInfo_inputLabel,
+				m_inputObservable.getPresentationText()));
+		m_labelProvider.createContentProviders(providers, provider, true);
+		// element type editor
+		ChooseClassAndPropertiesConfiguration configuration =
+				new ChooseClassAndPropertiesConfiguration();
+		configuration.setDialogFieldLabel(Messages.ViewerInputBindingInfo_elementClassLabel);
+		configuration.setValueScope("beans");
+		configuration.setChooseInterfaces(true);
+		configuration.setEmptyClassErrorMessage(Messages.ViewerInputBindingInfo_elementClassEmptyMessage);
+		configuration.setErrorMessagePrefix(Messages.ViewerInputBindingInfo_elementClassErrorPrefix);
+		configuration.setPropertiesLabel(Messages.ViewerInputBindingInfo_elementClassPropertiesLabel);
+		configuration.setPropertiesMultiChecked(true);
+		configuration.setReorderMode(true);
+		configuration.setShowSelectionButtons(false);
+		configuration.setLoadedPropertiesCheckedStrategy(ChooseClassAndPropertiesConfiguration.LoadedPropertiesCheckedStrategy.None);
+		configuration.setPropertiesErrorMessage(Messages.ViewerInputBindingInfo_elementClassPropertiesErrorMessage);
+		//
+		if (m_inputObservable instanceof DetailBeanObservableInfo) {
+			configuration.setDialogFieldEnabled(false);
+			configuration.setValueScope("beans0");
+			m_inputObservable.createContentProviders(providers, null, provider);
+		}
+		//
+		GlobalFactoryHelper.configureChooseElementForViewerInput(m_inputObservable, configuration);
+		//
+		InputElementUiContentProvider inputUIContentProvider =
+				new InputElementUiContentProvider(configuration, this);
+		//
+		if (m_inputObservable instanceof DetailBeanObservableInfo) {
+			new ChooseClassAndPropertiesRouter((ChooseClassAndPropertiesUiContentProvider) providers.get(providers.size() - 1),
+					inputUIContentProvider);
+		}
+		//
+		providers.add(inputUIContentProvider);
+		//
+		super.createContentProviders(providers, listener, provider);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getPresentationText() throws Exception {
-    return super.getPresentationText()
-        + "("
-        + m_contentProvider.getPresentationText()
-        + ", "
-        + m_labelProvider.getPresentationText()
-        + ")";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getPresentationText() throws Exception {
+		return super.getPresentationText()
+				+ "("
+				+ m_contentProvider.getPresentationText()
+				+ ", "
+				+ m_labelProvider.getPresentationText()
+				+ ")";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void addSourceCode(DataBindingContextInfo context,
-      List<String> lines,
-      CodeGenerationSupport generationSupport) throws Exception {
-    addSourceCode(context, lines, generationSupport, m_contentProvider, m_labelProvider);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void addSourceCode(DataBindingContextInfo context,
+			List<String> lines,
+			CodeGenerationSupport generationSupport) throws Exception {
+		addSourceCode(context, lines, generationSupport, m_contentProvider, m_labelProvider);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parser
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void postParse() throws Exception {
-    super.postParse();
-    Assert.isNotNull(m_contentProvider);
-    Assert.isNotNull(m_labelProvider);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parser
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void postParse() throws Exception {
+		super.postParse();
+		Assert.isNotNull(m_contentProvider);
+		Assert.isNotNull(m_labelProvider);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Visiting
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void accept(AstObjectInfoVisitor visitor) throws Exception {
-    accept(visitor, m_contentProvider, m_labelProvider);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Visiting
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void accept(AstObjectInfoVisitor visitor) throws Exception {
+		accept(visitor, m_contentProvider, m_labelProvider);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/ViewerInputParser.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/ViewerInputParser.java
index cfedaee9b..001da9eaf 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/ViewerInputParser.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/ViewerInputParser.java
@@ -58,623 +58,623 @@
  * @coverage bindings.rcp.model.widgets
  */
 public final class ViewerInputParser implements ISubParser {
-  private static final String VIEWER_SUPPORT_LIST_SIGNATURE =
-      "org.eclipse.jface.databinding.viewers.ViewerSupport.bind(org.eclipse.jface.viewers.StructuredViewer,org.eclipse.core.databinding.observable.list.IObservableList,org.eclipse.core.databinding.property.value.IValueProperty[])";
-  private static final String VIEWER_SUPPORT_SET_SIGNATURE =
-      "org.eclipse.jface.databinding.viewers.ViewerSupport.bind(org.eclipse.jface.viewers.StructuredViewer,org.eclipse.core.databinding.observable.set.IObservableSet,org.eclipse.core.databinding.property.value.IValueProperty[])";
-  private static final String BEAN_PROPERTIES_VALUES =
-      "org.eclipse.core.databinding.beans.typed.BeanProperties.values(java.lang.Class,java.lang.String[])";
-  private static final String POJO_PROPERTIES_VALUES =
-      "org.eclipse.core.databinding.beans.typed.PojoProperties.values(java.lang.Class,java.lang.String[])";
-  private static final String OBSERVABLE_VALUE_EDITING_SUPPORT =
-      "org.eclipse.jface.databinding.viewers.ObservableValueEditingSupport.create(org.eclipse.jface.viewers.ColumnViewer,org.eclipse.core.databinding.DataBindingContext,org.eclipse.jface.viewers.CellEditor,org.eclipse.core.databinding.property.value.IValueProperty,org.eclipse.core.databinding.property.value.IValueProperty)";
-  private static final String VIEWER_COLUMN_SET_EDITING_SUPPORT =
-      "org.eclipse.jface.viewers.ViewerColumn.setEditingSupport(org.eclipse.jface.viewers.EditingSupport)";
-  private static final String CELL_EDITOR_PROPERTIES_CONTROL =
-      "org.eclipse.jface.databinding.viewers.CellEditorProperties.control()";
-  //
-  private final Map<WidgetBindableInfo, AbstractViewerInputBindingInfo> m_viewers =
-      Maps.newHashMap();
-  private final DataBindingContextInfo m_contextInfo;
-  private final BeansObserveTypeContainer m_beansContainer;
-  private final WidgetsObserveTypeContainer m_widgetsContainer;
+	private static final String VIEWER_SUPPORT_LIST_SIGNATURE =
+			"org.eclipse.jface.databinding.viewers.ViewerSupport.bind(org.eclipse.jface.viewers.StructuredViewer,org.eclipse.core.databinding.observable.list.IObservableList,org.eclipse.core.databinding.property.value.IValueProperty[])";
+	private static final String VIEWER_SUPPORT_SET_SIGNATURE =
+			"org.eclipse.jface.databinding.viewers.ViewerSupport.bind(org.eclipse.jface.viewers.StructuredViewer,org.eclipse.core.databinding.observable.set.IObservableSet,org.eclipse.core.databinding.property.value.IValueProperty[])";
+	private static final String BEAN_PROPERTIES_VALUES =
+			"org.eclipse.core.databinding.beans.typed.BeanProperties.values(java.lang.Class,java.lang.String[])";
+	private static final String POJO_PROPERTIES_VALUES =
+			"org.eclipse.core.databinding.beans.typed.PojoProperties.values(java.lang.Class,java.lang.String[])";
+	private static final String OBSERVABLE_VALUE_EDITING_SUPPORT =
+			"org.eclipse.jface.databinding.viewers.ObservableValueEditingSupport.create(org.eclipse.jface.viewers.ColumnViewer,org.eclipse.core.databinding.DataBindingContext,org.eclipse.jface.viewers.CellEditor,org.eclipse.core.databinding.property.value.IValueProperty,org.eclipse.core.databinding.property.value.IValueProperty)";
+	private static final String VIEWER_COLUMN_SET_EDITING_SUPPORT =
+			"org.eclipse.jface.viewers.ViewerColumn.setEditingSupport(org.eclipse.jface.viewers.EditingSupport)";
+	private static final String CELL_EDITOR_PROPERTIES_CONTROL =
+			"org.eclipse.jface.databinding.viewers.CellEditorProperties.control()";
+	//
+	private final Map<WidgetBindableInfo, AbstractViewerInputBindingInfo> m_viewers =
+			Maps.newHashMap();
+	private final DataBindingContextInfo m_contextInfo;
+	private final BeansObserveTypeContainer m_beansContainer;
+	private final WidgetsObserveTypeContainer m_widgetsContainer;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ViewerInputParser(DataBindingContextInfo contextInfo, DatabindingsProvider provider) {
-    m_contextInfo = contextInfo;
-    m_beansContainer = (BeansObserveTypeContainer) provider.getContainer(ObserveType.BEANS);
-    m_widgetsContainer = (WidgetsObserveTypeContainer) provider.getContainer(ObserveType.WIDGETS);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ViewerInputParser(DataBindingContextInfo contextInfo, DatabindingsProvider provider) {
+		m_contextInfo = contextInfo;
+		m_beansContainer = (BeansObserveTypeContainer) provider.getContainer(ObserveType.BEANS);
+		m_widgetsContainer = (WidgetsObserveTypeContainer) provider.getContainer(ObserveType.WIDGETS);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parser
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public AstObjectInfo parseExpression(AstEditor editor,
-      String signature,
-      ClassInstanceCreation creation,
-      Expression[] arguments,
-      IModelResolver resolver,
-      IDatabindingsProvider provider) throws Exception {
-    ITypeBinding binding = AstNodeUtils.getTypeBinding(creation);
-    if (binding == null) {
-      return null;
-    }
-    String className = AstNodeUtils.getFullyQualifiedName(binding, false);
-    //
-    // IObservableFactory
-    //
-    if (AstNodeUtils.isSuccessorOf(
-        binding,
-        "org.eclipse.core.databinding.observable.masterdetail.IObservableFactory")) {
-      // new BeansListObservableFactory(Class, String)
-      //
-      if (AstNodeUtils.isSuccessorOf(
-          binding,
-          "org.eclipse.wb.rcp.databinding.BeansListObservableFactory")) {
-        Assert.isTrue(signature.endsWith("<init>(java.lang.Class,java.lang.String)"));
-        // create factory
-        BeansListObservableFactoryInfo observableFactory =
-            new BeansListObservableFactoryInfo(className);
-        // prepare element type
-        observableFactory.setElementType(CoreUtils.evaluate(Class.class, editor, arguments[0]));
-        // prepare property
-        observableFactory.setPropertyName(CoreUtils.evaluate(String.class, editor, arguments[1]));
-        //
-        return observableFactory;
-      }
-      //
-      // new BeansSetObservableFactory(Class, String)
-      //
-      if (AstNodeUtils.isSuccessorOf(
-          binding,
-          "org.eclipse.wb.rcp.databinding.BeansSetObservableFactory")) {
-        Assert.isTrue(signature.endsWith("<init>(java.lang.Class,java.lang.String)"));
-        // create factory
-        BeansSetObservableFactoryInfo observableFactory =
-            new BeansSetObservableFactoryInfo(className);
-        // prepare element type
-        observableFactory.setElementType(CoreUtils.evaluate(Class.class, editor, arguments[0]));
-        // prepare property
-        observableFactory.setPropertyName(CoreUtils.evaluate(String.class, editor, arguments[1]));
-        //
-        return observableFactory;
-      }
-      // create default factory
-      Assert.isTrue(signature.endsWith("<init>()"));
-      return new ObservableFactoryInfo(className);
-    }
-    //
-    // TreeStructureAdvisor
-    //
-    // new TreeBeanAdvisor(Class, String, String, String)
-    if (AstNodeUtils.isSuccessorOf(binding, "org.eclipse.wb.rcp.databinding.TreeBeanAdvisor")) {
-      Assert.isTrue(signature.endsWith("<init>(java.lang.Class,java.lang.String,java.lang.String,java.lang.String)"));
-      // create advisor
-      TreeBeanAdvisorInfo advisorInfo = new TreeBeanAdvisorInfo();
-      // prepare element type
-      advisorInfo.setElementType(CoreUtils.evaluate(Class.class, editor, arguments[0]));
-      // prepare parent property
-      advisorInfo.setParentProperty(CoreUtils.evaluate(String.class, editor, arguments[1]));
-      // prepare children property
-      advisorInfo.setChildrenProperty(CoreUtils.evaluate(String.class, editor, arguments[2]));
-      // prepare hasChildren property
-      advisorInfo.setHasChildrenProperty(CoreUtils.evaluate(String.class, editor, arguments[3]));
-      //
-      return advisorInfo;
-    }
-    //
-    // new TreeStructureAdvisor()
-    if (AstNodeUtils.isSuccessorOf(
-        binding,
-        "org.eclipse.jface.databinding.viewers.TreeStructureAdvisor")) {
-      Assert.isTrue(signature.endsWith("<init>()"));
-      return new TreeStructureAdvisorInfo(className);
-    }
-    //
-    // Content providers
-    //
-    // new ObservableListContentProvider()
-    if (AstNodeUtils.isSuccessorOf(
-        binding,
-        "org.eclipse.jface.databinding.viewers.ObservableListContentProvider")) {
-      return new ObservableListContentProviderInfo(className);
-    }
-    // new ObservableSetContentProvider()
-    if (AstNodeUtils.isSuccessorOf(
-        binding,
-        "org.eclipse.jface.databinding.viewers.ObservableSetContentProvider")) {
-      return new ObservableSetContentProviderInfo(className);
-    }
-    // new ObservableListTreeContentProvider(IObservableFactory, TreeStructureAdvisor)
-    if (AstNodeUtils.isSuccessorOf(
-        binding,
-        "org.eclipse.jface.databinding.viewers.ObservableListTreeContentProvider")) {
-      Assert.isTrue(signature.endsWith("<init>(org.eclipse.core.databinding.observable.masterdetail.IObservableFactory,org.eclipse.jface.databinding.viewers.TreeStructureAdvisor)"));
-      // prepare factory
-      ObservableFactoryInfo observableFactory =
-          (ObservableFactoryInfo) resolver.getModel(arguments[0]);
-      if (observableFactory == null) {
-        AbstractParser.addError(editor, MessageFormat.format(
-            Messages.ViewerInputParser_objectFactoryArgumentNotFound,
-            arguments[0]), new Throwable());
-        return null;
-      }
-      // prepare advisor
-      TreeStructureAdvisorInfo advisorInfo =
-          (TreeStructureAdvisorInfo) resolver.getModel(arguments[1]);
-      if (advisorInfo == null) {
-        AbstractParser.addError(
-            editor,
-            MessageFormat.format(Messages.ViewerInputParser_advisorArgumentNotFound, arguments[1]),
-            new Throwable());
-        return null;
-      }
-      // create content provider
-      return new ObservableListTreeContentProviderInfo(className, observableFactory, advisorInfo);
-    }
-    // new ObservableSetTreeContentProvider(IObservableFactory, TreeStructureAdvisor)
-    if (AstNodeUtils.isSuccessorOf(
-        binding,
-        "org.eclipse.jface.databinding.viewers.ObservableSetTreeContentProvider")) {
-      Assert.isTrue(signature.endsWith("<init>(org.eclipse.core.databinding.observable.masterdetail.IObservableFactory,org.eclipse.jface.databinding.viewers.TreeStructureAdvisor)"));
-      // prepare factory
-      ObservableFactoryInfo observableFactory =
-          (ObservableFactoryInfo) resolver.getModel(arguments[0]);
-      if (observableFactory == null) {
-        AbstractParser.addError(editor, MessageFormat.format(
-            Messages.ViewerInputParser_objectFactoryArgumentNotFound,
-            arguments[0]), new Throwable());
-        return null;
-      }
-      // prepare advisor
-      TreeStructureAdvisorInfo advisorInfo =
-          (TreeStructureAdvisorInfo) resolver.getModel(arguments[1]);
-      if (advisorInfo == null) {
-        AbstractParser.addError(
-            editor,
-            MessageFormat.format(Messages.ViewerInputParser_advisorArgumentNotFound, arguments[1]),
-            new Throwable());
-        return null;
-      }
-      // create content provider
-      return new ObservableSetTreeContentProviderInfo(className, observableFactory, advisorInfo);
-    }
-    //
-    // Label providers
-    //
-    if (AstNodeUtils.isSuccessorOf(
-        binding,
-        "org.eclipse.jface.databinding.viewers.ObservableMapLabelProvider")
-        || AstNodeUtils.isSuccessorOf(
-            binding,
-            "org.eclipse.jface.databinding.viewers.ObservableMapCellLabelProvider")) {
-      Assert.isTrue(signature.endsWith("<init>(org.eclipse.core.databinding.observable.map.IObservableMap[])")
-          || signature.endsWith("<init>(org.eclipse.core.databinding.observable.map.IObservableMap)"));
-      // prepare maps observable
-      MapsBeanObservableInfo mapsObservable = null;
-      AstObjectInfo astObject = resolver.getModel(arguments[0]);
-      if (astObject instanceof MapsBeanObservableInfo) {
-        mapsObservable = (MapsBeanObservableInfo) astObject;
-      } else if (astObject instanceof DetailBeanObservableInfo) {
-        mapsObservable = new MapsBeanObservableInfo((DetailBeanObservableInfo) astObject);
-      } else {
-        AbstractParser.addError(
-            editor,
-            MessageFormat.format(Messages.ViewerInputParser_argumentNotFound, arguments[0]),
-            new Throwable());
-        return null;
-      }
-      // create label provider
-      return new ObservableMapLabelProviderInfo(className, mapsObservable);
-    }
-    if (AstNodeUtils.isSuccessorOf(
-        binding,
-        "org.eclipse.wb.rcp.databinding.TreeObservableLabelProvider")) {
-      Assert.isTrue(signature.endsWith("<init>(org.eclipse.core.databinding.observable.set.IObservableSet,java.lang.Class,java.lang.String,java.lang.String)"));
-      // prepare allElements observable
-      KnownElementsObservableInfo allElementsObservable =
-          (KnownElementsObservableInfo) resolver.getModel(arguments[0]);
-      if (allElementsObservable == null) {
-        AbstractParser.addError(
-            editor,
-            MessageFormat.format(Messages.ViewerInputParser_argumentNotFound, arguments[0]),
-            new Throwable());
-        return null;
-      }
-      // create label provider
-      TreeObservableLabelProviderInfo labelProvider =
-          new TreeObservableLabelProviderInfo(className, allElementsObservable);
-      // prepare element type
-      labelProvider.setElementType(CoreUtils.evaluate(Class.class, editor, arguments[1]));
-      // prepare text property
-      labelProvider.setTextProperty(CoreUtils.evaluate(String.class, editor, arguments[2]));
-      // prepare image property
-      labelProvider.setImageProperty(CoreUtils.evaluate(String.class, editor, arguments[3]));
-      //
-      return labelProvider;
-    }
-    // default label provider
-    if (AstNodeUtils.isSuccessorOf(binding, "org.eclipse.jface.viewers.IBaseLabelProvider")) {
-      Assert.isTrue(signature.endsWith("<init>()"));
-      return new LabelProviderInfo(className);
-    }
-    //
-    // CellEditor
-    //
-    if (AstNodeUtils.isSuccessorOf(binding, "org.eclipse.jface.viewers.CellEditor")) {
-      return new CellEditorInfo(editor, creation, className);
-    }
-    //
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parser
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public AstObjectInfo parseExpression(AstEditor editor,
+			String signature,
+			ClassInstanceCreation creation,
+			Expression[] arguments,
+			IModelResolver resolver,
+			IDatabindingsProvider provider) throws Exception {
+		ITypeBinding binding = AstNodeUtils.getTypeBinding(creation);
+		if (binding == null) {
+			return null;
+		}
+		String className = AstNodeUtils.getFullyQualifiedName(binding, false);
+		//
+		// IObservableFactory
+		//
+		if (AstNodeUtils.isSuccessorOf(
+				binding,
+				"org.eclipse.core.databinding.observable.masterdetail.IObservableFactory")) {
+			// new BeansListObservableFactory(Class, String)
+			//
+			if (AstNodeUtils.isSuccessorOf(
+					binding,
+					"org.eclipse.wb.rcp.databinding.BeansListObservableFactory")) {
+				Assert.isTrue(signature.endsWith("<init>(java.lang.Class,java.lang.String)"));
+				// create factory
+				BeansListObservableFactoryInfo observableFactory =
+						new BeansListObservableFactoryInfo(className);
+				// prepare element type
+				observableFactory.setElementType(CoreUtils.evaluate(Class.class, editor, arguments[0]));
+				// prepare property
+				observableFactory.setPropertyName(CoreUtils.evaluate(String.class, editor, arguments[1]));
+				//
+				return observableFactory;
+			}
+			//
+			// new BeansSetObservableFactory(Class, String)
+			//
+			if (AstNodeUtils.isSuccessorOf(
+					binding,
+					"org.eclipse.wb.rcp.databinding.BeansSetObservableFactory")) {
+				Assert.isTrue(signature.endsWith("<init>(java.lang.Class,java.lang.String)"));
+				// create factory
+				BeansSetObservableFactoryInfo observableFactory =
+						new BeansSetObservableFactoryInfo(className);
+				// prepare element type
+				observableFactory.setElementType(CoreUtils.evaluate(Class.class, editor, arguments[0]));
+				// prepare property
+				observableFactory.setPropertyName(CoreUtils.evaluate(String.class, editor, arguments[1]));
+				//
+				return observableFactory;
+			}
+			// create default factory
+			Assert.isTrue(signature.endsWith("<init>()"));
+			return new ObservableFactoryInfo(className);
+		}
+		//
+		// TreeStructureAdvisor
+		//
+		// new TreeBeanAdvisor(Class, String, String, String)
+		if (AstNodeUtils.isSuccessorOf(binding, "org.eclipse.wb.rcp.databinding.TreeBeanAdvisor")) {
+			Assert.isTrue(signature.endsWith("<init>(java.lang.Class,java.lang.String,java.lang.String,java.lang.String)"));
+			// create advisor
+			TreeBeanAdvisorInfo advisorInfo = new TreeBeanAdvisorInfo();
+			// prepare element type
+			advisorInfo.setElementType(CoreUtils.evaluate(Class.class, editor, arguments[0]));
+			// prepare parent property
+			advisorInfo.setParentProperty(CoreUtils.evaluate(String.class, editor, arguments[1]));
+			// prepare children property
+			advisorInfo.setChildrenProperty(CoreUtils.evaluate(String.class, editor, arguments[2]));
+			// prepare hasChildren property
+			advisorInfo.setHasChildrenProperty(CoreUtils.evaluate(String.class, editor, arguments[3]));
+			//
+			return advisorInfo;
+		}
+		//
+		// new TreeStructureAdvisor()
+		if (AstNodeUtils.isSuccessorOf(
+				binding,
+				"org.eclipse.jface.databinding.viewers.TreeStructureAdvisor")) {
+			Assert.isTrue(signature.endsWith("<init>()"));
+			return new TreeStructureAdvisorInfo(className);
+		}
+		//
+		// Content providers
+		//
+		// new ObservableListContentProvider()
+		if (AstNodeUtils.isSuccessorOf(
+				binding,
+				"org.eclipse.jface.databinding.viewers.ObservableListContentProvider")) {
+			return new ObservableListContentProviderInfo(className);
+		}
+		// new ObservableSetContentProvider()
+		if (AstNodeUtils.isSuccessorOf(
+				binding,
+				"org.eclipse.jface.databinding.viewers.ObservableSetContentProvider")) {
+			return new ObservableSetContentProviderInfo(className);
+		}
+		// new ObservableListTreeContentProvider(IObservableFactory, TreeStructureAdvisor)
+		if (AstNodeUtils.isSuccessorOf(
+				binding,
+				"org.eclipse.jface.databinding.viewers.ObservableListTreeContentProvider")) {
+			Assert.isTrue(signature.endsWith("<init>(org.eclipse.core.databinding.observable.masterdetail.IObservableFactory,org.eclipse.jface.databinding.viewers.TreeStructureAdvisor)"));
+			// prepare factory
+			ObservableFactoryInfo observableFactory =
+					(ObservableFactoryInfo) resolver.getModel(arguments[0]);
+			if (observableFactory == null) {
+				AbstractParser.addError(editor, MessageFormat.format(
+						Messages.ViewerInputParser_objectFactoryArgumentNotFound,
+						arguments[0]), new Throwable());
+				return null;
+			}
+			// prepare advisor
+			TreeStructureAdvisorInfo advisorInfo =
+					(TreeStructureAdvisorInfo) resolver.getModel(arguments[1]);
+			if (advisorInfo == null) {
+				AbstractParser.addError(
+						editor,
+						MessageFormat.format(Messages.ViewerInputParser_advisorArgumentNotFound, arguments[1]),
+						new Throwable());
+				return null;
+			}
+			// create content provider
+			return new ObservableListTreeContentProviderInfo(className, observableFactory, advisorInfo);
+		}
+		// new ObservableSetTreeContentProvider(IObservableFactory, TreeStructureAdvisor)
+		if (AstNodeUtils.isSuccessorOf(
+				binding,
+				"org.eclipse.jface.databinding.viewers.ObservableSetTreeContentProvider")) {
+			Assert.isTrue(signature.endsWith("<init>(org.eclipse.core.databinding.observable.masterdetail.IObservableFactory,org.eclipse.jface.databinding.viewers.TreeStructureAdvisor)"));
+			// prepare factory
+			ObservableFactoryInfo observableFactory =
+					(ObservableFactoryInfo) resolver.getModel(arguments[0]);
+			if (observableFactory == null) {
+				AbstractParser.addError(editor, MessageFormat.format(
+						Messages.ViewerInputParser_objectFactoryArgumentNotFound,
+						arguments[0]), new Throwable());
+				return null;
+			}
+			// prepare advisor
+			TreeStructureAdvisorInfo advisorInfo =
+					(TreeStructureAdvisorInfo) resolver.getModel(arguments[1]);
+			if (advisorInfo == null) {
+				AbstractParser.addError(
+						editor,
+						MessageFormat.format(Messages.ViewerInputParser_advisorArgumentNotFound, arguments[1]),
+						new Throwable());
+				return null;
+			}
+			// create content provider
+			return new ObservableSetTreeContentProviderInfo(className, observableFactory, advisorInfo);
+		}
+		//
+		// Label providers
+		//
+		if (AstNodeUtils.isSuccessorOf(
+				binding,
+				"org.eclipse.jface.databinding.viewers.ObservableMapLabelProvider")
+				|| AstNodeUtils.isSuccessorOf(
+						binding,
+						"org.eclipse.jface.databinding.viewers.ObservableMapCellLabelProvider")) {
+			Assert.isTrue(signature.endsWith("<init>(org.eclipse.core.databinding.observable.map.IObservableMap[])")
+					|| signature.endsWith("<init>(org.eclipse.core.databinding.observable.map.IObservableMap)"));
+			// prepare maps observable
+			MapsBeanObservableInfo mapsObservable = null;
+			AstObjectInfo astObject = resolver.getModel(arguments[0]);
+			if (astObject instanceof MapsBeanObservableInfo) {
+				mapsObservable = (MapsBeanObservableInfo) astObject;
+			} else if (astObject instanceof DetailBeanObservableInfo) {
+				mapsObservable = new MapsBeanObservableInfo((DetailBeanObservableInfo) astObject);
+			} else {
+				AbstractParser.addError(
+						editor,
+						MessageFormat.format(Messages.ViewerInputParser_argumentNotFound, arguments[0]),
+						new Throwable());
+				return null;
+			}
+			// create label provider
+			return new ObservableMapLabelProviderInfo(className, mapsObservable);
+		}
+		if (AstNodeUtils.isSuccessorOf(
+				binding,
+				"org.eclipse.wb.rcp.databinding.TreeObservableLabelProvider")) {
+			Assert.isTrue(signature.endsWith("<init>(org.eclipse.core.databinding.observable.set.IObservableSet,java.lang.Class,java.lang.String,java.lang.String)"));
+			// prepare allElements observable
+			KnownElementsObservableInfo allElementsObservable =
+					(KnownElementsObservableInfo) resolver.getModel(arguments[0]);
+			if (allElementsObservable == null) {
+				AbstractParser.addError(
+						editor,
+						MessageFormat.format(Messages.ViewerInputParser_argumentNotFound, arguments[0]),
+						new Throwable());
+				return null;
+			}
+			// create label provider
+			TreeObservableLabelProviderInfo labelProvider =
+					new TreeObservableLabelProviderInfo(className, allElementsObservable);
+			// prepare element type
+			labelProvider.setElementType(CoreUtils.evaluate(Class.class, editor, arguments[1]));
+			// prepare text property
+			labelProvider.setTextProperty(CoreUtils.evaluate(String.class, editor, arguments[2]));
+			// prepare image property
+			labelProvider.setImageProperty(CoreUtils.evaluate(String.class, editor, arguments[3]));
+			//
+			return labelProvider;
+		}
+		// default label provider
+		if (AstNodeUtils.isSuccessorOf(binding, "org.eclipse.jface.viewers.IBaseLabelProvider")) {
+			Assert.isTrue(signature.endsWith("<init>()"));
+			return new LabelProviderInfo(className);
+		}
+		//
+		// CellEditor
+		//
+		if (AstNodeUtils.isSuccessorOf(binding, "org.eclipse.jface.viewers.CellEditor")) {
+			return new CellEditorInfo(editor, creation, className);
+		}
+		//
+		return null;
+	}
 
-  @Override
-  public AstObjectInfo parseExpression(AstEditor editor,
-      String signature,
-      MethodInvocation invocation,
-      Expression[] arguments,
-      IModelResolver resolver) throws Exception {
-    if (signature.endsWith("setContentProvider(org.eclipse.jface.viewers.IContentProvider)")) {
-      // prepare viewer
-      WidgetBindableInfo viewerBindable =
-          m_widgetsContainer.getBindableWidget(invocation.getExpression());
-      if (viewerBindable == null) {
-        AbstractParser.addError(
-            editor,
-            MessageFormat.format(
-                Messages.ViewerInputParser_viewerNotFound,
-                invocation.getExpression()),
-            new Throwable());
-        return null;
-      }
-      // prepare binding
-      AbstractViewerInputBindingInfo viewerBinding = getViewerBindingInfo(viewerBindable);
-      if (viewerBinding == null) {
-        AbstractParser.addError(
-            editor,
-            MessageFormat.format(
-                Messages.ViewerInputParser_modelViewerNotFound,
-                invocation.getExpression()),
-            new Throwable());
-        return null;
-      }
-      //
-      if (viewerBinding instanceof TreeViewerInputBindingInfo) {
-        // prepare content provider
-        ObservableCollectionTreeContentProviderInfo contentProvider =
-            (ObservableCollectionTreeContentProviderInfo) resolver.getModel(arguments[0]);
-        if (contentProvider == null) {
-          AbstractParser.addError(
-              editor,
-              MessageFormat.format(Messages.ViewerInputParser_contentProviderNotFound, arguments[0]),
-              new Throwable());
-          return null;
-        }
-        TreeViewerInputBindingInfo viewerInputBinding = (TreeViewerInputBindingInfo) viewerBinding;
-        viewerInputBinding.setContentProvider(contentProvider);
-      } else if (viewerBinding instanceof ViewerInputBindingInfo) {
-        // prepare content provider
-        ObservableCollectionContentProviderInfo contentProvider =
-            (ObservableCollectionContentProviderInfo) resolver.getModel(arguments[0]);
-        if (contentProvider == null) {
-          AbstractParser.addError(
-              editor,
-              MessageFormat.format(Messages.ViewerInputParser_contentProviderNotFound, arguments[0]),
-              new Throwable());
-          return null;
-        }
-        ViewerInputBindingInfo viewerInputBinding = (ViewerInputBindingInfo) viewerBinding;
-        viewerInputBinding.setContentProvider(contentProvider);
-      } else {
-        AbstractParser.addError(
-            editor,
-            MessageFormat.format(Messages.ViewerInputParser_contentProviderNotFound, arguments[0]),
-            new Throwable());
-        return null;
-      }
-    } else if (signature.endsWith("setLabelProvider(org.eclipse.jface.viewers.IBaseLabelProvider)")) {
-      // prepare viewer
-      WidgetBindableInfo viewerBindable =
-          m_widgetsContainer.getBindableWidget(invocation.getExpression());
-      if (viewerBindable == null) {
-        AbstractParser.addError(
-            editor,
-            MessageFormat.format(
-                Messages.ViewerInputParser_viewerNotFound,
-                invocation.getExpression()),
-            new Throwable());
-        return null;
-      }
-      // prepare binding
-      AbstractViewerInputBindingInfo viewerBinding = getViewerBindingInfo(viewerBindable);
-      if (viewerBinding == null) {
-        AbstractParser.addError(
-            editor,
-            MessageFormat.format(
-                Messages.ViewerInputParser_modelViewerNotFound,
-                invocation.getExpression()),
-            new Throwable());
-        return null;
-      }
-      //
-      if (viewerBinding instanceof ViewerInputBindingInfo) {
-        // prepare label provider
-        ObservableMapLabelProviderInfo labelProvider =
-            (ObservableMapLabelProviderInfo) resolver.getModel(arguments[0]);
-        if (labelProvider == null) {
-          AbstractParser.addError(editor, MessageFormat.format(
-              Messages.ViewerInputParser_labelProviderArgumentNotFound,
-              arguments[0]), new Throwable());
-          //
-          m_viewers.remove(viewerBindable);
-          m_contextInfo.getBindings().remove(viewerBinding);
-          //
-          return null;
-        }
-        // sets label provider
-        ViewerInputBindingInfo viewerInputBinding = (ViewerInputBindingInfo) viewerBinding;
-        viewerInputBinding.setLabelProvider(labelProvider);
-      } else if (viewerBinding instanceof TreeViewerInputBindingInfo) {
-        // prepare label provider
-        AbstractLabelProviderInfo labelProvider =
-            (AbstractLabelProviderInfo) resolver.getModel(arguments[0]);
-        if (labelProvider == null) {
-          AbstractParser.addError(editor, MessageFormat.format(
-              Messages.ViewerInputParser_labelProviderArgumentNotFound,
-              arguments[0]), new Throwable());
-          //
-          m_viewers.remove(viewerBindable);
-          m_contextInfo.getBindings().remove(viewerBinding);
-          //
-          return null;
-        }
-        // sets label provider
-        TreeViewerInputBindingInfo viewerInputBinding = (TreeViewerInputBindingInfo) viewerBinding;
-        viewerInputBinding.setLabelProvider(labelProvider);
-      } else {
-        AbstractParser.addError(editor, MessageFormat.format(
-            Messages.ViewerInputParser_labelProviderArgumentNotFound,
-            arguments[0]), new Throwable());
-        return null;
-      }
-    } else if (signature.endsWith("setInput(java.lang.Object)")) {
-      // prepare viewer
-      WidgetBindableInfo viewerBindable =
-          m_widgetsContainer.getBindableWidget(invocation.getExpression());
-      if (viewerBindable == null) {
-        AbstractParser.addError(
-            editor,
-            MessageFormat.format(
-                Messages.ViewerInputParser_viewerNotFound,
-                invocation.getExpression()),
-            new Throwable());
-        return null;
-      }
-      // prepare binding
-      AbstractViewerInputBindingInfo viewerBinding = m_viewers.get(viewerBindable);
-      if (viewerBinding == null) {
-        AbstractParser.addError(
-            editor,
-            MessageFormat.format(
-                Messages.ViewerInputParser_viewerInputModelNotFound,
-                invocation.getExpression()),
-            new Throwable());
-        return null;
-      }
-      // prepare input observable
-      ObservableInfo inputObservable = (ObservableInfo) resolver.getModel(arguments[0]);
-      if (inputObservable == null) {
-        //
-        if (viewerBinding instanceof TreeViewerInputBindingInfo) {
-          BeanBindableInfo bindableObject = m_beansContainer.getBindableObject(arguments[0]);
-          if (bindableObject != null) {
-            TreeViewerInputBindingInfo treeViewerBinding =
-                (TreeViewerInputBindingInfo) viewerBinding;
-            ObservableFactoryInfo factoryInfo =
-                treeViewerBinding.getContentProvider().getFactoryInfo();
-            //
-            if (factoryInfo instanceof BeansObservableFactoryInfo) {
-              BeansObservableFactoryInfo beansFactoryInfo =
-                  (BeansObservableFactoryInfo) factoryInfo;
-              String propertyName = beansFactoryInfo.getPropertyName();
-              PropertyBindableInfo propertyObject =
-                  propertyName == null
-                      ? null
-                      : bindableObject.resolvePropertyReference(propertyName);
-              //
-              if (propertyObject != null) {
-                inputObservable = new BeanFieldInputObservableInfo(bindableObject, propertyObject);
-              }
-            }
-          }
-        }
-        //
-        if (inputObservable == null) {
-          AbstractParser.addError(editor, MessageFormat.format(
-              Messages.ViewerInputParser_viewerInputArgumentNotFound,
-              arguments[0]), new Throwable());
-          //
-          m_viewers.remove(viewerBindable);
-          m_contextInfo.getBindings().remove(viewerBinding);
-          //
-          return null;
-        }
-      }
-      // sets input observable
-      viewerBinding.setInputObservable(inputObservable);
-    } else if (VIEWER_SUPPORT_LIST_SIGNATURE.equals(signature)
-        || VIEWER_SUPPORT_SET_SIGNATURE.equals(signature)) {
-      // prepare viewer
-      WidgetBindableInfo viewerBindable = m_widgetsContainer.getBindableWidget(arguments[0]);
-      if (viewerBindable == null) {
-        AbstractParser.addError(
-            editor,
-            MessageFormat.format(Messages.ViewerInputParser_viewerNotFound, arguments[0]),
-            new Throwable());
-        return null;
-      }
-      if (m_viewers.get(viewerBindable) != null) {
-        AbstractParser.addError(editor, MessageFormat.format(
-            Messages.ViewerInputParser_viewerDoubleInvocation,
-            invocation,
-            arguments[0]), new Throwable());
-        return null;
-      }
-      // prepare input observable
-      ObservableInfo inputObservable = (ObservableInfo) resolver.getModel(arguments[1]);
-      if (inputObservable == null) {
-        AbstractParser.addError(editor, MessageFormat.format(
-            Messages.ViewerInputParser_viewerInputArgumentNotFound,
-            arguments[1]), new Throwable());
-        return null;
-      }
-      // prepare label provider properties
-      Assert.instanceOf(MethodInvocation.class, arguments[2]);
-      MethodInvocation labelPropertiesMethod = (MethodInvocation) arguments[2];
-      String labelPropertiesSignature = CoreUtils.getMethodSignature(labelPropertiesMethod);
-      Assert.isTrue(BEAN_PROPERTIES_VALUES.equals(labelPropertiesSignature)
-          || POJO_PROPERTIES_VALUES.equals(labelPropertiesSignature));
-      List<Expression> labelPropertiesArguments = DomGenerics.arguments(labelPropertiesMethod);
-      // prepare element type
-      Class<?> elementType =
-          CoreUtils.evaluate(Class.class, editor, labelPropertiesArguments.get(0));
-      // prepare properties
-      String[] properties =
-          CoreUtils.evaluate(String[].class, editor, labelPropertiesArguments.get(1));
-      // create binding
-      ViewerInputBindingInfo viewerBinding = new ViewerInputBindingInfo(viewerBindable);
-      viewerBinding.setInputObservable(inputObservable);
-      viewerBinding.setDefaultProviders(
-          VIEWER_SUPPORT_LIST_SIGNATURE.equals(signature),
-          elementType,
-          true);
-      viewerBinding.getLabelProvider().getMapsObservable().setProperties(properties);
-      // add binding
-      m_contextInfo.getBindings().add(viewerBinding);
-      m_viewers.put(viewerBindable, viewerBinding);
-    } else if (OBSERVABLE_VALUE_EDITING_SUPPORT.equals(signature)) {
-      // prepare viewer
-      WidgetBindableInfo viewerBindable = m_widgetsContainer.getBindableWidget(arguments[0]);
-      if (viewerBindable == null) {
-        AbstractParser.addError(
-            editor,
-            MessageFormat.format(Messages.ViewerInputParser_viewerNotFound, arguments[0]),
-            new Throwable());
-        return null;
-      }
-      //
-      AbstractViewerInputBindingInfo viewerBinding = m_viewers.get(viewerBindable);
-      if (viewerBinding == null) {
-        AbstractParser.addError(
-            editor,
-            MessageFormat.format(Messages.ViewerInputParser_viewerNotFound, arguments[0]),
-            new Throwable());
-        return null;
-      }
-      // prepare context
-      DataBindingContextInfo bindingContextInfo =
-          (DataBindingContextInfo) resolver.getModel(arguments[1]);
-      if (bindingContextInfo != m_contextInfo) {
-        AbstractParser.addError(editor, MessageFormat.format(
-            Messages.ViewerInputParser_undefinedDataBindingContext,
-            arguments[1]), new Throwable());
-        return null;
-      }
-      // prepare CellEditor
-      CellEditorInfo cellEditorInfo = (CellEditorInfo) resolver.getModel(arguments[2]);
-      if (cellEditorInfo == null) {
-        AbstractParser.addError(
-            editor,
-            MessageFormat.format(Messages.ViewerInputParser_cellEditorNotFound, arguments[2]),
-            new Throwable());
-        return null;
-      }
-      // prepare CellEditor property
-      CellEditorValuePropertyCodeSupport cellEditorProperty = null;
-      AstObjectInfo cellEditorPropertyInfo = resolver.getModel(arguments[3]);
-      //
-      if (cellEditorPropertyInfo instanceof CellEditorValuePropertyCodeSupport) {
-        cellEditorProperty = (CellEditorValuePropertyCodeSupport) cellEditorPropertyInfo;
-      } else if (cellEditorPropertyInfo instanceof ValuePropertyCodeSupport) {
-        ValuePropertyCodeSupport value = (ValuePropertyCodeSupport) cellEditorPropertyInfo;
-        cellEditorProperty = new CellEditorValuePropertyCodeSupport(value);
-      }
-      //
-      if (cellEditorProperty == null) {
-        AbstractParser.addError(editor, MessageFormat.format(
-            Messages.ViewerInputParser_cellEditorPropertyNotFound,
-            arguments[3]), new Throwable());
-        return null;
-      }
-      // prepare element property
-      ValuePropertyCodeSupport elementProperty =
-          (ValuePropertyCodeSupport) resolver.getModel(arguments[4]);
-      if (elementProperty == null) {
-        AbstractParser.addError(
-            editor,
-            MessageFormat.format(Messages.ViewerInputParser_elementPropertyNotFound, arguments[4]),
-            new Throwable());
-        return null;
-      }
-      //
-      return new EditingSupportInfo(viewerBinding,
-          cellEditorInfo,
-          cellEditorProperty,
-          elementProperty);
-    } else if (VIEWER_COLUMN_SET_EDITING_SUPPORT.equals(signature)) {
-      // prepare viewer column
-      WidgetBindableInfo viewerColumnBindable =
-          m_widgetsContainer.getBindableWidget(invocation.getExpression());
-      if (viewerColumnBindable == null) {
-        AbstractParser.addError(
-            editor,
-            MessageFormat.format(
-                Messages.ViewerInputParser_viewerColumnNotFound,
-                invocation.getExpression()),
-            new Throwable());
-        return null;
-      }
-      // prepare support
-      EditingSupportInfo editingSupportInfo = (EditingSupportInfo) resolver.getModel(arguments[0]);
-      if (editingSupportInfo == null) {
-        AbstractParser.addError(
-            editor,
-            MessageFormat.format(Messages.ViewerInputParser_editingSupportNotFound, arguments[0]),
-            new Throwable());
-        return null;
-      }
-      //
-      editingSupportInfo.setViewerColumn(viewerColumnBindable);
-    } else if (CELL_EDITOR_PROPERTIES_CONTROL.equals(signature)) {
-      // CellEditor
-      return new CellEditorControlPropertyCodeSupport();
-    }
-    return null;
-  }
+	@Override
+	public AstObjectInfo parseExpression(AstEditor editor,
+			String signature,
+			MethodInvocation invocation,
+			Expression[] arguments,
+			IModelResolver resolver) throws Exception {
+		if (signature.endsWith("setContentProvider(org.eclipse.jface.viewers.IContentProvider)")) {
+			// prepare viewer
+			WidgetBindableInfo viewerBindable =
+					m_widgetsContainer.getBindableWidget(invocation.getExpression());
+			if (viewerBindable == null) {
+				AbstractParser.addError(
+						editor,
+						MessageFormat.format(
+								Messages.ViewerInputParser_viewerNotFound,
+								invocation.getExpression()),
+						new Throwable());
+				return null;
+			}
+			// prepare binding
+			AbstractViewerInputBindingInfo viewerBinding = getViewerBindingInfo(viewerBindable);
+			if (viewerBinding == null) {
+				AbstractParser.addError(
+						editor,
+						MessageFormat.format(
+								Messages.ViewerInputParser_modelViewerNotFound,
+								invocation.getExpression()),
+						new Throwable());
+				return null;
+			}
+			//
+			if (viewerBinding instanceof TreeViewerInputBindingInfo) {
+				// prepare content provider
+				ObservableCollectionTreeContentProviderInfo contentProvider =
+						(ObservableCollectionTreeContentProviderInfo) resolver.getModel(arguments[0]);
+				if (contentProvider == null) {
+					AbstractParser.addError(
+							editor,
+							MessageFormat.format(Messages.ViewerInputParser_contentProviderNotFound, arguments[0]),
+							new Throwable());
+					return null;
+				}
+				TreeViewerInputBindingInfo viewerInputBinding = (TreeViewerInputBindingInfo) viewerBinding;
+				viewerInputBinding.setContentProvider(contentProvider);
+			} else if (viewerBinding instanceof ViewerInputBindingInfo) {
+				// prepare content provider
+				ObservableCollectionContentProviderInfo contentProvider =
+						(ObservableCollectionContentProviderInfo) resolver.getModel(arguments[0]);
+				if (contentProvider == null) {
+					AbstractParser.addError(
+							editor,
+							MessageFormat.format(Messages.ViewerInputParser_contentProviderNotFound, arguments[0]),
+							new Throwable());
+					return null;
+				}
+				ViewerInputBindingInfo viewerInputBinding = (ViewerInputBindingInfo) viewerBinding;
+				viewerInputBinding.setContentProvider(contentProvider);
+			} else {
+				AbstractParser.addError(
+						editor,
+						MessageFormat.format(Messages.ViewerInputParser_contentProviderNotFound, arguments[0]),
+						new Throwable());
+				return null;
+			}
+		} else if (signature.endsWith("setLabelProvider(org.eclipse.jface.viewers.IBaseLabelProvider)")) {
+			// prepare viewer
+			WidgetBindableInfo viewerBindable =
+					m_widgetsContainer.getBindableWidget(invocation.getExpression());
+			if (viewerBindable == null) {
+				AbstractParser.addError(
+						editor,
+						MessageFormat.format(
+								Messages.ViewerInputParser_viewerNotFound,
+								invocation.getExpression()),
+						new Throwable());
+				return null;
+			}
+			// prepare binding
+			AbstractViewerInputBindingInfo viewerBinding = getViewerBindingInfo(viewerBindable);
+			if (viewerBinding == null) {
+				AbstractParser.addError(
+						editor,
+						MessageFormat.format(
+								Messages.ViewerInputParser_modelViewerNotFound,
+								invocation.getExpression()),
+						new Throwable());
+				return null;
+			}
+			//
+			if (viewerBinding instanceof ViewerInputBindingInfo) {
+				// prepare label provider
+				ObservableMapLabelProviderInfo labelProvider =
+						(ObservableMapLabelProviderInfo) resolver.getModel(arguments[0]);
+				if (labelProvider == null) {
+					AbstractParser.addError(editor, MessageFormat.format(
+							Messages.ViewerInputParser_labelProviderArgumentNotFound,
+							arguments[0]), new Throwable());
+					//
+					m_viewers.remove(viewerBindable);
+					m_contextInfo.getBindings().remove(viewerBinding);
+					//
+					return null;
+				}
+				// sets label provider
+				ViewerInputBindingInfo viewerInputBinding = (ViewerInputBindingInfo) viewerBinding;
+				viewerInputBinding.setLabelProvider(labelProvider);
+			} else if (viewerBinding instanceof TreeViewerInputBindingInfo) {
+				// prepare label provider
+				AbstractLabelProviderInfo labelProvider =
+						(AbstractLabelProviderInfo) resolver.getModel(arguments[0]);
+				if (labelProvider == null) {
+					AbstractParser.addError(editor, MessageFormat.format(
+							Messages.ViewerInputParser_labelProviderArgumentNotFound,
+							arguments[0]), new Throwable());
+					//
+					m_viewers.remove(viewerBindable);
+					m_contextInfo.getBindings().remove(viewerBinding);
+					//
+					return null;
+				}
+				// sets label provider
+				TreeViewerInputBindingInfo viewerInputBinding = (TreeViewerInputBindingInfo) viewerBinding;
+				viewerInputBinding.setLabelProvider(labelProvider);
+			} else {
+				AbstractParser.addError(editor, MessageFormat.format(
+						Messages.ViewerInputParser_labelProviderArgumentNotFound,
+						arguments[0]), new Throwable());
+				return null;
+			}
+		} else if (signature.endsWith("setInput(java.lang.Object)")) {
+			// prepare viewer
+			WidgetBindableInfo viewerBindable =
+					m_widgetsContainer.getBindableWidget(invocation.getExpression());
+			if (viewerBindable == null) {
+				AbstractParser.addError(
+						editor,
+						MessageFormat.format(
+								Messages.ViewerInputParser_viewerNotFound,
+								invocation.getExpression()),
+						new Throwable());
+				return null;
+			}
+			// prepare binding
+			AbstractViewerInputBindingInfo viewerBinding = m_viewers.get(viewerBindable);
+			if (viewerBinding == null) {
+				AbstractParser.addError(
+						editor,
+						MessageFormat.format(
+								Messages.ViewerInputParser_viewerInputModelNotFound,
+								invocation.getExpression()),
+						new Throwable());
+				return null;
+			}
+			// prepare input observable
+			ObservableInfo inputObservable = (ObservableInfo) resolver.getModel(arguments[0]);
+			if (inputObservable == null) {
+				//
+				if (viewerBinding instanceof TreeViewerInputBindingInfo) {
+					BeanBindableInfo bindableObject = m_beansContainer.getBindableObject(arguments[0]);
+					if (bindableObject != null) {
+						TreeViewerInputBindingInfo treeViewerBinding =
+								(TreeViewerInputBindingInfo) viewerBinding;
+						ObservableFactoryInfo factoryInfo =
+								treeViewerBinding.getContentProvider().getFactoryInfo();
+						//
+						if (factoryInfo instanceof BeansObservableFactoryInfo) {
+							BeansObservableFactoryInfo beansFactoryInfo =
+									(BeansObservableFactoryInfo) factoryInfo;
+							String propertyName = beansFactoryInfo.getPropertyName();
+							PropertyBindableInfo propertyObject =
+									propertyName == null
+									? null
+											: bindableObject.resolvePropertyReference(propertyName);
+							//
+							if (propertyObject != null) {
+								inputObservable = new BeanFieldInputObservableInfo(bindableObject, propertyObject);
+							}
+						}
+					}
+				}
+				//
+				if (inputObservable == null) {
+					AbstractParser.addError(editor, MessageFormat.format(
+							Messages.ViewerInputParser_viewerInputArgumentNotFound,
+							arguments[0]), new Throwable());
+					//
+					m_viewers.remove(viewerBindable);
+					m_contextInfo.getBindings().remove(viewerBinding);
+					//
+					return null;
+				}
+			}
+			// sets input observable
+			viewerBinding.setInputObservable(inputObservable);
+		} else if (VIEWER_SUPPORT_LIST_SIGNATURE.equals(signature)
+				|| VIEWER_SUPPORT_SET_SIGNATURE.equals(signature)) {
+			// prepare viewer
+			WidgetBindableInfo viewerBindable = m_widgetsContainer.getBindableWidget(arguments[0]);
+			if (viewerBindable == null) {
+				AbstractParser.addError(
+						editor,
+						MessageFormat.format(Messages.ViewerInputParser_viewerNotFound, arguments[0]),
+						new Throwable());
+				return null;
+			}
+			if (m_viewers.get(viewerBindable) != null) {
+				AbstractParser.addError(editor, MessageFormat.format(
+						Messages.ViewerInputParser_viewerDoubleInvocation,
+						invocation,
+						arguments[0]), new Throwable());
+				return null;
+			}
+			// prepare input observable
+			ObservableInfo inputObservable = (ObservableInfo) resolver.getModel(arguments[1]);
+			if (inputObservable == null) {
+				AbstractParser.addError(editor, MessageFormat.format(
+						Messages.ViewerInputParser_viewerInputArgumentNotFound,
+						arguments[1]), new Throwable());
+				return null;
+			}
+			// prepare label provider properties
+			Assert.instanceOf(MethodInvocation.class, arguments[2]);
+			MethodInvocation labelPropertiesMethod = (MethodInvocation) arguments[2];
+			String labelPropertiesSignature = CoreUtils.getMethodSignature(labelPropertiesMethod);
+			Assert.isTrue(BEAN_PROPERTIES_VALUES.equals(labelPropertiesSignature)
+					|| POJO_PROPERTIES_VALUES.equals(labelPropertiesSignature));
+			List<Expression> labelPropertiesArguments = DomGenerics.arguments(labelPropertiesMethod);
+			// prepare element type
+			Class<?> elementType =
+					CoreUtils.evaluate(Class.class, editor, labelPropertiesArguments.get(0));
+			// prepare properties
+			String[] properties =
+					CoreUtils.evaluate(String[].class, editor, labelPropertiesArguments.get(1));
+			// create binding
+			ViewerInputBindingInfo viewerBinding = new ViewerInputBindingInfo(viewerBindable);
+			viewerBinding.setInputObservable(inputObservable);
+			viewerBinding.setDefaultProviders(
+					VIEWER_SUPPORT_LIST_SIGNATURE.equals(signature),
+					elementType,
+					true);
+			viewerBinding.getLabelProvider().getMapsObservable().setProperties(properties);
+			// add binding
+			m_contextInfo.getBindings().add(viewerBinding);
+			m_viewers.put(viewerBindable, viewerBinding);
+		} else if (OBSERVABLE_VALUE_EDITING_SUPPORT.equals(signature)) {
+			// prepare viewer
+			WidgetBindableInfo viewerBindable = m_widgetsContainer.getBindableWidget(arguments[0]);
+			if (viewerBindable == null) {
+				AbstractParser.addError(
+						editor,
+						MessageFormat.format(Messages.ViewerInputParser_viewerNotFound, arguments[0]),
+						new Throwable());
+				return null;
+			}
+			//
+			AbstractViewerInputBindingInfo viewerBinding = m_viewers.get(viewerBindable);
+			if (viewerBinding == null) {
+				AbstractParser.addError(
+						editor,
+						MessageFormat.format(Messages.ViewerInputParser_viewerNotFound, arguments[0]),
+						new Throwable());
+				return null;
+			}
+			// prepare context
+			DataBindingContextInfo bindingContextInfo =
+					(DataBindingContextInfo) resolver.getModel(arguments[1]);
+			if (bindingContextInfo != m_contextInfo) {
+				AbstractParser.addError(editor, MessageFormat.format(
+						Messages.ViewerInputParser_undefinedDataBindingContext,
+						arguments[1]), new Throwable());
+				return null;
+			}
+			// prepare CellEditor
+			CellEditorInfo cellEditorInfo = (CellEditorInfo) resolver.getModel(arguments[2]);
+			if (cellEditorInfo == null) {
+				AbstractParser.addError(
+						editor,
+						MessageFormat.format(Messages.ViewerInputParser_cellEditorNotFound, arguments[2]),
+						new Throwable());
+				return null;
+			}
+			// prepare CellEditor property
+			CellEditorValuePropertyCodeSupport cellEditorProperty = null;
+			AstObjectInfo cellEditorPropertyInfo = resolver.getModel(arguments[3]);
+			//
+			if (cellEditorPropertyInfo instanceof CellEditorValuePropertyCodeSupport) {
+				cellEditorProperty = (CellEditorValuePropertyCodeSupport) cellEditorPropertyInfo;
+			} else if (cellEditorPropertyInfo instanceof ValuePropertyCodeSupport) {
+				ValuePropertyCodeSupport value = (ValuePropertyCodeSupport) cellEditorPropertyInfo;
+				cellEditorProperty = new CellEditorValuePropertyCodeSupport(value);
+			}
+			//
+			if (cellEditorProperty == null) {
+				AbstractParser.addError(editor, MessageFormat.format(
+						Messages.ViewerInputParser_cellEditorPropertyNotFound,
+						arguments[3]), new Throwable());
+				return null;
+			}
+			// prepare element property
+			ValuePropertyCodeSupport elementProperty =
+					(ValuePropertyCodeSupport) resolver.getModel(arguments[4]);
+			if (elementProperty == null) {
+				AbstractParser.addError(
+						editor,
+						MessageFormat.format(Messages.ViewerInputParser_elementPropertyNotFound, arguments[4]),
+						new Throwable());
+				return null;
+			}
+			//
+			return new EditingSupportInfo(viewerBinding,
+					cellEditorInfo,
+					cellEditorProperty,
+					elementProperty);
+		} else if (VIEWER_COLUMN_SET_EDITING_SUPPORT.equals(signature)) {
+			// prepare viewer column
+			WidgetBindableInfo viewerColumnBindable =
+					m_widgetsContainer.getBindableWidget(invocation.getExpression());
+			if (viewerColumnBindable == null) {
+				AbstractParser.addError(
+						editor,
+						MessageFormat.format(
+								Messages.ViewerInputParser_viewerColumnNotFound,
+								invocation.getExpression()),
+						new Throwable());
+				return null;
+			}
+			// prepare support
+			EditingSupportInfo editingSupportInfo = (EditingSupportInfo) resolver.getModel(arguments[0]);
+			if (editingSupportInfo == null) {
+				AbstractParser.addError(
+						editor,
+						MessageFormat.format(Messages.ViewerInputParser_editingSupportNotFound, arguments[0]),
+						new Throwable());
+				return null;
+			}
+			//
+			editingSupportInfo.setViewerColumn(viewerColumnBindable);
+		} else if (CELL_EDITOR_PROPERTIES_CONTROL.equals(signature)) {
+			// CellEditor
+			return new CellEditorControlPropertyCodeSupport();
+		}
+		return null;
+	}
 
-  private AbstractViewerInputBindingInfo getViewerBindingInfo(WidgetBindableInfo viewerBindable)
-      throws Exception {
-    AbstractViewerInputBindingInfo viewerBinding = m_viewers.get(viewerBindable);
-    if (viewerBinding == null) {
-      // create binding
-      if (ReflectionUtils.isSuccessorOf(
-          viewerBindable.getObjectType(),
-          "org.eclipse.jface.viewers.AbstractTreeViewer")) {
-        viewerBinding = new TreeViewerInputBindingInfo(viewerBindable);
-      } else {
-        viewerBinding = new ViewerInputBindingInfo(viewerBindable);
-      }
-      // add binding
-      m_contextInfo.getBindings().add(viewerBinding);
-      m_viewers.put(viewerBindable, viewerBinding);
-    }
-    return viewerBinding;
-  }
+	private AbstractViewerInputBindingInfo getViewerBindingInfo(WidgetBindableInfo viewerBindable)
+			throws Exception {
+		AbstractViewerInputBindingInfo viewerBinding = m_viewers.get(viewerBindable);
+		if (viewerBinding == null) {
+			// create binding
+			if (ReflectionUtils.isSuccessorOf(
+					viewerBindable.getObjectType(),
+					"org.eclipse.jface.viewers.AbstractTreeViewer")) {
+				viewerBinding = new TreeViewerInputBindingInfo(viewerBindable);
+			} else {
+				viewerBinding = new ViewerInputBindingInfo(viewerBindable);
+			}
+			// add binding
+			m_contextInfo.getBindings().add(viewerBinding);
+			m_viewers.put(viewerBindable, viewerBinding);
+		}
+		return viewerBinding;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/VirtualEditingSupportInfo.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/VirtualEditingSupportInfo.java
index 0b5c27850..8e42d34dd 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/VirtualEditingSupportInfo.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/VirtualEditingSupportInfo.java
@@ -44,333 +44,333 @@
  * @coverage bindings.rcp.model.widgets
  */
 public final class VirtualEditingSupportInfo {
-  private final IElementTypeProvider m_elementTypeProvider;
-  private final AbstractViewerInputBindingInfo m_viewerBinding;
-  private final WidgetBindableInfo m_viewerColumn;
-  private EditingSupportInfo m_editingSupport;
-  private String m_cellEditorClassName;
-  private String m_cellEditorProperty;
-  private String m_elementProperty;
+	private final IElementTypeProvider m_elementTypeProvider;
+	private final AbstractViewerInputBindingInfo m_viewerBinding;
+	private final WidgetBindableInfo m_viewerColumn;
+	private EditingSupportInfo m_editingSupport;
+	private String m_cellEditorClassName;
+	private String m_cellEditorProperty;
+	private String m_elementProperty;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public VirtualEditingSupportInfo(IElementTypeProvider elementTypeProvider,
-      EditingSupportInfo editingSupport) throws Exception {
-    this(elementTypeProvider, editingSupport.getViewerBinding(), editingSupport.getViewerColumn());
-    m_editingSupport = editingSupport;
-    m_cellEditorClassName = m_editingSupport.getCellEditorInfo().getClassName();
-    m_cellEditorProperty = m_editingSupport.getCellEditorProperty().getParsePropertyReference();
-    m_elementProperty = m_editingSupport.getElementProperty().getParserPropertyReference();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public VirtualEditingSupportInfo(IElementTypeProvider elementTypeProvider,
+			EditingSupportInfo editingSupport) throws Exception {
+		this(elementTypeProvider, editingSupport.getViewerBinding(), editingSupport.getViewerColumn());
+		m_editingSupport = editingSupport;
+		m_cellEditorClassName = m_editingSupport.getCellEditorInfo().getClassName();
+		m_cellEditorProperty = m_editingSupport.getCellEditorProperty().getParsePropertyReference();
+		m_elementProperty = m_editingSupport.getElementProperty().getParserPropertyReference();
+	}
 
-  public VirtualEditingSupportInfo(IElementTypeProvider elementTypeProvider,
-      AbstractViewerInputBindingInfo viewerBinding,
-      WidgetBindableInfo viewerColumn) {
-    m_elementTypeProvider = elementTypeProvider;
-    m_viewerBinding = viewerBinding;
-    m_viewerColumn = viewerColumn;
-  }
+	public VirtualEditingSupportInfo(IElementTypeProvider elementTypeProvider,
+			AbstractViewerInputBindingInfo viewerBinding,
+			WidgetBindableInfo viewerColumn) {
+		m_elementTypeProvider = elementTypeProvider;
+		m_viewerBinding = viewerBinding;
+		m_viewerColumn = viewerColumn;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public WidgetBindableInfo getViewerColumn() {
-    return m_viewerColumn;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public WidgetBindableInfo getViewerColumn() {
+		return m_viewerColumn;
+	}
 
-  public boolean isEmpty() {
-    return m_cellEditorClassName == null;
-  }
+	public boolean isEmpty() {
+		return m_cellEditorClassName == null;
+	}
 
-  public void delete() {
-    m_cellEditorClassName = null;
-    m_cellEditorProperty = null;
-    m_elementProperty = null;
-    m_editingSupport = null;
-  }
+	public void delete() {
+		m_cellEditorClassName = null;
+		m_cellEditorProperty = null;
+		m_elementProperty = null;
+		m_editingSupport = null;
+	}
 
-  public EditingSupportInfo createOrUpdateEditingSupport() throws Exception {
-    // configure viewer
-    m_viewerBinding.getViewer().ensureConvertToField();
-    // configure column
-    m_viewerColumn.ensureConvertToField();
-    // create new support
-    if (m_editingSupport == null) {
-      return new EditingSupportInfo(m_viewerBinding,
-          m_viewerColumn,
-          m_cellEditorClassName,
-          m_cellEditorProperty,
-          m_elementProperty);
-    }
-    // edit exist support
-    m_editingSupport.getCellEditorInfo().setClassName0(m_cellEditorClassName);
-    m_editingSupport.getCellEditorProperty().setParsePropertyReference(m_cellEditorProperty);
-    m_editingSupport.getElementProperty().setParserPropertyReference(m_elementProperty);
-    return m_editingSupport;
-  }
+	public EditingSupportInfo createOrUpdateEditingSupport() throws Exception {
+		// configure viewer
+		m_viewerBinding.getViewer().ensureConvertToField();
+		// configure column
+		m_viewerColumn.ensureConvertToField();
+		// create new support
+		if (m_editingSupport == null) {
+			return new EditingSupportInfo(m_viewerBinding,
+					m_viewerColumn,
+					m_cellEditorClassName,
+					m_cellEditorProperty,
+					m_elementProperty);
+		}
+		// edit exist support
+		m_editingSupport.getCellEditorInfo().setClassName0(m_cellEditorClassName);
+		m_editingSupport.getCellEditorProperty().setParsePropertyReference(m_cellEditorProperty);
+		m_editingSupport.getElementProperty().setParserPropertyReference(m_elementProperty);
+		return m_editingSupport;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public String getCellEditorPresentationText() throws Exception {
-    return isEmpty() ? "" : ClassUtils.getShortClassName(StringUtils.substringBefore(
-        m_cellEditorClassName,
-        "(")) + "." + StringUtils.remove(m_cellEditorProperty, '"');
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public String getCellEditorPresentationText() throws Exception {
+		return isEmpty() ? "" : ClassUtils.getShortClassName(StringUtils.substringBefore(
+				m_cellEditorClassName,
+				"(")) + "." + StringUtils.remove(m_cellEditorProperty, '"');
+	}
 
-  public String getElementPropertyPresentationText() throws Exception {
-    return isEmpty() ? "" : ClassUtils.getShortClassName(m_elementTypeProvider.getElementType())
-        + "."
-        + StringUtils.remove(m_elementProperty, '"');
-  }
+	public String getElementPropertyPresentationText() throws Exception {
+		return isEmpty() ? "" : ClassUtils.getShortClassName(m_elementTypeProvider.getElementType())
+				+ "."
+				+ StringUtils.remove(m_elementProperty, '"');
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void createContentProviders(List<IUiContentProvider> providers) throws Exception {
-    // CellEditor
-    providers.add(new LabelUiContentProvider(Messages.VirtualEditingSupportInfo_cellEditorLabel,
-        getCellEditorPresentationText()));
-    //
-    ChooseClassAndPropertiesConfiguration cellEditorConfiguration =
-        new ChooseClassAndPropertiesConfiguration();
-    cellEditorConfiguration.setBaseClassName("org.eclipse.jface.viewers.CellEditor");
-    cellEditorConfiguration.setDialogFieldLabel(Messages.VirtualEditingSupportInfo_chooseLabel);
-    cellEditorConfiguration.setEmptyClassErrorMessage(Messages.VirtualEditingSupportInfo_chooseEmptyMessage);
-    cellEditorConfiguration.setErrorMessagePrefix(Messages.VirtualEditingSupportInfo_chooseErrorPrefix);
-    cellEditorConfiguration.setPropertiesLabel(Messages.VirtualEditingSupportInfo_choosePropertiesLabel);
-    cellEditorConfiguration.setLoadedPropertiesCheckedStrategy(ChooseClassAndPropertiesConfiguration.LoadedPropertiesCheckedStrategy.None);
-    cellEditorConfiguration.setPropertiesErrorMessage(Messages.VirtualEditingSupportInfo_choosePropertyMessage);
-    cellEditorConfiguration.setDefaultValues(new String[]{
-        "org.eclipse.jface.viewers.TextCellEditor",
-        "org.eclipse.jface.viewers.ComboBoxCellEditor",
-        "org.eclipse.jface.viewers.CheckboxCellEditor"});
-    //
-    providers.add(new CellEditorUiContentProvider(cellEditorConfiguration));
-    //
-    providers.add(new SeparatorUiContentProvider());
-    // Element property
-    providers.add(new LabelUiContentProvider(Messages.VirtualEditingSupportInfo_elementProperty,
-        getElementPropertyPresentationText()));
-    //
-    ChooseClassAndPropertiesConfiguration elementConfiguration =
-        new ChooseClassAndPropertiesConfiguration();
-    elementConfiguration.setDialogFieldLabel(Messages.VirtualEditingSupportInfo_chooseBeanLabel);
-    elementConfiguration.setEmptyClassErrorMessage(Messages.VirtualEditingSupportInfo_chooseBeanEmptyMessage);
-    elementConfiguration.setErrorMessagePrefix(Messages.VirtualEditingSupportInfo_chooseBeanErrorPrefix);
-    elementConfiguration.setPropertiesLabel(Messages.VirtualEditingSupportInfo_chooseBeanPropertiesLabel);
-    elementConfiguration.setLoadedPropertiesCheckedStrategy(ChooseClassAndPropertiesConfiguration.LoadedPropertiesCheckedStrategy.None);
-    elementConfiguration.setPropertiesErrorMessage(Messages.VirtualEditingSupportInfo_chooseBeanPropertiesErrorMessage);
-    //
-    providers.add(new ElementPropertyUiContentProvider(elementConfiguration));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void createContentProviders(List<IUiContentProvider> providers) throws Exception {
+		// CellEditor
+		providers.add(new LabelUiContentProvider(Messages.VirtualEditingSupportInfo_cellEditorLabel,
+				getCellEditorPresentationText()));
+		//
+		ChooseClassAndPropertiesConfiguration cellEditorConfiguration =
+				new ChooseClassAndPropertiesConfiguration();
+		cellEditorConfiguration.setBaseClassName("org.eclipse.jface.viewers.CellEditor");
+		cellEditorConfiguration.setDialogFieldLabel(Messages.VirtualEditingSupportInfo_chooseLabel);
+		cellEditorConfiguration.setEmptyClassErrorMessage(Messages.VirtualEditingSupportInfo_chooseEmptyMessage);
+		cellEditorConfiguration.setErrorMessagePrefix(Messages.VirtualEditingSupportInfo_chooseErrorPrefix);
+		cellEditorConfiguration.setPropertiesLabel(Messages.VirtualEditingSupportInfo_choosePropertiesLabel);
+		cellEditorConfiguration.setLoadedPropertiesCheckedStrategy(ChooseClassAndPropertiesConfiguration.LoadedPropertiesCheckedStrategy.None);
+		cellEditorConfiguration.setPropertiesErrorMessage(Messages.VirtualEditingSupportInfo_choosePropertyMessage);
+		cellEditorConfiguration.setDefaultValues(new String[]{
+				"org.eclipse.jface.viewers.TextCellEditor",
+				"org.eclipse.jface.viewers.ComboBoxCellEditor",
+		"org.eclipse.jface.viewers.CheckboxCellEditor"});
+		//
+		providers.add(new CellEditorUiContentProvider(cellEditorConfiguration));
+		//
+		providers.add(new SeparatorUiContentProvider());
+		// Element property
+		providers.add(new LabelUiContentProvider(Messages.VirtualEditingSupportInfo_elementProperty,
+				getElementPropertyPresentationText()));
+		//
+		ChooseClassAndPropertiesConfiguration elementConfiguration =
+				new ChooseClassAndPropertiesConfiguration();
+		elementConfiguration.setDialogFieldLabel(Messages.VirtualEditingSupportInfo_chooseBeanLabel);
+		elementConfiguration.setEmptyClassErrorMessage(Messages.VirtualEditingSupportInfo_chooseBeanEmptyMessage);
+		elementConfiguration.setErrorMessagePrefix(Messages.VirtualEditingSupportInfo_chooseBeanErrorPrefix);
+		elementConfiguration.setPropertiesLabel(Messages.VirtualEditingSupportInfo_chooseBeanPropertiesLabel);
+		elementConfiguration.setLoadedPropertiesCheckedStrategy(ChooseClassAndPropertiesConfiguration.LoadedPropertiesCheckedStrategy.None);
+		elementConfiguration.setPropertiesErrorMessage(Messages.VirtualEditingSupportInfo_chooseBeanPropertiesErrorMessage);
+		//
+		providers.add(new ElementPropertyUiContentProvider(elementConfiguration));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ContentProviders
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private class CellEditorUiContentProvider extends ChooseClassAndTreePropertiesUiContentProvider2 {
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public CellEditorUiContentProvider(ChooseClassAndPropertiesConfiguration configuration) {
-      super(configuration);
-    }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ContentProviders
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private class CellEditorUiContentProvider extends ChooseClassAndTreePropertiesUiContentProvider2 {
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public CellEditorUiContentProvider(ChooseClassAndPropertiesConfiguration configuration) {
+			super(configuration);
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Properties
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    protected Class<?> loadClass(String className) throws ClassNotFoundException {
-      int index = className.indexOf('(');
-      if (index != -1) {
-        className = className.substring(0, index);
-      }
-      return super.loadClass(className);
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Properties
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		protected Class<?> loadClass(String className) throws ClassNotFoundException {
+			int index = className.indexOf('(');
+			if (index != -1) {
+				className = className.substring(0, index);
+			}
+			return super.loadClass(className);
+		}
 
-    @Override
-    protected List<PropertyAdapter> getProperties(final Class<?> choosenClass) throws Exception {
-      List<PropertyAdapter> properties = super.getProperties(choosenClass);
-      int size = properties.size();
-      for (int i = 0; i < size; i++) {
-        ObservePropertyAdapter oldAdapter = (ObservePropertyAdapter) properties.get(i);
-        // configure control property
-        if ("control".equals(oldAdapter.getName())) {
-          properties.set(i, new ObservePropertyAdapter(null, oldAdapter.getProperty()) {
-            @Override
-            public List<ObservePropertyAdapter> getChildren() {
-              if (m_children == null) {
-                try {
-                  // prepare control SWT properties
-                  m_children = Lists.newArrayList();
-                  List<WidgetPropertyBindableInfo> swtProperties =
-                      getWidgetProperties(
-                          JavaInfoUtils.getClassLoader(EditorState.getActiveJavaInfo()),
-                          choosenClass,
-                          m_property.getObjectType());
-                  // create adapters for all properties exclude "items"
-                  for (WidgetPropertyBindableInfo swtProperty : swtProperties) {
-                    if (!"observeItems".equals(swtProperty.getReference())) {
-                      ObservePropertyAdapter swtAdapter =
-                          new ObservePropertyAdapter(this, swtProperty);
-                      swtAdapter.setChildren(Collections.<ObservePropertyAdapter>emptyList());
-                      m_children.add(swtAdapter);
-                    }
-                  }
-                } catch (Throwable e) {
-                  m_children = Collections.emptyList();
-                }
-              }
-              return m_children;
-            }
-          });
-        }
-      }
-      return properties;
-    }
+		@Override
+		protected List<PropertyAdapter> getProperties(final Class<?> choosenClass) throws Exception {
+			List<PropertyAdapter> properties = super.getProperties(choosenClass);
+			int size = properties.size();
+			for (int i = 0; i < size; i++) {
+				ObservePropertyAdapter oldAdapter = (ObservePropertyAdapter) properties.get(i);
+				// configure control property
+				if ("control".equals(oldAdapter.getName())) {
+					properties.set(i, new ObservePropertyAdapter(null, oldAdapter.getProperty()) {
+						@Override
+						public List<ObservePropertyAdapter> getChildren() {
+							if (m_children == null) {
+								try {
+									// prepare control SWT properties
+									m_children = Lists.newArrayList();
+									List<WidgetPropertyBindableInfo> swtProperties =
+											getWidgetProperties(
+													JavaInfoUtils.getClassLoader(EditorState.getActiveJavaInfo()),
+													choosenClass,
+													m_property.getObjectType());
+									// create adapters for all properties exclude "items"
+									for (WidgetPropertyBindableInfo swtProperty : swtProperties) {
+										if (!"observeItems".equals(swtProperty.getReference())) {
+											ObservePropertyAdapter swtAdapter =
+													new ObservePropertyAdapter(this, swtProperty);
+											swtAdapter.setChildren(Collections.<ObservePropertyAdapter>emptyList());
+											m_children.add(swtAdapter);
+										}
+									}
+								} catch (Throwable e) {
+									m_children = Collections.emptyList();
+								}
+							}
+							return m_children;
+						}
+					});
+				}
+			}
+			return properties;
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Update
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public void updateFromObject() throws Exception {
-      if (isEmpty()) {
-        calculateFinish();
-      } else {
-        Class<?> beanClass = loadClass(m_cellEditorClassName);
-        if (m_cellEditorProperty.startsWith("\"control.")) {
-          // prepare class
-          setClassName(m_cellEditorClassName);
-          // prepare properties
-          ClassLoader classLoader = JavaInfoUtils.getClassLoader(EditorState.getActiveJavaInfo());
-          BeanSupport beanSupport = new BeanSupport(classLoader, null);
-          BeanBindableInfo beanObjectInfo =
-              new BeanBindableInfo(beanSupport, null, beanClass, null, (IObservePresentation) null);
-          // prepare control adapter
-          PropertyBindableInfo controlProperty =
-              beanObjectInfo.resolvePropertyReference("\"control\"");
-          ObservePropertyAdapter parent = convertPropertyToAdapter(controlProperty);
-          // prepare widget adapter
-          String swtPropertyReference =
-              StringUtils.substringBetween(m_cellEditorProperty, ".", "\"");
-          //
-          List<WidgetPropertyBindableInfo> swtProperties =
-              getWidgetProperties(classLoader, beanClass, controlProperty.getObjectType());
-          //
-          for (WidgetPropertyBindableInfo swtProperty : swtProperties) {
-            if (swtPropertyReference.equals(SwtProperties.SWT_OBSERVABLES_TO_WIDGET_PROPERTIES.get(swtProperty.getReference()))) {
-              ObservePropertyAdapter swtAdapter = new ObservePropertyAdapter(parent, swtProperty);
-              swtAdapter.setChildren(Collections.<ObservePropertyAdapter>emptyList());
-              swtAdapter.addToParent();
-              setCheckedAndExpand(new Object[]{swtAdapter});
-              break;
-            }
-          }
-          //
-          calculatePropertiesFinish();
-        } else {
-          setClassNameAndProperties(
-              beanClass,
-              m_cellEditorClassName,
-              Lists.newArrayList(m_cellEditorProperty));
-        }
-      }
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Update
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public void updateFromObject() throws Exception {
+			if (isEmpty()) {
+				calculateFinish();
+			} else {
+				Class<?> beanClass = loadClass(m_cellEditorClassName);
+				if (m_cellEditorProperty.startsWith("\"control.")) {
+					// prepare class
+					setClassName(m_cellEditorClassName);
+					// prepare properties
+					ClassLoader classLoader = JavaInfoUtils.getClassLoader(EditorState.getActiveJavaInfo());
+					BeanSupport beanSupport = new BeanSupport(classLoader, null);
+					BeanBindableInfo beanObjectInfo =
+							new BeanBindableInfo(beanSupport, null, beanClass, null, (IObservePresentation) null);
+					// prepare control adapter
+					PropertyBindableInfo controlProperty =
+							beanObjectInfo.resolvePropertyReference("\"control\"");
+					ObservePropertyAdapter parent = convertPropertyToAdapter(controlProperty);
+					// prepare widget adapter
+					String swtPropertyReference =
+							StringUtils.substringBetween(m_cellEditorProperty, ".", "\"");
+					//
+					List<WidgetPropertyBindableInfo> swtProperties =
+							getWidgetProperties(classLoader, beanClass, controlProperty.getObjectType());
+					//
+					for (WidgetPropertyBindableInfo swtProperty : swtProperties) {
+						if (swtPropertyReference.equals(SwtProperties.SWT_OBSERVABLES_TO_WIDGET_PROPERTIES.get(swtProperty.getReference()))) {
+							ObservePropertyAdapter swtAdapter = new ObservePropertyAdapter(parent, swtProperty);
+							swtAdapter.setChildren(Collections.<ObservePropertyAdapter>emptyList());
+							swtAdapter.addToParent();
+							setCheckedAndExpand(new Object[]{swtAdapter});
+							break;
+						}
+					}
+					//
+					calculatePropertiesFinish();
+				} else {
+					setClassNameAndProperties(
+							beanClass,
+							m_cellEditorClassName,
+							Lists.newArrayList(m_cellEditorProperty));
+				}
+			}
+		}
 
-    @Override
-    protected void saveToObject(Class<?> choosenClass, List<PropertyAdapter> choosenProperties)
-        throws Exception {
-      m_cellEditorClassName = getClassName();
-      Object[] checkedElements = m_propertiesViewer.getCheckedElements();
-      ObservePropertyAdapter adapter = (ObservePropertyAdapter) checkedElements[0];
-      if (adapter.getProperty() instanceof WidgetPropertyBindableInfo) {
-        m_cellEditorProperty =
-            "\"control."
-                + SwtProperties.SWT_OBSERVABLES_TO_WIDGET_PROPERTIES.get(adapter.getProperty().getReference())
-                + "\"";
-      } else {
-        m_cellEditorProperty = adapter.getProperty().getReference();
-      }
-      adapter.getProperty();
-    }
-  }
+		@Override
+		protected void saveToObject(Class<?> choosenClass, List<PropertyAdapter> choosenProperties)
+				throws Exception {
+			m_cellEditorClassName = getClassName();
+			Object[] checkedElements = m_propertiesViewer.getCheckedElements();
+			ObservePropertyAdapter adapter = (ObservePropertyAdapter) checkedElements[0];
+			if (adapter.getProperty() instanceof WidgetPropertyBindableInfo) {
+				m_cellEditorProperty =
+						"\"control."
+								+ SwtProperties.SWT_OBSERVABLES_TO_WIDGET_PROPERTIES.get(adapter.getProperty().getReference())
+								+ "\"";
+			} else {
+				m_cellEditorProperty = adapter.getProperty().getReference();
+			}
+			adapter.getProperty();
+		}
+	}
 
-  private static List<WidgetPropertyBindableInfo> getWidgetProperties(ClassLoader classLoader,
-      Class<?> choosenClass,
-      Class<?> widgetType) throws Exception {
-    if (classLoader.loadClass("org.eclipse.jface.viewers.TextCellEditor").isAssignableFrom(
-        choosenClass)) {
-      widgetType = classLoader.loadClass("org.eclipse.swt.widgets.Text");
-    } else if (classLoader.loadClass("org.eclipse.jface.viewers.ComboBoxCellEditor").isAssignableFrom(
-        choosenClass)) {
-      widgetType = classLoader.loadClass("org.eclipse.swt.custom.CCombo");
-    }
-    return PropertiesSupport.getProperties(classLoader, widgetType);
-  }
+	private static List<WidgetPropertyBindableInfo> getWidgetProperties(ClassLoader classLoader,
+			Class<?> choosenClass,
+			Class<?> widgetType) throws Exception {
+		if (classLoader.loadClass("org.eclipse.jface.viewers.TextCellEditor").isAssignableFrom(
+				choosenClass)) {
+			widgetType = classLoader.loadClass("org.eclipse.swt.widgets.Text");
+		} else if (classLoader.loadClass("org.eclipse.jface.viewers.ComboBoxCellEditor").isAssignableFrom(
+				choosenClass)) {
+			widgetType = classLoader.loadClass("org.eclipse.swt.custom.CCombo");
+		}
+		return PropertiesSupport.getProperties(classLoader, widgetType);
+	}
 
-  private class ElementPropertyUiContentProvider
-      extends
-        ChooseClassAndTreePropertiesUiContentProvider2 {
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public ElementPropertyUiContentProvider(ChooseClassAndPropertiesConfiguration configuration) {
-      super(configuration);
-    }
+	private class ElementPropertyUiContentProvider
+	extends
+	ChooseClassAndTreePropertiesUiContentProvider2 {
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public ElementPropertyUiContentProvider(ChooseClassAndPropertiesConfiguration configuration) {
+			super(configuration);
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Update
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public void updateFromObject() throws Exception {
-      getDialogField().setEnabled(false);
-      Class<?> elementType = m_elementTypeProvider.getElementType();
-      if (isEmpty()) {
-        if (elementType == null) {
-          calculateFinish();
-        } else {
-          setClassName(CoreUtils.getClassName(elementType));
-        }
-      } else {
-        setClassNameAndProperties(elementType, null, Lists.newArrayList(m_elementProperty));
-      }
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Update
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public void updateFromObject() throws Exception {
+			getDialogField().setEnabled(false);
+			Class<?> elementType = m_elementTypeProvider.getElementType();
+			if (isEmpty()) {
+				if (elementType == null) {
+					calculateFinish();
+				} else {
+					setClassName(CoreUtils.getClassName(elementType));
+				}
+			} else {
+				setClassNameAndProperties(elementType, null, Lists.newArrayList(m_elementProperty));
+			}
+		}
 
-    @Override
-    protected void saveToObject(Class<?> choosenClass, List<PropertyAdapter> choosenProperties)
-        throws Exception {
-      Object[] checkedElements = m_propertiesViewer.getCheckedElements();
-      ObservePropertyAdapter adapter = (ObservePropertyAdapter) checkedElements[0];
-      m_elementProperty = adapter.getProperty().getReference();
-    }
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ElementType
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static interface IElementTypeProvider {
-    Class<?> getElementType() throws Exception;
-  }
+		@Override
+		protected void saveToObject(Class<?> choosenClass, List<PropertyAdapter> choosenProperties)
+				throws Exception {
+			Object[] checkedElements = m_propertiesViewer.getCheckedElements();
+			ObservePropertyAdapter adapter = (ObservePropertyAdapter) checkedElements[0];
+			m_elementProperty = adapter.getProperty().getReference();
+		}
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ElementType
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static interface IElementTypeProvider {
+		Class<?> getElementType() throws Exception;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/designer/BeansListObservableFactoryInfo.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/designer/BeansListObservableFactoryInfo.java
index 483b89235..6cf1bebc1 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/designer/BeansListObservableFactoryInfo.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/designer/BeansListObservableFactoryInfo.java
@@ -19,32 +19,32 @@
  * @coverage bindings.rcp.model.widgets
  */
 public final class BeansListObservableFactoryInfo extends BeansObservableFactoryInfo {
-  private static final String FACTORY_CLASS =
-      "org.eclipse.wb.rcp.databinding.BeansListObservableFactory";
+	private static final String FACTORY_CLASS =
+			"org.eclipse.wb.rcp.databinding.BeansListObservableFactory";
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public BeansListObservableFactoryInfo(String className) {
-    super(className);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public BeansListObservableFactoryInfo(String className) {
+		super(className);
+	}
 
-  public BeansListObservableFactoryInfo() {
-    super(FACTORY_CLASS);
-  }
+	public BeansListObservableFactoryInfo() {
+		super(FACTORY_CLASS);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void configure(ChooseClassConfiguration configuration) {
-    configuration.setValueScope(FACTORY_CLASS);
-    configuration.setClearValue(FACTORY_CLASS);
-    configuration.setBaseClassName(FACTORY_CLASS);
-    configuration.setConstructorParameters(new Class[]{Class.class, String.class});
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void configure(ChooseClassConfiguration configuration) {
+		configuration.setValueScope(FACTORY_CLASS);
+		configuration.setClearValue(FACTORY_CLASS);
+		configuration.setBaseClassName(FACTORY_CLASS);
+		configuration.setConstructorParameters(new Class[]{Class.class, String.class});
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/designer/BeansObservableFactoryInfo.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/designer/BeansObservableFactoryInfo.java
index da6b803db..bb7262f31 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/designer/BeansObservableFactoryInfo.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/designer/BeansObservableFactoryInfo.java
@@ -22,59 +22,59 @@
  * @coverage bindings.rcp.model.widgets
  */
 public abstract class BeansObservableFactoryInfo extends ObservableFactoryInfo {
-  protected Class<?> m_elementType;
-  protected String m_propertyName;
+	protected Class<?> m_elementType;
+	protected String m_propertyName;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public BeansObservableFactoryInfo(String className) {
-    super(className);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public BeansObservableFactoryInfo(String className) {
+		super(className);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public final Class<?> getElementType() {
-    return m_elementType;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public final Class<?> getElementType() {
+		return m_elementType;
+	}
 
-  public final void setElementType(Class<?> elementType) {
-    m_elementType = elementType;
-  }
+	public final void setElementType(Class<?> elementType) {
+		m_elementType = elementType;
+	}
 
-  public final String getPropertyName() {
-    return m_propertyName;
-  }
+	public final String getPropertyName() {
+		return m_propertyName;
+	}
 
-  public void setPropertyName(String propertyName) throws Exception {
-    m_propertyName = propertyName;
-  }
+	public void setPropertyName(String propertyName) throws Exception {
+		m_propertyName = propertyName;
+	}
 
-  public boolean isDesignerMode() {
-    return true;
-  }
+	public boolean isDesignerMode() {
+		return true;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void addSourceCode(List<String> lines) throws Exception {
-    lines.add(m_className
-        + " "
-        + getVariableIdentifier()
-        + " = new "
-        + m_className
-        + "("
-        + CoreUtils.getClassName(m_elementType)
-        + ".class, "
-        + CoreUtils.getDefaultString(m_propertyName, "\"", "null")
-        + ");");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void addSourceCode(List<String> lines) throws Exception {
+		lines.add(m_className
+				+ " "
+				+ getVariableIdentifier()
+				+ " = new "
+				+ m_className
+				+ "("
+				+ CoreUtils.getClassName(m_elementType)
+				+ ".class, "
+				+ CoreUtils.getDefaultString(m_propertyName, "\"", "null")
+				+ ");");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/designer/BeansSetObservableFactoryInfo.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/designer/BeansSetObservableFactoryInfo.java
index c4e8d8a44..46becdbbe 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/designer/BeansSetObservableFactoryInfo.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/designer/BeansSetObservableFactoryInfo.java
@@ -19,32 +19,32 @@
  * @coverage bindings.rcp.model.widgets
  */
 public final class BeansSetObservableFactoryInfo extends BeansObservableFactoryInfo {
-  private static final String FACTORY_CLASS =
-      "org.eclipse.wb.rcp.databinding.BeansSetObservableFactory";
+	private static final String FACTORY_CLASS =
+			"org.eclipse.wb.rcp.databinding.BeansSetObservableFactory";
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public BeansSetObservableFactoryInfo(String className) {
-    super(className);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public BeansSetObservableFactoryInfo(String className) {
+		super(className);
+	}
 
-  public BeansSetObservableFactoryInfo() {
-    super(FACTORY_CLASS);
-  }
+	public BeansSetObservableFactoryInfo() {
+		super(FACTORY_CLASS);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void configure(ChooseClassConfiguration configuration) {
-    configuration.setValueScope(FACTORY_CLASS);
-    configuration.setClearValue(FACTORY_CLASS);
-    configuration.setBaseClassName(FACTORY_CLASS);
-    configuration.setConstructorParameters(new Class[]{Class.class, String.class});
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void configure(ChooseClassConfiguration configuration) {
+		configuration.setValueScope(FACTORY_CLASS);
+		configuration.setClearValue(FACTORY_CLASS);
+		configuration.setBaseClassName(FACTORY_CLASS);
+		configuration.setConstructorParameters(new Class[]{Class.class, String.class});
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/designer/TreeBeanAdvisorInfo.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/designer/TreeBeanAdvisorInfo.java
index 70660f815..443f31f4a 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/designer/TreeBeanAdvisorInfo.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/designer/TreeBeanAdvisorInfo.java
@@ -23,105 +23,105 @@
  * @coverage bindings.rcp.model.widgets
  */
 public class TreeBeanAdvisorInfo extends TreeStructureAdvisorInfo {
-  private static final String ADVISOR_CLASS = "org.eclipse.wb.rcp.databinding.TreeBeanAdvisor";
-  private Class<?> m_elementType;
-  private String m_parentProperty;
-  private String m_childrenProperty;
-  private String m_hasChildrenProperty;
+	private static final String ADVISOR_CLASS = "org.eclipse.wb.rcp.databinding.TreeBeanAdvisor";
+	private Class<?> m_elementType;
+	private String m_parentProperty;
+	private String m_childrenProperty;
+	private String m_hasChildrenProperty;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public TreeBeanAdvisorInfo() {
-    super(ADVISOR_CLASS);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public TreeBeanAdvisorInfo() {
+		super(ADVISOR_CLASS);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void setElementType(Class<?> elementType) {
-    m_elementType = elementType;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void setElementType(Class<?> elementType) {
+		m_elementType = elementType;
+	}
 
-  public Class<?> getElementType() {
-    return m_elementType;
-  }
+	public Class<?> getElementType() {
+		return m_elementType;
+	}
 
-  public String getParentProperty() {
-    return m_parentProperty;
-  }
+	public String getParentProperty() {
+		return m_parentProperty;
+	}
 
-  public void setParentProperty(String parentProperty) throws Exception {
-    m_parentProperty = parentProperty;
-  }
+	public void setParentProperty(String parentProperty) throws Exception {
+		m_parentProperty = parentProperty;
+	}
 
-  public String getChildrenProperty() {
-    return m_childrenProperty;
-  }
+	public String getChildrenProperty() {
+		return m_childrenProperty;
+	}
 
-  public void setChildrenProperty(String childrenProperty) throws Exception {
-    m_childrenProperty = childrenProperty;
-  }
+	public void setChildrenProperty(String childrenProperty) throws Exception {
+		m_childrenProperty = childrenProperty;
+	}
 
-  public String getHasChildrenProperty() {
-    return m_hasChildrenProperty;
-  }
+	public String getHasChildrenProperty() {
+		return m_hasChildrenProperty;
+	}
 
-  public void setHasChildrenProperty(String hasChildrenProperty) throws Exception {
-    m_hasChildrenProperty = hasChildrenProperty;
-  }
+	public void setHasChildrenProperty(String hasChildrenProperty) throws Exception {
+		m_hasChildrenProperty = hasChildrenProperty;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void configure(ChooseClassConfiguration configuration) {
-    configuration.setValueScope(ADVISOR_CLASS);
-    configuration.setClearValue(ADVISOR_CLASS);
-    configuration.setBaseClassName(ADVISOR_CLASS);
-    configuration.setConstructorParameters(new Class[]{
-        Class.class,
-        String.class,
-        String.class,
-        String.class});
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void configure(ChooseClassConfiguration configuration) {
+		configuration.setValueScope(ADVISOR_CLASS);
+		configuration.setClearValue(ADVISOR_CLASS);
+		configuration.setBaseClassName(ADVISOR_CLASS);
+		configuration.setConstructorParameters(new Class[]{
+				Class.class,
+				String.class,
+				String.class,
+				String.class});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getPresentationText() throws Exception {
-    return CoreUtils.joinStrings(", ", m_parentProperty, m_childrenProperty, m_hasChildrenProperty);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getPresentationText() throws Exception {
+		return CoreUtils.joinStrings(", ", m_parentProperty, m_childrenProperty, m_hasChildrenProperty);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void addSourceCode(List<String> lines) throws Exception {
-    lines.add(ADVISOR_CLASS
-        + " "
-        + getVariableIdentifier()
-        + " = new "
-        + m_className
-        + "("
-        + CoreUtils.getClassName(m_elementType)
-        + ".class, "
-        + CoreUtils.getDefaultString(m_parentProperty, "\"", "null")
-        + ", "
-        + CoreUtils.getDefaultString(m_childrenProperty, "\"", "null")
-        + ", "
-        + CoreUtils.getDefaultString(m_hasChildrenProperty, "\"", "null")
-        + ");");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void addSourceCode(List<String> lines) throws Exception {
+		lines.add(ADVISOR_CLASS
+				+ " "
+				+ getVariableIdentifier()
+				+ " = new "
+				+ m_className
+				+ "("
+				+ CoreUtils.getClassName(m_elementType)
+				+ ".class, "
+				+ CoreUtils.getDefaultString(m_parentProperty, "\"", "null")
+				+ ", "
+				+ CoreUtils.getDefaultString(m_childrenProperty, "\"", "null")
+				+ ", "
+				+ CoreUtils.getDefaultString(m_hasChildrenProperty, "\"", "null")
+				+ ");");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/designer/TreeObservableLabelProviderInfo.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/designer/TreeObservableLabelProviderInfo.java
index 1541d40a8..39bf2d507 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/designer/TreeObservableLabelProviderInfo.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/input/designer/TreeObservableLabelProviderInfo.java
@@ -28,122 +28,122 @@
  * @coverage bindings.rcp.model.widgets
  */
 public class TreeObservableLabelProviderInfo extends LabelProviderInfo {
-  private static final String PROVIDER_CLASS =
-      "org.eclipse.wb.rcp.databinding.TreeObservableLabelProvider";
-  private final KnownElementsObservableInfo m_allElementsObservable;
-  private Class<?> m_elementType;
-  private String m_textProperty;
-  private String m_imageProperty;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public TreeObservableLabelProviderInfo(String className,
-      KnownElementsObservableInfo allElementsObservable) {
-    super(className);
-    m_allElementsObservable = allElementsObservable;
-  }
-
-  public TreeObservableLabelProviderInfo(KnownElementsObservableInfo allElementsObservable) {
-    this(PROVIDER_CLASS, allElementsObservable);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void setElementType(Class<?> elementType) {
-    m_elementType = elementType;
-  }
-
-  public Class<?> getElementType() {
-    return m_elementType;
-  }
-
-  public KnownElementsObservableInfo getAllElementsObservable() {
-    return m_allElementsObservable;
-  }
-
-  public String getTextProperty() {
-    return m_textProperty;
-  }
-
-  public void setTextProperty(String textProperty) throws Exception {
-    m_textProperty = textProperty;
-  }
-
-  public String getImageProperty() {
-    return m_imageProperty;
-  }
-
-  public void setImageProperty(String imageProperty) throws Exception {
-    m_imageProperty = imageProperty;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void configure(ChooseClassConfiguration configuration, boolean useClear) {
-    configuration.setValueScope(PROVIDER_CLASS);
-    if (useClear) {
-      configuration.setClearValue(PROVIDER_CLASS);
-    }
-    configuration.setBaseClassName(PROVIDER_CLASS);
-    configuration.setConstructorParameters(new Class[]{
-        IObservableSet.class,
-        Class.class,
-        String.class,
-        String.class});
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getPresentationText() throws Exception {
-    return super.getPresentationText()
-        + "["
-        + CoreUtils.joinStrings(", ", m_textProperty, m_imageProperty)
-        + "]";
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getSourceCode(List<String> lines, CodeGenerationSupport generationSupport)
-      throws Exception {
-    return "new "
-        + m_className
-        + "("
-        + m_allElementsObservable.getSourceCode()
-        + ", "
-        + CoreUtils.getClassName(m_elementType)
-        + ".class, "
-        + CoreUtils.getDefaultString(m_textProperty, "\"", "null")
-        + ", "
-        + CoreUtils.getDefaultString(m_imageProperty, "\"", "null")
-        + ")";
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Visiting
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void accept(AstObjectInfoVisitor visitor) throws Exception {
-    super.accept(visitor);
-    m_allElementsObservable.accept(visitor);
-  }
+	private static final String PROVIDER_CLASS =
+			"org.eclipse.wb.rcp.databinding.TreeObservableLabelProvider";
+	private final KnownElementsObservableInfo m_allElementsObservable;
+	private Class<?> m_elementType;
+	private String m_textProperty;
+	private String m_imageProperty;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public TreeObservableLabelProviderInfo(String className,
+			KnownElementsObservableInfo allElementsObservable) {
+		super(className);
+		m_allElementsObservable = allElementsObservable;
+	}
+
+	public TreeObservableLabelProviderInfo(KnownElementsObservableInfo allElementsObservable) {
+		this(PROVIDER_CLASS, allElementsObservable);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void setElementType(Class<?> elementType) {
+		m_elementType = elementType;
+	}
+
+	public Class<?> getElementType() {
+		return m_elementType;
+	}
+
+	public KnownElementsObservableInfo getAllElementsObservable() {
+		return m_allElementsObservable;
+	}
+
+	public String getTextProperty() {
+		return m_textProperty;
+	}
+
+	public void setTextProperty(String textProperty) throws Exception {
+		m_textProperty = textProperty;
+	}
+
+	public String getImageProperty() {
+		return m_imageProperty;
+	}
+
+	public void setImageProperty(String imageProperty) throws Exception {
+		m_imageProperty = imageProperty;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void configure(ChooseClassConfiguration configuration, boolean useClear) {
+		configuration.setValueScope(PROVIDER_CLASS);
+		if (useClear) {
+			configuration.setClearValue(PROVIDER_CLASS);
+		}
+		configuration.setBaseClassName(PROVIDER_CLASS);
+		configuration.setConstructorParameters(new Class[]{
+				IObservableSet.class,
+				Class.class,
+				String.class,
+				String.class});
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getPresentationText() throws Exception {
+		return super.getPresentationText()
+				+ "["
+				+ CoreUtils.joinStrings(", ", m_textProperty, m_imageProperty)
+				+ "]";
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getSourceCode(List<String> lines, CodeGenerationSupport generationSupport)
+			throws Exception {
+		return "new "
+				+ m_className
+				+ "("
+				+ m_allElementsObservable.getSourceCode()
+				+ ", "
+				+ CoreUtils.getClassName(m_elementType)
+				+ ".class, "
+				+ CoreUtils.getDefaultString(m_textProperty, "\"", "null")
+				+ ", "
+				+ CoreUtils.getDefaultString(m_imageProperty, "\"", "null")
+				+ ")";
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Visiting
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void accept(AstObjectInfoVisitor visitor) throws Exception {
+		super.accept(visitor);
+		m_allElementsObservable.accept(visitor);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/CheckedElementsObservableInfo.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/CheckedElementsObservableInfo.java
index 13eededc7..2c55cac39 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/CheckedElementsObservableInfo.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/CheckedElementsObservableInfo.java
@@ -30,83 +30,83 @@
  * @coverage bindings.rcp.model.widgets
  */
 public final class CheckedElementsObservableInfo extends ViewerObservableInfo {
-  private Class<?> m_elementType;
+	private Class<?> m_elementType;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CheckedElementsObservableInfo(BindableInfo bindableWidget) throws Exception {
-    this(bindableWidget, (Class<?>) null);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CheckedElementsObservableInfo(BindableInfo bindableWidget) throws Exception {
+		this(bindableWidget, (Class<?>) null);
+	}
 
-  public CheckedElementsObservableInfo(BindableInfo bindableWidget, Class<?> elementType)
-      throws Exception {
-    super(bindableWidget, "observeCheckedElements");
-    m_elementType = elementType;
-  }
+	public CheckedElementsObservableInfo(BindableInfo bindableWidget, Class<?> elementType)
+			throws Exception {
+		super(bindableWidget, "observeCheckedElements");
+		m_elementType = elementType;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ObservableInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean canShared() {
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ObservableInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean canShared() {
+		return true;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public Class<?> getElementType() {
-    return m_elementType;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public Class<?> getElementType() {
+		return m_elementType;
+	}
 
-  public void setElementType(Class<?> elementType) {
-    m_elementType = elementType;
-  }
+	public void setElementType(Class<?> elementType) {
+		m_elementType = elementType;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getPresentationText() throws Exception {
-    String presentationElementType =
-        m_elementType == null ? "?????" : ClassUtils.getShortClassName(m_elementType);
-    return getBindableObject().getPresentation().getTextForBinding()
-        + ".checkedElements("
-        + presentationElementType
-        + ".class)";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getPresentationText() throws Exception {
+		String presentationElementType =
+				m_elementType == null ? "?????" : ClassUtils.getShortClassName(m_elementType);
+		return getBindableObject().getPresentation().getTextForBinding()
+				+ ".checkedElements("
+				+ presentationElementType
+				+ ".class)";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void createContentProviders(List<IUiContentProvider> providers,
-      BindingUiContentProviderContext context,
-      DatabindingsProvider provider) throws Exception {
-    super.createContentProviders(providers, context, provider);
-    //
-    ChooseClassConfiguration configuration = new ChooseClassConfiguration();
-    configuration.setDialogFieldLabel(Messages.CheckedElementsObservableInfo_label);
-    configuration.setValueScope("beans");
-    configuration.setChooseInterfaces(true);
-    configuration.setEmptyClassErrorMessage(MessageFormat.format(
-        Messages.CheckedElementsObservableInfo_emptyMessage,
-        context.getDirection()));
-    configuration.setErrorMessagePrefix(MessageFormat.format(
-        Messages.CheckedElementsObservableInfo_errorPrefix,
-        context.getDirection()));
-    //
-    providers.add(new CheckedElementsUiContentProvider(configuration, this, provider));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void createContentProviders(List<IUiContentProvider> providers,
+			BindingUiContentProviderContext context,
+			DatabindingsProvider provider) throws Exception {
+		super.createContentProviders(providers, context, provider);
+		//
+		ChooseClassConfiguration configuration = new ChooseClassConfiguration();
+		configuration.setDialogFieldLabel(Messages.CheckedElementsObservableInfo_label);
+		configuration.setValueScope("beans");
+		configuration.setChooseInterfaces(true);
+		configuration.setEmptyClassErrorMessage(MessageFormat.format(
+				Messages.CheckedElementsObservableInfo_emptyMessage,
+				context.getDirection()));
+		configuration.setErrorMessagePrefix(MessageFormat.format(
+				Messages.CheckedElementsObservableInfo_errorPrefix,
+				context.getDirection()));
+		//
+		providers.add(new CheckedElementsUiContentProvider(configuration, this, provider));
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/FiltersObservableInfo.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/FiltersObservableInfo.java
index 1d1b5f906..4c76ff157 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/FiltersObservableInfo.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/FiltersObservableInfo.java
@@ -19,22 +19,22 @@
  * @coverage bindings.rcp.model.widgets
  */
 public final class FiltersObservableInfo extends ViewerObservableInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FiltersObservableInfo(WidgetBindableInfo bindableWidget) throws Exception {
-    super(bindableWidget, "observeFilters");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FiltersObservableInfo(WidgetBindableInfo bindableWidget) throws Exception {
+		super(bindableWidget, "observeFilters");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ObservableInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean canShared() {
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ObservableInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean canShared() {
+		return true;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/IDelayValueProvider.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/IDelayValueProvider.java
index 9cd374912..edb36b6d5 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/IDelayValueProvider.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/IDelayValueProvider.java
@@ -17,13 +17,13 @@
  * @coverage bindings.rcp.model.widgets
  */
 public interface IDelayValueProvider {
-  /**
-   * @return the delay current value.
-   */
-  int getDelayValue();
+	/**
+	 * @return the delay current value.
+	 */
+	int getDelayValue();
 
-  /**
-   * Sets delay value.
-   */
-  void setDelayValue(int delayValue);
+	/**
+	 * Sets delay value.
+	 */
+	void setDelayValue(int delayValue);
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/ItemsSwtObservableInfo.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/ItemsSwtObservableInfo.java
index 9bf382555..a8be083c8 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/ItemsSwtObservableInfo.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/ItemsSwtObservableInfo.java
@@ -22,37 +22,37 @@
  * @coverage bindings.rcp.model.widgets
  */
 public final class ItemsSwtObservableInfo extends ObservableInfo {
-  protected final WidgetBindableInfo m_bindableWidget;
-  protected final WidgetPropertyBindableInfo m_bindableProperty;
+	protected final WidgetBindableInfo m_bindableWidget;
+	protected final WidgetPropertyBindableInfo m_bindableProperty;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ItemsSwtObservableInfo(WidgetBindableInfo bindableWidget,
-      WidgetPropertyBindableInfo bindableProperty) {
-    m_bindableWidget = bindableWidget;
-    m_bindableProperty = bindableProperty;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ItemsSwtObservableInfo(WidgetBindableInfo bindableWidget,
+			WidgetPropertyBindableInfo bindableProperty) {
+		m_bindableWidget = bindableWidget;
+		m_bindableProperty = bindableProperty;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ObservableInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public BindableInfo getBindableObject() {
-    return m_bindableWidget;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ObservableInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public BindableInfo getBindableObject() {
+		return m_bindableWidget;
+	}
 
-  @Override
-  public BindableInfo getBindableProperty() {
-    return m_bindableProperty;
-  }
+	@Override
+	public BindableInfo getBindableProperty() {
+		return m_bindableProperty;
+	}
 
-  @Override
-  public boolean canShared() {
-    return true;
-  }
+	@Override
+	public boolean canShared() {
+		return true;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/MultiSelectionObservableInfo.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/MultiSelectionObservableInfo.java
index 2449007d4..52be2439d 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/MultiSelectionObservableInfo.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/MultiSelectionObservableInfo.java
@@ -20,40 +20,40 @@
  * @coverage bindings.rcp.model.widgets
  */
 public final class MultiSelectionObservableInfo extends ViewerObservableInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public MultiSelectionObservableInfo(BindableInfo bindableWidget) throws Exception {
-    super(bindableWidget, "observeMultiSelection");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public MultiSelectionObservableInfo(BindableInfo bindableWidget) throws Exception {
+		super(bindableWidget, "observeMultiSelection");
+	}
 
-  /**
-   * Note: this constructor used only for tests.
-   */
-  public MultiSelectionObservableInfo(BindableInfo bindableWidget,
-      WidgetPropertyBindableInfo bindableProperty) throws Exception {
-    super(bindableWidget, bindableProperty);
-  }
+	/**
+	 * Note: this constructor used only for tests.
+	 */
+	public MultiSelectionObservableInfo(BindableInfo bindableWidget,
+			WidgetPropertyBindableInfo bindableProperty) throws Exception {
+		super(bindableWidget, bindableProperty);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ObservableInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean canShared() {
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ObservableInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean canShared() {
+		return true;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getPresentationText() throws Exception {
-    return getBindableObject().getPresentation().getTextForBinding() + ".multiSelection";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getPresentationText() throws Exception {
+		return getBindableObject().getPresentation().getTextForBinding() + ".multiSelection";
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/SingleSelectionObservableInfo.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/SingleSelectionObservableInfo.java
index 3890f3562..aebbb33cb 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/SingleSelectionObservableInfo.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/SingleSelectionObservableInfo.java
@@ -33,109 +33,109 @@
  * @coverage bindings.rcp.model.widgets
  */
 public final class SingleSelectionObservableInfo extends ViewerObservableInfo
-    implements
-      IMasterDetailProvider,
-      IDelayValueProvider {
-  private final boolean m_isViewer;
-  private int m_delayValue;
+implements
+IMasterDetailProvider,
+IDelayValueProvider {
+	private final boolean m_isViewer;
+	private int m_delayValue;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SingleSelectionObservableInfo(BindableInfo bindableWidget, BindableInfo bindableProperty)
-      throws Exception {
-    super(bindableWidget, bindableProperty);
-    m_isViewer = isViewer(m_bindableWidget);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SingleSelectionObservableInfo(BindableInfo bindableWidget, BindableInfo bindableProperty)
+			throws Exception {
+		super(bindableWidget, bindableProperty);
+		m_isViewer = isViewer(m_bindableWidget);
+	}
 
-  public SingleSelectionObservableInfo(BindableInfo bindableWidget) throws Exception {
-    super(bindableWidget, "observeSingleSelection");
-    m_isViewer = isViewer(m_bindableWidget);
-  }
+	public SingleSelectionObservableInfo(BindableInfo bindableWidget) throws Exception {
+		super(bindableWidget, "observeSingleSelection");
+		m_isViewer = isViewer(m_bindableWidget);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public boolean isViewer() {
-    return m_isViewer;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public boolean isViewer() {
+		return m_isViewer;
+	}
 
-  private static final boolean isViewer(BindableInfo bindableObject) throws Exception {
-    if (bindableObject instanceof WidgetBindableInfo) {
-      WidgetBindableInfo bindableWidget = (WidgetBindableInfo) bindableObject;
-      return bindableWidget.getClassLoader().loadClass("org.eclipse.jface.viewers.Viewer").isAssignableFrom(
-          bindableWidget.getObjectType());
-    }
-    return false;
-  }
+	private static final boolean isViewer(BindableInfo bindableObject) throws Exception {
+		if (bindableObject instanceof WidgetBindableInfo) {
+			WidgetBindableInfo bindableWidget = (WidgetBindableInfo) bindableObject;
+			return bindableWidget.getClassLoader().loadClass("org.eclipse.jface.viewers.Viewer").isAssignableFrom(
+					bindableWidget.getObjectType());
+		}
+		return false;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IMasterDetailProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public ObservableInfo getMasterObservable() throws Exception {
-    BindableInfo bindableObject = getBindableObject();
-    //
-    for (IObserveInfo property : bindableObject.getChildren(ChildrenContext.ChildrenForPropertiesTable)) {
-      if (PropertiesSupport.DETAIL_SINGLE_SELECTION_NAME.equals(property.getPresentation().getText())) {
-        SingleSelectionObservableInfo observableInfo =
-            new SingleSelectionObservableInfo(bindableObject, (BindableInfo) property);
-        observableInfo.setDelayValue(m_delayValue);
-        if (m_codeSupport != null) {
-          observableInfo.setCodeSupport(m_codeSupport);
-        }
-        return observableInfo;
-      }
-    }
-    //
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IMasterDetailProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public ObservableInfo getMasterObservable() throws Exception {
+		BindableInfo bindableObject = getBindableObject();
+		//
+		for (IObserveInfo property : bindableObject.getChildren(ChildrenContext.ChildrenForPropertiesTable)) {
+			if (PropertiesSupport.DETAIL_SINGLE_SELECTION_NAME.equals(property.getPresentation().getText())) {
+				SingleSelectionObservableInfo observableInfo =
+						new SingleSelectionObservableInfo(bindableObject, (BindableInfo) property);
+				observableInfo.setDelayValue(m_delayValue);
+				if (m_codeSupport != null) {
+					observableInfo.setCodeSupport(m_codeSupport);
+				}
+				return observableInfo;
+			}
+		}
+		//
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // DelayValue
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final int getDelayValue() {
-    return m_delayValue;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// DelayValue
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final int getDelayValue() {
+		return m_delayValue;
+	}
 
-  @Override
-  public final void setDelayValue(int delayValue) {
-    Assert.isTrue(delayValue >= 0);
-    m_delayValue = delayValue;
-  }
+	@Override
+	public final void setDelayValue(int delayValue) {
+		Assert.isTrue(delayValue >= 0);
+		m_delayValue = delayValue;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void createContentProviders(List<IUiContentProvider> providers,
-      BindingUiContentProviderContext context,
-      DatabindingsProvider provider) throws Exception {
-    super.createContentProviders(providers, context, provider);
-    if (m_isViewer) {
-      providers.add(new SwtDelayUiContentProvider(this,
-          Messages.SingleSelectionObservableInfo_viewerDelay));
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void createContentProviders(List<IUiContentProvider> providers,
+			BindingUiContentProviderContext context,
+			DatabindingsProvider provider) throws Exception {
+		super.createContentProviders(providers, context, provider);
+		if (m_isViewer) {
+			providers.add(new SwtDelayUiContentProvider(this,
+					Messages.SingleSelectionObservableInfo_viewerDelay));
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getPresentationText() throws Exception {
-    return getBindableObject().getPresentation().getTextForBinding() + ".selection";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getPresentationText() throws Exception {
+		return getBindableObject().getPresentation().getTextForBinding() + ".selection";
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/SwtObservableInfo.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/SwtObservableInfo.java
index c218aaa69..cf43582fd 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/SwtObservableInfo.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/SwtObservableInfo.java
@@ -30,61 +30,61 @@
  * @coverage bindings.rcp.model.widgets
  */
 public class SwtObservableInfo extends ObservableInfo implements IDelayValueProvider {
-  protected final WidgetBindableInfo m_bindableWidget;
-  protected final WidgetPropertyBindableInfo m_bindableProperty;
-  private int m_delayValue;
+	protected final WidgetBindableInfo m_bindableWidget;
+	protected final WidgetPropertyBindableInfo m_bindableProperty;
+	private int m_delayValue;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SwtObservableInfo(WidgetBindableInfo bindableWidget,
-      WidgetPropertyBindableInfo bindableProperty) {
-    m_bindableWidget = bindableWidget;
-    m_bindableProperty = bindableProperty;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SwtObservableInfo(WidgetBindableInfo bindableWidget,
+			WidgetPropertyBindableInfo bindableProperty) {
+		m_bindableWidget = bindableWidget;
+		m_bindableProperty = bindableProperty;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ObservableInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final BindableInfo getBindableObject() {
-    return m_bindableWidget;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ObservableInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final BindableInfo getBindableObject() {
+		return m_bindableWidget;
+	}
 
-  @Override
-  public final BindableInfo getBindableProperty() {
-    return m_bindableProperty;
-  }
+	@Override
+	public final BindableInfo getBindableProperty() {
+		return m_bindableProperty;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // DelayValue
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final int getDelayValue() {
-    return m_delayValue;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// DelayValue
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final int getDelayValue() {
+		return m_delayValue;
+	}
 
-  @Override
-  public final void setDelayValue(int delayValue) {
-    Assert.isTrue(delayValue >= 0);
-    m_delayValue = delayValue;
-  }
+	@Override
+	public final void setDelayValue(int delayValue) {
+		Assert.isTrue(delayValue >= 0);
+		m_delayValue = delayValue;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void createContentProviders(List<IUiContentProvider> providers,
-      BindingUiContentProviderContext context,
-      DatabindingsProvider provider) throws Exception {
-    providers.add(new SwtDelayUiContentProvider(this, Messages.SwtObservableInfo_swtDelay));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void createContentProviders(List<IUiContentProvider> providers,
+			BindingUiContentProviderContext context,
+			DatabindingsProvider provider) throws Exception {
+		providers.add(new SwtDelayUiContentProvider(this, Messages.SwtObservableInfo_swtDelay));
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/TextSwtObservableInfo.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/TextSwtObservableInfo.java
index 0e50eec53..5e2597dd6 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/TextSwtObservableInfo.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/TextSwtObservableInfo.java
@@ -34,104 +34,104 @@
  * @coverage bindings.rcp.model.widgets
  */
 public final class TextSwtObservableInfo extends SwtObservableInfo {
-  private static final int[] VALID_UPDATE_EVENT_TYPES = {
-      SWT.Modify,
-      SWT.FocusOut,
-      SWT.DefaultSelection,
-      SWT.None};
-  public static final String[] TEXT_EVENTS = {
-      "SWT.Modify",
-      "SWT.FocusOut",
-      "SWT.DefaultSelection",
-      "SWT.NONE"};
-  private List<String> m_updateEvents;
+	private static final int[] VALID_UPDATE_EVENT_TYPES = {
+			SWT.Modify,
+			SWT.FocusOut,
+			SWT.DefaultSelection,
+			SWT.None};
+	public static final String[] TEXT_EVENTS = {
+			"SWT.Modify",
+			"SWT.FocusOut",
+			"SWT.DefaultSelection",
+	"SWT.NONE"};
+	private List<String> m_updateEvents;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public TextSwtObservableInfo(WidgetBindableInfo bindableWidget,
-      WidgetPropertyBindableInfo bindableProperty) {
-    this(bindableWidget, bindableProperty, new int[]{SWT.Modify});
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public TextSwtObservableInfo(WidgetBindableInfo bindableWidget,
+			WidgetPropertyBindableInfo bindableProperty) {
+		this(bindableWidget, bindableProperty, new int[]{SWT.Modify});
+	}
 
-  public TextSwtObservableInfo(WidgetBindableInfo bindableWidget,
-      WidgetPropertyBindableInfo bindableProperty,
-      int updateEvent) {
-    this(bindableWidget, bindableProperty, new int[]{updateEvent});
-  }
+	public TextSwtObservableInfo(WidgetBindableInfo bindableWidget,
+			WidgetPropertyBindableInfo bindableProperty,
+			int updateEvent) {
+		this(bindableWidget, bindableProperty, new int[]{updateEvent});
+	}
 
-  public TextSwtObservableInfo(WidgetBindableInfo bindableWidget,
-      WidgetPropertyBindableInfo bindableProperty,
-      int[] updateEvents) {
-    super(bindableWidget, bindableProperty);
-    Assert.isNotNull(updateEvents);
-    m_updateEvents = getEventsSources(updateEvents);
-  }
+	public TextSwtObservableInfo(WidgetBindableInfo bindableWidget,
+			WidgetPropertyBindableInfo bindableProperty,
+			int[] updateEvents) {
+		super(bindableWidget, bindableProperty);
+		Assert.isNotNull(updateEvents);
+		m_updateEvents = getEventsSources(updateEvents);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public List<String> getUpdateEvents() {
-    return Lists.newArrayList(m_updateEvents);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public List<String> getUpdateEvents() {
+		return Lists.newArrayList(m_updateEvents);
+	}
 
-  public void setUpdateEvents(List<String> updateEvents) {
-    m_updateEvents = Lists.newArrayList(updateEvents);
-  }
+	public void setUpdateEvents(List<String> updateEvents) {
+		m_updateEvents = Lists.newArrayList(updateEvents);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getPresentationText() throws Exception {
-    String presentationText = super.getPresentationText();
-    if (!m_updateEvents.isEmpty()) {
-      presentationText += "(" + StringUtils.join(m_updateEvents, ", ") + ")";
-    }
-    return presentationText;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getPresentationText() throws Exception {
+		String presentationText = super.getPresentationText();
+		if (!m_updateEvents.isEmpty()) {
+			presentationText += "(" + StringUtils.join(m_updateEvents, ", ") + ")";
+		}
+		return presentationText;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void createContentProviders(List<IUiContentProvider> providers,
-      BindingUiContentProviderContext context,
-      DatabindingsProvider provider) throws Exception {
-    providers.add(new SwtTextEventsUiContentProvider(this));
-    super.createContentProviders(providers, context, provider);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void createContentProviders(List<IUiContentProvider> providers,
+			BindingUiContentProviderContext context,
+			DatabindingsProvider provider) throws Exception {
+		providers.add(new SwtTextEventsUiContentProvider(this));
+		super.createContentProviders(providers, context, provider);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utilities
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static List<String> getEventsSources(int[] updateEvents) {
-    List<String> updateEventStrings = Lists.newArrayList();
-    if (updateEvents.length == 1) {
-      int updateEventTypeIndex = ArrayUtils.indexOf(VALID_UPDATE_EVENT_TYPES, updateEvents[0]);
-      Assert.isTrue(updateEventTypeIndex >= 0
-          && updateEventTypeIndex < VALID_UPDATE_EVENT_TYPES.length);
-      updateEventStrings.add(TEXT_EVENTS[updateEventTypeIndex]);
-    } else {
-      for (int i = 0; i < updateEvents.length; i++) {
-        int eventValue = updateEvents[i];
-        int updateEventTypeIndex = ArrayUtils.indexOf(VALID_UPDATE_EVENT_TYPES, eventValue);
-        Assert.isTrue(eventValue != SWT.NONE
-            && updateEventTypeIndex >= 0
-            && updateEventTypeIndex < VALID_UPDATE_EVENT_TYPES.length);
-        updateEventStrings.add(TEXT_EVENTS[updateEventTypeIndex]);
-      }
-    }
-    return updateEventStrings;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utilities
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static List<String> getEventsSources(int[] updateEvents) {
+		List<String> updateEventStrings = Lists.newArrayList();
+		if (updateEvents.length == 1) {
+			int updateEventTypeIndex = ArrayUtils.indexOf(VALID_UPDATE_EVENT_TYPES, updateEvents[0]);
+			Assert.isTrue(updateEventTypeIndex >= 0
+					&& updateEventTypeIndex < VALID_UPDATE_EVENT_TYPES.length);
+			updateEventStrings.add(TEXT_EVENTS[updateEventTypeIndex]);
+		} else {
+			for (int i = 0; i < updateEvents.length; i++) {
+				int eventValue = updateEvents[i];
+				int updateEventTypeIndex = ArrayUtils.indexOf(VALID_UPDATE_EVENT_TYPES, eventValue);
+				Assert.isTrue(eventValue != SWT.NONE
+						&& updateEventTypeIndex >= 0
+						&& updateEventTypeIndex < VALID_UPDATE_EVENT_TYPES.length);
+				updateEventStrings.add(TEXT_EVENTS[updateEventTypeIndex]);
+			}
+		}
+		return updateEventStrings;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/ViewerObservableInfo.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/ViewerObservableInfo.java
index be2c1186c..97920afec 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/ViewerObservableInfo.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/ViewerObservableInfo.java
@@ -21,38 +21,38 @@
  * @coverage bindings.rcp.model.widgets
  */
 public abstract class ViewerObservableInfo extends ObservableInfo {
-  protected final BindableInfo m_bindableWidget;
-  protected final BindableInfo m_bindableProperty;
+	protected final BindableInfo m_bindableWidget;
+	protected final BindableInfo m_bindableProperty;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ViewerObservableInfo(BindableInfo bindableWidget, BindableInfo bindableProperty)
-      throws Exception {
-    Assert.isNotNull(bindableProperty);
-    m_bindableWidget = bindableWidget;
-    m_bindableProperty = bindableProperty;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ViewerObservableInfo(BindableInfo bindableWidget, BindableInfo bindableProperty)
+			throws Exception {
+		Assert.isNotNull(bindableProperty);
+		m_bindableWidget = bindableWidget;
+		m_bindableProperty = bindableProperty;
+	}
 
-  public ViewerObservableInfo(BindableInfo bindableWidget, String propertyReference)
-      throws Exception {
-    this(bindableWidget, bindableWidget.resolvePropertyReference(propertyReference));
-  }
+	public ViewerObservableInfo(BindableInfo bindableWidget, String propertyReference)
+			throws Exception {
+		this(bindableWidget, bindableWidget.resolvePropertyReference(propertyReference));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ObservableInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final BindableInfo getBindableObject() {
-    return m_bindableWidget;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ObservableInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final BindableInfo getBindableObject() {
+		return m_bindableWidget;
+	}
 
-  @Override
-  public final BindableInfo getBindableProperty() {
-    return m_bindableProperty;
-  }
+	@Override
+	public final BindableInfo getBindableProperty() {
+		return m_bindableProperty;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/properties/AbstractWidgetPropertiesCodeSupport.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/properties/AbstractWidgetPropertiesCodeSupport.java
index 2ed8b2d89..34851907f 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/properties/AbstractWidgetPropertiesCodeSupport.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/properties/AbstractWidgetPropertiesCodeSupport.java
@@ -38,81 +38,81 @@
  * @coverage bindings.rcp.model.widgets
  */
 public abstract class AbstractWidgetPropertiesCodeSupport extends ObservableCodeSupport {
-  private final String m_propertyReference;
-  private final String m_signatureObserve;
-  private final String m_signatureObserveDelayed;
+	private final String m_propertyReference;
+	private final String m_signatureObserve;
+	private final String m_signatureObserveDelayed;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractWidgetPropertiesCodeSupport(String propertyReference,
-      String signatureObserve,
-      String signatureObserveDelayed) {
-    m_propertyReference = propertyReference;
-    m_signatureObserve = signatureObserve;
-    m_signatureObserveDelayed = signatureObserveDelayed;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractWidgetPropertiesCodeSupport(String propertyReference,
+			String signatureObserve,
+			String signatureObserveDelayed) {
+		m_propertyReference = propertyReference;
+		m_signatureObserve = signatureObserve;
+		m_signatureObserveDelayed = signatureObserveDelayed;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public String getPropertyReference() {
-    return m_propertyReference;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public String getPropertyReference() {
+		return m_propertyReference;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parser
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public AstObjectInfo parseExpression(AstEditor editor,
-      String signature,
-      MethodInvocation invocation,
-      Expression[] arguments,
-      IModelResolver resolver,
-      IDatabindingsProvider provider) throws Exception {
-    int delayValue = 0;
-    Expression widgetExpression = null;
-    //
-    if (m_signatureObserve != null && m_signatureObserve.equals(signature)) {
-      widgetExpression = arguments[0];
-    } else if (m_signatureObserveDelayed != null && m_signatureObserveDelayed.equals(signature)) {
-      delayValue = CoreUtils.evaluate(Integer.class, editor, arguments[0]);
-      widgetExpression = arguments[1];
-    } else {
-      return null;
-    }
-    //
-    WidgetsObserveTypeContainer container =
-        (WidgetsObserveTypeContainer) DatabindingsProvider.cast(provider).getContainer(
-            ObserveType.WIDGETS);
-    // prepare widget
-    WidgetBindableInfo bindableWidget = container.getBindableWidget(widgetExpression);
-    if (bindableWidget == null) {
-      AbstractParser.addError(editor, MessageFormat.format(
-          Messages.AbstractWidgetPropertiesCodeSupport_widgetArgumentNotFound,
-          widgetExpression), new Throwable());
-      return null;
-    }
-    // prepare property
-    WidgetPropertyBindableInfo bindableProperty =
-        bindableWidget.resolvePropertyReference(m_propertyReference);
-    Assert.isNotNull(bindableProperty);
-    //
-    ObservableInfo observable = createObservable(bindableWidget, bindableProperty, delayValue);
-    observable.setCodeSupport(this);
-    return observable;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parser
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public AstObjectInfo parseExpression(AstEditor editor,
+			String signature,
+			MethodInvocation invocation,
+			Expression[] arguments,
+			IModelResolver resolver,
+			IDatabindingsProvider provider) throws Exception {
+		int delayValue = 0;
+		Expression widgetExpression = null;
+		//
+		if (m_signatureObserve != null && m_signatureObserve.equals(signature)) {
+			widgetExpression = arguments[0];
+		} else if (m_signatureObserveDelayed != null && m_signatureObserveDelayed.equals(signature)) {
+			delayValue = CoreUtils.evaluate(Integer.class, editor, arguments[0]);
+			widgetExpression = arguments[1];
+		} else {
+			return null;
+		}
+		//
+		WidgetsObserveTypeContainer container =
+				(WidgetsObserveTypeContainer) DatabindingsProvider.cast(provider).getContainer(
+						ObserveType.WIDGETS);
+		// prepare widget
+		WidgetBindableInfo bindableWidget = container.getBindableWidget(widgetExpression);
+		if (bindableWidget == null) {
+			AbstractParser.addError(editor, MessageFormat.format(
+					Messages.AbstractWidgetPropertiesCodeSupport_widgetArgumentNotFound,
+					widgetExpression), new Throwable());
+			return null;
+		}
+		// prepare property
+		WidgetPropertyBindableInfo bindableProperty =
+				bindableWidget.resolvePropertyReference(m_propertyReference);
+		Assert.isNotNull(bindableProperty);
+		//
+		ObservableInfo observable = createObservable(bindableWidget, bindableProperty, delayValue);
+		observable.setCodeSupport(this);
+		return observable;
+	}
 
-  /**
-   * @return {@link ObservableInfo} model for given widget and property.
-   */
-  protected abstract ObservableInfo createObservable(WidgetBindableInfo bindableWidget,
-      WidgetPropertyBindableInfo bindableProperty,
-      int delayValue) throws Exception;
+	/**
+	 * @return {@link ObservableInfo} model for given widget and property.
+	 */
+	protected abstract ObservableInfo createObservable(WidgetBindableInfo bindableWidget,
+			WidgetPropertyBindableInfo bindableProperty,
+			int delayValue) throws Exception;
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/properties/DetailPropertyCodeSupport.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/properties/DetailPropertyCodeSupport.java
index 415de169a..49e3d1083 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/properties/DetailPropertyCodeSupport.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/properties/DetailPropertyCodeSupport.java
@@ -42,124 +42,124 @@
  * @coverage bindings.rcp.model.widgets
  */
 public abstract class DetailPropertyCodeSupport extends ObservableCodeSupport {
-  private final String m_observeClass;
-  private final String m_observeSignature;
-  private final String m_observeRealmSignature;
-  private final String m_detailObservableClass;
-  private final String m_observeMethod;
-  private final ViewerPropertySingleSelectionCodeSupport m_selectionProperty;
-  protected final BeanPropertiesCodeSupport m_detailProperty;
-  protected SingleSelectionObservableInfo m_masterObservable;
-  private DetailBeanObservableInfo m_detailObservable;
+	private final String m_observeClass;
+	private final String m_observeSignature;
+	private final String m_observeRealmSignature;
+	private final String m_detailObservableClass;
+	private final String m_observeMethod;
+	private final ViewerPropertySingleSelectionCodeSupport m_selectionProperty;
+	protected final BeanPropertiesCodeSupport m_detailProperty;
+	protected SingleSelectionObservableInfo m_masterObservable;
+	private DetailBeanObservableInfo m_detailObservable;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DetailPropertyCodeSupport(String observeClass,
-      String detailObservableClass,
-      String observeMethod,
-      ViewerPropertySingleSelectionCodeSupport selectionProperty,
-      BeanPropertiesCodeSupport detailProperty) {
-    m_observeClass = observeClass;
-    m_observeSignature = m_observeClass + ".observe(java.lang.Object)";
-    m_observeRealmSignature =
-        m_observeClass + ".observe(org.eclipse.core.databinding.observable.Realm,java.lang.Object)";
-    m_detailObservableClass = detailObservableClass;
-    m_observeMethod = observeMethod;
-    m_selectionProperty = selectionProperty;
-    m_detailProperty = detailProperty;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DetailPropertyCodeSupport(String observeClass,
+			String detailObservableClass,
+			String observeMethod,
+			ViewerPropertySingleSelectionCodeSupport selectionProperty,
+			BeanPropertiesCodeSupport detailProperty) {
+		m_observeClass = observeClass;
+		m_observeSignature = m_observeClass + ".observe(java.lang.Object)";
+		m_observeRealmSignature =
+				m_observeClass + ".observe(org.eclipse.core.databinding.observable.Realm,java.lang.Object)";
+		m_detailObservableClass = detailObservableClass;
+		m_observeMethod = observeMethod;
+		m_selectionProperty = selectionProperty;
+		m_detailProperty = detailProperty;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parser
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public AstObjectInfo parseExpression(AstEditor editor,
-      String signature,
-      MethodInvocation invocation,
-      Expression[] arguments,
-      IModelResolver resolver,
-      IDatabindingsProvider provider) throws Exception {
-    Expression widgetExpression = null;
-    if (m_observeSignature.equals(signature)) {
-      widgetExpression = arguments[0];
-    } else if (m_observeRealmSignature.equals(signature)) {
-      widgetExpression = arguments[1];
-    } else {
-      return null;
-    }
-    //
-    WidgetsObserveTypeContainer container =
-        (WidgetsObserveTypeContainer) DatabindingsProvider.cast(provider).getContainer(
-            ObserveType.WIDGETS);
-    // prepare widget
-    WidgetBindableInfo bindableWidget = container.getBindableWidget(widgetExpression);
-    if (bindableWidget == null) {
-      AbstractParser.addError(editor, MessageFormat.format(
-          Messages.DetailPropertyCodeSupport_widgetArgumentNotFound,
-          widgetExpression), new Throwable());
-      return null;
-    }
-    // prepare property
-    WidgetPropertyBindableInfo bindableProperty =
-        bindableWidget.resolvePropertyReference("observeSingleSelection");
-    Assert.isNotNull(bindableProperty);
-    //
-    m_masterObservable = new SingleSelectionObservableInfo(bindableWidget, bindableProperty);
-    m_masterObservable = (SingleSelectionObservableInfo) m_masterObservable.getMasterObservable();
-    Assert.isNotNull(m_masterObservable);
-    //
-    m_masterObservable.setCodeSupport(new ObservableCodeSupport() {
-      @Override
-      public void addSourceCode(ObservableInfo observable,
-          List<String> lines,
-          CodeGenerationSupport generationSupport) throws Exception {
-      }
-    });
-    //
-    m_detailObservable = createDetailObservable();
-    m_detailObservable.setCodeSupport(this);
-    return m_detailObservable;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parser
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public AstObjectInfo parseExpression(AstEditor editor,
+			String signature,
+			MethodInvocation invocation,
+			Expression[] arguments,
+			IModelResolver resolver,
+			IDatabindingsProvider provider) throws Exception {
+		Expression widgetExpression = null;
+		if (m_observeSignature.equals(signature)) {
+			widgetExpression = arguments[0];
+		} else if (m_observeRealmSignature.equals(signature)) {
+			widgetExpression = arguments[1];
+		} else {
+			return null;
+		}
+		//
+		WidgetsObserveTypeContainer container =
+				(WidgetsObserveTypeContainer) DatabindingsProvider.cast(provider).getContainer(
+						ObserveType.WIDGETS);
+		// prepare widget
+		WidgetBindableInfo bindableWidget = container.getBindableWidget(widgetExpression);
+		if (bindableWidget == null) {
+			AbstractParser.addError(editor, MessageFormat.format(
+					Messages.DetailPropertyCodeSupport_widgetArgumentNotFound,
+					widgetExpression), new Throwable());
+			return null;
+		}
+		// prepare property
+		WidgetPropertyBindableInfo bindableProperty =
+				bindableWidget.resolvePropertyReference("observeSingleSelection");
+		Assert.isNotNull(bindableProperty);
+		//
+		m_masterObservable = new SingleSelectionObservableInfo(bindableWidget, bindableProperty);
+		m_masterObservable = (SingleSelectionObservableInfo) m_masterObservable.getMasterObservable();
+		Assert.isNotNull(m_masterObservable);
+		//
+		m_masterObservable.setCodeSupport(new ObservableCodeSupport() {
+			@Override
+			public void addSourceCode(ObservableInfo observable,
+					List<String> lines,
+					CodeGenerationSupport generationSupport) throws Exception {
+			}
+		});
+		//
+		m_detailObservable = createDetailObservable();
+		m_detailObservable.setCodeSupport(this);
+		return m_detailObservable;
+	}
 
-  /**
-   * @return {@link DetailBeanObservableInfo} observable with this code generator.
-   */
-  protected abstract DetailBeanObservableInfo createDetailObservable();
+	/**
+	 * @return {@link DetailBeanObservableInfo} observable with this code generator.
+	 */
+	protected abstract DetailBeanObservableInfo createDetailObservable();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void addSourceCode(ObservableInfo observable,
-      List<String> lines,
-      CodeGenerationSupport generationSupport) throws Exception {
-    String sourceCode =
-        m_selectionProperty.getMasterSourceCode(lines, generationSupport)
-            + "."
-            + m_observeMethod
-            + "("
-            + m_detailProperty.getDetailSourceCode(m_detailObservable, lines, generationSupport)
-            + ")";
-    if (getVariableIdentifier() != null) {
-      if (generationSupport.addModel(this)) {
-        lines.add(m_observeClass + " " + getVariableIdentifier() + " = " + sourceCode + ";");
-      }
-      sourceCode = getVariableIdentifier();
-    }
-    lines.add(m_detailObservableClass
-        + " "
-        + m_detailObservable.getVariableIdentifier()
-        + " = "
-        + sourceCode
-        + ".observe("
-        + m_masterObservable.getBindableObject().getReference()
-        + ");");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void addSourceCode(ObservableInfo observable,
+			List<String> lines,
+			CodeGenerationSupport generationSupport) throws Exception {
+		String sourceCode =
+				m_selectionProperty.getMasterSourceCode(lines, generationSupport)
+				+ "."
+				+ m_observeMethod
+				+ "("
+				+ m_detailProperty.getDetailSourceCode(m_detailObservable, lines, generationSupport)
+				+ ")";
+		if (getVariableIdentifier() != null) {
+			if (generationSupport.addModel(this)) {
+				lines.add(m_observeClass + " " + getVariableIdentifier() + " = " + sourceCode + ";");
+			}
+			sourceCode = getVariableIdentifier();
+		}
+		lines.add(m_detailObservableClass
+				+ " "
+				+ m_detailObservable.getVariableIdentifier()
+				+ " = "
+				+ sourceCode
+				+ ".observe("
+				+ m_masterObservable.getBindableObject().getReference()
+				+ ");");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/properties/ValueListPropertyCodeSupport.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/properties/ValueListPropertyCodeSupport.java
index a3369ecbd..0599b5c65 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/properties/ValueListPropertyCodeSupport.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/properties/ValueListPropertyCodeSupport.java
@@ -21,33 +21,33 @@
  * @coverage bindings.rcp.model.widgets
  */
 public class ValueListPropertyCodeSupport extends DetailPropertyCodeSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ValueListPropertyCodeSupport(ViewerPropertySingleSelectionCodeSupport selectionProperty,
-      ListPropertyCodeSupport detailProperty) {
-    super("org.eclipse.core.databinding.property.list.IListProperty",
-        "org.eclipse.core.databinding.observable.list.IObservableList",
-        "list",
-        selectionProperty,
-        detailProperty);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ValueListPropertyCodeSupport(ViewerPropertySingleSelectionCodeSupport selectionProperty,
+			ListPropertyCodeSupport detailProperty) {
+		super("org.eclipse.core.databinding.property.list.IListProperty",
+				"org.eclipse.core.databinding.observable.list.IObservableList",
+				"list",
+				selectionProperty,
+				detailProperty);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parser
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected DetailBeanObservableInfo createDetailObservable() {
-    DetailListBeanObservableInfo detailObservable =
-        new DetailListBeanObservableInfo(m_masterObservable,
-            null,
-            m_detailProperty.getParserPropertyReference(),
-            m_detailProperty.getParserPropertyType());
-    detailObservable.setPojoBindable(m_masterObservable.isPojoBindable());
-    return detailObservable;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parser
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected DetailBeanObservableInfo createDetailObservable() {
+		DetailListBeanObservableInfo detailObservable =
+				new DetailListBeanObservableInfo(m_masterObservable,
+						null,
+						m_detailProperty.getParserPropertyReference(),
+						m_detailProperty.getParserPropertyType());
+		detailObservable.setPojoBindable(m_masterObservable.isPojoBindable());
+		return detailObservable;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/properties/ValueSetPropertyCodeSupport.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/properties/ValueSetPropertyCodeSupport.java
index 1586a5389..32a837150 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/properties/ValueSetPropertyCodeSupport.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/properties/ValueSetPropertyCodeSupport.java
@@ -21,33 +21,33 @@
  * @coverage bindings.rcp.model.widgets
  */
 public class ValueSetPropertyCodeSupport extends DetailPropertyCodeSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ValueSetPropertyCodeSupport(ViewerPropertySingleSelectionCodeSupport selectionProperty,
-      SetPropertyCodeSupport detailProperty) {
-    super("org.eclipse.core.databinding.property.set.ISetProperty",
-        "org.eclipse.core.databinding.observable.set.IObservableSet",
-        "set",
-        selectionProperty,
-        detailProperty);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ValueSetPropertyCodeSupport(ViewerPropertySingleSelectionCodeSupport selectionProperty,
+			SetPropertyCodeSupport detailProperty) {
+		super("org.eclipse.core.databinding.property.set.ISetProperty",
+				"org.eclipse.core.databinding.observable.set.IObservableSet",
+				"set",
+				selectionProperty,
+				detailProperty);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parser
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected DetailBeanObservableInfo createDetailObservable() {
-    DetailSetBeanObservableInfo detailObservable =
-        new DetailSetBeanObservableInfo(m_masterObservable,
-            null,
-            m_detailProperty.getParserPropertyReference(),
-            m_detailProperty.getParserPropertyType());
-    detailObservable.setPojoBindable(m_masterObservable.isPojoBindable());
-    return detailObservable;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parser
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected DetailBeanObservableInfo createDetailObservable() {
+		DetailSetBeanObservableInfo detailObservable =
+				new DetailSetBeanObservableInfo(m_masterObservable,
+						null,
+						m_detailProperty.getParserPropertyReference(),
+						m_detailProperty.getParserPropertyType());
+		detailObservable.setPojoBindable(m_masterObservable.isPojoBindable());
+		return detailObservable;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/properties/ValueValuePropertyCodeSupport.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/properties/ValueValuePropertyCodeSupport.java
index 3c359b154..13b18f54c 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/properties/ValueValuePropertyCodeSupport.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/properties/ValueValuePropertyCodeSupport.java
@@ -21,33 +21,33 @@
  * @coverage bindings.rcp.model.widgets
  */
 public class ValueValuePropertyCodeSupport extends DetailPropertyCodeSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ValueValuePropertyCodeSupport(ViewerPropertySingleSelectionCodeSupport selectionProperty,
-      ValuePropertyCodeSupport detailProperty) {
-    super("org.eclipse.core.databinding.property.value.IValueProperty",
-        "org.eclipse.core.databinding.observable.value.IObservableValue",
-        "value",
-        selectionProperty,
-        detailProperty);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ValueValuePropertyCodeSupport(ViewerPropertySingleSelectionCodeSupport selectionProperty,
+			ValuePropertyCodeSupport detailProperty) {
+		super("org.eclipse.core.databinding.property.value.IValueProperty",
+				"org.eclipse.core.databinding.observable.value.IObservableValue",
+				"value",
+				selectionProperty,
+				detailProperty);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parser
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected DetailBeanObservableInfo createDetailObservable() {
-    DetailValueBeanObservableInfo detailObservable =
-        new DetailValueBeanObservableInfo(m_masterObservable,
-            null,
-            m_detailProperty.getParserPropertyReference(),
-            m_detailProperty.getParserPropertyType());
-    detailObservable.setPojoBindable(m_masterObservable.isPojoBindable());
-    return detailObservable;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parser
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected DetailBeanObservableInfo createDetailObservable() {
+		DetailValueBeanObservableInfo detailObservable =
+				new DetailValueBeanObservableInfo(m_masterObservable,
+						null,
+						m_detailProperty.getParserPropertyReference(),
+						m_detailProperty.getParserPropertyType());
+		detailObservable.setPojoBindable(m_masterObservable.isPojoBindable());
+		return detailObservable;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/properties/ViewerObservableCodeSupport.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/properties/ViewerObservableCodeSupport.java
index 5129d0234..e0e65439b 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/properties/ViewerObservableCodeSupport.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/properties/ViewerObservableCodeSupport.java
@@ -22,35 +22,35 @@
  * @coverage bindings.rcp.model.widgets
  */
 public abstract class ViewerObservableCodeSupport extends AbstractWidgetPropertiesCodeSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ViewerObservableCodeSupport(String propertyReference,
-      String signatureObserve,
-      String signatureObserveDelayed) {
-    super(propertyReference, signatureObserve, signatureObserveDelayed);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ViewerObservableCodeSupport(String propertyReference,
+			String signatureObserve,
+			String signatureObserveDelayed) {
+		super(propertyReference, signatureObserve, signatureObserveDelayed);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void addSourceCode(ObservableInfo observable,
-      List<String> lines,
-      CodeGenerationSupport generationSupport) throws Exception {
-    // prepare variable
-    if (observable.getVariableIdentifier() == null) {
-      String propertyReference = observable.getBindableProperty().getReference();
-      if (propertyReference.startsWith("Observe")) {
-        propertyReference = propertyReference.substring(7);
-      }
-      observable.setVariableIdentifier(generationSupport.generateLocalName(
-          propertyReference,
-          observable.getBindableObject().getReference()));
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void addSourceCode(ObservableInfo observable,
+			List<String> lines,
+			CodeGenerationSupport generationSupport) throws Exception {
+		// prepare variable
+		if (observable.getVariableIdentifier() == null) {
+			String propertyReference = observable.getBindableProperty().getReference();
+			if (propertyReference.startsWith("Observe")) {
+				propertyReference = propertyReference.substring(7);
+			}
+			observable.setVariableIdentifier(generationSupport.generateLocalName(
+					propertyReference,
+					observable.getBindableObject().getReference()));
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/properties/ViewerPropertyCheckedElementsCodeSupport.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/properties/ViewerPropertyCheckedElementsCodeSupport.java
index 6e8505166..528d1c825 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/properties/ViewerPropertyCheckedElementsCodeSupport.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/properties/ViewerPropertyCheckedElementsCodeSupport.java
@@ -27,68 +27,68 @@
  * @coverage bindings.rcp.model.widgets
  */
 public class ViewerPropertyCheckedElementsCodeSupport extends ViewerObservableCodeSupport {
-  private final Class<?> m_parseElementType;
+	private final Class<?> m_parseElementType;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ViewerPropertyCheckedElementsCodeSupport() {
-    this(null);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ViewerPropertyCheckedElementsCodeSupport() {
+		this(null);
+	}
 
-  public ViewerPropertyCheckedElementsCodeSupport(Class<?> elementType) {
-    super("observeCheckedElements",
-        "org.eclipse.jface.databinding.viewers.IViewerSetProperty.observe(org.eclipse.jface.viewers.Viewer)",
-        null);
-    m_parseElementType = elementType;
-  }
+	public ViewerPropertyCheckedElementsCodeSupport(Class<?> elementType) {
+		super("observeCheckedElements",
+				"org.eclipse.jface.databinding.viewers.IViewerSetProperty.observe(org.eclipse.jface.viewers.Viewer)",
+				null);
+		m_parseElementType = elementType;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parser
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected ObservableInfo createObservable(WidgetBindableInfo bindableWidget,
-      WidgetPropertyBindableInfo bindableProperty,
-      int delayValue) throws Exception {
-    Assert.isNotNull(m_parseElementType);
-    return new CheckedElementsObservableInfo(bindableWidget, m_parseElementType);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parser
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected ObservableInfo createObservable(WidgetBindableInfo bindableWidget,
+			WidgetPropertyBindableInfo bindableProperty,
+			int delayValue) throws Exception {
+		Assert.isNotNull(m_parseElementType);
+		return new CheckedElementsObservableInfo(bindableWidget, m_parseElementType);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void addSourceCode(ObservableInfo observable,
-      List<String> lines,
-      CodeGenerationSupport generationSupport) throws Exception {
-    super.addSourceCode(observable, lines, generationSupport);
-    CheckedElementsObservableInfo checkedObservable = (CheckedElementsObservableInfo) observable;
-    String sourceCode =
-        "org.eclipse.jface.databinding.viewers.typed.ViewerProperties.checkedElements("
-            + CoreUtils.getClassName(checkedObservable.getElementType())
-            + ".class)";
-    if (getVariableIdentifier() != null) {
-      if (generationSupport.addModel(this)) {
-        lines.add("org.eclipse.jface.databinding.viewers.IViewerSetProperty "
-            + getVariableIdentifier()
-            + " = "
-            + sourceCode
-            + ";");
-      }
-      sourceCode = getVariableIdentifier();
-    }
-    lines.add("org.eclipse.core.databinding.observable.set.IObservableSet "
-        + observable.getVariableIdentifier()
-        + " = "
-        + sourceCode
-        + ".observe("
-        + observable.getBindableObject().getReference()
-        + ");");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void addSourceCode(ObservableInfo observable,
+			List<String> lines,
+			CodeGenerationSupport generationSupport) throws Exception {
+		super.addSourceCode(observable, lines, generationSupport);
+		CheckedElementsObservableInfo checkedObservable = (CheckedElementsObservableInfo) observable;
+		String sourceCode =
+				"org.eclipse.jface.databinding.viewers.typed.ViewerProperties.checkedElements("
+						+ CoreUtils.getClassName(checkedObservable.getElementType())
+						+ ".class)";
+		if (getVariableIdentifier() != null) {
+			if (generationSupport.addModel(this)) {
+				lines.add("org.eclipse.jface.databinding.viewers.IViewerSetProperty "
+						+ getVariableIdentifier()
+						+ " = "
+						+ sourceCode
+						+ ";");
+			}
+			sourceCode = getVariableIdentifier();
+		}
+		lines.add("org.eclipse.core.databinding.observable.set.IObservableSet "
+				+ observable.getVariableIdentifier()
+				+ " = "
+				+ sourceCode
+				+ ".observe("
+				+ observable.getBindableObject().getReference()
+				+ ");");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/properties/ViewerPropertyFiltersCodeSupport.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/properties/ViewerPropertyFiltersCodeSupport.java
index 78001c28f..be8daa3e7 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/properties/ViewerPropertyFiltersCodeSupport.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/properties/ViewerPropertyFiltersCodeSupport.java
@@ -25,56 +25,56 @@
  * @coverage bindings.rcp.model.widgets
  */
 public class ViewerPropertyFiltersCodeSupport extends ViewerObservableCodeSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ViewerPropertyFiltersCodeSupport() {
-    super("observeFilters",
-        "org.eclipse.jface.databinding.viewers.IViewerSetProperty.observe(org.eclipse.jface.viewers.Viewer)",
-        null);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ViewerPropertyFiltersCodeSupport() {
+		super("observeFilters",
+				"org.eclipse.jface.databinding.viewers.IViewerSetProperty.observe(org.eclipse.jface.viewers.Viewer)",
+				null);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parser
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected ObservableInfo createObservable(WidgetBindableInfo bindableWidget,
-      WidgetPropertyBindableInfo bindableProperty,
-      int delayValue) throws Exception {
-    return new FiltersObservableInfo(bindableWidget);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parser
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected ObservableInfo createObservable(WidgetBindableInfo bindableWidget,
+			WidgetPropertyBindableInfo bindableProperty,
+			int delayValue) throws Exception {
+		return new FiltersObservableInfo(bindableWidget);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void addSourceCode(ObservableInfo observable,
-      List<String> lines,
-      CodeGenerationSupport generationSupport) throws Exception {
-    super.addSourceCode(observable, lines, generationSupport);
-    String sourceCode = "org.eclipse.jface.databinding.viewers.typed.ViewerProperties.filters()";
-    if (getVariableIdentifier() != null) {
-      if (generationSupport.addModel(this)) {
-        lines.add("org.eclipse.jface.databinding.viewers.IViewerSetProperty "
-            + getVariableIdentifier()
-            + " = "
-            + sourceCode
-            + ";");
-      }
-      sourceCode = getVariableIdentifier();
-    }
-    lines.add("org.eclipse.core.databinding.observable.set.IObservableSet "
-        + observable.getVariableIdentifier()
-        + " = "
-        + sourceCode
-        + ".observe("
-        + observable.getBindableObject().getReference()
-        + ");");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void addSourceCode(ObservableInfo observable,
+			List<String> lines,
+			CodeGenerationSupport generationSupport) throws Exception {
+		super.addSourceCode(observable, lines, generationSupport);
+		String sourceCode = "org.eclipse.jface.databinding.viewers.typed.ViewerProperties.filters()";
+		if (getVariableIdentifier() != null) {
+			if (generationSupport.addModel(this)) {
+				lines.add("org.eclipse.jface.databinding.viewers.IViewerSetProperty "
+						+ getVariableIdentifier()
+						+ " = "
+						+ sourceCode
+						+ ";");
+			}
+			sourceCode = getVariableIdentifier();
+		}
+		lines.add("org.eclipse.core.databinding.observable.set.IObservableSet "
+				+ observable.getVariableIdentifier()
+				+ " = "
+				+ sourceCode
+				+ ".observe("
+				+ observable.getBindableObject().getReference()
+				+ ");");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/properties/ViewerPropertyMultiSelectionCodeSupport.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/properties/ViewerPropertyMultiSelectionCodeSupport.java
index 785c9b69b..a186b82d1 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/properties/ViewerPropertyMultiSelectionCodeSupport.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/properties/ViewerPropertyMultiSelectionCodeSupport.java
@@ -25,57 +25,57 @@
  * @coverage bindings.rcp.model.widgets
  */
 public class ViewerPropertyMultiSelectionCodeSupport extends ViewerObservableCodeSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ViewerPropertyMultiSelectionCodeSupport() {
-    super("observeMultiSelection",
-        "org.eclipse.jface.databinding.viewers.IViewerListProperty.observe(org.eclipse.jface.viewers.Viewer)",
-        null);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ViewerPropertyMultiSelectionCodeSupport() {
+		super("observeMultiSelection",
+				"org.eclipse.jface.databinding.viewers.IViewerListProperty.observe(org.eclipse.jface.viewers.Viewer)",
+				null);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parser
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected ObservableInfo createObservable(WidgetBindableInfo bindableWidget,
-      WidgetPropertyBindableInfo bindableProperty,
-      int delayValue) throws Exception {
-    return new MultiSelectionObservableInfo(bindableWidget, bindableProperty);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parser
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected ObservableInfo createObservable(WidgetBindableInfo bindableWidget,
+			WidgetPropertyBindableInfo bindableProperty,
+			int delayValue) throws Exception {
+		return new MultiSelectionObservableInfo(bindableWidget, bindableProperty);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void addSourceCode(ObservableInfo observable,
-      List<String> lines,
-      CodeGenerationSupport generationSupport) throws Exception {
-    super.addSourceCode(observable, lines, generationSupport);
-    String sourceCode =
-        "org.eclipse.jface.databinding.viewers.typed.ViewerProperties.multipleSelection()";
-    if (getVariableIdentifier() != null) {
-      if (generationSupport.addModel(this)) {
-        lines.add("org.eclipse.jface.databinding.viewers.IViewerListProperty "
-            + getVariableIdentifier()
-            + " = "
-            + sourceCode
-            + ";");
-      }
-      sourceCode = getVariableIdentifier();
-    }
-    lines.add("org.eclipse.core.databinding.observable.list.IObservableList "
-        + observable.getVariableIdentifier()
-        + " = "
-        + sourceCode
-        + ".observe("
-        + observable.getBindableObject().getReference()
-        + ");");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void addSourceCode(ObservableInfo observable,
+			List<String> lines,
+			CodeGenerationSupport generationSupport) throws Exception {
+		super.addSourceCode(observable, lines, generationSupport);
+		String sourceCode =
+				"org.eclipse.jface.databinding.viewers.typed.ViewerProperties.multipleSelection()";
+		if (getVariableIdentifier() != null) {
+			if (generationSupport.addModel(this)) {
+				lines.add("org.eclipse.jface.databinding.viewers.IViewerListProperty "
+						+ getVariableIdentifier()
+						+ " = "
+						+ sourceCode
+						+ ";");
+			}
+			sourceCode = getVariableIdentifier();
+		}
+		lines.add("org.eclipse.core.databinding.observable.list.IObservableList "
+				+ observable.getVariableIdentifier()
+				+ " = "
+				+ sourceCode
+				+ ".observe("
+				+ observable.getBindableObject().getReference()
+				+ ");");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/properties/ViewerPropertySingleSelectionCodeSupport.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/properties/ViewerPropertySingleSelectionCodeSupport.java
index c2d5ad7e8..4f4ebc457 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/properties/ViewerPropertySingleSelectionCodeSupport.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/properties/ViewerPropertySingleSelectionCodeSupport.java
@@ -38,134 +38,134 @@
  * @coverage bindings.rcp.model.widgets
  */
 public class ViewerPropertySingleSelectionCodeSupport extends ViewerObservableCodeSupport {
-  private static final String VALUE_DETAIL =
-      "org.eclipse.core.databinding.property.value.IValueProperty.value(org.eclipse.core.databinding.property.value.IValueProperty)";
-  private static final String LIST_DETAIL =
-      "org.eclipse.core.databinding.property.value.IValueProperty.list(org.eclipse.core.databinding.property.list.IListProperty)";
-  private static final String SET_DETAIL =
-      "org.eclipse.core.databinding.property.value.IValueProperty.set(org.eclipse.core.databinding.property.set.ISetProperty)";
+	private static final String VALUE_DETAIL =
+			"org.eclipse.core.databinding.property.value.IValueProperty.value(org.eclipse.core.databinding.property.value.IValueProperty)";
+	private static final String LIST_DETAIL =
+			"org.eclipse.core.databinding.property.value.IValueProperty.list(org.eclipse.core.databinding.property.list.IListProperty)";
+	private static final String SET_DETAIL =
+			"org.eclipse.core.databinding.property.value.IValueProperty.set(org.eclipse.core.databinding.property.set.ISetProperty)";
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ViewerPropertySingleSelectionCodeSupport() {
-    super("observeSingleSelection",
-        "org.eclipse.jface.databinding.viewers.IViewerValueProperty.observe(org.eclipse.jface.viewers.Viewer)",
-        "org.eclipse.jface.databinding.viewers.IViewerValueProperty.observeDelayed(int,org.eclipse.jface.viewers.Viewer)");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ViewerPropertySingleSelectionCodeSupport() {
+		super("observeSingleSelection",
+				"org.eclipse.jface.databinding.viewers.IViewerValueProperty.observe(org.eclipse.jface.viewers.Viewer)",
+				"org.eclipse.jface.databinding.viewers.IViewerValueProperty.observeDelayed(int,org.eclipse.jface.viewers.Viewer)");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parser
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public AstObjectInfo parseExpression(AstEditor editor,
-      String signature,
-      MethodInvocation invocation,
-      Expression[] arguments,
-      IModelResolver resolver,
-      IDatabindingsProvider provider) throws Exception {
-    // IValueProperty.value(IValueProperty)
-    if (VALUE_DETAIL.equals(signature)) {
-      ValuePropertyCodeSupport detailProperty =
-          (ValuePropertyCodeSupport) resolver.getModel(arguments[0]);
-      Assert.isNotNull(detailProperty, MessageFormat.format(
-          Messages.ViewerPropertySingleSelectionCodeSupport_argumentNotFound,
-          arguments[0]));
-      return new ValueValuePropertyCodeSupport(this, detailProperty);
-    }
-    // IValueProperty.list(IListProperty)
-    if (LIST_DETAIL.equals(signature)) {
-      ListPropertyCodeSupport detailProperty =
-          (ListPropertyCodeSupport) resolver.getModel(arguments[0]);
-      Assert.isNotNull(detailProperty, MessageFormat.format(
-          Messages.ViewerPropertySingleSelectionCodeSupport_argumentNotFound,
-          arguments[0]));
-      return new ValueListPropertyCodeSupport(this, detailProperty);
-    }
-    // IValueProperty.set(ISetProperty)
-    if (SET_DETAIL.equals(signature)) {
-      SetPropertyCodeSupport detailProperty =
-          (SetPropertyCodeSupport) resolver.getModel(arguments[0]);
-      Assert.isNotNull(detailProperty, MessageFormat.format(
-          Messages.ViewerPropertySingleSelectionCodeSupport_argumentNotFound,
-          arguments[0]));
-      return new ValueSetPropertyCodeSupport(this, detailProperty);
-    }
-    return super.parseExpression(editor, signature, invocation, arguments, resolver, provider);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parser
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public AstObjectInfo parseExpression(AstEditor editor,
+			String signature,
+			MethodInvocation invocation,
+			Expression[] arguments,
+			IModelResolver resolver,
+			IDatabindingsProvider provider) throws Exception {
+		// IValueProperty.value(IValueProperty)
+		if (VALUE_DETAIL.equals(signature)) {
+			ValuePropertyCodeSupport detailProperty =
+					(ValuePropertyCodeSupport) resolver.getModel(arguments[0]);
+			Assert.isNotNull(detailProperty, MessageFormat.format(
+					Messages.ViewerPropertySingleSelectionCodeSupport_argumentNotFound,
+					arguments[0]));
+			return new ValueValuePropertyCodeSupport(this, detailProperty);
+		}
+		// IValueProperty.list(IListProperty)
+		if (LIST_DETAIL.equals(signature)) {
+			ListPropertyCodeSupport detailProperty =
+					(ListPropertyCodeSupport) resolver.getModel(arguments[0]);
+			Assert.isNotNull(detailProperty, MessageFormat.format(
+					Messages.ViewerPropertySingleSelectionCodeSupport_argumentNotFound,
+					arguments[0]));
+			return new ValueListPropertyCodeSupport(this, detailProperty);
+		}
+		// IValueProperty.set(ISetProperty)
+		if (SET_DETAIL.equals(signature)) {
+			SetPropertyCodeSupport detailProperty =
+					(SetPropertyCodeSupport) resolver.getModel(arguments[0]);
+			Assert.isNotNull(detailProperty, MessageFormat.format(
+					Messages.ViewerPropertySingleSelectionCodeSupport_argumentNotFound,
+					arguments[0]));
+			return new ValueSetPropertyCodeSupport(this, detailProperty);
+		}
+		return super.parseExpression(editor, signature, invocation, arguments, resolver, provider);
+	}
 
-  @Override
-  protected ObservableInfo createObservable(WidgetBindableInfo bindableWidget,
-      WidgetPropertyBindableInfo bindableProperty,
-      int delayValue) throws Exception {
-    SingleSelectionObservableInfo observable =
-        new SingleSelectionObservableInfo(bindableWidget, bindableProperty);
-    observable.setDelayValue(delayValue);
-    return observable;
-  }
+	@Override
+	protected ObservableInfo createObservable(WidgetBindableInfo bindableWidget,
+			WidgetPropertyBindableInfo bindableProperty,
+			int delayValue) throws Exception {
+		SingleSelectionObservableInfo observable =
+				new SingleSelectionObservableInfo(bindableWidget, bindableProperty);
+		observable.setDelayValue(delayValue);
+		return observable;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void addSourceCode(ObservableInfo observable,
-      List<String> lines,
-      CodeGenerationSupport generationSupport) throws Exception {
-    super.addSourceCode(observable, lines, generationSupport);
-    String sourceCode = "org.eclipse.jface.databinding.viewers.typed.ViewerProperties.singleSelection()";
-    if (getVariableIdentifier() != null) {
-      if (generationSupport.addModel(this)) {
-        lines.add("org.eclipse.jface.databinding.viewers.IViewerValueProperty "
-            + getVariableIdentifier()
-            + " = "
-            + sourceCode
-            + ";");
-      }
-      sourceCode = getVariableIdentifier();
-    }
-    SingleSelectionObservableInfo selectionObservable = (SingleSelectionObservableInfo) observable;
-    if (selectionObservable.getDelayValue() == 0) {
-      // no delay
-      lines.add("org.eclipse.core.databinding.observable.value.IObservableValue "
-          + observable.getVariableIdentifier()
-          + " = "
-          + sourceCode
-          + ".observe("
-          + observable.getBindableObject().getReference()
-          + ");");
-    } else {
-      // with delay
-      lines.add("org.eclipse.core.databinding.observable.value.IObservableValue "
-          + observable.getVariableIdentifier()
-          + " = "
-          + sourceCode
-          + ".observeDelayed("
-          + Integer.toString(selectionObservable.getDelayValue())
-          + ", "
-          + observable.getBindableObject().getReference()
-          + ");");
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void addSourceCode(ObservableInfo observable,
+			List<String> lines,
+			CodeGenerationSupport generationSupport) throws Exception {
+		super.addSourceCode(observable, lines, generationSupport);
+		String sourceCode = "org.eclipse.jface.databinding.viewers.typed.ViewerProperties.singleSelection()";
+		if (getVariableIdentifier() != null) {
+			if (generationSupport.addModel(this)) {
+				lines.add("org.eclipse.jface.databinding.viewers.IViewerValueProperty "
+						+ getVariableIdentifier()
+						+ " = "
+						+ sourceCode
+						+ ";");
+			}
+			sourceCode = getVariableIdentifier();
+		}
+		SingleSelectionObservableInfo selectionObservable = (SingleSelectionObservableInfo) observable;
+		if (selectionObservable.getDelayValue() == 0) {
+			// no delay
+			lines.add("org.eclipse.core.databinding.observable.value.IObservableValue "
+					+ observable.getVariableIdentifier()
+					+ " = "
+					+ sourceCode
+					+ ".observe("
+					+ observable.getBindableObject().getReference()
+					+ ");");
+		} else {
+			// with delay
+			lines.add("org.eclipse.core.databinding.observable.value.IObservableValue "
+					+ observable.getVariableIdentifier()
+					+ " = "
+					+ sourceCode
+					+ ".observeDelayed("
+					+ Integer.toString(selectionObservable.getDelayValue())
+					+ ", "
+					+ observable.getBindableObject().getReference()
+					+ ");");
+		}
+	}
 
-  public String getMasterSourceCode(List<String> lines, CodeGenerationSupport generationSupport)
-      throws Exception {
-    String sourceCode = "org.eclipse.jface.databinding.viewers.typed.ViewerProperties.singleSelection()";
-    if (getVariableIdentifier() == null) {
-      return sourceCode;
-    }
-    if (generationSupport.addModel(this)) {
-      lines.add("org.eclipse.jface.databinding.viewers.IViewerValueProperty "
-          + getVariableIdentifier()
-          + " = "
-          + sourceCode
-          + ";");
-    }
-    return getVariableIdentifier();
-  }
+	public String getMasterSourceCode(List<String> lines, CodeGenerationSupport generationSupport)
+			throws Exception {
+		String sourceCode = "org.eclipse.jface.databinding.viewers.typed.ViewerProperties.singleSelection()";
+		if (getVariableIdentifier() == null) {
+			return sourceCode;
+		}
+		if (generationSupport.addModel(this)) {
+			lines.add("org.eclipse.jface.databinding.viewers.IViewerValueProperty "
+					+ getVariableIdentifier()
+					+ " = "
+					+ sourceCode
+					+ ";");
+		}
+		return getVariableIdentifier();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/properties/WidgetPropertiesCodeSupport.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/properties/WidgetPropertiesCodeSupport.java
index 3f2b20e78..7b23feaf5 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/properties/WidgetPropertiesCodeSupport.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/properties/WidgetPropertiesCodeSupport.java
@@ -26,105 +26,105 @@
  * @coverage bindings.rcp.model.widgets
  */
 public class WidgetPropertiesCodeSupport extends AbstractWidgetPropertiesCodeSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public WidgetPropertiesCodeSupport(String propertyReference) {
-    this(propertyReference, "org.eclipse.swt.widgets.Widget");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public WidgetPropertiesCodeSupport(String propertyReference) {
+		this(propertyReference, "org.eclipse.swt.widgets.Widget");
+	}
 
-  public WidgetPropertiesCodeSupport(String propertyReference, Class<?> widgetClass) {
-    this(propertyReference, widgetClass.getName());
-  }
+	public WidgetPropertiesCodeSupport(String propertyReference, Class<?> widgetClass) {
+		this(propertyReference, widgetClass.getName());
+	}
 
-  public WidgetPropertiesCodeSupport(String propertyReference, String widgetClassName) {
-    super(propertyReference, "org.eclipse.jface.databinding.swt.IWidgetValueProperty.observe(" + widgetClassName + ")",
-        "org.eclipse.jface.databinding.swt.IWidgetValueProperty.observeDelayed(int," + widgetClassName + ")");
-  }
+	public WidgetPropertiesCodeSupport(String propertyReference, String widgetClassName) {
+		super(propertyReference, "org.eclipse.jface.databinding.swt.IWidgetValueProperty.observe(" + widgetClassName + ")",
+				"org.eclipse.jface.databinding.swt.IWidgetValueProperty.observeDelayed(int," + widgetClassName + ")");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parser
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected ObservableInfo createObservable(WidgetBindableInfo bindableWidget,
-      WidgetPropertyBindableInfo bindableProperty,
-      int delayValue) throws Exception {
-    SwtObservableInfo observable = new SwtObservableInfo(bindableWidget, bindableProperty);
-    observable.setDelayValue(delayValue);
-    return observable;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parser
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected ObservableInfo createObservable(WidgetBindableInfo bindableWidget,
+			WidgetPropertyBindableInfo bindableProperty,
+			int delayValue) throws Exception {
+		SwtObservableInfo observable = new SwtObservableInfo(bindableWidget, bindableProperty);
+		observable.setDelayValue(delayValue);
+		return observable;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void addSourceCode(ObservableInfo observable,
-      List<String> lines,
-      CodeGenerationSupport generationSupport) throws Exception {
-    // prepare variable
-    if (observable.getVariableIdentifier() == null) {
-      String propertyReference = observable.getBindableProperty().getReference();
-      if (propertyReference.startsWith("Observe")) {
-        propertyReference = propertyReference.substring(7);
-      }
-      observable.setVariableIdentifier(generationSupport.generateLocalName(
-          propertyReference,
-          observable.getBindableObject().getReference(),
-          "ObserveWidget"));
-    }
-    String sourceCode =
-        "org.eclipse.core.databinding.observable.value.IObservableValue "
-            + observable.getVariableIdentifier()
-            + " = ";
-    if (getVariableIdentifier() == null) {
-      sourceCode += getSourceCode(observable);
-    } else {
-      if (generationSupport.addModel(this)) {
-        lines.add("org.eclipse.jface.databinding.swt.IWidgetValueProperty "
-            + getVariableIdentifier()
-            + " = "
-            + getSourceCode(observable)
-            + ";");
-      }
-      sourceCode += getVariableIdentifier();
-    }
-    //
-    SwtObservableInfo swtObservable = (SwtObservableInfo) observable;
-    if (swtObservable.getDelayValue() == 0) {
-      // no delay
-      lines.add(sourceCode + ".observe(" + observable.getBindableObject().getReference() + ");");
-    } else {
-      // with delay
-      lines.add(sourceCode
-          + ".observeDelayed("
-          + Integer.toString(swtObservable.getDelayValue())
-          + ", "
-          + observable.getBindableObject().getReference()
-          + ");");
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void addSourceCode(ObservableInfo observable,
+			List<String> lines,
+			CodeGenerationSupport generationSupport) throws Exception {
+		// prepare variable
+		if (observable.getVariableIdentifier() == null) {
+			String propertyReference = observable.getBindableProperty().getReference();
+			if (propertyReference.startsWith("Observe")) {
+				propertyReference = propertyReference.substring(7);
+			}
+			observable.setVariableIdentifier(generationSupport.generateLocalName(
+					propertyReference,
+					observable.getBindableObject().getReference(),
+					"ObserveWidget"));
+		}
+		String sourceCode =
+				"org.eclipse.core.databinding.observable.value.IObservableValue "
+						+ observable.getVariableIdentifier()
+						+ " = ";
+		if (getVariableIdentifier() == null) {
+			sourceCode += getSourceCode(observable);
+		} else {
+			if (generationSupport.addModel(this)) {
+				lines.add("org.eclipse.jface.databinding.swt.IWidgetValueProperty "
+						+ getVariableIdentifier()
+						+ " = "
+						+ getSourceCode(observable)
+						+ ";");
+			}
+			sourceCode += getVariableIdentifier();
+		}
+		//
+		SwtObservableInfo swtObservable = (SwtObservableInfo) observable;
+		if (swtObservable.getDelayValue() == 0) {
+			// no delay
+			lines.add(sourceCode + ".observe(" + observable.getBindableObject().getReference() + ");");
+		} else {
+			// with delay
+			lines.add(sourceCode
+					+ ".observeDelayed("
+					+ Integer.toString(swtObservable.getDelayValue())
+					+ ", "
+					+ observable.getBindableObject().getReference()
+					+ ");");
+		}
+	}
 
-  /**
-   * @return the source code for create this observable.
-   */
-  protected String getSourceCode(ObservableInfo observable) throws Exception {
-    return "org.eclipse.jface.databinding.swt.typed.WidgetProperties."
-        + SwtProperties.SWT_OBSERVABLES_TO_WIDGET_PROPERTIES.get(observable.getBindableProperty().getReference())
-        + "()";
-  }
+	/**
+	 * @return the source code for create this observable.
+	 */
+	protected String getSourceCode(ObservableInfo observable) throws Exception {
+		return "org.eclipse.jface.databinding.swt.typed.WidgetProperties."
+				+ SwtProperties.SWT_OBSERVABLES_TO_WIDGET_PROPERTIES.get(observable.getBindableProperty().getReference())
+				+ "()";
+	}
 
-  /**
-   * @return the source code.
-   */
-  public String getSourceCode() throws Exception {
-    return "org.eclipse.jface.databinding.swt.typed.WidgetProperties."
-        + SwtProperties.SWT_OBSERVABLES_TO_WIDGET_PROPERTIES.get(getPropertyReference())
-        + "()";
-  }
+	/**
+	 * @return the source code.
+	 */
+	public String getSourceCode() throws Exception {
+		return "org.eclipse.jface.databinding.swt.typed.WidgetProperties."
+				+ SwtProperties.SWT_OBSERVABLES_TO_WIDGET_PROPERTIES.get(getPropertyReference())
+				+ "()";
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/properties/WidgetPropertyItemsCodeSupport.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/properties/WidgetPropertyItemsCodeSupport.java
index 719cfd32b..9bcbb9d9c 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/properties/WidgetPropertyItemsCodeSupport.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/properties/WidgetPropertyItemsCodeSupport.java
@@ -25,61 +25,61 @@
  * @coverage bindings.rcp.model.widgets
  */
 public class WidgetPropertyItemsCodeSupport extends AbstractWidgetPropertiesCodeSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public WidgetPropertyItemsCodeSupport() {
-    super("observeItems",
-        "org.eclipse.jface.databinding.swt.IWidgetListProperty.observe(org.eclipse.swt.widgets.Control)",
-        null);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public WidgetPropertyItemsCodeSupport() {
+		super("observeItems",
+				"org.eclipse.jface.databinding.swt.IWidgetListProperty.observe(org.eclipse.swt.widgets.Control)",
+				null);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parser
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected ObservableInfo createObservable(WidgetBindableInfo bindableWidget,
-      WidgetPropertyBindableInfo bindableProperty,
-      int delayValue) throws Exception {
-    return new ItemsSwtObservableInfo(bindableWidget, bindableProperty);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parser
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected ObservableInfo createObservable(WidgetBindableInfo bindableWidget,
+			WidgetPropertyBindableInfo bindableProperty,
+			int delayValue) throws Exception {
+		return new ItemsSwtObservableInfo(bindableWidget, bindableProperty);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void addSourceCode(ObservableInfo observable,
-      List<String> lines,
-      CodeGenerationSupport generationSupport) throws Exception {
-    // prepare variable
-    if (observable.getVariableIdentifier() == null) {
-      observable.setVariableIdentifier(generationSupport.generateLocalName(
-          "Items",
-          observable.getBindableObject().getReference(),
-          "ObserveWidget"));
-    }
-    // add code
-    String code = " = org.eclipse.jface.databinding.swt.typed.WidgetProperties.items()";
-    if (getVariableIdentifier() != null) {
-      if (generationSupport.addModel(this)) {
-        lines.add("org.eclipse.jface.databinding.viewers.IViewerValueProperty "
-            + getVariableIdentifier()
-            + code
-            + ";");
-      }
-      code = " = " + getVariableIdentifier();
-    }
-    lines.add("org.eclipse.core.databinding.observable.list.IObservableList "
-        + observable.getVariableIdentifier()
-        + code
-        + ".observe("
-        + observable.getBindableObject().getReference()
-        + ");");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void addSourceCode(ObservableInfo observable,
+			List<String> lines,
+			CodeGenerationSupport generationSupport) throws Exception {
+		// prepare variable
+		if (observable.getVariableIdentifier() == null) {
+			observable.setVariableIdentifier(generationSupport.generateLocalName(
+					"Items",
+					observable.getBindableObject().getReference(),
+					"ObserveWidget"));
+		}
+		// add code
+		String code = " = org.eclipse.jface.databinding.swt.typed.WidgetProperties.items()";
+		if (getVariableIdentifier() != null) {
+			if (generationSupport.addModel(this)) {
+				lines.add("org.eclipse.jface.databinding.viewers.IViewerValueProperty "
+						+ getVariableIdentifier()
+						+ code
+						+ ";");
+			}
+			code = " = " + getVariableIdentifier();
+		}
+		lines.add("org.eclipse.core.databinding.observable.list.IObservableList "
+				+ observable.getVariableIdentifier()
+				+ code
+				+ ".observe("
+				+ observable.getBindableObject().getReference()
+				+ ");");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/properties/WidgetPropertyTextCodeSupport.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/properties/WidgetPropertyTextCodeSupport.java
index dad686e34..55c052e9e 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/properties/WidgetPropertyTextCodeSupport.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/properties/WidgetPropertyTextCodeSupport.java
@@ -26,82 +26,82 @@
  * @coverage bindings.rcp.model.widgets
  */
 public class WidgetPropertyTextCodeSupport extends WidgetPropertiesCodeSupport {
-  private final int[] m_parseEvents;
+	private final int[] m_parseEvents;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public WidgetPropertyTextCodeSupport() {
-    this(null);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public WidgetPropertyTextCodeSupport() {
+		this(null);
+	}
 
-  public WidgetPropertyTextCodeSupport(int[] events) {
-    super("observeText");
-    m_parseEvents = events;
-  }
+	public WidgetPropertyTextCodeSupport(int[] events) {
+		super("observeText");
+		m_parseEvents = events;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parser
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected ObservableInfo createObservable(WidgetBindableInfo bindableWidget,
-      WidgetPropertyBindableInfo bindableProperty,
-      int delayValue) throws Exception {
-    Assert.isNotNull(m_parseEvents);
-    TextSwtObservableInfo observable =
-        new TextSwtObservableInfo(bindableWidget, bindableProperty, m_parseEvents);
-    observable.setDelayValue(delayValue);
-    return observable;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parser
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected ObservableInfo createObservable(WidgetBindableInfo bindableWidget,
+			WidgetPropertyBindableInfo bindableProperty,
+			int delayValue) throws Exception {
+		Assert.isNotNull(m_parseEvents);
+		TextSwtObservableInfo observable =
+				new TextSwtObservableInfo(bindableWidget, bindableProperty, m_parseEvents);
+		observable.setDelayValue(delayValue);
+		return observable;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getSourceCode(ObservableInfo observable) throws Exception {
-    TextSwtObservableInfo textObservable = (TextSwtObservableInfo) observable;
-    List<String> updateEvents = textObservable.getUpdateEvents();
-    //
-    if (updateEvents.size() == 0) {
-      return super.getSourceCode(observable);
-    }
-    return "org.eclipse.jface.databinding.swt.typed.WidgetProperties.text("
-        + getEventsSourceCode(updateEvents)
-        + ")";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getSourceCode(ObservableInfo observable) throws Exception {
+		TextSwtObservableInfo textObservable = (TextSwtObservableInfo) observable;
+		List<String> updateEvents = textObservable.getUpdateEvents();
+		//
+		if (updateEvents.size() == 0) {
+			return super.getSourceCode(observable);
+		}
+		return "org.eclipse.jface.databinding.swt.typed.WidgetProperties.text("
+		+ getEventsSourceCode(updateEvents)
+		+ ")";
+	}
 
-  @Override
-  public String getSourceCode() throws Exception {
-    if (m_parseEvents.length == 0) {
-      return super.getSourceCode();
-    }
-    List<String> updateEvents = TextSwtObservableInfo.getEventsSources(m_parseEvents);
-    return "org.eclipse.jface.databinding.swt.typed.WidgetProperties.text("
-        + getEventsSourceCode(updateEvents)
-        + ")";
-  }
+	@Override
+	public String getSourceCode() throws Exception {
+		if (m_parseEvents.length == 0) {
+			return super.getSourceCode();
+		}
+		List<String> updateEvents = TextSwtObservableInfo.getEventsSources(m_parseEvents);
+		return "org.eclipse.jface.databinding.swt.typed.WidgetProperties.text("
+		+ getEventsSourceCode(updateEvents)
+		+ ")";
+	}
 
-  private String getEventsSourceCode(List<String> updateEvents) {
-    int size = updateEvents.size();
-    StringBuffer events = new StringBuffer();
-    if (size == 1) {
-      events.append("org.eclipse.swt." + updateEvents.get(0));
-    } else {
-      events.append("new int[]{");
-      for (Iterator<String> I = updateEvents.iterator(); I.hasNext();) {
-        events.append("org.eclipse.swt." + I.next());
-        if (I.hasNext()) {
-          events.append(", ");
-        }
-      }
-      events.append("}");
-    }
-    return events.toString();
-  }
+	private String getEventsSourceCode(List<String> updateEvents) {
+		int size = updateEvents.size();
+		StringBuffer events = new StringBuffer();
+		if (size == 1) {
+			events.append("org.eclipse.swt." + updateEvents.get(0));
+		} else {
+			events.append("new int[]{");
+			for (Iterator<String> I = updateEvents.iterator(); I.hasNext();) {
+				events.append("org.eclipse.swt." + I.next());
+				if (I.hasNext()) {
+					events.append(", ");
+				}
+			}
+			events.append("}");
+		}
+		return events.toString();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/standard/CheckedElementsObservableCodeSupport.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/standard/CheckedElementsObservableCodeSupport.java
index 6f1865098..3676ce701 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/standard/CheckedElementsObservableCodeSupport.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/standard/CheckedElementsObservableCodeSupport.java
@@ -25,30 +25,30 @@
  * @coverage bindings.rcp.model.widgets
  */
 public class CheckedElementsObservableCodeSupport extends ObservableCodeSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void addSourceCode(ObservableInfo observable,
-      List<String> lines,
-      CodeGenerationSupport generationSupport) throws Exception {
-    // prepare variable
-    if (observable.getVariableIdentifier() == null) {
-      observable.setVariableIdentifier(generationSupport.generateLocalName(
-          observable.getBindableObject().getReference(),
-          observable.getBindableProperty().getReference()));
-    }
-    CheckedElementsObservableInfo checkedObservable = (CheckedElementsObservableInfo) observable;
-    lines.add("org.eclipse.core.databinding.observable.set.IObservableSet "
-        + observable.getVariableIdentifier()
-        + " = org.eclipse.jface.databinding.viewers.ViewersObservables."
-        + observable.getBindableProperty().getReference()
-        + "("
-        + observable.getBindableObject().getReference()
-        + ", "
-        + CoreUtils.getClassName(checkedObservable.getElementType())
-        + ".class);");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void addSourceCode(ObservableInfo observable,
+			List<String> lines,
+			CodeGenerationSupport generationSupport) throws Exception {
+		// prepare variable
+		if (observable.getVariableIdentifier() == null) {
+			observable.setVariableIdentifier(generationSupport.generateLocalName(
+					observable.getBindableObject().getReference(),
+					observable.getBindableProperty().getReference()));
+		}
+		CheckedElementsObservableInfo checkedObservable = (CheckedElementsObservableInfo) observable;
+		lines.add("org.eclipse.core.databinding.observable.set.IObservableSet "
+				+ observable.getVariableIdentifier()
+				+ " = org.eclipse.jface.databinding.viewers.ViewersObservables."
+				+ observable.getBindableProperty().getReference()
+				+ "("
+				+ observable.getBindableObject().getReference()
+				+ ", "
+				+ CoreUtils.getClassName(checkedObservable.getElementType())
+				+ ".class);");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/standard/FiltersObservableCodeSupport.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/standard/FiltersObservableCodeSupport.java
index 62987515b..4883088ce 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/standard/FiltersObservableCodeSupport.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/standard/FiltersObservableCodeSupport.java
@@ -23,27 +23,27 @@
  * @coverage bindings.rcp.model.widgets
  */
 public class FiltersObservableCodeSupport extends ObservableCodeSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void addSourceCode(ObservableInfo observable,
-      List<String> lines,
-      CodeGenerationSupport generationSupport) throws Exception {
-    // prepare variable
-    if (observable.getVariableIdentifier() == null) {
-      observable.setVariableIdentifier(generationSupport.generateLocalName(
-          observable.getBindableObject().getReference(),
-          observable.getBindableProperty().getReference()));
-    }
-    lines.add("org.eclipse.core.databinding.observable.set.IObservableSet "
-        + observable.getVariableIdentifier()
-        + " = org.eclipse.jface.databinding.viewers.ViewersObservables."
-        + observable.getBindableProperty().getReference()
-        + "("
-        + observable.getBindableObject().getReference()
-        + ");");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void addSourceCode(ObservableInfo observable,
+			List<String> lines,
+			CodeGenerationSupport generationSupport) throws Exception {
+		// prepare variable
+		if (observable.getVariableIdentifier() == null) {
+			observable.setVariableIdentifier(generationSupport.generateLocalName(
+					observable.getBindableObject().getReference(),
+					observable.getBindableProperty().getReference()));
+		}
+		lines.add("org.eclipse.core.databinding.observable.set.IObservableSet "
+				+ observable.getVariableIdentifier()
+				+ " = org.eclipse.jface.databinding.viewers.ViewersObservables."
+				+ observable.getBindableProperty().getReference()
+				+ "("
+				+ observable.getBindableObject().getReference()
+				+ ");");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/standard/MultiSelectionObservableCodeSupport.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/standard/MultiSelectionObservableCodeSupport.java
index bbb2cd60a..06c6ef824 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/standard/MultiSelectionObservableCodeSupport.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/standard/MultiSelectionObservableCodeSupport.java
@@ -23,27 +23,27 @@
  * @coverage bindings.rcp.model.widgets
  */
 public class MultiSelectionObservableCodeSupport extends ObservableCodeSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void addSourceCode(ObservableInfo observable,
-      List<String> lines,
-      CodeGenerationSupport generationSupport) throws Exception {
-    // prepare variable
-    if (observable.getVariableIdentifier() == null) {
-      observable.setVariableIdentifier(generationSupport.generateLocalName(
-          observable.getBindableObject().getReference(),
-          observable.getBindableProperty().getReference()));
-    }
-    lines.add("org.eclipse.core.databinding.observable.list.IObservableList "
-        + observable.getVariableIdentifier()
-        + " = org.eclipse.jface.databinding.viewers.ViewersObservables."
-        + observable.getBindableProperty().getReference()
-        + "("
-        + observable.getBindableObject().getReference()
-        + ");");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void addSourceCode(ObservableInfo observable,
+			List<String> lines,
+			CodeGenerationSupport generationSupport) throws Exception {
+		// prepare variable
+		if (observable.getVariableIdentifier() == null) {
+			observable.setVariableIdentifier(generationSupport.generateLocalName(
+					observable.getBindableObject().getReference(),
+					observable.getBindableProperty().getReference()));
+		}
+		lines.add("org.eclipse.core.databinding.observable.list.IObservableList "
+				+ observable.getVariableIdentifier()
+				+ " = org.eclipse.jface.databinding.viewers.ViewersObservables."
+				+ observable.getBindableProperty().getReference()
+				+ "("
+				+ observable.getBindableObject().getReference()
+				+ ");");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/standard/SingleSelectionObservableCodeSupport.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/standard/SingleSelectionObservableCodeSupport.java
index 4e5c568cc..7d1498c42 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/standard/SingleSelectionObservableCodeSupport.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/standard/SingleSelectionObservableCodeSupport.java
@@ -24,42 +24,42 @@
  * @coverage bindings.rcp.model.widgets
  */
 public class SingleSelectionObservableCodeSupport extends ObservableCodeSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void addSourceCode(ObservableInfo observable,
-      List<String> lines,
-      CodeGenerationSupport generationSupport) throws Exception {
-    // prepare variable
-    if (observable.getVariableIdentifier() == null) {
-      observable.setVariableIdentifier(generationSupport.generateLocalName(
-          observable.getBindableObject().getReference(),
-          observable.getBindableProperty().getReference()));
-    }
-    SingleSelectionObservableInfo selectionObservable = (SingleSelectionObservableInfo) observable;
-    if (selectionObservable.getDelayValue() == 0) {
-      // no delay
-      lines.add("org.eclipse.core.databinding.observable.value.IObservableValue "
-          + observable.getVariableIdentifier()
-          + " = org.eclipse.jface.databinding.viewers.ViewersObservables."
-          + observable.getBindableProperty().getReference()
-          + "("
-          + observable.getBindableObject().getReference()
-          + ");");
-    } else {
-      // with delay
-      lines.add("org.eclipse.core.databinding.observable.value.IObservableValue "
-          + observable.getVariableIdentifier()
-          + " = org.eclipse.jface.databinding.viewers.ViewersObservables.observeDelayedValue("
-          + Integer.toString(selectionObservable.getDelayValue())
-          + ", org.eclipse.jface.databinding.viewers.ViewersObservables."
-          + observable.getBindableProperty().getReference()
-          + "("
-          + observable.getBindableObject().getReference()
-          + "));");
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void addSourceCode(ObservableInfo observable,
+			List<String> lines,
+			CodeGenerationSupport generationSupport) throws Exception {
+		// prepare variable
+		if (observable.getVariableIdentifier() == null) {
+			observable.setVariableIdentifier(generationSupport.generateLocalName(
+					observable.getBindableObject().getReference(),
+					observable.getBindableProperty().getReference()));
+		}
+		SingleSelectionObservableInfo selectionObservable = (SingleSelectionObservableInfo) observable;
+		if (selectionObservable.getDelayValue() == 0) {
+			// no delay
+			lines.add("org.eclipse.core.databinding.observable.value.IObservableValue "
+					+ observable.getVariableIdentifier()
+					+ " = org.eclipse.jface.databinding.viewers.ViewersObservables."
+					+ observable.getBindableProperty().getReference()
+					+ "("
+					+ observable.getBindableObject().getReference()
+					+ ");");
+		} else {
+			// with delay
+			lines.add("org.eclipse.core.databinding.observable.value.IObservableValue "
+					+ observable.getVariableIdentifier()
+					+ " = org.eclipse.jface.databinding.viewers.ViewersObservables.observeDelayedValue("
+					+ Integer.toString(selectionObservable.getDelayValue())
+					+ ", org.eclipse.jface.databinding.viewers.ViewersObservables."
+					+ observable.getBindableProperty().getReference()
+					+ "("
+					+ observable.getBindableObject().getReference()
+					+ "));");
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/standard/SwtObservableCodeSupport.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/standard/SwtObservableCodeSupport.java
index 6bf84fd45..d59526aba 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/standard/SwtObservableCodeSupport.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/standard/SwtObservableCodeSupport.java
@@ -24,50 +24,50 @@
  * @coverage bindings.rcp.model.widgets
  */
 public class SwtObservableCodeSupport extends ObservableCodeSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void addSourceCode(ObservableInfo observable,
-      List<String> lines,
-      CodeGenerationSupport generationSupport) throws Exception {
-    // prepare variable
-    if (observable.getVariableIdentifier() == null) {
-      observable.setVariableIdentifier(generationSupport.generateLocalName(
-          observable.getBindableObject().getReference(),
-          observable.getBindableProperty().getReference(),
-          "ObserveWidget"));
-    }
-    SwtObservableInfo swtObservable = (SwtObservableInfo) observable;
-    if (swtObservable.getDelayValue() == 0) {
-      // no delay
-      lines.add("org.eclipse.core.databinding.observable.value.IObservableValue "
-          + observable.getVariableIdentifier()
-          + " = "
-          + getSourceCode(observable)
-          + ";");
-    } else {
-      // with delay
-      lines.add("org.eclipse.core.databinding.observable.value.IObservableValue "
-          + observable.getVariableIdentifier()
-          + " = org.eclipse.jface.databinding.swt.SWTObservables.observeDelayedValue("
-          + Integer.toString(swtObservable.getDelayValue())
-          + ", "
-          + getSourceCode(observable)
-          + ");");
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void addSourceCode(ObservableInfo observable,
+			List<String> lines,
+			CodeGenerationSupport generationSupport) throws Exception {
+		// prepare variable
+		if (observable.getVariableIdentifier() == null) {
+			observable.setVariableIdentifier(generationSupport.generateLocalName(
+					observable.getBindableObject().getReference(),
+					observable.getBindableProperty().getReference(),
+					"ObserveWidget"));
+		}
+		SwtObservableInfo swtObservable = (SwtObservableInfo) observable;
+		if (swtObservable.getDelayValue() == 0) {
+			// no delay
+			lines.add("org.eclipse.core.databinding.observable.value.IObservableValue "
+					+ observable.getVariableIdentifier()
+					+ " = "
+					+ getSourceCode(observable)
+					+ ";");
+		} else {
+			// with delay
+			lines.add("org.eclipse.core.databinding.observable.value.IObservableValue "
+					+ observable.getVariableIdentifier()
+					+ " = org.eclipse.jface.databinding.swt.SWTObservables.observeDelayedValue("
+					+ Integer.toString(swtObservable.getDelayValue())
+					+ ", "
+					+ getSourceCode(observable)
+					+ ");");
+		}
+	}
 
-  /**
-   * @return the source code for create this observable.
-   */
-  protected String getSourceCode(ObservableInfo observable) throws Exception {
-    return "org.eclipse.jface.databinding.swt.SWTObservables."
-        + observable.getBindableProperty().getReference()
-        + "("
-        + observable.getBindableObject().getReference()
-        + ")";
-  }
+	/**
+	 * @return the source code for create this observable.
+	 */
+	protected String getSourceCode(ObservableInfo observable) throws Exception {
+		return "org.eclipse.jface.databinding.swt.SWTObservables."
+				+ observable.getBindableProperty().getReference()
+				+ "("
+				+ observable.getBindableObject().getReference()
+				+ ")";
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/standard/SwtObservableItemsCodeSupport.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/standard/SwtObservableItemsCodeSupport.java
index feb1bc4bd..aac8cfc14 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/standard/SwtObservableItemsCodeSupport.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/standard/SwtObservableItemsCodeSupport.java
@@ -23,29 +23,29 @@
  * @coverage bindings.rcp.model.widgets
  */
 public class SwtObservableItemsCodeSupport extends ObservableCodeSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void addSourceCode(ObservableInfo observable,
-      List<String> lines,
-      CodeGenerationSupport generationSupport) throws Exception {
-    // prepare variable
-    if (observable.getVariableIdentifier() == null) {
-      observable.setVariableIdentifier(generationSupport.generateLocalName(
-          observable.getBindableObject().getReference(),
-          observable.getBindableProperty().getReference(),
-          "ObserveListWidget"));
-    }
-    // add code
-    lines.add("org.eclipse.core.databinding.observable.list.IObservableList "
-        + observable.getVariableIdentifier()
-        + " = org.eclipse.jface.databinding.swt.SWTObservables."
-        + observable.getBindableProperty().getReference()
-        + "("
-        + observable.getBindableObject().getReference()
-        + ");");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void addSourceCode(ObservableInfo observable,
+			List<String> lines,
+			CodeGenerationSupport generationSupport) throws Exception {
+		// prepare variable
+		if (observable.getVariableIdentifier() == null) {
+			observable.setVariableIdentifier(generationSupport.generateLocalName(
+					observable.getBindableObject().getReference(),
+					observable.getBindableProperty().getReference(),
+					"ObserveListWidget"));
+		}
+		// add code
+		lines.add("org.eclipse.core.databinding.observable.list.IObservableList "
+				+ observable.getVariableIdentifier()
+				+ " = org.eclipse.jface.databinding.swt.SWTObservables."
+				+ observable.getBindableProperty().getReference()
+				+ "("
+				+ observable.getBindableObject().getReference()
+				+ ");");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/standard/SwtObservableTextCodeSupport.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/standard/SwtObservableTextCodeSupport.java
index 8c66e8193..bdff078cf 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/standard/SwtObservableTextCodeSupport.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/model/widgets/observables/standard/SwtObservableTextCodeSupport.java
@@ -23,38 +23,38 @@
  * @coverage bindings.rcp.model.widgets
  */
 public class SwtObservableTextCodeSupport extends SwtObservableCodeSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getSourceCode(ObservableInfo observable) throws Exception {
-    TextSwtObservableInfo textObservable = (TextSwtObservableInfo) observable;
-    List<String> updateEvents = textObservable.getUpdateEvents();
-    int size = updateEvents.size();
-    //
-    if (size == 0) {
-      return super.getSourceCode(observable);
-    }
-    StringBuffer events = new StringBuffer(", ");
-    if (size == 1) {
-      events.append("org.eclipse.swt." + updateEvents.get(0));
-    } else {
-      events.append("new int[]{");
-      for (Iterator<String> I = updateEvents.iterator(); I.hasNext();) {
-        events.append("org.eclipse.swt." + I.next());
-        if (I.hasNext()) {
-          events.append(", ");
-        }
-      }
-      events.append("}");
-    }
-    return "org.eclipse.jface.databinding.swt.SWTObservables."
-        + observable.getBindableProperty().getReference()
-        + "("
-        + observable.getBindableObject().getReference()
-        + events.toString()
-        + ")";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getSourceCode(ObservableInfo observable) throws Exception {
+		TextSwtObservableInfo textObservable = (TextSwtObservableInfo) observable;
+		List<String> updateEvents = textObservable.getUpdateEvents();
+		int size = updateEvents.size();
+		//
+		if (size == 0) {
+			return super.getSourceCode(observable);
+		}
+		StringBuffer events = new StringBuffer(", ");
+		if (size == 1) {
+			events.append("org.eclipse.swt." + updateEvents.get(0));
+		} else {
+			events.append("new int[]{");
+			for (Iterator<String> I = updateEvents.iterator(); I.hasNext();) {
+				events.append("org.eclipse.swt." + I.next());
+				if (I.hasNext()) {
+					events.append(", ");
+				}
+			}
+			events.append("}");
+		}
+		return "org.eclipse.jface.databinding.swt.SWTObservables."
+		+ observable.getBindableProperty().getReference()
+		+ "("
+		+ observable.getBindableObject().getReference()
+		+ events.toString()
+		+ ")";
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/parser/BindingContextClassLoaderInitializer.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/parser/BindingContextClassLoaderInitializer.java
index 38c953feb..f9af7cf87 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/parser/BindingContextClassLoaderInitializer.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/parser/BindingContextClassLoaderInitializer.java
@@ -40,141 +40,141 @@
  * @coverage bindings.rcp.parser
  */
 public final class BindingContextClassLoaderInitializer implements IClassLoaderInitializer {
-  private static final Map<ClassLoader, Object> CLASS_LOADER_TO_THREAD_LOCAL = Maps.newHashMap();
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final IClassLoaderInitializer INSTANCE = new BindingContextClassLoaderInitializer();
+	private static final Map<ClassLoader, Object> CLASS_LOADER_TO_THREAD_LOCAL = Maps.newHashMap();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final IClassLoaderInitializer INSTANCE = new BindingContextClassLoaderInitializer();
 
-  private BindingContextClassLoaderInitializer() {
-  }
+	private BindingContextClassLoaderInitializer() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IClassLoaderInitializer
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void initialize(final ClassLoader classLoader) {
-    ExecutionUtils.runIgnore(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        createDefaultBean(configureBindings(classLoader));
-      }
-    });
-    ExecutionUtils.runIgnore(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        setDefaultRealm(classLoader);
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IClassLoaderInitializer
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void initialize(final ClassLoader classLoader) {
+		ExecutionUtils.runIgnore(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				createDefaultBean(configureBindings(classLoader));
+			}
+		});
+		ExecutionUtils.runIgnore(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				setDefaultRealm(classLoader);
+			}
+		});
+	}
 
-  @Override
-  public void deinitialize(final ClassLoader classLoader) {
-    ExecutionUtils.runIgnore(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        Object threadLocal = CLASS_LOADER_TO_THREAD_LOCAL.remove(classLoader);
-        ReflectionUtils.invokeMethod(threadLocal, "remove()");
-      }
-    });
-  }
+	@Override
+	public void deinitialize(final ClassLoader classLoader) {
+		ExecutionUtils.runIgnore(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				Object threadLocal = CLASS_LOADER_TO_THREAD_LOCAL.remove(classLoader);
+				ReflectionUtils.invokeMethod(threadLocal, "remove()");
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Realm
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static void setDefaultRealm(ClassLoader classLoader) throws Exception {
-    // prepare Display
-    Class<?> displayClass = classLoader.loadClass("org.eclipse.swt.widgets.Display");
-    Object display = ReflectionUtils.invokeMethod(displayClass, "getDefault()");
-    // create Realm
-    Class<?> swtObservables =
-        classLoader.loadClass("org.eclipse.jface.databinding.swt.SWTObservables");
-    Object realm =
-        ReflectionUtils.invokeMethod(
-            swtObservables,
-            "getRealm(org.eclipse.swt.widgets.Display)",
-            display);
-    // set default Realm
-    Class<?> realmClass = classLoader.loadClass("org.eclipse.core.databinding.observable.Realm");
-    ReflectionUtils.invokeMethod(
-        realmClass,
-        "setDefault(org.eclipse.core.databinding.observable.Realm)",
-        realm);
-    CLASS_LOADER_TO_THREAD_LOCAL.put(
-        classLoader,
-        ReflectionUtils.getFieldObject(realmClass, "defaultRealm"));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Realm
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static void setDefaultRealm(ClassLoader classLoader) throws Exception {
+		// prepare Display
+		Class<?> displayClass = classLoader.loadClass("org.eclipse.swt.widgets.Display");
+		Object display = ReflectionUtils.invokeMethod(displayClass, "getDefault()");
+		// create Realm
+		Class<?> swtObservables =
+				classLoader.loadClass("org.eclipse.jface.databinding.swt.SWTObservables");
+		Object realm =
+				ReflectionUtils.invokeMethod(
+						swtObservables,
+						"getRealm(org.eclipse.swt.widgets.Display)",
+						display);
+		// set default Realm
+		Class<?> realmClass = classLoader.loadClass("org.eclipse.core.databinding.observable.Realm");
+		ReflectionUtils.invokeMethod(
+				realmClass,
+				"setDefault(org.eclipse.core.databinding.observable.Realm)",
+				realm);
+		CLASS_LOADER_TO_THREAD_LOCAL.put(
+				classLoader,
+				ReflectionUtils.getFieldObject(realmClass, "defaultRealm"));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Bean/Observable
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void createDefaultBean(ProjectClassLoader projectClassLoader) throws Exception {
-    // prepare DefaultBean bytes
-    ClassLoader localClassLoader = getClass().getClassLoader();
-    InputStream stream =
-        localClassLoader.getResourceAsStream("org/eclipse/wb/internal/rcp/databinding/parser/DefaultBean.class");
-    byte[] bytes = IOUtils.toByteArray(stream);
-    stream.close();
-    // inject DefaultBean to project class loader
-    ReflectionUtils.invokeMethod(
-        projectClassLoader,
-        "defineClass(java.lang.String,byte[],int,int)",
-        "org.eclipse.wb.internal.rcp.databinding.parser.DefaultBean",
-        bytes,
-        0,
-        bytes.length);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Bean/Observable
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void createDefaultBean(ProjectClassLoader projectClassLoader) throws Exception {
+		// prepare DefaultBean bytes
+		ClassLoader localClassLoader = getClass().getClassLoader();
+		InputStream stream =
+				localClassLoader.getResourceAsStream("org/eclipse/wb/internal/rcp/databinding/parser/DefaultBean.class");
+		byte[] bytes = IOUtils.toByteArray(stream);
+		stream.close();
+		// inject DefaultBean to project class loader
+		ReflectionUtils.invokeMethod(
+				projectClassLoader,
+				"defineClass(java.lang.String,byte[],int,int)",
+				"org.eclipse.wb.internal.rcp.databinding.parser.DefaultBean",
+				bytes,
+				0,
+				bytes.length);
+	}
 
-  private static ProjectClassLoader configureBindings(ClassLoader classLoader) {
-    // prepare project class loader
-    CompositeClassLoader compositeClassLoader = (CompositeClassLoader) classLoader;
-    List<?> classLoaders = compositeClassLoader.getClassLoaders();
-    ProjectClassLoader projectClassLoader =
-        (ProjectClassLoader) classLoaders.get(classLoaders.size() - 1);
-    // add bytecode processor
-    projectClassLoader.add(new IByteCodeProcessor() {
-      @Override
-      public void initialize(ProjectClassLoader classLoader) {
-      }
+	private static ProjectClassLoader configureBindings(ClassLoader classLoader) {
+		// prepare project class loader
+		CompositeClassLoader compositeClassLoader = (CompositeClassLoader) classLoader;
+		List<?> classLoaders = compositeClassLoader.getClassLoaders();
+		ProjectClassLoader projectClassLoader =
+				(ProjectClassLoader) classLoaders.get(classLoaders.size() - 1);
+		// add bytecode processor
+		projectClassLoader.add(new IByteCodeProcessor() {
+			@Override
+			public void initialize(ProjectClassLoader classLoader) {
+			}
 
-      @Override
-      public byte[] process(String className, byte[] bytes) {
-        if ("org.eclipse.core.databinding.beans.BeansObservables".equals(className)) {
-          return transformBindings(bytes);
-        }
-        if ("org.eclipse.core.databinding.observable.list.ObservableList".equals(className)) {
-          return transformObserves(
-              bytes,
-              "(Lorg/eclipse/core/databinding/observable/Realm;Ljava/util/List;Ljava/lang/Object;)V",
-              "EMPTY_LIST",
-              "Ljava/util/List;");
-        }
-        if ("org.eclipse.core.databinding.observable.set.ObservableSet".equals(className)) {
-          return transformObserves(
-              bytes,
-              "(Lorg/eclipse/core/databinding/observable/Realm;Ljava/util/Set;Ljava/lang/Object;)V",
-              "EMPTY_SET",
-              "Ljava/util/Set;");
-        }
-        return bytes;
-      }
-    });
-    return projectClassLoader;
-  }
+			@Override
+			public byte[] process(String className, byte[] bytes) {
+				if ("org.eclipse.core.databinding.beans.BeansObservables".equals(className)) {
+					return transformBindings(bytes);
+				}
+				if ("org.eclipse.core.databinding.observable.list.ObservableList".equals(className)) {
+					return transformObserves(
+							bytes,
+							"(Lorg/eclipse/core/databinding/observable/Realm;Ljava/util/List;Ljava/lang/Object;)V",
+							"EMPTY_LIST",
+							"Ljava/util/List;");
+				}
+				if ("org.eclipse.core.databinding.observable.set.ObservableSet".equals(className)) {
+					return transformObserves(
+							bytes,
+							"(Lorg/eclipse/core/databinding/observable/Realm;Ljava/util/Set;Ljava/lang/Object;)V",
+							"EMPTY_SET",
+							"Ljava/util/Set;");
+				}
+				return bytes;
+			}
+		});
+		return projectClassLoader;
+	}
 
-  /**
-   * Inject to all public static methods contains parameters {@code Object} bean and {@code String}
-   * property:
-   *
-   * <pre>
+	/**
+	 * Inject to all public static methods contains parameters {@code Object} bean and {@code String}
+	 * property:
+	 *
+	 * <pre>
 	 * public static %ReturnType% %method%(..., Object bean, ..., String property, ....) {
 	 *     if (bean == null) {
 	 *         bean = DefaultBean.INSTANCE;
@@ -183,71 +183,71 @@ public byte[] process(String className, byte[] bytes) {
 	 *     %FOO_BODY_PART%
 	 * }
 	 * </pre>
-   */
-  private static byte[] transformBindings(byte[] bytes) {
-    ClassReader classReader = new ClassReader(bytes);
-    ToBytesClassAdapter codeRewriter = new ToBytesClassAdapter(ClassWriter.COMPUTE_FRAMES) {
-      @Override
-      public MethodVisitor visitMethod(int access,
-          String name,
-          String desc,
-          String signature,
-          String[] exceptions) {
-        MethodVisitor mv = cv.visitMethod(access, name, desc, signature, exceptions);
-        if ((access & ACC_PUBLIC) != 0 && (access & ACC_STATIC) != 0) {
-          // find indexes for bean object argument and bean property argument
-          final int[] indexes = {-1, -1};
-          String[] parameters =
-              StringUtils.split(StringUtils.substringBetween(desc, "(", ")"), ";");
-          for (int i = 0; i < parameters.length; i++) {
-            String parameter = parameters[i];
-            if (indexes[0] == -1 && parameter.equals("Ljava/lang/Object")) {
-              indexes[0] = i;
-            } else if (indexes[0] != -1
-                && indexes[1] == -1
-                && parameter.equals("Ljava/lang/String")) {
-              indexes[1] = i;
-            }
-          }
-          if (indexes[0] != -1 && indexes[1] != -1) {
-            // prepare bean property name
-            final String[] property = {"foo"};
-            if (name.endsWith("List")) {
-              property[0] = "fooList";
-            } else if (name.endsWith("Set")) {
-              property[0] = "fooSet";
-            }
-            return new MethodVisitor(Opcodes.ASM9, mv) {
-              @Override
-              public void visitCode() {
-                visitVarInsn(ALOAD, indexes[0]);
-                Label label = new Label();
-                visitJumpInsn(IFNONNULL, label);
-                visitFieldInsn(
-                    GETSTATIC,
-                    "org/eclipse/wb/internal/rcp/databinding/parser/DefaultBean",
-                    "INSTANCE",
-                    "Lorg/eclipse/wb/internal/rcp/databinding/parser/DefaultBean;");
-                visitVarInsn(ASTORE, indexes[0]);
-                visitLdcInsn(property[0]);
-                visitVarInsn(ASTORE, indexes[1]);
-                visitLabel(label);
-                super.visitCode();
-              }
-            };
-          }
-        }
-        return mv;
-      }
-    };
-    classReader.accept(codeRewriter, 0);
-    return codeRewriter.toByteArray();
-  }
+	 */
+	private static byte[] transformBindings(byte[] bytes) {
+		ClassReader classReader = new ClassReader(bytes);
+		ToBytesClassAdapter codeRewriter = new ToBytesClassAdapter(ClassWriter.COMPUTE_FRAMES) {
+			@Override
+			public MethodVisitor visitMethod(int access,
+					String name,
+					String desc,
+					String signature,
+					String[] exceptions) {
+				MethodVisitor mv = cv.visitMethod(access, name, desc, signature, exceptions);
+				if ((access & ACC_PUBLIC) != 0 && (access & ACC_STATIC) != 0) {
+					// find indexes for bean object argument and bean property argument
+					final int[] indexes = {-1, -1};
+					String[] parameters =
+							StringUtils.split(StringUtils.substringBetween(desc, "(", ")"), ";");
+					for (int i = 0; i < parameters.length; i++) {
+						String parameter = parameters[i];
+						if (indexes[0] == -1 && parameter.equals("Ljava/lang/Object")) {
+							indexes[0] = i;
+						} else if (indexes[0] != -1
+								&& indexes[1] == -1
+								&& parameter.equals("Ljava/lang/String")) {
+							indexes[1] = i;
+						}
+					}
+					if (indexes[0] != -1 && indexes[1] != -1) {
+						// prepare bean property name
+						final String[] property = {"foo"};
+						if (name.endsWith("List")) {
+							property[0] = "fooList";
+						} else if (name.endsWith("Set")) {
+							property[0] = "fooSet";
+						}
+						return new MethodVisitor(Opcodes.ASM9, mv) {
+							@Override
+							public void visitCode() {
+								visitVarInsn(ALOAD, indexes[0]);
+								Label label = new Label();
+								visitJumpInsn(IFNONNULL, label);
+								visitFieldInsn(
+										GETSTATIC,
+										"org/eclipse/wb/internal/rcp/databinding/parser/DefaultBean",
+										"INSTANCE",
+										"Lorg/eclipse/wb/internal/rcp/databinding/parser/DefaultBean;");
+								visitVarInsn(ASTORE, indexes[0]);
+								visitLdcInsn(property[0]);
+								visitVarInsn(ASTORE, indexes[1]);
+								visitLabel(label);
+								super.visitCode();
+							}
+						};
+					}
+				}
+				return mv;
+			}
+		};
+		classReader.accept(codeRewriter, 0);
+		return codeRewriter.toByteArray();
+	}
 
-  /**
-   * Inject to constructor with {@code methodDescriptor} signature additional code:
-   *
-   * <pre>
+	/**
+	 * Inject to constructor with {@code methodDescriptor} signature additional code:
+	 *
+	 * <pre>
 	 * constructor(Realm, %Type% argument, Object) {
 	 *    if (argument == null) {
 	 *        argument = Collections.EMPTY_%field%;
@@ -255,38 +255,38 @@ public void visitCode() {
 	 *    %FOO_BODY_PART%
 	 * }
 	 * </pre>
-   */
-  private static byte[] transformObserves(byte[] bytes,
-      final String methodDescriptor,
-      final String field,
-      final String fieldType) {
-    ClassReader classReader = new ClassReader(bytes);
-    ToBytesClassAdapter codeRewriter = new ToBytesClassAdapter(ClassWriter.COMPUTE_FRAMES) {
-      @Override
-      public MethodVisitor visitMethod(int access,
-          String name,
-          String desc,
-          String signature,
-          String[] exceptions) {
-        MethodVisitor mv = cv.visitMethod(access, name, desc, signature, exceptions);
-        if (name.equals("<init>") && desc.equals(methodDescriptor)) {
-          return new MethodVisitor(Opcodes.ASM9, mv) {
-            @Override
-            public void visitCode() {
-              visitVarInsn(ALOAD, 2);
-              Label label = new Label();
-              visitJumpInsn(IFNONNULL, label);
-              visitFieldInsn(GETSTATIC, "java/util/Collections", field, fieldType);
-              visitVarInsn(ASTORE, 2);
-              visitLabel(label);
-              super.visitCode();
-            }
-          };
-        }
-        return mv;
-      }
-    };
-    classReader.accept(codeRewriter, 0);
-    return codeRewriter.toByteArray();
-  }
+	 */
+	private static byte[] transformObserves(byte[] bytes,
+			final String methodDescriptor,
+			final String field,
+			final String fieldType) {
+		ClassReader classReader = new ClassReader(bytes);
+		ToBytesClassAdapter codeRewriter = new ToBytesClassAdapter(ClassWriter.COMPUTE_FRAMES) {
+			@Override
+			public MethodVisitor visitMethod(int access,
+					String name,
+					String desc,
+					String signature,
+					String[] exceptions) {
+				MethodVisitor mv = cv.visitMethod(access, name, desc, signature, exceptions);
+				if (name.equals("<init>") && desc.equals(methodDescriptor)) {
+					return new MethodVisitor(Opcodes.ASM9, mv) {
+						@Override
+						public void visitCode() {
+							visitVarInsn(ALOAD, 2);
+							Label label = new Label();
+							visitJumpInsn(IFNONNULL, label);
+							visitFieldInsn(GETSTATIC, "java/util/Collections", field, fieldType);
+							visitVarInsn(ASTORE, 2);
+							visitLabel(label);
+							super.visitCode();
+						}
+					};
+				}
+				return mv;
+			}
+		};
+		classReader.accept(codeRewriter, 0);
+		return codeRewriter.toByteArray();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/parser/DatabindingParser.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/parser/DatabindingParser.java
index 405632a65..2a4bc5c39 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/parser/DatabindingParser.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/parser/DatabindingParser.java
@@ -36,68 +36,68 @@
  * @coverage bindings.rcp.parser
  */
 public final class DatabindingParser extends AbstractParser {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parse
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static void parse(DatabindingsProvider provider) throws Exception {
-    new DatabindingParser(provider.getJavaInfoRoot(), provider);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parse
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static void parse(DatabindingsProvider provider) throws Exception {
+		new DatabindingParser(provider.getJavaInfoRoot(), provider);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private DatabindingParser(JavaInfo root, DatabindingsProvider provider) throws Exception {
-    super(provider.getAstEditor(), provider);
-    // prepare root node
-    TypeDeclaration rootNode = provider.getRootNode();
-    // prepare parsers
-    for (ObserveTypeContainer container : provider.getContainers()) {
-      container.createObservables(root, this, m_editor, rootNode);
-      m_subParsers.add(container);
-    }
-    //
-    final DataBindingsRootInfo rootInfo = provider.getRootInfo();
-    m_subParsers.add(rootInfo);
-    m_subParsers.add(new ViewerInputParser(rootInfo.getContextInfo(), provider));
-    //
-    if (rootNode != null) {
-      // find method initDataBindings()
-      MethodDeclaration initDataBindings =
-          AstNodeUtils.getMethodBySignature(rootNode, "initDataBindings()");
-      if (initDataBindings != null) {
-        rootInfo.setInitDataBindings(initDataBindings);
-        // parse method initDataBindings()
-        parseMethod(initDataBindings);
-        initDataBindings.accept(new ASTVisitor() {
-          @Override
-          public void endVisit(TryStatement statement) {
-            StringBuffer userTryCatchBlock = new StringBuffer();
-            userTryCatchBlock.append("}");
-            //
-            List<CatchClause> catchClauses = CoreUtils.cast(statement.catchClauses());
-            for (CatchClause catchClause : catchClauses) {
-              userTryCatchBlock.append(" ");
-              userTryCatchBlock.append(m_editor.getSource(catchClause));
-            }
-            //
-            Block finallyBlock = statement.getFinally();
-            if (finallyBlock != null) {
-              userTryCatchBlock.append(" finally ");
-              userTryCatchBlock.append(m_editor.getSource(finallyBlock));
-            }
-            //
-            rootInfo.getContextInfo().setUserTryCatchBlock(userTryCatchBlock.toString());
-          }
-        });
-        // after parsing post processing for all bindings
-        for (AbstractBindingInfo binding : provider.getBindings0()) {
-          binding.postParse();
-        }
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private DatabindingParser(JavaInfo root, DatabindingsProvider provider) throws Exception {
+		super(provider.getAstEditor(), provider);
+		// prepare root node
+		TypeDeclaration rootNode = provider.getRootNode();
+		// prepare parsers
+		for (ObserveTypeContainer container : provider.getContainers()) {
+			container.createObservables(root, this, m_editor, rootNode);
+			m_subParsers.add(container);
+		}
+		//
+		final DataBindingsRootInfo rootInfo = provider.getRootInfo();
+		m_subParsers.add(rootInfo);
+		m_subParsers.add(new ViewerInputParser(rootInfo.getContextInfo(), provider));
+		//
+		if (rootNode != null) {
+			// find method initDataBindings()
+			MethodDeclaration initDataBindings =
+					AstNodeUtils.getMethodBySignature(rootNode, "initDataBindings()");
+			if (initDataBindings != null) {
+				rootInfo.setInitDataBindings(initDataBindings);
+				// parse method initDataBindings()
+				parseMethod(initDataBindings);
+				initDataBindings.accept(new ASTVisitor() {
+					@Override
+					public void endVisit(TryStatement statement) {
+						StringBuffer userTryCatchBlock = new StringBuffer();
+						userTryCatchBlock.append("}");
+						//
+						List<CatchClause> catchClauses = CoreUtils.cast(statement.catchClauses());
+						for (CatchClause catchClause : catchClauses) {
+							userTryCatchBlock.append(" ");
+							userTryCatchBlock.append(m_editor.getSource(catchClause));
+						}
+						//
+						Block finallyBlock = statement.getFinally();
+						if (finallyBlock != null) {
+							userTryCatchBlock.append(" finally ");
+							userTryCatchBlock.append(m_editor.getSource(finallyBlock));
+						}
+						//
+						rootInfo.getContextInfo().setUserTryCatchBlock(userTryCatchBlock.toString());
+					}
+				});
+				// after parsing post processing for all bindings
+				for (AbstractBindingInfo binding : provider.getBindings0()) {
+					binding.postParse();
+				}
+			}
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/parser/DefaultBean.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/parser/DefaultBean.java
index 2a132a29e..22d175708 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/parser/DefaultBean.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/parser/DefaultBean.java
@@ -22,42 +22,42 @@
  * @coverage bindings.rcp.parser
  */
 public final class DefaultBean {
-  public static final DefaultBean INSTANCE = new DefaultBean();
+	public static final DefaultBean INSTANCE = new DefaultBean();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Events
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void addPropertyChangeListener(PropertyChangeListener listener) {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Events
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void addPropertyChangeListener(PropertyChangeListener listener) {
+	}
 
-  public void removePropertyChangeListener(PropertyChangeListener listener) {
-  }
+	public void removePropertyChangeListener(PropertyChangeListener listener) {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Properties
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Simple property.
-   */
-  public String getFoo() {
-    return "";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Properties
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Simple property.
+	 */
+	public String getFoo() {
+		return "";
+	}
 
-  /**
-   * List property.
-   */
-  public List<?> getFooList() {
-    return Collections.EMPTY_LIST;
-  }
+	/**
+	 * List property.
+	 */
+	public List<?> getFooList() {
+		return Collections.EMPTY_LIST;
+	}
 
-  /**
-   * Set property.
-   */
-  public Set<?> getFooSet() {
-    return Collections.EMPTY_SET;
-  }
+	/**
+	 * Set property.
+	 */
+	public Set<?> getFooSet() {
+		return Collections.EMPTY_SET;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/preferences/DbCodeGenerationPreferencePage.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/preferences/DbCodeGenerationPreferencePage.java
index 8f7f7555d..9745bad52 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/preferences/DbCodeGenerationPreferencePage.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/preferences/DbCodeGenerationPreferencePage.java
@@ -48,267 +48,267 @@
  * @coverage bindings.rcp.preferences
  */
 public final class DbCodeGenerationPreferencePage extends PreferencePage
-    implements
-      IWorkbenchPreferencePage,
-      IPreferenceConstants {
-  private static final String[] TITLES = {"public", "protected", "private", "default"};
-  //
-  private final DataBindManager m_bindManager = new DataBindManager();
-  private final IPreferenceStore m_store = Activator.getStore();
-  private Button m_addInvokeButton;
-  private Button m_assignToFieldButton;
-  private Button m_addToCompositeConstructorButton;
-  private Button m_dontUseDeprecatedMethodsButton;
-  private Button m_addTryCatch;
-  private Button m_generateCodeForVersion13Button;
-  private Button m_useViewerSupportButton;
-  private Combo m_updateValueStrategyCombo;
-  private Combo m_updateListStrategyCombo;
-  private Combo m_updateSetStrategyCombo;
-  private Button[] m_accessButtons;
-  private SourceViewer m_previewViewer;
+implements
+IWorkbenchPreferencePage,
+IPreferenceConstants {
+	private static final String[] TITLES = {"public", "protected", "private", "default"};
+	//
+	private final DataBindManager m_bindManager = new DataBindManager();
+	private final IPreferenceStore m_store = Activator.getStore();
+	private Button m_addInvokeButton;
+	private Button m_assignToFieldButton;
+	private Button m_addToCompositeConstructorButton;
+	private Button m_dontUseDeprecatedMethodsButton;
+	private Button m_addTryCatch;
+	private Button m_generateCodeForVersion13Button;
+	private Button m_useViewerSupportButton;
+	private Combo m_updateValueStrategyCombo;
+	private Combo m_updateListStrategyCombo;
+	private Combo m_updateSetStrategyCombo;
+	private Button[] m_accessButtons;
+	private SourceViewer m_previewViewer;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Control createContents(Composite parent) {
-    final Composite container = new Composite(parent, SWT.NONE);
-    GridLayoutFactory.create(container);
-    //
-    m_addInvokeButton = new Button(container, SWT.CHECK);
-    GridDataFactory.create(m_addInvokeButton).fillH().grabH();
-    m_addInvokeButton.setText(Messages.DbCodeGenerationPreferencePage_addDbInvocation);
-    //
-    m_assignToFieldButton = new Button(container, SWT.CHECK);
-    GridDataFactory.create(m_assignToFieldButton).fillH().grabH();
-    m_assignToFieldButton.setText(Messages.DbCodeGenerationPreferencePage_assignDbReturnValue);
-    //
-    m_addToCompositeConstructorButton = new Button(container, SWT.CHECK);
-    GridDataFactory.create(m_addToCompositeConstructorButton).fillH().grabH();
-    m_addToCompositeConstructorButton.setText(Messages.DbCodeGenerationPreferencePage_addDbIntoComposite);
-    //
-    m_dontUseDeprecatedMethodsButton = new Button(container, SWT.CHECK);
-    GridDataFactory.create(m_dontUseDeprecatedMethodsButton).fillH().grabH();
-    m_dontUseDeprecatedMethodsButton.setText(Messages.DbCodeGenerationPreferencePage_dontUseDeprecatedBeansObservables);
-    //
-    m_addTryCatch = new Button(container, SWT.CHECK);
-    GridDataFactory.create(m_addTryCatch).fillH().grabH();
-    m_addTryCatch.setText(Messages.DbCodeGenerationPreferencePage_encloseIntoTryCatch);
-    //
-    m_generateCodeForVersion13Button = new Button(container, SWT.CHECK);
-    GridDataFactory.create(m_generateCodeForVersion13Button).fillH().grabH();
-    m_generateCodeForVersion13Button.setText(Messages.DbCodeGenerationPreferencePage_generate13Observables);
-    //
-    m_useViewerSupportButton = new Button(container, SWT.CHECK);
-    GridDataFactory.create(m_useViewerSupportButton).fillH().grabH();
-    m_useViewerSupportButton.setText(Messages.DbCodeGenerationPreferencePage_useViewerSupport);
-    //
-    try {
-      GlobalFactoryHelper.confgureCodeGenerationPreferencePage(container, m_bindManager);
-    } catch (Throwable e) {
-      DesignerPlugin.log(e);
-    }
-    //
-    Group strategiesComposite = new Group(container, SWT.NONE);
-    GridLayoutFactory.create(strategiesComposite).columns(2);
-    GridDataFactory.create(strategiesComposite).fillH().grabH();
-    strategiesComposite.setText(Messages.DbCodeGenerationPreferencePage_defaultValueStrategyGroup);
-    //
-    new Label(strategiesComposite, SWT.NONE).setText(Messages.DbCodeGenerationPreferencePage_defaultValueStrategyLabel);
-    m_updateValueStrategyCombo = new Combo(strategiesComposite, SWT.BORDER | SWT.READ_ONLY);
-    GridDataFactory.create(m_updateValueStrategyCombo).fillH().grabH();
-    m_updateValueStrategyCombo.setItems(new String[]{
-        "POLICY_UPDATE",
-        "POLICY_NEVER",
-        "POLICY_ON_REQUEST",
-        "POLICY_CONVERT"});
-    //
-    new Label(strategiesComposite, SWT.NONE).setText(Messages.DbCodeGenerationPreferencePage_updateListStrategy);
-    m_updateListStrategyCombo = new Combo(strategiesComposite, SWT.BORDER | SWT.READ_ONLY);
-    GridDataFactory.create(m_updateListStrategyCombo).fillH().grabH();
-    m_updateListStrategyCombo.setItems(new String[]{
-        "POLICY_UPDATE",
-        "POLICY_NEVER",
-        "POLICY_ON_REQUEST"});
-    //
-    new Label(strategiesComposite, SWT.NONE).setText(Messages.DbCodeGenerationPreferencePage_updateSetStrategy);
-    m_updateSetStrategyCombo = new Combo(strategiesComposite, SWT.BORDER | SWT.READ_ONLY);
-    GridDataFactory.create(m_updateSetStrategyCombo).fillH().grabH();
-    m_updateSetStrategyCombo.setItems(new String[]{
-        "POLICY_UPDATE",
-        "POLICY_NEVER",
-        "POLICY_ON_REQUEST"});
-    // access block
-    Label accessLabel = new Label(container, SWT.NONE);
-    GridDataFactory.create(accessLabel).fillH().grabH();
-    accessLabel.setText(Messages.DbCodeGenerationPreferencePage_dbMethodAccess);
-    //
-    m_accessButtons = new Button[TITLES.length];
-    for (int i = 0; i < TITLES.length; i++) {
-      Button button = new Button(container, SWT.RADIO);
-      GridDataFactory.create(button).indentH(20).fillH().grabH();
-      button.setText(TITLES[i]);
-      m_accessButtons[i] = button;
-    }
-    // preview block
-    Label previewLabel = new Label(container, SWT.NONE);
-    GridDataFactory.create(previewLabel).fillH().grabH();
-    previewLabel.setText(Messages.DbCodeGenerationPreferencePage_preview);
-    //
-    ExecutionUtils.runRethrow(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        m_previewViewer = JdtUiUtils.createJavaSourceViewer(container, SWT.BORDER | SWT.V_SCROLL);
-      }
-    });
-    GridDataFactory.create(m_previewViewer.getControl()).hintVC(16).grab().fill();
-    // create bindings
-    m_bindManager.bind(
-        new CheckButtonEditor(m_addInvokeButton),
-        new BooleanPreferenceProvider(m_store, ADD_INVOKE_INITDB_TO_GUI));
-    m_bindManager.bind(
-        new CheckButtonEditor(m_assignToFieldButton),
-        new BooleanPreferenceProvider(m_store, ADD_INITDB_TO_FIELD));
-    m_bindManager.bind(
-        new CheckButtonEditor(m_addToCompositeConstructorButton),
-        new BooleanPreferenceProvider(m_store, ADD_INVOKE_INITDB_TO_COMPOSITE_CONSTRUCTOR));
-    m_bindManager.bind(
-        new CheckButtonEditor(m_dontUseDeprecatedMethodsButton),
-        new BooleanPreferenceProvider(m_store, DONT_USE_DEPRECATED_METHODS));
-    m_bindManager.bind(new CheckButtonEditor(m_addTryCatch), new BooleanPreferenceProvider(m_store,
-        INITDB_TRY_CATCH));
-    m_bindManager.bind(
-        new CheckButtonEditor(m_generateCodeForVersion13Button),
-        new BooleanPreferenceProvider(m_store, GENERATE_CODE_FOR_VERSION_1_3));
-    m_bindManager.bind(
-        new CheckButtonEditor(m_useViewerSupportButton),
-        new BooleanPreferenceProvider(m_store, USE_VIEWER_SUPPORT));
-    m_bindManager.bind(
-        new ComboTextEditor(m_updateValueStrategyCombo),
-        new StringPreferenceProvider(m_store, UPDATE_VALUE_STRATEGY_DEFAULT));
-    m_bindManager.bind(
-        new ComboTextEditor(m_updateListStrategyCombo),
-        new StringPreferenceProvider(m_store, UPDATE_LIST_STRATEGY_DEFAULT));
-    m_bindManager.bind(
-        new ComboTextEditor(m_updateSetStrategyCombo),
-        new StringPreferenceProvider(m_store, UPDATE_SET_STRATEGY_DEFAULT));
-    m_bindManager.bind(
-        new RadioButtonsEditor(m_accessButtons),
-        new IntegerPreferenceProvider(m_store, INITDB_GENERATE_ACCESS));
-    // additional listeners
-    m_bindManager.addUpdateEvent(m_addInvokeButton, SWT.Selection);
-    m_bindManager.addUpdateEvent(m_assignToFieldButton, SWT.Selection);
-    m_bindManager.addUpdateEvent(m_addTryCatch, SWT.Selection);
-    m_bindManager.addUpdateEvent(m_generateCodeForVersion13Button, SWT.Selection);
-    for (int i = 0; i < m_accessButtons.length; i++) {
-      m_bindManager.addUpdateEvent(m_accessButtons[i], SWT.Selection);
-    }
-    m_bindManager.addUpdateRunnable(new Runnable() {
-      @Override
-      public void run() {
-        boolean state = m_addInvokeButton.getSelection();
-        m_assignToFieldButton.setEnabled(state);
-        m_addToCompositeConstructorButton.setEnabled(state);
-        boolean selection13 = m_generateCodeForVersion13Button.getSelection();
-        if (!selection13) {
-          if (m_useViewerSupportButton.getSelection()) {
-            m_useViewerSupportButton.setSelection(false);
-          }
-        }
-        m_useViewerSupportButton.setEnabled(selection13);
-        updatePreview();
-      }
-    });
-    // initial update
-    m_bindManager.performUpdate();
-    //
-    return container;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Control createContents(Composite parent) {
+		final Composite container = new Composite(parent, SWT.NONE);
+		GridLayoutFactory.create(container);
+		//
+		m_addInvokeButton = new Button(container, SWT.CHECK);
+		GridDataFactory.create(m_addInvokeButton).fillH().grabH();
+		m_addInvokeButton.setText(Messages.DbCodeGenerationPreferencePage_addDbInvocation);
+		//
+		m_assignToFieldButton = new Button(container, SWT.CHECK);
+		GridDataFactory.create(m_assignToFieldButton).fillH().grabH();
+		m_assignToFieldButton.setText(Messages.DbCodeGenerationPreferencePage_assignDbReturnValue);
+		//
+		m_addToCompositeConstructorButton = new Button(container, SWT.CHECK);
+		GridDataFactory.create(m_addToCompositeConstructorButton).fillH().grabH();
+		m_addToCompositeConstructorButton.setText(Messages.DbCodeGenerationPreferencePage_addDbIntoComposite);
+		//
+		m_dontUseDeprecatedMethodsButton = new Button(container, SWT.CHECK);
+		GridDataFactory.create(m_dontUseDeprecatedMethodsButton).fillH().grabH();
+		m_dontUseDeprecatedMethodsButton.setText(Messages.DbCodeGenerationPreferencePage_dontUseDeprecatedBeansObservables);
+		//
+		m_addTryCatch = new Button(container, SWT.CHECK);
+		GridDataFactory.create(m_addTryCatch).fillH().grabH();
+		m_addTryCatch.setText(Messages.DbCodeGenerationPreferencePage_encloseIntoTryCatch);
+		//
+		m_generateCodeForVersion13Button = new Button(container, SWT.CHECK);
+		GridDataFactory.create(m_generateCodeForVersion13Button).fillH().grabH();
+		m_generateCodeForVersion13Button.setText(Messages.DbCodeGenerationPreferencePage_generate13Observables);
+		//
+		m_useViewerSupportButton = new Button(container, SWT.CHECK);
+		GridDataFactory.create(m_useViewerSupportButton).fillH().grabH();
+		m_useViewerSupportButton.setText(Messages.DbCodeGenerationPreferencePage_useViewerSupport);
+		//
+		try {
+			GlobalFactoryHelper.confgureCodeGenerationPreferencePage(container, m_bindManager);
+		} catch (Throwable e) {
+			DesignerPlugin.log(e);
+		}
+		//
+		Group strategiesComposite = new Group(container, SWT.NONE);
+		GridLayoutFactory.create(strategiesComposite).columns(2);
+		GridDataFactory.create(strategiesComposite).fillH().grabH();
+		strategiesComposite.setText(Messages.DbCodeGenerationPreferencePage_defaultValueStrategyGroup);
+		//
+		new Label(strategiesComposite, SWT.NONE).setText(Messages.DbCodeGenerationPreferencePage_defaultValueStrategyLabel);
+		m_updateValueStrategyCombo = new Combo(strategiesComposite, SWT.BORDER | SWT.READ_ONLY);
+		GridDataFactory.create(m_updateValueStrategyCombo).fillH().grabH();
+		m_updateValueStrategyCombo.setItems(new String[]{
+				"POLICY_UPDATE",
+				"POLICY_NEVER",
+				"POLICY_ON_REQUEST",
+		"POLICY_CONVERT"});
+		//
+		new Label(strategiesComposite, SWT.NONE).setText(Messages.DbCodeGenerationPreferencePage_updateListStrategy);
+		m_updateListStrategyCombo = new Combo(strategiesComposite, SWT.BORDER | SWT.READ_ONLY);
+		GridDataFactory.create(m_updateListStrategyCombo).fillH().grabH();
+		m_updateListStrategyCombo.setItems(new String[]{
+				"POLICY_UPDATE",
+				"POLICY_NEVER",
+		"POLICY_ON_REQUEST"});
+		//
+		new Label(strategiesComposite, SWT.NONE).setText(Messages.DbCodeGenerationPreferencePage_updateSetStrategy);
+		m_updateSetStrategyCombo = new Combo(strategiesComposite, SWT.BORDER | SWT.READ_ONLY);
+		GridDataFactory.create(m_updateSetStrategyCombo).fillH().grabH();
+		m_updateSetStrategyCombo.setItems(new String[]{
+				"POLICY_UPDATE",
+				"POLICY_NEVER",
+		"POLICY_ON_REQUEST"});
+		// access block
+		Label accessLabel = new Label(container, SWT.NONE);
+		GridDataFactory.create(accessLabel).fillH().grabH();
+		accessLabel.setText(Messages.DbCodeGenerationPreferencePage_dbMethodAccess);
+		//
+		m_accessButtons = new Button[TITLES.length];
+		for (int i = 0; i < TITLES.length; i++) {
+			Button button = new Button(container, SWT.RADIO);
+			GridDataFactory.create(button).indentH(20).fillH().grabH();
+			button.setText(TITLES[i]);
+			m_accessButtons[i] = button;
+		}
+		// preview block
+		Label previewLabel = new Label(container, SWT.NONE);
+		GridDataFactory.create(previewLabel).fillH().grabH();
+		previewLabel.setText(Messages.DbCodeGenerationPreferencePage_preview);
+		//
+		ExecutionUtils.runRethrow(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				m_previewViewer = JdtUiUtils.createJavaSourceViewer(container, SWT.BORDER | SWT.V_SCROLL);
+			}
+		});
+		GridDataFactory.create(m_previewViewer.getControl()).hintVC(16).grab().fill();
+		// create bindings
+		m_bindManager.bind(
+				new CheckButtonEditor(m_addInvokeButton),
+				new BooleanPreferenceProvider(m_store, ADD_INVOKE_INITDB_TO_GUI));
+		m_bindManager.bind(
+				new CheckButtonEditor(m_assignToFieldButton),
+				new BooleanPreferenceProvider(m_store, ADD_INITDB_TO_FIELD));
+		m_bindManager.bind(
+				new CheckButtonEditor(m_addToCompositeConstructorButton),
+				new BooleanPreferenceProvider(m_store, ADD_INVOKE_INITDB_TO_COMPOSITE_CONSTRUCTOR));
+		m_bindManager.bind(
+				new CheckButtonEditor(m_dontUseDeprecatedMethodsButton),
+				new BooleanPreferenceProvider(m_store, DONT_USE_DEPRECATED_METHODS));
+		m_bindManager.bind(new CheckButtonEditor(m_addTryCatch), new BooleanPreferenceProvider(m_store,
+				INITDB_TRY_CATCH));
+		m_bindManager.bind(
+				new CheckButtonEditor(m_generateCodeForVersion13Button),
+				new BooleanPreferenceProvider(m_store, GENERATE_CODE_FOR_VERSION_1_3));
+		m_bindManager.bind(
+				new CheckButtonEditor(m_useViewerSupportButton),
+				new BooleanPreferenceProvider(m_store, USE_VIEWER_SUPPORT));
+		m_bindManager.bind(
+				new ComboTextEditor(m_updateValueStrategyCombo),
+				new StringPreferenceProvider(m_store, UPDATE_VALUE_STRATEGY_DEFAULT));
+		m_bindManager.bind(
+				new ComboTextEditor(m_updateListStrategyCombo),
+				new StringPreferenceProvider(m_store, UPDATE_LIST_STRATEGY_DEFAULT));
+		m_bindManager.bind(
+				new ComboTextEditor(m_updateSetStrategyCombo),
+				new StringPreferenceProvider(m_store, UPDATE_SET_STRATEGY_DEFAULT));
+		m_bindManager.bind(
+				new RadioButtonsEditor(m_accessButtons),
+				new IntegerPreferenceProvider(m_store, INITDB_GENERATE_ACCESS));
+		// additional listeners
+		m_bindManager.addUpdateEvent(m_addInvokeButton, SWT.Selection);
+		m_bindManager.addUpdateEvent(m_assignToFieldButton, SWT.Selection);
+		m_bindManager.addUpdateEvent(m_addTryCatch, SWT.Selection);
+		m_bindManager.addUpdateEvent(m_generateCodeForVersion13Button, SWT.Selection);
+		for (int i = 0; i < m_accessButtons.length; i++) {
+			m_bindManager.addUpdateEvent(m_accessButtons[i], SWT.Selection);
+		}
+		m_bindManager.addUpdateRunnable(new Runnable() {
+			@Override
+			public void run() {
+				boolean state = m_addInvokeButton.getSelection();
+				m_assignToFieldButton.setEnabled(state);
+				m_addToCompositeConstructorButton.setEnabled(state);
+				boolean selection13 = m_generateCodeForVersion13Button.getSelection();
+				if (!selection13) {
+					if (m_useViewerSupportButton.getSelection()) {
+						m_useViewerSupportButton.setSelection(false);
+					}
+				}
+				m_useViewerSupportButton.setEnabled(selection13);
+				updatePreview();
+			}
+		});
+		// initial update
+		m_bindManager.performUpdate();
+		//
+		return container;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Preview
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected void updatePreview() {
-    // prepare state
-    boolean addState = m_addInvokeButton.getSelection();
-    boolean fieldState = m_assignToFieldButton.getSelection();
-    // prepare source
-    final StringBuffer source = new StringBuffer(Messages.DbCodeGenerationPreferencePage_27);
-    // field code
-    if (addState && fieldState) {
-      source.append(Messages.DbCodeGenerationPreferencePage_28);
-    }
-    // create GUI method
-    source.append(Messages.DbCodeGenerationPreferencePage_29);
-    if (addState && fieldState) {
-      source.append(Messages.DbCodeGenerationPreferencePage_30);
-    } else if (addState && !fieldState) {
-      source.append(Messages.DbCodeGenerationPreferencePage_31);
-    }
-    source.append(Messages.DbCodeGenerationPreferencePage_32);
-    // access code
-    int access = 1;
-    for (int i = 0; i < m_accessButtons.length; i++) {
-      if (m_accessButtons[i].getSelection()) {
-        access = i;
-        break;
-      }
-    }
-    source.append(DataBindingsRootInfo.ACCESS_VALUES[access]);
-    // initDB method
-    source.append(Messages.DbCodeGenerationPreferencePage_33);
-    boolean addTryCatch = m_addTryCatch.getSelection();
-    if (addTryCatch) {
-      source.append(Messages.DbCodeGenerationPreferencePage_34);
-    }
-    source.append(Messages.DbCodeGenerationPreferencePage_35);
-    if (m_generateCodeForVersion13Button.getSelection()) {
-      source.append(Messages.DbCodeGenerationPreferencePage_36);
-    } else {
-      source.append(Messages.DbCodeGenerationPreferencePage_37);
-    }
-    source.append(Messages.DbCodeGenerationPreferencePage_38);
-    if (addTryCatch) {
-      source.append(Messages.DbCodeGenerationPreferencePage_39);
-    }
-    source.append(Messages.DbCodeGenerationPreferencePage_40);
-    // set preview source
-    ExecutionUtils.runRethrow(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        JdtUiUtils.setJavaSourceForViewer(m_previewViewer, source.toString());
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Preview
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected void updatePreview() {
+		// prepare state
+		boolean addState = m_addInvokeButton.getSelection();
+		boolean fieldState = m_assignToFieldButton.getSelection();
+		// prepare source
+		final StringBuffer source = new StringBuffer(Messages.DbCodeGenerationPreferencePage_27);
+		// field code
+		if (addState && fieldState) {
+			source.append(Messages.DbCodeGenerationPreferencePage_28);
+		}
+		// create GUI method
+		source.append(Messages.DbCodeGenerationPreferencePage_29);
+		if (addState && fieldState) {
+			source.append(Messages.DbCodeGenerationPreferencePage_30);
+		} else if (addState && !fieldState) {
+			source.append(Messages.DbCodeGenerationPreferencePage_31);
+		}
+		source.append(Messages.DbCodeGenerationPreferencePage_32);
+		// access code
+		int access = 1;
+		for (int i = 0; i < m_accessButtons.length; i++) {
+			if (m_accessButtons[i].getSelection()) {
+				access = i;
+				break;
+			}
+		}
+		source.append(DataBindingsRootInfo.ACCESS_VALUES[access]);
+		// initDB method
+		source.append(Messages.DbCodeGenerationPreferencePage_33);
+		boolean addTryCatch = m_addTryCatch.getSelection();
+		if (addTryCatch) {
+			source.append(Messages.DbCodeGenerationPreferencePage_34);
+		}
+		source.append(Messages.DbCodeGenerationPreferencePage_35);
+		if (m_generateCodeForVersion13Button.getSelection()) {
+			source.append(Messages.DbCodeGenerationPreferencePage_36);
+		} else {
+			source.append(Messages.DbCodeGenerationPreferencePage_37);
+		}
+		source.append(Messages.DbCodeGenerationPreferencePage_38);
+		if (addTryCatch) {
+			source.append(Messages.DbCodeGenerationPreferencePage_39);
+		}
+		source.append(Messages.DbCodeGenerationPreferencePage_40);
+		// set preview source
+		ExecutionUtils.runRethrow(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				JdtUiUtils.setJavaSourceForViewer(m_previewViewer, source.toString());
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // State
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean performOk() {
-    m_bindManager.performCommit();
-    return super.performOk();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// State
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean performOk() {
+		m_bindManager.performCommit();
+		return super.performOk();
+	}
 
-  @Override
-  protected void performDefaults() {
-    m_bindManager.performDefault();
-    super.performDefaults();
-  }
+	@Override
+	protected void performDefaults() {
+		m_bindManager.performDefault();
+		super.performDefaults();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Initialization
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void init(IWorkbench workbench) {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Initialization
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void init(IWorkbench workbench) {
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/preferences/IPreferenceConstants.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/preferences/IPreferenceConstants.java
index 746ff1bdf..df6533fc4 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/preferences/IPreferenceConstants.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/preferences/IPreferenceConstants.java
@@ -17,79 +17,79 @@
  * @coverage bindings.rcp.preferences
  */
 public interface IPreferenceConstants {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * When <code>true</code>, code generator add <code>initDataBindings()</code> invocation to GUI
-   * creation method.
-   */
-  String ADD_INVOKE_INITDB_TO_GUI = "ADD_INVOKE_INITDB_TO_GUI";
-  /**
-   * When <code>true</code>, code generator assign return value of <code>initDataBindings()</code>
-   * invocation to field.
-   */
-  String ADD_INITDB_TO_FIELD = "ADD_INITDB_TO_FIELD";
-  /**
-   * When <code>true</code>, code generator add <code>initDataBindings()</code> invocation to
-   * <code>org.eclipse.swt.widgets.Composite</code> constructor.
-   */
-  String ADD_INVOKE_INITDB_TO_COMPOSITE_CONSTRUCTOR = "ADD_INVOKE_INITDB_TO_COMPOSITE_CONSTRUCTOR";
-  /**
-   * Code generator generate <code>initDataBindings()</code> with access:
-   * <code>public/protected/private/package private</code>.
-   */
-  String INITDB_GENERATE_ACCESS = "INITDB_GENERATE_ACCESS";
-  /**
-   * When {@code true}, code generator don't use deprecated method for create observables.
-   */
-  String DONT_USE_DEPRECATED_METHODS = "DONT_USE_DEPRECATED_METHODS";
-  /**
-   * When {@code true}, code generator wrap body of <code>initDataBindings()</code> into try/catch
-   * block.
-   */
-  String INITDB_TRY_CATCH = "INITDB_TRY_CATCH";
-  /**
-   * When {@code true}, code generator work over new model.
-   */
-  String GENERATE_CODE_FOR_VERSION_1_3 = "GENERATE_CODE_FOR_VERSION_1_3";
-  /**
-   * When {@code true}, code generator create code for JFace viewers over ViewerSupport.
-   */
-  String USE_VIEWER_SUPPORT = "USE_VIEWER_SUPPORT";
-  /**
-   * Default value for new value strategy object.
-   */
-  String UPDATE_VALUE_STRATEGY_DEFAULT = "UPDATE_VALUE_STRATEGY_DEFAULT";
-  /**
-   * Default value for new list strategy object.
-   */
-  String UPDATE_LIST_STRATEGY_DEFAULT = "UPDATE_LIST_STRATEGY_DEFAULT";
-  /**
-   * Default value for new set strategy object.
-   */
-  String UPDATE_SET_STRATEGY_DEFAULT = "UPDATE_SET_STRATEGY_DEFAULT";
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access values
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Public access (java keyword "public").
-   */
-  int PUBLIC_ACCESS = 0;
-  /**
-   * Protected access (java keyword "protected").
-   */
-  int PROTECTED_ACCESS = 1;
-  /**
-   * Private access (java keyword "private").
-   */
-  int PRIVATE_ACCESS = 2;
-  /**
-   * Package private access.
-   */
-  int PACKAGE_PRIVATE_ACCESS = 3;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * When <code>true</code>, code generator add <code>initDataBindings()</code> invocation to GUI
+	 * creation method.
+	 */
+	String ADD_INVOKE_INITDB_TO_GUI = "ADD_INVOKE_INITDB_TO_GUI";
+	/**
+	 * When <code>true</code>, code generator assign return value of <code>initDataBindings()</code>
+	 * invocation to field.
+	 */
+	String ADD_INITDB_TO_FIELD = "ADD_INITDB_TO_FIELD";
+	/**
+	 * When <code>true</code>, code generator add <code>initDataBindings()</code> invocation to
+	 * <code>org.eclipse.swt.widgets.Composite</code> constructor.
+	 */
+	String ADD_INVOKE_INITDB_TO_COMPOSITE_CONSTRUCTOR = "ADD_INVOKE_INITDB_TO_COMPOSITE_CONSTRUCTOR";
+	/**
+	 * Code generator generate <code>initDataBindings()</code> with access:
+	 * <code>public/protected/private/package private</code>.
+	 */
+	String INITDB_GENERATE_ACCESS = "INITDB_GENERATE_ACCESS";
+	/**
+	 * When {@code true}, code generator don't use deprecated method for create observables.
+	 */
+	String DONT_USE_DEPRECATED_METHODS = "DONT_USE_DEPRECATED_METHODS";
+	/**
+	 * When {@code true}, code generator wrap body of <code>initDataBindings()</code> into try/catch
+	 * block.
+	 */
+	String INITDB_TRY_CATCH = "INITDB_TRY_CATCH";
+	/**
+	 * When {@code true}, code generator work over new model.
+	 */
+	String GENERATE_CODE_FOR_VERSION_1_3 = "GENERATE_CODE_FOR_VERSION_1_3";
+	/**
+	 * When {@code true}, code generator create code for JFace viewers over ViewerSupport.
+	 */
+	String USE_VIEWER_SUPPORT = "USE_VIEWER_SUPPORT";
+	/**
+	 * Default value for new value strategy object.
+	 */
+	String UPDATE_VALUE_STRATEGY_DEFAULT = "UPDATE_VALUE_STRATEGY_DEFAULT";
+	/**
+	 * Default value for new list strategy object.
+	 */
+	String UPDATE_LIST_STRATEGY_DEFAULT = "UPDATE_LIST_STRATEGY_DEFAULT";
+	/**
+	 * Default value for new set strategy object.
+	 */
+	String UPDATE_SET_STRATEGY_DEFAULT = "UPDATE_SET_STRATEGY_DEFAULT";
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access values
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Public access (java keyword "public").
+	 */
+	int PUBLIC_ACCESS = 0;
+	/**
+	 * Protected access (java keyword "protected").
+	 */
+	int PROTECTED_ACCESS = 1;
+	/**
+	 * Private access (java keyword "private").
+	 */
+	int PRIVATE_ACCESS = 2;
+	/**
+	 * Package private access.
+	 */
+	int PACKAGE_PRIVATE_ACCESS = 3;
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/preferences/PreferenceInitializer.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/preferences/PreferenceInitializer.java
index 50eb89f31..79d55ba51 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/preferences/PreferenceInitializer.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/preferences/PreferenceInitializer.java
@@ -22,27 +22,27 @@
  * @coverage bindings.rcp.preferences
  */
 public final class PreferenceInitializer extends AbstractPreferenceInitializer
-    implements
-      IPreferenceConstants {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AbstractPreferenceInitializer
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void initializeDefaultPreferences() {
-    IPreferenceStore store = Activator.getStore();
-    // code generation
-    store.setDefault(ADD_INVOKE_INITDB_TO_GUI, true);
-    store.setDefault(ADD_INITDB_TO_FIELD, true);
-    store.setDefault(ADD_INVOKE_INITDB_TO_COMPOSITE_CONSTRUCTOR, true);
-    store.setDefault(DONT_USE_DEPRECATED_METHODS, true);
-    store.setDefault(INITDB_TRY_CATCH, false);
-    store.setDefault(GENERATE_CODE_FOR_VERSION_1_3, true);
-    store.setDefault(USE_VIEWER_SUPPORT, false);
-    store.setDefault(UPDATE_VALUE_STRATEGY_DEFAULT, "POLICY_UPDATE");
-    store.setDefault(UPDATE_LIST_STRATEGY_DEFAULT, "POLICY_UPDATE");
-    store.setDefault(UPDATE_SET_STRATEGY_DEFAULT, "POLICY_UPDATE");
-    store.setDefault(INITDB_GENERATE_ACCESS, PROTECTED_ACCESS);
-  }
+implements
+IPreferenceConstants {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AbstractPreferenceInitializer
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void initializeDefaultPreferences() {
+		IPreferenceStore store = Activator.getStore();
+		// code generation
+		store.setDefault(ADD_INVOKE_INITDB_TO_GUI, true);
+		store.setDefault(ADD_INITDB_TO_FIELD, true);
+		store.setDefault(ADD_INVOKE_INITDB_TO_COMPOSITE_CONSTRUCTOR, true);
+		store.setDefault(DONT_USE_DEPRECATED_METHODS, true);
+		store.setDefault(INITDB_TRY_CATCH, false);
+		store.setDefault(GENERATE_CODE_FOR_VERSION_1_3, true);
+		store.setDefault(USE_VIEWER_SUPPORT, false);
+		store.setDefault(UPDATE_VALUE_STRATEGY_DEFAULT, "POLICY_UPDATE");
+		store.setDefault(UPDATE_LIST_STRATEGY_DEFAULT, "POLICY_UPDATE");
+		store.setDefault(UPDATE_SET_STRATEGY_DEFAULT, "POLICY_UPDATE");
+		store.setDefault(INITDB_GENERATE_ACCESS, PROTECTED_ACCESS);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/contentproviders/CheckedElementsUiContentProvider.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/contentproviders/CheckedElementsUiContentProvider.java
index 003613a74..c56eb79c2 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/contentproviders/CheckedElementsUiContentProvider.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/contentproviders/CheckedElementsUiContentProvider.java
@@ -25,45 +25,45 @@
  * @coverage bindings.rcp.ui
  */
 public final class CheckedElementsUiContentProvider extends ChooseClassUiContentProvider {
-  private final CheckedElementsObservableInfo m_observable;
-  private final DatabindingsProvider m_provider;
+	private final CheckedElementsObservableInfo m_observable;
+	private final DatabindingsProvider m_provider;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CheckedElementsUiContentProvider(ChooseClassConfiguration configuration,
-      CheckedElementsObservableInfo observable,
-      DatabindingsProvider provider) {
-    super(configuration);
-    m_observable = observable;
-    m_provider = provider;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CheckedElementsUiContentProvider(ChooseClassConfiguration configuration,
+			CheckedElementsObservableInfo observable,
+			DatabindingsProvider provider) {
+		super(configuration);
+		m_observable = observable;
+		m_provider = provider;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Update
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void updateFromObject() throws Exception {
-    // prepare element type
-    Class<?> elementType = m_observable.getElementType();
-    if (elementType == null) {
-      elementType =
-          AbstractViewerInputBindingInfo.getViewerInutElementType(m_observable, m_provider);
-    }
-    // set element type
-    if (elementType == null) {
-      calculateFinish();
-    } else {
-      setClassName(CoreUtils.getClassName(elementType));
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Update
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void updateFromObject() throws Exception {
+		// prepare element type
+		Class<?> elementType = m_observable.getElementType();
+		if (elementType == null) {
+			elementType =
+					AbstractViewerInputBindingInfo.getViewerInutElementType(m_observable, m_provider);
+		}
+		// set element type
+		if (elementType == null) {
+			calculateFinish();
+		} else {
+			setClassName(CoreUtils.getClassName(elementType));
+		}
+	}
 
-  @Override
-  public void saveToObject() throws Exception {
-    m_observable.setElementType(loadClass(getClassName()));
-  }
+	@Override
+	public void saveToObject() throws Exception {
+		m_observable.setElementType(loadClass(getClassName()));
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/contentproviders/ChooseClassAndPropertiesUiContentProvider.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/contentproviders/ChooseClassAndPropertiesUiContentProvider.java
index 54ad12325..89400723a 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/contentproviders/ChooseClassAndPropertiesUiContentProvider.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/contentproviders/ChooseClassAndPropertiesUiContentProvider.java
@@ -28,31 +28,31 @@
  * @coverage bindings.rcp.ui
  */
 public abstract class ChooseClassAndPropertiesUiContentProvider
-    extends
-      org.eclipse.wb.internal.core.databinding.ui.editor.contentproviders.ChooseClassAndPropertiesUiContentProvider {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ChooseClassAndPropertiesUiContentProvider(ChooseClassAndPropertiesConfiguration configuration) {
-    super(configuration);
-    if (configuration.getPropertiesLabelProvider() == null) {
-      configuration.setPropertiesLabelProvider(new PropertyAdapterLabelProvider());
-    }
-  }
+extends
+org.eclipse.wb.internal.core.databinding.ui.editor.contentproviders.ChooseClassAndPropertiesUiContentProvider {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ChooseClassAndPropertiesUiContentProvider(ChooseClassAndPropertiesConfiguration configuration) {
+		super(configuration);
+		if (configuration.getPropertiesLabelProvider() == null) {
+			configuration.setPropertiesLabelProvider(new PropertyAdapterLabelProvider());
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Properties
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected final List<PropertyAdapter> getProperties(Class<?> choosenClass) throws Exception {
-    List<PropertyAdapter> properties = Lists.newArrayList();
-    for (PropertyDescriptor descriptor : BeanSupport.getPropertyDescriptors(choosenClass)) {
-      properties.add(new PropertyAdapter(descriptor));
-    }
-    return properties;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Properties
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected final List<PropertyAdapter> getProperties(Class<?> choosenClass) throws Exception {
+		List<PropertyAdapter> properties = Lists.newArrayList();
+		for (PropertyDescriptor descriptor : BeanSupport.getPropertyDescriptors(choosenClass)) {
+			properties.add(new PropertyAdapter(descriptor));
+		}
+		return properties;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/contentproviders/ChooseClassAndTreePropertiesUiContentProvider.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/contentproviders/ChooseClassAndTreePropertiesUiContentProvider.java
index e9e998d35..a390220e3 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/contentproviders/ChooseClassAndTreePropertiesUiContentProvider.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/contentproviders/ChooseClassAndTreePropertiesUiContentProvider.java
@@ -63,390 +63,390 @@
  * @coverage bindings.rcp.ui
  */
 public abstract class ChooseClassAndTreePropertiesUiContentProvider
-    extends
-      org.eclipse.wb.internal.core.databinding.ui.editor.contentproviders.ChooseClassAndPropertiesUiContentProvider {
-  private CheckboxTreeViewer m_treeViewer;
-  private TableViewer m_orderPropertiesViewer;
-  private final List<PropertyAdapter> m_orderProperties = Lists.newArrayList();
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ChooseClassAndTreePropertiesUiContentProvider(ChooseClassAndPropertiesConfiguration configuration) {
-    super(configuration);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Control createViewers(Composite parent) {
-    SashForm sashForm = new SashForm(parent, SWT.HORIZONTAL);
-    //
-    super.createViewers(sashForm);
-    //
-    m_orderPropertiesViewer =
-        new TableViewer(sashForm, SWT.BORDER | SWT.FULL_SELECTION | SWT.H_SCROLL | SWT.V_SCROLL);
-    m_orderPropertiesViewer.setContentProvider(new ArrayContentProvider());
-    m_orderPropertiesViewer.setLabelProvider(new PropertyAdapterLabelProvider(
-        m_orderPropertiesViewer) {
-      @Override
-      public String getText(Object element) {
-        ObservePropertyAdapter adapter = getAdapter(element);
-        return adapter.fullName;
-      }
-    });
-    m_orderPropertiesViewer.addPostSelectionChangedListener(new ISelectionChangedListener() {
-      @Override
-      public void selectionChanged(SelectionChangedEvent event) {
-        if (!event.getSelection().isEmpty()) {
-          m_treeViewer.setSelection(event.getSelection(), true);
-        }
-        calculateUpDowButtons();
-      }
-    });
-    m_orderPropertiesViewer.setInput(m_orderProperties);
-    //
-    return sashForm;
-  }
-
-  @Override
-  protected ICheckboxViewerWrapper createPropertiesViewer(Composite parent) {
-    m_treeViewer =
-        new CheckboxTreeViewer(parent, SWT.BORDER
-            | SWT.FULL_SELECTION
-            | SWT.H_SCROLL
-            | SWT.V_SCROLL);
-    m_treeViewer.setContentProvider(new PropertyAdapterContentProvider());
-    m_treeViewer.setLabelProvider(new PropertyAdapterLabelProvider(m_treeViewer));
-    m_treeViewer.addCheckStateListener(new ICheckStateListener() {
-      @Override
-      public void checkStateChanged(CheckStateChangedEvent event) {
-        if (m_orderPropertiesViewer != null) {
-          PropertyAdapter adapter = (PropertyAdapter) event.getElement();
-          //
-          if (event.getChecked()) {
-            m_orderProperties.add(adapter);
-          } else {
-            m_orderProperties.remove(adapter);
-          }
-          //
-          m_orderPropertiesViewer.refresh();
-        }
-      }
-    });
-    return new CheckboxTreeViewerWrapper(m_treeViewer);
-  }
-
-  @Override
-  protected void configureDND() {
-    configureDND(m_orderPropertiesViewer, m_orderProperties);
-  }
-
-  @Override
-  protected void calculateUpDowButtons() {
-    calculateUpDowButtons(m_orderPropertiesViewer, m_orderProperties);
-  }
-
-  @Override
-  protected void handleMoveElement(boolean up) {
-    handleMoveElement(up, m_orderPropertiesViewer, m_orderProperties);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Update
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected void setClassNameAndProperties(Class<?> beanClass,
-      String beanClassName,
-      List<String> properties) throws Exception {
-    if (beanClassName == null) {
-      setClassName(CoreUtils.getClassName(beanClass));
-    } else {
-      setClassName(beanClassName);
-    }
-    //
-    ClassLoader classLoader = JavaInfoUtils.getClassLoader(EditorState.getActiveJavaInfo());
-    BeanSupport beanSupport = new BeanSupport(classLoader, null);
-    BeanBindableInfo beanObjectInfo =
-        new BeanBindableInfo(beanSupport, null, beanClass, null, (IObservePresentation) null);
-    //
-    Object[] adapters = new Object[properties.size()];
-    for (int i = 0; i < adapters.length; i++) {
-      adapters[i] =
-          convertPropertyToAdapter(beanObjectInfo.resolvePropertyReference(properties.get(i)));
-    }
-    //
-    setCheckedAndExpand(adapters);
-    //
-    if (m_orderPropertiesViewer != null) {
-      CollectionUtils.addAll(m_orderProperties, adapters);
-      m_orderPropertiesViewer.refresh();
-    }
-    //
-    calculatePropertiesFinish();
-  }
-
-  protected final void setCheckedAndExpand(Object[] adapters) {
-    for (int i = 0; i < adapters.length; i++) {
-      if (adapters[i] == null) {
-        return;
-      }
-      m_treeViewer.expandToLevel(adapters[i], 0);
-    }
-    m_treeViewer.setCheckedElements(adapters);
-    if (adapters.length > 0) {
-      m_treeViewer.setSelection(new StructuredSelection(adapters[0]), true);
-    }
-  }
-
-  protected ObservePropertyAdapter convertPropertyToAdapter(IObserveInfo observe) throws Exception {
-    if (observe instanceof PropertyBindableInfo) {
-      PropertyBindableInfo property = (PropertyBindableInfo) observe;
-      ObservePropertyAdapter adapter =
-          new ObservePropertyAdapter(convertPropertyToAdapter(property.getParent()), property);
-      adapter.addToParent();
-      return adapter;
-    }
-    return null;
-  }
-
-  @Override
-  protected final List<PropertyAdapter> getChoosenProperties() {
-    return m_orderProperties;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Properties
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected List<PropertyAdapter> getProperties(Class<?> choosenClass) throws Exception {
-    m_orderProperties.clear();
-    if (m_orderPropertiesViewer != null) {
-      m_orderPropertiesViewer.refresh();
-    }
-    //
-    List<PropertyAdapter> adapters = Lists.newArrayList();
-    //
-    ClassLoader classLoader = JavaInfoUtils.getClassLoader(EditorState.getActiveJavaInfo());
-    BeanSupport beanSupport = new BeanSupport(classLoader, null);
-    BeanBindableInfo beanObjectInfo =
-        new BeanBindableInfo(beanSupport, null, choosenClass, null, (IObservePresentation) null);
-    //
-    for (PropertyBindableInfo property : beanSupport.getProperties(beanObjectInfo)) {
-      adapters.add(new ObservePropertyAdapter(null, property));
-    }
-    //
-    return adapters;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Classes
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static class ObservePropertyAdapter extends PropertyAdapter {
-    private final ObservePropertyAdapter m_parent;
-    protected final BindableInfo m_property;
-    protected List<ObservePropertyAdapter> m_children;
-    public String fullName;
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public ObservePropertyAdapter(ObservePropertyAdapter parent, BindableInfo property)
-        throws Exception {
-      super(property.getPresentation().getText(), property.getObjectType());
-      m_parent = parent;
-      m_property = property;
-      if (m_parent == null) {
-        fullName = getName();
-      } else {
-        fullName = m_parent.fullName + "." + getName();
-      }
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Access
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public ObservePropertyAdapter getParent() {
-      return m_parent;
-    }
-
-    public BindableInfo getProperty() {
-      return m_property;
-    }
-
-    public List<ObservePropertyAdapter> getChildren() {
-      if (m_children == null) {
-        m_children = Lists.newArrayList();
-        List<BindableInfo> properties =
-            CoreUtils.cast(m_property.getChildren(ChildrenContext.ChildrenForPropertiesTable));
-        for (BindableInfo property : properties) {
-          try {
-            m_children.add(new ObservePropertyAdapter(this, property));
-          } catch (Throwable e) {
-            DesignerPlugin.log(e);
-          }
-        }
-      }
-      return m_children;
-    }
-
-    public void setChildren(List<ObservePropertyAdapter> children) {
-      m_children = children;
-    }
-
-    public void addToParent() {
-      if (m_parent != null) {
-        m_parent.m_children = Lists.newArrayList();
-        m_parent.m_children.add(this);
-      }
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Object
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public int hashCode() {
-      int parentHash = m_parent == null ? 1 : m_parent.hashCode();
-      return parentHash * super.hashCode();
-    }
-
-    @Override
-    public boolean equals(Object object) {
-      // self check
-      if (object == this) {
-        return true;
-      }
-      // compare with other adapter
-      if (object instanceof ObservePropertyAdapter) {
-        ObservePropertyAdapter adapter = (ObservePropertyAdapter) object;
-        if (m_parent == null && adapter.m_parent == null) {
-        } else if (m_parent != null
-            && adapter.m_parent == null
-            || m_parent == null
-            && adapter.m_parent != null) {
-          return false;
-        } else if (m_parent != null && adapter.m_parent != null) {
-          if (!m_parent.equals(adapter.m_parent)) {
-            return false;
-          }
-        }
-        return m_name.equals(adapter.m_name) && m_type == adapter.m_type;
-      }
-      // default
-      return false;
-    }
-  }
-  private static class PropertyAdapterContentProvider implements ITreeContentProvider {
-    @Override
-    public Object[] getElements(Object input) {
-      return ((List<?>) input).toArray();
-    }
-
-    @Override
-    public Object getParent(Object element) {
-      return getAdapter(element).getParent();
-    }
-
-    @Override
-    public boolean hasChildren(Object element) {
-      return !getAdapter(element).getChildren().isEmpty();
-    }
-
-    @Override
-    public Object[] getChildren(Object element) {
-      return getAdapter(element).getChildren().toArray();
-    }
-
-    @Override
-    public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
-    }
-
-    @Override
-    public void dispose() {
-    }
-  }
-  private static class PropertyAdapterLabelProvider extends LabelProvider
-      implements
-        IColorProvider,
-        IFontProvider {
-    private final ObserveDecoratingLabelProvider m_labelProvider;
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public PropertyAdapterLabelProvider(StructuredViewer viewer) {
-      m_labelProvider = new ObserveDecoratingLabelProvider(viewer);
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // LabelProvider
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public void dispose() {
-      super.dispose();
-      m_labelProvider.dispose();
-    }
-
-    @Override
-    public String getText(Object element) {
-      return getAdapter(element).getName();
-    }
-
-    @Override
-    public Image getImage(Object element) {
-      try {
-        return getAdapterProperty(element).getPresentation().getImage();
-      } catch (Throwable e) {
-      }
-      return super.getImage(element);
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Decoration
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public Color getForeground(Object element) {
-      return m_labelProvider.getForeground(getAdapterProperty(element));
-    }
-
-    @Override
-    public Color getBackground(Object element) {
-      return m_labelProvider.getBackground(getAdapterProperty(element));
-    }
-
-    @Override
-    public Font getFont(Object element) {
-      return m_labelProvider.getFont(getAdapterProperty(element));
-    }
-  }
-
-  private static ObservePropertyAdapter getAdapter(Object element) {
-    return (ObservePropertyAdapter) element;
-  }
-
-  private static BindableInfo getAdapterProperty(Object element) {
-    return getAdapter(element).getProperty();
-  }
+extends
+org.eclipse.wb.internal.core.databinding.ui.editor.contentproviders.ChooseClassAndPropertiesUiContentProvider {
+	private CheckboxTreeViewer m_treeViewer;
+	private TableViewer m_orderPropertiesViewer;
+	private final List<PropertyAdapter> m_orderProperties = Lists.newArrayList();
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ChooseClassAndTreePropertiesUiContentProvider(ChooseClassAndPropertiesConfiguration configuration) {
+		super(configuration);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Control createViewers(Composite parent) {
+		SashForm sashForm = new SashForm(parent, SWT.HORIZONTAL);
+		//
+		super.createViewers(sashForm);
+		//
+		m_orderPropertiesViewer =
+				new TableViewer(sashForm, SWT.BORDER | SWT.FULL_SELECTION | SWT.H_SCROLL | SWT.V_SCROLL);
+		m_orderPropertiesViewer.setContentProvider(new ArrayContentProvider());
+		m_orderPropertiesViewer.setLabelProvider(new PropertyAdapterLabelProvider(
+				m_orderPropertiesViewer) {
+			@Override
+			public String getText(Object element) {
+				ObservePropertyAdapter adapter = getAdapter(element);
+				return adapter.fullName;
+			}
+		});
+		m_orderPropertiesViewer.addPostSelectionChangedListener(new ISelectionChangedListener() {
+			@Override
+			public void selectionChanged(SelectionChangedEvent event) {
+				if (!event.getSelection().isEmpty()) {
+					m_treeViewer.setSelection(event.getSelection(), true);
+				}
+				calculateUpDowButtons();
+			}
+		});
+		m_orderPropertiesViewer.setInput(m_orderProperties);
+		//
+		return sashForm;
+	}
+
+	@Override
+	protected ICheckboxViewerWrapper createPropertiesViewer(Composite parent) {
+		m_treeViewer =
+				new CheckboxTreeViewer(parent, SWT.BORDER
+						| SWT.FULL_SELECTION
+						| SWT.H_SCROLL
+						| SWT.V_SCROLL);
+		m_treeViewer.setContentProvider(new PropertyAdapterContentProvider());
+		m_treeViewer.setLabelProvider(new PropertyAdapterLabelProvider(m_treeViewer));
+		m_treeViewer.addCheckStateListener(new ICheckStateListener() {
+			@Override
+			public void checkStateChanged(CheckStateChangedEvent event) {
+				if (m_orderPropertiesViewer != null) {
+					PropertyAdapter adapter = (PropertyAdapter) event.getElement();
+					//
+					if (event.getChecked()) {
+						m_orderProperties.add(adapter);
+					} else {
+						m_orderProperties.remove(adapter);
+					}
+					//
+					m_orderPropertiesViewer.refresh();
+				}
+			}
+		});
+		return new CheckboxTreeViewerWrapper(m_treeViewer);
+	}
+
+	@Override
+	protected void configureDND() {
+		configureDND(m_orderPropertiesViewer, m_orderProperties);
+	}
+
+	@Override
+	protected void calculateUpDowButtons() {
+		calculateUpDowButtons(m_orderPropertiesViewer, m_orderProperties);
+	}
+
+	@Override
+	protected void handleMoveElement(boolean up) {
+		handleMoveElement(up, m_orderPropertiesViewer, m_orderProperties);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Update
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected void setClassNameAndProperties(Class<?> beanClass,
+			String beanClassName,
+			List<String> properties) throws Exception {
+		if (beanClassName == null) {
+			setClassName(CoreUtils.getClassName(beanClass));
+		} else {
+			setClassName(beanClassName);
+		}
+		//
+		ClassLoader classLoader = JavaInfoUtils.getClassLoader(EditorState.getActiveJavaInfo());
+		BeanSupport beanSupport = new BeanSupport(classLoader, null);
+		BeanBindableInfo beanObjectInfo =
+				new BeanBindableInfo(beanSupport, null, beanClass, null, (IObservePresentation) null);
+		//
+		Object[] adapters = new Object[properties.size()];
+		for (int i = 0; i < adapters.length; i++) {
+			adapters[i] =
+					convertPropertyToAdapter(beanObjectInfo.resolvePropertyReference(properties.get(i)));
+		}
+		//
+		setCheckedAndExpand(adapters);
+		//
+		if (m_orderPropertiesViewer != null) {
+			CollectionUtils.addAll(m_orderProperties, adapters);
+			m_orderPropertiesViewer.refresh();
+		}
+		//
+		calculatePropertiesFinish();
+	}
+
+	protected final void setCheckedAndExpand(Object[] adapters) {
+		for (int i = 0; i < adapters.length; i++) {
+			if (adapters[i] == null) {
+				return;
+			}
+			m_treeViewer.expandToLevel(adapters[i], 0);
+		}
+		m_treeViewer.setCheckedElements(adapters);
+		if (adapters.length > 0) {
+			m_treeViewer.setSelection(new StructuredSelection(adapters[0]), true);
+		}
+	}
+
+	protected ObservePropertyAdapter convertPropertyToAdapter(IObserveInfo observe) throws Exception {
+		if (observe instanceof PropertyBindableInfo) {
+			PropertyBindableInfo property = (PropertyBindableInfo) observe;
+			ObservePropertyAdapter adapter =
+					new ObservePropertyAdapter(convertPropertyToAdapter(property.getParent()), property);
+			adapter.addToParent();
+			return adapter;
+		}
+		return null;
+	}
+
+	@Override
+	protected final List<PropertyAdapter> getChoosenProperties() {
+		return m_orderProperties;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Properties
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected List<PropertyAdapter> getProperties(Class<?> choosenClass) throws Exception {
+		m_orderProperties.clear();
+		if (m_orderPropertiesViewer != null) {
+			m_orderPropertiesViewer.refresh();
+		}
+		//
+		List<PropertyAdapter> adapters = Lists.newArrayList();
+		//
+		ClassLoader classLoader = JavaInfoUtils.getClassLoader(EditorState.getActiveJavaInfo());
+		BeanSupport beanSupport = new BeanSupport(classLoader, null);
+		BeanBindableInfo beanObjectInfo =
+				new BeanBindableInfo(beanSupport, null, choosenClass, null, (IObservePresentation) null);
+		//
+		for (PropertyBindableInfo property : beanSupport.getProperties(beanObjectInfo)) {
+			adapters.add(new ObservePropertyAdapter(null, property));
+		}
+		//
+		return adapters;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Classes
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static class ObservePropertyAdapter extends PropertyAdapter {
+		private final ObservePropertyAdapter m_parent;
+		protected final BindableInfo m_property;
+		protected List<ObservePropertyAdapter> m_children;
+		public String fullName;
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public ObservePropertyAdapter(ObservePropertyAdapter parent, BindableInfo property)
+				throws Exception {
+			super(property.getPresentation().getText(), property.getObjectType());
+			m_parent = parent;
+			m_property = property;
+			if (m_parent == null) {
+				fullName = getName();
+			} else {
+				fullName = m_parent.fullName + "." + getName();
+			}
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Access
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public ObservePropertyAdapter getParent() {
+			return m_parent;
+		}
+
+		public BindableInfo getProperty() {
+			return m_property;
+		}
+
+		public List<ObservePropertyAdapter> getChildren() {
+			if (m_children == null) {
+				m_children = Lists.newArrayList();
+				List<BindableInfo> properties =
+						CoreUtils.cast(m_property.getChildren(ChildrenContext.ChildrenForPropertiesTable));
+				for (BindableInfo property : properties) {
+					try {
+						m_children.add(new ObservePropertyAdapter(this, property));
+					} catch (Throwable e) {
+						DesignerPlugin.log(e);
+					}
+				}
+			}
+			return m_children;
+		}
+
+		public void setChildren(List<ObservePropertyAdapter> children) {
+			m_children = children;
+		}
+
+		public void addToParent() {
+			if (m_parent != null) {
+				m_parent.m_children = Lists.newArrayList();
+				m_parent.m_children.add(this);
+			}
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Object
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public int hashCode() {
+			int parentHash = m_parent == null ? 1 : m_parent.hashCode();
+			return parentHash * super.hashCode();
+		}
+
+		@Override
+		public boolean equals(Object object) {
+			// self check
+			if (object == this) {
+				return true;
+			}
+			// compare with other adapter
+			if (object instanceof ObservePropertyAdapter) {
+				ObservePropertyAdapter adapter = (ObservePropertyAdapter) object;
+				if (m_parent == null && adapter.m_parent == null) {
+				} else if (m_parent != null
+						&& adapter.m_parent == null
+						|| m_parent == null
+						&& adapter.m_parent != null) {
+					return false;
+				} else if (m_parent != null && adapter.m_parent != null) {
+					if (!m_parent.equals(adapter.m_parent)) {
+						return false;
+					}
+				}
+				return m_name.equals(adapter.m_name) && m_type == adapter.m_type;
+			}
+			// default
+			return false;
+		}
+	}
+	private static class PropertyAdapterContentProvider implements ITreeContentProvider {
+		@Override
+		public Object[] getElements(Object input) {
+			return ((List<?>) input).toArray();
+		}
+
+		@Override
+		public Object getParent(Object element) {
+			return getAdapter(element).getParent();
+		}
+
+		@Override
+		public boolean hasChildren(Object element) {
+			return !getAdapter(element).getChildren().isEmpty();
+		}
+
+		@Override
+		public Object[] getChildren(Object element) {
+			return getAdapter(element).getChildren().toArray();
+		}
+
+		@Override
+		public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+		}
+
+		@Override
+		public void dispose() {
+		}
+	}
+	private static class PropertyAdapterLabelProvider extends LabelProvider
+	implements
+	IColorProvider,
+	IFontProvider {
+		private final ObserveDecoratingLabelProvider m_labelProvider;
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public PropertyAdapterLabelProvider(StructuredViewer viewer) {
+			m_labelProvider = new ObserveDecoratingLabelProvider(viewer);
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// LabelProvider
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public void dispose() {
+			super.dispose();
+			m_labelProvider.dispose();
+		}
+
+		@Override
+		public String getText(Object element) {
+			return getAdapter(element).getName();
+		}
+
+		@Override
+		public Image getImage(Object element) {
+			try {
+				return getAdapterProperty(element).getPresentation().getImage();
+			} catch (Throwable e) {
+			}
+			return super.getImage(element);
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Decoration
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public Color getForeground(Object element) {
+			return m_labelProvider.getForeground(getAdapterProperty(element));
+		}
+
+		@Override
+		public Color getBackground(Object element) {
+			return m_labelProvider.getBackground(getAdapterProperty(element));
+		}
+
+		@Override
+		public Font getFont(Object element) {
+			return m_labelProvider.getFont(getAdapterProperty(element));
+		}
+	}
+
+	private static ObservePropertyAdapter getAdapter(Object element) {
+		return (ObservePropertyAdapter) element;
+	}
+
+	private static BindableInfo getAdapterProperty(Object element) {
+		return getAdapter(element).getProperty();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/contentproviders/ChooseClassAndTreePropertiesUiContentProvider2.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/contentproviders/ChooseClassAndTreePropertiesUiContentProvider2.java
index 6c12ff6ae..84d589d32 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/contentproviders/ChooseClassAndTreePropertiesUiContentProvider2.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/contentproviders/ChooseClassAndTreePropertiesUiContentProvider2.java
@@ -25,35 +25,35 @@
  * @coverage bindings.rcp.ui
  */
 public abstract class ChooseClassAndTreePropertiesUiContentProvider2
-    extends
-      ChooseClassAndTreePropertiesUiContentProvider {
-  protected ICheckboxViewerWrapper m_propertiesViewer;
+extends
+ChooseClassAndTreePropertiesUiContentProvider {
+	protected ICheckboxViewerWrapper m_propertiesViewer;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ChooseClassAndTreePropertiesUiContentProvider2(ChooseClassAndPropertiesConfiguration configuration) {
-    super(configuration);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ChooseClassAndTreePropertiesUiContentProvider2(ChooseClassAndPropertiesConfiguration configuration) {
+		super(configuration);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void createContent(Composite parent, int columns) {
-    super.createContent(parent, columns);
-    GridDataFactory.modify(m_propertiesViewer.getViewer().getControl()).grab(true, false).minV(0).hintVC(
-        10);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void createContent(Composite parent, int columns) {
+		super.createContent(parent, columns);
+		GridDataFactory.modify(m_propertiesViewer.getViewer().getControl()).grab(true, false).minV(0).hintVC(
+				10);
+	}
 
-  @Override
-  protected Control createViewers(Composite parent) {
-    m_propertiesViewer = createPropertiesViewer(parent);
-    setPropertiesViewer(m_propertiesViewer);
-    return m_propertiesViewer.getViewer().getControl();
-  }
+	@Override
+	protected Control createViewers(Composite parent) {
+		m_propertiesViewer = createPropertiesViewer(parent);
+		setPropertiesViewer(m_propertiesViewer);
+		return m_propertiesViewer.getViewer().getControl();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/contentproviders/ConverterUiContentProvider.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/contentproviders/ConverterUiContentProvider.java
index 8c2697581..b7875d487 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/contentproviders/ConverterUiContentProvider.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/contentproviders/ConverterUiContentProvider.java
@@ -22,44 +22,44 @@
  * @coverage bindings.rcp.ui
  */
 public final class ConverterUiContentProvider extends ChooseClassUiContentProvider {
-  private final UpdateStrategyInfo m_strategy;
+	private final UpdateStrategyInfo m_strategy;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ConverterUiContentProvider(ChooseClassConfiguration configuration,
-      UpdateStrategyInfo strategy) {
-    super(configuration);
-    m_strategy = strategy;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ConverterUiContentProvider(ChooseClassConfiguration configuration,
+			UpdateStrategyInfo strategy) {
+		super(configuration);
+		m_strategy = strategy;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Update
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void updateFromObject() {
-    ConverterInfo converter = m_strategy.getConverter();
-    setClassName(converter == null ? "N/S" : converter.getClassName());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Update
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void updateFromObject() {
+		ConverterInfo converter = m_strategy.getConverter();
+		setClassName(converter == null ? "N/S" : converter.getClassName());
+	}
 
-  @Override
-  public void saveToObject() {
-    String className = getClassName();
-    // check set or clear value
-    if ("N/S".equals(className)) {
-      m_strategy.setConverter(null);
-    } else {
-      ConverterInfo converter = m_strategy.getConverter();
-      // check new converter or edit value
-      if (converter == null) {
-        m_strategy.setConverter(new ConverterInfo(className));
-      } else {
-        converter.setClassName(className);
-      }
-    }
-  }
+	@Override
+	public void saveToObject() {
+		String className = getClassName();
+		// check set or clear value
+		if ("N/S".equals(className)) {
+			m_strategy.setConverter(null);
+		} else {
+			ConverterInfo converter = m_strategy.getConverter();
+			// check new converter or edit value
+			if (converter == null) {
+				m_strategy.setConverter(new ConverterInfo(className));
+			} else {
+				converter.setClassName(className);
+			}
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/contentproviders/InputElementUiContentProvider.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/contentproviders/InputElementUiContentProvider.java
index da1534dae..bcc6fca28 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/contentproviders/InputElementUiContentProvider.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/contentproviders/InputElementUiContentProvider.java
@@ -35,78 +35,78 @@
  * @coverage bindings.rcp.ui
  */
 public final class InputElementUiContentProvider
-    extends
-      ChooseClassAndTreePropertiesUiContentProvider {
-  private final ViewerInputBindingInfo m_viewerBinding;
+extends
+ChooseClassAndTreePropertiesUiContentProvider {
+	private final ViewerInputBindingInfo m_viewerBinding;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public InputElementUiContentProvider(ChooseClassAndPropertiesConfiguration configuration,
-      ViewerInputBindingInfo viewerBinding) {
-    super(configuration);
-    m_viewerBinding = viewerBinding;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public InputElementUiContentProvider(ChooseClassAndPropertiesConfiguration configuration,
+			ViewerInputBindingInfo viewerBinding) {
+		super(configuration);
+		m_viewerBinding = viewerBinding;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Update
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void updateFromObject() throws Exception {
-    // prepare input element type
-    Class<?> elementType = m_viewerBinding.getElementType();
-    if (elementType == null) {
-      calculateFinish();
-    } else {
-      // prepare initial properties
-      MapsBeanObservableInfo mapsObservable =
-          m_viewerBinding.getLabelProvider().getMapsObservable();
-      String[] properties = mapsObservable.getProperties();
-      if (properties == null) {
-        setClassName(CoreUtils.getClassName(elementType));
-      } else {
-        List<String> checkedProperties = Lists.newArrayList();
-        for (int i = 0; i < properties.length; i++) {
-          checkedProperties.add("\"" + properties[i] + "\"");
-        }
-        setClassNameAndProperties(elementType, null, checkedProperties);
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Update
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void updateFromObject() throws Exception {
+		// prepare input element type
+		Class<?> elementType = m_viewerBinding.getElementType();
+		if (elementType == null) {
+			calculateFinish();
+		} else {
+			// prepare initial properties
+			MapsBeanObservableInfo mapsObservable =
+					m_viewerBinding.getLabelProvider().getMapsObservable();
+			String[] properties = mapsObservable.getProperties();
+			if (properties == null) {
+				setClassName(CoreUtils.getClassName(elementType));
+			} else {
+				List<String> checkedProperties = Lists.newArrayList();
+				for (int i = 0; i < properties.length; i++) {
+					checkedProperties.add("\"" + properties[i] + "\"");
+				}
+				setClassNameAndProperties(elementType, null, checkedProperties);
+			}
+		}
+	}
 
-  @Override
-  protected void saveToObject(Class<?> choosenClass, List<PropertyAdapter> choosenProperties)
-      throws Exception {
-    // sets label provider element type
-    MapsBeanObservableInfo mapsObservable = m_viewerBinding.getLabelProvider().getMapsObservable();
-    mapsObservable.setElementType(choosenClass);
-    // sets label provider element properties
-    String[] properties = new String[choosenProperties.size()];
-    for (int i = 0; i < properties.length; i++) {
-      ObservePropertyAdapter adapter = (ObservePropertyAdapter) choosenProperties.get(i);
-      properties[i] = StringUtils.remove(adapter.getProperty().getReference(), '"');
-    }
-    mapsObservable.setProperties(properties);
-    // set input element type
-    setElementTypeToInput(m_viewerBinding, choosenClass);
-  }
+	@Override
+	protected void saveToObject(Class<?> choosenClass, List<PropertyAdapter> choosenProperties)
+			throws Exception {
+		// sets label provider element type
+		MapsBeanObservableInfo mapsObservable = m_viewerBinding.getLabelProvider().getMapsObservable();
+		mapsObservable.setElementType(choosenClass);
+		// sets label provider element properties
+		String[] properties = new String[choosenProperties.size()];
+		for (int i = 0; i < properties.length; i++) {
+			ObservePropertyAdapter adapter = (ObservePropertyAdapter) choosenProperties.get(i);
+			properties[i] = StringUtils.remove(adapter.getProperty().getReference(), '"');
+		}
+		mapsObservable.setProperties(properties);
+		// set input element type
+		setElementTypeToInput(m_viewerBinding, choosenClass);
+	}
 
-  public static void setElementTypeToInput(AbstractViewerInputBindingInfo viewerBinding,
-      Class<?> choosenClass) {
-    ObservableInfo observable = viewerBinding.getInputObservable();
-    if (observable instanceof DetailBeanObservableInfo) {
-      DetailBeanObservableInfo inputObservable = (DetailBeanObservableInfo) observable;
-      inputObservable.setDetailPropertyType(choosenClass);
-    } else if (observable instanceof CheckedElementsObservableInfo) {
-      CheckedElementsObservableInfo inputObservable = (CheckedElementsObservableInfo) observable;
-      inputObservable.setElementType(choosenClass);
-    } else if (observable instanceof CollectionObservableInfo) {
-      CollectionObservableInfo inputObservable = (CollectionObservableInfo) observable;
-      inputObservable.setElementType(choosenClass);
-    }
-  }
+	public static void setElementTypeToInput(AbstractViewerInputBindingInfo viewerBinding,
+			Class<?> choosenClass) {
+		ObservableInfo observable = viewerBinding.getInputObservable();
+		if (observable instanceof DetailBeanObservableInfo) {
+			DetailBeanObservableInfo inputObservable = (DetailBeanObservableInfo) observable;
+			inputObservable.setDetailPropertyType(choosenClass);
+		} else if (observable instanceof CheckedElementsObservableInfo) {
+			CheckedElementsObservableInfo inputObservable = (CheckedElementsObservableInfo) observable;
+			inputObservable.setElementType(choosenClass);
+		} else if (observable instanceof CollectionObservableInfo) {
+			CollectionObservableInfo inputObservable = (CollectionObservableInfo) observable;
+			inputObservable.setElementType(choosenClass);
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/contentproviders/ObservableDetailUiContentProvider.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/contentproviders/ObservableDetailUiContentProvider.java
index cc092ed1a..989e3717a 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/contentproviders/ObservableDetailUiContentProvider.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/contentproviders/ObservableDetailUiContentProvider.java
@@ -36,89 +36,89 @@
  * @coverage bindings.rcp.ui
  */
 public class ObservableDetailUiContentProvider
-    extends
-      ChooseClassAndTreePropertiesUiContentProvider2 {
-  private final DetailBeanObservableInfo m_observable;
-  private final DatabindingsProvider m_provider;
+extends
+ChooseClassAndTreePropertiesUiContentProvider2 {
+	private final DetailBeanObservableInfo m_observable;
+	private final DatabindingsProvider m_provider;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ObservableDetailUiContentProvider(ChooseClassAndPropertiesConfiguration configuration,
-      DetailBeanObservableInfo observable,
-      DatabindingsProvider provider) {
-    super(configuration);
-    configuration.addDefaultStart("detail(");
-    m_observable = observable;
-    m_provider = provider;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ObservableDetailUiContentProvider(ChooseClassAndPropertiesConfiguration configuration,
+			DetailBeanObservableInfo observable,
+			DatabindingsProvider provider) {
+		super(configuration);
+		configuration.addDefaultStart("detail(");
+		m_observable = observable;
+		m_provider = provider;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Update
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void updateFromObject() throws Exception {
-    String propertyReference = m_observable.getDetailPropertyReference();
-    // sets property reference and type
-    if (propertyReference == null) {
-      // calculate type over viewer input element type
-      if (m_observable.getMasterObservable() instanceof ViewerObservableInfo) {
-        Class<?> elementType =
-            AbstractViewerInputBindingInfo.getViewerInutElementType(
-                m_observable.getMasterObservable(),
-                m_provider);
-        if (elementType == null) {
-          calculateFinish();
-        } else {
-          setClassName(CoreUtils.getClassName(elementType));
-        }
-      } else {
-        calculateFinish();
-      }
-    } else if (m_observable.getDetailBeanClass() == null) {
-      // prepare property
-      Class<?> propertyType = m_observable.getDetailPropertyType();
-      String propertyName = StringUtils.substringBetween(propertyReference, "\"");
-      BeanPropertyBindableInfo bindableProperty =
-          new BeanPropertyBindableInfo(null, null, propertyName, propertyType, propertyName);
-      bindableProperty.setProperties(Collections.<PropertyBindableInfo>emptyList());
-      PropertyAdapter property = new ObservePropertyAdapter(null, bindableProperty);
-      // prepare fake class name
-      String className =
-          "detail("
-              + propertyReference
-              + ", "
-              + ClassUtils.getShortClassName(propertyType)
-              + ".class)";
-      // sets class and property
-      setClassNameAndProperty(className, property, false);
-    } else {
-      // set temporally None strategy for select detail property
-      LoadedPropertiesCheckedStrategy strategy =
-          m_configuration.getLoadedPropertiesCheckedStrategy();
-      m_configuration.setLoadedPropertiesCheckedStrategy(LoadedPropertiesCheckedStrategy.None);
-      // sets class and property
-      setClassNameAndProperties(
-          m_observable.getDetailBeanClass(),
-          null,
-          Lists.newArrayList(propertyReference));
-      // restore strategy
-      m_configuration.setLoadedPropertiesCheckedStrategy(strategy);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Update
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void updateFromObject() throws Exception {
+		String propertyReference = m_observable.getDetailPropertyReference();
+		// sets property reference and type
+		if (propertyReference == null) {
+			// calculate type over viewer input element type
+			if (m_observable.getMasterObservable() instanceof ViewerObservableInfo) {
+				Class<?> elementType =
+						AbstractViewerInputBindingInfo.getViewerInutElementType(
+								m_observable.getMasterObservable(),
+								m_provider);
+				if (elementType == null) {
+					calculateFinish();
+				} else {
+					setClassName(CoreUtils.getClassName(elementType));
+				}
+			} else {
+				calculateFinish();
+			}
+		} else if (m_observable.getDetailBeanClass() == null) {
+			// prepare property
+			Class<?> propertyType = m_observable.getDetailPropertyType();
+			String propertyName = StringUtils.substringBetween(propertyReference, "\"");
+			BeanPropertyBindableInfo bindableProperty =
+					new BeanPropertyBindableInfo(null, null, propertyName, propertyType, propertyName);
+			bindableProperty.setProperties(Collections.<PropertyBindableInfo>emptyList());
+			PropertyAdapter property = new ObservePropertyAdapter(null, bindableProperty);
+			// prepare fake class name
+			String className =
+					"detail("
+							+ propertyReference
+							+ ", "
+							+ ClassUtils.getShortClassName(propertyType)
+							+ ".class)";
+			// sets class and property
+			setClassNameAndProperty(className, property, false);
+		} else {
+			// set temporally None strategy for select detail property
+			LoadedPropertiesCheckedStrategy strategy =
+					m_configuration.getLoadedPropertiesCheckedStrategy();
+			m_configuration.setLoadedPropertiesCheckedStrategy(LoadedPropertiesCheckedStrategy.None);
+			// sets class and property
+			setClassNameAndProperties(
+					m_observable.getDetailBeanClass(),
+					null,
+					Lists.newArrayList(propertyReference));
+			// restore strategy
+			m_configuration.setLoadedPropertiesCheckedStrategy(strategy);
+		}
+	}
 
-  @Override
-  protected void saveToObject(Class<?> choosenClass, List<PropertyAdapter> choosenProperties)
-      throws Exception {
-    if (choosenClass != null) {
-      Object[] checkedElements = m_propertiesViewer.getCheckedElements();
-      ObservePropertyAdapter adapter = (ObservePropertyAdapter) checkedElements[0];
-      m_observable.setDetailPropertyType(adapter.getType());
-      m_observable.setDetailPropertyReference(choosenClass, adapter.getProperty().getReference());
-    }
-  }
+	@Override
+	protected void saveToObject(Class<?> choosenClass, List<PropertyAdapter> choosenProperties)
+			throws Exception {
+		if (choosenClass != null) {
+			Object[] checkedElements = m_propertiesViewer.getCheckedElements();
+			ObservePropertyAdapter adapter = (ObservePropertyAdapter) checkedElements[0];
+			m_observable.setDetailPropertyType(adapter.getType());
+			m_observable.setDetailPropertyReference(choosenClass, adapter.getProperty().getReference());
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/contentproviders/SimpleClassUiContentProvider.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/contentproviders/SimpleClassUiContentProvider.java
index 9113bd488..142483d60 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/contentproviders/SimpleClassUiContentProvider.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/contentproviders/SimpleClassUiContentProvider.java
@@ -21,31 +21,31 @@
  * @coverage bindings.rcp.ui
  */
 public final class SimpleClassUiContentProvider extends ChooseClassUiContentProvider {
-  private final SimpleClassObjectInfo m_object;
+	private final SimpleClassObjectInfo m_object;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SimpleClassUiContentProvider(ChooseClassConfiguration configuration,
-      SimpleClassObjectInfo object) {
-    super(configuration);
-    m_object = object;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SimpleClassUiContentProvider(ChooseClassConfiguration configuration,
+			SimpleClassObjectInfo object) {
+		super(configuration);
+		m_object = object;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Update
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void updateFromObject() throws Exception {
-    setClassName(m_object.getClassName());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Update
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void updateFromObject() throws Exception {
+		setClassName(m_object.getClassName());
+	}
 
-  @Override
-  public void saveToObject() throws Exception {
-    m_object.setClassName(getClassName());
-  }
+	@Override
+	public void saveToObject() throws Exception {
+		m_object.setClassName(getClassName());
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/contentproviders/SwtDelayUiContentProvider.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/contentproviders/SwtDelayUiContentProvider.java
index aa9d73c7d..7c4ec5129 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/contentproviders/SwtDelayUiContentProvider.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/contentproviders/SwtDelayUiContentProvider.java
@@ -23,44 +23,44 @@
  * @coverage bindings.rcp.ui
  */
 public final class SwtDelayUiContentProvider extends DialogFieldUiContentProvider {
-  private final IDelayValueProvider m_delayValueProvider;
-  private final SpinnerDialogField m_dialogField;
+	private final IDelayValueProvider m_delayValueProvider;
+	private final SpinnerDialogField m_dialogField;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SwtDelayUiContentProvider(IDelayValueProvider delayValueProvider, String name) {
-    m_delayValueProvider = delayValueProvider;
-    m_dialogField = new SpinnerDialogField();
-    m_dialogField.setMinimum(0);
-    m_dialogField.setMaximum(Integer.MAX_VALUE);
-    m_dialogField.setLabelText(name);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SwtDelayUiContentProvider(IDelayValueProvider delayValueProvider, String name) {
+		m_delayValueProvider = delayValueProvider;
+		m_dialogField = new SpinnerDialogField();
+		m_dialogField.setMinimum(0);
+		m_dialogField.setMaximum(Integer.MAX_VALUE);
+		m_dialogField.setLabelText(name);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AbstractUIContentProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public DialogField getDialogField() {
-    return m_dialogField;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AbstractUIContentProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public DialogField getDialogField() {
+		return m_dialogField;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Update
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void updateFromObject() {
-    m_dialogField.setSelection(m_delayValueProvider.getDelayValue());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Update
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void updateFromObject() {
+		m_dialogField.setSelection(m_delayValueProvider.getDelayValue());
+	}
 
-  @Override
-  public void saveToObject() {
-    m_delayValueProvider.setDelayValue(m_dialogField.getSelection());
-  }
+	@Override
+	public void saveToObject() {
+		m_delayValueProvider.setDelayValue(m_dialogField.getSelection());
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/contentproviders/SwtTextEventsUiContentProvider.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/contentproviders/SwtTextEventsUiContentProvider.java
index 47407880e..11881b720 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/contentproviders/SwtTextEventsUiContentProvider.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/contentproviders/SwtTextEventsUiContentProvider.java
@@ -36,95 +36,95 @@
  * @coverage bindings.rcp.ui
  */
 public final class SwtTextEventsUiContentProvider extends DialogFieldUiContentProvider {
-  private final TextSwtObservableInfo m_observable;
-  private final CheckedListDialogField m_dialogField;
+	private final TextSwtObservableInfo m_observable;
+	private final CheckedListDialogField m_dialogField;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SwtTextEventsUiContentProvider(TextSwtObservableInfo observable) {
-    m_observable = observable;
-    m_dialogField = new CheckedListDialogField(null, null, new LabelProvider()) {
-      @Override
-      public int getNumberOfControls() {
-        return 2;
-      }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SwtTextEventsUiContentProvider(TextSwtObservableInfo observable) {
+		m_observable = observable;
+		m_dialogField = new CheckedListDialogField(null, null, new LabelProvider()) {
+			@Override
+			public int getNumberOfControls() {
+				return 2;
+			}
 
-      @Override
-      public Control[] doFillIntoGrid(Composite parent, int columns) {
-        assertEnoughColumns(columns);
-        //
-        Label label = getLabelControl(parent);
-        label.setLayoutData(gridDataForLabel(1));
-        //
-        Control list = getListControl(parent);
-        GridDataFactory.create(list).fillH().grabH().spanH(columns - 1);
-        //
-        return new Control[]{label, list};
-      }
-    };
-    m_dialogField.setLabelText(Messages.SwtTextEventsUiContentProvider_eventsLabel);
-    m_dialogField.addElements(Arrays.asList(TextSwtObservableInfo.TEXT_EVENTS));
-  }
+			@Override
+			public Control[] doFillIntoGrid(Composite parent, int columns) {
+				assertEnoughColumns(columns);
+				//
+				Label label = getLabelControl(parent);
+				label.setLayoutData(gridDataForLabel(1));
+				//
+				Control list = getListControl(parent);
+				GridDataFactory.create(list).fillH().grabH().spanH(columns - 1);
+				//
+				return new Control[]{label, list};
+			}
+		};
+		m_dialogField.setLabelText(Messages.SwtTextEventsUiContentProvider_eventsLabel);
+		m_dialogField.addElements(Arrays.asList(TextSwtObservableInfo.TEXT_EVENTS));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AbstractUIContentProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void createContent(Composite parent, int columns) {
-    super.createContent(parent, columns);
-    CheckboxTableViewer tableViewer = (CheckboxTableViewer) m_dialogField.getTableViewer();
-    tableViewer.addCheckStateListener(new ICheckStateListener() {
-      @Override
-      public void checkStateChanged(CheckStateChangedEvent event) {
-        calculateBetterValues(event);
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AbstractUIContentProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void createContent(Composite parent, int columns) {
+		super.createContent(parent, columns);
+		CheckboxTableViewer tableViewer = (CheckboxTableViewer) m_dialogField.getTableViewer();
+		tableViewer.addCheckStateListener(new ICheckStateListener() {
+			@Override
+			public void checkStateChanged(CheckStateChangedEvent event) {
+				calculateBetterValues(event);
+			}
+		});
+	}
 
-  @Override
-  public DialogField getDialogField() {
-    return m_dialogField;
-  }
+	@Override
+	public DialogField getDialogField() {
+		return m_dialogField;
+	}
 
-  private void calculateBetterValues(CheckStateChangedEvent event) {
-    if (event.getChecked()) {
-      Object checkedElement = event.getElement();
-      ICheckable checkable = event.getCheckable();
-      //
-      if ("SWT.NONE".equals(checkedElement)) {
-        for (Object element : m_dialogField.getCheckedElements()) {
-          if (element != checkedElement) {
-            checkable.setChecked(element, false);
-          }
-        }
-      } else {
-        for (Object element : m_dialogField.getCheckedElements()) {
-          if ("SWT.NONE".equals(element)) {
-            checkable.setChecked(element, false);
-            break;
-          }
-        }
-      }
-    }
-  }
+	private void calculateBetterValues(CheckStateChangedEvent event) {
+		if (event.getChecked()) {
+			Object checkedElement = event.getElement();
+			ICheckable checkable = event.getCheckable();
+			//
+			if ("SWT.NONE".equals(checkedElement)) {
+				for (Object element : m_dialogField.getCheckedElements()) {
+					if (element != checkedElement) {
+						checkable.setChecked(element, false);
+					}
+				}
+			} else {
+				for (Object element : m_dialogField.getCheckedElements()) {
+					if ("SWT.NONE".equals(element)) {
+						checkable.setChecked(element, false);
+						break;
+					}
+				}
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Update
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void updateFromObject() {
-    m_dialogField.setCheckedElements(m_observable.getUpdateEvents());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Update
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void updateFromObject() {
+		m_dialogField.setCheckedElements(m_observable.getUpdateEvents());
+	}
 
-  @Override
-  public void saveToObject() {
-    m_observable.setUpdateEvents(CoreUtils.<String>cast(m_dialogField.getCheckedElements()));
-  }
+	@Override
+	public void saveToObject() {
+		m_observable.setUpdateEvents(CoreUtils.<String>cast(m_dialogField.getCheckedElements()));
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/contentproviders/TreeContentLabelProvidersUiContentProvider.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/contentproviders/TreeContentLabelProvidersUiContentProvider.java
index 4bf7f594f..2a722356f 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/contentproviders/TreeContentLabelProvidersUiContentProvider.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/contentproviders/TreeContentLabelProvidersUiContentProvider.java
@@ -50,432 +50,432 @@
  * @coverage bindings.rcp.ui
  */
 public final class TreeContentLabelProvidersUiContentProvider implements IUiContentProvider {
-  private static final String PARENT_GROUP_NAME =
-      Messages.TreeContentLabelProvidersUiContentProvider_parentGroup;
-  private static final String CHILDREN_GROUP_NAME =
-      Messages.TreeContentLabelProvidersUiContentProvider_childrenGroup;
-  private static final String HAS_CHILDREN_GROUP_NAME =
-      Messages.TreeContentLabelProvidersUiContentProvider_hasChildrenGroup;
-  private static final String TEXT_GROUP_NAME =
-      Messages.TreeContentLabelProvidersUiContentProvider_textGroup;
-  private static final String IMAGE_GROUP_NAME =
-      Messages.TreeContentLabelProvidersUiContentProvider_imageGroup;
-  //
-  private final TreeViewerInputBindingInfo m_binding;
-  private CheckboxTreeViewer m_propertiesViewer;
-  private ICompleteListener m_listener;
-  private String m_errorMessage;
+	private static final String PARENT_GROUP_NAME =
+			Messages.TreeContentLabelProvidersUiContentProvider_parentGroup;
+	private static final String CHILDREN_GROUP_NAME =
+			Messages.TreeContentLabelProvidersUiContentProvider_childrenGroup;
+	private static final String HAS_CHILDREN_GROUP_NAME =
+			Messages.TreeContentLabelProvidersUiContentProvider_hasChildrenGroup;
+	private static final String TEXT_GROUP_NAME =
+			Messages.TreeContentLabelProvidersUiContentProvider_textGroup;
+	private static final String IMAGE_GROUP_NAME =
+			Messages.TreeContentLabelProvidersUiContentProvider_imageGroup;
+	//
+	private final TreeViewerInputBindingInfo m_binding;
+	private CheckboxTreeViewer m_propertiesViewer;
+	private ICompleteListener m_listener;
+	private String m_errorMessage;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public TreeContentLabelProvidersUiContentProvider(TreeViewerInputBindingInfo binding) {
-    m_binding = binding;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public TreeContentLabelProvidersUiContentProvider(TreeViewerInputBindingInfo binding) {
+		m_binding = binding;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Complete
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void setCompleteListener(ICompleteListener listener) {
-    m_listener = listener;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Complete
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void setCompleteListener(ICompleteListener listener) {
+		m_listener = listener;
+	}
 
-  @Override
-  public String getErrorMessage() {
-    return m_errorMessage;
-  }
+	@Override
+	public String getErrorMessage() {
+		return m_errorMessage;
+	}
 
-  private void setErrorMessage(String message) {
-    m_errorMessage = message;
-    m_listener.calculateFinish();
-  }
+	private void setErrorMessage(String message) {
+		m_errorMessage = message;
+		m_listener.calculateFinish();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public int getNumberOfControls() {
-    return 2;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public int getNumberOfControls() {
+		return 2;
+	}
 
-  @Override
-  public void createContent(Composite parent, int columns) {
-    // properties title
-    Label title = new Label(parent, SWT.NONE);
-    title.setText(Messages.TreeContentLabelProvidersUiContentProvider_propertiesLabel);
-    // properties viewer
-    m_propertiesViewer = new CheckboxTreeViewer(parent, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
-    GridDataFactory.create(m_propertiesViewer.getControl()).fill().grab().spanH(columns - 1);
-    m_propertiesViewer.setContentProvider(new TreePropertiesContentProvider());
-    m_propertiesViewer.setLabelProvider(new TreePropertiesLabelProvider());
-    m_propertiesViewer.addCheckStateListener(new PropertiesCheckStateListener());
-  }
+	@Override
+	public void createContent(Composite parent, int columns) {
+		// properties title
+		Label title = new Label(parent, SWT.NONE);
+		title.setText(Messages.TreeContentLabelProvidersUiContentProvider_propertiesLabel);
+		// properties viewer
+		m_propertiesViewer = new CheckboxTreeViewer(parent, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
+		GridDataFactory.create(m_propertiesViewer.getControl()).fill().grab().spanH(columns - 1);
+		m_propertiesViewer.setContentProvider(new TreePropertiesContentProvider());
+		m_propertiesViewer.setLabelProvider(new TreePropertiesLabelProvider());
+		m_propertiesViewer.addCheckStateListener(new PropertiesCheckStateListener());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Handle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void calculateFinish() {
-    if (!checkChoosenElement(CHILDREN_GROUP_NAME)) {
-      setErrorMessage(Messages.TreeContentLabelProvidersUiContentProvider_errorMessage1);
-    } else if (!checkChoosenElement(TEXT_GROUP_NAME)) {
-      setErrorMessage(Messages.TreeContentLabelProvidersUiContentProvider_errorMessage2);
-    } else {
-      setErrorMessage(null);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Handle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void calculateFinish() {
+		if (!checkChoosenElement(CHILDREN_GROUP_NAME)) {
+			setErrorMessage(Messages.TreeContentLabelProvidersUiContentProvider_errorMessage1);
+		} else if (!checkChoosenElement(TEXT_GROUP_NAME)) {
+			setErrorMessage(Messages.TreeContentLabelProvidersUiContentProvider_errorMessage2);
+		} else {
+			setErrorMessage(null);
+		}
+	}
 
-  /**
-   * @return <code>true</code> if given group <code>name</name> is checked.
-   */
-  private boolean checkChoosenElement(String name) {
-    for (Object element : m_propertiesViewer.getCheckedElements()) {
-      if (element instanceof PropertiesGroup) {
-        PropertiesGroup group = (PropertiesGroup) element;
-        if (name.equals(group.name)) {
-          return true;
-        }
-      }
-    }
-    return false;
-  }
+	/**
+	 * @return <code>true</code> if given group <code>name</name> is checked.
+	 */
+	private boolean checkChoosenElement(String name) {
+		for (Object element : m_propertiesViewer.getCheckedElements()) {
+			if (element instanceof PropertiesGroup) {
+				PropertiesGroup group = (PropertiesGroup) element;
+				if (name.equals(group.name)) {
+					return true;
+				}
+			}
+		}
+		return false;
+	}
 
-  /**
-   * Sets {@link Class} for choose properties.
-   */
-  public void setElementType(Class<?> elementType) throws Exception {
-    try {
-      // prepare properties
-      List<PropertyDescriptor> descriptors = BeanSupport.getPropertyDescriptors(elementType);
-      //
-      GlobalFactoryHelper.filterElementPropertiesForViewerInput(
-          m_binding.getInputObservable(),
-          elementType,
-          descriptors);
-      // prepare groups
-      List<PropertiesGroup> groups = Lists.newArrayList();
-      groups.add(new PropertiesGroup(PARENT_GROUP_NAME, filterProperties(descriptors, Object.class)));
-      groups.add(new PropertiesGroup(CHILDREN_GROUP_NAME, filterCollectionProperties(descriptors)));
-      groups.add(new PropertiesGroup(HAS_CHILDREN_GROUP_NAME, filterBooleanProperties(descriptors)));
-      groups.add(new PropertiesGroup(TEXT_GROUP_NAME, filterProperties(descriptors, String.class)));
-      groups.add(new PropertiesGroup(IMAGE_GROUP_NAME, filterProperties(descriptors, Image.class)));
-      // fill viewer
-      m_propertiesViewer.setInput(groups);
-      m_propertiesViewer.setCheckedElements(ArrayUtils.EMPTY_OBJECT_ARRAY);
-      m_propertiesViewer.expandAll();
-    } finally {
-      calculateFinish();
-    }
-  }
+	/**
+	 * Sets {@link Class} for choose properties.
+	 */
+	public void setElementType(Class<?> elementType) throws Exception {
+		try {
+			// prepare properties
+			List<PropertyDescriptor> descriptors = BeanSupport.getPropertyDescriptors(elementType);
+			//
+			GlobalFactoryHelper.filterElementPropertiesForViewerInput(
+					m_binding.getInputObservable(),
+					elementType,
+					descriptors);
+			// prepare groups
+			List<PropertiesGroup> groups = Lists.newArrayList();
+			groups.add(new PropertiesGroup(PARENT_GROUP_NAME, filterProperties(descriptors, Object.class)));
+			groups.add(new PropertiesGroup(CHILDREN_GROUP_NAME, filterCollectionProperties(descriptors)));
+			groups.add(new PropertiesGroup(HAS_CHILDREN_GROUP_NAME, filterBooleanProperties(descriptors)));
+			groups.add(new PropertiesGroup(TEXT_GROUP_NAME, filterProperties(descriptors, String.class)));
+			groups.add(new PropertiesGroup(IMAGE_GROUP_NAME, filterProperties(descriptors, Image.class)));
+			// fill viewer
+			m_propertiesViewer.setInput(groups);
+			m_propertiesViewer.setCheckedElements(ArrayUtils.EMPTY_OBJECT_ARRAY);
+			m_propertiesViewer.expandAll();
+		} finally {
+			calculateFinish();
+		}
+	}
 
-  /**
-   * Helper method that filter given <code>properties</code> include only {@link Class}
-   * <code>testType</code> properties.
-   */
-  private static List<PropertyDescriptor> filterProperties(List<PropertyDescriptor> properties,
-      Class<?> testType) {
-    List<PropertyDescriptor> newProperties = Lists.newArrayList();
-    for (PropertyDescriptor property : properties) {
-      Class<?> type = property.getPropertyType();
-      if (type != null && (testType == type || testType.isAssignableFrom(type))) {
-        newProperties.add(property);
-      }
-    }
-    return newProperties;
-  }
+	/**
+	 * Helper method that filter given <code>properties</code> include only {@link Class}
+	 * <code>testType</code> properties.
+	 */
+	private static List<PropertyDescriptor> filterProperties(List<PropertyDescriptor> properties,
+			Class<?> testType) {
+		List<PropertyDescriptor> newProperties = Lists.newArrayList();
+		for (PropertyDescriptor property : properties) {
+			Class<?> type = property.getPropertyType();
+			if (type != null && (testType == type || testType.isAssignableFrom(type))) {
+				newProperties.add(property);
+			}
+		}
+		return newProperties;
+	}
 
-  /**
-   * Helper method that filter given <code>properties</code> include only boolean properties.
-   */
-  private static List<PropertyDescriptor> filterBooleanProperties(List<PropertyDescriptor> properties) {
-    List<PropertyDescriptor> newProperties = Lists.newArrayList();
-    for (PropertyDescriptor property : properties) {
-      Class<?> type = property.getPropertyType();
-      if (type == boolean.class || type == Boolean.class) {
-        newProperties.add(property);
-      }
-    }
-    return newProperties;
-  }
+	/**
+	 * Helper method that filter given <code>properties</code> include only boolean properties.
+	 */
+	private static List<PropertyDescriptor> filterBooleanProperties(List<PropertyDescriptor> properties) {
+		List<PropertyDescriptor> newProperties = Lists.newArrayList();
+		for (PropertyDescriptor property : properties) {
+			Class<?> type = property.getPropertyType();
+			if (type == boolean.class || type == Boolean.class) {
+				newProperties.add(property);
+			}
+		}
+		return newProperties;
+	}
 
-  /**
-   * Helper method that filter given <code>properties</code> include only {@link Collection} and
-   * array properties.
-   */
-  private static List<PropertyDescriptor> filterCollectionProperties(List<PropertyDescriptor> properties) {
-    List<PropertyDescriptor> newProperties = Lists.newArrayList();
-    for (PropertyDescriptor property : properties) {
-      Class<?> type = property.getPropertyType();
-      if (type != null && (type.isArray() || Collection.class.isAssignableFrom(type))) {
-        newProperties.add(property);
-      }
-    }
-    return newProperties;
-  }
+	/**
+	 * Helper method that filter given <code>properties</code> include only {@link Collection} and
+	 * array properties.
+	 */
+	private static List<PropertyDescriptor> filterCollectionProperties(List<PropertyDescriptor> properties) {
+		List<PropertyDescriptor> newProperties = Lists.newArrayList();
+		for (PropertyDescriptor property : properties) {
+			Class<?> type = property.getPropertyType();
+			if (type != null && (type.isArray() || Collection.class.isAssignableFrom(type))) {
+				newProperties.add(property);
+			}
+		}
+		return newProperties;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Update
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void updateFromObject() throws Exception {
-    if (m_binding.isDesignerMode()) {
-      Class<?> elementType = m_binding.getElementType();
-      if (elementType != null) {
-        // set element type
-        setElementType(elementType);
-        // prepare checked groups
-        List<Object> checkedObjects = Lists.newArrayList();
-        // check parent/children/has children
-        TreeBeanAdvisorInfo advisor =
-            (TreeBeanAdvisorInfo) m_binding.getContentProvider().getAdvisorInfo();
-        extractProperties(checkedObjects, PARENT_GROUP_NAME, advisor.getParentProperty());
-        extractProperties(checkedObjects, CHILDREN_GROUP_NAME, advisor.getChildrenProperty());
-        extractProperties(checkedObjects, HAS_CHILDREN_GROUP_NAME, advisor.getHasChildrenProperty());
-        // check text/image
-        TreeObservableLabelProviderInfo labelProvider =
-            (TreeObservableLabelProviderInfo) m_binding.getLabelProvider();
-        extractProperties(checkedObjects, TEXT_GROUP_NAME, labelProvider.getTextProperty());
-        extractProperties(checkedObjects, IMAGE_GROUP_NAME, labelProvider.getImageProperty());
-        // apply checked
-        if (!checkedObjects.isEmpty()) {
-          m_propertiesViewer.setCheckedElements(checkedObjects.toArray());
-        }
-      }
-    }
-    //
-    calculateFinish();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Update
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void updateFromObject() throws Exception {
+		if (m_binding.isDesignerMode()) {
+			Class<?> elementType = m_binding.getElementType();
+			if (elementType != null) {
+				// set element type
+				setElementType(elementType);
+				// prepare checked groups
+				List<Object> checkedObjects = Lists.newArrayList();
+				// check parent/children/has children
+				TreeBeanAdvisorInfo advisor =
+						(TreeBeanAdvisorInfo) m_binding.getContentProvider().getAdvisorInfo();
+				extractProperties(checkedObjects, PARENT_GROUP_NAME, advisor.getParentProperty());
+				extractProperties(checkedObjects, CHILDREN_GROUP_NAME, advisor.getChildrenProperty());
+				extractProperties(checkedObjects, HAS_CHILDREN_GROUP_NAME, advisor.getHasChildrenProperty());
+				// check text/image
+				TreeObservableLabelProviderInfo labelProvider =
+						(TreeObservableLabelProviderInfo) m_binding.getLabelProvider();
+				extractProperties(checkedObjects, TEXT_GROUP_NAME, labelProvider.getTextProperty());
+				extractProperties(checkedObjects, IMAGE_GROUP_NAME, labelProvider.getImageProperty());
+				// apply checked
+				if (!checkedObjects.isEmpty()) {
+					m_propertiesViewer.setCheckedElements(checkedObjects.toArray());
+				}
+			}
+		}
+		//
+		calculateFinish();
+	}
 
-  /**
-   * Find and fill <code>objects</code>, properties viewer elements ({@link PropertiesGroup} and
-   * {@link TreePropertyWrapper}) that association with given <code>property</code>.
-   */
-  @SuppressWarnings("unchecked")
-  private void extractProperties(List<Object> objects, String groupName, String property) {
-    if (property != null) {
-      List<PropertiesGroup> input = (List<PropertiesGroup>) m_propertiesViewer.getInput();
-      for (PropertiesGroup group : input) {
-        if (groupName.equals(group.name)) {
-          for (TreePropertyWrapper wrapper : group.properties) {
-            if (property.equals(wrapper.descriptor.getName())) {
-              objects.add(group);
-              objects.add(wrapper);
-              return;
-            }
-          }
-          return;
-        }
-      }
-    }
-  }
+	/**
+	 * Find and fill <code>objects</code>, properties viewer elements ({@link PropertiesGroup} and
+	 * {@link TreePropertyWrapper}) that association with given <code>property</code>.
+	 */
+	@SuppressWarnings("unchecked")
+	private void extractProperties(List<Object> objects, String groupName, String property) {
+		if (property != null) {
+			List<PropertiesGroup> input = (List<PropertiesGroup>) m_propertiesViewer.getInput();
+			for (PropertiesGroup group : input) {
+				if (groupName.equals(group.name)) {
+					for (TreePropertyWrapper wrapper : group.properties) {
+						if (property.equals(wrapper.descriptor.getName())) {
+							objects.add(group);
+							objects.add(wrapper);
+							return;
+						}
+					}
+					return;
+				}
+			}
+		}
+	}
 
-  @Override
-  public void saveToObject() throws Exception {
-    // prepare content provider
-    ObservableCollectionTreeContentProviderInfo contentProvider = m_binding.getContentProvider();
-    // prepare factory
-    BeansObservableFactoryInfo factory =
-        (BeansObservableFactoryInfo) contentProvider.getFactoryInfo();
-    // prepare advisor
-    TreeBeanAdvisorInfo advisor = (TreeBeanAdvisorInfo) contentProvider.getAdvisorInfo();
-    // prepare label provider
-    TreeObservableLabelProviderInfo labelProvider =
-        (TreeObservableLabelProviderInfo) m_binding.getLabelProvider();
-    // extract checked properties
-    for (Object element : m_propertiesViewer.getCheckedElements()) {
-      if (element instanceof TreePropertyWrapper) {
-        TreePropertyWrapper wrapper = (TreePropertyWrapper) element;
-        String propertyName = wrapper.descriptor.getName();
-        String groupName = wrapper.parent.name;
-        // check group
-        if (PARENT_GROUP_NAME.equals(groupName)) {
-          advisor.setParentProperty(propertyName);
-        } else if (CHILDREN_GROUP_NAME.equals(groupName)) {
-          advisor.setChildrenProperty(propertyName);
-          factory.setPropertyName(propertyName);
-        } else if (HAS_CHILDREN_GROUP_NAME.equals(groupName)) {
-          advisor.setHasChildrenProperty(propertyName);
-        } else if (TEXT_GROUP_NAME.equals(groupName)) {
-          labelProvider.setTextProperty(propertyName);
-        } else if (IMAGE_GROUP_NAME.equals(groupName)) {
-          labelProvider.setImageProperty(propertyName);
-        }
-      }
-    }
-  }
+	@Override
+	public void saveToObject() throws Exception {
+		// prepare content provider
+		ObservableCollectionTreeContentProviderInfo contentProvider = m_binding.getContentProvider();
+		// prepare factory
+		BeansObservableFactoryInfo factory =
+				(BeansObservableFactoryInfo) contentProvider.getFactoryInfo();
+		// prepare advisor
+		TreeBeanAdvisorInfo advisor = (TreeBeanAdvisorInfo) contentProvider.getAdvisorInfo();
+		// prepare label provider
+		TreeObservableLabelProviderInfo labelProvider =
+				(TreeObservableLabelProviderInfo) m_binding.getLabelProvider();
+		// extract checked properties
+		for (Object element : m_propertiesViewer.getCheckedElements()) {
+			if (element instanceof TreePropertyWrapper) {
+				TreePropertyWrapper wrapper = (TreePropertyWrapper) element;
+				String propertyName = wrapper.descriptor.getName();
+				String groupName = wrapper.parent.name;
+				// check group
+				if (PARENT_GROUP_NAME.equals(groupName)) {
+					advisor.setParentProperty(propertyName);
+				} else if (CHILDREN_GROUP_NAME.equals(groupName)) {
+					advisor.setChildrenProperty(propertyName);
+					factory.setPropertyName(propertyName);
+				} else if (HAS_CHILDREN_GROUP_NAME.equals(groupName)) {
+					advisor.setHasChildrenProperty(propertyName);
+				} else if (TEXT_GROUP_NAME.equals(groupName)) {
+					labelProvider.setTextProperty(propertyName);
+				} else if (IMAGE_GROUP_NAME.equals(groupName)) {
+					labelProvider.setImageProperty(propertyName);
+				}
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Inner model
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Group.
-   */
-  private static class PropertiesGroup {
-    public String name;
-    public TreePropertyWrapper[] properties;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Inner model
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Group.
+	 */
+	private static class PropertiesGroup {
+		public String name;
+		public TreePropertyWrapper[] properties;
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public PropertiesGroup(String name, List<PropertyDescriptor> descriptors) {
-      this.name = name;
-      int size = descriptors.size();
-      properties = new TreePropertyWrapper[size];
-      for (int i = 0; i < size; i++) {
-        properties[i] = new TreePropertyWrapper(this, descriptors.get(i));
-      }
-    }
-  }
-  /**
-   * Property.
-   */
-  private static class TreePropertyWrapper {
-    public PropertiesGroup parent;
-    public PropertyDescriptor descriptor;
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public PropertiesGroup(String name, List<PropertyDescriptor> descriptors) {
+			this.name = name;
+			int size = descriptors.size();
+			properties = new TreePropertyWrapper[size];
+			for (int i = 0; i < size; i++) {
+				properties[i] = new TreePropertyWrapper(this, descriptors.get(i));
+			}
+		}
+	}
+	/**
+	 * Property.
+	 */
+	private static class TreePropertyWrapper {
+		public PropertiesGroup parent;
+		public PropertyDescriptor descriptor;
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public TreePropertyWrapper(PropertiesGroup parent, PropertyDescriptor descriptor) {
-      this.parent = parent;
-      this.descriptor = descriptor;
-    }
-  }
-  /**
-   * Tree content provider.
-   */
-  private static class TreePropertiesContentProvider implements ITreeContentProvider {
-    @Override
-    public Object[] getElements(Object input) {
-      List<?> list = (List<?>) input;
-      return list.toArray();
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public TreePropertyWrapper(PropertiesGroup parent, PropertyDescriptor descriptor) {
+			this.parent = parent;
+			this.descriptor = descriptor;
+		}
+	}
+	/**
+	 * Tree content provider.
+	 */
+	private static class TreePropertiesContentProvider implements ITreeContentProvider {
+		@Override
+		public Object[] getElements(Object input) {
+			List<?> list = (List<?>) input;
+			return list.toArray();
+		}
 
-    @Override
-    public Object[] getChildren(Object element) {
-      if (element instanceof PropertiesGroup) {
-        PropertiesGroup group = (PropertiesGroup) element;
-        return group.properties;
-      }
-      return null;
-    }
+		@Override
+		public Object[] getChildren(Object element) {
+			if (element instanceof PropertiesGroup) {
+				PropertiesGroup group = (PropertiesGroup) element;
+				return group.properties;
+			}
+			return null;
+		}
 
-    @Override
-    public boolean hasChildren(Object element) {
-      if (element instanceof PropertiesGroup) {
-        PropertiesGroup group = (PropertiesGroup) element;
-        return group.properties.length > 0;
-      }
-      return false;
-    }
+		@Override
+		public boolean hasChildren(Object element) {
+			if (element instanceof PropertiesGroup) {
+				PropertiesGroup group = (PropertiesGroup) element;
+				return group.properties.length > 0;
+			}
+			return false;
+		}
 
-    @Override
-    public Object getParent(Object element) {
-      if (element instanceof TreePropertyWrapper) {
-        TreePropertyWrapper wrapper = (TreePropertyWrapper) element;
-        return wrapper.parent;
-      }
-      return null;
-    }
+		@Override
+		public Object getParent(Object element) {
+			if (element instanceof TreePropertyWrapper) {
+				TreePropertyWrapper wrapper = (TreePropertyWrapper) element;
+				return wrapper.parent;
+			}
+			return null;
+		}
 
-    @Override
-    public void dispose() {
-    }
+		@Override
+		public void dispose() {
+		}
 
-    @Override
-    public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
-    }
-  }
-  /**
-   * Tree label provider.
-   */
-  private static class TreePropertiesLabelProvider extends LabelProvider {
-    @Override
-    public String getText(Object element) {
-      if (element instanceof PropertiesGroup) {
-        PropertiesGroup group = (PropertiesGroup) element;
-        return group.name;
-      }
-      //
-      TreePropertyWrapper wrapper = (TreePropertyWrapper) element;
-      return wrapper.descriptor.getName();
-    }
+		@Override
+		public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+		}
+	}
+	/**
+	 * Tree label provider.
+	 */
+	private static class TreePropertiesLabelProvider extends LabelProvider {
+		@Override
+		public String getText(Object element) {
+			if (element instanceof PropertiesGroup) {
+				PropertiesGroup group = (PropertiesGroup) element;
+				return group.name;
+			}
+			//
+			TreePropertyWrapper wrapper = (TreePropertyWrapper) element;
+			return wrapper.descriptor.getName();
+		}
 
-    @Override
-    public Image getImage(Object element) {
-      if (element instanceof PropertiesGroup) {
-        return TypeImageProvider.OBJECT_IMAGE;
-      }
-      //
-      TreePropertyWrapper wrapper = (TreePropertyWrapper) element;
-      return TypeImageProvider.getImage(wrapper.descriptor.getPropertyType());
-    }
-  }
-  /**
-   * {@link ICheckStateListener} listener that supported only one checked element into one group.
-   */
-  private class PropertiesCheckStateListener implements ICheckStateListener {
-    @Override
-    public void checkStateChanged(CheckStateChangedEvent event) {
-      CheckboxTreeViewer viewer = (CheckboxTreeViewer) event.getCheckable();
-      Object element = event.getElement();
-      //
-      if (event.getChecked()) {
-        if (element instanceof PropertiesGroup) {
-          PropertiesGroup group = (PropertiesGroup) element;
-          if (ArrayUtils.isEmpty(group.properties)) {
-            // clear checked for empty group
-            viewer.setChecked(element, false);
-          } else {
-            // checked fist element if checked group
-            viewer.setChecked(group.properties[0], true);
-          }
-        } else {
-          TreePropertyWrapper wrapper = (TreePropertyWrapper) element;
-          // ensure checked group
-          if (!viewer.getChecked(wrapper.parent)) {
-            viewer.setChecked(wrapper.parent, true);
-          }
-          // clear checked with other elements
-          for (TreePropertyWrapper property : wrapper.parent.properties) {
-            if (property != wrapper && viewer.getChecked(property)) {
-              viewer.setChecked(property, false);
-            }
-          }
-        }
-      } else {
-        if (element instanceof PropertiesGroup) {
-          // clear checked elements if group unchecked
-          PropertiesGroup group = (PropertiesGroup) element;
-          for (TreePropertyWrapper property : group.properties) {
-            if (viewer.getChecked(property)) {
-              viewer.setChecked(property, false);
-            }
-          }
-        } else {
-          // clear checked group if element unchecked
-          TreePropertyWrapper wrapper = (TreePropertyWrapper) element;
-          viewer.setChecked(wrapper.parent, false);
-        }
-      }
-      //
-      calculateFinish();
-    }
-  }
+		@Override
+		public Image getImage(Object element) {
+			if (element instanceof PropertiesGroup) {
+				return TypeImageProvider.OBJECT_IMAGE;
+			}
+			//
+			TreePropertyWrapper wrapper = (TreePropertyWrapper) element;
+			return TypeImageProvider.getImage(wrapper.descriptor.getPropertyType());
+		}
+	}
+	/**
+	 * {@link ICheckStateListener} listener that supported only one checked element into one group.
+	 */
+	private class PropertiesCheckStateListener implements ICheckStateListener {
+		@Override
+		public void checkStateChanged(CheckStateChangedEvent event) {
+			CheckboxTreeViewer viewer = (CheckboxTreeViewer) event.getCheckable();
+			Object element = event.getElement();
+			//
+			if (event.getChecked()) {
+				if (element instanceof PropertiesGroup) {
+					PropertiesGroup group = (PropertiesGroup) element;
+					if (ArrayUtils.isEmpty(group.properties)) {
+						// clear checked for empty group
+						viewer.setChecked(element, false);
+					} else {
+						// checked fist element if checked group
+						viewer.setChecked(group.properties[0], true);
+					}
+				} else {
+					TreePropertyWrapper wrapper = (TreePropertyWrapper) element;
+					// ensure checked group
+					if (!viewer.getChecked(wrapper.parent)) {
+						viewer.setChecked(wrapper.parent, true);
+					}
+					// clear checked with other elements
+					for (TreePropertyWrapper property : wrapper.parent.properties) {
+						if (property != wrapper && viewer.getChecked(property)) {
+							viewer.setChecked(property, false);
+						}
+					}
+				}
+			} else {
+				if (element instanceof PropertiesGroup) {
+					// clear checked elements if group unchecked
+					PropertiesGroup group = (PropertiesGroup) element;
+					for (TreePropertyWrapper property : group.properties) {
+						if (viewer.getChecked(property)) {
+							viewer.setChecked(property, false);
+						}
+					}
+				} else {
+					// clear checked group if element unchecked
+					TreePropertyWrapper wrapper = (TreePropertyWrapper) element;
+					viewer.setChecked(wrapper.parent, false);
+				}
+			}
+			//
+			calculateFinish();
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/contentproviders/TreeDetailUiContentProvider.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/contentproviders/TreeDetailUiContentProvider.java
index 65344620d..554d91b2d 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/contentproviders/TreeDetailUiContentProvider.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/contentproviders/TreeDetailUiContentProvider.java
@@ -22,30 +22,30 @@
  * @coverage bindings.rcp.ui
  */
 public final class TreeDetailUiContentProvider extends ChooseClassUiContentProvider {
-  private final DetailBeanObservableInfo m_observable;
+	private final DetailBeanObservableInfo m_observable;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public TreeDetailUiContentProvider(ChooseClassConfiguration configuration,
-      DetailBeanObservableInfo observable) {
-    super(configuration);
-    m_observable = observable;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public TreeDetailUiContentProvider(ChooseClassConfiguration configuration,
+			DetailBeanObservableInfo observable) {
+		super(configuration);
+		m_observable = observable;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Update
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void updateFromObject() throws Exception {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Update
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void updateFromObject() throws Exception {
+	}
 
-  @Override
-  public void saveToObject() throws Exception {
-    m_observable.setDetailPropertyType(getChoosenClass());
-  }
+	@Override
+	public void saveToObject() throws Exception {
+		m_observable.setDetailPropertyType(getChoosenClass());
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/contentproviders/TreeInputElementUiContentProvider.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/contentproviders/TreeInputElementUiContentProvider.java
index f79ff3150..36e3e235c 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/contentproviders/TreeInputElementUiContentProvider.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/contentproviders/TreeInputElementUiContentProvider.java
@@ -85,613 +85,613 @@
  * @coverage bindings.rcp.ui
  */
 public final class TreeInputElementUiContentProvider implements IUiContentProvider {
-  private static final Image CHECK_IMAGE = Activator.getImage("tab_selection_true.gif");
-  private static final Image UNCHECK_IMAGE = Activator.getImage("tab_selection_false.gif");
-  //
-  private final TreeViewerInputBindingInfo m_binding;
-  private final IPageListener m_pageListener;
-  private final DatabindingsProvider m_provider;
-  private final List<SimpleClassObjectInfo> m_defaultObjects = Lists.newArrayList();
-  private ICompleteListener m_completeListener;
-  private TabFolder m_tabFolder;
-  private final ChooseClassUiContentProvider m_elementTypeDesignerUIProvider;
-  private final JFaceElementTypeUiProvider m_elementTypeJFaceUIProvider;
-  private final ChooseClassUiContentProvider[] m_elementTypeUIProviders;
-  private TreeContentLabelProvidersUiContentProvider m_contentLabelProvidersEditor;
-  private ChooseClassUiContentProvider m_labelProviderJFaceEditor;
-  private UiContentProviderComposite m_designerComposite;
-  private UiContentProviderComposite m_jfaceComposite;
-  private PageListenerWrapper m_designerPageListener;
-  private PageListenerWrapper m_jfacePageListener;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public TreeInputElementUiContentProvider(TreeViewerInputBindingInfo binding,
-      IPageListener listener,
-      DatabindingsProvider provider) throws Exception {
-    m_binding = binding;
-    m_pageListener = listener;
-    m_provider = provider;
-    //
-    m_elementTypeDesignerUIProvider = createDesignerElementTypeUIProvider();
-    m_elementTypeJFaceUIProvider = createJFaceElementTypeUIProvider();
-    //
-    m_elementTypeUIProviders =
-        new ChooseClassUiContentProvider[]{
-            m_elementTypeDesignerUIProvider,
-            m_elementTypeJFaceUIProvider};
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ChooseClassUiContentProvider[] getElementTypeUIProviders() {
-    return m_elementTypeUIProviders;
-  }
-
-  public Class<?> getCurrentElementType() throws Exception {
-    return isDesignerMode()
-        ? m_elementTypeDesignerUIProvider.getChoosenClass()
-        : m_elementTypeJFaceUIProvider.getChoosenClass();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Complete
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void setCompleteListener(ICompleteListener listener) {
-    m_completeListener = listener;
-  }
-
-  @Override
-  public String getErrorMessage() {
-    if (isDesignerMode()) {
-      return m_designerPageListener.getErrorMessage();
-    }
-    return m_jfacePageListener.getErrorMessage();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public int getNumberOfControls() {
-    return 1;
-  }
-
-  @Override
-  public void createContent(Composite parent, int columns) {
-    // create folder
-    m_tabFolder = new TabFolder(parent, SWT.NONE);
-    GridDataFactory.create(m_tabFolder).fill().grab().spanH(columns);
-    // create designer page
-    m_designerPageListener = new PageListenerWrapper(m_pageListener, m_completeListener);
-    //
-    m_designerComposite =
-        new UiContentProviderComposite(m_designerPageListener,
-            createDesignerProviders(),
-            m_tabFolder,
-            SWT.NONE);
-    TabFactory.item(m_tabFolder).text(Messages.TreeInputElementUiContentProvider_designerSupport).image(
-        CHECK_IMAGE).control(m_designerComposite);
-    // create jface page
-    m_jfacePageListener = new PageListenerWrapper(m_pageListener, m_completeListener);
-    //
-    m_jfaceComposite =
-        new UiContentProviderComposite(m_jfacePageListener,
-            createJFaceProviders(),
-            m_tabFolder,
-            SWT.NONE);
-    TabFactory.item(m_tabFolder).text(Messages.TreeInputElementUiContentProvider_jfaceSupport).image(
-        UNCHECK_IMAGE).control(m_jfaceComposite);
-    //
-    m_tabFolder.addSelectionListener(new SelectionAdapter() {
-      @Override
-      public void widgetSelected(SelectionEvent e) {
-        handleTabSelection();
-        calculateFinish();
-      }
-    });
-  }
-
-  /**
-   * Fill Designer page.
-   */
-  private List<IUiContentProvider> createDesignerProviders() {
-    List<IUiContentProvider> providers = Lists.newArrayList();
-    providers.add(m_elementTypeDesignerUIProvider);
-    //
-    if (m_binding.isDesignerMode()) {
-      // add life objects
-      createDefaultProviders(providers, true);
-    } else {
-      // create fake objects
-      ObservableCollectionTreeContentProviderInfo contentProvider = m_binding.getContentProvider();
-      // create factory
-      boolean asList = contentProvider instanceof ObservableListTreeContentProviderInfo;
-      BeansObservableFactoryInfo factory = null;
-      try {
-        factory =
-            GlobalFactoryHelper.createTreeObservableFactory(m_binding.getInputObservable(), asList);
-      } catch (Throwable e) {
-        DesignerPlugin.log(e);
-      }
-      if (factory == null) {
-        factory =
-            asList ? new BeansListObservableFactoryInfo() : new BeansSetObservableFactoryInfo();
-      }
-      //
-      m_defaultObjects.add(factory);
-      factory.createContentProviders(providers, m_provider);
-      // create advisor
-      TreeBeanAdvisorInfo advisor = null;
-      try {
-        advisor = GlobalFactoryHelper.createTreeBeanAdvisor(m_binding.getInputObservable());
-      } catch (Throwable e) {
-        DesignerPlugin.log(e);
-      }
-      if (advisor == null) {
-        advisor = new TreeBeanAdvisorInfo();
-      }
-      m_defaultObjects.add(advisor);
-      advisor.createContentProviders(providers, m_provider);
-      // content provider always exist
-      contentProvider.createContentProviders(providers, m_provider, true);
-      // create label provider
-      KnownElementsObservableInfo allElementsObservable =
-          new KnownElementsObservableInfo(contentProvider);
-      TreeObservableLabelProviderInfo labelProvider = null;
-      try {
-        labelProvider =
-            GlobalFactoryHelper.createTreeLabelProvider(
-                m_binding.getInputObservable(),
-                allElementsObservable);
-      } catch (Throwable e) {
-        DesignerPlugin.log(e);
-      }
-      if (labelProvider == null) {
-        labelProvider = new TreeObservableLabelProviderInfo(allElementsObservable);
-      }
-      m_defaultObjects.add(labelProvider);
-      labelProvider.createContentProviders(providers, m_provider, true);
-    }
-    // content provider for properties: parent/children/has children/text/image
-    m_contentLabelProvidersEditor = new TreeContentLabelProvidersUiContentProvider(m_binding);
-    providers.add(m_contentLabelProvidersEditor);
-    return providers;
-  }
-
-  /**
-   * Fill JFace page.
-   */
-  private List<IUiContentProvider> createJFaceProviders() {
-    List<IUiContentProvider> providers = Lists.newArrayList();
-    //
-    if (m_binding.isDesignerMode()) {
-      // create fake objects
-      // create factory
-      ObservableFactoryInfo factory = new ObservableFactoryInfo("");
-      m_defaultObjects.add(factory);
-      factory.createContentProviders(providers, m_provider);
-      // create advisor
-      TreeStructureAdvisorInfo advisor = new TreeStructureAdvisorInfo("");
-      m_defaultObjects.add(advisor);
-      advisor.createContentProviders(providers, m_provider);
-      // content provider always exist
-      m_binding.getContentProvider().createContentProviders(providers, m_provider, false);
-      // create label provider
-      LabelProviderInfo labelProvider = new LabelProviderInfo("");
-      m_defaultObjects.add(labelProvider);
-      labelProvider.createContentProviders(providers, m_provider, false);
-    } else {
-      // add life objects
-      createDefaultProviders(providers, false);
-    }
-    //
-    final ObservableInfo inputObservable = m_binding.getInputObservable();
-    if (inputObservable instanceof ListBeanObservableInfo
-        || inputObservable instanceof SetBeanObservableInfo
-        || inputObservable instanceof BeanFieldInputObservableInfo) {
-      final ChooseClassUiContentProvider contentProviderJFaceEditor =
-          (ChooseClassUiContentProvider) providers.get(0);
-      //
-      try {
-        String factoryValue =
-            inputObservable.getBindableProperty().getReference()
-                + ", "
-                + ClassUtils.getShortClassName(inputObservable.getBindableObject().getObjectType())
-                + ".class)";
-        //
-        if (inputObservable instanceof ListBeanObservableInfo) {
-          factoryValue = "listFactory(" + factoryValue;
-          contentProviderJFaceEditor.getConfiguration().addDefaultStart(factoryValue);
-          contentProviderJFaceEditor.addClassToCombo(factoryValue);
-        } else if (inputObservable instanceof SetBeanObservableInfo) {
-          factoryValue = "setFactory(" + factoryValue;
-          contentProviderJFaceEditor.getConfiguration().addDefaultStart(factoryValue);
-          contentProviderJFaceEditor.addClassToCombo(factoryValue);
-        }
-      } catch (Throwable e) {
-      }
-      //
-      new ChooseClassRouter(contentProviderJFaceEditor, new Runnable() {
-        @Override
-        public void run() {
-          String className = contentProviderJFaceEditor.getClassName();
-          if (className.startsWith("listFactory") || className.startsWith("setFactory")) {
-            m_elementTypeJFaceUIProvider.setClassName(CoreUtils.getClassName(inputObservable.getBindableObject().getObjectType()));
-          }
-        }
-      });
-    }
-    //
-    m_labelProviderJFaceEditor = (ChooseClassUiContentProvider) providers.get(providers.size() - 1);
-    new ChooseClassRouter(m_labelProviderJFaceEditor, new Runnable() {
-      @Override
-      public void run() {
-        m_elementTypeJFaceUIProvider.calculateFinish();
-      }
-    });
-    //
-    providers.add(m_elementTypeJFaceUIProvider);
-    return providers;
-  }
-
-  private void createDefaultProviders(List<IUiContentProvider> providers, boolean useClear) {
-    ObservableCollectionTreeContentProviderInfo contentProvider = m_binding.getContentProvider();
-    // factory
-    contentProvider.getFactoryInfo().createContentProviders(providers, m_provider);
-    // advisor
-    contentProvider.getAdvisorInfo().createContentProviders(providers, m_provider);
-    // content provider
-    contentProvider.createContentProviders(providers, m_provider, useClear);
-    // label provider
-    m_binding.getLabelProvider().createContentProviders(providers, m_provider, useClear);
-  }
-
-  private ChooseClassUiContentProvider createDesignerElementTypeUIProvider() throws Exception {
-    ChooseClassConfiguration configuration = new ChooseClassConfiguration();
-    configuration.setDialogFieldLabel(Messages.TreeInputElementUiContentProvider_chooseDesigner);
-    configuration.setValueScope("beans");
-    configuration.setChooseInterfaces(true);
-    configuration.setEmptyClassErrorMessage(Messages.TreeInputElementUiContentProvider_chooseDesignerEmptyMessage);
-    configuration.setErrorMessagePrefix(Messages.TreeInputElementUiContentProvider_chooseDesignerErrorPrefix);
-    //
-    GlobalFactoryHelper.configureChooseElementForTreeViewerInput(
-        m_binding.getInputObservable(),
-        configuration);
-    //
-    return new ChooseClassUiContentProvider(configuration) {
-      @Override
-      public void updateFromObject() throws Exception {
-        Class<?> elementType = m_binding.getElementType();
-        if (elementType != null) {
-          setClassName(CoreUtils.getClassName(elementType));
-        } else {
-          calculateFinish();
-        }
-      }
-
-      @Override
-      protected void calculateFinish() {
-        super.calculateFinish();
-        if (getErrorMessage() == null) {
-          // route choose class events to properties editor
-          ExecutionUtils.runLog(new RunnableEx() {
-            @Override
-            public void run() throws Exception {
-              m_contentLabelProvidersEditor.setElementType(getChoosenClass());
-            }
-          });
-        }
-      }
-
-      @Override
-      public void saveToObject() throws Exception {
-        // store element type
-        Class<?> elementType = getChoosenClass();
-        //
-        ObservableCollectionTreeContentProviderInfo contentProvider =
-            m_binding.getContentProvider();
-        // to factory
-        BeansObservableFactoryInfo factory =
-            (BeansObservableFactoryInfo) contentProvider.getFactoryInfo();
-        factory.setElementType(elementType);
-        // to advisor
-        TreeBeanAdvisorInfo advisor = (TreeBeanAdvisorInfo) contentProvider.getAdvisorInfo();
-        advisor.setElementType(elementType);
-        // to label provider
-        TreeObservableLabelProviderInfo labelProvider =
-            (TreeObservableLabelProviderInfo) m_binding.getLabelProvider();
-        labelProvider.setElementType(elementType);
-        // to input
-        InputElementUiContentProvider.setElementTypeToInput(m_binding, elementType);
-      }
-    };
-  }
-
-  private JFaceElementTypeUiProvider createJFaceElementTypeUIProvider() {
-    ChooseClassAndPropertiesConfiguration configuration =
-        new ChooseClassAndPropertiesConfiguration();
-    configuration.setDialogFieldLabel(Messages.TreeInputElementUiContentProvider_chooseJFace);
-    configuration.setValueScope("beans");
-    configuration.setChooseInterfaces(true);
-    configuration.setEmptyClassErrorMessage(Messages.TreeInputElementUiContentProvider_chooseJFaceEmptyMessage);
-    configuration.setErrorMessagePrefix(Messages.TreeInputElementUiContentProvider_chooseJFaceMessagePrefix);
-    configuration.setPropertiesLabel(Messages.TreeInputElementUiContentProvider_chooseJFacePropertiesLabel);
-    configuration.setPropertiesErrorMessage(Messages.TreeInputElementUiContentProvider_choodJFacePropertiesErrorMessage);
-    configuration.setLoadedPropertiesCheckedStrategy(ChooseClassAndPropertiesConfiguration.LoadedPropertiesCheckedStrategy.None);
-    //
-    return new JFaceElementTypeUiProvider(configuration);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Handle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private boolean isDesignerMode() {
-    return m_tabFolder.getSelectionIndex() == 0;
-  }
-
-  private void handleTabSelection() {
-    int selection = m_tabFolder.getSelectionIndex();
-    int count = m_tabFolder.getItemCount();
-    for (int i = 0; i < count; i++) {
-      TabItem item = m_tabFolder.getItem(i);
-      if (i == selection) {
-        item.setImage(CHECK_IMAGE);
-      } else {
-        item.setImage(UNCHECK_IMAGE);
-      }
-    }
-  }
-
-  private void calculateFinish() {
-    m_completeListener.calculateFinish();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Update
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void updateFromObject() throws Exception {
-    m_designerComposite.performInitialize();
-    m_jfaceComposite.performInitialize();
-    if (!m_binding.isDesignerMode()) {
-      m_tabFolder.setSelection(1);
-      handleTabSelection();
-    }
-    calculateFinish();
-  }
-
-  @Override
-  public void saveToObject() throws Exception {
-    // check change mode
-    boolean editorMode = isDesignerMode();
-    if (m_binding.isDesignerMode() != editorMode) {
-      ObservableCollectionTreeContentProviderInfo contentProvider = m_binding.getContentProvider();
-      contentProvider.setFactoryInfo((ObservableFactoryInfo) m_defaultObjects.get(0));
-      contentProvider.setAdvisorInfo((TreeStructureAdvisorInfo) m_defaultObjects.get(1));
-      m_binding.setLabelProvider((LabelProviderInfo) m_defaultObjects.get(2));
-    }
-    // save edit objects
-    if (editorMode) {
-      m_designerComposite.performFinish();
-    } else {
-      m_jfaceComposite.performFinish();
-      saveJFaceObjects();
-    }
-  }
-
-  private void saveJFaceObjects() throws Exception {
-    ObservableCollectionTreeContentProviderInfo contentProvider = m_binding.getContentProvider();
-    ObservableFactoryInfo factoryInfo = contentProvider.getFactoryInfo();
-    if (factoryInfo instanceof AbstractFactoryInfo) {
-      AbstractFactoryInfo aFactoryInfo = (AbstractFactoryInfo) factoryInfo;
-      //
-      if (aFactoryInfo.isCancel()) {
-        //
-        ObservableFactoryInfo newFactoryInfo =
-            new ObservableFactoryInfo(aFactoryInfo.getOriginalClassName());
-        newFactoryInfo.setVariableIdentifier(aFactoryInfo.getVariableIdentifier());
-        contentProvider.setFactoryInfo(newFactoryInfo);
-        //
-        boolean version_1_3 =
-            Activator.getStore().getBoolean(IPreferenceConstants.GENERATE_CODE_FOR_VERSION_1_3);
-        ObservableInfo inputObservable = m_binding.getInputObservable();
-        ObservableInfo newInputObservable = null;
-        if (contentProvider instanceof ObservableListTreeContentProviderInfo) {
-          newInputObservable =
-              new ListBeanObservableInfo((BeanBindableInfo) inputObservable.getBindableObject(),
-                  (BeanPropertyBindableInfo) inputObservable.getBindableProperty());
-          if (version_1_3) {
-            newInputObservable.setCodeSupport(new ListPropertyCodeSupport());
-          } else {
-            newInputObservable.setCodeSupport(new BeanObservableListCodeSupport());
-          }
-        } else {
-          newInputObservable =
-              new SetBeanObservableInfo((BeanBindableInfo) inputObservable.getBindableObject(),
-                  (BeanPropertyBindableInfo) inputObservable.getBindableProperty());
-          if (version_1_3) {
-            newInputObservable.setCodeSupport(new SetPropertyCodeSupport());
-          } else {
-            newInputObservable.setCodeSupport(new BeanObservableSetCodeSupport());
-          }
-        }
-        newInputObservable.setVariableIdentifier(inputObservable.getVariableIdentifier());
-        m_binding.setInputObservable(newInputObservable);
-      }
-    } else if (factoryInfo.getClassName().startsWith("listFactory(")
-        || factoryInfo.getClassName().startsWith("setFactory(")) {
-      //
-      AbstractFactoryInfo newFactoryInfo = null;
-      //
-      if (contentProvider instanceof ObservableListTreeContentProviderInfo) {
-        newFactoryInfo = new BeansObservableListFactoryInfo();
-      } else {
-        newFactoryInfo = new BeansObservableSetFactoryInfo();
-      }
-      //
-      ObservableInfo inputObservable = m_binding.getInputObservable();
-      //
-      newFactoryInfo.setPropertyName(inputObservable.getBindableProperty().getReference());
-      newFactoryInfo.setElementType(inputObservable.getBindableObject().getObjectType());
-      newFactoryInfo.setVariableIdentifier(factoryInfo.getVariableIdentifier());
-      contentProvider.setFactoryInfo(newFactoryInfo);
-      //
-      m_binding.setInputObservable(new BeanFieldInputObservableInfo(inputObservable.getBindableObject(),
-          inputObservable.getBindableProperty()));
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Classes
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private class JFaceElementTypeUiProvider extends ChooseClassAndTreePropertiesUiContentProvider2 {
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public JFaceElementTypeUiProvider(ChooseClassAndPropertiesConfiguration configuration) {
-      super(configuration);
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Properties
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    protected List<PropertyAdapter> getProperties(Class<?> choosenClass) throws Exception {
-      return isObservableMapLabelProvider()
-          ? super.getProperties(choosenClass)
-          : Collections.<PropertyAdapter>emptyList();
-    }
-
-    @Override
-    public void calculateFinish() {
-      super.calculateFinish();
-      try {
-        boolean mapLabelProvider = isObservableMapLabelProvider();
-        m_propertiesLabel.setEnabled(mapLabelProvider);
-        m_propertiesViewer.getViewer().getControl().setEnabled(mapLabelProvider);
-        if (!mapLabelProvider) {
-          setErrorMessage(null);
-        }
-      } catch (Throwable e) {
-      }
-    }
-
-    private boolean isObservableMapLabelProvider() throws Exception {
-      if (m_labelProviderJFaceEditor.getErrorMessage() == null) {
-        Class<?> labelProviderChoosenClass = m_labelProviderJFaceEditor.getChoosenClass();
-        if (loadClass("org.eclipse.jface.databinding.viewers.ObservableMapLabelProvider").isAssignableFrom(
-            labelProviderChoosenClass)
-            || loadClass("org.eclipse.jface.databinding.viewers.ObservableMapCellLabelProvider").isAssignableFrom(
-                labelProviderChoosenClass)) {
-          return true;
-        }
-      }
-      return false;
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Update
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public void updateFromObject() throws Exception {
-      Class<?> elementType = m_binding.getElementType();
-      if (elementType != null) {
-        if (!m_binding.isDesignerMode()
-            && m_binding.getLabelProvider() instanceof ObservableMapLabelProviderInfo) {
-          // prepare initial properties
-          ObservableMapLabelProviderInfo labelProviderInfo =
-              (ObservableMapLabelProviderInfo) m_binding.getLabelProvider();
-          MapsBeanObservableInfo mapsObservable = labelProviderInfo.getMapsObservable();
-          String[] properties = mapsObservable.getProperties();
-          //
-          if (properties == null) {
-            setClassName(CoreUtils.getClassName(elementType));
-          } else {
-            List<String> checkedProperties = Lists.newArrayList();
-            for (int i = 0; i < properties.length; i++) {
-              checkedProperties.add("\"" + properties[i] + "\"");
-            }
-            setClassNameAndProperties(elementType, null, checkedProperties);
-          }
-        } else {
-          setClassName(CoreUtils.getClassName(elementType));
-        }
-      } else {
-        calculateFinish();
-      }
-    }
-
-    @Override
-    protected void saveToObject(Class<?> choosenClass, List<PropertyAdapter> choosenProperties)
-        throws Exception {
-      // store element type
-      Class<?> elementType = getChoosenClass();
-      // to label provider
-      AbstractLabelProviderInfo labelProvider = m_binding.getLabelProvider();
-      if (isObservableMapLabelProvider()) {
-        ObservableMapLabelProviderInfo mapsLabelProvider;
-        if (labelProvider instanceof ObservableMapLabelProviderInfo) {
-          mapsLabelProvider = (ObservableMapLabelProviderInfo) labelProvider;
-        } else {
-          // create content provider accessor
-          KnownElementsObservableInfo knownElementsObservable =
-              new KnownElementsObservableInfo(m_binding.getContentProvider());
-          // create label provider
-          MapsBeanObservableInfo observeMaps =
-              GlobalFactoryHelper.createObserveMaps(
-                  m_binding.getInputObservable(),
-                  knownElementsObservable,
-                  elementType,
-                  new boolean[1]);
-          if (observeMaps == null) {
-            observeMaps = new MapsBeanObservableInfo(knownElementsObservable, elementType, null);
-          }
-          //
-          mapsLabelProvider =
-              new ObservableMapLabelProviderInfo(labelProvider.getClassName(), observeMaps);
-          mapsLabelProvider.setVariableIdentifier(labelProvider.getVariableIdentifier());
-          m_binding.setLabelProvider(mapsLabelProvider);
-        }
-        // sets label provider element properties
-        Object[] checkedElements = m_propertiesViewer.getCheckedElements();
-        String[] properties = new String[checkedElements.length];
-        for (int i = 0; i < checkedElements.length; i++) {
-          ObservePropertyAdapter adapter = (ObservePropertyAdapter) checkedElements[i];
-          properties[i] = StringUtils.remove(adapter.getProperty().getReference(), '"');
-        }
-        mapsLabelProvider.getMapsObservable().setElementType(choosenClass);
-        mapsLabelProvider.getMapsObservable().setProperties(properties);
-      } else if (labelProvider instanceof ObservableMapLabelProviderInfo) {
-        LabelProviderInfo newLabelProvider = new LabelProviderInfo(labelProvider.getClassName());
-        newLabelProvider.setVariableIdentifier(labelProvider.getVariableIdentifier());
-        m_binding.setLabelProvider(newLabelProvider);
-      }
-      // to input
-      InputElementUiContentProvider.setElementTypeToInput(m_binding, elementType);
-    }
-  }
+	private static final Image CHECK_IMAGE = Activator.getImage("tab_selection_true.gif");
+	private static final Image UNCHECK_IMAGE = Activator.getImage("tab_selection_false.gif");
+	//
+	private final TreeViewerInputBindingInfo m_binding;
+	private final IPageListener m_pageListener;
+	private final DatabindingsProvider m_provider;
+	private final List<SimpleClassObjectInfo> m_defaultObjects = Lists.newArrayList();
+	private ICompleteListener m_completeListener;
+	private TabFolder m_tabFolder;
+	private final ChooseClassUiContentProvider m_elementTypeDesignerUIProvider;
+	private final JFaceElementTypeUiProvider m_elementTypeJFaceUIProvider;
+	private final ChooseClassUiContentProvider[] m_elementTypeUIProviders;
+	private TreeContentLabelProvidersUiContentProvider m_contentLabelProvidersEditor;
+	private ChooseClassUiContentProvider m_labelProviderJFaceEditor;
+	private UiContentProviderComposite m_designerComposite;
+	private UiContentProviderComposite m_jfaceComposite;
+	private PageListenerWrapper m_designerPageListener;
+	private PageListenerWrapper m_jfacePageListener;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public TreeInputElementUiContentProvider(TreeViewerInputBindingInfo binding,
+			IPageListener listener,
+			DatabindingsProvider provider) throws Exception {
+		m_binding = binding;
+		m_pageListener = listener;
+		m_provider = provider;
+		//
+		m_elementTypeDesignerUIProvider = createDesignerElementTypeUIProvider();
+		m_elementTypeJFaceUIProvider = createJFaceElementTypeUIProvider();
+		//
+		m_elementTypeUIProviders =
+				new ChooseClassUiContentProvider[]{
+						m_elementTypeDesignerUIProvider,
+						m_elementTypeJFaceUIProvider};
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ChooseClassUiContentProvider[] getElementTypeUIProviders() {
+		return m_elementTypeUIProviders;
+	}
+
+	public Class<?> getCurrentElementType() throws Exception {
+		return isDesignerMode()
+				? m_elementTypeDesignerUIProvider.getChoosenClass()
+						: m_elementTypeJFaceUIProvider.getChoosenClass();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Complete
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void setCompleteListener(ICompleteListener listener) {
+		m_completeListener = listener;
+	}
+
+	@Override
+	public String getErrorMessage() {
+		if (isDesignerMode()) {
+			return m_designerPageListener.getErrorMessage();
+		}
+		return m_jfacePageListener.getErrorMessage();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public int getNumberOfControls() {
+		return 1;
+	}
+
+	@Override
+	public void createContent(Composite parent, int columns) {
+		// create folder
+		m_tabFolder = new TabFolder(parent, SWT.NONE);
+		GridDataFactory.create(m_tabFolder).fill().grab().spanH(columns);
+		// create designer page
+		m_designerPageListener = new PageListenerWrapper(m_pageListener, m_completeListener);
+		//
+		m_designerComposite =
+				new UiContentProviderComposite(m_designerPageListener,
+						createDesignerProviders(),
+						m_tabFolder,
+						SWT.NONE);
+		TabFactory.item(m_tabFolder).text(Messages.TreeInputElementUiContentProvider_designerSupport).image(
+				CHECK_IMAGE).control(m_designerComposite);
+		// create jface page
+		m_jfacePageListener = new PageListenerWrapper(m_pageListener, m_completeListener);
+		//
+		m_jfaceComposite =
+				new UiContentProviderComposite(m_jfacePageListener,
+						createJFaceProviders(),
+						m_tabFolder,
+						SWT.NONE);
+		TabFactory.item(m_tabFolder).text(Messages.TreeInputElementUiContentProvider_jfaceSupport).image(
+				UNCHECK_IMAGE).control(m_jfaceComposite);
+		//
+		m_tabFolder.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				handleTabSelection();
+				calculateFinish();
+			}
+		});
+	}
+
+	/**
+	 * Fill Designer page.
+	 */
+	private List<IUiContentProvider> createDesignerProviders() {
+		List<IUiContentProvider> providers = Lists.newArrayList();
+		providers.add(m_elementTypeDesignerUIProvider);
+		//
+		if (m_binding.isDesignerMode()) {
+			// add life objects
+			createDefaultProviders(providers, true);
+		} else {
+			// create fake objects
+			ObservableCollectionTreeContentProviderInfo contentProvider = m_binding.getContentProvider();
+			// create factory
+			boolean asList = contentProvider instanceof ObservableListTreeContentProviderInfo;
+			BeansObservableFactoryInfo factory = null;
+			try {
+				factory =
+						GlobalFactoryHelper.createTreeObservableFactory(m_binding.getInputObservable(), asList);
+			} catch (Throwable e) {
+				DesignerPlugin.log(e);
+			}
+			if (factory == null) {
+				factory =
+						asList ? new BeansListObservableFactoryInfo() : new BeansSetObservableFactoryInfo();
+			}
+			//
+			m_defaultObjects.add(factory);
+			factory.createContentProviders(providers, m_provider);
+			// create advisor
+			TreeBeanAdvisorInfo advisor = null;
+			try {
+				advisor = GlobalFactoryHelper.createTreeBeanAdvisor(m_binding.getInputObservable());
+			} catch (Throwable e) {
+				DesignerPlugin.log(e);
+			}
+			if (advisor == null) {
+				advisor = new TreeBeanAdvisorInfo();
+			}
+			m_defaultObjects.add(advisor);
+			advisor.createContentProviders(providers, m_provider);
+			// content provider always exist
+			contentProvider.createContentProviders(providers, m_provider, true);
+			// create label provider
+			KnownElementsObservableInfo allElementsObservable =
+					new KnownElementsObservableInfo(contentProvider);
+			TreeObservableLabelProviderInfo labelProvider = null;
+			try {
+				labelProvider =
+						GlobalFactoryHelper.createTreeLabelProvider(
+								m_binding.getInputObservable(),
+								allElementsObservable);
+			} catch (Throwable e) {
+				DesignerPlugin.log(e);
+			}
+			if (labelProvider == null) {
+				labelProvider = new TreeObservableLabelProviderInfo(allElementsObservable);
+			}
+			m_defaultObjects.add(labelProvider);
+			labelProvider.createContentProviders(providers, m_provider, true);
+		}
+		// content provider for properties: parent/children/has children/text/image
+		m_contentLabelProvidersEditor = new TreeContentLabelProvidersUiContentProvider(m_binding);
+		providers.add(m_contentLabelProvidersEditor);
+		return providers;
+	}
+
+	/**
+	 * Fill JFace page.
+	 */
+	private List<IUiContentProvider> createJFaceProviders() {
+		List<IUiContentProvider> providers = Lists.newArrayList();
+		//
+		if (m_binding.isDesignerMode()) {
+			// create fake objects
+			// create factory
+			ObservableFactoryInfo factory = new ObservableFactoryInfo("");
+			m_defaultObjects.add(factory);
+			factory.createContentProviders(providers, m_provider);
+			// create advisor
+			TreeStructureAdvisorInfo advisor = new TreeStructureAdvisorInfo("");
+			m_defaultObjects.add(advisor);
+			advisor.createContentProviders(providers, m_provider);
+			// content provider always exist
+			m_binding.getContentProvider().createContentProviders(providers, m_provider, false);
+			// create label provider
+			LabelProviderInfo labelProvider = new LabelProviderInfo("");
+			m_defaultObjects.add(labelProvider);
+			labelProvider.createContentProviders(providers, m_provider, false);
+		} else {
+			// add life objects
+			createDefaultProviders(providers, false);
+		}
+		//
+		final ObservableInfo inputObservable = m_binding.getInputObservable();
+		if (inputObservable instanceof ListBeanObservableInfo
+				|| inputObservable instanceof SetBeanObservableInfo
+				|| inputObservable instanceof BeanFieldInputObservableInfo) {
+			final ChooseClassUiContentProvider contentProviderJFaceEditor =
+					(ChooseClassUiContentProvider) providers.get(0);
+			//
+			try {
+				String factoryValue =
+						inputObservable.getBindableProperty().getReference()
+						+ ", "
+						+ ClassUtils.getShortClassName(inputObservable.getBindableObject().getObjectType())
+						+ ".class)";
+				//
+				if (inputObservable instanceof ListBeanObservableInfo) {
+					factoryValue = "listFactory(" + factoryValue;
+					contentProviderJFaceEditor.getConfiguration().addDefaultStart(factoryValue);
+					contentProviderJFaceEditor.addClassToCombo(factoryValue);
+				} else if (inputObservable instanceof SetBeanObservableInfo) {
+					factoryValue = "setFactory(" + factoryValue;
+					contentProviderJFaceEditor.getConfiguration().addDefaultStart(factoryValue);
+					contentProviderJFaceEditor.addClassToCombo(factoryValue);
+				}
+			} catch (Throwable e) {
+			}
+			//
+			new ChooseClassRouter(contentProviderJFaceEditor, new Runnable() {
+				@Override
+				public void run() {
+					String className = contentProviderJFaceEditor.getClassName();
+					if (className.startsWith("listFactory") || className.startsWith("setFactory")) {
+						m_elementTypeJFaceUIProvider.setClassName(CoreUtils.getClassName(inputObservable.getBindableObject().getObjectType()));
+					}
+				}
+			});
+		}
+		//
+		m_labelProviderJFaceEditor = (ChooseClassUiContentProvider) providers.get(providers.size() - 1);
+		new ChooseClassRouter(m_labelProviderJFaceEditor, new Runnable() {
+			@Override
+			public void run() {
+				m_elementTypeJFaceUIProvider.calculateFinish();
+			}
+		});
+		//
+		providers.add(m_elementTypeJFaceUIProvider);
+		return providers;
+	}
+
+	private void createDefaultProviders(List<IUiContentProvider> providers, boolean useClear) {
+		ObservableCollectionTreeContentProviderInfo contentProvider = m_binding.getContentProvider();
+		// factory
+		contentProvider.getFactoryInfo().createContentProviders(providers, m_provider);
+		// advisor
+		contentProvider.getAdvisorInfo().createContentProviders(providers, m_provider);
+		// content provider
+		contentProvider.createContentProviders(providers, m_provider, useClear);
+		// label provider
+		m_binding.getLabelProvider().createContentProviders(providers, m_provider, useClear);
+	}
+
+	private ChooseClassUiContentProvider createDesignerElementTypeUIProvider() throws Exception {
+		ChooseClassConfiguration configuration = new ChooseClassConfiguration();
+		configuration.setDialogFieldLabel(Messages.TreeInputElementUiContentProvider_chooseDesigner);
+		configuration.setValueScope("beans");
+		configuration.setChooseInterfaces(true);
+		configuration.setEmptyClassErrorMessage(Messages.TreeInputElementUiContentProvider_chooseDesignerEmptyMessage);
+		configuration.setErrorMessagePrefix(Messages.TreeInputElementUiContentProvider_chooseDesignerErrorPrefix);
+		//
+		GlobalFactoryHelper.configureChooseElementForTreeViewerInput(
+				m_binding.getInputObservable(),
+				configuration);
+		//
+		return new ChooseClassUiContentProvider(configuration) {
+			@Override
+			public void updateFromObject() throws Exception {
+				Class<?> elementType = m_binding.getElementType();
+				if (elementType != null) {
+					setClassName(CoreUtils.getClassName(elementType));
+				} else {
+					calculateFinish();
+				}
+			}
+
+			@Override
+			protected void calculateFinish() {
+				super.calculateFinish();
+				if (getErrorMessage() == null) {
+					// route choose class events to properties editor
+					ExecutionUtils.runLog(new RunnableEx() {
+						@Override
+						public void run() throws Exception {
+							m_contentLabelProvidersEditor.setElementType(getChoosenClass());
+						}
+					});
+				}
+			}
+
+			@Override
+			public void saveToObject() throws Exception {
+				// store element type
+				Class<?> elementType = getChoosenClass();
+				//
+				ObservableCollectionTreeContentProviderInfo contentProvider =
+						m_binding.getContentProvider();
+				// to factory
+				BeansObservableFactoryInfo factory =
+						(BeansObservableFactoryInfo) contentProvider.getFactoryInfo();
+				factory.setElementType(elementType);
+				// to advisor
+				TreeBeanAdvisorInfo advisor = (TreeBeanAdvisorInfo) contentProvider.getAdvisorInfo();
+				advisor.setElementType(elementType);
+				// to label provider
+				TreeObservableLabelProviderInfo labelProvider =
+						(TreeObservableLabelProviderInfo) m_binding.getLabelProvider();
+				labelProvider.setElementType(elementType);
+				// to input
+				InputElementUiContentProvider.setElementTypeToInput(m_binding, elementType);
+			}
+		};
+	}
+
+	private JFaceElementTypeUiProvider createJFaceElementTypeUIProvider() {
+		ChooseClassAndPropertiesConfiguration configuration =
+				new ChooseClassAndPropertiesConfiguration();
+		configuration.setDialogFieldLabel(Messages.TreeInputElementUiContentProvider_chooseJFace);
+		configuration.setValueScope("beans");
+		configuration.setChooseInterfaces(true);
+		configuration.setEmptyClassErrorMessage(Messages.TreeInputElementUiContentProvider_chooseJFaceEmptyMessage);
+		configuration.setErrorMessagePrefix(Messages.TreeInputElementUiContentProvider_chooseJFaceMessagePrefix);
+		configuration.setPropertiesLabel(Messages.TreeInputElementUiContentProvider_chooseJFacePropertiesLabel);
+		configuration.setPropertiesErrorMessage(Messages.TreeInputElementUiContentProvider_choodJFacePropertiesErrorMessage);
+		configuration.setLoadedPropertiesCheckedStrategy(ChooseClassAndPropertiesConfiguration.LoadedPropertiesCheckedStrategy.None);
+		//
+		return new JFaceElementTypeUiProvider(configuration);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Handle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private boolean isDesignerMode() {
+		return m_tabFolder.getSelectionIndex() == 0;
+	}
+
+	private void handleTabSelection() {
+		int selection = m_tabFolder.getSelectionIndex();
+		int count = m_tabFolder.getItemCount();
+		for (int i = 0; i < count; i++) {
+			TabItem item = m_tabFolder.getItem(i);
+			if (i == selection) {
+				item.setImage(CHECK_IMAGE);
+			} else {
+				item.setImage(UNCHECK_IMAGE);
+			}
+		}
+	}
+
+	private void calculateFinish() {
+		m_completeListener.calculateFinish();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Update
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void updateFromObject() throws Exception {
+		m_designerComposite.performInitialize();
+		m_jfaceComposite.performInitialize();
+		if (!m_binding.isDesignerMode()) {
+			m_tabFolder.setSelection(1);
+			handleTabSelection();
+		}
+		calculateFinish();
+	}
+
+	@Override
+	public void saveToObject() throws Exception {
+		// check change mode
+		boolean editorMode = isDesignerMode();
+		if (m_binding.isDesignerMode() != editorMode) {
+			ObservableCollectionTreeContentProviderInfo contentProvider = m_binding.getContentProvider();
+			contentProvider.setFactoryInfo((ObservableFactoryInfo) m_defaultObjects.get(0));
+			contentProvider.setAdvisorInfo((TreeStructureAdvisorInfo) m_defaultObjects.get(1));
+			m_binding.setLabelProvider((LabelProviderInfo) m_defaultObjects.get(2));
+		}
+		// save edit objects
+		if (editorMode) {
+			m_designerComposite.performFinish();
+		} else {
+			m_jfaceComposite.performFinish();
+			saveJFaceObjects();
+		}
+	}
+
+	private void saveJFaceObjects() throws Exception {
+		ObservableCollectionTreeContentProviderInfo contentProvider = m_binding.getContentProvider();
+		ObservableFactoryInfo factoryInfo = contentProvider.getFactoryInfo();
+		if (factoryInfo instanceof AbstractFactoryInfo) {
+			AbstractFactoryInfo aFactoryInfo = (AbstractFactoryInfo) factoryInfo;
+			//
+			if (aFactoryInfo.isCancel()) {
+				//
+				ObservableFactoryInfo newFactoryInfo =
+						new ObservableFactoryInfo(aFactoryInfo.getOriginalClassName());
+				newFactoryInfo.setVariableIdentifier(aFactoryInfo.getVariableIdentifier());
+				contentProvider.setFactoryInfo(newFactoryInfo);
+				//
+				boolean version_1_3 =
+						Activator.getStore().getBoolean(IPreferenceConstants.GENERATE_CODE_FOR_VERSION_1_3);
+				ObservableInfo inputObservable = m_binding.getInputObservable();
+				ObservableInfo newInputObservable = null;
+				if (contentProvider instanceof ObservableListTreeContentProviderInfo) {
+					newInputObservable =
+							new ListBeanObservableInfo((BeanBindableInfo) inputObservable.getBindableObject(),
+									(BeanPropertyBindableInfo) inputObservable.getBindableProperty());
+					if (version_1_3) {
+						newInputObservable.setCodeSupport(new ListPropertyCodeSupport());
+					} else {
+						newInputObservable.setCodeSupport(new BeanObservableListCodeSupport());
+					}
+				} else {
+					newInputObservable =
+							new SetBeanObservableInfo((BeanBindableInfo) inputObservable.getBindableObject(),
+									(BeanPropertyBindableInfo) inputObservable.getBindableProperty());
+					if (version_1_3) {
+						newInputObservable.setCodeSupport(new SetPropertyCodeSupport());
+					} else {
+						newInputObservable.setCodeSupport(new BeanObservableSetCodeSupport());
+					}
+				}
+				newInputObservable.setVariableIdentifier(inputObservable.getVariableIdentifier());
+				m_binding.setInputObservable(newInputObservable);
+			}
+		} else if (factoryInfo.getClassName().startsWith("listFactory(")
+				|| factoryInfo.getClassName().startsWith("setFactory(")) {
+			//
+			AbstractFactoryInfo newFactoryInfo = null;
+			//
+			if (contentProvider instanceof ObservableListTreeContentProviderInfo) {
+				newFactoryInfo = new BeansObservableListFactoryInfo();
+			} else {
+				newFactoryInfo = new BeansObservableSetFactoryInfo();
+			}
+			//
+			ObservableInfo inputObservable = m_binding.getInputObservable();
+			//
+			newFactoryInfo.setPropertyName(inputObservable.getBindableProperty().getReference());
+			newFactoryInfo.setElementType(inputObservable.getBindableObject().getObjectType());
+			newFactoryInfo.setVariableIdentifier(factoryInfo.getVariableIdentifier());
+			contentProvider.setFactoryInfo(newFactoryInfo);
+			//
+			m_binding.setInputObservable(new BeanFieldInputObservableInfo(inputObservable.getBindableObject(),
+					inputObservable.getBindableProperty()));
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Classes
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private class JFaceElementTypeUiProvider extends ChooseClassAndTreePropertiesUiContentProvider2 {
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public JFaceElementTypeUiProvider(ChooseClassAndPropertiesConfiguration configuration) {
+			super(configuration);
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Properties
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		protected List<PropertyAdapter> getProperties(Class<?> choosenClass) throws Exception {
+			return isObservableMapLabelProvider()
+					? super.getProperties(choosenClass)
+							: Collections.<PropertyAdapter>emptyList();
+		}
+
+		@Override
+		public void calculateFinish() {
+			super.calculateFinish();
+			try {
+				boolean mapLabelProvider = isObservableMapLabelProvider();
+				m_propertiesLabel.setEnabled(mapLabelProvider);
+				m_propertiesViewer.getViewer().getControl().setEnabled(mapLabelProvider);
+				if (!mapLabelProvider) {
+					setErrorMessage(null);
+				}
+			} catch (Throwable e) {
+			}
+		}
+
+		private boolean isObservableMapLabelProvider() throws Exception {
+			if (m_labelProviderJFaceEditor.getErrorMessage() == null) {
+				Class<?> labelProviderChoosenClass = m_labelProviderJFaceEditor.getChoosenClass();
+				if (loadClass("org.eclipse.jface.databinding.viewers.ObservableMapLabelProvider").isAssignableFrom(
+						labelProviderChoosenClass)
+						|| loadClass("org.eclipse.jface.databinding.viewers.ObservableMapCellLabelProvider").isAssignableFrom(
+								labelProviderChoosenClass)) {
+					return true;
+				}
+			}
+			return false;
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Update
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public void updateFromObject() throws Exception {
+			Class<?> elementType = m_binding.getElementType();
+			if (elementType != null) {
+				if (!m_binding.isDesignerMode()
+						&& m_binding.getLabelProvider() instanceof ObservableMapLabelProviderInfo) {
+					// prepare initial properties
+					ObservableMapLabelProviderInfo labelProviderInfo =
+							(ObservableMapLabelProviderInfo) m_binding.getLabelProvider();
+					MapsBeanObservableInfo mapsObservable = labelProviderInfo.getMapsObservable();
+					String[] properties = mapsObservable.getProperties();
+					//
+					if (properties == null) {
+						setClassName(CoreUtils.getClassName(elementType));
+					} else {
+						List<String> checkedProperties = Lists.newArrayList();
+						for (int i = 0; i < properties.length; i++) {
+							checkedProperties.add("\"" + properties[i] + "\"");
+						}
+						setClassNameAndProperties(elementType, null, checkedProperties);
+					}
+				} else {
+					setClassName(CoreUtils.getClassName(elementType));
+				}
+			} else {
+				calculateFinish();
+			}
+		}
+
+		@Override
+		protected void saveToObject(Class<?> choosenClass, List<PropertyAdapter> choosenProperties)
+				throws Exception {
+			// store element type
+			Class<?> elementType = getChoosenClass();
+			// to label provider
+			AbstractLabelProviderInfo labelProvider = m_binding.getLabelProvider();
+			if (isObservableMapLabelProvider()) {
+				ObservableMapLabelProviderInfo mapsLabelProvider;
+				if (labelProvider instanceof ObservableMapLabelProviderInfo) {
+					mapsLabelProvider = (ObservableMapLabelProviderInfo) labelProvider;
+				} else {
+					// create content provider accessor
+					KnownElementsObservableInfo knownElementsObservable =
+							new KnownElementsObservableInfo(m_binding.getContentProvider());
+					// create label provider
+					MapsBeanObservableInfo observeMaps =
+							GlobalFactoryHelper.createObserveMaps(
+									m_binding.getInputObservable(),
+									knownElementsObservable,
+									elementType,
+									new boolean[1]);
+					if (observeMaps == null) {
+						observeMaps = new MapsBeanObservableInfo(knownElementsObservable, elementType, null);
+					}
+					//
+					mapsLabelProvider =
+							new ObservableMapLabelProviderInfo(labelProvider.getClassName(), observeMaps);
+					mapsLabelProvider.setVariableIdentifier(labelProvider.getVariableIdentifier());
+					m_binding.setLabelProvider(mapsLabelProvider);
+				}
+				// sets label provider element properties
+				Object[] checkedElements = m_propertiesViewer.getCheckedElements();
+				String[] properties = new String[checkedElements.length];
+				for (int i = 0; i < checkedElements.length; i++) {
+					ObservePropertyAdapter adapter = (ObservePropertyAdapter) checkedElements[i];
+					properties[i] = StringUtils.remove(adapter.getProperty().getReference(), '"');
+				}
+				mapsLabelProvider.getMapsObservable().setElementType(choosenClass);
+				mapsLabelProvider.getMapsObservable().setProperties(properties);
+			} else if (labelProvider instanceof ObservableMapLabelProviderInfo) {
+				LabelProviderInfo newLabelProvider = new LabelProviderInfo(labelProvider.getClassName());
+				newLabelProvider.setVariableIdentifier(labelProvider.getVariableIdentifier());
+				m_binding.setLabelProvider(newLabelProvider);
+			}
+			// to input
+			InputElementUiContentProvider.setElementTypeToInput(m_binding, elementType);
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/contentproviders/UpdateStrategyPropertiesUiContentProvider.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/contentproviders/UpdateStrategyPropertiesUiContentProvider.java
index 03e22aba4..bba5a7da4 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/contentproviders/UpdateStrategyPropertiesUiContentProvider.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/contentproviders/UpdateStrategyPropertiesUiContentProvider.java
@@ -38,132 +38,132 @@
  * @coverage bindings.rcp.ui
  */
 public final class UpdateStrategyPropertiesUiContentProvider implements IUiContentProvider {
-  //
-  private final List<IUiContentProvider> m_providers = Lists.newArrayList();
-  private ExpandableComposite m_expandableComposite;
-  private final String m_settingKey;
-  private final String m_captionPrefix;
-  private final IDialogSettings m_settings;
+	//
+	private final List<IUiContentProvider> m_providers = Lists.newArrayList();
+	private ExpandableComposite m_expandableComposite;
+	private final String m_settingKey;
+	private final String m_captionPrefix;
+	private final IDialogSettings m_settings;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public UpdateStrategyPropertiesUiContentProvider(String direction) {
-    m_settingKey = direction + " strategy expanded state";
-    if ("Target".equals(direction)) {
-      m_captionPrefix = Messages.UpdateStrategyPropertiesUiContentProvider_Target2Model + " ";
-    } else if ("Model".equals(direction)) {
-      m_captionPrefix = Messages.UpdateStrategyPropertiesUiContentProvider_Model2Target + " ";
-    } else {
-      m_captionPrefix = StringUtils.EMPTY;
-    }
-    IDialogSettings mainSettings = Activator.getDefault().getDialogSettings();
-    m_settings = UiUtils.getSettings(mainSettings, getClass().getName());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public UpdateStrategyPropertiesUiContentProvider(String direction) {
+		m_settingKey = direction + " strategy expanded state";
+		if ("Target".equals(direction)) {
+			m_captionPrefix = Messages.UpdateStrategyPropertiesUiContentProvider_Target2Model + " ";
+		} else if ("Model".equals(direction)) {
+			m_captionPrefix = Messages.UpdateStrategyPropertiesUiContentProvider_Model2Target + " ";
+		} else {
+			m_captionPrefix = StringUtils.EMPTY;
+		}
+		IDialogSettings mainSettings = Activator.getDefault().getDialogSettings();
+		m_settings = UiUtils.getSettings(mainSettings, getClass().getName());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Add sub {@link IUiContentProvider} content provider to container.
-   */
-  public void addProvider(IUiContentProvider provider) {
-    m_providers.add(provider);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Add sub {@link IUiContentProvider} content provider to container.
+	 */
+	public void addProvider(IUiContentProvider provider) {
+		m_providers.add(provider);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Complete
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void setCompleteListener(ICompleteListener listener) {
-    for (IUiContentProvider provider : m_providers) {
-      provider.setCompleteListener(listener);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Complete
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void setCompleteListener(ICompleteListener listener) {
+		for (IUiContentProvider provider : m_providers) {
+			provider.setCompleteListener(listener);
+		}
+	}
 
-  @Override
-  public String getErrorMessage() {
-    for (IUiContentProvider provider : m_providers) {
-      String errorMessage = provider.getErrorMessage();
-      if (errorMessage != null) {
-        return errorMessage;
-      }
-    }
-    return null;
-  }
+	@Override
+	public String getErrorMessage() {
+		for (IUiContentProvider provider : m_providers) {
+			String errorMessage = provider.getErrorMessage();
+			if (errorMessage != null) {
+				return errorMessage;
+			}
+		}
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public int getNumberOfControls() {
-    return 1;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public int getNumberOfControls() {
+		return 1;
+	}
 
-  @Override
-  public void createContent(final Composite parent, int columns) {
-    // create expandable composite
-    m_expandableComposite = new ExpandableComposite(parent, SWT.NONE);
-    m_expandableComposite.setExpanded(true);
-    GridDataFactory.create(m_expandableComposite).fillH().grabH().spanH(columns);
-    m_expandableComposite.addExpansionListener(new ExpansionAdapter() {
-      @Override
-      public void expansionStateChanged(ExpansionEvent e) {
-        compositeExpansionStateChanging();
-        parent.layout();
-      }
-    });
-    // calculate columns
-    int subColumns = 0;
-    for (IUiContentProvider provider : m_providers) {
-      subColumns = Math.max(subColumns, provider.getNumberOfControls());
-    }
-    // create sub content providers
-    Composite clientComposite = new Composite(m_expandableComposite, SWT.NONE);
-    GridLayoutFactory.create(clientComposite).columns(subColumns).noMargins();
-    m_expandableComposite.setClient(clientComposite);
-    //
-    for (IUiContentProvider provider : m_providers) {
-      provider.createContent(clientComposite, subColumns);
-    }
-    compositeExpansionStateChanging();
-  }
+	@Override
+	public void createContent(final Composite parent, int columns) {
+		// create expandable composite
+		m_expandableComposite = new ExpandableComposite(parent, SWT.NONE);
+		m_expandableComposite.setExpanded(true);
+		GridDataFactory.create(m_expandableComposite).fillH().grabH().spanH(columns);
+		m_expandableComposite.addExpansionListener(new ExpansionAdapter() {
+			@Override
+			public void expansionStateChanged(ExpansionEvent e) {
+				compositeExpansionStateChanging();
+				parent.layout();
+			}
+		});
+		// calculate columns
+		int subColumns = 0;
+		for (IUiContentProvider provider : m_providers) {
+			subColumns = Math.max(subColumns, provider.getNumberOfControls());
+		}
+		// create sub content providers
+		Composite clientComposite = new Composite(m_expandableComposite, SWT.NONE);
+		GridLayoutFactory.create(clientComposite).columns(subColumns).noMargins();
+		m_expandableComposite.setClient(clientComposite);
+		//
+		for (IUiContentProvider provider : m_providers) {
+			provider.createContent(clientComposite, subColumns);
+		}
+		compositeExpansionStateChanging();
+	}
 
-  private void compositeExpansionStateChanging() {
-    m_settings.put(m_settingKey, !m_expandableComposite.isExpanded());
-    if (m_expandableComposite.isExpanded()) {
-      m_expandableComposite.setText(m_captionPrefix
-          + Messages.UpdateStrategyPropertiesUiContentProvider_strategyProperties);
-    } else {
-      m_expandableComposite.setText(m_captionPrefix
-          + Messages.UpdateStrategyPropertiesUiContentProvider_strategyPropertiesDots);
-    }
-  }
+	private void compositeExpansionStateChanging() {
+		m_settings.put(m_settingKey, !m_expandableComposite.isExpanded());
+		if (m_expandableComposite.isExpanded()) {
+			m_expandableComposite.setText(m_captionPrefix
+					+ Messages.UpdateStrategyPropertiesUiContentProvider_strategyProperties);
+		} else {
+			m_expandableComposite.setText(m_captionPrefix
+					+ Messages.UpdateStrategyPropertiesUiContentProvider_strategyPropertiesDots);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Update
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void updateFromObject() throws Exception {
-    for (IUiContentProvider provider : m_providers) {
-      provider.updateFromObject();
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Update
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void updateFromObject() throws Exception {
+		for (IUiContentProvider provider : m_providers) {
+			provider.updateFromObject();
+		}
+	}
 
-  @Override
-  public void saveToObject() throws Exception {
-    for (IUiContentProvider provider : m_providers) {
-      provider.saveToObject();
-    }
-  }
+	@Override
+	public void saveToObject() throws Exception {
+		for (IUiContentProvider provider : m_providers) {
+			provider.saveToObject();
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/contentproviders/UpdateStrategyUiContentProvider.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/contentproviders/UpdateStrategyUiContentProvider.java
index 7a206d72b..72fb72204 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/contentproviders/UpdateStrategyUiContentProvider.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/contentproviders/UpdateStrategyUiContentProvider.java
@@ -22,31 +22,31 @@
  * @coverage bindings.rcp.ui
  */
 public final class UpdateStrategyUiContentProvider extends ChooseClassUiContentProvider {
-  private final UpdateStrategyInfo m_strategy;
+	private final UpdateStrategyInfo m_strategy;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public UpdateStrategyUiContentProvider(ChooseClassConfiguration configuration,
-      UpdateStrategyInfo strategy) {
-    super(configuration);
-    m_strategy = strategy;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public UpdateStrategyUiContentProvider(ChooseClassConfiguration configuration,
+			UpdateStrategyInfo strategy) {
+		super(configuration);
+		m_strategy = strategy;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Update
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void updateFromObject() {
-    setClassName(m_strategy.getStringValue());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Update
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void updateFromObject() {
+		setClassName(m_strategy.getStringValue());
+	}
 
-  @Override
-  public void saveToObject() {
-    m_strategy.setStringValue(getClassName());
-  }
+	@Override
+	public void saveToObject() {
+		m_strategy.setStringValue(getClassName());
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/contentproviders/ValidatorUiContentProvider.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/contentproviders/ValidatorUiContentProvider.java
index aec0ae716..f739fac3a 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/contentproviders/ValidatorUiContentProvider.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/contentproviders/ValidatorUiContentProvider.java
@@ -22,47 +22,47 @@
  * @coverage bindings.rcp.ui
  */
 public final class ValidatorUiContentProvider extends ChooseClassUiContentProvider {
-  private final UpdateValueStrategyInfo m_strategy;
-  private final String m_validatorName;
+	private final UpdateValueStrategyInfo m_strategy;
+	private final String m_validatorName;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ValidatorUiContentProvider(ChooseClassConfiguration configuration,
-      UpdateValueStrategyInfo strategy,
-      String validatorName) {
-    super(configuration);
-    m_strategy = strategy;
-    m_validatorName = validatorName;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ValidatorUiContentProvider(ChooseClassConfiguration configuration,
+			UpdateValueStrategyInfo strategy,
+			String validatorName) {
+		super(configuration);
+		m_strategy = strategy;
+		m_validatorName = validatorName;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Update
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void updateFromObject() {
-    ValidatorInfo validator = m_strategy.getValidator(m_validatorName);
-    setClassName(validator == null ? "N/S" : validator.getClassName());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Update
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void updateFromObject() {
+		ValidatorInfo validator = m_strategy.getValidator(m_validatorName);
+		setClassName(validator == null ? "N/S" : validator.getClassName());
+	}
 
-  @Override
-  public void saveToObject() {
-    String className = getClassName();
-    // check set or clear value
-    if ("N/S".equals(className)) {
-      m_strategy.setValidator(m_validatorName, null);
-    } else {
-      ValidatorInfo validator = m_strategy.getValidator(m_validatorName);
-      // check new validator or edit value
-      if (validator == null) {
-        m_strategy.setValidator(m_validatorName, new ValidatorInfo(className));
-      } else {
-        validator.setClassName(className);
-      }
-    }
-  }
+	@Override
+	public void saveToObject() {
+		String className = getClassName();
+		// check set or clear value
+		if ("N/S".equals(className)) {
+			m_strategy.setValidator(m_validatorName, null);
+		} else {
+			ValidatorInfo validator = m_strategy.getValidator(m_validatorName);
+			// check new validator or edit value
+			if (validator == null) {
+				m_strategy.setValidator(m_validatorName, new ValidatorInfo(className));
+			} else {
+				validator.setClassName(className);
+			}
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/contentproviders/ViewerColumnsConfiguration.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/contentproviders/ViewerColumnsConfiguration.java
index 79020c497..099a9f77a 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/contentproviders/ViewerColumnsConfiguration.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/contentproviders/ViewerColumnsConfiguration.java
@@ -26,56 +26,56 @@
  * @coverage bindings.rcp.ui
  */
 public final class ViewerColumnsConfiguration {
-  private final List<VirtualEditingSupportInfo> m_editingSupports = Lists.newArrayList();
-  private final AbstractViewerInputBindingInfo m_viewerBinding;
+	private final List<VirtualEditingSupportInfo> m_editingSupports = Lists.newArrayList();
+	private final AbstractViewerInputBindingInfo m_viewerBinding;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ViewerColumnsConfiguration(AbstractViewerInputBindingInfo viewerBinding,
-      VirtualEditingSupportInfo.IElementTypeProvider elementTypeProvider,
-      List<WidgetBindableInfo> viewerColumns,
-      List<EditingSupportInfo> editingSupports) throws Exception {
-    m_viewerBinding = viewerBinding;
-    for (WidgetBindableInfo vieweColumn : viewerColumns) {
-      boolean newColumn = true;
-      // find exist support
-      for (EditingSupportInfo editingSupport : editingSupports) {
-        if (editingSupport.getViewerColumn() == vieweColumn) {
-          newColumn = false;
-          m_editingSupports.add(new VirtualEditingSupportInfo(elementTypeProvider, editingSupport));
-          break;
-        }
-      }
-      if (newColumn) {
-        // create new support
-        m_editingSupports.add(new VirtualEditingSupportInfo(elementTypeProvider,
-            viewerBinding,
-            vieweColumn));
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ViewerColumnsConfiguration(AbstractViewerInputBindingInfo viewerBinding,
+			VirtualEditingSupportInfo.IElementTypeProvider elementTypeProvider,
+			List<WidgetBindableInfo> viewerColumns,
+			List<EditingSupportInfo> editingSupports) throws Exception {
+		m_viewerBinding = viewerBinding;
+		for (WidgetBindableInfo vieweColumn : viewerColumns) {
+			boolean newColumn = true;
+			// find exist support
+			for (EditingSupportInfo editingSupport : editingSupports) {
+				if (editingSupport.getViewerColumn() == vieweColumn) {
+					newColumn = false;
+					m_editingSupports.add(new VirtualEditingSupportInfo(elementTypeProvider, editingSupport));
+					break;
+				}
+			}
+			if (newColumn) {
+				// create new support
+				m_editingSupports.add(new VirtualEditingSupportInfo(elementTypeProvider,
+						viewerBinding,
+						vieweColumn));
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public List<VirtualEditingSupportInfo> getEditingSupports() {
-    return m_editingSupports;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public List<VirtualEditingSupportInfo> getEditingSupports() {
+		return m_editingSupports;
+	}
 
-  public void saveObjects() throws Exception {
-    // clear old supports
-    List<EditingSupportInfo> editingSupports = m_viewerBinding.getEditingSupports();
-    editingSupports.clear();
-    // add new supports
-    for (VirtualEditingSupportInfo editingSupport : m_editingSupports) {
-      if (!editingSupport.isEmpty()) {
-        editingSupports.add(editingSupport.createOrUpdateEditingSupport());
-      }
-    }
-  }
+	public void saveObjects() throws Exception {
+		// clear old supports
+		List<EditingSupportInfo> editingSupports = m_viewerBinding.getEditingSupports();
+		editingSupports.clear();
+		// add new supports
+		for (VirtualEditingSupportInfo editingSupport : m_editingSupports) {
+			if (!editingSupport.isEmpty()) {
+				editingSupports.add(editingSupport.createOrUpdateEditingSupport());
+			}
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/contentproviders/ViewerColumnsUiContentProvider.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/contentproviders/ViewerColumnsUiContentProvider.java
index 6be9ef91c..6875d8245 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/contentproviders/ViewerColumnsUiContentProvider.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/contentproviders/ViewerColumnsUiContentProvider.java
@@ -56,245 +56,245 @@
  * @coverage bindings.rcp.ui
  */
 public class ViewerColumnsUiContentProvider extends UiContentProviderAdapter {
-  private static final String SETTING_KEY = "Expand_State";
-  private final ViewerColumnsConfiguration m_configuration;
-  private final IDialogSettings m_settings;
-  private ExpandableComposite m_expandableComposite;
-  private TableViewer m_tableViewer;
-  private Button m_editButton;
-  private Button m_deleteButton;
+	private static final String SETTING_KEY = "Expand_State";
+	private final ViewerColumnsConfiguration m_configuration;
+	private final IDialogSettings m_settings;
+	private ExpandableComposite m_expandableComposite;
+	private TableViewer m_tableViewer;
+	private Button m_editButton;
+	private Button m_deleteButton;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ViewerColumnsUiContentProvider(ViewerColumnsConfiguration configuration) {
-    m_configuration = configuration;
-    IDialogSettings mainSettings = Activator.getDefault().getDialogSettings();
-    m_settings = UiUtils.getSettings(mainSettings, getClass().getName());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ViewerColumnsUiContentProvider(ViewerColumnsConfiguration configuration) {
+		m_configuration = configuration;
+		IDialogSettings mainSettings = Activator.getDefault().getDialogSettings();
+		m_settings = UiUtils.getSettings(mainSettings, getClass().getName());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public int getNumberOfControls() {
-    return 1;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public int getNumberOfControls() {
+		return 1;
+	}
 
-  @Override
-  public void createContent(final Composite parent, int columns) {
-    // create expandable composite
-    m_expandableComposite = new ExpandableComposite(parent, SWT.NONE);
-    m_expandableComposite.setText(Messages.ViewerColumnsUiContentProvider_viewerColumns);
-    m_expandableComposite.setExpanded(true);
-    GridDataFactory.create(m_expandableComposite).fillH().grabH().spanH(columns);
-    m_expandableComposite.addExpansionListener(new IExpansionListener() {
-      @Override
-      public void expansionStateChanging(ExpansionEvent e) {
-        m_settings.put(SETTING_KEY, !m_expandableComposite.isExpanded());
-        if (m_expandableComposite.isExpanded()) {
-          m_expandableComposite.setText(Messages.ViewerColumnsUiContentProvider_viewerColumnsDots);
-        } else {
-          m_expandableComposite.setText(Messages.ViewerColumnsUiContentProvider_viewerColumns);
-        }
-      }
+	@Override
+	public void createContent(final Composite parent, int columns) {
+		// create expandable composite
+		m_expandableComposite = new ExpandableComposite(parent, SWT.NONE);
+		m_expandableComposite.setText(Messages.ViewerColumnsUiContentProvider_viewerColumns);
+		m_expandableComposite.setExpanded(true);
+		GridDataFactory.create(m_expandableComposite).fillH().grabH().spanH(columns);
+		m_expandableComposite.addExpansionListener(new IExpansionListener() {
+			@Override
+			public void expansionStateChanging(ExpansionEvent e) {
+				m_settings.put(SETTING_KEY, !m_expandableComposite.isExpanded());
+				if (m_expandableComposite.isExpanded()) {
+					m_expandableComposite.setText(Messages.ViewerColumnsUiContentProvider_viewerColumnsDots);
+				} else {
+					m_expandableComposite.setText(Messages.ViewerColumnsUiContentProvider_viewerColumns);
+				}
+			}
 
-      @Override
-      public void expansionStateChanged(ExpansionEvent e) {
-        parent.layout();
-      }
-    });
-    // create sub content providers
-    Composite clientComposite = new Composite(m_expandableComposite, SWT.NONE);
-    GridLayoutFactory.create(clientComposite).columns(2).noMargins();
-    m_expandableComposite.setClient(clientComposite);
-    // buttons
-    Composite toolbar = new Composite(clientComposite, SWT.NONE);
-    GridLayoutFactory.create(toolbar).noMargins();
-    // edit
-    m_editButton = new Button(toolbar, SWT.NONE);
-    GridDataFactory.create(m_editButton).fillH().grabH();
-    m_editButton.setText(Messages.ViewerColumnsUiContentProvider_editButton);
-    m_editButton.addSelectionListener(new SelectionAdapter() {
-      @Override
-      public void widgetSelected(SelectionEvent e) {
-        configureEditingSupport();
-      }
-    });
-    // delete
-    m_deleteButton = new Button(toolbar, SWT.NONE);
-    GridDataFactory.create(m_deleteButton).fillH().grabH();
-    m_deleteButton.setText(Messages.ViewerColumnsUiContentProvider_deleteButton);
-    m_deleteButton.addSelectionListener(new SelectionAdapter() {
-      @Override
-      public void widgetSelected(SelectionEvent e) {
-        deleteEditingSupport();
-      }
-    });
-    // viewer for supports
-    m_tableViewer =
-        new TableViewer(clientComposite, SWT.BORDER
-            | SWT.FULL_SELECTION
-            | SWT.H_SCROLL
-            | SWT.V_SCROLL);
-    GridDataFactory.create(m_tableViewer.getTable()).fillH().grabH().hintVC(7);
-    m_tableViewer.setContentProvider(new ArrayContentProvider());
-    m_tableViewer.setLabelProvider(new EditingSupportLabelProvider());
-    m_tableViewer.addPostSelectionChangedListener(new ISelectionChangedListener() {
-      @Override
-      public void selectionChanged(SelectionChangedEvent event) {
-        calculateButtons();
-      }
-    });
-    m_tableViewer.addDoubleClickListener(new IDoubleClickListener() {
-      @Override
-      public void doubleClick(DoubleClickEvent event) {
-        if (!event.getSelection().isEmpty()) {
-          configureEditingSupport();
-        }
-      }
-    });
-    //
-    TableFactory factory =
-        TableFactory.modify(m_tableViewer).headerVisible(true).linesVisible(true);
-    factory.newColumn().text(Messages.ViewerColumnsUiContentProvider_viewerColumn).width(250);
-    factory.newColumn().text(Messages.ViewerColumnsUiContentProvider_cellEditorColumn).width(300);
-    factory.newColumn().text(Messages.ViewerColumnsUiContentProvider_elementPropertyColumn).width(
-        300);
-  }
+			@Override
+			public void expansionStateChanged(ExpansionEvent e) {
+				parent.layout();
+			}
+		});
+		// create sub content providers
+		Composite clientComposite = new Composite(m_expandableComposite, SWT.NONE);
+		GridLayoutFactory.create(clientComposite).columns(2).noMargins();
+		m_expandableComposite.setClient(clientComposite);
+		// buttons
+		Composite toolbar = new Composite(clientComposite, SWT.NONE);
+		GridLayoutFactory.create(toolbar).noMargins();
+		// edit
+		m_editButton = new Button(toolbar, SWT.NONE);
+		GridDataFactory.create(m_editButton).fillH().grabH();
+		m_editButton.setText(Messages.ViewerColumnsUiContentProvider_editButton);
+		m_editButton.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				configureEditingSupport();
+			}
+		});
+		// delete
+		m_deleteButton = new Button(toolbar, SWT.NONE);
+		GridDataFactory.create(m_deleteButton).fillH().grabH();
+		m_deleteButton.setText(Messages.ViewerColumnsUiContentProvider_deleteButton);
+		m_deleteButton.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				deleteEditingSupport();
+			}
+		});
+		// viewer for supports
+		m_tableViewer =
+				new TableViewer(clientComposite, SWT.BORDER
+						| SWT.FULL_SELECTION
+						| SWT.H_SCROLL
+						| SWT.V_SCROLL);
+		GridDataFactory.create(m_tableViewer.getTable()).fillH().grabH().hintVC(7);
+		m_tableViewer.setContentProvider(new ArrayContentProvider());
+		m_tableViewer.setLabelProvider(new EditingSupportLabelProvider());
+		m_tableViewer.addPostSelectionChangedListener(new ISelectionChangedListener() {
+			@Override
+			public void selectionChanged(SelectionChangedEvent event) {
+				calculateButtons();
+			}
+		});
+		m_tableViewer.addDoubleClickListener(new IDoubleClickListener() {
+			@Override
+			public void doubleClick(DoubleClickEvent event) {
+				if (!event.getSelection().isEmpty()) {
+					configureEditingSupport();
+				}
+			}
+		});
+		//
+		TableFactory factory =
+				TableFactory.modify(m_tableViewer).headerVisible(true).linesVisible(true);
+		factory.newColumn().text(Messages.ViewerColumnsUiContentProvider_viewerColumn).width(250);
+		factory.newColumn().text(Messages.ViewerColumnsUiContentProvider_cellEditorColumn).width(300);
+		factory.newColumn().text(Messages.ViewerColumnsUiContentProvider_elementPropertyColumn).width(
+				300);
+	}
 
-  private void calculateButtons() {
-    IStructuredSelection selection = (IStructuredSelection) m_tableViewer.getSelection();
-    if (selection.isEmpty()) {
-      m_editButton.setEnabled(false);
-      m_deleteButton.setEnabled(false);
-    } else {
-      m_editButton.setEnabled(true);
-      VirtualEditingSupportInfo editingSupport =
-          (VirtualEditingSupportInfo) selection.getFirstElement();
-      m_deleteButton.setEnabled(!editingSupport.isEmpty());
-    }
-  }
+	private void calculateButtons() {
+		IStructuredSelection selection = (IStructuredSelection) m_tableViewer.getSelection();
+		if (selection.isEmpty()) {
+			m_editButton.setEnabled(false);
+			m_deleteButton.setEnabled(false);
+		} else {
+			m_editButton.setEnabled(true);
+			VirtualEditingSupportInfo editingSupport =
+					(VirtualEditingSupportInfo) selection.getFirstElement();
+			m_deleteButton.setEnabled(!editingSupport.isEmpty());
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Handle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void configureEditingSupport() {
-    try {
-      // prepare selection
-      IStructuredSelection selection = (IStructuredSelection) m_tableViewer.getSelection();
-      VirtualEditingSupportInfo editingSupport =
-          (VirtualEditingSupportInfo) selection.getFirstElement();
-      // create providers
-      List<IUiContentProvider> providers = Lists.newArrayList();
-      editingSupport.createContentProviders(providers);
-      // open dialog
-      SimpleBindDialog dialog =
-          new SimpleBindDialog(m_editButton.getShell(),
-              Activator.getDefault(),
-              providers,
-              Messages.ViewerColumnsUiContentProvider_configureEditingSupportLabel,
-              Messages.ViewerColumnsUiContentProvider_configureEditingSupportProperties,
-              Messages.ViewerColumnsUiContentProvider_configureEditingSupportMessage);
-      if (dialog.open() == Window.OK) {
-        m_tableViewer.refresh();
-      }
-    } catch (Throwable e) {
-      DesignerPlugin.log(e);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Handle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void configureEditingSupport() {
+		try {
+			// prepare selection
+			IStructuredSelection selection = (IStructuredSelection) m_tableViewer.getSelection();
+			VirtualEditingSupportInfo editingSupport =
+					(VirtualEditingSupportInfo) selection.getFirstElement();
+			// create providers
+			List<IUiContentProvider> providers = Lists.newArrayList();
+			editingSupport.createContentProviders(providers);
+			// open dialog
+			SimpleBindDialog dialog =
+					new SimpleBindDialog(m_editButton.getShell(),
+							Activator.getDefault(),
+							providers,
+							Messages.ViewerColumnsUiContentProvider_configureEditingSupportLabel,
+							Messages.ViewerColumnsUiContentProvider_configureEditingSupportProperties,
+							Messages.ViewerColumnsUiContentProvider_configureEditingSupportMessage);
+			if (dialog.open() == Window.OK) {
+				m_tableViewer.refresh();
+			}
+		} catch (Throwable e) {
+			DesignerPlugin.log(e);
+		}
+	}
 
-  private void deleteEditingSupport() {
-    // prepare selection
-    IStructuredSelection selection = (IStructuredSelection) m_tableViewer.getSelection();
-    VirtualEditingSupportInfo editingSupport =
-        (VirtualEditingSupportInfo) selection.getFirstElement();
-    // do delete
-    editingSupport.delete();
-    // update table
-    m_tableViewer.refresh();
-  }
+	private void deleteEditingSupport() {
+		// prepare selection
+		IStructuredSelection selection = (IStructuredSelection) m_tableViewer.getSelection();
+		VirtualEditingSupportInfo editingSupport =
+				(VirtualEditingSupportInfo) selection.getFirstElement();
+		// do delete
+		editingSupport.delete();
+		// update table
+		m_tableViewer.refresh();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Update
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void updateFromObject() throws Exception {
-    m_tableViewer.setInput(m_configuration.getEditingSupports());
-    calculateButtons();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Update
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void updateFromObject() throws Exception {
+		m_tableViewer.setInput(m_configuration.getEditingSupports());
+		calculateButtons();
+	}
 
-  @Override
-  public void saveToObject() throws Exception {
-    m_configuration.saveObjects();
-  }
+	@Override
+	public void saveToObject() throws Exception {
+		m_configuration.saveObjects();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // LabelProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static class EditingSupportLabelProvider extends LabelProvider
-      implements
-        ITableLabelProvider {
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // ITableLabelProvider
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public String getColumnText(Object element, int column) {
-      final VirtualEditingSupportInfo editingSupport = (VirtualEditingSupportInfo) element;
-      switch (column) {
-        case 0 :
-          // Viewer column
-          return ExecutionUtils.runObjectLog(new RunnableObjectEx<String>() {
-            @Override
-            public String runObject() throws Exception {
-              return editingSupport.getViewerColumn().getPresentation().getText();
-            }
-          }, null);
-        case 1 :
-          // CellEditor
-          return ExecutionUtils.runObjectLog(new RunnableObjectEx<String>() {
-            @Override
-            public String runObject() throws Exception {
-              return editingSupport.getCellEditorPresentationText();
-            }
-          }, null);
-        case 2 :
-          // Element property
-          return ExecutionUtils.runObjectLog(new RunnableObjectEx<String>() {
-            @Override
-            public String runObject() throws Exception {
-              return editingSupport.getElementPropertyPresentationText();
-            }
-          }, null);
-      }
-      return null;
-    }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// LabelProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static class EditingSupportLabelProvider extends LabelProvider
+	implements
+	ITableLabelProvider {
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// ITableLabelProvider
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public String getColumnText(Object element, int column) {
+			final VirtualEditingSupportInfo editingSupport = (VirtualEditingSupportInfo) element;
+			switch (column) {
+			case 0 :
+				// Viewer column
+				return ExecutionUtils.runObjectLog(new RunnableObjectEx<String>() {
+					@Override
+					public String runObject() throws Exception {
+						return editingSupport.getViewerColumn().getPresentation().getText();
+					}
+				}, null);
+			case 1 :
+				// CellEditor
+				return ExecutionUtils.runObjectLog(new RunnableObjectEx<String>() {
+					@Override
+					public String runObject() throws Exception {
+						return editingSupport.getCellEditorPresentationText();
+					}
+				}, null);
+			case 2 :
+				// Element property
+				return ExecutionUtils.runObjectLog(new RunnableObjectEx<String>() {
+					@Override
+					public String runObject() throws Exception {
+						return editingSupport.getElementPropertyPresentationText();
+					}
+				}, null);
+			}
+			return null;
+		}
 
-    @Override
-    public Image getColumnImage(Object element, int column) {
-      if (column == 0) {
-        // Viewer column
-        final VirtualEditingSupportInfo editingSupport = (VirtualEditingSupportInfo) element;
-        return ExecutionUtils.runObjectLog(new RunnableObjectEx<Image>() {
-          @Override
-          public Image runObject() throws Exception {
-            return editingSupport.getViewerColumn().getPresentation().getImage();
-          }
-        }, null);
-      }
-      return null;
-    }
-  }
+		@Override
+		public Image getColumnImage(Object element, int column) {
+			if (column == 0) {
+				// Viewer column
+				final VirtualEditingSupportInfo editingSupport = (VirtualEditingSupportInfo) element;
+				return ExecutionUtils.runObjectLog(new RunnableObjectEx<Image>() {
+					@Override
+					public Image runObject() throws Exception {
+						return editingSupport.getViewerColumn().getPresentation().getImage();
+					}
+				}, null);
+			}
+			return null;
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/filter/AdvancedPropertyFilter.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/filter/AdvancedPropertyFilter.java
index 66b10fbc8..358bbbb97 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/filter/AdvancedPropertyFilter.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/filter/AdvancedPropertyFilter.java
@@ -26,23 +26,23 @@
  * @coverage bindings.rcp.ui
  */
 public final class AdvancedPropertyFilter extends PropertyFilter {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AdvancedPropertyFilter() {
-    super(Messages.AdvancedPropertyFilter_title, Activator.getImage("advanced.png"));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AdvancedPropertyFilter() {
+		super(Messages.AdvancedPropertyFilter_title, Activator.getImage("advanced.png"));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // PropertyFilter
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean select(Viewer viewer, IObserveInfo propertyObserve) {
-    IObserveDecoration observeDecoration = (IObserveDecoration) propertyObserve;
-    return observeDecoration.getDecorator() != IObserveDecorator.HIDDEN;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// PropertyFilter
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean select(Viewer viewer, IObserveInfo propertyObserve) {
+		IObserveDecoration observeDecoration = (IObserveDecoration) propertyObserve;
+		return observeDecoration.getDecorator() != IObserveDecorator.HIDDEN;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/filter/TypesPropertyFilter.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/filter/TypesPropertyFilter.java
index 0e2a473f6..888168607 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/filter/TypesPropertyFilter.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/filter/TypesPropertyFilter.java
@@ -23,25 +23,25 @@
  * @coverage bindings.rcp.ui
  */
 public final class TypesPropertyFilter
-    extends
-      org.eclipse.wb.internal.core.databinding.ui.filter.TypesPropertyFilter {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public TypesPropertyFilter(String name, Image image, Class<?>... types) {
-    super(name, image, types);
-  }
+extends
+org.eclipse.wb.internal.core.databinding.ui.filter.TypesPropertyFilter {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public TypesPropertyFilter(String name, Image image, Class<?>... types) {
+		super(name, image, types);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // PropertyFilter
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean select(Viewer viewer, IObserveInfo propertyObserve) {
-    BindableInfo bindable = (BindableInfo) propertyObserve;
-    return select(bindable.getObjectType());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// PropertyFilter
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean select(Viewer viewer, IObserveInfo propertyObserve) {
+		BindableInfo bindable = (BindableInfo) propertyObserve;
+		return select(bindable.getObjectType());
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/property/BindingProperty.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/property/BindingProperty.java
index f713a1c58..61fafde44 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/property/BindingProperty.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/property/BindingProperty.java
@@ -21,23 +21,23 @@
  * @coverage bindings.rcp.ui.properties
  */
 public class BindingProperty extends AbstractBindingProperty {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public BindingProperty(Context context) {
-    super(context);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public BindingProperty(Context context) {
+		super(context);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AbstractBindingProperty
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getText() throws Exception {
-    int column = m_isTarget ? 2 : 1;
-    return BindingLabelProvider.INSTANCE.getColumnText(m_binding, column);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AbstractBindingProperty
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getText() throws Exception {
+		int column = m_isTarget ? 2 : 1;
+		return BindingLabelProvider.INSTANCE.getColumnText(m_binding, column);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/property/BindingsProperty.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/property/BindingsProperty.java
index 9d6374cce..8464b7bdb 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/property/BindingsProperty.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/property/BindingsProperty.java
@@ -40,80 +40,80 @@
  * @coverage bindings.rcp.ui.properties
  */
 public class BindingsProperty extends AbstractBindingsProperty {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public BindingsProperty(Context context) {
-    super(context);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public BindingsProperty(Context context) {
+		super(context);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AbstractBindingsProperty
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Property[] createProperties() throws Exception {
-    DatabindingsProvider provider = (DatabindingsProvider) m_context.provider;
-    if (m_context.objectInfo.getParent() instanceof NonVisualBeanContainerInfo) {
-      BeansObserveTypeContainer container =
-          (BeansObserveTypeContainer) provider.getContainer(ObserveType.BEANS);
-      m_context.observeObject = container.resolve(m_context.javaInfo());
-    } else {
-      WidgetsObserveTypeContainer container =
-          (WidgetsObserveTypeContainer) provider.getContainer(ObserveType.WIDGETS);
-      m_context.observeObject = container.resolve(m_context.javaInfo());
-    }
-    Assert.isNotNull(m_context.observeObject, SynchronizeManager.class.getName()
-        + " isn't work ("
-        + m_context.objectInfo
-        + ")");
-    List<IObserveInfo> observes =
-        m_context.observeObject.getChildren(ChildrenContext.ChildrenForPropertiesTable);
-    //
-    Property[] properties = new Property[observes.size()];
-    for (int i = 0; i < properties.length; i++) {
-      IObserveInfo observeProperty = observes.get(i);
-      if ("input".equals(observeProperty.getPresentation().getText())) {
-        properties[i] = new InputObserveProperty(m_context, observeProperty);
-      } else {
-        properties[i] = new ObserveProperty(m_context, observeProperty);
-      }
-    }
-    return properties;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AbstractBindingsProperty
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Property[] createProperties() throws Exception {
+		DatabindingsProvider provider = (DatabindingsProvider) m_context.provider;
+		if (m_context.objectInfo.getParent() instanceof NonVisualBeanContainerInfo) {
+			BeansObserveTypeContainer container =
+					(BeansObserveTypeContainer) provider.getContainer(ObserveType.BEANS);
+			m_context.observeObject = container.resolve(m_context.javaInfo());
+		} else {
+			WidgetsObserveTypeContainer container =
+					(WidgetsObserveTypeContainer) provider.getContainer(ObserveType.WIDGETS);
+			m_context.observeObject = container.resolve(m_context.javaInfo());
+		}
+		Assert.isNotNull(m_context.observeObject, SynchronizeManager.class.getName()
+				+ " isn't work ("
+				+ m_context.objectInfo
+				+ ")");
+		List<IObserveInfo> observes =
+				m_context.observeObject.getChildren(ChildrenContext.ChildrenForPropertiesTable);
+		//
+		Property[] properties = new Property[observes.size()];
+		for (int i = 0; i < properties.length; i++) {
+			IObserveInfo observeProperty = observes.get(i);
+			if ("input".equals(observeProperty.getPresentation().getText())) {
+				properties[i] = new InputObserveProperty(m_context, observeProperty);
+			} else {
+				properties[i] = new ObserveProperty(m_context, observeProperty);
+			}
+		}
+		return properties;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Menu
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected boolean checkEquals(IObserveInfo observe) throws Exception {
-    if (observe instanceof WidgetBindableInfo) {
-      WidgetBindableInfo bindable = (WidgetBindableInfo) observe;
-      if (m_context.objectInfo == bindable.getJavaInfo()) {
-        return true;
-      }
-    }
-    //
-    String reference = JavaInfoReferenceProvider.getReference(m_context.javaInfo());
-    BindableInfo bindable = (BindableInfo) observe;
-    return reference.equals(bindable.getReference());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Menu
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected boolean checkEquals(IObserveInfo observe) throws Exception {
+		if (observe instanceof WidgetBindableInfo) {
+			WidgetBindableInfo bindable = (WidgetBindableInfo) observe;
+			if (m_context.objectInfo == bindable.getJavaInfo()) {
+				return true;
+			}
+		}
+		//
+		String reference = JavaInfoReferenceProvider.getReference(m_context.javaInfo());
+		BindableInfo bindable = (BindableInfo) observe;
+		return reference.equals(bindable.getReference());
+	}
 
-  @Override
-  protected void addBindingAction(IMenuManager menu,
-      IBindingInfo binding,
-      IObserveInfo observeProperty,
-      boolean isTarget) throws Exception {
-    BindingAction action = new BindingAction(m_context, binding);
-    action.setText(observeProperty.getPresentation().getText()
-        + ": "
-        + BindingLabelProvider.INSTANCE.getColumnText(binding, isTarget ? 2 : 1));
-    action.setIcon(BindingLabelProvider.INSTANCE.getColumnImage(binding, 0));
-    menu.add(action);
-  }
+	@Override
+	protected void addBindingAction(IMenuManager menu,
+			IBindingInfo binding,
+			IObserveInfo observeProperty,
+			boolean isTarget) throws Exception {
+		BindingAction action = new BindingAction(m_context, binding);
+		action.setText(observeProperty.getPresentation().getText()
+				+ ": "
+				+ BindingLabelProvider.INSTANCE.getColumnText(binding, isTarget ? 2 : 1));
+		action.setIcon(BindingLabelProvider.INSTANCE.getColumnImage(binding, 0));
+		menu.add(action);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/property/InputObserveProperty.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/property/InputObserveProperty.java
index 50f974625..feb5210cf 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/property/InputObserveProperty.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/property/InputObserveProperty.java
@@ -27,30 +27,30 @@
  * @coverage bindings.rcp.ui.properties
  */
 public class InputObserveProperty extends SingleObserveBindingProperty {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public InputObserveProperty(Context context, IObserveInfo observeProperty) throws Exception {
-    super(context, observeProperty);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public InputObserveProperty(Context context, IObserveInfo observeProperty) throws Exception {
+		super(context, observeProperty);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // SingleObserveBindingProperty
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected IBindingInfo getBinding() throws Exception {
-    BindableInfo observeProperty = (BindableInfo) m_observeProperty;
-    List<AbstractBindingInfo> bindings = observeProperty.getBindings();
-    return bindings.isEmpty() ? null : bindings.get(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// SingleObserveBindingProperty
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected IBindingInfo getBinding() throws Exception {
+		BindableInfo observeProperty = (BindableInfo) m_observeProperty;
+		List<AbstractBindingInfo> bindings = observeProperty.getBindings();
+		return bindings.isEmpty() ? null : bindings.get(0);
+	}
 
-  @Override
-  protected String getText() throws Exception {
-    IBindingInfo binding = getBinding();
-    return binding == null ? "" : BindingLabelProvider.INSTANCE.getColumnText(binding, 2);
-  }
+	@Override
+	protected String getText() throws Exception {
+		IBindingInfo binding = getBinding();
+		return binding == null ? "" : BindingLabelProvider.INSTANCE.getColumnText(binding, 2);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/property/JavaInfoPropertiesManager.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/property/JavaInfoPropertiesManager.java
index 9a6ae32d0..da8340a0c 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/property/JavaInfoPropertiesManager.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/property/JavaInfoPropertiesManager.java
@@ -30,36 +30,36 @@
  * @coverage bindings.rcp.ui.properties
  */
 public class JavaInfoPropertiesManager extends AbstractJavaInfoPropertiesManager {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public JavaInfoPropertiesManager(IDatabindingsProvider provider, JavaInfo javaInfoRoot) {
-    super(provider, javaInfoRoot);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public JavaInfoPropertiesManager(IDatabindingsProvider provider, JavaInfo javaInfoRoot) {
+		super(provider, javaInfoRoot);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AbstractJavaInfoPropertiesManager
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected boolean isCreateProperty(ObjectInfo objectInfo) throws Exception {
-    JavaInfo javaInfo = (JavaInfo) objectInfo;
-    if (JavaInfoUtils.hasTrueParameter(javaInfo, "databinding.disable")) {
-      return false;
-    }
-    DatabindingsProvider provider = (DatabindingsProvider) m_provider;
-    boolean nonVisual =
-        !provider.isController() && javaInfo.getParent() instanceof NonVisualBeanContainerInfo;
-    return (javaInfo instanceof AbstractComponentInfo || javaInfo instanceof ViewerInfo || nonVisual)
-        && JavaInfoReferenceProvider.getReference(javaInfo) != null
-        && (PropertiesSupport.isObservableInfo(javaInfo) || nonVisual);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AbstractJavaInfoPropertiesManager
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected boolean isCreateProperty(ObjectInfo objectInfo) throws Exception {
+		JavaInfo javaInfo = (JavaInfo) objectInfo;
+		if (JavaInfoUtils.hasTrueParameter(javaInfo, "databinding.disable")) {
+			return false;
+		}
+		DatabindingsProvider provider = (DatabindingsProvider) m_provider;
+		boolean nonVisual =
+				!provider.isController() && javaInfo.getParent() instanceof NonVisualBeanContainerInfo;
+		return (javaInfo instanceof AbstractComponentInfo || javaInfo instanceof ViewerInfo || nonVisual)
+				&& JavaInfoReferenceProvider.getReference(javaInfo) != null
+				&& (PropertiesSupport.isObservableInfo(javaInfo) || nonVisual);
+	}
 
-  @Override
-  protected AbstractBindingsProperty createProperty(ObjectInfo objectInfo) throws Exception {
-    return new BindingsProperty(new Context(Activator.getDefault(), m_provider, objectInfo));
-  }
+	@Override
+	protected AbstractBindingsProperty createProperty(ObjectInfo objectInfo) throws Exception {
+		return new BindingsProperty(new Context(Activator.getDefault(), m_provider, objectInfo));
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/property/ObserveProperty.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/property/ObserveProperty.java
index 6d04d70cd..38d6cf0bb 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/property/ObserveProperty.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/property/ObserveProperty.java
@@ -26,32 +26,32 @@
  * @coverage bindings.rcp.ui.properties
  */
 public class ObserveProperty extends AbstractObserveProperty {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ObserveProperty(Context context, IObserveInfo observeProperty) throws Exception {
-    super(context, observeProperty);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ObserveProperty(Context context, IObserveInfo observeProperty) throws Exception {
+		super(context, observeProperty);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AbstractObserveProperty
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void getBindings(List<IBindingInfo> bindings, List<Boolean> isTargets) throws Exception {
-    BindableInfo observeProperty = (BindableInfo) m_observeProperty;
-    bindings.addAll(observeProperty.getBindings());
-    //
-    for (IBindingInfo binding : bindings) {
-      isTargets.add(binding.getTargetProperty() == m_observeProperty);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AbstractObserveProperty
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void getBindings(List<IBindingInfo> bindings, List<Boolean> isTargets) throws Exception {
+		BindableInfo observeProperty = (BindableInfo) m_observeProperty;
+		bindings.addAll(observeProperty.getBindings());
+		//
+		for (IBindingInfo binding : bindings) {
+			isTargets.add(binding.getTargetProperty() == m_observeProperty);
+		}
+	}
 
-  @Override
-  public AbstractBindingProperty createBindingProperty() throws Exception {
-    return new BindingProperty(m_context);
-  }
+	@Override
+	public AbstractBindingProperty createBindingProperty() throws Exception {
+		return new BindingProperty(m_context);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/providers/BindingLabelProvider.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/providers/BindingLabelProvider.java
index d3d492944..adc3c781a 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/providers/BindingLabelProvider.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/providers/BindingLabelProvider.java
@@ -35,125 +35,125 @@
  * @coverage bindings.rcp.ui
  */
 public final class BindingLabelProvider extends LabelProvider implements ITableLabelProvider {
-  public static final Image BIND_VALUE_IMAGE = Activator.getImage("bindValue.png");
-  private static final Image BIND_LIST_IMAGE = Activator.getImage("bindList.png");
-  private static final Image BIND_SET_IMAGE = Activator.getImage("bindSet.png");
-  public static final Image CLOCK_DECORATION_IMAGE = Activator.getImage("clock.png");
-  public static final BindingLabelProvider INSTANCE = new BindingLabelProvider();
+	public static final Image BIND_VALUE_IMAGE = Activator.getImage("bindValue.png");
+	private static final Image BIND_LIST_IMAGE = Activator.getImage("bindList.png");
+	private static final Image BIND_SET_IMAGE = Activator.getImage("bindSet.png");
+	public static final Image CLOCK_DECORATION_IMAGE = Activator.getImage("clock.png");
+	public static final BindingLabelProvider INSTANCE = new BindingLabelProvider();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ITableLabelProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getColumnText(final Object element, final int column) {
-    return ExecutionUtils.runObjectLog(new RunnableObjectEx<String>() {
-      @Override
-      public String runObject() throws Exception {
-        if (element instanceof BindingInfo) {
-          return getBindingColumnText((BindingInfo) element, column);
-        }
-        return getViewerBindingColumnText((AbstractViewerInputBindingInfo) element, column);
-      }
-    }, "<exception, see log>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ITableLabelProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getColumnText(final Object element, final int column) {
+		return ExecutionUtils.runObjectLog(new RunnableObjectEx<String>() {
+			@Override
+			public String runObject() throws Exception {
+				if (element instanceof BindingInfo) {
+					return getBindingColumnText((BindingInfo) element, column);
+				}
+				return getViewerBindingColumnText((AbstractViewerInputBindingInfo) element, column);
+			}
+		}, "<exception, see log>");
+	}
 
-  /**
-   * Column text for simple bindings.
-   */
-  private static String getBindingColumnText(BindingInfo binding, int column) throws Exception {
-    switch (column) {
-      case 1 :
-        // target
-        return binding.getTargetObservable().getPresentationText();
-      case 2 :
-        // model
-        return binding.getModelObservable().getPresentationText();
-      case 3 :
-        // target strategy
-        return binding.getTargetStrategy().getPresentationText();
-      case 4 :
-        // model strategy
-        return binding.getModelStrategy().getPresentationText();
-      case 5 :
-        // binding
-        return binding.getVariableIdentifier();
-      default :
-        return null;
-    }
-  }
+	/**
+	 * Column text for simple bindings.
+	 */
+	private static String getBindingColumnText(BindingInfo binding, int column) throws Exception {
+		switch (column) {
+		case 1 :
+			// target
+			return binding.getTargetObservable().getPresentationText();
+		case 2 :
+			// model
+			return binding.getModelObservable().getPresentationText();
+		case 3 :
+			// target strategy
+			return binding.getTargetStrategy().getPresentationText();
+		case 4 :
+			// model strategy
+			return binding.getModelStrategy().getPresentationText();
+		case 5 :
+			// binding
+			return binding.getVariableIdentifier();
+		default :
+			return null;
+		}
+	}
 
-  /**
-   * Column text for viewer input bindings.
-   */
-  private static String getViewerBindingColumnText(AbstractViewerInputBindingInfo binding,
-      int column) throws Exception {
-    switch (column) {
-      case 1 :
-        // target
-        return binding.getPresentationText();
-      case 2 :
-        // model
-        return binding.getInputObservable().getPresentationText();
-      case 5 :
-        // binding
-        return binding.getVariableIdentifier();
-      default :
-        return null;
-    }
-  }
+	/**
+	 * Column text for viewer input bindings.
+	 */
+	private static String getViewerBindingColumnText(AbstractViewerInputBindingInfo binding,
+			int column) throws Exception {
+		switch (column) {
+		case 1 :
+			// target
+			return binding.getPresentationText();
+		case 2 :
+			// model
+			return binding.getInputObservable().getPresentationText();
+		case 5 :
+			// binding
+			return binding.getVariableIdentifier();
+		default :
+			return null;
+		}
+	}
 
-  @Override
-  public Image getColumnImage(Object element, int column) {
-    Image image = null;
-    if (column == 0) {
-      // binding
-      if (element instanceof ValueBindingInfo) {
-        image = BIND_VALUE_IMAGE;
-      } else if (element instanceof ListBindingInfo) {
-        image = BIND_LIST_IMAGE;
-      } else if (element instanceof SetBindingInfo) {
-        image = BIND_SET_IMAGE;
-      } else if (element instanceof AbstractViewerInputBindingInfo) {
-        image = TypeImageProvider.VIEWER_IMAGE;
-      } else {
-        return null;
-      }
-      // delay
-      if (isDelayBinding(element)) {
-        image =
-            SwtResourceManager.decorateImage(
-                image,
-                CLOCK_DECORATION_IMAGE,
-                SwtResourceManager.BOTTOM_RIGHT);
-      }
-    }
-    return image;
-  }
+	@Override
+	public Image getColumnImage(Object element, int column) {
+		Image image = null;
+		if (column == 0) {
+			// binding
+			if (element instanceof ValueBindingInfo) {
+				image = BIND_VALUE_IMAGE;
+			} else if (element instanceof ListBindingInfo) {
+				image = BIND_LIST_IMAGE;
+			} else if (element instanceof SetBindingInfo) {
+				image = BIND_SET_IMAGE;
+			} else if (element instanceof AbstractViewerInputBindingInfo) {
+				image = TypeImageProvider.VIEWER_IMAGE;
+			} else {
+				return null;
+			}
+			// delay
+			if (isDelayBinding(element)) {
+				image =
+						SwtResourceManager.decorateImage(
+								image,
+								CLOCK_DECORATION_IMAGE,
+								SwtResourceManager.BOTTOM_RIGHT);
+			}
+		}
+		return image;
+	}
 
-  private static boolean isDelayBinding(Object element) {
-    if (element instanceof BindingInfo) {
-      BindingInfo binding = (BindingInfo) element;
-      return isDelayObservable(binding.getTargetObservable())
-          || isDelayObservable(binding.getModelObservable());
-    }
-    if (element instanceof AbstractViewerInputBindingInfo) {
-      AbstractViewerInputBindingInfo binding = (AbstractViewerInputBindingInfo) element;
-      return isDelayObservable(binding.getInputObservable());
-    }
-    return false;
-  }
+	private static boolean isDelayBinding(Object element) {
+		if (element instanceof BindingInfo) {
+			BindingInfo binding = (BindingInfo) element;
+			return isDelayObservable(binding.getTargetObservable())
+					|| isDelayObservable(binding.getModelObservable());
+		}
+		if (element instanceof AbstractViewerInputBindingInfo) {
+			AbstractViewerInputBindingInfo binding = (AbstractViewerInputBindingInfo) element;
+			return isDelayObservable(binding.getInputObservable());
+		}
+		return false;
+	}
 
-  private static boolean isDelayObservable(ObservableInfo observable) {
-    if (observable instanceof DetailBeanObservableInfo) {
-      DetailBeanObservableInfo detailObservable = (DetailBeanObservableInfo) observable;
-      return isDelayObservable(detailObservable.getMasterObservable());
-    }
-    if (observable instanceof IDelayValueProvider) {
-      IDelayValueProvider delayValueProvider = (IDelayValueProvider) observable;
-      return delayValueProvider.getDelayValue() != 0;
-    }
-    return false;
-  }
+	private static boolean isDelayObservable(ObservableInfo observable) {
+		if (observable instanceof DetailBeanObservableInfo) {
+			DetailBeanObservableInfo detailObservable = (DetailBeanObservableInfo) observable;
+			return isDelayObservable(detailObservable.getMasterObservable());
+		}
+		if (observable instanceof IDelayValueProvider) {
+			IDelayValueProvider delayValueProvider = (IDelayValueProvider) observable;
+			return delayValueProvider.getDelayValue() != 0;
+		}
+		return false;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/providers/PropertyAdapterLabelProvider.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/providers/PropertyAdapterLabelProvider.java
index a57387b6a..da28552a0 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/providers/PropertyAdapterLabelProvider.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/providers/PropertyAdapterLabelProvider.java
@@ -22,20 +22,20 @@
  * @coverage bindings.rcp.ui
  */
 public final class PropertyAdapterLabelProvider extends LabelProvider {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // LabelProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getText(Object element) {
-    PropertyAdapter adapter = (PropertyAdapter) element;
-    return adapter.getName();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// LabelProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getText(Object element) {
+		PropertyAdapter adapter = (PropertyAdapter) element;
+		return adapter.getName();
+	}
 
-  @Override
-  public Image getImage(Object element) {
-    PropertyAdapter adapter = (PropertyAdapter) element;
-    return TypeImageProvider.getImage(adapter.getType());
-  }
+	@Override
+	public Image getImage(Object element) {
+		PropertyAdapter adapter = (PropertyAdapter) element;
+		return TypeImageProvider.getImage(adapter.getType());
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/providers/TypeImageProvider.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/providers/TypeImageProvider.java
index 0d92d6afe..2a8858aa7 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/providers/TypeImageProvider.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/ui/providers/TypeImageProvider.java
@@ -25,71 +25,71 @@
  * @coverage bindings.rcp.ui
  */
 public final class TypeImageProvider {
-  public static final Image OBJECT_IMAGE = Activator.getImage("types/Object2.png");
-  public static final Image VIEWER_IMAGE = Activator.getImage("types/viewer.png");
-  public static final Image VIEWER_COLLECTION_IMAGE =
-      Activator.getImage("types/viewer_collection.png");
-  public static final Image STRING_IMAGE = Activator.getImage("types/String2.png");
-  public static final Image BOOLEAN_IMAGE = Activator.getImage("types/Boolean4.png");
-  public static final Image NUMBER_IMAGE = Activator.getImage("types/Number2.png");
-  public static final Image IMAGE_IMAGE = Activator.getImage("types/Image2.png");
-  public static final Image COLOR_IMAGE = Activator.getImage("types/Color2.png");
-  public static final Image FONT_IMAGE = Activator.getImage("types/Font2.png");
-  public static final Image ARRAY_IMAGE = Activator.getImage("types/Array.png");
-  public static final Image COLLECTION_IMAGE = Activator.getImage("types/Collection.png");
-  public static final Image DIRECT_IMAGE = Activator.getImage("types/Direct.png");
-  public static final Image METHOD_IMAGE = Activator.getImage("method.png");
+	public static final Image OBJECT_IMAGE = Activator.getImage("types/Object2.png");
+	public static final Image VIEWER_IMAGE = Activator.getImage("types/viewer.png");
+	public static final Image VIEWER_COLLECTION_IMAGE =
+			Activator.getImage("types/viewer_collection.png");
+	public static final Image STRING_IMAGE = Activator.getImage("types/String2.png");
+	public static final Image BOOLEAN_IMAGE = Activator.getImage("types/Boolean4.png");
+	public static final Image NUMBER_IMAGE = Activator.getImage("types/Number2.png");
+	public static final Image IMAGE_IMAGE = Activator.getImage("types/Image2.png");
+	public static final Image COLOR_IMAGE = Activator.getImage("types/Color2.png");
+	public static final Image FONT_IMAGE = Activator.getImage("types/Font2.png");
+	public static final Image ARRAY_IMAGE = Activator.getImage("types/Array.png");
+	public static final Image COLLECTION_IMAGE = Activator.getImage("types/Collection.png");
+	public static final Image DIRECT_IMAGE = Activator.getImage("types/Direct.png");
+	public static final Image METHOD_IMAGE = Activator.getImage("method.png");
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Image
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return {@link Image} association with given {@link Class}.
-   */
-  public static Image getImage(Class<?> type) {
-    // unknown type accept as object
-    if (type == null) {
-      return OBJECT_IMAGE;
-    }
-    // string
-    if (type == String.class || type == byte.class || type == char.class) {
-      return STRING_IMAGE;
-    }
-    // boolean
-    if (type == boolean.class || type == Boolean.class) {
-      return BOOLEAN_IMAGE;
-    }
-    // arithmetic
-    if (type == int.class
-        || type == short.class
-        || type == long.class
-        || type == float.class
-        || type == double.class) {
-      return NUMBER_IMAGE;
-    }
-    // array
-    if (type.isArray()) {
-      return ARRAY_IMAGE;
-    }
-    // Collection
-    if (Collection.class.isAssignableFrom(type)) {
-      return COLLECTION_IMAGE;
-    }
-    // SWT image
-    if (type == Image.class) {
-      return IMAGE_IMAGE;
-    }
-    // SWT color
-    if (type == Color.class) {
-      return COLOR_IMAGE;
-    }
-    // SWT font
-    if (type == Font.class) {
-      return FONT_IMAGE;
-    }
-    // other accept as object
-    return OBJECT_IMAGE;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Image
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return {@link Image} association with given {@link Class}.
+	 */
+	public static Image getImage(Class<?> type) {
+		// unknown type accept as object
+		if (type == null) {
+			return OBJECT_IMAGE;
+		}
+		// string
+		if (type == String.class || type == byte.class || type == char.class) {
+			return STRING_IMAGE;
+		}
+		// boolean
+		if (type == boolean.class || type == Boolean.class) {
+			return BOOLEAN_IMAGE;
+		}
+		// arithmetic
+		if (type == int.class
+				|| type == short.class
+				|| type == long.class
+				|| type == float.class
+				|| type == double.class) {
+			return NUMBER_IMAGE;
+		}
+		// array
+		if (type.isArray()) {
+			return ARRAY_IMAGE;
+		}
+		// Collection
+		if (Collection.class.isAssignableFrom(type)) {
+			return COLLECTION_IMAGE;
+		}
+		// SWT image
+		if (type == Image.class) {
+			return IMAGE_IMAGE;
+		}
+		// SWT color
+		if (type == Color.class) {
+			return COLOR_IMAGE;
+		}
+		// SWT font
+		if (type == Font.class) {
+			return FONT_IMAGE;
+		}
+		// other accept as object
+		return OBJECT_IMAGE;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/wizards/autobindings/AutomaticDatabindingFirstPage.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/wizards/autobindings/AutomaticDatabindingFirstPage.java
index 1dca9ce58..7f6ff9600 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/wizards/autobindings/AutomaticDatabindingFirstPage.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/wizards/autobindings/AutomaticDatabindingFirstPage.java
@@ -28,56 +28,56 @@
  * @coverage bindings.rcp.wizard.auto
  */
 public final class AutomaticDatabindingFirstPage
-    extends
-      org.eclipse.wb.internal.core.databinding.wizards.autobindings.AutomaticDatabindingFirstPage {
-  private final CheckDialogField m_controlField = new CheckDialogField();
+extends
+org.eclipse.wb.internal.core.databinding.wizards.autobindings.AutomaticDatabindingFirstPage {
+	private final CheckDialogField m_controlField = new CheckDialogField();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AutomaticDatabindingFirstPage(IAutomaticDatabindingProvider databindingProvider,
-      String initialBeanClassName) {
-    super(databindingProvider, initialBeanClassName);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AutomaticDatabindingFirstPage(IAutomaticDatabindingProvider databindingProvider,
+			String initialBeanClassName) {
+		super(databindingProvider, initialBeanClassName);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createLocalControls(Composite parent, int columns) {
-    super.createLocalControls(parent, columns);
-    new Separator(SWT.SEPARATOR | SWT.HORIZONTAL).doFillIntoGrid(parent, columns);
-    m_controlField.setLabelText(Messages.AutomaticDatabindingFirstPage_controllerFieldLabel);
-    m_controlField.doFillIntoGrid(parent, columns);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createLocalControls(Composite parent, int columns) {
+		super.createLocalControls(parent, columns);
+		new Separator(SWT.SEPARATOR | SWT.HORIZONTAL).doFillIntoGrid(parent, columns);
+		m_controlField.setLabelText(Messages.AutomaticDatabindingFirstPage_controllerFieldLabel);
+		m_controlField.doFillIntoGrid(parent, columns);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Substitution support
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String performSubstitutions(String code, ImportsManager imports) {
-    code = super.performSubstitutions(code, imports);
-    code = RcpWizardPage.doPerformSubstitutions(this, code, imports);
-    return code;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Substitution support
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String performSubstitutions(String code, ImportsManager imports) {
+		code = super.performSubstitutions(code, imports);
+		code = RcpWizardPage.doPerformSubstitutions(this, code, imports);
+		return code;
+	}
 
-  @Override
-  protected ToolkitDescriptionJava getToolkitDescription() {
-    return ToolkitProvider.DESCRIPTION;
-  }
+	@Override
+	protected ToolkitDescriptionJava getToolkitDescription() {
+		return ToolkitProvider.DESCRIPTION;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public boolean isCreateControlClass() {
-    return m_controlField.getSelection();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public boolean isCreateControlClass() {
+		return m_controlField.getSelection();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/wizards/autobindings/AutomaticDatabindingWizard.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/wizards/autobindings/AutomaticDatabindingWizard.java
index be1040089..ac9b3b56d 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/wizards/autobindings/AutomaticDatabindingWizard.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/wizards/autobindings/AutomaticDatabindingWizard.java
@@ -21,40 +21,40 @@
  * @coverage bindings.rcp.wizard.auto
  */
 public final class AutomaticDatabindingWizard
-    extends
-      org.eclipse.wb.internal.core.databinding.wizards.autobindings.AutomaticDatabindingWizard {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AutomaticDatabindingWizard() {
-    setWindowTitle(Messages.AutomaticDatabindingWizard_windowTitle);
-  }
+extends
+org.eclipse.wb.internal.core.databinding.wizards.autobindings.AutomaticDatabindingWizard {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AutomaticDatabindingWizard() {
+		setWindowTitle(Messages.AutomaticDatabindingWizard_windowTitle);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Pages
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void addPages() {
-    IAutomaticDatabindingProvider databindingProvider = SwtDatabindingProvider.create();
-    // prepare selection
-    String beanClassName = getSelectionBeanClass(getSelection());
-    // create first page: via standard "New Java Wizard"
-    AutomaticDatabindingFirstPage firstPage =
-        new AutomaticDatabindingFirstPage(databindingProvider, beanClassName);
-    firstPage.setTitle(Messages.AutomaticDatabindingWizard_firstPageTitle);
-    firstPage.setDescription(Messages.AutomaticDatabindingWizard_firstPageDescription);
-    m_mainPage = firstPage;
-    addPage(firstPage);
-    firstPage.setInitialSelection(getSelection());
-    // create second page: databindings
-    AutomaticDatabindingSecondPage secondPage =
-        new AutomaticDatabindingSecondPage(firstPage, databindingProvider, beanClassName);
-    secondPage.setTitle(Messages.AutomaticDatabindingWizard_secondPageTitle);
-    secondPage.setDescription(Messages.AutomaticDatabindingWizard_secondPageDescription);
-    addPage(secondPage);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Pages
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void addPages() {
+		IAutomaticDatabindingProvider databindingProvider = SwtDatabindingProvider.create();
+		// prepare selection
+		String beanClassName = getSelectionBeanClass(getSelection());
+		// create first page: via standard "New Java Wizard"
+		AutomaticDatabindingFirstPage firstPage =
+				new AutomaticDatabindingFirstPage(databindingProvider, beanClassName);
+		firstPage.setTitle(Messages.AutomaticDatabindingWizard_firstPageTitle);
+		firstPage.setDescription(Messages.AutomaticDatabindingWizard_firstPageDescription);
+		m_mainPage = firstPage;
+		addPage(firstPage);
+		firstPage.setInitialSelection(getSelection());
+		// create second page: databindings
+		AutomaticDatabindingSecondPage secondPage =
+				new AutomaticDatabindingSecondPage(firstPage, databindingProvider, beanClassName);
+		secondPage.setTitle(Messages.AutomaticDatabindingWizard_secondPageTitle);
+		secondPage.setDescription(Messages.AutomaticDatabindingWizard_secondPageDescription);
+		addPage(secondPage);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/wizards/autobindings/IAutomaticWizardStub.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/wizards/autobindings/IAutomaticWizardStub.java
index 6cb715595..ae8b4de53 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/wizards/autobindings/IAutomaticWizardStub.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/wizards/autobindings/IAutomaticWizardStub.java
@@ -17,13 +17,13 @@
  * @coverage bindings.rcp.wizard.auto
  */
 public interface IAutomaticWizardStub {
-  /**
-   * Add bindings additional imports.
-   */
-  void addImports(Collection<String> importList);
+	/**
+	 * Add bindings additional imports.
+	 */
+	void addImports(Collection<String> importList);
 
-  /**
-   * @return the source code create observable for given {@code fieldName} and {@code propertyName}.
-   */
-  String createSourceCode(String fieldName, String propertyName);
+	/**
+	 * @return the source code create observable for given {@code fieldName} and {@code propertyName}.
+	 */
+	String createSourceCode(String fieldName, String propertyName);
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/wizards/autobindings/JFaceBindingStrategyDescriptor.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/wizards/autobindings/JFaceBindingStrategyDescriptor.java
index eb4ccb587..b622e6f37 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/wizards/autobindings/JFaceBindingStrategyDescriptor.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/wizards/autobindings/JFaceBindingStrategyDescriptor.java
@@ -19,49 +19,49 @@
  * @coverage bindings.rcp.wizard.auto
  */
 public final class JFaceBindingStrategyDescriptor extends AbstractDescriptor {
-  private String m_targetStrategyCode;
-  private String m_modelStrategyCode;
+	private String m_targetStrategyCode;
+	private String m_modelStrategyCode;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the source code for "target to model" strategy.
-   */
-  public String getTargetStrategyCode() {
-    return m_targetStrategyCode;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the source code for "target to model" strategy.
+	 */
+	public String getTargetStrategyCode() {
+		return m_targetStrategyCode;
+	}
 
-  /**
-   * Sets the source code for "target to model" strategy.
-   */
-  public void setTargetStrategyCode(String code) {
-    m_targetStrategyCode = code;
-  }
+	/**
+	 * Sets the source code for "target to model" strategy.
+	 */
+	public void setTargetStrategyCode(String code) {
+		m_targetStrategyCode = code;
+	}
 
-  /**
-   * @return the source code for "model to target" strategy.
-   */
-  public String getModelStrategyCode() {
-    return m_modelStrategyCode;
-  }
+	/**
+	 * @return the source code for "model to target" strategy.
+	 */
+	public String getModelStrategyCode() {
+		return m_modelStrategyCode;
+	}
 
-  /**
-   * Sets the source code for "model to target" strategy.
-   */
-  public void setModelStrategyCode(String code) {
-    m_modelStrategyCode = code;
-  }
+	/**
+	 * Sets the source code for "model to target" strategy.
+	 */
+	public void setModelStrategyCode(String code) {
+		m_modelStrategyCode = code;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Default
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean isDefault(Object property) {
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Default
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean isDefault(Object property) {
+		return true;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/wizards/autobindings/SwtDatabindingProvider.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/wizards/autobindings/SwtDatabindingProvider.java
index 4f895b6b8..26c8b9422 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/wizards/autobindings/SwtDatabindingProvider.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/wizards/autobindings/SwtDatabindingProvider.java
@@ -61,323 +61,323 @@
  * @coverage bindings.rcp.wizard.auto
  */
 public class SwtDatabindingProvider extends DefaultAutomaticDatabindingProvider {
-  private static DescriptorContainer m_widgetContainer;
-  private static DescriptorContainer m_strategyContainer;
-  private AutomaticDatabindingFirstPage m_firstPage;
+	private static DescriptorContainer m_widgetContainer;
+	private static DescriptorContainer m_strategyContainer;
+	private AutomaticDatabindingFirstPage m_firstPage;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static SwtDatabindingProvider create() {
-    try {
-      // check containers
-      if (m_widgetContainer == null && m_strategyContainer == null) {
-        // load containers
-        InputStream stream = Activator.getFile("templates/SwtEditors.xml");
-        Map<String, DescriptorContainer> containers = DescriptorContainer.parseDescriptors(
-            stream,
-            SwtDatabindingProvider.class.getClassLoader(),
-            new IImageLoader() {
-              @Override
-              public Image getImage(String name) {
-                return Activator.getImage(name);
-              }
-            });
-        IOUtils.closeQuietly(stream);
-        // sets containers
-        m_widgetContainer = containers.get("SWT.Widgets");
-        m_strategyContainer = containers.get("JFaceBinding.Strategy");
-      }
-      // create provider
-      return new SwtDatabindingProvider(m_widgetContainer, m_strategyContainer);
-    } catch (Throwable e) {
-      DesignerPlugin.log(e);
-      return null;
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static SwtDatabindingProvider create() {
+		try {
+			// check containers
+			if (m_widgetContainer == null && m_strategyContainer == null) {
+				// load containers
+				InputStream stream = Activator.getFile("templates/SwtEditors.xml");
+				Map<String, DescriptorContainer> containers = DescriptorContainer.parseDescriptors(
+						stream,
+						SwtDatabindingProvider.class.getClassLoader(),
+						new IImageLoader() {
+							@Override
+							public Image getImage(String name) {
+								return Activator.getImage(name);
+							}
+						});
+				IOUtils.closeQuietly(stream);
+				// sets containers
+				m_widgetContainer = containers.get("SWT.Widgets");
+				m_strategyContainer = containers.get("JFaceBinding.Strategy");
+			}
+			// create provider
+			return new SwtDatabindingProvider(m_widgetContainer, m_strategyContainer);
+		} catch (Throwable e) {
+			DesignerPlugin.log(e);
+			return null;
+		}
+	}
 
-  private SwtDatabindingProvider(DescriptorContainer widgetContainer,
-      DescriptorContainer strategyContainer) {
-    super(widgetContainer, strategyContainer);
-  }
+	private SwtDatabindingProvider(DescriptorContainer widgetContainer,
+			DescriptorContainer strategyContainer) {
+		super(widgetContainer, strategyContainer);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // SuperClass
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String[] getSuperClasses() {
-    return new String[]{
-        "org.eclipse.swt.widgets.Composite",
-        "org.eclipse.jface.dialogs.Dialog",
-        "org.eclipse.swt.widgets.Shell"};
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// SuperClass
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String[] getSuperClasses() {
+		return new String[]{
+				"org.eclipse.swt.widgets.Composite",
+				"org.eclipse.jface.dialogs.Dialog",
+		"org.eclipse.swt.widgets.Shell"};
+	}
 
-  @Override
-  public String getInitialSuperClass() {
-    return "org.eclipse.swt.widgets.Composite";
-  }
+	@Override
+	public String getInitialSuperClass() {
+		return "org.eclipse.swt.widgets.Composite";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void configure(ChooseClassAndPropertiesConfiguration configuration) {
-    configuration.setPropertiesLabelProvider(new PropertyAdapterLabelProvider());
-    configuration.setValueScope("beans");
-    try {
-      GlobalFactoryHelper.automaticWizardConfigure(configuration);
-    } catch (Throwable e) {
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void configure(ChooseClassAndPropertiesConfiguration configuration) {
+		configuration.setPropertiesLabelProvider(new PropertyAdapterLabelProvider());
+		configuration.setValueScope("beans");
+		try {
+			GlobalFactoryHelper.automaticWizardConfigure(configuration);
+		} catch (Throwable e) {
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // WizardPage
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void setCurrentWizardData(
-      org.eclipse.wb.internal.core.databinding.wizards.autobindings.AutomaticDatabindingFirstPage firstPage,
-      ICompleteListener pageListener) {
-    super.setCurrentWizardData(firstPage, pageListener);
-    m_firstPage = (AutomaticDatabindingFirstPage) firstPage;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// WizardPage
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void setCurrentWizardData(
+			org.eclipse.wb.internal.core.databinding.wizards.autobindings.AutomaticDatabindingFirstPage firstPage,
+			ICompleteListener pageListener) {
+		super.setCurrentWizardData(firstPage, pageListener);
+		m_firstPage = (AutomaticDatabindingFirstPage) firstPage;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Properties
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected List<PropertyAdapter> getProperties0(Class<?> choosenClass) throws Exception {
-    List<PropertyAdapter> properties = GlobalFactoryHelper.automaticWizardGetProperties(
-        m_javaProject,
-        m_classLoader,
-        choosenClass);
-    if (properties != null) {
-      return properties;
-    }
-    properties = Lists.newArrayList();
-    for (PropertyDescriptor descriptor : BeanSupport.getPropertyDescriptors(choosenClass)) {
-      properties.add(new PropertyAdapter(descriptor));
-    }
-    return properties;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Properties
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected List<PropertyAdapter> getProperties0(Class<?> choosenClass) throws Exception {
+		List<PropertyAdapter> properties = GlobalFactoryHelper.automaticWizardGetProperties(
+				m_javaProject,
+				m_classLoader,
+				choosenClass);
+		if (properties != null) {
+			return properties;
+		}
+		properties = Lists.newArrayList();
+		for (PropertyDescriptor descriptor : BeanSupport.getPropertyDescriptors(choosenClass)) {
+			properties.add(new PropertyAdapter(descriptor));
+		}
+		return properties;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Finish
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public InputStream getTemplateFile(String superClassName) {
-    String subName = m_firstPage.isCreateControlClass() ? "Controller" : "";
-    return Activator.getFile(
-        "templates/" + ClassUtils.getShortClassName(superClassName) + subName + ".jvt");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Finish
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public InputStream getTemplateFile(String superClassName) {
+		String subName = m_firstPage.isCreateControlClass() ? "Controller" : "";
+		return Activator.getFile(
+				"templates/" + ClassUtils.getShortClassName(superClassName) + subName + ".jvt");
+	}
 
-  @Override
-  public String performSubstitutions(String code, ImportsManager imports) throws Exception {
-    // prepare properties
-    final List<PropertyAdapter> properties = Lists.newArrayList();
-    Display.getDefault().syncExec(new Runnable() {
-      @Override
-      public void run() {
-        CollectionUtils.addAll(properties, m_propertiesViewer.getCheckedElements());
-      }
-    });
-    //
-    if (m_firstPage.isCreateControlClass()) {
-      return ControllerSupport.automaticWizardPerformSubstitutions(
-          m_firstPage,
-          code,
-          imports,
-          m_javaProject,
-          m_classLoader,
-          m_beanClass,
-          properties,
-          m_propertyToEditor);
-    }
-    //
-    String begin = "";
-    String end = "\t\t";
-    String widgetStart = "";
-    boolean blockMode = useBlockMode();
-    if (blockMode) {
-      begin = "\t\t{\r\n";
-      end = "\t\t}";
-      widgetStart = "\t";
-    }
-    // prepare imports
-    Collection<String> importList = Sets.newHashSet();
-    importList.add(SWT.class.getName());
-    importList.add("org.eclipse.jface.databinding.swt.SWTObservables");
-    importList.add("org.eclipse.core.databinding.observable.value.IObservableValue");
-    importList.add("org.eclipse.core.databinding.UpdateValueStrategy");
-    importList.add("org.eclipse.swt.widgets.Label");
-    importList.add("org.eclipse.swt.layout.GridLayout");
-    importList.add("org.eclipse.swt.layout.GridData");
-    //
-    DataBindingsCodeUtils.ensureDBLibraries(m_javaProject);
-    //
-    IAutomaticWizardStub automaticWizardStub =
-        GlobalFactoryHelper.automaticWizardCreateStub(m_javaProject, m_classLoader, m_beanClass);
-    //
-    String observeMethod = null;
-    if (automaticWizardStub == null) {
-      if (ObservableInfo.isPojoBean(m_beanClass)) {
-        String pojoClass = DataBindingsCodeUtils.getPojoObservablesClass();
-        observeMethod =
-            "ObserveValue = " + ClassUtils.getShortClassName(pojoClass) + ".observeValue(";
-        importList.add(pojoClass);
-      } else {
-        observeMethod = "ObserveValue = BeansObservables.observeValue(";
-        importList.add("org.eclipse.core.databinding.beans.BeansObservables");
-      }
-    } else {
-      automaticWizardStub.addImports(importList);
-    }
-    // prepare bean
-    String beanClassName = CoreUtils.getClassName(m_beanClass);
-    String beanClassShortName = ClassUtils.getShortClassName(beanClassName);
-    String fieldPrefix = JavaCore.getOption(JavaCore.CODEASSIST_FIELD_PREFIXES);
-    String fieldName = fieldPrefix + StringUtils.uncapitalize(beanClassShortName);
-    code = StringUtils.replace(code, "%BeanClass%", beanClassName);
-    //
-    if (ReflectionUtils.getConstructorBySignature(m_beanClass, "<init>()") == null) {
-      code = StringUtils.replace(code, "%BeanField%", fieldName);
-    } else {
-      code = StringUtils.replace(code, "%BeanField%", fieldName + " = new " + beanClassName + "()");
-    }
-    //
-    IPreferenceStore preferences = ToolkitProvider.DESCRIPTION.getPreferences();
-    String accessPrefix =
-        preferences.getBoolean(FieldUniqueVariableSupport.P_PREFIX_THIS) ? "this." : "";
-    code = StringUtils.replace(code, "%BeanFieldAccess%", accessPrefix + fieldName);
-    //
-    code = StringUtils.replace(code, "%BeanName%", StringUtils.capitalize(beanClassShortName));
-    // prepare code
-    StringBuffer widgetFields = new StringBuffer();
-    StringBuffer widgets = new StringBuffer();
-    String swtContainer = StringUtils.substringBetween(code, "%Widgets%", "%");
-    String swtContainerWithDot = "this".equals(swtContainer) ? "" : swtContainer + ".";
-    //
-    StringBuffer observables = new StringBuffer();
-    StringBuffer bindings = new StringBuffer();
-    //
-    importList.add(GridLayout.class.getName());
-    widgets.append("\t\t" + swtContainerWithDot + "setLayout(new GridLayout(2, false));\r\n");
-    if (!blockMode) {
-      widgets.append("\t\t\r\n");
-    }
-    //
-    for (Iterator<PropertyAdapter> I = properties.iterator(); I.hasNext();) {
-      PropertyAdapter property = I.next();
-      Object[] editorData = m_propertyToEditor.get(property);
-      SwtWidgetDescriptor widgetDescriptor = (SwtWidgetDescriptor) editorData[0];
-      JFaceBindingStrategyDescriptor strategyDescriptor =
-          (JFaceBindingStrategyDescriptor) editorData[1];
-      //
-      String propertyName = property.getName();
-      String widgetClassName = widgetDescriptor.getClassName();
-      String widgetFieldName = fieldPrefix + propertyName + widgetClassName;
-      String widgetFieldAccess = accessPrefix + widgetFieldName;
-      // field
-      widgetFields.append(
-          "\r\nfield\r\n\tprivate " + widgetClassName + " " + widgetFieldName + ";");
-      // widget
-      widgets.append(begin);
-      widgets.append(
-          widgetStart
-              + "\t\tnew Label("
-              + swtContainer
-              + ", SWT.NONE).setText(\""
-              + StringUtils.capitalize(propertyName)
-              + ":\");\r\n");
-      widgets.append(end + "\r\n");
-      //
-      widgets.append(begin);
-      widgets.append(
-          "\t\t"
-              + widgetFieldAccess
-              + " = "
-              + widgetDescriptor.getCreateCode(swtContainer)
-              + ";\r\n");
-      widgets.append(
-          widgetStart
-              + "\t\t"
-              + widgetFieldAccess
-              + ".setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));\r\n");
-      widgets.append(end);
-      // observables
-      observables.append(
-          "\t\tIObservableValue "
-              + propertyName
-              + "ObserveWidget = "
-              + widgetDescriptor.getBindingCode(widgetFieldName)
-              + ";\r\n");
-      if (automaticWizardStub == null) {
-        observables.append(
-            "\t\tIObservableValue "
-                + propertyName
-                + observeMethod
-                + fieldName
-                + ", \""
-                + propertyName
-                + "\");");
-      } else {
-        observables.append(automaticWizardStub.createSourceCode(fieldName, propertyName));
-      }
-      // bindings
-      bindings.append(
-          "\t\tbindingContext.bindValue("
-              + propertyName
-              + "ObserveWidget, "
-              + propertyName
-              + "ObserveValue, "
-              + getStrategyValue(strategyDescriptor.getTargetStrategyCode())
-              + ", "
-              + getStrategyValue(strategyDescriptor.getModelStrategyCode())
-              + ");");
-      //
-      if (I.hasNext()) {
-        widgetFields.append("\r\n");
-        widgets.append("\r\n");
-        observables.append("\r\n");
-        bindings.append("\r\n");
-      }
-      //
-      importList.add(widgetDescriptor.getFullClassName());
-    }
-    // replace template patterns
-    code = StringUtils.replace(code, "%WidgetFields%", widgetFields.toString());
-    code = StringUtils.replace(code, "%Widgets%" + swtContainer + "%", widgets.toString());
-    //
-    code = StringUtils.replace(code, "%Observables%", observables.toString());
-    code = StringUtils.replace(code, "%Bindings%", bindings.toString());
-    // add imports
-    for (String qualifiedTypeName : importList) {
-      imports.addImport(qualifiedTypeName);
-    }
-    //
-    return code;
-  }
+	@Override
+	public String performSubstitutions(String code, ImportsManager imports) throws Exception {
+		// prepare properties
+		final List<PropertyAdapter> properties = Lists.newArrayList();
+		Display.getDefault().syncExec(new Runnable() {
+			@Override
+			public void run() {
+				CollectionUtils.addAll(properties, m_propertiesViewer.getCheckedElements());
+			}
+		});
+		//
+		if (m_firstPage.isCreateControlClass()) {
+			return ControllerSupport.automaticWizardPerformSubstitutions(
+					m_firstPage,
+					code,
+					imports,
+					m_javaProject,
+					m_classLoader,
+					m_beanClass,
+					properties,
+					m_propertyToEditor);
+		}
+		//
+		String begin = "";
+		String end = "\t\t";
+		String widgetStart = "";
+		boolean blockMode = useBlockMode();
+		if (blockMode) {
+			begin = "\t\t{\r\n";
+			end = "\t\t}";
+			widgetStart = "\t";
+		}
+		// prepare imports
+		Collection<String> importList = Sets.newHashSet();
+		importList.add(SWT.class.getName());
+		importList.add("org.eclipse.jface.databinding.swt.SWTObservables");
+		importList.add("org.eclipse.core.databinding.observable.value.IObservableValue");
+		importList.add("org.eclipse.core.databinding.UpdateValueStrategy");
+		importList.add("org.eclipse.swt.widgets.Label");
+		importList.add("org.eclipse.swt.layout.GridLayout");
+		importList.add("org.eclipse.swt.layout.GridData");
+		//
+		DataBindingsCodeUtils.ensureDBLibraries(m_javaProject);
+		//
+		IAutomaticWizardStub automaticWizardStub =
+				GlobalFactoryHelper.automaticWizardCreateStub(m_javaProject, m_classLoader, m_beanClass);
+		//
+		String observeMethod = null;
+		if (automaticWizardStub == null) {
+			if (ObservableInfo.isPojoBean(m_beanClass)) {
+				String pojoClass = DataBindingsCodeUtils.getPojoObservablesClass();
+				observeMethod =
+						"ObserveValue = " + ClassUtils.getShortClassName(pojoClass) + ".observeValue(";
+				importList.add(pojoClass);
+			} else {
+				observeMethod = "ObserveValue = BeansObservables.observeValue(";
+				importList.add("org.eclipse.core.databinding.beans.BeansObservables");
+			}
+		} else {
+			automaticWizardStub.addImports(importList);
+		}
+		// prepare bean
+		String beanClassName = CoreUtils.getClassName(m_beanClass);
+		String beanClassShortName = ClassUtils.getShortClassName(beanClassName);
+		String fieldPrefix = JavaCore.getOption(JavaCore.CODEASSIST_FIELD_PREFIXES);
+		String fieldName = fieldPrefix + StringUtils.uncapitalize(beanClassShortName);
+		code = StringUtils.replace(code, "%BeanClass%", beanClassName);
+		//
+		if (ReflectionUtils.getConstructorBySignature(m_beanClass, "<init>()") == null) {
+			code = StringUtils.replace(code, "%BeanField%", fieldName);
+		} else {
+			code = StringUtils.replace(code, "%BeanField%", fieldName + " = new " + beanClassName + "()");
+		}
+		//
+		IPreferenceStore preferences = ToolkitProvider.DESCRIPTION.getPreferences();
+		String accessPrefix =
+				preferences.getBoolean(FieldUniqueVariableSupport.P_PREFIX_THIS) ? "this." : "";
+		code = StringUtils.replace(code, "%BeanFieldAccess%", accessPrefix + fieldName);
+		//
+		code = StringUtils.replace(code, "%BeanName%", StringUtils.capitalize(beanClassShortName));
+		// prepare code
+		StringBuffer widgetFields = new StringBuffer();
+		StringBuffer widgets = new StringBuffer();
+		String swtContainer = StringUtils.substringBetween(code, "%Widgets%", "%");
+		String swtContainerWithDot = "this".equals(swtContainer) ? "" : swtContainer + ".";
+		//
+		StringBuffer observables = new StringBuffer();
+		StringBuffer bindings = new StringBuffer();
+		//
+		importList.add(GridLayout.class.getName());
+		widgets.append("\t\t" + swtContainerWithDot + "setLayout(new GridLayout(2, false));\r\n");
+		if (!blockMode) {
+			widgets.append("\t\t\r\n");
+		}
+		//
+		for (Iterator<PropertyAdapter> I = properties.iterator(); I.hasNext();) {
+			PropertyAdapter property = I.next();
+			Object[] editorData = m_propertyToEditor.get(property);
+			SwtWidgetDescriptor widgetDescriptor = (SwtWidgetDescriptor) editorData[0];
+			JFaceBindingStrategyDescriptor strategyDescriptor =
+					(JFaceBindingStrategyDescriptor) editorData[1];
+			//
+			String propertyName = property.getName();
+			String widgetClassName = widgetDescriptor.getClassName();
+			String widgetFieldName = fieldPrefix + propertyName + widgetClassName;
+			String widgetFieldAccess = accessPrefix + widgetFieldName;
+			// field
+			widgetFields.append(
+					"\r\nfield\r\n\tprivate " + widgetClassName + " " + widgetFieldName + ";");
+			// widget
+			widgets.append(begin);
+			widgets.append(
+					widgetStart
+					+ "\t\tnew Label("
+					+ swtContainer
+					+ ", SWT.NONE).setText(\""
+					+ StringUtils.capitalize(propertyName)
+					+ ":\");\r\n");
+			widgets.append(end + "\r\n");
+			//
+			widgets.append(begin);
+			widgets.append(
+					"\t\t"
+							+ widgetFieldAccess
+							+ " = "
+							+ widgetDescriptor.getCreateCode(swtContainer)
+							+ ";\r\n");
+			widgets.append(
+					widgetStart
+					+ "\t\t"
+					+ widgetFieldAccess
+					+ ".setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));\r\n");
+			widgets.append(end);
+			// observables
+			observables.append(
+					"\t\tIObservableValue "
+							+ propertyName
+							+ "ObserveWidget = "
+							+ widgetDescriptor.getBindingCode(widgetFieldName)
+							+ ";\r\n");
+			if (automaticWizardStub == null) {
+				observables.append(
+						"\t\tIObservableValue "
+								+ propertyName
+								+ observeMethod
+								+ fieldName
+								+ ", \""
+								+ propertyName
+								+ "\");");
+			} else {
+				observables.append(automaticWizardStub.createSourceCode(fieldName, propertyName));
+			}
+			// bindings
+			bindings.append(
+					"\t\tbindingContext.bindValue("
+							+ propertyName
+							+ "ObserveWidget, "
+							+ propertyName
+							+ "ObserveValue, "
+							+ getStrategyValue(strategyDescriptor.getTargetStrategyCode())
+							+ ", "
+							+ getStrategyValue(strategyDescriptor.getModelStrategyCode())
+							+ ");");
+			//
+			if (I.hasNext()) {
+				widgetFields.append("\r\n");
+				widgets.append("\r\n");
+				observables.append("\r\n");
+				bindings.append("\r\n");
+			}
+			//
+			importList.add(widgetDescriptor.getFullClassName());
+		}
+		// replace template patterns
+		code = StringUtils.replace(code, "%WidgetFields%", widgetFields.toString());
+		code = StringUtils.replace(code, "%Widgets%" + swtContainer + "%", widgets.toString());
+		//
+		code = StringUtils.replace(code, "%Observables%", observables.toString());
+		code = StringUtils.replace(code, "%Bindings%", bindings.toString());
+		// add imports
+		for (String qualifiedTypeName : importList) {
+			imports.addImport(qualifiedTypeName);
+		}
+		//
+		return code;
+	}
 
-  private static String getStrategyValue(String strategyCode) {
-    return StringUtils.isEmpty(strategyCode) || "null".equalsIgnoreCase(strategyCode)
-        ? "null"
-        : "new org.eclipse.core.databinding.UpdateValueStrategy(" + strategyCode + ")";
-  }
+	private static String getStrategyValue(String strategyCode) {
+		return StringUtils.isEmpty(strategyCode) || "null".equalsIgnoreCase(strategyCode)
+				? "null"
+						: "new org.eclipse.core.databinding.UpdateValueStrategy(" + strategyCode + ")";
+	}
 
-  public static boolean useBlockMode() {
-    StatementGeneratorDescription statement =
-        RcpToolkitDescription.INSTANCE.getGenerationSettings().getStatement();
-    return statement != null && "Block".equals(statement.getName());
-  }
+	public static boolean useBlockMode() {
+		StatementGeneratorDescription statement =
+				RcpToolkitDescription.INSTANCE.getGenerationSettings().getStatement();
+		return statement != null && "Block".equals(statement.getName());
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/wizards/autobindings/SwtWidgetDescriptor.java b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/wizards/autobindings/SwtWidgetDescriptor.java
index 8439b61a4..e8300e0e6 100644
--- a/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/wizards/autobindings/SwtWidgetDescriptor.java
+++ b/org.eclipse.wb.rcp.databinding/src/org/eclipse/wb/internal/rcp/databinding/wizards/autobindings/SwtWidgetDescriptor.java
@@ -24,88 +24,88 @@
  * @coverage bindings.rcp.wizard.auto
  */
 public final class SwtWidgetDescriptor extends AbstractDescriptor {
-  private String m_fullClassName;
-  private String m_className;
-  private String m_createCode;
-  private String m_bindingCode;
-  private String[] m_classes;
+	private String m_fullClassName;
+	private String m_className;
+	private String m_createCode;
+	private String m_bindingCode;
+	private String[] m_classes;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the widget short class name.
-   */
-  public String getClassName() {
-    return m_className;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the widget short class name.
+	 */
+	public String getClassName() {
+		return m_className;
+	}
 
-  /**
-   * @return the widget class name.
-   */
-  public String getFullClassName() {
-    return m_fullClassName;
-  }
+	/**
+	 * @return the widget class name.
+	 */
+	public String getFullClassName() {
+		return m_fullClassName;
+	}
 
-  /**
-   * Sets widget class name.
-   */
-  public void setFullClassName(String className) {
-    m_fullClassName = className;
-    m_className = ClassUtils.getShortClassName(m_fullClassName);
-  }
+	/**
+	 * Sets widget class name.
+	 */
+	public void setFullClassName(String className) {
+		m_fullClassName = className;
+		m_className = ClassUtils.getShortClassName(m_fullClassName);
+	}
 
-  /**
-   * @return the widget creation code.
-   */
-  public String getCreateCode(String parent) {
-    return StringUtils.replace(m_createCode, "%parent%", parent);
-  }
+	/**
+	 * @return the widget creation code.
+	 */
+	public String getCreateCode(String parent) {
+		return StringUtils.replace(m_createCode, "%parent%", parent);
+	}
 
-  /**
-   * Sets the widget creation code.
-   */
-  public void setCreateCode(String code) {
-    m_createCode = code;
-  }
+	/**
+	 * Sets the widget creation code.
+	 */
+	public void setCreateCode(String code) {
+		m_createCode = code;
+	}
 
-  /**
-   * @return the widget binding code.
-   */
-  public String getBindingCode(String widget) {
-    return StringUtils.replace(m_bindingCode, "%widget%", widget);
-  }
+	/**
+	 * @return the widget binding code.
+	 */
+	public String getBindingCode(String widget) {
+		return StringUtils.replace(m_bindingCode, "%widget%", widget);
+	}
 
-  /**
-   * Sets the widget binding code.
-   */
-  public void setBindingCode(String code) {
-    m_bindingCode = code;
-  }
+	/**
+	 * Sets the widget binding code.
+	 */
+	public void setBindingCode(String code) {
+		m_bindingCode = code;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Default
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets widget binding property association type.
-   */
-  public void setPropertyType(String types) {
-    m_classes = StringUtils.split(types);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Default
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets widget binding property association type.
+	 */
+	public void setPropertyType(String types) {
+		m_classes = StringUtils.split(types);
+	}
 
-  @Override
-  public boolean isDefault(Object property) {
-    PropertyAdapter propertyAdapter = (PropertyAdapter) property;
-    Class<?> propertyType = propertyAdapter.getType();
-    //
-    if (propertyType != null) {
-      return ArrayUtils.contains(m_classes, propertyType.getName());
-    }
-    //
-    return false;
-  }
+	@Override
+	public boolean isDefault(Object property) {
+		PropertyAdapter propertyAdapter = (PropertyAdapter) property;
+		Class<?> propertyType = propertyAdapter.getType();
+		//
+		if (propertyType != null) {
+			return ArrayUtils.contains(m_classes, propertyType.getName());
+		}
+		//
+		return false;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/Activator.java b/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/Activator.java
index c567c2a6c..58e146d7a 100644
--- a/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/Activator.java
+++ b/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/Activator.java
@@ -21,52 +21,52 @@
  * The activator class controls the plug-in life cycle
  */
 public class Activator extends AbstractUIPlugin {
-  // The plug-in ID
-  public static final String PLUGIN_ID = "org.eclipse.wb.rcp.nebula";
-  // The shared instance
-  private static Activator plugin;
+	// The plug-in ID
+	public static final String PLUGIN_ID = "org.eclipse.wb.rcp.nebula";
+	// The shared instance
+	private static Activator plugin;
 
-  /*
-   * (non-Javadoc)
-   * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
-   */
-  @Override
-  public void start(BundleContext context) throws Exception {
-    super.start(context);
-    plugin = this;
-  }
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
+	 */
+	@Override
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+		plugin = this;
+	}
 
-  /*
-   * (non-Javadoc)
-   * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
-   */
-  @Override
-  public void stop(BundleContext context) throws Exception {
-    plugin = null;
-    super.stop(context);
-  }
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
+	 */
+	@Override
+	public void stop(BundleContext context) throws Exception {
+		plugin = null;
+		super.stop(context);
+	}
 
-  /**
-   * Returns the shared instance
-   *
-   * @return the shared instance
-   */
-  public static Activator getDefault() {
-    return plugin;
-  }
+	/**
+	 * Returns the shared instance
+	 *
+	 * @return the shared instance
+	 */
+	public static Activator getDefault() {
+		return plugin;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Resources
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final BundleResourceProvider m_resourceProvider =
-      BundleResourceProvider.get(PLUGIN_ID);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Resources
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final BundleResourceProvider m_resourceProvider =
+			BundleResourceProvider.get(PLUGIN_ID);
 
-  /**
-   * @return the {@link Image} from "/" directory, with caching.
-   */
-  public static Image getImage(String path) {
-    return m_resourceProvider.getImage(path);
-  }
+	/**
+	 * @return the {@link Image} from "/" directory, with caching.
+	 */
+	public static Image getImage(String path) {
+		return m_resourceProvider.getImage(path);
+	}
 }
diff --git a/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/Messages.java b/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/Messages.java
index a49cf7651..092262a11 100644
--- a/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/Messages.java
+++ b/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/Messages.java
@@ -3,14 +3,14 @@
 import org.eclipse.osgi.util.NLS;
 
 public class Messages extends NLS {
-  private static final String BUNDLE_NAME = "org.eclipse.wb.internal.rcp.nebula.Messages"; //$NON-NLS-1$
-  public static String CollapsibleButtonEntryInfo_description;
-  public static String CollapsibleButtonEntryInfo_name;
-  static {
-    // initialize resource bundle
-    NLS.initializeMessages(BUNDLE_NAME, Messages.class);
-  }
+	private static final String BUNDLE_NAME = "org.eclipse.wb.internal.rcp.nebula.Messages"; //$NON-NLS-1$
+	public static String CollapsibleButtonEntryInfo_description;
+	public static String CollapsibleButtonEntryInfo_name;
+	static {
+		// initialize resource bundle
+		NLS.initializeMessages(BUNDLE_NAME, Messages.class);
+	}
 
-  private Messages() {
-  }
+	private Messages() {
+	}
 }
diff --git a/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/collapsiblebuttons/CollapsibleButtonDropRequest.java b/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/collapsiblebuttons/CollapsibleButtonDropRequest.java
index 8fd5a62ef..e25e971a0 100644
--- a/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/collapsiblebuttons/CollapsibleButtonDropRequest.java
+++ b/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/collapsiblebuttons/CollapsibleButtonDropRequest.java
@@ -21,35 +21,35 @@
  * @coverage nebula.gef
  */
 public final class CollapsibleButtonDropRequest extends AbstractCreateRequest {
-  public static final String TYPE = "drop Collapsible button";
+	public static final String TYPE = "drop Collapsible button";
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CollapsibleButtonDropRequest() {
-    super(TYPE);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CollapsibleButtonDropRequest() {
+		super(TYPE);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Component
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private ControlInfo m_button;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Component
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private ControlInfo m_button;
 
-  /**
-   * @return the {@link ControlInfo} button to select after drop finished.
-   */
-  public ControlInfo getButton() {
-    return m_button;
-  }
+	/**
+	 * @return the {@link ControlInfo} button to select after drop finished.
+	 */
+	public ControlInfo getButton() {
+		return m_button;
+	}
 
-  /**
-   * Sets the {@link ControlInfo} button to select after drop finished.
-   */
-  public void setButton(ControlInfo button) {
-    m_button = button;
-  }
+	/**
+	 * Sets the {@link ControlInfo} button to select after drop finished.
+	 */
+	public void setButton(ControlInfo button) {
+		m_button = button;
+	}
 }
diff --git a/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/collapsiblebuttons/CollapsibleButtonDropTool.java b/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/collapsiblebuttons/CollapsibleButtonDropTool.java
index d3e39a259..7022ea921 100644
--- a/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/collapsiblebuttons/CollapsibleButtonDropTool.java
+++ b/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/collapsiblebuttons/CollapsibleButtonDropTool.java
@@ -24,26 +24,26 @@
  * @coverage nebula.gef
  */
 public final class CollapsibleButtonDropTool extends AbstractCreationTool {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AbstractCreationTool
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Request createTargetRequest() {
-    return new CollapsibleButtonDropRequest();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AbstractCreationTool
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Request createTargetRequest() {
+		return new CollapsibleButtonDropRequest();
+	}
 
-  @Override
-  protected void selectAddedObjects() {
-    CollapsibleButtonDropRequest request = (CollapsibleButtonDropRequest) getTargetRequest();
-    ControlInfo button = request.getButton();
-    if (button != null) {
-      IEditPartViewer viewer = getViewer();
-      EditPart editPart = viewer.getEditPartByModel(button);
-      if (editPart != null) {
-        viewer.select(editPart);
-      }
-    }
-  }
+	@Override
+	protected void selectAddedObjects() {
+		CollapsibleButtonDropRequest request = (CollapsibleButtonDropRequest) getTargetRequest();
+		ControlInfo button = request.getButton();
+		if (button != null) {
+			IEditPartViewer viewer = getViewer();
+			EditPart editPart = viewer.getEditPartByModel(button);
+			if (editPart != null) {
+				viewer.select(editPart);
+			}
+		}
+	}
 }
diff --git a/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/collapsiblebuttons/CollapsibleButtonEntryInfo.java b/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/collapsiblebuttons/CollapsibleButtonEntryInfo.java
index 673fcc0fa..5da6ace2a 100644
--- a/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/collapsiblebuttons/CollapsibleButtonEntryInfo.java
+++ b/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/collapsiblebuttons/CollapsibleButtonEntryInfo.java
@@ -29,44 +29,44 @@
  * @coverage nebula.palette
  */
 public final class CollapsibleButtonEntryInfo extends ToolEntryInfo {
-  private static final Image ICON =
-      Activator.getImage("wbp-meta/org/eclipse/nebula/widgets/collapsiblebuttons/CustomButton.png");
+	private static final Image ICON =
+			Activator.getImage("wbp-meta/org/eclipse/nebula/widgets/collapsiblebuttons/CustomButton.png");
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CollapsibleButtonEntryInfo() throws Exception {
-    setName(Messages.CollapsibleButtonEntryInfo_name);
-    setDescription(Messages.CollapsibleButtonEntryInfo_description);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CollapsibleButtonEntryInfo() throws Exception {
+		setName(Messages.CollapsibleButtonEntryInfo_name);
+		setDescription(Messages.CollapsibleButtonEntryInfo_description);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // EntryInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Image getIcon() {
-    return ICON;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// EntryInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Image getIcon() {
+		return ICON;
+	}
 
-  @Override
-  public boolean initialize(IEditPartViewer editPartViewer, JavaInfo rootJavaInfo) {
-    super.initialize(editPartViewer, rootJavaInfo);
-    return ProjectUtils.hasType(
-        m_javaProject,
-        "org.eclipse.nebula.widgets.collapsiblebuttons.CollapsibleButtons");
-  }
+	@Override
+	public boolean initialize(IEditPartViewer editPartViewer, JavaInfo rootJavaInfo) {
+		super.initialize(editPartViewer, rootJavaInfo);
+		return ProjectUtils.hasType(
+				m_javaProject,
+				"org.eclipse.nebula.widgets.collapsiblebuttons.CollapsibleButtons");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ToolEntryInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Tool createTool() throws Exception {
-    return new CollapsibleButtonDropTool();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ToolEntryInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Tool createTool() throws Exception {
+		return new CollapsibleButtonDropTool();
+	}
 }
diff --git a/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/collapsiblebuttons/CollapsibleButtonsEditPart.java b/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/collapsiblebuttons/CollapsibleButtonsEditPart.java
index 703200270..be35372c8 100644
--- a/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/collapsiblebuttons/CollapsibleButtonsEditPart.java
+++ b/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/collapsiblebuttons/CollapsibleButtonsEditPart.java
@@ -21,27 +21,27 @@
  * @coverage nebula.gef
  */
 public final class CollapsibleButtonsEditPart extends CompositeEditPart {
-  private final CollapsibleButtonsInfo m_collButtons;
+	private final CollapsibleButtonsInfo m_collButtons;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CollapsibleButtonsEditPart(CollapsibleButtonsInfo collButtons) {
-    super(collButtons);
-    m_collButtons = collButtons;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CollapsibleButtonsEditPart(CollapsibleButtonsInfo collButtons) {
+		super(collButtons);
+		m_collButtons = collButtons;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Policy
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void refreshEditPolicies() {
-    super.refreshEditPolicies();
-    installEditPolicy(new CollapsibleButtonsLayoutEditPolicy(m_collButtons));
-    installEditPolicy(new TerminatorLayoutEditPolicy());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Policy
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void refreshEditPolicies() {
+		super.refreshEditPolicies();
+		installEditPolicy(new CollapsibleButtonsLayoutEditPolicy(m_collButtons));
+		installEditPolicy(new TerminatorLayoutEditPolicy());
+	}
 }
diff --git a/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/collapsiblebuttons/CollapsibleButtonsInfo.java b/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/collapsiblebuttons/CollapsibleButtonsInfo.java
index bb2443f4a..8cb5662c1 100644
--- a/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/collapsiblebuttons/CollapsibleButtonsInfo.java
+++ b/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/collapsiblebuttons/CollapsibleButtonsInfo.java
@@ -28,72 +28,72 @@
  * @coverage nebula.model
  */
 public final class CollapsibleButtonsInfo extends CompositeInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CollapsibleButtonsInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CollapsibleButtonsInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void refresh_afterCreate2() throws Exception {
-    makeAddedButtonsVisible();
-    super.refresh_afterCreate2();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void refresh_afterCreate2() throws Exception {
+		makeAddedButtonsVisible();
+		super.refresh_afterCreate2();
+	}
 
-  /**
-   * {@link CollapsibleButtonsInfo} performs layout only when created {@link CustomButton} is
-   * visible. But Designer works usually on invisible {@link Shell}, so we have to make it visible
-   * to force layout.
-   */
-  private void makeAddedButtonsVisible() throws Exception {
-    // FIXME: remove this code after the author fixed the 'isVisible()' problem
-    Shell shell = (Shell) ReflectionUtils.invokeMethod(getObject(), "getShell()");
-    shell.setVisible(true);
-    shell.layout();
-  }
+	/**
+	 * {@link CollapsibleButtonsInfo} performs layout only when created {@link CustomButton} is
+	 * visible. But Designer works usually on invisible {@link Shell}, so we have to make it visible
+	 * to force layout.
+	 */
+	private void makeAddedButtonsVisible() throws Exception {
+		// FIXME: remove this code after the author fixed the 'isVisible()' problem
+		Shell shell = (Shell) ReflectionUtils.invokeMethod(getObject(), "getShell()");
+		shell.setVisible(true);
+		shell.layout();
+	}
 
-  /**
-   * Adds new "button" on {@link CollapsibleButtons} widget.
-   *
-   * @return the added button {@link ControlInfo}.
-   */
-  public static ControlInfo createButton(final CollapsibleButtonsInfo collapsibleButtons,
-      ControlInfo nextButton) throws Exception {
-    AstEditor editor = collapsibleButtons.getEditor();
-    // prepare CreationSupport
-    CreationSupport creationSupport;
-    {
-      String signature =
-          "addButton(java.lang.String,java.lang.String,"
-              + "org.eclipse.swt.graphics.Image,"
-              + "org.eclipse.swt.graphics.Image)";
-      String source = "addButton(\"New Button\", \"New CollapsibleButton\", null, null)";
-      creationSupport = new ImplicitFactoryCreationSupport(signature, source);
-    }
-    // do add
-    ControlInfo button =
-        (ControlInfo) JavaInfoUtils.createJavaInfo(
-            editor,
-            "org.eclipse.nebula.widgets.collapsiblebuttons.CustomButton",
-            creationSupport);
-    JavaInfoUtils.add(button, null, collapsibleButtons, nextButton);
-    return button;
-  }
+	/**
+	 * Adds new "button" on {@link CollapsibleButtons} widget.
+	 *
+	 * @return the added button {@link ControlInfo}.
+	 */
+	public static ControlInfo createButton(final CollapsibleButtonsInfo collapsibleButtons,
+			ControlInfo nextButton) throws Exception {
+		AstEditor editor = collapsibleButtons.getEditor();
+		// prepare CreationSupport
+		CreationSupport creationSupport;
+		{
+			String signature =
+					"addButton(java.lang.String,java.lang.String,"
+							+ "org.eclipse.swt.graphics.Image,"
+							+ "org.eclipse.swt.graphics.Image)";
+			String source = "addButton(\"New Button\", \"New CollapsibleButton\", null, null)";
+			creationSupport = new ImplicitFactoryCreationSupport(signature, source);
+		}
+		// do add
+		ControlInfo button =
+				(ControlInfo) JavaInfoUtils.createJavaInfo(
+						editor,
+						"org.eclipse.nebula.widgets.collapsiblebuttons.CustomButton",
+						creationSupport);
+		JavaInfoUtils.add(button, null, collapsibleButtons, nextButton);
+		return button;
+	}
 
-  /**
-   * Moves "button" on {@link CollapsibleButtons} widget.
-   */
-  public static void moveButton(ControlInfo button, ControlInfo nextButton) throws Exception {
-    JavaInfoUtils.move(button, null, button.getParentJava(), nextButton);
-  }
+	/**
+	 * Moves "button" on {@link CollapsibleButtons} widget.
+	 */
+	public static void moveButton(ControlInfo button, ControlInfo nextButton) throws Exception {
+		JavaInfoUtils.move(button, null, button.getParentJava(), nextButton);
+	}
 }
diff --git a/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/collapsiblebuttons/CollapsibleButtonsLayoutEditPolicy.java b/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/collapsiblebuttons/CollapsibleButtonsLayoutEditPolicy.java
index 6eaea4eb6..fab788b03 100644
--- a/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/collapsiblebuttons/CollapsibleButtonsLayoutEditPolicy.java
+++ b/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/collapsiblebuttons/CollapsibleButtonsLayoutEditPolicy.java
@@ -28,84 +28,84 @@
  * @coverage nebula.gef
  */
 public final class CollapsibleButtonsLayoutEditPolicy extends AbstractFlowLayoutEditPolicy {
-  private final CollapsibleButtonsInfo m_collButtons;
+	private final CollapsibleButtonsInfo m_collButtons;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CollapsibleButtonsLayoutEditPolicy(CollapsibleButtonsInfo collButtons) {
-    m_collButtons = collButtons;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CollapsibleButtonsLayoutEditPolicy(CollapsibleButtonsInfo collButtons) {
+		m_collButtons = collButtons;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected boolean isHorizontal(Request request) {
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected boolean isHorizontal(Request request) {
+		return false;
+	}
 
-  @Override
-  protected boolean isGoodReferenceChild(Request request, EditPart editPart) {
-    return editPart.getModel() instanceof ControlInfo;
-  }
+	@Override
+	protected boolean isGoodReferenceChild(Request request, EditPart editPart) {
+		return editPart.getModel() instanceof ControlInfo;
+	}
 
-  @Override
-  protected boolean isRequestCondition(Request request) {
-    return super.isRequestCondition(request) || request instanceof CollapsibleButtonDropRequest;
-  }
+	@Override
+	protected boolean isRequestCondition(Request request) {
+		return super.isRequestCondition(request) || request instanceof CollapsibleButtonDropRequest;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Validation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final ILayoutRequestValidator VALIDATOR = new LayoutRequestValidatorStubFalse() {
-    @Override
-    public boolean validateMoveRequest(EditPart host, ChangeBoundsRequest request) {
-      return true;
-    }
-  };
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Validation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final ILayoutRequestValidator VALIDATOR = new LayoutRequestValidatorStubFalse() {
+		@Override
+		public boolean validateMoveRequest(EditPart host, ChangeBoundsRequest request) {
+			return true;
+		}
+	};
 
-  @Override
-  protected ILayoutRequestValidator getRequestValidator() {
-    return VALIDATOR;
-  }
+	@Override
+	protected ILayoutRequestValidator getRequestValidator() {
+		return VALIDATOR;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Command getCommand(Request request, Object referenceObject) {
-    if (request instanceof CollapsibleButtonDropRequest) {
-      final CollapsibleButtonDropRequest buttonRequest = (CollapsibleButtonDropRequest) request;
-      final ControlInfo reference = (ControlInfo) referenceObject;
-      return new EditCommand(m_collButtons) {
-        @Override
-        protected void executeEdit() throws Exception {
-          ControlInfo newButton = CollapsibleButtonsInfo.createButton(m_collButtons, reference);
-          buttonRequest.setButton(newButton);
-        }
-      };
-    }
-    return super.getCommand(request, referenceObject);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Command getCommand(Request request, Object referenceObject) {
+		if (request instanceof CollapsibleButtonDropRequest) {
+			final CollapsibleButtonDropRequest buttonRequest = (CollapsibleButtonDropRequest) request;
+			final ControlInfo reference = (ControlInfo) referenceObject;
+			return new EditCommand(m_collButtons) {
+				@Override
+				protected void executeEdit() throws Exception {
+					ControlInfo newButton = CollapsibleButtonsInfo.createButton(m_collButtons, reference);
+					buttonRequest.setButton(newButton);
+				}
+			};
+		}
+		return super.getCommand(request, referenceObject);
+	}
 
-  @Override
-  protected Command getMoveCommand(Object moveObject, Object referenceObject) {
-    final ControlInfo button = (ControlInfo) moveObject;
-    final ControlInfo reference = (ControlInfo) referenceObject;
-    return new EditCommand(m_collButtons) {
-      @Override
-      protected void executeEdit() throws Exception {
-        CollapsibleButtonsInfo.moveButton(button, reference);
-      }
-    };
-  }
+	@Override
+	protected Command getMoveCommand(Object moveObject, Object referenceObject) {
+		final ControlInfo button = (ControlInfo) moveObject;
+		final ControlInfo reference = (ControlInfo) referenceObject;
+		return new EditCommand(m_collButtons) {
+			@Override
+			protected void executeEdit() throws Exception {
+				CollapsibleButtonsInfo.moveButton(button, reference);
+			}
+		};
+	}
 }
diff --git a/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/formattedtext/AbstractFormatterInfo.java b/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/formattedtext/AbstractFormatterInfo.java
index df1a7d116..7fc37a365 100644
--- a/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/formattedtext/AbstractFormatterInfo.java
+++ b/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/formattedtext/AbstractFormatterInfo.java
@@ -23,16 +23,16 @@
  * @coverage nebula.model
  */
 public class AbstractFormatterInfo extends JavaInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractFormatterInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-    // listener for setting property to default
-    InstanceObjectPropertyEditor.installListenerForProperty(this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractFormatterInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+		// listener for setting property to default
+		InstanceObjectPropertyEditor.installListenerForProperty(this);
+	}
 }
diff --git a/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/gallery/GalleryInfo.java b/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/gallery/GalleryInfo.java
index 39ea7d0ae..8055622a9 100644
--- a/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/gallery/GalleryInfo.java
+++ b/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/gallery/GalleryInfo.java
@@ -23,25 +23,25 @@
  * @coverage nebula.model
  */
 public final class GalleryInfo extends CompositeInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public GalleryInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public GalleryInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Orientation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public boolean isHorizontal() throws Exception {
-    Property property = getPropertyByTitle("vertical");
-    Object value = property.getValue();
-    return !((java.lang.Boolean) value);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Orientation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public boolean isHorizontal() throws Exception {
+		Property property = getPropertyByTitle("vertical");
+		Object value = property.getValue();
+		return !((java.lang.Boolean) value);
+	}
 }
diff --git a/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/gallery/GalleryItemInfo.java b/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/gallery/GalleryItemInfo.java
index ba3a7a7e4..ce2d52ea4 100644
--- a/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/gallery/GalleryItemInfo.java
+++ b/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/gallery/GalleryItemInfo.java
@@ -27,57 +27,57 @@
  * @coverage nebula.model
  */
 public final class GalleryItemInfo extends ItemInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public GalleryItemInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public GalleryItemInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Orientation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public boolean isHorizontal() throws Exception {
-    ObjectInfo parent = getParent();
-    if (parent instanceof GalleryItemInfo) {
-      return ((GalleryItemInfo) parent).isHorizontal();
-    } else {
-      return !((GalleryInfo) parent).isHorizontal();
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Orientation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public boolean isHorizontal() throws Exception {
+		ObjectInfo parent = getParent();
+		if (parent instanceof GalleryItemInfo) {
+			return ((GalleryItemInfo) parent).isHorizontal();
+		} else {
+			return !((GalleryInfo) parent).isHorizontal();
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void refresh_fetch() throws Exception {
-    {
-      Rectangle bounds = getComponentBounds();
-      if (getParent() instanceof GalleryItemInfo) {
-        GalleryItemInfo parent = (GalleryItemInfo) getParent();
-        Rectangle parentBounds = parent.getComponentBounds();
-        bounds.performTranslate(-parentBounds.x, -parentBounds.y);
-      }
-      setModelBounds(bounds);
-    }
-    // continue in super()
-    super.refresh_fetch();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void refresh_fetch() throws Exception {
+		{
+			Rectangle bounds = getComponentBounds();
+			if (getParent() instanceof GalleryItemInfo) {
+				GalleryItemInfo parent = (GalleryItemInfo) getParent();
+				Rectangle parentBounds = parent.getComponentBounds();
+				bounds.performTranslate(-parentBounds.x, -parentBounds.y);
+			}
+			setModelBounds(bounds);
+		}
+		// continue in super()
+		super.refresh_fetch();
+	}
 
-  private Rectangle getComponentBounds() throws Exception {
-    Object swtBounds = ReflectionUtils.invokeMethod(getObject(), "getBounds()");
-    return RectangleSupport.getRectangle(swtBounds);
-  }
+	private Rectangle getComponentBounds() throws Exception {
+		Object swtBounds = ReflectionUtils.invokeMethod(getObject(), "getBounds()");
+		return RectangleSupport.getRectangle(swtBounds);
+	}
 
-  public boolean isGroupItem() {
-    return !(getParent() instanceof GalleryItemInfo);
-  }
+	public boolean isGroupItem() {
+		return !(getParent() instanceof GalleryItemInfo);
+	}
 }
diff --git a/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/ganttchart/GanttEventEditPart.java b/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/ganttchart/GanttEventEditPart.java
index 04eb4200f..074d5b1c7 100644
--- a/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/ganttchart/GanttEventEditPart.java
+++ b/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/ganttchart/GanttEventEditPart.java
@@ -20,12 +20,12 @@
  * @coverage nebula.gef
  */
 public final class GanttEventEditPart extends AbstractComponentEditPart {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public GanttEventEditPart(GanttEventInfo event) {
-    super(event);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public GanttEventEditPart(GanttEventInfo event) {
+		super(event);
+	}
 }
diff --git a/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/ganttchart/GanttEventInfo.java b/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/ganttchart/GanttEventInfo.java
index 39ed430db..0b4d2cad4 100644
--- a/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/ganttchart/GanttEventInfo.java
+++ b/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/ganttchart/GanttEventInfo.java
@@ -26,30 +26,30 @@
  * @coverage nebula.model
  */
 public final class GanttEventInfo extends AbstractComponentInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public GanttEventInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public GanttEventInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void refresh_fetch() throws Exception {
-    {
-      Object swtBounds = ReflectionUtils.invokeMethod(getObject(), "getBounds()");
-      Rectangle bounds = RectangleSupport.getRectangle(swtBounds);
-      setModelBounds(bounds);
-    }
-    // continue in super()
-    super.refresh_fetch();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void refresh_fetch() throws Exception {
+		{
+			Object swtBounds = ReflectionUtils.invokeMethod(getObject(), "getBounds()");
+			Rectangle bounds = RectangleSupport.getRectangle(swtBounds);
+			setModelBounds(bounds);
+		}
+		// continue in super()
+		super.refresh_fetch();
+	}
 }
diff --git a/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/ganttchart/GanttGroupEditPart.java b/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/ganttchart/GanttGroupEditPart.java
index 899673ff9..83a18efd8 100644
--- a/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/ganttchart/GanttGroupEditPart.java
+++ b/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/ganttchart/GanttGroupEditPart.java
@@ -20,12 +20,12 @@
  * @coverage nebula.gef
  */
 public final class GanttGroupEditPart extends AbstractComponentEditPart {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public GanttGroupEditPart(GanttGroupInfo group) {
-    super(group);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public GanttGroupEditPart(GanttGroupInfo group) {
+		super(group);
+	}
 }
diff --git a/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/ganttchart/GanttGroupInfo.java b/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/ganttchart/GanttGroupInfo.java
index 0b0de9026..5ca8bd548 100644
--- a/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/ganttchart/GanttGroupInfo.java
+++ b/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/ganttchart/GanttGroupInfo.java
@@ -22,14 +22,14 @@
  * @coverage nebula.model
  */
 public final class GanttGroupInfo extends AbstractComponentInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public GanttGroupInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public GanttGroupInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 }
diff --git a/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/gef/EditPartFactory.java b/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/gef/EditPartFactory.java
index 6bd8ed2ee..fa4f79e47 100644
--- a/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/gef/EditPartFactory.java
+++ b/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/gef/EditPartFactory.java
@@ -23,17 +23,17 @@
  * @coverage nebula.gef
  */
 public final class EditPartFactory implements IEditPartFactory {
-  private final static IEditPartFactory MATCHING_FACTORY =
-      new MatchingEditPartFactory(ImmutableList.of("org.eclipse.wb.internal.rcp.nebula"),
-          ImmutableList.of("org.eclipse.wb.internal.rcp.nebula"));
+	private final static IEditPartFactory MATCHING_FACTORY =
+			new MatchingEditPartFactory(ImmutableList.of("org.eclipse.wb.internal.rcp.nebula"),
+					ImmutableList.of("org.eclipse.wb.internal.rcp.nebula"));
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IEditPartFactory
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public EditPart createEditPart(EditPart context, Object model) {
-    return MATCHING_FACTORY.createEditPart(context, model);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IEditPartFactory
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public EditPart createEditPart(EditPart context, Object model) {
+		return MATCHING_FACTORY.createEditPart(context, model);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/grid/GridColumnGroupInfo.java b/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/grid/GridColumnGroupInfo.java
index 02fc9d925..76226c722 100644
--- a/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/grid/GridColumnGroupInfo.java
+++ b/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/grid/GridColumnGroupInfo.java
@@ -28,36 +28,36 @@
  * @coverage nebula.model
  */
 public final class GridColumnGroupInfo extends ItemInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public GridColumnGroupInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public GridColumnGroupInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void refresh_fetch() throws Exception {
-    {
-      Object swtBounds = ReflectionUtils.invokeMethod(getObject(), "getBounds()");
-      Rectangle bounds = RectangleSupport.getRectangle(swtBounds);
-      List<GridColumnInfo> columns = getChildren(GridColumnInfo.class);
-      for (GridColumnInfo column : columns) {
-        bounds.union(RectangleSupport.getRectangle(ReflectionUtils.invokeMethod(
-            column.getObject(),
-            "getBounds()")));
-      }
-      setModelBounds(bounds);
-    }
-    // continue in super()
-    super.refresh_fetch();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void refresh_fetch() throws Exception {
+		{
+			Object swtBounds = ReflectionUtils.invokeMethod(getObject(), "getBounds()");
+			Rectangle bounds = RectangleSupport.getRectangle(swtBounds);
+			List<GridColumnInfo> columns = getChildren(GridColumnInfo.class);
+			for (GridColumnInfo column : columns) {
+				bounds.union(RectangleSupport.getRectangle(ReflectionUtils.invokeMethod(
+						column.getObject(),
+						"getBounds()")));
+			}
+			setModelBounds(bounds);
+		}
+		// continue in super()
+		super.refresh_fetch();
+	}
 }
diff --git a/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/grid/GridColumnInfo.java b/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/grid/GridColumnInfo.java
index 3bf1cfb42..0ba3e0cfa 100644
--- a/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/grid/GridColumnInfo.java
+++ b/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/grid/GridColumnInfo.java
@@ -26,36 +26,36 @@
  * @coverage nebula.model
  */
 public final class GridColumnInfo extends ItemInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public GridColumnInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public GridColumnInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void refresh_fetch() throws Exception {
-    {
-      Object swtBounds = ReflectionUtils.invokeMethod(getObject(), "getBounds()");
-      Rectangle bounds = RectangleSupport.getRectangle(swtBounds);
-      if (getParent() instanceof GridColumnGroupInfo) {
-        GridColumnGroupInfo parent = (GridColumnGroupInfo) getParent();
-        Object swtParentBounds = ReflectionUtils.invokeMethod(parent.getObject(), "getBounds()");
-        Rectangle parentBounds = RectangleSupport.getRectangle(swtParentBounds);
-        bounds.performTranslate(-parentBounds.x, -parentBounds.y);
-      }
-      setModelBounds(bounds);
-    }
-    // continue in super()
-    super.refresh_fetch();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void refresh_fetch() throws Exception {
+		{
+			Object swtBounds = ReflectionUtils.invokeMethod(getObject(), "getBounds()");
+			Rectangle bounds = RectangleSupport.getRectangle(swtBounds);
+			if (getParent() instanceof GridColumnGroupInfo) {
+				GridColumnGroupInfo parent = (GridColumnGroupInfo) getParent();
+				Object swtParentBounds = ReflectionUtils.invokeMethod(parent.getObject(), "getBounds()");
+				Rectangle parentBounds = RectangleSupport.getRectangle(swtParentBounds);
+				bounds.performTranslate(-parentBounds.x, -parentBounds.y);
+			}
+			setModelBounds(bounds);
+		}
+		// continue in super()
+		super.refresh_fetch();
+	}
 }
diff --git a/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/grid/GridInfo.java b/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/grid/GridInfo.java
index 30d190842..4d1d095d4 100644
--- a/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/grid/GridInfo.java
+++ b/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/grid/GridInfo.java
@@ -29,58 +29,58 @@
  * @coverage nebula.model
  */
 public final class GridInfo extends CompositeInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance fields
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final GridInfo m_this = this;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance fields
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final GridInfo m_this = this;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public GridInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-    addBroadcastListener_forTarget();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public GridInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+		addBroadcastListener_forTarget();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Listeners
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Ensures that all children are added before association {@link Statement}.
-   */
-  private void addBroadcastListener_forTarget() {
-    addBroadcastListener(new JavaEventListener() {
-      @Override
-      public void target_isTerminalStatement(JavaInfo parent,
-          JavaInfo child,
-          Statement statement,
-          boolean[] terminal) {
-        if (parent == m_this
-            && (child instanceof GridColumnInfo || child instanceof GridColumnGroupInfo)) {
-          List<GridItemInfo> items = getChildren(GridItemInfo.class);
-          for (GridItemInfo item : items) {
-            List<ASTNode> itemNodes = item.getRelatedNodes();
-            for (ASTNode node : itemNodes) {
-              ASTNode current = node;
-              do {
-                if (statement.equals(current)) {
-                  terminal[0] = true;
-                  return;
-                }
-                current = current.getParent();
-              } while (current != null);
-            }
-          }
-        }
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Listeners
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Ensures that all children are added before association {@link Statement}.
+	 */
+	private void addBroadcastListener_forTarget() {
+		addBroadcastListener(new JavaEventListener() {
+			@Override
+			public void target_isTerminalStatement(JavaInfo parent,
+					JavaInfo child,
+					Statement statement,
+					boolean[] terminal) {
+				if (parent == m_this
+						&& (child instanceof GridColumnInfo || child instanceof GridColumnGroupInfo)) {
+					List<GridItemInfo> items = getChildren(GridItemInfo.class);
+					for (GridItemInfo item : items) {
+						List<ASTNode> itemNodes = item.getRelatedNodes();
+						for (ASTNode node : itemNodes) {
+							ASTNode current = node;
+							do {
+								if (statement.equals(current)) {
+									terminal[0] = true;
+									return;
+								}
+								current = current.getParent();
+							} while (current != null);
+						}
+					}
+				}
+			}
+		});
+	}
 }
diff --git a/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/grid/GridItemInfo.java b/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/grid/GridItemInfo.java
index 4fe664836..4fabbc8db 100644
--- a/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/grid/GridItemInfo.java
+++ b/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/grid/GridItemInfo.java
@@ -28,68 +28,68 @@
  * @coverage nebula.model
  */
 public final class GridItemInfo extends ItemInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public GridItemInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public GridItemInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void refresh_fetch() throws Exception {
-    {
-      Rectangle bounds = getComponentBounds();
-      if (getParent() instanceof GridItemInfo) {
-        GridItemInfo parent = (GridItemInfo) getParent();
-        Rectangle parentBounds = parent.getComponentBounds();
-        if (parent.getComponentExpanded()) {
-          bounds.performTranslate(-parentBounds.x, -parentBounds.y);
-        } else {
-          bounds = new Rectangle(parentBounds.x, parentBounds.height, parentBounds.width, 0);
-        }
-      }
-      setModelBounds(bounds);
-    }
-    // continue in super()
-    super.refresh_fetch();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void refresh_fetch() throws Exception {
+		{
+			Rectangle bounds = getComponentBounds();
+			if (getParent() instanceof GridItemInfo) {
+				GridItemInfo parent = (GridItemInfo) getParent();
+				Rectangle parentBounds = parent.getComponentBounds();
+				if (parent.getComponentExpanded()) {
+					bounds.performTranslate(-parentBounds.x, -parentBounds.y);
+				} else {
+					bounds = new Rectangle(parentBounds.x, parentBounds.height, parentBounds.width, 0);
+				}
+			}
+			setModelBounds(bounds);
+		}
+		// continue in super()
+		super.refresh_fetch();
+	}
 
-  private Rectangle getComponentBounds() throws Exception {
-    Rectangle bounds = getComponentCellsBounds();
-    if (getComponentExpanded()) {
-      List<GridItemInfo> childItems = getChildren(GridItemInfo.class);
-      for (GridItemInfo chilsItem : childItems) {
-        bounds.union(chilsItem.getComponentBounds());
-      }
-    }
-    return bounds;
-  }
+	private Rectangle getComponentBounds() throws Exception {
+		Rectangle bounds = getComponentCellsBounds();
+		if (getComponentExpanded()) {
+			List<GridItemInfo> childItems = getChildren(GridItemInfo.class);
+			for (GridItemInfo chilsItem : childItems) {
+				bounds.union(chilsItem.getComponentBounds());
+			}
+		}
+		return bounds;
+	}
 
-  private Rectangle getComponentCellsBounds() throws Exception {
-    Object grid = ReflectionUtils.invokeMethod(getObject(), "getParent()");
-    int columnCount = (Integer) ReflectionUtils.invokeMethod(grid, "getColumnCount()");
-    Rectangle bounds = null;
-    for (int i = 0; i < columnCount; i++) {
-      Object swtBounds = ReflectionUtils.invokeMethod(getObject(), "getBounds(int)", i);
-      if (bounds == null) {
-        bounds = RectangleSupport.getRectangle(swtBounds);
-      } else {
-        bounds.union(RectangleSupport.getRectangle(swtBounds));
-      }
-    }
-    return bounds;
-  }
+	private Rectangle getComponentCellsBounds() throws Exception {
+		Object grid = ReflectionUtils.invokeMethod(getObject(), "getParent()");
+		int columnCount = (Integer) ReflectionUtils.invokeMethod(grid, "getColumnCount()");
+		Rectangle bounds = null;
+		for (int i = 0; i < columnCount; i++) {
+			Object swtBounds = ReflectionUtils.invokeMethod(getObject(), "getBounds(int)", i);
+			if (bounds == null) {
+				bounds = RectangleSupport.getRectangle(swtBounds);
+			} else {
+				bounds.union(RectangleSupport.getRectangle(swtBounds));
+			}
+		}
+		return bounds;
+	}
 
-  private Boolean getComponentExpanded() throws Exception {
-    return (Boolean) ReflectionUtils.invokeMethod(getObject(), "isExpanded()");
-  }
+	private Boolean getComponentExpanded() throws Exception {
+		return (Boolean) ReflectionUtils.invokeMethod(getObject(), "isExpanded()");
+	}
 }
diff --git a/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/horizontalspinner/HorizontalSpinnerInfo.java b/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/horizontalspinner/HorizontalSpinnerInfo.java
index 6bcedf740..36dd8ef5f 100644
--- a/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/horizontalspinner/HorizontalSpinnerInfo.java
+++ b/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/horizontalspinner/HorizontalSpinnerInfo.java
@@ -10,16 +10,16 @@
  * Model for {@link HorizontalSpinner}.
  */
 public class HorizontalSpinnerInfo extends CompositeInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public HorizontalSpinnerInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-    // listener for setting property to default
-    InstanceObjectPropertyEditor.installListenerForProperty(this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public HorizontalSpinnerInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+		// listener for setting property to default
+		InstanceObjectPropertyEditor.installListenerForProperty(this);
+	}
 }
diff --git a/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/parser/ParseFactory.java b/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/parser/ParseFactory.java
index 21aad01d4..ea5c4640f 100644
--- a/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/parser/ParseFactory.java
+++ b/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/parser/ParseFactory.java
@@ -24,42 +24,42 @@
  * @coverage core.model.parser
  */
 public final class ParseFactory extends org.eclipse.wb.internal.core.parser.AbstractParseFactory {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IParseFactory
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean isToolkitObject(AstEditor editor, ITypeBinding typeBinding) throws Exception {
-    return editor.getJavaProject().findType("org.eclipse.swt.custom.SashForm") != null // is_RCPContext
-        && isNebulaObject(typeBinding);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IParseFactory
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean isToolkitObject(AstEditor editor, ITypeBinding typeBinding) throws Exception {
+		return editor.getJavaProject().findType("org.eclipse.swt.custom.SashForm") != null // is_RCPContext
+				&& isNebulaObject(typeBinding);
+	}
 
-  /**
-   * @return <code>true</code> if given type binding is RCP object.
-   */
-  private static boolean isNebulaObject(ITypeBinding typeBinding) throws Exception {
-    if (typeBinding == null) {
-      return false;
-    }
-    // FormattedText
-    if (AstNodeUtils.isSuccessorOf(
-        typeBinding,
-        "org.eclipse.nebula.widgets.formattedtext.AbstractFormatter")) {
-      return true;
-    }
-    // GanttChart
-    if (AstNodeUtils.isSuccessorOf(
-        typeBinding,
-        "org.eclipse.nebula.widgets.ganttchart.AbstractGanttEvent")) {
-      return true;
-    }
-    //
-    return false;
-  }
+	/**
+	 * @return <code>true</code> if given type binding is RCP object.
+	 */
+	private static boolean isNebulaObject(ITypeBinding typeBinding) throws Exception {
+		if (typeBinding == null) {
+			return false;
+		}
+		// FormattedText
+		if (AstNodeUtils.isSuccessorOf(
+				typeBinding,
+				"org.eclipse.nebula.widgets.formattedtext.AbstractFormatter")) {
+			return true;
+		}
+		// GanttChart
+		if (AstNodeUtils.isSuccessorOf(
+				typeBinding,
+				"org.eclipse.nebula.widgets.ganttchart.AbstractGanttEvent")) {
+			return true;
+		}
+		//
+		return false;
+	}
 
-  @Override
-  protected String getToolkitId() {
-    return Activator.PLUGIN_ID;
-  }
+	@Override
+	protected String getToolkitId() {
+		return Activator.PLUGIN_ID;
+	}
 }
diff --git a/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/progresscircle/ProgressCircleInfo.java b/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/progresscircle/ProgressCircleInfo.java
index 546b1ce28..60bc05a2c 100644
--- a/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/progresscircle/ProgressCircleInfo.java
+++ b/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/progresscircle/ProgressCircleInfo.java
@@ -10,16 +10,16 @@
  * Model for {@link ProgressCircle}.
  */
 public class ProgressCircleInfo extends CompositeInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ProgressCircleInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-    // listener for setting property to default
-    InstanceObjectPropertyEditor.installListenerForProperty(this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ProgressCircleInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+		// listener for setting property to default
+		InstanceObjectPropertyEditor.installListenerForProperty(this);
+	}
 }
diff --git a/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/pshelf/PShelfInfo.java b/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/pshelf/PShelfInfo.java
index 71ec1e5d0..b8d0046b1 100644
--- a/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/pshelf/PShelfInfo.java
+++ b/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/pshelf/PShelfInfo.java
@@ -30,126 +30,126 @@
  * @coverage nebula.model
  */
 public final class PShelfInfo extends CompositeInfo {
-  private final PShelfInfo m_this = this;
+	private final PShelfInfo m_this = this;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public PShelfInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-    manageSelectedItem();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public PShelfInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+		manageSelectedItem();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public List<PShelfItemInfo> getItems() {
-    return getChildren(PShelfItemInfo.class);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public List<PShelfItemInfo> getItems() {
+		return getChildren(PShelfItemInfo.class);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Events
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private PShelfItemInfo m_selectedItem;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Events
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private PShelfItemInfo m_selectedItem;
 
-  /**
-   * Updates {@link #m_selectedItem} on visible widget delete/move.
-   */
-  private void manageSelectedItem() {
-    addBroadcastListener(new ObjectEventListener() {
-      @Override
-      public void childRemoveBefore(ObjectInfo parent, ObjectInfo child) throws Exception {
-        if (child == m_selectedItem) {
-          m_selectedItem = null;
-        }
-      }
+	/**
+	 * Updates {@link #m_selectedItem} on visible widget delete/move.
+	 */
+	private void manageSelectedItem() {
+		addBroadcastListener(new ObjectEventListener() {
+			@Override
+			public void childRemoveBefore(ObjectInfo parent, ObjectInfo child) throws Exception {
+				if (child == m_selectedItem) {
+					m_selectedItem = null;
+				}
+			}
 
-      @Override
-      public void selecting(ObjectInfo object, boolean[] refreshFlag) throws Exception {
-        if (object != null && m_this.isParentOf(object)) {
-          for (PShelfItemInfo item : getItems()) {
-            if (item == object || item.isParentOf(object)) {
-              if (m_selectedItem != item) {
-                m_selectedItem = item;
-                refreshFlag[0] = true;
-              }
-              break;
-            }
-          }
-        }
-      }
-    });
-  }
+			@Override
+			public void selecting(ObjectInfo object, boolean[] refreshFlag) throws Exception {
+				if (object != null && m_this.isParentOf(object)) {
+					for (PShelfItemInfo item : getItems()) {
+						if (item == object || item.isParentOf(object)) {
+							if (m_selectedItem != item) {
+								m_selectedItem = item;
+								refreshFlag[0] = true;
+							}
+							break;
+						}
+					}
+				}
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void refresh_afterCreate() throws Exception {
-    showSelectedItem();
-    super.refresh_afterCreate();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void refresh_afterCreate() throws Exception {
+		showSelectedItem();
+		super.refresh_afterCreate();
+	}
 
-  private void showSelectedItem() throws Exception {
-    if (m_selectedItem == null) {
-      List<PShelfItemInfo> items = getItems();
-      if (!items.isEmpty()) {
-        m_selectedItem = items.get(0);
-      }
-    }
-    if (m_selectedItem != null) {
-      ReflectionUtils.invokeMethod(
-          getObject(),
-          "setSelection(org.eclipse.nebula.widgets.pshelf.PShelfItem)",
-          m_selectedItem.getObject());
-    }
-  }
+	private void showSelectedItem() throws Exception {
+		if (m_selectedItem == null) {
+			List<PShelfItemInfo> items = getItems();
+			if (!items.isEmpty()) {
+				m_selectedItem = items.get(0);
+			}
+		}
+		if (m_selectedItem != null) {
+			ReflectionUtils.invokeMethod(
+					getObject(),
+					"setSelection(org.eclipse.nebula.widgets.pshelf.PShelfItem)",
+					m_selectedItem.getObject());
+		}
+	}
 
-  @Override
-  protected void refresh_fetch() throws Exception {
-    super.refresh_fetch();
-    setItemsBounds();
-  }
+	@Override
+	protected void refresh_fetch() throws Exception {
+		super.refresh_fetch();
+		setItemsBounds();
+	}
 
-  private void setItemsBounds() throws Exception {
-    int y1 = 0;
-    int y2 = 0;
-    Object[] itemObjects = (Object[]) ReflectionUtils.invokeMethod(getObject(), "getItems()");
-    for (Object itemObject : itemObjects) {
-      y2 += getItemHeight(itemObject);
-      setItemBounds(itemObject, y1, y2);
-      y1 = y2;
-    }
-  }
+	private void setItemsBounds() throws Exception {
+		int y1 = 0;
+		int y2 = 0;
+		Object[] itemObjects = (Object[]) ReflectionUtils.invokeMethod(getObject(), "getItems()");
+		for (Object itemObject : itemObjects) {
+			y2 += getItemHeight(itemObject);
+			setItemBounds(itemObject, y1, y2);
+			y1 = y2;
+		}
+	}
 
-  private void setItemBounds(Object itemObject, int y1, int y2) {
-    for (PShelfItemInfo item : getItems()) {
-      if (item.getObject() == itemObject) {
-        Rectangle shelfBounds = getModelBounds();
-        Rectangle itemBounds = new Rectangle(0, y1, shelfBounds.width, y2 - y1);
-        item.setModelBounds(itemBounds);
-      }
-    }
-  }
+	private void setItemBounds(Object itemObject, int y1, int y2) {
+		for (PShelfItemInfo item : getItems()) {
+			if (item.getObject() == itemObject) {
+				Rectangle shelfBounds = getModelBounds();
+				Rectangle itemBounds = new Rectangle(0, y1, shelfBounds.width, y2 - y1);
+				item.setModelBounds(itemBounds);
+			}
+		}
+	}
 
-  private int getItemHeight(Object itemObject) throws Exception {
-    int itemHeaderHeight = ReflectionUtils.getFieldInt(getObject(), "itemHeight");
-    int height = itemHeaderHeight;
-    if (m_selectedItem != null && itemObject == m_selectedItem.getObject()) {
-      Object bodyParent = ReflectionUtils.invokeMethod(itemObject, "getBodyParent()");
-      Rectangle bounds = ControlSupport.getBounds(bodyParent);
-      height += bounds.height;
-    }
-    return height;
-  }
+	private int getItemHeight(Object itemObject) throws Exception {
+		int itemHeaderHeight = ReflectionUtils.getFieldInt(getObject(), "itemHeight");
+		int height = itemHeaderHeight;
+		if (m_selectedItem != null && itemObject == m_selectedItem.getObject()) {
+			Object bodyParent = ReflectionUtils.invokeMethod(itemObject, "getBodyParent()");
+			Rectangle bounds = ControlSupport.getBounds(bodyParent);
+			height += bounds.height;
+		}
+		return height;
+	}
 }
diff --git a/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/pshelf/PShelfItemInfo.java b/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/pshelf/PShelfItemInfo.java
index cbdd337de..bd84974a9 100644
--- a/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/pshelf/PShelfItemInfo.java
+++ b/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/pshelf/PShelfItemInfo.java
@@ -24,47 +24,47 @@
  * @coverage nebula.model
  */
 public final class PShelfItemInfo extends ItemInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public PShelfItemInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public PShelfItemInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Object getComponentObject() {
-    return ReflectionUtils.getFieldObject(getObject(), "bodyParent");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Object getComponentObject() {
+		return ReflectionUtils.getFieldObject(getObject(), "bodyParent");
+	}
 
-  @Override
-  protected void refresh_fetch() throws Exception {
-    super.refresh_fetch();
-    fixBodyBounds();
-  }
+	@Override
+	protected void refresh_fetch() throws Exception {
+		super.refresh_fetch();
+		fixBodyBounds();
+	}
 
-  /**
-   * "Body" control is located on "bodyParent", but we consider "body" as child of this item and in
-   * {@link #fetchItemBounds()} we move bounds of item up. So, we have to move bounds of "body"
-   * down.
-   */
-  private void fixBodyBounds() {
-    int itemHeight = getItemHeight();
-    ControlInfo body = getChildren(ControlInfo.class).get(0);
-    body.getBounds().performTranslate(0, itemHeight);
-    body.getModelBounds().performTranslate(0, itemHeight);
-  }
+	/**
+	 * "Body" control is located on "bodyParent", but we consider "body" as child of this item and in
+	 * {@link #fetchItemBounds()} we move bounds of item up. So, we have to move bounds of "body"
+	 * down.
+	 */
+	private void fixBodyBounds() {
+		int itemHeight = getItemHeight();
+		ControlInfo body = getChildren(ControlInfo.class).get(0);
+		body.getBounds().performTranslate(0, itemHeight);
+		body.getModelBounds().performTranslate(0, itemHeight);
+	}
 
-  private int getItemHeight() {
-    Object shelfObject = ReflectionUtils.getFieldObject(getObject(), "parent");
-    return ReflectionUtils.getFieldInt(shelfObject, "itemHeight");
-  }
+	private int getItemHeight() {
+		Object shelfObject = ReflectionUtils.getFieldObject(getObject(), "parent");
+		return ReflectionUtils.getFieldInt(shelfObject, "itemHeight");
+	}
 }
diff --git a/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/radiogroup/RadioGroupInfo.java b/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/radiogroup/RadioGroupInfo.java
index b1b15b283..781af3e5d 100644
--- a/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/radiogroup/RadioGroupInfo.java
+++ b/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/radiogroup/RadioGroupInfo.java
@@ -23,23 +23,23 @@
  * @coverage nebula.model
  */
 public final class RadioGroupInfo extends CompositeInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public RadioGroupInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public RadioGroupInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Orientation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public boolean isHorizontal() throws Exception {
-    return !ReflectionUtils.getFieldBoolean(getObject(), "vertical");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Orientation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public boolean isHorizontal() throws Exception {
+		return !ReflectionUtils.getFieldBoolean(getObject(), "vertical");
+	}
 }
diff --git a/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/radiogroup/RadioItemInfo.java b/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/radiogroup/RadioItemInfo.java
index 6e1b47731..f786019e3 100644
--- a/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/radiogroup/RadioItemInfo.java
+++ b/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/radiogroup/RadioItemInfo.java
@@ -27,34 +27,34 @@
  * @coverage nebula.model
  */
 public final class RadioItemInfo extends ItemInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public RadioItemInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public RadioItemInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void refresh_fetch() throws Exception {
-    super.refresh_fetch();
-    fixBodyBounds();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void refresh_fetch() throws Exception {
+		super.refresh_fetch();
+		fixBodyBounds();
+	}
 
-  /**
-   * Get bounds from inner {@link Button} widget.
-   */
-  private void fixBodyBounds() throws Exception {
-    Button button = (Button) ReflectionUtils.invokeMethod(getObject(), "getButton()");
-    Rectangle bounds = RectangleSupport.getRectangle(button.getBounds());
-    setModelBounds(bounds);
-  }
+	/**
+	 * Get bounds from inner {@link Button} widget.
+	 */
+	private void fixBodyBounds() throws Exception {
+		Button button = (Button) ReflectionUtils.invokeMethod(getObject(), "getButton()");
+		Rectangle bounds = RectangleSupport.getRectangle(button.getBounds());
+		setModelBounds(bounds);
+	}
 }
diff --git a/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/titledseparator/TitledSeparatorInfo.java b/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/titledseparator/TitledSeparatorInfo.java
index 8d3d5bc4a..ab3c4795d 100644
--- a/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/titledseparator/TitledSeparatorInfo.java
+++ b/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/titledseparator/TitledSeparatorInfo.java
@@ -10,16 +10,16 @@
  * Model for {@link TitledSeparator}.
  */
 public class TitledSeparatorInfo extends CompositeInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public TitledSeparatorInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-    // listener for setting property to default
-    InstanceObjectPropertyEditor.installListenerForProperty(this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public TitledSeparatorInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+		// listener for setting property to default
+		InstanceObjectPropertyEditor.installListenerForProperty(this);
+	}
 }
diff --git a/org.eclipse.wb.rcp.swing2swt/src/org/eclipse/wb/internal/rcp/swing2swt/Activator.java b/org.eclipse.wb.rcp.swing2swt/src/org/eclipse/wb/internal/rcp/swing2swt/Activator.java
index 5d7d740f1..826489443 100644
--- a/org.eclipse.wb.rcp.swing2swt/src/org/eclipse/wb/internal/rcp/swing2swt/Activator.java
+++ b/org.eclipse.wb.rcp.swing2swt/src/org/eclipse/wb/internal/rcp/swing2swt/Activator.java
@@ -23,37 +23,37 @@
  * @coverage rcp.swing2swt
  */
 public class Activator extends AbstractUIPlugin {
-  public static final String PLUGIN_ID = "org.eclipse.wb.rcp.swing2swt";
-  private static Activator m_plugin;
+	public static final String PLUGIN_ID = "org.eclipse.wb.rcp.swing2swt";
+	private static Activator m_plugin;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Life cycle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void stop(BundleContext context) throws Exception {
-    m_plugin = null;
-    super.stop(context);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Life cycle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void stop(BundleContext context) throws Exception {
+		m_plugin = null;
+		super.stop(context);
+	}
 
-  @Override
-  public void start(BundleContext context) throws Exception {
-    super.start(context);
-    m_plugin = this;
-  }
+	@Override
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+		m_plugin = this;
+	}
 
-  /**
-   * @return the shared instance.
-   */
-  public static Activator getDefault() {
-    return m_plugin;
-  }
+	/**
+	 * @return the shared instance.
+	 */
+	public static Activator getDefault() {
+		return m_plugin;
+	}
 
-  /**
-   * @return this {@link Bundle}, can be used even without starting this plugin.
-   */
-  public static Bundle getBundleStatic() {
-    return Platform.getBundle(PLUGIN_ID);
-  }
+	/**
+	 * @return this {@link Bundle}, can be used even without starting this plugin.
+	 */
+	public static Bundle getBundleStatic() {
+		return Platform.getBundle(PLUGIN_ID);
+	}
 }
diff --git a/org.eclipse.wb.rcp.swing2swt/src/org/eclipse/wb/internal/rcp/swing2swt/Messages.java b/org.eclipse.wb.rcp.swing2swt/src/org/eclipse/wb/internal/rcp/swing2swt/Messages.java
index 4fe4e602a..042ce6921 100644
--- a/org.eclipse.wb.rcp.swing2swt/src/org/eclipse/wb/internal/rcp/swing2swt/Messages.java
+++ b/org.eclipse.wb.rcp.swing2swt/src/org/eclipse/wb/internal/rcp/swing2swt/Messages.java
@@ -3,19 +3,19 @@
 import org.eclipse.osgi.util.NLS;
 
 public class Messages extends NLS {
-  private static final String BUNDLE_NAME = "org.eclipse.wb.internal.rcp.swing2swt.Messages"; //$NON-NLS-1$
-  public static String BorderLayoutAssistantPage_horizontalGap;
-  public static String BorderLayoutAssistantPage_verticalGap;
-  public static String BorderLayout_center;
-  public static String BorderLayout_east;
-  public static String BorderLayout_north;
-  public static String BorderLayout_south;
-  public static String BorderLayout_west;
-  static {
-    // initialize resource bundle
-    NLS.initializeMessages(BUNDLE_NAME, Messages.class);
-  }
+	private static final String BUNDLE_NAME = "org.eclipse.wb.internal.rcp.swing2swt.Messages"; //$NON-NLS-1$
+	public static String BorderLayoutAssistantPage_horizontalGap;
+	public static String BorderLayoutAssistantPage_verticalGap;
+	public static String BorderLayout_center;
+	public static String BorderLayout_east;
+	public static String BorderLayout_north;
+	public static String BorderLayout_south;
+	public static String BorderLayout_west;
+	static {
+		// initialize resource bundle
+		NLS.initializeMessages(BUNDLE_NAME, Messages.class);
+	}
 
-  private Messages() {
-  }
+	private Messages() {
+	}
 }
diff --git a/org.eclipse.wb.rcp.swing2swt/src/org/eclipse/wb/internal/rcp/swing2swt/gef/BorderLayoutEditPolicy.java b/org.eclipse.wb.rcp.swing2swt/src/org/eclipse/wb/internal/rcp/swing2swt/gef/BorderLayoutEditPolicy.java
index 01672cbd3..3345de398 100644
--- a/org.eclipse.wb.rcp.swing2swt/src/org/eclipse/wb/internal/rcp/swing2swt/gef/BorderLayoutEditPolicy.java
+++ b/org.eclipse.wb.rcp.swing2swt/src/org/eclipse/wb/internal/rcp/swing2swt/gef/BorderLayoutEditPolicy.java
@@ -25,63 +25,63 @@
  * @coverage rcp.swing2swt.gef
  */
 public final class BorderLayoutEditPolicy extends ControlPositionLayoutEditPolicy<String> {
-  private final BorderLayoutInfo m_layout;
+	private final BorderLayoutInfo m_layout;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public BorderLayoutEditPolicy(BorderLayoutInfo layout) {
-    super(layout);
-    m_layout = layout;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public BorderLayoutEditPolicy(BorderLayoutInfo layout) {
+		super(layout);
+		m_layout = layout;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Feedbacks
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void addFeedbacks() throws Exception {
-    addFeedback(0, 0, 1, 0.25, new Insets(0, 0, 1, 0), Messages.BorderLayout_north, "NORTH");
-    addFeedback(0, 0.75, 1, 1, new Insets(1, 0, 0, 0), Messages.BorderLayout_south, "SOUTH");
-    addFeedback(0, 0.25, 0.25, 0.75, new Insets(1, 0, 1, 1), Messages.BorderLayout_west, "WEST");
-    addFeedback(0.75, 0.25, 1, 0.75, new Insets(1, 1, 1, 0), Messages.BorderLayout_east, "EAST");
-    addFeedback(
-        0.25,
-        0.25,
-        0.75,
-        0.75,
-        new Insets(1, 1, 1, 1),
-        Messages.BorderLayout_center,
-        "CENTER");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Feedbacks
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void addFeedbacks() throws Exception {
+		addFeedback(0, 0, 1, 0.25, new Insets(0, 0, 1, 0), Messages.BorderLayout_north, "NORTH");
+		addFeedback(0, 0.75, 1, 1, new Insets(1, 0, 0, 0), Messages.BorderLayout_south, "SOUTH");
+		addFeedback(0, 0.25, 0.25, 0.75, new Insets(1, 0, 1, 1), Messages.BorderLayout_west, "WEST");
+		addFeedback(0.75, 0.25, 1, 0.75, new Insets(1, 1, 1, 0), Messages.BorderLayout_east, "EAST");
+		addFeedback(
+				0.25,
+				0.25,
+				0.75,
+				0.75,
+				new Insets(1, 1, 1, 1),
+				Messages.BorderLayout_center,
+				"CENTER");
+	}
 
-  private void addFeedback(double px1,
-      double py1,
-      double px2,
-      double py2,
-      Insets insets,
-      String hint,
-      String region) throws Exception {
-    if (m_layout.getControl(region) == null) {
-      super.addFeedback(px1, py1, px2, py2, insets, hint, region);
-    }
-  }
+	private void addFeedback(double px1,
+			double py1,
+			double px2,
+			double py2,
+			Insets insets,
+			String hint,
+			String region) throws Exception {
+		if (m_layout.getControl(region) == null) {
+			super.addFeedback(px1, py1, px2, py2, insets, hint, region);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Implementation of commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void command_CREATE(ControlInfo component, String data) throws Exception {
-    m_layout.command_CREATE(component, data);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Implementation of commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void command_CREATE(ControlInfo component, String data) throws Exception {
+		m_layout.command_CREATE(component, data);
+	}
 
-  @Override
-  protected void command_MOVE(ControlInfo component, String data) throws Exception {
-    m_layout.command_MOVE(component, data);
-  }
+	@Override
+	protected void command_MOVE(ControlInfo component, String data) throws Exception {
+		m_layout.command_MOVE(component, data);
+	}
 }
diff --git a/org.eclipse.wb.rcp.swing2swt/src/org/eclipse/wb/internal/rcp/swing2swt/gef/LayoutEditPolicyFactory.java b/org.eclipse.wb.rcp.swing2swt/src/org/eclipse/wb/internal/rcp/swing2swt/gef/LayoutEditPolicyFactory.java
index efd15b792..60e02638f 100644
--- a/org.eclipse.wb.rcp.swing2swt/src/org/eclipse/wb/internal/rcp/swing2swt/gef/LayoutEditPolicyFactory.java
+++ b/org.eclipse.wb.rcp.swing2swt/src/org/eclipse/wb/internal/rcp/swing2swt/gef/LayoutEditPolicyFactory.java
@@ -22,17 +22,17 @@
  * @coverage rcp.swing2swt.gef
  */
 public final class LayoutEditPolicyFactory implements ILayoutEditPolicyFactory {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ILayoutEditPolicyFactory
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public LayoutEditPolicy createLayoutEditPolicy(EditPart context, Object model) {
-    if (model instanceof BorderLayoutInfo) {
-      return new BorderLayoutEditPolicy((BorderLayoutInfo) model);
-    }
-    // not found
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ILayoutEditPolicyFactory
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public LayoutEditPolicy createLayoutEditPolicy(EditPart context, Object model) {
+		if (model instanceof BorderLayoutInfo) {
+			return new BorderLayoutEditPolicy((BorderLayoutInfo) model);
+		}
+		// not found
+		return null;
+	}
 }
diff --git a/org.eclipse.wb.rcp.swing2swt/src/org/eclipse/wb/internal/rcp/swing2swt/layout/BorderLayoutAssistantPage.java b/org.eclipse.wb.rcp.swing2swt/src/org/eclipse/wb/internal/rcp/swing2swt/layout/BorderLayoutAssistantPage.java
index 7e3416dc2..73827699f 100644
--- a/org.eclipse.wb.rcp.swing2swt/src/org/eclipse/wb/internal/rcp/swing2swt/layout/BorderLayoutAssistantPage.java
+++ b/org.eclipse.wb.rcp.swing2swt/src/org/eclipse/wb/internal/rcp/swing2swt/layout/BorderLayoutAssistantPage.java
@@ -23,15 +23,15 @@
  * @coverage rcp.swing2swt.model.layout
  */
 public final class BorderLayoutAssistantPage extends AbstractAssistantPage {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public BorderLayoutAssistantPage(Composite parent, Object selection) {
-    super(parent, selection);
-    GridLayoutFactory.create(this).columns(2);
-    addIntegerProperty(this, "hgap", Messages.BorderLayoutAssistantPage_horizontalGap);
-    addIntegerProperty(this, "vgap", Messages.BorderLayoutAssistantPage_verticalGap);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public BorderLayoutAssistantPage(Composite parent, Object selection) {
+		super(parent, selection);
+		GridLayoutFactory.create(this).columns(2);
+		addIntegerProperty(this, "hgap", Messages.BorderLayoutAssistantPage_horizontalGap);
+		addIntegerProperty(this, "vgap", Messages.BorderLayoutAssistantPage_verticalGap);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.swing2swt/src/org/eclipse/wb/internal/rcp/swing2swt/layout/BorderLayoutInfo.java b/org.eclipse.wb.rcp.swing2swt/src/org/eclipse/wb/internal/rcp/swing2swt/layout/BorderLayoutInfo.java
index 2acb7216e..c6623f7b9 100644
--- a/org.eclipse.wb.rcp.swing2swt/src/org/eclipse/wb/internal/rcp/swing2swt/layout/BorderLayoutInfo.java
+++ b/org.eclipse.wb.rcp.swing2swt/src/org/eclipse/wb/internal/rcp/swing2swt/layout/BorderLayoutInfo.java
@@ -39,174 +39,174 @@
  * @coverage rcp.swing2swt.model.layout
  */
 public final class BorderLayoutInfo extends LayoutInfo {
-  private final BorderLayoutInfo m_this = this;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public BorderLayoutInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-    contributeProperty();
-    supportLayoutAssistant();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Events
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void supportLayoutAssistant() {
-    new LayoutAssistantSupport(this) {
-      @Override
-      protected AbstractAssistantPage createLayoutPage(Composite parent) {
-        return new BorderLayoutAssistantPage(parent, m_layout);
-      }
-    };
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link ControlInfo} at given region.
-   *
-   * @param region
-   *          is name of field for constraints, for example <code>WEST</code>.
-   */
-  public ControlInfo getControl(String region) throws Exception {
-    String fieldName = region.toLowerCase() + "Child";
-    Object control = ReflectionUtils.getFieldObject(getObject(), fieldName);
-    return (ControlInfo) getComposite().getChildByObject(control);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // LayoutData management
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void deleteLayoutData(ControlInfo control) throws Exception {
-    super.deleteLayoutData(control);
-    control.removeMethodInvocations("setLayoutData(java.lang.Object)");
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void command_CREATE(ControlInfo control, String region) throws Exception {
-    super.command_CREATE(control, null);
-    command_REGION(control, region);
-  }
-
-  public void command_MOVE(ControlInfo control, String region) throws Exception {
-    if (control.getParent() != getComposite()) {
-      super.command_MOVE(control, null);
-    }
-    command_REGION(control, region);
-  }
-
-  private void command_REGION(ControlInfo control, String region) throws Exception {
-    String layoutDataSource = "swing2swt.layout.BorderLayout." + region;
-    control.removeMethodInvocations("setLayoutData(java.lang.Object)");
-    control.addMethodInvocation("setLayoutData(java.lang.Object)", layoutDataSource);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // "Region" property
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final String[] REGION_TITLES = {
-      Messages.BorderLayout_north,
-      Messages.BorderLayout_south,
-      Messages.BorderLayout_west,
-      Messages.BorderLayout_east,
-      Messages.BorderLayout_center};
-  private static final String[] REGION_FIELDS = {"NORTH", "SOUTH", "WEST", "EAST", "CENTER"};
-  private static final PropertyEditor m_regionPropertyEditor =
-      new StringComboPropertyEditor(REGION_TITLES);
-
-  /**
-   * {@link Property} for modifying region of {@link ControlInfo} on this {@link BorderLayoutInfo}.
-   */
-  private final class RegionProperty extends Property {
-    private final ControlInfo m_control;
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public RegionProperty(ControlInfo control) {
-      super(m_regionPropertyEditor);
-      m_control = control;
-      setCategory(PropertyCategory.system(6));
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Property
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public String getTitle() {
-      return "Region";
-    }
-
-    @Override
-    public Object getValue() throws Exception {
-      for (int i = 0; i < REGION_FIELDS.length; i++) {
-        String region = REGION_FIELDS[i];
-        if (getControl(region) == m_control) {
-          return REGION_TITLES[i];
-        }
-      }
-      return "";
-    }
-
-    @Override
-    public boolean isModified() throws Exception {
-      return true;
-    }
-
-    @Override
-    public void setValue(final Object value) throws Exception {
-      ExecutionUtils.run(m_control, new RunnableEx() {
-        @Override
-        public void run() throws Exception {
-          for (int i = 0; i < REGION_TITLES.length; i++) {
-            String title = REGION_TITLES[i];
-            if (title.equals(value)) {
-              command_REGION(m_control, REGION_FIELDS[i]);
-            }
-          }
-        }
-      });
-    }
-  }
-
-  private void contributeProperty() {
-    addBroadcastListener(new JavaInfoAddProperties() {
-      @Override
-      public void invoke(JavaInfo javaInfo, List<Property> properties) throws Exception {
-        if (javaInfo instanceof ControlInfo && isActiveOnComposite(javaInfo.getParent())) {
-          ControlInfo control = (ControlInfo) javaInfo;
-          Property constraintsProperty = (Property) control.getArbitraryValue(m_this);
-          if (constraintsProperty == null) {
-            constraintsProperty = new RegionProperty(control);
-            control.putArbitraryValue(m_this, constraintsProperty);
-          }
-          properties.add(constraintsProperty);
-        }
-      }
-    });
-  }
+	private final BorderLayoutInfo m_this = this;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public BorderLayoutInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+		contributeProperty();
+		supportLayoutAssistant();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Events
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void supportLayoutAssistant() {
+		new LayoutAssistantSupport(this) {
+			@Override
+			protected AbstractAssistantPage createLayoutPage(Composite parent) {
+				return new BorderLayoutAssistantPage(parent, m_layout);
+			}
+		};
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link ControlInfo} at given region.
+	 *
+	 * @param region
+	 *          is name of field for constraints, for example <code>WEST</code>.
+	 */
+	public ControlInfo getControl(String region) throws Exception {
+		String fieldName = region.toLowerCase() + "Child";
+		Object control = ReflectionUtils.getFieldObject(getObject(), fieldName);
+		return (ControlInfo) getComposite().getChildByObject(control);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// LayoutData management
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void deleteLayoutData(ControlInfo control) throws Exception {
+		super.deleteLayoutData(control);
+		control.removeMethodInvocations("setLayoutData(java.lang.Object)");
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void command_CREATE(ControlInfo control, String region) throws Exception {
+		super.command_CREATE(control, null);
+		command_REGION(control, region);
+	}
+
+	public void command_MOVE(ControlInfo control, String region) throws Exception {
+		if (control.getParent() != getComposite()) {
+			super.command_MOVE(control, null);
+		}
+		command_REGION(control, region);
+	}
+
+	private void command_REGION(ControlInfo control, String region) throws Exception {
+		String layoutDataSource = "swing2swt.layout.BorderLayout." + region;
+		control.removeMethodInvocations("setLayoutData(java.lang.Object)");
+		control.addMethodInvocation("setLayoutData(java.lang.Object)", layoutDataSource);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// "Region" property
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final String[] REGION_TITLES = {
+			Messages.BorderLayout_north,
+			Messages.BorderLayout_south,
+			Messages.BorderLayout_west,
+			Messages.BorderLayout_east,
+			Messages.BorderLayout_center};
+	private static final String[] REGION_FIELDS = {"NORTH", "SOUTH", "WEST", "EAST", "CENTER"};
+	private static final PropertyEditor m_regionPropertyEditor =
+			new StringComboPropertyEditor(REGION_TITLES);
+
+	/**
+	 * {@link Property} for modifying region of {@link ControlInfo} on this {@link BorderLayoutInfo}.
+	 */
+	private final class RegionProperty extends Property {
+		private final ControlInfo m_control;
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public RegionProperty(ControlInfo control) {
+			super(m_regionPropertyEditor);
+			m_control = control;
+			setCategory(PropertyCategory.system(6));
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Property
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public String getTitle() {
+			return "Region";
+		}
+
+		@Override
+		public Object getValue() throws Exception {
+			for (int i = 0; i < REGION_FIELDS.length; i++) {
+				String region = REGION_FIELDS[i];
+				if (getControl(region) == m_control) {
+					return REGION_TITLES[i];
+				}
+			}
+			return "";
+		}
+
+		@Override
+		public boolean isModified() throws Exception {
+			return true;
+		}
+
+		@Override
+		public void setValue(final Object value) throws Exception {
+			ExecutionUtils.run(m_control, new RunnableEx() {
+				@Override
+				public void run() throws Exception {
+					for (int i = 0; i < REGION_TITLES.length; i++) {
+						String title = REGION_TITLES[i];
+						if (title.equals(value)) {
+							command_REGION(m_control, REGION_FIELDS[i]);
+						}
+					}
+				}
+			});
+		}
+	}
+
+	private void contributeProperty() {
+		addBroadcastListener(new JavaInfoAddProperties() {
+			@Override
+			public void invoke(JavaInfo javaInfo, List<Property> properties) throws Exception {
+				if (javaInfo instanceof ControlInfo && isActiveOnComposite(javaInfo.getParent())) {
+					ControlInfo control = (ControlInfo) javaInfo;
+					Property constraintsProperty = (Property) control.getArbitraryValue(m_this);
+					if (constraintsProperty == null) {
+						constraintsProperty = new RegionProperty(control);
+						control.putArbitraryValue(m_this, constraintsProperty);
+					}
+					properties.add(constraintsProperty);
+				}
+			}
+		});
+	}
 }
diff --git a/org.eclipse.wb.rcp.swing2swt/src/org/eclipse/wb/internal/rcp/swing2swt/layout/BoxLayoutInfo.java b/org.eclipse.wb.rcp.swing2swt/src/org/eclipse/wb/internal/rcp/swing2swt/layout/BoxLayoutInfo.java
index f4a65d3f7..d50ec9f1c 100644
--- a/org.eclipse.wb.rcp.swing2swt/src/org/eclipse/wb/internal/rcp/swing2swt/layout/BoxLayoutInfo.java
+++ b/org.eclipse.wb.rcp.swing2swt/src/org/eclipse/wb/internal/rcp/swing2swt/layout/BoxLayoutInfo.java
@@ -24,24 +24,24 @@
  * @coverage rcp.swing2swt.model.layout
  */
 public final class BoxLayoutInfo extends LayoutInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public BoxLayoutInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public BoxLayoutInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public boolean isHorizontal() throws Exception {
-    Object o = getObject();
-    return getFieldInt(o, "axis") == getFieldInt(o, "X_AXIS");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public boolean isHorizontal() throws Exception {
+		Object o = getObject();
+		return getFieldInt(o, "axis") == getFieldInt(o, "X_AXIS");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp.swing2swt/src/org/eclipse/wb/internal/rcp/swing2swt/layout/FlowLayoutInfo.java b/org.eclipse.wb.rcp.swing2swt/src/org/eclipse/wb/internal/rcp/swing2swt/layout/FlowLayoutInfo.java
index 356c9ccbc..fa8268069 100644
--- a/org.eclipse.wb.rcp.swing2swt/src/org/eclipse/wb/internal/rcp/swing2swt/layout/FlowLayoutInfo.java
+++ b/org.eclipse.wb.rcp.swing2swt/src/org/eclipse/wb/internal/rcp/swing2swt/layout/FlowLayoutInfo.java
@@ -22,14 +22,14 @@
  * @coverage rcp.swing2swt.model.layout
  */
 public final class FlowLayoutInfo extends LayoutInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FlowLayoutInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FlowLayoutInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/Activator.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/Activator.java
index a116eb54b..a4889c10c 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/Activator.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/Activator.java
@@ -27,59 +27,59 @@
  * @coverage rcp
  */
 public class Activator extends AbstractUIPlugin {
-  public static final String PLUGIN_ID = "org.eclipse.wb.rcp";
-  private static Activator m_plugin;
+	public static final String PLUGIN_ID = "org.eclipse.wb.rcp";
+	private static Activator m_plugin;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Life cycle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void stop(BundleContext context) throws Exception {
-    m_plugin = null;
-    super.stop(context);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Life cycle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void stop(BundleContext context) throws Exception {
+		m_plugin = null;
+		super.stop(context);
+	}
 
-  @Override
-  public void start(BundleContext context) throws Exception {
-    super.start(context);
-    m_plugin = this;
-  }
+	@Override
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+		m_plugin = this;
+	}
 
-  /**
-   * Returns the shared instance.
-   */
-  public static Activator getDefault() {
-    return m_plugin;
-  }
+	/**
+	 * Returns the shared instance.
+	 */
+	public static Activator getDefault() {
+		return m_plugin;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Resources
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final BundleResourceProvider m_resourceProvider =
-      BundleResourceProvider.get(PLUGIN_ID);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Resources
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final BundleResourceProvider m_resourceProvider =
+			BundleResourceProvider.get(PLUGIN_ID);
 
-  /**
-   * @return the {@link InputStream} for file from plugin directory.
-   */
-  public static InputStream getFile(String path) {
-    return m_resourceProvider.getFile(path);
-  }
+	/**
+	 * @return the {@link InputStream} for file from plugin directory.
+	 */
+	public static InputStream getFile(String path) {
+		return m_resourceProvider.getFile(path);
+	}
 
-  /**
-   * @return the {@link Image} from "icons" directory, with caching.
-   */
-  public static Image getImage(String path) {
-    return m_resourceProvider.getImage("icons/" + path);
-  }
+	/**
+	 * @return the {@link Image} from "icons" directory, with caching.
+	 */
+	public static Image getImage(String path) {
+		return m_resourceProvider.getImage("icons/" + path);
+	}
 
-  /**
-   * @return the {@link ImageDescriptor} from "icons" directory.
-   */
-  public static ImageDescriptor getImageDescriptor(String path) {
-    return m_resourceProvider.getImageDescriptor("icons/" + path);
-  }
+	/**
+	 * @return the {@link ImageDescriptor} from "icons" directory.
+	 */
+	public static ImageDescriptor getImageDescriptor(String path) {
+		return m_resourceProvider.getImageDescriptor("icons/" + path);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/IExceptionConstants.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/IExceptionConstants.java
index 37ebf5b41..ff675e169 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/IExceptionConstants.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/IExceptionConstants.java
@@ -19,12 +19,12 @@
  * @coverage rcp
  */
 public interface IExceptionConstants {
-  int NO_FORM_TOOLKIT = 3000;
-  int NO_DESIGN_WIZARD = 3001;
-  int NO_DESIGN_MP_EDITOR = 3002;
-  int NO_CONTROL_IN_WIZARD_PAGE = 3003;
-  int SWT_DIALOG_NO_OPEN_METHOD = 3004;
-  int NOT_CONFIGURED_FOR_SWT = 3005;
-  int SWT_DIALOG_NO_MAIN_SHELL = 3006;
-  int NO_DESIGN_WIDGET = 3007;
+	int NO_FORM_TOOLKIT = 3000;
+	int NO_DESIGN_WIZARD = 3001;
+	int NO_DESIGN_MP_EDITOR = 3002;
+	int NO_CONTROL_IN_WIZARD_PAGE = 3003;
+	int SWT_DIALOG_NO_OPEN_METHOD = 3004;
+	int NOT_CONFIGURED_FOR_SWT = 3005;
+	int SWT_DIALOG_NO_MAIN_SHELL = 3006;
+	int NO_DESIGN_WIDGET = 3007;
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/RcpDescriptionVersionsProviderFactory.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/RcpDescriptionVersionsProviderFactory.java
index af0fdc663..0050ece4f 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/RcpDescriptionVersionsProviderFactory.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/RcpDescriptionVersionsProviderFactory.java
@@ -32,98 +32,98 @@
  * @coverage rcp
  */
 public final class RcpDescriptionVersionsProviderFactory
-    implements
-      IDescriptionVersionsProviderFactory {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final IDescriptionVersionsProviderFactory INSTANCE =
-      new RcpDescriptionVersionsProviderFactory();
+implements
+IDescriptionVersionsProviderFactory {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final IDescriptionVersionsProviderFactory INSTANCE =
+			new RcpDescriptionVersionsProviderFactory();
 
-  private RcpDescriptionVersionsProviderFactory() {
-  }
+	private RcpDescriptionVersionsProviderFactory() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IDescriptionVersionsProviderFactory
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Map<String, Object> getVersions(IJavaProject javaProject, ClassLoader classLoader)
-      throws Exception {
-    if (!isRCP(javaProject)) {
-      return ImmutableMap.of();
-    }
-    // OK, RCP project
-    String version = getSWTVersion();
-    return ImmutableMap.<String, Object>of("rcp_version", version);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IDescriptionVersionsProviderFactory
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Map<String, Object> getVersions(IJavaProject javaProject, ClassLoader classLoader)
+			throws Exception {
+		if (!isRCP(javaProject)) {
+			return ImmutableMap.of();
+		}
+		// OK, RCP project
+		String version = getSWTVersion();
+		return ImmutableMap.<String, Object>of("rcp_version", version);
+	}
 
-  @Override
-  public IDescriptionVersionsProvider getProvider(IJavaProject javaProject, ClassLoader classLoader)
-      throws Exception {
-    if (!isRCP(javaProject)) {
-      return null;
-    }
-    // OK, RCP project
-    String version = getSWTVersion();
-    List<String> allVersions = ImmutableList.of(
-        "3.7",
-        "3.8",
-        "4.2",
-        "4.3",
-        "4.4",
-        "4.5",
-        "4.6",
-        "4.7",
-        "4.8",
-        "4.9",
-        "4.10",
-        "4.11",
-        "4.12",
-        "4.13",
-        "4.14",
-        "4.15",
-        "4.16",
-        "4.17",
-        "4.18",
-        "4.19",
-        "4.20",
-        "4.21",
-        "4.22",
-        "4.23",
-        "4.24",
-        "4.25",
-        "4.26",
-        "4.27",
-        "4.28",
-        "4.29");
-    return new FromListDescriptionVersionsProvider(allVersions, version) {
-      @Override
-      protected boolean validate(Class<?> componentClass) throws Exception {
-        String className = componentClass.getName();
-        return className.startsWith("org.eclipse.swt.")
-            || className.startsWith("org.eclipse.jface.")
-            || className.startsWith("org.eclipse.ui.");
-      }
-    };
-  }
+	@Override
+	public IDescriptionVersionsProvider getProvider(IJavaProject javaProject, ClassLoader classLoader)
+			throws Exception {
+		if (!isRCP(javaProject)) {
+			return null;
+		}
+		// OK, RCP project
+		String version = getSWTVersion();
+		List<String> allVersions = ImmutableList.of(
+				"3.7",
+				"3.8",
+				"4.2",
+				"4.3",
+				"4.4",
+				"4.5",
+				"4.6",
+				"4.7",
+				"4.8",
+				"4.9",
+				"4.10",
+				"4.11",
+				"4.12",
+				"4.13",
+				"4.14",
+				"4.15",
+				"4.16",
+				"4.17",
+				"4.18",
+				"4.19",
+				"4.20",
+				"4.21",
+				"4.22",
+				"4.23",
+				"4.24",
+				"4.25",
+				"4.26",
+				"4.27",
+				"4.28",
+				"4.29");
+		return new FromListDescriptionVersionsProvider(allVersions, version) {
+			@Override
+			protected boolean validate(Class<?> componentClass) throws Exception {
+				String className = componentClass.getName();
+				return className.startsWith("org.eclipse.swt.")
+						|| className.startsWith("org.eclipse.jface.")
+						|| className.startsWith("org.eclipse.ui.");
+			}
+		};
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private boolean isRCP(IJavaProject javaProject) throws JavaModelException {
-    return javaProject.findType("org.eclipse.swt.custom.CTabFolder") != null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private boolean isRCP(IJavaProject javaProject) throws JavaModelException {
+		return javaProject.findType("org.eclipse.swt.custom.CTabFolder") != null;
+	}
 
-  private static String getSWTVersion() {
-    int version = SWT.getVersion();
-    int major = version / 1000;
-    int minor = (version - major * 1000) / 100;
-    return major + "." + minor;
-  }
+	private static String getSWTVersion() {
+		int version = SWT.getVersion();
+		int major = version / 1000;
+		int minor = (version - major * 1000) / 100;
+		return major + "." + minor;
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/RcpToolkitDescription.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/RcpToolkitDescription.java
index 47a5af771..b0abceb73 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/RcpToolkitDescription.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/RcpToolkitDescription.java
@@ -44,107 +44,107 @@
  * @coverage rcp
  */
 public final class RcpToolkitDescription extends ToolkitDescriptionJava {
-  public static final ToolkitDescriptionJava INSTANCE = new RcpToolkitDescription();
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance fields
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final IPreferenceStore store = Activator.getDefault().getPreferenceStore();
-  private final GenerationSettings settings = new GenerationSettings(store);
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Initialization
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private boolean m_initialized;
-
-  void initialize() {
-    if (!m_initialized) {
-      m_initialized = true;
-      configureGenerators();
-      configureCodeGeneration();
-      configureTypeSpecific();
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getId() {
-    return IPreferenceConstants.TOOLKIT_ID;
-  }
-
-  @Override
-  public String getName() {
-    return ModelMessages.RcpToolkitDescription_name;
-  }
-
-  @Override
-  public String getProductName() {
-    return BrandingUtils.getBranding().getProductName();
-  }
-
-  @Override
-  public Bundle getBundle() {
-    return Activator.getDefault().getBundle();
-  }
-
-  @Override
-  public IPreferenceStore getPreferences() {
-    return store;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public GenerationSettings getGenerationSettings() {
-    return settings;
-  }
-
-  private void configureGenerators() {
-    StatementGeneratorDescription[] usualStatements =
-        new StatementGeneratorDescription[]{
-            FlatStatementGeneratorDescription.INSTANCE,
-            BlockStatementGeneratorDescription.INSTANCE};
-    // local unique
-    settings.addGenerators(
-        LocalUniqueVariableDescription.INSTANCE,
-        usualStatements,
-        new GenerationPreview[]{
-            GenerationPreviewLocalUniqueFlat.INSTANCE,
-            GenerationPreviewLocalUniqueBlock.INSTANCE});
-    // field unique
-    settings.addGenerators(
-        FieldUniqueVariableDescription.INSTANCE,
-        usualStatements,
-        new GenerationPreview[]{
-            GenerationPreviewFieldUniqueFlat.INSTANCE,
-            GenerationPreviewFieldUniqueBlock.INSTANCE});
-  }
-
-  private void configureCodeGeneration() {
-    settings.setDefaultDeduceSettings(true);
-    settings.setDefaultVariable(LocalUniqueVariableDescription.INSTANCE);
-    settings.setDefaultStatement(FlatStatementGeneratorDescription.INSTANCE);
-  }
-
-  private void configureTypeSpecific() {
-    List<ComponentNameDescription> descriptions = Lists.newArrayList();
-    descriptions.add(new ComponentNameDescription("org.eclipse.swt.widgets.Text",
-        "text",
-        "txt",
-        true));
-    descriptions.add(new ComponentNameDescription("org.eclipse.swt.widgets.Table",
-        "table",
-        "tbl",
-        true));
-    NamesManager.setDefaultNameDescriptions(this, descriptions);
-  }
+	public static final ToolkitDescriptionJava INSTANCE = new RcpToolkitDescription();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance fields
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final IPreferenceStore store = Activator.getDefault().getPreferenceStore();
+	private final GenerationSettings settings = new GenerationSettings(store);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Initialization
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private boolean m_initialized;
+
+	void initialize() {
+		if (!m_initialized) {
+			m_initialized = true;
+			configureGenerators();
+			configureCodeGeneration();
+			configureTypeSpecific();
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getId() {
+		return IPreferenceConstants.TOOLKIT_ID;
+	}
+
+	@Override
+	public String getName() {
+		return ModelMessages.RcpToolkitDescription_name;
+	}
+
+	@Override
+	public String getProductName() {
+		return BrandingUtils.getBranding().getProductName();
+	}
+
+	@Override
+	public Bundle getBundle() {
+		return Activator.getDefault().getBundle();
+	}
+
+	@Override
+	public IPreferenceStore getPreferences() {
+		return store;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public GenerationSettings getGenerationSettings() {
+		return settings;
+	}
+
+	private void configureGenerators() {
+		StatementGeneratorDescription[] usualStatements =
+				new StatementGeneratorDescription[]{
+						FlatStatementGeneratorDescription.INSTANCE,
+						BlockStatementGeneratorDescription.INSTANCE};
+		// local unique
+		settings.addGenerators(
+				LocalUniqueVariableDescription.INSTANCE,
+				usualStatements,
+				new GenerationPreview[]{
+						GenerationPreviewLocalUniqueFlat.INSTANCE,
+						GenerationPreviewLocalUniqueBlock.INSTANCE});
+		// field unique
+		settings.addGenerators(
+				FieldUniqueVariableDescription.INSTANCE,
+				usualStatements,
+				new GenerationPreview[]{
+						GenerationPreviewFieldUniqueFlat.INSTANCE,
+						GenerationPreviewFieldUniqueBlock.INSTANCE});
+	}
+
+	private void configureCodeGeneration() {
+		settings.setDefaultDeduceSettings(true);
+		settings.setDefaultVariable(LocalUniqueVariableDescription.INSTANCE);
+		settings.setDefaultStatement(FlatStatementGeneratorDescription.INSTANCE);
+	}
+
+	private void configureTypeSpecific() {
+		List<ComponentNameDescription> descriptions = Lists.newArrayList();
+		descriptions.add(new ComponentNameDescription("org.eclipse.swt.widgets.Text",
+				"text",
+				"txt",
+				true));
+		descriptions.add(new ComponentNameDescription("org.eclipse.swt.widgets.Table",
+				"table",
+				"tbl",
+				true));
+		NamesManager.setDefaultNameDescriptions(this, descriptions);
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/ToolkitProvider.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/ToolkitProvider.java
index 2e8303fad..f4ac70b23 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/ToolkitProvider.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/ToolkitProvider.java
@@ -21,18 +21,18 @@
  * @coverage rcp
  */
 public final class ToolkitProvider implements IToolkitProvider {
-  public static final ToolkitDescriptionJava DESCRIPTION = RcpToolkitDescription.INSTANCE;
-  static {
-    ((RcpToolkitDescription) DESCRIPTION).initialize();
-  }
+	public static final ToolkitDescriptionJava DESCRIPTION = RcpToolkitDescription.INSTANCE;
+	static {
+		((RcpToolkitDescription) DESCRIPTION).initialize();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IToolkitProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public ToolkitDescription getDescription() {
-    return DESCRIPTION;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IToolkitProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public ToolkitDescription getDescription() {
+		return DESCRIPTION;
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/EditPartFactory.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/EditPartFactory.java
index bb386fc60..15dbacfdd 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/EditPartFactory.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/EditPartFactory.java
@@ -35,67 +35,67 @@
  * @coverage rcp.gef
  */
 public final class EditPartFactory implements IEditPartFactory {
-  private final static IEditPartFactory MATCHING_FACTORY =
-      new MatchingEditPartFactory(ImmutableList.of("org.eclipse.wb.internal.rcp.model"),
-          ImmutableList.of("org.eclipse.wb.internal.rcp.gef.part"));
+	private final static IEditPartFactory MATCHING_FACTORY =
+			new MatchingEditPartFactory(ImmutableList.of("org.eclipse.wb.internal.rcp.model"),
+					ImmutableList.of("org.eclipse.wb.internal.rcp.gef.part"));
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IEditPartFactory
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public EditPart createEditPart(EditPart context, Object model) {
-    // special Composite's
-    if (model instanceof CompositeInfo) {
-      CompositeInfo composite = (CompositeInfo) model;
-      // Form.getHead()
-      if (composite.getParent() instanceof FormInfo) {
-        FormInfo form = (FormInfo) composite.getParent();
-        if (form.getHead() == composite) {
-          return new FormHeadEditPart(form);
-        }
-      }
-      // Dialog.createButtonsForButtonBar(parent)
-      if (DialogInfo.isButtonBar(composite)) {
-        return new DialogButtonBarEditPart(composite);
-      }
-    }
-    // MenuManagerInfo
-    {
-      if (model instanceof MenuManagerInfo) {
-        MenuManagerInfo menuManager = (MenuManagerInfo) model;
-        if (menuManager.getParent() instanceof MenuManagerInfo) {
-          IMenuItemInfo itemObject = MenuObjectInfoUtils.getMenuItemInfo(menuManager);
-          return MenuEditPartFactory.createMenuItem(menuManager, itemObject);
-        } else {
-          return createMenuEditPart(menuManager, MenuObjectInfoUtils.getMenuInfo(model));
-        }
-      }
-      if (model instanceof IMenuInfo) {
-        IMenuInfo menu = (IMenuInfo) model;
-        return createMenuEditPart(model, menu);
-      }
-      if (model instanceof AbstractComponentInfo) {
-        AbstractComponentInfo item = (AbstractComponentInfo) model;
-        if (((AbstractComponentInfo) model).getParent() instanceof MenuManagerInfo) {
-          IMenuItemInfo itemObject = MenuObjectInfoUtils.getMenuItemInfo(item);
-          return MenuEditPartFactory.createMenuItem(item, itemObject);
-        }
-      }
-    }
-    // most EditPart's can be created using matching
-    return MATCHING_FACTORY.createEditPart(context, model);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IEditPartFactory
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public EditPart createEditPart(EditPart context, Object model) {
+		// special Composite's
+		if (model instanceof CompositeInfo) {
+			CompositeInfo composite = (CompositeInfo) model;
+			// Form.getHead()
+			if (composite.getParent() instanceof FormInfo) {
+				FormInfo form = (FormInfo) composite.getParent();
+				if (form.getHead() == composite) {
+					return new FormHeadEditPart(form);
+				}
+			}
+			// Dialog.createButtonsForButtonBar(parent)
+			if (DialogInfo.isButtonBar(composite)) {
+				return new DialogButtonBarEditPart(composite);
+			}
+		}
+		// MenuManagerInfo
+		{
+			if (model instanceof MenuManagerInfo) {
+				MenuManagerInfo menuManager = (MenuManagerInfo) model;
+				if (menuManager.getParent() instanceof MenuManagerInfo) {
+					IMenuItemInfo itemObject = MenuObjectInfoUtils.getMenuItemInfo(menuManager);
+					return MenuEditPartFactory.createMenuItem(menuManager, itemObject);
+				} else {
+					return createMenuEditPart(menuManager, MenuObjectInfoUtils.getMenuInfo(model));
+				}
+			}
+			if (model instanceof IMenuInfo) {
+				IMenuInfo menu = (IMenuInfo) model;
+				return createMenuEditPart(model, menu);
+			}
+			if (model instanceof AbstractComponentInfo) {
+				AbstractComponentInfo item = (AbstractComponentInfo) model;
+				if (((AbstractComponentInfo) model).getParent() instanceof MenuManagerInfo) {
+					IMenuItemInfo itemObject = MenuObjectInfoUtils.getMenuItemInfo(item);
+					return MenuEditPartFactory.createMenuItem(item, itemObject);
+				}
+			}
+		}
+		// most EditPart's can be created using matching
+		return MATCHING_FACTORY.createEditPart(context, model);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static EditPart createMenuEditPart(Object model, IMenuInfo menuInfo) {
-    return EnvironmentUtils.IS_MAC
-        ? MenuEditPartFactory.createMenuMac(model, menuInfo)
-        : MenuEditPartFactory.createMenu(model, menuInfo);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static EditPart createMenuEditPart(Object model, IMenuInfo menuInfo) {
+		return EnvironmentUtils.IS_MAC
+				? MenuEditPartFactory.createMenuMac(model, menuInfo)
+						: MenuEditPartFactory.createMenu(model, menuInfo);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/GefMessages.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/GefMessages.java
index 076e29f7a..e7bc74c1d 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/GefMessages.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/GefMessages.java
@@ -3,41 +3,41 @@
 import org.eclipse.osgi.util.NLS;
 
 public class GefMessages extends NLS {
-  private static final String BUNDLE_NAME = "org.eclipse.wb.internal.rcp.gef.GefMessages"; //$NON-NLS-1$
-  public static String CBannerLayoutEditPolicy_posBottom;
-  public static String CBannerLayoutEditPolicy_posLeft;
-  public static String CBannerLayoutEditPolicy_posRight;
-  public static String ColumnHeaderEditPart_actionDelete;
-  public static String ColumnHeaderEditPart_actionGrab;
-  public static String ColumnHeaderEditPart_alignmentCenter;
-  public static String ColumnHeaderEditPart_alignmentFill;
-  public static String ColumnHeaderEditPart_alignmentLeft;
-  public static String ColumnHeaderEditPart_alignmentRight;
-  public static String ColumnsLayoutEditPolicy_feedbackText;
-  public static String ExpandableCompositeLayoutEditPolicy_clientHint;
-  public static String ExpandableCompositeLayoutEditPolicy_textClientHint;
-  public static String PageLayoutSidesLayoutEditPolicy_sameFolder;
-  public static String PageLayoutSidesLayoutEditPolicy_sideBottom;
-  public static String PageLayoutSidesLayoutEditPolicy_sideLeft;
-  public static String PageLayoutSidesLayoutEditPolicy_sideRight;
-  public static String PageLayoutSidesLayoutEditPolicy_sideTop;
-  public static String RowHeaderEditPart_actionDelete;
-  public static String RowHeaderEditPart_actionGrab;
-  public static String RowHeaderEditPart_alignmentBottom;
-  public static String RowHeaderEditPart_alignmentCenter;
-  public static String RowHeaderEditPart_alignmentFill;
-  public static String RowHeaderEditPart_alignmentTop;
-  public static String RowsLayoutEditPolicy_feedbackText;
-  public static String ScrolledCompositeEditPart_setContentWarning;
-  public static String ViewFormLayoutEditPolicy_posContent;
-  public static String ViewFormLayoutEditPolicy_posTopCenter;
-  public static String ViewFormLayoutEditPolicy_posTopLeft;
-  public static String ViewFormLayoutEditPolicy_posTopRight;
-  static {
-    // initialize resource bundle
-    NLS.initializeMessages(BUNDLE_NAME, GefMessages.class);
-  }
+	private static final String BUNDLE_NAME = "org.eclipse.wb.internal.rcp.gef.GefMessages"; //$NON-NLS-1$
+	public static String CBannerLayoutEditPolicy_posBottom;
+	public static String CBannerLayoutEditPolicy_posLeft;
+	public static String CBannerLayoutEditPolicy_posRight;
+	public static String ColumnHeaderEditPart_actionDelete;
+	public static String ColumnHeaderEditPart_actionGrab;
+	public static String ColumnHeaderEditPart_alignmentCenter;
+	public static String ColumnHeaderEditPart_alignmentFill;
+	public static String ColumnHeaderEditPart_alignmentLeft;
+	public static String ColumnHeaderEditPart_alignmentRight;
+	public static String ColumnsLayoutEditPolicy_feedbackText;
+	public static String ExpandableCompositeLayoutEditPolicy_clientHint;
+	public static String ExpandableCompositeLayoutEditPolicy_textClientHint;
+	public static String PageLayoutSidesLayoutEditPolicy_sameFolder;
+	public static String PageLayoutSidesLayoutEditPolicy_sideBottom;
+	public static String PageLayoutSidesLayoutEditPolicy_sideLeft;
+	public static String PageLayoutSidesLayoutEditPolicy_sideRight;
+	public static String PageLayoutSidesLayoutEditPolicy_sideTop;
+	public static String RowHeaderEditPart_actionDelete;
+	public static String RowHeaderEditPart_actionGrab;
+	public static String RowHeaderEditPart_alignmentBottom;
+	public static String RowHeaderEditPart_alignmentCenter;
+	public static String RowHeaderEditPart_alignmentFill;
+	public static String RowHeaderEditPart_alignmentTop;
+	public static String RowsLayoutEditPolicy_feedbackText;
+	public static String ScrolledCompositeEditPart_setContentWarning;
+	public static String ViewFormLayoutEditPolicy_posContent;
+	public static String ViewFormLayoutEditPolicy_posTopCenter;
+	public static String ViewFormLayoutEditPolicy_posTopLeft;
+	public static String ViewFormLayoutEditPolicy_posTopRight;
+	static {
+		// initialize resource bundle
+		NLS.initializeMessages(BUNDLE_NAME, GefMessages.class);
+	}
 
-  private GefMessages() {
-  }
+	private GefMessages() {
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/LayoutEditPolicyFactory.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/LayoutEditPolicyFactory.java
index 3112b648d..4154140c2 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/LayoutEditPolicyFactory.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/LayoutEditPolicyFactory.java
@@ -24,16 +24,16 @@
  * @coverage rcp.gef
  */
 public final class LayoutEditPolicyFactory implements ILayoutEditPolicyFactory {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ILayoutEditPolicyFactory
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public LayoutEditPolicy createLayoutEditPolicy(EditPart context, Object model) {
-    if (model instanceof TableWrapLayoutInfo) {
-      return new TableWrapLayoutEditPolicy<ControlInfo>((TableWrapLayoutInfo) model);
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ILayoutEditPolicyFactory
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public LayoutEditPolicy createLayoutEditPolicy(EditPart context, Object model) {
+		if (model instanceof TableWrapLayoutInfo) {
+			return new TableWrapLayoutEditPolicy<ControlInfo>((TableWrapLayoutInfo) model);
+		}
+		return null;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/forms/DetailsPageEditPart.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/forms/DetailsPageEditPart.java
index 8dddd27d7..efa99d49a 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/forms/DetailsPageEditPart.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/forms/DetailsPageEditPart.java
@@ -21,12 +21,12 @@
  * @coverage rcp.gef.part
  */
 public final class DetailsPageEditPart extends AbstractComponentEditPart {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DetailsPageEditPart(DetailsPageInfo page) {
-    super(page);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DetailsPageEditPart(DetailsPageInfo page) {
+		super(page);
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/forms/ExpandableCompositeEditPart.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/forms/ExpandableCompositeEditPart.java
index 0251dece5..b8f5048cc 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/forms/ExpandableCompositeEditPart.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/forms/ExpandableCompositeEditPart.java
@@ -23,27 +23,27 @@
  * @coverage rcp.gef.part
  */
 public final class ExpandableCompositeEditPart extends CompositeEditPart {
-  private final ExpandableCompositeInfo m_composite;
+	private final ExpandableCompositeInfo m_composite;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ExpandableCompositeEditPart(ExpandableCompositeInfo composite) {
-    super(composite);
-    m_composite = composite;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ExpandableCompositeEditPart(ExpandableCompositeInfo composite) {
+		super(composite);
+		m_composite = composite;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Policy
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void refreshEditPolicies() {
-    super.refreshEditPolicies();
-    installEditPolicy(new ExpandableCompositeLayoutEditPolicy(m_composite));
-    installEditPolicy(new TerminatorLayoutEditPolicy());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Policy
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void refreshEditPolicies() {
+		super.refreshEditPolicies();
+		installEditPolicy(new ExpandableCompositeLayoutEditPolicy(m_composite));
+		installEditPolicy(new TerminatorLayoutEditPolicy());
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/forms/FormEditPart.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/forms/FormEditPart.java
index 2a4db249d..5cb9edba8 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/forms/FormEditPart.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/forms/FormEditPart.java
@@ -24,31 +24,31 @@
  * @coverage rcp.gef.part
  */
 public final class FormEditPart extends CompositeEditPart {
-  private final FormInfo m_form;
+	private final FormInfo m_form;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FormEditPart(FormInfo form) {
-    super(form);
-    m_form = form;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FormEditPart(FormInfo form) {
+		super(form);
+		m_form = form;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Children
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected EditPart createEditPart(Object model) {
-    if (model instanceof MenuManagerInfo) {
-      MenuManagerInfo manager = (MenuManagerInfo) model;
-      EditPart editPart = MenuEditPartFactory.createPopupMenu(model, m_form.getMenuImpl(manager));
-      EditPartFactory.configureEditPart(this, editPart);
-      return editPart;
-    }
-    return super.createEditPart(model);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Children
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected EditPart createEditPart(Object model) {
+		if (model instanceof MenuManagerInfo) {
+			MenuManagerInfo manager = (MenuManagerInfo) model;
+			EditPart editPart = MenuEditPartFactory.createPopupMenu(model, m_form.getMenuImpl(manager));
+			EditPartFactory.configureEditPart(this, editPart);
+			return editPart;
+		}
+		return super.createEditPart(model);
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/forms/FormHeadEditPart.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/forms/FormHeadEditPart.java
index 2d3823938..ef3a0ac6b 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/forms/FormHeadEditPart.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/forms/FormHeadEditPart.java
@@ -22,26 +22,26 @@
  * @coverage rcp.gef.part
  */
 public final class FormHeadEditPart extends CompositeEditPart {
-  private final FormInfo m_form;
+	private final FormInfo m_form;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FormHeadEditPart(FormInfo form) {
-    super(form.getHead());
-    m_form = form;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FormHeadEditPart(FormInfo form) {
+		super(form.getHead());
+		m_form = form;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Policy
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void refreshEditPolicies() {
-    super.refreshEditPolicies();
-    installEditPolicy(new FormHeadLayoutEditPolicy(m_form));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Policy
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void refreshEditPolicies() {
+		super.refreshEditPolicies();
+		installEditPolicy(new FormHeadLayoutEditPolicy(m_form));
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/forms/ManagedFormEditPart.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/forms/ManagedFormEditPart.java
index 571cf3531..1f5c021b3 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/forms/ManagedFormEditPart.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/forms/ManagedFormEditPart.java
@@ -21,12 +21,12 @@
  * @coverage rcp.gef.part
  */
 public final class ManagedFormEditPart extends AbstractComponentEditPart {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ManagedFormEditPart(ManagedFormInfo managedForm) {
-    super(managedForm);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ManagedFormEditPart(ManagedFormInfo managedForm) {
+		super(managedForm);
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/forms/MasterDetailsBlockEditPart.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/forms/MasterDetailsBlockEditPart.java
index b45e5b6f1..f481fa00e 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/forms/MasterDetailsBlockEditPart.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/forms/MasterDetailsBlockEditPart.java
@@ -21,12 +21,12 @@
  * @coverage rcp.gef.part
  */
 public final class MasterDetailsBlockEditPart extends AbstractComponentEditPart {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public MasterDetailsBlockEditPart(MasterDetailsBlockInfo block) {
-    super(block);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public MasterDetailsBlockEditPart(MasterDetailsBlockInfo block) {
+		super(block);
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/forms/SectionPartEditPart.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/forms/SectionPartEditPart.java
index add4540e1..dd58ccda6 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/forms/SectionPartEditPart.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/forms/SectionPartEditPart.java
@@ -21,12 +21,12 @@
  * @coverage rcp.gef.part
  */
 public final class SectionPartEditPart extends AbstractComponentEditPart {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SectionPartEditPart(SectionPartInfo composite) {
-    super(composite);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SectionPartEditPart(SectionPartInfo composite) {
+		super(composite);
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/jface/ControlDecorationEditPart.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/jface/ControlDecorationEditPart.java
index 23fe5a654..03b560e1c 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/jface/ControlDecorationEditPart.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/jface/ControlDecorationEditPart.java
@@ -28,68 +28,68 @@
  * @coverage rcp.gef.part
  */
 public final class ControlDecorationEditPart extends AbstractComponentEditPart {
-  private final ControlDecorationInfo m_decoration;
+	private final ControlDecorationInfo m_decoration;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ControlDecorationEditPart(ControlDecorationInfo decoration) {
-    super(decoration);
-    m_decoration = decoration;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ControlDecorationEditPart(ControlDecorationInfo decoration) {
+		super(decoration);
+		m_decoration = decoration;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Figure
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Figure m_originalControlFigure;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Figure
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Figure m_originalControlFigure;
 
-  @Override
-  protected void refreshVisuals() {
-    Figure figure = getFigure();
-    Figure controlFigure = getControlFigure();
-    Figure controlParentFigure = controlFigure.getParent();
-    // ensure that decoration is located on _parent_ of Control
-    if (figure.getParent() != controlParentFigure) {
-      m_originalControlFigure = controlFigure;
-      FigureUtils.removeFigure(figure);
-      int controlIndex = controlParentFigure.getChildren().indexOf(controlFigure);
-      controlParentFigure.add(figure, controlIndex + 1);
-    }
-    // set decoration bounds
-    {
-      Point controlLocation = controlFigure.getLocation();
-      Rectangle boundsInParent = m_decoration.getModelBounds().getTranslated(controlLocation);
-      boundsInParent.performTranslate(1, 1); // not sure why, but required to center selection visually
-      figure.setBounds(boundsInParent);
-    }
-  }
+	@Override
+	protected void refreshVisuals() {
+		Figure figure = getFigure();
+		Figure controlFigure = getControlFigure();
+		Figure controlParentFigure = controlFigure.getParent();
+		// ensure that decoration is located on _parent_ of Control
+		if (figure.getParent() != controlParentFigure) {
+			m_originalControlFigure = controlFigure;
+			FigureUtils.removeFigure(figure);
+			int controlIndex = controlParentFigure.getChildren().indexOf(controlFigure);
+			controlParentFigure.add(figure, controlIndex + 1);
+		}
+		// set decoration bounds
+		{
+			Point controlLocation = controlFigure.getLocation();
+			Rectangle boundsInParent = m_decoration.getModelBounds().getTranslated(controlLocation);
+			boundsInParent.performTranslate(1, 1); // not sure why, but required to center selection visually
+			figure.setBounds(boundsInParent);
+		}
+	}
 
-  @Override
-  public void removeNotify() {
-    // move decoration figure back to Control figure
-    {
-      Figure figure = getFigure();
-      FigureUtils.removeFigure(figure);
-      m_originalControlFigure.add(figure);
-    }
-    // continue
-    super.removeNotify();
-  }
+	@Override
+	public void removeNotify() {
+		// move decoration figure back to Control figure
+		{
+			Figure figure = getFigure();
+			FigureUtils.removeFigure(figure);
+			m_originalControlFigure.add(figure);
+		}
+		// continue
+		super.removeNotify();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link Figure} of decorated {@link ControlInfo}.
-   */
-  private Figure getControlFigure() {
-    EditPart controlEditPart = getViewer().getEditPartByModel(m_decoration.getControl());
-    return ((GraphicalEditPart) controlEditPart).getFigure();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link Figure} of decorated {@link ControlInfo}.
+	 */
+	private Figure getControlFigure() {
+		EditPart controlEditPart = getViewer().getEditPartByModel(m_decoration.getControl());
+		return ((GraphicalEditPart) controlEditPart).getFigure();
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/jface/DialogButtonBarEditPart.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/jface/DialogButtonBarEditPart.java
index eff8ba365..606feee95 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/jface/DialogButtonBarEditPart.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/jface/DialogButtonBarEditPart.java
@@ -24,27 +24,27 @@
  * @coverage rcp.gef.part
  */
 public final class DialogButtonBarEditPart extends CompositeEditPart {
-  private final CompositeInfo m_composite;
+	private final CompositeInfo m_composite;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DialogButtonBarEditPart(CompositeInfo composite) {
-    super(composite);
-    m_composite = composite;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DialogButtonBarEditPart(CompositeInfo composite) {
+		super(composite);
+		m_composite = composite;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Policy
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void refreshEditPolicies() {
-    super.refreshEditPolicies();
-    installEditPolicy(new DialogButtonBarLayoutEditPolicy(m_composite));
-    installEditPolicy(new TerminatorLayoutEditPolicy());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Policy
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void refreshEditPolicies() {
+		super.refreshEditPolicies();
+		installEditPolicy(new DialogButtonBarLayoutEditPolicy(m_composite));
+		installEditPolicy(new TerminatorLayoutEditPolicy());
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/jface/DialogEditPart.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/jface/DialogEditPart.java
index 2edf8839d..1f66853d8 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/jface/DialogEditPart.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/jface/DialogEditPart.java
@@ -20,12 +20,12 @@
  * @coverage rcp.gef.part
  */
 public final class DialogEditPart extends WindowEditPart {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DialogEditPart(DialogInfo dialog) {
-    super(dialog);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DialogEditPart(DialogInfo dialog) {
+		super(dialog);
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/jface/DialogPageEditPart.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/jface/DialogPageEditPart.java
index d923e148d..df73915a3 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/jface/DialogPageEditPart.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/jface/DialogPageEditPart.java
@@ -21,12 +21,12 @@
  * @coverage rcp.gef.part
  */
 public class DialogPageEditPart extends AbstractComponentEditPart {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DialogPageEditPart(DialogPageInfo page) {
-    super(page);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DialogPageEditPart(DialogPageInfo page) {
+		super(page);
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/jface/FieldEditorEditPart.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/jface/FieldEditorEditPart.java
index 1b27587d7..b8bdc44dd 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/jface/FieldEditorEditPart.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/jface/FieldEditorEditPart.java
@@ -21,12 +21,12 @@
  * @coverage rcp.gef.part
  */
 public final class FieldEditorEditPart extends AbstractComponentEditPart {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FieldEditorEditPart(FieldEditorInfo fieldEditor) {
-    super(fieldEditor);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FieldEditorEditPart(FieldEditorInfo fieldEditor) {
+		super(fieldEditor);
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/jface/WindowEditPart.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/jface/WindowEditPart.java
index b1ea0419b..80374d290 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/jface/WindowEditPart.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/jface/WindowEditPart.java
@@ -21,12 +21,12 @@
  * @coverage rcp.gef.part
  */
 public class WindowEditPart extends AbstractComponentEditPart {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public WindowEditPart(WindowInfo window) {
-    super(window);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public WindowEditPart(WindowInfo window) {
+		super(window);
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/jface/action/ActionContributionItemEditPart.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/jface/action/ActionContributionItemEditPart.java
index 999d0a97f..0897c6ae7 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/jface/action/ActionContributionItemEditPart.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/jface/action/ActionContributionItemEditPart.java
@@ -20,12 +20,12 @@
  * @coverage rcp.gef.part
  */
 public final class ActionContributionItemEditPart extends ContributionItemEditPart {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ActionContributionItemEditPart(ActionContributionItemInfo item) {
-    super(item);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ActionContributionItemEditPart(ActionContributionItemInfo item) {
+		super(item);
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/jface/action/ContributionItemEditPart.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/jface/action/ContributionItemEditPart.java
index 800693240..7b0a74252 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/jface/action/ContributionItemEditPart.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/jface/action/ContributionItemEditPart.java
@@ -21,12 +21,12 @@
  * @coverage rcp.gef.part
  */
 public class ContributionItemEditPart extends AbstractComponentEditPart {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ContributionItemEditPart(ContributionItemInfo item) {
-    super(item);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ContributionItemEditPart(ContributionItemInfo item) {
+		super(item);
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/jface/action/ContributionManagerEditPart.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/jface/action/ContributionManagerEditPart.java
index e372ec244..6fe44f2fa 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/jface/action/ContributionManagerEditPart.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/jface/action/ContributionManagerEditPart.java
@@ -21,12 +21,12 @@
  * @coverage rcp.gef.part
  */
 public final class ContributionManagerEditPart extends AbstractComponentEditPart {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ContributionManagerEditPart(ContributionManagerInfo manager) {
-    super(manager);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ContributionManagerEditPart(ContributionManagerInfo manager) {
+		super(manager);
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/jface/action/ToolBarManagerEditPart.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/jface/action/ToolBarManagerEditPart.java
index afa0b8cf8..a0c76ce0a 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/jface/action/ToolBarManagerEditPart.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/jface/action/ToolBarManagerEditPart.java
@@ -22,26 +22,26 @@
  * @coverage rcp.gef.part
  */
 public final class ToolBarManagerEditPart extends AbstractComponentEditPart {
-  private final ToolBarManagerInfo m_manager;
+	private final ToolBarManagerInfo m_manager;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ToolBarManagerEditPart(ToolBarManagerInfo manager) {
-    super(manager);
-    m_manager = manager;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ToolBarManagerEditPart(ToolBarManagerInfo manager) {
+		super(manager);
+		m_manager = manager;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Policy
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void refreshEditPolicies() {
-    super.refreshEditPolicies();
-    installEditPolicy(new ToolBarManagerLayoutEditPolicy(m_manager));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Policy
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void refreshEditPolicies() {
+		super.refreshEditPolicies();
+		installEditPolicy(new ToolBarManagerLayoutEditPolicy(m_manager));
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/rcp/AbstractSplashHandlerEditPart.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/rcp/AbstractSplashHandlerEditPart.java
index e553e46c4..1ab05c5c0 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/rcp/AbstractSplashHandlerEditPart.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/rcp/AbstractSplashHandlerEditPart.java
@@ -21,12 +21,12 @@
  * @coverage rcp.gef.part
  */
 public class AbstractSplashHandlerEditPart extends AbstractComponentEditPart {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractSplashHandlerEditPart(AbstractSplashHandlerInfo splash) {
-    super(splash);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractSplashHandlerEditPart(AbstractSplashHandlerInfo splash) {
+		super(splash);
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/rcp/ActionBarAdvisorEditPart.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/rcp/ActionBarAdvisorEditPart.java
index 307652871..9a15304da 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/rcp/ActionBarAdvisorEditPart.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/rcp/ActionBarAdvisorEditPart.java
@@ -21,12 +21,12 @@
  * @coverage rcp.gef.part
  */
 public final class ActionBarAdvisorEditPart extends AbstractComponentEditPart {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ActionBarAdvisorEditPart(ActionBarAdvisorInfo advisor) {
-    super(advisor);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ActionBarAdvisorEditPart(ActionBarAdvisorInfo advisor) {
+		super(advisor);
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/rcp/ViewPartLikeEditPart.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/rcp/ViewPartLikeEditPart.java
index dff7b3012..a9fa77eb7 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/rcp/ViewPartLikeEditPart.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/rcp/ViewPartLikeEditPart.java
@@ -23,31 +23,31 @@
  * @coverage rcp.gef.part
  */
 public final class ViewPartLikeEditPart extends WorkbenchPartLikeEditPart {
-  private final ViewPartLikeInfo m_part;
+	private final ViewPartLikeInfo m_part;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ViewPartLikeEditPart(ViewPartLikeInfo part) {
-    super(part);
-    m_part = part;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ViewPartLikeEditPart(ViewPartLikeInfo part) {
+		super(part);
+		m_part = part;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Children
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected EditPart createEditPart(Object model) {
-    if (model instanceof MenuManagerInfo) {
-      MenuManagerInfo manager = (MenuManagerInfo) model;
-      EditPart editPart = MenuEditPartFactory.createPopupMenu(model, m_part.getMenuImpl(manager));
-      EditPartFactory.configureEditPart(this, editPart);
-      return editPart;
-    }
-    return super.createEditPart(model);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Children
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected EditPart createEditPart(Object model) {
+		if (model instanceof MenuManagerInfo) {
+			MenuManagerInfo manager = (MenuManagerInfo) model;
+			EditPart editPart = MenuEditPartFactory.createPopupMenu(model, m_part.getMenuImpl(manager));
+			EditPartFactory.configureEditPart(this, editPart);
+			return editPart;
+		}
+		return super.createEditPart(model);
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/rcp/WorkbenchPartLikeEditPart.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/rcp/WorkbenchPartLikeEditPart.java
index 43bbe1859..4f474e1d6 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/rcp/WorkbenchPartLikeEditPart.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/rcp/WorkbenchPartLikeEditPart.java
@@ -21,12 +21,12 @@
  * @coverage rcp.gef.part
  */
 public class WorkbenchPartLikeEditPart extends AbstractComponentEditPart {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public WorkbenchPartLikeEditPart(WorkbenchPartLikeInfo part) {
-    super(part);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public WorkbenchPartLikeEditPart(WorkbenchPartLikeInfo part) {
+		super(part);
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/rcp/perspective/EditorAreaEditPart.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/rcp/perspective/EditorAreaEditPart.java
index 9e47d00e9..711af65ba 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/rcp/perspective/EditorAreaEditPart.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/rcp/perspective/EditorAreaEditPart.java
@@ -27,44 +27,44 @@
  * @coverage rcp.gef.part
  */
 public final class EditorAreaEditPart extends GraphicalEditPart {
-  private final EditorAreaInfo m_editorArea;
+	private final EditorAreaInfo m_editorArea;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public EditorAreaEditPart(EditorAreaInfo editorArea) {
-    m_editorArea = editorArea;
-    setModel(m_editorArea);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public EditorAreaEditPart(EditorAreaInfo editorArea) {
+		m_editorArea = editorArea;
+		setModel(m_editorArea);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Figure
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Figure createFigure() {
-    return new Figure();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Figure
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Figure createFigure() {
+		return new Figure();
+	}
 
-  @Override
-  protected void refreshVisuals() {
-    Rectangle bounds = m_editorArea.getBounds();
-    getFigure().setBounds(bounds);
-  }
+	@Override
+	protected void refreshVisuals() {
+		Rectangle bounds = m_editorArea.getBounds();
+		getFigure().setBounds(bounds);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Policies
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createEditPolicies() {
-    installEditPolicy(EditPolicy.SELECTION_ROLE, new NonResizableSelectionEditPolicy());
-    installEditPolicy(new PageLayoutSidesLayoutEditPolicy(m_editorArea.getPage(),
-        m_editorArea,
-        false));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Policies
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createEditPolicies() {
+		installEditPolicy(EditPolicy.SELECTION_ROLE, new NonResizableSelectionEditPolicy());
+		installEditPolicy(new PageLayoutSidesLayoutEditPolicy(m_editorArea.getPage(),
+				m_editorArea,
+				false));
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/rcp/perspective/FolderViewEditPart.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/rcp/perspective/FolderViewEditPart.java
index 597620cc8..ae4cf1ead 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/rcp/perspective/FolderViewEditPart.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/rcp/perspective/FolderViewEditPart.java
@@ -21,12 +21,12 @@
  * @coverage rcp.gef.part
  */
 public final class FolderViewEditPart extends AbstractComponentEditPart {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FolderViewEditPart(FolderViewInfo view) {
-    super(view);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FolderViewEditPart(FolderViewInfo view) {
+		super(view);
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/rcp/perspective/PageLayoutAddViewEditPart.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/rcp/perspective/PageLayoutAddViewEditPart.java
index 6cd92b484..d779babb3 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/rcp/perspective/PageLayoutAddViewEditPart.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/rcp/perspective/PageLayoutAddViewEditPart.java
@@ -24,32 +24,32 @@
  * @coverage rcp.gef.part
  */
 public final class PageLayoutAddViewEditPart extends AbstractComponentEditPart {
-  private final PageLayoutAddViewInfo m_view;
+	private final PageLayoutAddViewInfo m_view;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public PageLayoutAddViewEditPart(PageLayoutAddViewInfo view) {
-    super(view);
-    m_view = view;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public PageLayoutAddViewEditPart(PageLayoutAddViewInfo view) {
+		super(view);
+		m_view = view;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Policies
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createEditPolicies() {
-    super.createEditPolicies();
-    installEditPolicy(new PageLayoutSidesLayoutEditPolicy(m_view.getPage(), m_view, true));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Policies
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createEditPolicies() {
+		super.createEditPolicies();
+		installEditPolicy(new PageLayoutSidesLayoutEditPolicy(m_view.getPage(), m_view, true));
+	}
 
-  @Override
-  protected void refreshEditPolicies() {
-    super.refreshEditPolicies();
-    installEditPolicy(EditPolicy.SELECTION_ROLE, new AbstractPartSelectionEditPolicy(m_view));
-  }
+	@Override
+	protected void refreshEditPolicies() {
+		super.refreshEditPolicies();
+		installEditPolicy(EditPolicy.SELECTION_ROLE, new AbstractPartSelectionEditPolicy(m_view));
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/rcp/perspective/PageLayoutCreateFolderEditPart.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/rcp/perspective/PageLayoutCreateFolderEditPart.java
index 285be04b3..dad62ac89 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/rcp/perspective/PageLayoutCreateFolderEditPart.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/rcp/perspective/PageLayoutCreateFolderEditPart.java
@@ -25,33 +25,33 @@
  * @coverage rcp.gef.part
  */
 public final class PageLayoutCreateFolderEditPart extends AbstractComponentEditPart {
-  private final PageLayoutCreateFolderInfo m_folder;
+	private final PageLayoutCreateFolderInfo m_folder;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public PageLayoutCreateFolderEditPart(PageLayoutCreateFolderInfo folder) {
-    super(folder);
-    m_folder = folder;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public PageLayoutCreateFolderEditPart(PageLayoutCreateFolderInfo folder) {
+		super(folder);
+		m_folder = folder;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Policies
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createEditPolicies() {
-    super.createEditPolicies();
-    installEditPolicy(new PageLayoutSidesLayoutEditPolicy(m_folder.getPage(), m_folder, false));
-    installEditPolicy(new PageLayoutCreateFolderLayoutEditPolicy(m_folder));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Policies
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createEditPolicies() {
+		super.createEditPolicies();
+		installEditPolicy(new PageLayoutSidesLayoutEditPolicy(m_folder.getPage(), m_folder, false));
+		installEditPolicy(new PageLayoutCreateFolderLayoutEditPolicy(m_folder));
+	}
 
-  @Override
-  protected void refreshEditPolicies() {
-    super.refreshEditPolicies();
-    installEditPolicy(EditPolicy.SELECTION_ROLE, new AbstractPartSelectionEditPolicy(m_folder));
-  }
+	@Override
+	protected void refreshEditPolicies() {
+		super.refreshEditPolicies();
+		installEditPolicy(EditPolicy.SELECTION_ROLE, new AbstractPartSelectionEditPolicy(m_folder));
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/rcp/perspective/PageLayoutEditPart.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/rcp/perspective/PageLayoutEditPart.java
index 2f58591d6..ee5c99fe4 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/rcp/perspective/PageLayoutEditPart.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/rcp/perspective/PageLayoutEditPart.java
@@ -25,40 +25,40 @@
  * @coverage rcp.gef.part
  */
 public final class PageLayoutEditPart extends AbstractComponentEditPart {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public PageLayoutEditPart(PageLayoutInfo page) {
-    super(page);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public PageLayoutEditPart(PageLayoutInfo page) {
+		super(page);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Children
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected List<?> getModelChildren() {
-    List<?> modelChildren = super.getModelChildren();
-    return modelChildren;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Children
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected List<?> getModelChildren() {
+		List<?> modelChildren = super.getModelChildren();
+		return modelChildren;
+	}
 
-  @Override
-  protected EditPart createEditPart(Object model) {
-    return super.createEditPart(model);
-  }
+	@Override
+	protected EditPart createEditPart(Object model) {
+		return super.createEditPart(model);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Figure
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final Point LOCATION = new Point(20, 40);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Figure
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final Point LOCATION = new Point(20, 40);
 
-  @Override
-  protected Point getRootLocation() {
-    return LOCATION;
-  }
+	@Override
+	protected Point getRootLocation() {
+		return LOCATION;
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/rcp/perspective/shortcuts/AbstractShortcutContainerEditPart.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/rcp/perspective/shortcuts/AbstractShortcutContainerEditPart.java
index bed5fc928..3d598f0c0 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/rcp/perspective/shortcuts/AbstractShortcutContainerEditPart.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/rcp/perspective/shortcuts/AbstractShortcutContainerEditPart.java
@@ -31,56 +31,56 @@
  * @coverage rcp.gef.part
  */
 abstract class AbstractShortcutContainerEditPart extends GraphicalEditPart {
-  private final AbstractShortcutContainerInfo m_container;
+	private final AbstractShortcutContainerInfo m_container;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractShortcutContainerEditPart(AbstractShortcutContainerInfo container) {
-    m_container = container;
-    setModel(m_container);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractShortcutContainerEditPart(AbstractShortcutContainerInfo container) {
+		m_container = container;
+		setModel(m_container);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Figure
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Figure createFigure() {
-    return new Figure();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Figure
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Figure createFigure() {
+		return new Figure();
+	}
 
-  @Override
-  protected void refreshVisuals() {
-    Rectangle bounds = m_container.getBounds();
-    getFigure().setBounds(bounds);
-  }
+	@Override
+	protected void refreshVisuals() {
+		Rectangle bounds = m_container.getBounds();
+		getFigure().setBounds(bounds);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Policies
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createEditPolicies() {
-    installEditPolicy(EditPolicy.SELECTION_ROLE, new NonResizableSelectionEditPolicy());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Policies
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createEditPolicies() {
+		installEditPolicy(EditPolicy.SELECTION_ROLE, new NonResizableSelectionEditPolicy());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Children
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected List<?> getModelChildren() {
-    return ExecutionUtils.runObjectLog(new RunnableObjectEx<List<?>>() {
-      @Override
-      public List<?> runObject() throws Exception {
-        return m_container.getPresentation().getChildrenGraphical();
-      }
-    }, Collections.emptyList());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Children
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected List<?> getModelChildren() {
+		return ExecutionUtils.runObjectLog(new RunnableObjectEx<List<?>>() {
+			@Override
+			public List<?> runObject() throws Exception {
+				return m_container.getPresentation().getChildrenGraphical();
+			}
+		}, Collections.emptyList());
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/rcp/perspective/shortcuts/AbstractShortcutEditPart.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/rcp/perspective/shortcuts/AbstractShortcutEditPart.java
index 5482c5fe5..1907e7516 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/rcp/perspective/shortcuts/AbstractShortcutEditPart.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/rcp/perspective/shortcuts/AbstractShortcutEditPart.java
@@ -21,12 +21,12 @@
  * @coverage rcp.gef.part
  */
 public final class AbstractShortcutEditPart extends AbstractComponentEditPart {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractShortcutEditPart(AbstractShortcutInfo shortcut) {
-    super(shortcut);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractShortcutEditPart(AbstractShortcutInfo shortcut) {
+		super(shortcut);
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/rcp/perspective/shortcuts/FastViewContainerEditPart.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/rcp/perspective/shortcuts/FastViewContainerEditPart.java
index d050c456c..f43a495bc 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/rcp/perspective/shortcuts/FastViewContainerEditPart.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/rcp/perspective/shortcuts/FastViewContainerEditPart.java
@@ -21,26 +21,26 @@
  * @coverage rcp.gef.part
  */
 public final class FastViewContainerEditPart extends AbstractShortcutContainerEditPart {
-  private final FastViewContainerInfo m_container;
+	private final FastViewContainerInfo m_container;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FastViewContainerEditPart(FastViewContainerInfo container) {
-    super(container);
-    m_container = container;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FastViewContainerEditPart(FastViewContainerInfo container) {
+		super(container);
+		m_container = container;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Policies
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createEditPolicies() {
-    super.createEditPolicies();
-    installEditPolicy(new FastViewContainerLayoutEditPolicy(m_container));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Policies
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createEditPolicies() {
+		super.createEditPolicies();
+		installEditPolicy(new FastViewContainerLayoutEditPolicy(m_container));
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/rcp/perspective/shortcuts/PerspectiveShortcutContainerEditPart.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/rcp/perspective/shortcuts/PerspectiveShortcutContainerEditPart.java
index 74ff0dc99..f0bdee7dc 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/rcp/perspective/shortcuts/PerspectiveShortcutContainerEditPart.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/rcp/perspective/shortcuts/PerspectiveShortcutContainerEditPart.java
@@ -21,26 +21,26 @@
  * @coverage rcp.gef.part
  */
 public final class PerspectiveShortcutContainerEditPart extends AbstractShortcutContainerEditPart {
-  private final PerspectiveShortcutContainerInfo m_container;
+	private final PerspectiveShortcutContainerInfo m_container;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public PerspectiveShortcutContainerEditPart(PerspectiveShortcutContainerInfo container) {
-    super(container);
-    m_container = container;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public PerspectiveShortcutContainerEditPart(PerspectiveShortcutContainerInfo container) {
+		super(container);
+		m_container = container;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Policies
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createEditPolicies() {
-    super.createEditPolicies();
-    installEditPolicy(new PerspectiveShortcutContainerLayoutEditPolicy(m_container));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Policies
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createEditPolicies() {
+		super.createEditPolicies();
+		installEditPolicy(new PerspectiveShortcutContainerLayoutEditPolicy(m_container));
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/rcp/perspective/shortcuts/ViewShortcutContainerEditPart.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/rcp/perspective/shortcuts/ViewShortcutContainerEditPart.java
index 59b79aa31..a2c37f962 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/rcp/perspective/shortcuts/ViewShortcutContainerEditPart.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/rcp/perspective/shortcuts/ViewShortcutContainerEditPart.java
@@ -21,26 +21,26 @@
  * @coverage rcp.gef.part
  */
 public final class ViewShortcutContainerEditPart extends AbstractShortcutContainerEditPart {
-  private final ViewShortcutContainerInfo m_container;
+	private final ViewShortcutContainerInfo m_container;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ViewShortcutContainerEditPart(ViewShortcutContainerInfo container) {
-    super(container);
-    m_container = container;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ViewShortcutContainerEditPart(ViewShortcutContainerInfo container) {
+		super(container);
+		m_container = container;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Policies
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createEditPolicies() {
-    super.createEditPolicies();
-    installEditPolicy(new ViewShortcutContainerLayoutEditPolicy(m_container));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Policies
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createEditPolicies() {
+		super.createEditPolicies();
+		installEditPolicy(new ViewShortcutContainerLayoutEditPolicy(m_container));
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/widgets/CBannerEditPart.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/widgets/CBannerEditPart.java
index d62bb3519..5049623c6 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/widgets/CBannerEditPart.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/widgets/CBannerEditPart.java
@@ -23,27 +23,27 @@
  * @coverage rcp.gef.part
  */
 public final class CBannerEditPart extends CompositeEditPart {
-  private final CBannerInfo m_composite;
+	private final CBannerInfo m_composite;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CBannerEditPart(CBannerInfo composite) {
-    super(composite);
-    m_composite = composite;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CBannerEditPart(CBannerInfo composite) {
+		super(composite);
+		m_composite = composite;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Policy
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void refreshEditPolicies() {
-    super.refreshEditPolicies();
-    installEditPolicy(new CBannerLayoutEditPolicy(m_composite));
-    installEditPolicy(new TerminatorLayoutEditPolicy());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Policy
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void refreshEditPolicies() {
+		super.refreshEditPolicies();
+		installEditPolicy(new CBannerLayoutEditPolicy(m_composite));
+		installEditPolicy(new TerminatorLayoutEditPolicy());
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/widgets/DialogEditPart.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/widgets/DialogEditPart.java
index a4308d473..974071649 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/widgets/DialogEditPart.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/widgets/DialogEditPart.java
@@ -24,31 +24,31 @@
  * @coverage rcp.gef.part
  */
 public class DialogEditPart extends AbstractComponentEditPart {
-  private final DialogInfo m_dialog;
+	private final DialogInfo m_dialog;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DialogEditPart(DialogInfo dialog) {
-    super(dialog);
-    m_dialog = dialog;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DialogEditPart(DialogInfo dialog) {
+		super(dialog);
+		m_dialog = dialog;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Policies
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void refreshEditPolicies() {
-    super.refreshEditPolicies();
-    // injecting into main {@link ShellEditPart} a {@link TopSelectionEditPolicy}.
-    for (EditPart child : getChildren()) {
-      if (child.getModel() == m_dialog.getShellInfo()) {
-        child.installEditPolicy(EditPolicy.SELECTION_ROLE, new TopSelectionEditPolicy(m_dialog));
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Policies
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void refreshEditPolicies() {
+		super.refreshEditPolicies();
+		// injecting into main {@link ShellEditPart} a {@link TopSelectionEditPolicy}.
+		for (EditPart child : getChildren()) {
+			if (child.getModel() == m_dialog.getShellInfo()) {
+				child.installEditPolicy(EditPolicy.SELECTION_ROLE, new TopSelectionEditPolicy(m_dialog));
+			}
+		}
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/widgets/DragSourceEditPart.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/widgets/DragSourceEditPart.java
index d6a33e146..367960347 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/widgets/DragSourceEditPart.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/widgets/DragSourceEditPart.java
@@ -23,22 +23,22 @@
  * @coverage rcp.gef.part
  */
 public final class DragSourceEditPart extends ComponentIconEditPart {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DragSourceEditPart(IDragSourceInfo component) {
-    super(component);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DragSourceEditPart(IDragSourceInfo component) {
+		super(component);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Figure
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Rectangle getFigureBounds(int width, int height) {
-    return new Rectangle(25, 5, width, height);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Figure
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Rectangle getFigureBounds(int width, int height) {
+		return new Rectangle(25, 5, width, height);
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/widgets/DropTargetEditPart.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/widgets/DropTargetEditPart.java
index ff7ba5a2e..f30f758d5 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/widgets/DropTargetEditPart.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/widgets/DropTargetEditPart.java
@@ -23,22 +23,22 @@
  * @coverage rcp.gef.part
  */
 public final class DropTargetEditPart extends ComponentIconEditPart {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DropTargetEditPart(IDropTargetInfo component) {
-    super(component);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DropTargetEditPart(IDropTargetInfo component) {
+		super(component);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Figure
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Rectangle getFigureBounds(int width, int height) {
-    return new Rectangle(45, 5, width, height);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Figure
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Rectangle getFigureBounds(int width, int height) {
+		return new Rectangle(45, 5, width, height);
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/widgets/ScrolledCompositeEditPart.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/widgets/ScrolledCompositeEditPart.java
index b47b29867..9ead4eb6b 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/widgets/ScrolledCompositeEditPart.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/widgets/ScrolledCompositeEditPart.java
@@ -29,46 +29,46 @@
  * @coverage rcp.gef.part
  */
 public final class ScrolledCompositeEditPart extends CompositeEditPart {
-  private final ScrolledCompositeInfo m_composite;
+	private final ScrolledCompositeInfo m_composite;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ScrolledCompositeEditPart(ScrolledCompositeInfo composite) {
-    super(composite);
-    m_composite = composite;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ScrolledCompositeEditPart(ScrolledCompositeInfo composite) {
+		super(composite);
+		m_composite = composite;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Figure
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void drawCustomBorder(Figure figure, Graphics graphics) {
-    super.drawCustomBorder(figure, graphics);
-    if (!m_composite.hasRequired_setContent()) {
-      String message = GefMessages.ScrolledCompositeEditPart_setContentWarning;
-      Dimension extent = graphics.getTextExtent(message);
-      graphics.setForegroundColor(IColorConstants.red);
-      graphics.drawText(
-          message,
-          (figure.getSize().width - extent.width) / 2,
-          (figure.getSize().height - extent.height) / 2);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Figure
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void drawCustomBorder(Figure figure, Graphics graphics) {
+		super.drawCustomBorder(figure, graphics);
+		if (!m_composite.hasRequired_setContent()) {
+			String message = GefMessages.ScrolledCompositeEditPart_setContentWarning;
+			Dimension extent = graphics.getTextExtent(message);
+			graphics.setForegroundColor(IColorConstants.red);
+			graphics.drawText(
+					message,
+					(figure.getSize().width - extent.width) / 2,
+					(figure.getSize().height - extent.height) / 2);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Policy
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void refreshEditPolicies() {
-    super.refreshEditPolicies();
-    installEditPolicy(new ScrolledCompositeLayoutEditPolicy(m_composite));
-    installEditPolicy(new TerminatorLayoutEditPolicy());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Policy
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void refreshEditPolicies() {
+		super.refreshEditPolicies();
+		installEditPolicy(new ScrolledCompositeLayoutEditPolicy(m_composite));
+		installEditPolicy(new TerminatorLayoutEditPolicy());
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/widgets/ViewFormEditPart.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/widgets/ViewFormEditPart.java
index a04b574f1..6b8ce5b1b 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/widgets/ViewFormEditPart.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/part/widgets/ViewFormEditPart.java
@@ -23,27 +23,27 @@
  * @coverage rcp.gef.part
  */
 public final class ViewFormEditPart extends CompositeEditPart {
-  private final ViewFormInfo m_composite;
+	private final ViewFormInfo m_composite;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ViewFormEditPart(ViewFormInfo composite) {
-    super(composite);
-    m_composite = composite;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ViewFormEditPart(ViewFormInfo composite) {
+		super(composite);
+		m_composite = composite;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Policy
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void refreshEditPolicies() {
-    super.refreshEditPolicies();
-    installEditPolicy(new ViewFormLayoutEditPolicy(m_composite));
-    installEditPolicy(new TerminatorLayoutEditPolicy());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Policy
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void refreshEditPolicies() {
+		super.refreshEditPolicies();
+		installEditPolicy(new ViewFormLayoutEditPolicy(m_composite));
+		installEditPolicy(new TerminatorLayoutEditPolicy());
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/AbstractPositionCompositeLayoutEditPolicy.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/AbstractPositionCompositeLayoutEditPolicy.java
index 7586a8ab2..8d80e359b 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/AbstractPositionCompositeLayoutEditPolicy.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/AbstractPositionCompositeLayoutEditPolicy.java
@@ -23,52 +23,52 @@
  * @coverage rcp.gef.policy
  */
 public abstract class AbstractPositionCompositeLayoutEditPolicy
-    extends
-      ControlPositionLayoutEditPolicy<String> {
-  private final AbstractPositionCompositeInfo m_composite;
+extends
+ControlPositionLayoutEditPolicy<String> {
+	private final AbstractPositionCompositeInfo m_composite;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Composite
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractPositionCompositeLayoutEditPolicy(AbstractPositionCompositeInfo composite) {
-    super(composite);
-    m_composite = composite;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Composite
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractPositionCompositeLayoutEditPolicy(AbstractPositionCompositeInfo composite) {
+		super(composite);
+		m_composite = composite;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Positions
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds feedback position.
-   */
-  protected final void addFeedback2(double px1,
-      double py1,
-      double px2,
-      double py2,
-      Insets insets,
-      String hint,
-      String methodName) {
-    if (m_composite.getControl(methodName) == null) {
-      addFeedback(px1, py1, px2, py2, insets, hint, methodName);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Positions
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds feedback position.
+	 */
+	protected final void addFeedback2(double px1,
+			double py1,
+			double px2,
+			double py2,
+			Insets insets,
+			String hint,
+			String methodName) {
+		if (m_composite.getControl(methodName) == null) {
+			addFeedback(px1, py1, px2, py2, insets, hint, methodName);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Implementation of commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void command_CREATE(ControlInfo component, String data) throws Exception {
-    m_composite.command_CREATE(component, data);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Implementation of commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void command_CREATE(ControlInfo component, String data) throws Exception {
+		m_composite.command_CREATE(component, data);
+	}
 
-  @Override
-  protected void command_MOVE(ControlInfo component, String data) throws Exception {
-    m_composite.command_MOVE(component, data);
-  }
+	@Override
+	protected void command_MOVE(ControlInfo component, String data) throws Exception {
+		m_composite.command_MOVE(component, data);
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/ControlPositionLayoutEditPolicy.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/ControlPositionLayoutEditPolicy.java
index 45a78049f..cc0e62494 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/ControlPositionLayoutEditPolicy.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/ControlPositionLayoutEditPolicy.java
@@ -23,24 +23,24 @@
  * @coverage rcp.gef.policy
  */
 public abstract class ControlPositionLayoutEditPolicy<D>
-    extends
-      ObjectPositionLayoutEditPolicy<ControlInfo, D> {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ControlPositionLayoutEditPolicy(ObjectInfo host) {
-    super(host);
-  }
+extends
+ObjectPositionLayoutEditPolicy<ControlInfo, D> {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ControlPositionLayoutEditPolicy(ObjectInfo host) {
+		super(host);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Requests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected ILayoutRequestValidator getRequestValidator() {
-    return ControlsLayoutRequestValidator.INSTANCE;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Requests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected ILayoutRequestValidator getRequestValidator() {
+		return ControlsLayoutRequestValidator.INSTANCE;
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/RcpPolicyConfigurator.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/RcpPolicyConfigurator.java
index 6bb3fe2d3..1f9fbda2a 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/RcpPolicyConfigurator.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/RcpPolicyConfigurator.java
@@ -26,20 +26,20 @@
  * @coverage rcp.gef.policy
  */
 public final class RcpPolicyConfigurator implements IEditPartConfigurator {
-  @Override
-  public void configure(EditPart context, EditPart editPart) {
-    editPart.addRequestProcessor(FieldEditorDropRequestProcessor.INSTANCE);
-    // allow drop Action on MenuManager
-    if (editPart instanceof IMenuObjectEditPart) {
-      IMenuObjectEditPart menuEditPart = (IMenuObjectEditPart) editPart;
-      if (menuEditPart.getMenuModel().getToolkitModel() instanceof MenuManagerInfo) {
-        editPart.addRequestProcessor(ActionDropRequestProcessor.INSTANCE);
-      }
-    }
-    // allow drop ControlDecoration on ControlInfo
-    if (editPart.getModel() instanceof ControlInfo) {
-      ControlInfo control = (ControlInfo) editPart.getModel();
-      editPart.installEditPolicy(new ControlDecorationDropLayoutEditPolicy(control));
-    }
-  }
+	@Override
+	public void configure(EditPart context, EditPart editPart) {
+		editPart.addRequestProcessor(FieldEditorDropRequestProcessor.INSTANCE);
+		// allow drop Action on MenuManager
+		if (editPart instanceof IMenuObjectEditPart) {
+			IMenuObjectEditPart menuEditPart = (IMenuObjectEditPart) editPart;
+			if (menuEditPart.getMenuModel().getToolkitModel() instanceof MenuManagerInfo) {
+				editPart.addRequestProcessor(ActionDropRequestProcessor.INSTANCE);
+			}
+		}
+		// allow drop ControlDecoration on ControlInfo
+		if (editPart.getModel() instanceof ControlInfo) {
+			ControlInfo control = (ControlInfo) editPart.getModel();
+			editPart.installEditPolicy(new ControlDecorationDropLayoutEditPolicy(control));
+		}
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/forms/ExpandableCompositeLayoutEditPolicy.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/forms/ExpandableCompositeLayoutEditPolicy.java
index a047f8cba..cf935f909 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/forms/ExpandableCompositeLayoutEditPolicy.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/forms/ExpandableCompositeLayoutEditPolicy.java
@@ -24,39 +24,39 @@
  * @coverage rcp.gef.policy
  */
 public final class ExpandableCompositeLayoutEditPolicy
-    extends
-      AbstractPositionCompositeLayoutEditPolicy {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Composite
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ExpandableCompositeLayoutEditPolicy(ExpandableCompositeInfo composite) {
-    super(composite);
-  }
+extends
+AbstractPositionCompositeLayoutEditPolicy {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Composite
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ExpandableCompositeLayoutEditPolicy(ExpandableCompositeInfo composite) {
+		super(composite);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Positions
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void addFeedbacks() throws Exception {
-    addFeedback2(
-        0.8,
-        0.0,
-        1.0,
-        0.2,
-        new Insets(0, 0, 1, 0),
-        GefMessages.ExpandableCompositeLayoutEditPolicy_textClientHint,
-        "setTextClient");
-    addFeedback2(
-        0.0,
-        0.2,
-        1.0,
-        1.0,
-        new Insets(0, 0, 0, 0),
-        GefMessages.ExpandableCompositeLayoutEditPolicy_clientHint,
-        "setClient");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Positions
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void addFeedbacks() throws Exception {
+		addFeedback2(
+				0.8,
+				0.0,
+				1.0,
+				0.2,
+				new Insets(0, 0, 1, 0),
+				GefMessages.ExpandableCompositeLayoutEditPolicy_textClientHint,
+				"setTextClient");
+		addFeedback2(
+				0.0,
+				0.2,
+				1.0,
+				1.0,
+				new Insets(0, 0, 0, 0),
+				GefMessages.ExpandableCompositeLayoutEditPolicy_clientHint,
+				"setClient");
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/forms/FormHeadLayoutEditPolicy.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/forms/FormHeadLayoutEditPolicy.java
index 8ca21eb4b..2f281612d 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/forms/FormHeadLayoutEditPolicy.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/forms/FormHeadLayoutEditPolicy.java
@@ -35,89 +35,89 @@
  * @coverage rcp.gef.policy
  */
 public final class FormHeadLayoutEditPolicy extends LayoutEditPolicy {
-  private final FormInfo m_form;
+	private final FormInfo m_form;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FormHeadLayoutEditPolicy(FormInfo form) {
-    m_form = form;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FormHeadLayoutEditPolicy(FormInfo form) {
+		m_form = form;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Requests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected ILayoutRequestValidator getRequestValidator() {
-    return ControlsLayoutRequestValidator.INSTANCE;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Requests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected ILayoutRequestValidator getRequestValidator() {
+		return ControlsLayoutRequestValidator.INSTANCE;
+	}
 
-  @Override
-  protected void showLayoutTargetFeedback(Request request) {
-    super.showLayoutTargetFeedback(request);
-    PolicyUtils.showBorderTargetFeedback(this);
-  }
+	@Override
+	protected void showLayoutTargetFeedback(Request request) {
+		super.showLayoutTargetFeedback(request);
+		PolicyUtils.showBorderTargetFeedback(this);
+	}
 
-  @Override
-  protected void eraseLayoutTargetFeedback(Request request) {
-    super.eraseLayoutTargetFeedback(request);
-    PolicyUtils.eraseBorderTargetFeedback(this);
-  }
+	@Override
+	protected void eraseLayoutTargetFeedback(Request request) {
+		super.eraseLayoutTargetFeedback(request);
+		PolicyUtils.eraseBorderTargetFeedback(this);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Command getCommand(Request request) {
-    if (m_form.getHeadClient() != null) {
-      return null;
-    }
-    return super.getCommand(request);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Command getCommand(Request request) {
+		if (m_form.getHeadClient() != null) {
+			return null;
+		}
+		return super.getCommand(request);
+	}
 
-  @Override
-  protected Command getCreateCommand(CreateRequest request) {
-    final ControlInfo newControl = (ControlInfo) request.getNewObject();
-    return new EditCommand(m_form) {
-      @Override
-      protected void executeEdit() throws Exception {
-        m_form.setHeadClient(newControl);
-      }
-    };
-  }
+	@Override
+	protected Command getCreateCommand(CreateRequest request) {
+		final ControlInfo newControl = (ControlInfo) request.getNewObject();
+		return new EditCommand(m_form) {
+			@Override
+			protected void executeEdit() throws Exception {
+				m_form.setHeadClient(newControl);
+			}
+		};
+	}
 
-  @Override
-  protected Command getPasteCommand(PasteRequest request) {
-    return LayoutPolicyUtils2.getPasteCommand(
-        m_form,
-        request,
-        ControlInfo.class,
-        new IPasteProcessor<ControlInfo>() {
-          @Override
-          public void process(ControlInfo control) throws Exception {
-            m_form.setHeadClient(control);
-          }
-        });
-  }
+	@Override
+	protected Command getPasteCommand(PasteRequest request) {
+		return LayoutPolicyUtils2.getPasteCommand(
+				m_form,
+				request,
+				ControlInfo.class,
+				new IPasteProcessor<ControlInfo>() {
+					@Override
+					public void process(ControlInfo control) throws Exception {
+						m_form.setHeadClient(control);
+					}
+				});
+	}
 
-  @Override
-  protected Command getAddCommand(ChangeBoundsRequest request) {
-    List<EditPart> addParts = request.getEditParts();
-    if (addParts.size() == 1) {
-      final ControlInfo control = (ControlInfo) addParts.get(0).getModel();
-      return new EditCommand(m_form) {
-        @Override
-        protected void executeEdit() throws Exception {
-          m_form.setHeadClient(control);
-        }
-      };
-    }
-    return null;
-  }
+	@Override
+	protected Command getAddCommand(ChangeBoundsRequest request) {
+		List<EditPart> addParts = request.getEditParts();
+		if (addParts.size() == 1) {
+			final ControlInfo control = (ControlInfo) addParts.get(0).getModel();
+			return new EditCommand(m_form) {
+				@Override
+				protected void executeEdit() throws Exception {
+					m_form.setHeadClient(control);
+				}
+			};
+		}
+		return null;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/forms/layout/ColumnLayoutSelectionEditPolicy.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/forms/layout/ColumnLayoutSelectionEditPolicy.java
index f69203da1..97cf5343b 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/forms/layout/ColumnLayoutSelectionEditPolicy.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/forms/layout/ColumnLayoutSelectionEditPolicy.java
@@ -43,131 +43,131 @@
  * @coverage rcp.gef.policy
  */
 public final class ColumnLayoutSelectionEditPolicy<C extends IControlInfo>
-    extends
-      SelectionEditPolicy {
-  private static final String REQ_RESIZE = "resize";
-  private final IColumnLayoutInfo<C> m_layout;
-  private final C m_control;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ColumnLayoutSelectionEditPolicy(IColumnLayoutInfo<C> layout, C control) {
-    m_layout = layout;
-    m_control = control;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Handles
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected List<Handle> createSelectionHandles() {
-    List<Handle> handles = Lists.newArrayList();
-    handles.add(new MoveHandle(getHost()));
-    handles.add(createHandle(IPositionConstants.EAST));
-    handles.add(createHandle(IPositionConstants.SOUTH));
-    handles.add(createHandle(IPositionConstants.SOUTH_EAST));
-    return handles;
-  }
-
-  /**
-   * @return the {@link ResizeHandle} for given direction.
-   */
-  private Handle createHandle(int direction) {
-    ResizeHandle handle = new ResizeHandle(getHost(), direction);
-    handle.setDragTrackerTool(new ResizeTracker(direction, REQ_RESIZE));
-    return handle;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Routing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean understandsRequest(Request request) {
-    return super.understandsRequest(request) || request.getType() == REQ_RESIZE;
-  }
-
-  @Override
-  public Command getCommand(final Request request) {
-    return getResizeCommand((ChangeBoundsRequest) request);
-  }
-
-  @Override
-  public void showSourceFeedback(Request request) {
-    showResizeFeedback((ChangeBoundsRequest) request);
-  }
-
-  @Override
-  public void eraseSourceFeedback(Request request) {
-    eraseResizeFeedback((ChangeBoundsRequest) request);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Resize
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Figure m_resizeFeedback;
-  private TextFeedback m_textFeedback;
-
-  //
-  private Command getResizeCommand(ChangeBoundsRequest request) {
-    final int resizeDirection = request.getResizeDirection();
-    final Rectangle newBounds = request.getTransformedRectangle(getHost().getFigure().getBounds());
-    return new EditCommand(m_control) {
-      @Override
-      protected void executeEdit() throws Exception {
-        IColumnLayoutDataInfo columnData = m_layout.getColumnData2(m_control);
-        if (PolicyUtils.hasDirection(resizeDirection, IPositionConstants.EAST)) {
-          columnData.setWidthHint(newBounds.width);
-        }
-        if (PolicyUtils.hasDirection(resizeDirection, IPositionConstants.SOUTH)) {
-          columnData.setHeightHint(newBounds.height);
-        }
-      }
-    };
-  }
-
-  private void showResizeFeedback(ChangeBoundsRequest request) {
-    if (m_resizeFeedback == null) {
-      // create selection feedback
-      {
-        m_resizeFeedback = new RectangleFigure();
-        m_resizeFeedback.setForeground(IColorConstants.red);
-        addFeedback(m_resizeFeedback);
-      }
-      // create text feedback
-      {
-        m_textFeedback = new TextFeedback(getFeedbackLayer());
-        m_textFeedback.add();
-      }
-    }
-    // prepare bounds
-    Rectangle bounds;
-    {
-      Figure hostFigure = getHostFigure();
-      bounds = request.getTransformedRectangle(hostFigure.getBounds());
-      FigureUtils.translateFigureToAbsolute(hostFigure, bounds);
-    }
-    // update selection feedback
-    m_resizeFeedback.setBounds(bounds);
-    // update text feedback
-    m_textFeedback.setText(Integer.toString(bounds.width) + " x " + Integer.toString(bounds.height));
-    m_textFeedback.setLocation(request.getLocation().getTranslated(10, 10));
-  }
-
-  private void eraseResizeFeedback(ChangeBoundsRequest request) {
-    // erase selection feedback
-    removeFeedback(m_resizeFeedback);
-    m_resizeFeedback = null;
-    // erase text feedback
-    m_textFeedback.remove();
-    m_textFeedback = null;
-  }
+extends
+SelectionEditPolicy {
+	private static final String REQ_RESIZE = "resize";
+	private final IColumnLayoutInfo<C> m_layout;
+	private final C m_control;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ColumnLayoutSelectionEditPolicy(IColumnLayoutInfo<C> layout, C control) {
+		m_layout = layout;
+		m_control = control;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Handles
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected List<Handle> createSelectionHandles() {
+		List<Handle> handles = Lists.newArrayList();
+		handles.add(new MoveHandle(getHost()));
+		handles.add(createHandle(IPositionConstants.EAST));
+		handles.add(createHandle(IPositionConstants.SOUTH));
+		handles.add(createHandle(IPositionConstants.SOUTH_EAST));
+		return handles;
+	}
+
+	/**
+	 * @return the {@link ResizeHandle} for given direction.
+	 */
+	private Handle createHandle(int direction) {
+		ResizeHandle handle = new ResizeHandle(getHost(), direction);
+		handle.setDragTrackerTool(new ResizeTracker(direction, REQ_RESIZE));
+		return handle;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Routing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean understandsRequest(Request request) {
+		return super.understandsRequest(request) || request.getType() == REQ_RESIZE;
+	}
+
+	@Override
+	public Command getCommand(final Request request) {
+		return getResizeCommand((ChangeBoundsRequest) request);
+	}
+
+	@Override
+	public void showSourceFeedback(Request request) {
+		showResizeFeedback((ChangeBoundsRequest) request);
+	}
+
+	@Override
+	public void eraseSourceFeedback(Request request) {
+		eraseResizeFeedback((ChangeBoundsRequest) request);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Resize
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Figure m_resizeFeedback;
+	private TextFeedback m_textFeedback;
+
+	//
+	private Command getResizeCommand(ChangeBoundsRequest request) {
+		final int resizeDirection = request.getResizeDirection();
+		final Rectangle newBounds = request.getTransformedRectangle(getHost().getFigure().getBounds());
+		return new EditCommand(m_control) {
+			@Override
+			protected void executeEdit() throws Exception {
+				IColumnLayoutDataInfo columnData = m_layout.getColumnData2(m_control);
+				if (PolicyUtils.hasDirection(resizeDirection, IPositionConstants.EAST)) {
+					columnData.setWidthHint(newBounds.width);
+				}
+				if (PolicyUtils.hasDirection(resizeDirection, IPositionConstants.SOUTH)) {
+					columnData.setHeightHint(newBounds.height);
+				}
+			}
+		};
+	}
+
+	private void showResizeFeedback(ChangeBoundsRequest request) {
+		if (m_resizeFeedback == null) {
+			// create selection feedback
+			{
+				m_resizeFeedback = new RectangleFigure();
+				m_resizeFeedback.setForeground(IColorConstants.red);
+				addFeedback(m_resizeFeedback);
+			}
+			// create text feedback
+			{
+				m_textFeedback = new TextFeedback(getFeedbackLayer());
+				m_textFeedback.add();
+			}
+		}
+		// prepare bounds
+		Rectangle bounds;
+		{
+			Figure hostFigure = getHostFigure();
+			bounds = request.getTransformedRectangle(hostFigure.getBounds());
+			FigureUtils.translateFigureToAbsolute(hostFigure, bounds);
+		}
+		// update selection feedback
+		m_resizeFeedback.setBounds(bounds);
+		// update text feedback
+		m_textFeedback.setText(Integer.toString(bounds.width) + " x " + Integer.toString(bounds.height));
+		m_textFeedback.setLocation(request.getLocation().getTranslated(10, 10));
+	}
+
+	private void eraseResizeFeedback(ChangeBoundsRequest request) {
+		// erase selection feedback
+		removeFeedback(m_resizeFeedback);
+		m_resizeFeedback = null;
+		// erase text feedback
+		m_textFeedback.remove();
+		m_textFeedback = null;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/forms/layout/grid/GridHelper.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/forms/layout/grid/GridHelper.java
index 1e06ed44b..c5a80b972 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/forms/layout/grid/GridHelper.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/forms/layout/grid/GridHelper.java
@@ -23,23 +23,23 @@
  * @coverage rcp.gef.policy
  */
 public final class GridHelper<C extends IControlInfo> extends AbstractGridHelper {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public GridHelper(GraphicalEditPolicy editPolicy, boolean forTarget) {
-    super(editPolicy, forTarget);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public GridHelper(GraphicalEditPolicy editPolicy, boolean forTarget) {
+		super(editPolicy, forTarget);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Feedback
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  @SuppressWarnings("unchecked")
-  protected IGridInfo getGridInfo() {
-    return ((ITableWrapLayoutInfo<C>) getAbstractLayout()).getGridInfo();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Feedback
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	@SuppressWarnings("unchecked")
+	protected IGridInfo getGridInfo() {
+		return ((ITableWrapLayoutInfo<C>) getAbstractLayout()).getGridInfo();
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/forms/layout/grid/TableWrapLayoutEditPolicy.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/forms/layout/grid/TableWrapLayoutEditPolicy.java
index 9e8ba38a9..aa9897efb 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/forms/layout/grid/TableWrapLayoutEditPolicy.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/forms/layout/grid/TableWrapLayoutEditPolicy.java
@@ -47,396 +47,396 @@
  * @coverage rcp.gef.policy
  */
 public final class TableWrapLayoutEditPolicy<C extends IControlInfo>
-    extends
-      AbstractGridLayoutEditPolicy {
-  private final ITableWrapLayoutInfo<C> m_layout;
+extends
+AbstractGridLayoutEditPolicy {
+	private final ITableWrapLayoutInfo<C> m_layout;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public TableWrapLayoutEditPolicy(ITableWrapLayoutInfo<C> layout) {
-    super(layout.getUnderlyingModel());
-    m_layout = layout;
-    m_gridTargetHelper = new GridHelper<C>(this, true);
-    m_gridSelectionHelper = new GridHelper<C>(this, false);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public TableWrapLayoutEditPolicy(ITableWrapLayoutInfo<C> layout) {
+		super(layout.getUnderlyingModel());
+		m_layout = layout;
+		m_gridTargetHelper = new GridHelper<C>(this, true);
+		m_gridSelectionHelper = new GridHelper<C>(this, false);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Requests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected ILayoutRequestValidator getRequestValidator() {
-    return ControlsLayoutRequestValidator.INSTANCE;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Requests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected ILayoutRequestValidator getRequestValidator() {
+		return ControlsLayoutRequestValidator.INSTANCE;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected IGridInfo getGridInfo() {
-    return m_layout.getGridInfo();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected IGridInfo getGridInfo() {
+		return m_layout.getGridInfo();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if given object is {@link IControlInfo}.
-   */
-  private boolean isControl(Object model) {
-    return model instanceof IControlInfo;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if given object is {@link IControlInfo}.
+	 */
+	private boolean isControl(Object model) {
+		return model instanceof IControlInfo;
+	}
 
-  /**
-   * @return the casted model.
-   */
-  @SuppressWarnings("unchecked")
-  private C toControl(Object model) {
-    return (C) model;
-  }
+	/**
+	 * @return the casted model.
+	 */
+	@SuppressWarnings("unchecked")
+	private C toControl(Object model) {
+		return (C) model;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Selection
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void decorateChild(EditPart child) {
-    Object model = child.getModel();
-    if (isControl(model)) {
-      C control = toControl(model);
-      EditPolicy selectionPolicy = new TableWrapSelectionEditPolicy<C>(m_layout, control);
-      child.installEditPolicy(EditPolicy.SELECTION_ROLE, selectionPolicy);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Selection
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void decorateChild(EditPart child) {
+		Object model = child.getModel();
+		if (isControl(model)) {
+			C control = toControl(model);
+			EditPolicy selectionPolicy = new TableWrapSelectionEditPolicy<C>(m_layout, control);
+			child.installEditPolicy(EditPolicy.SELECTION_ROLE, selectionPolicy);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Command getCreateCommand(CreateRequest request) {
-    if (m_target.m_valid) {
-      Object newObject = request.getNewObject();
-      if (isControl(newObject)) {
-        final C control = toControl(newObject);
-        return new EditCommand(m_layout) {
-          @Override
-          protected void executeEdit() throws Exception {
-            m_layout.command_CREATE(
-                control,
-                m_target.m_column,
-                m_target.m_columnInsert,
-                m_target.m_row,
-                m_target.m_rowInsert);
-          }
-        };
-      }
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Command getCreateCommand(CreateRequest request) {
+		if (m_target.m_valid) {
+			Object newObject = request.getNewObject();
+			if (isControl(newObject)) {
+				final C control = toControl(newObject);
+				return new EditCommand(m_layout) {
+					@Override
+					protected void executeEdit() throws Exception {
+						m_layout.command_CREATE(
+								control,
+								m_target.m_column,
+								m_target.m_columnInsert,
+								m_target.m_row,
+								m_target.m_rowInsert);
+					}
+				};
+			}
+		}
+		return null;
+	}
 
-  @Override
-  protected Command getPasteCommand(PasteRequest request) {
-    return GlobalState.getPasteRequestProcessor().getPasteCommand(
-        request,
-        new IPasteComponentProcessor() {
-          @Override
-          public void process(Object component) throws Exception {
-            m_layout.command_CREATE(
-                toControl(component),
-                m_target.m_column,
-                m_target.m_columnInsert,
-                m_target.m_row,
-                m_target.m_rowInsert);
-          }
-        });
-  }
+	@Override
+	protected Command getPasteCommand(PasteRequest request) {
+		return GlobalState.getPasteRequestProcessor().getPasteCommand(
+				request,
+				new IPasteComponentProcessor() {
+					@Override
+					public void process(Object component) throws Exception {
+						m_layout.command_CREATE(
+								toControl(component),
+								m_target.m_column,
+								m_target.m_columnInsert,
+								m_target.m_row,
+								m_target.m_rowInsert);
+					}
+				});
+	}
 
-  @Override
-  protected Command getMoveCommand(ChangeBoundsRequest request) {
-    if (m_target.m_valid && request.getEditParts().size() == 1) {
-      EditPart moveEditPart = request.getEditParts().get(0);
-      Object model = moveEditPart.getModel();
-      if (isControl(model)) {
-        final C control = toControl(model);
-        return new EditCommand(m_layout) {
-          @Override
-          protected void executeEdit() throws Exception {
-            m_layout.command_MOVE(
-                control,
-                m_target.m_column,
-                m_target.m_columnInsert,
-                m_target.m_row,
-                m_target.m_rowInsert);
-          }
-        };
-      }
-    }
-    return null;
-  }
+	@Override
+	protected Command getMoveCommand(ChangeBoundsRequest request) {
+		if (m_target.m_valid && request.getEditParts().size() == 1) {
+			EditPart moveEditPart = request.getEditParts().get(0);
+			Object model = moveEditPart.getModel();
+			if (isControl(model)) {
+				final C control = toControl(model);
+				return new EditCommand(m_layout) {
+					@Override
+					protected void executeEdit() throws Exception {
+						m_layout.command_MOVE(
+								control,
+								m_target.m_column,
+								m_target.m_columnInsert,
+								m_target.m_row,
+								m_target.m_rowInsert);
+					}
+				};
+			}
+		}
+		return null;
+	}
 
-  @Override
-  protected Command getAddCommand(ChangeBoundsRequest request) {
-    if (m_target.m_valid && request.getEditParts().size() == 1) {
-      EditPart moveEditPart = request.getEditParts().get(0);
-      Object model = moveEditPart.getModel();
-      if (isControl(model)) {
-        final C control = toControl(model);
-        return new EditCommand(m_layout) {
-          @Override
-          protected void executeEdit() throws Exception {
-            m_layout.command_ADD(
-                control,
-                m_target.m_column,
-                m_target.m_columnInsert,
-                m_target.m_row,
-                m_target.m_rowInsert);
-          }
-        };
-      }
-    }
-    return null;
-  }
+	@Override
+	protected Command getAddCommand(ChangeBoundsRequest request) {
+		if (m_target.m_valid && request.getEditParts().size() == 1) {
+			EditPart moveEditPart = request.getEditParts().get(0);
+			Object model = moveEditPart.getModel();
+			if (isControl(model)) {
+				final C control = toControl(model);
+				return new EditCommand(m_layout) {
+					@Override
+					protected void executeEdit() throws Exception {
+						m_layout.command_ADD(
+								control,
+								m_target.m_column,
+								m_target.m_columnInsert,
+								m_target.m_row,
+								m_target.m_rowInsert);
+					}
+				};
+			}
+		}
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Grid target
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Determines parameters of insert feedback.
-   *
-   * @return the array of: visual gap, begin/end of insert feedback, begin/end of target feedback.
-   */
-  public static int[] getInsertFeedbackParameters(Interval interval,
-      Interval nextInterval,
-      int minGap) {
-    int gap = nextInterval.begin() - interval.end();
-    int visualGap = Math.max(gap, minGap);
-    // determine x1/x2
-    int x1, x2;
-    {
-      int a = interval.end();
-      int b = nextInterval.begin();
-      int x1_2 = a + b - visualGap;
-      x1 = x1_2 % 2 == 0 ? x1_2 / 2 : x1_2 / 2 - 1;
-      x2 = a + b - x1;
-      // we don't want to have insert feedback be same as intervals
-      if (x1 == a - 1) {
-        x1--;
-        x2++;
-      }
-    }
-    //
-    return new int[]{visualGap, x1, x2, x1 - minGap, x2 + minGap};
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Grid target
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Determines parameters of insert feedback.
+	 *
+	 * @return the array of: visual gap, begin/end of insert feedback, begin/end of target feedback.
+	 */
+	public static int[] getInsertFeedbackParameters(Interval interval,
+			Interval nextInterval,
+			int minGap) {
+		int gap = nextInterval.begin() - interval.end();
+		int visualGap = Math.max(gap, minGap);
+		// determine x1/x2
+		int x1, x2;
+		{
+			int a = interval.end();
+			int b = nextInterval.begin();
+			int x1_2 = a + b - visualGap;
+			x1 = x1_2 % 2 == 0 ? x1_2 / 2 : x1_2 / 2 - 1;
+			x2 = a + b - x1;
+			// we don't want to have insert feedback be same as intervals
+			if (x1 == a - 1) {
+				x1--;
+				x2++;
+			}
+		}
+		//
+		return new int[]{visualGap, x1, x2, x1 - minGap, x2 + minGap};
+	}
 
-  @Override
-  protected void updateGridTarget(Point mouseLocation) throws Exception {
-    m_target = new GridTarget();
-    // prepare location in model
-    Point location = mouseLocation.getCopy();
-    PolicyUtils.translateAbsoluteToModel(this, location);
-    // prepare grid information
-    IGridInfo gridInfo = m_layout.getGridInfo();
-    Interval[] columnIntervals = gridInfo.getColumnIntervals();
-    Interval[] rowIntervals = gridInfo.getRowIntervals();
-    int lastX = columnIntervals.length != 0 ? columnIntervals[columnIntervals.length - 1].end() : 0;
-    int lastY = rowIntervals.length != 0 ? rowIntervals[rowIntervals.length - 1].end() : 0;
-    // prepare insert bounds
-    {
-      if (columnIntervals.length != 0) {
-        m_target.m_rowInsertBounds.x = columnIntervals[0].begin() - INSERT_MARGINS;
-        m_target.m_rowInsertBounds.setRight(lastX + INSERT_MARGINS);
-      } else {
-        m_target.m_rowInsertBounds.x = 0;
-        m_target.m_rowInsertBounds.setRight(getHostFigure().getSize().width);
-      }
-      if (rowIntervals.length != 0) {
-        m_target.m_columnInsertBounds.y = rowIntervals[0].begin() - INSERT_MARGINS;
-        m_target.m_columnInsertBounds.setBottom(lastY + INSERT_MARGINS);
-      } else {
-        m_target.m_columnInsertBounds.y = 0;
-        m_target.m_columnInsertBounds.setBottom(getHostFigure().getSize().height);
-      }
-    }
-    // find existing column
-    for (int columnIndex = 0; columnIndex < columnIntervals.length; columnIndex++) {
-      boolean isLast = columnIndex == columnIntervals.length - 1;
-      Interval interval = columnIntervals[columnIndex];
-      Interval nextInterval = !isLast ? columnIntervals[columnIndex + 1] : null;
-      // before first
-      if (location.x < columnIntervals[0].begin()) {
-        m_target.m_column = 0;
-        m_target.m_columnInsert = true;
-        // prepare parameters
-        int[] parameters =
-            getInsertFeedbackParameters(new Interval(0, 0), interval, INSERT_COLUMN_SIZE);
-        // feedback
-        m_target.m_feedbackBounds.x = parameters[3];
-        m_target.m_feedbackBounds.width = parameters[4] - parameters[3];
-        // insert
-        m_target.m_columnInsertBounds.x = parameters[1];
-        m_target.m_columnInsertBounds.width = parameters[2] - parameters[1];
-        // stop
-        break;
-      }
-      // gap or near to end of interval
-      if (!isLast) {
-        int gap = nextInterval.begin() - interval.end();
-        boolean directGap = interval.end() <= location.x && location.x < nextInterval.begin();
-        boolean narrowGap = gap < 2 * INSERT_COLUMN_SIZE;
-        boolean nearEnd = Math.abs(location.x - interval.end()) < INSERT_COLUMN_SIZE;
-        boolean nearBegin = Math.abs(location.x - nextInterval.begin()) < INSERT_COLUMN_SIZE;
-        if (directGap || narrowGap && (nearEnd || nearBegin)) {
-          m_target.m_column = columnIndex + 1;
-          m_target.m_columnInsert = true;
-          // prepare parameters
-          int[] parameters =
-              getInsertFeedbackParameters(interval, nextInterval, INSERT_COLUMN_SIZE);
-          // feedback
-          m_target.m_feedbackBounds.x = parameters[3];
-          m_target.m_feedbackBounds.width = parameters[4] - parameters[3];
-          // insert
-          m_target.m_columnInsertBounds.x = parameters[1];
-          m_target.m_columnInsertBounds.width = parameters[2] - parameters[1];
-          // stop
-          break;
-        }
-      }
-      // column
-      if (interval.contains(location.x)) {
-        m_target.m_column = columnIndex;
-        // feedback
-        m_target.m_feedbackBounds.x = interval.begin();
-        m_target.m_feedbackBounds.width = interval.length()+ 1;
-        // stop
-        break;
-      }
-    }
-    // find virtual column
-    if (m_target.m_column == -1) {
-      int columnGap = gridInfo.getVirtualColumnGap();
-      int columnSize = gridInfo.getVirtualColumnSize();
-      //
-      int newWidth = columnSize + columnGap;
-      int newDelta = (location.x - lastX - columnGap / 2) / newWidth;
-      //
-      m_target.m_column = columnIntervals.length + newDelta;
-      m_target.m_feedbackBounds.x = lastX + columnGap + newWidth * newDelta;
-      m_target.m_feedbackBounds.width = columnSize + 1;
-    }
-    // find existing row
-    for (int rowIndex = 0; rowIndex < rowIntervals.length; rowIndex++) {
-      boolean isLast = rowIndex == rowIntervals.length - 1;
-      Interval interval = rowIntervals[rowIndex];
-      Interval nextInterval = !isLast ? rowIntervals[rowIndex + 1] : null;
-      // before first
-      if (location.y < rowIntervals[0].begin()) {
-        m_target.m_row = 0;
-        m_target.m_rowInsert = true;
-        // prepare parameters
-        int[] parameters =
-            getInsertFeedbackParameters(new Interval(0, 0), interval, INSERT_ROW_SIZE);
-        // feedback
-        m_target.m_feedbackBounds.y = parameters[3];
-        m_target.m_feedbackBounds.height = parameters[4] - parameters[3];
-        // insert
-        m_target.m_rowInsertBounds.y = parameters[1];
-        m_target.m_rowInsertBounds.height = parameters[2] - parameters[1];
-        // stop
-        break;
-      }
-      // gap or near to end of interval
-      if (!isLast) {
-        int gap = nextInterval.begin() - interval.end();
-        boolean directGap = interval.end() <= location.y && location.y < nextInterval.begin();
-        boolean narrowGap = gap < 2 * INSERT_ROW_SIZE;
-        boolean nearEnd = Math.abs(location.y - interval.end()) < INSERT_ROW_SIZE;
-        boolean nearBegin = Math.abs(location.y - nextInterval.begin()) < INSERT_ROW_SIZE;
-        if (directGap || narrowGap && (nearEnd || nearBegin)) {
-          m_target.m_row = rowIndex + 1;
-          m_target.m_rowInsert = true;
-          // prepare parameters
-          int[] parameters = getInsertFeedbackParameters(interval, nextInterval, INSERT_ROW_SIZE);
-          // feedback
-          m_target.m_feedbackBounds.y = parameters[3];
-          m_target.m_feedbackBounds.height = parameters[4] - parameters[3];
-          // insert
-          m_target.m_rowInsertBounds.y = parameters[1];
-          m_target.m_rowInsertBounds.height = parameters[2] - parameters[1];
-          // stop
-          break;
-        }
-      }
-      // row
-      if (interval.contains(location.y)) {
-        m_target.m_row = rowIndex;
-        // feedback
-        m_target.m_feedbackBounds.y = interval.begin();
-        m_target.m_feedbackBounds.height = interval.length()+ 1;
-        // stop
-        break;
-      }
-    }
-    // find virtual row
-    if (m_target.m_row == -1) {
-      int rowGap = gridInfo.getVirtualRowGap();
-      int rowSize = gridInfo.getVirtualRowSize();
-      //
-      int newHeight = rowSize + rowGap;
-      int newDelta = (location.y - lastY - rowGap / 2) / newHeight;
-      //
-      m_target.m_row = rowIntervals.length + newDelta;
-      m_target.m_feedbackBounds.y = lastY + rowGap + newHeight * newDelta;
-      m_target.m_feedbackBounds.height = rowSize + 1;
-    }
-  }
+	@Override
+	protected void updateGridTarget(Point mouseLocation) throws Exception {
+		m_target = new GridTarget();
+		// prepare location in model
+		Point location = mouseLocation.getCopy();
+		PolicyUtils.translateAbsoluteToModel(this, location);
+		// prepare grid information
+		IGridInfo gridInfo = m_layout.getGridInfo();
+		Interval[] columnIntervals = gridInfo.getColumnIntervals();
+		Interval[] rowIntervals = gridInfo.getRowIntervals();
+		int lastX = columnIntervals.length != 0 ? columnIntervals[columnIntervals.length - 1].end() : 0;
+		int lastY = rowIntervals.length != 0 ? rowIntervals[rowIntervals.length - 1].end() : 0;
+		// prepare insert bounds
+		{
+			if (columnIntervals.length != 0) {
+				m_target.m_rowInsertBounds.x = columnIntervals[0].begin() - INSERT_MARGINS;
+				m_target.m_rowInsertBounds.setRight(lastX + INSERT_MARGINS);
+			} else {
+				m_target.m_rowInsertBounds.x = 0;
+				m_target.m_rowInsertBounds.setRight(getHostFigure().getSize().width);
+			}
+			if (rowIntervals.length != 0) {
+				m_target.m_columnInsertBounds.y = rowIntervals[0].begin() - INSERT_MARGINS;
+				m_target.m_columnInsertBounds.setBottom(lastY + INSERT_MARGINS);
+			} else {
+				m_target.m_columnInsertBounds.y = 0;
+				m_target.m_columnInsertBounds.setBottom(getHostFigure().getSize().height);
+			}
+		}
+		// find existing column
+		for (int columnIndex = 0; columnIndex < columnIntervals.length; columnIndex++) {
+			boolean isLast = columnIndex == columnIntervals.length - 1;
+			Interval interval = columnIntervals[columnIndex];
+			Interval nextInterval = !isLast ? columnIntervals[columnIndex + 1] : null;
+			// before first
+			if (location.x < columnIntervals[0].begin()) {
+				m_target.m_column = 0;
+				m_target.m_columnInsert = true;
+				// prepare parameters
+				int[] parameters =
+						getInsertFeedbackParameters(new Interval(0, 0), interval, INSERT_COLUMN_SIZE);
+				// feedback
+				m_target.m_feedbackBounds.x = parameters[3];
+				m_target.m_feedbackBounds.width = parameters[4] - parameters[3];
+				// insert
+				m_target.m_columnInsertBounds.x = parameters[1];
+				m_target.m_columnInsertBounds.width = parameters[2] - parameters[1];
+				// stop
+				break;
+			}
+			// gap or near to end of interval
+			if (!isLast) {
+				int gap = nextInterval.begin() - interval.end();
+				boolean directGap = interval.end() <= location.x && location.x < nextInterval.begin();
+				boolean narrowGap = gap < 2 * INSERT_COLUMN_SIZE;
+				boolean nearEnd = Math.abs(location.x - interval.end()) < INSERT_COLUMN_SIZE;
+				boolean nearBegin = Math.abs(location.x - nextInterval.begin()) < INSERT_COLUMN_SIZE;
+				if (directGap || narrowGap && (nearEnd || nearBegin)) {
+					m_target.m_column = columnIndex + 1;
+					m_target.m_columnInsert = true;
+					// prepare parameters
+					int[] parameters =
+							getInsertFeedbackParameters(interval, nextInterval, INSERT_COLUMN_SIZE);
+					// feedback
+					m_target.m_feedbackBounds.x = parameters[3];
+					m_target.m_feedbackBounds.width = parameters[4] - parameters[3];
+					// insert
+					m_target.m_columnInsertBounds.x = parameters[1];
+					m_target.m_columnInsertBounds.width = parameters[2] - parameters[1];
+					// stop
+					break;
+				}
+			}
+			// column
+			if (interval.contains(location.x)) {
+				m_target.m_column = columnIndex;
+				// feedback
+				m_target.m_feedbackBounds.x = interval.begin();
+				m_target.m_feedbackBounds.width = interval.length()+ 1;
+				// stop
+				break;
+			}
+		}
+		// find virtual column
+		if (m_target.m_column == -1) {
+			int columnGap = gridInfo.getVirtualColumnGap();
+			int columnSize = gridInfo.getVirtualColumnSize();
+			//
+			int newWidth = columnSize + columnGap;
+			int newDelta = (location.x - lastX - columnGap / 2) / newWidth;
+			//
+			m_target.m_column = columnIntervals.length + newDelta;
+			m_target.m_feedbackBounds.x = lastX + columnGap + newWidth * newDelta;
+			m_target.m_feedbackBounds.width = columnSize + 1;
+		}
+		// find existing row
+		for (int rowIndex = 0; rowIndex < rowIntervals.length; rowIndex++) {
+			boolean isLast = rowIndex == rowIntervals.length - 1;
+			Interval interval = rowIntervals[rowIndex];
+			Interval nextInterval = !isLast ? rowIntervals[rowIndex + 1] : null;
+			// before first
+			if (location.y < rowIntervals[0].begin()) {
+				m_target.m_row = 0;
+				m_target.m_rowInsert = true;
+				// prepare parameters
+				int[] parameters =
+						getInsertFeedbackParameters(new Interval(0, 0), interval, INSERT_ROW_SIZE);
+				// feedback
+				m_target.m_feedbackBounds.y = parameters[3];
+				m_target.m_feedbackBounds.height = parameters[4] - parameters[3];
+				// insert
+				m_target.m_rowInsertBounds.y = parameters[1];
+				m_target.m_rowInsertBounds.height = parameters[2] - parameters[1];
+				// stop
+				break;
+			}
+			// gap or near to end of interval
+			if (!isLast) {
+				int gap = nextInterval.begin() - interval.end();
+				boolean directGap = interval.end() <= location.y && location.y < nextInterval.begin();
+				boolean narrowGap = gap < 2 * INSERT_ROW_SIZE;
+				boolean nearEnd = Math.abs(location.y - interval.end()) < INSERT_ROW_SIZE;
+				boolean nearBegin = Math.abs(location.y - nextInterval.begin()) < INSERT_ROW_SIZE;
+				if (directGap || narrowGap && (nearEnd || nearBegin)) {
+					m_target.m_row = rowIndex + 1;
+					m_target.m_rowInsert = true;
+					// prepare parameters
+					int[] parameters = getInsertFeedbackParameters(interval, nextInterval, INSERT_ROW_SIZE);
+					// feedback
+					m_target.m_feedbackBounds.y = parameters[3];
+					m_target.m_feedbackBounds.height = parameters[4] - parameters[3];
+					// insert
+					m_target.m_rowInsertBounds.y = parameters[1];
+					m_target.m_rowInsertBounds.height = parameters[2] - parameters[1];
+					// stop
+					break;
+				}
+			}
+			// row
+			if (interval.contains(location.y)) {
+				m_target.m_row = rowIndex;
+				// feedback
+				m_target.m_feedbackBounds.y = interval.begin();
+				m_target.m_feedbackBounds.height = interval.length()+ 1;
+				// stop
+				break;
+			}
+		}
+		// find virtual row
+		if (m_target.m_row == -1) {
+			int rowGap = gridInfo.getVirtualRowGap();
+			int rowSize = gridInfo.getVirtualRowSize();
+			//
+			int newHeight = rowSize + rowGap;
+			int newDelta = (location.y - lastY - rowGap / 2) / newHeight;
+			//
+			m_target.m_row = rowIntervals.length + newDelta;
+			m_target.m_feedbackBounds.y = lastY + rowGap + newHeight * newDelta;
+			m_target.m_feedbackBounds.height = rowSize + 1;
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IHeadersProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public LayoutEditPolicy getContainerLayoutPolicy(boolean horizontal) {
-    if (horizontal) {
-      return new ColumnsLayoutEditPolicy<C>(this, m_layout);
-    } else {
-      return new RowsLayoutEditPolicy<C>(this, m_layout);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IHeadersProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public LayoutEditPolicy getContainerLayoutPolicy(boolean horizontal) {
+		if (horizontal) {
+			return new ColumnsLayoutEditPolicy<C>(this, m_layout);
+		} else {
+			return new RowsLayoutEditPolicy<C>(this, m_layout);
+		}
+	}
 
-  @Override
-  public List<?> getHeaders(boolean horizontal) {
-    return horizontal ? m_layout.getColumns() : m_layout.getRows();
-  }
+	@Override
+	public List<?> getHeaders(boolean horizontal) {
+		return horizontal ? m_layout.getColumns() : m_layout.getRows();
+	}
 
-  @Override
-  @SuppressWarnings("unchecked")
-  public EditPart createHeaderEditPart(boolean horizontal, Object model) {
-    if (horizontal) {
-      return new ColumnHeaderEditPart<C>(m_layout, (TableWrapColumnInfo<C>) model, getHostFigure());
-    } else {
-      return new RowHeaderEditPart<C>(m_layout, (TableWrapRowInfo<C>) model, getHostFigure());
-    }
-  }
+	@Override
+	@SuppressWarnings("unchecked")
+	public EditPart createHeaderEditPart(boolean horizontal, Object model) {
+		if (horizontal) {
+			return new ColumnHeaderEditPart<C>(m_layout, (TableWrapColumnInfo<C>) model, getHostFigure());
+		} else {
+			return new RowHeaderEditPart<C>(m_layout, (TableWrapRowInfo<C>) model, getHostFigure());
+		}
+	}
 
-  @Override
-  public void buildContextMenu(IMenuManager manager, boolean horizontal) {
-  }
+	@Override
+	public void buildContextMenu(IMenuManager manager, boolean horizontal) {
+	}
 
-  @Override
-  public void handleDoubleClick(boolean horizontal) {
-  }
+	@Override
+	public void handleDoubleClick(boolean horizontal) {
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/forms/layout/grid/TableWrapSelectionEditPolicy.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/forms/layout/grid/TableWrapSelectionEditPolicy.java
index 15dfd0f3b..99c609ae4 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/forms/layout/grid/TableWrapSelectionEditPolicy.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/forms/layout/grid/TableWrapSelectionEditPolicy.java
@@ -45,221 +45,221 @@
  * @coverage rcp.gef.policy
  */
 public final class TableWrapSelectionEditPolicy<C extends IControlInfo>
-    extends
-      AbstractGridSelectionEditPolicy {
-  private final ITableWrapLayoutInfo<C> m_layout;
-  private final C m_component;
-  private final GridHelper<C> m_gridHelper = new GridHelper<C>(this, false);
+extends
+AbstractGridSelectionEditPolicy {
+	private final ITableWrapLayoutInfo<C> m_layout;
+	private final C m_component;
+	private final GridHelper<C> m_gridHelper = new GridHelper<C>(this, false);
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public TableWrapSelectionEditPolicy(ITableWrapLayoutInfo<C> layout, C component) {
-    super(component);
-    m_layout = layout;
-    m_component = component;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public TableWrapSelectionEditPolicy(ITableWrapLayoutInfo<C> layout, C component) {
+		super(component);
+		m_layout = layout;
+		m_component = component;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected boolean isActiveLayout() {
-    return m_component.getParent().getChildren().contains(m_layout);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected boolean isActiveLayout() {
+		return m_component.getParent().getChildren().contains(m_layout);
+	}
 
-  @Override
-  protected IGridInfo getGridInfo() {
-    return m_layout.getGridInfo();
-  }
+	@Override
+	protected IGridInfo getGridInfo() {
+		return m_layout.getGridInfo();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Selection
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected List<Handle> createSelectionHandles() {
-    List<Handle> handlesList = Lists.newArrayList();
-    // add move handle
-    handlesList.add(createMoveHandle());
-    // add size hint handle
-    handlesList.add(createSizeHandle(IPositionConstants.SOUTH, 0.25));
-    // add span handles
-    {
-      handlesList.add(createSpanHandle(IPositionConstants.NORTH, 0.25));
-      handlesList.add(createSpanHandle(IPositionConstants.WEST, 0.25));
-      handlesList.add(createSpanHandle(IPositionConstants.EAST, 0.75));
-      handlesList.add(createSpanHandle(IPositionConstants.SOUTH, 0.75));
-    }
-    //
-    return handlesList;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Selection
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected List<Handle> createSelectionHandles() {
+		List<Handle> handlesList = Lists.newArrayList();
+		// add move handle
+		handlesList.add(createMoveHandle());
+		// add size hint handle
+		handlesList.add(createSizeHandle(IPositionConstants.SOUTH, 0.25));
+		// add span handles
+		{
+			handlesList.add(createSpanHandle(IPositionConstants.NORTH, 0.25));
+			handlesList.add(createSpanHandle(IPositionConstants.WEST, 0.25));
+			handlesList.add(createSpanHandle(IPositionConstants.EAST, 0.75));
+			handlesList.add(createSpanHandle(IPositionConstants.SOUTH, 0.75));
+		}
+		//
+		return handlesList;
+	}
 
-  @Override
-  protected void showPrimarySelection() {
-    super.showPrimarySelection();
-    m_gridHelper.showGridFeedback();
-  }
+	@Override
+	protected void showPrimarySelection() {
+		super.showPrimarySelection();
+		m_gridHelper.showGridFeedback();
+	}
 
-  @Override
-  protected void hideSelection() {
-    m_gridHelper.eraseGridFeedback();
-    super.hideSelection();
-  }
+	@Override
+	protected void hideSelection() {
+		m_gridHelper.eraseGridFeedback();
+		super.hideSelection();
+	}
 
-  @Override
-  @SuppressWarnings("unchecked")
-  protected Figure createAlignmentFigure(IAbstractComponentInfo component, boolean horizontal) {
-    IEditPartViewer viewer = getHost().getViewer();
-    try {
-      final ITableWrapDataInfo layoutData = m_layout.getTableWrapData2((C) component);
-      if (horizontal) {
-        return new AbstractPopupFigure(viewer, 9, 5) {
-          @Override
-          protected Image getImage() {
-            return layoutData.getSmallAlignmentImage(true);
-          }
+	@Override
+	@SuppressWarnings("unchecked")
+	protected Figure createAlignmentFigure(IAbstractComponentInfo component, boolean horizontal) {
+		IEditPartViewer viewer = getHost().getViewer();
+		try {
+			final ITableWrapDataInfo layoutData = m_layout.getTableWrapData2((C) component);
+			if (horizontal) {
+				return new AbstractPopupFigure(viewer, 9, 5) {
+					@Override
+					protected Image getImage() {
+						return layoutData.getSmallAlignmentImage(true);
+					}
 
-          @Override
-          protected void fillMenu(IMenuManager manager) {
-            layoutData.fillHorizontalAlignmentMenu(manager);
-          }
-        };
-      } else {
-        return new AbstractPopupFigure(viewer, 5, 9) {
-          @Override
-          protected Image getImage() {
-            return layoutData.getSmallAlignmentImage(false);
-          }
+					@Override
+					protected void fillMenu(IMenuManager manager) {
+						layoutData.fillHorizontalAlignmentMenu(manager);
+					}
+				};
+			} else {
+				return new AbstractPopupFigure(viewer, 5, 9) {
+					@Override
+					protected Image getImage() {
+						return layoutData.getSmallAlignmentImage(false);
+					}
 
-          @Override
-          protected void fillMenu(IMenuManager manager) {
-            layoutData.fillVerticalAlignmentMenu(manager);
-          }
-        };
-      }
-    } catch (Throwable e) {
-    }
-    return null;
-  }
+					@Override
+					protected void fillMenu(IMenuManager manager) {
+						layoutData.fillVerticalAlignmentMenu(manager);
+					}
+				};
+			}
+		} catch (Throwable e) {
+		}
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Resize support
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Command createSizeCommand(final boolean horizontal, final Dimension size) {
-    return new EditCommand(m_object) {
-      @Override
-      protected void executeEdit() throws Exception {
-        m_layout.command_setHeightHint(m_component, size.height);
-      }
-    };
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Resize support
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Command createSizeCommand(final boolean horizontal, final Dimension size) {
+		return new EditCommand(m_object) {
+			@Override
+			protected void executeEdit() throws Exception {
+				m_layout.command_setHeightHint(m_component, size.height);
+			}
+		};
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Span
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Command createSpanCommand(final boolean horizontal, final Rectangle cells) {
-    return new EditCommand(m_layout) {
-      @Override
-      protected void executeEdit() throws Exception {
-        m_layout.command_setCells(m_component, cells, true);
-      }
-    };
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Span
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Command createSpanCommand(final boolean horizontal, final Rectangle cells) {
+		return new EditCommand(m_layout) {
+			@Override
+			protected void executeEdit() throws Exception {
+				m_layout.command_setCells(m_component, cells, true);
+			}
+		};
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Keyboard
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void performRequest(Request request) {
-    if (request instanceof KeyRequest) {
-      KeyRequest keyRequest = (KeyRequest) request;
-      if (keyRequest.isPressed()) {
-        char c = keyRequest.getCharacter();
-        // horizontal
-        if (c == 'h') {
-          flipGrab(true);
-        } else if (c == 'l') {
-          setAlignment(true, TableWrapData.LEFT);
-        } else if (c == 'c') {
-          setAlignment(true, TableWrapData.CENTER);
-        } else if (c == 'r') {
-          setAlignment(true, TableWrapData.RIGHT);
-        } else if (c == 'f') {
-          setAlignment(true, TableWrapData.FILL);
-        }
-        // vertical
-        if (c == 'v') {
-          flipGrab(false);
-        } else if (c == 't') {
-          setAlignment(false, TableWrapData.TOP);
-        } else if (c == 'm') {
-          setAlignment(false, TableWrapData.MIDDLE);
-        } else if (c == 'b') {
-          setAlignment(false, TableWrapData.BOTTOM);
-        } else if (c == 'F') {
-          setAlignment(false, TableWrapData.FILL);
-        }
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Keyboard
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void performRequest(Request request) {
+		if (request instanceof KeyRequest) {
+			KeyRequest keyRequest = (KeyRequest) request;
+			if (keyRequest.isPressed()) {
+				char c = keyRequest.getCharacter();
+				// horizontal
+				if (c == 'h') {
+					flipGrab(true);
+				} else if (c == 'l') {
+					setAlignment(true, TableWrapData.LEFT);
+				} else if (c == 'c') {
+					setAlignment(true, TableWrapData.CENTER);
+				} else if (c == 'r') {
+					setAlignment(true, TableWrapData.RIGHT);
+				} else if (c == 'f') {
+					setAlignment(true, TableWrapData.FILL);
+				}
+				// vertical
+				if (c == 'v') {
+					flipGrab(false);
+				} else if (c == 't') {
+					setAlignment(false, TableWrapData.TOP);
+				} else if (c == 'm') {
+					setAlignment(false, TableWrapData.MIDDLE);
+				} else if (c == 'b') {
+					setAlignment(false, TableWrapData.BOTTOM);
+				} else if (c == 'F') {
+					setAlignment(false, TableWrapData.FILL);
+				}
+			}
+		}
+	}
 
-  /**
-   * Flips the horizontal/vertical grab.
-   */
-  private void flipGrab(final boolean horizontal) {
-    execute(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        ITableWrapDataInfo layoutData = m_layout.getTableWrapData2(m_component);
-        if (horizontal) {
-          layoutData.setHorizontalGrab(!layoutData.getHorizontalGrab());
-        } else {
-          layoutData.setVerticalGrab(!layoutData.getVerticalGrab());
-        }
-      }
-    });
-  }
+	/**
+	 * Flips the horizontal/vertical grab.
+	 */
+	private void flipGrab(final boolean horizontal) {
+		execute(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				ITableWrapDataInfo layoutData = m_layout.getTableWrapData2(m_component);
+				if (horizontal) {
+					layoutData.setHorizontalGrab(!layoutData.getHorizontalGrab());
+				} else {
+					layoutData.setVerticalGrab(!layoutData.getVerticalGrab());
+				}
+			}
+		});
+	}
 
-  /**
-   * Sets the horizontal/vertical alignment.
-   */
-  private void setAlignment(final boolean horizontal, final int alignment) {
-    execute(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        ITableWrapDataInfo layoutData = m_layout.getTableWrapData2(m_component);
-        if (horizontal) {
-          layoutData.setHorizontalAlignment(alignment);
-        } else {
-          layoutData.setVerticalAlignment(alignment);
-        }
-      }
-    });
-  }
+	/**
+	 * Sets the horizontal/vertical alignment.
+	 */
+	private void setAlignment(final boolean horizontal, final int alignment) {
+		execute(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				ITableWrapDataInfo layoutData = m_layout.getTableWrapData2(m_component);
+				if (horizontal) {
+					layoutData.setHorizontalAlignment(alignment);
+				} else {
+					layoutData.setVerticalAlignment(alignment);
+				}
+			}
+		});
+	}
 
-  /**
-   * Executes given {@link RunnableEx} as edit operation.
-   */
-  private void execute(final RunnableEx runnable) {
-    getHost().getViewer().getEditDomain().executeCommand(new EditCommand(m_component) {
-      @Override
-      protected void executeEdit() throws Exception {
-        runnable.run();
-      }
-    });
-  }
+	/**
+	 * Executes given {@link RunnableEx} as edit operation.
+	 */
+	private void execute(final RunnableEx runnable) {
+		getHost().getViewer().getEditDomain().executeCommand(new EditCommand(m_component) {
+			@Override
+			protected void executeEdit() throws Exception {
+				runnable.run();
+			}
+		});
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/forms/layout/grid/header/actions/DimensionHeaderAction.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/forms/layout/grid/header/actions/DimensionHeaderAction.java
index 7ce34f0fd..b10986660 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/forms/layout/grid/header/actions/DimensionHeaderAction.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/forms/layout/grid/header/actions/DimensionHeaderAction.java
@@ -30,81 +30,81 @@
  * @coverage rcp.gef.policy
  */
 public abstract class DimensionHeaderAction<C extends IControlInfo> extends ObjectInfoAction {
-  private final IEditPartViewer m_viewer;
+	private final IEditPartViewer m_viewer;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DimensionHeaderAction(DimensionHeaderEditPart<C> editPart, String text) {
-    this(editPart, text, null);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DimensionHeaderAction(DimensionHeaderEditPart<C> editPart, String text) {
+		this(editPart, text, null);
+	}
 
-  public DimensionHeaderAction(DimensionHeaderEditPart<C> editPart,
-      String text,
-      ImageDescriptor imageDescriptor) {
-    this(editPart, text, imageDescriptor, AS_PUSH_BUTTON);
-  }
+	public DimensionHeaderAction(DimensionHeaderEditPart<C> editPart,
+			String text,
+			ImageDescriptor imageDescriptor) {
+		this(editPart, text, imageDescriptor, AS_PUSH_BUTTON);
+	}
 
-  public DimensionHeaderAction(DimensionHeaderEditPart<C> editPart,
-      String text,
-      ImageDescriptor imageDescriptor,
-      int style) {
-    super(editPart.getLayout().getUnderlyingModel(), text, style);
-    m_viewer = editPart.getViewer();
-    setImageDescriptor(imageDescriptor);
-  }
+	public DimensionHeaderAction(DimensionHeaderEditPart<C> editPart,
+			String text,
+			ImageDescriptor imageDescriptor,
+			int style) {
+		super(editPart.getLayout().getUnderlyingModel(), text, style);
+		m_viewer = editPart.getViewer();
+		setImageDescriptor(imageDescriptor);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final int hashCode() {
-    return 0;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final int hashCode() {
+		return 0;
+	}
 
-  @Override
-  public boolean equals(Object obj) {
-    return obj != null && getClass() == obj.getClass();
-  }
+	@Override
+	public boolean equals(Object obj) {
+		return obj != null && getClass() == obj.getClass();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Run
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected final void runEx() throws Exception {
-    // prepare selection
-    List<TableWrapDimensionInfo<C>> dimensions = Lists.newArrayList();
-    {
-      for (EditPart editPart : m_viewer.getSelectedEditParts()) {
-        if (editPart instanceof DimensionHeaderEditPart<?>) {
-          @SuppressWarnings("unchecked")
-          DimensionHeaderEditPart<C> headerEditPart = (DimensionHeaderEditPart<C>) editPart;
-          dimensions.add(headerEditPart.getDimension());
-        }
-      }
-    }
-    // run over them
-    run(dimensions);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Run
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected final void runEx() throws Exception {
+		// prepare selection
+		List<TableWrapDimensionInfo<C>> dimensions = Lists.newArrayList();
+		{
+			for (EditPart editPart : m_viewer.getSelectedEditParts()) {
+				if (editPart instanceof DimensionHeaderEditPart<?>) {
+					@SuppressWarnings("unchecked")
+					DimensionHeaderEditPart<C> headerEditPart = (DimensionHeaderEditPart<C>) editPart;
+					dimensions.add(headerEditPart.getDimension());
+				}
+			}
+		}
+		// run over them
+		run(dimensions);
+	}
 
-  /**
-   * Does some operation on {@link List} of selected {@link TableWrapDimensionInfo}'s.
-   */
-  protected void run(List<TableWrapDimensionInfo<C>> dimensions) throws Exception {
-    for (TableWrapDimensionInfo<C> dimension : dimensions) {
-      run(dimension);
-    }
-  }
+	/**
+	 * Does some operation on {@link List} of selected {@link TableWrapDimensionInfo}'s.
+	 */
+	protected void run(List<TableWrapDimensionInfo<C>> dimensions) throws Exception {
+		for (TableWrapDimensionInfo<C> dimension : dimensions) {
+			run(dimension);
+		}
+	}
 
-  /**
-   * Does some operation on selected {@link TableWrapDimensionInfo}'s.
-   */
-  protected void run(TableWrapDimensionInfo<C> dimension) throws Exception {
-  }
+	/**
+	 * Does some operation on selected {@link TableWrapDimensionInfo}'s.
+	 */
+	protected void run(TableWrapDimensionInfo<C> dimension) throws Exception {
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/forms/layout/grid/header/actions/SetAlignmentAction.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/forms/layout/grid/header/actions/SetAlignmentAction.java
index 09bd3ff9d..f64fa14d9 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/forms/layout/grid/header/actions/SetAlignmentAction.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/forms/layout/grid/header/actions/SetAlignmentAction.java
@@ -26,29 +26,29 @@
  * @coverage rcp.gef.policy
  */
 public final class SetAlignmentAction<C extends IControlInfo> extends DimensionHeaderAction<C> {
-  private final int m_alignment;
+	private final int m_alignment;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SetAlignmentAction(DimensionHeaderEditPart<C> header,
-      String text,
-      ImageDescriptor imageDescriptor,
-      int alignment) {
-    super(header, text, imageDescriptor, AS_RADIO_BUTTON);
-    m_alignment = alignment;
-    setChecked(ObjectUtils.equals(header.getDimension().getAlignment(), m_alignment));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SetAlignmentAction(DimensionHeaderEditPart<C> header,
+			String text,
+			ImageDescriptor imageDescriptor,
+			int alignment) {
+		super(header, text, imageDescriptor, AS_RADIO_BUTTON);
+		m_alignment = alignment;
+		setChecked(ObjectUtils.equals(header.getDimension().getAlignment(), m_alignment));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Run
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void run(TableWrapDimensionInfo<C> dimension) throws Exception {
-    dimension.setAlignment(m_alignment);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Run
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void run(TableWrapDimensionInfo<C> dimension) throws Exception {
+		dimension.setAlignment(m_alignment);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/forms/layout/grid/header/actions/SetGrabAction.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/forms/layout/grid/header/actions/SetGrabAction.java
index e449f73c5..4233bdf85 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/forms/layout/grid/header/actions/SetGrabAction.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/forms/layout/grid/header/actions/SetGrabAction.java
@@ -24,25 +24,25 @@
  * @coverage rcp.gef.policy
  */
 public final class SetGrabAction<C extends IControlInfo> extends DimensionHeaderAction<C> {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SetGrabAction(DimensionHeaderEditPart<C> header,
-      String text,
-      ImageDescriptor imageDescriptor) {
-    super(header, text, imageDescriptor, AS_CHECK_BOX);
-    setChecked(header.getDimension().getGrab());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SetGrabAction(DimensionHeaderEditPart<C> header,
+			String text,
+			ImageDescriptor imageDescriptor) {
+		super(header, text, imageDescriptor, AS_CHECK_BOX);
+		setChecked(header.getDimension().getGrab());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Run
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void run(TableWrapDimensionInfo<C> dimension) throws Exception {
-    dimension.setGrab(!dimension.getGrab());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Run
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void run(TableWrapDimensionInfo<C> dimension) throws Exception {
+		dimension.setGrab(!dimension.getGrab());
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/forms/layout/grid/header/edit/ColumnHeaderEditPart.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/forms/layout/grid/header/edit/ColumnHeaderEditPart.java
index 9e731bedb..0aa3041ff 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/forms/layout/grid/header/edit/ColumnHeaderEditPart.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/forms/layout/grid/header/edit/ColumnHeaderEditPart.java
@@ -41,164 +41,164 @@
  * @coverage rcp.gef.policy
  */
 public final class ColumnHeaderEditPart<C extends IControlInfo> extends DimensionHeaderEditPart<C> {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ColumnHeaderEditPart(ITableWrapLayoutInfo<C> layout,
-      TableWrapColumnInfo<C> column,
-      Figure containerFigure) {
-    super(layout, column, containerFigure);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ColumnHeaderEditPart(ITableWrapLayoutInfo<C> layout,
+			TableWrapColumnInfo<C> column,
+			Figure containerFigure) {
+		super(layout, column, containerFigure);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Figure
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Figure createFigure() {
-    Figure newFigure = new Figure() {
-      @Override
-      protected void paintClientArea(Graphics graphics) {
-        Rectangle r = getClientArea();
-        // draw rectangle
-        graphics.setForegroundColor(IColorConstants.buttonDarker);
-        graphics.drawLine(r.x, r.y, r.x, r.bottom());
-        graphics.drawLine(r.right() - 1, r.y, r.right() - 1, r.bottom());
-        // draw column index
-        int titleLeft;
-        int titleRight;
-        {
-          String title = "" + (1 + m_dimension.getIndex());
-          Dimension textExtents = graphics.getTextExtent(title);
-          if (r.width < 3 + textExtents.width + 3) {
-            return;
-          }
-          // draw title
-          titleLeft = r.x + (r.width - textExtents.width) / 2;
-          titleRight = titleLeft + textExtents.width;
-          int y = r.y + (r.height - textExtents.height) / 2;
-          graphics.setForegroundColor(IColorConstants.black);
-          graphics.drawText(title, titleLeft, y);
-        }
-        //
-        try {
-          // draw alignment indicator
-          {
-            Integer alignmentValue = m_dimension.getAlignment();
-            if (alignmentValue != null && titleLeft - r.x > 3 + 7 + 3) {
-              int alignment = alignmentValue.intValue();
-              Image image;
-              if (alignment == TableWrapData.LEFT) {
-                image = getImage("left.gif");
-              } else if (alignment == TableWrapData.CENTER) {
-                image = getImage("center.gif");
-              } else if (alignment == TableWrapData.RIGHT) {
-                image = getImage("right.gif");
-              } else {
-                image = getImage("fill.gif");
-              }
-              //
-              int x = r.x + 2;
-              drawCentered(graphics, image, x);
-            }
-          }
-          // draw grow indicator
-          if (m_dimension.getGrab()) {
-            if (titleRight + 3 + 7 + 3 < r.right()) {
-              Image image = getImage("grow.gif");
-              drawCentered(graphics, image, r.right() - 3 - image.getBounds().width);
-            }
-          }
-        } catch (Throwable e) {
-          e.printStackTrace();
-        }
-      }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Figure
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Figure createFigure() {
+		Figure newFigure = new Figure() {
+			@Override
+			protected void paintClientArea(Graphics graphics) {
+				Rectangle r = getClientArea();
+				// draw rectangle
+				graphics.setForegroundColor(IColorConstants.buttonDarker);
+				graphics.drawLine(r.x, r.y, r.x, r.bottom());
+				graphics.drawLine(r.right() - 1, r.y, r.right() - 1, r.bottom());
+				// draw column index
+				int titleLeft;
+				int titleRight;
+				{
+					String title = "" + (1 + m_dimension.getIndex());
+					Dimension textExtents = graphics.getTextExtent(title);
+					if (r.width < 3 + textExtents.width + 3) {
+						return;
+					}
+					// draw title
+					titleLeft = r.x + (r.width - textExtents.width) / 2;
+					titleRight = titleLeft + textExtents.width;
+					int y = r.y + (r.height - textExtents.height) / 2;
+					graphics.setForegroundColor(IColorConstants.black);
+					graphics.drawText(title, titleLeft, y);
+				}
+				//
+				try {
+					// draw alignment indicator
+					{
+						Integer alignmentValue = m_dimension.getAlignment();
+						if (alignmentValue != null && titleLeft - r.x > 3 + 7 + 3) {
+							int alignment = alignmentValue.intValue();
+							Image image;
+							if (alignment == TableWrapData.LEFT) {
+								image = getImage("left.gif");
+							} else if (alignment == TableWrapData.CENTER) {
+								image = getImage("center.gif");
+							} else if (alignment == TableWrapData.RIGHT) {
+								image = getImage("right.gif");
+							} else {
+								image = getImage("fill.gif");
+							}
+							//
+							int x = r.x + 2;
+							drawCentered(graphics, image, x);
+						}
+					}
+					// draw grow indicator
+					if (m_dimension.getGrab()) {
+						if (titleRight + 3 + 7 + 3 < r.right()) {
+							Image image = getImage("grow.gif");
+							drawCentered(graphics, image, r.right() - 3 - image.getBounds().width);
+						}
+					}
+				} catch (Throwable e) {
+					e.printStackTrace();
+				}
+			}
 
-      private Image getImage(String name) {
-        return TableWrapLayoutImages.getImage("h/" + name);
-      }
+			private Image getImage(String name) {
+				return TableWrapLayoutImages.getImage("h/" + name);
+			}
 
-      private void drawCentered(Graphics graphics, Image image, int x) {
-        int y = (getBounds().height - image.getBounds().height) / 2;
-        graphics.drawImage(image, x, y);
-      }
-    };
-    //
-    newFigure.setFont(DEFAULT_FONT);
-    newFigure.setOpaque(true);
-    return newFigure;
-  }
+			private void drawCentered(Graphics graphics, Image image, int x) {
+				int y = (getBounds().height - image.getBounds().height) / 2;
+				graphics.drawImage(image, x, y);
+			}
+		};
+		//
+		newFigure.setFont(DEFAULT_FONT);
+		newFigure.setOpaque(true);
+		return newFigure;
+	}
 
-  @Override
-  protected void refreshVisuals() {
-    super.refreshVisuals();
-    // prepare column interval
-    Interval interval;
-    {
-      int index = m_dimension.getIndex();
-      IGridInfo gridInfo = m_layout.getGridInfo();
-      interval = gridInfo.getColumnIntervals()[index];
-    }
-    // prepare bounds
-    Rectangle bounds;
-    {
-      bounds =
-          new Rectangle(interval.begin(),
-              0,
-              interval.length() + 1,
-              ((GraphicalEditPart) getParent()).getFigure().getSize().height);
-      bounds.performTranslate(getOffset().x, 0);
-    }
-    // set bounds
-    getFigure().setBounds(bounds);
-  }
+	@Override
+	protected void refreshVisuals() {
+		super.refreshVisuals();
+		// prepare column interval
+		Interval interval;
+		{
+			int index = m_dimension.getIndex();
+			IGridInfo gridInfo = m_layout.getGridInfo();
+			interval = gridInfo.getColumnIntervals()[index];
+		}
+		// prepare bounds
+		Rectangle bounds;
+		{
+			bounds =
+					new Rectangle(interval.begin(),
+							0,
+							interval.length() + 1,
+							((GraphicalEditPart) getParent()).getFigure().getSize().height);
+			bounds.performTranslate(getOffset().x, 0);
+		}
+		// set bounds
+		getFigure().setBounds(bounds);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IHeaderMenuProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void buildContextMenu(IMenuManager manager) {
-    // grab
-    {
-      manager.add(new SetGrabAction<C>(this,
-          GefMessages.ColumnHeaderEditPart_actionGrab,
-          TableWrapLayoutImages.getImageDescriptor("h/menu/grow.gif")));
-    }
-    // alignment
-    {
-      manager.add(new Separator());
-      manager.add(new SetAlignmentAction<C>(this,
-          GefMessages.ColumnHeaderEditPart_alignmentLeft,
-          TableWrapLayoutImages.getImageDescriptor("h/menu/left.gif"),
-          TableWrapData.LEFT));
-      manager.add(new SetAlignmentAction<C>(this,
-          GefMessages.ColumnHeaderEditPart_alignmentCenter,
-          TableWrapLayoutImages.getImageDescriptor("h/menu/center.gif"),
-          TableWrapData.CENTER));
-      manager.add(new SetAlignmentAction<C>(this,
-          GefMessages.ColumnHeaderEditPart_alignmentRight,
-          TableWrapLayoutImages.getImageDescriptor("h/menu/right.gif"),
-          TableWrapData.RIGHT));
-      manager.add(new SetAlignmentAction<C>(this,
-          GefMessages.ColumnHeaderEditPart_alignmentFill,
-          TableWrapLayoutImages.getImageDescriptor("h/menu/fill.gif"),
-          TableWrapData.FILL));
-    }
-    // operations
-    {
-      manager.add(new Separator());
-      manager.add(new DimensionHeaderAction<C>(this, GefMessages.ColumnHeaderEditPart_actionDelete,
-          TableWrapLayoutImages.getImageDescriptor("h/menu/delete.gif")) {
-        @Override
-        protected void run(TableWrapDimensionInfo<C> dimension) throws Exception {
-          m_layout.command_deleteColumn(dimension.getIndex(), true);
-        }
-      });
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IHeaderMenuProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void buildContextMenu(IMenuManager manager) {
+		// grab
+		{
+			manager.add(new SetGrabAction<C>(this,
+					GefMessages.ColumnHeaderEditPart_actionGrab,
+					TableWrapLayoutImages.getImageDescriptor("h/menu/grow.gif")));
+		}
+		// alignment
+		{
+			manager.add(new Separator());
+			manager.add(new SetAlignmentAction<C>(this,
+					GefMessages.ColumnHeaderEditPart_alignmentLeft,
+					TableWrapLayoutImages.getImageDescriptor("h/menu/left.gif"),
+					TableWrapData.LEFT));
+			manager.add(new SetAlignmentAction<C>(this,
+					GefMessages.ColumnHeaderEditPart_alignmentCenter,
+					TableWrapLayoutImages.getImageDescriptor("h/menu/center.gif"),
+					TableWrapData.CENTER));
+			manager.add(new SetAlignmentAction<C>(this,
+					GefMessages.ColumnHeaderEditPart_alignmentRight,
+					TableWrapLayoutImages.getImageDescriptor("h/menu/right.gif"),
+					TableWrapData.RIGHT));
+			manager.add(new SetAlignmentAction<C>(this,
+					GefMessages.ColumnHeaderEditPart_alignmentFill,
+					TableWrapLayoutImages.getImageDescriptor("h/menu/fill.gif"),
+					TableWrapData.FILL));
+		}
+		// operations
+		{
+			manager.add(new Separator());
+			manager.add(new DimensionHeaderAction<C>(this, GefMessages.ColumnHeaderEditPart_actionDelete,
+					TableWrapLayoutImages.getImageDescriptor("h/menu/delete.gif")) {
+				@Override
+				protected void run(TableWrapDimensionInfo<C> dimension) throws Exception {
+					m_layout.command_deleteColumn(dimension.getIndex(), true);
+				}
+			});
+		}
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/forms/layout/grid/header/edit/DimensionHeaderEditPart.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/forms/layout/grid/header/edit/DimensionHeaderEditPart.java
index 6f473710c..452f08283 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/forms/layout/grid/header/edit/DimensionHeaderEditPart.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/forms/layout/grid/header/edit/DimensionHeaderEditPart.java
@@ -37,103 +37,103 @@
  * @coverage rcp.gef.policy
  */
 public abstract class DimensionHeaderEditPart<C extends IControlInfo> extends GraphicalEditPart
-    implements
-      IHeaderMenuProvider {
-  protected static final Color COLOR_NORMAL = Headers.COLOR_HEADER;
-  protected static final Font DEFAULT_FONT = new Font(null, "Arial", 7, SWT.NONE);
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance fields
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected final ITableWrapLayoutInfo<C> m_layout;
-  protected final TableWrapDimensionInfo<C> m_dimension;
-  private final Figure m_containerFigure;
+implements
+IHeaderMenuProvider {
+	protected static final Color COLOR_NORMAL = Headers.COLOR_HEADER;
+	protected static final Font DEFAULT_FONT = new Font(null, "Arial", 7, SWT.NONE);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance fields
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected final ITableWrapLayoutInfo<C> m_layout;
+	protected final TableWrapDimensionInfo<C> m_dimension;
+	private final Figure m_containerFigure;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DimensionHeaderEditPart(ITableWrapLayoutInfo<C> layout,
-      TableWrapDimensionInfo<C> dimension,
-      Figure containerFigure) {
-    m_layout = layout;
-    m_dimension = dimension;
-    m_containerFigure = containerFigure;
-    setModel(dimension);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DimensionHeaderEditPart(ITableWrapLayoutInfo<C> layout,
+			TableWrapDimensionInfo<C> dimension,
+			Figure containerFigure) {
+		m_layout = layout;
+		m_dimension = dimension;
+		m_containerFigure = containerFigure;
+		setModel(dimension);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the host {@link ITableWrapLayout_Info<C>}.
-   */
-  public final ITableWrapLayoutInfo<C> getLayout() {
-    return m_layout;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the host {@link ITableWrapLayout_Info<C>}.
+	 */
+	public final ITableWrapLayoutInfo<C> getLayout() {
+		return m_layout;
+	}
 
-  /**
-   * @return the {@link TableWrapDimensionInfo} model.
-   */
-  public final TableWrapDimensionInfo<C> getDimension() {
-    return m_dimension;
-  }
+	/**
+	 * @return the {@link TableWrapDimensionInfo} model.
+	 */
+	public final TableWrapDimensionInfo<C> getDimension() {
+		return m_dimension;
+	}
 
-  /**
-   * @return the offset of {@link Figure} with headers relative to the absolute layer.
-   */
-  public final Point getOffset() {
-    Point offset = new Point(0, 0);
-    FigureUtils.translateFigureToAbsolute2(m_containerFigure, offset);
-    offset.performTranslate(m_layout.getComposite().getClientAreaInsets());
-    return offset;
-  }
+	/**
+	 * @return the offset of {@link Figure} with headers relative to the absolute layer.
+	 */
+	public final Point getOffset() {
+		Point offset = new Point(0, 0);
+		FigureUtils.translateFigureToAbsolute2(m_containerFigure, offset);
+		offset.performTranslate(m_layout.getComposite().getClientAreaInsets());
+		return offset;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Dragging
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final Tool getDragTrackerTool(Request request) {
-    return new ParentTargetDragEditPartTracker(this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Dragging
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final Tool getDragTrackerTool(Request request) {
+		return new ParentTargetDragEditPartTracker(this);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Figure support
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void refreshVisuals() {
-    ExecutionUtils.runLog(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        getFigure().setToolTipText(m_dimension.getTitle());
-        getFigure().setBackground(COLOR_NORMAL);
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Figure support
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void refreshVisuals() {
+		ExecutionUtils.runLog(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				getFigure().setToolTipText(m_dimension.getTitle());
+				getFigure().setBackground(COLOR_NORMAL);
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Edit
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void performRequest(Request request) {
-    super.performRequest(request);
-    if (request.getType() == Request.REQ_OPEN) {
-      ExecutionUtils.run(m_layout.getUnderlyingModel(), new RunnableEx() {
-        @Override
-        public void run() throws Exception {
-          m_dimension.flipGrab();
-        }
-      });
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Edit
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void performRequest(Request request) {
+		super.performRequest(request);
+		if (request.getType() == Request.REQ_OPEN) {
+			ExecutionUtils.run(m_layout.getUnderlyingModel(), new RunnableEx() {
+				@Override
+				public void run() throws Exception {
+					m_dimension.flipGrab();
+				}
+			});
+		}
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/forms/layout/grid/header/edit/RowHeaderEditPart.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/forms/layout/grid/header/edit/RowHeaderEditPart.java
index 0ab78321e..31d549c2b 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/forms/layout/grid/header/edit/RowHeaderEditPart.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/forms/layout/grid/header/edit/RowHeaderEditPart.java
@@ -41,164 +41,164 @@
  * @coverage rcp.gef.policy
  */
 public final class RowHeaderEditPart<C extends IControlInfo> extends DimensionHeaderEditPart<C> {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public RowHeaderEditPart(ITableWrapLayoutInfo<C> layout,
-      TableWrapRowInfo<C> row,
-      Figure containerFigure) {
-    super(layout, row, containerFigure);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public RowHeaderEditPart(ITableWrapLayoutInfo<C> layout,
+			TableWrapRowInfo<C> row,
+			Figure containerFigure) {
+		super(layout, row, containerFigure);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Figure
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Figure createFigure() {
-    Figure newFigure = new Figure() {
-      @Override
-      protected void paintClientArea(Graphics graphics) {
-        Rectangle r = getClientArea();
-        // draw rectangle
-        graphics.setForegroundColor(IColorConstants.buttonDarker);
-        graphics.drawLine(r.x, r.y, r.right(), r.y);
-        graphics.drawLine(r.x, r.bottom() - 1, r.right(), r.bottom() - 1);
-        // draw row index
-        int titleTop;
-        int titleBottom;
-        {
-          String title = "" + (1 + m_dimension.getIndex());
-          Dimension textExtents = graphics.getTextExtent(title);
-          if (r.height < 3 + textExtents.height + 3) {
-            return;
-          }
-          // draw title
-          titleTop = r.y + (r.height - textExtents.height) / 2;
-          titleBottom = titleTop + textExtents.height;
-          int x = r.x + (r.width - textExtents.width) / 2;
-          graphics.setForegroundColor(IColorConstants.black);
-          graphics.drawText(title, x, titleTop);
-        }
-        //
-        try {
-          // draw alignment indicator
-          {
-            Integer alignmentValue = m_dimension.getAlignment();
-            if (alignmentValue != null && titleTop - r.y > 3 + 7 + 3) {
-              int alignment = alignmentValue.intValue();
-              Image image;
-              if (alignment == TableWrapData.TOP) {
-                image = getImage("top.gif");
-              } else if (alignment == TableWrapData.MIDDLE) {
-                image = getImage("middle.gif");
-              } else if (alignment == TableWrapData.BOTTOM) {
-                image = getImage("bottom.gif");
-              } else {
-                image = getImage("fill.gif");
-              }
-              //
-              int y = r.y + 2;
-              drawCentered(graphics, image, y);
-            }
-          }
-          // draw grow indicator
-          if (m_dimension.getGrab()) {
-            if (titleBottom + 3 + 7 + 3 < r.bottom()) {
-              Image image = getImage("grow.gif");
-              drawCentered(graphics, image, r.bottom() - 3 - image.getBounds().height);
-            }
-          }
-        } catch (Throwable e) {
-          e.printStackTrace();
-        }
-      }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Figure
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Figure createFigure() {
+		Figure newFigure = new Figure() {
+			@Override
+			protected void paintClientArea(Graphics graphics) {
+				Rectangle r = getClientArea();
+				// draw rectangle
+				graphics.setForegroundColor(IColorConstants.buttonDarker);
+				graphics.drawLine(r.x, r.y, r.right(), r.y);
+				graphics.drawLine(r.x, r.bottom() - 1, r.right(), r.bottom() - 1);
+				// draw row index
+				int titleTop;
+				int titleBottom;
+				{
+					String title = "" + (1 + m_dimension.getIndex());
+					Dimension textExtents = graphics.getTextExtent(title);
+					if (r.height < 3 + textExtents.height + 3) {
+						return;
+					}
+					// draw title
+					titleTop = r.y + (r.height - textExtents.height) / 2;
+					titleBottom = titleTop + textExtents.height;
+					int x = r.x + (r.width - textExtents.width) / 2;
+					graphics.setForegroundColor(IColorConstants.black);
+					graphics.drawText(title, x, titleTop);
+				}
+				//
+				try {
+					// draw alignment indicator
+					{
+						Integer alignmentValue = m_dimension.getAlignment();
+						if (alignmentValue != null && titleTop - r.y > 3 + 7 + 3) {
+							int alignment = alignmentValue.intValue();
+							Image image;
+							if (alignment == TableWrapData.TOP) {
+								image = getImage("top.gif");
+							} else if (alignment == TableWrapData.MIDDLE) {
+								image = getImage("middle.gif");
+							} else if (alignment == TableWrapData.BOTTOM) {
+								image = getImage("bottom.gif");
+							} else {
+								image = getImage("fill.gif");
+							}
+							//
+							int y = r.y + 2;
+							drawCentered(graphics, image, y);
+						}
+					}
+					// draw grow indicator
+					if (m_dimension.getGrab()) {
+						if (titleBottom + 3 + 7 + 3 < r.bottom()) {
+							Image image = getImage("grow.gif");
+							drawCentered(graphics, image, r.bottom() - 3 - image.getBounds().height);
+						}
+					}
+				} catch (Throwable e) {
+					e.printStackTrace();
+				}
+			}
 
-      private Image getImage(String name) {
-        return TableWrapLayoutImages.getImage("v/" + name);
-      }
+			private Image getImage(String name) {
+				return TableWrapLayoutImages.getImage("v/" + name);
+			}
 
-      private void drawCentered(Graphics graphics, Image image, int y) {
-        int x = (getBounds().width - image.getBounds().width) / 2;
-        graphics.drawImage(image, x, y);
-      }
-    };
-    //
-    newFigure.setFont(DEFAULT_FONT);
-    newFigure.setOpaque(true);
-    return newFigure;
-  }
+			private void drawCentered(Graphics graphics, Image image, int y) {
+				int x = (getBounds().width - image.getBounds().width) / 2;
+				graphics.drawImage(image, x, y);
+			}
+		};
+		//
+		newFigure.setFont(DEFAULT_FONT);
+		newFigure.setOpaque(true);
+		return newFigure;
+	}
 
-  @Override
-  protected void refreshVisuals() {
-    super.refreshVisuals();
-    // prepare column interval
-    Interval interval;
-    {
-      int index = m_dimension.getIndex();
-      IGridInfo gridInfo = m_layout.getGridInfo();
-      interval = gridInfo.getRowIntervals()[index];
-    }
-    // prepare bounds
-    Rectangle bounds;
-    {
-      bounds =
-          new Rectangle(0,
-              interval.begin(),
-              ((GraphicalEditPart) getParent()).getFigure().getSize().width,
-              interval.length()+ 1);
-      bounds.performTranslate(0, getOffset().y);
-    }
-    // set bounds
-    getFigure().setBounds(bounds);
-  }
+	@Override
+	protected void refreshVisuals() {
+		super.refreshVisuals();
+		// prepare column interval
+		Interval interval;
+		{
+			int index = m_dimension.getIndex();
+			IGridInfo gridInfo = m_layout.getGridInfo();
+			interval = gridInfo.getRowIntervals()[index];
+		}
+		// prepare bounds
+		Rectangle bounds;
+		{
+			bounds =
+					new Rectangle(0,
+							interval.begin(),
+							((GraphicalEditPart) getParent()).getFigure().getSize().width,
+							interval.length()+ 1);
+			bounds.performTranslate(0, getOffset().y);
+		}
+		// set bounds
+		getFigure().setBounds(bounds);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IHeaderMenuProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void buildContextMenu(IMenuManager manager) {
-    // grab
-    {
-      manager.add(new SetGrabAction<C>(this,
-          GefMessages.RowHeaderEditPart_actionGrab,
-          TableWrapLayoutImages.getImageDescriptor("v/menu/grow.gif")));
-    }
-    // alignment
-    {
-      manager.add(new Separator());
-      manager.add(new SetAlignmentAction<C>(this,
-          GefMessages.RowHeaderEditPart_alignmentTop,
-          TableWrapLayoutImages.getImageDescriptor("v/menu/top.gif"),
-          TableWrapData.TOP));
-      manager.add(new SetAlignmentAction<C>(this,
-          GefMessages.RowHeaderEditPart_alignmentCenter,
-          TableWrapLayoutImages.getImageDescriptor("v/menu/middle.gif"),
-          TableWrapData.MIDDLE));
-      manager.add(new SetAlignmentAction<C>(this,
-          GefMessages.RowHeaderEditPart_alignmentBottom,
-          TableWrapLayoutImages.getImageDescriptor("v/menu/bottom.gif"),
-          TableWrapData.BOTTOM));
-      manager.add(new SetAlignmentAction<C>(this,
-          GefMessages.RowHeaderEditPart_alignmentFill,
-          TableWrapLayoutImages.getImageDescriptor("v/menu/fill.gif"),
-          TableWrapData.FILL));
-    }
-    // operations
-    {
-      manager.add(new Separator());
-      manager.add(new DimensionHeaderAction<C>(this, GefMessages.RowHeaderEditPart_actionDelete,
-          TableWrapLayoutImages.getImageDescriptor("v/menu/delete.gif")) {
-        @Override
-        protected void run(TableWrapDimensionInfo<C> dimension) throws Exception {
-          m_layout.command_deleteRow(dimension.getIndex(), true);
-        }
-      });
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IHeaderMenuProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void buildContextMenu(IMenuManager manager) {
+		// grab
+		{
+			manager.add(new SetGrabAction<C>(this,
+					GefMessages.RowHeaderEditPart_actionGrab,
+					TableWrapLayoutImages.getImageDescriptor("v/menu/grow.gif")));
+		}
+		// alignment
+		{
+			manager.add(new Separator());
+			manager.add(new SetAlignmentAction<C>(this,
+					GefMessages.RowHeaderEditPart_alignmentTop,
+					TableWrapLayoutImages.getImageDescriptor("v/menu/top.gif"),
+					TableWrapData.TOP));
+			manager.add(new SetAlignmentAction<C>(this,
+					GefMessages.RowHeaderEditPart_alignmentCenter,
+					TableWrapLayoutImages.getImageDescriptor("v/menu/middle.gif"),
+					TableWrapData.MIDDLE));
+			manager.add(new SetAlignmentAction<C>(this,
+					GefMessages.RowHeaderEditPart_alignmentBottom,
+					TableWrapLayoutImages.getImageDescriptor("v/menu/bottom.gif"),
+					TableWrapData.BOTTOM));
+			manager.add(new SetAlignmentAction<C>(this,
+					GefMessages.RowHeaderEditPart_alignmentFill,
+					TableWrapLayoutImages.getImageDescriptor("v/menu/fill.gif"),
+					TableWrapData.FILL));
+		}
+		// operations
+		{
+			manager.add(new Separator());
+			manager.add(new DimensionHeaderAction<C>(this, GefMessages.RowHeaderEditPart_actionDelete,
+					TableWrapLayoutImages.getImageDescriptor("v/menu/delete.gif")) {
+				@Override
+				protected void run(TableWrapDimensionInfo<C> dimension) throws Exception {
+					m_layout.command_deleteRow(dimension.getIndex(), true);
+				}
+			});
+		}
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/forms/layout/grid/header/layout/ColumnsLayoutEditPolicy.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/forms/layout/grid/header/layout/ColumnsLayoutEditPolicy.java
index 52a057c86..20b20c6d8 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/forms/layout/grid/header/layout/ColumnsLayoutEditPolicy.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/forms/layout/grid/header/layout/ColumnsLayoutEditPolicy.java
@@ -49,173 +49,173 @@
  * @coverage rcp.gef.policy
  */
 public final class ColumnsLayoutEditPolicy<C extends IControlInfo>
-    extends
-      AbstractHeaderLayoutEditPolicy {
-  private final TableWrapLayoutEditPolicy<C> m_mainPolicy;
-  private final ITableWrapLayoutInfo<C> m_layout;
+extends
+AbstractHeaderLayoutEditPolicy {
+	private final TableWrapLayoutEditPolicy<C> m_mainPolicy;
+	private final ITableWrapLayoutInfo<C> m_layout;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ColumnsLayoutEditPolicy(TableWrapLayoutEditPolicy<C> mainPolicy,
-      ITableWrapLayoutInfo<C> layout) {
-    super(mainPolicy);
-    m_mainPolicy = mainPolicy;
-    m_layout = layout;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ColumnsLayoutEditPolicy(TableWrapLayoutEditPolicy<C> mainPolicy,
+			ITableWrapLayoutInfo<C> layout) {
+		super(mainPolicy);
+		m_mainPolicy = mainPolicy;
+		m_layout = layout;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Children
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void decorateChild(EditPart child) {
-    child.installEditPolicy(
-        EditPolicy.SELECTION_ROLE,
-        new ColumnSelectionEditPolicy<C>(m_mainPolicy));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Children
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void decorateChild(EditPart child) {
+		child.installEditPolicy(
+				EditPolicy.SELECTION_ROLE,
+				new ColumnSelectionEditPolicy<C>(m_mainPolicy));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Move
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final Figure m_insertFeedback = AbstractGridLayoutEditPolicy.createInsertFigure();
-  private TextFeedback m_feedback;
-  private Command m_moveCommand;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Move
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final Figure m_insertFeedback = AbstractGridLayoutEditPolicy.createInsertFigure();
+	private TextFeedback m_feedback;
+	private Command m_moveCommand;
 
-  @Override
-  protected Command getMoveCommand(ChangeBoundsRequest request) {
-    return m_moveCommand;
-  }
+	@Override
+	protected Command getMoveCommand(ChangeBoundsRequest request) {
+		return m_moveCommand;
+	}
 
-  @Override
-  protected void showLayoutTargetFeedback(Request request) {
-    // prepare header
-    DimensionHeaderEditPart<C> headerEditPart;
-    {
-      ChangeBoundsRequest changeBoundsRequest = (ChangeBoundsRequest) request;
-      headerEditPart = toHeaderPart(changeBoundsRequest.getEditParts().get(0));
-    }
-    // prepare location
-    Point location;
-    {
-      IDropRequest dropRequest = (IDropRequest) request;
-      location = dropRequest.getLocation().getCopy();
-    }
-    // prepare target header
-    DimensionHeaderEditPart<C> target = null;
-    {
-      List<EditPart> children = getHost().getChildren();
-      for (EditPart child : children) {
-        DimensionHeaderEditPart<C> columnEditPart = toHeaderPart(child);
-        Rectangle bounds = columnEditPart.getFigure().getBounds();
-        if (location.x < bounds.getCenter().x) {
-          target = columnEditPart;
-          break;
-        }
-      }
-    }
-    // prepare grid information
-    IGridInfo gridInfo = m_layout.getGridInfo();
-    Interval[] columnIntervals = gridInfo.getColumnIntervals();
-    Interval[] rowIntervals = gridInfo.getRowIntervals();
-    int y1 = rowIntervals[0].begin() - 5;
-    int y2 = rowIntervals[rowIntervals.length - 1].end() + 5;
-    // prepare index of target column and position for insert feedbacks
-    final int index;
-    int x;
-    int size;
-    if (target != null) {
-      index = target.getDimension().getIndex();
-      // prepare previous interval
-      Interval prevInterval;
-      if (index == 0) {
-        prevInterval = new Interval(0, 0);
-      } else {
-        prevInterval = columnIntervals[index - 1];
-      }
-      // prepare parameters
-      int[] parameters =
-          TableWrapLayoutEditPolicy.getInsertFeedbackParameters(
-              prevInterval,
-              columnIntervals[index],
-              AbstractGridLayoutEditPolicy.INSERT_COLUMN_SIZE);
-      x = parameters[1];
-      size = parameters[2] - parameters[1];
-    } else {
-      index = m_layout.getColumns().size();
-      m_mainPolicy.showInsertFeedbacks(null, null);
-      // prepare parameters
-      x = columnIntervals[columnIntervals.length - 1].end() + 1;
-      size = AbstractGridLayoutEditPolicy.INSERT_COLUMN_SIZE;
-    }
-    // show insert feedbacks
-    {
-      // ...on main viewer
-      m_mainPolicy.showInsertFeedbacks(new Rectangle(x, y1, size, y2 - y1), null);
-      // ...on header viewer
-      {
-        if (m_insertFeedback.getParent() == null) {
-          addFeedback(m_insertFeedback);
-        }
-        //
-        Point offset = headerEditPart.getOffset();
-        Rectangle bounds = new Rectangle(x + offset.x, 0, size, getHostFigure().getSize().height);
-        m_insertFeedback.setBounds(bounds);
-      }
-    }
-    // show text feedback
-    {
-      Layer feedbackLayer = getMainLayer(IEditPartViewer.FEEDBACK_LAYER);
-      // add feedback
-      if (m_feedback == null) {
-        m_feedback = new TextFeedback(feedbackLayer);
-        m_feedback.add();
-      }
-      // set feedback bounds
-      {
-        Point feedbackLocation = new Point(location.x + 30, 10);
-        FigureUtils.translateAbsoluteToFigure(feedbackLayer, feedbackLocation);
-        m_feedback.setLocation(feedbackLocation);
-      }
-      // set text
-      m_feedback.setText(MessageFormat.format(
-          GefMessages.ColumnsLayoutEditPolicy_feedbackText,
-          index));
-    }
-    // prepare command
-    {
-      TableWrapColumnInfo<C> column = (TableWrapColumnInfo<C>) headerEditPart.getDimension();
-      final int sourceIndex = column.getIndex();
-      if (index == sourceIndex || index == sourceIndex + 1) {
-        m_moveCommand = Command.EMPTY;
-      } else {
-        m_moveCommand = new EditCommand(m_layout) {
-          @Override
-          protected void executeEdit() throws Exception {
-            m_layout.command_MOVE_COLUMN(sourceIndex, index);
-          }
-        };
-      }
-    }
-  }
+	@Override
+	protected void showLayoutTargetFeedback(Request request) {
+		// prepare header
+		DimensionHeaderEditPart<C> headerEditPart;
+		{
+			ChangeBoundsRequest changeBoundsRequest = (ChangeBoundsRequest) request;
+			headerEditPart = toHeaderPart(changeBoundsRequest.getEditParts().get(0));
+		}
+		// prepare location
+		Point location;
+		{
+			IDropRequest dropRequest = (IDropRequest) request;
+			location = dropRequest.getLocation().getCopy();
+		}
+		// prepare target header
+		DimensionHeaderEditPart<C> target = null;
+		{
+			List<EditPart> children = getHost().getChildren();
+			for (EditPart child : children) {
+				DimensionHeaderEditPart<C> columnEditPart = toHeaderPart(child);
+				Rectangle bounds = columnEditPart.getFigure().getBounds();
+				if (location.x < bounds.getCenter().x) {
+					target = columnEditPart;
+					break;
+				}
+			}
+		}
+		// prepare grid information
+		IGridInfo gridInfo = m_layout.getGridInfo();
+		Interval[] columnIntervals = gridInfo.getColumnIntervals();
+		Interval[] rowIntervals = gridInfo.getRowIntervals();
+		int y1 = rowIntervals[0].begin() - 5;
+		int y2 = rowIntervals[rowIntervals.length - 1].end() + 5;
+		// prepare index of target column and position for insert feedbacks
+		final int index;
+		int x;
+		int size;
+		if (target != null) {
+			index = target.getDimension().getIndex();
+			// prepare previous interval
+			Interval prevInterval;
+			if (index == 0) {
+				prevInterval = new Interval(0, 0);
+			} else {
+				prevInterval = columnIntervals[index - 1];
+			}
+			// prepare parameters
+			int[] parameters =
+					TableWrapLayoutEditPolicy.getInsertFeedbackParameters(
+							prevInterval,
+							columnIntervals[index],
+							AbstractGridLayoutEditPolicy.INSERT_COLUMN_SIZE);
+			x = parameters[1];
+			size = parameters[2] - parameters[1];
+		} else {
+			index = m_layout.getColumns().size();
+			m_mainPolicy.showInsertFeedbacks(null, null);
+			// prepare parameters
+			x = columnIntervals[columnIntervals.length - 1].end() + 1;
+			size = AbstractGridLayoutEditPolicy.INSERT_COLUMN_SIZE;
+		}
+		// show insert feedbacks
+		{
+			// ...on main viewer
+			m_mainPolicy.showInsertFeedbacks(new Rectangle(x, y1, size, y2 - y1), null);
+			// ...on header viewer
+			{
+				if (m_insertFeedback.getParent() == null) {
+					addFeedback(m_insertFeedback);
+				}
+				//
+				Point offset = headerEditPart.getOffset();
+				Rectangle bounds = new Rectangle(x + offset.x, 0, size, getHostFigure().getSize().height);
+				m_insertFeedback.setBounds(bounds);
+			}
+		}
+		// show text feedback
+		{
+			Layer feedbackLayer = getMainLayer(IEditPartViewer.FEEDBACK_LAYER);
+			// add feedback
+			if (m_feedback == null) {
+				m_feedback = new TextFeedback(feedbackLayer);
+				m_feedback.add();
+			}
+			// set feedback bounds
+			{
+				Point feedbackLocation = new Point(location.x + 30, 10);
+				FigureUtils.translateAbsoluteToFigure(feedbackLayer, feedbackLocation);
+				m_feedback.setLocation(feedbackLocation);
+			}
+			// set text
+			m_feedback.setText(MessageFormat.format(
+					GefMessages.ColumnsLayoutEditPolicy_feedbackText,
+					index));
+		}
+		// prepare command
+		{
+			TableWrapColumnInfo<C> column = (TableWrapColumnInfo<C>) headerEditPart.getDimension();
+			final int sourceIndex = column.getIndex();
+			if (index == sourceIndex || index == sourceIndex + 1) {
+				m_moveCommand = Command.EMPTY;
+			} else {
+				m_moveCommand = new EditCommand(m_layout) {
+					@Override
+					protected void executeEdit() throws Exception {
+						m_layout.command_MOVE_COLUMN(sourceIndex, index);
+					}
+				};
+			}
+		}
+	}
 
-  @Override
-  protected void eraseLayoutTargetFeedback(Request request) {
-    m_mainPolicy.eraseInsertFeedbacks();
-    FigureUtils.removeFigure(m_insertFeedback);
-    if (m_feedback != null) {
-      m_feedback.remove();
-      m_feedback = null;
-    }
-  }
+	@Override
+	protected void eraseLayoutTargetFeedback(Request request) {
+		m_mainPolicy.eraseInsertFeedbacks();
+		FigureUtils.removeFigure(m_insertFeedback);
+		if (m_feedback != null) {
+			m_feedback.remove();
+			m_feedback = null;
+		}
+	}
 
-  @SuppressWarnings("unchecked")
-  private DimensionHeaderEditPart<C> toHeaderPart(EditPart child) {
-    return (DimensionHeaderEditPart<C>) child;
-  }
+	@SuppressWarnings("unchecked")
+	private DimensionHeaderEditPart<C> toHeaderPart(EditPart child) {
+		return (DimensionHeaderEditPart<C>) child;
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/forms/layout/grid/header/layout/RowsLayoutEditPolicy.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/forms/layout/grid/header/layout/RowsLayoutEditPolicy.java
index c6a49b778..33a466a49 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/forms/layout/grid/header/layout/RowsLayoutEditPolicy.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/forms/layout/grid/header/layout/RowsLayoutEditPolicy.java
@@ -49,169 +49,169 @@
  * @coverage rcp.gef.policy
  */
 public final class RowsLayoutEditPolicy<C extends IControlInfo>
-    extends
-      AbstractHeaderLayoutEditPolicy {
-  private final TableWrapLayoutEditPolicy<C> m_mainPolicy;
-  private final ITableWrapLayoutInfo<C> m_layout;
+extends
+AbstractHeaderLayoutEditPolicy {
+	private final TableWrapLayoutEditPolicy<C> m_mainPolicy;
+	private final ITableWrapLayoutInfo<C> m_layout;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public RowsLayoutEditPolicy(TableWrapLayoutEditPolicy<C> mainPolicy,
-      ITableWrapLayoutInfo<C> layout) {
-    super(mainPolicy);
-    m_mainPolicy = mainPolicy;
-    m_layout = layout;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public RowsLayoutEditPolicy(TableWrapLayoutEditPolicy<C> mainPolicy,
+			ITableWrapLayoutInfo<C> layout) {
+		super(mainPolicy);
+		m_mainPolicy = mainPolicy;
+		m_layout = layout;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Children
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void decorateChild(EditPart child) {
-    child.installEditPolicy(EditPolicy.SELECTION_ROLE, new RowSelectionEditPolicy<C>(m_mainPolicy));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Children
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void decorateChild(EditPart child) {
+		child.installEditPolicy(EditPolicy.SELECTION_ROLE, new RowSelectionEditPolicy<C>(m_mainPolicy));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Move
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final Figure m_insertFeedback = AbstractGridLayoutEditPolicy.createInsertFigure();
-  private TextFeedback m_feedback;
-  private Command m_moveCommand;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Move
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final Figure m_insertFeedback = AbstractGridLayoutEditPolicy.createInsertFigure();
+	private TextFeedback m_feedback;
+	private Command m_moveCommand;
 
-  @Override
-  protected Command getMoveCommand(ChangeBoundsRequest request) {
-    return m_moveCommand;
-  }
+	@Override
+	protected Command getMoveCommand(ChangeBoundsRequest request) {
+		return m_moveCommand;
+	}
 
-  @Override
-  protected void showLayoutTargetFeedback(Request request) {
-    // prepare header
-    DimensionHeaderEditPart<C> headerEditPart;
-    {
-      ChangeBoundsRequest changeBoundsRequest = (ChangeBoundsRequest) request;
-      headerEditPart = toHeaderPart(changeBoundsRequest.getEditParts().get(0));
-    }
-    // prepare location
-    Point location;
-    {
-      IDropRequest dropRequest = (IDropRequest) request;
-      location = dropRequest.getLocation().getCopy();
-    }
-    // prepare target header
-    DimensionHeaderEditPart<C> target = null;
-    {
-      List<EditPart> children = getHost().getChildren();
-      for (EditPart child : children) {
-        DimensionHeaderEditPart<C> rowEditPart = toHeaderPart(child);
-        Rectangle bounds = rowEditPart.getFigure().getBounds();
-        if (location.y < bounds.getCenter().y) {
-          target = rowEditPart;
-          break;
-        }
-      }
-    }
-    // prepare grid information
-    IGridInfo gridInfo = m_layout.getGridInfo();
-    Interval[] columnIntervals = gridInfo.getColumnIntervals();
-    Interval[] rowIntervals = gridInfo.getRowIntervals();
-    int x1 = columnIntervals[0].begin() - 5;
-    int x2 = columnIntervals[columnIntervals.length - 1].end() + 5;
-    // prepare index of target row and position for insert feedbacks
-    final int index;
-    int y;
-    int size;
-    if (target != null) {
-      index = target.getDimension().getIndex();
-      // prepare previous interval
-      Interval prevInterval;
-      if (index == 0) {
-        prevInterval = new Interval(0, 0);
-      } else {
-        prevInterval = rowIntervals[index - 1];
-      }
-      // prepare parameters
-      int[] parameters =
-          TableWrapLayoutEditPolicy.getInsertFeedbackParameters(
-              prevInterval,
-              rowIntervals[index],
-              AbstractGridLayoutEditPolicy.INSERT_ROW_SIZE);
-      y = parameters[1];
-      size = parameters[2] - parameters[1];
-    } else {
-      index = m_layout.getRows().size();
-      m_mainPolicy.showInsertFeedbacks(null, null);
-      // prepare parameters
-      y = rowIntervals[rowIntervals.length - 1].end() + 1;
-      size = AbstractGridLayoutEditPolicy.INSERT_ROW_SIZE;
-    }
-    // show insert feedbacks
-    {
-      // ...on main viewer
-      m_mainPolicy.showInsertFeedbacks(null, new Rectangle(x1, y, x2 - x1, size));
-      // ...on header viewer
-      {
-        if (m_insertFeedback.getParent() == null) {
-          addFeedback(m_insertFeedback);
-        }
-        //
-        Point offset = headerEditPart.getOffset();
-        Rectangle bounds = new Rectangle(0, y + offset.y, getHostFigure().getSize().width, size);
-        m_insertFeedback.setBounds(bounds);
-      }
-    }
-    // show text feedback
-    {
-      Layer feedbackLayer = getMainLayer(IEditPartViewer.FEEDBACK_LAYER);
-      // add feedback
-      if (m_feedback == null) {
-        m_feedback = new TextFeedback(feedbackLayer);
-        m_feedback.add();
-      }
-      // set feedback bounds
-      {
-        Point feedbackLocation = new Point(30, location.y + 10);
-        FigureUtils.translateAbsoluteToFigure(feedbackLayer, feedbackLocation);
-        m_feedback.setLocation(feedbackLocation);
-      }
-      // set text
-      m_feedback.setText(MessageFormat.format(GefMessages.RowsLayoutEditPolicy_feedbackText, index));
-    }
-    // prepare command
-    {
-      TableWrapRowInfo<C> row = (TableWrapRowInfo<C>) headerEditPart.getDimension();
-      final int sourceIndex = row.getIndex();
-      if (index == sourceIndex || index == sourceIndex + 1) {
-        m_moveCommand = Command.EMPTY;
-      } else {
-        m_moveCommand = new EditCommand(m_layout) {
-          @Override
-          protected void executeEdit() throws Exception {
-            m_layout.command_MOVE_ROW(sourceIndex, index);
-          }
-        };
-      }
-    }
-  }
+	@Override
+	protected void showLayoutTargetFeedback(Request request) {
+		// prepare header
+		DimensionHeaderEditPart<C> headerEditPart;
+		{
+			ChangeBoundsRequest changeBoundsRequest = (ChangeBoundsRequest) request;
+			headerEditPart = toHeaderPart(changeBoundsRequest.getEditParts().get(0));
+		}
+		// prepare location
+		Point location;
+		{
+			IDropRequest dropRequest = (IDropRequest) request;
+			location = dropRequest.getLocation().getCopy();
+		}
+		// prepare target header
+		DimensionHeaderEditPart<C> target = null;
+		{
+			List<EditPart> children = getHost().getChildren();
+			for (EditPart child : children) {
+				DimensionHeaderEditPart<C> rowEditPart = toHeaderPart(child);
+				Rectangle bounds = rowEditPart.getFigure().getBounds();
+				if (location.y < bounds.getCenter().y) {
+					target = rowEditPart;
+					break;
+				}
+			}
+		}
+		// prepare grid information
+		IGridInfo gridInfo = m_layout.getGridInfo();
+		Interval[] columnIntervals = gridInfo.getColumnIntervals();
+		Interval[] rowIntervals = gridInfo.getRowIntervals();
+		int x1 = columnIntervals[0].begin() - 5;
+		int x2 = columnIntervals[columnIntervals.length - 1].end() + 5;
+		// prepare index of target row and position for insert feedbacks
+		final int index;
+		int y;
+		int size;
+		if (target != null) {
+			index = target.getDimension().getIndex();
+			// prepare previous interval
+			Interval prevInterval;
+			if (index == 0) {
+				prevInterval = new Interval(0, 0);
+			} else {
+				prevInterval = rowIntervals[index - 1];
+			}
+			// prepare parameters
+			int[] parameters =
+					TableWrapLayoutEditPolicy.getInsertFeedbackParameters(
+							prevInterval,
+							rowIntervals[index],
+							AbstractGridLayoutEditPolicy.INSERT_ROW_SIZE);
+			y = parameters[1];
+			size = parameters[2] - parameters[1];
+		} else {
+			index = m_layout.getRows().size();
+			m_mainPolicy.showInsertFeedbacks(null, null);
+			// prepare parameters
+			y = rowIntervals[rowIntervals.length - 1].end() + 1;
+			size = AbstractGridLayoutEditPolicy.INSERT_ROW_SIZE;
+		}
+		// show insert feedbacks
+		{
+			// ...on main viewer
+			m_mainPolicy.showInsertFeedbacks(null, new Rectangle(x1, y, x2 - x1, size));
+			// ...on header viewer
+			{
+				if (m_insertFeedback.getParent() == null) {
+					addFeedback(m_insertFeedback);
+				}
+				//
+				Point offset = headerEditPart.getOffset();
+				Rectangle bounds = new Rectangle(0, y + offset.y, getHostFigure().getSize().width, size);
+				m_insertFeedback.setBounds(bounds);
+			}
+		}
+		// show text feedback
+		{
+			Layer feedbackLayer = getMainLayer(IEditPartViewer.FEEDBACK_LAYER);
+			// add feedback
+			if (m_feedback == null) {
+				m_feedback = new TextFeedback(feedbackLayer);
+				m_feedback.add();
+			}
+			// set feedback bounds
+			{
+				Point feedbackLocation = new Point(30, location.y + 10);
+				FigureUtils.translateAbsoluteToFigure(feedbackLayer, feedbackLocation);
+				m_feedback.setLocation(feedbackLocation);
+			}
+			// set text
+			m_feedback.setText(MessageFormat.format(GefMessages.RowsLayoutEditPolicy_feedbackText, index));
+		}
+		// prepare command
+		{
+			TableWrapRowInfo<C> row = (TableWrapRowInfo<C>) headerEditPart.getDimension();
+			final int sourceIndex = row.getIndex();
+			if (index == sourceIndex || index == sourceIndex + 1) {
+				m_moveCommand = Command.EMPTY;
+			} else {
+				m_moveCommand = new EditCommand(m_layout) {
+					@Override
+					protected void executeEdit() throws Exception {
+						m_layout.command_MOVE_ROW(sourceIndex, index);
+					}
+				};
+			}
+		}
+	}
 
-  @Override
-  protected void eraseLayoutTargetFeedback(Request request) {
-    m_mainPolicy.eraseInsertFeedbacks();
-    FigureUtils.removeFigure(m_insertFeedback);
-    if (m_feedback != null) {
-      m_feedback.remove();
-      m_feedback = null;
-    }
-  }
+	@Override
+	protected void eraseLayoutTargetFeedback(Request request) {
+		m_mainPolicy.eraseInsertFeedbacks();
+		FigureUtils.removeFigure(m_insertFeedback);
+		if (m_feedback != null) {
+			m_feedback.remove();
+			m_feedback = null;
+		}
+	}
 
-  @SuppressWarnings("unchecked")
-  private DimensionHeaderEditPart<C> toHeaderPart(EditPart child) {
-    return (DimensionHeaderEditPart<C>) child;
-  }
+	@SuppressWarnings("unchecked")
+	private DimensionHeaderEditPart<C> toHeaderPart(EditPart child) {
+		return (DimensionHeaderEditPart<C>) child;
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/forms/layout/grid/header/selection/ColumnSelectionEditPolicy.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/forms/layout/grid/header/selection/ColumnSelectionEditPolicy.java
index d38c5a30d..152a01646 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/forms/layout/grid/header/selection/ColumnSelectionEditPolicy.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/forms/layout/grid/header/selection/ColumnSelectionEditPolicy.java
@@ -22,14 +22,14 @@
  * @coverage rcp.gef.policy
  */
 public final class ColumnSelectionEditPolicy<C extends IControlInfo>
-    extends
-      DimensionSelectionEditPolicy<C> {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ColumnSelectionEditPolicy(LayoutEditPolicy mainPolicy) {
-    super(mainPolicy);
-  }
+extends
+DimensionSelectionEditPolicy<C> {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ColumnSelectionEditPolicy(LayoutEditPolicy mainPolicy) {
+		super(mainPolicy);
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/forms/layout/grid/header/selection/DimensionSelectionEditPolicy.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/forms/layout/grid/header/selection/DimensionSelectionEditPolicy.java
index c3afeccb6..eeca776c7 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/forms/layout/grid/header/selection/DimensionSelectionEditPolicy.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/forms/layout/grid/header/selection/DimensionSelectionEditPolicy.java
@@ -36,63 +36,63 @@
  * @coverage rcp.gef.policy
  */
 abstract class DimensionSelectionEditPolicy<C extends IControlInfo>
-    extends
-      AbstractHeaderSelectionEditPolicy {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DimensionSelectionEditPolicy(LayoutEditPolicy mainPolicy) {
-    super(mainPolicy);
-  }
+extends
+AbstractHeaderSelectionEditPolicy {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DimensionSelectionEditPolicy(LayoutEditPolicy mainPolicy) {
+		super(mainPolicy);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Handles
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected List<Handle> createSelectionHandles() {
-    List<Handle> handles = Lists.newArrayList();
-    // move handle
-    {
-      MoveHandle moveHandle = new MoveHandle(getHost(), new HeaderMoveHandleLocator());
-      moveHandle.setForeground(IColorConstants.red);
-      handles.add(moveHandle);
-    }
-    //
-    return handles;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Handles
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected List<Handle> createSelectionHandles() {
+		List<Handle> handles = Lists.newArrayList();
+		// move handle
+		{
+			MoveHandle moveHandle = new MoveHandle(getHost(), new HeaderMoveHandleLocator());
+			moveHandle.setForeground(IColorConstants.red);
+			handles.add(moveHandle);
+		}
+		//
+		return handles;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the host {@link TableWrapDimensionInfo}.
-   */
-  @SuppressWarnings("unchecked")
-  protected final TableWrapDimensionInfo<C> getDimension() {
-    return ((DimensionHeaderEditPart<C>) getHost()).getDimension();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the host {@link TableWrapDimensionInfo}.
+	 */
+	@SuppressWarnings("unchecked")
+	protected final TableWrapDimensionInfo<C> getDimension() {
+		return ((DimensionHeaderEditPart<C>) getHost()).getDimension();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Move location
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Implementation of {@link ILocator} to place handle directly on header.
-   */
-  private class HeaderMoveHandleLocator implements ILocator {
-    @Override
-    public void relocate(Figure target) {
-      Figure reference = getHostFigure();
-      Rectangle bounds = reference.getBounds().getCopy();
-      FigureUtils.translateFigureToFigure(reference, target, bounds);
-      target.setBounds(bounds);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Move location
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Implementation of {@link ILocator} to place handle directly on header.
+	 */
+	private class HeaderMoveHandleLocator implements ILocator {
+		@Override
+		public void relocate(Figure target) {
+			Figure reference = getHostFigure();
+			Rectangle bounds = reference.getBounds().getCopy();
+			FigureUtils.translateFigureToFigure(reference, target, bounds);
+			target.setBounds(bounds);
+		}
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/forms/layout/grid/header/selection/RowSelectionEditPolicy.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/forms/layout/grid/header/selection/RowSelectionEditPolicy.java
index 1b6fdf02c..8e536ec4d 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/forms/layout/grid/header/selection/RowSelectionEditPolicy.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/forms/layout/grid/header/selection/RowSelectionEditPolicy.java
@@ -22,14 +22,14 @@
  * @coverage rcp.gef.policy
  */
 public final class RowSelectionEditPolicy<C extends IControlInfo>
-    extends
-      DimensionSelectionEditPolicy<C> {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public RowSelectionEditPolicy(LayoutEditPolicy mainPolicy) {
-    super(mainPolicy);
-  }
+extends
+DimensionSelectionEditPolicy<C> {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public RowSelectionEditPolicy(LayoutEditPolicy mainPolicy) {
+		super(mainPolicy);
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/jface/ControlDecorationDropLayoutEditPolicy.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/jface/ControlDecorationDropLayoutEditPolicy.java
index ee5cacba3..8a578a483 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/jface/ControlDecorationDropLayoutEditPolicy.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/jface/ControlDecorationDropLayoutEditPolicy.java
@@ -32,89 +32,89 @@
  * @coverage rcp.gef.policy
  */
 public final class ControlDecorationDropLayoutEditPolicy extends LayoutEditPolicy {
-  private static final ILayoutRequestValidator VALIDATOR =
-      LayoutRequestValidators.modelType(ControlDecorationInfo.class);
-  private final ControlInfo m_control;
+	private static final ILayoutRequestValidator VALIDATOR =
+			LayoutRequestValidators.modelType(ControlDecorationInfo.class);
+	private final ControlInfo m_control;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ControlDecorationDropLayoutEditPolicy(ControlInfo control) {
-    m_control = control;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ControlDecorationDropLayoutEditPolicy(ControlInfo control) {
+		m_control = control;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Requests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected ILayoutRequestValidator getRequestValidator() {
-    return VALIDATOR;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Requests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected ILayoutRequestValidator getRequestValidator() {
+		return VALIDATOR;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Feedback
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void showLayoutTargetFeedback(Request request) {
-    PolicyUtils.showBorderTargetFeedback(this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Feedback
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void showLayoutTargetFeedback(Request request) {
+		PolicyUtils.showBorderTargetFeedback(this);
+	}
 
-  @Override
-  protected void eraseLayoutTargetFeedback(Request request) {
-    PolicyUtils.eraseBorderTargetFeedback(this);
-  }
+	@Override
+	protected void eraseLayoutTargetFeedback(Request request) {
+		PolicyUtils.eraseBorderTargetFeedback(this);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Command getCreateCommand(CreateRequest request) {
-    if (isValidTargetControl()) {
-      final ControlDecorationInfo decoration = (ControlDecorationInfo) request.getNewObject();
-      return new EditCommand(m_control) {
-        @Override
-        protected void executeEdit() throws Exception {
-          decoration.command_CREATE(m_control);
-        }
-      };
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Command getCreateCommand(CreateRequest request) {
+		if (isValidTargetControl()) {
+			final ControlDecorationInfo decoration = (ControlDecorationInfo) request.getNewObject();
+			return new EditCommand(m_control) {
+				@Override
+				protected void executeEdit() throws Exception {
+					decoration.command_CREATE(m_control);
+				}
+			};
+		}
+		return null;
+	}
 
-  @Override
-  protected Command getAddCommand(ChangeBoundsRequest request) {
-    List<EditPart> editParts = request.getEditParts();
-    if (isValidTargetControl() && editParts.size() == 1) {
-      final ControlDecorationInfo decoration = (ControlDecorationInfo) editParts.get(0).getModel();
-      return new EditCommand(m_control) {
-        @Override
-        protected void executeEdit() throws Exception {
-          decoration.command_ADD(m_control);
-        }
-      };
-    }
-    return null;
-  }
+	@Override
+	protected Command getAddCommand(ChangeBoundsRequest request) {
+		List<EditPart> editParts = request.getEditParts();
+		if (isValidTargetControl() && editParts.size() == 1) {
+			final ControlDecorationInfo decoration = (ControlDecorationInfo) editParts.get(0).getModel();
+			return new EditCommand(m_control) {
+				@Override
+				protected void executeEdit() throws Exception {
+					decoration.command_ADD(m_control);
+				}
+			};
+		}
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if this {@link ControlInfo} can accept {@link ControlDecorationInfo}
-   *         .
-   */
-  private boolean isValidTargetControl() {
-    return m_control.getParent() != null
-        && m_control.getChildren(ControlDecorationInfo.class).isEmpty();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if this {@link ControlInfo} can accept {@link ControlDecorationInfo}
+	 *         .
+	 */
+	private boolean isValidTargetControl() {
+		return m_control.getParent() != null
+				&& m_control.getChildren(ControlDecorationInfo.class).isEmpty();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/jface/DialogButtonBarLayoutEditPolicy.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/jface/DialogButtonBarLayoutEditPolicy.java
index 4f224934e..5dd3b55a2 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/jface/DialogButtonBarLayoutEditPolicy.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/jface/DialogButtonBarLayoutEditPolicy.java
@@ -30,85 +30,85 @@
  * @coverage rcp.gef.policy
  */
 public final class DialogButtonBarLayoutEditPolicy extends AbstractFlowLayoutEditPolicy {
-  private final CompositeInfo m_composite;
+	private final CompositeInfo m_composite;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DialogButtonBarLayoutEditPolicy(CompositeInfo composite) {
-    m_composite = composite;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DialogButtonBarLayoutEditPolicy(CompositeInfo composite) {
+		m_composite = composite;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected boolean isHorizontal(Request request) {
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected boolean isHorizontal(Request request) {
+		return true;
+	}
 
-  @Override
-  protected boolean isGoodReferenceChild(Request request, EditPart editPart) {
-    return editPart.getModel() instanceof ControlInfo;
-  }
+	@Override
+	protected boolean isGoodReferenceChild(Request request, EditPart editPart) {
+		return editPart.getModel() instanceof ControlInfo;
+	}
 
-  @Override
-  protected boolean isRequestCondition(Request request) {
-    return super.isRequestCondition(request) || request instanceof DialogButtonDropRequest;
-  }
+	@Override
+	protected boolean isRequestCondition(Request request) {
+		return super.isRequestCondition(request) || request instanceof DialogButtonDropRequest;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Validation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final ILayoutRequestValidator VALIDATOR =
-      new ILayoutRequestValidator.LayoutRequestValidatorStubFalse() {
-        @Override
-        public boolean validateMoveRequest(EditPart host, ChangeBoundsRequest request) {
-          return true;
-        }
-      };
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Validation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final ILayoutRequestValidator VALIDATOR =
+			new ILayoutRequestValidator.LayoutRequestValidatorStubFalse() {
+		@Override
+		public boolean validateMoveRequest(EditPart host, ChangeBoundsRequest request) {
+			return true;
+		}
+	};
 
-  @Override
-  protected ILayoutRequestValidator getRequestValidator() {
-    return VALIDATOR;
-  }
+	@Override
+	protected ILayoutRequestValidator getRequestValidator() {
+		return VALIDATOR;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Command getCommand(Request request, Object referenceObject) {
-    if (request instanceof DialogButtonDropRequest) {
-      final DialogButtonDropRequest buttonRequest = (DialogButtonDropRequest) request;
-      final ControlInfo reference = (ControlInfo) referenceObject;
-      return new EditCommand(m_composite) {
-        @Override
-        protected void executeEdit() throws Exception {
-          ControlInfo newButton = DialogInfo.createButtonOnButtonBar(m_composite, reference);
-          buttonRequest.setButton(newButton);
-        }
-      };
-    }
-    return super.getCommand(request, referenceObject);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Command getCommand(Request request, Object referenceObject) {
+		if (request instanceof DialogButtonDropRequest) {
+			final DialogButtonDropRequest buttonRequest = (DialogButtonDropRequest) request;
+			final ControlInfo reference = (ControlInfo) referenceObject;
+			return new EditCommand(m_composite) {
+				@Override
+				protected void executeEdit() throws Exception {
+					ControlInfo newButton = DialogInfo.createButtonOnButtonBar(m_composite, reference);
+					buttonRequest.setButton(newButton);
+				}
+			};
+		}
+		return super.getCommand(request, referenceObject);
+	}
 
-  @Override
-  protected Command getMoveCommand(Object moveObject, Object referenceObject) {
-    final ControlInfo button = (ControlInfo) moveObject;
-    final ControlInfo reference = (ControlInfo) referenceObject;
-    return new EditCommand(m_composite) {
-      @Override
-      protected void executeEdit() throws Exception {
-        DialogInfo.moveButtonOnButtonBar(button, reference);
-      }
-    };
-  }
+	@Override
+	protected Command getMoveCommand(Object moveObject, Object referenceObject) {
+		final ControlInfo button = (ControlInfo) moveObject;
+		final ControlInfo reference = (ControlInfo) referenceObject;
+		return new EditCommand(m_composite) {
+			@Override
+			protected void executeEdit() throws Exception {
+				DialogInfo.moveButtonOnButtonBar(button, reference);
+			}
+		};
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/jface/DialogButtonDropRequest.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/jface/DialogButtonDropRequest.java
index de13be32e..5aac033be 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/jface/DialogButtonDropRequest.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/jface/DialogButtonDropRequest.java
@@ -22,35 +22,35 @@
  * @coverage rcp.gef.policy
  */
 public final class DialogButtonDropRequest extends AbstractCreateRequest {
-  public static final String TYPE = "drop Dialog button";
+	public static final String TYPE = "drop Dialog button";
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DialogButtonDropRequest() {
-    super(TYPE);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DialogButtonDropRequest() {
+		super(TYPE);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Component
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private ControlInfo m_button;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Component
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private ControlInfo m_button;
 
-  /**
-   * @return the {@link ControlInfo} button to select after drop finished.
-   */
-  public ControlInfo getButton() {
-    return m_button;
-  }
+	/**
+	 * @return the {@link ControlInfo} button to select after drop finished.
+	 */
+	public ControlInfo getButton() {
+		return m_button;
+	}
 
-  /**
-   * Sets the {@link ControlInfo} button to select after drop finished.
-   */
-  public void setButton(ControlInfo button) {
-    m_button = button;
-  }
+	/**
+	 * Sets the {@link ControlInfo} button to select after drop finished.
+	 */
+	public void setButton(ControlInfo button) {
+		m_button = button;
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/jface/DialogButtonDropTool.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/jface/DialogButtonDropTool.java
index b50864f9b..94093898b 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/jface/DialogButtonDropTool.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/jface/DialogButtonDropTool.java
@@ -25,26 +25,26 @@
  * @coverage rcp.gef.policy
  */
 public final class DialogButtonDropTool extends AbstractCreationTool {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AbstractCreationTool
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Request createTargetRequest() {
-    return new DialogButtonDropRequest();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AbstractCreationTool
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Request createTargetRequest() {
+		return new DialogButtonDropRequest();
+	}
 
-  @Override
-  protected void selectAddedObjects() {
-    DialogButtonDropRequest request = (DialogButtonDropRequest) getTargetRequest();
-    ControlInfo button = request.getButton();
-    if (button != null) {
-      IEditPartViewer viewer = getViewer();
-      EditPart editPart = viewer.getEditPartByModel(button);
-      if (editPart != null) {
-        viewer.select(editPart);
-      }
-    }
-  }
+	@Override
+	protected void selectAddedObjects() {
+		DialogButtonDropRequest request = (DialogButtonDropRequest) getTargetRequest();
+		ControlInfo button = request.getButton();
+		if (button != null) {
+			IEditPartViewer viewer = getViewer();
+			EditPart editPart = viewer.getEditPartByModel(button);
+			if (editPart != null) {
+				viewer.select(editPart);
+			}
+		}
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/jface/FieldEditorDropRequestProcessor.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/jface/FieldEditorDropRequestProcessor.java
index 8917fcf84..1e0a588ba 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/jface/FieldEditorDropRequestProcessor.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/jface/FieldEditorDropRequestProcessor.java
@@ -28,60 +28,60 @@
  * @coverage rcp.gef.policy
  */
 public final class FieldEditorDropRequestProcessor extends RequestProcessor {
-  public static final RequestProcessor INSTANCE = new FieldEditorDropRequestProcessor();
+	public static final RequestProcessor INSTANCE = new FieldEditorDropRequestProcessor();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private FieldEditorDropRequestProcessor() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private FieldEditorDropRequestProcessor() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // RequestProcessor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Request process(EditPart editPart, Request request) throws Exception {
-    FieldLayoutPreferencePageInfo page = getFieldLayoutPreferencePage(editPart);
-    if (page != null && request instanceof CreateRequest) {
-      CreateRequest editorCreateRequest = (CreateRequest) request;
-      if (editorCreateRequest.getNewObject() instanceof FieldEditorInfo) {
-        final FieldEditorInfo editor = (FieldEditorInfo) editorCreateRequest.getNewObject();
-        final CompositeInfo composite = page.schedule_CREATE(editor);
-        // after CREATE select "composite"
-        editorCreateRequest.setSelectObject(composite);
-        // prepare CreateRequest, that creates our ActionInfo
-        CreateRequest createRequest = new CreateRequest(new ICreationFactory() {
-          @Override
-          public void activate() throws Exception {
-          }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// RequestProcessor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Request process(EditPart editPart, Request request) throws Exception {
+		FieldLayoutPreferencePageInfo page = getFieldLayoutPreferencePage(editPart);
+		if (page != null && request instanceof CreateRequest) {
+			CreateRequest editorCreateRequest = (CreateRequest) request;
+			if (editorCreateRequest.getNewObject() instanceof FieldEditorInfo) {
+				final FieldEditorInfo editor = (FieldEditorInfo) editorCreateRequest.getNewObject();
+				final CompositeInfo composite = page.schedule_CREATE(editor);
+				// after CREATE select "composite"
+				editorCreateRequest.setSelectObject(composite);
+				// prepare CreateRequest, that creates our ActionInfo
+				CreateRequest createRequest = new CreateRequest(new ICreationFactory() {
+					@Override
+					public void activate() throws Exception {
+					}
 
-          @Override
-          public Object getNewObject() {
-            return composite;
-          }
-        });
-        createRequest.copyStateFrom(editorCreateRequest);
-        return createRequest;
-      }
-    }
-    // no, we don't know this request
-    return request;
-  }
+					@Override
+					public Object getNewObject() {
+						return composite;
+					}
+				});
+				createRequest.copyStateFrom(editorCreateRequest);
+				return createRequest;
+			}
+		}
+		// no, we don't know this request
+		return request;
+	}
 
-  /**
-   * @return the root {@link FieldLayoutPreferencePageInfo}, or <code>null</code>.
-   */
-  private static FieldLayoutPreferencePageInfo getFieldLayoutPreferencePage(EditPart editPart) {
-    if (editPart.getModel() instanceof ObjectInfo) {
-      ObjectInfo editPartModel = (ObjectInfo) editPart.getModel();
-      if (editPartModel.getRoot() instanceof FieldLayoutPreferencePageInfo) {
-        return (FieldLayoutPreferencePageInfo) editPartModel.getRoot();
-      }
-    }
-    return null;
-  }
+	/**
+	 * @return the root {@link FieldLayoutPreferencePageInfo}, or <code>null</code>.
+	 */
+	private static FieldLayoutPreferencePageInfo getFieldLayoutPreferencePage(EditPart editPart) {
+		if (editPart.getModel() instanceof ObjectInfo) {
+			ObjectInfo editPartModel = (ObjectInfo) editPart.getModel();
+			if (editPartModel.getRoot() instanceof FieldLayoutPreferencePageInfo) {
+				return (FieldLayoutPreferencePageInfo) editPartModel.getRoot();
+			}
+		}
+		return null;
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/jface/action/ActionDropRequest.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/jface/action/ActionDropRequest.java
index 8e9e70928..f20bfda3a 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/jface/action/ActionDropRequest.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/jface/action/ActionDropRequest.java
@@ -22,49 +22,49 @@
  * @coverage rcp.gef.policy
  */
 public final class ActionDropRequest extends AbstractCreateRequest {
-  public static final String TYPE = "drop JFace Action";
-  private final ActionInfo m_action;
+	public static final String TYPE = "drop JFace Action";
+	private final ActionInfo m_action;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ActionDropRequest(ActionInfo action) {
-    super(TYPE);
-    m_action = action;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ActionDropRequest(ActionInfo action) {
+		super(TYPE);
+		m_action = action;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link ActionInfo} to drop.
-   */
-  public ActionInfo getAction() {
-    return m_action;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link ActionInfo} to drop.
+	 */
+	public ActionInfo getAction() {
+		return m_action;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Item
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private ActionContributionItemInfo m_item;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Item
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private ActionContributionItemInfo m_item;
 
-  /**
-   * @return the {@link ActionContributionItemInfo} to select after drop finished.
-   */
-  public ActionContributionItemInfo getItem() {
-    return m_item;
-  }
+	/**
+	 * @return the {@link ActionContributionItemInfo} to select after drop finished.
+	 */
+	public ActionContributionItemInfo getItem() {
+		return m_item;
+	}
 
-  /**
-   * Sets the {@link ActionContributionItemInfo} to select after drop finished.
-   */
-  public void setItem(ActionContributionItemInfo item) {
-    m_item = item;
-  }
+	/**
+	 * Sets the {@link ActionContributionItemInfo} to select after drop finished.
+	 */
+	public void setItem(ActionContributionItemInfo item) {
+		m_item = item;
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/jface/action/ActionDropRequestProcessor.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/jface/action/ActionDropRequestProcessor.java
index b681d15fd..6223a1282 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/jface/action/ActionDropRequestProcessor.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/jface/action/ActionDropRequestProcessor.java
@@ -30,71 +30,71 @@
  * @coverage rcp.gef.policy
  */
 public final class ActionDropRequestProcessor extends RequestProcessor {
-  public static final RequestProcessor INSTANCE = new ActionDropRequestProcessor();
+	public static final RequestProcessor INSTANCE = new ActionDropRequestProcessor();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private ActionDropRequestProcessor() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private ActionDropRequestProcessor() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // RequestProcessor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final String KEY_SELECTION_RUNNABLE = "delayed selection runnable";
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// RequestProcessor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final String KEY_SELECTION_RUNNABLE = "delayed selection runnable";
 
-  @Override
-  public Request process(final EditPart editPart, Request request) throws Exception {
-    if (request instanceof ActionDropRequest) {
-      final ActionDropRequest actionDropRequest = (ActionDropRequest) request;
-      final ActionInfo action = actionDropRequest.getAction();
-      scheduleActionItemSelection(actionDropRequest);
-      // prepare CreateRequest, that creates our ActionInfo
-      CreateRequest createRequest = new CreateRequest(new ICreationFactory() {
-        @Override
-        public void activate() throws Exception {
-        }
+	@Override
+	public Request process(final EditPart editPart, Request request) throws Exception {
+		if (request instanceof ActionDropRequest) {
+			final ActionDropRequest actionDropRequest = (ActionDropRequest) request;
+			final ActionInfo action = actionDropRequest.getAction();
+			scheduleActionItemSelection(actionDropRequest);
+			// prepare CreateRequest, that creates our ActionInfo
+			CreateRequest createRequest = new CreateRequest(new ICreationFactory() {
+				@Override
+				public void activate() throws Exception {
+				}
 
-        @Override
-        public Object getNewObject() {
-          return action;
-        }
-      });
-      // OK, we have CreateRequest
-      createRequest.copyStateFrom(actionDropRequest);
-      return createRequest;
-    }
-    // no, we don't know this request
-    return request;
-  }
+				@Override
+				public Object getNewObject() {
+					return action;
+				}
+			});
+			// OK, we have CreateRequest
+			createRequest.copyStateFrom(actionDropRequest);
+			return createRequest;
+		}
+		// no, we don't know this request
+		return request;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Schedules selection for {@link ContributionItemInfo}, corresponding to the added
-   * {@link ActionInfo}.
-   */
-  private static void scheduleActionItemSelection(final ActionDropRequest actionDropRequest) {
-    final ActionInfo action = actionDropRequest.getAction();
-    if (action.getArbitraryValue(KEY_SELECTION_RUNNABLE) == null) {
-      action.putArbitraryValue(KEY_SELECTION_RUNNABLE, Boolean.TRUE);
-      action.addBroadcastListener(new JavaEventListener() {
-        @Override
-        public void addAfter(JavaInfo parent, JavaInfo child) throws Exception {
-          action.removeArbitraryValue(KEY_SELECTION_RUNNABLE);
-          action.removeBroadcastListener(this);
-          if (child instanceof ActionContributionItemInfo) {
-            actionDropRequest.setItem((ActionContributionItemInfo) child);
-          }
-        }
-      });
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Schedules selection for {@link ContributionItemInfo}, corresponding to the added
+	 * {@link ActionInfo}.
+	 */
+	private static void scheduleActionItemSelection(final ActionDropRequest actionDropRequest) {
+		final ActionInfo action = actionDropRequest.getAction();
+		if (action.getArbitraryValue(KEY_SELECTION_RUNNABLE) == null) {
+			action.putArbitraryValue(KEY_SELECTION_RUNNABLE, Boolean.TRUE);
+			action.addBroadcastListener(new JavaEventListener() {
+				@Override
+				public void addAfter(JavaInfo parent, JavaInfo child) throws Exception {
+					action.removeArbitraryValue(KEY_SELECTION_RUNNABLE);
+					action.removeBroadcastListener(this);
+					if (child instanceof ActionContributionItemInfo) {
+						actionDropRequest.setItem((ActionContributionItemInfo) child);
+					}
+				}
+			});
+		}
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/jface/action/ActionDropTool.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/jface/action/ActionDropTool.java
index 9bedfc690..b7c31535d 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/jface/action/ActionDropTool.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/jface/action/ActionDropTool.java
@@ -25,37 +25,37 @@
  * @coverage rcp.gef.policy
  */
 public final class ActionDropTool extends AbstractCreationTool {
-  private final ActionInfo m_action;
+	private final ActionInfo m_action;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ActionDropTool(ActionInfo action) {
-    m_action = action;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ActionDropTool(ActionInfo action) {
+		m_action = action;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AbstractCreationTool
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Request createTargetRequest() {
-    return new ActionDropRequest(m_action);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AbstractCreationTool
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Request createTargetRequest() {
+		return new ActionDropRequest(m_action);
+	}
 
-  @Override
-  protected void selectAddedObjects() {
-    ActionDropRequest request = (ActionDropRequest) getTargetRequest();
-    ActionContributionItemInfo item = request.getItem();
-    if (item != null) {
-      IEditPartViewer viewer = getViewer();
-      EditPart editPart = viewer.getEditPartByModel(item);
-      if (editPart != null) {
-        viewer.select(editPart);
-      }
-    }
-  }
+	@Override
+	protected void selectAddedObjects() {
+		ActionDropRequest request = (ActionDropRequest) getTargetRequest();
+		ActionContributionItemInfo item = request.getItem();
+		if (item != null) {
+			IEditPartViewer viewer = getViewer();
+			EditPart editPart = viewer.getEditPartByModel(item);
+			if (editPart != null) {
+				viewer.select(editPart);
+			}
+		}
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/jface/action/ToolBarManagerLayoutEditPolicy.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/jface/action/ToolBarManagerLayoutEditPolicy.java
index 9f4b5af7e..a82470a5b 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/jface/action/ToolBarManagerLayoutEditPolicy.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/jface/action/ToolBarManagerLayoutEditPolicy.java
@@ -29,84 +29,84 @@
  * @coverage rcp.gef.policy
  */
 public final class ToolBarManagerLayoutEditPolicy
-    extends
-      ObjectFlowLayoutEditPolicy<ContributionItemInfo> {
-  private final ToolBarManagerInfo m_manager;
+extends
+ObjectFlowLayoutEditPolicy<ContributionItemInfo> {
+	private final ToolBarManagerInfo m_manager;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ToolBarManagerLayoutEditPolicy(ToolBarManagerInfo composite) {
-    super(composite);
-    m_manager = composite;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ToolBarManagerLayoutEditPolicy(ToolBarManagerInfo composite) {
+		super(composite);
+		m_manager = composite;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected boolean isHorizontal(Request request) {
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected boolean isHorizontal(Request request) {
+		return true;
+	}
 
-  @Override
-  protected boolean isGoodReferenceChild(Request request, EditPart editPart) {
-    return editPart.getModel() instanceof ContributionItemInfo;
-  }
+	@Override
+	protected boolean isGoodReferenceChild(Request request, EditPart editPart) {
+		return editPart.getModel() instanceof ContributionItemInfo;
+	}
 
-  @Override
-  protected boolean isRequestCondition(Request request) {
-    return super.isRequestCondition(request) || request instanceof ActionDropRequest;
-  }
+	@Override
+	protected boolean isRequestCondition(Request request) {
+		return super.isRequestCondition(request) || request instanceof ActionDropRequest;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Validation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final ILayoutRequestValidator VALIDATOR =
-      LayoutRequestValidators.modelType(ContributionItemInfo.class);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Validation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final ILayoutRequestValidator VALIDATOR =
+			LayoutRequestValidators.modelType(ContributionItemInfo.class);
 
-  @Override
-  protected ILayoutRequestValidator getRequestValidator() {
-    return VALIDATOR;
-  }
+	@Override
+	protected ILayoutRequestValidator getRequestValidator() {
+		return VALIDATOR;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Command getCommand(Request request, Object referenceObject) {
-    if (request instanceof ActionDropRequest) {
-      final ActionDropRequest actionRequest = (ActionDropRequest) request;
-      final ContributionItemInfo reference = (ContributionItemInfo) referenceObject;
-      return new EditCommand(m_manager) {
-        @Override
-        protected void executeEdit() throws Exception {
-          ActionContributionItemInfo newItem =
-              m_manager.command_CREATE(actionRequest.getAction(), reference);
-          actionRequest.setItem(newItem);
-        }
-      };
-    }
-    return super.getCommand(request, referenceObject);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Command getCommand(Request request, Object referenceObject) {
+		if (request instanceof ActionDropRequest) {
+			final ActionDropRequest actionRequest = (ActionDropRequest) request;
+			final ContributionItemInfo reference = (ContributionItemInfo) referenceObject;
+			return new EditCommand(m_manager) {
+				@Override
+				protected void executeEdit() throws Exception {
+					ActionContributionItemInfo newItem =
+							m_manager.command_CREATE(actionRequest.getAction(), reference);
+					actionRequest.setItem(newItem);
+				}
+			};
+		}
+		return super.getCommand(request, referenceObject);
+	}
 
-  @Override
-  protected void command_CREATE(ContributionItemInfo newObject, ContributionItemInfo referenceObject)
-      throws Exception {
-    m_manager.command_CREATE(newObject, referenceObject);
-  }
+	@Override
+	protected void command_CREATE(ContributionItemInfo newObject, ContributionItemInfo referenceObject)
+			throws Exception {
+		m_manager.command_CREATE(newObject, referenceObject);
+	}
 
-  @Override
-  protected void command_MOVE(ContributionItemInfo object, ContributionItemInfo referenceObject)
-      throws Exception {
-    m_manager.command_MOVE(object, referenceObject);
-  }
+	@Override
+	protected void command_MOVE(ContributionItemInfo object, ContributionItemInfo referenceObject)
+			throws Exception {
+		m_manager.command_MOVE(object, referenceObject);
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/layout/StackLayoutNavigationFigure.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/layout/StackLayoutNavigationFigure.java
index fc5c1c371..910bf3c95 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/layout/StackLayoutNavigationFigure.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/layout/StackLayoutNavigationFigure.java
@@ -27,51 +27,51 @@
  * @coverage rcp.gef.policy
  */
 public final class StackLayoutNavigationFigure extends Figure {
-  public static final int WIDTH = 10;
-  public static final int HEIGHT = 14;
-  private static Image m_prevImage = new Image(null,
-      StackLayoutNavigationFigure.class.getResourceAsStream("prev.png"));
-  private static Image m_nextImage = new Image(null,
-      StackLayoutNavigationFigure.class.getResourceAsStream("next.png"));
-  private final StackLayoutSelectionEditPolicy<?> m_policy;
+	public static final int WIDTH = 10;
+	public static final int HEIGHT = 14;
+	private static Image m_prevImage = new Image(null,
+			StackLayoutNavigationFigure.class.getResourceAsStream("prev.png"));
+	private static Image m_nextImage = new Image(null,
+			StackLayoutNavigationFigure.class.getResourceAsStream("next.png"));
+	private final StackLayoutSelectionEditPolicy<?> m_policy;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public StackLayoutNavigationFigure(StackLayoutSelectionEditPolicy<?> policy) {
-    m_policy = policy;
-    addMouseListener(new IMouseListener() {
-      @Override
-      public void mouseUp(MouseEvent event) {
-      }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public StackLayoutNavigationFigure(StackLayoutSelectionEditPolicy<?> policy) {
+		m_policy = policy;
+		addMouseListener(new IMouseListener() {
+			@Override
+			public void mouseUp(MouseEvent event) {
+			}
 
-      @Override
-      public void mouseDown(MouseEvent event) {
-        event.consume();
-        if (event.x < WIDTH) {
-          m_policy.showPrevComponent();
-        } else {
-          m_policy.showNextComponent();
-        }
-      }
+			@Override
+			public void mouseDown(MouseEvent event) {
+				event.consume();
+				if (event.x < WIDTH) {
+					m_policy.showPrevComponent();
+				} else {
+					m_policy.showNextComponent();
+				}
+			}
 
-      @Override
-      public void mouseDoubleClick(MouseEvent event) {
-      }
-    });
-  }
+			@Override
+			public void mouseDoubleClick(MouseEvent event) {
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Figure
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void paintClientArea(Graphics graphics) {
-    Rectangle r = getClientArea();
-    graphics.drawImage(m_prevImage, r.x, r.y);
-    graphics.drawImage(m_nextImage, r.x + WIDTH, r.y);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Figure
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void paintClientArea(Graphics graphics) {
+		Rectangle r = getClientArea();
+		graphics.drawImage(m_prevImage, r.x, r.y);
+		graphics.drawImage(m_nextImage, r.x + WIDTH, r.y);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/layout/StackLayoutSelectionEditPolicy.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/layout/StackLayoutSelectionEditPolicy.java
index 12df61510..6300b14a1 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/layout/StackLayoutSelectionEditPolicy.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/layout/StackLayoutSelectionEditPolicy.java
@@ -37,107 +37,107 @@
  * @coverage rcp.gef.policy
  */
 public final class StackLayoutSelectionEditPolicy<C extends IControlInfo>
-    extends
-      SelectionEditPolicy {
-  private final IStackLayoutInfo<C> m_layout;
-  private StackLayoutNavigationFigure m_navigationFigure;
+extends
+SelectionEditPolicy {
+	private final IStackLayoutInfo<C> m_layout;
+	private StackLayoutNavigationFigure m_navigationFigure;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public StackLayoutSelectionEditPolicy(IStackLayoutInfo<C> layout) {
-    m_layout = layout;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public StackLayoutSelectionEditPolicy(IStackLayoutInfo<C> layout) {
+		m_layout = layout;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Handles
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected List<Handle> createSelectionHandles() {
-    List<Handle> handles = Lists.newArrayList();
-    handles.add(new MoveHandle(getHost()));
-    handles.add(createHandle(IPositionConstants.SOUTH_EAST));
-    handles.add(createHandle(IPositionConstants.SOUTH_WEST));
-    handles.add(createHandle(IPositionConstants.NORTH_WEST));
-    handles.add(createHandle(IPositionConstants.NORTH_EAST));
-    return handles;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Handles
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected List<Handle> createSelectionHandles() {
+		List<Handle> handles = Lists.newArrayList();
+		handles.add(new MoveHandle(getHost()));
+		handles.add(createHandle(IPositionConstants.SOUTH_EAST));
+		handles.add(createHandle(IPositionConstants.SOUTH_WEST));
+		handles.add(createHandle(IPositionConstants.NORTH_WEST));
+		handles.add(createHandle(IPositionConstants.NORTH_EAST));
+		return handles;
+	}
 
-  /**
-   * @return the {@link ResizeHandle} for given direction.
-   */
-  private Handle createHandle(int direction) {
-    ResizeHandle handle = new ResizeHandle(getHost(), direction);
-    ResizeTracker tracker = new ResizeTracker(direction, null);
-    tracker.setDefaultCursor(ICursorConstants.SIZEALL);
-    handle.setDragTrackerTool(tracker);
-    handle.setCursor(ICursorConstants.SIZEALL);
-    return handle;
-  }
+	/**
+	 * @return the {@link ResizeHandle} for given direction.
+	 */
+	private Handle createHandle(int direction) {
+		ResizeHandle handle = new ResizeHandle(getHost(), direction);
+		ResizeTracker tracker = new ResizeTracker(direction, null);
+		tracker.setDefaultCursor(ICursorConstants.SIZEALL);
+		handle.setDragTrackerTool(tracker);
+		handle.setCursor(ICursorConstants.SIZEALL);
+		return handle;
+	}
 
-  @Override
-  protected void showSelection() {
-    super.showSelection();
-    // add navigate feedback
-    if (m_navigationFigure == null) {
-      m_navigationFigure = new StackLayoutNavigationFigure(this);
-      Figure hostFigure = getHostFigure();
-      Rectangle bounds = hostFigure.getBounds().getCopy();
-      FigureUtils.translateFigureToAbsolute(hostFigure, bounds);
-      {
-        int x = bounds.right() - StackLayoutNavigationFigure.WIDTH * 2 - 3;
-        int y = bounds.y - StackLayoutNavigationFigure.HEIGHT / 2;
-        m_navigationFigure.setBounds(new Rectangle(x,
-            y,
-            StackLayoutNavigationFigure.WIDTH * 2,
-            StackLayoutNavigationFigure.HEIGHT));
-      }
-      addFeedback(m_navigationFigure);
-    }
-  }
+	@Override
+	protected void showSelection() {
+		super.showSelection();
+		// add navigate feedback
+		if (m_navigationFigure == null) {
+			m_navigationFigure = new StackLayoutNavigationFigure(this);
+			Figure hostFigure = getHostFigure();
+			Rectangle bounds = hostFigure.getBounds().getCopy();
+			FigureUtils.translateFigureToAbsolute(hostFigure, bounds);
+			{
+				int x = bounds.right() - StackLayoutNavigationFigure.WIDTH * 2 - 3;
+				int y = bounds.y - StackLayoutNavigationFigure.HEIGHT / 2;
+				m_navigationFigure.setBounds(new Rectangle(x,
+						y,
+						StackLayoutNavigationFigure.WIDTH * 2,
+						StackLayoutNavigationFigure.HEIGHT));
+			}
+			addFeedback(m_navigationFigure);
+		}
+	}
 
-  @Override
-  protected void hideSelection() {
-    super.hideSelection();
-    // remove navigate feedback
-    if (m_navigationFigure != null) {
-      removeFeedback(m_navigationFigure);
-      m_navigationFigure = null;
-    }
-  }
+	@Override
+	protected void hideSelection() {
+		super.hideSelection();
+		// remove navigate feedback
+		if (m_navigationFigure != null) {
+			removeFeedback(m_navigationFigure);
+			m_navigationFigure = null;
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Selection
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets show previous component relative of current.
-   */
-  void showPrevComponent() {
-    IEditPartViewer viewer = getHost().getViewer();
-    // show previous component
-    C component = m_layout.getPrevControl();
-    m_layout.show(component);
-    // select EditPart
-    EditPart editPart = viewer.getEditPartByModel(component);
-    viewer.select(editPart);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Selection
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets show previous component relative of current.
+	 */
+	void showPrevComponent() {
+		IEditPartViewer viewer = getHost().getViewer();
+		// show previous component
+		C component = m_layout.getPrevControl();
+		m_layout.show(component);
+		// select EditPart
+		EditPart editPart = viewer.getEditPartByModel(component);
+		viewer.select(editPart);
+	}
 
-  /**
-   * Sets show next component relative of current.
-   */
-  void showNextComponent() {
-    IEditPartViewer viewer = getHost().getViewer();
-    // show next component
-    C component = m_layout.getNextControl();
-    m_layout.show(component);
-    // select EditPart
-    EditPart editPart = viewer.getEditPartByModel(component);
-    viewer.select(editPart);
-  }
+	/**
+	 * Sets show next component relative of current.
+	 */
+	void showNextComponent() {
+		IEditPartViewer viewer = getHost().getViewer();
+		// show next component
+		C component = m_layout.getNextControl();
+		m_layout.show(component);
+		// select EditPart
+		EditPart editPart = viewer.getEditPartByModel(component);
+		viewer.select(editPart);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/rcp/perspective/AbstractPartSelectionEditPolicy.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/rcp/perspective/AbstractPartSelectionEditPolicy.java
index 98a285d96..e43b216d1 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/rcp/perspective/AbstractPartSelectionEditPolicy.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/rcp/perspective/AbstractPartSelectionEditPolicy.java
@@ -43,142 +43,142 @@
  * @coverage rcp.gef.policy
  */
 public final class AbstractPartSelectionEditPolicy extends SelectionEditPolicy {
-  private static final String REQ_RESIZE = "resize";
-  private final AbstractPartInfo m_part;
-  private final SashLineInfo m_line;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractPartSelectionEditPolicy(AbstractPartInfo part) {
-    m_part = part;
-    m_line = part.getSashLine();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Handles
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected List<Handle> createSelectionHandles() {
-    List<Handle> handles = Lists.newArrayList();
-    // create move column handle
-    MoveHandle moveHandle = new MoveHandle(getHost());
-    moveHandle.setForeground(IColorConstants.red);
-    handles.add(moveHandle);
-    //
-    return handles;
-  }
-
-  @Override
-  protected List<Handle> createStaticHandles() {
-    if (m_line == null) {
-      return ImmutableList.of();
-    }
-    // prepare handle
-    Handle resizeHandle = new Handle(getHost(), new ILocator() {
-      @Override
-      public void relocate(Figure target) {
-        // prepare bounds (relative to page)
-        Rectangle bounds = m_line.getBounds().getCopy();
-        if (m_line.isHorizontal()) {
-          bounds.expand(6, 0);
-        } else {
-          bounds.expand(0, 6);
-        }
-        // set bounds relative to layer
-        Figure pageFigure = getHostFigure().getParent();
-        FigureUtils.translateFigureToAbsolute2(pageFigure, bounds);
-        target.setBounds(bounds);
-      }
-    }) {
-    };
-    // set cursor
-    if (m_line.isHorizontal()) {
-      resizeHandle.setCursor(ICursorConstants.SIZEE);
-    } else {
-      resizeHandle.setCursor(ICursorConstants.SIZEN);
-    }
-    // single static handle
-    resizeHandle.setDragTrackerTool(new ResizeTracker(getHost(), m_line.getPosition(), REQ_RESIZE));
-    return ImmutableList.of(resizeHandle);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Routing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean understandsRequest(Request request) {
-    return super.understandsRequest(request) || request.getType() == REQ_RESIZE;
-  }
-
-  @Override
-  public Command getCommand(final Request request) {
-    return getResizeCommand((ChangeBoundsRequest) request);
-  }
-
-  @Override
-  public void showSourceFeedback(Request request) {
-    showResizeFeedback((ChangeBoundsRequest) request);
-  }
-
-  @Override
-  public void eraseSourceFeedback(Request request) {
-    eraseResizeFeedback((ChangeBoundsRequest) request);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Resize
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Figure m_resizeFeedback;
-
-  private Command getResizeCommand(final ChangeBoundsRequest request) {
-    return new EditCommand(m_part) {
-      @Override
-      protected void executeEdit() throws Exception {
-        int delta;
-        if (m_line.isHorizontal()) {
-          delta = request.getSizeDelta().width;
-        } else {
-          delta = request.getSizeDelta().height;
-        }
-        // do resize
-        m_part.resize(delta);
-      }
-    };
-  }
-
-  private void showResizeFeedback(ChangeBoundsRequest request) {
-    if (m_resizeFeedback == null) {
-      // create selection feedback
-      {
-        m_resizeFeedback = new RectangleFigure();
-        m_resizeFeedback.setForeground(IColorConstants.red);
-        addFeedback(m_resizeFeedback);
-      }
-    }
-    // prepare bounds XXX
-    Rectangle bounds;
-    {
-      Figure hostFigure = getHostFigure();
-      bounds = m_line.getPartBounds().getCopy();
-      bounds = request.getTransformedRectangle(bounds);
-      FigureUtils.translateFigureToAbsolute(hostFigure, bounds.shrink(-1, -1));
-    }
-    // update selection feedback
-    m_resizeFeedback.setBounds(bounds);
-  }
-
-  private void eraseResizeFeedback(ChangeBoundsRequest request) {
-    // erase selection feedback
-    removeFeedback(m_resizeFeedback);
-    m_resizeFeedback = null;
-  }
+	private static final String REQ_RESIZE = "resize";
+	private final AbstractPartInfo m_part;
+	private final SashLineInfo m_line;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractPartSelectionEditPolicy(AbstractPartInfo part) {
+		m_part = part;
+		m_line = part.getSashLine();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Handles
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected List<Handle> createSelectionHandles() {
+		List<Handle> handles = Lists.newArrayList();
+		// create move column handle
+		MoveHandle moveHandle = new MoveHandle(getHost());
+		moveHandle.setForeground(IColorConstants.red);
+		handles.add(moveHandle);
+		//
+		return handles;
+	}
+
+	@Override
+	protected List<Handle> createStaticHandles() {
+		if (m_line == null) {
+			return ImmutableList.of();
+		}
+		// prepare handle
+		Handle resizeHandle = new Handle(getHost(), new ILocator() {
+			@Override
+			public void relocate(Figure target) {
+				// prepare bounds (relative to page)
+				Rectangle bounds = m_line.getBounds().getCopy();
+				if (m_line.isHorizontal()) {
+					bounds.expand(6, 0);
+				} else {
+					bounds.expand(0, 6);
+				}
+				// set bounds relative to layer
+				Figure pageFigure = getHostFigure().getParent();
+				FigureUtils.translateFigureToAbsolute2(pageFigure, bounds);
+				target.setBounds(bounds);
+			}
+		}) {
+		};
+		// set cursor
+		if (m_line.isHorizontal()) {
+			resizeHandle.setCursor(ICursorConstants.SIZEE);
+		} else {
+			resizeHandle.setCursor(ICursorConstants.SIZEN);
+		}
+		// single static handle
+		resizeHandle.setDragTrackerTool(new ResizeTracker(getHost(), m_line.getPosition(), REQ_RESIZE));
+		return ImmutableList.of(resizeHandle);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Routing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean understandsRequest(Request request) {
+		return super.understandsRequest(request) || request.getType() == REQ_RESIZE;
+	}
+
+	@Override
+	public Command getCommand(final Request request) {
+		return getResizeCommand((ChangeBoundsRequest) request);
+	}
+
+	@Override
+	public void showSourceFeedback(Request request) {
+		showResizeFeedback((ChangeBoundsRequest) request);
+	}
+
+	@Override
+	public void eraseSourceFeedback(Request request) {
+		eraseResizeFeedback((ChangeBoundsRequest) request);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Resize
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Figure m_resizeFeedback;
+
+	private Command getResizeCommand(final ChangeBoundsRequest request) {
+		return new EditCommand(m_part) {
+			@Override
+			protected void executeEdit() throws Exception {
+				int delta;
+				if (m_line.isHorizontal()) {
+					delta = request.getSizeDelta().width;
+				} else {
+					delta = request.getSizeDelta().height;
+				}
+				// do resize
+				m_part.resize(delta);
+			}
+		};
+	}
+
+	private void showResizeFeedback(ChangeBoundsRequest request) {
+		if (m_resizeFeedback == null) {
+			// create selection feedback
+			{
+				m_resizeFeedback = new RectangleFigure();
+				m_resizeFeedback.setForeground(IColorConstants.red);
+				addFeedback(m_resizeFeedback);
+			}
+		}
+		// prepare bounds XXX
+		Rectangle bounds;
+		{
+			Figure hostFigure = getHostFigure();
+			bounds = m_line.getPartBounds().getCopy();
+			bounds = request.getTransformedRectangle(bounds);
+			FigureUtils.translateFigureToAbsolute(hostFigure, bounds.shrink(-1, -1));
+		}
+		// update selection feedback
+		m_resizeFeedback.setBounds(bounds);
+	}
+
+	private void eraseResizeFeedback(ChangeBoundsRequest request) {
+		// erase selection feedback
+		removeFeedback(m_resizeFeedback);
+		m_resizeFeedback = null;
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/rcp/perspective/PageLayoutCreateFolderLayoutEditPolicy.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/rcp/perspective/PageLayoutCreateFolderLayoutEditPolicy.java
index 7dafaa896..3a715a81b 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/rcp/perspective/PageLayoutCreateFolderLayoutEditPolicy.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/rcp/perspective/PageLayoutCreateFolderLayoutEditPolicy.java
@@ -34,124 +34,124 @@
  * @coverage rcp.gef.policy
  */
 public final class PageLayoutCreateFolderLayoutEditPolicy extends AbstractFlowLayoutEditPolicy {
-  private static final ILayoutRequestValidator VALIDATOR = LayoutRequestValidators.or(
-      LayoutRequestValidators.modelType(FolderViewInfo.class),
-      LayoutRequestValidators.modelType(PageLayoutAddViewInfo.class),
-      LayoutRequestValidators.modelType(FastViewInfo.class),
-      LayoutRequestValidators.modelType(ViewShortcutInfo.class));
-  private final PageLayoutCreateFolderInfo m_folder;
+	private static final ILayoutRequestValidator VALIDATOR = LayoutRequestValidators.or(
+			LayoutRequestValidators.modelType(FolderViewInfo.class),
+			LayoutRequestValidators.modelType(PageLayoutAddViewInfo.class),
+			LayoutRequestValidators.modelType(FastViewInfo.class),
+			LayoutRequestValidators.modelType(ViewShortcutInfo.class));
+	private final PageLayoutCreateFolderInfo m_folder;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public PageLayoutCreateFolderLayoutEditPolicy(PageLayoutCreateFolderInfo container) {
-    m_folder = container;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public PageLayoutCreateFolderLayoutEditPolicy(PageLayoutCreateFolderInfo container) {
+		m_folder = container;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Requests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected boolean isGoodReferenceChild(Request request, EditPart editPart) {
-    return editPart.getModel() instanceof FolderViewInfo;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Requests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected boolean isGoodReferenceChild(Request request, EditPart editPart) {
+		return editPart.getModel() instanceof FolderViewInfo;
+	}
 
-  @Override
-  protected boolean isRequestCondition(Request request) {
-    return super.isRequestCondition(request) || request instanceof ViewDropRequest;
-  }
+	@Override
+	protected boolean isRequestCondition(Request request) {
+		return super.isRequestCondition(request) || request instanceof ViewDropRequest;
+	}
 
-  @Override
-  protected ILayoutRequestValidator getRequestValidator() {
-    return VALIDATOR;
-  }
+	@Override
+	protected ILayoutRequestValidator getRequestValidator() {
+		return VALIDATOR;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AbstractFlowLayoutEditPolicy
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected boolean isHorizontal(Request request) {
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AbstractFlowLayoutEditPolicy
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected boolean isHorizontal(Request request) {
+		return true;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Command getCommand(Request request, Object referenceObject) {
-    if (request instanceof ViewDropRequest) {
-      final ViewDropRequest viewDrop_Request = (ViewDropRequest) request;
-      final ViewInfo viewInfo = viewDrop_Request.getView();
-      final FolderViewInfo reference = (FolderViewInfo) referenceObject;
-      return new EditCommand(m_folder) {
-        @Override
-        protected void executeEdit() throws Exception {
-          FolderViewInfo newView = m_folder.command_CREATE(viewInfo.getId(), reference);
-          viewDrop_Request.setComponent(newView);
-        }
-      };
-    }
-    return super.getCommand(request, referenceObject);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Command getCommand(Request request, Object referenceObject) {
+		if (request instanceof ViewDropRequest) {
+			final ViewDropRequest viewDrop_Request = (ViewDropRequest) request;
+			final ViewInfo viewInfo = viewDrop_Request.getView();
+			final FolderViewInfo reference = (FolderViewInfo) referenceObject;
+			return new EditCommand(m_folder) {
+				@Override
+				protected void executeEdit() throws Exception {
+					FolderViewInfo newView = m_folder.command_CREATE(viewInfo.getId(), reference);
+					viewDrop_Request.setComponent(newView);
+				}
+			};
+		}
+		return super.getCommand(request, referenceObject);
+	}
 
-  @Override
-  protected Command getMoveCommand(Object moveObject, Object referenceObject) {
-    final FolderViewInfo item = (FolderViewInfo) moveObject;
-    final FolderViewInfo nextItem = (FolderViewInfo) referenceObject;
-    return new EditCommand(m_folder) {
-      @Override
-      protected void executeEdit() throws Exception {
-        m_folder.command_MOVE(item, nextItem);
-      }
-    };
-  }
+	@Override
+	protected Command getMoveCommand(Object moveObject, Object referenceObject) {
+		final FolderViewInfo item = (FolderViewInfo) moveObject;
+		final FolderViewInfo nextItem = (FolderViewInfo) referenceObject;
+		return new EditCommand(m_folder) {
+			@Override
+			protected void executeEdit() throws Exception {
+				m_folder.command_MOVE(item, nextItem);
+			}
+		};
+	}
 
-  @Override
-  protected Command getAddCommand(Object addObject, Object referenceObject) {
-    if (addObject instanceof PageLayoutAddViewInfo) {
-      PageLayoutAddViewInfo oldView = (PageLayoutAddViewInfo) addObject;
-      return getAddCommand(oldView, oldView.getId(), referenceObject);
-    }
-    if (addObject instanceof FolderViewInfo) {
-      FolderViewInfo oldView = (FolderViewInfo) addObject;
-      return getAddCommand(oldView, oldView.getId(), referenceObject);
-    }
-    if (addObject instanceof FastViewInfo) {
-      FastViewInfo oldView = (FastViewInfo) addObject;
-      return getAddCommand(oldView, oldView.getId(), referenceObject);
-    }
-    if (addObject instanceof ViewShortcutInfo) {
-      ViewShortcutInfo oldView = (ViewShortcutInfo) addObject;
-      return getAddCommand(oldView, oldView.getId(), referenceObject);
-    }
-    return null;
-  }
+	@Override
+	protected Command getAddCommand(Object addObject, Object referenceObject) {
+		if (addObject instanceof PageLayoutAddViewInfo) {
+			PageLayoutAddViewInfo oldView = (PageLayoutAddViewInfo) addObject;
+			return getAddCommand(oldView, oldView.getId(), referenceObject);
+		}
+		if (addObject instanceof FolderViewInfo) {
+			FolderViewInfo oldView = (FolderViewInfo) addObject;
+			return getAddCommand(oldView, oldView.getId(), referenceObject);
+		}
+		if (addObject instanceof FastViewInfo) {
+			FastViewInfo oldView = (FastViewInfo) addObject;
+			return getAddCommand(oldView, oldView.getId(), referenceObject);
+		}
+		if (addObject instanceof ViewShortcutInfo) {
+			ViewShortcutInfo oldView = (ViewShortcutInfo) addObject;
+			return getAddCommand(oldView, oldView.getId(), referenceObject);
+		}
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link Command} that move any "view" into this "folder".
-   */
-  private Command getAddCommand(final JavaInfo oldView, final String id, Object referenceObject) {
-    final FolderViewInfo nextItem = (FolderViewInfo) referenceObject;
-    return new EditCommand(m_folder) {
-      @Override
-      protected void executeEdit() throws Exception {
-        FolderViewInfo newView = m_folder.command_CREATE(id, nextItem);
-        oldView.delete();
-        PolicyUtils.scheduleSelection(getHost(), newView);
-      }
-    };
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link Command} that move any "view" into this "folder".
+	 */
+	private Command getAddCommand(final JavaInfo oldView, final String id, Object referenceObject) {
+		final FolderViewInfo nextItem = (FolderViewInfo) referenceObject;
+		return new EditCommand(m_folder) {
+			@Override
+			protected void executeEdit() throws Exception {
+				FolderViewInfo newView = m_folder.command_CREATE(id, nextItem);
+				oldView.delete();
+				PolicyUtils.scheduleSelection(getHost(), newView);
+			}
+		};
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/rcp/perspective/PageLayoutSidesLayoutEditPolicy.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/rcp/perspective/PageLayoutSidesLayoutEditPolicy.java
index 25e0bd9db..7d9472280 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/rcp/perspective/PageLayoutSidesLayoutEditPolicy.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/rcp/perspective/PageLayoutSidesLayoutEditPolicy.java
@@ -39,174 +39,174 @@
  * @coverage rcp.gef.policy
  */
 public final class PageLayoutSidesLayoutEditPolicy extends AbstractPositionLayoutEditPolicy {
-  private static final int FOLDER_RELATIONSHIP = -1;
-  private static final ILayoutRequestValidator VALIDATOR = LayoutRequestValidators.or(
-      LayoutRequestValidators.modelType(AbstractPartInfo.class),
-      LayoutRequestValidators.modelType(FolderViewInfo.class));
-  private final PageLayoutInfo m_page;
-  private final IPageLayoutTopLevelInfo m_part;
-  private final boolean m_withOnFolder;
+	private static final int FOLDER_RELATIONSHIP = -1;
+	private static final ILayoutRequestValidator VALIDATOR = LayoutRequestValidators.or(
+			LayoutRequestValidators.modelType(AbstractPartInfo.class),
+			LayoutRequestValidators.modelType(FolderViewInfo.class));
+	private final PageLayoutInfo m_page;
+	private final IPageLayoutTopLevelInfo m_part;
+	private final boolean m_withOnFolder;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public PageLayoutSidesLayoutEditPolicy(PageLayoutInfo page,
-      IPageLayoutTopLevelInfo part,
-      boolean withOnFolder) {
-    m_page = page;
-    m_part = part;
-    m_withOnFolder = withOnFolder;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public PageLayoutSidesLayoutEditPolicy(PageLayoutInfo page,
+			IPageLayoutTopLevelInfo part,
+			boolean withOnFolder) {
+		m_page = page;
+		m_part = part;
+		m_withOnFolder = withOnFolder;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Requests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected boolean isRequestCondition(Request request) {
-    return super.isRequestCondition(request) || request instanceof ViewDropRequest;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Requests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected boolean isRequestCondition(Request request) {
+		return super.isRequestCondition(request) || request instanceof ViewDropRequest;
+	}
 
-  @Override
-  protected ILayoutRequestValidator getRequestValidator() {
-    return VALIDATOR;
-  }
+	@Override
+	protected ILayoutRequestValidator getRequestValidator() {
+		return VALIDATOR;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Feedbacks
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final int SIZE = 10;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Feedbacks
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final int SIZE = 10;
 
-  @Override
-  protected void addFeedbacks() throws Exception {
-    Rectangle clientArea = getHostFigure().getClientArea();
-    // prepare constants
-    int innerWidth = clientArea.width - 2 * (SIZE + 1);
-    int innerHeight = clientArea.height - 2 * (SIZE + 1);
-    int rightX = clientArea.right() - SIZE;
-    int bottomY = clientArea.bottom() - SIZE;
-    // add feedbacks
-    addFeedback(
-        new Rectangle(0, 0, clientArea.width, SIZE),
-        GefMessages.PageLayoutSidesLayoutEditPolicy_sideTop,
-        IPageLayout.TOP);
-    addFeedback(
-        new Rectangle(0, bottomY, clientArea.width, SIZE),
-        GefMessages.PageLayoutSidesLayoutEditPolicy_sideBottom,
-        IPageLayout.BOTTOM);
-    addFeedback(
-        new Rectangle(0, SIZE + 1, SIZE, innerHeight),
-        GefMessages.PageLayoutSidesLayoutEditPolicy_sideLeft,
-        IPageLayout.LEFT);
-    addFeedback(
-        new Rectangle(rightX, SIZE + 1, SIZE, innerHeight),
-        GefMessages.PageLayoutSidesLayoutEditPolicy_sideRight,
-        IPageLayout.RIGHT);
-    if (m_withOnFolder) {
-      addFeedback(
-          new Rectangle(SIZE + 1, SIZE + 1, innerWidth, innerHeight),
-          GefMessages.PageLayoutSidesLayoutEditPolicy_sameFolder,
-          FOLDER_RELATIONSHIP);
-    }
-  }
+	@Override
+	protected void addFeedbacks() throws Exception {
+		Rectangle clientArea = getHostFigure().getClientArea();
+		// prepare constants
+		int innerWidth = clientArea.width - 2 * (SIZE + 1);
+		int innerHeight = clientArea.height - 2 * (SIZE + 1);
+		int rightX = clientArea.right() - SIZE;
+		int bottomY = clientArea.bottom() - SIZE;
+		// add feedbacks
+		addFeedback(
+				new Rectangle(0, 0, clientArea.width, SIZE),
+				GefMessages.PageLayoutSidesLayoutEditPolicy_sideTop,
+				IPageLayout.TOP);
+		addFeedback(
+				new Rectangle(0, bottomY, clientArea.width, SIZE),
+				GefMessages.PageLayoutSidesLayoutEditPolicy_sideBottom,
+				IPageLayout.BOTTOM);
+		addFeedback(
+				new Rectangle(0, SIZE + 1, SIZE, innerHeight),
+				GefMessages.PageLayoutSidesLayoutEditPolicy_sideLeft,
+				IPageLayout.LEFT);
+		addFeedback(
+				new Rectangle(rightX, SIZE + 1, SIZE, innerHeight),
+				GefMessages.PageLayoutSidesLayoutEditPolicy_sideRight,
+				IPageLayout.RIGHT);
+		if (m_withOnFolder) {
+			addFeedback(
+					new Rectangle(SIZE + 1, SIZE + 1, innerWidth, innerHeight),
+					GefMessages.PageLayoutSidesLayoutEditPolicy_sameFolder,
+					FOLDER_RELATIONSHIP);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Command getCommand(Request request, Object data) {
-    if (request instanceof ViewDropRequest) {
-      final ViewDropRequest viewDrop_Request = (ViewDropRequest) request;
-      final ViewInfo viewInfo = viewDrop_Request.getView();
-      final int relationship = (Integer) data;
-      return new EditCommand(m_page) {
-        @Override
-        protected void executeEdit() throws Exception {
-          Object newView;
-          if (relationship == FOLDER_RELATIONSHIP) {
-            PageLayoutCreateFolderInfo folder = convertIntoFolder();
-            newView = folder.command_CREATE(viewInfo.getId(), null);
-          } else {
-            newView = m_page.command_CREATE(viewInfo.getId(), relationship, 0.5f, m_part);
-          }
-          viewDrop_Request.setComponent(newView);
-        }
-      };
-    }
-    return super.getCommand(request, data);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Command getCommand(Request request, Object data) {
+		if (request instanceof ViewDropRequest) {
+			final ViewDropRequest viewDrop_Request = (ViewDropRequest) request;
+			final ViewInfo viewInfo = viewDrop_Request.getView();
+			final int relationship = (Integer) data;
+			return new EditCommand(m_page) {
+				@Override
+				protected void executeEdit() throws Exception {
+					Object newView;
+					if (relationship == FOLDER_RELATIONSHIP) {
+						PageLayoutCreateFolderInfo folder = convertIntoFolder();
+						newView = folder.command_CREATE(viewInfo.getId(), null);
+					} else {
+						newView = m_page.command_CREATE(viewInfo.getId(), relationship, 0.5f, m_part);
+					}
+					viewDrop_Request.setComponent(newView);
+				}
+			};
+		}
+		return super.getCommand(request, data);
+	}
 
-  @Override
-  protected Command getCreateCommand(Object newObject, Object data) {
-    return null;
-  }
+	@Override
+	protected Command getCreateCommand(Object newObject, Object data) {
+		return null;
+	}
 
-  @Override
-  protected Command getPasteCommand(PasteRequest request, Object data) {
-    return null;
-  }
+	@Override
+	protected Command getPasteCommand(PasteRequest request, Object data) {
+		return null;
+	}
 
-  @Override
-  protected Command getMoveCommand(Object moveObject, Object data) {
-    return null;
-  }
+	@Override
+	protected Command getMoveCommand(Object moveObject, Object data) {
+		return null;
+	}
 
-  @Override
-  protected Command getAddCommand(Object addObject, Object data) {
-    final int relationship = (Integer) data;
-    if (addObject instanceof AbstractPartInfo) {
-      final AbstractPartInfo item = (AbstractPartInfo) addObject;
-      return new EditCommand(m_page) {
-        @Override
-        protected void executeEdit() throws Exception {
-          if (relationship != FOLDER_RELATIONSHIP) {
-            m_page.command_MOVE(item, relationship, 0.5f, m_part);
-          } else if (item instanceof PageLayoutAddViewInfo) {
-            PageLayoutAddViewInfo view = (PageLayoutAddViewInfo) item;
-            PageLayoutCreateFolderInfo folder = convertIntoFolder();
-            // move "view" on new "folder" and select
-            FolderViewInfo newView = folder.command_MOVE(view, null);
-            PolicyUtils.scheduleSelection(getHost(), newView);
-          }
-        }
-      };
-    }
-    if (addObject instanceof FolderViewInfo) {
-      final FolderViewInfo item = (FolderViewInfo) addObject;
-      return new EditCommand(m_page) {
-        @Override
-        protected void executeEdit() throws Exception {
-          if (relationship != FOLDER_RELATIONSHIP) {
-            AbstractPartInfo newView = m_page.command_MOVE(item, relationship, 0.5f, m_part);
-            PolicyUtils.scheduleSelection(getHost(), newView);
-          } else {
-            PageLayoutCreateFolderInfo folder = convertIntoFolder();
-            FolderViewInfo newView = folder.command_MOVE(item, null);
-            PolicyUtils.scheduleSelection(getHost(), newView);
-          }
-        }
-      };
-    }
-    //
-    return null;
-  }
+	@Override
+	protected Command getAddCommand(Object addObject, Object data) {
+		final int relationship = (Integer) data;
+		if (addObject instanceof AbstractPartInfo) {
+			final AbstractPartInfo item = (AbstractPartInfo) addObject;
+			return new EditCommand(m_page) {
+				@Override
+				protected void executeEdit() throws Exception {
+					if (relationship != FOLDER_RELATIONSHIP) {
+						m_page.command_MOVE(item, relationship, 0.5f, m_part);
+					} else if (item instanceof PageLayoutAddViewInfo) {
+						PageLayoutAddViewInfo view = (PageLayoutAddViewInfo) item;
+						PageLayoutCreateFolderInfo folder = convertIntoFolder();
+						// move "view" on new "folder" and select
+						FolderViewInfo newView = folder.command_MOVE(view, null);
+						PolicyUtils.scheduleSelection(getHost(), newView);
+					}
+				}
+			};
+		}
+		if (addObject instanceof FolderViewInfo) {
+			final FolderViewInfo item = (FolderViewInfo) addObject;
+			return new EditCommand(m_page) {
+				@Override
+				protected void executeEdit() throws Exception {
+					if (relationship != FOLDER_RELATIONSHIP) {
+						AbstractPartInfo newView = m_page.command_MOVE(item, relationship, 0.5f, m_part);
+						PolicyUtils.scheduleSelection(getHost(), newView);
+					} else {
+						PageLayoutCreateFolderInfo folder = convertIntoFolder();
+						FolderViewInfo newView = folder.command_MOVE(item, null);
+						PolicyUtils.scheduleSelection(getHost(), newView);
+					}
+				}
+			};
+		}
+		//
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Converts this {@link PageLayoutAddViewInfo} into {@link PageLayoutCreateFolderInfo}.
-   */
-  private PageLayoutCreateFolderInfo convertIntoFolder() throws Exception {
-    return m_page.convertIntoFolder((PageLayoutAddViewInfo) m_part);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Converts this {@link PageLayoutAddViewInfo} into {@link PageLayoutCreateFolderInfo}.
+	 */
+	private PageLayoutCreateFolderInfo convertIntoFolder() throws Exception {
+		return m_page.convertIntoFolder((PageLayoutAddViewInfo) m_part);
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/rcp/perspective/PerspectiveDropRequest.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/rcp/perspective/PerspectiveDropRequest.java
index c36ff2295..4cb52af2b 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/rcp/perspective/PerspectiveDropRequest.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/rcp/perspective/PerspectiveDropRequest.java
@@ -21,49 +21,49 @@
  * @coverage rcp.gef.policy
  */
 public final class PerspectiveDropRequest extends AbstractCreateRequest {
-  public static final String TYPE = "drop Perspective";
-  private final PerspectiveInfo m_perspective;
+	public static final String TYPE = "drop Perspective";
+	private final PerspectiveInfo m_perspective;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public PerspectiveDropRequest(PerspectiveInfo perspective) {
-    super(TYPE);
-    m_perspective = perspective;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public PerspectiveDropRequest(PerspectiveInfo perspective) {
+		super(TYPE);
+		m_perspective = perspective;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link PerspectiveInfo} information about perspective to drop.
-   */
-  public PerspectiveInfo getPerspective() {
-    return m_perspective;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link PerspectiveInfo} information about perspective to drop.
+	 */
+	public PerspectiveInfo getPerspective() {
+		return m_perspective;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Component
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Object m_component;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Component
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Object m_component;
 
-  /**
-   * @return the component to select after drop finished.
-   */
-  public Object getComponent() {
-    return m_component;
-  }
+	/**
+	 * @return the component to select after drop finished.
+	 */
+	public Object getComponent() {
+		return m_component;
+	}
 
-  /**
-   * Sets the component to select after drop finished.
-   */
-  public void setComponent(Object component) {
-    m_component = component;
-  }
+	/**
+	 * Sets the component to select after drop finished.
+	 */
+	public void setComponent(Object component) {
+		m_component = component;
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/rcp/perspective/PerspectiveDropTool.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/rcp/perspective/PerspectiveDropTool.java
index f0139dc77..6204ffef0 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/rcp/perspective/PerspectiveDropTool.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/rcp/perspective/PerspectiveDropTool.java
@@ -24,37 +24,37 @@
  * @coverage rcp.gef.policy
  */
 public final class PerspectiveDropTool extends AbstractCreationTool {
-  private final PerspectiveInfo m_perspective;
+	private final PerspectiveInfo m_perspective;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public PerspectiveDropTool(PerspectiveInfo perspective) {
-    m_perspective = perspective;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public PerspectiveDropTool(PerspectiveInfo perspective) {
+		m_perspective = perspective;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AbstractCreationTool
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Request createTargetRequest() {
-    return new PerspectiveDropRequest(m_perspective);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AbstractCreationTool
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Request createTargetRequest() {
+		return new PerspectiveDropRequest(m_perspective);
+	}
 
-  @Override
-  protected void selectAddedObjects() {
-    PerspectiveDropRequest request = (PerspectiveDropRequest) getTargetRequest();
-    Object component = request.getComponent();
-    if (component != null) {
-      IEditPartViewer viewer = getViewer();
-      EditPart editPart = viewer.getEditPartByModel(component);
-      if (editPart != null) {
-        viewer.select(editPart);
-      }
-    }
-  }
+	@Override
+	protected void selectAddedObjects() {
+		PerspectiveDropRequest request = (PerspectiveDropRequest) getTargetRequest();
+		Object component = request.getComponent();
+		if (component != null) {
+			IEditPartViewer viewer = getViewer();
+			EditPart editPart = viewer.getEditPartByModel(component);
+			if (editPart != null) {
+				viewer.select(editPart);
+			}
+		}
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/rcp/perspective/ViewDropRequest.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/rcp/perspective/ViewDropRequest.java
index 3976d6705..98f1302e3 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/rcp/perspective/ViewDropRequest.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/rcp/perspective/ViewDropRequest.java
@@ -21,49 +21,49 @@
  * @coverage rcp.gef.policy
  */
 public final class ViewDropRequest extends AbstractCreateRequest {
-  public static final String TYPE = "drop View";
-  private final ViewInfo m_view;
+	public static final String TYPE = "drop View";
+	private final ViewInfo m_view;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ViewDropRequest(ViewInfo view) {
-    super(TYPE);
-    m_view = view;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ViewDropRequest(ViewInfo view) {
+		super(TYPE);
+		m_view = view;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link ViewInfo} information about view to drop.
-   */
-  public ViewInfo getView() {
-    return m_view;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link ViewInfo} information about view to drop.
+	 */
+	public ViewInfo getView() {
+		return m_view;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Component
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Object m_component;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Component
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Object m_component;
 
-  /**
-   * @return the component to select after drop finished.
-   */
-  public Object getComponent() {
-    return m_component;
-  }
+	/**
+	 * @return the component to select after drop finished.
+	 */
+	public Object getComponent() {
+		return m_component;
+	}
 
-  /**
-   * Sets the component to select after drop finished.
-   */
-  public void setComponent(Object component) {
-    m_component = component;
-  }
+	/**
+	 * Sets the component to select after drop finished.
+	 */
+	public void setComponent(Object component) {
+		m_component = component;
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/rcp/perspective/ViewDropTool.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/rcp/perspective/ViewDropTool.java
index ad6002d48..1788e84b0 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/rcp/perspective/ViewDropTool.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/rcp/perspective/ViewDropTool.java
@@ -24,37 +24,37 @@
  * @coverage rcp.gef.policy
  */
 public final class ViewDropTool extends AbstractCreationTool {
-  private final ViewInfo m_view;
+	private final ViewInfo m_view;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ViewDropTool(ViewInfo view) {
-    m_view = view;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ViewDropTool(ViewInfo view) {
+		m_view = view;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AbstractCreationTool
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Request createTargetRequest() {
-    return new ViewDropRequest(m_view);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AbstractCreationTool
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Request createTargetRequest() {
+		return new ViewDropRequest(m_view);
+	}
 
-  @Override
-  protected void selectAddedObjects() {
-    ViewDropRequest request = (ViewDropRequest) getTargetRequest();
-    Object component = request.getComponent();
-    if (component != null) {
-      IEditPartViewer viewer = getViewer();
-      EditPart editPart = viewer.getEditPartByModel(component);
-      if (editPart != null) {
-        viewer.select(editPart);
-      }
-    }
-  }
+	@Override
+	protected void selectAddedObjects() {
+		ViewDropRequest request = (ViewDropRequest) getTargetRequest();
+		Object component = request.getComponent();
+		if (component != null) {
+			IEditPartViewer viewer = getViewer();
+			EditPart editPart = viewer.getEditPartByModel(component);
+			if (editPart != null) {
+				viewer.select(editPart);
+			}
+		}
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/rcp/perspective/shortcuts/FastViewContainerLayoutEditPolicy.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/rcp/perspective/shortcuts/FastViewContainerLayoutEditPolicy.java
index b487fce0a..0a9b0634c 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/rcp/perspective/shortcuts/FastViewContainerLayoutEditPolicy.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/rcp/perspective/shortcuts/FastViewContainerLayoutEditPolicy.java
@@ -31,82 +31,82 @@
  * @coverage rcp.gef.policy
  */
 public final class FastViewContainerLayoutEditPolicy extends AbstractFlowLayoutEditPolicy {
-  private static final ILayoutRequestValidator VALIDATOR =
-      LayoutRequestValidators.modelType(FastViewInfo.class);
-  private final PageLayoutInfo m_page;
-  private final FastViewContainerInfo m_container;
+	private static final ILayoutRequestValidator VALIDATOR =
+			LayoutRequestValidators.modelType(FastViewInfo.class);
+	private final PageLayoutInfo m_page;
+	private final FastViewContainerInfo m_container;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FastViewContainerLayoutEditPolicy(FastViewContainerInfo container) {
-    m_container = container;
-    m_page = container.getPage();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FastViewContainerLayoutEditPolicy(FastViewContainerInfo container) {
+		m_container = container;
+		m_page = container.getPage();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Requests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected boolean isGoodReferenceChild(Request request, EditPart editPart) {
-    return editPart.getModel() instanceof FastViewInfo;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Requests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected boolean isGoodReferenceChild(Request request, EditPart editPart) {
+		return editPart.getModel() instanceof FastViewInfo;
+	}
 
-  @Override
-  protected boolean isRequestCondition(Request request) {
-    return super.isRequestCondition(request) || request instanceof ViewDropRequest;
-  }
+	@Override
+	protected boolean isRequestCondition(Request request) {
+		return super.isRequestCondition(request) || request instanceof ViewDropRequest;
+	}
 
-  @Override
-  protected ILayoutRequestValidator getRequestValidator() {
-    return VALIDATOR;
-  }
+	@Override
+	protected ILayoutRequestValidator getRequestValidator() {
+		return VALIDATOR;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AbstractFlowLayoutEditPolicy
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected boolean isHorizontal(Request request) {
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AbstractFlowLayoutEditPolicy
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected boolean isHorizontal(Request request) {
+		return true;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Command getCommand(Request request, Object referenceObject) {
-    if (request instanceof ViewDropRequest) {
-      final ViewDropRequest viewDrop_Request = (ViewDropRequest) request;
-      final ViewInfo viewInfo = viewDrop_Request.getView();
-      final FastViewInfo reference = (FastViewInfo) referenceObject;
-      return new EditCommand(m_page) {
-        @Override
-        protected void executeEdit() throws Exception {
-          FastViewInfo newView = m_container.command_CREATE(viewInfo.getId(), reference);
-          viewDrop_Request.setComponent(newView);
-        }
-      };
-    }
-    return super.getCommand(request, referenceObject);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Command getCommand(Request request, Object referenceObject) {
+		if (request instanceof ViewDropRequest) {
+			final ViewDropRequest viewDrop_Request = (ViewDropRequest) request;
+			final ViewInfo viewInfo = viewDrop_Request.getView();
+			final FastViewInfo reference = (FastViewInfo) referenceObject;
+			return new EditCommand(m_page) {
+				@Override
+				protected void executeEdit() throws Exception {
+					FastViewInfo newView = m_container.command_CREATE(viewInfo.getId(), reference);
+					viewDrop_Request.setComponent(newView);
+				}
+			};
+		}
+		return super.getCommand(request, referenceObject);
+	}
 
-  @Override
-  protected Command getMoveCommand(Object moveObject, Object referenceObject) {
-    final FastViewInfo item = (FastViewInfo) moveObject;
-    final FastViewInfo nextItem = (FastViewInfo) referenceObject;
-    return new EditCommand(m_page) {
-      @Override
-      protected void executeEdit() throws Exception {
-        m_container.command_MOVE(item, nextItem);
-      }
-    };
-  }
+	@Override
+	protected Command getMoveCommand(Object moveObject, Object referenceObject) {
+		final FastViewInfo item = (FastViewInfo) moveObject;
+		final FastViewInfo nextItem = (FastViewInfo) referenceObject;
+		return new EditCommand(m_page) {
+			@Override
+			protected void executeEdit() throws Exception {
+				m_container.command_MOVE(item, nextItem);
+			}
+		};
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/rcp/perspective/shortcuts/PerspectiveShortcutContainerLayoutEditPolicy.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/rcp/perspective/shortcuts/PerspectiveShortcutContainerLayoutEditPolicy.java
index 4b73895d3..73e451d68 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/rcp/perspective/shortcuts/PerspectiveShortcutContainerLayoutEditPolicy.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/rcp/perspective/shortcuts/PerspectiveShortcutContainerLayoutEditPolicy.java
@@ -31,85 +31,85 @@
  * @coverage rcp.gef.policy
  */
 public final class PerspectiveShortcutContainerLayoutEditPolicy
-    extends
-      AbstractFlowLayoutEditPolicy {
-  private static final ILayoutRequestValidator VALIDATOR =
-      LayoutRequestValidators.modelType(PerspectiveShortcutInfo.class);
-  private final PageLayoutInfo m_page;
-  private final PerspectiveShortcutContainerInfo m_container;
+extends
+AbstractFlowLayoutEditPolicy {
+	private static final ILayoutRequestValidator VALIDATOR =
+			LayoutRequestValidators.modelType(PerspectiveShortcutInfo.class);
+	private final PageLayoutInfo m_page;
+	private final PerspectiveShortcutContainerInfo m_container;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public PerspectiveShortcutContainerLayoutEditPolicy(PerspectiveShortcutContainerInfo container) {
-    m_container = container;
-    m_page = container.getPage();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public PerspectiveShortcutContainerLayoutEditPolicy(PerspectiveShortcutContainerInfo container) {
+		m_container = container;
+		m_page = container.getPage();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Requests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected boolean isGoodReferenceChild(Request request, EditPart editPart) {
-    return editPart.getModel() instanceof PerspectiveShortcutInfo;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Requests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected boolean isGoodReferenceChild(Request request, EditPart editPart) {
+		return editPart.getModel() instanceof PerspectiveShortcutInfo;
+	}
 
-  @Override
-  protected boolean isRequestCondition(Request request) {
-    return super.isRequestCondition(request) || request instanceof PerspectiveDropRequest;
-  }
+	@Override
+	protected boolean isRequestCondition(Request request) {
+		return super.isRequestCondition(request) || request instanceof PerspectiveDropRequest;
+	}
 
-  @Override
-  protected ILayoutRequestValidator getRequestValidator() {
-    return VALIDATOR;
-  }
+	@Override
+	protected ILayoutRequestValidator getRequestValidator() {
+		return VALIDATOR;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AbstractFlowLayoutEditPolicy
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected boolean isHorizontal(Request request) {
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AbstractFlowLayoutEditPolicy
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected boolean isHorizontal(Request request) {
+		return false;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Command getCommand(Request request, Object referenceObject) {
-    if (request instanceof PerspectiveDropRequest) {
-      final PerspectiveDropRequest perspectiveDrop_Request = (PerspectiveDropRequest) request;
-      final PerspectiveInfo perspectiveInfo = perspectiveDrop_Request.getPerspective();
-      final PerspectiveShortcutInfo reference = (PerspectiveShortcutInfo) referenceObject;
-      return new EditCommand(m_page) {
-        @Override
-        protected void executeEdit() throws Exception {
-          PerspectiveShortcutInfo newPerspective =
-              m_container.command_CREATE(perspectiveInfo.getId(), reference);
-          perspectiveDrop_Request.setComponent(newPerspective);
-        }
-      };
-    }
-    return super.getCommand(request, referenceObject);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Command getCommand(Request request, Object referenceObject) {
+		if (request instanceof PerspectiveDropRequest) {
+			final PerspectiveDropRequest perspectiveDrop_Request = (PerspectiveDropRequest) request;
+			final PerspectiveInfo perspectiveInfo = perspectiveDrop_Request.getPerspective();
+			final PerspectiveShortcutInfo reference = (PerspectiveShortcutInfo) referenceObject;
+			return new EditCommand(m_page) {
+				@Override
+				protected void executeEdit() throws Exception {
+					PerspectiveShortcutInfo newPerspective =
+							m_container.command_CREATE(perspectiveInfo.getId(), reference);
+					perspectiveDrop_Request.setComponent(newPerspective);
+				}
+			};
+		}
+		return super.getCommand(request, referenceObject);
+	}
 
-  @Override
-  protected Command getMoveCommand(Object moveObject, Object referenceObject) {
-    final PerspectiveShortcutInfo item = (PerspectiveShortcutInfo) moveObject;
-    final PerspectiveShortcutInfo nextItem = (PerspectiveShortcutInfo) referenceObject;
-    return new EditCommand(m_page) {
-      @Override
-      protected void executeEdit() throws Exception {
-        m_container.command_MOVE(item, nextItem);
-      }
-    };
-  }
+	@Override
+	protected Command getMoveCommand(Object moveObject, Object referenceObject) {
+		final PerspectiveShortcutInfo item = (PerspectiveShortcutInfo) moveObject;
+		final PerspectiveShortcutInfo nextItem = (PerspectiveShortcutInfo) referenceObject;
+		return new EditCommand(m_page) {
+			@Override
+			protected void executeEdit() throws Exception {
+				m_container.command_MOVE(item, nextItem);
+			}
+		};
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/rcp/perspective/shortcuts/ViewShortcutContainerLayoutEditPolicy.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/rcp/perspective/shortcuts/ViewShortcutContainerLayoutEditPolicy.java
index 706f13ef0..c0fd433e1 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/rcp/perspective/shortcuts/ViewShortcutContainerLayoutEditPolicy.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/rcp/perspective/shortcuts/ViewShortcutContainerLayoutEditPolicy.java
@@ -31,82 +31,82 @@
  * @coverage rcp.gef.policy
  */
 public final class ViewShortcutContainerLayoutEditPolicy extends AbstractFlowLayoutEditPolicy {
-  private static final ILayoutRequestValidator VALIDATOR =
-      LayoutRequestValidators.modelType(ViewShortcutInfo.class);
-  private final PageLayoutInfo m_page;
-  private final ViewShortcutContainerInfo m_container;
+	private static final ILayoutRequestValidator VALIDATOR =
+			LayoutRequestValidators.modelType(ViewShortcutInfo.class);
+	private final PageLayoutInfo m_page;
+	private final ViewShortcutContainerInfo m_container;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ViewShortcutContainerLayoutEditPolicy(ViewShortcutContainerInfo container) {
-    m_container = container;
-    m_page = container.getPage();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ViewShortcutContainerLayoutEditPolicy(ViewShortcutContainerInfo container) {
+		m_container = container;
+		m_page = container.getPage();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Requests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected boolean isGoodReferenceChild(Request request, EditPart editPart) {
-    return editPart.getModel() instanceof ViewShortcutInfo;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Requests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected boolean isGoodReferenceChild(Request request, EditPart editPart) {
+		return editPart.getModel() instanceof ViewShortcutInfo;
+	}
 
-  @Override
-  protected boolean isRequestCondition(Request request) {
-    return super.isRequestCondition(request) || request instanceof ViewDropRequest;
-  }
+	@Override
+	protected boolean isRequestCondition(Request request) {
+		return super.isRequestCondition(request) || request instanceof ViewDropRequest;
+	}
 
-  @Override
-  protected ILayoutRequestValidator getRequestValidator() {
-    return VALIDATOR;
-  }
+	@Override
+	protected ILayoutRequestValidator getRequestValidator() {
+		return VALIDATOR;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AbstractFlowLayoutEditPolicy
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected boolean isHorizontal(Request request) {
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AbstractFlowLayoutEditPolicy
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected boolean isHorizontal(Request request) {
+		return false;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Command getCommand(Request request, Object referenceObject) {
-    if (request instanceof ViewDropRequest) {
-      final ViewDropRequest viewDrop_Request = (ViewDropRequest) request;
-      final ViewInfo viewInfo = viewDrop_Request.getView();
-      final ViewShortcutInfo reference = (ViewShortcutInfo) referenceObject;
-      return new EditCommand(m_page) {
-        @Override
-        protected void executeEdit() throws Exception {
-          ViewShortcutInfo newView = m_container.command_CREATE(viewInfo.getId(), reference);
-          viewDrop_Request.setComponent(newView);
-        }
-      };
-    }
-    return super.getCommand(request, referenceObject);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Command getCommand(Request request, Object referenceObject) {
+		if (request instanceof ViewDropRequest) {
+			final ViewDropRequest viewDrop_Request = (ViewDropRequest) request;
+			final ViewInfo viewInfo = viewDrop_Request.getView();
+			final ViewShortcutInfo reference = (ViewShortcutInfo) referenceObject;
+			return new EditCommand(m_page) {
+				@Override
+				protected void executeEdit() throws Exception {
+					ViewShortcutInfo newView = m_container.command_CREATE(viewInfo.getId(), reference);
+					viewDrop_Request.setComponent(newView);
+				}
+			};
+		}
+		return super.getCommand(request, referenceObject);
+	}
 
-  @Override
-  protected Command getMoveCommand(Object moveObject, Object referenceObject) {
-    final ViewShortcutInfo item = (ViewShortcutInfo) moveObject;
-    final ViewShortcutInfo nextItem = (ViewShortcutInfo) referenceObject;
-    return new EditCommand(m_page) {
-      @Override
-      protected void executeEdit() throws Exception {
-        m_container.command_MOVE(item, nextItem);
-      }
-    };
-  }
+	@Override
+	protected Command getMoveCommand(Object moveObject, Object referenceObject) {
+		final ViewShortcutInfo item = (ViewShortcutInfo) moveObject;
+		final ViewShortcutInfo nextItem = (ViewShortcutInfo) referenceObject;
+		return new EditCommand(m_page) {
+			@Override
+			protected void executeEdit() throws Exception {
+				m_container.command_MOVE(item, nextItem);
+			}
+		};
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/widgets/CBannerLayoutEditPolicy.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/widgets/CBannerLayoutEditPolicy.java
index e8321237d..a240b1345 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/widgets/CBannerLayoutEditPolicy.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/widgets/CBannerLayoutEditPolicy.java
@@ -24,45 +24,45 @@
  * @coverage rcp.gef.policy
  */
 public final class CBannerLayoutEditPolicy extends AbstractPositionCompositeLayoutEditPolicy {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Composite
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CBannerLayoutEditPolicy(CBannerInfo composite) {
-    super(composite);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Composite
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CBannerLayoutEditPolicy(CBannerInfo composite) {
+		super(composite);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Positions
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void addFeedbacks() throws Exception {
-    addFeedback2(
-        0.0,
-        0.0,
-        0.5,
-        0.4,
-        new Insets(0, 0, 1, 1),
-        GefMessages.CBannerLayoutEditPolicy_posLeft,
-        "setLeft");
-    addFeedback2(
-        0.5,
-        0.0,
-        1.0,
-        0.4,
-        new Insets(0, 0, 1, 0),
-        GefMessages.CBannerLayoutEditPolicy_posRight,
-        "setRight");
-    addFeedback2(
-        0.0,
-        0.6,
-        1.0,
-        1.0,
-        new Insets(0, 0, 0, 0),
-        GefMessages.CBannerLayoutEditPolicy_posBottom,
-        "setBottom");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Positions
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void addFeedbacks() throws Exception {
+		addFeedback2(
+				0.0,
+				0.0,
+				0.5,
+				0.4,
+				new Insets(0, 0, 1, 1),
+				GefMessages.CBannerLayoutEditPolicy_posLeft,
+				"setLeft");
+		addFeedback2(
+				0.5,
+				0.0,
+				1.0,
+				0.4,
+				new Insets(0, 0, 1, 0),
+				GefMessages.CBannerLayoutEditPolicy_posRight,
+				"setRight");
+		addFeedback2(
+				0.0,
+				0.6,
+				1.0,
+				1.0,
+				new Insets(0, 0, 0, 0),
+				GefMessages.CBannerLayoutEditPolicy_posBottom,
+				"setBottom");
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/widgets/SashFormSelectionEditPolicy.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/widgets/SashFormSelectionEditPolicy.java
index fd1c83373..509b270a1 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/widgets/SashFormSelectionEditPolicy.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/widgets/SashFormSelectionEditPolicy.java
@@ -42,148 +42,148 @@
  * @coverage rcp.gef.policy
  */
 public final class SashFormSelectionEditPolicy<C extends IControlInfo> extends SelectionEditPolicy {
-  private static final String REQ_RESIZE = "resize";
-  private final ISashFormInfo<C> m_composite;
-  private final C m_control;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SashFormSelectionEditPolicy(ISashFormInfo<C> composite, C control) {
-    m_composite = composite;
-    m_control = control;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Handles
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected List<Handle> createSelectionHandles() {
-    List<Handle> handles = Lists.newArrayList();
-    // create move handle
-    MoveHandle moveHandle = new MoveHandle(getHost());
-    moveHandle.setForeground(IColorConstants.red);
-    handles.add(moveHandle);
-    //
-    return handles;
-  }
-
-  @Override
-  protected List<Handle> createStaticHandles() {
-    List<Handle> handles = Lists.newArrayList();
-    // create resize handle (exclude last ControlInfo)
-    boolean isLast = GenericsUtils.getLastOrNull(m_composite.getChildrenControls()) == m_control;
-    if (!isLast) {
-      SideResizeHandle resizeHandle;
-      if (m_composite.isHorizontal()) {
-        resizeHandle = new SideResizeHandle(getHost(), IPositionConstants.RIGHT, 10, true);
-        resizeHandle.setDragTrackerTool(new ResizeTracker(getHost(),
-            IPositionConstants.EAST,
-            REQ_RESIZE));
-      } else {
-        resizeHandle = new SideResizeHandle(getHost(), IPositionConstants.BOTTOM, 10, true);
-        resizeHandle.setDragTrackerTool(new ResizeTracker(getHost(),
-            IPositionConstants.SOUTH,
-            REQ_RESIZE));
-      }
-      handles.add(resizeHandle);
-    }
-    //
-    return handles;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Routing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean understandsRequest(Request request) {
-    return super.understandsRequest(request) || request.getType() == REQ_RESIZE;
-  }
-
-  @Override
-  public Command getCommand(final Request request) {
-    return getResizeCommand((ChangeBoundsRequest) request);
-  }
-
-  @Override
-  public void showSourceFeedback(Request request) {
-    showResizeFeedback((ChangeBoundsRequest) request);
-  }
-
-  @Override
-  public void eraseSourceFeedback(Request request) {
-    eraseResizeFeedback((ChangeBoundsRequest) request);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Resize
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Figure m_resizeFeedback;
-  private TextFeedback m_textFeedback;
-
-  /**
-   * @return the {@link Command} for {@link #REQ_RESIZE} request.
-   */
-  private Command getResizeCommand(ChangeBoundsRequest request) {
-    final Rectangle newBounds = request.getTransformedRectangle(getHostFigure().getBounds());
-    return new EditCommand(m_composite) {
-      @Override
-      protected void executeEdit() throws Exception {
-        int size = m_composite.isHorizontal() ? newBounds.width : newBounds.height;
-        m_composite.command_RESIZE(m_control, size);
-      }
-    };
-  }
-
-  /**
-   * Shows {@link #REQ_RESIZE} feedback.
-   */
-  private void showResizeFeedback(ChangeBoundsRequest request) {
-    if (m_resizeFeedback == null) {
-      // create selection feedback
-      {
-        m_resizeFeedback = new RectangleFigure();
-        m_resizeFeedback.setForeground(IColorConstants.red);
-        addFeedback(m_resizeFeedback);
-      }
-      // create text feedback
-      {
-        m_textFeedback = new TextFeedback(getFeedbackLayer());
-        m_textFeedback.add();
-      }
-    }
-    // prepare bounds
-    Rectangle bounds;
-    {
-      Figure hostFigure = getHostFigure();
-      bounds = request.getTransformedRectangle(hostFigure.getBounds());
-      FigureUtils.translateFigureToAbsolute(hostFigure, bounds.shrink(-1, -1));
-    }
-    // update selection feedback
-    m_resizeFeedback.setBounds(bounds);
-    // update text feedback
-    int size = m_composite.isHorizontal() ? bounds.width : bounds.height;
-    m_textFeedback.setText(Integer.toString(size - 2));
-    m_textFeedback.setLocation(request.getLocation().getTranslated(10, 10));
-  }
-
-  /**
-   * Erases {@link #REQ_RESIZE} feedback.
-   */
-  private void eraseResizeFeedback(ChangeBoundsRequest request) {
-    // erase selection feedback
-    removeFeedback(m_resizeFeedback);
-    m_resizeFeedback = null;
-    // erase text feedback
-    m_textFeedback.remove();
-    m_textFeedback = null;
-  }
+	private static final String REQ_RESIZE = "resize";
+	private final ISashFormInfo<C> m_composite;
+	private final C m_control;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SashFormSelectionEditPolicy(ISashFormInfo<C> composite, C control) {
+		m_composite = composite;
+		m_control = control;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Handles
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected List<Handle> createSelectionHandles() {
+		List<Handle> handles = Lists.newArrayList();
+		// create move handle
+		MoveHandle moveHandle = new MoveHandle(getHost());
+		moveHandle.setForeground(IColorConstants.red);
+		handles.add(moveHandle);
+		//
+		return handles;
+	}
+
+	@Override
+	protected List<Handle> createStaticHandles() {
+		List<Handle> handles = Lists.newArrayList();
+		// create resize handle (exclude last ControlInfo)
+		boolean isLast = GenericsUtils.getLastOrNull(m_composite.getChildrenControls()) == m_control;
+		if (!isLast) {
+			SideResizeHandle resizeHandle;
+			if (m_composite.isHorizontal()) {
+				resizeHandle = new SideResizeHandle(getHost(), IPositionConstants.RIGHT, 10, true);
+				resizeHandle.setDragTrackerTool(new ResizeTracker(getHost(),
+						IPositionConstants.EAST,
+						REQ_RESIZE));
+			} else {
+				resizeHandle = new SideResizeHandle(getHost(), IPositionConstants.BOTTOM, 10, true);
+				resizeHandle.setDragTrackerTool(new ResizeTracker(getHost(),
+						IPositionConstants.SOUTH,
+						REQ_RESIZE));
+			}
+			handles.add(resizeHandle);
+		}
+		//
+		return handles;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Routing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean understandsRequest(Request request) {
+		return super.understandsRequest(request) || request.getType() == REQ_RESIZE;
+	}
+
+	@Override
+	public Command getCommand(final Request request) {
+		return getResizeCommand((ChangeBoundsRequest) request);
+	}
+
+	@Override
+	public void showSourceFeedback(Request request) {
+		showResizeFeedback((ChangeBoundsRequest) request);
+	}
+
+	@Override
+	public void eraseSourceFeedback(Request request) {
+		eraseResizeFeedback((ChangeBoundsRequest) request);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Resize
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Figure m_resizeFeedback;
+	private TextFeedback m_textFeedback;
+
+	/**
+	 * @return the {@link Command} for {@link #REQ_RESIZE} request.
+	 */
+	private Command getResizeCommand(ChangeBoundsRequest request) {
+		final Rectangle newBounds = request.getTransformedRectangle(getHostFigure().getBounds());
+		return new EditCommand(m_composite) {
+			@Override
+			protected void executeEdit() throws Exception {
+				int size = m_composite.isHorizontal() ? newBounds.width : newBounds.height;
+				m_composite.command_RESIZE(m_control, size);
+			}
+		};
+	}
+
+	/**
+	 * Shows {@link #REQ_RESIZE} feedback.
+	 */
+	private void showResizeFeedback(ChangeBoundsRequest request) {
+		if (m_resizeFeedback == null) {
+			// create selection feedback
+			{
+				m_resizeFeedback = new RectangleFigure();
+				m_resizeFeedback.setForeground(IColorConstants.red);
+				addFeedback(m_resizeFeedback);
+			}
+			// create text feedback
+			{
+				m_textFeedback = new TextFeedback(getFeedbackLayer());
+				m_textFeedback.add();
+			}
+		}
+		// prepare bounds
+		Rectangle bounds;
+		{
+			Figure hostFigure = getHostFigure();
+			bounds = request.getTransformedRectangle(hostFigure.getBounds());
+			FigureUtils.translateFigureToAbsolute(hostFigure, bounds.shrink(-1, -1));
+		}
+		// update selection feedback
+		m_resizeFeedback.setBounds(bounds);
+		// update text feedback
+		int size = m_composite.isHorizontal() ? bounds.width : bounds.height;
+		m_textFeedback.setText(Integer.toString(size - 2));
+		m_textFeedback.setLocation(request.getLocation().getTranslated(10, 10));
+	}
+
+	/**
+	 * Erases {@link #REQ_RESIZE} feedback.
+	 */
+	private void eraseResizeFeedback(ChangeBoundsRequest request) {
+		// erase selection feedback
+		removeFeedback(m_resizeFeedback);
+		m_resizeFeedback = null;
+		// erase text feedback
+		m_textFeedback.remove();
+		m_textFeedback = null;
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/widgets/ScrolledCompositeLayoutEditPolicy.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/widgets/ScrolledCompositeLayoutEditPolicy.java
index ff275b361..a77fa037c 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/widgets/ScrolledCompositeLayoutEditPolicy.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/widgets/ScrolledCompositeLayoutEditPolicy.java
@@ -32,88 +32,88 @@
  * @coverage rcp.gef.policy
  */
 public final class ScrolledCompositeLayoutEditPolicy extends LayoutEditPolicy {
-  private final ScrolledCompositeInfo m_composite;
+	private final ScrolledCompositeInfo m_composite;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Composite
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ScrolledCompositeLayoutEditPolicy(ScrolledCompositeInfo composite) {
-    m_composite = composite;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Composite
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ScrolledCompositeLayoutEditPolicy(ScrolledCompositeInfo composite) {
+		m_composite = composite;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Requests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected ILayoutRequestValidator getRequestValidator() {
-    return ControlsLayoutRequestValidator.INSTANCE;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Requests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected ILayoutRequestValidator getRequestValidator() {
+		return ControlsLayoutRequestValidator.INSTANCE;
+	}
 
-  @Override
-  protected boolean isRequestCondition(Request request) {
-    return super.isRequestCondition(request) && m_composite.getContent() == null;
-  }
+	@Override
+	protected boolean isRequestCondition(Request request) {
+		return super.isRequestCondition(request) && m_composite.getContent() == null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Feedbacks
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void showLayoutTargetFeedback(Request request) {
-    PolicyUtils.showBorderTargetFeedback(this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Feedbacks
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void showLayoutTargetFeedback(Request request) {
+		PolicyUtils.showBorderTargetFeedback(this);
+	}
 
-  @Override
-  protected void eraseLayoutTargetFeedback(Request request) {
-    PolicyUtils.eraseBorderTargetFeedback(this);
-  }
+	@Override
+	protected void eraseLayoutTargetFeedback(Request request) {
+		PolicyUtils.eraseBorderTargetFeedback(this);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Command getCreateCommand(CreateRequest request) {
-    final ControlInfo control = (ControlInfo) request.getNewObject();
-    return new EditCommand(m_composite) {
-      @Override
-      protected void executeEdit() throws Exception {
-        m_composite.command_CREATE(control);
-      }
-    };
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Command getCreateCommand(CreateRequest request) {
+		final ControlInfo control = (ControlInfo) request.getNewObject();
+		return new EditCommand(m_composite) {
+			@Override
+			protected void executeEdit() throws Exception {
+				m_composite.command_CREATE(control);
+			}
+		};
+	}
 
-  @Override
-  protected Command getPasteCommand(PasteRequest request) {
-    return LayoutPolicyUtils2.getPasteCommand(
-        m_composite,
-        request,
-        ControlInfo.class,
-        new IPasteProcessor<ControlInfo>() {
-          @Override
-          public void process(ControlInfo control) throws Exception {
-            m_composite.command_CREATE(control);
-          }
-        });
-  }
+	@Override
+	protected Command getPasteCommand(PasteRequest request) {
+		return LayoutPolicyUtils2.getPasteCommand(
+				m_composite,
+				request,
+				ControlInfo.class,
+				new IPasteProcessor<ControlInfo>() {
+					@Override
+					public void process(ControlInfo control) throws Exception {
+						m_composite.command_CREATE(control);
+					}
+				});
+	}
 
-  @Override
-  protected Command getAddCommand(ChangeBoundsRequest request) {
-    if (request.getEditParts().size() == 1) {
-      final ControlInfo control = (ControlInfo) request.getEditParts().get(0).getModel();
-      return new EditCommand(m_composite) {
-        @Override
-        protected void executeEdit() throws Exception {
-          m_composite.command_ADD(control);
-        }
-      };
-    }
-    return null;
-  }
+	@Override
+	protected Command getAddCommand(ChangeBoundsRequest request) {
+		if (request.getEditParts().size() == 1) {
+			final ControlInfo control = (ControlInfo) request.getEditParts().get(0).getModel();
+			return new EditCommand(m_composite) {
+				@Override
+				protected void executeEdit() throws Exception {
+					m_composite.command_ADD(control);
+				}
+			};
+		}
+		return null;
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/widgets/TreeTreeColumnSelectionEditPolicy.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/widgets/TreeTreeColumnSelectionEditPolicy.java
index cb988b165..e8faa2b5e 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/widgets/TreeTreeColumnSelectionEditPolicy.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/widgets/TreeTreeColumnSelectionEditPolicy.java
@@ -40,126 +40,126 @@
  * @coverage rcp.gef.policy
  */
 public final class TreeTreeColumnSelectionEditPolicy extends SelectionEditPolicy {
-  private static final String REQ_RESIZE = "resize";
-  private final ITreeColumnInfo m_column;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public TreeTreeColumnSelectionEditPolicy(ITreeColumnInfo column) {
-    m_column = column;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Handles
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected List<Handle> createSelectionHandles() {
-    List<Handle> handles = Lists.newArrayList();
-    // create move column handle
-    MoveHandle moveHandle = new MoveHandle(getHost());
-    moveHandle.setForeground(IColorConstants.red);
-    handles.add(moveHandle);
-    //
-    return handles;
-  }
-
-  @Override
-  protected List<Handle> createStaticHandles() {
-    List<Handle> handles = Lists.newArrayList();
-    // create resize column handle
-    SideResizeHandle resizeHandle =
-        new SideResizeHandle(getHost(), IPositionConstants.RIGHT, 10, true);
-    resizeHandle.setDragTrackerTool(new ResizeTracker(getHost(),
-        IPositionConstants.EAST,
-        REQ_RESIZE));
-    handles.add(resizeHandle);
-    //
-    return handles;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Routing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean understandsRequest(Request request) {
-    return super.understandsRequest(request) || request.getType() == REQ_RESIZE;
-  }
-
-  @Override
-  public Command getCommand(final Request request) {
-    return getResizeCommand((ChangeBoundsRequest) request);
-  }
-
-  @Override
-  public void showSourceFeedback(Request request) {
-    showResizeFeedback((ChangeBoundsRequest) request);
-  }
-
-  @Override
-  public void eraseSourceFeedback(Request request) {
-    eraseResizeFeedback((ChangeBoundsRequest) request);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Resize
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Figure m_resizeFeedback;
-  private TextFeedback m_textFeedback;
-
-  //
-  private Command getResizeCommand(ChangeBoundsRequest request) {
-    final Rectangle newBounds = request.getTransformedRectangle(getHostFigure().getBounds());
-    return new EditCommand(m_column) {
-      @Override
-      protected void executeEdit() throws Exception {
-        m_column.setWidth(newBounds.width);
-      }
-    };
-  }
-
-  private void showResizeFeedback(ChangeBoundsRequest request) {
-    if (m_resizeFeedback == null) {
-      // create selection feedback
-      {
-        m_resizeFeedback = new RectangleFigure();
-        m_resizeFeedback.setForeground(IColorConstants.red);
-        addFeedback(m_resizeFeedback);
-      }
-      // create text feedback
-      {
-        m_textFeedback = new TextFeedback(getFeedbackLayer());
-        m_textFeedback.add();
-      }
-    }
-    // prepare bounds
-    Rectangle bounds;
-    {
-      Figure hostFigure = getHostFigure();
-      bounds = request.getTransformedRectangle(hostFigure.getBounds());
-      FigureUtils.translateFigureToAbsolute(hostFigure, bounds.shrink(-1, -1));
-    }
-    // update selection feedback
-    m_resizeFeedback.setBounds(bounds);
-    // update text feedback
-    m_textFeedback.setText(Integer.toString(bounds.width - 2));
-    m_textFeedback.setLocation(request.getLocation().getTranslated(10, 10));
-  }
-
-  private void eraseResizeFeedback(ChangeBoundsRequest request) {
-    // erase selection feedback
-    removeFeedback(m_resizeFeedback);
-    m_resizeFeedback = null;
-    // erase text feedback
-    m_textFeedback.remove();
-    m_textFeedback = null;
-  }
+	private static final String REQ_RESIZE = "resize";
+	private final ITreeColumnInfo m_column;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public TreeTreeColumnSelectionEditPolicy(ITreeColumnInfo column) {
+		m_column = column;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Handles
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected List<Handle> createSelectionHandles() {
+		List<Handle> handles = Lists.newArrayList();
+		// create move column handle
+		MoveHandle moveHandle = new MoveHandle(getHost());
+		moveHandle.setForeground(IColorConstants.red);
+		handles.add(moveHandle);
+		//
+		return handles;
+	}
+
+	@Override
+	protected List<Handle> createStaticHandles() {
+		List<Handle> handles = Lists.newArrayList();
+		// create resize column handle
+		SideResizeHandle resizeHandle =
+				new SideResizeHandle(getHost(), IPositionConstants.RIGHT, 10, true);
+		resizeHandle.setDragTrackerTool(new ResizeTracker(getHost(),
+				IPositionConstants.EAST,
+				REQ_RESIZE));
+		handles.add(resizeHandle);
+		//
+		return handles;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Routing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean understandsRequest(Request request) {
+		return super.understandsRequest(request) || request.getType() == REQ_RESIZE;
+	}
+
+	@Override
+	public Command getCommand(final Request request) {
+		return getResizeCommand((ChangeBoundsRequest) request);
+	}
+
+	@Override
+	public void showSourceFeedback(Request request) {
+		showResizeFeedback((ChangeBoundsRequest) request);
+	}
+
+	@Override
+	public void eraseSourceFeedback(Request request) {
+		eraseResizeFeedback((ChangeBoundsRequest) request);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Resize
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Figure m_resizeFeedback;
+	private TextFeedback m_textFeedback;
+
+	//
+	private Command getResizeCommand(ChangeBoundsRequest request) {
+		final Rectangle newBounds = request.getTransformedRectangle(getHostFigure().getBounds());
+		return new EditCommand(m_column) {
+			@Override
+			protected void executeEdit() throws Exception {
+				m_column.setWidth(newBounds.width);
+			}
+		};
+	}
+
+	private void showResizeFeedback(ChangeBoundsRequest request) {
+		if (m_resizeFeedback == null) {
+			// create selection feedback
+			{
+				m_resizeFeedback = new RectangleFigure();
+				m_resizeFeedback.setForeground(IColorConstants.red);
+				addFeedback(m_resizeFeedback);
+			}
+			// create text feedback
+			{
+				m_textFeedback = new TextFeedback(getFeedbackLayer());
+				m_textFeedback.add();
+			}
+		}
+		// prepare bounds
+		Rectangle bounds;
+		{
+			Figure hostFigure = getHostFigure();
+			bounds = request.getTransformedRectangle(hostFigure.getBounds());
+			FigureUtils.translateFigureToAbsolute(hostFigure, bounds.shrink(-1, -1));
+		}
+		// update selection feedback
+		m_resizeFeedback.setBounds(bounds);
+		// update text feedback
+		m_textFeedback.setText(Integer.toString(bounds.width - 2));
+		m_textFeedback.setLocation(request.getLocation().getTranslated(10, 10));
+	}
+
+	private void eraseResizeFeedback(ChangeBoundsRequest request) {
+		// erase selection feedback
+		removeFeedback(m_resizeFeedback);
+		m_resizeFeedback = null;
+		// erase text feedback
+		m_textFeedback.remove();
+		m_textFeedback = null;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/widgets/ViewFormLayoutEditPolicy.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/widgets/ViewFormLayoutEditPolicy.java
index f3a1492c6..6f869558e 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/widgets/ViewFormLayoutEditPolicy.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/widgets/ViewFormLayoutEditPolicy.java
@@ -24,53 +24,53 @@
  * @coverage rcp.gef.policy
  */
 public final class ViewFormLayoutEditPolicy extends AbstractPositionCompositeLayoutEditPolicy {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Composite
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ViewFormLayoutEditPolicy(ViewFormInfo composite) {
-    super(composite);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Composite
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ViewFormLayoutEditPolicy(ViewFormInfo composite) {
+		super(composite);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Positions
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void addFeedbacks() throws Exception {
-    addFeedback2(
-        0.0,
-        0.0,
-        0.5,
-        0.2,
-        new Insets(0, 0, 1, 1),
-        GefMessages.ViewFormLayoutEditPolicy_posTopLeft,
-        "setTopLeft");
-    addFeedback2(
-        0.5,
-        0.0,
-        0.75,
-        0.2,
-        new Insets(0, 0, 1, 1),
-        GefMessages.ViewFormLayoutEditPolicy_posTopCenter,
-        "setTopCenter");
-    addFeedback2(
-        0.75,
-        0.0,
-        1.0,
-        0.2,
-        new Insets(0, 0, 1, 0),
-        GefMessages.ViewFormLayoutEditPolicy_posTopRight,
-        "setTopRight");
-    addFeedback2(
-        0.0,
-        0.2,
-        1.0,
-        1.0,
-        new Insets(0, 0, 0, 0),
-        GefMessages.ViewFormLayoutEditPolicy_posContent,
-        "setContent");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Positions
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void addFeedbacks() throws Exception {
+		addFeedback2(
+				0.0,
+				0.0,
+				0.5,
+				0.2,
+				new Insets(0, 0, 1, 1),
+				GefMessages.ViewFormLayoutEditPolicy_posTopLeft,
+				"setTopLeft");
+		addFeedback2(
+				0.5,
+				0.0,
+				0.75,
+				0.2,
+				new Insets(0, 0, 1, 1),
+				GefMessages.ViewFormLayoutEditPolicy_posTopCenter,
+				"setTopCenter");
+		addFeedback2(
+				0.75,
+				0.0,
+				1.0,
+				0.2,
+				new Insets(0, 0, 1, 0),
+				GefMessages.ViewFormLayoutEditPolicy_posTopRight,
+				"setTopRight");
+		addFeedback2(
+				0.0,
+				0.2,
+				1.0,
+				1.0,
+				new Insets(0, 0, 0, 0),
+				GefMessages.ViewFormLayoutEditPolicy_posContent,
+				"setContent");
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gefTree/EditPartFactory.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gefTree/EditPartFactory.java
index 1622bc4d6..db7355857 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gefTree/EditPartFactory.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gefTree/EditPartFactory.java
@@ -26,29 +26,29 @@
  * @coverage rcp.gefTree
  */
 public final class EditPartFactory implements IEditPartFactory {
-  private final static IEditPartFactory MATCHING_FACTORY =
-      new MatchingEditPartFactory(ImmutableList.of("org.eclipse.wb.internal.rcp.model"),
-          ImmutableList.of("org.eclipse.wb.internal.rcp.gefTree.part"));
+	private final static IEditPartFactory MATCHING_FACTORY =
+			new MatchingEditPartFactory(ImmutableList.of("org.eclipse.wb.internal.rcp.model"),
+					ImmutableList.of("org.eclipse.wb.internal.rcp.gefTree.part"));
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IEditPartFactory
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public EditPart createEditPart(EditPart context, Object model) {
-    // special Composite's
-    if (model instanceof CompositeInfo) {
-      CompositeInfo composite = (CompositeInfo) model;
-      // Form.getHead()
-      if (composite.getParent() instanceof FormInfo) {
-        FormInfo form = (FormInfo) composite.getParent();
-        if (form.getHead() == composite) {
-          return new FormHeadEditPart(form);
-        }
-      }
-    }
-    // most EditPart's can be created using matching
-    return MATCHING_FACTORY.createEditPart(context, model);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IEditPartFactory
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public EditPart createEditPart(EditPart context, Object model) {
+		// special Composite's
+		if (model instanceof CompositeInfo) {
+			CompositeInfo composite = (CompositeInfo) model;
+			// Form.getHead()
+			if (composite.getParent() instanceof FormInfo) {
+				FormInfo form = (FormInfo) composite.getParent();
+				if (form.getHead() == composite) {
+					return new FormHeadEditPart(form);
+				}
+			}
+		}
+		// most EditPart's can be created using matching
+		return MATCHING_FACTORY.createEditPart(context, model);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gefTree/part/forms/FormHeadEditPart.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gefTree/part/forms/FormHeadEditPart.java
index 0f99efb2e..666b0d022 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gefTree/part/forms/FormHeadEditPart.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gefTree/part/forms/FormHeadEditPart.java
@@ -22,26 +22,26 @@
  * @coverage rcp.gefTree.part
  */
 public final class FormHeadEditPart extends CompositeEditPart {
-  private final FormInfo m_form;
+	private final FormInfo m_form;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FormHeadEditPart(FormInfo item) {
-    super(item.getHead());
-    m_form = item;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FormHeadEditPart(FormInfo item) {
+		super(item.getHead());
+		m_form = item;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Policy
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void refreshEditPolicies() {
-    super.refreshEditPolicies();
-    installEditPolicy(new FormHeadLayoutEditPolicy(m_form));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Policy
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void refreshEditPolicies() {
+		super.refreshEditPolicies();
+		installEditPolicy(new FormHeadLayoutEditPolicy(m_form));
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gefTree/part/jface/action/ContributionManagerEditPart.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gefTree/part/jface/action/ContributionManagerEditPart.java
index 399478a26..ba03de745 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gefTree/part/jface/action/ContributionManagerEditPart.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gefTree/part/jface/action/ContributionManagerEditPart.java
@@ -22,23 +22,23 @@
  * @coverage rcp.gefTree.part
  */
 public final class ContributionManagerEditPart extends JavaEditPart {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ContributionManagerEditPart(ContributionManagerInfo manager) {
-    super(manager);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ContributionManagerEditPart(ContributionManagerInfo manager) {
+		super(manager);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Policy
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void refreshEditPolicies() {
-    super.refreshEditPolicies();
-    installEditPolicy(new TerminatorLayoutEditPolicy());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Policy
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void refreshEditPolicies() {
+		super.refreshEditPolicies();
+		installEditPolicy(new TerminatorLayoutEditPolicy());
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gefTree/part/rcp/perspective/shortcuts/AbstractShortcutContainerEditPart.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gefTree/part/rcp/perspective/shortcuts/AbstractShortcutContainerEditPart.java
index be4d0e139..385096ec4 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gefTree/part/rcp/perspective/shortcuts/AbstractShortcutContainerEditPart.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gefTree/part/rcp/perspective/shortcuts/AbstractShortcutContainerEditPart.java
@@ -21,12 +21,12 @@
  * @coverage rcp.gefTree.part
  */
 abstract class AbstractShortcutContainerEditPart extends ObjectEditPart {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractShortcutContainerEditPart(AbstractShortcutContainerInfo container) {
-    super(container);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractShortcutContainerEditPart(AbstractShortcutContainerInfo container) {
+		super(container);
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gefTree/part/rcp/perspective/shortcuts/FastViewContainerEditPart.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gefTree/part/rcp/perspective/shortcuts/FastViewContainerEditPart.java
index d66132cb0..bf4ea4852 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gefTree/part/rcp/perspective/shortcuts/FastViewContainerEditPart.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gefTree/part/rcp/perspective/shortcuts/FastViewContainerEditPart.java
@@ -21,26 +21,26 @@
  * @coverage rcp.gefTree.part
  */
 public final class FastViewContainerEditPart extends AbstractShortcutContainerEditPart {
-  private final FastViewContainerInfo m_container;
+	private final FastViewContainerInfo m_container;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FastViewContainerEditPart(FastViewContainerInfo container) {
-    super(container);
-    m_container = container;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FastViewContainerEditPart(FastViewContainerInfo container) {
+		super(container);
+		m_container = container;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Policies
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createEditPolicies() {
-    super.createEditPolicies();
-    installEditPolicy(new FastViewContainerLayoutEditPolicy(m_container));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Policies
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createEditPolicies() {
+		super.createEditPolicies();
+		installEditPolicy(new FastViewContainerLayoutEditPolicy(m_container));
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gefTree/part/rcp/perspective/shortcuts/PerspectiveShortcutContainerEditPart.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gefTree/part/rcp/perspective/shortcuts/PerspectiveShortcutContainerEditPart.java
index 4373adb50..d78ccc11e 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gefTree/part/rcp/perspective/shortcuts/PerspectiveShortcutContainerEditPart.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gefTree/part/rcp/perspective/shortcuts/PerspectiveShortcutContainerEditPart.java
@@ -21,26 +21,26 @@
  * @coverage rcp.gefTree.part
  */
 public final class PerspectiveShortcutContainerEditPart extends AbstractShortcutContainerEditPart {
-  private final PerspectiveShortcutContainerInfo m_container;
+	private final PerspectiveShortcutContainerInfo m_container;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public PerspectiveShortcutContainerEditPart(PerspectiveShortcutContainerInfo container) {
-    super(container);
-    m_container = container;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public PerspectiveShortcutContainerEditPart(PerspectiveShortcutContainerInfo container) {
+		super(container);
+		m_container = container;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Policies
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createEditPolicies() {
-    super.createEditPolicies();
-    installEditPolicy(new PerspectiveShortcutContainerLayoutEditPolicy(m_container));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Policies
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createEditPolicies() {
+		super.createEditPolicies();
+		installEditPolicy(new PerspectiveShortcutContainerLayoutEditPolicy(m_container));
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gefTree/part/rcp/perspective/shortcuts/ViewShortcutContainerEditPart.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gefTree/part/rcp/perspective/shortcuts/ViewShortcutContainerEditPart.java
index 3dd877844..cbeabd604 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gefTree/part/rcp/perspective/shortcuts/ViewShortcutContainerEditPart.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gefTree/part/rcp/perspective/shortcuts/ViewShortcutContainerEditPart.java
@@ -21,26 +21,26 @@
  * @coverage rcp.gefTree.part
  */
 public final class ViewShortcutContainerEditPart extends AbstractShortcutContainerEditPart {
-  private final ViewShortcutContainerInfo m_container;
+	private final ViewShortcutContainerInfo m_container;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ViewShortcutContainerEditPart(ViewShortcutContainerInfo container) {
-    super(container);
-    m_container = container;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ViewShortcutContainerEditPart(ViewShortcutContainerInfo container) {
+		super(container);
+		m_container = container;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Policies
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createEditPolicies() {
-    super.createEditPolicies();
-    installEditPolicy(new ViewShortcutContainerLayoutEditPolicy(m_container));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Policies
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createEditPolicies() {
+		super.createEditPolicies();
+		installEditPolicy(new ViewShortcutContainerLayoutEditPolicy(m_container));
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gefTree/part/widgets/AbstractPositionEditPart.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gefTree/part/widgets/AbstractPositionEditPart.java
index e97f056bb..dbc0b8cad 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gefTree/part/widgets/AbstractPositionEditPart.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gefTree/part/widgets/AbstractPositionEditPart.java
@@ -22,26 +22,26 @@
  * @coverage rcp.gefTree.part
  */
 public final class AbstractPositionEditPart extends ObjectEditPart {
-  private final AbstractPositionInfo m_position;
+	private final AbstractPositionInfo m_position;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractPositionEditPart(AbstractPositionInfo position) {
-    super(position);
-    m_position = position;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractPositionEditPart(AbstractPositionInfo position) {
+		super(position);
+		m_position = position;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Policy
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void refreshEditPolicies() {
-    super.refreshEditPolicies();
-    installEditPolicy(new AbstractPositionLayoutEditPolicy(m_position));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Policy
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void refreshEditPolicies() {
+		super.refreshEditPolicies();
+		installEditPolicy(new AbstractPositionLayoutEditPolicy(m_position));
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gefTree/policy/AbstractPositionLayoutEditPolicy.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gefTree/policy/AbstractPositionLayoutEditPolicy.java
index b572bf6f4..8522b0d29 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gefTree/policy/AbstractPositionLayoutEditPolicy.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gefTree/policy/AbstractPositionLayoutEditPolicy.java
@@ -24,47 +24,47 @@
  * @coverage rcp.gefTree.policy
  */
 public final class AbstractPositionLayoutEditPolicy
-    extends
-      SingleObjectLayoutEditPolicy<ControlInfo> {
-  private final AbstractPositionInfo m_position;
+extends
+SingleObjectLayoutEditPolicy<ControlInfo> {
+	private final AbstractPositionInfo m_position;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractPositionLayoutEditPolicy(AbstractPositionInfo position) {
-    super(position.getComposite());
-    m_position = position;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractPositionLayoutEditPolicy(AbstractPositionInfo position) {
+		super(position.getComposite());
+		m_position = position;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Requests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected ILayoutRequestValidator getRequestValidator() {
-    return ControlsLayoutRequestValidator.INSTANCE;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Requests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected ILayoutRequestValidator getRequestValidator() {
+		return ControlsLayoutRequestValidator.INSTANCE;
+	}
 
-  @Override
-  protected boolean isEmpty() {
-    return true;
-  }
+	@Override
+	protected boolean isEmpty() {
+		return true;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void command_CREATE(ControlInfo control) throws Exception {
-    m_position.command_CREATE(control);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void command_CREATE(ControlInfo control) throws Exception {
+		m_position.command_CREATE(control);
+	}
 
-  @Override
-  protected void command_ADD(ControlInfo control) throws Exception {
-    m_position.command_MOVE(control);
-  }
+	@Override
+	protected void command_ADD(ControlInfo control) throws Exception {
+		m_position.command_MOVE(control);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gefTree/policy/RcpPolicyConfigurator.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gefTree/policy/RcpPolicyConfigurator.java
index 4a861c76b..d6b7238e0 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gefTree/policy/RcpPolicyConfigurator.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gefTree/policy/RcpPolicyConfigurator.java
@@ -24,16 +24,16 @@
  * @coverage rcp.gefTree.policy
  */
 public final class RcpPolicyConfigurator implements IEditPartConfigurator {
-  @Override
-  public void configure(EditPart context, EditPart editPart) {
-    // allow drop Action on MenuManager
-    if (editPart.getModel() instanceof MenuManagerInfo) {
-      editPart.addRequestProcessor(ActionDropRequestProcessor.INSTANCE);
-    }
-    // allow drop ControlDecoration on ControlInfo
-    if (editPart.getModel() instanceof ControlInfo) {
-      ControlInfo control = (ControlInfo) editPart.getModel();
-      editPart.installEditPolicy(new ControlDecorationDropLayoutEditPolicy(control));
-    }
-  }
+	@Override
+	public void configure(EditPart context, EditPart editPart) {
+		// allow drop Action on MenuManager
+		if (editPart.getModel() instanceof MenuManagerInfo) {
+			editPart.addRequestProcessor(ActionDropRequestProcessor.INSTANCE);
+		}
+		// allow drop ControlDecoration on ControlInfo
+		if (editPart.getModel() instanceof ControlInfo) {
+			ControlInfo control = (ControlInfo) editPart.getModel();
+			editPart.installEditPolicy(new ControlDecorationDropLayoutEditPolicy(control));
+		}
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gefTree/policy/forms/FormHeadLayoutEditPolicy.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gefTree/policy/forms/FormHeadLayoutEditPolicy.java
index bb7542829..e75104033 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gefTree/policy/forms/FormHeadLayoutEditPolicy.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gefTree/policy/forms/FormHeadLayoutEditPolicy.java
@@ -24,45 +24,45 @@
  * @coverage rcp.gefTree.policy
  */
 public final class FormHeadLayoutEditPolicy extends SingleObjectLayoutEditPolicy<ControlInfo> {
-  private final FormInfo m_form;
+	private final FormInfo m_form;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FormHeadLayoutEditPolicy(FormInfo item) {
-    super(item);
-    m_form = item;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FormHeadLayoutEditPolicy(FormInfo item) {
+		super(item);
+		m_form = item;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Requests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected ILayoutRequestValidator getRequestValidator() {
-    return ControlsLayoutRequestValidator.INSTANCE;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Requests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected ILayoutRequestValidator getRequestValidator() {
+		return ControlsLayoutRequestValidator.INSTANCE;
+	}
 
-  @Override
-  protected boolean isEmpty() {
-    return m_form.getHeadClient() == null;
-  }
+	@Override
+	protected boolean isEmpty() {
+		return m_form.getHeadClient() == null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void command_CREATE(ControlInfo control) throws Exception {
-    m_form.setHeadClient(control);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void command_CREATE(ControlInfo control) throws Exception {
+		m_form.setHeadClient(control);
+	}
 
-  @Override
-  protected void command_ADD(ControlInfo control) throws Exception {
-    m_form.setHeadClient(control);
-  }
+	@Override
+	protected void command_ADD(ControlInfo control) throws Exception {
+		m_form.setHeadClient(control);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gefTree/policy/jface/ControlDecorationDropLayoutEditPolicy.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gefTree/policy/jface/ControlDecorationDropLayoutEditPolicy.java
index bf87cb817..9c9b6b54f 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gefTree/policy/jface/ControlDecorationDropLayoutEditPolicy.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gefTree/policy/jface/ControlDecorationDropLayoutEditPolicy.java
@@ -24,50 +24,50 @@
  * @coverage rcp.gef.policy
  */
 public final class ControlDecorationDropLayoutEditPolicy
-    extends
-      SingleObjectLayoutEditPolicy<ControlDecorationInfo> {
-  private static final ILayoutRequestValidator VALIDATOR =
-      LayoutRequestValidators.modelType(ControlDecorationInfo.class);
-  private final ControlInfo m_control;
+extends
+SingleObjectLayoutEditPolicy<ControlDecorationInfo> {
+	private static final ILayoutRequestValidator VALIDATOR =
+			LayoutRequestValidators.modelType(ControlDecorationInfo.class);
+	private final ControlInfo m_control;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ControlDecorationDropLayoutEditPolicy(ControlInfo control) {
-    super(control);
-    m_control = control;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ControlDecorationDropLayoutEditPolicy(ControlInfo control) {
+		super(control);
+		m_control = control;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Requests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected ILayoutRequestValidator getRequestValidator() {
-    return VALIDATOR;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Requests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected ILayoutRequestValidator getRequestValidator() {
+		return VALIDATOR;
+	}
 
-  @Override
-  protected boolean isEmpty() {
-    return m_control.getParent() != null
-        && m_control.getChildren(ControlDecorationInfo.class).isEmpty();
-  }
+	@Override
+	protected boolean isEmpty() {
+		return m_control.getParent() != null
+				&& m_control.getChildren(ControlDecorationInfo.class).isEmpty();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void command_CREATE(ControlDecorationInfo decoration) throws Exception {
-    decoration.command_CREATE(m_control);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void command_CREATE(ControlDecorationInfo decoration) throws Exception {
+		decoration.command_CREATE(m_control);
+	}
 
-  @Override
-  protected void command_ADD(ControlDecorationInfo decoration) throws Exception {
-    decoration.command_ADD(m_control);
-  }
+	@Override
+	protected void command_ADD(ControlDecorationInfo decoration) throws Exception {
+		decoration.command_ADD(m_control);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gefTree/policy/rcp/perspective/shortcuts/FastViewContainerLayoutEditPolicy.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gefTree/policy/rcp/perspective/shortcuts/FastViewContainerLayoutEditPolicy.java
index c731c91cf..22d47a00d 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gefTree/policy/rcp/perspective/shortcuts/FastViewContainerLayoutEditPolicy.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gefTree/policy/rcp/perspective/shortcuts/FastViewContainerLayoutEditPolicy.java
@@ -32,74 +32,74 @@
  * @coverage rcp.gefTree.policy
  */
 public final class FastViewContainerLayoutEditPolicy extends LayoutEditPolicy {
-  private static final ILayoutRequestValidator VALIDATOR =
-      LayoutRequestValidators.modelType(FastViewInfo.class);
-  private final PageLayoutInfo m_page;
-  private final FastViewContainerInfo m_container;
+	private static final ILayoutRequestValidator VALIDATOR =
+			LayoutRequestValidators.modelType(FastViewInfo.class);
+	private final PageLayoutInfo m_page;
+	private final FastViewContainerInfo m_container;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FastViewContainerLayoutEditPolicy(FastViewContainerInfo container) {
-    m_container = container;
-    m_page = container.getPage();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FastViewContainerLayoutEditPolicy(FastViewContainerInfo container) {
+		m_container = container;
+		m_page = container.getPage();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Requests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected boolean isGoodReferenceChild(Request request, EditPart editPart) {
-    return editPart.getModel() instanceof FastViewInfo;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Requests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected boolean isGoodReferenceChild(Request request, EditPart editPart) {
+		return editPart.getModel() instanceof FastViewInfo;
+	}
 
-  @Override
-  protected boolean isRequestCondition(Request request) {
-    return super.isRequestCondition(request) || request instanceof ViewDropRequest;
-  }
+	@Override
+	protected boolean isRequestCondition(Request request) {
+		return super.isRequestCondition(request) || request instanceof ViewDropRequest;
+	}
 
-  @Override
-  protected ILayoutRequestValidator getRequestValidator() {
-    return VALIDATOR;
-  }
+	@Override
+	protected ILayoutRequestValidator getRequestValidator() {
+		return VALIDATOR;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Command getCommand(Request request, Object referenceObject) {
-    if (request instanceof ViewDropRequest) {
-      final ViewDropRequest viewDrop_Request = (ViewDropRequest) request;
-      final ViewInfo viewInfo = viewDrop_Request.getView();
-      final FastViewInfo reference = (FastViewInfo) referenceObject;
-      return new EditCommand(m_page) {
-        @Override
-        protected void executeEdit() throws Exception {
-          FastViewInfo newView = m_container.command_CREATE(viewInfo.getId(), reference);
-          viewDrop_Request.setComponent(newView);
-        }
-      };
-    }
-    return super.getCommand(request, referenceObject);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Command getCommand(Request request, Object referenceObject) {
+		if (request instanceof ViewDropRequest) {
+			final ViewDropRequest viewDrop_Request = (ViewDropRequest) request;
+			final ViewInfo viewInfo = viewDrop_Request.getView();
+			final FastViewInfo reference = (FastViewInfo) referenceObject;
+			return new EditCommand(m_page) {
+				@Override
+				protected void executeEdit() throws Exception {
+					FastViewInfo newView = m_container.command_CREATE(viewInfo.getId(), reference);
+					viewDrop_Request.setComponent(newView);
+				}
+			};
+		}
+		return super.getCommand(request, referenceObject);
+	}
 
-  @Override
-  protected Command getMoveCommand(final List<EditPart> moveParts, Object referenceObject) {
-    final FastViewInfo nextItem = (FastViewInfo) referenceObject;
-    return new EditCommand(m_page) {
-      @Override
-      protected void executeEdit() throws Exception {
-        for (EditPart movePart : moveParts) {
-          FastViewInfo item = (FastViewInfo) movePart.getModel();
-          m_container.command_MOVE(item, nextItem);
-        }
-      }
-    };
-  }
+	@Override
+	protected Command getMoveCommand(final List<EditPart> moveParts, Object referenceObject) {
+		final FastViewInfo nextItem = (FastViewInfo) referenceObject;
+		return new EditCommand(m_page) {
+			@Override
+			protected void executeEdit() throws Exception {
+				for (EditPart movePart : moveParts) {
+					FastViewInfo item = (FastViewInfo) movePart.getModel();
+					m_container.command_MOVE(item, nextItem);
+				}
+			}
+		};
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gefTree/policy/rcp/perspective/shortcuts/PerspectiveShortcutContainerLayoutEditPolicy.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gefTree/policy/rcp/perspective/shortcuts/PerspectiveShortcutContainerLayoutEditPolicy.java
index 8aee0dff1..b97bb9103 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gefTree/policy/rcp/perspective/shortcuts/PerspectiveShortcutContainerLayoutEditPolicy.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gefTree/policy/rcp/perspective/shortcuts/PerspectiveShortcutContainerLayoutEditPolicy.java
@@ -33,90 +33,90 @@
  * @coverage rcp.gefTree.policy
  */
 public final class PerspectiveShortcutContainerLayoutEditPolicy extends LayoutEditPolicy {
-  private static final ILayoutRequestValidator VALIDATOR =
-      LayoutRequestValidators.modelType(PerspectiveShortcutInfo.class);
-  private final PageLayoutInfo m_page;
-  private final PerspectiveShortcutContainerInfo m_container;
+	private static final ILayoutRequestValidator VALIDATOR =
+			LayoutRequestValidators.modelType(PerspectiveShortcutInfo.class);
+	private final PageLayoutInfo m_page;
+	private final PerspectiveShortcutContainerInfo m_container;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public PerspectiveShortcutContainerLayoutEditPolicy(PerspectiveShortcutContainerInfo container) {
-    m_container = container;
-    m_page = container.getPage();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public PerspectiveShortcutContainerLayoutEditPolicy(PerspectiveShortcutContainerInfo container) {
+		m_container = container;
+		m_page = container.getPage();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Requests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected boolean isGoodReferenceChild(Request request, EditPart editPart) {
-    return editPart.getModel() instanceof PerspectiveShortcutInfo;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Requests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected boolean isGoodReferenceChild(Request request, EditPart editPart) {
+		return editPart.getModel() instanceof PerspectiveShortcutInfo;
+	}
 
-  @Override
-  protected boolean isRequestCondition(Request request) {
-    return super.isRequestCondition(request) || request instanceof PerspectiveDropRequest;
-  }
+	@Override
+	protected boolean isRequestCondition(Request request) {
+		return super.isRequestCondition(request) || request instanceof PerspectiveDropRequest;
+	}
 
-  @Override
-  protected ILayoutRequestValidator getRequestValidator() {
-    return VALIDATOR;
-  }
+	@Override
+	protected ILayoutRequestValidator getRequestValidator() {
+		return VALIDATOR;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Command getCommand(Request request, Object referenceObject) {
-    if (request instanceof PerspectiveDropRequest) {
-      final PerspectiveDropRequest perspectiveDrop_Request = (PerspectiveDropRequest) request;
-      final PerspectiveInfo perspectiveInfo = perspectiveDrop_Request.getPerspective();
-      final PerspectiveShortcutInfo reference = (PerspectiveShortcutInfo) referenceObject;
-      return new EditCommand(m_page) {
-        @Override
-        protected void executeEdit() throws Exception {
-          PerspectiveShortcutInfo newPerspective =
-              m_container.command_CREATE(perspectiveInfo.getId(), reference);
-          perspectiveDrop_Request.setComponent(newPerspective);
-        }
-      };
-    }
-    return super.getCommand(request, referenceObject);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Command getCommand(Request request, Object referenceObject) {
+		if (request instanceof PerspectiveDropRequest) {
+			final PerspectiveDropRequest perspectiveDrop_Request = (PerspectiveDropRequest) request;
+			final PerspectiveInfo perspectiveInfo = perspectiveDrop_Request.getPerspective();
+			final PerspectiveShortcutInfo reference = (PerspectiveShortcutInfo) referenceObject;
+			return new EditCommand(m_page) {
+				@Override
+				protected void executeEdit() throws Exception {
+					PerspectiveShortcutInfo newPerspective =
+							m_container.command_CREATE(perspectiveInfo.getId(), reference);
+					perspectiveDrop_Request.setComponent(newPerspective);
+				}
+			};
+		}
+		return super.getCommand(request, referenceObject);
+	}
 
-  @Override
-  protected Command getCreateCommand(Object newObject, Object referenceObject) {
-    return null;
-  }
+	@Override
+	protected Command getCreateCommand(Object newObject, Object referenceObject) {
+		return null;
+	}
 
-  @Override
-  protected Command getPasteCommand(PasteRequest request, Object referenceObject) {
-    return null;
-  }
+	@Override
+	protected Command getPasteCommand(PasteRequest request, Object referenceObject) {
+		return null;
+	}
 
-  @Override
-  protected Command getMoveCommand(final List<EditPart> moveParts, Object referenceObject) {
-    final PerspectiveShortcutInfo nextItem = (PerspectiveShortcutInfo) referenceObject;
-    return new EditCommand(m_page) {
-      @Override
-      protected void executeEdit() throws Exception {
-        for (EditPart movePart : moveParts) {
-          PerspectiveShortcutInfo item = (PerspectiveShortcutInfo) movePart.getModel();
-          m_container.command_MOVE(item, nextItem);
-        }
-      }
-    };
-  }
+	@Override
+	protected Command getMoveCommand(final List<EditPart> moveParts, Object referenceObject) {
+		final PerspectiveShortcutInfo nextItem = (PerspectiveShortcutInfo) referenceObject;
+		return new EditCommand(m_page) {
+			@Override
+			protected void executeEdit() throws Exception {
+				for (EditPart movePart : moveParts) {
+					PerspectiveShortcutInfo item = (PerspectiveShortcutInfo) movePart.getModel();
+					m_container.command_MOVE(item, nextItem);
+				}
+			}
+		};
+	}
 
-  @Override
-  protected Command getAddCommand(List<EditPart> addParts, Object referenceObject) {
-    return getMoveCommand(addParts, referenceObject);
-  }
+	@Override
+	protected Command getAddCommand(List<EditPart> addParts, Object referenceObject) {
+		return getMoveCommand(addParts, referenceObject);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gefTree/policy/rcp/perspective/shortcuts/ViewShortcutContainerLayoutEditPolicy.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gefTree/policy/rcp/perspective/shortcuts/ViewShortcutContainerLayoutEditPolicy.java
index df6e172f1..95b1996fc 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gefTree/policy/rcp/perspective/shortcuts/ViewShortcutContainerLayoutEditPolicy.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gefTree/policy/rcp/perspective/shortcuts/ViewShortcutContainerLayoutEditPolicy.java
@@ -32,74 +32,74 @@
  * @coverage rcp.gefTree.policy
  */
 public final class ViewShortcutContainerLayoutEditPolicy extends LayoutEditPolicy {
-  private static final ILayoutRequestValidator VALIDATOR =
-      LayoutRequestValidators.modelType(ViewShortcutInfo.class);
-  private final PageLayoutInfo m_page;
-  private final ViewShortcutContainerInfo m_container;
+	private static final ILayoutRequestValidator VALIDATOR =
+			LayoutRequestValidators.modelType(ViewShortcutInfo.class);
+	private final PageLayoutInfo m_page;
+	private final ViewShortcutContainerInfo m_container;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ViewShortcutContainerLayoutEditPolicy(ViewShortcutContainerInfo container) {
-    m_container = container;
-    m_page = container.getPage();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ViewShortcutContainerLayoutEditPolicy(ViewShortcutContainerInfo container) {
+		m_container = container;
+		m_page = container.getPage();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Requests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected boolean isGoodReferenceChild(Request request, EditPart editPart) {
-    return editPart.getModel() instanceof ViewShortcutInfo;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Requests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected boolean isGoodReferenceChild(Request request, EditPart editPart) {
+		return editPart.getModel() instanceof ViewShortcutInfo;
+	}
 
-  @Override
-  protected boolean isRequestCondition(Request request) {
-    return super.isRequestCondition(request) || request instanceof ViewDropRequest;
-  }
+	@Override
+	protected boolean isRequestCondition(Request request) {
+		return super.isRequestCondition(request) || request instanceof ViewDropRequest;
+	}
 
-  @Override
-  protected ILayoutRequestValidator getRequestValidator() {
-    return VALIDATOR;
-  }
+	@Override
+	protected ILayoutRequestValidator getRequestValidator() {
+		return VALIDATOR;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Command getCommand(Request request, Object referenceObject) {
-    if (request instanceof ViewDropRequest) {
-      final ViewDropRequest viewDrop_Request = (ViewDropRequest) request;
-      final ViewInfo viewInfo = viewDrop_Request.getView();
-      final ViewShortcutInfo reference = (ViewShortcutInfo) referenceObject;
-      return new EditCommand(m_page) {
-        @Override
-        protected void executeEdit() throws Exception {
-          ViewShortcutInfo newView = m_container.command_CREATE(viewInfo.getId(), reference);
-          viewDrop_Request.setComponent(newView);
-        }
-      };
-    }
-    return super.getCommand(request, referenceObject);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Command getCommand(Request request, Object referenceObject) {
+		if (request instanceof ViewDropRequest) {
+			final ViewDropRequest viewDrop_Request = (ViewDropRequest) request;
+			final ViewInfo viewInfo = viewDrop_Request.getView();
+			final ViewShortcutInfo reference = (ViewShortcutInfo) referenceObject;
+			return new EditCommand(m_page) {
+				@Override
+				protected void executeEdit() throws Exception {
+					ViewShortcutInfo newView = m_container.command_CREATE(viewInfo.getId(), reference);
+					viewDrop_Request.setComponent(newView);
+				}
+			};
+		}
+		return super.getCommand(request, referenceObject);
+	}
 
-  @Override
-  protected Command getMoveCommand(final List<EditPart> moveParts, Object referenceObject) {
-    final ViewShortcutInfo nextItem = (ViewShortcutInfo) referenceObject;
-    return new EditCommand(m_page) {
-      @Override
-      protected void executeEdit() throws Exception {
-        for (EditPart movePart : moveParts) {
-          ViewShortcutInfo item = (ViewShortcutInfo) movePart.getModel();
-          m_container.command_MOVE(item, nextItem);
-        }
-      }
-    };
-  }
+	@Override
+	protected Command getMoveCommand(final List<EditPart> moveParts, Object referenceObject) {
+		final ViewShortcutInfo nextItem = (ViewShortcutInfo) referenceObject;
+		return new EditCommand(m_page) {
+			@Override
+			protected void executeEdit() throws Exception {
+				for (EditPart movePart : moveParts) {
+					ViewShortcutInfo item = (ViewShortcutInfo) movePart.getModel();
+					m_container.command_MOVE(item, nextItem);
+				}
+			}
+		};
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/laf/BaselineSupport.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/laf/BaselineSupport.java
index 2d14284fa..feda059df 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/laf/BaselineSupport.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/laf/BaselineSupport.java
@@ -21,11 +21,11 @@
  * @author mitin_aa
  */
 public class BaselineSupport implements IBaselineSupport {
-  @Override
-  public int getBaseline(Object component) {
-    if (!(component instanceof Control)) {
-      return NO_BASELINE;
-    }
-    return Baseline.getBaseline((Control) component);
-  }
+	@Override
+	public int getBaseline(Object component) {
+		if (!(component instanceof Control)) {
+			return NO_BASELINE;
+		}
+		return Baseline.getBaseline((Control) component);
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/ModelMessages.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/ModelMessages.java
index 3c6588bf4..bc8ff7380 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/ModelMessages.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/ModelMessages.java
@@ -3,130 +3,130 @@
 import org.eclipse.osgi.util.NLS;
 
 public class ModelMessages extends NLS {
-  private static final String BUNDLE_NAME = "org.eclipse.wb.internal.rcp.model.ModelMessages"; //$NON-NLS-1$
-  public static String RcpToolkitDescription_name;
-  public static String ActionBarAdvisorInfo_factoryCategoryDescription;
-  public static String ActionBarAdvisorInfo_factoryCategoryName;
-  public static String ActionBarAdvisorInfo_systemCategoryDescription;
-  public static String ActionBarAdvisorInfo_systemCategoryName;
-  public static String CategoriesAndViewsDialog_editCategoryButton;
-  public static String CategoriesAndViewsDialog_editCategoryMessage;
-  public static String CategoriesAndViewsDialog_editCategoryTitle;
-  public static String CategoriesAndViewsDialog_hintText;
-  public static String CategoriesAndViewsDialog_newCategoryButton;
-  public static String CategoriesAndViewsDialog_newCategoryMessage;
-  public static String CategoriesAndViewsDialog_newCategoryTitle;
-  public static String CategoriesAndViewsDialog_removeCategoryButton;
-  public static String CategoriesAndViewsDialog_removeCategoryConfirmationMessage;
-  public static String CategoriesAndViewsDialog_removeCategoryConfirmationText;
-  public static String CategoriesAndViewsDialog_title;
-  public static String CategoriesAndViewsDialog_viewerTitle;
-  public static String ColumnLayoutAssistantPage_columnsGroup;
-  public static String ColumnLayoutAssistantPage_marginBottom;
-  public static String ColumnLayoutAssistantPage_marginLeft;
-  public static String ColumnLayoutAssistantPage_marginRight;
-  public static String ColumnLayoutAssistantPage_marginsGroup;
-  public static String ColumnLayoutAssistantPage_marginTop;
-  public static String ColumnLayoutAssistantPage_maxColumns;
-  public static String ColumnLayoutAssistantPage_minColumns;
-  public static String ColumnLayoutAssistantPage_spacingGroup;
-  public static String ColumnLayoutAssistantPage_spacingHorizontal;
-  public static String ColumnLayoutAssistantPage_spacingVertical;
-  public static String ColumnLayoutDataAssistantPage_alignmentCenter;
-  public static String ColumnLayoutDataAssistantPage_alignmentFill;
-  public static String ColumnLayoutDataAssistantPage_alignmentGroup;
-  public static String ColumnLayoutDataAssistantPage_alignmentLeft;
-  public static String ColumnLayoutDataAssistantPage_alignmentRight;
-  public static String ColumnLayoutDataAssistantPage_heightHint;
-  public static String ColumnLayoutDataAssistantPage_sizeGroup;
-  public static String ColumnLayoutDataAssistantPage_widthHint;
-  public static String ColumnLayoutSelectionActionsSupport_alignmentCenter;
-  public static String ColumnLayoutSelectionActionsSupport_alignmentFill;
-  public static String ColumnLayoutSelectionActionsSupport_alignmentLeft;
-  public static String ColumnLayoutSelectionActionsSupport_alignmentRight;
-  public static String DialogButtonIdPropertyEditor_categoryCustom;
-  public static String DialogButtonIdPropertyEditor_categoryStandard;
-  public static String DialogButtonIdPropertyEditor_columnId;
-  public static String DialogButtonIdPropertyEditor_dialogTitle;
-  public static String DialogButtonIdPropertyEditor_errFieldAlreadyExists;
-  public static String DialogButtonIdPropertyEditor_errInvalidFieldValue;
-  public static String DialogButtonIdPropertyEditor_errUsedFieldValue;
-  public static String DialogButtonIdPropertyEditor_newButton;
-  public static String DialogButtonIdPropertyEditor_newDialogMessage;
-  public static String DialogButtonIdPropertyEditor_newDialogName;
-  public static String DialogButtonIdPropertyEditor_newDialogTitle;
-  public static String FieldEditorLabelsConstantsPropertyEditor_dialogFooter;
-  public static String FieldEditorLabelsConstantsPropertyEditor_dialogMessage;
-  public static String FieldEditorLabelsConstantsPropertyEditor_dialogTextLabel;
-  public static String FieldEditorLabelsConstantsPropertyEditor_dialogTitle;
-  public static String FieldEditorLabelsConstantsPropertyEditor_errInvalidFieldName;
-  public static String FieldEditorLabelsConstantsPropertyEditor_errLabelField;
-  public static String FieldEditorLabelsConstantsPropertyEditor_text;
-  public static String FormToolkitVariableSupport_noFormToolkit_configureMethod;
-  public static String MenuManagerInfo_emptyMessage;
-  public static String PageInfo_title;
-  public static String SelectionActionsSupport_haCenter;
-  public static String SelectionActionsSupport_haFill;
-  public static String SelectionActionsSupport_haGrab;
-  public static String SelectionActionsSupport_haLeft;
-  public static String SelectionActionsSupport_haRight;
-  public static String SelectionActionsSupport_vaBottom;
-  public static String SelectionActionsSupport_vaFill;
-  public static String SelectionActionsSupport_vaGrab;
-  public static String SelectionActionsSupport_vaMiddle;
-  public static String SelectionActionsSupport_vaTop;
-  public static String StackLayoutAssistantPage_marginHeight;
-  public static String StackLayoutAssistantPage_marginWidth;
-  public static String TableColumnLayoutInfo_errLine1;
-  public static String TableColumnLayoutInfo_errLine2;
-  public static String TableWrapDataInfo_haCenter;
-  public static String TableWrapDataInfo_haFill;
-  public static String TableWrapDataInfo_haGrab;
-  public static String TableWrapDataInfo_haLeft;
-  public static String TableWrapDataInfo_haRight;
-  public static String TableWrapDataInfo_managerHorizontalAlignment;
-  public static String TableWrapDataInfo_managerVerticalAlignment;
-  public static String TableWrapDataInfo_vaBottom;
-  public static String TableWrapDataInfo_vaGill;
-  public static String TableWrapDataInfo_vaGrab;
-  public static String TableWrapDataInfo_vaMiddle;
-  public static String TableWrapDataInfo_vaTop;
-  public static String TableWrapLayoutAssistantPage_makeEqualColumns;
-  public static String TableWrapLayoutAssistantPage_marginBottom;
-  public static String TableWrapLayoutAssistantPage_marginLeft;
-  public static String TableWrapLayoutAssistantPage_marginRight;
-  public static String TableWrapLayoutAssistantPage_marginsGroup;
-  public static String TableWrapLayoutAssistantPage_marginTop;
-  public static String TableWrapLayoutAssistantPage_numColumns;
-  public static String TableWrapLayoutAssistantPage_spacingGroup;
-  public static String TableWrapLayoutAssistantPage_spacingHorizontal;
-  public static String TableWrapLayoutAssistantPage_spacingVertical;
-  public static String TableWrapLayoutDataAssistantPage_alignmentGroup;
-  public static String TableWrapLayoutDataAssistantPage_haCenter;
-  public static String TableWrapLayoutDataAssistantPage_haFill;
-  public static String TableWrapLayoutDataAssistantPage_haGrab;
-  public static String TableWrapLayoutDataAssistantPage_haLeft;
-  public static String TableWrapLayoutDataAssistantPage_haRight;
-  public static String TableWrapLayoutDataAssistantPage_hintHeight;
-  public static String TableWrapLayoutDataAssistantPage_hintIndent;
-  public static String TableWrapLayoutDataAssistantPage_hintMaxHeight;
-  public static String TableWrapLayoutDataAssistantPage_hintMaxWidth;
-  public static String TableWrapLayoutDataAssistantPage_hintsGroup;
-  public static String TableWrapLayoutDataAssistantPage_horizontalGroup;
-  public static String TableWrapLayoutDataAssistantPage_vaBottom;
-  public static String TableWrapLayoutDataAssistantPage_vaCenter;
-  public static String TableWrapLayoutDataAssistantPage_vaFill;
-  public static String TableWrapLayoutDataAssistantPage_vaGrab;
-  public static String TableWrapLayoutDataAssistantPage_vaTop;
-  public static String TableWrapLayoutDataAssistantPage_verticalGroup;
-  public static String TreeColumnLayoutInfo_errLine1;
-  public static String TreeColumnLayoutInfo_errLine2;
-  public static String WindowInfo_minSizeActionText;
-  static {
-    // initialize resource bundle
-    NLS.initializeMessages(BUNDLE_NAME, ModelMessages.class);
-  }
+	private static final String BUNDLE_NAME = "org.eclipse.wb.internal.rcp.model.ModelMessages"; //$NON-NLS-1$
+	public static String RcpToolkitDescription_name;
+	public static String ActionBarAdvisorInfo_factoryCategoryDescription;
+	public static String ActionBarAdvisorInfo_factoryCategoryName;
+	public static String ActionBarAdvisorInfo_systemCategoryDescription;
+	public static String ActionBarAdvisorInfo_systemCategoryName;
+	public static String CategoriesAndViewsDialog_editCategoryButton;
+	public static String CategoriesAndViewsDialog_editCategoryMessage;
+	public static String CategoriesAndViewsDialog_editCategoryTitle;
+	public static String CategoriesAndViewsDialog_hintText;
+	public static String CategoriesAndViewsDialog_newCategoryButton;
+	public static String CategoriesAndViewsDialog_newCategoryMessage;
+	public static String CategoriesAndViewsDialog_newCategoryTitle;
+	public static String CategoriesAndViewsDialog_removeCategoryButton;
+	public static String CategoriesAndViewsDialog_removeCategoryConfirmationMessage;
+	public static String CategoriesAndViewsDialog_removeCategoryConfirmationText;
+	public static String CategoriesAndViewsDialog_title;
+	public static String CategoriesAndViewsDialog_viewerTitle;
+	public static String ColumnLayoutAssistantPage_columnsGroup;
+	public static String ColumnLayoutAssistantPage_marginBottom;
+	public static String ColumnLayoutAssistantPage_marginLeft;
+	public static String ColumnLayoutAssistantPage_marginRight;
+	public static String ColumnLayoutAssistantPage_marginsGroup;
+	public static String ColumnLayoutAssistantPage_marginTop;
+	public static String ColumnLayoutAssistantPage_maxColumns;
+	public static String ColumnLayoutAssistantPage_minColumns;
+	public static String ColumnLayoutAssistantPage_spacingGroup;
+	public static String ColumnLayoutAssistantPage_spacingHorizontal;
+	public static String ColumnLayoutAssistantPage_spacingVertical;
+	public static String ColumnLayoutDataAssistantPage_alignmentCenter;
+	public static String ColumnLayoutDataAssistantPage_alignmentFill;
+	public static String ColumnLayoutDataAssistantPage_alignmentGroup;
+	public static String ColumnLayoutDataAssistantPage_alignmentLeft;
+	public static String ColumnLayoutDataAssistantPage_alignmentRight;
+	public static String ColumnLayoutDataAssistantPage_heightHint;
+	public static String ColumnLayoutDataAssistantPage_sizeGroup;
+	public static String ColumnLayoutDataAssistantPage_widthHint;
+	public static String ColumnLayoutSelectionActionsSupport_alignmentCenter;
+	public static String ColumnLayoutSelectionActionsSupport_alignmentFill;
+	public static String ColumnLayoutSelectionActionsSupport_alignmentLeft;
+	public static String ColumnLayoutSelectionActionsSupport_alignmentRight;
+	public static String DialogButtonIdPropertyEditor_categoryCustom;
+	public static String DialogButtonIdPropertyEditor_categoryStandard;
+	public static String DialogButtonIdPropertyEditor_columnId;
+	public static String DialogButtonIdPropertyEditor_dialogTitle;
+	public static String DialogButtonIdPropertyEditor_errFieldAlreadyExists;
+	public static String DialogButtonIdPropertyEditor_errInvalidFieldValue;
+	public static String DialogButtonIdPropertyEditor_errUsedFieldValue;
+	public static String DialogButtonIdPropertyEditor_newButton;
+	public static String DialogButtonIdPropertyEditor_newDialogMessage;
+	public static String DialogButtonIdPropertyEditor_newDialogName;
+	public static String DialogButtonIdPropertyEditor_newDialogTitle;
+	public static String FieldEditorLabelsConstantsPropertyEditor_dialogFooter;
+	public static String FieldEditorLabelsConstantsPropertyEditor_dialogMessage;
+	public static String FieldEditorLabelsConstantsPropertyEditor_dialogTextLabel;
+	public static String FieldEditorLabelsConstantsPropertyEditor_dialogTitle;
+	public static String FieldEditorLabelsConstantsPropertyEditor_errInvalidFieldName;
+	public static String FieldEditorLabelsConstantsPropertyEditor_errLabelField;
+	public static String FieldEditorLabelsConstantsPropertyEditor_text;
+	public static String FormToolkitVariableSupport_noFormToolkit_configureMethod;
+	public static String MenuManagerInfo_emptyMessage;
+	public static String PageInfo_title;
+	public static String SelectionActionsSupport_haCenter;
+	public static String SelectionActionsSupport_haFill;
+	public static String SelectionActionsSupport_haGrab;
+	public static String SelectionActionsSupport_haLeft;
+	public static String SelectionActionsSupport_haRight;
+	public static String SelectionActionsSupport_vaBottom;
+	public static String SelectionActionsSupport_vaFill;
+	public static String SelectionActionsSupport_vaGrab;
+	public static String SelectionActionsSupport_vaMiddle;
+	public static String SelectionActionsSupport_vaTop;
+	public static String StackLayoutAssistantPage_marginHeight;
+	public static String StackLayoutAssistantPage_marginWidth;
+	public static String TableColumnLayoutInfo_errLine1;
+	public static String TableColumnLayoutInfo_errLine2;
+	public static String TableWrapDataInfo_haCenter;
+	public static String TableWrapDataInfo_haFill;
+	public static String TableWrapDataInfo_haGrab;
+	public static String TableWrapDataInfo_haLeft;
+	public static String TableWrapDataInfo_haRight;
+	public static String TableWrapDataInfo_managerHorizontalAlignment;
+	public static String TableWrapDataInfo_managerVerticalAlignment;
+	public static String TableWrapDataInfo_vaBottom;
+	public static String TableWrapDataInfo_vaGill;
+	public static String TableWrapDataInfo_vaGrab;
+	public static String TableWrapDataInfo_vaMiddle;
+	public static String TableWrapDataInfo_vaTop;
+	public static String TableWrapLayoutAssistantPage_makeEqualColumns;
+	public static String TableWrapLayoutAssistantPage_marginBottom;
+	public static String TableWrapLayoutAssistantPage_marginLeft;
+	public static String TableWrapLayoutAssistantPage_marginRight;
+	public static String TableWrapLayoutAssistantPage_marginsGroup;
+	public static String TableWrapLayoutAssistantPage_marginTop;
+	public static String TableWrapLayoutAssistantPage_numColumns;
+	public static String TableWrapLayoutAssistantPage_spacingGroup;
+	public static String TableWrapLayoutAssistantPage_spacingHorizontal;
+	public static String TableWrapLayoutAssistantPage_spacingVertical;
+	public static String TableWrapLayoutDataAssistantPage_alignmentGroup;
+	public static String TableWrapLayoutDataAssistantPage_haCenter;
+	public static String TableWrapLayoutDataAssistantPage_haFill;
+	public static String TableWrapLayoutDataAssistantPage_haGrab;
+	public static String TableWrapLayoutDataAssistantPage_haLeft;
+	public static String TableWrapLayoutDataAssistantPage_haRight;
+	public static String TableWrapLayoutDataAssistantPage_hintHeight;
+	public static String TableWrapLayoutDataAssistantPage_hintIndent;
+	public static String TableWrapLayoutDataAssistantPage_hintMaxHeight;
+	public static String TableWrapLayoutDataAssistantPage_hintMaxWidth;
+	public static String TableWrapLayoutDataAssistantPage_hintsGroup;
+	public static String TableWrapLayoutDataAssistantPage_horizontalGroup;
+	public static String TableWrapLayoutDataAssistantPage_vaBottom;
+	public static String TableWrapLayoutDataAssistantPage_vaCenter;
+	public static String TableWrapLayoutDataAssistantPage_vaFill;
+	public static String TableWrapLayoutDataAssistantPage_vaGrab;
+	public static String TableWrapLayoutDataAssistantPage_vaTop;
+	public static String TableWrapLayoutDataAssistantPage_verticalGroup;
+	public static String TreeColumnLayoutInfo_errLine1;
+	public static String TreeColumnLayoutInfo_errLine2;
+	public static String WindowInfo_minSizeActionText;
+	static {
+		// initialize resource bundle
+		NLS.initializeMessages(BUNDLE_NAME, ModelMessages.class);
+	}
 
-  private ModelMessages() {
-  }
+	private ModelMessages() {
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/RcpInvocationEvaluatorInterceptor.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/RcpInvocationEvaluatorInterceptor.java
index ba1a7d936..2bf0ea83e 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/RcpInvocationEvaluatorInterceptor.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/RcpInvocationEvaluatorInterceptor.java
@@ -26,16 +26,16 @@
  * @coverage rcp.model
  */
 public final class RcpInvocationEvaluatorInterceptor extends InvocationEvaluatorInterceptor {
-  @Override
-  public Object evaluateAnonymous(EvaluationContext context,
-      ClassInstanceCreation expression,
-      ITypeBinding typeBinding,
-      ITypeBinding typeBindingConcrete,
-      IMethodBinding methodBinding,
-      Object[] arguments) throws Exception {
-    if (AstNodeUtils.isSuccessorOf(typeBinding, "org.eclipse.jface.action.Action")) {
-      return AstEvaluationEngine.createAnonymousInstance(context, methodBinding, arguments);
-    }
-    return AstEvaluationEngine.UNKNOWN;
-  }
+	@Override
+	public Object evaluateAnonymous(EvaluationContext context,
+			ClassInstanceCreation expression,
+			ITypeBinding typeBinding,
+			ITypeBinding typeBindingConcrete,
+			IMethodBinding methodBinding,
+			Object[] arguments) throws Exception {
+		if (AstNodeUtils.isSuccessorOf(typeBinding, "org.eclipse.jface.action.Action")) {
+			return AstEvaluationEngine.createAnonymousInstance(context, methodBinding, arguments);
+		}
+		return AstEvaluationEngine.UNKNOWN;
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/RcpMethodParameterEvaluator.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/RcpMethodParameterEvaluator.java
index 0df738222..da9d09d1b 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/RcpMethodParameterEvaluator.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/RcpMethodParameterEvaluator.java
@@ -28,29 +28,29 @@
  * @coverage rcp.model
  */
 public final class RcpMethodParameterEvaluator implements IMethodParameterEvaluator {
-  public static final IMethodParameterEvaluator INSTANCE = new RcpMethodParameterEvaluator();
-  public static final FormToolkit FORM_TOOLKIT = new FormToolkit(Display.getDefault());
+	public static final IMethodParameterEvaluator INSTANCE = new RcpMethodParameterEvaluator();
+	public static final FormToolkit FORM_TOOLKIT = new FormToolkit(Display.getDefault());
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IMethodParameterEvaluator
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Object evaluateParameter(EvaluationContext context,
-      MethodDeclaration methodDeclaration,
-      String methodSignature,
-      SingleVariableDeclaration parameter,
-      int index) throws Exception {
-    // FormToolkit parameter may be used before creating "this", passed in "super", so provide it
-    if (AstNodeUtils.isSuccessorOf(parameter, "org.eclipse.ui.forms.widgets.FormToolkit")) {
-      return FORM_TOOLKIT;
-    }
-    // provide empty, but not null, value for ISelection
-    if (AstNodeUtils.isSuccessorOf(parameter, "org.eclipse.jface.viewers.ISelection")) {
-      return new StructuredSelection();
-    }
-    // unknown parameter
-    return AstEvaluationEngine.UNKNOWN;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IMethodParameterEvaluator
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Object evaluateParameter(EvaluationContext context,
+			MethodDeclaration methodDeclaration,
+			String methodSignature,
+			SingleVariableDeclaration parameter,
+			int index) throws Exception {
+		// FormToolkit parameter may be used before creating "this", passed in "super", so provide it
+		if (AstNodeUtils.isSuccessorOf(parameter, "org.eclipse.ui.forms.widgets.FormToolkit")) {
+			return FORM_TOOLKIT;
+		}
+		// provide empty, but not null, value for ISelection
+		if (AstNodeUtils.isSuccessorOf(parameter, "org.eclipse.jface.viewers.ISelection")) {
+			return new StructuredSelection();
+		}
+		// unknown parameter
+		return AstEvaluationEngine.UNKNOWN;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/e4/E4PartInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/e4/E4PartInfo.java
index 5268a9b7b..f3bebe98b 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/e4/E4PartInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/e4/E4PartInfo.java
@@ -26,71 +26,71 @@
  * @coverage rcp.model.e4
  */
 public class E4PartInfo extends CompositeInfo {
-  private Shell m_shell;
+	private Shell m_shell;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public E4PartInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-    //JavaInfoUtils.scheduleSpecialRendering(this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public E4PartInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+		//JavaInfoUtils.scheduleSpecialRendering(this);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AbstractComponentInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /*@Override
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AbstractComponentInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/*@Override
   protected TopBoundsSupport createTopBoundsSupport() {
     return new E4PartTopBoundsSupport(this);
   }*/
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Hierarchy
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Object getComponentObject() {
-    return m_shell;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Hierarchy
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Object getComponentObject() {
+		return m_shell;
+	}
 
-  /**
-   * @return the top level {@link Shell}.
-   */
-  public Shell getShell() {
-    return m_shell;
-  }
+	/**
+	 * @return the top level {@link Shell}.
+	 */
+	public Shell getShell() {
+		return m_shell;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void refresh_create() throws Exception {
-    m_shell = new Shell(SWT.NONE);
-    m_shell.setLayout(new FillLayout());
-    setObject(m_shell);
-    super.refresh_create();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void refresh_create() throws Exception {
+		m_shell = new Shell(SWT.NONE);
+		m_shell.setLayout(new FillLayout());
+		setObject(m_shell);
+		super.refresh_create();
+	}
 
-  @Override
-  public void refresh_dispose() throws Exception {
-    if (m_shell != null) {
-      m_shell.dispose();
-      m_shell = null;
-    }
-    super.refresh_dispose();
-  }
+	@Override
+	public void refresh_dispose() throws Exception {
+		if (m_shell != null) {
+			m_shell.dispose();
+			m_shell = null;
+		}
+		super.refresh_dispose();
+	}
 
-  @Override
-  protected void refresh_fetch() throws Exception {
-    // TODO Auto-generated method stub
-    super.refresh_fetch();
-  }
+	@Override
+	protected void refresh_fetch() throws Exception {
+		// TODO Auto-generated method stub
+		super.refresh_fetch();
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/DetailsPageInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/DetailsPageInfo.java
index 14662da65..d3ead91e3 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/DetailsPageInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/DetailsPageInfo.java
@@ -39,147 +39,147 @@
  * @coverage rcp.model.forms
  */
 public final class DetailsPageInfo extends AbstractComponentInfo implements IJavaInfoRendering {
-  private InstanceFactoryInfo m_toolkit;
+	private InstanceFactoryInfo m_toolkit;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DetailsPageInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-    JavaInfoUtils.scheduleSpecialRendering(this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DetailsPageInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+		JavaInfoUtils.scheduleSpecialRendering(this);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Initializing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void initialize() throws Exception {
-    super.initialize();
-    prepare_hosting_ManagedForm();
-    m_toolkit = FormToolkitAccessUtils.createFormToolkit_usingAccess(this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Initializing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void initialize() throws Exception {
+		super.initialize();
+		prepare_hosting_ManagedForm();
+		m_toolkit = FormToolkitAccessUtils.createFormToolkit_usingAccess(this);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IJavaInfoRendering
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Shell m_shell;
-  private Object m_ManagedForm;
-  private Composite m_ManagedFormBody;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IJavaInfoRendering
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Shell m_shell;
+	private Object m_ManagedForm;
+	private Composite m_ManagedFormBody;
 
-  @Override
-  public void render() throws Exception {
-    m_toolkit.setObject(ReflectionUtils.invokeMethod(m_ManagedForm, "getToolkit()"));
-    // execute life cycle for IDetailsPage
-    ReflectionUtils.invokeMethod(
-        getObject(),
-        "initialize(org.eclipse.ui.forms.IManagedForm)",
-        m_ManagedForm);
-    ReflectionUtils.invokeMethod(
-        getObject(),
-        "createContents(org.eclipse.swt.widgets.Composite)",
-        m_ManagedFormBody);
-  }
+	@Override
+	public void render() throws Exception {
+		m_toolkit.setObject(ReflectionUtils.invokeMethod(m_ManagedForm, "getToolkit()"));
+		// execute life cycle for IDetailsPage
+		ReflectionUtils.invokeMethod(
+				getObject(),
+				"initialize(org.eclipse.ui.forms.IManagedForm)",
+				m_ManagedForm);
+		ReflectionUtils.invokeMethod(
+				getObject(),
+				"createContents(org.eclipse.swt.widgets.Composite)",
+				m_ManagedFormBody);
+	}
 
-  /**
-   * Prepares hosting {@link Shell} and {@link ManagedForm}.
-   */
-  private void prepare_hosting_ManagedForm() throws Exception {
-    ClassLoader editorLoader = JavaInfoUtils.getClassLoader(this);
-    // use same Shell and ManagedForm (so same FormToolkit instance) during life of this model
-    // We should use same FormToolkit, because some default values for Color/Font properties are
-    // from this FormToolkit, so will be disposed with FormToolkit.
-    if (m_shell == null) {
-      m_shell = new Shell();
-      m_shell.setLayout(new FillLayout());
-      // prepare ManagedForm instance
-      {
-        Class<?> class_ManagedForm = editorLoader.loadClass("org.eclipse.ui.forms.ManagedForm");
-        Constructor<?> constructor =
-            ReflectionUtils.getConstructor(class_ManagedForm, Composite.class);
-        m_ManagedForm = constructor.newInstance(m_shell);
-      }
-      // initialize ManagedForm.getForm().getBody()
-      {
-        Object formObject = ReflectionUtils.invokeMethod2(m_ManagedForm, "getForm");
-        m_ManagedFormBody = (Composite) ReflectionUtils.invokeMethod2(formObject, "getBody");
-      }
-      // schedule dispose
-      addBroadcastListener(new ObjectEventListener() {
-        @Override
-        public void dispose() throws Exception {
-          if (m_ManagedForm != null) {
-            ReflectionUtils.invokeMethod2(m_ManagedForm, "dispose");
-            m_ManagedForm = null;
-          }
-          if (m_shell != null) {
-            m_shell.dispose();
-            m_shell = null;
-          }
-        }
-      });
-    }
-  }
+	/**
+	 * Prepares hosting {@link Shell} and {@link ManagedForm}.
+	 */
+	private void prepare_hosting_ManagedForm() throws Exception {
+		ClassLoader editorLoader = JavaInfoUtils.getClassLoader(this);
+		// use same Shell and ManagedForm (so same FormToolkit instance) during life of this model
+		// We should use same FormToolkit, because some default values for Color/Font properties are
+		// from this FormToolkit, so will be disposed with FormToolkit.
+		if (m_shell == null) {
+			m_shell = new Shell();
+			m_shell.setLayout(new FillLayout());
+			// prepare ManagedForm instance
+			{
+				Class<?> class_ManagedForm = editorLoader.loadClass("org.eclipse.ui.forms.ManagedForm");
+				Constructor<?> constructor =
+						ReflectionUtils.getConstructor(class_ManagedForm, Composite.class);
+				m_ManagedForm = constructor.newInstance(m_shell);
+			}
+			// initialize ManagedForm.getForm().getBody()
+			{
+				Object formObject = ReflectionUtils.invokeMethod2(m_ManagedForm, "getForm");
+				m_ManagedFormBody = (Composite) ReflectionUtils.invokeMethod2(formObject, "getBody");
+			}
+			// schedule dispose
+			addBroadcastListener(new ObjectEventListener() {
+				@Override
+				public void dispose() throws Exception {
+					if (m_ManagedForm != null) {
+						ReflectionUtils.invokeMethod2(m_ManagedForm, "dispose");
+						m_ManagedForm = null;
+					}
+					if (m_shell != null) {
+						m_shell.dispose();
+						m_shell = null;
+					}
+				}
+			});
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AbstractComponentInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected TopBoundsSupport createTopBoundsSupport() {
-    return new DetailsPageTopBoundsSupport(this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AbstractComponentInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected TopBoundsSupport createTopBoundsSupport() {
+		return new DetailsPageTopBoundsSupport(this);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Hierarchy
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean canBeRoot() {
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Hierarchy
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean canBeRoot() {
+		return true;
+	}
 
-  @Override
-  public Composite getComponentObject() {
-    return m_ManagedFormBody;
-  }
+	@Override
+	public Composite getComponentObject() {
+		return m_ManagedFormBody;
+	}
 
-  /**
-   * @return the top level {@link Shell}.
-   */
-  Shell getShell() {
-    return m_shell;
-  }
+	/**
+	 * @return the top level {@link Shell}.
+	 */
+	Shell getShell() {
+		return m_shell;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void refresh_dispose() throws Exception {
-    for (Control control : m_ManagedFormBody.getChildren()) {
-      control.dispose();
-    }
-    super.refresh_dispose();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void refresh_dispose() throws Exception {
+		for (Control control : m_ManagedFormBody.getChildren()) {
+			control.dispose();
+		}
+		super.refresh_dispose();
+	}
 
-  @Override
-  protected void refresh_fetch() throws Exception {
-    ControlInfo.refresh_fetch(this, new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        DetailsPageInfo.super.refresh_fetch();
-      }
-    });
-  }
+	@Override
+	protected void refresh_fetch() throws Exception {
+		ControlInfo.refresh_fetch(this, new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				DetailsPageInfo.super.refresh_fetch();
+			}
+		});
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/DetailsPageTopBoundsSupport.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/DetailsPageTopBoundsSupport.java
index 0111ef06d..714380f7c 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/DetailsPageTopBoundsSupport.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/DetailsPageTopBoundsSupport.java
@@ -28,66 +28,66 @@
  * @coverage rcp.model.forms
  */
 public final class DetailsPageTopBoundsSupport extends TopBoundsSupport {
-  private final DetailsPageInfo m_page;
+	private final DetailsPageInfo m_page;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DetailsPageTopBoundsSupport(DetailsPageInfo page) {
-    super(page);
-    m_page = page;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DetailsPageTopBoundsSupport(DetailsPageInfo page) {
+		super(page);
+		m_page = page;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // TopBoundsSupport
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void apply() throws Exception {
-    // set size from resource properties (or default)
-    {
-      Dimension size = getResourceSize();
-      Shell shell = m_page.getShell();
-      // "size" is size of _content_ for "shell", so calculate trim
-      Rectangle trim =
-          RectangleSupport.getRectangle(shell.computeTrim(0, 0, size.width, size.height));
-      // OK, set size from trim
-      ControlSupport.setSize(shell, trim.width, trim.height);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// TopBoundsSupport
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void apply() throws Exception {
+		// set size from resource properties (or default)
+		{
+			Dimension size = getResourceSize();
+			Shell shell = m_page.getShell();
+			// "size" is size of _content_ for "shell", so calculate trim
+			Rectangle trim =
+					RectangleSupport.getRectangle(shell.computeTrim(0, 0, size.width, size.height));
+			// OK, set size from trim
+			ControlSupport.setSize(shell, trim.width, trim.height);
+		}
+	}
 
-  @Override
-  public void setSize(int width, int height) throws Exception {
-    // remember size in resource properties
-    setResourceSize(width, height);
-  }
+	@Override
+	public void setSize(int width, int height) throws Exception {
+		// remember size in resource properties
+		setResourceSize(width, height);
+	}
 
-  @Override
-  protected Dimension getDefaultSize() {
-    return new Dimension(600, 500);
-  }
+	@Override
+	protected Dimension getDefaultSize() {
+		return new Dimension(600, 500);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Show
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean show() throws Exception {
-    Shell shell = m_page.getShell();
-    // don't dispose Shell, DetailsPage_Info reuses it between refresh()
-    shell.addShellListener(new ShellAdapter() {
-      @Override
-      public void shellClosed(ShellEvent e) {
-        e.doit = false;
-        ((Shell) e.widget).setVisible(false);
-      }
-    });
-    // do show
-    CompositeTopBoundsSupport.show(m_page, shell);
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Show
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean show() throws Exception {
+		Shell shell = m_page.getShell();
+		// don't dispose Shell, DetailsPage_Info reuses it between refresh()
+		shell.addShellListener(new ShellAdapter() {
+			@Override
+			public void shellClosed(ShellEvent e) {
+				e.doit = false;
+				((Shell) e.widget).setVisible(false);
+			}
+		});
+		// do show
+		CompositeTopBoundsSupport.show(m_page, shell);
+		return true;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/ExpandableCompositeInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/ExpandableCompositeInfo.java
index 9178c444b..bf3cadae4 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/ExpandableCompositeInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/ExpandableCompositeInfo.java
@@ -28,44 +28,44 @@
  * @coverage rcp.model.forms
  */
 public class ExpandableCompositeInfo extends AbstractPositionCompositeInfo {
-  private static final String[] POSITIONS = new String[]{"setTextClient", "setClient"};
+	private static final String[] POSITIONS = new String[]{"setTextClient", "setClient"};
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ExpandableCompositeInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    this(editor, description, creationSupport, POSITIONS);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ExpandableCompositeInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		this(editor, description, creationSupport, POSITIONS);
+	}
 
-  protected ExpandableCompositeInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport,
-      String[] methods) throws Exception {
-    super(editor, description, creationSupport, methods);
-    // when ControlInfo added using setClient(), set "expanded" to true
-    addBroadcastListener(new JavaEventListener() {
-      @Override
-      public void addAfter(JavaInfo parent, JavaInfo child) throws Exception {
-        if (child instanceof ControlInfo
-            && parent == ExpandableCompositeInfo.this
-            && getControl("setClient") == child) {
-          getPropertyByTitle("expanded").setValue(true);
-        }
-      }
+	protected ExpandableCompositeInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport,
+			String[] methods) throws Exception {
+		super(editor, description, creationSupport, methods);
+		// when ControlInfo added using setClient(), set "expanded" to true
+		addBroadcastListener(new JavaEventListener() {
+			@Override
+			public void addAfter(JavaInfo parent, JavaInfo child) throws Exception {
+				if (child instanceof ControlInfo
+						&& parent == ExpandableCompositeInfo.this
+						&& getControl("setClient") == child) {
+					getPropertyByTitle("expanded").setValue(true);
+				}
+			}
 
-      @Override
-      public void moveAfter(JavaInfo child, ObjectInfo oldParent, JavaInfo newParent)
-          throws Exception {
-        if (child instanceof ControlInfo
-            && newParent == ExpandableCompositeInfo.this
-            && getControl("setClient") == child) {
-          getPropertyByTitle("expanded").setValue(true);
-        }
-      }
-    });
-  }
+			@Override
+			public void moveAfter(JavaInfo child, ObjectInfo oldParent, JavaInfo newParent)
+					throws Exception {
+				if (child instanceof ControlInfo
+						&& newParent == ExpandableCompositeInfo.this
+						&& getControl("setClient") == child) {
+					getPropertyByTitle("expanded").setValue(true);
+				}
+			}
+		});
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/FormInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/FormInfo.java
index ebd006a0c..93bf1d1e6 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/FormInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/FormInfo.java
@@ -42,162 +42,162 @@
  * @coverage rcp.model.forms
  */
 public final class FormInfo extends CompositeInfo {
-  private ToolBarManagerInfo m_toolBarManager;
-  private MenuManagerInfo m_menuManager;
-  private MenuManagerPopupInfo m_menuManagerPopup;
+	private ToolBarManagerInfo m_toolBarManager;
+	private MenuManagerInfo m_menuManager;
+	private MenuManagerPopupInfo m_menuManagerPopup;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FormInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-    // remove setHeadClient() invocation when move out "head client" ControlInfo
-    addBroadcastListener(new JavaEventListener() {
-      @Override
-      public void moveBefore(JavaInfo child, ObjectInfo oldParent, JavaInfo newParent)
-          throws Exception {
-        if (child instanceof ControlInfo && newParent != oldParent && oldParent == getHead()) {
-          removeMethodInvocations("setHeadClient(org.eclipse.swt.widgets.Control)");
-        }
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FormInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+		// remove setHeadClient() invocation when move out "head client" ControlInfo
+		addBroadcastListener(new JavaEventListener() {
+			@Override
+			public void moveBefore(JavaInfo child, ObjectInfo oldParent, JavaInfo newParent)
+					throws Exception {
+				if (child instanceof ControlInfo && newParent != oldParent && oldParent == getHead()) {
+					removeMethodInvocations("setHeadClient(org.eclipse.swt.widgets.Control)");
+				}
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Initialize
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void createExposedChildren() throws Exception {
-    m_toolBarManager =
-        (ToolBarManagerInfo) JavaInfoUtils.addChildExposedByMethod(this, "getToolBarManager");
-    m_menuManager = (MenuManagerInfo) JavaInfoUtils.addChildExposedByMethod(this, "getMenuManager");
-    m_menuManagerPopup = new MenuManagerPopupInfo(m_menuManager);
-    super.createExposedChildren();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Initialize
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void createExposedChildren() throws Exception {
+		m_toolBarManager =
+				(ToolBarManagerInfo) JavaInfoUtils.addChildExposedByMethod(this, "getToolBarManager");
+		m_menuManager = (MenuManagerInfo) JavaInfoUtils.addChildExposedByMethod(this, "getMenuManager");
+		m_menuManagerPopup = new MenuManagerPopupInfo(m_menuManager);
+		super.createExposedChildren();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exposed head/body/managers support
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the exposed {@link ToolBarManagerInfo}.
-   */
-  public ToolBarManagerInfo getToolBarManager() {
-    return m_toolBarManager;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exposed head/body/managers support
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the exposed {@link ToolBarManagerInfo}.
+	 */
+	public ToolBarManagerInfo getToolBarManager() {
+		return m_toolBarManager;
+	}
 
-  /**
-   * @return the exposed {@link MenuManagerInfo}.
-   */
-  public MenuManagerInfo getMenuManager() {
-    return m_menuManager;
-  }
+	/**
+	 * @return the exposed {@link MenuManagerInfo}.
+	 */
+	public MenuManagerInfo getMenuManager() {
+		return m_menuManager;
+	}
 
-  /**
-   * @return the "head" {@link CompositeInfo}.
-   */
-  public CompositeInfo getHead() {
-    return getExposedComposite("getHead");
-  }
+	/**
+	 * @return the "head" {@link CompositeInfo}.
+	 */
+	public CompositeInfo getHead() {
+		return getExposedComposite("getHead");
+	}
 
-  /**
-   * @return the "body" {@link CompositeInfo}.
-   */
-  public CompositeInfo getBody() {
-    return getExposedComposite("getBody");
-  }
+	/**
+	 * @return the "body" {@link CompositeInfo}.
+	 */
+	public CompositeInfo getBody() {
+		return getExposedComposite("getBody");
+	}
 
-  /**
-   * @return the {@link CompositeInfo} exposed using method with given name.
-   */
-  private CompositeInfo getExposedComposite(String methodName) {
-    CompositeInfo exposedComposite = null;
-    for (CompositeInfo child : getChildren(CompositeInfo.class)) {
-      if (child.getCreationSupport() instanceof ExposedPropertyCreationSupport) {
-        ExposedPropertyCreationSupport creationSupport =
-            (ExposedPropertyCreationSupport) child.getCreationSupport();
-        if (creationSupport.getMethod().getName().equals(methodName)) {
-          exposedComposite = child;
-          break;
-        }
-      }
-    }
-    Assert.isNotNull(exposedComposite);
-    return exposedComposite;
-  }
+	/**
+	 * @return the {@link CompositeInfo} exposed using method with given name.
+	 */
+	private CompositeInfo getExposedComposite(String methodName) {
+		CompositeInfo exposedComposite = null;
+		for (CompositeInfo child : getChildren(CompositeInfo.class)) {
+			if (child.getCreationSupport() instanceof ExposedPropertyCreationSupport) {
+				ExposedPropertyCreationSupport creationSupport =
+						(ExposedPropertyCreationSupport) child.getCreationSupport();
+				if (creationSupport.getMethod().getName().equals(methodName)) {
+					exposedComposite = child;
+					break;
+				}
+			}
+		}
+		Assert.isNotNull(exposedComposite);
+		return exposedComposite;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Head client
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the "head client" {@link ControlInfo}, may be <code>null</code> if no "head client"
-   *         set.
-   */
-  public ControlInfo getHeadClient() {
-    CompositeInfo head = getHead();
-    List<ControlInfo> controls = head.getChildrenControls();
-    return !controls.isEmpty() ? controls.get(0) : null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Head client
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the "head client" {@link ControlInfo}, may be <code>null</code> if no "head client"
+	 *         set.
+	 */
+	public ControlInfo getHeadClient() {
+		CompositeInfo head = getHead();
+		List<ControlInfo> controls = head.getChildrenControls();
+		return !controls.isEmpty() ? controls.get(0) : null;
+	}
 
-  /**
-   * Sets new "head client" {@link ControlInfo}. No existing "head control" should exist.
-   */
-  public void setHeadClient(ControlInfo control) throws Exception {
-    Assert.isNull(getHeadClient());
-    // create/move ControlInfo
-    if (control.getParent() == null) {
-      JavaInfoUtils.add(control, null, getHead(), null);
-    } else {
-      JavaInfoUtils.move(control, null, getHead(), null);
-    }
-    // add setHeadClient() invocation
-    {
-      String source = TemplateUtils.format("{0}.setHeadClient({1})", this, control);
-      Expression setHeadClientExpression = control.addExpressionStatement(source);
-      addRelatedNodes(setHeadClientExpression);
-    }
-  }
+	/**
+	 * Sets new "head client" {@link ControlInfo}. No existing "head control" should exist.
+	 */
+	public void setHeadClient(ControlInfo control) throws Exception {
+		Assert.isNull(getHeadClient());
+		// create/move ControlInfo
+		if (control.getParent() == null) {
+			JavaInfoUtils.add(control, null, getHead(), null);
+		} else {
+			JavaInfoUtils.move(control, null, getHead(), null);
+		}
+		// add setHeadClient() invocation
+		{
+			String source = TemplateUtils.format("{0}.setHeadClient({1})", this, control);
+			Expression setHeadClientExpression = control.addExpressionStatement(source);
+			addRelatedNodes(setHeadClientExpression);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void refresh_fetch() throws Exception {
-    super.refresh_fetch();
-    // fetch bounds of menu hyperlink
-    {
-      Object headObject = ReflectionUtils.invokeMethod(getObject(), "getHead()");
-      Object titleRegionObject = ReflectionUtils.getFieldObject(headObject, "titleRegion");
-      Object menuHyperlinkObject =
-          ReflectionUtils.getFieldObject(titleRegionObject, "menuHyperlink");
-      Rectangle menuHyperlinkBounds = CoordinateUtils.getBounds(getObject(), menuHyperlinkObject);
-      m_menuManagerPopup.setBounds(menuHyperlinkBounds);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void refresh_fetch() throws Exception {
+		super.refresh_fetch();
+		// fetch bounds of menu hyperlink
+		{
+			Object headObject = ReflectionUtils.invokeMethod(getObject(), "getHead()");
+			Object titleRegionObject = ReflectionUtils.getFieldObject(headObject, "titleRegion");
+			Object menuHyperlinkObject =
+					ReflectionUtils.getFieldObject(titleRegionObject, "menuHyperlink");
+			Rectangle menuHyperlinkBounds = CoordinateUtils.getBounds(getObject(), menuHyperlinkObject);
+			m_menuManagerPopup.setBounds(menuHyperlinkBounds);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IMenuPopupInfo for MenuManager_Info
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link IMenuPopupInfo} for {@link MenuManagerInfo} in this {@link FormInfo}. This
-   *         method is invoked with ready {@link MenuManagerInfo}, so we don't need to check it
-   *         {@link MenuManagerInfo} exists.
-   */
-  public IMenuPopupInfo getMenuImpl(MenuManagerInfo manager) {
-    Assert.isTrue(m_menuManager == manager);
-    return m_menuManagerPopup;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IMenuPopupInfo for MenuManager_Info
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link IMenuPopupInfo} for {@link MenuManagerInfo} in this {@link FormInfo}. This
+	 *         method is invoked with ready {@link MenuManagerInfo}, so we don't need to check it
+	 *         {@link MenuManagerInfo} exists.
+	 */
+	public IMenuPopupInfo getMenuImpl(MenuManagerInfo manager) {
+		Assert.isTrue(m_menuManager == manager);
+		return m_menuManagerPopup;
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/FormPageInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/FormPageInfo.java
index 1d965db49..be3075ac0 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/FormPageInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/FormPageInfo.java
@@ -47,103 +47,103 @@
  * @coverage rcp.model.forms
  */
 public final class FormPageInfo extends EditorPartInfo implements IThisMethodParameterEvaluator {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FormPageInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FormPageInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IThisMethodParameterEvaluator
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Object m_FormToolkit;
-  private Object m_FormEditor;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IThisMethodParameterEvaluator
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Object m_FormToolkit;
+	private Object m_FormEditor;
 
-  @Override
-  public Object evaluateParameter(EvaluationContext context,
-      MethodDeclaration methodDeclaration,
-      String methodSignature,
-      SingleVariableDeclaration parameter,
-      int index) throws Exception {
-    ITypeBinding typeBinding = AstNodeUtils.getTypeBinding(parameter);
-    if (AstNodeUtils.isSuccessorOf(typeBinding, "org.eclipse.ui.forms.editor.FormEditor")) {
-      if (m_FormEditor == null) {
-        prepare_FormEditor(typeBinding);
-      }
-      return m_FormEditor;
-    }
-    return AstEvaluationEngine.UNKNOWN;
-  }
+	@Override
+	public Object evaluateParameter(EvaluationContext context,
+			MethodDeclaration methodDeclaration,
+			String methodSignature,
+			SingleVariableDeclaration parameter,
+			int index) throws Exception {
+		ITypeBinding typeBinding = AstNodeUtils.getTypeBinding(parameter);
+		if (AstNodeUtils.isSuccessorOf(typeBinding, "org.eclipse.ui.forms.editor.FormEditor")) {
+			if (m_FormEditor == null) {
+				prepare_FormEditor(typeBinding);
+			}
+			return m_FormEditor;
+		}
+		return AstEvaluationEngine.UNKNOWN;
+	}
 
-  /**
-   * Prepares implementation of {@link FormEditor} in {@link #m_FormEditor}.
-   */
-  private void prepare_FormEditor(ITypeBinding editorBinding) throws Exception {
-    ClassLoader classLoader = JavaInfoUtils.getClassLoader(this);
-    String editorClassName = AstNodeUtils.getFullyQualifiedName(editorBinding, true);
-    Class<?> editorClass = classLoader.loadClass(editorClassName);
-    // prepare FormEditor instance
-    {
-      m_FormEditor = new ByteBuddy() //
-          .subclass(editorClass) //
-          .method(named("getActivePageInstance").and(takesNoArguments())) //
-          .intercept(FixedValue.nullValue()) //
-          .method(named("getToolkit").and(takesNoArguments())) //
-          .intercept(InvocationHandlerAdapter.of((Object proxy, Method method, Object[] args) -> {
-            prepare_FormToolkit();
-            return m_FormToolkit;
-          })) //
-          .make() //
-          .load(classLoader) //
-          .getLoaded() //
-          .getConstructor() //
-          .newInstance();
-    }
-  }
+	/**
+	 * Prepares implementation of {@link FormEditor} in {@link #m_FormEditor}.
+	 */
+	private void prepare_FormEditor(ITypeBinding editorBinding) throws Exception {
+		ClassLoader classLoader = JavaInfoUtils.getClassLoader(this);
+		String editorClassName = AstNodeUtils.getFullyQualifiedName(editorBinding, true);
+		Class<?> editorClass = classLoader.loadClass(editorClassName);
+		// prepare FormEditor instance
+		{
+			m_FormEditor = new ByteBuddy() //
+					.subclass(editorClass) //
+					.method(named("getActivePageInstance").and(takesNoArguments())) //
+					.intercept(FixedValue.nullValue()) //
+					.method(named("getToolkit").and(takesNoArguments())) //
+					.intercept(InvocationHandlerAdapter.of((Object proxy, Method method, Object[] args) -> {
+						prepare_FormToolkit();
+						return m_FormToolkit;
+					})) //
+					.make() //
+					.load(classLoader) //
+					.getLoaded() //
+					.getConstructor() //
+					.newInstance();
+		}
+	}
 
-  /**
-   * Prepares implementation of {@link FormToolkit} in {@link #m_FormToolkit}.
-   */
-  private void prepare_FormToolkit() throws Exception {
-    if (m_FormToolkit == null) {
-      ClassLoader editorLoader = JavaInfoUtils.getClassLoader(this);
-      Class<?> class_FormToolkit =
-          editorLoader.loadClass("org.eclipse.ui.forms.widgets.FormToolkit");
-      //
-      Constructor<?> constructor = ReflectionUtils.getConstructor(class_FormToolkit, Display.class);
-      m_FormToolkit = constructor.newInstance(Display.getCurrent());
-    }
-  }
+	/**
+	 * Prepares implementation of {@link FormToolkit} in {@link #m_FormToolkit}.
+	 */
+	private void prepare_FormToolkit() throws Exception {
+		if (m_FormToolkit == null) {
+			ClassLoader editorLoader = JavaInfoUtils.getClassLoader(this);
+			Class<?> class_FormToolkit =
+					editorLoader.loadClass("org.eclipse.ui.forms.widgets.FormToolkit");
+			//
+			Constructor<?> constructor = ReflectionUtils.getConstructor(class_FormToolkit, Display.class);
+			m_FormToolkit = constructor.newInstance(Display.getCurrent());
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Rendering
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void configureTabItem(CTabItem tabItem) throws Exception {
-    tabItem.setImage(getDescription().getIcon());
-    tabItem.setText("FormPage");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Rendering
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void configureTabItem(CTabItem tabItem) throws Exception {
+		tabItem.setImage(getDescription().getIcon());
+		tabItem.setText("FormPage");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void refresh_dispose() throws Exception {
-    super.refresh_dispose();
-    if (m_FormToolkit != null) {
-      ReflectionUtils.invokeMethod2(m_FormToolkit, "dispose");
-      m_FormToolkit = null;
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void refresh_dispose() throws Exception {
+		super.refresh_dispose();
+		if (m_FormToolkit != null) {
+			ReflectionUtils.invokeMethod2(m_FormToolkit, "dispose");
+			m_FormToolkit = null;
+		}
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/FormToolkitAccess.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/FormToolkitAccess.java
index 498acfc30..4e63a7bac 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/FormToolkitAccess.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/FormToolkitAccess.java
@@ -41,215 +41,215 @@
  * @coverage rcp.model.forms
  */
 public final class FormToolkitAccess {
-  private final String m_toolkitMethodName;
-  private final String m_toolkitFieldName;
-  private final String m_formMethodName;
-  private final String m_formFieldName;
-  private final String m_toolkitSource;
+	private final String m_toolkitMethodName;
+	private final String m_toolkitFieldName;
+	private final String m_formMethodName;
+	private final String m_formFieldName;
+	private final String m_toolkitSource;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Not found exception
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final class NoFormToolkitError extends Error {
-    private static final long serialVersionUID = 0L;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Not found exception
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final class NoFormToolkitError extends Error {
+		private static final long serialVersionUID = 0L;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Creation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the valid {@link FormToolkitAccess} or <code>null</code>.
-   */
-  public static FormToolkitAccess get(TypeDeclaration typeDeclaration) {
-    try {
-      return new FormToolkitAccess(typeDeclaration);
-    } catch (NoFormToolkitError e) {
-      return null;
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Creation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the valid {@link FormToolkitAccess} or <code>null</code>.
+	 */
+	public static FormToolkitAccess get(TypeDeclaration typeDeclaration) {
+		try {
+			return new FormToolkitAccess(typeDeclaration);
+		} catch (NoFormToolkitError e) {
+			return null;
+		}
+	}
 
-  /**
-   * @return the valid {@link FormToolkitAccess} or throws {@link Exception}.
-   */
-  public static FormToolkitAccess getOrFail(TypeDeclaration typeDeclaration) {
-    try {
-      return new FormToolkitAccess(typeDeclaration);
-    } catch (NoFormToolkitError e) {
-      throw new DesignerException(IExceptionConstants.NO_FORM_TOOLKIT);
-    }
-  }
+	/**
+	 * @return the valid {@link FormToolkitAccess} or throws {@link Exception}.
+	 */
+	public static FormToolkitAccess getOrFail(TypeDeclaration typeDeclaration) {
+		try {
+			return new FormToolkitAccess(typeDeclaration);
+		} catch (NoFormToolkitError e) {
+			throw new DesignerException(IExceptionConstants.NO_FORM_TOOLKIT);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private FormToolkitAccess(TypeDeclaration typeDeclaration) {
-    // try to find FormToolkit in local variable declaration
-    {
-      ListGatherer<SimpleName> listGatherer = new ListGatherer<SimpleName>() {
-        @Override
-        public void postVisit(ASTNode node) {
-          if (node instanceof SimpleName
-              && node.getLocationInParent() == VariableDeclarationFragment.NAME_PROPERTY) {
-            SimpleName variable = (SimpleName) node;
-            if (AstNodeUtils.isSuccessorOf(
-                variable.resolveTypeBinding(),
-                "org.eclipse.ui.forms.widgets.FormToolkit")) {
-              addResult(variable);
-            }
-          }
-        }
-      };
-      typeDeclaration.accept(listGatherer);
-      List<SimpleName> variables = listGatherer.getResultList();
-      if (!variables.isEmpty()) {
-        m_toolkitMethodName = null;
-        m_toolkitFieldName = variables.get(0).getIdentifier();
-        m_formMethodName = null;
-        m_formFieldName = null;
-        m_toolkitSource = m_toolkitFieldName;
-        return;
-      }
-    }
-    // try to find FormToolkit: method
-    {
-      ITypeBinding typeBinding = AstNodeUtils.getTypeBinding(typeDeclaration);
-      List<IMethodBinding> methodBindings =
-          AstNodeUtils.getMethodBindings(typeBinding.getSuperclass(), Modifier.PUBLIC
-              | Modifier.PROTECTED);
-      for (IMethodBinding methodBinding : methodBindings) {
-        if (methodBinding.getParameterTypes().length == 0
-            && AstNodeUtils.isSuccessorOf(
-                methodBinding.getReturnType(),
-                "org.eclipse.ui.forms.widgets.FormToolkit")) {
-          m_toolkitMethodName = methodBinding.getName();
-          m_toolkitFieldName = null;
-          m_formMethodName = null;
-          m_formFieldName = null;
-          m_toolkitSource = m_toolkitMethodName + "()";
-          return;
-        }
-      }
-    }
-    // try to find FormToolkit: field
-    {
-      ITypeBinding typeBinding = AstNodeUtils.getTypeBinding(typeDeclaration);
-      List<IVariableBinding> fields =
-          AstNodeUtils.getFieldBindings(typeBinding, Modifier.PUBLIC
-              | Modifier.PROTECTED
-              | Modifier.PRIVATE);
-      for (IVariableBinding field : fields) {
-        if (AstNodeUtils.isSuccessorOf(field.getType(), "org.eclipse.ui.forms.widgets.FormToolkit")) {
-          m_toolkitMethodName = null;
-          m_toolkitFieldName = field.getName();
-          m_formMethodName = null;
-          m_formFieldName = null;
-          m_toolkitSource = m_toolkitFieldName;
-          return;
-        }
-      }
-    }
-    // try to find IManagedForm: method
-    {
-      ITypeBinding typeBinding = AstNodeUtils.getTypeBinding(typeDeclaration);
-      List<IMethodBinding> methodBindings =
-          AstNodeUtils.getMethodBindings(typeBinding.getSuperclass(), Modifier.PUBLIC
-              | Modifier.PROTECTED);
-      for (IMethodBinding methodBinding : methodBindings) {
-        if (methodBinding.getParameterTypes().length == 0
-            && AstNodeUtils.isSuccessorOf(
-                methodBinding.getReturnType(),
-                "org.eclipse.ui.forms.IManagedForm")) {
-          m_toolkitMethodName = null;
-          m_toolkitFieldName = null;
-          m_formMethodName = methodBinding.getName();
-          m_formFieldName = null;
-          m_toolkitSource = m_formMethodName + "().getToolkit()";
-          return;
-        }
-      }
-    }
-    // try to find IManagedForm: field
-    {
-      ITypeBinding typeBinding = AstNodeUtils.getTypeBinding(typeDeclaration);
-      List<IVariableBinding> fields =
-          AstNodeUtils.getFieldBindings(typeBinding, Modifier.PUBLIC
-              | Modifier.PROTECTED
-              | Modifier.PRIVATE);
-      for (IVariableBinding field : fields) {
-        if (AstNodeUtils.isSuccessorOf(field.getType(), "org.eclipse.ui.forms.IManagedForm")) {
-          m_toolkitMethodName = null;
-          m_toolkitFieldName = null;
-          m_formMethodName = null;
-          m_formFieldName = field.getName();
-          m_toolkitSource = m_formFieldName + ".getToolkit()";
-          return;
-        }
-      }
-    }
-    // can not find FormToolkit/IManagedForm
-    throw new NoFormToolkitError();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private FormToolkitAccess(TypeDeclaration typeDeclaration) {
+		// try to find FormToolkit in local variable declaration
+		{
+			ListGatherer<SimpleName> listGatherer = new ListGatherer<SimpleName>() {
+				@Override
+				public void postVisit(ASTNode node) {
+					if (node instanceof SimpleName
+							&& node.getLocationInParent() == VariableDeclarationFragment.NAME_PROPERTY) {
+						SimpleName variable = (SimpleName) node;
+						if (AstNodeUtils.isSuccessorOf(
+								variable.resolveTypeBinding(),
+								"org.eclipse.ui.forms.widgets.FormToolkit")) {
+							addResult(variable);
+						}
+					}
+				}
+			};
+			typeDeclaration.accept(listGatherer);
+			List<SimpleName> variables = listGatherer.getResultList();
+			if (!variables.isEmpty()) {
+				m_toolkitMethodName = null;
+				m_toolkitFieldName = variables.get(0).getIdentifier();
+				m_formMethodName = null;
+				m_formFieldName = null;
+				m_toolkitSource = m_toolkitFieldName;
+				return;
+			}
+		}
+		// try to find FormToolkit: method
+		{
+			ITypeBinding typeBinding = AstNodeUtils.getTypeBinding(typeDeclaration);
+			List<IMethodBinding> methodBindings =
+					AstNodeUtils.getMethodBindings(typeBinding.getSuperclass(), Modifier.PUBLIC
+							| Modifier.PROTECTED);
+			for (IMethodBinding methodBinding : methodBindings) {
+				if (methodBinding.getParameterTypes().length == 0
+						&& AstNodeUtils.isSuccessorOf(
+								methodBinding.getReturnType(),
+								"org.eclipse.ui.forms.widgets.FormToolkit")) {
+					m_toolkitMethodName = methodBinding.getName();
+					m_toolkitFieldName = null;
+					m_formMethodName = null;
+					m_formFieldName = null;
+					m_toolkitSource = m_toolkitMethodName + "()";
+					return;
+				}
+			}
+		}
+		// try to find FormToolkit: field
+		{
+			ITypeBinding typeBinding = AstNodeUtils.getTypeBinding(typeDeclaration);
+			List<IVariableBinding> fields =
+					AstNodeUtils.getFieldBindings(typeBinding, Modifier.PUBLIC
+							| Modifier.PROTECTED
+							| Modifier.PRIVATE);
+			for (IVariableBinding field : fields) {
+				if (AstNodeUtils.isSuccessorOf(field.getType(), "org.eclipse.ui.forms.widgets.FormToolkit")) {
+					m_toolkitMethodName = null;
+					m_toolkitFieldName = field.getName();
+					m_formMethodName = null;
+					m_formFieldName = null;
+					m_toolkitSource = m_toolkitFieldName;
+					return;
+				}
+			}
+		}
+		// try to find IManagedForm: method
+		{
+			ITypeBinding typeBinding = AstNodeUtils.getTypeBinding(typeDeclaration);
+			List<IMethodBinding> methodBindings =
+					AstNodeUtils.getMethodBindings(typeBinding.getSuperclass(), Modifier.PUBLIC
+							| Modifier.PROTECTED);
+			for (IMethodBinding methodBinding : methodBindings) {
+				if (methodBinding.getParameterTypes().length == 0
+						&& AstNodeUtils.isSuccessorOf(
+								methodBinding.getReturnType(),
+								"org.eclipse.ui.forms.IManagedForm")) {
+					m_toolkitMethodName = null;
+					m_toolkitFieldName = null;
+					m_formMethodName = methodBinding.getName();
+					m_formFieldName = null;
+					m_toolkitSource = m_formMethodName + "().getToolkit()";
+					return;
+				}
+			}
+		}
+		// try to find IManagedForm: field
+		{
+			ITypeBinding typeBinding = AstNodeUtils.getTypeBinding(typeDeclaration);
+			List<IVariableBinding> fields =
+					AstNodeUtils.getFieldBindings(typeBinding, Modifier.PUBLIC
+							| Modifier.PROTECTED
+							| Modifier.PRIVATE);
+			for (IVariableBinding field : fields) {
+				if (AstNodeUtils.isSuccessorOf(field.getType(), "org.eclipse.ui.forms.IManagedForm")) {
+					m_toolkitMethodName = null;
+					m_toolkitFieldName = null;
+					m_formMethodName = null;
+					m_formFieldName = field.getName();
+					m_toolkitSource = m_formFieldName + ".getToolkit()";
+					return;
+				}
+			}
+		}
+		// can not find FormToolkit/IManagedForm
+		throw new NoFormToolkitError();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if given {@link ASTNode} represents access of our {@link FormToolkit}
-   *         .
-   */
-  public boolean isToolkit(ASTNode node) {
-    if (node instanceof MethodInvocation) {
-      MethodInvocation invocation = (MethodInvocation) node;
-      if (invocation.arguments().isEmpty()) {
-        // getMyToolkit()
-        if (m_toolkitMethodName != null
-            && invocation.getName().getIdentifier().equals(m_toolkitMethodName)) {
-          return true;
-        }
-        // someExpression.getToolkit()
-        if (invocation.getName().getIdentifier().equals("getToolkit")) {
-          // getMyManagedForm().getToolkit()
-          if (invocation.getExpression() instanceof MethodInvocation) {
-            MethodInvocation formInvocation = (MethodInvocation) invocation.getExpression();
-            if (formInvocation.arguments().isEmpty()
-                && m_formMethodName != null
-                && formInvocation.getName().getIdentifier().equals(m_formMethodName)) {
-              return true;
-            }
-          }
-          // m_myManagedForm.getToolkit()
-          if (invocation.getExpression() instanceof SimpleName) {
-            SimpleName simpleName = (SimpleName) invocation.getExpression();
-            if (m_formFieldName != null && simpleName.getIdentifier().equals(m_formFieldName)) {
-              return true;
-            }
-          }
-        }
-      }
-    }
-    // m_myToolkit
-    if (node instanceof SimpleName) {
-      SimpleName simpleName = (SimpleName) node;
-      if (m_toolkitFieldName != null && simpleName.getIdentifier().equals(m_toolkitFieldName)) {
-        return true;
-      }
-    }
-    // unknown node
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if given {@link ASTNode} represents access of our {@link FormToolkit}
+	 *         .
+	 */
+	public boolean isToolkit(ASTNode node) {
+		if (node instanceof MethodInvocation) {
+			MethodInvocation invocation = (MethodInvocation) node;
+			if (invocation.arguments().isEmpty()) {
+				// getMyToolkit()
+				if (m_toolkitMethodName != null
+						&& invocation.getName().getIdentifier().equals(m_toolkitMethodName)) {
+					return true;
+				}
+				// someExpression.getToolkit()
+				if (invocation.getName().getIdentifier().equals("getToolkit")) {
+					// getMyManagedForm().getToolkit()
+					if (invocation.getExpression() instanceof MethodInvocation) {
+						MethodInvocation formInvocation = (MethodInvocation) invocation.getExpression();
+						if (formInvocation.arguments().isEmpty()
+								&& m_formMethodName != null
+								&& formInvocation.getName().getIdentifier().equals(m_formMethodName)) {
+							return true;
+						}
+					}
+					// m_myManagedForm.getToolkit()
+					if (invocation.getExpression() instanceof SimpleName) {
+						SimpleName simpleName = (SimpleName) invocation.getExpression();
+						if (m_formFieldName != null && simpleName.getIdentifier().equals(m_formFieldName)) {
+							return true;
+						}
+					}
+				}
+			}
+		}
+		// m_myToolkit
+		if (node instanceof SimpleName) {
+			SimpleName simpleName = (SimpleName) node;
+			if (m_toolkitFieldName != null && simpleName.getIdentifier().equals(m_toolkitFieldName)) {
+				return true;
+			}
+		}
+		// unknown node
+		return false;
+	}
 
-  /**
-   * @return the Java source code to reference our {@link FormToolkit}.
-   */
-  public String getReferenceExpression() {
-    return m_toolkitSource;
-  }
+	/**
+	 * @return the Java source code to reference our {@link FormToolkit}.
+	 */
+	public String getReferenceExpression() {
+		return m_toolkitSource;
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/FormToolkitAccessUtils.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/FormToolkitAccessUtils.java
index cc1f31328..8956f3c1d 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/FormToolkitAccessUtils.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/FormToolkitAccessUtils.java
@@ -39,79 +39,79 @@
  * @coverage rcp.model.forms
  */
 public final class FormToolkitAccessUtils {
-  /**
-   * Creates {@link InstanceFactoryInfo} for {@link FormToolkit} using {@link FormToolkitAccess}.
-   * This method should be used during {@link JavaInfo} initializing of "this" component, i.e.
-   * practically during parsing.
-   *
-   * @return the created {@link InstanceFactoryInfo}.
-   */
-  public static InstanceFactoryInfo createFormToolkit_usingAccess(JavaInfo hostJavaInfo)
-      throws Exception {
-    TypeDeclaration typeDeclaration = JavaInfoUtils.getTypeDeclaration(hostJavaInfo);
-    // prepare "toolkit"
-    FormToolkitAccess toolkitAccess = FormToolkitAccess.getOrFail(typeDeclaration);
-    CreationSupport creationSupport = new FormToolkitCreationSupport(hostJavaInfo, toolkitAccess);
-    InstanceFactoryInfo toolkit = createFormToolkit(hostJavaInfo.getEditor(), creationSupport);
-    {
-      VariableSupport variableSupport =
-          new FormToolkitVariableSupport(toolkit, hostJavaInfo, toolkitAccess);
-      toolkit.setVariableSupport(variableSupport);
-    }
-    return toolkit;
-  }
+	/**
+	 * Creates {@link InstanceFactoryInfo} for {@link FormToolkit} using {@link FormToolkitAccess}.
+	 * This method should be used during {@link JavaInfo} initializing of "this" component, i.e.
+	 * practically during parsing.
+	 *
+	 * @return the created {@link InstanceFactoryInfo}.
+	 */
+	public static InstanceFactoryInfo createFormToolkit_usingAccess(JavaInfo hostJavaInfo)
+			throws Exception {
+		TypeDeclaration typeDeclaration = JavaInfoUtils.getTypeDeclaration(hostJavaInfo);
+		// prepare "toolkit"
+		FormToolkitAccess toolkitAccess = FormToolkitAccess.getOrFail(typeDeclaration);
+		CreationSupport creationSupport = new FormToolkitCreationSupport(hostJavaInfo, toolkitAccess);
+		InstanceFactoryInfo toolkit = createFormToolkit(hostJavaInfo.getEditor(), creationSupport);
+		{
+			VariableSupport variableSupport =
+					new FormToolkitVariableSupport(toolkit, hostJavaInfo, toolkitAccess);
+			toolkit.setVariableSupport(variableSupport);
+		}
+		return toolkit;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // FormToolkit as constructor parameter
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Create {@link InstanceFactoryInfo} for {@link FormToolkit} parameter of
-   * {@link MethodDeclaration}.
-   */
-  public static void createFormToolkit_asMethodParameter(AstEditor editor,
-      final MethodDeclaration method) throws Exception {
-    for (SingleVariableDeclaration parameter : DomGenerics.parameters(method)) {
-      if (AstNodeUtils.isSuccessorOf(parameter, "org.eclipse.ui.forms.widgets.FormToolkit")) {
-        CreationSupport creationSupport = new MethodParameterCreationSupport(parameter);
-        final InstanceFactoryInfo toolkit = createFormToolkit(editor, creationSupport);
-        // we may be don't have hierarchy yet
-        GlobalStateJava.activate(toolkit);
-        // bind to variable
-        ExecutionFlowUtils2.ensurePermanentValue(parameter.getName()).setModel(toolkit);
-        {
-          VariableSupport variableSupport = new MethodParameterVariableSupport(toolkit, parameter);
-          toolkit.setVariableSupport(variableSupport);
-        }
-        // set object during evaluation
-        toolkit.addBroadcastListener(new ExecutionFlowEnterFrame() {
-          @Override
-          public void invoke(ASTNode node) throws Exception {
-            if (node == method) {
-              toolkit.setObject(RcpMethodParameterEvaluator.FORM_TOOLKIT);
-            }
-          }
-        });
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// FormToolkit as constructor parameter
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Create {@link InstanceFactoryInfo} for {@link FormToolkit} parameter of
+	 * {@link MethodDeclaration}.
+	 */
+	public static void createFormToolkit_asMethodParameter(AstEditor editor,
+			final MethodDeclaration method) throws Exception {
+		for (SingleVariableDeclaration parameter : DomGenerics.parameters(method)) {
+			if (AstNodeUtils.isSuccessorOf(parameter, "org.eclipse.ui.forms.widgets.FormToolkit")) {
+				CreationSupport creationSupport = new MethodParameterCreationSupport(parameter);
+				final InstanceFactoryInfo toolkit = createFormToolkit(editor, creationSupport);
+				// we may be don't have hierarchy yet
+				GlobalStateJava.activate(toolkit);
+				// bind to variable
+				ExecutionFlowUtils2.ensurePermanentValue(parameter.getName()).setModel(toolkit);
+				{
+					VariableSupport variableSupport = new MethodParameterVariableSupport(toolkit, parameter);
+					toolkit.setVariableSupport(variableSupport);
+				}
+				// set object during evaluation
+				toolkit.addBroadcastListener(new ExecutionFlowEnterFrame() {
+					@Override
+					public void invoke(ASTNode node) throws Exception {
+						if (node == method) {
+							toolkit.setObject(RcpMethodParameterEvaluator.FORM_TOOLKIT);
+						}
+					}
+				});
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static InstanceFactoryInfo createFormToolkit(AstEditor editor,
-      CreationSupport creationSupport) throws Exception {
-    EditorState editorState = EditorState.get(editor);
-    ClassLoader editorLoader = editorState.getEditorLoader();
-    InstanceFactoryInfo toolkit =
-        InstanceFactoryInfo.createFactory(
-            editor,
-            editorLoader.loadClass("org.eclipse.ui.forms.widgets.FormToolkit"),
-            creationSupport);
-    editorState.getTmp_Components().add(toolkit);
-    return toolkit;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static InstanceFactoryInfo createFormToolkit(AstEditor editor,
+			CreationSupport creationSupport) throws Exception {
+		EditorState editorState = EditorState.get(editor);
+		ClassLoader editorLoader = editorState.getEditorLoader();
+		InstanceFactoryInfo toolkit =
+				InstanceFactoryInfo.createFactory(
+						editor,
+						editorLoader.loadClass("org.eclipse.ui.forms.widgets.FormToolkit"),
+						creationSupport);
+		editorState.getTmp_Components().add(toolkit);
+		return toolkit;
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/FormToolkitCreationSupport.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/FormToolkitCreationSupport.java
index 4faf04ac4..0fd126a19 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/FormToolkitCreationSupport.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/FormToolkitCreationSupport.java
@@ -23,41 +23,41 @@
  * @coverage rcp.model.forms
  */
 public final class FormToolkitCreationSupport extends CreationSupport {
-  private final JavaInfo m_hostJavaInfo;
-  private final FormToolkitAccess m_toolkitAccess;
+	private final JavaInfo m_hostJavaInfo;
+	private final FormToolkitAccess m_toolkitAccess;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FormToolkitCreationSupport(JavaInfo hostJavaInfo, FormToolkitAccess toolkitAccess) {
-    m_hostJavaInfo = hostJavaInfo;
-    m_toolkitAccess = toolkitAccess;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FormToolkitCreationSupport(JavaInfo hostJavaInfo, FormToolkitAccess toolkitAccess) {
+		m_hostJavaInfo = hostJavaInfo;
+		m_toolkitAccess = toolkitAccess;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    return "toolkitAccess: " + m_toolkitAccess.getReferenceExpression();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		return "toolkitAccess: " + m_toolkitAccess.getReferenceExpression();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public ASTNode getNode() {
-    return m_hostJavaInfo.getCreationSupport().getNode();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public ASTNode getNode() {
+		return m_hostJavaInfo.getCreationSupport().getNode();
+	}
 
-  @Override
-  public boolean isJavaInfo(ASTNode node) {
-    return m_toolkitAccess.isToolkit(node);
-  }
+	@Override
+	public boolean isJavaInfo(ASTNode node) {
+		return m_toolkitAccess.isToolkit(node);
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/FormToolkitJavaInfoParticipator.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/FormToolkitJavaInfoParticipator.java
index 615ce015b..175f36055 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/FormToolkitJavaInfoParticipator.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/FormToolkitJavaInfoParticipator.java
@@ -45,174 +45,174 @@
  * @coverage rcp.model.forms
  */
 public final class FormToolkitJavaInfoParticipator implements IJavaInfoInitializationParticipator {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final Object INSTANCE = new FormToolkitJavaInfoParticipator();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final Object INSTANCE = new FormToolkitJavaInfoParticipator();
 
-  private FormToolkitJavaInfoParticipator() {
-  }
+	private FormToolkitJavaInfoParticipator() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IJavaInfoInitializationParticipator
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void process(JavaInfo javaInfo) throws Exception {
-    if (javaInfo instanceof InstanceFactoryInfo
-        && ReflectionUtils.isSuccessorOf(
-            javaInfo.getDescription().getComponentClass(),
-            "org.eclipse.ui.forms.widgets.FormToolkit")) {
-      final InstanceFactoryInfo toolkit = (InstanceFactoryInfo) javaInfo;
-      toolkit.addBroadcastListener(new JavaEventListener() {
-        @Override
-        public void addAfter(JavaInfo parent, JavaInfo child) throws Exception {
-          IPreferenceStore preferences = child.getDescription().getToolkit().getPreferences();
-          support_paintBordersFor(toolkit, preferences, child);
-          support_adaptControl(toolkit, preferences, child);
-        }
-      });
-      toolkit.addBroadcastListener(new ObjectEventListener() {
-        @Override
-        public void addContextMenu(List<? extends ObjectInfo> objects,
-            ObjectInfo object,
-            IMenuManager manager) throws Exception {
-          contribute_FormToolkit_decorateFormHeading(manager, toolkit, object);
-        }
-      });
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IJavaInfoInitializationParticipator
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void process(JavaInfo javaInfo) throws Exception {
+		if (javaInfo instanceof InstanceFactoryInfo
+				&& ReflectionUtils.isSuccessorOf(
+						javaInfo.getDescription().getComponentClass(),
+						"org.eclipse.ui.forms.widgets.FormToolkit")) {
+			final InstanceFactoryInfo toolkit = (InstanceFactoryInfo) javaInfo;
+			toolkit.addBroadcastListener(new JavaEventListener() {
+				@Override
+				public void addAfter(JavaInfo parent, JavaInfo child) throws Exception {
+					IPreferenceStore preferences = child.getDescription().getToolkit().getPreferences();
+					support_paintBordersFor(toolkit, preferences, child);
+					support_adaptControl(toolkit, preferences, child);
+				}
+			});
+			toolkit.addBroadcastListener(new ObjectEventListener() {
+				@Override
+				public void addContextMenu(List<? extends ObjectInfo> objects,
+						ObjectInfo object,
+						IMenuManager manager) throws Exception {
+					contribute_FormToolkit_decorateFormHeading(manager, toolkit, object);
+				}
+			});
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Adapt new Control/Composite
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds {@link FormToolkit#paintBordersFor(org.eclipse.swt.widgets.Composite)}.
-   */
-  private void support_paintBordersFor(InstanceFactoryInfo toolkit,
-      IPreferenceStore preferences,
-      JavaInfo child) throws Exception {
-    if (preferences.getBoolean(IPreferenceConstants.FORMS_PAINT_BORDERS)
-        && JavaInfoUtils.hasTrueParameter(child, "FormsAPI.paintBordersFor")) {
-      addToolkitInvocation("{0}.paintBordersFor({1})", toolkit, child);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Adapt new Control/Composite
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds {@link FormToolkit#paintBordersFor(org.eclipse.swt.widgets.Composite)}.
+	 */
+	private void support_paintBordersFor(InstanceFactoryInfo toolkit,
+			IPreferenceStore preferences,
+			JavaInfo child) throws Exception {
+		if (preferences.getBoolean(IPreferenceConstants.FORMS_PAINT_BORDERS)
+				&& JavaInfoUtils.hasTrueParameter(child, "FormsAPI.paintBordersFor")) {
+			addToolkitInvocation("{0}.paintBordersFor({1})", toolkit, child);
+		}
+	}
 
-  /**
-   * Adds {@link FormToolkit#adapt(org.eclipse.swt.widgets.Composite)} or
-   * {@link FormToolkit#adapt(org.eclipse.swt.widgets.Control, boolean, boolean)} depending on type
-   * of "child".
-   */
-  private void support_adaptControl(InstanceFactoryInfo toolkit,
-      IPreferenceStore preferences,
-      JavaInfo child) throws Exception {
-    if (preferences.getBoolean(IPreferenceConstants.FORMS_ADAPT_CONTROL)
-        && child instanceof ControlInfo
-        && child.getCreationSupport() instanceof ConstructorCreationSupport
-        && isVisibleControl(child)) {
-      if (JavaInfoUtils.hasTrueParameter(child, "FormsAPI.adapt(Composite)")) {
-        addToolkitInvocation("{0}.adapt({1})", toolkit, child);
-      } else {
-        addToolkitInvocation("{0}.adapt({1}, true, true)", toolkit, child);
-      }
-    }
-  }
+	/**
+	 * Adds {@link FormToolkit#adapt(org.eclipse.swt.widgets.Composite)} or
+	 * {@link FormToolkit#adapt(org.eclipse.swt.widgets.Control, boolean, boolean)} depending on type
+	 * of "child".
+	 */
+	private void support_adaptControl(InstanceFactoryInfo toolkit,
+			IPreferenceStore preferences,
+			JavaInfo child) throws Exception {
+		if (preferences.getBoolean(IPreferenceConstants.FORMS_ADAPT_CONTROL)
+				&& child instanceof ControlInfo
+				&& child.getCreationSupport() instanceof ConstructorCreationSupport
+				&& isVisibleControl(child)) {
+			if (JavaInfoUtils.hasTrueParameter(child, "FormsAPI.adapt(Composite)")) {
+				addToolkitInvocation("{0}.adapt({1})", toolkit, child);
+			} else {
+				addToolkitInvocation("{0}.adapt({1}, true, true)", toolkit, child);
+			}
+		}
+	}
 
-  /**
-   * @return <code>true</code> if given {@link JavaInfo} is visible, i.e. not filler.
-   */
-  private static boolean isVisibleControl(JavaInfo child) throws Exception {
-    return child.getParentJava().getPresentation().getChildrenGraphical().contains(child);
-  }
+	/**
+	 * @return <code>true</code> if given {@link JavaInfo} is visible, i.e. not filler.
+	 */
+	private static boolean isVisibleControl(JavaInfo child) throws Exception {
+		return child.getParentJava().getPresentation().getChildrenGraphical().contains(child);
+	}
 
-  /**
-   * Adds invocation of "toolkit" with "child" as one of arguments. Adds related nodes.
-   */
-  private static void addToolkitInvocation(String format,
-      InstanceFactoryInfo toolkit,
-      JavaInfo child) throws Exception {
-    String source = TemplateUtils.format(format, toolkit, child);
-    Expression expression = child.addExpressionStatement(source);
-    toolkit.addRelatedNodes(expression);
-  }
+	/**
+	 * Adds invocation of "toolkit" with "child" as one of arguments. Adds related nodes.
+	 */
+	private static void addToolkitInvocation(String format,
+			InstanceFactoryInfo toolkit,
+			JavaInfo child) throws Exception {
+		String source = TemplateUtils.format(format, toolkit, child);
+		Expression expression = child.addExpressionStatement(source);
+		toolkit.addRelatedNodes(expression);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Context menu
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Contributes {@link IAction} to add/remove {@link FormToolkit#decorateFormHeading(Form)}.
-   */
-  private void contribute_FormToolkit_decorateFormHeading(IMenuManager manager,
-      InstanceFactoryInfo toolkit,
-      ObjectInfo object) {
-    if (object instanceof FormInfo) {
-      FormInfo form = (FormInfo) object;
-      manager.appendToGroup(
-          IContextMenuConstants.GROUP_ADDITIONAL,
-          new DecorateFormHeading_Action(toolkit, form));
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Context menu
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Contributes {@link IAction} to add/remove {@link FormToolkit#decorateFormHeading(Form)}.
+	 */
+	private void contribute_FormToolkit_decorateFormHeading(IMenuManager manager,
+			InstanceFactoryInfo toolkit,
+			ObjectInfo object) {
+		if (object instanceof FormInfo) {
+			FormInfo form = (FormInfo) object;
+			manager.appendToGroup(
+					IContextMenuConstants.GROUP_ADDITIONAL,
+					new DecorateFormHeading_Action(toolkit, form));
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // DecorateFormHeading_Action
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * {@link IAction} to add/remove {@link FormToolkit#decorateFormHeading(Form)}.
-   */
-  private static class DecorateFormHeading_Action extends ObjectInfoAction
-      implements
-        IActionSingleton {
-    private static final String SIGNATURE =
-        "decorateFormHeading(org.eclipse.ui.forms.widgets.Form)";
-    private final InstanceFactoryInfo m_toolkit;
-    private final FormInfo m_form;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// DecorateFormHeading_Action
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * {@link IAction} to add/remove {@link FormToolkit#decorateFormHeading(Form)}.
+	 */
+	private static class DecorateFormHeading_Action extends ObjectInfoAction
+	implements
+	IActionSingleton {
+		private static final String SIGNATURE =
+				"decorateFormHeading(org.eclipse.ui.forms.widgets.Form)";
+		private final InstanceFactoryInfo m_toolkit;
+		private final FormInfo m_form;
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public DecorateFormHeading_Action(InstanceFactoryInfo toolkit, FormInfo form) {
-      super(form, "Decorate heading", AS_CHECK_BOX);
-      m_toolkit = toolkit;
-      m_form = form;
-      // update check state
-      for (MethodInvocation invocation : m_toolkit.getMethodInvocations(SIGNATURE)) {
-        Expression formExpression = DomGenerics.arguments(invocation).get(0);
-        if (m_form.isRepresentedBy(formExpression)) {
-          setChecked(true);
-        }
-      }
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public DecorateFormHeading_Action(InstanceFactoryInfo toolkit, FormInfo form) {
+			super(form, "Decorate heading", AS_CHECK_BOX);
+			m_toolkit = toolkit;
+			m_form = form;
+			// update check state
+			for (MethodInvocation invocation : m_toolkit.getMethodInvocations(SIGNATURE)) {
+				Expression formExpression = DomGenerics.arguments(invocation).get(0);
+				if (m_form.isRepresentedBy(formExpression)) {
+					setChecked(true);
+				}
+			}
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Run
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    protected void runEx() throws Exception {
-      if (isChecked()) {
-        String source = TemplateUtils.format("{0}.decorateFormHeading({1})", m_toolkit, m_form);
-        Expression expression = m_form.addExpressionStatement(source);
-        m_toolkit.addRelatedNodes(expression);
-      } else {
-        for (MethodInvocation invocation : m_toolkit.getMethodInvocations(SIGNATURE)) {
-          Expression formExpression = DomGenerics.arguments(invocation).get(0);
-          if (m_form.isRepresentedBy(formExpression)) {
-            m_form.getEditor().removeEnclosingStatement(invocation);
-          }
-        }
-      }
-    }
-  }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Run
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		protected void runEx() throws Exception {
+			if (isChecked()) {
+				String source = TemplateUtils.format("{0}.decorateFormHeading({1})", m_toolkit, m_form);
+				Expression expression = m_form.addExpressionStatement(source);
+				m_toolkit.addRelatedNodes(expression);
+			} else {
+				for (MethodInvocation invocation : m_toolkit.getMethodInvocations(SIGNATURE)) {
+					Expression formExpression = DomGenerics.arguments(invocation).get(0);
+					if (m_form.isRepresentedBy(formExpression)) {
+						m_form.getEditor().removeEnclosingStatement(invocation);
+					}
+				}
+			}
+		}
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/FormToolkitParseContextProcessor.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/FormToolkitParseContextProcessor.java
index 8b3faabfc..92a009121 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/FormToolkitParseContextProcessor.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/FormToolkitParseContextProcessor.java
@@ -26,29 +26,29 @@
  * @coverage rcp.model.forms
  */
 public final class FormToolkitParseContextProcessor implements IParseContextProcessor {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final Object INSTANCE = new FormToolkitParseContextProcessor();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final Object INSTANCE = new FormToolkitParseContextProcessor();
 
-  private FormToolkitParseContextProcessor() {
-  }
+	private FormToolkitParseContextProcessor() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IParseContextProcessor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void process(AstEditor editor,
-      ExecutionFlowDescription flowDescription,
-      List<JavaInfo> components) throws Exception {
-    List<MethodDeclaration> methods = flowDescription.getStartMethods();
-    if (!methods.isEmpty()) {
-      MethodDeclaration method = methods.get(0);
-      FormToolkitAccessUtils.createFormToolkit_asMethodParameter(editor, method);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IParseContextProcessor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void process(AstEditor editor,
+			ExecutionFlowDescription flowDescription,
+			List<JavaInfo> components) throws Exception {
+		List<MethodDeclaration> methods = flowDescription.getStartMethods();
+		if (!methods.isEmpty()) {
+			MethodDeclaration method = methods.get(0);
+			FormToolkitAccessUtils.createFormToolkit_asMethodParameter(editor, method);
+		}
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/FormToolkitRootProcessor.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/FormToolkitRootProcessor.java
index bb6dbc637..265f84b00 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/FormToolkitRootProcessor.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/FormToolkitRootProcessor.java
@@ -32,54 +32,54 @@
  * @coverage rcp.model.forms
  */
 public final class FormToolkitRootProcessor implements IRootProcessor {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final IRootProcessor INSTANCE = new FormToolkitRootProcessor();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final IRootProcessor INSTANCE = new FormToolkitRootProcessor();
 
-  private FormToolkitRootProcessor() {
-  }
+	private FormToolkitRootProcessor() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IRootProcessor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void process(final JavaInfo root, List<JavaInfo> components) throws Exception {
-    root.addBroadcastListener(new JavaEventListener() {
-      @Override
-      public void associationTemplate(JavaInfo component, String[] source) throws Exception {
-        final String FORM_TOOLKIT_NULL = "(org.eclipse.ui.forms.widgets.FormToolkit) null";
-        if (IPreferenceConstants.TOOLKIT_ID.equals(component.getDescription().getToolkit().getId())
-            && source[0].contains(FORM_TOOLKIT_NULL)) {
-          InstanceFactoryInfo toolkitInstanceFactory = locateFormToolkitInfo(root);
-          String toolkitSource =
-              toolkitInstanceFactory != null
-                  ? TemplateUtils.getExpression(toolkitInstanceFactory)
-                  : "new org.eclipse.ui.forms.widgets.FormToolkit(org.eclipse.swt.widgets.Display.getCurrent())";
-          source[0] = StringUtils.replace(source[0], FORM_TOOLKIT_NULL, toolkitSource);
-        }
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IRootProcessor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void process(final JavaInfo root, List<JavaInfo> components) throws Exception {
+		root.addBroadcastListener(new JavaEventListener() {
+			@Override
+			public void associationTemplate(JavaInfo component, String[] source) throws Exception {
+				final String FORM_TOOLKIT_NULL = "(org.eclipse.ui.forms.widgets.FormToolkit) null";
+				if (IPreferenceConstants.TOOLKIT_ID.equals(component.getDescription().getToolkit().getId())
+						&& source[0].contains(FORM_TOOLKIT_NULL)) {
+					InstanceFactoryInfo toolkitInstanceFactory = locateFormToolkitInfo(root);
+					String toolkitSource =
+							toolkitInstanceFactory != null
+							? TemplateUtils.getExpression(toolkitInstanceFactory)
+									: "new org.eclipse.ui.forms.widgets.FormToolkit(org.eclipse.swt.widgets.Display.getCurrent())";
+					source[0] = StringUtils.replace(source[0], FORM_TOOLKIT_NULL, toolkitSource);
+				}
+			}
+		});
+	}
 
-  public static InstanceFactoryInfo locateFormToolkitInfo(JavaInfo root) {
-    List<InstanceFactoryContainerInfo> instanceFactorieContainers =
-        root.getChildren(InstanceFactoryContainerInfo.class);
-    for (InstanceFactoryContainerInfo instanceFactoryContainerInfo : instanceFactorieContainers) {
-      List<InstanceFactoryInfo> instanceFactoryInfos =
-          instanceFactoryContainerInfo.getChildren(InstanceFactoryInfo.class);
-      for (InstanceFactoryInfo instanceFactoryInfo : instanceFactoryInfos) {
-        if (ReflectionUtils.isSuccessorOf(
-            instanceFactoryInfo.getDescription().getComponentClass(),
-            "org.eclipse.ui.forms.widgets.FormToolkit")) {
-          return instanceFactoryInfo;
-        }
-      }
-    }
-    return null;
-  }
+	public static InstanceFactoryInfo locateFormToolkitInfo(JavaInfo root) {
+		List<InstanceFactoryContainerInfo> instanceFactorieContainers =
+				root.getChildren(InstanceFactoryContainerInfo.class);
+		for (InstanceFactoryContainerInfo instanceFactoryContainerInfo : instanceFactorieContainers) {
+			List<InstanceFactoryInfo> instanceFactoryInfos =
+					instanceFactoryContainerInfo.getChildren(InstanceFactoryInfo.class);
+			for (InstanceFactoryInfo instanceFactoryInfo : instanceFactoryInfos) {
+				if (ReflectionUtils.isSuccessorOf(
+						instanceFactoryInfo.getDescription().getComponentClass(),
+						"org.eclipse.ui.forms.widgets.FormToolkit")) {
+					return instanceFactoryInfo;
+				}
+			}
+		}
+		return null;
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/FormToolkitVariableSupport.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/FormToolkitVariableSupport.java
index 818bde1c5..028413e88 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/FormToolkitVariableSupport.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/FormToolkitVariableSupport.java
@@ -30,78 +30,78 @@
  * @coverage rcp.model.forms
  */
 public final class FormToolkitVariableSupport extends AbstractNoNameVariableSupport {
-  private final JavaInfo m_hostJavaInfo;
-  private final FormToolkitAccess m_toolkitAccess;
+	private final JavaInfo m_hostJavaInfo;
+	private final FormToolkitAccess m_toolkitAccess;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FormToolkitVariableSupport(JavaInfo javaInfo,
-      JavaInfo hostJavaInfo,
-      FormToolkitAccess toolkitAccess) {
-    super(javaInfo);
-    m_hostJavaInfo = hostJavaInfo;
-    m_toolkitAccess = toolkitAccess;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FormToolkitVariableSupport(JavaInfo javaInfo,
+			JavaInfo hostJavaInfo,
+			FormToolkitAccess toolkitAccess) {
+		super(javaInfo);
+		m_hostJavaInfo = hostJavaInfo;
+		m_toolkitAccess = toolkitAccess;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    return "toolkitAccess";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		return "toolkitAccess";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getTitle() throws Exception {
-    return "FormToolkit instance";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getTitle() throws Exception {
+		return "FormToolkit instance";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Expressions
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getReferenceExpression(NodeTarget target) throws Exception {
-    return m_toolkitAccess.getReferenceExpression();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Expressions
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getReferenceExpression(NodeTarget target) throws Exception {
+		return m_toolkitAccess.getReferenceExpression();
+	}
 
-  @Override
-  public String getAccessExpression(NodeTarget target) throws Exception {
-    return getReferenceExpression(target) + ".";
-  }
+	@Override
+	public String getAccessExpression(NodeTarget target) throws Exception {
+		return getReferenceExpression(target) + ".";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Target
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public StatementTarget getStatementTarget() throws Exception {
-    MethodDeclaration configureMethod;
-    {
-      String configureMethodSignature =
-          JavaInfoUtils.getParameter(m_hostJavaInfo, "FormToolkit.configureMethod");
-      Assert.isNotNull(
-          configureMethodSignature,
-          ModelMessages.FormToolkitVariableSupport_noFormToolkit_configureMethod,
-          m_hostJavaInfo);
-      configureMethod =
-          AstNodeUtils.getMethodBySignature(
-              JavaInfoUtils.getTypeDeclaration(m_hostJavaInfo),
-              configureMethodSignature);
-    }
-    // target = beginning of "configure" method
-    return new StatementTarget(configureMethod, true);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Target
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public StatementTarget getStatementTarget() throws Exception {
+		MethodDeclaration configureMethod;
+		{
+			String configureMethodSignature =
+					JavaInfoUtils.getParameter(m_hostJavaInfo, "FormToolkit.configureMethod");
+			Assert.isNotNull(
+					configureMethodSignature,
+					ModelMessages.FormToolkitVariableSupport_noFormToolkit_configureMethod,
+					m_hostJavaInfo);
+			configureMethod =
+					AstNodeUtils.getMethodBySignature(
+							JavaInfoUtils.getTypeDeclaration(m_hostJavaInfo),
+							configureMethodSignature);
+		}
+		// target = beginning of "configure" method
+		return new StatementTarget(configureMethod, true);
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/ManagedFormInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/ManagedFormInfo.java
index 763d0e759..7723e782f 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/ManagedFormInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/ManagedFormInfo.java
@@ -32,59 +32,59 @@
  * @coverage rcp.model.forms
  */
 public final class ManagedFormInfo extends AbstractComponentInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ManagedFormInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ManagedFormInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Initializing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void createExposedChildren() throws Exception {
-    super.createExposedChildren();
-    JavaInfoUtils.addChildExposedByMethod(this, "getForm");
-    {
-      JavaInfo toolkitJavaInfo = JavaInfoUtils.addChildExposedByMethod(this, "getToolkit");
-      EditorState.get(getEditor()).getTmp_Components().add(toolkitJavaInfo);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Initializing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void createExposedChildren() throws Exception {
+		super.createExposedChildren();
+		JavaInfoUtils.addChildExposedByMethod(this, "getForm");
+		{
+			JavaInfo toolkitJavaInfo = JavaInfoUtils.addChildExposedByMethod(this, "getToolkit");
+			EditorState.get(getEditor()).getTmp_Components().add(toolkitJavaInfo);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Hierarchy
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Object getComponentObject() {
-    return ExecutionUtils.runObject(new RunnableObjectEx<Object>() {
-      @Override
-      public Object runObject() throws Exception {
-        return ReflectionUtils.invokeMethod2(getObject(), "getForm");
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Hierarchy
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Object getComponentObject() {
+		return ExecutionUtils.runObject(new RunnableObjectEx<Object>() {
+			@Override
+			public Object runObject() throws Exception {
+				return ReflectionUtils.invokeMethod2(getObject(), "getForm");
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void refresh_fetch() throws Exception {
-    ControlInfo.refresh_fetch(this, new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        ManagedFormInfo.super.refresh_fetch();
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void refresh_fetch() throws Exception {
+		ControlInfo.refresh_fetch(this, new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				ManagedFormInfo.super.refresh_fetch();
+			}
+		});
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/MasterDetailsBlockInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/MasterDetailsBlockInfo.java
index 3b2b0a888..9b9ad4377 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/MasterDetailsBlockInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/MasterDetailsBlockInfo.java
@@ -40,150 +40,150 @@
  * @coverage rcp.model.forms
  */
 public final class MasterDetailsBlockInfo extends AbstractComponentInfo
-    implements
-      IJavaInfoRendering {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public MasterDetailsBlockInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-    JavaInfoUtils.scheduleSpecialRendering(this);
-  }
+implements
+IJavaInfoRendering {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public MasterDetailsBlockInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+		JavaInfoUtils.scheduleSpecialRendering(this);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Initializing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void initialize() throws Exception {
-    super.initialize();
-    prepare_hosting_ManagedForm();
-    FormToolkitAccessUtils.createFormToolkit_usingAccess(this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Initializing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void initialize() throws Exception {
+		super.initialize();
+		prepare_hosting_ManagedForm();
+		FormToolkitAccessUtils.createFormToolkit_usingAccess(this);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IJavaInfoRendering
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Shell m_shell;
-  private Object m_ManagedForm;
-  private Composite m_ManagedFormBody;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IJavaInfoRendering
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Shell m_shell;
+	private Object m_ManagedForm;
+	private Composite m_ManagedFormBody;
 
-  @Override
-  public void render() throws Exception {
-    // execute life cycle for MasterDetailsBlock
-    ReflectionUtils.invokeMethod(
-        getObject(),
-        "createContent(org.eclipse.ui.forms.IManagedForm)",
-        m_ManagedForm);
-    ExecutionUtils.runIgnore(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        SashForm sashForm = (SashForm) ReflectionUtils.getFieldObject(getObject(), "sashForm");
-        sashForm.setWeights(new int[]{100, 1});
-      }
-    });
-  }
+	@Override
+	public void render() throws Exception {
+		// execute life cycle for MasterDetailsBlock
+		ReflectionUtils.invokeMethod(
+				getObject(),
+				"createContent(org.eclipse.ui.forms.IManagedForm)",
+				m_ManagedForm);
+		ExecutionUtils.runIgnore(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				SashForm sashForm = (SashForm) ReflectionUtils.getFieldObject(getObject(), "sashForm");
+				sashForm.setWeights(new int[]{100, 1});
+			}
+		});
+	}
 
-  /**
-   * Prepares hosting {@link Shell} and {@link ManagedForm}.
-   */
-  private void prepare_hosting_ManagedForm() throws Exception {
-    ClassLoader editorLoader = JavaInfoUtils.getClassLoader(this);
-    // use same Shell and ManagedForm (so same FormToolkit instance) during life of this model
-    // We should use same FormToolkit, because some default values for Color/Font properties are
-    // from this FormToolkit, so will be disposed with FormToolkit.
-    if (m_shell == null) {
-      m_shell = new Shell();
-      m_shell.setLayout(new FillLayout());
-      // prepare ManagedForm instance
-      {
-        Class<?> class_ManagedForm = editorLoader.loadClass("org.eclipse.ui.forms.ManagedForm");
-        Constructor<?> constructor =
-            ReflectionUtils.getConstructor(class_ManagedForm, Composite.class);
-        m_ManagedForm = constructor.newInstance(m_shell);
-      }
-      // initialize ManagedForm.getForm().getBody()
-      {
-        Object formObject = ReflectionUtils.invokeMethod2(m_ManagedForm, "getForm");
-        m_ManagedFormBody = (Composite) ReflectionUtils.invokeMethod2(formObject, "getBody");
-        m_ManagedFormBody.setLayout(new FillLayout());
-      }
-      // schedule dispose
-      addBroadcastListener(new ObjectEventListener() {
-        @Override
-        public void dispose() throws Exception {
-          if (m_ManagedForm != null) {
-            ReflectionUtils.invokeMethod2(m_ManagedForm, "dispose");
-            m_ManagedForm = null;
-          }
-          if (m_shell != null) {
-            m_shell.dispose();
-            m_shell = null;
-          }
-        }
-      });
-    }
-  }
+	/**
+	 * Prepares hosting {@link Shell} and {@link ManagedForm}.
+	 */
+	private void prepare_hosting_ManagedForm() throws Exception {
+		ClassLoader editorLoader = JavaInfoUtils.getClassLoader(this);
+		// use same Shell and ManagedForm (so same FormToolkit instance) during life of this model
+		// We should use same FormToolkit, because some default values for Color/Font properties are
+		// from this FormToolkit, so will be disposed with FormToolkit.
+		if (m_shell == null) {
+			m_shell = new Shell();
+			m_shell.setLayout(new FillLayout());
+			// prepare ManagedForm instance
+			{
+				Class<?> class_ManagedForm = editorLoader.loadClass("org.eclipse.ui.forms.ManagedForm");
+				Constructor<?> constructor =
+						ReflectionUtils.getConstructor(class_ManagedForm, Composite.class);
+				m_ManagedForm = constructor.newInstance(m_shell);
+			}
+			// initialize ManagedForm.getForm().getBody()
+			{
+				Object formObject = ReflectionUtils.invokeMethod2(m_ManagedForm, "getForm");
+				m_ManagedFormBody = (Composite) ReflectionUtils.invokeMethod2(formObject, "getBody");
+				m_ManagedFormBody.setLayout(new FillLayout());
+			}
+			// schedule dispose
+			addBroadcastListener(new ObjectEventListener() {
+				@Override
+				public void dispose() throws Exception {
+					if (m_ManagedForm != null) {
+						ReflectionUtils.invokeMethod2(m_ManagedForm, "dispose");
+						m_ManagedForm = null;
+					}
+					if (m_shell != null) {
+						m_shell.dispose();
+						m_shell = null;
+					}
+				}
+			});
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AbstractComponentInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected TopBoundsSupport createTopBoundsSupport() {
-    return new MasterDetailsBlockTopBoundsSupport(this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AbstractComponentInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected TopBoundsSupport createTopBoundsSupport() {
+		return new MasterDetailsBlockTopBoundsSupport(this);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Hierarchy
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean canBeRoot() {
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Hierarchy
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean canBeRoot() {
+		return true;
+	}
 
-  @Override
-  public Composite getComponentObject() {
-    return m_ManagedFormBody;
-  }
+	@Override
+	public Composite getComponentObject() {
+		return m_ManagedFormBody;
+	}
 
-  /**
-   * @return the top level {@link Shell}.
-   */
-  Shell getShell() {
-    return m_shell;
-  }
+	/**
+	 * @return the top level {@link Shell}.
+	 */
+	Shell getShell() {
+		return m_shell;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void refresh_dispose() throws Exception {
-    for (Control control : m_ManagedFormBody.getChildren()) {
-      control.dispose();
-    }
-    super.refresh_dispose();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void refresh_dispose() throws Exception {
+		for (Control control : m_ManagedFormBody.getChildren()) {
+			control.dispose();
+		}
+		super.refresh_dispose();
+	}
 
-  @Override
-  protected void refresh_fetch() throws Exception {
-    ControlInfo.refresh_fetch(this, new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        MasterDetailsBlockInfo.super.refresh_fetch();
-      }
-    });
-  }
+	@Override
+	protected void refresh_fetch() throws Exception {
+		ControlInfo.refresh_fetch(this, new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				MasterDetailsBlockInfo.super.refresh_fetch();
+			}
+		});
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/MasterDetailsBlockTopBoundsSupport.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/MasterDetailsBlockTopBoundsSupport.java
index 78ab5b24b..544028f52 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/MasterDetailsBlockTopBoundsSupport.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/MasterDetailsBlockTopBoundsSupport.java
@@ -28,66 +28,66 @@
  * @coverage rcp.model.forms
  */
 public final class MasterDetailsBlockTopBoundsSupport extends TopBoundsSupport {
-  private final MasterDetailsBlockInfo m_block;
+	private final MasterDetailsBlockInfo m_block;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public MasterDetailsBlockTopBoundsSupport(MasterDetailsBlockInfo block) {
-    super(block);
-    m_block = block;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public MasterDetailsBlockTopBoundsSupport(MasterDetailsBlockInfo block) {
+		super(block);
+		m_block = block;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // TopBoundsSupport
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void apply() throws Exception {
-    // set size from resource properties (or default)
-    {
-      Dimension size = getResourceSize();
-      Shell shell = m_block.getShell();
-      // "size" is size of _content_ for "shell", so calculate trim
-      Rectangle trim =
-          RectangleSupport.getRectangle(shell.computeTrim(0, 0, size.width, size.height));
-      // OK, set size from trim
-      ControlSupport.setSize(shell, trim.width, trim.height);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// TopBoundsSupport
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void apply() throws Exception {
+		// set size from resource properties (or default)
+		{
+			Dimension size = getResourceSize();
+			Shell shell = m_block.getShell();
+			// "size" is size of _content_ for "shell", so calculate trim
+			Rectangle trim =
+					RectangleSupport.getRectangle(shell.computeTrim(0, 0, size.width, size.height));
+			// OK, set size from trim
+			ControlSupport.setSize(shell, trim.width, trim.height);
+		}
+	}
 
-  @Override
-  public void setSize(int width, int height) throws Exception {
-    // remember size in resource properties
-    setResourceSize(width, height);
-  }
+	@Override
+	public void setSize(int width, int height) throws Exception {
+		// remember size in resource properties
+		setResourceSize(width, height);
+	}
 
-  @Override
-  protected Dimension getDefaultSize() {
-    return new Dimension(600, 500);
-  }
+	@Override
+	protected Dimension getDefaultSize() {
+		return new Dimension(600, 500);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Show
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean show() throws Exception {
-    Shell shell = m_block.getShell();
-    // don't dispose Shell, MasterDetailsBlock_Info reuses it between refresh()
-    shell.addShellListener(new ShellAdapter() {
-      @Override
-      public void shellClosed(ShellEvent e) {
-        e.doit = false;
-        ((Shell) e.widget).setVisible(false);
-      }
-    });
-    // do show
-    CompositeTopBoundsSupport.show(m_block, shell);
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Show
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean show() throws Exception {
+		Shell shell = m_block.getShell();
+		// don't dispose Shell, MasterDetailsBlock_Info reuses it between refresh()
+		shell.addShellListener(new ShellAdapter() {
+			@Override
+			public void shellClosed(ShellEvent e) {
+				e.doit = false;
+				((Shell) e.widget).setVisible(false);
+			}
+		});
+		// do show
+		CompositeTopBoundsSupport.show(m_block, shell);
+		return true;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/ScrolledFormInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/ScrolledFormInfo.java
index b8ec41d13..8b0434521 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/ScrolledFormInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/ScrolledFormInfo.java
@@ -24,14 +24,14 @@
  * @coverage rcp.model.forms
  */
 public final class ScrolledFormInfo extends CompositeInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ScrolledFormInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ScrolledFormInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/SectionInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/SectionInfo.java
index 24bcfc18d..574c0612e 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/SectionInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/SectionInfo.java
@@ -23,20 +23,20 @@
  * @coverage rcp.model.forms
  */
 public final class SectionInfo extends ExpandableCompositeInfo {
-  private static final String[] POSITIONS = {
-      "setTextClient",
-      "setDescriptionControl",
-      "setSeparatorControl",
-      "setClient"};
+	private static final String[] POSITIONS = {
+			"setTextClient",
+			"setDescriptionControl",
+			"setSeparatorControl",
+	"setClient"};
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SectionInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport, POSITIONS);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SectionInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport, POSITIONS);
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/SectionPartInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/SectionPartInfo.java
index 235a5d80e..07a7a2688 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/SectionPartInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/SectionPartInfo.java
@@ -54,250 +54,250 @@
  * @coverage rcp.model.forms
  */
 public final class SectionPartInfo extends AbstractComponentInfo
-    implements
-      IThisMethodParameterEvaluator,
-      IWrapperInfo {
-  private Shell m_shell;
-  private Object m_ManagedForm;
-  private Composite m_ManagedFormBody;
-  private Object m_formPage;
+implements
+IThisMethodParameterEvaluator,
+IWrapperInfo {
+	private Shell m_shell;
+	private Object m_ManagedForm;
+	private Composite m_ManagedFormBody;
+	private Object m_formPage;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SectionPartInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SectionPartInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the underlying {@link SectionInfo}.
-   */
-  public SectionInfo getSection() {
-    try {
-      return (SectionInfo) getWrapper().getWrappedInfo();
-    } catch (Exception e) {
-      throw ReflectionUtils.propagate(e);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the underlying {@link SectionInfo}.
+	 */
+	public SectionInfo getSection() {
+		try {
+			return (SectionInfo) getWrapper().getWrappedInfo();
+		} catch (Exception e) {
+			throw ReflectionUtils.propagate(e);
+		}
+	}
 
-  /**
-   * @return <code>true</code> if we design this {@link SectionPart} now.
-   */
-  private boolean isThisSectionPart() {
-    return getCreationSupport() instanceof ThisCreationSupport;
-  }
+	/**
+	 * @return <code>true</code> if we design this {@link SectionPart} now.
+	 */
+	private boolean isThisSectionPart() {
+		return getCreationSupport() instanceof ThisCreationSupport;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Initialization
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void initialize() throws Exception {
-    super.initialize();
-    if (isThisSectionPart()) {
-      getWrapper().configureHierarchy(getParentJava());
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Initialization
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void initialize() throws Exception {
+		super.initialize();
+		if (isThisSectionPart()) {
+			getWrapper().configureHierarchy(getParentJava());
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IThisMethodParameterEvaluator
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Object evaluateParameter(EvaluationContext context,
-      MethodDeclaration methodDeclaration,
-      String methodSignature,
-      SingleVariableDeclaration parameter,
-      int index) throws Exception {
-    if (AstNodeUtils.isSuccessorOf(parameter, "org.eclipse.swt.widgets.Composite")) {
-      prepare_hosting_ManagedForm();
-      return m_ManagedFormBody;
-    }
-    if (AstNodeUtils.isSuccessorOf(parameter, "org.eclipse.ui.forms.editor.FormPage")) {
-      prepare_hosting_ManagedForm();
-      prepare_hosting_FormPage();
-      return m_formPage;
-    }
-    if (index == 2) {
-      return ExpandableComposite.TITLE_BAR
-          | ExpandableComposite.TWISTIE
-          | ExpandableComposite.EXPANDED;
-    }
-    return AstEvaluationEngine.UNKNOWN;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IThisMethodParameterEvaluator
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Object evaluateParameter(EvaluationContext context,
+			MethodDeclaration methodDeclaration,
+			String methodSignature,
+			SingleVariableDeclaration parameter,
+			int index) throws Exception {
+		if (AstNodeUtils.isSuccessorOf(parameter, "org.eclipse.swt.widgets.Composite")) {
+			prepare_hosting_ManagedForm();
+			return m_ManagedFormBody;
+		}
+		if (AstNodeUtils.isSuccessorOf(parameter, "org.eclipse.ui.forms.editor.FormPage")) {
+			prepare_hosting_ManagedForm();
+			prepare_hosting_FormPage();
+			return m_formPage;
+		}
+		if (index == 2) {
+			return ExpandableComposite.TITLE_BAR
+					| ExpandableComposite.TWISTIE
+					| ExpandableComposite.EXPANDED;
+		}
+		return AstEvaluationEngine.UNKNOWN;
+	}
 
-  private void prepare_hosting_FormPage() throws Exception {
-    ClassLoader editorLoader = JavaInfoUtils.getClassLoader(this);
-    Class<?> class_FormPage = editorLoader.loadClass("org.eclipse.ui.forms.editor.FormPage");
-    // create FormPage
-    m_formPage = new ByteBuddy() //
-        .subclass(class_FormPage) //
-        .method(named("getManagedForm").and(takesNoArguments())) //
-        .intercept(FixedValue.reference(m_ManagedForm)) //
-        .make() //
-        .load(editorLoader) //
-        .getLoaded() //
-        .getConstructor(String.class, String.class) //
-        .newInstance("id", "title");
-  }
+	private void prepare_hosting_FormPage() throws Exception {
+		ClassLoader editorLoader = JavaInfoUtils.getClassLoader(this);
+		Class<?> class_FormPage = editorLoader.loadClass("org.eclipse.ui.forms.editor.FormPage");
+		// create FormPage
+		m_formPage = new ByteBuddy() //
+				.subclass(class_FormPage) //
+				.method(named("getManagedForm").and(takesNoArguments())) //
+				.intercept(FixedValue.reference(m_ManagedForm)) //
+				.make() //
+				.load(editorLoader) //
+				.getLoaded() //
+				.getConstructor(String.class, String.class) //
+				.newInstance("id", "title");
+	}
 
-  /**
-   * Prepares hosting {@link Shell} and {@link ManagedForm}.
-   */
-  private void prepare_hosting_ManagedForm() throws Exception {
-    ClassLoader editorLoader = JavaInfoUtils.getClassLoader(this);
-    // use same Shell and ManagedForm (so same FormToolkit instance) during life of this model
-    // We should use same FormToolkit, because some default values for Color/Font properties are
-    // from this FormToolkit, so will be disposed with FormToolkit,
-    // so we should use IDefaultValueConverter to "copy" them, or use same instance of FormToolkit.
-    if (m_shell == null) {
-      m_shell = new Shell();
-      m_shell.setLayout(new FillLayout());
-      // prepare ManagedForm instance
-      {
-        Class<?> class_ManagedForm = editorLoader.loadClass("org.eclipse.ui.forms.ManagedForm");
-        Constructor<?> constructor =
-            ReflectionUtils.getConstructor(class_ManagedForm, Composite.class);
-        m_ManagedForm = constructor.newInstance(m_shell);
-      }
-      // initialize ManagedForm.getForm().getBody()
-      {
-        Object formObject = ReflectionUtils.invokeMethod2(m_ManagedForm, "getForm");
-        m_ManagedFormBody = (Composite) ReflectionUtils.invokeMethod2(formObject, "getBody");
-        m_ManagedFormBody.setLayout(new FillLayout());
-      }
-      // schedule dispose
-      addBroadcastListener(new ObjectEventListener() {
-        @Override
-        public void dispose() throws Exception {
-          if (m_ManagedForm != null) {
-            ReflectionUtils.invokeMethod2(m_ManagedForm, "dispose");
-            m_ManagedForm = null;
-          }
-          if (m_shell != null) {
-            m_shell.dispose();
-            m_shell = null;
-          }
-        }
-      });
-    }
-  }
+	/**
+	 * Prepares hosting {@link Shell} and {@link ManagedForm}.
+	 */
+	private void prepare_hosting_ManagedForm() throws Exception {
+		ClassLoader editorLoader = JavaInfoUtils.getClassLoader(this);
+		// use same Shell and ManagedForm (so same FormToolkit instance) during life of this model
+		// We should use same FormToolkit, because some default values for Color/Font properties are
+		// from this FormToolkit, so will be disposed with FormToolkit,
+		// so we should use IDefaultValueConverter to "copy" them, or use same instance of FormToolkit.
+		if (m_shell == null) {
+			m_shell = new Shell();
+			m_shell.setLayout(new FillLayout());
+			// prepare ManagedForm instance
+			{
+				Class<?> class_ManagedForm = editorLoader.loadClass("org.eclipse.ui.forms.ManagedForm");
+				Constructor<?> constructor =
+						ReflectionUtils.getConstructor(class_ManagedForm, Composite.class);
+				m_ManagedForm = constructor.newInstance(m_shell);
+			}
+			// initialize ManagedForm.getForm().getBody()
+			{
+				Object formObject = ReflectionUtils.invokeMethod2(m_ManagedForm, "getForm");
+				m_ManagedFormBody = (Composite) ReflectionUtils.invokeMethod2(formObject, "getBody");
+				m_ManagedFormBody.setLayout(new FillLayout());
+			}
+			// schedule dispose
+			addBroadcastListener(new ObjectEventListener() {
+				@Override
+				public void dispose() throws Exception {
+					if (m_ManagedForm != null) {
+						ReflectionUtils.invokeMethod2(m_ManagedForm, "dispose");
+						m_ManagedForm = null;
+					}
+					if (m_shell != null) {
+						m_shell.dispose();
+						m_shell = null;
+					}
+				}
+			});
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AbstractComponentInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected TopBoundsSupport createTopBoundsSupport() {
-    return new SectionPartTopBoundsSupport(this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AbstractComponentInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected TopBoundsSupport createTopBoundsSupport() {
+		return new SectionPartTopBoundsSupport(this);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Hierarchy
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean canBeRoot() {
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Hierarchy
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean canBeRoot() {
+		return true;
+	}
 
-  @Override
-  public Object getComponentObject() {
-    return getSection().getObject();
-  }
+	@Override
+	public Object getComponentObject() {
+		return getSection().getObject();
+	}
 
-  /**
-   * @return the top level {@link Shell}.
-   */
-  Shell getShell() {
-    return m_shell;
-  }
+	/**
+	 * @return the top level {@link Shell}.
+	 */
+	Shell getShell() {
+		return m_shell;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void refresh_dispose() throws Exception {
-    // if we have SectionPart, dispose its GUI
-    if (isThisSectionPart()) {
-      if (getObject() != null) {
-        ReflectionUtils.invokeMethod(
-            m_ManagedForm,
-            "removePart(org.eclipse.ui.forms.IFormPart)",
-            getObject());
-        ControlSupport.dispose(getSection().getObject());
-      }
-    }
-    // continue
-    super.refresh_dispose();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void refresh_dispose() throws Exception {
+		// if we have SectionPart, dispose its GUI
+		if (isThisSectionPart()) {
+			if (getObject() != null) {
+				ReflectionUtils.invokeMethod(
+						m_ManagedForm,
+						"removePart(org.eclipse.ui.forms.IFormPart)",
+						getObject());
+				ControlSupport.dispose(getSection().getObject());
+			}
+		}
+		// continue
+		super.refresh_dispose();
+	}
 
-  @Override
-  public void refresh_beforeCreate() throws Exception {
-    if (isThisSectionPart()) {
-      prepare_hosting_ManagedForm();
-    }
-    super.refresh_beforeCreate();
-  }
+	@Override
+	public void refresh_beforeCreate() throws Exception {
+		if (isThisSectionPart()) {
+			prepare_hosting_ManagedForm();
+		}
+		super.refresh_beforeCreate();
+	}
 
-  @Override
-  protected void refresh_afterCreate() throws Exception {
-    super.refresh_afterCreate();
-    // associate this IFormPart (SectionPart is IFormPart) with ManagedForm
-    if (isThisSectionPart()) {
-      ReflectionUtils.invokeMethod(
-          m_ManagedForm,
-          "addPart(org.eclipse.ui.forms.IFormPart)",
-          getObject());
-    }
-  }
+	@Override
+	protected void refresh_afterCreate() throws Exception {
+		super.refresh_afterCreate();
+		// associate this IFormPart (SectionPart is IFormPart) with ManagedForm
+		if (isThisSectionPart()) {
+			ReflectionUtils.invokeMethod(
+					m_ManagedForm,
+					"addPart(org.eclipse.ui.forms.IFormPart)",
+					getObject());
+		}
+	}
 
-  @Override
-  protected void refresh_fetch() throws Exception {
-    ControlInfo.refresh_fetch(this, new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        SectionPartInfo.super.refresh_fetch();
-      }
-    });
-  }
+	@Override
+	protected void refresh_fetch() throws Exception {
+		ControlInfo.refresh_fetch(this, new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				SectionPartInfo.super.refresh_fetch();
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IWrapperInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private WrapperByMethod m_wrapper;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IWrapperInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private WrapperByMethod m_wrapper;
 
-  @Override
-  public WrapperByMethod getWrapper() {
-    if (m_wrapper == null) {
-      m_wrapper = new WrapperByMethod(this, "getSection") {
-        @Override
-        protected void configureHierarchy(JavaInfo parent, JavaInfo control) throws Exception {
-          if (isThisSectionPart()) {
-            softAddChild(m_wrapperInfo, m_wrappedInfo);
-          } else {
-            super.configureHierarchy(parent, control);
-          }
-        }
-      };
-    }
-    return m_wrapper;
-  }
+	@Override
+	public WrapperByMethod getWrapper() {
+		if (m_wrapper == null) {
+			m_wrapper = new WrapperByMethod(this, "getSection") {
+				@Override
+				protected void configureHierarchy(JavaInfo parent, JavaInfo control) throws Exception {
+					if (isThisSectionPart()) {
+						softAddChild(m_wrapperInfo, m_wrappedInfo);
+					} else {
+						super.configureHierarchy(parent, control);
+					}
+				}
+			};
+		}
+		return m_wrapper;
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/SectionPartTopBoundsSupport.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/SectionPartTopBoundsSupport.java
index 7ad5786cf..7fd93394f 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/SectionPartTopBoundsSupport.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/SectionPartTopBoundsSupport.java
@@ -26,56 +26,56 @@
  * @coverage rcp.model.forms
  */
 public final class SectionPartTopBoundsSupport extends TopBoundsSupport {
-  private final SectionPartInfo m_part;
+	private final SectionPartInfo m_part;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SectionPartTopBoundsSupport(SectionPartInfo part) {
-    super(part);
-    m_part = part;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SectionPartTopBoundsSupport(SectionPartInfo part) {
+		super(part);
+		m_part = part;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // TopBoundsSupport
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void apply() throws Exception {
-    // set size from resource properties (or default)
-    {
-      Dimension size = getResourceSize();
-      Shell shell = m_part.getShell();
-      // "size" is size of _content_ for "shell", so calculate trim
-      Rectangle trim =
-          RectangleSupport.getRectangle(shell.computeTrim(0, 0, size.width, size.height));
-      // OK, set size from trim
-      ControlSupport.setSize(shell, trim.width, trim.height);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// TopBoundsSupport
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void apply() throws Exception {
+		// set size from resource properties (or default)
+		{
+			Dimension size = getResourceSize();
+			Shell shell = m_part.getShell();
+			// "size" is size of _content_ for "shell", so calculate trim
+			Rectangle trim =
+					RectangleSupport.getRectangle(shell.computeTrim(0, 0, size.width, size.height));
+			// OK, set size from trim
+			ControlSupport.setSize(shell, trim.width, trim.height);
+		}
+	}
 
-  @Override
-  public void setSize(int width, int height) throws Exception {
-    // remember size in resource properties
-    setResourceSize(width, height);
-  }
+	@Override
+	public void setSize(int width, int height) throws Exception {
+		// remember size in resource properties
+		setResourceSize(width, height);
+	}
 
-  @Override
-  protected Dimension getDefaultSize() {
-    return new Dimension(600, 500);
-  }
+	@Override
+	protected Dimension getDefaultSize() {
+		return new Dimension(600, 500);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Show
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean show() throws Exception {
-    CompositeTopBoundsSupport.show(m_part, m_part.getShell());
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Show
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean show() throws Exception {
+		CompositeTopBoundsSupport.show(m_part, m_part.getShell());
+		return true;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/column/ColumnLayoutAssistant.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/column/ColumnLayoutAssistant.java
index 86addc955..ef9a9c621 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/column/ColumnLayoutAssistant.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/column/ColumnLayoutAssistant.java
@@ -28,28 +28,28 @@
  * @coverage rcp.model.forms
  */
 public final class ColumnLayoutAssistant extends LayoutAssistantSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ColumnLayoutAssistant(ILayoutInfo<?> layout) {
-    super(layout);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ColumnLayoutAssistant(ILayoutInfo<?> layout) {
+		super(layout);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Pages
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected AbstractAssistantPage createLayoutPage(Composite parent) {
-    return new ColumnLayoutAssistantPage(parent, m_layout);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Pages
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected AbstractAssistantPage createLayoutPage(Composite parent) {
+		return new ColumnLayoutAssistantPage(parent, m_layout);
+	}
 
-  @Override
-  protected AbstractAssistantPage createConstraintsPage(Composite parent, List<ObjectInfo> objects) {
-    List<ILayoutDataInfo> dataList = getDataList(objects);
-    return new ColumnLayoutDataAssistantPage(parent, dataList);
-  }
+	@Override
+	protected AbstractAssistantPage createConstraintsPage(Composite parent, List<ObjectInfo> objects) {
+		List<ILayoutDataInfo> dataList = getDataList(objects);
+		return new ColumnLayoutDataAssistantPage(parent, dataList);
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/column/ColumnLayoutAssistantPage.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/column/ColumnLayoutAssistantPage.java
index f90ee7cb2..262427a1c 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/column/ColumnLayoutAssistantPage.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/column/ColumnLayoutAssistantPage.java
@@ -26,52 +26,52 @@
  * @coverage rcp.model.forms
  */
 public final class ColumnLayoutAssistantPage extends AbstractAssistantPage {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ColumnLayoutAssistantPage(Composite parent, Object selection) {
-    super(parent, selection);
-    GridLayoutFactory.create(this).columns(2);
-    // columns
-    {
-      Group columnsGroup =
-          addIntegerProperties(
-              this,
-              ModelMessages.ColumnLayoutAssistantPage_columnsGroup,
-              new String[][]{
-                  new String[]{"minNumColumns", ModelMessages.ColumnLayoutAssistantPage_minColumns},
-                  new String[]{"maxNumColumns", ModelMessages.ColumnLayoutAssistantPage_maxColumns},});
-      GridDataFactory.create(columnsGroup).fill();
-    }
-    // spacing
-    {
-      Group spacingGroup =
-          addIntegerProperties(
-              this,
-              ModelMessages.ColumnLayoutAssistantPage_spacingGroup,
-              new String[][]{
-                  new String[]{
-                      "horizontalSpacing",
-                      ModelMessages.ColumnLayoutAssistantPage_spacingHorizontal},
-                  new String[]{
-                      "verticalSpacing",
-                      ModelMessages.ColumnLayoutAssistantPage_spacingVertical},});
-      GridDataFactory.create(spacingGroup).fillV();
-    }
-    // margins for sides
-    {
-      Group marginsGroup =
-          addIntegerProperties(
-              this,
-              ModelMessages.ColumnLayoutAssistantPage_marginsGroup,
-              new String[][]{
-                  new String[]{"leftMargin", ModelMessages.ColumnLayoutAssistantPage_marginLeft},
-                  new String[]{"rightMargin", ModelMessages.ColumnLayoutAssistantPage_marginRight},
-                  new String[]{"topMargin", ModelMessages.ColumnLayoutAssistantPage_marginTop},
-                  new String[]{"bottomMargin", ModelMessages.ColumnLayoutAssistantPage_marginBottom}});
-      GridDataFactory.create(marginsGroup).fillV();
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ColumnLayoutAssistantPage(Composite parent, Object selection) {
+		super(parent, selection);
+		GridLayoutFactory.create(this).columns(2);
+		// columns
+		{
+			Group columnsGroup =
+					addIntegerProperties(
+							this,
+							ModelMessages.ColumnLayoutAssistantPage_columnsGroup,
+							new String[][]{
+								new String[]{"minNumColumns", ModelMessages.ColumnLayoutAssistantPage_minColumns},
+								new String[]{"maxNumColumns", ModelMessages.ColumnLayoutAssistantPage_maxColumns},});
+			GridDataFactory.create(columnsGroup).fill();
+		}
+		// spacing
+		{
+			Group spacingGroup =
+					addIntegerProperties(
+							this,
+							ModelMessages.ColumnLayoutAssistantPage_spacingGroup,
+							new String[][]{
+								new String[]{
+										"horizontalSpacing",
+										ModelMessages.ColumnLayoutAssistantPage_spacingHorizontal},
+								new String[]{
+										"verticalSpacing",
+										ModelMessages.ColumnLayoutAssistantPage_spacingVertical},});
+			GridDataFactory.create(spacingGroup).fillV();
+		}
+		// margins for sides
+		{
+			Group marginsGroup =
+					addIntegerProperties(
+							this,
+							ModelMessages.ColumnLayoutAssistantPage_marginsGroup,
+							new String[][]{
+								new String[]{"leftMargin", ModelMessages.ColumnLayoutAssistantPage_marginLeft},
+								new String[]{"rightMargin", ModelMessages.ColumnLayoutAssistantPage_marginRight},
+								new String[]{"topMargin", ModelMessages.ColumnLayoutAssistantPage_marginTop},
+								new String[]{"bottomMargin", ModelMessages.ColumnLayoutAssistantPage_marginBottom}});
+			GridDataFactory.create(marginsGroup).fillV();
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/column/ColumnLayoutDataAssistantPage.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/column/ColumnLayoutDataAssistantPage.java
index ec0b7130b..409c604da 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/column/ColumnLayoutDataAssistantPage.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/column/ColumnLayoutDataAssistantPage.java
@@ -27,47 +27,47 @@
  * @coverage rcp.model.forms
  */
 public final class ColumnLayoutDataAssistantPage extends AbstractAssistantPage {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ColumnLayoutDataAssistantPage(Composite parent, Object selection) {
-    super(parent, selection);
-    GridLayoutFactory.create(this).columns(2);
-    // width/height hints
-    {
-      Group group =
-          addIntegerProperties(
-              this,
-              ModelMessages.ColumnLayoutDataAssistantPage_sizeGroup,
-              new String[][]{
-                  {"widthHint", ModelMessages.ColumnLayoutDataAssistantPage_widthHint},
-                  {"heightHint", ModelMessages.ColumnLayoutDataAssistantPage_heightHint}},
-              new int[]{SWT.DEFAULT, SWT.DEFAULT});
-      GridDataFactory.create(group).fillV();
-    }
-    // horizontal alignment
-    {
-      Group orientationGroup =
-          addChoiceProperty(
-              this,
-              "horizontalAlignment",
-              ModelMessages.ColumnLayoutDataAssistantPage_alignmentGroup,
-              new Object[][]{
-                  new Object[]{
-                      ModelMessages.ColumnLayoutDataAssistantPage_alignmentLeft,
-                      ColumnLayoutData.LEFT},
-                  new Object[]{
-                      ModelMessages.ColumnLayoutDataAssistantPage_alignmentCenter,
-                      ColumnLayoutData.CENTER},
-                  new Object[]{
-                      ModelMessages.ColumnLayoutDataAssistantPage_alignmentRight,
-                      ColumnLayoutData.RIGHT},
-                  new Object[]{
-                      ModelMessages.ColumnLayoutDataAssistantPage_alignmentFill,
-                      ColumnLayoutData.FILL},});
-      GridDataFactory.create(orientationGroup).fillV();
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ColumnLayoutDataAssistantPage(Composite parent, Object selection) {
+		super(parent, selection);
+		GridLayoutFactory.create(this).columns(2);
+		// width/height hints
+		{
+			Group group =
+					addIntegerProperties(
+							this,
+							ModelMessages.ColumnLayoutDataAssistantPage_sizeGroup,
+							new String[][]{
+								{"widthHint", ModelMessages.ColumnLayoutDataAssistantPage_widthHint},
+								{"heightHint", ModelMessages.ColumnLayoutDataAssistantPage_heightHint}},
+							new int[]{SWT.DEFAULT, SWT.DEFAULT});
+			GridDataFactory.create(group).fillV();
+		}
+		// horizontal alignment
+		{
+			Group orientationGroup =
+					addChoiceProperty(
+							this,
+							"horizontalAlignment",
+							ModelMessages.ColumnLayoutDataAssistantPage_alignmentGroup,
+							new Object[][]{
+								new Object[]{
+										ModelMessages.ColumnLayoutDataAssistantPage_alignmentLeft,
+										ColumnLayoutData.LEFT},
+								new Object[]{
+										ModelMessages.ColumnLayoutDataAssistantPage_alignmentCenter,
+										ColumnLayoutData.CENTER},
+								new Object[]{
+										ModelMessages.ColumnLayoutDataAssistantPage_alignmentRight,
+										ColumnLayoutData.RIGHT},
+								new Object[]{
+										ModelMessages.ColumnLayoutDataAssistantPage_alignmentFill,
+										ColumnLayoutData.FILL},});
+			GridDataFactory.create(orientationGroup).fillV();
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/column/ColumnLayoutDataInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/column/ColumnLayoutDataInfo.java
index c7b20dfed..3a827ff1e 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/column/ColumnLayoutDataInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/column/ColumnLayoutDataInfo.java
@@ -24,44 +24,44 @@
  * @coverage rcp.model.forms
  */
 public final class ColumnLayoutDataInfo extends LayoutDataInfo implements IColumnLayoutDataInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ColumnLayoutDataInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ColumnLayoutDataInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Size
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void setWidthHint(int widthHint) throws Exception {
-    getPropertyByTitle("widthHint").setValue(widthHint);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Size
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void setWidthHint(int widthHint) throws Exception {
+		getPropertyByTitle("widthHint").setValue(widthHint);
+	}
 
-  @Override
-  public void setHeightHint(int heightHint) throws Exception {
-    getPropertyByTitle("heightHint").setValue(heightHint);
-  }
+	@Override
+	public void setHeightHint(int heightHint) throws Exception {
+		getPropertyByTitle("heightHint").setValue(heightHint);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Alignment
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public int getHorizontalAlignment() throws Exception {
-    return (Integer) getPropertyByTitle("horizontalAlignment").getValue();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Alignment
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public int getHorizontalAlignment() throws Exception {
+		return (Integer) getPropertyByTitle("horizontalAlignment").getValue();
+	}
 
-  @Override
-  public void setHorizontalAlignment(int horizontalAlignment) throws Exception {
-    getPropertyByTitle("horizontalAlignment").setValue(horizontalAlignment);
-  }
+	@Override
+	public void setHorizontalAlignment(int horizontalAlignment) throws Exception {
+		getPropertyByTitle("horizontalAlignment").setValue(horizontalAlignment);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/column/ColumnLayoutInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/column/ColumnLayoutInfo.java
index 2411919f8..80389f4e6 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/column/ColumnLayoutInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/column/ColumnLayoutInfo.java
@@ -45,147 +45,147 @@
  * @coverage rcp.model.forms
  */
 public class ColumnLayoutInfo extends GenericFlowLayoutInfo
-    implements
-      IColumnLayoutInfo<ControlInfo> {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ColumnLayoutInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-    new ColumnLayoutAssistant(this);
-    new ColumnLayoutSelectionActionsSupport<ControlInfo>(this);
-  }
+implements
+IColumnLayoutInfo<ControlInfo> {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ColumnLayoutInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+		new ColumnLayoutAssistant(this);
+		new ColumnLayoutSelectionActionsSupport<ControlInfo>(this);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Events
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void onSet() throws Exception {
-    super.onSet();
-    // restore general layout datas
-    for (ControlInfo control : getComposite().getChildrenControls()) {
-      LayoutDataInfo layoutData = getLayoutData(control);
-      if (layoutData != null) {
-        restoreLayoutData(control, layoutData);
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Events
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void onSet() throws Exception {
+		super.onSet();
+		// restore general layout datas
+		for (ControlInfo control : getComposite().getChildrenControls()) {
+			LayoutDataInfo layoutData = getLayoutData(control);
+			if (layoutData != null) {
+				restoreLayoutData(control, layoutData);
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Components/constraints
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Object getDefaultVirtualDataObject() throws Exception {
-    ClassLoader editorLoader = GlobalState.getClassLoader();
-    return editorLoader.loadClass("org.eclipse.ui.forms.widgets.ColumnLayoutData").newInstance();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Components/constraints
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Object getDefaultVirtualDataObject() throws Exception {
+		ClassLoader editorLoader = GlobalState.getClassLoader();
+		return editorLoader.loadClass("org.eclipse.ui.forms.widgets.ColumnLayoutData").newInstance();
+	}
 
-  @Override
-  public IColumnLayoutDataInfo getColumnData2(ControlInfo control) {
-    return getColumnData(control);
-  }
+	@Override
+	public IColumnLayoutDataInfo getColumnData2(ControlInfo control) {
+		return getColumnData(control);
+	}
 
-  /**
-   * @return {@link ColumnLayoutDataInfo} associated with given {@link ControlInfo}.
-   */
-  public static ColumnLayoutDataInfo getColumnData(ControlInfo control) {
-    return (ColumnLayoutDataInfo) getLayoutData(control);
-  }
+	/**
+	 * @return {@link ColumnLayoutDataInfo} associated with given {@link ControlInfo}.
+	 */
+	public static ColumnLayoutDataInfo getColumnData(ControlInfo control) {
+		return (ColumnLayoutDataInfo) getLayoutData(control);
+	}
 
-  //////////////////////////////////////////////////////////////////////////
-  //
-  // Clipboard
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void clipboardCopy_addControlCommands(ControlInfo control,
-      List<ClipboardCommand> commands) throws Exception {
-    // command for adding child
-    commands.add(new LayoutClipboardCommand<ColumnLayoutInfo>(control) {
-      private static final long serialVersionUID = 0L;
+	//////////////////////////////////////////////////////////////////////////
+	//
+	// Clipboard
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void clipboardCopy_addControlCommands(ControlInfo control,
+			List<ClipboardCommand> commands) throws Exception {
+		// command for adding child
+		commands.add(new LayoutClipboardCommand<ColumnLayoutInfo>(control) {
+			private static final long serialVersionUID = 0L;
 
-      @Override
-      protected void add(ColumnLayoutInfo layout, ControlInfo control) throws Exception {
-        layout.command_CREATE(control, null);
-      }
-    });
-    // command for ColumnLayoutData
-    ColumnLayoutDataInfo columnDataInfo = getColumnData(control);
-    if (!(columnDataInfo.getCreationSupport() instanceof IImplicitCreationSupport)) {
-      final int index = getComposite().getChildrenControls().indexOf(control);
-      final JavaInfoMemento dataMemento = JavaInfoMemento.createMemento(columnDataInfo);
-      commands.add(new ComponentClipboardCommand<CompositeInfo>() {
-        private static final long serialVersionUID = 0L;
+			@Override
+			protected void add(ColumnLayoutInfo layout, ControlInfo control) throws Exception {
+				layout.command_CREATE(control, null);
+			}
+		});
+		// command for ColumnLayoutData
+		ColumnLayoutDataInfo columnDataInfo = getColumnData(control);
+		if (!(columnDataInfo.getCreationSupport() instanceof IImplicitCreationSupport)) {
+			final int index = getComposite().getChildrenControls().indexOf(control);
+			final JavaInfoMemento dataMemento = JavaInfoMemento.createMemento(columnDataInfo);
+			commands.add(new ComponentClipboardCommand<CompositeInfo>() {
+				private static final long serialVersionUID = 0L;
 
-        @Override
-        public void execute(CompositeInfo composite) throws Exception {
-          ControlInfo control = composite.getChildrenControls().get(index);
-          // remove existing (virtual) LayoutData
-          control.removeChild(getLayoutData(control));
-          // add new LayoutData
-          JavaInfo columnData = dataMemento.create(composite);
-          JavaInfoUtils.add(
-              columnData,
-              new EmptyInvocationVariableSupport(columnData, "%parent%.setLayoutData(%child%)", 0),
-              BlockStatementGenerator.INSTANCE,
-              AssociationObjects.invocationChildNull(),
-              control,
-              null);
-          // apply properties
-          dataMemento.apply();
-        }
-      });
-    }
-  }
+				@Override
+				public void execute(CompositeInfo composite) throws Exception {
+					ControlInfo control = composite.getChildrenControls().get(index);
+					// remove existing (virtual) LayoutData
+					control.removeChild(getLayoutData(control));
+					// add new LayoutData
+					JavaInfo columnData = dataMemento.create(composite);
+					JavaInfoUtils.add(
+							columnData,
+							new EmptyInvocationVariableSupport(columnData, "%parent%.setLayoutData(%child%)", 0),
+							BlockStatementGenerator.INSTANCE,
+							AssociationObjects.invocationChildNull(),
+							control,
+							null);
+					// apply properties
+					dataMemento.apply();
+				}
+			});
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Manage general layout data.
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final BiMap<GeneralLayoutData.HorizontalAlignment, Integer> m_horizontalAlignmentMap =
-      ImmutableBiMap.of(
-          GeneralLayoutData.HorizontalAlignment.LEFT,
-          ColumnLayoutData.LEFT,
-          GeneralLayoutData.HorizontalAlignment.CENTER,
-          ColumnLayoutData.CENTER,
-          GeneralLayoutData.HorizontalAlignment.RIGHT,
-          ColumnLayoutData.RIGHT,
-          GeneralLayoutData.HorizontalAlignment.FILL,
-          ColumnLayoutData.FILL,
-          GeneralLayoutData.HorizontalAlignment.NONE,
-          0);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Manage general layout data.
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final BiMap<GeneralLayoutData.HorizontalAlignment, Integer> m_horizontalAlignmentMap =
+			ImmutableBiMap.of(
+					GeneralLayoutData.HorizontalAlignment.LEFT,
+					ColumnLayoutData.LEFT,
+					GeneralLayoutData.HorizontalAlignment.CENTER,
+					ColumnLayoutData.CENTER,
+					GeneralLayoutData.HorizontalAlignment.RIGHT,
+					ColumnLayoutData.RIGHT,
+					GeneralLayoutData.HorizontalAlignment.FILL,
+					ColumnLayoutData.FILL,
+					GeneralLayoutData.HorizontalAlignment.NONE,
+					0);
 
-  @Override
-  protected void storeLayoutData(ControlInfo control, LayoutDataInfo layoutData) throws Exception {
-    GeneralLayoutData generalLayoutData = new GeneralLayoutData();
-    ColumnLayoutDataInfo columnLayoutData = (ColumnLayoutDataInfo) layoutData;
-    generalLayoutData.horizontalAlignment =
-        GeneralLayoutData.getGeneralValue(
-            m_horizontalAlignmentMap,
-            (Integer) GeneralLayoutData.getLayoutPropertyValue(
-                columnLayoutData,
-                "horizontalAlignment"));
-    generalLayoutData.putToInfo(control);
-  }
+	@Override
+	protected void storeLayoutData(ControlInfo control, LayoutDataInfo layoutData) throws Exception {
+		GeneralLayoutData generalLayoutData = new GeneralLayoutData();
+		ColumnLayoutDataInfo columnLayoutData = (ColumnLayoutDataInfo) layoutData;
+		generalLayoutData.horizontalAlignment =
+				GeneralLayoutData.getGeneralValue(
+						m_horizontalAlignmentMap,
+						(Integer) GeneralLayoutData.getLayoutPropertyValue(
+								columnLayoutData,
+								"horizontalAlignment"));
+		generalLayoutData.putToInfo(control);
+	}
 
-  protected void restoreLayoutData(ControlInfo control, LayoutDataInfo layoutData) throws Exception {
-    ColumnLayoutDataInfo columnLayoutData = (ColumnLayoutDataInfo) layoutData;
-    GeneralLayoutData generalLayoutData = GeneralLayoutData.getFromInfoEx(control);
-    Integer horizontalAlignmentValue =
-        GeneralLayoutData.getRealValue(
-            m_horizontalAlignmentMap,
-            generalLayoutData.horizontalAlignment);
-    if (horizontalAlignmentValue != null) {
-      columnLayoutData.setHorizontalAlignment(horizontalAlignmentValue);
-    }
-  }
+	protected void restoreLayoutData(ControlInfo control, LayoutDataInfo layoutData) throws Exception {
+		ColumnLayoutDataInfo columnLayoutData = (ColumnLayoutDataInfo) layoutData;
+		GeneralLayoutData generalLayoutData = GeneralLayoutData.getFromInfoEx(control);
+		Integer horizontalAlignmentValue =
+				GeneralLayoutData.getRealValue(
+						m_horizontalAlignmentMap,
+						generalLayoutData.horizontalAlignment);
+		if (horizontalAlignmentValue != null) {
+			columnLayoutData.setHorizontalAlignment(horizontalAlignmentValue);
+		}
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/column/ColumnLayoutSelectionActionsSupport.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/column/ColumnLayoutSelectionActionsSupport.java
index 7b9df3df8..7876cff93 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/column/ColumnLayoutSelectionActionsSupport.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/column/ColumnLayoutSelectionActionsSupport.java
@@ -31,159 +31,159 @@
  * @coverage rcp.model.forms
  */
 public final class ColumnLayoutSelectionActionsSupport<C extends IControlInfo>
-    extends
-      ObjectEventListener {
-  private final IColumnLayoutInfo<C> m_layout;
+extends
+ObjectEventListener {
+	private final IColumnLayoutInfo<C> m_layout;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ColumnLayoutSelectionActionsSupport(IColumnLayoutInfo<C> layout) {
-    m_layout = layout;
-    m_layout.addBroadcastListener(this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ColumnLayoutSelectionActionsSupport(IColumnLayoutInfo<C> layout) {
+		m_layout = layout;
+		m_layout.addBroadcastListener(this);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ObjectEventListener
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void addSelectionActions(List<ObjectInfo> objects, List<Object> actions) throws Exception {
-    if (objects.isEmpty()) {
-      return;
-    }
-    // prepare layout data info's
-    List<IColumnLayoutDataInfo> dataInfos = Lists.newArrayList();
-    for (ObjectInfo object : objects) {
-      // check object
-      if (!(object instanceof IControlInfo) || object.getParent() != m_layout.getComposite()) {
-        return;
-      }
-      // add data info
-      @SuppressWarnings("unchecked")
-      C control = (C) object;
-      dataInfos.add(m_layout.getColumnData2(control));
-    }
-    // create horizontal actions
-    actions.add(new Separator());
-    addAlignmentAction(
-        actions,
-        dataInfos,
-        "left.gif",
-        ModelMessages.ColumnLayoutSelectionActionsSupport_alignmentLeft,
-        ColumnLayoutData.LEFT);
-    addAlignmentAction(
-        actions,
-        dataInfos,
-        "center.gif",
-        ModelMessages.ColumnLayoutSelectionActionsSupport_alignmentCenter,
-        ColumnLayoutData.CENTER);
-    addAlignmentAction(
-        actions,
-        dataInfos,
-        "right.gif",
-        ModelMessages.ColumnLayoutSelectionActionsSupport_alignmentRight,
-        ColumnLayoutData.RIGHT);
-    addAlignmentAction(
-        actions,
-        dataInfos,
-        "fill.gif",
-        ModelMessages.ColumnLayoutSelectionActionsSupport_alignmentFill,
-        ColumnLayoutData.FILL);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ObjectEventListener
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void addSelectionActions(List<ObjectInfo> objects, List<Object> actions) throws Exception {
+		if (objects.isEmpty()) {
+			return;
+		}
+		// prepare layout data info's
+		List<IColumnLayoutDataInfo> dataInfos = Lists.newArrayList();
+		for (ObjectInfo object : objects) {
+			// check object
+			if (!(object instanceof IControlInfo) || object.getParent() != m_layout.getComposite()) {
+				return;
+			}
+			// add data info
+			@SuppressWarnings("unchecked")
+			C control = (C) object;
+			dataInfos.add(m_layout.getColumnData2(control));
+		}
+		// create horizontal actions
+		actions.add(new Separator());
+		addAlignmentAction(
+				actions,
+				dataInfos,
+				"left.gif",
+				ModelMessages.ColumnLayoutSelectionActionsSupport_alignmentLeft,
+				ColumnLayoutData.LEFT);
+		addAlignmentAction(
+				actions,
+				dataInfos,
+				"center.gif",
+				ModelMessages.ColumnLayoutSelectionActionsSupport_alignmentCenter,
+				ColumnLayoutData.CENTER);
+		addAlignmentAction(
+				actions,
+				dataInfos,
+				"right.gif",
+				ModelMessages.ColumnLayoutSelectionActionsSupport_alignmentRight,
+				ColumnLayoutData.RIGHT);
+		addAlignmentAction(
+				actions,
+				dataInfos,
+				"fill.gif",
+				ModelMessages.ColumnLayoutSelectionActionsSupport_alignmentFill,
+				ColumnLayoutData.FILL);
+	}
 
-  private void addAlignmentAction(List<Object> actions,
-      List<IColumnLayoutDataInfo> dataInfos,
-      String iconPath,
-      String tooltip,
-      int alignment) throws Exception {
-    boolean isChecked = true;
-    // prepare select current value
-    for (IColumnLayoutDataInfo columnData : dataInfos) {
-      if (columnData.getHorizontalAlignment() != alignment) {
-        isChecked = false;
-        break;
-      }
-    }
-    // create action
-    AlignmentAction action =
-        new AlignmentAction(dataInfos, iconPath, tooltip, isChecked, alignment);
-    actions.add(action);
-  }
+	private void addAlignmentAction(List<Object> actions,
+			List<IColumnLayoutDataInfo> dataInfos,
+			String iconPath,
+			String tooltip,
+			int alignment) throws Exception {
+		boolean isChecked = true;
+		// prepare select current value
+		for (IColumnLayoutDataInfo columnData : dataInfos) {
+			if (columnData.getHorizontalAlignment() != alignment) {
+				isChecked = false;
+				break;
+			}
+		}
+		// create action
+		AlignmentAction action =
+				new AlignmentAction(dataInfos, iconPath, tooltip, isChecked, alignment);
+		actions.add(action);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AbstractAction
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private abstract class AbstractAction extends ObjectInfoAction {
-    private final List<IColumnLayoutDataInfo> m_dataInfos;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AbstractAction
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private abstract class AbstractAction extends ObjectInfoAction {
+		private final List<IColumnLayoutDataInfo> m_dataInfos;
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public AbstractAction(int style,
-        List<IColumnLayoutDataInfo> dataInfos,
-        String iconPath,
-        String tooltip,
-        boolean checked) {
-      super(m_layout.getUnderlyingModel(), "", style);
-      m_dataInfos = dataInfos;
-      String path = "info/layout/ColumnLayout/" + iconPath;
-      setImageDescriptor(Activator.getImageDescriptor(path));
-      setToolTipText(tooltip);
-      setChecked(checked);
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public AbstractAction(int style,
+				List<IColumnLayoutDataInfo> dataInfos,
+				String iconPath,
+				String tooltip,
+				boolean checked) {
+			super(m_layout.getUnderlyingModel(), "", style);
+			m_dataInfos = dataInfos;
+			String path = "info/layout/ColumnLayout/" + iconPath;
+			setImageDescriptor(Activator.getImageDescriptor(path));
+			setToolTipText(tooltip);
+			setChecked(checked);
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Run
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    protected void runEx() throws Exception {
-      for (IColumnLayoutDataInfo columnData : m_dataInfos) {
-        handleHorizontal(columnData);
-      }
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Run
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		protected void runEx() throws Exception {
+			for (IColumnLayoutDataInfo columnData : m_dataInfos) {
+				handleHorizontal(columnData);
+			}
+		}
 
-    protected abstract void handleHorizontal(IColumnLayoutDataInfo columnData) throws Exception;
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AlignmentAction
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private class AlignmentAction extends AbstractAction {
-    private final int m_alignment;
+		protected abstract void handleHorizontal(IColumnLayoutDataInfo columnData) throws Exception;
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AlignmentAction
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private class AlignmentAction extends AbstractAction {
+		private final int m_alignment;
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public AlignmentAction(List<IColumnLayoutDataInfo> dataInfos,
-        String iconPath,
-        String tooltip,
-        boolean checked,
-        int alignment) {
-      super(AS_RADIO_BUTTON, dataInfos, iconPath, tooltip, checked);
-      m_alignment = alignment;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public AlignmentAction(List<IColumnLayoutDataInfo> dataInfos,
+				String iconPath,
+				String tooltip,
+				boolean checked,
+				int alignment) {
+			super(AS_RADIO_BUTTON, dataInfos, iconPath, tooltip, checked);
+			m_alignment = alignment;
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // AbstractAction
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    protected void handleHorizontal(IColumnLayoutDataInfo columnData) throws Exception {
-      columnData.setHorizontalAlignment(m_alignment);
-    }
-  }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// AbstractAction
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		protected void handleHorizontal(IColumnLayoutDataInfo columnData) throws Exception {
+			columnData.setHorizontalAlignment(m_alignment);
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/column/IColumnLayoutDataInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/column/IColumnLayoutDataInfo.java
index 9724190aa..d5ace0991 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/column/IColumnLayoutDataInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/column/IColumnLayoutDataInfo.java
@@ -21,33 +21,33 @@
  * @coverage rcp.model.forms
  */
 public interface IColumnLayoutDataInfo extends ILayoutDataInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Hint
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets the value of <code>widthHint</code> property.
-   */
-  void setWidthHint(int widthHint) throws Exception;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Hint
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets the value of <code>widthHint</code> property.
+	 */
+	void setWidthHint(int widthHint) throws Exception;
 
-  /**
-   * Sets the value of <code>heightHint</code> property.
-   */
-  void setHeightHint(int heightHint) throws Exception;
+	/**
+	 * Sets the value of <code>heightHint</code> property.
+	 */
+	void setHeightHint(int heightHint) throws Exception;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Alignment
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the value for {@link ColumnLayoutData#horizontalAlignment} property.
-   */
-  int getHorizontalAlignment() throws Exception;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Alignment
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the value for {@link ColumnLayoutData#horizontalAlignment} property.
+	 */
+	int getHorizontalAlignment() throws Exception;
 
-  /**
-   * Sets value for {@link ColumnLayoutData#horizontalAlignment} property.
-   */
-  void setHorizontalAlignment(int horizontalAlignment) throws Exception;
+	/**
+	 * Sets value for {@link ColumnLayoutData#horizontalAlignment} property.
+	 */
+	void setHorizontalAlignment(int horizontalAlignment) throws Exception;
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/column/IColumnLayoutInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/column/IColumnLayoutInfo.java
index 281b5c83a..eb49762cb 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/column/IColumnLayoutInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/column/IColumnLayoutInfo.java
@@ -22,13 +22,13 @@
  * @coverage rcp.model.forms
  */
 public interface IColumnLayoutInfo<C extends IControlInfo> extends ILayoutInfo<C> {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Layout data
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return {@link IColumnLayoutDataInfo} associated with given {@link IControlInfo}.
-   */
-  IColumnLayoutDataInfo getColumnData2(C control);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Layout data
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return {@link IColumnLayoutDataInfo} associated with given {@link IControlInfo}.
+	 */
+	IColumnLayoutDataInfo getColumnData2(C control);
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/table/IPreferenceConstants.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/table/IPreferenceConstants.java
index 57030922a..5820cad8b 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/table/IPreferenceConstants.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/table/IPreferenceConstants.java
@@ -19,14 +19,14 @@
  * @coverage rcp.model.forms
  */
 public interface IPreferenceConstants {
-  /**
-   * When <code>true</code>, {@link ITableWrapLayoutInfo} can use
-   * {@link GridAlignmentHelper#V_GRAB_HORIZONTAL} and {@link GridAlignmentHelper#V_GRAB_VERTICAL}.
-   */
-  String P_ENABLE_GRAB = "TableWrapLayout.enableGrab";
-  /**
-   * When <code>true</code>, {@link ITableWrapLayoutInfo} can use
-   * {@link GridAlignmentHelper#V_RIGHT_LABEL} and {@link GridAlignmentHelper#V_RIGHT_TARGET}.
-   */
-  String P_ENABLE_RIGHT_ALIGNMENT = "TableWrapLayout.enableRightAlignment";
+	/**
+	 * When <code>true</code>, {@link ITableWrapLayoutInfo} can use
+	 * {@link GridAlignmentHelper#V_GRAB_HORIZONTAL} and {@link GridAlignmentHelper#V_GRAB_VERTICAL}.
+	 */
+	String P_ENABLE_GRAB = "TableWrapLayout.enableGrab";
+	/**
+	 * When <code>true</code>, {@link ITableWrapLayoutInfo} can use
+	 * {@link GridAlignmentHelper#V_RIGHT_LABEL} and {@link GridAlignmentHelper#V_RIGHT_TARGET}.
+	 */
+	String P_ENABLE_RIGHT_ALIGNMENT = "TableWrapLayout.enableRightAlignment";
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/table/ITableWrapDataInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/table/ITableWrapDataInfo.java
index dab12a58f..6f5950350 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/table/ITableWrapDataInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/table/ITableWrapDataInfo.java
@@ -24,123 +24,123 @@
  * @coverage rcp.model.forms
  */
 public interface ITableWrapDataInfo extends ILayoutDataInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Location
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return x/column.
-   */
-  int getX();
-
-  /**
-   * Sets x/column.
-   */
-  void setX(int x);
-
-  /**
-   * @return y/row.
-   */
-  int getY();
-
-  /**
-   * Sets y/row.
-   */
-  void setY(int y);
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Span
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the horizontal span.
-   */
-  int getHorizontalSpan();
-
-  /**
-   * Sets the horizontal span.
-   */
-  void setHorizontalSpan(int width) throws Exception;
-
-  /**
-   * @return the vertical span.
-   */
-  int getVerticalSpan();
-
-  /**
-   * Sets the vertical span.
-   */
-  void setVerticalSpan(int height) throws Exception;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Grab
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return value of {@link TableWrapData#grabHorizontal} property.
-   */
-  boolean getHorizontalGrab();
-
-  /**
-   * Sets the value of {@link TableWrapData#grabHorizontal} property.
-   */
-  void setHorizontalGrab(boolean grab) throws Exception;
-
-  /**
-   * @return value of {@link TableWrapData#grabVertical} property.
-   */
-  boolean getVerticalGrab();
-
-  /**
-   * Sets the value of {@link TableWrapData#grabVertical} property.
-   */
-  void setVerticalGrab(boolean grab) throws Exception;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Alignment
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return value of {@link TableWrapData#align} property.
-   */
-  int getHorizontalAlignment();
-
-  /**
-   * Sets value of {@link TableWrapData#align} property.
-   */
-  void setHorizontalAlignment(int alignment) throws Exception;
-
-  /**
-   * @return value of {@link TableWrapData#valign} property.
-   */
-  int getVerticalAlignment();
-
-  /**
-   * Sets value of {@link TableWrapData#valign} property.
-   */
-  void setVerticalAlignment(int alignment) throws Exception;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Context menu
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the small {@link Image} that represents horizontal/vertical alignment.
-   */
-  Image getSmallAlignmentImage(boolean horizontal);
-
-  /**
-   * Adds the horizontal alignment {@link Action}'s.
-   */
-  void fillHorizontalAlignmentMenu(IMenuManager manager);
-
-  /**
-   * Adds the vertical alignment {@link Action}'s.
-   */
-  void fillVerticalAlignmentMenu(IMenuManager manager);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Location
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return x/column.
+	 */
+	int getX();
+
+	/**
+	 * Sets x/column.
+	 */
+	void setX(int x);
+
+	/**
+	 * @return y/row.
+	 */
+	int getY();
+
+	/**
+	 * Sets y/row.
+	 */
+	void setY(int y);
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Span
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the horizontal span.
+	 */
+	int getHorizontalSpan();
+
+	/**
+	 * Sets the horizontal span.
+	 */
+	void setHorizontalSpan(int width) throws Exception;
+
+	/**
+	 * @return the vertical span.
+	 */
+	int getVerticalSpan();
+
+	/**
+	 * Sets the vertical span.
+	 */
+	void setVerticalSpan(int height) throws Exception;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Grab
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return value of {@link TableWrapData#grabHorizontal} property.
+	 */
+	boolean getHorizontalGrab();
+
+	/**
+	 * Sets the value of {@link TableWrapData#grabHorizontal} property.
+	 */
+	void setHorizontalGrab(boolean grab) throws Exception;
+
+	/**
+	 * @return value of {@link TableWrapData#grabVertical} property.
+	 */
+	boolean getVerticalGrab();
+
+	/**
+	 * Sets the value of {@link TableWrapData#grabVertical} property.
+	 */
+	void setVerticalGrab(boolean grab) throws Exception;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Alignment
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return value of {@link TableWrapData#align} property.
+	 */
+	int getHorizontalAlignment();
+
+	/**
+	 * Sets value of {@link TableWrapData#align} property.
+	 */
+	void setHorizontalAlignment(int alignment) throws Exception;
+
+	/**
+	 * @return value of {@link TableWrapData#valign} property.
+	 */
+	int getVerticalAlignment();
+
+	/**
+	 * Sets value of {@link TableWrapData#valign} property.
+	 */
+	void setVerticalAlignment(int alignment) throws Exception;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Context menu
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the small {@link Image} that represents horizontal/vertical alignment.
+	 */
+	Image getSmallAlignmentImage(boolean horizontal);
+
+	/**
+	 * Adds the horizontal alignment {@link Action}'s.
+	 */
+	void fillHorizontalAlignmentMenu(IMenuManager manager);
+
+	/**
+	 * Adds the vertical alignment {@link Action}'s.
+	 */
+	void fillVerticalAlignmentMenu(IMenuManager manager);
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/table/ITableWrapLayoutInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/table/ITableWrapLayoutInfo.java
index 0a979b9d6..bdf89a211 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/table/ITableWrapLayoutInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/table/ITableWrapLayoutInfo.java
@@ -26,124 +26,124 @@
  * @coverage rcp.model.forms
  */
 public interface ITableWrapLayoutInfo<C extends IControlInfo> extends ILayoutInfo<C> {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if given {@link IControlInfo} is filler.
-   */
-  boolean isFiller(C control);
-
-  /**
-   * "Fixes" grid, i.e. ensures that all cells are filled (at least with fillers), even if this is
-   * not strongly required by layout itself for final cells. We do this to avoid checks for
-   * <code>null</code> in many places.
-   */
-  void fixGrid() throws Exception;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Dimensions access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link List} of {@link TableWrapColumnInfo}.
-   */
-  List<TableWrapColumnInfo<C>> getColumns();
-
-  /**
-   * @return the {@link List} of {@link TableWrapRowInfo}.
-   */
-  List<TableWrapRowInfo<C>> getRows();
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Dimensions operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Deletes column with given index and all controls that located in this column.
-   */
-  void command_deleteColumn(int column, boolean deleteEmptyRows) throws Exception;
-
-  /**
-   * Deletes row with given index and all controls that located in this row.
-   */
-  void command_deleteRow(int row, boolean deleteEmptyColumn) throws Exception;
-
-  /**
-   * Moves column from/to given index.
-   */
-  void command_MOVE_COLUMN(int fromIndex, int toIndex) throws Exception;
-
-  /**
-   * Moves row from/to given index.
-   */
-  void command_MOVE_ROW(int fromIndex, int toIndex) throws Exception;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Creates new {@link IControlInfo} in given cell.
-   *
-   * @param newControl
-   *          the new {@link IControlInfo} to create.
-   * @param column
-   *          the column (0 based).
-   * @param row
-   *          the row (0 based).
-   */
-  void command_CREATE(C newControl, int column, boolean insertColumn, int row, boolean insertRow)
-      throws Exception;
-
-  /**
-   * Moves existing {@link IControlInfo} into new cell.
-   */
-  void command_MOVE(C control, int column, boolean insertColumn, int row, boolean insertRow)
-      throws Exception;
-
-  /**
-   * Adds {@link IControlInfo} from other parent into cell.
-   */
-  void command_ADD(C control, int column, boolean insertColumn, int row, boolean insertRow)
-      throws Exception;
-
-  /**
-   * Sets the cells occupied by given {@link IControlInfo}.
-   *
-   * @param forMove
-   *          is <code>true</code> if we move control and <code>false</code> if we set cells for
-   *          newly added control.
-   */
-  void command_setCells(C control, Rectangle cells, boolean forMove) throws Exception;
-
-  /**
-   * Sets the height hint for given {@link IControlInfo}.
-   */
-  void command_setHeightHint(C control, int size) throws Exception;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IGridInfo support
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link IGridInfo} that describes this layout.
-   */
-  IGridInfo getGridInfo();
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Layout data
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return {@link ITableWrapDataInfo} associated with given {@link IControlInfo}.
-   */
-  ITableWrapDataInfo getTableWrapData2(C control);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if given {@link IControlInfo} is filler.
+	 */
+	boolean isFiller(C control);
+
+	/**
+	 * "Fixes" grid, i.e. ensures that all cells are filled (at least with fillers), even if this is
+	 * not strongly required by layout itself for final cells. We do this to avoid checks for
+	 * <code>null</code> in many places.
+	 */
+	void fixGrid() throws Exception;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Dimensions access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link List} of {@link TableWrapColumnInfo}.
+	 */
+	List<TableWrapColumnInfo<C>> getColumns();
+
+	/**
+	 * @return the {@link List} of {@link TableWrapRowInfo}.
+	 */
+	List<TableWrapRowInfo<C>> getRows();
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Dimensions operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Deletes column with given index and all controls that located in this column.
+	 */
+	void command_deleteColumn(int column, boolean deleteEmptyRows) throws Exception;
+
+	/**
+	 * Deletes row with given index and all controls that located in this row.
+	 */
+	void command_deleteRow(int row, boolean deleteEmptyColumn) throws Exception;
+
+	/**
+	 * Moves column from/to given index.
+	 */
+	void command_MOVE_COLUMN(int fromIndex, int toIndex) throws Exception;
+
+	/**
+	 * Moves row from/to given index.
+	 */
+	void command_MOVE_ROW(int fromIndex, int toIndex) throws Exception;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Creates new {@link IControlInfo} in given cell.
+	 *
+	 * @param newControl
+	 *          the new {@link IControlInfo} to create.
+	 * @param column
+	 *          the column (0 based).
+	 * @param row
+	 *          the row (0 based).
+	 */
+	void command_CREATE(C newControl, int column, boolean insertColumn, int row, boolean insertRow)
+			throws Exception;
+
+	/**
+	 * Moves existing {@link IControlInfo} into new cell.
+	 */
+	void command_MOVE(C control, int column, boolean insertColumn, int row, boolean insertRow)
+			throws Exception;
+
+	/**
+	 * Adds {@link IControlInfo} from other parent into cell.
+	 */
+	void command_ADD(C control, int column, boolean insertColumn, int row, boolean insertRow)
+			throws Exception;
+
+	/**
+	 * Sets the cells occupied by given {@link IControlInfo}.
+	 *
+	 * @param forMove
+	 *          is <code>true</code> if we move control and <code>false</code> if we set cells for
+	 *          newly added control.
+	 */
+	void command_setCells(C control, Rectangle cells, boolean forMove) throws Exception;
+
+	/**
+	 * Sets the height hint for given {@link IControlInfo}.
+	 */
+	void command_setHeightHint(C control, int size) throws Exception;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IGridInfo support
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link IGridInfo} that describes this layout.
+	 */
+	IGridInfo getGridInfo();
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Layout data
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return {@link ITableWrapDataInfo} associated with given {@link IControlInfo}.
+	 */
+	ITableWrapDataInfo getTableWrapData2(C control);
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/table/TableWrapColumnInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/table/TableWrapColumnInfo.java
index b593f026a..9f06540ab 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/table/TableWrapColumnInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/table/TableWrapColumnInfo.java
@@ -21,75 +21,75 @@
  * @coverage rcp.model.forms
  */
 public final class TableWrapColumnInfo<C extends IControlInfo> extends TableWrapDimensionInfo<C> {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public TableWrapColumnInfo(ITableWrapLayoutInfo<C> layout) {
-    super(layout);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public TableWrapColumnInfo(ITableWrapLayoutInfo<C> layout) {
+		super(layout);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public int getIndex() {
-    return m_layout.getColumns().indexOf(this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public int getIndex() {
+		return m_layout.getColumns().indexOf(this);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Grab
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected boolean getGrab(ITableWrapDataInfo layoutData) {
-    return layoutData.getHorizontalGrab();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Grab
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected boolean getGrab(ITableWrapDataInfo layoutData) {
+		return layoutData.getHorizontalGrab();
+	}
 
-  @Override
-  protected void setGrab(ITableWrapDataInfo layoutData, boolean grab) throws Exception {
-    layoutData.setHorizontalGrab(grab);
-  }
+	@Override
+	protected void setGrab(ITableWrapDataInfo layoutData, boolean grab) throws Exception {
+		layoutData.setHorizontalGrab(grab);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Alignment
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getAlignmentTitle(int alignment) {
-    if (alignment == TableWrapData.LEFT) {
-      return "left";
-    } else if (alignment == TableWrapData.CENTER) {
-      return "center";
-    } else if (alignment == TableWrapData.RIGHT) {
-      return "right";
-    } else {
-      return "fill";
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Alignment
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getAlignmentTitle(int alignment) {
+		if (alignment == TableWrapData.LEFT) {
+			return "left";
+		} else if (alignment == TableWrapData.CENTER) {
+			return "center";
+		} else if (alignment == TableWrapData.RIGHT) {
+			return "right";
+		} else {
+			return "fill";
+		}
+	}
 
-  @Override
-  protected int getAlignment(ITableWrapDataInfo layoutData) {
-    return layoutData.getHorizontalAlignment();
-  }
+	@Override
+	protected int getAlignment(ITableWrapDataInfo layoutData) {
+		return layoutData.getHorizontalAlignment();
+	}
 
-  @Override
-  protected void setAlignment(ITableWrapDataInfo layoutData, int alignment) throws Exception {
-    layoutData.setHorizontalAlignment(alignment);
-  }
+	@Override
+	protected void setAlignment(ITableWrapDataInfo layoutData, int alignment) throws Exception {
+		layoutData.setHorizontalAlignment(alignment);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Processing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected boolean shouldProcessThisControl(ITableWrapDataInfo layoutData) {
-    return layoutData.getX() == getIndex();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Processing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected boolean shouldProcessThisControl(ITableWrapDataInfo layoutData) {
+		return layoutData.getX() == getIndex();
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/table/TableWrapData2.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/table/TableWrapData2.java
index 13bb3c52d..7dd83d114 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/table/TableWrapData2.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/table/TableWrapData2.java
@@ -23,158 +23,158 @@
  * @coverage rcp.model.forms
  */
 public final class TableWrapData2 {
-  /**
-   * The control will be left-justified.
-   */
-  public static final int LEFT = 1 << 1;
-  /**
-   * The control will be centered horizontally.
-   */
-  public static final int CENTER = 1 << 2;
-  /**
-   * The control will be right-justified.
-   */
-  public static final int RIGHT = 1 << 3;
-  /**
-   * The control will be aligned with the top of the cell.
-   */
-  public static final int TOP = 1 << 4;
-  /**
-   * The control will be centered vertically.
-   */
-  public static final int MIDDLE = 1 << 5;
-  /**
-   * The control will be aligned with the bottom of the cell.
-   */
-  public static final int BOTTOM = 1 << 6;
-  /**
-   * The control will have the same width as the column it occupies.
-   */
-  public static final int FILL = 1 << 7;
-  /**
-   * In addition to filling width or height, the control will take part in allocation of any excess
-   * space. Note that this constant can only be passed to the constructor (cannot be directly
-   * assigned to <code>align</code> variable).
-   */
-  public static final int FILL_GRAB = 1 << 8;
-  /**
-   * Number of columns to span (default is 1).
-   */
-  public int colspan = 1;
-  /**
-   * Number of rows to span (default is 1).
-   */
-  public int rowspan = 1;
-  /**
-   * Horizontal alignment (LEFT, CENTER, RIGHT or FILL; default is LEFT).
-   */
-  public int align = LEFT;
-  /**
-   * Vertical alignment (TOP, MIDDLE, BOTTOM or FILL; default is TOP).
-   */
-  public int valign = TOP;
-  /**
-   * Horizontal indent (default is 0).
-   */
-  public int indent = 0;
-  /**
-   * Maximum width of the control (default is SWT.DEFAULT).
-   */
-  public int maxWidth = SWT.DEFAULT;
-  /**
-   * Maximum height of the control (default is SWT.DEFAULT).
-   */
-  public int maxHeight = SWT.DEFAULT;
-  /**
-   * Height hint of the control (default is SWT.DEFAULT).
-   */
-  public int heightHint = SWT.DEFAULT;
-  /**
-   * If <code>true</code>, take part in excess horizontal space distribution. (default is
-   * <code>false</code>).
-   */
-  public boolean grabHorizontal;
-  /**
-   * If <code>true</code>, will grab any excess vertical space (default is <code>false</code>). Note
-   * that since TableWrapLayout works top-down and does not grows to fill the parent, this only
-   * applies to local excess space created by fixed-height children that span multiple rows.
-   */
-  public boolean grabVertical;
-  int childIndex;
-  boolean isItemData = true;
-  int compWidth;
-  Point compSize;
+	/**
+	 * The control will be left-justified.
+	 */
+	public static final int LEFT = 1 << 1;
+	/**
+	 * The control will be centered horizontally.
+	 */
+	public static final int CENTER = 1 << 2;
+	/**
+	 * The control will be right-justified.
+	 */
+	public static final int RIGHT = 1 << 3;
+	/**
+	 * The control will be aligned with the top of the cell.
+	 */
+	public static final int TOP = 1 << 4;
+	/**
+	 * The control will be centered vertically.
+	 */
+	public static final int MIDDLE = 1 << 5;
+	/**
+	 * The control will be aligned with the bottom of the cell.
+	 */
+	public static final int BOTTOM = 1 << 6;
+	/**
+	 * The control will have the same width as the column it occupies.
+	 */
+	public static final int FILL = 1 << 7;
+	/**
+	 * In addition to filling width or height, the control will take part in allocation of any excess
+	 * space. Note that this constant can only be passed to the constructor (cannot be directly
+	 * assigned to <code>align</code> variable).
+	 */
+	public static final int FILL_GRAB = 1 << 8;
+	/**
+	 * Number of columns to span (default is 1).
+	 */
+	public int colspan = 1;
+	/**
+	 * Number of rows to span (default is 1).
+	 */
+	public int rowspan = 1;
+	/**
+	 * Horizontal alignment (LEFT, CENTER, RIGHT or FILL; default is LEFT).
+	 */
+	public int align = LEFT;
+	/**
+	 * Vertical alignment (TOP, MIDDLE, BOTTOM or FILL; default is TOP).
+	 */
+	public int valign = TOP;
+	/**
+	 * Horizontal indent (default is 0).
+	 */
+	public int indent = 0;
+	/**
+	 * Maximum width of the control (default is SWT.DEFAULT).
+	 */
+	public int maxWidth = SWT.DEFAULT;
+	/**
+	 * Maximum height of the control (default is SWT.DEFAULT).
+	 */
+	public int maxHeight = SWT.DEFAULT;
+	/**
+	 * Height hint of the control (default is SWT.DEFAULT).
+	 */
+	public int heightHint = SWT.DEFAULT;
+	/**
+	 * If <code>true</code>, take part in excess horizontal space distribution. (default is
+	 * <code>false</code>).
+	 */
+	public boolean grabHorizontal;
+	/**
+	 * If <code>true</code>, will grab any excess vertical space (default is <code>false</code>). Note
+	 * that since TableWrapLayout works top-down and does not grows to fill the parent, this only
+	 * applies to local excess space created by fixed-height children that span multiple rows.
+	 */
+	public boolean grabVertical;
+	int childIndex;
+	boolean isItemData = true;
+	int compWidth;
+	Point compSize;
 
-  /**
-   * The default constructor.
-   */
-  public TableWrapData2() {
-  }
+	/**
+	 * The default constructor.
+	 */
+	public TableWrapData2() {
+	}
 
-  /**
-   * The convenience constructor - allows passing the horizontal alignment style.
-   *
-   * @param align
-   *          horizontal alignment (LEFT, CENTER, RIGHT, FILL or FILL_GRAB).
-   */
-  public TableWrapData2(int align) {
-    this(align, TOP, 1, 1);
-  }
+	/**
+	 * The convenience constructor - allows passing the horizontal alignment style.
+	 *
+	 * @param align
+	 *          horizontal alignment (LEFT, CENTER, RIGHT, FILL or FILL_GRAB).
+	 */
+	public TableWrapData2(int align) {
+		this(align, TOP, 1, 1);
+	}
 
-  /**
-   * The convenience constructor - allows passing the alignment styles.
-   *
-   * @param align
-   *          horizontal alignment (LEFT, CENTER, RIGHT, FILL or FILL_GRAB).
-   * @param valign
-   *          vertical alignment (TOP, MIDDLE, BOTTOM, FILL or FILL_GRAB).
-   */
-  public TableWrapData2(int align, int valign) {
-    this(align, valign, 1, 1);
-  }
+	/**
+	 * The convenience constructor - allows passing the alignment styles.
+	 *
+	 * @param align
+	 *          horizontal alignment (LEFT, CENTER, RIGHT, FILL or FILL_GRAB).
+	 * @param valign
+	 *          vertical alignment (TOP, MIDDLE, BOTTOM, FILL or FILL_GRAB).
+	 */
+	public TableWrapData2(int align, int valign) {
+		this(align, valign, 1, 1);
+	}
 
-  /**
-   * The convenience constructor - allows passing the alignment styles, column and row spans.
-   *
-   * @param align
-   *          horizontal alignment (LEFT, CENTER, RIGHT, FILL or FILL_GRAB).
-   * @param valign
-   *          vertical alignment (TOP, MIDDLE, BOTTOM, FILL or FILL_GRAB)
-   * @param rowspan
-   *          row span (1 or more)
-   * @param colspan
-   *          column span (1 or more)
-   */
-  public TableWrapData2(int align, int valign, int rowspan, int colspan) {
-    if (align != LEFT && align != CENTER && align != RIGHT && align != FILL && align != FILL_GRAB) {
-      SWT.error(SWT.ERROR_INVALID_ARGUMENT, null, "align"); //$NON-NLS-1$
-    }
-    if (valign != TOP
-        && valign != MIDDLE
-        && valign != BOTTOM
-        && valign != FILL
-        && valign != FILL_GRAB) {
-      SWT.error(SWT.ERROR_INVALID_ARGUMENT, null, "valign"); //$NON-NLS-1$
-    }
-    if (rowspan < 1) {
-      SWT.error(SWT.ERROR_INVALID_ARGUMENT, null, "rowspan"); //$NON-NLS-1$
-    }
-    if (colspan < 1) {
-      SWT.error(SWT.ERROR_INVALID_ARGUMENT, null, "colspan"); //$NON-NLS-1$
-    }
-    if (align == FILL_GRAB) {
-      this.align = FILL;
-      grabHorizontal = true;
-    } else {
-      this.align = align;
-    }
-    if (valign == FILL_GRAB) {
-      this.valign = FILL;
-      grabVertical = true;
-    } else {
-      this.valign = valign;
-    }
-    this.rowspan = rowspan;
-    this.colspan = colspan;
-  }
+	/**
+	 * The convenience constructor - allows passing the alignment styles, column and row spans.
+	 *
+	 * @param align
+	 *          horizontal alignment (LEFT, CENTER, RIGHT, FILL or FILL_GRAB).
+	 * @param valign
+	 *          vertical alignment (TOP, MIDDLE, BOTTOM, FILL or FILL_GRAB)
+	 * @param rowspan
+	 *          row span (1 or more)
+	 * @param colspan
+	 *          column span (1 or more)
+	 */
+	public TableWrapData2(int align, int valign, int rowspan, int colspan) {
+		if (align != LEFT && align != CENTER && align != RIGHT && align != FILL && align != FILL_GRAB) {
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT, null, "align"); //$NON-NLS-1$
+		}
+		if (valign != TOP
+				&& valign != MIDDLE
+				&& valign != BOTTOM
+				&& valign != FILL
+				&& valign != FILL_GRAB) {
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT, null, "valign"); //$NON-NLS-1$
+		}
+		if (rowspan < 1) {
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT, null, "rowspan"); //$NON-NLS-1$
+		}
+		if (colspan < 1) {
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT, null, "colspan"); //$NON-NLS-1$
+		}
+		if (align == FILL_GRAB) {
+			this.align = FILL;
+			grabHorizontal = true;
+		} else {
+			this.align = align;
+		}
+		if (valign == FILL_GRAB) {
+			this.valign = FILL;
+			grabVertical = true;
+		} else {
+			this.valign = valign;
+		}
+		this.rowspan = rowspan;
+		this.colspan = colspan;
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/table/TableWrapDataInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/table/TableWrapDataInfo.java
index 7bedd2050..0ec59a87c 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/table/TableWrapDataInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/table/TableWrapDataInfo.java
@@ -45,515 +45,515 @@
  * @coverage rcp.model.forms
  */
 public final class TableWrapDataInfo extends LayoutDataInfo implements ITableWrapDataInfo {
-  private boolean m_initialized;
-  int x = -1;
-  int y = -1;
-  int width = 1;
-  int height = 1;
-  boolean horizontalGrab;
-  boolean verticalGrab;
-  int horizontalAlignment;
-  int verticalAlignment;
-  int heightHint;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public TableWrapDataInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Initialize
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void initialize() throws Exception {
-    super.initialize();
-    // events
-    addBroadcastListener(new ObjectEventListener() {
-      @Override
-      public void addContextMenu(List<? extends ObjectInfo> objects,
-          ObjectInfo object,
-          IMenuManager manager) throws Exception {
-        if (getParent() == object) {
-          TableWrapDataInfo.this.addContextMenu(manager);
-        }
-      }
-    });
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void refresh_fetch() throws Exception {
-    super.refresh_fetch();
-    // prepare x/y
-    getCurrentObjectCell(getLayout(), getControl());
-    // prepare values from TableWrapData
-    getCurrentObjectFields();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Initializes fields of this {@link TableWrapDataInfo} using object of given
-   * {@link TableWrapLayoutInfo} and {@link ControlInfo}.
-   */
-  void initialize(TableWrapLayoutInfo layout, ControlInfo controlInfo) throws Exception {
-    if (!m_initialized) {
-      m_initialized = true;
-      // prepare x/y
-      getCurrentObjectCell(layout, controlInfo);
-      // prepare values from TableWrapData
-      getCurrentObjectFields();
-    }
-  }
-
-  /**
-   * Gets cell using objects of given {@link TableWrapLayoutInfo} and {@link ControlInfo}.
-   */
-  private void getCurrentObjectCell(TableWrapLayoutInfo layout, ControlInfo controlInfo)
-      throws Exception {
-    if (layout.getObject() != null && controlInfo.getObject() != null) {
-      Point xyPoint = TableWrapLayoutSupport.getXY(layout.getObject(), controlInfo.getObject());
-      if (xyPoint != null) {
-        x = xyPoint.x;
-        y = xyPoint.y;
-      }
-    }
-  }
-
-  /**
-   * Gets values from {@link TableWrapData} object to this {@link TableWrapDataInfo} fields.
-   */
-  private void getCurrentObjectFields() throws Exception {
-    Object object = getObject();
-    width = ReflectionUtils.getFieldInt(object, "colspan");
-    height = ReflectionUtils.getFieldInt(object, "rowspan");
-    horizontalGrab = ReflectionUtils.getFieldBoolean(object, "grabHorizontal");
-    verticalGrab = ReflectionUtils.getFieldBoolean(object, "grabVertical");
-    horizontalAlignment = ReflectionUtils.getFieldInt(object, "align");
-    verticalAlignment = ReflectionUtils.getFieldInt(object, "valign");
-    heightHint = ReflectionUtils.getFieldInt(object, "heightHint");
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Internal access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private ControlInfo getControl() {
-    return (ControlInfo) getParent();
-  }
-
-  private TableWrapLayoutInfo getLayout() {
-    CompositeInfo composite = (CompositeInfo) getControl().getParent();
-    if (composite == null) {
-      return null;
-    }
-    return (TableWrapLayoutInfo) composite.getLayout();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Location
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public int getX() {
-    return x;
-  }
-
-  @Override
-  public void setX(int x) {
-    this.x = x;
-  }
-
-  @Override
-  public int getY() {
-    return y;
-  }
-
-  @Override
-  public void setY(int y) {
-    this.y = y;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Span
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public int getHorizontalSpan() {
-    return width;
-  }
-
-  @Override
-  public void setHorizontalSpan(int width) throws Exception {
-    if (this.width != width) {
-      this.width = width;
-      getPropertyByTitle("colspan").setValue(width);
-    }
-  }
-
-  @Override
-  public int getVerticalSpan() {
-    return height;
-  }
-
-  @Override
-  public void setVerticalSpan(int height) throws Exception {
-    if (this.height != height) {
-      this.height = height;
-      getPropertyByTitle("rowspan").setValue(height);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Grab
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean getHorizontalGrab() {
-    return horizontalGrab;
-  }
-
-  @Override
-  public void setHorizontalGrab(boolean grab) throws Exception {
-    if (horizontalGrab != grab) {
-      horizontalGrab = grab;
-      materialize();
-      // special case: convert constructor FILL into FILL_GRAB and vice-versa
-      if (horizontalAlignment == TableWrapData.FILL && constructor_hasHorizontalAlignment()) {
-        if (horizontalGrab) {
-          constructor_setEnumProperty("align", TableWrapData.FILL_GRAB);
-        } else {
-          constructor_setEnumProperty("align", TableWrapData.FILL);
-        }
-        // don't continue
-        return;
-      }
-      // just update property
-      getPropertyByTitle("grabHorizontal").setValue(grab);
-    }
-  }
-
-  @Override
-  public boolean getVerticalGrab() {
-    return verticalGrab;
-  }
-
-  @Override
-  public void setVerticalGrab(boolean grab) throws Exception {
-    if (verticalGrab != grab) {
-      verticalGrab = grab;
-      materialize();
-      // special case: convert constructor FILL into FILL_GRAB and vice-versa
-      if (verticalAlignment == TableWrapData.FILL && constructor_hasVerticalAlignment()) {
-        if (verticalGrab) {
-          constructor_setEnumProperty("valign", TableWrapData.FILL_GRAB);
-        } else {
-          constructor_setEnumProperty("valign", TableWrapData.FILL);
-        }
-        // don't continue
-        return;
-      }
-      // just update property
-      getPropertyByTitle("grabVertical").setValue(grab);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Alignment
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public int getHorizontalAlignment() {
-    return horizontalAlignment;
-  }
-
-  @Override
-  public void setHorizontalAlignment(int alignment) throws Exception {
-    if (horizontalAlignment != alignment) {
-      materialize();
-      // special case: convert constructor FILL_GRAB into simple grab
-      if (constructor_hasHorizontalAlignment()
-          && horizontalAlignment == TableWrapData.FILL
-          && horizontalGrab) {
-        setFieldSource("grabHorizontal", "true");
-      }
-      // set new alignment
-      horizontalAlignment = alignment;
-      if (constructor_hasHorizontalAlignment()) {
-        // special case: convert constructor FILL into FILL_GRAB
-        if (horizontalAlignment == TableWrapData.FILL && horizontalGrab) {
-          constructor_setEnumProperty("align", TableWrapData.FILL_GRAB);
-          getPropertyByTitle("grabHorizontal").setValue(false);
-          return;
-        }
-        // just update constructor property
-        constructor_setEnumProperty("align", alignment);
-      } else {
-        // just update property
-        setEnumProperty("align", alignment);
-      }
-    }
-  }
-
-  @Override
-  public int getVerticalAlignment() {
-    return verticalAlignment;
-  }
-
-  @Override
-  public void setVerticalAlignment(int alignment) throws Exception {
-    if (verticalAlignment != alignment) {
-      materialize();
-      // special case: convert constructor FILL_GRAB into simple grab
-      if (constructor_hasVerticalAlignment()
-          && verticalAlignment == TableWrapData.FILL
-          && verticalGrab) {
-        setFieldSource("grabVertical", "true");
-      }
-      // set new alignment
-      verticalAlignment = alignment;
-      if (constructor_hasVerticalAlignment()) {
-        // special case: convert constructor FILL into FILL_GRAB
-        if (verticalAlignment == TableWrapData.FILL && verticalGrab) {
-          constructor_setEnumProperty("valign", TableWrapData.FILL_GRAB);
-          getPropertyByTitle("grabVertical").setValue(false);
-          return;
-        }
-        // just update constructor property
-        constructor_setEnumProperty("valign", alignment);
-      } else {
-        setEnumProperty("valign", alignment);
-      }
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Hint
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return value of <code>heightHint</code> property.
-   */
-  public int getHeightHint() {
-    return heightHint;
-  }
-
-  /**
-   * Sets value of <code>heightHint</code> property.
-   */
-  public void setHeightHint(int heightHint) throws Exception {
-    if (this.heightHint != heightHint) {
-      this.heightHint = heightHint;
-      getPropertyByTitle("heightHint").setValue(heightHint);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * We need way to "force" assignment to grabHorizontal/grabVertical fields, when we know that its
-   * default value will prevent from doing this just by using {@link Property#setValue(Object)}.
-   */
-  private void setFieldSource(String fieldName, String source) throws Exception {
-    removeFieldAssignments(fieldName);
-    addFieldAssignment(fieldName, source);
-  }
-
-  /**
-   * Sets value for {@link Property} with {@link StaticFieldPropertyEditor}.
-   */
-  private void setEnumProperty(String propertyTitle, int value) throws Exception {
-    Property property = getPropertyByTitle(propertyTitle);
-    setEnumProperty(property, value);
-  }
-
-  /**
-   * Sets value for {@link Property} with {@link StaticFieldPropertyEditor}.
-   */
-  private static void setEnumProperty(Property property, int value) throws Exception {
-    StaticFieldPropertyEditor propertyEditor = (StaticFieldPropertyEditor) property.getEditor();
-    propertyEditor.setValue(property, value);
-  }
-
-  /**
-   * @return <code>true</code> if constructor used to create {@link TableWrapData}, has argument
-   *         with horizontal alignment (as 0-th argument).
-   */
-  private boolean constructor_hasHorizontalAlignment() {
-    return constructor_getNumberArguments() >= 1;
-  }
-
-  /**
-   * @return <code>true</code> if constructor used to create {@link TableWrapData}, has argument
-   *         with vertical alignment (as 1-th argument).
-   */
-  private boolean constructor_hasVerticalAlignment() {
-    return constructor_getNumberArguments() >= 2;
-  }
-
-  /**
-   * Sets the "enum" value for {@link Property} of {@link ConstructorCreationSupport}.
-   */
-  private void constructor_setEnumProperty(String propertyTitle, int value) throws Exception {
-    Property constructorProperty = getPropertyByTitle("Constructor");
-    if (constructorProperty != null) {
-      IComplexPropertyEditor complexEditor =
-          (IComplexPropertyEditor) constructorProperty.getEditor();
-      for (Property property : complexEditor.getProperties(constructorProperty)) {
-        if (property.getTitle().equals(propertyTitle)) {
-          setEnumProperty(property, value);
-        }
-      }
-    }
-  }
-
-  /**
-   * @return the number of constructor arguments used to create {@link TableWrapData} in source.
-   */
-  private int constructor_getNumberArguments() {
-    ConstructorCreationSupport creationSupport = (ConstructorCreationSupport) getCreationSupport();
-    return creationSupport.getBinding().getParameterTypes().length;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Images
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Image getSmallAlignmentImage(boolean horizontal) {
-    if (horizontal) {
-      switch (horizontalAlignment) {
-        case TableWrapData.LEFT :
-          return TableWrapLayoutImages.getImage("h/left.gif");
-        case TableWrapData.CENTER :
-          return TableWrapLayoutImages.getImage("h/center.gif");
-        case TableWrapData.RIGHT :
-          return TableWrapLayoutImages.getImage("h/right.gif");
-        default :
-          Assert.isTrue(horizontalAlignment == TableWrapData.FILL);
-          return TableWrapLayoutImages.getImage("h/fill.gif");
-      }
-    } else {
-      switch (verticalAlignment) {
-        case TableWrapData.TOP :
-          return TableWrapLayoutImages.getImage("v/top.gif");
-        case TableWrapData.MIDDLE :
-          return TableWrapLayoutImages.getImage("v/middle.gif");
-        case TableWrapData.BOTTOM :
-          return TableWrapLayoutImages.getImage("v/bottom.gif");
-        default :
-          Assert.isTrue(verticalAlignment == TableWrapData.FILL);
-          return TableWrapLayoutImages.getImage("v/fill.gif");
-      }
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Context menu
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds items to the context {@link IMenuManager}.
-   */
-  public void addContextMenu(IMenuManager manager) {
-    // horizontal
-    {
-      IMenuManager manager2 =
-          new MenuManager(ModelMessages.TableWrapDataInfo_managerHorizontalAlignment);
-      manager.appendToGroup(IContextMenuConstants.GROUP_TOP, manager2);
-      //
-      manager2.add(new SetGrabAction(this, ModelMessages.TableWrapDataInfo_haGrab, "grow.gif", true));
-      manager2.add(new Separator());
-      //
-      fillHorizontalAlignmentMenu(manager2);
-    }
-    // vertical
-    {
-      IMenuManager manager2 =
-          new MenuManager(ModelMessages.TableWrapDataInfo_managerVerticalAlignment);
-      manager.appendToGroup(IContextMenuConstants.GROUP_TOP, manager2);
-      //
-      manager2.add(new SetGrabAction(this,
-          ModelMessages.TableWrapDataInfo_vaGrab,
-          "grow.gif",
-          false));
-      manager2.add(new Separator());
-      //
-      fillVerticalAlignmentMenu(manager2);
-    }
-  }
-
-  @Override
-  public void fillHorizontalAlignmentMenu(IMenuManager manager) {
-    manager.add(new SetAlignmentAction(this,
-        ModelMessages.TableWrapDataInfo_haLeft,
-        "left.gif",
-        true,
-        TableWrapData.LEFT));
-    manager.add(new SetAlignmentAction(this,
-        ModelMessages.TableWrapDataInfo_haCenter,
-        "center.gif",
-        true,
-        TableWrapData.CENTER));
-    manager.add(new SetAlignmentAction(this,
-        ModelMessages.TableWrapDataInfo_haRight,
-        "right.gif",
-        true,
-        TableWrapData.RIGHT));
-    manager.add(new SetAlignmentAction(this,
-        ModelMessages.TableWrapDataInfo_haFill,
-        "fill.gif",
-        true,
-        TableWrapData.FILL));
-  }
-
-  @Override
-  public void fillVerticalAlignmentMenu(IMenuManager manager) {
-    manager.add(new SetAlignmentAction(this,
-        ModelMessages.TableWrapDataInfo_vaTop,
-        "top.gif",
-        false,
-        TableWrapData.TOP));
-    manager.add(new SetAlignmentAction(this,
-        ModelMessages.TableWrapDataInfo_vaMiddle,
-        "middle.gif",
-        false,
-        TableWrapData.MIDDLE));
-    manager.add(new SetAlignmentAction(this,
-        ModelMessages.TableWrapDataInfo_vaBottom,
-        "bottom.gif",
-        false,
-        TableWrapData.BOTTOM));
-    manager.add(new SetAlignmentAction(this,
-        ModelMessages.TableWrapDataInfo_vaGill,
-        "fill.gif",
-        false,
-        TableWrapData.FILL));
-  }
+	private boolean m_initialized;
+	int x = -1;
+	int y = -1;
+	int width = 1;
+	int height = 1;
+	boolean horizontalGrab;
+	boolean verticalGrab;
+	int horizontalAlignment;
+	int verticalAlignment;
+	int heightHint;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public TableWrapDataInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Initialize
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void initialize() throws Exception {
+		super.initialize();
+		// events
+		addBroadcastListener(new ObjectEventListener() {
+			@Override
+			public void addContextMenu(List<? extends ObjectInfo> objects,
+					ObjectInfo object,
+					IMenuManager manager) throws Exception {
+				if (getParent() == object) {
+					TableWrapDataInfo.this.addContextMenu(manager);
+				}
+			}
+		});
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void refresh_fetch() throws Exception {
+		super.refresh_fetch();
+		// prepare x/y
+		getCurrentObjectCell(getLayout(), getControl());
+		// prepare values from TableWrapData
+		getCurrentObjectFields();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Initializes fields of this {@link TableWrapDataInfo} using object of given
+	 * {@link TableWrapLayoutInfo} and {@link ControlInfo}.
+	 */
+	void initialize(TableWrapLayoutInfo layout, ControlInfo controlInfo) throws Exception {
+		if (!m_initialized) {
+			m_initialized = true;
+			// prepare x/y
+			getCurrentObjectCell(layout, controlInfo);
+			// prepare values from TableWrapData
+			getCurrentObjectFields();
+		}
+	}
+
+	/**
+	 * Gets cell using objects of given {@link TableWrapLayoutInfo} and {@link ControlInfo}.
+	 */
+	private void getCurrentObjectCell(TableWrapLayoutInfo layout, ControlInfo controlInfo)
+			throws Exception {
+		if (layout.getObject() != null && controlInfo.getObject() != null) {
+			Point xyPoint = TableWrapLayoutSupport.getXY(layout.getObject(), controlInfo.getObject());
+			if (xyPoint != null) {
+				x = xyPoint.x;
+				y = xyPoint.y;
+			}
+		}
+	}
+
+	/**
+	 * Gets values from {@link TableWrapData} object to this {@link TableWrapDataInfo} fields.
+	 */
+	private void getCurrentObjectFields() throws Exception {
+		Object object = getObject();
+		width = ReflectionUtils.getFieldInt(object, "colspan");
+		height = ReflectionUtils.getFieldInt(object, "rowspan");
+		horizontalGrab = ReflectionUtils.getFieldBoolean(object, "grabHorizontal");
+		verticalGrab = ReflectionUtils.getFieldBoolean(object, "grabVertical");
+		horizontalAlignment = ReflectionUtils.getFieldInt(object, "align");
+		verticalAlignment = ReflectionUtils.getFieldInt(object, "valign");
+		heightHint = ReflectionUtils.getFieldInt(object, "heightHint");
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Internal access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private ControlInfo getControl() {
+		return (ControlInfo) getParent();
+	}
+
+	private TableWrapLayoutInfo getLayout() {
+		CompositeInfo composite = (CompositeInfo) getControl().getParent();
+		if (composite == null) {
+			return null;
+		}
+		return (TableWrapLayoutInfo) composite.getLayout();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Location
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public int getX() {
+		return x;
+	}
+
+	@Override
+	public void setX(int x) {
+		this.x = x;
+	}
+
+	@Override
+	public int getY() {
+		return y;
+	}
+
+	@Override
+	public void setY(int y) {
+		this.y = y;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Span
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public int getHorizontalSpan() {
+		return width;
+	}
+
+	@Override
+	public void setHorizontalSpan(int width) throws Exception {
+		if (this.width != width) {
+			this.width = width;
+			getPropertyByTitle("colspan").setValue(width);
+		}
+	}
+
+	@Override
+	public int getVerticalSpan() {
+		return height;
+	}
+
+	@Override
+	public void setVerticalSpan(int height) throws Exception {
+		if (this.height != height) {
+			this.height = height;
+			getPropertyByTitle("rowspan").setValue(height);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Grab
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean getHorizontalGrab() {
+		return horizontalGrab;
+	}
+
+	@Override
+	public void setHorizontalGrab(boolean grab) throws Exception {
+		if (horizontalGrab != grab) {
+			horizontalGrab = grab;
+			materialize();
+			// special case: convert constructor FILL into FILL_GRAB and vice-versa
+			if (horizontalAlignment == TableWrapData.FILL && constructor_hasHorizontalAlignment()) {
+				if (horizontalGrab) {
+					constructor_setEnumProperty("align", TableWrapData.FILL_GRAB);
+				} else {
+					constructor_setEnumProperty("align", TableWrapData.FILL);
+				}
+				// don't continue
+				return;
+			}
+			// just update property
+			getPropertyByTitle("grabHorizontal").setValue(grab);
+		}
+	}
+
+	@Override
+	public boolean getVerticalGrab() {
+		return verticalGrab;
+	}
+
+	@Override
+	public void setVerticalGrab(boolean grab) throws Exception {
+		if (verticalGrab != grab) {
+			verticalGrab = grab;
+			materialize();
+			// special case: convert constructor FILL into FILL_GRAB and vice-versa
+			if (verticalAlignment == TableWrapData.FILL && constructor_hasVerticalAlignment()) {
+				if (verticalGrab) {
+					constructor_setEnumProperty("valign", TableWrapData.FILL_GRAB);
+				} else {
+					constructor_setEnumProperty("valign", TableWrapData.FILL);
+				}
+				// don't continue
+				return;
+			}
+			// just update property
+			getPropertyByTitle("grabVertical").setValue(grab);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Alignment
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public int getHorizontalAlignment() {
+		return horizontalAlignment;
+	}
+
+	@Override
+	public void setHorizontalAlignment(int alignment) throws Exception {
+		if (horizontalAlignment != alignment) {
+			materialize();
+			// special case: convert constructor FILL_GRAB into simple grab
+			if (constructor_hasHorizontalAlignment()
+					&& horizontalAlignment == TableWrapData.FILL
+					&& horizontalGrab) {
+				setFieldSource("grabHorizontal", "true");
+			}
+			// set new alignment
+			horizontalAlignment = alignment;
+			if (constructor_hasHorizontalAlignment()) {
+				// special case: convert constructor FILL into FILL_GRAB
+				if (horizontalAlignment == TableWrapData.FILL && horizontalGrab) {
+					constructor_setEnumProperty("align", TableWrapData.FILL_GRAB);
+					getPropertyByTitle("grabHorizontal").setValue(false);
+					return;
+				}
+				// just update constructor property
+				constructor_setEnumProperty("align", alignment);
+			} else {
+				// just update property
+				setEnumProperty("align", alignment);
+			}
+		}
+	}
+
+	@Override
+	public int getVerticalAlignment() {
+		return verticalAlignment;
+	}
+
+	@Override
+	public void setVerticalAlignment(int alignment) throws Exception {
+		if (verticalAlignment != alignment) {
+			materialize();
+			// special case: convert constructor FILL_GRAB into simple grab
+			if (constructor_hasVerticalAlignment()
+					&& verticalAlignment == TableWrapData.FILL
+					&& verticalGrab) {
+				setFieldSource("grabVertical", "true");
+			}
+			// set new alignment
+			verticalAlignment = alignment;
+			if (constructor_hasVerticalAlignment()) {
+				// special case: convert constructor FILL into FILL_GRAB
+				if (verticalAlignment == TableWrapData.FILL && verticalGrab) {
+					constructor_setEnumProperty("valign", TableWrapData.FILL_GRAB);
+					getPropertyByTitle("grabVertical").setValue(false);
+					return;
+				}
+				// just update constructor property
+				constructor_setEnumProperty("valign", alignment);
+			} else {
+				setEnumProperty("valign", alignment);
+			}
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Hint
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return value of <code>heightHint</code> property.
+	 */
+	public int getHeightHint() {
+		return heightHint;
+	}
+
+	/**
+	 * Sets value of <code>heightHint</code> property.
+	 */
+	public void setHeightHint(int heightHint) throws Exception {
+		if (this.heightHint != heightHint) {
+			this.heightHint = heightHint;
+			getPropertyByTitle("heightHint").setValue(heightHint);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * We need way to "force" assignment to grabHorizontal/grabVertical fields, when we know that its
+	 * default value will prevent from doing this just by using {@link Property#setValue(Object)}.
+	 */
+	private void setFieldSource(String fieldName, String source) throws Exception {
+		removeFieldAssignments(fieldName);
+		addFieldAssignment(fieldName, source);
+	}
+
+	/**
+	 * Sets value for {@link Property} with {@link StaticFieldPropertyEditor}.
+	 */
+	private void setEnumProperty(String propertyTitle, int value) throws Exception {
+		Property property = getPropertyByTitle(propertyTitle);
+		setEnumProperty(property, value);
+	}
+
+	/**
+	 * Sets value for {@link Property} with {@link StaticFieldPropertyEditor}.
+	 */
+	private static void setEnumProperty(Property property, int value) throws Exception {
+		StaticFieldPropertyEditor propertyEditor = (StaticFieldPropertyEditor) property.getEditor();
+		propertyEditor.setValue(property, value);
+	}
+
+	/**
+	 * @return <code>true</code> if constructor used to create {@link TableWrapData}, has argument
+	 *         with horizontal alignment (as 0-th argument).
+	 */
+	private boolean constructor_hasHorizontalAlignment() {
+		return constructor_getNumberArguments() >= 1;
+	}
+
+	/**
+	 * @return <code>true</code> if constructor used to create {@link TableWrapData}, has argument
+	 *         with vertical alignment (as 1-th argument).
+	 */
+	private boolean constructor_hasVerticalAlignment() {
+		return constructor_getNumberArguments() >= 2;
+	}
+
+	/**
+	 * Sets the "enum" value for {@link Property} of {@link ConstructorCreationSupport}.
+	 */
+	private void constructor_setEnumProperty(String propertyTitle, int value) throws Exception {
+		Property constructorProperty = getPropertyByTitle("Constructor");
+		if (constructorProperty != null) {
+			IComplexPropertyEditor complexEditor =
+					(IComplexPropertyEditor) constructorProperty.getEditor();
+			for (Property property : complexEditor.getProperties(constructorProperty)) {
+				if (property.getTitle().equals(propertyTitle)) {
+					setEnumProperty(property, value);
+				}
+			}
+		}
+	}
+
+	/**
+	 * @return the number of constructor arguments used to create {@link TableWrapData} in source.
+	 */
+	private int constructor_getNumberArguments() {
+		ConstructorCreationSupport creationSupport = (ConstructorCreationSupport) getCreationSupport();
+		return creationSupport.getBinding().getParameterTypes().length;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Images
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Image getSmallAlignmentImage(boolean horizontal) {
+		if (horizontal) {
+			switch (horizontalAlignment) {
+			case TableWrapData.LEFT :
+				return TableWrapLayoutImages.getImage("h/left.gif");
+			case TableWrapData.CENTER :
+				return TableWrapLayoutImages.getImage("h/center.gif");
+			case TableWrapData.RIGHT :
+				return TableWrapLayoutImages.getImage("h/right.gif");
+			default :
+				Assert.isTrue(horizontalAlignment == TableWrapData.FILL);
+				return TableWrapLayoutImages.getImage("h/fill.gif");
+			}
+		} else {
+			switch (verticalAlignment) {
+			case TableWrapData.TOP :
+				return TableWrapLayoutImages.getImage("v/top.gif");
+			case TableWrapData.MIDDLE :
+				return TableWrapLayoutImages.getImage("v/middle.gif");
+			case TableWrapData.BOTTOM :
+				return TableWrapLayoutImages.getImage("v/bottom.gif");
+			default :
+				Assert.isTrue(verticalAlignment == TableWrapData.FILL);
+				return TableWrapLayoutImages.getImage("v/fill.gif");
+			}
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Context menu
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds items to the context {@link IMenuManager}.
+	 */
+	public void addContextMenu(IMenuManager manager) {
+		// horizontal
+		{
+			IMenuManager manager2 =
+					new MenuManager(ModelMessages.TableWrapDataInfo_managerHorizontalAlignment);
+			manager.appendToGroup(IContextMenuConstants.GROUP_TOP, manager2);
+			//
+			manager2.add(new SetGrabAction(this, ModelMessages.TableWrapDataInfo_haGrab, "grow.gif", true));
+			manager2.add(new Separator());
+			//
+			fillHorizontalAlignmentMenu(manager2);
+		}
+		// vertical
+		{
+			IMenuManager manager2 =
+					new MenuManager(ModelMessages.TableWrapDataInfo_managerVerticalAlignment);
+			manager.appendToGroup(IContextMenuConstants.GROUP_TOP, manager2);
+			//
+			manager2.add(new SetGrabAction(this,
+					ModelMessages.TableWrapDataInfo_vaGrab,
+					"grow.gif",
+					false));
+			manager2.add(new Separator());
+			//
+			fillVerticalAlignmentMenu(manager2);
+		}
+	}
+
+	@Override
+	public void fillHorizontalAlignmentMenu(IMenuManager manager) {
+		manager.add(new SetAlignmentAction(this,
+				ModelMessages.TableWrapDataInfo_haLeft,
+				"left.gif",
+				true,
+				TableWrapData.LEFT));
+		manager.add(new SetAlignmentAction(this,
+				ModelMessages.TableWrapDataInfo_haCenter,
+				"center.gif",
+				true,
+				TableWrapData.CENTER));
+		manager.add(new SetAlignmentAction(this,
+				ModelMessages.TableWrapDataInfo_haRight,
+				"right.gif",
+				true,
+				TableWrapData.RIGHT));
+		manager.add(new SetAlignmentAction(this,
+				ModelMessages.TableWrapDataInfo_haFill,
+				"fill.gif",
+				true,
+				TableWrapData.FILL));
+	}
+
+	@Override
+	public void fillVerticalAlignmentMenu(IMenuManager manager) {
+		manager.add(new SetAlignmentAction(this,
+				ModelMessages.TableWrapDataInfo_vaTop,
+				"top.gif",
+				false,
+				TableWrapData.TOP));
+		manager.add(new SetAlignmentAction(this,
+				ModelMessages.TableWrapDataInfo_vaMiddle,
+				"middle.gif",
+				false,
+				TableWrapData.MIDDLE));
+		manager.add(new SetAlignmentAction(this,
+				ModelMessages.TableWrapDataInfo_vaBottom,
+				"bottom.gif",
+				false,
+				TableWrapData.BOTTOM));
+		manager.add(new SetAlignmentAction(this,
+				ModelMessages.TableWrapDataInfo_vaGill,
+				"fill.gif",
+				false,
+				TableWrapData.FILL));
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/table/TableWrapDimensionInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/table/TableWrapDimensionInfo.java
index f98f3815b..bc415bd84 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/table/TableWrapDimensionInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/table/TableWrapDimensionInfo.java
@@ -27,221 +27,221 @@
  * @coverage rcp.model.forms
  */
 public abstract class TableWrapDimensionInfo<C extends IControlInfo> {
-  protected final ITableWrapLayoutInfo<C> m_layout;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public TableWrapDimensionInfo(ITableWrapLayoutInfo<C> layout) {
-    m_layout = layout;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the index of this {@link TableWrapDimensionInfo}.
-   */
-  public abstract int getIndex();
-
-  /**
-   * @return the string to display.
-   */
-  public final String getTitle() throws Exception {
-    String tooltip = "";
-    Integer alignmentValue = getAlignment();
-    if (alignmentValue != null) {
-      tooltip = getAlignmentTitle(alignmentValue.intValue());
-    }
-    if (getGrab()) {
-      if (tooltip.length() != 0) {
-        tooltip += ", ";
-      }
-      tooltip += "grab";
-    }
-    return tooltip;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Grab
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the <code>grab</code> state for given {@link ITableWrapDataInfo}.
-   */
-  protected abstract boolean getGrab(ITableWrapDataInfo layoutData);
-
-  /**
-   * Sets the <code>grab</code> state for given {@link ITableWrapDataInfo}.
-   */
-  protected abstract void setGrab(ITableWrapDataInfo layoutData, boolean grab) throws Exception;
-
-  /**
-   * @return <code>true</code>, if at least one control has grab.
-   */
-  public final boolean getGrab() {
-    final boolean result[] = new boolean[]{false};
-    processControls(new ILayoutDataProcessor<C>() {
-      @Override
-      public void process(C control, ITableWrapDataInfo layoutData) throws Exception {
-        result[0] |= getGrab(layoutData);
-      }
-    });
-    return result[0];
-  }
-
-  /**
-   * Sets the <code>grab</code> state for all controls that start in this dimension.
-   */
-  public final void setGrab(final boolean grab) {
-    processControls(new ILayoutDataProcessor<C>() {
-      @Override
-      public void process(C control, ITableWrapDataInfo layoutData) throws Exception {
-        setGrab(layoutData, grab);
-      }
-    });
-  }
-
-  /**
-   * Flips the <code>grab</code> state.
-   */
-  public final void flipGrab() {
-    setGrab(!getGrab());
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Alignment
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the title of given alignment from {@link TableWrapData}.
-   */
-  protected abstract String getAlignmentTitle(int alignment);
-
-  /**
-   * @return the <code>alignment</code> for given {@link ITableWrapDataInfo}.
-   */
-  protected abstract int getAlignment(ITableWrapDataInfo layoutData);
-
-  /**
-   * Sets the <code>alignment</code> for given {@link ITableWrapDataInfo}.
-   */
-  protected abstract void setAlignment(ITableWrapDataInfo layoutData, int alignment)
-      throws Exception;
-
-  /**
-   * @return common alignment, if it is same for all controls, or <code>null</code>.
-   */
-  public final Integer getAlignment() {
-    final boolean first[] = new boolean[]{true};
-    final Integer result[] = new Integer[]{null};
-    processControls(new ILayoutDataProcessor<C>() {
-      @Override
-      public void process(C control, ITableWrapDataInfo layoutData) throws Exception {
-        int alignment = getAlignment(layoutData);
-        if (first[0]) {
-          result[0] = alignment;
-        } else if (result[0] != null) {
-          if (result[0].intValue() != alignment) {
-            result[0] = null;
-          }
-        }
-        first[0] = false;
-      }
-    });
-    return result[0];
-  }
-
-  /**
-   * Sets alignment for all controls that start in this dimension.
-   */
-  public final void setAlignment(final int alignment) {
-    processControls(new ILayoutDataProcessor<C>() {
-      @Override
-      public void process(C control, ITableWrapDataInfo layoutData) throws Exception {
-        setAlignment(layoutData, alignment);
-      }
-    });
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Delete
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Deletes all controls that start in this dimension.
-   */
-  public final void delete() {
-    processControls(new ILayoutDataProcessor<C>() {
-      @Override
-      public void process(C control, ITableWrapDataInfo layoutData) throws Exception {
-        control.delete();
-      }
-    });
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Processor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Processor for processing {@link ITableWrapDataInfo} for each {@link IControlInfo}.
-   *
-   * @author scheglov_ke
-   */
-  protected interface ILayoutDataProcessor<C extends IControlInfo> {
-    void process(C control, ITableWrapDataInfo layoutData) throws Exception;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Processing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Processes {@link ITableWrapDataInfo} for each {@link C} using given
-   * {@link ILayoutDataProcessor}.
-   */
-  private void processControls(final ILayoutDataProcessor<C> processor) {
-    ExecutionUtils.runRethrow(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        List<C> toProcess = getControlsToProcess();
-        for (C control : toProcess) {
-          ITableWrapDataInfo layoutData = m_layout.getTableWrapData2(control);
-          if (shouldProcessThisControl(layoutData)) {
-            processor.process(control, layoutData);
-          }
-        }
-      }
-
-      private List<C> getControlsToProcess() {
-        List<C> toProcess = Lists.newArrayList();
-        for (C control : m_layout.getControls()) {
-          if (!m_layout.isFiller(control)) {
-            ITableWrapDataInfo gridData = m_layout.getTableWrapData2(control);
-            if (shouldProcessThisControl(gridData)) {
-              toProcess.add(control);
-            }
-          }
-        }
-        return toProcess;
-      }
-    });
-  }
-
-  /**
-   * @return <code>true</code> if {@link IControlInfo} with given {@link ITableWrapDataInfo} should
-   *         be processed using
-   *         {@link #processControls(TableWrapDimensionInfo.ILayoutDataProcessor)}.
-   */
-  protected abstract boolean shouldProcessThisControl(ITableWrapDataInfo layoutData);
+	protected final ITableWrapLayoutInfo<C> m_layout;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public TableWrapDimensionInfo(ITableWrapLayoutInfo<C> layout) {
+		m_layout = layout;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the index of this {@link TableWrapDimensionInfo}.
+	 */
+	public abstract int getIndex();
+
+	/**
+	 * @return the string to display.
+	 */
+	public final String getTitle() throws Exception {
+		String tooltip = "";
+		Integer alignmentValue = getAlignment();
+		if (alignmentValue != null) {
+			tooltip = getAlignmentTitle(alignmentValue.intValue());
+		}
+		if (getGrab()) {
+			if (tooltip.length() != 0) {
+				tooltip += ", ";
+			}
+			tooltip += "grab";
+		}
+		return tooltip;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Grab
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the <code>grab</code> state for given {@link ITableWrapDataInfo}.
+	 */
+	protected abstract boolean getGrab(ITableWrapDataInfo layoutData);
+
+	/**
+	 * Sets the <code>grab</code> state for given {@link ITableWrapDataInfo}.
+	 */
+	protected abstract void setGrab(ITableWrapDataInfo layoutData, boolean grab) throws Exception;
+
+	/**
+	 * @return <code>true</code>, if at least one control has grab.
+	 */
+	public final boolean getGrab() {
+		final boolean result[] = new boolean[]{false};
+		processControls(new ILayoutDataProcessor<C>() {
+			@Override
+			public void process(C control, ITableWrapDataInfo layoutData) throws Exception {
+				result[0] |= getGrab(layoutData);
+			}
+		});
+		return result[0];
+	}
+
+	/**
+	 * Sets the <code>grab</code> state for all controls that start in this dimension.
+	 */
+	public final void setGrab(final boolean grab) {
+		processControls(new ILayoutDataProcessor<C>() {
+			@Override
+			public void process(C control, ITableWrapDataInfo layoutData) throws Exception {
+				setGrab(layoutData, grab);
+			}
+		});
+	}
+
+	/**
+	 * Flips the <code>grab</code> state.
+	 */
+	public final void flipGrab() {
+		setGrab(!getGrab());
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Alignment
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the title of given alignment from {@link TableWrapData}.
+	 */
+	protected abstract String getAlignmentTitle(int alignment);
+
+	/**
+	 * @return the <code>alignment</code> for given {@link ITableWrapDataInfo}.
+	 */
+	protected abstract int getAlignment(ITableWrapDataInfo layoutData);
+
+	/**
+	 * Sets the <code>alignment</code> for given {@link ITableWrapDataInfo}.
+	 */
+	protected abstract void setAlignment(ITableWrapDataInfo layoutData, int alignment)
+			throws Exception;
+
+	/**
+	 * @return common alignment, if it is same for all controls, or <code>null</code>.
+	 */
+	public final Integer getAlignment() {
+		final boolean first[] = new boolean[]{true};
+		final Integer result[] = new Integer[]{null};
+		processControls(new ILayoutDataProcessor<C>() {
+			@Override
+			public void process(C control, ITableWrapDataInfo layoutData) throws Exception {
+				int alignment = getAlignment(layoutData);
+				if (first[0]) {
+					result[0] = alignment;
+				} else if (result[0] != null) {
+					if (result[0].intValue() != alignment) {
+						result[0] = null;
+					}
+				}
+				first[0] = false;
+			}
+		});
+		return result[0];
+	}
+
+	/**
+	 * Sets alignment for all controls that start in this dimension.
+	 */
+	public final void setAlignment(final int alignment) {
+		processControls(new ILayoutDataProcessor<C>() {
+			@Override
+			public void process(C control, ITableWrapDataInfo layoutData) throws Exception {
+				setAlignment(layoutData, alignment);
+			}
+		});
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Delete
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Deletes all controls that start in this dimension.
+	 */
+	public final void delete() {
+		processControls(new ILayoutDataProcessor<C>() {
+			@Override
+			public void process(C control, ITableWrapDataInfo layoutData) throws Exception {
+				control.delete();
+			}
+		});
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Processor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Processor for processing {@link ITableWrapDataInfo} for each {@link IControlInfo}.
+	 *
+	 * @author scheglov_ke
+	 */
+	protected interface ILayoutDataProcessor<C extends IControlInfo> {
+		void process(C control, ITableWrapDataInfo layoutData) throws Exception;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Processing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Processes {@link ITableWrapDataInfo} for each {@link C} using given
+	 * {@link ILayoutDataProcessor}.
+	 */
+	private void processControls(final ILayoutDataProcessor<C> processor) {
+		ExecutionUtils.runRethrow(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				List<C> toProcess = getControlsToProcess();
+				for (C control : toProcess) {
+					ITableWrapDataInfo layoutData = m_layout.getTableWrapData2(control);
+					if (shouldProcessThisControl(layoutData)) {
+						processor.process(control, layoutData);
+					}
+				}
+			}
+
+			private List<C> getControlsToProcess() {
+				List<C> toProcess = Lists.newArrayList();
+				for (C control : m_layout.getControls()) {
+					if (!m_layout.isFiller(control)) {
+						ITableWrapDataInfo gridData = m_layout.getTableWrapData2(control);
+						if (shouldProcessThisControl(gridData)) {
+							toProcess.add(control);
+						}
+					}
+				}
+				return toProcess;
+			}
+		});
+	}
+
+	/**
+	 * @return <code>true</code> if {@link IControlInfo} with given {@link ITableWrapDataInfo} should
+	 *         be processed using
+	 *         {@link #processControls(TableWrapDimensionInfo.ILayoutDataProcessor)}.
+	 */
+	protected abstract boolean shouldProcessThisControl(ITableWrapDataInfo layoutData);
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/table/TableWrapLayout2.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/table/TableWrapLayout2.java
index 91fb6bc4d..94fd972f7 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/table/TableWrapLayout2.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/table/TableWrapLayout2.java
@@ -51,858 +51,858 @@
  */
 @SuppressWarnings({"unchecked", "rawtypes"})
 public final class TableWrapLayout2 extends Layout implements ILayoutExtension {
-  /**
-   * Number of columns to use when positioning children (default is 1).
-   */
-  public int numColumns = 1;
-  /**
-   * Left margin variable (default is 5).
-   */
-  public int leftMargin = 5;
-  /**
-   * Right margin variable (default is 5).
-   */
-  public int rightMargin = 5;
-  /**
-   * Top margin variable (default is 5).
-   */
-  public int topMargin = 5;
-  /**
-   * Bottom margin variable (default is 5).
-   */
-  public int bottomMargin = 5;
-  /**
-   * Horizontal spacing (default is 5).
-   */
-  public int horizontalSpacing = 5;
-  /**
-   * Vertical spacing (default is 5).
-   */
-  public int verticalSpacing = 5;
-  /**
-   * If set to <code>true</code>, all the columns will have the same width. Otherwise, column widths
-   * will be computed based on controls in them and their layout data (default is <code>false</code>
-   * ).
-   */
-  public boolean makeColumnsEqualWidth = false;
-  private boolean initialLayout = true;
-  private Vector grid = null;
-  private Hashtable rowspans;
-  private int[] minColumnWidths, maxColumnWidths;
-  private int widestColumnWidth;
-  private int[] growingColumns;
-  private int[] growingRows;
-  private final LayoutCache cache = new LayoutCache();
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Designer information
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  int[] m_columnOrigins;
-  int[] m_columnWidths;
-  int[] m_rowOrigins;
-  int[] m_rowHeights;
-  Map<Control, Point> m_controlToXY = Maps.newHashMap();
+	/**
+	 * Number of columns to use when positioning children (default is 1).
+	 */
+	public int numColumns = 1;
+	/**
+	 * Left margin variable (default is 5).
+	 */
+	public int leftMargin = 5;
+	/**
+	 * Right margin variable (default is 5).
+	 */
+	public int rightMargin = 5;
+	/**
+	 * Top margin variable (default is 5).
+	 */
+	public int topMargin = 5;
+	/**
+	 * Bottom margin variable (default is 5).
+	 */
+	public int bottomMargin = 5;
+	/**
+	 * Horizontal spacing (default is 5).
+	 */
+	public int horizontalSpacing = 5;
+	/**
+	 * Vertical spacing (default is 5).
+	 */
+	public int verticalSpacing = 5;
+	/**
+	 * If set to <code>true</code>, all the columns will have the same width. Otherwise, column widths
+	 * will be computed based on controls in them and their layout data (default is <code>false</code>
+	 * ).
+	 */
+	public boolean makeColumnsEqualWidth = false;
+	private boolean initialLayout = true;
+	private Vector grid = null;
+	private Hashtable rowspans;
+	private int[] minColumnWidths, maxColumnWidths;
+	private int widestColumnWidth;
+	private int[] growingColumns;
+	private int[] growingRows;
+	private final LayoutCache cache = new LayoutCache();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Designer information
+	//
+	////////////////////////////////////////////////////////////////////////////
+	int[] m_columnOrigins;
+	int[] m_columnWidths;
+	int[] m_rowOrigins;
+	int[] m_rowHeights;
+	Map<Control, Point> m_controlToXY = Maps.newHashMap();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Implementation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private class RowSpan {
-    Control child;
-    int row;
-    @SuppressWarnings("unused")
-    int column;
-    int height;
-    int totalHeight;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Implementation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private class RowSpan {
+		Control child;
+		int row;
+		@SuppressWarnings("unused")
+		int column;
+		int height;
+		int totalHeight;
 
-    public RowSpan(Control child, int column, int row) {
-      this.child = child;
-      this.column = column;
-      this.row = row;
-    }
+		public RowSpan(Control child, int column, int row) {
+			this.child = child;
+			this.column = column;
+			this.row = row;
+		}
 
-    /*
-     * Updates this row span's height with the given one if it is within
-     * this span.
-     */
-    public void update(int currentRow, int rowHeight) {
-      TableWrapData2 td = (TableWrapData2) child.getLayoutData();
-      // is currentRow within this span?
-      if (currentRow >= row && currentRow < row + td.rowspan) {
-        totalHeight += rowHeight;
-        if (currentRow > row) {
-          totalHeight += verticalSpacing;
-        }
-      }
-    }
+		/*
+		 * Updates this row span's height with the given one if it is within
+		 * this span.
+		 */
+		public void update(int currentRow, int rowHeight) {
+			TableWrapData2 td = (TableWrapData2) child.getLayoutData();
+			// is currentRow within this span?
+			if (currentRow >= row && currentRow < row + td.rowspan) {
+				totalHeight += rowHeight;
+				if (currentRow > row) {
+					totalHeight += verticalSpacing;
+				}
+			}
+		}
 
-    public int getRequiredHeightIncrease() {
-      if (totalHeight < height) {
-        return height - totalHeight;
-      }
-      return 0;
-    }
-  }
+		public int getRequiredHeightIncrease() {
+			if (totalHeight < height) {
+				return height - totalHeight;
+			}
+			return 0;
+		}
+	}
 
-  /**
-   * Implements ILayoutExtension. Should not be called directly.
-   *
-   * @see ILayoutExtension
-   */
-  @Override
-  public int computeMinimumWidth(Composite parent, boolean changed) {
-    Control[] children = parent.getChildren();
-    if (changed) {
-      cache.flush();
-    }
-    cache.setControls(children);
-    changed = true;
-    initializeIfNeeded(parent, changed);
-    if (initialLayout) {
-      changed = true;
-      initialLayout = false;
-    }
-    if (grid == null || changed) {
-      changed = true;
-      grid = new Vector();
-      createGrid(parent);
-    }
-    if (minColumnWidths == null) {
-      minColumnWidths = new int[numColumns];
-    }
-    for (int i = 0; i < numColumns; i++) {
-      minColumnWidths[i] = 0;
-    }
-    return internalGetMinimumWidth(parent, changed);
-  }
+	/**
+	 * Implements ILayoutExtension. Should not be called directly.
+	 *
+	 * @see ILayoutExtension
+	 */
+	@Override
+	public int computeMinimumWidth(Composite parent, boolean changed) {
+		Control[] children = parent.getChildren();
+		if (changed) {
+			cache.flush();
+		}
+		cache.setControls(children);
+		changed = true;
+		initializeIfNeeded(parent, changed);
+		if (initialLayout) {
+			changed = true;
+			initialLayout = false;
+		}
+		if (grid == null || changed) {
+			changed = true;
+			grid = new Vector();
+			createGrid(parent);
+		}
+		if (minColumnWidths == null) {
+			minColumnWidths = new int[numColumns];
+		}
+		for (int i = 0; i < numColumns; i++) {
+			minColumnWidths[i] = 0;
+		}
+		return internalGetMinimumWidth(parent, changed);
+	}
 
-  /**
-   * Implements ILayoutExtension. Should not be called directly.
-   *
-   * @see ILayoutExtension
-   */
-  @Override
-  public int computeMaximumWidth(Composite parent, boolean changed) {
-    Control[] children = parent.getChildren();
-    if (changed) {
-      cache.flush();
-    }
-    cache.setControls(children);
-    changed = true;
-    initializeIfNeeded(parent, changed);
-    if (initialLayout) {
-      changed = true;
-      initialLayout = false;
-    }
-    if (grid == null || changed) {
-      changed = true;
-      grid = new Vector();
-      createGrid(parent);
-    }
-    if (maxColumnWidths == null) {
-      maxColumnWidths = new int[numColumns];
-    }
-    for (int i = 0; i < numColumns; i++) {
-      maxColumnWidths[i] = 0;
-    }
-    return internalGetMaximumWidth(parent, changed);
-  }
+	/**
+	 * Implements ILayoutExtension. Should not be called directly.
+	 *
+	 * @see ILayoutExtension
+	 */
+	@Override
+	public int computeMaximumWidth(Composite parent, boolean changed) {
+		Control[] children = parent.getChildren();
+		if (changed) {
+			cache.flush();
+		}
+		cache.setControls(children);
+		changed = true;
+		initializeIfNeeded(parent, changed);
+		if (initialLayout) {
+			changed = true;
+			initialLayout = false;
+		}
+		if (grid == null || changed) {
+			changed = true;
+			grid = new Vector();
+			createGrid(parent);
+		}
+		if (maxColumnWidths == null) {
+			maxColumnWidths = new int[numColumns];
+		}
+		for (int i = 0; i < numColumns; i++) {
+			maxColumnWidths[i] = 0;
+		}
+		return internalGetMaximumWidth(parent, changed);
+	}
 
-  /**
-   * @see Layout#layout(Composite, boolean)
-   */
-  @Override
-  protected void layout(Composite parent, boolean changed) {
-    Rectangle clientArea = parent.getClientArea();
-    Control[] children = parent.getChildren();
-    if (changed) {
-      cache.flush();
-    }
-    if (children.length == 0) {
-      m_columnOrigins = new int[0];
-      m_columnWidths = new int[0];
-      m_rowOrigins = new int[0];
-      m_rowHeights = new int[0];
-      return;
-    }
-    cache.setControls(children);
-    int parentWidth = clientArea.width;
-    changed = true;
-    initializeIfNeeded(parent, changed);
-    if (initialLayout) {
-      changed = true;
-      initialLayout = false;
-    }
-    if (grid == null || changed) {
-      changed = true;
-      grid = new Vector();
-      createGrid(parent);
-    }
-    resetColumnWidths();
-    int minWidth = internalGetMinimumWidth(parent, changed);
-    int maxWidth = internalGetMaximumWidth(parent, changed);
-    int tableWidth = parentWidth;
-    int[] columnWidths;
-    if (parentWidth <= minWidth) {
-      tableWidth = minWidth;
-      if (makeColumnsEqualWidth) {
-        columnWidths = new int[numColumns];
-        for (int i = 0; i < numColumns; i++) {
-          columnWidths[i] = widestColumnWidth;
-        }
-      } else {
-        columnWidths = minColumnWidths;
-      }
-    } else if (parentWidth > maxWidth) {
-      if (growingColumns.length == 0) {
-        tableWidth = maxWidth;
-        columnWidths = maxColumnWidths;
-      } else {
-        columnWidths = new int[numColumns];
-        int colSpace = tableWidth - leftMargin - rightMargin;
-        colSpace -= (numColumns - 1) * horizontalSpacing;
-        int extra = parentWidth - maxWidth;
-        int colExtra = extra / growingColumns.length;
-        for (int i = 0; i < numColumns; i++) {
-          columnWidths[i] = maxColumnWidths[i];
-          if (isGrowingColumn(i)) {
-            columnWidths[i] += colExtra;
-          }
-        }
-      }
-    } else {
-      columnWidths = new int[numColumns];
-      if (makeColumnsEqualWidth) {
-        int colSpace = tableWidth - leftMargin - rightMargin;
-        colSpace -= (numColumns - 1) * horizontalSpacing;
-        int col = colSpace / numColumns;
-        for (int i = 0; i < numColumns; i++) {
-          columnWidths[i] = col;
-        }
-      } else {
-        columnWidths = assignExtraSpace(tableWidth, maxWidth, minWidth);
-      }
-    }
-    m_columnWidths = columnWidths;
-    //
-    int[] rowHeights = computeRowHeights(children, columnWidths, changed);
-    m_rowHeights = rowHeights;
-    m_columnOrigins = new int[numColumns];
-    m_rowOrigins = new int[grid.size()];
-    int y = topMargin + clientArea.y;
-    for (int i = 0; i < grid.size(); i++) {
-      int rowHeight = rowHeights[i];
-      int x = leftMargin + clientArea.x;
-      TableWrapData2[] row = (TableWrapData2[]) grid.elementAt(i);
-      for (int j = 0; j < numColumns; j++) {
-        m_columnOrigins[j] = x;
-        m_rowOrigins[i] = y;
-        TableWrapData2 td = row[j];
-        if (td.isItemData) {
-          Control child = children[td.childIndex];
-          placeControl(child, td, x, y, rowHeights, i);
-          m_controlToXY.put(child, new Point(j, i));
-        }
-        x += columnWidths[j];
-        if (j < numColumns - 1) {
-          x += horizontalSpacing;
-        }
-      }
-      y += rowHeight + verticalSpacing;
-    }
-  }
+	/**
+	 * @see Layout#layout(Composite, boolean)
+	 */
+	@Override
+	protected void layout(Composite parent, boolean changed) {
+		Rectangle clientArea = parent.getClientArea();
+		Control[] children = parent.getChildren();
+		if (changed) {
+			cache.flush();
+		}
+		if (children.length == 0) {
+			m_columnOrigins = new int[0];
+			m_columnWidths = new int[0];
+			m_rowOrigins = new int[0];
+			m_rowHeights = new int[0];
+			return;
+		}
+		cache.setControls(children);
+		int parentWidth = clientArea.width;
+		changed = true;
+		initializeIfNeeded(parent, changed);
+		if (initialLayout) {
+			changed = true;
+			initialLayout = false;
+		}
+		if (grid == null || changed) {
+			changed = true;
+			grid = new Vector();
+			createGrid(parent);
+		}
+		resetColumnWidths();
+		int minWidth = internalGetMinimumWidth(parent, changed);
+		int maxWidth = internalGetMaximumWidth(parent, changed);
+		int tableWidth = parentWidth;
+		int[] columnWidths;
+		if (parentWidth <= minWidth) {
+			tableWidth = minWidth;
+			if (makeColumnsEqualWidth) {
+				columnWidths = new int[numColumns];
+				for (int i = 0; i < numColumns; i++) {
+					columnWidths[i] = widestColumnWidth;
+				}
+			} else {
+				columnWidths = minColumnWidths;
+			}
+		} else if (parentWidth > maxWidth) {
+			if (growingColumns.length == 0) {
+				tableWidth = maxWidth;
+				columnWidths = maxColumnWidths;
+			} else {
+				columnWidths = new int[numColumns];
+				int colSpace = tableWidth - leftMargin - rightMargin;
+				colSpace -= (numColumns - 1) * horizontalSpacing;
+				int extra = parentWidth - maxWidth;
+				int colExtra = extra / growingColumns.length;
+				for (int i = 0; i < numColumns; i++) {
+					columnWidths[i] = maxColumnWidths[i];
+					if (isGrowingColumn(i)) {
+						columnWidths[i] += colExtra;
+					}
+				}
+			}
+		} else {
+			columnWidths = new int[numColumns];
+			if (makeColumnsEqualWidth) {
+				int colSpace = tableWidth - leftMargin - rightMargin;
+				colSpace -= (numColumns - 1) * horizontalSpacing;
+				int col = colSpace / numColumns;
+				for (int i = 0; i < numColumns; i++) {
+					columnWidths[i] = col;
+				}
+			} else {
+				columnWidths = assignExtraSpace(tableWidth, maxWidth, minWidth);
+			}
+		}
+		m_columnWidths = columnWidths;
+		//
+		int[] rowHeights = computeRowHeights(children, columnWidths, changed);
+		m_rowHeights = rowHeights;
+		m_columnOrigins = new int[numColumns];
+		m_rowOrigins = new int[grid.size()];
+		int y = topMargin + clientArea.y;
+		for (int i = 0; i < grid.size(); i++) {
+			int rowHeight = rowHeights[i];
+			int x = leftMargin + clientArea.x;
+			TableWrapData2[] row = (TableWrapData2[]) grid.elementAt(i);
+			for (int j = 0; j < numColumns; j++) {
+				m_columnOrigins[j] = x;
+				m_rowOrigins[i] = y;
+				TableWrapData2 td = row[j];
+				if (td.isItemData) {
+					Control child = children[td.childIndex];
+					placeControl(child, td, x, y, rowHeights, i);
+					m_controlToXY.put(child, new Point(j, i));
+				}
+				x += columnWidths[j];
+				if (j < numColumns - 1) {
+					x += horizontalSpacing;
+				}
+			}
+			y += rowHeight + verticalSpacing;
+		}
+	}
 
-  int[] computeRowHeights(Control[] children, int[] columnWidths, boolean changed) {
-    int[] rowHeights = new int[grid.size()];
-    for (int i = 0; i < grid.size(); i++) {
-      TableWrapData2[] row = (TableWrapData2[]) grid.elementAt(i);
-      rowHeights[i] = 0;
-      for (int j = 0; j < numColumns; j++) {
-        TableWrapData2 td = row[j];
-        if (td.isItemData == false) {
-          continue;
-        }
-        Control child = children[td.childIndex];
-        int span = td.colspan;
-        int cwidth = 0;
-        for (int k = j; k < j + span; k++) {
-          cwidth += columnWidths[k];
-          if (k < j + span - 1) {
-            cwidth += horizontalSpacing;
-          }
-        }
-        Point size = computeSize(td.childIndex, cwidth, td.indent, td.maxWidth, td.maxHeight);
-        td.compWidth = cwidth;
-        if (td.heightHint != SWT.DEFAULT) {
-          size = new Point(size.x, td.heightHint);
-        }
-        td.compSize = size;
-        RowSpan rowspan = (RowSpan) rowspans.get(child);
-        if (rowspan == null) {
-          rowHeights[i] = Math.max(rowHeights[i], size.y);
-        } else {
-          rowspan.height = size.y;
-        }
-      }
-      updateRowSpans(i, rowHeights[i]);
-    }
-    for (Enumeration enm = rowspans.elements(); enm.hasMoreElements();) {
-      RowSpan rowspan = (RowSpan) enm.nextElement();
-      int increase = rowspan.getRequiredHeightIncrease();
-      if (increase == 0) {
-        continue;
-      }
-      TableWrapData2 td = (TableWrapData2) rowspan.child.getLayoutData();
-      int ngrowing = 0;
-      int[] affectedRows = new int[grid.size()];
-      for (int i = 0; i < growingRows.length; i++) {
-        int growingRow = growingRows[i];
-        if (growingRow >= rowspan.row && growingRow < rowspan.row + td.rowspan) {
-          affectedRows[ngrowing++] = growingRow;
-        }
-      }
-      if (ngrowing == 0) {
-        ngrowing = 1;
-        affectedRows[0] = rowspan.row + td.rowspan - 1;
-      }
-      increase += increase % ngrowing;
-      int perRowIncrease = increase / ngrowing;
-      for (int i = 0; i < ngrowing; i++) {
-        int growingRow = affectedRows[i];
-        rowHeights[growingRow] += perRowIncrease;
-      }
-    }
-    return rowHeights;
-  }
+	int[] computeRowHeights(Control[] children, int[] columnWidths, boolean changed) {
+		int[] rowHeights = new int[grid.size()];
+		for (int i = 0; i < grid.size(); i++) {
+			TableWrapData2[] row = (TableWrapData2[]) grid.elementAt(i);
+			rowHeights[i] = 0;
+			for (int j = 0; j < numColumns; j++) {
+				TableWrapData2 td = row[j];
+				if (td.isItemData == false) {
+					continue;
+				}
+				Control child = children[td.childIndex];
+				int span = td.colspan;
+				int cwidth = 0;
+				for (int k = j; k < j + span; k++) {
+					cwidth += columnWidths[k];
+					if (k < j + span - 1) {
+						cwidth += horizontalSpacing;
+					}
+				}
+				Point size = computeSize(td.childIndex, cwidth, td.indent, td.maxWidth, td.maxHeight);
+				td.compWidth = cwidth;
+				if (td.heightHint != SWT.DEFAULT) {
+					size = new Point(size.x, td.heightHint);
+				}
+				td.compSize = size;
+				RowSpan rowspan = (RowSpan) rowspans.get(child);
+				if (rowspan == null) {
+					rowHeights[i] = Math.max(rowHeights[i], size.y);
+				} else {
+					rowspan.height = size.y;
+				}
+			}
+			updateRowSpans(i, rowHeights[i]);
+		}
+		for (Enumeration enm = rowspans.elements(); enm.hasMoreElements();) {
+			RowSpan rowspan = (RowSpan) enm.nextElement();
+			int increase = rowspan.getRequiredHeightIncrease();
+			if (increase == 0) {
+				continue;
+			}
+			TableWrapData2 td = (TableWrapData2) rowspan.child.getLayoutData();
+			int ngrowing = 0;
+			int[] affectedRows = new int[grid.size()];
+			for (int i = 0; i < growingRows.length; i++) {
+				int growingRow = growingRows[i];
+				if (growingRow >= rowspan.row && growingRow < rowspan.row + td.rowspan) {
+					affectedRows[ngrowing++] = growingRow;
+				}
+			}
+			if (ngrowing == 0) {
+				ngrowing = 1;
+				affectedRows[0] = rowspan.row + td.rowspan - 1;
+			}
+			increase += increase % ngrowing;
+			int perRowIncrease = increase / ngrowing;
+			for (int i = 0; i < ngrowing; i++) {
+				int growingRow = affectedRows[i];
+				rowHeights[growingRow] += perRowIncrease;
+			}
+		}
+		return rowHeights;
+	}
 
-  boolean isGrowingColumn(int col) {
-    if (growingColumns == null) {
-      return false;
-    }
-    for (int i = 0; i < growingColumns.length; i++) {
-      if (col == growingColumns[i]) {
-        return true;
-      }
-    }
-    return false;
-  }
+	boolean isGrowingColumn(int col) {
+		if (growingColumns == null) {
+			return false;
+		}
+		for (int i = 0; i < growingColumns.length; i++) {
+			if (col == growingColumns[i]) {
+				return true;
+			}
+		}
+		return false;
+	}
 
-  int[] assignExtraSpace(int tableWidth, int maxWidth, int minWidth) {
-    int fixedPart = leftMargin + rightMargin + (numColumns - 1) * horizontalSpacing;
-    int D = maxWidth - minWidth;
-    int W = tableWidth - fixedPart - minWidth;
-    int widths[] = new int[numColumns];
-    int rem = 0;
-    for (int i = 0; i < numColumns; i++) {
-      int cmin = minColumnWidths[i];
-      int cmax = maxColumnWidths[i];
-      int d = cmax - cmin;
-      int extra = D != 0 ? d * W / D : 0;
-      if (i < numColumns - 1) {
-        widths[i] = cmin + extra;
-        rem += widths[i];
-      } else {
-        widths[i] = tableWidth - fixedPart - rem;
-      }
-    }
-    return widths;
-  }
+	int[] assignExtraSpace(int tableWidth, int maxWidth, int minWidth) {
+		int fixedPart = leftMargin + rightMargin + (numColumns - 1) * horizontalSpacing;
+		int D = maxWidth - minWidth;
+		int W = tableWidth - fixedPart - minWidth;
+		int widths[] = new int[numColumns];
+		int rem = 0;
+		for (int i = 0; i < numColumns; i++) {
+			int cmin = minColumnWidths[i];
+			int cmax = maxColumnWidths[i];
+			int d = cmax - cmin;
+			int extra = D != 0 ? d * W / D : 0;
+			if (i < numColumns - 1) {
+				widths[i] = cmin + extra;
+				rem += widths[i];
+			} else {
+				widths[i] = tableWidth - fixedPart - rem;
+			}
+		}
+		return widths;
+	}
 
-  Point computeSize(int childIndex, int width, int indent, int maxWidth, int maxHeight) {
-    int widthArg = width - indent;
-    SizeCache controlCache = cache.getCache(childIndex);
-    if (!isWrap(controlCache.getControl())) {
-      widthArg = SWT.DEFAULT;
-    }
-    Point size = controlCache.computeSize(widthArg, SWT.DEFAULT);
-    if (maxWidth != SWT.DEFAULT) {
-      size.x = Math.min(size.x, maxWidth);
-    }
-    if (maxHeight != SWT.DEFAULT) {
-      size.y = Math.min(size.y, maxHeight);
-    }
-    size.x += indent;
-    return size;
-  }
+	Point computeSize(int childIndex, int width, int indent, int maxWidth, int maxHeight) {
+		int widthArg = width - indent;
+		SizeCache controlCache = cache.getCache(childIndex);
+		if (!isWrap(controlCache.getControl())) {
+			widthArg = SWT.DEFAULT;
+		}
+		Point size = controlCache.computeSize(widthArg, SWT.DEFAULT);
+		if (maxWidth != SWT.DEFAULT) {
+			size.x = Math.min(size.x, maxWidth);
+		}
+		if (maxHeight != SWT.DEFAULT) {
+			size.y = Math.min(size.y, maxHeight);
+		}
+		size.x += indent;
+		return size;
+	}
 
-  void placeControl(Control control, TableWrapData2 td, int x, int y, int[] rowHeights, int row) {
-    int xloc = x + td.indent;
-    int yloc = y;
-    int height = td.compSize.y;
-    int colWidth = td.compWidth - td.indent;
-    int width = td.compSize.x - td.indent;
-    width = Math.min(width, colWidth);
-    int slotHeight = rowHeights[row];
-    RowSpan rowspan = (RowSpan) rowspans.get(control);
-    if (rowspan != null) {
-      slotHeight = 0;
-      for (int i = row; i < row + td.rowspan; i++) {
-        if (i > row) {
-          slotHeight += verticalSpacing;
-        }
-        slotHeight += rowHeights[i];
-      }
-    }
-    // align horizontally
-    if (td.align == TableWrapData2.CENTER) {
-      xloc = x + colWidth / 2 - width / 2;
-    } else if (td.align == TableWrapData2.RIGHT) {
-      xloc = x + colWidth - width;
-    } else if (td.align == TableWrapData2.FILL) {
-      width = colWidth;
-    }
-    // align vertically
-    if (td.valign == TableWrapData2.MIDDLE) {
-      yloc = y + slotHeight / 2 - height / 2;
-    } else if (td.valign == TableWrapData2.BOTTOM) {
-      yloc = y + slotHeight - height;
-    } else if (td.valign == TableWrapData2.FILL) {
-      height = slotHeight;
-    }
-    control.setBounds(xloc, yloc, width, height);
-  }
+	void placeControl(Control control, TableWrapData2 td, int x, int y, int[] rowHeights, int row) {
+		int xloc = x + td.indent;
+		int yloc = y;
+		int height = td.compSize.y;
+		int colWidth = td.compWidth - td.indent;
+		int width = td.compSize.x - td.indent;
+		width = Math.min(width, colWidth);
+		int slotHeight = rowHeights[row];
+		RowSpan rowspan = (RowSpan) rowspans.get(control);
+		if (rowspan != null) {
+			slotHeight = 0;
+			for (int i = row; i < row + td.rowspan; i++) {
+				if (i > row) {
+					slotHeight += verticalSpacing;
+				}
+				slotHeight += rowHeights[i];
+			}
+		}
+		// align horizontally
+		if (td.align == TableWrapData2.CENTER) {
+			xloc = x + colWidth / 2 - width / 2;
+		} else if (td.align == TableWrapData2.RIGHT) {
+			xloc = x + colWidth - width;
+		} else if (td.align == TableWrapData2.FILL) {
+			width = colWidth;
+		}
+		// align vertically
+		if (td.valign == TableWrapData2.MIDDLE) {
+			yloc = y + slotHeight / 2 - height / 2;
+		} else if (td.valign == TableWrapData2.BOTTOM) {
+			yloc = y + slotHeight - height;
+		} else if (td.valign == TableWrapData2.FILL) {
+			height = slotHeight;
+		}
+		control.setBounds(xloc, yloc, width, height);
+	}
 
-  void createGrid(Composite composite) {
-    int row, column, rowFill, columnFill;
-    Control[] children;
-    TableWrapData2 spacerSpec;
-    Vector growingCols = new Vector();
-    Vector growingRows = new Vector();
-    rowspans = new Hashtable();
-    //
-    children = composite.getChildren();
-    if (children.length == 0) {
-      return;
-    }
-    //
-    grid.addElement(createEmptyRow());
-    row = 0;
-    column = 0;
-    // Loop through the children and place their associated layout specs in
-    // the
-    // grid. Placement occurs left to right, top to bottom (i.e., by row).
-    for (int i = 0; i < children.length; i++) {
-      // Find the first available spot in the grid.
-      Control child = children[i];
-      TableWrapData2 spec = (TableWrapData2) child.getLayoutData();
-      while (((TableWrapData2[]) grid.elementAt(row))[column] != null) {
-        column = column + 1;
-        if (column >= numColumns) {
-          row = row + 1;
-          column = 0;
-          if (row >= grid.size()) {
-            grid.addElement(createEmptyRow());
-          }
-        }
-      }
-      // See if the place will support the widget's horizontal span. If
-      // not, go to the
-      // next row.
-      if (column + spec.colspan - 1 >= numColumns) {
-        grid.addElement(createEmptyRow());
-        row = row + 1;
-        column = 0;
-      }
-      // The vertical span for the item will be at least 1. If it is > 1,
-      // add other rows to the grid.
-      if (spec.rowspan > 1) {
-        rowspans.put(child, new RowSpan(child, column, row));
-      }
-      for (int j = 2; j <= spec.rowspan; j++) {
-        if (row + j > grid.size()) {
-          grid.addElement(createEmptyRow());
-        }
-      }
-      // Store the layout spec. Also cache the childIndex. NOTE: That we
-      // assume the children of a
-      // composite are maintained in the order in which they are created
-      // and added to the composite.
-      ((TableWrapData2[]) grid.elementAt(row))[column] = spec;
-      spec.childIndex = i;
-      if (spec.grabHorizontal) {
-        updateGrowingColumns(growingCols, spec, column);
-      }
-      if (spec.grabVertical) {
-        updateGrowingRows(growingRows, spec, row);
-      }
-      // Put spacers in the grid to account for the item's vertical and
-      // horizontal
-      // span.
-      rowFill = spec.rowspan - 1;
-      columnFill = spec.colspan - 1;
-      for (int r = 1; r <= rowFill; r++) {
-        for (int c = 0; c < spec.colspan; c++) {
-          spacerSpec = new TableWrapData2();
-          spacerSpec.isItemData = false;
-          ((TableWrapData2[]) grid.elementAt(row + r))[column + c] = spacerSpec;
-        }
-      }
-      for (int c = 1; c <= columnFill; c++) {
-        for (int r = 0; r < spec.rowspan; r++) {
-          spacerSpec = new TableWrapData2();
-          spacerSpec.isItemData = false;
-          ((TableWrapData2[]) grid.elementAt(row + r))[column + c] = spacerSpec;
-        }
-      }
-      column = column + spec.colspan - 1;
-    }
-    // Fill out empty grid cells with spacers.
-    for (int k = column + 1; k < numColumns; k++) {
-      spacerSpec = new TableWrapData2();
-      spacerSpec.isItemData = false;
-      ((TableWrapData2[]) grid.elementAt(row))[k] = spacerSpec;
-    }
-    for (int k = row + 1; k < grid.size(); k++) {
-      spacerSpec = new TableWrapData2();
-      spacerSpec.isItemData = false;
-      ((TableWrapData2[]) grid.elementAt(k))[column] = spacerSpec;
-    }
-    growingColumns = new int[growingCols.size()];
-    for (int i = 0; i < growingCols.size(); i++) {
-      growingColumns[i] = ((Integer) growingCols.get(i)).intValue();
-    }
-    this.growingRows = new int[growingRows.size()];
-    for (int i = 0; i < growingRows.size(); i++) {
-      this.growingRows[i] = ((Integer) growingRows.get(i)).intValue();
-    }
-  }
+	void createGrid(Composite composite) {
+		int row, column, rowFill, columnFill;
+		Control[] children;
+		TableWrapData2 spacerSpec;
+		Vector growingCols = new Vector();
+		Vector growingRows = new Vector();
+		rowspans = new Hashtable();
+		//
+		children = composite.getChildren();
+		if (children.length == 0) {
+			return;
+		}
+		//
+		grid.addElement(createEmptyRow());
+		row = 0;
+		column = 0;
+		// Loop through the children and place their associated layout specs in
+		// the
+		// grid. Placement occurs left to right, top to bottom (i.e., by row).
+		for (int i = 0; i < children.length; i++) {
+			// Find the first available spot in the grid.
+			Control child = children[i];
+			TableWrapData2 spec = (TableWrapData2) child.getLayoutData();
+			while (((TableWrapData2[]) grid.elementAt(row))[column] != null) {
+				column = column + 1;
+				if (column >= numColumns) {
+					row = row + 1;
+					column = 0;
+					if (row >= grid.size()) {
+						grid.addElement(createEmptyRow());
+					}
+				}
+			}
+			// See if the place will support the widget's horizontal span. If
+			// not, go to the
+			// next row.
+			if (column + spec.colspan - 1 >= numColumns) {
+				grid.addElement(createEmptyRow());
+				row = row + 1;
+				column = 0;
+			}
+			// The vertical span for the item will be at least 1. If it is > 1,
+			// add other rows to the grid.
+			if (spec.rowspan > 1) {
+				rowspans.put(child, new RowSpan(child, column, row));
+			}
+			for (int j = 2; j <= spec.rowspan; j++) {
+				if (row + j > grid.size()) {
+					grid.addElement(createEmptyRow());
+				}
+			}
+			// Store the layout spec. Also cache the childIndex. NOTE: That we
+			// assume the children of a
+			// composite are maintained in the order in which they are created
+			// and added to the composite.
+			((TableWrapData2[]) grid.elementAt(row))[column] = spec;
+			spec.childIndex = i;
+			if (spec.grabHorizontal) {
+				updateGrowingColumns(growingCols, spec, column);
+			}
+			if (spec.grabVertical) {
+				updateGrowingRows(growingRows, spec, row);
+			}
+			// Put spacers in the grid to account for the item's vertical and
+			// horizontal
+			// span.
+			rowFill = spec.rowspan - 1;
+			columnFill = spec.colspan - 1;
+			for (int r = 1; r <= rowFill; r++) {
+				for (int c = 0; c < spec.colspan; c++) {
+					spacerSpec = new TableWrapData2();
+					spacerSpec.isItemData = false;
+					((TableWrapData2[]) grid.elementAt(row + r))[column + c] = spacerSpec;
+				}
+			}
+			for (int c = 1; c <= columnFill; c++) {
+				for (int r = 0; r < spec.rowspan; r++) {
+					spacerSpec = new TableWrapData2();
+					spacerSpec.isItemData = false;
+					((TableWrapData2[]) grid.elementAt(row + r))[column + c] = spacerSpec;
+				}
+			}
+			column = column + spec.colspan - 1;
+		}
+		// Fill out empty grid cells with spacers.
+		for (int k = column + 1; k < numColumns; k++) {
+			spacerSpec = new TableWrapData2();
+			spacerSpec.isItemData = false;
+			((TableWrapData2[]) grid.elementAt(row))[k] = spacerSpec;
+		}
+		for (int k = row + 1; k < grid.size(); k++) {
+			spacerSpec = new TableWrapData2();
+			spacerSpec.isItemData = false;
+			((TableWrapData2[]) grid.elementAt(k))[column] = spacerSpec;
+		}
+		growingColumns = new int[growingCols.size()];
+		for (int i = 0; i < growingCols.size(); i++) {
+			growingColumns[i] = ((Integer) growingCols.get(i)).intValue();
+		}
+		this.growingRows = new int[growingRows.size()];
+		for (int i = 0; i < growingRows.size(); i++) {
+			this.growingRows[i] = ((Integer) growingRows.get(i)).intValue();
+		}
+	}
 
-  private void updateGrowingColumns(Vector growingColumns, TableWrapData2 spec, int column) {
-    int affectedColumn = column + spec.colspan - 1;
-    for (int i = 0; i < growingColumns.size(); i++) {
-      Integer col = (Integer) growingColumns.get(i);
-      if (col.intValue() == affectedColumn) {
-        return;
-      }
-    }
-    growingColumns.add(affectedColumn);
-  }
+	private void updateGrowingColumns(Vector growingColumns, TableWrapData2 spec, int column) {
+		int affectedColumn = column + spec.colspan - 1;
+		for (int i = 0; i < growingColumns.size(); i++) {
+			Integer col = (Integer) growingColumns.get(i);
+			if (col.intValue() == affectedColumn) {
+				return;
+			}
+		}
+		growingColumns.add(affectedColumn);
+	}
 
-  private void updateGrowingRows(Vector growingRows, TableWrapData2 spec, int row) {
-    int affectedRow = row + spec.rowspan - 1;
-    for (int i = 0; i < growingRows.size(); i++) {
-      Integer irow = (Integer) growingRows.get(i);
-      if (irow.intValue() == affectedRow) {
-        return;
-      }
-    }
-    growingRows.add(affectedRow);
-  }
+	private void updateGrowingRows(Vector growingRows, TableWrapData2 spec, int row) {
+		int affectedRow = row + spec.rowspan - 1;
+		for (int i = 0; i < growingRows.size(); i++) {
+			Integer irow = (Integer) growingRows.get(i);
+			if (irow.intValue() == affectedRow) {
+				return;
+			}
+		}
+		growingRows.add(affectedRow);
+	}
 
-  private TableWrapData2[] createEmptyRow() {
-    TableWrapData2[] row = new TableWrapData2[numColumns];
-    for (int i = 0; i < numColumns; i++) {
-      row[i] = null;
-    }
-    return row;
-  }
+	private TableWrapData2[] createEmptyRow() {
+		TableWrapData2[] row = new TableWrapData2[numColumns];
+		for (int i = 0; i < numColumns; i++) {
+			row[i] = null;
+		}
+		return row;
+	}
 
-  /**
-   * @see Layout#computeSize(Composite, int, int, boolean)
-   */
-  @Override
-  protected Point computeSize(Composite parent, int wHint, int hHint, boolean changed) {
-    Control[] children = parent.getChildren();
-    if (changed) {
-      cache.flush();
-    }
-    if (children.length == 0) {
-      return new Point(0, 0);
-    }
-    cache.setControls(children);
-    int parentWidth = wHint;
-    changed = true;
-    initializeIfNeeded(parent, changed);
-    if (initialLayout) {
-      changed = true;
-      initialLayout = false;
-    }
-    if (grid == null || changed) {
-      changed = true;
-      grid = new Vector();
-      createGrid(parent);
-    }
-    resetColumnWidths();
-    int minWidth = internalGetMinimumWidth(parent, changed);
-    int maxWidth = internalGetMaximumWidth(parent, changed);
-    if (wHint == SWT.DEFAULT) {
-      parentWidth = maxWidth;
-    }
-    int tableWidth = parentWidth;
-    int[] columnWidths;
-    if (parentWidth <= minWidth) {
-      tableWidth = minWidth;
-      if (makeColumnsEqualWidth) {
-        columnWidths = new int[numColumns];
-        for (int i = 0; i < numColumns; i++) {
-          columnWidths[i] = widestColumnWidth;
-        }
-      } else {
-        columnWidths = minColumnWidths;
-      }
-    } else if (parentWidth >= maxWidth) {
-      if (makeColumnsEqualWidth) {
-        columnWidths = new int[numColumns];
-        int colSpace = parentWidth - leftMargin - rightMargin;
-        colSpace -= (numColumns - 1) * horizontalSpacing;
-        int col = colSpace / numColumns;
-        for (int i = 0; i < numColumns; i++) {
-          columnWidths[i] = col;
-        }
-      } else {
-        tableWidth = maxWidth;
-        columnWidths = maxColumnWidths;
-      }
-    } else {
-      columnWidths = new int[numColumns];
-      if (makeColumnsEqualWidth) {
-        int colSpace = tableWidth - leftMargin - rightMargin;
-        colSpace -= (numColumns - 1) * horizontalSpacing;
-        int col = colSpace / numColumns;
-        for (int i = 0; i < numColumns; i++) {
-          columnWidths[i] = col;
-        }
-      } else {
-        columnWidths = assignExtraSpace(tableWidth, maxWidth, minWidth);
-      }
-    }
-    int totalHeight = 0;
-    int innerHeight = 0;
-    // compute widths
-    for (int i = 0; i < grid.size(); i++) {
-      TableWrapData2[] row = (TableWrapData2[]) grid.elementAt(i);
-      // assign widths, calculate heights
-      int rowHeight = 0;
-      for (int j = 0; j < numColumns; j++) {
-        TableWrapData2 td = row[j];
-        if (td.isItemData == false) {
-          continue;
-        }
-        Control child = children[td.childIndex];
-        int span = td.colspan;
-        int cwidth = 0;
-        for (int k = j; k < j + span; k++) {
-          if (k > j) {
-            cwidth += horizontalSpacing;
-          }
-          cwidth += columnWidths[k];
-        }
-        int cy = td.heightHint;
-        if (cy == SWT.DEFAULT) {
-          Point size = computeSize(td.childIndex, cwidth, td.indent, td.maxWidth, td.maxHeight);
-          cy = size.y;
-        }
-        RowSpan rowspan = (RowSpan) rowspans.get(child);
-        if (rowspan != null) {
-          // don't take the height of this child into acount
-          // because it spans multiple rows
-          rowspan.height = cy;
-        } else {
-          rowHeight = Math.max(rowHeight, cy);
-        }
-      }
-      updateRowSpans(i, rowHeight);
-      if (i > 0) {
-        innerHeight += verticalSpacing;
-      }
-      innerHeight += rowHeight;
-    }
-    if (!rowspans.isEmpty()) {
-      innerHeight = compensateForRowSpans(innerHeight);
-    }
-    totalHeight = topMargin + innerHeight + bottomMargin;
-    return new Point(tableWidth, totalHeight);
-  }
+	/**
+	 * @see Layout#computeSize(Composite, int, int, boolean)
+	 */
+	@Override
+	protected Point computeSize(Composite parent, int wHint, int hHint, boolean changed) {
+		Control[] children = parent.getChildren();
+		if (changed) {
+			cache.flush();
+		}
+		if (children.length == 0) {
+			return new Point(0, 0);
+		}
+		cache.setControls(children);
+		int parentWidth = wHint;
+		changed = true;
+		initializeIfNeeded(parent, changed);
+		if (initialLayout) {
+			changed = true;
+			initialLayout = false;
+		}
+		if (grid == null || changed) {
+			changed = true;
+			grid = new Vector();
+			createGrid(parent);
+		}
+		resetColumnWidths();
+		int minWidth = internalGetMinimumWidth(parent, changed);
+		int maxWidth = internalGetMaximumWidth(parent, changed);
+		if (wHint == SWT.DEFAULT) {
+			parentWidth = maxWidth;
+		}
+		int tableWidth = parentWidth;
+		int[] columnWidths;
+		if (parentWidth <= minWidth) {
+			tableWidth = minWidth;
+			if (makeColumnsEqualWidth) {
+				columnWidths = new int[numColumns];
+				for (int i = 0; i < numColumns; i++) {
+					columnWidths[i] = widestColumnWidth;
+				}
+			} else {
+				columnWidths = minColumnWidths;
+			}
+		} else if (parentWidth >= maxWidth) {
+			if (makeColumnsEqualWidth) {
+				columnWidths = new int[numColumns];
+				int colSpace = parentWidth - leftMargin - rightMargin;
+				colSpace -= (numColumns - 1) * horizontalSpacing;
+				int col = colSpace / numColumns;
+				for (int i = 0; i < numColumns; i++) {
+					columnWidths[i] = col;
+				}
+			} else {
+				tableWidth = maxWidth;
+				columnWidths = maxColumnWidths;
+			}
+		} else {
+			columnWidths = new int[numColumns];
+			if (makeColumnsEqualWidth) {
+				int colSpace = tableWidth - leftMargin - rightMargin;
+				colSpace -= (numColumns - 1) * horizontalSpacing;
+				int col = colSpace / numColumns;
+				for (int i = 0; i < numColumns; i++) {
+					columnWidths[i] = col;
+				}
+			} else {
+				columnWidths = assignExtraSpace(tableWidth, maxWidth, minWidth);
+			}
+		}
+		int totalHeight = 0;
+		int innerHeight = 0;
+		// compute widths
+		for (int i = 0; i < grid.size(); i++) {
+			TableWrapData2[] row = (TableWrapData2[]) grid.elementAt(i);
+			// assign widths, calculate heights
+			int rowHeight = 0;
+			for (int j = 0; j < numColumns; j++) {
+				TableWrapData2 td = row[j];
+				if (td.isItemData == false) {
+					continue;
+				}
+				Control child = children[td.childIndex];
+				int span = td.colspan;
+				int cwidth = 0;
+				for (int k = j; k < j + span; k++) {
+					if (k > j) {
+						cwidth += horizontalSpacing;
+					}
+					cwidth += columnWidths[k];
+				}
+				int cy = td.heightHint;
+				if (cy == SWT.DEFAULT) {
+					Point size = computeSize(td.childIndex, cwidth, td.indent, td.maxWidth, td.maxHeight);
+					cy = size.y;
+				}
+				RowSpan rowspan = (RowSpan) rowspans.get(child);
+				if (rowspan != null) {
+					// don't take the height of this child into acount
+					// because it spans multiple rows
+					rowspan.height = cy;
+				} else {
+					rowHeight = Math.max(rowHeight, cy);
+				}
+			}
+			updateRowSpans(i, rowHeight);
+			if (i > 0) {
+				innerHeight += verticalSpacing;
+			}
+			innerHeight += rowHeight;
+		}
+		if (!rowspans.isEmpty()) {
+			innerHeight = compensateForRowSpans(innerHeight);
+		}
+		totalHeight = topMargin + innerHeight + bottomMargin;
+		return new Point(tableWidth, totalHeight);
+	}
 
-  private void updateRowSpans(int row, int rowHeight) {
-    if (rowspans == null || rowspans.size() == 0) {
-      return;
-    }
-    for (Enumeration enm = rowspans.elements(); enm.hasMoreElements();) {
-      RowSpan rowspan = (RowSpan) enm.nextElement();
-      rowspan.update(row, rowHeight);
-    }
-  }
+	private void updateRowSpans(int row, int rowHeight) {
+		if (rowspans == null || rowspans.size() == 0) {
+			return;
+		}
+		for (Enumeration enm = rowspans.elements(); enm.hasMoreElements();) {
+			RowSpan rowspan = (RowSpan) enm.nextElement();
+			rowspan.update(row, rowHeight);
+		}
+	}
 
-  private int compensateForRowSpans(int totalHeight) {
-    for (Enumeration enm = rowspans.elements(); enm.hasMoreElements();) {
-      RowSpan rowspan = (RowSpan) enm.nextElement();
-      totalHeight += rowspan.getRequiredHeightIncrease();
-    }
-    return totalHeight;
-  }
+	private int compensateForRowSpans(int totalHeight) {
+		for (Enumeration enm = rowspans.elements(); enm.hasMoreElements();) {
+			RowSpan rowspan = (RowSpan) enm.nextElement();
+			totalHeight += rowspan.getRequiredHeightIncrease();
+		}
+		return totalHeight;
+	}
 
-  int internalGetMinimumWidth(Composite parent, boolean changed) {
-    if (changed) {
-      //calculateMinimumColumnWidths(parent, true);
-      calculateColumnWidths(parent, minColumnWidths, false, true);
-    }
-    int minimumWidth = 0;
-    widestColumnWidth = 0;
-    if (makeColumnsEqualWidth) {
-      for (int i = 0; i < numColumns; i++) {
-        widestColumnWidth = Math.max(widestColumnWidth, minColumnWidths[i]);
-      }
-    }
-    for (int i = 0; i < numColumns; i++) {
-      if (i > 0) {
-        minimumWidth += horizontalSpacing;
-      }
-      if (makeColumnsEqualWidth) {
-        minimumWidth += widestColumnWidth;
-      } else {
-        minimumWidth += minColumnWidths[i];
-      }
-    }
-    // add margins
-    minimumWidth += leftMargin + rightMargin;
-    return minimumWidth;
-  }
+	int internalGetMinimumWidth(Composite parent, boolean changed) {
+		if (changed) {
+			//calculateMinimumColumnWidths(parent, true);
+			calculateColumnWidths(parent, minColumnWidths, false, true);
+		}
+		int minimumWidth = 0;
+		widestColumnWidth = 0;
+		if (makeColumnsEqualWidth) {
+			for (int i = 0; i < numColumns; i++) {
+				widestColumnWidth = Math.max(widestColumnWidth, minColumnWidths[i]);
+			}
+		}
+		for (int i = 0; i < numColumns; i++) {
+			if (i > 0) {
+				minimumWidth += horizontalSpacing;
+			}
+			if (makeColumnsEqualWidth) {
+				minimumWidth += widestColumnWidth;
+			} else {
+				minimumWidth += minColumnWidths[i];
+			}
+		}
+		// add margins
+		minimumWidth += leftMargin + rightMargin;
+		return minimumWidth;
+	}
 
-  int internalGetMaximumWidth(Composite parent, boolean changed) {
-    if (changed) {
-      //calculateMaximumColumnWidths(parent, true);
-      calculateColumnWidths(parent, maxColumnWidths, true, true);
-    }
-    int maximumWidth = 0;
-    for (int i = 0; i < numColumns; i++) {
-      if (i > 0) {
-        maximumWidth += horizontalSpacing;
-      }
-      maximumWidth += maxColumnWidths[i];
-    }
-    // add margins
-    maximumWidth += leftMargin + rightMargin;
-    return maximumWidth;
-  }
+	int internalGetMaximumWidth(Composite parent, boolean changed) {
+		if (changed) {
+			//calculateMaximumColumnWidths(parent, true);
+			calculateColumnWidths(parent, maxColumnWidths, true, true);
+		}
+		int maximumWidth = 0;
+		for (int i = 0; i < numColumns; i++) {
+			if (i > 0) {
+				maximumWidth += horizontalSpacing;
+			}
+			maximumWidth += maxColumnWidths[i];
+		}
+		// add margins
+		maximumWidth += leftMargin + rightMargin;
+		return maximumWidth;
+	}
 
-  void resetColumnWidths() {
-    if (minColumnWidths == null) {
-      minColumnWidths = new int[numColumns];
-    }
-    if (maxColumnWidths == null) {
-      maxColumnWidths = new int[numColumns];
-    }
-    for (int i = 0; i < numColumns; i++) {
-      minColumnWidths[i] = 0;
-    }
-    for (int i = 0; i < numColumns; i++) {
-      maxColumnWidths[i] = 0;
-    }
-  }
+	void resetColumnWidths() {
+		if (minColumnWidths == null) {
+			minColumnWidths = new int[numColumns];
+		}
+		if (maxColumnWidths == null) {
+			maxColumnWidths = new int[numColumns];
+		}
+		for (int i = 0; i < numColumns; i++) {
+			minColumnWidths[i] = 0;
+		}
+		for (int i = 0; i < numColumns; i++) {
+			maxColumnWidths[i] = 0;
+		}
+	}
 
-  void calculateColumnWidths(Composite parent, int[] columnWidths, boolean max, boolean changed) {
-    boolean secondPassNeeded = false;
-    for (int i = 0; i < grid.size(); i++) {
-      TableWrapData2[] row = (TableWrapData2[]) grid.elementAt(i);
-      for (int j = 0; j < numColumns; j++) {
-        TableWrapData2 td = row[j];
-        if (td.isItemData == false) {
-          continue;
-        }
-        if (td.colspan > 1) {
-          // we will not do controls with multiple column span
-          // here - increment and continue
-          secondPassNeeded = true;
-          j += td.colspan - 1;
-          continue;
-        }
-        SizeCache childCache = cache.getCache(td.childIndex);
-        // !!
-        int width = max ? childCache.computeMaximumWidth() : childCache.computeMinimumWidth();
-        if (td.maxWidth != SWT.DEFAULT) {
-          width = Math.min(width, td.maxWidth);
-        }
-        width += td.indent;
-        columnWidths[j] = Math.max(columnWidths[j], width);
-      }
-    }
-    if (!secondPassNeeded) {
-      return;
-    }
-    // Second pass for controls with multi-column horizontal span
-    for (int i = 0; i < grid.size(); i++) {
-      TableWrapData2[] row = (TableWrapData2[]) grid.elementAt(i);
-      for (int j = 0; j < numColumns; j++) {
-        TableWrapData2 td = row[j];
-        if (td.isItemData == false || td.colspan == 1) {
-          continue;
-        }
-        SizeCache childCache = cache.getCache(td.childIndex);
-        int width = max ? childCache.computeMaximumWidth() : childCache.computeMinimumWidth();
-        if (td.maxWidth != SWT.DEFAULT) {
-          width = Math.min(width, td.maxWidth);
-        }
-        width += td.indent;
-        // check if the current width is enough to
-        // support the control; if not, add the delta to
-        // the last column or to all the growing columns, if present
-        int current = 0;
-        for (int k = j; k < j + td.colspan; k++) {
-          if (k > j) {
-            current += horizontalSpacing;
-          }
-          current += columnWidths[k];
-        }
-        if (width <= current) {
-          // we are ok - nothing to do here
-        } else {
-          int ndiv = 0;
-          if (growingColumns != null) {
-            for (int k = j; k < j + td.colspan; k++) {
-              if (isGrowingColumn(k)) {
-                ndiv++;
-              }
-            }
-          }
-          if (ndiv == 0) {
-            // add the delta to the last column
-            columnWidths[j + td.colspan - 1] += width - current;
-          } else {
-            // distribute the delta to the growing
-            // columns
-            int percolumn = (width - current) / ndiv;
-            if ((width - current) % ndiv > 0) {
-              percolumn++;
-            }
-            for (int k = j; k < j + td.colspan; k++) {
-              if (isGrowingColumn(k)) {
-                columnWidths[k] += percolumn;
-              }
-            }
-          }
-        }
-      }
-    }
-  }
+	void calculateColumnWidths(Composite parent, int[] columnWidths, boolean max, boolean changed) {
+		boolean secondPassNeeded = false;
+		for (int i = 0; i < grid.size(); i++) {
+			TableWrapData2[] row = (TableWrapData2[]) grid.elementAt(i);
+			for (int j = 0; j < numColumns; j++) {
+				TableWrapData2 td = row[j];
+				if (td.isItemData == false) {
+					continue;
+				}
+				if (td.colspan > 1) {
+					// we will not do controls with multiple column span
+					// here - increment and continue
+					secondPassNeeded = true;
+					j += td.colspan - 1;
+					continue;
+				}
+				SizeCache childCache = cache.getCache(td.childIndex);
+				// !!
+				int width = max ? childCache.computeMaximumWidth() : childCache.computeMinimumWidth();
+				if (td.maxWidth != SWT.DEFAULT) {
+					width = Math.min(width, td.maxWidth);
+				}
+				width += td.indent;
+				columnWidths[j] = Math.max(columnWidths[j], width);
+			}
+		}
+		if (!secondPassNeeded) {
+			return;
+		}
+		// Second pass for controls with multi-column horizontal span
+		for (int i = 0; i < grid.size(); i++) {
+			TableWrapData2[] row = (TableWrapData2[]) grid.elementAt(i);
+			for (int j = 0; j < numColumns; j++) {
+				TableWrapData2 td = row[j];
+				if (td.isItemData == false || td.colspan == 1) {
+					continue;
+				}
+				SizeCache childCache = cache.getCache(td.childIndex);
+				int width = max ? childCache.computeMaximumWidth() : childCache.computeMinimumWidth();
+				if (td.maxWidth != SWT.DEFAULT) {
+					width = Math.min(width, td.maxWidth);
+				}
+				width += td.indent;
+				// check if the current width is enough to
+				// support the control; if not, add the delta to
+				// the last column or to all the growing columns, if present
+				int current = 0;
+				for (int k = j; k < j + td.colspan; k++) {
+					if (k > j) {
+						current += horizontalSpacing;
+					}
+					current += columnWidths[k];
+				}
+				if (width <= current) {
+					// we are ok - nothing to do here
+				} else {
+					int ndiv = 0;
+					if (growingColumns != null) {
+						for (int k = j; k < j + td.colspan; k++) {
+							if (isGrowingColumn(k)) {
+								ndiv++;
+							}
+						}
+					}
+					if (ndiv == 0) {
+						// add the delta to the last column
+						columnWidths[j + td.colspan - 1] += width - current;
+					} else {
+						// distribute the delta to the growing
+						// columns
+						int percolumn = (width - current) / ndiv;
+						if ((width - current) % ndiv > 0) {
+							percolumn++;
+						}
+						for (int k = j; k < j + td.colspan; k++) {
+							if (isGrowingColumn(k)) {
+								columnWidths[k] += percolumn;
+							}
+						}
+					}
+				}
+			}
+		}
+	}
 
-  boolean isWrap(Control control) {
-    if (control instanceof Composite
-        && ((Composite) control).getLayout() instanceof ILayoutExtension) {
-      return true;
-    }
-    return (control.getStyle() & SWT.WRAP) != 0;
-  }
+	boolean isWrap(Control control) {
+		if (control instanceof Composite
+				&& ((Composite) control).getLayout() instanceof ILayoutExtension) {
+			return true;
+		}
+		return (control.getStyle() & SWT.WRAP) != 0;
+	}
 
-  private void initializeIfNeeded(Composite parent, boolean changed) {
-    if (changed) {
-      initialLayout = true;
-    }
-    if (initialLayout) {
-      initializeLayoutData(parent);
-      initialLayout = false;
-    }
-  }
+	private void initializeIfNeeded(Composite parent, boolean changed) {
+		if (changed) {
+			initialLayout = true;
+		}
+		if (initialLayout) {
+			initializeLayoutData(parent);
+			initialLayout = false;
+		}
+	}
 
-  void initializeLayoutData(Composite composite) {
-    Control[] children = composite.getChildren();
-    for (int i = 0; i < children.length; i++) {
-      Control child = children[i];
-      if (child.getLayoutData() == null) {
-        child.setLayoutData(new TableWrapData2());
-      }
-    }
-  }
+	void initializeLayoutData(Composite composite) {
+		Control[] children = composite.getChildren();
+		for (int i = 0; i < children.length; i++) {
+			Control child = children[i];
+			if (child.getLayoutData() == null) {
+				child.setLayoutData(new TableWrapData2());
+			}
+		}
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/table/TableWrapLayoutAssistant.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/table/TableWrapLayoutAssistant.java
index 8ece83f2f..bf36760ef 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/table/TableWrapLayoutAssistant.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/table/TableWrapLayoutAssistant.java
@@ -28,28 +28,28 @@
  * @coverage rcp.model.forms
  */
 public final class TableWrapLayoutAssistant extends LayoutAssistantSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public TableWrapLayoutAssistant(ILayoutInfo<?> layout) {
-    super(layout);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public TableWrapLayoutAssistant(ILayoutInfo<?> layout) {
+		super(layout);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Pages
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected AbstractAssistantPage createLayoutPage(Composite parent) {
-    return new TableWrapLayoutAssistantPage(parent, m_layout);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Pages
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected AbstractAssistantPage createLayoutPage(Composite parent) {
+		return new TableWrapLayoutAssistantPage(parent, m_layout);
+	}
 
-  @Override
-  protected AbstractAssistantPage createConstraintsPage(Composite parent, List<ObjectInfo> objects) {
-    List<ILayoutDataInfo> dataList = getDataList(objects);
-    return new TableWrapLayoutDataAssistantPage(parent, dataList);
-  }
+	@Override
+	protected AbstractAssistantPage createConstraintsPage(Composite parent, List<ObjectInfo> objects) {
+		List<ILayoutDataInfo> dataList = getDataList(objects);
+		return new TableWrapLayoutDataAssistantPage(parent, dataList);
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/table/TableWrapLayoutAssistantPage.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/table/TableWrapLayoutAssistantPage.java
index 2c7169a27..c5663d647 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/table/TableWrapLayoutAssistantPage.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/table/TableWrapLayoutAssistantPage.java
@@ -28,70 +28,70 @@
  * @coverage rcp.model.forms
  */
 public final class TableWrapLayoutAssistantPage extends AbstractAssistantPage {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public TableWrapLayoutAssistantPage(Composite parent, Object selection) {
-    super(parent, selection);
-    GridLayoutFactory.create(this).spacingV(1).noMargins();
-    {
-      Composite topComposite = new Composite(this, SWT.NONE);
-      GridLayoutFactory.create(topComposite).columns(4);
-      GridDataFactory.create(topComposite).fillH().grabH();
-      // columns properties
-      {
-        addIntegerProperty(
-            topComposite,
-            "numColumns",
-            ModelMessages.TableWrapLayoutAssistantPage_numColumns,
-            1);
-        new Label(topComposite, SWT.NONE).setText(" ");
-        addBooleanProperty(
-            topComposite,
-            "makeColumnsEqualWidth",
-            ModelMessages.TableWrapLayoutAssistantPage_makeEqualColumns);
-      }
-    }
-    {
-      Composite groupComposite = new Composite(this, SWT.NONE);
-      GridLayoutFactory.create(groupComposite).columns(2);
-      GridDataFactory.create(groupComposite).fill().grab();
-      // margin for sides
-      {
-        Group group =
-            addIntegerProperties(
-                groupComposite,
-                ModelMessages.TableWrapLayoutAssistantPage_marginsGroup,
-                new String[][]{
-                    new String[]{
-                        "marginLeft",
-                        ModelMessages.TableWrapLayoutAssistantPage_marginLeft},
-                    new String[]{"marginTop", ModelMessages.TableWrapLayoutAssistantPage_marginTop},
-                    new String[]{
-                        "marginRight",
-                        ModelMessages.TableWrapLayoutAssistantPage_marginRight},
-                    new String[]{
-                        "marginBottom",
-                        ModelMessages.TableWrapLayoutAssistantPage_marginBottom}});
-        GridDataFactory.create(group).fillV().spanV(2);
-      }
-      // spacing
-      {
-        Group group =
-            addIntegerProperties(
-                groupComposite,
-                ModelMessages.TableWrapLayoutAssistantPage_spacingGroup,
-                new String[][]{
-                    new String[]{
-                        "horizontalSpacing",
-                        ModelMessages.TableWrapLayoutAssistantPage_spacingHorizontal},
-                    new String[]{
-                        "verticalSpacing",
-                        ModelMessages.TableWrapLayoutAssistantPage_spacingVertical}});
-        GridDataFactory.create(group).fillH().grabH();
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public TableWrapLayoutAssistantPage(Composite parent, Object selection) {
+		super(parent, selection);
+		GridLayoutFactory.create(this).spacingV(1).noMargins();
+		{
+			Composite topComposite = new Composite(this, SWT.NONE);
+			GridLayoutFactory.create(topComposite).columns(4);
+			GridDataFactory.create(topComposite).fillH().grabH();
+			// columns properties
+			{
+				addIntegerProperty(
+						topComposite,
+						"numColumns",
+						ModelMessages.TableWrapLayoutAssistantPage_numColumns,
+						1);
+				new Label(topComposite, SWT.NONE).setText(" ");
+				addBooleanProperty(
+						topComposite,
+						"makeColumnsEqualWidth",
+						ModelMessages.TableWrapLayoutAssistantPage_makeEqualColumns);
+			}
+		}
+		{
+			Composite groupComposite = new Composite(this, SWT.NONE);
+			GridLayoutFactory.create(groupComposite).columns(2);
+			GridDataFactory.create(groupComposite).fill().grab();
+			// margin for sides
+			{
+				Group group =
+						addIntegerProperties(
+								groupComposite,
+								ModelMessages.TableWrapLayoutAssistantPage_marginsGroup,
+								new String[][]{
+									new String[]{
+											"marginLeft",
+											ModelMessages.TableWrapLayoutAssistantPage_marginLeft},
+									new String[]{"marginTop", ModelMessages.TableWrapLayoutAssistantPage_marginTop},
+									new String[]{
+											"marginRight",
+											ModelMessages.TableWrapLayoutAssistantPage_marginRight},
+									new String[]{
+											"marginBottom",
+											ModelMessages.TableWrapLayoutAssistantPage_marginBottom}});
+				GridDataFactory.create(group).fillV().spanV(2);
+			}
+			// spacing
+			{
+				Group group =
+						addIntegerProperties(
+								groupComposite,
+								ModelMessages.TableWrapLayoutAssistantPage_spacingGroup,
+								new String[][]{
+									new String[]{
+											"horizontalSpacing",
+											ModelMessages.TableWrapLayoutAssistantPage_spacingHorizontal},
+									new String[]{
+											"verticalSpacing",
+											ModelMessages.TableWrapLayoutAssistantPage_spacingVertical}});
+				GridDataFactory.create(group).fillH().grabH();
+			}
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/table/TableWrapLayoutConverter.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/table/TableWrapLayoutConverter.java
index 4b7d53b6e..1ae1fa2b7 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/table/TableWrapLayoutConverter.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/table/TableWrapLayoutConverter.java
@@ -34,166 +34,166 @@
  * @coverage rcp.model.forms
  */
 public final class TableWrapLayoutConverter {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private TableWrapLayoutConverter() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private TableWrapLayoutConverter() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Conversion
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @SuppressWarnings("unchecked")
-  public static <T extends IControlInfo> void convert(ICompositeInfo parent,
-      ITableWrapLayoutInfo<T> layout) throws Exception {
-    // prepare columns and rows and distribute controls in them
-    List<ComponentGroup> columns =
-        GridConvertionHelper.buildGroups(parent.getChildrenControls(), true);
-    List<ComponentGroup> rows =
-        GridConvertionHelper.buildGroups(parent.getChildrenControls(), false);
-    // sort components in columns and rows
-    GridConvertionHelper.sortGroupsByTranspose(columns, rows);
-    GridConvertionHelper.sortGroupsByTranspose(rows, columns);
-    // ensure that columns and rows are sorted by start coordinates
-    GridConvertionHelper.sortGroups(columns);
-    GridConvertionHelper.sortGroups(rows);
-    // calculate begin/end for each column/row
-    GridConvertionHelper.updateBoundsGaps(columns, false);
-    GridConvertionHelper.updateBoundsGaps(rows, false);
-    // reorder controls
-    reorderControls(parent, rows);
-    // set cell for controls
-    int numColumns = columns.size();
-    List<IControlInfo> appliedControls = Lists.newArrayList();
-    for (ComponentGroup column : columns) {
-      for (ComponentInGroup component : column.getComponents()) {
-        T control = (T) component.getComponent();
-        if (appliedControls.contains(control)) {
-          continue;
-        }
-        // layout data
-        GeneralLayoutData generalLayoutData =
-            GeneralLayoutData.getFromInfoEx(control.getUnderlyingModel());
-        ITableWrapDataInfo gridData = layout.getTableWrapData2(control);
-        // set cell
-        Rectangle cells = getCells(component, generalLayoutData, columns, rows);
-        gridData.setX(cells.x);
-        gridData.setY(cells.y);
-        gridData.setHorizontalSpan(cells.width);
-        gridData.setVerticalSpan(cells.height);
-        // apply general
-        applyGeneralLayoutData(gridData, generalLayoutData);
-        // update
-        appliedControls.add(control);
-        numColumns = Math.max(numColumns, cells.x + cells.width);
-      }
-    }
-    // set "numColumns"
-    if (numColumns > 0) {
-      layout.getPropertyByTitle("numColumns").setValue(numColumns);
-    }
-    // add fillers
-    layout.fixGrid();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Conversion
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@SuppressWarnings("unchecked")
+	public static <T extends IControlInfo> void convert(ICompositeInfo parent,
+			ITableWrapLayoutInfo<T> layout) throws Exception {
+		// prepare columns and rows and distribute controls in them
+		List<ComponentGroup> columns =
+				GridConvertionHelper.buildGroups(parent.getChildrenControls(), true);
+		List<ComponentGroup> rows =
+				GridConvertionHelper.buildGroups(parent.getChildrenControls(), false);
+		// sort components in columns and rows
+		GridConvertionHelper.sortGroupsByTranspose(columns, rows);
+		GridConvertionHelper.sortGroupsByTranspose(rows, columns);
+		// ensure that columns and rows are sorted by start coordinates
+		GridConvertionHelper.sortGroups(columns);
+		GridConvertionHelper.sortGroups(rows);
+		// calculate begin/end for each column/row
+		GridConvertionHelper.updateBoundsGaps(columns, false);
+		GridConvertionHelper.updateBoundsGaps(rows, false);
+		// reorder controls
+		reorderControls(parent, rows);
+		// set cell for controls
+		int numColumns = columns.size();
+		List<IControlInfo> appliedControls = Lists.newArrayList();
+		for (ComponentGroup column : columns) {
+			for (ComponentInGroup component : column.getComponents()) {
+				T control = (T) component.getComponent();
+				if (appliedControls.contains(control)) {
+					continue;
+				}
+				// layout data
+				GeneralLayoutData generalLayoutData =
+						GeneralLayoutData.getFromInfoEx(control.getUnderlyingModel());
+				ITableWrapDataInfo gridData = layout.getTableWrapData2(control);
+				// set cell
+				Rectangle cells = getCells(component, generalLayoutData, columns, rows);
+				gridData.setX(cells.x);
+				gridData.setY(cells.y);
+				gridData.setHorizontalSpan(cells.width);
+				gridData.setVerticalSpan(cells.height);
+				// apply general
+				applyGeneralLayoutData(gridData, generalLayoutData);
+				// update
+				appliedControls.add(control);
+				numColumns = Math.max(numColumns, cells.x + cells.width);
+			}
+		}
+		// set "numColumns"
+		if (numColumns > 0) {
+			layout.getPropertyByTitle("numColumns").setValue(numColumns);
+		}
+		// add fillers
+		layout.fixGrid();
+	}
 
-  private static Rectangle getCells(ComponentInGroup component,
-      GeneralLayoutData generalLayoutData,
-      List<ComponentGroup> columns,
-      List<ComponentGroup> rows) {
-    int x = -1;
-    int y = -1;
-    int w = 1;
-    int h = 1;
-    // prepare begin/end column/row
-    ComponentGroup beginColumn = GridConvertionHelper.getBeginForComponent(columns, component);
-    ComponentGroup endColumn = GridConvertionHelper.getEndForComponent(columns, component);
-    ComponentGroup beginRow = GridConvertionHelper.getBeginForComponent(rows, component);
-    ComponentGroup endRow = GridConvertionHelper.getEndForComponent(rows, component);
-    // prepare cell
-    x = columns.indexOf(beginColumn);
-    y = rows.indexOf(beginRow);
-    w = 1 + columns.indexOf(endColumn) - x;
-    h = 1 + rows.indexOf(endRow) - y;
-    // use remembered values
-    {
-      if (generalLayoutData.gridX != null) {
-        x = generalLayoutData.gridX;
-        w = 1;
-      }
-      if (generalLayoutData.gridY != null) {
-        y = generalLayoutData.gridY;
-        h = 1;
-      }
-      if (generalLayoutData.spanX != null) {
-        w = generalLayoutData.spanX;
-      }
-      if (generalLayoutData.spanY != null) {
-        h = generalLayoutData.spanY;
-      }
-    }
-    //
-    return new Rectangle(x, y, w, h);
-  }
+	private static Rectangle getCells(ComponentInGroup component,
+			GeneralLayoutData generalLayoutData,
+			List<ComponentGroup> columns,
+			List<ComponentGroup> rows) {
+		int x = -1;
+		int y = -1;
+		int w = 1;
+		int h = 1;
+		// prepare begin/end column/row
+		ComponentGroup beginColumn = GridConvertionHelper.getBeginForComponent(columns, component);
+		ComponentGroup endColumn = GridConvertionHelper.getEndForComponent(columns, component);
+		ComponentGroup beginRow = GridConvertionHelper.getBeginForComponent(rows, component);
+		ComponentGroup endRow = GridConvertionHelper.getEndForComponent(rows, component);
+		// prepare cell
+		x = columns.indexOf(beginColumn);
+		y = rows.indexOf(beginRow);
+		w = 1 + columns.indexOf(endColumn) - x;
+		h = 1 + rows.indexOf(endRow) - y;
+		// use remembered values
+		{
+			if (generalLayoutData.gridX != null) {
+				x = generalLayoutData.gridX;
+				w = 1;
+			}
+			if (generalLayoutData.gridY != null) {
+				y = generalLayoutData.gridY;
+				h = 1;
+			}
+			if (generalLayoutData.spanX != null) {
+				w = generalLayoutData.spanX;
+			}
+			if (generalLayoutData.spanY != null) {
+				h = generalLayoutData.spanY;
+			}
+		}
+		//
+		return new Rectangle(x, y, w, h);
+	}
 
-  private static void applyGeneralLayoutData(ITableWrapDataInfo gridData,
-      GeneralLayoutData generalLayoutData) throws Exception {
-    // set grab
-    if (generalLayoutData.horizontalGrab != null) {
-      gridData.setHorizontalGrab(generalLayoutData.horizontalGrab);
-    }
-    if (generalLayoutData.verticalGrab != null) {
-      gridData.setVerticalGrab(generalLayoutData.verticalGrab);
-    }
-    // set alignments
-    Integer horizontalAlignmentValue =
-        GeneralLayoutData.getRealValue(
-            TableWrapLayoutInfo.m_horizontalAlignmentMap,
-            generalLayoutData.horizontalAlignment);
-    if (horizontalAlignmentValue != null) {
-      gridData.setHorizontalAlignment(horizontalAlignmentValue);
-    }
-    Integer verticalAlignmentValue =
-        GeneralLayoutData.getRealValue(
-            TableWrapLayoutInfo.m_verticalAlignmentMap,
-            generalLayoutData.verticalAlignment);
-    if (verticalAlignmentValue != null) {
-      gridData.setVerticalAlignment(verticalAlignmentValue);
-    }
-  }
+	private static void applyGeneralLayoutData(ITableWrapDataInfo gridData,
+			GeneralLayoutData generalLayoutData) throws Exception {
+		// set grab
+		if (generalLayoutData.horizontalGrab != null) {
+			gridData.setHorizontalGrab(generalLayoutData.horizontalGrab);
+		}
+		if (generalLayoutData.verticalGrab != null) {
+			gridData.setVerticalGrab(generalLayoutData.verticalGrab);
+		}
+		// set alignments
+		Integer horizontalAlignmentValue =
+				GeneralLayoutData.getRealValue(
+						TableWrapLayoutInfo.m_horizontalAlignmentMap,
+						generalLayoutData.horizontalAlignment);
+		if (horizontalAlignmentValue != null) {
+			gridData.setHorizontalAlignment(horizontalAlignmentValue);
+		}
+		Integer verticalAlignmentValue =
+				GeneralLayoutData.getRealValue(
+						TableWrapLayoutInfo.m_verticalAlignmentMap,
+						generalLayoutData.verticalAlignment);
+		if (verticalAlignmentValue != null) {
+			gridData.setVerticalAlignment(verticalAlignmentValue);
+		}
+	}
 
-  private static void reorderControls(ICompositeInfo parent, List<ComponentGroup> rows)
-      throws Exception {
-    // prepare list of controls in reversed order
-    List<IControlInfo> reversedControls = Lists.newArrayList();
-    for (ComponentGroup row : rows) {
-      for (ComponentInGroup componentInGroup : row.getComponents()) {
-        IControlInfo control = (IControlInfo) componentInGroup.getComponent();
-        reversedControls.add(0, control);
-      }
-    }
-    // do reorder
-    IControlInfo nextControl = null;
-    for (IControlInfo control : reversedControls) {
-      if (nextControl != null) {
-        if (!isAlreadyRightOrder(control, nextControl)) {
-          GlobalState.getOrderProcessor().move(control, nextControl);
-        }
-      }
-      nextControl = control;
-    }
-  }
+	private static void reorderControls(ICompositeInfo parent, List<ComponentGroup> rows)
+			throws Exception {
+		// prepare list of controls in reversed order
+		List<IControlInfo> reversedControls = Lists.newArrayList();
+		for (ComponentGroup row : rows) {
+			for (ComponentInGroup componentInGroup : row.getComponents()) {
+				IControlInfo control = (IControlInfo) componentInGroup.getComponent();
+				reversedControls.add(0, control);
+			}
+		}
+		// do reorder
+		IControlInfo nextControl = null;
+		for (IControlInfo control : reversedControls) {
+			if (nextControl != null) {
+				if (!isAlreadyRightOrder(control, nextControl)) {
+					GlobalState.getOrderProcessor().move(control, nextControl);
+				}
+			}
+			nextControl = control;
+		}
+	}
 
-  /**
-   * @return <code>true</code> if "control" is directly before "nextControl", so no need to move
-   *         "control".
-   */
-  private static boolean isAlreadyRightOrder(IControlInfo control, IControlInfo nextControl) {
-    ICompositeInfo composite = (ICompositeInfo) control.getParent();
-    List<? extends IControlInfo> controls = composite.getChildrenControls();
-    return GenericsUtils.getNextOrNull(controls, control) == nextControl;
-  }
+	/**
+	 * @return <code>true</code> if "control" is directly before "nextControl", so no need to move
+	 *         "control".
+	 */
+	private static boolean isAlreadyRightOrder(IControlInfo control, IControlInfo nextControl) {
+		ICompositeInfo composite = (ICompositeInfo) control.getParent();
+		List<? extends IControlInfo> controls = composite.getChildrenControls();
+		return GenericsUtils.getNextOrNull(controls, control) == nextControl;
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/table/TableWrapLayoutDataAssistantPage.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/table/TableWrapLayoutDataAssistantPage.java
index ec7dfc1f5..832094ea8 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/table/TableWrapLayoutDataAssistantPage.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/table/TableWrapLayoutDataAssistantPage.java
@@ -27,87 +27,87 @@
  * @coverage rcp.model.forms
  */
 public final class TableWrapLayoutDataAssistantPage extends AbstractAssistantPage {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public TableWrapLayoutDataAssistantPage(Composite parent, Object selection) {
-    super(parent, selection);
-    GridLayoutFactory.create(this).columns(3);
-    {
-      Group composite = new Group(this, SWT.NONE);
-      composite.setText(ModelMessages.TableWrapLayoutDataAssistantPage_alignmentGroup);
-      GridLayoutFactory.create(composite).columns(2);
-      GridDataFactory.create(composite).fill().grab().spanH(2).spanV(2);
-      // Horizontal alignment & grab
-      {
-        Group horizontalGroup =
-            addChoiceProperty(
-                composite,
-                "horizontalAlignment",
-                ModelMessages.TableWrapLayoutDataAssistantPage_horizontalGroup,
-                new Object[][]{
-                    new Object[]{
-                        ModelMessages.TableWrapLayoutDataAssistantPage_haLeft,
-                        TableWrapData.LEFT},
-                    new Object[]{
-                        ModelMessages.TableWrapLayoutDataAssistantPage_haCenter,
-                        TableWrapData.CENTER},
-                    new Object[]{
-                        ModelMessages.TableWrapLayoutDataAssistantPage_haRight,
-                        TableWrapData.RIGHT},
-                    new Object[]{
-                        ModelMessages.TableWrapLayoutDataAssistantPage_haFill,
-                        TableWrapData.FILL}});
-        //
-        addBooleanProperty(
-            horizontalGroup,
-            "grabHorizontal",
-            ModelMessages.TableWrapLayoutDataAssistantPage_haGrab);
-        GridDataFactory.create(horizontalGroup).alignHC().fillV().grab();
-      }
-      // Vertical alignment & grab
-      {
-        Group verticalGroup =
-            addChoiceProperty(
-                composite,
-                "verticalAlignment",
-                ModelMessages.TableWrapLayoutDataAssistantPage_verticalGroup,
-                new Object[][]{
-                    new Object[]{
-                        ModelMessages.TableWrapLayoutDataAssistantPage_vaTop,
-                        TableWrapData.TOP},
-                    new Object[]{
-                        ModelMessages.TableWrapLayoutDataAssistantPage_vaCenter,
-                        TableWrapData.MIDDLE},
-                    new Object[]{
-                        ModelMessages.TableWrapLayoutDataAssistantPage_vaBottom,
-                        TableWrapData.BOTTOM},
-                    new Object[]{
-                        ModelMessages.TableWrapLayoutDataAssistantPage_vaFill,
-                        TableWrapData.FILL}});
-        //
-        addBooleanProperty(
-            verticalGroup,
-            "grabVertical",
-            ModelMessages.TableWrapLayoutDataAssistantPage_vaGrab);
-        GridDataFactory.create(verticalGroup).alignHC().fillV().grab();
-      }
-    }
-    // Hints
-    {
-      Group group =
-          addIntegerProperties(
-              this,
-              ModelMessages.TableWrapLayoutDataAssistantPage_hintsGroup,
-              new String[][]{
-                  {"indent", ModelMessages.TableWrapLayoutDataAssistantPage_hintIndent},
-                  {"maxWidth", ModelMessages.TableWrapLayoutDataAssistantPage_hintMaxWidth},
-                  {"maxHeight", ModelMessages.TableWrapLayoutDataAssistantPage_hintMaxHeight},
-                  {"heightHint", ModelMessages.TableWrapLayoutDataAssistantPage_hintHeight}},
-              new int[]{0, SWT.DEFAULT, SWT.DEFAULT, SWT.DEFAULT});
-      GridDataFactory.create(group).fillH().fillV();
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public TableWrapLayoutDataAssistantPage(Composite parent, Object selection) {
+		super(parent, selection);
+		GridLayoutFactory.create(this).columns(3);
+		{
+			Group composite = new Group(this, SWT.NONE);
+			composite.setText(ModelMessages.TableWrapLayoutDataAssistantPage_alignmentGroup);
+			GridLayoutFactory.create(composite).columns(2);
+			GridDataFactory.create(composite).fill().grab().spanH(2).spanV(2);
+			// Horizontal alignment & grab
+			{
+				Group horizontalGroup =
+						addChoiceProperty(
+								composite,
+								"horizontalAlignment",
+								ModelMessages.TableWrapLayoutDataAssistantPage_horizontalGroup,
+								new Object[][]{
+									new Object[]{
+											ModelMessages.TableWrapLayoutDataAssistantPage_haLeft,
+											TableWrapData.LEFT},
+									new Object[]{
+											ModelMessages.TableWrapLayoutDataAssistantPage_haCenter,
+											TableWrapData.CENTER},
+									new Object[]{
+											ModelMessages.TableWrapLayoutDataAssistantPage_haRight,
+											TableWrapData.RIGHT},
+									new Object[]{
+											ModelMessages.TableWrapLayoutDataAssistantPage_haFill,
+											TableWrapData.FILL}});
+				//
+				addBooleanProperty(
+						horizontalGroup,
+						"grabHorizontal",
+						ModelMessages.TableWrapLayoutDataAssistantPage_haGrab);
+				GridDataFactory.create(horizontalGroup).alignHC().fillV().grab();
+			}
+			// Vertical alignment & grab
+			{
+				Group verticalGroup =
+						addChoiceProperty(
+								composite,
+								"verticalAlignment",
+								ModelMessages.TableWrapLayoutDataAssistantPage_verticalGroup,
+								new Object[][]{
+									new Object[]{
+											ModelMessages.TableWrapLayoutDataAssistantPage_vaTop,
+											TableWrapData.TOP},
+									new Object[]{
+											ModelMessages.TableWrapLayoutDataAssistantPage_vaCenter,
+											TableWrapData.MIDDLE},
+									new Object[]{
+											ModelMessages.TableWrapLayoutDataAssistantPage_vaBottom,
+											TableWrapData.BOTTOM},
+									new Object[]{
+											ModelMessages.TableWrapLayoutDataAssistantPage_vaFill,
+											TableWrapData.FILL}});
+				//
+				addBooleanProperty(
+						verticalGroup,
+						"grabVertical",
+						ModelMessages.TableWrapLayoutDataAssistantPage_vaGrab);
+				GridDataFactory.create(verticalGroup).alignHC().fillV().grab();
+			}
+		}
+		// Hints
+		{
+			Group group =
+					addIntegerProperties(
+							this,
+							ModelMessages.TableWrapLayoutDataAssistantPage_hintsGroup,
+							new String[][]{
+								{"indent", ModelMessages.TableWrapLayoutDataAssistantPage_hintIndent},
+								{"maxWidth", ModelMessages.TableWrapLayoutDataAssistantPage_hintMaxWidth},
+								{"maxHeight", ModelMessages.TableWrapLayoutDataAssistantPage_hintMaxHeight},
+								{"heightHint", ModelMessages.TableWrapLayoutDataAssistantPage_hintHeight}},
+							new int[]{0, SWT.DEFAULT, SWT.DEFAULT, SWT.DEFAULT});
+			GridDataFactory.create(group).fillH().fillV();
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/table/TableWrapLayoutImages.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/table/TableWrapLayoutImages.java
index 71fee9e76..fe9acc065 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/table/TableWrapLayoutImages.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/table/TableWrapLayoutImages.java
@@ -23,17 +23,17 @@
  * @coverage rcp.model.forms
  */
 public final class TableWrapLayoutImages {
-  /**
-   * @return the {@link Image} for {@link ITableWrapLayoutInfo}.
-   */
-  public static Image getImage(String path) {
-    return Activator.getImage("info/layout/TableWrapLayout/" + path);
-  }
+	/**
+	 * @return the {@link Image} for {@link ITableWrapLayoutInfo}.
+	 */
+	public static Image getImage(String path) {
+		return Activator.getImage("info/layout/TableWrapLayout/" + path);
+	}
 
-  /**
-   * @return the {@link ImageDescriptor} for {@link ITableWrapLayoutInfo}.
-   */
-  public static ImageDescriptor getImageDescriptor(String path) {
-    return Activator.getImageDescriptor("info/layout/TableWrapLayout/" + path);
-  }
+	/**
+	 * @return the {@link ImageDescriptor} for {@link ITableWrapLayoutInfo}.
+	 */
+	public static ImageDescriptor getImageDescriptor(String path) {
+		return Activator.getImageDescriptor("info/layout/TableWrapLayout/" + path);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/table/TableWrapLayoutInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/table/TableWrapLayoutInfo.java
index a187f1840..000d364d9 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/table/TableWrapLayoutInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/table/TableWrapLayoutInfo.java
@@ -78,1162 +78,1162 @@
  * @coverage rcp.model.forms
  */
 public final class TableWrapLayoutInfo extends LayoutInfo
-    implements
-      ITableWrapLayoutInfo<ControlInfo>,
-      IPreferenceConstants {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public TableWrapLayoutInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-    new TableWrapLayoutAssistant(this);
-    new SelectionActionsSupport<ControlInfo>(this);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Events
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void onSet() throws Exception {
-    super.onSet();
-    TableWrapLayoutConverter.convert(getComposite(), this);
-  }
-
-  @Override
-  protected void onDelete() throws Exception {
-    // delete filler's
-    for (ControlInfo control : getComposite().getChildrenControls()) {
-      if (isFiller(control)) {
-        control.delete();
-      }
-    }
-    // delete other
-    super.onDelete();
-  }
-
-  @Override
-  protected void initialize() throws Exception {
-    super.initialize();
-    // add listeners
-    addBroadcastListener(new ObjectInfoChildTree() {
-      @Override
-      public void invoke(ObjectInfo object, boolean[] visible) throws Exception {
-        if (object instanceof ControlInfo) {
-          visible[0] &= !isFiller((ControlInfo) object);
-        }
-      }
-    });
-    addBroadcastListener(new ObjectInfoChildGraphical() {
-      @Override
-      public void invoke(ObjectInfo object, boolean[] visible) throws Exception {
-        if (object instanceof ControlInfo) {
-          visible[0] &= !isFiller((ControlInfo) object);
-        }
-      }
-    });
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void refresh_dispose() throws Exception {
-    m_gridInfo = null;
-    super.refresh_dispose();
-  }
-
-  @Override
-  protected void refresh_afterCreate() throws Exception {
-    replaceLayoutObjects();
-    super.refresh_afterCreate();
-    fixEmptyColumns();
-  }
-
-  /**
-   * Ensures that empty columns (only with fillers) have reasonable width.
-   */
-  private void fixEmptyColumns() throws Exception {
-    ControlInfo[][] grid = getControlsGrid();
-    int columnCount = grid.length != 0 ? grid[0].length : 0;
-    m_columnWidths = TableWrapLayoutSupport.getColumnWidths(getObject());
-    // set empty text for fillers in empty column
-    for (int column = 0; column < columnCount; column++) {
-      int width = m_columnWidths[column];
-      if (width == 0) {
-        for (int row = 0; row < grid.length; row++) {
-          ControlInfo control = grid[row][column];
-          if (control != null && isFiller(control)) {
-            LabelSupport.setText(control.getObject(), "      ");
-          }
-        }
-      }
-    }
-  }
-
-  @Override
-  protected void refresh_fetch() throws Exception {
-    super.refresh_fetch();
-    Object layoutObject = getObject();
-    //
-    m_columnOrigins = TableWrapLayoutSupport.getColumnOrigins(layoutObject);
-    m_rowOrigins = TableWrapLayoutSupport.getRowOrigins(layoutObject);
-    m_columnWidths = TableWrapLayoutSupport.getColumnWidths(layoutObject);
-    m_rowHeights = TableWrapLayoutSupport.getRowHeights(layoutObject);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Replace
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Replaces standard {@link TableWrapLayout} and {@link TableWrapData} with our
-   * {@link TableWrapLayout2} and {@link TableWrapData2}.
-   */
-  private void replaceLayoutObjects() throws Exception {
-    Composite composite = (Composite) getComposite().getObject();
-    Layout layout = composite.getLayout();
-    // update TableWrapLayout
-    if (layout.getClass().getName().equals("org.eclipse.ui.forms.widgets.TableWrapLayout")) {
-      TableWrapLayout2 newLayout = new TableWrapLayout2();
-      copyFields(layout, newLayout);
-      // update Composite and model
-      composite.setLayout(newLayout);
-      setObject(newLayout);
-    }
-    // update TableWrapData's
-    for (Control child : composite.getChildren()) {
-      Object layoutData = child.getLayoutData();
-      if (layoutData != null
-          && layoutData.getClass().getName().equals("org.eclipse.ui.forms.widgets.TableWrapData")) {
-        TableWrapData2 newLayoutData = new TableWrapData2();
-        copyFields(layoutData, newLayoutData);
-        // set new TableWrapData into Control
-        child.setLayoutData(newLayoutData);
-      }
-    }
-    // force layout() to recalculate "design" fields
-    composite.layout();
-    // update TableWrapDataInfo's
-    for (ControlInfo controlInfo : getComposite().getChildrenControls()) {
-      Control control = (Control) controlInfo.getObject();
-      Object layoutData = control.getLayoutData();
-      if (layoutData != null) {
-        TableWrapDataInfo layoutDataInfo = getTableWrapData(controlInfo);
-        layoutDataInfo.setObject(layoutData);
-      }
-    }
-  }
-
-  /**
-   * Copies values of public instance {@link Field}'s from source object to target object. It is
-   * expected that every source field exists in target.
-   */
-  private static void copyFields(Object source, Object target) throws Exception {
-    for (Field field : source.getClass().getFields()) {
-      int modifiers = field.getModifiers();
-      if (!Modifier.isStatic(modifiers) && !Modifier.isFinal(modifiers)) {
-        Object value = field.get(source);
-        ReflectionUtils.setField(target, field.getName(), value);
-      }
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Components/constraints
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private boolean m_replaceWithFillers = true;
-  private TableWrapDataInfo m_removingLayoutData;
-
-  @Override
-  protected Object getDefaultVirtualDataObject() throws Exception {
-    return TableWrapLayoutSupport.createTableWrapData();
-  }
-
-  @Override
-  protected void onControlRemoveBefore(ControlInfo control) throws Exception {
-    // remember TableWrapDataInfo for using later in "remove after"
-    m_removingLayoutData = getTableWrapData(control);
-    // continue
-    super.onControlRemoveBefore(control);
-  }
-
-  @Override
-  protected void onControlRemoveAfter(ControlInfo control) throws Exception {
-    // replace control with fillers
-    if (m_replaceWithFillers && !isFiller(control)) {
-      // replace with fillers
-      {
-        TableWrapDataInfo layoutData = m_removingLayoutData;
-        for (int x = layoutData.x; x < layoutData.x + layoutData.width; x++) {
-          for (int y = layoutData.y; y < layoutData.y + layoutData.height; y++) {
-            addFiller(x, y);
-          }
-        }
-      }
-      // delete empty columns/rows
-      deleteEmptyColumnsRows(m_removingLayoutData);
-      m_removingLayoutData = null;
-    }
-    // continue
-    super.onControlRemoveAfter(control);
-  }
-
-  @Override
-  public ITableWrapDataInfo getTableWrapData2(ControlInfo control) {
-    return getTableWrapData(control);
-  }
-
-  /**
-   * @return {@link TableWrapDataInfo} association with given {@link ControlInfo}.
-   */
-  public TableWrapDataInfo getTableWrapData(final ControlInfo control) {
-    return ExecutionUtils.runObject(new RunnableObjectEx<TableWrapDataInfo>() {
-      @Override
-      public TableWrapDataInfo runObject() throws Exception {
-        TableWrapDataInfo layoutData = (TableWrapDataInfo) getLayoutData(control);
-        layoutData.initialize(TableWrapLayoutInfo.this, control);
-        return layoutData;
-      }
-    });
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Dimensions operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Removes empty (only with fillers) columns/rows.
-   */
-  void deleteEmptyColumnsRows(TableWrapDataInfo removingData) throws Exception {
-    deleteEmptyColumns(removingData);
-    deleteEmptyRows(removingData);
-  }
-
-  /**
-   * Deletes empty (only with fillers) columns.
-   */
-  private void deleteEmptyColumns(TableWrapDataInfo removingData) throws Exception {
-    ControlInfo[][] grid = getControlsGrid();
-    boolean deleteOnlyIfIsRemovingColumn = false;
-    for (int column = grid[0].length - 1; column >= 0; column--) {
-      boolean isRemovingColumn =
-          removingData != null
-              && removingData.x <= column
-              && column < removingData.x + removingData.width;
-      // check if empty
-      boolean isEmpty = true;
-      for (int row = 0; row < grid.length; row++) {
-        ControlInfo control = grid[row][column];
-        isEmpty &= isFiller(control);
-      }
-      // delete if empty
-      if (isEmpty && (!deleteOnlyIfIsRemovingColumn || isRemovingColumn)) {
-        command_deleteColumn(column, false);
-      } else {
-        deleteOnlyIfIsRemovingColumn = true;
-      }
-    }
-  }
-
-  /**
-   * Deletes empty (only with fillers) rows.
-   */
-  private void deleteEmptyRows(TableWrapDataInfo removingData) throws Exception {
-    ControlInfo[][] grid = getControlsGrid();
-    boolean deleteOnlyIfIsRemovingRow = false;
-    for (int row = grid.length - 1; row >= 0; row--) {
-      boolean isRemovingRow =
-          removingData != null
-              && removingData.y <= row
-              && row < removingData.y + removingData.height;
-      // check if empty
-      boolean isEmpty = true;
-      for (int column = 0; column < grid[row].length; column++) {
-        ControlInfo control = grid[row][column];
-        isEmpty &= isFiller(control);
-      }
-      // delete if empty
-      if (isEmpty && (!deleteOnlyIfIsRemovingRow || isRemovingRow)) {
-        command_deleteRow(row, false);
-      } else {
-        deleteOnlyIfIsRemovingRow = true;
-      }
-    }
-  }
-
-  @Override
-  public void command_deleteColumn(int column, boolean deleteEmptyRows) throws Exception {
-    int columnCount = getControlsGridSize().width;
-    // update TableWrapData, delete controls
-    m_replaceWithFillers = false;
-    try {
-      for (ControlInfo control : getComposite().getChildrenControls()) {
-        TableWrapDataInfo layoutData = getTableWrapData(control);
-        //
-        if (layoutData.x == column) {
-          control.delete();
-        } else if (layoutData.x > column) {
-          layoutData.x--;
-        } else if (layoutData.x + layoutData.width > column) {
-          layoutData.setHorizontalSpan(layoutData.width - 1);
-        }
-      }
-    } finally {
-      m_replaceWithFillers = true;
-    }
-    // update count
-    if (columnCount >= 2) {
-      getPropertyByTitle("numColumns").setValue(columnCount - 1);
-    }
-    // it is possible, that we have now empty rows, so delete them too
-    if (deleteEmptyRows) {
-      deleteEmptyRows(null);
-    }
-  }
-
-  @Override
-  public void command_deleteRow(int row, boolean deleteEmptyColumn) throws Exception {
-    // update TableWrapData, delete controls
-    m_replaceWithFillers = false;
-    try {
-      for (ControlInfo control : getComposite().getChildrenControls()) {
-        TableWrapDataInfo layoutData = getTableWrapData(control);
-        //
-        if (layoutData.y == row) {
-          control.delete();
-        } else if (layoutData.y > row) {
-          layoutData.y--;
-        } else if (layoutData.y + layoutData.height > row) {
-          layoutData.setVerticalSpan(layoutData.height - 1);
-        }
-      }
-    } finally {
-      m_replaceWithFillers = true;
-    }
-    // it is possible, that we have now empty columns, so delete them too
-    if (deleteEmptyColumn) {
-      deleteEmptyColumns(null);
-    }
-  }
-
-  @Override
-  public void command_MOVE_COLUMN(int fromIndex, int toIndex) throws Exception {
-    fixGrid();
-    // move column in columns list
-    {
-      getColumns(); // kick to initialize columns
-      TableWrapColumnInfo<ControlInfo> column = m_columns.remove(fromIndex);
-      if (fromIndex < toIndex) {
-        m_columns.add(toIndex - 1, column);
-      } else {
-        m_columns.add(toIndex, column);
-      }
-    }
-    // prepare new column
-    prepareCell(toIndex, true, -1, false);
-    if (toIndex < fromIndex) {
-      fromIndex++;
-    }
-    // move children
-    for (ControlInfo control : getComposite().getChildrenControls()) {
-      if (!isFiller(control)) {
-        TableWrapDataInfo layoutData = getTableWrapData(control);
-        if (layoutData.x == fromIndex) {
-          command_setCells(
-              control,
-              new Rectangle(toIndex, layoutData.y, 1, layoutData.height),
-              true);
-        }
-      }
-    }
-    // delete old column
-    command_deleteColumn(fromIndex, false);
-    deleteEmptyColumnsRows(null);
-  }
-
-  @Override
-  public void command_MOVE_ROW(int fromIndex, int toIndex) throws Exception {
-    fixGrid();
-    // move row in rows list
-    {
-      getRows(); // kick to initialize rows
-      TableWrapRowInfo<ControlInfo> row = m_rows.remove(fromIndex);
-      if (fromIndex < toIndex) {
-        m_rows.add(toIndex - 1, row);
-      } else {
-        m_rows.add(toIndex, row);
-      }
-    }
-    // prepare new row
-    prepareCell(-1, false, toIndex, true);
-    if (toIndex < fromIndex) {
-      fromIndex++;
-    }
-    // move children
-    for (ControlInfo control : getComposite().getChildrenControls()) {
-      if (!isFiller(control)) {
-        TableWrapDataInfo layoutData = getTableWrapData(control);
-        if (layoutData.y == fromIndex) {
-          command_setCells(control, new Rectangle(layoutData.x, toIndex, layoutData.width, 1), true);
-        }
-      }
-    }
-    // delete old row
-    command_deleteRow(fromIndex, false);
-    deleteEmptyColumnsRows(null);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Dimensions access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final List<TableWrapColumnInfo<ControlInfo>> m_columns = Lists.newArrayList();
-  private final List<TableWrapRowInfo<ControlInfo>> m_rows = Lists.newArrayList();
-
-  @Override
-  public List<TableWrapColumnInfo<ControlInfo>> getColumns() {
-    Dimension size = getControlsGridSize();
-    if (m_columns.size() != size.width) {
-      m_columns.clear();
-      for (int i = 0; i < size.width; i++) {
-        m_columns.add(new TableWrapColumnInfo<ControlInfo>(this));
-      }
-    }
-    return m_columns;
-  }
-
-  @Override
-  public List<TableWrapRowInfo<ControlInfo>> getRows() {
-    Dimension size = getControlsGridSize();
-    if (m_rows.size() != size.height) {
-      m_rows.clear();
-      for (int i = 0; i < size.height; i++) {
-        m_rows.add(new TableWrapRowInfo<ControlInfo>(this));
-      }
-    }
-    return m_rows;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void command_CREATE(ControlInfo newControl,
-      int column,
-      boolean insertColumn,
-      int row,
-      boolean insertRow) throws Exception {
-    startEdit();
-    try {
-      command_CREATE(newControl, null);
-      // move to required cell
-      prepareCell(column, insertColumn, row, insertRow);
-      command_setCells(newControl, new Rectangle(column, row, 1, 1), false);
-      // perform automatic alignment
-      doAutomaticAlignment(newControl);
-    } finally {
-      endEdit();
-    }
-  }
-
-  @Override
-  public void command_MOVE(ControlInfo control,
-      int column,
-      boolean insertColumn,
-      int row,
-      boolean insertRow) throws Exception {
-    startEdit();
-    try {
-      prepareCell(column, insertColumn, row, insertRow);
-      command_setCells(control, new Rectangle(column, row, 1, 1), true);
-      deleteEmptyColumnsRows(null);
-    } finally {
-      endEdit();
-    }
-  }
-
-  @Override
-  public void command_ADD(ControlInfo control,
-      int column,
-      boolean insertColumn,
-      int row,
-      boolean insertRow) throws Exception {
-    startEdit();
-    try {
-      command_MOVE(control, null);
-      // move to required cell
-      prepareCell(column, insertColumn, row, insertRow);
-      command_setCells(control, new Rectangle(column, row, 1, 1), false);
-    } finally {
-      endEdit();
-    }
-  }
-
-  /**
-   * Prepares cell with given column/row - inserts columns/rows if necessary.
-   */
-  private void prepareCell(int column, boolean insertColumn, int row, boolean insertRow)
-      throws Exception {
-    // prepare count of columns/rows
-    int columnCount;
-    int rowCount;
-    {
-      Dimension gridSize = getControlsGridSize();
-      columnCount = gridSize.width;
-      rowCount = gridSize.height;
-    }
-    // append
-    {
-      int newColumnCount = Math.max(columnCount, 1 + column);
-      int newRowCount = Math.max(rowCount, 1 + row);
-      // append rows
-      for (int newRow = rowCount; newRow <= row; newRow++) {
-        for (int columnIndex = 0; columnIndex < newColumnCount; columnIndex++) {
-          addFiller(columnIndex, newRow);
-        }
-      }
-      // append columns
-      getPropertyByTitle("numColumns").setValue(newColumnCount);
-      for (int newColumn = columnCount; newColumn <= column; newColumn++) {
-        for (int rowIndex = 0; rowIndex < rowCount; rowIndex++) {
-          addFiller(newColumn, rowIndex);
-        }
-      }
-      // set new count of columns/rows
-      columnCount = newColumnCount;
-      rowCount = newRowCount;
-    }
-    // insert row
-    if (insertRow) {
-      rowCount++;
-      // update TableWrapData for all controls
-      boolean[] columnsToIgnore = new boolean[columnCount];
-      for (ControlInfo control : getComposite().getChildrenControls()) {
-        TableWrapDataInfo layoutData = getTableWrapData(control);
-        //
-        if (layoutData.y >= row) {
-          layoutData.y++;
-        } else if (layoutData.y + layoutData.height > row) {
-          layoutData.setVerticalSpan(layoutData.height + 1);
-          for (int i = layoutData.x; i < layoutData.x + layoutData.width; i++) {
-            columnsToIgnore[i] = true;
-          }
-        }
-      }
-      // add fillers for new row
-      for (int i = 0; i < columnCount; i++) {
-        if (!columnsToIgnore[i]) {
-          addFiller(i, row);
-        }
-      }
-    }
-    // insert column
-    if (insertColumn) {
-      // update TableWrapData for all controls
-      boolean[] rowsToIgnore = new boolean[rowCount];
-      for (ControlInfo control : getComposite().getChildrenControls()) {
-        TableWrapDataInfo layoutData = getTableWrapData(control);
-        //
-        if (layoutData.x >= column) {
-          layoutData.x++;
-        } else if (layoutData.x + layoutData.width > column) {
-          layoutData.setHorizontalSpan(layoutData.width + 1);
-          for (int i = layoutData.y; i < layoutData.y + layoutData.height; i++) {
-            rowsToIgnore[i] = true;
-          }
-        }
-      }
-      // insert fillers for new column
-      getPropertyByTitle("numColumns").setValue(columnCount + 1);
-      for (int i = 0; i < rowCount; i++) {
-        if (!rowsToIgnore[i]) {
-          addFiller(column, i);
-        }
-      }
-    }
-  }
-
-  @Override
-  public void command_setCells(ControlInfo control, Rectangle cells, boolean forMove)
-      throws Exception {
-    TableWrapDataInfo layoutData = getTableWrapData(control);
-    // prepare grid
-    fixGrid();
-    ControlInfo[][] grid = getControlsGrid();
-    Set<Point> cellsToAddFillers = Sets.newHashSet();
-    Set<Point> cellsToRemoveFillers = Sets.newHashSet();
-    // replace control with fillers
-    if (forMove) {
-      for (int x = layoutData.x; x < layoutData.x + layoutData.width; x++) {
-        for (int y = layoutData.y; y < layoutData.y + layoutData.height; y++) {
-          Point cell = new Point(x, y);
-          cellsToAddFillers.add(cell);
-        }
-      }
-    }
-    // remove fillers from occupied cells
-    for (int x = cells.x; x < cells.right(); x++) {
-      for (int y = cells.y; y < cells.bottom(); y++) {
-        Point cell = new Point(x, y);
-        cellsToAddFillers.remove(cell);
-        if (isFiller(grid[y][x])) {
-          cellsToRemoveFillers.add(cell);
-        }
-      }
-    }
-    // do edit operations
-    startEdit();
-    try {
-      // move
-      if (layoutData.x != cells.x || layoutData.y != cells.y) {
-        // update TableWrapData
-        {
-          layoutData.x = cells.x;
-          layoutData.y = cells.y;
-        }
-        // move model
-        {
-          ControlInfo reference = getReferenceControl(cells.y, cells.x, control);
-          command_MOVE(control, reference);
-        }
-      }
-      // set span
-      {
-        layoutData.setHorizontalSpan(cells.width);
-        layoutData.setVerticalSpan(cells.height);
-      }
-      // remove fillers
-      for (Point cell : cellsToRemoveFillers) {
-        ControlInfo filler = grid[cell.y][cell.x];
-        filler.delete();
-      }
-      // add fillers
-      for (Point cell : cellsToAddFillers) {
-        addFiller(cell.x, cell.y);
-      }
-    } finally {
-      endEdit();
-    }
-  }
-
-  @Override
-  public void command_setHeightHint(ControlInfo control, int size) throws Exception {
-    startEdit();
-    try {
-      TableWrapDataInfo layoutData = getTableWrapData(control);
-      layoutData.setHeightHint(size);
-    } finally {
-      endEdit();
-    }
-  }
-
-  /**
-   * @return the {@link Point} with size of controls grid..
-   */
-  private Dimension getControlsGridSize() {
-    int columnCount = 0;
-    int rowCount = 0;
-    for (ControlInfo control : getComposite().getChildrenControls()) {
-      TableWrapDataInfo layoutData = getTableWrapData(control);
-      //
-      columnCount = Math.max(columnCount, layoutData.x + layoutData.width);
-      rowCount = Math.max(rowCount, layoutData.y + layoutData.height);
-    }
-    // OK, we have grid
-    return new Dimension(columnCount, rowCount);
-  }
-
-  /**
-   * @return the double array of {@link ControlInfo} where each element contains {@link ControlInfo}
-   *         that occupies this cell.
-   */
-  private ControlInfo[][] getControlsGrid() throws Exception {
-    Dimension gridSize = getControlsGridSize();
-    // prepare empty grid
-    ControlInfo[][] grid;
-    {
-      grid = new ControlInfo[gridSize.height][];
-      for (int rowIndex = 0; rowIndex < grid.length; rowIndex++) {
-        grid[rowIndex] = new ControlInfo[gridSize.width];
-      }
-    }
-    // fill grid
-    for (ControlInfo control : getComposite().getChildrenControls()) {
-      // prepare cells
-      Rectangle cells;
-      {
-        TableWrapDataInfo layoutData = getTableWrapData(control);
-        cells = new Rectangle(layoutData.x, layoutData.y, layoutData.width, layoutData.height);
-      }
-      // fill grid cells
-      for (int x = cells.x; x < cells.right(); x++) {
-        for (int y = cells.y; y < cells.bottom(); y++) {
-          // ignore newly added controls without real cell
-          if (x != -1 && y != -1) {
-            grid[y][x] = control;
-          }
-        }
-      }
-    }
-    // OK, we have grid
-    return grid;
-  }
-
-  @Override
-  public void fixGrid() throws Exception {
-    ControlInfo[][] grid = getControlsGrid();
-    for (int row = 0; row < grid.length; row++) {
-      for (int column = 0; column < grid[row].length; column++) {
-        if (grid[row][column] == null) {
-          addFiller(column, row);
-        }
-      }
-    }
-  }
-
-  /**
-   * @return the {@link ControlInfo} that should be used as reference of adding into specified cell.
-   *
-   * @param exclude
-   *          the {@link ControlInfo} that should not be checked, for example because we move it now
-   */
-  private ControlInfo getReferenceControl(int row, int column, ControlInfo exclude)
-      throws Exception {
-    for (ControlInfo control : getComposite().getChildrenControls()) {
-      if (control != exclude) {
-        TableWrapDataInfo layoutData = getTableWrapData(control);
-        if (layoutData.y > row || layoutData.y == row && layoutData.x >= column) {
-          return control;
-        }
-      }
-    }
-    // no reference
-    return null;
-  }
-
-  /**
-   * Adds filler {@link ControlInfo} into given cell.
-   */
-  private void addFiller(int column, int row) throws Exception {
-    // prepare creation support
-    ConstructorCreationSupport creationSupport = new ConstructorCreationSupport(null, false);
-    // prepare filler
-    ControlInfo filler =
-        (ControlInfo) JavaInfoUtils.createJavaInfo(
-            getEditor(),
-            LabelSupport.getLabelClass(),
-            creationSupport);
-    // add filler
-    ControlInfo reference = getReferenceControl(row, column, null);
-    JavaInfoUtils.add(
-        filler,
-        new EmptyPureVariableSupport(filler),
-        PureFlatStatementGenerator.INSTANCE,
-        null,
-        getComposite(),
-        reference);
-    // set x/y for new filler
-    TableWrapDataInfo layoutData = getTableWrapData(filler);
-    layoutData.x = column;
-    layoutData.y = row;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Automatic alignment
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Performs automatic alignment, such as grab/fill for Text/Table/etc, right alignment for Label.
-   */
-  private void doAutomaticAlignment(ControlInfo control) throws Exception {
-    final IPreferenceStore preferences = getDescription().getToolkit().getPreferences();
-    GridAlignmentHelper.doAutomaticAlignment(control, new IAlignmentProcessor<ControlInfo>() {
-      @Override
-      public boolean grabEnabled() {
-        return preferences.getBoolean(P_ENABLE_GRAB);
-      }
-
-      @Override
-      public boolean rightEnabled() {
-        return preferences.getBoolean(P_ENABLE_RIGHT_ALIGNMENT);
-      }
-
-      @Override
-      public ControlInfo getComponentAtLeft(ControlInfo component) {
-        TableWrapDataInfo layoutData = getTableWrapData(component);
-        return getControlAt(layoutData.x - 1, layoutData.y);
-      }
-
-      @Override
-      public ControlInfo getComponentAtRight(ControlInfo component) {
-        TableWrapDataInfo layoutData = getTableWrapData(component);
-        return getControlAt(layoutData.x + 1, layoutData.y);
-      }
-
-      @Override
-      public void setGrabFill(ControlInfo component, boolean horizontal) throws Exception {
-        TableWrapDataInfo layoutData = getTableWrapData(component);
-        if (horizontal) {
-          layoutData.setHorizontalGrab(true);
-          layoutData.setHorizontalAlignment(TableWrapData.FILL);
-        } else {
-          layoutData.setVerticalGrab(true);
-          layoutData.setVerticalAlignment(TableWrapData.FILL);
-        }
-      }
-
-      @Override
-      public void setRightAlignment(ControlInfo component) throws Exception {
-        TableWrapDataInfo layoutData = getTableWrapData(component);
-        layoutData.setHorizontalAlignment(TableWrapData.RIGHT);
-      }
-    });
-  }
-
-  /**
-   * @return the {@link ControlInfo} with given top-left cell, may be <code>null</code>.
-   */
-  private ControlInfo getControlAt(int x, int y) {
-    for (ControlInfo control : getComposite().getChildrenControls()) {
-      TableWrapDataInfo layoutData = getTableWrapData(control);
-      if (layoutData.x == x && layoutData.y == y) {
-        return control;
-      }
-    }
-    // no such control
-    return null;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IGridInfo support
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private IGridInfo m_gridInfo;
-  private int[] m_columnOrigins;
-  private int[] m_rowOrigins;
-  private int[] m_columnWidths;
-  private int[] m_rowHeights;
-
-  /**
-   * @return the {@link IGridInfo} that describes this layout.
-   */
-  @Override
-  public IGridInfo getGridInfo() {
-    if (m_gridInfo == null) {
-      ExecutionUtils.runRethrow(new RunnableEx() {
-        @Override
-        public void run() throws Exception {
-          createGridInfo();
-        }
-      });
-    }
-    return m_gridInfo;
-  }
-
-  /**
-   * @return the origins of the columns.
-   */
-  public int[] getColumnOrigins() {
-    return m_columnOrigins;
-  }
-
-  /**
-   * @return the origins of the rows.
-   */
-  public int[] getRowOrigins() {
-    return m_rowOrigins;
-  }
-
-  /**
-   * Initializes {@link #m_gridInfo}.
-   */
-  private void createGridInfo() throws Exception {
-    // prepare intervals
-    final Interval[] columnIntervals = getIntervals(m_columnOrigins, m_columnWidths);
-    final Interval[] rowIntervals = getIntervals(m_rowOrigins, m_rowHeights);
-    // prepare cells
-    final Map<ControlInfo, Rectangle> componentToCells = Maps.newHashMap();
-    final Map<Point, ControlInfo> occupiedCells = Maps.newHashMap();
-    {
-      for (ControlInfo control : getComposite().getChildrenControls()) {
-        // prepare cells
-        Rectangle cells;
-        {
-          TableWrapDataInfo layoutData = getTableWrapData(control);
-          cells = new Rectangle(layoutData.x, layoutData.y, layoutData.width, layoutData.height);
-        }
-        // fill map: ControlInfo -> cells Rectangle
-        componentToCells.put(control, cells);
-        // ignore filler
-        if (isFiller(control)) {
-          continue;
-        }
-        // fill occupied cells map: cell -> ControlInfo
-        for (int x = cells.x; x < cells.right(); x++) {
-          for (int y = cells.y; y < cells.bottom(); y++) {
-            occupiedCells.put(new Point(x, y), control);
-          }
-        }
-      }
-    }
-    // create IGridInfo instance
-    m_gridInfo = new IGridInfo() {
-      ////////////////////////////////////////////////////////////////////////////
-      //
-      // Dimensions
-      //
-      ////////////////////////////////////////////////////////////////////////////
-      @Override
-      public int getColumnCount() {
-        return columnIntervals.length;
-      }
-
-      @Override
-      public int getRowCount() {
-        return rowIntervals.length;
-      }
-
-      ////////////////////////////////////////////////////////////////////////////
-      //
-      // Intervals
-      //
-      ////////////////////////////////////////////////////////////////////////////
-      @Override
-      public Interval[] getColumnIntervals() {
-        return columnIntervals;
-      }
-
-      @Override
-      public Interval[] getRowIntervals() {
-        return rowIntervals;
-      }
-
-      ////////////////////////////////////////////////////////////////////////////
-      //
-      // Cells
-      //
-      ////////////////////////////////////////////////////////////////////////////
-      @Override
-      public Rectangle getComponentCells(IAbstractComponentInfo component) {
-        Assert.instanceOf(ControlInfo.class, component);
-        return componentToCells.get(component);
-      }
-
-      @Override
-      public Rectangle getCellsRectangle(Rectangle cells) {
-        int x = columnIntervals[cells.x].begin();
-        int y = rowIntervals[cells.y].begin();
-        int w = columnIntervals[cells.right() - 1].end() - x;
-        int h = rowIntervals[cells.bottom() - 1].end() - y;
-        return new Rectangle(x, y, w, h);
-      }
-
-      ////////////////////////////////////////////////////////////////////////////
-      //
-      // Feedback
-      //
-      ////////////////////////////////////////////////////////////////////////////
-      @Override
-      public boolean isRTL() {
-        return false;
-      }
-
-      @Override
-      public Insets getInsets() {
-        return new Insets();
-      }
-
-      ////////////////////////////////////////////////////////////////////////////
-      //
-      // Virtual columns
-      //
-      ////////////////////////////////////////////////////////////////////////////
-      @Override
-      public boolean hasVirtualColumns() {
-        return true;
-      }
-
-      @Override
-      public int getVirtualColumnSize() {
-        return 25;
-      }
-
-      @Override
-      public int getVirtualColumnGap() {
-        return 5;
-      }
-
-      ////////////////////////////////////////////////////////////////////////////
-      //
-      // Virtual rows
-      //
-      ////////////////////////////////////////////////////////////////////////////
-      @Override
-      public boolean hasVirtualRows() {
-        return true;
-      }
-
-      @Override
-      public int getVirtualRowSize() {
-        return 25;
-      }
-
-      @Override
-      public int getVirtualRowGap() {
-        return 5;
-      }
-
-      ////////////////////////////////////////////////////////////////////////////
-      //
-      // Checks
-      //
-      ////////////////////////////////////////////////////////////////////////////
-      @Override
-      public IAbstractComponentInfo getOccupied(int column, int row) {
-        return occupiedCells.get(new Point(column, row));
-      }
-    };
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the array of {@link Interval}'s for given arrays of origins/sizes.
-   */
-  private static Interval[] getIntervals(int[] origins, int[] sizes) {
-    Interval[] intervals = new Interval[origins.length];
-    for (int i = 0; i < intervals.length; i++) {
-      intervals[i] = new Interval(origins[i], sizes[i]);
-    }
-    return intervals;
-  }
-
-  @Override
-  public boolean isFiller(ControlInfo control) {
-    return control.getVariableSupport() instanceof EmptyVariableSupport
-        && control.getDescription().getComponentClass().getName().equals(
-            "org.eclipse.swt.widgets.Label");
-  }
-
-  //////////////////////////////////////////////////////////////////////////
-  //
-  // Clipboard
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void clipboardCopy_addControlCommands(ControlInfo control,
-      List<ClipboardCommand> commands) throws Exception {
-    if (!isFiller(control)) {
-      TableWrapDataInfo layoutData = getTableWrapData(control);
-      final int column = layoutData.x;
-      final int row = layoutData.y;
-      //
-      commands.add(new LayoutClipboardCommand<TableWrapLayoutInfo>(control) {
-        private static final long serialVersionUID = 0L;
-
-        @Override
-        protected void add(TableWrapLayoutInfo layout, ControlInfo control) throws Exception {
-          layout.command_CREATE(control, column, false, row, false);
-        }
-      });
-      // command for TableWrapData
-      if (!(layoutData.getCreationSupport() instanceof IImplicitCreationSupport)) {
-        final int index = getComposite().getChildrenControls().indexOf(control);
-        final JavaInfoMemento dataMemento = JavaInfoMemento.createMemento(layoutData);
-        commands.add(new ComponentClipboardCommand<CompositeInfo>() {
-          private static final long serialVersionUID = 0L;
-
-          @Override
-          public void execute(CompositeInfo composite) throws Exception {
-            ControlInfo control = composite.getChildrenControls().get(index);
-            control.removeChild(LayoutInfo.getLayoutData(control));
-            //
-            TableWrapDataInfo layoutData = (TableWrapDataInfo) dataMemento.create(composite);
-            AssociationObject association =
-                AssociationObjects.invocationChild("%parent%.setLayoutData(%child%)", false);
-            JavaInfoUtils.add(
-                layoutData,
-                new LocalUniqueVariableSupport(layoutData),
-                VirtualLayoutDataStatementGenerator.INSTANCE,
-                association,
-                control,
-                null);
-            dataMemento.apply();
-          }
-        });
-      }
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Manage general layout data.
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  static final BiMap<GeneralLayoutData.HorizontalAlignment, Integer> m_horizontalAlignmentMap =
-      ImmutableBiMap.of(
-          GeneralLayoutData.HorizontalAlignment.LEFT,
-          TableWrapData.LEFT,
-          GeneralLayoutData.HorizontalAlignment.CENTER,
-          TableWrapData.CENTER,
-          GeneralLayoutData.HorizontalAlignment.RIGHT,
-          TableWrapData.RIGHT,
-          GeneralLayoutData.HorizontalAlignment.FILL,
-          TableWrapData.FILL);
-  static final BiMap<GeneralLayoutData.VerticalAlignment, Integer> m_verticalAlignmentMap =
-      ImmutableBiMap.of(
-          GeneralLayoutData.VerticalAlignment.TOP,
-          TableWrapData.TOP,
-          GeneralLayoutData.VerticalAlignment.CENTER,
-          TableWrapData.MIDDLE,
-          GeneralLayoutData.VerticalAlignment.BOTTOM,
-          TableWrapData.BOTTOM,
-          GeneralLayoutData.VerticalAlignment.FILL,
-          TableWrapData.FILL);
-
-  @Override
-  protected void storeLayoutData(ControlInfo control, LayoutDataInfo layoutData) throws Exception {
-    TableWrapDataInfo tableLayoutData = (TableWrapDataInfo) layoutData;
-    GeneralLayoutData generalLayoutData = new GeneralLayoutData();
-    generalLayoutData.gridX = tableLayoutData.x;
-    generalLayoutData.gridY = tableLayoutData.y;
-    generalLayoutData.spanX =
-        (Integer) GeneralLayoutData.getLayoutPropertyValue(tableLayoutData, "colspan");
-    generalLayoutData.spanY =
-        (Integer) GeneralLayoutData.getLayoutPropertyValue(tableLayoutData, "rowspan");
-    generalLayoutData.horizontalGrab =
-        (Boolean) GeneralLayoutData.getLayoutPropertyValue(tableLayoutData, "grabHorizontal");
-    generalLayoutData.verticalGrab =
-        (Boolean) GeneralLayoutData.getLayoutPropertyValue(tableLayoutData, "grabVertical");;
-    // alignments
-    generalLayoutData.horizontalAlignment =
-        GeneralLayoutData.getGeneralValue(
-            m_horizontalAlignmentMap,
-            (Integer) GeneralLayoutData.getLayoutPropertyValue(tableLayoutData, "align"));
-    generalLayoutData.verticalAlignment =
-        GeneralLayoutData.getGeneralValue(
-            m_verticalAlignmentMap,
-            (Integer) GeneralLayoutData.getLayoutPropertyValue(tableLayoutData, "valign"));
-    generalLayoutData.putToInfo(control);
-  }
+implements
+ITableWrapLayoutInfo<ControlInfo>,
+IPreferenceConstants {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public TableWrapLayoutInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+		new TableWrapLayoutAssistant(this);
+		new SelectionActionsSupport<ControlInfo>(this);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Events
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void onSet() throws Exception {
+		super.onSet();
+		TableWrapLayoutConverter.convert(getComposite(), this);
+	}
+
+	@Override
+	protected void onDelete() throws Exception {
+		// delete filler's
+		for (ControlInfo control : getComposite().getChildrenControls()) {
+			if (isFiller(control)) {
+				control.delete();
+			}
+		}
+		// delete other
+		super.onDelete();
+	}
+
+	@Override
+	protected void initialize() throws Exception {
+		super.initialize();
+		// add listeners
+		addBroadcastListener(new ObjectInfoChildTree() {
+			@Override
+			public void invoke(ObjectInfo object, boolean[] visible) throws Exception {
+				if (object instanceof ControlInfo) {
+					visible[0] &= !isFiller((ControlInfo) object);
+				}
+			}
+		});
+		addBroadcastListener(new ObjectInfoChildGraphical() {
+			@Override
+			public void invoke(ObjectInfo object, boolean[] visible) throws Exception {
+				if (object instanceof ControlInfo) {
+					visible[0] &= !isFiller((ControlInfo) object);
+				}
+			}
+		});
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void refresh_dispose() throws Exception {
+		m_gridInfo = null;
+		super.refresh_dispose();
+	}
+
+	@Override
+	protected void refresh_afterCreate() throws Exception {
+		replaceLayoutObjects();
+		super.refresh_afterCreate();
+		fixEmptyColumns();
+	}
+
+	/**
+	 * Ensures that empty columns (only with fillers) have reasonable width.
+	 */
+	private void fixEmptyColumns() throws Exception {
+		ControlInfo[][] grid = getControlsGrid();
+		int columnCount = grid.length != 0 ? grid[0].length : 0;
+		m_columnWidths = TableWrapLayoutSupport.getColumnWidths(getObject());
+		// set empty text for fillers in empty column
+		for (int column = 0; column < columnCount; column++) {
+			int width = m_columnWidths[column];
+			if (width == 0) {
+				for (int row = 0; row < grid.length; row++) {
+					ControlInfo control = grid[row][column];
+					if (control != null && isFiller(control)) {
+						LabelSupport.setText(control.getObject(), "      ");
+					}
+				}
+			}
+		}
+	}
+
+	@Override
+	protected void refresh_fetch() throws Exception {
+		super.refresh_fetch();
+		Object layoutObject = getObject();
+		//
+		m_columnOrigins = TableWrapLayoutSupport.getColumnOrigins(layoutObject);
+		m_rowOrigins = TableWrapLayoutSupport.getRowOrigins(layoutObject);
+		m_columnWidths = TableWrapLayoutSupport.getColumnWidths(layoutObject);
+		m_rowHeights = TableWrapLayoutSupport.getRowHeights(layoutObject);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Replace
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Replaces standard {@link TableWrapLayout} and {@link TableWrapData} with our
+	 * {@link TableWrapLayout2} and {@link TableWrapData2}.
+	 */
+	private void replaceLayoutObjects() throws Exception {
+		Composite composite = (Composite) getComposite().getObject();
+		Layout layout = composite.getLayout();
+		// update TableWrapLayout
+		if (layout.getClass().getName().equals("org.eclipse.ui.forms.widgets.TableWrapLayout")) {
+			TableWrapLayout2 newLayout = new TableWrapLayout2();
+			copyFields(layout, newLayout);
+			// update Composite and model
+			composite.setLayout(newLayout);
+			setObject(newLayout);
+		}
+		// update TableWrapData's
+		for (Control child : composite.getChildren()) {
+			Object layoutData = child.getLayoutData();
+			if (layoutData != null
+					&& layoutData.getClass().getName().equals("org.eclipse.ui.forms.widgets.TableWrapData")) {
+				TableWrapData2 newLayoutData = new TableWrapData2();
+				copyFields(layoutData, newLayoutData);
+				// set new TableWrapData into Control
+				child.setLayoutData(newLayoutData);
+			}
+		}
+		// force layout() to recalculate "design" fields
+		composite.layout();
+		// update TableWrapDataInfo's
+		for (ControlInfo controlInfo : getComposite().getChildrenControls()) {
+			Control control = (Control) controlInfo.getObject();
+			Object layoutData = control.getLayoutData();
+			if (layoutData != null) {
+				TableWrapDataInfo layoutDataInfo = getTableWrapData(controlInfo);
+				layoutDataInfo.setObject(layoutData);
+			}
+		}
+	}
+
+	/**
+	 * Copies values of public instance {@link Field}'s from source object to target object. It is
+	 * expected that every source field exists in target.
+	 */
+	private static void copyFields(Object source, Object target) throws Exception {
+		for (Field field : source.getClass().getFields()) {
+			int modifiers = field.getModifiers();
+			if (!Modifier.isStatic(modifiers) && !Modifier.isFinal(modifiers)) {
+				Object value = field.get(source);
+				ReflectionUtils.setField(target, field.getName(), value);
+			}
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Components/constraints
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private boolean m_replaceWithFillers = true;
+	private TableWrapDataInfo m_removingLayoutData;
+
+	@Override
+	protected Object getDefaultVirtualDataObject() throws Exception {
+		return TableWrapLayoutSupport.createTableWrapData();
+	}
+
+	@Override
+	protected void onControlRemoveBefore(ControlInfo control) throws Exception {
+		// remember TableWrapDataInfo for using later in "remove after"
+		m_removingLayoutData = getTableWrapData(control);
+		// continue
+		super.onControlRemoveBefore(control);
+	}
+
+	@Override
+	protected void onControlRemoveAfter(ControlInfo control) throws Exception {
+		// replace control with fillers
+		if (m_replaceWithFillers && !isFiller(control)) {
+			// replace with fillers
+			{
+				TableWrapDataInfo layoutData = m_removingLayoutData;
+				for (int x = layoutData.x; x < layoutData.x + layoutData.width; x++) {
+					for (int y = layoutData.y; y < layoutData.y + layoutData.height; y++) {
+						addFiller(x, y);
+					}
+				}
+			}
+			// delete empty columns/rows
+			deleteEmptyColumnsRows(m_removingLayoutData);
+			m_removingLayoutData = null;
+		}
+		// continue
+		super.onControlRemoveAfter(control);
+	}
+
+	@Override
+	public ITableWrapDataInfo getTableWrapData2(ControlInfo control) {
+		return getTableWrapData(control);
+	}
+
+	/**
+	 * @return {@link TableWrapDataInfo} association with given {@link ControlInfo}.
+	 */
+	public TableWrapDataInfo getTableWrapData(final ControlInfo control) {
+		return ExecutionUtils.runObject(new RunnableObjectEx<TableWrapDataInfo>() {
+			@Override
+			public TableWrapDataInfo runObject() throws Exception {
+				TableWrapDataInfo layoutData = (TableWrapDataInfo) getLayoutData(control);
+				layoutData.initialize(TableWrapLayoutInfo.this, control);
+				return layoutData;
+			}
+		});
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Dimensions operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Removes empty (only with fillers) columns/rows.
+	 */
+	void deleteEmptyColumnsRows(TableWrapDataInfo removingData) throws Exception {
+		deleteEmptyColumns(removingData);
+		deleteEmptyRows(removingData);
+	}
+
+	/**
+	 * Deletes empty (only with fillers) columns.
+	 */
+	private void deleteEmptyColumns(TableWrapDataInfo removingData) throws Exception {
+		ControlInfo[][] grid = getControlsGrid();
+		boolean deleteOnlyIfIsRemovingColumn = false;
+		for (int column = grid[0].length - 1; column >= 0; column--) {
+			boolean isRemovingColumn =
+					removingData != null
+					&& removingData.x <= column
+					&& column < removingData.x + removingData.width;
+			// check if empty
+			boolean isEmpty = true;
+			for (int row = 0; row < grid.length; row++) {
+				ControlInfo control = grid[row][column];
+				isEmpty &= isFiller(control);
+			}
+			// delete if empty
+			if (isEmpty && (!deleteOnlyIfIsRemovingColumn || isRemovingColumn)) {
+				command_deleteColumn(column, false);
+			} else {
+				deleteOnlyIfIsRemovingColumn = true;
+			}
+		}
+	}
+
+	/**
+	 * Deletes empty (only with fillers) rows.
+	 */
+	private void deleteEmptyRows(TableWrapDataInfo removingData) throws Exception {
+		ControlInfo[][] grid = getControlsGrid();
+		boolean deleteOnlyIfIsRemovingRow = false;
+		for (int row = grid.length - 1; row >= 0; row--) {
+			boolean isRemovingRow =
+					removingData != null
+					&& removingData.y <= row
+					&& row < removingData.y + removingData.height;
+			// check if empty
+			boolean isEmpty = true;
+			for (int column = 0; column < grid[row].length; column++) {
+				ControlInfo control = grid[row][column];
+				isEmpty &= isFiller(control);
+			}
+			// delete if empty
+			if (isEmpty && (!deleteOnlyIfIsRemovingRow || isRemovingRow)) {
+				command_deleteRow(row, false);
+			} else {
+				deleteOnlyIfIsRemovingRow = true;
+			}
+		}
+	}
+
+	@Override
+	public void command_deleteColumn(int column, boolean deleteEmptyRows) throws Exception {
+		int columnCount = getControlsGridSize().width;
+		// update TableWrapData, delete controls
+		m_replaceWithFillers = false;
+		try {
+			for (ControlInfo control : getComposite().getChildrenControls()) {
+				TableWrapDataInfo layoutData = getTableWrapData(control);
+				//
+				if (layoutData.x == column) {
+					control.delete();
+				} else if (layoutData.x > column) {
+					layoutData.x--;
+				} else if (layoutData.x + layoutData.width > column) {
+					layoutData.setHorizontalSpan(layoutData.width - 1);
+				}
+			}
+		} finally {
+			m_replaceWithFillers = true;
+		}
+		// update count
+		if (columnCount >= 2) {
+			getPropertyByTitle("numColumns").setValue(columnCount - 1);
+		}
+		// it is possible, that we have now empty rows, so delete them too
+		if (deleteEmptyRows) {
+			deleteEmptyRows(null);
+		}
+	}
+
+	@Override
+	public void command_deleteRow(int row, boolean deleteEmptyColumn) throws Exception {
+		// update TableWrapData, delete controls
+		m_replaceWithFillers = false;
+		try {
+			for (ControlInfo control : getComposite().getChildrenControls()) {
+				TableWrapDataInfo layoutData = getTableWrapData(control);
+				//
+				if (layoutData.y == row) {
+					control.delete();
+				} else if (layoutData.y > row) {
+					layoutData.y--;
+				} else if (layoutData.y + layoutData.height > row) {
+					layoutData.setVerticalSpan(layoutData.height - 1);
+				}
+			}
+		} finally {
+			m_replaceWithFillers = true;
+		}
+		// it is possible, that we have now empty columns, so delete them too
+		if (deleteEmptyColumn) {
+			deleteEmptyColumns(null);
+		}
+	}
+
+	@Override
+	public void command_MOVE_COLUMN(int fromIndex, int toIndex) throws Exception {
+		fixGrid();
+		// move column in columns list
+		{
+			getColumns(); // kick to initialize columns
+			TableWrapColumnInfo<ControlInfo> column = m_columns.remove(fromIndex);
+			if (fromIndex < toIndex) {
+				m_columns.add(toIndex - 1, column);
+			} else {
+				m_columns.add(toIndex, column);
+			}
+		}
+		// prepare new column
+		prepareCell(toIndex, true, -1, false);
+		if (toIndex < fromIndex) {
+			fromIndex++;
+		}
+		// move children
+		for (ControlInfo control : getComposite().getChildrenControls()) {
+			if (!isFiller(control)) {
+				TableWrapDataInfo layoutData = getTableWrapData(control);
+				if (layoutData.x == fromIndex) {
+					command_setCells(
+							control,
+							new Rectangle(toIndex, layoutData.y, 1, layoutData.height),
+							true);
+				}
+			}
+		}
+		// delete old column
+		command_deleteColumn(fromIndex, false);
+		deleteEmptyColumnsRows(null);
+	}
+
+	@Override
+	public void command_MOVE_ROW(int fromIndex, int toIndex) throws Exception {
+		fixGrid();
+		// move row in rows list
+		{
+			getRows(); // kick to initialize rows
+			TableWrapRowInfo<ControlInfo> row = m_rows.remove(fromIndex);
+			if (fromIndex < toIndex) {
+				m_rows.add(toIndex - 1, row);
+			} else {
+				m_rows.add(toIndex, row);
+			}
+		}
+		// prepare new row
+		prepareCell(-1, false, toIndex, true);
+		if (toIndex < fromIndex) {
+			fromIndex++;
+		}
+		// move children
+		for (ControlInfo control : getComposite().getChildrenControls()) {
+			if (!isFiller(control)) {
+				TableWrapDataInfo layoutData = getTableWrapData(control);
+				if (layoutData.y == fromIndex) {
+					command_setCells(control, new Rectangle(layoutData.x, toIndex, layoutData.width, 1), true);
+				}
+			}
+		}
+		// delete old row
+		command_deleteRow(fromIndex, false);
+		deleteEmptyColumnsRows(null);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Dimensions access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final List<TableWrapColumnInfo<ControlInfo>> m_columns = Lists.newArrayList();
+	private final List<TableWrapRowInfo<ControlInfo>> m_rows = Lists.newArrayList();
+
+	@Override
+	public List<TableWrapColumnInfo<ControlInfo>> getColumns() {
+		Dimension size = getControlsGridSize();
+		if (m_columns.size() != size.width) {
+			m_columns.clear();
+			for (int i = 0; i < size.width; i++) {
+				m_columns.add(new TableWrapColumnInfo<ControlInfo>(this));
+			}
+		}
+		return m_columns;
+	}
+
+	@Override
+	public List<TableWrapRowInfo<ControlInfo>> getRows() {
+		Dimension size = getControlsGridSize();
+		if (m_rows.size() != size.height) {
+			m_rows.clear();
+			for (int i = 0; i < size.height; i++) {
+				m_rows.add(new TableWrapRowInfo<ControlInfo>(this));
+			}
+		}
+		return m_rows;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void command_CREATE(ControlInfo newControl,
+			int column,
+			boolean insertColumn,
+			int row,
+			boolean insertRow) throws Exception {
+		startEdit();
+		try {
+			command_CREATE(newControl, null);
+			// move to required cell
+			prepareCell(column, insertColumn, row, insertRow);
+			command_setCells(newControl, new Rectangle(column, row, 1, 1), false);
+			// perform automatic alignment
+			doAutomaticAlignment(newControl);
+		} finally {
+			endEdit();
+		}
+	}
+
+	@Override
+	public void command_MOVE(ControlInfo control,
+			int column,
+			boolean insertColumn,
+			int row,
+			boolean insertRow) throws Exception {
+		startEdit();
+		try {
+			prepareCell(column, insertColumn, row, insertRow);
+			command_setCells(control, new Rectangle(column, row, 1, 1), true);
+			deleteEmptyColumnsRows(null);
+		} finally {
+			endEdit();
+		}
+	}
+
+	@Override
+	public void command_ADD(ControlInfo control,
+			int column,
+			boolean insertColumn,
+			int row,
+			boolean insertRow) throws Exception {
+		startEdit();
+		try {
+			command_MOVE(control, null);
+			// move to required cell
+			prepareCell(column, insertColumn, row, insertRow);
+			command_setCells(control, new Rectangle(column, row, 1, 1), false);
+		} finally {
+			endEdit();
+		}
+	}
+
+	/**
+	 * Prepares cell with given column/row - inserts columns/rows if necessary.
+	 */
+	private void prepareCell(int column, boolean insertColumn, int row, boolean insertRow)
+			throws Exception {
+		// prepare count of columns/rows
+		int columnCount;
+		int rowCount;
+		{
+			Dimension gridSize = getControlsGridSize();
+			columnCount = gridSize.width;
+			rowCount = gridSize.height;
+		}
+		// append
+		{
+			int newColumnCount = Math.max(columnCount, 1 + column);
+			int newRowCount = Math.max(rowCount, 1 + row);
+			// append rows
+			for (int newRow = rowCount; newRow <= row; newRow++) {
+				for (int columnIndex = 0; columnIndex < newColumnCount; columnIndex++) {
+					addFiller(columnIndex, newRow);
+				}
+			}
+			// append columns
+			getPropertyByTitle("numColumns").setValue(newColumnCount);
+			for (int newColumn = columnCount; newColumn <= column; newColumn++) {
+				for (int rowIndex = 0; rowIndex < rowCount; rowIndex++) {
+					addFiller(newColumn, rowIndex);
+				}
+			}
+			// set new count of columns/rows
+			columnCount = newColumnCount;
+			rowCount = newRowCount;
+		}
+		// insert row
+		if (insertRow) {
+			rowCount++;
+			// update TableWrapData for all controls
+			boolean[] columnsToIgnore = new boolean[columnCount];
+			for (ControlInfo control : getComposite().getChildrenControls()) {
+				TableWrapDataInfo layoutData = getTableWrapData(control);
+				//
+				if (layoutData.y >= row) {
+					layoutData.y++;
+				} else if (layoutData.y + layoutData.height > row) {
+					layoutData.setVerticalSpan(layoutData.height + 1);
+					for (int i = layoutData.x; i < layoutData.x + layoutData.width; i++) {
+						columnsToIgnore[i] = true;
+					}
+				}
+			}
+			// add fillers for new row
+			for (int i = 0; i < columnCount; i++) {
+				if (!columnsToIgnore[i]) {
+					addFiller(i, row);
+				}
+			}
+		}
+		// insert column
+		if (insertColumn) {
+			// update TableWrapData for all controls
+			boolean[] rowsToIgnore = new boolean[rowCount];
+			for (ControlInfo control : getComposite().getChildrenControls()) {
+				TableWrapDataInfo layoutData = getTableWrapData(control);
+				//
+				if (layoutData.x >= column) {
+					layoutData.x++;
+				} else if (layoutData.x + layoutData.width > column) {
+					layoutData.setHorizontalSpan(layoutData.width + 1);
+					for (int i = layoutData.y; i < layoutData.y + layoutData.height; i++) {
+						rowsToIgnore[i] = true;
+					}
+				}
+			}
+			// insert fillers for new column
+			getPropertyByTitle("numColumns").setValue(columnCount + 1);
+			for (int i = 0; i < rowCount; i++) {
+				if (!rowsToIgnore[i]) {
+					addFiller(column, i);
+				}
+			}
+		}
+	}
+
+	@Override
+	public void command_setCells(ControlInfo control, Rectangle cells, boolean forMove)
+			throws Exception {
+		TableWrapDataInfo layoutData = getTableWrapData(control);
+		// prepare grid
+		fixGrid();
+		ControlInfo[][] grid = getControlsGrid();
+		Set<Point> cellsToAddFillers = Sets.newHashSet();
+		Set<Point> cellsToRemoveFillers = Sets.newHashSet();
+		// replace control with fillers
+		if (forMove) {
+			for (int x = layoutData.x; x < layoutData.x + layoutData.width; x++) {
+				for (int y = layoutData.y; y < layoutData.y + layoutData.height; y++) {
+					Point cell = new Point(x, y);
+					cellsToAddFillers.add(cell);
+				}
+			}
+		}
+		// remove fillers from occupied cells
+		for (int x = cells.x; x < cells.right(); x++) {
+			for (int y = cells.y; y < cells.bottom(); y++) {
+				Point cell = new Point(x, y);
+				cellsToAddFillers.remove(cell);
+				if (isFiller(grid[y][x])) {
+					cellsToRemoveFillers.add(cell);
+				}
+			}
+		}
+		// do edit operations
+		startEdit();
+		try {
+			// move
+			if (layoutData.x != cells.x || layoutData.y != cells.y) {
+				// update TableWrapData
+				{
+					layoutData.x = cells.x;
+					layoutData.y = cells.y;
+				}
+				// move model
+				{
+					ControlInfo reference = getReferenceControl(cells.y, cells.x, control);
+					command_MOVE(control, reference);
+				}
+			}
+			// set span
+			{
+				layoutData.setHorizontalSpan(cells.width);
+				layoutData.setVerticalSpan(cells.height);
+			}
+			// remove fillers
+			for (Point cell : cellsToRemoveFillers) {
+				ControlInfo filler = grid[cell.y][cell.x];
+				filler.delete();
+			}
+			// add fillers
+			for (Point cell : cellsToAddFillers) {
+				addFiller(cell.x, cell.y);
+			}
+		} finally {
+			endEdit();
+		}
+	}
+
+	@Override
+	public void command_setHeightHint(ControlInfo control, int size) throws Exception {
+		startEdit();
+		try {
+			TableWrapDataInfo layoutData = getTableWrapData(control);
+			layoutData.setHeightHint(size);
+		} finally {
+			endEdit();
+		}
+	}
+
+	/**
+	 * @return the {@link Point} with size of controls grid..
+	 */
+	private Dimension getControlsGridSize() {
+		int columnCount = 0;
+		int rowCount = 0;
+		for (ControlInfo control : getComposite().getChildrenControls()) {
+			TableWrapDataInfo layoutData = getTableWrapData(control);
+			//
+			columnCount = Math.max(columnCount, layoutData.x + layoutData.width);
+			rowCount = Math.max(rowCount, layoutData.y + layoutData.height);
+		}
+		// OK, we have grid
+		return new Dimension(columnCount, rowCount);
+	}
+
+	/**
+	 * @return the double array of {@link ControlInfo} where each element contains {@link ControlInfo}
+	 *         that occupies this cell.
+	 */
+	private ControlInfo[][] getControlsGrid() throws Exception {
+		Dimension gridSize = getControlsGridSize();
+		// prepare empty grid
+		ControlInfo[][] grid;
+		{
+			grid = new ControlInfo[gridSize.height][];
+			for (int rowIndex = 0; rowIndex < grid.length; rowIndex++) {
+				grid[rowIndex] = new ControlInfo[gridSize.width];
+			}
+		}
+		// fill grid
+		for (ControlInfo control : getComposite().getChildrenControls()) {
+			// prepare cells
+			Rectangle cells;
+			{
+				TableWrapDataInfo layoutData = getTableWrapData(control);
+				cells = new Rectangle(layoutData.x, layoutData.y, layoutData.width, layoutData.height);
+			}
+			// fill grid cells
+			for (int x = cells.x; x < cells.right(); x++) {
+				for (int y = cells.y; y < cells.bottom(); y++) {
+					// ignore newly added controls without real cell
+					if (x != -1 && y != -1) {
+						grid[y][x] = control;
+					}
+				}
+			}
+		}
+		// OK, we have grid
+		return grid;
+	}
+
+	@Override
+	public void fixGrid() throws Exception {
+		ControlInfo[][] grid = getControlsGrid();
+		for (int row = 0; row < grid.length; row++) {
+			for (int column = 0; column < grid[row].length; column++) {
+				if (grid[row][column] == null) {
+					addFiller(column, row);
+				}
+			}
+		}
+	}
+
+	/**
+	 * @return the {@link ControlInfo} that should be used as reference of adding into specified cell.
+	 *
+	 * @param exclude
+	 *          the {@link ControlInfo} that should not be checked, for example because we move it now
+	 */
+	private ControlInfo getReferenceControl(int row, int column, ControlInfo exclude)
+			throws Exception {
+		for (ControlInfo control : getComposite().getChildrenControls()) {
+			if (control != exclude) {
+				TableWrapDataInfo layoutData = getTableWrapData(control);
+				if (layoutData.y > row || layoutData.y == row && layoutData.x >= column) {
+					return control;
+				}
+			}
+		}
+		// no reference
+		return null;
+	}
+
+	/**
+	 * Adds filler {@link ControlInfo} into given cell.
+	 */
+	private void addFiller(int column, int row) throws Exception {
+		// prepare creation support
+		ConstructorCreationSupport creationSupport = new ConstructorCreationSupport(null, false);
+		// prepare filler
+		ControlInfo filler =
+				(ControlInfo) JavaInfoUtils.createJavaInfo(
+						getEditor(),
+						LabelSupport.getLabelClass(),
+						creationSupport);
+		// add filler
+		ControlInfo reference = getReferenceControl(row, column, null);
+		JavaInfoUtils.add(
+				filler,
+				new EmptyPureVariableSupport(filler),
+				PureFlatStatementGenerator.INSTANCE,
+				null,
+				getComposite(),
+				reference);
+		// set x/y for new filler
+		TableWrapDataInfo layoutData = getTableWrapData(filler);
+		layoutData.x = column;
+		layoutData.y = row;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Automatic alignment
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Performs automatic alignment, such as grab/fill for Text/Table/etc, right alignment for Label.
+	 */
+	private void doAutomaticAlignment(ControlInfo control) throws Exception {
+		final IPreferenceStore preferences = getDescription().getToolkit().getPreferences();
+		GridAlignmentHelper.doAutomaticAlignment(control, new IAlignmentProcessor<ControlInfo>() {
+			@Override
+			public boolean grabEnabled() {
+				return preferences.getBoolean(P_ENABLE_GRAB);
+			}
+
+			@Override
+			public boolean rightEnabled() {
+				return preferences.getBoolean(P_ENABLE_RIGHT_ALIGNMENT);
+			}
+
+			@Override
+			public ControlInfo getComponentAtLeft(ControlInfo component) {
+				TableWrapDataInfo layoutData = getTableWrapData(component);
+				return getControlAt(layoutData.x - 1, layoutData.y);
+			}
+
+			@Override
+			public ControlInfo getComponentAtRight(ControlInfo component) {
+				TableWrapDataInfo layoutData = getTableWrapData(component);
+				return getControlAt(layoutData.x + 1, layoutData.y);
+			}
+
+			@Override
+			public void setGrabFill(ControlInfo component, boolean horizontal) throws Exception {
+				TableWrapDataInfo layoutData = getTableWrapData(component);
+				if (horizontal) {
+					layoutData.setHorizontalGrab(true);
+					layoutData.setHorizontalAlignment(TableWrapData.FILL);
+				} else {
+					layoutData.setVerticalGrab(true);
+					layoutData.setVerticalAlignment(TableWrapData.FILL);
+				}
+			}
+
+			@Override
+			public void setRightAlignment(ControlInfo component) throws Exception {
+				TableWrapDataInfo layoutData = getTableWrapData(component);
+				layoutData.setHorizontalAlignment(TableWrapData.RIGHT);
+			}
+		});
+	}
+
+	/**
+	 * @return the {@link ControlInfo} with given top-left cell, may be <code>null</code>.
+	 */
+	private ControlInfo getControlAt(int x, int y) {
+		for (ControlInfo control : getComposite().getChildrenControls()) {
+			TableWrapDataInfo layoutData = getTableWrapData(control);
+			if (layoutData.x == x && layoutData.y == y) {
+				return control;
+			}
+		}
+		// no such control
+		return null;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IGridInfo support
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private IGridInfo m_gridInfo;
+	private int[] m_columnOrigins;
+	private int[] m_rowOrigins;
+	private int[] m_columnWidths;
+	private int[] m_rowHeights;
+
+	/**
+	 * @return the {@link IGridInfo} that describes this layout.
+	 */
+	@Override
+	public IGridInfo getGridInfo() {
+		if (m_gridInfo == null) {
+			ExecutionUtils.runRethrow(new RunnableEx() {
+				@Override
+				public void run() throws Exception {
+					createGridInfo();
+				}
+			});
+		}
+		return m_gridInfo;
+	}
+
+	/**
+	 * @return the origins of the columns.
+	 */
+	public int[] getColumnOrigins() {
+		return m_columnOrigins;
+	}
+
+	/**
+	 * @return the origins of the rows.
+	 */
+	public int[] getRowOrigins() {
+		return m_rowOrigins;
+	}
+
+	/**
+	 * Initializes {@link #m_gridInfo}.
+	 */
+	private void createGridInfo() throws Exception {
+		// prepare intervals
+		final Interval[] columnIntervals = getIntervals(m_columnOrigins, m_columnWidths);
+		final Interval[] rowIntervals = getIntervals(m_rowOrigins, m_rowHeights);
+		// prepare cells
+		final Map<ControlInfo, Rectangle> componentToCells = Maps.newHashMap();
+		final Map<Point, ControlInfo> occupiedCells = Maps.newHashMap();
+		{
+			for (ControlInfo control : getComposite().getChildrenControls()) {
+				// prepare cells
+				Rectangle cells;
+				{
+					TableWrapDataInfo layoutData = getTableWrapData(control);
+					cells = new Rectangle(layoutData.x, layoutData.y, layoutData.width, layoutData.height);
+				}
+				// fill map: ControlInfo -> cells Rectangle
+				componentToCells.put(control, cells);
+				// ignore filler
+				if (isFiller(control)) {
+					continue;
+				}
+				// fill occupied cells map: cell -> ControlInfo
+				for (int x = cells.x; x < cells.right(); x++) {
+					for (int y = cells.y; y < cells.bottom(); y++) {
+						occupiedCells.put(new Point(x, y), control);
+					}
+				}
+			}
+		}
+		// create IGridInfo instance
+		m_gridInfo = new IGridInfo() {
+			////////////////////////////////////////////////////////////////////////////
+			//
+			// Dimensions
+			//
+			////////////////////////////////////////////////////////////////////////////
+			@Override
+			public int getColumnCount() {
+				return columnIntervals.length;
+			}
+
+			@Override
+			public int getRowCount() {
+				return rowIntervals.length;
+			}
+
+			////////////////////////////////////////////////////////////////////////////
+			//
+			// Intervals
+			//
+			////////////////////////////////////////////////////////////////////////////
+			@Override
+			public Interval[] getColumnIntervals() {
+				return columnIntervals;
+			}
+
+			@Override
+			public Interval[] getRowIntervals() {
+				return rowIntervals;
+			}
+
+			////////////////////////////////////////////////////////////////////////////
+			//
+			// Cells
+			//
+			////////////////////////////////////////////////////////////////////////////
+			@Override
+			public Rectangle getComponentCells(IAbstractComponentInfo component) {
+				Assert.instanceOf(ControlInfo.class, component);
+				return componentToCells.get(component);
+			}
+
+			@Override
+			public Rectangle getCellsRectangle(Rectangle cells) {
+				int x = columnIntervals[cells.x].begin();
+				int y = rowIntervals[cells.y].begin();
+				int w = columnIntervals[cells.right() - 1].end() - x;
+				int h = rowIntervals[cells.bottom() - 1].end() - y;
+				return new Rectangle(x, y, w, h);
+			}
+
+			////////////////////////////////////////////////////////////////////////////
+			//
+			// Feedback
+			//
+			////////////////////////////////////////////////////////////////////////////
+			@Override
+			public boolean isRTL() {
+				return false;
+			}
+
+			@Override
+			public Insets getInsets() {
+				return new Insets();
+			}
+
+			////////////////////////////////////////////////////////////////////////////
+			//
+			// Virtual columns
+			//
+			////////////////////////////////////////////////////////////////////////////
+			@Override
+			public boolean hasVirtualColumns() {
+				return true;
+			}
+
+			@Override
+			public int getVirtualColumnSize() {
+				return 25;
+			}
+
+			@Override
+			public int getVirtualColumnGap() {
+				return 5;
+			}
+
+			////////////////////////////////////////////////////////////////////////////
+			//
+			// Virtual rows
+			//
+			////////////////////////////////////////////////////////////////////////////
+			@Override
+			public boolean hasVirtualRows() {
+				return true;
+			}
+
+			@Override
+			public int getVirtualRowSize() {
+				return 25;
+			}
+
+			@Override
+			public int getVirtualRowGap() {
+				return 5;
+			}
+
+			////////////////////////////////////////////////////////////////////////////
+			//
+			// Checks
+			//
+			////////////////////////////////////////////////////////////////////////////
+			@Override
+			public IAbstractComponentInfo getOccupied(int column, int row) {
+				return occupiedCells.get(new Point(column, row));
+			}
+		};
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the array of {@link Interval}'s for given arrays of origins/sizes.
+	 */
+	private static Interval[] getIntervals(int[] origins, int[] sizes) {
+		Interval[] intervals = new Interval[origins.length];
+		for (int i = 0; i < intervals.length; i++) {
+			intervals[i] = new Interval(origins[i], sizes[i]);
+		}
+		return intervals;
+	}
+
+	@Override
+	public boolean isFiller(ControlInfo control) {
+		return control.getVariableSupport() instanceof EmptyVariableSupport
+				&& control.getDescription().getComponentClass().getName().equals(
+						"org.eclipse.swt.widgets.Label");
+	}
+
+	//////////////////////////////////////////////////////////////////////////
+	//
+	// Clipboard
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void clipboardCopy_addControlCommands(ControlInfo control,
+			List<ClipboardCommand> commands) throws Exception {
+		if (!isFiller(control)) {
+			TableWrapDataInfo layoutData = getTableWrapData(control);
+			final int column = layoutData.x;
+			final int row = layoutData.y;
+			//
+			commands.add(new LayoutClipboardCommand<TableWrapLayoutInfo>(control) {
+				private static final long serialVersionUID = 0L;
+
+				@Override
+				protected void add(TableWrapLayoutInfo layout, ControlInfo control) throws Exception {
+					layout.command_CREATE(control, column, false, row, false);
+				}
+			});
+			// command for TableWrapData
+			if (!(layoutData.getCreationSupport() instanceof IImplicitCreationSupport)) {
+				final int index = getComposite().getChildrenControls().indexOf(control);
+				final JavaInfoMemento dataMemento = JavaInfoMemento.createMemento(layoutData);
+				commands.add(new ComponentClipboardCommand<CompositeInfo>() {
+					private static final long serialVersionUID = 0L;
+
+					@Override
+					public void execute(CompositeInfo composite) throws Exception {
+						ControlInfo control = composite.getChildrenControls().get(index);
+						control.removeChild(LayoutInfo.getLayoutData(control));
+						//
+						TableWrapDataInfo layoutData = (TableWrapDataInfo) dataMemento.create(composite);
+						AssociationObject association =
+								AssociationObjects.invocationChild("%parent%.setLayoutData(%child%)", false);
+						JavaInfoUtils.add(
+								layoutData,
+								new LocalUniqueVariableSupport(layoutData),
+								VirtualLayoutDataStatementGenerator.INSTANCE,
+								association,
+								control,
+								null);
+						dataMemento.apply();
+					}
+				});
+			}
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Manage general layout data.
+	//
+	////////////////////////////////////////////////////////////////////////////
+	static final BiMap<GeneralLayoutData.HorizontalAlignment, Integer> m_horizontalAlignmentMap =
+			ImmutableBiMap.of(
+					GeneralLayoutData.HorizontalAlignment.LEFT,
+					TableWrapData.LEFT,
+					GeneralLayoutData.HorizontalAlignment.CENTER,
+					TableWrapData.CENTER,
+					GeneralLayoutData.HorizontalAlignment.RIGHT,
+					TableWrapData.RIGHT,
+					GeneralLayoutData.HorizontalAlignment.FILL,
+					TableWrapData.FILL);
+	static final BiMap<GeneralLayoutData.VerticalAlignment, Integer> m_verticalAlignmentMap =
+			ImmutableBiMap.of(
+					GeneralLayoutData.VerticalAlignment.TOP,
+					TableWrapData.TOP,
+					GeneralLayoutData.VerticalAlignment.CENTER,
+					TableWrapData.MIDDLE,
+					GeneralLayoutData.VerticalAlignment.BOTTOM,
+					TableWrapData.BOTTOM,
+					GeneralLayoutData.VerticalAlignment.FILL,
+					TableWrapData.FILL);
+
+	@Override
+	protected void storeLayoutData(ControlInfo control, LayoutDataInfo layoutData) throws Exception {
+		TableWrapDataInfo tableLayoutData = (TableWrapDataInfo) layoutData;
+		GeneralLayoutData generalLayoutData = new GeneralLayoutData();
+		generalLayoutData.gridX = tableLayoutData.x;
+		generalLayoutData.gridY = tableLayoutData.y;
+		generalLayoutData.spanX =
+				(Integer) GeneralLayoutData.getLayoutPropertyValue(tableLayoutData, "colspan");
+		generalLayoutData.spanY =
+				(Integer) GeneralLayoutData.getLayoutPropertyValue(tableLayoutData, "rowspan");
+		generalLayoutData.horizontalGrab =
+				(Boolean) GeneralLayoutData.getLayoutPropertyValue(tableLayoutData, "grabHorizontal");
+		generalLayoutData.verticalGrab =
+				(Boolean) GeneralLayoutData.getLayoutPropertyValue(tableLayoutData, "grabVertical");;
+				// alignments
+				generalLayoutData.horizontalAlignment =
+						GeneralLayoutData.getGeneralValue(
+								m_horizontalAlignmentMap,
+								(Integer) GeneralLayoutData.getLayoutPropertyValue(tableLayoutData, "align"));
+				generalLayoutData.verticalAlignment =
+						GeneralLayoutData.getGeneralValue(
+								m_verticalAlignmentMap,
+								(Integer) GeneralLayoutData.getLayoutPropertyValue(tableLayoutData, "valign"));
+				generalLayoutData.putToInfo(control);
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/table/TableWrapLayoutSupport.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/table/TableWrapLayoutSupport.java
index b4825ae23..53fc67187 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/table/TableWrapLayoutSupport.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/table/TableWrapLayoutSupport.java
@@ -27,59 +27,59 @@
  * @coverage rcp.model.forms
  */
 public class TableWrapLayoutSupport extends AbstractSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // TableWrapLayout
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link Point} with column/row for given {@link org.eclipse.swt.widgets.Control} and
-   *         {@link TableWrapLayout} objects.
-   */
-  @SuppressWarnings({"unchecked", "rawtypes"})
-  public static Point getXY(Object layout, Object control) throws Exception {
-    Map<Object, Object> map = (Map) ReflectionUtils.getFieldObject(layout, "m_controlToXY");
-    Object point = map.get(control);
-    return point != null ? PointSupport.getPoint(point) : null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// TableWrapLayout
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link Point} with column/row for given {@link org.eclipse.swt.widgets.Control} and
+	 *         {@link TableWrapLayout} objects.
+	 */
+	@SuppressWarnings({"unchecked", "rawtypes"})
+	public static Point getXY(Object layout, Object control) throws Exception {
+		Map<Object, Object> map = (Map) ReflectionUtils.getFieldObject(layout, "m_controlToXY");
+		Object point = map.get(control);
+		return point != null ? PointSupport.getPoint(point) : null;
+	}
 
-  /**
-   * @return the column origins for given {@link TableWrapLayout} object.
-   */
-  public static int[] getColumnOrigins(Object layout) throws Exception {
-    return (int[]) ReflectionUtils.getFieldObject(layout, "m_columnOrigins");
-  }
+	/**
+	 * @return the column origins for given {@link TableWrapLayout} object.
+	 */
+	public static int[] getColumnOrigins(Object layout) throws Exception {
+		return (int[]) ReflectionUtils.getFieldObject(layout, "m_columnOrigins");
+	}
 
-  /**
-   * @return the column widths for given {@link TableWrapLayout} object.
-   */
-  public static int[] getColumnWidths(Object layout) throws Exception {
-    return (int[]) ReflectionUtils.getFieldObject(layout, "m_columnWidths");
-  }
+	/**
+	 * @return the column widths for given {@link TableWrapLayout} object.
+	 */
+	public static int[] getColumnWidths(Object layout) throws Exception {
+		return (int[]) ReflectionUtils.getFieldObject(layout, "m_columnWidths");
+	}
 
-  /**
-   * @return the row origins for given {@link TableWrapLayout} object.
-   */
-  public static int[] getRowOrigins(Object layout) throws Exception {
-    return (int[]) ReflectionUtils.getFieldObject(layout, "m_rowOrigins");
-  }
+	/**
+	 * @return the row origins for given {@link TableWrapLayout} object.
+	 */
+	public static int[] getRowOrigins(Object layout) throws Exception {
+		return (int[]) ReflectionUtils.getFieldObject(layout, "m_rowOrigins");
+	}
 
-  /**
-   * @return the row heights for given {@link TableWrapLayout} object.
-   */
-  public static int[] getRowHeights(Object layout) throws Exception {
-    return (int[]) ReflectionUtils.getFieldObject(layout, "m_rowHeights");
-  }
+	/**
+	 * @return the row heights for given {@link TableWrapLayout} object.
+	 */
+	public static int[] getRowHeights(Object layout) throws Exception {
+		return (int[]) ReflectionUtils.getFieldObject(layout, "m_rowHeights");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // TableWrapData
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Create new {@link TableWrapData}.
-   */
-  public static Object createTableWrapData() throws Exception {
-    return loadClass("org.eclipse.ui.forms.widgets.TableWrapData").newInstance();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// TableWrapData
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Create new {@link TableWrapData}.
+	 */
+	public static Object createTableWrapData() throws Exception {
+		return loadClass("org.eclipse.ui.forms.widgets.TableWrapData").newInstance();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/table/TableWrapRowInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/table/TableWrapRowInfo.java
index 46dbeaffe..be77a1e04 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/table/TableWrapRowInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/table/TableWrapRowInfo.java
@@ -21,75 +21,75 @@
  * @coverage rcp.model.forms
  */
 public final class TableWrapRowInfo<C extends IControlInfo> extends TableWrapDimensionInfo<C> {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public TableWrapRowInfo(ITableWrapLayoutInfo<C> layout) {
-    super(layout);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public TableWrapRowInfo(ITableWrapLayoutInfo<C> layout) {
+		super(layout);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public int getIndex() {
-    return m_layout.getRows().indexOf(this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public int getIndex() {
+		return m_layout.getRows().indexOf(this);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Grab
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected boolean getGrab(ITableWrapDataInfo layoutData) {
-    return layoutData.getVerticalGrab();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Grab
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected boolean getGrab(ITableWrapDataInfo layoutData) {
+		return layoutData.getVerticalGrab();
+	}
 
-  @Override
-  protected void setGrab(ITableWrapDataInfo layoutData, boolean grab) throws Exception {
-    layoutData.setVerticalGrab(grab);
-  }
+	@Override
+	protected void setGrab(ITableWrapDataInfo layoutData, boolean grab) throws Exception {
+		layoutData.setVerticalGrab(grab);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Alignment
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getAlignmentTitle(int alignment) {
-    if (alignment == TableWrapData.TOP) {
-      return "top";
-    } else if (alignment == TableWrapData.MIDDLE) {
-      return "middle";
-    } else if (alignment == TableWrapData.BOTTOM) {
-      return "bottom";
-    } else {
-      return "fill";
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Alignment
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getAlignmentTitle(int alignment) {
+		if (alignment == TableWrapData.TOP) {
+			return "top";
+		} else if (alignment == TableWrapData.MIDDLE) {
+			return "middle";
+		} else if (alignment == TableWrapData.BOTTOM) {
+			return "bottom";
+		} else {
+			return "fill";
+		}
+	}
 
-  @Override
-  protected int getAlignment(ITableWrapDataInfo layoutData) {
-    return layoutData.getVerticalAlignment();
-  }
+	@Override
+	protected int getAlignment(ITableWrapDataInfo layoutData) {
+		return layoutData.getVerticalAlignment();
+	}
 
-  @Override
-  protected void setAlignment(ITableWrapDataInfo layoutData, int alignment) throws Exception {
-    layoutData.setVerticalAlignment(alignment);
-  }
+	@Override
+	protected void setAlignment(ITableWrapDataInfo layoutData, int alignment) throws Exception {
+		layoutData.setVerticalAlignment(alignment);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Processing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected boolean shouldProcessThisControl(ITableWrapDataInfo layoutData) {
-    return layoutData.getY() == getIndex();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Processing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected boolean shouldProcessThisControl(ITableWrapDataInfo layoutData) {
+		return layoutData.getY() == getIndex();
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/table/actions/AbstractAction.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/table/actions/AbstractAction.java
index 50cb6196a..5610c5364 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/table/actions/AbstractAction.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/table/actions/AbstractAction.java
@@ -23,26 +23,26 @@
  * @coverage rcp.model.forms
  */
 abstract class AbstractAction extends ObjectInfoAction {
-  protected final ITableWrapDataInfo m_layoutData;
-  protected final boolean m_horizontal;
+	protected final ITableWrapDataInfo m_layoutData;
+	protected final boolean m_horizontal;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractAction(ITableWrapDataInfo layoutData,
-      String text,
-      int style,
-      String iconPath,
-      boolean horizontal) {
-    super(layoutData.getUnderlyingModel(), text, style);
-    m_layoutData = layoutData;
-    m_horizontal = horizontal;
-    // set image
-    if (iconPath != null) {
-      String path = "info/layout/TableWrapLayout/" + (horizontal ? "h" : "v") + "/menu/" + iconPath;
-      setImageDescriptor(Activator.getImageDescriptor(path));
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractAction(ITableWrapDataInfo layoutData,
+			String text,
+			int style,
+			String iconPath,
+			boolean horizontal) {
+		super(layoutData.getUnderlyingModel(), text, style);
+		m_layoutData = layoutData;
+		m_horizontal = horizontal;
+		// set image
+		if (iconPath != null) {
+			String path = "info/layout/TableWrapLayout/" + (horizontal ? "h" : "v") + "/menu/" + iconPath;
+			setImageDescriptor(Activator.getImageDescriptor(path));
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/table/actions/SelectionActionsSupport.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/table/actions/SelectionActionsSupport.java
index 4f43dc31a..b793879a7 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/table/actions/SelectionActionsSupport.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/table/actions/SelectionActionsSupport.java
@@ -33,286 +33,286 @@
  * @coverage rcp.model.forms
  */
 public final class SelectionActionsSupport<C extends IControlInfo> extends ObjectEventListener {
-  private final ITableWrapLayoutInfo<C> m_layout;
+	private final ITableWrapLayoutInfo<C> m_layout;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SelectionActionsSupport(ITableWrapLayoutInfo<C> layout) {
-    m_layout = layout;
-    m_layout.addBroadcastListener(this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SelectionActionsSupport(ITableWrapLayoutInfo<C> layout) {
+		m_layout = layout;
+		m_layout.addBroadcastListener(this);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ObjectEventListener
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void addSelectionActions(List<ObjectInfo> objects, List<Object> actions) throws Exception {
-    if (objects.isEmpty()) {
-      return;
-    }
-    // prepare layout data info's
-    List<ITableWrapDataInfo> dataInfos = Lists.newArrayList();
-    {
-      List<C> controls = m_layout.getControls();
-      for (ObjectInfo object : objects) {
-        // check object
-        if (!controls.contains(object)) {
-          return;
-        }
-        // add data info
-        @SuppressWarnings("unchecked")
-        C control = (C) object;
-        dataInfos.add(m_layout.getTableWrapData2(control));
-      }
-    }
-    // create horizontal actions
-    actions.add(new Separator());
-    addAlignmentAction(
-        actions,
-        dataInfos,
-        true,
-        "left.gif",
-        ModelMessages.SelectionActionsSupport_haLeft,
-        TableWrapData.LEFT);
-    addAlignmentAction(
-        actions,
-        dataInfos,
-        true,
-        "center.gif",
-        ModelMessages.SelectionActionsSupport_haCenter,
-        TableWrapData.CENTER);
-    addAlignmentAction(
-        actions,
-        dataInfos,
-        true,
-        "right.gif",
-        ModelMessages.SelectionActionsSupport_haRight,
-        TableWrapData.RIGHT);
-    addAlignmentAction(
-        actions,
-        dataInfos,
-        true,
-        "fill.gif",
-        ModelMessages.SelectionActionsSupport_haFill,
-        TableWrapData.FILL);
-    // create vertical actions
-    actions.add(new Separator());
-    addAlignmentAction(
-        actions,
-        dataInfos,
-        false,
-        "top.gif",
-        ModelMessages.SelectionActionsSupport_vaTop,
-        TableWrapData.TOP);
-    addAlignmentAction(
-        actions,
-        dataInfos,
-        false,
-        "middle.gif",
-        ModelMessages.SelectionActionsSupport_vaMiddle,
-        TableWrapData.MIDDLE);
-    addAlignmentAction(
-        actions,
-        dataInfos,
-        false,
-        "bottom.gif",
-        ModelMessages.SelectionActionsSupport_vaBottom,
-        TableWrapData.BOTTOM);
-    addAlignmentAction(
-        actions,
-        dataInfos,
-        false,
-        "fill.gif",
-        ModelMessages.SelectionActionsSupport_vaFill,
-        TableWrapData.FILL);
-    // create grab actions
-    actions.add(new Separator());
-    addGrabAction(
-        actions,
-        dataInfos,
-        true,
-        "grow.gif",
-        ModelMessages.SelectionActionsSupport_haGrab);
-    addGrabAction(
-        actions,
-        dataInfos,
-        false,
-        "grow.gif",
-        ModelMessages.SelectionActionsSupport_vaGrab);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ObjectEventListener
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void addSelectionActions(List<ObjectInfo> objects, List<Object> actions) throws Exception {
+		if (objects.isEmpty()) {
+			return;
+		}
+		// prepare layout data info's
+		List<ITableWrapDataInfo> dataInfos = Lists.newArrayList();
+		{
+			List<C> controls = m_layout.getControls();
+			for (ObjectInfo object : objects) {
+				// check object
+				if (!controls.contains(object)) {
+					return;
+				}
+				// add data info
+				@SuppressWarnings("unchecked")
+				C control = (C) object;
+				dataInfos.add(m_layout.getTableWrapData2(control));
+			}
+		}
+		// create horizontal actions
+		actions.add(new Separator());
+		addAlignmentAction(
+				actions,
+				dataInfos,
+				true,
+				"left.gif",
+				ModelMessages.SelectionActionsSupport_haLeft,
+				TableWrapData.LEFT);
+		addAlignmentAction(
+				actions,
+				dataInfos,
+				true,
+				"center.gif",
+				ModelMessages.SelectionActionsSupport_haCenter,
+				TableWrapData.CENTER);
+		addAlignmentAction(
+				actions,
+				dataInfos,
+				true,
+				"right.gif",
+				ModelMessages.SelectionActionsSupport_haRight,
+				TableWrapData.RIGHT);
+		addAlignmentAction(
+				actions,
+				dataInfos,
+				true,
+				"fill.gif",
+				ModelMessages.SelectionActionsSupport_haFill,
+				TableWrapData.FILL);
+		// create vertical actions
+		actions.add(new Separator());
+		addAlignmentAction(
+				actions,
+				dataInfos,
+				false,
+				"top.gif",
+				ModelMessages.SelectionActionsSupport_vaTop,
+				TableWrapData.TOP);
+		addAlignmentAction(
+				actions,
+				dataInfos,
+				false,
+				"middle.gif",
+				ModelMessages.SelectionActionsSupport_vaMiddle,
+				TableWrapData.MIDDLE);
+		addAlignmentAction(
+				actions,
+				dataInfos,
+				false,
+				"bottom.gif",
+				ModelMessages.SelectionActionsSupport_vaBottom,
+				TableWrapData.BOTTOM);
+		addAlignmentAction(
+				actions,
+				dataInfos,
+				false,
+				"fill.gif",
+				ModelMessages.SelectionActionsSupport_vaFill,
+				TableWrapData.FILL);
+		// create grab actions
+		actions.add(new Separator());
+		addGrabAction(
+				actions,
+				dataInfos,
+				true,
+				"grow.gif",
+				ModelMessages.SelectionActionsSupport_haGrab);
+		addGrabAction(
+				actions,
+				dataInfos,
+				false,
+				"grow.gif",
+				ModelMessages.SelectionActionsSupport_vaGrab);
+	}
 
-  private void addAlignmentAction(List<Object> actions,
-      List<ITableWrapDataInfo> dataInfos,
-      boolean horizontal,
-      String iconPath,
-      String tooltip,
-      int alignment) {
-    boolean isChecked = true;
-    // prepare select current value
-    for (ITableWrapDataInfo layoutData : dataInfos) {
-      if (horizontal) {
-        if (layoutData.getHorizontalAlignment() != alignment) {
-          isChecked = false;
-          break;
-        }
-      } else {
-        if (layoutData.getVerticalAlignment() != alignment) {
-          isChecked = false;
-          break;
-        }
-      }
-    }
-    // create action
-    AlignmentAction action =
-        new AlignmentAction(dataInfos, horizontal, iconPath, tooltip, isChecked, alignment);
-    actions.add(action);
-  }
+	private void addAlignmentAction(List<Object> actions,
+			List<ITableWrapDataInfo> dataInfos,
+			boolean horizontal,
+			String iconPath,
+			String tooltip,
+			int alignment) {
+		boolean isChecked = true;
+		// prepare select current value
+		for (ITableWrapDataInfo layoutData : dataInfos) {
+			if (horizontal) {
+				if (layoutData.getHorizontalAlignment() != alignment) {
+					isChecked = false;
+					break;
+				}
+			} else {
+				if (layoutData.getVerticalAlignment() != alignment) {
+					isChecked = false;
+					break;
+				}
+			}
+		}
+		// create action
+		AlignmentAction action =
+				new AlignmentAction(dataInfos, horizontal, iconPath, tooltip, isChecked, alignment);
+		actions.add(action);
+	}
 
-  private void addGrabAction(List<Object> actions,
-      List<ITableWrapDataInfo> dataInfos,
-      boolean horizontal,
-      String iconPath,
-      String tooltip) {
-    boolean isChecked = true;
-    // prepare select current value
-    for (ITableWrapDataInfo layoutData : dataInfos) {
-      if (horizontal) {
-        if (!layoutData.getHorizontalGrab()) {
-          isChecked = false;
-          break;
-        }
-      } else {
-        if (!layoutData.getVerticalGrab()) {
-          isChecked = false;
-          break;
-        }
-      }
-    }
-    // create action
-    GrabAction action =
-        new GrabAction(dataInfos, horizontal, iconPath, tooltip, isChecked, !isChecked);
-    actions.add(action);
-  }
+	private void addGrabAction(List<Object> actions,
+			List<ITableWrapDataInfo> dataInfos,
+			boolean horizontal,
+			String iconPath,
+			String tooltip) {
+		boolean isChecked = true;
+		// prepare select current value
+		for (ITableWrapDataInfo layoutData : dataInfos) {
+			if (horizontal) {
+				if (!layoutData.getHorizontalGrab()) {
+					isChecked = false;
+					break;
+				}
+			} else {
+				if (!layoutData.getVerticalGrab()) {
+					isChecked = false;
+					break;
+				}
+			}
+		}
+		// create action
+		GrabAction action =
+				new GrabAction(dataInfos, horizontal, iconPath, tooltip, isChecked, !isChecked);
+		actions.add(action);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Actions
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private abstract class AbstractAction extends ObjectInfoAction {
-    private final List<ITableWrapDataInfo> m_dataInfos;
-    private final boolean m_horizontal;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Actions
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private abstract class AbstractAction extends ObjectInfoAction {
+		private final List<ITableWrapDataInfo> m_dataInfos;
+		private final boolean m_horizontal;
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public AbstractAction(int style,
-        List<ITableWrapDataInfo> dataInfos,
-        boolean horizontal,
-        String iconPath,
-        String tooltip,
-        boolean checked) {
-      super(m_layout.getUnderlyingModel(), "", style);
-      m_dataInfos = dataInfos;
-      m_horizontal = horizontal;
-      String path =
-          "info/layout/TableWrapLayout/" + (m_horizontal ? "h" : "v") + "/menu/" + iconPath;
-      setImageDescriptor(Activator.getImageDescriptor(path));
-      setToolTipText(tooltip);
-      setChecked(checked);
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public AbstractAction(int style,
+				List<ITableWrapDataInfo> dataInfos,
+				boolean horizontal,
+				String iconPath,
+				String tooltip,
+				boolean checked) {
+			super(m_layout.getUnderlyingModel(), "", style);
+			m_dataInfos = dataInfos;
+			m_horizontal = horizontal;
+			String path =
+					"info/layout/TableWrapLayout/" + (m_horizontal ? "h" : "v") + "/menu/" + iconPath;
+			setImageDescriptor(Activator.getImageDescriptor(path));
+			setToolTipText(tooltip);
+			setChecked(checked);
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Run
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    protected void runEx() throws Exception {
-      for (ITableWrapDataInfo layoutData : m_dataInfos) {
-        if (m_horizontal) {
-          handleHorizontal(layoutData);
-        } else {
-          handleVertical(layoutData);
-        }
-      }
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Run
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		protected void runEx() throws Exception {
+			for (ITableWrapDataInfo layoutData : m_dataInfos) {
+				if (m_horizontal) {
+					handleHorizontal(layoutData);
+				} else {
+					handleVertical(layoutData);
+				}
+			}
+		}
 
-    protected abstract void handleHorizontal(ITableWrapDataInfo layoutData) throws Exception;
+		protected abstract void handleHorizontal(ITableWrapDataInfo layoutData) throws Exception;
 
-    protected abstract void handleVertical(ITableWrapDataInfo layoutData) throws Exception;
-  }
-  private class AlignmentAction extends AbstractAction {
-    private final int m_alignment;
+		protected abstract void handleVertical(ITableWrapDataInfo layoutData) throws Exception;
+	}
+	private class AlignmentAction extends AbstractAction {
+		private final int m_alignment;
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public AlignmentAction(List<ITableWrapDataInfo> dataInfos,
-        boolean horizontal,
-        String iconPath,
-        String tooltip,
-        boolean checked,
-        int alignment) {
-      super(AS_RADIO_BUTTON, dataInfos, horizontal, iconPath, tooltip, checked);
-      m_alignment = alignment;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public AlignmentAction(List<ITableWrapDataInfo> dataInfos,
+				boolean horizontal,
+				String iconPath,
+				String tooltip,
+				boolean checked,
+				int alignment) {
+			super(AS_RADIO_BUTTON, dataInfos, horizontal, iconPath, tooltip, checked);
+			m_alignment = alignment;
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // AbstractAction
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    protected void handleHorizontal(ITableWrapDataInfo layoutData) throws Exception {
-      layoutData.setHorizontalAlignment(m_alignment);
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// AbstractAction
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		protected void handleHorizontal(ITableWrapDataInfo layoutData) throws Exception {
+			layoutData.setHorizontalAlignment(m_alignment);
+		}
 
-    @Override
-    protected void handleVertical(ITableWrapDataInfo layoutData) throws Exception {
-      layoutData.setVerticalAlignment(m_alignment);
-    }
-  }
-  private class GrabAction extends AbstractAction {
-    private final boolean m_grab;
+		@Override
+		protected void handleVertical(ITableWrapDataInfo layoutData) throws Exception {
+			layoutData.setVerticalAlignment(m_alignment);
+		}
+	}
+	private class GrabAction extends AbstractAction {
+		private final boolean m_grab;
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public GrabAction(List<ITableWrapDataInfo> dataInfos,
-        boolean horizontal,
-        String iconPath,
-        String tooltip,
-        boolean checked,
-        boolean grab) {
-      super(AS_CHECK_BOX, dataInfos, horizontal, iconPath, tooltip, checked);
-      m_grab = grab;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public GrabAction(List<ITableWrapDataInfo> dataInfos,
+				boolean horizontal,
+				String iconPath,
+				String tooltip,
+				boolean checked,
+				boolean grab) {
+			super(AS_CHECK_BOX, dataInfos, horizontal, iconPath, tooltip, checked);
+			m_grab = grab;
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // AbstractAction
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    protected void handleHorizontal(ITableWrapDataInfo layoutData) throws Exception {
-      layoutData.setHorizontalGrab(m_grab);
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// AbstractAction
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		protected void handleHorizontal(ITableWrapDataInfo layoutData) throws Exception {
+			layoutData.setHorizontalGrab(m_grab);
+		}
 
-    @Override
-    protected void handleVertical(ITableWrapDataInfo layoutData) throws Exception {
-      layoutData.setVerticalGrab(m_grab);
-    }
-  }
+		@Override
+		protected void handleVertical(ITableWrapDataInfo layoutData) throws Exception {
+			layoutData.setVerticalGrab(m_grab);
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/table/actions/SetAlignmentAction.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/table/actions/SetAlignmentAction.java
index 2bc75d4a8..d486f642f 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/table/actions/SetAlignmentAction.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/table/actions/SetAlignmentAction.java
@@ -21,37 +21,37 @@
  * @coverage rcp.model.forms
  */
 public final class SetAlignmentAction extends AbstractAction {
-  private final int m_alignment;
+	private final int m_alignment;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SetAlignmentAction(ITableWrapDataInfo layoutData,
-      String text,
-      String iconPath,
-      boolean horizontal,
-      int alignment) {
-    super(layoutData, text, AS_RADIO_BUTTON, iconPath, horizontal);
-    m_alignment = alignment;
-    // set check for current alignment
-    int currentAlignment =
-        horizontal ? layoutData.getHorizontalAlignment() : layoutData.getVerticalAlignment();
-    setChecked(currentAlignment == alignment);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SetAlignmentAction(ITableWrapDataInfo layoutData,
+			String text,
+			String iconPath,
+			boolean horizontal,
+			int alignment) {
+		super(layoutData, text, AS_RADIO_BUTTON, iconPath, horizontal);
+		m_alignment = alignment;
+		// set check for current alignment
+		int currentAlignment =
+				horizontal ? layoutData.getHorizontalAlignment() : layoutData.getVerticalAlignment();
+		setChecked(currentAlignment == alignment);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Run
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void runEx() throws Exception {
-    if (m_horizontal) {
-      m_layoutData.setHorizontalAlignment(m_alignment);
-    } else {
-      m_layoutData.setVerticalAlignment(m_alignment);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Run
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void runEx() throws Exception {
+		if (m_horizontal) {
+			m_layoutData.setHorizontalAlignment(m_alignment);
+		} else {
+			m_layoutData.setVerticalAlignment(m_alignment);
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/table/actions/SetGrabAction.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/table/actions/SetGrabAction.java
index b7d08dfe4..9655a027d 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/table/actions/SetGrabAction.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/forms/layout/table/actions/SetGrabAction.java
@@ -21,30 +21,30 @@
  * @coverage rcp.model.forms
  */
 public final class SetGrabAction extends AbstractAction {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SetGrabAction(ITableWrapDataInfo layoutData,
-      String text,
-      String iconPath,
-      boolean horizontal) {
-    super(layoutData, text, AS_CHECK_BOX, iconPath, horizontal);
-    setChecked(horizontal ? layoutData.getHorizontalGrab() : layoutData.getVerticalGrab());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SetGrabAction(ITableWrapDataInfo layoutData,
+			String text,
+			String iconPath,
+			boolean horizontal) {
+		super(layoutData, text, AS_CHECK_BOX, iconPath, horizontal);
+		setChecked(horizontal ? layoutData.getHorizontalGrab() : layoutData.getVerticalGrab());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Run
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void runEx() throws Exception {
-    if (m_horizontal) {
-      m_layoutData.setHorizontalGrab(!m_layoutData.getHorizontalGrab());
-    } else {
-      m_layoutData.setVerticalGrab(!m_layoutData.getVerticalGrab());
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Run
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void runEx() throws Exception {
+		if (m_horizontal) {
+			m_layoutData.setHorizontalGrab(!m_layoutData.getHorizontalGrab());
+		} else {
+			m_layoutData.setVerticalGrab(!m_layoutData.getVerticalGrab());
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/ApplicationWindowInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/ApplicationWindowInfo.java
index 55ccf2d75..d770c8fee 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/ApplicationWindowInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/ApplicationWindowInfo.java
@@ -35,87 +35,87 @@
  * @coverage rcp.model.jface
  */
 public final class ApplicationWindowInfo extends WindowInfo {
-  private final ApplicationWindowInfo m_this = this;
-  private JavaInfo m_statusLineManager;
+	private final ApplicationWindowInfo m_this = this;
+	private JavaInfo m_statusLineManager;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ApplicationWindowInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-    addBroadcastListener(new GenericPropertyGetValue() {
-      @Override
-      public void invoke(GenericPropertyImpl property, Object[] value) throws Exception {
-        // return status manager's 'message' property as value of ApplicationWindow.status property.
-        if (isStatusManagerMessageProperty(property)) {
-          value[0] = m_this.getPropertyByTitle("status").getValue();
-        }
-      }
-    });
-    addBroadcastListener(new JavaEventListener() {
-      @Override
-      public void bindComponents(List<JavaInfo> components) throws Exception {
-        // bind IContributionManager's to ApplicationWindow
-        for (JavaInfo component : components) {
-          if (component.getParent() == null
-              && ReflectionUtils.isSuccessorOf(
-                  component.getDescription().getComponentClass(),
-                  "org.eclipse.jface.action.IContributionManager")
-              && isReturnedFromMethod(component)) {
-            addChild(component);
-            component.setAssociation(new EmptyAssociation());
-            if (isStatusLineManager(component)) {
-              m_statusLineManager = component;
-            }
-          }
-        }
-      }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ApplicationWindowInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+		addBroadcastListener(new GenericPropertyGetValue() {
+			@Override
+			public void invoke(GenericPropertyImpl property, Object[] value) throws Exception {
+				// return status manager's 'message' property as value of ApplicationWindow.status property.
+				if (isStatusManagerMessageProperty(property)) {
+					value[0] = m_this.getPropertyByTitle("status").getValue();
+				}
+			}
+		});
+		addBroadcastListener(new JavaEventListener() {
+			@Override
+			public void bindComponents(List<JavaInfo> components) throws Exception {
+				// bind IContributionManager's to ApplicationWindow
+				for (JavaInfo component : components) {
+					if (component.getParent() == null
+							&& ReflectionUtils.isSuccessorOf(
+									component.getDescription().getComponentClass(),
+									"org.eclipse.jface.action.IContributionManager")
+							&& isReturnedFromMethod(component)) {
+						addChild(component);
+						component.setAssociation(new EmptyAssociation());
+						if (isStatusLineManager(component)) {
+							m_statusLineManager = component;
+						}
+					}
+				}
+			}
 
-      private boolean isReturnedFromMethod(JavaInfo javaInfo) {
-        for (ASTNode node : javaInfo.getRelatedNodes()) {
-          if (node.getLocationInParent() == ReturnStatement.EXPRESSION_PROPERTY) {
-            return true;
-          }
-        }
-        return false;
-      }
+			private boolean isReturnedFromMethod(JavaInfo javaInfo) {
+				for (ASTNode node : javaInfo.getRelatedNodes()) {
+					if (node.getLocationInParent() == ReturnStatement.EXPRESSION_PROPERTY) {
+						return true;
+					}
+				}
+				return false;
+			}
 
-      @Override
-      public void setPropertyExpression(GenericPropertyImpl property,
-          String[] source,
-          Object[] value,
-          boolean[] shouldSet) throws Exception {
-        // set status manager's 'message' property as value of ApplicationWindow.status property.
-        if (isStatusManagerMessageProperty(property)) {
-          m_this.getPropertyByTitle("status").setValue(value[0]);
-          shouldSet[0] = false;
-        }
-      }
-    });
-  }
+			@Override
+			public void setPropertyExpression(GenericPropertyImpl property,
+					String[] source,
+					Object[] value,
+					boolean[] shouldSet) throws Exception {
+				// set status manager's 'message' property as value of ApplicationWindow.status property.
+				if (isStatusManagerMessageProperty(property)) {
+					m_this.getPropertyByTitle("status").setValue(value[0]);
+					shouldSet[0] = false;
+				}
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // StatusLineManager
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private boolean isStatusManagerMessageProperty(GenericPropertyImpl property) {
-    JavaInfo statusLineManager = getStatusLineManager();
-    if (statusLineManager != null && statusLineManager == property.getJavaInfo()) {
-      return "message".equals(property.getTitle());
-    }
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// StatusLineManager
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private boolean isStatusManagerMessageProperty(GenericPropertyImpl property) {
+		JavaInfo statusLineManager = getStatusLineManager();
+		if (statusLineManager != null && statusLineManager == property.getJavaInfo()) {
+			return "message".equals(property.getTitle());
+		}
+		return false;
+	}
 
-  private JavaInfo getStatusLineManager() {
-    return m_statusLineManager;
-  }
+	private JavaInfo getStatusLineManager() {
+		return m_statusLineManager;
+	}
 
-  private boolean isStatusLineManager(JavaInfo javaInfo) {
-    return StatusLineManager.class.isAssignableFrom(javaInfo.getDescription().getComponentClass());
-  }
+	private boolean isStatusLineManager(JavaInfo javaInfo) {
+		return StatusLineManager.class.isAssignableFrom(javaInfo.getDescription().getComponentClass());
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/ControlDecorationInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/ControlDecorationInfo.java
index 507dac6ed..5560f912f 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/ControlDecorationInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/ControlDecorationInfo.java
@@ -35,122 +35,122 @@
  * @coverage rcp.model.jface
  */
 public final class ControlDecorationInfo extends AbstractComponentInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ControlDecorationInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ControlDecorationInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link ControlInfo} that is decorated by this {@link ControlDecorationInfo}.
-   */
-  public ControlInfo getControl() {
-    return (ControlInfo) getParent();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link ControlInfo} that is decorated by this {@link ControlDecorationInfo}.
+	 */
+	public ControlInfo getControl() {
+		return (ControlInfo) getParent();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Image m_decorationImage;
-  private Image m_iconImage;
-  private final IObjectPresentation m_presentation = new DefaultJavaInfoPresentation(this) {
-    @Override
-    public Image getIcon() throws Exception {
-      if (m_decorationImage != null && m_iconImage != null) {
-        return m_iconImage;
-      }
-      return super.getIcon();
-    }
-  };
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Image m_decorationImage;
+	private Image m_iconImage;
+	private final IObjectPresentation m_presentation = new DefaultJavaInfoPresentation(this) {
+		@Override
+		public Image getIcon() throws Exception {
+			if (m_decorationImage != null && m_iconImage != null) {
+				return m_iconImage;
+			}
+			return super.getIcon();
+		}
+	};
 
-  @Override
-  public IObjectPresentation getPresentation() {
-    return m_presentation;
-  }
+	@Override
+	public IObjectPresentation getPresentation() {
+		return m_presentation;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void refresh_dispose() throws Exception {
-    super.refresh_dispose();
-    // dispose image
-    if (m_iconImage != null) {
-      m_iconImage.dispose();
-      m_iconImage = null;
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void refresh_dispose() throws Exception {
+		super.refresh_dispose();
+		// dispose image
+		if (m_iconImage != null) {
+			m_iconImage.dispose();
+			m_iconImage = null;
+		}
+	}
 
-  @Override
-  protected void refresh_afterCreate() throws Exception {
-    super.refresh_afterCreate();
-    // prepare "real" image
-    m_decorationImage = (Image) ReflectionUtils.invokeMethod(getObject(), "getImage()");
-    // if no "real" image, set default one
-    if (m_decorationImage == null) {
-      ReflectionUtils.invokeMethod(
-          getObject(),
-          "setImage(org.eclipse.swt.graphics.Image)",
-          Activator.getImage("info/ControlDecoration/default.gif"));
-    }
-  }
+	@Override
+	protected void refresh_afterCreate() throws Exception {
+		super.refresh_afterCreate();
+		// prepare "real" image
+		m_decorationImage = (Image) ReflectionUtils.invokeMethod(getObject(), "getImage()");
+		// if no "real" image, set default one
+		if (m_decorationImage == null) {
+			ReflectionUtils.invokeMethod(
+					getObject(),
+					"setImage(org.eclipse.swt.graphics.Image)",
+					Activator.getImage("info/ControlDecoration/default.gif"));
+		}
+	}
 
-  @Override
-  protected void refresh_fetch() throws Exception {
-    // bounds
-    {
-      Control targetControl = (Control) ReflectionUtils.invokeMethod(getObject(), "getControl()");
-      Rectangle decorationRectangle =
-          RectangleSupport.getRectangle(ReflectionUtils.invokeMethod(
-              getObject(),
-              "getDecorationRectangle(org.eclipse.swt.widgets.Control)",
-              targetControl));
-      setModelBounds(decorationRectangle);
-    }
-    // image icon
-    if (m_decorationImage != null) {
-      m_iconImage = new Image(null, 16, 16);
-      GC gc = new GC(m_iconImage);
-      try {
-        DrawUtils.drawImageCHCV(gc, m_decorationImage, 0, 0, 16, 16);
-      } finally {
-        gc.dispose();
-      }
-    }
-    // continue
-    super.refresh_fetch();
-  }
+	@Override
+	protected void refresh_fetch() throws Exception {
+		// bounds
+		{
+			Control targetControl = (Control) ReflectionUtils.invokeMethod(getObject(), "getControl()");
+			Rectangle decorationRectangle =
+					RectangleSupport.getRectangle(ReflectionUtils.invokeMethod(
+							getObject(),
+							"getDecorationRectangle(org.eclipse.swt.widgets.Control)",
+							targetControl));
+			setModelBounds(decorationRectangle);
+		}
+		// image icon
+		if (m_decorationImage != null) {
+			m_iconImage = new Image(null, 16, 16);
+			GC gc = new GC(m_iconImage);
+			try {
+				DrawUtils.drawImageCHCV(gc, m_decorationImage, 0, 0, 16, 16);
+			} finally {
+				gc.dispose();
+			}
+		}
+		// continue
+		super.refresh_fetch();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Decorates {@link ControlInfo} with this new {@link ControlDecorationInfo}.
-   */
-  public void command_CREATE(ControlInfo target) throws Exception {
-    JavaInfoUtils.add(this, null, target, null);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Decorates {@link ControlInfo} with this new {@link ControlDecorationInfo}.
+	 */
+	public void command_CREATE(ControlInfo target) throws Exception {
+		JavaInfoUtils.add(this, null, target, null);
+	}
 
-  /**
-   * Decorates {@link ControlInfo} with this (already existing) {@link ControlDecorationInfo}.
-   */
-  public void command_ADD(ControlInfo target) throws Exception {
-    JavaInfoUtils.move(this, null, target, null);
-  }
+	/**
+	 * Decorates {@link ControlInfo} with this (already existing) {@link ControlDecorationInfo}.
+	 */
+	public void command_ADD(ControlInfo target) throws Exception {
+		JavaInfoUtils.move(this, null, target, null);
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/DialogButtonIdPropertyEditor.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/DialogButtonIdPropertyEditor.java
index 97bbe3a93..658088f1e 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/DialogButtonIdPropertyEditor.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/DialogButtonIdPropertyEditor.java
@@ -84,518 +84,518 @@
  * @coverage rcp.model.jface
  */
 public final class DialogButtonIdPropertyEditor extends TextDialogPropertyEditor {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getText(Property _property) throws Exception {
-    GenericProperty property = (GenericProperty) _property;
-    Object value = property.getValue();
-    // return title for value
-    if (value instanceof Integer) {
-      Expression expression = property.getExpression();
-      // check for IDialogConstants.*_ID
-      if (isDialogConstantsQualifiedName(expression)) {
-        QualifiedName qualifiedName = (QualifiedName) expression;
-        if (qualifiedName != null) {
-          return qualifiedName.getName().getIdentifier();
-        }
-      }
-      // check for custom ID
-      if (expression instanceof SimpleName) {
-        return ((SimpleName) expression).getIdentifier();
-      }
-      // just Integer
-      return Integer.toString((Integer) value);
-    }
-    // unknown value
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getText(Property _property) throws Exception {
+		GenericProperty property = (GenericProperty) _property;
+		Object value = property.getValue();
+		// return title for value
+		if (value instanceof Integer) {
+			Expression expression = property.getExpression();
+			// check for IDialogConstants.*_ID
+			if (isDialogConstantsQualifiedName(expression)) {
+				QualifiedName qualifiedName = (QualifiedName) expression;
+				if (qualifiedName != null) {
+					return qualifiedName.getName().getIdentifier();
+				}
+			}
+			// check for custom ID
+			if (expression instanceof SimpleName) {
+				return ((SimpleName) expression).getIdentifier();
+			}
+			// just Integer
+			return Integer.toString((Integer) value);
+		}
+		// unknown value
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Internal access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final String BUTTON_NAME_PROPERTY = "BUTTON_NAME_PROPERTY";
-  private static final String BUTTON_OFFSET_PROPERTY = "BUTTON_OFFSET_PROPERTY";
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Internal access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final String BUTTON_NAME_PROPERTY = "BUTTON_NAME_PROPERTY";
+	private static final String BUTTON_OFFSET_PROPERTY = "BUTTON_OFFSET_PROPERTY";
 
-  /**
-   * @return <code>true</code> if given {@link Expression} is constant from {@link IDialogConstants}
-   *         .
-   */
-  private static boolean isDialogConstantsQualifiedName(Expression expression) {
-    if (expression instanceof QualifiedName) {
-      QualifiedName qualifiedName = (QualifiedName) expression;
-      return AstNodeUtils.getFullyQualifiedName(qualifiedName.getQualifier(), false).equals(
-          "org.eclipse.jface.dialogs.IDialogConstants");
-    }
-    return false;
-  }
+	/**
+	 * @return <code>true</code> if given {@link Expression} is constant from {@link IDialogConstants}
+	 *         .
+	 */
+	private static boolean isDialogConstantsQualifiedName(Expression expression) {
+		if (expression instanceof QualifiedName) {
+			QualifiedName qualifiedName = (QualifiedName) expression;
+			return AstNodeUtils.getFullyQualifiedName(qualifiedName.getQualifier(), false).equals(
+					"org.eclipse.jface.dialogs.IDialogConstants");
+		}
+		return false;
+	}
 
-  /**
-   * @return {@link FieldDeclaration}'s with {@link IDialogConstants#CLIENT_ID} based custom button
-   *         ID's.
-   */
-  private static List<FieldDeclaration> getCustomIDs(GenericProperty property) {
-    List<FieldDeclaration> idList = Lists.newArrayList();
-    TypeDeclaration typeDeclaration = JavaInfoUtils.getTypeDeclaration(property.getJavaInfo());
-    for (FieldDeclaration fieldDeclaration : typeDeclaration.getFields()) {
-      // check that field is "static final"
-      {
-        int staticFinal = Modifier.STATIC | Modifier.FINAL;
-        if ((fieldDeclaration.getModifiers() & staticFinal) != staticFinal) {
-          continue;
-        }
-      }
-      // check that field has single fragment
-      VariableDeclarationFragment fragment;
-      {
-        List<VariableDeclarationFragment> fragments = DomGenerics.fragments(fieldDeclaration);
-        if (fragments.size() != 1) {
-          continue;
-        }
-        fragment = fragments.get(0);
-      }
-      // check that fragment is initialized with infix expression
-      InfixExpression infixExpression;
-      {
-        Expression initializer = fragment.getInitializer();
-        if (!(initializer instanceof InfixExpression)) {
-          continue;
-        }
-        infixExpression = (InfixExpression) initializer;
-      }
-      // check that field is based on IDialogConstants.CLIENT_ID
-      Expression leftOperand = infixExpression.getLeftOperand();
-      Expression rightOperand = infixExpression.getRightOperand();
-      if (!isDialogConstantsQualifiedName(leftOperand)) {
-        continue;
-      }
-      if (infixExpression.getOperator() != InfixExpression.Operator.PLUS
-          || !(rightOperand instanceof NumberLiteral)) {
-        continue;
-      }
-      QualifiedName qualifiedLeftOperand = (QualifiedName) leftOperand;
-      if (!qualifiedLeftOperand.getName().getIdentifier().equals("CLIENT_ID")) {
-        continue;
-      }
-      // all checks were successful, so add this FieldDeclaration
-      fieldDeclaration.setProperty(BUTTON_NAME_PROPERTY, fragment.getName().getIdentifier());
-      fieldDeclaration.setProperty(BUTTON_OFFSET_PROPERTY, Integer.valueOf(rightOperand.toString()));
-      idList.add(fieldDeclaration);
-    }
-    return idList;
-  }
+	/**
+	 * @return {@link FieldDeclaration}'s with {@link IDialogConstants#CLIENT_ID} based custom button
+	 *         ID's.
+	 */
+	private static List<FieldDeclaration> getCustomIDs(GenericProperty property) {
+		List<FieldDeclaration> idList = Lists.newArrayList();
+		TypeDeclaration typeDeclaration = JavaInfoUtils.getTypeDeclaration(property.getJavaInfo());
+		for (FieldDeclaration fieldDeclaration : typeDeclaration.getFields()) {
+			// check that field is "static final"
+			{
+				int staticFinal = Modifier.STATIC | Modifier.FINAL;
+				if ((fieldDeclaration.getModifiers() & staticFinal) != staticFinal) {
+					continue;
+				}
+			}
+			// check that field has single fragment
+			VariableDeclarationFragment fragment;
+			{
+				List<VariableDeclarationFragment> fragments = DomGenerics.fragments(fieldDeclaration);
+				if (fragments.size() != 1) {
+					continue;
+				}
+				fragment = fragments.get(0);
+			}
+			// check that fragment is initialized with infix expression
+			InfixExpression infixExpression;
+			{
+				Expression initializer = fragment.getInitializer();
+				if (!(initializer instanceof InfixExpression)) {
+					continue;
+				}
+				infixExpression = (InfixExpression) initializer;
+			}
+			// check that field is based on IDialogConstants.CLIENT_ID
+			Expression leftOperand = infixExpression.getLeftOperand();
+			Expression rightOperand = infixExpression.getRightOperand();
+			if (!isDialogConstantsQualifiedName(leftOperand)) {
+				continue;
+			}
+			if (infixExpression.getOperator() != InfixExpression.Operator.PLUS
+					|| !(rightOperand instanceof NumberLiteral)) {
+				continue;
+			}
+			QualifiedName qualifiedLeftOperand = (QualifiedName) leftOperand;
+			if (!qualifiedLeftOperand.getName().getIdentifier().equals("CLIENT_ID")) {
+				continue;
+			}
+			// all checks were successful, so add this FieldDeclaration
+			fieldDeclaration.setProperty(BUTTON_NAME_PROPERTY, fragment.getName().getIdentifier());
+			fieldDeclaration.setProperty(BUTTON_OFFSET_PROPERTY, Integer.valueOf(rightOperand.toString()));
+			idList.add(fieldDeclaration);
+		}
+		return idList;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void openDialog(Property _property) throws Exception {
-    GenericProperty property = (GenericProperty) _property;
-    SelectIdDialog dialog = new SelectIdDialog(DesignerPlugin.getShell(), property);
-    if (dialog.open() == Window.OK) {
-      property.setExpression(dialog.getSourceCode(), Property.UNKNOWN_VALUE);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void openDialog(Property _property) throws Exception {
+		GenericProperty property = (GenericProperty) _property;
+		SelectIdDialog dialog = new SelectIdDialog(DesignerPlugin.getShell(), property);
+		if (dialog.open() == Window.OK) {
+			property.setExpression(dialog.getSourceCode(), Property.UNKNOWN_VALUE);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Inner Classes
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  static final String[] STANDARD_IDS = new String[]{
-      "ABORT_ID",
-      "BACK_ID",
-      "CANCEL_ID",
-      "CLOSE_ID",
-      "FINISH_ID",
-      "HELP_ID",
-      "IGNORE_ID",
-      "NEXT_ID",
-      "NO_ID",
-      "NO_TO_ALL_ID",
-      "OK_ID",
-      "OPEN_ID",
-      "PROCEED_ID",
-      "RETRY_ID",
-      "SKIP_ID",
-      "STOP_ID",
-      "YES_ID",
-      "YES_TO_ALL_ID"};
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Inner Classes
+	//
+	////////////////////////////////////////////////////////////////////////////
+	static final String[] STANDARD_IDS = new String[]{
+			"ABORT_ID",
+			"BACK_ID",
+			"CANCEL_ID",
+			"CLOSE_ID",
+			"FINISH_ID",
+			"HELP_ID",
+			"IGNORE_ID",
+			"NEXT_ID",
+			"NO_ID",
+			"NO_TO_ALL_ID",
+			"OK_ID",
+			"OPEN_ID",
+			"PROCEED_ID",
+			"RETRY_ID",
+			"SKIP_ID",
+			"STOP_ID",
+			"YES_ID",
+	"YES_TO_ALL_ID"};
 
-  /**
-   * {@link Dialog} for selecting ID of "button" on "button bar".
-   *
-   * @author scheglov_ke
-   */
-  private class SelectIdDialog extends ResizableDialog {
-    private static final int NEW = IDialogConstants.CLIENT_ID + 1;
-    private final GenericProperty m_property;
-    private Tree m_categoriesTree;
-    private TreeItem m_customItem;
-    private TreeItem m_standardItem;
-    private TableViewer m_viewer;
-    private String m_sourceCode;
+	/**
+	 * {@link Dialog} for selecting ID of "button" on "button bar".
+	 *
+	 * @author scheglov_ke
+	 */
+	private class SelectIdDialog extends ResizableDialog {
+		private static final int NEW = IDialogConstants.CLIENT_ID + 1;
+		private final GenericProperty m_property;
+		private Tree m_categoriesTree;
+		private TreeItem m_customItem;
+		private TreeItem m_standardItem;
+		private TableViewer m_viewer;
+		private String m_sourceCode;
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public SelectIdDialog(Shell parentShell, GenericProperty property) {
-      super(parentShell, Activator.getDefault());
-      m_property = property;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public SelectIdDialog(Shell parentShell, GenericProperty property) {
+			super(parentShell, Activator.getDefault());
+			m_property = property;
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Access
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    /**
-     * @return the source code to use for ID.
-     */
-    public String getSourceCode() {
-      return m_sourceCode;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Access
+		//
+		////////////////////////////////////////////////////////////////////////////
+		/**
+		 * @return the source code to use for ID.
+		 */
+		public String getSourceCode() {
+			return m_sourceCode;
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // GUI
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    protected Control createDialogArea(Composite parent) {
-      Composite container = (Composite) super.createDialogArea(parent);
-      GridLayoutFactory.create(container).columns(2);
-      // create categories Tree
-      {
-        m_categoriesTree = new Tree(container, SWT.BORDER);
-        GridDataFactory.create(m_categoriesTree).hintHC(20).alignHF().grabV().fillV();
-        //
-        m_customItem = new TreeItem(m_categoriesTree, SWT.NONE);
-        m_customItem.setText(ModelMessages.DialogButtonIdPropertyEditor_categoryCustom);
-        //
-        m_standardItem = new TreeItem(m_categoriesTree, SWT.NONE);
-        m_standardItem.setText(ModelMessages.DialogButtonIdPropertyEditor_categoryStandard);
-        //
-        m_categoriesTree.addSelectionListener(new SelectionAdapter() {
-          @Override
-          public void widgetSelected(SelectionEvent e) {
-            boolean showStandardIDs = e.item == m_standardItem;
-            showIDs(showStandardIDs);
-          }
-        });
-      }
-      // create ID's viewer
-      {
-        m_viewer = new TableViewer(container, SWT.BORDER | SWT.FULL_SELECTION);
-        {
-          Table table = m_viewer.getTable();
-          GridDataFactory.create(table).hintC(50, 13).grab().fill();
-          TableFactory.modify(table).newColumn().widthC(47).text(
-              ModelMessages.DialogButtonIdPropertyEditor_columnId);
-        }
-        m_viewer.setSorter(new IdSorter());
-        m_viewer.setLabelProvider(new IdLabelProvider());
-        m_viewer.setContentProvider(new ArrayContentProvider());
-        m_viewer.addDoubleClickListener(new IDoubleClickListener() {
-          @Override
-          public void doubleClick(DoubleClickEvent e) {
-            okPressed();
-          }
-        });
-        // show initial elements
-        ExecutionUtils.runLog(new RunnableEx() {
-          @Override
-          public void run() throws Exception {
-            boolean showStandardIDs = isDialogConstantsQualifiedName(m_property.getExpression());
-            // select standard/custom category
-            m_categoriesTree.setSelection(new TreeItem[]{showStandardIDs
-                ? m_standardItem
-                : m_customItem});
-            // show ID's
-            showIDs(showStandardIDs);
-            highlightID(getText(m_property));
-            m_viewer.getTable().setFocus();
-          }
-        });
-      }
-      //
-      return container;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// GUI
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		protected Control createDialogArea(Composite parent) {
+			Composite container = (Composite) super.createDialogArea(parent);
+			GridLayoutFactory.create(container).columns(2);
+			// create categories Tree
+			{
+				m_categoriesTree = new Tree(container, SWT.BORDER);
+				GridDataFactory.create(m_categoriesTree).hintHC(20).alignHF().grabV().fillV();
+				//
+				m_customItem = new TreeItem(m_categoriesTree, SWT.NONE);
+				m_customItem.setText(ModelMessages.DialogButtonIdPropertyEditor_categoryCustom);
+				//
+				m_standardItem = new TreeItem(m_categoriesTree, SWT.NONE);
+				m_standardItem.setText(ModelMessages.DialogButtonIdPropertyEditor_categoryStandard);
+				//
+				m_categoriesTree.addSelectionListener(new SelectionAdapter() {
+					@Override
+					public void widgetSelected(SelectionEvent e) {
+						boolean showStandardIDs = e.item == m_standardItem;
+						showIDs(showStandardIDs);
+					}
+				});
+			}
+			// create ID's viewer
+			{
+				m_viewer = new TableViewer(container, SWT.BORDER | SWT.FULL_SELECTION);
+				{
+					Table table = m_viewer.getTable();
+					GridDataFactory.create(table).hintC(50, 13).grab().fill();
+					TableFactory.modify(table).newColumn().widthC(47).text(
+							ModelMessages.DialogButtonIdPropertyEditor_columnId);
+				}
+				m_viewer.setSorter(new IdSorter());
+				m_viewer.setLabelProvider(new IdLabelProvider());
+				m_viewer.setContentProvider(new ArrayContentProvider());
+				m_viewer.addDoubleClickListener(new IDoubleClickListener() {
+					@Override
+					public void doubleClick(DoubleClickEvent e) {
+						okPressed();
+					}
+				});
+				// show initial elements
+				ExecutionUtils.runLog(new RunnableEx() {
+					@Override
+					public void run() throws Exception {
+						boolean showStandardIDs = isDialogConstantsQualifiedName(m_property.getExpression());
+						// select standard/custom category
+						m_categoriesTree.setSelection(new TreeItem[]{showStandardIDs
+								? m_standardItem
+										: m_customItem});
+						// show ID's
+						showIDs(showStandardIDs);
+						highlightID(getText(m_property));
+						m_viewer.getTable().setFocus();
+					}
+				});
+			}
+			//
+			return container;
+		}
 
-    @Override
-    protected void configureShell(Shell newShell) {
-      super.configureShell(newShell);
-      newShell.setText(ModelMessages.DialogButtonIdPropertyEditor_dialogTitle);
-    }
+		@Override
+		protected void configureShell(Shell newShell) {
+			super.configureShell(newShell);
+			newShell.setText(ModelMessages.DialogButtonIdPropertyEditor_dialogTitle);
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Buttons
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    protected void createButtonsForButtonBar(Composite parent) {
-      createButton(parent, NEW, ModelMessages.DialogButtonIdPropertyEditor_newButton, false);
-      createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true);
-      createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false);
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Buttons
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		protected void createButtonsForButtonBar(Composite parent) {
+			createButton(parent, NEW, ModelMessages.DialogButtonIdPropertyEditor_newButton, false);
+			createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true);
+			createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false);
+		}
 
-    @Override
-    protected void okPressed() {
-      IStructuredSelection selection = (IStructuredSelection) m_viewer.getSelection();
-      Object o = selection.getFirstElement();
-      if (o instanceof FieldDeclaration) {
-        FieldDeclaration fieldDeclaration = (FieldDeclaration) o;
-        m_sourceCode = DomGenerics.fragments(fieldDeclaration).get(0).getName().getIdentifier();
-      } else if (o instanceof String) {
-        m_sourceCode = "org.eclipse.jface.dialogs.IDialogConstants." + (String) o;
-      }
-      super.okPressed();
-    }
+		@Override
+		protected void okPressed() {
+			IStructuredSelection selection = (IStructuredSelection) m_viewer.getSelection();
+			Object o = selection.getFirstElement();
+			if (o instanceof FieldDeclaration) {
+				FieldDeclaration fieldDeclaration = (FieldDeclaration) o;
+				m_sourceCode = DomGenerics.fragments(fieldDeclaration).get(0).getName().getIdentifier();
+			} else if (o instanceof String) {
+				m_sourceCode = "org.eclipse.jface.dialogs.IDialogConstants." + (String) o;
+			}
+			super.okPressed();
+		}
 
-    @Override
-    protected void buttonPressed(int buttonId) {
-      super.buttonPressed(buttonId);
-      if (buttonId == NEW) {
-        onNewID();
-        return;
-      }
-    }
+		@Override
+		protected void buttonPressed(int buttonId) {
+			super.buttonPressed(buttonId);
+			if (buttonId == NEW) {
+				onNewID();
+				return;
+			}
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Internal
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    /**
-     * Shows standard or custom button ID's.
-     */
-    private void showIDs(boolean showStandardIDs) {
-      m_viewer.setInput(showStandardIDs ? STANDARD_IDS : getCustomIDs(m_property));
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Internal
+		//
+		////////////////////////////////////////////////////////////////////////////
+		/**
+		 * Shows standard or custom button ID's.
+		 */
+		private void showIDs(boolean showStandardIDs) {
+			m_viewer.setInput(showStandardIDs ? STANDARD_IDS : getCustomIDs(m_property));
+		}
 
-    /**
-     * Highlights in {@link #m_viewer} item with same text as given.
-     */
-    private void highlightID(String idText) {
-      Table table = m_viewer.getTable();
-      for (TableItem item : table.getItems()) {
-        if (item.getText().equals(idText)) {
-          table.setSelection(item);
-          break;
-        }
-      }
-    }
+		/**
+		 * Highlights in {@link #m_viewer} item with same text as given.
+		 */
+		private void highlightID(String idText) {
+			Table table = m_viewer.getTable();
+			for (TableItem item : table.getItems()) {
+				if (item.getText().equals(idText)) {
+					table.setSelection(item);
+					break;
+				}
+			}
+		}
 
-    private void onNewID() {
-      NewIdDialog dialog = new NewIdDialog(getShell(), m_property);
-      if (dialog.open() != OK) {
-        return;
-      }
-      // add new FieldDeclaration
-      final String newName = dialog.m_nameField.getText();
-      final String newValue = dialog.m_valueField.getText();
-      final JavaInfo javaInfo = m_property.getJavaInfo();
-      ExecutionUtils.run(javaInfo, new RunnableEx() {
-        @Override
-        public void run() throws Exception {
-          AstEditor editor = javaInfo.getEditor();
-          TypeDeclaration typeDeclaration = JavaInfoUtils.getTypeDeclaration(javaInfo);
-          String code =
-              "private static final int "
-                  + newName
-                  + " = IDialogConstants.CLIENT_ID + "
-                  + newValue
-                  + ";";
-          editor.addFieldDeclaration(code, new BodyDeclarationTarget(typeDeclaration, true));
-        }
-      });
-      // show "custom" page
-      m_categoriesTree.setSelection(new TreeItem[]{m_customItem});
-      m_viewer.setInput(getCustomIDs(m_property));
-      highlightID(newName);
-    }
+		private void onNewID() {
+			NewIdDialog dialog = new NewIdDialog(getShell(), m_property);
+			if (dialog.open() != OK) {
+				return;
+			}
+			// add new FieldDeclaration
+			final String newName = dialog.m_nameField.getText();
+			final String newValue = dialog.m_valueField.getText();
+			final JavaInfo javaInfo = m_property.getJavaInfo();
+			ExecutionUtils.run(javaInfo, new RunnableEx() {
+				@Override
+				public void run() throws Exception {
+					AstEditor editor = javaInfo.getEditor();
+					TypeDeclaration typeDeclaration = JavaInfoUtils.getTypeDeclaration(javaInfo);
+					String code =
+							"private static final int "
+									+ newName
+									+ " = IDialogConstants.CLIENT_ID + "
+									+ newValue
+									+ ";";
+					editor.addFieldDeclaration(code, new BodyDeclarationTarget(typeDeclaration, true));
+				}
+			});
+			// show "custom" page
+			m_categoriesTree.setSelection(new TreeItem[]{m_customItem});
+			m_viewer.setInput(getCustomIDs(m_property));
+			highlightID(newName);
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Viewer elements
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    private class IdSorter extends ViewerSorter {
-      @Override
-      public int compare(Viewer viewer, Object e1, Object e2) {
-        IdLabelProvider labelProvider = (IdLabelProvider) m_viewer.getLabelProvider();
-        String s1 = labelProvider.getColumnText(e1, 0);
-        String s2 = labelProvider.getColumnText(e2, 0);
-        return s1.compareTo(s2);
-      }
-    }
-    private class IdLabelProvider extends LabelProvider implements ITableLabelProvider {
-      @Override
-      public String getColumnText(Object element, int columnIndex) {
-        if (element instanceof FieldDeclaration) {
-          FieldDeclaration fieldDeclaration = (FieldDeclaration) element;
-          return (String) fieldDeclaration.getProperty(BUTTON_NAME_PROPERTY);
-        }
-        return element.toString();
-      }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Viewer elements
+		//
+		////////////////////////////////////////////////////////////////////////////
+		private class IdSorter extends ViewerSorter {
+			@Override
+			public int compare(Viewer viewer, Object e1, Object e2) {
+				IdLabelProvider labelProvider = (IdLabelProvider) m_viewer.getLabelProvider();
+				String s1 = labelProvider.getColumnText(e1, 0);
+				String s2 = labelProvider.getColumnText(e2, 0);
+				return s1.compareTo(s2);
+			}
+		}
+		private class IdLabelProvider extends LabelProvider implements ITableLabelProvider {
+			@Override
+			public String getColumnText(Object element, int columnIndex) {
+				if (element instanceof FieldDeclaration) {
+					FieldDeclaration fieldDeclaration = (FieldDeclaration) element;
+					return (String) fieldDeclaration.getProperty(BUTTON_NAME_PROPERTY);
+				}
+				return element.toString();
+			}
 
-      @Override
-      public Image getColumnImage(Object element, int columnIndex) {
-        return null;
-      }
-    }
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // NewIDDialog
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static class NewIdDialog extends AbstractValidationTitleAreaDialog {
-    private final GenericProperty m_property;
+			@Override
+			public Image getColumnImage(Object element, int columnIndex) {
+				return null;
+			}
+		}
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// NewIDDialog
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static class NewIdDialog extends AbstractValidationTitleAreaDialog {
+		private final GenericProperty m_property;
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public NewIdDialog(Shell parentShell, GenericProperty property) {
-      super(parentShell,
-          Activator.getDefault(),
-          ModelMessages.DialogButtonIdPropertyEditor_newDialogTitle,
-          ModelMessages.DialogButtonIdPropertyEditor_newDialogTitle,
-          Activator.getImage("info/Dialog/newfield_wiz.gif"),
-          ModelMessages.DialogButtonIdPropertyEditor_newDialogMessage);
-      m_property = property;
-      setShellStyle(SWT.APPLICATION_MODAL | SWT.DIALOG_TRIM | SWT.SHELL_TRIM);
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public NewIdDialog(Shell parentShell, GenericProperty property) {
+			super(parentShell,
+					Activator.getDefault(),
+					ModelMessages.DialogButtonIdPropertyEditor_newDialogTitle,
+					ModelMessages.DialogButtonIdPropertyEditor_newDialogTitle,
+					Activator.getImage("info/Dialog/newfield_wiz.gif"),
+					ModelMessages.DialogButtonIdPropertyEditor_newDialogMessage);
+			m_property = property;
+			setShellStyle(SWT.APPLICATION_MODAL | SWT.DIALOG_TRIM | SWT.SHELL_TRIM);
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // GUI
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    private StringDialogField m_nameField;
-    private StringDialogField m_valueField;
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// GUI
+		//
+		////////////////////////////////////////////////////////////////////////////
+		private StringDialogField m_nameField;
+		private StringDialogField m_valueField;
 
-    @Override
-    protected void createControls(Composite container) {
-      m_fieldsContainer = container;
-      GridLayoutFactory.create(container).columns(2);
-      // name
-      {
-        m_nameField = new StringDialogField();
-        doCreateField(m_nameField, ModelMessages.DialogButtonIdPropertyEditor_newDialogName);
-        // initial value
-        m_nameField.setText("NEW_ID");
-        m_nameField.selectAll();
-      }
-      // value
-      {
-        m_valueField = new StringDialogField();
-        doCreateField(m_valueField, "Value (ID_CLIENT +):");
-        // initial value
-        {
-          int maxValue = 0;
-          for (FieldDeclaration fieldDeclaration : getCustomIDs(m_property)) {
-            int value = (Integer) fieldDeclaration.getProperty(BUTTON_OFFSET_PROPERTY);
-            maxValue = Math.max(maxValue, value);
-          }
-          m_valueField.setText("" + (maxValue + 1));
-          m_valueField.selectAll();
-        }
-      }
-    }
+		@Override
+		protected void createControls(Composite container) {
+			m_fieldsContainer = container;
+			GridLayoutFactory.create(container).columns(2);
+			// name
+			{
+				m_nameField = new StringDialogField();
+				doCreateField(m_nameField, ModelMessages.DialogButtonIdPropertyEditor_newDialogName);
+				// initial value
+				m_nameField.setText("NEW_ID");
+				m_nameField.selectAll();
+			}
+			// value
+			{
+				m_valueField = new StringDialogField();
+				doCreateField(m_valueField, "Value (ID_CLIENT +):");
+				// initial value
+				{
+					int maxValue = 0;
+					for (FieldDeclaration fieldDeclaration : getCustomIDs(m_property)) {
+						int value = (Integer) fieldDeclaration.getProperty(BUTTON_OFFSET_PROPERTY);
+						maxValue = Math.max(maxValue, value);
+					}
+					m_valueField.setText("" + (maxValue + 1));
+					m_valueField.selectAll();
+				}
+			}
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Validation
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    protected String validate() {
-      // name of field
-      {
-        final String name = m_nameField.getText();
-        // check for valid identifier
-        {
-          IStatus status = JavaConventions.validateIdentifier(name);
-          if (status.getSeverity() == IStatus.ERROR) {
-            return status.getMessage();
-          }
-        }
-        // check for unique field name
-        {
-          TypeDeclaration typeDeclaration =
-              JavaInfoUtils.getTypeDeclaration(m_property.getJavaInfo());
-          final boolean[] hasSuchField = new boolean[1];
-          for (FieldDeclaration fieldDeclaration : typeDeclaration.getFields()) {
-            fieldDeclaration.accept(new ASTVisitor() {
-              @Override
-              public void endVisit(VariableDeclarationFragment node) {
-                hasSuchField[0] |= node.getName().getIdentifier().equals(name);
-              }
-            });
-          }
-          if (hasSuchField[0]) {
-            return MessageFormat.format(
-                ModelMessages.DialogButtonIdPropertyEditor_errFieldAlreadyExists,
-                name);
-          }
-        }
-      }
-      // value
-      {
-        String text = m_valueField.getText();
-        // prepare new value
-        int newValue = 0;
-        try {
-          newValue = Integer.parseInt(text);
-        } catch (Throwable e) {
-          return MessageFormat.format(
-              ModelMessages.DialogButtonIdPropertyEditor_errInvalidFieldValue,
-              text);
-        }
-        // check that this value is unique
-        List<FieldDeclaration> idList = getCustomIDs(m_property);
-        for (FieldDeclaration fieldDeclaration : idList) {
-          Integer value = (Integer) fieldDeclaration.getProperty(BUTTON_OFFSET_PROPERTY);
-          if (newValue == value.intValue()) {
-            String fieldName = (String) fieldDeclaration.getProperty(BUTTON_NAME_PROPERTY);
-            return MessageFormat.format(
-                ModelMessages.DialogButtonIdPropertyEditor_errUsedFieldValue,
-                text,
-                fieldName);
-          }
-        }
-      }
-      // OK
-      return null;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Validation
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		protected String validate() {
+			// name of field
+			{
+				final String name = m_nameField.getText();
+				// check for valid identifier
+				{
+					IStatus status = JavaConventions.validateIdentifier(name);
+					if (status.getSeverity() == IStatus.ERROR) {
+						return status.getMessage();
+					}
+				}
+				// check for unique field name
+				{
+					TypeDeclaration typeDeclaration =
+							JavaInfoUtils.getTypeDeclaration(m_property.getJavaInfo());
+					final boolean[] hasSuchField = new boolean[1];
+					for (FieldDeclaration fieldDeclaration : typeDeclaration.getFields()) {
+						fieldDeclaration.accept(new ASTVisitor() {
+							@Override
+							public void endVisit(VariableDeclarationFragment node) {
+								hasSuchField[0] |= node.getName().getIdentifier().equals(name);
+							}
+						});
+					}
+					if (hasSuchField[0]) {
+						return MessageFormat.format(
+								ModelMessages.DialogButtonIdPropertyEditor_errFieldAlreadyExists,
+								name);
+					}
+				}
+			}
+			// value
+			{
+				String text = m_valueField.getText();
+				// prepare new value
+				int newValue = 0;
+				try {
+					newValue = Integer.parseInt(text);
+				} catch (Throwable e) {
+					return MessageFormat.format(
+							ModelMessages.DialogButtonIdPropertyEditor_errInvalidFieldValue,
+							text);
+				}
+				// check that this value is unique
+				List<FieldDeclaration> idList = getCustomIDs(m_property);
+				for (FieldDeclaration fieldDeclaration : idList) {
+					Integer value = (Integer) fieldDeclaration.getProperty(BUTTON_OFFSET_PROPERTY);
+					if (newValue == value.intValue()) {
+						String fieldName = (String) fieldDeclaration.getProperty(BUTTON_NAME_PROPERTY);
+						return MessageFormat.format(
+								ModelMessages.DialogButtonIdPropertyEditor_errUsedFieldValue,
+								text,
+								fieldName);
+					}
+				}
+			}
+			// OK
+			return null;
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Utils
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    private Composite m_fieldsContainer;
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Utils
+		//
+		////////////////////////////////////////////////////////////////////////////
+		private Composite m_fieldsContainer;
 
-    /**
-     * Configures given {@link DialogField} for specific of this dialog.
-     */
-    protected final void doCreateField(DialogField dialogField, String labelText) {
-      dialogField.setLabelText(labelText);
-      dialogField.setDialogFieldListener(m_validateListener);
-      DialogFieldUtils.fillControls(m_fieldsContainer, dialogField, 2, 60);
-    }
-  }
+		/**
+		 * Configures given {@link DialogField} for specific of this dialog.
+		 */
+		protected final void doCreateField(DialogField dialogField, String labelText) {
+			dialogField.setLabelText(labelText);
+			dialogField.setDialogFieldListener(m_validateListener);
+			DialogFieldUtils.fillControls(m_fieldsContainer, dialogField, 2, 60);
+		}
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/DialogInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/DialogInfo.java
index 2b5612c35..b5b521ee4 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/DialogInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/DialogInfo.java
@@ -49,159 +49,159 @@
  * @coverage rcp.model.jface
  */
 public class DialogInfo extends WindowInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DialogInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-    // move properties "id", "text" and "default" for Button on top level
-    addBroadcastListener(new JavaInfoAddProperties() {
-      @Override
-      public void invoke(JavaInfo javaInfo, List<Property> properties) throws Exception {
-        configureButtonBarProperties(javaInfo, properties);
-      }
-    });
-    // add Button to palette
-    addBroadcastListener(new PaletteEventListener() {
-      @Override
-      public void entries(CategoryInfo category, List<EntryInfo> entries) throws Exception {
-        if (category.getId().equals("org.eclipse.wb.rcp.jface")) {
-          entries.add(new DialogButtonEntryInfo());
-        }
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DialogInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+		// move properties "id", "text" and "default" for Button on top level
+		addBroadcastListener(new JavaInfoAddProperties() {
+			@Override
+			public void invoke(JavaInfo javaInfo, List<Property> properties) throws Exception {
+				configureButtonBarProperties(javaInfo, properties);
+			}
+		});
+		// add Button to palette
+		addBroadcastListener(new PaletteEventListener() {
+			@Override
+			public void entries(CategoryInfo category, List<EntryInfo> entries) throws Exception {
+				if (category.getId().equals("org.eclipse.wb.rcp.jface")) {
+					entries.add(new DialogButtonEntryInfo());
+				}
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Button bar support
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the "button bar" {@link CompositeInfo}, or <code>null</code> if not found.
-   */
-  public CompositeInfo getButtonBar() {
-    final CompositeInfo[] buttonBar = new CompositeInfo[1];
-    accept(new ObjectInfoVisitor() {
-      @Override
-      public void endVisit(ObjectInfo objectInfo) throws Exception {
-        if (buttonBar[0] == null && objectInfo instanceof CompositeInfo) {
-          CompositeInfo composite = (CompositeInfo) objectInfo;
-          if (isButtonBar(composite)) {
-            buttonBar[0] = composite;
-          }
-        }
-      }
-    });
-    return buttonBar[0];
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Button bar support
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the "button bar" {@link CompositeInfo}, or <code>null</code> if not found.
+	 */
+	public CompositeInfo getButtonBar() {
+		final CompositeInfo[] buttonBar = new CompositeInfo[1];
+		accept(new ObjectInfoVisitor() {
+			@Override
+			public void endVisit(ObjectInfo objectInfo) throws Exception {
+				if (buttonBar[0] == null && objectInfo instanceof CompositeInfo) {
+					CompositeInfo composite = (CompositeInfo) objectInfo;
+					if (isButtonBar(composite)) {
+						buttonBar[0] = composite;
+					}
+				}
+			}
+		});
+		return buttonBar[0];
+	}
 
-  /**
-   * Moves "id/title/default" {@link Property}'s of "button" on "button bar".
-   */
-  private void configureButtonBarProperties(JavaInfo javaInfo, List<Property> properties)
-      throws Exception {
-    if (javaInfo instanceof ControlInfo
-        && javaInfo.getDescription().getComponentClass().getName().equals(
-            "org.eclipse.swt.widgets.Button")
-        && javaInfo.getParent() == getButtonBar()) {
-      for (Property property : properties) {
-        if (property.getTitle().equals("Factory")) {
-          IComplexPropertyEditor factoryEditor = (IComplexPropertyEditor) property.getEditor();
-          Property[] factoryProperties = factoryEditor.getProperties(property);
-          for (Property factoryProperty : factoryProperties) {
-            if (factoryProperty.getTitle().equals("id")) {
-              GenericPropertyImpl idProperty = getCopy(factoryProperty, "ID", -3);
-              properties.add(0, idProperty);
-            }
-            if (factoryProperty.getTitle().equals("text")) {
-              GenericPropertyImpl titleProperty = getCopy(factoryProperty, "Text", -2);
-              properties.add(1, titleProperty);
-            }
-            if (factoryProperty.getTitle().equals("default")) {
-              GenericPropertyImpl defaultProperty = getCopy(factoryProperty, "Default", -1);
-              properties.add(2, defaultProperty);
-            }
-          }
-          // OK, we've changes properties
-          break;
-        }
-      }
-    }
-  }
+	/**
+	 * Moves "id/title/default" {@link Property}'s of "button" on "button bar".
+	 */
+	private void configureButtonBarProperties(JavaInfo javaInfo, List<Property> properties)
+			throws Exception {
+		if (javaInfo instanceof ControlInfo
+				&& javaInfo.getDescription().getComponentClass().getName().equals(
+						"org.eclipse.swt.widgets.Button")
+				&& javaInfo.getParent() == getButtonBar()) {
+			for (Property property : properties) {
+				if (property.getTitle().equals("Factory")) {
+					IComplexPropertyEditor factoryEditor = (IComplexPropertyEditor) property.getEditor();
+					Property[] factoryProperties = factoryEditor.getProperties(property);
+					for (Property factoryProperty : factoryProperties) {
+						if (factoryProperty.getTitle().equals("id")) {
+							GenericPropertyImpl idProperty = getCopy(factoryProperty, "ID", -3);
+							properties.add(0, idProperty);
+						}
+						if (factoryProperty.getTitle().equals("text")) {
+							GenericPropertyImpl titleProperty = getCopy(factoryProperty, "Text", -2);
+							properties.add(1, titleProperty);
+						}
+						if (factoryProperty.getTitle().equals("default")) {
+							GenericPropertyImpl defaultProperty = getCopy(factoryProperty, "Default", -1);
+							properties.add(2, defaultProperty);
+						}
+					}
+					// OK, we've changes properties
+					break;
+				}
+			}
+		}
+	}
 
-  /**
-   * @return the copy of given {@link GenericPropertyImpl} with new title/category.
-   */
-  private GenericPropertyImpl getCopy(Property property, String newTitle, int newCategory)
-      throws Exception {
-    GenericPropertyImpl newProperty = (GenericPropertyImpl) getArbitraryValue(property);
-    if (newProperty == null) {
-      newProperty = new GenericPropertyImpl((GenericPropertyImpl) property, newTitle);
-      newProperty.setCategory(PropertyCategory.system(newCategory));
-      putArbitraryValue(property, newProperty);
-    }
-    return newProperty;
-  }
+	/**
+	 * @return the copy of given {@link GenericPropertyImpl} with new title/category.
+	 */
+	private GenericPropertyImpl getCopy(Property property, String newTitle, int newCategory)
+			throws Exception {
+		GenericPropertyImpl newProperty = (GenericPropertyImpl) getArbitraryValue(property);
+		if (newProperty == null) {
+			newProperty = new GenericPropertyImpl((GenericPropertyImpl) property, newTitle);
+			newProperty.setCategory(PropertyCategory.system(newCategory));
+			putArbitraryValue(property, newProperty);
+		}
+		return newProperty;
+	}
 
-  /**
-   * @return <code>true</code> if given {@link CompositeInfo} if "parent" in
-   *         {@link Dialog#createButtonsForButtonBar(Composite)}.
-   */
-  public static boolean isButtonBar(CompositeInfo composite) {
-    if (composite.getRoot() instanceof DialogInfo
-        && composite.getCreationSupport() instanceof MethodParameterCreationSupport) {
-      SingleVariableDeclaration parameter =
-          (SingleVariableDeclaration) composite.getCreationSupport().getNode();
-      MethodDeclaration methodDeclaration = (MethodDeclaration) parameter.getParent();
-      String methodSignature = AstNodeUtils.getMethodSignature(methodDeclaration);
-      return methodSignature.equals("createButtonsForButtonBar(org.eclipse.swt.widgets.Composite)");
-    }
-    return false;
-  }
+	/**
+	 * @return <code>true</code> if given {@link CompositeInfo} if "parent" in
+	 *         {@link Dialog#createButtonsForButtonBar(Composite)}.
+	 */
+	public static boolean isButtonBar(CompositeInfo composite) {
+		if (composite.getRoot() instanceof DialogInfo
+				&& composite.getCreationSupport() instanceof MethodParameterCreationSupport) {
+			SingleVariableDeclaration parameter =
+					(SingleVariableDeclaration) composite.getCreationSupport().getNode();
+			MethodDeclaration methodDeclaration = (MethodDeclaration) parameter.getParent();
+			String methodSignature = AstNodeUtils.getMethodSignature(methodDeclaration);
+			return methodSignature.equals("createButtonsForButtonBar(org.eclipse.swt.widgets.Composite)");
+		}
+		return false;
+	}
 
-  /**
-   * Adds new "button" on "button bar".
-   *
-   * @return the added button {@link ControlInfo}.
-   */
-  public static ControlInfo createButtonOnButtonBar(CompositeInfo buttonBar, ControlInfo nextButton)
-      throws Exception {
-    AstEditor editor = buttonBar.getEditor();
-    // prepare CreationSupport
-    CreationSupport creationSupport;
-    {
-      DialogInfo dialog = (DialogInfo) buttonBar.getRootJava();
-      String signature =
-          "createButton(org.eclipse.swt.widgets.Composite,int,java.lang.String,boolean)";
-      String source = "createButton(%parent%, 0, \"New button\", false)";
-      creationSupport = new ImplicitFactoryCreationSupport(dialog, signature, source);
-    }
-    // do add
-    ControlInfo button =
-        (ControlInfo) JavaInfoUtils.createJavaInfo(
-            editor,
-            "org.eclipse.swt.widgets.Button",
-            creationSupport);
-    JavaInfoUtils.add(
-        button,
-        new EmptyPureVariableSupport(button),
-        PureFlatStatementGenerator.INSTANCE,
-        AssociationObjects.factoryParent(),
-        buttonBar,
-        nextButton);
-    return button;
-  }
+	/**
+	 * Adds new "button" on "button bar".
+	 *
+	 * @return the added button {@link ControlInfo}.
+	 */
+	public static ControlInfo createButtonOnButtonBar(CompositeInfo buttonBar, ControlInfo nextButton)
+			throws Exception {
+		AstEditor editor = buttonBar.getEditor();
+		// prepare CreationSupport
+		CreationSupport creationSupport;
+		{
+			DialogInfo dialog = (DialogInfo) buttonBar.getRootJava();
+			String signature =
+					"createButton(org.eclipse.swt.widgets.Composite,int,java.lang.String,boolean)";
+			String source = "createButton(%parent%, 0, \"New button\", false)";
+			creationSupport = new ImplicitFactoryCreationSupport(dialog, signature, source);
+		}
+		// do add
+		ControlInfo button =
+				(ControlInfo) JavaInfoUtils.createJavaInfo(
+						editor,
+						"org.eclipse.swt.widgets.Button",
+						creationSupport);
+		JavaInfoUtils.add(
+				button,
+				new EmptyPureVariableSupport(button),
+				PureFlatStatementGenerator.INSTANCE,
+				AssociationObjects.factoryParent(),
+				buttonBar,
+				nextButton);
+		return button;
+	}
 
-  /**
-   * Moves "button" on "buttonBar".
-   */
-  public static void moveButtonOnButtonBar(ControlInfo button, ControlInfo nextButton)
-      throws Exception {
-    JavaInfoUtils.move(button, null, button.getParentJava(), nextButton);
-  }
+	/**
+	 * Moves "button" on "buttonBar".
+	 */
+	public static void moveButtonOnButtonBar(ControlInfo button, ControlInfo nextButton)
+			throws Exception {
+		JavaInfoUtils.move(button, null, button.getParentJava(), nextButton);
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/DialogPageImplInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/DialogPageImplInfo.java
index 2c20a1b05..a978e1bf4 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/DialogPageImplInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/DialogPageImplInfo.java
@@ -30,70 +30,70 @@
  * @coverage rcp.model.jface
  */
 public class DialogPageImplInfo extends DialogPageInfo implements IJavaInfoRendering {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DialogPageImplInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-    JavaInfoUtils.scheduleSpecialRendering(this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DialogPageImplInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+		JavaInfoUtils.scheduleSpecialRendering(this);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Rendering
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void render() throws Exception {
-    m_shell = ContainerSupport.createShell();
-    ContainerSupport.setFillLayout(m_shell);
-    //
-    ReflectionUtils.invokeMethod(
-        getObject(),
-        "createControl(org.eclipse.swt.widgets.Composite)",
-        m_shell);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Rendering
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void render() throws Exception {
+		m_shell = ContainerSupport.createShell();
+		ContainerSupport.setFillLayout(m_shell);
+		//
+		ReflectionUtils.invokeMethod(
+				getObject(),
+				"createControl(org.eclipse.swt.widgets.Composite)",
+				m_shell);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void refresh_afterCreate() throws Exception {
-    // clear LayoutData, because FillLayout does not want any
-    {
-      Object[] childControls = ContainerSupport.getChildren(m_shell);
-      if (childControls.length == 1) {
-        ControlSupport.setLayoutData(childControls[0], null);
-      }
-    }
-    // continue
-    super.refresh_afterCreate();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void refresh_afterCreate() throws Exception {
+		// clear LayoutData, because FillLayout does not want any
+		{
+			Object[] childControls = ContainerSupport.getChildren(m_shell);
+			if (childControls.length == 1) {
+				ControlSupport.setLayoutData(childControls[0], null);
+			}
+		}
+		// continue
+		super.refresh_afterCreate();
+	}
 
-  @Override
-  protected void refresh_fetch() throws Exception {
-    ControlInfo.refresh_fetch(this, new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        DialogPageImplInfo.super.refresh_fetch();
-      }
-    });
-  }
+	@Override
+	protected void refresh_fetch() throws Exception {
+		ControlInfo.refresh_fetch(this, new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				DialogPageImplInfo.super.refresh_fetch();
+			}
+		});
+	}
 
-  @Override
-  public void refresh_dispose() throws Exception {
-    // dispose Shell
-    if (m_shell != null) {
-      ControlSupport.dispose(m_shell);
-      m_shell = null;
-    }
-    // call "super"
-    super.refresh_dispose();
-  }
+	@Override
+	public void refresh_dispose() throws Exception {
+		// dispose Shell
+		if (m_shell != null) {
+			ControlSupport.dispose(m_shell);
+			m_shell = null;
+		}
+		// call "super"
+		super.refresh_dispose();
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/DialogPageInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/DialogPageInfo.java
index 47d7b8cec..418251d13 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/DialogPageInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/DialogPageInfo.java
@@ -27,63 +27,63 @@
  * @coverage rcp.model.jface
  */
 public abstract class DialogPageInfo extends AbstractComponentInfo {
-  protected Object m_shell;
+	protected Object m_shell;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DialogPageInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DialogPageInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AbstractComponentInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected TopBoundsSupport createTopBoundsSupport() {
-    return new DialogPageTopBoundsSupport(this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AbstractComponentInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected TopBoundsSupport createTopBoundsSupport() {
+		return new DialogPageTopBoundsSupport(this);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Hierarchy
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean canBeRoot() {
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Hierarchy
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean canBeRoot() {
+		return true;
+	}
 
-  @Override
-  public Object getComponentObject() {
-    return m_shell;
-  }
+	@Override
+	public Object getComponentObject() {
+		return m_shell;
+	}
 
-  /**
-   * @return the {@link DialogPageInfo}'s Shell.
-   */
-  Object getShell() {
-    return m_shell;
-  }
+	/**
+	 * @return the {@link DialogPageInfo}'s Shell.
+	 */
+	Object getShell() {
+		return m_shell;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void refresh_fetch() throws Exception {
-    ControlInfo.refresh_fetch(this, new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        DialogPageInfo.super.refresh_fetch();
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void refresh_fetch() throws Exception {
+		ControlInfo.refresh_fetch(this, new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				DialogPageInfo.super.refresh_fetch();
+			}
+		});
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/DialogPageTopBoundsSupport.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/DialogPageTopBoundsSupport.java
index 289e9544c..4b3ade88b 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/DialogPageTopBoundsSupport.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/DialogPageTopBoundsSupport.java
@@ -23,51 +23,51 @@
  * @coverage rcp.model.jface
  */
 public final class DialogPageTopBoundsSupport extends TopBoundsSupport {
-  private final DialogPageInfo m_page;
+	private final DialogPageInfo m_page;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DialogPageTopBoundsSupport(DialogPageInfo page) {
-    super(page);
-    m_page = page;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DialogPageTopBoundsSupport(DialogPageInfo page) {
+		super(page);
+		m_page = page;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // TopBoundsSupport
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void apply() throws Exception {
-    // set size from resource properties (or default)
-    {
-      Dimension size = getResourceSize();
-      ControlSupport.setSize(m_page.getShell(), size.width, size.height);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// TopBoundsSupport
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void apply() throws Exception {
+		// set size from resource properties (or default)
+		{
+			Dimension size = getResourceSize();
+			ControlSupport.setSize(m_page.getShell(), size.width, size.height);
+		}
+	}
 
-  @Override
-  public void setSize(int width, int height) throws Exception {
-    // remember size in resource properties
-    setResourceSize(width, height);
-  }
+	@Override
+	public void setSize(int width, int height) throws Exception {
+		// remember size in resource properties
+		setResourceSize(width, height);
+	}
 
-  @Override
-  protected Dimension getDefaultSize() {
-    return new Dimension(600, 500);
-  }
+	@Override
+	protected Dimension getDefaultSize() {
+		return new Dimension(600, 500);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Show
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean show() throws Exception {
-    CompositeTopBoundsSupport.show(m_page, m_page.getShell());
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Show
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean show() throws Exception {
+		CompositeTopBoundsSupport.show(m_page, m_page.getShell());
+		return true;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/FieldEditorInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/FieldEditorInfo.java
index 8cee46d93..0cf572240 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/FieldEditorInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/FieldEditorInfo.java
@@ -60,232 +60,232 @@
  * @coverage rcp.model.jface
  */
 public final class FieldEditorInfo extends AbstractComponentInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FieldEditorInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-    // support for copy/paste
-    addBroadcastListener(new JavaEventListener() {
-      @Override
-      public void clipboardCopy_Argument(JavaInfo javaInfo,
-          ParameterDescription parameter,
-          Expression argument,
-          String[] source) throws Exception {
-        if (javaInfo instanceof FieldEditorInfo && isParameterComposite(parameter)) {
-          source[0] = "%parentComposite%";
-        }
-      }
-    });
-    // remember Control's of FieldEditor
-    addBroadcastListener(new EvaluationEventListener() {
-      private final List<Object> m_beforeControls = Lists.newArrayList();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FieldEditorInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+		// support for copy/paste
+		addBroadcastListener(new JavaEventListener() {
+			@Override
+			public void clipboardCopy_Argument(JavaInfo javaInfo,
+					ParameterDescription parameter,
+					Expression argument,
+					String[] source) throws Exception {
+				if (javaInfo instanceof FieldEditorInfo && isParameterComposite(parameter)) {
+					source[0] = "%parentComposite%";
+				}
+			}
+		});
+		// remember Control's of FieldEditor
+		addBroadcastListener(new EvaluationEventListener() {
+			private final List<Object> m_beforeControls = Lists.newArrayList();
 
-      @Override
-      public void evaluateBefore(EvaluationContext context, ASTNode node) throws Exception {
-        if (node == getCreationSupport().getNode()) {
-          m_beforeControls.clear();
-          appendControls(getShell(), m_beforeControls);
-        }
-      }
+			@Override
+			public void evaluateBefore(EvaluationContext context, ASTNode node) throws Exception {
+				if (node == getCreationSupport().getNode()) {
+					m_beforeControls.clear();
+					appendControls(getShell(), m_beforeControls);
+				}
+			}
 
-      @Override
-      public void evaluateAfter(EvaluationContext context, ASTNode node) throws Exception {
-        if (getRoot() instanceof PreferencePageInfo || getRoot() instanceof WorkbenchPartLikeInfo) {
-          ASTNode creationNode = getCreationSupport().getNode();
-          Statement creationStatement = AstNodeUtils.getEnclosingStatement(creationNode);
-          if (node == creationStatement) {
-            appendControls(getShell(), m_controls);
-            m_controls.removeAll(m_beforeControls);
-          }
-        }
-      }
+			@Override
+			public void evaluateAfter(EvaluationContext context, ASTNode node) throws Exception {
+				if (getRoot() instanceof PreferencePageInfo || getRoot() instanceof WorkbenchPartLikeInfo) {
+					ASTNode creationNode = getCreationSupport().getNode();
+					Statement creationStatement = AstNodeUtils.getEnclosingStatement(creationNode);
+					if (node == creationStatement) {
+						appendControls(getShell(), m_controls);
+						m_controls.removeAll(m_beforeControls);
+					}
+				}
+			}
 
-      /**
-       * @return the top level {@link Shell}
-       */
-      private Object getShell() {
-        ObjectInfo root = EditorState.getActiveJavaInfo().getRoot();
-        if (root instanceof PreferencePageInfo) {
-          return ((PreferencePageInfo) root).getShell();
-        } else if (root instanceof WorkbenchPartLikeInfo) {
-          return ((WorkbenchPartLikeInfo) root).getShell();
-        }
-        return null;
-      }
-    });
-  }
+			/**
+			 * @return the top level {@link Shell}
+			 */
+			private Object getShell() {
+				ObjectInfo root = EditorState.getActiveJavaInfo().getRoot();
+				if (root instanceof PreferencePageInfo) {
+					return ((PreferencePageInfo) root).getShell();
+				} else if (root instanceof WorkbenchPartLikeInfo) {
+					return ((WorkbenchPartLikeInfo) root).getShell();
+				}
+				return null;
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Initialize
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void createExposedChildren() throws Exception {
-    super.createExposedChildren();
-    String exposedMethodsString = JavaInfoUtils.getParameter(this, "FieldEditor.exposeMethods");
-    if (exposedMethodsString != null) {
-      for (String exposedMethodName : StringUtils.split(exposedMethodsString)) {
-        Method exposeMethod =
-            ReflectionUtils.getMethodBySignature(
-                getDescription().getComponentClass(),
-                exposedMethodName + "(org.eclipse.swt.widgets.Composite)");
-        Assert.isNotNull(
-            exposeMethod,
-            "Unable to find expose method %s(Composite) for %s.",
-            exposedMethodName,
-            getDescription().getComponentClass());
-        // create sub-component
-        ControlInfo subComponent =
-            (ControlInfo) JavaInfoUtils.createJavaInfo(
-                getEditor(),
-                exposeMethod.getReturnType(),
-                new FieldEditorSubComponentCreationSupport(this, exposeMethod));
-        {
-          VariableSupport variableSupport =
-              new FieldEditorSubComponentVariableSupport(subComponent, this, exposeMethod);
-          subComponent.setVariableSupport(variableSupport);
-        }
-        subComponent.setAssociation(new ImplicitObjectAssociation(this));
-        // should be initialized
-        Assert.isNotNull(
-            subComponent.getObject(),
-            "Sub-component %s is not initialized in %s.",
-            exposedMethodName,
-            this);
-        // add sub-component
-        addChild(subComponent);
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Initialize
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void createExposedChildren() throws Exception {
+		super.createExposedChildren();
+		String exposedMethodsString = JavaInfoUtils.getParameter(this, "FieldEditor.exposeMethods");
+		if (exposedMethodsString != null) {
+			for (String exposedMethodName : StringUtils.split(exposedMethodsString)) {
+				Method exposeMethod =
+						ReflectionUtils.getMethodBySignature(
+								getDescription().getComponentClass(),
+								exposedMethodName + "(org.eclipse.swt.widgets.Composite)");
+				Assert.isNotNull(
+						exposeMethod,
+						"Unable to find expose method %s(Composite) for %s.",
+						exposedMethodName,
+						getDescription().getComponentClass());
+				// create sub-component
+				ControlInfo subComponent =
+						(ControlInfo) JavaInfoUtils.createJavaInfo(
+								getEditor(),
+								exposeMethod.getReturnType(),
+								new FieldEditorSubComponentCreationSupport(this, exposeMethod));
+				{
+					VariableSupport variableSupport =
+							new FieldEditorSubComponentVariableSupport(subComponent, this, exposeMethod);
+					subComponent.setVariableSupport(variableSupport);
+				}
+				subComponent.setAssociation(new ImplicitObjectAssociation(this));
+				// should be initialized
+				Assert.isNotNull(
+						subComponent.getObject(),
+						"Sub-component %s is not initialized in %s.",
+						exposedMethodName,
+						this);
+				// add sub-component
+				addChild(subComponent);
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if given {@link ParameterDescription} is "parentComposite" that
-   *         should be passed into each {@link FieldEditor} constructor.
-   */
-  static boolean isParameterComposite(ParameterDescription parameter) {
-    return parameter.hasTrueTag("parentComposite");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if given {@link ParameterDescription} is "parentComposite" that
+	 *         should be passed into each {@link FieldEditor} constructor.
+	 */
+	static boolean isParameterComposite(ParameterDescription parameter) {
+		return parameter.hasTrueTag("parentComposite");
+	}
 
-  /**
-   * @return the {@link ControlInfo} children (exposed).
-   */
-  public List<ControlInfo> getChildControls() {
-    return getChildren(ControlInfo.class);
-  }
+	/**
+	 * @return the {@link ControlInfo} children (exposed).
+	 */
+	public List<ControlInfo> getChildControls() {
+		return getChildren(ControlInfo.class);
+	}
 
-  @Override
-  public Object getComponentObject() {
-    if (!m_controls.isEmpty()) {
-      if (ContainerSupport.isComposite(m_controls.get(0))) {
-        return m_controls.get(0);
-      } else {
-        return ((AbstractComponentInfo) getParent()).getComponentObject();
-      }
-    }
-    return super.getComponentObject();
-  }
+	@Override
+	public Object getComponentObject() {
+		if (!m_controls.isEmpty()) {
+			if (ContainerSupport.isComposite(m_controls.get(0))) {
+				return m_controls.get(0);
+			} else {
+				return ((AbstractComponentInfo) getParent()).getComponentObject();
+			}
+		}
+		return super.getComponentObject();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final IObjectPresentation m_presentation = new DefaultJavaInfoPresentation(this) {
-    @Override
-    public List<ObjectInfo> getChildrenGraphical() throws Exception {
-      return ImmutableList.of();
-    }
-  };
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final IObjectPresentation m_presentation = new DefaultJavaInfoPresentation(this) {
+		@Override
+		public List<ObjectInfo> getChildrenGraphical() throws Exception {
+			return ImmutableList.of();
+		}
+	};
 
-  @Override
-  public IObjectPresentation getPresentation() {
-    return m_presentation;
-  }
+	@Override
+	public IObjectPresentation getPresentation() {
+		return m_presentation;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final List<Object> m_controls = Lists.newArrayList();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final List<Object> m_controls = Lists.newArrayList();
 
-  /**
-   * Appends direct/indirect children of given {@link Control}.
-   */
-  private static void appendControls(Object control, List<Object> controls) throws Exception {
-    if (control == null) {
-      return;
-    }
-    controls.add(control);
-    if (ContainerSupport.isComposite(control)) {
-      Object[] children = ContainerSupport.getChildren(control);
-      for (Object child : children) {
-        appendControls(child, controls);
-      }
-    }
-  }
+	/**
+	 * Appends direct/indirect children of given {@link Control}.
+	 */
+	private static void appendControls(Object control, List<Object> controls) throws Exception {
+		if (control == null) {
+			return;
+		}
+		controls.add(control);
+		if (ContainerSupport.isComposite(control)) {
+			Object[] children = ContainerSupport.getChildren(control);
+			for (Object child : children) {
+				appendControls(child, controls);
+			}
+		}
+	}
 
-  @Override
-  public void refresh_dispose() throws Exception {
-    m_controls.clear();
-    super.refresh_dispose();
-  }
+	@Override
+	public void refresh_dispose() throws Exception {
+		m_controls.clear();
+		super.refresh_dispose();
+	}
 
-  @Override
-  protected void refresh_fetch() throws Exception {
-    // prepare enclosing bounds for FieldEditor Control's
-    Assert.isLegal(!m_controls.isEmpty());
-    if (ContainerSupport.isComposite(m_controls.get(0))) {
-      Object composite = m_controls.get(0);
-      ControlInfo.refresh_fetch(this, composite, null);
-    } else {
-      // keep only "top level" Control's, remove any children
-      for (Iterator<Object> I = m_controls.iterator(); I.hasNext();) {
-        Object control = I.next();
-        do {
-          control = ControlSupport.getParent(control);
-          if (m_controls.contains(control)) {
-            I.remove();
-            break;
-          }
-        } while (control != null);
-      }
-      // prepare "bounds" as intersection of all Control's
-      Rectangle bounds = new Rectangle();
-      for (Object control : m_controls) {
-        Rectangle controlBounds = ControlSupport.getBounds(control);
-        if (bounds.isEmpty()) {
-          bounds = controlBounds;
-        } else {
-          bounds.union(controlBounds);
-        }
-      }
-      // model bounds
-      setModelBounds(bounds.getCopy());
-      // convert into "shot"
-      {
-        Object control = m_controls.get(0);
-        Object parentControl = ((AbstractComponentInfo) getParent()).getComponentObject();
-        Point controlLocation = CoordinateUtils.getDisplayLocation(control, bounds.x, bounds.y);
-        Point parentLocation = CoordinateUtils.getDisplayLocation(parentControl);
-        bounds.x = controlLocation.x - parentLocation.x;
-        bounds.y = controlLocation.y - parentLocation.y;
-      }
-      // remember
-      setBounds(bounds);
-    }
-    // process children
-    super.refresh_fetch();
-  }
+	@Override
+	protected void refresh_fetch() throws Exception {
+		// prepare enclosing bounds for FieldEditor Control's
+		Assert.isLegal(!m_controls.isEmpty());
+		if (ContainerSupport.isComposite(m_controls.get(0))) {
+			Object composite = m_controls.get(0);
+			ControlInfo.refresh_fetch(this, composite, null);
+		} else {
+			// keep only "top level" Control's, remove any children
+			for (Iterator<Object> I = m_controls.iterator(); I.hasNext();) {
+				Object control = I.next();
+				do {
+					control = ControlSupport.getParent(control);
+					if (m_controls.contains(control)) {
+						I.remove();
+						break;
+					}
+				} while (control != null);
+			}
+			// prepare "bounds" as intersection of all Control's
+			Rectangle bounds = new Rectangle();
+			for (Object control : m_controls) {
+				Rectangle controlBounds = ControlSupport.getBounds(control);
+				if (bounds.isEmpty()) {
+					bounds = controlBounds;
+				} else {
+					bounds.union(controlBounds);
+				}
+			}
+			// model bounds
+			setModelBounds(bounds.getCopy());
+			// convert into "shot"
+			{
+				Object control = m_controls.get(0);
+				Object parentControl = ((AbstractComponentInfo) getParent()).getComponentObject();
+				Point controlLocation = CoordinateUtils.getDisplayLocation(control, bounds.x, bounds.y);
+				Point parentLocation = CoordinateUtils.getDisplayLocation(parentControl);
+				bounds.x = controlLocation.x - parentLocation.x;
+				bounds.y = controlLocation.y - parentLocation.y;
+			}
+			// remember
+			setBounds(bounds);
+		}
+		// process children
+		super.refresh_fetch();
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/FieldEditorLabelsConstantsPropertyEditor.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/FieldEditorLabelsConstantsPropertyEditor.java
index a616b0c7c..50312a86f 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/FieldEditorLabelsConstantsPropertyEditor.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/FieldEditorLabelsConstantsPropertyEditor.java
@@ -68,302 +68,302 @@
  * @coverage rcp.model.jface
  */
 public final class FieldEditorLabelsConstantsPropertyEditor extends TextDialogPropertyEditor {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final PropertyEditor INSTANCE = new FieldEditorLabelsConstantsPropertyEditor();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final PropertyEditor INSTANCE = new FieldEditorLabelsConstantsPropertyEditor();
 
-  private FieldEditorLabelsConstantsPropertyEditor() {
-  }
+	private FieldEditorLabelsConstantsPropertyEditor() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getText(Property property) throws Exception {
-    return ModelMessages.FieldEditorLabelsConstantsPropertyEditor_text;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getText(Property property) throws Exception {
+		return ModelMessages.FieldEditorLabelsConstantsPropertyEditor_text;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void openDialog(Property _property) throws Exception {
-    GenericProperty property = (GenericProperty) _property;
-    LabelsValues_Dialog dialog = new LabelsValues_Dialog(DesignerPlugin.getShell(), property);
-    if (dialog.open() == Window.OK) {
-      setLabelsFields(dialog.m_resultLabels, dialog.m_resultFields, property);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void openDialog(Property _property) throws Exception {
+		GenericProperty property = (GenericProperty) _property;
+		LabelsValues_Dialog dialog = new LabelsValues_Dialog(DesignerPlugin.getShell(), property);
+		if (dialog.open() == Window.OK) {
+			setLabelsFields(dialog.m_resultLabels, dialog.m_resultFields, property);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing implementation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the textual presentation of {@link Expression} for given {@link GenericProperty}, may
-   *         be empty {@link String}. Ignores invalid elements of array.
-   */
-  private static String getTextForEditing(GenericProperty property) throws Exception {
-    if (property.isModified()) {
-      StringBuilder stringBuilder = new StringBuilder();
-      JavaInfo javaInfo = property.getJavaInfo();
-      IJavaProject javaProject = javaInfo.getEditor().getJavaProject();
-      // analyze Expression's
-      ArrayCreation itemsCreation = (ArrayCreation) property.getExpression();
-      ArrayInitializer itemsInitializer = itemsCreation.getInitializer();
-      for (Expression itemExpression : DomGenerics.expressions(itemsInitializer)) {
-        // prepare {label, value} initializer
-        ArrayInitializer itemInitializer;
-        if (itemExpression instanceof ArrayInitializer) {
-          itemInitializer = (ArrayInitializer) itemExpression;
-        } else {
-          itemInitializer = ((ArrayCreation) itemExpression).getInitializer();
-        }
-        // check that item has label/value pair
-        List<Expression> itemExpressions = DomGenerics.expressions(itemInitializer);
-        if (itemExpressions.size() == 2) {
-          String label = (String) JavaInfoEvaluationHelper.getValue(itemExpressions.get(0));
-          IField field =
-              ConstantSelectionPropertyEditor.getField(javaProject, itemExpressions.get(1));
-          if (field != null) {
-            stringBuilder.append(label);
-            stringBuilder.append(" ");
-            stringBuilder.append(ConstantSelectionPropertyEditor.getFieldCode(javaInfo, field));
-            stringBuilder.append(Text.DELIMITER);
-          }
-        }
-      }
-      return stringBuilder.toString();
-    } else {
-      return StringUtils.EMPTY;
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing implementation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the textual presentation of {@link Expression} for given {@link GenericProperty}, may
+	 *         be empty {@link String}. Ignores invalid elements of array.
+	 */
+	private static String getTextForEditing(GenericProperty property) throws Exception {
+		if (property.isModified()) {
+			StringBuilder stringBuilder = new StringBuilder();
+			JavaInfo javaInfo = property.getJavaInfo();
+			IJavaProject javaProject = javaInfo.getEditor().getJavaProject();
+			// analyze Expression's
+			ArrayCreation itemsCreation = (ArrayCreation) property.getExpression();
+			ArrayInitializer itemsInitializer = itemsCreation.getInitializer();
+			for (Expression itemExpression : DomGenerics.expressions(itemsInitializer)) {
+				// prepare {label, value} initializer
+				ArrayInitializer itemInitializer;
+				if (itemExpression instanceof ArrayInitializer) {
+					itemInitializer = (ArrayInitializer) itemExpression;
+				} else {
+					itemInitializer = ((ArrayCreation) itemExpression).getInitializer();
+				}
+				// check that item has label/value pair
+				List<Expression> itemExpressions = DomGenerics.expressions(itemInitializer);
+				if (itemExpressions.size() == 2) {
+					String label = (String) JavaInfoEvaluationHelper.getValue(itemExpressions.get(0));
+					IField field =
+							ConstantSelectionPropertyEditor.getField(javaProject, itemExpressions.get(1));
+					if (field != null) {
+						stringBuilder.append(label);
+						stringBuilder.append(" ");
+						stringBuilder.append(ConstantSelectionPropertyEditor.getFieldCode(javaInfo, field));
+						stringBuilder.append(Text.DELIMITER);
+					}
+				}
+			}
+			return stringBuilder.toString();
+		} else {
+			return StringUtils.EMPTY;
+		}
+	}
 
-  /**
-   * @return the error message or <code>null</code>.
-   */
-  private static String prepareLabelsFields(List<String> resultLabels,
-      List<IField> resultFields,
-      GenericProperty property,
-      String text) throws Exception {
-    IJavaProject javaProject;
-    String topTypeName;
-    {
-      JavaInfo javaInfo = property.getJavaInfo();
-      javaProject = javaInfo.getEditor().getJavaProject();
-      TypeDeclaration typeDeclaration = JavaInfoUtils.getTypeDeclaration(javaInfo);
-      topTypeName = AstNodeUtils.getFullyQualifiedName(typeDeclaration, false);
-    }
-    // prepare containers
-    List<String> tmpLabels = Lists.newArrayList();
-    List<IField> tmpFields = Lists.newArrayList();
-    resultLabels.clear();
-    resultFields.clear();
-    // analyze each line
-    String[] lines = StringUtils.split(text, Text.DELIMITER);
-    for (String line : lines) {
-      line = line.trim();
-      String[] words = StringUtils.split(line);
-      if (words.length < 2) {
-        return MessageFormat.format(
-            ModelMessages.FieldEditorLabelsConstantsPropertyEditor_errLabelField,
-            line);
-      }
-      // prepare "label" and "field" code
-      int lastSpaceIndex = StringUtils.lastIndexOf(line, " ");
-      String label = line.substring(0, lastSpaceIndex).trim();
-      String fieldCode = line.substring(lastSpaceIndex).trim();
-      // convert "fieldCode" into IField
-      IField field;
-      if (fieldCode.contains(".")) {
-        String typeName = StringUtils.substringBeforeLast(fieldCode, ".");
-        String fieldName = StringUtils.substringAfterLast(fieldCode, ".");
-        field = CodeUtils.findField(javaProject, typeName, fieldName);
-      } else {
-        field = CodeUtils.findField(javaProject, topTypeName, fieldCode);
-      }
-      // we should have IField
-      if (field == null) {
-        return MessageFormat.format(
-            ModelMessages.FieldEditorLabelsConstantsPropertyEditor_errInvalidFieldName,
-            line);
-      }
-      // add label/field
-      tmpLabels.add(label);
-      tmpFields.add(field);
-    }
-    // OK
-    resultLabels.addAll(tmpLabels);
-    resultFields.addAll(tmpFields);
-    return null;
-  }
+	/**
+	 * @return the error message or <code>null</code>.
+	 */
+	private static String prepareLabelsFields(List<String> resultLabels,
+			List<IField> resultFields,
+			GenericProperty property,
+			String text) throws Exception {
+		IJavaProject javaProject;
+		String topTypeName;
+		{
+			JavaInfo javaInfo = property.getJavaInfo();
+			javaProject = javaInfo.getEditor().getJavaProject();
+			TypeDeclaration typeDeclaration = JavaInfoUtils.getTypeDeclaration(javaInfo);
+			topTypeName = AstNodeUtils.getFullyQualifiedName(typeDeclaration, false);
+		}
+		// prepare containers
+		List<String> tmpLabels = Lists.newArrayList();
+		List<IField> tmpFields = Lists.newArrayList();
+		resultLabels.clear();
+		resultFields.clear();
+		// analyze each line
+		String[] lines = StringUtils.split(text, Text.DELIMITER);
+		for (String line : lines) {
+			line = line.trim();
+			String[] words = StringUtils.split(line);
+			if (words.length < 2) {
+				return MessageFormat.format(
+						ModelMessages.FieldEditorLabelsConstantsPropertyEditor_errLabelField,
+						line);
+			}
+			// prepare "label" and "field" code
+			int lastSpaceIndex = StringUtils.lastIndexOf(line, " ");
+			String label = line.substring(0, lastSpaceIndex).trim();
+			String fieldCode = line.substring(lastSpaceIndex).trim();
+			// convert "fieldCode" into IField
+			IField field;
+			if (fieldCode.contains(".")) {
+				String typeName = StringUtils.substringBeforeLast(fieldCode, ".");
+				String fieldName = StringUtils.substringAfterLast(fieldCode, ".");
+				field = CodeUtils.findField(javaProject, typeName, fieldName);
+			} else {
+				field = CodeUtils.findField(javaProject, topTypeName, fieldCode);
+			}
+			// we should have IField
+			if (field == null) {
+				return MessageFormat.format(
+						ModelMessages.FieldEditorLabelsConstantsPropertyEditor_errInvalidFieldName,
+						line);
+			}
+			// add label/field
+			tmpLabels.add(label);
+			tmpFields.add(field);
+		}
+		// OK
+		resultLabels.addAll(tmpLabels);
+		resultFields.addAll(tmpFields);
+		return null;
+	}
 
-  /**
-   * Sets the <code>String[][]</code> value using given labels and fields {@link List}'s.
-   */
-  private static void setLabelsFields(List<String> resultLabels,
-      List<IField> resultFields,
-      GenericProperty property) throws Exception {
-    JavaInfo javaInfo = property.getJavaInfo();
-    String source = "new String[][]{";
-    for (int i = 0; i < resultLabels.size(); i++) {
-      String label = resultLabels.get(i);
-      IField field = resultFields.get(i);
-      if (i != 0) {
-        source += ", ";
-      }
-      source += "{";
-      source += StringConverter.INSTANCE.toJavaSource(javaInfo, label);
-      source += ", ";
-      source += ConstantSelectionPropertyEditor.getFieldCode(javaInfo, field);
-      source += "}";
-    }
-    source += "}";
-    property.setExpression(source, Property.UNKNOWN_VALUE);
-  }
+	/**
+	 * Sets the <code>String[][]</code> value using given labels and fields {@link List}'s.
+	 */
+	private static void setLabelsFields(List<String> resultLabels,
+			List<IField> resultFields,
+			GenericProperty property) throws Exception {
+		JavaInfo javaInfo = property.getJavaInfo();
+		String source = "new String[][]{";
+		for (int i = 0; i < resultLabels.size(); i++) {
+			String label = resultLabels.get(i);
+			IField field = resultFields.get(i);
+			if (i != 0) {
+				source += ", ";
+			}
+			source += "{";
+			source += StringConverter.INSTANCE.toJavaSource(javaInfo, label);
+			source += ", ";
+			source += ConstantSelectionPropertyEditor.getFieldCode(javaInfo, field);
+			source += "}";
+		}
+		source += "}";
+		property.setExpression(source, Property.UNKNOWN_VALUE);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Dialog
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * The {@link Dialog} for editing label/value pairs.
-   */
-  private static final class LabelsValues_Dialog extends AbstractValidationTitleAreaDialog {
-    private final GenericProperty m_property;
-    private final JavaInfo m_javaInfo;
-    private final String m_text;
-    private final List<String> m_resultLabels = Lists.newArrayList();
-    private final List<IField> m_resultFields = Lists.newArrayList();
-    private final Set<IType> m_allTypes = Sets.newHashSet();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Dialog
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * The {@link Dialog} for editing label/value pairs.
+	 */
+	private static final class LabelsValues_Dialog extends AbstractValidationTitleAreaDialog {
+		private final GenericProperty m_property;
+		private final JavaInfo m_javaInfo;
+		private final String m_text;
+		private final List<String> m_resultLabels = Lists.newArrayList();
+		private final List<IField> m_resultFields = Lists.newArrayList();
+		private final Set<IType> m_allTypes = Sets.newHashSet();
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public LabelsValues_Dialog(Shell parentShell, GenericProperty property) throws Exception {
-      super(parentShell,
-          Activator.getDefault(),
-          property.getTitle(),
-          ModelMessages.FieldEditorLabelsConstantsPropertyEditor_dialogTitle,
-          null,
-          ModelMessages.FieldEditorLabelsConstantsPropertyEditor_dialogMessage);
-      m_property = property;
-      m_javaInfo = m_property.getJavaInfo();
-      m_text = getTextForEditing(property);
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public LabelsValues_Dialog(Shell parentShell, GenericProperty property) throws Exception {
+			super(parentShell,
+					Activator.getDefault(),
+					property.getTitle(),
+					ModelMessages.FieldEditorLabelsConstantsPropertyEditor_dialogTitle,
+					null,
+					ModelMessages.FieldEditorLabelsConstantsPropertyEditor_dialogMessage);
+			m_property = property;
+			m_javaInfo = m_property.getJavaInfo();
+			m_text = getTextForEditing(property);
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // GUI
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    private Text m_textWidget;
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// GUI
+		//
+		////////////////////////////////////////////////////////////////////////////
+		private Text m_textWidget;
 
-    @Override
-    protected void createControls(Composite container) {
-      GridLayoutFactory.create(container);
-      // header
-      new Label(container, SWT.NONE).setText(ModelMessages.FieldEditorLabelsConstantsPropertyEditor_dialogTextLabel);
-      // Text widget
-      {
-        m_textWidget = new Text(container, SWT.BORDER | SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
-        GridDataFactory.create(m_textWidget).grab().fill().hintVC(10);
-        m_textWidget.setText(m_text);
-        // add listeners
-        m_textWidget.addListener(SWT.Modify, new Listener() {
-          @Override
-          public void handleEvent(Event event) {
-            validateAll();
-          }
-        });
-        m_textWidget.addListener(SWT.KeyDown, new Listener() {
-          @Override
-          public void handleEvent(Event event) {
-            if (event.stateMask == SWT.CTRL && event.keyCode == 'f') {
-              event.doit = false;
-              ExecutionUtils.runLog(new RunnableEx() {
-                @Override
-                public void run() throws Exception {
-                  editLineField();
-                }
-              });
-            }
-          }
-        });
-      }
-      // footer
-      new Label(container, SWT.NONE).setText(ModelMessages.FieldEditorLabelsConstantsPropertyEditor_dialogFooter);
-    }
+		@Override
+		protected void createControls(Composite container) {
+			GridLayoutFactory.create(container);
+			// header
+			new Label(container, SWT.NONE).setText(ModelMessages.FieldEditorLabelsConstantsPropertyEditor_dialogTextLabel);
+			// Text widget
+			{
+				m_textWidget = new Text(container, SWT.BORDER | SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
+				GridDataFactory.create(m_textWidget).grab().fill().hintVC(10);
+				m_textWidget.setText(m_text);
+				// add listeners
+				m_textWidget.addListener(SWT.Modify, new Listener() {
+					@Override
+					public void handleEvent(Event event) {
+						validateAll();
+					}
+				});
+				m_textWidget.addListener(SWT.KeyDown, new Listener() {
+					@Override
+					public void handleEvent(Event event) {
+						if (event.stateMask == SWT.CTRL && event.keyCode == 'f') {
+							event.doit = false;
+							ExecutionUtils.runLog(new RunnableEx() {
+								@Override
+								public void run() throws Exception {
+									editLineField();
+								}
+							});
+						}
+					}
+				});
+			}
+			// footer
+			new Label(container, SWT.NONE).setText(ModelMessages.FieldEditorLabelsConstantsPropertyEditor_dialogFooter);
+		}
 
-    /**
-     * Edit {@link IField} of currently selected line.
-     */
-    private void editLineField() throws Exception {
-      Document document = new Document(m_textWidget.getText());
-      int selectionOffset = m_textWidget.getSelection().x;
-      int line = document.getLineOfOffset(selectionOffset);
-      int lineOffset = document.getLineOffset(line);
-      int lineLength = document.getLineLength(line);
-      if (document.getLineDelimiter(line) != null) {
-        lineLength -= document.getLineDelimiter(line).length();
-      }
-      // select new IField
-      IField currentField = line < m_resultFields.size() ? m_resultFields.get(line) : null;
-      IField selectedField =
-          ConstantSelectionPropertyEditor.selectField(
-              getShell(),
-              "java.lang.String",
-              m_javaInfo,
-              m_allTypes,
-              currentField);
-      // update model
-      if (selectedField != null) {
-        String label;
-        if (m_resultLabels.isEmpty()) {
-          label = document.get(lineOffset, lineLength);
-        } else {
-          label = m_resultLabels.get(line);
-        }
-        // replace line text
-        String newLineText =
-            label.trim()
-                + " "
-                + ConstantSelectionPropertyEditor.getFieldCode(m_javaInfo, selectedField);
-        document.replace(lineOffset, lineLength, newLineText);
-        // update Text widget
-        m_textWidget.setText(document.get());
-        m_textWidget.setSelection(lineOffset + newLineText.length());
-        // re-validate updated text
-        validateAll();
-      }
-    }
+		/**
+		 * Edit {@link IField} of currently selected line.
+		 */
+		private void editLineField() throws Exception {
+			Document document = new Document(m_textWidget.getText());
+			int selectionOffset = m_textWidget.getSelection().x;
+			int line = document.getLineOfOffset(selectionOffset);
+			int lineOffset = document.getLineOffset(line);
+			int lineLength = document.getLineLength(line);
+			if (document.getLineDelimiter(line) != null) {
+				lineLength -= document.getLineDelimiter(line).length();
+			}
+			// select new IField
+			IField currentField = line < m_resultFields.size() ? m_resultFields.get(line) : null;
+			IField selectedField =
+					ConstantSelectionPropertyEditor.selectField(
+							getShell(),
+							"java.lang.String",
+							m_javaInfo,
+							m_allTypes,
+							currentField);
+			// update model
+			if (selectedField != null) {
+				String label;
+				if (m_resultLabels.isEmpty()) {
+					label = document.get(lineOffset, lineLength);
+				} else {
+					label = m_resultLabels.get(line);
+				}
+				// replace line text
+				String newLineText =
+						label.trim()
+						+ " "
+						+ ConstantSelectionPropertyEditor.getFieldCode(m_javaInfo, selectedField);
+				document.replace(lineOffset, lineLength, newLineText);
+				// update Text widget
+				m_textWidget.setText(document.get());
+				m_textWidget.setSelection(lineOffset + newLineText.length());
+				// re-validate updated text
+				validateAll();
+			}
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Validation
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    protected String validate() throws Exception {
-      String errorMessage =
-          prepareLabelsFields(m_resultLabels, m_resultFields, m_property, m_textWidget.getText());
-      // remember all used IType's
-      for (IField field : m_resultFields) {
-        m_allTypes.add(field.getDeclaringType());
-      }
-      // may be OK, may be not...
-      return errorMessage;
-    }
-  }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Validation
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		protected String validate() throws Exception {
+			String errorMessage =
+					prepareLabelsFields(m_resultLabels, m_resultFields, m_property, m_textWidget.getText());
+			// remember all used IType's
+			for (IField field : m_resultFields) {
+				m_allTypes.add(field.getDeclaringType());
+			}
+			// may be OK, may be not...
+			return errorMessage;
+		}
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/FieldEditorPreferencePageInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/FieldEditorPreferencePageInfo.java
index 75791d72d..9b55f0c36 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/FieldEditorPreferencePageInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/FieldEditorPreferencePageInfo.java
@@ -48,131 +48,131 @@
  * @coverage rcp.model.jface
  */
 public final class FieldEditorPreferencePageInfo extends PreferencePageInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FieldEditorPreferencePageInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-    // support special broadcasts for FieldEditor's
-    addBroadcastListener(new JavaEventListener() {
-      @Override
-      public void associationTemplate(JavaInfo component, String[] source) throws Exception {
-        if (component.getParent() == FieldEditorPreferencePageInfo.this) {
-          source[0] = StringUtils.replace(source[0], "%parentComposite%", "getFieldEditorParent()");
-        }
-      }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FieldEditorPreferencePageInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+		// support special broadcasts for FieldEditor's
+		addBroadcastListener(new JavaEventListener() {
+			@Override
+			public void associationTemplate(JavaInfo component, String[] source) throws Exception {
+				if (component.getParent() == FieldEditorPreferencePageInfo.this) {
+					source[0] = StringUtils.replace(source[0], "%parentComposite%", "getFieldEditorParent()");
+				}
+			}
 
-      @Override
-      public void variable_emptyMaterializeBefore(EmptyVariableSupport variableSupport)
-          throws Exception {
-        if (variableSupport.getJavaInfo() instanceof FieldEditorInfo) {
-          FieldEditorInfo fieldEditor = (FieldEditorInfo) variableSupport.getJavaInfo();
-          convertStatementToBlock(fieldEditor);
-        }
-      }
-    });
-  }
+			@Override
+			public void variable_emptyMaterializeBefore(EmptyVariableSupport variableSupport)
+					throws Exception {
+				if (variableSupport.getJavaInfo() instanceof FieldEditorInfo) {
+					FieldEditorInfo fieldEditor = (FieldEditorInfo) variableSupport.getJavaInfo();
+					convertStatementToBlock(fieldEditor);
+				}
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link FieldEditorInfo} children.
-   */
-  public List<FieldEditorInfo> getEditors() {
-    return getChildren(FieldEditorInfo.class);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link FieldEditorInfo} children.
+	 */
+	public List<FieldEditorInfo> getEditors() {
+		return getChildren(FieldEditorInfo.class);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Creates new {@link FieldEditorInfo}.
-   */
-  public void command_CREATE(FieldEditorInfo editor, FieldEditorInfo nextEditor) throws Exception {
-    StatementTarget target = getTarget(editor, nextEditor);
-    if (getDescription().getToolkit().getPreferences().getBoolean(
-        IPreferenceConstants.PREF_FIELD_USUAL_CODE)) {
-      AssociationObject association =
-          AssociationObjects.invocationChild("%parent%.addField(%child%)", true);
-      JavaInfoUtils.addTarget(editor, association, this, nextEditor, target);
-    } else {
-      JavaInfoUtils.add(
-          editor,
-          new EmptyInvocationVariableSupport(editor, "%parent%.addField(%child%)", 0),
-          PureFlatStatementGenerator.INSTANCE,
-          AssociationObjects.invocationChildNull(),
-          this,
-          nextEditor,
-          target);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Creates new {@link FieldEditorInfo}.
+	 */
+	public void command_CREATE(FieldEditorInfo editor, FieldEditorInfo nextEditor) throws Exception {
+		StatementTarget target = getTarget(editor, nextEditor);
+		if (getDescription().getToolkit().getPreferences().getBoolean(
+				IPreferenceConstants.PREF_FIELD_USUAL_CODE)) {
+			AssociationObject association =
+					AssociationObjects.invocationChild("%parent%.addField(%child%)", true);
+			JavaInfoUtils.addTarget(editor, association, this, nextEditor, target);
+		} else {
+			JavaInfoUtils.add(
+					editor,
+					new EmptyInvocationVariableSupport(editor, "%parent%.addField(%child%)", 0),
+					PureFlatStatementGenerator.INSTANCE,
+					AssociationObjects.invocationChildNull(),
+					this,
+					nextEditor,
+					target);
+		}
+	}
 
-  /**
-   * Moves {@link FieldEditorInfo}.
-   */
-  public void command_MOVE(FieldEditorInfo editor, FieldEditorInfo nextEditor) throws Exception {
-    Preconditions.checkArgument(editor.getParent() == this, editor.getParent());
-    if (editor.getVariableSupport() instanceof EmptyVariableSupport) {
-      ObjectInfo oldParent = editor.getParent();
-      getBroadcastJava().moveBefore0(editor, oldParent, this);
-      getBroadcastJava().moveBefore(editor, oldParent, this);
-      // update source/AST
-      {
-        ASTNode editorNode = editor.getCreationSupport().getNode();
-        Statement editorStatement = AstNodeUtils.getEnclosingStatement(editorNode);
-        StatementTarget newTarget = getTarget(editor, nextEditor);
-        getEditor().moveStatement(editorStatement, newTarget);
-      }
-      // move model
-      oldParent.removeChild(editor);
-      addChild(editor, nextEditor);
-      getBroadcastJava().moveAfter(editor, oldParent, this);
-    } else {
-      JavaInfoUtils.move(editor, AssociationObjects.invocationChildNull(), this, nextEditor);
-    }
-  }
+	/**
+	 * Moves {@link FieldEditorInfo}.
+	 */
+	public void command_MOVE(FieldEditorInfo editor, FieldEditorInfo nextEditor) throws Exception {
+		Preconditions.checkArgument(editor.getParent() == this, editor.getParent());
+		if (editor.getVariableSupport() instanceof EmptyVariableSupport) {
+			ObjectInfo oldParent = editor.getParent();
+			getBroadcastJava().moveBefore0(editor, oldParent, this);
+			getBroadcastJava().moveBefore(editor, oldParent, this);
+			// update source/AST
+			{
+				ASTNode editorNode = editor.getCreationSupport().getNode();
+				Statement editorStatement = AstNodeUtils.getEnclosingStatement(editorNode);
+				StatementTarget newTarget = getTarget(editor, nextEditor);
+				getEditor().moveStatement(editorStatement, newTarget);
+			}
+			// move model
+			oldParent.removeChild(editor);
+			addChild(editor, nextEditor);
+			getBroadcastJava().moveAfter(editor, oldParent, this);
+		} else {
+			JavaInfoUtils.move(editor, AssociationObjects.invocationChildNull(), this, nextEditor);
+		}
+	}
 
-  /**
-   * @return the {@link StatementTarget} to move some {@link FieldEditorInfo} before
-   *         <code>nextEditor</code>.
-   */
-  private StatementTarget getTarget(FieldEditorInfo editor, FieldEditorInfo nextEditor)
-      throws Exception {
-    if (nextEditor != null) {
-      return JavaInfoUtils.getTarget(this, editor, nextEditor);
-    } else {
-      TypeDeclaration typeDeclaration = JavaInfoUtils.getTypeDeclaration(this);
-      MethodDeclaration targetMethod =
-          AstNodeUtils.getMethodBySignature(typeDeclaration, "createFieldEditors()");
-      return new StatementTarget(targetMethod, false);
-    }
-  }
+	/**
+	 * @return the {@link StatementTarget} to move some {@link FieldEditorInfo} before
+	 *         <code>nextEditor</code>.
+	 */
+	private StatementTarget getTarget(FieldEditorInfo editor, FieldEditorInfo nextEditor)
+			throws Exception {
+		if (nextEditor != null) {
+			return JavaInfoUtils.getTarget(this, editor, nextEditor);
+		} else {
+			TypeDeclaration typeDeclaration = JavaInfoUtils.getTypeDeclaration(this);
+			MethodDeclaration targetMethod =
+					AstNodeUtils.getMethodBySignature(typeDeclaration, "createFieldEditors()");
+			return new StatementTarget(targetMethod, false);
+		}
+	}
 
-  /**
-   * {@link #command_CREATE(FieldEditorInfo, FieldEditorInfo)} adds {@link FieldEditorInfo}'s with
-   * {@link EmptyVariableSupport}, using single {@link Statement} - such code looks concise and
-   * nice. But when we try to set {@link Property} value, {@link EmptyVariableSupport} will
-   * materialize {@link JavaInfo} with {@link LocalUniqueVariableSupport}. So, to keep code good we
-   * should convert existing {@link Statement} into {@link Block}.
-   */
-  static void convertStatementToBlock(FieldEditorInfo fieldEditor) throws Exception {
-    AstEditor editor = fieldEditor.getEditor();
-    // prepare existing Statement
-    Statement creationStatement;
-    {
-      ASTNode creationNode = fieldEditor.getCreationSupport().getNode();
-      creationStatement = AstNodeUtils.getEnclosingStatement(creationNode);
-    }
-    // enclose in Block
-    editor.encloseInBlock(creationStatement);
-  }
+	/**
+	 * {@link #command_CREATE(FieldEditorInfo, FieldEditorInfo)} adds {@link FieldEditorInfo}'s with
+	 * {@link EmptyVariableSupport}, using single {@link Statement} - such code looks concise and
+	 * nice. But when we try to set {@link Property} value, {@link EmptyVariableSupport} will
+	 * materialize {@link JavaInfo} with {@link LocalUniqueVariableSupport}. So, to keep code good we
+	 * should convert existing {@link Statement} into {@link Block}.
+	 */
+	static void convertStatementToBlock(FieldEditorInfo fieldEditor) throws Exception {
+		AstEditor editor = fieldEditor.getEditor();
+		// prepare existing Statement
+		Statement creationStatement;
+		{
+			ASTNode creationNode = fieldEditor.getCreationSupport().getNode();
+			creationStatement = AstNodeUtils.getEnclosingStatement(creationNode);
+		}
+		// enclose in Block
+		editor.encloseInBlock(creationStatement);
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/FieldEditorRootProcessor.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/FieldEditorRootProcessor.java
index f232d7302..9641d4a70 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/FieldEditorRootProcessor.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/FieldEditorRootProcessor.java
@@ -36,106 +36,106 @@
  * @coverage rcp.model.jface
  */
 public final class FieldEditorRootProcessor implements IRootProcessor {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final IRootProcessor INSTANCE = new FieldEditorRootProcessor();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final IRootProcessor INSTANCE = new FieldEditorRootProcessor();
 
-  private FieldEditorRootProcessor() {
-  }
+	private FieldEditorRootProcessor() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IRootProcessor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void process(JavaInfo root, List<JavaInfo> components) throws Exception {
-    // configure palette for using {@link FieldEditor_Info}
-    if (root.getDescription().getToolkit() == ToolkitProvider.DESCRIPTION) {
-      installPaletteConfigurator(root);
-    }
-    // bind {@link FieldEditor_Info}'s into hierarchy.
-    if (root instanceof FieldLayoutPreferencePageInfo) {
-      bindFieldEditors(root, components);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IRootProcessor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void process(JavaInfo root, List<JavaInfo> components) throws Exception {
+		// configure palette for using {@link FieldEditor_Info}
+		if (root.getDescription().getToolkit() == ToolkitProvider.DESCRIPTION) {
+			installPaletteConfigurator(root);
+		}
+		// bind {@link FieldEditor_Info}'s into hierarchy.
+		if (root instanceof FieldLayoutPreferencePageInfo) {
+			bindFieldEditors(root, components);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Implementation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final String ID_SYSTEM = "org.eclipse.wb.rcp.system";
-  private static final String ID_FIELD_EDITORS = "org.eclipse.wb.rcp.fieldEditors";
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Implementation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final String ID_SYSTEM = "org.eclipse.wb.rcp.system";
+	private static final String ID_FIELD_EDITORS = "org.eclipse.wb.rcp.fieldEditors";
 
-  /**
-   * Install listener for configuring palette.
-   */
-  private void installPaletteConfigurator(final JavaInfo rootJavaInfo) {
-    rootJavaInfo.addBroadcastListener(new PaletteEventListener() {
-      @Override
-      public void categories(List<CategoryInfo> categories) throws Exception {
-        configureFieldEditorElements(rootJavaInfo, categories);
-      }
-    });
-  }
+	/**
+	 * Install listener for configuring palette.
+	 */
+	private void installPaletteConfigurator(final JavaInfo rootJavaInfo) {
+		rootJavaInfo.addBroadcastListener(new PaletteEventListener() {
+			@Override
+			public void categories(List<CategoryInfo> categories) throws Exception {
+				configureFieldEditorElements(rootJavaInfo, categories);
+			}
+		});
+	}
 
-  /**
-   * Configures {@link FieldEditorInfo}'s category and entries.
-   */
-  private static void configureFieldEditorElements(final JavaInfo root,
-      final List<CategoryInfo> categories) throws Exception {
-    if (root instanceof FieldEditorPreferencePageInfo) {
-      for (CategoryInfo category : categories) {
-        String id = category.getId();
-        if (!(id.equals(ID_SYSTEM) || id.equals(ID_FIELD_EDITORS))) {
-          category.setVisible(false);
-        }
-      }
-    } else if (root instanceof FieldLayoutPreferencePageInfo) {
-      // do nothing
-    } else {
-      for (CategoryInfo category : categories) {
-        if (category.getId().equals(ID_FIELD_EDITORS)) {
-          category.setVisible(false);
-        }
-      }
-    }
-  }
+	/**
+	 * Configures {@link FieldEditorInfo}'s category and entries.
+	 */
+	private static void configureFieldEditorElements(final JavaInfo root,
+			final List<CategoryInfo> categories) throws Exception {
+		if (root instanceof FieldEditorPreferencePageInfo) {
+			for (CategoryInfo category : categories) {
+				String id = category.getId();
+				if (!(id.equals(ID_SYSTEM) || id.equals(ID_FIELD_EDITORS))) {
+					category.setVisible(false);
+				}
+			}
+		} else if (root instanceof FieldLayoutPreferencePageInfo) {
+			// do nothing
+		} else {
+			for (CategoryInfo category : categories) {
+				if (category.getId().equals(ID_FIELD_EDITORS)) {
+					category.setVisible(false);
+				}
+			}
+		}
+	}
 
-  /**
-   * On {@link FieldLayoutPreferencePageInfo} binds {@link FieldEditorInfo}'s to their container
-   * {@link CompositeInfo}'s.
-   */
-  private void bindFieldEditors(final JavaInfo root, final List<JavaInfo> components)
-      throws Exception {
-    for (JavaInfo component : components) {
-      if (component instanceof FieldEditorInfo
-          && component.getCreationSupport() instanceof ConstructorCreationSupport) {
-        FieldEditorInfo fieldEditor = (FieldEditorInfo) component;
-        ConstructorCreationSupport creationSupport =
-            (ConstructorCreationSupport) component.getCreationSupport();
-        for (ParameterDescription parameter : creationSupport.getDescription().getParameters()) {
-          if (parameter.getType() == ContainerSupport.getCompositeClass()) {
-            // prepare CompositeInfo used in FieldEditor creation
-            CompositeInfo compositeInfo;
-            {
-              ClassInstanceCreation creation = creationSupport.getCreation();
-              Expression compositeExpression =
-                  DomGenerics.arguments(creation).get(parameter.getIndex());
-              compositeInfo = (CompositeInfo) root.getChildRepresentedBy(compositeExpression);
-            }
-            // CompositeInfo that is used as container for FieldEditor - has no layout
-            compositeInfo.markNoLayout();
-            // bind FieldEditor to CompositeInfo
-            compositeInfo.addChild(fieldEditor);
-            fieldEditor.setAssociation(new EmptyAssociation());
-          }
-        }
-      }
-    }
-  }
+	/**
+	 * On {@link FieldLayoutPreferencePageInfo} binds {@link FieldEditorInfo}'s to their container
+	 * {@link CompositeInfo}'s.
+	 */
+	private void bindFieldEditors(final JavaInfo root, final List<JavaInfo> components)
+			throws Exception {
+		for (JavaInfo component : components) {
+			if (component instanceof FieldEditorInfo
+					&& component.getCreationSupport() instanceof ConstructorCreationSupport) {
+				FieldEditorInfo fieldEditor = (FieldEditorInfo) component;
+				ConstructorCreationSupport creationSupport =
+						(ConstructorCreationSupport) component.getCreationSupport();
+				for (ParameterDescription parameter : creationSupport.getDescription().getParameters()) {
+					if (parameter.getType() == ContainerSupport.getCompositeClass()) {
+						// prepare CompositeInfo used in FieldEditor creation
+						CompositeInfo compositeInfo;
+						{
+							ClassInstanceCreation creation = creationSupport.getCreation();
+							Expression compositeExpression =
+									DomGenerics.arguments(creation).get(parameter.getIndex());
+							compositeInfo = (CompositeInfo) root.getChildRepresentedBy(compositeExpression);
+						}
+						// CompositeInfo that is used as container for FieldEditor - has no layout
+						compositeInfo.markNoLayout();
+						// bind FieldEditor to CompositeInfo
+						compositeInfo.addChild(fieldEditor);
+						fieldEditor.setAssociation(new EmptyAssociation());
+					}
+				}
+			}
+		}
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/FieldEditorSubComponentCreationSupport.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/FieldEditorSubComponentCreationSupport.java
index a4a3bc552..a244faad4 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/FieldEditorSubComponentCreationSupport.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/FieldEditorSubComponentCreationSupport.java
@@ -42,143 +42,143 @@
  * @coverage rcp.model.jface
  */
 public final class FieldEditorSubComponentCreationSupport extends CreationSupport
-    implements
-      IImplicitCreationSupport {
-  private final FieldEditorInfo m_fieldEditor;
-  private final Method m_getMethod;
-  private final String m_getMethodSignature;
+implements
+IImplicitCreationSupport {
+	private final FieldEditorInfo m_fieldEditor;
+	private final Method m_getMethod;
+	private final String m_getMethodSignature;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FieldEditorSubComponentCreationSupport(FieldEditorInfo fieldEditor, Method getMethod) {
-    m_fieldEditor = fieldEditor;
-    m_getMethod = getMethod;
-    m_getMethodSignature = ReflectionUtils.getMethodSignature(m_getMethod);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FieldEditorSubComponentCreationSupport(FieldEditorInfo fieldEditor, Method getMethod) {
+		m_fieldEditor = fieldEditor;
+		m_getMethod = getMethod;
+		m_getMethodSignature = ReflectionUtils.getMethodSignature(m_getMethod);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    return "method: " + m_getMethod.getName();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		return "method: " + m_getMethod.getName();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void setJavaInfo(JavaInfo javaInfo) throws Exception {
-    super.setJavaInfo(javaInfo);
-    // evaluation
-    m_fieldEditor.addBroadcastListener(new JavaInfoSetObjectAfter() {
-      @Override
-      public void invoke(JavaInfo target, Object o) throws Exception {
-        if (target == m_fieldEditor) {
-          Object object = getObject();
-          m_javaInfo.setObject(object);
-        }
-      }
-    });
-    // set initial Object
-    m_javaInfo.setObject(getObject());
-    // icon decorator
-    m_javaInfo.addBroadcastListener(new ObjectInfoPresentationDecorateIcon() {
-      @Override
-      public void invoke(ObjectInfo object, Image[] icon) throws Exception {
-        if (object == m_javaInfo) {
-          Image decorator = DesignerPlugin.getImage("exposed/decorator.gif");
-          icon[0] =
-              SwtResourceManager.decorateImage(icon[0], decorator, SwtResourceManager.BOTTOM_RIGHT);
-        }
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void setJavaInfo(JavaInfo javaInfo) throws Exception {
+		super.setJavaInfo(javaInfo);
+		// evaluation
+		m_fieldEditor.addBroadcastListener(new JavaInfoSetObjectAfter() {
+			@Override
+			public void invoke(JavaInfo target, Object o) throws Exception {
+				if (target == m_fieldEditor) {
+					Object object = getObject();
+					m_javaInfo.setObject(object);
+				}
+			}
+		});
+		// set initial Object
+		m_javaInfo.setObject(getObject());
+		// icon decorator
+		m_javaInfo.addBroadcastListener(new ObjectInfoPresentationDecorateIcon() {
+			@Override
+			public void invoke(ObjectInfo object, Image[] icon) throws Exception {
+				if (object == m_javaInfo) {
+					Image decorator = DesignerPlugin.getImage("exposed/decorator.gif");
+					icon[0] =
+							SwtResourceManager.decorateImage(icon[0], decorator, SwtResourceManager.BOTTOM_RIGHT);
+				}
+			}
+		});
+	}
 
-  @Override
-  public boolean isJavaInfo(ASTNode node) {
-    if (node instanceof MethodInvocation) {
-      MethodInvocation invocation = (MethodInvocation) node;
-      return invocation.arguments().size() == 1
-          && invocation.getName().getIdentifier().equals(m_getMethod.getName())
-          && m_fieldEditor.isRepresentedBy(invocation.getExpression());
-    }
-    return false;
-  }
+	@Override
+	public boolean isJavaInfo(ASTNode node) {
+		if (node instanceof MethodInvocation) {
+			MethodInvocation invocation = (MethodInvocation) node;
+			return invocation.arguments().size() == 1
+					&& invocation.getName().getIdentifier().equals(m_getMethod.getName())
+					&& m_fieldEditor.isRepresentedBy(invocation.getExpression());
+		}
+		return false;
+	}
 
-  @Override
-  public ASTNode getNode() {
-    return m_fieldEditor.getCreationSupport().getNode();
-  }
+	@Override
+	public ASTNode getNode() {
+		return m_fieldEditor.getCreationSupport().getNode();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Special access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link Object} for sub-component exposed by this
-   *         {@link FieldEditorSubComponentCreationSupport}.
-   */
-  Object getObject() throws Exception {
-    Object fieldEditorObject = m_fieldEditor.getObject();
-    Expression parentExpression =
-        FieldEditorSubComponentVariableSupport.getParentExpression(m_fieldEditor);
-    Object parentObject = JavaInfoEvaluationHelper.getValue(parentExpression);
-    Object object = m_getMethod.invoke(fieldEditorObject, parentObject);
-    return object;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Special access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link Object} for sub-component exposed by this
+	 *         {@link FieldEditorSubComponentCreationSupport}.
+	 */
+	Object getObject() throws Exception {
+		Object fieldEditorObject = m_fieldEditor.getObject();
+		Expression parentExpression =
+				FieldEditorSubComponentVariableSupport.getParentExpression(m_fieldEditor);
+		Object parentObject = JavaInfoEvaluationHelper.getValue(parentExpression);
+		Object object = m_getMethod.invoke(fieldEditorObject, parentObject);
+		return object;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Delete
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Components with {@link FieldEditorSubComponentCreationSupport} can be "deleted", but for them
-   * this means that they delete their children and related nodes, but keep themselves in parent.
-   */
-  @Override
-  public boolean canDelete() {
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Delete
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Components with {@link FieldEditorSubComponentCreationSupport} can be "deleted", but for them
+	 * this means that they delete their children and related nodes, but keep themselves in parent.
+	 */
+	@Override
+	public boolean canDelete() {
+		return true;
+	}
 
-  @Override
-  public void delete() throws Exception {
-    JavaInfoUtils.deleteJavaInfo(m_javaInfo, false);
-  }
+	@Override
+	public void delete() throws Exception {
+		JavaInfoUtils.deleteJavaInfo(m_javaInfo, false);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IClipboardImplicitCreationSupport
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public IClipboardImplicitCreationSupport getImplicitClipboard() {
-    final String getMethodSignature = m_getMethodSignature;
-    return new IClipboardImplicitCreationSupport() {
-      private static final long serialVersionUID = 0L;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IClipboardImplicitCreationSupport
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public IClipboardImplicitCreationSupport getImplicitClipboard() {
+		final String getMethodSignature = m_getMethodSignature;
+		return new IClipboardImplicitCreationSupport() {
+			private static final long serialVersionUID = 0L;
 
-      @Override
-      public JavaInfo find(JavaInfo host) throws Exception {
-        for (JavaInfo child : host.getChildrenJava()) {
-          if (child.getCreationSupport() instanceof FieldEditorSubComponentCreationSupport) {
-            FieldEditorSubComponentCreationSupport exposedCreation =
-                (FieldEditorSubComponentCreationSupport) child.getCreationSupport();
-            if (exposedCreation.m_getMethodSignature.equals(getMethodSignature)) {
-              return child;
-            }
-          }
-        }
-        return null;
-      }
-    };
-  }
+			@Override
+			public JavaInfo find(JavaInfo host) throws Exception {
+				for (JavaInfo child : host.getChildrenJava()) {
+					if (child.getCreationSupport() instanceof FieldEditorSubComponentCreationSupport) {
+						FieldEditorSubComponentCreationSupport exposedCreation =
+								(FieldEditorSubComponentCreationSupport) child.getCreationSupport();
+						if (exposedCreation.m_getMethodSignature.equals(getMethodSignature)) {
+							return child;
+						}
+					}
+				}
+				return null;
+			}
+		};
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/FieldEditorSubComponentVariableSupport.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/FieldEditorSubComponentVariableSupport.java
index 197fd9e6e..ee9039dde 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/FieldEditorSubComponentVariableSupport.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/FieldEditorSubComponentVariableSupport.java
@@ -48,148 +48,148 @@
  * @coverage rcp.model.jface
  */
 public final class FieldEditorSubComponentVariableSupport extends AbstractNoNameVariableSupport {
-  private final FieldEditorInfo m_fieldEditor;
-  private final Method m_method;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FieldEditorSubComponentVariableSupport(JavaInfo javaInfo,
-      FieldEditorInfo fieldEditor,
-      Method method) {
-    super(javaInfo);
-    m_fieldEditor = fieldEditor;
-    m_method = method;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    return "subComponent";
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean isValidStatementForChild(Statement statement) {
-    return m_fieldEditor.getVariableSupport().isValidStatementForChild(statement);
-  }
-
-  @Override
-  public String getTitle() throws Exception {
-    return m_method.getName() + "()";
-  }
-
-  @Override
-  public String getComponentName() {
-    String methodName = m_method.getName();
-    if (methodName.startsWith("get")) {
-      methodName = methodName.substring("get".length());
-    }
-    return m_fieldEditor.getVariableSupport().getComponentName()
-        + StringUtils.capitalize(methodName);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Target
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public StatementTarget getStatementTarget() throws Exception {
-    return m_fieldEditor.getVariableSupport().getStatementTarget();
-  }
-
-  @Override
-  public StatementTarget getChildTarget() throws Exception {
-    return JavaInfoUtils.getTarget(m_fieldEditor);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Expressions
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getReferenceExpression(NodeTarget target) throws Exception {
-    String parentName = ensureParentComposite();
-    String parentAccess = m_fieldEditor.getVariableSupport().getAccessExpression(target);
-    return parentAccess + m_method.getName() + "(" + parentName + ")";
-  }
-
-  @Override
-  public String getAccessExpression(NodeTarget target) throws Exception {
-    return getReferenceExpression(target) + ".";
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Implementation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Ensures that "parentComposite" is assigned into variable. This is important because in
-   * {@link FieldEditorPreferencePage#FLAT} mode each invocation of
-   * {@link FieldEditorPreferencePage#getFieldEditorParent()} creates new instance of
-   * {@link Composite}. But sub-component access methods require same instance as
-   * {@link FieldEditor} itself.
-   */
-  private String ensureParentComposite() throws Exception {
-    String parentName = null;
-    // find "parentComposite" in ClassInstanceCreation
-    {
-      Expression parentExpression = getParentExpression(m_fieldEditor);
-      if (parentExpression instanceof MethodInvocation) {
-        Statement editorCreationStatement = AstNodeUtils.getEnclosingStatement(parentExpression);
-        AstEditor astEditor = m_fieldEditor.getEditor();
-        parentName =
-            astEditor.getUniqueVariableName(
-                editorCreationStatement.getStartPosition(),
-                "composite",
-                null);
-        astEditor.addStatement("org.eclipse.swt.widgets.Composite "
-            + parentName
-            + " = "
-            + astEditor.getSource(parentExpression)
-            + ";", new StatementTarget(editorCreationStatement, true));
-        astEditor.replaceExpression(parentExpression, parentName);
-      } else if (parentExpression instanceof SimpleName) {
-        SimpleName parentSimpleName = (SimpleName) parentExpression;
-        parentName = parentSimpleName.getIdentifier();
-      }
-    }
-    // final check
-    Assert.isNotNull(parentName, "Unable to find name of 'parentComposite' for %s.", m_fieldEditor);
-    return parentName;
-  }
-
-  /**
-   * @return the {@link Expression} for "parentComposite" in creation of given
-   *         {@link FieldEditorInfo}.
-   */
-  static Expression getParentExpression(FieldEditorInfo m_fieldEditor) {
-    Expression parentExpression = null;
-    // find "parentComposite" in ClassInstanceCreation
-    Assert.instanceOf(ConstructorCreationSupport.class, m_fieldEditor.getCreationSupport());
-    ConstructorCreationSupport creationSupport =
-        (ConstructorCreationSupport) m_fieldEditor.getCreationSupport();
-    ClassInstanceCreation creation = creationSupport.getCreation();
-    for (ParameterDescription parameter : creationSupport.getDescription().getParameters()) {
-      if (FieldEditorInfo.isParameterComposite(parameter)) {
-        parentExpression = DomGenerics.arguments(creation).get(parameter.getIndex());
-      }
-    }
-    // final check
-    Assert.isNotNull(parentExpression, "Unable to find 'parentComposite' for %s.", m_fieldEditor);
-    return parentExpression;
-  }
+	private final FieldEditorInfo m_fieldEditor;
+	private final Method m_method;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FieldEditorSubComponentVariableSupport(JavaInfo javaInfo,
+			FieldEditorInfo fieldEditor,
+			Method method) {
+		super(javaInfo);
+		m_fieldEditor = fieldEditor;
+		m_method = method;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		return "subComponent";
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean isValidStatementForChild(Statement statement) {
+		return m_fieldEditor.getVariableSupport().isValidStatementForChild(statement);
+	}
+
+	@Override
+	public String getTitle() throws Exception {
+		return m_method.getName() + "()";
+	}
+
+	@Override
+	public String getComponentName() {
+		String methodName = m_method.getName();
+		if (methodName.startsWith("get")) {
+			methodName = methodName.substring("get".length());
+		}
+		return m_fieldEditor.getVariableSupport().getComponentName()
+				+ StringUtils.capitalize(methodName);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Target
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public StatementTarget getStatementTarget() throws Exception {
+		return m_fieldEditor.getVariableSupport().getStatementTarget();
+	}
+
+	@Override
+	public StatementTarget getChildTarget() throws Exception {
+		return JavaInfoUtils.getTarget(m_fieldEditor);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Expressions
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getReferenceExpression(NodeTarget target) throws Exception {
+		String parentName = ensureParentComposite();
+		String parentAccess = m_fieldEditor.getVariableSupport().getAccessExpression(target);
+		return parentAccess + m_method.getName() + "(" + parentName + ")";
+	}
+
+	@Override
+	public String getAccessExpression(NodeTarget target) throws Exception {
+		return getReferenceExpression(target) + ".";
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Implementation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Ensures that "parentComposite" is assigned into variable. This is important because in
+	 * {@link FieldEditorPreferencePage#FLAT} mode each invocation of
+	 * {@link FieldEditorPreferencePage#getFieldEditorParent()} creates new instance of
+	 * {@link Composite}. But sub-component access methods require same instance as
+	 * {@link FieldEditor} itself.
+	 */
+	private String ensureParentComposite() throws Exception {
+		String parentName = null;
+		// find "parentComposite" in ClassInstanceCreation
+		{
+			Expression parentExpression = getParentExpression(m_fieldEditor);
+			if (parentExpression instanceof MethodInvocation) {
+				Statement editorCreationStatement = AstNodeUtils.getEnclosingStatement(parentExpression);
+				AstEditor astEditor = m_fieldEditor.getEditor();
+				parentName =
+						astEditor.getUniqueVariableName(
+								editorCreationStatement.getStartPosition(),
+								"composite",
+								null);
+				astEditor.addStatement("org.eclipse.swt.widgets.Composite "
+						+ parentName
+						+ " = "
+						+ astEditor.getSource(parentExpression)
+						+ ";", new StatementTarget(editorCreationStatement, true));
+				astEditor.replaceExpression(parentExpression, parentName);
+			} else if (parentExpression instanceof SimpleName) {
+				SimpleName parentSimpleName = (SimpleName) parentExpression;
+				parentName = parentSimpleName.getIdentifier();
+			}
+		}
+		// final check
+		Assert.isNotNull(parentName, "Unable to find name of 'parentComposite' for %s.", m_fieldEditor);
+		return parentName;
+	}
+
+	/**
+	 * @return the {@link Expression} for "parentComposite" in creation of given
+	 *         {@link FieldEditorInfo}.
+	 */
+	static Expression getParentExpression(FieldEditorInfo m_fieldEditor) {
+		Expression parentExpression = null;
+		// find "parentComposite" in ClassInstanceCreation
+		Assert.instanceOf(ConstructorCreationSupport.class, m_fieldEditor.getCreationSupport());
+		ConstructorCreationSupport creationSupport =
+				(ConstructorCreationSupport) m_fieldEditor.getCreationSupport();
+		ClassInstanceCreation creation = creationSupport.getCreation();
+		for (ParameterDescription parameter : creationSupport.getDescription().getParameters()) {
+			if (FieldEditorInfo.isParameterComposite(parameter)) {
+				parentExpression = DomGenerics.arguments(creation).get(parameter.getIndex());
+			}
+		}
+		// final check
+		Assert.isNotNull(parentExpression, "Unable to find 'parentComposite' for %s.", m_fieldEditor);
+		return parentExpression;
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/FieldLayoutPreferencePageInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/FieldLayoutPreferencePageInfo.java
index cf2d94c4d..57058f816 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/FieldLayoutPreferencePageInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/FieldLayoutPreferencePageInfo.java
@@ -37,88 +37,88 @@
  * @coverage rcp.model.jface
  */
 public final class FieldLayoutPreferencePageInfo extends PreferencePageInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FieldLayoutPreferencePageInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-    // don't show FieldEditor's on design canvas (simplify layout of container Composite's)
-    addBroadcastListener(new ObjectInfoChildGraphical() {
-      @Override
-      public void invoke(ObjectInfo object, boolean[] visible) throws Exception {
-        if (object instanceof FieldEditorInfo) {
-          visible[0] = false;
-        }
-      }
-    });
-    // convert FieldEditor's into block
-    addBroadcastListener(new JavaEventListener() {
-      @Override
-      public void variable_emptyMaterializeBefore(EmptyVariableSupport variableSupport)
-          throws Exception {
-        if (variableSupport.getJavaInfo() instanceof FieldEditorInfo) {
-          FieldEditorInfo fieldEditor = (FieldEditorInfo) variableSupport.getJavaInfo();
-          FieldEditorPreferencePageInfo.convertStatementToBlock(fieldEditor);
-        }
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FieldLayoutPreferencePageInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+		// don't show FieldEditor's on design canvas (simplify layout of container Composite's)
+		addBroadcastListener(new ObjectInfoChildGraphical() {
+			@Override
+			public void invoke(ObjectInfo object, boolean[] visible) throws Exception {
+				if (object instanceof FieldEditorInfo) {
+					visible[0] = false;
+				}
+			}
+		});
+		// convert FieldEditor's into block
+		addBroadcastListener(new JavaEventListener() {
+			@Override
+			public void variable_emptyMaterializeBefore(EmptyVariableSupport variableSupport)
+					throws Exception {
+				if (variableSupport.getJavaInfo() instanceof FieldEditorInfo) {
+					FieldEditorInfo fieldEditor = (FieldEditorInfo) variableSupport.getJavaInfo();
+					FieldEditorPreferencePageInfo.convertStatementToBlock(fieldEditor);
+				}
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * This method is invoked when we try to drop {@link FieldEditorInfo} on some container that
-   * requires {@link CompositeInfo}. So, we should return {@link CompositeInfo} that will later add
-   * {@link FieldEditorInfo} on itself.
-   *
-   * @return the {@link CompositeInfo} wrapper for {@link FieldEditorInfo}.
-   */
-  public CompositeInfo schedule_CREATE(final FieldEditorInfo editor) throws Exception {
-    CompositeInfo composite = (CompositeInfo) editor.getArbitraryValue(CompositeInfo.class);
-    if (composite == null) {
-      composite =
-          (CompositeInfo) JavaInfoUtils.createJavaInfo(
-              getEditor(),
-              ContainerSupport.getCompositeClass(),
-              new ConstructorCreationSupport());
-      composite.markNoLayout();
-      editor.putArbitraryValue(CompositeInfo.class, composite);
-      // schedule FieldEditor creation
-      final CompositeInfo wrapperComposite = composite;
-      addBroadcastListener(new JavaEventListener() {
-        @Override
-        public void addAfter(JavaInfo parent, JavaInfo child) throws Exception {
-          if (child == wrapperComposite) {
-            JavaInfoUtils.add(
-                editor,
-                new EmptyInvocationVariableSupport(editor, "addField(%child%)", 0),
-                PureFlatStatementGenerator.INSTANCE,
-                AssociationObjects.empty(),
-                wrapperComposite,
-                null);
-            removeBroadcastListener(this);
-          }
-        }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * This method is invoked when we try to drop {@link FieldEditorInfo} on some container that
+	 * requires {@link CompositeInfo}. So, we should return {@link CompositeInfo} that will later add
+	 * {@link FieldEditorInfo} on itself.
+	 *
+	 * @return the {@link CompositeInfo} wrapper for {@link FieldEditorInfo}.
+	 */
+	public CompositeInfo schedule_CREATE(final FieldEditorInfo editor) throws Exception {
+		CompositeInfo composite = (CompositeInfo) editor.getArbitraryValue(CompositeInfo.class);
+		if (composite == null) {
+			composite =
+					(CompositeInfo) JavaInfoUtils.createJavaInfo(
+							getEditor(),
+							ContainerSupport.getCompositeClass(),
+							new ConstructorCreationSupport());
+			composite.markNoLayout();
+			editor.putArbitraryValue(CompositeInfo.class, composite);
+			// schedule FieldEditor creation
+			final CompositeInfo wrapperComposite = composite;
+			addBroadcastListener(new JavaEventListener() {
+				@Override
+				public void addAfter(JavaInfo parent, JavaInfo child) throws Exception {
+					if (child == wrapperComposite) {
+						JavaInfoUtils.add(
+								editor,
+								new EmptyInvocationVariableSupport(editor, "addField(%child%)", 0),
+								PureFlatStatementGenerator.INSTANCE,
+								AssociationObjects.empty(),
+								wrapperComposite,
+								null);
+						removeBroadcastListener(this);
+					}
+				}
 
-        @Override
-        public void associationTemplate(JavaInfo component, String[] source) throws Exception {
-          if (component == editor) {
-            source[0] =
-                StringUtils.replace(
-                    source[0],
-                    "%parentComposite%",
-                    TemplateUtils.getExpression(wrapperComposite));
-          }
-        }
-      });
-    }
-    return composite;
-  }
+				@Override
+				public void associationTemplate(JavaInfo component, String[] source) throws Exception {
+					if (component == editor) {
+						source[0] =
+								StringUtils.replace(
+										source[0],
+										"%parentComposite%",
+										TemplateUtils.getExpression(wrapperComposite));
+					}
+				}
+			});
+		}
+		return composite;
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/PopupDialogInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/PopupDialogInfo.java
index 7dc5b3932..254752b73 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/PopupDialogInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/PopupDialogInfo.java
@@ -24,24 +24,24 @@
  * @coverage rcp.model.jface
  */
 public final class PopupDialogInfo extends WindowInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public PopupDialogInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public PopupDialogInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AbstractComponentInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected TopBoundsSupport createTopBoundsSupport() {
-    return new PopupDialogTopBoundsSupport(this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AbstractComponentInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected TopBoundsSupport createTopBoundsSupport() {
+		return new PopupDialogTopBoundsSupport(this);
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/PopupDialogTopBoundsSupport.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/PopupDialogTopBoundsSupport.java
index 8ccec4587..80cab4031 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/PopupDialogTopBoundsSupport.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/PopupDialogTopBoundsSupport.java
@@ -19,22 +19,22 @@
  * @coverage rcp.model.jface
  */
 public final class PopupDialogTopBoundsSupport extends WindowTopBoundsSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public PopupDialogTopBoundsSupport(PopupDialogInfo window) {
-    super(window);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public PopupDialogTopBoundsSupport(PopupDialogInfo window) {
+		super(window);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Show
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean show() throws Exception {
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Show
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean show() throws Exception {
+		return false;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/PreferencePageInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/PreferencePageInfo.java
index cdc384ecb..51c7baa7b 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/PreferencePageInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/PreferencePageInfo.java
@@ -32,107 +32,107 @@
  * @coverage rcp.model.jface
  */
 public class PreferencePageInfo extends DialogPageInfo implements IJavaInfoRendering {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public PreferencePageInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-    JavaInfoUtils.scheduleSpecialRendering(this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public PreferencePageInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+		JavaInfoUtils.scheduleSpecialRendering(this);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  Object getShell() {
-    if (m_shell == null) {
-      return ExecutionUtils.runObject(new RunnableObjectEx<Object>() {
-        @Override
-        public Object runObject() throws Exception {
-          return ReflectionUtils.invokeMethod(m_preferenceDialog, "getShell()");
-        }
-      });
-    }
-    return super.getShell();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	Object getShell() {
+		if (m_shell == null) {
+			return ExecutionUtils.runObject(new RunnableObjectEx<Object>() {
+				@Override
+				public Object runObject() throws Exception {
+					return ReflectionUtils.invokeMethod(m_preferenceDialog, "getShell()");
+				}
+			});
+		}
+		return super.getShell();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Rendering
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static Object m_parentShell;
-  private Object m_preferenceDialog;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Rendering
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static Object m_parentShell;
+	private Object m_preferenceDialog;
 
-  @Override
-  public void render() throws Exception {
-    ClassLoader editorLoader = JavaInfoUtils.getClassLoader(this);
-    // prepare PreferenceNode
-    Object preferenceNode;
-    {
-      Class<?> clazz = editorLoader.loadClass("org.eclipse.jface.preference.PreferenceNode");
-      Constructor<?> constructor =
-          ReflectionUtils.getConstructorBySignature(
-              clazz,
-              "<init>(java.lang.String,org.eclipse.jface.preference.IPreferencePage)");
-      preferenceNode = constructor.newInstance("__wbp", getObject());
-    }
-    // prepare PreferenceManager
-    Object preferenceManager;
-    {
-      Class<?> clazz = editorLoader.loadClass("org.eclipse.jface.preference.PreferenceManager");
-      preferenceManager = clazz.newInstance();
-    }
-    // add this PreferencePage
-    ReflectionUtils.invokeMethod(
-        preferenceManager,
-        "addToRoot(org.eclipse.jface.preference.IPreferenceNode)",
-        preferenceNode);
-    // prepare parent Shell for PreferenceDialog
-    if (m_parentShell == null) {
-      m_parentShell = ContainerSupport.createShell();
-    }
-    // create PreferenceDialog
-    {
-      Class<?> preferenceDialogClass =
-          editorLoader.loadClass("org.eclipse.jface.preference.PreferenceDialog");
-      Constructor<?> constructor =
-          ReflectionUtils.getConstructorBySignature(
-              preferenceDialogClass,
-              "<init>(org.eclipse.swt.widgets.Shell,org.eclipse.jface.preference.PreferenceManager)");
-      m_preferenceDialog = constructor.newInstance(m_parentShell, preferenceManager);
-    }
-    // open PreferenceDialog, so perform PreferencePage GUI creation
-    ReflectionUtils.invokeMethod(m_preferenceDialog, "create()");
-    m_shell = ReflectionUtils.invokeMethod(m_preferenceDialog, "getShell()");
-    configureShell();
-  }
+	@Override
+	public void render() throws Exception {
+		ClassLoader editorLoader = JavaInfoUtils.getClassLoader(this);
+		// prepare PreferenceNode
+		Object preferenceNode;
+		{
+			Class<?> clazz = editorLoader.loadClass("org.eclipse.jface.preference.PreferenceNode");
+			Constructor<?> constructor =
+					ReflectionUtils.getConstructorBySignature(
+							clazz,
+							"<init>(java.lang.String,org.eclipse.jface.preference.IPreferencePage)");
+			preferenceNode = constructor.newInstance("__wbp", getObject());
+		}
+		// prepare PreferenceManager
+		Object preferenceManager;
+		{
+			Class<?> clazz = editorLoader.loadClass("org.eclipse.jface.preference.PreferenceManager");
+			preferenceManager = clazz.newInstance();
+		}
+		// add this PreferencePage
+		ReflectionUtils.invokeMethod(
+				preferenceManager,
+				"addToRoot(org.eclipse.jface.preference.IPreferenceNode)",
+				preferenceNode);
+		// prepare parent Shell for PreferenceDialog
+		if (m_parentShell == null) {
+			m_parentShell = ContainerSupport.createShell();
+		}
+		// create PreferenceDialog
+		{
+			Class<?> preferenceDialogClass =
+					editorLoader.loadClass("org.eclipse.jface.preference.PreferenceDialog");
+			Constructor<?> constructor =
+					ReflectionUtils.getConstructorBySignature(
+							preferenceDialogClass,
+							"<init>(org.eclipse.swt.widgets.Shell,org.eclipse.jface.preference.PreferenceManager)");
+			m_preferenceDialog = constructor.newInstance(m_parentShell, preferenceManager);
+		}
+		// open PreferenceDialog, so perform PreferencePage GUI creation
+		ReflectionUtils.invokeMethod(m_preferenceDialog, "create()");
+		m_shell = ReflectionUtils.invokeMethod(m_preferenceDialog, "getShell()");
+		configureShell();
+	}
 
-  /**
-   * Allows configuring {@link #m_shell} after opening {@link PreferenceDialog}.
-   */
-  protected void configureShell() throws Exception {
-  }
+	/**
+	 * Allows configuring {@link #m_shell} after opening {@link PreferenceDialog}.
+	 */
+	protected void configureShell() throws Exception {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void refresh_dispose() throws Exception {
-    // dispose PreferenceDialog
-    if (m_preferenceDialog != null) {
-      ReflectionUtils.invokeMethod(m_preferenceDialog, "close()");
-      m_shell = null;
-    }
-    // call "super"
-    super.refresh_dispose();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void refresh_dispose() throws Exception {
+		// dispose PreferenceDialog
+		if (m_preferenceDialog != null) {
+			ReflectionUtils.invokeMethod(m_preferenceDialog, "close()");
+			m_shell = null;
+		}
+		// call "super"
+		super.refresh_dispose();
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/TitleAreaDialogInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/TitleAreaDialogInfo.java
index d5ca4cb56..cc43a2205 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/TitleAreaDialogInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/TitleAreaDialogInfo.java
@@ -23,14 +23,14 @@
  * @coverage rcp.model.jface
  */
 public final class TitleAreaDialogInfo extends DialogInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public TitleAreaDialogInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public TitleAreaDialogInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/WindowInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/WindowInfo.java
index 35a86d55f..2ae31147e 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/WindowInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/WindowInfo.java
@@ -49,178 +49,178 @@
  * @coverage rcp.model.jface
  */
 public class WindowInfo extends AbstractComponentInfo implements IJavaInfoRendering {
-  private Object m_shell;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public WindowInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-    JavaInfoUtils.scheduleSpecialRendering(this);
-    fillContextMenu();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Initialize
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void fillContextMenu() throws Exception {
-    addBroadcastListener(new ObjectEventListener() {
-      @Override
-      public void addContextMenu(List<? extends ObjectInfo> objects,
-          ObjectInfo object,
-          IMenuManager manager) throws Exception {
-        if (object == WindowInfo.this) {
-          contextMenu_setMinimalSize(manager);
-          contextMenu_removeSize(manager);
-        }
-      }
-    });
-  }
-
-  /**
-   * Adds "Set minimal size" item.
-   */
-  private void contextMenu_setMinimalSize(IMenuManager manager) throws Exception {
-    ObjectInfoAction action = new ObjectInfoAction(this) {
-      @Override
-      protected void runEx() throws Exception {
-        if (getMethod_getInitialSize() == null) {
-          TypeDeclaration typeDeclaration = JavaInfoUtils.getTypeDeclaration(WindowInfo.this);
-          getEditor().addMethodDeclaration(
-              "protected org.eclipse.swt.graphics.Point getInitialSize()",
-              ImmutableList.of("return new org.eclipse.swt.graphics.Point(545, 390);"),
-              new BodyDeclarationTarget(typeDeclaration, false));
-        }
-        Dimension preferredSize = getPreferredSize();
-        getTopBoundsSupport().setSize(preferredSize.width, preferredSize.height);
-      }
-    };
-    action.setText(ModelMessages.WindowInfo_minSizeActionText);
-    manager.appendToGroup(IContextMenuConstants.GROUP_LAYOUT, action);
-  }
-
-  /**
-   * Adds "Remove getInitialSize()" item.
-   */
-  private void contextMenu_removeSize(IMenuManager manager) throws Exception {
-    ObjectInfoAction action = new ObjectInfoAction(this) {
-      @Override
-      protected void runEx() throws Exception {
-        MethodDeclaration sizeMethod = getMethod_getInitialSize();
-        if (sizeMethod != null) {
-          getEditor().removeBodyDeclaration(sizeMethod);
-        }
-      }
-    };
-    action.setText("Remove getInitialSize()");
-    manager.appendToGroup(IContextMenuConstants.GROUP_LAYOUT, action);
-  }
-
-  /**
-   * @return the {@link MethodDeclaration} for "getInitialSize()", may be <code>null</code>.
-   */
-  private MethodDeclaration getMethod_getInitialSize() {
-    TypeDeclaration typeDeclaration = JavaInfoUtils.getTypeDeclaration(this);
-    return AstNodeUtils.getMethodBySignature(typeDeclaration, "getInitialSize()");
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IJavaInfoRendering
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void render() throws Exception {
-    Object window = getObject();
-    ReflectionUtils.invokeMethod(window, "create()");
-    m_shell = ReflectionUtils.invokeMethod(window, "getShell()");
-  }
-
-  public Shell getParentShell_interceptor() throws Exception {
-    ASTNode node = getCreationSupport().getNode();
-    ClassLoader classLoader = JavaInfoUtils.getClassLoader(this);
-    return (Shell) SwtMethodParameterEvaluator.getDefaultShell(node, classLoader);
-  }
-
-  public Object getInitialSize_validator(Object o) {
-    if (o == null) {
-      return new org.eclipse.swt.graphics.Point(450, 300);
-    }
-    return o;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AbstractComponentInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected TopBoundsSupport createTopBoundsSupport() {
-    return new WindowTopBoundsSupport(this);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Hierarchy
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean canBeRoot() {
-    return true;
-  }
-
-  @Override
-  public Object getComponentObject() {
-    return m_shell;
-  }
-
-  /**
-   * @return the {@link WindowInfo}'s Shell.
-   */
-  Object getShell() {
-    return m_shell;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void refresh_dispose() throws Exception {
-    // dispose Dialog
-    {
-      Object object = getObject();
-      if (object != null) {
-        ReflectionUtils.invokeMethod(object, "close()");
-        m_shell = null;
-      }
-    }
-    // call "super"
-    super.refresh_dispose();
-  }
-
-  @Override
-  protected void refresh_afterCreate() throws Exception {
-    // preferred size, should be here, because "super" applies "top bounds"
-    setPreferredSize(ControlSupport.getPreferredSize(m_shell));
-    // call "super"
-    super.refresh_afterCreate();
-  }
-
-  @Override
-  protected void refresh_fetch() throws Exception {
-    ControlInfo.refresh_fetch(this, new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        WindowInfo.super.refresh_fetch();
-      }
-    });
-  }
+	private Object m_shell;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public WindowInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+		JavaInfoUtils.scheduleSpecialRendering(this);
+		fillContextMenu();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Initialize
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void fillContextMenu() throws Exception {
+		addBroadcastListener(new ObjectEventListener() {
+			@Override
+			public void addContextMenu(List<? extends ObjectInfo> objects,
+					ObjectInfo object,
+					IMenuManager manager) throws Exception {
+				if (object == WindowInfo.this) {
+					contextMenu_setMinimalSize(manager);
+					contextMenu_removeSize(manager);
+				}
+			}
+		});
+	}
+
+	/**
+	 * Adds "Set minimal size" item.
+	 */
+	private void contextMenu_setMinimalSize(IMenuManager manager) throws Exception {
+		ObjectInfoAction action = new ObjectInfoAction(this) {
+			@Override
+			protected void runEx() throws Exception {
+				if (getMethod_getInitialSize() == null) {
+					TypeDeclaration typeDeclaration = JavaInfoUtils.getTypeDeclaration(WindowInfo.this);
+					getEditor().addMethodDeclaration(
+							"protected org.eclipse.swt.graphics.Point getInitialSize()",
+							ImmutableList.of("return new org.eclipse.swt.graphics.Point(545, 390);"),
+							new BodyDeclarationTarget(typeDeclaration, false));
+				}
+				Dimension preferredSize = getPreferredSize();
+				getTopBoundsSupport().setSize(preferredSize.width, preferredSize.height);
+			}
+		};
+		action.setText(ModelMessages.WindowInfo_minSizeActionText);
+		manager.appendToGroup(IContextMenuConstants.GROUP_LAYOUT, action);
+	}
+
+	/**
+	 * Adds "Remove getInitialSize()" item.
+	 */
+	private void contextMenu_removeSize(IMenuManager manager) throws Exception {
+		ObjectInfoAction action = new ObjectInfoAction(this) {
+			@Override
+			protected void runEx() throws Exception {
+				MethodDeclaration sizeMethod = getMethod_getInitialSize();
+				if (sizeMethod != null) {
+					getEditor().removeBodyDeclaration(sizeMethod);
+				}
+			}
+		};
+		action.setText("Remove getInitialSize()");
+		manager.appendToGroup(IContextMenuConstants.GROUP_LAYOUT, action);
+	}
+
+	/**
+	 * @return the {@link MethodDeclaration} for "getInitialSize()", may be <code>null</code>.
+	 */
+	private MethodDeclaration getMethod_getInitialSize() {
+		TypeDeclaration typeDeclaration = JavaInfoUtils.getTypeDeclaration(this);
+		return AstNodeUtils.getMethodBySignature(typeDeclaration, "getInitialSize()");
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IJavaInfoRendering
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void render() throws Exception {
+		Object window = getObject();
+		ReflectionUtils.invokeMethod(window, "create()");
+		m_shell = ReflectionUtils.invokeMethod(window, "getShell()");
+	}
+
+	public Shell getParentShell_interceptor() throws Exception {
+		ASTNode node = getCreationSupport().getNode();
+		ClassLoader classLoader = JavaInfoUtils.getClassLoader(this);
+		return (Shell) SwtMethodParameterEvaluator.getDefaultShell(node, classLoader);
+	}
+
+	public Object getInitialSize_validator(Object o) {
+		if (o == null) {
+			return new org.eclipse.swt.graphics.Point(450, 300);
+		}
+		return o;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AbstractComponentInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected TopBoundsSupport createTopBoundsSupport() {
+		return new WindowTopBoundsSupport(this);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Hierarchy
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean canBeRoot() {
+		return true;
+	}
+
+	@Override
+	public Object getComponentObject() {
+		return m_shell;
+	}
+
+	/**
+	 * @return the {@link WindowInfo}'s Shell.
+	 */
+	Object getShell() {
+		return m_shell;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void refresh_dispose() throws Exception {
+		// dispose Dialog
+		{
+			Object object = getObject();
+			if (object != null) {
+				ReflectionUtils.invokeMethod(object, "close()");
+				m_shell = null;
+			}
+		}
+		// call "super"
+		super.refresh_dispose();
+	}
+
+	@Override
+	protected void refresh_afterCreate() throws Exception {
+		// preferred size, should be here, because "super" applies "top bounds"
+		setPreferredSize(ControlSupport.getPreferredSize(m_shell));
+		// call "super"
+		super.refresh_afterCreate();
+	}
+
+	@Override
+	protected void refresh_fetch() throws Exception {
+		ControlInfo.refresh_fetch(this, new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				WindowInfo.super.refresh_fetch();
+			}
+		});
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/WindowTopBoundsSupport.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/WindowTopBoundsSupport.java
index 59a1bf09b..f68136e2d 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/WindowTopBoundsSupport.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/WindowTopBoundsSupport.java
@@ -37,89 +37,89 @@
  * @coverage rcp.model.jface
  */
 public class WindowTopBoundsSupport extends TopBoundsSupport {
-  private final WindowInfo m_window;
+	private final WindowInfo m_window;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public WindowTopBoundsSupport(WindowInfo window) {
-    super(window);
-    m_window = window;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public WindowTopBoundsSupport(WindowInfo window) {
+		super(window);
+		m_window = window;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // TopBoundsSupport
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void apply() throws Exception {
-    // check for getInitialSize()
-    if (get_getInitialSize_Point() != null) {
-      return;
-    }
-    // set size from resource properties (or default)
-    {
-      Dimension size = getResourceSize();
-      ControlSupport.setSize(m_window.getShell(), size.width, size.height);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// TopBoundsSupport
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void apply() throws Exception {
+		// check for getInitialSize()
+		if (get_getInitialSize_Point() != null) {
+			return;
+		}
+		// set size from resource properties (or default)
+		{
+			Dimension size = getResourceSize();
+			ControlSupport.setSize(m_window.getShell(), size.width, size.height);
+		}
+	}
 
-  @Override
-  public void setSize(int width, int height) throws Exception {
-    // check for getInitialSize()
-    {
-      ClassInstanceCreation pointCreation = get_getInitialSize_Point();
-      if (pointCreation != null) {
-        String widthSource = IntegerConverter.INSTANCE.toJavaSource(m_window, width);
-        String heightSource = IntegerConverter.INSTANCE.toJavaSource(m_window, height);
-        AstEditor editor = m_window.getEditor();
-        List<Expression> arguments = DomGenerics.arguments(pointCreation);
-        editor.replaceExpression(arguments.get(0), widthSource);
-        editor.replaceExpression(arguments.get(1), heightSource);
-      }
-    }
-    // remember size in resource properties
-    setResourceSize(width, height);
-  }
+	@Override
+	public void setSize(int width, int height) throws Exception {
+		// check for getInitialSize()
+		{
+			ClassInstanceCreation pointCreation = get_getInitialSize_Point();
+			if (pointCreation != null) {
+				String widthSource = IntegerConverter.INSTANCE.toJavaSource(m_window, width);
+				String heightSource = IntegerConverter.INSTANCE.toJavaSource(m_window, height);
+				AstEditor editor = m_window.getEditor();
+				List<Expression> arguments = DomGenerics.arguments(pointCreation);
+				editor.replaceExpression(arguments.get(0), widthSource);
+				editor.replaceExpression(arguments.get(1), heightSource);
+			}
+		}
+		// remember size in resource properties
+		setResourceSize(width, height);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Show
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean show() throws Exception {
-    CompositeTopBoundsSupport.show(m_window, m_window.getShell());
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Show
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean show() throws Exception {
+		CompositeTopBoundsSupport.show(m_window, m_window.getShell());
+		return true;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Size utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link ClassInstanceCreation} for new {@link Point} in
-   *         <code>getInitialSize()</code>, or <code>null</code> if something different is returned.
-   */
-  private ClassInstanceCreation get_getInitialSize_Point() {
-    TypeDeclaration typeDeclaration = JavaInfoUtils.getTypeDeclaration(m_window);
-    MethodDeclaration method =
-        AstNodeUtils.getMethodBySignature(typeDeclaration, "getInitialSize()");
-    if (method != null) {
-      List<Statement> statements = DomGenerics.statements(method.getBody());
-      Statement lastStatement = statements.get(statements.size() - 1);
-      if (lastStatement instanceof ReturnStatement) {
-        ReturnStatement returnStatement = (ReturnStatement) lastStatement;
-        if (returnStatement.getExpression() instanceof ClassInstanceCreation) {
-          return (ClassInstanceCreation) returnStatement.getExpression();
-        }
-      }
-    }
-    // unknown state
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Size utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link ClassInstanceCreation} for new {@link Point} in
+	 *         <code>getInitialSize()</code>, or <code>null</code> if something different is returned.
+	 */
+	private ClassInstanceCreation get_getInitialSize_Point() {
+		TypeDeclaration typeDeclaration = JavaInfoUtils.getTypeDeclaration(m_window);
+		MethodDeclaration method =
+				AstNodeUtils.getMethodBySignature(typeDeclaration, "getInitialSize()");
+		if (method != null) {
+			List<Statement> statements = DomGenerics.statements(method.getBody());
+			Statement lastStatement = statements.get(statements.size() - 1);
+			if (lastStatement instanceof ReturnStatement) {
+				ReturnStatement returnStatement = (ReturnStatement) lastStatement;
+				if (returnStatement.getExpression() instanceof ClassInstanceCreation) {
+					return (ClassInstanceCreation) returnStatement.getExpression();
+				}
+			}
+		}
+		// unknown state
+		return null;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/WizardPageInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/WizardPageInfo.java
index c53f356d7..0fec53924 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/WizardPageInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/WizardPageInfo.java
@@ -36,90 +36,90 @@
  * @coverage rcp.model.jface
  */
 public final class WizardPageInfo extends DialogPageInfo implements IJavaInfoRendering {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public WizardPageInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-    JavaInfoUtils.scheduleSpecialRendering(this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public WizardPageInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+		JavaInfoUtils.scheduleSpecialRendering(this);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Rendering
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static Shell m_parentShell;
-  private WizardDialog m_wizardDialog;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Rendering
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static Shell m_parentShell;
+	private WizardDialog m_wizardDialog;
 
-  @Override
-  public void render() throws Exception {
-    ClassLoader editorLoader = JavaInfoUtils.getClassLoader(this);
-    // prepare Wizard
-    Wizard wizard;
-    {
-      Class<?> wizardClass = editorLoader.loadClass("org.eclipse.jface.wizard.Wizard");
-      wizard = (Wizard) new ByteBuddy() //
-          .subclass(wizardClass) //
-          .make() //
-          .load(editorLoader) //
-          .getLoaded() //
-          .getConstructor() //
-          .newInstance();
-    }
-    // add this WizardPage
-    wizard.addPage((WizardPage) getObject());
-    // prepare parent Shell for WizardDialog
-    if (m_parentShell == null) {
-      m_parentShell = new Shell();
-    }
-    // create WizardDialog
-    m_wizardDialog = new WizardDialog(m_parentShell, wizard);
-    // open WizardDialog, so perform WizardPage GUI creation
-    try {
-      m_wizardDialog.create();
-      if (System.getProperty("__wbp_WizardPage_simulateException") != null) {
-        throw new RuntimeException("Simulated exception");
-      }
-    } catch (Throwable e) {
-      m_wizardDialog.close();
-      throwBetterException_forNoControl(e);
-      throw ReflectionUtils.propagate(e);
-    }
-    m_shell = m_wizardDialog.getShell();
-  }
+	@Override
+	public void render() throws Exception {
+		ClassLoader editorLoader = JavaInfoUtils.getClassLoader(this);
+		// prepare Wizard
+		Wizard wizard;
+		{
+			Class<?> wizardClass = editorLoader.loadClass("org.eclipse.jface.wizard.Wizard");
+			wizard = (Wizard) new ByteBuddy() //
+					.subclass(wizardClass) //
+					.make() //
+					.load(editorLoader) //
+					.getLoaded() //
+					.getConstructor() //
+					.newInstance();
+		}
+		// add this WizardPage
+		wizard.addPage((WizardPage) getObject());
+		// prepare parent Shell for WizardDialog
+		if (m_parentShell == null) {
+			m_parentShell = new Shell();
+		}
+		// create WizardDialog
+		m_wizardDialog = new WizardDialog(m_parentShell, wizard);
+		// open WizardDialog, so perform WizardPage GUI creation
+		try {
+			m_wizardDialog.create();
+			if (System.getProperty("__wbp_WizardPage_simulateException") != null) {
+				throw new RuntimeException("Simulated exception");
+			}
+		} catch (Throwable e) {
+			m_wizardDialog.close();
+			throwBetterException_forNoControl(e);
+			throw ReflectionUtils.propagate(e);
+		}
+		m_shell = m_wizardDialog.getShell();
+	}
 
-  /**
-   * Some not-so-smart users may try to edit {@link WizardPage} without {@link Control}.
-   */
-  private static void throwBetterException_forNoControl(Throwable e) {
-    if (DesignerExceptionUtils.hasTraceElementsSequence(e, new String[][]{
-        {"org.eclipse.core.runtime.Assert", "isNotNull"},
-        {"org.eclipse.jface.wizard.Wizard", "createPageControls"}})) {
-      throw new DesignerException(IExceptionConstants.NO_CONTROL_IN_WIZARD_PAGE);
-    }
-  }
+	/**
+	 * Some not-so-smart users may try to edit {@link WizardPage} without {@link Control}.
+	 */
+	private static void throwBetterException_forNoControl(Throwable e) {
+		if (DesignerExceptionUtils.hasTraceElementsSequence(e, new String[][]{
+			{"org.eclipse.core.runtime.Assert", "isNotNull"},
+			{"org.eclipse.jface.wizard.Wizard", "createPageControls"}})) {
+			throw new DesignerException(IExceptionConstants.NO_CONTROL_IN_WIZARD_PAGE);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void refresh_dispose() throws Exception {
-    // dispose WizardDialog
-    if (m_wizardDialog != null) {
-      if (m_shell != null && !ControlSupport.isDisposed(m_shell)) {
-        m_wizardDialog.close();
-      }
-      m_wizardDialog = null;
-      m_shell = null;
-    }
-    // call "super"
-    super.refresh_dispose();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void refresh_dispose() throws Exception {
+		// dispose WizardDialog
+		if (m_wizardDialog != null) {
+			if (m_shell != null && !ControlSupport.isDisposed(m_shell)) {
+				m_wizardDialog.close();
+			}
+			m_wizardDialog = null;
+			m_shell = null;
+		}
+		// call "super"
+		super.refresh_dispose();
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/action/ActionContainerInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/action/ActionContainerInfo.java
index 8fef594df..2df1b14ee 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/action/ActionContainerInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/action/ActionContainerInfo.java
@@ -52,196 +52,196 @@
  * @coverage rcp.model.jface
  */
 public final class ActionContainerInfo extends ObjectInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    return "{org.eclipse.wb.internal.rcp.model.jface.action.ActionContainerInfo}";
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public IObjectPresentation getPresentation() {
-    return new DefaultObjectPresentation(this) {
-      @Override
-      public String getText() throws Exception {
-        return "(actions)";
-      }
-
-      @Override
-      public Image getIcon() throws Exception {
-        return Activator.getImage("info/Action/container.gif");
-      }
-    };
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the existing or new {@link ActionContainerInfo} for given root.
-   */
-  public static ActionContainerInfo get(JavaInfo root) throws Exception {
-    // try to find existing container
-    ActionContainerInfo container = findContainer(root);
-    if (container != null) {
-      return container;
-    }
-    // add new container
-    container = new ActionContainerInfo();
-    root.addChild(container);
-    return container;
-  }
-
-  /**
-   * @return all {@link ActionInfo}'s for given root.
-   */
-  public static List<ActionInfo> getActions(JavaInfo root) {
-    ActionContainerInfo container = findContainer(root);
-    if (container != null) {
-      return container.getChildren(ActionInfo.class);
-    }
-    return Collections.emptyList();
-  }
-
-  /**
-   * @return find the existing {@link ActionContainerInfo} for given root.
-   */
-  private static ActionContainerInfo findContainer(JavaInfo root) {
-    for (ObjectInfo child : root.getChildren()) {
-      if (child instanceof ActionContainerInfo) {
-        return (ActionContainerInfo) child;
-      }
-    }
-    return null;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // New Action utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final static String KEY_NEW_ACTION = "KEY_NEW_ACTION";
-
-  /**
-   * @return the {@link ActionInfo} for adding direct subclass of {@link Action}.
-   */
-  public static ActionInfo createNew(JavaInfo root) throws Exception {
-    AstEditor editor = root.getEditor();
-    ActionInfo action =
-        (ActionInfo) JavaInfoUtils.createJavaInfo(
-            editor,
-            "org.eclipse.jface.action.Action",
-            new ConstructorCreationSupport());
-    action.putArbitraryValue(KEY_NEW_ACTION, Boolean.TRUE);
-    return action;
-  }
-
-  /**
-   * Ensures that given {@link ActionInfo} has instance in source, adds into source and to the
-   * {@link ActionContainerInfo} if needed.
-   *
-   * @param action
-   *          the {@link ActionInfo} to ensure.
-   */
-  public static void ensureInstance(JavaInfo root, final ActionInfo action) throws Exception {
-    if (action.getParent() == null) {
-      final AstEditor editor = root.getEditor();
-      // prepare "actionsMethod"
-      MethodDeclaration actionsMethod;
-      {
-        // prepare parameters for "actionsMethod"
-        String methodSignature = getExistingParameter(root, "actionContainer.signature");
-        String methodHeader = getExistingParameter(root, "actionContainer.header");
-        String methodInvocation = JavaInfoUtils.getParameter(root, "actionContainer.invocation");
-        // ensure "actionsMethod"
-        TypeDeclaration typeDeclaration = JavaInfoUtils.getTypeDeclaration(root);
-        actionsMethod = AstNodeUtils.getMethodBySignature(typeDeclaration, methodSignature);
-        if (actionsMethod == null) {
-          StatementTarget rootTarget = root.getVariableSupport().getStatementTarget();
-          MethodDeclaration rootMethod = editor.getEnclosingMethod(rootTarget.getPosition());
-          actionsMethod =
-              editor.addMethodDeclaration(
-                  methodHeader,
-                  ImmutableList.<String>of(),
-                  new BodyDeclarationTarget(rootMethod, false));
-          // if needed, invoke from constructor
-          if (methodInvocation != null) {
-            root.addExpressionStatement(rootTarget, methodInvocation);
-          }
-        }
-      }
-      // prepare target for new Action
-      final StatementTarget actionTarget;
-      {
-        Block targetBlock =
-            (Block) editor.addStatement(
-                ImmutableList.of("{", "}"),
-                new StatementTarget(actionsMethod, false));
-        actionTarget = new StatementTarget(targetBlock, true);
-      }
-      // set CreationSupport with two implemented methods:
-      //  - add_getSource()
-      //  - add_setSourceExpression(Expression)
-      if (action.getArbitraryValue(KEY_NEW_ACTION) == Boolean.TRUE) {
-        action.removeArbitraryValue(KEY_NEW_ACTION);
-        CreationSupport creationSupport = new ByteBuddy() //
-            .subclass(CreationSupport.class) //
-            .method(named("add_getSource")) //
-            .intercept(InvocationHandlerAdapter.of((Object obj, Method method, Object[] args) -> {
-              String eol = editor.getGeneration().getEndOfLine();
-              String source = "";
-              source += "new org.eclipse.jface.action.Action(\"New Action\") {" + eol;
-              source += "}";
-              return source;
-            })) //
-            .method(named("add_setSourceExpression"))
-            .intercept(InvocationHandlerAdapter.of((Object obj, Method method, Object[] args) -> {
-              ClassInstanceCreation creation = (ClassInstanceCreation) args[0];
-              action.setCreationSupport(new ConstructorCreationSupport(creation));
-              action.bindToExpression(creation);
-              return null;
-            })) //
-            .make() //
-            .load(CreationSupport.class.getClassLoader()) //
-            .getLoaded() //
-            .getConstructor() //
-            .newInstance();
-        action.setCreationSupport(creationSupport);
-      }
-      // do add new Action
-      JavaInfoUtils.add(
-          action,
-          new FieldUniqueVariableSupport(action),
-          PureFlatStatementGenerator.INSTANCE,
-          AssociationObjects.empty(),
-          root,
-          null,
-          actionTarget);
-      root.removeChild(action);
-      ActionContainerInfo.get(root).addChild(action);
-    }
-  }
-
-  /**
-   * @return the value of parameter from {@link JavaInfo}, checks that it is not <code>null</code>.
-   */
-  private static String getExistingParameter(JavaInfo javaInfo, String parameterName) {
-    String parameterValue = JavaInfoUtils.getParameter(javaInfo, parameterName);
-    Assert.isNotNull(
-        parameterValue,
-        "No '%s' parameter for %s.",
-        parameterName,
-        javaInfo.getDescription().getComponentClass());
-    return parameterValue;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		return "{org.eclipse.wb.internal.rcp.model.jface.action.ActionContainerInfo}";
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public IObjectPresentation getPresentation() {
+		return new DefaultObjectPresentation(this) {
+			@Override
+			public String getText() throws Exception {
+				return "(actions)";
+			}
+
+			@Override
+			public Image getIcon() throws Exception {
+				return Activator.getImage("info/Action/container.gif");
+			}
+		};
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the existing or new {@link ActionContainerInfo} for given root.
+	 */
+	public static ActionContainerInfo get(JavaInfo root) throws Exception {
+		// try to find existing container
+		ActionContainerInfo container = findContainer(root);
+		if (container != null) {
+			return container;
+		}
+		// add new container
+		container = new ActionContainerInfo();
+		root.addChild(container);
+		return container;
+	}
+
+	/**
+	 * @return all {@link ActionInfo}'s for given root.
+	 */
+	public static List<ActionInfo> getActions(JavaInfo root) {
+		ActionContainerInfo container = findContainer(root);
+		if (container != null) {
+			return container.getChildren(ActionInfo.class);
+		}
+		return Collections.emptyList();
+	}
+
+	/**
+	 * @return find the existing {@link ActionContainerInfo} for given root.
+	 */
+	private static ActionContainerInfo findContainer(JavaInfo root) {
+		for (ObjectInfo child : root.getChildren()) {
+			if (child instanceof ActionContainerInfo) {
+				return (ActionContainerInfo) child;
+			}
+		}
+		return null;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// New Action utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final static String KEY_NEW_ACTION = "KEY_NEW_ACTION";
+
+	/**
+	 * @return the {@link ActionInfo} for adding direct subclass of {@link Action}.
+	 */
+	public static ActionInfo createNew(JavaInfo root) throws Exception {
+		AstEditor editor = root.getEditor();
+		ActionInfo action =
+				(ActionInfo) JavaInfoUtils.createJavaInfo(
+						editor,
+						"org.eclipse.jface.action.Action",
+						new ConstructorCreationSupport());
+		action.putArbitraryValue(KEY_NEW_ACTION, Boolean.TRUE);
+		return action;
+	}
+
+	/**
+	 * Ensures that given {@link ActionInfo} has instance in source, adds into source and to the
+	 * {@link ActionContainerInfo} if needed.
+	 *
+	 * @param action
+	 *          the {@link ActionInfo} to ensure.
+	 */
+	public static void ensureInstance(JavaInfo root, final ActionInfo action) throws Exception {
+		if (action.getParent() == null) {
+			final AstEditor editor = root.getEditor();
+			// prepare "actionsMethod"
+			MethodDeclaration actionsMethod;
+			{
+				// prepare parameters for "actionsMethod"
+				String methodSignature = getExistingParameter(root, "actionContainer.signature");
+				String methodHeader = getExistingParameter(root, "actionContainer.header");
+				String methodInvocation = JavaInfoUtils.getParameter(root, "actionContainer.invocation");
+				// ensure "actionsMethod"
+				TypeDeclaration typeDeclaration = JavaInfoUtils.getTypeDeclaration(root);
+				actionsMethod = AstNodeUtils.getMethodBySignature(typeDeclaration, methodSignature);
+				if (actionsMethod == null) {
+					StatementTarget rootTarget = root.getVariableSupport().getStatementTarget();
+					MethodDeclaration rootMethod = editor.getEnclosingMethod(rootTarget.getPosition());
+					actionsMethod =
+							editor.addMethodDeclaration(
+									methodHeader,
+									ImmutableList.<String>of(),
+									new BodyDeclarationTarget(rootMethod, false));
+					// if needed, invoke from constructor
+					if (methodInvocation != null) {
+						root.addExpressionStatement(rootTarget, methodInvocation);
+					}
+				}
+			}
+			// prepare target for new Action
+			final StatementTarget actionTarget;
+			{
+				Block targetBlock =
+						(Block) editor.addStatement(
+								ImmutableList.of("{", "}"),
+								new StatementTarget(actionsMethod, false));
+				actionTarget = new StatementTarget(targetBlock, true);
+			}
+			// set CreationSupport with two implemented methods:
+			//  - add_getSource()
+			//  - add_setSourceExpression(Expression)
+			if (action.getArbitraryValue(KEY_NEW_ACTION) == Boolean.TRUE) {
+				action.removeArbitraryValue(KEY_NEW_ACTION);
+				CreationSupport creationSupport = new ByteBuddy() //
+						.subclass(CreationSupport.class) //
+						.method(named("add_getSource")) //
+						.intercept(InvocationHandlerAdapter.of((Object obj, Method method, Object[] args) -> {
+							String eol = editor.getGeneration().getEndOfLine();
+							String source = "";
+							source += "new org.eclipse.jface.action.Action(\"New Action\") {" + eol;
+							source += "}";
+							return source;
+						})) //
+						.method(named("add_setSourceExpression"))
+						.intercept(InvocationHandlerAdapter.of((Object obj, Method method, Object[] args) -> {
+							ClassInstanceCreation creation = (ClassInstanceCreation) args[0];
+							action.setCreationSupport(new ConstructorCreationSupport(creation));
+							action.bindToExpression(creation);
+							return null;
+						})) //
+						.make() //
+						.load(CreationSupport.class.getClassLoader()) //
+						.getLoaded() //
+						.getConstructor() //
+						.newInstance();
+				action.setCreationSupport(creationSupport);
+			}
+			// do add new Action
+			JavaInfoUtils.add(
+					action,
+					new FieldUniqueVariableSupport(action),
+					PureFlatStatementGenerator.INSTANCE,
+					AssociationObjects.empty(),
+					root,
+					null,
+					actionTarget);
+			root.removeChild(action);
+			ActionContainerInfo.get(root).addChild(action);
+		}
+	}
+
+	/**
+	 * @return the value of parameter from {@link JavaInfo}, checks that it is not <code>null</code>.
+	 */
+	private static String getExistingParameter(JavaInfo javaInfo, String parameterName) {
+		String parameterValue = JavaInfoUtils.getParameter(javaInfo, parameterName);
+		Assert.isNotNull(
+				parameterValue,
+				"No '%s' parameter for %s.",
+				parameterName,
+				javaInfo.getDescription().getComponentClass());
+		return parameterValue;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/action/ActionContributionItemInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/action/ActionContributionItemInfo.java
index 62f3fed9e..8a486ae1e 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/action/ActionContributionItemInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/action/ActionContributionItemInfo.java
@@ -38,101 +38,101 @@
  * @coverage rcp.model.jface
  */
 public final class ActionContributionItemInfo extends ContributionItemInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ActionContributionItemInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-    deleteWhenActionDeleting();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ActionContributionItemInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+		deleteWhenActionDeleting();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Broadcasts
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * When underlying {@link ActionInfo} is deleting, we should delete items which use it.
-   */
-  private void deleteWhenActionDeleting() {
-    addBroadcastListener(new ObjectInfoDelete() {
-      @Override
-      public void before(ObjectInfo parent, ObjectInfo child) throws Exception {
-        if (getAction() == child) {
-          delete();
-        }
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Broadcasts
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * When underlying {@link ActionInfo} is deleting, we should delete items which use it.
+	 */
+	private void deleteWhenActionDeleting() {
+		addBroadcastListener(new ObjectInfoDelete() {
+			@Override
+			public void before(ObjectInfo parent, ObjectInfo child) throws Exception {
+				if (getAction() == child) {
+					delete();
+				}
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final IObjectPresentation m_presentation = new DefaultJavaInfoPresentation(this) {
-    @Override
-    public Image getIcon() throws Exception {
-      return getAction().getPresentation().getIcon();
-    }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final IObjectPresentation m_presentation = new DefaultJavaInfoPresentation(this) {
+		@Override
+		public Image getIcon() throws Exception {
+			return getAction().getPresentation().getIcon();
+		}
 
-    @Override
-    public String getText() throws Exception {
-      if (isAddAction()) {
-        return getAction().getPresentation().getText();
-      }
-      return super.getText();
-    }
-  };
+		@Override
+		public String getText() throws Exception {
+			if (isAddAction()) {
+				return getAction().getPresentation().getText();
+			}
+			return super.getText();
+		}
+	};
 
-  @Override
-  public IObjectPresentation getPresentation() {
-    return m_presentation;
-  }
+	@Override
+	public IObjectPresentation getPresentation() {
+		return m_presentation;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Properties
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected List<Property> getPropertyList() throws Exception {
-    if (isAddAction()) {
-      Property[] actionProperties = getAction().getProperties();
-      return Lists.newArrayList(actionProperties);
-    }
-    return super.getPropertyList();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Properties
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected List<Property> getPropertyList() throws Exception {
+		if (isAddAction()) {
+			Property[] actionProperties = getAction().getProperties();
+			return Lists.newArrayList(actionProperties);
+		}
+		return super.getPropertyList();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if this {@link ActionContributionItemInfo} created using
-   *         {@link IContributionManager#add(IAction)}.
-   */
-  private boolean isAddAction() {
-    return getCreationSupport() instanceof ContributionManagerActionCreationSupport;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if this {@link ActionContributionItemInfo} created using
+	 *         {@link IContributionManager#add(IAction)}.
+	 */
+	private boolean isAddAction() {
+		return getCreationSupport() instanceof ContributionManagerActionCreationSupport;
+	}
 
-  /**
-   * @return the underlying {@link ActionInfo}.
-   */
-  public ActionInfo getAction() {
-    if (isAddAction()) {
-      ContributionManagerActionCreationSupport creationSupport =
-          (ContributionManagerActionCreationSupport) getCreationSupport();
-      return creationSupport.getAction();
-    } else {
-      ClassInstanceCreation creation = (ClassInstanceCreation) getCreationSupport().getNode();
-      Expression actionExpression = DomGenerics.arguments(creation).get(0);
-      return (ActionInfo) getRootJava().getChildRepresentedBy(actionExpression);
-    }
-  }
+	/**
+	 * @return the underlying {@link ActionInfo}.
+	 */
+	public ActionInfo getAction() {
+		if (isAddAction()) {
+			ContributionManagerActionCreationSupport creationSupport =
+					(ContributionManagerActionCreationSupport) getCreationSupport();
+			return creationSupport.getAction();
+		} else {
+			ClassInstanceCreation creation = (ClassInstanceCreation) getCreationSupport().getNode();
+			Expression actionExpression = DomGenerics.arguments(creation).get(0);
+			return (ActionInfo) getRootJava().getChildRepresentedBy(actionExpression);
+		}
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/action/ActionInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/action/ActionInfo.java
index dbd5ccec0..860aadbab 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/action/ActionInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/action/ActionInfo.java
@@ -36,84 +36,84 @@
  * @coverage rcp.model.jface
  */
 public final class ActionInfo extends JavaInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ActionInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-    // add to palette
-    addBroadcastListener(new PaletteEventListener() {
-      @Override
-      public void entries(CategoryInfo category, List<EntryInfo> entries) throws Exception {
-        if (category.getId().equals("org.eclipse.wb.rcp.jface.actions")) {
-          entries.add(new ActionUseEntryInfo(ActionInfo.this));
-        }
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ActionInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+		// add to palette
+		addBroadcastListener(new PaletteEventListener() {
+			@Override
+			public void entries(CategoryInfo category, List<EntryInfo> entries) throws Exception {
+				if (category.getId().equals("org.eclipse.wb.rcp.jface.actions")) {
+					entries.add(new ActionUseEntryInfo(ActionInfo.this));
+				}
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void refresh_dispose() throws Exception {
-    super.refresh_dispose();
-    // dispose ImageDescriptor image
-    if (m_iconImage != null) {
-      m_iconImage = null;
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void refresh_dispose() throws Exception {
+		super.refresh_dispose();
+		// dispose ImageDescriptor image
+		if (m_iconImage != null) {
+			m_iconImage = null;
+		}
+	}
 
-  @Override
-  protected void refresh_fetch() throws Exception {
-    super.refresh_fetch();
-    // update ImageDescriptor image
-    refreshIconImage();
-  }
+	@Override
+	protected void refresh_fetch() throws Exception {
+		super.refresh_fetch();
+		// update ImageDescriptor image
+		refreshIconImage();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * The SWT {@link Image} created from {@link ImageDescriptor}, may be <code>null</code>.
-   */
-  private Image m_iconImage;
-  private final IObjectPresentation m_presentation = new DefaultJavaInfoPresentation(this) {
-    @Override
-    public Image getIcon() throws Exception {
-      if (m_iconImage != null) {
-        return m_iconImage;
-      }
-      if (getCreationSupport() instanceof IActionIconProvider) {
-        IActionIconProvider iconProvider = (IActionIconProvider) getCreationSupport();
-        return iconProvider.getActionIcon();
-      }
-      return super.getIcon();
-    }
-  };
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * The SWT {@link Image} created from {@link ImageDescriptor}, may be <code>null</code>.
+	 */
+	private Image m_iconImage;
+	private final IObjectPresentation m_presentation = new DefaultJavaInfoPresentation(this) {
+		@Override
+		public Image getIcon() throws Exception {
+			if (m_iconImage != null) {
+				return m_iconImage;
+			}
+			if (getCreationSupport() instanceof IActionIconProvider) {
+				IActionIconProvider iconProvider = (IActionIconProvider) getCreationSupport();
+				return iconProvider.getActionIcon();
+			}
+			return super.getIcon();
+		}
+	};
 
-  @Override
-  public IObjectPresentation getPresentation() {
-    return m_presentation;
-  }
+	@Override
+	public IObjectPresentation getPresentation() {
+		return m_presentation;
+	}
 
-  /**
-   * Converts {@link ImageDescriptor} into {@link #m_iconImage}.
-   */
-  private void refreshIconImage() throws Exception {
-    // if Action has ImageDescriptor, convert it into Image
-    Object imageDescription = ReflectionUtils.invokeMethod2(getObject(), "getImageDescriptor");
-    if (imageDescription != null) {
-      m_iconImage = (Image) ReflectionUtils.invokeMethod2(imageDescription, "createImage");
-      ImageDisposer.add(this, "iconImage", m_iconImage);
-    }
-  }
+	/**
+	 * Converts {@link ImageDescriptor} into {@link #m_iconImage}.
+	 */
+	private void refreshIconImage() throws Exception {
+		// if Action has ImageDescriptor, convert it into Image
+		Object imageDescription = ReflectionUtils.invokeMethod2(getObject(), "getImageDescriptor");
+		if (imageDescription != null) {
+			m_iconImage = (Image) ReflectionUtils.invokeMethod2(imageDescription, "createImage");
+			ImageDisposer.add(this, "iconImage", m_iconImage);
+		}
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/action/ActionRootProcessor.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/action/ActionRootProcessor.java
index 33e810c4c..d7f1b99af 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/action/ActionRootProcessor.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/action/ActionRootProcessor.java
@@ -35,130 +35,130 @@
  * @coverage rcp.model.jface
  */
 public final class ActionRootProcessor implements IRootProcessor {
-  /**
-   * Id of palette {@link CategoryInfo} with {@link Action} related entries.
-   */
-  public static final String ACTIONS_CATEGORY_ID = "org.eclipse.wb.rcp.jface.actions";
-  /**
-   * Id of palette {@link CategoryInfo} with "Menu" related entries.
-   */
-  public static final String MENU_CATEGORY_ID = "org.eclipse.wb.rcp.menu";
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final IRootProcessor INSTANCE = new ActionRootProcessor();
+	/**
+	 * Id of palette {@link CategoryInfo} with {@link Action} related entries.
+	 */
+	public static final String ACTIONS_CATEGORY_ID = "org.eclipse.wb.rcp.jface.actions";
+	/**
+	 * Id of palette {@link CategoryInfo} with "Menu" related entries.
+	 */
+	public static final String MENU_CATEGORY_ID = "org.eclipse.wb.rcp.menu";
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final IRootProcessor INSTANCE = new ActionRootProcessor();
 
-  private ActionRootProcessor() {
-  }
+	private ActionRootProcessor() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IRootProcessor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void process(JavaInfo root, List<JavaInfo> components) throws Exception {
-    processRoot(root);
-    processComponents(root, components);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IRootProcessor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void process(JavaInfo root, List<JavaInfo> components) throws Exception {
+		processRoot(root);
+		processComponents(root, components);
+	}
 
-  private void processRoot(final JavaInfo root) {
-    if (root.getDescription().getToolkit() == ToolkitProvider.DESCRIPTION) {
-      root.addBroadcastListener(new PaletteEventListener() {
-        @Override
-        public void categories(List<CategoryInfo> categories) throws Exception {
-          addActionElements(root, categories);
-        }
-      });
-    }
-  }
+	private void processRoot(final JavaInfo root) {
+		if (root.getDescription().getToolkit() == ToolkitProvider.DESCRIPTION) {
+			root.addBroadcastListener(new PaletteEventListener() {
+				@Override
+				public void categories(List<CategoryInfo> categories) throws Exception {
+					addActionElements(root, categories);
+				}
+			});
+		}
+	}
 
-  private void processComponents(final JavaInfo root, final List<JavaInfo> components)
-      throws Exception {
-    // bind {@link Action_Info}'s into hierarchy.
-    for (JavaInfo javaInfo : components) {
-      if (javaInfo instanceof ActionInfo) {
-        ActionInfo actionInfo = (ActionInfo) javaInfo;
-        actionInfo.setAssociation(new EmptyAssociation());
-        ActionContainerInfo.get(root).addChild(actionInfo);
-      }
-    }
-  }
+	private void processComponents(final JavaInfo root, final List<JavaInfo> components)
+			throws Exception {
+		// bind {@link Action_Info}'s into hierarchy.
+		for (JavaInfo javaInfo : components) {
+			if (javaInfo instanceof ActionInfo) {
+				ActionInfo actionInfo = (ActionInfo) javaInfo;
+				actionInfo.setAssociation(new EmptyAssociation());
+				ActionContainerInfo.get(root).addChild(actionInfo);
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Implementation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds {@link ActionInfo} category and entries.
-   */
-  private static void addActionElements(JavaInfo root, List<CategoryInfo> categories)
-      throws Exception {
-    CategoryInfo category = new CategoryInfo();
-    category.setId(ACTIONS_CATEGORY_ID);
-    category.setName("JFace Actions");
-    category.setOpen(true);
-    // add standard entries
-    if (hasChildOfType(root, ContributionManagerInfo.class)) {
-      category.addEntry(new ActionNewEntryInfo(category.getId() + ".newAction"));
-      category.addEntry(new ActionExternalEntryInfo(category.getId() + ".externalAction"));
-      {
-        ComponentEntryInfo separatorEntry = new ComponentEntryInfo();
-        separatorEntry.setId(category.getId() + ".separator");
-        separatorEntry.setComponentClassName("org.eclipse.jface.action.Separator");
-        category.addEntry(separatorEntry);
-      }
-    }
-    // need MenuManager
-    if (hasChildOfType(root, MenuManagerInfo.class)) {
-      ComponentEntryInfo menuManagerEntry = new ComponentEntryInfo();
-      menuManagerEntry.setId(category.getId() + ".menuManager");
-      menuManagerEntry.setComponentClassName("org.eclipse.jface.action.MenuManager");
-      category.addEntry(menuManagerEntry);
-    }
-    // need CoolBarManager
-    if (hasChildOfType(root, CoolBarManagerInfo.class)) {
-      ComponentEntryInfo toolBarManagerEntry = new ComponentEntryInfo();
-      toolBarManagerEntry.setId(category.getId() + ".toolBarManager");
-      toolBarManagerEntry.setComponentClassName("org.eclipse.jface.action.ToolBarManager");
-      category.addEntry(toolBarManagerEntry);
-    }
-    // add if there are entries
-    if (!category.getEntries().isEmpty()) {
-      addActionsCategory(categories, category);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Implementation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds {@link ActionInfo} category and entries.
+	 */
+	private static void addActionElements(JavaInfo root, List<CategoryInfo> categories)
+			throws Exception {
+		CategoryInfo category = new CategoryInfo();
+		category.setId(ACTIONS_CATEGORY_ID);
+		category.setName("JFace Actions");
+		category.setOpen(true);
+		// add standard entries
+		if (hasChildOfType(root, ContributionManagerInfo.class)) {
+			category.addEntry(new ActionNewEntryInfo(category.getId() + ".newAction"));
+			category.addEntry(new ActionExternalEntryInfo(category.getId() + ".externalAction"));
+			{
+				ComponentEntryInfo separatorEntry = new ComponentEntryInfo();
+				separatorEntry.setId(category.getId() + ".separator");
+				separatorEntry.setComponentClassName("org.eclipse.jface.action.Separator");
+				category.addEntry(separatorEntry);
+			}
+		}
+		// need MenuManager
+		if (hasChildOfType(root, MenuManagerInfo.class)) {
+			ComponentEntryInfo menuManagerEntry = new ComponentEntryInfo();
+			menuManagerEntry.setId(category.getId() + ".menuManager");
+			menuManagerEntry.setComponentClassName("org.eclipse.jface.action.MenuManager");
+			category.addEntry(menuManagerEntry);
+		}
+		// need CoolBarManager
+		if (hasChildOfType(root, CoolBarManagerInfo.class)) {
+			ComponentEntryInfo toolBarManagerEntry = new ComponentEntryInfo();
+			toolBarManagerEntry.setId(category.getId() + ".toolBarManager");
+			toolBarManagerEntry.setComponentClassName("org.eclipse.jface.action.ToolBarManager");
+			category.addEntry(toolBarManagerEntry);
+		}
+		// add if there are entries
+		if (!category.getEntries().isEmpty()) {
+			addActionsCategory(categories, category);
+		}
+	}
 
-  /**
-   * Adds given "JFace Actions" category, if possible - before SWT "Menu" category, if not - at the
-   * end.
-   */
-  private static void addActionsCategory(List<CategoryInfo> categories, CategoryInfo category) {
-    for (ListIterator<CategoryInfo> I = categories.listIterator(0); I.hasNext();) {
-      CategoryInfo existingCategory = I.next();
-      if (existingCategory.getId().equals(MENU_CATEGORY_ID)) {
-        categories.add(I.previousIndex(), category);
-        return;
-      }
-    }
-    categories.add(category);
-  }
+	/**
+	 * Adds given "JFace Actions" category, if possible - before SWT "Menu" category, if not - at the
+	 * end.
+	 */
+	private static void addActionsCategory(List<CategoryInfo> categories, CategoryInfo category) {
+		for (ListIterator<CategoryInfo> I = categories.listIterator(0); I.hasNext();) {
+			CategoryInfo existingCategory = I.next();
+			if (existingCategory.getId().equals(MENU_CATEGORY_ID)) {
+				categories.add(I.previousIndex(), category);
+				return;
+			}
+		}
+		categories.add(category);
+	}
 
-  /**
-   * @return <code>true</code> if given {@link JavaInfo} has direct/indirect child with given
-   *         {@link Class} of model.
-   */
-  private static boolean hasChildOfType(JavaInfo root, final Class<?> clazz) {
-    final boolean[] result = new boolean[1];
-    root.accept(new ObjectInfoVisitor() {
-      @Override
-      public void endVisit(ObjectInfo objectInfo) throws Exception {
-        result[0] |= clazz.isAssignableFrom(objectInfo.getClass());
-      }
-    });
-    return result[0];
-  }
+	/**
+	 * @return <code>true</code> if given {@link JavaInfo} has direct/indirect child with given
+	 *         {@link Class} of model.
+	 */
+	private static boolean hasChildOfType(JavaInfo root, final Class<?> clazz) {
+		final boolean[] result = new boolean[1];
+		root.accept(new ObjectInfoVisitor() {
+			@Override
+			public void endVisit(ObjectInfo objectInfo) throws Exception {
+				result[0] |= clazz.isAssignableFrom(objectInfo.getClass());
+			}
+		});
+		return result[0];
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/action/ContributionItemInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/action/ContributionItemInfo.java
index 96d14c0db..c8c4c4fdd 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/action/ContributionItemInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/action/ContributionItemInfo.java
@@ -24,14 +24,14 @@
  * @coverage rcp.model.jface
  */
 public class ContributionItemInfo extends AbstractComponentInfo implements IContributionItemInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ContributionItemInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ContributionItemInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/action/ContributionManagerActionCreationSupport.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/action/ContributionManagerActionCreationSupport.java
index e5b28128e..5639605f6 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/action/ContributionManagerActionCreationSupport.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/action/ContributionManagerActionCreationSupport.java
@@ -30,80 +30,80 @@
  * @coverage rcp.model.jface
  */
 public final class ContributionManagerActionCreationSupport extends VoidInvocationCreationSupport {
-  private final ActionInfo m_action;
+	private final ActionInfo m_action;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ContributionManagerActionCreationSupport(JavaInfo hostJavaInfo,
-      MethodDescription description,
-      MethodInvocation invocation,
-      JavaInfo[] argumentInfos) {
-    super(hostJavaInfo, description, invocation);
-    m_action = (ActionInfo) argumentInfos[0];
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ContributionManagerActionCreationSupport(JavaInfo hostJavaInfo,
+			MethodDescription description,
+			MethodInvocation invocation,
+			JavaInfo[] argumentInfos) {
+		super(hostJavaInfo, description, invocation);
+		m_action = (ActionInfo) argumentInfos[0];
+	}
 
-  public ContributionManagerActionCreationSupport(JavaInfo hostJavaInfo, ActionInfo action) {
-    super(hostJavaInfo, getMethodDescription(hostJavaInfo));
-    m_action = action;
-  }
+	public ContributionManagerActionCreationSupport(JavaInfo hostJavaInfo, ActionInfo action) {
+		super(hostJavaInfo, getMethodDescription(hostJavaInfo));
+		m_action = action;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static MethodDescription getMethodDescription(JavaInfo hostJavaInfo) {
-    return hostJavaInfo.getDescription().getMethod("add(org.eclipse.jface.action.IAction)");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static MethodDescription getMethodDescription(JavaInfo hostJavaInfo) {
+		return hostJavaInfo.getDescription().getMethod("add(org.eclipse.jface.action.IAction)");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Object getObject(Object manager) throws Exception {
-    Object[] items = (Object[]) ReflectionUtils.invokeMethod2(manager, "getItems");
-    return items[items.length - 1];
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Object getObject(Object manager) throws Exception {
+		Object[] items = (Object[]) ReflectionUtils.invokeMethod2(manager, "getItems");
+		return items[items.length - 1];
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Special access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link ActionInfo} that is added to create this {@link ActionContributionItemInfo}.
-   */
-  public ActionInfo getAction() {
-    return m_action;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Special access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link ActionInfo} that is added to create this {@link ActionContributionItemInfo}.
+	 */
+	public ActionInfo getAction() {
+		return m_action;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Validation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final boolean canReorder() {
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Validation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final boolean canReorder() {
+		return true;
+	}
 
-  @Override
-  public final boolean canReparent() {
-    return true;
-  }
+	@Override
+	public final boolean canReparent() {
+		return true;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Adding
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String add_getMethodSource() throws Exception {
-    return TemplateUtils.format("add({0})", m_action);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Adding
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String add_getMethodSource() throws Exception {
+		return TemplateUtils.format("add({0})", m_action);
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/action/ContributionManagerInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/action/ContributionManagerInfo.java
index 1b2f268f6..13e68ba58 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/action/ContributionManagerInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/action/ContributionManagerInfo.java
@@ -49,266 +49,266 @@
  * @coverage rcp.model.jface
  */
 public abstract class ContributionManagerInfo extends AbstractComponentInfo {
-  private Object m_componentObject;
+	private Object m_componentObject;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ContributionManagerInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ContributionManagerInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link IContributionItem} model children.
-   */
-  public final List<AbstractComponentInfo> getItems() {
-    List<AbstractComponentInfo> contributionItems = Lists.newArrayList();
-    for (ObjectInfo child : getChildren()) {
-      if (child instanceof ContributionItemInfo || child instanceof MenuManagerInfo) {
-        contributionItems.add((AbstractComponentInfo) child);
-      }
-    }
-    return contributionItems;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link IContributionItem} model children.
+	 */
+	public final List<AbstractComponentInfo> getItems() {
+		List<AbstractComponentInfo> contributionItems = Lists.newArrayList();
+		for (ObjectInfo child : getChildren()) {
+			if (child instanceof ContributionItemInfo || child instanceof MenuManagerInfo) {
+				contributionItems.add((AbstractComponentInfo) child);
+			}
+		}
+		return contributionItems;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Component
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets the {@link Object} for this {@link ContributionManagerInfo}.<br>
-   * This method is invoked from top-level RCP container, such as ApplicationWindow, ViewPart, etc.
-   */
-  public void setComponentObject(Object componentObject) {
-    m_componentObject = componentObject;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Component
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets the {@link Object} for this {@link ContributionManagerInfo}.<br>
+	 * This method is invoked from top-level RCP container, such as ApplicationWindow, ViewPart, etc.
+	 */
+	public void setComponentObject(Object componentObject) {
+		m_componentObject = componentObject;
+	}
 
-  @Override
-  public Object getComponentObject() {
-    return m_componentObject != null ? m_componentObject : getObject();
-  }
+	@Override
+	public Object getComponentObject() {
+		return m_componentObject != null ? m_componentObject : getObject();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void refresh_afterCreate0() throws Exception {
-    super.refresh_afterCreate0();
-    refresh_forceSeparators();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void refresh_afterCreate0() throws Exception {
+		super.refresh_afterCreate0();
+		refresh_forceSeparators();
+	}
 
-  /**
-   * {@link IContributionManager} perform optimization during filling, by not creating
-   * {@link Separator}'s if there are no other/real {@link ContributionItem}'s before/after. But
-   * during design time we want to see all {@link Separator}'s, so this method adds artificial
-   * {@link ContributionItem}'s to force {@link Separator}'s creation.
-   */
-  private void refresh_forceSeparators() throws ClassNotFoundException, Exception {
-    // in any case insert ContributionItem as first item, just to make this ContributionManager "visible"
-    insertArtificialContributionItem(0);
-    // insert ContributionItem after each Separator
-    Object manager = getObject();
-    Object[] items = (Object[]) ReflectionUtils.invokeMethod2(manager, "getItems");
-    for (Object item : items) {
-      if (item.getClass().getName().equals("org.eclipse.jface.action.Separator")) {
-        int index = low_getIndex(item);
-        insertArtificialContributionItem(index + 1);
-      }
-    }
-    // do update
-    low_update();
-  }
+	/**
+	 * {@link IContributionManager} perform optimization during filling, by not creating
+	 * {@link Separator}'s if there are no other/real {@link ContributionItem}'s before/after. But
+	 * during design time we want to see all {@link Separator}'s, so this method adds artificial
+	 * {@link ContributionItem}'s to force {@link Separator}'s creation.
+	 */
+	private void refresh_forceSeparators() throws ClassNotFoundException, Exception {
+		// in any case insert ContributionItem as first item, just to make this ContributionManager "visible"
+		insertArtificialContributionItem(0);
+		// insert ContributionItem after each Separator
+		Object manager = getObject();
+		Object[] items = (Object[]) ReflectionUtils.invokeMethod2(manager, "getItems");
+		for (Object item : items) {
+			if (item.getClass().getName().equals("org.eclipse.jface.action.Separator")) {
+				int index = low_getIndex(item);
+				insertArtificialContributionItem(index + 1);
+			}
+		}
+		// do update
+		low_update();
+	}
 
-  /**
-   * Inserts new {@link ContributionItem} that does not perform any <code>fill</code>.
-   */
-  private void insertArtificialContributionItem(int index) throws Exception {
-    Object item;
-    {
-      ClassLoader editorLoader = JavaInfoUtils.getClassLoader(this);
-      String itemClassName = getArtificialContributionItem_className();
-      Class<?> itemClass = editorLoader.loadClass(itemClassName);
-      item = new ByteBuddy() //
-          .subclass(itemClass) //
-          .make() //
-          .load(editorLoader) //
-          .getLoaded() //
-          .getConstructor() //
-          .newInstance();
-    }
-    // do insert
-    low_insertContributionItem(index, item);
-  }
+	/**
+	 * Inserts new {@link ContributionItem} that does not perform any <code>fill</code>.
+	 */
+	private void insertArtificialContributionItem(int index) throws Exception {
+		Object item;
+		{
+			ClassLoader editorLoader = JavaInfoUtils.getClassLoader(this);
+			String itemClassName = getArtificialContributionItem_className();
+			Class<?> itemClass = editorLoader.loadClass(itemClassName);
+			item = new ByteBuddy() //
+					.subclass(itemClass) //
+					.make() //
+					.load(editorLoader) //
+					.getLoaded() //
+					.getConstructor() //
+					.newInstance();
+		}
+		// do insert
+		low_insertContributionItem(index, item);
+	}
 
-  /**
-   * Usually just {@link ContributionItem}, but because of
-   * https://bugs.eclipse.org/bugs/show_bug.cgi?id=260685 we need tweak for {@link CoolBarManager}.
-   * <p>
-   * TODO remove this after fixing Eclipse bug.
-   */
-  private String getArtificialContributionItem_className() {
-    if (this instanceof CoolBarManagerInfo) {
-      return "org.eclipse.jface.action.ToolBarContributionItem";
-    }
-    return "org.eclipse.jface.action.ContributionItem";
-  }
+	/**
+	 * Usually just {@link ContributionItem}, but because of
+	 * https://bugs.eclipse.org/bugs/show_bug.cgi?id=260685 we need tweak for {@link CoolBarManager}.
+	 * <p>
+	 * TODO remove this after fixing Eclipse bug.
+	 */
+	private String getArtificialContributionItem_className() {
+		if (this instanceof CoolBarManagerInfo) {
+			return "org.eclipse.jface.action.ToolBarContributionItem";
+		}
+		return "org.eclipse.jface.action.ContributionItem";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Low level ContributionItem
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the index of given {@link ContributionItem} in this {@link ContributionManager}.
-   */
-  int low_getIndex(Object item) throws Exception {
-    return (Integer) ReflectionUtils.invokeMethod(
-        getObject(),
-        "indexOf(org.eclipse.jface.action.IContributionItem)",
-        item);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Low level ContributionItem
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the index of given {@link ContributionItem} in this {@link ContributionManager}.
+	 */
+	int low_getIndex(Object item) throws Exception {
+		return (Integer) ReflectionUtils.invokeMethod(
+				getObject(),
+				"indexOf(org.eclipse.jface.action.IContributionItem)",
+				item);
+	}
 
-  /**
-   * Calls {@link ContributionManager#insert(int, IContributionItem)}.
-   */
-  void low_insertContributionItem(int index, Object item) throws Exception {
-    ReflectionUtils.invokeMethod(
-        getObject(),
-        "insert(int,org.eclipse.jface.action.IContributionItem)",
-        index,
-        item);
-  }
+	/**
+	 * Calls {@link ContributionManager#insert(int, IContributionItem)}.
+	 */
+	void low_insertContributionItem(int index, Object item) throws Exception {
+		ReflectionUtils.invokeMethod(
+				getObject(),
+				"insert(int,org.eclipse.jface.action.IContributionItem)",
+				index,
+				item);
+	}
 
-  /**
-   * Calls {@link ContributionManager#update(boolean)}.
-   */
-  void low_update() throws Exception {
-    ReflectionUtils.invokeMethod(getObject(), "update(boolean)", false);
-  }
+	/**
+	 * Calls {@link ContributionManager#update(boolean)}.
+	 */
+	void low_update() throws Exception {
+		ReflectionUtils.invokeMethod(getObject(), "update(boolean)", false);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Creates new {@link ContributionItemInfo} using given {@link ActionInfo}.
-   *
-   * @return the created {@link ActionContributionItemInfo}.
-   */
-  public ActionContributionItemInfo command_CREATE(ActionInfo action, AbstractComponentInfo nextItem)
-      throws Exception {
-    ActionContainerInfo.ensureInstance(getRootJava(), action);
-    // prepare "item" for "action"
-    ActionContributionItemInfo item;
-    {
-      AstEditor editor = getEditor();
-      CreationSupport creationSupport = new ContributionManagerActionCreationSupport(this, action);
-      item =
-          (ActionContributionItemInfo) JavaInfoUtils.createJavaInfo(
-              editor,
-              "org.eclipse.jface.action.ActionContributionItem",
-              creationSupport);
-    }
-    // add "item" for "action"
-    JavaInfoUtils.add(
-        item,
-        new VoidInvocationVariableSupport(item),
-        PureFlatStatementGenerator.INSTANCE,
-        AssociationObjects.invocationVoid(),
-        this,
-        nextItem);
-    return item;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Creates new {@link ContributionItemInfo} using given {@link ActionInfo}.
+	 *
+	 * @return the created {@link ActionContributionItemInfo}.
+	 */
+	public ActionContributionItemInfo command_CREATE(ActionInfo action, AbstractComponentInfo nextItem)
+			throws Exception {
+		ActionContainerInfo.ensureInstance(getRootJava(), action);
+		// prepare "item" for "action"
+		ActionContributionItemInfo item;
+		{
+			AstEditor editor = getEditor();
+			CreationSupport creationSupport = new ContributionManagerActionCreationSupport(this, action);
+			item =
+					(ActionContributionItemInfo) JavaInfoUtils.createJavaInfo(
+							editor,
+							"org.eclipse.jface.action.ActionContributionItem",
+							creationSupport);
+		}
+		// add "item" for "action"
+		JavaInfoUtils.add(
+				item,
+				new VoidInvocationVariableSupport(item),
+				PureFlatStatementGenerator.INSTANCE,
+				AssociationObjects.invocationVoid(),
+				this,
+				nextItem);
+		return item;
+	}
 
-  /**
-   * Creates new {@link ContributionItemInfo}.
-   */
-  public void command_CREATE(AbstractComponentInfo item, AbstractComponentInfo nextItem)
-      throws Exception {
-    if (item instanceof ContributionManagerInfo) {
-      JavaInfoUtils.add(item, getAssociation_(), this, nextItem);
-    } else {
-      JavaInfoUtils.add(
-          item,
-          new LocalUniqueVariableSupport(item),
-          PureFlatStatementGenerator.INSTANCE,
-          getAssociation_(),
-          this,
-          nextItem);
-      if (item.getVariableSupport() instanceof LocalUniqueVariableSupport) {
-        ((LocalUniqueVariableSupport) item.getVariableSupport()).inline();
-      }
-    }
-  }
+	/**
+	 * Creates new {@link ContributionItemInfo}.
+	 */
+	public void command_CREATE(AbstractComponentInfo item, AbstractComponentInfo nextItem)
+			throws Exception {
+		if (item instanceof ContributionManagerInfo) {
+			JavaInfoUtils.add(item, getAssociation_(), this, nextItem);
+		} else {
+			JavaInfoUtils.add(
+					item,
+					new LocalUniqueVariableSupport(item),
+					PureFlatStatementGenerator.INSTANCE,
+					getAssociation_(),
+					this,
+					nextItem);
+			if (item.getVariableSupport() instanceof LocalUniqueVariableSupport) {
+				((LocalUniqueVariableSupport) item.getVariableSupport()).inline();
+			}
+		}
+	}
 
-  /**
-   * Moves {@link ContributionItemInfo}.
-   */
-  public void command_MOVE(AbstractComponentInfo item, AbstractComponentInfo nextItem)
-      throws Exception {
-    ObjectInfo oldParent = item.getParent();
-    if (item.getCreationSupport() instanceof ContributionManagerActionCreationSupport
-        && oldParent != this) {
-      getBroadcastJava().moveBefore0(item, oldParent, this);
-      getBroadcastJava().moveBefore(item, oldParent, this);
-      // update source/AST
-      {
-        AstEditor editor = getEditor();
-        // prepare current state
-        ContributionManagerActionCreationSupport oldCreationSupport =
-            (ContributionManagerActionCreationSupport) item.getCreationSupport();
-        ActionInfo action = oldCreationSupport.getAction();
-        // remove old add() invocation
-        editor.removeEnclosingStatement(oldCreationSupport.getNode());
-        // add new add() invocation
-        MethodInvocation addInvocation;
-        {
-          StatementTarget target = JavaInfoUtils.getTarget(this, item, nextItem);
-          String addSource = TemplateUtils.format("{0}.add({1})", this, action);
-          addInvocation = (MethodInvocation) addExpressionStatement(target, addSource);
-        }
-        // use new CreationSupport and Association
-        MethodDescription description =
-            getDescription().getMethod("add(org.eclipse.jface.action.IAction)");
-        item.setCreationSupport(new ContributionManagerActionCreationSupport(this,
-            description,
-            addInvocation,
-            new JavaInfo[]{action}));
-        item.setAssociation(new InvocationVoidAssociation(addInvocation));
-      }
-      // move model
-      oldParent.removeChild(item);
-      addChild(item, nextItem);
-      getBroadcastJava().moveAfter(item, oldParent, this);
-    } else {
-      JavaInfoUtils.move(item, getAssociation_(), this, nextItem);
-      if (item.getVariableSupport() instanceof LocalUniqueVariableSupport) {
-        LocalUniqueVariableSupport variableSupport =
-            (LocalUniqueVariableSupport) item.getVariableSupport();
-        if (variableSupport.canInline()) {
-          variableSupport.inline();
-        }
-      }
-    }
-  }
+	/**
+	 * Moves {@link ContributionItemInfo}.
+	 */
+	public void command_MOVE(AbstractComponentInfo item, AbstractComponentInfo nextItem)
+			throws Exception {
+		ObjectInfo oldParent = item.getParent();
+		if (item.getCreationSupport() instanceof ContributionManagerActionCreationSupport
+				&& oldParent != this) {
+			getBroadcastJava().moveBefore0(item, oldParent, this);
+			getBroadcastJava().moveBefore(item, oldParent, this);
+			// update source/AST
+			{
+				AstEditor editor = getEditor();
+				// prepare current state
+				ContributionManagerActionCreationSupport oldCreationSupport =
+						(ContributionManagerActionCreationSupport) item.getCreationSupport();
+				ActionInfo action = oldCreationSupport.getAction();
+				// remove old add() invocation
+				editor.removeEnclosingStatement(oldCreationSupport.getNode());
+				// add new add() invocation
+				MethodInvocation addInvocation;
+				{
+					StatementTarget target = JavaInfoUtils.getTarget(this, item, nextItem);
+					String addSource = TemplateUtils.format("{0}.add({1})", this, action);
+					addInvocation = (MethodInvocation) addExpressionStatement(target, addSource);
+				}
+				// use new CreationSupport and Association
+				MethodDescription description =
+						getDescription().getMethod("add(org.eclipse.jface.action.IAction)");
+				item.setCreationSupport(new ContributionManagerActionCreationSupport(this,
+						description,
+						addInvocation,
+						new JavaInfo[]{action}));
+				item.setAssociation(new InvocationVoidAssociation(addInvocation));
+			}
+			// move model
+			oldParent.removeChild(item);
+			addChild(item, nextItem);
+			getBroadcastJava().moveAfter(item, oldParent, this);
+		} else {
+			JavaInfoUtils.move(item, getAssociation_(), this, nextItem);
+			if (item.getVariableSupport() instanceof LocalUniqueVariableSupport) {
+				LocalUniqueVariableSupport variableSupport =
+						(LocalUniqueVariableSupport) item.getVariableSupport();
+				if (variableSupport.canInline()) {
+					variableSupport.inline();
+				}
+			}
+		}
+	}
 
-  /**
-   * @return the standard {@link AssociationObject} for {@link IContributionManager}.
-   */
-  private static AssociationObject getAssociation_() throws Exception {
-    return AssociationObjects.invocationChild("%parent%.add(%child%)", false);
-  }
+	/**
+	 * @return the standard {@link AssociationObject} for {@link IContributionManager}.
+	 */
+	private static AssociationObject getAssociation_() throws Exception {
+		return AssociationObjects.invocationChild("%parent%.add(%child%)", false);
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/action/CoolBarManagerInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/action/CoolBarManagerInfo.java
index aab33e98c..17b147846 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/action/CoolBarManagerInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/action/CoolBarManagerInfo.java
@@ -39,96 +39,96 @@
  * @coverage rcp.model.jface
  */
 public final class CoolBarManagerInfo extends ContributionManagerInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CoolBarManagerInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CoolBarManagerInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public List<ToolBarManagerInfo> getToolBarManagers() {
-    return getChildren(ToolBarManagerInfo.class);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public List<ToolBarManagerInfo> getToolBarManagers() {
+		return getChildren(ToolBarManagerInfo.class);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void refresh_afterCreate() throws Exception {
-    super.refresh_afterCreate();
-    // force update for CoolBarManager, to ensure that CoolBar widget is create and filled (re-filled)
-    ReflectionUtils.invokeMethod2(getObject(), "update", boolean.class, true);
-    // prepare CoolBar widget
-    {
-      CoolBar coolBar = (CoolBar) ReflectionUtils.invokeMethod2(getObject(), "getControl");
-      // if no any items, create one
-      if (coolBar.getItemCount() == 0) {
-        CoolItem coolItem = new CoolItem(coolBar, SWT.NONE);
-        // use ToolBar on CoolItem
-        ToolBar toolBar = new ToolBar(coolBar, SWT.FLAT);
-        coolItem.setControl(toolBar);
-        // show message using ToolItem
-        ToolItem toolItem = new ToolItem(toolBar, SWT.NONE);
-        toolItem.setText("Empty CoolBarManager, add new ToolBarManager(s)");
-        // configure sizes
-        Point toolBar_preferredSize = toolBar.computeSize(SWT.DEFAULT, SWT.DEFAULT);
-        Point item_preferredSize =
-            coolItem.computeSize(toolBar_preferredSize.x, toolBar_preferredSize.y);
-        coolItem.setSize(item_preferredSize);
-      }
-      // OK, remember as component
-      setComponentObject(coolBar);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void refresh_afterCreate() throws Exception {
+		super.refresh_afterCreate();
+		// force update for CoolBarManager, to ensure that CoolBar widget is create and filled (re-filled)
+		ReflectionUtils.invokeMethod2(getObject(), "update", boolean.class, true);
+		// prepare CoolBar widget
+		{
+			CoolBar coolBar = (CoolBar) ReflectionUtils.invokeMethod2(getObject(), "getControl");
+			// if no any items, create one
+			if (coolBar.getItemCount() == 0) {
+				CoolItem coolItem = new CoolItem(coolBar, SWT.NONE);
+				// use ToolBar on CoolItem
+				ToolBar toolBar = new ToolBar(coolBar, SWT.FLAT);
+				coolItem.setControl(toolBar);
+				// show message using ToolItem
+				ToolItem toolItem = new ToolItem(toolBar, SWT.NONE);
+				toolItem.setText("Empty CoolBarManager, add new ToolBarManager(s)");
+				// configure sizes
+				Point toolBar_preferredSize = toolBar.computeSize(SWT.DEFAULT, SWT.DEFAULT);
+				Point item_preferredSize =
+						coolItem.computeSize(toolBar_preferredSize.x, toolBar_preferredSize.y);
+				coolItem.setSize(item_preferredSize);
+			}
+			// OK, remember as component
+			setComponentObject(coolBar);
+		}
+	}
 
-  @Override
-  protected void refresh_fetch() throws Exception {
-    // prepare bounds of underlying CoolBar
-    ControlInfo.refresh_fetch(this, null);
-    // process children
-    super.refresh_fetch();
-    tweakToolBarManagerBounds();
-  }
+	@Override
+	protected void refresh_fetch() throws Exception {
+		// prepare bounds of underlying CoolBar
+		ControlInfo.refresh_fetch(this, null);
+		// process children
+		super.refresh_fetch();
+		tweakToolBarManagerBounds();
+	}
 
-  /**
-   * Each child {@link ToolBarManager} is represented as {@link ToolBar} widget, but it is more
-   * convenient to use bounds of {@link CoolItem} with this {@link ToolBar}.
-   */
-  private void tweakToolBarManagerBounds() throws Exception {
-    CoolBar coolBar = (CoolBar) ReflectionUtils.invokeMethod(getObject(), "getControl()");
-    CoolItem[] coolItems = coolBar.getItems();
-    for (ToolBarManagerInfo toolBarManager : getChildren(ToolBarManagerInfo.class)) {
-      ToolBar toolBar =
-          (ToolBar) ReflectionUtils.invokeMethod(toolBarManager.getObject(), "getControl()");
-      for (CoolItem coolItem : coolItems) {
-        if (coolItem.getControl() == toolBar) {
-          Rectangle newBounds = RectangleSupport.getRectangle(coolItem.getBounds());
-          Rectangle oldBounds = toolBarManager.getBounds();
-          final int deltaX = oldBounds.x - newBounds.x;
-          final int deltaY = oldBounds.y - newBounds.y;
-          toolBarManager.accept(new ObjectInfoVisitor() {
-            @Override
-            public void endVisit(ObjectInfo objectInfo) throws Exception {
-              if (objectInfo instanceof AbstractComponentInfo) {
-                AbstractComponentInfo component = (AbstractComponentInfo) objectInfo;
-                component.getBounds().performTranslate(deltaX, deltaY);
-              }
-            }
-          });
-          toolBarManager.setBounds(newBounds);
-        }
-      }
-    }
-  }
+	/**
+	 * Each child {@link ToolBarManager} is represented as {@link ToolBar} widget, but it is more
+	 * convenient to use bounds of {@link CoolItem} with this {@link ToolBar}.
+	 */
+	private void tweakToolBarManagerBounds() throws Exception {
+		CoolBar coolBar = (CoolBar) ReflectionUtils.invokeMethod(getObject(), "getControl()");
+		CoolItem[] coolItems = coolBar.getItems();
+		for (ToolBarManagerInfo toolBarManager : getChildren(ToolBarManagerInfo.class)) {
+			ToolBar toolBar =
+					(ToolBar) ReflectionUtils.invokeMethod(toolBarManager.getObject(), "getControl()");
+			for (CoolItem coolItem : coolItems) {
+				if (coolItem.getControl() == toolBar) {
+					Rectangle newBounds = RectangleSupport.getRectangle(coolItem.getBounds());
+					Rectangle oldBounds = toolBarManager.getBounds();
+					final int deltaX = oldBounds.x - newBounds.x;
+					final int deltaY = oldBounds.y - newBounds.y;
+					toolBarManager.accept(new ObjectInfoVisitor() {
+						@Override
+						public void endVisit(ObjectInfo objectInfo) throws Exception {
+							if (objectInfo instanceof AbstractComponentInfo) {
+								AbstractComponentInfo component = (AbstractComponentInfo) objectInfo;
+								component.getBounds().performTranslate(deltaX, deltaY);
+							}
+						}
+					});
+					toolBarManager.setBounds(newBounds);
+				}
+			}
+		}
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/action/GroupMarkerInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/action/GroupMarkerInfo.java
index e037a33c2..864d8306e 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/action/GroupMarkerInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/action/GroupMarkerInfo.java
@@ -27,55 +27,55 @@
  * @coverage rcp.model.jface
  */
 public final class GroupMarkerInfo extends ContributionItemInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public GroupMarkerInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public GroupMarkerInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void refresh_afterCreate0() throws Exception {
-    super.refresh_afterCreate0();
-    {
-      String id = (String) ReflectionUtils.invokeMethod(getObject(), "getId()");
-      Object item = createContributionItem_withText(id);
-      // insert item
-      ContributionManagerInfo manager = (ContributionManagerInfo) getParent();
-      manager.low_insertContributionItem(manager.low_getIndex(getObject()), item);
-      manager.low_update();
-      // use this item instead
-      setObject(item);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void refresh_afterCreate0() throws Exception {
+		super.refresh_afterCreate0();
+		{
+			String id = (String) ReflectionUtils.invokeMethod(getObject(), "getId()");
+			Object item = createContributionItem_withText(id);
+			// insert item
+			ContributionManagerInfo manager = (ContributionManagerInfo) getParent();
+			manager.low_insertContributionItem(manager.low_getIndex(getObject()), item);
+			manager.low_update();
+			// use this item instead
+			setObject(item);
+		}
+	}
 
-  private Object createContributionItem_withText(String text) throws Exception {
-    ClassLoader classLoader = JavaInfoUtils.getClassLoader(this);
-    Class<?> classAction = classLoader.loadClass("org.eclipse.jface.action.Action");
-    Class<?> classItem = classLoader.loadClass("org.eclipse.jface.action.ActionContributionItem");
-    // create Action
-    Object action;
-    {
-      action = new ByteBuddy() //
-          .subclass(classAction) //
-          .make() //
-          .load(classLoader) //
-          .getLoaded() //
-          .getConstructor(String.class) //
-          .newInstance(text);
-    }
-    // wrap Action with item
-    return ReflectionUtils.getConstructorBySignature(
-        classItem,
-        "<init>(org.eclipse.jface.action.IAction)").newInstance(action);
-  }
+	private Object createContributionItem_withText(String text) throws Exception {
+		ClassLoader classLoader = JavaInfoUtils.getClassLoader(this);
+		Class<?> classAction = classLoader.loadClass("org.eclipse.jface.action.Action");
+		Class<?> classItem = classLoader.loadClass("org.eclipse.jface.action.ActionContributionItem");
+		// create Action
+		Object action;
+		{
+			action = new ByteBuddy() //
+					.subclass(classAction) //
+					.make() //
+					.load(classLoader) //
+					.getLoaded() //
+					.getConstructor(String.class) //
+					.newInstance(text);
+		}
+		// wrap Action with item
+		return ReflectionUtils.getConstructorBySignature(
+				classItem,
+				"<init>(org.eclipse.jface.action.IAction)").newInstance(action);
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/action/IActionIconProvider.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/action/IActionIconProvider.java
index 34b2ca3b7..a9aeae960 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/action/IActionIconProvider.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/action/IActionIconProvider.java
@@ -24,5 +24,5 @@
  * @coverage rcp.model.jface
  */
 public interface IActionIconProvider {
-  Image getActionIcon();
+	Image getActionIcon();
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/action/MenuManagerAdaptableFactory.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/action/MenuManagerAdaptableFactory.java
index 926ad47e0..58b6c974a 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/action/MenuManagerAdaptableFactory.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/action/MenuManagerAdaptableFactory.java
@@ -26,96 +26,96 @@
  * @coverage rcp.model.jface
  */
 public final class MenuManagerAdaptableFactory implements IAdaptableFactory {
-  private static final String KEY_MENU_ITEM_OBJECT = "KEY_MENU_ITEM_OBJECT";
+	private static final String KEY_MENU_ITEM_OBJECT = "KEY_MENU_ITEM_OBJECT";
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IAdaptableFactory
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public <T> T getAdapter(Object object, Class<T> adapter) {
-    if (adapter.isAssignableFrom(IMenuItemInfo.class) && object instanceof ContributionItemInfo) {
-      ContributionItemInfo item = (ContributionItemInfo) object;
-      IMenuItemInfo itemObject = (IMenuItemInfo) item.getArbitraryValue(KEY_MENU_ITEM_OBJECT);
-      if (itemObject == null) {
-        itemObject = new ContributionItemImpl(item);
-        item.putArbitraryValue(KEY_MENU_ITEM_OBJECT, itemObject);
-      }
-      return adapter.cast(itemObject);
-    }
-    // can not adapt
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IAdaptableFactory
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public <T> T getAdapter(Object object, Class<T> adapter) {
+		if (adapter.isAssignableFrom(IMenuItemInfo.class) && object instanceof ContributionItemInfo) {
+			ContributionItemInfo item = (ContributionItemInfo) object;
+			IMenuItemInfo itemObject = (IMenuItemInfo) item.getArbitraryValue(KEY_MENU_ITEM_OBJECT);
+			if (itemObject == null) {
+				itemObject = new ContributionItemImpl(item);
+				item.putArbitraryValue(KEY_MENU_ITEM_OBJECT, itemObject);
+			}
+			return adapter.cast(itemObject);
+		}
+		// can not adapt
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IMenuItemInfo for some ContributionItemInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Implementation of {@link IMenuItemInfo} for {@link ContributionItemInfo}.
-   *
-   * @author scheglov_ke
-   */
-  private static final class ContributionItemImpl extends AbstractMenuObject
-      implements
-        IMenuItemInfo {
-    private final ContributionItemInfo m_item;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IMenuItemInfo for some ContributionItemInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Implementation of {@link IMenuItemInfo} for {@link ContributionItemInfo}.
+	 *
+	 * @author scheglov_ke
+	 */
+	private static final class ContributionItemImpl extends AbstractMenuObject
+	implements
+	IMenuItemInfo {
+		private final ContributionItemInfo m_item;
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public ContributionItemImpl(ContributionItemInfo item) {
-      super(item);
-      m_item = item;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public ContributionItemImpl(ContributionItemInfo item) {
+			super(item);
+			m_item = item;
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Model
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public Object getModel() {
-      return m_item;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Model
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public Object getModel() {
+			return m_item;
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Presentation
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public Image getImage() {
-      return m_item.getImage();
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Presentation
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public Image getImage() {
+			return m_item.getImage();
+		}
 
-    @Override
-    public Rectangle getBounds() {
-      return m_item.getBounds();
-    }
+		@Override
+		public Rectangle getBounds() {
+			return m_item.getBounds();
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // IMenuItemInfo
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public IMenuInfo getMenu() {
-      return null;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// IMenuItemInfo
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public IMenuInfo getMenu() {
+			return null;
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Policy
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public IMenuPolicy getPolicy() {
-      return IMenuPolicy.NOOP;
-    }
-  }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Policy
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public IMenuPolicy getPolicy() {
+			return IMenuPolicy.NOOP;
+		}
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/action/MenuManagerInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/action/MenuManagerInfo.java
index b13b943f4..563c9e924 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/action/MenuManagerInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/action/MenuManagerInfo.java
@@ -50,318 +50,318 @@
  * @coverage rcp.model.jface
  */
 public final class MenuManagerInfo extends ContributionManagerInfo
-    implements
-      IContributionItemInfo,
-      IAdaptable {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public MenuManagerInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+implements
+IContributionItemInfo,
+IAdaptable {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public MenuManagerInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private MenuVisualData m_visualData;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private MenuVisualData m_visualData;
 
-  @Override
-  protected void refresh_afterCreate() throws Exception {
-    // force creation for all MenuManager's
-    if (!(getParent() instanceof MenuManagerInfo)) {
-      ReflectionUtils.invokeMethod(getObject(), "updateAll(boolean)", true);
-    }
-    // reset 'setRemoveAllWhenShown', because it causes empty menu.
-    ReflectionUtils.invokeMethod2(getObject(), "setRemoveAllWhenShown", boolean.class, false);
-    // process Menu widget
-    {
-      Menu menu = (Menu) ReflectionUtils.invokeMethod2(getObject(), "getMenu");
-      // if no any items, create one
-      if (menu.getItemCount() == 0) {
-        new MenuItem(menu, SWT.NONE).setText(ModelMessages.MenuManagerInfo_emptyMessage);
-      }
-      // OK, remember as component
-      setComponentObject(menu);
-    }
-    // process children
-    super.refresh_afterCreate();
-  }
+	@Override
+	protected void refresh_afterCreate() throws Exception {
+		// force creation for all MenuManager's
+		if (!(getParent() instanceof MenuManagerInfo)) {
+			ReflectionUtils.invokeMethod(getObject(), "updateAll(boolean)", true);
+		}
+		// reset 'setRemoveAllWhenShown', because it causes empty menu.
+		ReflectionUtils.invokeMethod2(getObject(), "setRemoveAllWhenShown", boolean.class, false);
+		// process Menu widget
+		{
+			Menu menu = (Menu) ReflectionUtils.invokeMethod2(getObject(), "getMenu");
+			// if no any items, create one
+			if (menu.getItemCount() == 0) {
+				new MenuItem(menu, SWT.NONE).setText(ModelMessages.MenuManagerInfo_emptyMessage);
+			}
+			// OK, remember as component
+			setComponentObject(menu);
+		}
+		// process children
+		super.refresh_afterCreate();
+	}
 
-  @Override
-  protected void refresh_fetch() throws Exception {
-    Menu menu = (Menu) ReflectionUtils.invokeMethod2(getObject(), "getMenu");
-    // fetch menu visual data
-    DisplayEventListener displayListener = getBroadcast(DisplayEventListener.class);
-    try {
-      displayListener.beforeMessagesLoop();
-      m_visualData = ToolkitSupport.fetchMenuVisualData(menu);
-    } finally {
-      displayListener.afterMessagesLoop();
-    }
-    // process children
-    super.refresh_fetch();
-    // set child items bounds
-    MenuItem[] menuItems = menu.getItems();
-    for (AbstractComponentInfo contributionItem : getItems()) {
-      Object contributionItemObject = contributionItem.getObject();
-      for (int i = 0; i < menuItems.length; i++) {
-        MenuItem menuItem = menuItems[i];
-        if (menuItem.getData() == contributionItemObject) {
-          contributionItem.setModelBounds(m_visualData.m_itemBounds.get(i));
-          break;
-        }
-      }
-    }
-  }
+	@Override
+	protected void refresh_fetch() throws Exception {
+		Menu menu = (Menu) ReflectionUtils.invokeMethod2(getObject(), "getMenu");
+		// fetch menu visual data
+		DisplayEventListener displayListener = getBroadcast(DisplayEventListener.class);
+		try {
+			displayListener.beforeMessagesLoop();
+			m_visualData = ToolkitSupport.fetchMenuVisualData(menu);
+		} finally {
+			displayListener.afterMessagesLoop();
+		}
+		// process children
+		super.refresh_fetch();
+		// set child items bounds
+		MenuItem[] menuItems = menu.getItems();
+		for (AbstractComponentInfo contributionItem : getItems()) {
+			Object contributionItemObject = contributionItem.getObject();
+			for (int i = 0; i < menuItems.length; i++) {
+				MenuItem menuItem = menuItems[i];
+				if (menuItem.getData() == contributionItemObject) {
+					contributionItem.setModelBounds(m_visualData.m_itemBounds.get(i));
+					break;
+				}
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if this {@link MenuManagerInfo} is represented by {@link Menu}
-   *         widgets with {@link SWT#BAR} style.
-   */
-  public boolean isBar() {
-    return ExecutionUtils.runObject(new RunnableObjectEx<Boolean>() {
-      @Override
-      public Boolean runObject() throws Exception {
-        Menu menu = (Menu) ReflectionUtils.invokeMethod2(getObject(), "getMenu");
-        return ControlSupport.isStyle(menu, SWT.BAR);
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if this {@link MenuManagerInfo} is represented by {@link Menu}
+	 *         widgets with {@link SWT#BAR} style.
+	 */
+	public boolean isBar() {
+		return ExecutionUtils.runObject(new RunnableObjectEx<Boolean>() {
+			@Override
+			public Boolean runObject() throws Exception {
+				Menu menu = (Menu) ReflectionUtils.invokeMethod2(getObject(), "getMenu");
+				return ControlSupport.isStyle(menu, SWT.BAR);
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IAdaptable
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final IMenuItemInfo m_itemImpl = new MenuItemImpl();
-  private final IMenuInfo m_menuImpl = new MenuImpl();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IAdaptable
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final IMenuItemInfo m_itemImpl = new MenuItemImpl();
+	private final IMenuInfo m_menuImpl = new MenuImpl();
 
-  @Override
-  public <T> T getAdapter(Class<T> adapter) {
-    if (adapter.isAssignableFrom(IMenuItemInfo.class)) {
-      return adapter.cast(m_itemImpl);
-    }
-    if (adapter.isAssignableFrom(IMenuInfo.class)) {
-      return adapter.cast(m_menuImpl);
-    }
-    return null;
-  }
+	@Override
+	public <T> T getAdapter(Class<T> adapter) {
+		if (adapter.isAssignableFrom(IMenuItemInfo.class)) {
+			return adapter.cast(m_itemImpl);
+		}
+		if (adapter.isAssignableFrom(IMenuInfo.class)) {
+			return adapter.cast(m_menuImpl);
+		}
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AbstractMenuImpl
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Abstract superclass for {@link IMenuObjectInfo} implementations.
-   *
-   * @author scheglov_ke
-   */
-  private abstract class MenuAbstractImpl extends JavaMenuMenuObject {
-    public MenuAbstractImpl() {
-      super(MenuManagerInfo.this);
-    }
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IMenuItemInfo for "this"
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Implementation of {@link IMenuItemInfo} for "this" {@link MenuManagerInfo}.
-   *
-   * @author scheglov_ke
-   */
-  private final class MenuItemImpl extends AbstractMenuObject implements IMenuItemInfo {
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public MenuItemImpl() {
-      super(MenuManagerInfo.this);
-    }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AbstractMenuImpl
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Abstract superclass for {@link IMenuObjectInfo} implementations.
+	 *
+	 * @author scheglov_ke
+	 */
+	private abstract class MenuAbstractImpl extends JavaMenuMenuObject {
+		public MenuAbstractImpl() {
+			super(MenuManagerInfo.this);
+		}
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IMenuItemInfo for "this"
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Implementation of {@link IMenuItemInfo} for "this" {@link MenuManagerInfo}.
+	 *
+	 * @author scheglov_ke
+	 */
+	private final class MenuItemImpl extends AbstractMenuObject implements IMenuItemInfo {
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public MenuItemImpl() {
+			super(MenuManagerInfo.this);
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Model
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public Object getModel() {
-      return MenuManagerInfo.this;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Model
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public Object getModel() {
+			return MenuManagerInfo.this;
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Presentation
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public Image getImage() {
-      return null;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Presentation
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public Image getImage() {
+			return null;
+		}
 
-    @Override
-    public Rectangle getBounds() {
-      return MenuManagerInfo.this.getBounds();
-    }
+		@Override
+		public Rectangle getBounds() {
+			return MenuManagerInfo.this.getBounds();
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // IMenuItemInfo
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public IMenuInfo getMenu() {
-      return m_menuImpl;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// IMenuItemInfo
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public IMenuInfo getMenu() {
+			return m_menuImpl;
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Policy
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public IMenuPolicy getPolicy() {
-      return IMenuPolicy.NOOP;
-    }
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IMenuInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Implementation of {@link IMenuInfo}.
-   *
-   * @author scheglov_ke
-   */
-  private final class MenuImpl extends MenuAbstractImpl implements IMenuInfo, IMenuPolicy {
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Model
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public Object getModel() {
-      return this;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Policy
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public IMenuPolicy getPolicy() {
+			return IMenuPolicy.NOOP;
+		}
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IMenuInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Implementation of {@link IMenuInfo}.
+	 *
+	 * @author scheglov_ke
+	 */
+	private final class MenuImpl extends MenuAbstractImpl implements IMenuInfo, IMenuPolicy {
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Model
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public Object getModel() {
+			return this;
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Presentation
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public Image getImage() {
-      return m_visualData.m_menuImage;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Presentation
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public Image getImage() {
+			return m_visualData.m_menuImage;
+		}
 
-    @Override
-    public Rectangle getBounds() {
-      return m_visualData.m_menuBounds;
-    }
+		@Override
+		public Rectangle getBounds() {
+			return m_visualData.m_menuBounds;
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Access
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public boolean isHorizontal() {
-      return isBar();
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Access
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public boolean isHorizontal() {
+			return isBar();
+		}
 
-    @Override
-    public List<IMenuItemInfo> getItems() {
-      List<IMenuItemInfo> items = Lists.newArrayList();
-      for (AbstractComponentInfo item : MenuManagerInfo.this.getItems()) {
-        IMenuItemInfo itemObject = MenuObjectInfoUtils.getMenuItemInfo(item);
-        items.add(itemObject);
-      }
-      return items;
-    }
+		@Override
+		public List<IMenuItemInfo> getItems() {
+			List<IMenuItemInfo> items = Lists.newArrayList();
+			for (AbstractComponentInfo item : MenuManagerInfo.this.getItems()) {
+				IMenuItemInfo itemObject = MenuObjectInfoUtils.getMenuItemInfo(item);
+				items.add(itemObject);
+			}
+			return items;
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Policy
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public IMenuPolicy getPolicy() {
-      return this;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Policy
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public IMenuPolicy getPolicy() {
+			return this;
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Validation
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public boolean validateCreate(Object newObject) {
-      return newObject instanceof ActionInfo || newObject instanceof IContributionItemInfo;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Validation
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public boolean validateCreate(Object newObject) {
+			return newObject instanceof ActionInfo || newObject instanceof IContributionItemInfo;
+		}
 
-    @Override
-    public boolean validatePaste(final Object mementoObject) {
-      return false;
-    }
+		@Override
+		public boolean validatePaste(final Object mementoObject) {
+			return false;
+		}
 
-    @Override
-    public boolean validateMove(Object object) {
-      if (object instanceof IContributionItemInfo) {
-        AbstractComponentInfo item = (AbstractComponentInfo) object;
-        // don't move item on its child menu
-        return !item.isParentOf(MenuManagerInfo.this);
-      }
-      //
-      return false;
-    }
+		@Override
+		public boolean validateMove(Object object) {
+			if (object instanceof IContributionItemInfo) {
+				AbstractComponentInfo item = (AbstractComponentInfo) object;
+				// don't move item on its child menu
+				return !item.isParentOf(MenuManagerInfo.this);
+			}
+			//
+			return false;
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Operations
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public void commandCreate(Object newObject, Object nextObject) throws Exception {
-      AbstractComponentInfo nextItem = (AbstractComponentInfo) nextObject;
-      AbstractComponentInfo newItem;
-      if (newObject instanceof ActionInfo) {
-        ActionInfo action = (ActionInfo) newObject;
-        newItem = command_CREATE(action, nextItem);
-      } else {
-        newItem = (AbstractComponentInfo) newObject;
-        command_CREATE(newItem, nextItem);
-      }
-      // schedule selection
-      MenuObjectInfoUtils.setSelectingObject(newItem);
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Operations
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public void commandCreate(Object newObject, Object nextObject) throws Exception {
+			AbstractComponentInfo nextItem = (AbstractComponentInfo) nextObject;
+			AbstractComponentInfo newItem;
+			if (newObject instanceof ActionInfo) {
+				ActionInfo action = (ActionInfo) newObject;
+				newItem = command_CREATE(action, nextItem);
+			} else {
+				newItem = (AbstractComponentInfo) newObject;
+				command_CREATE(newItem, nextItem);
+			}
+			// schedule selection
+			MenuObjectInfoUtils.setSelectingObject(newItem);
+		}
 
-    @Override
-    public List<?> commandPaste(Object mementoObject, Object nextObject) throws Exception {
-      return ImmutableList.of();
-    }
+		@Override
+		public List<?> commandPaste(Object mementoObject, Object nextObject) throws Exception {
+			return ImmutableList.of();
+		}
 
-    @Override
-    public void commandMove(Object object, Object nextObject) throws Exception {
-      AbstractComponentInfo item = (AbstractComponentInfo) object;
-      AbstractComponentInfo nextItem = (AbstractComponentInfo) nextObject;
-      command_MOVE(item, nextItem);
-      // schedule selection
-      MenuObjectInfoUtils.setSelectingObject(item);
-    }
-  }
+		@Override
+		public void commandMove(Object object, Object nextObject) throws Exception {
+			AbstractComponentInfo item = (AbstractComponentInfo) object;
+			AbstractComponentInfo nextItem = (AbstractComponentInfo) nextObject;
+			command_MOVE(item, nextItem);
+			// schedule selection
+			MenuObjectInfoUtils.setSelectingObject(item);
+		}
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/action/MenuManagerPopupInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/action/MenuManagerPopupInfo.java
index bfbea974b..ccea41fe3 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/action/MenuManagerPopupInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/action/MenuManagerPopupInfo.java
@@ -26,73 +26,73 @@
  * @coverage rcp.model.jface
  */
 public final class MenuManagerPopupInfo extends JavaMenuMenuObject implements IMenuPopupInfo {
-  private final MenuManagerInfo m_manager;
-  private Rectangle m_bounds;
+	private final MenuManagerInfo m_manager;
+	private Rectangle m_bounds;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public MenuManagerPopupInfo(MenuManagerInfo manager) {
-    super(manager);
-    m_manager = manager;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public MenuManagerPopupInfo(MenuManagerInfo manager) {
+		super(manager);
+		m_manager = manager;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets the bounds of popup figure.
-   */
-  public void setBounds(Rectangle menuToolItemBounds) {
-    m_bounds = menuToolItemBounds;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets the bounds of popup figure.
+	 */
+	public void setBounds(Rectangle menuToolItemBounds) {
+		m_bounds = menuToolItemBounds;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Model
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Object getModel() {
-    return m_manager;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Model
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Object getModel() {
+		return m_manager;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Image getImage() {
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Image getImage() {
+		return null;
+	}
 
-  @Override
-  public Rectangle getBounds() {
-    return m_bounds;
-  }
+	@Override
+	public Rectangle getBounds() {
+		return m_bounds;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IMenuPopupInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public IMenuInfo getMenu() {
-    return MenuObjectInfoUtils.getMenuInfo(m_manager);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IMenuPopupInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public IMenuInfo getMenu() {
+		return MenuObjectInfoUtils.getMenuInfo(m_manager);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Policy
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public IMenuPolicy getPolicy() {
-    return getMenu().getPolicy();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Policy
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public IMenuPolicy getPolicy() {
+		return getMenu().getPolicy();
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/action/ToolBarContributionItemInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/action/ToolBarContributionItemInfo.java
index f60361bed..48ba89732 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/action/ToolBarContributionItemInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/action/ToolBarContributionItemInfo.java
@@ -27,31 +27,31 @@
  * @coverage rcp.model.jface
  */
 public final class ToolBarContributionItemInfo extends ContributionItemInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ToolBarContributionItemInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ToolBarContributionItemInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Object getComponentObject() {
-    return ExecutionUtils.runObject(new RunnableObjectEx<Object>() {
-      @Override
-      public Object runObject() throws Exception {
-        ToolBarManagerInfo managerInfo = getChildren(ToolBarManagerInfo.class).get(0);
-        Object manager = managerInfo.getObject();
-        return ((ToolBar) ReflectionUtils.invokeMethod(manager, "getControl()")).getParent();
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Object getComponentObject() {
+		return ExecutionUtils.runObject(new RunnableObjectEx<Object>() {
+			@Override
+			public Object runObject() throws Exception {
+				ToolBarManagerInfo managerInfo = getChildren(ToolBarManagerInfo.class).get(0);
+				Object manager = managerInfo.getObject();
+				return ((ToolBar) ReflectionUtils.invokeMethod(manager, "getControl()")).getParent();
+			}
+		});
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/action/ToolBarManagerInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/action/ToolBarManagerInfo.java
index 43cb94d96..c8ae703b1 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/action/ToolBarManagerInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/action/ToolBarManagerInfo.java
@@ -35,92 +35,92 @@
  * @coverage rcp.model.jface
  */
 public final class ToolBarManagerInfo extends ContributionManagerInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ToolBarManagerInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ToolBarManagerInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void refresh_afterCreate() throws Exception {
-    super.refresh_afterCreate();
-    {
-      ToolBar toolBar = (ToolBar) ReflectionUtils.invokeMethod2(getObject(), "getControl");
-      // if no any items, create one
-      if (toolBar.getItemCount() == 0) {
-        addEmptyAction();
-      }
-      // OK, remember as component
-      setComponentObject(toolBar);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void refresh_afterCreate() throws Exception {
+		super.refresh_afterCreate();
+		{
+			ToolBar toolBar = (ToolBar) ReflectionUtils.invokeMethod2(getObject(), "getControl");
+			// if no any items, create one
+			if (toolBar.getItemCount() == 0) {
+				addEmptyAction();
+			}
+			// OK, remember as component
+			setComponentObject(toolBar);
+		}
+	}
 
-  @Override
-  protected void refresh_fetch() throws Exception {
-    // prepare bounds of underlying ToolBar
-    ControlInfo.refresh_fetch(this, null);
-    // prepare bounds of IContributionItem's
-    ToolItem[] toolItems = ((ToolBar) getComponentObject()).getItems();
-    for (AbstractComponentInfo contributionItem : getItems()) {
-      Object contributionItemObject = contributionItem.getObject();
-      for (ToolItem toolItem : toolItems) {
-        if (toolItem.getData() == contributionItemObject) {
-          Object itemBoundsObject = ReflectionUtils.invokeMethod2(toolItem, "getBounds");
-          Rectangle itemBounds = RectangleSupport.getRectangle(itemBoundsObject);
-          contributionItem.setModelBounds(itemBounds);
-          break;
-        }
-      }
-    }
-    // special support for ToolBarContributionItem
-    if (getParent() instanceof ContributionItemInfo) {
-      ContributionItemInfo parentItem = (ContributionItemInfo) getParent();
-      parentItem.setModelBounds(getModelBounds().getCopy());
-      parentItem.setBounds(getBounds().getCopy());
-      getBounds().setLocation(0, 0);
-    }
-    // continue
-    super.refresh_fetch();
-  }
+	@Override
+	protected void refresh_fetch() throws Exception {
+		// prepare bounds of underlying ToolBar
+		ControlInfo.refresh_fetch(this, null);
+		// prepare bounds of IContributionItem's
+		ToolItem[] toolItems = ((ToolBar) getComponentObject()).getItems();
+		for (AbstractComponentInfo contributionItem : getItems()) {
+			Object contributionItemObject = contributionItem.getObject();
+			for (ToolItem toolItem : toolItems) {
+				if (toolItem.getData() == contributionItemObject) {
+					Object itemBoundsObject = ReflectionUtils.invokeMethod2(toolItem, "getBounds");
+					Rectangle itemBounds = RectangleSupport.getRectangle(itemBoundsObject);
+					contributionItem.setModelBounds(itemBounds);
+					break;
+				}
+			}
+		}
+		// special support for ToolBarContributionItem
+		if (getParent() instanceof ContributionItemInfo) {
+			ContributionItemInfo parentItem = (ContributionItemInfo) getParent();
+			parentItem.setModelBounds(getModelBounds().getCopy());
+			parentItem.setBounds(getBounds().getCopy());
+			getBounds().setLocation(0, 0);
+		}
+		// continue
+		super.refresh_fetch();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Inserts new "empty" {@link Action}.
-   */
-  private void addEmptyAction() throws Exception {
-    String emptyText = JavaInfoUtils.getParameter(this, "emptyText");
-    Assert.isNotNull(
-        emptyText,
-        "IToolBarManager should have parameter 'emptyText' with text to show when there are no Action's.");
-    // prepare Action
-    Object action;
-    {
-      ClassLoader editorLoader = JavaInfoUtils.getClassLoader(this);
-      Class<?> actionClass = editorLoader.loadClass("org.eclipse.jface.action.Action");
-      action = new ByteBuddy() //
-          .subclass(actionClass) //
-          .make() //
-          .load(editorLoader) //
-          .getLoaded() //
-          .getConstructor(String.class) //
-          .newInstance(emptyText);
-    }
-    // append Action and update
-    ReflectionUtils.invokeMethod(getObject(), "add(org.eclipse.jface.action.IAction)", action);
-    ReflectionUtils.invokeMethod2(getObject(), "update", boolean.class, true);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Inserts new "empty" {@link Action}.
+	 */
+	private void addEmptyAction() throws Exception {
+		String emptyText = JavaInfoUtils.getParameter(this, "emptyText");
+		Assert.isNotNull(
+				emptyText,
+				"IToolBarManager should have parameter 'emptyText' with text to show when there are no Action's.");
+		// prepare Action
+		Object action;
+		{
+			ClassLoader editorLoader = JavaInfoUtils.getClassLoader(this);
+			Class<?> actionClass = editorLoader.loadClass("org.eclipse.jface.action.Action");
+			action = new ByteBuddy() //
+					.subclass(actionClass) //
+					.make() //
+					.load(editorLoader) //
+					.getLoaded() //
+					.getConstructor(String.class) //
+					.newInstance(emptyText);
+		}
+		// append Action and update
+		ReflectionUtils.invokeMethod(getObject(), "add(org.eclipse.jface.action.IAction)", action);
+		ReflectionUtils.invokeMethod2(getObject(), "update", boolean.class, true);
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/layout/AbstractColumnLayoutInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/layout/AbstractColumnLayoutInfo.java
index d433cf9df..dcdb6b73b 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/layout/AbstractColumnLayoutInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/layout/AbstractColumnLayoutInfo.java
@@ -49,326 +49,326 @@
  * @coverage rcp.model.jface.layout
  */
 public abstract class AbstractColumnLayoutInfo extends LayoutInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractColumnLayoutInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-    contributeLayoutDataTypeProperty();
-    trackColumnCommands();
-    deleteCompositeWhenDeleteManagedControl();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractColumnLayoutInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+		contributeLayoutDataTypeProperty();
+		trackColumnCommands();
+		deleteCompositeWhenDeleteManagedControl();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void command_CREATE(ControlInfo control) throws Exception {
-    command_CREATE(control, null);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void command_CREATE(ControlInfo control) throws Exception {
+		command_CREATE(control, null);
+	}
 
-  public void command_ADD(ControlInfo control) throws Exception {
-    command_MOVE(control, null);
-  }
+	public void command_ADD(ControlInfo control) throws Exception {
+		command_MOVE(control, null);
+	}
 
-  /**
-   * {@link org.eclipse.jface.layout.AbstractColumnLayout} requires single control, so when no
-   * control, we should delete composite.
-   */
-  private void deleteCompositeWhenDeleteManagedControl() {
-    addBroadcastListener(new ObjectInfoDelete() {
-      @Override
-      public void after(ObjectInfo parent, ObjectInfo child) throws Exception {
-        if (isActiveOnComposite(parent) && child instanceof ControlInfo) {
-          parent.delete();
-        }
-      }
-    });
-  }
+	/**
+	 * {@link org.eclipse.jface.layout.AbstractColumnLayout} requires single control, so when no
+	 * control, we should delete composite.
+	 */
+	private void deleteCompositeWhenDeleteManagedControl() {
+		addBroadcastListener(new ObjectInfoDelete() {
+			@Override
+			public void after(ObjectInfo parent, ObjectInfo child) throws Exception {
+				if (isActiveOnComposite(parent) && child instanceof ControlInfo) {
+					parent.delete();
+				}
+			}
+		});
+	}
 
-  /**
-   * Tracks column create/move(in,out) commands and adds/deletes {@link ColumnLayoutDataInfo}'s.
-   */
-  private void trackColumnCommands() {
-    addBroadcastListener(new JavaEventListener() {
-      @Override
-      public void addAfter(JavaInfo parent, JavaInfo child) throws Exception {
-        if (isColumn(child) && isOurColumnContainer(parent)) {
-          addPixelLayoutData(child);
-        }
-      }
+	/**
+	 * Tracks column create/move(in,out) commands and adds/deletes {@link ColumnLayoutDataInfo}'s.
+	 */
+	private void trackColumnCommands() {
+		addBroadcastListener(new JavaEventListener() {
+			@Override
+			public void addAfter(JavaInfo parent, JavaInfo child) throws Exception {
+				if (isColumn(child) && isOurColumnContainer(parent)) {
+					addPixelLayoutData(child);
+				}
+			}
 
-      @Override
-      public void moveBefore(JavaInfo child, ObjectInfo oldParent, JavaInfo newParent)
-          throws Exception {
-        if (isColumn(child)) {
-          if (newParent != oldParent && isOurColumnContainer(oldParent)) {
-            removeLayoutData((ItemInfo) child);
-          }
-        }
-      }
+			@Override
+			public void moveBefore(JavaInfo child, ObjectInfo oldParent, JavaInfo newParent)
+					throws Exception {
+				if (isColumn(child)) {
+					if (newParent != oldParent && isOurColumnContainer(oldParent)) {
+						removeLayoutData((ItemInfo) child);
+					}
+				}
+			}
 
-      @Override
-      public void moveAfter(JavaInfo child, ObjectInfo oldParent, JavaInfo newParent)
-          throws Exception {
-        if (isColumn(child)) {
-          if (newParent != oldParent && isOurColumnContainer(newParent)) {
-            addPixelLayoutData(child);
-          }
-        }
-      }
+			@Override
+			public void moveAfter(JavaInfo child, ObjectInfo oldParent, JavaInfo newParent)
+					throws Exception {
+				if (isColumn(child)) {
+					if (newParent != oldParent && isOurColumnContainer(newParent)) {
+						addPixelLayoutData(child);
+					}
+				}
+			}
 
-      /**
-       * Adds {@link ColumnPixelDataInfo} to the given column.
-       */
-      private void addPixelLayoutData(JavaInfo column) throws Exception {
-        // prepare "width" from column property
-        Object widthValue = null;
-        {
-          Property widthProperty = column.getPropertyByTitle("width");
-          if (widthProperty != null && widthProperty.isModified()) {
-            widthValue = widthProperty.getValue();
-            widthProperty.setValue(Property.UNKNOWN_VALUE);
-          }
-        }
-        // set ColumnPixelData
-        ColumnLayoutDataInfo layoutData =
-            setLayoutData((ItemInfo) column, "org.eclipse.jface.viewers.ColumnPixelData");
-        // set "width" to ColumnPixelData
-        // check for "null" in case if we just add new column, so setWidth() is not evaluated
-        if (widthValue != null) {
-          layoutData.getPropertyByTitle("width").setValue(widthValue);
-        }
-      }
-    });
-  }
+			/**
+			 * Adds {@link ColumnPixelDataInfo} to the given column.
+			 */
+			private void addPixelLayoutData(JavaInfo column) throws Exception {
+				// prepare "width" from column property
+				Object widthValue = null;
+				{
+					Property widthProperty = column.getPropertyByTitle("width");
+					if (widthProperty != null && widthProperty.isModified()) {
+						widthValue = widthProperty.getValue();
+						widthProperty.setValue(Property.UNKNOWN_VALUE);
+					}
+				}
+				// set ColumnPixelData
+				ColumnLayoutDataInfo layoutData =
+						setLayoutData((ItemInfo) column, "org.eclipse.jface.viewers.ColumnPixelData");
+				// set "width" to ColumnPixelData
+				// check for "null" in case if we just add new column, so setWidth() is not evaluated
+				if (widthValue != null) {
+					layoutData.getPropertyByTitle("width").setValue(widthValue);
+				}
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Layout data
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link ColumnLayoutDataInfo} associated with given column, can not return
-   *         <code>null</code> (because {@link org.eclipse.jface.layout.AbstractColumnLayout}
-   *         requires {@link ColumnLayoutData} for each column).
-   */
-  public final ColumnLayoutDataInfo getLayoutData(ItemInfo column) {
-    List<ColumnLayoutDataInfo> dataList = column.getChildren(ColumnLayoutDataInfo.class);
-    Assert.isTrue(
-        dataList.size() <= 1,
-        "Zero or one ColumnLayoutData_Info expected in %s, but %s found.",
-        column,
-        dataList);
-    return dataList.isEmpty() ? null : dataList.get(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Layout data
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link ColumnLayoutDataInfo} associated with given column, can not return
+	 *         <code>null</code> (because {@link org.eclipse.jface.layout.AbstractColumnLayout}
+	 *         requires {@link ColumnLayoutData} for each column).
+	 */
+	public final ColumnLayoutDataInfo getLayoutData(ItemInfo column) {
+		List<ColumnLayoutDataInfo> dataList = column.getChildren(ColumnLayoutDataInfo.class);
+		Assert.isTrue(
+				dataList.size() <= 1,
+				"Zero or one ColumnLayoutData_Info expected in %s, but %s found.",
+				column,
+				dataList);
+		return dataList.isEmpty() ? null : dataList.get(0);
+	}
 
-  /**
-   * Sets new {@link ColumnLayoutDataInfo} for column.
-   */
-  public final ColumnLayoutDataInfo setLayoutData(ItemInfo column, String layoutDataClassName)
-      throws Exception {
-    ColumnLayoutDataInfo layoutData =
-        (ColumnLayoutDataInfo) JavaInfoUtils.createJavaInfo(
-            getEditor(),
-            layoutDataClassName,
-            new ConstructorCreationSupport());
-    setLayoutData(column, layoutData);
-    return layoutData;
-  }
+	/**
+	 * Sets new {@link ColumnLayoutDataInfo} for column.
+	 */
+	public final ColumnLayoutDataInfo setLayoutData(ItemInfo column, String layoutDataClassName)
+			throws Exception {
+		ColumnLayoutDataInfo layoutData =
+				(ColumnLayoutDataInfo) JavaInfoUtils.createJavaInfo(
+						getEditor(),
+						layoutDataClassName,
+						new ConstructorCreationSupport());
+		setLayoutData(column, layoutData);
+		return layoutData;
+	}
 
-  /**
-   * Sets new {@link ColumnLayoutDataInfo} for column.
-   */
-  private void setLayoutData(ItemInfo column, ColumnLayoutDataInfo newLayoutData) throws Exception {
-    removeLayoutData(column);
-    // add new setColumnData() invocation
-    MethodInvocation invocation;
-    Expression layoutDataExpression;
-    {
-      String invocationSource =
-          TemplateUtils.format(
-              "{0}.setColumnData({1}, {2})",
-              this,
-              column,
-              newLayoutData.getCreationSupport().add_getSource(null));
-      invocation = (MethodInvocation) column.addExpressionStatement(invocationSource);
-      layoutDataExpression = DomGenerics.arguments(invocation).get(1);
-    }
-    // configure CreationSupport
-    newLayoutData.getCreationSupport().add_setSourceExpression(layoutDataExpression);
-    // use empty variable
-    {
-      VariableSupport variableSupport =
-          new EmptyVariableSupport(newLayoutData, layoutDataExpression);
-      newLayoutData.setVariableSupport(variableSupport);
-    }
-    // use "secondary" association
-    newLayoutData.setAssociation(new InvocationSecondaryAssociation(invocation));
-    column.addChild(newLayoutData);
-    // add related nodes
-    addRelatedNodes(invocation);
-    column.addRelatedNodes(invocation);
-    newLayoutData.addRelatedNodes(invocation);
-  }
+	/**
+	 * Sets new {@link ColumnLayoutDataInfo} for column.
+	 */
+	private void setLayoutData(ItemInfo column, ColumnLayoutDataInfo newLayoutData) throws Exception {
+		removeLayoutData(column);
+		// add new setColumnData() invocation
+		MethodInvocation invocation;
+		Expression layoutDataExpression;
+		{
+			String invocationSource =
+					TemplateUtils.format(
+							"{0}.setColumnData({1}, {2})",
+							this,
+							column,
+							newLayoutData.getCreationSupport().add_getSource(null));
+			invocation = (MethodInvocation) column.addExpressionStatement(invocationSource);
+			layoutDataExpression = DomGenerics.arguments(invocation).get(1);
+		}
+		// configure CreationSupport
+		newLayoutData.getCreationSupport().add_setSourceExpression(layoutDataExpression);
+		// use empty variable
+		{
+			VariableSupport variableSupport =
+					new EmptyVariableSupport(newLayoutData, layoutDataExpression);
+			newLayoutData.setVariableSupport(variableSupport);
+		}
+		// use "secondary" association
+		newLayoutData.setAssociation(new InvocationSecondaryAssociation(invocation));
+		column.addChild(newLayoutData);
+		// add related nodes
+		addRelatedNodes(invocation);
+		column.addRelatedNodes(invocation);
+		newLayoutData.addRelatedNodes(invocation);
+	}
 
-  /**
-   * Removes existing/old layout data for given column.
-   */
-  private void removeLayoutData(ItemInfo column) throws Exception {
-    // remove existing setColumnData() invocation
-    List<MethodInvocation> invocations =
-        getMethodInvocations("setColumnData("
-            + "org.eclipse.swt.widgets.Widget,"
-            + "org.eclipse.jface.viewers.ColumnLayoutData)");
-    for (MethodInvocation invocation : invocations) {
-      Expression columnExpression = DomGenerics.arguments(invocation).get(0);
-      if (column.isRepresentedBy(columnExpression)) {
-        getEditor().removeEnclosingStatement(invocation);
-      }
-    }
-    // delete layout data itself
-    ColumnLayoutDataInfo oldLayoutData = getLayoutData(column);
-    if (oldLayoutData != null) {
-      oldLayoutData.delete();
-    }
-  }
+	/**
+	 * Removes existing/old layout data for given column.
+	 */
+	private void removeLayoutData(ItemInfo column) throws Exception {
+		// remove existing setColumnData() invocation
+		List<MethodInvocation> invocations =
+				getMethodInvocations("setColumnData("
+						+ "org.eclipse.swt.widgets.Widget,"
+						+ "org.eclipse.jface.viewers.ColumnLayoutData)");
+		for (MethodInvocation invocation : invocations) {
+			Expression columnExpression = DomGenerics.arguments(invocation).get(0);
+			if (column.isRepresentedBy(columnExpression)) {
+				getEditor().removeEnclosingStatement(invocation);
+			}
+		}
+		// delete layout data itself
+		ColumnLayoutDataInfo oldLayoutData = getLayoutData(column);
+		if (oldLayoutData != null) {
+			oldLayoutData.delete();
+		}
+	}
 
-  /**
-   * Adds broadcast that contribute {@link ColumnLayoutDataType_Property} to each column of
-   * table/tree.
-   */
-  private void contributeLayoutDataTypeProperty() {
-    addBroadcastListener(new JavaInfoAddProperties() {
-      @Override
-      public void invoke(JavaInfo possibleColumn, List<Property> properties) throws Exception {
-        if (isOurColumn(possibleColumn)) {
-          // prepare ColumnLayoutDataType_Property (existing or new)
-          ColumnLayoutDataType_Property typeProperty;
-          {
-            Class<ColumnLayoutDataType_Property> key = ColumnLayoutDataType_Property.class;
-            typeProperty = (ColumnLayoutDataType_Property) possibleColumn.getArbitraryValue(key);
-            if (typeProperty == null) {
-              typeProperty = new ColumnLayoutDataType_Property((ItemInfo) possibleColumn);
-              possibleColumn.putArbitraryValue(key, typeProperty);
-            }
-          }
-          // add ColumnLayoutDataType_Property
-          properties.add(typeProperty);
-        }
-      }
-    });
-  }
+	/**
+	 * Adds broadcast that contribute {@link ColumnLayoutDataType_Property} to each column of
+	 * table/tree.
+	 */
+	private void contributeLayoutDataTypeProperty() {
+		addBroadcastListener(new JavaInfoAddProperties() {
+			@Override
+			public void invoke(JavaInfo possibleColumn, List<Property> properties) throws Exception {
+				if (isOurColumn(possibleColumn)) {
+					// prepare ColumnLayoutDataType_Property (existing or new)
+					ColumnLayoutDataType_Property typeProperty;
+					{
+						Class<ColumnLayoutDataType_Property> key = ColumnLayoutDataType_Property.class;
+						typeProperty = (ColumnLayoutDataType_Property) possibleColumn.getArbitraryValue(key);
+						if (typeProperty == null) {
+							typeProperty = new ColumnLayoutDataType_Property((ItemInfo) possibleColumn);
+							possibleColumn.putArbitraryValue(key, typeProperty);
+						}
+					}
+					// add ColumnLayoutDataType_Property
+					properties.add(typeProperty);
+				}
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Checks
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if given {@link JavaInfo} is column, by checking parameter
-   *         <code>"isColumn"</code> .
-   */
-  private static boolean isColumn(JavaInfo possibleColumn) {
-    return JavaInfoUtils.hasTrueParameter(possibleColumn, "isColumn");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Checks
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if given {@link JavaInfo} is column, by checking parameter
+	 *         <code>"isColumn"</code> .
+	 */
+	private static boolean isColumn(JavaInfo possibleColumn) {
+		return JavaInfoUtils.hasTrueParameter(possibleColumn, "isColumn");
+	}
 
-  /**
-   * @return <code>true</code> if given {@link JavaInfo} is column on single table/tree child of out
-   *         {@link CompositeInfo}.
-   */
-  private boolean isOurColumn(JavaInfo possibleColumn) {
-    if (isColumn(possibleColumn)) {
-      ObjectInfo possibleColumnContainer = possibleColumn.getParent();
-      return isOurColumnContainer(possibleColumnContainer);
-    }
-    return false;
-  }
+	/**
+	 * @return <code>true</code> if given {@link JavaInfo} is column on single table/tree child of out
+	 *         {@link CompositeInfo}.
+	 */
+	private boolean isOurColumn(JavaInfo possibleColumn) {
+		if (isColumn(possibleColumn)) {
+			ObjectInfo possibleColumnContainer = possibleColumn.getParent();
+			return isOurColumnContainer(possibleColumnContainer);
+		}
+		return false;
+	}
 
-  /**
-   * @return <code>true</code> if given {@link JavaInfo} is single table/tree child of out
-   *         {@link CompositeInfo}.
-   */
-  private boolean isOurColumnContainer(ObjectInfo possibleTableOrTree) {
-    ObjectInfo layoutComposite = possibleTableOrTree.getParent();
-    return isActiveOnComposite(layoutComposite);
-  }
+	/**
+	 * @return <code>true</code> if given {@link JavaInfo} is single table/tree child of out
+	 *         {@link CompositeInfo}.
+	 */
+	private boolean isOurColumnContainer(ObjectInfo possibleTableOrTree) {
+		ObjectInfo layoutComposite = possibleTableOrTree.getParent();
+		return isActiveOnComposite(layoutComposite);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ColumnLayoutData type selection property
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * {@link Property} for selecting {@link ColumnLayoutDataInfo} type to use for column.
-   */
-  private final class ColumnLayoutDataType_Property extends Property {
-    private static final String PIXELS_TITLE = "ColumnPixelData";
-    private static final String WEIGHT_TITLE = "ColumnWeightData";
-    private final ItemInfo m_column;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ColumnLayoutData type selection property
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * {@link Property} for selecting {@link ColumnLayoutDataInfo} type to use for column.
+	 */
+	private final class ColumnLayoutDataType_Property extends Property {
+		private static final String PIXELS_TITLE = "ColumnPixelData";
+		private static final String WEIGHT_TITLE = "ColumnWeightData";
+		private final ItemInfo m_column;
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public ColumnLayoutDataType_Property(ItemInfo column) {
-      super(new StringComboPropertyEditor(PIXELS_TITLE, WEIGHT_TITLE));
-      setCategory(PropertyCategory.system(4));
-      m_column = column;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public ColumnLayoutDataType_Property(ItemInfo column) {
+			super(new StringComboPropertyEditor(PIXELS_TITLE, WEIGHT_TITLE));
+			setCategory(PropertyCategory.system(4));
+			m_column = column;
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Presentation
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public String getTitle() {
-      return "LayoutDataType";
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Presentation
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public String getTitle() {
+			return "LayoutDataType";
+		}
 
-    @Override
-    public boolean isModified() throws Exception {
-      return true;
-    }
+		@Override
+		public boolean isModified() throws Exception {
+			return true;
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Value
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public Object getValue() throws Exception {
-      ColumnLayoutDataInfo layoutData = getLayoutData(m_column);
-      if (layoutData instanceof ColumnPixelDataInfo) {
-        return PIXELS_TITLE;
-      } else {
-        return WEIGHT_TITLE;
-      }
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Value
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public Object getValue() throws Exception {
+			ColumnLayoutDataInfo layoutData = getLayoutData(m_column);
+			if (layoutData instanceof ColumnPixelDataInfo) {
+				return PIXELS_TITLE;
+			} else {
+				return WEIGHT_TITLE;
+			}
+		}
 
-    @Override
-    public void setValue(Object value) throws Exception {
-      // prepare class of layout data to set
-      final String layoutDataClassName;
-      if (value == PIXELS_TITLE) {
-        layoutDataClassName = "org.eclipse.jface.viewers.ColumnPixelData";
-      } else {
-        layoutDataClassName = "org.eclipse.jface.viewers.ColumnWeightData";
-      }
-      // OK, set layout data
-      ExecutionUtils.run(m_column, new RunnableEx() {
-        @Override
-        public void run() throws Exception {
-          setLayoutData(m_column, layoutDataClassName);
-        }
-      });
-    }
-  }
+		@Override
+		public void setValue(Object value) throws Exception {
+			// prepare class of layout data to set
+			final String layoutDataClassName;
+			if (value == PIXELS_TITLE) {
+				layoutDataClassName = "org.eclipse.jface.viewers.ColumnPixelData";
+			} else {
+				layoutDataClassName = "org.eclipse.jface.viewers.ColumnWeightData";
+			}
+			// OK, set layout data
+			ExecutionUtils.run(m_column, new RunnableEx() {
+				@Override
+				public void run() throws Exception {
+					setLayoutData(m_column, layoutDataClassName);
+				}
+			});
+		}
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/layout/ColumnLayoutDataInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/layout/ColumnLayoutDataInfo.java
index 3dc3e1699..47f433b6b 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/layout/ColumnLayoutDataInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/layout/ColumnLayoutDataInfo.java
@@ -24,14 +24,14 @@
  * @coverage rcp.model.jface.layout
  */
 public abstract class ColumnLayoutDataInfo extends LayoutDataInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ColumnLayoutDataInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ColumnLayoutDataInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/layout/ColumnPixelDataInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/layout/ColumnPixelDataInfo.java
index c10972bbb..a7aed0765 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/layout/ColumnPixelDataInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/layout/ColumnPixelDataInfo.java
@@ -25,25 +25,25 @@
  * @coverage rcp.model.jface.layout
  */
 public final class ColumnPixelDataInfo extends ColumnLayoutDataInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ColumnPixelDataInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-    // instead of "column.width" property set "width" property of ColumnPixelData
-    addBroadcastListener(new GenericPropertySetValue() {
-      @Override
-      public void invoke(GenericPropertyImpl property, Object[] value, boolean[] shouldSetValue)
-          throws Exception {
-        if (property.getJavaInfo() == getParentJava() && property.getTitle().equals("width")) {
-          getPropertyByTitle("width").setValue(value[0]);
-          shouldSetValue[0] = false;
-        }
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ColumnPixelDataInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+		// instead of "column.width" property set "width" property of ColumnPixelData
+		addBroadcastListener(new GenericPropertySetValue() {
+			@Override
+			public void invoke(GenericPropertyImpl property, Object[] value, boolean[] shouldSetValue)
+					throws Exception {
+				if (property.getJavaInfo() == getParentJava() && property.getTitle().equals("width")) {
+					getPropertyByTitle("width").setValue(value[0]);
+					shouldSetValue[0] = false;
+				}
+			}
+		});
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/layout/ColumnWeightDataInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/layout/ColumnWeightDataInfo.java
index 9de073af4..87d56c250 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/layout/ColumnWeightDataInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/layout/ColumnWeightDataInfo.java
@@ -25,25 +25,25 @@
  * @coverage rcp.model.jface.layout
  */
 public final class ColumnWeightDataInfo extends ColumnLayoutDataInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ColumnWeightDataInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-    // instead of "column.width" property set "minimumWidth" property of ColumnWeightData
-    addBroadcastListener(new GenericPropertySetValue() {
-      @Override
-      public void invoke(GenericPropertyImpl property, Object[] value, boolean[] shouldSetValue)
-          throws Exception {
-        if (property.getJavaInfo() == getParentJava() && property.getTitle().equals("width")) {
-          getPropertyByTitle("minimumWidth").setValue(value[0]);
-          shouldSetValue[0] = false;
-        }
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ColumnWeightDataInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+		// instead of "column.width" property set "minimumWidth" property of ColumnWeightData
+		addBroadcastListener(new GenericPropertySetValue() {
+			@Override
+			public void invoke(GenericPropertyImpl property, Object[] value, boolean[] shouldSetValue)
+					throws Exception {
+				if (property.getJavaInfo() == getParentJava() && property.getTitle().equals("width")) {
+					getPropertyByTitle("minimumWidth").setValue(value[0]);
+					shouldSetValue[0] = false;
+				}
+			}
+		});
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/layout/TableColumnLayoutInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/layout/TableColumnLayoutInfo.java
index 269c83d49..aa8fd684d 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/layout/TableColumnLayoutInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/layout/TableColumnLayoutInfo.java
@@ -28,44 +28,44 @@
  * @coverage rcp.model.jface.layout
  */
 public final class TableColumnLayoutInfo extends AbstractColumnLayoutInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public TableColumnLayoutInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public TableColumnLayoutInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void refresh_afterCreate0() throws Exception {
-    ensureTable();
-    super.refresh_afterCreate0();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void refresh_afterCreate0() throws Exception {
+		ensureTable();
+		super.refresh_afterCreate0();
+	}
 
-  /**
-   * Users often try to drop {@link TableColumnLayout} on {@link Composite} and see exception. So,
-   * we should automatically create {@link Table} and say that this is not good. :-)
-   */
-  private void ensureTable() {
-    Composite composite = (Composite) getComposite().getObject();
-    if (composite.getChildren().length == 0) {
-      Table table = new Table(composite, SWT.BORDER);
-      {
-        TableItem item = new TableItem(table, SWT.NONE);
-        item.setText(ModelMessages.TableColumnLayoutInfo_errLine1);
-      }
-      {
-        TableItem item = new TableItem(table, SWT.NONE);
-        item.setText(ModelMessages.TableColumnLayoutInfo_errLine2);
-      }
-    }
-  }
+	/**
+	 * Users often try to drop {@link TableColumnLayout} on {@link Composite} and see exception. So,
+	 * we should automatically create {@link Table} and say that this is not good. :-)
+	 */
+	private void ensureTable() {
+		Composite composite = (Composite) getComposite().getObject();
+		if (composite.getChildren().length == 0) {
+			Table table = new Table(composite, SWT.BORDER);
+			{
+				TableItem item = new TableItem(table, SWT.NONE);
+				item.setText(ModelMessages.TableColumnLayoutInfo_errLine1);
+			}
+			{
+				TableItem item = new TableItem(table, SWT.NONE);
+				item.setText(ModelMessages.TableColumnLayoutInfo_errLine2);
+			}
+		}
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/layout/TreeColumnLayoutInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/layout/TreeColumnLayoutInfo.java
index 8d2495514..322a570a0 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/layout/TreeColumnLayoutInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/layout/TreeColumnLayoutInfo.java
@@ -28,44 +28,44 @@
  * @coverage rcp.model.jface.layout
  */
 public final class TreeColumnLayoutInfo extends AbstractColumnLayoutInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public TreeColumnLayoutInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public TreeColumnLayoutInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void refresh_afterCreate0() throws Exception {
-    ensureTree();
-    super.refresh_afterCreate0();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void refresh_afterCreate0() throws Exception {
+		ensureTree();
+		super.refresh_afterCreate0();
+	}
 
-  /**
-   * Users often try to drop {@link TreeColumnLayout} on {@link Composite} and see exception. So, we
-   * should automatically create {@link Tree} and say that this is not good. :-)
-   */
-  private void ensureTree() {
-    Composite composite = (Composite) getComposite().getObject();
-    if (composite.getChildren().length == 0) {
-      Tree tree = new Tree(composite, SWT.BORDER);
-      {
-        TreeItem item = new TreeItem(tree, SWT.NONE);
-        item.setText(ModelMessages.TreeColumnLayoutInfo_errLine1);
-      }
-      {
-        TreeItem item = new TreeItem(tree, SWT.NONE);
-        item.setText(ModelMessages.TreeColumnLayoutInfo_errLine2);
-      }
-    }
-  }
+	/**
+	 * Users often try to drop {@link TreeColumnLayout} on {@link Composite} and see exception. So, we
+	 * should automatically create {@link Tree} and say that this is not good. :-)
+	 */
+	private void ensureTree() {
+		Composite composite = (Composite) getComposite().getObject();
+		if (composite.getChildren().length == 0) {
+			Tree tree = new Tree(composite, SWT.BORDER);
+			{
+				TreeItem item = new TreeItem(tree, SWT.NONE);
+				item.setText(ModelMessages.TreeColumnLayoutInfo_errLine1);
+			}
+			{
+				TreeItem item = new TreeItem(tree, SWT.NONE);
+				item.setText(ModelMessages.TreeColumnLayoutInfo_errLine2);
+			}
+		}
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/viewers/ComboViewerInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/viewers/ComboViewerInfo.java
index a86ca99f1..69c35f938 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/viewers/ComboViewerInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/viewers/ComboViewerInfo.java
@@ -25,32 +25,32 @@
  * @coverage rcp.model.jface.viewers
  */
 public final class ComboViewerInfo extends ViewerInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ComboViewerInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ComboViewerInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void setObject(Object object) throws Exception {
-    // tweak for Control method
-    {
-      ComboViewer viewer = (ComboViewer) object;
-      if (viewer.getControl() instanceof org.eclipse.swt.custom.CCombo) {
-        getWrapper().setControlMethodName("getCCombo");
-      }
-    }
-    // continue
-    super.setObject(object);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void setObject(Object object) throws Exception {
+		// tweak for Control method
+		{
+			ComboViewer viewer = (ComboViewer) object;
+			if (viewer.getControl() instanceof org.eclipse.swt.custom.CCombo) {
+				getWrapper().setControlMethodName("getCCombo");
+			}
+		}
+		// continue
+		super.setObject(object);
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/viewers/TableViewerColumnInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/viewers/TableViewerColumnInfo.java
index 90bbb705d..0b121e48c 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/viewers/TableViewerColumnInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/viewers/TableViewerColumnInfo.java
@@ -32,63 +32,63 @@
  * @coverage rcp.model.jface.viewers
  */
 public final class TableViewerColumnInfo extends ViewerColumnInfo {
-  private final TableViewerColumnInfo m_this = this;
+	private final TableViewerColumnInfo m_this = this;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public TableViewerColumnInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public TableViewerColumnInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Properties
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected List<Property> getPropertyList() throws Exception {
-    List<Property> properties = super.getPropertyList();
-    properties.add(createSorterProperty());
-    return properties;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Properties
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected List<Property> getPropertyList() throws Exception {
+		List<Property> properties = super.getPropertyList();
+		properties.add(createSorterProperty());
+		return properties;
+	}
 
-  private JavaProperty createSorterProperty() {
-    return new JavaProperty(this, "sorter", TableViewerColumnSorterPropertyEditor.INSTANCE) {
-      @Override
-      public boolean isModified() throws Exception {
-        return getValue() != null;
-      }
+	private JavaProperty createSorterProperty() {
+		return new JavaProperty(this, "sorter", TableViewerColumnSorterPropertyEditor.INSTANCE) {
+			@Override
+			public boolean isModified() throws Exception {
+				return getValue() != null;
+			}
 
-      @Override
-      public Object getValue() throws Exception {
-        for (ASTNode node : getRelatedNodes()) {
-          if (node.getLocationInParent() == ClassInstanceCreation.ARGUMENTS_PROPERTY) {
-            ClassInstanceCreation creation = (ClassInstanceCreation) node.getParent();
-            if (AstNodeUtils.isSuccessorOf(creation, "org.eclipse.wb.swt.TableViewerColumnSorter")) {
-              return creation;
-            }
-          }
-        }
-        return null;
-      }
+			@Override
+			public Object getValue() throws Exception {
+				for (ASTNode node : getRelatedNodes()) {
+					if (node.getLocationInParent() == ClassInstanceCreation.ARGUMENTS_PROPERTY) {
+						ClassInstanceCreation creation = (ClassInstanceCreation) node.getParent();
+						if (AstNodeUtils.isSuccessorOf(creation, "org.eclipse.wb.swt.TableViewerColumnSorter")) {
+							return creation;
+						}
+					}
+				}
+				return null;
+			}
 
-      @Override
-      public void setValue(Object value) throws Exception {
-        final ASTNode node = (ASTNode) getValue();
-        if (node != null) {
-          ExecutionUtils.run(m_this, new RunnableEx() {
-            @Override
-            public void run() throws Exception {
-              m_this.getEditor().removeEnclosingStatement(node);
-            }
-          });
-        }
-      }
-    };
-  }
+			@Override
+			public void setValue(Object value) throws Exception {
+				final ASTNode node = (ASTNode) getValue();
+				if (node != null) {
+					ExecutionUtils.run(m_this, new RunnableEx() {
+						@Override
+						public void run() throws Exception {
+							m_this.getEditor().removeEnclosingStatement(node);
+						}
+					});
+				}
+			}
+		};
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/viewers/TableViewerColumnSorterPropertyEditor.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/viewers/TableViewerColumnSorterPropertyEditor.java
index ec48b7bda..34fc9e9ce 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/viewers/TableViewerColumnSorterPropertyEditor.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/viewers/TableViewerColumnSorterPropertyEditor.java
@@ -35,77 +35,77 @@
  * @coverage rcp.model.jface.viewers
  */
 public final class TableViewerColumnSorterPropertyEditor extends TextDisplayPropertyEditor {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final PropertyEditor INSTANCE = new TableViewerColumnSorterPropertyEditor();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final PropertyEditor INSTANCE = new TableViewerColumnSorterPropertyEditor();
 
-  private TableViewerColumnSorterPropertyEditor() {
-  }
+	private TableViewerColumnSorterPropertyEditor() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getText(Property property) throws Exception {
-    if (property.isModified()) {
-      return "<exists>";
-    }
-    return "<double click>";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getText(Property property) throws Exception {
+		if (property.isModified()) {
+			return "<exists>";
+		}
+		return "<double click>";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void doubleClick(Property _property, Point location) throws Exception {
-    JavaProperty property = (JavaProperty) _property;
-    final JavaInfo javaInfo = property.getJavaInfo();
-    ASTNode node = (ASTNode) property.getValue();
-    // open in source, if exists
-    if (node != null) {
-      IDesignPageSite site = IDesignPageSite.Helper.getSite(javaInfo);
-      if (site != null) {
-        site.openSourcePosition(node.getStartPosition());
-      }
-      return;
-    }
-    // no sorter, generate
-    AstEditor editor = javaInfo.getEditor();
-    ProjectUtils.ensureResourceType(
-        editor.getJavaProject(),
-        Activator.getDefault().getBundle(),
-        "org.eclipse.wb.swt.TableViewerColumnSorter");
-    ExecutionUtils.run(javaInfo, new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        String source =
-            CodeUtils.getSource(
-                "new org.eclipse.wb.swt.TableViewerColumnSorter("
-                    + TemplateUtils.getExpression(javaInfo)
-                    + ") {",
-                "\t@Override",
-                "\tprotected int doCompare(org.eclipse.jface.viewers.Viewer viewer, Object e1, Object e2) {",
-                "\t\t// TODO Remove this method, if your getValue(Object) returns Comparable.",
-                "\t\t// Typical Comparable are String, Integer, Double, etc.",
-                "\t\treturn super.doCompare(viewer, e1, e2);",
-                "\t}",
-                "\t@Override",
-                "\tprotected Object getValue(Object o) {",
-                "\t\t// TODO remove this method, if your EditingSupport returns value",
-                "\t\treturn super.getValue(o);",
-                "\t}",
-                "}");
-        javaInfo.addExpressionStatement(source);
-      }
-    });
-    // open in source
-    doubleClick(_property, location);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void doubleClick(Property _property, Point location) throws Exception {
+		JavaProperty property = (JavaProperty) _property;
+		final JavaInfo javaInfo = property.getJavaInfo();
+		ASTNode node = (ASTNode) property.getValue();
+		// open in source, if exists
+		if (node != null) {
+			IDesignPageSite site = IDesignPageSite.Helper.getSite(javaInfo);
+			if (site != null) {
+				site.openSourcePosition(node.getStartPosition());
+			}
+			return;
+		}
+		// no sorter, generate
+		AstEditor editor = javaInfo.getEditor();
+		ProjectUtils.ensureResourceType(
+				editor.getJavaProject(),
+				Activator.getDefault().getBundle(),
+				"org.eclipse.wb.swt.TableViewerColumnSorter");
+		ExecutionUtils.run(javaInfo, new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				String source =
+						CodeUtils.getSource(
+								"new org.eclipse.wb.swt.TableViewerColumnSorter("
+										+ TemplateUtils.getExpression(javaInfo)
+										+ ") {",
+										"\t@Override",
+										"\tprotected int doCompare(org.eclipse.jface.viewers.Viewer viewer, Object e1, Object e2) {",
+										"\t\t// TODO Remove this method, if your getValue(Object) returns Comparable.",
+										"\t\t// Typical Comparable are String, Integer, Double, etc.",
+										"\t\treturn super.doCompare(viewer, e1, e2);",
+										"\t}",
+										"\t@Override",
+										"\tprotected Object getValue(Object o) {",
+										"\t\t// TODO remove this method, if your EditingSupport returns value",
+										"\t\treturn super.getValue(o);",
+										"\t}",
+								"}");
+				javaInfo.addExpressionStatement(source);
+			}
+		});
+		// open in source
+		doubleClick(_property, location);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/viewers/ViewerColumnCreationSupport.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/viewers/ViewerColumnCreationSupport.java
index e67090a14..d5bf72adf 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/viewers/ViewerColumnCreationSupport.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/viewers/ViewerColumnCreationSupport.java
@@ -34,82 +34,82 @@
  * @coverage rcp.model.jface.viewers
  */
 public final class ViewerColumnCreationSupport extends WrapperMethodCreationSupport {
-  private final ViewerColumnInfo m_viewer;
-  private final boolean m_addInvocations;
+	private final ViewerColumnInfo m_viewer;
+	private final boolean m_addInvocations;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ViewerColumnCreationSupport(ViewerColumnInfo viewer) {
-    this(viewer, true);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ViewerColumnCreationSupport(ViewerColumnInfo viewer) {
+		this(viewer, true);
+	}
 
-  public ViewerColumnCreationSupport(ViewerColumnInfo viewer, boolean addInvocations) {
-    super(viewer.getWrapper());
-    m_viewer = viewer;
-    m_addInvocations = addInvocations;
-  }
+	public ViewerColumnCreationSupport(ViewerColumnInfo viewer, boolean addInvocations) {
+		super(viewer.getWrapper());
+		m_viewer = viewer;
+		m_addInvocations = addInvocations;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Association getAssociation() throws Exception {
-    return new ViewerColumnWidgetAssociation(m_viewer);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Association getAssociation() throws Exception {
+		return new ViewerColumnWidgetAssociation(m_viewer);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Add
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String add_getSource(NodeTarget target) throws Exception {
-    // ViewerColumn accepts Viewer as %parent%, not Control
-    m_javaInfo.addBroadcastListener(new JavaEventListener() {
-      @Override
-      public void associationTemplate(JavaInfo component, String[] source) throws Exception {
-        if (component == m_javaInfo) {
-          ControlInfo control = (ControlInfo) m_javaInfo.getParent();
-          ViewerInfo viewer = control.getChildren(ViewerInfo.class).get(0);
-          source[0] =
-              StringUtils.replace(source[0], "%parent%", TemplateUtils.getExpression(viewer));
-        }
-      }
-    });
-    // prepare ViewerColumn creation source
-    return super.add_getSource(target);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Add
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String add_getSource(NodeTarget target) throws Exception {
+		// ViewerColumn accepts Viewer as %parent%, not Control
+		m_javaInfo.addBroadcastListener(new JavaEventListener() {
+			@Override
+			public void associationTemplate(JavaInfo component, String[] source) throws Exception {
+				if (component == m_javaInfo) {
+					ControlInfo control = (ControlInfo) m_javaInfo.getParent();
+					ViewerInfo viewer = control.getChildren(ViewerInfo.class).get(0);
+					source[0] =
+							StringUtils.replace(source[0], "%parent%", TemplateUtils.getExpression(viewer));
+				}
+			}
+		});
+		// prepare ViewerColumn creation source
+		return super.add_getSource(target);
+	}
 
-  @Override
-  public void add_setSourceExpression(Expression expression) throws Exception {
-    super.add_setSourceExpression(expression);
-    // add invocations for column
-    if (m_addInvocations) {
-      for (int index = 0;; index++) {
-        // get invocation from parameters
-        String invocationText;
-        {
-          invocationText = JavaInfoUtils.getParameter(m_viewer, "ViewerColumn.invocation." + index);
-          if (invocationText == null) {
-            break;
-          }
-        }
-        // add single invocation
-        int spaceIndex = invocationText.indexOf(' ');
-        String signature = invocationText.substring(0, spaceIndex);
-        String arguments = invocationText.substring(spaceIndex + 1);
-        m_javaInfo.addMethodInvocation(signature, arguments);
-      }
-    }
-  }
+	@Override
+	public void add_setSourceExpression(Expression expression) throws Exception {
+		super.add_setSourceExpression(expression);
+		// add invocations for column
+		if (m_addInvocations) {
+			for (int index = 0;; index++) {
+				// get invocation from parameters
+				String invocationText;
+				{
+					invocationText = JavaInfoUtils.getParameter(m_viewer, "ViewerColumn.invocation." + index);
+					if (invocationText == null) {
+						break;
+					}
+				}
+				// add single invocation
+				int spaceIndex = invocationText.indexOf(' ');
+				String signature = invocationText.substring(0, spaceIndex);
+				String arguments = invocationText.substring(spaceIndex + 1);
+				m_javaInfo.addMethodInvocation(signature, arguments);
+			}
+		}
+	}
 
-  @Override
-  protected CreationSupport newControlCreationSupport() {
-    return new ViewerColumnWidgetCreationSupport(m_viewer);
-  }
+	@Override
+	protected CreationSupport newControlCreationSupport() {
+		return new ViewerColumnWidgetCreationSupport(m_viewer);
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/viewers/ViewerColumnInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/viewers/ViewerColumnInfo.java
index 59876f8af..80b64e491 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/viewers/ViewerColumnInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/viewers/ViewerColumnInfo.java
@@ -29,60 +29,60 @@
  * @coverage rcp.model.jface.viewers
  */
 public class ViewerColumnInfo extends WrapperInfo {
-  private ViewerInfo m_viewerInfo;
+	private ViewerInfo m_viewerInfo;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ViewerColumnInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ViewerColumnInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IWrapperInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected WrapperByMethod createWrapper() {
-    return new WrapperByMethod(this, JavaInfoUtils.getParameter(this, "ViewerColumn.method")) {
-      @Override
-      protected CreationSupport newWrappedCreationSupport() throws Exception {
-        return new ViewerColumnCreationSupport(ViewerColumnInfo.this);
-      }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IWrapperInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected WrapperByMethod createWrapper() {
+		return new WrapperByMethod(this, JavaInfoUtils.getParameter(this, "ViewerColumn.method")) {
+			@Override
+			protected CreationSupport newWrappedCreationSupport() throws Exception {
+				return new ViewerColumnCreationSupport(ViewerColumnInfo.this);
+			}
 
-      @Override
-      protected void configureParameter(ParameterDescription parameter, JavaInfo parameterJavaInfo)
-          throws Exception {
-        if (parameterJavaInfo instanceof ViewerInfo) {
-          m_viewerInfo = (ViewerInfo) parameterJavaInfo;
-        }
-        if (parameter.isParent()
-            && (parameter.getType() == getWrappedType() || parameterJavaInfo instanceof ViewerInfo)
-            && m_viewerInfo != null) {
-          configureHierarchy(m_viewerInfo);
-        }
-      }
+			@Override
+			protected void configureParameter(ParameterDescription parameter, JavaInfo parameterJavaInfo)
+					throws Exception {
+				if (parameterJavaInfo instanceof ViewerInfo) {
+					m_viewerInfo = (ViewerInfo) parameterJavaInfo;
+				}
+				if (parameter.isParent()
+						&& (parameter.getType() == getWrappedType() || parameterJavaInfo instanceof ViewerInfo)
+						&& m_viewerInfo != null) {
+					configureHierarchy(m_viewerInfo);
+				}
+			}
 
-      @Override
-      protected CreationSupport newControlCreationSupport() {
-        return new ViewerColumnWidgetCreationSupport(ViewerColumnInfo.this);
-      }
+			@Override
+			protected CreationSupport newControlCreationSupport() {
+				return new ViewerColumnWidgetCreationSupport(ViewerColumnInfo.this);
+			}
 
-      @Override
-      protected Association newControlAssociation() {
-        return new ViewerColumnWidgetAssociation(ViewerColumnInfo.this);
-      }
+			@Override
+			protected Association newControlAssociation() {
+				return new ViewerColumnWidgetAssociation(ViewerColumnInfo.this);
+			}
 
-      @Override
-      protected void configureHierarchy(JavaInfo parent, JavaInfo control) throws Exception {
-        softAddChild(parent.getParent(), control);
-        softAddChild(control, ViewerColumnInfo.this);
-      }
-    };
-  }
+			@Override
+			protected void configureHierarchy(JavaInfo parent, JavaInfo control) throws Exception {
+				softAddChild(parent.getParent(), control);
+				softAddChild(control, ViewerColumnInfo.this);
+			}
+		};
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/viewers/ViewerColumnWidgetAssociation.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/viewers/ViewerColumnWidgetAssociation.java
index 5a78728d7..8126fc8b9 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/viewers/ViewerColumnWidgetAssociation.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/viewers/ViewerColumnWidgetAssociation.java
@@ -24,22 +24,22 @@
  * @coverage rcp.model.jface.viewers
  */
 public final class ViewerColumnWidgetAssociation extends WrappedObjectAssociation {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ViewerColumnWidgetAssociation(ViewerColumnInfo viewer) {
-    super(viewer.getWrapper());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ViewerColumnWidgetAssociation(ViewerColumnInfo viewer) {
+		super(viewer.getWrapper());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void setParent(JavaInfo parent) throws Exception {
-    super.setParent(parent.getChildren(ViewerInfo.class).get(0));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void setParent(JavaInfo parent) throws Exception {
+		super.setParent(parent.getChildren(ViewerInfo.class).get(0));
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/viewers/ViewerColumnWidgetCreationSupport.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/viewers/ViewerColumnWidgetCreationSupport.java
index 54a079583..74d881782 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/viewers/ViewerColumnWidgetCreationSupport.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/jface/viewers/ViewerColumnWidgetCreationSupport.java
@@ -23,39 +23,39 @@
  * @coverage rcp.model.jface.viewers
  */
 public final class ViewerColumnWidgetCreationSupport extends WrapperMethodControlCreationSupport {
-  private final ViewerColumnInfo m_viewer;
+	private final ViewerColumnInfo m_viewer;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ViewerColumnWidgetCreationSupport(ViewerColumnInfo viewer) {
-    super(viewer.getWrapper());
-    m_viewer = viewer;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ViewerColumnWidgetCreationSupport(ViewerColumnInfo viewer) {
+		super(viewer.getWrapper());
+		m_viewer = viewer;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Clipboard
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public IClipboardCreationSupport getClipboard() throws Exception {
-    final JavaInfoMemento viewerMemento = JavaInfoMemento.createMemento(m_viewer);
-    return new IClipboardCreationSupport() {
-      private static final long serialVersionUID = 0L;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Clipboard
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public IClipboardCreationSupport getClipboard() throws Exception {
+		final JavaInfoMemento viewerMemento = JavaInfoMemento.createMemento(m_viewer);
+		return new IClipboardCreationSupport() {
+			private static final long serialVersionUID = 0L;
 
-      @Override
-      public CreationSupport create(JavaInfo rootObject) throws Exception {
-        ViewerColumnInfo viewer = (ViewerColumnInfo) viewerMemento.create(rootObject);
-        return new ViewerColumnCreationSupport(viewer, false);
-      }
+			@Override
+			public CreationSupport create(JavaInfo rootObject) throws Exception {
+				ViewerColumnInfo viewer = (ViewerColumnInfo) viewerMemento.create(rootObject);
+				return new ViewerColumnCreationSupport(viewer, false);
+			}
 
-      @Override
-      public void apply(JavaInfo javaInfo) throws Exception {
-        viewerMemento.apply();
-      }
-    };
-  }
+			@Override
+			public void apply(JavaInfo javaInfo) throws Exception {
+				viewerMemento.apply();
+			}
+		};
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/layout/IStackLayoutInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/layout/IStackLayoutInfo.java
index 2af8b9877..ee05f9b1f 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/layout/IStackLayoutInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/layout/IStackLayoutInfo.java
@@ -22,18 +22,18 @@
  * @coverage rcp.model.layout
  */
 public interface IStackLayoutInfo<C extends IControlInfo> extends ILayoutInfo<C> {
-  /**
-   * @return the {@link IControlInfo} before active one.
-   */
-  C getPrevControl();
+	/**
+	 * @return the {@link IControlInfo} before active one.
+	 */
+	C getPrevControl();
 
-  /**
-   * @return the {@link IControlInfo} after active one.
-   */
-  C getNextControl();
+	/**
+	 * @return the {@link IControlInfo} after active one.
+	 */
+	C getNextControl();
 
-  /**
-   * Sets {@link IControlInfo} to show on {@link StackLayout}.
-   */
-  void show(C control);
+	/**
+	 * Sets {@link IControlInfo} to show on {@link StackLayout}.
+	 */
+	void show(C control);
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/layout/StackLayoutAssistant.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/layout/StackLayoutAssistant.java
index 6fc02146a..6de448a25 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/layout/StackLayoutAssistant.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/layout/StackLayoutAssistant.java
@@ -24,22 +24,22 @@
  * @coverage rcp.model.layout
  */
 public final class StackLayoutAssistant extends LayoutAssistantSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public StackLayoutAssistant(ILayoutInfo<?> layout) {
-    super(layout);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public StackLayoutAssistant(ILayoutInfo<?> layout) {
+		super(layout);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Pages
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected AbstractAssistantPage createLayoutPage(Composite parent) {
-    return new StackLayoutAssistantPage(parent, m_layout);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Pages
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected AbstractAssistantPage createLayoutPage(Composite parent) {
+		return new StackLayoutAssistantPage(parent, m_layout);
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/layout/StackLayoutAssistantPage.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/layout/StackLayoutAssistantPage.java
index 240adff6c..de7c56bd9 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/layout/StackLayoutAssistantPage.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/layout/StackLayoutAssistantPage.java
@@ -23,15 +23,15 @@
  * @coverage rcp.model.layout
  */
 public final class StackLayoutAssistantPage extends AbstractAssistantPage {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public StackLayoutAssistantPage(Composite parent, Object selection) {
-    super(parent, selection);
-    GridLayoutFactory.create(this).columns(1);
-    addIntegerProperty(this, "marginWidth", ModelMessages.StackLayoutAssistantPage_marginWidth);
-    addIntegerProperty(this, "marginHeight", ModelMessages.StackLayoutAssistantPage_marginHeight);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public StackLayoutAssistantPage(Composite parent, Object selection) {
+		super(parent, selection);
+		GridLayoutFactory.create(this).columns(1);
+		addIntegerProperty(this, "marginWidth", ModelMessages.StackLayoutAssistantPage_marginWidth);
+		addIntegerProperty(this, "marginHeight", ModelMessages.StackLayoutAssistantPage_marginHeight);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/layout/StackLayoutInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/layout/StackLayoutInfo.java
index 5150bda70..9cb261465 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/layout/StackLayoutInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/layout/StackLayoutInfo.java
@@ -33,111 +33,111 @@
  * @coverage rcp.model.layout
  */
 public final class StackLayoutInfo extends LayoutInfo implements IStackLayoutInfo<ControlInfo> {
-  private final StackContainerSupport<ControlInfo> m_stackContainer =
-      new StackContainerSupport<ControlInfo>(this) {
-        @Override
-        protected boolean isActive() {
-          return StackLayoutInfo.this.isActive();
-        }
+	private final StackContainerSupport<ControlInfo> m_stackContainer =
+			new StackContainerSupport<ControlInfo>(this) {
+		@Override
+		protected boolean isActive() {
+			return StackLayoutInfo.this.isActive();
+		}
 
-        @Override
-        protected ObjectInfo getContainer() {
-          return getComposite();
-        }
+		@Override
+		protected ObjectInfo getContainer() {
+			return getComposite();
+		}
 
-        @Override
-        protected List<ControlInfo> getChildren() {
-          return getControls();
-        }
-      };
+		@Override
+		protected List<ControlInfo> getChildren() {
+			return getControls();
+		}
+	};
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public StackLayoutInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-    new StackLayoutAssistant(this);
-    showOnlyTopControl_graphicalChild();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public StackLayoutInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+		new StackLayoutAssistant(this);
+		showOnlyTopControl_graphicalChild();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Broadcasts
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void showOnlyTopControl_graphicalChild() {
-    addBroadcastListener(new ObjectInfoChildGraphical() {
-      @Override
-      public void invoke(ObjectInfo object, boolean[] visible) throws Exception {
-        if (isManagedObject(object)) {
-          ControlInfo control = (ControlInfo) object;
-          if (control != getActiveControl()) {
-            visible[0] = false;
-          }
-        }
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Broadcasts
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void showOnlyTopControl_graphicalChild() {
+		addBroadcastListener(new ObjectInfoChildGraphical() {
+			@Override
+			public void invoke(ObjectInfo object, boolean[] visible) throws Exception {
+				if (isManagedObject(object)) {
+					ControlInfo control = (ControlInfo) object;
+					if (control != getActiveControl()) {
+						visible[0] = false;
+					}
+				}
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void refresh_afterCreate() throws Exception {
-    super.refresh_afterCreate();
-    {
-      ControlInfo topControl = getActiveControl();
-      if (topControl != null) {
-        ReflectionUtils.setField(getObject(), "topControl", topControl.getObject());
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void refresh_afterCreate() throws Exception {
+		super.refresh_afterCreate();
+		{
+			ControlInfo topControl = getActiveControl();
+			if (topControl != null) {
+				ReflectionUtils.setField(getObject(), "topControl", topControl.getObject());
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ControlInfo getActiveControl() {
-    return m_stackContainer.getActive();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ControlInfo getActiveControl() {
+		return m_stackContainer.getActive();
+	}
 
-  @Override
-  public ControlInfo getPrevControl() {
-    return m_stackContainer.getPrev();
-  }
+	@Override
+	public ControlInfo getPrevControl() {
+		return m_stackContainer.getPrev();
+	}
 
-  @Override
-  public ControlInfo getNextControl() {
-    return m_stackContainer.getNext();
-  }
+	@Override
+	public ControlInfo getNextControl() {
+		return m_stackContainer.getNext();
+	}
 
-  @Override
-  public void show(ControlInfo control) {
-    m_stackContainer.setActive(control);
-  }
+	@Override
+	public void show(ControlInfo control) {
+		m_stackContainer.setActive(control);
+	}
 
-  //////////////////////////////////////////////////////////////////////////
-  //
-  // Clipboard
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void clipboardCopy_addControlCommands(ControlInfo control,
-      List<ClipboardCommand> commands) throws Exception {
-    commands.add(new LayoutClipboardCommand<StackLayoutInfo>(control) {
-      private static final long serialVersionUID = 0L;
+	//////////////////////////////////////////////////////////////////////////
+	//
+	// Clipboard
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void clipboardCopy_addControlCommands(ControlInfo control,
+			List<ClipboardCommand> commands) throws Exception {
+		commands.add(new LayoutClipboardCommand<StackLayoutInfo>(control) {
+			private static final long serialVersionUID = 0L;
 
-      @Override
-      protected void add(StackLayoutInfo layout, ControlInfo control) throws Exception {
-        layout.command_CREATE(control, null);
-      }
-    });
-  }
+			@Override
+			protected void add(StackLayoutInfo layout, ControlInfo control) throws Exception {
+				layout.command_CREATE(control, null);
+			}
+		});
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/layout/absolute/PreferenceInitializer.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/layout/absolute/PreferenceInitializer.java
index db0c877ae..18c15785b 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/layout/absolute/PreferenceInitializer.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/layout/absolute/PreferenceInitializer.java
@@ -24,41 +24,41 @@
  * @coverage rcp.preferences.layout
  */
 public final class PreferenceInitializer extends AbstractPreferenceInitializer
-    implements
-      IPreferenceConstants {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  //	Initializing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link ToolkitDescription} of the toolkit this policy applies to.
-   */
-  private ToolkitDescription getToolkit() {
-    return ToolkitProvider.DESCRIPTION;
-  }
+implements
+IPreferenceConstants {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	//	Initializing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link ToolkitDescription} of the toolkit this policy applies to.
+	 */
+	private ToolkitDescription getToolkit() {
+		return ToolkitProvider.DESCRIPTION;
+	}
 
-  @Override
-  public void initializeDefaultPreferences() {
-    IPreferenceStore preferenceStore = getToolkit().getPreferences();
-    // editing mode
-    preferenceStore.setDefault(P_USE_FREE_MODE, true);
-    preferenceStore.setDefault(P_USE_GRID, false);
-    preferenceStore.setDefault(P_DISPLAY_GRID, false);
-    preferenceStore.setDefault(P_GRID_STEP_X, 5);
-    preferenceStore.setDefault(P_GRID_STEP_Y, 5);
-    preferenceStore.setDefault(P_CREATION_FLOW, false);
-    // gaps
-    preferenceStore.setDefault(P_COMPONENT_GAP_LEFT, 6);
-    preferenceStore.setDefault(P_COMPONENT_GAP_RIGHT, 6);
-    preferenceStore.setDefault(P_COMPONENT_GAP_TOP, 6);
-    preferenceStore.setDefault(P_COMPONENT_GAP_BOTTOM, 6);
-    preferenceStore.setDefault(P_CONTAINER_GAP_LEFT, 10);
-    preferenceStore.setDefault(P_CONTAINER_GAP_RIGHT, 10);
-    preferenceStore.setDefault(P_CONTAINER_GAP_TOP, 10);
-    preferenceStore.setDefault(P_CONTAINER_GAP_BOTTOM, 10);
-    // misc
-    preferenceStore.setDefault(P_DISPLAY_LOCATION_SIZE_HINTS, true);
-    preferenceStore.setDefault(P_AUTOSIZE_ON_PROPERTY_CHANGE, false);
-  }
+	@Override
+	public void initializeDefaultPreferences() {
+		IPreferenceStore preferenceStore = getToolkit().getPreferences();
+		// editing mode
+		preferenceStore.setDefault(P_USE_FREE_MODE, true);
+		preferenceStore.setDefault(P_USE_GRID, false);
+		preferenceStore.setDefault(P_DISPLAY_GRID, false);
+		preferenceStore.setDefault(P_GRID_STEP_X, 5);
+		preferenceStore.setDefault(P_GRID_STEP_Y, 5);
+		preferenceStore.setDefault(P_CREATION_FLOW, false);
+		// gaps
+		preferenceStore.setDefault(P_COMPONENT_GAP_LEFT, 6);
+		preferenceStore.setDefault(P_COMPONENT_GAP_RIGHT, 6);
+		preferenceStore.setDefault(P_COMPONENT_GAP_TOP, 6);
+		preferenceStore.setDefault(P_COMPONENT_GAP_BOTTOM, 6);
+		preferenceStore.setDefault(P_CONTAINER_GAP_LEFT, 10);
+		preferenceStore.setDefault(P_CONTAINER_GAP_RIGHT, 10);
+		preferenceStore.setDefault(P_CONTAINER_GAP_TOP, 10);
+		preferenceStore.setDefault(P_CONTAINER_GAP_BOTTOM, 10);
+		// misc
+		preferenceStore.setDefault(P_DISPLAY_LOCATION_SIZE_HINTS, true);
+		preferenceStore.setDefault(P_AUTOSIZE_ON_PROPERTY_CHANGE, false);
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/layout/grid/GridData2.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/layout/grid/GridData2.java
index bfc89ad7e..a0d98c670 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/layout/grid/GridData2.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/layout/grid/GridData2.java
@@ -48,545 +48,545 @@
  * @coverage rcp.model.layout.GridLayout.copy
  */
 public final class GridData2 {
-  /**
-   * verticalAlignment specifies how controls will be positioned vertically within a cell.
-   *
-   * The default value is CENTER.
-   *
-   * Possible values are:
-   * <ul>
-   * <li>SWT.BEGINNING (or SWT.TOP): Position the control at the top of the cell</li>
-   * <li>SWT.CENTER: Position the control in the vertical center of the cell</li>
-   * <li>SWT.END (or SWT.BOTTOM): Position the control at the bottom of the cell</li>
-   * <li>SWT.FILL: Resize the control to fill the cell vertically</li>
-   * </ul>
-   */
-  public int verticalAlignment = CENTER;
-  /**
-   * horizontalAlignment specifies how controls will be positioned horizontally within a cell.
-   *
-   * The default value is BEGINNING.
-   *
-   * Possible values are:
-   * <ul>
-   * <li>SWT.BEGINNING (or SWT.LEFT): Position the control at the left of the cell</li>
-   * <li>SWT.CENTER: Position the control in the horizontal center of the cell</li>
-   * <li>SWT.END (or SWT.RIGHT): Position the control at the right of the cell</li>
-   * <li>SWT.FILL: Resize the control to fill the cell horizontally</li>
-   * </ul>
-   */
-  public int horizontalAlignment = BEGINNING;
-  /**
-   * widthHint specifies the preferred width in pixels. This value is the wHint passed into
-   * Control.computeSize(int, int, boolean) to determine the preferred size of the control.
-   *
-   * The default value is SWT.DEFAULT.
-   *
-   * @see Control#computeSize(int, int, boolean)
-   */
-  public int widthHint = SWT.DEFAULT;
-  /**
-   * heightHint specifies the preferred height in pixels. This value is the hHint passed into
-   * Control.computeSize(int, int, boolean) to determine the preferred size of the control.
-   *
-   * The default value is SWT.DEFAULT.
-   *
-   * @see Control#computeSize(int, int, boolean)
-   */
-  public int heightHint = SWT.DEFAULT;
-  /**
-   * horizontalIndent specifies the number of pixels of indentation that will be placed along the
-   * left side of the cell.
-   *
-   * The default value is 0.
-   */
-  public int horizontalIndent = 0;
-  /**
-   * verticalIndent specifies the number of pixels of indentation that will be placed along the top
-   * side of the cell.
-   *
-   * The default value is 0.
-   *
-   * @since 3.1
-   */
-  public int verticalIndent = 0;
-  /**
-   * horizontalSpan specifies the number of column cells that the control will take up.
-   *
-   * The default value is 1.
-   */
-  public int horizontalSpan = 1;
-  /**
-   * verticalSpan specifies the number of row cells that the control will take up.
-   *
-   * The default value is 1.
-   */
-  public int verticalSpan = 1;
-  /**
-   * <p>
-   * grabExcessHorizontalSpace specifies whether the width of the cell changes depending on the size
-   * of the parent Composite. If grabExcessHorizontalSpace is <code>true</code>, the following rules
-   * apply to the width of the cell:
-   * </p>
-   * <ul>
-   * <li>If extra horizontal space is available in the parent, the cell will grow to be wider than
-   * its preferred width. The new width will be "preferred width + delta" where delta is the extra
-   * horizontal space divided by the number of grabbing columns.</li>
-   * <li>If there is not enough horizontal space available in the parent, the cell will shrink until
-   * it reaches its minimum width as specified by GridData.minimumWidth. The new width will be the
-   * maximum of "minimumWidth" and "preferred width - delta", where delta is the amount of space
-   * missing divided by the number of grabbing columns.</li>
-   * <li>If the parent is packed, the cell will be its preferred width as specified by
-   * GridData.widthHint.</li>
-   * <li>If the control spans multiple columns and there are no other grabbing controls in any of
-   * the spanned columns, the last column in the span will grab the extra space. If there is at
-   * least one other grabbing control in the span, the grabbing will be spread over the columns
-   * already marked as grabExcessHorizontalSpace.</li>
-   * </ul>
-   *
-   * <p>
-   * The default value is false.
-   * </p>
-   *
-   * @see GridData2#minimumWidth
-   * @see GridData2#widthHint
-   */
-  public boolean grabExcessHorizontalSpace = false;
-  /**
-   * <p>
-   * grabExcessVerticalSpace specifies whether the height of the cell changes depending on the size
-   * of the parent Composite. If grabExcessVerticalSpace is <code>true</code>, the following rules
-   * apply to the height of the cell:
-   * </p>
-   * <ul>
-   * <li>If extra vertical space is available in the parent, the cell will grow to be taller than
-   * its preferred height. The new height will be "preferred height + delta" where delta is the
-   * extra vertical space divided by the number of grabbing rows.</li>
-   * <li>If there is not enough vertical space available in the parent, the cell will shrink until
-   * it reaches its minimum height as specified by GridData.minimumHeight. The new height will be
-   * the maximum of "minimumHeight" and "preferred height - delta", where delta is the amount of
-   * space missing divided by the number of grabbing rows.</li>
-   * <li>If the parent is packed, the cell will be its preferred height as specified by
-   * GridData.heightHint.</li>
-   * <li>If the control spans multiple rows and there are no other grabbing controls in any of the
-   * spanned rows, the last row in the span will grab the extra space. If there is at least one
-   * other grabbing control in the span, the grabbing will be spread over the rows already marked as
-   * grabExcessVerticalSpace.</li>
-   * </ul>
-   *
-   * <p>
-   * The default value is false.
-   * </p>
-   *
-   * @see GridData2#minimumHeight
-   * @see GridData2#heightHint
-   */
-  public boolean grabExcessVerticalSpace = false;
-  /**
-   * minimumWidth specifies the minimum width in pixels. This value applies only if
-   * grabExcessHorizontalSpace is true. A value of SWT.DEFAULT means that the minimum width will be
-   * the result of Control.computeSize(int, int, boolean) where wHint is determined by
-   * GridData.widthHint.
-   *
-   * The default value is 0.
-   *
-   * @since 3.1
-   * @see Control#computeSize(int, int, boolean)
-   * @see GridData2#widthHint
-   */
-  public int minimumWidth = 0;
-  /**
-   * minimumHeight specifies the minimum height in pixels. This value applies only if
-   * grabExcessVerticalSpace is true. A value of SWT.DEFAULT means that the minimum height will be
-   * the result of Control.computeSize(int, int, boolean) where hHint is determined by
-   * GridData.heightHint.
-   *
-   * The default value is 0.
-   *
-   * @since 3.1
-   * @see Control#computeSize(int, int, boolean)
-   * @see GridData2#heightHint
-   */
-  public int minimumHeight = 0;
-  /**
-   * exclude informs the layout to ignore this control when sizing and positioning controls. If this
-   * value is <code>true</code>, the size and position of the control will not be managed by the
-   * layout. If this value is <code>false</code>, the size and position of the control will be
-   * computed and assigned.
-   *
-   * The default value is <code>false</code>.
-   *
-   * @since 3.1
-   */
-  public boolean exclude = false;
-  /**
-   * Value for horizontalAlignment or verticalAlignment. Position the control at the top or left of
-   * the cell. Not recommended. Use SWT.BEGINNING, SWT.TOP or SWT.LEFT instead.
-   */
-  public static final int BEGINNING = SWT.BEGINNING;
-  /**
-   * Value for horizontalAlignment or verticalAlignment. Position the control in the vertical or
-   * horizontal center of the cell Not recommended. Use SWT.CENTER instead.
-   */
-  public static final int CENTER = 2;
-  /**
-   * Value for horizontalAlignment or verticalAlignment. Position the control at the bottom or right
-   * of the cell Not recommended. Use SWT.END, SWT.BOTTOM or SWT.RIGHT instead.
-   */
-  public static final int END = 3;
-  /**
-   * Value for horizontalAlignment or verticalAlignment. Resize the control to fill the cell
-   * horizontally or vertically. Not recommended. Use SWT.FILL instead.
-   */
-  public static final int FILL = SWT.FILL;
-  /**
-   * Style bit for <code>new GridData(int)</code>. Position the control at the top of the cell. Not
-   * recommended. Use <code>new GridData(int, SWT.BEGINNING, boolean, boolean)</code> instead.
-   */
-  public static final int VERTICAL_ALIGN_BEGINNING = 1 << 1;
-  /**
-   * Style bit for <code>new GridData(int)</code> to position the control in the vertical center of
-   * the cell. Not recommended. Use <code>new GridData(int, SWT.CENTER, boolean, boolean)</code>
-   * instead.
-   */
-  public static final int VERTICAL_ALIGN_CENTER = 1 << 2;
-  /**
-   * Style bit for <code>new GridData(int)</code> to position the control at the bottom of the cell.
-   * Not recommended. Use <code>new GridData(int, SWT.END, boolean, boolean)</code> instead.
-   */
-  public static final int VERTICAL_ALIGN_END = 1 << 3;
-  /**
-   * Style bit for <code>new GridData(int)</code> to resize the control to fill the cell vertically.
-   * Not recommended. Use <code>new GridData(int, SWT.FILL, boolean, boolean)</code> instead
-   */
-  public static final int VERTICAL_ALIGN_FILL = 1 << 4;
-  /**
-   * Style bit for <code>new GridData(int)</code> to position the control at the left of the cell.
-   * Not recommended. Use <code>new GridData(SWT.BEGINNING, int, boolean, boolean)</code> instead.
-   */
-  public static final int HORIZONTAL_ALIGN_BEGINNING = 1 << 5;
-  /**
-   * Style bit for <code>new GridData(int)</code> to position the control in the horizontal center
-   * of the cell. Not recommended. Use <code>new GridData(SWT.CENTER, int, boolean, boolean)</code>
-   * instead.
-   */
-  public static final int HORIZONTAL_ALIGN_CENTER = 1 << 6;
-  /**
-   * Style bit for <code>new GridData(int)</code> to position the control at the right of the cell.
-   * Not recommended. Use <code>new GridData(SWT.END, int, boolean, boolean)</code> instead.
-   */
-  public static final int HORIZONTAL_ALIGN_END = 1 << 7;
-  /**
-   * Style bit for <code>new GridData(int)</code> to resize the control to fill the cell
-   * horizontally. Not recommended. Use <code>new GridData(SWT.FILL, int, boolean, boolean)</code>
-   * instead.
-   */
-  public static final int HORIZONTAL_ALIGN_FILL = 1 << 8;
-  /**
-   * Style bit for <code>new GridData(int)</code> to resize the control to fit the remaining
-   * horizontal space. Not recommended. Use <code>new GridData(int, int, true, boolean)</code>
-   * instead.
-   */
-  public static final int GRAB_HORIZONTAL = 1 << 9;
-  /**
-   * Style bit for <code>new GridData(int)</code> to resize the control to fit the remaining
-   * vertical space. Not recommended. Use <code>new GridData(int, int, boolean, true)</code>
-   * instead.
-   */
-  public static final int GRAB_VERTICAL = 1 << 10;
-  /**
-   * Style bit for <code>new GridData(int)</code> to resize the control to fill the cell vertically
-   * and to fit the remaining vertical space. FILL_VERTICAL = VERTICAL_ALIGN_FILL | GRAB_VERTICAL
-   * Not recommended. Use <code>new GridData(int, SWT.FILL, boolean, true)</code> instead.
-   */
-  public static final int FILL_VERTICAL = VERTICAL_ALIGN_FILL | GRAB_VERTICAL;
-  /**
-   * Style bit for <code>new GridData(int)</code> to resize the control to fill the cell
-   * horizontally and to fit the remaining horizontal space. FILL_HORIZONTAL = HORIZONTAL_ALIGN_FILL
-   * | GRAB_HORIZONTAL Not recommended. Use <code>new GridData(SWT.FILL, int, true, boolean)</code>
-   * instead.
-   */
-  public static final int FILL_HORIZONTAL = HORIZONTAL_ALIGN_FILL | GRAB_HORIZONTAL;
-  /**
-   * Style bit for <code>new GridData(int)</code> to resize the control to fill the cell
-   * horizontally and vertically and to fit the remaining horizontal and vertical space. FILL_BOTH =
-   * FILL_VERTICAL | FILL_HORIZONTAL Not recommended. Use
-   * <code>new GridData(SWT.FILL, SWT.FILL, true, true)</code> instead.
-   */
-  public static final int FILL_BOTH = FILL_VERTICAL | FILL_HORIZONTAL;
-  int cacheWidth = -1, cacheHeight = -1;
-  int defaultWhint, defaultHhint, defaultWidth = -1, defaultHeight = -1;
-  int currentWhint, currentHhint, currentWidth = -1, currentHeight = -1;
+	/**
+	 * verticalAlignment specifies how controls will be positioned vertically within a cell.
+	 *
+	 * The default value is CENTER.
+	 *
+	 * Possible values are:
+	 * <ul>
+	 * <li>SWT.BEGINNING (or SWT.TOP): Position the control at the top of the cell</li>
+	 * <li>SWT.CENTER: Position the control in the vertical center of the cell</li>
+	 * <li>SWT.END (or SWT.BOTTOM): Position the control at the bottom of the cell</li>
+	 * <li>SWT.FILL: Resize the control to fill the cell vertically</li>
+	 * </ul>
+	 */
+	public int verticalAlignment = CENTER;
+	/**
+	 * horizontalAlignment specifies how controls will be positioned horizontally within a cell.
+	 *
+	 * The default value is BEGINNING.
+	 *
+	 * Possible values are:
+	 * <ul>
+	 * <li>SWT.BEGINNING (or SWT.LEFT): Position the control at the left of the cell</li>
+	 * <li>SWT.CENTER: Position the control in the horizontal center of the cell</li>
+	 * <li>SWT.END (or SWT.RIGHT): Position the control at the right of the cell</li>
+	 * <li>SWT.FILL: Resize the control to fill the cell horizontally</li>
+	 * </ul>
+	 */
+	public int horizontalAlignment = BEGINNING;
+	/**
+	 * widthHint specifies the preferred width in pixels. This value is the wHint passed into
+	 * Control.computeSize(int, int, boolean) to determine the preferred size of the control.
+	 *
+	 * The default value is SWT.DEFAULT.
+	 *
+	 * @see Control#computeSize(int, int, boolean)
+	 */
+	public int widthHint = SWT.DEFAULT;
+	/**
+	 * heightHint specifies the preferred height in pixels. This value is the hHint passed into
+	 * Control.computeSize(int, int, boolean) to determine the preferred size of the control.
+	 *
+	 * The default value is SWT.DEFAULT.
+	 *
+	 * @see Control#computeSize(int, int, boolean)
+	 */
+	public int heightHint = SWT.DEFAULT;
+	/**
+	 * horizontalIndent specifies the number of pixels of indentation that will be placed along the
+	 * left side of the cell.
+	 *
+	 * The default value is 0.
+	 */
+	public int horizontalIndent = 0;
+	/**
+	 * verticalIndent specifies the number of pixels of indentation that will be placed along the top
+	 * side of the cell.
+	 *
+	 * The default value is 0.
+	 *
+	 * @since 3.1
+	 */
+	public int verticalIndent = 0;
+	/**
+	 * horizontalSpan specifies the number of column cells that the control will take up.
+	 *
+	 * The default value is 1.
+	 */
+	public int horizontalSpan = 1;
+	/**
+	 * verticalSpan specifies the number of row cells that the control will take up.
+	 *
+	 * The default value is 1.
+	 */
+	public int verticalSpan = 1;
+	/**
+	 * <p>
+	 * grabExcessHorizontalSpace specifies whether the width of the cell changes depending on the size
+	 * of the parent Composite. If grabExcessHorizontalSpace is <code>true</code>, the following rules
+	 * apply to the width of the cell:
+	 * </p>
+	 * <ul>
+	 * <li>If extra horizontal space is available in the parent, the cell will grow to be wider than
+	 * its preferred width. The new width will be "preferred width + delta" where delta is the extra
+	 * horizontal space divided by the number of grabbing columns.</li>
+	 * <li>If there is not enough horizontal space available in the parent, the cell will shrink until
+	 * it reaches its minimum width as specified by GridData.minimumWidth. The new width will be the
+	 * maximum of "minimumWidth" and "preferred width - delta", where delta is the amount of space
+	 * missing divided by the number of grabbing columns.</li>
+	 * <li>If the parent is packed, the cell will be its preferred width as specified by
+	 * GridData.widthHint.</li>
+	 * <li>If the control spans multiple columns and there are no other grabbing controls in any of
+	 * the spanned columns, the last column in the span will grab the extra space. If there is at
+	 * least one other grabbing control in the span, the grabbing will be spread over the columns
+	 * already marked as grabExcessHorizontalSpace.</li>
+	 * </ul>
+	 *
+	 * <p>
+	 * The default value is false.
+	 * </p>
+	 *
+	 * @see GridData2#minimumWidth
+	 * @see GridData2#widthHint
+	 */
+	public boolean grabExcessHorizontalSpace = false;
+	/**
+	 * <p>
+	 * grabExcessVerticalSpace specifies whether the height of the cell changes depending on the size
+	 * of the parent Composite. If grabExcessVerticalSpace is <code>true</code>, the following rules
+	 * apply to the height of the cell:
+	 * </p>
+	 * <ul>
+	 * <li>If extra vertical space is available in the parent, the cell will grow to be taller than
+	 * its preferred height. The new height will be "preferred height + delta" where delta is the
+	 * extra vertical space divided by the number of grabbing rows.</li>
+	 * <li>If there is not enough vertical space available in the parent, the cell will shrink until
+	 * it reaches its minimum height as specified by GridData.minimumHeight. The new height will be
+	 * the maximum of "minimumHeight" and "preferred height - delta", where delta is the amount of
+	 * space missing divided by the number of grabbing rows.</li>
+	 * <li>If the parent is packed, the cell will be its preferred height as specified by
+	 * GridData.heightHint.</li>
+	 * <li>If the control spans multiple rows and there are no other grabbing controls in any of the
+	 * spanned rows, the last row in the span will grab the extra space. If there is at least one
+	 * other grabbing control in the span, the grabbing will be spread over the rows already marked as
+	 * grabExcessVerticalSpace.</li>
+	 * </ul>
+	 *
+	 * <p>
+	 * The default value is false.
+	 * </p>
+	 *
+	 * @see GridData2#minimumHeight
+	 * @see GridData2#heightHint
+	 */
+	public boolean grabExcessVerticalSpace = false;
+	/**
+	 * minimumWidth specifies the minimum width in pixels. This value applies only if
+	 * grabExcessHorizontalSpace is true. A value of SWT.DEFAULT means that the minimum width will be
+	 * the result of Control.computeSize(int, int, boolean) where wHint is determined by
+	 * GridData.widthHint.
+	 *
+	 * The default value is 0.
+	 *
+	 * @since 3.1
+	 * @see Control#computeSize(int, int, boolean)
+	 * @see GridData2#widthHint
+	 */
+	public int minimumWidth = 0;
+	/**
+	 * minimumHeight specifies the minimum height in pixels. This value applies only if
+	 * grabExcessVerticalSpace is true. A value of SWT.DEFAULT means that the minimum height will be
+	 * the result of Control.computeSize(int, int, boolean) where hHint is determined by
+	 * GridData.heightHint.
+	 *
+	 * The default value is 0.
+	 *
+	 * @since 3.1
+	 * @see Control#computeSize(int, int, boolean)
+	 * @see GridData2#heightHint
+	 */
+	public int minimumHeight = 0;
+	/**
+	 * exclude informs the layout to ignore this control when sizing and positioning controls. If this
+	 * value is <code>true</code>, the size and position of the control will not be managed by the
+	 * layout. If this value is <code>false</code>, the size and position of the control will be
+	 * computed and assigned.
+	 *
+	 * The default value is <code>false</code>.
+	 *
+	 * @since 3.1
+	 */
+	public boolean exclude = false;
+	/**
+	 * Value for horizontalAlignment or verticalAlignment. Position the control at the top or left of
+	 * the cell. Not recommended. Use SWT.BEGINNING, SWT.TOP or SWT.LEFT instead.
+	 */
+	public static final int BEGINNING = SWT.BEGINNING;
+	/**
+	 * Value for horizontalAlignment or verticalAlignment. Position the control in the vertical or
+	 * horizontal center of the cell Not recommended. Use SWT.CENTER instead.
+	 */
+	public static final int CENTER = 2;
+	/**
+	 * Value for horizontalAlignment or verticalAlignment. Position the control at the bottom or right
+	 * of the cell Not recommended. Use SWT.END, SWT.BOTTOM or SWT.RIGHT instead.
+	 */
+	public static final int END = 3;
+	/**
+	 * Value for horizontalAlignment or verticalAlignment. Resize the control to fill the cell
+	 * horizontally or vertically. Not recommended. Use SWT.FILL instead.
+	 */
+	public static final int FILL = SWT.FILL;
+	/**
+	 * Style bit for <code>new GridData(int)</code>. Position the control at the top of the cell. Not
+	 * recommended. Use <code>new GridData(int, SWT.BEGINNING, boolean, boolean)</code> instead.
+	 */
+	public static final int VERTICAL_ALIGN_BEGINNING = 1 << 1;
+	/**
+	 * Style bit for <code>new GridData(int)</code> to position the control in the vertical center of
+	 * the cell. Not recommended. Use <code>new GridData(int, SWT.CENTER, boolean, boolean)</code>
+	 * instead.
+	 */
+	public static final int VERTICAL_ALIGN_CENTER = 1 << 2;
+	/**
+	 * Style bit for <code>new GridData(int)</code> to position the control at the bottom of the cell.
+	 * Not recommended. Use <code>new GridData(int, SWT.END, boolean, boolean)</code> instead.
+	 */
+	public static final int VERTICAL_ALIGN_END = 1 << 3;
+	/**
+	 * Style bit for <code>new GridData(int)</code> to resize the control to fill the cell vertically.
+	 * Not recommended. Use <code>new GridData(int, SWT.FILL, boolean, boolean)</code> instead
+	 */
+	public static final int VERTICAL_ALIGN_FILL = 1 << 4;
+	/**
+	 * Style bit for <code>new GridData(int)</code> to position the control at the left of the cell.
+	 * Not recommended. Use <code>new GridData(SWT.BEGINNING, int, boolean, boolean)</code> instead.
+	 */
+	public static final int HORIZONTAL_ALIGN_BEGINNING = 1 << 5;
+	/**
+	 * Style bit for <code>new GridData(int)</code> to position the control in the horizontal center
+	 * of the cell. Not recommended. Use <code>new GridData(SWT.CENTER, int, boolean, boolean)</code>
+	 * instead.
+	 */
+	public static final int HORIZONTAL_ALIGN_CENTER = 1 << 6;
+	/**
+	 * Style bit for <code>new GridData(int)</code> to position the control at the right of the cell.
+	 * Not recommended. Use <code>new GridData(SWT.END, int, boolean, boolean)</code> instead.
+	 */
+	public static final int HORIZONTAL_ALIGN_END = 1 << 7;
+	/**
+	 * Style bit for <code>new GridData(int)</code> to resize the control to fill the cell
+	 * horizontally. Not recommended. Use <code>new GridData(SWT.FILL, int, boolean, boolean)</code>
+	 * instead.
+	 */
+	public static final int HORIZONTAL_ALIGN_FILL = 1 << 8;
+	/**
+	 * Style bit for <code>new GridData(int)</code> to resize the control to fit the remaining
+	 * horizontal space. Not recommended. Use <code>new GridData(int, int, true, boolean)</code>
+	 * instead.
+	 */
+	public static final int GRAB_HORIZONTAL = 1 << 9;
+	/**
+	 * Style bit for <code>new GridData(int)</code> to resize the control to fit the remaining
+	 * vertical space. Not recommended. Use <code>new GridData(int, int, boolean, true)</code>
+	 * instead.
+	 */
+	public static final int GRAB_VERTICAL = 1 << 10;
+	/**
+	 * Style bit for <code>new GridData(int)</code> to resize the control to fill the cell vertically
+	 * and to fit the remaining vertical space. FILL_VERTICAL = VERTICAL_ALIGN_FILL | GRAB_VERTICAL
+	 * Not recommended. Use <code>new GridData(int, SWT.FILL, boolean, true)</code> instead.
+	 */
+	public static final int FILL_VERTICAL = VERTICAL_ALIGN_FILL | GRAB_VERTICAL;
+	/**
+	 * Style bit for <code>new GridData(int)</code> to resize the control to fill the cell
+	 * horizontally and to fit the remaining horizontal space. FILL_HORIZONTAL = HORIZONTAL_ALIGN_FILL
+	 * | GRAB_HORIZONTAL Not recommended. Use <code>new GridData(SWT.FILL, int, true, boolean)</code>
+	 * instead.
+	 */
+	public static final int FILL_HORIZONTAL = HORIZONTAL_ALIGN_FILL | GRAB_HORIZONTAL;
+	/**
+	 * Style bit for <code>new GridData(int)</code> to resize the control to fill the cell
+	 * horizontally and vertically and to fit the remaining horizontal and vertical space. FILL_BOTH =
+	 * FILL_VERTICAL | FILL_HORIZONTAL Not recommended. Use
+	 * <code>new GridData(SWT.FILL, SWT.FILL, true, true)</code> instead.
+	 */
+	public static final int FILL_BOTH = FILL_VERTICAL | FILL_HORIZONTAL;
+	int cacheWidth = -1, cacheHeight = -1;
+	int defaultWhint, defaultHhint, defaultWidth = -1, defaultHeight = -1;
+	int currentWhint, currentHhint, currentWidth = -1, currentHeight = -1;
 
-  /**
-   * Constructs a new instance of GridData using default values.
-   */
-  public GridData2() {
-    super();
-  }
+	/**
+	 * Constructs a new instance of GridData using default values.
+	 */
+	public GridData2() {
+		super();
+	}
 
-  /**
-   * Constructs a new instance based on the GridData style. This constructor is not recommended.
-   *
-   * @param style
-   *          the GridData style
-   */
-  public GridData2(int style) {
-    super();
-    if ((style & VERTICAL_ALIGN_BEGINNING) != 0) {
-      verticalAlignment = BEGINNING;
-    }
-    if ((style & VERTICAL_ALIGN_CENTER) != 0) {
-      verticalAlignment = CENTER;
-    }
-    if ((style & VERTICAL_ALIGN_FILL) != 0) {
-      verticalAlignment = FILL;
-    }
-    if ((style & VERTICAL_ALIGN_END) != 0) {
-      verticalAlignment = END;
-    }
-    if ((style & HORIZONTAL_ALIGN_BEGINNING) != 0) {
-      horizontalAlignment = BEGINNING;
-    }
-    if ((style & HORIZONTAL_ALIGN_CENTER) != 0) {
-      horizontalAlignment = CENTER;
-    }
-    if ((style & HORIZONTAL_ALIGN_FILL) != 0) {
-      horizontalAlignment = FILL;
-    }
-    if ((style & HORIZONTAL_ALIGN_END) != 0) {
-      horizontalAlignment = END;
-    }
-    grabExcessHorizontalSpace = (style & GRAB_HORIZONTAL) != 0;
-    grabExcessVerticalSpace = (style & GRAB_VERTICAL) != 0;
-  }
+	/**
+	 * Constructs a new instance based on the GridData style. This constructor is not recommended.
+	 *
+	 * @param style
+	 *          the GridData style
+	 */
+	public GridData2(int style) {
+		super();
+		if ((style & VERTICAL_ALIGN_BEGINNING) != 0) {
+			verticalAlignment = BEGINNING;
+		}
+		if ((style & VERTICAL_ALIGN_CENTER) != 0) {
+			verticalAlignment = CENTER;
+		}
+		if ((style & VERTICAL_ALIGN_FILL) != 0) {
+			verticalAlignment = FILL;
+		}
+		if ((style & VERTICAL_ALIGN_END) != 0) {
+			verticalAlignment = END;
+		}
+		if ((style & HORIZONTAL_ALIGN_BEGINNING) != 0) {
+			horizontalAlignment = BEGINNING;
+		}
+		if ((style & HORIZONTAL_ALIGN_CENTER) != 0) {
+			horizontalAlignment = CENTER;
+		}
+		if ((style & HORIZONTAL_ALIGN_FILL) != 0) {
+			horizontalAlignment = FILL;
+		}
+		if ((style & HORIZONTAL_ALIGN_END) != 0) {
+			horizontalAlignment = END;
+		}
+		grabExcessHorizontalSpace = (style & GRAB_HORIZONTAL) != 0;
+		grabExcessVerticalSpace = (style & GRAB_VERTICAL) != 0;
+	}
 
-  /**
-   * Constructs a new instance of GridData according to the parameters.
-   *
-   * @param horizontalAlignment
-   *          how control will be positioned horizontally within a cell
-   * @param verticalAlignment
-   *          how control will be positioned vertically within a cell
-   * @param grabExcessHorizontalSpace
-   *          whether cell will be made wide enough to fit the remaining horizontal space
-   * @param grabExcessVerticalSpace
-   *          whether cell will be made high enough to fit the remaining vertical space
-   *
-   * @since 3.0
-   */
-  public GridData2(int horizontalAlignment,
-      int verticalAlignment,
-      boolean grabExcessHorizontalSpace,
-      boolean grabExcessVerticalSpace) {
-    this(horizontalAlignment,
-        verticalAlignment,
-        grabExcessHorizontalSpace,
-        grabExcessVerticalSpace,
-        1,
-        1);
-  }
+	/**
+	 * Constructs a new instance of GridData according to the parameters.
+	 *
+	 * @param horizontalAlignment
+	 *          how control will be positioned horizontally within a cell
+	 * @param verticalAlignment
+	 *          how control will be positioned vertically within a cell
+	 * @param grabExcessHorizontalSpace
+	 *          whether cell will be made wide enough to fit the remaining horizontal space
+	 * @param grabExcessVerticalSpace
+	 *          whether cell will be made high enough to fit the remaining vertical space
+	 *
+	 * @since 3.0
+	 */
+	public GridData2(int horizontalAlignment,
+			int verticalAlignment,
+			boolean grabExcessHorizontalSpace,
+			boolean grabExcessVerticalSpace) {
+		this(horizontalAlignment,
+				verticalAlignment,
+				grabExcessHorizontalSpace,
+				grabExcessVerticalSpace,
+				1,
+				1);
+	}
 
-  /**
-   * Constructs a new instance of GridData according to the parameters.
-   *
-   * @param horizontalAlignment
-   *          how control will be positioned horizontally within a cell
-   * @param verticalAlignment
-   *          how control will be positioned vertically within a cell
-   * @param grabExcessHorizontalSpace
-   *          whether cell will be made wide enough to fit the remaining horizontal space
-   * @param grabExcessVerticalSpace
-   *          whether cell will be made high enough to fit the remaining vertical space
-   * @param horizontalSpan
-   *          the number of column cells that the control will take up
-   * @param verticalSpan
-   *          the number of row cells that the control will take up
-   *
-   * @since 3.0
-   */
-  public GridData2(int horizontalAlignment,
-      int verticalAlignment,
-      boolean grabExcessHorizontalSpace,
-      boolean grabExcessVerticalSpace,
-      int horizontalSpan,
-      int verticalSpan) {
-    super();
-    this.horizontalAlignment = horizontalAlignment;
-    this.verticalAlignment = verticalAlignment;
-    this.grabExcessHorizontalSpace = grabExcessHorizontalSpace;
-    this.grabExcessVerticalSpace = grabExcessVerticalSpace;
-    this.horizontalSpan = horizontalSpan;
-    this.verticalSpan = verticalSpan;
-  }
+	/**
+	 * Constructs a new instance of GridData according to the parameters.
+	 *
+	 * @param horizontalAlignment
+	 *          how control will be positioned horizontally within a cell
+	 * @param verticalAlignment
+	 *          how control will be positioned vertically within a cell
+	 * @param grabExcessHorizontalSpace
+	 *          whether cell will be made wide enough to fit the remaining horizontal space
+	 * @param grabExcessVerticalSpace
+	 *          whether cell will be made high enough to fit the remaining vertical space
+	 * @param horizontalSpan
+	 *          the number of column cells that the control will take up
+	 * @param verticalSpan
+	 *          the number of row cells that the control will take up
+	 *
+	 * @since 3.0
+	 */
+	public GridData2(int horizontalAlignment,
+			int verticalAlignment,
+			boolean grabExcessHorizontalSpace,
+			boolean grabExcessVerticalSpace,
+			int horizontalSpan,
+			int verticalSpan) {
+		super();
+		this.horizontalAlignment = horizontalAlignment;
+		this.verticalAlignment = verticalAlignment;
+		this.grabExcessHorizontalSpace = grabExcessHorizontalSpace;
+		this.grabExcessVerticalSpace = grabExcessVerticalSpace;
+		this.horizontalSpan = horizontalSpan;
+		this.verticalSpan = verticalSpan;
+	}
 
-  /**
-   * Constructs a new instance of GridData according to the parameters. A value of SWT.DEFAULT
-   * indicates that no minimum width or no minimum height is specified.
-   *
-   * @param width
-   *          a minimum width for the column
-   * @param height
-   *          a minimum height for the row
-   *
-   * @since 3.0
-   */
-  public GridData2(int width, int height) {
-    super();
-    widthHint = width;
-    heightHint = height;
-  }
+	/**
+	 * Constructs a new instance of GridData according to the parameters. A value of SWT.DEFAULT
+	 * indicates that no minimum width or no minimum height is specified.
+	 *
+	 * @param width
+	 *          a minimum width for the column
+	 * @param height
+	 *          a minimum height for the row
+	 *
+	 * @since 3.0
+	 */
+	public GridData2(int width, int height) {
+		super();
+		widthHint = width;
+		heightHint = height;
+	}
 
-  void computeSize(Control control, int wHint, int hHint, boolean flushCache) {
-    if (cacheWidth != -1 && cacheHeight != -1) {
-      return;
-    }
-    if (wHint == widthHint && hHint == heightHint) {
-      if (defaultWidth == -1
-          || defaultHeight == -1
-          || wHint != defaultWhint
-          || hHint != defaultHhint) {
-        Point size = control.computeSize(wHint, hHint, flushCache);
-        defaultWhint = wHint;
-        defaultHhint = hHint;
-        defaultWidth = size.x;
-        defaultHeight = size.y;
-      }
-      cacheWidth = defaultWidth;
-      cacheHeight = defaultHeight;
-      return;
-    }
-    if (currentWidth == -1 || currentHeight == -1 || wHint != currentWhint || hHint != currentHhint) {
-      Point size = control.computeSize(wHint, hHint, flushCache);
-      currentWhint = wHint;
-      currentHhint = hHint;
-      currentWidth = size.x;
-      currentHeight = size.y;
-    }
-    cacheWidth = currentWidth;
-    cacheHeight = currentHeight;
-  }
+	void computeSize(Control control, int wHint, int hHint, boolean flushCache) {
+		if (cacheWidth != -1 && cacheHeight != -1) {
+			return;
+		}
+		if (wHint == widthHint && hHint == heightHint) {
+			if (defaultWidth == -1
+					|| defaultHeight == -1
+					|| wHint != defaultWhint
+					|| hHint != defaultHhint) {
+				Point size = control.computeSize(wHint, hHint, flushCache);
+				defaultWhint = wHint;
+				defaultHhint = hHint;
+				defaultWidth = size.x;
+				defaultHeight = size.y;
+			}
+			cacheWidth = defaultWidth;
+			cacheHeight = defaultHeight;
+			return;
+		}
+		if (currentWidth == -1 || currentHeight == -1 || wHint != currentWhint || hHint != currentHhint) {
+			Point size = control.computeSize(wHint, hHint, flushCache);
+			currentWhint = wHint;
+			currentHhint = hHint;
+			currentWidth = size.x;
+			currentHeight = size.y;
+		}
+		cacheWidth = currentWidth;
+		cacheHeight = currentHeight;
+	}
 
-  void flushCache() {
-    cacheWidth = cacheHeight = -1;
-    defaultWidth = defaultHeight = -1;
-    currentWidth = currentHeight = -1;
-  }
+	void flushCache() {
+		cacheWidth = cacheHeight = -1;
+		defaultWidth = defaultHeight = -1;
+		currentWidth = currentHeight = -1;
+	}
 
-  String getName() {
-    String string = getClass().getName();
-    int index = string.lastIndexOf('.');
-    if (index == -1) {
-      return string;
-    }
-    return string.substring(index + 1, string.length());
-  }
+	String getName() {
+		String string = getClass().getName();
+		int index = string.lastIndexOf('.');
+		if (index == -1) {
+			return string;
+		}
+		return string.substring(index + 1, string.length());
+	}
 
-  /**
-   * Returns a string containing a concise, human-readable description of the receiver.
-   *
-   * @return a string representation of the GridData object
-   */
-  @Override
-  public String toString() {
-    String hAlign = "";
-    switch (horizontalAlignment) {
-      case SWT.FILL :
-        hAlign = "SWT.FILL";
-        break;
-      case SWT.BEGINNING :
-        hAlign = "SWT.BEGINNING";
-        break;
-      case SWT.LEFT :
-        hAlign = "SWT.LEFT";
-        break;
-      case SWT.END :
-        hAlign = "SWT.END";
-        break;
-      case END :
-        hAlign = "GridData.END";
-        break;
-      case SWT.RIGHT :
-        hAlign = "SWT.RIGHT";
-        break;
-      case SWT.CENTER :
-        hAlign = "SWT.CENTER";
-        break;
-      case CENTER :
-        hAlign = "GridData.CENTER";
-        break;
-      default :
-        hAlign = "Undefined " + horizontalAlignment;
-        break;
-    }
-    String vAlign = "";
-    switch (verticalAlignment) {
-      case SWT.FILL :
-        vAlign = "SWT.FILL";
-        break;
-      case SWT.BEGINNING :
-        vAlign = "SWT.BEGINNING";
-        break;
-      case SWT.TOP :
-        vAlign = "SWT.TOP";
-        break;
-      case SWT.END :
-        vAlign = "SWT.END";
-        break;
-      case END :
-        vAlign = "GridData.END";
-        break;
-      case SWT.BOTTOM :
-        vAlign = "SWT.BOTTOM";
-        break;
-      case SWT.CENTER :
-        vAlign = "SWT.CENTER";
-        break;
-      case CENTER :
-        vAlign = "GridData.CENTER";
-        break;
-      default :
-        vAlign = "Undefined " + verticalAlignment;
-        break;
-    }
-    String string = getName() + " {";
-    string += "horizontalAlignment=" + hAlign + " ";
-    if (horizontalIndent != 0) {
-      string += "horizontalIndent=" + horizontalIndent + " ";
-    }
-    if (horizontalSpan != 1) {
-      string += "horizontalSpan=" + horizontalSpan + " ";
-    }
-    if (grabExcessHorizontalSpace) {
-      string += "grabExcessHorizontalSpace=" + grabExcessHorizontalSpace + " ";
-    }
-    if (widthHint != SWT.DEFAULT) {
-      string += "widthHint=" + widthHint + " ";
-    }
-    if (minimumWidth != 0) {
-      string += "minimumWidth=" + minimumWidth + " ";
-    }
-    string += "verticalAlignment=" + vAlign + " ";
-    if (verticalIndent != 0) {
-      string += "verticalIndent=" + verticalIndent + " ";
-    }
-    if (verticalSpan != 1) {
-      string += "verticalSpan=" + verticalSpan + " ";
-    }
-    if (grabExcessVerticalSpace) {
-      string += "grabExcessVerticalSpace=" + grabExcessVerticalSpace + " ";
-    }
-    if (heightHint != SWT.DEFAULT) {
-      string += "heightHint=" + heightHint + " ";
-    }
-    if (minimumHeight != 0) {
-      string += "minimumHeight=" + minimumHeight + " ";
-    }
-    if (exclude) {
-      string += "exclude=" + exclude + " ";
-    }
-    string = string.trim();
-    string += "}";
-    return string;
-  }
+	/**
+	 * Returns a string containing a concise, human-readable description of the receiver.
+	 *
+	 * @return a string representation of the GridData object
+	 */
+	@Override
+	public String toString() {
+		String hAlign = "";
+		switch (horizontalAlignment) {
+		case SWT.FILL :
+			hAlign = "SWT.FILL";
+			break;
+		case SWT.BEGINNING :
+			hAlign = "SWT.BEGINNING";
+			break;
+		case SWT.LEFT :
+			hAlign = "SWT.LEFT";
+			break;
+		case SWT.END :
+			hAlign = "SWT.END";
+			break;
+		case END :
+			hAlign = "GridData.END";
+			break;
+		case SWT.RIGHT :
+			hAlign = "SWT.RIGHT";
+			break;
+		case SWT.CENTER :
+			hAlign = "SWT.CENTER";
+			break;
+		case CENTER :
+			hAlign = "GridData.CENTER";
+			break;
+		default :
+			hAlign = "Undefined " + horizontalAlignment;
+			break;
+		}
+		String vAlign = "";
+		switch (verticalAlignment) {
+		case SWT.FILL :
+			vAlign = "SWT.FILL";
+			break;
+		case SWT.BEGINNING :
+			vAlign = "SWT.BEGINNING";
+			break;
+		case SWT.TOP :
+			vAlign = "SWT.TOP";
+			break;
+		case SWT.END :
+			vAlign = "SWT.END";
+			break;
+		case END :
+			vAlign = "GridData.END";
+			break;
+		case SWT.BOTTOM :
+			vAlign = "SWT.BOTTOM";
+			break;
+		case SWT.CENTER :
+			vAlign = "SWT.CENTER";
+			break;
+		case CENTER :
+			vAlign = "GridData.CENTER";
+			break;
+		default :
+			vAlign = "Undefined " + verticalAlignment;
+			break;
+		}
+		String string = getName() + " {";
+		string += "horizontalAlignment=" + hAlign + " ";
+		if (horizontalIndent != 0) {
+			string += "horizontalIndent=" + horizontalIndent + " ";
+		}
+		if (horizontalSpan != 1) {
+			string += "horizontalSpan=" + horizontalSpan + " ";
+		}
+		if (grabExcessHorizontalSpace) {
+			string += "grabExcessHorizontalSpace=" + grabExcessHorizontalSpace + " ";
+		}
+		if (widthHint != SWT.DEFAULT) {
+			string += "widthHint=" + widthHint + " ";
+		}
+		if (minimumWidth != 0) {
+			string += "minimumWidth=" + minimumWidth + " ";
+		}
+		string += "verticalAlignment=" + vAlign + " ";
+		if (verticalIndent != 0) {
+			string += "verticalIndent=" + verticalIndent + " ";
+		}
+		if (verticalSpan != 1) {
+			string += "verticalSpan=" + verticalSpan + " ";
+		}
+		if (grabExcessVerticalSpace) {
+			string += "grabExcessVerticalSpace=" + grabExcessVerticalSpace + " ";
+		}
+		if (heightHint != SWT.DEFAULT) {
+			string += "heightHint=" + heightHint + " ";
+		}
+		if (minimumHeight != 0) {
+			string += "minimumHeight=" + minimumHeight + " ";
+		}
+		if (exclude) {
+			string += "exclude=" + exclude + " ";
+		}
+		string = string.trim();
+		string += "}";
+		return string;
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/layout/grid/GridLayout2.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/layout/grid/GridLayout2.java
index 130a72dca..d8f241056 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/layout/grid/GridLayout2.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/layout/grid/GridLayout2.java
@@ -57,895 +57,895 @@
  * @coverage rcp.model.layout.GridLayout.copy
  */
 public final class GridLayout2 extends Layout {
-  /**
-   * numColumns specifies the number of cell columns in the layout. If numColumns has a value less
-   * than 1, the layout will not set the size and position of any controls.
-   *
-   * The default value is 1.
-   */
-  public int numColumns = 1;
-  /**
-   * makeColumnsEqualWidth specifies whether all columns in the layout will be forced to have the
-   * same width.
-   *
-   * The default value is false.
-   */
-  public boolean makeColumnsEqualWidth = false;
-  /**
-   * marginWidth specifies the number of pixels of horizontal margin that will be placed along the
-   * left and right edges of the layout.
-   *
-   * The default value is 5.
-   */
-  public int marginWidth = 5;
-  /**
-   * marginHeight specifies the number of pixels of vertical margin that will be placed along the
-   * top and bottom edges of the layout.
-   *
-   * The default value is 5.
-   */
-  public int marginHeight = 5;
-  /**
-   * marginLeft specifies the number of pixels of horizontal margin that will be placed along the
-   * left edge of the layout.
-   *
-   * The default value is 0.
-   *
-   * @since 3.1
-   */
-  public int marginLeft = 0;
-  /**
-   * marginTop specifies the number of pixels of vertical margin that will be placed along the top
-   * edge of the layout.
-   *
-   * The default value is 0.
-   *
-   * @since 3.1
-   */
-  public int marginTop = 0;
-  /**
-   * marginRight specifies the number of pixels of horizontal margin that will be placed along the
-   * right edge of the layout.
-   *
-   * The default value is 0.
-   *
-   * @since 3.1
-   */
-  public int marginRight = 0;
-  /**
-   * marginBottom specifies the number of pixels of vertical margin that will be placed along the
-   * bottom edge of the layout.
-   *
-   * The default value is 0.
-   *
-   * @since 3.1
-   */
-  public int marginBottom = 0;
-  /**
-   * horizontalSpacing specifies the number of pixels between the right edge of one cell and the
-   * left edge of its neighbouring cell to the right.
-   *
-   * The default value is 5.
-   */
-  public int horizontalSpacing = 5;
-  /**
-   * verticalSpacing specifies the number of pixels between the bottom edge of one cell and the top
-   * edge of its neighbouring cell underneath.
-   *
-   * The default value is 5.
-   */
-  public int verticalSpacing = 5;
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Designer information
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  int[] m_columnOrigins;
-  int[] m_columnWidths;
-  int[] m_rowOrigins;
-  int[] m_rowHeights;
-  Map<Control, Point> m_controlToXY = Maps.newHashMap();
+	/**
+	 * numColumns specifies the number of cell columns in the layout. If numColumns has a value less
+	 * than 1, the layout will not set the size and position of any controls.
+	 *
+	 * The default value is 1.
+	 */
+	public int numColumns = 1;
+	/**
+	 * makeColumnsEqualWidth specifies whether all columns in the layout will be forced to have the
+	 * same width.
+	 *
+	 * The default value is false.
+	 */
+	public boolean makeColumnsEqualWidth = false;
+	/**
+	 * marginWidth specifies the number of pixels of horizontal margin that will be placed along the
+	 * left and right edges of the layout.
+	 *
+	 * The default value is 5.
+	 */
+	public int marginWidth = 5;
+	/**
+	 * marginHeight specifies the number of pixels of vertical margin that will be placed along the
+	 * top and bottom edges of the layout.
+	 *
+	 * The default value is 5.
+	 */
+	public int marginHeight = 5;
+	/**
+	 * marginLeft specifies the number of pixels of horizontal margin that will be placed along the
+	 * left edge of the layout.
+	 *
+	 * The default value is 0.
+	 *
+	 * @since 3.1
+	 */
+	public int marginLeft = 0;
+	/**
+	 * marginTop specifies the number of pixels of vertical margin that will be placed along the top
+	 * edge of the layout.
+	 *
+	 * The default value is 0.
+	 *
+	 * @since 3.1
+	 */
+	public int marginTop = 0;
+	/**
+	 * marginRight specifies the number of pixels of horizontal margin that will be placed along the
+	 * right edge of the layout.
+	 *
+	 * The default value is 0.
+	 *
+	 * @since 3.1
+	 */
+	public int marginRight = 0;
+	/**
+	 * marginBottom specifies the number of pixels of vertical margin that will be placed along the
+	 * bottom edge of the layout.
+	 *
+	 * The default value is 0.
+	 *
+	 * @since 3.1
+	 */
+	public int marginBottom = 0;
+	/**
+	 * horizontalSpacing specifies the number of pixels between the right edge of one cell and the
+	 * left edge of its neighbouring cell to the right.
+	 *
+	 * The default value is 5.
+	 */
+	public int horizontalSpacing = 5;
+	/**
+	 * verticalSpacing specifies the number of pixels between the bottom edge of one cell and the top
+	 * edge of its neighbouring cell underneath.
+	 *
+	 * The default value is 5.
+	 */
+	public int verticalSpacing = 5;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Designer information
+	//
+	////////////////////////////////////////////////////////////////////////////
+	int[] m_columnOrigins;
+	int[] m_columnWidths;
+	int[] m_rowOrigins;
+	int[] m_rowHeights;
+	Map<Control, Point> m_controlToXY = Maps.newHashMap();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Constructs a new instance of this class.
-   */
-  public GridLayout2() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Constructs a new instance of this class.
+	 */
+	public GridLayout2() {
+	}
 
-  /**
-   * Constructs a new instance of this class given the number of columns, and whether or not the
-   * columns should be forced to have the same width. If numColumns has a value less than 1, the
-   * layout will not set the size and position of any controls.
-   *
-   * @param numColumns
-   *          the number of columns in the grid
-   * @param makeColumnsEqualWidth
-   *          whether or not the columns will have equal width
-   *
-   * @since 2.0
-   */
-  public GridLayout2(int numColumns, boolean makeColumnsEqualWidth) {
-    this.numColumns = numColumns;
-    this.makeColumnsEqualWidth = makeColumnsEqualWidth;
-  }
+	/**
+	 * Constructs a new instance of this class given the number of columns, and whether or not the
+	 * columns should be forced to have the same width. If numColumns has a value less than 1, the
+	 * layout will not set the size and position of any controls.
+	 *
+	 * @param numColumns
+	 *          the number of columns in the grid
+	 * @param makeColumnsEqualWidth
+	 *          whether or not the columns will have equal width
+	 *
+	 * @since 2.0
+	 */
+	public GridLayout2(int numColumns, boolean makeColumnsEqualWidth) {
+		this.numColumns = numColumns;
+		this.makeColumnsEqualWidth = makeColumnsEqualWidth;
+	}
 
-  @Override
-  protected Point computeSize(Composite composite, int wHint, int hHint, boolean flushCache) {
-    Point size = layout(composite, false, 0, 0, wHint, hHint, flushCache);
-    if (wHint != SWT.DEFAULT) {
-      size.x = wHint;
-    }
-    if (hHint != SWT.DEFAULT) {
-      size.y = hHint;
-    }
-    return size;
-  }
+	@Override
+	protected Point computeSize(Composite composite, int wHint, int hHint, boolean flushCache) {
+		Point size = layout(composite, false, 0, 0, wHint, hHint, flushCache);
+		if (wHint != SWT.DEFAULT) {
+			size.x = wHint;
+		}
+		if (hHint != SWT.DEFAULT) {
+			size.y = hHint;
+		}
+		return size;
+	}
 
-  @Override
-  protected boolean flushCache(Control control) {
-    Object data = control.getLayoutData();
-    if (data != null) {
-      ((GridData2) data).flushCache();
-    }
-    return true;
-  }
+	@Override
+	protected boolean flushCache(Control control) {
+		Object data = control.getLayoutData();
+		if (data != null) {
+			((GridData2) data).flushCache();
+		}
+		return true;
+	}
 
-  GridData2 getData(Control[][] grid,
-      int row,
-      int column,
-      int rowCount,
-      int columnCount,
-      boolean first) {
-    Control control = grid[row][column];
-    if (control != null) {
-      GridData2 data = getLayoutData2(control);
-      int hSpan = Math.max(1, Math.min(data.horizontalSpan, columnCount));
-      int vSpan = Math.max(1, data.verticalSpan);
-      int i = first ? row + vSpan - 1 : row - vSpan + 1;
-      int j = first ? column + hSpan - 1 : column - hSpan + 1;
-      if (0 <= i && i < rowCount) {
-        if (0 <= j && j < columnCount) {
-          if (control == grid[i][j]) {
-            return data;
-          }
-        }
-      }
-    }
-    return null;
-  }
+	GridData2 getData(Control[][] grid,
+			int row,
+			int column,
+			int rowCount,
+			int columnCount,
+			boolean first) {
+		Control control = grid[row][column];
+		if (control != null) {
+			GridData2 data = getLayoutData2(control);
+			int hSpan = Math.max(1, Math.min(data.horizontalSpan, columnCount));
+			int vSpan = Math.max(1, data.verticalSpan);
+			int i = first ? row + vSpan - 1 : row - vSpan + 1;
+			int j = first ? column + hSpan - 1 : column - hSpan + 1;
+			if (0 <= i && i < rowCount) {
+				if (0 <= j && j < columnCount) {
+					if (control == grid[i][j]) {
+						return data;
+					}
+				}
+			}
+		}
+		return null;
+	}
 
-  @Override
-  protected void layout(Composite composite, boolean flushCache) {
-    Rectangle rect = composite.getClientArea();
-    layout(composite, true, rect.x, rect.y, rect.width, rect.height, flushCache);
-  }
+	@Override
+	protected void layout(Composite composite, boolean flushCache) {
+		Rectangle rect = composite.getClientArea();
+		layout(composite, true, rect.x, rect.y, rect.width, rect.height, flushCache);
+	}
 
-  public static String identityToString(Object object) {
-    return object.getClass().getName() + "@" + Integer.toHexString(System.identityHashCode(object));
-  }
+	public static String identityToString(Object object) {
+		return object.getClass().getName() + "@" + Integer.toHexString(System.identityHashCode(object));
+	}
 
-  Point layout(Composite composite,
-      boolean move,
-      int x,
-      int y,
-      int width,
-      int height,
-      boolean flushCache) {
-    if (numColumns < 1) {
-      return new Point(marginLeft + marginWidth * 2 + marginRight, marginTop
-          + marginHeight
-          * 2
-          + marginBottom);
-    }
-    Control[] children = composite.getChildren();
-    int count = 0;
-    for (int i = 0; i < children.length; i++) {
-      Control control = children[i];
-      GridData2 data = getLayoutData2(control);
-      if (data == null || !data.exclude) {
-        children[count++] = children[i];
-      }
-    }
-    if (count == 0) {
-      if (move) {
-        m_columnOrigins = new int[0];
-        m_columnWidths = new int[0];
-        m_rowOrigins = new int[0];
-        m_rowHeights = new int[0];
-      }
-      return new Point(marginLeft + marginWidth * 2 + marginRight, marginTop
-          + marginHeight
-          * 2
-          + marginBottom);
-    }
-    for (int i = 0; i < count; i++) {
-      Control child = children[i];
-      GridData2 data = getLayoutData2(child);
-      if (flushCache) {
-        data.flushCache();
-      }
-      data.computeSize(child, data.widthHint, data.heightHint, flushCache);
-      if (data.grabExcessHorizontalSpace && data.minimumWidth > 0) {
-        if (data.cacheWidth < data.minimumWidth) {
-          int trim = 0;
-          //TEMPORARY CODE
-          if (child instanceof Scrollable) {
-            Rectangle rect = ((Scrollable) child).computeTrim(0, 0, 0, 0);
-            trim = rect.width;
-          } else {
-            trim = child.getBorderWidth() * 2;
-          }
-          data.cacheWidth = data.cacheHeight = SWT.DEFAULT;
-          data.computeSize(child, Math.max(0, data.minimumWidth - trim), data.heightHint, false);
-        }
-      }
-      if (data.grabExcessVerticalSpace && data.minimumHeight > 0) {
-        data.cacheHeight = Math.max(data.cacheHeight, data.minimumHeight);
-      }
-    }
-    /* Build the grid */
-    int row = 0, column = 0, rowCount = 0, columnCount = numColumns;
-    Control[][] grid = new Control[4][columnCount];
-    for (int i = 0; i < count; i++) {
-      Control child = children[i];
-      GridData2 data = getLayoutData2(child);
-      int hSpan = Math.max(1, Math.min(data.horizontalSpan, columnCount));
-      int vSpan = Math.max(1, data.verticalSpan);
-      while (true) {
-        int lastRow = row + vSpan;
-        if (lastRow >= grid.length) {
-          Control[][] newGrid = new Control[lastRow + 4][columnCount];
-          System.arraycopy(grid, 0, newGrid, 0, grid.length);
-          grid = newGrid;
-        }
-        if (grid[row] == null) {
-          grid[row] = new Control[columnCount];
-        }
-        while (column < columnCount && grid[row][column] != null) {
-          column++;
-        }
-        int endCount = column + hSpan;
-        if (endCount <= columnCount) {
-          int index = column;
-          while (index < endCount && grid[row][index] == null) {
-            index++;
-          }
-          if (index == endCount) {
-            break;
-          }
-          column = index;
-        }
-        if (column + hSpan >= columnCount) {
-          column = 0;
-          row++;
-        }
-      }
-      for (int j = 0; j < vSpan; j++) {
-        if (grid[row + j] == null) {
-          grid[row + j] = new Control[columnCount];
-        }
-        for (int k = 0; k < hSpan; k++) {
-          grid[row + j][column + k] = child;
-        }
-      }
-      rowCount = Math.max(rowCount, row + vSpan);
-      column += hSpan;
-    }
-    /* Column widths */
-    int availableWidth =
-        width
-            - horizontalSpacing
-            * (columnCount - 1)
-            - (marginLeft + marginWidth * 2 + marginRight);
-    int expandCount = 0;
-    int[] widths = new int[columnCount];
-    if (move) {
-      m_columnWidths = widths;
-    }
-    int[] minWidths = new int[columnCount];
-    boolean[] expandColumn = new boolean[columnCount];
-    for (int j = 0; j < columnCount; j++) {
-      for (int i = 0; i < rowCount; i++) {
-        GridData2 data = getData(grid, i, j, rowCount, columnCount, true);
-        if (data != null) {
-          int hSpan = Math.max(1, Math.min(data.horizontalSpan, columnCount));
-          if (hSpan == 1) {
-            int w = data.cacheWidth + data.horizontalIndent;
-            widths[j] = Math.max(widths[j], w);
-            if (data.grabExcessHorizontalSpace) {
-              if (!expandColumn[j]) {
-                expandCount++;
-              }
-              expandColumn[j] = true;
-            }
-            if (!data.grabExcessHorizontalSpace || data.minimumWidth != 0) {
-              w =
-                  !data.grabExcessHorizontalSpace || data.minimumWidth == SWT.DEFAULT
-                      ? data.cacheWidth
-                      : data.minimumWidth;
-              w += data.horizontalIndent;
-              minWidths[j] = Math.max(minWidths[j], w);
-            }
-          }
-        }
-      }
-      for (int i = 0; i < rowCount; i++) {
-        GridData2 data = getData(grid, i, j, rowCount, columnCount, false);
-        if (data != null) {
-          int hSpan = Math.max(1, Math.min(data.horizontalSpan, columnCount));
-          if (hSpan > 1) {
-            int spanWidth = 0, spanMinWidth = 0, spanExpandCount = 0;
-            for (int k = 0; k < hSpan; k++) {
-              spanWidth += widths[j - k];
-              spanMinWidth += minWidths[j - k];
-              if (expandColumn[j - k]) {
-                spanExpandCount++;
-              }
-            }
-            if (data.grabExcessHorizontalSpace && spanExpandCount == 0) {
-              expandCount++;
-              expandColumn[j] = true;
-            }
-            int w =
-                data.cacheWidth
-                    + data.horizontalIndent
-                    - spanWidth
-                    - (hSpan - 1)
-                    * horizontalSpacing;
-            if (w > 0) {
-              if (makeColumnsEqualWidth) {
-                int equalWidth = (w + spanWidth) / hSpan;
-                int remainder = (w + spanWidth) % hSpan, last = -1;
-                for (int k = 0; k < hSpan; k++) {
-                  widths[last = j - k] = Math.max(equalWidth, widths[j - k]);
-                }
-                if (last > -1) {
-                  widths[last] += remainder;
-                }
-              } else {
-                if (spanExpandCount == 0) {
-                  widths[j] += w;
-                } else {
-                  int delta = w / spanExpandCount;
-                  int remainder = w % spanExpandCount, last = -1;
-                  for (int k = 0; k < hSpan; k++) {
-                    if (expandColumn[j - k]) {
-                      widths[last = j - k] += delta;
-                    }
-                  }
-                  if (last > -1) {
-                    widths[last] += remainder;
-                  }
-                }
-              }
-            }
-            if (!data.grabExcessHorizontalSpace || data.minimumWidth != 0) {
-              w =
-                  !data.grabExcessHorizontalSpace || data.minimumWidth == SWT.DEFAULT
-                      ? data.cacheWidth
-                      : data.minimumWidth;
-              w += data.horizontalIndent - spanMinWidth - (hSpan - 1) * horizontalSpacing;
-              if (w > 0) {
-                if (spanExpandCount == 0) {
-                  minWidths[j] += w;
-                } else {
-                  int delta = w / spanExpandCount;
-                  int remainder = w % spanExpandCount, last = -1;
-                  for (int k = 0; k < hSpan; k++) {
-                    if (expandColumn[j - k]) {
-                      minWidths[last = j - k] += delta;
-                    }
-                  }
-                  if (last > -1) {
-                    minWidths[last] += remainder;
-                  }
-                }
-              }
-            }
-          }
-        }
-      }
-    }
-    if (makeColumnsEqualWidth) {
-      int minColumnWidth = 0;
-      int columnWidth = 0;
-      for (int i = 0; i < columnCount; i++) {
-        minColumnWidth = Math.max(minColumnWidth, minWidths[i]);
-        columnWidth = Math.max(columnWidth, widths[i]);
-      }
-      columnWidth =
-          width == SWT.DEFAULT || expandCount == 0 ? columnWidth : Math.max(
-              minColumnWidth,
-              availableWidth / columnCount);
-      for (int i = 0; i < columnCount; i++) {
-        expandColumn[i] = expandCount > 0;
-        widths[i] = columnWidth;
-      }
-    } else {
-      if (width != SWT.DEFAULT && expandCount > 0) {
-        int totalWidth = 0;
-        for (int i = 0; i < columnCount; i++) {
-          totalWidth += widths[i];
-        }
-        int c = expandCount;
-        int delta = (availableWidth - totalWidth) / c;
-        int remainder = (availableWidth - totalWidth) % c;
-        int last = -1;
-        while (totalWidth != availableWidth) {
-          for (int j = 0; j < columnCount; j++) {
-            if (expandColumn[j]) {
-              if (widths[j] + delta > minWidths[j]) {
-                widths[last = j] = widths[j] + delta;
-              } else {
-                widths[j] = minWidths[j];
-                expandColumn[j] = false;
-                c--;
-              }
-            }
-          }
-          if (last > -1) {
-            widths[last] += remainder;
-          }
-          for (int j = 0; j < columnCount; j++) {
-            for (int i = 0; i < rowCount; i++) {
-              GridData2 data = getData(grid, i, j, rowCount, columnCount, false);
-              if (data != null) {
-                int hSpan = Math.max(1, Math.min(data.horizontalSpan, columnCount));
-                if (hSpan > 1) {
-                  if (!data.grabExcessHorizontalSpace || data.minimumWidth != 0) {
-                    int spanWidth = 0, spanExpandCount = 0;
-                    for (int k = 0; k < hSpan; k++) {
-                      spanWidth += widths[j - k];
-                      if (expandColumn[j - k]) {
-                        spanExpandCount++;
-                      }
-                    }
-                    int w =
-                        !data.grabExcessHorizontalSpace || data.minimumWidth == SWT.DEFAULT
-                            ? data.cacheWidth
-                            : data.minimumWidth;
-                    w += data.horizontalIndent - spanWidth - (hSpan - 1) * horizontalSpacing;
-                    if (w > 0) {
-                      if (spanExpandCount == 0) {
-                        widths[j] += w;
-                      } else {
-                        int delta2 = w / spanExpandCount;
-                        int remainder2 = w % spanExpandCount, last2 = -1;
-                        for (int k = 0; k < hSpan; k++) {
-                          if (expandColumn[j - k]) {
-                            widths[last2 = j - k] += delta2;
-                          }
-                        }
-                        if (last2 > -1) {
-                          widths[last2] += remainder2;
-                        }
-                      }
-                    }
-                  }
-                }
-              }
-            }
-          }
-          if (c == 0) {
-            break;
-          }
-          totalWidth = 0;
-          for (int i = 0; i < columnCount; i++) {
-            totalWidth += widths[i];
-          }
-          delta = (availableWidth - totalWidth) / c;
-          remainder = (availableWidth - totalWidth) % c;
-          last = -1;
-        }
-      }
-    }
-    /* Wrapping */
-    GridData2[] flush = null;
-    int flushLength = 0;
-    if (width != SWT.DEFAULT) {
-      for (int j = 0; j < columnCount; j++) {
-        for (int i = 0; i < rowCount; i++) {
-          GridData2 data = getData(grid, i, j, rowCount, columnCount, false);
-          if (data != null) {
-            if (data.heightHint == SWT.DEFAULT) {
-              Control child = grid[i][j];
-              //TEMPORARY CODE
-              int hSpan = Math.max(1, Math.min(data.horizontalSpan, columnCount));
-              int currentWidth = 0;
-              for (int k = 0; k < hSpan; k++) {
-                currentWidth += widths[j - k];
-              }
-              currentWidth += (hSpan - 1) * horizontalSpacing - data.horizontalIndent;
-              if (currentWidth != data.cacheWidth
-                  && data.horizontalAlignment == SWT.FILL
-                  || data.cacheWidth > currentWidth) {
-                int trim = 0;
-                if (child instanceof Scrollable) {
-                  Rectangle rect = ((Scrollable) child).computeTrim(0, 0, 0, 0);
-                  trim = rect.width;
-                } else {
-                  trim = child.getBorderWidth() * 2;
-                }
-                data.cacheWidth = data.cacheHeight = SWT.DEFAULT;
-                data.computeSize(child, Math.max(0, currentWidth - trim), data.heightHint, false);
-                if (data.grabExcessVerticalSpace && data.minimumHeight > 0) {
-                  data.cacheHeight = Math.max(data.cacheHeight, data.minimumHeight);
-                }
-                if (flush == null) {
-                  flush = new GridData2[count];
-                }
-                flush[flushLength++] = data;
-              }
-            }
-          }
-        }
-      }
-    }
-    /* Row heights */
-    int availableHeight =
-        height - verticalSpacing * (rowCount - 1) - (marginTop + marginHeight * 2 + marginBottom);
-    expandCount = 0;
-    int[] heights = new int[rowCount];
-    if (move) {
-      m_rowHeights = heights;
-    }
-    int[] minHeights = new int[rowCount];
-    boolean[] expandRow = new boolean[rowCount];
-    for (int i = 0; i < rowCount; i++) {
-      for (int j = 0; j < columnCount; j++) {
-        GridData2 data = getData(grid, i, j, rowCount, columnCount, true);
-        if (data != null) {
-          int vSpan = Math.max(1, Math.min(data.verticalSpan, rowCount));
-          if (vSpan == 1) {
-            int h = data.cacheHeight + data.verticalIndent;
-            heights[i] = Math.max(heights[i], h);
-            if (data.grabExcessVerticalSpace) {
-              if (!expandRow[i]) {
-                expandCount++;
-              }
-              expandRow[i] = true;
-            }
-            if (!data.grabExcessVerticalSpace || data.minimumHeight != 0) {
-              h =
-                  !data.grabExcessVerticalSpace || data.minimumHeight == SWT.DEFAULT
-                      ? data.cacheHeight
-                      : data.minimumHeight;
-              h += data.verticalIndent;
-              minHeights[i] = Math.max(minHeights[i], h);
-            }
-          }
-        }
-      }
-      for (int j = 0; j < columnCount; j++) {
-        GridData2 data = getData(grid, i, j, rowCount, columnCount, false);
-        if (data != null) {
-          int vSpan = Math.max(1, Math.min(data.verticalSpan, rowCount));
-          if (vSpan > 1) {
-            int spanHeight = 0, spanMinHeight = 0, spanExpandCount = 0;
-            for (int k = 0; k < vSpan; k++) {
-              spanHeight += heights[i - k];
-              spanMinHeight += minHeights[i - k];
-              if (expandRow[i - k]) {
-                spanExpandCount++;
-              }
-            }
-            if (data.grabExcessVerticalSpace && spanExpandCount == 0) {
-              expandCount++;
-              expandRow[i] = true;
-            }
-            int h =
-                data.cacheHeight + data.verticalIndent - spanHeight - (vSpan - 1) * verticalSpacing;
-            if (h > 0) {
-              if (spanExpandCount == 0) {
-                heights[i] += h;
-              } else {
-                int delta = h / spanExpandCount;
-                int remainder = h % spanExpandCount, last = -1;
-                for (int k = 0; k < vSpan; k++) {
-                  if (expandRow[i - k]) {
-                    heights[last = i - k] += delta;
-                  }
-                }
-                if (last > -1) {
-                  heights[last] += remainder;
-                }
-              }
-            }
-            if (!data.grabExcessVerticalSpace || data.minimumHeight != 0) {
-              h =
-                  !data.grabExcessVerticalSpace || data.minimumHeight == SWT.DEFAULT
-                      ? data.cacheHeight
-                      : data.minimumHeight;
-              h += data.verticalIndent - spanMinHeight - (vSpan - 1) * verticalSpacing;
-              if (h > 0) {
-                if (spanExpandCount == 0) {
-                  minHeights[i] += h;
-                } else {
-                  int delta = h / spanExpandCount;
-                  int remainder = h % spanExpandCount, last = -1;
-                  for (int k = 0; k < vSpan; k++) {
-                    if (expandRow[i - k]) {
-                      minHeights[last = i - k] += delta;
-                    }
-                  }
-                  if (last > -1) {
-                    minHeights[last] += remainder;
-                  }
-                }
-              }
-            }
-          }
-        }
-      }
-    }
-    if (height != SWT.DEFAULT && expandCount > 0) {
-      int totalHeight = 0;
-      for (int i = 0; i < rowCount; i++) {
-        totalHeight += heights[i];
-      }
-      int c = expandCount;
-      int delta = (availableHeight - totalHeight) / c;
-      int remainder = (availableHeight - totalHeight) % c;
-      int last = -1;
-      while (totalHeight != availableHeight) {
-        for (int i = 0; i < rowCount; i++) {
-          if (expandRow[i]) {
-            if (heights[i] + delta > minHeights[i]) {
-              heights[last = i] = heights[i] + delta;
-            } else {
-              heights[i] = minHeights[i];
-              expandRow[i] = false;
-              c--;
-            }
-          }
-        }
-        if (last > -1) {
-          heights[last] += remainder;
-        }
-        for (int i = 0; i < rowCount; i++) {
-          for (int j = 0; j < columnCount; j++) {
-            GridData2 data = getData(grid, i, j, rowCount, columnCount, false);
-            if (data != null) {
-              int vSpan = Math.max(1, Math.min(data.verticalSpan, rowCount));
-              if (vSpan > 1) {
-                if (!data.grabExcessVerticalSpace || data.minimumHeight != 0) {
-                  int spanHeight = 0, spanExpandCount = 0;
-                  for (int k = 0; k < vSpan; k++) {
-                    spanHeight += heights[i - k];
-                    if (expandRow[i - k]) {
-                      spanExpandCount++;
-                    }
-                  }
-                  int h =
-                      !data.grabExcessVerticalSpace || data.minimumHeight == SWT.DEFAULT
-                          ? data.cacheHeight
-                          : data.minimumHeight;
-                  h += data.verticalIndent - spanHeight - (vSpan - 1) * verticalSpacing;
-                  if (h > 0) {
-                    if (spanExpandCount == 0) {
-                      heights[i] += h;
-                    } else {
-                      int delta2 = h / spanExpandCount;
-                      int remainder2 = h % spanExpandCount, last2 = -1;
-                      for (int k = 0; k < vSpan; k++) {
-                        if (expandRow[i - k]) {
-                          heights[last2 = i - k] += delta2;
-                        }
-                      }
-                      if (last2 > -1) {
-                        heights[last2] += remainder2;
-                      }
-                    }
-                  }
-                }
-              }
-            }
-          }
-        }
-        if (c == 0) {
-          break;
-        }
-        totalHeight = 0;
-        for (int i = 0; i < rowCount; i++) {
-          totalHeight += heights[i];
-        }
-        delta = (availableHeight - totalHeight) / c;
-        remainder = (availableHeight - totalHeight) % c;
-        last = -1;
-      }
-    }
-    /* Position the controls */
-    if (move) {
-      m_columnOrigins = new int[columnCount];
-      m_rowOrigins = new int[rowCount];
-      int gridY = y + marginTop + marginHeight;
-      for (int i = 0; i < rowCount; i++) {
-        int gridX = x + marginLeft + marginWidth;
-        for (int j = 0; j < columnCount; j++) {
-          m_columnOrigins[j] = gridX;
-          m_rowOrigins[i] = gridY;
-          GridData2 data = getData(grid, i, j, rowCount, columnCount, true);
-          if (data != null) {
-            int hSpan = Math.max(1, Math.min(data.horizontalSpan, columnCount));
-            int vSpan = Math.max(1, data.verticalSpan);
-            int cellWidth = 0, cellHeight = 0;
-            for (int k = 0; k < hSpan; k++) {
-              cellWidth += widths[j + k];
-            }
-            for (int k = 0; k < vSpan; k++) {
-              cellHeight += heights[i + k];
-            }
-            cellWidth += horizontalSpacing * (hSpan - 1);
-            int childX = gridX + data.horizontalIndent;
-            int childWidth = Math.min(data.cacheWidth, cellWidth);
-            switch (data.horizontalAlignment) {
-              case SWT.CENTER :
-              case GridData2.CENTER :
-                childX += Math.max(0, (cellWidth - data.horizontalIndent - childWidth) / 2);
-                break;
-              case SWT.RIGHT :
-              case SWT.END :
-              case GridData2.END :
-                childX += Math.max(0, cellWidth - data.horizontalIndent - childWidth);
-                break;
-              case SWT.FILL :
-                childWidth = cellWidth - data.horizontalIndent;
-                break;
-            }
-            cellHeight += verticalSpacing * (vSpan - 1);
-            int childY = gridY + data.verticalIndent;
-            int childHeight = Math.min(data.cacheHeight, cellHeight);
-            switch (data.verticalAlignment) {
-              case SWT.CENTER :
-              case GridData2.CENTER :
-                childY += Math.max(0, (cellHeight - data.verticalIndent - childHeight) / 2);
-                break;
-              case SWT.BOTTOM :
-              case SWT.END :
-              case GridData2.END :
-                childY += Math.max(0, cellHeight - data.verticalIndent - childHeight);
-                break;
-              case SWT.FILL :
-                childHeight = cellHeight - data.verticalIndent;
-                break;
-            }
-            Control child = grid[i][j];
-            if (child != null) {
-              child.setBounds(childX, childY, childWidth, childHeight);
-              m_controlToXY.put(child, new Point(j, i));
-            }
-          }
-          gridX += widths[j] + horizontalSpacing;
-        }
-        gridY += heights[i] + verticalSpacing;
-      }
-    }
-    // clean up cache
-    if (flush != null) {
-      for (int i = 0; i < flushLength; i++) {
-        flush[i].cacheWidth = flush[i].cacheHeight = -1;
-      }
-    }
-    int totalDefaultWidth = 0;
-    int totalDefaultHeight = 0;
-    for (int i = 0; i < columnCount; i++) {
-      totalDefaultWidth += widths[i];
-    }
-    for (int i = 0; i < rowCount; i++) {
-      totalDefaultHeight += heights[i];
-    }
-    totalDefaultWidth +=
-        horizontalSpacing * (columnCount - 1) + marginLeft + marginWidth * 2 + marginRight;
-    totalDefaultHeight +=
-        verticalSpacing * (rowCount - 1) + marginTop + marginHeight * 2 + marginBottom;
-    return new Point(totalDefaultWidth, totalDefaultHeight);
-  }
+	Point layout(Composite composite,
+			boolean move,
+			int x,
+			int y,
+			int width,
+			int height,
+			boolean flushCache) {
+		if (numColumns < 1) {
+			return new Point(marginLeft + marginWidth * 2 + marginRight, marginTop
+					+ marginHeight
+					* 2
+					+ marginBottom);
+		}
+		Control[] children = composite.getChildren();
+		int count = 0;
+		for (int i = 0; i < children.length; i++) {
+			Control control = children[i];
+			GridData2 data = getLayoutData2(control);
+			if (data == null || !data.exclude) {
+				children[count++] = children[i];
+			}
+		}
+		if (count == 0) {
+			if (move) {
+				m_columnOrigins = new int[0];
+				m_columnWidths = new int[0];
+				m_rowOrigins = new int[0];
+				m_rowHeights = new int[0];
+			}
+			return new Point(marginLeft + marginWidth * 2 + marginRight, marginTop
+					+ marginHeight
+					* 2
+					+ marginBottom);
+		}
+		for (int i = 0; i < count; i++) {
+			Control child = children[i];
+			GridData2 data = getLayoutData2(child);
+			if (flushCache) {
+				data.flushCache();
+			}
+			data.computeSize(child, data.widthHint, data.heightHint, flushCache);
+			if (data.grabExcessHorizontalSpace && data.minimumWidth > 0) {
+				if (data.cacheWidth < data.minimumWidth) {
+					int trim = 0;
+					//TEMPORARY CODE
+					if (child instanceof Scrollable) {
+						Rectangle rect = ((Scrollable) child).computeTrim(0, 0, 0, 0);
+						trim = rect.width;
+					} else {
+						trim = child.getBorderWidth() * 2;
+					}
+					data.cacheWidth = data.cacheHeight = SWT.DEFAULT;
+					data.computeSize(child, Math.max(0, data.minimumWidth - trim), data.heightHint, false);
+				}
+			}
+			if (data.grabExcessVerticalSpace && data.minimumHeight > 0) {
+				data.cacheHeight = Math.max(data.cacheHeight, data.minimumHeight);
+			}
+		}
+		/* Build the grid */
+		int row = 0, column = 0, rowCount = 0, columnCount = numColumns;
+		Control[][] grid = new Control[4][columnCount];
+		for (int i = 0; i < count; i++) {
+			Control child = children[i];
+			GridData2 data = getLayoutData2(child);
+			int hSpan = Math.max(1, Math.min(data.horizontalSpan, columnCount));
+			int vSpan = Math.max(1, data.verticalSpan);
+			while (true) {
+				int lastRow = row + vSpan;
+				if (lastRow >= grid.length) {
+					Control[][] newGrid = new Control[lastRow + 4][columnCount];
+					System.arraycopy(grid, 0, newGrid, 0, grid.length);
+					grid = newGrid;
+				}
+				if (grid[row] == null) {
+					grid[row] = new Control[columnCount];
+				}
+				while (column < columnCount && grid[row][column] != null) {
+					column++;
+				}
+				int endCount = column + hSpan;
+				if (endCount <= columnCount) {
+					int index = column;
+					while (index < endCount && grid[row][index] == null) {
+						index++;
+					}
+					if (index == endCount) {
+						break;
+					}
+					column = index;
+				}
+				if (column + hSpan >= columnCount) {
+					column = 0;
+					row++;
+				}
+			}
+			for (int j = 0; j < vSpan; j++) {
+				if (grid[row + j] == null) {
+					grid[row + j] = new Control[columnCount];
+				}
+				for (int k = 0; k < hSpan; k++) {
+					grid[row + j][column + k] = child;
+				}
+			}
+			rowCount = Math.max(rowCount, row + vSpan);
+			column += hSpan;
+		}
+		/* Column widths */
+		int availableWidth =
+				width
+				- horizontalSpacing
+				* (columnCount - 1)
+				- (marginLeft + marginWidth * 2 + marginRight);
+		int expandCount = 0;
+		int[] widths = new int[columnCount];
+		if (move) {
+			m_columnWidths = widths;
+		}
+		int[] minWidths = new int[columnCount];
+		boolean[] expandColumn = new boolean[columnCount];
+		for (int j = 0; j < columnCount; j++) {
+			for (int i = 0; i < rowCount; i++) {
+				GridData2 data = getData(grid, i, j, rowCount, columnCount, true);
+				if (data != null) {
+					int hSpan = Math.max(1, Math.min(data.horizontalSpan, columnCount));
+					if (hSpan == 1) {
+						int w = data.cacheWidth + data.horizontalIndent;
+						widths[j] = Math.max(widths[j], w);
+						if (data.grabExcessHorizontalSpace) {
+							if (!expandColumn[j]) {
+								expandCount++;
+							}
+							expandColumn[j] = true;
+						}
+						if (!data.grabExcessHorizontalSpace || data.minimumWidth != 0) {
+							w =
+									!data.grabExcessHorizontalSpace || data.minimumWidth == SWT.DEFAULT
+									? data.cacheWidth
+											: data.minimumWidth;
+							w += data.horizontalIndent;
+							minWidths[j] = Math.max(minWidths[j], w);
+						}
+					}
+				}
+			}
+			for (int i = 0; i < rowCount; i++) {
+				GridData2 data = getData(grid, i, j, rowCount, columnCount, false);
+				if (data != null) {
+					int hSpan = Math.max(1, Math.min(data.horizontalSpan, columnCount));
+					if (hSpan > 1) {
+						int spanWidth = 0, spanMinWidth = 0, spanExpandCount = 0;
+						for (int k = 0; k < hSpan; k++) {
+							spanWidth += widths[j - k];
+							spanMinWidth += minWidths[j - k];
+							if (expandColumn[j - k]) {
+								spanExpandCount++;
+							}
+						}
+						if (data.grabExcessHorizontalSpace && spanExpandCount == 0) {
+							expandCount++;
+							expandColumn[j] = true;
+						}
+						int w =
+								data.cacheWidth
+								+ data.horizontalIndent
+								- spanWidth
+								- (hSpan - 1)
+								* horizontalSpacing;
+						if (w > 0) {
+							if (makeColumnsEqualWidth) {
+								int equalWidth = (w + spanWidth) / hSpan;
+								int remainder = (w + spanWidth) % hSpan, last = -1;
+								for (int k = 0; k < hSpan; k++) {
+									widths[last = j - k] = Math.max(equalWidth, widths[j - k]);
+								}
+								if (last > -1) {
+									widths[last] += remainder;
+								}
+							} else {
+								if (spanExpandCount == 0) {
+									widths[j] += w;
+								} else {
+									int delta = w / spanExpandCount;
+									int remainder = w % spanExpandCount, last = -1;
+									for (int k = 0; k < hSpan; k++) {
+										if (expandColumn[j - k]) {
+											widths[last = j - k] += delta;
+										}
+									}
+									if (last > -1) {
+										widths[last] += remainder;
+									}
+								}
+							}
+						}
+						if (!data.grabExcessHorizontalSpace || data.minimumWidth != 0) {
+							w =
+									!data.grabExcessHorizontalSpace || data.minimumWidth == SWT.DEFAULT
+									? data.cacheWidth
+											: data.minimumWidth;
+							w += data.horizontalIndent - spanMinWidth - (hSpan - 1) * horizontalSpacing;
+							if (w > 0) {
+								if (spanExpandCount == 0) {
+									minWidths[j] += w;
+								} else {
+									int delta = w / spanExpandCount;
+									int remainder = w % spanExpandCount, last = -1;
+									for (int k = 0; k < hSpan; k++) {
+										if (expandColumn[j - k]) {
+											minWidths[last = j - k] += delta;
+										}
+									}
+									if (last > -1) {
+										minWidths[last] += remainder;
+									}
+								}
+							}
+						}
+					}
+				}
+			}
+		}
+		if (makeColumnsEqualWidth) {
+			int minColumnWidth = 0;
+			int columnWidth = 0;
+			for (int i = 0; i < columnCount; i++) {
+				minColumnWidth = Math.max(minColumnWidth, minWidths[i]);
+				columnWidth = Math.max(columnWidth, widths[i]);
+			}
+			columnWidth =
+					width == SWT.DEFAULT || expandCount == 0 ? columnWidth : Math.max(
+							minColumnWidth,
+							availableWidth / columnCount);
+			for (int i = 0; i < columnCount; i++) {
+				expandColumn[i] = expandCount > 0;
+				widths[i] = columnWidth;
+			}
+		} else {
+			if (width != SWT.DEFAULT && expandCount > 0) {
+				int totalWidth = 0;
+				for (int i = 0; i < columnCount; i++) {
+					totalWidth += widths[i];
+				}
+				int c = expandCount;
+				int delta = (availableWidth - totalWidth) / c;
+				int remainder = (availableWidth - totalWidth) % c;
+				int last = -1;
+				while (totalWidth != availableWidth) {
+					for (int j = 0; j < columnCount; j++) {
+						if (expandColumn[j]) {
+							if (widths[j] + delta > minWidths[j]) {
+								widths[last = j] = widths[j] + delta;
+							} else {
+								widths[j] = minWidths[j];
+								expandColumn[j] = false;
+								c--;
+							}
+						}
+					}
+					if (last > -1) {
+						widths[last] += remainder;
+					}
+					for (int j = 0; j < columnCount; j++) {
+						for (int i = 0; i < rowCount; i++) {
+							GridData2 data = getData(grid, i, j, rowCount, columnCount, false);
+							if (data != null) {
+								int hSpan = Math.max(1, Math.min(data.horizontalSpan, columnCount));
+								if (hSpan > 1) {
+									if (!data.grabExcessHorizontalSpace || data.minimumWidth != 0) {
+										int spanWidth = 0, spanExpandCount = 0;
+										for (int k = 0; k < hSpan; k++) {
+											spanWidth += widths[j - k];
+											if (expandColumn[j - k]) {
+												spanExpandCount++;
+											}
+										}
+										int w =
+												!data.grabExcessHorizontalSpace || data.minimumWidth == SWT.DEFAULT
+												? data.cacheWidth
+														: data.minimumWidth;
+										w += data.horizontalIndent - spanWidth - (hSpan - 1) * horizontalSpacing;
+										if (w > 0) {
+											if (spanExpandCount == 0) {
+												widths[j] += w;
+											} else {
+												int delta2 = w / spanExpandCount;
+												int remainder2 = w % spanExpandCount, last2 = -1;
+												for (int k = 0; k < hSpan; k++) {
+													if (expandColumn[j - k]) {
+														widths[last2 = j - k] += delta2;
+													}
+												}
+												if (last2 > -1) {
+													widths[last2] += remainder2;
+												}
+											}
+										}
+									}
+								}
+							}
+						}
+					}
+					if (c == 0) {
+						break;
+					}
+					totalWidth = 0;
+					for (int i = 0; i < columnCount; i++) {
+						totalWidth += widths[i];
+					}
+					delta = (availableWidth - totalWidth) / c;
+					remainder = (availableWidth - totalWidth) % c;
+					last = -1;
+				}
+			}
+		}
+		/* Wrapping */
+		GridData2[] flush = null;
+		int flushLength = 0;
+		if (width != SWT.DEFAULT) {
+			for (int j = 0; j < columnCount; j++) {
+				for (int i = 0; i < rowCount; i++) {
+					GridData2 data = getData(grid, i, j, rowCount, columnCount, false);
+					if (data != null) {
+						if (data.heightHint == SWT.DEFAULT) {
+							Control child = grid[i][j];
+							//TEMPORARY CODE
+							int hSpan = Math.max(1, Math.min(data.horizontalSpan, columnCount));
+							int currentWidth = 0;
+							for (int k = 0; k < hSpan; k++) {
+								currentWidth += widths[j - k];
+							}
+							currentWidth += (hSpan - 1) * horizontalSpacing - data.horizontalIndent;
+							if (currentWidth != data.cacheWidth
+									&& data.horizontalAlignment == SWT.FILL
+									|| data.cacheWidth > currentWidth) {
+								int trim = 0;
+								if (child instanceof Scrollable) {
+									Rectangle rect = ((Scrollable) child).computeTrim(0, 0, 0, 0);
+									trim = rect.width;
+								} else {
+									trim = child.getBorderWidth() * 2;
+								}
+								data.cacheWidth = data.cacheHeight = SWT.DEFAULT;
+								data.computeSize(child, Math.max(0, currentWidth - trim), data.heightHint, false);
+								if (data.grabExcessVerticalSpace && data.minimumHeight > 0) {
+									data.cacheHeight = Math.max(data.cacheHeight, data.minimumHeight);
+								}
+								if (flush == null) {
+									flush = new GridData2[count];
+								}
+								flush[flushLength++] = data;
+							}
+						}
+					}
+				}
+			}
+		}
+		/* Row heights */
+		int availableHeight =
+				height - verticalSpacing * (rowCount - 1) - (marginTop + marginHeight * 2 + marginBottom);
+		expandCount = 0;
+		int[] heights = new int[rowCount];
+		if (move) {
+			m_rowHeights = heights;
+		}
+		int[] minHeights = new int[rowCount];
+		boolean[] expandRow = new boolean[rowCount];
+		for (int i = 0; i < rowCount; i++) {
+			for (int j = 0; j < columnCount; j++) {
+				GridData2 data = getData(grid, i, j, rowCount, columnCount, true);
+				if (data != null) {
+					int vSpan = Math.max(1, Math.min(data.verticalSpan, rowCount));
+					if (vSpan == 1) {
+						int h = data.cacheHeight + data.verticalIndent;
+						heights[i] = Math.max(heights[i], h);
+						if (data.grabExcessVerticalSpace) {
+							if (!expandRow[i]) {
+								expandCount++;
+							}
+							expandRow[i] = true;
+						}
+						if (!data.grabExcessVerticalSpace || data.minimumHeight != 0) {
+							h =
+									!data.grabExcessVerticalSpace || data.minimumHeight == SWT.DEFAULT
+									? data.cacheHeight
+											: data.minimumHeight;
+							h += data.verticalIndent;
+							minHeights[i] = Math.max(minHeights[i], h);
+						}
+					}
+				}
+			}
+			for (int j = 0; j < columnCount; j++) {
+				GridData2 data = getData(grid, i, j, rowCount, columnCount, false);
+				if (data != null) {
+					int vSpan = Math.max(1, Math.min(data.verticalSpan, rowCount));
+					if (vSpan > 1) {
+						int spanHeight = 0, spanMinHeight = 0, spanExpandCount = 0;
+						for (int k = 0; k < vSpan; k++) {
+							spanHeight += heights[i - k];
+							spanMinHeight += minHeights[i - k];
+							if (expandRow[i - k]) {
+								spanExpandCount++;
+							}
+						}
+						if (data.grabExcessVerticalSpace && spanExpandCount == 0) {
+							expandCount++;
+							expandRow[i] = true;
+						}
+						int h =
+								data.cacheHeight + data.verticalIndent - spanHeight - (vSpan - 1) * verticalSpacing;
+						if (h > 0) {
+							if (spanExpandCount == 0) {
+								heights[i] += h;
+							} else {
+								int delta = h / spanExpandCount;
+								int remainder = h % spanExpandCount, last = -1;
+								for (int k = 0; k < vSpan; k++) {
+									if (expandRow[i - k]) {
+										heights[last = i - k] += delta;
+									}
+								}
+								if (last > -1) {
+									heights[last] += remainder;
+								}
+							}
+						}
+						if (!data.grabExcessVerticalSpace || data.minimumHeight != 0) {
+							h =
+									!data.grabExcessVerticalSpace || data.minimumHeight == SWT.DEFAULT
+									? data.cacheHeight
+											: data.minimumHeight;
+							h += data.verticalIndent - spanMinHeight - (vSpan - 1) * verticalSpacing;
+							if (h > 0) {
+								if (spanExpandCount == 0) {
+									minHeights[i] += h;
+								} else {
+									int delta = h / spanExpandCount;
+									int remainder = h % spanExpandCount, last = -1;
+									for (int k = 0; k < vSpan; k++) {
+										if (expandRow[i - k]) {
+											minHeights[last = i - k] += delta;
+										}
+									}
+									if (last > -1) {
+										minHeights[last] += remainder;
+									}
+								}
+							}
+						}
+					}
+				}
+			}
+		}
+		if (height != SWT.DEFAULT && expandCount > 0) {
+			int totalHeight = 0;
+			for (int i = 0; i < rowCount; i++) {
+				totalHeight += heights[i];
+			}
+			int c = expandCount;
+			int delta = (availableHeight - totalHeight) / c;
+			int remainder = (availableHeight - totalHeight) % c;
+			int last = -1;
+			while (totalHeight != availableHeight) {
+				for (int i = 0; i < rowCount; i++) {
+					if (expandRow[i]) {
+						if (heights[i] + delta > minHeights[i]) {
+							heights[last = i] = heights[i] + delta;
+						} else {
+							heights[i] = minHeights[i];
+							expandRow[i] = false;
+							c--;
+						}
+					}
+				}
+				if (last > -1) {
+					heights[last] += remainder;
+				}
+				for (int i = 0; i < rowCount; i++) {
+					for (int j = 0; j < columnCount; j++) {
+						GridData2 data = getData(grid, i, j, rowCount, columnCount, false);
+						if (data != null) {
+							int vSpan = Math.max(1, Math.min(data.verticalSpan, rowCount));
+							if (vSpan > 1) {
+								if (!data.grabExcessVerticalSpace || data.minimumHeight != 0) {
+									int spanHeight = 0, spanExpandCount = 0;
+									for (int k = 0; k < vSpan; k++) {
+										spanHeight += heights[i - k];
+										if (expandRow[i - k]) {
+											spanExpandCount++;
+										}
+									}
+									int h =
+											!data.grabExcessVerticalSpace || data.minimumHeight == SWT.DEFAULT
+											? data.cacheHeight
+													: data.minimumHeight;
+									h += data.verticalIndent - spanHeight - (vSpan - 1) * verticalSpacing;
+									if (h > 0) {
+										if (spanExpandCount == 0) {
+											heights[i] += h;
+										} else {
+											int delta2 = h / spanExpandCount;
+											int remainder2 = h % spanExpandCount, last2 = -1;
+											for (int k = 0; k < vSpan; k++) {
+												if (expandRow[i - k]) {
+													heights[last2 = i - k] += delta2;
+												}
+											}
+											if (last2 > -1) {
+												heights[last2] += remainder2;
+											}
+										}
+									}
+								}
+							}
+						}
+					}
+				}
+				if (c == 0) {
+					break;
+				}
+				totalHeight = 0;
+				for (int i = 0; i < rowCount; i++) {
+					totalHeight += heights[i];
+				}
+				delta = (availableHeight - totalHeight) / c;
+				remainder = (availableHeight - totalHeight) % c;
+				last = -1;
+			}
+		}
+		/* Position the controls */
+		if (move) {
+			m_columnOrigins = new int[columnCount];
+			m_rowOrigins = new int[rowCount];
+			int gridY = y + marginTop + marginHeight;
+			for (int i = 0; i < rowCount; i++) {
+				int gridX = x + marginLeft + marginWidth;
+				for (int j = 0; j < columnCount; j++) {
+					m_columnOrigins[j] = gridX;
+					m_rowOrigins[i] = gridY;
+					GridData2 data = getData(grid, i, j, rowCount, columnCount, true);
+					if (data != null) {
+						int hSpan = Math.max(1, Math.min(data.horizontalSpan, columnCount));
+						int vSpan = Math.max(1, data.verticalSpan);
+						int cellWidth = 0, cellHeight = 0;
+						for (int k = 0; k < hSpan; k++) {
+							cellWidth += widths[j + k];
+						}
+						for (int k = 0; k < vSpan; k++) {
+							cellHeight += heights[i + k];
+						}
+						cellWidth += horizontalSpacing * (hSpan - 1);
+						int childX = gridX + data.horizontalIndent;
+						int childWidth = Math.min(data.cacheWidth, cellWidth);
+						switch (data.horizontalAlignment) {
+						case SWT.CENTER :
+						case GridData2.CENTER :
+							childX += Math.max(0, (cellWidth - data.horizontalIndent - childWidth) / 2);
+							break;
+						case SWT.RIGHT :
+						case SWT.END :
+						case GridData2.END :
+							childX += Math.max(0, cellWidth - data.horizontalIndent - childWidth);
+							break;
+						case SWT.FILL :
+							childWidth = cellWidth - data.horizontalIndent;
+							break;
+						}
+						cellHeight += verticalSpacing * (vSpan - 1);
+						int childY = gridY + data.verticalIndent;
+						int childHeight = Math.min(data.cacheHeight, cellHeight);
+						switch (data.verticalAlignment) {
+						case SWT.CENTER :
+						case GridData2.CENTER :
+							childY += Math.max(0, (cellHeight - data.verticalIndent - childHeight) / 2);
+							break;
+						case SWT.BOTTOM :
+						case SWT.END :
+						case GridData2.END :
+							childY += Math.max(0, cellHeight - data.verticalIndent - childHeight);
+							break;
+						case SWT.FILL :
+							childHeight = cellHeight - data.verticalIndent;
+							break;
+						}
+						Control child = grid[i][j];
+						if (child != null) {
+							child.setBounds(childX, childY, childWidth, childHeight);
+							m_controlToXY.put(child, new Point(j, i));
+						}
+					}
+					gridX += widths[j] + horizontalSpacing;
+				}
+				gridY += heights[i] + verticalSpacing;
+			}
+		}
+		// clean up cache
+		if (flush != null) {
+			for (int i = 0; i < flushLength; i++) {
+				flush[i].cacheWidth = flush[i].cacheHeight = -1;
+			}
+		}
+		int totalDefaultWidth = 0;
+		int totalDefaultHeight = 0;
+		for (int i = 0; i < columnCount; i++) {
+			totalDefaultWidth += widths[i];
+		}
+		for (int i = 0; i < rowCount; i++) {
+			totalDefaultHeight += heights[i];
+		}
+		totalDefaultWidth +=
+				horizontalSpacing * (columnCount - 1) + marginLeft + marginWidth * 2 + marginRight;
+		totalDefaultHeight +=
+				verticalSpacing * (rowCount - 1) + marginTop + marginHeight * 2 + marginBottom;
+		return new Point(totalDefaultWidth, totalDefaultHeight);
+	}
 
-  String getName() {
-    String string = getClass().getName();
-    int index = string.lastIndexOf('.');
-    if (index == -1) {
-      return string;
-    }
-    return string.substring(index + 1, string.length());
-  }
+	String getName() {
+		String string = getClass().getName();
+		int index = string.lastIndexOf('.');
+		if (index == -1) {
+			return string;
+		}
+		return string.substring(index + 1, string.length());
+	}
 
-  /**
-   * Returns a string containing a concise, human-readable description of the receiver.
-   *
-   * @return a string representation of the layout
-   */
-  @Override
-  public String toString() {
-    String string = getName() + " {";
-    if (numColumns != 1) {
-      string += "numColumns=" + numColumns + " ";
-    }
-    if (makeColumnsEqualWidth) {
-      string += "makeColumnsEqualWidth=" + makeColumnsEqualWidth + " ";
-    }
-    if (marginWidth != 0) {
-      string += "marginWidth=" + marginWidth + " ";
-    }
-    if (marginHeight != 0) {
-      string += "marginHeight=" + marginHeight + " ";
-    }
-    if (marginLeft != 0) {
-      string += "marginLeft=" + marginLeft + " ";
-    }
-    if (marginRight != 0) {
-      string += "marginRight=" + marginRight + " ";
-    }
-    if (marginTop != 0) {
-      string += "marginTop=" + marginTop + " ";
-    }
-    if (marginBottom != 0) {
-      string += "marginBottom=" + marginBottom + " ";
-    }
-    if (horizontalSpacing != 0) {
-      string += "horizontalSpacing=" + horizontalSpacing + " ";
-    }
-    if (verticalSpacing != 0) {
-      string += "verticalSpacing=" + verticalSpacing + " ";
-    }
-    string = string.trim();
-    string += "}";
-    return string;
-  }
+	/**
+	 * Returns a string containing a concise, human-readable description of the receiver.
+	 *
+	 * @return a string representation of the layout
+	 */
+	@Override
+	public String toString() {
+		String string = getName() + " {";
+		if (numColumns != 1) {
+			string += "numColumns=" + numColumns + " ";
+		}
+		if (makeColumnsEqualWidth) {
+			string += "makeColumnsEqualWidth=" + makeColumnsEqualWidth + " ";
+		}
+		if (marginWidth != 0) {
+			string += "marginWidth=" + marginWidth + " ";
+		}
+		if (marginHeight != 0) {
+			string += "marginHeight=" + marginHeight + " ";
+		}
+		if (marginLeft != 0) {
+			string += "marginLeft=" + marginLeft + " ";
+		}
+		if (marginRight != 0) {
+			string += "marginRight=" + marginRight + " ";
+		}
+		if (marginTop != 0) {
+			string += "marginTop=" + marginTop + " ";
+		}
+		if (marginBottom != 0) {
+			string += "marginBottom=" + marginBottom + " ";
+		}
+		if (horizontalSpacing != 0) {
+			string += "horizontalSpacing=" + horizontalSpacing + " ";
+		}
+		if (verticalSpacing != 0) {
+			string += "verticalSpacing=" + verticalSpacing + " ";
+		}
+		string = string.trim();
+		string += "}";
+		return string;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GridData2
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static GridLayout2 replaceGridLayout(Composite composite) {
-    Layout layout = composite.getLayout();
-    GridLayout2 newGridLayout = new GridLayout2();
-    copyFields(layout, newGridLayout);
-    composite.setLayout(newGridLayout);
-    return newGridLayout;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GridData2
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static GridLayout2 replaceGridLayout(Composite composite) {
+		Layout layout = composite.getLayout();
+		GridLayout2 newGridLayout = new GridLayout2();
+		copyFields(layout, newGridLayout);
+		composite.setLayout(newGridLayout);
+		return newGridLayout;
+	}
 
-  /**
-   * @return {@link GridData2} instance bound to given {@link Control}. Its fields have same value
-   *         as fields of original {@link GridData}.
-   */
-  public static GridData2 getLayoutData2(Control control) {
-    String key = "GridData2";
-    GridData2 newGridData = (GridData2) control.getData(key);
-    if (newGridData == null) {
-      GridData layoutData = (GridData) control.getLayoutData();
-      if (layoutData == null) {
-        layoutData = new GridData();
-      }
-      newGridData = new GridData2();
-      copyFields(layoutData, newGridData);
-      control.setData(key, newGridData);
-    }
-    return newGridData;
-  }
+	/**
+	 * @return {@link GridData2} instance bound to given {@link Control}. Its fields have same value
+	 *         as fields of original {@link GridData}.
+	 */
+	public static GridData2 getLayoutData2(Control control) {
+		String key = "GridData2";
+		GridData2 newGridData = (GridData2) control.getData(key);
+		if (newGridData == null) {
+			GridData layoutData = (GridData) control.getLayoutData();
+			if (layoutData == null) {
+				layoutData = new GridData();
+			}
+			newGridData = new GridData2();
+			copyFields(layoutData, newGridData);
+			control.setData(key, newGridData);
+		}
+		return newGridData;
+	}
 
-  /**
-   * Copies values of public instance {@link Field}'s from source object to target object. It is
-   * expected that every source field exists in target.
-   */
-  private static void copyFields(final Object source, final Object target) {
-    ExecutionUtils.runLog(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        for (Field field : source.getClass().getFields()) {
-          int modifiers = field.getModifiers();
-          if (!Modifier.isStatic(modifiers) && !Modifier.isFinal(modifiers)) {
-            Object value = field.get(source);
-            ReflectionUtils.setField(target, field.getName(), value);
-          }
-        }
-      }
-    });
-  }
+	/**
+	 * Copies values of public instance {@link Field}'s from source object to target object. It is
+	 * expected that every source field exists in target.
+	 */
+	private static void copyFields(final Object source, final Object target) {
+		ExecutionUtils.runLog(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				for (Field field : source.getClass().getFields()) {
+					int modifiers = field.getModifiers();
+					if (!Modifier.isStatic(modifiers) && !Modifier.isFinal(modifiers)) {
+						Object value = field.get(source);
+						ReflectionUtils.setField(target, field.getName(), value);
+					}
+				}
+			}
+		});
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/layout/grid/GridLayoutInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/layout/grid/GridLayoutInfo.java
index b6359e7cc..146b2943b 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/layout/grid/GridLayoutInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/layout/grid/GridLayoutInfo.java
@@ -28,56 +28,56 @@
  * @coverage rcp.model.layout
  */
 public final class GridLayoutInfo
-    extends
-      org.eclipse.wb.internal.swt.model.layout.grid.GridLayoutInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public GridLayoutInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+extends
+org.eclipse.wb.internal.swt.model.layout.grid.GridLayoutInfo {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public GridLayoutInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void refresh_afterCreate() throws Exception {
-    replaceGridLayout();
-    super.refresh_afterCreate();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void refresh_afterCreate() throws Exception {
+		replaceGridLayout();
+		super.refresh_afterCreate();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Replace
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Replaces standard {@link GridLayout} and {@link GridData} with our {@link GridLayout2} and
-   * {@link GridData2}.
-   */
-  private void replaceGridLayout() throws Exception {
-    Composite composite = (Composite) getComposite().getObject();
-    // update GridLayout
-    {
-      GridLayout2 newGridLayout = GridLayout2.replaceGridLayout(composite);
-      setObject(newGridLayout);
-    }
-    // force layout() to recalculate "design" fields
-    composite.layout();
-    // update GridDataInfo's
-    for (ControlInfo controlInfo : getControls()) {
-      Control control = (Control) controlInfo.getObject();
-      GridData2 gridDataObject = GridLayout2.getLayoutData2(control);
-      if (gridDataObject != null) {
-        GridDataInfo gridDataInfo = getGridData(controlInfo);
-        gridDataInfo.setObject(gridDataObject);
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Replace
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Replaces standard {@link GridLayout} and {@link GridData} with our {@link GridLayout2} and
+	 * {@link GridData2}.
+	 */
+	private void replaceGridLayout() throws Exception {
+		Composite composite = (Composite) getComposite().getObject();
+		// update GridLayout
+		{
+			GridLayout2 newGridLayout = GridLayout2.replaceGridLayout(composite);
+			setObject(newGridLayout);
+		}
+		// force layout() to recalculate "design" fields
+		composite.layout();
+		// update GridDataInfo's
+		for (ControlInfo controlInfo : getControls()) {
+			Control control = (Control) controlInfo.getObject();
+			GridData2 gridDataObject = GridLayout2.getLayoutData2(control);
+			if (gridDataObject != null) {
+				GridDataInfo gridDataInfo = getGridData(controlInfo);
+				gridDataInfo.setObject(gridDataObject);
+			}
+		}
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/property/CursorPropertyEditor.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/property/CursorPropertyEditor.java
index 0350d8db5..0d5f628cd 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/property/CursorPropertyEditor.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/property/CursorPropertyEditor.java
@@ -38,125 +38,125 @@
  * @coverage rcp.property.editor
  */
 public final class CursorPropertyEditor extends AbstractComboPropertyEditor
-    implements
-      IClipboardSourceProvider {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final PropertyEditor INSTANCE = new CursorPropertyEditor();
+implements
+IClipboardSourceProvider {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final PropertyEditor INSTANCE = new CursorPropertyEditor();
 
-  private CursorPropertyEditor() {
-  }
+	private CursorPropertyEditor() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getText(Property property) throws Exception {
-    if (property instanceof GenericProperty) {
-      Expression expression = ((GenericProperty) property).getExpression();
-      // new Cursor(device,style)
-      if (AstNodeUtils.isCreation(
-          expression,
-          "org.eclipse.swt.graphics.Cursor",
-          "<init>(org.eclipse.swt.graphics.Device,int)")) {
-        Expression styleExpression = DomGenerics.arguments(expression).get(1);
-        return getTextForStyle(styleExpression);
-      }
-      // SWTResourceManager.getCursor(style)
-      if (AstNodeUtils.isMethodInvocation(
-          expression,
-          "org.eclipse.wb.swt.SWTResourceManager",
-          "getCursor(int)")) {
-        Expression styleExpression = DomGenerics.arguments(expression).get(0);
-        return getTextForStyle(styleExpression);
-      }
-    }
-    // unknown value
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getText(Property property) throws Exception {
+		if (property instanceof GenericProperty) {
+			Expression expression = ((GenericProperty) property).getExpression();
+			// new Cursor(device,style)
+			if (AstNodeUtils.isCreation(
+					expression,
+					"org.eclipse.swt.graphics.Cursor",
+					"<init>(org.eclipse.swt.graphics.Device,int)")) {
+				Expression styleExpression = DomGenerics.arguments(expression).get(1);
+				return getTextForStyle(styleExpression);
+			}
+			// SWTResourceManager.getCursor(style)
+			if (AstNodeUtils.isMethodInvocation(
+					expression,
+					"org.eclipse.wb.swt.SWTResourceManager",
+					"getCursor(int)")) {
+				Expression styleExpression = DomGenerics.arguments(expression).get(0);
+				return getTextForStyle(styleExpression);
+			}
+		}
+		// unknown value
+		return null;
+	}
 
-  private String getTextForStyle(Expression styleExpression) {
-    if (styleExpression instanceof QualifiedName) {
-      QualifiedName qualifiedName = (QualifiedName) styleExpression;
-      if (AstNodeUtils.isSuccessorOf(qualifiedName.getQualifier(), "org.eclipse.swt.SWT")) {
-        return qualifiedName.getName().getIdentifier();
-      }
-    }
-    return null;
-  }
+	private String getTextForStyle(Expression styleExpression) {
+		if (styleExpression instanceof QualifiedName) {
+			QualifiedName qualifiedName = (QualifiedName) styleExpression;
+			if (AstNodeUtils.isSuccessorOf(qualifiedName.getQualifier(), "org.eclipse.swt.SWT")) {
+				return qualifiedName.getName().getIdentifier();
+			}
+		}
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IClipboardSourceProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getClipboardSource(GenericProperty property) throws Exception {
-    String text = getText(property);
-    if (text != null) {
-      return "org.eclipse.wb.swt.SWTResourceManager.getCursor(org.eclipse.swt.SWT." + text + ")";
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IClipboardSourceProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getClipboardSource(GenericProperty property) throws Exception {
+		String text = getText(property);
+		if (text != null) {
+			return "org.eclipse.wb.swt.SWTResourceManager.getCursor(org.eclipse.swt.SWT." + text + ")";
+		}
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AbstractComboPropertyEditor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void addItems(Property property, CCombo3 combo) throws Exception {
-    for (Field cursorField : getCursorFields()) {
-      combo.add(cursorField.getName());
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AbstractComboPropertyEditor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void addItems(Property property, CCombo3 combo) throws Exception {
+		for (Field cursorField : getCursorFields()) {
+			combo.add(cursorField.getName());
+		}
+	}
 
-  @Override
-  protected void selectItem(Property property, CCombo3 combo) throws Exception {
-    combo.setText(getText(property));
-  }
+	@Override
+	protected void selectItem(Property property, CCombo3 combo) throws Exception {
+		combo.setText(getText(property));
+	}
 
-  @Override
-  protected void toPropertyEx(Property property, CCombo3 combo, int index) throws Exception {
-    if (property instanceof GenericProperty) {
-      GenericProperty genericProperty = (GenericProperty) property;
-      ManagerUtils.ensure_SWTResourceManager(genericProperty.getJavaInfo());
-      // prepare source
-      String source;
-      {
-        Field cursorField = getCursorFields().get(index);
-        source =
-            "org.eclipse.wb.swt.SWTResourceManager.getCursor(org.eclipse.swt.SWT."
-                + cursorField.getName()
-                + ")";
-      }
-      // set source
-      genericProperty.setExpression(source, Property.UNKNOWN_VALUE);
-    }
-  }
+	@Override
+	protected void toPropertyEx(Property property, CCombo3 combo, int index) throws Exception {
+		if (property instanceof GenericProperty) {
+			GenericProperty genericProperty = (GenericProperty) property;
+			ManagerUtils.ensure_SWTResourceManager(genericProperty.getJavaInfo());
+			// prepare source
+			String source;
+			{
+				Field cursorField = getCursorFields().get(index);
+				source =
+						"org.eclipse.wb.swt.SWTResourceManager.getCursor(org.eclipse.swt.SWT."
+								+ cursorField.getName()
+								+ ")";
+			}
+			// set source
+			genericProperty.setExpression(source, Property.UNKNOWN_VALUE);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link Field}'s with cursor constants from {@link SWT}.
-   */
-  private static List<Field> getCursorFields() throws Exception {
-    List<Field> cursorFields = Lists.newArrayList();
-    Class<?> class_SWT = SwtSupport.getSwtClass();
-    Field[] fields = class_SWT.getFields();
-    for (Field field : fields) {
-      if (field.getName().startsWith("CURSOR_")) {
-        cursorFields.add(field);
-      }
-    }
-    return cursorFields;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link Field}'s with cursor constants from {@link SWT}.
+	 */
+	private static List<Field> getCursorFields() throws Exception {
+		List<Field> cursorFields = Lists.newArrayList();
+		Class<?> class_SWT = SwtSupport.getSwtClass();
+		Field[] fields = class_SWT.getFields();
+		for (Field field : fields) {
+			if (field.getName().startsWith("CURSOR_")) {
+				cursorFields.add(field);
+			}
+		}
+		return cursorFields;
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/AbstractSplashHandlerInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/AbstractSplashHandlerInfo.java
index 7ac3aa7e4..0ca852198 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/AbstractSplashHandlerInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/AbstractSplashHandlerInfo.java
@@ -33,96 +33,96 @@
  * @coverage rcp.model.rcp
  */
 public class AbstractSplashHandlerInfo extends AbstractComponentInfo implements IJavaInfoRendering {
-  private Shell m_shell;
+	private Shell m_shell;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractSplashHandlerInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-    JavaInfoUtils.scheduleSpecialRendering(this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractSplashHandlerInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+		JavaInfoUtils.scheduleSpecialRendering(this);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IJavaInfoRendering
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void render() throws Exception {
-    Object window = getObject();
-    {
-      ASTNode node = getCreationSupport().getNode();
-      ClassLoader classLoader = JavaInfoUtils.getClassLoader(this);
-      m_shell = (Shell) SwtMethodParameterEvaluator.getDefaultShell(node, classLoader);
-      m_shell.setLayout(new FillLayout());
-      //m_shell.setVisible(true);
-    }
-    ReflectionUtils.invokeMethod(window, "init(org.eclipse.swt.widgets.Shell)", m_shell);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IJavaInfoRendering
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void render() throws Exception {
+		Object window = getObject();
+		{
+			ASTNode node = getCreationSupport().getNode();
+			ClassLoader classLoader = JavaInfoUtils.getClassLoader(this);
+			m_shell = (Shell) SwtMethodParameterEvaluator.getDefaultShell(node, classLoader);
+			m_shell.setLayout(new FillLayout());
+			//m_shell.setVisible(true);
+		}
+		ReflectionUtils.invokeMethod(window, "init(org.eclipse.swt.widgets.Shell)", m_shell);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AbstractComponentInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected TopBoundsSupport createTopBoundsSupport() {
-    return new AbstractSplashHandlerTopBoundsSupport(this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AbstractComponentInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected TopBoundsSupport createTopBoundsSupport() {
+		return new AbstractSplashHandlerTopBoundsSupport(this);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Hierarchy
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean canBeRoot() {
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Hierarchy
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean canBeRoot() {
+		return true;
+	}
 
-  @Override
-  public Object getComponentObject() {
-    return m_shell;
-  }
+	@Override
+	public Object getComponentObject() {
+		return m_shell;
+	}
 
-  /**
-   * @return the {@link AbstractSplashHandlerInfo}'s Shell.
-   */
-  Object getShell() {
-    return m_shell;
-  }
+	/**
+	 * @return the {@link AbstractSplashHandlerInfo}'s Shell.
+	 */
+	Object getShell() {
+		return m_shell;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void refresh_dispose() throws Exception {
-    // dispose Dialog
-    {
-      Object object = getObject();
-      if (object != null) {
-        ReflectionUtils.invokeMethod(object, "dispose()");
-        m_shell = null;
-      }
-    }
-    // call "super"
-    super.refresh_dispose();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void refresh_dispose() throws Exception {
+		// dispose Dialog
+		{
+			Object object = getObject();
+			if (object != null) {
+				ReflectionUtils.invokeMethod(object, "dispose()");
+				m_shell = null;
+			}
+		}
+		// call "super"
+		super.refresh_dispose();
+	}
 
-  @Override
-  protected void refresh_fetch() throws Exception {
-    ControlInfo.refresh_fetch(this, new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        AbstractSplashHandlerInfo.super.refresh_fetch();
-      }
-    });
-  }
+	@Override
+	protected void refresh_fetch() throws Exception {
+		ControlInfo.refresh_fetch(this, new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				AbstractSplashHandlerInfo.super.refresh_fetch();
+			}
+		});
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/AbstractSplashHandlerTopBoundsSupport.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/AbstractSplashHandlerTopBoundsSupport.java
index 440fcba8e..88d96987e 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/AbstractSplashHandlerTopBoundsSupport.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/AbstractSplashHandlerTopBoundsSupport.java
@@ -23,46 +23,46 @@
  * @coverage rcp.model.rcp
  */
 public class AbstractSplashHandlerTopBoundsSupport extends TopBoundsSupport {
-  private final AbstractSplashHandlerInfo m_splash;
+	private final AbstractSplashHandlerInfo m_splash;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractSplashHandlerTopBoundsSupport(AbstractSplashHandlerInfo splash) {
-    super(splash);
-    m_splash = splash;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractSplashHandlerTopBoundsSupport(AbstractSplashHandlerInfo splash) {
+		super(splash);
+		m_splash = splash;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // TopBoundsSupport
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void apply() throws Exception {
-    // set size from resource properties (or default)
-    {
-      Dimension size = getResourceSize();
-      ControlSupport.setSize(m_splash.getShell(), size.width, size.height);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// TopBoundsSupport
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void apply() throws Exception {
+		// set size from resource properties (or default)
+		{
+			Dimension size = getResourceSize();
+			ControlSupport.setSize(m_splash.getShell(), size.width, size.height);
+		}
+	}
 
-  @Override
-  public void setSize(int width, int height) throws Exception {
-    // remember size in resource properties
-    setResourceSize(width, height);
-  }
+	@Override
+	public void setSize(int width, int height) throws Exception {
+		// remember size in resource properties
+		setResourceSize(width, height);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Show
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean show() throws Exception {
-    CompositeTopBoundsSupport.show(m_splash, m_splash.getShell());
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Show
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean show() throws Exception {
+		CompositeTopBoundsSupport.show(m_splash, m_splash.getShell());
+		return true;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/ActionBarAdvisorInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/ActionBarAdvisorInfo.java
index 0f1b10dbd..2a51031b6 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/ActionBarAdvisorInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/ActionBarAdvisorInfo.java
@@ -71,303 +71,303 @@
  * @coverage rcp.model.rcp
  */
 public final class ActionBarAdvisorInfo extends AbstractComponentInfo
-    implements
-      IThisMethodParameterEvaluator,
-      IJavaInfoRendering {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ActionBarAdvisorInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-    JavaInfoUtils.scheduleSpecialRendering(this);
-    addPaletteListener();
-    // bind IContributionManager's to ActionBarAdvisor
-    addBroadcastListener(new JavaEventListener() {
-      @Override
-      public void bindComponents(List<JavaInfo> components) throws Exception {
-        ClassLoader editorLoader = JavaInfoUtils.getClassLoader(ActionBarAdvisorInfo.this);
-        Class<?> contributionManagerClass =
-            editorLoader.loadClass("org.eclipse.jface.action.IContributionManager");
-        for (JavaInfo component : components) {
-          if (component.getParent() == null
-              && contributionManagerClass.isAssignableFrom(component.getDescription().getComponentClass())) {
-            addChild(component);
-            component.setAssociation(new EmptyAssociation());
-          }
-        }
-      }
-    });
-    // after adding new Action_Info, register() it
-    addBroadcastListener(new JavaEventListener() {
-      @Override
-      public void addAfter(JavaInfo parent, JavaInfo child) throws Exception {
-        if (child instanceof ActionInfo) {
-          ActionInfo action = (ActionInfo) child;
-          String source = TemplateUtils.format("register({0})", action);
-          Expression expression = action.addExpressionStatement(source);
-          addRelatedNodes(expression);
-        }
-      }
-    });
-  }
+implements
+IThisMethodParameterEvaluator,
+IJavaInfoRendering {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ActionBarAdvisorInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+		JavaInfoUtils.scheduleSpecialRendering(this);
+		addPaletteListener();
+		// bind IContributionManager's to ActionBarAdvisor
+		addBroadcastListener(new JavaEventListener() {
+			@Override
+			public void bindComponents(List<JavaInfo> components) throws Exception {
+				ClassLoader editorLoader = JavaInfoUtils.getClassLoader(ActionBarAdvisorInfo.this);
+				Class<?> contributionManagerClass =
+						editorLoader.loadClass("org.eclipse.jface.action.IContributionManager");
+				for (JavaInfo component : components) {
+					if (component.getParent() == null
+							&& contributionManagerClass.isAssignableFrom(component.getDescription().getComponentClass())) {
+						addChild(component);
+						component.setAssociation(new EmptyAssociation());
+					}
+				}
+			}
+		});
+		// after adding new Action_Info, register() it
+		addBroadcastListener(new JavaEventListener() {
+			@Override
+			public void addAfter(JavaInfo parent, JavaInfo child) throws Exception {
+				if (child instanceof ActionInfo) {
+					ActionInfo action = (ActionInfo) child;
+					String source = TemplateUtils.format("register({0})", action);
+					Expression expression = action.addExpressionStatement(source);
+					addRelatedNodes(expression);
+				}
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Palette
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * {@link PageLayoutInfo} uses toolkit of RCP, but it does not need SWT, JFace components on
-   * palette. It needs only views and perspectives.
-   */
-  private void addPaletteListener() {
-    addBroadcastListener(new PaletteEventListener() {
-      @Override
-      public void categories2(List<CategoryInfo> categories) throws Exception {
-        // remove all except "Actions" category
-        for (Iterator<CategoryInfo> I = categories.iterator(); I.hasNext();) {
-          CategoryInfo category = I.next();
-          if (!category.getId().equals(ActionRootProcessor.ACTIONS_CATEGORY_ID)) {
-            I.remove();
-          }
-        }
-        // create "System" category
-        {
-          CategoryInfo category = new CategoryInfo("system");
-          category.setName(ModelMessages.ActionBarAdvisorInfo_systemCategoryName);
-          category.setDescription(ModelMessages.ActionBarAdvisorInfo_systemCategoryDescription);
-          category.setOpen(true);
-          categories.add(0, category);
-          // add entries
-          {
-            SelectionToolEntryInfo entry = new SelectionToolEntryInfo();
-            entry.setId("system.selection");
-            category.addEntry(entry);
-          }
-        }
-        // create "ActionFactory" category
-        {
-          CategoryInfo category = new CategoryInfo("ActionFactory");
-          category.setName(ModelMessages.ActionBarAdvisorInfo_factoryCategoryName);
-          category.setDescription(ModelMessages.ActionBarAdvisorInfo_factoryCategoryDescription);
-          category.setOpen(true);
-          categories.add(category);
-          // add entries
-          for (Field field : ActionFactory.class.getFields()) {
-            if (ActionFactory.class.isAssignableFrom(field.getType())) {
-              try {
-                EntryInfo entry = new ActionFactoryNewEntryInfo(field.getName());
-                category.addEntry(entry);
-              } catch (Throwable e) {
-              }
-            }
-          }
-        }
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Palette
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * {@link PageLayoutInfo} uses toolkit of RCP, but it does not need SWT, JFace components on
+	 * palette. It needs only views and perspectives.
+	 */
+	private void addPaletteListener() {
+		addBroadcastListener(new PaletteEventListener() {
+			@Override
+			public void categories2(List<CategoryInfo> categories) throws Exception {
+				// remove all except "Actions" category
+				for (Iterator<CategoryInfo> I = categories.iterator(); I.hasNext();) {
+					CategoryInfo category = I.next();
+					if (!category.getId().equals(ActionRootProcessor.ACTIONS_CATEGORY_ID)) {
+						I.remove();
+					}
+				}
+				// create "System" category
+				{
+					CategoryInfo category = new CategoryInfo("system");
+					category.setName(ModelMessages.ActionBarAdvisorInfo_systemCategoryName);
+					category.setDescription(ModelMessages.ActionBarAdvisorInfo_systemCategoryDescription);
+					category.setOpen(true);
+					categories.add(0, category);
+					// add entries
+					{
+						SelectionToolEntryInfo entry = new SelectionToolEntryInfo();
+						entry.setId("system.selection");
+						category.addEntry(entry);
+					}
+				}
+				// create "ActionFactory" category
+				{
+					CategoryInfo category = new CategoryInfo("ActionFactory");
+					category.setName(ModelMessages.ActionBarAdvisorInfo_factoryCategoryName);
+					category.setDescription(ModelMessages.ActionBarAdvisorInfo_factoryCategoryDescription);
+					category.setOpen(true);
+					categories.add(category);
+					// add entries
+					for (Field field : ActionFactory.class.getFields()) {
+						if (ActionFactory.class.isAssignableFrom(field.getType())) {
+							try {
+								EntryInfo entry = new ActionFactoryNewEntryInfo(field.getName());
+								category.addEntry(entry);
+							} catch (Throwable e) {
+							}
+						}
+					}
+				}
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link MenuManagerInfo}, expected that it exists.
-   */
-  public MenuManagerInfo getMenuManager() {
-    return getChildren(MenuManagerInfo.class).get(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link MenuManagerInfo}, expected that it exists.
+	 */
+	public MenuManagerInfo getMenuManager() {
+		return getChildren(MenuManagerInfo.class).get(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IThisMethodParameterEvaluator
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Object m_IActionBarConfigurer;
-  private Object m_IWorkbenchWindowConfigurer;
-  private Object m_IWorkbenchWindow;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IThisMethodParameterEvaluator
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Object m_IActionBarConfigurer;
+	private Object m_IWorkbenchWindowConfigurer;
+	private Object m_IWorkbenchWindow;
 
-  @Override
-  public Object evaluateParameter(EvaluationContext context,
-      MethodDeclaration methodDeclaration,
-      String methodSignature,
-      SingleVariableDeclaration parameter,
-      int index) throws Exception {
-    ITypeBinding typeBinding = AstNodeUtils.getTypeBinding(parameter);
-    if (AstNodeUtils.isSuccessorOf(typeBinding, "org.eclipse.ui.application.IActionBarConfigurer")) {
-      if (m_IActionBarConfigurer == null) {
-        prepare_IActionBarConfigurer();
-      }
-      return m_IActionBarConfigurer;
-    }
-    return AstEvaluationEngine.UNKNOWN;
-  }
+	@Override
+	public Object evaluateParameter(EvaluationContext context,
+			MethodDeclaration methodDeclaration,
+			String methodSignature,
+			SingleVariableDeclaration parameter,
+			int index) throws Exception {
+		ITypeBinding typeBinding = AstNodeUtils.getTypeBinding(parameter);
+		if (AstNodeUtils.isSuccessorOf(typeBinding, "org.eclipse.ui.application.IActionBarConfigurer")) {
+			if (m_IActionBarConfigurer == null) {
+				prepare_IActionBarConfigurer();
+			}
+			return m_IActionBarConfigurer;
+		}
+		return AstEvaluationEngine.UNKNOWN;
+	}
 
-  /**
-   * Prepares {@link IActionBarConfigurer} implementation in {@link #m_IActionBarConfigurer}.
-   */
-  private void prepare_IActionBarConfigurer() throws ClassNotFoundException {
-    ClassLoader editorLoader = JavaInfoUtils.getClassLoader(this);
-    Class<?> class_IActionBarConfigurer =
-        editorLoader.loadClass("org.eclipse.ui.application.IActionBarConfigurer");
-    Class<?> class_IWorkbenchWindowConfigurer =
-        editorLoader.loadClass("org.eclipse.ui.application.IWorkbenchWindowConfigurer");
-    m_IActionBarConfigurer =
-        Proxy.newProxyInstance(
-            editorLoader,
-            new Class<?>[]{class_IActionBarConfigurer},
-            new InvocationHandler() {
-              @Override
-              public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
-                String methodSignature = ReflectionUtils.getMethodSignature(method);
-                if (methodSignature.equals("getWindowConfigurer()")) {
-                  return m_IWorkbenchWindowConfigurer;
-                }
-                if (methodSignature.equals("getCoolBarManager()")) {
-                  return m_coolBarManager;
-                }
-                if (methodSignature.equals("getMenuManager()")) {
-                  return m_menuManager;
-                }
-                throw new NotImplementedException(methodSignature);
-              }
-            });
-    m_IWorkbenchWindowConfigurer =
-        Proxy.newProxyInstance(
-            editorLoader,
-            new Class<?>[]{class_IWorkbenchWindowConfigurer},
-            new InvocationHandler() {
-              @Override
-              public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
-                String methodSignature = ReflectionUtils.getMethodSignature(method);
-                if (methodSignature.equals("getWindow()")) {
-                  return m_IWorkbenchWindow;
-                }
-                throw new NotImplementedException(methodSignature);
-              }
-            });
-    m_IWorkbenchWindow = DesignerPlugin.getActiveWorkbenchWindow();
-  }
+	/**
+	 * Prepares {@link IActionBarConfigurer} implementation in {@link #m_IActionBarConfigurer}.
+	 */
+	private void prepare_IActionBarConfigurer() throws ClassNotFoundException {
+		ClassLoader editorLoader = JavaInfoUtils.getClassLoader(this);
+		Class<?> class_IActionBarConfigurer =
+				editorLoader.loadClass("org.eclipse.ui.application.IActionBarConfigurer");
+		Class<?> class_IWorkbenchWindowConfigurer =
+				editorLoader.loadClass("org.eclipse.ui.application.IWorkbenchWindowConfigurer");
+		m_IActionBarConfigurer =
+				Proxy.newProxyInstance(
+						editorLoader,
+						new Class<?>[]{class_IActionBarConfigurer},
+						new InvocationHandler() {
+							@Override
+							public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
+								String methodSignature = ReflectionUtils.getMethodSignature(method);
+								if (methodSignature.equals("getWindowConfigurer()")) {
+									return m_IWorkbenchWindowConfigurer;
+								}
+								if (methodSignature.equals("getCoolBarManager()")) {
+									return m_coolBarManager;
+								}
+								if (methodSignature.equals("getMenuManager()")) {
+									return m_menuManager;
+								}
+								throw new NotImplementedException(methodSignature);
+							}
+						});
+		m_IWorkbenchWindowConfigurer =
+				Proxy.newProxyInstance(
+						editorLoader,
+						new Class<?>[]{class_IWorkbenchWindowConfigurer},
+						new InvocationHandler() {
+							@Override
+							public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
+								String methodSignature = ReflectionUtils.getMethodSignature(method);
+								if (methodSignature.equals("getWindow()")) {
+									return m_IWorkbenchWindow;
+								}
+								throw new NotImplementedException(methodSignature);
+							}
+						});
+		m_IWorkbenchWindow = DesignerPlugin.getActiveWorkbenchWindow();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Rendering
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Shell m_shell;
-  private CoolBar m_coolBar;
-  private Object m_menuManager;
-  private Object m_coolBarManager;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Rendering
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Shell m_shell;
+	private CoolBar m_coolBar;
+	private Object m_menuManager;
+	private Object m_coolBarManager;
 
-  @Override
-  public void render() throws Exception {
-    m_shell = new Shell();
-    GridLayoutFactory.create(m_shell).noMargins();
-    {
-      m_coolBar = new CoolBar(m_shell, SWT.FLAT);
-      GridDataFactory.create(m_coolBar).grabH().fillH();
-    }
-    // prepare Class'es
-    ClassLoader editorLoader = JavaInfoUtils.getClassLoader(this);
-    Class<?> menuManagerClass = editorLoader.loadClass("org.eclipse.jface.action.MenuManager");
-    Class<?> coolBarManagerClass =
-        editorLoader.loadClass("org.eclipse.jface.action.CoolBarManager");
-    // create managers
-    m_menuManager = menuManagerClass.newInstance();
-    m_coolBarManager = coolBarManagerClass.getConstructor(CoolBar.class).newInstance(m_coolBar);
-    // OK, we prepared everything, now add actions/items/managers
-    {
-      int flags = ActionBarAdvisor.FILL_MENU_BAR | ActionBarAdvisor.FILL_COOL_BAR;
-      ReflectionUtils.invokeMethod(getObject(), "fillActionBars(int)", flags);
-    }
-    // render items
-    ReflectionUtils.invokeMethod(m_menuManager, "update(boolean)", true);
-    ReflectionUtils.invokeMethod(m_coolBarManager, "update(boolean)", true);
-  }
+	@Override
+	public void render() throws Exception {
+		m_shell = new Shell();
+		GridLayoutFactory.create(m_shell).noMargins();
+		{
+			m_coolBar = new CoolBar(m_shell, SWT.FLAT);
+			GridDataFactory.create(m_coolBar).grabH().fillH();
+		}
+		// prepare Class'es
+		ClassLoader editorLoader = JavaInfoUtils.getClassLoader(this);
+		Class<?> menuManagerClass = editorLoader.loadClass("org.eclipse.jface.action.MenuManager");
+		Class<?> coolBarManagerClass =
+				editorLoader.loadClass("org.eclipse.jface.action.CoolBarManager");
+		// create managers
+		m_menuManager = menuManagerClass.newInstance();
+		m_coolBarManager = coolBarManagerClass.getConstructor(CoolBar.class).newInstance(m_coolBar);
+		// OK, we prepared everything, now add actions/items/managers
+		{
+			int flags = ActionBarAdvisor.FILL_MENU_BAR | ActionBarAdvisor.FILL_COOL_BAR;
+			ReflectionUtils.invokeMethod(getObject(), "fillActionBars(int)", flags);
+		}
+		// render items
+		ReflectionUtils.invokeMethod(m_menuManager, "update(boolean)", true);
+		ReflectionUtils.invokeMethod(m_coolBarManager, "update(boolean)", true);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AbstractComponentInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected TopBoundsSupport createTopBoundsSupport() {
-    return new ActionBarAdvisorTopBoundsSupport(this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AbstractComponentInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected TopBoundsSupport createTopBoundsSupport() {
+		return new ActionBarAdvisorTopBoundsSupport(this);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Hierarchy
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean canBeRoot() {
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Hierarchy
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean canBeRoot() {
+		return true;
+	}
 
-  @Override
-  public Object getComponentObject() {
-    return m_shell;
-  }
+	@Override
+	public Object getComponentObject() {
+		return m_shell;
+	}
 
-  /**
-   * @return the top level {@link Shell}.
-   */
-  Shell getShell() {
-    return m_shell;
-  }
+	/**
+	 * @return the top level {@link Shell}.
+	 */
+	Shell getShell() {
+		return m_shell;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void refresh_dispose() throws Exception {
-    m_shell.dispose();
-    super.refresh_dispose();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void refresh_dispose() throws Exception {
+		m_shell.dispose();
+		super.refresh_dispose();
+	}
 
-  @Override
-  protected void refresh_afterCreate() throws Exception {
-    {
-      Menu menuBar =
-          (Menu) ReflectionUtils.invokeMethod(
-              m_menuManager,
-              "createMenuBar(org.eclipse.swt.widgets.Decorations)",
-              m_shell);
-      m_shell.setMenuBar(menuBar);
-    }
-    super.refresh_afterCreate();
-  }
+	@Override
+	protected void refresh_afterCreate() throws Exception {
+		{
+			Menu menuBar =
+					(Menu) ReflectionUtils.invokeMethod(
+							m_menuManager,
+							"createMenuBar(org.eclipse.swt.widgets.Decorations)",
+							m_shell);
+			m_shell.setMenuBar(menuBar);
+		}
+		super.refresh_afterCreate();
+	}
 
-  @Override
-  protected void refresh_fetch() throws Exception {
-    ControlInfo.refresh_fetch(this, new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        ActionBarAdvisorInfo.super.refresh_fetch();
-      }
-    });
-  }
+	@Override
+	protected void refresh_fetch() throws Exception {
+		ControlInfo.refresh_fetch(this, new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				ActionBarAdvisorInfo.super.refresh_fetch();
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Properties
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final WorkbenchWindowAdvisorPropertiesProvider m_windowAdvisorPropertiesProvider =
-      new WorkbenchWindowAdvisorPropertiesProvider(this);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Properties
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final WorkbenchWindowAdvisorPropertiesProvider m_windowAdvisorPropertiesProvider =
+			new WorkbenchWindowAdvisorPropertiesProvider(this);
 
-  @Override
-  protected List<Property> getPropertyList() throws Exception {
-    List<Property> properties = super.getPropertyList();
-    properties.addAll(m_windowAdvisorPropertiesProvider.getProperties());
-    return properties;
-  }
+	@Override
+	protected List<Property> getPropertyList() throws Exception {
+		List<Property> properties = super.getPropertyList();
+		properties.addAll(m_windowAdvisorPropertiesProvider.getProperties());
+		return properties;
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/ActionBarAdvisorTopBoundsSupport.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/ActionBarAdvisorTopBoundsSupport.java
index 99134ba00..1a7aee88d 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/ActionBarAdvisorTopBoundsSupport.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/ActionBarAdvisorTopBoundsSupport.java
@@ -23,51 +23,51 @@
  * @coverage rcp.model.rcp
  */
 public final class ActionBarAdvisorTopBoundsSupport extends TopBoundsSupport {
-  private final ActionBarAdvisorInfo m_advisor;
+	private final ActionBarAdvisorInfo m_advisor;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ActionBarAdvisorTopBoundsSupport(ActionBarAdvisorInfo advisor) {
-    super(advisor);
-    m_advisor = advisor;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ActionBarAdvisorTopBoundsSupport(ActionBarAdvisorInfo advisor) {
+		super(advisor);
+		m_advisor = advisor;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // TopBoundsSupport
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void apply() throws Exception {
-    // set size from resource properties (or default)
-    {
-      Dimension size = getResourceSize();
-      ControlSupport.setSize(m_advisor.getShell(), size.width, size.height);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// TopBoundsSupport
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void apply() throws Exception {
+		// set size from resource properties (or default)
+		{
+			Dimension size = getResourceSize();
+			ControlSupport.setSize(m_advisor.getShell(), size.width, size.height);
+		}
+	}
 
-  @Override
-  public void setSize(int width, int height) throws Exception {
-    // remember size in resource properties
-    setResourceSize(width, height);
-  }
+	@Override
+	public void setSize(int width, int height) throws Exception {
+		// remember size in resource properties
+		setResourceSize(width, height);
+	}
 
-  @Override
-  protected Dimension getDefaultSize() {
-    return new Dimension(600, 500);
-  }
+	@Override
+	protected Dimension getDefaultSize() {
+		return new Dimension(600, 500);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Show
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean show() throws Exception {
-    CompositeTopBoundsSupport.show(m_advisor, m_advisor.getShell());
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Show
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean show() throws Exception {
+		CompositeTopBoundsSupport.show(m_advisor, m_advisor.getShell());
+		return true;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/ActionFactoryCreationSupport.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/ActionFactoryCreationSupport.java
index 763178281..b5d86e674 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/ActionFactoryCreationSupport.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/ActionFactoryCreationSupport.java
@@ -49,243 +49,243 @@
  * @coverage rcp.model.rcp
  */
 public final class ActionFactoryCreationSupport extends CreationSupport
-    implements
-      IActionIconProvider {
-  private MethodInvocation m_invocation;
-  private final String m_name;
+implements
+IActionIconProvider {
+	private MethodInvocation m_invocation;
+	private final String m_name;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ActionFactoryCreationSupport(MethodInvocation node, String name) {
-    m_invocation = node;
-    m_name = name;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ActionFactoryCreationSupport(MethodInvocation node, String name) {
+		m_invocation = node;
+		m_name = name;
+	}
 
-  private ActionFactoryCreationSupport(String name) {
-    m_name = name;
-  }
+	private ActionFactoryCreationSupport(String name) {
+		m_name = name;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Action_Info creation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @param name
-   *          then name of field from {@link ActionFactory}.
-   *
-   * @return the {@link ActionInfo} for {@link IWorkbenchAction} from {@link ActionFactory}.
-   */
-  public static ActionInfo createNew(JavaInfo root, String name) throws Exception {
-    // prepare new Action_Info
-    ActionInfo action;
-    {
-      AstEditor editor = root.getEditor();
-      action =
-          (ActionInfo) JavaInfoUtils.createJavaInfo(
-              editor,
-              "org.eclipse.jface.action.IAction",
-              new ActionFactoryCreationSupport(name));
-    }
-    // set default variable name
-    {
-      StringBuffer newName = new StringBuffer(name.length() + 16);
-      boolean hasUnderscore = false;
-      for (int i = 0; i < name.length(); i++) {
-        char c = name.charAt(i);
-        if (c == '_') {
-          hasUnderscore = true;
-          continue;
-        } else {
-          if (hasUnderscore) {
-            c = Character.toUpperCase(c);
-            hasUnderscore = false;
-          } else {
-            c = Character.toLowerCase(c);
-          }
-          newName.append(c);
-        }
-      }
-      newName.append("Action");
-      // do set default variable name
-      JavaInfoUtils.setParameter(action, NamesManager.NAME_PARAMETER, newName.toString());
-    }
-    // OK, we have Action_Info
-    return action;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Action_Info creation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @param name
+	 *          then name of field from {@link ActionFactory}.
+	 *
+	 * @return the {@link ActionInfo} for {@link IWorkbenchAction} from {@link ActionFactory}.
+	 */
+	public static ActionInfo createNew(JavaInfo root, String name) throws Exception {
+		// prepare new Action_Info
+		ActionInfo action;
+		{
+			AstEditor editor = root.getEditor();
+			action =
+					(ActionInfo) JavaInfoUtils.createJavaInfo(
+							editor,
+							"org.eclipse.jface.action.IAction",
+							new ActionFactoryCreationSupport(name));
+		}
+		// set default variable name
+		{
+			StringBuffer newName = new StringBuffer(name.length() + 16);
+			boolean hasUnderscore = false;
+			for (int i = 0; i < name.length(); i++) {
+				char c = name.charAt(i);
+				if (c == '_') {
+					hasUnderscore = true;
+					continue;
+				} else {
+					if (hasUnderscore) {
+						c = Character.toUpperCase(c);
+						hasUnderscore = false;
+					} else {
+						c = Character.toLowerCase(c);
+					}
+					newName.append(c);
+				}
+			}
+			newName.append("Action");
+			// do set default variable name
+			JavaInfoUtils.setParameter(action, NamesManager.NAME_PARAMETER, newName.toString());
+		}
+		// OK, we have Action_Info
+		return action;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    return m_invocation != null ? "ActionFactory." + m_name : "ActionFactory";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		return m_invocation != null ? "ActionFactory." + m_name : "ActionFactory";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public ASTNode getNode() {
-    return m_invocation;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public ASTNode getNode() {
+		return m_invocation;
+	}
 
-  @Override
-  public boolean isJavaInfo(ASTNode node) {
-    return node == m_invocation;
-  }
+	@Override
+	public boolean isJavaInfo(ASTNode node) {
+		return node == m_invocation;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IActionIconProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final Image DEFAULT_ICON = Activator.getImage("info/Action/workbench_action.gif");
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IActionIconProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final Image DEFAULT_ICON = Activator.getImage("info/Action/workbench_action.gif");
 
-  @Override
-  public Image getActionIcon() {
-    return DEFAULT_ICON;
-  }
+	@Override
+	public Image getActionIcon() {
+		return DEFAULT_ICON;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Evaluation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean canBeEvaluated() {
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Evaluation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean canBeEvaluated() {
+		return false;
+	}
 
-  @Override
-  public Object create(EvaluationContext context, ExecutionFlowFrameVisitor visitor)
-      throws Exception {
-    // create Action object
-    Object action;
-    {
-      ClassLoader editorLoader = context.getClassLoader();
-      Class<?> class_Action = editorLoader.loadClass("org.eclipse.jface.action.Action");
-      action = new ByteBuddy() //
-          .subclass(class_Action) //
-          .make() //
-          .load(editorLoader) //
-          .getLoaded() //
-          .getConstructor() //
-          .newInstance();
-    }
-    // create IWorkbenchAction from "this" Eclipse
-    IWorkbenchAction thisAction;
-    {
-      ActionFactory actionFactory =
-          (ActionFactory) ReflectionUtils.getFieldObject(ActionFactory.class, m_name);
-      thisAction = actionFactory.create(DesignerPlugin.getActiveWorkbenchWindow());
-    }
-    // configure Action object
-    try {
-      copyActionProperty(action, thisAction, "text");
-      copyActionProperty(action, thisAction, "description");
-      copyActionProperty(action, thisAction, "toolTipText");
-      copyActionProperty(action, thisAction, "imageDescriptor");
-    } finally {
-      thisAction.dispose();
-    }
-    // OK, we have Action object
-    return action;
-  }
+	@Override
+	public Object create(EvaluationContext context, ExecutionFlowFrameVisitor visitor)
+			throws Exception {
+		// create Action object
+		Object action;
+		{
+			ClassLoader editorLoader = context.getClassLoader();
+			Class<?> class_Action = editorLoader.loadClass("org.eclipse.jface.action.Action");
+			action = new ByteBuddy() //
+					.subclass(class_Action) //
+					.make() //
+					.load(editorLoader) //
+					.getLoaded() //
+					.getConstructor() //
+					.newInstance();
+		}
+		// create IWorkbenchAction from "this" Eclipse
+		IWorkbenchAction thisAction;
+		{
+			ActionFactory actionFactory =
+					(ActionFactory) ReflectionUtils.getFieldObject(ActionFactory.class, m_name);
+			thisAction = actionFactory.create(DesignerPlugin.getActiveWorkbenchWindow());
+		}
+		// configure Action object
+		try {
+			copyActionProperty(action, thisAction, "text");
+			copyActionProperty(action, thisAction, "description");
+			copyActionProperty(action, thisAction, "toolTipText");
+			copyActionProperty(action, thisAction, "imageDescriptor");
+		} finally {
+			thisAction.dispose();
+		}
+		// OK, we have Action object
+		return action;
+	}
 
-  /**
-   * Copies value of property from "this" {@link IWorkbenchAction} into design {@link Action}
-   * object.
-   */
-  private static void copyActionProperty(Object action,
-      IWorkbenchAction sourceAction,
-      String propertyName) throws Exception {
-    PropertyUtilsBean propertyUtils = new PropertyUtilsBean();
-    Object value = propertyUtils.getSimpleProperty(sourceAction, propertyName);
-    if (value instanceof String) {
-      propertyUtils.setSimpleProperty(action, propertyName, value);
-    } else if (value != null
-        && ReflectionUtils.isSuccessorOf(
-            value.getClass(),
-            "org.eclipse.jface.resource.ImageDescriptor")) {
-      ClassLoader classLoader = action.getClass().getClassLoader();
-      Object imageDescriptor = createID(classLoader, (ImageDescriptor) value);
-      propertyUtils.setSimpleProperty(action, propertyName, imageDescriptor);
-    }
-  }
+	/**
+	 * Copies value of property from "this" {@link IWorkbenchAction} into design {@link Action}
+	 * object.
+	 */
+	private static void copyActionProperty(Object action,
+			IWorkbenchAction sourceAction,
+			String propertyName) throws Exception {
+		PropertyUtilsBean propertyUtils = new PropertyUtilsBean();
+		Object value = propertyUtils.getSimpleProperty(sourceAction, propertyName);
+		if (value instanceof String) {
+			propertyUtils.setSimpleProperty(action, propertyName, value);
+		} else if (value != null
+				&& ReflectionUtils.isSuccessorOf(
+						value.getClass(),
+						"org.eclipse.jface.resource.ImageDescriptor")) {
+			ClassLoader classLoader = action.getClass().getClassLoader();
+			Object imageDescriptor = createID(classLoader, (ImageDescriptor) value);
+			propertyUtils.setSimpleProperty(action, propertyName, imageDescriptor);
+		}
+	}
 
-  /**
-   * @return the implementation of {@link ImageDescriptor} that returns same {@link ImageData} as
-   *         given source {@link ImageDescriptor}.
-   */
-  private static Object createID(ClassLoader classLoader, ImageDescriptor sourceID)
-      throws Exception {
-    // prepare ImageData
-    final ImageData imageData = sourceID.getImageData();
-    // prepare ImageDescriptor
-    Class<?> imageDescriptorClass =
-        classLoader.loadClass("org.eclipse.jface.resource.ImageDescriptor");
-    return new ByteBuddy() //
-        .subclass(imageDescriptorClass) //
-        .method(named("getImageData").and(takesNoArguments())) //
-        .intercept(FixedValue.reference(imageData)) //
-        .make() //
-        .load(classLoader) //
-        .getLoaded() //
-        .getConstructor() //
-        .newInstance();
-  }
+	/**
+	 * @return the implementation of {@link ImageDescriptor} that returns same {@link ImageData} as
+	 *         given source {@link ImageDescriptor}.
+	 */
+	private static Object createID(ClassLoader classLoader, ImageDescriptor sourceID)
+			throws Exception {
+		// prepare ImageData
+		final ImageData imageData = sourceID.getImageData();
+		// prepare ImageDescriptor
+		Class<?> imageDescriptorClass =
+				classLoader.loadClass("org.eclipse.jface.resource.ImageDescriptor");
+		return new ByteBuddy() //
+				.subclass(imageDescriptorClass) //
+				.method(named("getImageData").and(takesNoArguments())) //
+				.intercept(FixedValue.reference(imageData)) //
+				.make() //
+				.load(classLoader) //
+				.getLoaded() //
+				.getConstructor() //
+				.newInstance();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Validation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean canReorder() {
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Validation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean canReorder() {
+		return true;
+	}
 
-  @Override
-  public boolean canReparent() {
-    return true;
-  }
+	@Override
+	public boolean canReparent() {
+		return true;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Delete
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean canDelete() {
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Delete
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean canDelete() {
+		return true;
+	}
 
-  @Override
-  public void delete() throws Exception {
-    JavaInfoUtils.deleteJavaInfo(m_javaInfo, true);
-  }
+	@Override
+	public void delete() throws Exception {
+		JavaInfoUtils.deleteJavaInfo(m_javaInfo, true);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Create
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String add_getSource(NodeTarget target) throws Exception {
-    return "org.eclipse.ui.actions.ActionFactory." + m_name + ".create(window)";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Create
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String add_getSource(NodeTarget target) throws Exception {
+		return "org.eclipse.ui.actions.ActionFactory." + m_name + ".create(window)";
+	}
 
-  @Override
-  public void add_setSourceExpression(Expression expression) throws Exception {
-    m_invocation = (MethodInvocation) expression;
-    m_javaInfo.bindToExpression(m_invocation);
-  }
+	@Override
+	public void add_setSourceExpression(Expression expression) throws Exception {
+		m_invocation = (MethodInvocation) expression;
+		m_javaInfo.bindToExpression(m_invocation);
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/ActionFactoryExpressionEvaluator.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/ActionFactoryExpressionEvaluator.java
index bc91a1939..747ec8191 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/ActionFactoryExpressionEvaluator.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/ActionFactoryExpressionEvaluator.java
@@ -29,18 +29,18 @@
  * @coverage rcp.model.rcp
  */
 public class ActionFactoryExpressionEvaluator implements IExpressionEvaluator {
-  @Override
-  public Object evaluate(EvaluationContext context,
-      Expression expression,
-      ITypeBinding typeBinding,
-      String typeQualifiedName) throws Exception {
-    if (expression instanceof QualifiedName) {
-      QualifiedName qualifiedName = (QualifiedName) expression;
-      if (AstNodeUtils.getFullyQualifiedName(qualifiedName.getQualifier(), false).equals(
-          "org.eclipse.ui.actions.ActionFactory")) {
-      }
-    }
-    // we don't understand given expression
-    return AstEvaluationEngine.UNKNOWN;
-  }
+	@Override
+	public Object evaluate(EvaluationContext context,
+			Expression expression,
+			ITypeBinding typeBinding,
+			String typeQualifiedName) throws Exception {
+		if (expression instanceof QualifiedName) {
+			QualifiedName qualifiedName = (QualifiedName) expression;
+			if (AstNodeUtils.getFullyQualifiedName(qualifiedName.getQualifier(), false).equals(
+					"org.eclipse.ui.actions.ActionFactory")) {
+			}
+		}
+		// we don't understand given expression
+		return AstEvaluationEngine.UNKNOWN;
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/CategoriesAndViewsDialog.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/CategoriesAndViewsDialog.java
index 679b1f800..3958d1866 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/CategoriesAndViewsDialog.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/CategoriesAndViewsDialog.java
@@ -72,472 +72,472 @@
  * @coverage rcp.model.rcp
  */
 public class CategoriesAndViewsDialog extends ResizableDialog {
-  private static final Object OTHER_CATEGORY = new Object();
-  private final PdeUtils m_utils;
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI fields
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private TreeViewer m_viewer;
-  private ViewsContentProvider m_contentProvider;
-  private Tree m_tree;
-  private Button m_newCategoryButton;
-  private Button m_editCategoryButton;
-  private Button m_removeCategoryButton;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CategoriesAndViewsDialog(Shell parentShell, PdeUtils utils) {
-    super(parentShell, Activator.getDefault());
-    m_utils = utils;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI creation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Control createDialogArea(Composite parent) {
-    Composite container = (Composite) super.createDialogArea(parent);
-    GridLayoutFactory.create(container).columns(2);
-    // title label
-    {
-      Label label = new Label(container, SWT.NONE);
-      GridDataFactory.create(label).spanH(2);
-      label.setText(ModelMessages.CategoriesAndViewsDialog_viewerTitle);
-    }
-    // viewer with categories/views
-    {
-      m_viewer = new TreeViewer(container, SWT.BORDER);
-      m_tree = m_viewer.getTree();
-      GridDataFactory.create(m_tree).grab().fill().hintC(50, 20);
-      m_contentProvider = new ViewsContentProvider();
-      m_viewer.setContentProvider(m_contentProvider);
-      m_viewer.setLabelProvider(new ViewsLabelProvider());
-      m_viewer.setComparator(new ViewerComparator());
-      setPluginElementComparer();
-      m_viewer.setInput("myInput");
-      // events
-      m_viewer.addSelectionChangedListener(new ISelectionChangedListener() {
-        @Override
-        public void selectionChanged(SelectionChangedEvent event) {
-          onSelectionChanged();
-        }
-      });
-      m_viewer.addDoubleClickListener(new IDoubleClickListener() {
-        @Override
-        public void doubleClick(DoubleClickEvent event) {
-          if (m_editCategoryButton.isEnabled()) {
-            editCategory();
-          }
-        }
-      });
-      // DND
-      setupDragAndDropSupport();
-    }
-    // buttons
-    {
-      Composite buttonsComposite = new Composite(container, SWT.NONE);
-      GridDataFactory.create(buttonsComposite).alignVT();
-      GridLayoutFactory.create(buttonsComposite).noMargins();
-      {
-        m_newCategoryButton = new Button(buttonsComposite, SWT.NONE);
-        GridDataFactory.create(m_newCategoryButton).grabH().fillH();
-        m_newCategoryButton.setText(ModelMessages.CategoriesAndViewsDialog_newCategoryButton);
-        m_newCategoryButton.addListener(SWT.Selection, new Listener() {
-          @Override
-          public void handleEvent(Event event) {
-            newCategory();
-          }
-        });
-      }
-      {
-        m_editCategoryButton = new Button(buttonsComposite, SWT.NONE);
-        GridDataFactory.create(m_editCategoryButton).grabH().fillH();
-        m_editCategoryButton.setText(ModelMessages.CategoriesAndViewsDialog_editCategoryButton);
-        m_editCategoryButton.addListener(SWT.Selection, new Listener() {
-          @Override
-          public void handleEvent(Event event) {
-            editCategory();
-          }
-        });
-      }
-      {
-        m_removeCategoryButton = new Button(buttonsComposite, SWT.NONE);
-        GridDataFactory.create(m_removeCategoryButton).grabH().fillH();
-        m_removeCategoryButton.setText(ModelMessages.CategoriesAndViewsDialog_removeCategoryButton);
-        m_removeCategoryButton.addListener(SWT.Selection, new Listener() {
-          @Override
-          public void handleEvent(Event event) {
-            removeCategory();
-          }
-        });
-      }
-    }
-    // hint label
-    {
-      Label label = new Label(container, SWT.WRAP);
-      GridDataFactory.create(label).grabH().fillH().spanH(2).hintHC(60);
-      label.setText(ModelMessages.CategoriesAndViewsDialog_hintText);
-    }
-    // done
-    return container;
-  }
-
-  @Override
-  protected void configureShell(Shell newShell) {
-    super.configureShell(newShell);
-    newShell.setText(ModelMessages.CategoriesAndViewsDialog_title);
-  }
-
-  @Override
-  protected void createButtonsForButtonBar(Composite parent) {
-    createButton(parent, IDialogConstants.OK_ID, IDialogConstants.CLOSE_LABEL, false);
-  }
-
-  /**
-   * {@link IPluginElement#equals(Object)} has bug, see
-   * https://bugs.eclipse.org/bugs/show_bug.cgi?id=259761 So we have to use our own
-   * {@link IElementComparer}.
-   */
-  private void setPluginElementComparer() {
-    m_viewer.setComparer(new IElementComparer() {
-      @Override
-      public int hashCode(Object element) {
-        return 0;
-      }
-
-      @Override
-      public boolean equals(Object a, Object b) {
-        if (a instanceof IPluginElement && b instanceof IPluginElement) {
-          IPluginElement elementA = (IPluginElement) a;
-          IPluginElement elementB = (IPluginElement) b;
-          String idA = PdeUtils.getAttribute(elementA, "id");
-          String idB = PdeUtils.getAttribute(elementB, "id");
-          return ObjectUtils.equals(idA, idB);
-        }
-        return a == null ? b == null : a.equals(b);
-      }
-    });
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Views drag and drop
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void setupDragAndDropSupport() {
-    final IPluginElement dragElement[] = new IPluginElement[1];
-    int ops = DND.DROP_MOVE;
-    Transfer[] transfers = new Transfer[]{EmptyTransfer.INSTANCE};
-    // drag
-    m_viewer.addDragSupport(ops, transfers, new DragSourceAdapter() {
-      @Override
-      public void dragStart(DragSourceEvent event) {
-        IStructuredSelection selection = (IStructuredSelection) m_viewer.getSelection();
-        if (selection.isEmpty() || !(selection.getFirstElement() instanceof IPluginElement)) {
-          event.doit = false;
-          return;
-        }
-        dragElement[0] = (IPluginElement) selection.getFirstElement();
-        event.doit = dragElement[0].getName().equals("view");
-      }
-
-      @Override
-      public void dragSetData(DragSourceEvent event) {
-      }
-
-      @Override
-      public void dragFinished(DragSourceEvent event) {
-      }
-    });
-    // drop
-    ViewerDropAdapter adapter = new ViewerDropAdapter(m_viewer) {
-      private int m_location;
-      private Object m_target;
-
-      @Override
-      protected int determineLocation(DropTargetEvent event) {
-        m_location = super.determineLocation(event);
-        if (m_location == LOCATION_AFTER || m_location == LOCATION_BEFORE) {
-          m_location = LOCATION_ON;
-        }
-        return m_location;
-      }
-
-      @Override
-      public boolean validateDrop(Object target, int operation, TransferData transferType) {
-        m_target = target;
-        // check for category "other"
-        if (target == OTHER_CATEGORY) {
-          return true;
-        }
-        // check for some category
-        if (target instanceof IPluginElement) {
-          IPluginElement targetElement = (IPluginElement) target;
-          return isCategoryElement(targetElement);
-        }
-        //
-        return false;
-      }
-
-      @Override
-      public boolean performDrop(Object data) {
-        // update "category" attribute of moved "view"
-        ExecutionUtils.runLog(new RunnableEx() {
-          @Override
-          public void run() throws Exception {
-            if (m_target == OTHER_CATEGORY) {
-              m_utils.setAttribute(dragElement[0], "category", null);
-            } else if (m_target instanceof IPluginElement) {
-              IPluginElement targetElement = (IPluginElement) m_target;
-              String categoryId = PdeUtils.getAttribute(targetElement, "id");
-              m_utils.setAttribute(dragElement[0], "category", categoryId);
-            }
-          }
-        });
-        // show and select dragged object
-        {
-          m_viewer.refresh();
-          m_viewer.setExpandedState(m_target, true);
-          m_viewer.setSelection(new StructuredSelection(dragElement[0]));
-        }
-        return true;
-      }
-    };
-    adapter.setFeedbackEnabled(true);
-    m_viewer.addDropSupport(ops | DND.DROP_DEFAULT, transfers, adapter);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Events handling
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void onSelectionChanged() {
-    m_editCategoryButton.setEnabled(false);
-    m_removeCategoryButton.setEnabled(false);
-    //
-    Object selectedObject = getSelectedObject();
-    if (isCategoryObject(selectedObject)) {
-      m_editCategoryButton.setEnabled(true);
-      m_removeCategoryButton.setEnabled(!m_contentProvider.hasChildren(selectedObject));
-    }
-  }
-
-  private void newCategory() {
-    InputDialog inputDialog = new InputDialog(getShell(),
-        ModelMessages.CategoriesAndViewsDialog_newCategoryTitle,
-        ModelMessages.CategoriesAndViewsDialog_newCategoryMessage,
-        "",
-        null);
-    if (inputDialog.open() != OK) {
-      return;
-    }
-    //
-    final String categoryName = inputDialog.getValue();
-    ExecutionUtils.runLog(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        String id = m_utils.generateUniqueID(m_utils.getProject().getName() + ".category");
-        IPluginElement category = m_utils.createViewCategoryElement(id, categoryName);
-        // select created category
-        m_viewer.refresh();
-        m_viewer.setSelection(new StructuredSelection(category));
-      }
-    });
-  }
-
-  private void editCategory() {
-    final IPluginElement category = (IPluginElement) getSelectedObject();
-    // ask new name
-    final String newName;
-    {
-      String oldName = PdeUtils.getAttribute(category, "name");
-      InputDialog inputDialog = new InputDialog(getShell(),
-          ModelMessages.CategoriesAndViewsDialog_editCategoryTitle,
-          ModelMessages.CategoriesAndViewsDialog_editCategoryMessage,
-          oldName,
-          null);
-      if (inputDialog.open() != OK) {
-        return;
-      }
-      newName = inputDialog.getValue();
-    }
-    // update category
-    ExecutionUtils.runLog(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        m_utils.setAttribute(category, "name", newName);
-      }
-    });
-    // show modifications
-    m_viewer.refresh();
-  }
-
-  private void removeCategory() {
-    IStructuredSelection selection = (IStructuredSelection) m_viewer.getSelection();
-    final IPluginElement element = (IPluginElement) selection.getFirstElement();
-    // ask confirmation
-    {
-      String messages = MessageFormat.format(
-          ModelMessages.CategoriesAndViewsDialog_removeCategoryConfirmationMessage,
-          PdeUtils.getAttribute(element, "name"));
-      if (!MessageDialog.openConfirm(
-          getShell(),
-          ModelMessages.CategoriesAndViewsDialog_removeCategoryConfirmationText,
-          messages)) {
-        return;
-      }
-    }
-    // remove
-    ExecutionUtils.runLog(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        m_utils.removeElement(element);
-      }
-    });
-    // refresh
-    m_viewer.refresh();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Content provider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private class ViewsContentProvider implements IStructuredContentProvider, ITreeContentProvider {
-    private List<IPluginElement> m_views;
-    private List<IPluginElement> m_categories;
-
-    @Override
-    public Object[] getElements(Object inputElement) {
-      m_views = m_utils.getExtensionElements("org.eclipse.ui.views", "view");
-      m_categories = m_utils.getExtensionElements("org.eclipse.ui.views", "category");
-      return ArrayUtils.add(m_categories.toArray(), OTHER_CATEGORY);
-    }
-
-    @Override
-    public Object[] getChildren(Object parentElement) {
-      List<IPluginElement> categoryViews = Lists.newArrayList();
-      //
-      if (parentElement == OTHER_CATEGORY) {
-        for (IPluginElement view : m_views) {
-          String viewCategoryId = PdeUtils.getAttribute(view, "category");
-          if (StringUtils.isEmpty(viewCategoryId)) {
-            categoryViews.add(view);
-          }
-        }
-      } else if (parentElement instanceof IPluginElement) {
-        IPluginElement pluginElement = (IPluginElement) parentElement;
-        if (isCategoryElement(pluginElement)) {
-          String thisCategoryId = PdeUtils.getAttribute(pluginElement, "id");
-          for (IPluginElement view : m_views) {
-            String viewCategoryId = PdeUtils.getAttribute(view, "category");
-            if (thisCategoryId.equals(viewCategoryId)) {
-              categoryViews.add(view);
-            }
-          }
-        }
-      }
-      //
-      return categoryViews.toArray();
-    }
-
-    @Override
-    public Object getParent(Object element) {
-      if (element instanceof IPluginElement) {
-        IPluginElement view = (IPluginElement) element;
-        String viewCategoryId = PdeUtils.getAttribute(view, "category");
-        // check for category "other"
-        if (StringUtils.isEmpty(viewCategoryId)) {
-          return OTHER_CATEGORY;
-        }
-        // find category with given id
-        for (IPluginElement category : m_categories) {
-          if (ObjectUtils.equals(PdeUtils.getAttribute(category, "id"), viewCategoryId)) {
-            return category;
-          }
-        }
-      }
-      return null;
-    }
-
-    @Override
-    public boolean hasChildren(Object element) {
-      return getChildren(element).length > 0;
-    }
-
-    @Override
-    public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
-    }
-
-    @Override
-    public void dispose() {
-    }
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Label provider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private class ViewsLabelProvider extends LabelProvider {
-    @Override
-    public String getText(Object element) {
-      if (element == OTHER_CATEGORY) {
-        return "Other";
-      }
-      //
-      IPluginElement pluginElement = (IPluginElement) element;
-      if (isCategoryElement(pluginElement)) {
-        return PdeUtils.getAttribute(pluginElement, "name");
-      } else if (pluginElement.getName().equals("view")) {
-        return PdeUtils.getAttribute(pluginElement, "name");
-      }
-      return super.getText(element);
-    }
-
-    @Override
-    public Image getImage(Object element) {
-      if (element == OTHER_CATEGORY) {
-        return DesignerPlugin.getImage("folder_open.gif");
-      }
-      //
-      IPluginElement pluginElement = (IPluginElement) element;
-      if (isCategoryElement(pluginElement)) {
-        return DesignerPlugin.getImage("folder_open.gif");
-      }
-      if (pluginElement.getName().equals("view")) {
-        return PdeUtils.getElementIcon(pluginElement, "icon", null);
-      }
-      return null;
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Object getSelectedObject() {
-    IStructuredSelection selection = (IStructuredSelection) m_viewer.getSelection();
-    return selection.getFirstElement();
-  }
-
-  private static boolean isCategoryObject(Object o) {
-    if (o instanceof IPluginElement) {
-      IPluginElement element = (IPluginElement) o;
-      return element.getName().equals("category");
-    }
-    return false;
-  }
-
-  private static boolean isCategoryElement(IPluginElement element) {
-    return element.getName().equals("category");
-  }
+	private static final Object OTHER_CATEGORY = new Object();
+	private final PdeUtils m_utils;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI fields
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private TreeViewer m_viewer;
+	private ViewsContentProvider m_contentProvider;
+	private Tree m_tree;
+	private Button m_newCategoryButton;
+	private Button m_editCategoryButton;
+	private Button m_removeCategoryButton;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CategoriesAndViewsDialog(Shell parentShell, PdeUtils utils) {
+		super(parentShell, Activator.getDefault());
+		m_utils = utils;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI creation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Control createDialogArea(Composite parent) {
+		Composite container = (Composite) super.createDialogArea(parent);
+		GridLayoutFactory.create(container).columns(2);
+		// title label
+		{
+			Label label = new Label(container, SWT.NONE);
+			GridDataFactory.create(label).spanH(2);
+			label.setText(ModelMessages.CategoriesAndViewsDialog_viewerTitle);
+		}
+		// viewer with categories/views
+		{
+			m_viewer = new TreeViewer(container, SWT.BORDER);
+			m_tree = m_viewer.getTree();
+			GridDataFactory.create(m_tree).grab().fill().hintC(50, 20);
+			m_contentProvider = new ViewsContentProvider();
+			m_viewer.setContentProvider(m_contentProvider);
+			m_viewer.setLabelProvider(new ViewsLabelProvider());
+			m_viewer.setComparator(new ViewerComparator());
+			setPluginElementComparer();
+			m_viewer.setInput("myInput");
+			// events
+			m_viewer.addSelectionChangedListener(new ISelectionChangedListener() {
+				@Override
+				public void selectionChanged(SelectionChangedEvent event) {
+					onSelectionChanged();
+				}
+			});
+			m_viewer.addDoubleClickListener(new IDoubleClickListener() {
+				@Override
+				public void doubleClick(DoubleClickEvent event) {
+					if (m_editCategoryButton.isEnabled()) {
+						editCategory();
+					}
+				}
+			});
+			// DND
+			setupDragAndDropSupport();
+		}
+		// buttons
+		{
+			Composite buttonsComposite = new Composite(container, SWT.NONE);
+			GridDataFactory.create(buttonsComposite).alignVT();
+			GridLayoutFactory.create(buttonsComposite).noMargins();
+			{
+				m_newCategoryButton = new Button(buttonsComposite, SWT.NONE);
+				GridDataFactory.create(m_newCategoryButton).grabH().fillH();
+				m_newCategoryButton.setText(ModelMessages.CategoriesAndViewsDialog_newCategoryButton);
+				m_newCategoryButton.addListener(SWT.Selection, new Listener() {
+					@Override
+					public void handleEvent(Event event) {
+						newCategory();
+					}
+				});
+			}
+			{
+				m_editCategoryButton = new Button(buttonsComposite, SWT.NONE);
+				GridDataFactory.create(m_editCategoryButton).grabH().fillH();
+				m_editCategoryButton.setText(ModelMessages.CategoriesAndViewsDialog_editCategoryButton);
+				m_editCategoryButton.addListener(SWT.Selection, new Listener() {
+					@Override
+					public void handleEvent(Event event) {
+						editCategory();
+					}
+				});
+			}
+			{
+				m_removeCategoryButton = new Button(buttonsComposite, SWT.NONE);
+				GridDataFactory.create(m_removeCategoryButton).grabH().fillH();
+				m_removeCategoryButton.setText(ModelMessages.CategoriesAndViewsDialog_removeCategoryButton);
+				m_removeCategoryButton.addListener(SWT.Selection, new Listener() {
+					@Override
+					public void handleEvent(Event event) {
+						removeCategory();
+					}
+				});
+			}
+		}
+		// hint label
+		{
+			Label label = new Label(container, SWT.WRAP);
+			GridDataFactory.create(label).grabH().fillH().spanH(2).hintHC(60);
+			label.setText(ModelMessages.CategoriesAndViewsDialog_hintText);
+		}
+		// done
+		return container;
+	}
+
+	@Override
+	protected void configureShell(Shell newShell) {
+		super.configureShell(newShell);
+		newShell.setText(ModelMessages.CategoriesAndViewsDialog_title);
+	}
+
+	@Override
+	protected void createButtonsForButtonBar(Composite parent) {
+		createButton(parent, IDialogConstants.OK_ID, IDialogConstants.CLOSE_LABEL, false);
+	}
+
+	/**
+	 * {@link IPluginElement#equals(Object)} has bug, see
+	 * https://bugs.eclipse.org/bugs/show_bug.cgi?id=259761 So we have to use our own
+	 * {@link IElementComparer}.
+	 */
+	private void setPluginElementComparer() {
+		m_viewer.setComparer(new IElementComparer() {
+			@Override
+			public int hashCode(Object element) {
+				return 0;
+			}
+
+			@Override
+			public boolean equals(Object a, Object b) {
+				if (a instanceof IPluginElement && b instanceof IPluginElement) {
+					IPluginElement elementA = (IPluginElement) a;
+					IPluginElement elementB = (IPluginElement) b;
+					String idA = PdeUtils.getAttribute(elementA, "id");
+					String idB = PdeUtils.getAttribute(elementB, "id");
+					return ObjectUtils.equals(idA, idB);
+				}
+				return a == null ? b == null : a.equals(b);
+			}
+		});
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Views drag and drop
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void setupDragAndDropSupport() {
+		final IPluginElement dragElement[] = new IPluginElement[1];
+		int ops = DND.DROP_MOVE;
+		Transfer[] transfers = new Transfer[]{EmptyTransfer.INSTANCE};
+		// drag
+		m_viewer.addDragSupport(ops, transfers, new DragSourceAdapter() {
+			@Override
+			public void dragStart(DragSourceEvent event) {
+				IStructuredSelection selection = (IStructuredSelection) m_viewer.getSelection();
+				if (selection.isEmpty() || !(selection.getFirstElement() instanceof IPluginElement)) {
+					event.doit = false;
+					return;
+				}
+				dragElement[0] = (IPluginElement) selection.getFirstElement();
+				event.doit = dragElement[0].getName().equals("view");
+			}
+
+			@Override
+			public void dragSetData(DragSourceEvent event) {
+			}
+
+			@Override
+			public void dragFinished(DragSourceEvent event) {
+			}
+		});
+		// drop
+		ViewerDropAdapter adapter = new ViewerDropAdapter(m_viewer) {
+			private int m_location;
+			private Object m_target;
+
+			@Override
+			protected int determineLocation(DropTargetEvent event) {
+				m_location = super.determineLocation(event);
+				if (m_location == LOCATION_AFTER || m_location == LOCATION_BEFORE) {
+					m_location = LOCATION_ON;
+				}
+				return m_location;
+			}
+
+			@Override
+			public boolean validateDrop(Object target, int operation, TransferData transferType) {
+				m_target = target;
+				// check for category "other"
+				if (target == OTHER_CATEGORY) {
+					return true;
+				}
+				// check for some category
+				if (target instanceof IPluginElement) {
+					IPluginElement targetElement = (IPluginElement) target;
+					return isCategoryElement(targetElement);
+				}
+				//
+				return false;
+			}
+
+			@Override
+			public boolean performDrop(Object data) {
+				// update "category" attribute of moved "view"
+				ExecutionUtils.runLog(new RunnableEx() {
+					@Override
+					public void run() throws Exception {
+						if (m_target == OTHER_CATEGORY) {
+							m_utils.setAttribute(dragElement[0], "category", null);
+						} else if (m_target instanceof IPluginElement) {
+							IPluginElement targetElement = (IPluginElement) m_target;
+							String categoryId = PdeUtils.getAttribute(targetElement, "id");
+							m_utils.setAttribute(dragElement[0], "category", categoryId);
+						}
+					}
+				});
+				// show and select dragged object
+				{
+					m_viewer.refresh();
+					m_viewer.setExpandedState(m_target, true);
+					m_viewer.setSelection(new StructuredSelection(dragElement[0]));
+				}
+				return true;
+			}
+		};
+		adapter.setFeedbackEnabled(true);
+		m_viewer.addDropSupport(ops | DND.DROP_DEFAULT, transfers, adapter);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Events handling
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void onSelectionChanged() {
+		m_editCategoryButton.setEnabled(false);
+		m_removeCategoryButton.setEnabled(false);
+		//
+		Object selectedObject = getSelectedObject();
+		if (isCategoryObject(selectedObject)) {
+			m_editCategoryButton.setEnabled(true);
+			m_removeCategoryButton.setEnabled(!m_contentProvider.hasChildren(selectedObject));
+		}
+	}
+
+	private void newCategory() {
+		InputDialog inputDialog = new InputDialog(getShell(),
+				ModelMessages.CategoriesAndViewsDialog_newCategoryTitle,
+				ModelMessages.CategoriesAndViewsDialog_newCategoryMessage,
+				"",
+				null);
+		if (inputDialog.open() != OK) {
+			return;
+		}
+		//
+		final String categoryName = inputDialog.getValue();
+		ExecutionUtils.runLog(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				String id = m_utils.generateUniqueID(m_utils.getProject().getName() + ".category");
+				IPluginElement category = m_utils.createViewCategoryElement(id, categoryName);
+				// select created category
+				m_viewer.refresh();
+				m_viewer.setSelection(new StructuredSelection(category));
+			}
+		});
+	}
+
+	private void editCategory() {
+		final IPluginElement category = (IPluginElement) getSelectedObject();
+		// ask new name
+		final String newName;
+		{
+			String oldName = PdeUtils.getAttribute(category, "name");
+			InputDialog inputDialog = new InputDialog(getShell(),
+					ModelMessages.CategoriesAndViewsDialog_editCategoryTitle,
+					ModelMessages.CategoriesAndViewsDialog_editCategoryMessage,
+					oldName,
+					null);
+			if (inputDialog.open() != OK) {
+				return;
+			}
+			newName = inputDialog.getValue();
+		}
+		// update category
+		ExecutionUtils.runLog(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				m_utils.setAttribute(category, "name", newName);
+			}
+		});
+		// show modifications
+		m_viewer.refresh();
+	}
+
+	private void removeCategory() {
+		IStructuredSelection selection = (IStructuredSelection) m_viewer.getSelection();
+		final IPluginElement element = (IPluginElement) selection.getFirstElement();
+		// ask confirmation
+		{
+			String messages = MessageFormat.format(
+					ModelMessages.CategoriesAndViewsDialog_removeCategoryConfirmationMessage,
+					PdeUtils.getAttribute(element, "name"));
+			if (!MessageDialog.openConfirm(
+					getShell(),
+					ModelMessages.CategoriesAndViewsDialog_removeCategoryConfirmationText,
+					messages)) {
+				return;
+			}
+		}
+		// remove
+		ExecutionUtils.runLog(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				m_utils.removeElement(element);
+			}
+		});
+		// refresh
+		m_viewer.refresh();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Content provider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private class ViewsContentProvider implements IStructuredContentProvider, ITreeContentProvider {
+		private List<IPluginElement> m_views;
+		private List<IPluginElement> m_categories;
+
+		@Override
+		public Object[] getElements(Object inputElement) {
+			m_views = m_utils.getExtensionElements("org.eclipse.ui.views", "view");
+			m_categories = m_utils.getExtensionElements("org.eclipse.ui.views", "category");
+			return ArrayUtils.add(m_categories.toArray(), OTHER_CATEGORY);
+		}
+
+		@Override
+		public Object[] getChildren(Object parentElement) {
+			List<IPluginElement> categoryViews = Lists.newArrayList();
+			//
+			if (parentElement == OTHER_CATEGORY) {
+				for (IPluginElement view : m_views) {
+					String viewCategoryId = PdeUtils.getAttribute(view, "category");
+					if (StringUtils.isEmpty(viewCategoryId)) {
+						categoryViews.add(view);
+					}
+				}
+			} else if (parentElement instanceof IPluginElement) {
+				IPluginElement pluginElement = (IPluginElement) parentElement;
+				if (isCategoryElement(pluginElement)) {
+					String thisCategoryId = PdeUtils.getAttribute(pluginElement, "id");
+					for (IPluginElement view : m_views) {
+						String viewCategoryId = PdeUtils.getAttribute(view, "category");
+						if (thisCategoryId.equals(viewCategoryId)) {
+							categoryViews.add(view);
+						}
+					}
+				}
+			}
+			//
+			return categoryViews.toArray();
+		}
+
+		@Override
+		public Object getParent(Object element) {
+			if (element instanceof IPluginElement) {
+				IPluginElement view = (IPluginElement) element;
+				String viewCategoryId = PdeUtils.getAttribute(view, "category");
+				// check for category "other"
+				if (StringUtils.isEmpty(viewCategoryId)) {
+					return OTHER_CATEGORY;
+				}
+				// find category with given id
+				for (IPluginElement category : m_categories) {
+					if (ObjectUtils.equals(PdeUtils.getAttribute(category, "id"), viewCategoryId)) {
+						return category;
+					}
+				}
+			}
+			return null;
+		}
+
+		@Override
+		public boolean hasChildren(Object element) {
+			return getChildren(element).length > 0;
+		}
+
+		@Override
+		public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+		}
+
+		@Override
+		public void dispose() {
+		}
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Label provider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private class ViewsLabelProvider extends LabelProvider {
+		@Override
+		public String getText(Object element) {
+			if (element == OTHER_CATEGORY) {
+				return "Other";
+			}
+			//
+			IPluginElement pluginElement = (IPluginElement) element;
+			if (isCategoryElement(pluginElement)) {
+				return PdeUtils.getAttribute(pluginElement, "name");
+			} else if (pluginElement.getName().equals("view")) {
+				return PdeUtils.getAttribute(pluginElement, "name");
+			}
+			return super.getText(element);
+		}
+
+		@Override
+		public Image getImage(Object element) {
+			if (element == OTHER_CATEGORY) {
+				return DesignerPlugin.getImage("folder_open.gif");
+			}
+			//
+			IPluginElement pluginElement = (IPluginElement) element;
+			if (isCategoryElement(pluginElement)) {
+				return DesignerPlugin.getImage("folder_open.gif");
+			}
+			if (pluginElement.getName().equals("view")) {
+				return PdeUtils.getElementIcon(pluginElement, "icon", null);
+			}
+			return null;
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Object getSelectedObject() {
+		IStructuredSelection selection = (IStructuredSelection) m_viewer.getSelection();
+		return selection.getFirstElement();
+	}
+
+	private static boolean isCategoryObject(Object o) {
+		if (o instanceof IPluginElement) {
+			IPluginElement element = (IPluginElement) o;
+			return element.getName().equals("category");
+		}
+		return false;
+	}
+
+	private static boolean isCategoryElement(IPluginElement element) {
+		return element.getName().equals("category");
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/EditorPartInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/EditorPartInfo.java
index bd0f18319..e82ed0c32 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/EditorPartInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/EditorPartInfo.java
@@ -35,112 +35,112 @@
  * @coverage rcp.model.rcp
  */
 public class EditorPartInfo extends WorkbenchPartLikeInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public EditorPartInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-    contributeExtensionProperty();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public EditorPartInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+		contributeExtensionProperty();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Properties
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void contributeExtensionProperty() throws Exception {
-    new ExtensionPropertyHelper(this, "org.eclipse.ui.editors", "editor") {
-      @Override
-      protected Property[] createProperties() {
-        return new Property[]{
-            createStringProperty("name"),
-            createIconProperty("icon"),
-            createStringProperty("extensions"),
-            createBooleanProperty("default", false)};
-      }
-    };
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Properties
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void contributeExtensionProperty() throws Exception {
+		new ExtensionPropertyHelper(this, "org.eclipse.ui.editors", "editor") {
+			@Override
+			protected Property[] createProperties() {
+				return new Property[]{
+						createStringProperty("name"),
+						createIconProperty("icon"),
+						createStringProperty("extensions"),
+						createBooleanProperty("default", false)};
+			}
+		};
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Rendering
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void render() throws Exception {
-    setEditorSite();
-    super.render();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Rendering
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void render() throws Exception {
+		setEditorSite();
+		super.render();
+	}
 
-  private void setEditorSite() throws Exception {
-    ClassLoader editorLoader = JavaInfoUtils.getClassLoader(this);
-    Class<?> editorSiteClass = editorLoader.loadClass("org.eclipse.ui.IEditorSite");
-    Class<?> editorInputClass = editorLoader.loadClass("org.eclipse.ui.IEditorInput");
-    // create IEditorSite
-    Object editorSite =
-        Proxy.newProxyInstance(
-            editorLoader,
-            new Class<?>[]{editorSiteClass},
-            new InvocationHandler() {
-              @Override
-              public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
-                String signature = ReflectionUtils.getMethodSignature(method);
-                if (signature.equals("toString()")) {
-                  return "IEditorSite_stub";
-                }
-                if (signature.equals("hashCode()")) {
-                  return 0;
-                }
-                if (signature.equals("getId()")) {
-                  return getID();
-                }
-                if (signature.equals("getWorkbenchWindow()")) {
-                  return DesignerPlugin.getActiveWorkbenchWindow();
-                }
-                // IServiceLocator
-                if (signature.equals("hasService(java.lang.Class)")) {
-                  IServiceLocator serviceLocator = DesignerPlugin.getActiveWorkbenchWindow();
-                  return serviceLocator.hasService((Class<?>) args[0]);
-                }
-                if (signature.equals("getService(java.lang.Class)")) {
-                  IServiceLocator serviceLocator = DesignerPlugin.getActiveWorkbenchWindow();
-                  return serviceLocator.getService((Class<?>) args[0]);
-                }
-                // not implemented
-                throw new NotImplementedException(method.toString());
-              }
-            });
-    // create org.eclipse.ui.IEditorInput
-    Object editorInput =
-        Proxy.newProxyInstance(
-            editorLoader,
-            new Class<?>[]{editorInputClass},
-            new InvocationHandler() {
-              @Override
-              public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
-                Class<?> returnType = method.getReturnType();
-                return ReflectionUtils.getDefaultValue(returnType);
-              }
-            });
-    // call init(IEditorSite,IEditorInput)
-    ReflectionUtils.invokeMethod(
-        getObject(),
-        "init(org.eclipse.ui.IEditorSite,org.eclipse.ui.IEditorInput)",
-        editorSite,
-        editorInput);
-  }
+	private void setEditorSite() throws Exception {
+		ClassLoader editorLoader = JavaInfoUtils.getClassLoader(this);
+		Class<?> editorSiteClass = editorLoader.loadClass("org.eclipse.ui.IEditorSite");
+		Class<?> editorInputClass = editorLoader.loadClass("org.eclipse.ui.IEditorInput");
+		// create IEditorSite
+		Object editorSite =
+				Proxy.newProxyInstance(
+						editorLoader,
+						new Class<?>[]{editorSiteClass},
+						new InvocationHandler() {
+							@Override
+							public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
+								String signature = ReflectionUtils.getMethodSignature(method);
+								if (signature.equals("toString()")) {
+									return "IEditorSite_stub";
+								}
+								if (signature.equals("hashCode()")) {
+									return 0;
+								}
+								if (signature.equals("getId()")) {
+									return getID();
+								}
+								if (signature.equals("getWorkbenchWindow()")) {
+									return DesignerPlugin.getActiveWorkbenchWindow();
+								}
+								// IServiceLocator
+								if (signature.equals("hasService(java.lang.Class)")) {
+									IServiceLocator serviceLocator = DesignerPlugin.getActiveWorkbenchWindow();
+									return serviceLocator.hasService((Class<?>) args[0]);
+								}
+								if (signature.equals("getService(java.lang.Class)")) {
+									IServiceLocator serviceLocator = DesignerPlugin.getActiveWorkbenchWindow();
+									return serviceLocator.getService((Class<?>) args[0]);
+								}
+								// not implemented
+								throw new NotImplementedException(method.toString());
+							}
+						});
+		// create org.eclipse.ui.IEditorInput
+		Object editorInput =
+				Proxy.newProxyInstance(
+						editorLoader,
+						new Class<?>[]{editorInputClass},
+						new InvocationHandler() {
+							@Override
+							public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
+								Class<?> returnType = method.getReturnType();
+								return ReflectionUtils.getDefaultValue(returnType);
+							}
+						});
+		// call init(IEditorSite,IEditorInput)
+		ReflectionUtils.invokeMethod(
+				getObject(),
+				"init(org.eclipse.ui.IEditorSite,org.eclipse.ui.IEditorInput)",
+				editorSite,
+				editorInput);
+	}
 
-  @Override
-  protected String getGUIMethodName() {
-    return "createPartControl";
-  }
+	@Override
+	protected String getGUIMethodName() {
+		return "createPartControl";
+	}
 
-  @Override
-  protected void configureTabItem(CTabItem tabItem) throws Exception {
-    configureTabItem_fromExtension(tabItem, "EditorPart");
-  }
+	@Override
+	protected void configureTabItem(CTabItem tabItem) throws Exception {
+		configureTabItem_fromExtension(tabItem, "EditorPart");
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/ExtensionElementIconPropertyEditor.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/ExtensionElementIconPropertyEditor.java
index 2981e3592..7345eb86e 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/ExtensionElementIconPropertyEditor.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/ExtensionElementIconPropertyEditor.java
@@ -33,82 +33,82 @@
  * @coverage rcp.model.rcp
  */
 public final class ExtensionElementIconPropertyEditor extends TextDialogPropertyEditor {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final PropertyEditor INSTANCE = new ExtensionElementIconPropertyEditor();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final PropertyEditor INSTANCE = new ExtensionElementIconPropertyEditor();
 
-  private ExtensionElementIconPropertyEditor() {
-  }
+	private ExtensionElementIconPropertyEditor() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getText(Property property) throws Exception {
-    Object value = property.getValue();
-    if (value instanceof String) {
-      return (String) value;
-    } else {
-      return null;
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getText(Property property) throws Exception {
+		Object value = property.getValue();
+		if (value instanceof String) {
+			return (String) value;
+		} else {
+			return null;
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  @SuppressWarnings("unchecked")
-  protected void openDialog(Property _property) throws Exception {
-    ExtensionElementProperty<String> property = (ExtensionElementProperty<String>) _property;
-    IJavaProject javaProject = JavaCore.create(property.getProject());
-    // create dialog
-    ImageDialog imageDialog = new ImageDialog(javaProject);
-    // set input for dialog
-    {
-      String text = getText(property);
-      imageDialog.setInput(SinglePluginFileImagePage.ID, text);
-    }
-    // open dialog
-    if (imageDialog.open() == Window.OK) {
-      ImageInfo imageInfo = imageDialog.getImageInfo();
-      String[] data = (String[]) imageInfo.getData();
-      property.setValue(data[1]); // image path
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	@SuppressWarnings("unchecked")
+	protected void openDialog(Property _property) throws Exception {
+		ExtensionElementProperty<String> property = (ExtensionElementProperty<String>) _property;
+		IJavaProject javaProject = JavaCore.create(property.getProject());
+		// create dialog
+		ImageDialog imageDialog = new ImageDialog(javaProject);
+		// set input for dialog
+		{
+			String text = getText(property);
+			imageDialog.setInput(SinglePluginFileImagePage.ID, text);
+		}
+		// open dialog
+		if (imageDialog.open() == Window.OK) {
+			ImageInfo imageInfo = imageDialog.getImageInfo();
+			String[] data = (String[]) imageInfo.getData();
+			property.setValue(data[1]); // image path
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ImageDialog
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final class ImageDialog extends AbstractImageDialog {
-    private final IJavaProject m_javaProject;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ImageDialog
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final class ImageDialog extends AbstractImageDialog {
+		private final IJavaProject m_javaProject;
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    protected ImageDialog(IJavaProject javaProject) {
-      super(DesignerPlugin.getShell(), Activator.getDefault());
-      m_javaProject = javaProject;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		protected ImageDialog(IJavaProject javaProject) {
+			super(DesignerPlugin.getShell(), Activator.getDefault());
+			m_javaProject = javaProject;
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Pages
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    protected void addPages(Composite parent) {
-      addPage(new SinglePluginFileImagePage(parent, SWT.NONE, this, m_javaProject.getProject()));
-    }
-  }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Pages
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		protected void addPages(Composite parent) {
+			addPage(new SinglePluginFileImagePage(parent, SWT.NONE, this, m_javaProject.getProject()));
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/ExtensionElementProperty.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/ExtensionElementProperty.java
index 1484c18e7..7ead98ae8 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/ExtensionElementProperty.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/ExtensionElementProperty.java
@@ -29,160 +29,160 @@
  * @coverage rcp.model.rcp
  */
 public final class ExtensionElementProperty<T> extends Property {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Converters
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final Function<String, String> IDENTITY = Functions.identity();
-  public static final Function<Boolean, String> FROM_BOOLEAN = new Function<Boolean, String>() {
-    @Override
-    public String apply(Boolean from) {
-      return from.toString();
-    }
-  };
-  public static final Function<String, Boolean> TO_BOOLEAN = new Function<String, Boolean>() {
-    @Override
-    public Boolean apply(String from) {
-      return Boolean.parseBoolean(from);
-    }
-  };
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance fields
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final RunnableEx m_setValueListener;
-  private final String m_title;
-  private final IProject m_project;
-  private final PdeUtils m_utils;
-  private final String m_pointID;
-  private final String m_elementName;
-  private final String m_className;
-  private final String m_attributeName;
-  private final Function<T, String> m_fromValueConverter;
-  private final Function<String, T> m_toValueConverter;
-  private final Object m_defaultValue;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Converters
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final Function<String, String> IDENTITY = Functions.identity();
+	public static final Function<Boolean, String> FROM_BOOLEAN = new Function<Boolean, String>() {
+		@Override
+		public String apply(Boolean from) {
+			return from.toString();
+		}
+	};
+	public static final Function<String, Boolean> TO_BOOLEAN = new Function<String, Boolean>() {
+		@Override
+		public Boolean apply(String from) {
+			return Boolean.parseBoolean(from);
+		}
+	};
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance fields
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final RunnableEx m_setValueListener;
+	private final String m_title;
+	private final IProject m_project;
+	private final PdeUtils m_utils;
+	private final String m_pointID;
+	private final String m_elementName;
+	private final String m_className;
+	private final String m_attributeName;
+	private final Function<T, String> m_fromValueConverter;
+	private final Function<String, T> m_toValueConverter;
+	private final Object m_defaultValue;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ExtensionElementProperty(RunnableEx setValueListener,
-      PropertyEditor editor,
-      String title,
-      IProject project,
-      String pointID,
-      String elementName,
-      String extensionID,
-      String attributeName,
-      Function<T, String> fromValueConverter,
-      Function<String, T> toValueConverter,
-      Object defaultValue) {
-    super(editor);
-    m_setValueListener = setValueListener;
-    m_title = title;
-    m_project = project;
-    m_defaultValue = defaultValue;
-    m_utils = PdeUtils.get(project);
-    m_pointID = pointID;
-    m_elementName = elementName;
-    m_className = extensionID;
-    m_attributeName = attributeName;
-    m_fromValueConverter = fromValueConverter;
-    m_toValueConverter = toValueConverter;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ExtensionElementProperty(RunnableEx setValueListener,
+			PropertyEditor editor,
+			String title,
+			IProject project,
+			String pointID,
+			String elementName,
+			String extensionID,
+			String attributeName,
+			Function<T, String> fromValueConverter,
+			Function<String, T> toValueConverter,
+			Object defaultValue) {
+		super(editor);
+		m_setValueListener = setValueListener;
+		m_title = title;
+		m_project = project;
+		m_defaultValue = defaultValue;
+		m_utils = PdeUtils.get(project);
+		m_pointID = pointID;
+		m_elementName = elementName;
+		m_className = extensionID;
+		m_attributeName = attributeName;
+		m_fromValueConverter = fromValueConverter;
+		m_toValueConverter = toValueConverter;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getTitle() {
-    return m_title;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getTitle() {
+		return m_title;
+	}
 
-  @Override
-  public boolean isModified() throws Exception {
-    Object value = getValue();
-    return value != UNKNOWN_VALUE && !ObjectUtils.equals(value, m_defaultValue);
-  }
+	@Override
+	public boolean isModified() throws Exception {
+		Object value = getValue();
+		return value != UNKNOWN_VALUE && !ObjectUtils.equals(value, m_defaultValue);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Value
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Object getValue() throws Exception {
-    IPluginElement element = getElement();
-    if (element != null) {
-      String attributeValue = PdeUtils.getAttribute(element, m_attributeName);
-      if (attributeValue != null) {
-        return m_toValueConverter.apply(attributeValue);
-      }
-    }
-    return m_defaultValue;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Value
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Object getValue() throws Exception {
+		IPluginElement element = getElement();
+		if (element != null) {
+			String attributeValue = PdeUtils.getAttribute(element, m_attributeName);
+			if (attributeValue != null) {
+				return m_toValueConverter.apply(attributeValue);
+			}
+		}
+		return m_defaultValue;
+	}
 
-  @Override
-  @SuppressWarnings("unchecked")
-  public void setValue(Object value) throws Exception {
-    IPluginElement element = getElement();
-    if (element != null && !ObjectUtils.equals(value, getValue())) {
-      String attributeValue;
-      if (value == UNKNOWN_VALUE || ObjectUtils.equals(value, m_defaultValue)) {
-        attributeValue = null;
-      } else {
-        attributeValue = m_fromValueConverter.apply((T) value);
-      }
-      // set new attribute value
-      m_utils.setAttribute(element, m_attributeName, attributeValue);
-      // notify listener
-      if (m_setValueListener != null) {
-        m_setValueListener.run();
-      }
-    }
-  }
+	@Override
+	@SuppressWarnings("unchecked")
+	public void setValue(Object value) throws Exception {
+		IPluginElement element = getElement();
+		if (element != null && !ObjectUtils.equals(value, getValue())) {
+			String attributeValue;
+			if (value == UNKNOWN_VALUE || ObjectUtils.equals(value, m_defaultValue)) {
+				attributeValue = null;
+			} else {
+				attributeValue = m_fromValueConverter.apply((T) value);
+			}
+			// set new attribute value
+			m_utils.setAttribute(element, m_attributeName, attributeValue);
+			// notify listener
+			if (m_setValueListener != null) {
+				m_setValueListener.run();
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link PdeUtils} for accessing/editing <code>plugin.xml</code> file.
-   */
-  public PdeUtils getUtils() {
-    return m_utils;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link PdeUtils} for accessing/editing <code>plugin.xml</code> file.
+	 */
+	public PdeUtils getUtils() {
+		return m_utils;
+	}
 
-  /**
-   * @return the {@link IProject} of this {@link ExtensionElementProperty}.
-   */
-  public IProject getProject() {
-    return m_project;
-  }
+	/**
+	 * @return the {@link IProject} of this {@link ExtensionElementProperty}.
+	 */
+	public IProject getProject() {
+		return m_project;
+	}
 
-  /**
-   * @return <code>true</code> if this {@link ExtensionElementProperty} has corresponding
-   *         {@link IPluginElement}, so can show/change something.
-   */
-  public boolean hasElement() {
-    return getElement() != null;
-  }
+	/**
+	 * @return <code>true</code> if this {@link ExtensionElementProperty} has corresponding
+	 *         {@link IPluginElement}, so can show/change something.
+	 */
+	public boolean hasElement() {
+		return getElement() != null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link IPluginElement} corresponding to given extension parameters.
-   */
-  private IPluginElement getElement() {
-    return m_utils.getExtensionElementByClass(m_pointID, m_elementName, m_className);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link IPluginElement} corresponding to given extension parameters.
+	 */
+	private IPluginElement getElement() {
+		return m_utils.getExtensionElementByClass(m_pointID, m_elementName, m_className);
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/ExtensionPropertyHelper.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/ExtensionPropertyHelper.java
index 0b34a9437..bd39da0ca 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/ExtensionPropertyHelper.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/ExtensionPropertyHelper.java
@@ -37,120 +37,120 @@
  * @coverage rcp.model.rcp
  */
 public abstract class ExtensionPropertyHelper {
-  private final JavaInfo m_javaInfo;
-  private final IProject m_project;
-  private final String m_pointID;
-  private final String m_elementName;
+	private final JavaInfo m_javaInfo;
+	private final IProject m_project;
+	private final String m_pointID;
+	private final String m_elementName;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ExtensionPropertyHelper(JavaInfo javaInfo, String pointID, String elementName)
-      throws Exception {
-    m_javaInfo = javaInfo;
-    m_project = javaInfo.getEditor().getJavaProject().getProject();
-    m_pointID = pointID;
-    m_elementName = elementName;
-    m_javaInfo.addBroadcastListener(new JavaInfoAddProperties() {
-      @Override
-      public void invoke(JavaInfo javaInfo, List<Property> properties) throws Exception {
-        appendExtensionProperty(properties);
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ExtensionPropertyHelper(JavaInfo javaInfo, String pointID, String elementName)
+			throws Exception {
+		m_javaInfo = javaInfo;
+		m_project = javaInfo.getEditor().getJavaProject().getProject();
+		m_pointID = pointID;
+		m_elementName = elementName;
+		m_javaInfo.addBroadcastListener(new JavaInfoAddProperties() {
+			@Override
+			public void invoke(JavaInfo javaInfo, List<Property> properties) throws Exception {
+				appendExtensionProperty(properties);
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Properties
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private ComplexProperty m_extensionProperty;
-  private final RunnableEx m_refreshListener = new RunnableEx() {
-    @Override
-    public void run() throws Exception {
-      m_javaInfo.refresh();
-    }
-  };
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Properties
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private ComplexProperty m_extensionProperty;
+	private final RunnableEx m_refreshListener = new RunnableEx() {
+		@Override
+		public void run() throws Exception {
+			m_javaInfo.refresh();
+		}
+	};
 
-  /**
-   * This method is invoked one time after reparse to create {@link Property}'s using method
-   * {@link #createAttributeProperty(PropertyEditor, String)}.
-   */
-  protected abstract Property[] createProperties();
+	/**
+	 * This method is invoked one time after reparse to create {@link Property}'s using method
+	 * {@link #createAttributeProperty(PropertyEditor, String)}.
+	 */
+	protected abstract Property[] createProperties();
 
-  /**
-   * Appends {@link ComplexProperty} for properties from <code>plugin.xml</code>.
-   */
-  private void appendExtensionProperty(List<Property> properties) throws Exception {
-    // ensure ComplexProperty
-    if (m_extensionProperty == null) {
-      Property[] extensionProperties = createProperties();
-      m_extensionProperty =
-          new ComplexProperty("Extension", "(Extension properties)", extensionProperties);
-      m_extensionProperty.setCategory(PropertyCategory.system(9));
-    }
-    // OK, add ComplexProperty
-    if (((ExtensionElementProperty<?>) m_extensionProperty.getProperties()[0]).hasElement()) {
-      properties.add(m_extensionProperty);
-    }
-  }
+	/**
+	 * Appends {@link ComplexProperty} for properties from <code>plugin.xml</code>.
+	 */
+	private void appendExtensionProperty(List<Property> properties) throws Exception {
+		// ensure ComplexProperty
+		if (m_extensionProperty == null) {
+			Property[] extensionProperties = createProperties();
+			m_extensionProperty =
+					new ComplexProperty("Extension", "(Extension properties)", extensionProperties);
+			m_extensionProperty.setCategory(PropertyCategory.system(9));
+		}
+		// OK, add ComplexProperty
+		if (((ExtensionElementProperty<?>) m_extensionProperty.getProperties()[0]).hasElement()) {
+			properties.add(m_extensionProperty);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Extension property creation utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected final Property createBooleanProperty(String attributeName, boolean defaultValue) {
-    return createAttributeProperty(
-        BooleanPropertyEditor.INSTANCE,
-        attributeName,
-        ExtensionElementProperty.FROM_BOOLEAN,
-        ExtensionElementProperty.TO_BOOLEAN,
-        defaultValue);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Extension property creation utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected final Property createBooleanProperty(String attributeName, boolean defaultValue) {
+		return createAttributeProperty(
+				BooleanPropertyEditor.INSTANCE,
+				attributeName,
+				ExtensionElementProperty.FROM_BOOLEAN,
+				ExtensionElementProperty.TO_BOOLEAN,
+				defaultValue);
+	}
 
-  protected final Property createStringProperty(String attributeName) {
-    return createAttributeProperty(StringPropertyEditor.INSTANCE, attributeName);
-  }
+	protected final Property createStringProperty(String attributeName) {
+		return createAttributeProperty(StringPropertyEditor.INSTANCE, attributeName);
+	}
 
-  protected final Property createIconProperty(String attributeName) {
-    return createAttributeProperty(ExtensionElementIconPropertyEditor.INSTANCE, attributeName);
-  }
+	protected final Property createIconProperty(String attributeName) {
+		return createAttributeProperty(ExtensionElementIconPropertyEditor.INSTANCE, attributeName);
+	}
 
-  /**
-   * @return the {@link ExtensionElementProperty} for given attribute of extension element.
-   */
-  protected final <T> Property createAttributeProperty(PropertyEditor editor, String attributeName) {
-    return createAttributeProperty(
-        editor,
-        attributeName,
-        ExtensionElementProperty.IDENTITY,
-        ExtensionElementProperty.IDENTITY,
-        Property.UNKNOWN_VALUE);
-  }
+	/**
+	 * @return the {@link ExtensionElementProperty} for given attribute of extension element.
+	 */
+	protected final <T> Property createAttributeProperty(PropertyEditor editor, String attributeName) {
+		return createAttributeProperty(
+				editor,
+				attributeName,
+				ExtensionElementProperty.IDENTITY,
+				ExtensionElementProperty.IDENTITY,
+				Property.UNKNOWN_VALUE);
+	}
 
-  /**
-   * @return the {@link ExtensionElementProperty} for given attribute of extension element.
-   */
-  protected final <T> Property createAttributeProperty(PropertyEditor editor,
-      String attributeName,
-      Function<T, String> fromValueConverter,
-      Function<String, T> toValueConverter,
-      Object defaultValue) {
-    TypeDeclaration typeDeclaration = JavaInfoUtils.getTypeDeclaration(m_javaInfo);
-    String className = AstNodeUtils.getFullyQualifiedName(typeDeclaration, true);
-    return new ExtensionElementProperty<T>(m_refreshListener,
-        editor,
-        attributeName,
-        m_project,
-        m_pointID,
-        m_elementName,
-        className,
-        attributeName,
-        fromValueConverter,
-        toValueConverter,
-        defaultValue);
-  }
+	/**
+	 * @return the {@link ExtensionElementProperty} for given attribute of extension element.
+	 */
+	protected final <T> Property createAttributeProperty(PropertyEditor editor,
+			String attributeName,
+			Function<T, String> fromValueConverter,
+			Function<String, T> toValueConverter,
+			Object defaultValue) {
+		TypeDeclaration typeDeclaration = JavaInfoUtils.getTypeDeclaration(m_javaInfo);
+		String className = AstNodeUtils.getFullyQualifiedName(typeDeclaration, true);
+		return new ExtensionElementProperty<T>(m_refreshListener,
+				editor,
+				attributeName,
+				m_project,
+				m_pointID,
+				m_elementName,
+				className,
+				attributeName,
+				fromValueConverter,
+				toValueConverter,
+				defaultValue);
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/PageInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/PageInfo.java
index 731cdc74e..f728807d4 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/PageInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/PageInfo.java
@@ -33,56 +33,56 @@
  * @coverage rcp.model.rcp
  */
 public final class PageInfo extends ViewPartLikeInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public PageInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public PageInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Rendering
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getGUIMethodName() {
-    return "createControl";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Rendering
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getGUIMethodName() {
+		return "createControl";
+	}
 
-  @Override
-  protected void configureTabItem(CTabItem tabItem) throws Exception {
-    tabItem.setImage(getDescription().getIcon());
-    tabItem.setText(ModelMessages.PageInfo_title);
-  }
+	@Override
+	protected void configureTabItem(CTabItem tabItem) throws Exception {
+		tabItem.setImage(getDescription().getIcon());
+		tabItem.setText(ModelMessages.PageInfo_title);
+	}
 
-  @Override
-  protected void applyActionBars() throws Exception {
-    ClassLoader editorLoader = JavaInfoUtils.getClassLoader(this);
-    Class<?> pageSiteClass = editorLoader.loadClass("org.eclipse.ui.part.IPageSite");
-    // create IPageSite
-    final Object pageSite =
-        Proxy.newProxyInstance(
-            editorLoader,
-            new Class<?>[]{pageSiteClass},
-            new InvocationHandler() {
-              @Override
-              public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
-                String signature = ReflectionUtils.getMethodSignature(method);
-                if (signature.equals("getActionBars()")) {
-                  return m_actionBars;
-                }
-                if (signature.equals("setSelectionProvider(org.eclipse.jface.viewers.ISelectionProvider)")) {
-                  return null;
-                }
-                throw new NotImplementedException();
-              }
-            });
-    // call init(IPageSite)
-    ReflectionUtils.invokeMethod(getObject(), "init(org.eclipse.ui.part.IPageSite)", pageSite);
-  }
+	@Override
+	protected void applyActionBars() throws Exception {
+		ClassLoader editorLoader = JavaInfoUtils.getClassLoader(this);
+		Class<?> pageSiteClass = editorLoader.loadClass("org.eclipse.ui.part.IPageSite");
+		// create IPageSite
+		final Object pageSite =
+				Proxy.newProxyInstance(
+						editorLoader,
+						new Class<?>[]{pageSiteClass},
+						new InvocationHandler() {
+							@Override
+							public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
+								String signature = ReflectionUtils.getMethodSignature(method);
+								if (signature.equals("getActionBars()")) {
+									return m_actionBars;
+								}
+								if (signature.equals("setSelectionProvider(org.eclipse.jface.viewers.ISelectionProvider)")) {
+									return null;
+								}
+								throw new NotImplementedException();
+							}
+						});
+		// call init(IPageSite)
+		ReflectionUtils.invokeMethod(getObject(), "init(org.eclipse.ui.part.IPageSite)", pageSite);
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/PdeUtils.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/PdeUtils.java
index f08a2dcc9..588b70fc0 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/PdeUtils.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/PdeUtils.java
@@ -72,1101 +72,1101 @@
  */
 @SuppressWarnings("restriction")
 public final class PdeUtils {
-  public final static String BUNDLE_FILENAME_DESCRIPTOR = "META-INF/MANIFEST.MF";
-  public final static String BUILD_FILENAME_DESCRIPTOR = "build.properties";
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final Map<IProject, PdeUtils> m_projectToUtilitiesMap = Maps.newHashMap();
-
-  /**
-   * @return the instance of {@link PdeUtils} for given {@link IProject}, existing from cache or
-   *         new.
-   */
-  public static PdeUtils get(IProject project) {
-    PdeUtils utilities = m_projectToUtilitiesMap.get(project);
-    if (utilities == null) {
-      utilities = new PdeUtils(project);
-      m_projectToUtilitiesMap.put(project, utilities);
-    }
-    return utilities;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance fields
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final IProject m_project;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private PdeUtils(IProject project) {
-    m_project = project;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return {@link IProject} that contains <code>plugin.xml</code> file.
-   */
-  public IProject getProject() {
-    return m_project;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final String PDE_NATURE_ID = "org.eclipse.pde.PluginNature";
-
-  /**
-   * @return <code>true</code> if {@link IProject} has PDE nature.
-   */
-  public static boolean hasPDENature(IProject project) {
-    return ProjectUtils.hasNature(project, PDE_NATURE_ID);
-  }
-
-  /**
-   * Ensures that <code>MANIFEST.MF</code> declares this bundle as <code>singleton</code>.
-   */
-  public void ensureSingleton() throws Exception {
-    IFile m_manifestFile = m_project.getFile(BUNDLE_FILENAME_DESCRIPTOR);
-    if (m_manifestFile.exists()) {
-      String contents = IOUtils2.readString(m_manifestFile.getContents());
-      String[] lines = StringUtils.split(contents, "\r\n");
-      for (String line : lines) {
-        if (line.startsWith("Bundle-SymbolicName:")) {
-          if (!line.endsWith("singleton:=true")) {
-            contents = StringUtils.replace(contents, line, line + "; singleton:=true");
-            IOUtils2.setFileContents(
-                m_manifestFile,
-                new ByteArrayInputStream(contents.getBytes(m_manifestFile.getCharset())));
-          }
-          break;
-        }
-      }
-    }
-  }
-
-  /**
-   * Adds a new plug-in import to this plugin.
-   *
-   * @param pluginId
-   *          the id of plugin.
-   */
-  public void addPluginImport(final List<String> pluginIds) throws Exception {
-    final List<String> pluginIdsForAdding = Lists.newArrayList(pluginIds);
-    // check exist imports
-    for (IPluginImport pluginImport : getModel().getPluginBase().getImports()) {
-      pluginIdsForAdding.remove(pluginImport.getId());
-    }
-    if (pluginIdsForAdding.isEmpty()) {
-      return;
-    }
-    // perform modification
-    ModelModification modification = new ModelModification(m_project) {
-      @Override
-      protected void modifyModel(IBaseModel model, IProgressMonitor monitor) throws CoreException {
-        IPluginModelBase plugin = (IPluginModelBase) model;
-        for (String pluginId : pluginIdsForAdding) {
-          // create import
-          IPluginImport pluginImport = plugin.getPluginFactory().createImport();
-          pluginImport.setId(pluginId);
-          // add import
-          plugin.getPluginBase().add(pluginImport);
-        }
-      }
-    };
-    modifyModel(modification);
-  }
-
-  public void addPluginImport(String... pluginIds) throws Exception {
-    addPluginImport(Lists.newArrayList(pluginIds));
-  }
-
-  /**
-   * Adds a new library to this plugin.
-   *
-   * @param name
-   *          the name of library (i.e. jar) file.
-   */
-  public void addLibrary(final String name) throws Exception {
-    ModelModification modification = new ModelModification(m_project) {
-      @Override
-      protected void modifyModel(IBaseModel model, IProgressMonitor monitor) throws CoreException {
-        IPluginModelBase plugin = (IPluginModelBase) model;
-        // if first library, add "." entry
-        if (plugin.getPluginBase().getLibraries().length == 0) {
-          addLibrary0(plugin, ".");
-        }
-        // add library
-        addLibrary0(plugin, name);
-      }
-
-      private void addLibrary0(IPluginModelBase plugin, String name) throws CoreException {
-        // create library
-        IPluginLibrary library = plugin.getPluginFactory().createLibrary();
-        library.setName(name);
-        // add library
-        plugin.getPluginBase().add(library);
-      }
-    };
-    modifyModel(modification);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IPluginModelBase utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the ID of plugin, may be <code>null</code>.
-   */
-  public static String getId(IPluginModelBase pluginModel) {
-    BundleDescription bundleDescription = pluginModel.getBundleDescription();
-    if (bundleDescription != null) {
-      return bundleDescription.getSymbolicName();
-    } else {
-      return null;
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ID generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the unique ID, see {@link CodeUtils#generateUniqueName(String, Predicate)}.
-   */
-  public String generateUniqueID(String baseId) {
-    final Set<String> idSet = getIDSet();
-    return CodeUtils.generateUniqueName(baseId, new Predicate<String>() {
-      @Override
-      public boolean apply(String t) {
-        return !idSet.contains(t);
-      }
-    });
-  }
-
-  /**
-   * @return the {@link Set} of all ID's in this <code>plugin.xml</code> file.
-   */
-  private Set<String> getIDSet() {
-    Set<String> idSet = Sets.newTreeSet();
-    for (IPluginExtension extension : getExtensions(getModel())) {
-      for (IPluginObject pluginObject : extension.getChildren()) {
-        if (pluginObject instanceof IPluginElement) {
-          IPluginElement element = (IPluginElement) pluginObject;
-          String id = getAttribute(element, "id");
-          if (id != null) {
-            idSet.add(id);
-          }
-        }
-      }
-    }
-    return idSet;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IPluginElement attributes
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @param element
-   *          the {@link IPluginElement} to get attribute name.
-   * @param attributeName
-   *          the name of attribute to get value from.
-   *
-   * @return the value of attribute with given name.
-   */
-  public static String getAttribute(IPluginElement element, String attributeName) {
-    if (element == null) {
-      return null;
-    }
-    // prepare attribute
-    IPluginAttribute attribute = element.getAttribute(attributeName);
-    if (attribute == null) {
-      return null;
-    }
-    // prepare value, may be localized
-    String value = attribute.getValue();
-    value = attribute.getPluginBase().getResourceString(value);
-    return value;
-  }
-
-  /**
-   * Sets value of attribute in given {@link IPluginElement}.
-   * <p>
-   * Note that given {@link IPluginElement} itself is <em>not</em> modified, but underlying
-   * <code>plugin.xml</code> is modified. Only after request of {@link IPluginElement} using for
-   * example {@link #getExtensionElementById(String, String, String)} you will see updated
-   * attributes.
-   *
-   * @param element
-   *          the direct child of <code>extension</code>.
-   * @param attributeName
-   *          the name of attribute to change.
-   * @param value
-   *          the new value for attribute, <code>null</code> to remove attribute.
-   */
-  public void setAttribute(final IPluginElement element,
-      final String attributeName,
-      final String value) throws Exception {
-    IFile pluginFile = (IFile) element.getModel().getUnderlyingResource();
-    ModelModification modification = new ModelModification(pluginFile) {
-      @Override
-      protected void modifyModel(IBaseModel model, IProgressMonitor monitor) throws CoreException {
-        IPluginElement updatableElement = getCorrespondingElement(model, element);
-        updatableElement.setAttribute(attributeName, value);
-      }
-    };
-    modifyModel(modification);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IPluginModelBase access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link IPluginModelBase} for this plugin {@link IProject}.
-   */
-  private IPluginModelBase getModel() {
-    return PluginRegistry.findModel(m_project);
-  }
-
-  /**
-   * @return all plug-ins and fragments in the workspace as well as all target plug-ins and
-   *         fragments, regardless whether or not they are checked on the Target Platform preference
-   *         page.
-   */
-  private static IPluginModelBase[] getAllModels() {
-    return PluginRegistry.getActiveModels();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IPluginElement access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @param pointId
-   *          the ID of extension point.
-   * @param elementName
-   *          the name of extension element.
-   *
-   * @return the {@link IPluginElement}'s for direct child of extension.
-   */
-  public List<IPluginElement> getExtensionElements(String pointId, String elementName) {
-    return getExtensionElements(getModel(), pointId, elementName);
-  }
-
-  /**
-   * @return same as {@link #getExtensionElementById(String, String, String)}, but waits for not
-   *         <code>null</code> result.
-   */
-  public IPluginElement waitExtensionElementById(String pointId, String elementName, String id) {
-    while (true) {
-      IPluginElement element = getExtensionElementById(pointId, elementName, id);
-      if (element != null) {
-        return element;
-      }
-      ExecutionUtils.waitEventLoop(10);
-    }
-  }
-
-  /**
-   * @return the {@link IPluginElement} of given extension, with required <code>id</code> attribute
-   *         value, may be <code>null</code>.
-   */
-  public IPluginElement getExtensionElementById(String pointId, String elementName, String id) {
-    return getExtensionElement(pointId, elementName, "id", id);
-  }
-
-  /**
-   * @return the {@link IPluginElement} of given extension, with required <code>class</code>
-   *         attribute value, may be <code>null</code>.
-   */
-  public IPluginElement getExtensionElementByClass(String pointId,
-      String elementName,
-      String className) {
-    return getExtensionElement(pointId, elementName, "class", className);
-  }
-
-  /**
-   * @param pointId
-   *          the ID of extension point.
-   * @param elementName
-   *          the name of extension element.
-   * @param filterAttrName
-   *          the name of attribute to check.
-   * @param filterAttrValue
-   *          the value of attribute to check.
-   *
-   * @return the {@link IPluginElement} of direct extension child that satisfies given filter on
-   *         attribute value.
-   */
-  private IPluginElement getExtensionElement(String pointId,
-      String elementName,
-      String filterAttrName,
-      String filterAttrValue) {
-    return getExtensionElement(getModel(), pointId, elementName, filterAttrName, filterAttrValue);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IPluginExtension access (implementation)
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @param pointId
-   *          the ID of extension point.
-   *
-   * @return the {@link IPluginExtension}'s for given extension point.
-   */
-  private static List<IPluginExtension> getExtensions(IPluginModelBase pluginModel, String pointId) {
-    List<IPluginExtension> extensions = Lists.newArrayList();
-    if (pluginModel != null) {
-      for (IPluginExtension extension : getExtensions(pluginModel)) {
-        if (extension.getPoint().equals(pointId)) {
-          extensions.add(extension);
-        }
-      }
-    }
-    return extensions;
-  }
-
-  private static IPluginExtension[] getExtensions(IPluginModelBase pluginModel) {
-    if (pluginModel.getClass().getName().equals(
-        "org.eclipse.pde.internal.core.plugin.ExternalPluginModel")) {
-      return pluginModel.getExtensions().getExtensions();
-    }
-    return pluginModel.getPluginBase().getExtensions();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IPluginElement access (implementation)
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link IPluginElement}'s for direct children of extension.
-   */
-  private static List<IPluginElement> getExtensionElements(IPluginModelBase pluginModel,
-      String pointId,
-      String elementName) {
-    List<IPluginElement> elements = Lists.newArrayList();
-    for (IPluginExtension extension : getExtensions(pluginModel, pointId)) {
-      for (IPluginObject pluginObject : extension.getChildren()) {
-        if (pluginObject instanceof IPluginElement) {
-          IPluginElement element = (IPluginElement) pluginObject;
-          if (element.getName().equals(elementName)) {
-            elements.add(element);
-          }
-        }
-      }
-    }
-    return elements;
-  }
-
-  /**
-   * @return the {@link IPluginElement} that satisfies given filter on attribute value.
-   */
-  private static IPluginElement getExtensionElement(IPluginModelBase pluginModel,
-      String pointId,
-      String elementName,
-      String filterAttrName,
-      String filterAttrValue) {
-    List<IPluginElement> elements = getExtensionElements(pluginModel, pointId, elementName);
-    for (IPluginElement element : elements) {
-      String attributeValue = getAttribute(element, filterAttrName);
-      if (filterAttrValue.equals(attributeValue)) {
-        return element;
-      }
-    }
-    // not found
-    return null;
-  }
-
-  /**
-   * Ensures that this {@link IProject} has <code>plugin.xml</code> file.
-   */
-  private void ensurePluginXML() throws Exception {
-    IFile pluginXML = m_project.getFile("plugin.xml");
-    if (!pluginXML.exists()) {
-      List<String> lines =
-          ImmutableList.of(
-              "<?xml version=\"1.0\" encoding=\"UTF-8\"?>",
-              "<?eclipse version=\"3.2\"?>",
-              "<plugin>",
-              "</plugin>",
-              "");
-      String contents = StringUtils.join(lines.iterator(), "\n");
-      IOUtils2.setFileContents(pluginXML, new ByteArrayInputStream(contents.getBytes()));
-      // close existing ManifestEditor, because it has no page for plugin.xml so will
-      // not allow us later work with plugin.xml, in particular - access factory
-      ExecutionUtils.runRethrowUI(new RunnableEx() {
-        @Override
-        public void run() throws Exception {
-          EditorPart manifestEditor = PDEModelUtility.getOpenManifestEditor(m_project);
-          if (manifestEditor != null) {
-            DesignerPlugin.getActivePage().closeEditor(manifestEditor, true);
-          }
-        }
-      });
-    }
-  }
-
-  /**
-   * Runs {@link ModelModification} in UI thread.
-   */
-  private static void modifyModel(final ModelModification modification) throws Exception {
-    PDEModelUtility.modifyModel(modification, null);
-  }
-
-  /**
-   * Creates new extension element, for example "view" in "org.eclipse.ui.views" extension.
-   */
-  public void createExtensionElement(final String pointId,
-      final String elementName,
-      final Map<String, String> attributes) throws Exception {
-    if (!hasPDENature(m_project)) {
-      return;
-    }
-    ensurePluginXML();
-    ModelModification modification = new ModelModification(m_project) {
-      @Override
-      protected void modifyModel(IBaseModel model, IProgressMonitor monitor) throws CoreException {
-        IPluginModelBase pluginModel = (IPluginModelBase) model;
-        IExtensionsModelFactory extensionsFactory = pluginModel.getFactory();
-        // prepare IPluginExtension to create new IPluginElement
-        boolean newExtension;
-        IPluginExtension extension;
-        {
-          List<IPluginExtension> extensions = getExtensions(pluginModel, pointId);
-          if (extensions.isEmpty()) {
-            newExtension = true;
-            extension = extensionsFactory.createExtension();
-            extension.setPoint(pointId);
-          } else {
-            newExtension = false;
-            extension = extensions.get(extensions.size() - 1);
-          }
-        }
-        // create IPluginElement
-        IPluginElement element;
-        {
-          element = extensionsFactory.createElement(extension);
-          element.setName(elementName);
-          extension.add(element);
-        }
-        // set attributes
-        for (Map.Entry<String, String> entry : attributes.entrySet()) {
-          element.setAttribute(entry.getKey(), entry.getValue());
-        }
-        // if new IPluginExtension, add it into model
-        // (if we add it before "element", we will have many <extension> elements,
-        // probably because of some problem with PDE model listeners)
-        if (newExtension) {
-          pluginModel.getExtensions().add(extension);
-        }
-      }
-    };
-    modifyModel(modification);
-  }
-
-  /**
-   * Removes {@link IPluginElement} from {@link IPluginExtension}.
-   */
-  public void removeElement(final IPluginElement element) throws Exception {
-    IFile pluginFile = (IFile) element.getModel().getUnderlyingResource();
-    ModelModification modification = new ModelModification(pluginFile) {
-      @Override
-      protected void modifyModel(IBaseModel model, IProgressMonitor monitor) throws CoreException {
-        IPluginElement updatableElement = getCorrespondingElement(model, element);
-        ((IPluginParent) updatableElement.getParent()).remove(updatableElement);
-      }
-    };
-    modifyModel(modification);
-  }
-
-  /**
-   * @return the {@link IPluginElement} that corresponds to the given one in new {@link IBaseModel}.
-   */
-  private static IPluginElement getCorrespondingElement(IBaseModel model, IPluginElement element) {
-    // check preconditions
-    Assert.instanceOf(IPluginExtension.class, element.getParent());
-    // prepare attributes
-    final String pointId = ((IPluginExtension) element.getParent()).getPoint();
-    final String elementName = element.getName();
-    final String extensionId = getAttribute(element, "id");
-    Assert.isNotNull(extensionId, "No point ID for extension.");
-    Assert.isNotNull(extensionId, "No ID for element.");
-    // find corresponding IPluginElement
-    IPluginElement correspondingElement =
-        getExtensionElement((IPluginModelBase) model, pointId, elementName, "id", extensionId);
-    Assert.isNotNull(
-        correspondingElement,
-        "Can not find %s/%s/%s in %s",
-        pointId,
-        elementName,
-        extensionId,
-        model);
-    return correspondingElement;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Icon access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * {@link Map} for <code>bundleId + path</code> into loaded {@link Image}.
-   */
-  private static Map<String, Image> m_bundleIcons = Maps.newTreeMap();
-  /**
-   * {@link Map} for <code>projectName + path</code> into loaded {@link Image}.
-   */
-  private static Map<String, Image> m_projectIcons = Maps.newTreeMap();
-
-  /**
-   * Returns icon from {@link IPluginElement}, attribute <code>"icon"</code>.
-   *
-   * @param element
-   *          the {@link IPluginElement} to get attribute from.
-   * @param defaultIconPath
-   *          the path to the default icon in {@link Activator}.
-   */
-  public static Image getElementIcon(final IPluginElement element,
-      final String attribute,
-      Image defaultIcon) {
-    return ExecutionUtils.runObjectIgnore(new RunnableObjectEx<Image>() {
-      @Override
-      public Image runObject() throws Exception {
-        String iconPath = getAttribute(element, attribute);
-        Assert.isNotNull(iconPath, "No attribute 'icon' in %s.", element);
-        IPluginModelBase pluginModel = element.getPluginModel();
-        IResource underlyingResource = pluginModel.getUnderlyingResource();
-        if (underlyingResource != null) {
-          IProject project = underlyingResource.getProject();
-          String key = project.getName() + "/" + iconPath;
-          // get icon from cache, or fill cache
-          Image icon = m_projectIcons.get(key);
-          if (icon == null) {
-            IFile iconFile = project.getFile(new Path(iconPath));
-            Assert.isTrue(iconFile.exists(), "Image " + key + " does not exists.");
-            icon = loadImage(iconFile.getContents());
-            // remember icon in cache
-            m_bundleIcons.put(key, icon);
-          }
-          // OK, we should have icon
-          return icon;
-        } else {
-          String bundleId = pluginModel.getBundleDescription().getSymbolicName();
-          String key = bundleId + "/" + iconPath;
-          // get icon from cache, or fill cache
-          Image icon = m_bundleIcons.get(key);
-          if (icon == null) {
-            // prepare entry from Bundle
-            URL entry;
-            {
-              Bundle bundle = Platform.getBundle(bundleId);
-              entry = FileLocator.find(bundle, new Path(iconPath), null);
-              Assert.isNotNull(entry, key);
-            }
-            // load Image from entry
-            {
-              InputStream is = entry.openStream();
-              icon = loadImage(is);
-            }
-            // remember icon in cache
-            m_bundleIcons.put(key, icon);
-          }
-          // OK, we should have icon
-          return icon;
-        }
-      }
-
-      /**
-       * Loads {@link Image} from {@link InputStream} and closes stream.
-       */
-      private Image loadImage(InputStream is) {
-        try {
-          return new Image(null, is);
-        } finally {
-          IOUtils.closeQuietly(is);
-        }
-      }
-    }, defaultIcon);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access for view categories
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Information about category in "org.eclipse.ui.views" extension.
-   */
-  public static final class ViewCategoryInfo {
-    private final String m_id;
-    private final String m_name;
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public ViewCategoryInfo(String id, String name) {
-      m_id = id;
-      m_name = name;
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Object
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public String toString() {
-      return "(" + m_id + ", " + m_name + ")";
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Access
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    /**
-     * @return the ID of this {@link ViewCategoryInfo}.
-     */
-    public String getId() {
-      return m_id;
-    }
-
-    /**
-     * @return the name of this {@link ViewCategoryInfo}.
-     */
-    public String getName() {
-      return m_name;
-    }
-
-    /**
-     * @return the {@link ViewInfo}'s for views in this category.
-     */
-    public List<ViewInfo> getViews() {
-      final List<ViewInfo> views = Lists.newArrayList();
-      visitExtensions("org.eclipse.ui.views", "view", new IExtensionVisitor() {
-        @Override
-        public boolean visit(IPluginElement element) {
-          String categoryId = getAttribute(element, "category");
-          if (ObjectUtils.equals(m_id, categoryId)) {
-            views.add(createViewInfo(element));
-          }
-          return false;
-        }
-      });
-      return views;
-    }
-  }
-
-  /**
-   * @return the {@link ViewCategoryInfo} constructed from given {@link IPluginElement}.
-   */
-  private static ViewCategoryInfo createViewCategoryInfo(IPluginElement element) {
-    String id = getAttribute(element, "id");
-    String name = getAttribute(element, "name");
-    return new ViewCategoryInfo(id, name);
-  }
-
-  /**
-   * @return the {@link ViewCategoryInfo}'s for each views category in Eclipse runtime/workspace.
-   */
-  public static List<ViewCategoryInfo> getViewCategories() {
-    final List<ViewCategoryInfo> categories = Lists.newArrayList();
-    categories.add(new ViewCategoryInfo(null, "Other"));
-    visitExtensions("org.eclipse.ui.views", "category", new IExtensionVisitor() {
-      @Override
-      public boolean visit(IPluginElement element) {
-        categories.add(createViewCategoryInfo(element));
-        return false;
-      }
-    });
-    return categories;
-  }
-
-  /**
-   * @return the {@link ViewCategoryInfo} for view with given ID, may be <code>null</code> if no
-   *         such category found.
-   */
-  public static ViewCategoryInfo getViewCategoryInfo(final String categoryId) {
-    final ViewCategoryInfo result[] = new ViewCategoryInfo[1];
-    visitExtensions("org.eclipse.ui.views", "category", new IExtensionVisitor() {
-      @Override
-      public boolean visit(IPluginElement element) {
-        if (categoryId != null) {
-          String id = getAttribute(element, "id");
-          if (categoryId.equals(id)) {
-            result[0] = createViewCategoryInfo(element);
-          }
-        }
-        return result[0] != null;
-      }
-    });
-    // OK, we have result
-    return result[0];
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access for views information (id, name, icon).
-  // Read only, for perspectives.
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final Image DEFAULT_VIEW_ICON = Activator.getImage("info/perspective/view.gif");
-  /**
-   * Cache for view ID to {@link ViewInfo}.
-   */
-  private static final Map<String, ViewInfo> m_viewsById = Maps.newTreeMap();
-
-  /**
-   * Information about view in "org.eclipse.ui.views" extension.
-   */
-  public static final class ViewInfo {
-    private final String m_id;
-    private final String m_className;
-    private final String m_category;
-    private final String m_name;
-    private final Image m_icon;
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public ViewInfo(String id, String className, String category, String name, Image icon) {
-      m_id = id;
-      m_className = className;
-      m_category = category;
-      m_name = name;
-      m_icon = icon;
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Object
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public String toString() {
-      return "(" + m_id + ", " + m_className + ", " + m_category + ", " + m_name + ")";
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Access
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public String getId() {
-      return m_id;
-    }
-
-    public String getClassName() {
-      return m_className;
-    }
-
-    public String getCategory() {
-      return m_category;
-    }
-
-    public String getName() {
-      return m_name;
-    }
-
-    public Image getIcon() {
-      return m_icon;
-    }
-  }
-
-  /**
-   * @return the {@link ViewInfo} constructed from given {@link IPluginElement}.
-   */
-  private static ViewInfo createViewInfo(IPluginElement element) {
-    String id = getAttribute(element, "id");
-    String className = getAttribute(element, "class");
-    String category = getAttribute(element, "category");
-    String name = getAttribute(element, "name");
-    Image icon = getElementIcon(element, "icon", DEFAULT_VIEW_ICON);
-    //
-    return new ViewInfo(id, className, category, name, icon);
-  }
-
-  /**
-   * @return the {@link ViewInfo}'s for each view in Eclipse runtime/workspace.
-   */
-  public static List<ViewInfo> getViews() {
-    final List<ViewInfo> views = Lists.newArrayList();
-    visitExtensions("org.eclipse.ui.views", "view", new IExtensionVisitor() {
-      @Override
-      public boolean visit(IPluginElement element) {
-        views.add(createViewInfo(element));
-        return false;
-      }
-    });
-    return views;
-  }
-
-  /**
-   * Creates new {@link IPluginElement} for Eclipse view category.
-   */
-  public IPluginElement createViewCategoryElement(String id, String name) throws Exception {
-    Map<String, String> attributes = ImmutableMap.of("id", id, "name", name);
-    createExtensionElement("org.eclipse.ui.views", "category", attributes);
-    return waitExtensionElementById("org.eclipse.ui.views", "category", id);
-  }
-
-  /**
-   * Creates new {@link IPluginElement} for Eclipse view.
-   */
-  public void createViewElement(String id, String name, String className) throws Exception {
-    Map<String, String> attributes = ImmutableMap.of("id", id, "name", name, "class", className);
-    createExtensionElement("org.eclipse.ui.views", "view", attributes);
-  }
-
-  /**
-   * @return the {@link ViewInfo} for view with given ID, may be <code>null</code> if no such view
-   *         found.
-   */
-  public static ViewInfo getViewInfo(final String viewId) {
-    // check in cache
-    if (m_viewsById.containsKey(viewId)) {
-      return m_viewsById.get(viewId);
-    }
-    // visit all views
-    final ViewInfo result[] = new ViewInfo[1];
-    visitExtensions("org.eclipse.ui.views", "view", new IExtensionVisitor() {
-      @Override
-      public boolean visit(IPluginElement element) {
-        if (viewId != null) {
-          String id = getAttribute(element, "id");
-          if (viewId.equals(id)) {
-            result[0] = createViewInfo(element);
-          }
-        }
-        return result[0] != null;
-      }
-    });
-    // OK, we have result
-    m_viewsById.put(viewId, result[0]);
-    return result[0];
-  }
-
-  /**
-   * @return the {@link ViewInfo} for view with given ID, returns not <code>null</code> even if no
-   *         view with such ID.
-   */
-  public static ViewInfo getViewInfoDefault(String viewId) {
-    ViewInfo viewInfo = getViewInfo(viewId);
-    if (viewInfo == null) {
-      viewInfo = new ViewInfo(viewId, "NoClass", "NoCategory", viewId, DEFAULT_VIEW_ICON);
-    }
-    return viewInfo;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Perspectives access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final Image DEFAULT_PERSPECTIVE_ICON =
-      Activator.getImage("info/perspective/perspective.gif");
-  /**
-   * Cache for view ID to {@link ViewInfo}.
-   */
-  private static final Map<String, PerspectiveInfo> m_perspectivesById = Maps.newTreeMap();
-
-  /**
-   * Information about perspective in "org.eclipse.ui.perspectives" extension.
-   */
-  public static class PerspectiveInfo {
-    private final String m_id;
-    private final String m_className;
-    private final String m_name;
-    private final Image m_icon;
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public PerspectiveInfo(String id, String className, String name, Image icon) {
-      m_id = id;
-      m_className = className;
-      m_name = name;
-      m_icon = icon;
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Object
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public String toString() {
-      return "(" + m_id + ", " + m_className + ", " + m_name + ")";
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Access
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public String getId() {
-      return m_id;
-    }
-
-    public String getClassName() {
-      return m_className;
-    }
-
-    public String getName() {
-      return m_name;
-    }
-
-    public Image getIcon() {
-      return m_icon;
-    }
-  }
-
-  /**
-   * @return the {@link PerspectiveInfo} constructed from given {@link IPluginElement}.
-   */
-  private static PerspectiveInfo createPerspectiveInfo(IPluginElement element) {
-    String id = getAttribute(element, "id");
-    String className = getAttribute(element, "class");
-    String name = getAttribute(element, "name");
-    Image icon = getElementIcon(element, "icon", DEFAULT_PERSPECTIVE_ICON);
-    return new PerspectiveInfo(id, className, name, icon);
-  }
-
-  /**
-   * @return the {@link PerspectiveInfo}'s for each perspective in Eclipse runtime/workspace.
-   */
-  public static List<PerspectiveInfo> getPerspectives() {
-    final List<PerspectiveInfo> perspectives = Lists.newArrayList();
-    visitExtensions("org.eclipse.ui.perspectives", "perspective", new IExtensionVisitor() {
-      @Override
-      public boolean visit(IPluginElement element) {
-        perspectives.add(createPerspectiveInfo(element));
-        return false;
-      }
-    });
-    return perspectives;
-  }
-
-  /**
-   * Creates new {@link IPluginElement} for Eclipse perspective.
-   */
-  public void createPerspectiveElement(String id, String name, String className) throws Exception {
-    Map<String, String> attributes = ImmutableMap.of("id", id, "name", name, "class", className);
-    createExtensionElement("org.eclipse.ui.perspectives", "perspective", attributes);
-  }
-
-  /**
-   * @return the {@link PerspectiveInfo} for perspective with given ID, may be <code>null</code> if
-   *         no such perspective found.
-   */
-  public static PerspectiveInfo getPerspectiveInfo(final String perspectiveId) {
-    // check in cache
-    if (m_perspectivesById.containsKey(perspectiveId)) {
-      return m_perspectivesById.get(perspectiveId);
-    }
-    // visit all perspectives
-    final PerspectiveInfo result[] = new PerspectiveInfo[1];
-    visitExtensions("org.eclipse.ui.perspectives", "perspective", new IExtensionVisitor() {
-      @Override
-      public boolean visit(IPluginElement element) {
-        String id = getAttribute(element, "id");
-        if (perspectiveId.equals(id)) {
-          result[0] = createPerspectiveInfo(element);
-          return true;
-        }
-        return false;
-      }
-    });
-    // OK, we have result
-    m_perspectivesById.put(perspectiveId, result[0]);
-    return result[0];
-  }
-
-  /**
-   * @return the {@link PerspectiveInfo} for perspective with given ID, returns not
-   *         <code>null</code> even if no perspective with such ID.
-   */
-  public static PerspectiveInfo getPerspectiveInfoDefault(final String perspectiveId) {
-    PerspectiveInfo perspectiveInfo = getPerspectiveInfo(perspectiveId);
-    if (perspectiveInfo == null) {
-      perspectiveInfo =
-          new PerspectiveInfo(perspectiveId, "NoClass", perspectiveId, DEFAULT_PERSPECTIVE_ICON);
-    }
-    return perspectiveInfo;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editor access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Creates new {@link IPluginElement} for Eclipse editor.
-   */
-  public void createEditorElement(String id, String name, String className) throws Exception {
-    Map<String, String> attributes = ImmutableMap.of("id", id, "name", name, "class", className);
-    createExtensionElement("org.eclipse.ui.editors", "editor", attributes);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Extensions visiting
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Visitor interface to use with
-   * {@link PdeUtils#visitExtensions(String, String, IExtensionVisitor)}.
-   */
-  private interface IExtensionVisitor {
-    /**
-     * Visits single extension {@link IPluginElement}.
-     *
-     * @return <code>true</code> if required result was found, so visiting should be terminated.
-     */
-    boolean visit(IPluginElement element);
-  }
-
-  /**
-   * Visits extensions to the extension point with given ID and element name.
-   */
-  private static void visitExtensions(String pointId, String elementName, IExtensionVisitor visitor) {
-    IPluginModelBase[] plugins = getAllModels();
-    for (IPluginModelBase plugin : plugins) {
-      List<IPluginElement> elements = getExtensionElements(plugin, pointId, elementName);
-      for (IPluginElement element : elements) {
-        if (visitor.visit(element)) {
-          return;
-        }
-      }
-    }
-  }
+	public final static String BUNDLE_FILENAME_DESCRIPTOR = "META-INF/MANIFEST.MF";
+	public final static String BUILD_FILENAME_DESCRIPTOR = "build.properties";
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final Map<IProject, PdeUtils> m_projectToUtilitiesMap = Maps.newHashMap();
+
+	/**
+	 * @return the instance of {@link PdeUtils} for given {@link IProject}, existing from cache or
+	 *         new.
+	 */
+	public static PdeUtils get(IProject project) {
+		PdeUtils utilities = m_projectToUtilitiesMap.get(project);
+		if (utilities == null) {
+			utilities = new PdeUtils(project);
+			m_projectToUtilitiesMap.put(project, utilities);
+		}
+		return utilities;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance fields
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final IProject m_project;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private PdeUtils(IProject project) {
+		m_project = project;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return {@link IProject} that contains <code>plugin.xml</code> file.
+	 */
+	public IProject getProject() {
+		return m_project;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final String PDE_NATURE_ID = "org.eclipse.pde.PluginNature";
+
+	/**
+	 * @return <code>true</code> if {@link IProject} has PDE nature.
+	 */
+	public static boolean hasPDENature(IProject project) {
+		return ProjectUtils.hasNature(project, PDE_NATURE_ID);
+	}
+
+	/**
+	 * Ensures that <code>MANIFEST.MF</code> declares this bundle as <code>singleton</code>.
+	 */
+	public void ensureSingleton() throws Exception {
+		IFile m_manifestFile = m_project.getFile(BUNDLE_FILENAME_DESCRIPTOR);
+		if (m_manifestFile.exists()) {
+			String contents = IOUtils2.readString(m_manifestFile.getContents());
+			String[] lines = StringUtils.split(contents, "\r\n");
+			for (String line : lines) {
+				if (line.startsWith("Bundle-SymbolicName:")) {
+					if (!line.endsWith("singleton:=true")) {
+						contents = StringUtils.replace(contents, line, line + "; singleton:=true");
+						IOUtils2.setFileContents(
+								m_manifestFile,
+								new ByteArrayInputStream(contents.getBytes(m_manifestFile.getCharset())));
+					}
+					break;
+				}
+			}
+		}
+	}
+
+	/**
+	 * Adds a new plug-in import to this plugin.
+	 *
+	 * @param pluginId
+	 *          the id of plugin.
+	 */
+	public void addPluginImport(final List<String> pluginIds) throws Exception {
+		final List<String> pluginIdsForAdding = Lists.newArrayList(pluginIds);
+		// check exist imports
+		for (IPluginImport pluginImport : getModel().getPluginBase().getImports()) {
+			pluginIdsForAdding.remove(pluginImport.getId());
+		}
+		if (pluginIdsForAdding.isEmpty()) {
+			return;
+		}
+		// perform modification
+		ModelModification modification = new ModelModification(m_project) {
+			@Override
+			protected void modifyModel(IBaseModel model, IProgressMonitor monitor) throws CoreException {
+				IPluginModelBase plugin = (IPluginModelBase) model;
+				for (String pluginId : pluginIdsForAdding) {
+					// create import
+					IPluginImport pluginImport = plugin.getPluginFactory().createImport();
+					pluginImport.setId(pluginId);
+					// add import
+					plugin.getPluginBase().add(pluginImport);
+				}
+			}
+		};
+		modifyModel(modification);
+	}
+
+	public void addPluginImport(String... pluginIds) throws Exception {
+		addPluginImport(Lists.newArrayList(pluginIds));
+	}
+
+	/**
+	 * Adds a new library to this plugin.
+	 *
+	 * @param name
+	 *          the name of library (i.e. jar) file.
+	 */
+	public void addLibrary(final String name) throws Exception {
+		ModelModification modification = new ModelModification(m_project) {
+			@Override
+			protected void modifyModel(IBaseModel model, IProgressMonitor monitor) throws CoreException {
+				IPluginModelBase plugin = (IPluginModelBase) model;
+				// if first library, add "." entry
+				if (plugin.getPluginBase().getLibraries().length == 0) {
+					addLibrary0(plugin, ".");
+				}
+				// add library
+				addLibrary0(plugin, name);
+			}
+
+			private void addLibrary0(IPluginModelBase plugin, String name) throws CoreException {
+				// create library
+				IPluginLibrary library = plugin.getPluginFactory().createLibrary();
+				library.setName(name);
+				// add library
+				plugin.getPluginBase().add(library);
+			}
+		};
+		modifyModel(modification);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IPluginModelBase utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the ID of plugin, may be <code>null</code>.
+	 */
+	public static String getId(IPluginModelBase pluginModel) {
+		BundleDescription bundleDescription = pluginModel.getBundleDescription();
+		if (bundleDescription != null) {
+			return bundleDescription.getSymbolicName();
+		} else {
+			return null;
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ID generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the unique ID, see {@link CodeUtils#generateUniqueName(String, Predicate)}.
+	 */
+	public String generateUniqueID(String baseId) {
+		final Set<String> idSet = getIDSet();
+		return CodeUtils.generateUniqueName(baseId, new Predicate<String>() {
+			@Override
+			public boolean apply(String t) {
+				return !idSet.contains(t);
+			}
+		});
+	}
+
+	/**
+	 * @return the {@link Set} of all ID's in this <code>plugin.xml</code> file.
+	 */
+	private Set<String> getIDSet() {
+		Set<String> idSet = Sets.newTreeSet();
+		for (IPluginExtension extension : getExtensions(getModel())) {
+			for (IPluginObject pluginObject : extension.getChildren()) {
+				if (pluginObject instanceof IPluginElement) {
+					IPluginElement element = (IPluginElement) pluginObject;
+					String id = getAttribute(element, "id");
+					if (id != null) {
+						idSet.add(id);
+					}
+				}
+			}
+		}
+		return idSet;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IPluginElement attributes
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @param element
+	 *          the {@link IPluginElement} to get attribute name.
+	 * @param attributeName
+	 *          the name of attribute to get value from.
+	 *
+	 * @return the value of attribute with given name.
+	 */
+	public static String getAttribute(IPluginElement element, String attributeName) {
+		if (element == null) {
+			return null;
+		}
+		// prepare attribute
+		IPluginAttribute attribute = element.getAttribute(attributeName);
+		if (attribute == null) {
+			return null;
+		}
+		// prepare value, may be localized
+		String value = attribute.getValue();
+		value = attribute.getPluginBase().getResourceString(value);
+		return value;
+	}
+
+	/**
+	 * Sets value of attribute in given {@link IPluginElement}.
+	 * <p>
+	 * Note that given {@link IPluginElement} itself is <em>not</em> modified, but underlying
+	 * <code>plugin.xml</code> is modified. Only after request of {@link IPluginElement} using for
+	 * example {@link #getExtensionElementById(String, String, String)} you will see updated
+	 * attributes.
+	 *
+	 * @param element
+	 *          the direct child of <code>extension</code>.
+	 * @param attributeName
+	 *          the name of attribute to change.
+	 * @param value
+	 *          the new value for attribute, <code>null</code> to remove attribute.
+	 */
+	public void setAttribute(final IPluginElement element,
+			final String attributeName,
+			final String value) throws Exception {
+		IFile pluginFile = (IFile) element.getModel().getUnderlyingResource();
+		ModelModification modification = new ModelModification(pluginFile) {
+			@Override
+			protected void modifyModel(IBaseModel model, IProgressMonitor monitor) throws CoreException {
+				IPluginElement updatableElement = getCorrespondingElement(model, element);
+				updatableElement.setAttribute(attributeName, value);
+			}
+		};
+		modifyModel(modification);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IPluginModelBase access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link IPluginModelBase} for this plugin {@link IProject}.
+	 */
+	private IPluginModelBase getModel() {
+		return PluginRegistry.findModel(m_project);
+	}
+
+	/**
+	 * @return all plug-ins and fragments in the workspace as well as all target plug-ins and
+	 *         fragments, regardless whether or not they are checked on the Target Platform preference
+	 *         page.
+	 */
+	private static IPluginModelBase[] getAllModels() {
+		return PluginRegistry.getActiveModels();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IPluginElement access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @param pointId
+	 *          the ID of extension point.
+	 * @param elementName
+	 *          the name of extension element.
+	 *
+	 * @return the {@link IPluginElement}'s for direct child of extension.
+	 */
+	public List<IPluginElement> getExtensionElements(String pointId, String elementName) {
+		return getExtensionElements(getModel(), pointId, elementName);
+	}
+
+	/**
+	 * @return same as {@link #getExtensionElementById(String, String, String)}, but waits for not
+	 *         <code>null</code> result.
+	 */
+	public IPluginElement waitExtensionElementById(String pointId, String elementName, String id) {
+		while (true) {
+			IPluginElement element = getExtensionElementById(pointId, elementName, id);
+			if (element != null) {
+				return element;
+			}
+			ExecutionUtils.waitEventLoop(10);
+		}
+	}
+
+	/**
+	 * @return the {@link IPluginElement} of given extension, with required <code>id</code> attribute
+	 *         value, may be <code>null</code>.
+	 */
+	public IPluginElement getExtensionElementById(String pointId, String elementName, String id) {
+		return getExtensionElement(pointId, elementName, "id", id);
+	}
+
+	/**
+	 * @return the {@link IPluginElement} of given extension, with required <code>class</code>
+	 *         attribute value, may be <code>null</code>.
+	 */
+	public IPluginElement getExtensionElementByClass(String pointId,
+			String elementName,
+			String className) {
+		return getExtensionElement(pointId, elementName, "class", className);
+	}
+
+	/**
+	 * @param pointId
+	 *          the ID of extension point.
+	 * @param elementName
+	 *          the name of extension element.
+	 * @param filterAttrName
+	 *          the name of attribute to check.
+	 * @param filterAttrValue
+	 *          the value of attribute to check.
+	 *
+	 * @return the {@link IPluginElement} of direct extension child that satisfies given filter on
+	 *         attribute value.
+	 */
+	private IPluginElement getExtensionElement(String pointId,
+			String elementName,
+			String filterAttrName,
+			String filterAttrValue) {
+		return getExtensionElement(getModel(), pointId, elementName, filterAttrName, filterAttrValue);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IPluginExtension access (implementation)
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @param pointId
+	 *          the ID of extension point.
+	 *
+	 * @return the {@link IPluginExtension}'s for given extension point.
+	 */
+	private static List<IPluginExtension> getExtensions(IPluginModelBase pluginModel, String pointId) {
+		List<IPluginExtension> extensions = Lists.newArrayList();
+		if (pluginModel != null) {
+			for (IPluginExtension extension : getExtensions(pluginModel)) {
+				if (extension.getPoint().equals(pointId)) {
+					extensions.add(extension);
+				}
+			}
+		}
+		return extensions;
+	}
+
+	private static IPluginExtension[] getExtensions(IPluginModelBase pluginModel) {
+		if (pluginModel.getClass().getName().equals(
+				"org.eclipse.pde.internal.core.plugin.ExternalPluginModel")) {
+			return pluginModel.getExtensions().getExtensions();
+		}
+		return pluginModel.getPluginBase().getExtensions();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IPluginElement access (implementation)
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link IPluginElement}'s for direct children of extension.
+	 */
+	private static List<IPluginElement> getExtensionElements(IPluginModelBase pluginModel,
+			String pointId,
+			String elementName) {
+		List<IPluginElement> elements = Lists.newArrayList();
+		for (IPluginExtension extension : getExtensions(pluginModel, pointId)) {
+			for (IPluginObject pluginObject : extension.getChildren()) {
+				if (pluginObject instanceof IPluginElement) {
+					IPluginElement element = (IPluginElement) pluginObject;
+					if (element.getName().equals(elementName)) {
+						elements.add(element);
+					}
+				}
+			}
+		}
+		return elements;
+	}
+
+	/**
+	 * @return the {@link IPluginElement} that satisfies given filter on attribute value.
+	 */
+	private static IPluginElement getExtensionElement(IPluginModelBase pluginModel,
+			String pointId,
+			String elementName,
+			String filterAttrName,
+			String filterAttrValue) {
+		List<IPluginElement> elements = getExtensionElements(pluginModel, pointId, elementName);
+		for (IPluginElement element : elements) {
+			String attributeValue = getAttribute(element, filterAttrName);
+			if (filterAttrValue.equals(attributeValue)) {
+				return element;
+			}
+		}
+		// not found
+		return null;
+	}
+
+	/**
+	 * Ensures that this {@link IProject} has <code>plugin.xml</code> file.
+	 */
+	private void ensurePluginXML() throws Exception {
+		IFile pluginXML = m_project.getFile("plugin.xml");
+		if (!pluginXML.exists()) {
+			List<String> lines =
+					ImmutableList.of(
+							"<?xml version=\"1.0\" encoding=\"UTF-8\"?>",
+							"<?eclipse version=\"3.2\"?>",
+							"<plugin>",
+							"</plugin>",
+							"");
+			String contents = StringUtils.join(lines.iterator(), "\n");
+			IOUtils2.setFileContents(pluginXML, new ByteArrayInputStream(contents.getBytes()));
+			// close existing ManifestEditor, because it has no page for plugin.xml so will
+			// not allow us later work with plugin.xml, in particular - access factory
+			ExecutionUtils.runRethrowUI(new RunnableEx() {
+				@Override
+				public void run() throws Exception {
+					EditorPart manifestEditor = PDEModelUtility.getOpenManifestEditor(m_project);
+					if (manifestEditor != null) {
+						DesignerPlugin.getActivePage().closeEditor(manifestEditor, true);
+					}
+				}
+			});
+		}
+	}
+
+	/**
+	 * Runs {@link ModelModification} in UI thread.
+	 */
+	private static void modifyModel(final ModelModification modification) throws Exception {
+		PDEModelUtility.modifyModel(modification, null);
+	}
+
+	/**
+	 * Creates new extension element, for example "view" in "org.eclipse.ui.views" extension.
+	 */
+	public void createExtensionElement(final String pointId,
+			final String elementName,
+			final Map<String, String> attributes) throws Exception {
+		if (!hasPDENature(m_project)) {
+			return;
+		}
+		ensurePluginXML();
+		ModelModification modification = new ModelModification(m_project) {
+			@Override
+			protected void modifyModel(IBaseModel model, IProgressMonitor monitor) throws CoreException {
+				IPluginModelBase pluginModel = (IPluginModelBase) model;
+				IExtensionsModelFactory extensionsFactory = pluginModel.getFactory();
+				// prepare IPluginExtension to create new IPluginElement
+				boolean newExtension;
+				IPluginExtension extension;
+				{
+					List<IPluginExtension> extensions = getExtensions(pluginModel, pointId);
+					if (extensions.isEmpty()) {
+						newExtension = true;
+						extension = extensionsFactory.createExtension();
+						extension.setPoint(pointId);
+					} else {
+						newExtension = false;
+						extension = extensions.get(extensions.size() - 1);
+					}
+				}
+				// create IPluginElement
+				IPluginElement element;
+				{
+					element = extensionsFactory.createElement(extension);
+					element.setName(elementName);
+					extension.add(element);
+				}
+				// set attributes
+				for (Map.Entry<String, String> entry : attributes.entrySet()) {
+					element.setAttribute(entry.getKey(), entry.getValue());
+				}
+				// if new IPluginExtension, add it into model
+				// (if we add it before "element", we will have many <extension> elements,
+				// probably because of some problem with PDE model listeners)
+				if (newExtension) {
+					pluginModel.getExtensions().add(extension);
+				}
+			}
+		};
+		modifyModel(modification);
+	}
+
+	/**
+	 * Removes {@link IPluginElement} from {@link IPluginExtension}.
+	 */
+	public void removeElement(final IPluginElement element) throws Exception {
+		IFile pluginFile = (IFile) element.getModel().getUnderlyingResource();
+		ModelModification modification = new ModelModification(pluginFile) {
+			@Override
+			protected void modifyModel(IBaseModel model, IProgressMonitor monitor) throws CoreException {
+				IPluginElement updatableElement = getCorrespondingElement(model, element);
+				((IPluginParent) updatableElement.getParent()).remove(updatableElement);
+			}
+		};
+		modifyModel(modification);
+	}
+
+	/**
+	 * @return the {@link IPluginElement} that corresponds to the given one in new {@link IBaseModel}.
+	 */
+	private static IPluginElement getCorrespondingElement(IBaseModel model, IPluginElement element) {
+		// check preconditions
+		Assert.instanceOf(IPluginExtension.class, element.getParent());
+		// prepare attributes
+		final String pointId = ((IPluginExtension) element.getParent()).getPoint();
+		final String elementName = element.getName();
+		final String extensionId = getAttribute(element, "id");
+		Assert.isNotNull(extensionId, "No point ID for extension.");
+		Assert.isNotNull(extensionId, "No ID for element.");
+		// find corresponding IPluginElement
+		IPluginElement correspondingElement =
+				getExtensionElement((IPluginModelBase) model, pointId, elementName, "id", extensionId);
+		Assert.isNotNull(
+				correspondingElement,
+				"Can not find %s/%s/%s in %s",
+				pointId,
+				elementName,
+				extensionId,
+				model);
+		return correspondingElement;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Icon access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * {@link Map} for <code>bundleId + path</code> into loaded {@link Image}.
+	 */
+	private static Map<String, Image> m_bundleIcons = Maps.newTreeMap();
+	/**
+	 * {@link Map} for <code>projectName + path</code> into loaded {@link Image}.
+	 */
+	private static Map<String, Image> m_projectIcons = Maps.newTreeMap();
+
+	/**
+	 * Returns icon from {@link IPluginElement}, attribute <code>"icon"</code>.
+	 *
+	 * @param element
+	 *          the {@link IPluginElement} to get attribute from.
+	 * @param defaultIconPath
+	 *          the path to the default icon in {@link Activator}.
+	 */
+	public static Image getElementIcon(final IPluginElement element,
+			final String attribute,
+			Image defaultIcon) {
+		return ExecutionUtils.runObjectIgnore(new RunnableObjectEx<Image>() {
+			@Override
+			public Image runObject() throws Exception {
+				String iconPath = getAttribute(element, attribute);
+				Assert.isNotNull(iconPath, "No attribute 'icon' in %s.", element);
+				IPluginModelBase pluginModel = element.getPluginModel();
+				IResource underlyingResource = pluginModel.getUnderlyingResource();
+				if (underlyingResource != null) {
+					IProject project = underlyingResource.getProject();
+					String key = project.getName() + "/" + iconPath;
+					// get icon from cache, or fill cache
+					Image icon = m_projectIcons.get(key);
+					if (icon == null) {
+						IFile iconFile = project.getFile(new Path(iconPath));
+						Assert.isTrue(iconFile.exists(), "Image " + key + " does not exists.");
+						icon = loadImage(iconFile.getContents());
+						// remember icon in cache
+						m_bundleIcons.put(key, icon);
+					}
+					// OK, we should have icon
+					return icon;
+				} else {
+					String bundleId = pluginModel.getBundleDescription().getSymbolicName();
+					String key = bundleId + "/" + iconPath;
+					// get icon from cache, or fill cache
+					Image icon = m_bundleIcons.get(key);
+					if (icon == null) {
+						// prepare entry from Bundle
+						URL entry;
+						{
+							Bundle bundle = Platform.getBundle(bundleId);
+							entry = FileLocator.find(bundle, new Path(iconPath), null);
+							Assert.isNotNull(entry, key);
+						}
+						// load Image from entry
+						{
+							InputStream is = entry.openStream();
+							icon = loadImage(is);
+						}
+						// remember icon in cache
+						m_bundleIcons.put(key, icon);
+					}
+					// OK, we should have icon
+					return icon;
+				}
+			}
+
+			/**
+			 * Loads {@link Image} from {@link InputStream} and closes stream.
+			 */
+			private Image loadImage(InputStream is) {
+				try {
+					return new Image(null, is);
+				} finally {
+					IOUtils.closeQuietly(is);
+				}
+			}
+		}, defaultIcon);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access for view categories
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Information about category in "org.eclipse.ui.views" extension.
+	 */
+	public static final class ViewCategoryInfo {
+		private final String m_id;
+		private final String m_name;
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public ViewCategoryInfo(String id, String name) {
+			m_id = id;
+			m_name = name;
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Object
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public String toString() {
+			return "(" + m_id + ", " + m_name + ")";
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Access
+		//
+		////////////////////////////////////////////////////////////////////////////
+		/**
+		 * @return the ID of this {@link ViewCategoryInfo}.
+		 */
+		public String getId() {
+			return m_id;
+		}
+
+		/**
+		 * @return the name of this {@link ViewCategoryInfo}.
+		 */
+		public String getName() {
+			return m_name;
+		}
+
+		/**
+		 * @return the {@link ViewInfo}'s for views in this category.
+		 */
+		public List<ViewInfo> getViews() {
+			final List<ViewInfo> views = Lists.newArrayList();
+			visitExtensions("org.eclipse.ui.views", "view", new IExtensionVisitor() {
+				@Override
+				public boolean visit(IPluginElement element) {
+					String categoryId = getAttribute(element, "category");
+					if (ObjectUtils.equals(m_id, categoryId)) {
+						views.add(createViewInfo(element));
+					}
+					return false;
+				}
+			});
+			return views;
+		}
+	}
+
+	/**
+	 * @return the {@link ViewCategoryInfo} constructed from given {@link IPluginElement}.
+	 */
+	private static ViewCategoryInfo createViewCategoryInfo(IPluginElement element) {
+		String id = getAttribute(element, "id");
+		String name = getAttribute(element, "name");
+		return new ViewCategoryInfo(id, name);
+	}
+
+	/**
+	 * @return the {@link ViewCategoryInfo}'s for each views category in Eclipse runtime/workspace.
+	 */
+	public static List<ViewCategoryInfo> getViewCategories() {
+		final List<ViewCategoryInfo> categories = Lists.newArrayList();
+		categories.add(new ViewCategoryInfo(null, "Other"));
+		visitExtensions("org.eclipse.ui.views", "category", new IExtensionVisitor() {
+			@Override
+			public boolean visit(IPluginElement element) {
+				categories.add(createViewCategoryInfo(element));
+				return false;
+			}
+		});
+		return categories;
+	}
+
+	/**
+	 * @return the {@link ViewCategoryInfo} for view with given ID, may be <code>null</code> if no
+	 *         such category found.
+	 */
+	public static ViewCategoryInfo getViewCategoryInfo(final String categoryId) {
+		final ViewCategoryInfo result[] = new ViewCategoryInfo[1];
+		visitExtensions("org.eclipse.ui.views", "category", new IExtensionVisitor() {
+			@Override
+			public boolean visit(IPluginElement element) {
+				if (categoryId != null) {
+					String id = getAttribute(element, "id");
+					if (categoryId.equals(id)) {
+						result[0] = createViewCategoryInfo(element);
+					}
+				}
+				return result[0] != null;
+			}
+		});
+		// OK, we have result
+		return result[0];
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access for views information (id, name, icon).
+	// Read only, for perspectives.
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final Image DEFAULT_VIEW_ICON = Activator.getImage("info/perspective/view.gif");
+	/**
+	 * Cache for view ID to {@link ViewInfo}.
+	 */
+	private static final Map<String, ViewInfo> m_viewsById = Maps.newTreeMap();
+
+	/**
+	 * Information about view in "org.eclipse.ui.views" extension.
+	 */
+	public static final class ViewInfo {
+		private final String m_id;
+		private final String m_className;
+		private final String m_category;
+		private final String m_name;
+		private final Image m_icon;
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public ViewInfo(String id, String className, String category, String name, Image icon) {
+			m_id = id;
+			m_className = className;
+			m_category = category;
+			m_name = name;
+			m_icon = icon;
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Object
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public String toString() {
+			return "(" + m_id + ", " + m_className + ", " + m_category + ", " + m_name + ")";
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Access
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public String getId() {
+			return m_id;
+		}
+
+		public String getClassName() {
+			return m_className;
+		}
+
+		public String getCategory() {
+			return m_category;
+		}
+
+		public String getName() {
+			return m_name;
+		}
+
+		public Image getIcon() {
+			return m_icon;
+		}
+	}
+
+	/**
+	 * @return the {@link ViewInfo} constructed from given {@link IPluginElement}.
+	 */
+	private static ViewInfo createViewInfo(IPluginElement element) {
+		String id = getAttribute(element, "id");
+		String className = getAttribute(element, "class");
+		String category = getAttribute(element, "category");
+		String name = getAttribute(element, "name");
+		Image icon = getElementIcon(element, "icon", DEFAULT_VIEW_ICON);
+		//
+		return new ViewInfo(id, className, category, name, icon);
+	}
+
+	/**
+	 * @return the {@link ViewInfo}'s for each view in Eclipse runtime/workspace.
+	 */
+	public static List<ViewInfo> getViews() {
+		final List<ViewInfo> views = Lists.newArrayList();
+		visitExtensions("org.eclipse.ui.views", "view", new IExtensionVisitor() {
+			@Override
+			public boolean visit(IPluginElement element) {
+				views.add(createViewInfo(element));
+				return false;
+			}
+		});
+		return views;
+	}
+
+	/**
+	 * Creates new {@link IPluginElement} for Eclipse view category.
+	 */
+	public IPluginElement createViewCategoryElement(String id, String name) throws Exception {
+		Map<String, String> attributes = ImmutableMap.of("id", id, "name", name);
+		createExtensionElement("org.eclipse.ui.views", "category", attributes);
+		return waitExtensionElementById("org.eclipse.ui.views", "category", id);
+	}
+
+	/**
+	 * Creates new {@link IPluginElement} for Eclipse view.
+	 */
+	public void createViewElement(String id, String name, String className) throws Exception {
+		Map<String, String> attributes = ImmutableMap.of("id", id, "name", name, "class", className);
+		createExtensionElement("org.eclipse.ui.views", "view", attributes);
+	}
+
+	/**
+	 * @return the {@link ViewInfo} for view with given ID, may be <code>null</code> if no such view
+	 *         found.
+	 */
+	public static ViewInfo getViewInfo(final String viewId) {
+		// check in cache
+		if (m_viewsById.containsKey(viewId)) {
+			return m_viewsById.get(viewId);
+		}
+		// visit all views
+		final ViewInfo result[] = new ViewInfo[1];
+		visitExtensions("org.eclipse.ui.views", "view", new IExtensionVisitor() {
+			@Override
+			public boolean visit(IPluginElement element) {
+				if (viewId != null) {
+					String id = getAttribute(element, "id");
+					if (viewId.equals(id)) {
+						result[0] = createViewInfo(element);
+					}
+				}
+				return result[0] != null;
+			}
+		});
+		// OK, we have result
+		m_viewsById.put(viewId, result[0]);
+		return result[0];
+	}
+
+	/**
+	 * @return the {@link ViewInfo} for view with given ID, returns not <code>null</code> even if no
+	 *         view with such ID.
+	 */
+	public static ViewInfo getViewInfoDefault(String viewId) {
+		ViewInfo viewInfo = getViewInfo(viewId);
+		if (viewInfo == null) {
+			viewInfo = new ViewInfo(viewId, "NoClass", "NoCategory", viewId, DEFAULT_VIEW_ICON);
+		}
+		return viewInfo;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Perspectives access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final Image DEFAULT_PERSPECTIVE_ICON =
+			Activator.getImage("info/perspective/perspective.gif");
+	/**
+	 * Cache for view ID to {@link ViewInfo}.
+	 */
+	private static final Map<String, PerspectiveInfo> m_perspectivesById = Maps.newTreeMap();
+
+	/**
+	 * Information about perspective in "org.eclipse.ui.perspectives" extension.
+	 */
+	public static class PerspectiveInfo {
+		private final String m_id;
+		private final String m_className;
+		private final String m_name;
+		private final Image m_icon;
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public PerspectiveInfo(String id, String className, String name, Image icon) {
+			m_id = id;
+			m_className = className;
+			m_name = name;
+			m_icon = icon;
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Object
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public String toString() {
+			return "(" + m_id + ", " + m_className + ", " + m_name + ")";
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Access
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public String getId() {
+			return m_id;
+		}
+
+		public String getClassName() {
+			return m_className;
+		}
+
+		public String getName() {
+			return m_name;
+		}
+
+		public Image getIcon() {
+			return m_icon;
+		}
+	}
+
+	/**
+	 * @return the {@link PerspectiveInfo} constructed from given {@link IPluginElement}.
+	 */
+	private static PerspectiveInfo createPerspectiveInfo(IPluginElement element) {
+		String id = getAttribute(element, "id");
+		String className = getAttribute(element, "class");
+		String name = getAttribute(element, "name");
+		Image icon = getElementIcon(element, "icon", DEFAULT_PERSPECTIVE_ICON);
+		return new PerspectiveInfo(id, className, name, icon);
+	}
+
+	/**
+	 * @return the {@link PerspectiveInfo}'s for each perspective in Eclipse runtime/workspace.
+	 */
+	public static List<PerspectiveInfo> getPerspectives() {
+		final List<PerspectiveInfo> perspectives = Lists.newArrayList();
+		visitExtensions("org.eclipse.ui.perspectives", "perspective", new IExtensionVisitor() {
+			@Override
+			public boolean visit(IPluginElement element) {
+				perspectives.add(createPerspectiveInfo(element));
+				return false;
+			}
+		});
+		return perspectives;
+	}
+
+	/**
+	 * Creates new {@link IPluginElement} for Eclipse perspective.
+	 */
+	public void createPerspectiveElement(String id, String name, String className) throws Exception {
+		Map<String, String> attributes = ImmutableMap.of("id", id, "name", name, "class", className);
+		createExtensionElement("org.eclipse.ui.perspectives", "perspective", attributes);
+	}
+
+	/**
+	 * @return the {@link PerspectiveInfo} for perspective with given ID, may be <code>null</code> if
+	 *         no such perspective found.
+	 */
+	public static PerspectiveInfo getPerspectiveInfo(final String perspectiveId) {
+		// check in cache
+		if (m_perspectivesById.containsKey(perspectiveId)) {
+			return m_perspectivesById.get(perspectiveId);
+		}
+		// visit all perspectives
+		final PerspectiveInfo result[] = new PerspectiveInfo[1];
+		visitExtensions("org.eclipse.ui.perspectives", "perspective", new IExtensionVisitor() {
+			@Override
+			public boolean visit(IPluginElement element) {
+				String id = getAttribute(element, "id");
+				if (perspectiveId.equals(id)) {
+					result[0] = createPerspectiveInfo(element);
+					return true;
+				}
+				return false;
+			}
+		});
+		// OK, we have result
+		m_perspectivesById.put(perspectiveId, result[0]);
+		return result[0];
+	}
+
+	/**
+	 * @return the {@link PerspectiveInfo} for perspective with given ID, returns not
+	 *         <code>null</code> even if no perspective with such ID.
+	 */
+	public static PerspectiveInfo getPerspectiveInfoDefault(final String perspectiveId) {
+		PerspectiveInfo perspectiveInfo = getPerspectiveInfo(perspectiveId);
+		if (perspectiveInfo == null) {
+			perspectiveInfo =
+					new PerspectiveInfo(perspectiveId, "NoClass", perspectiveId, DEFAULT_PERSPECTIVE_ICON);
+		}
+		return perspectiveInfo;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editor access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Creates new {@link IPluginElement} for Eclipse editor.
+	 */
+	public void createEditorElement(String id, String name, String className) throws Exception {
+		Map<String, String> attributes = ImmutableMap.of("id", id, "name", name, "class", className);
+		createExtensionElement("org.eclipse.ui.editors", "editor", attributes);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Extensions visiting
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Visitor interface to use with
+	 * {@link PdeUtils#visitExtensions(String, String, IExtensionVisitor)}.
+	 */
+	private interface IExtensionVisitor {
+		/**
+		 * Visits single extension {@link IPluginElement}.
+		 *
+		 * @return <code>true</code> if required result was found, so visiting should be terminated.
+		 */
+		boolean visit(IPluginElement element);
+	}
+
+	/**
+	 * Visits extensions to the extension point with given ID and element name.
+	 */
+	private static void visitExtensions(String pointId, String elementName, IExtensionVisitor visitor) {
+		IPluginModelBase[] plugins = getAllModels();
+		for (IPluginModelBase plugin : plugins) {
+			List<IPluginElement> elements = getExtensionElements(plugin, pointId, elementName);
+			for (IPluginElement element : elements) {
+				if (visitor.visit(element)) {
+					return;
+				}
+			}
+		}
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/PropertyPageInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/PropertyPageInfo.java
index d9e36cfa6..dd7937080 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/PropertyPageInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/PropertyPageInfo.java
@@ -25,25 +25,25 @@
  * @coverage rcp.model.rcp
  */
 public class PropertyPageInfo extends PreferencePageInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public PropertyPageInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public PropertyPageInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Rendering
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void configureShell() throws Exception {
-    super.configureShell();
-    ReflectionUtils.invokeMethod(m_shell, "setText(java.lang.String)", "Properties");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Rendering
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void configureShell() throws Exception {
+		super.configureShell();
+		ReflectionUtils.invokeMethod(m_shell, "setText(java.lang.String)", "Properties");
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/ViewCategoryPropertyEditor.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/ViewCategoryPropertyEditor.java
index 8fd47bc1c..628850924 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/ViewCategoryPropertyEditor.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/ViewCategoryPropertyEditor.java
@@ -24,46 +24,46 @@
  * @coverage rcp.model.rcp
  */
 public final class ViewCategoryPropertyEditor extends TextDialogPropertyEditor {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final PropertyEditor INSTANCE = new ViewCategoryPropertyEditor();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final PropertyEditor INSTANCE = new ViewCategoryPropertyEditor();
 
-  private ViewCategoryPropertyEditor() {
-  }
+	private ViewCategoryPropertyEditor() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getText(Property property) throws Exception {
-    Object value = property.getValue();
-    if (value instanceof String) {
-      return (String) value;
-    }
-    // unknown value
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getText(Property property) throws Exception {
+		Object value = property.getValue();
+		if (value instanceof String) {
+			return (String) value;
+		}
+		// unknown value
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void openDialog(Property property) throws Exception {
-    ExtensionElementProperty<?> extensionProperty = (ExtensionElementProperty<?>) property;
-    // prepare dialog
-    CategoriesAndViewsDialog dialog =
-        new CategoriesAndViewsDialog(DesignerPlugin.getShell(), extensionProperty.getUtils());
-    // open dialog
-    if (dialog.open() == Window.OK) {
-      // TODO
-      //property.setValue(localeDialog.getSelectedLocale().getLocale());
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void openDialog(Property property) throws Exception {
+		ExtensionElementProperty<?> extensionProperty = (ExtensionElementProperty<?>) property;
+		// prepare dialog
+		CategoriesAndViewsDialog dialog =
+				new CategoriesAndViewsDialog(DesignerPlugin.getShell(), extensionProperty.getUtils());
+		// open dialog
+		if (dialog.open() == Window.OK) {
+			// TODO
+			//property.setValue(localeDialog.getSelectedLocale().getLocale());
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/ViewPartInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/ViewPartInfo.java
index fec09b28c..edd545da3 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/ViewPartInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/ViewPartInfo.java
@@ -35,88 +35,88 @@
  * @coverage rcp.model.rcp
  */
 public final class ViewPartInfo extends ViewPartLikeInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ViewPartInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-    contributeExtensionProperty();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ViewPartInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+		contributeExtensionProperty();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Properties
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void contributeExtensionProperty() throws Exception {
-    new ExtensionPropertyHelper(this, "org.eclipse.ui.views", "view") {
-      @Override
-      protected Property[] createProperties() {
-        return new Property[]{
-            createStringProperty("name"),
-            createIconProperty("icon"),
-            createAttributeProperty(ViewCategoryPropertyEditor.INSTANCE, "category")};
-      }
-    };
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Properties
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void contributeExtensionProperty() throws Exception {
+		new ExtensionPropertyHelper(this, "org.eclipse.ui.views", "view") {
+			@Override
+			protected Property[] createProperties() {
+				return new Property[]{
+						createStringProperty("name"),
+						createIconProperty("icon"),
+						createAttributeProperty(ViewCategoryPropertyEditor.INSTANCE, "category")};
+			}
+		};
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Rendering
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getGUIMethodName() {
-    return "createPartControl";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Rendering
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getGUIMethodName() {
+		return "createPartControl";
+	}
 
-  @Override
-  protected void configureTabItem(CTabItem tabItem) throws Exception {
-    configureTabItem_fromExtension(tabItem, "ViewPart");
-  }
+	@Override
+	protected void configureTabItem(CTabItem tabItem) throws Exception {
+		configureTabItem_fromExtension(tabItem, "ViewPart");
+	}
 
-  /**
-   * Initializes this {@link ViewPart} with {@link IViewSite}.
-   */
-  @Override
-  protected void applyActionBars() throws Exception {
-    ClassLoader editorLoader = JavaInfoUtils.getClassLoader(this);
-    Class<?> viewSiteClass = editorLoader.loadClass("org.eclipse.ui.IViewSite");
-    // create IViewSite
-    Object viewSite =
-        Proxy.newProxyInstance(
-            editorLoader,
-            new Class<?>[]{viewSiteClass},
-            new InvocationHandler() {
-              @Override
-              public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
-                String signature = ReflectionUtils.getMethodSignature(method);
-                if (signature.equals("toString()")) {
-                  return "IViewSite_stub";
-                }
-                if (signature.equals("hashCode()")) {
-                  return 0;
-                }
-                if (signature.equals("getActionBars()")) {
-                  return m_actionBars;
-                }
-                if (signature.equals("getId()")) {
-                  return getID();
-                }
-                if (signature.equals("getSecondaryId()")) {
-                  return null;
-                }
-                if (signature.equals("getWorkbenchWindow()")) {
-                  return DesignerPlugin.getActiveWorkbenchWindow();
-                }
-                throw new NotImplementedException(method.toString());
-              }
-            });
-    // call init(IViewSite)
-    ReflectionUtils.invokeMethod(getObject(), "init(org.eclipse.ui.IViewSite)", viewSite);
-  }
+	/**
+	 * Initializes this {@link ViewPart} with {@link IViewSite}.
+	 */
+	@Override
+	protected void applyActionBars() throws Exception {
+		ClassLoader editorLoader = JavaInfoUtils.getClassLoader(this);
+		Class<?> viewSiteClass = editorLoader.loadClass("org.eclipse.ui.IViewSite");
+		// create IViewSite
+		Object viewSite =
+				Proxy.newProxyInstance(
+						editorLoader,
+						new Class<?>[]{viewSiteClass},
+						new InvocationHandler() {
+							@Override
+							public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
+								String signature = ReflectionUtils.getMethodSignature(method);
+								if (signature.equals("toString()")) {
+									return "IViewSite_stub";
+								}
+								if (signature.equals("hashCode()")) {
+									return 0;
+								}
+								if (signature.equals("getActionBars()")) {
+									return m_actionBars;
+								}
+								if (signature.equals("getId()")) {
+									return getID();
+								}
+								if (signature.equals("getSecondaryId()")) {
+									return null;
+								}
+								if (signature.equals("getWorkbenchWindow()")) {
+									return DesignerPlugin.getActiveWorkbenchWindow();
+								}
+								throw new NotImplementedException(method.toString());
+							}
+						});
+		// call init(IViewSite)
+		ReflectionUtils.invokeMethod(getObject(), "init(org.eclipse.ui.IViewSite)", viewSite);
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/ViewPartLikeInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/ViewPartLikeInfo.java
index 6dd2e167f..c55fe5aa6 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/ViewPartLikeInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/ViewPartLikeInfo.java
@@ -53,163 +53,163 @@
  * @coverage rcp.model.rcp
  */
 public abstract class ViewPartLikeInfo extends WorkbenchPartLikeInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ViewPartLikeInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ViewPartLikeInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Rendering
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected Object m_actionBars;
-  private Object m_toolBarManager;
-  private Object m_menuManager;
-  private Composite m_managersComposite;
-  private ToolItem m_menuToolItem;
-  private Rectangle m_menuToolItemBounds;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Rendering
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected Object m_actionBars;
+	private Object m_toolBarManager;
+	private Object m_menuManager;
+	private Composite m_managersComposite;
+	private ToolItem m_menuToolItem;
+	private Rectangle m_menuToolItemBounds;
 
-  @Override
-  public void render() throws Exception {
-    prepareActionBars();
-    applyActionBars();
-    super.render();
-    renderContributionManagers();
-  }
+	@Override
+	public void render() throws Exception {
+		prepareActionBars();
+		applyActionBars();
+		super.render();
+		renderContributionManagers();
+	}
 
-  /**
-   * Prepares {@link IActionBars} instance, with {@link ToolBarManager} and {@link MenuManager}.
-   */
-  private void prepareActionBars() throws Exception {
-    ClassLoader editorLoader = JavaInfoUtils.getClassLoader(this);
-    Class<?> toolBarManagerClass =
-        editorLoader.loadClass("org.eclipse.jface.action.ToolBarManager");
-    Class<?> menuManagerClass = editorLoader.loadClass("org.eclipse.jface.action.MenuManager");
-    Class<?> actionBarsClass = editorLoader.loadClass("org.eclipse.ui.IActionBars");
-    // create managers
-    m_toolBarManager = toolBarManagerClass.newInstance();
-    m_menuManager = menuManagerClass.newInstance();
-    // create IActionBars
-    m_actionBars =
-        Proxy.newProxyInstance(
-            editorLoader,
-            new Class<?>[]{actionBarsClass},
-            new InvocationHandler() {
-              @Override
-              public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
-                if (ReflectionUtils.getMethodSignature(method).equals("getToolBarManager()")) {
-                  return m_toolBarManager;
-                }
-                if (ReflectionUtils.getMethodSignature(method).equals("getMenuManager()")) {
-                  return m_menuManager;
-                }
-                throw new NotImplementedException();
-              }
-            });
-  }
+	/**
+	 * Prepares {@link IActionBars} instance, with {@link ToolBarManager} and {@link MenuManager}.
+	 */
+	private void prepareActionBars() throws Exception {
+		ClassLoader editorLoader = JavaInfoUtils.getClassLoader(this);
+		Class<?> toolBarManagerClass =
+				editorLoader.loadClass("org.eclipse.jface.action.ToolBarManager");
+		Class<?> menuManagerClass = editorLoader.loadClass("org.eclipse.jface.action.MenuManager");
+		Class<?> actionBarsClass = editorLoader.loadClass("org.eclipse.ui.IActionBars");
+		// create managers
+		m_toolBarManager = toolBarManagerClass.newInstance();
+		m_menuManager = menuManagerClass.newInstance();
+		// create IActionBars
+		m_actionBars =
+				Proxy.newProxyInstance(
+						editorLoader,
+						new Class<?>[]{actionBarsClass},
+						new InvocationHandler() {
+							@Override
+							public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
+								if (ReflectionUtils.getMethodSignature(method).equals("getToolBarManager()")) {
+									return m_toolBarManager;
+								}
+								if (ReflectionUtils.getMethodSignature(method).equals("getMenuManager()")) {
+									return m_menuManager;
+								}
+								throw new NotImplementedException();
+							}
+						});
+	}
 
-  /**
-   * Initializes this object with prepared {@link IActionBars}.
-   */
-  protected abstract void applyActionBars() throws Exception;
+	/**
+	 * Initializes this object with prepared {@link IActionBars}.
+	 */
+	protected abstract void applyActionBars() throws Exception;
 
-  /**
-   * Creates widgets for {@link ToolBarManager} and {@link MenuManager}.
-   */
-  private void renderContributionManagers() throws Exception {
-    m_managersComposite = new Composite(m_tabFolder, SWT.NONE);
-    GridLayoutFactory.create(m_managersComposite).columns(2).noMargins().noSpacing();
-    m_tabFolder.setTopRight(m_managersComposite);
-    // create ToolBarManager widget
-    {
-      ReflectionUtils.invokeMethod(
-          m_toolBarManager,
-          "createControl(org.eclipse.swt.widgets.Composite)",
-          m_managersComposite);
-    }
-    // create MenuManager widget
-    {
-      final Menu menu =
-          (Menu) ReflectionUtils.invokeMethod(
-              m_menuManager,
-              "createContextMenu(org.eclipse.swt.widgets.Control)",
-              m_tabFolder);
-      // bind MenuManager
-      final ToolBar menuToolBar = new ToolBar(m_managersComposite, SWT.FLAT | SWT.RIGHT);
-      m_menuToolItem = new ToolItem(menuToolBar, SWT.PUSH);
-      m_menuToolItem.setImage(Activator.getImage("view_menu.gif"));
-      m_menuToolItem.addSelectionListener(new SelectionAdapter() {
-        @Override
-        public void widgetSelected(SelectionEvent e) {
-          ExecutionUtils.runLog(new RunnableEx() {
-            @Override
-            public void run() throws Exception {
-              org.eclipse.swt.graphics.Rectangle bounds = m_menuToolItem.getBounds();
-              org.eclipse.swt.graphics.Point bottomLeft =
-                  new org.eclipse.swt.graphics.Point(bounds.x, bounds.y + bounds.height);
-              bottomLeft = menuToolBar.toDisplay(bottomLeft);
-              menu.setLocation(bottomLeft.x, bottomLeft.y);
-              menu.setVisible(true);
-            }
-          });
-        }
-      });
-    }
-  }
+	/**
+	 * Creates widgets for {@link ToolBarManager} and {@link MenuManager}.
+	 */
+	private void renderContributionManagers() throws Exception {
+		m_managersComposite = new Composite(m_tabFolder, SWT.NONE);
+		GridLayoutFactory.create(m_managersComposite).columns(2).noMargins().noSpacing();
+		m_tabFolder.setTopRight(m_managersComposite);
+		// create ToolBarManager widget
+		{
+			ReflectionUtils.invokeMethod(
+					m_toolBarManager,
+					"createControl(org.eclipse.swt.widgets.Composite)",
+					m_managersComposite);
+		}
+		// create MenuManager widget
+		{
+			final Menu menu =
+					(Menu) ReflectionUtils.invokeMethod(
+							m_menuManager,
+							"createContextMenu(org.eclipse.swt.widgets.Control)",
+							m_tabFolder);
+			// bind MenuManager
+			final ToolBar menuToolBar = new ToolBar(m_managersComposite, SWT.FLAT | SWT.RIGHT);
+			m_menuToolItem = new ToolItem(menuToolBar, SWT.PUSH);
+			m_menuToolItem.setImage(Activator.getImage("view_menu.gif"));
+			m_menuToolItem.addSelectionListener(new SelectionAdapter() {
+				@Override
+				public void widgetSelected(SelectionEvent e) {
+					ExecutionUtils.runLog(new RunnableEx() {
+						@Override
+						public void run() throws Exception {
+							org.eclipse.swt.graphics.Rectangle bounds = m_menuToolItem.getBounds();
+							org.eclipse.swt.graphics.Point bottomLeft =
+									new org.eclipse.swt.graphics.Point(bounds.x, bounds.y + bounds.height);
+							bottomLeft = menuToolBar.toDisplay(bottomLeft);
+							menu.setLocation(bottomLeft.x, bottomLeft.y);
+							menu.setVisible(true);
+						}
+					});
+				}
+			});
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void refresh_afterCreate() throws Exception {
-    super.refresh_afterCreate();
-    // update tab item height, it should be big enough to show "toolComposite",
-    // in other case SWT does not show "toolbar" at all
-    {
-      int toolHeight = m_managersComposite.computeSize(SWT.DEFAULT, SWT.DEFAULT, true).y + 2;
-      m_tabFolder.setTabHeight(Math.max(m_tabFolder.getTabHeight(), toolHeight));
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void refresh_afterCreate() throws Exception {
+		super.refresh_afterCreate();
+		// update tab item height, it should be big enough to show "toolComposite",
+		// in other case SWT does not show "toolbar" at all
+		{
+			int toolHeight = m_managersComposite.computeSize(SWT.DEFAULT, SWT.DEFAULT, true).y + 2;
+			m_tabFolder.setTabHeight(Math.max(m_tabFolder.getTabHeight(), toolHeight));
+		}
+	}
 
-  @Override
-  protected void refresh_fetch() throws Exception {
-    super.refresh_fetch();
-    // fetch bounds of menu drop-down
-    {
-      m_menuToolItemBounds = RectangleSupport.getRectangle(m_menuToolItem.getBounds());
-      Point menuToolItemDisplayLocation =
-          PointSupport.getPoint(m_menuToolItem.getParent().toDisplay(
-              m_menuToolItemBounds.x,
-              m_menuToolItemBounds.y));
-      // convert into "shot"
-      Point parentLocation = CoordinateUtils.getDisplayLocation(m_tabFolder);
-      m_menuToolItemBounds.x = menuToolItemDisplayLocation.x - parentLocation.x;
-      m_menuToolItemBounds.y = menuToolItemDisplayLocation.y - parentLocation.y;
-    }
-  }
+	@Override
+	protected void refresh_fetch() throws Exception {
+		super.refresh_fetch();
+		// fetch bounds of menu drop-down
+		{
+			m_menuToolItemBounds = RectangleSupport.getRectangle(m_menuToolItem.getBounds());
+			Point menuToolItemDisplayLocation =
+					PointSupport.getPoint(m_menuToolItem.getParent().toDisplay(
+							m_menuToolItemBounds.x,
+							m_menuToolItemBounds.y));
+			// convert into "shot"
+			Point parentLocation = CoordinateUtils.getDisplayLocation(m_tabFolder);
+			m_menuToolItemBounds.x = menuToolItemDisplayLocation.x - parentLocation.x;
+			m_menuToolItemBounds.y = menuToolItemDisplayLocation.y - parentLocation.y;
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IMenuPopupInfo for MenuManager_Info
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link IMenuPopupInfo} for {@link MenuManagerInfo} in this {@link ViewPartLikeInfo}
-   *         . This method is invoked with ready {@link MenuManagerInfo}, so we don't need to check
-   *         it {@link MenuManagerInfo} exists.
-   */
-  public IMenuPopupInfo getMenuImpl(MenuManagerInfo manager) {
-    MenuManagerPopupInfo popupInfo = new MenuManagerPopupInfo(manager);
-    popupInfo.setBounds(m_menuToolItemBounds);
-    return popupInfo;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IMenuPopupInfo for MenuManager_Info
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link IMenuPopupInfo} for {@link MenuManagerInfo} in this {@link ViewPartLikeInfo}
+	 *         . This method is invoked with ready {@link MenuManagerInfo}, so we don't need to check
+	 *         it {@link MenuManagerInfo} exists.
+	 */
+	public IMenuPopupInfo getMenuImpl(MenuManagerInfo manager) {
+		MenuManagerPopupInfo popupInfo = new MenuManagerPopupInfo(manager);
+		popupInfo.setBounds(m_menuToolItemBounds);
+		return popupInfo;
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/WorkbenchPartLikeInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/WorkbenchPartLikeInfo.java
index 341febf80..780e9a529 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/WorkbenchPartLikeInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/WorkbenchPartLikeInfo.java
@@ -52,194 +52,194 @@
  * @coverage rcp.model.rcp
  */
 public abstract class WorkbenchPartLikeInfo extends AbstractComponentInfo
-    implements
-      IJavaInfoRendering {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public WorkbenchPartLikeInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-    JavaInfoUtils.scheduleSpecialRendering(this);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exposed
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void createExposedChildren() throws Exception {
-    super.createExposedChildren();
-    WidgetInfo.createExposedChildren(this);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Rendering
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Shell m_shell;
-  protected CTabFolder m_tabFolder;
-
-  @Override
-  public void render() throws Exception {
-    m_shell = new Shell();
-    m_shell.setLayout(new FillLayout());
-    // prepare gradient workbench-like CTabFolder
-    m_tabFolder = new CTabFolder(m_shell, SWT.BORDER | SWT.CLOSE);
-    m_tabFolder.setSimple(false);
-    m_tabFolder.setMinimizeVisible(true);
-    m_tabFolder.setMaximizeVisible(true);
-    TabFolderDecorator.setActiveTabColors(true, m_tabFolder);
-    // prepare "tabItem" that looks according to concrete model
-    CTabItem tabItem = new CTabItem(m_tabFolder, SWT.NONE);
-    m_tabFolder.setSelection(tabItem);
-    configureTabItem(tabItem);
-    // prepare "container" for hosting WorkbenchPart control
-    Composite container = new Composite(m_tabFolder, SWT.NONE);
-    container.setLayout(new FillLayout());
-    tabItem.setControl(container);
-    // OK, we prepared everything, now render GUI
-    ReflectionUtils.invokeMethod(getObject(), getGUIMethodName()
-        + "(org.eclipse.swt.widgets.Composite)", container);
-  }
-
-  /**
-   * @return the name of method that creates GUI in sub-class of {@link WorkbenchPartLikeInfo}.
-   */
-  protected abstract String getGUIMethodName();
-
-  /**
-   * Configures given {@link CTabItem} in concrete subtype of {@link WorkbenchPartLikeInfo}.
-   */
-  protected abstract void configureTabItem(CTabItem tabItem) throws Exception;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AbstractComponentInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected TopBoundsSupport createTopBoundsSupport() {
-    return new WorkbenchPartTopBoundsSupport(this);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Hierarchy
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean canBeRoot() {
-    return true;
-  }
-
-  @Override
-  public Object getComponentObject() {
-    return m_tabFolder;
-  }
-
-  /**
-   * @return the top level {@link Shell}.
-   */
-  public Shell getShell() {
-    return m_shell;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void refresh_dispose() throws Exception {
-    if (m_shell != null) {
-      m_shell.dispose();
-      m_shell = null;
-    }
-    super.refresh_dispose();
-  }
-
-  @Override
-  protected void refresh_fetch() throws Exception {
-    ControlInfo.refresh_fetch(this, new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        WorkbenchPartLikeInfo.super.refresh_fetch();
-      }
-    });
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Utility method to use in {@link #configureTabItem(CTabItem)} for components that have
-   * "Extension" property, i.e. contributed from <code>plugin.xml</code> file.
-   */
-  protected final void configureTabItem_fromExtension(CTabItem tabItem, String defaultText)
-      throws Exception {
-    // at parsing time it is dangerous to ask properties
-    if (GlobalState.isParsing()) {
-      return;
-    }
-    ComplexProperty extensionProperty = (ComplexProperty) getPropertyByTitle("Extension");
-    // text
-    {
-      String text = defaultText;
-      // try to get "name" from extension
-      if (extensionProperty != null) {
-        Property nameProperty = extensionProperty.getProperties()[0];
-        if (nameProperty.isModified()) {
-          text = (String) nameProperty.getValue();
-        }
-      }
-      // OK, set text
-      tabItem.setText(text);
-    }
-    // icon
-    {
-      Image icon = getDescription().getIcon();
-      // try to get "icon" from extension
-      if (extensionProperty != null) {
-        Property iconProperty = extensionProperty.getProperties()[1];
-        if (iconProperty.isModified()) {
-          String iconPath = (String) iconProperty.getValue();
-          IProject project = getEditor().getJavaProject().getProject();
-          IFile iconFile = project.getFile(new Path(iconPath));
-          if (iconFile.exists()) {
-            String iconLocation = iconFile.getLocation().toOSString();
-            icon = SwtResourceManager.getImage(iconLocation);
-          }
-        }
-      }
-      // OK, set icon
-      tabItem.setImage(icon);
-    }
-  }
-
-  /**
-   * @return the ID from <code>ID</code> field.
-   */
-  protected final String getID() {
-    TypeDeclaration typeDeclaration = JavaInfoUtils.getTypeDeclaration(this);
-    FieldDeclaration[] fields = typeDeclaration.getFields();
-    for (FieldDeclaration field : fields) {
-      for (VariableDeclarationFragment fragment : DomGenerics.fragments(field)) {
-        if (fragment.getName().getIdentifier().equals("ID")) {
-          Expression initializer = fragment.getInitializer();
-          if (initializer instanceof StringLiteral) {
-            return ((StringLiteral) initializer).getLiteralValue();
-          }
-        }
-      }
-    }
-    return null;
-  }
+implements
+IJavaInfoRendering {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public WorkbenchPartLikeInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+		JavaInfoUtils.scheduleSpecialRendering(this);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exposed
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void createExposedChildren() throws Exception {
+		super.createExposedChildren();
+		WidgetInfo.createExposedChildren(this);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Rendering
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Shell m_shell;
+	protected CTabFolder m_tabFolder;
+
+	@Override
+	public void render() throws Exception {
+		m_shell = new Shell();
+		m_shell.setLayout(new FillLayout());
+		// prepare gradient workbench-like CTabFolder
+		m_tabFolder = new CTabFolder(m_shell, SWT.BORDER | SWT.CLOSE);
+		m_tabFolder.setSimple(false);
+		m_tabFolder.setMinimizeVisible(true);
+		m_tabFolder.setMaximizeVisible(true);
+		TabFolderDecorator.setActiveTabColors(true, m_tabFolder);
+		// prepare "tabItem" that looks according to concrete model
+		CTabItem tabItem = new CTabItem(m_tabFolder, SWT.NONE);
+		m_tabFolder.setSelection(tabItem);
+		configureTabItem(tabItem);
+		// prepare "container" for hosting WorkbenchPart control
+		Composite container = new Composite(m_tabFolder, SWT.NONE);
+		container.setLayout(new FillLayout());
+		tabItem.setControl(container);
+		// OK, we prepared everything, now render GUI
+		ReflectionUtils.invokeMethod(getObject(), getGUIMethodName()
+				+ "(org.eclipse.swt.widgets.Composite)", container);
+	}
+
+	/**
+	 * @return the name of method that creates GUI in sub-class of {@link WorkbenchPartLikeInfo}.
+	 */
+	protected abstract String getGUIMethodName();
+
+	/**
+	 * Configures given {@link CTabItem} in concrete subtype of {@link WorkbenchPartLikeInfo}.
+	 */
+	protected abstract void configureTabItem(CTabItem tabItem) throws Exception;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AbstractComponentInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected TopBoundsSupport createTopBoundsSupport() {
+		return new WorkbenchPartTopBoundsSupport(this);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Hierarchy
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean canBeRoot() {
+		return true;
+	}
+
+	@Override
+	public Object getComponentObject() {
+		return m_tabFolder;
+	}
+
+	/**
+	 * @return the top level {@link Shell}.
+	 */
+	public Shell getShell() {
+		return m_shell;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void refresh_dispose() throws Exception {
+		if (m_shell != null) {
+			m_shell.dispose();
+			m_shell = null;
+		}
+		super.refresh_dispose();
+	}
+
+	@Override
+	protected void refresh_fetch() throws Exception {
+		ControlInfo.refresh_fetch(this, new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				WorkbenchPartLikeInfo.super.refresh_fetch();
+			}
+		});
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Utility method to use in {@link #configureTabItem(CTabItem)} for components that have
+	 * "Extension" property, i.e. contributed from <code>plugin.xml</code> file.
+	 */
+	protected final void configureTabItem_fromExtension(CTabItem tabItem, String defaultText)
+			throws Exception {
+		// at parsing time it is dangerous to ask properties
+		if (GlobalState.isParsing()) {
+			return;
+		}
+		ComplexProperty extensionProperty = (ComplexProperty) getPropertyByTitle("Extension");
+		// text
+		{
+			String text = defaultText;
+			// try to get "name" from extension
+			if (extensionProperty != null) {
+				Property nameProperty = extensionProperty.getProperties()[0];
+				if (nameProperty.isModified()) {
+					text = (String) nameProperty.getValue();
+				}
+			}
+			// OK, set text
+			tabItem.setText(text);
+		}
+		// icon
+		{
+			Image icon = getDescription().getIcon();
+			// try to get "icon" from extension
+			if (extensionProperty != null) {
+				Property iconProperty = extensionProperty.getProperties()[1];
+				if (iconProperty.isModified()) {
+					String iconPath = (String) iconProperty.getValue();
+					IProject project = getEditor().getJavaProject().getProject();
+					IFile iconFile = project.getFile(new Path(iconPath));
+					if (iconFile.exists()) {
+						String iconLocation = iconFile.getLocation().toOSString();
+						icon = SwtResourceManager.getImage(iconLocation);
+					}
+				}
+			}
+			// OK, set icon
+			tabItem.setImage(icon);
+		}
+	}
+
+	/**
+	 * @return the ID from <code>ID</code> field.
+	 */
+	protected final String getID() {
+		TypeDeclaration typeDeclaration = JavaInfoUtils.getTypeDeclaration(this);
+		FieldDeclaration[] fields = typeDeclaration.getFields();
+		for (FieldDeclaration field : fields) {
+			for (VariableDeclarationFragment fragment : DomGenerics.fragments(field)) {
+				if (fragment.getName().getIdentifier().equals("ID")) {
+					Expression initializer = fragment.getInitializer();
+					if (initializer instanceof StringLiteral) {
+						return ((StringLiteral) initializer).getLiteralValue();
+					}
+				}
+			}
+		}
+		return null;
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/WorkbenchPartTopBoundsSupport.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/WorkbenchPartTopBoundsSupport.java
index 95b7f3b4b..00ed44f0b 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/WorkbenchPartTopBoundsSupport.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/WorkbenchPartTopBoundsSupport.java
@@ -26,56 +26,56 @@
  * @coverage rcp.model.rcp
  */
 public final class WorkbenchPartTopBoundsSupport extends TopBoundsSupport {
-  private final WorkbenchPartLikeInfo m_part;
+	private final WorkbenchPartLikeInfo m_part;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public WorkbenchPartTopBoundsSupport(WorkbenchPartLikeInfo part) {
-    super(part);
-    m_part = part;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public WorkbenchPartTopBoundsSupport(WorkbenchPartLikeInfo part) {
+		super(part);
+		m_part = part;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // TopBoundsSupport
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void apply() throws Exception {
-    // set size from resource properties (or default)
-    {
-      Dimension size = getResourceSize();
-      Shell shell = m_part.getShell();
-      // "size" is size of _content_ for "shell", so calculate trim
-      Rectangle trim =
-          RectangleSupport.getRectangle(shell.computeTrim(0, 0, size.width, size.height));
-      // OK, set size from trim
-      ControlSupport.setSize(shell, trim.width, trim.height);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// TopBoundsSupport
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void apply() throws Exception {
+		// set size from resource properties (or default)
+		{
+			Dimension size = getResourceSize();
+			Shell shell = m_part.getShell();
+			// "size" is size of _content_ for "shell", so calculate trim
+			Rectangle trim =
+					RectangleSupport.getRectangle(shell.computeTrim(0, 0, size.width, size.height));
+			// OK, set size from trim
+			ControlSupport.setSize(shell, trim.width, trim.height);
+		}
+	}
 
-  @Override
-  public void setSize(int width, int height) throws Exception {
-    // remember size in resource properties
-    setResourceSize(width, height);
-  }
+	@Override
+	public void setSize(int width, int height) throws Exception {
+		// remember size in resource properties
+		setResourceSize(width, height);
+	}
 
-  @Override
-  protected Dimension getDefaultSize() {
-    return new Dimension(600, 500);
-  }
+	@Override
+	protected Dimension getDefaultSize() {
+		return new Dimension(600, 500);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Show
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean show() throws Exception {
-    CompositeTopBoundsSupport.show(m_part, m_part.getShell());
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Show
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean show() throws Exception {
+		CompositeTopBoundsSupport.show(m_part, m_part.getShell());
+		return true;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/WorkbenchWindowAdvisorPropertiesProvider.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/WorkbenchWindowAdvisorPropertiesProvider.java
index 7bc7eb368..da48031f6 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/WorkbenchWindowAdvisorPropertiesProvider.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/WorkbenchWindowAdvisorPropertiesProvider.java
@@ -62,288 +62,288 @@
  * @coverage rcp.model.rcp
  */
 final class WorkbenchWindowAdvisorPropertiesProvider {
-  private final ActionBarAdvisorInfo m_actionBar;
-  private boolean m_initialized;
-  private AstEditor m_windowEditor;
-  private TypeDeclaration m_windowType;
-  private final List<Property> m_properties = Lists.newArrayList();
+	private final ActionBarAdvisorInfo m_actionBar;
+	private boolean m_initialized;
+	private AstEditor m_windowEditor;
+	private TypeDeclaration m_windowType;
+	private final List<Property> m_properties = Lists.newArrayList();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public WorkbenchWindowAdvisorPropertiesProvider(ActionBarAdvisorInfo actionBar) {
-    m_actionBar = actionBar;
-    addPropertyValueBroadcast();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public WorkbenchWindowAdvisorPropertiesProvider(ActionBarAdvisorInfo actionBar) {
+		m_actionBar = actionBar;
+		addPropertyValueBroadcast();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Broadcasts
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * We don't visit {@link Expression}'s of {@link WorkbenchWindowAdvisor} properties, so have to
-   * use special way to provide their values.
-   */
-  private void addPropertyValueBroadcast() {
-    m_actionBar.addBroadcastListener(new GenericPropertyGetValueEx() {
-      @Override
-      public void invoke(GenericPropertyImpl property, Expression expression, Object[] value)
-          throws Exception {
-        if (m_properties.contains(property)) {
-          value[0] = getValue(expression);
-        }
-      }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Broadcasts
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * We don't visit {@link Expression}'s of {@link WorkbenchWindowAdvisor} properties, so have to
+	 * use special way to provide their values.
+	 */
+	private void addPropertyValueBroadcast() {
+		m_actionBar.addBroadcastListener(new GenericPropertyGetValueEx() {
+			@Override
+			public void invoke(GenericPropertyImpl property, Expression expression, Object[] value)
+					throws Exception {
+				if (m_properties.contains(property)) {
+					value[0] = getValue(expression);
+				}
+			}
 
-      private Object getValue(Expression expression) {
-        if (expression instanceof BooleanLiteral) {
-          return ((BooleanLiteral) expression).booleanValue();
-        }
-        if (expression instanceof StringLiteral) {
-          return ((StringLiteral) expression).getLiteralValue();
-        }
-        return Property.UNKNOWN_VALUE;
-      }
-    });
-  }
+			private Object getValue(Expression expression) {
+				if (expression instanceof BooleanLiteral) {
+					return ((BooleanLiteral) expression).booleanValue();
+				}
+				if (expression instanceof StringLiteral) {
+					return ((StringLiteral) expression).getLiteralValue();
+				}
+				return Property.UNKNOWN_VALUE;
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  List<Property> getProperties() throws Exception {
-    if (!m_initialized) {
-      m_initialized = true;
-      initializeWindowAST();
-      if (m_windowEditor != null) {
-        createProperties();
-      }
-    }
-    // return prepared properties
-    return m_properties;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	List<Property> getProperties() throws Exception {
+		if (!m_initialized) {
+			m_initialized = true;
+			initializeWindowAST();
+			if (m_windowEditor != null) {
+				createProperties();
+			}
+		}
+		// return prepared properties
+		return m_properties;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Implementation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Fills {@link #m_properties} field.
-   */
-  private void createProperties() throws Exception {
-    ComponentDescription windowDescription =
-        ComponentDescriptionHelper.getDescription(
-            m_actionBar.getEditor(),
-            "org.eclipse.ui.application.IWorkbenchWindowConfigurer");
-    for (GenericPropertyDescription description : windowDescription.getProperties()) {
-      m_properties.add(createProperty(description));
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Implementation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Fills {@link #m_properties} field.
+	 */
+	private void createProperties() throws Exception {
+		ComponentDescription windowDescription =
+				ComponentDescriptionHelper.getDescription(
+						m_actionBar.getEditor(),
+						"org.eclipse.ui.application.IWorkbenchWindowConfigurer");
+		for (GenericPropertyDescription description : windowDescription.getProperties()) {
+			m_properties.add(createProperty(description));
+		}
+	}
 
-  private Property createProperty(GenericPropertyDescription description) throws Exception {
-    ExpressionAccessor expressionAccessor = createExpressionAccessor(description);
-    return new GenericPropertyImpl(m_actionBar,
-        description.getTitle(),
-        new ExpressionAccessor[]{expressionAccessor},
-        description.getDefaultValue(),
-        description.getConverter(),
-        description.getEditor());
-  }
+	private Property createProperty(GenericPropertyDescription description) throws Exception {
+		ExpressionAccessor expressionAccessor = createExpressionAccessor(description);
+		return new GenericPropertyImpl(m_actionBar,
+				description.getTitle(),
+				new ExpressionAccessor[]{expressionAccessor},
+				description.getDefaultValue(),
+				description.getConverter(),
+				description.getEditor());
+	}
 
-  private ExpressionAccessor createExpressionAccessor(GenericPropertyDescription description) {
-    SetterAccessor setterAccessor = (SetterAccessor) description.getAccessorsList().get(0);
-    String methodName = setterAccessor.getSetter().getName();
-    return new Window_ExpressionAccessor(methodName);
-  }
+	private ExpressionAccessor createExpressionAccessor(GenericPropertyDescription description) {
+		SetterAccessor setterAccessor = (SetterAccessor) description.getAccessorsList().get(0);
+		String methodName = setterAccessor.getSetter().getName();
+		return new Window_ExpressionAccessor(methodName);
+	}
 
-  /**
-   * Initializes {@link #m_windowEditor} and related.
-   */
-  private void initializeWindowAST() throws Exception {
-    ICompilationUnit windowUnit = get_WorkbenchWindowAdvisor_unit();
-    if (windowUnit != null) {
-      m_windowEditor = new AstEditor(windowUnit);
-      String windowTypeName = CodeUtils.findPrimaryType(windowUnit).getElementName();
-      m_windowType = AstNodeUtils.getTypeByName(m_windowEditor.getAstUnit(), windowTypeName);
-    }
-  }
+	/**
+	 * Initializes {@link #m_windowEditor} and related.
+	 */
+	private void initializeWindowAST() throws Exception {
+		ICompilationUnit windowUnit = get_WorkbenchWindowAdvisor_unit();
+		if (windowUnit != null) {
+			m_windowEditor = new AstEditor(windowUnit);
+			String windowTypeName = CodeUtils.findPrimaryType(windowUnit).getElementName();
+			m_windowType = AstNodeUtils.getTypeByName(m_windowEditor.getAstUnit(), windowTypeName);
+		}
+	}
 
-  /**
-   * @return the {@link ICompilationUnit} with {@link WorkbenchWindowAdvisor} that references this
-   *         {@link ActionBarAdvisor}.
-   */
-  private ICompilationUnit get_WorkbenchWindowAdvisor_unit() throws Exception {
-    String actionAdvisorName =
-        AstNodeUtils.getFullyQualifiedName(JavaInfoUtils.getTypeDeclaration(m_actionBar), false);
-    IPackageFragment pkg = (IPackageFragment) m_actionBar.getEditor().getModelUnit().getParent();
-    for (ICompilationUnit unit : pkg.getCompilationUnits()) {
-      if (is_WorkbenchWindowAdvisor_thatReferences_ActionBarAdvisor(unit, actionAdvisorName)) {
-        return unit;
-      }
-    }
-    return null;
-  }
+	/**
+	 * @return the {@link ICompilationUnit} with {@link WorkbenchWindowAdvisor} that references this
+	 *         {@link ActionBarAdvisor}.
+	 */
+	private ICompilationUnit get_WorkbenchWindowAdvisor_unit() throws Exception {
+		String actionAdvisorName =
+				AstNodeUtils.getFullyQualifiedName(JavaInfoUtils.getTypeDeclaration(m_actionBar), false);
+		IPackageFragment pkg = (IPackageFragment) m_actionBar.getEditor().getModelUnit().getParent();
+		for (ICompilationUnit unit : pkg.getCompilationUnits()) {
+			if (is_WorkbenchWindowAdvisor_thatReferences_ActionBarAdvisor(unit, actionAdvisorName)) {
+				return unit;
+			}
+		}
+		return null;
+	}
 
-  /**
-   * @return <code>true</code> if given {@link ICompilationUnit} has {@link WorkbenchWindowAdvisor}
-   *         that references {@link ActionBarAdvisor} with given name.
-   */
-  private static boolean is_WorkbenchWindowAdvisor_thatReferences_ActionBarAdvisor(ICompilationUnit unit,
-      String actionAdvisorName) throws Exception {
-    IType type = CodeUtils.findPrimaryType(unit);
-    if (CodeUtils.isSuccessorOf(type, "org.eclipse.ui.application.WorkbenchWindowAdvisor")) {
-      CompilationUnit astUnit = CodeUtils.parseCompilationUnit(unit);
-      TypeDeclaration astType = AstNodeUtils.getTypeByName(astUnit, type.getElementName());
-      MethodDeclaration createActionBarAdvisor =
-          AstNodeUtils.getMethodBySignature(
-              astType,
-              "createActionBarAdvisor(org.eclipse.ui.application.IActionBarConfigurer)");
-      if (createActionBarAdvisor != null) {
-        List<Statement> statements = DomGenerics.statements(createActionBarAdvisor.getBody());
-        for (Statement statement : statements) {
-          if (statement instanceof ReturnStatement) {
-            ReturnStatement returnStatement = (ReturnStatement) statement;
-            if (returnStatement.getExpression() instanceof ClassInstanceCreation) {
-              ClassInstanceCreation creation =
-                  (ClassInstanceCreation) returnStatement.getExpression();
-              String creationTypeName = AstNodeUtils.getFullyQualifiedName(creation, false);
-              return creationTypeName.equals(actionAdvisorName);
-            }
-          }
-        }
-      }
-    }
-    return false;
-  }
+	/**
+	 * @return <code>true</code> if given {@link ICompilationUnit} has {@link WorkbenchWindowAdvisor}
+	 *         that references {@link ActionBarAdvisor} with given name.
+	 */
+	private static boolean is_WorkbenchWindowAdvisor_thatReferences_ActionBarAdvisor(ICompilationUnit unit,
+			String actionAdvisorName) throws Exception {
+		IType type = CodeUtils.findPrimaryType(unit);
+		if (CodeUtils.isSuccessorOf(type, "org.eclipse.ui.application.WorkbenchWindowAdvisor")) {
+			CompilationUnit astUnit = CodeUtils.parseCompilationUnit(unit);
+			TypeDeclaration astType = AstNodeUtils.getTypeByName(astUnit, type.getElementName());
+			MethodDeclaration createActionBarAdvisor =
+					AstNodeUtils.getMethodBySignature(
+							astType,
+							"createActionBarAdvisor(org.eclipse.ui.application.IActionBarConfigurer)");
+			if (createActionBarAdvisor != null) {
+				List<Statement> statements = DomGenerics.statements(createActionBarAdvisor.getBody());
+				for (Statement statement : statements) {
+					if (statement instanceof ReturnStatement) {
+						ReturnStatement returnStatement = (ReturnStatement) statement;
+						if (returnStatement.getExpression() instanceof ClassInstanceCreation) {
+							ClassInstanceCreation creation =
+									(ClassInstanceCreation) returnStatement.getExpression();
+							String creationTypeName = AstNodeUtils.getFullyQualifiedName(creation, false);
+							return creationTypeName.equals(actionAdvisorName);
+						}
+					}
+				}
+			}
+		}
+		return false;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ExpressionAccessor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * {@link ExpressionAccessor} for {@link IWorkbenchWindowConfigurer} in
-   * {@link WorkbenchWindowAdvisor#preWindowOpen()}.
-   *
-   * @author scheglov_ke
-   */
-  private final class Window_ExpressionAccessor extends ExpressionAccessor {
-    private final String m_methodName;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ExpressionAccessor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * {@link ExpressionAccessor} for {@link IWorkbenchWindowConfigurer} in
+	 * {@link WorkbenchWindowAdvisor#preWindowOpen()}.
+	 *
+	 * @author scheglov_ke
+	 */
+	private final class Window_ExpressionAccessor extends ExpressionAccessor {
+		private final String m_methodName;
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public Window_ExpressionAccessor(String methodName) {
-      m_methodName = methodName;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public Window_ExpressionAccessor(String methodName) {
+			m_methodName = methodName;
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // ExpressionAccessor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public Expression getExpression(JavaInfo javaInfo) throws Exception {
-      MethodInvocation invocation = getInvocation();
-      if (invocation != null) {
-        return DomGenerics.arguments(invocation).get(0);
-      }
-      return null;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// ExpressionAccessor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public Expression getExpression(JavaInfo javaInfo) throws Exception {
+			MethodInvocation invocation = getInvocation();
+			if (invocation != null) {
+				return DomGenerics.arguments(invocation).get(0);
+			}
+			return null;
+		}
 
-    @Override
-    public boolean setExpression(JavaInfo javaInfo, String source) throws Exception {
-      // update existing invocation
-      MethodInvocation invocation = getInvocation();
-      if (invocation != null) {
-        if (source == null) {
-          m_windowEditor.removeEnclosingStatement(invocation);
-        } else {
-          Expression expression = DomGenerics.arguments(invocation).get(0);
-          m_windowEditor.replaceExpression(expression, source);
-        }
-      } else if (source != null) {
-        MethodDeclaration method = ensureTargetMethod();
-        VariableDeclaration configurerDeclaration = getConfigurerDeclaration(method);
-        if (configurerDeclaration != null) {
-          String statementSource =
-              MessageFormat.format(
-                  "{0}.{1}({2});",
-                  configurerDeclaration.getName().getIdentifier(),
-                  m_methodName,
-                  source);
-          m_windowEditor.addStatement(statementSource, new StatementTarget(method, false));
-        }
-      }
-      // success
-      m_windowEditor.commitChanges();
-      return true;
-    }
+		@Override
+		public boolean setExpression(JavaInfo javaInfo, String source) throws Exception {
+			// update existing invocation
+			MethodInvocation invocation = getInvocation();
+			if (invocation != null) {
+				if (source == null) {
+					m_windowEditor.removeEnclosingStatement(invocation);
+				} else {
+					Expression expression = DomGenerics.arguments(invocation).get(0);
+					m_windowEditor.replaceExpression(expression, source);
+				}
+			} else if (source != null) {
+				MethodDeclaration method = ensureTargetMethod();
+				VariableDeclaration configurerDeclaration = getConfigurerDeclaration(method);
+				if (configurerDeclaration != null) {
+					String statementSource =
+							MessageFormat.format(
+									"{0}.{1}({2});",
+									configurerDeclaration.getName().getIdentifier(),
+									m_methodName,
+									source);
+					m_windowEditor.addStatement(statementSource, new StatementTarget(method, false));
+				}
+			}
+			// success
+			m_windowEditor.commitChanges();
+			return true;
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Utils
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    private MethodInvocation getInvocation() {
-      MethodDeclaration method = getTargetMethod();
-      if (method != null) {
-        ListGatherer<MethodInvocation> gatherer = new ListGatherer<MethodInvocation>() {
-          @Override
-          public boolean visit(MethodInvocation invocation) {
-            if (invocation.getName().getIdentifier().equals(m_methodName)) {
-              addResult(invocation);
-            }
-            return false;
-          }
-        };
-        method.accept(gatherer);
-        return gatherer.getUniqueResult();
-      }
-      return null;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Utils
+		//
+		////////////////////////////////////////////////////////////////////////////
+		private MethodInvocation getInvocation() {
+			MethodDeclaration method = getTargetMethod();
+			if (method != null) {
+				ListGatherer<MethodInvocation> gatherer = new ListGatherer<MethodInvocation>() {
+					@Override
+					public boolean visit(MethodInvocation invocation) {
+						if (invocation.getName().getIdentifier().equals(m_methodName)) {
+							addResult(invocation);
+						}
+						return false;
+					}
+				};
+				method.accept(gatherer);
+				return gatherer.getUniqueResult();
+			}
+			return null;
+		}
 
-    /**
-     * @return the {@link VariableDeclaration} for variable with type
-     *         {@link IWorkbenchWindowConfigurer}.
-     */
-    private VariableDeclaration getConfigurerDeclaration(MethodDeclaration method) {
-      ListGatherer<VariableDeclaration> gatherer = new ListGatherer<VariableDeclaration>() {
-        @Override
-        public void endVisit(VariableDeclarationStatement node) {
-          ITypeBinding typeBinding = AstNodeUtils.getTypeBinding(node.getType());
-          if (AstNodeUtils.isSuccessorOf(
-              typeBinding,
-              "org.eclipse.ui.application.IWorkbenchWindowConfigurer")) {
-            VariableDeclarationFragment declaration = DomGenerics.fragments(node).get(0);
-            addResult(declaration);
-          }
-        }
-      };
-      method.accept(gatherer);
-      return gatherer.getUniqueResult();
-    }
+		/**
+		 * @return the {@link VariableDeclaration} for variable with type
+		 *         {@link IWorkbenchWindowConfigurer}.
+		 */
+		private VariableDeclaration getConfigurerDeclaration(MethodDeclaration method) {
+			ListGatherer<VariableDeclaration> gatherer = new ListGatherer<VariableDeclaration>() {
+				@Override
+				public void endVisit(VariableDeclarationStatement node) {
+					ITypeBinding typeBinding = AstNodeUtils.getTypeBinding(node.getType());
+					if (AstNodeUtils.isSuccessorOf(
+							typeBinding,
+							"org.eclipse.ui.application.IWorkbenchWindowConfigurer")) {
+						VariableDeclarationFragment declaration = DomGenerics.fragments(node).get(0);
+						addResult(declaration);
+					}
+				}
+			};
+			method.accept(gatherer);
+			return gatherer.getUniqueResult();
+		}
 
-    private MethodDeclaration ensureTargetMethod() throws Exception {
-      MethodDeclaration method = getTargetMethod();
-      if (method == null) {
-        method =
-            m_windowEditor.addMethodDeclaration(
-                "public void preWindowOpen()",
-                Lists.newArrayList("org.eclipse.ui.application.IWorkbenchWindowConfigurer configurer = getWindowConfigurer();"),
-                new BodyDeclarationTarget(m_windowType, false));
-      }
-      return method;
-    }
+		private MethodDeclaration ensureTargetMethod() throws Exception {
+			MethodDeclaration method = getTargetMethod();
+			if (method == null) {
+				method =
+						m_windowEditor.addMethodDeclaration(
+								"public void preWindowOpen()",
+								Lists.newArrayList("org.eclipse.ui.application.IWorkbenchWindowConfigurer configurer = getWindowConfigurer();"),
+								new BodyDeclarationTarget(m_windowType, false));
+			}
+			return method;
+		}
 
-    private MethodDeclaration getTargetMethod() {
-      return AstNodeUtils.getMethodBySignature(m_windowType, "preWindowOpen()");
-    }
-  }
+		private MethodDeclaration getTargetMethod() {
+			return AstNodeUtils.getMethodBySignature(m_windowType, "preWindowOpen()");
+		}
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/perspective/AbstractPartInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/perspective/AbstractPartInfo.java
index a701c5037..935f91949 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/perspective/AbstractPartInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/perspective/AbstractPartInfo.java
@@ -37,293 +37,293 @@
  * @coverage rcp.model.rcp
  */
 public abstract class AbstractPartInfo extends AbstractComponentInfo
-    implements
-      IRenderableInfo,
-      IPageLayoutTopLevelInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractPartInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link PageLayoutInfo}, i.e. just casted parent.
-   */
-  public final PageLayoutInfo getPage() {
-    return (PageLayoutInfo) getParent();
-  }
-
-  /**
-   * Registers {@link Control}s for each top level part. These {@link Control}s are used for layout
-   * and as references later.
-   */
-  protected void registerLayoutControls(Map<String, Control> idToControl) {
-    idToControl.put(getId(), (Control) getComponentObject());
-  }
-
-  /**
-   * Method {@link IPageLayout#addStandaloneView(String, boolean, int, float, String)} is exception,
-   * because for it relationship/ratio/refId arguments are shifted by 1.
-   *
-   * @return the offset index, 1 for <code>addStandaloneView</code>, 0 in other case.
-   */
-  protected int getIndexOffest() {
-    return 0;
-  }
-
-  @Override
-  public final String getId() {
-    return (String) getInvocationArgument(0);
-  }
-
-  @Override
-  public final String getIdSource() {
-    Expression expression = DomGenerics.arguments(getInvocation()).get(0);
-    return getEditor().getSource(expression);
-  }
-
-  /**
-   * @return the position relative to the reference part; one of {@link IPageLayout#TOP},
-   *         {@link IPageLayout#BOTTOM}, {@link IPageLayout#LEFT} or {@link IPageLayout#RIGHT}.
-   */
-  public final int getRelationship() {
-    return (Integer) getInvocationArgument(1 + getIndexOffest());
-  }
-
-  /**
-   * Sets the "relationship" argument source.
-   */
-  final void setRelationshipSource(String source) throws Exception {
-    setInvocationArgumentSource(1 + getIndexOffest(), source);
-  }
-
-  /**
-   * @return the ratio specifying how to divide the space currently occupied by the reference part,
-   *         in the range <code>0.05f</code> to <code>0.95f</code>.
-   */
-  public final float getRatio() {
-    return (Float) getInvocationArgument(2 + getIndexOffest());
-  }
-
-  /**
-   * Sets the "ratio" argument source.
-   */
-  final void setRatioSource(String source) throws Exception {
-    setInvocationArgumentSource(2 + getIndexOffest(), source);
-  }
-
-  /**
-   * @return the <code>ID</code> of other {@link AbstractTopPart_Info}, relative to which this
-   *         {@link AbstractTopPart_Info} should be placed.
-   */
-  public final String getRefId() {
-    return (String) getInvocationArgument(3 + getIndexOffest());
-  }
-
-  public final String getRefIdSource() {
-    Expression expression = DomGenerics.arguments(getInvocation()).get(3 + getIndexOffest());
-    return getEditor().getSource(expression);
-  }
-
-  /**
-   * Sets the "refId" argument source.
-   */
-  final void setRefIdSource(String source) throws Exception {
-    setInvocationArgumentSource(3 + getIndexOffest(), source);
-  }
-
-  /**
-   * @return the signature of underlying {@link MethodInvocation}.
-   */
-  protected final String getInvocationSignature() {
-    MethodInvocation invocation = getInvocation();
-    return AstNodeUtils.getMethodSignature(invocation);
-  }
-
-  /**
-   * @return the underlying {@link MethodInvocation}.
-   */
-  protected final MethodInvocation getInvocation() {
-    return (MethodInvocation) getCreationSupport().getNode();
-  }
-
-  /**
-   * @return the source of argument of underlying {@link MethodInvocation}.
-   */
-  protected final String getInvocationArgumentSource(int index) {
-    MethodInvocation invocation = getInvocation();
-    Expression argument = DomGenerics.arguments(invocation).get(index);
-    return getEditor().getSource(argument);
-  }
-
-  /**
-   * Sets the source of argument of underlying {@link MethodInvocation}.
-   */
-  private void setInvocationArgumentSource(int index, String source) throws Exception {
-    MethodInvocation invocation = getInvocation();
-    Expression argument = DomGenerics.arguments(invocation).get(index);
-    getEditor().replaceExpression(argument, source);
-  }
-
-  /**
-   * @return the value of argument of underlying {@link MethodInvocation}.
-   */
-  private Object getInvocationArgument(int index) {
-    MethodInvocation invocation = getInvocation();
-    Expression argument = DomGenerics.arguments(invocation).get(index);
-    return JavaInfoEvaluationHelper.getValue(argument);
-  }
-
-  /**
-   * Morph {@link MethodInvocation} to have different name and arguments.<br>
-   * Note however, that order of arguments is always same: id, relationship, ratio, refId.
-   */
-  protected final void morphInvocation(final String pattern) throws Exception {
-    AstEditor editor = getEditor();
-    MethodInvocation invocation = getInvocation();
-    int indexOffset = getIndexOffest();
-    // prepare arguments
-    String source_id = getInvocationArgumentSource(0);
-    String source_rel = getInvocationArgumentSource(1 + indexOffset);
-    String source_ratio = getInvocationArgumentSource(2 + indexOffset);
-    String source_refId = getInvocationArgumentSource(3 + indexOffset);
-    // replace MethodInvocation
-    MethodInvocation newInvocation =
-        (MethodInvocation) editor.replaceExpression(invocation, String.format(
-            editor.getSource(invocation.getExpression()) + "." + pattern,
-            source_id,
-            source_rel,
-            source_ratio,
-            source_refId));
-    // update CreationSupport
-    ((PageLayoutAddCreationSupport) getCreationSupport()).setInvocation(newInvocation);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Resize
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private SashLineInfo m_line;
-
-  /**
-   * Sets the {@link SashLineInfo} for this {@link AbstractPartInfo}, to access later from
-   * {@link #getSashLine()}.
-   */
-  final void setLine(SashLineInfo line) {
-    m_line = line;
-  }
-
-  /**
-   * @return the {@link SashLineInfo} to access bounds information for this {@link AbstractPartInfo}
-   *         and referenced {@link IPageLayoutTopLevelInfo}.
-   */
-  public final SashLineInfo getSashLine() {
-    return m_line;
-  }
-
-  /**
-   * Updates "ratio" using old and new size.
-   */
-  public final void resize(int delta) throws Exception {
-    int fullSize;
-    int oldSize;
-    if (m_line.isHorizontal()) {
-      fullSize = m_line.getRefBounds().width;
-      oldSize = m_line.getPartBounds().width;
-    } else {
-      fullSize = m_line.getRefBounds().height;
-      oldSize = m_line.getPartBounds().height;
-    }
-    // prepare new "ratio"
-    float newRatio;
-    {
-      float newSize = oldSize + delta;
-      newRatio = normalizeRatio(newSize / fullSize);
-      newRatio = (int) (100 * newRatio) / 100f;
-      newRatio = Math.max(newRatio, IPageLayout.RATIO_MIN);
-      newRatio = Math.min(newRatio, IPageLayout.RATIO_MAX);
-    }
-    // set new "ratio"
-    {
-      String code = FloatConverter.INSTANCE.toJavaSource(this, newRatio);
-      setRatioSource(code);
-    }
-  }
-
-  /**
-   * @return <code>true</code> if this {@link AbstractPartInfo} is "passive", i.e. its "ratio" means
-   *         that this amount of side is left to referenced part.
-   */
-  private boolean isPassive() {
-    int relationship = getRelationship();
-    return relationship == IPageLayout.RIGHT || relationship == IPageLayout.BOTTOM;
-  }
-
-  /**
-   * @return the "normalized" ratio, i.e. coefficient that show fraction of size consumed by this
-   *         part, may be <code>ratio</code, may be <code>1 - ratio</code>.
-   */
-  private float normalizeRatio(float ratio) {
-    if (isPassive()) {
-      return 1 - ratio;
-    }
-    return ratio;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final IObjectPresentation m_presentation = new DefaultJavaInfoPresentation(this) {
-    @Override
-    public Image getIcon() throws Exception {
-      return getPresentationIcon();
-    }
-
-    @Override
-    public String getText() throws Exception {
-      return getPresentationText();
-    }
-  };
-
-  @Override
-  public IObjectPresentation getPresentation() {
-    return m_presentation;
-  }
-
-  /**
-   * @return the icon to show in component tree.
-   */
-  protected abstract Image getPresentationIcon() throws Exception;
-
-  /**
-   * @return the text to show in component tree.
-   */
-  protected abstract String getPresentationText() throws Exception;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void refresh_fetch() throws Exception {
-    {
-      Control control = (Control) getComponentObject();
-      setModelBounds(ControlSupport.getBounds(control));
-    }
-    super.refresh_fetch();
-  }
+implements
+IRenderableInfo,
+IPageLayoutTopLevelInfo {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractPartInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link PageLayoutInfo}, i.e. just casted parent.
+	 */
+	public final PageLayoutInfo getPage() {
+		return (PageLayoutInfo) getParent();
+	}
+
+	/**
+	 * Registers {@link Control}s for each top level part. These {@link Control}s are used for layout
+	 * and as references later.
+	 */
+	protected void registerLayoutControls(Map<String, Control> idToControl) {
+		idToControl.put(getId(), (Control) getComponentObject());
+	}
+
+	/**
+	 * Method {@link IPageLayout#addStandaloneView(String, boolean, int, float, String)} is exception,
+	 * because for it relationship/ratio/refId arguments are shifted by 1.
+	 *
+	 * @return the offset index, 1 for <code>addStandaloneView</code>, 0 in other case.
+	 */
+	protected int getIndexOffest() {
+		return 0;
+	}
+
+	@Override
+	public final String getId() {
+		return (String) getInvocationArgument(0);
+	}
+
+	@Override
+	public final String getIdSource() {
+		Expression expression = DomGenerics.arguments(getInvocation()).get(0);
+		return getEditor().getSource(expression);
+	}
+
+	/**
+	 * @return the position relative to the reference part; one of {@link IPageLayout#TOP},
+	 *         {@link IPageLayout#BOTTOM}, {@link IPageLayout#LEFT} or {@link IPageLayout#RIGHT}.
+	 */
+	public final int getRelationship() {
+		return (Integer) getInvocationArgument(1 + getIndexOffest());
+	}
+
+	/**
+	 * Sets the "relationship" argument source.
+	 */
+	final void setRelationshipSource(String source) throws Exception {
+		setInvocationArgumentSource(1 + getIndexOffest(), source);
+	}
+
+	/**
+	 * @return the ratio specifying how to divide the space currently occupied by the reference part,
+	 *         in the range <code>0.05f</code> to <code>0.95f</code>.
+	 */
+	public final float getRatio() {
+		return (Float) getInvocationArgument(2 + getIndexOffest());
+	}
+
+	/**
+	 * Sets the "ratio" argument source.
+	 */
+	final void setRatioSource(String source) throws Exception {
+		setInvocationArgumentSource(2 + getIndexOffest(), source);
+	}
+
+	/**
+	 * @return the <code>ID</code> of other {@link AbstractTopPart_Info}, relative to which this
+	 *         {@link AbstractTopPart_Info} should be placed.
+	 */
+	public final String getRefId() {
+		return (String) getInvocationArgument(3 + getIndexOffest());
+	}
+
+	public final String getRefIdSource() {
+		Expression expression = DomGenerics.arguments(getInvocation()).get(3 + getIndexOffest());
+		return getEditor().getSource(expression);
+	}
+
+	/**
+	 * Sets the "refId" argument source.
+	 */
+	final void setRefIdSource(String source) throws Exception {
+		setInvocationArgumentSource(3 + getIndexOffest(), source);
+	}
+
+	/**
+	 * @return the signature of underlying {@link MethodInvocation}.
+	 */
+	protected final String getInvocationSignature() {
+		MethodInvocation invocation = getInvocation();
+		return AstNodeUtils.getMethodSignature(invocation);
+	}
+
+	/**
+	 * @return the underlying {@link MethodInvocation}.
+	 */
+	protected final MethodInvocation getInvocation() {
+		return (MethodInvocation) getCreationSupport().getNode();
+	}
+
+	/**
+	 * @return the source of argument of underlying {@link MethodInvocation}.
+	 */
+	protected final String getInvocationArgumentSource(int index) {
+		MethodInvocation invocation = getInvocation();
+		Expression argument = DomGenerics.arguments(invocation).get(index);
+		return getEditor().getSource(argument);
+	}
+
+	/**
+	 * Sets the source of argument of underlying {@link MethodInvocation}.
+	 */
+	private void setInvocationArgumentSource(int index, String source) throws Exception {
+		MethodInvocation invocation = getInvocation();
+		Expression argument = DomGenerics.arguments(invocation).get(index);
+		getEditor().replaceExpression(argument, source);
+	}
+
+	/**
+	 * @return the value of argument of underlying {@link MethodInvocation}.
+	 */
+	private Object getInvocationArgument(int index) {
+		MethodInvocation invocation = getInvocation();
+		Expression argument = DomGenerics.arguments(invocation).get(index);
+		return JavaInfoEvaluationHelper.getValue(argument);
+	}
+
+	/**
+	 * Morph {@link MethodInvocation} to have different name and arguments.<br>
+	 * Note however, that order of arguments is always same: id, relationship, ratio, refId.
+	 */
+	protected final void morphInvocation(final String pattern) throws Exception {
+		AstEditor editor = getEditor();
+		MethodInvocation invocation = getInvocation();
+		int indexOffset = getIndexOffest();
+		// prepare arguments
+		String source_id = getInvocationArgumentSource(0);
+		String source_rel = getInvocationArgumentSource(1 + indexOffset);
+		String source_ratio = getInvocationArgumentSource(2 + indexOffset);
+		String source_refId = getInvocationArgumentSource(3 + indexOffset);
+		// replace MethodInvocation
+		MethodInvocation newInvocation =
+				(MethodInvocation) editor.replaceExpression(invocation, String.format(
+						editor.getSource(invocation.getExpression()) + "." + pattern,
+						source_id,
+						source_rel,
+						source_ratio,
+						source_refId));
+		// update CreationSupport
+		((PageLayoutAddCreationSupport) getCreationSupport()).setInvocation(newInvocation);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Resize
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private SashLineInfo m_line;
+
+	/**
+	 * Sets the {@link SashLineInfo} for this {@link AbstractPartInfo}, to access later from
+	 * {@link #getSashLine()}.
+	 */
+	final void setLine(SashLineInfo line) {
+		m_line = line;
+	}
+
+	/**
+	 * @return the {@link SashLineInfo} to access bounds information for this {@link AbstractPartInfo}
+	 *         and referenced {@link IPageLayoutTopLevelInfo}.
+	 */
+	public final SashLineInfo getSashLine() {
+		return m_line;
+	}
+
+	/**
+	 * Updates "ratio" using old and new size.
+	 */
+	public final void resize(int delta) throws Exception {
+		int fullSize;
+		int oldSize;
+		if (m_line.isHorizontal()) {
+			fullSize = m_line.getRefBounds().width;
+			oldSize = m_line.getPartBounds().width;
+		} else {
+			fullSize = m_line.getRefBounds().height;
+			oldSize = m_line.getPartBounds().height;
+		}
+		// prepare new "ratio"
+		float newRatio;
+		{
+			float newSize = oldSize + delta;
+			newRatio = normalizeRatio(newSize / fullSize);
+			newRatio = (int) (100 * newRatio) / 100f;
+			newRatio = Math.max(newRatio, IPageLayout.RATIO_MIN);
+			newRatio = Math.min(newRatio, IPageLayout.RATIO_MAX);
+		}
+		// set new "ratio"
+		{
+			String code = FloatConverter.INSTANCE.toJavaSource(this, newRatio);
+			setRatioSource(code);
+		}
+	}
+
+	/**
+	 * @return <code>true</code> if this {@link AbstractPartInfo} is "passive", i.e. its "ratio" means
+	 *         that this amount of side is left to referenced part.
+	 */
+	private boolean isPassive() {
+		int relationship = getRelationship();
+		return relationship == IPageLayout.RIGHT || relationship == IPageLayout.BOTTOM;
+	}
+
+	/**
+	 * @return the "normalized" ratio, i.e. coefficient that show fraction of size consumed by this
+	 *         part, may be <code>ratio</code, may be <code>1 - ratio</code>.
+	 */
+	private float normalizeRatio(float ratio) {
+		if (isPassive()) {
+			return 1 - ratio;
+		}
+		return ratio;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final IObjectPresentation m_presentation = new DefaultJavaInfoPresentation(this) {
+		@Override
+		public Image getIcon() throws Exception {
+			return getPresentationIcon();
+		}
+
+		@Override
+		public String getText() throws Exception {
+			return getPresentationText();
+		}
+	};
+
+	@Override
+	public IObjectPresentation getPresentation() {
+		return m_presentation;
+	}
+
+	/**
+	 * @return the icon to show in component tree.
+	 */
+	protected abstract Image getPresentationIcon() throws Exception;
+
+	/**
+	 * @return the text to show in component tree.
+	 */
+	protected abstract String getPresentationText() throws Exception;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void refresh_fetch() throws Exception {
+		{
+			Control control = (Control) getComponentObject();
+			setModelBounds(ControlSupport.getBounds(control));
+		}
+		super.refresh_fetch();
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/perspective/EditorAreaInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/perspective/EditorAreaInfo.java
index 64ca60f4f..c054d7ab6 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/perspective/EditorAreaInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/perspective/EditorAreaInfo.java
@@ -30,115 +30,115 @@
  * @coverage rcp.model.rcp
  */
 public final class EditorAreaInfo extends ObjectInfo implements IPageLayoutTopLevelInfo {
-  private final PageLayoutInfo m_page;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public EditorAreaInfo(PageLayoutInfo page) throws Exception {
-    m_page = page;
-    m_page.addChild(this);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    return "(editor area)";
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public IObjectPresentation getPresentation() {
-    return new DefaultObjectPresentation(this) {
-      @Override
-      public Image getIcon() throws Exception {
-        return Activator.getImage("info/perspective/editor.gif");
-      }
-
-      @Override
-      public String getText() throws Exception {
-        return "(editor area)";
-      }
-    };
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Rendering
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private CTabFolder m_folder;
-
-  /**
-   * Renders {@link EditorAreaInfo} by creating its {@link Control}.
-   */
-  void render(Composite parent) throws Exception {
-    m_folder = PageLayoutInfo.createPartFolder(parent);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Rectangle m_bounds;
-
-  /**
-   * @return the {@link PageLayoutInfo}, i.e. just casted parent.
-   */
-  public PageLayoutInfo getPage() {
-    return m_page;
-  }
-
-  @Override
-  public String getId() {
-    return IPageLayout.ID_EDITOR_AREA;
-  }
-
-  @Override
-  public String getIdSource() {
-    return "org.eclipse.ui.IPageLayout.ID_EDITOR_AREA";
-  }
-
-  /**
-   * @return the {@link Control} that represents this {@link EditorAreaInfo}.
-   */
-  public Control getControl() {
-    return m_folder;
-  }
-
-  /**
-   * @return the bounds of {@link EditorAreaInfo} relative to {@link PageLayoutInfo}.
-   */
-  public Rectangle getBounds() {
-    return m_bounds;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void refresh_dispose() throws Exception {
-    m_folder = null;
-    m_bounds = null;
-    super.refresh_dispose();
-  }
-
-  @Override
-  protected void refresh_fetch() throws Exception {
-    m_bounds = CoordinateUtils.getBounds(m_page.getComposite(), m_folder);
-    super.refresh_fetch();
-  }
+	private final PageLayoutInfo m_page;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public EditorAreaInfo(PageLayoutInfo page) throws Exception {
+		m_page = page;
+		m_page.addChild(this);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		return "(editor area)";
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public IObjectPresentation getPresentation() {
+		return new DefaultObjectPresentation(this) {
+			@Override
+			public Image getIcon() throws Exception {
+				return Activator.getImage("info/perspective/editor.gif");
+			}
+
+			@Override
+			public String getText() throws Exception {
+				return "(editor area)";
+			}
+		};
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Rendering
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private CTabFolder m_folder;
+
+	/**
+	 * Renders {@link EditorAreaInfo} by creating its {@link Control}.
+	 */
+	void render(Composite parent) throws Exception {
+		m_folder = PageLayoutInfo.createPartFolder(parent);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Rectangle m_bounds;
+
+	/**
+	 * @return the {@link PageLayoutInfo}, i.e. just casted parent.
+	 */
+	public PageLayoutInfo getPage() {
+		return m_page;
+	}
+
+	@Override
+	public String getId() {
+		return IPageLayout.ID_EDITOR_AREA;
+	}
+
+	@Override
+	public String getIdSource() {
+		return "org.eclipse.ui.IPageLayout.ID_EDITOR_AREA";
+	}
+
+	/**
+	 * @return the {@link Control} that represents this {@link EditorAreaInfo}.
+	 */
+	public Control getControl() {
+		return m_folder;
+	}
+
+	/**
+	 * @return the bounds of {@link EditorAreaInfo} relative to {@link PageLayoutInfo}.
+	 */
+	public Rectangle getBounds() {
+		return m_bounds;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void refresh_dispose() throws Exception {
+		m_folder = null;
+		m_bounds = null;
+		super.refresh_dispose();
+	}
+
+	@Override
+	protected void refresh_fetch() throws Exception {
+		m_bounds = CoordinateUtils.getBounds(m_page.getComposite(), m_folder);
+		super.refresh_fetch();
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/perspective/FolderViewInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/perspective/FolderViewInfo.java
index 955133a67..978c1e574 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/perspective/FolderViewInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/perspective/FolderViewInfo.java
@@ -40,136 +40,136 @@
  * @coverage rcp.model.rcp
  */
 public final class FolderViewInfo extends AbstractComponentInfo implements IRenderableInfo {
-  private final PageLayoutCreateFolderInfo m_container;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FolderViewInfo(PageLayoutCreateFolderInfo container, MethodInvocation invocation)
-      throws Exception {
-    super(container.getEditor(),
-        new ComponentDescription(null),
-        new PageLayoutAddCreationSupport(container, invocation));
-    m_container = container;
-    ObjectInfoUtils.setNewId(this);
-    getDescription().setToolkit(container.getDescription().getToolkit());
-    setAssociation(new InvocationVoidAssociation());
-    setVariableSupport(new VoidInvocationVariableSupport(this));
-    container.addChild(this);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the <code>ID</code> of this view.
-   */
-  public final String getId() {
-    return (String) getInvocationArgument(0);
-  }
-
-  /**
-   * @return the underlying {@link MethodInvocation}.
-   */
-  MethodInvocation getInvocation() {
-    return (MethodInvocation) getCreationSupport().getNode();
-  }
-
-  /**
-   * @return the value of argument of underlying {@link MethodInvocation}.
-   */
-  private Object getInvocationArgument(int index) {
-    MethodInvocation invocation = getInvocation();
-    Expression argument = DomGenerics.arguments(invocation).get(index);
-    return JavaInfoEvaluationHelper.getValue(argument);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final IObjectPresentation m_presentation = new DefaultJavaInfoPresentation(this) {
-    @Override
-    public Image getIcon() throws Exception {
-      return getPresentationIcon();
-    }
-
-    @Override
-    public String getText() throws Exception {
-      return getPresentationText();
-    }
-  };
-
-  @Override
-  public IObjectPresentation getPresentation() {
-    return m_presentation;
-  }
-
-  /**
-   * @return the icon to show in component tree.
-   */
-  private Image getPresentationIcon() throws Exception {
-    return getViewInfo().getIcon();
-  }
-
-  /**
-   * @return the text to show in component tree.
-   */
-  private String getPresentationText() throws Exception {
-    return "\"" + getViewInfo().getName() + "\" - " + getId();
-  }
-
-  /**
-   * @return the {@link ViewInfo} for this view.
-   */
-  private ViewInfo getViewInfo() {
-    return PdeUtils.getViewInfoDefault(getId());
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Rendering
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private CLabel m_viewLabel;
-
-  @Override
-  public Object render() throws Exception {
-    CTabFolder folder = m_container.getFolder();
-    Composite viewsComposite = m_container.getViewsComposite();
-    // prepare presentation
-    Image icon = getViewInfo().getIcon();
-    String name = getViewInfo().getName();
-    // create item for view
-    {
-      CTabItem item = new CTabItem(folder, SWT.CLOSE);
-      item.setImage(icon);
-      item.setText(name);
-      folder.setSelection(item);
-    }
-    // create control to show in client area of folder
-    {
-      m_viewLabel = new CLabel(viewsComposite, SWT.NONE);
-      m_viewLabel.setImage(icon);
-      m_viewLabel.setText(name);
-    }
-    // use CLabel as object
-    return m_viewLabel;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void refresh_fetch() throws Exception {
-    setModelBounds(CoordinateUtils.getBounds(m_container.getFolder(), m_viewLabel));
-    super.refresh_fetch();
-  }
+	private final PageLayoutCreateFolderInfo m_container;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FolderViewInfo(PageLayoutCreateFolderInfo container, MethodInvocation invocation)
+			throws Exception {
+		super(container.getEditor(),
+				new ComponentDescription(null),
+				new PageLayoutAddCreationSupport(container, invocation));
+		m_container = container;
+		ObjectInfoUtils.setNewId(this);
+		getDescription().setToolkit(container.getDescription().getToolkit());
+		setAssociation(new InvocationVoidAssociation());
+		setVariableSupport(new VoidInvocationVariableSupport(this));
+		container.addChild(this);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the <code>ID</code> of this view.
+	 */
+	public final String getId() {
+		return (String) getInvocationArgument(0);
+	}
+
+	/**
+	 * @return the underlying {@link MethodInvocation}.
+	 */
+	MethodInvocation getInvocation() {
+		return (MethodInvocation) getCreationSupport().getNode();
+	}
+
+	/**
+	 * @return the value of argument of underlying {@link MethodInvocation}.
+	 */
+	private Object getInvocationArgument(int index) {
+		MethodInvocation invocation = getInvocation();
+		Expression argument = DomGenerics.arguments(invocation).get(index);
+		return JavaInfoEvaluationHelper.getValue(argument);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final IObjectPresentation m_presentation = new DefaultJavaInfoPresentation(this) {
+		@Override
+		public Image getIcon() throws Exception {
+			return getPresentationIcon();
+		}
+
+		@Override
+		public String getText() throws Exception {
+			return getPresentationText();
+		}
+	};
+
+	@Override
+	public IObjectPresentation getPresentation() {
+		return m_presentation;
+	}
+
+	/**
+	 * @return the icon to show in component tree.
+	 */
+	private Image getPresentationIcon() throws Exception {
+		return getViewInfo().getIcon();
+	}
+
+	/**
+	 * @return the text to show in component tree.
+	 */
+	private String getPresentationText() throws Exception {
+		return "\"" + getViewInfo().getName() + "\" - " + getId();
+	}
+
+	/**
+	 * @return the {@link ViewInfo} for this view.
+	 */
+	private ViewInfo getViewInfo() {
+		return PdeUtils.getViewInfoDefault(getId());
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Rendering
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private CLabel m_viewLabel;
+
+	@Override
+	public Object render() throws Exception {
+		CTabFolder folder = m_container.getFolder();
+		Composite viewsComposite = m_container.getViewsComposite();
+		// prepare presentation
+		Image icon = getViewInfo().getIcon();
+		String name = getViewInfo().getName();
+		// create item for view
+		{
+			CTabItem item = new CTabItem(folder, SWT.CLOSE);
+			item.setImage(icon);
+			item.setText(name);
+			folder.setSelection(item);
+		}
+		// create control to show in client area of folder
+		{
+			m_viewLabel = new CLabel(viewsComposite, SWT.NONE);
+			m_viewLabel.setImage(icon);
+			m_viewLabel.setText(name);
+		}
+		// use CLabel as object
+		return m_viewLabel;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void refresh_fetch() throws Exception {
+		setModelBounds(CoordinateUtils.getBounds(m_container.getFolder(), m_viewLabel));
+		super.refresh_fetch();
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/perspective/IPageLayoutTopLevelInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/perspective/IPageLayoutTopLevelInfo.java
index af2270ed4..4ffef1788 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/perspective/IPageLayoutTopLevelInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/perspective/IPageLayoutTopLevelInfo.java
@@ -19,14 +19,14 @@
  * @coverage rcp.model.rcp
  */
 public interface IPageLayoutTopLevelInfo {
-  /**
-   * @return the ID of this {@link IPageLayoutTopLevelInfo}.
-   */
-  String getId();
+	/**
+	 * @return the ID of this {@link IPageLayoutTopLevelInfo}.
+	 */
+	String getId();
 
-  /**
-   * @return the source for ID of this {@link IPageLayoutTopLevelInfo}, it should be evaluated into
-   *         same value as {@link #getId()}.
-   */
-  String getIdSource();
+	/**
+	 * @return the source for ID of this {@link IPageLayoutTopLevelInfo}, it should be evaluated into
+	 *         same value as {@link #getId()}.
+	 */
+	String getIdSource();
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/perspective/IRenderableInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/perspective/IRenderableInfo.java
index 7572fe940..b30fb7de7 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/perspective/IRenderableInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/perspective/IRenderableInfo.java
@@ -17,10 +17,10 @@
  * @coverage rcp.model.rcp
  */
 public interface IRenderableInfo {
-  /**
-   * Renders this {@link IRenderableInfo} by creating some {@link Object}.
-   *
-   * @return the {@link Object} that represents this {@link IRenderableInfo}.
-   */
-  Object render() throws Exception;
+	/**
+	 * Renders this {@link IRenderableInfo} by creating some {@link Object}.
+	 *
+	 * @return the {@link Object} that represents this {@link IRenderableInfo}.
+	 */
+	Object render() throws Exception;
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/perspective/PageLayoutAddCreationSupport.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/perspective/PageLayoutAddCreationSupport.java
index d6b87032b..4e3beec6b 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/perspective/PageLayoutAddCreationSupport.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/perspective/PageLayoutAddCreationSupport.java
@@ -28,68 +28,68 @@
  * @coverage rcp.model.rcp
  */
 public final class PageLayoutAddCreationSupport extends VoidInvocationCreationSupport {
-  private String m_addSource;
+	private String m_addSource;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public PageLayoutAddCreationSupport(JavaInfo hostJavaInfo, MethodInvocation invocation) {
-    super(hostJavaInfo, getMethodDescription(hostJavaInfo, invocation), invocation);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public PageLayoutAddCreationSupport(JavaInfo hostJavaInfo, MethodInvocation invocation) {
+		super(hostJavaInfo, getMethodDescription(hostJavaInfo, invocation), invocation);
+	}
 
-  public PageLayoutAddCreationSupport(JavaInfo hostJavaInfo,
-      MethodDescription description,
-      String addSource) {
-    super(hostJavaInfo, description);
-    m_addSource = addSource;
-  }
+	public PageLayoutAddCreationSupport(JavaInfo hostJavaInfo,
+			MethodDescription description,
+			String addSource) {
+		super(hostJavaInfo, description);
+		m_addSource = addSource;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static MethodDescription getMethodDescription(JavaInfo hostJavaInfo,
-      MethodInvocation invocation) {
-    String signature = AstNodeUtils.getMethodSignature(invocation);
-    return hostJavaInfo.getDescription().getMethod(signature);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static MethodDescription getMethodDescription(JavaInfo hostJavaInfo,
+			MethodInvocation invocation) {
+		String signature = AstNodeUtils.getMethodSignature(invocation);
+		return hostJavaInfo.getDescription().getMethod(signature);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Object getObject(Object hostObject) throws Exception {
-    return ((IRenderableInfo) m_javaInfo).render();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Object getObject(Object hostObject) throws Exception {
+		return ((IRenderableInfo) m_javaInfo).render();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Validation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean canReorder() {
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Validation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean canReorder() {
+		return true;
+	}
 
-  @Override
-  public boolean canReparent() {
-    return true;
-  }
+	@Override
+	public boolean canReparent() {
+		return true;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Adding
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String add_getMethodSource() throws Exception {
-    Assert.isNotNull(m_addSource);
-    return m_addSource;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Adding
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String add_getMethodSource() throws Exception {
+		Assert.isNotNull(m_addSource);
+		return m_addSource;
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/perspective/PageLayoutAddViewInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/perspective/PageLayoutAddViewInfo.java
index f25fb073a..a6b719588 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/perspective/PageLayoutAddViewInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/perspective/PageLayoutAddViewInfo.java
@@ -39,213 +39,213 @@
  * @coverage rcp.model.rcp
  */
 public final class PageLayoutAddViewInfo extends AbstractPartInfo {
-  private final PageLayoutInfo m_page;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public PageLayoutAddViewInfo(PageLayoutInfo page, MethodInvocation invocation) throws Exception {
-    super(page.getEditor(), new ComponentDescription(null), new PageLayoutAddCreationSupport(page,
-        invocation));
-    m_page = page;
-    ObjectInfoUtils.setNewId(this);
-    getDescription().setToolkit(page.getDescription().getToolkit());
-    setVariableSupport(new VoidInvocationVariableSupport(this));
-    setAssociation(new InvocationVoidAssociation());
-    page.addChild(this);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected int getIndexOffest() {
-    if (getInvocationSignature().equals(
-        "addStandaloneView(java.lang.String,boolean,int,float,java.lang.String)")) {
-      return 1;
-    }
-    return super.getIndexOffest();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Properties
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final Property m_standaloneProperty = new JavaProperty(this, "standalone",
-      BooleanPropertyEditor.INSTANCE) {
-    @Override
-    public boolean isModified() throws Exception {
-      return true;
-    }
-
-    @Override
-    public Object getValue() throws Exception {
-      return isStandalone();
-    }
-
-    @Override
-    public void setValue(final Object value) throws Exception {
-      ExecutionUtils.run(m_page, new RunnableEx() {
-        @Override
-        public void run() throws Exception {
-          setStandalone((Boolean) value);
-        }
-      });
-    }
-  };
-  private final Property m_placeholderProperty = new JavaProperty(this, "placeholder",
-      BooleanPropertyEditor.INSTANCE) {
-    @Override
-    public boolean isModified() throws Exception {
-      return true;
-    }
-
-    @Override
-    public Object getValue() throws Exception {
-      return isPlaceholder2();
-    }
-
-    @Override
-    public void setValue(final Object value) throws Exception {
-      ExecutionUtils.run(m_page, new RunnableEx() {
-        @Override
-        public void run() throws Exception {
-          setPlaceholder((Boolean) value);
-        }
-      });
-    }
-  };
-
-  @Override
-  protected List<Property> getPropertyList() throws Exception {
-    List<Property> properties = super.getPropertyList();
-    properties.add(m_standaloneProperty);
-    properties.add(m_placeholderProperty);
-    return properties;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // State
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if this view is stand-alone, i.e. created using
-   *         {@link IPageLayout#addStandaloneView(String, boolean, int, float, String)} or
-   *         {@link IPageLayout#addStandaloneViewPlaceholder(String, int, float, String, boolean)}.
-   */
-  public boolean isStandalone() {
-    String signature = getInvocationSignature();
-    return signature.equals("addStandaloneView(java.lang.String,boolean,int,float,java.lang.String)")
-        || signature.equals("addStandaloneViewPlaceholder(java.lang.String,int,float,java.lang.String,boolean)");
-  }
-
-  /**
-   * @return <code>true</code> if this view is place-holder, i.e. created using
-   *         {@link IPageLayout#addPlaceholder(String, int, float, String)} or
-   *         {@link IPageLayout#addStandaloneViewPlaceholder(String, int, float, String, boolean)}.
-   */
-  public boolean isPlaceholder2() {
-    String signature = getInvocationSignature();
-    return signature.equals("addPlaceholder(java.lang.String,int,float,java.lang.String)")
-        || signature.equals("addStandaloneViewPlaceholder(java.lang.String,int,float,java.lang.String,boolean)");
-  }
-
-  /**
-   * If given <code>makeStandalone</code> argument is <code>true</code>,converts creation to use
-   * {@link IPageLayout#addStandaloneView(String, boolean, int, float, String)} or
-   * {@link IPageLayout#addStandaloneViewPlaceholder(String, int, float, String, boolean)}.
-   */
-  public void setStandalone(boolean makeStandalone) throws Exception {
-    boolean wasStandalone = isStandalone();
-    boolean isPlaceholder = isPlaceholder2();
-    if (makeStandalone && !wasStandalone) {
-      if (isPlaceholder) {
-        // was "addPlaceholder", make "addStandaloneViewPlaceholder"
-        morphInvocation("addStandaloneViewPlaceholder(%s, %s, %s, %s, true)");
-      } else {
-        // was "addView", make "addStandaloneView"
-        morphInvocation("addStandaloneView(%s, true, %s, %s, %s)");
-      }
-    } else if (!makeStandalone && wasStandalone) {
-      if (isPlaceholder) {
-        // was "addStandaloneViewPlaceholder", make "addPlaceholder"
-        morphInvocation("addPlaceholder(%s, %s, %s, %s)");
-      } else {
-        // was "addStandaloneView", make "addView"
-        morphInvocation("addView(%s, %s, %s, %s)");
-      }
-    }
-  }
-
-  /**
-   * If given <code>makePlaceholder</code> argument is <code>true</code>,converts creation to use
-   * {@link IPageLayout#addPlaceholder(String, int, float, String)} or
-   * {@link IPageLayout#addStandaloneViewPlaceholder(String, int, float, String, boolean)}.
-   */
-  public void setPlaceholder(boolean makePlaceholder) throws Exception {
-    boolean isStandalone = isStandalone();
-    boolean wasPlaceholder = isPlaceholder2();
-    if (makePlaceholder && !wasPlaceholder) {
-      if (isStandalone) {
-        // was "addStandaloneView", make "addStandaloneViewPlaceholder"
-        morphInvocation("addStandaloneViewPlaceholder(%s, %s, %s, %s, true)");
-      } else {
-        // was "addView", make "addPlaceholder"
-        morphInvocation("addPlaceholder(%s, %s, %s, %s)");
-      }
-    } else if (!makePlaceholder && wasPlaceholder) {
-      if (isStandalone) {
-        // was "addStandaloneViewPlaceholder", make "addStandaloneView"
-        morphInvocation("addStandaloneView(%s, true, %s, %s, %s)");
-      } else {
-        // was "addPlaceholder", make "addView"
-        morphInvocation("addView(%s, %s, %s, %s)");
-      }
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Image getPresentationIcon() {
-    return getViewInfo().getIcon();
-  }
-
-  @Override
-  protected String getPresentationText() {
-    return "\"" + getViewInfo().getName() + "\" - " + getId();
-  }
-
-  /**
-   * @return the {@link ViewInfo} for this view.
-   */
-  private ViewInfo getViewInfo() {
-    return PdeUtils.getViewInfoDefault(getId());
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Rendering
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Control render() throws Exception {
-    CTabFolder folder = PageLayoutInfo.createPartFolder(m_page.getPartsComposite());
-    // create CTabItem
-    CTabItem item = new CTabItem(folder, SWT.CLOSE);
-    item.setImage(getPresentationIcon());
-    item.setText(getViewInfo().getName());
-    // return CTabFolder
-    folder.setSelection(item);
-    return folder;
-  }
+	private final PageLayoutInfo m_page;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public PageLayoutAddViewInfo(PageLayoutInfo page, MethodInvocation invocation) throws Exception {
+		super(page.getEditor(), new ComponentDescription(null), new PageLayoutAddCreationSupport(page,
+				invocation));
+		m_page = page;
+		ObjectInfoUtils.setNewId(this);
+		getDescription().setToolkit(page.getDescription().getToolkit());
+		setVariableSupport(new VoidInvocationVariableSupport(this));
+		setAssociation(new InvocationVoidAssociation());
+		page.addChild(this);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected int getIndexOffest() {
+		if (getInvocationSignature().equals(
+				"addStandaloneView(java.lang.String,boolean,int,float,java.lang.String)")) {
+			return 1;
+		}
+		return super.getIndexOffest();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Properties
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final Property m_standaloneProperty = new JavaProperty(this, "standalone",
+			BooleanPropertyEditor.INSTANCE) {
+		@Override
+		public boolean isModified() throws Exception {
+			return true;
+		}
+
+		@Override
+		public Object getValue() throws Exception {
+			return isStandalone();
+		}
+
+		@Override
+		public void setValue(final Object value) throws Exception {
+			ExecutionUtils.run(m_page, new RunnableEx() {
+				@Override
+				public void run() throws Exception {
+					setStandalone((Boolean) value);
+				}
+			});
+		}
+	};
+	private final Property m_placeholderProperty = new JavaProperty(this, "placeholder",
+			BooleanPropertyEditor.INSTANCE) {
+		@Override
+		public boolean isModified() throws Exception {
+			return true;
+		}
+
+		@Override
+		public Object getValue() throws Exception {
+			return isPlaceholder2();
+		}
+
+		@Override
+		public void setValue(final Object value) throws Exception {
+			ExecutionUtils.run(m_page, new RunnableEx() {
+				@Override
+				public void run() throws Exception {
+					setPlaceholder((Boolean) value);
+				}
+			});
+		}
+	};
+
+	@Override
+	protected List<Property> getPropertyList() throws Exception {
+		List<Property> properties = super.getPropertyList();
+		properties.add(m_standaloneProperty);
+		properties.add(m_placeholderProperty);
+		return properties;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// State
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if this view is stand-alone, i.e. created using
+	 *         {@link IPageLayout#addStandaloneView(String, boolean, int, float, String)} or
+	 *         {@link IPageLayout#addStandaloneViewPlaceholder(String, int, float, String, boolean)}.
+	 */
+	public boolean isStandalone() {
+		String signature = getInvocationSignature();
+		return signature.equals("addStandaloneView(java.lang.String,boolean,int,float,java.lang.String)")
+				|| signature.equals("addStandaloneViewPlaceholder(java.lang.String,int,float,java.lang.String,boolean)");
+	}
+
+	/**
+	 * @return <code>true</code> if this view is place-holder, i.e. created using
+	 *         {@link IPageLayout#addPlaceholder(String, int, float, String)} or
+	 *         {@link IPageLayout#addStandaloneViewPlaceholder(String, int, float, String, boolean)}.
+	 */
+	public boolean isPlaceholder2() {
+		String signature = getInvocationSignature();
+		return signature.equals("addPlaceholder(java.lang.String,int,float,java.lang.String)")
+				|| signature.equals("addStandaloneViewPlaceholder(java.lang.String,int,float,java.lang.String,boolean)");
+	}
+
+	/**
+	 * If given <code>makeStandalone</code> argument is <code>true</code>,converts creation to use
+	 * {@link IPageLayout#addStandaloneView(String, boolean, int, float, String)} or
+	 * {@link IPageLayout#addStandaloneViewPlaceholder(String, int, float, String, boolean)}.
+	 */
+	public void setStandalone(boolean makeStandalone) throws Exception {
+		boolean wasStandalone = isStandalone();
+		boolean isPlaceholder = isPlaceholder2();
+		if (makeStandalone && !wasStandalone) {
+			if (isPlaceholder) {
+				// was "addPlaceholder", make "addStandaloneViewPlaceholder"
+				morphInvocation("addStandaloneViewPlaceholder(%s, %s, %s, %s, true)");
+			} else {
+				// was "addView", make "addStandaloneView"
+				morphInvocation("addStandaloneView(%s, true, %s, %s, %s)");
+			}
+		} else if (!makeStandalone && wasStandalone) {
+			if (isPlaceholder) {
+				// was "addStandaloneViewPlaceholder", make "addPlaceholder"
+				morphInvocation("addPlaceholder(%s, %s, %s, %s)");
+			} else {
+				// was "addStandaloneView", make "addView"
+				morphInvocation("addView(%s, %s, %s, %s)");
+			}
+		}
+	}
+
+	/**
+	 * If given <code>makePlaceholder</code> argument is <code>true</code>,converts creation to use
+	 * {@link IPageLayout#addPlaceholder(String, int, float, String)} or
+	 * {@link IPageLayout#addStandaloneViewPlaceholder(String, int, float, String, boolean)}.
+	 */
+	public void setPlaceholder(boolean makePlaceholder) throws Exception {
+		boolean isStandalone = isStandalone();
+		boolean wasPlaceholder = isPlaceholder2();
+		if (makePlaceholder && !wasPlaceholder) {
+			if (isStandalone) {
+				// was "addStandaloneView", make "addStandaloneViewPlaceholder"
+				morphInvocation("addStandaloneViewPlaceholder(%s, %s, %s, %s, true)");
+			} else {
+				// was "addView", make "addPlaceholder"
+				morphInvocation("addPlaceholder(%s, %s, %s, %s)");
+			}
+		} else if (!makePlaceholder && wasPlaceholder) {
+			if (isStandalone) {
+				// was "addStandaloneViewPlaceholder", make "addStandaloneView"
+				morphInvocation("addStandaloneView(%s, true, %s, %s, %s)");
+			} else {
+				// was "addPlaceholder", make "addView"
+				morphInvocation("addView(%s, %s, %s, %s)");
+			}
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Image getPresentationIcon() {
+		return getViewInfo().getIcon();
+	}
+
+	@Override
+	protected String getPresentationText() {
+		return "\"" + getViewInfo().getName() + "\" - " + getId();
+	}
+
+	/**
+	 * @return the {@link ViewInfo} for this view.
+	 */
+	private ViewInfo getViewInfo() {
+		return PdeUtils.getViewInfoDefault(getId());
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Rendering
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Control render() throws Exception {
+		CTabFolder folder = PageLayoutInfo.createPartFolder(m_page.getPartsComposite());
+		// create CTabItem
+		CTabItem item = new CTabItem(folder, SWT.CLOSE);
+		item.setImage(getPresentationIcon());
+		item.setText(getViewInfo().getName());
+		// return CTabFolder
+		folder.setSelection(item);
+		return folder;
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/perspective/PageLayoutCreateFolderInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/perspective/PageLayoutCreateFolderInfo.java
index ebdb04688..0d27f8703 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/perspective/PageLayoutCreateFolderInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/perspective/PageLayoutCreateFolderInfo.java
@@ -58,313 +58,313 @@
  * @coverage rcp.model.rcp
  */
 public final class PageLayoutCreateFolderInfo extends AbstractPartInfo {
-  private final PageLayoutInfo m_page;
+	private final PageLayoutInfo m_page;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public PageLayoutCreateFolderInfo(PageLayoutInfo page, MethodInvocation invocation)
-      throws Exception {
-    super(page.getEditor(), getFolderDescription(page), new PageLayoutAddCreationSupport(page,
-        invocation));
-    m_page = page;
-    ObjectInfoUtils.setNewId(this);
-    setVariableSupport(new EmptyPureVariableSupport(this));
-    setAssociation(new InvocationVoidAssociation());
-    page.addChild(this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public PageLayoutCreateFolderInfo(PageLayoutInfo page, MethodInvocation invocation)
+			throws Exception {
+		super(page.getEditor(), getFolderDescription(page), new PageLayoutAddCreationSupport(page,
+				invocation));
+		m_page = page;
+		ObjectInfoUtils.setNewId(this);
+		setVariableSupport(new EmptyPureVariableSupport(this));
+		setAssociation(new InvocationVoidAssociation());
+		page.addChild(this);
+	}
 
-  public PageLayoutCreateFolderInfo(PageLayoutInfo page, CreationSupport creationSupport)
-      throws Exception {
-    super(page.getEditor(), getFolderDescription(page), creationSupport);
-    m_page = page;
-    ObjectInfoUtils.setNewId(this);
-  }
+	public PageLayoutCreateFolderInfo(PageLayoutInfo page, CreationSupport creationSupport)
+			throws Exception {
+		super(page.getEditor(), getFolderDescription(page), creationSupport);
+		m_page = page;
+		ObjectInfoUtils.setNewId(this);
+	}
 
-  /**
-   * @return the {@link ComponentDescription} for {@link IFolderLayout}.
-   */
-  private static ComponentDescription getFolderDescription(JavaInfo host) throws Exception {
-    AstEditor editor = host.getEditor();
-    ClassLoader editorLoader = JavaInfoUtils.getClassLoader(host);
-    Class<?> folderClass = editorLoader.loadClass("org.eclipse.ui.IFolderLayout");
-    return ComponentDescriptionHelper.getDescription(editor, folderClass);
-  }
+	/**
+	 * @return the {@link ComponentDescription} for {@link IFolderLayout}.
+	 */
+	private static ComponentDescription getFolderDescription(JavaInfo host) throws Exception {
+		AstEditor editor = host.getEditor();
+		ClassLoader editorLoader = JavaInfoUtils.getClassLoader(host);
+		Class<?> folderClass = editorLoader.loadClass("org.eclipse.ui.IFolderLayout");
+		return ComponentDescriptionHelper.getDescription(editor, folderClass);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link FolderViewInfo} children.
-   */
-  public List<FolderViewInfo> getViews() {
-    return getChildren(FolderViewInfo.class);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link FolderViewInfo} children.
+	 */
+	public List<FolderViewInfo> getViews() {
+		return getChildren(FolderViewInfo.class);
+	}
 
-  @Override
-  protected void registerLayoutControls(Map<String, Control> idToControl) {
-    super.registerLayoutControls(idToControl);
-    Control folderControl = (Control) getComponentObject();
-    for (FolderViewInfo view : getViews()) {
-      idToControl.put(view.getId(), folderControl);
-    }
-  }
+	@Override
+	protected void registerLayoutControls(Map<String, Control> idToControl) {
+		super.registerLayoutControls(idToControl);
+		Control folderControl = (Control) getComponentObject();
+		for (FolderViewInfo view : getViews()) {
+			idToControl.put(view.getId(), folderControl);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Properties
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final Property m_placeholderProperty = new JavaProperty(this, "placeholder",
-      BooleanPropertyEditor.INSTANCE) {
-    @Override
-    public boolean isModified() throws Exception {
-      return true;
-    }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Properties
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final Property m_placeholderProperty = new JavaProperty(this, "placeholder",
+			BooleanPropertyEditor.INSTANCE) {
+		@Override
+		public boolean isModified() throws Exception {
+			return true;
+		}
 
-    @Override
-    public Object getValue() throws Exception {
-      return isPlaceholder2();
-    }
+		@Override
+		public Object getValue() throws Exception {
+			return isPlaceholder2();
+		}
 
-    @Override
-    public void setValue(final Object value) throws Exception {
-      ExecutionUtils.run(m_page, new RunnableEx() {
-        @Override
-        public void run() throws Exception {
-          setPlaceholder((Boolean) value);
-        }
-      });
-    }
-  };
+		@Override
+		public void setValue(final Object value) throws Exception {
+			ExecutionUtils.run(m_page, new RunnableEx() {
+				@Override
+				public void run() throws Exception {
+					setPlaceholder((Boolean) value);
+				}
+			});
+		}
+	};
 
-  @Override
-  protected List<Property> getPropertyList() throws Exception {
-    List<Property> properties = super.getPropertyList();
-    properties.add(m_placeholderProperty);
-    return properties;
-  }
+	@Override
+	protected List<Property> getPropertyList() throws Exception {
+		List<Property> properties = super.getPropertyList();
+		properties.add(m_placeholderProperty);
+		return properties;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // State
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if this folder is place-holder, i.e. created using
-   *         {@link IPageLayout#createPlaceholderFolder(String, int, float, String)}.
-   */
-  public boolean isPlaceholder2() {
-    String signature = getInvocationSignature();
-    return signature.equals("createPlaceholderFolder(java.lang.String,int,float,java.lang.String)");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// State
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if this folder is place-holder, i.e. created using
+	 *         {@link IPageLayout#createPlaceholderFolder(String, int, float, String)}.
+	 */
+	public boolean isPlaceholder2() {
+		String signature = getInvocationSignature();
+		return signature.equals("createPlaceholderFolder(java.lang.String,int,float,java.lang.String)");
+	}
 
-  /**
-   * If given <code>makePlaceholder</code> argument is <code>true</code>,converts creation to use
-   * {@link IPageLayout#createPlaceholderFolder(String, int, float, String)}.
-   */
-  public void setPlaceholder(final boolean makePlaceholder) throws Exception {
-    AstEditor editor = getEditor();
-    boolean wasPlaceholder = isPlaceholder2();
-    if (makePlaceholder && !wasPlaceholder) {
-      // replace variable type to IPlaceholderFolderLayout
-      if (getVariableSupport() instanceof AbstractSimpleVariableSupport) {
-        AbstractSimpleVariableSupport variableSupport =
-            (AbstractSimpleVariableSupport) getVariableSupport();
-        variableSupport.setType("org.eclipse.ui.IPlaceholderFolderLayout");
-      }
-      // replace methods for folder and its views
-      editor.replaceInvocationName(getInvocation(), "createPlaceholderFolder");
-      setViewsMethodName("addPlaceholder");
-    } else if (!makePlaceholder && wasPlaceholder) {
-      // replace variable type to IFolderLayout
-      if (getVariableSupport() instanceof AbstractSimpleVariableSupport) {
-        AbstractSimpleVariableSupport variableSupport =
-            (AbstractSimpleVariableSupport) getVariableSupport();
-        variableSupport.setType("org.eclipse.ui.IFolderLayout");
-      }
-      // replace methods for folder and its views
-      editor.replaceInvocationName(getInvocation(), "createFolder");
-      setViewsMethodName("addView");
-    }
-  }
+	/**
+	 * If given <code>makePlaceholder</code> argument is <code>true</code>,converts creation to use
+	 * {@link IPageLayout#createPlaceholderFolder(String, int, float, String)}.
+	 */
+	public void setPlaceholder(final boolean makePlaceholder) throws Exception {
+		AstEditor editor = getEditor();
+		boolean wasPlaceholder = isPlaceholder2();
+		if (makePlaceholder && !wasPlaceholder) {
+			// replace variable type to IPlaceholderFolderLayout
+			if (getVariableSupport() instanceof AbstractSimpleVariableSupport) {
+				AbstractSimpleVariableSupport variableSupport =
+						(AbstractSimpleVariableSupport) getVariableSupport();
+				variableSupport.setType("org.eclipse.ui.IPlaceholderFolderLayout");
+			}
+			// replace methods for folder and its views
+			editor.replaceInvocationName(getInvocation(), "createPlaceholderFolder");
+			setViewsMethodName("addPlaceholder");
+		} else if (!makePlaceholder && wasPlaceholder) {
+			// replace variable type to IFolderLayout
+			if (getVariableSupport() instanceof AbstractSimpleVariableSupport) {
+				AbstractSimpleVariableSupport variableSupport =
+						(AbstractSimpleVariableSupport) getVariableSupport();
+				variableSupport.setType("org.eclipse.ui.IFolderLayout");
+			}
+			// replace methods for folder and its views
+			editor.replaceInvocationName(getInvocation(), "createFolder");
+			setViewsMethodName("addView");
+		}
+	}
 
-  /**
-   * Replaces name of method between <code>"addView"</code> and <code>"addPlaceholder"</code>.
-   */
-  private void setViewsMethodName(String methodName) throws Exception {
-    AstEditor editor = getEditor();
-    for (FolderViewInfo view : getViews()) {
-      MethodInvocation invocation = view.getInvocation();
-      editor.replaceInvocationName(invocation, methodName);
-    }
-  }
+	/**
+	 * Replaces name of method between <code>"addView"</code> and <code>"addPlaceholder"</code>.
+	 */
+	private void setViewsMethodName(String methodName) throws Exception {
+		AstEditor editor = getEditor();
+		for (FolderViewInfo view : getViews()) {
+			MethodInvocation invocation = view.getInvocation();
+			editor.replaceInvocationName(invocation, methodName);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Image getPresentationIcon() {
-    return Activator.getImage("info/perspective/folder.gif");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Image getPresentationIcon() {
+		return Activator.getImage("info/perspective/folder.gif");
+	}
 
-  @Override
-  protected String getPresentationText() {
-    return getId();
-  }
+	@Override
+	protected String getPresentationText() {
+		return getId();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Rendering
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final int VIEWS_CONTAINER_MARGIN = 8;
-  private CTabFolder m_folder;
-  private Composite m_viewsComposite;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Rendering
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final int VIEWS_CONTAINER_MARGIN = 8;
+	private CTabFolder m_folder;
+	private Composite m_viewsComposite;
 
-  @Override
-  public Object getComponentObject() {
-    return m_folder;
-  }
+	@Override
+	public Object getComponentObject() {
+		return m_folder;
+	}
 
-  @Override
-  public Object render() throws Exception {
-    m_folder = PageLayoutInfo.createPartFolder(m_page.getPartsComposite());
-    // create views container, where we will add view icons
-    m_viewsComposite = new Composite(m_folder.getParent(), SWT.NONE);
-    {
-      {
-        RowLayout rowLayout = new RowLayout();
-        rowLayout.justify = true;
-        m_viewsComposite.setLayout(rowLayout);
-      }
-      // view container should be always above client area of folder
-      m_viewsComposite.moveAbove(m_folder);
-      m_folder.addControlListener(new ControlAdapter() {
-        @Override
-        public void controlResized(ControlEvent e) {
-          relocateViewsComposite();
-        }
+	@Override
+	public Object render() throws Exception {
+		m_folder = PageLayoutInfo.createPartFolder(m_page.getPartsComposite());
+		// create views container, where we will add view icons
+		m_viewsComposite = new Composite(m_folder.getParent(), SWT.NONE);
+		{
+			{
+				RowLayout rowLayout = new RowLayout();
+				rowLayout.justify = true;
+				m_viewsComposite.setLayout(rowLayout);
+			}
+			// view container should be always above client area of folder
+			m_viewsComposite.moveAbove(m_folder);
+			m_folder.addControlListener(new ControlAdapter() {
+				@Override
+				public void controlResized(ControlEvent e) {
+					relocateViewsComposite();
+				}
 
-        private void relocateViewsComposite() {
-          Rectangle bounds = m_folder.getBounds();
-          Rectangle clientArea = m_folder.getClientArea();
-          // change margins
-          clientArea.x += VIEWS_CONTAINER_MARGIN;
-          clientArea.width -= 2 * VIEWS_CONTAINER_MARGIN;
-          clientArea.y += VIEWS_CONTAINER_MARGIN;
-          clientArea.height -= 2 * VIEWS_CONTAINER_MARGIN;
-          // real parent for views composite is parent of folder, so change bounds
-          clientArea.x += bounds.x;
-          clientArea.y += bounds.y;
-          //
-          m_viewsComposite.setBounds(clientArea);
-        }
-      });
-    }
-    // return mock as object
-    {
-      return new ByteBuddy() //
-          .subclass(getDescription().getComponentClass()) //
-          .method(ElementMatchers.any()) //
-          .intercept(StubMethod.INSTANCE) //
-          .make() //
-          .load(JavaInfoUtils.getClassLoader(this)) //
-          .getLoaded() //
-          .getConstructor() //
-          .newInstance();
-    }
-  }
+				private void relocateViewsComposite() {
+					Rectangle bounds = m_folder.getBounds();
+					Rectangle clientArea = m_folder.getClientArea();
+					// change margins
+					clientArea.x += VIEWS_CONTAINER_MARGIN;
+					clientArea.width -= 2 * VIEWS_CONTAINER_MARGIN;
+					clientArea.y += VIEWS_CONTAINER_MARGIN;
+					clientArea.height -= 2 * VIEWS_CONTAINER_MARGIN;
+					// real parent for views composite is parent of folder, so change bounds
+					clientArea.x += bounds.x;
+					clientArea.y += bounds.y;
+					//
+					m_viewsComposite.setBounds(clientArea);
+				}
+			});
+		}
+		// return mock as object
+		{
+			return new ByteBuddy() //
+					.subclass(getDescription().getComponentClass()) //
+					.method(ElementMatchers.any()) //
+					.intercept(StubMethod.INSTANCE) //
+					.make() //
+					.load(JavaInfoUtils.getClassLoader(this)) //
+					.getLoaded() //
+					.getConstructor() //
+					.newInstance();
+		}
+	}
 
-  /**
-   * @return the {@link CTabFolder} widget, to add {@link CTabItem}'s for {@link FolderViewInfo}.
-   */
-  CTabFolder getFolder() {
-    return m_folder;
-  }
+	/**
+	 * @return the {@link CTabFolder} widget, to add {@link CTabItem}'s for {@link FolderViewInfo}.
+	 */
+	CTabFolder getFolder() {
+		return m_folder;
+	}
 
-  /**
-   * @return the {@link Composite}, to add {@link Control}'s for {@link FolderViewInfo}.
-   */
-  Composite getViewsComposite() {
-    return m_viewsComposite;
-  }
+	/**
+	 * @return the {@link Composite}, to add {@link Control}'s for {@link FolderViewInfo}.
+	 */
+	Composite getViewsComposite() {
+		return m_viewsComposite;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void refresh_afterCreate() throws Exception {
-    super.refresh_afterCreate();
-    // select first item
-    m_folder.setSelection(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void refresh_afterCreate() throws Exception {
+		super.refresh_afterCreate();
+		// select first item
+		m_folder.setSelection(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Creates new {@link FolderViewInfo}.
-   *
-   * @return the created {@link FolderViewInfo}.
-   */
-  public FolderViewInfo command_CREATE(String viewId, FolderViewInfo nextView) throws Exception {
-    // add new MethodInvocation
-    MethodInvocation newInvocation;
-    {
-      StatementTarget target = JavaInfoUtils.getTarget(this, nextView);
-      String source =
-          TemplateUtils.format("{0}.{1}({2})", this, isPlaceholder2()
-              ? "addPlaceholder"
-              : "addView", StringConverter.INSTANCE.toJavaSource(this, viewId));
-      newInvocation = (MethodInvocation) addExpressionStatement(target, source);
-    }
-    // create new FolderView_Info
-    FolderViewInfo newView = new FolderViewInfo(this, newInvocation);
-    moveChild(newView, nextView);
-    // add related nodes
-    {
-      newView.bindToExpression(newInvocation);
-      newView.addRelatedNodes(newInvocation);
-      addRelatedNodes(newInvocation);
-    }
-    // OK, we have new view
-    return newView;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Creates new {@link FolderViewInfo}.
+	 *
+	 * @return the created {@link FolderViewInfo}.
+	 */
+	public FolderViewInfo command_CREATE(String viewId, FolderViewInfo nextView) throws Exception {
+		// add new MethodInvocation
+		MethodInvocation newInvocation;
+		{
+			StatementTarget target = JavaInfoUtils.getTarget(this, nextView);
+			String source =
+					TemplateUtils.format("{0}.{1}({2})", this, isPlaceholder2()
+							? "addPlaceholder"
+									: "addView", StringConverter.INSTANCE.toJavaSource(this, viewId));
+			newInvocation = (MethodInvocation) addExpressionStatement(target, source);
+		}
+		// create new FolderView_Info
+		FolderViewInfo newView = new FolderViewInfo(this, newInvocation);
+		moveChild(newView, nextView);
+		// add related nodes
+		{
+			newView.bindToExpression(newInvocation);
+			newView.addRelatedNodes(newInvocation);
+			addRelatedNodes(newInvocation);
+		}
+		// OK, we have new view
+		return newView;
+	}
 
-  /**
-   * Moves existing {@link FolderViewInfo} inside or into this folder.
-   */
-  public FolderViewInfo command_MOVE(FolderViewInfo view, FolderViewInfo nextView) throws Exception {
-    if (view.getParent() == this) {
-      JavaInfoUtils.move(view, null, this, nextView);
-      return view;
-    } else {
-      FolderViewInfo newView = command_CREATE(view.getId(), nextView);
-      view.delete();
-      return newView;
-    }
-  }
+	/**
+	 * Moves existing {@link FolderViewInfo} inside or into this folder.
+	 */
+	public FolderViewInfo command_MOVE(FolderViewInfo view, FolderViewInfo nextView) throws Exception {
+		if (view.getParent() == this) {
+			JavaInfoUtils.move(view, null, this, nextView);
+			return view;
+		} else {
+			FolderViewInfo newView = command_CREATE(view.getId(), nextView);
+			view.delete();
+			return newView;
+		}
+	}
 
-  /**
-   * Creates new {@link FolderViewInfo} using existing {@link PageLayoutAddViewInfo}.
-   *
-   * @return the created {@link FolderViewInfo}.
-   */
-  public FolderViewInfo command_MOVE(PageLayoutAddViewInfo topView, FolderViewInfo nextView)
-      throws Exception {
-    FolderViewInfo newView = command_CREATE(topView.getId(), nextView);
-    topView.delete();
-    return newView;
-  }
+	/**
+	 * Creates new {@link FolderViewInfo} using existing {@link PageLayoutAddViewInfo}.
+	 *
+	 * @return the created {@link FolderViewInfo}.
+	 */
+	public FolderViewInfo command_MOVE(PageLayoutAddViewInfo topView, FolderViewInfo nextView)
+			throws Exception {
+		FolderViewInfo newView = command_CREATE(topView.getId(), nextView);
+		topView.delete();
+		return newView;
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/perspective/PageLayoutCreationSupport.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/perspective/PageLayoutCreationSupport.java
index 815608f83..81c441672 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/perspective/PageLayoutCreationSupport.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/perspective/PageLayoutCreationSupport.java
@@ -36,81 +36,81 @@
  * @coverage rcp.model.rcp
  */
 public final class PageLayoutCreationSupport extends CreationSupport {
-  private final SingleVariableDeclaration m_parameter;
+	private final SingleVariableDeclaration m_parameter;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public PageLayoutCreationSupport(SingleVariableDeclaration parameter) {
-    m_parameter = parameter;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public PageLayoutCreationSupport(SingleVariableDeclaration parameter) {
+		m_parameter = parameter;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    return "parameter: " + m_parameter.getName().getIdentifier();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		return "parameter: " + m_parameter.getName().getIdentifier();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public ASTNode getNode() {
-    return m_parameter;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public ASTNode getNode() {
+		return m_parameter;
+	}
 
-  @Override
-  public boolean isJavaInfo(ASTNode node) {
-    return node == m_parameter;
-  }
+	@Override
+	public boolean isJavaInfo(ASTNode node) {
+		return node == m_parameter;
+	}
 
-  @Override
-  public boolean canBeEvaluated() {
-    return false;
-  }
+	@Override
+	public boolean canBeEvaluated() {
+		return false;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Validation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean canDelete() {
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Validation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean canDelete() {
+		return false;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Creation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Object create(EvaluationContext context, ExecutionFlowFrameVisitor visitor)
-      throws Exception {
-    ((PageLayoutInfo) m_javaInfo).render();
-    //
-    return new ByteBuddy() //
-        .subclass(m_javaInfo.getDescription().getComponentClass()) //
-        .method(ElementMatchers.any()) //
-        .intercept(StubMethod.INSTANCE) //
-        .method(named("getEditorArea").and(takesNoArguments())) //
-        .intercept(FixedValue.value(IPageLayout.ID_EDITOR_AREA)) //
-        .method(named("isEditorAreaVisible").and(takesNoArguments())) //
-        .intercept(FixedValue.value(true)) //
-        .method(named("isFixed").and(takesNoArguments())) //
-        .intercept(FixedValue.value(false)) //
-        .make() //
-        .load(JavaInfoUtils.getClassLoader(m_javaInfo)) //
-        .getLoaded() //
-        .getConstructor() //
-        .newInstance();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Creation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Object create(EvaluationContext context, ExecutionFlowFrameVisitor visitor)
+			throws Exception {
+		((PageLayoutInfo) m_javaInfo).render();
+		//
+		return new ByteBuddy() //
+				.subclass(m_javaInfo.getDescription().getComponentClass()) //
+				.method(ElementMatchers.any()) //
+				.intercept(StubMethod.INSTANCE) //
+				.method(named("getEditorArea").and(takesNoArguments())) //
+				.intercept(FixedValue.value(IPageLayout.ID_EDITOR_AREA)) //
+				.method(named("isEditorAreaVisible").and(takesNoArguments())) //
+				.intercept(FixedValue.value(true)) //
+				.method(named("isFixed").and(takesNoArguments())) //
+				.intercept(FixedValue.value(false)) //
+				.make() //
+				.load(JavaInfoUtils.getClassLoader(m_javaInfo)) //
+				.getLoaded() //
+				.getConstructor() //
+				.newInstance();
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/perspective/PageLayoutInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/perspective/PageLayoutInfo.java
index cafe8f4a3..acc3a5946 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/perspective/PageLayoutInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/perspective/PageLayoutInfo.java
@@ -88,784 +88,784 @@
  * @coverage rcp.model.rcp
  */
 public final class PageLayoutInfo extends AbstractComponentInfo {
-  private final EditorAreaInfo m_editorArea = new EditorAreaInfo(this);
-  private final ViewShortcutContainerInfo m_viewShortcutContainer =
-      new ViewShortcutContainerInfo(this);
-  private final PerspectiveShortcutContainerInfo m_perspectiveShortcutContainer =
-      new PerspectiveShortcutContainerInfo(this);
-  private final FastViewContainerInfo m_fastViewContainer = new FastViewContainerInfo(this);
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public PageLayoutInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-    // move non-visual containers to the end
-    addBroadcastListener(new JavaInfoTreeAlmostComplete() {
-      @Override
-      public void invoke(JavaInfo root, List<JavaInfo> components) throws Exception {
-        moveChild(m_fastViewContainer, null);
-        moveChild(m_viewShortcutContainer, null);
-        moveChild(m_perspectiveShortcutContainer, null);
-        removeBroadcastListener(this);
-      }
-    });
-    // palette
-    addPaletteListener();
-    contributeExtensionProperty();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Properties
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void contributeExtensionProperty() throws Exception {
-    new ExtensionPropertyHelper(this, "org.eclipse.ui.perspectives", "perspective") {
-      @Override
-      protected Property[] createProperties() {
-        return new Property[]{
-            createStringProperty("name"),
-            createIconProperty("icon"),
-            createBooleanProperty("fixed", false)};
-      }
-    };
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Palette
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * {@link PageLayoutInfo} uses toolkit of RCP, but it does not need SWT, JFace components on
-   * palette. It needs only views and perspectives.
-   */
-  private void addPaletteListener() {
-    addBroadcastListener(new PaletteEventListener() {
-      @Override
-      public void canEdit(boolean[] canEdit) {
-        canEdit[0] = false;
-      }
-
-      @Override
-      public void categories(List<CategoryInfo> categories) throws Exception {
-        categories.clear();
-        // create "System" category
-        {
-          CategoryInfo category = new CategoryInfo("system");
-          category.setName("System");
-          category.setDescription("System tools");
-          category.setOpen(true);
-          categories.add(category);
-          // add entries
-          {
-            SelectionToolEntryInfo entry = new SelectionToolEntryInfo();
-            entry.setId("system.selection");
-            category.addEntry(entry);
-          }
-        }
-        // prepare sorted list of view categories
-        List<ViewCategoryInfo> viewCategories;
-        {
-          viewCategories = PdeUtils.getViewCategories();
-          Collections.sort(viewCategories, new Comparator<ViewCategoryInfo>() {
-            @Override
-            public int compare(ViewCategoryInfo o1, ViewCategoryInfo o2) {
-              return getName(o1).compareTo(getName(o2));
-            }
-
-            private String getName(ViewCategoryInfo o1) {
-              String name = o1.getName();
-              name = StringUtils.remove(name, '&');
-              return name;
-            }
-          });
-        }
-        // create "Views" categories
-        for (ViewCategoryInfo categoryInfo : viewCategories) {
-          CategoryInfo category = new CategoryInfo();
-          category.setId(getIdForPaletteCategory(categoryInfo));
-          category.setName(categoryInfo.getName());
-          category.setDescription(categoryInfo.getId());
-          category.setOpen(true);
-          categories.add(category);
-          // add views
-          for (ViewInfo viewInfo : categoryInfo.getViews()) {
-            category.addEntry(new PerspectiveViewDropEntryInfo(viewInfo));
-          }
-        }
-        // create "Perspectives" category
-        {
-          CategoryInfo category = new CategoryInfo("perspectives");
-          category.setName("Perspectives");
-          category.setOpen(true);
-          categories.add(category);
-          // add entries
-          for (PerspectiveInfo perspective : PdeUtils.getPerspectives()) {
-            category.addEntry(new PerspectivePerspectiveDropEntryInfo(perspective));
-          }
-        }
-      }
-
-      private String getIdForPaletteCategory(ViewCategoryInfo categoryInfo) {
-        String id = categoryInfo.getId();
-        if (id == null) {
-          id = "other";
-        }
-        return id;
-      }
-    });
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link AbstractPartInfo} children.
-   */
-  public List<AbstractPartInfo> getParts() {
-    return getChildren(AbstractPartInfo.class);
-  }
-
-  public EditorAreaInfo getEditorArea() {
-    return m_editorArea;
-  }
-
-  public FastViewContainerInfo getFastViewContainer() {
-    return m_fastViewContainer;
-  }
-
-  public ViewShortcutContainerInfo getViewShortcutContainer() {
-    return m_viewShortcutContainer;
-  }
-
-  public PerspectiveShortcutContainerInfo getPerspectiveShortcutContainer() {
-    return m_perspectiveShortcutContainer;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AbstractComponentInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected TopBoundsSupport createTopBoundsSupport() {
-    return new PageLayoutTopBoundsSupport(this);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Hierarchy
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean canBeRoot() {
-    return true;
-  }
-
-  @Override
-  public Object getComponentObject() {
-    return m_composite;
-  }
-
-  /**
-   * @return the {@link Composite} that is used as top level container editor/views/folders.
-   */
-  public Composite getPartsComposite() {
-    return m_partsComposite;
-  }
-
-  /**
-   * @return the {@link Composite} that is used as top level container for {@link PageLayoutInfo}
-   *         GUI.
-   */
-  public Composite getComposite() {
-    return m_composite;
-  }
-
-  /**
-   * @return the {@link PageLayoutInfo}'s Shell.
-   */
-  Shell getShell() {
-    return m_shell;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Shell m_shell;
-  private Composite m_composite;
-  private Composite m_partsComposite;
-  private final Map<String, Control> m_idToControlMap = Maps.newHashMap();
-
-  /**
-   * Prepares widgets of this {@link IPageLayout} for filling.
-   */
-  void render() throws Exception {
-    m_shell = new Shell(SWT.SHELL_TRIM | SWT.APPLICATION_MODAL);
-    m_shell.setLayout(new FillLayout());
-    //
-    m_composite = new Composite(m_shell, SWT.NONE);
-    GridLayoutFactory.create(m_composite).columns(2).noMargins().noSpacing();
-    // create parent for perspective parts: views and folders
-    {
-      m_partsComposite = new Composite(m_composite, SWT.NONE);
-      GridDataFactory.create(m_partsComposite).grab().fill();
-    }
-    // create shortcuts
-    {
-      Composite shortcutsComposite = new Composite(m_composite, SWT.NONE);
-      GridDataFactory.create(shortcutsComposite).grabV().fillV();
-      GridLayoutFactory.create(shortcutsComposite).marginsH(1).marginsV(0).spacingH(0).spacingV(20);
-      // create view shortcuts
-      {
-        Control control = m_viewShortcutContainer.render(shortcutsComposite);
-        GridDataFactory.create(control).grabV().fillV();
-      }
-      // create perspective shortcuts
-      {
-        Control control = m_perspectiveShortcutContainer.render(shortcutsComposite);
-        GridDataFactory.create(control).grabV().fillV();
-      }
-    }
-    // create fast views
-    {
-      Control control = m_fastViewContainer.render(m_composite);
-      GridDataFactory.create(control).grabH().fillH();
-    }
-    // add editor area
-    {
-      m_editorArea.render(m_partsComposite);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Layout
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets new {@link SashLineInfo} for given {@link AbstractPartInfo}.
-   */
-  private void setSashLine(AbstractPartInfo part,
-      Control partControl,
-      Rectangle refBounds,
-      int relation) {
-    Rectangle partBounds = new Rectangle(partControl.getBounds());
-    int sashSize = SashLineInfo.SASH_SIZE;
-    // create line
-    SashLineInfo sashLine = null;
-    if (relation == IPageLayout.LEFT) {
-      sashLine =
-          new SashLineInfo(part,
-              partBounds,
-              refBounds,
-              IPositionConstants.EAST,
-              new Rectangle(partBounds.right(), partBounds.y, sashSize, partBounds.height));
-    } else if (relation == IPageLayout.RIGHT) {
-      sashLine =
-          new SashLineInfo(part,
-              partBounds,
-              refBounds,
-              IPositionConstants.WEST,
-              new Rectangle(partBounds.x - sashSize, partBounds.y, sashSize, partBounds.height));
-    } else if (relation == IPageLayout.TOP) {
-      sashLine =
-          new SashLineInfo(part,
-              partBounds,
-              refBounds,
-              IPositionConstants.SOUTH,
-              new Rectangle(partBounds.x, partBounds.bottom(), partBounds.width, sashSize));
-    } else if (relation == IPageLayout.BOTTOM) {
-      sashLine =
-          new SashLineInfo(part,
-              partBounds,
-              refBounds,
-              IPositionConstants.NORTH,
-              new Rectangle(partBounds.x, partBounds.y - sashSize, partBounds.width, sashSize));
-    }
-    // set line
-    part.setLine(sashLine);
-  }
-
-  /**
-   * Layouts top-level {@link AbstractPartInfo}'s using ratio/refId information.
-   */
-  void layoutPerspectiveParts() {
-    Dimension fullSize = new Dimension(m_partsComposite.getSize().x, m_partsComposite.getSize().y);
-    // layout "editor area"
-    {
-      Control editorControl = m_editorArea.getControl();
-      editorControl.setBounds(0, 0, fullSize.width, fullSize.height);
-    }
-    // XXX
-    boolean editorAreaVisible = true;
-    try {
-      editorAreaVisible = (Boolean) getPropertyByTitle("editorAreaVisible").getValue();
-    } catch (Throwable e) {
-    }
-    // layout views/folders
-    List<AbstractPartInfo> parts = getParts();
-    // prepare last AbstractPart_Info that references "editor area"
-    AbstractPartInfo lastPart = null;
-    for (AbstractPartInfo part : parts) {
-      String refId = part.getRefId();
-      if (IPageLayout.ID_EDITOR_AREA.equals(refId)) {
-        lastPart = part;
-      }
-    }
-    // do layout AbstractPart_Info's
-    for (AbstractPartInfo part : parts) {
-      String id = part.getId();
-      int relationship = part.getRelationship();
-      float ratio = part.getRatio();
-      String refId = part.getRefId();
-      boolean isLastEditorRef = part == lastPart;
-      boolean takeFullEditorSize = isLastEditorRef && !editorAreaVisible;
-      //
-      Control partControl = m_idToControlMap.get(id);
-      Control refControl = m_idToControlMap.get(refId);
-      if (refControl != null) {
-        org.eclipse.swt.graphics.Rectangle refBounds = refControl.getBounds();
-        //
-        int sashSize = SashLineInfo.SASH_SIZE;
-        if (relationship == IPageLayout.LEFT) {
-          int width = calculatePartSize(refBounds.width, ratio, takeFullEditorSize);
-          partControl.setBounds(refBounds.x, refBounds.y, width, refBounds.height);
-          refControl.setBounds(refBounds.x + width + sashSize, refBounds.y, refBounds.width
-              - width
-              - sashSize, refBounds.height);
-        } else if (relationship == IPageLayout.RIGHT) {
-          int width = calculatePartSize(refBounds.width, 1 - ratio, takeFullEditorSize);
-          partControl.setBounds(
-              refBounds.x + refBounds.width - width,
-              refBounds.y,
-              width,
-              refBounds.height);
-          refControl.setBounds(
-              refBounds.x,
-              refBounds.y,
-              refBounds.width - width - sashSize,
-              refBounds.height);
-        } else if (relationship == IPageLayout.TOP) {
-          int height = calculatePartSize(refBounds.height, ratio, takeFullEditorSize);
-          partControl.setBounds(refBounds.x, refBounds.y, refBounds.width, height);
-          refControl.setBounds(
-              refBounds.x,
-              refBounds.y + height + sashSize,
-              refBounds.width,
-              refBounds.height - height - sashSize);
-        } else if (relationship == IPageLayout.BOTTOM) {
-          int height = calculatePartSize(refBounds.height, 1 - ratio, takeFullEditorSize);
-          partControl.setBounds(
-              refBounds.x,
-              refBounds.y + refBounds.height - height,
-              refBounds.width,
-              height);
-          refControl.setBounds(refBounds.x, refBounds.y, refBounds.width, refBounds.height
-              - height
-              - sashSize);
-        } else {
-          throw new IllegalArgumentException("Unknown relationship: " + relationship);
-        }
-        // add SashLineInfo
-        setSashLine(part, partControl, new Rectangle(refBounds), relationship);
-      }
-    }
-  }
-
-  /**
-   * Calculate size of part using size of referenced part, ration and <code>refId</code>. If
-   * <code>refId</code> is editor and editor marked as invisible, make editor small, but still
-   * visible.
-   */
-  private static int calculatePartSize(int refSize, float ratio, boolean takeFullSize) {
-    if (takeFullSize) {
-      return refSize;
-    }
-    return (int) (refSize * ratio);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link CTabFolder} configured to look as editor/view of perspective.
-   */
-  public static CTabFolder createPartFolder(Composite parent) {
-    CTabFolder folder = new CTabFolder(parent, SWT.BORDER);
-    // configure look
-    folder.setUnselectedCloseVisible(true);
-    folder.setMaximizeVisible(true);
-    folder.setMinimizeVisible(true);
-    folder.setSimple(false);
-    // configure colors
-    TabFolderDecorator.setActiveTabColors(true, folder);
-    return folder;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void refresh_dispose() throws Exception {
-    super.refresh_dispose();
-    if (m_shell != null) {
-      m_shell.dispose();
-      m_shell = null;
-      m_composite = null;
-      m_partsComposite = null;
-      m_idToControlMap.clear();
-    }
-  }
-
-  @Override
-  protected void refresh_afterCreate() throws Exception {
-    {
-      m_idToControlMap.clear();
-      m_idToControlMap.put(m_editorArea.getId(), m_editorArea.getControl());
-      for (AbstractPartInfo part : getParts()) {
-        part.registerLayoutControls(m_idToControlMap);
-      }
-    }
-    super.refresh_afterCreate();
-  }
-
-  @Override
-  protected void refresh_fetch() throws Exception {
-    ControlInfo.refresh_fetch(this, new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        PageLayoutInfo.super.refresh_fetch();
-      }
-    });
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Interface for implementing any {@link PageLayoutInfo} command, that operates with
-   * {@link AbstractPartInfo}'s.
-   */
-  private interface IPageLayoutCommand<T> {
-    T execute(AstEditor editor, String layoutSource, StatementTarget target, ObjectInfo nextChild)
-        throws Exception;
-  }
-
-  /**
-   * Creates new {@link PageLayoutAddViewInfo}.
-   *
-   * @param command
-   *          the {@link IPageLayoutCommand} that performs operation using prepared parameters.
-   * @param reference
-   *          the top level element of {@link PageLayoutInfo} to reference.
-   * @return the created {@link PageLayoutAddViewInfo}.
-   */
-  public <T> T command(IPageLayoutCommand<T> command, IPageLayoutTopLevelInfo reference)
-      throws Exception {
-    AstEditor editor = getEditor();
-    // prepare "createInitialLayout" method
-    MethodDeclaration layoutMethod;
-    {
-      layoutMethod =
-          AstNodeUtils.getMethodBySignature(
-              JavaInfoUtils.getTypeDeclaration(this),
-              "createInitialLayout(org.eclipse.ui.IPageLayout)");
-      Assert.isNotNull(layoutMethod, "No createInitialLayout() method in %s.", editor.getSource());
-    }
-    // prepare target for
-    StatementTarget target;
-    AbstractPartInfo prevChild;
-    {
-      // find last AbstractPart_Info that references "reference"
-      AbstractPartInfo lastRefPart;
-      {
-        String referenceId = reference.getId();
-        lastRefPart = null;
-        for (AbstractPartInfo part : getParts()) {
-          if (part.getRefId().equals(referenceId)) {
-            lastRefPart = part;
-          }
-        }
-      }
-      // prepare target relative to last AbstractPart_Info
-      if (lastRefPart != null) {
-        prevChild = lastRefPart;
-        target = getTargetAfter(prevChild);
-      } else {
-        if (reference instanceof EditorAreaInfo) {
-          prevChild = GenericsUtils.getLastOrNull(getParts());
-          target = new StatementTarget(layoutMethod, false);
-        } else {
-          prevChild = (AbstractPartInfo) reference;
-          target = getTargetAfter(prevChild);
-        }
-      }
-    }
-    // OK, we prepared everything, execute command
-    String layoutSource = DomGenerics.parameters(layoutMethod).get(0).getName().getIdentifier();
-    ObjectInfo nextChild = GenericsUtils.getNextOrNull(getChildren(), prevChild);
-    return command.execute(editor, layoutSource, target, nextChild);
-  }
-
-  /**
-   * @return the {@link StatementTarget} for position after given {@link AbstractPartInfo}.
-   */
-  private static StatementTarget getTargetAfter(AbstractPartInfo part) throws Exception {
-    PageLayoutInfo page = part.getPage();
-    JavaInfo nextChild = GenericsUtils.getNextOrNull(page.getChildrenJava(), part);
-    return JavaInfoUtils.getTarget(page, nextChild);
-  }
-
-  /**
-   * Creates new {@link PageLayoutAddViewInfo}.
-   *
-   * @return the created {@link PageLayoutAddViewInfo}.
-   */
-  public PageLayoutAddViewInfo command_CREATE(final String viewId,
-      final int relationship,
-      final float ratio,
-      final IPageLayoutTopLevelInfo reference) throws Exception {
-    final PageLayoutInfo page = this;
-    return command(new IPageLayoutCommand<PageLayoutAddViewInfo>() {
-      @Override
-      public PageLayoutAddViewInfo execute(AstEditor editor,
-          String layoutSource,
-          StatementTarget target,
-          ObjectInfo nextChild) throws Exception {
-        // insert "addView" invocation
-        MethodInvocation newInvocation;
-        {
-          Statement newStatement =
-              editor.addStatement(
-                  layoutSource
-                      + ".addView("
-                      + StringConverter.INSTANCE.toJavaSource(page, viewId)
-                      + ", "
-                      + getRelationSource(relationship)
-                      + ", "
-                      + FloatConverter.INSTANCE.toJavaSource(page, ratio)
-                      + ", "
-                      + reference.getIdSource()
-                      + ");",
-                  target);
-          newInvocation = (MethodInvocation) ((ExpressionStatement) newStatement).getExpression();
-        }
-        // create new PageLayout_addView_Info
-        PageLayoutAddViewInfo newView = new PageLayoutAddViewInfo(page, newInvocation);
-        moveChild(newView, nextChild);
-        // add related nodes
-        {
-          newView.bindToExpression(newInvocation);
-          newView.addRelatedNodes(newInvocation);
-          addRelatedNodes(newInvocation);
-        }
-        // OK, we have new view
-        return newView;
-      }
-    },
-        reference);
-  }
-
-  /**
-   * Moves existing {@link AbstractPartInfo}.
-   */
-  public void command_MOVE(final AbstractPartInfo part,
-      final int relationship,
-      final float ratio,
-      final IPageLayoutTopLevelInfo reference) throws Exception {
-    final PageLayoutInfo page = this;
-    command(new IPageLayoutCommand<PageLayoutAddViewInfo>() {
-      @Override
-      public PageLayoutAddViewInfo execute(AstEditor editor,
-          String layoutSource,
-          final StatementTarget target,
-          final ObjectInfo nextChild) throws Exception {
-        // move creation Statement
-        {
-          IMoveTargetProvider targetProvider = new IMoveTargetProvider() {
-            @Override
-            public StatementTarget getTarget() throws Exception {
-              return target;
-            }
-
-            @Override
-            public void add() throws Exception {
-            }
-
-            @Override
-            public void move() throws Exception {
-              moveChild(part, nextChild);
-            }
-          };
-          JavaInfoUtils.moveProvider(part, null, page, targetProvider);
-          // ignored
-          targetProvider.add();
-        }
-        // update arguments
-        {
-          part.setRelationshipSource(getRelationSource(relationship));
-          part.setRatioSource(FloatConverter.INSTANCE.toJavaSource(page, ratio));
-          part.setRefIdSource(reference.getIdSource());
-        }
-        // no result
-        return null;
-      }
-    }, reference);
-  }
-
-  /**
-   * Converts existing {@link FolderViewInfo} into top level {@link AbstractPartInfo}.
-   */
-  public PageLayoutAddViewInfo command_MOVE(FolderViewInfo folderView,
-      int relationship,
-      float ratio,
-      IPageLayoutTopLevelInfo reference) throws Exception {
-    PageLayoutAddViewInfo topView =
-        command_CREATE(folderView.getId(), relationship, ratio, reference);
-    folderView.delete();
-    return topView;
-  }
-
-  /**
-   * Creates new {@link PageLayoutCreateFolderInfo}.
-   *
-   * @return the created {@link PageLayoutCreateFolderInfo}.
-   */
-  public PageLayoutCreateFolderInfo command_CREATE_folder(final int relationship,
-      final float ratio,
-      final IPageLayoutTopLevelInfo reference) throws Exception {
-    return command(new IPageLayoutCommand<PageLayoutCreateFolderInfo>() {
-      @Override
-      public PageLayoutCreateFolderInfo execute(AstEditor editor,
-          String layoutSource,
-          StatementTarget target,
-          ObjectInfo nextChild) throws Exception {
-        PageLayoutCreateFolderInfo newFolder =
-            command_CREATE_folder(relationship, ratio, reference.getIdSource(), target);
-        moveChild(newFolder, nextChild);
-        // OK, we have new "folder"
-        return newFolder;
-      }
-    },
-        reference);
-  }
-
-  /**
-   * Creates new {@link PageLayoutCreateFolderInfo}.
-   *
-   * @return the created {@link PageLayoutCreateFolderInfo}.
-   */
-  private PageLayoutCreateFolderInfo command_CREATE_folder(int relationship,
-      float ratio,
-      String referenceIdSource,
-      StatementTarget target) throws Exception {
-    // prepare unique ID
-    String folderId;
-    {
-      // prepare set of used ID's for all parts
-      final Set<String> usedIDs = Sets.newTreeSet();
-      for (AbstractPartInfo part : getParts()) {
-        usedIDs.add(part.getId());
-      }
-      // do generate unique
-      folderId = CodeUtils.generateUniqueName("folder", new Predicate<String>() {
-        @Override
-        public boolean apply(String t) {
-          return !usedIDs.contains(t);
-        }
-      });
-    }
-    // prepare CreationSupport
-    CreationSupport creationSupport;
-    {
-      String source =
-          "createFolder("
-              + StringConverter.INSTANCE.toJavaSource(this, folderId)
-              + ", "
-              + getRelationSource(relationship)
-              + ", "
-              + FloatConverter.INSTANCE.toJavaSource(this, ratio)
-              + ", "
-              + referenceIdSource
-              + ")";
-      MethodDescription description =
-          getDescription().getMethod("createFolder(java.lang.String,int,float,java.lang.String)");
-      creationSupport = new PageLayoutAddCreationSupport(this, description, source);
-    }
-    // add PageLayout_createFolder_Info
-    PageLayoutCreateFolderInfo newFolder = new PageLayoutCreateFolderInfo(this, creationSupport);
-    JavaInfoUtils.add(
-        newFolder,
-        new LocalUniqueVariableSupport(newFolder),
-        BlockStatementGenerator.INSTANCE,
-        AssociationObjects.invocationVoid(),
-        this,
-        null,
-        target);
-    // OK, we have new "folder"
-    return newFolder;
-  }
-
-  /**
-   * @return the source for position relative to the reference part; one of {@link IPageLayout#TOP},
-   *         {@link IPageLayout#BOTTOM}, {@link IPageLayout#LEFT} or {@link IPageLayout#RIGHT}.
-   */
-  private static String getRelationSource(int relation) throws Exception {
-    if (ReflectionUtils.getFieldInt(IPageLayout.class, "TOP") == relation) {
-      return "org.eclipse.ui.IPageLayout.TOP";
-    }
-    if (ReflectionUtils.getFieldInt(IPageLayout.class, "BOTTOM") == relation) {
-      return "org.eclipse.ui.IPageLayout.BOTTOM";
-    }
-    if (ReflectionUtils.getFieldInt(IPageLayout.class, "LEFT") == relation) {
-      return "org.eclipse.ui.IPageLayout.LEFT";
-    }
-    if (ReflectionUtils.getFieldInt(IPageLayout.class, "RIGHT") == relation) {
-      return "org.eclipse.ui.IPageLayout.RIGHT";
-    }
-    throw new IllegalArgumentException("Unknown relationship: " + relation);
-  }
-
-  /**
-   * Converts given {@link PageLayoutAddViewInfo} into {@link PageLayoutCreateFolderInfo}.
-   */
-  public PageLayoutCreateFolderInfo convertIntoFolder(PageLayoutAddViewInfo view) throws Exception {
-    // move "view" into Block
-    {
-      Statement statement = AstNodeUtils.getEnclosingStatement(view.getCreationSupport().getNode());
-      getEditor().encloseInBlock(statement);
-    }
-    // add "folder" at same position as "view"
-    PageLayoutCreateFolderInfo folder;
-    {
-      StatementTarget target = JavaInfoUtils.getTarget(this, view);
-      folder =
-          command_CREATE_folder(
-              view.getRelationship(),
-              view.getRatio(),
-              view.getRefIdSource(),
-              target);
-      moveChild(folder, view);
-    }
-    // move "view" on "folder"
-    folder.command_MOVE(view, null);
-    return folder;
-  }
+	private final EditorAreaInfo m_editorArea = new EditorAreaInfo(this);
+	private final ViewShortcutContainerInfo m_viewShortcutContainer =
+			new ViewShortcutContainerInfo(this);
+	private final PerspectiveShortcutContainerInfo m_perspectiveShortcutContainer =
+			new PerspectiveShortcutContainerInfo(this);
+	private final FastViewContainerInfo m_fastViewContainer = new FastViewContainerInfo(this);
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public PageLayoutInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+		// move non-visual containers to the end
+		addBroadcastListener(new JavaInfoTreeAlmostComplete() {
+			@Override
+			public void invoke(JavaInfo root, List<JavaInfo> components) throws Exception {
+				moveChild(m_fastViewContainer, null);
+				moveChild(m_viewShortcutContainer, null);
+				moveChild(m_perspectiveShortcutContainer, null);
+				removeBroadcastListener(this);
+			}
+		});
+		// palette
+		addPaletteListener();
+		contributeExtensionProperty();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Properties
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void contributeExtensionProperty() throws Exception {
+		new ExtensionPropertyHelper(this, "org.eclipse.ui.perspectives", "perspective") {
+			@Override
+			protected Property[] createProperties() {
+				return new Property[]{
+						createStringProperty("name"),
+						createIconProperty("icon"),
+						createBooleanProperty("fixed", false)};
+			}
+		};
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Palette
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * {@link PageLayoutInfo} uses toolkit of RCP, but it does not need SWT, JFace components on
+	 * palette. It needs only views and perspectives.
+	 */
+	private void addPaletteListener() {
+		addBroadcastListener(new PaletteEventListener() {
+			@Override
+			public void canEdit(boolean[] canEdit) {
+				canEdit[0] = false;
+			}
+
+			@Override
+			public void categories(List<CategoryInfo> categories) throws Exception {
+				categories.clear();
+				// create "System" category
+				{
+					CategoryInfo category = new CategoryInfo("system");
+					category.setName("System");
+					category.setDescription("System tools");
+					category.setOpen(true);
+					categories.add(category);
+					// add entries
+					{
+						SelectionToolEntryInfo entry = new SelectionToolEntryInfo();
+						entry.setId("system.selection");
+						category.addEntry(entry);
+					}
+				}
+				// prepare sorted list of view categories
+				List<ViewCategoryInfo> viewCategories;
+				{
+					viewCategories = PdeUtils.getViewCategories();
+					Collections.sort(viewCategories, new Comparator<ViewCategoryInfo>() {
+						@Override
+						public int compare(ViewCategoryInfo o1, ViewCategoryInfo o2) {
+							return getName(o1).compareTo(getName(o2));
+						}
+
+						private String getName(ViewCategoryInfo o1) {
+							String name = o1.getName();
+							name = StringUtils.remove(name, '&');
+							return name;
+						}
+					});
+				}
+				// create "Views" categories
+				for (ViewCategoryInfo categoryInfo : viewCategories) {
+					CategoryInfo category = new CategoryInfo();
+					category.setId(getIdForPaletteCategory(categoryInfo));
+					category.setName(categoryInfo.getName());
+					category.setDescription(categoryInfo.getId());
+					category.setOpen(true);
+					categories.add(category);
+					// add views
+					for (ViewInfo viewInfo : categoryInfo.getViews()) {
+						category.addEntry(new PerspectiveViewDropEntryInfo(viewInfo));
+					}
+				}
+				// create "Perspectives" category
+				{
+					CategoryInfo category = new CategoryInfo("perspectives");
+					category.setName("Perspectives");
+					category.setOpen(true);
+					categories.add(category);
+					// add entries
+					for (PerspectiveInfo perspective : PdeUtils.getPerspectives()) {
+						category.addEntry(new PerspectivePerspectiveDropEntryInfo(perspective));
+					}
+				}
+			}
+
+			private String getIdForPaletteCategory(ViewCategoryInfo categoryInfo) {
+				String id = categoryInfo.getId();
+				if (id == null) {
+					id = "other";
+				}
+				return id;
+			}
+		});
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link AbstractPartInfo} children.
+	 */
+	public List<AbstractPartInfo> getParts() {
+		return getChildren(AbstractPartInfo.class);
+	}
+
+	public EditorAreaInfo getEditorArea() {
+		return m_editorArea;
+	}
+
+	public FastViewContainerInfo getFastViewContainer() {
+		return m_fastViewContainer;
+	}
+
+	public ViewShortcutContainerInfo getViewShortcutContainer() {
+		return m_viewShortcutContainer;
+	}
+
+	public PerspectiveShortcutContainerInfo getPerspectiveShortcutContainer() {
+		return m_perspectiveShortcutContainer;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AbstractComponentInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected TopBoundsSupport createTopBoundsSupport() {
+		return new PageLayoutTopBoundsSupport(this);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Hierarchy
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean canBeRoot() {
+		return true;
+	}
+
+	@Override
+	public Object getComponentObject() {
+		return m_composite;
+	}
+
+	/**
+	 * @return the {@link Composite} that is used as top level container editor/views/folders.
+	 */
+	public Composite getPartsComposite() {
+		return m_partsComposite;
+	}
+
+	/**
+	 * @return the {@link Composite} that is used as top level container for {@link PageLayoutInfo}
+	 *         GUI.
+	 */
+	public Composite getComposite() {
+		return m_composite;
+	}
+
+	/**
+	 * @return the {@link PageLayoutInfo}'s Shell.
+	 */
+	Shell getShell() {
+		return m_shell;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Shell m_shell;
+	private Composite m_composite;
+	private Composite m_partsComposite;
+	private final Map<String, Control> m_idToControlMap = Maps.newHashMap();
+
+	/**
+	 * Prepares widgets of this {@link IPageLayout} for filling.
+	 */
+	void render() throws Exception {
+		m_shell = new Shell(SWT.SHELL_TRIM | SWT.APPLICATION_MODAL);
+		m_shell.setLayout(new FillLayout());
+		//
+		m_composite = new Composite(m_shell, SWT.NONE);
+		GridLayoutFactory.create(m_composite).columns(2).noMargins().noSpacing();
+		// create parent for perspective parts: views and folders
+		{
+			m_partsComposite = new Composite(m_composite, SWT.NONE);
+			GridDataFactory.create(m_partsComposite).grab().fill();
+		}
+		// create shortcuts
+		{
+			Composite shortcutsComposite = new Composite(m_composite, SWT.NONE);
+			GridDataFactory.create(shortcutsComposite).grabV().fillV();
+			GridLayoutFactory.create(shortcutsComposite).marginsH(1).marginsV(0).spacingH(0).spacingV(20);
+			// create view shortcuts
+			{
+				Control control = m_viewShortcutContainer.render(shortcutsComposite);
+				GridDataFactory.create(control).grabV().fillV();
+			}
+			// create perspective shortcuts
+			{
+				Control control = m_perspectiveShortcutContainer.render(shortcutsComposite);
+				GridDataFactory.create(control).grabV().fillV();
+			}
+		}
+		// create fast views
+		{
+			Control control = m_fastViewContainer.render(m_composite);
+			GridDataFactory.create(control).grabH().fillH();
+		}
+		// add editor area
+		{
+			m_editorArea.render(m_partsComposite);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Layout
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets new {@link SashLineInfo} for given {@link AbstractPartInfo}.
+	 */
+	private void setSashLine(AbstractPartInfo part,
+			Control partControl,
+			Rectangle refBounds,
+			int relation) {
+		Rectangle partBounds = new Rectangle(partControl.getBounds());
+		int sashSize = SashLineInfo.SASH_SIZE;
+		// create line
+		SashLineInfo sashLine = null;
+		if (relation == IPageLayout.LEFT) {
+			sashLine =
+					new SashLineInfo(part,
+							partBounds,
+							refBounds,
+							IPositionConstants.EAST,
+							new Rectangle(partBounds.right(), partBounds.y, sashSize, partBounds.height));
+		} else if (relation == IPageLayout.RIGHT) {
+			sashLine =
+					new SashLineInfo(part,
+							partBounds,
+							refBounds,
+							IPositionConstants.WEST,
+							new Rectangle(partBounds.x - sashSize, partBounds.y, sashSize, partBounds.height));
+		} else if (relation == IPageLayout.TOP) {
+			sashLine =
+					new SashLineInfo(part,
+							partBounds,
+							refBounds,
+							IPositionConstants.SOUTH,
+							new Rectangle(partBounds.x, partBounds.bottom(), partBounds.width, sashSize));
+		} else if (relation == IPageLayout.BOTTOM) {
+			sashLine =
+					new SashLineInfo(part,
+							partBounds,
+							refBounds,
+							IPositionConstants.NORTH,
+							new Rectangle(partBounds.x, partBounds.y - sashSize, partBounds.width, sashSize));
+		}
+		// set line
+		part.setLine(sashLine);
+	}
+
+	/**
+	 * Layouts top-level {@link AbstractPartInfo}'s using ratio/refId information.
+	 */
+	void layoutPerspectiveParts() {
+		Dimension fullSize = new Dimension(m_partsComposite.getSize().x, m_partsComposite.getSize().y);
+		// layout "editor area"
+		{
+			Control editorControl = m_editorArea.getControl();
+			editorControl.setBounds(0, 0, fullSize.width, fullSize.height);
+		}
+		// XXX
+		boolean editorAreaVisible = true;
+		try {
+			editorAreaVisible = (Boolean) getPropertyByTitle("editorAreaVisible").getValue();
+		} catch (Throwable e) {
+		}
+		// layout views/folders
+		List<AbstractPartInfo> parts = getParts();
+		// prepare last AbstractPart_Info that references "editor area"
+		AbstractPartInfo lastPart = null;
+		for (AbstractPartInfo part : parts) {
+			String refId = part.getRefId();
+			if (IPageLayout.ID_EDITOR_AREA.equals(refId)) {
+				lastPart = part;
+			}
+		}
+		// do layout AbstractPart_Info's
+		for (AbstractPartInfo part : parts) {
+			String id = part.getId();
+			int relationship = part.getRelationship();
+			float ratio = part.getRatio();
+			String refId = part.getRefId();
+			boolean isLastEditorRef = part == lastPart;
+			boolean takeFullEditorSize = isLastEditorRef && !editorAreaVisible;
+			//
+			Control partControl = m_idToControlMap.get(id);
+			Control refControl = m_idToControlMap.get(refId);
+			if (refControl != null) {
+				org.eclipse.swt.graphics.Rectangle refBounds = refControl.getBounds();
+				//
+				int sashSize = SashLineInfo.SASH_SIZE;
+				if (relationship == IPageLayout.LEFT) {
+					int width = calculatePartSize(refBounds.width, ratio, takeFullEditorSize);
+					partControl.setBounds(refBounds.x, refBounds.y, width, refBounds.height);
+					refControl.setBounds(refBounds.x + width + sashSize, refBounds.y, refBounds.width
+							- width
+							- sashSize, refBounds.height);
+				} else if (relationship == IPageLayout.RIGHT) {
+					int width = calculatePartSize(refBounds.width, 1 - ratio, takeFullEditorSize);
+					partControl.setBounds(
+							refBounds.x + refBounds.width - width,
+							refBounds.y,
+							width,
+							refBounds.height);
+					refControl.setBounds(
+							refBounds.x,
+							refBounds.y,
+							refBounds.width - width - sashSize,
+							refBounds.height);
+				} else if (relationship == IPageLayout.TOP) {
+					int height = calculatePartSize(refBounds.height, ratio, takeFullEditorSize);
+					partControl.setBounds(refBounds.x, refBounds.y, refBounds.width, height);
+					refControl.setBounds(
+							refBounds.x,
+							refBounds.y + height + sashSize,
+							refBounds.width,
+							refBounds.height - height - sashSize);
+				} else if (relationship == IPageLayout.BOTTOM) {
+					int height = calculatePartSize(refBounds.height, 1 - ratio, takeFullEditorSize);
+					partControl.setBounds(
+							refBounds.x,
+							refBounds.y + refBounds.height - height,
+							refBounds.width,
+							height);
+					refControl.setBounds(refBounds.x, refBounds.y, refBounds.width, refBounds.height
+							- height
+							- sashSize);
+				} else {
+					throw new IllegalArgumentException("Unknown relationship: " + relationship);
+				}
+				// add SashLineInfo
+				setSashLine(part, partControl, new Rectangle(refBounds), relationship);
+			}
+		}
+	}
+
+	/**
+	 * Calculate size of part using size of referenced part, ration and <code>refId</code>. If
+	 * <code>refId</code> is editor and editor marked as invisible, make editor small, but still
+	 * visible.
+	 */
+	private static int calculatePartSize(int refSize, float ratio, boolean takeFullSize) {
+		if (takeFullSize) {
+			return refSize;
+		}
+		return (int) (refSize * ratio);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link CTabFolder} configured to look as editor/view of perspective.
+	 */
+	public static CTabFolder createPartFolder(Composite parent) {
+		CTabFolder folder = new CTabFolder(parent, SWT.BORDER);
+		// configure look
+		folder.setUnselectedCloseVisible(true);
+		folder.setMaximizeVisible(true);
+		folder.setMinimizeVisible(true);
+		folder.setSimple(false);
+		// configure colors
+		TabFolderDecorator.setActiveTabColors(true, folder);
+		return folder;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void refresh_dispose() throws Exception {
+		super.refresh_dispose();
+		if (m_shell != null) {
+			m_shell.dispose();
+			m_shell = null;
+			m_composite = null;
+			m_partsComposite = null;
+			m_idToControlMap.clear();
+		}
+	}
+
+	@Override
+	protected void refresh_afterCreate() throws Exception {
+		{
+			m_idToControlMap.clear();
+			m_idToControlMap.put(m_editorArea.getId(), m_editorArea.getControl());
+			for (AbstractPartInfo part : getParts()) {
+				part.registerLayoutControls(m_idToControlMap);
+			}
+		}
+		super.refresh_afterCreate();
+	}
+
+	@Override
+	protected void refresh_fetch() throws Exception {
+		ControlInfo.refresh_fetch(this, new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				PageLayoutInfo.super.refresh_fetch();
+			}
+		});
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Interface for implementing any {@link PageLayoutInfo} command, that operates with
+	 * {@link AbstractPartInfo}'s.
+	 */
+	private interface IPageLayoutCommand<T> {
+		T execute(AstEditor editor, String layoutSource, StatementTarget target, ObjectInfo nextChild)
+				throws Exception;
+	}
+
+	/**
+	 * Creates new {@link PageLayoutAddViewInfo}.
+	 *
+	 * @param command
+	 *          the {@link IPageLayoutCommand} that performs operation using prepared parameters.
+	 * @param reference
+	 *          the top level element of {@link PageLayoutInfo} to reference.
+	 * @return the created {@link PageLayoutAddViewInfo}.
+	 */
+	public <T> T command(IPageLayoutCommand<T> command, IPageLayoutTopLevelInfo reference)
+			throws Exception {
+		AstEditor editor = getEditor();
+		// prepare "createInitialLayout" method
+		MethodDeclaration layoutMethod;
+		{
+			layoutMethod =
+					AstNodeUtils.getMethodBySignature(
+							JavaInfoUtils.getTypeDeclaration(this),
+							"createInitialLayout(org.eclipse.ui.IPageLayout)");
+			Assert.isNotNull(layoutMethod, "No createInitialLayout() method in %s.", editor.getSource());
+		}
+		// prepare target for
+		StatementTarget target;
+		AbstractPartInfo prevChild;
+		{
+			// find last AbstractPart_Info that references "reference"
+			AbstractPartInfo lastRefPart;
+			{
+				String referenceId = reference.getId();
+				lastRefPart = null;
+				for (AbstractPartInfo part : getParts()) {
+					if (part.getRefId().equals(referenceId)) {
+						lastRefPart = part;
+					}
+				}
+			}
+			// prepare target relative to last AbstractPart_Info
+			if (lastRefPart != null) {
+				prevChild = lastRefPart;
+				target = getTargetAfter(prevChild);
+			} else {
+				if (reference instanceof EditorAreaInfo) {
+					prevChild = GenericsUtils.getLastOrNull(getParts());
+					target = new StatementTarget(layoutMethod, false);
+				} else {
+					prevChild = (AbstractPartInfo) reference;
+					target = getTargetAfter(prevChild);
+				}
+			}
+		}
+		// OK, we prepared everything, execute command
+		String layoutSource = DomGenerics.parameters(layoutMethod).get(0).getName().getIdentifier();
+		ObjectInfo nextChild = GenericsUtils.getNextOrNull(getChildren(), prevChild);
+		return command.execute(editor, layoutSource, target, nextChild);
+	}
+
+	/**
+	 * @return the {@link StatementTarget} for position after given {@link AbstractPartInfo}.
+	 */
+	private static StatementTarget getTargetAfter(AbstractPartInfo part) throws Exception {
+		PageLayoutInfo page = part.getPage();
+		JavaInfo nextChild = GenericsUtils.getNextOrNull(page.getChildrenJava(), part);
+		return JavaInfoUtils.getTarget(page, nextChild);
+	}
+
+	/**
+	 * Creates new {@link PageLayoutAddViewInfo}.
+	 *
+	 * @return the created {@link PageLayoutAddViewInfo}.
+	 */
+	public PageLayoutAddViewInfo command_CREATE(final String viewId,
+			final int relationship,
+			final float ratio,
+			final IPageLayoutTopLevelInfo reference) throws Exception {
+		final PageLayoutInfo page = this;
+		return command(new IPageLayoutCommand<PageLayoutAddViewInfo>() {
+			@Override
+			public PageLayoutAddViewInfo execute(AstEditor editor,
+					String layoutSource,
+					StatementTarget target,
+					ObjectInfo nextChild) throws Exception {
+				// insert "addView" invocation
+				MethodInvocation newInvocation;
+				{
+					Statement newStatement =
+							editor.addStatement(
+									layoutSource
+									+ ".addView("
+									+ StringConverter.INSTANCE.toJavaSource(page, viewId)
+									+ ", "
+									+ getRelationSource(relationship)
+									+ ", "
+									+ FloatConverter.INSTANCE.toJavaSource(page, ratio)
+									+ ", "
+									+ reference.getIdSource()
+									+ ");",
+									target);
+					newInvocation = (MethodInvocation) ((ExpressionStatement) newStatement).getExpression();
+				}
+				// create new PageLayout_addView_Info
+				PageLayoutAddViewInfo newView = new PageLayoutAddViewInfo(page, newInvocation);
+				moveChild(newView, nextChild);
+				// add related nodes
+				{
+					newView.bindToExpression(newInvocation);
+					newView.addRelatedNodes(newInvocation);
+					addRelatedNodes(newInvocation);
+				}
+				// OK, we have new view
+				return newView;
+			}
+		},
+				reference);
+	}
+
+	/**
+	 * Moves existing {@link AbstractPartInfo}.
+	 */
+	public void command_MOVE(final AbstractPartInfo part,
+			final int relationship,
+			final float ratio,
+			final IPageLayoutTopLevelInfo reference) throws Exception {
+		final PageLayoutInfo page = this;
+		command(new IPageLayoutCommand<PageLayoutAddViewInfo>() {
+			@Override
+			public PageLayoutAddViewInfo execute(AstEditor editor,
+					String layoutSource,
+					final StatementTarget target,
+					final ObjectInfo nextChild) throws Exception {
+				// move creation Statement
+				{
+					IMoveTargetProvider targetProvider = new IMoveTargetProvider() {
+						@Override
+						public StatementTarget getTarget() throws Exception {
+							return target;
+						}
+
+						@Override
+						public void add() throws Exception {
+						}
+
+						@Override
+						public void move() throws Exception {
+							moveChild(part, nextChild);
+						}
+					};
+					JavaInfoUtils.moveProvider(part, null, page, targetProvider);
+					// ignored
+					targetProvider.add();
+				}
+				// update arguments
+				{
+					part.setRelationshipSource(getRelationSource(relationship));
+					part.setRatioSource(FloatConverter.INSTANCE.toJavaSource(page, ratio));
+					part.setRefIdSource(reference.getIdSource());
+				}
+				// no result
+				return null;
+			}
+		}, reference);
+	}
+
+	/**
+	 * Converts existing {@link FolderViewInfo} into top level {@link AbstractPartInfo}.
+	 */
+	public PageLayoutAddViewInfo command_MOVE(FolderViewInfo folderView,
+			int relationship,
+			float ratio,
+			IPageLayoutTopLevelInfo reference) throws Exception {
+		PageLayoutAddViewInfo topView =
+				command_CREATE(folderView.getId(), relationship, ratio, reference);
+		folderView.delete();
+		return topView;
+	}
+
+	/**
+	 * Creates new {@link PageLayoutCreateFolderInfo}.
+	 *
+	 * @return the created {@link PageLayoutCreateFolderInfo}.
+	 */
+	public PageLayoutCreateFolderInfo command_CREATE_folder(final int relationship,
+			final float ratio,
+			final IPageLayoutTopLevelInfo reference) throws Exception {
+		return command(new IPageLayoutCommand<PageLayoutCreateFolderInfo>() {
+			@Override
+			public PageLayoutCreateFolderInfo execute(AstEditor editor,
+					String layoutSource,
+					StatementTarget target,
+					ObjectInfo nextChild) throws Exception {
+				PageLayoutCreateFolderInfo newFolder =
+						command_CREATE_folder(relationship, ratio, reference.getIdSource(), target);
+				moveChild(newFolder, nextChild);
+				// OK, we have new "folder"
+				return newFolder;
+			}
+		},
+				reference);
+	}
+
+	/**
+	 * Creates new {@link PageLayoutCreateFolderInfo}.
+	 *
+	 * @return the created {@link PageLayoutCreateFolderInfo}.
+	 */
+	private PageLayoutCreateFolderInfo command_CREATE_folder(int relationship,
+			float ratio,
+			String referenceIdSource,
+			StatementTarget target) throws Exception {
+		// prepare unique ID
+		String folderId;
+		{
+			// prepare set of used ID's for all parts
+			final Set<String> usedIDs = Sets.newTreeSet();
+			for (AbstractPartInfo part : getParts()) {
+				usedIDs.add(part.getId());
+			}
+			// do generate unique
+			folderId = CodeUtils.generateUniqueName("folder", new Predicate<String>() {
+				@Override
+				public boolean apply(String t) {
+					return !usedIDs.contains(t);
+				}
+			});
+		}
+		// prepare CreationSupport
+		CreationSupport creationSupport;
+		{
+			String source =
+					"createFolder("
+							+ StringConverter.INSTANCE.toJavaSource(this, folderId)
+							+ ", "
+							+ getRelationSource(relationship)
+							+ ", "
+							+ FloatConverter.INSTANCE.toJavaSource(this, ratio)
+							+ ", "
+							+ referenceIdSource
+							+ ")";
+			MethodDescription description =
+					getDescription().getMethod("createFolder(java.lang.String,int,float,java.lang.String)");
+			creationSupport = new PageLayoutAddCreationSupport(this, description, source);
+		}
+		// add PageLayout_createFolder_Info
+		PageLayoutCreateFolderInfo newFolder = new PageLayoutCreateFolderInfo(this, creationSupport);
+		JavaInfoUtils.add(
+				newFolder,
+				new LocalUniqueVariableSupport(newFolder),
+				BlockStatementGenerator.INSTANCE,
+				AssociationObjects.invocationVoid(),
+				this,
+				null,
+				target);
+		// OK, we have new "folder"
+		return newFolder;
+	}
+
+	/**
+	 * @return the source for position relative to the reference part; one of {@link IPageLayout#TOP},
+	 *         {@link IPageLayout#BOTTOM}, {@link IPageLayout#LEFT} or {@link IPageLayout#RIGHT}.
+	 */
+	private static String getRelationSource(int relation) throws Exception {
+		if (ReflectionUtils.getFieldInt(IPageLayout.class, "TOP") == relation) {
+			return "org.eclipse.ui.IPageLayout.TOP";
+		}
+		if (ReflectionUtils.getFieldInt(IPageLayout.class, "BOTTOM") == relation) {
+			return "org.eclipse.ui.IPageLayout.BOTTOM";
+		}
+		if (ReflectionUtils.getFieldInt(IPageLayout.class, "LEFT") == relation) {
+			return "org.eclipse.ui.IPageLayout.LEFT";
+		}
+		if (ReflectionUtils.getFieldInt(IPageLayout.class, "RIGHT") == relation) {
+			return "org.eclipse.ui.IPageLayout.RIGHT";
+		}
+		throw new IllegalArgumentException("Unknown relationship: " + relation);
+	}
+
+	/**
+	 * Converts given {@link PageLayoutAddViewInfo} into {@link PageLayoutCreateFolderInfo}.
+	 */
+	public PageLayoutCreateFolderInfo convertIntoFolder(PageLayoutAddViewInfo view) throws Exception {
+		// move "view" into Block
+		{
+			Statement statement = AstNodeUtils.getEnclosingStatement(view.getCreationSupport().getNode());
+			getEditor().encloseInBlock(statement);
+		}
+		// add "folder" at same position as "view"
+		PageLayoutCreateFolderInfo folder;
+		{
+			StatementTarget target = JavaInfoUtils.getTarget(this, view);
+			folder =
+					command_CREATE_folder(
+							view.getRelationship(),
+							view.getRatio(),
+							view.getRefIdSource(),
+							target);
+			moveChild(folder, view);
+		}
+		// move "view" on "folder"
+		folder.command_MOVE(view, null);
+		return folder;
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/perspective/PageLayoutTopBoundsSupport.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/perspective/PageLayoutTopBoundsSupport.java
index 3773717df..a3a3fce56 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/perspective/PageLayoutTopBoundsSupport.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/perspective/PageLayoutTopBoundsSupport.java
@@ -28,72 +28,72 @@
  * @coverage rcp.model.rcp
  */
 public final class PageLayoutTopBoundsSupport extends TopBoundsSupport {
-  private final PageLayoutInfo m_page;
+	private final PageLayoutInfo m_page;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public PageLayoutTopBoundsSupport(PageLayoutInfo page) {
-    super(page);
-    m_page = page;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public PageLayoutTopBoundsSupport(PageLayoutInfo page) {
+		super(page);
+		m_page = page;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // TopBoundsSupport
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void apply() throws Exception {
-    // set size from resource properties (or default)
-    {
-      Dimension size = getResourceSize();
-      Shell shell = m_page.getShell();
-      // "size" is size of _content_ for "shell", so calculate trim
-      Rectangle trim =
-          RectangleSupport.getRectangle(shell.computeTrim(0, 0, size.width, size.height));
-      // OK, set size from trim
-      ControlSupport.setSize(shell, trim.width, trim.height);
-    }
-    // layout perspective
-    m_page.layoutPerspectiveParts();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// TopBoundsSupport
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void apply() throws Exception {
+		// set size from resource properties (or default)
+		{
+			Dimension size = getResourceSize();
+			Shell shell = m_page.getShell();
+			// "size" is size of _content_ for "shell", so calculate trim
+			Rectangle trim =
+					RectangleSupport.getRectangle(shell.computeTrim(0, 0, size.width, size.height));
+			// OK, set size from trim
+			ControlSupport.setSize(shell, trim.width, trim.height);
+		}
+		// layout perspective
+		m_page.layoutPerspectiveParts();
+	}
 
-  @Override
-  public void setSize(int width, int height) throws Exception {
-    // remember size in resource properties
-    setResourceSize(width, height);
-  }
+	@Override
+	public void setSize(int width, int height) throws Exception {
+		// remember size in resource properties
+		setResourceSize(width, height);
+	}
 
-  @Override
-  protected Dimension getDefaultSize() {
-    return new Dimension(600, 500);
-  }
+	@Override
+	protected Dimension getDefaultSize() {
+		return new Dimension(600, 500);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Show
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean show() throws Exception {
-    // layout after resize
-    final Shell shell = m_page.getShell();
-    shell.addControlListener(new ControlAdapter() {
-      @Override
-      public void controlResized(ControlEvent e) {
-        shell.setRedraw(false);
-        try {
-          m_page.layoutPerspectiveParts();
-        } finally {
-          shell.setRedraw(true);
-        }
-      }
-    });
-    // OK, show
-    CompositeTopBoundsSupport.show(m_page, shell);
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Show
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean show() throws Exception {
+		// layout after resize
+		final Shell shell = m_page.getShell();
+		shell.addControlListener(new ControlAdapter() {
+			@Override
+			public void controlResized(ControlEvent e) {
+				shell.setRedraw(false);
+				try {
+					m_page.layoutPerspectiveParts();
+				} finally {
+					shell.setRedraw(true);
+				}
+			}
+		});
+		// OK, show
+		CompositeTopBoundsSupport.show(m_page, shell);
+		return true;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/perspective/SashLineInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/perspective/SashLineInfo.java
index 1da4fdf31..eaeaca68f 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/perspective/SashLineInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/perspective/SashLineInfo.java
@@ -21,88 +21,88 @@
  * @coverage rcp.model.rcp
  */
 public final class SashLineInfo {
-  public static final int SASH_SIZE = 3;
-  private final AbstractPartInfo m_part;
-  private final Rectangle m_bounds;
-  private final Rectangle m_partBounds;
-  private final Rectangle m_refBounds;
-  private final int m_position;
+	public static final int SASH_SIZE = 3;
+	private final AbstractPartInfo m_part;
+	private final Rectangle m_bounds;
+	private final Rectangle m_partBounds;
+	private final Rectangle m_refBounds;
+	private final int m_position;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SashLineInfo(AbstractPartInfo part,
-      Rectangle partBounds,
-      Rectangle refBounds,
-      int position,
-      Rectangle bounds) {
-    m_part = part;
-    m_position = position;
-    m_bounds = bounds;
-    m_partBounds = partBounds;
-    m_refBounds = refBounds;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SashLineInfo(AbstractPartInfo part,
+			Rectangle partBounds,
+			Rectangle refBounds,
+			int position,
+			Rectangle bounds) {
+		m_part = part;
+		m_position = position;
+		m_bounds = bounds;
+		m_partBounds = partBounds;
+		m_refBounds = refBounds;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    String s_1 = m_part.getId() + "," + isHorizontal();
-    return "(" + s_1 + "," + m_bounds + "," + m_partBounds + "," + m_refBounds + ")";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		String s_1 = m_part.getId() + "," + isHorizontal();
+		return "(" + s_1 + "," + m_bounds + "," + m_partBounds + "," + m_refBounds + ")";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the host {@link AbstractPartInfo}.
-   */
-  public AbstractPartInfo getPart() {
-    return m_part;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the host {@link AbstractPartInfo}.
+	 */
+	public AbstractPartInfo getPart() {
+		return m_part;
+	}
 
-  /**
-   * @return the position relative to {@link #getPart()}, one of the
-   *         {@link IPositionConstants#NORTH}, {@link IPositionConstants#SOUTH},
-   *         {@link IPositionConstants#WEST} or {@link IPositionConstants#EAST}.
-   */
-  public int getPosition() {
-    return m_position;
-  }
+	/**
+	 * @return the position relative to {@link #getPart()}, one of the
+	 *         {@link IPositionConstants#NORTH}, {@link IPositionConstants#SOUTH},
+	 *         {@link IPositionConstants#WEST} or {@link IPositionConstants#EAST}.
+	 */
+	public int getPosition() {
+		return m_position;
+	}
 
-  /**
-   * @return <code>true</code> if this {@link AbstractPartInfo} references its "reference" in
-   *         horizontal direction, i.e. left/right.
-   */
-  public boolean isHorizontal() {
-    return m_position == IPositionConstants.WEST || m_position == IPositionConstants.EAST;
-  }
+	/**
+	 * @return <code>true</code> if this {@link AbstractPartInfo} references its "reference" in
+	 *         horizontal direction, i.e. left/right.
+	 */
+	public boolean isHorizontal() {
+		return m_position == IPositionConstants.WEST || m_position == IPositionConstants.EAST;
+	}
 
-  /**
-   * @return the bounds of this {@link SashLineInfo}.
-   */
-  public Rectangle getBounds() {
-    return m_bounds;
-  }
+	/**
+	 * @return the bounds of this {@link SashLineInfo}.
+	 */
+	public Rectangle getBounds() {
+		return m_bounds;
+	}
 
-  /**
-   * @return the bounds of {@link #getPart()}.
-   */
-  public Rectangle getPartBounds() {
-    return m_partBounds;
-  }
+	/**
+	 * @return the bounds of {@link #getPart()}.
+	 */
+	public Rectangle getPartBounds() {
+		return m_partBounds;
+	}
 
-  /**
-   * @return the bounds of "part" referenced by {@link #getPart()}.
-   */
-  public Rectangle getRefBounds() {
-    return m_refBounds;
-  }
+	/**
+	 * @return the bounds of "part" referenced by {@link #getPart()}.
+	 */
+	public Rectangle getRefBounds() {
+		return m_refBounds;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/perspective/shortcuts/AbstractShortcutContainerInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/perspective/shortcuts/AbstractShortcutContainerInfo.java
index 19a5212fd..0a704691b 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/perspective/shortcuts/AbstractShortcutContainerInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/perspective/shortcuts/AbstractShortcutContainerInfo.java
@@ -58,274 +58,274 @@
  * @coverage rcp.model.rcp
  */
 public abstract class AbstractShortcutContainerInfo extends ObjectInfo {
-  protected final PageLayoutInfo m_page;
-  private final int m_toolBarStyle;
+	protected final PageLayoutInfo m_page;
+	private final int m_toolBarStyle;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractShortcutContainerInfo(PageLayoutInfo page, int toolBarStyle) throws Exception {
-    m_page = page;
-    m_page.addChild(this);
-    m_toolBarStyle = toolBarStyle;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractShortcutContainerInfo(PageLayoutInfo page, int toolBarStyle) throws Exception {
+		m_page = page;
+		m_page.addChild(this);
+		m_toolBarStyle = toolBarStyle;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    return getPresentationText();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		return getPresentationText();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the root {@link PageLayoutInfo}.
-   */
-  public PageLayoutInfo getPage() {
-    return m_page;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the root {@link PageLayoutInfo}.
+	 */
+	public PageLayoutInfo getPage() {
+		return m_page;
+	}
 
-  /**
-   * @return the {@link AbstractShortcutInfo} children.
-   */
-  public List<AbstractShortcutInfo> getShortcuts() {
-    return getChildren(AbstractShortcutInfo.class);
-  }
+	/**
+	 * @return the {@link AbstractShortcutInfo} children.
+	 */
+	public List<AbstractShortcutInfo> getShortcuts() {
+		return getChildren(AbstractShortcutInfo.class);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final IObjectPresentation m_presentation = new DefaultObjectPresentation(this) {
-    @Override
-    public Image getIcon() throws Exception {
-      return Activator.getImage("info/perspective/container.gif");
-    }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final IObjectPresentation m_presentation = new DefaultObjectPresentation(this) {
+		@Override
+		public Image getIcon() throws Exception {
+			return Activator.getImage("info/perspective/container.gif");
+		}
 
-    @Override
-    public String getText() throws Exception {
-      return getPresentationText();
-    }
-  };
+		@Override
+		public String getText() throws Exception {
+			return getPresentationText();
+		}
+	};
 
-  @Override
-  public IObjectPresentation getPresentation() {
-    return m_presentation;
-  }
+	@Override
+	public IObjectPresentation getPresentation() {
+		return m_presentation;
+	}
 
-  /**
-   * @return the text to show in components tree.
-   */
-  protected abstract String getPresentationText();
+	/**
+	 * @return the text to show in components tree.
+	 */
+	protected abstract String getPresentationText();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Rendering
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Composite m_composite;
-  private ToolBar m_toolBar;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Rendering
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Composite m_composite;
+	private ToolBar m_toolBar;
 
-  /**
-   * @return the {@link Composite} that is used as object for this
-   *         {@link AbstractShortcutContainerInfo}.
-   */
-  final Composite getComposite() {
-    return m_composite;
-  }
+	/**
+	 * @return the {@link Composite} that is used as object for this
+	 *         {@link AbstractShortcutContainerInfo}.
+	 */
+	final Composite getComposite() {
+		return m_composite;
+	}
 
-  /**
-   * @return the {@link ToolBar} widget of this {@link AbstractShortcutContainerInfo}.
-   */
-  final ToolBar getToolBar() {
-    return m_toolBar;
-  }
+	/**
+	 * @return the {@link ToolBar} widget of this {@link AbstractShortcutContainerInfo}.
+	 */
+	final ToolBar getToolBar() {
+		return m_toolBar;
+	}
 
-  /**
-   * Renders this {@link AbstractShortcutContainerInfo}, i.e. creates its {@link Control}'s.
-   */
-  public final Control render(Composite parent) throws Exception {
-    m_composite = new Composite(parent, SWT.NONE);
-    GridLayoutFactory.create(m_composite).margins(3);
-    {
-      m_toolBar = new ToolBar(m_composite, m_toolBarStyle | SWT.FLAT | SWT.RIGHT);
-      m_composite.addPaintListener(new PaintListener() {
-        @Override
-        public void paintControl(PaintEvent e) {
-          org.eclipse.swt.graphics.Rectangle r = m_toolBar.getBounds();
-          GC gc = e.gc;
-          gc.setForeground(IColorConstants.buttonDarker);
-          gc.drawRoundRectangle(r.x - 2, r.y - 2, r.width + 4, r.height + 4, 5, 5);
-        }
-      });
-    }
-    // return to allow external layout
-    return m_composite;
-  }
+	/**
+	 * Renders this {@link AbstractShortcutContainerInfo}, i.e. creates its {@link Control}'s.
+	 */
+	public final Control render(Composite parent) throws Exception {
+		m_composite = new Composite(parent, SWT.NONE);
+		GridLayoutFactory.create(m_composite).margins(3);
+		{
+			m_toolBar = new ToolBar(m_composite, m_toolBarStyle | SWT.FLAT | SWT.RIGHT);
+			m_composite.addPaintListener(new PaintListener() {
+				@Override
+				public void paintControl(PaintEvent e) {
+					org.eclipse.swt.graphics.Rectangle r = m_toolBar.getBounds();
+					GC gc = e.gc;
+					gc.setForeground(IColorConstants.buttonDarker);
+					gc.drawRoundRectangle(r.x - 2, r.y - 2, r.width + 4, r.height + 4, 5, 5);
+				}
+			});
+		}
+		// return to allow external layout
+		return m_composite;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Bounds
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Rectangle m_bounds;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Bounds
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Rectangle m_bounds;
 
-  /**
-   * @return the bounds of {@link EditorAreaInfo} relative to {@link PageLayoutInfo}.
-   */
-  public Rectangle getBounds() {
-    return m_bounds;
-  }
+	/**
+	 * @return the bounds of {@link EditorAreaInfo} relative to {@link PageLayoutInfo}.
+	 */
+	public Rectangle getBounds() {
+		return m_bounds;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void refresh_dispose() throws Exception {
-    m_composite = null;
-    m_bounds = null;
-    super.refresh_dispose();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void refresh_dispose() throws Exception {
+		m_composite = null;
+		m_bounds = null;
+		super.refresh_dispose();
+	}
 
-  @Override
-  protected void refresh_fetch() throws Exception {
-    m_bounds = CoordinateUtils.getBounds(m_page.getComposite(), m_composite);
-    super.refresh_fetch();
-  }
+	@Override
+	protected void refresh_fetch() throws Exception {
+		m_bounds = CoordinateUtils.getBounds(m_page.getComposite(), m_composite);
+		super.refresh_fetch();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Creates new {@link AbstractShortcutInfo}.
-   *
-   * @return the created {@link AbstractShortcutInfo}.
-   */
-  protected final <T extends AbstractShortcutInfo> T command_CREATE(String id,
-      Class<T> itemClass,
-      T nextItem,
-      String shortcutsMethodName,
-      String shortcutMethodName) throws Exception {
-    AstEditor editor = m_page.getEditor();
-    // prepare target
-    StatementTarget target;
-    String layoutSource;
-    if (nextItem != null) {
-      MethodInvocation nextInvocation = (MethodInvocation) nextItem.getCreationSupport().getNode();
-      Statement nextStatement = AstNodeUtils.getEnclosingStatement(nextInvocation);
-      target = new StatementTarget(nextStatement, true);
-      layoutSource = editor.getSource(nextInvocation.getExpression());
-    } else {
-      MethodDeclaration shortcutsMethod;
-      {
-        TypeDeclaration typeDeclaration = JavaInfoUtils.getTypeDeclaration(m_page);
-        shortcutsMethod =
-            AstNodeUtils.getMethodBySignature(typeDeclaration, shortcutsMethodName
-                + "(org.eclipse.ui.IPageLayout)");
-        if (shortcutsMethod == null) {
-          shortcutsMethod =
-              editor.addMethodDeclaration(
-                  "private void " + shortcutsMethodName + "(org.eclipse.ui.IPageLayout layout)",
-                  ImmutableList.<String>of(),
-                  new BodyDeclarationTarget(typeDeclaration, false));
-          // add shortcuts method invocation into "createInitialLayout"
-          {
-            MethodDeclaration layoutMethod =
-                AstNodeUtils.getMethodBySignature(
-                    typeDeclaration,
-                    "createInitialLayout(org.eclipse.ui.IPageLayout)");
-            Assert.isNotNull(
-                layoutMethod,
-                "No createInitialLayout() method in %s.",
-                editor.getSource());
-            String layoutSource2 =
-                DomGenerics.parameters(layoutMethod).get(0).getName().getIdentifier();
-            editor.addStatement(
-                shortcutsMethodName + "(" + layoutSource2 + ");",
-                new StatementTarget(layoutMethod, true));
-          }
-        }
-      }
-      // target = shortcuts method
-      target = new StatementTarget(shortcutsMethod, false);
-      layoutSource = DomGenerics.parameters(shortcutsMethod).get(0).getName().getIdentifier();
-    }
-    // add new MethodInvocation
-    MethodInvocation newInvocation;
-    {
-      String source =
-          layoutSource
-              + "."
-              + shortcutMethodName
-              + "("
-              + StringConverter.INSTANCE.toJavaSource(m_page, id)
-              + ");";
-      ExpressionStatement newStatement = (ExpressionStatement) editor.addStatement(source, target);
-      newInvocation = (MethodInvocation) newStatement.getExpression();
-    }
-    // create shortcut model
-    T shortcut;
-    {
-      Constructor<T> constructor =
-          itemClass.getConstructor(PageLayoutInfo.class, getClass(), MethodInvocation.class);
-      shortcut = constructor.newInstance(m_page, this, newInvocation);
-      // "shortcut" was added as last child, move before "nextItem"
-      moveChild(shortcut, nextItem);
-    }
-    // add related nodes
-    {
-      shortcut.bindToExpression(newInvocation);
-      shortcut.addRelatedNodes(newInvocation);
-      m_page.addRelatedNodes(newInvocation);
-    }
-    // OK, we have ready shortcut
-    return shortcut;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Creates new {@link AbstractShortcutInfo}.
+	 *
+	 * @return the created {@link AbstractShortcutInfo}.
+	 */
+	protected final <T extends AbstractShortcutInfo> T command_CREATE(String id,
+			Class<T> itemClass,
+			T nextItem,
+			String shortcutsMethodName,
+			String shortcutMethodName) throws Exception {
+		AstEditor editor = m_page.getEditor();
+		// prepare target
+		StatementTarget target;
+		String layoutSource;
+		if (nextItem != null) {
+			MethodInvocation nextInvocation = (MethodInvocation) nextItem.getCreationSupport().getNode();
+			Statement nextStatement = AstNodeUtils.getEnclosingStatement(nextInvocation);
+			target = new StatementTarget(nextStatement, true);
+			layoutSource = editor.getSource(nextInvocation.getExpression());
+		} else {
+			MethodDeclaration shortcutsMethod;
+			{
+				TypeDeclaration typeDeclaration = JavaInfoUtils.getTypeDeclaration(m_page);
+				shortcutsMethod =
+						AstNodeUtils.getMethodBySignature(typeDeclaration, shortcutsMethodName
+								+ "(org.eclipse.ui.IPageLayout)");
+				if (shortcutsMethod == null) {
+					shortcutsMethod =
+							editor.addMethodDeclaration(
+									"private void " + shortcutsMethodName + "(org.eclipse.ui.IPageLayout layout)",
+									ImmutableList.<String>of(),
+									new BodyDeclarationTarget(typeDeclaration, false));
+					// add shortcuts method invocation into "createInitialLayout"
+					{
+						MethodDeclaration layoutMethod =
+								AstNodeUtils.getMethodBySignature(
+										typeDeclaration,
+										"createInitialLayout(org.eclipse.ui.IPageLayout)");
+						Assert.isNotNull(
+								layoutMethod,
+								"No createInitialLayout() method in %s.",
+								editor.getSource());
+						String layoutSource2 =
+								DomGenerics.parameters(layoutMethod).get(0).getName().getIdentifier();
+						editor.addStatement(
+								shortcutsMethodName + "(" + layoutSource2 + ");",
+								new StatementTarget(layoutMethod, true));
+					}
+				}
+			}
+			// target = shortcuts method
+			target = new StatementTarget(shortcutsMethod, false);
+			layoutSource = DomGenerics.parameters(shortcutsMethod).get(0).getName().getIdentifier();
+		}
+		// add new MethodInvocation
+		MethodInvocation newInvocation;
+		{
+			String source =
+					layoutSource
+					+ "."
+					+ shortcutMethodName
+					+ "("
+					+ StringConverter.INSTANCE.toJavaSource(m_page, id)
+					+ ");";
+			ExpressionStatement newStatement = (ExpressionStatement) editor.addStatement(source, target);
+			newInvocation = (MethodInvocation) newStatement.getExpression();
+		}
+		// create shortcut model
+		T shortcut;
+		{
+			Constructor<T> constructor =
+					itemClass.getConstructor(PageLayoutInfo.class, getClass(), MethodInvocation.class);
+			shortcut = constructor.newInstance(m_page, this, newInvocation);
+			// "shortcut" was added as last child, move before "nextItem"
+			moveChild(shortcut, nextItem);
+		}
+		// add related nodes
+		{
+			shortcut.bindToExpression(newInvocation);
+			shortcut.addRelatedNodes(newInvocation);
+			m_page.addRelatedNodes(newInvocation);
+		}
+		// OK, we have ready shortcut
+		return shortcut;
+	}
 
-  /**
-   * Moves existing {@link AbstractShortcutInfo}.
-   */
-  protected final <T extends AbstractShortcutInfo> void command_MOVE(T item,
-      T nextItem,
-      String shortcutsMethodName) throws Exception {
-    AstEditor editor = m_page.getEditor();
-    // prepare target
-    StatementTarget target;
-    if (nextItem != null) {
-      MethodInvocation nextInvocation = (MethodInvocation) nextItem.getCreationSupport().getNode();
-      Statement nextStatement = AstNodeUtils.getEnclosingStatement(nextInvocation);
-      target = new StatementTarget(nextStatement, true);
-    } else {
-      MethodDeclaration shortcutsMethod;
-      {
-        TypeDeclaration typeDeclaration = JavaInfoUtils.getTypeDeclaration(m_page);
-        shortcutsMethod =
-            AstNodeUtils.getMethodBySignature(typeDeclaration, shortcutsMethodName
-                + "(org.eclipse.ui.IPageLayout)");
-      }
-      // target = shortcuts method
-      target = new StatementTarget(shortcutsMethod, false);
-    }
-    // move Statement
-    {
-      Statement statement = AstNodeUtils.getEnclosingStatement(item.getCreationSupport().getNode());
-      editor.moveStatement(statement, target);
-    }
-    // move model
-    moveChild(item, nextItem);
-  }
+	/**
+	 * Moves existing {@link AbstractShortcutInfo}.
+	 */
+	protected final <T extends AbstractShortcutInfo> void command_MOVE(T item,
+			T nextItem,
+			String shortcutsMethodName) throws Exception {
+		AstEditor editor = m_page.getEditor();
+		// prepare target
+		StatementTarget target;
+		if (nextItem != null) {
+			MethodInvocation nextInvocation = (MethodInvocation) nextItem.getCreationSupport().getNode();
+			Statement nextStatement = AstNodeUtils.getEnclosingStatement(nextInvocation);
+			target = new StatementTarget(nextStatement, true);
+		} else {
+			MethodDeclaration shortcutsMethod;
+			{
+				TypeDeclaration typeDeclaration = JavaInfoUtils.getTypeDeclaration(m_page);
+				shortcutsMethod =
+						AstNodeUtils.getMethodBySignature(typeDeclaration, shortcutsMethodName
+								+ "(org.eclipse.ui.IPageLayout)");
+			}
+			// target = shortcuts method
+			target = new StatementTarget(shortcutsMethod, false);
+		}
+		// move Statement
+		{
+			Statement statement = AstNodeUtils.getEnclosingStatement(item.getCreationSupport().getNode());
+			editor.moveStatement(statement, target);
+		}
+		// move model
+		moveChild(item, nextItem);
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/perspective/shortcuts/AbstractShortcutInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/perspective/shortcuts/AbstractShortcutInfo.java
index e5c4555d0..880dfad0d 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/perspective/shortcuts/AbstractShortcutInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/perspective/shortcuts/AbstractShortcutInfo.java
@@ -45,116 +45,116 @@
  * @coverage rcp.model.rcp
  */
 public abstract class AbstractShortcutInfo extends AbstractComponentInfo implements IRenderableInfo {
-  private final AbstractShortcutContainerInfo m_container;
+	private final AbstractShortcutContainerInfo m_container;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractShortcutInfo(PageLayoutInfo page,
-      AbstractShortcutContainerInfo container,
-      MethodInvocation invocation) throws Exception {
-    super(page.getEditor(), new ComponentDescription(null), new PageLayoutAddCreationSupport(page,
-        invocation));
-    m_container = container;
-    ObjectInfoUtils.setNewId(this);
-    getDescription().setToolkit(page.getDescription().getToolkit());
-    setAssociation(new InvocationVoidAssociation());
-    setVariableSupport(new EmptyPureVariableSupport(this));
-    container.addChild(this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractShortcutInfo(PageLayoutInfo page,
+			AbstractShortcutContainerInfo container,
+			MethodInvocation invocation) throws Exception {
+		super(page.getEditor(), new ComponentDescription(null), new PageLayoutAddCreationSupport(page,
+				invocation));
+		m_container = container;
+		ObjectInfoUtils.setNewId(this);
+		getDescription().setToolkit(page.getDescription().getToolkit());
+		setAssociation(new InvocationVoidAssociation());
+		setVariableSupport(new EmptyPureVariableSupport(this));
+		container.addChild(this);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the <code>ID</code> of this {@link AbstractPartInfo}.
-   */
-  public final String getId() {
-    return (String) getInvocationArgument(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the <code>ID</code> of this {@link AbstractPartInfo}.
+	 */
+	public final String getId() {
+		return (String) getInvocationArgument(0);
+	}
 
-  /**
-   * @return the underlying {@link MethodInvocation}.
-   */
-  private MethodInvocation getInvocation() {
-    return (MethodInvocation) getCreationSupport().getNode();
-  }
+	/**
+	 * @return the underlying {@link MethodInvocation}.
+	 */
+	private MethodInvocation getInvocation() {
+		return (MethodInvocation) getCreationSupport().getNode();
+	}
 
-  /**
-   * @return the value of argument of underlying {@link MethodInvocation}.
-   */
-  private Object getInvocationArgument(int index) {
-    MethodInvocation invocation = getInvocation();
-    Expression argument = DomGenerics.arguments(invocation).get(index);
-    return JavaInfoEvaluationHelper.getValue(argument);
-  }
+	/**
+	 * @return the value of argument of underlying {@link MethodInvocation}.
+	 */
+	private Object getInvocationArgument(int index) {
+		MethodInvocation invocation = getInvocation();
+		Expression argument = DomGenerics.arguments(invocation).get(index);
+		return JavaInfoEvaluationHelper.getValue(argument);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final IObjectPresentation m_presentation = new DefaultJavaInfoPresentation(this) {
-    @Override
-    public Image getIcon() throws Exception {
-      return getPresentationIcon();
-    }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final IObjectPresentation m_presentation = new DefaultJavaInfoPresentation(this) {
+		@Override
+		public Image getIcon() throws Exception {
+			return getPresentationIcon();
+		}
 
-    @Override
-    public String getText() throws Exception {
-      return getPresentationText();
-    }
-  };
+		@Override
+		public String getText() throws Exception {
+			return getPresentationText();
+		}
+	};
 
-  @Override
-  public IObjectPresentation getPresentation() {
-    return m_presentation;
-  }
+	@Override
+	public IObjectPresentation getPresentation() {
+		return m_presentation;
+	}
 
-  /**
-   * @return the icon to show in component tree.
-   */
-  protected abstract Image getPresentationIcon() throws Exception;
+	/**
+	 * @return the icon to show in component tree.
+	 */
+	protected abstract Image getPresentationIcon() throws Exception;
 
-  /**
-   * @return the text to show in component tree.
-   */
-  protected abstract String getPresentationText() throws Exception;
+	/**
+	 * @return the text to show in component tree.
+	 */
+	protected abstract String getPresentationText() throws Exception;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Rendering
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private ToolItem m_item;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Rendering
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private ToolItem m_item;
 
-  @Override
-  public Object render() throws Exception {
-    ToolBar toolBar = m_container.getToolBar();
-    m_item = new ToolItem(toolBar, SWT.NONE);
-    m_item.setImage(getPresentationIcon());
-    m_item.setToolTipText(getPresentationText());
-    return m_item;
-  }
+	@Override
+	public Object render() throws Exception {
+		ToolBar toolBar = m_container.getToolBar();
+		m_item = new ToolItem(toolBar, SWT.NONE);
+		m_item.setImage(getPresentationIcon());
+		m_item.setToolTipText(getPresentationText());
+		return m_item;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void refresh_fetch() throws Exception {
-    {
-      Composite composite = m_container.getComposite();
-      Rectangle toolBarBounds = CoordinateUtils.getBounds(composite, m_container.getToolBar());
-      Rectangle itemBounds = RectangleSupport.getRectangle(m_item.getBounds());
-      itemBounds.performTranslate(toolBarBounds.x, toolBarBounds.y);
-      setModelBounds(itemBounds);
-    }
-    super.refresh_fetch();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void refresh_fetch() throws Exception {
+		{
+			Composite composite = m_container.getComposite();
+			Rectangle toolBarBounds = CoordinateUtils.getBounds(composite, m_container.getToolBar());
+			Rectangle itemBounds = RectangleSupport.getRectangle(m_item.getBounds());
+			itemBounds.performTranslate(toolBarBounds.x, toolBarBounds.y);
+			setModelBounds(itemBounds);
+		}
+		super.refresh_fetch();
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/perspective/shortcuts/FastViewContainerInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/perspective/shortcuts/FastViewContainerInfo.java
index a704b9bdf..3e074ef77 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/perspective/shortcuts/FastViewContainerInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/perspective/shortcuts/FastViewContainerInfo.java
@@ -22,43 +22,43 @@
  * @coverage rcp.model.rcp
  */
 public final class FastViewContainerInfo extends AbstractShortcutContainerInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FastViewContainerInfo(PageLayoutInfo page) throws Exception {
-    super(page, SWT.HORIZONTAL);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FastViewContainerInfo(PageLayoutInfo page) throws Exception {
+		super(page, SWT.HORIZONTAL);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getPresentationText() {
-    return "(fast views)";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getPresentationText() {
+		return "(fast views)";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Creates new {@link FastViewInfo}.
-   *
-   * @return the created {@link FastViewInfo}.
-   */
-  public FastViewInfo command_CREATE(String viewId, FastViewInfo nextItem) throws Exception {
-    return command_CREATE(viewId, FastViewInfo.class, nextItem, "addFastViews", "addFastView");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Creates new {@link FastViewInfo}.
+	 *
+	 * @return the created {@link FastViewInfo}.
+	 */
+	public FastViewInfo command_CREATE(String viewId, FastViewInfo nextItem) throws Exception {
+		return command_CREATE(viewId, FastViewInfo.class, nextItem, "addFastViews", "addFastView");
+	}
 
-  /**
-   * Moves existing {@link FastViewInfo}.
-   */
-  public void command_MOVE(FastViewInfo item, FastViewInfo nextItem) throws Exception {
-    command_MOVE(item, nextItem, "addFastViews");
-  }
+	/**
+	 * Moves existing {@link FastViewInfo}.
+	 */
+	public void command_MOVE(FastViewInfo item, FastViewInfo nextItem) throws Exception {
+		command_MOVE(item, nextItem, "addFastViews");
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/perspective/shortcuts/FastViewInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/perspective/shortcuts/FastViewInfo.java
index 3c7d905a1..8232b5481 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/perspective/shortcuts/FastViewInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/perspective/shortcuts/FastViewInfo.java
@@ -25,36 +25,36 @@
  * @coverage rcp.model.rcp
  */
 public final class FastViewInfo extends AbstractShortcutInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FastViewInfo(PageLayoutInfo page,
-      FastViewContainerInfo container,
-      MethodInvocation invocation) throws Exception {
-    super(page, container, invocation);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FastViewInfo(PageLayoutInfo page,
+			FastViewContainerInfo container,
+			MethodInvocation invocation) throws Exception {
+		super(page, container, invocation);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Rendering
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Image getPresentationIcon() throws Exception {
-    return getViewInfo().getIcon();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Rendering
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Image getPresentationIcon() throws Exception {
+		return getViewInfo().getIcon();
+	}
 
-  @Override
-  protected String getPresentationText() throws Exception {
-    return "\"" + getViewInfo().getName() + "\" - " + getId();
-  }
+	@Override
+	protected String getPresentationText() throws Exception {
+		return "\"" + getViewInfo().getName() + "\" - " + getId();
+	}
 
-  /**
-   * @return the {@link ViewInfo} for this view.
-   */
-  private ViewInfo getViewInfo() {
-    return PdeUtils.getViewInfoDefault(getId());
-  }
+	/**
+	 * @return the {@link ViewInfo} for this view.
+	 */
+	private ViewInfo getViewInfo() {
+		return PdeUtils.getViewInfoDefault(getId());
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/perspective/shortcuts/PerspectiveShortcutContainerInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/perspective/shortcuts/PerspectiveShortcutContainerInfo.java
index a10a37139..f12bc005e 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/perspective/shortcuts/PerspectiveShortcutContainerInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/perspective/shortcuts/PerspectiveShortcutContainerInfo.java
@@ -22,50 +22,50 @@
  * @coverage rcp.model.rcp
  */
 public final class PerspectiveShortcutContainerInfo extends AbstractShortcutContainerInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public PerspectiveShortcutContainerInfo(PageLayoutInfo page) throws Exception {
-    super(page, SWT.VERTICAL);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public PerspectiveShortcutContainerInfo(PageLayoutInfo page) throws Exception {
+		super(page, SWT.VERTICAL);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getPresentationText() {
-    return "(perspective shortcuts)";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getPresentationText() {
+		return "(perspective shortcuts)";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Creates new {@link PerspectiveShortcutInfo}.
-   *
-   * @return the created {@link PerspectiveShortcutInfo}.
-   */
-  public PerspectiveShortcutInfo command_CREATE(String perspectiveId,
-      PerspectiveShortcutInfo nextItem) throws Exception {
-    return command_CREATE(
-        perspectiveId,
-        PerspectiveShortcutInfo.class,
-        nextItem,
-        "addPerspectiveShortcuts",
-        "addPerspectiveShortcut");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Creates new {@link PerspectiveShortcutInfo}.
+	 *
+	 * @return the created {@link PerspectiveShortcutInfo}.
+	 */
+	public PerspectiveShortcutInfo command_CREATE(String perspectiveId,
+			PerspectiveShortcutInfo nextItem) throws Exception {
+		return command_CREATE(
+				perspectiveId,
+				PerspectiveShortcutInfo.class,
+				nextItem,
+				"addPerspectiveShortcuts",
+				"addPerspectiveShortcut");
+	}
 
-  /**
-   * Moves existing {@link PerspectiveShortcutInfo}.
-   */
-  public void command_MOVE(PerspectiveShortcutInfo item, PerspectiveShortcutInfo nextItem)
-      throws Exception {
-    command_MOVE(item, nextItem, "addPerspectiveShortcuts");
-  }
+	/**
+	 * Moves existing {@link PerspectiveShortcutInfo}.
+	 */
+	public void command_MOVE(PerspectiveShortcutInfo item, PerspectiveShortcutInfo nextItem)
+			throws Exception {
+		command_MOVE(item, nextItem, "addPerspectiveShortcuts");
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/perspective/shortcuts/PerspectiveShortcutInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/perspective/shortcuts/PerspectiveShortcutInfo.java
index 4ad1ff2a0..ecd756e43 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/perspective/shortcuts/PerspectiveShortcutInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/perspective/shortcuts/PerspectiveShortcutInfo.java
@@ -25,36 +25,36 @@
  * @coverage rcp.model.rcp
  */
 public final class PerspectiveShortcutInfo extends AbstractShortcutInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public PerspectiveShortcutInfo(PageLayoutInfo page,
-      PerspectiveShortcutContainerInfo container,
-      MethodInvocation invocation) throws Exception {
-    super(page, container, invocation);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public PerspectiveShortcutInfo(PageLayoutInfo page,
+			PerspectiveShortcutContainerInfo container,
+			MethodInvocation invocation) throws Exception {
+		super(page, container, invocation);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Rendering
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Image getPresentationIcon() throws Exception {
-    return getPerspectiveInfo().getIcon();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Rendering
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Image getPresentationIcon() throws Exception {
+		return getPerspectiveInfo().getIcon();
+	}
 
-  @Override
-  protected String getPresentationText() throws Exception {
-    return "\"" + getPerspectiveInfo().getName() + "\" - " + getId();
-  }
+	@Override
+	protected String getPresentationText() throws Exception {
+		return "\"" + getPerspectiveInfo().getName() + "\" - " + getId();
+	}
 
-  /**
-   * @return the {@link PerspectiveInfo} for this perspective.
-   */
-  private PerspectiveInfo getPerspectiveInfo() {
-    return PdeUtils.getPerspectiveInfoDefault(getId());
-  }
+	/**
+	 * @return the {@link PerspectiveInfo} for this perspective.
+	 */
+	private PerspectiveInfo getPerspectiveInfo() {
+		return PdeUtils.getPerspectiveInfoDefault(getId());
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/perspective/shortcuts/ViewShortcutContainerInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/perspective/shortcuts/ViewShortcutContainerInfo.java
index d516235c0..c61b51886 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/perspective/shortcuts/ViewShortcutContainerInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/perspective/shortcuts/ViewShortcutContainerInfo.java
@@ -22,48 +22,48 @@
  * @coverage rcp.model.rcp
  */
 public final class ViewShortcutContainerInfo extends AbstractShortcutContainerInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ViewShortcutContainerInfo(PageLayoutInfo page) throws Exception {
-    super(page, SWT.VERTICAL);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ViewShortcutContainerInfo(PageLayoutInfo page) throws Exception {
+		super(page, SWT.VERTICAL);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getPresentationText() {
-    return "(view shortcuts)";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getPresentationText() {
+		return "(view shortcuts)";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Creates new {@link ViewShortcutInfo}.
-   *
-   * @return the created {@link ViewShortcutInfo}.
-   */
-  public ViewShortcutInfo command_CREATE(String viewId, ViewShortcutInfo nextItem) throws Exception {
-    return command_CREATE(
-        viewId,
-        ViewShortcutInfo.class,
-        nextItem,
-        "addViewShortcuts",
-        "addShowViewShortcut");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Creates new {@link ViewShortcutInfo}.
+	 *
+	 * @return the created {@link ViewShortcutInfo}.
+	 */
+	public ViewShortcutInfo command_CREATE(String viewId, ViewShortcutInfo nextItem) throws Exception {
+		return command_CREATE(
+				viewId,
+				ViewShortcutInfo.class,
+				nextItem,
+				"addViewShortcuts",
+				"addShowViewShortcut");
+	}
 
-  /**
-   * Moves existing {@link ViewShortcutInfo}.
-   */
-  public void command_MOVE(ViewShortcutInfo item, ViewShortcutInfo nextItem) throws Exception {
-    command_MOVE(item, nextItem, "addViewShortcuts");
-  }
+	/**
+	 * Moves existing {@link ViewShortcutInfo}.
+	 */
+	public void command_MOVE(ViewShortcutInfo item, ViewShortcutInfo nextItem) throws Exception {
+		command_MOVE(item, nextItem, "addViewShortcuts");
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/perspective/shortcuts/ViewShortcutInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/perspective/shortcuts/ViewShortcutInfo.java
index cb4430b28..35a58c711 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/perspective/shortcuts/ViewShortcutInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/rcp/perspective/shortcuts/ViewShortcutInfo.java
@@ -25,36 +25,36 @@
  * @coverage rcp.model.rcp
  */
 public final class ViewShortcutInfo extends AbstractShortcutInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ViewShortcutInfo(PageLayoutInfo page,
-      ViewShortcutContainerInfo container,
-      MethodInvocation invocation) throws Exception {
-    super(page, container, invocation);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ViewShortcutInfo(PageLayoutInfo page,
+			ViewShortcutContainerInfo container,
+			MethodInvocation invocation) throws Exception {
+		super(page, container, invocation);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Rendering
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Image getPresentationIcon() throws Exception {
-    return getViewInfo().getIcon();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Rendering
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Image getPresentationIcon() throws Exception {
+		return getViewInfo().getIcon();
+	}
 
-  @Override
-  protected String getPresentationText() throws Exception {
-    return "\"" + getViewInfo().getName() + "\" - " + getId();
-  }
+	@Override
+	protected String getPresentationText() throws Exception {
+		return "\"" + getViewInfo().getName() + "\" - " + getId();
+	}
 
-  /**
-   * @return the {@link ViewInfo} for this view.
-   */
-  private ViewInfo getViewInfo() {
-    return PdeUtils.getViewInfoDefault(getId());
-  }
+	/**
+	 * @return the {@link ViewInfo} for this view.
+	 */
+	private ViewInfo getViewInfo() {
+		return PdeUtils.getViewInfoDefault(getId());
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/util/ActivatorGetImagesByteCodeProcessor.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/util/ActivatorGetImagesByteCodeProcessor.java
index 8b03a2723..d5af4fe24 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/util/ActivatorGetImagesByteCodeProcessor.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/util/ActivatorGetImagesByteCodeProcessor.java
@@ -35,123 +35,123 @@
  * @coverage rcp.util
  */
 public final class ActivatorGetImagesByteCodeProcessor implements IByteCodeProcessor {
-  private String m_activatorClassName;
-  private String m_activatorProjectPath;
+	private String m_activatorClassName;
+	private String m_activatorProjectPath;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IByteCodeProcessor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void initialize(ProjectClassLoader classLoader) {
-    createInternalImageManager(classLoader);
-    prepareActivatorInformation(classLoader.getJavaProject().getProject());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IByteCodeProcessor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void initialize(ProjectClassLoader classLoader) {
+		createInternalImageManager(classLoader);
+		prepareActivatorInformation(classLoader.getJavaProject().getProject());
+	}
 
-  @Override
-  public byte[] process(String className, byte[] bytes) {
-    if (className.equals(m_activatorClassName)) {
-      return transformActivatorClass(bytes);
-    }
-    return bytes;
-  }
+	@Override
+	public byte[] process(String className, byte[] bytes) {
+		if (className.equals(m_activatorClassName)) {
+			return transformActivatorClass(bytes);
+		}
+		return bytes;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Handle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void createInternalImageManager(ProjectClassLoader classLoader) {
-    try {
-      // prepare InternalImageManager bytes
-      ClassLoader localClassLoader = getClass().getClassLoader();
-      InputStream stream =
-          localClassLoader.getResourceAsStream("org/eclipse/wb/internal/rcp/model/util/InternalImageManager.class");
-      byte[] bytes = IOUtils.toByteArray(stream);
-      stream.close();
-      // inject InternalImageManager to project class loader
-      ReflectionUtils.invokeMethod(
-          classLoader,
-          "defineClass(java.lang.String,byte[],int,int)",
-          "org.eclipse.wb.internal.rcp.model.util.InternalImageManager",
-          bytes,
-          0,
-          bytes.length);
-    } catch (Throwable e) {
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Handle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void createInternalImageManager(ProjectClassLoader classLoader) {
+		try {
+			// prepare InternalImageManager bytes
+			ClassLoader localClassLoader = getClass().getClassLoader();
+			InputStream stream =
+					localClassLoader.getResourceAsStream("org/eclipse/wb/internal/rcp/model/util/InternalImageManager.class");
+			byte[] bytes = IOUtils.toByteArray(stream);
+			stream.close();
+			// inject InternalImageManager to project class loader
+			ReflectionUtils.invokeMethod(
+					classLoader,
+					"defineClass(java.lang.String,byte[],int,int)",
+					"org.eclipse.wb.internal.rcp.model.util.InternalImageManager",
+					bytes,
+					0,
+					bytes.length);
+		} catch (Throwable e) {
+		}
+	}
 
-  private void prepareActivatorInformation(IProject project) {
-    try {
-      m_activatorClassName = WorkspacePluginInfo.getBundleActivator(project);
-      m_activatorProjectPath = project.getLocation().toPortableString();
-    } catch (Throwable e) {
-    }
-  }
+	private void prepareActivatorInformation(IProject project) {
+		try {
+			m_activatorClassName = WorkspacePluginInfo.getBundleActivator(project);
+			m_activatorProjectPath = project.getLocation().toPortableString();
+		} catch (Throwable e) {
+		}
+	}
 
-  private byte[] transformActivatorClass(byte[] bytes) {
-    final boolean[] apply = {false};
-    ClassReader classReader = new ClassReader(bytes);
-    ToBytesClassAdapter codeRewriter = new ToBytesClassAdapter(ClassWriter.COMPUTE_FRAMES) {
-      @Override
-      public MethodVisitor visitMethod(int access,
-          String name,
-          String desc,
-          String signature,
-          String[] exceptions) {
-        final MethodVisitor mv = cv.visitMethod(access, name, desc, signature, exceptions);
-        final int pathParameterIndex = (access & ACC_STATIC) != 0 ? 0 : 1;
-        // transform Activator.getImageDescriptor()
-        if (name.equals("getImageDescriptor")
-            && desc.equals("(Ljava/lang/String;)Lorg/eclipse/jface/resource/ImageDescriptor;")) {
-          apply[0] = true;
-          return new MethodVisitor(Opcodes.ASM9, mv) {
-            @Override
-            public void visitCode() {
-              mv.visitLdcInsn(m_activatorProjectPath);
-              mv.visitVarInsn(ALOAD, pathParameterIndex);
-              mv.visitMethodInsn(
-                  INVOKESTATIC,
-                  "org/eclipse/wb/internal/rcp/model/util/InternalImageManager",
-                  "getImageDescriptor",
-                  "(Ljava/lang/String;Ljava/lang/String;)Lorg/eclipse/jface/resource/ImageDescriptor;");
-              mv.visitInsn(ARETURN);
-            }
+	private byte[] transformActivatorClass(byte[] bytes) {
+		final boolean[] apply = {false};
+		ClassReader classReader = new ClassReader(bytes);
+		ToBytesClassAdapter codeRewriter = new ToBytesClassAdapter(ClassWriter.COMPUTE_FRAMES) {
+			@Override
+			public MethodVisitor visitMethod(int access,
+					String name,
+					String desc,
+					String signature,
+					String[] exceptions) {
+				final MethodVisitor mv = cv.visitMethod(access, name, desc, signature, exceptions);
+				final int pathParameterIndex = (access & ACC_STATIC) != 0 ? 0 : 1;
+				// transform Activator.getImageDescriptor()
+				if (name.equals("getImageDescriptor")
+						&& desc.equals("(Ljava/lang/String;)Lorg/eclipse/jface/resource/ImageDescriptor;")) {
+					apply[0] = true;
+					return new MethodVisitor(Opcodes.ASM9, mv) {
+						@Override
+						public void visitCode() {
+							mv.visitLdcInsn(m_activatorProjectPath);
+							mv.visitVarInsn(ALOAD, pathParameterIndex);
+							mv.visitMethodInsn(
+									INVOKESTATIC,
+									"org/eclipse/wb/internal/rcp/model/util/InternalImageManager",
+									"getImageDescriptor",
+									"(Ljava/lang/String;Ljava/lang/String;)Lorg/eclipse/jface/resource/ImageDescriptor;");
+							mv.visitInsn(ARETURN);
+						}
 
-            @Override
-            public void visitMaxs(int maxStack, int maxLocals) {
-              mv.visitMaxs(maxStack, maxLocals);
-            }
-          };
-        }
-        // transform Activator.getImage()
-        if (name.equals("getImage")
-            && desc.equals("(Ljava/lang/String;)Lorg/eclipse/swt/graphics/Image;")) {
-          apply[0] = true;
-          return new MethodVisitor(Opcodes.ASM9, mv) {
-            @Override
-            public void visitCode() {
-              mv.visitLdcInsn(m_activatorProjectPath);
-              mv.visitVarInsn(ALOAD, pathParameterIndex);
-              mv.visitMethodInsn(
-                  INVOKESTATIC,
-                  "org/eclipse/wb/internal/rcp/model/util/InternalImageManager",
-                  "getImage",
-                  "(Ljava/lang/String;Ljava/lang/String;)Lorg/eclipse/swt/graphics/Image;");
-              mv.visitInsn(ARETURN);
-            }
+						@Override
+						public void visitMaxs(int maxStack, int maxLocals) {
+							mv.visitMaxs(maxStack, maxLocals);
+						}
+					};
+				}
+				// transform Activator.getImage()
+				if (name.equals("getImage")
+						&& desc.equals("(Ljava/lang/String;)Lorg/eclipse/swt/graphics/Image;")) {
+					apply[0] = true;
+					return new MethodVisitor(Opcodes.ASM9, mv) {
+						@Override
+						public void visitCode() {
+							mv.visitLdcInsn(m_activatorProjectPath);
+							mv.visitVarInsn(ALOAD, pathParameterIndex);
+							mv.visitMethodInsn(
+									INVOKESTATIC,
+									"org/eclipse/wb/internal/rcp/model/util/InternalImageManager",
+									"getImage",
+									"(Ljava/lang/String;Ljava/lang/String;)Lorg/eclipse/swt/graphics/Image;");
+							mv.visitInsn(ARETURN);
+						}
 
-            @Override
-            public void visitMaxs(int maxStack, int maxLocals) {
-              mv.visitMaxs(maxStack, maxLocals);
-            }
-          };
-        }
-        return mv;
-      }
-    };
-    classReader.accept(codeRewriter, 0);
-    return apply[0] ? codeRewriter.toByteArray() : bytes;
-  }
+						@Override
+						public void visitMaxs(int maxStack, int maxLocals) {
+							mv.visitMaxs(maxStack, maxLocals);
+						}
+					};
+				}
+				return mv;
+			}
+		};
+		classReader.accept(codeRewriter, 0);
+		return apply[0] ? codeRewriter.toByteArray() : bytes;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/util/ActivatorGetImagesDisposer.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/util/ActivatorGetImagesDisposer.java
index b2a3a8773..f899c12f8 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/util/ActivatorGetImagesDisposer.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/util/ActivatorGetImagesDisposer.java
@@ -26,45 +26,45 @@
  * @coverage rcp.util
  */
 public final class ActivatorGetImagesDisposer implements IRootProcessor {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IRootProcessor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void process(JavaInfo root, List<JavaInfo> components) throws Exception {
-    processRoot(root);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IRootProcessor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void process(JavaInfo root, List<JavaInfo> components) throws Exception {
+		processRoot(root);
+	}
 
-  private void processRoot(final JavaInfo root) {
-    root.addBroadcastListener(new ObjectEventListener() {
-      @Override
-      public void refreshDispose() throws Exception {
-        disposeResources(root);
-      }
+	private void processRoot(final JavaInfo root) {
+		root.addBroadcastListener(new ObjectEventListener() {
+			@Override
+			public void refreshDispose() throws Exception {
+				disposeResources(root);
+			}
 
-      @Override
-      public void dispose() throws Exception {
-        disposeResources(root);
-      }
-    });
-  }
+			@Override
+			public void dispose() throws Exception {
+				disposeResources(root);
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Dispose
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Disposes all images, loaded from {@code InternalImageManager}.
-   */
-  private static void disposeResources(JavaInfo javaInfo) {
-    try {
-      ClassLoader classLoader = JavaInfoUtils.getClassLoader(javaInfo);
-      Class<?> internalImageManager =
-          classLoader.loadClass("org.eclipse.wb.internal.rcp.model.util.InternalImageManager");
-      ReflectionUtils.invokeMethod(internalImageManager, "dispose()");
-    } catch (Throwable e) {
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Dispose
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Disposes all images, loaded from {@code InternalImageManager}.
+	 */
+	private static void disposeResources(JavaInfo javaInfo) {
+		try {
+			ClassLoader classLoader = JavaInfoUtils.getClassLoader(javaInfo);
+			Class<?> internalImageManager =
+					classLoader.loadClass("org.eclipse.wb.internal.rcp.model.util.InternalImageManager");
+			ReflectionUtils.invokeMethod(internalImageManager, "dispose()");
+		} catch (Throwable e) {
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/util/InternalImageManager.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/util/InternalImageManager.java
index bae2d60fd..fa79d5558 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/util/InternalImageManager.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/util/InternalImageManager.java
@@ -25,115 +25,115 @@
  * @coverage rcp.util
  */
 public final class InternalImageManager {
-  private static final Map<String, Image> IMAGES = new HashMap<>();
-  private static final Map<String, ImageDescriptor> DESCRIPTORS = new HashMap<>();
+	private static final Map<String, Image> IMAGES = new HashMap<>();
+	private static final Map<String, ImageDescriptor> DESCRIPTORS = new HashMap<>();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return {@link ImageDescriptor} the image descriptor stored in the file at the specified path.
-   */
-  public static ImageDescriptor getImageDescriptor(String projectPath, String imagePath) {
-    // prepare descriptor
-    imagePath = configurePath(imagePath);
-    ImageDescriptor descriptor = DESCRIPTORS.get(imagePath);
-    // check create descriptor
-    if (descriptor == null) {
-      // prepare file path
-      String fullDescriptorPath = findFile(projectPath, imagePath);
-      if (fullDescriptorPath != null) {
-        // create descriptor
-        descriptor = ImageDescriptor.createFromFile(null, fullDescriptorPath);
-        DESCRIPTORS.put(imagePath, descriptor);
-      }
-    }
-    return descriptor;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return {@link ImageDescriptor} the image descriptor stored in the file at the specified path.
+	 */
+	public static ImageDescriptor getImageDescriptor(String projectPath, String imagePath) {
+		// prepare descriptor
+		imagePath = configurePath(imagePath);
+		ImageDescriptor descriptor = DESCRIPTORS.get(imagePath);
+		// check create descriptor
+		if (descriptor == null) {
+			// prepare file path
+			String fullDescriptorPath = findFile(projectPath, imagePath);
+			if (fullDescriptorPath != null) {
+				// create descriptor
+				descriptor = ImageDescriptor.createFromFile(null, fullDescriptorPath);
+				DESCRIPTORS.put(imagePath, descriptor);
+			}
+		}
+		return descriptor;
+	}
 
-  /**
-   * @return {@link Image} the image stored in the file at the specified path.
-   */
-  public static Image getImage(String projectPath, String imagePath) {
-    // prepare image
-    imagePath = configurePath(imagePath);
-    Image image = IMAGES.get(imagePath);
-    // check create image
-    if (image == null) {
-      // prepare file path
-      String fullImagePath = findFile(projectPath, imagePath);
-      if (fullImagePath != null) {
-        // create image
-        try {
-          image = new Image(null, fullImagePath);
-        } catch (Throwable e) {
-          return null;
-        }
-        IMAGES.put(imagePath, image);
-      }
-    }
-    return image;
-  }
+	/**
+	 * @return {@link Image} the image stored in the file at the specified path.
+	 */
+	public static Image getImage(String projectPath, String imagePath) {
+		// prepare image
+		imagePath = configurePath(imagePath);
+		Image image = IMAGES.get(imagePath);
+		// check create image
+		if (image == null) {
+			// prepare file path
+			String fullImagePath = findFile(projectPath, imagePath);
+			if (fullImagePath != null) {
+				// create image
+				try {
+					image = new Image(null, fullImagePath);
+				} catch (Throwable e) {
+					return null;
+				}
+				IMAGES.put(imagePath, image);
+			}
+		}
+		return image;
+	}
 
-  /**
-   * Dispose of cached objects and their underlying OS resources.
-   */
-  public static void dispose() {
-    for (Image image : IMAGES.values()) {
-      try {
-        if (!image.isDisposed()) {
-          image.dispose();
-        }
-      } catch (Throwable e) {
-      }
-    }
-    IMAGES.clear();
-    DESCRIPTORS.clear();
-  }
+	/**
+	 * Dispose of cached objects and their underlying OS resources.
+	 */
+	public static void dispose() {
+		for (Image image : IMAGES.values()) {
+			try {
+				if (!image.isDisposed()) {
+					image.dispose();
+				}
+			} catch (Throwable e) {
+			}
+		}
+		IMAGES.clear();
+		DESCRIPTORS.clear();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the configured path.
-   */
-  private static String configurePath(String path) {
-    // check wrong path
-    if (path == null || path.length() == 0) {
-      return "";
-    }
-    // replace slashes
-    path = path.replace('\\', '/');
-    if (path.charAt(0) == '/') {
-      path = path.substring(1);
-    }
-    return path;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the configured path.
+	 */
+	private static String configurePath(String path) {
+		// check wrong path
+		if (path == null || path.length() == 0) {
+			return "";
+		}
+		// replace slashes
+		path = path.replace('\\', '/');
+		if (path.charAt(0) == '/') {
+			path = path.substring(1);
+		}
+		return path;
+	}
 
-  /**
-   * @return the full path to file or {@code null} if file is not exist.
-   */
-  private static String findFile(String projectPath, String imagePath) {
-    // direct link
-    String fullPath = projectPath + "/" + imagePath;
-    if (new File(fullPath).exists()) {
-      return fullPath;
-    }
-    // with popular prefix 'icons'
-    fullPath = projectPath + "/icons/" + imagePath;
-    if (new File(fullPath).exists()) {
-      return fullPath;
-    }
-    // with popular prefix 'images'
-    fullPath = projectPath + "/images/" + imagePath;
-    if (new File(fullPath).exists()) {
-      return fullPath;
-    }
-    // not found
-    return null;
-  }
+	/**
+	 * @return the full path to file or {@code null} if file is not exist.
+	 */
+	private static String findFile(String projectPath, String imagePath) {
+		// direct link
+		String fullPath = projectPath + "/" + imagePath;
+		if (new File(fullPath).exists()) {
+			return fullPath;
+		}
+		// with popular prefix 'icons'
+		fullPath = projectPath + "/icons/" + imagePath;
+		if (new File(fullPath).exists()) {
+			return fullPath;
+		}
+		// with popular prefix 'images'
+		fullPath = projectPath + "/images/" + imagePath;
+		if (new File(fullPath).exists()) {
+			return fullPath;
+		}
+		// not found
+		return null;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/util/SwtAwtJavaInfoParticipator.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/util/SwtAwtJavaInfoParticipator.java
index 782fb0985..1aedae953 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/util/SwtAwtJavaInfoParticipator.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/util/SwtAwtJavaInfoParticipator.java
@@ -36,82 +36,82 @@
  * @coverage rcp.model.util
  */
 public final class SwtAwtJavaInfoParticipator implements IJavaInfoInitializationParticipator {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final Object INSTANCE = new SwtAwtJavaInfoParticipator();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final Object INSTANCE = new SwtAwtJavaInfoParticipator();
 
-  private SwtAwtJavaInfoParticipator() {
-  }
+	private SwtAwtJavaInfoParticipator() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IJavaInfoInitializationParticipator
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void process(JavaInfo javaInfo) throws Exception {
-    if (javaInfo.getCreationSupport() instanceof StaticFactoryCreationSupport) {
-      StaticFactoryCreationSupport creationSupport =
-          (StaticFactoryCreationSupport) javaInfo.getCreationSupport();
-      FactoryMethodDescription description = creationSupport.getDescription();
-      if (description.getDeclaringClass() == SWT_AWT.class
-          && description.getSignature().equals("new_Frame(org.eclipse.swt.widgets.Composite)")) {
-        addFrameListeners((AbstractComponentInfo) javaInfo);
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IJavaInfoInitializationParticipator
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void process(JavaInfo javaInfo) throws Exception {
+		if (javaInfo.getCreationSupport() instanceof StaticFactoryCreationSupport) {
+			StaticFactoryCreationSupport creationSupport =
+					(StaticFactoryCreationSupport) javaInfo.getCreationSupport();
+			FactoryMethodDescription description = creationSupport.getDescription();
+			if (description.getDeclaringClass() == SWT_AWT.class
+					&& description.getSignature().equals("new_Frame(org.eclipse.swt.widgets.Composite)")) {
+				addFrameListeners((AbstractComponentInfo) javaInfo);
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Implementation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void addFrameListeners(final AbstractComponentInfo newFrame) {
-    newFrame.addBroadcastListener(new ObjectEventListener() {
-      @Override
-      public void refreshed() throws Exception {
-        fixFrameBounds();
-        drawFrameChildren();
-      }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Implementation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void addFrameListeners(final AbstractComponentInfo newFrame) {
+		newFrame.addBroadcastListener(new ObjectEventListener() {
+			@Override
+			public void refreshed() throws Exception {
+				fixFrameBounds();
+				drawFrameChildren();
+			}
 
-      private void fixFrameBounds() {
-        if (newFrame.getParent() instanceof AbstractComponentInfo) {
-          Rectangle bounds = newFrame.getBounds();
-          AbstractComponentInfo parent = (AbstractComponentInfo) newFrame.getParent();
-          Insets clientAreaInsets = parent.getClientAreaInsets();
-          bounds.performTranslate(clientAreaInsets.left, clientAreaInsets.top);
-        }
-      }
+			private void fixFrameBounds() {
+				if (newFrame.getParent() instanceof AbstractComponentInfo) {
+					Rectangle bounds = newFrame.getBounds();
+					AbstractComponentInfo parent = (AbstractComponentInfo) newFrame.getParent();
+					Insets clientAreaInsets = parent.getClientAreaInsets();
+					bounds.performTranslate(clientAreaInsets.left, clientAreaInsets.top);
+				}
+			}
 
-      private void drawFrameChildren() {
-        List<AbstractComponentInfo> components = newFrame.getChildren(AbstractComponentInfo.class);
-        for (AbstractComponentInfo component : components) {
-          drawComponent(component);
-        }
-      }
+			private void drawFrameChildren() {
+				List<AbstractComponentInfo> components = newFrame.getChildren(AbstractComponentInfo.class);
+				for (AbstractComponentInfo component : components) {
+					drawComponent(component);
+				}
+			}
 
-      private void drawComponent(AbstractComponentInfo component) {
-        Point location = component.getBounds().getLocation();
-        ObjectInfo parent = component.getParent();
-        for (; parent != null; parent = parent.getParent()) {
-          if (parent instanceof AbstractComponentInfo) {
-            AbstractComponentInfo parentComponent = (AbstractComponentInfo) parent;
-            Image parentImage = parentComponent.getImage();
-            if (parentImage != null) {
-              GC gc = new GC(parentImage);
-              try {
-                gc.drawImage(component.getImage(), location.x, location.y);
-              } finally {
-                gc.dispose();
-              }
-            }
-            location.performTranslate(parentComponent.getBounds().getLocation());
-          }
-        }
-      }
-    });
-  }
+			private void drawComponent(AbstractComponentInfo component) {
+				Point location = component.getBounds().getLocation();
+				ObjectInfo parent = component.getParent();
+				for (; parent != null; parent = parent.getParent()) {
+					if (parent instanceof AbstractComponentInfo) {
+						AbstractComponentInfo parentComponent = (AbstractComponentInfo) parent;
+						Image parentImage = parentComponent.getImage();
+						if (parentImage != null) {
+							GC gc = new GC(parentImage);
+							try {
+								gc.drawImage(component.getImage(), location.x, location.y);
+							} finally {
+								gc.dispose();
+							}
+						}
+						location.performTranslate(parentComponent.getBounds().getLocation());
+					}
+				}
+			}
+		});
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/util/surround/CTabFolderSurroundTarget.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/util/surround/CTabFolderSurroundTarget.java
index 35cf075f2..17c2927c5 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/util/surround/CTabFolderSurroundTarget.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/util/surround/CTabFolderSurroundTarget.java
@@ -28,47 +28,47 @@
  * @coverage rcp.model.util
  */
 public final class CTabFolderSurroundTarget extends ISurroundTarget<CTabFolderInfo, ControlInfo> {
-  private static final String FOLDER_CLASS_NAME = "org.eclipse.swt.custom.CTabFolder";
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final Object INSTANCE = new CTabFolderSurroundTarget();
+	private static final String FOLDER_CLASS_NAME = "org.eclipse.swt.custom.CTabFolder";
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final Object INSTANCE = new CTabFolderSurroundTarget();
 
-  private CTabFolderSurroundTarget() {
-  }
+	private CTabFolderSurroundTarget() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Image getIcon(AstEditor editor) throws Exception {
-    return ComponentDescriptionHelper.getDescription(editor, FOLDER_CLASS_NAME).getIcon();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Image getIcon(AstEditor editor) throws Exception {
+		return ComponentDescriptionHelper.getDescription(editor, FOLDER_CLASS_NAME).getIcon();
+	}
 
-  @Override
-  public String getText(AstEditor editor) throws Exception {
-    return FOLDER_CLASS_NAME;
-  }
+	@Override
+	public String getText(AstEditor editor) throws Exception {
+		return FOLDER_CLASS_NAME;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Operation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public CTabFolderInfo createContainer(AstEditor editor) throws Exception {
-    return (CTabFolderInfo) JavaInfoUtils.createJavaInfo(
-        editor,
-        FOLDER_CLASS_NAME,
-        new ConstructorCreationSupport());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Operation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public CTabFolderInfo createContainer(AstEditor editor) throws Exception {
+		return (CTabFolderInfo) JavaInfoUtils.createJavaInfo(
+				editor,
+				FOLDER_CLASS_NAME,
+				new ConstructorCreationSupport());
+	}
 
-  @Override
-  public void move(CTabFolderInfo container, ControlInfo component) throws Exception {
-    container.command_MOVE(component, null);
-  }
+	@Override
+	public void move(CTabFolderInfo container, ControlInfo component) throws Exception {
+		container.command_MOVE(component, null);
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/util/surround/SashFormSurroundTarget.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/util/surround/SashFormSurroundTarget.java
index 634e94b35..67413bfc7 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/util/surround/SashFormSurroundTarget.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/util/surround/SashFormSurroundTarget.java
@@ -28,47 +28,47 @@
  * @coverage rcp.model.util
  */
 public final class SashFormSurroundTarget extends ISurroundTarget<SashFormInfo, ControlInfo> {
-  private static final String CLASS_NAME = "org.eclipse.swt.custom.SashForm";
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final Object INSTANCE = new SashFormSurroundTarget();
+	private static final String CLASS_NAME = "org.eclipse.swt.custom.SashForm";
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final Object INSTANCE = new SashFormSurroundTarget();
 
-  private SashFormSurroundTarget() {
-  }
+	private SashFormSurroundTarget() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Image getIcon(AstEditor editor) throws Exception {
-    return ComponentDescriptionHelper.getDescription(editor, CLASS_NAME).getIcon();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Image getIcon(AstEditor editor) throws Exception {
+		return ComponentDescriptionHelper.getDescription(editor, CLASS_NAME).getIcon();
+	}
 
-  @Override
-  public String getText(AstEditor editor) throws Exception {
-    return CLASS_NAME;
-  }
+	@Override
+	public String getText(AstEditor editor) throws Exception {
+		return CLASS_NAME;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Operation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public SashFormInfo createContainer(AstEditor editor) throws Exception {
-    return (SashFormInfo) JavaInfoUtils.createJavaInfo(
-        editor,
-        CLASS_NAME,
-        new ConstructorCreationSupport());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Operation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public SashFormInfo createContainer(AstEditor editor) throws Exception {
+		return (SashFormInfo) JavaInfoUtils.createJavaInfo(
+				editor,
+				CLASS_NAME,
+				new ConstructorCreationSupport());
+	}
 
-  @Override
-  public void move(SashFormInfo container, ControlInfo component) throws Exception {
-    container.command_MOVE(component, null);
-  }
+	@Override
+	public void move(SashFormInfo container, ControlInfo component) throws Exception {
+		container.command_MOVE(component, null);
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/util/surround/ScrolledCompositeSurroundTarget.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/util/surround/ScrolledCompositeSurroundTarget.java
index f66f9f2ea..8da764fc6 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/util/surround/ScrolledCompositeSurroundTarget.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/util/surround/ScrolledCompositeSurroundTarget.java
@@ -32,67 +32,67 @@
  * @coverage rcp.model.util
  */
 public final class ScrolledCompositeSurroundTarget
-    extends
-      ISurroundTarget<ScrolledCompositeInfo, ControlInfo> {
-  private static final String CLASS_NAME = "org.eclipse.swt.custom.ScrolledComposite";
-  private static final CompositeSurroundTarget COMPOSITE_TARGET = CompositeSurroundTarget.INSTANCE;
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final Object INSTANCE = new ScrolledCompositeSurroundTarget();
+extends
+ISurroundTarget<ScrolledCompositeInfo, ControlInfo> {
+	private static final String CLASS_NAME = "org.eclipse.swt.custom.ScrolledComposite";
+	private static final CompositeSurroundTarget COMPOSITE_TARGET = CompositeSurroundTarget.INSTANCE;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final Object INSTANCE = new ScrolledCompositeSurroundTarget();
 
-  private ScrolledCompositeSurroundTarget() {
-  }
+	private ScrolledCompositeSurroundTarget() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Image getIcon(AstEditor editor) throws Exception {
-    return ComponentDescriptionHelper.getDescription(editor, CLASS_NAME).getIcon();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Image getIcon(AstEditor editor) throws Exception {
+		return ComponentDescriptionHelper.getDescription(editor, CLASS_NAME).getIcon();
+	}
 
-  @Override
-  public String getText(AstEditor editor) throws Exception {
-    return CLASS_NAME;
-  }
+	@Override
+	public String getText(AstEditor editor) throws Exception {
+		return CLASS_NAME;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Operation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public ScrolledCompositeInfo createContainer(AstEditor editor) throws Exception {
-    return (ScrolledCompositeInfo) JavaInfoUtils.createJavaInfo(
-        editor,
-        CLASS_NAME,
-        new ConstructorCreationSupport());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Operation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public ScrolledCompositeInfo createContainer(AstEditor editor) throws Exception {
+		return (ScrolledCompositeInfo) JavaInfoUtils.createJavaInfo(
+				editor,
+				CLASS_NAME,
+				new ConstructorCreationSupport());
+	}
 
-  @Override
-  public void beforeComponentsMove(ScrolledCompositeInfo scrolledComposite,
-      List<ControlInfo> components) throws Exception {
-    if (components.size() > 1) {
-      CompositeInfo container = COMPOSITE_TARGET.createContainer(scrolledComposite.getEditor());
-      scrolledComposite.command_CREATE(container);
-      container.getRoot().refreshLight();
-      COMPOSITE_TARGET.afterContainerAdd(container, components);
-      COMPOSITE_TARGET.beforeComponentsMove(container, components);
-    }
-  }
+	@Override
+	public void beforeComponentsMove(ScrolledCompositeInfo scrolledComposite,
+			List<ControlInfo> components) throws Exception {
+		if (components.size() > 1) {
+			CompositeInfo container = COMPOSITE_TARGET.createContainer(scrolledComposite.getEditor());
+			scrolledComposite.command_CREATE(container);
+			container.getRoot().refreshLight();
+			COMPOSITE_TARGET.afterContainerAdd(container, components);
+			COMPOSITE_TARGET.beforeComponentsMove(container, components);
+		}
+	}
 
-  @Override
-  public void move(ScrolledCompositeInfo scrolledComposite, ControlInfo component) throws Exception {
-    if (scrolledComposite.getContent() == null) {
-      scrolledComposite.command_ADD(component);
-    } else {
-      CompositeInfo container = (CompositeInfo) scrolledComposite.getContent();
-      COMPOSITE_TARGET.move(container, component);
-    }
-  }
+	@Override
+	public void move(ScrolledCompositeInfo scrolledComposite, ControlInfo component) throws Exception {
+		if (scrolledComposite.getContent() == null) {
+			scrolledComposite.command_ADD(component);
+		} else {
+			CompositeInfo container = (CompositeInfo) scrolledComposite.getContent();
+			COMPOSITE_TARGET.move(container, component);
+		}
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/util/surround/TabFolderSurroundTarget.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/util/surround/TabFolderSurroundTarget.java
index 275392191..7837336af 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/util/surround/TabFolderSurroundTarget.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/util/surround/TabFolderSurroundTarget.java
@@ -28,47 +28,47 @@
  * @coverage rcp.model.util
  */
 public final class TabFolderSurroundTarget extends ISurroundTarget<TabFolderInfo, ControlInfo> {
-  private static final String FOLDER_CLASS_NAME = "org.eclipse.swt.widgets.TabFolder";
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final Object INSTANCE = new TabFolderSurroundTarget();
+	private static final String FOLDER_CLASS_NAME = "org.eclipse.swt.widgets.TabFolder";
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final Object INSTANCE = new TabFolderSurroundTarget();
 
-  private TabFolderSurroundTarget() {
-  }
+	private TabFolderSurroundTarget() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Image getIcon(AstEditor editor) throws Exception {
-    return ComponentDescriptionHelper.getDescription(editor, FOLDER_CLASS_NAME).getIcon();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Image getIcon(AstEditor editor) throws Exception {
+		return ComponentDescriptionHelper.getDescription(editor, FOLDER_CLASS_NAME).getIcon();
+	}
 
-  @Override
-  public String getText(AstEditor editor) throws Exception {
-    return FOLDER_CLASS_NAME;
-  }
+	@Override
+	public String getText(AstEditor editor) throws Exception {
+		return FOLDER_CLASS_NAME;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Operation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public TabFolderInfo createContainer(AstEditor editor) throws Exception {
-    return (TabFolderInfo) JavaInfoUtils.createJavaInfo(
-        editor,
-        FOLDER_CLASS_NAME,
-        new ConstructorCreationSupport());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Operation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public TabFolderInfo createContainer(AstEditor editor) throws Exception {
+		return (TabFolderInfo) JavaInfoUtils.createJavaInfo(
+				editor,
+				FOLDER_CLASS_NAME,
+				new ConstructorCreationSupport());
+	}
 
-  @Override
-  public void move(TabFolderInfo container, ControlInfo component) throws Exception {
-    container.command_MOVE(component, null);
-  }
+	@Override
+	public void move(TabFolderInfo container, ControlInfo component) throws Exception {
+		container.command_MOVE(component, null);
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/AbstractPositionCompositeInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/AbstractPositionCompositeInfo.java
index e0edebbbb..9d560459b 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/AbstractPositionCompositeInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/AbstractPositionCompositeInfo.java
@@ -44,141 +44,141 @@
  * @coverage rcp.model.widgets
  */
 public abstract class AbstractPositionCompositeInfo extends CompositeInfo {
-  private final String[] m_methods;
-  private final AbstractPositionInfo[] m_positions;
+	private final String[] m_methods;
+	private final AbstractPositionInfo[] m_positions;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractPositionCompositeInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport,
-      String[] methods) throws Exception {
-    super(editor, description, creationSupport);
-    m_methods = methods;
-    {
-      m_positions = new AbstractPositionInfo[m_methods.length];
-      for (int i = 0; i < m_methods.length; i++) {
-        String method = m_methods[i];
-        m_positions[i] = new AbstractPositionInfo(this, method);
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractPositionCompositeInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport,
+			String[] methods) throws Exception {
+		super(editor, description, creationSupport);
+		m_methods = methods;
+		{
+			m_positions = new AbstractPositionInfo[m_methods.length];
+			for (int i = 0; i < m_methods.length; i++) {
+				String method = m_methods[i];
+				m_positions[i] = new AbstractPositionInfo(this, method);
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Initialization
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void initialize() throws Exception {
-    super.initialize();
-    // listener that adds prefix with name of position
-    addBroadcastListener(new ObjectInfoPresentationDecorateText() {
-      @Override
-      public void invoke(ObjectInfo object, String[] text) throws Exception {
-        if (object instanceof ControlInfo
-            && object.getParent() == AbstractPositionCompositeInfo.this) {
-          for (String method : m_methods) {
-            if (getControl(method) == object) {
-              text[0] = method + " - " + text[0];
-              break;
-            }
-          }
-        }
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Initialization
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void initialize() throws Exception {
+		super.initialize();
+		// listener that adds prefix with name of position
+		addBroadcastListener(new ObjectInfoPresentationDecorateText() {
+			@Override
+			public void invoke(ObjectInfo object, String[] text) throws Exception {
+				if (object instanceof ControlInfo
+						&& object.getParent() == AbstractPositionCompositeInfo.this) {
+					for (String method : m_methods) {
+						if (getControl(method) == object) {
+							text[0] = method + " - " + text[0];
+							break;
+						}
+					}
+				}
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link ControlInfo} set using given <code>setXXX()</code> method.
-   */
-  public final ControlInfo getControl(String methodName) {
-    MethodInvocation invocation =
-        getMethodInvocation(methodName + "(org.eclipse.swt.widgets.Control)");
-    if (invocation != null) {
-      return (ControlInfo) getChildRepresentedBy(DomGenerics.arguments(invocation).get(0));
-    } else {
-      return null;
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link ControlInfo} set using given <code>setXXX()</code> method.
+	 */
+	public final ControlInfo getControl(String methodName) {
+		MethodInvocation invocation =
+				getMethodInvocation(methodName + "(org.eclipse.swt.widgets.Control)");
+		if (invocation != null) {
+			return (ControlInfo) getChildRepresentedBy(DomGenerics.arguments(invocation).get(0));
+		} else {
+			return null;
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final IObjectPresentation m_presentation = new DefaultJavaInfoPresentation(this) {
-    @Override
-    public List<ObjectInfo> getChildrenTree() throws Exception {
-      List<ObjectInfo> children = Lists.newArrayList(super.getChildrenTree());
-      Set<ControlInfo> positionedControls = Sets.newHashSet();
-      for (int i = 0; i < m_methods.length; i++) {
-        String method = m_methods[i];
-        ControlInfo control = getControl(method);
-        if (control != null && !positionedControls.contains(control)) {
-          positionedControls.add(control);
-          children.remove(control);
-          children.add(i, control);
-        } else {
-          children.add(i, m_positions[i]);
-        }
-      }
-      return children;
-    }
-  };
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final IObjectPresentation m_presentation = new DefaultJavaInfoPresentation(this) {
+		@Override
+		public List<ObjectInfo> getChildrenTree() throws Exception {
+			List<ObjectInfo> children = Lists.newArrayList(super.getChildrenTree());
+			Set<ControlInfo> positionedControls = Sets.newHashSet();
+			for (int i = 0; i < m_methods.length; i++) {
+				String method = m_methods[i];
+				ControlInfo control = getControl(method);
+				if (control != null && !positionedControls.contains(control)) {
+					positionedControls.add(control);
+					children.remove(control);
+					children.add(i, control);
+				} else {
+					children.add(i, m_positions[i]);
+				}
+			}
+			return children;
+		}
+	};
 
-  @Override
-  public IObjectPresentation getPresentation() {
-    return m_presentation;
-  }
+	@Override
+	public IObjectPresentation getPresentation() {
+		return m_presentation;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Creates new {@link ControlInfo} and associates it with this
-   * {@link AbstractPositionCompositeInfo} using method with given name.
-   */
-  public final void command_CREATE(ControlInfo control, String methodName) throws Exception {
-    AssociationObject association = getAssociation_(methodName);
-    JavaInfoUtils.add(control, association, this, null);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Creates new {@link ControlInfo} and associates it with this
+	 * {@link AbstractPositionCompositeInfo} using method with given name.
+	 */
+	public final void command_CREATE(ControlInfo control, String methodName) throws Exception {
+		AssociationObject association = getAssociation_(methodName);
+		JavaInfoUtils.add(control, association, this, null);
+	}
 
-  /**
-   * Moves existing {@link ControlInfo} and associates it with this
-   * {@link AbstractPositionCompositeInfo} using method with given name.
-   */
-  public final void command_MOVE(ControlInfo control, String methodName) throws Exception {
-    // prepare "nextControl", to add before it
-    ControlInfo nextControl = null;
-    {
-      int index = ArrayUtils.indexOf(m_methods, methodName);
-      Assert.isLegal(index >= 0, "Invalid method: " + methodName);
-      for (int i = index + 1; i < m_methods.length; i++) {
-        String method = m_methods[i];
-        ControlInfo methodControl = getControl(method);
-        if (methodControl != null && methodControl != control) {
-          nextControl = methodControl;
-          break;
-        }
-      }
-    }
-    // do move
-    AssociationObject association = getAssociation_(methodName);
-    JavaInfoUtils.move(control, association, this, nextControl);
-  }
+	/**
+	 * Moves existing {@link ControlInfo} and associates it with this
+	 * {@link AbstractPositionCompositeInfo} using method with given name.
+	 */
+	public final void command_MOVE(ControlInfo control, String methodName) throws Exception {
+		// prepare "nextControl", to add before it
+		ControlInfo nextControl = null;
+		{
+			int index = ArrayUtils.indexOf(m_methods, methodName);
+			Assert.isLegal(index >= 0, "Invalid method: " + methodName);
+			for (int i = index + 1; i < m_methods.length; i++) {
+				String method = m_methods[i];
+				ControlInfo methodControl = getControl(method);
+				if (methodControl != null && methodControl != control) {
+					nextControl = methodControl;
+					break;
+				}
+			}
+		}
+		// do move
+		AssociationObject association = getAssociation_(methodName);
+		JavaInfoUtils.move(control, association, this, nextControl);
+	}
 
-  private static AssociationObject getAssociation_(String methodName) {
-    return AssociationObjects.invocationChild("%parent%." + methodName + "(%child%)", true);
-  }
+	private static AssociationObject getAssociation_(String methodName) {
+		return AssociationObjects.invocationChild("%parent%." + methodName + "(%child%)", true);
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/AbstractPositionInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/AbstractPositionInfo.java
index 37830bfd9..51dba80d3 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/AbstractPositionInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/AbstractPositionInfo.java
@@ -25,76 +25,76 @@
  * @coverage rcp.model.widgets
  */
 public final class AbstractPositionInfo extends ObjectInfo {
-  private final AbstractPositionCompositeInfo m_composite;
-  private final String m_method;
+	private final AbstractPositionCompositeInfo m_composite;
+	private final String m_method;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractPositionInfo(AbstractPositionCompositeInfo composite, String method) {
-    setParent(composite);
-    setBroadcastSupport(composite.getBroadcastSupport());
-    m_composite = composite;
-    m_method = method;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractPositionInfo(AbstractPositionCompositeInfo composite, String method) {
+		setParent(composite);
+		setBroadcastSupport(composite.getBroadcastSupport());
+		m_composite = composite;
+		m_method = method;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Position
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the host {@link AbstractPositionCompositeInfo}.
-   */
-  public AbstractPositionCompositeInfo getComposite() {
-    return m_composite;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Position
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the host {@link AbstractPositionCompositeInfo}.
+	 */
+	public AbstractPositionCompositeInfo getComposite() {
+		return m_composite;
+	}
 
-  /**
-   * @return the {@link ControlInfo} on this position, may be <code>null</code>.
-   */
-  public ControlInfo getControl() {
-    return m_composite.getControl(m_method);
-  }
+	/**
+	 * @return the {@link ControlInfo} on this position, may be <code>null</code>.
+	 */
+	public ControlInfo getControl() {
+		return m_composite.getControl(m_method);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public IObjectPresentation getPresentation() {
-    return new DefaultObjectPresentation(this) {
-      @Override
-      public Image getIcon() throws Exception {
-        return Activator.getImage("info/position/element_transparent.png");
-      }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public IObjectPresentation getPresentation() {
+		return new DefaultObjectPresentation(this) {
+			@Override
+			public Image getIcon() throws Exception {
+				return Activator.getImage("info/position/element_transparent.png");
+			}
 
-      @Override
-      public String getText() throws Exception {
-        return m_method;
-      }
-    };
-  }
+			@Override
+			public String getText() throws Exception {
+				return m_method;
+			}
+		};
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Calls {@link AbstractPositionCompositeInfo#command_CREATE(ControlInfo, String)}.
-   */
-  public void command_CREATE(ControlInfo control) throws Exception {
-    m_composite.command_CREATE(control, m_method);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Calls {@link AbstractPositionCompositeInfo#command_CREATE(ControlInfo, String)}.
+	 */
+	public void command_CREATE(ControlInfo control) throws Exception {
+		m_composite.command_CREATE(control, m_method);
+	}
 
-  /**
-   * Calls {@link AbstractPositionCompositeInfo#command_MOVE(ControlInfo, String)}.
-   */
-  public void command_MOVE(ControlInfo control) throws Exception {
-    m_composite.command_MOVE(control, m_method);
-  }
+	/**
+	 * Calls {@link AbstractPositionCompositeInfo#command_MOVE(ControlInfo, String)}.
+	 */
+	public void command_MOVE(ControlInfo control) throws Exception {
+		m_composite.command_MOVE(control, m_method);
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/AbstractTabFolderInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/AbstractTabFolderInfo.java
index a6e6a90f3..258a402bf 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/AbstractTabFolderInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/AbstractTabFolderInfo.java
@@ -37,136 +37,136 @@
  * @coverage rcp.model.widgets
  */
 public abstract class AbstractTabFolderInfo extends CompositeInfo {
-  AbstractTabItemInfo m_selectedItem;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractTabFolderInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the selected {@link AbstractTabItemInfo}, may be <code>null</code>, if no items at all.
-   */
-  public AbstractTabItemInfo getSelectedItem() {
-    if (m_selectedItem != null) {
-      return m_selectedItem;
-    }
-    List<AbstractTabItemInfo> items = getItems();
-    return GenericsUtils.getFirstOrNull(items);
-  }
-
-  /**
-   * @return the {@link AbstractTabItemInfo} children.
-   */
-  public List<AbstractTabItemInfo> getItems() {
-    return getChildren(AbstractTabItemInfo.class);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final IObjectPresentation m_presentation = new DefaultJavaInfoPresentation(this) {
-    @Override
-    public List<ObjectInfo> getChildrenTree() throws Exception {
-      List<ObjectInfo> children = Lists.newArrayList(super.getChildrenTree());
-      // don't show in tree any Control's
-      for (Iterator<ObjectInfo> I = children.iterator(); I.hasNext();) {
-        ObjectInfo child = I.next();
-        if (child instanceof ControlInfo) {
-          I.remove();
-        }
-      }
-      // OK, show these children
-      return children;
-    }
-
-    @Override
-    public List<ObjectInfo> getChildrenGraphical() throws Exception {
-      List<ObjectInfo> children = super.getChildrenGraphical();
-      // prepare Control of selected TabItem
-      ControlInfo selectedItemControl;
-      {
-        AbstractTabItemInfo selectedItem = getSelectedItem();
-        selectedItemControl = selectedItem != null ? selectedItem.getControl() : null;
-      }
-      // remove all Control's except of selected
-      for (Iterator<ObjectInfo> I = children.iterator(); I.hasNext();) {
-        ObjectInfo child = I.next();
-        if (child instanceof ControlInfo && child != selectedItemControl) {
-          I.remove();
-        }
-      }
-      // OK, show these children
-      return children;
-    }
-  };
-
-  @Override
-  public IObjectPresentation getPresentation() {
-    return m_presentation;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Creates new {@link AbstractTabItemInfo}.
-   */
-  public void command_CREATE(AbstractTabItemInfo item, AbstractTabItemInfo nextItem)
-      throws Exception {
-    JavaInfoUtils.add(item, null, this, nextItem);
-  }
-
-  /**
-   * Moves {@link AbstractTabItemInfo}.
-   */
-  public void command_MOVE(AbstractTabItemInfo item, AbstractTabItemInfo nextItem) throws Exception {
-    JavaInfoUtils.move(item, null, this, nextItem);
-  }
-
-  /**
-   * Creates new {@link ControlInfo}.
-   */
-  public void command_CREATE(ControlInfo control, AbstractTabItemInfo nextItem) throws Exception {
-    AbstractTabItemInfo item = createItem(nextItem);
-    item.command_CREATE(control);
-  }
-
-  /**
-   * Moves {@link ControlInfo}.
-   */
-  public void command_MOVE(ControlInfo control, AbstractTabItemInfo nextItem) throws Exception {
-    AbstractTabItemInfo item = createItem(nextItem);
-    item.command_ADD(control);
-  }
-
-  /**
-   * Adds new {@link AbstractTabItemInfo} to this {@link AbstractTabFolderInfo}.
-   */
-  private AbstractTabItemInfo createItem(AbstractTabItemInfo nextItem) throws Exception {
-    AbstractTabItemInfo item =
-        (AbstractTabItemInfo) JavaInfoUtils.createJavaInfo(
-            getEditor(),
-            getItemClassName(),
-            new ConstructorCreationSupport());
-    command_CREATE(item, nextItem);
-    return item;
-  }
-
-  protected abstract String getItemClassName();
+	AbstractTabItemInfo m_selectedItem;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractTabFolderInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the selected {@link AbstractTabItemInfo}, may be <code>null</code>, if no items at all.
+	 */
+	public AbstractTabItemInfo getSelectedItem() {
+		if (m_selectedItem != null) {
+			return m_selectedItem;
+		}
+		List<AbstractTabItemInfo> items = getItems();
+		return GenericsUtils.getFirstOrNull(items);
+	}
+
+	/**
+	 * @return the {@link AbstractTabItemInfo} children.
+	 */
+	public List<AbstractTabItemInfo> getItems() {
+		return getChildren(AbstractTabItemInfo.class);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final IObjectPresentation m_presentation = new DefaultJavaInfoPresentation(this) {
+		@Override
+		public List<ObjectInfo> getChildrenTree() throws Exception {
+			List<ObjectInfo> children = Lists.newArrayList(super.getChildrenTree());
+			// don't show in tree any Control's
+			for (Iterator<ObjectInfo> I = children.iterator(); I.hasNext();) {
+				ObjectInfo child = I.next();
+				if (child instanceof ControlInfo) {
+					I.remove();
+				}
+			}
+			// OK, show these children
+			return children;
+		}
+
+		@Override
+		public List<ObjectInfo> getChildrenGraphical() throws Exception {
+			List<ObjectInfo> children = super.getChildrenGraphical();
+			// prepare Control of selected TabItem
+			ControlInfo selectedItemControl;
+			{
+				AbstractTabItemInfo selectedItem = getSelectedItem();
+				selectedItemControl = selectedItem != null ? selectedItem.getControl() : null;
+			}
+			// remove all Control's except of selected
+			for (Iterator<ObjectInfo> I = children.iterator(); I.hasNext();) {
+				ObjectInfo child = I.next();
+				if (child instanceof ControlInfo && child != selectedItemControl) {
+					I.remove();
+				}
+			}
+			// OK, show these children
+			return children;
+		}
+	};
+
+	@Override
+	public IObjectPresentation getPresentation() {
+		return m_presentation;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Creates new {@link AbstractTabItemInfo}.
+	 */
+	public void command_CREATE(AbstractTabItemInfo item, AbstractTabItemInfo nextItem)
+			throws Exception {
+		JavaInfoUtils.add(item, null, this, nextItem);
+	}
+
+	/**
+	 * Moves {@link AbstractTabItemInfo}.
+	 */
+	public void command_MOVE(AbstractTabItemInfo item, AbstractTabItemInfo nextItem) throws Exception {
+		JavaInfoUtils.move(item, null, this, nextItem);
+	}
+
+	/**
+	 * Creates new {@link ControlInfo}.
+	 */
+	public void command_CREATE(ControlInfo control, AbstractTabItemInfo nextItem) throws Exception {
+		AbstractTabItemInfo item = createItem(nextItem);
+		item.command_CREATE(control);
+	}
+
+	/**
+	 * Moves {@link ControlInfo}.
+	 */
+	public void command_MOVE(ControlInfo control, AbstractTabItemInfo nextItem) throws Exception {
+		AbstractTabItemInfo item = createItem(nextItem);
+		item.command_ADD(control);
+	}
+
+	/**
+	 * Adds new {@link AbstractTabItemInfo} to this {@link AbstractTabFolderInfo}.
+	 */
+	private AbstractTabItemInfo createItem(AbstractTabItemInfo nextItem) throws Exception {
+		AbstractTabItemInfo item =
+				(AbstractTabItemInfo) JavaInfoUtils.createJavaInfo(
+						getEditor(),
+						getItemClassName(),
+						new ConstructorCreationSupport());
+		command_CREATE(item, nextItem);
+		return item;
+	}
+
+	protected abstract String getItemClassName();
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/AbstractTabItemInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/AbstractTabItemInfo.java
index c2d17ee57..660302fda 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/AbstractTabItemInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/AbstractTabItemInfo.java
@@ -46,204 +46,204 @@
  * @coverage rcp.model.widgets
  */
 public abstract class AbstractTabItemInfo extends ItemInfo {
-  private final AbstractTabItemInfo m_this = this;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractTabItemInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-    addBroadcastListener(new ObjectEventListener() {
-      @Override
-      public void selecting(ObjectInfo object, boolean[] refreshFlag) throws Exception {
-        ControlInfo ourControl = getControl();
-        if (ourControl != null) {
-          if (object == ourControl || ourControl.isParentOf(object)) {
-            if (getFolder().m_selectedItem != m_this) {
-              doSelect();
-              refreshFlag[0] = true;
-            }
-          }
-        }
-      }
-    });
-    addBroadcastListener(new ObjectInfoDelete() {
-      @Override
-      public void before(ObjectInfo parent, ObjectInfo child) throws Exception {
-        if (child == m_this) {
-          ControlInfo ourControl = getControl();
-          if (ourControl != null) {
-            ourControl.delete();
-          }
-        }
-      }
-    });
-    addBroadcastListener(new JavaEventListener() {
-      private ControlInfo m_ourControl;
-
-      @Override
-      public void moveBefore(JavaInfo child, ObjectInfo oldParent, JavaInfo newParent)
-          throws Exception {
-        // remove setControl() invocation when move ControlInfo in/from our TabFolder
-        if (oldParent == getParent() && child instanceof ControlInfo && getControl() == child) {
-          removeMethodInvocations("setControl(org.eclipse.swt.widgets.Control)");
-        }
-        // when WE are moved, remove possible setControl() invocation
-        if (child == m_this) {
-          m_ourControl = getControl();
-          removeMethodInvocations("setControl(org.eclipse.swt.widgets.Control)");
-        }
-      }
-
-      @Override
-      public void variable_addStatementsToMove(JavaInfo parent, List<JavaInfo> children)
-          throws Exception {
-        if (parent == m_this) {
-          if (m_ourControl != null) {
-            children.add(m_ourControl);
-          }
-        }
-      }
-
-      @Override
-      public void moveAfter(JavaInfo child, ObjectInfo oldParent, JavaInfo newParent)
-          throws Exception {
-        // if WE were moved, move our ControlInfo
-        if (child == m_this) {
-          if (m_ourControl != null) {
-            command_ADD(m_ourControl);
-          }
-        }
-      }
-    });
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the parent {@link AbstractTabFolderInfo}.
-   */
-  public AbstractTabFolderInfo getFolder() {
-    return (AbstractTabFolderInfo) getParent();
-  }
-
-  /**
-   * Shows this {@link AbstractTabItemInfo} in its parent {@link AbstractTabFolderInfo}.
-   */
-  public void doSelect() {
-    if (getFolder().m_selectedItem != this) {
-      getFolder().m_selectedItem = this;
-      ExecutionUtils.refresh(this);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final IObjectPresentation m_presentation = new DefaultJavaInfoPresentation(this) {
-    @Override
-    public List<ObjectInfo> getChildrenTree() throws Exception {
-      ControlInfo control = getControl();
-      if (control != null) {
-        return ImmutableList.<ObjectInfo>of(control);
-      } else {
-        return ImmutableList.of();
-      }
-    }
-  };
-
-  @Override
-  public IObjectPresentation getPresentation() {
-    return m_presentation;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // setControl() support
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link ControlInfo} set using
-   *         {@link TabItem#setControl(org.eclipse.swt.widgets.Control)}, may be <code>null</code>.
-   */
-  public ControlInfo getControl() {
-    MethodInvocation invocation =
-        getMethodInvocation("setControl(org.eclipse.swt.widgets.Control)");
-    if (invocation != null) {
-      Expression controlExpression = DomGenerics.arguments(invocation).get(0);
-      return (ControlInfo) getParentJava().getChildRepresentedBy(controlExpression);
-    }
-    return null;
-  }
-
-  /**
-   * Adds new {@link ControlInfo} to {@link AbstractTabFolderInfo} and associates with given
-   * {@link AbstractTabItemInfo} set using
-   * {@link TabItem#setControl(org.eclipse.swt.widgets.Control)}.
-   */
-  public void command_CREATE(ControlInfo control) throws Exception {
-    // add to TabFolder
-    {
-      StatementTarget target = JavaInfoUtils.getTarget(this, control, null);
-      JavaInfoUtils.addTarget(control, null, getParentJava(), target);
-    }
-    // add setControl() invocation
-    addInvocation_setControl(control);
-    doSelect();
-  }
-
-  /**
-   * Adds existing {@link ControlInfo} to {@link AbstractTabFolderInfo} and associates with given
-   * {@link AbstractTabItemInfo} set using
-   * {@link TabItem#setControl(org.eclipse.swt.widgets.Control)}.
-   */
-  public void command_ADD(final ControlInfo control) throws Exception {
-    // move to TabFolder, but code inside of TabItem
-    {
-      final AbstractTabFolderInfo tabFolder = getFolder();
-      final StatementTarget target = JavaInfoUtils.getTarget(this, control, null);
-      IMoveTargetProvider targetProvider = new IMoveTargetProvider() {
-        @Override
-        public void add() throws Exception {
-          tabFolder.addChild(control, getNextJavaInfo());
-        }
-
-        @Override
-        public void move() throws Exception {
-          tabFolder.moveChild(control, getNextJavaInfo());
-        }
-
-        @Override
-        public StatementTarget getTarget() throws Exception {
-          return target;
-        }
-
-        private JavaInfo getNextJavaInfo() {
-          return GenericsUtils.getNextOrNull(tabFolder.getChildrenJava(), m_this);
-        }
-      };
-      JavaInfoUtils.moveProvider(control, null, tabFolder, targetProvider);
-    }
-    // associate with this item
-    addInvocation_setControl(control);
-    doSelect();
-  }
-
-  /**
-   * Adds {@link TabItem#setControl(org.eclipse.swt.widgets.Control)} invocation.
-   */
-  private void addInvocation_setControl(ControlInfo control) throws Exception {
-    String source = TemplateUtils.format("{0}.setControl({1})", this, control);
-    Expression expression = control.addExpressionStatement(source);
-    addRelatedNodes(expression);
-  }
+	private final AbstractTabItemInfo m_this = this;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractTabItemInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+		addBroadcastListener(new ObjectEventListener() {
+			@Override
+			public void selecting(ObjectInfo object, boolean[] refreshFlag) throws Exception {
+				ControlInfo ourControl = getControl();
+				if (ourControl != null) {
+					if (object == ourControl || ourControl.isParentOf(object)) {
+						if (getFolder().m_selectedItem != m_this) {
+							doSelect();
+							refreshFlag[0] = true;
+						}
+					}
+				}
+			}
+		});
+		addBroadcastListener(new ObjectInfoDelete() {
+			@Override
+			public void before(ObjectInfo parent, ObjectInfo child) throws Exception {
+				if (child == m_this) {
+					ControlInfo ourControl = getControl();
+					if (ourControl != null) {
+						ourControl.delete();
+					}
+				}
+			}
+		});
+		addBroadcastListener(new JavaEventListener() {
+			private ControlInfo m_ourControl;
+
+			@Override
+			public void moveBefore(JavaInfo child, ObjectInfo oldParent, JavaInfo newParent)
+					throws Exception {
+				// remove setControl() invocation when move ControlInfo in/from our TabFolder
+				if (oldParent == getParent() && child instanceof ControlInfo && getControl() == child) {
+					removeMethodInvocations("setControl(org.eclipse.swt.widgets.Control)");
+				}
+				// when WE are moved, remove possible setControl() invocation
+				if (child == m_this) {
+					m_ourControl = getControl();
+					removeMethodInvocations("setControl(org.eclipse.swt.widgets.Control)");
+				}
+			}
+
+			@Override
+			public void variable_addStatementsToMove(JavaInfo parent, List<JavaInfo> children)
+					throws Exception {
+				if (parent == m_this) {
+					if (m_ourControl != null) {
+						children.add(m_ourControl);
+					}
+				}
+			}
+
+			@Override
+			public void moveAfter(JavaInfo child, ObjectInfo oldParent, JavaInfo newParent)
+					throws Exception {
+				// if WE were moved, move our ControlInfo
+				if (child == m_this) {
+					if (m_ourControl != null) {
+						command_ADD(m_ourControl);
+					}
+				}
+			}
+		});
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the parent {@link AbstractTabFolderInfo}.
+	 */
+	public AbstractTabFolderInfo getFolder() {
+		return (AbstractTabFolderInfo) getParent();
+	}
+
+	/**
+	 * Shows this {@link AbstractTabItemInfo} in its parent {@link AbstractTabFolderInfo}.
+	 */
+	public void doSelect() {
+		if (getFolder().m_selectedItem != this) {
+			getFolder().m_selectedItem = this;
+			ExecutionUtils.refresh(this);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final IObjectPresentation m_presentation = new DefaultJavaInfoPresentation(this) {
+		@Override
+		public List<ObjectInfo> getChildrenTree() throws Exception {
+			ControlInfo control = getControl();
+			if (control != null) {
+				return ImmutableList.<ObjectInfo>of(control);
+			} else {
+				return ImmutableList.of();
+			}
+		}
+	};
+
+	@Override
+	public IObjectPresentation getPresentation() {
+		return m_presentation;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// setControl() support
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link ControlInfo} set using
+	 *         {@link TabItem#setControl(org.eclipse.swt.widgets.Control)}, may be <code>null</code>.
+	 */
+	public ControlInfo getControl() {
+		MethodInvocation invocation =
+				getMethodInvocation("setControl(org.eclipse.swt.widgets.Control)");
+		if (invocation != null) {
+			Expression controlExpression = DomGenerics.arguments(invocation).get(0);
+			return (ControlInfo) getParentJava().getChildRepresentedBy(controlExpression);
+		}
+		return null;
+	}
+
+	/**
+	 * Adds new {@link ControlInfo} to {@link AbstractTabFolderInfo} and associates with given
+	 * {@link AbstractTabItemInfo} set using
+	 * {@link TabItem#setControl(org.eclipse.swt.widgets.Control)}.
+	 */
+	public void command_CREATE(ControlInfo control) throws Exception {
+		// add to TabFolder
+		{
+			StatementTarget target = JavaInfoUtils.getTarget(this, control, null);
+			JavaInfoUtils.addTarget(control, null, getParentJava(), target);
+		}
+		// add setControl() invocation
+		addInvocation_setControl(control);
+		doSelect();
+	}
+
+	/**
+	 * Adds existing {@link ControlInfo} to {@link AbstractTabFolderInfo} and associates with given
+	 * {@link AbstractTabItemInfo} set using
+	 * {@link TabItem#setControl(org.eclipse.swt.widgets.Control)}.
+	 */
+	public void command_ADD(final ControlInfo control) throws Exception {
+		// move to TabFolder, but code inside of TabItem
+		{
+			final AbstractTabFolderInfo tabFolder = getFolder();
+			final StatementTarget target = JavaInfoUtils.getTarget(this, control, null);
+			IMoveTargetProvider targetProvider = new IMoveTargetProvider() {
+				@Override
+				public void add() throws Exception {
+					tabFolder.addChild(control, getNextJavaInfo());
+				}
+
+				@Override
+				public void move() throws Exception {
+					tabFolder.moveChild(control, getNextJavaInfo());
+				}
+
+				@Override
+				public StatementTarget getTarget() throws Exception {
+					return target;
+				}
+
+				private JavaInfo getNextJavaInfo() {
+					return GenericsUtils.getNextOrNull(tabFolder.getChildrenJava(), m_this);
+				}
+			};
+			JavaInfoUtils.moveProvider(control, null, tabFolder, targetProvider);
+		}
+		// associate with this item
+		addInvocation_setControl(control);
+		doSelect();
+	}
+
+	/**
+	 * Adds {@link TabItem#setControl(org.eclipse.swt.widgets.Control)} invocation.
+	 */
+	private void addInvocation_setControl(ControlInfo control) throws Exception {
+		String source = TemplateUtils.format("{0}.setControl({1})", this, control);
+		Expression expression = control.addExpressionStatement(source);
+		addRelatedNodes(expression);
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/CBannerInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/CBannerInfo.java
index 36d13f63d..e9121c403 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/CBannerInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/CBannerInfo.java
@@ -23,16 +23,16 @@
  * @coverage rcp.model.widgets
  */
 public final class CBannerInfo extends AbstractPositionCompositeInfo {
-  private static final String[] POSITIONS = new String[]{"setLeft", "setRight", "setBottom"};
+	private static final String[] POSITIONS = new String[]{"setLeft", "setRight", "setBottom"};
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CBannerInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport, POSITIONS);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CBannerInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport, POSITIONS);
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/CTabFolderInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/CTabFolderInfo.java
index bbb3aaa43..fcba43d2e 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/CTabFolderInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/CTabFolderInfo.java
@@ -26,50 +26,50 @@
  * @coverage rcp.model.widgets
  */
 public final class CTabFolderInfo extends AbstractTabFolderInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CTabFolderInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CTabFolderInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link CTabItemInfo} children.
-   */
-  public List<CTabItemInfo> getItems2() {
-    return getChildren(CTabItemInfo.class);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link CTabItemInfo} children.
+	 */
+	public List<CTabItemInfo> getItems2() {
+		return getChildren(CTabItemInfo.class);
+	}
 
-  @Override
-  protected String getItemClassName() {
-    return "org.eclipse.swt.custom.CTabItem";
-  }
+	@Override
+	protected String getItemClassName() {
+		return "org.eclipse.swt.custom.CTabItem";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void refresh_afterCreate() throws Exception {
-    selectItem();
-    super.refresh_afterCreate();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void refresh_afterCreate() throws Exception {
+		selectItem();
+		super.refresh_afterCreate();
+	}
 
-  private void selectItem() {
-    AbstractTabItemInfo selectedItem = getSelectedItem();
-    if (selectedItem != null) {
-      CTabFolder tabFolder = (CTabFolder) getObject();
-      tabFolder.setSelection((CTabItem) selectedItem.getObject());
-    }
-  }
+	private void selectItem() {
+		AbstractTabItemInfo selectedItem = getSelectedItem();
+		if (selectedItem != null) {
+			CTabFolder tabFolder = (CTabFolder) getObject();
+			tabFolder.setSelection((CTabItem) selectedItem.getObject());
+		}
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/CTabItemInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/CTabItemInfo.java
index be2f55436..851b2cacc 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/CTabItemInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/CTabItemInfo.java
@@ -24,29 +24,29 @@
  * @coverage rcp.model.widgets
  */
 public final class CTabItemInfo extends AbstractTabItemInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CTabItemInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CTabItemInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void refresh_fetch() throws Exception {
-    super.refresh_fetch();
-    // set bounds
-    {
-      CTabItem item = (CTabItem) getObject();
-      setModelBounds(RectangleSupport.getRectangle(item.getBounds()));
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void refresh_fetch() throws Exception {
+		super.refresh_fetch();
+		// set bounds
+		{
+			CTabItem item = (CTabItem) getObject();
+			setModelBounds(RectangleSupport.getRectangle(item.getBounds()));
+		}
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/CompositeTopBoundsSupport.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/CompositeTopBoundsSupport.java
index 21a421d75..da2cf69a4 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/CompositeTopBoundsSupport.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/CompositeTopBoundsSupport.java
@@ -20,14 +20,14 @@
  * @coverage rcp.model.widgets
  */
 public final class CompositeTopBoundsSupport
-    extends
-      org.eclipse.wb.internal.swt.model.widgets.CompositeTopBoundsSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CompositeTopBoundsSupport(CompositeInfo composite) {
-    super(composite);
-  }
+extends
+org.eclipse.wb.internal.swt.model.widgets.CompositeTopBoundsSupport {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CompositeTopBoundsSupport(CompositeInfo composite) {
+		super(composite);
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/CoolBarInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/CoolBarInfo.java
index d4acc639f..493cb3f48 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/CoolBarInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/CoolBarInfo.java
@@ -36,88 +36,88 @@
  * @coverage rcp.model.widgets
  */
 public final class CoolBarInfo extends CompositeInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CoolBarInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CoolBarInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if this {@link CoolBarInfo} has horizontal layout.
-   */
-  public boolean isHorizontal() {
-    return ControlSupport.isStyle(getObject(), SWT.HORIZONTAL);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if this {@link CoolBarInfo} has horizontal layout.
+	 */
+	public boolean isHorizontal() {
+		return ControlSupport.isStyle(getObject(), SWT.HORIZONTAL);
+	}
 
-  /**
-   * @return the {@link CoolItemInfo} children.
-   */
-  public List<CoolItemInfo> getItems() {
-    return getChildren(CoolItemInfo.class);
-  }
+	/**
+	 * @return the {@link CoolItemInfo} children.
+	 */
+	public List<CoolItemInfo> getItems() {
+		return getChildren(CoolItemInfo.class);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void refresh_afterCreate() throws Exception {
-    super.refresh_afterCreate();
-    // ensure that each CoolItem has reasonable size
-    for (CoolItemInfo itemInfo : getItems()) {
-      CoolItem item = (CoolItem) itemInfo.getObject();
-      Control control = item.getControl();
-      if (control == null) {
-        item.setSize(20, 25);
-      } else {
-        Point control_preferredSize = control.computeSize(SWT.DEFAULT, SWT.DEFAULT);
-        Point item_preferredSize =
-            item.computeSize(control_preferredSize.x, control_preferredSize.y);
-        item.setSize(item_preferredSize);
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void refresh_afterCreate() throws Exception {
+		super.refresh_afterCreate();
+		// ensure that each CoolItem has reasonable size
+		for (CoolItemInfo itemInfo : getItems()) {
+			CoolItem item = (CoolItem) itemInfo.getObject();
+			Control control = item.getControl();
+			if (control == null) {
+				item.setSize(20, 25);
+			} else {
+				Point control_preferredSize = control.computeSize(SWT.DEFAULT, SWT.DEFAULT);
+				Point item_preferredSize =
+						item.computeSize(control_preferredSize.x, control_preferredSize.y);
+				item.setSize(item_preferredSize);
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final IObjectPresentation m_presentation = new DefaultJavaInfoPresentation(this) {
-    @Override
-    public List<ObjectInfo> getChildrenTree() throws Exception {
-      List<ObjectInfo> children = Lists.newArrayList(super.getChildrenTree());
-      removeItemControls(children);
-      return children;
-    }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final IObjectPresentation m_presentation = new DefaultJavaInfoPresentation(this) {
+		@Override
+		public List<ObjectInfo> getChildrenTree() throws Exception {
+			List<ObjectInfo> children = Lists.newArrayList(super.getChildrenTree());
+			removeItemControls(children);
+			return children;
+		}
 
-    @Override
-    public List<ObjectInfo> getChildrenGraphical() throws Exception {
-      List<ObjectInfo> children = Lists.newArrayList(super.getChildrenGraphical());
-      removeItemControls(children);
-      return children;
-    }
+		@Override
+		public List<ObjectInfo> getChildrenGraphical() throws Exception {
+			List<ObjectInfo> children = Lists.newArrayList(super.getChildrenGraphical());
+			removeItemControls(children);
+			return children;
+		}
 
-    private void removeItemControls(List<ObjectInfo> children) {
-      for (CoolItemInfo item : getItems()) {
-        children.remove(item.getControl());
-      }
-    }
-  };
+		private void removeItemControls(List<ObjectInfo> children) {
+			for (CoolItemInfo item : getItems()) {
+				children.remove(item.getControl());
+			}
+		}
+	};
 
-  @Override
-  public IObjectPresentation getPresentation() {
-    return m_presentation;
-  }
+	@Override
+	public IObjectPresentation getPresentation() {
+		return m_presentation;
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/CoolItemInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/CoolItemInfo.java
index 6f5767c52..4007a9ed9 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/CoolItemInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/CoolItemInfo.java
@@ -45,184 +45,184 @@
  * @coverage rcp.model.widgets
  */
 public final class CoolItemInfo extends ItemInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CoolItemInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-    addBroadcastListener(new JavaEventListener() {
-      private ControlInfo m_ourControl;
-
-      @Override
-      public void moveBefore(JavaInfo child, ObjectInfo oldParent, JavaInfo newParent)
-          throws Exception {
-        // remove setControl() invocation when move ControlInfo in/from our CoolBar
-        if (oldParent == getParent() && child instanceof ControlInfo && getControl() == child) {
-          removeMethodInvocations("setControl(org.eclipse.swt.widgets.Control)");
-        }
-        // when WE are moved, remove possible setControl() invocation
-        if (child == CoolItemInfo.this) {
-          m_ourControl = getControl();
-          removeMethodInvocations("setControl(org.eclipse.swt.widgets.Control)");
-        }
-      }
-
-      @Override
-      public void variable_addStatementsToMove(JavaInfo parent, List<JavaInfo> children)
-          throws Exception {
-        if (parent == CoolItemInfo.this) {
-          if (m_ourControl != null) {
-            children.add(m_ourControl);
-          }
-        }
-      }
-
-      @Override
-      public void moveAfter(JavaInfo child, ObjectInfo oldParent, JavaInfo newParent)
-          throws Exception {
-        // if WE were moved, move our ControlInfo
-        if (child == CoolItemInfo.this) {
-          if (m_ourControl != null) {
-            command_ADD(m_ourControl);
-          }
-        }
-      }
-    });
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final IObjectPresentation m_presentation = new DefaultJavaInfoPresentation(this) {
-    @Override
-    public List<ObjectInfo> getChildrenTree() throws Exception {
-      ControlInfo control = getControl();
-      return GenericsUtils.singletonList(control);
-    }
-
-    @Override
-    public List<ObjectInfo> getChildrenGraphical() throws Exception {
-      return getChildrenTree();
-    }
-  };
-
-  @Override
-  public IObjectPresentation getPresentation() {
-    return m_presentation;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return list with single {@link #getControl()} or empty.
-   */
-  public final List<ObjectInfo> getSimpleContainerChildren() {
-    ObjectInfo control = getControl();
-    if (control != null) {
-      return ImmutableList.of(control);
-    } else {
-      return ImmutableList.of();
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void refresh_fetch() throws Exception {
-    {
-      Object boundsObject = ReflectionUtils.invokeMethod2(getObject(), "getBounds");
-      Rectangle bounds = RectangleSupport.getRectangle(boundsObject);
-      setModelBounds(bounds);
-    }
-    super.refresh_fetch();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // setControl() support
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link ControlInfo} set using
-   *         {@link CoolItem#setControl(org.eclipse.swt.widgets.Control)}, may be <code>null</code>.
-   */
-  public ControlInfo getControl() {
-    MethodInvocation invocation =
-        getMethodInvocation("setControl(org.eclipse.swt.widgets.Control)");
-    if (invocation != null) {
-      Expression controlExpression = DomGenerics.arguments(invocation).get(0);
-      return (ControlInfo) getParentJava().getChildRepresentedBy(controlExpression);
-    }
-    return null;
-  }
-
-  /**
-   * Adds new {@link ControlInfo} to {@link CoolBarInfo} and associates with given
-   * {@link CoolItemInfo} set using {@link CoolItem#setControl(org.eclipse.swt.widgets.Control)}.
-   */
-  public void command_CREATE(ControlInfo control) throws Exception {
-    // add to CoolBar
-    {
-      StatementTarget target = JavaInfoUtils.getTarget(this, control, null);
-      JavaInfoUtils.addTarget(control, null, getParentJava(), target);
-    }
-    // add setControl() invocation
-    addSetControlInvocation(control);
-  }
-
-  /**
-   * Adds existing {@link ControlInfo} to {@link CoolBarInfo} and associates with given
-   * {@link CoolItemInfo} set using {@link CoolItem#setControl(org.eclipse.swt.widgets.Control)}.
-   */
-  public void command_ADD(final ControlInfo control) throws Exception {
-    // move to CoolBar, but code inside of CoolItem
-    {
-      final CoolBarInfo coolBar = (CoolBarInfo) getParentJava();
-      final StatementTarget target = JavaInfoUtils.getTarget(this, control, null);
-      IMoveTargetProvider targetProvider = new IMoveTargetProvider() {
-        @Override
-        public void add() throws Exception {
-          coolBar.addChild(control, getNextJavaInfo());
-        }
-
-        @Override
-        public void move() throws Exception {
-          coolBar.moveChild(control, getNextJavaInfo());
-        }
-
-        @Override
-        public StatementTarget getTarget() throws Exception {
-          return target;
-        }
-
-        private JavaInfo getNextJavaInfo() {
-          return GenericsUtils.getNextOrNull(coolBar.getChildrenJava(), CoolItemInfo.this);
-        }
-      };
-      JavaInfoUtils.moveProvider(control, null, coolBar, targetProvider);
-    }
-    // add setControl() invocation
-    addSetControlInvocation(control);
-  }
-
-  /**
-   * Adds {@link CoolItem#setControl(org.eclipse.swt.widgets.Control)} invocation.
-   */
-  private void addSetControlInvocation(ControlInfo control) throws Exception {
-    String source = TemplateUtils.format("{0}.setControl({1})", this, control);
-    Expression expression = control.addExpressionStatement(source);
-    addRelatedNodes(expression);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CoolItemInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+		addBroadcastListener(new JavaEventListener() {
+			private ControlInfo m_ourControl;
+
+			@Override
+			public void moveBefore(JavaInfo child, ObjectInfo oldParent, JavaInfo newParent)
+					throws Exception {
+				// remove setControl() invocation when move ControlInfo in/from our CoolBar
+				if (oldParent == getParent() && child instanceof ControlInfo && getControl() == child) {
+					removeMethodInvocations("setControl(org.eclipse.swt.widgets.Control)");
+				}
+				// when WE are moved, remove possible setControl() invocation
+				if (child == CoolItemInfo.this) {
+					m_ourControl = getControl();
+					removeMethodInvocations("setControl(org.eclipse.swt.widgets.Control)");
+				}
+			}
+
+			@Override
+			public void variable_addStatementsToMove(JavaInfo parent, List<JavaInfo> children)
+					throws Exception {
+				if (parent == CoolItemInfo.this) {
+					if (m_ourControl != null) {
+						children.add(m_ourControl);
+					}
+				}
+			}
+
+			@Override
+			public void moveAfter(JavaInfo child, ObjectInfo oldParent, JavaInfo newParent)
+					throws Exception {
+				// if WE were moved, move our ControlInfo
+				if (child == CoolItemInfo.this) {
+					if (m_ourControl != null) {
+						command_ADD(m_ourControl);
+					}
+				}
+			}
+		});
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final IObjectPresentation m_presentation = new DefaultJavaInfoPresentation(this) {
+		@Override
+		public List<ObjectInfo> getChildrenTree() throws Exception {
+			ControlInfo control = getControl();
+			return GenericsUtils.singletonList(control);
+		}
+
+		@Override
+		public List<ObjectInfo> getChildrenGraphical() throws Exception {
+			return getChildrenTree();
+		}
+	};
+
+	@Override
+	public IObjectPresentation getPresentation() {
+		return m_presentation;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return list with single {@link #getControl()} or empty.
+	 */
+	public final List<ObjectInfo> getSimpleContainerChildren() {
+		ObjectInfo control = getControl();
+		if (control != null) {
+			return ImmutableList.of(control);
+		} else {
+			return ImmutableList.of();
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void refresh_fetch() throws Exception {
+		{
+			Object boundsObject = ReflectionUtils.invokeMethod2(getObject(), "getBounds");
+			Rectangle bounds = RectangleSupport.getRectangle(boundsObject);
+			setModelBounds(bounds);
+		}
+		super.refresh_fetch();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// setControl() support
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link ControlInfo} set using
+	 *         {@link CoolItem#setControl(org.eclipse.swt.widgets.Control)}, may be <code>null</code>.
+	 */
+	public ControlInfo getControl() {
+		MethodInvocation invocation =
+				getMethodInvocation("setControl(org.eclipse.swt.widgets.Control)");
+		if (invocation != null) {
+			Expression controlExpression = DomGenerics.arguments(invocation).get(0);
+			return (ControlInfo) getParentJava().getChildRepresentedBy(controlExpression);
+		}
+		return null;
+	}
+
+	/**
+	 * Adds new {@link ControlInfo} to {@link CoolBarInfo} and associates with given
+	 * {@link CoolItemInfo} set using {@link CoolItem#setControl(org.eclipse.swt.widgets.Control)}.
+	 */
+	public void command_CREATE(ControlInfo control) throws Exception {
+		// add to CoolBar
+		{
+			StatementTarget target = JavaInfoUtils.getTarget(this, control, null);
+			JavaInfoUtils.addTarget(control, null, getParentJava(), target);
+		}
+		// add setControl() invocation
+		addSetControlInvocation(control);
+	}
+
+	/**
+	 * Adds existing {@link ControlInfo} to {@link CoolBarInfo} and associates with given
+	 * {@link CoolItemInfo} set using {@link CoolItem#setControl(org.eclipse.swt.widgets.Control)}.
+	 */
+	public void command_ADD(final ControlInfo control) throws Exception {
+		// move to CoolBar, but code inside of CoolItem
+		{
+			final CoolBarInfo coolBar = (CoolBarInfo) getParentJava();
+			final StatementTarget target = JavaInfoUtils.getTarget(this, control, null);
+			IMoveTargetProvider targetProvider = new IMoveTargetProvider() {
+				@Override
+				public void add() throws Exception {
+					coolBar.addChild(control, getNextJavaInfo());
+				}
+
+				@Override
+				public void move() throws Exception {
+					coolBar.moveChild(control, getNextJavaInfo());
+				}
+
+				@Override
+				public StatementTarget getTarget() throws Exception {
+					return target;
+				}
+
+				private JavaInfo getNextJavaInfo() {
+					return GenericsUtils.getNextOrNull(coolBar.getChildrenJava(), CoolItemInfo.this);
+				}
+			};
+			JavaInfoUtils.moveProvider(control, null, coolBar, targetProvider);
+		}
+		// add setControl() invocation
+		addSetControlInvocation(control);
+	}
+
+	/**
+	 * Adds {@link CoolItem#setControl(org.eclipse.swt.widgets.Control)} invocation.
+	 */
+	private void addSetControlInvocation(ControlInfo control) throws Exception {
+		String source = TemplateUtils.format("{0}.setControl({1})", this, control);
+		Expression expression = control.addExpressionStatement(source);
+		addRelatedNodes(expression);
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/DialogInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/DialogInfo.java
index bdc16ce1a..08b8f1065 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/DialogInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/DialogInfo.java
@@ -52,162 +52,162 @@
  * @coverage rcp.model.widgets
  */
 public final class DialogInfo extends AbstractComponentInfo
-    implements
-      IThisMethodParameterEvaluator {
-  private Shell m_shell;
-  private ShellInfo m_shellInfo;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DialogInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-    ensureNamesForConstructors();
-    addBroadcastListener(new JavaEventListener() {
-      @Override
-      public void bindComponents(List<JavaInfo> components) throws Exception {
-        fetchShell(components);
-      }
-    });
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Initialize
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void ensureNamesForConstructors() {
-    for (ConstructorDescription constructor : getDescription().getConstructors()) {
-      List<ParameterDescription> parameters = constructor.getParameters();
-      for (int i = 0; i < parameters.size(); i++) {
-        ParameterDescription parameter = parameters.get(i);
-        if (parameter.getName() == null) {
-          parameter.setName("arg" + i);
-        }
-      }
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IThisMethodParameterEvaluator
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Object evaluateParameter(EvaluationContext context,
-      MethodDeclaration methodDeclaration,
-      String methodSignature,
-      SingleVariableDeclaration parameter,
-      int index) throws Exception {
-    if (ObjectUtils.equals(parameter.getName().getIdentifier(), "style")) {
-      return SWT.DIALOG_TRIM;
-    }
-    return AstEvaluationEngine.UNKNOWN;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Hierarchy
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean canBeRoot() {
-    return true;
-  }
-
-  @Override
-  protected TopBoundsSupport createTopBoundsSupport() {
-    return new DialogTopBoundsSupport(this);
-  }
-
-  @Override
-  public Object getComponentObject() {
-    return m_shell;
-  }
-
-  /**
-   * @return the {@link DialogInfo}'s Shell.
-   */
-  Object getShell() {
-    return m_shell;
-  }
-
-  /**
-   * @return the {@link DialogInfo}'s {@link ShellInfo}.
-   */
-  public ShellInfo getShellInfo() {
-    return m_shellInfo;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void refresh_dispose() throws Exception {
-    if (m_shell != null) {
-      m_shell.dispose();
-      m_shell = null;
-    }
-    m_shellInfo = null;
-    super.refresh_dispose();
-  }
-
-  @Override
-  protected void refresh_afterCreate() throws Exception {
-    fetchShell(getChildrenJava());
-    super.refresh_afterCreate();
-  }
-
-  @Override
-  protected void refresh_fetch() throws Exception {
-    ControlInfo.refresh_fetch(this, new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        DialogInfo.super.refresh_fetch();
-      }
-    });
-  }
-
-  /**
-   * Fills field {@link #m_shell}.
-   */
-  private void fetchShell(List<JavaInfo> components) {
-    m_shellInfo = GenericsUtils.get(ShellInfo.class, components);
-    Assert.isTrueException(m_shellInfo != null, IExceptionConstants.SWT_DIALOG_NO_MAIN_SHELL);
-    JavaInfoUtils.setParameter(m_shellInfo, "SWT.isRoot", "true");
-    m_shell = (Shell) m_shellInfo.getObject();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Model creation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-
-  public static Class<?> getNotAbstractDialog(ClassLoader classLoader)
-      throws ClassNotFoundException {
-    try {
-      return classLoader.loadClass("org.eclipse.swt.widgets.Dialog_");
-    } catch (ClassNotFoundException e) {
-      return new ByteBuddy()
-          .subclass(classLoader.loadClass("org.eclipse.swt.widgets.Dialog")) //
-          .name("org.eclipse.swt.widgets.Dialog_") //
-          .make() // We have to use injection to load the class in the CreationSupport
-          .load(classLoader, ClassLoadingStrategy.Default.INJECTION) //
-          .getLoaded();
-    }
-  }
-
-  public static void contributeExecutionFlow(TypeDeclaration typeDeclaration,
-      List<MethodDeclaration> methods) throws Exception {
-    MethodDeclaration method = AstNodeUtils.getMethodByName(typeDeclaration, "open");
-    Assert.isTrueException(method != null, IExceptionConstants.SWT_DIALOG_NO_OPEN_METHOD);
-    methods.add(method);
-  }
+implements
+IThisMethodParameterEvaluator {
+	private Shell m_shell;
+	private ShellInfo m_shellInfo;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DialogInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+		ensureNamesForConstructors();
+		addBroadcastListener(new JavaEventListener() {
+			@Override
+			public void bindComponents(List<JavaInfo> components) throws Exception {
+				fetchShell(components);
+			}
+		});
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Initialize
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void ensureNamesForConstructors() {
+		for (ConstructorDescription constructor : getDescription().getConstructors()) {
+			List<ParameterDescription> parameters = constructor.getParameters();
+			for (int i = 0; i < parameters.size(); i++) {
+				ParameterDescription parameter = parameters.get(i);
+				if (parameter.getName() == null) {
+					parameter.setName("arg" + i);
+				}
+			}
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IThisMethodParameterEvaluator
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Object evaluateParameter(EvaluationContext context,
+			MethodDeclaration methodDeclaration,
+			String methodSignature,
+			SingleVariableDeclaration parameter,
+			int index) throws Exception {
+		if (ObjectUtils.equals(parameter.getName().getIdentifier(), "style")) {
+			return SWT.DIALOG_TRIM;
+		}
+		return AstEvaluationEngine.UNKNOWN;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Hierarchy
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean canBeRoot() {
+		return true;
+	}
+
+	@Override
+	protected TopBoundsSupport createTopBoundsSupport() {
+		return new DialogTopBoundsSupport(this);
+	}
+
+	@Override
+	public Object getComponentObject() {
+		return m_shell;
+	}
+
+	/**
+	 * @return the {@link DialogInfo}'s Shell.
+	 */
+	Object getShell() {
+		return m_shell;
+	}
+
+	/**
+	 * @return the {@link DialogInfo}'s {@link ShellInfo}.
+	 */
+	public ShellInfo getShellInfo() {
+		return m_shellInfo;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void refresh_dispose() throws Exception {
+		if (m_shell != null) {
+			m_shell.dispose();
+			m_shell = null;
+		}
+		m_shellInfo = null;
+		super.refresh_dispose();
+	}
+
+	@Override
+	protected void refresh_afterCreate() throws Exception {
+		fetchShell(getChildrenJava());
+		super.refresh_afterCreate();
+	}
+
+	@Override
+	protected void refresh_fetch() throws Exception {
+		ControlInfo.refresh_fetch(this, new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				DialogInfo.super.refresh_fetch();
+			}
+		});
+	}
+
+	/**
+	 * Fills field {@link #m_shell}.
+	 */
+	private void fetchShell(List<JavaInfo> components) {
+		m_shellInfo = GenericsUtils.get(ShellInfo.class, components);
+		Assert.isTrueException(m_shellInfo != null, IExceptionConstants.SWT_DIALOG_NO_MAIN_SHELL);
+		JavaInfoUtils.setParameter(m_shellInfo, "SWT.isRoot", "true");
+		m_shell = (Shell) m_shellInfo.getObject();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Model creation
+	//
+	////////////////////////////////////////////////////////////////////////////
+
+	public static Class<?> getNotAbstractDialog(ClassLoader classLoader)
+			throws ClassNotFoundException {
+		try {
+			return classLoader.loadClass("org.eclipse.swt.widgets.Dialog_");
+		} catch (ClassNotFoundException e) {
+			return new ByteBuddy()
+					.subclass(classLoader.loadClass("org.eclipse.swt.widgets.Dialog")) //
+					.name("org.eclipse.swt.widgets.Dialog_") //
+					.make() // We have to use injection to load the class in the CreationSupport
+					.load(classLoader, ClassLoadingStrategy.Default.INJECTION) //
+					.getLoaded();
+		}
+	}
+
+	public static void contributeExecutionFlow(TypeDeclaration typeDeclaration,
+			List<MethodDeclaration> methods) throws Exception {
+		MethodDeclaration method = AstNodeUtils.getMethodByName(typeDeclaration, "open");
+		Assert.isTrueException(method != null, IExceptionConstants.SWT_DIALOG_NO_OPEN_METHOD);
+		methods.add(method);
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/DialogTopBoundsSupport.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/DialogTopBoundsSupport.java
index 1fb4036a1..3b02c5af0 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/DialogTopBoundsSupport.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/DialogTopBoundsSupport.java
@@ -20,40 +20,40 @@
  * @coverage rcp.model.widgets
  */
 public final class DialogTopBoundsSupport extends TopBoundsSupport {
-  private final TopBoundsSupport m_shell;
+	private final TopBoundsSupport m_shell;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DialogTopBoundsSupport(DialogInfo dialog) {
-    super(dialog);
-    m_shell = dialog.getShellInfo().getTopBoundsSupport();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DialogTopBoundsSupport(DialogInfo dialog) {
+		super(dialog);
+		m_shell = dialog.getShellInfo().getTopBoundsSupport();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // TopBoundsSupport
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void apply() throws Exception {
-    m_shell.apply();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// TopBoundsSupport
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void apply() throws Exception {
+		m_shell.apply();
+	}
 
-  @Override
-  public void setSize(int width, int height) throws Exception {
-    m_shell.setSize(width, height);
-  }
+	@Override
+	public void setSize(int width, int height) throws Exception {
+		m_shell.setSize(width, height);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Show
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean show() throws Exception {
-    return m_shell.show();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Show
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean show() throws Exception {
+		return m_shell.show();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/DragSourceInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/DragSourceInfo.java
index 63d66b0b0..27a73152a 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/DragSourceInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/DragSourceInfo.java
@@ -24,14 +24,14 @@
  * @coverage rcp.model.widgets
  */
 public final class DragSourceInfo extends ItemInfo implements IDragSourceInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DragSourceInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DragSourceInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/DropTargetInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/DropTargetInfo.java
index fe562bbda..a42d6ea8f 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/DropTargetInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/DropTargetInfo.java
@@ -24,14 +24,14 @@
  * @coverage rcp.model.widgets
  */
 public final class DropTargetInfo extends ItemInfo implements IDropTargetInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DropTargetInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DropTargetInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/ExpandBarInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/ExpandBarInfo.java
index 529c44511..fb763e4d5 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/ExpandBarInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/ExpandBarInfo.java
@@ -31,71 +31,71 @@
  * @coverage rcp.model.widgets
  */
 public final class ExpandBarInfo extends CompositeInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ExpandBarInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ExpandBarInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link ExpandItemInfo} children.
-   */
-  public List<ExpandItemInfo> getItems() {
-    return getChildren(ExpandItemInfo.class);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link ExpandItemInfo} children.
+	 */
+	public List<ExpandItemInfo> getItems() {
+		return getChildren(ExpandItemInfo.class);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void refresh_fetch() throws Exception {
-    super.refresh_fetch();
-    for (ExpandItemInfo item : getItems()) {
-      item.fixControlBounds();
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void refresh_fetch() throws Exception {
+		super.refresh_fetch();
+		for (ExpandItemInfo item : getItems()) {
+			item.fixControlBounds();
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final IObjectPresentation m_presentation = new DefaultJavaInfoPresentation(this) {
-    @Override
-    public List<ObjectInfo> getChildrenTree() throws Exception {
-      List<ObjectInfo> children = Lists.newArrayList(super.getChildrenTree());
-      removeItemControls(children);
-      return children;
-    }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final IObjectPresentation m_presentation = new DefaultJavaInfoPresentation(this) {
+		@Override
+		public List<ObjectInfo> getChildrenTree() throws Exception {
+			List<ObjectInfo> children = Lists.newArrayList(super.getChildrenTree());
+			removeItemControls(children);
+			return children;
+		}
 
-    @Override
-    public List<ObjectInfo> getChildrenGraphical() throws Exception {
-      List<ObjectInfo> children = Lists.newArrayList(super.getChildrenGraphical());
-      removeItemControls(children);
-      return children;
-    }
+		@Override
+		public List<ObjectInfo> getChildrenGraphical() throws Exception {
+			List<ObjectInfo> children = Lists.newArrayList(super.getChildrenGraphical());
+			removeItemControls(children);
+			return children;
+		}
 
-    private void removeItemControls(List<ObjectInfo> children) {
-      for (ExpandItemInfo item : getItems()) {
-        children.remove(item.getControl());
-      }
-    }
-  };
+		private void removeItemControls(List<ObjectInfo> children) {
+			for (ExpandItemInfo item : getItems()) {
+				children.remove(item.getControl());
+			}
+		}
+	};
 
-  @Override
-  public IObjectPresentation getPresentation() {
-    return m_presentation;
-  }
+	@Override
+	public IObjectPresentation getPresentation() {
+		return m_presentation;
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/ExpandItemInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/ExpandItemInfo.java
index c34183c4b..a2a81cc29 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/ExpandItemInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/ExpandItemInfo.java
@@ -47,233 +47,233 @@
  * @coverage rcp.model.widgets
  */
 public final class ExpandItemInfo extends ItemInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ExpandItemInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-    addBroadcastListener(new JavaEventListener() {
-      private ControlInfo m_ourControl;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ExpandItemInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+		addBroadcastListener(new JavaEventListener() {
+			private ControlInfo m_ourControl;
 
-      @Override
-      public void moveBefore(JavaInfo child, ObjectInfo oldParent, JavaInfo newParent)
-          throws Exception {
-        // remove setControl() invocation when move ControlInfo in/from our ExpandBar
-        if (oldParent == getParent() && child instanceof ControlInfo && getControl() == child) {
-          removeMethodInvocations("setControl(org.eclipse.swt.widgets.Control)");
-          removeMethodInvocations("setHeight(int)");
-        }
-        // when WE are moved, remove possible setControl() invocation
-        if (child == ExpandItemInfo.this) {
-          m_ourControl = getControl();
-          removeMethodInvocations("setControl(org.eclipse.swt.widgets.Control)");
-        }
-      }
+			@Override
+			public void moveBefore(JavaInfo child, ObjectInfo oldParent, JavaInfo newParent)
+					throws Exception {
+				// remove setControl() invocation when move ControlInfo in/from our ExpandBar
+				if (oldParent == getParent() && child instanceof ControlInfo && getControl() == child) {
+					removeMethodInvocations("setControl(org.eclipse.swt.widgets.Control)");
+					removeMethodInvocations("setHeight(int)");
+				}
+				// when WE are moved, remove possible setControl() invocation
+				if (child == ExpandItemInfo.this) {
+					m_ourControl = getControl();
+					removeMethodInvocations("setControl(org.eclipse.swt.widgets.Control)");
+				}
+			}
 
-      @Override
-      public void variable_addStatementsToMove(JavaInfo parent, List<JavaInfo> children)
-          throws Exception {
-        if (parent == ExpandItemInfo.this) {
-          if (m_ourControl != null) {
-            children.add(m_ourControl);
-          }
-        }
-      }
+			@Override
+			public void variable_addStatementsToMove(JavaInfo parent, List<JavaInfo> children)
+					throws Exception {
+				if (parent == ExpandItemInfo.this) {
+					if (m_ourControl != null) {
+						children.add(m_ourControl);
+					}
+				}
+			}
 
-      @Override
-      public void moveAfter(JavaInfo child, ObjectInfo oldParent, JavaInfo newParent)
-          throws Exception {
-        // if WE were moved, move our ControlInfo
-        if (child == ExpandItemInfo.this) {
-          if (m_ourControl != null) {
-            command_ADD(m_ourControl);
-          }
-        }
-      }
-    });
-  }
+			@Override
+			public void moveAfter(JavaInfo child, ObjectInfo oldParent, JavaInfo newParent)
+					throws Exception {
+				// if WE were moved, move our ControlInfo
+				if (child == ExpandItemInfo.this) {
+					if (m_ourControl != null) {
+						command_ADD(m_ourControl);
+					}
+				}
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private boolean isExpanded() throws Exception {
-    return (Boolean) ReflectionUtils.invokeMethod(getObject(), "getExpanded()");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private boolean isExpanded() throws Exception {
+		return (Boolean) ReflectionUtils.invokeMethod(getObject(), "getExpanded()");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final IObjectPresentation m_presentation = new DefaultJavaInfoPresentation(this) {
-    @Override
-    public List<ObjectInfo> getChildrenTree() throws Exception {
-      ControlInfo control = getControl();
-      return GenericsUtils.singletonList(control);
-    }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final IObjectPresentation m_presentation = new DefaultJavaInfoPresentation(this) {
+		@Override
+		public List<ObjectInfo> getChildrenTree() throws Exception {
+			ControlInfo control = getControl();
+			return GenericsUtils.singletonList(control);
+		}
 
-    @Override
-    public List<ObjectInfo> getChildrenGraphical() throws Exception {
-      if (!isExpanded()) {
-        return ImmutableList.of();
-      }
-      return getChildrenTree();
-    }
-  };
+		@Override
+		public List<ObjectInfo> getChildrenGraphical() throws Exception {
+			if (!isExpanded()) {
+				return ImmutableList.of();
+			}
+			return getChildrenTree();
+		}
+	};
 
-  @Override
-  public IObjectPresentation getPresentation() {
-    return m_presentation;
-  }
+	@Override
+	public IObjectPresentation getPresentation() {
+		return m_presentation;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void refresh_fetch() throws Exception {
-    {
-      Object object = getObject();
-      int headerHeight = (Integer) ReflectionUtils.invokeMethod2(object, "getHeaderHeight");
-      int width = ReflectionUtils.getFieldInt(object, "width");
-      int height = ReflectionUtils.getFieldInt(object, "height");
-      if (isExpanded()) {
-        height += headerHeight;
-      } else {
-        height = headerHeight;
-      }
-      // x & y fields may not exist on every platform
-      // but as far as I can tell, they are always initialized with 0
-      setModelBounds(new Rectangle(0, 0, width, height));
-    }
-    super.refresh_fetch();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void refresh_fetch() throws Exception {
+		{
+			Object object = getObject();
+			int headerHeight = (Integer) ReflectionUtils.invokeMethod2(object, "getHeaderHeight");
+			int width = ReflectionUtils.getFieldInt(object, "width");
+			int height = ReflectionUtils.getFieldInt(object, "height");
+			if (isExpanded()) {
+				height += headerHeight;
+			} else {
+				height = headerHeight;
+			}
+			// x & y fields may not exist on every platform
+			// but as far as I can tell, they are always initialized with 0
+			setModelBounds(new Rectangle(0, 0, width, height));
+		}
+		super.refresh_fetch();
+	}
 
-  /**
-   * {@link Control} returns bounds on {@link ExpandBar}, but we show it as child of
-   * {@link ExpandItem}, so we should tweak {@link Control} bounds.
-   */
-  void fixControlBounds() {
-    ControlInfo control = getControl();
-    if (control != null) {
-      {
-        Point offset = getModelBounds().getLocation().getNegated();
-        control.getModelBounds().performTranslate(offset);
-      }
-      {
-        Point offset = getBounds().getLocation().getNegated();
-        control.getBounds().performTranslate(offset);
-      }
-    }
-  }
+	/**
+	 * {@link Control} returns bounds on {@link ExpandBar}, but we show it as child of
+	 * {@link ExpandItem}, so we should tweak {@link Control} bounds.
+	 */
+	void fixControlBounds() {
+		ControlInfo control = getControl();
+		if (control != null) {
+			{
+				Point offset = getModelBounds().getLocation().getNegated();
+				control.getModelBounds().performTranslate(offset);
+			}
+			{
+				Point offset = getBounds().getLocation().getNegated();
+				control.getBounds().performTranslate(offset);
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // setControl() support
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link ControlInfo} set using
-   *         {@link ExpandItem#setControl(org.eclipse.swt.widgets.Control)}, may be
-   *         <code>null</code>.
-   */
-  public ControlInfo getControl() {
-    MethodInvocation invocation =
-        getMethodInvocation("setControl(org.eclipse.swt.widgets.Control)");
-    if (invocation != null) {
-      Expression controlExpression = DomGenerics.arguments(invocation).get(0);
-      return (ControlInfo) getParentJava().getChildRepresentedBy(controlExpression);
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// setControl() support
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link ControlInfo} set using
+	 *         {@link ExpandItem#setControl(org.eclipse.swt.widgets.Control)}, may be
+	 *         <code>null</code>.
+	 */
+	public ControlInfo getControl() {
+		MethodInvocation invocation =
+				getMethodInvocation("setControl(org.eclipse.swt.widgets.Control)");
+		if (invocation != null) {
+			Expression controlExpression = DomGenerics.arguments(invocation).get(0);
+			return (ControlInfo) getParentJava().getChildRepresentedBy(controlExpression);
+		}
+		return null;
+	}
 
-  /**
-   * Adds new {@link ControlInfo} to {@link ExpandBarInfo} and associates with given
-   * {@link ExpandItemInfo} set using {@link ExpandItem#setControl(org.eclipse.swt.widgets.Control)}
-   * .
-   */
-  public void command_CREATE(ControlInfo control) throws Exception {
-    addInvocation_setHeight();
-    // add to ExpandBar
-    {
-      StatementTarget target = JavaInfoUtils.getTarget(this, control, null);
-      JavaInfoUtils.addTarget(control, null, getParentJava(), target);
-    }
-    // add setControl() invocation
-    addInvocation_setControl(control);
-  }
+	/**
+	 * Adds new {@link ControlInfo} to {@link ExpandBarInfo} and associates with given
+	 * {@link ExpandItemInfo} set using {@link ExpandItem#setControl(org.eclipse.swt.widgets.Control)}
+	 * .
+	 */
+	public void command_CREATE(ControlInfo control) throws Exception {
+		addInvocation_setHeight();
+		// add to ExpandBar
+		{
+			StatementTarget target = JavaInfoUtils.getTarget(this, control, null);
+			JavaInfoUtils.addTarget(control, null, getParentJava(), target);
+		}
+		// add setControl() invocation
+		addInvocation_setControl(control);
+	}
 
-  /**
-   * After CREATE or ADD operation.
-   */
-  public void command_TARGET_after(ControlInfo control) throws Exception {
-    getPropertyByTitle("expanded").setValue(true);
-  }
+	/**
+	 * After CREATE or ADD operation.
+	 */
+	public void command_TARGET_after(ControlInfo control) throws Exception {
+		getPropertyByTitle("expanded").setValue(true);
+	}
 
-  /**
-   * Adds existing {@link ControlInfo} to {@link ExpandBarInfo} and associates with given
-   * {@link ExpandItemInfo} set using {@link ExpandItem#setControl(org.eclipse.swt.widgets.Control)}
-   * .
-   */
-  public void command_ADD(final ControlInfo control) throws Exception {
-    addInvocation_setHeight();
-    // move to ExpandBar, but code inside of ExpandItem
-    {
-      final ExpandBarInfo expandBar = (ExpandBarInfo) getParentJava();
-      final StatementTarget target = JavaInfoUtils.getTarget(this, control, null);
-      IMoveTargetProvider targetProvider = new IMoveTargetProvider() {
-        @Override
-        public void add() throws Exception {
-          expandBar.addChild(control, getNextJavaInfo());
-        }
+	/**
+	 * Adds existing {@link ControlInfo} to {@link ExpandBarInfo} and associates with given
+	 * {@link ExpandItemInfo} set using {@link ExpandItem#setControl(org.eclipse.swt.widgets.Control)}
+	 * .
+	 */
+	public void command_ADD(final ControlInfo control) throws Exception {
+		addInvocation_setHeight();
+		// move to ExpandBar, but code inside of ExpandItem
+		{
+			final ExpandBarInfo expandBar = (ExpandBarInfo) getParentJava();
+			final StatementTarget target = JavaInfoUtils.getTarget(this, control, null);
+			IMoveTargetProvider targetProvider = new IMoveTargetProvider() {
+				@Override
+				public void add() throws Exception {
+					expandBar.addChild(control, getNextJavaInfo());
+				}
 
-        @Override
-        public void move() throws Exception {
-          expandBar.moveChild(control, getNextJavaInfo());
-        }
+				@Override
+				public void move() throws Exception {
+					expandBar.moveChild(control, getNextJavaInfo());
+				}
 
-        @Override
-        public StatementTarget getTarget() throws Exception {
-          return target;
-        }
+				@Override
+				public StatementTarget getTarget() throws Exception {
+					return target;
+				}
 
-        private JavaInfo getNextJavaInfo() {
-          return GenericsUtils.getNextOrNull(expandBar.getChildrenJava(), ExpandItemInfo.this);
-        }
-      };
-      JavaInfoUtils.moveProvider(control, null, expandBar, targetProvider);
-    }
-    // associate with this item
-    addInvocation_setControl(control);
-  }
+				private JavaInfo getNextJavaInfo() {
+					return GenericsUtils.getNextOrNull(expandBar.getChildrenJava(), ExpandItemInfo.this);
+				}
+			};
+			JavaInfoUtils.moveProvider(control, null, expandBar, targetProvider);
+		}
+		// associate with this item
+		addInvocation_setControl(control);
+	}
 
-  /**
-   * Ensure that there is {@link ExpandItem#setHeight(int)} invocation.
-   */
-  private void addInvocation_setHeight() throws Exception {
-    if (getMethodInvocation("setHeight(int)") == null) {
-      String argument =
-          TemplateUtils.format(
-              "{0}.getControl().computeSize({1}, {1}).y",
-              this,
-              "org.eclipse.swt.SWT.DEFAULT");
-      addMethodInvocation("setHeight(int)", argument);
-    }
-  }
+	/**
+	 * Ensure that there is {@link ExpandItem#setHeight(int)} invocation.
+	 */
+	private void addInvocation_setHeight() throws Exception {
+		if (getMethodInvocation("setHeight(int)") == null) {
+			String argument =
+					TemplateUtils.format(
+							"{0}.getControl().computeSize({1}, {1}).y",
+							this,
+							"org.eclipse.swt.SWT.DEFAULT");
+			addMethodInvocation("setHeight(int)", argument);
+		}
+	}
 
-  /**
-   * Adds {@link ExpandItem#setControl(org.eclipse.swt.widgets.Control)} invocation.
-   */
-  private void addInvocation_setControl(ControlInfo control) throws Exception {
-    String source = TemplateUtils.format("{0}.setControl({1})", this, control);
-    Expression expression = control.addExpressionStatement(source);
-    addRelatedNodes(expression);
-  }
+	/**
+	 * Adds {@link ExpandItem#setControl(org.eclipse.swt.widgets.Control)} invocation.
+	 */
+	private void addInvocation_setControl(ControlInfo control) throws Exception {
+		String source = TemplateUtils.format("{0}.setControl({1})", this, control);
+		Expression expression = control.addExpressionStatement(source);
+		addRelatedNodes(expression);
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/ISashFormInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/ISashFormInfo.java
index dfbd81d24..b395f6546 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/ISashFormInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/ISashFormInfo.java
@@ -22,38 +22,38 @@
  * @coverage rcp.model.widgets
  */
 public interface ISashFormInfo<C extends IControlInfo> extends ICompositeInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if this {@link SashForm} has horizontal layout.
-   */
-  public boolean isHorizontal();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if this {@link SashForm} has horizontal layout.
+	 */
+	public boolean isHorizontal();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Creates new {@link IControlInfo}.
-   */
-  void command_CREATE(C control, C nextControl) throws Exception;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Creates new {@link IControlInfo}.
+	 */
+	void command_CREATE(C control, C nextControl) throws Exception;
 
-  /**
-   * Moves existing {@link IControlInfo}.
-   */
-  void command_MOVE(C control, C nextControl) throws Exception;
+	/**
+	 * Moves existing {@link IControlInfo}.
+	 */
+	void command_MOVE(C control, C nextControl) throws Exception;
 
-  /**
-   * Sets requested size for {@link IControlInfo}.
-   *
-   * @param control
-   *          the {@link IControlInfo}, not last.
-   * @param size
-   *          the size that should be set for given {@link IControlInfo}.
-   */
-  void command_RESIZE(C control, int size) throws Exception;
+	/**
+	 * Sets requested size for {@link IControlInfo}.
+	 *
+	 * @param control
+	 *          the {@link IControlInfo}, not last.
+	 * @param size
+	 *          the size that should be set for given {@link IControlInfo}.
+	 */
+	void command_RESIZE(C control, int size) throws Exception;
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/ITreeColumnInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/ITreeColumnInfo.java
index 12234f4e5..48d0e6be8 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/ITreeColumnInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/ITreeColumnInfo.java
@@ -21,8 +21,8 @@
  * @coverage swt.model.widgets
  */
 public interface ITreeColumnInfo extends IItemInfo {
-  /**
-   * Sets width in pixels.
-   */
-  public void setWidth(int width) throws Exception;
+	/**
+	 * Sets width in pixels.
+	 */
+	public void setWidth(int width) throws Exception;
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/SashFormInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/SashFormInfo.java
index b0c7cffed..7ca92c9f5 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/SashFormInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/SashFormInfo.java
@@ -45,199 +45,199 @@
  * @coverage rcp.model.widgets
  */
 public final class SashFormInfo extends CompositeInfo implements ISashFormInfo<ControlInfo> {
-  private final SashFormInfo m_this = this;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SashFormInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-    // when remove ControlInfo: remove weight
-    addBroadcastListener(new ObjectInfoDelete() {
-      @Override
-      public void before(ObjectInfo parent, ObjectInfo child) throws Exception {
-        if (child instanceof ControlInfo && parent == m_this) {
-          removeWeight((ControlInfo) child);
-        }
-      }
-    });
-    addBroadcastListener(new JavaEventListener() {
-      @Override
-      public void moveBefore(JavaInfo child, ObjectInfo oldParent, JavaInfo newParent)
-          throws Exception {
-        if (child instanceof ControlInfo && oldParent == m_this && oldParent != newParent) {
-          removeWeight((ControlInfo) child);
-        }
-      }
-    });
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean isHorizontal() {
-    return ControlSupport.isStyle(getObject(), SWT.HORIZONTAL);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void command_CREATE(ControlInfo control, ControlInfo nextControl) throws Exception {
-    ensureWeights();
-    JavaInfoUtils.add(control, null, this, nextControl);
-    addWeight(control);
-  }
-
-  @Override
-  public void command_MOVE(ControlInfo control, ControlInfo nextControl) throws Exception {
-    ensureWeights();
-    int oldIndex = getChildrenControls().indexOf(control);
-    JavaInfoUtils.move(control, null, this, nextControl);
-    // update weights
-    if (oldIndex == -1) {
-      addWeight(control);
-    } else {
-      moveWeight(control, oldIndex);
-    }
-  }
-
-  @Override
-  public void command_RESIZE(ControlInfo control, int size) throws Exception {
-    ensureWeights();
-    List<ControlInfo> children = getChildrenControls();
-    // prepare weights as current sizes
-    int[] weights = new int[children.size()];
-    for (int i = 0; i < children.size(); i++) {
-      ControlInfo child = children.get(i);
-      Rectangle bounds = child.getModelBounds();
-      weights[i] = isHorizontal() ? bounds.width : bounds.height;
-    }
-    // update adjacent weights
-    int index = children.indexOf(control);
-    int sumWeight = weights[index] + weights[index + 1];
-    weights[index + 1] = Math.max(0, sumWeight - size);
-    weights[index] = sumWeight - weights[index + 1];
-    // set weights
-    setWeights(weights);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Weights operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds weight for {@link ControlInfo} that is already in children.
-   */
-  private void addWeight(ControlInfo newControl) throws Exception {
-    ArrayInitializer weightsExpression = ensureWeights();
-    int[] weights = getWeights(weightsExpression);
-    // prepare weight for "newControl"
-    int newWeight;
-    if (weights.length == 0) {
-      newWeight = 1;
-    } else {
-      newWeight = 0;
-      for (int i = 0; i < weights.length; i++) {
-        newWeight += weights[i];
-      }
-      newWeight /= weights.length;
-    }
-    // add weight
-    int newIndex = getChildrenControls().indexOf(newControl);
-    getEditor().addArrayElement(
-        weightsExpression,
-        newIndex,
-        IntegerConverter.INSTANCE.toJavaSource(this, newWeight));
-  }
-
-  /**
-   * Moves weight for {@link ControlInfo} that is already moved in children.
-   */
-  private void moveWeight(ControlInfo newControl, int oldIndex) throws Exception {
-    ArrayInitializer weightsExpression = ensureWeights();
-    int newIndex = getChildrenControls().indexOf(newControl);
-    getEditor().moveArrayElement(weightsExpression, weightsExpression, oldIndex, newIndex);
-  }
-
-  /**
-   * Removes weight for {@link ControlInfo} that is still in children.
-   */
-  private void removeWeight(ControlInfo control) throws Exception {
-    MethodInvocation invocation = getMethodInvocation("setWeights(int[])");
-    if (invocation != null) {
-      ArrayInitializer weightsExpression =
-          ((ArrayCreation) DomGenerics.arguments(invocation).get(0)).getInitializer();
-      int index = getChildrenControls().indexOf(control);
-      getEditor().removeArrayElement(weightsExpression, index);
-    }
-  }
-
-  /**
-   * Ensures that this {@link SashFormInfo} has "setWeights()" invocation.
-   *
-   * @return the {@link ArrayInitializer} for weights.
-   */
-  private ArrayInitializer ensureWeights() throws Exception {
-    MethodInvocation invocation = getMethodInvocation("setWeights(int[])");
-    if (invocation == null) {
-      String elementsSource;
-      {
-        elementsSource = StringUtils.repeat("1, ", getChildrenControls().size());
-        elementsSource = StringUtils.removeEnd(elementsSource, ", ");
-      }
-      // add invocation
-      String arraySource = "new int[] {" + elementsSource + "}";
-      invocation = addMethodInvocation("setWeights(int[])", arraySource);
-    }
-    return ((ArrayCreation) DomGenerics.arguments(invocation).get(0)).getInitializer();
-  }
-
-  /**
-   * @param weightsExpression
-   *          the argument of {@link SashForm#setWeights(int[])} argument.
-   *
-   * @return the current weights.
-   */
-  private int[] getWeights(ArrayInitializer weightsExpression) throws Exception {
-    EvaluationContext context;
-    {
-      AstEditor editor = getEditor();
-      EditorState state = EditorState.get(editor);
-      ClassLoader editorLoader = state.getEditorLoader();
-      context = new EvaluationContext(editorLoader, state.getFlowDescription());
-    }
-    // evaluate
-    return (int[]) AstEvaluationEngine.evaluate(context, weightsExpression);
-  }
-
-  /**
-   * Sets the weights for {@link SashForm#setWeights(int[])}.
-   */
-  private void setWeights(int[] weights) throws Exception {
-    String arraySource;
-    {
-      arraySource = "new int[] {";
-      for (int i = 0; i < weights.length; i++) {
-        if (i > 0) {
-          arraySource += ", ";
-        }
-        arraySource += weights[i];
-      }
-      arraySource += "}";
-    }
-    // replace "setWeight()" invocation
-    removeMethodInvocations("setWeights(int[])");
-    addMethodInvocation("setWeights(int[])", arraySource);
-  }
+	private final SashFormInfo m_this = this;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SashFormInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+		// when remove ControlInfo: remove weight
+		addBroadcastListener(new ObjectInfoDelete() {
+			@Override
+			public void before(ObjectInfo parent, ObjectInfo child) throws Exception {
+				if (child instanceof ControlInfo && parent == m_this) {
+					removeWeight((ControlInfo) child);
+				}
+			}
+		});
+		addBroadcastListener(new JavaEventListener() {
+			@Override
+			public void moveBefore(JavaInfo child, ObjectInfo oldParent, JavaInfo newParent)
+					throws Exception {
+				if (child instanceof ControlInfo && oldParent == m_this && oldParent != newParent) {
+					removeWeight((ControlInfo) child);
+				}
+			}
+		});
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean isHorizontal() {
+		return ControlSupport.isStyle(getObject(), SWT.HORIZONTAL);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void command_CREATE(ControlInfo control, ControlInfo nextControl) throws Exception {
+		ensureWeights();
+		JavaInfoUtils.add(control, null, this, nextControl);
+		addWeight(control);
+	}
+
+	@Override
+	public void command_MOVE(ControlInfo control, ControlInfo nextControl) throws Exception {
+		ensureWeights();
+		int oldIndex = getChildrenControls().indexOf(control);
+		JavaInfoUtils.move(control, null, this, nextControl);
+		// update weights
+		if (oldIndex == -1) {
+			addWeight(control);
+		} else {
+			moveWeight(control, oldIndex);
+		}
+	}
+
+	@Override
+	public void command_RESIZE(ControlInfo control, int size) throws Exception {
+		ensureWeights();
+		List<ControlInfo> children = getChildrenControls();
+		// prepare weights as current sizes
+		int[] weights = new int[children.size()];
+		for (int i = 0; i < children.size(); i++) {
+			ControlInfo child = children.get(i);
+			Rectangle bounds = child.getModelBounds();
+			weights[i] = isHorizontal() ? bounds.width : bounds.height;
+		}
+		// update adjacent weights
+		int index = children.indexOf(control);
+		int sumWeight = weights[index] + weights[index + 1];
+		weights[index + 1] = Math.max(0, sumWeight - size);
+		weights[index] = sumWeight - weights[index + 1];
+		// set weights
+		setWeights(weights);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Weights operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds weight for {@link ControlInfo} that is already in children.
+	 */
+	private void addWeight(ControlInfo newControl) throws Exception {
+		ArrayInitializer weightsExpression = ensureWeights();
+		int[] weights = getWeights(weightsExpression);
+		// prepare weight for "newControl"
+		int newWeight;
+		if (weights.length == 0) {
+			newWeight = 1;
+		} else {
+			newWeight = 0;
+			for (int i = 0; i < weights.length; i++) {
+				newWeight += weights[i];
+			}
+			newWeight /= weights.length;
+		}
+		// add weight
+		int newIndex = getChildrenControls().indexOf(newControl);
+		getEditor().addArrayElement(
+				weightsExpression,
+				newIndex,
+				IntegerConverter.INSTANCE.toJavaSource(this, newWeight));
+	}
+
+	/**
+	 * Moves weight for {@link ControlInfo} that is already moved in children.
+	 */
+	private void moveWeight(ControlInfo newControl, int oldIndex) throws Exception {
+		ArrayInitializer weightsExpression = ensureWeights();
+		int newIndex = getChildrenControls().indexOf(newControl);
+		getEditor().moveArrayElement(weightsExpression, weightsExpression, oldIndex, newIndex);
+	}
+
+	/**
+	 * Removes weight for {@link ControlInfo} that is still in children.
+	 */
+	private void removeWeight(ControlInfo control) throws Exception {
+		MethodInvocation invocation = getMethodInvocation("setWeights(int[])");
+		if (invocation != null) {
+			ArrayInitializer weightsExpression =
+					((ArrayCreation) DomGenerics.arguments(invocation).get(0)).getInitializer();
+			int index = getChildrenControls().indexOf(control);
+			getEditor().removeArrayElement(weightsExpression, index);
+		}
+	}
+
+	/**
+	 * Ensures that this {@link SashFormInfo} has "setWeights()" invocation.
+	 *
+	 * @return the {@link ArrayInitializer} for weights.
+	 */
+	private ArrayInitializer ensureWeights() throws Exception {
+		MethodInvocation invocation = getMethodInvocation("setWeights(int[])");
+		if (invocation == null) {
+			String elementsSource;
+			{
+				elementsSource = StringUtils.repeat("1, ", getChildrenControls().size());
+				elementsSource = StringUtils.removeEnd(elementsSource, ", ");
+			}
+			// add invocation
+			String arraySource = "new int[] {" + elementsSource + "}";
+			invocation = addMethodInvocation("setWeights(int[])", arraySource);
+		}
+		return ((ArrayCreation) DomGenerics.arguments(invocation).get(0)).getInitializer();
+	}
+
+	/**
+	 * @param weightsExpression
+	 *          the argument of {@link SashForm#setWeights(int[])} argument.
+	 *
+	 * @return the current weights.
+	 */
+	private int[] getWeights(ArrayInitializer weightsExpression) throws Exception {
+		EvaluationContext context;
+		{
+			AstEditor editor = getEditor();
+			EditorState state = EditorState.get(editor);
+			ClassLoader editorLoader = state.getEditorLoader();
+			context = new EvaluationContext(editorLoader, state.getFlowDescription());
+		}
+		// evaluate
+		return (int[]) AstEvaluationEngine.evaluate(context, weightsExpression);
+	}
+
+	/**
+	 * Sets the weights for {@link SashForm#setWeights(int[])}.
+	 */
+	private void setWeights(int[] weights) throws Exception {
+		String arraySource;
+		{
+			arraySource = "new int[] {";
+			for (int i = 0; i < weights.length; i++) {
+				if (i > 0) {
+					arraySource += ", ";
+				}
+				arraySource += weights[i];
+			}
+			arraySource += "}";
+		}
+		// replace "setWeight()" invocation
+		removeMethodInvocations("setWeights(int[])");
+		addMethodInvocation("setWeights(int[])", arraySource);
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/ScrolledCompositeInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/ScrolledCompositeInfo.java
index 53279658b..b1966ac06 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/ScrolledCompositeInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/ScrolledCompositeInfo.java
@@ -32,97 +32,97 @@
  * @coverage rcp.model.widgets
  */
 public final class ScrolledCompositeInfo extends CompositeInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ScrolledCompositeInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-    // when move ControlInfo out: remove "setContent()" and "setMinSize()" invocations
-    addBroadcastListener(new JavaEventListener() {
-      @Override
-      public void moveBefore(JavaInfo child, ObjectInfo oldParent, JavaInfo newParent)
-          throws Exception {
-        if (child instanceof ControlInfo && oldParent == ScrolledCompositeInfo.this) {
-          removeMethodInvocations("setContent(org.eclipse.swt.widgets.Control)");
-          removeMethodInvocations("setMinSize(org.eclipse.swt.graphics.Point)");
-        }
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ScrolledCompositeInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+		// when move ControlInfo out: remove "setContent()" and "setMinSize()" invocations
+		addBroadcastListener(new JavaEventListener() {
+			@Override
+			public void moveBefore(JavaInfo child, ObjectInfo oldParent, JavaInfo newParent)
+					throws Exception {
+				if (child instanceof ControlInfo && oldParent == ScrolledCompositeInfo.this) {
+					removeMethodInvocations("setContent(org.eclipse.swt.widgets.Control)");
+					removeMethodInvocations("setMinSize(org.eclipse.swt.graphics.Point)");
+				}
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link ControlInfo} set using given
-   *         {@link ScrolledComposite#setContent(org.eclipse.swt.widgets.Control)}.
-   */
-  public ControlInfo getContent() {
-    MethodInvocation invocation =
-        getMethodInvocation("setContent(org.eclipse.swt.widgets.Control)");
-    if (invocation != null) {
-      return (ControlInfo) getChildRepresentedBy(DomGenerics.arguments(invocation).get(0));
-    } else {
-      return null;
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link ControlInfo} set using given
+	 *         {@link ScrolledComposite#setContent(org.eclipse.swt.widgets.Control)}.
+	 */
+	public ControlInfo getContent() {
+		MethodInvocation invocation =
+				getMethodInvocation("setContent(org.eclipse.swt.widgets.Control)");
+		if (invocation != null) {
+			return (ControlInfo) getChildRepresentedBy(DomGenerics.arguments(invocation).get(0));
+		} else {
+			return null;
+		}
+	}
 
-  /**
-   * @return <code>true</code> if this {@link ScrolledCompositeInfo} has child {@link ControlInfo}
-   *         and corresponding {@link ScrolledComposite#setContent(org.eclipse.swt.widgets.Control)}
-   *         .
-   */
-  public boolean hasRequired_setContent() {
-    return getChildrenControls().isEmpty()
-        || getMethodInvocation("setContent(org.eclipse.swt.widgets.Control)") != null;
-  }
+	/**
+	 * @return <code>true</code> if this {@link ScrolledCompositeInfo} has child {@link ControlInfo}
+	 *         and corresponding {@link ScrolledComposite#setContent(org.eclipse.swt.widgets.Control)}
+	 *         .
+	 */
+	public boolean hasRequired_setContent() {
+		return getChildrenControls().isEmpty()
+				|| getMethodInvocation("setContent(org.eclipse.swt.widgets.Control)") != null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Creates new {@link ControlInfo} and associates it with this {@link ScrolledCompositeInfo}.
-   */
-  public void command_CREATE(ControlInfo control) throws Exception {
-    JavaInfoUtils.add(control, null, this, null);
-    attach(control);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Creates new {@link ControlInfo} and associates it with this {@link ScrolledCompositeInfo}.
+	 */
+	public void command_CREATE(ControlInfo control) throws Exception {
+		JavaInfoUtils.add(control, null, this, null);
+		attach(control);
+	}
 
-  /**
-   * Adds existing {@link ControlInfo} and associates it with this {@link ScrolledCompositeInfo}.
-   */
-  public void command_ADD(ControlInfo control) throws Exception {
-    JavaInfoUtils.move(control, null, this, null);
-    attach(control);
-  }
+	/**
+	 * Adds existing {@link ControlInfo} and associates it with this {@link ScrolledCompositeInfo}.
+	 */
+	public void command_ADD(ControlInfo control) throws Exception {
+		JavaInfoUtils.move(control, null, this, null);
+		attach(control);
+	}
 
-  /**
-   * Attaches just added/moved {@link ControlInfo} to this {@link ScrolledCompositeInfo}.
-   */
-  private void attach(ControlInfo control) throws Exception {
-    // configure "setMinSize()"
-    {
-      String arguments =
-          TemplateUtils.format("{0}.computeSize({1}, {1})", control, "org.eclipse.swt.SWT.DEFAULT");
-      MethodInvocation invocation =
-          addMethodInvocation("setMinSize(org.eclipse.swt.graphics.Point)", arguments);
-      control.addRelatedNodes(invocation);
-    }
-    // associate using "setContent()"
-    {
-      MethodInvocation invocation =
-          addMethodInvocation(
-              "setContent(org.eclipse.swt.widgets.Control)",
-              TemplateUtils.getExpression(control));
-      control.addRelatedNodes(invocation);
-    }
-  }
+	/**
+	 * Attaches just added/moved {@link ControlInfo} to this {@link ScrolledCompositeInfo}.
+	 */
+	private void attach(ControlInfo control) throws Exception {
+		// configure "setMinSize()"
+		{
+			String arguments =
+					TemplateUtils.format("{0}.computeSize({1}, {1})", control, "org.eclipse.swt.SWT.DEFAULT");
+			MethodInvocation invocation =
+					addMethodInvocation("setMinSize(org.eclipse.swt.graphics.Point)", arguments);
+			control.addRelatedNodes(invocation);
+		}
+		// associate using "setContent()"
+		{
+			MethodInvocation invocation =
+					addMethodInvocation(
+							"setContent(org.eclipse.swt.widgets.Control)",
+							TemplateUtils.getExpression(control));
+			control.addRelatedNodes(invocation);
+		}
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/TabFolderInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/TabFolderInfo.java
index 200db2f65..d7e0411a9 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/TabFolderInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/TabFolderInfo.java
@@ -26,50 +26,50 @@
  * @coverage rcp.model.widgets
  */
 public final class TabFolderInfo extends AbstractTabFolderInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public TabFolderInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public TabFolderInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link TabItemInfo} children.
-   */
-  public List<TabItemInfo> getItems2() {
-    return getChildren(TabItemInfo.class);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link TabItemInfo} children.
+	 */
+	public List<TabItemInfo> getItems2() {
+		return getChildren(TabItemInfo.class);
+	}
 
-  @Override
-  protected String getItemClassName() {
-    return "org.eclipse.swt.widgets.TabItem";
-  }
+	@Override
+	protected String getItemClassName() {
+		return "org.eclipse.swt.widgets.TabItem";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void refresh_afterCreate() throws Exception {
-    selectItem();
-    super.refresh_afterCreate();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void refresh_afterCreate() throws Exception {
+		selectItem();
+		super.refresh_afterCreate();
+	}
 
-  private void selectItem() {
-    AbstractTabItemInfo selectedItem = getSelectedItem();
-    if (selectedItem != null) {
-      TabFolder tabFolder = (TabFolder) getObject();
-      tabFolder.setSelection((TabItem) selectedItem.getObject());
-    }
-  }
+	private void selectItem() {
+		AbstractTabItemInfo selectedItem = getSelectedItem();
+		if (selectedItem != null) {
+			TabFolder tabFolder = (TabFolder) getObject();
+			tabFolder.setSelection((TabItem) selectedItem.getObject());
+		}
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/TabItemInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/TabItemInfo.java
index 79a8e22f7..cebcc1813 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/TabItemInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/TabItemInfo.java
@@ -26,29 +26,29 @@
  * @coverage rcp.model.widgets
  */
 public final class TabItemInfo extends AbstractTabItemInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public TabItemInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public TabItemInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void refresh_fetch() throws Exception {
-    super.refresh_fetch();
-    // set bounds
-    {
-      Rectangle bounds = new Rectangle(OSSupport.get().getTabItemBounds(getObject()));
-      setModelBounds(bounds);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void refresh_fetch() throws Exception {
+		super.refresh_fetch();
+		// set bounds
+		{
+			Rectangle bounds = new Rectangle(OSSupport.get().getTabItemBounds(getObject()));
+			setModelBounds(bounds);
+		}
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/TableCursorInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/TableCursorInfo.java
index 87c04a880..d2af38f3c 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/TableCursorInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/TableCursorInfo.java
@@ -24,14 +24,14 @@
  * @coverage swt.model.widgets
  */
 public final class TableCursorInfo extends CompositeInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public TableCursorInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public TableCursorInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/TableInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/TableInfo.java
index 33cb3f294..260119d4e 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/TableInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/TableInfo.java
@@ -24,33 +24,33 @@
  * @coverage rcp.model.widgets
  */
 public final class TableInfo extends org.eclipse.wb.internal.swt.model.widgets.TableInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public TableInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public TableInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // TableCursor_Info
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if this {@link TableInfo} already has {@link TableCursorInfo}.
-   */
-  public boolean hasTableCursor() {
-    return !getChildren(TableCursorInfo.class).isEmpty();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// TableCursor_Info
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if this {@link TableInfo} already has {@link TableCursorInfo}.
+	 */
+	public boolean hasTableCursor() {
+		return !getChildren(TableCursorInfo.class).isEmpty();
+	}
 
-  /**
-   * Adds new {@link TableCursorInfo} to this table.
-   */
-  public void command_CREATE(TableCursorInfo tableCursor) throws Exception {
-    JavaInfoUtils.add(tableCursor, null, this, null);
-  }
+	/**
+	 * Adds new {@link TableCursorInfo} to this table.
+	 */
+	public void command_CREATE(TableCursorInfo tableCursor) throws Exception {
+		JavaInfoUtils.add(tableCursor, null, this, null);
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/ToolBarInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/ToolBarInfo.java
index 08fd36d3b..b819cccca 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/ToolBarInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/ToolBarInfo.java
@@ -33,65 +33,65 @@
  * @coverage rcp.model.widgets
  */
 public final class ToolBarInfo extends CompositeInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ToolBarInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ToolBarInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if this {@link ToolBarInfo} has horizontal layout.
-   */
-  public boolean isHorizontal() {
-    return ControlSupport.isStyle(getObject(), SWT.HORIZONTAL);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if this {@link ToolBarInfo} has horizontal layout.
+	 */
+	public boolean isHorizontal() {
+		return ControlSupport.isStyle(getObject(), SWT.HORIZONTAL);
+	}
 
-  /**
-   * @return the {@link ToolItemInfo} children.
-   */
-  public List<ToolItemInfo> getItems() {
-    return getChildren(ToolItemInfo.class);
-  }
+	/**
+	 * @return the {@link ToolItemInfo} children.
+	 */
+	public List<ToolItemInfo> getItems() {
+		return getChildren(ToolItemInfo.class);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final IObjectPresentation m_presentation = new DefaultJavaInfoPresentation(this) {
-    @Override
-    public List<ObjectInfo> getChildrenTree() throws Exception {
-      List<ObjectInfo> children = Lists.newArrayList(super.getChildrenTree());
-      removeItemControls(children);
-      return children;
-    }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final IObjectPresentation m_presentation = new DefaultJavaInfoPresentation(this) {
+		@Override
+		public List<ObjectInfo> getChildrenTree() throws Exception {
+			List<ObjectInfo> children = Lists.newArrayList(super.getChildrenTree());
+			removeItemControls(children);
+			return children;
+		}
 
-    @Override
-    public List<ObjectInfo> getChildrenGraphical() throws Exception {
-      List<ObjectInfo> children = Lists.newArrayList(super.getChildrenGraphical());
-      removeItemControls(children);
-      return children;
-    }
+		@Override
+		public List<ObjectInfo> getChildrenGraphical() throws Exception {
+			List<ObjectInfo> children = Lists.newArrayList(super.getChildrenGraphical());
+			removeItemControls(children);
+			return children;
+		}
 
-    private void removeItemControls(List<ObjectInfo> children) {
-      for (ToolItemInfo item : getItems()) {
-        children.remove(item.getControl());
-      }
-    }
-  };
+		private void removeItemControls(List<ObjectInfo> children) {
+			for (ToolItemInfo item : getItems()) {
+				children.remove(item.getControl());
+			}
+		}
+	};
 
-  @Override
-  public IObjectPresentation getPresentation() {
-    return m_presentation;
-  }
+	@Override
+	public IObjectPresentation getPresentation() {
+		return m_presentation;
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/ToolItemInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/ToolItemInfo.java
index 936d00ed5..8f71d0ba2 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/ToolItemInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/ToolItemInfo.java
@@ -47,199 +47,199 @@
  * @coverage rcp.model.widgets
  */
 public final class ToolItemInfo extends ItemInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ToolItemInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-    addBroadcastListener(new JavaEventListener() {
-      private ControlInfo m_ourControl;
-
-      @Override
-      public void moveBefore(JavaInfo child, ObjectInfo oldParent, JavaInfo newParent)
-          throws Exception {
-        // remove setControl() invocation when move ControlInfo in/from our ToolBar
-        if (oldParent == getParent() && child instanceof ControlInfo && getControl() == child) {
-          removeMethodInvocations("setControl(org.eclipse.swt.widgets.Control)");
-        }
-        // when WE are moved, remove possible setControl() invocation
-        if (child == ToolItemInfo.this) {
-          m_ourControl = getControl();
-          removeMethodInvocations("setControl(org.eclipse.swt.widgets.Control)");
-        }
-      }
-
-      @Override
-      public void variable_addStatementsToMove(JavaInfo parent, List<JavaInfo> children)
-          throws Exception {
-        if (parent == ToolItemInfo.this) {
-          if (m_ourControl != null) {
-            children.add(m_ourControl);
-          }
-        }
-      }
-
-      @Override
-      public void moveAfter(JavaInfo child, ObjectInfo oldParent, JavaInfo newParent)
-          throws Exception {
-        // if WE were moved, move our ControlInfo
-        if (child == ToolItemInfo.this) {
-          if (m_ourControl != null) {
-            command_ADD(m_ourControl);
-          }
-        }
-      }
-    });
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final IObjectPresentation m_presentation = new StylePresentation(this) {
-    @Override
-    public List<ObjectInfo> getChildrenTree() throws Exception {
-      ControlInfo control = getControl();
-      return GenericsUtils.singletonList(control);
-    }
-
-    @Override
-    public List<ObjectInfo> getChildrenGraphical() throws Exception {
-      return getChildrenTree();
-    }
-
-    @Override
-    protected void initImages() throws Exception {
-      addImage(SWT.CHECK, "wbp-meta/org/eclipse/swt/widgets/ToolItem_check.gif");
-      addImage(SWT.RADIO, "wbp-meta/org/eclipse/swt/widgets/ToolItem_radio.gif");
-      addImage(SWT.DROP_DOWN, "wbp-meta/org/eclipse/swt/widgets/ToolItem_dropDown.gif");
-      addImage(SWT.SEPARATOR, "wbp-meta/org/eclipse/swt/widgets/ToolItem_separator.gif");
-    }
-  };
-
-  @Override
-  public IObjectPresentation getPresentation() {
-    return m_presentation;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if this {@link ToolItemInfo} is separator.
-   */
-  public boolean isSeparator() {
-    return ControlSupport.isStyle(getObject(), SWT.SEPARATOR);
-  }
-
-  /**
-   * @return list with single {@link #getControl()} or empty.
-   */
-  public final List<ObjectInfo> getSimpleContainerChildren() {
-    ObjectInfo control = getControl();
-    if (control != null) {
-      return ImmutableList.of(control);
-    } else {
-      return ImmutableList.of();
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void refresh_fetch() throws Exception {
-    {
-      Object boundsObject = ReflectionUtils.invokeMethod2(getObject(), "getBounds");
-      Rectangle bounds = RectangleSupport.getRectangle(boundsObject);
-      setModelBounds(bounds);
-    }
-    super.refresh_fetch();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // setControl() support
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link ControlInfo} set using
-   *         {@link ToolItem#setControl(org.eclipse.swt.widgets.Control)}, may be <code>null</code>.
-   */
-  public ControlInfo getControl() {
-    MethodInvocation invocation =
-        getMethodInvocation("setControl(org.eclipse.swt.widgets.Control)");
-    if (invocation != null) {
-      Expression controlExpression = DomGenerics.arguments(invocation).get(0);
-      return (ControlInfo) getParentJava().getChildRepresentedBy(controlExpression);
-    }
-    return null;
-  }
-
-  /**
-   * Adds new {@link ControlInfo} to {@link ToolBarInfo} and associates with given
-   * {@link ToolItemInfo} set using {@link ToolItem#setControl(org.eclipse.swt.widgets.Control)}.
-   */
-  public void command_CREATE(ControlInfo control) throws Exception {
-    // add to ToolBar
-    {
-      StatementTarget target = JavaInfoUtils.getTarget(this, control, null);
-      JavaInfoUtils.addTarget(control, null, getParentJava(), target);
-    }
-    // add setControl() invocation
-    addSetControlInvocation(control);
-  }
-
-  /**
-   * Adds existing {@link ControlInfo} to {@link ToolBarInfo} and associates with given
-   * {@link ToolItemInfo} set using {@link ToolItem#setControl(org.eclipse.swt.widgets.Control)}.
-   */
-  public void command_ADD(final ControlInfo control) throws Exception {
-    // move to ToolBar, but code inside of ToolItem
-    {
-      final ToolBarInfo toolBar = (ToolBarInfo) getParentJava();
-      final StatementTarget target = JavaInfoUtils.getTarget(this, control, null);
-      IMoveTargetProvider targetProvider = new IMoveTargetProvider() {
-        @Override
-        public void add() throws Exception {
-          toolBar.addChild(control, getNextJavaInfo());
-        }
-
-        @Override
-        public void move() throws Exception {
-          toolBar.moveChild(control, getNextJavaInfo());
-        }
-
-        @Override
-        public StatementTarget getTarget() throws Exception {
-          return target;
-        }
-
-        private JavaInfo getNextJavaInfo() {
-          return GenericsUtils.getNextOrNull(toolBar.getChildrenJava(), ToolItemInfo.this);
-        }
-      };
-      JavaInfoUtils.moveProvider(control, null, toolBar, targetProvider);
-    }
-    // add setControl() invocation
-    addSetControlInvocation(control);
-  }
-
-  /**
-   * Adds {@link ToolItem#setControl(org.eclipse.swt.widgets.Control)} invocation.
-   */
-  private void addSetControlInvocation(ControlInfo control) throws Exception {
-    String source = TemplateUtils.format("{0}.setControl({1})", this, control);
-    Expression expression = control.addExpressionStatement(source);
-    addRelatedNodes(expression);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ToolItemInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+		addBroadcastListener(new JavaEventListener() {
+			private ControlInfo m_ourControl;
+
+			@Override
+			public void moveBefore(JavaInfo child, ObjectInfo oldParent, JavaInfo newParent)
+					throws Exception {
+				// remove setControl() invocation when move ControlInfo in/from our ToolBar
+				if (oldParent == getParent() && child instanceof ControlInfo && getControl() == child) {
+					removeMethodInvocations("setControl(org.eclipse.swt.widgets.Control)");
+				}
+				// when WE are moved, remove possible setControl() invocation
+				if (child == ToolItemInfo.this) {
+					m_ourControl = getControl();
+					removeMethodInvocations("setControl(org.eclipse.swt.widgets.Control)");
+				}
+			}
+
+			@Override
+			public void variable_addStatementsToMove(JavaInfo parent, List<JavaInfo> children)
+					throws Exception {
+				if (parent == ToolItemInfo.this) {
+					if (m_ourControl != null) {
+						children.add(m_ourControl);
+					}
+				}
+			}
+
+			@Override
+			public void moveAfter(JavaInfo child, ObjectInfo oldParent, JavaInfo newParent)
+					throws Exception {
+				// if WE were moved, move our ControlInfo
+				if (child == ToolItemInfo.this) {
+					if (m_ourControl != null) {
+						command_ADD(m_ourControl);
+					}
+				}
+			}
+		});
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final IObjectPresentation m_presentation = new StylePresentation(this) {
+		@Override
+		public List<ObjectInfo> getChildrenTree() throws Exception {
+			ControlInfo control = getControl();
+			return GenericsUtils.singletonList(control);
+		}
+
+		@Override
+		public List<ObjectInfo> getChildrenGraphical() throws Exception {
+			return getChildrenTree();
+		}
+
+		@Override
+		protected void initImages() throws Exception {
+			addImage(SWT.CHECK, "wbp-meta/org/eclipse/swt/widgets/ToolItem_check.gif");
+			addImage(SWT.RADIO, "wbp-meta/org/eclipse/swt/widgets/ToolItem_radio.gif");
+			addImage(SWT.DROP_DOWN, "wbp-meta/org/eclipse/swt/widgets/ToolItem_dropDown.gif");
+			addImage(SWT.SEPARATOR, "wbp-meta/org/eclipse/swt/widgets/ToolItem_separator.gif");
+		}
+	};
+
+	@Override
+	public IObjectPresentation getPresentation() {
+		return m_presentation;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if this {@link ToolItemInfo} is separator.
+	 */
+	public boolean isSeparator() {
+		return ControlSupport.isStyle(getObject(), SWT.SEPARATOR);
+	}
+
+	/**
+	 * @return list with single {@link #getControl()} or empty.
+	 */
+	public final List<ObjectInfo> getSimpleContainerChildren() {
+		ObjectInfo control = getControl();
+		if (control != null) {
+			return ImmutableList.of(control);
+		} else {
+			return ImmutableList.of();
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void refresh_fetch() throws Exception {
+		{
+			Object boundsObject = ReflectionUtils.invokeMethod2(getObject(), "getBounds");
+			Rectangle bounds = RectangleSupport.getRectangle(boundsObject);
+			setModelBounds(bounds);
+		}
+		super.refresh_fetch();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// setControl() support
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link ControlInfo} set using
+	 *         {@link ToolItem#setControl(org.eclipse.swt.widgets.Control)}, may be <code>null</code>.
+	 */
+	public ControlInfo getControl() {
+		MethodInvocation invocation =
+				getMethodInvocation("setControl(org.eclipse.swt.widgets.Control)");
+		if (invocation != null) {
+			Expression controlExpression = DomGenerics.arguments(invocation).get(0);
+			return (ControlInfo) getParentJava().getChildRepresentedBy(controlExpression);
+		}
+		return null;
+	}
+
+	/**
+	 * Adds new {@link ControlInfo} to {@link ToolBarInfo} and associates with given
+	 * {@link ToolItemInfo} set using {@link ToolItem#setControl(org.eclipse.swt.widgets.Control)}.
+	 */
+	public void command_CREATE(ControlInfo control) throws Exception {
+		// add to ToolBar
+		{
+			StatementTarget target = JavaInfoUtils.getTarget(this, control, null);
+			JavaInfoUtils.addTarget(control, null, getParentJava(), target);
+		}
+		// add setControl() invocation
+		addSetControlInvocation(control);
+	}
+
+	/**
+	 * Adds existing {@link ControlInfo} to {@link ToolBarInfo} and associates with given
+	 * {@link ToolItemInfo} set using {@link ToolItem#setControl(org.eclipse.swt.widgets.Control)}.
+	 */
+	public void command_ADD(final ControlInfo control) throws Exception {
+		// move to ToolBar, but code inside of ToolItem
+		{
+			final ToolBarInfo toolBar = (ToolBarInfo) getParentJava();
+			final StatementTarget target = JavaInfoUtils.getTarget(this, control, null);
+			IMoveTargetProvider targetProvider = new IMoveTargetProvider() {
+				@Override
+				public void add() throws Exception {
+					toolBar.addChild(control, getNextJavaInfo());
+				}
+
+				@Override
+				public void move() throws Exception {
+					toolBar.moveChild(control, getNextJavaInfo());
+				}
+
+				@Override
+				public StatementTarget getTarget() throws Exception {
+					return target;
+				}
+
+				private JavaInfo getNextJavaInfo() {
+					return GenericsUtils.getNextOrNull(toolBar.getChildrenJava(), ToolItemInfo.this);
+				}
+			};
+			JavaInfoUtils.moveProvider(control, null, toolBar, targetProvider);
+		}
+		// add setControl() invocation
+		addSetControlInvocation(control);
+	}
+
+	/**
+	 * Adds {@link ToolItem#setControl(org.eclipse.swt.widgets.Control)} invocation.
+	 */
+	private void addSetControlInvocation(ControlInfo control) throws Exception {
+		String source = TemplateUtils.format("{0}.setControl({1})", this, control);
+		Expression expression = control.addExpressionStatement(source);
+		addRelatedNodes(expression);
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/TrayItemInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/TrayItemInfo.java
index 4cbac52a8..48d4e9c1d 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/TrayItemInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/TrayItemInfo.java
@@ -24,28 +24,28 @@
  * @coverage rcp.model.widgets
  */
 public final class TrayItemInfo extends ItemInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public TrayItemInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public TrayItemInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void refresh_dispose() throws Exception {
-    if (getObject() instanceof TrayItem) {
-      TrayItem item = (TrayItem) getObject();
-      item.dispose();
-    }
-    super.refresh_dispose();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void refresh_dispose() throws Exception {
+		if (getObject() instanceof TrayItem) {
+			TrayItem item = (TrayItem) getObject();
+			item.dispose();
+		}
+		super.refresh_dispose();
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/TreeColumnInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/TreeColumnInfo.java
index fd870fe64..a3006877c 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/TreeColumnInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/TreeColumnInfo.java
@@ -24,24 +24,24 @@
  * @coverage rcp.model.widgets
  */
 public final class TreeColumnInfo extends ItemInfo implements ITreeColumnInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public TreeColumnInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public TreeColumnInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Edit
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void setWidth(int width) throws Exception {
-    getPropertyByTitle("width").setValue(width);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Edit
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void setWidth(int width) throws Exception {
+		getPropertyByTitle("width").setValue(width);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/TreeInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/TreeInfo.java
index 076d8f540..7bf8f90b4 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/TreeInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/TreeInfo.java
@@ -32,87 +32,87 @@
  * @coverage rcp.model.widgets
  */
 public final class TreeInfo extends org.eclipse.wb.internal.swt.model.widgets.TreeInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public TreeInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-    contributeToClipboardCopy();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public TreeInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+		contributeToClipboardCopy();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Broadcasts
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void contributeToClipboardCopy() {
-    addBroadcastListener(new JavaEventListener() {
-      @Override
-      public void clipboardCopy(JavaInfo javaInfo, List<ClipboardCommand> commands)
-          throws Exception {
-        // copy TreeColumn's
-        if (javaInfo == TreeInfo.this) {
-          for (TreeColumnInfo column : getColumns()) {
-            final JavaInfoMemento columnMemento = JavaInfoMemento.createMemento(column);
-            commands.add(new ClipboardCommand() {
-              private static final long serialVersionUID = 0L;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Broadcasts
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void contributeToClipboardCopy() {
+		addBroadcastListener(new JavaEventListener() {
+			@Override
+			public void clipboardCopy(JavaInfo javaInfo, List<ClipboardCommand> commands)
+					throws Exception {
+				// copy TreeColumn's
+				if (javaInfo == TreeInfo.this) {
+					for (TreeColumnInfo column : getColumns()) {
+						final JavaInfoMemento columnMemento = JavaInfoMemento.createMemento(column);
+						commands.add(new ClipboardCommand() {
+							private static final long serialVersionUID = 0L;
 
-              @Override
-              public void execute(JavaInfo javaInfo) throws Exception {
-                TreeColumnInfo column = (TreeColumnInfo) columnMemento.create(javaInfo);
-                JavaInfoUtils.add(column, null, javaInfo, null);
-                columnMemento.apply();
-              }
-            });
-          }
-        }
-      }
-    });
-  }
+							@Override
+							public void execute(JavaInfo javaInfo) throws Exception {
+								TreeColumnInfo column = (TreeColumnInfo) columnMemento.create(javaInfo);
+								JavaInfoUtils.add(column, null, javaInfo, null);
+								columnMemento.apply();
+							}
+						});
+					}
+				}
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static int BORDER_WIDTH = 1;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static int BORDER_WIDTH = 1;
 
-  @Override
-  protected void refresh_fetch() throws Exception {
-    super.refresh_fetch();
-    // prepare metrics
-    int headerHeight;
-    {
-      Object tree = getObject();
-      headerHeight = (Integer) ReflectionUtils.invokeMethod(tree, "getHeaderHeight()");
-    }
-    // prepare columns bounds
-    int x = BORDER_WIDTH;
-    int y = BORDER_WIDTH;
-    {
-      for (TreeColumnInfo column : getColumns()) {
-        int columnWidth = (Integer) ReflectionUtils.invokeMethod(column.getObject(), "getWidth()");
-        Rectangle bounds = new Rectangle(x, y, columnWidth, headerHeight);
-        column.setModelBounds(bounds);
-        column.setBounds(bounds);
-        x += columnWidth;
-      }
-    }
-  }
+	@Override
+	protected void refresh_fetch() throws Exception {
+		super.refresh_fetch();
+		// prepare metrics
+		int headerHeight;
+		{
+			Object tree = getObject();
+			headerHeight = (Integer) ReflectionUtils.invokeMethod(tree, "getHeaderHeight()");
+		}
+		// prepare columns bounds
+		int x = BORDER_WIDTH;
+		int y = BORDER_WIDTH;
+		{
+			for (TreeColumnInfo column : getColumns()) {
+				int columnWidth = (Integer) ReflectionUtils.invokeMethod(column.getObject(), "getWidth()");
+				Rectangle bounds = new Rectangle(x, y, columnWidth, headerHeight);
+				column.setModelBounds(bounds);
+				column.setBounds(bounds);
+				x += columnWidth;
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Children
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link TreeColumnInfo} children.
-   */
-  public List<TreeColumnInfo> getColumns() {
-    return getChildren(TreeColumnInfo.class);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Children
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link TreeColumnInfo} children.
+	 */
+	public List<TreeColumnInfo> getColumns() {
+		return getChildren(TreeColumnInfo.class);
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/ViewFormInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/ViewFormInfo.java
index 7af090035..d5c6e5a01 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/ViewFormInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/ViewFormInfo.java
@@ -23,20 +23,20 @@
  * @coverage rcp.model.widgets
  */
 public final class ViewFormInfo extends AbstractPositionCompositeInfo {
-  private static final String[] POSITIONS = {
-      "setTopLeft",
-      "setTopCenter",
-      "setTopRight",
-      "setContent"};
+	private static final String[] POSITIONS = {
+			"setTopLeft",
+			"setTopCenter",
+			"setTopRight",
+	"setContent"};
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ViewFormInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport, POSITIONS);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ViewFormInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport, POSITIONS);
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/exposed/ItemsHierarchyProvider.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/exposed/ItemsHierarchyProvider.java
index c6d774d17..71d8f1edc 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/exposed/ItemsHierarchyProvider.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/exposed/ItemsHierarchyProvider.java
@@ -25,44 +25,44 @@
  * @coverage rcp.model.widgets
  */
 public final class ItemsHierarchyProvider extends HierarchyProvider {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // HierarchyProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Object getParentObject(Object object) throws Exception {
-    if (isSuccessorOf(object, "org.eclipse.swt.widgets.TreeColumn")) {
-      return ReflectionUtils.invokeMethod(object, "getParent()");
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// HierarchyProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Object getParentObject(Object object) throws Exception {
+		if (isSuccessorOf(object, "org.eclipse.swt.widgets.TreeColumn")) {
+			return ReflectionUtils.invokeMethod(object, "getParent()");
+		}
+		return null;
+	}
 
-  @Override
-  public Object[] getChildrenObjects(Object object) throws Exception {
-    if (AbstractSupport.is_RCP() && isSuccessorOf(object, "org.eclipse.swt.widgets.Tree")) {
-      return getItems(object, "getColumns");
-    }
-    // no children
-    return ArrayUtils.EMPTY_OBJECT_ARRAY;
-  }
+	@Override
+	public Object[] getChildrenObjects(Object object) throws Exception {
+		if (AbstractSupport.is_RCP() && isSuccessorOf(object, "org.eclipse.swt.widgets.Tree")) {
+			return getItems(object, "getColumns");
+		}
+		// no children
+		return ArrayUtils.EMPTY_OBJECT_ARRAY;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if given {@link Object} has compatible type.
-   */
-  private static boolean isSuccessorOf(Object object, String requiredClass) throws Exception {
-    return ReflectionUtils.isSuccessorOf(object.getClass(), requiredClass);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if given {@link Object} has compatible type.
+	 */
+	private static boolean isSuccessorOf(Object object, String requiredClass) throws Exception {
+		return ReflectionUtils.isSuccessorOf(object.getClass(), requiredClass);
+	}
 
-  /**
-   * @return the result of "get array" method, such as {@link Table#getItems()}.
-   */
-  private static Object[] getItems(Object object, String methodName) throws Exception {
-    return (Object[]) ReflectionUtils.invokeMethod2(object, methodName);
-  }
+	/**
+	 * @return the result of "get array" method, such as {@link Table#getItems()}.
+	 */
+	private static Object[] getItems(Object object, String methodName) throws Exception {
+		return (Object[]) ReflectionUtils.invokeMethod2(object, methodName);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/exposed/SectionPartHierarchyProvider.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/exposed/SectionPartHierarchyProvider.java
index bd9aca5c7..4e376cb6d 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/exposed/SectionPartHierarchyProvider.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/model/widgets/exposed/SectionPartHierarchyProvider.java
@@ -25,19 +25,19 @@
  * @coverage rcp.model.widgets
  */
 public final class SectionPartHierarchyProvider extends HierarchyProvider {
-  @Override
-  public Object getParentObject(Object object) throws Exception {
-    if (ReflectionUtils.isSuccessorOf(object.getClass(), "org.eclipse.ui.forms.SectionPart")) {
-      Object control = ReflectionUtils.invokeMethod(object, "getSection()");
-      return ReflectionUtils.invokeMethod(control, "getParent()");
-    }
-    return null;
-  }
+	@Override
+	public Object getParentObject(Object object) throws Exception {
+		if (ReflectionUtils.isSuccessorOf(object.getClass(), "org.eclipse.ui.forms.SectionPart")) {
+			Object control = ReflectionUtils.invokeMethod(object, "getSection()");
+			return ReflectionUtils.invokeMethod(control, "getParent()");
+		}
+		return null;
+	}
 
-  @Override
-  public void add(JavaInfo host, JavaInfo exposed) throws Exception {
-    if (exposed instanceof SectionPartInfo && host instanceof CompositeInfo) {
-      ((SectionPartInfo) exposed).getWrapper().configureHierarchy(host);
-    }
-  }
+	@Override
+	public void add(JavaInfo host, JavaInfo exposed) throws Exception {
+		if (exposed instanceof SectionPartInfo && host instanceof CompositeInfo) {
+			((SectionPartInfo) exposed).getWrapper().configureHierarchy(host);
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/ActionExternalEntryInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/ActionExternalEntryInfo.java
index 87b0473e7..df683be05 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/ActionExternalEntryInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/ActionExternalEntryInfo.java
@@ -34,47 +34,47 @@
  * @coverage rcp.editor.palette
  */
 public final class ActionExternalEntryInfo extends ToolEntryInfo {
-  private static final Image ICON = Activator.getImage("info/Action/action_open.gif");
+	private static final Image ICON = Activator.getImage("info/Action/action_open.gif");
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ActionExternalEntryInfo(String id) {
-    setId(id);
-    setName(PaletteMessages.ActionExternalEntryInfo_name);
-    setDescription(PaletteMessages.ActionExternalEntryInfo_description);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ActionExternalEntryInfo(String id) {
+		setId(id);
+		setName(PaletteMessages.ActionExternalEntryInfo_name);
+		setDescription(PaletteMessages.ActionExternalEntryInfo_description);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // EntryInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Image getIcon() {
-    return ICON;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// EntryInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Image getIcon() {
+		return ICON;
+	}
 
-  @Override
-  public Tool createTool() throws Exception {
-    IType selectedActionType =
-        JdtUiUtils.selectSubType(
-            getSite().getShell(),
-            m_javaProject,
-            "org.eclipse.jface.action.IAction");
-    if (selectedActionType != null) {
-      ClassLoader editorLoader = m_state.getEditorLoader();
-      Class<?> selectedActionClass =
-          editorLoader.loadClass(selectedActionType.getFullyQualifiedName());
-      ActionInfo actionInfo =
-          (ActionInfo) JavaInfoUtils.createJavaInfo(
-              m_editor,
-              selectedActionClass,
-              new ConstructorCreationSupport());
-      return new ActionDropTool(actionInfo);
-    }
-    return null;
-  }
+	@Override
+	public Tool createTool() throws Exception {
+		IType selectedActionType =
+				JdtUiUtils.selectSubType(
+						getSite().getShell(),
+						m_javaProject,
+						"org.eclipse.jface.action.IAction");
+		if (selectedActionType != null) {
+			ClassLoader editorLoader = m_state.getEditorLoader();
+			Class<?> selectedActionClass =
+					editorLoader.loadClass(selectedActionType.getFullyQualifiedName());
+			ActionInfo actionInfo =
+					(ActionInfo) JavaInfoUtils.createJavaInfo(
+							m_editor,
+							selectedActionClass,
+							new ConstructorCreationSupport());
+			return new ActionDropTool(actionInfo);
+		}
+		return null;
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/ActionFactoryNewEntryInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/ActionFactoryNewEntryInfo.java
index a746e7f78..4af989ebb 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/ActionFactoryNewEntryInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/ActionFactoryNewEntryInfo.java
@@ -35,60 +35,60 @@
  * @coverage rcp.editor.palette
  */
 public final class ActionFactoryNewEntryInfo extends ToolEntryInfo {
-  private static final Map<String, Image> m_namedIcons = Maps.newTreeMap();
-  private final String m_name;
-  private final Image m_icon;
+	private static final Map<String, Image> m_namedIcons = Maps.newTreeMap();
+	private final String m_name;
+	private final Image m_icon;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ActionFactoryNewEntryInfo(String name) throws Exception {
-    m_name = name;
-    setId("org.eclipse.ui.actions.ActionFactory." + name);
-    // prepare IWorkbenchAction
-    IWorkbenchAction action;
-    {
-      ActionFactory actionFactory =
-          (ActionFactory) ReflectionUtils.getFieldObject(ActionFactory.class, name);
-      action = actionFactory.create(DesignerPlugin.getActiveWorkbenchWindow());
-    }
-    // use IWorkbenchAction to configure this entry
-    try {
-      setName(action.getText());
-      setDescription(action.getDescription());
-      // icon
-      {
-        Image icon = m_namedIcons.get(m_name);
-        if (icon == null) {
-          if (action.getImageDescriptor() != null) {
-            icon = action.getImageDescriptor().createImage();
-          } else {
-            icon = ActionFactoryCreationSupport.DEFAULT_ICON;
-          }
-          m_namedIcons.put(m_name, icon);
-        }
-        m_icon = icon;
-      }
-    } finally {
-      action.dispose();
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ActionFactoryNewEntryInfo(String name) throws Exception {
+		m_name = name;
+		setId("org.eclipse.ui.actions.ActionFactory." + name);
+		// prepare IWorkbenchAction
+		IWorkbenchAction action;
+		{
+			ActionFactory actionFactory =
+					(ActionFactory) ReflectionUtils.getFieldObject(ActionFactory.class, name);
+			action = actionFactory.create(DesignerPlugin.getActiveWorkbenchWindow());
+		}
+		// use IWorkbenchAction to configure this entry
+		try {
+			setName(action.getText());
+			setDescription(action.getDescription());
+			// icon
+			{
+				Image icon = m_namedIcons.get(m_name);
+				if (icon == null) {
+					if (action.getImageDescriptor() != null) {
+						icon = action.getImageDescriptor().createImage();
+					} else {
+						icon = ActionFactoryCreationSupport.DEFAULT_ICON;
+					}
+					m_namedIcons.put(m_name, icon);
+				}
+				m_icon = icon;
+			}
+		} finally {
+			action.dispose();
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // EntryInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Image getIcon() {
-    return m_icon;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// EntryInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Image getIcon() {
+		return m_icon;
+	}
 
-  @Override
-  public Tool createTool() throws Exception {
-    ActionInfo action = ActionFactoryCreationSupport.createNew(m_rootJavaInfo, m_name);
-    return new ActionDropTool(action);
-  }
+	@Override
+	public Tool createTool() throws Exception {
+		ActionInfo action = ActionFactoryCreationSupport.createNew(m_rootJavaInfo, m_name);
+		return new ActionDropTool(action);
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/ActionNewEntryInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/ActionNewEntryInfo.java
index 0234fd70e..585693030 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/ActionNewEntryInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/ActionNewEntryInfo.java
@@ -30,32 +30,32 @@
  * @coverage rcp.editor.palette
  */
 public final class ActionNewEntryInfo extends ToolEntryInfo {
-  private static final Image ICON = Activator.getImage("info/Action/action_new.gif");
+	private static final Image ICON = Activator.getImage("info/Action/action_new.gif");
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ActionNewEntryInfo(String id) {
-    setId(id);
-    setName(PaletteMessages.ActionNewEntryInfo_name);
-    setDescription(PaletteMessages.ActionNewEntryInfo_description);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ActionNewEntryInfo(String id) {
+		setId(id);
+		setName(PaletteMessages.ActionNewEntryInfo_name);
+		setDescription(PaletteMessages.ActionNewEntryInfo_description);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // EntryInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Image getIcon() {
-    return ICON;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// EntryInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Image getIcon() {
+		return ICON;
+	}
 
-  @Override
-  public Tool createTool() throws Exception {
-    ActionInfo action = ActionContainerInfo.createNew(m_rootJavaInfo);
-    return new ActionDropTool(action);
-  }
+	@Override
+	public Tool createTool() throws Exception {
+		ActionInfo action = ActionContainerInfo.createNew(m_rootJavaInfo);
+		return new ActionDropTool(action);
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/ActionUseEntryInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/ActionUseEntryInfo.java
index dd50a0c6f..fcea692de 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/ActionUseEntryInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/ActionUseEntryInfo.java
@@ -34,38 +34,38 @@
  * @coverage rcp.editor.palette
  */
 public final class ActionUseEntryInfo extends ToolEntryInfo {
-  private static final Image ICON = Activator.getImage("info/Action/action.gif");
-  private final ActionInfo m_action;
+	private static final Image ICON = Activator.getImage("info/Action/action.gif");
+	private final ActionInfo m_action;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ActionUseEntryInfo(ActionInfo action) throws Exception {
-    m_action = action;
-    setId(ObjectUtils.identityToString(action));
-    setName(action.getVariableSupport().getComponentName());
-    setDescription(PaletteMessages.ActionUseEntryInfo_description);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ActionUseEntryInfo(ActionInfo action) throws Exception {
+		m_action = action;
+		setId(ObjectUtils.identityToString(action));
+		setName(action.getVariableSupport().getComponentName());
+		setDescription(PaletteMessages.ActionUseEntryInfo_description);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // EntryInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Image getIcon() {
-    return ExecutionUtils.runObjectLog(new RunnableObjectEx<Image>() {
-      @Override
-      public Image runObject() throws Exception {
-        return m_action.getPresentation().getIcon();
-      }
-    }, ICON);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// EntryInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Image getIcon() {
+		return ExecutionUtils.runObjectLog(new RunnableObjectEx<Image>() {
+			@Override
+			public Image runObject() throws Exception {
+				return m_action.getPresentation().getIcon();
+			}
+		}, ICON);
+	}
 
-  @Override
-  public Tool createTool() throws Exception {
-    return new ActionDropTool(m_action);
-  }
+	@Override
+	public Tool createTool() throws Exception {
+		return new ActionDropTool(m_action);
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/DialogButtonEntryInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/DialogButtonEntryInfo.java
index c7a2ca09b..73054680f 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/DialogButtonEntryInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/DialogButtonEntryInfo.java
@@ -32,31 +32,31 @@
  * @coverage rcp.editor.palette
  */
 public final class DialogButtonEntryInfo extends ToolEntryInfo {
-  private static final Image ICON = Activator.getImage("info/Dialog/button.gif");
+	private static final Image ICON = Activator.getImage("info/Dialog/button.gif");
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DialogButtonEntryInfo() throws Exception {
-    setId(getClass().getName());
-    setName(PaletteMessages.DialogButtonEntryInfo_name);
-    setDescription(PaletteMessages.DialogButtonEntryInfo_description);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DialogButtonEntryInfo() throws Exception {
+		setId(getClass().getName());
+		setName(PaletteMessages.DialogButtonEntryInfo_name);
+		setDescription(PaletteMessages.DialogButtonEntryInfo_description);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // EntryInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Image getIcon() {
-    return ICON;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// EntryInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Image getIcon() {
+		return ICON;
+	}
 
-  @Override
-  public Tool createTool() throws Exception {
-    return new DialogButtonDropTool();
-  }
+	@Override
+	public Tool createTool() throws Exception {
+		return new DialogButtonDropTool();
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/DoubleFieldEditorEntryInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/DoubleFieldEditorEntryInfo.java
index eb635a467..2c156c5b8 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/DoubleFieldEditorEntryInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/DoubleFieldEditorEntryInfo.java
@@ -35,58 +35,58 @@
  * @coverage rcp.editor.palette
  */
 public final class DoubleFieldEditorEntryInfo extends ToolEntryInfo {
-  private static final String TYPE_NAME = "org.eclipse.wb.swt.DoubleFieldEditor";
-  private static final Image ICON = loadIcon();
+	private static final String TYPE_NAME = "org.eclipse.wb.swt.DoubleFieldEditor";
+	private static final Image ICON = loadIcon();
 
-  private static Image loadIcon() {
-    InputStream input = Activator.getFile("wbp-meta/org/eclipse/wb/swt/DoubleFieldEditor.png");
-    try {
-      return new Image(null, input);
-    } finally {
-      IOUtils.closeQuietly(input);
-    }
-  }
+	private static Image loadIcon() {
+		InputStream input = Activator.getFile("wbp-meta/org/eclipse/wb/swt/DoubleFieldEditor.png");
+		try {
+			return new Image(null, input);
+		} finally {
+			IOUtils.closeQuietly(input);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DoubleFieldEditorEntryInfo() throws Exception {
-    setId(getClass().getName());
-    setName(PaletteMessages.DoubleFieldEditorEntryInfo_name);
-    setDescription(PaletteMessages.DoubleFieldEditorEntryInfo_description);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DoubleFieldEditorEntryInfo() throws Exception {
+		setId(getClass().getName());
+		setName(PaletteMessages.DoubleFieldEditorEntryInfo_name);
+		setDescription(PaletteMessages.DoubleFieldEditorEntryInfo_description);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // EntryInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Image getIcon() {
-    return ICON;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// EntryInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Image getIcon() {
+		return ICON;
+	}
 
-  @Override
-  public Tool createTool() throws Exception {
-    ProjectUtils.ensureResourceType(m_javaProject, Activator.getDefault().getBundle(), TYPE_NAME);
-    // create tool
-    ICreationFactory factory = new ICreationFactory() {
-      private JavaInfo m_javaInfo;
+	@Override
+	public Tool createTool() throws Exception {
+		ProjectUtils.ensureResourceType(m_javaProject, Activator.getDefault().getBundle(), TYPE_NAME);
+		// create tool
+		ICreationFactory factory = new ICreationFactory() {
+			private JavaInfo m_javaInfo;
 
-      @Override
-      public void activate() throws Exception {
-        CreationSupport creationSupport = new ConstructorCreationSupport();
-        m_javaInfo = JavaInfoUtils.createJavaInfo(m_editor, TYPE_NAME, creationSupport);
-        m_javaInfo.putArbitraryValue(JavaInfo.FLAG_MANUAL_COMPONENT, Boolean.TRUE);
-      }
+			@Override
+			public void activate() throws Exception {
+				CreationSupport creationSupport = new ConstructorCreationSupport();
+				m_javaInfo = JavaInfoUtils.createJavaInfo(m_editor, TYPE_NAME, creationSupport);
+				m_javaInfo.putArbitraryValue(JavaInfo.FLAG_MANUAL_COMPONENT, Boolean.TRUE);
+			}
 
-      @Override
-      public Object getNewObject() {
-        return m_javaInfo;
-      }
-    };
-    return new CreationTool(factory);
-  }
+			@Override
+			public Object getNewObject() {
+				return m_javaInfo;
+			}
+		};
+		return new CreationTool(factory);
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/PaletteMessages.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/PaletteMessages.java
index d77167ac1..2f22fc25e 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/PaletteMessages.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/PaletteMessages.java
@@ -3,29 +3,29 @@
 import org.eclipse.osgi.util.NLS;
 
 public class PaletteMessages extends NLS {
-  private static final String BUNDLE_NAME = "org.eclipse.wb.internal.rcp.palette.PaletteMessages"; //$NON-NLS-1$
-  public static String ActionExternalEntryInfo_description;
-  public static String ActionExternalEntryInfo_name;
-  public static String ActionNewEntryInfo_description;
-  public static String ActionNewEntryInfo_name;
-  public static String ActionUseEntryInfo_description;
-  public static String DialogButtonEntryInfo_description;
-  public static String DialogButtonEntryInfo_name;
-  public static String DoubleFieldEditorEntryInfo_description;
-  public static String DoubleFieldEditorEntryInfo_name;
-  public static String TableCompositeEntryInfo_description;
-  public static String TableCompositeEntryInfo_name;
-  public static String TableViewerCompositeEntryInfo_description;
-  public static String TableViewerCompositeEntryInfo_name;
-  public static String TreeCompositeEntryInfo_description;
-  public static String TreeCompositeEntryInfo_name;
-  public static String TreeViewerCompositeEntryInfo_description;
-  public static String TreeViewerCompositeEntryInfo_name;
-  static {
-    // initialize resource bundle
-    NLS.initializeMessages(BUNDLE_NAME, PaletteMessages.class);
-  }
+	private static final String BUNDLE_NAME = "org.eclipse.wb.internal.rcp.palette.PaletteMessages"; //$NON-NLS-1$
+	public static String ActionExternalEntryInfo_description;
+	public static String ActionExternalEntryInfo_name;
+	public static String ActionNewEntryInfo_description;
+	public static String ActionNewEntryInfo_name;
+	public static String ActionUseEntryInfo_description;
+	public static String DialogButtonEntryInfo_description;
+	public static String DialogButtonEntryInfo_name;
+	public static String DoubleFieldEditorEntryInfo_description;
+	public static String DoubleFieldEditorEntryInfo_name;
+	public static String TableCompositeEntryInfo_description;
+	public static String TableCompositeEntryInfo_name;
+	public static String TableViewerCompositeEntryInfo_description;
+	public static String TableViewerCompositeEntryInfo_name;
+	public static String TreeCompositeEntryInfo_description;
+	public static String TreeCompositeEntryInfo_name;
+	public static String TreeViewerCompositeEntryInfo_description;
+	public static String TreeViewerCompositeEntryInfo_name;
+	static {
+		// initialize resource bundle
+		NLS.initializeMessages(BUNDLE_NAME, PaletteMessages.class);
+	}
 
-  private PaletteMessages() {
-  }
+	private PaletteMessages() {
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/PerspectivePerspectiveDropEntryInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/PerspectivePerspectiveDropEntryInfo.java
index e29ea66e6..a277b8a09 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/PerspectivePerspectiveDropEntryInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/PerspectivePerspectiveDropEntryInfo.java
@@ -26,32 +26,32 @@
  * @coverage rcp.editor.palette
  */
 public final class PerspectivePerspectiveDropEntryInfo extends ToolEntryInfo {
-  private final PerspectiveInfo m_perspective;
+	private final PerspectiveInfo m_perspective;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public PerspectivePerspectiveDropEntryInfo(PerspectiveInfo perspective) {
-    m_perspective = perspective;
-    setId(perspective.getId());
-    setName(m_perspective.getName());
-    setDescription(m_perspective.getId() + "\n" + m_perspective.getClassName());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public PerspectivePerspectiveDropEntryInfo(PerspectiveInfo perspective) {
+		m_perspective = perspective;
+		setId(perspective.getId());
+		setName(m_perspective.getName());
+		setDescription(m_perspective.getId() + "\n" + m_perspective.getClassName());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // EntryInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Image getIcon() {
-    return m_perspective.getIcon();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// EntryInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Image getIcon() {
+		return m_perspective.getIcon();
+	}
 
-  @Override
-  public Tool createTool() throws Exception {
-    return new PerspectiveDropTool(m_perspective);
-  }
+	@Override
+	public Tool createTool() throws Exception {
+		return new PerspectiveDropTool(m_perspective);
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/PerspectiveViewDropEntryInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/PerspectiveViewDropEntryInfo.java
index 65c93f8bc..f1274f676 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/PerspectiveViewDropEntryInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/PerspectiveViewDropEntryInfo.java
@@ -26,32 +26,32 @@
  * @coverage rcp.editor.palette
  */
 public final class PerspectiveViewDropEntryInfo extends ToolEntryInfo {
-  private final ViewInfo m_view;
+	private final ViewInfo m_view;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public PerspectiveViewDropEntryInfo(ViewInfo view) {
-    m_view = view;
-    setId(view.getId());
-    setName(m_view.getName());
-    setDescription(m_view.getId() + "\n" + m_view.getClassName());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public PerspectiveViewDropEntryInfo(ViewInfo view) {
+		m_view = view;
+		setId(view.getId());
+		setName(m_view.getName());
+		setDescription(m_view.getId() + "\n" + m_view.getClassName());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // EntryInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Image getIcon() {
-    return m_view.getIcon();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// EntryInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Image getIcon() {
+		return m_view.getIcon();
+	}
 
-  @Override
-  public Tool createTool() throws Exception {
-    return new ViewDropTool(m_view);
-  }
+	@Override
+	public Tool createTool() throws Exception {
+		return new ViewDropTool(m_view);
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/TableCompositeEntryInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/TableCompositeEntryInfo.java
index 3aac71240..761e16099 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/TableCompositeEntryInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/TableCompositeEntryInfo.java
@@ -40,104 +40,104 @@
  * @coverage rcp.editor.palette
  */
 public final class TableCompositeEntryInfo extends ToolEntryInfo {
-  private static final Image ICON =
-      Activator.getImage("info/AbstractColumnLayout/TableComposite.gif");
-  private final ComponentEntryInfo m_compositeEntry;
+	private static final Image ICON =
+			Activator.getImage("info/AbstractColumnLayout/TableComposite.gif");
+	private final ComponentEntryInfo m_compositeEntry;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public TableCompositeEntryInfo() {
-    setName(PaletteMessages.TableCompositeEntryInfo_name);
-    setDescription(PaletteMessages.TableCompositeEntryInfo_description);
-    m_compositeEntry = new ComponentEntryInfo();
-    m_compositeEntry.setComponentClassName("org.eclipse.swt.widgets.Composite");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public TableCompositeEntryInfo() {
+		setName(PaletteMessages.TableCompositeEntryInfo_name);
+		setDescription(PaletteMessages.TableCompositeEntryInfo_description);
+		m_compositeEntry = new ComponentEntryInfo();
+		m_compositeEntry.setComponentClassName("org.eclipse.swt.widgets.Composite");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // EntryInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Image getIcon() {
-    return ICON;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// EntryInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Image getIcon() {
+		return ICON;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ToolEntryInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean initialize(IEditPartViewer editPartViewer, JavaInfo rootJavaInfo) {
-    return super.initialize(editPartViewer, rootJavaInfo)
-        && ProjectUtils.hasType(m_javaProject, "org.eclipse.jface.layout.TableColumnLayout")
-        && m_compositeEntry.initialize(editPartViewer, rootJavaInfo);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ToolEntryInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean initialize(IEditPartViewer editPartViewer, JavaInfo rootJavaInfo) {
+		return super.initialize(editPartViewer, rootJavaInfo)
+				&& ProjectUtils.hasType(m_javaProject, "org.eclipse.jface.layout.TableColumnLayout")
+				&& m_compositeEntry.initialize(editPartViewer, rootJavaInfo);
+	}
 
-  @Override
-  public Tool createTool() throws Exception {
-    final CreationTool creationTool = (CreationTool) m_compositeEntry.createTool();
-    // configure CreationTool to add also TableColumnLayout and Table
-    m_rootJavaInfo.addBroadcastListener(new JavaEventListener() {
-      @Override
-      public void addAfter(JavaInfo parent, JavaInfo child) throws Exception {
-        ICreationFactory creationFactory = creationTool.getFactory();
-        CompositeInfo composite = (CompositeInfo) creationFactory.getNewObject();
-        if (child == composite) {
-          composite.removeBroadcastListener(this);
-          configureComposite(composite);
-        }
-      }
-    });
-    // OK, return CreationTool
-    return creationTool;
-  }
+	@Override
+	public Tool createTool() throws Exception {
+		final CreationTool creationTool = (CreationTool) m_compositeEntry.createTool();
+		// configure CreationTool to add also TableColumnLayout and Table
+		m_rootJavaInfo.addBroadcastListener(new JavaEventListener() {
+			@Override
+			public void addAfter(JavaInfo parent, JavaInfo child) throws Exception {
+				ICreationFactory creationFactory = creationTool.getFactory();
+				CompositeInfo composite = (CompositeInfo) creationFactory.getNewObject();
+				if (child == composite) {
+					composite.removeBroadcastListener(this);
+					configureComposite(composite);
+				}
+			}
+		});
+		// OK, return CreationTool
+		return creationTool;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Implementation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Configures {@link CompositeInfo} by creating {@link Table} and
-   * {@link org.eclipse.jface.layout.TableColumnLayout}.
-   */
-  private void configureComposite(CompositeInfo composite) throws Exception {
-    composite.putArbitraryValue(CompositeInfo.KEY_DONT_INHERIT_LAYOUT, Boolean.TRUE);
-    composite.getRootJava().refreshLight();
-    // set some known layout, such as RowLayout
-    RowLayoutInfo rowLayout;
-    {
-      rowLayout =
-          (RowLayoutInfo) JavaInfoUtils.createJavaInfo(
-              m_editor,
-              "org.eclipse.swt.layout.RowLayout",
-              new ConstructorCreationSupport());
-      m_editor.setResolveImports(false);
-      composite.setLayout(rowLayout);
-      m_editor.setResolveImports(true);
-    }
-    // create new Table using RowLayout
-    {
-      ControlInfo table =
-          (ControlInfo) JavaInfoUtils.createJavaInfo(
-              m_editor,
-              "org.eclipse.swt.widgets.Table",
-              new ConstructorCreationSupport());
-      rowLayout.command_CREATE(table, null);
-    }
-    // set TableColumnLayout for Composite
-    {
-      LayoutInfo tableColumnLayout =
-          (LayoutInfo) JavaInfoUtils.createJavaInfo(
-              m_editor,
-              "org.eclipse.jface.layout.TableColumnLayout",
-              new ConstructorCreationSupport());
-      composite.setLayout(tableColumnLayout);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Implementation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Configures {@link CompositeInfo} by creating {@link Table} and
+	 * {@link org.eclipse.jface.layout.TableColumnLayout}.
+	 */
+	private void configureComposite(CompositeInfo composite) throws Exception {
+		composite.putArbitraryValue(CompositeInfo.KEY_DONT_INHERIT_LAYOUT, Boolean.TRUE);
+		composite.getRootJava().refreshLight();
+		// set some known layout, such as RowLayout
+		RowLayoutInfo rowLayout;
+		{
+			rowLayout =
+					(RowLayoutInfo) JavaInfoUtils.createJavaInfo(
+							m_editor,
+							"org.eclipse.swt.layout.RowLayout",
+							new ConstructorCreationSupport());
+			m_editor.setResolveImports(false);
+			composite.setLayout(rowLayout);
+			m_editor.setResolveImports(true);
+		}
+		// create new Table using RowLayout
+		{
+			ControlInfo table =
+					(ControlInfo) JavaInfoUtils.createJavaInfo(
+							m_editor,
+							"org.eclipse.swt.widgets.Table",
+							new ConstructorCreationSupport());
+			rowLayout.command_CREATE(table, null);
+		}
+		// set TableColumnLayout for Composite
+		{
+			LayoutInfo tableColumnLayout =
+					(LayoutInfo) JavaInfoUtils.createJavaInfo(
+							m_editor,
+							"org.eclipse.jface.layout.TableColumnLayout",
+							new ConstructorCreationSupport());
+			composite.setLayout(tableColumnLayout);
+		}
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/TableViewerCompositeEntryInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/TableViewerCompositeEntryInfo.java
index f4e02f860..6c5060f20 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/TableViewerCompositeEntryInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/TableViewerCompositeEntryInfo.java
@@ -42,107 +42,107 @@
  * @coverage rcp.editor.palette
  */
 public final class TableViewerCompositeEntryInfo extends ToolEntryInfo {
-  private static final Image ICON =
-      Activator.getImage("info/AbstractColumnLayout/TableViewerComposite.gif");
-  private final ComponentEntryInfo m_compositeEntry;
+	private static final Image ICON =
+			Activator.getImage("info/AbstractColumnLayout/TableViewerComposite.gif");
+	private final ComponentEntryInfo m_compositeEntry;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public TableViewerCompositeEntryInfo() {
-    setName(PaletteMessages.TableViewerCompositeEntryInfo_name);
-    setDescription(PaletteMessages.TableViewerCompositeEntryInfo_description);
-    m_compositeEntry = new ComponentEntryInfo();
-    m_compositeEntry.setComponentClassName("org.eclipse.swt.widgets.Composite");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public TableViewerCompositeEntryInfo() {
+		setName(PaletteMessages.TableViewerCompositeEntryInfo_name);
+		setDescription(PaletteMessages.TableViewerCompositeEntryInfo_description);
+		m_compositeEntry = new ComponentEntryInfo();
+		m_compositeEntry.setComponentClassName("org.eclipse.swt.widgets.Composite");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // EntryInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Image getIcon() {
-    return ICON;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// EntryInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Image getIcon() {
+		return ICON;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ToolEntryInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean initialize(IEditPartViewer editPartViewer, JavaInfo rootJavaInfo) {
-    return super.initialize(editPartViewer, rootJavaInfo)
-        && ProjectUtils.hasType(m_javaProject, "org.eclipse.jface.layout.TableColumnLayout")
-        && m_compositeEntry.initialize(editPartViewer, rootJavaInfo);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ToolEntryInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean initialize(IEditPartViewer editPartViewer, JavaInfo rootJavaInfo) {
+		return super.initialize(editPartViewer, rootJavaInfo)
+				&& ProjectUtils.hasType(m_javaProject, "org.eclipse.jface.layout.TableColumnLayout")
+				&& m_compositeEntry.initialize(editPartViewer, rootJavaInfo);
+	}
 
-  @Override
-  public Tool createTool() throws Exception {
-    final CreationTool creationTool = (CreationTool) m_compositeEntry.createTool();
-    // configure CreationTool to add also TableColumnLayout and Table
-    m_rootJavaInfo.addBroadcastListener(new JavaEventListener() {
-      @Override
-      public void addAfter(JavaInfo parent, JavaInfo child) throws Exception {
-        ICreationFactory creationFactory = creationTool.getFactory();
-        CompositeInfo composite = (CompositeInfo) creationFactory.getNewObject();
-        if (child == composite) {
-          composite.removeBroadcastListener(this);
-          configureComposite(composite);
-        }
-      }
-    });
-    // OK, return CreationTool
-    return creationTool;
-  }
+	@Override
+	public Tool createTool() throws Exception {
+		final CreationTool creationTool = (CreationTool) m_compositeEntry.createTool();
+		// configure CreationTool to add also TableColumnLayout and Table
+		m_rootJavaInfo.addBroadcastListener(new JavaEventListener() {
+			@Override
+			public void addAfter(JavaInfo parent, JavaInfo child) throws Exception {
+				ICreationFactory creationFactory = creationTool.getFactory();
+				CompositeInfo composite = (CompositeInfo) creationFactory.getNewObject();
+				if (child == composite) {
+					composite.removeBroadcastListener(this);
+					configureComposite(composite);
+				}
+			}
+		});
+		// OK, return CreationTool
+		return creationTool;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Implementation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Configures {@link CompositeInfo} by creating {@link Table} and
-   * {@link org.eclipse.jface.layout.TableColumnLayout}.
-   */
-  private void configureComposite(CompositeInfo composite) throws Exception {
-    composite.putArbitraryValue(CompositeInfo.KEY_DONT_INHERIT_LAYOUT, Boolean.TRUE);
-    composite.getRootJava().refreshLight();
-    // set some known layout, such as RowLayout
-    RowLayoutInfo rowLayout;
-    {
-      rowLayout =
-          (RowLayoutInfo) JavaInfoUtils.createJavaInfo(
-              m_editor,
-              "org.eclipse.swt.layout.RowLayout",
-              new ConstructorCreationSupport());
-      m_editor.setResolveImports(false);
-      composite.setLayout(rowLayout);
-      m_editor.setResolveImports(true);
-    }
-    // create new TableViewer using RowLayout
-    {
-      ViewerInfo tableViewer =
-          (ViewerInfo) JavaInfoUtils.createJavaInfo(
-              m_editor,
-              "org.eclipse.jface.viewers.TableViewer",
-              new ConstructorCreationSupport());
-      ControlInfo table = (ControlInfo) JavaInfoUtils.getWrapped(tableViewer);
-      rowLayout.command_CREATE(table, null);
-      table.getPropertyByTitle("linesVisible").setValue(true);
-      table.getPropertyByTitle("headerVisible").setValue(true);
-    }
-    // set TableColumnLayout for Composite
-    {
-      LayoutInfo tableColumnLayout =
-          (LayoutInfo) JavaInfoUtils.createJavaInfo(
-              m_editor,
-              "org.eclipse.jface.layout.TableColumnLayout",
-              new ConstructorCreationSupport());
-      composite.setLayout(tableColumnLayout);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Implementation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Configures {@link CompositeInfo} by creating {@link Table} and
+	 * {@link org.eclipse.jface.layout.TableColumnLayout}.
+	 */
+	private void configureComposite(CompositeInfo composite) throws Exception {
+		composite.putArbitraryValue(CompositeInfo.KEY_DONT_INHERIT_LAYOUT, Boolean.TRUE);
+		composite.getRootJava().refreshLight();
+		// set some known layout, such as RowLayout
+		RowLayoutInfo rowLayout;
+		{
+			rowLayout =
+					(RowLayoutInfo) JavaInfoUtils.createJavaInfo(
+							m_editor,
+							"org.eclipse.swt.layout.RowLayout",
+							new ConstructorCreationSupport());
+			m_editor.setResolveImports(false);
+			composite.setLayout(rowLayout);
+			m_editor.setResolveImports(true);
+		}
+		// create new TableViewer using RowLayout
+		{
+			ViewerInfo tableViewer =
+					(ViewerInfo) JavaInfoUtils.createJavaInfo(
+							m_editor,
+							"org.eclipse.jface.viewers.TableViewer",
+							new ConstructorCreationSupport());
+			ControlInfo table = (ControlInfo) JavaInfoUtils.getWrapped(tableViewer);
+			rowLayout.command_CREATE(table, null);
+			table.getPropertyByTitle("linesVisible").setValue(true);
+			table.getPropertyByTitle("headerVisible").setValue(true);
+		}
+		// set TableColumnLayout for Composite
+		{
+			LayoutInfo tableColumnLayout =
+					(LayoutInfo) JavaInfoUtils.createJavaInfo(
+							m_editor,
+							"org.eclipse.jface.layout.TableColumnLayout",
+							new ConstructorCreationSupport());
+			composite.setLayout(tableColumnLayout);
+		}
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/TreeCompositeEntryInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/TreeCompositeEntryInfo.java
index dac8bcd39..e6f5662e7 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/TreeCompositeEntryInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/TreeCompositeEntryInfo.java
@@ -40,106 +40,106 @@
  * @coverage rcp.editor.palette
  */
 public final class TreeCompositeEntryInfo extends ToolEntryInfo {
-  private static final Image ICON =
-      Activator.getImage("info/AbstractColumnLayout/TreeComposite.gif");
-  private final ComponentEntryInfo m_compositeEntry;
+	private static final Image ICON =
+			Activator.getImage("info/AbstractColumnLayout/TreeComposite.gif");
+	private final ComponentEntryInfo m_compositeEntry;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public TreeCompositeEntryInfo() {
-    setName(PaletteMessages.TreeCompositeEntryInfo_name);
-    setDescription(PaletteMessages.TreeCompositeEntryInfo_description);
-    m_compositeEntry = new ComponentEntryInfo();
-    m_compositeEntry.setComponentClassName("org.eclipse.swt.widgets.Composite");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public TreeCompositeEntryInfo() {
+		setName(PaletteMessages.TreeCompositeEntryInfo_name);
+		setDescription(PaletteMessages.TreeCompositeEntryInfo_description);
+		m_compositeEntry = new ComponentEntryInfo();
+		m_compositeEntry.setComponentClassName("org.eclipse.swt.widgets.Composite");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // EntryInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Image getIcon() {
-    return ICON;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// EntryInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Image getIcon() {
+		return ICON;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ToolEntryInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean initialize(IEditPartViewer editPartViewer, JavaInfo rootJavaInfo) {
-    return super.initialize(editPartViewer, rootJavaInfo)
-        && ProjectUtils.hasType(m_javaProject, "org.eclipse.jface.layout.TreeColumnLayout")
-        && m_compositeEntry.initialize(editPartViewer, rootJavaInfo);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ToolEntryInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean initialize(IEditPartViewer editPartViewer, JavaInfo rootJavaInfo) {
+		return super.initialize(editPartViewer, rootJavaInfo)
+				&& ProjectUtils.hasType(m_javaProject, "org.eclipse.jface.layout.TreeColumnLayout")
+				&& m_compositeEntry.initialize(editPartViewer, rootJavaInfo);
+	}
 
-  @Override
-  public Tool createTool() throws Exception {
-    final CreationTool creationTool = (CreationTool) m_compositeEntry.createTool();
-    // configure CreationTool to add also TreeColumnLayout and Tree
-    m_rootJavaInfo.addBroadcastListener(new JavaEventListener() {
-      @Override
-      public void addAfter(JavaInfo parent, JavaInfo child) throws Exception {
-        ICreationFactory creationFactory = creationTool.getFactory();
-        CompositeInfo composite = (CompositeInfo) creationFactory.getNewObject();
-        if (child == composite) {
-          composite.removeBroadcastListener(this);
-          configureComposite(composite);
-        }
-      }
-    });
-    // OK, return CreationTool
-    return creationTool;
-  }
+	@Override
+	public Tool createTool() throws Exception {
+		final CreationTool creationTool = (CreationTool) m_compositeEntry.createTool();
+		// configure CreationTool to add also TreeColumnLayout and Tree
+		m_rootJavaInfo.addBroadcastListener(new JavaEventListener() {
+			@Override
+			public void addAfter(JavaInfo parent, JavaInfo child) throws Exception {
+				ICreationFactory creationFactory = creationTool.getFactory();
+				CompositeInfo composite = (CompositeInfo) creationFactory.getNewObject();
+				if (child == composite) {
+					composite.removeBroadcastListener(this);
+					configureComposite(composite);
+				}
+			}
+		});
+		// OK, return CreationTool
+		return creationTool;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Implementation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Configures {@link CompositeInfo} by creating {@link Tree} and
-   * {@link org.eclipse.jface.layout.TreeColumnLayout}.
-   */
-  private void configureComposite(CompositeInfo composite) throws Exception {
-    composite.putArbitraryValue(CompositeInfo.KEY_DONT_INHERIT_LAYOUT, Boolean.TRUE);
-    composite.getRootJava().refreshLight();
-    // set some known layout, such as RowLayout
-    RowLayoutInfo rowLayout;
-    {
-      rowLayout =
-          (RowLayoutInfo) JavaInfoUtils.createJavaInfo(
-              m_editor,
-              "org.eclipse.swt.layout.RowLayout",
-              new ConstructorCreationSupport());
-      m_editor.setResolveImports(false);
-      composite.setLayout(rowLayout);
-      m_editor.setResolveImports(true);
-    }
-    // create new Tree using RowLayout
-    {
-      ControlInfo tree =
-          (ControlInfo) JavaInfoUtils.createJavaInfo(
-              m_editor,
-              "org.eclipse.swt.widgets.Tree",
-              new ConstructorCreationSupport());
-      rowLayout.command_CREATE(tree, null);
-      tree.getPropertyByTitle("linesVisible").setValue(true);
-      tree.getPropertyByTitle("headerVisible").setValue(true);
-    }
-    // set TreeColumnLayout for Composite
-    {
-      LayoutInfo treeColumnLayout =
-          (LayoutInfo) JavaInfoUtils.createJavaInfo(
-              m_editor,
-              "org.eclipse.jface.layout.TreeColumnLayout",
-              new ConstructorCreationSupport());
-      composite.setLayout(treeColumnLayout);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Implementation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Configures {@link CompositeInfo} by creating {@link Tree} and
+	 * {@link org.eclipse.jface.layout.TreeColumnLayout}.
+	 */
+	private void configureComposite(CompositeInfo composite) throws Exception {
+		composite.putArbitraryValue(CompositeInfo.KEY_DONT_INHERIT_LAYOUT, Boolean.TRUE);
+		composite.getRootJava().refreshLight();
+		// set some known layout, such as RowLayout
+		RowLayoutInfo rowLayout;
+		{
+			rowLayout =
+					(RowLayoutInfo) JavaInfoUtils.createJavaInfo(
+							m_editor,
+							"org.eclipse.swt.layout.RowLayout",
+							new ConstructorCreationSupport());
+			m_editor.setResolveImports(false);
+			composite.setLayout(rowLayout);
+			m_editor.setResolveImports(true);
+		}
+		// create new Tree using RowLayout
+		{
+			ControlInfo tree =
+					(ControlInfo) JavaInfoUtils.createJavaInfo(
+							m_editor,
+							"org.eclipse.swt.widgets.Tree",
+							new ConstructorCreationSupport());
+			rowLayout.command_CREATE(tree, null);
+			tree.getPropertyByTitle("linesVisible").setValue(true);
+			tree.getPropertyByTitle("headerVisible").setValue(true);
+		}
+		// set TreeColumnLayout for Composite
+		{
+			LayoutInfo treeColumnLayout =
+					(LayoutInfo) JavaInfoUtils.createJavaInfo(
+							m_editor,
+							"org.eclipse.jface.layout.TreeColumnLayout",
+							new ConstructorCreationSupport());
+			composite.setLayout(treeColumnLayout);
+		}
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/TreeViewerCompositeEntryInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/TreeViewerCompositeEntryInfo.java
index 70beb09ff..226ec4a06 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/TreeViewerCompositeEntryInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/TreeViewerCompositeEntryInfo.java
@@ -42,107 +42,107 @@
  * @coverage rcp.editor.palette
  */
 public final class TreeViewerCompositeEntryInfo extends ToolEntryInfo {
-  private static final Image ICON =
-      Activator.getImage("info/AbstractColumnLayout/TreeViewerComposite.gif");
-  private final ComponentEntryInfo m_compositeEntry;
+	private static final Image ICON =
+			Activator.getImage("info/AbstractColumnLayout/TreeViewerComposite.gif");
+	private final ComponentEntryInfo m_compositeEntry;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public TreeViewerCompositeEntryInfo() {
-    setName(PaletteMessages.TreeViewerCompositeEntryInfo_name);
-    setDescription(PaletteMessages.TreeViewerCompositeEntryInfo_description);
-    m_compositeEntry = new ComponentEntryInfo();
-    m_compositeEntry.setComponentClassName("org.eclipse.swt.widgets.Composite");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public TreeViewerCompositeEntryInfo() {
+		setName(PaletteMessages.TreeViewerCompositeEntryInfo_name);
+		setDescription(PaletteMessages.TreeViewerCompositeEntryInfo_description);
+		m_compositeEntry = new ComponentEntryInfo();
+		m_compositeEntry.setComponentClassName("org.eclipse.swt.widgets.Composite");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // EntryInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Image getIcon() {
-    return ICON;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// EntryInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Image getIcon() {
+		return ICON;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ToolEntryInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean initialize(IEditPartViewer editPartViewer, JavaInfo rootJavaInfo) {
-    return super.initialize(editPartViewer, rootJavaInfo)
-        && ProjectUtils.hasType(m_javaProject, "org.eclipse.jface.layout.TreeColumnLayout")
-        && m_compositeEntry.initialize(editPartViewer, rootJavaInfo);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ToolEntryInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean initialize(IEditPartViewer editPartViewer, JavaInfo rootJavaInfo) {
+		return super.initialize(editPartViewer, rootJavaInfo)
+				&& ProjectUtils.hasType(m_javaProject, "org.eclipse.jface.layout.TreeColumnLayout")
+				&& m_compositeEntry.initialize(editPartViewer, rootJavaInfo);
+	}
 
-  @Override
-  public Tool createTool() throws Exception {
-    final CreationTool creationTool = (CreationTool) m_compositeEntry.createTool();
-    // configure CreationTool to add also TreeColumnLayout and Tree
-    m_rootJavaInfo.addBroadcastListener(new JavaEventListener() {
-      @Override
-      public void addAfter(JavaInfo parent, JavaInfo child) throws Exception {
-        ICreationFactory creationFactory = creationTool.getFactory();
-        CompositeInfo composite = (CompositeInfo) creationFactory.getNewObject();
-        if (child == composite) {
-          composite.removeBroadcastListener(this);
-          configureComposite(composite);
-        }
-      }
-    });
-    // OK, return CreationTool
-    return creationTool;
-  }
+	@Override
+	public Tool createTool() throws Exception {
+		final CreationTool creationTool = (CreationTool) m_compositeEntry.createTool();
+		// configure CreationTool to add also TreeColumnLayout and Tree
+		m_rootJavaInfo.addBroadcastListener(new JavaEventListener() {
+			@Override
+			public void addAfter(JavaInfo parent, JavaInfo child) throws Exception {
+				ICreationFactory creationFactory = creationTool.getFactory();
+				CompositeInfo composite = (CompositeInfo) creationFactory.getNewObject();
+				if (child == composite) {
+					composite.removeBroadcastListener(this);
+					configureComposite(composite);
+				}
+			}
+		});
+		// OK, return CreationTool
+		return creationTool;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Implementation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Configures {@link CompositeInfo} by creating {@link Tree} and
-   * {@link org.eclipse.jface.layout.TreeColumnLayout}.
-   */
-  private void configureComposite(CompositeInfo composite) throws Exception {
-    composite.putArbitraryValue(CompositeInfo.KEY_DONT_INHERIT_LAYOUT, Boolean.TRUE);
-    composite.getRootJava().refreshLight();
-    // set some known layout, such as RowLayout
-    RowLayoutInfo rowLayout;
-    {
-      rowLayout =
-          (RowLayoutInfo) JavaInfoUtils.createJavaInfo(
-              m_editor,
-              "org.eclipse.swt.layout.RowLayout",
-              new ConstructorCreationSupport());
-      m_editor.setResolveImports(false);
-      composite.setLayout(rowLayout);
-      m_editor.setResolveImports(true);
-    }
-    // create new TreeViewer using RowLayout
-    {
-      ViewerInfo treeViewer =
-          (ViewerInfo) JavaInfoUtils.createJavaInfo(
-              m_editor,
-              "org.eclipse.jface.viewers.TreeViewer",
-              new ConstructorCreationSupport());
-      ControlInfo tree = (ControlInfo) JavaInfoUtils.getWrapped(treeViewer);
-      rowLayout.command_CREATE(tree, null);
-      tree.getPropertyByTitle("linesVisible").setValue(true);
-      tree.getPropertyByTitle("headerVisible").setValue(true);
-    }
-    // set TreeColumnLayout for Composite
-    {
-      LayoutInfo treeColumnLayout =
-          (LayoutInfo) JavaInfoUtils.createJavaInfo(
-              m_editor,
-              "org.eclipse.jface.layout.TreeColumnLayout",
-              new ConstructorCreationSupport());
-      composite.setLayout(treeColumnLayout);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Implementation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Configures {@link CompositeInfo} by creating {@link Tree} and
+	 * {@link org.eclipse.jface.layout.TreeColumnLayout}.
+	 */
+	private void configureComposite(CompositeInfo composite) throws Exception {
+		composite.putArbitraryValue(CompositeInfo.KEY_DONT_INHERIT_LAYOUT, Boolean.TRUE);
+		composite.getRootJava().refreshLight();
+		// set some known layout, such as RowLayout
+		RowLayoutInfo rowLayout;
+		{
+			rowLayout =
+					(RowLayoutInfo) JavaInfoUtils.createJavaInfo(
+							m_editor,
+							"org.eclipse.swt.layout.RowLayout",
+							new ConstructorCreationSupport());
+			m_editor.setResolveImports(false);
+			composite.setLayout(rowLayout);
+			m_editor.setResolveImports(true);
+		}
+		// create new TreeViewer using RowLayout
+		{
+			ViewerInfo treeViewer =
+					(ViewerInfo) JavaInfoUtils.createJavaInfo(
+							m_editor,
+							"org.eclipse.jface.viewers.TreeViewer",
+							new ConstructorCreationSupport());
+			ControlInfo tree = (ControlInfo) JavaInfoUtils.getWrapped(treeViewer);
+			rowLayout.command_CREATE(tree, null);
+			tree.getPropertyByTitle("linesVisible").setValue(true);
+			tree.getPropertyByTitle("headerVisible").setValue(true);
+		}
+		// set TreeColumnLayout for Composite
+		{
+			LayoutInfo treeColumnLayout =
+					(LayoutInfo) JavaInfoUtils.createJavaInfo(
+							m_editor,
+							"org.eclipse.jface.layout.TreeColumnLayout",
+							new ConstructorCreationSupport());
+			composite.setLayout(treeColumnLayout);
+		}
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/parser/ParseFactory.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/parser/ParseFactory.java
index ef8c4b7ce..b4bfe79bb 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/parser/ParseFactory.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/parser/ParseFactory.java
@@ -84,427 +84,427 @@
  * @coverage rcp.parser
  */
 public final class ParseFactory extends org.eclipse.wb.internal.swt.parser.ParseFactory {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IParseFactory
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final String[] KNOWN_TYPES = {
-      "org.eclipse.swt.widgets.Widget",
-      "org.eclipse.swt.widgets.Dialog",
-      "org.eclipse.jface.window.Window",
-      "org.eclipse.jface.dialogs.DialogPage",
-      "org.eclipse.ui.part.WorkbenchPart",
-      "org.eclipse.ui.part.Page",
-      "org.eclipse.ui.IPerspectiveFactory",
-      "org.eclipse.ui.application.ActionBarAdvisor",
-      "org.eclipse.ui.forms.SectionPart",
-      "org.eclipse.ui.forms.IDetailsPage",
-      "org.eclipse.ui.forms.MasterDetailsBlock",
-      "org.eclipse.ui.splash.AbstractSplashHandler",};
-  public static final String[] NOT_EDITING_TYPES = {
-      "org.eclipse.swt.widgets.TabItem",
-      "org.eclipse.swt.custom.CTabItem",};
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IParseFactory
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final String[] KNOWN_TYPES = {
+			"org.eclipse.swt.widgets.Widget",
+			"org.eclipse.swt.widgets.Dialog",
+			"org.eclipse.jface.window.Window",
+			"org.eclipse.jface.dialogs.DialogPage",
+			"org.eclipse.ui.part.WorkbenchPart",
+			"org.eclipse.ui.part.Page",
+			"org.eclipse.ui.IPerspectiveFactory",
+			"org.eclipse.ui.application.ActionBarAdvisor",
+			"org.eclipse.ui.forms.SectionPart",
+			"org.eclipse.ui.forms.IDetailsPage",
+			"org.eclipse.ui.forms.MasterDetailsBlock",
+			"org.eclipse.ui.splash.AbstractSplashHandler",};
+	public static final String[] NOT_EDITING_TYPES = {
+			"org.eclipse.swt.widgets.TabItem",
+			"org.eclipse.swt.custom.CTabItem",};
 
-  @Override
-  public ParseRootContext getRootContext(AstEditor editor,
-      TypeDeclaration typeDeclaration,
-      ITypeBinding typeBinding) throws Exception {
-    // check for "Chinese problem" - using SWT without configuring project for SWT
-    if (editor.getSource().contains("org.eclipse.swt.")
-        && editor.getJavaProject().findType("org.eclipse.swt.SWT") == null) {
-      throw new DesignerException(IExceptionConstants.NOT_CONFIGURED_FOR_SWT);
-    }
-    // check for RCP project
-    if (!is_RCPContext(editor)) {
-      return null;
-    }
-    // special unsupported classes
-    if (AstNodeUtils.isSuccessorOf(typeBinding, "org.eclipse.jface.wizard.IWizard")) {
-      throw new DesignerException(IExceptionConstants.NO_DESIGN_WIZARD);
-    }
-    if (AstNodeUtils.isSuccessorOf(typeBinding, "org.eclipse.ui.part.MultiPageEditorPart")) {
-      throw new DesignerException(IExceptionConstants.NO_DESIGN_MP_EDITOR);
-    }
-    if (AstNodeUtils.isSuccessorOf(typeBinding, NOT_EDITING_TYPES)) {
-      throw new DesignerException(IExceptionConstants.NO_DESIGN_WIDGET);
-    }
-    // check for RCP type
-    if (!isRCPObject(typeDeclaration)) {
-      return null;
-    }
-    // prepare class loader
-    initializeClassLoader(editor);
-    // check for @wbp.parser.entryPoint
-    {
-      MethodDeclaration method = ExecutionFlowUtils.getExecutionFlow_entryPoint(typeDeclaration);
-      if (method != null) {
-        List<MethodDeclaration> rootMethods = Lists.newArrayList(method);
-        return new ParseRootContext(null, new ExecutionFlowDescription(rootMethods));
-      }
-    }
-    // check for org.eclipse.ui.IPerspectiveFactory
-    if (AstNodeUtils.isSuccessorOf(typeBinding, "org.eclipse.ui.IPerspectiveFactory")) {
-      ClassLoader classLoader = EditorState.get(editor).getEditorLoader();
-      MethodDeclaration createMethod =
-          AstNodeUtils.getMethodBySignature(
-              typeDeclaration,
-              "createInitialLayout(org.eclipse.ui.IPageLayout)");
-      SingleVariableDeclaration pageLayoutParameter = DomGenerics.parameters(createMethod).get(0);
-      Class<?> pageLayoutClass = classLoader.loadClass("org.eclipse.ui.IPageLayout");
-      //
-      CreationSupport creationSupport = new PageLayoutCreationSupport(pageLayoutParameter);
-      JavaInfo javaInfo = JavaInfoUtils.createJavaInfo(editor, pageLayoutClass, creationSupport);
-      if (javaInfo != null) {
-        ExecutionFlowUtils2.ensurePermanentValue(pageLayoutParameter.getName()).setModel(javaInfo);
-        javaInfo.setVariableSupport(new MethodParameterVariableSupport(javaInfo,
-            pageLayoutParameter));
-        // prepare root context
-        List<MethodDeclaration> rootMethods = ImmutableList.of(createMethod);
-        return new ParseRootContext(javaInfo, new ExecutionFlowDescription(rootMethods));
-      }
-    }
-    // support for known RCP super-types
-    if (AstNodeUtils.isSuccessorOf(typeBinding, KNOWN_TYPES)) {
-      ITypeBinding typeBinding_super = typeBinding.getSuperclass();
-      // prepare Class of "super"
-      Class<?> superClass;
-      {
-        superClass = getSuperClass(editor, typeBinding_super);
-        if (superClass == Object.class) {
-          if (AstNodeUtils.isSuccessorOf(typeBinding, "org.eclipse.ui.forms.IDetailsPage")) {
-            ClassLoader classLoader = EditorState.get(editor).getEditorLoader();
-            superClass = classLoader.loadClass("org.eclipse.ui.forms.IDetailsPage");
-          }
-        }
-        if (superClass == Dialog.class) {
-          ClassLoader classLoader = EditorState.get(editor).getEditorLoader();
-          superClass = DialogInfo.getNotAbstractDialog(classLoader);
-        }
-      }
-      // prepare creation
-      MethodDeclaration constructor = getConstructor(editor, typeDeclaration);
-      ThisCreationSupport creationSupport = new ThisCreationSupport(constructor);
-      // try to create JavaInfo
-      JavaInfo javaInfo = JavaInfoUtils.createJavaInfo(editor, superClass, creationSupport);
-      if (javaInfo != null) {
-        javaInfo.setVariableSupport(new ThisVariableSupport(javaInfo, constructor));
-        // prepare root context
-        List<MethodDeclaration> rootMethods = Lists.newArrayList();
-        rootMethods.add(constructor);
-        if (javaInfo instanceof DialogInfo) {
-          DialogInfo.contributeExecutionFlow(typeDeclaration, rootMethods);
-        }
-        return new ParseRootContext(javaInfo, new ExecutionFlowDescription(rootMethods));
-      }
-    }
-    // E4 part
-    for (MethodDeclaration method : typeDeclaration.getMethods()) {
-      IAnnotationBinding[] annotations = method.resolveBinding().getAnnotations();
-      for (IAnnotationBinding annotation : annotations) {
-        String annotationName = annotation.getAnnotationType().getQualifiedName();
-        if ("javax.annotation.PostConstruct".equals(annotationName)) {
-          for (SingleVariableDeclaration parameter : DomGenerics.parameters(method)) {
-            if (AstNodeUtils.isSuccessorOf(
-                parameter.getType().resolveBinding(),
-                "org.eclipse.swt.widgets.Composite")) {
-              // prepare ComponentDescription
-              ComponentDescription componentDescription =
-                  ComponentDescriptionHelper.getDescription(
-                      editor,
-                      "org.eclipse.swt.widgets.Composite");
-              componentDescription.setToolkit(RcpToolkitDescription.INSTANCE);
-              // prepare JavaInfo
-              JavaInfo javaInfo =
-                  new E4PartInfo(editor,
-                      componentDescription,
-                      new MethodParameterCreationSupport(parameter));
-              javaInfo.setVariableSupport(new MethodParameterVariableSupport(javaInfo, parameter));
-              // register JavaInfo
-              ObjectInfoUtils.setNewId(javaInfo);
-              javaInfo.bindToExpression(parameter.getName());
-              // prepare root context
-              List<MethodDeclaration> rootMethods = Lists.newArrayList(method);
-              return new ParseRootContext(javaInfo, new ExecutionFlowDescription(rootMethods));
-            }
-          }
-        }
-      }
-    }
-    // no root found
-    return null;
-  }
+	@Override
+	public ParseRootContext getRootContext(AstEditor editor,
+			TypeDeclaration typeDeclaration,
+			ITypeBinding typeBinding) throws Exception {
+		// check for "Chinese problem" - using SWT without configuring project for SWT
+		if (editor.getSource().contains("org.eclipse.swt.")
+				&& editor.getJavaProject().findType("org.eclipse.swt.SWT") == null) {
+			throw new DesignerException(IExceptionConstants.NOT_CONFIGURED_FOR_SWT);
+		}
+		// check for RCP project
+		if (!is_RCPContext(editor)) {
+			return null;
+		}
+		// special unsupported classes
+		if (AstNodeUtils.isSuccessorOf(typeBinding, "org.eclipse.jface.wizard.IWizard")) {
+			throw new DesignerException(IExceptionConstants.NO_DESIGN_WIZARD);
+		}
+		if (AstNodeUtils.isSuccessorOf(typeBinding, "org.eclipse.ui.part.MultiPageEditorPart")) {
+			throw new DesignerException(IExceptionConstants.NO_DESIGN_MP_EDITOR);
+		}
+		if (AstNodeUtils.isSuccessorOf(typeBinding, NOT_EDITING_TYPES)) {
+			throw new DesignerException(IExceptionConstants.NO_DESIGN_WIDGET);
+		}
+		// check for RCP type
+		if (!isRCPObject(typeDeclaration)) {
+			return null;
+		}
+		// prepare class loader
+		initializeClassLoader(editor);
+		// check for @wbp.parser.entryPoint
+		{
+			MethodDeclaration method = ExecutionFlowUtils.getExecutionFlow_entryPoint(typeDeclaration);
+			if (method != null) {
+				List<MethodDeclaration> rootMethods = Lists.newArrayList(method);
+				return new ParseRootContext(null, new ExecutionFlowDescription(rootMethods));
+			}
+		}
+		// check for org.eclipse.ui.IPerspectiveFactory
+		if (AstNodeUtils.isSuccessorOf(typeBinding, "org.eclipse.ui.IPerspectiveFactory")) {
+			ClassLoader classLoader = EditorState.get(editor).getEditorLoader();
+			MethodDeclaration createMethod =
+					AstNodeUtils.getMethodBySignature(
+							typeDeclaration,
+							"createInitialLayout(org.eclipse.ui.IPageLayout)");
+			SingleVariableDeclaration pageLayoutParameter = DomGenerics.parameters(createMethod).get(0);
+			Class<?> pageLayoutClass = classLoader.loadClass("org.eclipse.ui.IPageLayout");
+			//
+			CreationSupport creationSupport = new PageLayoutCreationSupport(pageLayoutParameter);
+			JavaInfo javaInfo = JavaInfoUtils.createJavaInfo(editor, pageLayoutClass, creationSupport);
+			if (javaInfo != null) {
+				ExecutionFlowUtils2.ensurePermanentValue(pageLayoutParameter.getName()).setModel(javaInfo);
+				javaInfo.setVariableSupport(new MethodParameterVariableSupport(javaInfo,
+						pageLayoutParameter));
+				// prepare root context
+				List<MethodDeclaration> rootMethods = ImmutableList.of(createMethod);
+				return new ParseRootContext(javaInfo, new ExecutionFlowDescription(rootMethods));
+			}
+		}
+		// support for known RCP super-types
+		if (AstNodeUtils.isSuccessorOf(typeBinding, KNOWN_TYPES)) {
+			ITypeBinding typeBinding_super = typeBinding.getSuperclass();
+			// prepare Class of "super"
+			Class<?> superClass;
+			{
+				superClass = getSuperClass(editor, typeBinding_super);
+				if (superClass == Object.class) {
+					if (AstNodeUtils.isSuccessorOf(typeBinding, "org.eclipse.ui.forms.IDetailsPage")) {
+						ClassLoader classLoader = EditorState.get(editor).getEditorLoader();
+						superClass = classLoader.loadClass("org.eclipse.ui.forms.IDetailsPage");
+					}
+				}
+				if (superClass == Dialog.class) {
+					ClassLoader classLoader = EditorState.get(editor).getEditorLoader();
+					superClass = DialogInfo.getNotAbstractDialog(classLoader);
+				}
+			}
+			// prepare creation
+			MethodDeclaration constructor = getConstructor(editor, typeDeclaration);
+			ThisCreationSupport creationSupport = new ThisCreationSupport(constructor);
+			// try to create JavaInfo
+			JavaInfo javaInfo = JavaInfoUtils.createJavaInfo(editor, superClass, creationSupport);
+			if (javaInfo != null) {
+				javaInfo.setVariableSupport(new ThisVariableSupport(javaInfo, constructor));
+				// prepare root context
+				List<MethodDeclaration> rootMethods = Lists.newArrayList();
+				rootMethods.add(constructor);
+				if (javaInfo instanceof DialogInfo) {
+					DialogInfo.contributeExecutionFlow(typeDeclaration, rootMethods);
+				}
+				return new ParseRootContext(javaInfo, new ExecutionFlowDescription(rootMethods));
+			}
+		}
+		// E4 part
+		for (MethodDeclaration method : typeDeclaration.getMethods()) {
+			IAnnotationBinding[] annotations = method.resolveBinding().getAnnotations();
+			for (IAnnotationBinding annotation : annotations) {
+				String annotationName = annotation.getAnnotationType().getQualifiedName();
+				if ("javax.annotation.PostConstruct".equals(annotationName)) {
+					for (SingleVariableDeclaration parameter : DomGenerics.parameters(method)) {
+						if (AstNodeUtils.isSuccessorOf(
+								parameter.getType().resolveBinding(),
+								"org.eclipse.swt.widgets.Composite")) {
+							// prepare ComponentDescription
+							ComponentDescription componentDescription =
+									ComponentDescriptionHelper.getDescription(
+											editor,
+											"org.eclipse.swt.widgets.Composite");
+							componentDescription.setToolkit(RcpToolkitDescription.INSTANCE);
+							// prepare JavaInfo
+							JavaInfo javaInfo =
+									new E4PartInfo(editor,
+											componentDescription,
+											new MethodParameterCreationSupport(parameter));
+							javaInfo.setVariableSupport(new MethodParameterVariableSupport(javaInfo, parameter));
+							// register JavaInfo
+							ObjectInfoUtils.setNewId(javaInfo);
+							javaInfo.bindToExpression(parameter.getName());
+							// prepare root context
+							List<MethodDeclaration> rootMethods = Lists.newArrayList(method);
+							return new ParseRootContext(javaInfo, new ExecutionFlowDescription(rootMethods));
+						}
+					}
+				}
+			}
+		}
+		// no root found
+		return null;
+	}
 
-  @Override
-  public JavaInfo create(final AstEditor editor,
-      ClassInstanceCreation creation,
-      final IMethodBinding methodBinding,
-      ITypeBinding typeBinding,
-      Expression arguments[],
-      JavaInfo argumentInfos[]) throws Exception {
-    if (!hasRCP(editor)) {
-      return null;
-    }
-    if (creation.getAnonymousClassDeclaration() != null) {
-      typeBinding = typeBinding.getSuperclass();
-    }
-    // Forms API: SectionPart (wrapper)
-    if (AstNodeUtils.isSuccessorOf(typeBinding, "org.eclipse.ui.forms.SectionPart")) {
-      final Class<?> creationClass = getClass(editor, typeBinding);
-      SectionPartInfo javaInfo =
-          (SectionPartInfo) JavaInfoUtils.createJavaInfo(
-              editor,
-              creationClass,
-              new ConstructorCreationSupport(creation));
-      AbstractInvocationDescription methodDescription =
-          new RunnableObjectEx<AbstractInvocationDescription>() {
-            @Override
-            public AbstractInvocationDescription runObject() throws Exception {
-              ComponentDescription description =
-                  ComponentDescriptionHelper.getDescription(editor, creationClass);
-              return description.getConstructor(methodBinding);
-            }
-          }.runObject();
-      javaInfo.getWrapper().configureWrapper(methodDescription, argumentInfos);
-      javaInfo.setAssociation(new ConstructorParentAssociation());
-      return javaInfo;
-    }
-    return super.create(editor, creation, methodBinding, typeBinding, arguments, argumentInfos);
-  }
+	@Override
+	public JavaInfo create(final AstEditor editor,
+			ClassInstanceCreation creation,
+			final IMethodBinding methodBinding,
+			ITypeBinding typeBinding,
+			Expression arguments[],
+			JavaInfo argumentInfos[]) throws Exception {
+		if (!hasRCP(editor)) {
+			return null;
+		}
+		if (creation.getAnonymousClassDeclaration() != null) {
+			typeBinding = typeBinding.getSuperclass();
+		}
+		// Forms API: SectionPart (wrapper)
+		if (AstNodeUtils.isSuccessorOf(typeBinding, "org.eclipse.ui.forms.SectionPart")) {
+			final Class<?> creationClass = getClass(editor, typeBinding);
+			SectionPartInfo javaInfo =
+					(SectionPartInfo) JavaInfoUtils.createJavaInfo(
+							editor,
+							creationClass,
+							new ConstructorCreationSupport(creation));
+			AbstractInvocationDescription methodDescription =
+					new RunnableObjectEx<AbstractInvocationDescription>() {
+				@Override
+				public AbstractInvocationDescription runObject() throws Exception {
+					ComponentDescription description =
+							ComponentDescriptionHelper.getDescription(editor, creationClass);
+					return description.getConstructor(methodBinding);
+				}
+			}.runObject();
+			javaInfo.getWrapper().configureWrapper(methodDescription, argumentInfos);
+			javaInfo.setAssociation(new ConstructorParentAssociation());
+			return javaInfo;
+		}
+		return super.create(editor, creation, methodBinding, typeBinding, arguments, argumentInfos);
+	}
 
-  @Override
-  public JavaInfo create(AstEditor editor,
-      MethodInvocation invocation,
-      IMethodBinding methodBinding,
-      Expression[] arguments,
-      JavaInfo expressionInfo,
-      JavaInfo[] argumentInfos,
-      IJavaInfoParseResolver javaInfoResolver) throws Exception {
-    if (!hasRCP(editor)) {
-      return null;
-    }
-    // check "super"
-    {
-      JavaInfo javaInfo =
-          super.create(
-              editor,
-              invocation,
-              methodBinding,
-              arguments,
-              expressionInfo,
-              argumentInfos,
-              javaInfoResolver);
-      if (javaInfo != null) {
-        return javaInfo;
-      }
-    }
-    // support for org.eclipse.ui.IPerspectiveFactory
-    if (expressionInfo instanceof PageLayoutInfo) {
-      PageLayoutInfo pageLayout = (PageLayoutInfo) expressionInfo;
-      String signature = AstNodeUtils.getMethodSignature(methodBinding);
-      if (signature.equals("addView(java.lang.String,int,float,java.lang.String)")
-          || signature.equals("addPlaceholder(java.lang.String,int,float,java.lang.String)")
-          || signature.equals("addStandaloneView(java.lang.String,boolean,int,float,java.lang.String)")
-          || signature.equals("addStandaloneViewPlaceholder(java.lang.String,int,float,java.lang.String,boolean)")) {
-        return new PageLayoutAddViewInfo(pageLayout, invocation);
-      }
-      if (signature.equals("createFolder(java.lang.String,int,float,java.lang.String)")
-          || signature.equals("createPlaceholderFolder(java.lang.String,int,float,java.lang.String)")) {
-        return new PageLayoutCreateFolderInfo(pageLayout, invocation);
-      }
-      if (signature.equals("addFastView(java.lang.String)")
-          || signature.equals("addFastView(java.lang.String,float)")) {
-        return new FastViewInfo(pageLayout, pageLayout.getFastViewContainer(), invocation);
-      }
-      if (signature.equals("addShowViewShortcut(java.lang.String)")) {
-        return new ViewShortcutInfo(pageLayout, pageLayout.getViewShortcutContainer(), invocation);
-      }
-      if (signature.equals("addPerspectiveShortcut(java.lang.String)")) {
-        return new PerspectiveShortcutInfo(pageLayout,
-            pageLayout.getPerspectiveShortcutContainer(),
-            invocation);
-      }
-      return null;
-    } else if (expressionInfo instanceof PageLayoutCreateFolderInfo) {
-      PageLayoutCreateFolderInfo folder = (PageLayoutCreateFolderInfo) expressionInfo;
-      String signature = AstNodeUtils.getMethodSignature(methodBinding);
-      if (signature.equals("addView(java.lang.String)")
-          || signature.equals("addPlaceholder(java.lang.String)")) {
-        return new FolderViewInfo(folder, invocation);
-      }
-    }
-    // Action from org.eclipse.ui.actions.ActionFactory
-    if (invocation.getExpression() instanceof QualifiedName) {
-      QualifiedName qualifiedName = (QualifiedName) invocation.getExpression();
-      if (AstNodeUtils.getFullyQualifiedName(qualifiedName.getQualifier(), false).equals(
-          "org.eclipse.ui.actions.ActionFactory")) {
-        CreationSupport creationSupport =
-            new ActionFactoryCreationSupport(invocation, qualifiedName.getName().getIdentifier());
-        JavaInfo component =
-            JavaInfoUtils.createJavaInfo(
-                editor,
-                getClass(editor, methodBinding.getReturnType()),
-                creationSupport);
-        return component;
-      }
-    }
-    // special support for IManagedForm.getToolkit()
-    if (invocation.getLocationInParent() == ConstructorInvocation.ARGUMENTS_PROPERTY
-        && AstNodeUtils.isMethodInvocation(
-            invocation,
-            "org.eclipse.ui.forms.IManagedForm",
-            "getToolkit()")) {
-      CreationSupport creationSupport = new OpaqueCreationSupport(invocation);
-      InstanceFactoryInfo toolkit =
-          InstanceFactoryInfo.createFactory(
-              editor,
-              getClass(editor, methodBinding.getReturnType()),
-              creationSupport);
-      EditorState.get(editor).getTmp_Components().add(toolkit);
-      return toolkit;
-    }
-    // no JavaInfo for MethodInvocation
-    return null;
-  }
+	@Override
+	public JavaInfo create(AstEditor editor,
+			MethodInvocation invocation,
+			IMethodBinding methodBinding,
+			Expression[] arguments,
+			JavaInfo expressionInfo,
+			JavaInfo[] argumentInfos,
+			IJavaInfoParseResolver javaInfoResolver) throws Exception {
+		if (!hasRCP(editor)) {
+			return null;
+		}
+		// check "super"
+		{
+			JavaInfo javaInfo =
+					super.create(
+							editor,
+							invocation,
+							methodBinding,
+							arguments,
+							expressionInfo,
+							argumentInfos,
+							javaInfoResolver);
+			if (javaInfo != null) {
+				return javaInfo;
+			}
+		}
+		// support for org.eclipse.ui.IPerspectiveFactory
+		if (expressionInfo instanceof PageLayoutInfo) {
+			PageLayoutInfo pageLayout = (PageLayoutInfo) expressionInfo;
+			String signature = AstNodeUtils.getMethodSignature(methodBinding);
+			if (signature.equals("addView(java.lang.String,int,float,java.lang.String)")
+					|| signature.equals("addPlaceholder(java.lang.String,int,float,java.lang.String)")
+					|| signature.equals("addStandaloneView(java.lang.String,boolean,int,float,java.lang.String)")
+					|| signature.equals("addStandaloneViewPlaceholder(java.lang.String,int,float,java.lang.String,boolean)")) {
+				return new PageLayoutAddViewInfo(pageLayout, invocation);
+			}
+			if (signature.equals("createFolder(java.lang.String,int,float,java.lang.String)")
+					|| signature.equals("createPlaceholderFolder(java.lang.String,int,float,java.lang.String)")) {
+				return new PageLayoutCreateFolderInfo(pageLayout, invocation);
+			}
+			if (signature.equals("addFastView(java.lang.String)")
+					|| signature.equals("addFastView(java.lang.String,float)")) {
+				return new FastViewInfo(pageLayout, pageLayout.getFastViewContainer(), invocation);
+			}
+			if (signature.equals("addShowViewShortcut(java.lang.String)")) {
+				return new ViewShortcutInfo(pageLayout, pageLayout.getViewShortcutContainer(), invocation);
+			}
+			if (signature.equals("addPerspectiveShortcut(java.lang.String)")) {
+				return new PerspectiveShortcutInfo(pageLayout,
+						pageLayout.getPerspectiveShortcutContainer(),
+						invocation);
+			}
+			return null;
+		} else if (expressionInfo instanceof PageLayoutCreateFolderInfo) {
+			PageLayoutCreateFolderInfo folder = (PageLayoutCreateFolderInfo) expressionInfo;
+			String signature = AstNodeUtils.getMethodSignature(methodBinding);
+			if (signature.equals("addView(java.lang.String)")
+					|| signature.equals("addPlaceholder(java.lang.String)")) {
+				return new FolderViewInfo(folder, invocation);
+			}
+		}
+		// Action from org.eclipse.ui.actions.ActionFactory
+		if (invocation.getExpression() instanceof QualifiedName) {
+			QualifiedName qualifiedName = (QualifiedName) invocation.getExpression();
+			if (AstNodeUtils.getFullyQualifiedName(qualifiedName.getQualifier(), false).equals(
+					"org.eclipse.ui.actions.ActionFactory")) {
+				CreationSupport creationSupport =
+						new ActionFactoryCreationSupport(invocation, qualifiedName.getName().getIdentifier());
+				JavaInfo component =
+						JavaInfoUtils.createJavaInfo(
+								editor,
+								getClass(editor, methodBinding.getReturnType()),
+								creationSupport);
+				return component;
+			}
+		}
+		// special support for IManagedForm.getToolkit()
+		if (invocation.getLocationInParent() == ConstructorInvocation.ARGUMENTS_PROPERTY
+				&& AstNodeUtils.isMethodInvocation(
+						invocation,
+						"org.eclipse.ui.forms.IManagedForm",
+						"getToolkit()")) {
+			CreationSupport creationSupport = new OpaqueCreationSupport(invocation);
+			InstanceFactoryInfo toolkit =
+					InstanceFactoryInfo.createFactory(
+							editor,
+							getClass(editor, methodBinding.getReturnType()),
+							creationSupport);
+			EditorState.get(editor).getTmp_Components().add(toolkit);
+			return toolkit;
+		}
+		// no JavaInfo for MethodInvocation
+		return null;
+	}
 
-  @Override
-  public boolean isToolkitObject(AstEditor editor, ITypeBinding typeBinding) throws Exception {
-    return is_RCPContext(editor) && isSWTObject(typeBinding);
-  }
+	@Override
+	public boolean isToolkitObject(AstEditor editor, ITypeBinding typeBinding) throws Exception {
+		return is_RCPContext(editor) && isSWTObject(typeBinding);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final String KEY_HAS_RCP = ParseFactory.class.getName();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final String KEY_HAS_RCP = ParseFactory.class.getName();
 
-  /**
-   * @return <code>true</code> if given {@link AstEditor} can use RCP.
-   */
-  private static boolean hasRCP(AstEditor editor) {
-    Boolean result = (Boolean) editor.getGlobalValue(KEY_HAS_RCP);
-    if (result == null) {
-      IJavaProject javaProject = editor.getJavaProject();
-      try {
-        result = javaProject.findType("org.eclipse.swt.custom.SashForm") != null;
-      } catch (Throwable e) {
-        result = false;
-      }
-      editor.putGlobalValue(KEY_HAS_RCP, result);
-    }
-    return result.booleanValue();
-  }
+	/**
+	 * @return <code>true</code> if given {@link AstEditor} can use RCP.
+	 */
+	private static boolean hasRCP(AstEditor editor) {
+		Boolean result = (Boolean) editor.getGlobalValue(KEY_HAS_RCP);
+		if (result == null) {
+			IJavaProject javaProject = editor.getJavaProject();
+			try {
+				result = javaProject.findType("org.eclipse.swt.custom.SashForm") != null;
+			} catch (Throwable e) {
+				result = false;
+			}
+			editor.putGlobalValue(KEY_HAS_RCP, result);
+		}
+		return result.booleanValue();
+	}
 
-  /**
-   * @return <code>true</code> if {@link IJavaProject} of given {@link AstEditor} is RCP project.
-   */
-  private static boolean is_RCPContext(AstEditor editor) throws Exception {
-    return editor.getJavaProject().findType("org.eclipse.swt.custom.SashForm") != null;
-  }
+	/**
+	 * @return <code>true</code> if {@link IJavaProject} of given {@link AstEditor} is RCP project.
+	 */
+	private static boolean is_RCPContext(AstEditor editor) throws Exception {
+		return editor.getJavaProject().findType("org.eclipse.swt.custom.SashForm") != null;
+	}
 
-  /**
-   * @return <code>true</code> if given {@link TypeDeclaration} contains RCP objects creations.
-   */
-  private static boolean isRCPObject(TypeDeclaration typeDeclaration) throws Exception {
-    final boolean[] isSwt = new boolean[1];
-    // check top level type
-    {
-      ITypeBinding typeBinding = AstNodeUtils.getTypeBinding(typeDeclaration);
-      if (AstNodeUtils.isSuccessorOf(typeBinding, "org.eclipse.swt.widgets.Dialog")
-          || AstNodeUtils.isSuccessorOf(typeBinding, "org.eclipse.jface.preference.PreferencePage")
-          || AstNodeUtils.isSuccessorOf(typeBinding, "org.eclipse.jface.window.Window")
-          || AstNodeUtils.isSuccessorOf(typeBinding, "org.eclipse.ui.IPerspectiveFactory")
-          || AstNodeUtils.isSuccessorOf(typeBinding, "org.eclipse.ui.application.ActionBarAdvisor")) {
-        return true;
-      }
-    }
-    // check for Widget's creations
-    typeDeclaration.accept(new ASTVisitor() {
-      @Override
-      public void postVisit(ASTNode node) {
-        if (!isSwt[0] && node instanceof Expression) {
-          Expression expression = (Expression) node;
-          ITypeBinding expressionBinding = AstNodeUtils.getTypeBinding(expression);
-          if (AstNodeUtils.isSuccessorOf(expressionBinding, "org.eclipse.swt.widgets.Widget")) {
-            isSwt[0] = true;
-          }
-        }
-      }
-    });
-    return isSwt[0];
-  }
+	/**
+	 * @return <code>true</code> if given {@link TypeDeclaration} contains RCP objects creations.
+	 */
+	private static boolean isRCPObject(TypeDeclaration typeDeclaration) throws Exception {
+		final boolean[] isSwt = new boolean[1];
+		// check top level type
+		{
+			ITypeBinding typeBinding = AstNodeUtils.getTypeBinding(typeDeclaration);
+			if (AstNodeUtils.isSuccessorOf(typeBinding, "org.eclipse.swt.widgets.Dialog")
+					|| AstNodeUtils.isSuccessorOf(typeBinding, "org.eclipse.jface.preference.PreferencePage")
+					|| AstNodeUtils.isSuccessorOf(typeBinding, "org.eclipse.jface.window.Window")
+					|| AstNodeUtils.isSuccessorOf(typeBinding, "org.eclipse.ui.IPerspectiveFactory")
+					|| AstNodeUtils.isSuccessorOf(typeBinding, "org.eclipse.ui.application.ActionBarAdvisor")) {
+				return true;
+			}
+		}
+		// check for Widget's creations
+		typeDeclaration.accept(new ASTVisitor() {
+			@Override
+			public void postVisit(ASTNode node) {
+				if (!isSwt[0] && node instanceof Expression) {
+					Expression expression = (Expression) node;
+					ITypeBinding expressionBinding = AstNodeUtils.getTypeBinding(expression);
+					if (AstNodeUtils.isSuccessorOf(expressionBinding, "org.eclipse.swt.widgets.Widget")) {
+						isSwt[0] = true;
+					}
+				}
+			}
+		});
+		return isSwt[0];
+	}
 
-  /**
-   * @return <code>true</code> if given type binding is RCP object.
-   */
-  private static boolean isSWTObject(ITypeBinding typeBinding) throws Exception {
-    if (typeBinding == null) {
-      return false;
-    }
-    // SWT
-    if (AstNodeUtils.isSuccessorOf(typeBinding, "org.eclipse.swt.widgets.Widget")) {
-      return true;
-    }
-    // JFace
-    if (AstNodeUtils.isSuccessorOf(typeBinding, "org.eclipse.jface.viewers.ColumnLayoutData")
-        || AstNodeUtils.isSuccessorOf(typeBinding, "org.eclipse.jface.resource.ResourceRegistry")
-        || AstNodeUtils.isSuccessorOf(typeBinding, "org.eclipse.jface.action.IAction")
-        || AstNodeUtils.isSuccessorOf(typeBinding, "org.eclipse.jface.action.IContributionItem")
-        || AstNodeUtils.isSuccessorOf(typeBinding, "org.eclipse.jface.action.IContributionManager")
-        || AstNodeUtils.isSuccessorOf(typeBinding, "org.eclipse.jface.preference.FieldEditor")
-        || AstNodeUtils.isSuccessorOf(
-            typeBinding,
-            "org.eclipse.jface.fieldassist.ControlDecoration")) {
-      return true;
-    }
-    // Layout
-    if (AstNodeUtils.isSuccessorOf(typeBinding, "org.eclipse.swt.widgets.Layout")) {
-      return true;
-    }
-    // standard SWT LayoutData's
-    if (AstNodeUtils.isSuccessorOf(typeBinding, "org.eclipse.swt.layout.RowData")
-        || AstNodeUtils.isSuccessorOf(typeBinding, "org.eclipse.swt.layout.GridData")
-        || AstNodeUtils.isSuccessorOf(typeBinding, "org.eclipse.swt.layout.FormData")
-        || AstNodeUtils.isSuccessorOf(typeBinding, "org.eclipse.swt.layout.FormAttachment")) {
-      return true;
-    }
-    // Forms API LayoutData's
-    if (AstNodeUtils.isSuccessorOf(typeBinding, "org.eclipse.ui.forms.widgets.ColumnLayoutData")
-        || AstNodeUtils.isSuccessorOf(typeBinding, "org.eclipse.ui.forms.widgets.TableWrapData")) {
-      return true;
-    }
-    //
-    return false;
-  }
+	/**
+	 * @return <code>true</code> if given type binding is RCP object.
+	 */
+	private static boolean isSWTObject(ITypeBinding typeBinding) throws Exception {
+		if (typeBinding == null) {
+			return false;
+		}
+		// SWT
+		if (AstNodeUtils.isSuccessorOf(typeBinding, "org.eclipse.swt.widgets.Widget")) {
+			return true;
+		}
+		// JFace
+		if (AstNodeUtils.isSuccessorOf(typeBinding, "org.eclipse.jface.viewers.ColumnLayoutData")
+				|| AstNodeUtils.isSuccessorOf(typeBinding, "org.eclipse.jface.resource.ResourceRegistry")
+				|| AstNodeUtils.isSuccessorOf(typeBinding, "org.eclipse.jface.action.IAction")
+				|| AstNodeUtils.isSuccessorOf(typeBinding, "org.eclipse.jface.action.IContributionItem")
+				|| AstNodeUtils.isSuccessorOf(typeBinding, "org.eclipse.jface.action.IContributionManager")
+				|| AstNodeUtils.isSuccessorOf(typeBinding, "org.eclipse.jface.preference.FieldEditor")
+				|| AstNodeUtils.isSuccessorOf(
+						typeBinding,
+						"org.eclipse.jface.fieldassist.ControlDecoration")) {
+			return true;
+		}
+		// Layout
+		if (AstNodeUtils.isSuccessorOf(typeBinding, "org.eclipse.swt.widgets.Layout")) {
+			return true;
+		}
+		// standard SWT LayoutData's
+		if (AstNodeUtils.isSuccessorOf(typeBinding, "org.eclipse.swt.layout.RowData")
+				|| AstNodeUtils.isSuccessorOf(typeBinding, "org.eclipse.swt.layout.GridData")
+				|| AstNodeUtils.isSuccessorOf(typeBinding, "org.eclipse.swt.layout.FormData")
+				|| AstNodeUtils.isSuccessorOf(typeBinding, "org.eclipse.swt.layout.FormAttachment")) {
+			return true;
+		}
+		// Forms API LayoutData's
+		if (AstNodeUtils.isSuccessorOf(typeBinding, "org.eclipse.ui.forms.widgets.ColumnLayoutData")
+				|| AstNodeUtils.isSuccessorOf(typeBinding, "org.eclipse.ui.forms.widgets.TableWrapData")) {
+			return true;
+		}
+		//
+		return false;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ClassLoader
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getToolkitId() {
-    return IPreferenceConstants.TOOLKIT_ID;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ClassLoader
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getToolkitId() {
+		return IPreferenceConstants.TOOLKIT_ID;
+	}
 
-  /**
-   * <p>
-   * Note, that we include <code>org.eclipse.ui</code> bundle into parent {@link ClassLoader}, so
-   * user code will able to talk with existing Eclipse Core/UI classes, such as {@link PlatformUI}
-   * and OSGi.
-   * <p>
-   * We always include <code>com.ibm.icu</code> bundle to support Forms API, because it imports
-   * <code>com.ibm.icu</code> classes using <code>import-package</code>, not using direct
-   * dependency.
-   */
-  @Override
-  protected void initializeClassLoader_parent(AstEditor editor,
-      CompositeClassLoader parentClassLoader) throws Exception {
-    parentClassLoader.add(new BundleClassLoader("com.ibm.icu"), ImmutableList.of("com.ibm.icu."));
-    parentClassLoader.add(new BundleClassLoader("org.eclipse.ui"), null);
-    parentClassLoader.add(new BundleClassLoader("org.eclipse.ui.forms"), null);
-    parentClassLoader.add(new BundleClassLoader("org.eclipse.jdt.ui"), null);
-    super.initializeClassLoader_parent(editor, parentClassLoader);
-  }
+	/**
+	 * <p>
+	 * Note, that we include <code>org.eclipse.ui</code> bundle into parent {@link ClassLoader}, so
+	 * user code will able to talk with existing Eclipse Core/UI classes, such as {@link PlatformUI}
+	 * and OSGi.
+	 * <p>
+	 * We always include <code>com.ibm.icu</code> bundle to support Forms API, because it imports
+	 * <code>com.ibm.icu</code> classes using <code>import-package</code>, not using direct
+	 * dependency.
+	 */
+	@Override
+	protected void initializeClassLoader_parent(AstEditor editor,
+			CompositeClassLoader parentClassLoader) throws Exception {
+		parentClassLoader.add(new BundleClassLoader("com.ibm.icu"), ImmutableList.of("com.ibm.icu."));
+		parentClassLoader.add(new BundleClassLoader("org.eclipse.ui"), null);
+		parentClassLoader.add(new BundleClassLoader("org.eclipse.ui.forms"), null);
+		parentClassLoader.add(new BundleClassLoader("org.eclipse.jdt.ui"), null);
+		super.initializeClassLoader_parent(editor, parentClassLoader);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/parser/ParseFactorySimpleModelCic.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/parser/ParseFactorySimpleModelCic.java
index 133331886..14ebcbf84 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/parser/ParseFactorySimpleModelCic.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/parser/ParseFactorySimpleModelCic.java
@@ -28,56 +28,56 @@
  * @coverage rcp.parser
  */
 public class ParseFactorySimpleModelCic implements IParseFactorySimpleModelCic {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IParseFactory_simpleModel_CIC
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean accept(AstEditor editor, ClassInstanceCreation creation, ITypeBinding typeBinding)
-      throws Exception {
-    EditorState state = EditorState.get(editor);
-    if (state.getEditorLoader() == null) {
-      return false;
-    }
-    // if possible to handle
-    String typeName = AstNodeUtils.getFullyQualifiedName(typeBinding, true);
-    return isModel(typeName, typeBinding) || noModel(typeName, typeBinding);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IParseFactory_simpleModel_CIC
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean accept(AstEditor editor, ClassInstanceCreation creation, ITypeBinding typeBinding)
+			throws Exception {
+		EditorState state = EditorState.get(editor);
+		if (state.getEditorLoader() == null) {
+			return false;
+		}
+		// if possible to handle
+		String typeName = AstNodeUtils.getFullyQualifiedName(typeBinding, true);
+		return isModel(typeName, typeBinding) || noModel(typeName, typeBinding);
+	}
 
-  @Override
-  public JavaInfo create(AstEditor editor, ClassInstanceCreation creation, ITypeBinding typeBinding)
-      throws Exception {
-    String typeName = AstNodeUtils.getFullyQualifiedName(typeBinding, true);
-    if (noModel(typeName, typeBinding)) {
-      return null;
-    }
-    return JavaInfoUtils.createJavaInfo(editor, typeName, new ConstructorCreationSupport(creation));
-  }
+	@Override
+	public JavaInfo create(AstEditor editor, ClassInstanceCreation creation, ITypeBinding typeBinding)
+			throws Exception {
+		String typeName = AstNodeUtils.getFullyQualifiedName(typeBinding, true);
+		if (noModel(typeName, typeBinding)) {
+			return null;
+		}
+		return JavaInfoUtils.createJavaInfo(editor, typeName, new ConstructorCreationSupport(creation));
+	}
 
-  private static boolean isModel(String typeName, ITypeBinding binding) {
-    if (typeName.startsWith("org.eclipse.swt.")) {
-      return typeName.equals("org.eclipse.swt.layout.GridData")
-          || typeName.equals("org.eclipse.swt.layout.FormData")
-          || typeName.equals("org.eclipse.swt.layout.FormAttachment")
-          || AstNodeUtils.isSuccessorOf(
-              binding,
-              "org.eclipse.swt.widgets.Widget",
-              "org.eclipse.swt.widgets.Layout");
-    }
-    if (typeName.startsWith("org.eclipse.jface.layout.")) {
-      return AstNodeUtils.isSuccessorOf(binding, "org.eclipse.swt.widgets.Layout");
-    }
-    if (typeName.startsWith("org.eclipse.jface.viewers.")) {
-      return AstNodeUtils.isSuccessorOf(binding, "org.eclipse.jface.viewers.ColumnLayoutData");
-    }
-    return false;
-  }
+	private static boolean isModel(String typeName, ITypeBinding binding) {
+		if (typeName.startsWith("org.eclipse.swt.")) {
+			return typeName.equals("org.eclipse.swt.layout.GridData")
+					|| typeName.equals("org.eclipse.swt.layout.FormData")
+					|| typeName.equals("org.eclipse.swt.layout.FormAttachment")
+					|| AstNodeUtils.isSuccessorOf(
+							binding,
+							"org.eclipse.swt.widgets.Widget",
+							"org.eclipse.swt.widgets.Layout");
+		}
+		if (typeName.startsWith("org.eclipse.jface.layout.")) {
+			return AstNodeUtils.isSuccessorOf(binding, "org.eclipse.swt.widgets.Layout");
+		}
+		if (typeName.startsWith("org.eclipse.jface.viewers.")) {
+			return AstNodeUtils.isSuccessorOf(binding, "org.eclipse.jface.viewers.ColumnLayoutData");
+		}
+		return false;
+	}
 
-  private static boolean noModel(String typeName, ITypeBinding binding) {
-    if (typeName.startsWith("org.eclipse.swt.graphics.")) {
-      return true;
-    }
-    return false;
-  }
+	private static boolean noModel(String typeName, ITypeBinding binding) {
+		if (typeName.startsWith("org.eclipse.swt.graphics.")) {
+			return true;
+		}
+		return false;
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/parser/RcpExecutionFlowProvider.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/parser/RcpExecutionFlowProvider.java
index bdd9be061..07e939da9 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/parser/RcpExecutionFlowProvider.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/parser/RcpExecutionFlowProvider.java
@@ -29,63 +29,63 @@
  * @coverage rcp.parser
  */
 public class RcpExecutionFlowProvider extends ExecutionFlowProvider {
-  @Override
-  public MethodDeclaration getDefaultConstructor(TypeDeclaration typeDeclaration) {
-    ITypeBinding typeBinding = AstNodeUtils.getTypeBinding(typeDeclaration);
-    List<MethodDeclaration> constructors = AstNodeUtils.getConstructors(typeDeclaration);
-    // Forms API FormPage+ <init>(*org.eclipse.ui.forms.editor.FormEditor*)
-    if (AstNodeUtils.isSuccessorOf(typeBinding, "org.eclipse.ui.forms.editor.FormPage")) {
-      for (MethodDeclaration constructor : constructors) {
-        if (AstNodeUtils.getMethodSignature(constructor).contains(
-            "org.eclipse.ui.forms.editor.FormEditor")) {
-          return constructor;
-        }
-      }
-    }
-    // SWT Dialog+ <init>(Shell,style)
-    if (AstNodeUtils.isSuccessorOf(typeBinding, "org.eclipse.swt.widgets.Dialog")) {
-      for (MethodDeclaration constructor : constructors) {
-        if (AstNodeUtils.getMethodSignature(constructor).equals(
-            "<init>(org.eclipse.swt.widgets.Shell,int)")) {
-          return constructor;
-        }
-      }
-    }
-    // Shell+ <init>()
-    if (AstNodeUtils.isSuccessorOf(typeBinding, "org.eclipse.swt.widgets.Shell")) {
-      for (MethodDeclaration constructor : constructors) {
-        if (constructor.parameters().isEmpty()) {
-          return constructor;
-        }
-      }
-    }
-    // Composite+ <init>(Composite,style)
-    if (AstNodeUtils.isSuccessorOf(typeBinding, "org.eclipse.swt.widgets.Composite")) {
-      for (MethodDeclaration constructor : constructors) {
-        if (AstNodeUtils.getMethodSignature(constructor).equals(
-            "<init>(org.eclipse.swt.widgets.Composite,int)")) {
-          return constructor;
-        }
-      }
-    }
-    // super
-    return super.getDefaultConstructor(typeDeclaration);
-  }
+	@Override
+	public MethodDeclaration getDefaultConstructor(TypeDeclaration typeDeclaration) {
+		ITypeBinding typeBinding = AstNodeUtils.getTypeBinding(typeDeclaration);
+		List<MethodDeclaration> constructors = AstNodeUtils.getConstructors(typeDeclaration);
+		// Forms API FormPage+ <init>(*org.eclipse.ui.forms.editor.FormEditor*)
+		if (AstNodeUtils.isSuccessorOf(typeBinding, "org.eclipse.ui.forms.editor.FormPage")) {
+			for (MethodDeclaration constructor : constructors) {
+				if (AstNodeUtils.getMethodSignature(constructor).contains(
+						"org.eclipse.ui.forms.editor.FormEditor")) {
+					return constructor;
+				}
+			}
+		}
+		// SWT Dialog+ <init>(Shell,style)
+		if (AstNodeUtils.isSuccessorOf(typeBinding, "org.eclipse.swt.widgets.Dialog")) {
+			for (MethodDeclaration constructor : constructors) {
+				if (AstNodeUtils.getMethodSignature(constructor).equals(
+						"<init>(org.eclipse.swt.widgets.Shell,int)")) {
+					return constructor;
+				}
+			}
+		}
+		// Shell+ <init>()
+		if (AstNodeUtils.isSuccessorOf(typeBinding, "org.eclipse.swt.widgets.Shell")) {
+			for (MethodDeclaration constructor : constructors) {
+				if (constructor.parameters().isEmpty()) {
+					return constructor;
+				}
+			}
+		}
+		// Composite+ <init>(Composite,style)
+		if (AstNodeUtils.isSuccessorOf(typeBinding, "org.eclipse.swt.widgets.Composite")) {
+			for (MethodDeclaration constructor : constructors) {
+				if (AstNodeUtils.getMethodSignature(constructor).equals(
+						"<init>(org.eclipse.swt.widgets.Composite,int)")) {
+					return constructor;
+				}
+			}
+		}
+		// super
+		return super.getDefaultConstructor(typeDeclaration);
+	}
 
-  @Override
-  public boolean shouldVisit(AnonymousClassDeclaration anonymous) throws Exception {
-    // Realm.runWithDefault()
-    if (AstNodeUtils.isSuccessorOf(anonymous, "java.lang.Runnable")) {
-      ClassInstanceCreation creation = (ClassInstanceCreation) anonymous.getParent();
-      if (creation.getLocationInParent() == MethodInvocation.ARGUMENTS_PROPERTY) {
-        MethodInvocation invocation = (MethodInvocation) creation.getParent();
-        return AstNodeUtils.isMethodInvocation(
-            invocation,
-            "org.eclipse.core.databinding.observable.Realm",
-            "runWithDefault(org.eclipse.core.databinding.observable.Realm,java.lang.Runnable)");
-      }
-    }
-    // unknown pattern
-    return false;
-  }
+	@Override
+	public boolean shouldVisit(AnonymousClassDeclaration anonymous) throws Exception {
+		// Realm.runWithDefault()
+		if (AstNodeUtils.isSuccessorOf(anonymous, "java.lang.Runnable")) {
+			ClassInstanceCreation creation = (ClassInstanceCreation) anonymous.getParent();
+			if (creation.getLocationInParent() == MethodInvocation.ARGUMENTS_PROPERTY) {
+				MethodInvocation invocation = (MethodInvocation) creation.getParent();
+				return AstNodeUtils.isMethodInvocation(
+						invocation,
+						"org.eclipse.core.databinding.observable.Realm",
+						"runWithDefault(org.eclipse.core.databinding.observable.Realm,java.lang.Runnable)");
+			}
+		}
+		// unknown pattern
+		return false;
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/preferences/IPreferenceConstants.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/preferences/IPreferenceConstants.java
index 308cdd5e9..e78e5a36a 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/preferences/IPreferenceConstants.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/preferences/IPreferenceConstants.java
@@ -20,22 +20,22 @@
  * @coverage rcp.preferences
  */
 public interface IPreferenceConstants {
-  String TOOLKIT_ID = "org.eclipse.wb.rcp";
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Forms API
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  String FORMS_PAINT_BORDERS = TOOLKIT_ID + ".forms: paint borders for";
-  String FORMS_ADAPT_CONTROL = TOOLKIT_ID + ".forms: adapt new controls";
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // PreferencePage
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Specifies that {@link FieldEditor}s should use same code generation settings as {@link Control}
-   * s.
-   */
-  String PREF_FIELD_USUAL_CODE = TOOLKIT_ID + ".preferencePage: use usual code generation style";
+	String TOOLKIT_ID = "org.eclipse.wb.rcp";
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Forms API
+	//
+	////////////////////////////////////////////////////////////////////////////
+	String FORMS_PAINT_BORDERS = TOOLKIT_ID + ".forms: paint borders for";
+	String FORMS_ADAPT_CONTROL = TOOLKIT_ID + ".forms: adapt new controls";
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// PreferencePage
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Specifies that {@link FieldEditor}s should use same code generation settings as {@link Control}
+	 * s.
+	 */
+	String PREF_FIELD_USUAL_CODE = TOOLKIT_ID + ".preferencePage: use usual code generation style";
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/preferences/MainPreferencePage.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/preferences/MainPreferencePage.java
index 4057294ac..fb95f7ceb 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/preferences/MainPreferencePage.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/preferences/MainPreferencePage.java
@@ -32,83 +32,83 @@
  * @coverage rcp.preferences.ui
  */
 public final class MainPreferencePage extends AbstractBindingPreferencesPage {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public MainPreferencePage() {
-    super(ToolkitProvider.DESCRIPTION);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public MainPreferencePage() {
+		super(ToolkitProvider.DESCRIPTION);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected AbstractBindingComposite createBindingComposite(Composite parent) {
-    return new ContentsComposite(parent, m_bindManager, m_preferences);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected AbstractBindingComposite createBindingComposite(Composite parent) {
+		return new ContentsComposite(parent, m_bindManager, m_preferences);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Contents
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private class ContentsComposite extends AbstractBindingComposite {
-    public ContentsComposite(Composite parent,
-        DataBindManager bindManager,
-        IPreferenceStore preferences) {
-      super(parent, bindManager, preferences);
-      GridLayoutFactory.create(this).noMargins().columns(2);
-      // default size
-      {
-        {
-          new Label(this, SWT.NONE).setText(PreferencesMessages.MainPreferencePage_defaultFormWidth);
-          Text text = new Text(this, SWT.BORDER | SWT.RIGHT);
-          GridDataFactory.create(text).grabH().fillH();
-          bindInteger(text, IPreferenceConstants.P_GENERAL_DEFAULT_TOP_WIDTH);
-        }
-        {
-          new Label(this, SWT.NONE).setText(PreferencesMessages.MainPreferencePage_defaultFormHeight);
-          Text text = new Text(this, SWT.BORDER | SWT.RIGHT);
-          GridDataFactory.create(text).grabH().fillH();
-          bindInteger(text, IPreferenceConstants.P_GENERAL_DEFAULT_TOP_HEIGHT);
-        }
-      }
-      // other, boolean preferences
-      checkButton(
-          this,
-          2,
-          PreferencesMessages.MainPreferencePage_highlightBorders,
-          IPreferenceConstants.P_GENERAL_HIGHLIGHT_CONTAINERS);
-      checkButton(
-          this,
-          2,
-          PreferencesMessages.MainPreferencePage_showTextInComponentsTree,
-          IPreferenceConstants.P_GENERAL_TEXT_SUFFIX);
-      checkButton(
-          this,
-          2,
-          PreferencesMessages.MainPreferencePage_showImportantProperties,
-          IPreferenceConstants.P_GENERAL_IMPORTANT_PROPERTIES_AFTER_ADD);
-      checkButton(
-          this,
-          2,
-          PreferencesMessages.MainPreferencePage_autoDirectEdit,
-          IPreferenceConstants.P_GENERAL_DIRECT_EDIT_AFTER_ADD);
-      // SWT specific preferences
-      checkButton(
-          this,
-          2,
-          PreferencesMessages.MainPreferencePage_useResourceManager,
-          org.eclipse.wb.internal.swt.preferences.IPreferenceConstants.P_USE_RESOURCE_MANAGER);
-      checkButton(
-          this,
-          2,
-          PreferencesMessages.MainPreferencePage_useCascadedStyleMenu,
-          IPreferenceConstants.P_STYLE_PROPERTY_CASCADE_POPUP);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Contents
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private class ContentsComposite extends AbstractBindingComposite {
+		public ContentsComposite(Composite parent,
+				DataBindManager bindManager,
+				IPreferenceStore preferences) {
+			super(parent, bindManager, preferences);
+			GridLayoutFactory.create(this).noMargins().columns(2);
+			// default size
+			{
+				{
+					new Label(this, SWT.NONE).setText(PreferencesMessages.MainPreferencePage_defaultFormWidth);
+					Text text = new Text(this, SWT.BORDER | SWT.RIGHT);
+					GridDataFactory.create(text).grabH().fillH();
+					bindInteger(text, IPreferenceConstants.P_GENERAL_DEFAULT_TOP_WIDTH);
+				}
+				{
+					new Label(this, SWT.NONE).setText(PreferencesMessages.MainPreferencePage_defaultFormHeight);
+					Text text = new Text(this, SWT.BORDER | SWT.RIGHT);
+					GridDataFactory.create(text).grabH().fillH();
+					bindInteger(text, IPreferenceConstants.P_GENERAL_DEFAULT_TOP_HEIGHT);
+				}
+			}
+			// other, boolean preferences
+			checkButton(
+					this,
+					2,
+					PreferencesMessages.MainPreferencePage_highlightBorders,
+					IPreferenceConstants.P_GENERAL_HIGHLIGHT_CONTAINERS);
+			checkButton(
+					this,
+					2,
+					PreferencesMessages.MainPreferencePage_showTextInComponentsTree,
+					IPreferenceConstants.P_GENERAL_TEXT_SUFFIX);
+			checkButton(
+					this,
+					2,
+					PreferencesMessages.MainPreferencePage_showImportantProperties,
+					IPreferenceConstants.P_GENERAL_IMPORTANT_PROPERTIES_AFTER_ADD);
+			checkButton(
+					this,
+					2,
+					PreferencesMessages.MainPreferencePage_autoDirectEdit,
+					IPreferenceConstants.P_GENERAL_DIRECT_EDIT_AFTER_ADD);
+			// SWT specific preferences
+			checkButton(
+					this,
+					2,
+					PreferencesMessages.MainPreferencePage_useResourceManager,
+					org.eclipse.wb.internal.swt.preferences.IPreferenceConstants.P_USE_RESOURCE_MANAGER);
+			checkButton(
+					this,
+					2,
+					PreferencesMessages.MainPreferencePage_useCascadedStyleMenu,
+					IPreferenceConstants.P_STYLE_PROPERTY_CASCADE_POPUP);
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/preferences/PreferenceInitializer.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/preferences/PreferenceInitializer.java
index 5bcc9fb85..3630a7d2b 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/preferences/PreferenceInitializer.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/preferences/PreferenceInitializer.java
@@ -24,117 +24,117 @@
  * @coverage rcp.preferences
  */
 public final class PreferenceInitializer extends AbstractPreferenceInitializer {
-  @Override
-  public void initializeDefaultPreferences() {
-    IPreferenceStore preferences = ToolkitProvider.DESCRIPTION.getPreferences();
-    // general
-    preferences.setDefault(IPreferenceConstants.P_GENERAL_HIGHLIGHT_CONTAINERS, true);
-    preferences.setDefault(IPreferenceConstants.P_GENERAL_TEXT_SUFFIX, true);
-    preferences.setDefault(IPreferenceConstants.P_GENERAL_IMPORTANT_PROPERTIES_AFTER_ADD, false);
-    preferences.setDefault(IPreferenceConstants.P_GENERAL_DIRECT_EDIT_AFTER_ADD, true);
-    preferences.setDefault(IPreferenceConstants.P_GENERAL_DEFAULT_TOP_WIDTH, 450);
-    preferences.setDefault(IPreferenceConstants.P_GENERAL_DEFAULT_TOP_HEIGHT, 300);
-    // SWT specific
-    preferences.setDefault(
-        org.eclipse.wb.internal.swt.preferences.IPreferenceConstants.P_USE_RESOURCE_MANAGER,
-        true);
-    preferences.setDefault(IPreferenceConstants.P_STYLE_PROPERTY_CASCADE_POPUP, false);
-    // variable names
-    {
-      preferences.setDefault(
-          IPreferenceConstants.P_VARIABLE_TEXT_MODE,
-          IPreferenceConstants.V_VARIABLE_TEXT_MODE_DEFAULT);
-      preferences.setDefault(
-          IPreferenceConstants.P_VARIABLE_TEXT_TEMPLATE,
-          "${class_acronym}${text}");
-      preferences.setDefault(IPreferenceConstants.P_VARIABLE_TEXT_WORDS_LIMIT, 3);
-    }
-    // NLS
-    {
-      preferences.setDefault(IPreferenceConstants.P_NLS_AUTO_EXTERNALIZE, true);
-      preferences.setDefault(IPreferenceConstants.P_NLS_KEY_AS_STRING_VALUE_ONLY, false);
-      preferences.setDefault(IPreferenceConstants.P_NLS_KEY_QUALIFIED_TYPE_NAME, false);
-      preferences.setDefault(IPreferenceConstants.P_NLS_KEY_RENAME_WITH_VARIABLE, false);
-      preferences.setDefault(IPreferenceConstants.P_NLS_KEY_HAS_STRING_VALUE, false);
-      preferences.setDefault(IPreferenceConstants.P_NLS_KEY_AS_VALUE_PREFIX, "*");
-    }
-    // layout
-    preferences.setDefault(IPreferenceConstants.P_LAYOUT_OF_PARENT, false);
-    preferences.setDefault(
-        org.eclipse.wb.internal.swt.preferences.IPreferenceConstants.P_LAYOUT_NAME_TEMPLATE,
-        "${layoutAcronym}_${compositeName}");
-    preferences.setDefault(
-        org.eclipse.wb.internal.swt.preferences.IPreferenceConstants.P_LAYOUT_DATA_NAME_TEMPLATE,
-        "${dataAcronym}_${controlName}");
-    // GridLayout
-    {
-      preferences.setDefault(
-          org.eclipse.wb.internal.swt.model.layout.grid.IPreferenceConstants.P_ENABLE_GRAB,
-          true);
-      preferences.setDefault(
-          org.eclipse.wb.internal.swt.model.layout.grid.IPreferenceConstants.P_ENABLE_RIGHT_ALIGNMENT,
-          true);
-    }
-    // Forms API
-    {
-      preferences.setDefault(
-          org.eclipse.wb.internal.rcp.preferences.IPreferenceConstants.FORMS_PAINT_BORDERS,
-          true);
-      preferences.setDefault(
-          org.eclipse.wb.internal.rcp.preferences.IPreferenceConstants.FORMS_ADAPT_CONTROL,
-          true);
-    }
-    // PreferencePage
-    {
-      preferences.setDefault(
-          org.eclipse.wb.internal.rcp.preferences.IPreferenceConstants.PREF_FIELD_USUAL_CODE,
-          false);
-    }
-    // TableWrapLayout
-    {
-      preferences.setDefault(
-          org.eclipse.wb.internal.rcp.model.forms.layout.table.IPreferenceConstants.P_ENABLE_GRAB,
-          true);
-      preferences.setDefault(
-          org.eclipse.wb.internal.rcp.model.forms.layout.table.IPreferenceConstants.P_ENABLE_RIGHT_ALIGNMENT,
-          true);
-    }
-    // FormLayout
-    {
-      preferences.setDefault(
-          org.eclipse.wb.internal.swt.model.layout.form.IPreferenceConstants.PREF_FORMLAYOUT_MODE,
-          org.eclipse.wb.internal.swt.model.layout.form.IPreferenceConstants.VAL_FORMLAYOUT_MODE_AUTO);
-      // for classic mode
-      preferences.setDefault(
-          org.eclipse.wb.internal.swt.model.layout.form.IPreferenceConstants.PREF_SNAP_SENS,
-          5);
-      preferences.setDefault(
-          org.eclipse.wb.internal.swt.model.layout.form.IPreferenceConstants.PREF_V_WINDOW_MARGIN,
-          12);
-      preferences.setDefault(
-          org.eclipse.wb.internal.swt.model.layout.form.IPreferenceConstants.PREF_V_PERCENT_OFFSET,
-          6);
-      preferences.setDefault(
-          org.eclipse.wb.internal.swt.model.layout.form.IPreferenceConstants.PREF_V_WIDGET_OFFSET,
-          6);
-      preferences.setDefault(
-          org.eclipse.wb.internal.swt.model.layout.form.IPreferenceConstants.PREF_V_PERCENTS,
-          "20 80");
-      preferences.setDefault(
-          org.eclipse.wb.internal.swt.model.layout.form.IPreferenceConstants.PREF_H_WINDOW_MARGIN,
-          12);
-      preferences.setDefault(
-          org.eclipse.wb.internal.swt.model.layout.form.IPreferenceConstants.PREF_H_PERCENT_OFFSET,
-          6);
-      preferences.setDefault(
-          org.eclipse.wb.internal.swt.model.layout.form.IPreferenceConstants.PREF_H_WIDGET_OFFSET,
-          6);
-      preferences.setDefault(
-          org.eclipse.wb.internal.swt.model.layout.form.IPreferenceConstants.PREF_H_PERCENTS,
-          "20 80");
-      preferences.setDefault(
-          org.eclipse.wb.internal.swt.model.layout.form.IPreferenceConstants.PREF_KEEP_ATTACHMENTS_STYLE,
-          false);
-    }
-  }
+	@Override
+	public void initializeDefaultPreferences() {
+		IPreferenceStore preferences = ToolkitProvider.DESCRIPTION.getPreferences();
+		// general
+		preferences.setDefault(IPreferenceConstants.P_GENERAL_HIGHLIGHT_CONTAINERS, true);
+		preferences.setDefault(IPreferenceConstants.P_GENERAL_TEXT_SUFFIX, true);
+		preferences.setDefault(IPreferenceConstants.P_GENERAL_IMPORTANT_PROPERTIES_AFTER_ADD, false);
+		preferences.setDefault(IPreferenceConstants.P_GENERAL_DIRECT_EDIT_AFTER_ADD, true);
+		preferences.setDefault(IPreferenceConstants.P_GENERAL_DEFAULT_TOP_WIDTH, 450);
+		preferences.setDefault(IPreferenceConstants.P_GENERAL_DEFAULT_TOP_HEIGHT, 300);
+		// SWT specific
+		preferences.setDefault(
+				org.eclipse.wb.internal.swt.preferences.IPreferenceConstants.P_USE_RESOURCE_MANAGER,
+				true);
+		preferences.setDefault(IPreferenceConstants.P_STYLE_PROPERTY_CASCADE_POPUP, false);
+		// variable names
+		{
+			preferences.setDefault(
+					IPreferenceConstants.P_VARIABLE_TEXT_MODE,
+					IPreferenceConstants.V_VARIABLE_TEXT_MODE_DEFAULT);
+			preferences.setDefault(
+					IPreferenceConstants.P_VARIABLE_TEXT_TEMPLATE,
+					"${class_acronym}${text}");
+			preferences.setDefault(IPreferenceConstants.P_VARIABLE_TEXT_WORDS_LIMIT, 3);
+		}
+		// NLS
+		{
+			preferences.setDefault(IPreferenceConstants.P_NLS_AUTO_EXTERNALIZE, true);
+			preferences.setDefault(IPreferenceConstants.P_NLS_KEY_AS_STRING_VALUE_ONLY, false);
+			preferences.setDefault(IPreferenceConstants.P_NLS_KEY_QUALIFIED_TYPE_NAME, false);
+			preferences.setDefault(IPreferenceConstants.P_NLS_KEY_RENAME_WITH_VARIABLE, false);
+			preferences.setDefault(IPreferenceConstants.P_NLS_KEY_HAS_STRING_VALUE, false);
+			preferences.setDefault(IPreferenceConstants.P_NLS_KEY_AS_VALUE_PREFIX, "*");
+		}
+		// layout
+		preferences.setDefault(IPreferenceConstants.P_LAYOUT_OF_PARENT, false);
+		preferences.setDefault(
+				org.eclipse.wb.internal.swt.preferences.IPreferenceConstants.P_LAYOUT_NAME_TEMPLATE,
+				"${layoutAcronym}_${compositeName}");
+		preferences.setDefault(
+				org.eclipse.wb.internal.swt.preferences.IPreferenceConstants.P_LAYOUT_DATA_NAME_TEMPLATE,
+				"${dataAcronym}_${controlName}");
+		// GridLayout
+		{
+			preferences.setDefault(
+					org.eclipse.wb.internal.swt.model.layout.grid.IPreferenceConstants.P_ENABLE_GRAB,
+					true);
+			preferences.setDefault(
+					org.eclipse.wb.internal.swt.model.layout.grid.IPreferenceConstants.P_ENABLE_RIGHT_ALIGNMENT,
+					true);
+		}
+		// Forms API
+		{
+			preferences.setDefault(
+					org.eclipse.wb.internal.rcp.preferences.IPreferenceConstants.FORMS_PAINT_BORDERS,
+					true);
+			preferences.setDefault(
+					org.eclipse.wb.internal.rcp.preferences.IPreferenceConstants.FORMS_ADAPT_CONTROL,
+					true);
+		}
+		// PreferencePage
+		{
+			preferences.setDefault(
+					org.eclipse.wb.internal.rcp.preferences.IPreferenceConstants.PREF_FIELD_USUAL_CODE,
+					false);
+		}
+		// TableWrapLayout
+		{
+			preferences.setDefault(
+					org.eclipse.wb.internal.rcp.model.forms.layout.table.IPreferenceConstants.P_ENABLE_GRAB,
+					true);
+			preferences.setDefault(
+					org.eclipse.wb.internal.rcp.model.forms.layout.table.IPreferenceConstants.P_ENABLE_RIGHT_ALIGNMENT,
+					true);
+		}
+		// FormLayout
+		{
+			preferences.setDefault(
+					org.eclipse.wb.internal.swt.model.layout.form.IPreferenceConstants.PREF_FORMLAYOUT_MODE,
+					org.eclipse.wb.internal.swt.model.layout.form.IPreferenceConstants.VAL_FORMLAYOUT_MODE_AUTO);
+			// for classic mode
+			preferences.setDefault(
+					org.eclipse.wb.internal.swt.model.layout.form.IPreferenceConstants.PREF_SNAP_SENS,
+					5);
+			preferences.setDefault(
+					org.eclipse.wb.internal.swt.model.layout.form.IPreferenceConstants.PREF_V_WINDOW_MARGIN,
+					12);
+			preferences.setDefault(
+					org.eclipse.wb.internal.swt.model.layout.form.IPreferenceConstants.PREF_V_PERCENT_OFFSET,
+					6);
+			preferences.setDefault(
+					org.eclipse.wb.internal.swt.model.layout.form.IPreferenceConstants.PREF_V_WIDGET_OFFSET,
+					6);
+			preferences.setDefault(
+					org.eclipse.wb.internal.swt.model.layout.form.IPreferenceConstants.PREF_V_PERCENTS,
+					"20 80");
+			preferences.setDefault(
+					org.eclipse.wb.internal.swt.model.layout.form.IPreferenceConstants.PREF_H_WINDOW_MARGIN,
+					12);
+			preferences.setDefault(
+					org.eclipse.wb.internal.swt.model.layout.form.IPreferenceConstants.PREF_H_PERCENT_OFFSET,
+					6);
+			preferences.setDefault(
+					org.eclipse.wb.internal.swt.model.layout.form.IPreferenceConstants.PREF_H_WIDGET_OFFSET,
+					6);
+			preferences.setDefault(
+					org.eclipse.wb.internal.swt.model.layout.form.IPreferenceConstants.PREF_H_PERCENTS,
+					"20 80");
+			preferences.setDefault(
+					org.eclipse.wb.internal.swt.model.layout.form.IPreferenceConstants.PREF_KEEP_ATTACHMENTS_STYLE,
+					false);
+		}
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/preferences/PreferencesMessages.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/preferences/PreferencesMessages.java
index 6eb4357da..a89b7f09d 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/preferences/PreferencesMessages.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/preferences/PreferencesMessages.java
@@ -3,60 +3,60 @@
 import org.eclipse.osgi.util.NLS;
 
 public class PreferencesMessages extends NLS {
-  private static final String BUNDLE_NAME =
-      "org.eclipse.wb.internal.rcp.preferences.PreferencesMessages"; //$NON-NLS-1$
-  public static String AbsoluteLayoutPreferencePage_applyGridFlow;
-  public static String AbsoluteLayoutPreferencePage_autoSizeForTextImage;
-  public static String AbsoluteLayoutPreferencePage_compGapsBottom;
-  public static String AbsoluteLayoutPreferencePage_compGapsGroup;
-  public static String AbsoluteLayoutPreferencePage_compGapsLeft;
-  public static String AbsoluteLayoutPreferencePage_compGapsRight;
-  public static String AbsoluteLayoutPreferencePage_compGapsTop;
-  public static String AbsoluteLayoutPreferencePage_contGaps;
-  public static String AbsoluteLayoutPreferencePage_contGapsBottom;
-  public static String AbsoluteLayoutPreferencePage_contGapsLeft;
-  public static String AbsoluteLayoutPreferencePage_contGapsRight;
-  public static String AbsoluteLayoutPreferencePage_contGapsTop;
-  public static String AbsoluteLayoutPreferencePage_displayLocationSizeHints;
-  public static String AbsoluteLayoutPreferencePage_gridDisplay;
-  public static String AbsoluteLayoutPreferencePage_gridPropertiesGroup;
-  public static String AbsoluteLayoutPreferencePage_gridStepX;
-  public static String AbsoluteLayoutPreferencePage_gridStepY;
-  public static String AbsoluteLayoutPreferencePage_useFreePlacement;
-  public static String AbsoluteLayoutPreferencePage_useGridSnapping;
-  public static String FormLayoutPreferencePage_defaultPercents;
-  public static String FormLayoutPreferencePage_editingMode;
-  public static String FormLayoutPreferencePage_horizontalPercents;
-  public static String FormLayoutPreferencePage_keepAttachmentStyle;
-  public static String FormLayoutPreferencePage_modeAutoPlacement;
-  public static String FormLayoutPreferencePage_modeClassic;
-  public static String FormLayoutPreferencePage_newPercentHint;
-  public static String FormLayoutPreferencePage_newPercentMessage;
-  public static String FormLayoutPreferencePage_newPercentTitle;
-  public static String FormLayoutPreferencePage_offsetPercent;
-  public static String FormLayoutPreferencePage_offsetWidget;
-  public static String FormLayoutPreferencePage_offsetWindow;
-  public static String FormLayoutPreferencePage_snapPoints;
-  public static String FormLayoutPreferencePage_spanSensetivity;
-  public static String FormLayoutPreferencePage_verticalPercents;
-  public static String FormsPreferencePage_generateAdapt;
-  public static String FormsPreferencePage_generatePaintBorders;
-  public static String LayoutsPreferencePage_dataVariablePattern;
-  public static String LayoutsPreferencePage_layoutVariablePattern;
-  public static String MainPreferencePage_autoDirectEdit;
-  public static String MainPreferencePage_defaultFormHeight;
-  public static String MainPreferencePage_defaultFormWidth;
-  public static String MainPreferencePage_highlightBorders;
-  public static String MainPreferencePage_showImportantProperties;
-  public static String MainPreferencePage_showTextInComponentsTree;
-  public static String MainPreferencePage_useCascadedStyleMenu;
-  public static String MainPreferencePage_useResourceManager;
-  public static String PreferencePagePreferencePage_useControlCodeGen;
-  static {
-    // initialize resource bundle
-    NLS.initializeMessages(BUNDLE_NAME, PreferencesMessages.class);
-  }
+	private static final String BUNDLE_NAME =
+			"org.eclipse.wb.internal.rcp.preferences.PreferencesMessages"; //$NON-NLS-1$
+	public static String AbsoluteLayoutPreferencePage_applyGridFlow;
+	public static String AbsoluteLayoutPreferencePage_autoSizeForTextImage;
+	public static String AbsoluteLayoutPreferencePage_compGapsBottom;
+	public static String AbsoluteLayoutPreferencePage_compGapsGroup;
+	public static String AbsoluteLayoutPreferencePage_compGapsLeft;
+	public static String AbsoluteLayoutPreferencePage_compGapsRight;
+	public static String AbsoluteLayoutPreferencePage_compGapsTop;
+	public static String AbsoluteLayoutPreferencePage_contGaps;
+	public static String AbsoluteLayoutPreferencePage_contGapsBottom;
+	public static String AbsoluteLayoutPreferencePage_contGapsLeft;
+	public static String AbsoluteLayoutPreferencePage_contGapsRight;
+	public static String AbsoluteLayoutPreferencePage_contGapsTop;
+	public static String AbsoluteLayoutPreferencePage_displayLocationSizeHints;
+	public static String AbsoluteLayoutPreferencePage_gridDisplay;
+	public static String AbsoluteLayoutPreferencePage_gridPropertiesGroup;
+	public static String AbsoluteLayoutPreferencePage_gridStepX;
+	public static String AbsoluteLayoutPreferencePage_gridStepY;
+	public static String AbsoluteLayoutPreferencePage_useFreePlacement;
+	public static String AbsoluteLayoutPreferencePage_useGridSnapping;
+	public static String FormLayoutPreferencePage_defaultPercents;
+	public static String FormLayoutPreferencePage_editingMode;
+	public static String FormLayoutPreferencePage_horizontalPercents;
+	public static String FormLayoutPreferencePage_keepAttachmentStyle;
+	public static String FormLayoutPreferencePage_modeAutoPlacement;
+	public static String FormLayoutPreferencePage_modeClassic;
+	public static String FormLayoutPreferencePage_newPercentHint;
+	public static String FormLayoutPreferencePage_newPercentMessage;
+	public static String FormLayoutPreferencePage_newPercentTitle;
+	public static String FormLayoutPreferencePage_offsetPercent;
+	public static String FormLayoutPreferencePage_offsetWidget;
+	public static String FormLayoutPreferencePage_offsetWindow;
+	public static String FormLayoutPreferencePage_snapPoints;
+	public static String FormLayoutPreferencePage_spanSensetivity;
+	public static String FormLayoutPreferencePage_verticalPercents;
+	public static String FormsPreferencePage_generateAdapt;
+	public static String FormsPreferencePage_generatePaintBorders;
+	public static String LayoutsPreferencePage_dataVariablePattern;
+	public static String LayoutsPreferencePage_layoutVariablePattern;
+	public static String MainPreferencePage_autoDirectEdit;
+	public static String MainPreferencePage_defaultFormHeight;
+	public static String MainPreferencePage_defaultFormWidth;
+	public static String MainPreferencePage_highlightBorders;
+	public static String MainPreferencePage_showImportantProperties;
+	public static String MainPreferencePage_showTextInComponentsTree;
+	public static String MainPreferencePage_useCascadedStyleMenu;
+	public static String MainPreferencePage_useResourceManager;
+	public static String PreferencePagePreferencePage_useControlCodeGen;
+	static {
+		// initialize resource bundle
+		NLS.initializeMessages(BUNDLE_NAME, PreferencesMessages.class);
+	}
 
-  private PreferencesMessages() {
-  }
+	private PreferencesMessages() {
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/preferences/code/CodeGenerationPreferencePage.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/preferences/code/CodeGenerationPreferencePage.java
index 9023229ed..b27edb5c3 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/preferences/code/CodeGenerationPreferencePage.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/preferences/code/CodeGenerationPreferencePage.java
@@ -19,14 +19,14 @@
  * @coverage rcp.preferences.ui
  */
 public final class CodeGenerationPreferencePage
-    extends
-      org.eclipse.wb.internal.core.preferences.code.CodeGenerationPreferencePage {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CodeGenerationPreferencePage() {
-    super(ToolkitProvider.DESCRIPTION);
-  }
+extends
+org.eclipse.wb.internal.core.preferences.code.CodeGenerationPreferencePage {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CodeGenerationPreferencePage() {
+		super(ToolkitProvider.DESCRIPTION);
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/preferences/code/NlsPreferencePage.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/preferences/code/NlsPreferencePage.java
index 097a6083c..898da954c 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/preferences/code/NlsPreferencePage.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/preferences/code/NlsPreferencePage.java
@@ -19,12 +19,12 @@
  * @coverage rcp.preferences.ui
  */
 public final class NlsPreferencePage extends org.eclipse.wb.internal.core.nls.NlsPreferencePage {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public NlsPreferencePage() {
-    super(ToolkitProvider.DESCRIPTION);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public NlsPreferencePage() {
+		super(ToolkitProvider.DESCRIPTION);
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/preferences/code/VariablesPreferencePage.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/preferences/code/VariablesPreferencePage.java
index bb584dcfb..3b2eefa72 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/preferences/code/VariablesPreferencePage.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/preferences/code/VariablesPreferencePage.java
@@ -20,14 +20,14 @@
  * @coverage rcp.preferences.ui
  */
 public final class VariablesPreferencePage
-    extends
-      org.eclipse.wb.internal.core.preferences.code.VariablesPreferencePage {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public VariablesPreferencePage() {
-    super(ToolkitProvider.DESCRIPTION);
-  }
+extends
+org.eclipse.wb.internal.core.preferences.code.VariablesPreferencePage {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public VariablesPreferencePage() {
+		super(ToolkitProvider.DESCRIPTION);
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/preferences/event/EventsPreferencePage.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/preferences/event/EventsPreferencePage.java
index 11b87f5ae..76e43ff53 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/preferences/event/EventsPreferencePage.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/preferences/event/EventsPreferencePage.java
@@ -22,14 +22,14 @@
  * @coverage rcp.preferences.ui
  */
 public final class EventsPreferencePage
-    extends
-      org.eclipse.wb.internal.core.preferences.event.EventsPreferencePage {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public EventsPreferencePage() {
-    super(Activator.getDefault().getPreferenceStore());
-  }
+extends
+org.eclipse.wb.internal.core.preferences.event.EventsPreferencePage {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public EventsPreferencePage() {
+		super(Activator.getDefault().getPreferenceStore());
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/preferences/event/PreferenceInitializer.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/preferences/event/PreferenceInitializer.java
index acee190cc..dad350b22 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/preferences/event/PreferenceInitializer.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/preferences/event/PreferenceInitializer.java
@@ -24,27 +24,27 @@
  * @coverage rcp.preferences
  */
 public final class PreferenceInitializer extends AbstractPreferenceInitializer
-    implements
-      IPreferenceConstants {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  //	Initializing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void initializeDefaultPreferences() {
-    IPreferenceStore preferenceStore = Activator.getDefault().getPreferenceStore();
-    // type
-    preferenceStore.setDefault(P_CODE_TYPE, V_CODE_ANONYMOUS);
-    preferenceStore.setDefault(P_INNER_POSITION, V_INNER_AFTER);
-    // stub
-    preferenceStore.setDefault(P_CREATE_STUB, false);
-    preferenceStore.setDefault(P_STUB_NAME_TEMPLATE, "do_${component_name}_${event_name}");
-    preferenceStore.setDefault(P_DELETE_STUB, true);
-    // inner
-    preferenceStore.setDefault(P_INNER_NAME_TEMPLATE, "${Component_name}${Listener_className}");
-    // other
-    preferenceStore.setDefault(P_FINAL_PARAMETERS, false);
-    preferenceStore.setDefault(P_DECORATE_ICON, true);
-  }
+implements
+IPreferenceConstants {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	//	Initializing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void initializeDefaultPreferences() {
+		IPreferenceStore preferenceStore = Activator.getDefault().getPreferenceStore();
+		// type
+		preferenceStore.setDefault(P_CODE_TYPE, V_CODE_ANONYMOUS);
+		preferenceStore.setDefault(P_INNER_POSITION, V_INNER_AFTER);
+		// stub
+		preferenceStore.setDefault(P_CREATE_STUB, false);
+		preferenceStore.setDefault(P_STUB_NAME_TEMPLATE, "do_${component_name}_${event_name}");
+		preferenceStore.setDefault(P_DELETE_STUB, true);
+		// inner
+		preferenceStore.setDefault(P_INNER_NAME_TEMPLATE, "${Component_name}${Listener_className}");
+		// other
+		preferenceStore.setDefault(P_FINAL_PARAMETERS, false);
+		preferenceStore.setDefault(P_DECORATE_ICON, true);
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/preferences/layout/AbsoluteLayoutPreferencePage.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/preferences/layout/AbsoluteLayoutPreferencePage.java
index 67efd5d0c..6abffb499 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/preferences/layout/AbsoluteLayoutPreferencePage.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/preferences/layout/AbsoluteLayoutPreferencePage.java
@@ -37,163 +37,163 @@
  * @coverage rcp.preferences.ui
  */
 public final class AbsoluteLayoutPreferencePage extends FieldLayoutPreferencePage
-    implements
-      IWorkbenchPreferencePage,
-      IPreferenceConstants {
-  /**
-   * @return The {@link IPreferenceStore} of RCP Toolkit Support plugin
-   */
-  @Override
-  public IPreferenceStore getPreferenceStore() {
-    return getToolkit().getPreferences();
-  }
+implements
+IWorkbenchPreferencePage,
+IPreferenceConstants {
+	/**
+	 * @return The {@link IPreferenceStore} of RCP Toolkit Support plugin
+	 */
+	@Override
+	public IPreferenceStore getPreferenceStore() {
+		return getToolkit().getPreferences();
+	}
 
-  /**
-   * @return the {@link ToolkitDescription}.
-   */
-  private ToolkitDescription getToolkit() {
-    return ToolkitProvider.DESCRIPTION;
-  }
+	/**
+	 * @return the {@link ToolkitDescription}.
+	 */
+	private ToolkitDescription getToolkit() {
+		return ToolkitProvider.DESCRIPTION;
+	}
 
-  @Override
-  protected Control createPageContents(Composite parent) {
-    Composite container = new Composite(parent, SWT.NULL);
-    GridLayoutFactory.create(container);
-    createBooleanFieldEditor(
-        P_USE_FREE_MODE,
-        PreferencesMessages.AbsoluteLayoutPreferencePage_useFreePlacement,
-        container);
-    {
-      final Composite freeStylePropertiesComposite = new Composite(container, SWT.NONE);
-      GridDataFactory.create(freeStylePropertiesComposite).fillH().alignVM();
-      GridLayoutFactory.create(freeStylePropertiesComposite).marginsH(0).columns(3);
-      {
-        final Group componentGapsGroup = new Group(freeStylePropertiesComposite, SWT.NONE);
-        GridLayoutFactory.create(componentGapsGroup);
-        GridDataFactory.create(componentGapsGroup).fillV();
-        componentGapsGroup.setText(PreferencesMessages.AbsoluteLayoutPreferencePage_compGapsGroup);
-        createIntegerFieldEditor(
-            P_COMPONENT_GAP_LEFT,
-            PreferencesMessages.AbsoluteLayoutPreferencePage_compGapsLeft,
-            componentGapsGroup,
-            true);
-        createIntegerFieldEditor(
-            P_COMPONENT_GAP_RIGHT,
-            PreferencesMessages.AbsoluteLayoutPreferencePage_compGapsRight,
-            componentGapsGroup,
-            true);
-        createIntegerFieldEditor(
-            P_COMPONENT_GAP_TOP,
-            PreferencesMessages.AbsoluteLayoutPreferencePage_compGapsTop,
-            componentGapsGroup,
-            true);
-        createIntegerFieldEditor(
-            P_COMPONENT_GAP_BOTTOM,
-            PreferencesMessages.AbsoluteLayoutPreferencePage_compGapsBottom,
-            componentGapsGroup,
-            true);
-      }
-      {
-        final Group containerGapsGroup = new Group(freeStylePropertiesComposite, SWT.NONE);
-        GridLayoutFactory.create(containerGapsGroup);
-        GridDataFactory.create(containerGapsGroup).fillV();
-        containerGapsGroup.setText(PreferencesMessages.AbsoluteLayoutPreferencePage_contGaps);
-        createIntegerFieldEditor(
-            P_CONTAINER_GAP_LEFT,
-            PreferencesMessages.AbsoluteLayoutPreferencePage_contGapsLeft,
-            containerGapsGroup,
-            true);
-        createIntegerFieldEditor(
-            P_CONTAINER_GAP_RIGHT,
-            PreferencesMessages.AbsoluteLayoutPreferencePage_contGapsRight,
-            containerGapsGroup,
-            true);
-        createIntegerFieldEditor(
-            P_CONTAINER_GAP_TOP,
-            PreferencesMessages.AbsoluteLayoutPreferencePage_contGapsTop,
-            containerGapsGroup,
-            true);
-        createIntegerFieldEditor(
-            P_CONTAINER_GAP_BOTTOM,
-            PreferencesMessages.AbsoluteLayoutPreferencePage_contGapsBottom,
-            containerGapsGroup,
-            true);
-      }
-    }
-    createBooleanFieldEditor(
-        P_CREATION_FLOW,
-        PreferencesMessages.AbsoluteLayoutPreferencePage_applyGridFlow,
-        container);
-    createBooleanFieldEditor(
-        P_USE_GRID,
-        PreferencesMessages.AbsoluteLayoutPreferencePage_useGridSnapping,
-        container);
-    {
-      final Group gridGroup = new Group(container, SWT.NONE);
-      GridDataFactory.create(gridGroup).fillH().alignVM();
-      gridGroup.setText(PreferencesMessages.AbsoluteLayoutPreferencePage_gridPropertiesGroup);
-      GridLayoutFactory.create(gridGroup);
-      createIntegerFieldEditor(
-          P_GRID_STEP_X,
-          PreferencesMessages.AbsoluteLayoutPreferencePage_gridStepX,
-          gridGroup,
-          false);
-      createIntegerFieldEditor(
-          P_GRID_STEP_Y,
-          PreferencesMessages.AbsoluteLayoutPreferencePage_gridStepY,
-          gridGroup,
-          false);
-      createBooleanFieldEditor(
-          P_DISPLAY_GRID,
-          PreferencesMessages.AbsoluteLayoutPreferencePage_gridDisplay,
-          gridGroup);
-    }
-    createBooleanFieldEditor(
-        P_DISPLAY_LOCATION_SIZE_HINTS,
-        PreferencesMessages.AbsoluteLayoutPreferencePage_displayLocationSizeHints,
-        container);
-    createBooleanFieldEditor(
-        P_AUTOSIZE_ON_PROPERTY_CHANGE,
-        PreferencesMessages.AbsoluteLayoutPreferencePage_autoSizeForTextImage,
-        container);
-    return container;
-  }
+	@Override
+	protected Control createPageContents(Composite parent) {
+		Composite container = new Composite(parent, SWT.NULL);
+		GridLayoutFactory.create(container);
+		createBooleanFieldEditor(
+				P_USE_FREE_MODE,
+				PreferencesMessages.AbsoluteLayoutPreferencePage_useFreePlacement,
+				container);
+		{
+			final Composite freeStylePropertiesComposite = new Composite(container, SWT.NONE);
+			GridDataFactory.create(freeStylePropertiesComposite).fillH().alignVM();
+			GridLayoutFactory.create(freeStylePropertiesComposite).marginsH(0).columns(3);
+			{
+				final Group componentGapsGroup = new Group(freeStylePropertiesComposite, SWT.NONE);
+				GridLayoutFactory.create(componentGapsGroup);
+				GridDataFactory.create(componentGapsGroup).fillV();
+				componentGapsGroup.setText(PreferencesMessages.AbsoluteLayoutPreferencePage_compGapsGroup);
+				createIntegerFieldEditor(
+						P_COMPONENT_GAP_LEFT,
+						PreferencesMessages.AbsoluteLayoutPreferencePage_compGapsLeft,
+						componentGapsGroup,
+						true);
+				createIntegerFieldEditor(
+						P_COMPONENT_GAP_RIGHT,
+						PreferencesMessages.AbsoluteLayoutPreferencePage_compGapsRight,
+						componentGapsGroup,
+						true);
+				createIntegerFieldEditor(
+						P_COMPONENT_GAP_TOP,
+						PreferencesMessages.AbsoluteLayoutPreferencePage_compGapsTop,
+						componentGapsGroup,
+						true);
+				createIntegerFieldEditor(
+						P_COMPONENT_GAP_BOTTOM,
+						PreferencesMessages.AbsoluteLayoutPreferencePage_compGapsBottom,
+						componentGapsGroup,
+						true);
+			}
+			{
+				final Group containerGapsGroup = new Group(freeStylePropertiesComposite, SWT.NONE);
+				GridLayoutFactory.create(containerGapsGroup);
+				GridDataFactory.create(containerGapsGroup).fillV();
+				containerGapsGroup.setText(PreferencesMessages.AbsoluteLayoutPreferencePage_contGaps);
+				createIntegerFieldEditor(
+						P_CONTAINER_GAP_LEFT,
+						PreferencesMessages.AbsoluteLayoutPreferencePage_contGapsLeft,
+						containerGapsGroup,
+						true);
+				createIntegerFieldEditor(
+						P_CONTAINER_GAP_RIGHT,
+						PreferencesMessages.AbsoluteLayoutPreferencePage_contGapsRight,
+						containerGapsGroup,
+						true);
+				createIntegerFieldEditor(
+						P_CONTAINER_GAP_TOP,
+						PreferencesMessages.AbsoluteLayoutPreferencePage_contGapsTop,
+						containerGapsGroup,
+						true);
+				createIntegerFieldEditor(
+						P_CONTAINER_GAP_BOTTOM,
+						PreferencesMessages.AbsoluteLayoutPreferencePage_contGapsBottom,
+						containerGapsGroup,
+						true);
+			}
+		}
+		createBooleanFieldEditor(
+				P_CREATION_FLOW,
+				PreferencesMessages.AbsoluteLayoutPreferencePage_applyGridFlow,
+				container);
+		createBooleanFieldEditor(
+				P_USE_GRID,
+				PreferencesMessages.AbsoluteLayoutPreferencePage_useGridSnapping,
+				container);
+		{
+			final Group gridGroup = new Group(container, SWT.NONE);
+			GridDataFactory.create(gridGroup).fillH().alignVM();
+			gridGroup.setText(PreferencesMessages.AbsoluteLayoutPreferencePage_gridPropertiesGroup);
+			GridLayoutFactory.create(gridGroup);
+			createIntegerFieldEditor(
+					P_GRID_STEP_X,
+					PreferencesMessages.AbsoluteLayoutPreferencePage_gridStepX,
+					gridGroup,
+					false);
+			createIntegerFieldEditor(
+					P_GRID_STEP_Y,
+					PreferencesMessages.AbsoluteLayoutPreferencePage_gridStepY,
+					gridGroup,
+					false);
+			createBooleanFieldEditor(
+					P_DISPLAY_GRID,
+					PreferencesMessages.AbsoluteLayoutPreferencePage_gridDisplay,
+					gridGroup);
+		}
+		createBooleanFieldEditor(
+				P_DISPLAY_LOCATION_SIZE_HINTS,
+				PreferencesMessages.AbsoluteLayoutPreferencePage_displayLocationSizeHints,
+				container);
+		createBooleanFieldEditor(
+				P_AUTOSIZE_ON_PROPERTY_CHANGE,
+				PreferencesMessages.AbsoluteLayoutPreferencePage_autoSizeForTextImage,
+				container);
+		return container;
+	}
 
-  /**
-   * Helper method Create {@link #BooleanFieldEditor} within own composite on specified parent
-   */
-  private void createBooleanFieldEditor(final String key, final String text, final Composite parent) {
-    final Composite composite = new Composite(parent, SWT.NONE);
-    addField(new BooleanFieldEditor(key, text, composite));
-  }
+	/**
+	 * Helper method Create {@link #BooleanFieldEditor} within own composite on specified parent
+	 */
+	private void createBooleanFieldEditor(final String key, final String text, final Composite parent) {
+		final Composite composite = new Composite(parent, SWT.NONE);
+		addField(new BooleanFieldEditor(key, text, composite));
+	}
 
-  /**
-   * Helper method Create {@link #IntegerFieldEditor} within own composite on specified parent
-   *
-   * @param alignedRight
-   *          if this parameter is true then align filed editor to the right
-   */
-  private void createIntegerFieldEditor(final String key,
-      final String text,
-      final Composite parent,
-      boolean alignedRight) {
-    final Composite composite = new Composite(parent, SWT.NONE);
-    if (alignedRight) {
-      GridDataFactory.create(composite).grabH().alignHR().alignVM();
-    }
-    // set min width of text control to 40
-    IntegerFieldEditor integerFieldEditor = new IntegerFieldEditor(key, text, composite);
-    Text textControl = integerFieldEditor.getTextControl(composite);
-    GridDataFactory.modify(textControl).hintHC(5);
-    addField(integerFieldEditor);
-  }
+	/**
+	 * Helper method Create {@link #IntegerFieldEditor} within own composite on specified parent
+	 *
+	 * @param alignedRight
+	 *          if this parameter is true then align filed editor to the right
+	 */
+	private void createIntegerFieldEditor(final String key,
+			final String text,
+			final Composite parent,
+			boolean alignedRight) {
+		final Composite composite = new Composite(parent, SWT.NONE);
+		if (alignedRight) {
+			GridDataFactory.create(composite).grabH().alignHR().alignVM();
+		}
+		// set min width of text control to 40
+		IntegerFieldEditor integerFieldEditor = new IntegerFieldEditor(key, text, composite);
+		Text textControl = integerFieldEditor.getTextControl(composite);
+		GridDataFactory.modify(textControl).hintHC(5);
+		addField(integerFieldEditor);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  //	IWorkbenchPreferencePage
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void init(IWorkbench workbench) {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	//	IWorkbenchPreferencePage
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void init(IWorkbench workbench) {
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/preferences/layout/FormLayoutPreferencePage.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/preferences/layout/FormLayoutPreferencePage.java
index 9c017de77..cc86b4b3e 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/preferences/layout/FormLayoutPreferencePage.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/preferences/layout/FormLayoutPreferencePage.java
@@ -59,336 +59,336 @@
  * @coverage rcp.preferences.ui
  */
 public final class FormLayoutPreferencePage extends FieldLayoutPreferencePage
-    implements
-      IWorkbenchPreferencePage,
-      IPreferenceConstants {
-  private static Image m_addImage = AbstractUIPlugin.imageDescriptorFromPlugin(
-      "org.eclipse.ui",
-      "/icons/full/obj16/add_obj.png").createImage();
-  private static Image m_removeImage = AbstractUIPlugin.imageDescriptorFromPlugin(
-      "org.eclipse.ui",
-      "/icons/full/obj16/delete_obj.png").createImage();
-  private Composite m_prefsAutomatic;
-  private Composite m_prefsClassic;
-  private StackLayout m_stackLayout;
-  private ComboFieldEditor m_modeEditor;
-  private Composite m_details;
-  private PercentsGroup m_verticalPercentsGroup;
-  private PercentsGroup m_horizontalPercentsGroup;
+implements
+IWorkbenchPreferencePage,
+IPreferenceConstants {
+	private static Image m_addImage = AbstractUIPlugin.imageDescriptorFromPlugin(
+			"org.eclipse.ui",
+			"/icons/full/obj16/add_obj.png").createImage();
+	private static Image m_removeImage = AbstractUIPlugin.imageDescriptorFromPlugin(
+			"org.eclipse.ui",
+			"/icons/full/obj16/delete_obj.png").createImage();
+	private Composite m_prefsAutomatic;
+	private Composite m_prefsClassic;
+	private StackLayout m_stackLayout;
+	private ComboFieldEditor m_modeEditor;
+	private Composite m_details;
+	private PercentsGroup m_verticalPercentsGroup;
+	private PercentsGroup m_horizontalPercentsGroup;
 
-  /**
-   * @return The {@link IPreferenceStore} of RCP Toolkit Support plugin
-   */
-  @Override
-  public IPreferenceStore getPreferenceStore() {
-    return Activator.getDefault().getPreferenceStore();
-  }
+	/**
+	 * @return The {@link IPreferenceStore} of RCP Toolkit Support plugin
+	 */
+	@Override
+	public IPreferenceStore getPreferenceStore() {
+		return Activator.getDefault().getPreferenceStore();
+	}
 
-  @Override
-  protected void initialize() {
-    super.initialize();
-    String mode = getPreferenceStore().getString(PREF_FORMLAYOUT_MODE);
-    propertyChange(new PropertyChangeEvent(m_modeEditor, PREF_FORMLAYOUT_MODE, null, mode));
-  }
+	@Override
+	protected void initialize() {
+		super.initialize();
+		String mode = getPreferenceStore().getString(PREF_FORMLAYOUT_MODE);
+		propertyChange(new PropertyChangeEvent(m_modeEditor, PREF_FORMLAYOUT_MODE, null, mode));
+	}
 
-  @Override
-  protected Control createPageContents(Composite parent) {
-    Composite container = new Composite(parent, SWT.NONE);
-    GridLayoutFactory.create(container);
-    m_modeEditor = createComboFieldEditor(
-        PREF_FORMLAYOUT_MODE,
-        PreferencesMessages.FormLayoutPreferencePage_editingMode,
-        container);
-    {
-      m_details = new Composite(container, SWT.NONE);
-      GridDataFactory.create(m_details).grab().fill();
-      m_stackLayout = new StackLayout();
-      m_details.setLayout(m_stackLayout);
-      {
-        m_prefsAutomatic = new Composite(m_details, SWT.NONE);
-        GridLayoutFactory.create(m_prefsAutomatic);
-        {
-          Group snapPoints = new Group(m_prefsAutomatic, SWT.NONE);
-          GridLayoutFactory.create(snapPoints).columns(2).noMargins().noSpacing();
-          GridDataFactory.create(snapPoints).grab().fill();
-          snapPoints.setText(PreferencesMessages.FormLayoutPreferencePage_snapPoints);
-          {
-            m_verticalPercentsGroup = new PercentsGroup(snapPoints,
-                PreferencesMessages.FormLayoutPreferencePage_verticalPercents,
-                PREF_V_WINDOW_MARGIN,
-                PREF_V_PERCENT_OFFSET,
-                PREF_V_WIDGET_OFFSET,
-                PREF_V_PERCENTS);
-          }
-          {
-            m_horizontalPercentsGroup = new PercentsGroup(snapPoints,
-                PreferencesMessages.FormLayoutPreferencePage_horizontalPercents,
-                PREF_H_WINDOW_MARGIN,
-                PREF_H_PERCENT_OFFSET,
-                PREF_H_WIDGET_OFFSET,
-                PREF_H_PERCENTS);
-          }
-        }
-      }
-      {
-        m_prefsClassic = new Composite(m_details, SWT.NONE);
-        GridLayoutFactory.create(m_prefsClassic);
-        {
-          Group snapPoints = new Group(m_prefsClassic, SWT.NONE);
-          GridLayoutFactory.create(snapPoints).columns(2).noMargins().noSpacing();
-          GridDataFactory.create(snapPoints).grab().fill();
-          snapPoints.setText(PreferencesMessages.FormLayoutPreferencePage_snapPoints);
-          {
-            m_verticalPercentsGroup = new PercentsGroup(snapPoints,
-                PreferencesMessages.FormLayoutPreferencePage_verticalPercents,
-                PREF_V_WINDOW_MARGIN,
-                PREF_V_PERCENT_OFFSET,
-                PREF_V_WIDGET_OFFSET,
-                PREF_V_PERCENTS);
-          }
-          {
-            m_horizontalPercentsGroup = new PercentsGroup(snapPoints,
-                PreferencesMessages.FormLayoutPreferencePage_horizontalPercents,
-                PREF_H_WINDOW_MARGIN,
-                PREF_H_PERCENT_OFFSET,
-                PREF_H_WIDGET_OFFSET,
-                PREF_H_PERCENTS);
-          }
-        }
-        {
-          Composite composite = new Composite(m_prefsClassic, SWT.NONE);
-          GridDataFactory.create(composite).grabH().fillH();
-          IntegerFieldEditor sensitivity = new IntegerFieldEditor(PREF_SNAP_SENS,
-              PreferencesMessages.FormLayoutPreferencePage_spanSensetivity,
-              composite);
-          addField(sensitivity);
-        }
-        {
-          Composite composite = new Composite(m_prefsClassic, SWT.NONE);
-          GridDataFactory.create(composite).grabH().fillH();
-          BooleanFieldEditor keepAttachments = new BooleanFieldEditor(PREF_KEEP_ATTACHMENTS_STYLE,
-              PreferencesMessages.FormLayoutPreferencePage_keepAttachmentStyle,
-              composite);
-          addField(keepAttachments);
-        }
-      }
-    }
-    return container;
-  }
+	@Override
+	protected Control createPageContents(Composite parent) {
+		Composite container = new Composite(parent, SWT.NONE);
+		GridLayoutFactory.create(container);
+		m_modeEditor = createComboFieldEditor(
+				PREF_FORMLAYOUT_MODE,
+				PreferencesMessages.FormLayoutPreferencePage_editingMode,
+				container);
+		{
+			m_details = new Composite(container, SWT.NONE);
+			GridDataFactory.create(m_details).grab().fill();
+			m_stackLayout = new StackLayout();
+			m_details.setLayout(m_stackLayout);
+			{
+				m_prefsAutomatic = new Composite(m_details, SWT.NONE);
+				GridLayoutFactory.create(m_prefsAutomatic);
+				{
+					Group snapPoints = new Group(m_prefsAutomatic, SWT.NONE);
+					GridLayoutFactory.create(snapPoints).columns(2).noMargins().noSpacing();
+					GridDataFactory.create(snapPoints).grab().fill();
+					snapPoints.setText(PreferencesMessages.FormLayoutPreferencePage_snapPoints);
+					{
+						m_verticalPercentsGroup = new PercentsGroup(snapPoints,
+								PreferencesMessages.FormLayoutPreferencePage_verticalPercents,
+								PREF_V_WINDOW_MARGIN,
+								PREF_V_PERCENT_OFFSET,
+								PREF_V_WIDGET_OFFSET,
+								PREF_V_PERCENTS);
+					}
+					{
+						m_horizontalPercentsGroup = new PercentsGroup(snapPoints,
+								PreferencesMessages.FormLayoutPreferencePage_horizontalPercents,
+								PREF_H_WINDOW_MARGIN,
+								PREF_H_PERCENT_OFFSET,
+								PREF_H_WIDGET_OFFSET,
+								PREF_H_PERCENTS);
+					}
+				}
+			}
+			{
+				m_prefsClassic = new Composite(m_details, SWT.NONE);
+				GridLayoutFactory.create(m_prefsClassic);
+				{
+					Group snapPoints = new Group(m_prefsClassic, SWT.NONE);
+					GridLayoutFactory.create(snapPoints).columns(2).noMargins().noSpacing();
+					GridDataFactory.create(snapPoints).grab().fill();
+					snapPoints.setText(PreferencesMessages.FormLayoutPreferencePage_snapPoints);
+					{
+						m_verticalPercentsGroup = new PercentsGroup(snapPoints,
+								PreferencesMessages.FormLayoutPreferencePage_verticalPercents,
+								PREF_V_WINDOW_MARGIN,
+								PREF_V_PERCENT_OFFSET,
+								PREF_V_WIDGET_OFFSET,
+								PREF_V_PERCENTS);
+					}
+					{
+						m_horizontalPercentsGroup = new PercentsGroup(snapPoints,
+								PreferencesMessages.FormLayoutPreferencePage_horizontalPercents,
+								PREF_H_WINDOW_MARGIN,
+								PREF_H_PERCENT_OFFSET,
+								PREF_H_WIDGET_OFFSET,
+								PREF_H_PERCENTS);
+					}
+				}
+				{
+					Composite composite = new Composite(m_prefsClassic, SWT.NONE);
+					GridDataFactory.create(composite).grabH().fillH();
+					IntegerFieldEditor sensitivity = new IntegerFieldEditor(PREF_SNAP_SENS,
+							PreferencesMessages.FormLayoutPreferencePage_spanSensetivity,
+							composite);
+					addField(sensitivity);
+				}
+				{
+					Composite composite = new Composite(m_prefsClassic, SWT.NONE);
+					GridDataFactory.create(composite).grabH().fillH();
+					BooleanFieldEditor keepAttachments = new BooleanFieldEditor(PREF_KEEP_ATTACHMENTS_STYLE,
+							PreferencesMessages.FormLayoutPreferencePage_keepAttachmentStyle,
+							composite);
+					addField(keepAttachments);
+				}
+			}
+		}
+		return container;
+	}
 
-  @Override
-  public void propertyChange(PropertyChangeEvent event) {
-    if (m_modeEditor == event.getSource()) {
-      if (VAL_FORMLAYOUT_MODE_CLASSIC.equals(event.getNewValue())) {
-        m_stackLayout.topControl = m_prefsClassic;
-      } else {
-        m_stackLayout.topControl = m_prefsAutomatic;
-      }
-      m_details.layout(true);
-      return;
-    }
-    super.propertyChange(event);
-  }
+	@Override
+	public void propertyChange(PropertyChangeEvent event) {
+		if (m_modeEditor == event.getSource()) {
+			if (VAL_FORMLAYOUT_MODE_CLASSIC.equals(event.getNewValue())) {
+				m_stackLayout.topControl = m_prefsClassic;
+			} else {
+				m_stackLayout.topControl = m_prefsAutomatic;
+			}
+			m_details.layout(true);
+			return;
+		}
+		super.propertyChange(event);
+	}
 
-  @Override
-  protected void performDefaults() {
-    String mode = getPreferenceStore().getDefaultString(PREF_FORMLAYOUT_MODE);
-    propertyChange(new PropertyChangeEvent(m_modeEditor, PREF_FORMLAYOUT_MODE, null, mode));
-    if (m_horizontalPercentsGroup != null) {
-      m_horizontalPercentsGroup.loadDefaults();
-    }
-    if (m_verticalPercentsGroup != null) {
-      m_verticalPercentsGroup.loadDefaults();
-    }
-    super.performDefaults();
-  }
+	@Override
+	protected void performDefaults() {
+		String mode = getPreferenceStore().getDefaultString(PREF_FORMLAYOUT_MODE);
+		propertyChange(new PropertyChangeEvent(m_modeEditor, PREF_FORMLAYOUT_MODE, null, mode));
+		if (m_horizontalPercentsGroup != null) {
+			m_horizontalPercentsGroup.loadDefaults();
+		}
+		if (m_verticalPercentsGroup != null) {
+			m_verticalPercentsGroup.loadDefaults();
+		}
+		super.performDefaults();
+	}
 
-  @Override
-  public boolean performOk() {
-    if (m_horizontalPercentsGroup != null) {
-      m_horizontalPercentsGroup.store();
-    }
-    if (m_verticalPercentsGroup != null) {
-      m_verticalPercentsGroup.store();
-    }
-    return super.performOk();
-  }
+	@Override
+	public boolean performOk() {
+		if (m_horizontalPercentsGroup != null) {
+			m_horizontalPercentsGroup.store();
+		}
+		if (m_verticalPercentsGroup != null) {
+			m_verticalPercentsGroup.store();
+		}
+		return super.performOk();
+	}
 
-  /**
-   * Helper method Create {@link #BooleanFieldEditor} within own composite on specified parent
-   */
-  private ComboFieldEditor createComboFieldEditor(final String key,
-      final String text,
-      final Composite parent) {
-    final Composite composite = new Composite(parent, SWT.NONE);
-    ComboFieldEditor editor = new ComboFieldEditor(key,
-        text,
-        new String[][]{
-            {
-                PreferencesMessages.FormLayoutPreferencePage_modeAutoPlacement,
-                VAL_FORMLAYOUT_MODE_AUTO},
-            {
-                PreferencesMessages.FormLayoutPreferencePage_modeClassic,
-                VAL_FORMLAYOUT_MODE_CLASSIC}},
-        composite);
-    addField(editor);
-    return editor;
-  }
+	/**
+	 * Helper method Create {@link #BooleanFieldEditor} within own composite on specified parent
+	 */
+	private ComboFieldEditor createComboFieldEditor(final String key,
+			final String text,
+			final Composite parent) {
+		final Composite composite = new Composite(parent, SWT.NONE);
+		ComboFieldEditor editor = new ComboFieldEditor(key,
+				text,
+				new String[][]{
+			{
+				PreferencesMessages.FormLayoutPreferencePage_modeAutoPlacement,
+				VAL_FORMLAYOUT_MODE_AUTO},
+			{
+					PreferencesMessages.FormLayoutPreferencePage_modeClassic,
+					VAL_FORMLAYOUT_MODE_CLASSIC}},
+				composite);
+		addField(editor);
+		return editor;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Percents (classic)
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final class PercentsGroup extends Group {
-    private Set<Integer> m_percentsSet;
-    private final ListViewer m_listViewer;
-    private final String m_keyPercents;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Percents (classic)
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final class PercentsGroup extends Group {
+		private Set<Integer> m_percentsSet;
+		private final ListViewer m_listViewer;
+		private final String m_keyPercents;
 
-    public PercentsGroup(Composite parent,
-        String title,
-        String keyMargin,
-        String keyPercent,
-        String keyWidget,
-        String keyPercents) {
-      super(parent, SWT.NONE);
-      m_keyPercents = keyPercents;
-      GridDataFactory.create(this).grab().fill();
-      setText(title);
-      {
-        addField(
-            new IntegerFieldEditor(keyMargin,
-                PreferencesMessages.FormLayoutPreferencePage_offsetWindow,
-                this));
-        addField(
-            new IntegerFieldEditor(keyPercent,
-                PreferencesMessages.FormLayoutPreferencePage_offsetPercent,
-                this));
-        addField(
-            new IntegerFieldEditor(keyWidget,
-                PreferencesMessages.FormLayoutPreferencePage_offsetWidget,
-                this));
-        {
-          Group percentsGroup = new Group(this, SWT.NONE);
-          GridLayoutFactory.create(percentsGroup).columns(2);
-          GridDataFactory.create(percentsGroup).spanH(2).grab().fill();
-          percentsGroup.setText(PreferencesMessages.FormLayoutPreferencePage_defaultPercents);
-          {
-            m_listViewer = new ListViewer(percentsGroup, SWT.FULL_SELECTION);
-            GridDataFactory.create(m_listViewer.getControl()).grab().fill();
-            m_listViewer.setContentProvider(new IStructuredContentProvider() {
-              @Override
-              public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
-              }
+		public PercentsGroup(Composite parent,
+				String title,
+				String keyMargin,
+				String keyPercent,
+				String keyWidget,
+				String keyPercents) {
+			super(parent, SWT.NONE);
+			m_keyPercents = keyPercents;
+			GridDataFactory.create(this).grab().fill();
+			setText(title);
+			{
+				addField(
+						new IntegerFieldEditor(keyMargin,
+								PreferencesMessages.FormLayoutPreferencePage_offsetWindow,
+								this));
+				addField(
+						new IntegerFieldEditor(keyPercent,
+								PreferencesMessages.FormLayoutPreferencePage_offsetPercent,
+								this));
+				addField(
+						new IntegerFieldEditor(keyWidget,
+								PreferencesMessages.FormLayoutPreferencePage_offsetWidget,
+								this));
+				{
+					Group percentsGroup = new Group(this, SWT.NONE);
+					GridLayoutFactory.create(percentsGroup).columns(2);
+					GridDataFactory.create(percentsGroup).spanH(2).grab().fill();
+					percentsGroup.setText(PreferencesMessages.FormLayoutPreferencePage_defaultPercents);
+					{
+						m_listViewer = new ListViewer(percentsGroup, SWT.FULL_SELECTION);
+						GridDataFactory.create(m_listViewer.getControl()).grab().fill();
+						m_listViewer.setContentProvider(new IStructuredContentProvider() {
+							@Override
+							public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+							}
 
-              @Override
-              public void dispose() {
-              }
+							@Override
+							public void dispose() {
+							}
 
-              @Override
-              public Object[] getElements(Object inputElement) {
-                ensureLoadPreferences();
-                return m_percentsSet.toArray();
-              }
-            });
-            m_listViewer.setInput(new Object());
-            // toolbar
-            ToolBar toolBar = new ToolBar(percentsGroup, SWT.VERTICAL | SWT.FLAT);
-            GridDataFactory.create(toolBar).alignVT();
-            // tool buttons
-            ToolItem itemAdd = new ToolItem(toolBar, SWT.NONE);
-            itemAdd.setImage(m_addImage);
-            itemAdd.addSelectionListener(new SelectionAdapter() {
-              @Override
-              public void widgetSelected(SelectionEvent e) {
-                InputDialog dialog = new InputDialog(getShell(),
-                    PreferencesMessages.FormLayoutPreferencePage_newPercentTitle,
-                    PreferencesMessages.FormLayoutPreferencePage_newPercentMessage,
-                    null,
-                    new IInputValidator() {
-                      @Override
-                      public String isValid(String newText) {
-                        try {
-                          int value = Integer.parseInt(newText);
-                          if (value >= 0 && value <= 100) {
-                            return null;
-                          }
-                        } catch (Throwable e) {
-                          // ignore
-                        }
-                        return PreferencesMessages.FormLayoutPreferencePage_newPercentHint;
-                      }
-                    });
-                if (dialog.open() == Window.OK) {
-                  m_percentsSet.add(Integer.parseInt(dialog.getValue()));
-                  m_listViewer.refresh();
-                }
-              }
-            });
-            final ToolItem itemRemove = new ToolItem(toolBar, SWT.NONE);
-            itemRemove.setImage(m_removeImage);
-            itemRemove.addSelectionListener(new SelectionAdapter() {
-              @Override
-              public void widgetSelected(SelectionEvent e) {
-                StructuredSelection selection = (StructuredSelection) m_listViewer.getSelection();
-                if (selection != null && !selection.isEmpty()) {
-                  Iterator<?> I = selection.iterator();
-                  while (I.hasNext()) {
-                    m_percentsSet.remove(I.next());
-                  }
-                  m_listViewer.refresh();
-                }
-              }
-            });
-            // selection listener
-            m_listViewer.addSelectionChangedListener(new ISelectionChangedListener() {
-              @Override
-              public void selectionChanged(SelectionChangedEvent event) {
-                boolean enabled = event != null && !event.getSelection().isEmpty();
-                itemRemove.setEnabled(enabled);
-              }
-            });
-          }
-        }
-      }
-    }
+							@Override
+							public Object[] getElements(Object inputElement) {
+								ensureLoadPreferences();
+								return m_percentsSet.toArray();
+							}
+						});
+						m_listViewer.setInput(new Object());
+						// toolbar
+						ToolBar toolBar = new ToolBar(percentsGroup, SWT.VERTICAL | SWT.FLAT);
+						GridDataFactory.create(toolBar).alignVT();
+						// tool buttons
+						ToolItem itemAdd = new ToolItem(toolBar, SWT.NONE);
+						itemAdd.setImage(m_addImage);
+						itemAdd.addSelectionListener(new SelectionAdapter() {
+							@Override
+							public void widgetSelected(SelectionEvent e) {
+								InputDialog dialog = new InputDialog(getShell(),
+										PreferencesMessages.FormLayoutPreferencePage_newPercentTitle,
+										PreferencesMessages.FormLayoutPreferencePage_newPercentMessage,
+										null,
+										new IInputValidator() {
+									@Override
+									public String isValid(String newText) {
+										try {
+											int value = Integer.parseInt(newText);
+											if (value >= 0 && value <= 100) {
+												return null;
+											}
+										} catch (Throwable e) {
+											// ignore
+										}
+										return PreferencesMessages.FormLayoutPreferencePage_newPercentHint;
+									}
+								});
+								if (dialog.open() == Window.OK) {
+									m_percentsSet.add(Integer.parseInt(dialog.getValue()));
+									m_listViewer.refresh();
+								}
+							}
+						});
+						final ToolItem itemRemove = new ToolItem(toolBar, SWT.NONE);
+						itemRemove.setImage(m_removeImage);
+						itemRemove.addSelectionListener(new SelectionAdapter() {
+							@Override
+							public void widgetSelected(SelectionEvent e) {
+								StructuredSelection selection = (StructuredSelection) m_listViewer.getSelection();
+								if (selection != null && !selection.isEmpty()) {
+									Iterator<?> I = selection.iterator();
+									while (I.hasNext()) {
+										m_percentsSet.remove(I.next());
+									}
+									m_listViewer.refresh();
+								}
+							}
+						});
+						// selection listener
+						m_listViewer.addSelectionChangedListener(new ISelectionChangedListener() {
+							@Override
+							public void selectionChanged(SelectionChangedEvent event) {
+								boolean enabled = event != null && !event.getSelection().isEmpty();
+								itemRemove.setEnabled(enabled);
+							}
+						});
+					}
+				}
+			}
+		}
 
-    public void store() {
-      StringBuffer buffer = new StringBuffer();
-      for (Integer percent : m_percentsSet) {
-        buffer.append(percent);
-        buffer.append(" ");
-      }
-      buffer.delete(buffer.length() - 1, buffer.length());
-      getPreferenceStore().setValue(m_keyPercents, buffer.toString());
-    }
+		public void store() {
+			StringBuffer buffer = new StringBuffer();
+			for (Integer percent : m_percentsSet) {
+				buffer.append(percent);
+				buffer.append(" ");
+			}
+			buffer.delete(buffer.length() - 1, buffer.length());
+			getPreferenceStore().setValue(m_keyPercents, buffer.toString());
+		}
 
-    public void loadDefaults() {
-      String percents = getPreferenceStore().getDefaultString(m_keyPercents);
-      m_percentsSet =
-          (Set<Integer>) FormLayoutPreferences.fillPercents(percents, Sets.<Integer>newTreeSet());
-      m_listViewer.refresh();
-    }
+		public void loadDefaults() {
+			String percents = getPreferenceStore().getDefaultString(m_keyPercents);
+			m_percentsSet =
+					(Set<Integer>) FormLayoutPreferences.fillPercents(percents, Sets.<Integer>newTreeSet());
+			m_listViewer.refresh();
+		}
 
-    @Override
-    protected void checkSubclass() {
-    }
+		@Override
+		protected void checkSubclass() {
+		}
 
-    private void ensureLoadPreferences() {
-      if (m_percentsSet == null) {
-        String percents = getPreferenceStore().getString(m_keyPercents);
-        m_percentsSet =
-            (Set<Integer>) FormLayoutPreferences.fillPercents(percents, Sets.<Integer>newTreeSet());
-      }
-    }
-  }
+		private void ensureLoadPreferences() {
+			if (m_percentsSet == null) {
+				String percents = getPreferenceStore().getString(m_keyPercents);
+				m_percentsSet =
+						(Set<Integer>) FormLayoutPreferences.fillPercents(percents, Sets.<Integer>newTreeSet());
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  //	IWorkbenchPreferencePage
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void init(IWorkbench workbench) {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	//	IWorkbenchPreferencePage
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void init(IWorkbench workbench) {
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/preferences/layout/GridLayoutPreferencePage.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/preferences/layout/GridLayoutPreferencePage.java
index 1ea4f5e76..d4b527720 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/preferences/layout/GridLayoutPreferencePage.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/preferences/layout/GridLayoutPreferencePage.java
@@ -22,14 +22,14 @@
  * @coverage rcp.preferences.ui
  */
 public final class GridLayoutPreferencePage
-    extends
-      org.eclipse.wb.internal.swt.preferences.layout.GridLayoutPreferencePage {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public GridLayoutPreferencePage() {
-    super(ToolkitProvider.DESCRIPTION);
-  }
+extends
+org.eclipse.wb.internal.swt.preferences.layout.GridLayoutPreferencePage {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public GridLayoutPreferencePage() {
+		super(ToolkitProvider.DESCRIPTION);
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/preferences/layout/LayoutsPreferencePage.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/preferences/layout/LayoutsPreferencePage.java
index 87eb2d303..ec4c22d06 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/preferences/layout/LayoutsPreferencePage.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/preferences/layout/LayoutsPreferencePage.java
@@ -33,57 +33,57 @@
  * @coverage rcp.preferences.ui
  */
 public final class LayoutsPreferencePage
-    extends
-      org.eclipse.wb.internal.core.preferences.LayoutsPreferencePage {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public LayoutsPreferencePage() {
-    super(ToolkitProvider.DESCRIPTION);
-  }
+extends
+org.eclipse.wb.internal.core.preferences.LayoutsPreferencePage {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public LayoutsPreferencePage() {
+		super(ToolkitProvider.DESCRIPTION);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected AbstractBindingComposite createBindingComposite(Composite parent) {
-    return new ContentsCompositeEx(parent, m_bindManager, m_preferences);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected AbstractBindingComposite createBindingComposite(Composite parent) {
+		return new ContentsCompositeEx(parent, m_bindManager, m_preferences);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Contents
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected class ContentsCompositeEx extends ContentsComposite {
-    public ContentsCompositeEx(Composite parent,
-        DataBindManager bindManager,
-        IPreferenceStore preferences) {
-      super(parent, bindManager, preferences);
-      // layout template
-      {
-        new Label(this, SWT.NONE).setText(PreferencesMessages.LayoutsPreferencePage_layoutVariablePattern);
-        // control
-        Combo templateCombo = new Combo(this, SWT.READ_ONLY);
-        GridDataFactory.create(templateCombo).grabH().fillH();
-        templateCombo.setItems(LayoutNameSupport.TEMPLATES);
-        // bind
-        bindString(templateCombo, IPreferenceConstants.P_LAYOUT_NAME_TEMPLATE);
-      }
-      // layout data template
-      {
-        new Label(this, SWT.NONE).setText(PreferencesMessages.LayoutsPreferencePage_dataVariablePattern);
-        // control
-        Combo templateCombo = new Combo(this, SWT.READ_ONLY);
-        GridDataFactory.create(templateCombo).grabH().fillH();
-        templateCombo.setItems(LayoutDataNameSupport.TEMPLATES);
-        // bind
-        bindString(templateCombo, IPreferenceConstants.P_LAYOUT_DATA_NAME_TEMPLATE);
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Contents
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected class ContentsCompositeEx extends ContentsComposite {
+		public ContentsCompositeEx(Composite parent,
+				DataBindManager bindManager,
+				IPreferenceStore preferences) {
+			super(parent, bindManager, preferences);
+			// layout template
+			{
+				new Label(this, SWT.NONE).setText(PreferencesMessages.LayoutsPreferencePage_layoutVariablePattern);
+				// control
+				Combo templateCombo = new Combo(this, SWT.READ_ONLY);
+				GridDataFactory.create(templateCombo).grabH().fillH();
+				templateCombo.setItems(LayoutNameSupport.TEMPLATES);
+				// bind
+				bindString(templateCombo, IPreferenceConstants.P_LAYOUT_NAME_TEMPLATE);
+			}
+			// layout data template
+			{
+				new Label(this, SWT.NONE).setText(PreferencesMessages.LayoutsPreferencePage_dataVariablePattern);
+				// control
+				Combo templateCombo = new Combo(this, SWT.READ_ONLY);
+				GridDataFactory.create(templateCombo).grabH().fillH();
+				templateCombo.setItems(LayoutDataNameSupport.TEMPLATES);
+				// bind
+				bindString(templateCombo, IPreferenceConstants.P_LAYOUT_DATA_NAME_TEMPLATE);
+			}
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/preferences/rcp/FormsPreferencePage.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/preferences/rcp/FormsPreferencePage.java
index 1eaf47589..62931f73e 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/preferences/rcp/FormsPreferencePage.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/preferences/rcp/FormsPreferencePage.java
@@ -29,45 +29,45 @@
  * @coverage rcp.preferences.ui
  */
 public class FormsPreferencePage extends AbstractBindingPreferencesPage {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FormsPreferencePage() {
-    super(RcpToolkitDescription.INSTANCE);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FormsPreferencePage() {
+		super(RcpToolkitDescription.INSTANCE);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected AbstractBindingComposite createBindingComposite(Composite parent) {
-    return new ContentsComposite(parent, m_bindManager, m_preferences);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected AbstractBindingComposite createBindingComposite(Composite parent) {
+		return new ContentsComposite(parent, m_bindManager, m_preferences);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Contents
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private class ContentsComposite extends AbstractBindingComposite {
-    public ContentsComposite(Composite parent,
-        DataBindManager bindManager,
-        IPreferenceStore preferences) {
-      super(parent, bindManager, preferences);
-      GridLayoutFactory.create(this).noMargins().columns(1);
-      // boolean preferences
-      checkButton(
-          this,
-          PreferencesMessages.FormsPreferencePage_generatePaintBorders,
-          IPreferenceConstants.FORMS_PAINT_BORDERS);
-      checkButton(
-          this,
-          PreferencesMessages.FormsPreferencePage_generateAdapt,
-          IPreferenceConstants.FORMS_ADAPT_CONTROL);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Contents
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private class ContentsComposite extends AbstractBindingComposite {
+		public ContentsComposite(Composite parent,
+				DataBindManager bindManager,
+				IPreferenceStore preferences) {
+			super(parent, bindManager, preferences);
+			GridLayoutFactory.create(this).noMargins().columns(1);
+			// boolean preferences
+			checkButton(
+					this,
+					PreferencesMessages.FormsPreferencePage_generatePaintBorders,
+					IPreferenceConstants.FORMS_PAINT_BORDERS);
+			checkButton(
+					this,
+					PreferencesMessages.FormsPreferencePage_generateAdapt,
+					IPreferenceConstants.FORMS_ADAPT_CONTROL);
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/preferences/rcp/PreferencePagePreferencePage.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/preferences/rcp/PreferencePagePreferencePage.java
index 4c9e227d3..0a514a5ad 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/preferences/rcp/PreferencePagePreferencePage.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/preferences/rcp/PreferencePagePreferencePage.java
@@ -29,41 +29,41 @@
  * @coverage rcp.preferences.ui
  */
 public class PreferencePagePreferencePage extends AbstractBindingPreferencesPage {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public PreferencePagePreferencePage() {
-    super(RcpToolkitDescription.INSTANCE);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public PreferencePagePreferencePage() {
+		super(RcpToolkitDescription.INSTANCE);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected AbstractBindingComposite createBindingComposite(Composite parent) {
-    return new ContentsComposite(parent, m_bindManager, m_preferences);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected AbstractBindingComposite createBindingComposite(Composite parent) {
+		return new ContentsComposite(parent, m_bindManager, m_preferences);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Contents
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private class ContentsComposite extends AbstractBindingComposite {
-    public ContentsComposite(Composite parent,
-        DataBindManager bindManager,
-        IPreferenceStore preferences) {
-      super(parent, bindManager, preferences);
-      GridLayoutFactory.create(this).noMargins().columns(1);
-      // boolean preferences
-      checkButton(
-          this,
-          PreferencesMessages.PreferencePagePreferencePage_useControlCodeGen,
-          IPreferenceConstants.PREF_FIELD_USUAL_CODE);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Contents
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private class ContentsComposite extends AbstractBindingComposite {
+		public ContentsComposite(Composite parent,
+				DataBindManager bindManager,
+				IPreferenceStore preferences) {
+			super(parent, bindManager, preferences);
+			GridLayoutFactory.create(this).noMargins().columns(1);
+			// boolean preferences
+			checkButton(
+					this,
+					PreferencesMessages.PreferencePagePreferencePage_useControlCodeGen,
+					IPreferenceConstants.PREF_FIELD_USUAL_CODE);
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/support/FontPreviewShell.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/support/FontPreviewShell.java
index 32922fa65..64667c3b8 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/support/FontPreviewShell.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/support/FontPreviewShell.java
@@ -24,37 +24,37 @@
  * @coverage rcp.support
  */
 public class FontPreviewShell extends Shell {
-  private final Label m_label;
+	private final Label m_label;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FontPreviewShell() {
-    super(SWT.NONE);
-    setLayout(new FillLayout());
-    m_label = new Label(this, SWT.CENTER);
-    setSize(450, 50);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FontPreviewShell() {
+		super(SWT.NONE);
+		setLayout(new FillLayout());
+		m_label = new Label(this, SWT.CENTER);
+		setSize(450, 50);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Widget
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void checkSubclass() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Widget
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void checkSubclass() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Font
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void updateFont(Font font) {
-    m_label.setFont(font);
-    FontData data = font.getFontData()[0];
-    m_label.setText("" + data.getName() + " " + data.getHeight());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Font
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void updateFont(Font font) {
+		m_label.setFont(font);
+		FontData data = font.getFontData()[0];
+		m_label.setText("" + data.getName() + " " + data.getHeight());
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/support/PdeProjectClasspathListener.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/support/PdeProjectClasspathListener.java
index 92d79a069..d18d7484d 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/support/PdeProjectClasspathListener.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/support/PdeProjectClasspathListener.java
@@ -23,28 +23,28 @@
  * @coverage rcp.support
  */
 public class PdeProjectClasspathListener implements IProjectClasspathListener {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final IProjectClasspathListener INSTANCE = new PdeProjectClasspathListener();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final IProjectClasspathListener INSTANCE = new PdeProjectClasspathListener();
 
-  private PdeProjectClasspathListener() {
-  }
+	private PdeProjectClasspathListener() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IProjectClasspathListener
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void addClasspathEntry(IJavaProject javaProject, String jarPathString, String srcPathString)
-      throws Exception {
-    IProject project = javaProject.getProject();
-    if (PdeUtils.hasPDENature(project)) {
-      PdeUtils utils = PdeUtils.get(project);
-      utils.addLibrary(jarPathString);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IProjectClasspathListener
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void addClasspathEntry(IJavaProject javaProject, String jarPathString, String srcPathString)
+			throws Exception {
+		IProject project = javaProject.getProject();
+		if (PdeUtils.hasPDENature(project)) {
+			PdeUtils utils = PdeUtils.get(project);
+			utils.addLibrary(jarPathString);
+		}
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/support/ToolkitSupportImpl.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/support/ToolkitSupportImpl.java
index e0db835b6..1f36ae290 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/support/ToolkitSupportImpl.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/support/ToolkitSupportImpl.java
@@ -46,195 +46,195 @@
  * @coverage rcp.support
  */
 public final class ToolkitSupportImpl implements IToolkitSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ToolkitSupportImpl(ClassLoader classLoader) {
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Screen shot
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void makeShots(Object controlObject) throws Exception {
-    OSSupport.get().makeShots(controlObject);
-  }
-
-  @Override
-  public Image getShotImage(Object controlObject) throws Exception {
-    Widget widget = (Widget) controlObject;
-    return (Image) widget.getData(OSSupport.WBP_IMAGE);
-  }
-
-  @Override
-  public MenuVisualData fetchMenuVisualData(Object menuObject) throws Exception {
-    Menu menu = (Menu) menuObject;
-    MenuVisualData menuInfo = new MenuVisualData();
-    if ((menu.getStyle() & SWT.BAR) != 0) {
-      // menu bar
-      List<org.eclipse.swt.graphics.Rectangle> itemBounds = Lists.newArrayList();
-      menuInfo.m_menuImage = OSSupport.get().getMenuBarVisualData(menu, itemBounds);
-      if (menuInfo.m_menuImage == null) {
-        menuInfo.m_menuBounds = new Rectangle(OSSupport.get().getMenuBarBounds(menu));
-      } else {
-        // OSX way
-        menuInfo.m_menuBounds = new Rectangle(menuInfo.m_menuImage.getBounds());
-      }
-      menuInfo.m_itemBounds = convertRectangles(itemBounds);
-    } else {
-      // popup/cascade menu
-      int[] bounds = new int[menu.getItemCount() * 4];
-      // prepare returned data
-      menuInfo.m_menuImage = OSSupport.get().getMenuPopupVisualData(menu, bounds);
-      menuInfo.m_menuBounds = new Rectangle(menuInfo.m_menuImage.getBounds());
-      menuInfo.m_itemBounds = Lists.newArrayListWithCapacity(menu.getItemCount());
-      // create rectangles from array
-      for (int i = 0; i < menu.getItemCount(); ++i) {
-        Rectangle itemRect =
-            new Rectangle(bounds[i * 4 + 0],
-                bounds[i * 4 + 1],
-                bounds[i * 4 + 2],
-                bounds[i * 4 + 3]);
-        menuInfo.m_itemBounds.add(itemRect);
-      }
-    }
-    // done
-    return menuInfo;
-  }
-
-  @Override
-  public int getDefaultMenuBarHeight() throws Exception {
-    return OSSupport.get().getDefaultMenuBarHeight();
-  }
-
-  @Override
-  public void beginShot(Object controlObject) {
-    OSSupport.get().beginShot(controlObject);
-  }
-
-  @Override
-  public void endShot(Object controlObject) {
-    OSSupport.get().endShot(controlObject);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Images
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Object createToolkitImage(Image image) throws Exception {
-    return image;
-  }
-
-  @Override
-  public Image createSWTImage(Object image) throws Exception {
-    // save image to byte stream
-    ImageLoader loader = new ImageLoader();
-    loader.data = new ImageData[]{((Image) image).getImageData()};
-    ByteArrayOutputStream outStream = new ByteArrayOutputStream();
-    loader.save(outStream, SWT.IMAGE_PNG);
-    // load image from byte stream
-    ByteArrayInputStream inStream = new ByteArrayInputStream(outStream.toByteArray());
-    return new Image(null, inStream);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Shell
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void showShell(Object shellObject) throws Exception {
-    final Shell shell = (Shell) shellObject;
-    final Shell mainShell = DesignerPlugin.getShell();
-    // [Linux] feature in SWT/GTK: since we cannot use Test/Preview shell as modal
-    // and if the 'main' shell of the application is disabled, switching to other
-    // application (and even to this Eclipse itself) and back will hide
-    // Test/Preview shell behind the 'main' shell.
-    // The workaround is to forcibly hide Test/Preview window.
-    ShellAdapter shellAdapter = new ShellAdapter() {
-      @Override
-      public void shellActivated(ShellEvent e) {
-        mainShell.removeShellListener(this);
-        shell.getDisplay().asyncExec(new Runnable() {
-          @Override
-          public void run() {
-            shell.setVisible(false);
-          }
-        });
-      }
-    };
-    shell.setVisible(true);
-    shell.setActive();
-    shell.setFocus();
-    try {
-      if (EnvironmentUtils.IS_LINUX) {
-        mainShell.addShellListener(shellAdapter);
-      }
-      // run events loop
-      Display display = shell.getDisplay();
-      while (!shell.isDisposed() && shell.isVisible()) {
-        if (!display.readAndDispatch()) {
-          display.sleep();
-        }
-      }
-    } finally {
-      if (EnvironmentUtils.IS_LINUX) {
-        mainShell.removeShellListener(shellAdapter);
-      }
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Font
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final FontPreviewShell m_fontPreviewShell = new FontPreviewShell();
-
-  /*public Object getFontPreviewShell() {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ToolkitSupportImpl(ClassLoader classLoader) {
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Screen shot
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void makeShots(Object controlObject) throws Exception {
+		OSSupport.get().makeShots(controlObject);
+	}
+
+	@Override
+	public Image getShotImage(Object controlObject) throws Exception {
+		Widget widget = (Widget) controlObject;
+		return (Image) widget.getData(OSSupport.WBP_IMAGE);
+	}
+
+	@Override
+	public MenuVisualData fetchMenuVisualData(Object menuObject) throws Exception {
+		Menu menu = (Menu) menuObject;
+		MenuVisualData menuInfo = new MenuVisualData();
+		if ((menu.getStyle() & SWT.BAR) != 0) {
+			// menu bar
+			List<org.eclipse.swt.graphics.Rectangle> itemBounds = Lists.newArrayList();
+			menuInfo.m_menuImage = OSSupport.get().getMenuBarVisualData(menu, itemBounds);
+			if (menuInfo.m_menuImage == null) {
+				menuInfo.m_menuBounds = new Rectangle(OSSupport.get().getMenuBarBounds(menu));
+			} else {
+				// OSX way
+				menuInfo.m_menuBounds = new Rectangle(menuInfo.m_menuImage.getBounds());
+			}
+			menuInfo.m_itemBounds = convertRectangles(itemBounds);
+		} else {
+			// popup/cascade menu
+			int[] bounds = new int[menu.getItemCount() * 4];
+			// prepare returned data
+			menuInfo.m_menuImage = OSSupport.get().getMenuPopupVisualData(menu, bounds);
+			menuInfo.m_menuBounds = new Rectangle(menuInfo.m_menuImage.getBounds());
+			menuInfo.m_itemBounds = Lists.newArrayListWithCapacity(menu.getItemCount());
+			// create rectangles from array
+			for (int i = 0; i < menu.getItemCount(); ++i) {
+				Rectangle itemRect =
+						new Rectangle(bounds[i * 4 + 0],
+								bounds[i * 4 + 1],
+								bounds[i * 4 + 2],
+								bounds[i * 4 + 3]);
+				menuInfo.m_itemBounds.add(itemRect);
+			}
+		}
+		// done
+		return menuInfo;
+	}
+
+	@Override
+	public int getDefaultMenuBarHeight() throws Exception {
+		return OSSupport.get().getDefaultMenuBarHeight();
+	}
+
+	@Override
+	public void beginShot(Object controlObject) {
+		OSSupport.get().beginShot(controlObject);
+	}
+
+	@Override
+	public void endShot(Object controlObject) {
+		OSSupport.get().endShot(controlObject);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Images
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Object createToolkitImage(Image image) throws Exception {
+		return image;
+	}
+
+	@Override
+	public Image createSWTImage(Object image) throws Exception {
+		// save image to byte stream
+		ImageLoader loader = new ImageLoader();
+		loader.data = new ImageData[]{((Image) image).getImageData()};
+		ByteArrayOutputStream outStream = new ByteArrayOutputStream();
+		loader.save(outStream, SWT.IMAGE_PNG);
+		// load image from byte stream
+		ByteArrayInputStream inStream = new ByteArrayInputStream(outStream.toByteArray());
+		return new Image(null, inStream);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Shell
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void showShell(Object shellObject) throws Exception {
+		final Shell shell = (Shell) shellObject;
+		final Shell mainShell = DesignerPlugin.getShell();
+		// [Linux] feature in SWT/GTK: since we cannot use Test/Preview shell as modal
+		// and if the 'main' shell of the application is disabled, switching to other
+		// application (and even to this Eclipse itself) and back will hide
+		// Test/Preview shell behind the 'main' shell.
+		// The workaround is to forcibly hide Test/Preview window.
+		ShellAdapter shellAdapter = new ShellAdapter() {
+			@Override
+			public void shellActivated(ShellEvent e) {
+				mainShell.removeShellListener(this);
+				shell.getDisplay().asyncExec(new Runnable() {
+					@Override
+					public void run() {
+						shell.setVisible(false);
+					}
+				});
+			}
+		};
+		shell.setVisible(true);
+		shell.setActive();
+		shell.setFocus();
+		try {
+			if (EnvironmentUtils.IS_LINUX) {
+				mainShell.addShellListener(shellAdapter);
+			}
+			// run events loop
+			Display display = shell.getDisplay();
+			while (!shell.isDisposed() && shell.isVisible()) {
+				if (!display.readAndDispatch()) {
+					display.sleep();
+				}
+			}
+		} finally {
+			if (EnvironmentUtils.IS_LINUX) {
+				mainShell.removeShellListener(shellAdapter);
+			}
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Font
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final FontPreviewShell m_fontPreviewShell = new FontPreviewShell();
+
+	/*public Object getFontPreviewShell() {
   	return m_fontPreviewShell;
   }
   public void updatePreviewFont(Object font) throws Exception {
   	m_fontPreviewShell.updateFont((Font) font);
   }*/
-  @Override
-  public String[] getFontFamilies(boolean scalable) throws Exception {
-    Set<String> families = Sets.newTreeSet();
-    //
-    FontData[] fontList = Display.getDefault().getFontList(null, scalable);
-    for (FontData fontData : fontList) {
-      families.add(fontData.getName());
-    }
-    //
-    return families.toArray(new String[families.size()]);
-  }
-
-  @Override
-  public Image getFontPreview(Object font) throws Exception {
-    m_fontPreviewShell.updateFont((Font) font);
-    return OSSupport.get().makeShot(m_fontPreviewShell);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Converts the {@link List} of {@link org.eclipse.swt.graphics.Rectangle} into {@link List} of
-   * {@link org.eclipse.draw2d.geometry.Rectangle}.
-   */
-  private List<Rectangle> convertRectangles(List<org.eclipse.swt.graphics.Rectangle> rectangles) {
-    List<Rectangle> result = Lists.newArrayListWithCapacity(rectangles.size());
-    for (org.eclipse.swt.graphics.Rectangle rectangle : rectangles) {
-      result.add(new Rectangle(rectangle));
-    }
-    return result;
-  }
+	@Override
+	public String[] getFontFamilies(boolean scalable) throws Exception {
+		Set<String> families = Sets.newTreeSet();
+		//
+		FontData[] fontList = Display.getDefault().getFontList(null, scalable);
+		for (FontData fontData : fontList) {
+			families.add(fontData.getName());
+		}
+		//
+		return families.toArray(new String[families.size()]);
+	}
+
+	@Override
+	public Image getFontPreview(Object font) throws Exception {
+		m_fontPreviewShell.updateFont((Font) font);
+		return OSSupport.get().makeShot(m_fontPreviewShell);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Converts the {@link List} of {@link org.eclipse.swt.graphics.Rectangle} into {@link List} of
+	 * {@link org.eclipse.draw2d.geometry.Rectangle}.
+	 */
+	private List<Rectangle> convertRectangles(List<org.eclipse.swt.graphics.Rectangle> rectangles) {
+		List<Rectangle> result = Lists.newArrayListWithCapacity(rectangles.size());
+		for (org.eclipse.swt.graphics.Rectangle rectangle : rectangles) {
+			result.add(new Rectangle(rectangle));
+		}
+		return result;
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/RcpWizardPage.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/RcpWizardPage.java
index fbc52172b..efd2d7cfa 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/RcpWizardPage.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/RcpWizardPage.java
@@ -25,55 +25,55 @@
  * @coverage rcp.wizards.ui
  */
 public class RcpWizardPage extends TemplateDesignWizardPage {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Substitution support
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static String doPerformSubstitutions(TemplateDesignWizardPage page,
-      String code,
-      ImportsManager imports) {
-    code = StringUtils.replace(code, "%CreateMethod%", page.getCreateMethod("createContents"));
-    code = StringUtils.replace(code, "%SWTLayout%", page.getLayoutCode("", imports));
-    code = StringUtils.replace(code, "%shell.SWTLayout%", page.getLayoutCode("shell.", imports));
-    code =
-        StringUtils.replace(
-            code,
-            "%container.SWTLayout%",
-            page.getLayoutCode("container.", imports));
-    code =
-        StringUtils.replace(
-            code,
-            "%field-prefix-shell.SWTLayout%",
-            page.getLayoutCode("%field-prefix%shell.", imports));
-    code =
-        StringUtils.replace(
-            code,
-            "%field-prefix-container.SWTLayout%",
-            page.getLayoutCode("%field-prefix%container.", imports));
-    code = performFieldPrefixesSubstitutions(code);
-    return code;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Substitution support
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static String doPerformSubstitutions(TemplateDesignWizardPage page,
+			String code,
+			ImportsManager imports) {
+		code = StringUtils.replace(code, "%CreateMethod%", page.getCreateMethod("createContents"));
+		code = StringUtils.replace(code, "%SWTLayout%", page.getLayoutCode("", imports));
+		code = StringUtils.replace(code, "%shell.SWTLayout%", page.getLayoutCode("shell.", imports));
+		code =
+				StringUtils.replace(
+						code,
+						"%container.SWTLayout%",
+						page.getLayoutCode("container.", imports));
+		code =
+				StringUtils.replace(
+						code,
+						"%field-prefix-shell.SWTLayout%",
+						page.getLayoutCode("%field-prefix%shell.", imports));
+		code =
+				StringUtils.replace(
+						code,
+						"%field-prefix-container.SWTLayout%",
+						page.getLayoutCode("%field-prefix%container.", imports));
+		code = performFieldPrefixesSubstitutions(code);
+		return code;
+	}
 
-  @Override
-  protected String performSubstitutions(String code, ImportsManager imports) {
-    code = super.performSubstitutions(code, imports);
-    code = doPerformSubstitutions(this, code, imports);
-    return code;
-  }
+	@Override
+	protected String performSubstitutions(String code, ImportsManager imports) {
+		code = super.performSubstitutions(code, imports);
+		code = doPerformSubstitutions(this, code, imports);
+		return code;
+	}
 
-  @Override
-  protected ToolkitDescriptionJava getToolkitDescription() {
-    return ToolkitProvider.DESCRIPTION;
-  }
+	@Override
+	protected ToolkitDescriptionJava getToolkitDescription() {
+		return ToolkitProvider.DESCRIPTION;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createDesignSuperClassControls(Composite composite, int nColumns) {
-    createSuperClassControls(composite, nColumns);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createDesignSuperClassControls(Composite composite, int nColumns) {
+		createSuperClassControls(composite, nColumns);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/WizardsMessages.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/WizardsMessages.java
index 526fab112..9cb200eb8 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/WizardsMessages.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/WizardsMessages.java
@@ -3,120 +3,120 @@
 import org.eclipse.osgi.util.NLS;
 
 public class WizardsMessages extends NLS {
-  private static final String BUNDLE_NAME = "org.eclipse.wb.internal.rcp.wizards.WizardsMessages"; //$NON-NLS-1$
-  public static String AbstractViewPartWizardPage_errorPluginXml;
-  public static String AbstractViewPartWizardPage_newViewPart;
-  public static String AbstractViewPartWizardPage_viewName;
-  public static String ActionBarAdvisorWizard_title;
-  public static String ActionBarAdvisorWizardPage_description;
-  public static String ActionBarAdvisorWizardPage_title;
-  public static String CompositeWizard_title;
-  public static String CompositeWizard_title2;
-  public static String CompositeWizardPage_description;
-  public static String CompositeWizardPage_description2;
-  public static String CompositeWizardPage_superClass;
-  public static String CompositeWizardPage_title;
-  public static String CompositeWizardPage_title2;
-  public static String DetailsPageWizard_title;
-  public static String DetailsPageWizardPage_description;
-  public static String DetailsPageWizardPage_title;
-  public static String DialogWizard_title;
-  public static String DialogWizard_title2;
-  public static String DialogWizardPage_description;
-  public static String DialogWizardPage_description2;
-  public static String DialogWizardPage_title;
-  public static String DialogWizardPage_title2;
-  public static String EditorPartWizard_title;
-  public static String EditorPartWizardPage_description;
-  public static String EditorPartWizardPage_editorName;
-  public static String EditorPartWizardPage_errorPluginXml;
-  public static String EditorPartWizardPage_newEditorPart;
-  public static String EditorPartWizardPage_title;
-  public static String FormPageWizard_title;
-  public static String FormPageWizardPage_description;
-  public static String FormPageWizardPage_title;
-  public static String JFaceApplicationWizard_title;
-  public static String JFaceApplicationWizardPage_description;
-  public static String JFaceApplicationWizardPage_title;
-  public static String JFaceApplicationWizardPage_typeSelect;
-  public static String JFaceApplicationWizardPage_typeWithCoolBar;
-  public static String JFaceApplicationWizardPage_typeWithToolBar;
-  public static String MasterDetailsBlockWizard_title;
-  public static String MasterDetailsBlockWizardPage_description;
-  public static String MasterDetailsBlockWizardPage_title;
-  public static String MultiPageEditorPartWizard_title;
-  public static String MultiPageEditorPartWizardPage_addButton;
-  public static String MultiPageEditorPartWizardPage_description;
-  public static String MultiPageEditorPartWizardPage_downButton;
-  public static String MultiPageEditorPartWizardPage_editorName;
-  public static String MultiPageEditorPartWizardPage_errorPluginXml;
-  public static String MultiPageEditorPartWizardPage_newEditorPart;
-  public static String MultiPageEditorPartWizardPage_pagesList;
-  public static String MultiPageEditorPartWizardPage_removeButton;
-  public static String MultiPageEditorPartWizardPage_title;
-  public static String MultiPageEditorPartWizardPage_upButton;
-  public static String NewProjectWizard_title;
-  public static String PageBookWizard_title;
-  public static String PageBookWizardPage_basePageSelection;
-  public static String PageBookWizardPage_description;
-  public static String PageBookWizardPage_title;
-  public static String PerspectiveWizard_title;
-  public static String PerspectiveWizardPage_description;
-  public static String PerspectiveWizardPage_errorPluginXml;
-  public static String PerspectiveWizardPage_nameDefault;
-  public static String PerspectiveWizardPage_nameLabel;
-  public static String PerspectiveWizardPage_title;
-  public static String PreferencePageWizard_title;
-  public static String PreferencePageWizardPage_description;
-  public static String PreferencePageWizardPage_title;
-  public static String PreferencePageWizardPage_typeFieldEditorDescription;
-  public static String PreferencePageWizardPage_typeFieldEditorLabel;
-  public static String PreferencePageWizardPage_typeFieldLayoutDescription;
-  public static String PreferencePageWizardPage_typeFieldLayoutLabel;
-  public static String PreferencePageWizardPage_typeSelection;
-  public static String PreferencePageWizardPage_typeStandardDescription;
-  public static String PreferencePageWizardPage_typeStandardLabel;
-  public static String PropertyPageWizard_title;
-  public static String PropertyPageWizardPage_description;
-  public static String PropertyPageWizardPage_title;
-  public static String SectionPartWizard_title;
-  public static String SectionPartWizardPage_description;
-  public static String SectionPartWizardPage_title;
-  public static String ShellWizard_title;
-  public static String ShellWizardPage_description;
-  public static String ShellWizardPage_title;
-  public static String SwtApplicationWizard_title;
-  public static String SwtApplicationWizardPage_createContentsIn;
-  public static String SwtApplicationWizardPage_description;
-  public static String SwtApplicationWizardPage_title;
-  public static String TitleAreaDialogWizard_title;
-  public static String TitleAreaDialogWizardPage_description;
-  public static String TitleAreaDialogWizardPage_title;
-  public static String ViewPartWizard_title;
-  public static String ViewPartWizard_title2;
-  public static String ViewPartWizardPage_description;
-  public static String ViewPartWizardPage_description2;
-  public static String ViewPartWizardPage_title;
-  public static String ViewPartWizardPage_title2;
-  public static String WizardPageWizard_title;
-  public static String WizardPageWizardPage_description;
-  public static String WizardPageWizardPage_title;
-  public static String WizardWizard_title;
-  public static String WizardWizardPage_addButton;
-  public static String WizardWizardPage_description;
-  public static String WizardWizardPage_downButton;
-  public static String WizardWizardPage_pagesList;
-  public static String WizardWizardPage_removeButton;
-  public static String WizardWizardPage_title;
-  public static String WizardWizardPage_upButton;
-  public static String E4ViewPartWizard_title;
-  public static String E4ViewPartWizardPage_description;
-  public static String E4ViewPartWizardPage_title;
-  static {
-    // initialize resource bundle
-    NLS.initializeMessages(BUNDLE_NAME, WizardsMessages.class);
-  }
+	private static final String BUNDLE_NAME = "org.eclipse.wb.internal.rcp.wizards.WizardsMessages"; //$NON-NLS-1$
+	public static String AbstractViewPartWizardPage_errorPluginXml;
+	public static String AbstractViewPartWizardPage_newViewPart;
+	public static String AbstractViewPartWizardPage_viewName;
+	public static String ActionBarAdvisorWizard_title;
+	public static String ActionBarAdvisorWizardPage_description;
+	public static String ActionBarAdvisorWizardPage_title;
+	public static String CompositeWizard_title;
+	public static String CompositeWizard_title2;
+	public static String CompositeWizardPage_description;
+	public static String CompositeWizardPage_description2;
+	public static String CompositeWizardPage_superClass;
+	public static String CompositeWizardPage_title;
+	public static String CompositeWizardPage_title2;
+	public static String DetailsPageWizard_title;
+	public static String DetailsPageWizardPage_description;
+	public static String DetailsPageWizardPage_title;
+	public static String DialogWizard_title;
+	public static String DialogWizard_title2;
+	public static String DialogWizardPage_description;
+	public static String DialogWizardPage_description2;
+	public static String DialogWizardPage_title;
+	public static String DialogWizardPage_title2;
+	public static String EditorPartWizard_title;
+	public static String EditorPartWizardPage_description;
+	public static String EditorPartWizardPage_editorName;
+	public static String EditorPartWizardPage_errorPluginXml;
+	public static String EditorPartWizardPage_newEditorPart;
+	public static String EditorPartWizardPage_title;
+	public static String FormPageWizard_title;
+	public static String FormPageWizardPage_description;
+	public static String FormPageWizardPage_title;
+	public static String JFaceApplicationWizard_title;
+	public static String JFaceApplicationWizardPage_description;
+	public static String JFaceApplicationWizardPage_title;
+	public static String JFaceApplicationWizardPage_typeSelect;
+	public static String JFaceApplicationWizardPage_typeWithCoolBar;
+	public static String JFaceApplicationWizardPage_typeWithToolBar;
+	public static String MasterDetailsBlockWizard_title;
+	public static String MasterDetailsBlockWizardPage_description;
+	public static String MasterDetailsBlockWizardPage_title;
+	public static String MultiPageEditorPartWizard_title;
+	public static String MultiPageEditorPartWizardPage_addButton;
+	public static String MultiPageEditorPartWizardPage_description;
+	public static String MultiPageEditorPartWizardPage_downButton;
+	public static String MultiPageEditorPartWizardPage_editorName;
+	public static String MultiPageEditorPartWizardPage_errorPluginXml;
+	public static String MultiPageEditorPartWizardPage_newEditorPart;
+	public static String MultiPageEditorPartWizardPage_pagesList;
+	public static String MultiPageEditorPartWizardPage_removeButton;
+	public static String MultiPageEditorPartWizardPage_title;
+	public static String MultiPageEditorPartWizardPage_upButton;
+	public static String NewProjectWizard_title;
+	public static String PageBookWizard_title;
+	public static String PageBookWizardPage_basePageSelection;
+	public static String PageBookWizardPage_description;
+	public static String PageBookWizardPage_title;
+	public static String PerspectiveWizard_title;
+	public static String PerspectiveWizardPage_description;
+	public static String PerspectiveWizardPage_errorPluginXml;
+	public static String PerspectiveWizardPage_nameDefault;
+	public static String PerspectiveWizardPage_nameLabel;
+	public static String PerspectiveWizardPage_title;
+	public static String PreferencePageWizard_title;
+	public static String PreferencePageWizardPage_description;
+	public static String PreferencePageWizardPage_title;
+	public static String PreferencePageWizardPage_typeFieldEditorDescription;
+	public static String PreferencePageWizardPage_typeFieldEditorLabel;
+	public static String PreferencePageWizardPage_typeFieldLayoutDescription;
+	public static String PreferencePageWizardPage_typeFieldLayoutLabel;
+	public static String PreferencePageWizardPage_typeSelection;
+	public static String PreferencePageWizardPage_typeStandardDescription;
+	public static String PreferencePageWizardPage_typeStandardLabel;
+	public static String PropertyPageWizard_title;
+	public static String PropertyPageWizardPage_description;
+	public static String PropertyPageWizardPage_title;
+	public static String SectionPartWizard_title;
+	public static String SectionPartWizardPage_description;
+	public static String SectionPartWizardPage_title;
+	public static String ShellWizard_title;
+	public static String ShellWizardPage_description;
+	public static String ShellWizardPage_title;
+	public static String SwtApplicationWizard_title;
+	public static String SwtApplicationWizardPage_createContentsIn;
+	public static String SwtApplicationWizardPage_description;
+	public static String SwtApplicationWizardPage_title;
+	public static String TitleAreaDialogWizard_title;
+	public static String TitleAreaDialogWizardPage_description;
+	public static String TitleAreaDialogWizardPage_title;
+	public static String ViewPartWizard_title;
+	public static String ViewPartWizard_title2;
+	public static String ViewPartWizardPage_description;
+	public static String ViewPartWizardPage_description2;
+	public static String ViewPartWizardPage_title;
+	public static String ViewPartWizardPage_title2;
+	public static String WizardPageWizard_title;
+	public static String WizardPageWizardPage_description;
+	public static String WizardPageWizardPage_title;
+	public static String WizardWizard_title;
+	public static String WizardWizardPage_addButton;
+	public static String WizardWizardPage_description;
+	public static String WizardWizardPage_downButton;
+	public static String WizardWizardPage_pagesList;
+	public static String WizardWizardPage_removeButton;
+	public static String WizardWizardPage_title;
+	public static String WizardWizardPage_upButton;
+	public static String E4ViewPartWizard_title;
+	public static String E4ViewPartWizardPage_description;
+	public static String E4ViewPartWizardPage_title;
+	static {
+		// initialize resource bundle
+		NLS.initializeMessages(BUNDLE_NAME, WizardsMessages.class);
+	}
 
-  private WizardsMessages() {
-  }
+	private WizardsMessages() {
+	}
 }
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/e4/view/ViewPartWizard.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/e4/view/ViewPartWizard.java
index a23cf17c0..271923803 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/e4/view/ViewPartWizard.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/e4/view/ViewPartWizard.java
@@ -24,22 +24,22 @@
  * @coverage rcp.wizards.ui
  */
 public final class ViewPartWizard extends RcpWizard {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ViewPartWizard() {
-    setWindowTitle(WizardsMessages.E4ViewPartWizard_title);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ViewPartWizard() {
+		setWindowTitle(WizardsMessages.E4ViewPartWizard_title);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Wizard
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected AbstractDesignWizardPage createMainPage() {
-    return new ViewPartWizardPage();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Wizard
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected AbstractDesignWizardPage createMainPage() {
+		return new ViewPartWizardPage();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/e4/view/ViewPartWizardPage.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/e4/view/ViewPartWizardPage.java
index 9238a94fb..908be4a91 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/e4/view/ViewPartWizardPage.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/e4/view/ViewPartWizardPage.java
@@ -29,26 +29,26 @@
  * @coverage rcp.wizards.ui
  */
 public final class ViewPartWizardPage extends RcpWizardPage {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ViewPartWizardPage() {
-    setTitle(WizardsMessages.E4ViewPartWizardPage_title);
-    setImageDescriptor(Activator.getImageDescriptor("wizard/banner_e4.png"));
-    setDescription(WizardsMessages.E4ViewPartWizardPage_description);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ViewPartWizardPage() {
+		setTitle(WizardsMessages.E4ViewPartWizardPage_title);
+		setImageDescriptor(Activator.getImageDescriptor("wizard/banner_e4.png"));
+		setDescription(WizardsMessages.E4ViewPartWizardPage_description);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // WizardPage
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createTypeMembers(IType newType, ImportsManager imports, IProgressMonitor monitor)
-      throws CoreException {
-    InputStream file = Activator.getFile("templates/e4/ViewPart.jvt");
-    fillTypeFromTemplate(newType, imports, monitor, file);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// WizardPage
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createTypeMembers(IType newType, ImportsManager imports, IProgressMonitor monitor)
+			throws CoreException {
+		InputStream file = Activator.getFile("templates/e4/ViewPart.jvt");
+		fillTypeFromTemplate(newType, imports, monitor, file);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/forms/composite/CompositeWizard.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/forms/composite/CompositeWizard.java
index 30fc1dda0..7a109e267 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/forms/composite/CompositeWizard.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/forms/composite/CompositeWizard.java
@@ -24,22 +24,22 @@
  * @coverage rcp.wizards.ui
  */
 public final class CompositeWizard extends RcpWizard {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CompositeWizard() {
-    setWindowTitle(WizardsMessages.CompositeWizard_title2);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CompositeWizard() {
+		setWindowTitle(WizardsMessages.CompositeWizard_title2);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Wizard
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected AbstractDesignWizardPage createMainPage() {
-    return new CompositeWizardPage();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Wizard
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected AbstractDesignWizardPage createMainPage() {
+		return new CompositeWizardPage();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/forms/composite/CompositeWizardPage.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/forms/composite/CompositeWizardPage.java
index 8c6e73207..4de9bd6da 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/forms/composite/CompositeWizardPage.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/forms/composite/CompositeWizardPage.java
@@ -30,37 +30,37 @@
  * @coverage rcp.wizards.ui
  */
 public final class CompositeWizardPage extends RcpWizardPage {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CompositeWizardPage() {
-    setTitle(WizardsMessages.CompositeWizardPage_title2);
-    setImageDescriptor(Activator.getImageDescriptor("wizard/Forms/Composite/banner.gif"));
-    setDescription(WizardsMessages.CompositeWizardPage_description2);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CompositeWizardPage() {
+		setTitle(WizardsMessages.CompositeWizardPage_title2);
+		setImageDescriptor(Activator.getImageDescriptor("wizard/Forms/Composite/banner.gif"));
+		setDescription(WizardsMessages.CompositeWizardPage_description2);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // WizardPage
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createTypeMembers(IType newType, ImportsManager imports, IProgressMonitor monitor)
-      throws CoreException {
-    InputStream file = Activator.getFile("templates/forms/Composite.jvt");
-    fillTypeFromTemplate(newType, imports, monitor, file);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// WizardPage
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createTypeMembers(IType newType, ImportsManager imports, IProgressMonitor monitor)
+			throws CoreException {
+		InputStream file = Activator.getFile("templates/forms/Composite.jvt");
+		fillTypeFromTemplate(newType, imports, monitor, file);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void initTypePage(IJavaElement elem) {
-    super.initTypePage(elem);
-    setSuperClass("org.eclipse.swt.widgets.Composite", true);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void initTypePage(IJavaElement elem) {
+		super.initTypePage(elem);
+		setSuperClass("org.eclipse.swt.widgets.Composite", true);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/forms/details/DetailsPageWizard.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/forms/details/DetailsPageWizard.java
index 9008ce9ab..38c6a09f9 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/forms/details/DetailsPageWizard.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/forms/details/DetailsPageWizard.java
@@ -24,22 +24,22 @@
  * @coverage rcp.wizards.ui
  */
 public final class DetailsPageWizard extends RcpWizard {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DetailsPageWizard() {
-    setWindowTitle(WizardsMessages.DetailsPageWizard_title);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DetailsPageWizard() {
+		setWindowTitle(WizardsMessages.DetailsPageWizard_title);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Wizard
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected AbstractDesignWizardPage createMainPage() {
-    return new DetailsPageWizardPage();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Wizard
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected AbstractDesignWizardPage createMainPage() {
+		return new DetailsPageWizardPage();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/forms/details/DetailsPageWizardPage.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/forms/details/DetailsPageWizardPage.java
index 855d0f2c1..f2dd66c6f 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/forms/details/DetailsPageWizardPage.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/forms/details/DetailsPageWizardPage.java
@@ -33,43 +33,43 @@
  * @coverage rcp.wizards.ui
  */
 public final class DetailsPageWizardPage extends RcpWizardPage {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DetailsPageWizardPage() {
-    setTitle(WizardsMessages.DetailsPageWizardPage_title);
-    setImageDescriptor(Activator.getImageDescriptor("wizard/Forms/IDetailsPage/banner.gif"));
-    setDescription(WizardsMessages.DetailsPageWizardPage_description);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DetailsPageWizardPage() {
+		setTitle(WizardsMessages.DetailsPageWizardPage_title);
+		setImageDescriptor(Activator.getImageDescriptor("wizard/Forms/IDetailsPage/banner.gif"));
+		setDescription(WizardsMessages.DetailsPageWizardPage_description);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // WizardPage
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createTypeMembers(IType newType, ImportsManager imports, IProgressMonitor monitor)
-      throws CoreException {
-    InputStream file = Activator.getFile("templates/forms/IDetailsPage.jvt");
-    fillTypeFromTemplate(newType, imports, monitor, file);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// WizardPage
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createTypeMembers(IType newType, ImportsManager imports, IProgressMonitor monitor)
+			throws CoreException {
+		InputStream file = Activator.getFile("templates/forms/IDetailsPage.jvt");
+		fillTypeFromTemplate(newType, imports, monitor, file);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createDesignSuperClassControls(Composite composite, int nColumns) {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createDesignSuperClassControls(Composite composite, int nColumns) {
+	}
 
-  @Override
-  protected void initTypePage(IJavaElement elem) {
-    super.initTypePage(elem);
-    List<String> interfacesNames = new ArrayList<String>();
-    interfacesNames.add("org.eclipse.ui.forms.IDetailsPage");
-    setSuperInterfaces(interfacesNames, false);
-  }
+	@Override
+	protected void initTypePage(IJavaElement elem) {
+		super.initTypePage(elem);
+		List<String> interfacesNames = new ArrayList<String>();
+		interfacesNames.add("org.eclipse.ui.forms.IDetailsPage");
+		setSuperInterfaces(interfacesNames, false);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/forms/master/MasterDetailsBlockWizard.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/forms/master/MasterDetailsBlockWizard.java
index a6d4d0f46..4f4af5c4b 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/forms/master/MasterDetailsBlockWizard.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/forms/master/MasterDetailsBlockWizard.java
@@ -24,22 +24,22 @@
  * @coverage rcp.wizards.ui
  */
 public final class MasterDetailsBlockWizard extends RcpWizard {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public MasterDetailsBlockWizard() {
-    setWindowTitle(WizardsMessages.MasterDetailsBlockWizard_title);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public MasterDetailsBlockWizard() {
+		setWindowTitle(WizardsMessages.MasterDetailsBlockWizard_title);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Wizard
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected AbstractDesignWizardPage createMainPage() {
-    return new MasterDetailsBlockWizardPage();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Wizard
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected AbstractDesignWizardPage createMainPage() {
+		return new MasterDetailsBlockWizardPage();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/forms/master/MasterDetailsBlockWizardPage.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/forms/master/MasterDetailsBlockWizardPage.java
index 03a6c21c5..0df10d2b4 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/forms/master/MasterDetailsBlockWizardPage.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/forms/master/MasterDetailsBlockWizardPage.java
@@ -30,37 +30,37 @@
  * @coverage rcp.wizards.ui
  */
 public final class MasterDetailsBlockWizardPage extends RcpWizardPage {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public MasterDetailsBlockWizardPage() {
-    setTitle(WizardsMessages.MasterDetailsBlockWizardPage_title);
-    setImageDescriptor(Activator.getImageDescriptor("wizard/Forms/MasterDetailsBlock/banner.gif"));
-    setDescription(WizardsMessages.MasterDetailsBlockWizardPage_description);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public MasterDetailsBlockWizardPage() {
+		setTitle(WizardsMessages.MasterDetailsBlockWizardPage_title);
+		setImageDescriptor(Activator.getImageDescriptor("wizard/Forms/MasterDetailsBlock/banner.gif"));
+		setDescription(WizardsMessages.MasterDetailsBlockWizardPage_description);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // WizardPage
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createTypeMembers(IType newType, ImportsManager imports, IProgressMonitor monitor)
-      throws CoreException {
-    InputStream file = Activator.getFile("templates/forms/MasterDetailsBlock.jvt");
-    fillTypeFromTemplate(newType, imports, monitor, file);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// WizardPage
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createTypeMembers(IType newType, ImportsManager imports, IProgressMonitor monitor)
+			throws CoreException {
+		InputStream file = Activator.getFile("templates/forms/MasterDetailsBlock.jvt");
+		fillTypeFromTemplate(newType, imports, monitor, file);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void initTypePage(IJavaElement elem) {
-    super.initTypePage(elem);
-    setSuperClass("org.eclipse.ui.forms.MasterDetailsBlock", true);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void initTypePage(IJavaElement elem) {
+		super.initTypePage(elem);
+		setSuperClass("org.eclipse.ui.forms.MasterDetailsBlock", true);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/forms/page/FormPageWizard.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/forms/page/FormPageWizard.java
index d0ff6d904..09badab91 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/forms/page/FormPageWizard.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/forms/page/FormPageWizard.java
@@ -24,22 +24,22 @@
  * @coverage rcp.wizards.ui
  */
 public final class FormPageWizard extends RcpWizard {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FormPageWizard() {
-    setWindowTitle(WizardsMessages.FormPageWizard_title);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FormPageWizard() {
+		setWindowTitle(WizardsMessages.FormPageWizard_title);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Wizard
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected AbstractDesignWizardPage createMainPage() {
-    return new FormPageWizardPage();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Wizard
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected AbstractDesignWizardPage createMainPage() {
+		return new FormPageWizardPage();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/forms/page/FormPageWizardPage.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/forms/page/FormPageWizardPage.java
index c30472906..d57af9bab 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/forms/page/FormPageWizardPage.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/forms/page/FormPageWizardPage.java
@@ -30,37 +30,37 @@
  * @coverage rcp.wizards.ui
  */
 public final class FormPageWizardPage extends RcpWizardPage {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FormPageWizardPage() {
-    setTitle(WizardsMessages.FormPageWizardPage_title);
-    setImageDescriptor(Activator.getImageDescriptor("wizard/Forms/FormPage/banner.gif"));
-    setDescription(WizardsMessages.FormPageWizardPage_description);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FormPageWizardPage() {
+		setTitle(WizardsMessages.FormPageWizardPage_title);
+		setImageDescriptor(Activator.getImageDescriptor("wizard/Forms/FormPage/banner.gif"));
+		setDescription(WizardsMessages.FormPageWizardPage_description);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // WizardPage
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createTypeMembers(IType newType, ImportsManager imports, IProgressMonitor monitor)
-      throws CoreException {
-    InputStream file = Activator.getFile("templates/forms/FormPage.jvt");
-    fillTypeFromTemplate(newType, imports, monitor, file);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// WizardPage
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createTypeMembers(IType newType, ImportsManager imports, IProgressMonitor monitor)
+			throws CoreException {
+		InputStream file = Activator.getFile("templates/forms/FormPage.jvt");
+		fillTypeFromTemplate(newType, imports, monitor, file);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void initTypePage(IJavaElement elem) {
-    super.initTypePage(elem);
-    setSuperClass("org.eclipse.ui.forms.editor.FormPage", true);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void initTypePage(IJavaElement elem) {
+		super.initTypePage(elem);
+		setSuperClass("org.eclipse.ui.forms.editor.FormPage", true);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/forms/section/SectionPartWizard.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/forms/section/SectionPartWizard.java
index b47d4fcb1..96481c573 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/forms/section/SectionPartWizard.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/forms/section/SectionPartWizard.java
@@ -24,22 +24,22 @@
  * @coverage rcp.wizards.ui
  */
 public final class SectionPartWizard extends RcpWizard {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SectionPartWizard() {
-    setWindowTitle(WizardsMessages.SectionPartWizard_title);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SectionPartWizard() {
+		setWindowTitle(WizardsMessages.SectionPartWizard_title);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Wizard
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected AbstractDesignWizardPage createMainPage() {
-    return new SectionPartWizardPage();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Wizard
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected AbstractDesignWizardPage createMainPage() {
+		return new SectionPartWizardPage();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/forms/section/SectionPartWizardPage.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/forms/section/SectionPartWizardPage.java
index 8695939c4..a12c3a03f 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/forms/section/SectionPartWizardPage.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/forms/section/SectionPartWizardPage.java
@@ -30,37 +30,37 @@
  * @coverage rcp.wizards.ui
  */
 public final class SectionPartWizardPage extends RcpWizardPage {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SectionPartWizardPage() {
-    setTitle(WizardsMessages.SectionPartWizardPage_title);
-    setImageDescriptor(Activator.getImageDescriptor("wizard/Forms/SectionPart/banner.gif"));
-    setDescription(WizardsMessages.SectionPartWizardPage_description);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SectionPartWizardPage() {
+		setTitle(WizardsMessages.SectionPartWizardPage_title);
+		setImageDescriptor(Activator.getImageDescriptor("wizard/Forms/SectionPart/banner.gif"));
+		setDescription(WizardsMessages.SectionPartWizardPage_description);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // WizardPage
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createTypeMembers(IType newType, ImportsManager imports, IProgressMonitor monitor)
-      throws CoreException {
-    InputStream file = Activator.getFile("templates/forms/SectionPart.jvt");
-    fillTypeFromTemplate(newType, imports, monitor, file);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// WizardPage
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createTypeMembers(IType newType, ImportsManager imports, IProgressMonitor monitor)
+			throws CoreException {
+		InputStream file = Activator.getFile("templates/forms/SectionPart.jvt");
+		fillTypeFromTemplate(newType, imports, monitor, file);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void initTypePage(IJavaElement elem) {
-    super.initTypePage(elem);
-    setSuperClass("org.eclipse.ui.forms.SectionPart", true);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void initTypePage(IJavaElement elem) {
+		super.initTypePage(elem);
+		setSuperClass("org.eclipse.ui.forms.SectionPart", true);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/forms/view/ViewPartWizard.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/forms/view/ViewPartWizard.java
index 795c8800c..d40c56136 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/forms/view/ViewPartWizard.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/forms/view/ViewPartWizard.java
@@ -24,22 +24,22 @@
  * @coverage rcp.wizards.ui
  */
 public final class ViewPartWizard extends RcpWizard {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ViewPartWizard() {
-    setWindowTitle(WizardsMessages.ViewPartWizard_title2);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ViewPartWizard() {
+		setWindowTitle(WizardsMessages.ViewPartWizard_title2);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Wizard
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected AbstractDesignWizardPage createMainPage() {
-    return new ViewPartWizardPage();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Wizard
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected AbstractDesignWizardPage createMainPage() {
+		return new ViewPartWizardPage();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/forms/view/ViewPartWizardPage.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/forms/view/ViewPartWizardPage.java
index 2afdd3a7c..397cc89d5 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/forms/view/ViewPartWizardPage.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/forms/view/ViewPartWizardPage.java
@@ -24,24 +24,24 @@
  * @coverage rcp.wizards.ui
  */
 public final class ViewPartWizardPage extends AbstractViewPartWizardPage {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ViewPartWizardPage() {
-    setTitle(WizardsMessages.ViewPartWizardPage_title2);
-    setImageDescriptor(Activator.getImageDescriptor("wizard/Forms/ViewPart/banner.gif"));
-    setDescription(WizardsMessages.ViewPartWizardPage_description2);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ViewPartWizardPage() {
+		setTitle(WizardsMessages.ViewPartWizardPage_title2);
+		setImageDescriptor(Activator.getImageDescriptor("wizard/Forms/ViewPart/banner.gif"));
+		setDescription(WizardsMessages.ViewPartWizardPage_description2);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // WizardPage
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getCreateTemplate() {
-    return "templates/forms/ViewPart.jvt";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// WizardPage
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getCreateTemplate() {
+		return "templates/forms/ViewPart.jvt";
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/jface/application/JFaceApplicationWizard.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/jface/application/JFaceApplicationWizard.java
index 53be9bf43..cac89f4b6 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/jface/application/JFaceApplicationWizard.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/jface/application/JFaceApplicationWizard.java
@@ -23,22 +23,22 @@
  * @coverage rcp.wizards.ui
  */
 public final class JFaceApplicationWizard extends RcpWizard {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public JFaceApplicationWizard() {
-    setWindowTitle(WizardsMessages.JFaceApplicationWizard_title);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public JFaceApplicationWizard() {
+		setWindowTitle(WizardsMessages.JFaceApplicationWizard_title);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Wizard
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected AbstractDesignWizardPage createMainPage() {
-    return new JFaceApplicationWizardPage();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Wizard
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected AbstractDesignWizardPage createMainPage() {
+		return new JFaceApplicationWizardPage();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/jface/application/JFaceApplicationWizardPage.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/jface/application/JFaceApplicationWizardPage.java
index e852b78e6..6bdcadc83 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/jface/application/JFaceApplicationWizardPage.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/jface/application/JFaceApplicationWizardPage.java
@@ -35,74 +35,74 @@
  * @coverage rcp.wizards.ui
  */
 public final class JFaceApplicationWizardPage extends RcpWizardPage {
-  private Button m_toolBarButton;
+	private Button m_toolBarButton;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public JFaceApplicationWizardPage() {
-    setTitle(WizardsMessages.JFaceApplicationWizardPage_title);
-    setImageDescriptor(Activator.getImageDescriptor("wizard/JFace/ApplicationWindow/banner.gif"));
-    setDescription(WizardsMessages.JFaceApplicationWizardPage_description);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public JFaceApplicationWizardPage() {
+		setTitle(WizardsMessages.JFaceApplicationWizardPage_title);
+		setImageDescriptor(Activator.getImageDescriptor("wizard/JFace/ApplicationWindow/banner.gif"));
+		setDescription(WizardsMessages.JFaceApplicationWizardPage_description);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // WizardPage
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createTypeMembers(IType newType, ImportsManager imports, IProgressMonitor monitor)
-      throws CoreException {
-    InputStream file = Activator.getFile("templates/jface/" + getTemplateName());
-    fillTypeFromTemplate(newType, imports, monitor, file);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// WizardPage
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createTypeMembers(IType newType, ImportsManager imports, IProgressMonitor monitor)
+			throws CoreException {
+		InputStream file = Activator.getFile("templates/jface/" + getTemplateName());
+		fillTypeFromTemplate(newType, imports, monitor, file);
+	}
 
-  private String getTemplateName() {
-    final boolean selection[] = new boolean[1];
-    getShell().getDisplay().syncExec(new Runnable() {
-      @Override
-      public void run() {
-        selection[0] = m_toolBarButton.getSelection();
-      }
-    });
-    if (selection[0]) {
-      return "ApplicationWindow_ToolBar.jvt";
-    }
-    return "ApplicationWindow_CoolBar.jvt";
-  }
+	private String getTemplateName() {
+		final boolean selection[] = new boolean[1];
+		getShell().getDisplay().syncExec(new Runnable() {
+			@Override
+			public void run() {
+				selection[0] = m_toolBarButton.getSelection();
+			}
+		});
+		if (selection[0]) {
+			return "ApplicationWindow_ToolBar.jvt";
+		}
+		return "ApplicationWindow_CoolBar.jvt";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void initTypePage(IJavaElement elem) {
-    super.initTypePage(elem);
-    setSuperClass("org.eclipse.jface.window.ApplicationWindow", true);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void initTypePage(IJavaElement elem) {
+		super.initTypePage(elem);
+		setSuperClass("org.eclipse.jface.window.ApplicationWindow", true);
+	}
 
-  @Override
-  protected void createLocalControls(Composite parent, int columns) {
-    Composite superClassComposite = new Composite(parent, SWT.NONE);
-    GridLayoutFactory.create(superClassComposite).margins(0);
-    GridDataFactory.create(superClassComposite).fillH().spanH(columns);
-    //
-    Label label = new Label(superClassComposite, SWT.NONE);
-    label.setText(WizardsMessages.JFaceApplicationWizardPage_typeSelect);
-    //
-    m_toolBarButton = new Button(superClassComposite, SWT.RADIO);
-    m_toolBarButton.setText(WizardsMessages.JFaceApplicationWizardPage_typeWithToolBar);
-    m_toolBarButton.setSelection(true);
-    GridDataFactory.create(m_toolBarButton).indentH(24);
-    //
-    Button coolBarButton = new Button(superClassComposite, SWT.RADIO);
-    coolBarButton.setText(WizardsMessages.JFaceApplicationWizardPage_typeWithCoolBar);
-    GridDataFactory.create(coolBarButton).indentH(24);
-    //
-    createSeparator(parent, columns);
-  }
+	@Override
+	protected void createLocalControls(Composite parent, int columns) {
+		Composite superClassComposite = new Composite(parent, SWT.NONE);
+		GridLayoutFactory.create(superClassComposite).margins(0);
+		GridDataFactory.create(superClassComposite).fillH().spanH(columns);
+		//
+		Label label = new Label(superClassComposite, SWT.NONE);
+		label.setText(WizardsMessages.JFaceApplicationWizardPage_typeSelect);
+		//
+		m_toolBarButton = new Button(superClassComposite, SWT.RADIO);
+		m_toolBarButton.setText(WizardsMessages.JFaceApplicationWizardPage_typeWithToolBar);
+		m_toolBarButton.setSelection(true);
+		GridDataFactory.create(m_toolBarButton).indentH(24);
+		//
+		Button coolBarButton = new Button(superClassComposite, SWT.RADIO);
+		coolBarButton.setText(WizardsMessages.JFaceApplicationWizardPage_typeWithCoolBar);
+		GridDataFactory.create(coolBarButton).indentH(24);
+		//
+		createSeparator(parent, columns);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/jface/dialog/DialogWizard.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/jface/dialog/DialogWizard.java
index d87d084da..68aa996df 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/jface/dialog/DialogWizard.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/jface/dialog/DialogWizard.java
@@ -24,22 +24,22 @@
  * @coverage rcp.wizards.ui
  */
 public final class DialogWizard extends RcpWizard {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DialogWizard() {
-    setWindowTitle(WizardsMessages.DialogWizard_title);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DialogWizard() {
+		setWindowTitle(WizardsMessages.DialogWizard_title);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Wizard
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected AbstractDesignWizardPage createMainPage() {
-    return new DialogWizardPage();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Wizard
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected AbstractDesignWizardPage createMainPage() {
+		return new DialogWizardPage();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/jface/dialog/DialogWizardPage.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/jface/dialog/DialogWizardPage.java
index 292598b32..f022787d9 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/jface/dialog/DialogWizardPage.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/jface/dialog/DialogWizardPage.java
@@ -30,37 +30,37 @@
  * @coverage rcp.wizards.ui
  */
 public final class DialogWizardPage extends RcpWizardPage {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DialogWizardPage() {
-    setTitle(WizardsMessages.DialogWizardPage_title);
-    setImageDescriptor(Activator.getImageDescriptor("wizard/JFace/Dialog/banner.gif"));
-    setDescription(WizardsMessages.DialogWizardPage_description);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DialogWizardPage() {
+		setTitle(WizardsMessages.DialogWizardPage_title);
+		setImageDescriptor(Activator.getImageDescriptor("wizard/JFace/Dialog/banner.gif"));
+		setDescription(WizardsMessages.DialogWizardPage_description);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // WizardPage
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createTypeMembers(IType newType, ImportsManager imports, IProgressMonitor monitor)
-      throws CoreException {
-    InputStream file = Activator.getFile("templates/jface/Dialog.jvt");
-    fillTypeFromTemplate(newType, imports, monitor, file);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// WizardPage
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createTypeMembers(IType newType, ImportsManager imports, IProgressMonitor monitor)
+			throws CoreException {
+		InputStream file = Activator.getFile("templates/jface/Dialog.jvt");
+		fillTypeFromTemplate(newType, imports, monitor, file);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void initTypePage(IJavaElement elem) {
-    super.initTypePage(elem);
-    setSuperClass("org.eclipse.jface.dialogs.Dialog", true);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void initTypePage(IJavaElement elem) {
+		super.initTypePage(elem);
+		setSuperClass("org.eclipse.jface.dialogs.Dialog", true);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/jface/dialog/TitleAreaDialogWizard.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/jface/dialog/TitleAreaDialogWizard.java
index 0a9db275d..16a3fdc3d 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/jface/dialog/TitleAreaDialogWizard.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/jface/dialog/TitleAreaDialogWizard.java
@@ -24,22 +24,22 @@
  * @coverage rcp.wizards.ui
  */
 public final class TitleAreaDialogWizard extends RcpWizard {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public TitleAreaDialogWizard() {
-    setWindowTitle(WizardsMessages.TitleAreaDialogWizard_title);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public TitleAreaDialogWizard() {
+		setWindowTitle(WizardsMessages.TitleAreaDialogWizard_title);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Wizard
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected AbstractDesignWizardPage createMainPage() {
-    return new TitleAreaDialogWizardPage();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Wizard
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected AbstractDesignWizardPage createMainPage() {
+		return new TitleAreaDialogWizardPage();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/jface/dialog/TitleAreaDialogWizardPage.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/jface/dialog/TitleAreaDialogWizardPage.java
index 8930a4b56..87a20aa4e 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/jface/dialog/TitleAreaDialogWizardPage.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/jface/dialog/TitleAreaDialogWizardPage.java
@@ -30,37 +30,37 @@
  * @coverage rcp.wizards.ui
  */
 public final class TitleAreaDialogWizardPage extends RcpWizardPage {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public TitleAreaDialogWizardPage() {
-    setTitle(WizardsMessages.TitleAreaDialogWizardPage_title);
-    setImageDescriptor(Activator.getImageDescriptor("wizard/JFace/TitleAreaDialog/banner.gif"));
-    setDescription(WizardsMessages.TitleAreaDialogWizardPage_description);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public TitleAreaDialogWizardPage() {
+		setTitle(WizardsMessages.TitleAreaDialogWizardPage_title);
+		setImageDescriptor(Activator.getImageDescriptor("wizard/JFace/TitleAreaDialog/banner.gif"));
+		setDescription(WizardsMessages.TitleAreaDialogWizardPage_description);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // WizardPage
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createTypeMembers(IType newType, ImportsManager imports, IProgressMonitor monitor)
-      throws CoreException {
-    InputStream file = Activator.getFile("templates/jface/TitleAreaDialog.jvt");
-    fillTypeFromTemplate(newType, imports, monitor, file);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// WizardPage
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createTypeMembers(IType newType, ImportsManager imports, IProgressMonitor monitor)
+			throws CoreException {
+		InputStream file = Activator.getFile("templates/jface/TitleAreaDialog.jvt");
+		fillTypeFromTemplate(newType, imports, monitor, file);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void initTypePage(IJavaElement elem) {
-    super.initTypePage(elem);
-    setSuperClass("org.eclipse.jface.dialogs.TitleAreaDialog", true);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void initTypePage(IJavaElement elem) {
+		super.initTypePage(elem);
+		setSuperClass("org.eclipse.jface.dialogs.TitleAreaDialog", true);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/jface/wizard/WizardPageWizard.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/jface/wizard/WizardPageWizard.java
index 92ec02e00..852687b95 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/jface/wizard/WizardPageWizard.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/jface/wizard/WizardPageWizard.java
@@ -24,22 +24,22 @@
  * @coverage rcp.wizards.ui
  */
 public final class WizardPageWizard extends RcpWizard {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public WizardPageWizard() {
-    setWindowTitle(WizardsMessages.WizardPageWizard_title);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public WizardPageWizard() {
+		setWindowTitle(WizardsMessages.WizardPageWizard_title);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Wizard
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected AbstractDesignWizardPage createMainPage() {
-    return new WizardPageWizardPage();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Wizard
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected AbstractDesignWizardPage createMainPage() {
+		return new WizardPageWizardPage();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/jface/wizard/WizardPageWizardPage.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/jface/wizard/WizardPageWizardPage.java
index 4e6b96f29..6875e83b0 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/jface/wizard/WizardPageWizardPage.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/jface/wizard/WizardPageWizardPage.java
@@ -29,37 +29,37 @@
  * @coverage rcp.wizards.ui
  */
 public final class WizardPageWizardPage extends RcpWizardPage {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public WizardPageWizardPage() {
-    setTitle(WizardsMessages.WizardPageWizardPage_title);
-    setImageDescriptor(Activator.getImageDescriptor("wizard/JFace/WizardPage/banner.gif"));
-    setDescription(WizardsMessages.WizardPageWizardPage_description);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public WizardPageWizardPage() {
+		setTitle(WizardsMessages.WizardPageWizardPage_title);
+		setImageDescriptor(Activator.getImageDescriptor("wizard/JFace/WizardPage/banner.gif"));
+		setDescription(WizardsMessages.WizardPageWizardPage_description);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // WizardPage
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createTypeMembers(IType newType, ImportsManager imports, IProgressMonitor monitor)
-      throws CoreException {
-    InputStream file = Activator.getFile("templates/jface/WizardPage.jvt");
-    fillTypeFromTemplate(newType, imports, monitor, file);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// WizardPage
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createTypeMembers(IType newType, ImportsManager imports, IProgressMonitor monitor)
+			throws CoreException {
+		InputStream file = Activator.getFile("templates/jface/WizardPage.jvt");
+		fillTypeFromTemplate(newType, imports, monitor, file);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void initTypePage(IJavaElement elem) {
-    super.initTypePage(elem);
-    setSuperClass("org.eclipse.jface.wizard.WizardPage", true);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void initTypePage(IJavaElement elem) {
+		super.initTypePage(elem);
+		setSuperClass("org.eclipse.jface.wizard.WizardPage", true);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/jface/wizard/WizardWizard.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/jface/wizard/WizardWizard.java
index 1760aa295..6e7db9be2 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/jface/wizard/WizardWizard.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/jface/wizard/WizardWizard.java
@@ -23,22 +23,22 @@
  * @coverage rcp.wizards.ui
  */
 public final class WizardWizard extends RcpWizard {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public WizardWizard() {
-    setWindowTitle(WizardsMessages.WizardWizard_title);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public WizardWizard() {
+		setWindowTitle(WizardsMessages.WizardWizard_title);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Wizard
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected AbstractDesignWizardPage createMainPage() {
-    return new WizardWizardPage();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Wizard
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected AbstractDesignWizardPage createMainPage() {
+		return new WizardWizardPage();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/jface/wizard/WizardWizardPage.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/jface/wizard/WizardWizardPage.java
index 6d852f025..c0f3cbd36 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/jface/wizard/WizardWizardPage.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/jface/wizard/WizardWizardPage.java
@@ -40,120 +40,120 @@
  * @coverage rcp.wizards.ui
  */
 public final class WizardWizardPage extends RcpWizardPage {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public WizardWizardPage() {
-    setTitle(WizardsMessages.WizardWizardPage_title);
-    setImageDescriptor(Activator.getImageDescriptor("wizard/JFace/Wizard/banner.gif"));
-    setDescription(WizardsMessages.WizardWizardPage_description);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public WizardWizardPage() {
+		setTitle(WizardsMessages.WizardWizardPage_title);
+		setImageDescriptor(Activator.getImageDescriptor("wizard/JFace/Wizard/banner.gif"));
+		setDescription(WizardsMessages.WizardWizardPage_description);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // WizardPage
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createTypeMembers(IType newType, ImportsManager imports, IProgressMonitor monitor)
-      throws CoreException {
-    {
-      InputStream file = Activator.getFile("templates/jface/Wizard.jvt");
-      fillTypeFromTemplate(newType, imports, monitor, file);
-    }
-    // add pages
-    addPageInvocations(newType, imports);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// WizardPage
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createTypeMembers(IType newType, ImportsManager imports, IProgressMonitor monitor)
+			throws CoreException {
+		{
+			InputStream file = Activator.getFile("templates/jface/Wizard.jvt");
+			fillTypeFromTemplate(newType, imports, monitor, file);
+		}
+		// add pages
+		addPageInvocations(newType, imports);
+	}
 
-  private void addPageInvocations(IType newType, ImportsManager imports) throws JavaModelException {
-    IBuffer buffer = newType.getCompilationUnit().getBuffer();
-    // prepare addPage() invocations
-    String addPagesSource = "";
-    for (IType page : getSelectedPages()) {
-      String simpleName = imports.addImport(page.getFullyQualifiedName());
-      addPagesSource += "addPage(new " + simpleName + "());";
-    }
-    // prepare position for addPage() invocations
-    int pagesOffset;
-    {
-      IMethod pagesMethod = newType.getMethod("addPages", new String[0]);
-      pagesOffset = pagesMethod.getSourceRange().getOffset();
-      pagesOffset = buffer.getContents().indexOf('{', pagesOffset) + 1;
-    }
-    // insert addPage() invocations, don't care about formatting
-    buffer.replace(pagesOffset, 0, addPagesSource);
-  }
+	private void addPageInvocations(IType newType, ImportsManager imports) throws JavaModelException {
+		IBuffer buffer = newType.getCompilationUnit().getBuffer();
+		// prepare addPage() invocations
+		String addPagesSource = "";
+		for (IType page : getSelectedPages()) {
+			String simpleName = imports.addImport(page.getFullyQualifiedName());
+			addPagesSource += "addPage(new " + simpleName + "());";
+		}
+		// prepare position for addPage() invocations
+		int pagesOffset;
+		{
+			IMethod pagesMethod = newType.getMethod("addPages", new String[0]);
+			pagesOffset = pagesMethod.getSourceRange().getOffset();
+			pagesOffset = buffer.getContents().indexOf('{', pagesOffset) + 1;
+		}
+		// insert addPage() invocations, don't care about formatting
+		buffer.replace(pagesOffset, 0, addPagesSource);
+	}
 
-  @SuppressWarnings("unchecked")
-  private List<IType> getSelectedPages() {
-    return m_pagesField.getElements();
-  }
+	@SuppressWarnings("unchecked")
+	private List<IType> getSelectedPages() {
+		return m_pagesField.getElements();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void initTypePage(IJavaElement elem) {
-    super.initTypePage(elem);
-    setSuperClass("org.eclipse.jface.wizard.Wizard", true);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void initTypePage(IJavaElement elem) {
+		super.initTypePage(elem);
+		setSuperClass("org.eclipse.jface.wizard.Wizard", true);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // More GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private ListDialogField m_pagesField;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// More GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private ListDialogField m_pagesField;
 
-  @Override
-  protected void createLocalControls(Composite parent, int columns) {
-    String[] buttonLabels =
-        new String[]{
-            WizardsMessages.WizardWizardPage_addButton,
-            WizardsMessages.WizardWizardPage_removeButton,
-            WizardsMessages.WizardWizardPage_upButton,
-            WizardsMessages.WizardWizardPage_downButton};
-    IListAdapter adapter = new IListAdapter() {
-      @Override
-      public void customButtonPressed(ListDialogField field, int index) {
-        if (index == 0) {
-          Shell shell = getShell();
-          IType page =
-              JdtUiUtils.selectSubType(
-                  shell,
-                  getJavaProject(),
-                  "org.eclipse.jface.wizard.WizardPage");
-          shell.setFocus();
-          if (page != null) {
-            m_pagesField.addElement(page);
-          }
-        }
-      }
+	@Override
+	protected void createLocalControls(Composite parent, int columns) {
+		String[] buttonLabels =
+				new String[]{
+						WizardsMessages.WizardWizardPage_addButton,
+						WizardsMessages.WizardWizardPage_removeButton,
+						WizardsMessages.WizardWizardPage_upButton,
+						WizardsMessages.WizardWizardPage_downButton};
+		IListAdapter adapter = new IListAdapter() {
+			@Override
+			public void customButtonPressed(ListDialogField field, int index) {
+				if (index == 0) {
+					Shell shell = getShell();
+					IType page =
+							JdtUiUtils.selectSubType(
+									shell,
+									getJavaProject(),
+									"org.eclipse.jface.wizard.WizardPage");
+					shell.setFocus();
+					if (page != null) {
+						m_pagesField.addElement(page);
+					}
+				}
+			}
 
-      @Override
-      public void doubleClicked(ListDialogField field) {
-      }
+			@Override
+			public void doubleClicked(ListDialogField field) {
+			}
 
-      @Override
-      public void selectionChanged(ListDialogField field) {
-      }
-    };
-    LabelProvider labelProvider = new LabelProvider() {
-      @Override
-      public String getText(Object element) {
-        return ((IType) element).getFullyQualifiedName();
-      }
-    };
-    m_pagesField = new ListDialogField(adapter, buttonLabels, labelProvider);
-    m_pagesField.setLabelText(WizardsMessages.WizardWizardPage_pagesList);
-    m_pagesField.setTableColumns(new ListDialogField.ColumnsDescription(1, false));
-    m_pagesField.setRemoveButtonIndex(1);
-    m_pagesField.setUpButtonIndex(2);
-    m_pagesField.setDownButtonIndex(3);
-    m_pagesField.doFillIntoGrid(parent, columns);
-  }
+			@Override
+			public void selectionChanged(ListDialogField field) {
+			}
+		};
+		LabelProvider labelProvider = new LabelProvider() {
+			@Override
+			public String getText(Object element) {
+				return ((IType) element).getFullyQualifiedName();
+			}
+		};
+		m_pagesField = new ListDialogField(adapter, buttonLabels, labelProvider);
+		m_pagesField.setLabelText(WizardsMessages.WizardWizardPage_pagesList);
+		m_pagesField.setTableColumns(new ListDialogField.ColumnsDescription(1, false));
+		m_pagesField.setRemoveButtonIndex(1);
+		m_pagesField.setUpButtonIndex(2);
+		m_pagesField.setDownButtonIndex(3);
+		m_pagesField.doFillIntoGrid(parent, columns);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/project/NewProjectWizard.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/project/NewProjectWizard.java
index 4c9209a73..491886bf0 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/project/NewProjectWizard.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/project/NewProjectWizard.java
@@ -25,46 +25,46 @@
  * @coverage rcp.wizards
  */
 public class NewProjectWizard extends DesignerJavaProjectWizard {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public NewProjectWizard() {
-    setDefaultPageImageDescriptor(Activator.getImageDescriptor("wizard/Project/banner.gif"));
-    setWindowTitle(WizardsMessages.NewProjectWizard_title);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public NewProjectWizard() {
+		setDefaultPageImageDescriptor(Activator.getImageDescriptor("wizard/Project/banner.gif"));
+		setWindowTitle(WizardsMessages.NewProjectWizard_title);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Wizard
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean performFinish() {
-    boolean result = super.performFinish();
-    if (result) {
-      try {
-        addRequiredLibraries(getCreatedElement());
-      } catch (Throwable e) {
-        DesignerPlugin.log(e);
-      }
-    }
-    return result;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Wizard
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean performFinish() {
+		boolean result = super.performFinish();
+		if (result) {
+			try {
+				addRequiredLibraries(getCreatedElement());
+			} catch (Throwable e) {
+				DesignerPlugin.log(e);
+			}
+		}
+		return result;
+	}
 
-  private static void addRequiredLibraries(IJavaProject javaProject) throws Exception {
-    ProjectUtils.addPluginLibraries(javaProject, "org.eclipse.osgi");
-    ProjectUtils.addPluginLibraries(javaProject, "org.eclipse.core.commands");
-    ProjectUtils.addPluginLibraries(javaProject, "org.eclipse.equinox.common");
-    ProjectUtils.addPluginLibraries(javaProject, "org.eclipse.equinox.registry");
-    ProjectUtils.addPluginLibraries(javaProject, "org.eclipse.core.runtime");
-    ProjectUtils.addPluginLibraries(javaProject, "org.eclipse.text");
-    ProjectUtils.addSWTLibrary(javaProject);
-    ProjectUtils.addPluginLibraries(javaProject, "org.eclipse.jface");
-    ProjectUtils.addPluginLibraries(javaProject, "org.eclipse.jface.text");
-    ProjectUtils.addPluginLibraries(javaProject, "org.eclipse.ui.workbench");
-    ProjectUtils.addPluginLibraries(javaProject, "com.ibm.icu");
-    ProjectUtils.addPluginLibraries(javaProject, "org.eclipse.ui.forms");
-  }
+	private static void addRequiredLibraries(IJavaProject javaProject) throws Exception {
+		ProjectUtils.addPluginLibraries(javaProject, "org.eclipse.osgi");
+		ProjectUtils.addPluginLibraries(javaProject, "org.eclipse.core.commands");
+		ProjectUtils.addPluginLibraries(javaProject, "org.eclipse.equinox.common");
+		ProjectUtils.addPluginLibraries(javaProject, "org.eclipse.equinox.registry");
+		ProjectUtils.addPluginLibraries(javaProject, "org.eclipse.core.runtime");
+		ProjectUtils.addPluginLibraries(javaProject, "org.eclipse.text");
+		ProjectUtils.addSWTLibrary(javaProject);
+		ProjectUtils.addPluginLibraries(javaProject, "org.eclipse.jface");
+		ProjectUtils.addPluginLibraries(javaProject, "org.eclipse.jface.text");
+		ProjectUtils.addPluginLibraries(javaProject, "org.eclipse.ui.workbench");
+		ProjectUtils.addPluginLibraries(javaProject, "com.ibm.icu");
+		ProjectUtils.addPluginLibraries(javaProject, "org.eclipse.ui.forms");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/rcp/AbstractViewPartWizardPage.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/rcp/AbstractViewPartWizardPage.java
index b59d39845..1f29d4cef 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/rcp/AbstractViewPartWizardPage.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/rcp/AbstractViewPartWizardPage.java
@@ -34,59 +34,59 @@
  * @coverage rcp.wizards.ui
  */
 public abstract class AbstractViewPartWizardPage extends RcpPartWizardPage {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // WizardPage
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createTypeMembers(IType newType, ImportsManager imports, IProgressMonitor monitor)
-      throws CoreException {
-    super.createTypeMembers(newType, imports, monitor);
-    InputStream file = Activator.getFile(getCreateTemplate());
-    fillTypeFromTemplate(newType, imports, monitor, file);
-    if (m_pdeUtils != null) {
-      try {
-        m_pdeUtils.createViewElement(m_newTypeClassName, getNameText(), m_newTypeClassName);
-      } catch (Throwable e) {
-        throw new CoreException(new Status(IStatus.ERROR,
-            Activator.PLUGIN_ID,
-            IStatus.OK,
-            WizardsMessages.AbstractViewPartWizardPage_errorPluginXml,
-            e));
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// WizardPage
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createTypeMembers(IType newType, ImportsManager imports, IProgressMonitor monitor)
+			throws CoreException {
+		super.createTypeMembers(newType, imports, monitor);
+		InputStream file = Activator.getFile(getCreateTemplate());
+		fillTypeFromTemplate(newType, imports, monitor, file);
+		if (m_pdeUtils != null) {
+			try {
+				m_pdeUtils.createViewElement(m_newTypeClassName, getNameText(), m_newTypeClassName);
+			} catch (Throwable e) {
+				throw new CoreException(new Status(IStatus.ERROR,
+						Activator.PLUGIN_ID,
+						IStatus.OK,
+						WizardsMessages.AbstractViewPartWizardPage_errorPluginXml,
+						e));
+			}
+		}
+	}
 
-  @Override
-  protected String performSubstitutions(String code, ImportsManager imports) {
-    code = super.performSubstitutions(code, imports);
-    code = StringUtils.replace(code, "%VIEW_ID%", m_newTypeClassName);
-    return code;
-  }
+	@Override
+	protected String performSubstitutions(String code, ImportsManager imports) {
+		code = super.performSubstitutions(code, imports);
+		code = StringUtils.replace(code, "%VIEW_ID%", m_newTypeClassName);
+		return code;
+	}
 
-  /**
-   * @return {@link String} path to template file for create new type.
-   */
-  protected abstract String getCreateTemplate();
+	/**
+	 * @return {@link String} path to template file for create new type.
+	 */
+	protected abstract String getCreateTemplate();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void initTypePage(IJavaElement elem) {
-    super.initTypePage(elem);
-    setSuperClass("org.eclipse.ui.part.ViewPart", true);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void initTypePage(IJavaElement elem) {
+		super.initTypePage(elem);
+		setSuperClass("org.eclipse.ui.part.ViewPart", true);
+	}
 
-  @Override
-  protected void createLocalControls(Composite parent, int columns) {
-    createLocalControls(
-        parent,
-        columns,
-        WizardsMessages.AbstractViewPartWizardPage_viewName,
-        WizardsMessages.AbstractViewPartWizardPage_newViewPart);
-  }
+	@Override
+	protected void createLocalControls(Composite parent, int columns) {
+		createLocalControls(
+				parent,
+				columns,
+				WizardsMessages.AbstractViewPartWizardPage_viewName,
+				WizardsMessages.AbstractViewPartWizardPage_newViewPart);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/rcp/RcpPartWizardPage.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/rcp/RcpPartWizardPage.java
index 779532f82..1a990baeb 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/rcp/RcpPartWizardPage.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/rcp/RcpPartWizardPage.java
@@ -32,63 +32,63 @@
  * @coverage rcp.wizards.ui
  */
 public abstract class RcpPartWizardPage extends RcpWizardPage {
-  private Text m_nameText;
-  protected PdeUtils m_pdeUtils;
-  protected String m_newTypeClassName;
+	private Text m_nameText;
+	protected PdeUtils m_pdeUtils;
+	protected String m_newTypeClassName;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Initialize
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void initTypePage(IJavaElement element) {
-    super.initTypePage(element);
-    if (element != null) {
-      m_pdeUtils = PdeUtils.get(element.getJavaProject().getProject());
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Initialize
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void initTypePage(IJavaElement element) {
+		super.initTypePage(element);
+		if (element != null) {
+			m_pdeUtils = PdeUtils.get(element.getJavaProject().getProject());
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // WizardPage
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createTypeMembers(IType newType, ImportsManager imports, IProgressMonitor monitor)
-      throws CoreException {
-    m_newTypeClassName = newType.getFullyQualifiedName();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// WizardPage
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createTypeMembers(IType newType, ImportsManager imports, IProgressMonitor monitor)
+			throws CoreException {
+		m_newTypeClassName = newType.getFullyQualifiedName();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Additional control
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected final void createLocalControls(Composite parent,
-      int numColumns,
-      String nameLabel,
-      String nameValue) {
-    Composite composite = new Composite(parent, SWT.NONE);
-    GridLayoutFactory.create(composite).columns(2).noMargins();
-    GridDataFactory.create(composite).fillH().grabH().spanH(numColumns);
-    // title
-    Label label = new Label(composite, SWT.NONE);
-    label.setText(nameLabel);
-    // text
-    m_nameText = new Text(composite, SWT.SINGLE | SWT.BORDER);
-    GridDataFactory.create(m_nameText).fillH().grabH();
-    m_nameText.setText(nameValue);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Additional control
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected final void createLocalControls(Composite parent,
+			int numColumns,
+			String nameLabel,
+			String nameValue) {
+		Composite composite = new Composite(parent, SWT.NONE);
+		GridLayoutFactory.create(composite).columns(2).noMargins();
+		GridDataFactory.create(composite).fillH().grabH().spanH(numColumns);
+		// title
+		Label label = new Label(composite, SWT.NONE);
+		label.setText(nameLabel);
+		// text
+		m_nameText = new Text(composite, SWT.SINGLE | SWT.BORDER);
+		GridDataFactory.create(m_nameText).fillH().grabH();
+		m_nameText.setText(nameValue);
+	}
 
-  protected final String getNameText() {
-    final String[] text = new String[1];
-    getShell().getDisplay().syncExec(new Runnable() {
-      @Override
-      public void run() {
-        text[0] = m_nameText.getText();
-      }
-    });
-    return text[0];
-  }
+	protected final String getNameText() {
+		final String[] text = new String[1];
+		getShell().getDisplay().syncExec(new Runnable() {
+			@Override
+			public void run() {
+				text[0] = m_nameText.getText();
+			}
+		});
+		return text[0];
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/rcp/advisor/ActionBarAdvisorWizard.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/rcp/advisor/ActionBarAdvisorWizard.java
index 52dd4777c..828a1e818 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/rcp/advisor/ActionBarAdvisorWizard.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/rcp/advisor/ActionBarAdvisorWizard.java
@@ -24,22 +24,22 @@
  * @coverage rcp.wizards.ui
  */
 public final class ActionBarAdvisorWizard extends RcpWizard {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ActionBarAdvisorWizard() {
-    setWindowTitle(WizardsMessages.ActionBarAdvisorWizard_title);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ActionBarAdvisorWizard() {
+		setWindowTitle(WizardsMessages.ActionBarAdvisorWizard_title);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Wizard
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected AbstractDesignWizardPage createMainPage() {
-    return new ActionBarAdvisorWizardPage();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Wizard
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected AbstractDesignWizardPage createMainPage() {
+		return new ActionBarAdvisorWizardPage();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/rcp/advisor/ActionBarAdvisorWizardPage.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/rcp/advisor/ActionBarAdvisorWizardPage.java
index eb36ce210..de55d1e2a 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/rcp/advisor/ActionBarAdvisorWizardPage.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/rcp/advisor/ActionBarAdvisorWizardPage.java
@@ -30,37 +30,37 @@
  * @coverage rcp.wizards.ui
  */
 public final class ActionBarAdvisorWizardPage extends RcpWizardPage {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ActionBarAdvisorWizardPage() {
-    setTitle(WizardsMessages.ActionBarAdvisorWizardPage_title);
-    setImageDescriptor(Activator.getImageDescriptor("wizard/ActionBarAdvisor/banner.gif"));
-    setDescription(WizardsMessages.ActionBarAdvisorWizardPage_description);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ActionBarAdvisorWizardPage() {
+		setTitle(WizardsMessages.ActionBarAdvisorWizardPage_title);
+		setImageDescriptor(Activator.getImageDescriptor("wizard/ActionBarAdvisor/banner.gif"));
+		setDescription(WizardsMessages.ActionBarAdvisorWizardPage_description);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // WizardPage
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createTypeMembers(IType newType, ImportsManager imports, IProgressMonitor monitor)
-      throws CoreException {
-    InputStream file = Activator.getFile("templates/rcp/ActionBarAdvisor.jvt");
-    fillTypeFromTemplate(newType, imports, monitor, file);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// WizardPage
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createTypeMembers(IType newType, ImportsManager imports, IProgressMonitor monitor)
+			throws CoreException {
+		InputStream file = Activator.getFile("templates/rcp/ActionBarAdvisor.jvt");
+		fillTypeFromTemplate(newType, imports, monitor, file);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void initTypePage(IJavaElement elem) {
-    super.initTypePage(elem);
-    setSuperClass("org.eclipse.ui.application.ActionBarAdvisor", true);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void initTypePage(IJavaElement elem) {
+		super.initTypePage(elem);
+		setSuperClass("org.eclipse.ui.application.ActionBarAdvisor", true);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/rcp/editor/EditorPartWizard.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/rcp/editor/EditorPartWizard.java
index 9b682dec6..006ca2c1f 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/rcp/editor/EditorPartWizard.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/rcp/editor/EditorPartWizard.java
@@ -24,22 +24,22 @@
  * @coverage rcp.wizards.ui
  */
 public final class EditorPartWizard extends RcpWizard {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public EditorPartWizard() {
-    setWindowTitle(WizardsMessages.EditorPartWizard_title);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public EditorPartWizard() {
+		setWindowTitle(WizardsMessages.EditorPartWizard_title);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Wizard
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected AbstractDesignWizardPage createMainPage() {
-    return new EditorPartWizardPage();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Wizard
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected AbstractDesignWizardPage createMainPage() {
+		return new EditorPartWizardPage();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/rcp/editor/EditorPartWizardPage.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/rcp/editor/EditorPartWizardPage.java
index 5e3b438ff..d0566e024 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/rcp/editor/EditorPartWizardPage.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/rcp/editor/EditorPartWizardPage.java
@@ -35,65 +35,65 @@
  * @coverage rcp.wizards.ui
  */
 public final class EditorPartWizardPage extends RcpPartWizardPage {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public EditorPartWizardPage() {
-    setTitle(WizardsMessages.EditorPartWizardPage_title);
-    setImageDescriptor(Activator.getImageDescriptor("wizard/EditorPart/banner.gif"));
-    setDescription(WizardsMessages.EditorPartWizardPage_description);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public EditorPartWizardPage() {
+		setTitle(WizardsMessages.EditorPartWizardPage_title);
+		setImageDescriptor(Activator.getImageDescriptor("wizard/EditorPart/banner.gif"));
+		setDescription(WizardsMessages.EditorPartWizardPage_description);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // WizardPage
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createTypeMembers(IType newType, ImportsManager imports, IProgressMonitor monitor)
-      throws CoreException {
-    super.createTypeMembers(newType, imports, monitor);
-    InputStream file = Activator.getFile("templates/rcp/EditorPart.jvt");
-    fillTypeFromTemplate(newType, imports, monitor, file);
-    if (m_pdeUtils != null) {
-      try {
-        m_pdeUtils.createEditorElement(m_newTypeClassName, getNameText(), m_newTypeClassName);
-      } catch (Throwable e) {
-        throw new CoreException(new Status(IStatus.ERROR,
-            Activator.PLUGIN_ID,
-            IStatus.OK,
-            WizardsMessages.EditorPartWizardPage_errorPluginXml,
-            e));
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// WizardPage
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createTypeMembers(IType newType, ImportsManager imports, IProgressMonitor monitor)
+			throws CoreException {
+		super.createTypeMembers(newType, imports, monitor);
+		InputStream file = Activator.getFile("templates/rcp/EditorPart.jvt");
+		fillTypeFromTemplate(newType, imports, monitor, file);
+		if (m_pdeUtils != null) {
+			try {
+				m_pdeUtils.createEditorElement(m_newTypeClassName, getNameText(), m_newTypeClassName);
+			} catch (Throwable e) {
+				throw new CoreException(new Status(IStatus.ERROR,
+						Activator.PLUGIN_ID,
+						IStatus.OK,
+						WizardsMessages.EditorPartWizardPage_errorPluginXml,
+						e));
+			}
+		}
+	}
 
-  @Override
-  protected String performSubstitutions(String code, ImportsManager imports) {
-    code = super.performSubstitutions(code, imports);
-    code = StringUtils.replace(code, "%EDITOR_ID%", m_newTypeClassName);
-    return code;
-  }
+	@Override
+	protected String performSubstitutions(String code, ImportsManager imports) {
+		code = super.performSubstitutions(code, imports);
+		code = StringUtils.replace(code, "%EDITOR_ID%", m_newTypeClassName);
+		return code;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void initTypePage(IJavaElement elem) {
-    super.initTypePage(elem);
-    setSuperClass("org.eclipse.ui.part.EditorPart", true);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void initTypePage(IJavaElement elem) {
+		super.initTypePage(elem);
+		setSuperClass("org.eclipse.ui.part.EditorPart", true);
+	}
 
-  @Override
-  protected void createLocalControls(Composite parent, int columns) {
-    createLocalControls(
-        parent,
-        columns,
-        WizardsMessages.EditorPartWizardPage_editorName,
-        WizardsMessages.EditorPartWizardPage_newEditorPart);
-  }
+	@Override
+	protected void createLocalControls(Composite parent, int columns) {
+		createLocalControls(
+				parent,
+				columns,
+				WizardsMessages.EditorPartWizardPage_editorName,
+				WizardsMessages.EditorPartWizardPage_newEditorPart);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/rcp/editor/MultiPageEditorPartWizard.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/rcp/editor/MultiPageEditorPartWizard.java
index cc64e0cf4..75545f27e 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/rcp/editor/MultiPageEditorPartWizard.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/rcp/editor/MultiPageEditorPartWizard.java
@@ -24,22 +24,22 @@
  * @coverage rcp.wizards.ui
  */
 public final class MultiPageEditorPartWizard extends RcpWizard {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public MultiPageEditorPartWizard() {
-    setWindowTitle(WizardsMessages.MultiPageEditorPartWizard_title);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public MultiPageEditorPartWizard() {
+		setWindowTitle(WizardsMessages.MultiPageEditorPartWizard_title);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Wizard
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected AbstractDesignWizardPage createMainPage() {
-    return new MultiPageEditorPartWizardPage();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Wizard
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected AbstractDesignWizardPage createMainPage() {
+		return new MultiPageEditorPartWizardPage();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/rcp/editor/MultiPageEditorPartWizardPage.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/rcp/editor/MultiPageEditorPartWizardPage.java
index 746e03278..c790368ca 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/rcp/editor/MultiPageEditorPartWizardPage.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/rcp/editor/MultiPageEditorPartWizardPage.java
@@ -43,151 +43,151 @@
  * @coverage rcp.wizards.ui
  */
 public final class MultiPageEditorPartWizardPage extends RcpPartWizardPage {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public MultiPageEditorPartWizardPage() {
-    setTitle(WizardsMessages.MultiPageEditorPartWizardPage_title);
-    setImageDescriptor(Activator.getImageDescriptor("wizard/MultiPageEditorPart/banner.gif"));
-    setDescription(WizardsMessages.MultiPageEditorPartWizardPage_description);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // WizardPage
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String performSubstitutions(String code, ImportsManager imports) {
-    code = super.performSubstitutions(code, imports);
-    code = StringUtils.replace(code, "%EDITOR_ID%", m_newTypeClassName);
-    return code;
-  }
-
-  @Override
-  protected void createTypeMembers(IType newType, ImportsManager imports, IProgressMonitor monitor)
-      throws CoreException {
-    super.createTypeMembers(newType, imports, monitor);
-    {
-      InputStream file = Activator.getFile("templates/rcp/MultiPageEditorPart.jvt");
-      fillTypeFromTemplate(newType, imports, monitor, file);
-    }
-    addPageInvocations(newType, imports);
-    addEditorContribution();
-  }
-
-  private void addPageInvocations(IType newType, ImportsManager imports) throws JavaModelException {
-    IBuffer buffer = newType.getCompilationUnit().getBuffer();
-    // prepare addPage() invocations
-    String addPagesSource = "";
-    for (IType page : getSelectedPages()) {
-      String simpleName = imports.addImport(page.getFullyQualifiedName());
-      addPagesSource += "addPage(new " + simpleName + "(), (org.eclipse.ui.IEditorInput) null);";
-    }
-    // insert addPage() invocations, don't care about formatting
-    String pattern = "int pages;";
-    int pagesOffset = buffer.getContents().indexOf(pattern);
-    buffer.replace(pagesOffset, pattern.length(), addPagesSource);
-    // if no pages, remove "try" block
-    if (addPagesSource.length() == 0) {
-      String contents = buffer.getContents();
-      int tryBegin = contents.indexOf("try {");
-      int tryEnd = contents.indexOf("}", tryBegin + 1);
-      tryEnd = contents.indexOf("}", tryEnd + 1);
-      buffer.replace(tryBegin, tryEnd - tryBegin + 1, "");
-    }
-  }
-
-  @SuppressWarnings("unchecked")
-  private List<IType> getSelectedPages() {
-    return m_pagesField.getElements();
-  }
-
-  private void addEditorContribution() throws CoreException {
-    if (m_pdeUtils != null) {
-      try {
-        m_pdeUtils.createEditorElement(m_newTypeClassName, getNameText(), m_newTypeClassName);
-      } catch (Throwable e) {
-        throw new CoreException(new Status(IStatus.ERROR,
-            Activator.PLUGIN_ID,
-            IStatus.OK,
-            WizardsMessages.MultiPageEditorPartWizardPage_errorPluginXml,
-            e));
-      }
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void initTypePage(IJavaElement elem) {
-    super.initTypePage(elem);
-    setSuperClass("org.eclipse.ui.part.MultiPageEditorPart", true);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // More GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private ListDialogField m_pagesField;
-
-  @Override
-  protected void createLocalControls(Composite parent, int columns) {
-    createLocalControls(
-        parent,
-        columns,
-        WizardsMessages.MultiPageEditorPartWizardPage_editorName,
-        WizardsMessages.MultiPageEditorPartWizardPage_newEditorPart);
-    createPagesField(parent, columns);
-  }
-
-  private void createPagesField(Composite parent, int columns) {
-    String[] buttonLabels =
-        new String[]{
-            WizardsMessages.MultiPageEditorPartWizardPage_addButton,
-            WizardsMessages.MultiPageEditorPartWizardPage_removeButton,
-            WizardsMessages.MultiPageEditorPartWizardPage_upButton,
-            WizardsMessages.MultiPageEditorPartWizardPage_downButton};
-    IListAdapter adapter = new IListAdapter() {
-      @Override
-      public void customButtonPressed(ListDialogField field, int index) {
-        if (index == 0) {
-          Shell shell = getShell();
-          IType page =
-              JdtUiUtils.selectSubType(shell, getJavaProject(), "org.eclipse.ui.IEditorPart");
-          shell.setFocus();
-          if (page != null) {
-            m_pagesField.addElement(page);
-          }
-        }
-      }
-
-      @Override
-      public void doubleClicked(ListDialogField field) {
-      }
-
-      @Override
-      public void selectionChanged(ListDialogField field) {
-      }
-    };
-    LabelProvider labelProvider = new LabelProvider() {
-      @Override
-      public String getText(Object element) {
-        return ((IType) element).getFullyQualifiedName();
-      }
-    };
-    m_pagesField = new ListDialogField(adapter, buttonLabels, labelProvider);
-    m_pagesField.setLabelText(WizardsMessages.MultiPageEditorPartWizardPage_pagesList);
-    m_pagesField.setTableColumns(new ListDialogField.ColumnsDescription(1, false));
-    m_pagesField.setRemoveButtonIndex(1);
-    m_pagesField.setUpButtonIndex(2);
-    m_pagesField.setDownButtonIndex(3);
-    m_pagesField.doFillIntoGrid(parent, columns);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public MultiPageEditorPartWizardPage() {
+		setTitle(WizardsMessages.MultiPageEditorPartWizardPage_title);
+		setImageDescriptor(Activator.getImageDescriptor("wizard/MultiPageEditorPart/banner.gif"));
+		setDescription(WizardsMessages.MultiPageEditorPartWizardPage_description);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// WizardPage
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String performSubstitutions(String code, ImportsManager imports) {
+		code = super.performSubstitutions(code, imports);
+		code = StringUtils.replace(code, "%EDITOR_ID%", m_newTypeClassName);
+		return code;
+	}
+
+	@Override
+	protected void createTypeMembers(IType newType, ImportsManager imports, IProgressMonitor monitor)
+			throws CoreException {
+		super.createTypeMembers(newType, imports, monitor);
+		{
+			InputStream file = Activator.getFile("templates/rcp/MultiPageEditorPart.jvt");
+			fillTypeFromTemplate(newType, imports, monitor, file);
+		}
+		addPageInvocations(newType, imports);
+		addEditorContribution();
+	}
+
+	private void addPageInvocations(IType newType, ImportsManager imports) throws JavaModelException {
+		IBuffer buffer = newType.getCompilationUnit().getBuffer();
+		// prepare addPage() invocations
+		String addPagesSource = "";
+		for (IType page : getSelectedPages()) {
+			String simpleName = imports.addImport(page.getFullyQualifiedName());
+			addPagesSource += "addPage(new " + simpleName + "(), (org.eclipse.ui.IEditorInput) null);";
+		}
+		// insert addPage() invocations, don't care about formatting
+		String pattern = "int pages;";
+		int pagesOffset = buffer.getContents().indexOf(pattern);
+		buffer.replace(pagesOffset, pattern.length(), addPagesSource);
+		// if no pages, remove "try" block
+		if (addPagesSource.length() == 0) {
+			String contents = buffer.getContents();
+			int tryBegin = contents.indexOf("try {");
+			int tryEnd = contents.indexOf("}", tryBegin + 1);
+			tryEnd = contents.indexOf("}", tryEnd + 1);
+			buffer.replace(tryBegin, tryEnd - tryBegin + 1, "");
+		}
+	}
+
+	@SuppressWarnings("unchecked")
+	private List<IType> getSelectedPages() {
+		return m_pagesField.getElements();
+	}
+
+	private void addEditorContribution() throws CoreException {
+		if (m_pdeUtils != null) {
+			try {
+				m_pdeUtils.createEditorElement(m_newTypeClassName, getNameText(), m_newTypeClassName);
+			} catch (Throwable e) {
+				throw new CoreException(new Status(IStatus.ERROR,
+						Activator.PLUGIN_ID,
+						IStatus.OK,
+						WizardsMessages.MultiPageEditorPartWizardPage_errorPluginXml,
+						e));
+			}
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void initTypePage(IJavaElement elem) {
+		super.initTypePage(elem);
+		setSuperClass("org.eclipse.ui.part.MultiPageEditorPart", true);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// More GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private ListDialogField m_pagesField;
+
+	@Override
+	protected void createLocalControls(Composite parent, int columns) {
+		createLocalControls(
+				parent,
+				columns,
+				WizardsMessages.MultiPageEditorPartWizardPage_editorName,
+				WizardsMessages.MultiPageEditorPartWizardPage_newEditorPart);
+		createPagesField(parent, columns);
+	}
+
+	private void createPagesField(Composite parent, int columns) {
+		String[] buttonLabels =
+				new String[]{
+						WizardsMessages.MultiPageEditorPartWizardPage_addButton,
+						WizardsMessages.MultiPageEditorPartWizardPage_removeButton,
+						WizardsMessages.MultiPageEditorPartWizardPage_upButton,
+						WizardsMessages.MultiPageEditorPartWizardPage_downButton};
+		IListAdapter adapter = new IListAdapter() {
+			@Override
+			public void customButtonPressed(ListDialogField field, int index) {
+				if (index == 0) {
+					Shell shell = getShell();
+					IType page =
+							JdtUiUtils.selectSubType(shell, getJavaProject(), "org.eclipse.ui.IEditorPart");
+					shell.setFocus();
+					if (page != null) {
+						m_pagesField.addElement(page);
+					}
+				}
+			}
+
+			@Override
+			public void doubleClicked(ListDialogField field) {
+			}
+
+			@Override
+			public void selectionChanged(ListDialogField field) {
+			}
+		};
+		LabelProvider labelProvider = new LabelProvider() {
+			@Override
+			public String getText(Object element) {
+				return ((IType) element).getFullyQualifiedName();
+			}
+		};
+		m_pagesField = new ListDialogField(adapter, buttonLabels, labelProvider);
+		m_pagesField.setLabelText(WizardsMessages.MultiPageEditorPartWizardPage_pagesList);
+		m_pagesField.setTableColumns(new ListDialogField.ColumnsDescription(1, false));
+		m_pagesField.setRemoveButtonIndex(1);
+		m_pagesField.setUpButtonIndex(2);
+		m_pagesField.setDownButtonIndex(3);
+		m_pagesField.doFillIntoGrid(parent, columns);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/rcp/pagebook/PageBookWizard.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/rcp/pagebook/PageBookWizard.java
index 4c8d9cfc3..cca6cded2 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/rcp/pagebook/PageBookWizard.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/rcp/pagebook/PageBookWizard.java
@@ -24,22 +24,22 @@
  * @coverage rcp.wizards.ui
  */
 public final class PageBookWizard extends RcpWizard {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public PageBookWizard() {
-    setWindowTitle(WizardsMessages.PageBookWizard_title);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public PageBookWizard() {
+		setWindowTitle(WizardsMessages.PageBookWizard_title);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Wizard
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected AbstractDesignWizardPage createMainPage() {
-    return new PageBookWizardPage();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Wizard
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected AbstractDesignWizardPage createMainPage() {
+		return new PageBookWizardPage();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/rcp/pagebook/PageBookWizardPage.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/rcp/pagebook/PageBookWizardPage.java
index 02469840f..0265f61de 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/rcp/pagebook/PageBookWizardPage.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/rcp/pagebook/PageBookWizardPage.java
@@ -41,127 +41,127 @@
  * @coverage rcp.wizards.ui
  */
 public final class PageBookWizardPage extends RcpWizardPage {
-  private final List<Button> m_buttons = new ArrayList<Button>();
+	private final List<Button> m_buttons = new ArrayList<Button>();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public PageBookWizardPage() {
-    setTitle(WizardsMessages.PageBookWizardPage_title);
-    setImageDescriptor(Activator.getImageDescriptor("wizard/PageBook/banner.gif"));
-    setDescription(WizardsMessages.PageBookWizardPage_description);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public PageBookWizardPage() {
+		setTitle(WizardsMessages.PageBookWizardPage_title);
+		setImageDescriptor(Activator.getImageDescriptor("wizard/PageBook/banner.gif"));
+		setDescription(WizardsMessages.PageBookWizardPage_description);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // WizardPage
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createTypeMembers(IType newType, ImportsManager imports, IProgressMonitor monitor)
-      throws CoreException {
-    final String[] template = new String[1];
-    getShell().getDisplay().syncExec(new Runnable() {
-      @Override
-      public void run() {
-        for (Button button : m_buttons) {
-          if (button.getSelection()) {
-            template[0] = (String) button.getData();
-            break;
-          }
-        }
-      }
-    });
-    InputStream file = Activator.getFile("templates/rcp/" + template[0]);
-    fillTypeFromTemplate(newType, imports, monitor, file);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// WizardPage
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createTypeMembers(IType newType, ImportsManager imports, IProgressMonitor monitor)
+			throws CoreException {
+		final String[] template = new String[1];
+		getShell().getDisplay().syncExec(new Runnable() {
+			@Override
+			public void run() {
+				for (Button button : m_buttons) {
+					if (button.getSelection()) {
+						template[0] = (String) button.getData();
+						break;
+					}
+				}
+			}
+		});
+		InputStream file = Activator.getFile("templates/rcp/" + template[0]);
+		fillTypeFromTemplate(newType, imports, monitor, file);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createLocalControls(Composite parent, int columns) {
-    // create main container
-    Composite baseComposite = new Composite(parent, SWT.NONE);
-    GridLayoutFactory.create(baseComposite).noMargins();
-    GridDataFactory.create(baseComposite).fillH().grabH().spanH(columns);
-    // create message label
-    Label label = new Label(baseComposite, SWT.NONE);
-    label.setText(WizardsMessages.PageBookWizardPage_basePageSelection);
-    // create all buttons
-    createButton(
-        m_buttons,
-        baseComposite,
-        "Page",
-        "class MyPage extends org.eclipse.ui.part.Page",
-        true,
-        "org.eclipse.ui.part.Page",
-        null,
-        "Page.jvt");
-    createButton(
-        m_buttons,
-        baseComposite,
-        "Page with IContentOutlinePage",
-        "class MyPage extends Page implements IContentOutlinePage",
-        false,
-        "org.eclipse.ui.part.Page",
-        "org.eclipse.ui.views.contentoutline.IContentOutlinePage",
-        "PageIContentOutlinePage.jvt");
-    createButton(
-        m_buttons,
-        baseComposite,
-        "Page with IPropertySheetPage",
-        "class MyPage extends Page implements IPropertySheetPage",
-        false,
-        "org.eclipse.ui.part.Page",
-        "org.eclipse.ui.views.properties.IPropertySheetPage",
-        "PageIPropertySheetPage.jvt");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createLocalControls(Composite parent, int columns) {
+		// create main container
+		Composite baseComposite = new Composite(parent, SWT.NONE);
+		GridLayoutFactory.create(baseComposite).noMargins();
+		GridDataFactory.create(baseComposite).fillH().grabH().spanH(columns);
+		// create message label
+		Label label = new Label(baseComposite, SWT.NONE);
+		label.setText(WizardsMessages.PageBookWizardPage_basePageSelection);
+		// create all buttons
+		createButton(
+				m_buttons,
+				baseComposite,
+				"Page",
+				"class MyPage extends org.eclipse.ui.part.Page",
+				true,
+				"org.eclipse.ui.part.Page",
+				null,
+				"Page.jvt");
+		createButton(
+				m_buttons,
+				baseComposite,
+				"Page with IContentOutlinePage",
+				"class MyPage extends Page implements IContentOutlinePage",
+				false,
+				"org.eclipse.ui.part.Page",
+				"org.eclipse.ui.views.contentoutline.IContentOutlinePage",
+				"PageIContentOutlinePage.jvt");
+		createButton(
+				m_buttons,
+				baseComposite,
+				"Page with IPropertySheetPage",
+				"class MyPage extends Page implements IPropertySheetPage",
+				false,
+				"org.eclipse.ui.part.Page",
+				"org.eclipse.ui.views.properties.IPropertySheetPage",
+				"PageIPropertySheetPage.jvt");
+	}
 
-  private void createButton(List<Button> buttons,
-      Composite parent,
-      String text,
-      String tooltip,
-      boolean selection,
-      final String superClass,
-      final String superInterface,
-      String template) {
-    // create button
-    final Button button = new Button(parent, SWT.RADIO);
-    GridDataFactory.create(button).indentH(24);
-    button.setText(text);
-    button.setToolTipText(tooltip);
-    button.setSelection(selection);
-    button.setData(template);
-    // create listener
-    SelectionListener listener = new SelectionAdapter() {
-      @Override
-      public void widgetSelected(SelectionEvent e) {
-        if (button.getSelection()) {
-          if (superClass == null) {
-            setSuperClass("java.lang.Object", true);
-          } else {
-            setSuperClass(superClass, true);
-          }
-          if (superInterface == null) {
-            setSuperInterfaces(Collections.EMPTY_LIST, false);
-          } else {
-            List<String> interfaces = new ArrayList<String>();
-            interfaces.add(superInterface);
-            setSuperInterfaces(interfaces, false);
-          }
-        }
-      }
-    };
-    button.addSelectionListener(listener);
-    if (selection) {
-      listener.widgetSelected(null);
-    }
-    // add to buttons
-    buttons.add(button);
-  }
+	private void createButton(List<Button> buttons,
+			Composite parent,
+			String text,
+			String tooltip,
+			boolean selection,
+			final String superClass,
+			final String superInterface,
+			String template) {
+		// create button
+		final Button button = new Button(parent, SWT.RADIO);
+		GridDataFactory.create(button).indentH(24);
+		button.setText(text);
+		button.setToolTipText(tooltip);
+		button.setSelection(selection);
+		button.setData(template);
+		// create listener
+		SelectionListener listener = new SelectionAdapter() {
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				if (button.getSelection()) {
+					if (superClass == null) {
+						setSuperClass("java.lang.Object", true);
+					} else {
+						setSuperClass(superClass, true);
+					}
+					if (superInterface == null) {
+						setSuperInterfaces(Collections.EMPTY_LIST, false);
+					} else {
+						List<String> interfaces = new ArrayList<String>();
+						interfaces.add(superInterface);
+						setSuperInterfaces(interfaces, false);
+					}
+				}
+			}
+		};
+		button.addSelectionListener(listener);
+		if (selection) {
+			listener.widgetSelected(null);
+		}
+		// add to buttons
+		buttons.add(button);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/rcp/perspective/PerspectiveWizard.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/rcp/perspective/PerspectiveWizard.java
index 54908cb96..22ab62f51 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/rcp/perspective/PerspectiveWizard.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/rcp/perspective/PerspectiveWizard.java
@@ -23,22 +23,22 @@
  * @coverage rcp.wizards.ui
  */
 public final class PerspectiveWizard extends RcpWizard {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public PerspectiveWizard() {
-    setWindowTitle(WizardsMessages.PerspectiveWizard_title);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public PerspectiveWizard() {
+		setWindowTitle(WizardsMessages.PerspectiveWizard_title);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Wizard
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected AbstractDesignWizardPage createMainPage() {
-    return new PerspectiveWizardPage();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Wizard
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected AbstractDesignWizardPage createMainPage() {
+		return new PerspectiveWizardPage();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/rcp/perspective/PerspectiveWizardPage.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/rcp/perspective/PerspectiveWizardPage.java
index 123bb9b39..99c03b13c 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/rcp/perspective/PerspectiveWizardPage.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/rcp/perspective/PerspectiveWizardPage.java
@@ -34,64 +34,64 @@
  * @coverage rcp.wizards.ui
  */
 public final class PerspectiveWizardPage extends RcpPartWizardPage {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public PerspectiveWizardPage() {
-    setTitle(WizardsMessages.PerspectiveWizardPage_title);
-    setImageDescriptor(Activator.getImageDescriptor("wizard/Perspective/banner.gif"));
-    setDescription(WizardsMessages.PerspectiveWizardPage_description);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public PerspectiveWizardPage() {
+		setTitle(WizardsMessages.PerspectiveWizardPage_title);
+		setImageDescriptor(Activator.getImageDescriptor("wizard/Perspective/banner.gif"));
+		setDescription(WizardsMessages.PerspectiveWizardPage_description);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // WizardPage
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createTypeMembers(IType newType, ImportsManager imports, IProgressMonitor monitor)
-      throws CoreException {
-    super.createTypeMembers(newType, imports, monitor);
-    InputStream file = Activator.getFile("templates/rcp/PerspectiveFactory.jvt");
-    fillTypeFromTemplate(newType, imports, monitor, file);
-    if (m_pdeUtils != null) {
-      try {
-        m_pdeUtils.createPerspectiveElement(m_newTypeClassName, getNameText(), m_newTypeClassName);
-      } catch (Throwable e) {
-        throw new CoreException(new Status(IStatus.ERROR,
-            Activator.PLUGIN_ID,
-            IStatus.OK,
-            WizardsMessages.PerspectiveWizardPage_errorPluginXml,
-            e));
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// WizardPage
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createTypeMembers(IType newType, ImportsManager imports, IProgressMonitor monitor)
+			throws CoreException {
+		super.createTypeMembers(newType, imports, monitor);
+		InputStream file = Activator.getFile("templates/rcp/PerspectiveFactory.jvt");
+		fillTypeFromTemplate(newType, imports, monitor, file);
+		if (m_pdeUtils != null) {
+			try {
+				m_pdeUtils.createPerspectiveElement(m_newTypeClassName, getNameText(), m_newTypeClassName);
+			} catch (Throwable e) {
+				throw new CoreException(new Status(IStatus.ERROR,
+						Activator.PLUGIN_ID,
+						IStatus.OK,
+						WizardsMessages.PerspectiveWizardPage_errorPluginXml,
+						e));
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createDesignSuperClassControls(Composite composite, int nColumns) {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createDesignSuperClassControls(Composite composite, int nColumns) {
+	}
 
-  @Override
-  protected void initTypePage(IJavaElement elem) {
-    super.initTypePage(elem);
-    List<String> interfaces = new ArrayList<String>();
-    interfaces.add("org.eclipse.ui.IPerspectiveFactory");
-    setSuperInterfaces(interfaces, false);
-  }
+	@Override
+	protected void initTypePage(IJavaElement elem) {
+		super.initTypePage(elem);
+		List<String> interfaces = new ArrayList<String>();
+		interfaces.add("org.eclipse.ui.IPerspectiveFactory");
+		setSuperInterfaces(interfaces, false);
+	}
 
-  @Override
-  protected void createLocalControls(Composite parent, int columns) {
-    createLocalControls(
-        parent,
-        columns,
-        WizardsMessages.PerspectiveWizardPage_nameLabel,
-        WizardsMessages.PerspectiveWizardPage_nameDefault);
-  }
+	@Override
+	protected void createLocalControls(Composite parent, int columns) {
+		createLocalControls(
+				parent,
+				columns,
+				WizardsMessages.PerspectiveWizardPage_nameLabel,
+				WizardsMessages.PerspectiveWizardPage_nameDefault);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/rcp/preference/PreferencePageWizard.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/rcp/preference/PreferencePageWizard.java
index eb2d52a57..fe8849052 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/rcp/preference/PreferencePageWizard.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/rcp/preference/PreferencePageWizard.java
@@ -24,22 +24,22 @@
  * @coverage rcp.wizards.ui
  */
 public final class PreferencePageWizard extends RcpWizard {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public PreferencePageWizard() {
-    setWindowTitle(WizardsMessages.PreferencePageWizard_title);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public PreferencePageWizard() {
+		setWindowTitle(WizardsMessages.PreferencePageWizard_title);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Wizard
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected AbstractDesignWizardPage createMainPage() {
-    return new PreferencePageWizardPage();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Wizard
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected AbstractDesignWizardPage createMainPage() {
+		return new PreferencePageWizardPage();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/rcp/preference/PreferencePageWizardPage.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/rcp/preference/PreferencePageWizardPage.java
index 17b5e46f7..da5a3d9ab 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/rcp/preference/PreferencePageWizardPage.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/rcp/preference/PreferencePageWizardPage.java
@@ -44,148 +44,148 @@
  * @coverage rcp.wizards.ui
  */
 public final class PreferencePageWizardPage extends RcpWizardPage {
-  private final List<Button> m_buttons = new ArrayList<Button>();
+	private final List<Button> m_buttons = new ArrayList<Button>();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public PreferencePageWizardPage() {
-    setTitle(WizardsMessages.PreferencePageWizardPage_title);
-    setImageDescriptor(Activator.getImageDescriptor("wizard/PreferencePage/banner.gif"));
-    setDescription(WizardsMessages.PreferencePageWizardPage_description);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public PreferencePageWizardPage() {
+		setTitle(WizardsMessages.PreferencePageWizardPage_title);
+		setImageDescriptor(Activator.getImageDescriptor("wizard/PreferencePage/banner.gif"));
+		setDescription(WizardsMessages.PreferencePageWizardPage_description);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // WizardPage
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createTypeMembers(IType newType, ImportsManager imports, IProgressMonitor monitor)
-      throws CoreException {
-    final String[] template = new String[1];
-    getShell().getDisplay().syncExec(new Runnable() {
-      @Override
-      public void run() {
-        for (Button button : m_buttons) {
-          if (button.getSelection()) {
-            template[0] = (String) button.getData();
-            break;
-          }
-        }
-      }
-    });
-    try {
-      if ("FieldLayoutPreferencePage.jvt".equals(template[0])) {
-        ProjectUtils.ensureResourceType(
-            newType.getJavaProject(),
-            Activator.getDefault().getBundle(),
-            "org.eclipse.wb.swt.FieldLayoutPreferencePage");
-      }
-    } catch (Throwable e) {
-      throw new CoreException(new Status(IStatus.ERROR,
-          Activator.PLUGIN_ID,
-          IStatus.OK,
-          "Error ensure org.eclipse.wb.swt.FieldLayoutPreferencePage",
-          e));
-    }
-    InputStream file = Activator.getFile("templates/rcp/" + template[0]);
-    fillTypeFromTemplate(newType, imports, monitor, file);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// WizardPage
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createTypeMembers(IType newType, ImportsManager imports, IProgressMonitor monitor)
+			throws CoreException {
+		final String[] template = new String[1];
+		getShell().getDisplay().syncExec(new Runnable() {
+			@Override
+			public void run() {
+				for (Button button : m_buttons) {
+					if (button.getSelection()) {
+						template[0] = (String) button.getData();
+						break;
+					}
+				}
+			}
+		});
+		try {
+			if ("FieldLayoutPreferencePage.jvt".equals(template[0])) {
+				ProjectUtils.ensureResourceType(
+						newType.getJavaProject(),
+						Activator.getDefault().getBundle(),
+						"org.eclipse.wb.swt.FieldLayoutPreferencePage");
+			}
+		} catch (Throwable e) {
+			throw new CoreException(new Status(IStatus.ERROR,
+					Activator.PLUGIN_ID,
+					IStatus.OK,
+					"Error ensure org.eclipse.wb.swt.FieldLayoutPreferencePage",
+					e));
+		}
+		InputStream file = Activator.getFile("templates/rcp/" + template[0]);
+		fillTypeFromTemplate(newType, imports, monitor, file);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createLocalControls(Composite parent, int columns) {
-    // create main container
-    Composite baseComposite = new Composite(parent, SWT.NONE);
-    GridLayoutFactory.create(baseComposite).noMargins();
-    GridDataFactory.create(baseComposite).fillH().grabH().spanH(columns);
-    //
-    final Button rcpInterfaceButton = new Button(baseComposite, SWT.CHECK);
-    GridDataFactory.create(rcpInterfaceButton).fillH().grabH();
-    rcpInterfaceButton.setText("Implement org.eclipse.ui.IWorkbenchPreferencePage interface");
-    rcpInterfaceButton.addSelectionListener(new SelectionAdapter() {
-      @Override
-      public void widgetSelected(SelectionEvent e) {
-        if (rcpInterfaceButton.getSelection()) {
-          List<String> interfaces = new ArrayList<String>();
-          interfaces.add("org.eclipse.ui.IWorkbenchPreferencePage");
-          setSuperInterfaces(interfaces, false);
-        } else {
-          setSuperInterfaces(Collections.EMPTY_LIST, false);
-        }
-      }
-    });
-    //
-    new Label(baseComposite, SWT.NONE);
-    // create message label
-    Label label = new Label(baseComposite, SWT.NONE);
-    label.setText(WizardsMessages.PreferencePageWizardPage_typeSelection);
-    // create all buttons
-    createButton(
-        m_buttons,
-        baseComposite,
-        WizardsMessages.PreferencePageWizardPage_typeStandardLabel,
-        WizardsMessages.PreferencePageWizardPage_typeStandardDescription,
-        true,
-        "org.eclipse.jface.preference.PreferencePage",
-        "PreferencePage.jvt");
-    createButton(
-        m_buttons,
-        baseComposite,
-        WizardsMessages.PreferencePageWizardPage_typeFieldEditorLabel,
-        WizardsMessages.PreferencePageWizardPage_typeFieldEditorDescription,
-        false,
-        "org.eclipse.jface.preference.FieldEditorPreferencePage",
-        "FieldEditorPreferencePage.jvt");
-    createButton(
-        m_buttons,
-        baseComposite,
-        WizardsMessages.PreferencePageWizardPage_typeFieldLayoutLabel,
-        WizardsMessages.PreferencePageWizardPage_typeFieldLayoutDescription,
-        false,
-        "org.eclipse.wb.swt.FieldLayoutPreferencePage",
-        "FieldLayoutPreferencePage.jvt");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createLocalControls(Composite parent, int columns) {
+		// create main container
+		Composite baseComposite = new Composite(parent, SWT.NONE);
+		GridLayoutFactory.create(baseComposite).noMargins();
+		GridDataFactory.create(baseComposite).fillH().grabH().spanH(columns);
+		//
+		final Button rcpInterfaceButton = new Button(baseComposite, SWT.CHECK);
+		GridDataFactory.create(rcpInterfaceButton).fillH().grabH();
+		rcpInterfaceButton.setText("Implement org.eclipse.ui.IWorkbenchPreferencePage interface");
+		rcpInterfaceButton.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				if (rcpInterfaceButton.getSelection()) {
+					List<String> interfaces = new ArrayList<String>();
+					interfaces.add("org.eclipse.ui.IWorkbenchPreferencePage");
+					setSuperInterfaces(interfaces, false);
+				} else {
+					setSuperInterfaces(Collections.EMPTY_LIST, false);
+				}
+			}
+		});
+		//
+		new Label(baseComposite, SWT.NONE);
+		// create message label
+		Label label = new Label(baseComposite, SWT.NONE);
+		label.setText(WizardsMessages.PreferencePageWizardPage_typeSelection);
+		// create all buttons
+		createButton(
+				m_buttons,
+				baseComposite,
+				WizardsMessages.PreferencePageWizardPage_typeStandardLabel,
+				WizardsMessages.PreferencePageWizardPage_typeStandardDescription,
+				true,
+				"org.eclipse.jface.preference.PreferencePage",
+				"PreferencePage.jvt");
+		createButton(
+				m_buttons,
+				baseComposite,
+				WizardsMessages.PreferencePageWizardPage_typeFieldEditorLabel,
+				WizardsMessages.PreferencePageWizardPage_typeFieldEditorDescription,
+				false,
+				"org.eclipse.jface.preference.FieldEditorPreferencePage",
+				"FieldEditorPreferencePage.jvt");
+		createButton(
+				m_buttons,
+				baseComposite,
+				WizardsMessages.PreferencePageWizardPage_typeFieldLayoutLabel,
+				WizardsMessages.PreferencePageWizardPage_typeFieldLayoutDescription,
+				false,
+				"org.eclipse.wb.swt.FieldLayoutPreferencePage",
+				"FieldLayoutPreferencePage.jvt");
+	}
 
-  private void createButton(List<Button> buttons,
-      Composite parent,
-      String text,
-      String tooltip,
-      boolean selection,
-      final String superClass,
-      String template) {
-    // create button
-    final Button button = new Button(parent, SWT.RADIO);
-    GridDataFactory.create(button).indentH(24);
-    button.setText(text);
-    button.setToolTipText(tooltip);
-    button.setSelection(selection);
-    button.setData(template);
-    // create listener
-    SelectionListener listener = new SelectionAdapter() {
-      @Override
-      public void widgetSelected(SelectionEvent e) {
-        if (button.getSelection()) {
-          if (superClass == null) {
-            setSuperClass("java.lang.Object", true);
-          } else {
-            setSuperClass(superClass, true);
-          }
-        }
-      }
-    };
-    button.addSelectionListener(listener);
-    if (selection) {
-      listener.widgetSelected(null);
-    }
-    // add to buttons
-    buttons.add(button);
-  }
+	private void createButton(List<Button> buttons,
+			Composite parent,
+			String text,
+			String tooltip,
+			boolean selection,
+			final String superClass,
+			String template) {
+		// create button
+		final Button button = new Button(parent, SWT.RADIO);
+		GridDataFactory.create(button).indentH(24);
+		button.setText(text);
+		button.setToolTipText(tooltip);
+		button.setSelection(selection);
+		button.setData(template);
+		// create listener
+		SelectionListener listener = new SelectionAdapter() {
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				if (button.getSelection()) {
+					if (superClass == null) {
+						setSuperClass("java.lang.Object", true);
+					} else {
+						setSuperClass(superClass, true);
+					}
+				}
+			}
+		};
+		button.addSelectionListener(listener);
+		if (selection) {
+			listener.widgetSelected(null);
+		}
+		// add to buttons
+		buttons.add(button);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/rcp/property/PropertyPageWizard.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/rcp/property/PropertyPageWizard.java
index 0fb5ca93e..edf64d028 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/rcp/property/PropertyPageWizard.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/rcp/property/PropertyPageWizard.java
@@ -24,22 +24,22 @@
  * @coverage rcp.wizards.ui
  */
 public final class PropertyPageWizard extends RcpWizard {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public PropertyPageWizard() {
-    setWindowTitle(WizardsMessages.PropertyPageWizard_title);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public PropertyPageWizard() {
+		setWindowTitle(WizardsMessages.PropertyPageWizard_title);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Wizard
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected AbstractDesignWizardPage createMainPage() {
-    return new PropertyPageWizardPage();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Wizard
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected AbstractDesignWizardPage createMainPage() {
+		return new PropertyPageWizardPage();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/rcp/property/PropertyPageWizardPage.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/rcp/property/PropertyPageWizardPage.java
index ba9a502a2..289ba54c5 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/rcp/property/PropertyPageWizardPage.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/rcp/property/PropertyPageWizardPage.java
@@ -30,37 +30,37 @@
  * @coverage rcp.wizards.ui
  */
 public final class PropertyPageWizardPage extends RcpWizardPage {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public PropertyPageWizardPage() {
-    setTitle(WizardsMessages.PropertyPageWizardPage_title);
-    setImageDescriptor(Activator.getImageDescriptor("wizard/PropertyPage/banner.gif"));
-    setDescription(WizardsMessages.PropertyPageWizardPage_description);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public PropertyPageWizardPage() {
+		setTitle(WizardsMessages.PropertyPageWizardPage_title);
+		setImageDescriptor(Activator.getImageDescriptor("wizard/PropertyPage/banner.gif"));
+		setDescription(WizardsMessages.PropertyPageWizardPage_description);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // WizardPage
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createTypeMembers(IType newType, ImportsManager imports, IProgressMonitor monitor)
-      throws CoreException {
-    InputStream file = Activator.getFile("templates/rcp/PropertyPage.jvt");
-    fillTypeFromTemplate(newType, imports, monitor, file);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// WizardPage
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createTypeMembers(IType newType, ImportsManager imports, IProgressMonitor monitor)
+			throws CoreException {
+		InputStream file = Activator.getFile("templates/rcp/PropertyPage.jvt");
+		fillTypeFromTemplate(newType, imports, monitor, file);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void initTypePage(IJavaElement elem) {
-    super.initTypePage(elem);
-    setSuperClass("org.eclipse.ui.dialogs.PropertyPage", true);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void initTypePage(IJavaElement elem) {
+		super.initTypePage(elem);
+		setSuperClass("org.eclipse.ui.dialogs.PropertyPage", true);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/rcp/view/ViewPartWizard.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/rcp/view/ViewPartWizard.java
index 0ee37ce42..c7fe3d536 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/rcp/view/ViewPartWizard.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/rcp/view/ViewPartWizard.java
@@ -24,22 +24,22 @@
  * @coverage rcp.wizards.ui
  */
 public final class ViewPartWizard extends RcpWizard {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ViewPartWizard() {
-    setWindowTitle(WizardsMessages.ViewPartWizard_title);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ViewPartWizard() {
+		setWindowTitle(WizardsMessages.ViewPartWizard_title);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Wizard
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected AbstractDesignWizardPage createMainPage() {
-    return new ViewPartWizardPage();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Wizard
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected AbstractDesignWizardPage createMainPage() {
+		return new ViewPartWizardPage();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/rcp/view/ViewPartWizardPage.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/rcp/view/ViewPartWizardPage.java
index 4143e9502..fb95b0fb8 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/rcp/view/ViewPartWizardPage.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/rcp/view/ViewPartWizardPage.java
@@ -24,24 +24,24 @@
  * @coverage rcp.wizards.ui
  */
 public final class ViewPartWizardPage extends AbstractViewPartWizardPage {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ViewPartWizardPage() {
-    setTitle(WizardsMessages.ViewPartWizardPage_title);
-    setImageDescriptor(Activator.getImageDescriptor("wizard/ViewPart/banner.gif"));
-    setDescription(WizardsMessages.ViewPartWizardPage_description);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ViewPartWizardPage() {
+		setTitle(WizardsMessages.ViewPartWizardPage_title);
+		setImageDescriptor(Activator.getImageDescriptor("wizard/ViewPart/banner.gif"));
+		setDescription(WizardsMessages.ViewPartWizardPage_description);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // WizardPage
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getCreateTemplate() {
-    return "templates/rcp/ViewPart.jvt";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// WizardPage
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getCreateTemplate() {
+		return "templates/rcp/ViewPart.jvt";
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/swt/application/SwtApplicationWizard.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/swt/application/SwtApplicationWizard.java
index b2acdd33a..39226bb79 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/swt/application/SwtApplicationWizard.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/swt/application/SwtApplicationWizard.java
@@ -23,22 +23,22 @@
  * @coverage rcp.wizards.ui
  */
 public final class SwtApplicationWizard extends RcpWizard {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SwtApplicationWizard() {
-    setWindowTitle(WizardsMessages.SwtApplicationWizard_title);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SwtApplicationWizard() {
+		setWindowTitle(WizardsMessages.SwtApplicationWizard_title);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Wizard
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected AbstractDesignWizardPage createMainPage() {
-    return new SwtApplicationWizardPage();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Wizard
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected AbstractDesignWizardPage createMainPage() {
+		return new SwtApplicationWizardPage();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/swt/application/SwtApplicationWizardPage.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/swt/application/SwtApplicationWizardPage.java
index 45e04110c..a195da154 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/swt/application/SwtApplicationWizardPage.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/swt/application/SwtApplicationWizardPage.java
@@ -35,86 +35,86 @@
  * @coverage rcp.wizards.ui
  */
 public final class SwtApplicationWizardPage extends RcpWizardPage {
-  private Button m_createContentsButton;
-  private Button m_openButton;
-  private Button m_mainButton;
+	private Button m_createContentsButton;
+	private Button m_openButton;
+	private Button m_mainButton;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SwtApplicationWizardPage() {
-    setTitle(WizardsMessages.SwtApplicationWizardPage_title);
-    setImageDescriptor(Activator.getImageDescriptor("wizard/ApplicationWindow/banner.gif"));
-    setDescription(WizardsMessages.SwtApplicationWizardPage_description);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SwtApplicationWizardPage() {
+		setTitle(WizardsMessages.SwtApplicationWizardPage_title);
+		setImageDescriptor(Activator.getImageDescriptor("wizard/ApplicationWindow/banner.gif"));
+		setDescription(WizardsMessages.SwtApplicationWizardPage_description);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // WizardPage
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createTypeMembers(IType newType, ImportsManager imports, IProgressMonitor monitor)
-      throws CoreException {
-    InputStream file = Activator.getFile("templates/swt/" + getTemplateName() + ".jvt");
-    fillTypeFromTemplate(newType, imports, monitor, file);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// WizardPage
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createTypeMembers(IType newType, ImportsManager imports, IProgressMonitor monitor)
+			throws CoreException {
+		InputStream file = Activator.getFile("templates/swt/" + getTemplateName() + ".jvt");
+		fillTypeFromTemplate(newType, imports, monitor, file);
+	}
 
-  private String getTemplateName() {
-    final boolean selection[] = new boolean[2];
-    getShell().getDisplay().syncExec(new Runnable() {
-      @Override
-      public void run() {
-        selection[0] = m_openButton.getSelection();
-        selection[1] = m_mainButton.getSelection();
-      }
-    });
-    if (selection[0]) {
-      return "Application2";
-    }
-    if (selection[1]) {
-      return "Application3";
-    }
-    return "Application1";
-  }
+	private String getTemplateName() {
+		final boolean selection[] = new boolean[2];
+		getShell().getDisplay().syncExec(new Runnable() {
+			@Override
+			public void run() {
+				selection[0] = m_openButton.getSelection();
+				selection[1] = m_mainButton.getSelection();
+			}
+		});
+		if (selection[0]) {
+			return "Application2";
+		}
+		if (selection[1]) {
+			return "Application3";
+		}
+		return "Application1";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createDesignSuperClassControls(Composite composite, int nColumns) {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createDesignSuperClassControls(Composite composite, int nColumns) {
+	}
 
-  @Override
-  protected void createLocalControls(Composite parent, int columns) {
-    Composite methodsComposite = new Composite(parent, SWT.NONE);
-    GridLayoutFactory.create(methodsComposite).margins(0);
-    GridDataFactory.create(methodsComposite).fillH().spanH(columns);
-    //
-    Label label = new Label(methodsComposite, SWT.NONE);
-    label.setText(WizardsMessages.SwtApplicationWizardPage_createContentsIn);
-    //
-    m_createContentsButton = new Button(methodsComposite, SWT.RADIO);
-    m_createContentsButton.setText("protected " + getCreateMethod("createContents") + "() method");
-    m_createContentsButton.setSelection(true);
-    GridDataFactory.create(m_createContentsButton).indentH(24);
-    //
-    m_openButton = new Button(methodsComposite, SWT.RADIO);
-    m_openButton.setText("public open() method");
-    GridDataFactory.create(m_openButton).indentH(24);
-    //
-    m_mainButton = new Button(methodsComposite, SWT.RADIO);
-    m_mainButton.setText("public static main() method");
-    GridDataFactory.create(m_mainButton).indentH(24);
-    //
-    createSeparator(parent, columns);
-    // I always use same names during tests
-    if (EnvironmentUtils.DEVELOPER_HOST) {
-      setTypeName("Application_1", true);
-    }
-  }
+	@Override
+	protected void createLocalControls(Composite parent, int columns) {
+		Composite methodsComposite = new Composite(parent, SWT.NONE);
+		GridLayoutFactory.create(methodsComposite).margins(0);
+		GridDataFactory.create(methodsComposite).fillH().spanH(columns);
+		//
+		Label label = new Label(methodsComposite, SWT.NONE);
+		label.setText(WizardsMessages.SwtApplicationWizardPage_createContentsIn);
+		//
+		m_createContentsButton = new Button(methodsComposite, SWT.RADIO);
+		m_createContentsButton.setText("protected " + getCreateMethod("createContents") + "() method");
+		m_createContentsButton.setSelection(true);
+		GridDataFactory.create(m_createContentsButton).indentH(24);
+		//
+		m_openButton = new Button(methodsComposite, SWT.RADIO);
+		m_openButton.setText("public open() method");
+		GridDataFactory.create(m_openButton).indentH(24);
+		//
+		m_mainButton = new Button(methodsComposite, SWT.RADIO);
+		m_mainButton.setText("public static main() method");
+		GridDataFactory.create(m_mainButton).indentH(24);
+		//
+		createSeparator(parent, columns);
+		// I always use same names during tests
+		if (EnvironmentUtils.DEVELOPER_HOST) {
+			setTypeName("Application_1", true);
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/swt/composite/CompositeWizard.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/swt/composite/CompositeWizard.java
index a87b41671..5c9127af8 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/swt/composite/CompositeWizard.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/swt/composite/CompositeWizard.java
@@ -24,22 +24,22 @@
  * @coverage rcp.wizards.ui
  */
 public final class CompositeWizard extends RcpWizard {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CompositeWizard() {
-    setWindowTitle(WizardsMessages.CompositeWizard_title);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CompositeWizard() {
+		setWindowTitle(WizardsMessages.CompositeWizard_title);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Pages
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected AbstractDesignWizardPage createMainPage() {
-    return new CompositeWizardPage();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Pages
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected AbstractDesignWizardPage createMainPage() {
+		return new CompositeWizardPage();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/swt/composite/CompositeWizardPage.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/swt/composite/CompositeWizardPage.java
index 0f14bdaf7..5eee4626a 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/swt/composite/CompositeWizardPage.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/swt/composite/CompositeWizardPage.java
@@ -37,74 +37,74 @@
  * @coverage rcp.wizards.ui
  */
 public final class CompositeWizardPage extends RcpWizardPage {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CompositeWizardPage() {
-    setTitle(WizardsMessages.CompositeWizardPage_title);
-    setImageDescriptor(Activator.getImageDescriptor("wizard/Composite/banner.gif"));
-    setDescription(WizardsMessages.CompositeWizardPage_description);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CompositeWizardPage() {
+		setTitle(WizardsMessages.CompositeWizardPage_title);
+		setImageDescriptor(Activator.getImageDescriptor("wizard/Composite/banner.gif"));
+		setDescription(WizardsMessages.CompositeWizardPage_description);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // WizardPage
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createTypeMembers(IType newType, ImportsManager imports, IProgressMonitor monitor)
-      throws CoreException {
-    InputStream file = Activator.getFile("templates/swt/Composite.jvt");
-    fillTypeFromTemplate(newType, imports, monitor, file);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// WizardPage
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createTypeMembers(IType newType, ImportsManager imports, IProgressMonitor monitor)
+			throws CoreException {
+		InputStream file = Activator.getFile("templates/swt/Composite.jvt");
+		fillTypeFromTemplate(newType, imports, monitor, file);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void initTypePage(IJavaElement elem) {
-    super.initTypePage(elem);
-    setSuperClass("org.eclipse.swt.widgets.Composite", true);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void initTypePage(IJavaElement elem) {
+		super.initTypePage(elem);
+		setSuperClass("org.eclipse.swt.widgets.Composite", true);
+	}
 
-  @Override
-  protected void createLocalControls(Composite parent, int columns) {
-    Composite superClassComposite = new Composite(parent, SWT.NONE);
-    GridLayoutFactory.create(superClassComposite).margins(0);
-    GridDataFactory.create(superClassComposite).fillH().spanH(columns);
-    //
-    Label label = new Label(superClassComposite, SWT.NONE);
-    label.setText(WizardsMessages.CompositeWizardPage_superClass);
-    //
-    final Button compositeButton = new Button(superClassComposite, SWT.RADIO);
-    compositeButton.setText("org.eclipse.swt.widgets.&Composite");
-    compositeButton.setSelection(true);
-    GridDataFactory.create(compositeButton).indentH(24);
-    compositeButton.addSelectionListener(new SelectionAdapter() {
-      @Override
-      public void widgetSelected(SelectionEvent e) {
-        if (compositeButton.getSelection()) {
-          setSuperClass("org.eclipse.swt.widgets.Composite", true);
-        }
-      }
-    });
-    //
-    final Button groupButton = new Button(superClassComposite, SWT.RADIO);
-    groupButton.setText("org.eclipse.swt.widgets.&Group");
-    GridDataFactory.create(groupButton).indentH(24);
-    groupButton.addSelectionListener(new SelectionAdapter() {
-      @Override
-      public void widgetSelected(SelectionEvent e) {
-        if (groupButton.getSelection()) {
-          setSuperClass("org.eclipse.swt.widgets.Group", true);
-        }
-      }
-    });
-    //
-    createSeparator(parent, columns);
-  }
+	@Override
+	protected void createLocalControls(Composite parent, int columns) {
+		Composite superClassComposite = new Composite(parent, SWT.NONE);
+		GridLayoutFactory.create(superClassComposite).margins(0);
+		GridDataFactory.create(superClassComposite).fillH().spanH(columns);
+		//
+		Label label = new Label(superClassComposite, SWT.NONE);
+		label.setText(WizardsMessages.CompositeWizardPage_superClass);
+		//
+		final Button compositeButton = new Button(superClassComposite, SWT.RADIO);
+		compositeButton.setText("org.eclipse.swt.widgets.&Composite");
+		compositeButton.setSelection(true);
+		GridDataFactory.create(compositeButton).indentH(24);
+		compositeButton.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				if (compositeButton.getSelection()) {
+					setSuperClass("org.eclipse.swt.widgets.Composite", true);
+				}
+			}
+		});
+		//
+		final Button groupButton = new Button(superClassComposite, SWT.RADIO);
+		groupButton.setText("org.eclipse.swt.widgets.&Group");
+		GridDataFactory.create(groupButton).indentH(24);
+		groupButton.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				if (groupButton.getSelection()) {
+					setSuperClass("org.eclipse.swt.widgets.Group", true);
+				}
+			}
+		});
+		//
+		createSeparator(parent, columns);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/swt/dialog/DialogWizard.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/swt/dialog/DialogWizard.java
index 32e6d4fa6..d63486830 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/swt/dialog/DialogWizard.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/swt/dialog/DialogWizard.java
@@ -24,22 +24,22 @@
  * @coverage rcp.wizards.ui
  */
 public final class DialogWizard extends RcpWizard {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DialogWizard() {
-    setWindowTitle(WizardsMessages.DialogWizard_title2);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DialogWizard() {
+		setWindowTitle(WizardsMessages.DialogWizard_title2);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Wizard
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected AbstractDesignWizardPage createMainPage() {
-    return new DialogWizardPage();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Wizard
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected AbstractDesignWizardPage createMainPage() {
+		return new DialogWizardPage();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/swt/dialog/DialogWizardPage.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/swt/dialog/DialogWizardPage.java
index 87bbc0736..f8e6fcba5 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/swt/dialog/DialogWizardPage.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/swt/dialog/DialogWizardPage.java
@@ -30,37 +30,37 @@
  * @coverage rcp.wizards.ui
  */
 public final class DialogWizardPage extends RcpWizardPage {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DialogWizardPage() {
-    setTitle(WizardsMessages.DialogWizardPage_title2);
-    setImageDescriptor(Activator.getImageDescriptor("wizard/Dialog/banner.gif"));
-    setDescription(WizardsMessages.DialogWizardPage_description2);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DialogWizardPage() {
+		setTitle(WizardsMessages.DialogWizardPage_title2);
+		setImageDescriptor(Activator.getImageDescriptor("wizard/Dialog/banner.gif"));
+		setDescription(WizardsMessages.DialogWizardPage_description2);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // WizardPage
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createTypeMembers(IType newType, ImportsManager imports, IProgressMonitor monitor)
-      throws CoreException {
-    InputStream file = Activator.getFile("templates/swt/Dialog.jvt");
-    fillTypeFromTemplate(newType, imports, monitor, file);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// WizardPage
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createTypeMembers(IType newType, ImportsManager imports, IProgressMonitor monitor)
+			throws CoreException {
+		InputStream file = Activator.getFile("templates/swt/Dialog.jvt");
+		fillTypeFromTemplate(newType, imports, monitor, file);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void initTypePage(IJavaElement elem) {
-    super.initTypePage(elem);
-    setSuperClass("org.eclipse.swt.widgets.Dialog", true);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void initTypePage(IJavaElement elem) {
+		super.initTypePage(elem);
+		setSuperClass("org.eclipse.swt.widgets.Dialog", true);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/swt/shell/ShellWizard.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/swt/shell/ShellWizard.java
index 534583c46..97cb09fa7 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/swt/shell/ShellWizard.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/swt/shell/ShellWizard.java
@@ -24,22 +24,22 @@
  * @coverage rcp.wizards.ui
  */
 public final class ShellWizard extends RcpWizard {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ShellWizard() {
-    setWindowTitle(WizardsMessages.ShellWizard_title);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ShellWizard() {
+		setWindowTitle(WizardsMessages.ShellWizard_title);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Wizard
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected AbstractDesignWizardPage createMainPage() {
-    return new ShellWizardPage();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Wizard
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected AbstractDesignWizardPage createMainPage() {
+		return new ShellWizardPage();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/swt/shell/ShellWizardPage.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/swt/shell/ShellWizardPage.java
index d85ce7913..698868c5e 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/swt/shell/ShellWizardPage.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/wizards/swt/shell/ShellWizardPage.java
@@ -30,37 +30,37 @@
  * @coverage rcp.wizards.ui
  */
 public final class ShellWizardPage extends RcpWizardPage {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ShellWizardPage() {
-    setTitle(WizardsMessages.ShellWizardPage_title);
-    setImageDescriptor(Activator.getImageDescriptor("wizard/Shell/banner.gif"));
-    setDescription(WizardsMessages.ShellWizardPage_description);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ShellWizardPage() {
+		setTitle(WizardsMessages.ShellWizardPage_title);
+		setImageDescriptor(Activator.getImageDescriptor("wizard/Shell/banner.gif"));
+		setDescription(WizardsMessages.ShellWizardPage_description);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // WizardPage
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createTypeMembers(IType newType, ImportsManager imports, IProgressMonitor monitor)
-      throws CoreException {
-    InputStream file = Activator.getFile("templates/swt/Shell.jvt");
-    fillTypeFromTemplate(newType, imports, monitor, file);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// WizardPage
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createTypeMembers(IType newType, ImportsManager imports, IProgressMonitor monitor)
+			throws CoreException {
+		InputStream file = Activator.getFile("templates/swt/Shell.jvt");
+		fillTypeFromTemplate(newType, imports, monitor, file);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void initTypePage(IJavaElement elem) {
-    super.initTypePage(elem);
-    setSuperClass("org.eclipse.swt.widgets.Shell", true);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void initTypePage(IJavaElement elem) {
+		super.initTypePage(elem);
+		setSuperClass("org.eclipse.swt.widgets.Shell", true);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/Activator.java b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/Activator.java
index a0c04c6f9..25908245a 100644
--- a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/Activator.java
+++ b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/Activator.java
@@ -28,71 +28,71 @@
  * @coverage swing.FormLayout.model
  */
 public final class Activator extends AbstractUIPlugin {
-  public static final String PLUGIN_ID = "org.eclipse.wb.swing.FormLayout";
-  private static Activator m_plugin;
+	public static final String PLUGIN_ID = "org.eclipse.wb.swing.FormLayout";
+	private static Activator m_plugin;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Bundle operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void start(BundleContext context) throws Exception {
-    super.start(context);
-    m_plugin = this;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Bundle operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+		m_plugin = this;
+	}
 
-  @Override
-  public void stop(BundleContext context) throws Exception {
-    m_plugin = null;
-    super.stop(context);
-  }
+	@Override
+	public void stop(BundleContext context) throws Exception {
+		m_plugin = null;
+		super.stop(context);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the instance of {@link Activator}.
-   */
-  public static Activator getDefault() {
-    return m_plugin;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the instance of {@link Activator}.
+	 */
+	public static Activator getDefault() {
+		return m_plugin;
+	}
 
-  /**
-   * @return the {@link IPreferenceStore} of plugin.
-   */
-  public static IPreferenceStore getStore() {
-    return m_plugin.getPreferenceStore();
-  }
+	/**
+	 * @return the {@link IPreferenceStore} of plugin.
+	 */
+	public static IPreferenceStore getStore() {
+		return m_plugin.getPreferenceStore();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Resources
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final BundleResourceProvider m_resourceProvider =
-      BundleResourceProvider.get(PLUGIN_ID);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Resources
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final BundleResourceProvider m_resourceProvider =
+			BundleResourceProvider.get(PLUGIN_ID);
 
-  /**
-   * @return the {@link InputStream} for file from plugin directory.
-   */
-  public static InputStream getFile(String path) {
-    return m_resourceProvider.getFile(path);
-  }
+	/**
+	 * @return the {@link InputStream} for file from plugin directory.
+	 */
+	public static InputStream getFile(String path) {
+		return m_resourceProvider.getFile(path);
+	}
 
-  /**
-   * @return the {@link Image} from "icons" directory, with caching.
-   */
-  public static Image getImage(String path) {
-    return m_resourceProvider.getImage("icons/" + path);
-  }
+	/**
+	 * @return the {@link Image} from "icons" directory, with caching.
+	 */
+	public static Image getImage(String path) {
+		return m_resourceProvider.getImage("icons/" + path);
+	}
 
-  /**
-   * @return the {@link ImageDescriptor} from "icons" directory.
-   */
-  public static ImageDescriptor getImageDescriptor(String path) {
-    return m_resourceProvider.getImageDescriptor("icons/" + path);
-  }
+	/**
+	 * @return the {@link ImageDescriptor} from "icons" directory.
+	 */
+	public static ImageDescriptor getImageDescriptor(String path) {
+		return m_resourceProvider.getImageDescriptor("icons/" + path);
+	}
 }
diff --git a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/gef/FormGridHelper.java b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/gef/FormGridHelper.java
index 5e97e26b2..2095894d3 100644
--- a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/gef/FormGridHelper.java
+++ b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/gef/FormGridHelper.java
@@ -22,22 +22,22 @@
  * @coverage swing.FormLayout.policy
  */
 public final class FormGridHelper extends AbstractGridHelper {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FormGridHelper(GraphicalEditPolicy editPolicy, boolean forTarget) {
-    super(editPolicy, forTarget);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FormGridHelper(GraphicalEditPolicy editPolicy, boolean forTarget) {
+		super(editPolicy, forTarget);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Feedback
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected IGridInfo getGridInfo() {
-    return ((FormLayoutInfo) getAbstractLayout()).getGridInfo();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Feedback
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected IGridInfo getGridInfo() {
+		return ((FormLayoutInfo) getAbstractLayout()).getGridInfo();
+	}
 }
diff --git a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/gef/FormLayoutEditPolicy.java b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/gef/FormLayoutEditPolicy.java
index 350e508b4..99840ffff 100644
--- a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/gef/FormLayoutEditPolicy.java
+++ b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/gef/FormLayoutEditPolicy.java
@@ -52,386 +52,386 @@
  * @coverage swing.FormLayout.policy
  */
 public final class FormLayoutEditPolicy extends AbstractGridLayoutEditPolicy {
-  private final FormLayoutInfo m_layout;
+	private final FormLayoutInfo m_layout;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FormLayoutEditPolicy(FormLayoutInfo layout) {
-    super(layout);
-    m_layout = layout;
-    m_gridTargetHelper = new FormGridHelper(this, true);
-    m_gridSelectionHelper = new FormGridHelper(this, false);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FormLayoutEditPolicy(FormLayoutInfo layout) {
+		super(layout);
+		m_layout = layout;
+		m_gridTargetHelper = new FormGridHelper(this, true);
+		m_gridSelectionHelper = new FormGridHelper(this, false);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Requests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected ILayoutRequestValidator getRequestValidator() {
-    return ComponentsLayoutRequestValidator.INSTANCE_EXT;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Requests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected ILayoutRequestValidator getRequestValidator() {
+		return ComponentsLayoutRequestValidator.INSTANCE_EXT;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected IGridInfo getGridInfo() {
-    return m_layout.getGridInfo();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected IGridInfo getGridInfo() {
+		return m_layout.getGridInfo();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Selection
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void decorateChild(EditPart child) {
-    if (child.getModel() instanceof ComponentInfo) {
-      ComponentInfo component = (ComponentInfo) child.getModel();
-      EditPolicy selectionPolicy = new FormSelectionEditPolicy(m_layout, component);
-      child.installEditPolicy(EditPolicy.SELECTION_ROLE, selectionPolicy);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Selection
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void decorateChild(EditPart child) {
+		if (child.getModel() instanceof ComponentInfo) {
+			ComponentInfo component = (ComponentInfo) child.getModel();
+			EditPolicy selectionPolicy = new FormSelectionEditPolicy(m_layout, component);
+			child.installEditPolicy(EditPolicy.SELECTION_ROLE, selectionPolicy);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if prepared "target" can be used.
-   */
-  private boolean isValidTarget() {
-    // may be invalid cell
-    if (!m_target.m_valid) {
-      return false;
-    }
-    // check for dimension operations limitations
-    if (!m_layout.canChangeDimensions()) {
-      // can not insert
-      if (m_target.m_columnInsert || m_target.m_rowInsert) {
-        return false;
-      }
-      // can not append
-      if (m_target.m_column >= m_layout.getColumns().size()
-          || m_target.m_row >= m_layout.getRows().size()) {
-        return false;
-      }
-    }
-    // OK
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if prepared "target" can be used.
+	 */
+	private boolean isValidTarget() {
+		// may be invalid cell
+		if (!m_target.m_valid) {
+			return false;
+		}
+		// check for dimension operations limitations
+		if (!m_layout.canChangeDimensions()) {
+			// can not insert
+			if (m_target.m_columnInsert || m_target.m_rowInsert) {
+				return false;
+			}
+			// can not append
+			if (m_target.m_column >= m_layout.getColumns().size()
+					|| m_target.m_row >= m_layout.getRows().size()) {
+				return false;
+			}
+		}
+		// OK
+		return true;
+	}
 
-  @Override
-  protected Command getCreateCommand(CreateRequest request) {
-    if (isValidTarget()) {
-      Object newObject = request.getNewObject();
-      if (newObject instanceof ComponentInfo) {
-        final ComponentInfo component = (ComponentInfo) newObject;
-        return new EditCommand(m_layout) {
-          @Override
-          protected void executeEdit() throws Exception {
-            m_layout.command_CREATE(
-                component,
-                1 + m_target.m_column,
-                m_target.m_columnInsert,
-                1 + m_target.m_row,
-                m_target.m_rowInsert);
-          }
-        };
-      }
-    }
-    return null;
-  }
+	@Override
+	protected Command getCreateCommand(CreateRequest request) {
+		if (isValidTarget()) {
+			Object newObject = request.getNewObject();
+			if (newObject instanceof ComponentInfo) {
+				final ComponentInfo component = (ComponentInfo) newObject;
+				return new EditCommand(m_layout) {
+					@Override
+					protected void executeEdit() throws Exception {
+						m_layout.command_CREATE(
+								component,
+								1 + m_target.m_column,
+								m_target.m_columnInsert,
+								1 + m_target.m_row,
+								m_target.m_rowInsert);
+					}
+				};
+			}
+		}
+		return null;
+	}
 
-  @Override
-  @SuppressWarnings("unchecked")
-  protected Command getPasteCommand(PasteRequest request) {
-    List<JavaInfoMemento> mementos = (List<JavaInfoMemento>) request.getMemento();
-    if (isValidTarget() && mementos.size() == 1) {
-      return LayoutPolicyUtils2.getPasteCommand(
-          m_layout,
-          request,
-          ComponentInfo.class,
-          new IPasteProcessor<ComponentInfo>() {
-            @Override
-            public void process(ComponentInfo component) throws Exception {
-              m_layout.command_CREATE(
-                  component,
-                  1 + m_target.m_column,
-                  m_target.m_columnInsert,
-                  1 + m_target.m_row,
-                  m_target.m_rowInsert);
-            }
-          });
-    }
-    return null;
-  }
+	@Override
+	@SuppressWarnings("unchecked")
+	protected Command getPasteCommand(PasteRequest request) {
+		List<JavaInfoMemento> mementos = (List<JavaInfoMemento>) request.getMemento();
+		if (isValidTarget() && mementos.size() == 1) {
+			return LayoutPolicyUtils2.getPasteCommand(
+					m_layout,
+					request,
+					ComponentInfo.class,
+					new IPasteProcessor<ComponentInfo>() {
+						@Override
+						public void process(ComponentInfo component) throws Exception {
+							m_layout.command_CREATE(
+									component,
+									1 + m_target.m_column,
+									m_target.m_columnInsert,
+									1 + m_target.m_row,
+									m_target.m_rowInsert);
+						}
+					});
+		}
+		return null;
+	}
 
-  @Override
-  protected Command getMoveCommand(ChangeBoundsRequest request) {
-    if (isValidTarget() && request.getEditParts().size() == 1) {
-      EditPart moveEditPart = request.getEditParts().get(0);
-      if (moveEditPart.getModel() instanceof ComponentInfo) {
-        final ComponentInfo component = (ComponentInfo) moveEditPart.getModel();
-        return new EditCommand(m_layout) {
-          @Override
-          protected void executeEdit() throws Exception {
-            m_layout.command_MOVE(
-                component,
-                1 + m_target.m_column,
-                m_target.m_columnInsert,
-                1 + m_target.m_row,
-                m_target.m_rowInsert);
-          }
-        };
-      }
-    }
-    return null;
-  }
+	@Override
+	protected Command getMoveCommand(ChangeBoundsRequest request) {
+		if (isValidTarget() && request.getEditParts().size() == 1) {
+			EditPart moveEditPart = request.getEditParts().get(0);
+			if (moveEditPart.getModel() instanceof ComponentInfo) {
+				final ComponentInfo component = (ComponentInfo) moveEditPart.getModel();
+				return new EditCommand(m_layout) {
+					@Override
+					protected void executeEdit() throws Exception {
+						m_layout.command_MOVE(
+								component,
+								1 + m_target.m_column,
+								m_target.m_columnInsert,
+								1 + m_target.m_row,
+								m_target.m_rowInsert);
+					}
+				};
+			}
+		}
+		return null;
+	}
 
-  @Override
-  protected Command getAddCommand(ChangeBoundsRequest request) {
-    if (isValidTarget() && request.getEditParts().size() == 1) {
-      EditPart moveEditPart = request.getEditParts().get(0);
-      if (moveEditPart.getModel() instanceof ComponentInfo) {
-        final ComponentInfo component = (ComponentInfo) moveEditPart.getModel();
-        return new EditCommand(m_layout) {
-          @Override
-          protected void executeEdit() throws Exception {
-            m_layout.command_ADD(
-                component,
-                1 + m_target.m_column,
-                m_target.m_columnInsert,
-                1 + m_target.m_row,
-                m_target.m_rowInsert);
-          }
-        };
-      }
-    }
-    return null;
-  }
+	@Override
+	protected Command getAddCommand(ChangeBoundsRequest request) {
+		if (isValidTarget() && request.getEditParts().size() == 1) {
+			EditPart moveEditPart = request.getEditParts().get(0);
+			if (moveEditPart.getModel() instanceof ComponentInfo) {
+				final ComponentInfo component = (ComponentInfo) moveEditPart.getModel();
+				return new EditCommand(m_layout) {
+					@Override
+					protected void executeEdit() throws Exception {
+						m_layout.command_ADD(
+								component,
+								1 + m_target.m_column,
+								m_target.m_columnInsert,
+								1 + m_target.m_row,
+								m_target.m_rowInsert);
+					}
+				};
+			}
+		}
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Grid target
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void updateGridTarget(Point mouseLocation) throws Exception {
-    m_target = new GridTarget();
-    //
-    mouseLocation = mouseLocation.getCopy();
-    FigureUtils.translateAbsoluteToFigure2(getHostFigure(), mouseLocation);
-    // prepare grid information
-    IGridInfo gridInfo = m_layout.getGridInfo();
-    Interval[] columnIntervals = gridInfo.getColumnIntervals();
-    Interval[] rowIntervals = gridInfo.getRowIntervals();
-    int lastX =
-        columnIntervals.length != 0
-            ? columnIntervals[columnIntervals.length - 1].end()
-            : gridInfo.getInsets().left;
-    int lastY =
-        rowIntervals.length != 0
-            ? rowIntervals[rowIntervals.length - 1].end()
-            : gridInfo.getInsets().top;
-    int insertDelta = 3;
-    // prepare insert bounds
-    if (rowIntervals.length != 0) {
-      m_target.m_columnInsertBounds.y = rowIntervals[0].begin() - INSERT_MARGINS;
-      m_target.m_columnInsertBounds.setBottom(lastY + INSERT_MARGINS);
-    }
-    if (columnIntervals.length != 0) {
-      m_target.m_rowInsertBounds.x = columnIntervals[0].begin() - INSERT_MARGINS;
-      m_target.m_rowInsertBounds.setRight(lastX + INSERT_MARGINS);
-    }
-    // find existing column
-    for (int columnIndex = 0; columnIndex < columnIntervals.length; columnIndex++) {
-      Interval interval = columnIntervals[columnIndex];
-      if (interval.contains(mouseLocation.x)) {
-        List<FormColumnInfo> columns = m_layout.getColumns();
-        FormColumnInfo column = columns.get(columnIndex);
-        // check for prev/next gaps
-        boolean prevGap;
-        boolean nextGap;
-        boolean isLast = columnIndex == columnIntervals.length - 1;
-        {
-          FormColumnInfo prevColumn =
-              columnIndex != 0 ? (FormColumnInfo) columns.get(columnIndex - 1) : null;
-          prevGap = prevColumn != null && prevColumn.isGap();
-          FormColumnInfo nextColumn =
-              columnIndex < columns.size() - 1
-                  ? (FormColumnInfo) columns.get(columnIndex + 1)
-                  : null;
-          nextGap = nextColumn != null && nextColumn.isGap();
-        }
-        //
-        m_target.m_column = columnIndex;
-        if (column.isGap()) {
-          m_target.m_columnInsert = true;
-          //
-          m_target.m_feedbackBounds.width = 3 * interval.length();
-          m_target.m_feedbackBounds.x = interval.center() - m_target.m_feedbackBounds.width / 2;
-          //
-          m_target.m_columnInsertBounds.x = interval.begin();
-          m_target.m_columnInsertBounds.width = interval.length()+ 1;
-        } else if (mouseLocation.x - interval.begin() <= insertDelta && !prevGap) {
-          m_target.m_columnInsert = true;
-          //
-          m_target.m_feedbackBounds.width = 3 * INSERT_COLUMN_SIZE;
-          m_target.m_feedbackBounds.x = interval.begin() - m_target.m_feedbackBounds.width / 2;
-          //
-          m_target.m_columnInsertBounds.x = interval.begin() - INSERT_COLUMN_SIZE / 2;
-          m_target.m_columnInsertBounds.width = INSERT_COLUMN_SIZE;
-        } else if (!isLast && interval.end() - mouseLocation.x <= insertDelta && !nextGap) {
-          m_target.m_column++;
-          m_target.m_columnInsert = true;
-          //
-          m_target.m_feedbackBounds.width = 3 * INSERT_COLUMN_SIZE;
-          m_target.m_feedbackBounds.x = interval.end() - m_target.m_feedbackBounds.width / 2;
-          //
-          m_target.m_columnInsertBounds.x = interval.end() - INSERT_COLUMN_SIZE / 2;
-          m_target.m_columnInsertBounds.width = INSERT_COLUMN_SIZE;
-        } else {
-          m_target.m_feedbackBounds.x = interval.begin();
-          m_target.m_feedbackBounds.width = interval.length()+ 1;
-        }
-      }
-    }
-    // find virtual column
-    if (m_target.m_column == -1) {
-      int columnGap = gridInfo.getVirtualColumnGap();
-      int newWidth = gridInfo.getVirtualColumnSize() + columnGap;
-      int newDelta = 1 + Math.max(mouseLocation.x - lastX - columnGap / 2, 0) / newWidth;
-      //
-      m_target.m_column = columnIntervals.length + 2 * newDelta - 1;
-      m_target.m_feedbackBounds.x = lastX + newWidth * (newDelta - 1) + columnGap;
-      m_target.m_feedbackBounds.width = gridInfo.getVirtualColumnSize() + 1;
-    }
-    // find existing row
-    for (int rowIndex = 0; rowIndex < rowIntervals.length; rowIndex++) {
-      Interval interval = rowIntervals[rowIndex];
-      if (interval.contains(mouseLocation.y)) {
-        List<FormRowInfo> rows = m_layout.getRows();
-        FormRowInfo row = rows.get(rowIndex);
-        //
-        // check for prev/next gaps
-        boolean prevGap;
-        boolean nextGap;
-        boolean isLast = rowIndex == rowIntervals.length - 1;
-        {
-          FormRowInfo prevRow = rowIndex != 0 ? (FormRowInfo) rows.get(rowIndex - 1) : null;
-          prevGap = prevRow != null && prevRow.isGap();
-          FormRowInfo nextRow =
-              rowIndex < rows.size() - 1 ? (FormRowInfo) rows.get(rowIndex + 1) : null;
-          nextGap = nextRow != null && nextRow.isGap();
-        }
-        //
-        m_target.m_row = rowIndex;
-        if (row.isGap()) {
-          m_target.m_rowInsert = true;
-          //
-          m_target.m_feedbackBounds.height = 3 * interval.length();
-          m_target.m_feedbackBounds.y = interval.center() - m_target.m_feedbackBounds.height / 2;
-          //
-          m_target.m_rowInsertBounds.y = interval.begin();
-          m_target.m_rowInsertBounds.height = interval.length()+ 1;
-        } else if (mouseLocation.y - interval.begin() <= insertDelta && !prevGap) {
-          m_target.m_rowInsert = true;
-          //
-          m_target.m_feedbackBounds.height = 3 * INSERT_ROW_SIZE;
-          m_target.m_feedbackBounds.y = interval.begin() - m_target.m_feedbackBounds.height / 2;
-          //
-          m_target.m_rowInsertBounds.y = interval.begin() - INSERT_ROW_SIZE / 2;
-          m_target.m_rowInsertBounds.height = INSERT_ROW_SIZE;
-        } else if (!isLast && interval.end() - mouseLocation.y <= insertDelta && !nextGap) {
-          m_target.m_row++;
-          m_target.m_rowInsert = true;
-          //
-          m_target.m_feedbackBounds.height = 3 * INSERT_ROW_SIZE;
-          m_target.m_feedbackBounds.y = interval.end() - m_target.m_feedbackBounds.height / 2;
-          //
-          m_target.m_rowInsertBounds.y = interval.end() - INSERT_ROW_SIZE / 2;
-          m_target.m_rowInsertBounds.height = INSERT_ROW_SIZE;
-        } else {
-          m_target.m_feedbackBounds.y = interval.begin();
-          m_target.m_feedbackBounds.height = interval.length()+ 1;
-        }
-      }
-    }
-    // find virtual row
-    if (m_target.m_row == -1) {
-      int rowGap = gridInfo.getVirtualRowGap();
-      int newHeight = gridInfo.getVirtualRowSize() + rowGap;
-      int newDelta = 1 + Math.max(mouseLocation.y - lastY - rowGap / 2, 0) / newHeight;
-      //
-      m_target.m_row = rowIntervals.length + 2 * newDelta - 1;
-      m_target.m_feedbackBounds.y = lastY + newHeight * (newDelta - 1) + rowGap;
-      m_target.m_feedbackBounds.height = gridInfo.getVirtualRowSize() + 1;
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Grid target
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void updateGridTarget(Point mouseLocation) throws Exception {
+		m_target = new GridTarget();
+		//
+		mouseLocation = mouseLocation.getCopy();
+		FigureUtils.translateAbsoluteToFigure2(getHostFigure(), mouseLocation);
+		// prepare grid information
+		IGridInfo gridInfo = m_layout.getGridInfo();
+		Interval[] columnIntervals = gridInfo.getColumnIntervals();
+		Interval[] rowIntervals = gridInfo.getRowIntervals();
+		int lastX =
+				columnIntervals.length != 0
+				? columnIntervals[columnIntervals.length - 1].end()
+						: gridInfo.getInsets().left;
+		int lastY =
+				rowIntervals.length != 0
+				? rowIntervals[rowIntervals.length - 1].end()
+						: gridInfo.getInsets().top;
+		int insertDelta = 3;
+		// prepare insert bounds
+		if (rowIntervals.length != 0) {
+			m_target.m_columnInsertBounds.y = rowIntervals[0].begin() - INSERT_MARGINS;
+			m_target.m_columnInsertBounds.setBottom(lastY + INSERT_MARGINS);
+		}
+		if (columnIntervals.length != 0) {
+			m_target.m_rowInsertBounds.x = columnIntervals[0].begin() - INSERT_MARGINS;
+			m_target.m_rowInsertBounds.setRight(lastX + INSERT_MARGINS);
+		}
+		// find existing column
+		for (int columnIndex = 0; columnIndex < columnIntervals.length; columnIndex++) {
+			Interval interval = columnIntervals[columnIndex];
+			if (interval.contains(mouseLocation.x)) {
+				List<FormColumnInfo> columns = m_layout.getColumns();
+				FormColumnInfo column = columns.get(columnIndex);
+				// check for prev/next gaps
+				boolean prevGap;
+				boolean nextGap;
+				boolean isLast = columnIndex == columnIntervals.length - 1;
+				{
+					FormColumnInfo prevColumn =
+							columnIndex != 0 ? (FormColumnInfo) columns.get(columnIndex - 1) : null;
+					prevGap = prevColumn != null && prevColumn.isGap();
+					FormColumnInfo nextColumn =
+							columnIndex < columns.size() - 1
+							? (FormColumnInfo) columns.get(columnIndex + 1)
+									: null;
+					nextGap = nextColumn != null && nextColumn.isGap();
+				}
+				//
+				m_target.m_column = columnIndex;
+				if (column.isGap()) {
+					m_target.m_columnInsert = true;
+					//
+					m_target.m_feedbackBounds.width = 3 * interval.length();
+					m_target.m_feedbackBounds.x = interval.center() - m_target.m_feedbackBounds.width / 2;
+					//
+					m_target.m_columnInsertBounds.x = interval.begin();
+					m_target.m_columnInsertBounds.width = interval.length()+ 1;
+				} else if (mouseLocation.x - interval.begin() <= insertDelta && !prevGap) {
+					m_target.m_columnInsert = true;
+					//
+					m_target.m_feedbackBounds.width = 3 * INSERT_COLUMN_SIZE;
+					m_target.m_feedbackBounds.x = interval.begin() - m_target.m_feedbackBounds.width / 2;
+					//
+					m_target.m_columnInsertBounds.x = interval.begin() - INSERT_COLUMN_SIZE / 2;
+					m_target.m_columnInsertBounds.width = INSERT_COLUMN_SIZE;
+				} else if (!isLast && interval.end() - mouseLocation.x <= insertDelta && !nextGap) {
+					m_target.m_column++;
+					m_target.m_columnInsert = true;
+					//
+					m_target.m_feedbackBounds.width = 3 * INSERT_COLUMN_SIZE;
+					m_target.m_feedbackBounds.x = interval.end() - m_target.m_feedbackBounds.width / 2;
+					//
+					m_target.m_columnInsertBounds.x = interval.end() - INSERT_COLUMN_SIZE / 2;
+					m_target.m_columnInsertBounds.width = INSERT_COLUMN_SIZE;
+				} else {
+					m_target.m_feedbackBounds.x = interval.begin();
+					m_target.m_feedbackBounds.width = interval.length()+ 1;
+				}
+			}
+		}
+		// find virtual column
+		if (m_target.m_column == -1) {
+			int columnGap = gridInfo.getVirtualColumnGap();
+			int newWidth = gridInfo.getVirtualColumnSize() + columnGap;
+			int newDelta = 1 + Math.max(mouseLocation.x - lastX - columnGap / 2, 0) / newWidth;
+			//
+			m_target.m_column = columnIntervals.length + 2 * newDelta - 1;
+			m_target.m_feedbackBounds.x = lastX + newWidth * (newDelta - 1) + columnGap;
+			m_target.m_feedbackBounds.width = gridInfo.getVirtualColumnSize() + 1;
+		}
+		// find existing row
+		for (int rowIndex = 0; rowIndex < rowIntervals.length; rowIndex++) {
+			Interval interval = rowIntervals[rowIndex];
+			if (interval.contains(mouseLocation.y)) {
+				List<FormRowInfo> rows = m_layout.getRows();
+				FormRowInfo row = rows.get(rowIndex);
+				//
+				// check for prev/next gaps
+				boolean prevGap;
+				boolean nextGap;
+				boolean isLast = rowIndex == rowIntervals.length - 1;
+				{
+					FormRowInfo prevRow = rowIndex != 0 ? (FormRowInfo) rows.get(rowIndex - 1) : null;
+					prevGap = prevRow != null && prevRow.isGap();
+					FormRowInfo nextRow =
+							rowIndex < rows.size() - 1 ? (FormRowInfo) rows.get(rowIndex + 1) : null;
+					nextGap = nextRow != null && nextRow.isGap();
+				}
+				//
+				m_target.m_row = rowIndex;
+				if (row.isGap()) {
+					m_target.m_rowInsert = true;
+					//
+					m_target.m_feedbackBounds.height = 3 * interval.length();
+					m_target.m_feedbackBounds.y = interval.center() - m_target.m_feedbackBounds.height / 2;
+					//
+					m_target.m_rowInsertBounds.y = interval.begin();
+					m_target.m_rowInsertBounds.height = interval.length()+ 1;
+				} else if (mouseLocation.y - interval.begin() <= insertDelta && !prevGap) {
+					m_target.m_rowInsert = true;
+					//
+					m_target.m_feedbackBounds.height = 3 * INSERT_ROW_SIZE;
+					m_target.m_feedbackBounds.y = interval.begin() - m_target.m_feedbackBounds.height / 2;
+					//
+					m_target.m_rowInsertBounds.y = interval.begin() - INSERT_ROW_SIZE / 2;
+					m_target.m_rowInsertBounds.height = INSERT_ROW_SIZE;
+				} else if (!isLast && interval.end() - mouseLocation.y <= insertDelta && !nextGap) {
+					m_target.m_row++;
+					m_target.m_rowInsert = true;
+					//
+					m_target.m_feedbackBounds.height = 3 * INSERT_ROW_SIZE;
+					m_target.m_feedbackBounds.y = interval.end() - m_target.m_feedbackBounds.height / 2;
+					//
+					m_target.m_rowInsertBounds.y = interval.end() - INSERT_ROW_SIZE / 2;
+					m_target.m_rowInsertBounds.height = INSERT_ROW_SIZE;
+				} else {
+					m_target.m_feedbackBounds.y = interval.begin();
+					m_target.m_feedbackBounds.height = interval.length()+ 1;
+				}
+			}
+		}
+		// find virtual row
+		if (m_target.m_row == -1) {
+			int rowGap = gridInfo.getVirtualRowGap();
+			int newHeight = gridInfo.getVirtualRowSize() + rowGap;
+			int newDelta = 1 + Math.max(mouseLocation.y - lastY - rowGap / 2, 0) / newHeight;
+			//
+			m_target.m_row = rowIntervals.length + 2 * newDelta - 1;
+			m_target.m_feedbackBounds.y = lastY + newHeight * (newDelta - 1) + rowGap;
+			m_target.m_feedbackBounds.height = gridInfo.getVirtualRowSize() + 1;
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IHeadersProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public LayoutEditPolicy getContainerLayoutPolicy(boolean horizontal) {
-    if (horizontal) {
-      return new ColumnsLayoutEditPolicy(this, m_layout);
-    } else {
-      return new RowsLayoutEditPolicy(this, m_layout);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IHeadersProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public LayoutEditPolicy getContainerLayoutPolicy(boolean horizontal) {
+		if (horizontal) {
+			return new ColumnsLayoutEditPolicy(this, m_layout);
+		} else {
+			return new RowsLayoutEditPolicy(this, m_layout);
+		}
+	}
 
-  @Override
-  public List<?> getHeaders(boolean horizontal) {
-    return horizontal ? m_layout.getColumns() : m_layout.getRows();
-  }
+	@Override
+	public List<?> getHeaders(boolean horizontal) {
+		return horizontal ? m_layout.getColumns() : m_layout.getRows();
+	}
 
-  @Override
-  public EditPart createHeaderEditPart(boolean horizontal, Object model) {
-    if (horizontal) {
-      return new ColumnHeaderEditPart(m_layout, (FormColumnInfo) model, getHostFigure());
-    } else {
-      return new RowHeaderEditPart(m_layout, (FormRowInfo) model, getHostFigure());
-    }
-  }
+	@Override
+	public EditPart createHeaderEditPart(boolean horizontal, Object model) {
+		if (horizontal) {
+			return new ColumnHeaderEditPart(m_layout, (FormColumnInfo) model, getHostFigure());
+		} else {
+			return new RowHeaderEditPart(m_layout, (FormRowInfo) model, getHostFigure());
+		}
+	}
 
-  @Override
-  public void buildContextMenu(IMenuManager manager, boolean horizontal) {
-    if (horizontal) {
-      manager.add(new ObjectInfoAction(m_layout,
-          GefMessages.FormLayoutEditPolicy_appendColumnAction) {
-        @Override
-        protected void runEx() throws Exception {
-          m_layout.insertColumn(m_layout.getColumns().size());
-        }
-      });
-    } else {
-      manager.add(new ObjectInfoAction(m_layout, GefMessages.FormLayoutEditPolicy_appendRowAction) {
-        @Override
-        protected void runEx() throws Exception {
-          m_layout.insertRow(m_layout.getRows().size());
-        }
-      });
-    }
-  }
+	@Override
+	public void buildContextMenu(IMenuManager manager, boolean horizontal) {
+		if (horizontal) {
+			manager.add(new ObjectInfoAction(m_layout,
+					GefMessages.FormLayoutEditPolicy_appendColumnAction) {
+				@Override
+				protected void runEx() throws Exception {
+					m_layout.insertColumn(m_layout.getColumns().size());
+				}
+			});
+		} else {
+			manager.add(new ObjectInfoAction(m_layout, GefMessages.FormLayoutEditPolicy_appendRowAction) {
+				@Override
+				protected void runEx() throws Exception {
+					m_layout.insertRow(m_layout.getRows().size());
+				}
+			});
+		}
+	}
 
-  @Override
-  public void handleDoubleClick(boolean horizontal) {
-    if (horizontal) {
-      new ColumnsDialog(DesignerPlugin.getShell(), m_layout).open();
-    } else {
-      new RowsDialog(DesignerPlugin.getShell(), m_layout).open();
-    }
-  }
+	@Override
+	public void handleDoubleClick(boolean horizontal) {
+		if (horizontal) {
+			new ColumnsDialog(DesignerPlugin.getShell(), m_layout).open();
+		} else {
+			new RowsDialog(DesignerPlugin.getShell(), m_layout).open();
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/gef/FormSelectionEditPolicy.java b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/gef/FormSelectionEditPolicy.java
index 4016f19ce..8a16bc165 100644
--- a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/gef/FormSelectionEditPolicy.java
+++ b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/gef/FormSelectionEditPolicy.java
@@ -47,172 +47,172 @@
  * @coverage swing.FormLayout.policy
  */
 public final class FormSelectionEditPolicy extends AbstractGridSelectionEditPolicy {
-  private final FormLayoutInfo m_layout;
-  private final ComponentInfo m_component;
-  private final FormGridHelper m_gridHelper = new FormGridHelper(this, false);
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FormSelectionEditPolicy(FormLayoutInfo layout, ComponentInfo component) {
-    super(component);
-    m_layout = layout;
-    m_component = component;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected boolean isActiveLayout() {
-    return m_component.getParent().getChildren().contains(m_layout);
-  }
-
-  @Override
-  protected IGridInfo getGridInfo() {
-    return m_layout.getGridInfo();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Selection
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected List<Handle> createSelectionHandles() {
-    List<Handle> handlesList = Lists.newArrayList();
-    // add move handle
-    handlesList.add(createMoveHandle());
-    // add span handles
-    {
-      handlesList.add(createSpanHandle(IPositionConstants.NORTH, 0.25));
-      handlesList.add(createSpanHandle(IPositionConstants.WEST, 0.25));
-      handlesList.add(createSpanHandle(IPositionConstants.EAST, 0.75));
-      handlesList.add(createSpanHandle(IPositionConstants.SOUTH, 0.75));
-    }
-    //
-    return handlesList;
-  }
-
-  @Override
-  protected void showPrimarySelection() {
-    super.showPrimarySelection();
-    m_gridHelper.showGridFeedback();
-  }
-
-  @Override
-  protected void hideSelection() {
-    m_gridHelper.eraseGridFeedback();
-    super.hideSelection();
-  }
-
-  @Override
-  protected Figure createAlignmentFigure(IAbstractComponentInfo component, boolean horizontal) {
-    IEditPartViewer viewer = getHost().getViewer();
-    final CellConstraintsSupport constraints =
-        FormLayoutInfo.getConstraints((ComponentInfo) component);
-    if (horizontal) {
-      return new AbstractPopupFigure(viewer, 9, 5) {
-        @Override
-        protected Image getImage() {
-          return constraints.getSmallAlignmentImage(true);
-        }
-
-        @Override
-        protected void fillMenu(IMenuManager manager) {
-          constraints.fillHorizontalAlignmentMenu(manager);
-        }
-      };
-    } else {
-      return new AbstractPopupFigure(viewer, 5, 9) {
-        @Override
-        protected Image getImage() {
-          return constraints.getSmallAlignmentImage(false);
-        }
-
-        @Override
-        protected void fillMenu(IMenuManager manager) {
-          constraints.fillVerticalAlignmentMenu(manager);
-        }
-      };
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Span
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Command createSpanCommand(final boolean horizontal, final Rectangle cells) {
-    return new EditCommand(m_layout) {
-      @Override
-      protected void executeEdit() throws Exception {
-        CellConstraintsSupport support = FormLayoutInfo.getConstraints(m_component);
-        support.setSpan(horizontal, cells.getTranslated(1, 1));
-        support.write();
-      }
-    };
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Keyboard
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void performRequest(Request request) {
-    if (request instanceof KeyRequest) {
-      KeyRequest keyRequest = (KeyRequest) request;
-      if (keyRequest.isPressed()) {
-        char c = keyRequest.getCharacter();
-        // horizontal
-        if (c == 'd') {
-          setAlignment(true, CellConstraints.DEFAULT);
-        } else if (c == 'l') {
-          setAlignment(true, CellConstraints.LEFT);
-        } else if (c == 'f') {
-          setAlignment(true, CellConstraints.FILL);
-        } else if (c == 'c') {
-          setAlignment(true, CellConstraints.CENTER);
-        } else if (c == 'r') {
-          setAlignment(true, CellConstraints.RIGHT);
-        }
-        // vertical
-        if (c == 'D') {
-          setAlignment(false, CellConstraints.DEFAULT);
-        } else if (c == 't') {
-          setAlignment(false, CellConstraints.TOP);
-        } else if (c == 'F') {
-          setAlignment(false, CellConstraints.FILL);
-        } else if (c == 'm') {
-          setAlignment(false, CellConstraints.CENTER);
-        } else if (c == 'b') {
-          setAlignment(false, CellConstraints.BOTTOM);
-        }
-      }
-    }
-  }
-
-  /**
-   * Sets the horizontal/vertical alignment.
-   */
-  private void setAlignment(final boolean horizontal, final Alignment alignment) {
-    ExecutionUtils.run(m_layout, new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        CellConstraintsSupport support = FormLayoutInfo.getConstraints(m_component);
-        if (horizontal) {
-          support.setAlignH(alignment);
-        } else {
-          support.setAlignV(alignment);
-        }
-        support.write();
-      }
-    });
-  }
+	private final FormLayoutInfo m_layout;
+	private final ComponentInfo m_component;
+	private final FormGridHelper m_gridHelper = new FormGridHelper(this, false);
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FormSelectionEditPolicy(FormLayoutInfo layout, ComponentInfo component) {
+		super(component);
+		m_layout = layout;
+		m_component = component;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected boolean isActiveLayout() {
+		return m_component.getParent().getChildren().contains(m_layout);
+	}
+
+	@Override
+	protected IGridInfo getGridInfo() {
+		return m_layout.getGridInfo();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Selection
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected List<Handle> createSelectionHandles() {
+		List<Handle> handlesList = Lists.newArrayList();
+		// add move handle
+		handlesList.add(createMoveHandle());
+		// add span handles
+		{
+			handlesList.add(createSpanHandle(IPositionConstants.NORTH, 0.25));
+			handlesList.add(createSpanHandle(IPositionConstants.WEST, 0.25));
+			handlesList.add(createSpanHandle(IPositionConstants.EAST, 0.75));
+			handlesList.add(createSpanHandle(IPositionConstants.SOUTH, 0.75));
+		}
+		//
+		return handlesList;
+	}
+
+	@Override
+	protected void showPrimarySelection() {
+		super.showPrimarySelection();
+		m_gridHelper.showGridFeedback();
+	}
+
+	@Override
+	protected void hideSelection() {
+		m_gridHelper.eraseGridFeedback();
+		super.hideSelection();
+	}
+
+	@Override
+	protected Figure createAlignmentFigure(IAbstractComponentInfo component, boolean horizontal) {
+		IEditPartViewer viewer = getHost().getViewer();
+		final CellConstraintsSupport constraints =
+				FormLayoutInfo.getConstraints((ComponentInfo) component);
+		if (horizontal) {
+			return new AbstractPopupFigure(viewer, 9, 5) {
+				@Override
+				protected Image getImage() {
+					return constraints.getSmallAlignmentImage(true);
+				}
+
+				@Override
+				protected void fillMenu(IMenuManager manager) {
+					constraints.fillHorizontalAlignmentMenu(manager);
+				}
+			};
+		} else {
+			return new AbstractPopupFigure(viewer, 5, 9) {
+				@Override
+				protected Image getImage() {
+					return constraints.getSmallAlignmentImage(false);
+				}
+
+				@Override
+				protected void fillMenu(IMenuManager manager) {
+					constraints.fillVerticalAlignmentMenu(manager);
+				}
+			};
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Span
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Command createSpanCommand(final boolean horizontal, final Rectangle cells) {
+		return new EditCommand(m_layout) {
+			@Override
+			protected void executeEdit() throws Exception {
+				CellConstraintsSupport support = FormLayoutInfo.getConstraints(m_component);
+				support.setSpan(horizontal, cells.getTranslated(1, 1));
+				support.write();
+			}
+		};
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Keyboard
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void performRequest(Request request) {
+		if (request instanceof KeyRequest) {
+			KeyRequest keyRequest = (KeyRequest) request;
+			if (keyRequest.isPressed()) {
+				char c = keyRequest.getCharacter();
+				// horizontal
+				if (c == 'd') {
+					setAlignment(true, CellConstraints.DEFAULT);
+				} else if (c == 'l') {
+					setAlignment(true, CellConstraints.LEFT);
+				} else if (c == 'f') {
+					setAlignment(true, CellConstraints.FILL);
+				} else if (c == 'c') {
+					setAlignment(true, CellConstraints.CENTER);
+				} else if (c == 'r') {
+					setAlignment(true, CellConstraints.RIGHT);
+				}
+				// vertical
+				if (c == 'D') {
+					setAlignment(false, CellConstraints.DEFAULT);
+				} else if (c == 't') {
+					setAlignment(false, CellConstraints.TOP);
+				} else if (c == 'F') {
+					setAlignment(false, CellConstraints.FILL);
+				} else if (c == 'm') {
+					setAlignment(false, CellConstraints.CENTER);
+				} else if (c == 'b') {
+					setAlignment(false, CellConstraints.BOTTOM);
+				}
+			}
+		}
+	}
+
+	/**
+	 * Sets the horizontal/vertical alignment.
+	 */
+	private void setAlignment(final boolean horizontal, final Alignment alignment) {
+		ExecutionUtils.run(m_layout, new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				CellConstraintsSupport support = FormLayoutInfo.getConstraints(m_component);
+				if (horizontal) {
+					support.setAlignH(alignment);
+				} else {
+					support.setAlignV(alignment);
+				}
+				support.write();
+			}
+		});
+	}
 }
diff --git a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/gef/GefMessages.java b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/gef/GefMessages.java
index a12bf3877..bcc369249 100644
--- a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/gef/GefMessages.java
+++ b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/gef/GefMessages.java
@@ -3,54 +3,54 @@
 import org.eclipse.osgi.util.NLS;
 
 public class GefMessages extends NLS {
-  private static final String BUNDLE_NAME =
-      "org.eclipse.wb.internal.swing.FormLayout.gef.GefMessages"; //$NON-NLS-1$
-  public static String ColumnHeaderEditPart_appendColumn;
-  public static String ColumnHeaderEditPart_deleteColumn;
-  public static String ColumnHeaderEditPart_DeleteContents;
-  public static String ColumnHeaderEditPart_group;
-  public static String ColumnHeaderEditPart_grow;
-  public static String ColumnHeaderEditPart_haCenter;
-  public static String ColumnHeaderEditPart_haFill;
-  public static String ColumnHeaderEditPart_haLeft;
-  public static String ColumnHeaderEditPart_haRight;
-  public static String ColumnHeaderEditPart_insertColumn;
-  public static String ColumnHeaderEditPart_otherTemplates;
-  public static String ColumnHeaderEditPart_properties;
-  public static String ColumnHeaderEditPart_splitColumn;
-  public static String ColumnHeaderEditPart_unGroup;
-  public static String ColumnSelectionEditPolicy_exception;
-  public static String ColumnSelectionEditPolicy_minimumWidthPattern;
-  public static String ColumnSelectionEditPolicy_widthPattern;
-  public static String ColumnsLayoutEditPolicy_feedbackPattern;
-  public static String FormLayoutEditPolicy_appendColumnAction;
-  public static String FormLayoutEditPolicy_appendRowAction;
-  public static String ResizeHintFigure_hint;
-  public static String ResizeHintFigure_press;
-  public static String ResizeHintFigure_toSetSize;
-  public static String RowHeaderEditPart_appendRow;
-  public static String RowHeaderEditPart_deleteContents;
-  public static String RowHeaderEditPart_deleteRow;
-  public static String RowHeaderEditPart_group;
-  public static String RowHeaderEditPart_grow;
-  public static String RowHeaderEditPart_insertRow;
-  public static String RowHeaderEditPart_otherTemplates;
-  public static String RowHeaderEditPart_properties;
-  public static String RowHeaderEditPart_splitRow;
-  public static String RowHeaderEditPart_unGroup;
-  public static String RowHeaderEditPart_vaBottom;
-  public static String RowHeaderEditPart_vaCenter;
-  public static String RowHeaderEditPart_vaFill;
-  public static String RowHeaderEditPart_vaTop;
-  public static String RowSelectionEditPolicy_exception;
-  public static String RowSelectionEditPolicy_heightPattern;
-  public static String RowSelectionEditPolicy_minimumHeightPattern;
-  public static String RowsLayoutEditPolicy_feedbackPattern;
-  static {
-    // initialize resource bundle
-    NLS.initializeMessages(BUNDLE_NAME, GefMessages.class);
-  }
+	private static final String BUNDLE_NAME =
+			"org.eclipse.wb.internal.swing.FormLayout.gef.GefMessages"; //$NON-NLS-1$
+	public static String ColumnHeaderEditPart_appendColumn;
+	public static String ColumnHeaderEditPart_deleteColumn;
+	public static String ColumnHeaderEditPart_DeleteContents;
+	public static String ColumnHeaderEditPart_group;
+	public static String ColumnHeaderEditPart_grow;
+	public static String ColumnHeaderEditPart_haCenter;
+	public static String ColumnHeaderEditPart_haFill;
+	public static String ColumnHeaderEditPart_haLeft;
+	public static String ColumnHeaderEditPart_haRight;
+	public static String ColumnHeaderEditPart_insertColumn;
+	public static String ColumnHeaderEditPart_otherTemplates;
+	public static String ColumnHeaderEditPart_properties;
+	public static String ColumnHeaderEditPart_splitColumn;
+	public static String ColumnHeaderEditPart_unGroup;
+	public static String ColumnSelectionEditPolicy_exception;
+	public static String ColumnSelectionEditPolicy_minimumWidthPattern;
+	public static String ColumnSelectionEditPolicy_widthPattern;
+	public static String ColumnsLayoutEditPolicy_feedbackPattern;
+	public static String FormLayoutEditPolicy_appendColumnAction;
+	public static String FormLayoutEditPolicy_appendRowAction;
+	public static String ResizeHintFigure_hint;
+	public static String ResizeHintFigure_press;
+	public static String ResizeHintFigure_toSetSize;
+	public static String RowHeaderEditPart_appendRow;
+	public static String RowHeaderEditPart_deleteContents;
+	public static String RowHeaderEditPart_deleteRow;
+	public static String RowHeaderEditPart_group;
+	public static String RowHeaderEditPart_grow;
+	public static String RowHeaderEditPart_insertRow;
+	public static String RowHeaderEditPart_otherTemplates;
+	public static String RowHeaderEditPart_properties;
+	public static String RowHeaderEditPart_splitRow;
+	public static String RowHeaderEditPart_unGroup;
+	public static String RowHeaderEditPart_vaBottom;
+	public static String RowHeaderEditPart_vaCenter;
+	public static String RowHeaderEditPart_vaFill;
+	public static String RowHeaderEditPart_vaTop;
+	public static String RowSelectionEditPolicy_exception;
+	public static String RowSelectionEditPolicy_heightPattern;
+	public static String RowSelectionEditPolicy_minimumHeightPattern;
+	public static String RowsLayoutEditPolicy_feedbackPattern;
+	static {
+		// initialize resource bundle
+		NLS.initializeMessages(BUNDLE_NAME, GefMessages.class);
+	}
 
-  private GefMessages() {
-  }
+	private GefMessages() {
+	}
 }
diff --git a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/gef/LayoutEditPolicyFactory.java b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/gef/LayoutEditPolicyFactory.java
index 2e668cd18..2b6bfb20a 100644
--- a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/gef/LayoutEditPolicyFactory.java
+++ b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/gef/LayoutEditPolicyFactory.java
@@ -23,20 +23,20 @@
  * @coverage swing.FormLayout.policy
  */
 public final class LayoutEditPolicyFactory implements ILayoutEditPolicyFactory {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ILayoutEditPolicyFactory
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public LayoutEditPolicy createLayoutEditPolicy(EditPart context, Object model) {
-    if (model instanceof LayoutInfo) {
-      Class<?> layoutClass = model.getClass();
-      if (layoutClass == FormLayoutInfo.class) {
-        return new FormLayoutEditPolicy((FormLayoutInfo) model);
-      }
-    }
-    // not found
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ILayoutEditPolicyFactory
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public LayoutEditPolicy createLayoutEditPolicy(EditPart context, Object model) {
+		if (model instanceof LayoutInfo) {
+			Class<?> layoutClass = model.getClass();
+			if (layoutClass == FormLayoutInfo.class) {
+				return new FormLayoutEditPolicy((FormLayoutInfo) model);
+			}
+		}
+		// not found
+		return null;
+	}
 }
diff --git a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/gef/header/actions/DimensionHeaderAction.java b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/gef/header/actions/DimensionHeaderAction.java
index 519b60280..830c46972 100644
--- a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/gef/header/actions/DimensionHeaderAction.java
+++ b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/gef/header/actions/DimensionHeaderAction.java
@@ -30,85 +30,85 @@
  * @coverage swing.FormLayout.header
  */
 public abstract class DimensionHeaderAction<T extends FormDimensionInfo> extends ObjectInfoAction {
-  private final IEditPartViewer m_viewer;
-  private final FormLayoutInfo m_layout;
+	private final IEditPartViewer m_viewer;
+	private final FormLayoutInfo m_layout;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DimensionHeaderAction(DimensionHeaderEditPart<T> editPart, String text) {
-    this(editPart, text, null);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DimensionHeaderAction(DimensionHeaderEditPart<T> editPart, String text) {
+		this(editPart, text, null);
+	}
 
-  public DimensionHeaderAction(DimensionHeaderEditPart<T> editPart,
-      String text,
-      ImageDescriptor imageDescriptor) {
-    this(editPart, text, imageDescriptor, AS_PUSH_BUTTON);
-  }
+	public DimensionHeaderAction(DimensionHeaderEditPart<T> editPart,
+			String text,
+			ImageDescriptor imageDescriptor) {
+		this(editPart, text, imageDescriptor, AS_PUSH_BUTTON);
+	}
 
-  public DimensionHeaderAction(DimensionHeaderEditPart<T> editPart,
-      String text,
-      ImageDescriptor imageDescriptor,
-      int style) {
-    super(editPart.getLayout(), text, style);
-    m_viewer = editPart.getViewer();
-    m_layout = editPart.getLayout();
-    setImageDescriptor(imageDescriptor);
-  }
+	public DimensionHeaderAction(DimensionHeaderEditPart<T> editPart,
+			String text,
+			ImageDescriptor imageDescriptor,
+			int style) {
+		super(editPart.getLayout(), text, style);
+		m_viewer = editPart.getViewer();
+		m_layout = editPart.getLayout();
+		setImageDescriptor(imageDescriptor);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final int hashCode() {
-    return 0;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final int hashCode() {
+		return 0;
+	}
 
-  @Override
-  public boolean equals(Object obj) {
-    return getClass() == obj.getClass();
-  }
+	@Override
+	public boolean equals(Object obj) {
+		return getClass() == obj.getClass();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Run
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected final void runEx() throws Exception {
-    // prepare selection
-    List<T> dimensions = Lists.newArrayList();
-    {
-      List<EditPart> editParts = m_viewer.getSelectedEditParts();
-      for (EditPart editPart : editParts) {
-        if (editPart instanceof DimensionHeaderEditPart) {
-          @SuppressWarnings("unchecked")
-          DimensionHeaderEditPart<T> headerEditPart = (DimensionHeaderEditPart<T>) editPart;
-          dimensions.add(headerEditPart.getDimension());
-        }
-      }
-    }
-    // run over them
-    run(dimensions);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Run
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected final void runEx() throws Exception {
+		// prepare selection
+		List<T> dimensions = Lists.newArrayList();
+		{
+			List<EditPart> editParts = m_viewer.getSelectedEditParts();
+			for (EditPart editPart : editParts) {
+				if (editPart instanceof DimensionHeaderEditPart) {
+					@SuppressWarnings("unchecked")
+					DimensionHeaderEditPart<T> headerEditPart = (DimensionHeaderEditPart<T>) editPart;
+					dimensions.add(headerEditPart.getDimension());
+				}
+			}
+		}
+		// run over them
+		run(dimensions);
+	}
 
-  /**
-   * Does some operation on {@link List} of selected {@link FormDimensionInfo}'s.
-   */
-  protected void run(List<T> dimensions) throws Exception {
-    for (T dimension : dimensions) {
-      run(dimension);
-    }
-    m_layout.writeDimensions();
-  }
+	/**
+	 * Does some operation on {@link List} of selected {@link FormDimensionInfo}'s.
+	 */
+	protected void run(List<T> dimensions) throws Exception {
+		for (T dimension : dimensions) {
+			run(dimension);
+		}
+		m_layout.writeDimensions();
+	}
 
-  /**
-   * Does some operation on selected {@link FormDimensionInfo}'s.
-   */
-  protected void run(T dimension) throws Exception {
-  }
+	/**
+	 * Does some operation on selected {@link FormDimensionInfo}'s.
+	 */
+	protected void run(T dimension) throws Exception {
+	}
 }
diff --git a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/gef/header/actions/SetAlignmentAction.java b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/gef/header/actions/SetAlignmentAction.java
index 69152d7e3..a70ea2279 100644
--- a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/gef/header/actions/SetAlignmentAction.java
+++ b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/gef/header/actions/SetAlignmentAction.java
@@ -25,31 +25,31 @@
  * @coverage swing.FormLayout.header
  */
 public final class SetAlignmentAction<T extends FormDimensionInfo> extends DimensionHeaderAction<T> {
-  private final DefaultAlignment m_alignment;
+	private final DefaultAlignment m_alignment;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SetAlignmentAction(DimensionHeaderEditPart<T> header,
-      String text,
-      ImageDescriptor imageDescriptor,
-      DefaultAlignment alignment) {
-    super(header, text, imageDescriptor, AS_RADIO_BUTTON);
-    m_alignment = alignment;
-    setChecked(header.getDimension().getAlignment() == m_alignment);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SetAlignmentAction(DimensionHeaderEditPart<T> header,
+			String text,
+			ImageDescriptor imageDescriptor,
+			DefaultAlignment alignment) {
+		super(header, text, imageDescriptor, AS_RADIO_BUTTON);
+		m_alignment = alignment;
+		setChecked(header.getDimension().getAlignment() == m_alignment);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Run
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void run(T dimension) throws Exception {
-    if (isChecked()) {
-      dimension.setAlignment(m_alignment);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Run
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void run(T dimension) throws Exception {
+		if (isChecked()) {
+			dimension.setAlignment(m_alignment);
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/gef/header/actions/SetGrowAction.java b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/gef/header/actions/SetGrowAction.java
index a525348e3..1107b84dc 100644
--- a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/gef/header/actions/SetGrowAction.java
+++ b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/gef/header/actions/SetGrowAction.java
@@ -25,26 +25,26 @@
  * @coverage swing.FormLayout.header
  */
 public final class SetGrowAction<T extends FormDimensionInfo> extends DimensionHeaderAction<T> {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SetGrowAction(DimensionHeaderEditPart<T> header,
-      String text,
-      ImageDescriptor imageDescriptor) {
-    super(header, text, imageDescriptor, AS_CHECK_BOX);
-    setChecked(header.getDimension().hasGrow());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SetGrowAction(DimensionHeaderEditPart<T> header,
+			String text,
+			ImageDescriptor imageDescriptor) {
+		super(header, text, imageDescriptor, AS_CHECK_BOX);
+		setChecked(header.getDimension().hasGrow());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Run
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void run(T dimension) throws Exception {
-    double weight = dimension.hasGrow() ? FormSpec.NO_GROW : FormSpec.DEFAULT_GROW;
-    dimension.setWeight(weight);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Run
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void run(T dimension) throws Exception {
+		double weight = dimension.hasGrow() ? FormSpec.NO_GROW : FormSpec.DEFAULT_GROW;
+		dimension.setWeight(weight);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/gef/header/actions/SetTemplateAction.java b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/gef/header/actions/SetTemplateAction.java
index f32798bfd..fef1585a4 100644
--- a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/gef/header/actions/SetTemplateAction.java
+++ b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/gef/header/actions/SetTemplateAction.java
@@ -25,28 +25,28 @@
  * @coverage swing.FormLayout.header
  */
 public final class SetTemplateAction<T extends FormDimensionInfo> extends DimensionHeaderAction<T> {
-  private final FormDimensionTemplate m_template;
+	private final FormDimensionTemplate m_template;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SetTemplateAction(DimensionHeaderEditPart<T> header, FormDimensionTemplate template) {
-    super(header, WordUtils.capitalize(template.getTitle()), template.getIcon(), AS_RADIO_BUTTON);
-    m_template = template;
-    setChecked(header.getDimension().isTemplate(template));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SetTemplateAction(DimensionHeaderEditPart<T> header, FormDimensionTemplate template) {
+		super(header, WordUtils.capitalize(template.getTitle()), template.getIcon(), AS_RADIO_BUTTON);
+		m_template = template;
+		setChecked(header.getDimension().isTemplate(template));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Run
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void run(T dimension) throws Exception {
-    if (isChecked()) {
-      dimension.setTemplate(m_template);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Run
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void run(T dimension) throws Exception {
+		if (isChecked()) {
+			dimension.setTemplate(m_template);
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/gef/header/edit/ColumnHeaderEditPart.java b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/gef/header/edit/ColumnHeaderEditPart.java
index d5a66115b..2fcc1a847 100644
--- a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/gef/header/edit/ColumnHeaderEditPart.java
+++ b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/gef/header/edit/ColumnHeaderEditPart.java
@@ -45,250 +45,250 @@
  * @coverage swing.FormLayout.header
  */
 public class ColumnHeaderEditPart extends DimensionHeaderEditPart<FormColumnInfo> {
-  private final FormColumnInfo m_column;
+	private final FormColumnInfo m_column;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ColumnHeaderEditPart(FormLayoutInfo layout, FormColumnInfo column, Figure containerFigure) {
-    super(layout, column, containerFigure);
-    m_column = column;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ColumnHeaderEditPart(FormLayoutInfo layout, FormColumnInfo column, Figure containerFigure) {
+		super(layout, column, containerFigure);
+		m_column = column;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Figure
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Figure createFigure() {
-    Figure newFigure = new Figure() {
-      @Override
-      protected void paintClientArea(Graphics graphics) {
-        Rectangle r = getClientArea();
-        // draw rectangle
-        graphics.setForegroundColor(IColorConstants.buttonDarker);
-        graphics.drawLine(r.x, r.y, r.x, r.bottom());
-        graphics.drawLine(r.right() - 1, r.y, r.right() - 1, r.bottom());
-        // draw column index
-        int titleLeft;
-        int titleRight;
-        {
-          String title = "" + (1 + getIndex());
-          Dimension textExtents = graphics.getTextExtent(title);
-          if (r.width < 3 + textExtents.width + 3) {
-            return;
-          }
-          // draw title
-          titleLeft = r.x + (r.width - textExtents.width) / 2;
-          titleRight = titleLeft + textExtents.width;
-          int y = r.y + (r.height - textExtents.height) / 2;
-          graphics.setForegroundColor(IColorConstants.black);
-          graphics.drawText(title, titleLeft, y);
-        }
-        // draw alignment indicator
-        if (titleLeft - r.x > 3 + 7 + 3) {
-          Image image;
-          if (m_column.getAlignment() == ColumnSpec.LEFT) {
-            image = getImage("left.gif");
-          } else if (m_column.getAlignment() == ColumnSpec.RIGHT) {
-            image = getImage("right.gif");
-          } else if (m_column.getAlignment() == ColumnSpec.CENTER) {
-            image = getImage("center.gif");
-          } else {
-            image = getImage("fill.gif");
-          }
-          //
-          int x = r.x + 2;
-          drawCentered(graphics, image, x);
-        }
-        // draw grow indicator
-        if (m_column.hasGrow()) {
-          if (titleRight + 3 + 7 + 3 < r.right()) {
-            Image image = getImage("grow.gif");
-            drawCentered(graphics, image, r.right() - 3 - image.getBounds().width);
-          }
-        }
-      }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Figure
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Figure createFigure() {
+		Figure newFigure = new Figure() {
+			@Override
+			protected void paintClientArea(Graphics graphics) {
+				Rectangle r = getClientArea();
+				// draw rectangle
+				graphics.setForegroundColor(IColorConstants.buttonDarker);
+				graphics.drawLine(r.x, r.y, r.x, r.bottom());
+				graphics.drawLine(r.right() - 1, r.y, r.right() - 1, r.bottom());
+				// draw column index
+				int titleLeft;
+				int titleRight;
+				{
+					String title = "" + (1 + getIndex());
+					Dimension textExtents = graphics.getTextExtent(title);
+					if (r.width < 3 + textExtents.width + 3) {
+						return;
+					}
+					// draw title
+					titleLeft = r.x + (r.width - textExtents.width) / 2;
+					titleRight = titleLeft + textExtents.width;
+					int y = r.y + (r.height - textExtents.height) / 2;
+					graphics.setForegroundColor(IColorConstants.black);
+					graphics.drawText(title, titleLeft, y);
+				}
+				// draw alignment indicator
+				if (titleLeft - r.x > 3 + 7 + 3) {
+					Image image;
+					if (m_column.getAlignment() == ColumnSpec.LEFT) {
+						image = getImage("left.gif");
+					} else if (m_column.getAlignment() == ColumnSpec.RIGHT) {
+						image = getImage("right.gif");
+					} else if (m_column.getAlignment() == ColumnSpec.CENTER) {
+						image = getImage("center.gif");
+					} else {
+						image = getImage("fill.gif");
+					}
+					//
+					int x = r.x + 2;
+					drawCentered(graphics, image, x);
+				}
+				// draw grow indicator
+				if (m_column.hasGrow()) {
+					if (titleRight + 3 + 7 + 3 < r.right()) {
+						Image image = getImage("grow.gif");
+						drawCentered(graphics, image, r.right() - 3 - image.getBounds().width);
+					}
+				}
+			}
 
-      private Image getImage(String name) {
-        return ColumnHeaderEditPart.this.getImage("alignment/h/" + name);
-      }
+			private Image getImage(String name) {
+				return ColumnHeaderEditPart.this.getImage("alignment/h/" + name);
+			}
 
-      private void drawCentered(Graphics graphics, Image image, int x) {
-        int y = (getBounds().height - image.getBounds().height) / 2;
-        graphics.drawImage(image, x, y);
-      }
-    };
-    //
-    newFigure.setFont(DEFAULT_FONT);
-    newFigure.setOpaque(true);
-    return newFigure;
-  }
+			private void drawCentered(Graphics graphics, Image image, int x) {
+				int y = (getBounds().height - image.getBounds().height) / 2;
+				graphics.drawImage(image, x, y);
+			}
+		};
+		//
+		newFigure.setFont(DEFAULT_FONT);
+		newFigure.setOpaque(true);
+		return newFigure;
+	}
 
-  @Override
-  protected void refreshVisuals() {
-    super.refreshVisuals();
-    int index = getIndex();
-    Interval interval = m_layout.getGridInfo().getColumnIntervals()[index];
-    Rectangle bounds =
-        new Rectangle(interval.begin(),
-            0,
-            interval.length() + 1,
-            ((GraphicalEditPart) getParent()).getFigure().getSize().height);
-    bounds.performTranslate(getOffset().x, 0);
-    getFigure().setBounds(bounds);
-  }
+	@Override
+	protected void refreshVisuals() {
+		super.refreshVisuals();
+		int index = getIndex();
+		Interval interval = m_layout.getGridInfo().getColumnIntervals()[index];
+		Rectangle bounds =
+				new Rectangle(interval.begin(),
+						0,
+						interval.length() + 1,
+						((GraphicalEditPart) getParent()).getFigure().getSize().height);
+		bounds.performTranslate(getOffset().x, 0);
+		getFigure().setBounds(bounds);
+	}
 
-  @Override
-  public int getIndex() {
-    return m_layout.getColumns().indexOf(m_column);
-  }
+	@Override
+	public int getIndex() {
+		return m_layout.getColumns().indexOf(m_column);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IHeaderMenuProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void buildContextMenu(IMenuManager manager) {
-    if (!m_layout.canChangeDimensions()) {
-      return;
-    }
-    // operations
-    {
-      manager.add(new DimensionHeaderAction<FormColumnInfo>(this,
-          GefMessages.ColumnHeaderEditPart_insertColumn) {
-        @Override
-        protected void run(FormColumnInfo dimension) throws Exception {
-          int index = m_layout.getColumns().indexOf(dimension);
-          m_layout.insertColumn(index);
-        }
-      });
-      manager.add(new DimensionHeaderAction<FormColumnInfo>(this,
-          GefMessages.ColumnHeaderEditPart_appendColumn) {
-        @Override
-        protected void run(FormColumnInfo dimension) throws Exception {
-          int index = m_layout.getColumns().indexOf(dimension);
-          m_layout.insertColumn(index + 1);
-        }
-      });
-      manager.add(new DimensionHeaderAction<FormColumnInfo>(this,
-          GefMessages.ColumnHeaderEditPart_deleteColumn) {
-        @Override
-        protected void run(FormColumnInfo dimension) throws Exception {
-          int index = m_layout.getColumns().indexOf(dimension);
-          m_layout.deleteColumn(index);
-        }
-      });
-      manager.add(new DimensionHeaderAction<FormColumnInfo>(this,
-          GefMessages.ColumnHeaderEditPart_DeleteContents) {
-        @Override
-        protected void run(FormColumnInfo dimension) throws Exception {
-          int index = m_layout.getColumns().indexOf(dimension);
-          m_layout.deleteColumnContents(index);
-        }
-      });
-      manager.add(new DimensionHeaderAction<FormColumnInfo>(this,
-          GefMessages.ColumnHeaderEditPart_splitColumn) {
-        @Override
-        protected void run(FormColumnInfo dimension) throws Exception {
-          int index = m_layout.getColumns().indexOf(dimension);
-          m_layout.splitColumn(index);
-        }
-      });
-    }
-    // alignment
-    {
-      manager.add(new Separator());
-      manager.add(new SetAlignmentAction<FormColumnInfo>(this,
-          GefMessages.ColumnHeaderEditPart_haLeft,
-          Activator.getImageDescriptor("alignment/h/menu/left.gif"),
-          ColumnSpec.LEFT));
-      manager.add(new SetAlignmentAction<FormColumnInfo>(this,
-          GefMessages.ColumnHeaderEditPart_haFill,
-          Activator.getImageDescriptor("alignment/h/menu/fill.gif"),
-          ColumnSpec.FILL));
-      manager.add(new SetAlignmentAction<FormColumnInfo>(this,
-          GefMessages.ColumnHeaderEditPart_haCenter,
-          Activator.getImageDescriptor("alignment/h/menu/center.gif"),
-          ColumnSpec.CENTER));
-      manager.add(new SetAlignmentAction<FormColumnInfo>(this,
-          GefMessages.ColumnHeaderEditPart_haRight,
-          Activator.getImageDescriptor("alignment/h/menu/right.gif"),
-          ColumnSpec.RIGHT));
-    }
-    // grow
-    {
-      manager.add(new Separator());
-      manager.add(new SetGrowAction<FormColumnInfo>(this,
-          GefMessages.ColumnHeaderEditPart_grow,
-          Activator.getImageDescriptor("alignment/h/menu/grow.gif")));
-    }
-    // templates
-    {
-      manager.add(new Separator());
-      addTemplateActions(manager, m_dimension.getTemplates(true));
-      {
-        IMenuManager otherManager =
-            new MenuManager(GefMessages.ColumnHeaderEditPart_otherTemplates);
-        manager.add(otherManager);
-        addTemplateActions(otherManager, m_dimension.getTemplates(false));
-      }
-    }
-    // group
-    {
-      manager.add(new Separator());
-      {
-        DimensionHeaderAction<FormColumnInfo> action =
-            new DimensionHeaderAction<FormColumnInfo>(this, GefMessages.ColumnHeaderEditPart_group) {
-              @Override
-              protected void run(List<FormColumnInfo> dimensions) throws Exception {
-                m_layout.groupColumns(dimensions);
-              }
-            };
-        action.setEnabled(getViewer().getSelectedEditParts().size() >= 2);
-        manager.add(action);
-      }
-      {
-        DimensionHeaderAction<FormColumnInfo> action =
-            new DimensionHeaderAction<FormColumnInfo>(this,
-                GefMessages.ColumnHeaderEditPart_unGroup) {
-              @Override
-              protected void run(List<FormColumnInfo> dimensions) throws Exception {
-                m_layout.unGroupColumns(dimensions);
-              }
-            };
-        manager.add(action);
-        // check if there is grouped dimension selected
-        boolean hasGroup = false;
-        for (EditPart editPart : getViewer().getSelectedEditParts()) {
-          ColumnHeaderEditPart headerEditPart = (ColumnHeaderEditPart) editPart;
-          if (m_layout.getColumnGroup(headerEditPart.m_column) != null) {
-            hasGroup = true;
-            break;
-          }
-        }
-        // enable action
-        action.setEnabled(hasGroup);
-      }
-    }
-    // properties
-    {
-      manager.add(new Separator());
-      manager.add(new ObjectInfoAction(m_layout, GefMessages.ColumnHeaderEditPart_properties) {
-        @Override
-        protected void runEx() throws Exception {
-          editDimension();
-        }
-      });
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IHeaderMenuProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void buildContextMenu(IMenuManager manager) {
+		if (!m_layout.canChangeDimensions()) {
+			return;
+		}
+		// operations
+		{
+			manager.add(new DimensionHeaderAction<FormColumnInfo>(this,
+					GefMessages.ColumnHeaderEditPart_insertColumn) {
+				@Override
+				protected void run(FormColumnInfo dimension) throws Exception {
+					int index = m_layout.getColumns().indexOf(dimension);
+					m_layout.insertColumn(index);
+				}
+			});
+			manager.add(new DimensionHeaderAction<FormColumnInfo>(this,
+					GefMessages.ColumnHeaderEditPart_appendColumn) {
+				@Override
+				protected void run(FormColumnInfo dimension) throws Exception {
+					int index = m_layout.getColumns().indexOf(dimension);
+					m_layout.insertColumn(index + 1);
+				}
+			});
+			manager.add(new DimensionHeaderAction<FormColumnInfo>(this,
+					GefMessages.ColumnHeaderEditPart_deleteColumn) {
+				@Override
+				protected void run(FormColumnInfo dimension) throws Exception {
+					int index = m_layout.getColumns().indexOf(dimension);
+					m_layout.deleteColumn(index);
+				}
+			});
+			manager.add(new DimensionHeaderAction<FormColumnInfo>(this,
+					GefMessages.ColumnHeaderEditPart_DeleteContents) {
+				@Override
+				protected void run(FormColumnInfo dimension) throws Exception {
+					int index = m_layout.getColumns().indexOf(dimension);
+					m_layout.deleteColumnContents(index);
+				}
+			});
+			manager.add(new DimensionHeaderAction<FormColumnInfo>(this,
+					GefMessages.ColumnHeaderEditPart_splitColumn) {
+				@Override
+				protected void run(FormColumnInfo dimension) throws Exception {
+					int index = m_layout.getColumns().indexOf(dimension);
+					m_layout.splitColumn(index);
+				}
+			});
+		}
+		// alignment
+		{
+			manager.add(new Separator());
+			manager.add(new SetAlignmentAction<FormColumnInfo>(this,
+					GefMessages.ColumnHeaderEditPart_haLeft,
+					Activator.getImageDescriptor("alignment/h/menu/left.gif"),
+					ColumnSpec.LEFT));
+			manager.add(new SetAlignmentAction<FormColumnInfo>(this,
+					GefMessages.ColumnHeaderEditPart_haFill,
+					Activator.getImageDescriptor("alignment/h/menu/fill.gif"),
+					ColumnSpec.FILL));
+			manager.add(new SetAlignmentAction<FormColumnInfo>(this,
+					GefMessages.ColumnHeaderEditPart_haCenter,
+					Activator.getImageDescriptor("alignment/h/menu/center.gif"),
+					ColumnSpec.CENTER));
+			manager.add(new SetAlignmentAction<FormColumnInfo>(this,
+					GefMessages.ColumnHeaderEditPart_haRight,
+					Activator.getImageDescriptor("alignment/h/menu/right.gif"),
+					ColumnSpec.RIGHT));
+		}
+		// grow
+		{
+			manager.add(new Separator());
+			manager.add(new SetGrowAction<FormColumnInfo>(this,
+					GefMessages.ColumnHeaderEditPart_grow,
+					Activator.getImageDescriptor("alignment/h/menu/grow.gif")));
+		}
+		// templates
+		{
+			manager.add(new Separator());
+			addTemplateActions(manager, m_dimension.getTemplates(true));
+			{
+				IMenuManager otherManager =
+						new MenuManager(GefMessages.ColumnHeaderEditPart_otherTemplates);
+				manager.add(otherManager);
+				addTemplateActions(otherManager, m_dimension.getTemplates(false));
+			}
+		}
+		// group
+		{
+			manager.add(new Separator());
+			{
+				DimensionHeaderAction<FormColumnInfo> action =
+						new DimensionHeaderAction<FormColumnInfo>(this, GefMessages.ColumnHeaderEditPart_group) {
+					@Override
+					protected void run(List<FormColumnInfo> dimensions) throws Exception {
+						m_layout.groupColumns(dimensions);
+					}
+				};
+				action.setEnabled(getViewer().getSelectedEditParts().size() >= 2);
+				manager.add(action);
+			}
+			{
+				DimensionHeaderAction<FormColumnInfo> action =
+						new DimensionHeaderAction<FormColumnInfo>(this,
+								GefMessages.ColumnHeaderEditPart_unGroup) {
+					@Override
+					protected void run(List<FormColumnInfo> dimensions) throws Exception {
+						m_layout.unGroupColumns(dimensions);
+					}
+				};
+				manager.add(action);
+				// check if there is grouped dimension selected
+				boolean hasGroup = false;
+				for (EditPart editPart : getViewer().getSelectedEditParts()) {
+					ColumnHeaderEditPart headerEditPart = (ColumnHeaderEditPart) editPart;
+					if (m_layout.getColumnGroup(headerEditPart.m_column) != null) {
+						hasGroup = true;
+						break;
+					}
+				}
+				// enable action
+				action.setEnabled(hasGroup);
+			}
+		}
+		// properties
+		{
+			manager.add(new Separator());
+			manager.add(new ObjectInfoAction(m_layout, GefMessages.ColumnHeaderEditPart_properties) {
+				@Override
+				protected void runEx() throws Exception {
+					editDimension();
+				}
+			});
+		}
+	}
 
-  @Override
-  protected void editDimension() {
-    new ColumnEditDialog(DesignerPlugin.getShell(), m_layout, m_column).open();
-  }
+	@Override
+	protected void editDimension() {
+		new ColumnEditDialog(DesignerPlugin.getShell(), m_layout, m_column).open();
+	}
 }
diff --git a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/gef/header/edit/DimensionHeaderEditPart.java b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/gef/header/edit/DimensionHeaderEditPart.java
index 82cb0d94b..0bfc44cb8 100644
--- a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/gef/header/edit/DimensionHeaderEditPart.java
+++ b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/gef/header/edit/DimensionHeaderEditPart.java
@@ -41,148 +41,148 @@
  * @coverage swing.FormLayout.header
  */
 public abstract class DimensionHeaderEditPart<T extends FormDimensionInfo>
-    extends
-      GraphicalEditPart implements IHeaderMenuProvider {
-  protected static final Color COLOR_NORMAL = Headers.COLOR_HEADER;
-  protected static final Color COLOR_GAP = DrawUtils.getShiftedColor(COLOR_NORMAL, -32);
-  protected static final Font DEFAULT_FONT = new Font(null, "Arial", 7, SWT.NONE);
-  protected static final Color GROUP_COLORS[] = new Color[]{
-      new Color(null, 200, 255, 200),
-      new Color(null, 255, 210, 170),
-      new Color(null, 180, 255, 255),
-      new Color(null, 255, 255, 180),
-      new Color(null, 230, 180, 255)};
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance fields
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected final FormLayoutInfo m_layout;
-  protected final T m_dimension;
-  private final Figure m_containerFigure;
+extends
+GraphicalEditPart implements IHeaderMenuProvider {
+	protected static final Color COLOR_NORMAL = Headers.COLOR_HEADER;
+	protected static final Color COLOR_GAP = DrawUtils.getShiftedColor(COLOR_NORMAL, -32);
+	protected static final Font DEFAULT_FONT = new Font(null, "Arial", 7, SWT.NONE);
+	protected static final Color GROUP_COLORS[] = new Color[]{
+			new Color(null, 200, 255, 200),
+			new Color(null, 255, 210, 170),
+			new Color(null, 180, 255, 255),
+			new Color(null, 255, 255, 180),
+			new Color(null, 230, 180, 255)};
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance fields
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected final FormLayoutInfo m_layout;
+	protected final T m_dimension;
+	private final Figure m_containerFigure;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DimensionHeaderEditPart(FormLayoutInfo layout, T dimension, Figure containerFigure) {
-    m_layout = layout;
-    m_dimension = dimension;
-    m_containerFigure = containerFigure;
-    setModel(dimension);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DimensionHeaderEditPart(FormLayoutInfo layout, T dimension, Figure containerFigure) {
+		m_layout = layout;
+		m_dimension = dimension;
+		m_containerFigure = containerFigure;
+		setModel(dimension);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the index of this {@link FormDimensionInfo}.
-   */
-  public abstract int getIndex();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the index of this {@link FormDimensionInfo}.
+	 */
+	public abstract int getIndex();
 
-  /**
-   * @return the host {@link FormLayoutInfo}.
-   */
-  public final FormLayoutInfo getLayout() {
-    return m_layout;
-  }
+	/**
+	 * @return the host {@link FormLayoutInfo}.
+	 */
+	public final FormLayoutInfo getLayout() {
+		return m_layout;
+	}
 
-  /**
-   * @return the {@link FormDimensionInfo} model.
-   */
-  public final T getDimension() {
-    return m_dimension;
-  }
+	/**
+	 * @return the {@link FormDimensionInfo} model.
+	 */
+	public final T getDimension() {
+		return m_dimension;
+	}
 
-  /**
-   * @return the offset of {@link Figure} with headers relative to the absolute layer.
-   */
-  public final Point getOffset() {
-    Point offset = new Point(0, 0);
-    FigureUtils.translateFigureToAbsolute2(m_containerFigure, offset);
-    return offset;
-  }
+	/**
+	 * @return the offset of {@link Figure} with headers relative to the absolute layer.
+	 */
+	public final Point getOffset() {
+		Point offset = new Point(0, 0);
+		FigureUtils.translateFigureToAbsolute2(m_containerFigure, offset);
+		return offset;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Dragging
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final Tool getDragTrackerTool(Request request) {
-    return new ParentTargetDragEditPartTracker(this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Dragging
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final Tool getDragTrackerTool(Request request) {
+		return new ParentTargetDragEditPartTracker(this);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Figure support
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void refreshVisuals() {
-    // update tooltip
-    getFigure().setToolTipText(m_dimension.getToolTip());
-    // update background
-    {
-      if (m_dimension.isGap()) {
-        getFigure().setBackground(COLOR_GAP);
-      } else {
-        int group = m_layout.getDimensionGroupIndex(m_dimension);
-        if (group != -1) {
-          getFigure().setBackground(GROUP_COLORS[group % GROUP_COLORS.length]);
-        } else {
-          getFigure().setBackground(COLOR_NORMAL);
-        }
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Figure support
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void refreshVisuals() {
+		// update tooltip
+		getFigure().setToolTipText(m_dimension.getToolTip());
+		// update background
+		{
+			if (m_dimension.isGap()) {
+				getFigure().setBackground(COLOR_GAP);
+			} else {
+				int group = m_layout.getDimensionGroupIndex(m_dimension);
+				if (group != -1) {
+					getFigure().setBackground(GROUP_COLORS[group % GROUP_COLORS.length]);
+				} else {
+					getFigure().setBackground(COLOR_NORMAL);
+				}
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Images
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected Image getImage(String name) {
-    return Activator.getImage(name);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Images
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected Image getImage(String name) {
+		return Activator.getImage(name);
+	}
 
-  protected ImageDescriptor getImageDescriptor(String name) {
-    return Activator.getImageDescriptor(name);
-  }
+	protected ImageDescriptor getImageDescriptor(String name) {
+		return Activator.getImageDescriptor(name);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Context menu
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds template actions to the given {@link IMenuManager}.
-   */
-  protected final void addTemplateActions(IMenuManager manager, FormDimensionTemplate[] templates) {
-    for (int i = 0; i < templates.length; i++) {
-      FormDimensionTemplate template = templates[i];
-      manager.add(new SetTemplateAction<T>(this, template));
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Context menu
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds template actions to the given {@link IMenuManager}.
+	 */
+	protected final void addTemplateActions(IMenuManager manager, FormDimensionTemplate[] templates) {
+		for (int i = 0; i < templates.length; i++) {
+			FormDimensionTemplate template = templates[i];
+			manager.add(new SetTemplateAction<T>(this, template));
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Edit
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void performRequest(Request request) {
-    super.performRequest(request);
-    if (request.getType() == Request.REQ_OPEN) {
-      editDimension();
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Edit
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void performRequest(Request request) {
+		super.performRequest(request);
+		if (request.getType() == Request.REQ_OPEN) {
+			editDimension();
+		}
+	}
 
-  /**
-   * Opens the {@link FormDimensionInfo} edit dialog.
-   */
-  protected abstract void editDimension();
+	/**
+	 * Opens the {@link FormDimensionInfo} edit dialog.
+	 */
+	protected abstract void editDimension();
 }
diff --git a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/gef/header/edit/RowHeaderEditPart.java b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/gef/header/edit/RowHeaderEditPart.java
index 6a3587ca3..9008cd0f2 100644
--- a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/gef/header/edit/RowHeaderEditPart.java
+++ b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/gef/header/edit/RowHeaderEditPart.java
@@ -45,248 +45,248 @@
  * @coverage swing.FormLayout.header
  */
 public class RowHeaderEditPart extends DimensionHeaderEditPart<FormRowInfo> {
-  private final FormRowInfo m_row;
+	private final FormRowInfo m_row;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public RowHeaderEditPart(FormLayoutInfo layout, FormRowInfo row, Figure containerFigure) {
-    super(layout, row, containerFigure);
-    m_row = row;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public RowHeaderEditPart(FormLayoutInfo layout, FormRowInfo row, Figure containerFigure) {
+		super(layout, row, containerFigure);
+		m_row = row;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Figure
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Figure createFigure() {
-    Figure newFigure = new Figure() {
-      @Override
-      protected void paintClientArea(Graphics graphics) {
-        Rectangle r = getClientArea();
-        // draw rectangle
-        graphics.setForegroundColor(IColorConstants.buttonDarker);
-        graphics.drawLine(r.x, r.y, r.right(), r.y);
-        graphics.drawLine(r.x, r.bottom() - 1, r.right(), r.bottom() - 1);
-        // draw row index
-        int titleTop;
-        int titleBottom;
-        {
-          String title = "" + (1 + getIndex());
-          Dimension textExtents = graphics.getTextExtent(title);
-          if (r.height < textExtents.height) {
-            return;
-          }
-          // draw title
-          titleTop = r.y + (r.height - textExtents.height) / 2;
-          titleBottom = titleTop + textExtents.height;
-          int x = r.x + (r.width - textExtents.width) / 2;
-          graphics.setForegroundColor(IColorConstants.black);
-          graphics.drawText(title, x, titleTop);
-        }
-        // draw alignment indicator
-        if (titleTop - r.y > 3 + 7 + 3) {
-          Image image;
-          if (m_dimension.getAlignment() == RowSpec.TOP) {
-            image = getImage("top.gif");
-          } else if (m_dimension.getAlignment() == RowSpec.BOTTOM) {
-            image = getImage("bottom.gif");
-          } else if (m_dimension.getAlignment() == RowSpec.CENTER) {
-            image = getImage("center.gif");
-          } else {
-            image = getImage("fill.gif");
-          }
-          //
-          int y = r.y + 2;
-          drawCentered(graphics, image, y);
-        }
-        // draw grow indicator
-        if (m_dimension.hasGrow()) {
-          if (titleBottom + 3 + 7 + 3 < r.bottom()) {
-            Image image = getImage("grow.gif");
-            drawCentered(graphics, image, r.bottom() - 3 - image.getBounds().height);
-          }
-        }
-      }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Figure
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Figure createFigure() {
+		Figure newFigure = new Figure() {
+			@Override
+			protected void paintClientArea(Graphics graphics) {
+				Rectangle r = getClientArea();
+				// draw rectangle
+				graphics.setForegroundColor(IColorConstants.buttonDarker);
+				graphics.drawLine(r.x, r.y, r.right(), r.y);
+				graphics.drawLine(r.x, r.bottom() - 1, r.right(), r.bottom() - 1);
+				// draw row index
+				int titleTop;
+				int titleBottom;
+				{
+					String title = "" + (1 + getIndex());
+					Dimension textExtents = graphics.getTextExtent(title);
+					if (r.height < textExtents.height) {
+						return;
+					}
+					// draw title
+					titleTop = r.y + (r.height - textExtents.height) / 2;
+					titleBottom = titleTop + textExtents.height;
+					int x = r.x + (r.width - textExtents.width) / 2;
+					graphics.setForegroundColor(IColorConstants.black);
+					graphics.drawText(title, x, titleTop);
+				}
+				// draw alignment indicator
+				if (titleTop - r.y > 3 + 7 + 3) {
+					Image image;
+					if (m_dimension.getAlignment() == RowSpec.TOP) {
+						image = getImage("top.gif");
+					} else if (m_dimension.getAlignment() == RowSpec.BOTTOM) {
+						image = getImage("bottom.gif");
+					} else if (m_dimension.getAlignment() == RowSpec.CENTER) {
+						image = getImage("center.gif");
+					} else {
+						image = getImage("fill.gif");
+					}
+					//
+					int y = r.y + 2;
+					drawCentered(graphics, image, y);
+				}
+				// draw grow indicator
+				if (m_dimension.hasGrow()) {
+					if (titleBottom + 3 + 7 + 3 < r.bottom()) {
+						Image image = getImage("grow.gif");
+						drawCentered(graphics, image, r.bottom() - 3 - image.getBounds().height);
+					}
+				}
+			}
 
-      private Image getImage(String name) {
-        return RowHeaderEditPart.this.getImage("alignment/v/" + name);
-      }
+			private Image getImage(String name) {
+				return RowHeaderEditPart.this.getImage("alignment/v/" + name);
+			}
 
-      private void drawCentered(Graphics graphics, Image image, int y) {
-        int x = (getBounds().width - image.getBounds().width) / 2;
-        graphics.drawImage(image, x, y);
-      }
-    };
-    //
-    newFigure.setFont(DEFAULT_FONT);
-    newFigure.setOpaque(true);
-    return newFigure;
-  }
+			private void drawCentered(Graphics graphics, Image image, int y) {
+				int x = (getBounds().width - image.getBounds().width) / 2;
+				graphics.drawImage(image, x, y);
+			}
+		};
+		//
+		newFigure.setFont(DEFAULT_FONT);
+		newFigure.setOpaque(true);
+		return newFigure;
+	}
 
-  @Override
-  protected void refreshVisuals() {
-    super.refreshVisuals();
-    int index = getIndex();
-    Interval interval = m_layout.getGridInfo().getRowIntervals()[index];
-    Rectangle bounds =
-        new Rectangle(0,
-            interval.begin(),
-            ((GraphicalEditPart) getParent()).getFigure().getSize().width,
-            interval.length()+ 1);
-    bounds.performTranslate(0, getOffset().y);
-    getFigure().setBounds(bounds);
-  }
+	@Override
+	protected void refreshVisuals() {
+		super.refreshVisuals();
+		int index = getIndex();
+		Interval interval = m_layout.getGridInfo().getRowIntervals()[index];
+		Rectangle bounds =
+				new Rectangle(0,
+						interval.begin(),
+						((GraphicalEditPart) getParent()).getFigure().getSize().width,
+						interval.length()+ 1);
+		bounds.performTranslate(0, getOffset().y);
+		getFigure().setBounds(bounds);
+	}
 
-  @Override
-  public int getIndex() {
-    return m_layout.getRows().indexOf(m_row);
-  }
+	@Override
+	public int getIndex() {
+		return m_layout.getRows().indexOf(m_row);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IHeaderMenuProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void buildContextMenu(IMenuManager manager) {
-    if (!m_layout.canChangeDimensions()) {
-      return;
-    }
-    // operations
-    {
-      manager.add(new DimensionHeaderAction<FormRowInfo>(this,
-          GefMessages.RowHeaderEditPart_insertRow) {
-        @Override
-        protected void run(FormRowInfo dimension) throws Exception {
-          int index = m_layout.getRows().indexOf(dimension);
-          m_layout.insertRow(index);
-        }
-      });
-      manager.add(new DimensionHeaderAction<FormRowInfo>(this,
-          GefMessages.RowHeaderEditPart_appendRow) {
-        @Override
-        protected void run(FormRowInfo dimension) throws Exception {
-          int index = m_layout.getRows().indexOf(dimension);
-          m_layout.insertRow(index + 1);
-        }
-      });
-      manager.add(new DimensionHeaderAction<FormRowInfo>(this,
-          GefMessages.RowHeaderEditPart_deleteRow) {
-        @Override
-        protected void run(FormRowInfo dimension) throws Exception {
-          int index = m_layout.getRows().indexOf(dimension);
-          m_layout.deleteRow(index);
-        }
-      });
-      manager.add(new DimensionHeaderAction<FormRowInfo>(this,
-          GefMessages.RowHeaderEditPart_deleteContents) {
-        @Override
-        protected void run(FormRowInfo dimension) throws Exception {
-          int index = m_layout.getRows().indexOf(dimension);
-          m_layout.deleteRowContents(index);
-        }
-      });
-      manager.add(new DimensionHeaderAction<FormRowInfo>(this,
-          GefMessages.RowHeaderEditPart_splitRow) {
-        @Override
-        protected void run(FormRowInfo dimension) throws Exception {
-          int index = m_layout.getRows().indexOf(dimension);
-          m_layout.splitRow(index);
-        }
-      });
-    }
-    // alignment
-    {
-      manager.add(new Separator());
-      manager.add(new SetAlignmentAction<FormRowInfo>(this,
-          GefMessages.RowHeaderEditPart_vaTop,
-          Activator.getImageDescriptor("alignment/v/menu/top.gif"),
-          RowSpec.TOP));
-      manager.add(new SetAlignmentAction<FormRowInfo>(this,
-          GefMessages.RowHeaderEditPart_vaCenter,
-          Activator.getImageDescriptor("alignment/v/menu/center.gif"),
-          RowSpec.CENTER));
-      manager.add(new SetAlignmentAction<FormRowInfo>(this,
-          GefMessages.RowHeaderEditPart_vaBottom,
-          Activator.getImageDescriptor("alignment/v/menu/bottom.gif"),
-          RowSpec.BOTTOM));
-      manager.add(new SetAlignmentAction<FormRowInfo>(this,
-          GefMessages.RowHeaderEditPart_vaFill,
-          Activator.getImageDescriptor("alignment/v/menu/fill.gif"),
-          RowSpec.FILL));
-    }
-    // grow
-    {
-      manager.add(new Separator());
-      manager.add(new SetGrowAction<FormRowInfo>(this,
-          GefMessages.RowHeaderEditPart_grow,
-          Activator.getImageDescriptor("alignment/h/menu/grow.gif")));
-    }
-    // templates
-    {
-      manager.add(new Separator());
-      addTemplateActions(manager, m_dimension.getTemplates(true));
-      {
-        IMenuManager otherManager = new MenuManager(GefMessages.RowHeaderEditPart_otherTemplates);
-        manager.add(otherManager);
-        addTemplateActions(otherManager, m_dimension.getTemplates(false));
-      }
-    }
-    // group
-    {
-      manager.add(new Separator());
-      {
-        DimensionHeaderAction<FormRowInfo> action =
-            new DimensionHeaderAction<FormRowInfo>(this, GefMessages.RowHeaderEditPart_group) {
-              @Override
-              protected void run(List<FormRowInfo> dimensions) throws Exception {
-                m_layout.groupRows(dimensions);
-              }
-            };
-        action.setEnabled(getViewer().getSelectedEditParts().size() >= 2);
-        manager.add(action);
-      }
-      {
-        DimensionHeaderAction<FormRowInfo> action =
-            new DimensionHeaderAction<FormRowInfo>(this, GefMessages.RowHeaderEditPart_unGroup) {
-              @Override
-              protected void run(List<FormRowInfo> dimensions) throws Exception {
-                m_layout.unGroupRows(dimensions);
-              }
-            };
-        manager.add(action);
-        // check if there is groupped dimension selected
-        boolean hasGroup = false;
-        for (EditPart editPart : getViewer().getSelectedEditParts()) {
-          RowHeaderEditPart headerEditPart = (RowHeaderEditPart) editPart;
-          if (m_layout.getRowGroup(headerEditPart.m_row) != null) {
-            hasGroup = true;
-            break;
-          }
-        }
-        // enable action
-        action.setEnabled(hasGroup);
-      }
-    }
-    // properties
-    {
-      manager.add(new Separator());
-      manager.add(new ObjectInfoAction(m_layout, GefMessages.RowHeaderEditPart_properties) {
-        @Override
-        protected void runEx() throws Exception {
-          editDimension();
-        }
-      });
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IHeaderMenuProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void buildContextMenu(IMenuManager manager) {
+		if (!m_layout.canChangeDimensions()) {
+			return;
+		}
+		// operations
+		{
+			manager.add(new DimensionHeaderAction<FormRowInfo>(this,
+					GefMessages.RowHeaderEditPart_insertRow) {
+				@Override
+				protected void run(FormRowInfo dimension) throws Exception {
+					int index = m_layout.getRows().indexOf(dimension);
+					m_layout.insertRow(index);
+				}
+			});
+			manager.add(new DimensionHeaderAction<FormRowInfo>(this,
+					GefMessages.RowHeaderEditPart_appendRow) {
+				@Override
+				protected void run(FormRowInfo dimension) throws Exception {
+					int index = m_layout.getRows().indexOf(dimension);
+					m_layout.insertRow(index + 1);
+				}
+			});
+			manager.add(new DimensionHeaderAction<FormRowInfo>(this,
+					GefMessages.RowHeaderEditPart_deleteRow) {
+				@Override
+				protected void run(FormRowInfo dimension) throws Exception {
+					int index = m_layout.getRows().indexOf(dimension);
+					m_layout.deleteRow(index);
+				}
+			});
+			manager.add(new DimensionHeaderAction<FormRowInfo>(this,
+					GefMessages.RowHeaderEditPart_deleteContents) {
+				@Override
+				protected void run(FormRowInfo dimension) throws Exception {
+					int index = m_layout.getRows().indexOf(dimension);
+					m_layout.deleteRowContents(index);
+				}
+			});
+			manager.add(new DimensionHeaderAction<FormRowInfo>(this,
+					GefMessages.RowHeaderEditPart_splitRow) {
+				@Override
+				protected void run(FormRowInfo dimension) throws Exception {
+					int index = m_layout.getRows().indexOf(dimension);
+					m_layout.splitRow(index);
+				}
+			});
+		}
+		// alignment
+		{
+			manager.add(new Separator());
+			manager.add(new SetAlignmentAction<FormRowInfo>(this,
+					GefMessages.RowHeaderEditPart_vaTop,
+					Activator.getImageDescriptor("alignment/v/menu/top.gif"),
+					RowSpec.TOP));
+			manager.add(new SetAlignmentAction<FormRowInfo>(this,
+					GefMessages.RowHeaderEditPart_vaCenter,
+					Activator.getImageDescriptor("alignment/v/menu/center.gif"),
+					RowSpec.CENTER));
+			manager.add(new SetAlignmentAction<FormRowInfo>(this,
+					GefMessages.RowHeaderEditPart_vaBottom,
+					Activator.getImageDescriptor("alignment/v/menu/bottom.gif"),
+					RowSpec.BOTTOM));
+			manager.add(new SetAlignmentAction<FormRowInfo>(this,
+					GefMessages.RowHeaderEditPart_vaFill,
+					Activator.getImageDescriptor("alignment/v/menu/fill.gif"),
+					RowSpec.FILL));
+		}
+		// grow
+		{
+			manager.add(new Separator());
+			manager.add(new SetGrowAction<FormRowInfo>(this,
+					GefMessages.RowHeaderEditPart_grow,
+					Activator.getImageDescriptor("alignment/h/menu/grow.gif")));
+		}
+		// templates
+		{
+			manager.add(new Separator());
+			addTemplateActions(manager, m_dimension.getTemplates(true));
+			{
+				IMenuManager otherManager = new MenuManager(GefMessages.RowHeaderEditPart_otherTemplates);
+				manager.add(otherManager);
+				addTemplateActions(otherManager, m_dimension.getTemplates(false));
+			}
+		}
+		// group
+		{
+			manager.add(new Separator());
+			{
+				DimensionHeaderAction<FormRowInfo> action =
+						new DimensionHeaderAction<FormRowInfo>(this, GefMessages.RowHeaderEditPart_group) {
+					@Override
+					protected void run(List<FormRowInfo> dimensions) throws Exception {
+						m_layout.groupRows(dimensions);
+					}
+				};
+				action.setEnabled(getViewer().getSelectedEditParts().size() >= 2);
+				manager.add(action);
+			}
+			{
+				DimensionHeaderAction<FormRowInfo> action =
+						new DimensionHeaderAction<FormRowInfo>(this, GefMessages.RowHeaderEditPart_unGroup) {
+					@Override
+					protected void run(List<FormRowInfo> dimensions) throws Exception {
+						m_layout.unGroupRows(dimensions);
+					}
+				};
+				manager.add(action);
+				// check if there is groupped dimension selected
+				boolean hasGroup = false;
+				for (EditPart editPart : getViewer().getSelectedEditParts()) {
+					RowHeaderEditPart headerEditPart = (RowHeaderEditPart) editPart;
+					if (m_layout.getRowGroup(headerEditPart.m_row) != null) {
+						hasGroup = true;
+						break;
+					}
+				}
+				// enable action
+				action.setEnabled(hasGroup);
+			}
+		}
+		// properties
+		{
+			manager.add(new Separator());
+			manager.add(new ObjectInfoAction(m_layout, GefMessages.RowHeaderEditPart_properties) {
+				@Override
+				protected void runEx() throws Exception {
+					editDimension();
+				}
+			});
+		}
+	}
 
-  @Override
-  protected void editDimension() {
-    new RowEditDialog(DesignerPlugin.getShell(), m_layout, m_row).open();
-  }
+	@Override
+	protected void editDimension() {
+		new RowEditDialog(DesignerPlugin.getShell(), m_layout, m_row).open();
+	}
 }
diff --git a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/gef/header/layout/ColumnsLayoutEditPolicy.java b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/gef/header/layout/ColumnsLayoutEditPolicy.java
index c2f7f3745..22a06bc35 100644
--- a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/gef/header/layout/ColumnsLayoutEditPolicy.java
+++ b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/gef/header/layout/ColumnsLayoutEditPolicy.java
@@ -46,160 +46,160 @@
  * @coverage swing.FormLayout.header
  */
 public final class ColumnsLayoutEditPolicy extends AbstractHeaderLayoutEditPolicy {
-  private final FormLayoutEditPolicy m_mainPolicy;
-  private final FormLayoutInfo m_layout;
+	private final FormLayoutEditPolicy m_mainPolicy;
+	private final FormLayoutInfo m_layout;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ColumnsLayoutEditPolicy(FormLayoutEditPolicy mainPolicy, FormLayoutInfo layout) {
-    super(mainPolicy);
-    m_mainPolicy = mainPolicy;
-    m_layout = layout;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ColumnsLayoutEditPolicy(FormLayoutEditPolicy mainPolicy, FormLayoutInfo layout) {
+		super(mainPolicy);
+		m_mainPolicy = mainPolicy;
+		m_layout = layout;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Children
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void decorateChild(EditPart child) {
-    child.installEditPolicy(EditPolicy.SELECTION_ROLE, new ColumnSelectionEditPolicy(m_mainPolicy));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Children
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void decorateChild(EditPart child) {
+		child.installEditPolicy(EditPolicy.SELECTION_ROLE, new ColumnSelectionEditPolicy(m_mainPolicy));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Move
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final Figure m_insertFeedback = AbstractGridLayoutEditPolicy.createInsertFigure();
-  private TextFeedback m_feedback;
-  private Command m_moveCommand;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Move
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final Figure m_insertFeedback = AbstractGridLayoutEditPolicy.createInsertFigure();
+	private TextFeedback m_feedback;
+	private Command m_moveCommand;
 
-  @Override
-  protected Command getMoveCommand(ChangeBoundsRequest request) {
-    if (!m_layout.canChangeDimensions()) {
-      return null;
-    }
-    return m_moveCommand;
-  }
+	@Override
+	protected Command getMoveCommand(ChangeBoundsRequest request) {
+		if (!m_layout.canChangeDimensions()) {
+			return null;
+		}
+		return m_moveCommand;
+	}
 
-  @Override
-  protected void showLayoutTargetFeedback(Request request) {
-    // prepare header
-    ColumnHeaderEditPart headerEditPart;
-    {
-      ChangeBoundsRequest changeBoundsRequest = (ChangeBoundsRequest) request;
-      headerEditPart = (ColumnHeaderEditPart) changeBoundsRequest.getEditParts().get(0);
-    }
-    // prepare location
-    Point location;
-    {
-      IDropRequest dropRequest = (IDropRequest) request;
-      location = dropRequest.getLocation().getCopy();
-    }
-    // prepare target header
-    ColumnHeaderEditPart target = null;
-    {
-      for (EditPart editPart : getHost().getChildren()) {
-        ColumnHeaderEditPart columnEditPart = (ColumnHeaderEditPart) editPart;
-        Rectangle bounds = columnEditPart.getFigure().getBounds();
-        if (location.x < bounds.getCenter().x) {
-          target = columnEditPart;
-          break;
-        }
-      }
-    }
-    // prepare grid information
-    IGridInfo gridInfo = m_layout.getGridInfo();
-    Interval[] columnIntervals = gridInfo.getColumnIntervals();
-    Interval[] rowIntervals = gridInfo.getRowIntervals();
-    int y1 = rowIntervals[0].begin() - 5;
-    int y2 = rowIntervals[rowIntervals.length - 1].end() + 5;
-    // prepare index of target column and position for insert feedbacks
-    int index;
-    int x;
-    int size = AbstractGridLayoutEditPolicy.INSERT_COLUMN_SIZE;
-    if (target != null) {
-      index = target.getIndex();
-      // set default
-      x = columnIntervals[index].begin() - size / 2;
-      // check for gap
-      FormColumnInfo column = m_layout.getColumns().get(index);
-      if (column.isGap()) {
-        x = columnIntervals[index].begin();
-        size = columnIntervals[index].length() + 1;
-      } else if (index != 0) {
-        FormColumnInfo prevColumn = m_layout.getColumns().get(index - 1);
-        if (prevColumn.isGap()) {
-          x = columnIntervals[index - 1].begin();
-          size = columnIntervals[index - 1].length() + 1;
-          index--;
-        }
-      }
-    } else {
-      index = m_layout.getColumns().size();
-      m_mainPolicy.showInsertFeedbacks(null, null);
-      //
-      x = columnIntervals[columnIntervals.length - 1].end() - size / 2;
-    }
-    // show insert feedbacks
-    {
-      // ...on main viewer
-      m_mainPolicy.showInsertFeedbacks(new Rectangle(x, y1, size, y2 - y1), null);
-      // ...on header viewer
-      {
-        if (m_insertFeedback.getParent() == null) {
-          addFeedback(m_insertFeedback);
-        }
-        //
-        Point offset = headerEditPart.getOffset();
-        Rectangle bounds = new Rectangle(x + offset.x, 0, size, getHostFigure().getSize().height);
-        m_insertFeedback.setBounds(bounds);
-      }
-    }
-    // show text feedback
-    {
-      Layer feedbackLayer = getMainLayer(IEditPartViewer.FEEDBACK_LAYER);
-      // add feedback
-      if (m_feedback == null) {
-        m_feedback = new TextFeedback(feedbackLayer);
-        m_feedback.add();
-      }
-      // set feedback bounds
-      {
-        Point feedbackLocation = new Point(location.x + 30, 10);
-        FigureUtils.translateAbsoluteToFigure(feedbackLayer, feedbackLocation);
-        m_feedback.setLocation(feedbackLocation);
-      }
-      // set text
-      m_feedback.setText(MessageFormat.format(
-          GefMessages.ColumnsLayoutEditPolicy_feedbackPattern,
-          1 + index));
-    }
-    // prepare command
-    {
-      final FormColumnInfo column = headerEditPart.getDimension();
-      final int targetIndex = index;
-      m_moveCommand = new EditCommand(m_layout) {
-        @Override
-        protected void executeEdit() throws Exception {
-          m_layout.command_MOVE_COLUMN(m_layout.getColumns().indexOf(column), targetIndex);
-        }
-      };
-    }
-  }
+	@Override
+	protected void showLayoutTargetFeedback(Request request) {
+		// prepare header
+		ColumnHeaderEditPart headerEditPart;
+		{
+			ChangeBoundsRequest changeBoundsRequest = (ChangeBoundsRequest) request;
+			headerEditPart = (ColumnHeaderEditPart) changeBoundsRequest.getEditParts().get(0);
+		}
+		// prepare location
+		Point location;
+		{
+			IDropRequest dropRequest = (IDropRequest) request;
+			location = dropRequest.getLocation().getCopy();
+		}
+		// prepare target header
+		ColumnHeaderEditPart target = null;
+		{
+			for (EditPart editPart : getHost().getChildren()) {
+				ColumnHeaderEditPart columnEditPart = (ColumnHeaderEditPart) editPart;
+				Rectangle bounds = columnEditPart.getFigure().getBounds();
+				if (location.x < bounds.getCenter().x) {
+					target = columnEditPart;
+					break;
+				}
+			}
+		}
+		// prepare grid information
+		IGridInfo gridInfo = m_layout.getGridInfo();
+		Interval[] columnIntervals = gridInfo.getColumnIntervals();
+		Interval[] rowIntervals = gridInfo.getRowIntervals();
+		int y1 = rowIntervals[0].begin() - 5;
+		int y2 = rowIntervals[rowIntervals.length - 1].end() + 5;
+		// prepare index of target column and position for insert feedbacks
+		int index;
+		int x;
+		int size = AbstractGridLayoutEditPolicy.INSERT_COLUMN_SIZE;
+		if (target != null) {
+			index = target.getIndex();
+			// set default
+			x = columnIntervals[index].begin() - size / 2;
+			// check for gap
+			FormColumnInfo column = m_layout.getColumns().get(index);
+			if (column.isGap()) {
+				x = columnIntervals[index].begin();
+				size = columnIntervals[index].length() + 1;
+			} else if (index != 0) {
+				FormColumnInfo prevColumn = m_layout.getColumns().get(index - 1);
+				if (prevColumn.isGap()) {
+					x = columnIntervals[index - 1].begin();
+					size = columnIntervals[index - 1].length() + 1;
+					index--;
+				}
+			}
+		} else {
+			index = m_layout.getColumns().size();
+			m_mainPolicy.showInsertFeedbacks(null, null);
+			//
+			x = columnIntervals[columnIntervals.length - 1].end() - size / 2;
+		}
+		// show insert feedbacks
+		{
+			// ...on main viewer
+			m_mainPolicy.showInsertFeedbacks(new Rectangle(x, y1, size, y2 - y1), null);
+			// ...on header viewer
+			{
+				if (m_insertFeedback.getParent() == null) {
+					addFeedback(m_insertFeedback);
+				}
+				//
+				Point offset = headerEditPart.getOffset();
+				Rectangle bounds = new Rectangle(x + offset.x, 0, size, getHostFigure().getSize().height);
+				m_insertFeedback.setBounds(bounds);
+			}
+		}
+		// show text feedback
+		{
+			Layer feedbackLayer = getMainLayer(IEditPartViewer.FEEDBACK_LAYER);
+			// add feedback
+			if (m_feedback == null) {
+				m_feedback = new TextFeedback(feedbackLayer);
+				m_feedback.add();
+			}
+			// set feedback bounds
+			{
+				Point feedbackLocation = new Point(location.x + 30, 10);
+				FigureUtils.translateAbsoluteToFigure(feedbackLayer, feedbackLocation);
+				m_feedback.setLocation(feedbackLocation);
+			}
+			// set text
+			m_feedback.setText(MessageFormat.format(
+					GefMessages.ColumnsLayoutEditPolicy_feedbackPattern,
+					1 + index));
+		}
+		// prepare command
+		{
+			final FormColumnInfo column = headerEditPart.getDimension();
+			final int targetIndex = index;
+			m_moveCommand = new EditCommand(m_layout) {
+				@Override
+				protected void executeEdit() throws Exception {
+					m_layout.command_MOVE_COLUMN(m_layout.getColumns().indexOf(column), targetIndex);
+				}
+			};
+		}
+	}
 
-  @Override
-  protected void eraseLayoutTargetFeedback(Request request) {
-    m_mainPolicy.eraseInsertFeedbacks();
-    FigureUtils.removeFigure(m_insertFeedback);
-    if (m_feedback != null) {
-      m_feedback.remove();
-      m_feedback = null;
-    }
-  }
+	@Override
+	protected void eraseLayoutTargetFeedback(Request request) {
+		m_mainPolicy.eraseInsertFeedbacks();
+		FigureUtils.removeFigure(m_insertFeedback);
+		if (m_feedback != null) {
+			m_feedback.remove();
+			m_feedback = null;
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/gef/header/layout/RowsLayoutEditPolicy.java b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/gef/header/layout/RowsLayoutEditPolicy.java
index 56cafbf57..7325273f2 100644
--- a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/gef/header/layout/RowsLayoutEditPolicy.java
+++ b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/gef/header/layout/RowsLayoutEditPolicy.java
@@ -46,160 +46,160 @@
  * @coverage swing.FormLayout.header
  */
 public final class RowsLayoutEditPolicy extends AbstractHeaderLayoutEditPolicy {
-  private final FormLayoutEditPolicy m_mainPolicy;
-  private final FormLayoutInfo m_layout;
+	private final FormLayoutEditPolicy m_mainPolicy;
+	private final FormLayoutInfo m_layout;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public RowsLayoutEditPolicy(FormLayoutEditPolicy mainPolicy, FormLayoutInfo layout) {
-    super(mainPolicy);
-    m_mainPolicy = mainPolicy;
-    m_layout = layout;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public RowsLayoutEditPolicy(FormLayoutEditPolicy mainPolicy, FormLayoutInfo layout) {
+		super(mainPolicy);
+		m_mainPolicy = mainPolicy;
+		m_layout = layout;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Children
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void decorateChild(EditPart child) {
-    child.installEditPolicy(EditPolicy.SELECTION_ROLE, new RowSelectionEditPolicy(m_mainPolicy));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Children
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void decorateChild(EditPart child) {
+		child.installEditPolicy(EditPolicy.SELECTION_ROLE, new RowSelectionEditPolicy(m_mainPolicy));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Move
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final Figure m_insertFeedback = AbstractGridLayoutEditPolicy.createInsertFigure();
-  private TextFeedback m_feedback;
-  private Command m_moveCommand;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Move
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final Figure m_insertFeedback = AbstractGridLayoutEditPolicy.createInsertFigure();
+	private TextFeedback m_feedback;
+	private Command m_moveCommand;
 
-  @Override
-  protected Command getMoveCommand(ChangeBoundsRequest request) {
-    if (!m_layout.canChangeDimensions()) {
-      return null;
-    }
-    return m_moveCommand;
-  }
+	@Override
+	protected Command getMoveCommand(ChangeBoundsRequest request) {
+		if (!m_layout.canChangeDimensions()) {
+			return null;
+		}
+		return m_moveCommand;
+	}
 
-  @Override
-  protected void showLayoutTargetFeedback(Request request) {
-    // prepare header
-    RowHeaderEditPart headerEditPart;
-    {
-      ChangeBoundsRequest changeBoundsRequest = (ChangeBoundsRequest) request;
-      headerEditPart = (RowHeaderEditPart) changeBoundsRequest.getEditParts().get(0);
-    }
-    // prepare location
-    Point location;
-    {
-      IDropRequest dropRequest = (IDropRequest) request;
-      location = dropRequest.getLocation().getCopy();
-    }
-    // prepare target header
-    RowHeaderEditPart target = null;
-    {
-      for (EditPart editPart : getHost().getChildren()) {
-        RowHeaderEditPart rowEditPart = (RowHeaderEditPart) editPart;
-        Rectangle bounds = rowEditPart.getFigure().getBounds();
-        if (location.y < bounds.getCenter().y) {
-          target = rowEditPart;
-          break;
-        }
-      }
-    }
-    // prepare grid information
-    IGridInfo gridInfo = m_layout.getGridInfo();
-    Interval[] columnIntervals = gridInfo.getColumnIntervals();
-    Interval[] rowIntervals = gridInfo.getRowIntervals();
-    int x1 = columnIntervals[0].begin() - 5;
-    int x2 = columnIntervals[columnIntervals.length - 1].end() + 5;
-    // prepare index of target column and position for insert feedbacks
-    int index;
-    int y;
-    int size = AbstractGridLayoutEditPolicy.INSERT_ROW_SIZE;
-    if (target != null) {
-      index = target.getIndex();
-      // set default
-      y = rowIntervals[index].begin() - size / 2;
-      // check for gap
-      FormRowInfo row = m_layout.getRows().get(index);
-      if (row.isGap()) {
-        y = rowIntervals[index].begin();
-        size = rowIntervals[index].length() + 1;
-      } else if (index != 0) {
-        FormRowInfo prevRow = m_layout.getRows().get(index - 1);
-        if (prevRow.isGap()) {
-          y = rowIntervals[index - 1].begin();
-          size = rowIntervals[index - 1].length() + 1;
-          index--;
-        }
-      }
-    } else {
-      index = m_layout.getRows().size();
-      m_mainPolicy.showInsertFeedbacks(null, null);
-      //
-      y = rowIntervals[rowIntervals.length - 1].end() - size / 2;
-    }
-    // show insert feedbacks
-    {
-      // ...on main viewer
-      m_mainPolicy.showInsertFeedbacks(new Rectangle(x1, y, x2 - x1, size), null);
-      // ...on header viewer
-      {
-        if (m_insertFeedback.getParent() == null) {
-          addFeedback(m_insertFeedback);
-        }
-        //
-        Point offset = headerEditPart.getOffset();
-        Rectangle bounds = new Rectangle(0, y + offset.y, getHostFigure().getSize().width, size);
-        m_insertFeedback.setBounds(bounds);
-      }
-    }
-    // show text feedback
-    {
-      Layer feedbackLayer = getMainLayer(IEditPartViewer.FEEDBACK_LAYER);
-      // add feedback
-      if (m_feedback == null) {
-        m_feedback = new TextFeedback(feedbackLayer);
-        m_feedback.add();
-      }
-      // set feedback bounds
-      {
-        Point feedbackLocation = new Point(10, location.y + 10);
-        FigureUtils.translateAbsoluteToFigure(feedbackLayer, feedbackLocation);
-        m_feedback.setLocation(feedbackLocation);
-      }
-      // set text
-      m_feedback.setText(MessageFormat.format(
-          GefMessages.RowsLayoutEditPolicy_feedbackPattern,
-          1 + index));
-    }
-    // prepare command
-    {
-      final FormRowInfo row = headerEditPart.getDimension();
-      final int targetIndex = index;
-      m_moveCommand = new EditCommand(m_layout) {
-        @Override
-        protected void executeEdit() throws Exception {
-          m_layout.command_MOVE_ROW(m_layout.getRows().indexOf(row), targetIndex);
-        }
-      };
-    }
-  }
+	@Override
+	protected void showLayoutTargetFeedback(Request request) {
+		// prepare header
+		RowHeaderEditPart headerEditPart;
+		{
+			ChangeBoundsRequest changeBoundsRequest = (ChangeBoundsRequest) request;
+			headerEditPart = (RowHeaderEditPart) changeBoundsRequest.getEditParts().get(0);
+		}
+		// prepare location
+		Point location;
+		{
+			IDropRequest dropRequest = (IDropRequest) request;
+			location = dropRequest.getLocation().getCopy();
+		}
+		// prepare target header
+		RowHeaderEditPart target = null;
+		{
+			for (EditPart editPart : getHost().getChildren()) {
+				RowHeaderEditPart rowEditPart = (RowHeaderEditPart) editPart;
+				Rectangle bounds = rowEditPart.getFigure().getBounds();
+				if (location.y < bounds.getCenter().y) {
+					target = rowEditPart;
+					break;
+				}
+			}
+		}
+		// prepare grid information
+		IGridInfo gridInfo = m_layout.getGridInfo();
+		Interval[] columnIntervals = gridInfo.getColumnIntervals();
+		Interval[] rowIntervals = gridInfo.getRowIntervals();
+		int x1 = columnIntervals[0].begin() - 5;
+		int x2 = columnIntervals[columnIntervals.length - 1].end() + 5;
+		// prepare index of target column and position for insert feedbacks
+		int index;
+		int y;
+		int size = AbstractGridLayoutEditPolicy.INSERT_ROW_SIZE;
+		if (target != null) {
+			index = target.getIndex();
+			// set default
+			y = rowIntervals[index].begin() - size / 2;
+			// check for gap
+			FormRowInfo row = m_layout.getRows().get(index);
+			if (row.isGap()) {
+				y = rowIntervals[index].begin();
+				size = rowIntervals[index].length() + 1;
+			} else if (index != 0) {
+				FormRowInfo prevRow = m_layout.getRows().get(index - 1);
+				if (prevRow.isGap()) {
+					y = rowIntervals[index - 1].begin();
+					size = rowIntervals[index - 1].length() + 1;
+					index--;
+				}
+			}
+		} else {
+			index = m_layout.getRows().size();
+			m_mainPolicy.showInsertFeedbacks(null, null);
+			//
+			y = rowIntervals[rowIntervals.length - 1].end() - size / 2;
+		}
+		// show insert feedbacks
+		{
+			// ...on main viewer
+			m_mainPolicy.showInsertFeedbacks(new Rectangle(x1, y, x2 - x1, size), null);
+			// ...on header viewer
+			{
+				if (m_insertFeedback.getParent() == null) {
+					addFeedback(m_insertFeedback);
+				}
+				//
+				Point offset = headerEditPart.getOffset();
+				Rectangle bounds = new Rectangle(0, y + offset.y, getHostFigure().getSize().width, size);
+				m_insertFeedback.setBounds(bounds);
+			}
+		}
+		// show text feedback
+		{
+			Layer feedbackLayer = getMainLayer(IEditPartViewer.FEEDBACK_LAYER);
+			// add feedback
+			if (m_feedback == null) {
+				m_feedback = new TextFeedback(feedbackLayer);
+				m_feedback.add();
+			}
+			// set feedback bounds
+			{
+				Point feedbackLocation = new Point(10, location.y + 10);
+				FigureUtils.translateAbsoluteToFigure(feedbackLayer, feedbackLocation);
+				m_feedback.setLocation(feedbackLocation);
+			}
+			// set text
+			m_feedback.setText(MessageFormat.format(
+					GefMessages.RowsLayoutEditPolicy_feedbackPattern,
+					1 + index));
+		}
+		// prepare command
+		{
+			final FormRowInfo row = headerEditPart.getDimension();
+			final int targetIndex = index;
+			m_moveCommand = new EditCommand(m_layout) {
+				@Override
+				protected void executeEdit() throws Exception {
+					m_layout.command_MOVE_ROW(m_layout.getRows().indexOf(row), targetIndex);
+				}
+			};
+		}
+	}
 
-  @Override
-  protected void eraseLayoutTargetFeedback(Request request) {
-    m_mainPolicy.eraseInsertFeedbacks();
-    FigureUtils.removeFigure(m_insertFeedback);
-    if (m_feedback != null) {
-      m_feedback.remove();
-      m_feedback = null;
-    }
-  }
+	@Override
+	protected void eraseLayoutTargetFeedback(Request request) {
+		m_mainPolicy.eraseInsertFeedbacks();
+		FigureUtils.removeFigure(m_insertFeedback);
+		if (m_feedback != null) {
+			m_feedback.remove();
+			m_feedback = null;
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/gef/header/selection/ColumnSelectionEditPolicy.java b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/gef/header/selection/ColumnSelectionEditPolicy.java
index 7a33d098b..81dc2354d 100644
--- a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/gef/header/selection/ColumnSelectionEditPolicy.java
+++ b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/gef/header/selection/ColumnSelectionEditPolicy.java
@@ -40,106 +40,106 @@
  * @coverage swing.FormLayout.header
  */
 public final class ColumnSelectionEditPolicy extends DimensionSelectionEditPolicy<FormColumnInfo> {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ColumnSelectionEditPolicy(LayoutEditPolicy mainPolicy) {
-    super(mainPolicy);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ColumnSelectionEditPolicy(LayoutEditPolicy mainPolicy) {
+		super(mainPolicy);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Resize
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Handle createResizeHandle() {
-    Handle handle = new SideResizeHandle(getHost(), IPositionConstants.RIGHT, 7, false);
-    handle.setDragTrackerTool(new ResizeTracker(getHost(), IPositionConstants.EAST, REQ_RESIZE));
-    return handle;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Resize
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Handle createResizeHandle() {
+		Handle handle = new SideResizeHandle(getHost(), IPositionConstants.RIGHT, 7, false);
+		handle.setDragTrackerTool(new ResizeTracker(getHost(), IPositionConstants.EAST, REQ_RESIZE));
+		return handle;
+	}
 
-  @Override
-  protected Point getTextFeedbackLocation(Point mouseLocation) {
-    return new Point(mouseLocation.x + 10, 10);
-  }
+	@Override
+	protected Point getTextFeedbackLocation(Point mouseLocation) {
+		return new Point(mouseLocation.x + 10, 10);
+	}
 
-  @Override
-  protected String getTextFeedbackText(ChangeBoundsRequest request, boolean inverse) {
-    final FormLayoutInfo layout = getLayout();
-    int pixels = getHostFigure().getSize().width;
-    int pixelsDelta = request.getSizeDelta().width;
-    try {
-      FormSizeInfo sizeCopy = getDimension().copy().getSize();
-      if (sizeCopy.getComponentSize() == null ^ inverse) {
-        // set current size if "null"
-        if (sizeCopy.getConstantSize() == null) {
-          FormSizeConstantInfo constantSize = new FormSizeConstantInfo(pixels, ConstantSize.PIXEL);
-          Unit newUnit =
-              sizeCopy.getLowerSize() != null
-                  ? sizeCopy.getLowerSize().getUnit()
-                  : ConstantSize.DIALOG_UNITS_X;
-          constantSize.setUnit(newUnit);
-          sizeCopy.setConstantSize(constantSize);
-        }
-        // update size
-        final FormSizeConstantInfo constantSize;
-        {
-          constantSize = sizeCopy.getConstantSize();
-          constantSize.setAsPixels(pixels + pixelsDelta);
-        }
-        // prepare command
-        m_resizeCommand = new EditCommand(layout) {
-          @Override
-          protected void executeEdit() throws Exception {
-            getDimension().getSize().setConstantSize(constantSize);
-            layout.writeDimensions();
-          }
-        };
-        // return text
-        return MessageFormat.format(
-            GefMessages.ColumnSelectionEditPolicy_widthPattern,
-            constantSize.getSource(true, true));
-      } else {
-        // set current size if "null"
-        if (sizeCopy.getLowerSize() == null) {
-          FormSizeConstantInfo lowerSize = new FormSizeConstantInfo(pixels, ConstantSize.PIXEL);
-          Unit newUnit =
-              sizeCopy.getConstantSize() != null
-                  ? sizeCopy.getConstantSize().getUnit()
-                  : ConstantSize.DIALOG_UNITS_X;
-          lowerSize.setUnit(newUnit);
-          sizeCopy.setLowerSize(lowerSize);
-        }
-        // update size
-        final FormSizeConstantInfo lowerSize;
-        {
-          lowerSize = sizeCopy.getLowerSize();
-          lowerSize.setAsPixels(pixels + pixelsDelta);
-        }
-        // prepare command
-        m_resizeCommand = new EditCommand(layout) {
-          @Override
-          protected void executeEdit() throws Exception {
-            FormSizeInfo size = getDimension().getSize();
-            // set component size
-            if (size.getComponentSize() == null) {
-              size.setComponentSize(Sizes.DEFAULT);
-            }
-            // set lower size
-            size.setLowerSize(lowerSize);
-            layout.writeDimensions();
-          }
-        };
-        // return text
-        return MessageFormat.format(
-            GefMessages.ColumnSelectionEditPolicy_minimumWidthPattern,
-            lowerSize.getSource(true, true));
-      }
-    } catch (Throwable e) {
-      return GefMessages.ColumnSelectionEditPolicy_exception;
-    }
-  }
+	@Override
+	protected String getTextFeedbackText(ChangeBoundsRequest request, boolean inverse) {
+		final FormLayoutInfo layout = getLayout();
+		int pixels = getHostFigure().getSize().width;
+		int pixelsDelta = request.getSizeDelta().width;
+		try {
+			FormSizeInfo sizeCopy = getDimension().copy().getSize();
+			if (sizeCopy.getComponentSize() == null ^ inverse) {
+				// set current size if "null"
+				if (sizeCopy.getConstantSize() == null) {
+					FormSizeConstantInfo constantSize = new FormSizeConstantInfo(pixels, ConstantSize.PIXEL);
+					Unit newUnit =
+							sizeCopy.getLowerSize() != null
+							? sizeCopy.getLowerSize().getUnit()
+									: ConstantSize.DIALOG_UNITS_X;
+					constantSize.setUnit(newUnit);
+					sizeCopy.setConstantSize(constantSize);
+				}
+				// update size
+				final FormSizeConstantInfo constantSize;
+				{
+					constantSize = sizeCopy.getConstantSize();
+					constantSize.setAsPixels(pixels + pixelsDelta);
+				}
+				// prepare command
+				m_resizeCommand = new EditCommand(layout) {
+					@Override
+					protected void executeEdit() throws Exception {
+						getDimension().getSize().setConstantSize(constantSize);
+						layout.writeDimensions();
+					}
+				};
+				// return text
+				return MessageFormat.format(
+						GefMessages.ColumnSelectionEditPolicy_widthPattern,
+						constantSize.getSource(true, true));
+			} else {
+				// set current size if "null"
+				if (sizeCopy.getLowerSize() == null) {
+					FormSizeConstantInfo lowerSize = new FormSizeConstantInfo(pixels, ConstantSize.PIXEL);
+					Unit newUnit =
+							sizeCopy.getConstantSize() != null
+							? sizeCopy.getConstantSize().getUnit()
+									: ConstantSize.DIALOG_UNITS_X;
+					lowerSize.setUnit(newUnit);
+					sizeCopy.setLowerSize(lowerSize);
+				}
+				// update size
+				final FormSizeConstantInfo lowerSize;
+				{
+					lowerSize = sizeCopy.getLowerSize();
+					lowerSize.setAsPixels(pixels + pixelsDelta);
+				}
+				// prepare command
+				m_resizeCommand = new EditCommand(layout) {
+					@Override
+					protected void executeEdit() throws Exception {
+						FormSizeInfo size = getDimension().getSize();
+						// set component size
+						if (size.getComponentSize() == null) {
+							size.setComponentSize(Sizes.DEFAULT);
+						}
+						// set lower size
+						size.setLowerSize(lowerSize);
+						layout.writeDimensions();
+					}
+				};
+				// return text
+				return MessageFormat.format(
+						GefMessages.ColumnSelectionEditPolicy_minimumWidthPattern,
+						lowerSize.getSource(true, true));
+			}
+		} catch (Throwable e) {
+			return GefMessages.ColumnSelectionEditPolicy_exception;
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/gef/header/selection/DimensionSelectionEditPolicy.java b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/gef/header/selection/DimensionSelectionEditPolicy.java
index 042f522fb..2fb3effee 100644
--- a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/gef/header/selection/DimensionSelectionEditPolicy.java
+++ b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/gef/header/selection/DimensionSelectionEditPolicy.java
@@ -45,226 +45,226 @@
  * @coverage swing.FormLayout.header
  */
 abstract class DimensionSelectionEditPolicy<T extends FormDimensionInfo>
-    extends
-      AbstractHeaderSelectionEditPolicy {
-  protected static final String REQ_RESIZE = "resize";
+extends
+AbstractHeaderSelectionEditPolicy {
+	protected static final String REQ_RESIZE = "resize";
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DimensionSelectionEditPolicy(LayoutEditPolicy mainPolicy) {
-    super(mainPolicy);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DimensionSelectionEditPolicy(LayoutEditPolicy mainPolicy) {
+		super(mainPolicy);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Handles
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected List<Handle> createSelectionHandles() {
-    List<Handle> handles = Lists.newArrayList();
-    // move handle
-    {
-      MoveHandle moveHandle = new MoveHandle(getHost(), new HeaderMoveHandleLocator());
-      moveHandle.setForeground(IColorConstants.red);
-      handles.add(moveHandle);
-    }
-    //
-    return handles;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Handles
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected List<Handle> createSelectionHandles() {
+		List<Handle> handles = Lists.newArrayList();
+		// move handle
+		{
+			MoveHandle moveHandle = new MoveHandle(getHost(), new HeaderMoveHandleLocator());
+			moveHandle.setForeground(IColorConstants.red);
+			handles.add(moveHandle);
+		}
+		//
+		return handles;
+	}
 
-  @Override
-  protected List<Handle> createStaticHandles() {
-    List<Handle> handles = Lists.newArrayList();
-    //
-    DimensionHeaderEditPart<T> headerEditPart = getHostHeader();
-    if (!headerEditPart.getDimension().isGap()) {
-      handles.add(createResizeHandle());
-    }
-    //
-    return handles;
-  }
+	@Override
+	protected List<Handle> createStaticHandles() {
+		List<Handle> handles = Lists.newArrayList();
+		//
+		DimensionHeaderEditPart<T> headerEditPart = getHostHeader();
+		if (!headerEditPart.getDimension().isGap()) {
+			handles.add(createResizeHandle());
+		}
+		//
+		return handles;
+	}
 
-  /**
-   * @return the {@link Handle} for resizing.
-   */
-  protected abstract Handle createResizeHandle();
+	/**
+	 * @return the {@link Handle} for resizing.
+	 */
+	protected abstract Handle createResizeHandle();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the host {@link DimensionHeaderEditPart}.
-   */
-  @SuppressWarnings("unchecked")
-  private DimensionHeaderEditPart<T> getHostHeader() {
-    return (DimensionHeaderEditPart<T>) getHost();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the host {@link DimensionHeaderEditPart}.
+	 */
+	@SuppressWarnings("unchecked")
+	private DimensionHeaderEditPart<T> getHostHeader() {
+		return (DimensionHeaderEditPart<T>) getHost();
+	}
 
-  /**
-   * @return the host {@link FormLayoutInfo}.
-   */
-  protected final FormLayoutInfo getLayout() {
-    return getHostHeader().getLayout();
-  }
+	/**
+	 * @return the host {@link FormLayoutInfo}.
+	 */
+	protected final FormLayoutInfo getLayout() {
+		return getHostHeader().getLayout();
+	}
 
-  /**
-   * @return the host {@link FormDimensionInfo}.
-   */
-  protected final T getDimension() {
-    return getHostHeader().getDimension();
-  }
+	/**
+	 * @return the host {@link FormDimensionInfo}.
+	 */
+	protected final T getDimension() {
+		return getHostHeader().getDimension();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Resize
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Figure m_lineFeedback;
-  private ResizeHintFigure m_feedback;
-  private ChangeBoundsRequest m_lastResizeRequest;
-  protected Command m_resizeCommand;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Resize
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Figure m_lineFeedback;
+	private ResizeHintFigure m_feedback;
+	private ChangeBoundsRequest m_lastResizeRequest;
+	protected Command m_resizeCommand;
 
-  @Override
-  public boolean understandsRequest(Request request) {
-    return super.understandsRequest(request) || request.getType() == REQ_RESIZE;
-  }
+	@Override
+	public boolean understandsRequest(Request request) {
+		return super.understandsRequest(request) || request.getType() == REQ_RESIZE;
+	}
 
-  @Override
-  public Command getCommand(Request request) {
-    if (!getLayout().canChangeDimensions()) {
-      return null;
-    }
-    // use such "indirect" command because when we press Ctrl and _don't_ move mouse after
-    // this, we will show correct feedback text (without hint), and set correct m_resizeCommand,
-    // but GEF already asked command and will not ask it again
-    return new Command() {
-      @Override
-      public void execute() throws Exception {
-        getHost().getViewer().getEditDomain().executeCommand(m_resizeCommand);
-      }
-    };
-  }
+	@Override
+	public Command getCommand(Request request) {
+		if (!getLayout().canChangeDimensions()) {
+			return null;
+		}
+		// use such "indirect" command because when we press Ctrl and _don't_ move mouse after
+		// this, we will show correct feedback text (without hint), and set correct m_resizeCommand,
+		// but GEF already asked command and will not ask it again
+		return new Command() {
+			@Override
+			public void execute() throws Exception {
+				getHost().getViewer().getEditDomain().executeCommand(m_resizeCommand);
+			}
+		};
+	}
 
-  @Override
-  public void showSourceFeedback(Request request) {
-    ChangeBoundsRequest changeBoundsRequest = (ChangeBoundsRequest) request;
-    m_resizeCommand = null;
-    // line feedback
-    {
-      // create feedback
-      if (m_lineFeedback == null) {
-        m_lineFeedback = new Figure();
-        LineBorder border = new LineBorder(IColorConstants.red, 2);
-        m_lineFeedback.setBorder(border);
-        addFeedback(m_lineFeedback);
-      }
-      // prepare feedback bounds
-      Rectangle bounds;
-      {
-        Figure hostFigure = getHostFigure();
-        bounds = changeBoundsRequest.getTransformedRectangle(hostFigure.getBounds());
-        FigureUtils.translateFigureToAbsolute(hostFigure, bounds);
-      }
-      // show feedback
-      m_lineFeedback.setBounds(bounds);
-    }
-    // text feedback
-    {
-      Layer feedbackLayer = getMainLayer(IEditPartViewer.FEEDBACK_LAYER);
-      // add feedback
-      if (m_feedback == null) {
-        m_feedback = new ResizeHintFigure();
-        feedbackLayer.add(m_feedback);
-      }
-      // set feedback bounds
-      {
-        Point mouseLocation = changeBoundsRequest.getLocation().getCopy();
-        Point feedbackLocation = getTextFeedbackLocation(mouseLocation);
-        FigureUtils.translateAbsoluteToFigure(feedbackLayer, feedbackLocation);
-        m_feedback.setLocation(feedbackLocation);
-      }
-      // set text
-      m_lastResizeRequest = changeBoundsRequest;
-      updateFeedbackText(changeBoundsRequest);
-      // set hint
-      {
-        String hintSize;
-        if (getDimension().getSize().getComponentSize() == null) {
-          hintSize = "minimum";
-        } else {
-          hintSize = "constant";
-        }
-        m_feedback.setSizeHint(hintSize);
-      }
-    }
-  }
+	@Override
+	public void showSourceFeedback(Request request) {
+		ChangeBoundsRequest changeBoundsRequest = (ChangeBoundsRequest) request;
+		m_resizeCommand = null;
+		// line feedback
+		{
+			// create feedback
+			if (m_lineFeedback == null) {
+				m_lineFeedback = new Figure();
+				LineBorder border = new LineBorder(IColorConstants.red, 2);
+				m_lineFeedback.setBorder(border);
+				addFeedback(m_lineFeedback);
+			}
+			// prepare feedback bounds
+			Rectangle bounds;
+			{
+				Figure hostFigure = getHostFigure();
+				bounds = changeBoundsRequest.getTransformedRectangle(hostFigure.getBounds());
+				FigureUtils.translateFigureToAbsolute(hostFigure, bounds);
+			}
+			// show feedback
+			m_lineFeedback.setBounds(bounds);
+		}
+		// text feedback
+		{
+			Layer feedbackLayer = getMainLayer(IEditPartViewer.FEEDBACK_LAYER);
+			// add feedback
+			if (m_feedback == null) {
+				m_feedback = new ResizeHintFigure();
+				feedbackLayer.add(m_feedback);
+			}
+			// set feedback bounds
+			{
+				Point mouseLocation = changeBoundsRequest.getLocation().getCopy();
+				Point feedbackLocation = getTextFeedbackLocation(mouseLocation);
+				FigureUtils.translateAbsoluteToFigure(feedbackLayer, feedbackLocation);
+				m_feedback.setLocation(feedbackLocation);
+			}
+			// set text
+			m_lastResizeRequest = changeBoundsRequest;
+			updateFeedbackText(changeBoundsRequest);
+			// set hint
+			{
+				String hintSize;
+				if (getDimension().getSize().getComponentSize() == null) {
+					hintSize = "minimum";
+				} else {
+					hintSize = "constant";
+				}
+				m_feedback.setSizeHint(hintSize);
+			}
+		}
+	}
 
-  /**
-   * Updates the feedback text according to the last resize request and Ctrl state.
-   */
-  private void updateFeedbackText(Request request) {
-    m_feedback.setText(getTextFeedbackText(m_lastResizeRequest, request.isControlKeyPressed()));
-  }
+	/**
+	 * Updates the feedback text according to the last resize request and Ctrl state.
+	 */
+	private void updateFeedbackText(Request request) {
+		m_feedback.setText(getTextFeedbackText(m_lastResizeRequest, request.isControlKeyPressed()));
+	}
 
-  @Override
-  public void eraseSourceFeedback(Request request) {
-    removeFeedback(m_lineFeedback);
-    m_lineFeedback = null;
-    //
-    m_feedback.getParent().remove(m_feedback);
-    m_feedback = null;
-  }
+	@Override
+	public void eraseSourceFeedback(Request request) {
+		removeFeedback(m_lineFeedback);
+		m_lineFeedback = null;
+		//
+		m_feedback.getParent().remove(m_feedback);
+		m_feedback = null;
+	}
 
-  @Override
-  public void performRequest(Request request) {
-    if (m_feedback != null && request instanceof KeyRequest) {
-      KeyRequest keyRequest = (KeyRequest) request;
-      if (keyRequest.getKeyCode() == SWT.CTRL) {
-        m_feedback.setShowSizeHint(!keyRequest.isPressed());
-        updateFeedbackText(request);
-      }
-    }
-  }
+	@Override
+	public void performRequest(Request request) {
+		if (m_feedback != null && request instanceof KeyRequest) {
+			KeyRequest keyRequest = (KeyRequest) request;
+			if (keyRequest.getKeyCode() == SWT.CTRL) {
+				m_feedback.setShowSizeHint(!keyRequest.isPressed());
+				updateFeedbackText(request);
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Resize: abstract feedback
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the location of text feedback (with size hint).
-   */
-  protected abstract Point getTextFeedbackLocation(Point mouseLocation);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Resize: abstract feedback
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the location of text feedback (with size hint).
+	 */
+	protected abstract Point getTextFeedbackLocation(Point mouseLocation);
 
-  /**
-   * @param inverse
-   *          is <code>true</code> if constant size should be replaced with minimum and reverse.
-   *
-   * @return the size text for text feedback.
-   */
-  protected abstract String getTextFeedbackText(ChangeBoundsRequest request, boolean inverse);
+	/**
+	 * @param inverse
+	 *          is <code>true</code> if constant size should be replaced with minimum and reverse.
+	 *
+	 * @return the size text for text feedback.
+	 */
+	protected abstract String getTextFeedbackText(ChangeBoundsRequest request, boolean inverse);
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Move location
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Implementation of {@link ILocator} to place handle directly on header.
-   */
-  private class HeaderMoveHandleLocator implements ILocator {
-    @Override
-    public void relocate(Figure target) {
-      Figure reference = getHostFigure();
-      Rectangle bounds = reference.getBounds().getCopy();
-      FigureUtils.translateFigureToFigure(reference, target, bounds);
-      target.setBounds(bounds);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Move location
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Implementation of {@link ILocator} to place handle directly on header.
+	 */
+	private class HeaderMoveHandleLocator implements ILocator {
+		@Override
+		public void relocate(Figure target) {
+			Figure reference = getHostFigure();
+			Rectangle bounds = reference.getBounds().getCopy();
+			FigureUtils.translateFigureToFigure(reference, target, bounds);
+			target.setBounds(bounds);
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/gef/header/selection/ResizeHintFigure.java b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/gef/header/selection/ResizeHintFigure.java
index 7d562a21c..22eefc858 100644
--- a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/gef/header/selection/ResizeHintFigure.java
+++ b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/gef/header/selection/ResizeHintFigure.java
@@ -34,148 +34,148 @@
  * @coverage swing.FormLayout.header
  */
 public final class ResizeHintFigure extends Figure {
-  private String m_text;
-  private String m_sizeHint;
-  private boolean m_showSizeHint = true;
+	private String m_text;
+	private String m_sizeHint;
+	private boolean m_showSizeHint = true;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ResizeHintFigure() {
-    setOpaque(true);
-    setBackground(IColorConstants.tooltipBackground);
-    setForeground(IColorConstants.tooltipForeground);
-    setBorder(new CompoundBorder(new LineBorder(IColorConstants.tooltipForeground),
-        new MarginBorder(2)));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ResizeHintFigure() {
+		setOpaque(true);
+		setBackground(IColorConstants.tooltipBackground);
+		setForeground(IColorConstants.tooltipForeground);
+		setBorder(new CompoundBorder(new LineBorder(IColorConstants.tooltipForeground),
+				new MarginBorder(2)));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets the first line text.
-   */
-  public void setText(String text) {
-    m_text = text;
-    update();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets the first line text.
+	 */
+	public void setText(String text) {
+		m_text = text;
+		update();
+	}
 
-  /**
-   * Sets the second line (hint) text.
-   */
-  public void setSizeHint(String hint) {
-    m_sizeHint = hint;
-    update();
-  }
+	/**
+	 * Sets the second line (hint) text.
+	 */
+	public void setSizeHint(String hint) {
+		m_sizeHint = hint;
+		update();
+	}
 
-  /**
-   * Sets flag if size hint should be displayed.
-   */
-  public void setShowSizeHint(boolean showSizeHint) {
-    m_showSizeHint = showSizeHint;
-    update();
-  }
+	/**
+	 * Sets flag if size hint should be displayed.
+	 */
+	public void setShowSizeHint(boolean showSizeHint) {
+		m_showSizeHint = showSizeHint;
+		update();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Label
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the desirable size for this {@link ResizeHintFigure}.
-   */
-  private Dimension getPreferredSize() {
-    Font font = getFont();
-    int width = 0;
-    int height = 0;
-    // text
-    {
-      Dimension size = FigureUtils.calculateTextSize(m_text, font);
-      width = Math.max(width, size.width);
-      height += size.height;
-    }
-    // hint
-    if (m_showSizeHint) {
-      int hintWidth = 0;
-      Font boldFont = DrawUtils.getBoldFont(font);
-      try {
-        hintWidth +=
-            FigureUtils.calculateTextSize(GefMessages.ResizeHintFigure_hint, boldFont).width;
-        hintWidth += FigureUtils.calculateTextSize(GefMessages.ResizeHintFigure_press, font).width;
-        hintWidth += FigureUtils.calculateTextSize("Ctrl", boldFont).width;
-        hintWidth +=
-            FigureUtils.calculateTextSize(
-                MessageFormat.format(GefMessages.ResizeHintFigure_toSetSize, m_sizeHint),
-                font).width;
-      } finally {
-        boldFont.dispose();
-      }
-      // update size
-      width = Math.max(width, hintWidth);
-      height *= 2;
-    }
-    // full size
-    Insets insets = getInsets();
-    return new Dimension(width + insets.getWidth(), height + insets.getHeight());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Label
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the desirable size for this {@link ResizeHintFigure}.
+	 */
+	private Dimension getPreferredSize() {
+		Font font = getFont();
+		int width = 0;
+		int height = 0;
+		// text
+		{
+			Dimension size = FigureUtils.calculateTextSize(m_text, font);
+			width = Math.max(width, size.width);
+			height += size.height;
+		}
+		// hint
+		if (m_showSizeHint) {
+			int hintWidth = 0;
+			Font boldFont = DrawUtils.getBoldFont(font);
+			try {
+				hintWidth +=
+						FigureUtils.calculateTextSize(GefMessages.ResizeHintFigure_hint, boldFont).width;
+				hintWidth += FigureUtils.calculateTextSize(GefMessages.ResizeHintFigure_press, font).width;
+				hintWidth += FigureUtils.calculateTextSize("Ctrl", boldFont).width;
+				hintWidth +=
+						FigureUtils.calculateTextSize(
+								MessageFormat.format(GefMessages.ResizeHintFigure_toSetSize, m_sizeHint),
+								font).width;
+			} finally {
+				boldFont.dispose();
+			}
+			// update size
+			width = Math.max(width, hintWidth);
+			height *= 2;
+		}
+		// full size
+		Insets insets = getInsets();
+		return new Dimension(width + insets.getWidth(), height + insets.getHeight());
+	}
 
-  /**
-   * Updates the size and forces repaint.
-   */
-  private void update() {
-    setSize(getPreferredSize());
-    repaint();
-  }
+	/**
+	 * Updates the size and forces repaint.
+	 */
+	private void update() {
+		setSize(getPreferredSize());
+		repaint();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Paint
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void paintClientArea(Graphics graphics) {
-    graphics.drawText(m_text, 0, 0);
-    // draw hint
-    if (m_showSizeHint) {
-      int y = getClientArea().height / 2;
-      //
-      Font font = getFont();
-      Font boldFont = DrawUtils.getBoldFont(font);
-      try {
-        int x = 0;
-        x = drawText(graphics, x, y + 1, GefMessages.ResizeHintFigure_hint, boldFont);
-        x = drawText(graphics, x, y, GefMessages.ResizeHintFigure_press, font);
-        //
-        graphics.pushState();
-        graphics.setForegroundColor(IColorConstants.lightBlue);
-        x = drawText(graphics, x, y + 1, "Ctrl", boldFont);
-        graphics.popState();
-        //
-        x =
-            drawText(
-                graphics,
-                x,
-                y,
-                MessageFormat.format(GefMessages.ResizeHintFigure_toSetSize, m_sizeHint),
-                font);
-      } finally {
-        boldFont.dispose();
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Paint
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void paintClientArea(Graphics graphics) {
+		graphics.drawText(m_text, 0, 0);
+		// draw hint
+		if (m_showSizeHint) {
+			int y = getClientArea().height / 2;
+			//
+			Font font = getFont();
+			Font boldFont = DrawUtils.getBoldFont(font);
+			try {
+				int x = 0;
+				x = drawText(graphics, x, y + 1, GefMessages.ResizeHintFigure_hint, boldFont);
+				x = drawText(graphics, x, y, GefMessages.ResizeHintFigure_press, font);
+				//
+				graphics.pushState();
+				graphics.setForegroundColor(IColorConstants.lightBlue);
+				x = drawText(graphics, x, y + 1, "Ctrl", boldFont);
+				graphics.popState();
+				//
+				x =
+						drawText(
+								graphics,
+								x,
+								y,
+								MessageFormat.format(GefMessages.ResizeHintFigure_toSetSize, m_sizeHint),
+								font);
+			} finally {
+				boldFont.dispose();
+			}
+		}
+	}
 
-  /**
-   * Draws text at given location.
-   *
-   * @return the new <code>x</code>.
-   */
-  private int drawText(Graphics graphics, int x, int y, String text, Font font) {
-    graphics.setFont(font);
-    graphics.drawText(text, x, y);
-    return x + FigureUtils.calculateTextSize(text, font).width;
-  }
+	/**
+	 * Draws text at given location.
+	 *
+	 * @return the new <code>x</code>.
+	 */
+	private int drawText(Graphics graphics, int x, int y, String text, Font font) {
+		graphics.setFont(font);
+		graphics.drawText(text, x, y);
+		return x + FigureUtils.calculateTextSize(text, font).width;
+	}
 }
diff --git a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/gef/header/selection/RowSelectionEditPolicy.java b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/gef/header/selection/RowSelectionEditPolicy.java
index 47c12a82c..b15042b56 100644
--- a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/gef/header/selection/RowSelectionEditPolicy.java
+++ b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/gef/header/selection/RowSelectionEditPolicy.java
@@ -40,106 +40,106 @@
  * @coverage swing.FormLayout.header
  */
 public final class RowSelectionEditPolicy extends DimensionSelectionEditPolicy<FormRowInfo> {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public RowSelectionEditPolicy(LayoutEditPolicy mainPolicy) {
-    super(mainPolicy);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public RowSelectionEditPolicy(LayoutEditPolicy mainPolicy) {
+		super(mainPolicy);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Resize
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Handle createResizeHandle() {
-    Handle handle = new SideResizeHandle(getHost(), IPositionConstants.BOTTOM, 7, false);
-    handle.setDragTrackerTool(new ResizeTracker(getHost(), IPositionConstants.SOUTH, REQ_RESIZE));
-    return handle;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Resize
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Handle createResizeHandle() {
+		Handle handle = new SideResizeHandle(getHost(), IPositionConstants.BOTTOM, 7, false);
+		handle.setDragTrackerTool(new ResizeTracker(getHost(), IPositionConstants.SOUTH, REQ_RESIZE));
+		return handle;
+	}
 
-  @Override
-  protected Point getTextFeedbackLocation(Point mouseLocation) {
-    return new Point(10, mouseLocation.y + 10);
-  }
+	@Override
+	protected Point getTextFeedbackLocation(Point mouseLocation) {
+		return new Point(10, mouseLocation.y + 10);
+	}
 
-  @Override
-  protected String getTextFeedbackText(ChangeBoundsRequest request, boolean inverse) {
-    final FormLayoutInfo layout = getLayout();
-    int pixels = getHostFigure().getSize().height;
-    int pixelsDelta = request.getSizeDelta().height;
-    try {
-      FormSizeInfo sizeCopy = getDimension().copy().getSize();
-      if (sizeCopy.getComponentSize() == null ^ inverse) {
-        // set current size if "null"
-        if (sizeCopy.getConstantSize() == null) {
-          FormSizeConstantInfo constantSize = new FormSizeConstantInfo(pixels, ConstantSize.PIXEL);
-          Unit newUnit =
-              sizeCopy.getLowerSize() != null
-                  ? sizeCopy.getLowerSize().getUnit()
-                  : ConstantSize.DIALOG_UNITS_Y;
-          constantSize.setUnit(newUnit);
-          sizeCopy.setConstantSize(constantSize);
-        }
-        // update size
-        final FormSizeConstantInfo constantSize;
-        {
-          constantSize = sizeCopy.getConstantSize();
-          constantSize.setAsPixels(pixels + pixelsDelta);
-        }
-        // prepare command
-        m_resizeCommand = new EditCommand(layout) {
-          @Override
-          protected void executeEdit() throws Exception {
-            getDimension().getSize().setConstantSize(constantSize);
-            layout.writeDimensions();
-          }
-        };
-        // return text
-        return MessageFormat.format(
-            GefMessages.RowSelectionEditPolicy_heightPattern,
-            constantSize.getSource(true, true));
-      } else {
-        // set current size if "null"
-        if (sizeCopy.getLowerSize() == null) {
-          FormSizeConstantInfo lowerSize = new FormSizeConstantInfo(pixels, ConstantSize.PIXEL);
-          Unit newUnit =
-              sizeCopy.getConstantSize() != null
-                  ? sizeCopy.getConstantSize().getUnit()
-                  : ConstantSize.DIALOG_UNITS_Y;
-          lowerSize.setUnit(newUnit);
-          sizeCopy.setLowerSize(lowerSize);
-        }
-        // update size
-        final FormSizeConstantInfo lowerSize;
-        {
-          lowerSize = sizeCopy.getLowerSize();
-          lowerSize.setAsPixels(pixels + pixelsDelta);
-        }
-        // prepare command
-        m_resizeCommand = new EditCommand(layout) {
-          @Override
-          protected void executeEdit() throws Exception {
-            FormSizeInfo size = getDimension().getSize();
-            // set component size
-            if (size.getComponentSize() == null) {
-              size.setComponentSize(Sizes.DEFAULT);
-            }
-            // set lower size
-            size.setLowerSize(lowerSize);
-            layout.writeDimensions();
-          }
-        };
-        // return text
-        return MessageFormat.format(
-            GefMessages.RowSelectionEditPolicy_minimumHeightPattern,
-            lowerSize.getSource(true, true));
-      }
-    } catch (Throwable e) {
-      return GefMessages.RowSelectionEditPolicy_exception;
-    }
-  }
+	@Override
+	protected String getTextFeedbackText(ChangeBoundsRequest request, boolean inverse) {
+		final FormLayoutInfo layout = getLayout();
+		int pixels = getHostFigure().getSize().height;
+		int pixelsDelta = request.getSizeDelta().height;
+		try {
+			FormSizeInfo sizeCopy = getDimension().copy().getSize();
+			if (sizeCopy.getComponentSize() == null ^ inverse) {
+				// set current size if "null"
+				if (sizeCopy.getConstantSize() == null) {
+					FormSizeConstantInfo constantSize = new FormSizeConstantInfo(pixels, ConstantSize.PIXEL);
+					Unit newUnit =
+							sizeCopy.getLowerSize() != null
+							? sizeCopy.getLowerSize().getUnit()
+									: ConstantSize.DIALOG_UNITS_Y;
+					constantSize.setUnit(newUnit);
+					sizeCopy.setConstantSize(constantSize);
+				}
+				// update size
+				final FormSizeConstantInfo constantSize;
+				{
+					constantSize = sizeCopy.getConstantSize();
+					constantSize.setAsPixels(pixels + pixelsDelta);
+				}
+				// prepare command
+				m_resizeCommand = new EditCommand(layout) {
+					@Override
+					protected void executeEdit() throws Exception {
+						getDimension().getSize().setConstantSize(constantSize);
+						layout.writeDimensions();
+					}
+				};
+				// return text
+				return MessageFormat.format(
+						GefMessages.RowSelectionEditPolicy_heightPattern,
+						constantSize.getSource(true, true));
+			} else {
+				// set current size if "null"
+				if (sizeCopy.getLowerSize() == null) {
+					FormSizeConstantInfo lowerSize = new FormSizeConstantInfo(pixels, ConstantSize.PIXEL);
+					Unit newUnit =
+							sizeCopy.getConstantSize() != null
+							? sizeCopy.getConstantSize().getUnit()
+									: ConstantSize.DIALOG_UNITS_Y;
+					lowerSize.setUnit(newUnit);
+					sizeCopy.setLowerSize(lowerSize);
+				}
+				// update size
+				final FormSizeConstantInfo lowerSize;
+				{
+					lowerSize = sizeCopy.getLowerSize();
+					lowerSize.setAsPixels(pixels + pixelsDelta);
+				}
+				// prepare command
+				m_resizeCommand = new EditCommand(layout) {
+					@Override
+					protected void executeEdit() throws Exception {
+						FormSizeInfo size = getDimension().getSize();
+						// set component size
+						if (size.getComponentSize() == null) {
+							size.setComponentSize(Sizes.DEFAULT);
+						}
+						// set lower size
+						size.setLowerSize(lowerSize);
+						layout.writeDimensions();
+					}
+				};
+				// return text
+				return MessageFormat.format(
+						GefMessages.RowSelectionEditPolicy_minimumHeightPattern,
+						lowerSize.getSource(true, true));
+			}
+		} catch (Throwable e) {
+			return GefMessages.RowSelectionEditPolicy_exception;
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/CellConstraintsAssistantPage.java b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/CellConstraintsAssistantPage.java
index 8d09229c4..38982711a 100644
--- a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/CellConstraintsAssistantPage.java
+++ b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/CellConstraintsAssistantPage.java
@@ -31,100 +31,100 @@
  * @coverage swing.FormLayout.model
  */
 public class CellConstraintsAssistantPage extends AbstractAssistantPage {
-  private final FormLayoutInfo m_layout;
+	private final FormLayoutInfo m_layout;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CellConstraintsAssistantPage(Composite parent,
-      FormLayoutInfo layout,
-      List<ObjectInfo> objects) {
-    super(parent, objects);
-    m_layout = layout;
-    GridLayoutFactory.create(this).columns(3);
-    // horizontal alignments
-    {
-      Group horizontalGroup =
-          addChoiceProperty(
-              this,
-              "h alignment",
-              ModelMessages.CellConstraintsAssistantPage_horizontalGroup,
-              new Object[][]{
-                  new Object[]{
-                      ModelMessages.CellConstraintsAssistantPage_haDefault,
-                      CellConstraints.DEFAULT},
-                  new Object[]{
-                      ModelMessages.CellConstraintsAssistantPage_haLeft,
-                      CellConstraints.LEFT},
-                  new Object[]{
-                      ModelMessages.CellConstraintsAssistantPage_haCenter,
-                      CellConstraints.CENTER},
-                  new Object[]{
-                      ModelMessages.CellConstraintsAssistantPage_haRight,
-                      CellConstraints.RIGHT},
-                  new Object[]{
-                      ModelMessages.CellConstraintsAssistantPage_haFill,
-                      CellConstraints.FILL}});
-      GridDataFactory.modify(horizontalGroup).fill();
-    }
-    // vertical alignments
-    {
-      Group verticalGroup =
-          addChoiceProperty(
-              this,
-              "v alignment",
-              ModelMessages.CellConstraintsAssistantPage_verticalGroup,
-              new Object[][]{
-                  new Object[]{
-                      ModelMessages.CellConstraintsAssistantPage_vaDefault,
-                      CellConstraints.DEFAULT},
-                  new Object[]{
-                      ModelMessages.CellConstraintsAssistantPage_vaTop,
-                      CellConstraints.TOP},
-                  new Object[]{
-                      ModelMessages.CellConstraintsAssistantPage_vaCenter,
-                      CellConstraints.CENTER},
-                  new Object[]{
-                      ModelMessages.CellConstraintsAssistantPage_vaBottom,
-                      CellConstraints.BOTTOM},
-                  new Object[]{
-                      ModelMessages.CellConstraintsAssistantPage_vaFill,
-                      CellConstraints.FILL}});
-      GridDataFactory.modify(verticalGroup).fill();
-    }
-    // grid
-    {
-      Group gridGroup =
-          addIntegerProperties(
-              this,
-              ModelMessages.CellConstraintsAssistantPage_gridGroup,
-              new String[][]{
-                  {"grid x", ModelMessages.CellConstraintsAssistantPage_gridX},
-                  {"grid y", ModelMessages.CellConstraintsAssistantPage_gridY},
-                  {"grid width", ModelMessages.CellConstraintsAssistantPage_gridWidth},
-                  {"grid height", ModelMessages.CellConstraintsAssistantPage_gridHeight}});
-      GridDataFactory.modify(gridGroup).fill();
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CellConstraintsAssistantPage(Composite parent,
+			FormLayoutInfo layout,
+			List<ObjectInfo> objects) {
+		super(parent, objects);
+		m_layout = layout;
+		GridLayoutFactory.create(this).columns(3);
+		// horizontal alignments
+		{
+			Group horizontalGroup =
+					addChoiceProperty(
+							this,
+							"h alignment",
+							ModelMessages.CellConstraintsAssistantPage_horizontalGroup,
+							new Object[][]{
+								new Object[]{
+										ModelMessages.CellConstraintsAssistantPage_haDefault,
+										CellConstraints.DEFAULT},
+								new Object[]{
+										ModelMessages.CellConstraintsAssistantPage_haLeft,
+										CellConstraints.LEFT},
+								new Object[]{
+										ModelMessages.CellConstraintsAssistantPage_haCenter,
+										CellConstraints.CENTER},
+								new Object[]{
+										ModelMessages.CellConstraintsAssistantPage_haRight,
+										CellConstraints.RIGHT},
+								new Object[]{
+										ModelMessages.CellConstraintsAssistantPage_haFill,
+										CellConstraints.FILL}});
+			GridDataFactory.modify(horizontalGroup).fill();
+		}
+		// vertical alignments
+		{
+			Group verticalGroup =
+					addChoiceProperty(
+							this,
+							"v alignment",
+							ModelMessages.CellConstraintsAssistantPage_verticalGroup,
+							new Object[][]{
+								new Object[]{
+										ModelMessages.CellConstraintsAssistantPage_vaDefault,
+										CellConstraints.DEFAULT},
+								new Object[]{
+										ModelMessages.CellConstraintsAssistantPage_vaTop,
+										CellConstraints.TOP},
+								new Object[]{
+										ModelMessages.CellConstraintsAssistantPage_vaCenter,
+										CellConstraints.CENTER},
+								new Object[]{
+										ModelMessages.CellConstraintsAssistantPage_vaBottom,
+										CellConstraints.BOTTOM},
+								new Object[]{
+										ModelMessages.CellConstraintsAssistantPage_vaFill,
+										CellConstraints.FILL}});
+			GridDataFactory.modify(verticalGroup).fill();
+		}
+		// grid
+		{
+			Group gridGroup =
+					addIntegerProperties(
+							this,
+							ModelMessages.CellConstraintsAssistantPage_gridGroup,
+							new String[][]{
+								{"grid x", ModelMessages.CellConstraintsAssistantPage_gridX},
+								{"grid y", ModelMessages.CellConstraintsAssistantPage_gridY},
+								{"grid width", ModelMessages.CellConstraintsAssistantPage_gridWidth},
+								{"grid height", ModelMessages.CellConstraintsAssistantPage_gridHeight}});
+			GridDataFactory.modify(gridGroup).fill();
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AbstractAssistantPage
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected ObjectInfo getEditObject() {
-    return m_layout;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AbstractAssistantPage
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected ObjectInfo getEditObject() {
+		return m_layout;
+	}
 
-  @Override
-  protected Property getCustomProperty(Object object, String propertyName) throws Exception {
-    if (object instanceof ComponentInfo) {
-      ComponentInfo component = (ComponentInfo) object;
-      return FormLayoutInfo.getConstraints(component).getPropertyByTitle(propertyName);
-    }
-    return null;
-  }
+	@Override
+	protected Property getCustomProperty(Object object, String propertyName) throws Exception {
+		if (object instanceof ComponentInfo) {
+			ComponentInfo component = (ComponentInfo) object;
+			return FormLayoutInfo.getConstraints(component).getPropertyByTitle(propertyName);
+		}
+		return null;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/CellConstraintsSupport.java b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/CellConstraintsSupport.java
index 4b91007ad..8f3e6283e 100644
--- a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/CellConstraintsSupport.java
+++ b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/CellConstraintsSupport.java
@@ -50,632 +50,632 @@
  * @coverage swing.FormLayout.model
  */
 public final class CellConstraintsSupport {
-  private final FormLayoutInfo m_layout;
-  private final ComponentInfo m_component;
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constraints values
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  int x;
-  int y;
-  int width;
-  int height;
-  CellConstraints.Alignment alignH;
-  CellConstraints.Alignment alignV;
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Saved values
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private int saved_x;
-  private int saved_y;
-  private int saved_width;
-  private int saved_height;
-  private CellConstraints.Alignment saved_alignH;
-  private CellConstraints.Alignment saved_alignV;
-
-  /**
-   * @return <code>true</code> if {@link CellConstraintsSupport} was modified since last write.
-   */
-  private boolean needWrite() {
-    return saved_x != x
-        || saved_y != y
-        || saved_width != width
-        || saved_height != height
-        || saved_alignH != alignH
-        || saved_alignV != alignV;
-  }
-
-  /**
-   * Copies current values into saved ones.
-   */
-  private void rememberWrittenState() {
-    saved_x = x;
-    saved_y = y;
-    saved_width = width;
-    saved_height = height;
-    saved_alignH = alignH;
-    saved_alignV = alignV;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  CellConstraintsSupport(FormLayoutInfo layoutInfo, ComponentInfo componentInfo) {
-    m_layout = layoutInfo;
-    m_component = componentInfo;
-    // fetch values
-    FormLayout layout = (FormLayout) m_layout.getObject();
-    if (layout != null
-        && m_component.getComponent() != null
-        && m_component.getComponent().getParent() == m_layout.getContainer().getContainer()) {
-      CellConstraints constraints = layout.getConstraints(m_component.getComponent());
-      x = constraints.gridX;
-      y = constraints.gridY;
-      width = constraints.gridWidth;
-      height = constraints.gridHeight;
-      alignH = constraints.hAlign;
-      alignV = constraints.vAlign;
-    } else {
-      x = y = width = height = 1;
-      alignH = alignV = CellConstraints.DEFAULT;
-    }
-    // remember state
-    rememberWrittenState();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets the location/span.
-   */
-  public void setSpan(boolean horizontal, Rectangle cells) throws Exception {
-    x = cells.x;
-    y = cells.y;
-    width = cells.width;
-    height = cells.height;
-  }
-
-  /**
-   * Sets the horizontal alignment.
-   */
-  public void setAlignH(CellConstraints.Alignment alignment) {
-    alignH = alignment;
-  }
-
-  /**
-   * Sets the vertical alignment.
-   */
-  public void setAlignV(CellConstraints.Alignment alignment) {
-    alignV = alignment;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Write
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Writes current values as constraints in component association using
-   * {@link Container#add(Component, Object)}.
-   */
-  public void write() throws Exception {
-    // check if write required
-    if (needWrite()) {
-      // prepare constraints source
-      String source;
-      {
-        source = x + ", " + y;
-        // span
-        if (width != 1 || height != 1) {
-          source += ", " + width + ", " + height;
-        }
-        // align
-        if (alignH != CellConstraints.DEFAULT || alignV != CellConstraints.DEFAULT) {
-          source += ", " + alignH + ", " + alignV;
-        }
-      }
-      // update association constraints
-      if (m_component.getAssociation() instanceof InvocationChildAssociation) {
-        InvocationChildAssociation association =
-            (InvocationChildAssociation) m_component.getAssociation();
-        MethodInvocation invocation = association.getInvocation();
-        String signature = AstNodeUtils.getMethodSignature(invocation);
-        if (signature.equals("add(java.awt.Component,java.lang.Object)")) {
-          Expression constraintsExpression = (Expression) invocation.arguments().get(1);
-          m_layout.getEditor().replaceExpression(constraintsExpression, "\"" + source + "\"");
-        } else if (signature.equals("add(java.awt.Component)")) {
-          m_layout.getEditor().addInvocationArgument(invocation, 1, "\"" + source + "\"");
-        }
-      }
-      // remember state
-      rememberWrittenState();
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Properties
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private ComplexProperty m_complexProperty;
-
-  /**
-   * @return the {@link Property} with given title.
-   */
-  public Property getPropertyByTitle(String title) throws Exception {
-    for (Property property : getCellProperty().getProperties()) {
-      if (property.getTitle().equals(title)) {
-        return property;
-      }
-    }
-    return null;
-  }
-
-  /**
-   * @return the {@link ComplexProperty} for this {@link CellConstraintsSupport}.
-   */
-  public ComplexProperty getCellProperty() throws Exception {
-    if (m_complexProperty == null) {
-      m_complexProperty = new ComplexProperty("Constraints", null);
-      m_complexProperty.setCategory(PropertyCategory.system(6));
-      // grid properties
-      Property xProperty = new IntegerCellProperty("grid x", "x") {
-        @Override
-        public boolean isModified() throws Exception {
-          return true;
-        }
-
-        @Override
-        protected String validate(int value) {
-          int columns = m_layout.getColumns().size();
-          if (1 <= value && value + width - 1 <= columns) {
-            return null;
-          }
-          return MessageFormat.format(
-              ModelMessages.CellConstraintsSupport_outOfRange,
-              value,
-              (columns - width + 1));
-        }
-      };
-      Property wProperty = new IntegerCellProperty("grid width", "width") {
-        @Override
-        public boolean isModified() throws Exception {
-          return width != 1;
-        }
-
-        @Override
-        protected Object getDefaultValue() {
-          return 1;
-        }
-
-        @Override
-        protected String validate(int value) {
-          int columns = m_layout.getColumns().size();
-          if (1 <= value && x + value - 1 <= columns) {
-            return null;
-          }
-          return MessageFormat.format(
-              ModelMessages.CellConstraintsSupport_outOfRange,
-              value,
-              (columns - x + 1));
-        }
-      };
-      Property yProperty = new IntegerCellProperty("grid y", "y") {
-        @Override
-        public boolean isModified() throws Exception {
-          return true;
-        }
-
-        @Override
-        protected String validate(int value) {
-          int rows = m_layout.getRows().size();
-          if (1 <= value && value + height - 1 <= rows) {
-            return null;
-          }
-          return MessageFormat.format(ModelMessages.CellConstraintsSupport_outOfRange, value, (rows
-              - y + 1));
-        }
-      };
-      Property hProperty = new IntegerCellProperty("grid height", "height") {
-        @Override
-        public boolean isModified() throws Exception {
-          return height != 1;
-        }
-
-        @Override
-        protected Object getDefaultValue() {
-          return 1;
-        }
-
-        @Override
-        protected String validate(int value) {
-          int rows = m_layout.getRows().size();
-          if (1 <= value && y + value - 1 <= rows) {
-            return null;
-          }
-          return MessageFormat.format(ModelMessages.CellConstraintsSupport_outOfRange, value, (rows
-              - y + 1));
-        }
-      };
-      // alignment properties
-      Property hAlignmentProperty =
-          new AlignmentCellProperty("h alignment", "alignH", CellConstraints.class, new String[]{
-              "DEFAULT",
-              "LEFT",
-              "CENTER",
-              "RIGHT",
-              "FILL",});
-      Property vAlignmentProperty =
-          new AlignmentCellProperty("v alignment", "alignV", CellConstraints.class, new String[]{
-              "DEFAULT",
-              "TOP",
-              "CENTER",
-              "BOTTOM",
-              "FILL",});
-      // set sub-properties
-      m_complexProperty.setProperties(new Property[]{
-          xProperty,
-          yProperty,
-          wProperty,
-          hProperty,
-          hAlignmentProperty,
-          vAlignmentProperty});
-    }
-    //
-    m_complexProperty.setText(MessageFormat.format(
-        "{0}, {1}, {2}, {3}, {4}, {5}",
-        x,
-        y,
-        width,
-        height,
-        alignH,
-        alignV));
-    return m_complexProperty;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AbstractCellProperty
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Abstract implementation of {@link Property} for {@link CellConstraintsSupport}.
-   *
-   * @author scheglov_ke
-   */
-  private abstract class AbstractCellProperty extends Property {
-    private final String m_title;
-    protected final Field m_field;
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public AbstractCellProperty(String title, String fieldName, PropertyEditor propertyEditor)
-        throws Exception {
-      super(propertyEditor);
-      m_title = title;
-      {
-        m_field = CellConstraintsSupport.class.getDeclaredField(fieldName);
-        m_field.setAccessible(true);
-      }
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Property
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public final String getTitle() {
-      return m_title;
-    }
-
-    @Override
-    public final void setValue(Object value) throws Exception {
-      // try to replace unknown value with some default value
-      if (value == UNKNOWN_VALUE) {
-        value = getDefaultValue();
-      }
-      // set known value
-      if (value != UNKNOWN_VALUE) {
-        // validate
-        {
-          String errorMessage = validate(value);
-          if (errorMessage != null) {
-            UiUtils.openWarning(DesignerPlugin.getShell(), getTitle(), errorMessage);
-            return;
-          }
-        }
-        // do modification
-        m_layout.startEdit();
-        try {
-          m_field.set(CellConstraintsSupport.this, value);
-          write();
-        } finally {
-          m_layout.endEdit();
-        }
-      }
-    }
-
-    /**
-     * @return the default property value.
-     */
-    protected Object getDefaultValue() {
-      return UNKNOWN_VALUE;
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Value
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public Object getValue() throws Exception {
-      return m_field.get(CellConstraintsSupport.this);
-    }
-
-    /**
-     * @return <code>null</code> if given value is valid and can be set, or return some
-     *         {@link String} with error message.
-     */
-    protected abstract String validate(Object value) throws Exception;
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IntegerCellProperty
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Implementation of {@link Property} for integer fields of {@link CellConstraintsSupport}.
-   *
-   * @author scheglov_ke
-   */
-  private abstract class IntegerCellProperty extends AbstractCellProperty {
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public IntegerCellProperty(String title, String fieldName) throws Exception {
-      super(title, fieldName, IntegerPropertyEditor.INSTANCE);
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Value
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    protected final String validate(Object value) throws Exception {
-      if (!(value instanceof Integer)) {
-        return ModelMessages.CellConstraintsSupport_integerExpected;
-      }
-      int intValue = ((Integer) value).intValue();
-      return validate(intValue);
-    }
-
-    /**
-     * @return <code>true</code> if given value is valid for this property. For example we should
-     *         not allow to set width outside of number of existing columns.
-     */
-    protected abstract String validate(int value);
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AlignmentCellProperty
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Implementation of {@link Property} for alignment fields of {@link CellConstraintsSupport}.
-   *
-   * @author scheglov_ke
-   */
-  private final class AlignmentCellProperty extends AbstractCellProperty {
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public AlignmentCellProperty(String title, String fieldName, Class<?> clazz, String[] fieldNames)
-        throws Exception {
-      super(title, fieldName, new StaticFieldPropertyEditor());
-      // configure editor
-      StaticFieldPropertyEditor editor = (StaticFieldPropertyEditor) getEditor();
-      editor.configure(clazz, fieldNames);
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Value
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public final boolean isModified() throws Exception {
-      return getValue() != CellConstraints.DEFAULT;
-    }
-
-    @Override
-    protected Object getDefaultValue() {
-      return CellConstraints.DEFAULT;
-    }
-
-    @Override
-    protected String validate(Object value) throws Exception {
-      return value instanceof CellConstraints.Alignment
-          ? null
-          : ModelMessages.CellConstraintsSupport_alignmentExpected;
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Images
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the small {@link Image} that represents horizontal/vertical alignment.
-   */
-  public Image getSmallAlignmentImage(boolean horizontal) {
-    if (horizontal) {
-      if (alignH == CellConstraints.LEFT) {
-        return Activator.getImage("alignment/h/left.gif");
-      } else if (alignH == CellConstraints.CENTER) {
-        return Activator.getImage("alignment/h/center.gif");
-      } else if (alignH == CellConstraints.RIGHT) {
-        return Activator.getImage("alignment/h/right.gif");
-      } else if (alignH == CellConstraints.FILL) {
-        return Activator.getImage("alignment/h/fill.gif");
-      } else {
-        return null;
-      }
-    } else {
-      if (alignV == CellConstraints.TOP) {
-        return Activator.getImage("alignment/v/top.gif");
-      } else if (alignV == CellConstraints.CENTER) {
-        return Activator.getImage("alignment/v/center.gif");
-      } else if (alignV == CellConstraints.BOTTOM) {
-        return Activator.getImage("alignment/v/bottom.gif");
-      } else if (alignV == CellConstraints.FILL) {
-        return Activator.getImage("alignment/v/fill.gif");
-      } else {
-        return null;
-      }
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Context menu
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds items to the context {@link IMenuManager}.
-   */
-  public void addContextMenu(IMenuManager manager) throws Exception {
-    // horizontal
-    {
-      IMenuManager manager2 =
-          new MenuManager(ModelMessages.CellConstraintsSupport_horizontalAlignment);
-      manager.appendToGroup(IContextMenuConstants.GROUP_TOP, manager2);
-      fillHorizontalAlignmentMenu(manager2);
-    }
-    // vertical
-    {
-      IMenuManager manager2 =
-          new MenuManager(ModelMessages.CellConstraintsSupport_verticalAlignment);
-      manager.appendToGroup(IContextMenuConstants.GROUP_TOP, manager2);
-      fillVerticalAlignmentMenu(manager2);
-    }
-  }
-
-  /**
-   * Adds the horizontal alignment {@link Action}'s.
-   */
-  public void fillHorizontalAlignmentMenu(IMenuManager manager) {
-    manager.add(new SetAlignmentAction(ModelMessages.CellConstraintsSupport_haDefault,
-        "default.gif",
-        true,
-        CellConstraints.DEFAULT));
-    manager.add(new SetAlignmentAction(ModelMessages.CellConstraintsSupport_haLeft,
-        "left.gif",
-        true,
-        CellConstraints.LEFT));
-    manager.add(new SetAlignmentAction(ModelMessages.CellConstraintsSupport_haCenter,
-        "center.gif",
-        true,
-        CellConstraints.CENTER));
-    manager.add(new SetAlignmentAction(ModelMessages.CellConstraintsSupport_haRight,
-        "right.gif",
-        true,
-        CellConstraints.RIGHT));
-    manager.add(new SetAlignmentAction(ModelMessages.CellConstraintsSupport_haFill,
-        "fill.gif",
-        true,
-        CellConstraints.FILL));
-  }
-
-  /**
-   * Adds the vertical alignment {@link Action}'s.
-   */
-  public void fillVerticalAlignmentMenu(IMenuManager manager2) {
-    manager2.add(new SetAlignmentAction(ModelMessages.CellConstraintsSupport_vaDefault,
-        "default.gif",
-        false,
-        CellConstraints.DEFAULT));
-    manager2.add(new SetAlignmentAction(ModelMessages.CellConstraintsSupport_vaTop,
-        "top.gif",
-        false,
-        CellConstraints.TOP));
-    manager2.add(new SetAlignmentAction(ModelMessages.CellConstraintsSupport_vaCenter,
-        "center.gif",
-        false,
-        CellConstraints.CENTER));
-    manager2.add(new SetAlignmentAction(ModelMessages.CellConstraintsSupport_vaBottom,
-        "bottom.gif",
-        false,
-        CellConstraints.BOTTOM));
-    manager2.add(new SetAlignmentAction(ModelMessages.CellConstraintsSupport_vaFill,
-        "fill.gif",
-        false,
-        CellConstraints.FILL));
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // SetAlignmentAction
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * {@link Action} for modifying horizontal/vertical alignment.
-   */
-  private class SetAlignmentAction extends ObjectInfoAction {
-    private final boolean m_horizontal;
-    private final Alignment m_alignment;
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public SetAlignmentAction(String text, String iconPath, boolean horizontal, Alignment alignment) {
-      super(m_layout, text, AS_RADIO_BUTTON);
-      if (iconPath != null) {
-        String path = "alignment/" + (horizontal ? "h" : "v") + "/menu/" + iconPath;
-        setImageDescriptor(Activator.getImageDescriptor(path));
-      }
-      // remember values
-      m_horizontal = horizontal;
-      m_alignment = alignment;
-      // set check for current alignment
-      if (m_horizontal) {
-        setChecked(alignH == m_alignment);
-      } else {
-        setChecked(alignV == m_alignment);
-      }
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Run
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    protected void runEx() throws Exception {
-      if (m_horizontal) {
-        alignH = m_alignment;
-      } else {
-        alignV = m_alignment;
-      }
-      write();
-    }
-  }
+	private final FormLayoutInfo m_layout;
+	private final ComponentInfo m_component;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constraints values
+	//
+	////////////////////////////////////////////////////////////////////////////
+	int x;
+	int y;
+	int width;
+	int height;
+	CellConstraints.Alignment alignH;
+	CellConstraints.Alignment alignV;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Saved values
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private int saved_x;
+	private int saved_y;
+	private int saved_width;
+	private int saved_height;
+	private CellConstraints.Alignment saved_alignH;
+	private CellConstraints.Alignment saved_alignV;
+
+	/**
+	 * @return <code>true</code> if {@link CellConstraintsSupport} was modified since last write.
+	 */
+	private boolean needWrite() {
+		return saved_x != x
+				|| saved_y != y
+				|| saved_width != width
+				|| saved_height != height
+				|| saved_alignH != alignH
+				|| saved_alignV != alignV;
+	}
+
+	/**
+	 * Copies current values into saved ones.
+	 */
+	private void rememberWrittenState() {
+		saved_x = x;
+		saved_y = y;
+		saved_width = width;
+		saved_height = height;
+		saved_alignH = alignH;
+		saved_alignV = alignV;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	CellConstraintsSupport(FormLayoutInfo layoutInfo, ComponentInfo componentInfo) {
+		m_layout = layoutInfo;
+		m_component = componentInfo;
+		// fetch values
+		FormLayout layout = (FormLayout) m_layout.getObject();
+		if (layout != null
+				&& m_component.getComponent() != null
+				&& m_component.getComponent().getParent() == m_layout.getContainer().getContainer()) {
+			CellConstraints constraints = layout.getConstraints(m_component.getComponent());
+			x = constraints.gridX;
+			y = constraints.gridY;
+			width = constraints.gridWidth;
+			height = constraints.gridHeight;
+			alignH = constraints.hAlign;
+			alignV = constraints.vAlign;
+		} else {
+			x = y = width = height = 1;
+			alignH = alignV = CellConstraints.DEFAULT;
+		}
+		// remember state
+		rememberWrittenState();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets the location/span.
+	 */
+	public void setSpan(boolean horizontal, Rectangle cells) throws Exception {
+		x = cells.x;
+		y = cells.y;
+		width = cells.width;
+		height = cells.height;
+	}
+
+	/**
+	 * Sets the horizontal alignment.
+	 */
+	public void setAlignH(CellConstraints.Alignment alignment) {
+		alignH = alignment;
+	}
+
+	/**
+	 * Sets the vertical alignment.
+	 */
+	public void setAlignV(CellConstraints.Alignment alignment) {
+		alignV = alignment;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Write
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Writes current values as constraints in component association using
+	 * {@link Container#add(Component, Object)}.
+	 */
+	public void write() throws Exception {
+		// check if write required
+		if (needWrite()) {
+			// prepare constraints source
+			String source;
+			{
+				source = x + ", " + y;
+				// span
+				if (width != 1 || height != 1) {
+					source += ", " + width + ", " + height;
+				}
+				// align
+				if (alignH != CellConstraints.DEFAULT || alignV != CellConstraints.DEFAULT) {
+					source += ", " + alignH + ", " + alignV;
+				}
+			}
+			// update association constraints
+			if (m_component.getAssociation() instanceof InvocationChildAssociation) {
+				InvocationChildAssociation association =
+						(InvocationChildAssociation) m_component.getAssociation();
+				MethodInvocation invocation = association.getInvocation();
+				String signature = AstNodeUtils.getMethodSignature(invocation);
+				if (signature.equals("add(java.awt.Component,java.lang.Object)")) {
+					Expression constraintsExpression = (Expression) invocation.arguments().get(1);
+					m_layout.getEditor().replaceExpression(constraintsExpression, "\"" + source + "\"");
+				} else if (signature.equals("add(java.awt.Component)")) {
+					m_layout.getEditor().addInvocationArgument(invocation, 1, "\"" + source + "\"");
+				}
+			}
+			// remember state
+			rememberWrittenState();
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Properties
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private ComplexProperty m_complexProperty;
+
+	/**
+	 * @return the {@link Property} with given title.
+	 */
+	public Property getPropertyByTitle(String title) throws Exception {
+		for (Property property : getCellProperty().getProperties()) {
+			if (property.getTitle().equals(title)) {
+				return property;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * @return the {@link ComplexProperty} for this {@link CellConstraintsSupport}.
+	 */
+	public ComplexProperty getCellProperty() throws Exception {
+		if (m_complexProperty == null) {
+			m_complexProperty = new ComplexProperty("Constraints", null);
+			m_complexProperty.setCategory(PropertyCategory.system(6));
+			// grid properties
+			Property xProperty = new IntegerCellProperty("grid x", "x") {
+				@Override
+				public boolean isModified() throws Exception {
+					return true;
+				}
+
+				@Override
+				protected String validate(int value) {
+					int columns = m_layout.getColumns().size();
+					if (1 <= value && value + width - 1 <= columns) {
+						return null;
+					}
+					return MessageFormat.format(
+							ModelMessages.CellConstraintsSupport_outOfRange,
+							value,
+							(columns - width + 1));
+				}
+			};
+			Property wProperty = new IntegerCellProperty("grid width", "width") {
+				@Override
+				public boolean isModified() throws Exception {
+					return width != 1;
+				}
+
+				@Override
+				protected Object getDefaultValue() {
+					return 1;
+				}
+
+				@Override
+				protected String validate(int value) {
+					int columns = m_layout.getColumns().size();
+					if (1 <= value && x + value - 1 <= columns) {
+						return null;
+					}
+					return MessageFormat.format(
+							ModelMessages.CellConstraintsSupport_outOfRange,
+							value,
+							(columns - x + 1));
+				}
+			};
+			Property yProperty = new IntegerCellProperty("grid y", "y") {
+				@Override
+				public boolean isModified() throws Exception {
+					return true;
+				}
+
+				@Override
+				protected String validate(int value) {
+					int rows = m_layout.getRows().size();
+					if (1 <= value && value + height - 1 <= rows) {
+						return null;
+					}
+					return MessageFormat.format(ModelMessages.CellConstraintsSupport_outOfRange, value, (rows
+							- y + 1));
+				}
+			};
+			Property hProperty = new IntegerCellProperty("grid height", "height") {
+				@Override
+				public boolean isModified() throws Exception {
+					return height != 1;
+				}
+
+				@Override
+				protected Object getDefaultValue() {
+					return 1;
+				}
+
+				@Override
+				protected String validate(int value) {
+					int rows = m_layout.getRows().size();
+					if (1 <= value && y + value - 1 <= rows) {
+						return null;
+					}
+					return MessageFormat.format(ModelMessages.CellConstraintsSupport_outOfRange, value, (rows
+							- y + 1));
+				}
+			};
+			// alignment properties
+			Property hAlignmentProperty =
+					new AlignmentCellProperty("h alignment", "alignH", CellConstraints.class, new String[]{
+							"DEFAULT",
+							"LEFT",
+							"CENTER",
+							"RIGHT",
+							"FILL",});
+			Property vAlignmentProperty =
+					new AlignmentCellProperty("v alignment", "alignV", CellConstraints.class, new String[]{
+							"DEFAULT",
+							"TOP",
+							"CENTER",
+							"BOTTOM",
+							"FILL",});
+			// set sub-properties
+			m_complexProperty.setProperties(new Property[]{
+					xProperty,
+					yProperty,
+					wProperty,
+					hProperty,
+					hAlignmentProperty,
+					vAlignmentProperty});
+		}
+		//
+		m_complexProperty.setText(MessageFormat.format(
+				"{0}, {1}, {2}, {3}, {4}, {5}",
+				x,
+				y,
+				width,
+				height,
+				alignH,
+				alignV));
+		return m_complexProperty;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AbstractCellProperty
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Abstract implementation of {@link Property} for {@link CellConstraintsSupport}.
+	 *
+	 * @author scheglov_ke
+	 */
+	private abstract class AbstractCellProperty extends Property {
+		private final String m_title;
+		protected final Field m_field;
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public AbstractCellProperty(String title, String fieldName, PropertyEditor propertyEditor)
+				throws Exception {
+			super(propertyEditor);
+			m_title = title;
+			{
+				m_field = CellConstraintsSupport.class.getDeclaredField(fieldName);
+				m_field.setAccessible(true);
+			}
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Property
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public final String getTitle() {
+			return m_title;
+		}
+
+		@Override
+		public final void setValue(Object value) throws Exception {
+			// try to replace unknown value with some default value
+			if (value == UNKNOWN_VALUE) {
+				value = getDefaultValue();
+			}
+			// set known value
+			if (value != UNKNOWN_VALUE) {
+				// validate
+				{
+					String errorMessage = validate(value);
+					if (errorMessage != null) {
+						UiUtils.openWarning(DesignerPlugin.getShell(), getTitle(), errorMessage);
+						return;
+					}
+				}
+				// do modification
+				m_layout.startEdit();
+				try {
+					m_field.set(CellConstraintsSupport.this, value);
+					write();
+				} finally {
+					m_layout.endEdit();
+				}
+			}
+		}
+
+		/**
+		 * @return the default property value.
+		 */
+		protected Object getDefaultValue() {
+			return UNKNOWN_VALUE;
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Value
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public Object getValue() throws Exception {
+			return m_field.get(CellConstraintsSupport.this);
+		}
+
+		/**
+		 * @return <code>null</code> if given value is valid and can be set, or return some
+		 *         {@link String} with error message.
+		 */
+		protected abstract String validate(Object value) throws Exception;
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IntegerCellProperty
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Implementation of {@link Property} for integer fields of {@link CellConstraintsSupport}.
+	 *
+	 * @author scheglov_ke
+	 */
+	private abstract class IntegerCellProperty extends AbstractCellProperty {
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public IntegerCellProperty(String title, String fieldName) throws Exception {
+			super(title, fieldName, IntegerPropertyEditor.INSTANCE);
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Value
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		protected final String validate(Object value) throws Exception {
+			if (!(value instanceof Integer)) {
+				return ModelMessages.CellConstraintsSupport_integerExpected;
+			}
+			int intValue = ((Integer) value).intValue();
+			return validate(intValue);
+		}
+
+		/**
+		 * @return <code>true</code> if given value is valid for this property. For example we should
+		 *         not allow to set width outside of number of existing columns.
+		 */
+		protected abstract String validate(int value);
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AlignmentCellProperty
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Implementation of {@link Property} for alignment fields of {@link CellConstraintsSupport}.
+	 *
+	 * @author scheglov_ke
+	 */
+	private final class AlignmentCellProperty extends AbstractCellProperty {
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public AlignmentCellProperty(String title, String fieldName, Class<?> clazz, String[] fieldNames)
+				throws Exception {
+			super(title, fieldName, new StaticFieldPropertyEditor());
+			// configure editor
+			StaticFieldPropertyEditor editor = (StaticFieldPropertyEditor) getEditor();
+			editor.configure(clazz, fieldNames);
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Value
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public final boolean isModified() throws Exception {
+			return getValue() != CellConstraints.DEFAULT;
+		}
+
+		@Override
+		protected Object getDefaultValue() {
+			return CellConstraints.DEFAULT;
+		}
+
+		@Override
+		protected String validate(Object value) throws Exception {
+			return value instanceof CellConstraints.Alignment
+					? null
+							: ModelMessages.CellConstraintsSupport_alignmentExpected;
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Images
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the small {@link Image} that represents horizontal/vertical alignment.
+	 */
+	public Image getSmallAlignmentImage(boolean horizontal) {
+		if (horizontal) {
+			if (alignH == CellConstraints.LEFT) {
+				return Activator.getImage("alignment/h/left.gif");
+			} else if (alignH == CellConstraints.CENTER) {
+				return Activator.getImage("alignment/h/center.gif");
+			} else if (alignH == CellConstraints.RIGHT) {
+				return Activator.getImage("alignment/h/right.gif");
+			} else if (alignH == CellConstraints.FILL) {
+				return Activator.getImage("alignment/h/fill.gif");
+			} else {
+				return null;
+			}
+		} else {
+			if (alignV == CellConstraints.TOP) {
+				return Activator.getImage("alignment/v/top.gif");
+			} else if (alignV == CellConstraints.CENTER) {
+				return Activator.getImage("alignment/v/center.gif");
+			} else if (alignV == CellConstraints.BOTTOM) {
+				return Activator.getImage("alignment/v/bottom.gif");
+			} else if (alignV == CellConstraints.FILL) {
+				return Activator.getImage("alignment/v/fill.gif");
+			} else {
+				return null;
+			}
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Context menu
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds items to the context {@link IMenuManager}.
+	 */
+	public void addContextMenu(IMenuManager manager) throws Exception {
+		// horizontal
+		{
+			IMenuManager manager2 =
+					new MenuManager(ModelMessages.CellConstraintsSupport_horizontalAlignment);
+			manager.appendToGroup(IContextMenuConstants.GROUP_TOP, manager2);
+			fillHorizontalAlignmentMenu(manager2);
+		}
+		// vertical
+		{
+			IMenuManager manager2 =
+					new MenuManager(ModelMessages.CellConstraintsSupport_verticalAlignment);
+			manager.appendToGroup(IContextMenuConstants.GROUP_TOP, manager2);
+			fillVerticalAlignmentMenu(manager2);
+		}
+	}
+
+	/**
+	 * Adds the horizontal alignment {@link Action}'s.
+	 */
+	public void fillHorizontalAlignmentMenu(IMenuManager manager) {
+		manager.add(new SetAlignmentAction(ModelMessages.CellConstraintsSupport_haDefault,
+				"default.gif",
+				true,
+				CellConstraints.DEFAULT));
+		manager.add(new SetAlignmentAction(ModelMessages.CellConstraintsSupport_haLeft,
+				"left.gif",
+				true,
+				CellConstraints.LEFT));
+		manager.add(new SetAlignmentAction(ModelMessages.CellConstraintsSupport_haCenter,
+				"center.gif",
+				true,
+				CellConstraints.CENTER));
+		manager.add(new SetAlignmentAction(ModelMessages.CellConstraintsSupport_haRight,
+				"right.gif",
+				true,
+				CellConstraints.RIGHT));
+		manager.add(new SetAlignmentAction(ModelMessages.CellConstraintsSupport_haFill,
+				"fill.gif",
+				true,
+				CellConstraints.FILL));
+	}
+
+	/**
+	 * Adds the vertical alignment {@link Action}'s.
+	 */
+	public void fillVerticalAlignmentMenu(IMenuManager manager2) {
+		manager2.add(new SetAlignmentAction(ModelMessages.CellConstraintsSupport_vaDefault,
+				"default.gif",
+				false,
+				CellConstraints.DEFAULT));
+		manager2.add(new SetAlignmentAction(ModelMessages.CellConstraintsSupport_vaTop,
+				"top.gif",
+				false,
+				CellConstraints.TOP));
+		manager2.add(new SetAlignmentAction(ModelMessages.CellConstraintsSupport_vaCenter,
+				"center.gif",
+				false,
+				CellConstraints.CENTER));
+		manager2.add(new SetAlignmentAction(ModelMessages.CellConstraintsSupport_vaBottom,
+				"bottom.gif",
+				false,
+				CellConstraints.BOTTOM));
+		manager2.add(new SetAlignmentAction(ModelMessages.CellConstraintsSupport_vaFill,
+				"fill.gif",
+				false,
+				CellConstraints.FILL));
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// SetAlignmentAction
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * {@link Action} for modifying horizontal/vertical alignment.
+	 */
+	private class SetAlignmentAction extends ObjectInfoAction {
+		private final boolean m_horizontal;
+		private final Alignment m_alignment;
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public SetAlignmentAction(String text, String iconPath, boolean horizontal, Alignment alignment) {
+			super(m_layout, text, AS_RADIO_BUTTON);
+			if (iconPath != null) {
+				String path = "alignment/" + (horizontal ? "h" : "v") + "/menu/" + iconPath;
+				setImageDescriptor(Activator.getImageDescriptor(path));
+			}
+			// remember values
+			m_horizontal = horizontal;
+			m_alignment = alignment;
+			// set check for current alignment
+			if (m_horizontal) {
+				setChecked(alignH == m_alignment);
+			} else {
+				setChecked(alignV == m_alignment);
+			}
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Run
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		protected void runEx() throws Exception {
+			if (m_horizontal) {
+				alignH = m_alignment;
+			} else {
+				alignV = m_alignment;
+			}
+			write();
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/DimensionsProperty.java b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/DimensionsProperty.java
index 976ed0507..79647933c 100644
--- a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/DimensionsProperty.java
+++ b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/DimensionsProperty.java
@@ -29,89 +29,89 @@
  * @coverage swing.FormLayout.model
  */
 public final class DimensionsProperty extends Property {
-  private final boolean m_horizontal;
+	private final boolean m_horizontal;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DimensionsProperty(FormLayoutInfo layout, boolean horizontal) {
-    super(new Editor(layout, horizontal));
-    m_horizontal = horizontal;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DimensionsProperty(FormLayoutInfo layout, boolean horizontal) {
+		super(new Editor(layout, horizontal));
+		m_horizontal = horizontal;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Property
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getTitle() {
-    return m_horizontal ? "columnSpecs" : "rowSpecs";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Property
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getTitle() {
+		return m_horizontal ? "columnSpecs" : "rowSpecs";
+	}
 
-  @Override
-  public Object getValue() throws Exception {
-    return UNKNOWN_VALUE;
-  }
+	@Override
+	public Object getValue() throws Exception {
+		return UNKNOWN_VALUE;
+	}
 
-  @Override
-  public boolean isModified() throws Exception {
-    return true;
-  }
+	@Override
+	public boolean isModified() throws Exception {
+		return true;
+	}
 
-  @Override
-  public void setValue(Object value) throws Exception {
-  }
+	@Override
+	public void setValue(Object value) throws Exception {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static class Editor extends TextDialogPropertyEditor {
-    private final FormLayoutInfo m_layout;
-    private final boolean m_horizontal;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static class Editor extends TextDialogPropertyEditor {
+		private final FormLayoutInfo m_layout;
+		private final boolean m_horizontal;
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public Editor(FormLayoutInfo layout, boolean horizontal) {
-      m_layout = layout;
-      m_horizontal = horizontal;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public Editor(FormLayoutInfo layout, boolean horizontal) {
+			m_layout = layout;
+			m_horizontal = horizontal;
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Presentation
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    protected String getText(Property property) throws Exception {
-      List<String> titles = Lists.newArrayList();
-      List<? extends FormDimensionInfo> dimensions =
-          m_horizontal ? m_layout.getColumns() : m_layout.getRows();
-      for (FormDimensionInfo dimension : dimensions) {
-        titles.add(dimension.getToolTip());
-      }
-      return StringUtils.join(titles.iterator(), ", ");
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Presentation
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		protected String getText(Property property) throws Exception {
+			List<String> titles = Lists.newArrayList();
+			List<? extends FormDimensionInfo> dimensions =
+					m_horizontal ? m_layout.getColumns() : m_layout.getRows();
+			for (FormDimensionInfo dimension : dimensions) {
+				titles.add(dimension.getToolTip());
+			}
+			return StringUtils.join(titles.iterator(), ", ");
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Editing
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    protected void openDialog(Property property) throws Exception {
-      if (m_horizontal) {
-        new ColumnsDialog(DesignerPlugin.getShell(), m_layout).open();
-      } else {
-        new RowsDialog(DesignerPlugin.getShell(), m_layout).open();
-      }
-    }
-  }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Editing
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		protected void openDialog(Property property) throws Exception {
+			if (m_horizontal) {
+				new ColumnsDialog(DesignerPlugin.getShell(), m_layout).open();
+			} else {
+				new RowsDialog(DesignerPlugin.getShell(), m_layout).open();
+			}
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/FormColumnInfo.java b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/FormColumnInfo.java
index ca3bc0037..e3216064c 100644
--- a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/FormColumnInfo.java
+++ b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/FormColumnInfo.java
@@ -19,49 +19,49 @@
  * @coverage swing.FormLayout.model
  */
 public final class FormColumnInfo extends FormDimensionInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FormColumnInfo(ColumnSpec spec) throws Exception {
-    super(spec);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FormColumnInfo(ColumnSpec spec) throws Exception {
+		super(spec);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Copy
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public FormColumnInfo copy() throws Exception {
-    return new FormColumnInfo((ColumnSpec) getFormSpec());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Copy
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public FormColumnInfo copy() throws Exception {
+		return new FormColumnInfo((ColumnSpec) getFormSpec());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Templates
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final FormDimensionTemplate[] TEMPLATES = new FormDimensionTemplate[]{
-      new FormDimensionTemplate("DEFAULT_COLSPEC", true, "default", "default.gif"),
-      new FormDimensionTemplate("PREF_COLSPEC", true, "preferred", "preferred.gif"),
-      new FormDimensionTemplate("MIN_COLSPEC", true, "minimum", "minimum.gif"),
-      new FormDimensionTemplate("BUTTON_COLSPEC", true, "button", "button.gif"),
-      new FormDimensionTemplate("GROWING_BUTTON_COLSPEC",
-          true,
-          "growing button",
-          "growing_button.gif"),
-      new FormDimensionTemplate("GLUE_COLSPEC", false, "glue", "glue.gif"),
-      new FormDimensionTemplate("RELATED_GAP_COLSPEC", false, "related gap", "related.gif"),
-      new FormDimensionTemplate("UNRELATED_GAP_COLSPEC", false, "unrelated gap", "unrelated.gif"),
-      new FormDimensionTemplate("LABEL_COMPONENT_GAP_COLSPEC",
-          false,
-          "label component gap",
-          "label.gif"),};
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Templates
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final FormDimensionTemplate[] TEMPLATES = new FormDimensionTemplate[]{
+			new FormDimensionTemplate("DEFAULT_COLSPEC", true, "default", "default.gif"),
+			new FormDimensionTemplate("PREF_COLSPEC", true, "preferred", "preferred.gif"),
+			new FormDimensionTemplate("MIN_COLSPEC", true, "minimum", "minimum.gif"),
+			new FormDimensionTemplate("BUTTON_COLSPEC", true, "button", "button.gif"),
+			new FormDimensionTemplate("GROWING_BUTTON_COLSPEC",
+					true,
+					"growing button",
+					"growing_button.gif"),
+			new FormDimensionTemplate("GLUE_COLSPEC", false, "glue", "glue.gif"),
+			new FormDimensionTemplate("RELATED_GAP_COLSPEC", false, "related gap", "related.gif"),
+			new FormDimensionTemplate("UNRELATED_GAP_COLSPEC", false, "unrelated gap", "unrelated.gif"),
+			new FormDimensionTemplate("LABEL_COMPONENT_GAP_COLSPEC",
+					false,
+					"label component gap",
+					"label.gif"),};
 
-  @Override
-  public FormDimensionTemplate[] getTemplates() {
-    return TEMPLATES;
-  }
+	@Override
+	public FormDimensionTemplate[] getTemplates() {
+		return TEMPLATES;
+	}
 }
diff --git a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/FormDimensionInfo.java b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/FormDimensionInfo.java
index 9c38f0a79..a9071768d 100644
--- a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/FormDimensionInfo.java
+++ b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/FormDimensionInfo.java
@@ -34,401 +34,401 @@
  * @coverage swing.FormLayout.model
  */
 public abstract class FormDimensionInfo {
-  private final boolean m_horizontal;
-  private FormSizeInfo m_size;
-  private DefaultAlignment m_alignment;
-  private double m_weight;
+	private final boolean m_horizontal;
+	private FormSizeInfo m_size;
+	private DefaultAlignment m_alignment;
+	private double m_weight;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FormDimensionInfo(FormSpec spec) throws Exception {
-    m_horizontal = spec instanceof ColumnSpec;
-    setFormSpec(spec);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FormDimensionInfo(FormSpec spec) throws Exception {
+		m_horizontal = spec instanceof ColumnSpec;
+		setFormSpec(spec);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    return getDisplayString();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		return getDisplayString();
+	}
 
-  /**
-   * Same as {@link #equals(Object)}, but we can not override real {@link #equals(Object)} because
-   * this causes problems with collections. We just need to compare two {@link FormDimensionInfo}.
-   */
-  public boolean equals2(Object obj) {
-    FormDimensionInfo dimension = (FormDimensionInfo) obj;
-    return dimension.m_alignment == m_alignment
-        && dimension.m_size.getSize().equals(m_size.getSize())
-        && dimension.m_weight == m_weight;
-  }
+	/**
+	 * Same as {@link #equals(Object)}, but we can not override real {@link #equals(Object)} because
+	 * this causes problems with collections. We just need to compare two {@link FormDimensionInfo}.
+	 */
+	public boolean equals2(Object obj) {
+		FormDimensionInfo dimension = (FormDimensionInfo) obj;
+		return dimension.m_alignment == m_alignment
+				&& dimension.m_size.getSize().equals(m_size.getSize())
+				&& dimension.m_weight == m_weight;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Size
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link FormSizeInfo} for this {@link FormDimensionInfo}.
-   */
-  public final FormSizeInfo getSize() {
-    return m_size;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Size
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link FormSizeInfo} for this {@link FormDimensionInfo}.
+	 */
+	public final FormSizeInfo getSize() {
+		return m_size;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Alignment
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link DefaultAlignment} for this {@link FormDimensionInfo}.
-   */
-  public final DefaultAlignment getAlignment() {
-    return m_alignment;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Alignment
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link DefaultAlignment} for this {@link FormDimensionInfo}.
+	 */
+	public final DefaultAlignment getAlignment() {
+		return m_alignment;
+	}
 
-  /**
-   * Sets the {@link DefaultAlignment}.
-   */
-  public final void setAlignment(DefaultAlignment alignment) {
-    m_alignment = alignment;
-  }
+	/**
+	 * Sets the {@link DefaultAlignment}.
+	 */
+	public final void setAlignment(DefaultAlignment alignment) {
+		m_alignment = alignment;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Weight
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the resize weight.
-   */
-  public final double getWeight() {
-    return m_weight;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Weight
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the resize weight.
+	 */
+	public final double getWeight() {
+		return m_weight;
+	}
 
-  /**
-   * Sets the resize weight.
-   */
-  public final void setWeight(double weight) {
-    m_weight = weight;
-  }
+	/**
+	 * Sets the resize weight.
+	 */
+	public final void setWeight(double weight) {
+		m_weight = weight;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if this {@link FormDimensionInfo} is gap.
-   */
-  public final boolean isGap() {
-    Field field = getTemplateField();
-    return field != null && field.getName().indexOf("GAP") != -1;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if this {@link FormDimensionInfo} is gap.
+	 */
+	public final boolean isGap() {
+		Field field = getTemplateField();
+		return field != null && field.getName().indexOf("GAP") != -1;
+	}
 
-  /**
-   * @return <code>true</code> if this {@link FormDimensionInfo} has grow.
-   */
-  public final boolean hasGrow() {
-    return m_weight != 0;
-  }
+	/**
+	 * @return <code>true</code> if this {@link FormDimensionInfo} has grow.
+	 */
+	public final boolean hasGrow() {
+		return m_weight != 0;
+	}
 
-  /**
-   * Converts this {@link FormDimensionInfo} (with constant size in pixels) into nearest gap
-   * template with size difference not more than given delta.
-   */
-  public void convertToNearestGap(int maxDelta) throws Exception {
-    // prepare size of this dimension in pixels
-    int thisPixels;
-    {
-      Assert.isNotNull(m_size.getConstantSize());
-      Assert.isTrue(m_size.getConstantSize().getUnit() == ConstantSize.PIXEL);
-      thisPixels = (int) m_size.getConstantSize().getValue();
-    }
-    //
-    int minDelta = Integer.MAX_VALUE;
-    Field minField = null;
-    //
-    Field[] fields = FormDimensionUtils.getTemplateFields();
-    for (int i = 0; i < fields.length; i++) {
-      Field field = fields[i];
-      // check for type
-      if (m_horizontal && !ColumnSpec.class.isAssignableFrom(field.getType())) {
-        continue;
-      }
-      if (!m_horizontal && !RowSpec.class.isAssignableFrom(field.getType())) {
-        continue;
-      }
-      // check for constant size
-      int sizeInPixels;
-      {
-        FormSpec formSpec = (FormSpec) field.get(null);
-        if (!(formSpec.getSize() instanceof ConstantSize)) {
-          continue;
-        }
-        if (formSpec.getResizeWeight() != FormSpec.NO_GROW) {
-          continue;
-        }
-        ConstantSize constantSize = (ConstantSize) formSpec.getSize();
-        sizeInPixels = constantSize.getPixelSize(FormSizeConstantInfo.m_toolkitComponent);
-      }
-      // check that size in range
-      int delta = Math.abs(sizeInPixels - thisPixels);
-      if (delta <= maxDelta && delta < minDelta) {
-        minDelta = delta;
-        minField = field;
-      }
-    }
-    // set found gap
-    if (minField != null) {
-      setFormSpec((FormSpec) minField.get(null));
-    }
-  }
+	/**
+	 * Converts this {@link FormDimensionInfo} (with constant size in pixels) into nearest gap
+	 * template with size difference not more than given delta.
+	 */
+	public void convertToNearestGap(int maxDelta) throws Exception {
+		// prepare size of this dimension in pixels
+		int thisPixels;
+		{
+			Assert.isNotNull(m_size.getConstantSize());
+			Assert.isTrue(m_size.getConstantSize().getUnit() == ConstantSize.PIXEL);
+			thisPixels = (int) m_size.getConstantSize().getValue();
+		}
+		//
+		int minDelta = Integer.MAX_VALUE;
+		Field minField = null;
+		//
+		Field[] fields = FormDimensionUtils.getTemplateFields();
+		for (int i = 0; i < fields.length; i++) {
+			Field field = fields[i];
+			// check for type
+			if (m_horizontal && !ColumnSpec.class.isAssignableFrom(field.getType())) {
+				continue;
+			}
+			if (!m_horizontal && !RowSpec.class.isAssignableFrom(field.getType())) {
+				continue;
+			}
+			// check for constant size
+			int sizeInPixels;
+			{
+				FormSpec formSpec = (FormSpec) field.get(null);
+				if (!(formSpec.getSize() instanceof ConstantSize)) {
+					continue;
+				}
+				if (formSpec.getResizeWeight() != FormSpec.NO_GROW) {
+					continue;
+				}
+				ConstantSize constantSize = (ConstantSize) formSpec.getSize();
+				sizeInPixels = constantSize.getPixelSize(FormSizeConstantInfo.m_toolkitComponent);
+			}
+			// check that size in range
+			int delta = Math.abs(sizeInPixels - thisPixels);
+			if (delta <= maxDelta && delta < minDelta) {
+				minDelta = delta;
+				minField = field;
+			}
+		}
+		// set found gap
+		if (minField != null) {
+			setFormSpec((FormSpec) minField.get(null));
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Copy
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the copy of this {@link FormDimensionInfo}.
-   */
-  public abstract FormDimensionInfo copy() throws Exception;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Copy
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the copy of this {@link FormDimensionInfo}.
+	 */
+	public abstract FormDimensionInfo copy() throws Exception;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Templates
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the array of all {@link FormDimensionTemplate}'s.
-   */
-  public abstract FormDimensionTemplate[] getTemplates();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Templates
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the array of all {@link FormDimensionTemplate}'s.
+	 */
+	public abstract FormDimensionTemplate[] getTemplates();
 
-  /**
-   * @return the array of similar/dissimilar {@link FormDimensionTemplate}'s.
-   */
-  public final FormDimensionTemplate[] getTemplates(boolean similar) {
-    boolean isComponent = !isGap();
-    boolean needComponent = similar ? isComponent : !isComponent;
-    List<FormDimensionTemplate> selectedTemplates = Lists.newArrayList();
-    //
-    FormDimensionTemplate[] templates = getTemplates();
-    for (int i = 0; i < templates.length; i++) {
-      FormDimensionTemplate template = templates[i];
-      if (template.isComponent() == needComponent) {
-        selectedTemplates.add(template);
-      }
-    }
-    //
-    return selectedTemplates.toArray(new FormDimensionTemplate[selectedTemplates.size()]);
-  }
+	/**
+	 * @return the array of similar/dissimilar {@link FormDimensionTemplate}'s.
+	 */
+	public final FormDimensionTemplate[] getTemplates(boolean similar) {
+		boolean isComponent = !isGap();
+		boolean needComponent = similar ? isComponent : !isComponent;
+		List<FormDimensionTemplate> selectedTemplates = Lists.newArrayList();
+		//
+		FormDimensionTemplate[] templates = getTemplates();
+		for (int i = 0; i < templates.length; i++) {
+			FormDimensionTemplate template = templates[i];
+			if (template.isComponent() == needComponent) {
+				selectedTemplates.add(template);
+			}
+		}
+		//
+		return selectedTemplates.toArray(new FormDimensionTemplate[selectedTemplates.size()]);
+	}
 
-  /**
-   * @return the {@link FormDimensionTemplate} if this {@link FormDimensionInfo} is template or
-   *         <code>null</code> if it is not a template.
-   */
-  public final FormDimensionTemplate getTemplate() {
-    FormDimensionTemplate[] templates = getTemplates();
-    for (int i = 0; i < templates.length; i++) {
-      FormDimensionTemplate template = templates[i];
-      if (isTemplate(template)) {
-        return template;
-      }
-    }
-    // not a template
-    return null;
-  }
+	/**
+	 * @return the {@link FormDimensionTemplate} if this {@link FormDimensionInfo} is template or
+	 *         <code>null</code> if it is not a template.
+	 */
+	public final FormDimensionTemplate getTemplate() {
+		FormDimensionTemplate[] templates = getTemplates();
+		for (int i = 0; i < templates.length; i++) {
+			FormDimensionTemplate template = templates[i];
+			if (isTemplate(template)) {
+				return template;
+			}
+		}
+		// not a template
+		return null;
+	}
 
-  /**
-   * @return <code>true</code> if this {@link FormDimensionInfo} is same as given template.
-   */
-  public final boolean isTemplate(FormDimensionTemplate template) {
-    Field field = getTemplateField();
-    return field != null && field.getName().equals(template.getFieldName());
-  }
+	/**
+	 * @return <code>true</code> if this {@link FormDimensionInfo} is same as given template.
+	 */
+	public final boolean isTemplate(FormDimensionTemplate template) {
+		Field field = getTemplateField();
+		return field != null && field.getName().equals(template.getFieldName());
+	}
 
-  /**
-   * Uses given template as value for {@link FormDimensionInfo}.
-   */
-  public final void setTemplate(FormDimensionTemplate template) throws Exception {
-    Field field = FormSpecs.class.getField(template.getFieldName());
-    setFormSpec((FormSpec) field.get(null));
-  }
+	/**
+	 * Uses given template as value for {@link FormDimensionInfo}.
+	 */
+	public final void setTemplate(FormDimensionTemplate template) throws Exception {
+		Field field = FormSpecs.class.getField(template.getFieldName());
+		setFormSpec((FormSpec) field.get(null));
+	}
 
-  /**
-   * Assigns value from given {@link FormDimensionInfo}.
-   */
-  public final void assign(FormDimensionInfo dimension) throws Exception {
-    setFormSpec(dimension.getFormSpec());
-  }
+	/**
+	 * Assigns value from given {@link FormDimensionInfo}.
+	 */
+	public final void assign(FormDimensionInfo dimension) throws Exception {
+		setFormSpec(dimension.getFormSpec());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Text
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the tooltip text.
-   */
-  public final String getToolTip() {
-    // check for template
-    {
-      FormDimensionTemplate template = getTemplate();
-      if (template != null) {
-        return template.getTitle();
-      }
-    }
-    // not template, use encoded string
-    return getDisplayString();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Text
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the tooltip text.
+	 */
+	public final String getToolTip() {
+		// check for template
+		{
+			FormDimensionTemplate template = getTemplate();
+			if (template != null) {
+				return template.getTitle();
+			}
+		}
+		// not template, use encoded string
+		return getDisplayString();
+	}
 
-  /**
-   * @return the encoded textual presentation of {@link FormDimensionInfo} for displaying to user.
-   */
-  public String getDisplayString() {
-    String encoded = m_size.getDisplayString();
-    // add alignment
-    DefaultAlignment defaultAlignment = m_horizontal ? ColumnSpec.DEFAULT : RowSpec.DEFAULT;
-    if (m_alignment != defaultAlignment) {
-      encoded = m_alignment + ":" + encoded;
-    }
-    // add grow
-    if (m_weight != 0.0) {
-      if (m_weight == 1.0) {
-        encoded += ":grow";
-      } else {
-        encoded += ":grow(" + FORMAT.format(m_weight) + ")";
-      }
-    }
-    // return final encoded description
-    return encoded;
-  }
+	/**
+	 * @return the encoded textual presentation of {@link FormDimensionInfo} for displaying to user.
+	 */
+	public String getDisplayString() {
+		String encoded = m_size.getDisplayString();
+		// add alignment
+		DefaultAlignment defaultAlignment = m_horizontal ? ColumnSpec.DEFAULT : RowSpec.DEFAULT;
+		if (m_alignment != defaultAlignment) {
+			encoded = m_alignment + ":" + encoded;
+		}
+		// add grow
+		if (m_weight != 0.0) {
+			if (m_weight == 1.0) {
+				encoded += ":grow";
+			} else {
+				encoded += ":grow(" + FORMAT.format(m_weight) + ")";
+			}
+		}
+		// return final encoded description
+		return encoded;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Source generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the source for this {@link FormDimensionInfo}.
-   */
-  public final String getSource() {
-    // check for template
-    {
-      Field field = getTemplateField();
-      if (field != null) {
-        return "com.jgoodies.forms.layout.FormSpecs." + field.getName();
-      }
-    }
-    // new instance
-    String sourceType =
-        m_horizontal ? "com.jgoodies.forms.layout.ColumnSpec" : "com.jgoodies.forms.layout.RowSpec";
-    if (m_size.isString()) {
-      String encoded = m_size.getSource();
-      // add alignment
-      DefaultAlignment defaultAlignment = m_horizontal ? ColumnSpec.DEFAULT : RowSpec.DEFAULT;
-      if (m_alignment != defaultAlignment) {
-        encoded = m_alignment + ":" + encoded;
-      }
-      // add grow
-      if (m_weight != 0.0) {
-        if (m_weight == 1.0) {
-          encoded += ":grow";
-        } else {
-          encoded += ":grow(" + FORMAT.format(m_weight) + ")";
-        }
-      }
-      // finalize
-      return sourceType + ".decode(\"" + encoded + "\")";
-    } else {
-      String source = "new " + sourceType + "(";
-      // add alignment
-      source += getAlignmentSource(m_horizontal, m_alignment);
-      // add size
-      source += ", ";
-      source += m_size.getSource();
-      // add grow
-      source += ", ";
-      source += FORMAT.format(m_weight);
-      // finalize
-      return source + ")";
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Source generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the source for this {@link FormDimensionInfo}.
+	 */
+	public final String getSource() {
+		// check for template
+		{
+			Field field = getTemplateField();
+			if (field != null) {
+				return "com.jgoodies.forms.layout.FormSpecs." + field.getName();
+			}
+		}
+		// new instance
+		String sourceType =
+				m_horizontal ? "com.jgoodies.forms.layout.ColumnSpec" : "com.jgoodies.forms.layout.RowSpec";
+		if (m_size.isString()) {
+			String encoded = m_size.getSource();
+			// add alignment
+			DefaultAlignment defaultAlignment = m_horizontal ? ColumnSpec.DEFAULT : RowSpec.DEFAULT;
+			if (m_alignment != defaultAlignment) {
+				encoded = m_alignment + ":" + encoded;
+			}
+			// add grow
+			if (m_weight != 0.0) {
+				if (m_weight == 1.0) {
+					encoded += ":grow";
+				} else {
+					encoded += ":grow(" + FORMAT.format(m_weight) + ")";
+				}
+			}
+			// finalize
+			return sourceType + ".decode(\"" + encoded + "\")";
+		} else {
+			String source = "new " + sourceType + "(";
+			// add alignment
+			source += getAlignmentSource(m_horizontal, m_alignment);
+			// add size
+			source += ", ";
+			source += m_size.getSource();
+			// add grow
+			source += ", ";
+			source += FORMAT.format(m_weight);
+			// finalize
+			return source + ")";
+		}
+	}
 
-  /**
-   * @return the source for {@link #m_alignment}.
-   */
-  private static String getAlignmentSource(boolean horizontal, DefaultAlignment alignment) {
-    if (horizontal) {
-      String source;
-      if (alignment == ColumnSpec.LEFT) {
-        source = "LEFT";
-      } else if (alignment == ColumnSpec.CENTER) {
-        source = "CENTER";
-      } else if (alignment == ColumnSpec.RIGHT) {
-        source = "RIGHT";
-      } else {
-        Assert.isTrue(alignment == ColumnSpec.FILL);
-        source = "FILL";
-      }
-      return "com.jgoodies.forms.layout.ColumnSpec." + source;
-    } else {
-      String source;
-      if (alignment == RowSpec.TOP) {
-        source = "TOP";
-      } else if (alignment == RowSpec.CENTER) {
-        source = "CENTER";
-      } else if (alignment == RowSpec.BOTTOM) {
-        source = "BOTTOM";
-      } else {
-        Assert.isTrue(alignment == RowSpec.FILL);
-        source = "FILL";
-      }
-      return "com.jgoodies.forms.layout.RowSpec." + source;
-    }
-  }
+	/**
+	 * @return the source for {@link #m_alignment}.
+	 */
+	private static String getAlignmentSource(boolean horizontal, DefaultAlignment alignment) {
+		if (horizontal) {
+			String source;
+			if (alignment == ColumnSpec.LEFT) {
+				source = "LEFT";
+			} else if (alignment == ColumnSpec.CENTER) {
+				source = "CENTER";
+			} else if (alignment == ColumnSpec.RIGHT) {
+				source = "RIGHT";
+			} else {
+				Assert.isTrue(alignment == ColumnSpec.FILL);
+				source = "FILL";
+			}
+			return "com.jgoodies.forms.layout.ColumnSpec." + source;
+		} else {
+			String source;
+			if (alignment == RowSpec.TOP) {
+				source = "TOP";
+			} else if (alignment == RowSpec.CENTER) {
+				source = "CENTER";
+			} else if (alignment == RowSpec.BOTTOM) {
+				source = "BOTTOM";
+			} else {
+				Assert.isTrue(alignment == RowSpec.FILL);
+				source = "FILL";
+			}
+			return "com.jgoodies.forms.layout.RowSpec." + source;
+		}
+	}
 
-  /**
-   * @return the {@link Field} from {@link FormSpecs} that has same value.
-   */
-  private Field getTemplateField() {
-    FormSpec formSpec = getFormSpec();
-    return FormDimensionUtils.getFormFactoryTemplate(formSpec);
-  }
+	/**
+	 * @return the {@link Field} from {@link FormSpecs} that has same value.
+	 */
+	private Field getTemplateField() {
+		FormSpec formSpec = getFormSpec();
+		return FormDimensionUtils.getFormFactoryTemplate(formSpec);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // FormSpec creation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final DecimalFormat FORMAT = new DecimalFormat("#.##",
-      new DecimalFormatSymbols(Locale.ENGLISH));
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// FormSpec creation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final DecimalFormat FORMAT = new DecimalFormat("#.##",
+			new DecimalFormatSymbols(Locale.ENGLISH));
 
-  /**
-   * @return the {@link FormSpec} instance according to the current alignment/size/weight.
-   */
-  public final FormSpec getFormSpec() {
-    if (m_horizontal) {
-      return new ColumnSpec(m_alignment, m_size.getSize(), m_weight);
-    } else {
-      return new RowSpec(m_alignment, m_size.getSize(), m_weight);
-    }
-  }
+	/**
+	 * @return the {@link FormSpec} instance according to the current alignment/size/weight.
+	 */
+	public final FormSpec getFormSpec() {
+		if (m_horizontal) {
+			return new ColumnSpec(m_alignment, m_size.getSize(), m_weight);
+		} else {
+			return new RowSpec(m_alignment, m_size.getSize(), m_weight);
+		}
+	}
 
-  /**
-   * Updates {@link FormDimensionInfo} model using {@link FormSpec}.
-   */
-  private void setFormSpec(FormSpec spec) throws Exception {
-    m_size = new FormSizeInfo(spec.getSize(), m_horizontal);
-    m_alignment = spec.getDefaultAlignment();
-    m_weight = spec.getResizeWeight();
-  }
+	/**
+	 * Updates {@link FormDimensionInfo} model using {@link FormSpec}.
+	 */
+	private void setFormSpec(FormSpec spec) throws Exception {
+		m_size = new FormSizeInfo(spec.getSize(), m_horizontal);
+		m_alignment = spec.getDefaultAlignment();
+		m_weight = spec.getResizeWeight();
+	}
 }
diff --git a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/FormDimensionTemplate.java b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/FormDimensionTemplate.java
index 48f231a20..8ff85a139 100644
--- a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/FormDimensionTemplate.java
+++ b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/FormDimensionTemplate.java
@@ -24,54 +24,54 @@
  * @coverage swing.FormLayout.model
  */
 public final class FormDimensionTemplate {
-  private final String m_fieldName;
-  private final boolean m_component;
-  private final String m_title;
-  private final ImageDescriptor m_icon;
+	private final String m_fieldName;
+	private final boolean m_component;
+	private final String m_title;
+	private final ImageDescriptor m_icon;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FormDimensionTemplate(String fieldName, boolean component, String title, String iconName) {
-    m_fieldName = fieldName;
-    m_component = component;
-    m_title = title;
-    m_icon = Activator.getImageDescriptor("templates/" + iconName);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FormDimensionTemplate(String fieldName, boolean component, String title, String iconName) {
+		m_fieldName = fieldName;
+		m_component = component;
+		m_title = title;
+		m_icon = Activator.getImageDescriptor("templates/" + iconName);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the name of field in {@link FormSpecs}.
-   */
-  public String getFieldName() {
-    return m_fieldName;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the name of field in {@link FormSpecs}.
+	 */
+	public String getFieldName() {
+		return m_fieldName;
+	}
 
-  /**
-   * @return <code>true</code> if this template is component, or <code>false</code> if it is
-   *         constant.
-   */
-  public boolean isComponent() {
-    return m_component;
-  }
+	/**
+	 * @return <code>true</code> if this template is component, or <code>false</code> if it is
+	 *         constant.
+	 */
+	public boolean isComponent() {
+		return m_component;
+	}
 
-  /**
-   * @return the title to display.
-   */
-  public String getTitle() {
-    return m_title;
-  }
+	/**
+	 * @return the title to display.
+	 */
+	public String getTitle() {
+		return m_title;
+	}
 
-  /**
-   * @return the {@link ImageDescriptor} to display.
-   */
-  public ImageDescriptor getIcon() {
-    return m_icon;
-  }
+	/**
+	 * @return the {@link ImageDescriptor} to display.
+	 */
+	public ImageDescriptor getIcon() {
+		return m_icon;
+	}
 }
diff --git a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/FormDimensionUtils.java b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/FormDimensionUtils.java
index 0139fe6ff..6416f0be6 100644
--- a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/FormDimensionUtils.java
+++ b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/FormDimensionUtils.java
@@ -29,71 +29,71 @@
  * @coverage swing.FormLayout.model
  */
 public class FormDimensionUtils {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private FormDimensionUtils() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private FormDimensionUtils() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static Field[] m_templateFields;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static Field[] m_templateFields;
 
-  /**
-   * @return <code>true</code> if two {@link FormSpec} objects are equal.
-   */
-  public static boolean equals(FormSpec a, FormSpec b) {
-    if (a.getClass() == b.getClass()) {
-      return a.getDefaultAlignment() == b.getDefaultAlignment()
-          && a.getResizeWeight() == b.getResizeWeight()
-          && a.getSize().equals(b.getSize());
-    }
-    return false;
-  }
+	/**
+	 * @return <code>true</code> if two {@link FormSpec} objects are equal.
+	 */
+	public static boolean equals(FormSpec a, FormSpec b) {
+		if (a.getClass() == b.getClass()) {
+			return a.getDefaultAlignment() == b.getDefaultAlignment()
+					&& a.getResizeWeight() == b.getResizeWeight()
+					&& a.getSize().equals(b.getSize());
+		}
+		return false;
+	}
 
-  /**
-   * @return the array of {@link Field}'s from {@link com.jgoodies.forms.layout.FormSpecs} with
-   *         {@link FormSpec} values.
-   */
-  public static Field[] getTemplateFields() {
-    if (m_templateFields == null) {
-      List<Field> templateFieldsList = Lists.newArrayList();
-      Field[] fields = com.jgoodies.forms.layout.FormSpecs.class.getFields();
-      for (int i = 0; i < fields.length; i++) {
-        Field field = fields[i];
-        if (Modifier.isStatic(field.getModifiers())
-            && FormSpec.class.isAssignableFrom(field.getType())) {
-          templateFieldsList.add(field);
-        }
-      }
-      m_templateFields = templateFieldsList.toArray(new Field[templateFieldsList.size()]);
-    }
-    return m_templateFields;
-  }
+	/**
+	 * @return the array of {@link Field}'s from {@link com.jgoodies.forms.layout.FormSpecs} with
+	 *         {@link FormSpec} values.
+	 */
+	public static Field[] getTemplateFields() {
+		if (m_templateFields == null) {
+			List<Field> templateFieldsList = Lists.newArrayList();
+			Field[] fields = com.jgoodies.forms.layout.FormSpecs.class.getFields();
+			for (int i = 0; i < fields.length; i++) {
+				Field field = fields[i];
+				if (Modifier.isStatic(field.getModifiers())
+						&& FormSpec.class.isAssignableFrom(field.getType())) {
+					templateFieldsList.add(field);
+				}
+			}
+			m_templateFields = templateFieldsList.toArray(new Field[templateFieldsList.size()]);
+		}
+		return m_templateFields;
+	}
 
-  /**
-   * @return the {@link FormSpec} {@link Field} from {@link FormSpecs} that has same value as given
-   *         or <code>null</code> if there are not such field.
-   */
-  public static Field getFormFactoryTemplate(final FormSpec o) {
-    return ExecutionUtils.runObject(new RunnableObjectEx<Field>() {
-      @Override
-      public Field runObject() throws Exception {
-        Field[] templateFields = getTemplateFields();
-        for (int i = 0; i < templateFields.length; i++) {
-          Field field = templateFields[i];
-          if (FormDimensionUtils.equals((FormSpec) field.get(null), o)) {
-            return field;
-          }
-        }
-        // no field found
-        return null;
-      }
-    });
-  }
+	/**
+	 * @return the {@link FormSpec} {@link Field} from {@link FormSpecs} that has same value as given
+	 *         or <code>null</code> if there are not such field.
+	 */
+	public static Field getFormFactoryTemplate(final FormSpec o) {
+		return ExecutionUtils.runObject(new RunnableObjectEx<Field>() {
+			@Override
+			public Field runObject() throws Exception {
+				Field[] templateFields = getTemplateFields();
+				for (int i = 0; i < templateFields.length; i++) {
+					Field field = templateFields[i];
+					if (FormDimensionUtils.equals((FormSpec) field.get(null), o)) {
+						return field;
+					}
+				}
+				// no field found
+				return null;
+			}
+		});
+	}
 }
diff --git a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/FormLayoutConverter.java b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/FormLayoutConverter.java
index 0f7c2f058..c49b278ca 100644
--- a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/FormLayoutConverter.java
+++ b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/FormLayoutConverter.java
@@ -40,236 +40,236 @@
  * @coverage swing.FormLayout.model
  */
 public class FormLayoutConverter {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private FormLayoutConverter() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private FormLayoutConverter() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Conversion
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static void convert(ContainerInfo parent, FormLayoutInfo layout) throws Exception {
-    // prepare columns and rows and distribute controls in them
-    List<ComponentGroup> columns =
-        GridConvertionHelper.buildGroups(parent.getChildrenComponents(), true);
-    List<ComponentGroup> rows =
-        GridConvertionHelper.buildGroups(parent.getChildrenComponents(), false);
-    // sort components in columns and rows
-    GridConvertionHelper.sortGroupsByTranspose(columns, rows);
-    GridConvertionHelper.sortGroupsByTranspose(rows, columns);
-    // ensure that columns and rows are sorted by start coordinates
-    GridConvertionHelper.sortGroups(columns);
-    GridConvertionHelper.sortGroups(rows);
-    // calculate begin/end for each column/row
-    GridConvertionHelper.updateBoundsGaps(columns, true);
-    GridConvertionHelper.updateBoundsGaps(rows, true);
-    // create dimensions in layout
-    {
-      createDimensions(layout, columns, true);
-      createDimensions(layout, rows, false);
-    }
-    // prepare set of components in groups
-    Set<ComponentInGroup> componentsInGroups = Sets.newHashSet();
-    for (ComponentGroup column : columns) {
-      for (ComponentInGroup componentInGroup : column.getComponents()) {
-        componentsInGroups.add(componentInGroup);
-      }
-    }
-    // create constraints for each control
-    for (ComponentInGroup componentInGroup : componentsInGroups) {
-      ComponentInfo component = (ComponentInfo) componentInGroup.getComponent();
-      // layout data
-      GeneralLayoutData generalLayoutData = GeneralLayoutData.getFromInfoEx(component);
-      CellConstraintsSupport constraints = FormLayoutInfo.getConstraints(component);
-      // update cell coordinates
-      {
-        // prepare begin/end column/row
-        ComponentGroup beginColumn =
-            GridConvertionHelper.getBeginForComponent(columns, componentInGroup);
-        ComponentGroup endColumn =
-            GridConvertionHelper.getEndForComponent(columns, componentInGroup);
-        ComponentGroup beginRow = GridConvertionHelper.getBeginForComponent(rows, componentInGroup);
-        ComponentGroup endRow = GridConvertionHelper.getEndForComponent(rows, componentInGroup);
-        // calculate location/size
-        int x = columns.indexOf(beginColumn);
-        int y = rows.indexOf(beginRow);
-        int sx = 1 + columns.indexOf(endColumn) - x;
-        int sy = 1 + rows.indexOf(endRow) - y;
-        // set location/size
-        constraints.x = 1 + x;
-        constraints.y = 1 + y;
-        constraints.width = sx;
-        constraints.height = sy;
-      }
-      // alignments
-      constraints.alignH = getHorizontalAlignment(columns, componentInGroup, generalLayoutData);
-      constraints.alignV = getVerticalAlignment(rows, componentInGroup, generalLayoutData);
-      // write constraints
-      constraints.write();
-    }
-    // convert empty columns into gaps
-    {
-      List<FormColumnInfo> dimensions = layout.getColumns();
-      int[] counts = layout.getColumnComponentsCounts();
-      for (int i = 0; i < dimensions.size(); i++) {
-        if (counts[i] == 0) {
-          FormDimensionInfo dimension = dimensions.get(i);
-          dimension.convertToNearestGap(5);
-        }
-      }
-    }
-    // convert empty rows into gaps
-    {
-      List<FormRowInfo> dimensions = layout.getRows();
-      int[] counts = layout.getRowComponentsCounts();
-      for (int i = 0; i < dimensions.size(); i++) {
-        if (counts[i] == 0) {
-          FormDimensionInfo dimension = dimensions.get(i);
-          dimension.convertToNearestGap(5);
-        }
-      }
-    }
-    // write dimensions
-    layout.writeDimensions();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Conversion
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static void convert(ContainerInfo parent, FormLayoutInfo layout) throws Exception {
+		// prepare columns and rows and distribute controls in them
+		List<ComponentGroup> columns =
+				GridConvertionHelper.buildGroups(parent.getChildrenComponents(), true);
+		List<ComponentGroup> rows =
+				GridConvertionHelper.buildGroups(parent.getChildrenComponents(), false);
+		// sort components in columns and rows
+		GridConvertionHelper.sortGroupsByTranspose(columns, rows);
+		GridConvertionHelper.sortGroupsByTranspose(rows, columns);
+		// ensure that columns and rows are sorted by start coordinates
+		GridConvertionHelper.sortGroups(columns);
+		GridConvertionHelper.sortGroups(rows);
+		// calculate begin/end for each column/row
+		GridConvertionHelper.updateBoundsGaps(columns, true);
+		GridConvertionHelper.updateBoundsGaps(rows, true);
+		// create dimensions in layout
+		{
+			createDimensions(layout, columns, true);
+			createDimensions(layout, rows, false);
+		}
+		// prepare set of components in groups
+		Set<ComponentInGroup> componentsInGroups = Sets.newHashSet();
+		for (ComponentGroup column : columns) {
+			for (ComponentInGroup componentInGroup : column.getComponents()) {
+				componentsInGroups.add(componentInGroup);
+			}
+		}
+		// create constraints for each control
+		for (ComponentInGroup componentInGroup : componentsInGroups) {
+			ComponentInfo component = (ComponentInfo) componentInGroup.getComponent();
+			// layout data
+			GeneralLayoutData generalLayoutData = GeneralLayoutData.getFromInfoEx(component);
+			CellConstraintsSupport constraints = FormLayoutInfo.getConstraints(component);
+			// update cell coordinates
+			{
+				// prepare begin/end column/row
+				ComponentGroup beginColumn =
+						GridConvertionHelper.getBeginForComponent(columns, componentInGroup);
+				ComponentGroup endColumn =
+						GridConvertionHelper.getEndForComponent(columns, componentInGroup);
+				ComponentGroup beginRow = GridConvertionHelper.getBeginForComponent(rows, componentInGroup);
+				ComponentGroup endRow = GridConvertionHelper.getEndForComponent(rows, componentInGroup);
+				// calculate location/size
+				int x = columns.indexOf(beginColumn);
+				int y = rows.indexOf(beginRow);
+				int sx = 1 + columns.indexOf(endColumn) - x;
+				int sy = 1 + rows.indexOf(endRow) - y;
+				// set location/size
+				constraints.x = 1 + x;
+				constraints.y = 1 + y;
+				constraints.width = sx;
+				constraints.height = sy;
+			}
+			// alignments
+			constraints.alignH = getHorizontalAlignment(columns, componentInGroup, generalLayoutData);
+			constraints.alignV = getVerticalAlignment(rows, componentInGroup, generalLayoutData);
+			// write constraints
+			constraints.write();
+		}
+		// convert empty columns into gaps
+		{
+			List<FormColumnInfo> dimensions = layout.getColumns();
+			int[] counts = layout.getColumnComponentsCounts();
+			for (int i = 0; i < dimensions.size(); i++) {
+				if (counts[i] == 0) {
+					FormDimensionInfo dimension = dimensions.get(i);
+					dimension.convertToNearestGap(5);
+				}
+			}
+		}
+		// convert empty rows into gaps
+		{
+			List<FormRowInfo> dimensions = layout.getRows();
+			int[] counts = layout.getRowComponentsCounts();
+			for (int i = 0; i < dimensions.size(); i++) {
+				if (counts[i] == 0) {
+					FormDimensionInfo dimension = dimensions.get(i);
+					dimension.convertToNearestGap(5);
+				}
+			}
+		}
+		// write dimensions
+		layout.writeDimensions();
+	}
 
-  /**
-   * Creates {@link FormColumnInfo} or {@link FormRowInfo} for given {@link ComponentGroup}'s.
-   */
-  private static void createDimensions(FormLayoutInfo layout,
-      List<ComponentGroup> groups,
-      boolean horizontal) throws Exception {
-    for (ComponentGroup group : groups) {
-      // create new "default" dimension
-      FormDimensionInfo dimension;
-      if (horizontal) {
-        FormColumnInfo column = new FormColumnInfo(FormSpecs.DEFAULT_COLSPEC);
-        layout.getColumns().add(column);
-        dimension = column;
-      } else {
-        FormRowInfo row = new FormRowInfo(FormSpecs.DEFAULT_ROWSPEC);
-        layout.getRows().add(row);
-        dimension = row;
-      }
-      // set constant size
-      {
-        FormSizeInfo size = dimension.getSize();
-        size.setConstantSize(new FormSizeConstantInfo(group.getSize(), ConstantSize.PIXEL));
-      }
-    }
-  }
+	/**
+	 * Creates {@link FormColumnInfo} or {@link FormRowInfo} for given {@link ComponentGroup}'s.
+	 */
+	private static void createDimensions(FormLayoutInfo layout,
+			List<ComponentGroup> groups,
+			boolean horizontal) throws Exception {
+		for (ComponentGroup group : groups) {
+			// create new "default" dimension
+			FormDimensionInfo dimension;
+			if (horizontal) {
+				FormColumnInfo column = new FormColumnInfo(FormSpecs.DEFAULT_COLSPEC);
+				layout.getColumns().add(column);
+				dimension = column;
+			} else {
+				FormRowInfo row = new FormRowInfo(FormSpecs.DEFAULT_ROWSPEC);
+				layout.getRows().add(row);
+				dimension = row;
+			}
+			// set constant size
+			{
+				FormSizeInfo size = dimension.getSize();
+				size.setConstantSize(new FormSizeConstantInfo(group.getSize(), ConstantSize.PIXEL));
+			}
+		}
+	}
 
-  /**
-   * Calculate horizontal alignment.
-   */
-  private static CellConstraints.Alignment getHorizontalAlignment(List<ComponentGroup> columns,
-      ComponentInGroup componentInGroup,
-      GeneralLayoutData generalLayoutData) {
-    if (generalLayoutData.horizontalAlignment != null) {
-      // from general layout data
-      CellConstraints.Alignment alignment =
-          GeneralLayoutData.getRealValue(
-              FormLayoutInfo.m_horizontalAlignmentMap,
-              generalLayoutData.horizontalAlignment);
-      if (alignment != null && alignment != CellConstraints.DEFAULT) {
-        return alignment;
-      }
-    }
-    // calculate
-    IAbstractComponentInfo component = componentInGroup.getComponent();
-    // prepare begin/end column
-    ComponentGroup beginColumn =
-        GridConvertionHelper.getBeginForComponent(columns, componentInGroup);
-    ComponentGroup endColumn = GridConvertionHelper.getEndForComponent(columns, componentInGroup);
-    int columnLeft = beginColumn.getMin();
-    int columnRight = endColumn.getMax();
-    int columnCenter = columnLeft + (columnRight - columnLeft) / 2;
-    Rectangle bounds = component.getBounds();
-    Dimension prefSize = component.getPreferredSize();
-    int bl = bounds.x;
-    int br = bounds.right();
-    //
-    int leftOffset = Math.abs(bl - columnLeft);
-    int rightOffset = Math.abs(columnRight - br);
-    // prepare how much location of two sides will be changed for each alignment
-    int leftDelta = leftOffset + Math.abs(columnLeft + prefSize.width - br);
-    int rightDelta = rightOffset + Math.abs(columnRight - prefSize.width - bl);
-    int fillDelta = leftOffset + rightOffset;
-    int centerDelta =
-        Math.abs(bl - (columnCenter - prefSize.width / 2))
-            + Math.abs(br - (columnCenter + prefSize.width / 2));
-    // set alignment
-    return getAlignment(new int[]{leftDelta, centerDelta, rightDelta, fillDelta}, new Alignment[]{
-        CellConstraints.LEFT,
-        CellConstraints.CENTER,
-        CellConstraints.RIGHT,
-        CellConstraints.FILL});
-  }
+	/**
+	 * Calculate horizontal alignment.
+	 */
+	private static CellConstraints.Alignment getHorizontalAlignment(List<ComponentGroup> columns,
+			ComponentInGroup componentInGroup,
+			GeneralLayoutData generalLayoutData) {
+		if (generalLayoutData.horizontalAlignment != null) {
+			// from general layout data
+			CellConstraints.Alignment alignment =
+					GeneralLayoutData.getRealValue(
+							FormLayoutInfo.m_horizontalAlignmentMap,
+							generalLayoutData.horizontalAlignment);
+			if (alignment != null && alignment != CellConstraints.DEFAULT) {
+				return alignment;
+			}
+		}
+		// calculate
+		IAbstractComponentInfo component = componentInGroup.getComponent();
+		// prepare begin/end column
+		ComponentGroup beginColumn =
+				GridConvertionHelper.getBeginForComponent(columns, componentInGroup);
+		ComponentGroup endColumn = GridConvertionHelper.getEndForComponent(columns, componentInGroup);
+		int columnLeft = beginColumn.getMin();
+		int columnRight = endColumn.getMax();
+		int columnCenter = columnLeft + (columnRight - columnLeft) / 2;
+		Rectangle bounds = component.getBounds();
+		Dimension prefSize = component.getPreferredSize();
+		int bl = bounds.x;
+		int br = bounds.right();
+		//
+		int leftOffset = Math.abs(bl - columnLeft);
+		int rightOffset = Math.abs(columnRight - br);
+		// prepare how much location of two sides will be changed for each alignment
+		int leftDelta = leftOffset + Math.abs(columnLeft + prefSize.width - br);
+		int rightDelta = rightOffset + Math.abs(columnRight - prefSize.width - bl);
+		int fillDelta = leftOffset + rightOffset;
+		int centerDelta =
+				Math.abs(bl - (columnCenter - prefSize.width / 2))
+				+ Math.abs(br - (columnCenter + prefSize.width / 2));
+		// set alignment
+		return getAlignment(new int[]{leftDelta, centerDelta, rightDelta, fillDelta}, new Alignment[]{
+				CellConstraints.LEFT,
+				CellConstraints.CENTER,
+				CellConstraints.RIGHT,
+				CellConstraints.FILL});
+	}
 
-  /**
-   * Calculate vertical alignment.
-   */
-  private static CellConstraints.Alignment getVerticalAlignment(List<ComponentGroup> rows,
-      ComponentInGroup componentInGroup,
-      GeneralLayoutData generalLayoutData) {
-    if (generalLayoutData.verticalAlignment != null) {
-      // from general layout data
-      CellConstraints.Alignment alignment =
-          GeneralLayoutData.getRealValue(
-              FormLayoutInfo.m_verticalAlignmentMap,
-              generalLayoutData.verticalAlignment);
-      if (alignment != null && alignment != CellConstraints.DEFAULT) {
-        return alignment;
-      }
-    }
-    // calculate
-    IAbstractComponentInfo component = componentInGroup.getComponent();
-    // prepare begin/end row
-    ComponentGroup beginRow = GridConvertionHelper.getBeginForComponent(rows, componentInGroup);
-    ComponentGroup endRow = GridConvertionHelper.getEndForComponent(rows, componentInGroup);
-    Rectangle bounds = component.getBounds();
-    Dimension prefSize = component.getPreferredSize();
-    int bt = bounds.y;
-    int bb = bounds.bottom();
-    int rowTop = beginRow.getMin();
-    int rowBottom = endRow.getMax();
-    int rowCenter = rowTop + (rowBottom - rowTop) / 2;
-    //
-    int topOffset = bt - rowTop;
-    int bottomOffset = rowBottom - bb;
-    // prepare how much location of two sides will be changed for each alignment
-    int topDelta = topOffset + Math.abs(rowTop + prefSize.height - bb);
-    int bottomDelta = bottomOffset + Math.abs(rowBottom - prefSize.height - bt);
-    int fillDelta = topOffset + bottomOffset;
-    int centerDelta =
-        Math.abs(bt - (rowCenter - prefSize.height / 2))
-            + Math.abs(bb - (rowCenter + prefSize.height / 2));
-    // set alignment
-    return getAlignment(new int[]{topDelta, centerDelta, bottomDelta, fillDelta}, new Alignment[]{
-        CellConstraints.TOP,
-        CellConstraints.CENTER,
-        CellConstraints.BOTTOM,
-        CellConstraints.FILL});
-  }
+	/**
+	 * Calculate vertical alignment.
+	 */
+	private static CellConstraints.Alignment getVerticalAlignment(List<ComponentGroup> rows,
+			ComponentInGroup componentInGroup,
+			GeneralLayoutData generalLayoutData) {
+		if (generalLayoutData.verticalAlignment != null) {
+			// from general layout data
+			CellConstraints.Alignment alignment =
+					GeneralLayoutData.getRealValue(
+							FormLayoutInfo.m_verticalAlignmentMap,
+							generalLayoutData.verticalAlignment);
+			if (alignment != null && alignment != CellConstraints.DEFAULT) {
+				return alignment;
+			}
+		}
+		// calculate
+		IAbstractComponentInfo component = componentInGroup.getComponent();
+		// prepare begin/end row
+		ComponentGroup beginRow = GridConvertionHelper.getBeginForComponent(rows, componentInGroup);
+		ComponentGroup endRow = GridConvertionHelper.getEndForComponent(rows, componentInGroup);
+		Rectangle bounds = component.getBounds();
+		Dimension prefSize = component.getPreferredSize();
+		int bt = bounds.y;
+		int bb = bounds.bottom();
+		int rowTop = beginRow.getMin();
+		int rowBottom = endRow.getMax();
+		int rowCenter = rowTop + (rowBottom - rowTop) / 2;
+		//
+		int topOffset = bt - rowTop;
+		int bottomOffset = rowBottom - bb;
+		// prepare how much location of two sides will be changed for each alignment
+		int topDelta = topOffset + Math.abs(rowTop + prefSize.height - bb);
+		int bottomDelta = bottomOffset + Math.abs(rowBottom - prefSize.height - bt);
+		int fillDelta = topOffset + bottomOffset;
+		int centerDelta =
+				Math.abs(bt - (rowCenter - prefSize.height / 2))
+				+ Math.abs(bb - (rowCenter + prefSize.height / 2));
+		// set alignment
+		return getAlignment(new int[]{topDelta, centerDelta, bottomDelta, fillDelta}, new Alignment[]{
+				CellConstraints.TOP,
+				CellConstraints.CENTER,
+				CellConstraints.BOTTOM,
+				CellConstraints.FILL});
+	}
 
-  /**
-   * @return the {@link Alignment} corresponding to the minimum delta value.
-   */
-  private static Alignment getAlignment(int[] deltas, Alignment[] alignments) {
-    int minimum;
-    {
-      minimum = Integer.MAX_VALUE;
-      for (int i = 0; i < deltas.length; i++) {
-        int delta = deltas[i];
-        minimum = Math.min(minimum, delta);
-      }
-    }
-    // return corresponding alignment
-    return alignments[ArrayUtils.indexOf(deltas, minimum)];
-  }
+	/**
+	 * @return the {@link Alignment} corresponding to the minimum delta value.
+	 */
+	private static Alignment getAlignment(int[] deltas, Alignment[] alignments) {
+		int minimum;
+		{
+			minimum = Integer.MAX_VALUE;
+			for (int i = 0; i < deltas.length; i++) {
+				int delta = deltas[i];
+				minimum = Math.min(minimum, delta);
+			}
+		}
+		// return corresponding alignment
+		return alignments[ArrayUtils.indexOf(deltas, minimum)];
+	}
 }
diff --git a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/FormLayoutInfo.java b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/FormLayoutInfo.java
index db1279361..64841b6ab 100644
--- a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/FormLayoutInfo.java
+++ b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/FormLayoutInfo.java
@@ -86,1684 +86,1684 @@
  * @coverage swing.FormLayout.model
  */
 public final class FormLayoutInfo extends LayoutInfo implements IPreferenceConstants {
-  private final List<FormColumnInfo> m_columns = Lists.newArrayList();
-  private final List<FormRowInfo> m_rows = Lists.newArrayList();
-  private final List<List<FormColumnInfo>> m_columnGroups = Lists.newArrayList();
-  private final List<List<FormRowInfo>> m_rowGroups = Lists.newArrayList();
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FormLayoutInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Initialize
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void initialize() throws Exception {
-    super.initialize();
-    // create initial columns/rows
-    if (m_columns.isEmpty() && m_rows.isEmpty()) {
-      FormLayout layout = (FormLayout) getObject();
-      // create columns
-      {
-        int columnCount = layout.getColumnCount();
-        for (int column = 1; column <= columnCount; column++) {
-          ColumnSpec spec = layout.getColumnSpec(column);
-          m_columns.add(new FormColumnInfo(spec));
-        }
-      }
-      // create rows
-      {
-        int rowCount = layout.getRowCount();
-        for (int row = 1; row <= rowCount; row++) {
-          RowSpec spec = layout.getRowSpec(row);
-          m_rows.add(new FormRowInfo(spec));
-        }
-      }
-    }
-    // events
-    addBroadcastListener(new ObjectInfoTreeComplete() {
-      @Override
-      public void invoke() throws Exception {
-        FormLayout layout = (FormLayout) getObject();
-        fillDimensionGroups(layout.getColumnGroups(), m_columns, m_columnGroups);
-        fillDimensionGroups(layout.getRowGroups(), m_rows, m_rowGroups);
-      }
-    });
-    addBroadcastListener(new ObjectEventListener() {
-      @Override
-      public void addContextMenu(List<? extends ObjectInfo> objects,
-          ObjectInfo object,
-          IMenuManager manager) throws Exception {
-        addContextMenuActions(object, manager);
-      }
-    });
-    addBroadcastListener(new JavaInfoAddProperties() {
-      @Override
-      public void invoke(JavaInfo javaInfo, List<Property> properties) throws Exception {
-        if (isManagedObject(javaInfo)) {
-          ComponentInfo component = (ComponentInfo) javaInfo;
-          CellConstraintsSupport support = getConstraints(component);
-          properties.add(support.getCellProperty());
-        }
-      }
-    });
-    // alignment
-    new SelectionActionsSupport(this);
-    // assistant
-    new LayoutAssistantSupport(this) {
-      @Override
-      protected AbstractAssistantPage createConstraintsPage(Composite parent,
-          List<ObjectInfo> objects) {
-        return new CellConstraintsAssistantPage(parent, FormLayoutInfo.this, objects);
-      }
-    };
-  }
-
-  @Override
-  protected void removeComponentConstraints(ContainerInfo container, ComponentInfo component)
-      throws Exception {
-    m_constraints.remove(component);
-    super.removeComponentConstraints(container, component);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Context menu
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds {@link FormLayoutInfo} actions into context menu.
-   */
-  private void addContextMenuActions(ObjectInfo object, IMenuManager manager) throws Exception {
-    if (object == getContainer()) {
-      manager.appendToGroup(
-          IContextMenuConstants.GROUP_TOP,
-          new EditDimensionsAction(ModelMessages.FormLayoutInfo_editColumns, true));
-      manager.appendToGroup(
-          IContextMenuConstants.GROUP_TOP,
-          new EditDimensionsAction(ModelMessages.FormLayoutInfo_editRows, false));
-    }
-    if (object instanceof ComponentInfo && object.getParent() == getContainer()) {
-      ComponentInfo component = (ComponentInfo) object;
-      CellConstraintsSupport support = getConstraints(component);
-      support.addContextMenu(manager);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Context menu: EditDimensionsAction
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final class EditDimensionsAction extends Action {
-    private final boolean m_horizontal;
-
-    public EditDimensionsAction(String text, boolean horizontal) {
-      super(text);
-      m_horizontal = horizontal;
-    }
-
-    @Override
-    public void run() {
-      Shell shell = DesignerPlugin.getShell();
-      if (m_horizontal) {
-        new ColumnsDialog(shell, FormLayoutInfo.this).open();
-      } else {
-        new RowsDialog(shell, FormLayoutInfo.this).open();
-      }
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Properties
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected List<Property> getPropertyList() throws Exception {
-    List<Property> properties = super.getPropertyList();
-    properties.add(new DimensionsProperty(this, true));
-    properties.add(new DimensionsProperty(this, false));
-    return properties;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // CellConstraintsSupport access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final Map<ComponentInfo, CellConstraintsSupport> m_constraints = Maps.newHashMap();
-
-  /**
-   * @return the {@link CellConstraintsSupport} for given {@link ComponentInfo}.
-   */
-  public static CellConstraintsSupport getConstraints(ComponentInfo component) {
-    ContainerInfo container = (ContainerInfo) component.getParent();
-    Assert.isTrue(container.getChildrenComponents().contains(component));
-    Assert.instanceOf(FormLayoutInfo.class, container.getLayout());
-    //
-    FormLayoutInfo layout = (FormLayoutInfo) container.getLayout();
-    CellConstraintsSupport support = layout.m_constraints.get(component);
-    if (support == null) {
-      support = new CellConstraintsSupport(layout, component);
-      layout.m_constraints.put(component, support);
-    }
-    return support;
-  }
-
-  @Override
-  public void onSet() throws Exception {
-    super.onSet();
-    FormLayoutConverter.convert(getContainer(), this);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access columns/rows
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link List} of {@link FormColumnInfo}.
-   */
-  public List<FormColumnInfo> getColumns() {
-    return m_columns;
-  }
-
-  /**
-   * @return the {@link List} of {@link FormRowInfo}.
-   */
-  public List<FormRowInfo> getRows() {
-    return m_rows;
-  }
-
-  /**
-   * Sets the new {@link List} of {@link FormColumnInfo}.
-   */
-  public void setColumns(List<FormColumnInfo> columns) throws Exception {
-    m_columns.clear();
-    m_columns.addAll(columns);
-    writeDimensions();
-  }
-
-  /**
-   * Sets the new {@link List} of {@link FormRowInfo}.
-   */
-  public void setRows(List<FormRowInfo> rows) throws Exception {
-    m_rows.clear();
-    m_rows.addAll(rows);
-    writeDimensions();
-  }
-
-  /**
-   * @return the {@link Dimension} with minimal count of columns/rows required for this
-   *         {@link FormLayoutInfo}.
-   */
-  public Dimension getMinimumSize() {
-    final Dimension size = new Dimension(0, 0);
-    ExecutionUtils.runLog(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        visitComponents(new FormComponentVisitor() {
-          @Override
-          public void visit(ComponentInfo component, CellConstraintsSupport cell) throws Exception {
-            size.width = Math.max(size.width, cell.x + cell.width - 1);
-            size.height = Math.max(size.height, cell.y + cell.height - 1);
-          }
-        });
-      }
-    });
-    return size;
-  }
-
-  /**
-   * @return the count of components that begin in each column.
-   */
-  public int[] getColumnComponentsCounts() throws Exception {
-    final int[] counts = new int[m_columns.size()];
-    ExecutionUtils.runRethrow(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        visitComponents(new FormComponentVisitor() {
-          @Override
-          public void visit(ComponentInfo component, CellConstraintsSupport cell) throws Exception {
-            counts[cell.x - 1]++;
-          }
-        });
-      }
-    });
-    return counts;
-  }
-
-  /**
-   * @return the count of components that begin in each row.
-   */
-  public int[] getRowComponentsCounts() throws Exception {
-    final int[] counts = new int[m_rows.size()];
-    ExecutionUtils.runRethrow(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        visitComponents(new FormComponentVisitor() {
-          @Override
-          public void visit(ComponentInfo component, CellConstraintsSupport cell) throws Exception {
-            counts[cell.y - 1]++;
-          }
-        });
-      }
-    });
-    return counts;
-  }
-
-  /**
-   * If there are components that span multiple columns/rows, and no other "real" components in
-   * these columns/rows, then removes these excess columns/rows.
-   */
-  public void normalizeSpanning() throws Exception {
-    boolean columnRowDeleted = true;
-    while (columnRowDeleted) {
-      columnRowDeleted = false;
-      // prepare filled columns/rows
-      final boolean[] filledColumns = new boolean[m_columns.size()];
-      final boolean[] filledRows = new boolean[m_rows.size()];
-      visitComponents(new FormComponentVisitor() {
-        @Override
-        public void visit(ComponentInfo bean, CellConstraintsSupport constraints) throws Exception {
-          filledColumns[constraints.x - 1] = true;
-          filledRows[constraints.y - 1] = true;
-        }
-      });
-      // remove empty columns
-      for (int column = filledColumns.length - 1; column >= 0; column--) {
-        if (!filledColumns[column] && !m_columns.get(column).isGap()) {
-          deleteColumn(column);
-          columnRowDeleted = true;
-          break;
-        }
-      }
-      // remove empty rows
-      for (int row = filledRows.length - 1; row >= 0; row--) {
-        if (!filledRows[row] && !m_rows.get(row).isGap()) {
-          deleteRow(row);
-          columnRowDeleted = true;
-          break;
-        }
-      }
-    }
-    // write dimensions
-    writeDimensions();
-  }
-
-  /**
-   * @return <code>true</code> if dimensions of this layout can be changed. We can change them only
-   *         if we created layout using constructor.
-   */
-  public boolean canChangeDimensions() {
-    return getCreationSupport() instanceof ConstructorCreationSupport;
-  }
-
-  /**
-   * Writes columns/rows to the source.
-   */
-  public void writeDimensions() throws Exception {
-    // write constructor
-    {
-      ConstructorCreationSupport creationSupport =
-          (ConstructorCreationSupport) getCreationSupport();
-      ClassInstanceCreation creation = creationSupport.getCreation();
-      //
-      String[] columnsSource =
-          getDimenstionsSource(m_columns, "com.jgoodies.forms.layout.ColumnSpec");
-      String[] rowsSource = getDimenstionsSource(m_rows, "com.jgoodies.forms.layout.RowSpec");
-      columnsSource[columnsSource.length - 1] += ",";
-      //
-      getEditor().replaceCreationArguments(
-          creation,
-          ImmutableList.copyOf(CodeUtils.join(columnsSource, rowsSource)));
-    }
-    // write groups
-    writeDimensionsGroups("setColumnGroups", m_columns, m_columnGroups);
-    writeDimensionsGroups("setRowGroups", m_rows, m_rowGroups);
-  }
-
-  /**
-   * @return the array of source lines for given {@link List} of {@link FormDimensionInfo}.
-   */
-  private static String[] getDimenstionsSource(List<? extends FormDimensionInfo> dimensions,
-      String typeSource) throws Exception {
-    if (dimensions.isEmpty()) {
-      return new String[]{"\tnew " + typeSource + "[] {}"};
-    } else {
-      String[] lines = new String[1 + dimensions.size()];
-      lines[0] = "\tnew " + typeSource + "[] {";
-      for (int i = 0; i < dimensions.size(); i++) {
-        FormDimensionInfo dimension = dimensions.get(i);
-        lines[1 + i] = "\t\t" + dimension.getSource() + ",";
-      }
-      //
-      lines[lines.length - 1] += "}";
-      return lines;
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Groups
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the index of group to which belongs given {@link FormDimensionInfo} or <code>-1</code>
-   *         if it does not belong to any group.
-   */
-  public int getDimensionGroupIndex(FormDimensionInfo dimension) {
-    if (dimension instanceof FormColumnInfo) {
-      FormColumnInfo column = (FormColumnInfo) dimension;
-      return m_columnGroups.indexOf(getColumnGroup(column));
-    } else {
-      FormRowInfo row = (FormRowInfo) dimension;
-      return m_rowGroups.indexOf(getRowGroup(row));
-    }
-  }
-
-  /**
-   * @return the {@link List} of {@link FormColumnInfo} that belong to same group or
-   *         <code>null</code> if given {@link FormColumnInfo} does not belong to any group.
-   */
-  public List<FormColumnInfo> getColumnGroup(FormColumnInfo column) {
-    return getDimensionGroup(column, m_columnGroups);
-  }
-
-  /**
-   * @return the {@link List} of {@link FormRowInfo} that belong to same group or <code>null</code>
-   *         if given {@link FormRowInfo} does not belong to any group.
-   */
-  public List<FormRowInfo> getRowGroup(FormRowInfo row) {
-    return getDimensionGroup(row, m_rowGroups);
-  }
-
-  /**
-   * @return the {@link List} of {@link FormDimensionInfo} that belong to same group or
-   *         <code>null</code> if given {@link FormDimensionInfo} does not belong to any group.
-   */
-  private static <T extends FormDimensionInfo> List<T> getDimensionGroup(T dimension,
-      List<List<T>> groups) {
-    for (List<T> group : groups) {
-      if (group.contains(dimension)) {
-        return group;
-      }
-    }
-    // no group
-    return null;
-  }
-
-  /**
-   * Converts "int[][]" groups into {@link FormDimensionInfo}'s groups.
-   */
-  private static <T extends FormDimensionInfo> void fillDimensionGroups(int[][] intGroups,
-      List<T> dimensions,
-      List<List<T>> groups) {
-    for (int groupIndex = 0; groupIndex < intGroups.length; groupIndex++) {
-      int[] intGroup = intGroups[groupIndex];
-      // create group
-      List<T> group = Lists.newArrayList();
-      groups.add(group);
-      // fill group
-      for (int groupElementIndex = 0; groupElementIndex < intGroup.length; groupElementIndex++) {
-        int dimensionIndex = intGroup[groupElementIndex];
-        T dimension = dimensions.get(dimensionIndex - 1);
-        group.add(dimension);
-      }
-    }
-  }
-
-  /**
-   * Adds invocation of "set*Groups(new int[][] {...})" for given {@link FormDimensionInfo}'s and
-   * groups.
-   */
-  private <T extends FormDimensionInfo> void writeDimensionsGroups(String methodName,
-      List<T> dimensions,
-      List<List<T>> groups) throws Exception {
-    // clean up groups
-    for (Iterator<List<T>> I = groups.iterator(); I.hasNext();) {
-      List<T> group = I.next();
-      // remove all "dangling" dimensions
-      for (Iterator<T> J = group.iterator(); J.hasNext();) {
-        T dimensionInGroup = J.next();
-        if (!dimensions.contains(dimensionInGroup)) {
-          J.remove();
-        }
-      }
-      // remove empty group or group with single dimension
-      if (group.size() < 2) {
-        I.remove();
-      }
-    }
-    // prepare "set*Groups" invocation
-    String methodSignature = methodName + "(int[][])";
-    MethodInvocation invocation = getMethodInvocation(methodSignature);
-    // update "set*Groups"
-    if (!groups.isEmpty()) {
-      String groupsSource = "new int[][]{";
-      for (ListIterator<List<T>> I = groups.listIterator(); I.hasNext();) {
-        List<T> group = I.next();
-        // open array
-        if (I.previousIndex() != 0) {
-          groupsSource += ", ";
-        }
-        groupsSource += "new int[]{";
-        // add separate dimensions
-        for (ListIterator<T> J = group.listIterator(); J.hasNext();) {
-          FormDimensionInfo dimensionInGroup = J.next();
-          if (J.previousIndex() != 0) {
-            groupsSource += ", ";
-          }
-          groupsSource += 1 + dimensions.indexOf(dimensionInGroup);
-        }
-        // close array
-        groupsSource += "}";
-      }
-      groupsSource += "}";
-      //
-      if (invocation != null) {
-        Expression groupsExpression = (Expression) invocation.arguments().get(0);
-        getEditor().replaceExpression(groupsExpression, groupsSource);
-      } else {
-        addMethodInvocation(methodSignature, groupsSource);
-      }
-    } else if (invocation != null) {
-      getEditor().removeEnclosingStatement(invocation);
-    }
-  }
-
-  /**
-   * Un-groups given {@link FormColumnInfo}'s.
-   */
-  public void unGroupColumns(List<FormColumnInfo> columns) throws Exception {
-    unGroupDimensions(columns, m_columnGroups);
-    writeDimensionsGroups("setColumnGroups", m_columns, m_columnGroups);
-  }
-
-  /**
-   * Un-groups given {@link FormRowInfo}'s.
-   */
-  public void unGroupRows(List<FormRowInfo> rows) throws Exception {
-    unGroupDimensions(rows, m_rowGroups);
-    writeDimensionsGroups("setRowGroups", m_rows, m_rowGroups);
-  }
-
-  /**
-   * Un-groups given {@link FormDimensionInfo}'s.
-   */
-  private static <T extends FormDimensionInfo> void unGroupDimensions(List<T> dimensions,
-      List<List<T>> groups) throws Exception {
-    for (List<T> group : groups) {
-      group.removeAll(dimensions);
-    }
-  }
-
-  /**
-   * Groups given {@link FormColumnInfo}'s.
-   */
-  public void groupColumns(List<FormColumnInfo> columns) throws Exception {
-    groupDimensions(columns, m_columnGroups);
-    writeDimensionsGroups("setColumnGroups", m_columns, m_columnGroups);
-  }
-
-  /**
-   * Groups given {@link FormRowInfo}'s.
-   */
-  public void groupRows(List<FormRowInfo> rows) throws Exception {
-    groupDimensions(rows, m_rowGroups);
-    writeDimensionsGroups("setRowGroups", m_rows, m_rowGroups);
-  }
-
-  /**
-   * Groups given {@link FormDimensionInfo}'s.
-   */
-  private static <T extends FormDimensionInfo> void groupDimensions(List<T> dimensions,
-      List<List<T>> groups) {
-    // remove gaps
-    for (Iterator<T> I = dimensions.iterator(); I.hasNext();) {
-      T dimension = I.next();
-      if (dimension.isGap()) {
-        I.remove();
-      }
-    }
-    // check that at least two dimensions remain
-    if (dimensions.size() < 2) {
-      return;
-    }
-    // check there is one and only one target group
-    List<T> targetGroup = null;
-    for (List<T> group : groups) {
-      for (T dimension : dimensions) {
-        if (group.contains(dimension)) {
-          if (targetGroup == null) {
-            targetGroup = group;
-          } else if (targetGroup != group) {
-            // more than one group selected, ignore
-            return;
-          }
-        }
-      }
-    }
-    // if there are no existing group, create new one
-    if (targetGroup == null) {
-      targetGroup = Lists.newArrayList();
-      groups.add(targetGroup);
-    }
-    // add all dimensions into group
-    for (T dimension : dimensions) {
-      if (!targetGroup.contains(dimension)) {
-        targetGroup.add(dimension);
-      }
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Column commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds new {@link FormColumnInfo} and possible gap into target index.
-   */
-  public void insertColumn(int targetIndex) throws Exception {
-    boolean targetLast = targetIndex == m_columns.size();
-    boolean targetGap = !targetLast && m_columns.get(targetIndex).isGap();
-    //
-    moveComponentsForInsert(1 + targetIndex, true, -1, false);
-    moveComponentsForInsert(1 + targetIndex, true, -1, false);
-    if (targetGap) {
-      m_columns.add(targetIndex, new FormColumnInfo(FormSpecs.RELATED_GAP_COLSPEC));
-      m_columns.add(targetIndex + 1, new FormColumnInfo(FormSpecs.DEFAULT_COLSPEC));
-    } else if (targetLast) {
-      if (!m_columns.isEmpty() && !m_columns.get(targetIndex - 1).isGap()) {
-        m_columns.add(targetIndex++, new FormColumnInfo(FormSpecs.RELATED_GAP_COLSPEC));
-      }
-      m_columns.add(targetIndex, new FormColumnInfo(FormSpecs.DEFAULT_COLSPEC));
-    } else {
-      m_columns.add(targetIndex, new FormColumnInfo(FormSpecs.DEFAULT_COLSPEC));
-      m_columns.add(targetIndex + 1, new FormColumnInfo(FormSpecs.RELATED_GAP_COLSPEC));
-    }
-    writeDimensions();
-  }
-
-  /**
-   * Deletes the {@link FormColumnInfo} with given index.
-   */
-  public void deleteColumn(int index) throws Exception {
-    // prepare context information
-    boolean isFirst = index == 0;
-    boolean isLast = index == m_columns.size() - 1;
-    boolean isGap = m_columns.get(index).isGap();
-    boolean isPrevGap = !isFirst && m_columns.get(index - 1).isGap();
-    boolean isNextGap = !isLast && m_columns.get(index + 1).isGap();
-    // do delete
-    if (isGap) {
-      deleteSingleColumn(index); // gap
-    } else {
-      deleteSingleColumn(index); // column
-      if (isPrevGap) {
-        deleteSingleColumn(index - 1); // gap
-      } else if (isNextGap) {
-        deleteSingleColumn(index); // gap
-      }
-    }
-    writeDimensions();
-  }
-
-  /**
-   * Deletes single {@link FormColumnInfo} with given index.
-   */
-  private void deleteSingleColumn(final int index) throws Exception {
-    visitComponents(new FormComponentVisitor() {
-      @Override
-      public void visit(ComponentInfo component, CellConstraintsSupport cell) throws Exception {
-        if (cell.x == 1 + index) {
-          component.delete();
-        } else if (cell.x > 1 + index) {
-          cell.x--;
-        } else if (cell.x + cell.width > 1 + index) {
-          cell.width--;
-        }
-        cell.write();
-      }
-    });
-    m_columns.remove(index);
-  }
-
-  /**
-   * Deletes the {@link ComponentInfo}'s that located in {@link FormColumnInfo} with given index.
-   */
-  public void deleteColumnContents(final int index) throws Exception {
-    visitComponents(new FormComponentVisitor() {
-      @Override
-      public void visit(ComponentInfo component, CellConstraintsSupport cell) throws Exception {
-        if (cell.x == 1 + index) {
-          component.delete();
-        }
-      }
-    });
-  }
-
-  /**
-   * Splits the {@link FormColumnInfo} with given index, i.e. adds duplicate of this
-   * {@link FormColumnInfo}.
-   */
-  public void splitColumn(final int index) throws Exception {
-    FormColumnInfo column = m_columns.get(index);
-    m_columns.add(index + 1, new FormColumnInfo(FormSpecs.RELATED_GAP_COLSPEC));
-    m_columns.add(index + 2, column.copy());
-    writeDimensions();
-    // update constraints
-    visitComponents(new FormComponentVisitor() {
-      @Override
-      public void visit(ComponentInfo component, CellConstraintsSupport cell) throws Exception {
-        if (cell.x > 1 + index) {
-          cell.x += 2;
-        } else if (cell.x + cell.width > 1 + index) {
-          cell.width += 2;
-        }
-        cell.write();
-      }
-    });
-  }
-
-  /**
-   * Moves {@link FormColumnInfo} at given index (and possible its gap) into target index.
-   */
-  public void command_MOVE_COLUMN(int index, int targetIndex) throws Exception {
-    // prepare context information for old position
-    boolean isFirst = index == 0;
-    boolean isLast = index == m_columns.size() - 1;
-    boolean isGap = m_columns.get(index).isGap();
-    boolean isPrevGap = !isFirst && m_columns.get(index - 1).isGap();
-    boolean isNextGap = !isLast && m_columns.get(index + 1).isGap();
-    // prepare context information for new position
-    boolean targetFirst = targetIndex == 0;
-    boolean targetLast = targetIndex == m_columns.size();
-    boolean targetGap = !targetLast && m_columns.get(targetIndex).isGap();
-    //
-    if (index < targetIndex) {
-      if (isGap) {
-        moveSingleColumn(index, targetIndex); // gap
-      } else if (isPrevGap) {
-        moveSingleColumn(index - 1, targetIndex); // gap
-        moveSingleColumn(index - 1, targetIndex); // column
-      } else if (isFirst && isNextGap) {
-        if (targetLast) {
-          moveSingleColumn(1, targetIndex); // gap
-          moveSingleColumn(0, targetIndex); // column
-        } else {
-          if (targetGap) {
-            targetIndex++;
-          }
-          moveSingleColumn(0, targetIndex); // column
-          moveSingleColumn(0, targetIndex); // gap
-        }
-      } else {
-        moveSingleColumn(index, targetIndex); // column
-      }
-    } else {
-      if (isGap) {
-        moveSingleColumn(index, targetIndex); // gap
-      } else if (isPrevGap && targetFirst && !targetGap) {
-        moveSingleColumn(index, 0); // column
-        moveSingleColumn(index, 1); // gap
-      } else if (isPrevGap) {
-        moveSingleColumn(index, targetIndex); // column
-        moveSingleColumn(index, targetIndex); // gap
-      } else {
-        moveSingleColumn(index, targetIndex); // column
-      }
-    }
-    //
-    writeDimensions();
-  }
-
-  /**
-   * Moves single {@link FormColumnInfo}.
-   */
-  private void moveSingleColumn(final int index, final int targetIndex) throws Exception {
-    FormColumnInfo column = m_columns.remove(index);
-    if (index < targetIndex) {
-      // add column
-      m_columns.add(targetIndex - 1, column);
-      // change constraints
-      visitComponents(new FormComponentVisitor() {
-        @Override
-        public void visit(ComponentInfo bean, CellConstraintsSupport constraints) throws Exception {
-          int x = constraints.x;
-          int w = constraints.width;
-          if (x < 1 + index) {
-            // if component contains source and doesn't contain target, decrease size
-            if (x + w - 1 >= 1 + index && x + w - 1 < 1 + targetIndex) {
-              constraints.width = w - 1;
-            }
-          } else if (x == 1 + index) {
-            constraints.x = targetIndex;
-            constraints.width = 1;
-          } else if (x > 1 + index && x < 1 + targetIndex) {
-            constraints.x = x - 1;
-            // if component contains target, increase size
-            if (x + w - 1 >= 1 + targetIndex) {
-              constraints.width = w + 1;
-            }
-          } else if (x >= 1 + targetIndex) {
-          }
-          constraints.write();
-        }
-      });
-    } else {
-      // add column
-      m_columns.add(targetIndex, column);
-      // change constraints
-      visitComponents(new FormComponentVisitor() {
-        @Override
-        public void visit(ComponentInfo bean, CellConstraintsSupport constraints) throws Exception {
-          int x = constraints.x;
-          int w = constraints.width;
-          if (x < 1 + targetIndex) {
-            // if component doesn't contains source and contains target, increase size
-            if (x + w - 1 >= 1 + targetIndex && x + w - 1 < 1 + index) {
-              constraints.width = w + 1;
-            }
-          } else if (x < 1 + index) {
-            constraints.x = x + 1;
-            // if component contains source, decrease size
-            if (x + w - 1 >= 1 + index) {
-              constraints.width = w - 1;
-            }
-          } else if (x == 1 + index) {
-            constraints.x = 1 + targetIndex;
-            constraints.width = 1;
-          } else if (x > 1 + index) {
-          }
-          constraints.write();
-        }
-      });
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Row commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds new {@link FormRowInfo} and possible gap into target index.
-   */
-  public void insertRow(int targetIndex) throws Exception {
-    boolean targetLast = targetIndex == m_rows.size();
-    boolean targetGap = !targetLast && m_rows.get(targetIndex).isGap();
-    //
-    moveComponentsForInsert(-1, false, 1 + targetIndex, true);
-    moveComponentsForInsert(-1, false, 1 + targetIndex, true);
-    if (targetGap) {
-      m_rows.add(targetIndex, new FormRowInfo(FormSpecs.RELATED_GAP_ROWSPEC));
-      m_rows.add(targetIndex + 1, new FormRowInfo(FormSpecs.DEFAULT_ROWSPEC));
-    } else if (targetLast) {
-      if (!m_rows.isEmpty() && !m_rows.get(targetIndex - 1).isGap()) {
-        m_rows.add(targetIndex++, new FormRowInfo(FormSpecs.RELATED_GAP_ROWSPEC));
-      }
-      m_rows.add(targetIndex, new FormRowInfo(FormSpecs.DEFAULT_ROWSPEC));
-    } else {
-      m_rows.add(targetIndex, new FormRowInfo(FormSpecs.DEFAULT_ROWSPEC));
-      m_rows.add(targetIndex + 1, new FormRowInfo(FormSpecs.RELATED_GAP_ROWSPEC));
-    }
-    writeDimensions();
-  }
-
-  /**
-   * Deletes the {@link FormRowInfo} with given index.
-   */
-  public void deleteRow(int index) throws Exception {
-    // prepare context information
-    boolean isFirst = index == 0;
-    boolean isLast = index == m_rows.size() - 1;
-    boolean isGap = m_rows.get(index).isGap();
-    boolean isPrevGap = !isFirst && m_rows.get(index - 1).isGap();
-    boolean isNextGap = !isLast && m_rows.get(index + 1).isGap();
-    // do delete
-    if (isGap) {
-      deleteSingleRow(index); // gap
-    } else {
-      deleteSingleRow(index); // row
-      if (isPrevGap) {
-        deleteSingleRow(index - 1); // gap
-      } else if (isNextGap) {
-        deleteSingleRow(index); // gap
-      }
-    }
-    writeDimensions();
-  }
-
-  /**
-   * Deletes single {@link FormRowInfo} with given index.
-   */
-  private void deleteSingleRow(final int index) throws Exception {
-    visitComponents(new FormComponentVisitor() {
-      @Override
-      public void visit(ComponentInfo component, CellConstraintsSupport cell) throws Exception {
-        if (cell.y == 1 + index) {
-          component.delete();
-        } else if (cell.y > 1 + index) {
-          cell.y--;
-        } else if (cell.y + cell.height > 1 + index) {
-          cell.height--;
-        }
-        cell.write();
-      }
-    });
-    m_rows.remove(index);
-  }
-
-  /**
-   * Deletes the {@link ComponentInfo}'s that located in {@link FormRowInfo} with given index.
-   */
-  public void deleteRowContents(final int index) throws Exception {
-    visitComponents(new FormComponentVisitor() {
-      @Override
-      public void visit(ComponentInfo component, CellConstraintsSupport cell) throws Exception {
-        if (cell.y == 1 + index) {
-          component.delete();
-        }
-      }
-    });
-  }
-
-  /**
-   * Splits the {@link FormRowInfo} with given index, i.e. adds duplicate of this
-   * {@link FormRowInfo}.
-   */
-  public void splitRow(final int index) throws Exception {
-    FormRowInfo row = m_rows.get(index);
-    m_rows.add(index + 1, new FormRowInfo(FormSpecs.RELATED_GAP_ROWSPEC));
-    m_rows.add(index + 2, row.copy());
-    writeDimensions();
-    // update constraints
-    visitComponents(new FormComponentVisitor() {
-      @Override
-      public void visit(ComponentInfo component, CellConstraintsSupport cell) throws Exception {
-        if (cell.y > 1 + index) {
-          cell.y += 2;
-        } else if (cell.y + cell.height > 1 + index) {
-          cell.height += 2;
-        }
-        cell.write();
-      }
-    });
-  }
-
-  /**
-   * Moves {@link FormRowInfo} at given index (and possible its gap) into target index.
-   */
-  public void command_MOVE_ROW(int index, int targetIndex) throws Exception {
-    // prepare context information for old position
-    boolean isFirst = index == 0;
-    boolean isLast = index == m_rows.size() - 1;
-    boolean isGap = m_rows.get(index).isGap();
-    boolean isPrevGap = !isFirst && m_rows.get(index - 1).isGap();
-    boolean isNextGap = !isLast && m_rows.get(index + 1).isGap();
-    // prepare context information for new position
-    boolean targetFirst = targetIndex == 0;
-    boolean targetLast = targetIndex == m_rows.size();
-    boolean targetGap = !targetLast && m_rows.get(targetIndex).isGap();
-    //
-    if (index < targetIndex) {
-      if (isGap) {
-        moveSingleRow(index, targetIndex); // gap
-      } else if (isPrevGap) {
-        moveSingleRow(index - 1, targetIndex); // gap
-        moveSingleRow(index - 1, targetIndex); // row
-      } else if (isFirst && isNextGap) {
-        if (targetLast) {
-          moveSingleRow(1, targetIndex); // gap
-          moveSingleRow(0, targetIndex); // row
-        } else {
-          if (targetGap) {
-            targetIndex++;
-          }
-          moveSingleRow(0, targetIndex); // row
-          moveSingleRow(0, targetIndex); // gap
-        }
-      } else {
-        moveSingleRow(index, targetIndex); // row
-      }
-    } else {
-      if (isGap) {
-        moveSingleRow(index, targetIndex); // gap
-      } else if (isPrevGap && targetFirst && !targetGap) {
-        moveSingleRow(index, 0); // row
-        moveSingleRow(index, 1); // gap
-      } else if (isPrevGap) {
-        moveSingleRow(index, targetIndex); // row
-        moveSingleRow(index, targetIndex); // gap
-      } else {
-        moveSingleRow(index, targetIndex); // row
-      }
-    }
-    //
-    writeDimensions();
-  }
-
-  /**
-   * Moves single {@link FormRowInfo}.
-   */
-  private void moveSingleRow(final int index, final int targetIndex) throws Exception {
-    FormRowInfo row = m_rows.remove(index);
-    if (index < targetIndex) {
-      // add row
-      m_rows.add(targetIndex - 1, row);
-      // change constraints
-      visitComponents(new FormComponentVisitor() {
-        @Override
-        public void visit(ComponentInfo bean, CellConstraintsSupport constraints) throws Exception {
-          int y = constraints.y;
-          int h = constraints.height;
-          if (y < 1 + index) {
-            // if component contains source and doesn't contain target, decrease size
-            if (y + h - 1 >= 1 + index && y + h - 1 < 1 + targetIndex) {
-              constraints.height = h - 1;
-            }
-          } else if (y == 1 + index) {
-            constraints.y = targetIndex;
-            constraints.height = 1;
-          } else if (y > 1 + index && y < 1 + targetIndex) {
-            constraints.y = y - 1;
-            // if component contains target, increase size
-            if (y + h - 1 >= 1 + targetIndex) {
-              constraints.height = h + 1;
-            }
-          } else if (y >= 1 + targetIndex) {
-          }
-          constraints.write();
-        }
-      });
-    } else {
-      // add row
-      m_rows.add(targetIndex, row);
-      // change constraints
-      visitComponents(new FormComponentVisitor() {
-        @Override
-        public void visit(ComponentInfo bean, CellConstraintsSupport constraints) throws Exception {
-          int y = constraints.y;
-          int h = constraints.height;
-          if (y < 1 + targetIndex) {
-            // if component doesn't contains source and contains target, increase size
-            if (y + h - 1 >= 1 + targetIndex && y + h - 1 < 1 + index) {
-              constraints.height = h + 1;
-            }
-          } else if (y < 1 + index) {
-            constraints.y = y + 1;
-            // if component contains source, decrease size
-            if (y + h - 1 >= 1 + index) {
-              constraints.height = h - 1;
-            }
-          } else if (y == 1 + index) {
-            constraints.y = 1 + targetIndex;
-            constraints.height = 1;
-          } else if (y > 1 + index) {
-          }
-          constraints.write();
-        }
-      });
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Creates new {@link ComponentInfo} in given cell.
-   *
-   * @param newComponent
-   *          the new {@link ComponentInfo} to create.
-   * @param column
-   *          the column in {@link FormLayout} terms (1 based).
-   * @param row
-   *          the row in {@link FormLayout} terms (1 based).
-   */
-  public void command_CREATE(ComponentInfo newComponent,
-      int column,
-      boolean insertColumn,
-      int row,
-      boolean insertRow) throws Exception {
-    Point cell = prepareCell(column, insertColumn, row, insertRow);
-    // do add
-    ComponentInfo nextComponent = getReference(column, row, null);
-    add(newComponent, "\"" + cell.x + ", " + cell.y + "\"", nextComponent);
-    {
-      CellConstraintsSupport constraints = getConstraints(newComponent);
-      constraints.x = cell.x;
-      constraints.y = cell.y;
-    }
-    doAutomaticAlignment(newComponent);
-  }
-
-  /**
-   * Moves existing {@link ComponentInfo} into new cell.
-   */
-  public void command_MOVE(ComponentInfo component,
-      int column,
-      boolean insertColumn,
-      int row,
-      boolean insertRow) throws Exception {
-    Point cell = prepareCell(column, insertColumn, row, insertRow);
-    // move in components
-    {
-      ComponentInfo nextComponent = getReference(column, row, component);
-      move(component, null, nextComponent);
-    }
-    // move in grid
-    {
-      CellConstraintsSupport constraints = getConstraints(component);
-      constraints.x = cell.x;
-      constraints.y = cell.y;
-      constraints.width = 1;
-      constraints.height = 1;
-      constraints.write();
-    }
-  }
-
-  /**
-   * Adds {@link ComponentInfo} from other parent into cell.
-   */
-  public void command_ADD(ComponentInfo component,
-      int column,
-      boolean insertColumn,
-      int row,
-      boolean insertRow) throws Exception {
-    Point cell = prepareCell(column, insertColumn, row, insertRow);
-    // move in components
-    {
-      ComponentInfo nextComponent = getReference(column, row, component);
-      move(component, "\"" + cell.x + ", " + cell.y + "\"", nextComponent);
-    }
-    // move in grid
-    {
-      CellConstraintsSupport constraints = getConstraints(component);
-      constraints.x = cell.x;
-      constraints.y = cell.y;
-      constraints.write();
-    }
-  }
-
-  /**
-   * @return the {@link ComponentInfo} that should be used as reference of adding into given cell.
-   *
-   * @param exclude
-   *          the {@link ComponentInfo} that should not be checked, for example because we move it
-   *          now.
-   */
-  private ComponentInfo getReference(int column, int row, ComponentInfo exclude) throws Exception {
-    for (ComponentInfo component : getContainer().getChildrenComponents()) {
-      if (component != exclude) {
-        CellConstraintsSupport constraints = getConstraints(component);
-        if (constraints.y > row || constraints.y == row && constraints.x >= column) {
-          return component;
-        }
-      }
-    }
-    // no reference
-    return null;
-  }
-
-  /**
-   * Prepares cell with given column/row - inserts columns/rows if necessary.
-   */
-  private Point prepareCell(int column, boolean insertColumn, int row, boolean insertRow)
-      throws Exception {
-    boolean writeDimensions = false;
-    if (insertColumn || insertRow) {
-      // move existing components
-      {
-        moveComponentsForInsert(column, insertColumn, row, insertRow);
-        moveComponentsForInsert(column, insertColumn, row, insertRow);
-      }
-      // insert gap and empty column/row
-      if (insertColumn) {
-        m_columns.add(column - 1, new FormColumnInfo(FormSpecs.RELATED_GAP_COLSPEC));
-        m_columns.add(column - 1 + 1, new FormColumnInfo(FormSpecs.DEFAULT_COLSPEC));
-        column += 1;
-      }
-      if (insertRow) {
-        m_rows.add(row - 1, new FormRowInfo(FormSpecs.RELATED_GAP_ROWSPEC));
-        m_rows.add(row - 1 + 1, new FormRowInfo(FormSpecs.DEFAULT_ROWSPEC));
-        row += 1;
-      }
-      // write dimensions
-      writeDimensions = true;
-    }
-    // add columns
-    {
-      int addColumns = column - m_columns.size();
-      if (addColumns > 0) {
-        Assert.isTrue(
-            addColumns % 2 == 0,
-            MessageFormat.format(ModelMessages.FormLayoutInfo_evenDiffNumColumns, addColumns));
-        for (int i = 0; i < addColumns / 2; i++) {
-          m_columns.add(new FormColumnInfo(FormSpecs.RELATED_GAP_COLSPEC));
-          m_columns.add(new FormColumnInfo(FormSpecs.DEFAULT_COLSPEC));
-        }
-        writeDimensions = true;
-      }
-    }
-    // add rows
-    {
-      int addRows = row - m_rows.size();
-      if (addRows > 0) {
-        Assert.isTrue(
-            addRows % 2 == 0,
-            MessageFormat.format(ModelMessages.FormLayoutInfo_evenDiffNumRows, addRows));
-        for (int i = 0; i < addRows / 2; i++) {
-          m_rows.add(new FormRowInfo(FormSpecs.RELATED_GAP_ROWSPEC));
-          m_rows.add(new FormRowInfo(FormSpecs.DEFAULT_ROWSPEC));
-        }
-        writeDimensions = true;
-      }
-    }
-    // write dimensions
-    if (writeDimensions) {
-      writeDimensions();
-    }
-    // return new cell
-    return new Point(column, row);
-  }
-
-  /**
-   * Moves/resizes components constraints for inserting single column/row.
-   */
-  private void moveComponentsForInsert(final int column,
-      final boolean insertColumn,
-      final int row,
-      final boolean insertRow) throws Exception {
-    visitComponents(new FormComponentVisitor() {
-      @Override
-      public void visit(ComponentInfo component, CellConstraintsSupport cell) throws Exception {
-        if (insertColumn) {
-          if (cell.x >= column) {
-            cell.x++;
-          } else if (cell.x + cell.width > column) {
-            cell.width++;
-          }
-        }
-        if (insertRow) {
-          if (cell.y >= row) {
-            cell.y++;
-          } else if (cell.y + cell.height > row) {
-            cell.height++;
-          }
-        }
-        cell.write();
-      }
-    });
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Visiting
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Visitor for {@link ComponentInfo} and their {@link CellConstraintsSupport}.
-   */
-  private interface FormComponentVisitor {
-    void visit(ComponentInfo component, CellConstraintsSupport cell) throws Exception;
-  }
-
-  /**
-   * Visits all {@link ComponentInfo} of this {@link ContainerInfo}.
-   */
-  private void visitComponents(FormComponentVisitor visitor) throws Exception {
-    for (ComponentInfo component : getContainer().getChildrenComponents()) {
-      CellConstraintsSupport cell = getConstraints(component);
-      visitor.visit(component, cell);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Automatic alignment
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Performs automatic alignment, such as grab/fill for {@link JTextField} or {@link JTable}, right
-   * alignment for {@link JLabel}.
-   */
-  private void doAutomaticAlignment(ComponentInfo component) throws Exception {
-    final IPreferenceStore preferences = Activator.getDefault().getPreferenceStore();
-    GridAlignmentHelper.doAutomaticAlignment(component, new IAlignmentProcessor<ComponentInfo>() {
-      @Override
-      public boolean grabEnabled() {
-        return preferences.getBoolean(P_ENABLE_GRAB);
-      }
-
-      @Override
-      public boolean rightEnabled() {
-        return preferences.getBoolean(P_ENABLE_RIGHT_ALIGNMENT);
-      }
-
-      @Override
-      public ComponentInfo getComponentAtLeft(ComponentInfo component) {
-        CellConstraintsSupport constraints = getConstraints(component);
-        int x = constraints.x - 1;
-        if (x > 0 && m_columns.get(x - 1).isGap()) {
-          x--;
-        }
-        return getComponentAt(x, constraints.y);
-      }
-
-      @Override
-      public ComponentInfo getComponentAtRight(ComponentInfo component) {
-        CellConstraintsSupport constraints = getConstraints(component);
-        int x = constraints.x + 1;
-        if (x < m_columns.size() && m_columns.get(x - 1).isGap()) {
-          x++;
-        }
-        return getComponentAt(x, constraints.y);
-      }
-
-      @Override
-      public void setGrabFill(ComponentInfo component, boolean horizontal) throws Exception {
-        boolean canChangeDimensions = canChangeDimensions();
-        CellConstraintsSupport constraints = getConstraints(component);
-        if (horizontal) {
-          if (canChangeDimensions) {
-            getColumns().get(constraints.x - 1).setWeight(FormSpec.DEFAULT_GROW);
-          }
-          constraints.setAlignH(CellConstraints.FILL);
-        } else {
-          if (canChangeDimensions) {
-            getRows().get(constraints.y - 1).setWeight(FormSpec.DEFAULT_GROW);
-          }
-          constraints.setAlignV(CellConstraints.FILL);
-        }
-        if (canChangeDimensions) {
-          writeDimensions();
-        }
-        constraints.write();
-      }
-
-      @Override
-      public void setRightAlignment(ComponentInfo component) throws Exception {
-        CellConstraintsSupport constraints = getConstraints(component);
-        constraints.setAlignH(CellConstraints.RIGHT);
-        constraints.write();
-      }
-    });
-  }
-
-  /**
-   * @return the {@link ComponentInfo} with given top-left cell, may be <code>null</code>.
-   */
-  private ComponentInfo getComponentAt(int x, int y) {
-    for (ComponentInfo component : getContainer().getChildrenComponents()) {
-      CellConstraintsSupport constraints = getConstraints(component);
-      if (constraints.x == x && constraints.y == y) {
-        return component;
-      }
-    }
-    // no such component
-    return null;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final int DEFAULT_SIZE = 5;
-  private int m_defaultColumnSize;
-  private int m_gapColumnSize;
-  private int m_defaultRowSize;
-  private int m_gapRowSize;
-
-  @Override
-  public void refresh_dispose() throws Exception {
-    m_gridInfo = null;
-    super.refresh_dispose();
-  }
-
-  @Override
-  protected void refresh_afterCreate2() throws Exception {
-    super.refresh_afterCreate2();
-    FormLayout layout = (FormLayout) getObject();
-    Container container = getContainer().getContainer();
-    // prepare origins
-    int[] columnOrigins;
-    int[] rowOrigins;
-    {
-      com.jgoodies.forms.layout.FormLayout.LayoutInfo layoutInfo = layout.getLayoutInfo(container);
-      columnOrigins = layoutInfo.columnOrigins;
-      rowOrigins = layoutInfo.rowOrigins;
-    }
-    // initialize default sizes in pixels
-    {
-      DefaultUnitConverter converter = DefaultUnitConverter.getInstance();
-      //
-      m_defaultColumnSize = converter.millimeterAsPixel(DEFAULT_SIZE, container);
-      m_defaultRowSize = converter.millimeterAsPixel(DEFAULT_SIZE, container);
-      m_gapColumnSize =
-          new FormSizeInfo(FormSpecs.RELATED_GAP_COLSPEC.getSize(), true).getConstantSize().getAsPixels();
-      m_gapRowSize =
-          new FormSizeInfo(FormSpecs.RELATED_GAP_ROWSPEC.getSize(), false).getConstantSize().getAsPixels();
-    }
-    // set constant size for empty columns/rows
-    {
-      int columnCount = layout.getColumnCount();
-      int rowCount = layout.getRowCount();
-      // update columns
-      for (int column = 1; column <= columnCount; column++) {
-        ColumnSpec spec = layout.getColumnSpec(column);
-        if (columnOrigins[column] - columnOrigins[column - 1] == 0) {
-          spec = ColumnSpec.decode(DEFAULT_SIZE + "mm");
-          layout.setColumnSpec(column, spec);
-        }
-      }
-      // update rows
-      for (int row = 1; row <= rowCount; row++) {
-        RowSpec spec = layout.getRowSpec(row);
-        if (rowOrigins[row] - rowOrigins[row - 1] == 0) {
-          spec = RowSpec.decode(DEFAULT_SIZE + "mm");
-          layout.setRowSpec(row, spec);
-        }
-      }
-      // may be column/row specs were updated, force layout
-      container.doLayout();
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IGridInfo support
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private IGridInfo m_gridInfo;
-
-  /**
-   * @return the {@link IGridInfo} that describes this layout.
-   */
-  public IGridInfo getGridInfo() {
-    if (m_gridInfo == null) {
-      ExecutionUtils.runRethrow(new RunnableEx() {
-        @Override
-        public void run() throws Exception {
-          createGridInfo();
-        }
-      });
-    }
-    return m_gridInfo;
-  }
-
-  /**
-   * Initializes {@link #m_gridInfo}.
-   */
-  private void createGridInfo() throws Exception {
-    // prepare intervals
-    final Interval[] columnIntervals;
-    final Interval[] rowIntervals;
-    {
-      // prepare origins
-      int[] columnOrigins;
-      int[] rowOrigins;
-      {
-        FormLayout layout = (FormLayout) getObject();
-        Container container = getContainer().getContainer();
-        com.jgoodies.forms.layout.FormLayout.LayoutInfo layoutInfo =
-            layout.getLayoutInfo(container);
-        //
-        columnOrigins = layoutInfo.columnOrigins;
-        rowOrigins = layoutInfo.rowOrigins;
-      }
-      // convert origins into intervals
-      columnIntervals = getIntervalsForOrigins(columnOrigins);
-      rowIntervals = getIntervalsForOrigins(rowOrigins);
-    }
-    // prepare cells
-    final Map<ComponentInfo, Rectangle> componentToCells = Maps.newHashMap();
-    final Map<Point, ComponentInfo> occupiedCells = Maps.newHashMap();
-    visitComponents(new FormComponentVisitor() {
-      @Override
-      public void visit(ComponentInfo component, CellConstraintsSupport support) throws Exception {
-        Rectangle cells =
-            new Rectangle(support.x - 1, support.y - 1, support.width, support.height);
-        // fill map: ComponentInfo -> cells Rectangle
-        componentToCells.put(component, cells);
-        // fill occupied cells map
-        for (int x = cells.x; x < cells.right(); x++) {
-          for (int y = cells.y; y < cells.bottom(); y++) {
-            occupiedCells.put(new Point(x, y), component);
-          }
-        }
-      }
-    });
-    // create IGridInfo instance
-    m_gridInfo = new IGridInfo() {
-      ////////////////////////////////////////////////////////////////////////////
-      //
-      // Dimensions
-      //
-      ////////////////////////////////////////////////////////////////////////////
-      @Override
-      public int getColumnCount() {
-        return columnIntervals.length;
-      }
-
-      @Override
-      public int getRowCount() {
-        return rowIntervals.length;
-      }
-
-      ////////////////////////////////////////////////////////////////////////////
-      //
-      // Intervals
-      //
-      ////////////////////////////////////////////////////////////////////////////
-      @Override
-      public Interval[] getColumnIntervals() {
-        return columnIntervals;
-      }
-
-      @Override
-      public Interval[] getRowIntervals() {
-        return rowIntervals;
-      }
-
-      ////////////////////////////////////////////////////////////////////////////
-      //
-      // Cells
-      //
-      ////////////////////////////////////////////////////////////////////////////
-      @Override
-      public Rectangle getComponentCells(IAbstractComponentInfo component) {
-        Assert.instanceOf(ComponentInfo.class, component);
-        return componentToCells.get(component);
-      }
-
-      @Override
-      public Rectangle getCellsRectangle(Rectangle cells) {
-        int x = columnIntervals[cells.x].begin();
-        int y = rowIntervals[cells.y].begin();
-        int w = columnIntervals[cells.right() - 1].end() - x;
-        int h = rowIntervals[cells.bottom() - 1].end() - y;
-        return new Rectangle(x, y, w + 1, h + 1);
-      }
-
-      ////////////////////////////////////////////////////////////////////////////
-      //
-      // Feedback
-      //
-      ////////////////////////////////////////////////////////////////////////////
-      @Override
-      public boolean isRTL() {
-        return false;
-      }
-
-      @Override
-      public Insets getInsets() {
-        return getContainer().getInsets();
-      }
-
-      ////////////////////////////////////////////////////////////////////////////
-      //
-      // Virtual columns
-      //
-      ////////////////////////////////////////////////////////////////////////////
-      @Override
-      public boolean hasVirtualColumns() {
-        return true;
-      }
-
-      @Override
-      public int getVirtualColumnSize() {
-        return m_defaultColumnSize;
-      }
-
-      @Override
-      public int getVirtualColumnGap() {
-        return m_gapColumnSize;
-      }
-
-      ////////////////////////////////////////////////////////////////////////////
-      //
-      // Virtual rows
-      //
-      ////////////////////////////////////////////////////////////////////////////
-      @Override
-      public boolean hasVirtualRows() {
-        return true;
-      }
-
-      @Override
-      public int getVirtualRowSize() {
-        return m_defaultRowSize;
-      }
-
-      @Override
-      public int getVirtualRowGap() {
-        return m_gapRowSize;
-      }
-
-      ////////////////////////////////////////////////////////////////////////////
-      //
-      // Checks
-      //
-      ////////////////////////////////////////////////////////////////////////////
-      @Override
-      public ComponentInfo getOccupied(int column, int row) {
-        return occupiedCells.get(new Point(column, row));
-      }
-    };
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Manage general layout data.
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final BiMap<GeneralLayoutData.HorizontalAlignment, CellConstraints.Alignment> m_horizontalAlignmentMap =
-      ImmutableBiMap.of(
-          GeneralLayoutData.HorizontalAlignment.LEFT,
-          CellConstraints.LEFT,
-          GeneralLayoutData.HorizontalAlignment.CENTER,
-          CellConstraints.CENTER,
-          GeneralLayoutData.HorizontalAlignment.RIGHT,
-          CellConstraints.RIGHT,
-          GeneralLayoutData.HorizontalAlignment.FILL,
-          CellConstraints.FILL,
-          GeneralLayoutData.HorizontalAlignment.NONE,
-          CellConstraints.DEFAULT);
-  public static final BiMap<GeneralLayoutData.VerticalAlignment, CellConstraints.Alignment> m_verticalAlignmentMap =
-      ImmutableBiMap.of(
-          GeneralLayoutData.VerticalAlignment.TOP,
-          CellConstraints.TOP,
-          GeneralLayoutData.VerticalAlignment.CENTER,
-          CellConstraints.CENTER,
-          GeneralLayoutData.VerticalAlignment.BOTTOM,
-          CellConstraints.BOTTOM,
-          GeneralLayoutData.VerticalAlignment.FILL,
-          CellConstraints.FILL,
-          GeneralLayoutData.VerticalAlignment.NONE,
-          CellConstraints.DEFAULT);
-
-  @Override
-  protected void storeLayoutData(ComponentInfo component) throws Exception {
-    CellConstraintsSupport gridData = getConstraints(component);
-    if (gridData != null) {
-      GeneralLayoutData generalLayoutData = new GeneralLayoutData();
-      int x = gridData.x - 1;
-      int y = gridData.y - 1;
-      int width = gridData.width;
-      int height = gridData.height;
-      int dx = 0;
-      int dy = 0;
-      // correct position
-      for (int i = 0; i < x; i++) {
-        if (m_columns.get(i).isGap()) {
-          dx--;
-        }
-      }
-      for (int j = 0; j < y; j++) {
-        if (m_rows.get(j).isGap()) {
-          dy--;
-        }
-      }
-      // correct size
-      for (int i = 1; i < width; i++) {
-        if (m_columns.get(x + i).isGap()) {
-          width--;
-        }
-      }
-      for (int j = 1; j < height; j++) {
-        if (m_rows.get(y + j).isGap()) {
-          height--;
-        }
-      }
-      // cell
-      generalLayoutData.gridX = x + dx;
-      generalLayoutData.gridY = y + dy;
-      generalLayoutData.spanX = width;
-      generalLayoutData.spanY = height;
-      // grab
-      generalLayoutData.horizontalGrab = m_columns.get(gridData.x - 1).hasGrow();
-      generalLayoutData.verticalGrab = m_rows.get(gridData.y - 1).hasGrow();
-      // alignments
-      generalLayoutData.horizontalAlignment =
-          GeneralLayoutData.getGeneralValue(m_horizontalAlignmentMap, gridData.alignH);
-      generalLayoutData.verticalAlignment =
-          GeneralLayoutData.getGeneralValue(m_verticalAlignmentMap, gridData.alignV);
-      generalLayoutData.putToInfo(component);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the array of {@link Interval}'s for given array of origins.
-   */
-  private static Interval[] getIntervalsForOrigins(int origins[]) {
-    Assert.isTrue(origins.length != 0);
-    Interval[] intervals = new Interval[origins.length - 1];
-    for (int i = 0; i < intervals.length; i++) {
-      int begin = origins[i];
-      int end = origins[i + 1];
-      intervals[i] = new Interval(begin, end - begin);
-    }
-    return intervals;
-  }
+	private final List<FormColumnInfo> m_columns = Lists.newArrayList();
+	private final List<FormRowInfo> m_rows = Lists.newArrayList();
+	private final List<List<FormColumnInfo>> m_columnGroups = Lists.newArrayList();
+	private final List<List<FormRowInfo>> m_rowGroups = Lists.newArrayList();
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FormLayoutInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Initialize
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void initialize() throws Exception {
+		super.initialize();
+		// create initial columns/rows
+		if (m_columns.isEmpty() && m_rows.isEmpty()) {
+			FormLayout layout = (FormLayout) getObject();
+			// create columns
+			{
+				int columnCount = layout.getColumnCount();
+				for (int column = 1; column <= columnCount; column++) {
+					ColumnSpec spec = layout.getColumnSpec(column);
+					m_columns.add(new FormColumnInfo(spec));
+				}
+			}
+			// create rows
+			{
+				int rowCount = layout.getRowCount();
+				for (int row = 1; row <= rowCount; row++) {
+					RowSpec spec = layout.getRowSpec(row);
+					m_rows.add(new FormRowInfo(spec));
+				}
+			}
+		}
+		// events
+		addBroadcastListener(new ObjectInfoTreeComplete() {
+			@Override
+			public void invoke() throws Exception {
+				FormLayout layout = (FormLayout) getObject();
+				fillDimensionGroups(layout.getColumnGroups(), m_columns, m_columnGroups);
+				fillDimensionGroups(layout.getRowGroups(), m_rows, m_rowGroups);
+			}
+		});
+		addBroadcastListener(new ObjectEventListener() {
+			@Override
+			public void addContextMenu(List<? extends ObjectInfo> objects,
+					ObjectInfo object,
+					IMenuManager manager) throws Exception {
+				addContextMenuActions(object, manager);
+			}
+		});
+		addBroadcastListener(new JavaInfoAddProperties() {
+			@Override
+			public void invoke(JavaInfo javaInfo, List<Property> properties) throws Exception {
+				if (isManagedObject(javaInfo)) {
+					ComponentInfo component = (ComponentInfo) javaInfo;
+					CellConstraintsSupport support = getConstraints(component);
+					properties.add(support.getCellProperty());
+				}
+			}
+		});
+		// alignment
+		new SelectionActionsSupport(this);
+		// assistant
+		new LayoutAssistantSupport(this) {
+			@Override
+			protected AbstractAssistantPage createConstraintsPage(Composite parent,
+					List<ObjectInfo> objects) {
+				return new CellConstraintsAssistantPage(parent, FormLayoutInfo.this, objects);
+			}
+		};
+	}
+
+	@Override
+	protected void removeComponentConstraints(ContainerInfo container, ComponentInfo component)
+			throws Exception {
+		m_constraints.remove(component);
+		super.removeComponentConstraints(container, component);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Context menu
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds {@link FormLayoutInfo} actions into context menu.
+	 */
+	private void addContextMenuActions(ObjectInfo object, IMenuManager manager) throws Exception {
+		if (object == getContainer()) {
+			manager.appendToGroup(
+					IContextMenuConstants.GROUP_TOP,
+					new EditDimensionsAction(ModelMessages.FormLayoutInfo_editColumns, true));
+			manager.appendToGroup(
+					IContextMenuConstants.GROUP_TOP,
+					new EditDimensionsAction(ModelMessages.FormLayoutInfo_editRows, false));
+		}
+		if (object instanceof ComponentInfo && object.getParent() == getContainer()) {
+			ComponentInfo component = (ComponentInfo) object;
+			CellConstraintsSupport support = getConstraints(component);
+			support.addContextMenu(manager);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Context menu: EditDimensionsAction
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final class EditDimensionsAction extends Action {
+		private final boolean m_horizontal;
+
+		public EditDimensionsAction(String text, boolean horizontal) {
+			super(text);
+			m_horizontal = horizontal;
+		}
+
+		@Override
+		public void run() {
+			Shell shell = DesignerPlugin.getShell();
+			if (m_horizontal) {
+				new ColumnsDialog(shell, FormLayoutInfo.this).open();
+			} else {
+				new RowsDialog(shell, FormLayoutInfo.this).open();
+			}
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Properties
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected List<Property> getPropertyList() throws Exception {
+		List<Property> properties = super.getPropertyList();
+		properties.add(new DimensionsProperty(this, true));
+		properties.add(new DimensionsProperty(this, false));
+		return properties;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// CellConstraintsSupport access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final Map<ComponentInfo, CellConstraintsSupport> m_constraints = Maps.newHashMap();
+
+	/**
+	 * @return the {@link CellConstraintsSupport} for given {@link ComponentInfo}.
+	 */
+	public static CellConstraintsSupport getConstraints(ComponentInfo component) {
+		ContainerInfo container = (ContainerInfo) component.getParent();
+		Assert.isTrue(container.getChildrenComponents().contains(component));
+		Assert.instanceOf(FormLayoutInfo.class, container.getLayout());
+		//
+		FormLayoutInfo layout = (FormLayoutInfo) container.getLayout();
+		CellConstraintsSupport support = layout.m_constraints.get(component);
+		if (support == null) {
+			support = new CellConstraintsSupport(layout, component);
+			layout.m_constraints.put(component, support);
+		}
+		return support;
+	}
+
+	@Override
+	public void onSet() throws Exception {
+		super.onSet();
+		FormLayoutConverter.convert(getContainer(), this);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access columns/rows
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link List} of {@link FormColumnInfo}.
+	 */
+	public List<FormColumnInfo> getColumns() {
+		return m_columns;
+	}
+
+	/**
+	 * @return the {@link List} of {@link FormRowInfo}.
+	 */
+	public List<FormRowInfo> getRows() {
+		return m_rows;
+	}
+
+	/**
+	 * Sets the new {@link List} of {@link FormColumnInfo}.
+	 */
+	public void setColumns(List<FormColumnInfo> columns) throws Exception {
+		m_columns.clear();
+		m_columns.addAll(columns);
+		writeDimensions();
+	}
+
+	/**
+	 * Sets the new {@link List} of {@link FormRowInfo}.
+	 */
+	public void setRows(List<FormRowInfo> rows) throws Exception {
+		m_rows.clear();
+		m_rows.addAll(rows);
+		writeDimensions();
+	}
+
+	/**
+	 * @return the {@link Dimension} with minimal count of columns/rows required for this
+	 *         {@link FormLayoutInfo}.
+	 */
+	public Dimension getMinimumSize() {
+		final Dimension size = new Dimension(0, 0);
+		ExecutionUtils.runLog(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				visitComponents(new FormComponentVisitor() {
+					@Override
+					public void visit(ComponentInfo component, CellConstraintsSupport cell) throws Exception {
+						size.width = Math.max(size.width, cell.x + cell.width - 1);
+						size.height = Math.max(size.height, cell.y + cell.height - 1);
+					}
+				});
+			}
+		});
+		return size;
+	}
+
+	/**
+	 * @return the count of components that begin in each column.
+	 */
+	public int[] getColumnComponentsCounts() throws Exception {
+		final int[] counts = new int[m_columns.size()];
+		ExecutionUtils.runRethrow(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				visitComponents(new FormComponentVisitor() {
+					@Override
+					public void visit(ComponentInfo component, CellConstraintsSupport cell) throws Exception {
+						counts[cell.x - 1]++;
+					}
+				});
+			}
+		});
+		return counts;
+	}
+
+	/**
+	 * @return the count of components that begin in each row.
+	 */
+	public int[] getRowComponentsCounts() throws Exception {
+		final int[] counts = new int[m_rows.size()];
+		ExecutionUtils.runRethrow(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				visitComponents(new FormComponentVisitor() {
+					@Override
+					public void visit(ComponentInfo component, CellConstraintsSupport cell) throws Exception {
+						counts[cell.y - 1]++;
+					}
+				});
+			}
+		});
+		return counts;
+	}
+
+	/**
+	 * If there are components that span multiple columns/rows, and no other "real" components in
+	 * these columns/rows, then removes these excess columns/rows.
+	 */
+	public void normalizeSpanning() throws Exception {
+		boolean columnRowDeleted = true;
+		while (columnRowDeleted) {
+			columnRowDeleted = false;
+			// prepare filled columns/rows
+			final boolean[] filledColumns = new boolean[m_columns.size()];
+			final boolean[] filledRows = new boolean[m_rows.size()];
+			visitComponents(new FormComponentVisitor() {
+				@Override
+				public void visit(ComponentInfo bean, CellConstraintsSupport constraints) throws Exception {
+					filledColumns[constraints.x - 1] = true;
+					filledRows[constraints.y - 1] = true;
+				}
+			});
+			// remove empty columns
+			for (int column = filledColumns.length - 1; column >= 0; column--) {
+				if (!filledColumns[column] && !m_columns.get(column).isGap()) {
+					deleteColumn(column);
+					columnRowDeleted = true;
+					break;
+				}
+			}
+			// remove empty rows
+			for (int row = filledRows.length - 1; row >= 0; row--) {
+				if (!filledRows[row] && !m_rows.get(row).isGap()) {
+					deleteRow(row);
+					columnRowDeleted = true;
+					break;
+				}
+			}
+		}
+		// write dimensions
+		writeDimensions();
+	}
+
+	/**
+	 * @return <code>true</code> if dimensions of this layout can be changed. We can change them only
+	 *         if we created layout using constructor.
+	 */
+	public boolean canChangeDimensions() {
+		return getCreationSupport() instanceof ConstructorCreationSupport;
+	}
+
+	/**
+	 * Writes columns/rows to the source.
+	 */
+	public void writeDimensions() throws Exception {
+		// write constructor
+		{
+			ConstructorCreationSupport creationSupport =
+					(ConstructorCreationSupport) getCreationSupport();
+			ClassInstanceCreation creation = creationSupport.getCreation();
+			//
+			String[] columnsSource =
+					getDimenstionsSource(m_columns, "com.jgoodies.forms.layout.ColumnSpec");
+			String[] rowsSource = getDimenstionsSource(m_rows, "com.jgoodies.forms.layout.RowSpec");
+			columnsSource[columnsSource.length - 1] += ",";
+			//
+			getEditor().replaceCreationArguments(
+					creation,
+					ImmutableList.copyOf(CodeUtils.join(columnsSource, rowsSource)));
+		}
+		// write groups
+		writeDimensionsGroups("setColumnGroups", m_columns, m_columnGroups);
+		writeDimensionsGroups("setRowGroups", m_rows, m_rowGroups);
+	}
+
+	/**
+	 * @return the array of source lines for given {@link List} of {@link FormDimensionInfo}.
+	 */
+	private static String[] getDimenstionsSource(List<? extends FormDimensionInfo> dimensions,
+			String typeSource) throws Exception {
+		if (dimensions.isEmpty()) {
+			return new String[]{"\tnew " + typeSource + "[] {}"};
+		} else {
+			String[] lines = new String[1 + dimensions.size()];
+			lines[0] = "\tnew " + typeSource + "[] {";
+			for (int i = 0; i < dimensions.size(); i++) {
+				FormDimensionInfo dimension = dimensions.get(i);
+				lines[1 + i] = "\t\t" + dimension.getSource() + ",";
+			}
+			//
+			lines[lines.length - 1] += "}";
+			return lines;
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Groups
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the index of group to which belongs given {@link FormDimensionInfo} or <code>-1</code>
+	 *         if it does not belong to any group.
+	 */
+	public int getDimensionGroupIndex(FormDimensionInfo dimension) {
+		if (dimension instanceof FormColumnInfo) {
+			FormColumnInfo column = (FormColumnInfo) dimension;
+			return m_columnGroups.indexOf(getColumnGroup(column));
+		} else {
+			FormRowInfo row = (FormRowInfo) dimension;
+			return m_rowGroups.indexOf(getRowGroup(row));
+		}
+	}
+
+	/**
+	 * @return the {@link List} of {@link FormColumnInfo} that belong to same group or
+	 *         <code>null</code> if given {@link FormColumnInfo} does not belong to any group.
+	 */
+	public List<FormColumnInfo> getColumnGroup(FormColumnInfo column) {
+		return getDimensionGroup(column, m_columnGroups);
+	}
+
+	/**
+	 * @return the {@link List} of {@link FormRowInfo} that belong to same group or <code>null</code>
+	 *         if given {@link FormRowInfo} does not belong to any group.
+	 */
+	public List<FormRowInfo> getRowGroup(FormRowInfo row) {
+		return getDimensionGroup(row, m_rowGroups);
+	}
+
+	/**
+	 * @return the {@link List} of {@link FormDimensionInfo} that belong to same group or
+	 *         <code>null</code> if given {@link FormDimensionInfo} does not belong to any group.
+	 */
+	private static <T extends FormDimensionInfo> List<T> getDimensionGroup(T dimension,
+			List<List<T>> groups) {
+		for (List<T> group : groups) {
+			if (group.contains(dimension)) {
+				return group;
+			}
+		}
+		// no group
+		return null;
+	}
+
+	/**
+	 * Converts "int[][]" groups into {@link FormDimensionInfo}'s groups.
+	 */
+	private static <T extends FormDimensionInfo> void fillDimensionGroups(int[][] intGroups,
+			List<T> dimensions,
+			List<List<T>> groups) {
+		for (int groupIndex = 0; groupIndex < intGroups.length; groupIndex++) {
+			int[] intGroup = intGroups[groupIndex];
+			// create group
+			List<T> group = Lists.newArrayList();
+			groups.add(group);
+			// fill group
+			for (int groupElementIndex = 0; groupElementIndex < intGroup.length; groupElementIndex++) {
+				int dimensionIndex = intGroup[groupElementIndex];
+				T dimension = dimensions.get(dimensionIndex - 1);
+				group.add(dimension);
+			}
+		}
+	}
+
+	/**
+	 * Adds invocation of "set*Groups(new int[][] {...})" for given {@link FormDimensionInfo}'s and
+	 * groups.
+	 */
+	private <T extends FormDimensionInfo> void writeDimensionsGroups(String methodName,
+			List<T> dimensions,
+			List<List<T>> groups) throws Exception {
+		// clean up groups
+		for (Iterator<List<T>> I = groups.iterator(); I.hasNext();) {
+			List<T> group = I.next();
+			// remove all "dangling" dimensions
+			for (Iterator<T> J = group.iterator(); J.hasNext();) {
+				T dimensionInGroup = J.next();
+				if (!dimensions.contains(dimensionInGroup)) {
+					J.remove();
+				}
+			}
+			// remove empty group or group with single dimension
+			if (group.size() < 2) {
+				I.remove();
+			}
+		}
+		// prepare "set*Groups" invocation
+		String methodSignature = methodName + "(int[][])";
+		MethodInvocation invocation = getMethodInvocation(methodSignature);
+		// update "set*Groups"
+		if (!groups.isEmpty()) {
+			String groupsSource = "new int[][]{";
+			for (ListIterator<List<T>> I = groups.listIterator(); I.hasNext();) {
+				List<T> group = I.next();
+				// open array
+				if (I.previousIndex() != 0) {
+					groupsSource += ", ";
+				}
+				groupsSource += "new int[]{";
+				// add separate dimensions
+				for (ListIterator<T> J = group.listIterator(); J.hasNext();) {
+					FormDimensionInfo dimensionInGroup = J.next();
+					if (J.previousIndex() != 0) {
+						groupsSource += ", ";
+					}
+					groupsSource += 1 + dimensions.indexOf(dimensionInGroup);
+				}
+				// close array
+				groupsSource += "}";
+			}
+			groupsSource += "}";
+			//
+			if (invocation != null) {
+				Expression groupsExpression = (Expression) invocation.arguments().get(0);
+				getEditor().replaceExpression(groupsExpression, groupsSource);
+			} else {
+				addMethodInvocation(methodSignature, groupsSource);
+			}
+		} else if (invocation != null) {
+			getEditor().removeEnclosingStatement(invocation);
+		}
+	}
+
+	/**
+	 * Un-groups given {@link FormColumnInfo}'s.
+	 */
+	public void unGroupColumns(List<FormColumnInfo> columns) throws Exception {
+		unGroupDimensions(columns, m_columnGroups);
+		writeDimensionsGroups("setColumnGroups", m_columns, m_columnGroups);
+	}
+
+	/**
+	 * Un-groups given {@link FormRowInfo}'s.
+	 */
+	public void unGroupRows(List<FormRowInfo> rows) throws Exception {
+		unGroupDimensions(rows, m_rowGroups);
+		writeDimensionsGroups("setRowGroups", m_rows, m_rowGroups);
+	}
+
+	/**
+	 * Un-groups given {@link FormDimensionInfo}'s.
+	 */
+	private static <T extends FormDimensionInfo> void unGroupDimensions(List<T> dimensions,
+			List<List<T>> groups) throws Exception {
+		for (List<T> group : groups) {
+			group.removeAll(dimensions);
+		}
+	}
+
+	/**
+	 * Groups given {@link FormColumnInfo}'s.
+	 */
+	public void groupColumns(List<FormColumnInfo> columns) throws Exception {
+		groupDimensions(columns, m_columnGroups);
+		writeDimensionsGroups("setColumnGroups", m_columns, m_columnGroups);
+	}
+
+	/**
+	 * Groups given {@link FormRowInfo}'s.
+	 */
+	public void groupRows(List<FormRowInfo> rows) throws Exception {
+		groupDimensions(rows, m_rowGroups);
+		writeDimensionsGroups("setRowGroups", m_rows, m_rowGroups);
+	}
+
+	/**
+	 * Groups given {@link FormDimensionInfo}'s.
+	 */
+	private static <T extends FormDimensionInfo> void groupDimensions(List<T> dimensions,
+			List<List<T>> groups) {
+		// remove gaps
+		for (Iterator<T> I = dimensions.iterator(); I.hasNext();) {
+			T dimension = I.next();
+			if (dimension.isGap()) {
+				I.remove();
+			}
+		}
+		// check that at least two dimensions remain
+		if (dimensions.size() < 2) {
+			return;
+		}
+		// check there is one and only one target group
+		List<T> targetGroup = null;
+		for (List<T> group : groups) {
+			for (T dimension : dimensions) {
+				if (group.contains(dimension)) {
+					if (targetGroup == null) {
+						targetGroup = group;
+					} else if (targetGroup != group) {
+						// more than one group selected, ignore
+						return;
+					}
+				}
+			}
+		}
+		// if there are no existing group, create new one
+		if (targetGroup == null) {
+			targetGroup = Lists.newArrayList();
+			groups.add(targetGroup);
+		}
+		// add all dimensions into group
+		for (T dimension : dimensions) {
+			if (!targetGroup.contains(dimension)) {
+				targetGroup.add(dimension);
+			}
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Column commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds new {@link FormColumnInfo} and possible gap into target index.
+	 */
+	public void insertColumn(int targetIndex) throws Exception {
+		boolean targetLast = targetIndex == m_columns.size();
+		boolean targetGap = !targetLast && m_columns.get(targetIndex).isGap();
+		//
+		moveComponentsForInsert(1 + targetIndex, true, -1, false);
+		moveComponentsForInsert(1 + targetIndex, true, -1, false);
+		if (targetGap) {
+			m_columns.add(targetIndex, new FormColumnInfo(FormSpecs.RELATED_GAP_COLSPEC));
+			m_columns.add(targetIndex + 1, new FormColumnInfo(FormSpecs.DEFAULT_COLSPEC));
+		} else if (targetLast) {
+			if (!m_columns.isEmpty() && !m_columns.get(targetIndex - 1).isGap()) {
+				m_columns.add(targetIndex++, new FormColumnInfo(FormSpecs.RELATED_GAP_COLSPEC));
+			}
+			m_columns.add(targetIndex, new FormColumnInfo(FormSpecs.DEFAULT_COLSPEC));
+		} else {
+			m_columns.add(targetIndex, new FormColumnInfo(FormSpecs.DEFAULT_COLSPEC));
+			m_columns.add(targetIndex + 1, new FormColumnInfo(FormSpecs.RELATED_GAP_COLSPEC));
+		}
+		writeDimensions();
+	}
+
+	/**
+	 * Deletes the {@link FormColumnInfo} with given index.
+	 */
+	public void deleteColumn(int index) throws Exception {
+		// prepare context information
+		boolean isFirst = index == 0;
+		boolean isLast = index == m_columns.size() - 1;
+		boolean isGap = m_columns.get(index).isGap();
+		boolean isPrevGap = !isFirst && m_columns.get(index - 1).isGap();
+		boolean isNextGap = !isLast && m_columns.get(index + 1).isGap();
+		// do delete
+		if (isGap) {
+			deleteSingleColumn(index); // gap
+		} else {
+			deleteSingleColumn(index); // column
+			if (isPrevGap) {
+				deleteSingleColumn(index - 1); // gap
+			} else if (isNextGap) {
+				deleteSingleColumn(index); // gap
+			}
+		}
+		writeDimensions();
+	}
+
+	/**
+	 * Deletes single {@link FormColumnInfo} with given index.
+	 */
+	private void deleteSingleColumn(final int index) throws Exception {
+		visitComponents(new FormComponentVisitor() {
+			@Override
+			public void visit(ComponentInfo component, CellConstraintsSupport cell) throws Exception {
+				if (cell.x == 1 + index) {
+					component.delete();
+				} else if (cell.x > 1 + index) {
+					cell.x--;
+				} else if (cell.x + cell.width > 1 + index) {
+					cell.width--;
+				}
+				cell.write();
+			}
+		});
+		m_columns.remove(index);
+	}
+
+	/**
+	 * Deletes the {@link ComponentInfo}'s that located in {@link FormColumnInfo} with given index.
+	 */
+	public void deleteColumnContents(final int index) throws Exception {
+		visitComponents(new FormComponentVisitor() {
+			@Override
+			public void visit(ComponentInfo component, CellConstraintsSupport cell) throws Exception {
+				if (cell.x == 1 + index) {
+					component.delete();
+				}
+			}
+		});
+	}
+
+	/**
+	 * Splits the {@link FormColumnInfo} with given index, i.e. adds duplicate of this
+	 * {@link FormColumnInfo}.
+	 */
+	public void splitColumn(final int index) throws Exception {
+		FormColumnInfo column = m_columns.get(index);
+		m_columns.add(index + 1, new FormColumnInfo(FormSpecs.RELATED_GAP_COLSPEC));
+		m_columns.add(index + 2, column.copy());
+		writeDimensions();
+		// update constraints
+		visitComponents(new FormComponentVisitor() {
+			@Override
+			public void visit(ComponentInfo component, CellConstraintsSupport cell) throws Exception {
+				if (cell.x > 1 + index) {
+					cell.x += 2;
+				} else if (cell.x + cell.width > 1 + index) {
+					cell.width += 2;
+				}
+				cell.write();
+			}
+		});
+	}
+
+	/**
+	 * Moves {@link FormColumnInfo} at given index (and possible its gap) into target index.
+	 */
+	public void command_MOVE_COLUMN(int index, int targetIndex) throws Exception {
+		// prepare context information for old position
+		boolean isFirst = index == 0;
+		boolean isLast = index == m_columns.size() - 1;
+		boolean isGap = m_columns.get(index).isGap();
+		boolean isPrevGap = !isFirst && m_columns.get(index - 1).isGap();
+		boolean isNextGap = !isLast && m_columns.get(index + 1).isGap();
+		// prepare context information for new position
+		boolean targetFirst = targetIndex == 0;
+		boolean targetLast = targetIndex == m_columns.size();
+		boolean targetGap = !targetLast && m_columns.get(targetIndex).isGap();
+		//
+		if (index < targetIndex) {
+			if (isGap) {
+				moveSingleColumn(index, targetIndex); // gap
+			} else if (isPrevGap) {
+				moveSingleColumn(index - 1, targetIndex); // gap
+				moveSingleColumn(index - 1, targetIndex); // column
+			} else if (isFirst && isNextGap) {
+				if (targetLast) {
+					moveSingleColumn(1, targetIndex); // gap
+					moveSingleColumn(0, targetIndex); // column
+				} else {
+					if (targetGap) {
+						targetIndex++;
+					}
+					moveSingleColumn(0, targetIndex); // column
+					moveSingleColumn(0, targetIndex); // gap
+				}
+			} else {
+				moveSingleColumn(index, targetIndex); // column
+			}
+		} else {
+			if (isGap) {
+				moveSingleColumn(index, targetIndex); // gap
+			} else if (isPrevGap && targetFirst && !targetGap) {
+				moveSingleColumn(index, 0); // column
+				moveSingleColumn(index, 1); // gap
+			} else if (isPrevGap) {
+				moveSingleColumn(index, targetIndex); // column
+				moveSingleColumn(index, targetIndex); // gap
+			} else {
+				moveSingleColumn(index, targetIndex); // column
+			}
+		}
+		//
+		writeDimensions();
+	}
+
+	/**
+	 * Moves single {@link FormColumnInfo}.
+	 */
+	private void moveSingleColumn(final int index, final int targetIndex) throws Exception {
+		FormColumnInfo column = m_columns.remove(index);
+		if (index < targetIndex) {
+			// add column
+			m_columns.add(targetIndex - 1, column);
+			// change constraints
+			visitComponents(new FormComponentVisitor() {
+				@Override
+				public void visit(ComponentInfo bean, CellConstraintsSupport constraints) throws Exception {
+					int x = constraints.x;
+					int w = constraints.width;
+					if (x < 1 + index) {
+						// if component contains source and doesn't contain target, decrease size
+						if (x + w - 1 >= 1 + index && x + w - 1 < 1 + targetIndex) {
+							constraints.width = w - 1;
+						}
+					} else if (x == 1 + index) {
+						constraints.x = targetIndex;
+						constraints.width = 1;
+					} else if (x > 1 + index && x < 1 + targetIndex) {
+						constraints.x = x - 1;
+						// if component contains target, increase size
+						if (x + w - 1 >= 1 + targetIndex) {
+							constraints.width = w + 1;
+						}
+					} else if (x >= 1 + targetIndex) {
+					}
+					constraints.write();
+				}
+			});
+		} else {
+			// add column
+			m_columns.add(targetIndex, column);
+			// change constraints
+			visitComponents(new FormComponentVisitor() {
+				@Override
+				public void visit(ComponentInfo bean, CellConstraintsSupport constraints) throws Exception {
+					int x = constraints.x;
+					int w = constraints.width;
+					if (x < 1 + targetIndex) {
+						// if component doesn't contains source and contains target, increase size
+						if (x + w - 1 >= 1 + targetIndex && x + w - 1 < 1 + index) {
+							constraints.width = w + 1;
+						}
+					} else if (x < 1 + index) {
+						constraints.x = x + 1;
+						// if component contains source, decrease size
+						if (x + w - 1 >= 1 + index) {
+							constraints.width = w - 1;
+						}
+					} else if (x == 1 + index) {
+						constraints.x = 1 + targetIndex;
+						constraints.width = 1;
+					} else if (x > 1 + index) {
+					}
+					constraints.write();
+				}
+			});
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Row commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds new {@link FormRowInfo} and possible gap into target index.
+	 */
+	public void insertRow(int targetIndex) throws Exception {
+		boolean targetLast = targetIndex == m_rows.size();
+		boolean targetGap = !targetLast && m_rows.get(targetIndex).isGap();
+		//
+		moveComponentsForInsert(-1, false, 1 + targetIndex, true);
+		moveComponentsForInsert(-1, false, 1 + targetIndex, true);
+		if (targetGap) {
+			m_rows.add(targetIndex, new FormRowInfo(FormSpecs.RELATED_GAP_ROWSPEC));
+			m_rows.add(targetIndex + 1, new FormRowInfo(FormSpecs.DEFAULT_ROWSPEC));
+		} else if (targetLast) {
+			if (!m_rows.isEmpty() && !m_rows.get(targetIndex - 1).isGap()) {
+				m_rows.add(targetIndex++, new FormRowInfo(FormSpecs.RELATED_GAP_ROWSPEC));
+			}
+			m_rows.add(targetIndex, new FormRowInfo(FormSpecs.DEFAULT_ROWSPEC));
+		} else {
+			m_rows.add(targetIndex, new FormRowInfo(FormSpecs.DEFAULT_ROWSPEC));
+			m_rows.add(targetIndex + 1, new FormRowInfo(FormSpecs.RELATED_GAP_ROWSPEC));
+		}
+		writeDimensions();
+	}
+
+	/**
+	 * Deletes the {@link FormRowInfo} with given index.
+	 */
+	public void deleteRow(int index) throws Exception {
+		// prepare context information
+		boolean isFirst = index == 0;
+		boolean isLast = index == m_rows.size() - 1;
+		boolean isGap = m_rows.get(index).isGap();
+		boolean isPrevGap = !isFirst && m_rows.get(index - 1).isGap();
+		boolean isNextGap = !isLast && m_rows.get(index + 1).isGap();
+		// do delete
+		if (isGap) {
+			deleteSingleRow(index); // gap
+		} else {
+			deleteSingleRow(index); // row
+			if (isPrevGap) {
+				deleteSingleRow(index - 1); // gap
+			} else if (isNextGap) {
+				deleteSingleRow(index); // gap
+			}
+		}
+		writeDimensions();
+	}
+
+	/**
+	 * Deletes single {@link FormRowInfo} with given index.
+	 */
+	private void deleteSingleRow(final int index) throws Exception {
+		visitComponents(new FormComponentVisitor() {
+			@Override
+			public void visit(ComponentInfo component, CellConstraintsSupport cell) throws Exception {
+				if (cell.y == 1 + index) {
+					component.delete();
+				} else if (cell.y > 1 + index) {
+					cell.y--;
+				} else if (cell.y + cell.height > 1 + index) {
+					cell.height--;
+				}
+				cell.write();
+			}
+		});
+		m_rows.remove(index);
+	}
+
+	/**
+	 * Deletes the {@link ComponentInfo}'s that located in {@link FormRowInfo} with given index.
+	 */
+	public void deleteRowContents(final int index) throws Exception {
+		visitComponents(new FormComponentVisitor() {
+			@Override
+			public void visit(ComponentInfo component, CellConstraintsSupport cell) throws Exception {
+				if (cell.y == 1 + index) {
+					component.delete();
+				}
+			}
+		});
+	}
+
+	/**
+	 * Splits the {@link FormRowInfo} with given index, i.e. adds duplicate of this
+	 * {@link FormRowInfo}.
+	 */
+	public void splitRow(final int index) throws Exception {
+		FormRowInfo row = m_rows.get(index);
+		m_rows.add(index + 1, new FormRowInfo(FormSpecs.RELATED_GAP_ROWSPEC));
+		m_rows.add(index + 2, row.copy());
+		writeDimensions();
+		// update constraints
+		visitComponents(new FormComponentVisitor() {
+			@Override
+			public void visit(ComponentInfo component, CellConstraintsSupport cell) throws Exception {
+				if (cell.y > 1 + index) {
+					cell.y += 2;
+				} else if (cell.y + cell.height > 1 + index) {
+					cell.height += 2;
+				}
+				cell.write();
+			}
+		});
+	}
+
+	/**
+	 * Moves {@link FormRowInfo} at given index (and possible its gap) into target index.
+	 */
+	public void command_MOVE_ROW(int index, int targetIndex) throws Exception {
+		// prepare context information for old position
+		boolean isFirst = index == 0;
+		boolean isLast = index == m_rows.size() - 1;
+		boolean isGap = m_rows.get(index).isGap();
+		boolean isPrevGap = !isFirst && m_rows.get(index - 1).isGap();
+		boolean isNextGap = !isLast && m_rows.get(index + 1).isGap();
+		// prepare context information for new position
+		boolean targetFirst = targetIndex == 0;
+		boolean targetLast = targetIndex == m_rows.size();
+		boolean targetGap = !targetLast && m_rows.get(targetIndex).isGap();
+		//
+		if (index < targetIndex) {
+			if (isGap) {
+				moveSingleRow(index, targetIndex); // gap
+			} else if (isPrevGap) {
+				moveSingleRow(index - 1, targetIndex); // gap
+				moveSingleRow(index - 1, targetIndex); // row
+			} else if (isFirst && isNextGap) {
+				if (targetLast) {
+					moveSingleRow(1, targetIndex); // gap
+					moveSingleRow(0, targetIndex); // row
+				} else {
+					if (targetGap) {
+						targetIndex++;
+					}
+					moveSingleRow(0, targetIndex); // row
+					moveSingleRow(0, targetIndex); // gap
+				}
+			} else {
+				moveSingleRow(index, targetIndex); // row
+			}
+		} else {
+			if (isGap) {
+				moveSingleRow(index, targetIndex); // gap
+			} else if (isPrevGap && targetFirst && !targetGap) {
+				moveSingleRow(index, 0); // row
+				moveSingleRow(index, 1); // gap
+			} else if (isPrevGap) {
+				moveSingleRow(index, targetIndex); // row
+				moveSingleRow(index, targetIndex); // gap
+			} else {
+				moveSingleRow(index, targetIndex); // row
+			}
+		}
+		//
+		writeDimensions();
+	}
+
+	/**
+	 * Moves single {@link FormRowInfo}.
+	 */
+	private void moveSingleRow(final int index, final int targetIndex) throws Exception {
+		FormRowInfo row = m_rows.remove(index);
+		if (index < targetIndex) {
+			// add row
+			m_rows.add(targetIndex - 1, row);
+			// change constraints
+			visitComponents(new FormComponentVisitor() {
+				@Override
+				public void visit(ComponentInfo bean, CellConstraintsSupport constraints) throws Exception {
+					int y = constraints.y;
+					int h = constraints.height;
+					if (y < 1 + index) {
+						// if component contains source and doesn't contain target, decrease size
+						if (y + h - 1 >= 1 + index && y + h - 1 < 1 + targetIndex) {
+							constraints.height = h - 1;
+						}
+					} else if (y == 1 + index) {
+						constraints.y = targetIndex;
+						constraints.height = 1;
+					} else if (y > 1 + index && y < 1 + targetIndex) {
+						constraints.y = y - 1;
+						// if component contains target, increase size
+						if (y + h - 1 >= 1 + targetIndex) {
+							constraints.height = h + 1;
+						}
+					} else if (y >= 1 + targetIndex) {
+					}
+					constraints.write();
+				}
+			});
+		} else {
+			// add row
+			m_rows.add(targetIndex, row);
+			// change constraints
+			visitComponents(new FormComponentVisitor() {
+				@Override
+				public void visit(ComponentInfo bean, CellConstraintsSupport constraints) throws Exception {
+					int y = constraints.y;
+					int h = constraints.height;
+					if (y < 1 + targetIndex) {
+						// if component doesn't contains source and contains target, increase size
+						if (y + h - 1 >= 1 + targetIndex && y + h - 1 < 1 + index) {
+							constraints.height = h + 1;
+						}
+					} else if (y < 1 + index) {
+						constraints.y = y + 1;
+						// if component contains source, decrease size
+						if (y + h - 1 >= 1 + index) {
+							constraints.height = h - 1;
+						}
+					} else if (y == 1 + index) {
+						constraints.y = 1 + targetIndex;
+						constraints.height = 1;
+					} else if (y > 1 + index) {
+					}
+					constraints.write();
+				}
+			});
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Creates new {@link ComponentInfo} in given cell.
+	 *
+	 * @param newComponent
+	 *          the new {@link ComponentInfo} to create.
+	 * @param column
+	 *          the column in {@link FormLayout} terms (1 based).
+	 * @param row
+	 *          the row in {@link FormLayout} terms (1 based).
+	 */
+	public void command_CREATE(ComponentInfo newComponent,
+			int column,
+			boolean insertColumn,
+			int row,
+			boolean insertRow) throws Exception {
+		Point cell = prepareCell(column, insertColumn, row, insertRow);
+		// do add
+		ComponentInfo nextComponent = getReference(column, row, null);
+		add(newComponent, "\"" + cell.x + ", " + cell.y + "\"", nextComponent);
+		{
+			CellConstraintsSupport constraints = getConstraints(newComponent);
+			constraints.x = cell.x;
+			constraints.y = cell.y;
+		}
+		doAutomaticAlignment(newComponent);
+	}
+
+	/**
+	 * Moves existing {@link ComponentInfo} into new cell.
+	 */
+	public void command_MOVE(ComponentInfo component,
+			int column,
+			boolean insertColumn,
+			int row,
+			boolean insertRow) throws Exception {
+		Point cell = prepareCell(column, insertColumn, row, insertRow);
+		// move in components
+		{
+			ComponentInfo nextComponent = getReference(column, row, component);
+			move(component, null, nextComponent);
+		}
+		// move in grid
+		{
+			CellConstraintsSupport constraints = getConstraints(component);
+			constraints.x = cell.x;
+			constraints.y = cell.y;
+			constraints.width = 1;
+			constraints.height = 1;
+			constraints.write();
+		}
+	}
+
+	/**
+	 * Adds {@link ComponentInfo} from other parent into cell.
+	 */
+	public void command_ADD(ComponentInfo component,
+			int column,
+			boolean insertColumn,
+			int row,
+			boolean insertRow) throws Exception {
+		Point cell = prepareCell(column, insertColumn, row, insertRow);
+		// move in components
+		{
+			ComponentInfo nextComponent = getReference(column, row, component);
+			move(component, "\"" + cell.x + ", " + cell.y + "\"", nextComponent);
+		}
+		// move in grid
+		{
+			CellConstraintsSupport constraints = getConstraints(component);
+			constraints.x = cell.x;
+			constraints.y = cell.y;
+			constraints.write();
+		}
+	}
+
+	/**
+	 * @return the {@link ComponentInfo} that should be used as reference of adding into given cell.
+	 *
+	 * @param exclude
+	 *          the {@link ComponentInfo} that should not be checked, for example because we move it
+	 *          now.
+	 */
+	private ComponentInfo getReference(int column, int row, ComponentInfo exclude) throws Exception {
+		for (ComponentInfo component : getContainer().getChildrenComponents()) {
+			if (component != exclude) {
+				CellConstraintsSupport constraints = getConstraints(component);
+				if (constraints.y > row || constraints.y == row && constraints.x >= column) {
+					return component;
+				}
+			}
+		}
+		// no reference
+		return null;
+	}
+
+	/**
+	 * Prepares cell with given column/row - inserts columns/rows if necessary.
+	 */
+	private Point prepareCell(int column, boolean insertColumn, int row, boolean insertRow)
+			throws Exception {
+		boolean writeDimensions = false;
+		if (insertColumn || insertRow) {
+			// move existing components
+			{
+				moveComponentsForInsert(column, insertColumn, row, insertRow);
+				moveComponentsForInsert(column, insertColumn, row, insertRow);
+			}
+			// insert gap and empty column/row
+			if (insertColumn) {
+				m_columns.add(column - 1, new FormColumnInfo(FormSpecs.RELATED_GAP_COLSPEC));
+				m_columns.add(column - 1 + 1, new FormColumnInfo(FormSpecs.DEFAULT_COLSPEC));
+				column += 1;
+			}
+			if (insertRow) {
+				m_rows.add(row - 1, new FormRowInfo(FormSpecs.RELATED_GAP_ROWSPEC));
+				m_rows.add(row - 1 + 1, new FormRowInfo(FormSpecs.DEFAULT_ROWSPEC));
+				row += 1;
+			}
+			// write dimensions
+			writeDimensions = true;
+		}
+		// add columns
+		{
+			int addColumns = column - m_columns.size();
+			if (addColumns > 0) {
+				Assert.isTrue(
+						addColumns % 2 == 0,
+						MessageFormat.format(ModelMessages.FormLayoutInfo_evenDiffNumColumns, addColumns));
+				for (int i = 0; i < addColumns / 2; i++) {
+					m_columns.add(new FormColumnInfo(FormSpecs.RELATED_GAP_COLSPEC));
+					m_columns.add(new FormColumnInfo(FormSpecs.DEFAULT_COLSPEC));
+				}
+				writeDimensions = true;
+			}
+		}
+		// add rows
+		{
+			int addRows = row - m_rows.size();
+			if (addRows > 0) {
+				Assert.isTrue(
+						addRows % 2 == 0,
+						MessageFormat.format(ModelMessages.FormLayoutInfo_evenDiffNumRows, addRows));
+				for (int i = 0; i < addRows / 2; i++) {
+					m_rows.add(new FormRowInfo(FormSpecs.RELATED_GAP_ROWSPEC));
+					m_rows.add(new FormRowInfo(FormSpecs.DEFAULT_ROWSPEC));
+				}
+				writeDimensions = true;
+			}
+		}
+		// write dimensions
+		if (writeDimensions) {
+			writeDimensions();
+		}
+		// return new cell
+		return new Point(column, row);
+	}
+
+	/**
+	 * Moves/resizes components constraints for inserting single column/row.
+	 */
+	private void moveComponentsForInsert(final int column,
+			final boolean insertColumn,
+			final int row,
+			final boolean insertRow) throws Exception {
+		visitComponents(new FormComponentVisitor() {
+			@Override
+			public void visit(ComponentInfo component, CellConstraintsSupport cell) throws Exception {
+				if (insertColumn) {
+					if (cell.x >= column) {
+						cell.x++;
+					} else if (cell.x + cell.width > column) {
+						cell.width++;
+					}
+				}
+				if (insertRow) {
+					if (cell.y >= row) {
+						cell.y++;
+					} else if (cell.y + cell.height > row) {
+						cell.height++;
+					}
+				}
+				cell.write();
+			}
+		});
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Visiting
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Visitor for {@link ComponentInfo} and their {@link CellConstraintsSupport}.
+	 */
+	private interface FormComponentVisitor {
+		void visit(ComponentInfo component, CellConstraintsSupport cell) throws Exception;
+	}
+
+	/**
+	 * Visits all {@link ComponentInfo} of this {@link ContainerInfo}.
+	 */
+	private void visitComponents(FormComponentVisitor visitor) throws Exception {
+		for (ComponentInfo component : getContainer().getChildrenComponents()) {
+			CellConstraintsSupport cell = getConstraints(component);
+			visitor.visit(component, cell);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Automatic alignment
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Performs automatic alignment, such as grab/fill for {@link JTextField} or {@link JTable}, right
+	 * alignment for {@link JLabel}.
+	 */
+	private void doAutomaticAlignment(ComponentInfo component) throws Exception {
+		final IPreferenceStore preferences = Activator.getDefault().getPreferenceStore();
+		GridAlignmentHelper.doAutomaticAlignment(component, new IAlignmentProcessor<ComponentInfo>() {
+			@Override
+			public boolean grabEnabled() {
+				return preferences.getBoolean(P_ENABLE_GRAB);
+			}
+
+			@Override
+			public boolean rightEnabled() {
+				return preferences.getBoolean(P_ENABLE_RIGHT_ALIGNMENT);
+			}
+
+			@Override
+			public ComponentInfo getComponentAtLeft(ComponentInfo component) {
+				CellConstraintsSupport constraints = getConstraints(component);
+				int x = constraints.x - 1;
+				if (x > 0 && m_columns.get(x - 1).isGap()) {
+					x--;
+				}
+				return getComponentAt(x, constraints.y);
+			}
+
+			@Override
+			public ComponentInfo getComponentAtRight(ComponentInfo component) {
+				CellConstraintsSupport constraints = getConstraints(component);
+				int x = constraints.x + 1;
+				if (x < m_columns.size() && m_columns.get(x - 1).isGap()) {
+					x++;
+				}
+				return getComponentAt(x, constraints.y);
+			}
+
+			@Override
+			public void setGrabFill(ComponentInfo component, boolean horizontal) throws Exception {
+				boolean canChangeDimensions = canChangeDimensions();
+				CellConstraintsSupport constraints = getConstraints(component);
+				if (horizontal) {
+					if (canChangeDimensions) {
+						getColumns().get(constraints.x - 1).setWeight(FormSpec.DEFAULT_GROW);
+					}
+					constraints.setAlignH(CellConstraints.FILL);
+				} else {
+					if (canChangeDimensions) {
+						getRows().get(constraints.y - 1).setWeight(FormSpec.DEFAULT_GROW);
+					}
+					constraints.setAlignV(CellConstraints.FILL);
+				}
+				if (canChangeDimensions) {
+					writeDimensions();
+				}
+				constraints.write();
+			}
+
+			@Override
+			public void setRightAlignment(ComponentInfo component) throws Exception {
+				CellConstraintsSupport constraints = getConstraints(component);
+				constraints.setAlignH(CellConstraints.RIGHT);
+				constraints.write();
+			}
+		});
+	}
+
+	/**
+	 * @return the {@link ComponentInfo} with given top-left cell, may be <code>null</code>.
+	 */
+	private ComponentInfo getComponentAt(int x, int y) {
+		for (ComponentInfo component : getContainer().getChildrenComponents()) {
+			CellConstraintsSupport constraints = getConstraints(component);
+			if (constraints.x == x && constraints.y == y) {
+				return component;
+			}
+		}
+		// no such component
+		return null;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final int DEFAULT_SIZE = 5;
+	private int m_defaultColumnSize;
+	private int m_gapColumnSize;
+	private int m_defaultRowSize;
+	private int m_gapRowSize;
+
+	@Override
+	public void refresh_dispose() throws Exception {
+		m_gridInfo = null;
+		super.refresh_dispose();
+	}
+
+	@Override
+	protected void refresh_afterCreate2() throws Exception {
+		super.refresh_afterCreate2();
+		FormLayout layout = (FormLayout) getObject();
+		Container container = getContainer().getContainer();
+		// prepare origins
+		int[] columnOrigins;
+		int[] rowOrigins;
+		{
+			com.jgoodies.forms.layout.FormLayout.LayoutInfo layoutInfo = layout.getLayoutInfo(container);
+			columnOrigins = layoutInfo.columnOrigins;
+			rowOrigins = layoutInfo.rowOrigins;
+		}
+		// initialize default sizes in pixels
+		{
+			DefaultUnitConverter converter = DefaultUnitConverter.getInstance();
+			//
+			m_defaultColumnSize = converter.millimeterAsPixel(DEFAULT_SIZE, container);
+			m_defaultRowSize = converter.millimeterAsPixel(DEFAULT_SIZE, container);
+			m_gapColumnSize =
+					new FormSizeInfo(FormSpecs.RELATED_GAP_COLSPEC.getSize(), true).getConstantSize().getAsPixels();
+			m_gapRowSize =
+					new FormSizeInfo(FormSpecs.RELATED_GAP_ROWSPEC.getSize(), false).getConstantSize().getAsPixels();
+		}
+		// set constant size for empty columns/rows
+		{
+			int columnCount = layout.getColumnCount();
+			int rowCount = layout.getRowCount();
+			// update columns
+			for (int column = 1; column <= columnCount; column++) {
+				ColumnSpec spec = layout.getColumnSpec(column);
+				if (columnOrigins[column] - columnOrigins[column - 1] == 0) {
+					spec = ColumnSpec.decode(DEFAULT_SIZE + "mm");
+					layout.setColumnSpec(column, spec);
+				}
+			}
+			// update rows
+			for (int row = 1; row <= rowCount; row++) {
+				RowSpec spec = layout.getRowSpec(row);
+				if (rowOrigins[row] - rowOrigins[row - 1] == 0) {
+					spec = RowSpec.decode(DEFAULT_SIZE + "mm");
+					layout.setRowSpec(row, spec);
+				}
+			}
+			// may be column/row specs were updated, force layout
+			container.doLayout();
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IGridInfo support
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private IGridInfo m_gridInfo;
+
+	/**
+	 * @return the {@link IGridInfo} that describes this layout.
+	 */
+	public IGridInfo getGridInfo() {
+		if (m_gridInfo == null) {
+			ExecutionUtils.runRethrow(new RunnableEx() {
+				@Override
+				public void run() throws Exception {
+					createGridInfo();
+				}
+			});
+		}
+		return m_gridInfo;
+	}
+
+	/**
+	 * Initializes {@link #m_gridInfo}.
+	 */
+	private void createGridInfo() throws Exception {
+		// prepare intervals
+		final Interval[] columnIntervals;
+		final Interval[] rowIntervals;
+		{
+			// prepare origins
+			int[] columnOrigins;
+			int[] rowOrigins;
+			{
+				FormLayout layout = (FormLayout) getObject();
+				Container container = getContainer().getContainer();
+				com.jgoodies.forms.layout.FormLayout.LayoutInfo layoutInfo =
+						layout.getLayoutInfo(container);
+				//
+				columnOrigins = layoutInfo.columnOrigins;
+				rowOrigins = layoutInfo.rowOrigins;
+			}
+			// convert origins into intervals
+			columnIntervals = getIntervalsForOrigins(columnOrigins);
+			rowIntervals = getIntervalsForOrigins(rowOrigins);
+		}
+		// prepare cells
+		final Map<ComponentInfo, Rectangle> componentToCells = Maps.newHashMap();
+		final Map<Point, ComponentInfo> occupiedCells = Maps.newHashMap();
+		visitComponents(new FormComponentVisitor() {
+			@Override
+			public void visit(ComponentInfo component, CellConstraintsSupport support) throws Exception {
+				Rectangle cells =
+						new Rectangle(support.x - 1, support.y - 1, support.width, support.height);
+				// fill map: ComponentInfo -> cells Rectangle
+				componentToCells.put(component, cells);
+				// fill occupied cells map
+				for (int x = cells.x; x < cells.right(); x++) {
+					for (int y = cells.y; y < cells.bottom(); y++) {
+						occupiedCells.put(new Point(x, y), component);
+					}
+				}
+			}
+		});
+		// create IGridInfo instance
+		m_gridInfo = new IGridInfo() {
+			////////////////////////////////////////////////////////////////////////////
+			//
+			// Dimensions
+			//
+			////////////////////////////////////////////////////////////////////////////
+			@Override
+			public int getColumnCount() {
+				return columnIntervals.length;
+			}
+
+			@Override
+			public int getRowCount() {
+				return rowIntervals.length;
+			}
+
+			////////////////////////////////////////////////////////////////////////////
+			//
+			// Intervals
+			//
+			////////////////////////////////////////////////////////////////////////////
+			@Override
+			public Interval[] getColumnIntervals() {
+				return columnIntervals;
+			}
+
+			@Override
+			public Interval[] getRowIntervals() {
+				return rowIntervals;
+			}
+
+			////////////////////////////////////////////////////////////////////////////
+			//
+			// Cells
+			//
+			////////////////////////////////////////////////////////////////////////////
+			@Override
+			public Rectangle getComponentCells(IAbstractComponentInfo component) {
+				Assert.instanceOf(ComponentInfo.class, component);
+				return componentToCells.get(component);
+			}
+
+			@Override
+			public Rectangle getCellsRectangle(Rectangle cells) {
+				int x = columnIntervals[cells.x].begin();
+				int y = rowIntervals[cells.y].begin();
+				int w = columnIntervals[cells.right() - 1].end() - x;
+				int h = rowIntervals[cells.bottom() - 1].end() - y;
+				return new Rectangle(x, y, w + 1, h + 1);
+			}
+
+			////////////////////////////////////////////////////////////////////////////
+			//
+			// Feedback
+			//
+			////////////////////////////////////////////////////////////////////////////
+			@Override
+			public boolean isRTL() {
+				return false;
+			}
+
+			@Override
+			public Insets getInsets() {
+				return getContainer().getInsets();
+			}
+
+			////////////////////////////////////////////////////////////////////////////
+			//
+			// Virtual columns
+			//
+			////////////////////////////////////////////////////////////////////////////
+			@Override
+			public boolean hasVirtualColumns() {
+				return true;
+			}
+
+			@Override
+			public int getVirtualColumnSize() {
+				return m_defaultColumnSize;
+			}
+
+			@Override
+			public int getVirtualColumnGap() {
+				return m_gapColumnSize;
+			}
+
+			////////////////////////////////////////////////////////////////////////////
+			//
+			// Virtual rows
+			//
+			////////////////////////////////////////////////////////////////////////////
+			@Override
+			public boolean hasVirtualRows() {
+				return true;
+			}
+
+			@Override
+			public int getVirtualRowSize() {
+				return m_defaultRowSize;
+			}
+
+			@Override
+			public int getVirtualRowGap() {
+				return m_gapRowSize;
+			}
+
+			////////////////////////////////////////////////////////////////////////////
+			//
+			// Checks
+			//
+			////////////////////////////////////////////////////////////////////////////
+			@Override
+			public ComponentInfo getOccupied(int column, int row) {
+				return occupiedCells.get(new Point(column, row));
+			}
+		};
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Manage general layout data.
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final BiMap<GeneralLayoutData.HorizontalAlignment, CellConstraints.Alignment> m_horizontalAlignmentMap =
+			ImmutableBiMap.of(
+					GeneralLayoutData.HorizontalAlignment.LEFT,
+					CellConstraints.LEFT,
+					GeneralLayoutData.HorizontalAlignment.CENTER,
+					CellConstraints.CENTER,
+					GeneralLayoutData.HorizontalAlignment.RIGHT,
+					CellConstraints.RIGHT,
+					GeneralLayoutData.HorizontalAlignment.FILL,
+					CellConstraints.FILL,
+					GeneralLayoutData.HorizontalAlignment.NONE,
+					CellConstraints.DEFAULT);
+	public static final BiMap<GeneralLayoutData.VerticalAlignment, CellConstraints.Alignment> m_verticalAlignmentMap =
+			ImmutableBiMap.of(
+					GeneralLayoutData.VerticalAlignment.TOP,
+					CellConstraints.TOP,
+					GeneralLayoutData.VerticalAlignment.CENTER,
+					CellConstraints.CENTER,
+					GeneralLayoutData.VerticalAlignment.BOTTOM,
+					CellConstraints.BOTTOM,
+					GeneralLayoutData.VerticalAlignment.FILL,
+					CellConstraints.FILL,
+					GeneralLayoutData.VerticalAlignment.NONE,
+					CellConstraints.DEFAULT);
+
+	@Override
+	protected void storeLayoutData(ComponentInfo component) throws Exception {
+		CellConstraintsSupport gridData = getConstraints(component);
+		if (gridData != null) {
+			GeneralLayoutData generalLayoutData = new GeneralLayoutData();
+			int x = gridData.x - 1;
+			int y = gridData.y - 1;
+			int width = gridData.width;
+			int height = gridData.height;
+			int dx = 0;
+			int dy = 0;
+			// correct position
+			for (int i = 0; i < x; i++) {
+				if (m_columns.get(i).isGap()) {
+					dx--;
+				}
+			}
+			for (int j = 0; j < y; j++) {
+				if (m_rows.get(j).isGap()) {
+					dy--;
+				}
+			}
+			// correct size
+			for (int i = 1; i < width; i++) {
+				if (m_columns.get(x + i).isGap()) {
+					width--;
+				}
+			}
+			for (int j = 1; j < height; j++) {
+				if (m_rows.get(y + j).isGap()) {
+					height--;
+				}
+			}
+			// cell
+			generalLayoutData.gridX = x + dx;
+			generalLayoutData.gridY = y + dy;
+			generalLayoutData.spanX = width;
+			generalLayoutData.spanY = height;
+			// grab
+			generalLayoutData.horizontalGrab = m_columns.get(gridData.x - 1).hasGrow();
+			generalLayoutData.verticalGrab = m_rows.get(gridData.y - 1).hasGrow();
+			// alignments
+			generalLayoutData.horizontalAlignment =
+					GeneralLayoutData.getGeneralValue(m_horizontalAlignmentMap, gridData.alignH);
+			generalLayoutData.verticalAlignment =
+					GeneralLayoutData.getGeneralValue(m_verticalAlignmentMap, gridData.alignV);
+			generalLayoutData.putToInfo(component);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the array of {@link Interval}'s for given array of origins.
+	 */
+	private static Interval[] getIntervalsForOrigins(int origins[]) {
+		Assert.isTrue(origins.length != 0);
+		Interval[] intervals = new Interval[origins.length - 1];
+		for (int i = 0; i < intervals.length; i++) {
+			int begin = origins[i];
+			int end = origins[i + 1];
+			intervals[i] = new Interval(begin, end - begin);
+		}
+		return intervals;
+	}
 }
diff --git a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/FormLayoutSurroundProcessor.java b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/FormLayoutSurroundProcessor.java
index 84e3caafc..de14d93ec 100644
--- a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/FormLayoutSurroundProcessor.java
+++ b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/FormLayoutSurroundProcessor.java
@@ -32,92 +32,92 @@
  * @coverage swing.FormLayout.model
  */
 public final class FormLayoutSurroundProcessor
-    implements
-      ISurroundProcessor<ContainerInfo, ComponentInfo> {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final Object INSTANCE = new FormLayoutSurroundProcessor();
+implements
+ISurroundProcessor<ContainerInfo, ComponentInfo> {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final Object INSTANCE = new FormLayoutSurroundProcessor();
 
-  private FormLayoutSurroundProcessor() {
-  }
+	private FormLayoutSurroundProcessor() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ISurroundProcessor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean filter(ContainerInfo sourceContainer, ContainerInfo targetContainer)
-      throws Exception {
-    String targetClassName = targetContainer.getDescription().getComponentClass().getName();
-    boolean isJPanel = targetClassName.equals("javax.swing.JPanel");
-    return sourceContainer.hasLayout()
-        && sourceContainer.getLayout() instanceof FormLayoutInfo
-        && isJPanel;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ISurroundProcessor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean filter(ContainerInfo sourceContainer, ContainerInfo targetContainer)
+			throws Exception {
+		String targetClassName = targetContainer.getDescription().getComponentClass().getName();
+		boolean isJPanel = targetClassName.equals("javax.swing.JPanel");
+		return sourceContainer.hasLayout()
+				&& sourceContainer.getLayout() instanceof FormLayoutInfo
+				&& isJPanel;
+	}
 
-  @Override
-  public void move(ContainerInfo sourceContainer,
-      ContainerInfo targetContainer,
-      List<ComponentInfo> components) throws Exception {
-    // set FormLayout for target
-    FormLayoutInfo targetLayout;
-    {
-      targetLayout =
-          (FormLayoutInfo) JavaInfoUtils.createJavaInfo(
-              targetContainer.getEditor(),
-              "com.jgoodies.forms.layout.FormLayout",
-              new ConstructorCreationSupport());
-      targetContainer.setLayout(targetLayout);
-    }
-    // prepare cells of "targetContainer"
-    Point locationOffset;
-    {
-      Rectangle targetBounds =
-          (Rectangle) targetContainer.getArbitraryValue(FormLayoutSurroundSupport.CELLS_KEY);
-      FormLayoutInfo sourceLayout = (FormLayoutInfo) sourceContainer.getLayout();
-      // copy columns
-      {
-        List<FormColumnInfo> targetColumns = Lists.newArrayList();
-        for (int columnIndex = targetBounds.x; columnIndex < targetBounds.right(); columnIndex++) {
-          FormColumnInfo sourceColumn = sourceLayout.getColumns().get(columnIndex - 1);
-          targetColumns.add(sourceColumn.copy());
-        }
-        targetLayout.setColumns(targetColumns);
-      }
-      // copy rows
-      {
-        List<FormRowInfo> targetRows = Lists.newArrayList();
-        for (int rowIndex = targetBounds.y; rowIndex < targetBounds.bottom(); rowIndex++) {
-          FormRowInfo sourceRow = sourceLayout.getRows().get(rowIndex - 1);
-          targetRows.add(sourceRow.copy());
-        }
-        targetLayout.setRows(targetRows);
-      }
-      //
-      locationOffset = targetBounds.getLocation().getNegated();
-    }
-    // move components
-    for (ComponentInfo component : components) {
-      CellConstraintsSupport oldConstraints = FormLayoutInfo.getConstraints(component);
-      // move component
-      {
-        Rectangle cells = FormLayoutSurroundSupport.getCells(component);
-        cells = cells.getTranslated(locationOffset);
-        targetLayout.command_ADD(component, 1 + cells.x, false, 1 + cells.y, false);
-      }
-      // update constraints
-      {
-        CellConstraintsSupport constraints = FormLayoutInfo.getConstraints(component);
-        constraints.width = oldConstraints.width;
-        constraints.height = oldConstraints.height;
-        constraints.alignH = oldConstraints.alignH;
-        constraints.alignV = oldConstraints.alignV;
-        constraints.write();
-      }
-    }
-  }
+	@Override
+	public void move(ContainerInfo sourceContainer,
+			ContainerInfo targetContainer,
+			List<ComponentInfo> components) throws Exception {
+		// set FormLayout for target
+		FormLayoutInfo targetLayout;
+		{
+			targetLayout =
+					(FormLayoutInfo) JavaInfoUtils.createJavaInfo(
+							targetContainer.getEditor(),
+							"com.jgoodies.forms.layout.FormLayout",
+							new ConstructorCreationSupport());
+			targetContainer.setLayout(targetLayout);
+		}
+		// prepare cells of "targetContainer"
+		Point locationOffset;
+		{
+			Rectangle targetBounds =
+					(Rectangle) targetContainer.getArbitraryValue(FormLayoutSurroundSupport.CELLS_KEY);
+			FormLayoutInfo sourceLayout = (FormLayoutInfo) sourceContainer.getLayout();
+			// copy columns
+			{
+				List<FormColumnInfo> targetColumns = Lists.newArrayList();
+				for (int columnIndex = targetBounds.x; columnIndex < targetBounds.right(); columnIndex++) {
+					FormColumnInfo sourceColumn = sourceLayout.getColumns().get(columnIndex - 1);
+					targetColumns.add(sourceColumn.copy());
+				}
+				targetLayout.setColumns(targetColumns);
+			}
+			// copy rows
+			{
+				List<FormRowInfo> targetRows = Lists.newArrayList();
+				for (int rowIndex = targetBounds.y; rowIndex < targetBounds.bottom(); rowIndex++) {
+					FormRowInfo sourceRow = sourceLayout.getRows().get(rowIndex - 1);
+					targetRows.add(sourceRow.copy());
+				}
+				targetLayout.setRows(targetRows);
+			}
+			//
+			locationOffset = targetBounds.getLocation().getNegated();
+		}
+		// move components
+		for (ComponentInfo component : components) {
+			CellConstraintsSupport oldConstraints = FormLayoutInfo.getConstraints(component);
+			// move component
+			{
+				Rectangle cells = FormLayoutSurroundSupport.getCells(component);
+				cells = cells.getTranslated(locationOffset);
+				targetLayout.command_ADD(component, 1 + cells.x, false, 1 + cells.y, false);
+			}
+			// update constraints
+			{
+				CellConstraintsSupport constraints = FormLayoutInfo.getConstraints(component);
+				constraints.width = oldConstraints.width;
+				constraints.height = oldConstraints.height;
+				constraints.alignH = oldConstraints.alignH;
+				constraints.alignV = oldConstraints.alignV;
+				constraints.write();
+			}
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/FormLayoutSurroundSupport.java b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/FormLayoutSurroundSupport.java
index 2060ac7fa..7af09a340 100644
--- a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/FormLayoutSurroundSupport.java
+++ b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/FormLayoutSurroundSupport.java
@@ -29,95 +29,95 @@
  * @coverage swing.FormLayout.model
  */
 public final class FormLayoutSurroundSupport extends LayoutSurroundSupport {
-  static final String CELLS_KEY = "SurroundSupport_CELLS";
-  private final FormLayoutInfo m_layout;
+	static final String CELLS_KEY = "SurroundSupport_CELLS";
+	private final FormLayoutInfo m_layout;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FormLayoutSurroundSupport(FormLayoutInfo layout) {
-    super(layout);
-    m_layout = layout;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FormLayoutSurroundSupport(FormLayoutInfo layout) {
+		super(layout);
+		m_layout = layout;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Operation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Rectangle m_enclosingCells;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Operation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Rectangle m_enclosingCells;
 
-  @Override
-  protected boolean validateComponents(List<ComponentInfo> components) throws Exception {
-    // prepare enclosing bounds
-    {
-      m_enclosingCells = getCells(components.get(0));
-      for (ComponentInfo component : components) {
-        m_enclosingCells.union(getCells(component));
-      }
-    }
-    // check that there are no other controls in enclosing bounds
-    for (ComponentInfo component : m_layout.getContainer().getChildrenComponents()) {
-      if (!components.contains(component) && m_enclosingCells.intersects(getCells(component))) {
-        return false;
-      }
-    }
-    // continue
-    return super.validateComponents(components);
-  }
+	@Override
+	protected boolean validateComponents(List<ComponentInfo> components) throws Exception {
+		// prepare enclosing bounds
+		{
+			m_enclosingCells = getCells(components.get(0));
+			for (ComponentInfo component : components) {
+				m_enclosingCells.union(getCells(component));
+			}
+		}
+		// check that there are no other controls in enclosing bounds
+		for (ComponentInfo component : m_layout.getContainer().getChildrenComponents()) {
+			if (!components.contains(component) && m_enclosingCells.intersects(getCells(component))) {
+				return false;
+			}
+		}
+		// continue
+		return super.validateComponents(components);
+	}
 
-  @Override
-  protected void addContainer(ContainerInfo container, List<ComponentInfo> components)
-      throws Exception {
-    container.putArbitraryValue(CELLS_KEY, m_enclosingCells);
-    // don't grab
-    {
-      JavaInfoUtils.setParameter(container, GridAlignmentHelper.V_GRAB_HORIZONTAL, "false");
-      JavaInfoUtils.setParameter(container, GridAlignmentHelper.V_GRAB_VERTICAL, "false");
-    }
-    // add container
-    m_layout.command_CREATE(container, m_enclosingCells.x, false, m_enclosingCells.y, false);
-    setCells(container, m_enclosingCells);
-    // set FILL/FILL alignments
-    {
-      CellConstraintsSupport constraints = FormLayoutInfo.getConstraints(container);
-      constraints.alignH = CellConstraints.FILL;
-      constraints.alignV = CellConstraints.FILL;
-      constraints.write();
-    }
-  }
+	@Override
+	protected void addContainer(ContainerInfo container, List<ComponentInfo> components)
+			throws Exception {
+		container.putArbitraryValue(CELLS_KEY, m_enclosingCells);
+		// don't grab
+		{
+			JavaInfoUtils.setParameter(container, GridAlignmentHelper.V_GRAB_HORIZONTAL, "false");
+			JavaInfoUtils.setParameter(container, GridAlignmentHelper.V_GRAB_VERTICAL, "false");
+		}
+		// add container
+		m_layout.command_CREATE(container, m_enclosingCells.x, false, m_enclosingCells.y, false);
+		setCells(container, m_enclosingCells);
+		// set FILL/FILL alignments
+		{
+			CellConstraintsSupport constraints = FormLayoutInfo.getConstraints(container);
+			constraints.alignH = CellConstraints.FILL;
+			constraints.alignV = CellConstraints.FILL;
+			constraints.write();
+		}
+	}
 
-  @Override
-  protected void moveDone(ContainerInfo container, List<ComponentInfo> components) throws Exception {
-    super.moveDone(container, components);
-    // "container" may be only component in some columns/rows, so no need for spanning
-    m_layout.normalizeSpanning();
-  }
+	@Override
+	protected void moveDone(ContainerInfo container, List<ComponentInfo> components) throws Exception {
+		super.moveDone(container, components);
+		// "container" may be only component in some columns/rows, so no need for spanning
+		m_layout.normalizeSpanning();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets the {@link Rectangle} with grid bounds, i.e. column/row plus width/height span.
-   */
-  static void setCells(ComponentInfo component, Rectangle cells) throws Exception {
-    CellConstraintsSupport constraints = FormLayoutInfo.getConstraints(component);
-    constraints.x = cells.x;
-    constraints.y = cells.y;
-    constraints.width = cells.width;
-    constraints.height = cells.height;
-    constraints.write();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets the {@link Rectangle} with grid bounds, i.e. column/row plus width/height span.
+	 */
+	static void setCells(ComponentInfo component, Rectangle cells) throws Exception {
+		CellConstraintsSupport constraints = FormLayoutInfo.getConstraints(component);
+		constraints.x = cells.x;
+		constraints.y = cells.y;
+		constraints.width = cells.width;
+		constraints.height = cells.height;
+		constraints.write();
+	}
 
-  /**
-   * @return the {@link Rectangle} with grid bounds, i.e. column/row plus width/height span.
-   */
-  static Rectangle getCells(ComponentInfo component) throws Exception {
-    CellConstraintsSupport constraints = FormLayoutInfo.getConstraints(component);
-    return new Rectangle(constraints.x, constraints.y, constraints.width, constraints.height);
-  }
+	/**
+	 * @return the {@link Rectangle} with grid bounds, i.e. column/row plus width/height span.
+	 */
+	static Rectangle getCells(ComponentInfo component) throws Exception {
+		CellConstraintsSupport constraints = FormLayoutInfo.getConstraints(component);
+		return new Rectangle(constraints.x, constraints.y, constraints.width, constraints.height);
+	}
 }
diff --git a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/FormRowInfo.java b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/FormRowInfo.java
index c688adad0..6c942b70f 100644
--- a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/FormRowInfo.java
+++ b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/FormRowInfo.java
@@ -19,56 +19,56 @@
  * @coverage swing.FormLayout.model
  */
 public final class FormRowInfo extends FormDimensionInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FormRowInfo(RowSpec spec) throws Exception {
-    super(spec);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FormRowInfo(RowSpec spec) throws Exception {
+		super(spec);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Copy
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the copy of this {@link FormRowInfo}.
-   */
-  @Override
-  public FormRowInfo copy() throws Exception {
-    return new FormRowInfo((RowSpec) getFormSpec());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Copy
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the copy of this {@link FormRowInfo}.
+	 */
+	@Override
+	public FormRowInfo copy() throws Exception {
+		return new FormRowInfo((RowSpec) getFormSpec());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Templates
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final FormDimensionTemplate[] TEMPLATES = new FormDimensionTemplate[]{
-      new FormDimensionTemplate("DEFAULT_ROWSPEC", true, "default", "default.gif"),
-      new FormDimensionTemplate("PREF_ROWSPEC", true, "preferred", "preferred.gif"),
-      new FormDimensionTemplate("MIN_ROWSPEC", true, "minimum", "minimum.gif"),
-      new FormDimensionTemplate("GLUE_ROWSPEC", true, "glue", "glue.gif"),
-      new FormDimensionTemplate("LABEL_COMPONENT_GAP_ROWSPEC",
-          false,
-          "label component",
-          "related_row.gif"),
-      new FormDimensionTemplate("RELATED_GAP_ROWSPEC", false, "related gap", "related_row.gif"),
-      new FormDimensionTemplate("UNRELATED_GAP_ROWSPEC",
-          false,
-          "unrelated gap",
-          "unrelated_row.gif"),
-      new FormDimensionTemplate("NARROW_LINE_GAP_ROWSPEC",
-          false,
-          "narrow line gap",
-          "narrow_line.gif"),
-      new FormDimensionTemplate("LINE_GAP_ROWSPEC", false, "line gap", "line.gif"),
-      new FormDimensionTemplate("PARAGRAPH_GAP_ROWSPEC", false, "paragraph gap", "paragraph.gif")};
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Templates
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final FormDimensionTemplate[] TEMPLATES = new FormDimensionTemplate[]{
+			new FormDimensionTemplate("DEFAULT_ROWSPEC", true, "default", "default.gif"),
+			new FormDimensionTemplate("PREF_ROWSPEC", true, "preferred", "preferred.gif"),
+			new FormDimensionTemplate("MIN_ROWSPEC", true, "minimum", "minimum.gif"),
+			new FormDimensionTemplate("GLUE_ROWSPEC", true, "glue", "glue.gif"),
+			new FormDimensionTemplate("LABEL_COMPONENT_GAP_ROWSPEC",
+					false,
+					"label component",
+					"related_row.gif"),
+			new FormDimensionTemplate("RELATED_GAP_ROWSPEC", false, "related gap", "related_row.gif"),
+			new FormDimensionTemplate("UNRELATED_GAP_ROWSPEC",
+					false,
+					"unrelated gap",
+					"unrelated_row.gif"),
+			new FormDimensionTemplate("NARROW_LINE_GAP_ROWSPEC",
+					false,
+					"narrow line gap",
+					"narrow_line.gif"),
+			new FormDimensionTemplate("LINE_GAP_ROWSPEC", false, "line gap", "line.gif"),
+			new FormDimensionTemplate("PARAGRAPH_GAP_ROWSPEC", false, "paragraph gap", "paragraph.gif")};
 
-  @Override
-  public FormDimensionTemplate[] getTemplates() {
-    return TEMPLATES;
-  }
+	@Override
+	public FormDimensionTemplate[] getTemplates() {
+		return TEMPLATES;
+	}
 }
diff --git a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/FormSizeConstantInfo.java b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/FormSizeConstantInfo.java
index b6a635464..226dcfea0 100644
--- a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/FormSizeConstantInfo.java
+++ b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/FormSizeConstantInfo.java
@@ -36,234 +36,234 @@
  * @coverage swing.FormLayout.model
  */
 public final class FormSizeConstantInfo {
-  private double m_value;
-  private Unit m_unit;
+	private double m_value;
+	private Unit m_unit;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FormSizeConstantInfo(double value, Unit unit) {
-    m_value = value;
-    m_unit = unit;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FormSizeConstantInfo(double value, Unit unit) {
+		m_value = value;
+		m_unit = unit;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Value
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the size value.
-   */
-  public double getValue() {
-    return m_value;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Value
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the size value.
+	 */
+	public double getValue() {
+		return m_value;
+	}
 
-  /**
-   * @return the size value in pixels.
-   */
-  public int getAsPixels() {
-    return convertToPixels(m_value, m_unit);
-  }
+	/**
+	 * @return the size value in pixels.
+	 */
+	public int getAsPixels() {
+		return convertToPixels(m_value, m_unit);
+	}
 
-  /**
-   * Sets the size value.
-   */
-  public void setValue(double value) {
-    m_value = value;
-  }
+	/**
+	 * Sets the size value.
+	 */
+	public void setValue(double value) {
+		m_value = value;
+	}
 
-  /**
-   * Sets the size value as {@link String}.
-   */
-  public void setValueString(String s) {
-    try {
-      m_value = FORMAT.parse(s).doubleValue();
-    } catch (Throwable e) {
-    }
-  }
+	/**
+	 * Sets the size value as {@link String}.
+	 */
+	public void setValueString(String s) {
+		try {
+			m_value = FORMAT.parse(s).doubleValue();
+		} catch (Throwable e) {
+		}
+	}
 
-  /**
-   * Sets the size value as pixels (will convert into current {@link Unit}).
-   */
-  public void setAsPixels(int pixels) throws Exception {
-    m_value = convertFromPixels(pixels, m_unit);
-  }
+	/**
+	 * Sets the size value as pixels (will convert into current {@link Unit}).
+	 */
+	public void setAsPixels(int pixels) throws Exception {
+		m_value = convertFromPixels(pixels, m_unit);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Unit
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link Unit}.
-   */
-  public Unit getUnit() {
-    return m_unit;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Unit
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link Unit}.
+	 */
+	public Unit getUnit() {
+		return m_unit;
+	}
 
-  /**
-   * Sets the {@link Unit}.
-   */
-  public void setUnit(Unit unit) throws Exception {
-    m_value = convertValue(m_value, m_unit, unit);
-    m_unit = unit;
-  }
+	/**
+	 * Sets the {@link Unit}.
+	 */
+	public void setUnit(Unit unit) throws Exception {
+		m_value = convertValue(m_value, m_unit, unit);
+		m_unit = unit;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final DecimalFormat FORMAT =
-      new DecimalFormat("#.#", new DecimalFormatSymbols(Locale.ENGLISH));
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final DecimalFormat FORMAT =
+			new DecimalFormat("#.#", new DecimalFormatSymbols(Locale.ENGLISH));
 
-  /**
-   * @param asString
-   *          is <code>true</code> if string presentation should be used, and <code>false</code> if
-   *          {@link Sizes} source should be used
-   *
-   * @param horizontal
-   *          is <code>true</code> if source for horizontal size should be generated
-   *
-   * @return the source of this {@link FormSizeConstantInfo}.
-   */
-  public String getSource(boolean asString, boolean horizontal) {
-    String encoded;
-    {
-      encoded = FORMAT.format(m_value) + m_unit.abbreviation();
-      encoded = StringUtils.replace(encoded, "dluX", "dlu");
-      encoded = StringUtils.replace(encoded, "dluY", "dlu");
-    }
-    // return encoded or source
-    if (asString) {
-      return encoded;
-    } else {
-      return "com.jgoodies.forms.layout.Sizes.constant(\"" + encoded + "\", " + horizontal + ")";
-    }
-  }
+	/**
+	 * @param asString
+	 *          is <code>true</code> if string presentation should be used, and <code>false</code> if
+	 *          {@link Sizes} source should be used
+	 *
+	 * @param horizontal
+	 *          is <code>true</code> if source for horizontal size should be generated
+	 *
+	 * @return the source of this {@link FormSizeConstantInfo}.
+	 */
+	public String getSource(boolean asString, boolean horizontal) {
+		String encoded;
+		{
+			encoded = FORMAT.format(m_value) + m_unit.abbreviation();
+			encoded = StringUtils.replace(encoded, "dluX", "dlu");
+			encoded = StringUtils.replace(encoded, "dluY", "dlu");
+		}
+		// return encoded or source
+		if (asString) {
+			return encoded;
+		} else {
+			return "com.jgoodies.forms.layout.Sizes.constant(\"" + encoded + "\", " + horizontal + ")";
+		}
+	}
 
-  /**
-   * @return the {@link Size} value.
-   */
-  public Size getSize(boolean horizontal) {
-    return Sizes.constant(getSource(true, horizontal), horizontal);
-  }
+	/**
+	 * @return the {@link Size} value.
+	 */
+	public Size getSize(boolean horizontal) {
+		return Sizes.constant(getSource(true, horizontal), horizontal);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Units conversion
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  static Component m_toolkitComponent = new JFrame();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Units conversion
+	//
+	////////////////////////////////////////////////////////////////////////////
+	static Component m_toolkitComponent = new JFrame();
 
-  /**
-   * @return the value in <code>newUnit</code> converted from <code>oldUnit</code>.
-   */
-  private static double convertValue(double value, Unit oldUnit, Unit newUnit) throws Exception {
-    // special cases
-    if (oldUnit == ConstantSize.CENTIMETER && newUnit == ConstantSize.MILLIMETER) {
-      return value * 10.0;
-    }
-    if (oldUnit == ConstantSize.MILLIMETER && newUnit == ConstantSize.CENTIMETER) {
-      return value / 10.0;
-    }
-    // generic case
-    if (oldUnit != newUnit) {
-      int pixels = convertToPixels(value, oldUnit);
-      return convertFromPixels(pixels, newUnit);
-    }
-    return value;
-  }
+	/**
+	 * @return the value in <code>newUnit</code> converted from <code>oldUnit</code>.
+	 */
+	private static double convertValue(double value, Unit oldUnit, Unit newUnit) throws Exception {
+		// special cases
+		if (oldUnit == ConstantSize.CENTIMETER && newUnit == ConstantSize.MILLIMETER) {
+			return value * 10.0;
+		}
+		if (oldUnit == ConstantSize.MILLIMETER && newUnit == ConstantSize.CENTIMETER) {
+			return value / 10.0;
+		}
+		// generic case
+		if (oldUnit != newUnit) {
+			int pixels = convertToPixels(value, oldUnit);
+			return convertFromPixels(pixels, newUnit);
+		}
+		return value;
+	}
 
-  /**
-   * @return the value in pixels for value in given {@link Unit}.
-   */
-  public static int convertToPixels(double value, Unit unit) {
-    UnitConverter converter = DefaultUnitConverter.getInstance();
-    //
-    int pixels = 0;
-    if (unit == ConstantSize.PIXEL) {
-      pixels = (int) value;
-    } else if (unit == ConstantSize.POINT) {
-      pixels = converter.pointAsPixel((int) value, m_toolkitComponent);
-    } else if (unit == ConstantSize.DLUX) {
-      pixels = converter.dialogUnitXAsPixel((int) value, m_toolkitComponent);
-    } else if (unit == ConstantSize.DLUY) {
-      pixels = converter.dialogUnitYAsPixel((int) value, m_toolkitComponent);
-    } else if (unit == ConstantSize.MILLIMETER) {
-      pixels = converter.millimeterAsPixel(value, m_toolkitComponent);
-    } else if (unit == ConstantSize.CENTIMETER) {
-      pixels = converter.centimeterAsPixel(value, m_toolkitComponent);
-    } else if (unit == ConstantSize.INCH) {
-      pixels = converter.inchAsPixel(value, m_toolkitComponent);
-    }
-    //
-    return pixels;
-  }
+	/**
+	 * @return the value in pixels for value in given {@link Unit}.
+	 */
+	public static int convertToPixels(double value, Unit unit) {
+		UnitConverter converter = DefaultUnitConverter.getInstance();
+		//
+		int pixels = 0;
+		if (unit == ConstantSize.PIXEL) {
+			pixels = (int) value;
+		} else if (unit == ConstantSize.POINT) {
+			pixels = converter.pointAsPixel((int) value, m_toolkitComponent);
+		} else if (unit == ConstantSize.DLUX) {
+			pixels = converter.dialogUnitXAsPixel((int) value, m_toolkitComponent);
+		} else if (unit == ConstantSize.DLUY) {
+			pixels = converter.dialogUnitYAsPixel((int) value, m_toolkitComponent);
+		} else if (unit == ConstantSize.MILLIMETER) {
+			pixels = converter.millimeterAsPixel(value, m_toolkitComponent);
+		} else if (unit == ConstantSize.CENTIMETER) {
+			pixels = converter.centimeterAsPixel(value, m_toolkitComponent);
+		} else if (unit == ConstantSize.INCH) {
+			pixels = converter.inchAsPixel(value, m_toolkitComponent);
+		}
+		//
+		return pixels;
+	}
 
-  /**
-   * @return the value in given {@link Unit} for value in pixels.
-   */
-  public static double convertFromPixels(int pixels, Unit unit) throws Exception {
-    if (unit == ConstantSize.PIXEL) {
-      return pixels;
-    } else if (unit == ConstantSize.POINT) {
-      return convertFromPixelsInt(pixels, "pointAsPixel");
-    } else if (unit == ConstantSize.DLUX) {
-      return convertFromPixelsInt(pixels, "dialogUnitXAsPixel");
-    } else if (unit == ConstantSize.DLUY) {
-      return convertFromPixelsInt(pixels, "dialogUnitYAsPixel");
-    } else if (unit == ConstantSize.MILLIMETER) {
-      return convertFromPixelsDouble(pixels, "millimeterAsPixel");
-    } else if (unit == ConstantSize.CENTIMETER) {
-      return convertFromPixelsDouble(pixels, "centimeterAsPixel");
-    } else {
-      Assert.isTrue(unit == ConstantSize.INCH);
-      return convertFromPixelsDouble(pixels, "inchAsPixel");
-    }
-  }
+	/**
+	 * @return the value in given {@link Unit} for value in pixels.
+	 */
+	public static double convertFromPixels(int pixels, Unit unit) throws Exception {
+		if (unit == ConstantSize.PIXEL) {
+			return pixels;
+		} else if (unit == ConstantSize.POINT) {
+			return convertFromPixelsInt(pixels, "pointAsPixel");
+		} else if (unit == ConstantSize.DLUX) {
+			return convertFromPixelsInt(pixels, "dialogUnitXAsPixel");
+		} else if (unit == ConstantSize.DLUY) {
+			return convertFromPixelsInt(pixels, "dialogUnitYAsPixel");
+		} else if (unit == ConstantSize.MILLIMETER) {
+			return convertFromPixelsDouble(pixels, "millimeterAsPixel");
+		} else if (unit == ConstantSize.CENTIMETER) {
+			return convertFromPixelsDouble(pixels, "centimeterAsPixel");
+		} else {
+			Assert.isTrue(unit == ConstantSize.INCH);
+			return convertFromPixelsDouble(pixels, "inchAsPixel");
+		}
+	}
 
-  /**
-   * @return the value in {@link Unit} corresponding to the given <code>methodName</code> and value
-   *         in pixels.
-   */
-  private static int convertFromPixelsInt(int pixels, String methodName) throws Exception {
-    UnitConverter converter = DefaultUnitConverter.getInstance();
-    Method method =
-        UnitConverter.class.getMethod(methodName, new Class[]{int.class, Component.class});
-    int result = 0;
-    while (true) {
-      Integer newPixelsValue =
-          (Integer) method.invoke(converter, new Object[]{result, m_toolkitComponent});
-      int newPixels = newPixelsValue.intValue();
-      if (newPixels > pixels) {
-        return result;
-      }
-      result++;
-    }
-  }
+	/**
+	 * @return the value in {@link Unit} corresponding to the given <code>methodName</code> and value
+	 *         in pixels.
+	 */
+	private static int convertFromPixelsInt(int pixels, String methodName) throws Exception {
+		UnitConverter converter = DefaultUnitConverter.getInstance();
+		Method method =
+				UnitConverter.class.getMethod(methodName, new Class[]{int.class, Component.class});
+		int result = 0;
+		while (true) {
+			Integer newPixelsValue =
+					(Integer) method.invoke(converter, new Object[]{result, m_toolkitComponent});
+			int newPixels = newPixelsValue.intValue();
+			if (newPixels > pixels) {
+				return result;
+			}
+			result++;
+		}
+	}
 
-  /**
-   * @return the value in {@link Unit} corresponding to the given <code>methodName</code> and value
-   *         in pixels.
-   */
-  private static double convertFromPixelsDouble(int pixels, String methodName) throws Exception {
-    UnitConverter converter = DefaultUnitConverter.getInstance();
-    Method method =
-        UnitConverter.class.getMethod(methodName, new Class[]{double.class, Component.class});
-    double result = 0;
-    while (true) {
-      Integer newPixelsValue = (Integer) method.invoke(
-          converter,
-          new Object[]{Double.valueOf(result), m_toolkitComponent});
-      int newPixels = newPixelsValue.intValue();
-      if (newPixels > pixels) {
-        return (int) (result * 10) / 10.0;
-      }
-      result += 0.05;
-    }
-  }
+	/**
+	 * @return the value in {@link Unit} corresponding to the given <code>methodName</code> and value
+	 *         in pixels.
+	 */
+	private static double convertFromPixelsDouble(int pixels, String methodName) throws Exception {
+		UnitConverter converter = DefaultUnitConverter.getInstance();
+		Method method =
+				UnitConverter.class.getMethod(methodName, new Class[]{double.class, Component.class});
+		double result = 0;
+		while (true) {
+			Integer newPixelsValue = (Integer) method.invoke(
+					converter,
+					new Object[]{Double.valueOf(result), m_toolkitComponent});
+			int newPixels = newPixelsValue.intValue();
+			if (newPixels > pixels) {
+				return (int) (result * 10) / 10.0;
+			}
+			result += 0.05;
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/FormSizeInfo.java b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/FormSizeInfo.java
index fdfdf7eec..70c6b07ea 100644
--- a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/FormSizeInfo.java
+++ b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/FormSizeInfo.java
@@ -25,301 +25,301 @@
  * @coverage swing.FormLayout.model
  */
 public final class FormSizeInfo {
-  private final boolean m_horizontal;
-  private Size m_componentSize;
-  private FormSizeConstantInfo m_constantSize;
-  private boolean m_hasLowerSize;
-  private FormSizeConstantInfo m_lowerSize;
-  private FormSizeConstantInfo m_upperSize;
-  private boolean m_hasUpperSize;
+	private final boolean m_horizontal;
+	private Size m_componentSize;
+	private FormSizeConstantInfo m_constantSize;
+	private boolean m_hasLowerSize;
+	private FormSizeConstantInfo m_lowerSize;
+	private FormSizeConstantInfo m_upperSize;
+	private boolean m_hasUpperSize;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FormSizeInfo(Size size, boolean horizontal) throws Exception {
-    m_horizontal = horizontal;
-    Class<?> sizeClass = size.getClass();
-    String sizeClassName = sizeClass.getName();
-    if (sizeClassName.equals("com.jgoodies.forms.layout.ConstantSize")) {
-      m_constantSize = createConstant(size);
-    } else if (sizeClassName.equals("com.jgoodies.forms.layout.Sizes$ComponentSize")) {
-      m_componentSize = size;
-    } else {
-      Assert.isTrue(sizeClassName.equals("com.jgoodies.forms.layout.BoundedSize"));
-      // component
-      {
-        Size basic = (Size) ReflectionUtils.getFieldByName(sizeClass, "basis").get(size);
-        Assert.isTrue(basic == Sizes.DEFAULT || basic == Sizes.MINIMUM || basic == Sizes.PREFERRED);
-        m_componentSize = basic;
-      }
-      // lower bound
-      {
-        Size lower = (Size) ReflectionUtils.getFieldByName(sizeClass, "lowerBound").get(size);
-        setLowerSize(createConstant(lower));
-      }
-      // upper bound
-      {
-        Size upper = (Size) ReflectionUtils.getFieldByName(sizeClass, "upperBound").get(size);
-        setUpperSize(createConstant(upper));
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FormSizeInfo(Size size, boolean horizontal) throws Exception {
+		m_horizontal = horizontal;
+		Class<?> sizeClass = size.getClass();
+		String sizeClassName = sizeClass.getName();
+		if (sizeClassName.equals("com.jgoodies.forms.layout.ConstantSize")) {
+			m_constantSize = createConstant(size);
+		} else if (sizeClassName.equals("com.jgoodies.forms.layout.Sizes$ComponentSize")) {
+			m_componentSize = size;
+		} else {
+			Assert.isTrue(sizeClassName.equals("com.jgoodies.forms.layout.BoundedSize"));
+			// component
+			{
+				Size basic = (Size) ReflectionUtils.getFieldByName(sizeClass, "basis").get(size);
+				Assert.isTrue(basic == Sizes.DEFAULT || basic == Sizes.MINIMUM || basic == Sizes.PREFERRED);
+				m_componentSize = basic;
+			}
+			// lower bound
+			{
+				Size lower = (Size) ReflectionUtils.getFieldByName(sizeClass, "lowerBound").get(size);
+				setLowerSize(createConstant(lower));
+			}
+			// upper bound
+			{
+				Size upper = (Size) ReflectionUtils.getFieldByName(sizeClass, "upperBound").get(size);
+				setUpperSize(createConstant(upper));
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Creation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link FormSizeConstantInfo} for given {@link ConstantSize} instance.
-   */
-  private static FormSizeConstantInfo createConstant(Size size) throws Exception {
-    if (size != null) {
-      Class<?> sizeClass = size.getClass();
-      Assert.instanceOf(ConstantSize.class, size);
-      //
-      double value = ReflectionUtils.getFieldByName(sizeClass, "value").getDouble(size);
-      Unit unit = (Unit) ReflectionUtils.getFieldByName(sizeClass, "unit").get(size);
-      return new FormSizeConstantInfo(value, unit);
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Creation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link FormSizeConstantInfo} for given {@link ConstantSize} instance.
+	 */
+	private static FormSizeConstantInfo createConstant(Size size) throws Exception {
+		if (size != null) {
+			Class<?> sizeClass = size.getClass();
+			Assert.instanceOf(ConstantSize.class, size);
+			//
+			double value = ReflectionUtils.getFieldByName(sizeClass, "value").getDouble(size);
+			Unit unit = (Unit) ReflectionUtils.getFieldByName(sizeClass, "unit").get(size);
+			return new FormSizeConstantInfo(value, unit);
+		}
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    return getDisplayString();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		return getDisplayString();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Specification
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the text to display this {@link FormSizeInfo} to user.
-   */
-  public String getDisplayString() {
-    if (m_componentSize == null) {
-      return m_constantSize.getSource(true, m_horizontal);
-    } else {
-      String size;
-      if (m_componentSize == Sizes.DEFAULT) {
-        size = "default";
-      } else if (m_componentSize == Sizes.PREFERRED) {
-        size = "preferred";
-      } else {
-        Assert.isTrue(m_componentSize == Sizes.MINIMUM);
-        size = "minimum";
-      }
-      // add bounds
-      if (m_hasLowerSize) {
-        size = m_lowerSize.getSource(true, m_horizontal) + "<" + size;
-      }
-      if (m_hasUpperSize) {
-        size = size + "<" + m_upperSize.getSource(true, m_horizontal);
-      }
-      // return final size
-      return size;
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Specification
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the text to display this {@link FormSizeInfo} to user.
+	 */
+	public String getDisplayString() {
+		if (m_componentSize == null) {
+			return m_constantSize.getSource(true, m_horizontal);
+		} else {
+			String size;
+			if (m_componentSize == Sizes.DEFAULT) {
+				size = "default";
+			} else if (m_componentSize == Sizes.PREFERRED) {
+				size = "preferred";
+			} else {
+				Assert.isTrue(m_componentSize == Sizes.MINIMUM);
+				size = "minimum";
+			}
+			// add bounds
+			if (m_hasLowerSize) {
+				size = m_lowerSize.getSource(true, m_horizontal) + "<" + size;
+			}
+			if (m_hasUpperSize) {
+				size = size + "<" + m_upperSize.getSource(true, m_horizontal);
+			}
+			// return final size
+			return size;
+		}
+	}
 
-  /**
-   * @return <code>true</code> if this {@link FormSizeInfo} can be represented as encoded
-   *         specification.
-   */
-  public boolean isString() {
-    return !(m_hasLowerSize && m_hasUpperSize);
-  }
+	/**
+	 * @return <code>true</code> if this {@link FormSizeInfo} can be represented as encoded
+	 *         specification.
+	 */
+	public boolean isString() {
+		return !(m_hasLowerSize && m_hasUpperSize);
+	}
 
-  /**
-   * @return the encoded specification or {@link Sizes} invocation code depending on result of
-   *         {@link #isString()}.
-   */
-  public String getSource() {
-    if (isString()) {
-      if (m_componentSize == null) {
-        return m_constantSize.getSource(true, m_horizontal);
-      } else {
-        String size;
-        if (m_componentSize == Sizes.DEFAULT) {
-          size = "default";
-        } else if (m_componentSize == Sizes.PREFERRED) {
-          size = "pref";
-        } else {
-          Assert.isTrue(m_componentSize == Sizes.MINIMUM);
-          size = "min";
-        }
-        // add bounds
-        if (m_hasLowerSize) {
-          size = "max(" + m_lowerSize.getSource(true, m_horizontal) + ";" + size + ")";
-        }
-        if (m_hasUpperSize) {
-          size = "min(" + m_upperSize.getSource(true, m_horizontal) + ";" + size + ")";
-        }
-        // return final size
-        return size;
-      }
-    } else {
-      Assert.isTrue(!isString());
-      String source = "com.jgoodies.forms.layout.Sizes.bounded(";
-      // add component size
-      if (m_componentSize == Sizes.DEFAULT) {
-        source += "com.jgoodies.forms.layout.Sizes.DEFAULT";
-      } else if (m_componentSize == Sizes.PREFERRED) {
-        source += "com.jgoodies.forms.layout.Sizes.PREFERRED";
-      } else {
-        Assert.isTrue(m_componentSize == Sizes.MINIMUM);
-        source += "com.jgoodies.forms.layout.Sizes.MINIMUM";
-      }
-      // add lower bound
-      source += ", ";
-      source += m_lowerSize.getSource(false, m_horizontal);
-      // add upper bound
-      source += ", ";
-      source += m_upperSize.getSource(false, m_horizontal);
-      // finalize
-      source += ")";
-      return source;
-    }
-  }
+	/**
+	 * @return the encoded specification or {@link Sizes} invocation code depending on result of
+	 *         {@link #isString()}.
+	 */
+	public String getSource() {
+		if (isString()) {
+			if (m_componentSize == null) {
+				return m_constantSize.getSource(true, m_horizontal);
+			} else {
+				String size;
+				if (m_componentSize == Sizes.DEFAULT) {
+					size = "default";
+				} else if (m_componentSize == Sizes.PREFERRED) {
+					size = "pref";
+				} else {
+					Assert.isTrue(m_componentSize == Sizes.MINIMUM);
+					size = "min";
+				}
+				// add bounds
+				if (m_hasLowerSize) {
+					size = "max(" + m_lowerSize.getSource(true, m_horizontal) + ";" + size + ")";
+				}
+				if (m_hasUpperSize) {
+					size = "min(" + m_upperSize.getSource(true, m_horizontal) + ";" + size + ")";
+				}
+				// return final size
+				return size;
+			}
+		} else {
+			Assert.isTrue(!isString());
+			String source = "com.jgoodies.forms.layout.Sizes.bounded(";
+			// add component size
+			if (m_componentSize == Sizes.DEFAULT) {
+				source += "com.jgoodies.forms.layout.Sizes.DEFAULT";
+			} else if (m_componentSize == Sizes.PREFERRED) {
+				source += "com.jgoodies.forms.layout.Sizes.PREFERRED";
+			} else {
+				Assert.isTrue(m_componentSize == Sizes.MINIMUM);
+				source += "com.jgoodies.forms.layout.Sizes.MINIMUM";
+			}
+			// add lower bound
+			source += ", ";
+			source += m_lowerSize.getSource(false, m_horizontal);
+			// add upper bound
+			source += ", ";
+			source += m_upperSize.getSource(false, m_horizontal);
+			// finalize
+			source += ")";
+			return source;
+		}
+	}
 
-  /**
-   * @return the {@link Size} value.
-   */
-  public Size getSize() {
-    if (m_componentSize == null) {
-      return m_constantSize.getSize(m_horizontal);
-    } else {
-      Size size = m_componentSize;
-      // add bounds
-      if (m_hasLowerSize && m_hasUpperSize) {
-        return Sizes.bounded(
-            size,
-            m_lowerSize.getSize(m_horizontal),
-            m_upperSize.getSize(m_horizontal));
-      } else if (m_hasLowerSize) {
-        return Sizes.bounded(size, m_lowerSize.getSize(m_horizontal), null);
-      } else if (m_hasUpperSize) {
-        return Sizes.bounded(size, null, m_upperSize.getSize(m_horizontal));
-      }
-      // return pure component size
-      return size;
-    }
-  }
+	/**
+	 * @return the {@link Size} value.
+	 */
+	public Size getSize() {
+		if (m_componentSize == null) {
+			return m_constantSize.getSize(m_horizontal);
+		} else {
+			Size size = m_componentSize;
+			// add bounds
+			if (m_hasLowerSize && m_hasUpperSize) {
+				return Sizes.bounded(
+						size,
+						m_lowerSize.getSize(m_horizontal),
+						m_upperSize.getSize(m_horizontal));
+			} else if (m_hasLowerSize) {
+				return Sizes.bounded(size, m_lowerSize.getSize(m_horizontal), null);
+			} else if (m_hasUpperSize) {
+				return Sizes.bounded(size, null, m_upperSize.getSize(m_horizontal));
+			}
+			// return pure component size
+			return size;
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Component
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the component size.
-   */
-  public Size getComponentSize() {
-    return m_componentSize;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Component
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the component size.
+	 */
+	public Size getComponentSize() {
+		return m_componentSize;
+	}
 
-  /**
-   * Sets the component size.
-   */
-  public void setComponentSize(Size componentSize) {
-    m_componentSize = componentSize;
-  }
+	/**
+	 * Sets the component size.
+	 */
+	public void setComponentSize(Size componentSize) {
+		m_componentSize = componentSize;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constant
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the constant size.
-   */
-  public FormSizeConstantInfo getConstantSize() {
-    return m_constantSize;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constant
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the constant size.
+	 */
+	public FormSizeConstantInfo getConstantSize() {
+		return m_constantSize;
+	}
 
-  /**
-   * Sets the constant size.
-   */
-  public void setConstantSize(FormSizeConstantInfo constantSize) {
-    m_constantSize = constantSize;
-    if (m_constantSize != null) {
-      m_componentSize = null;
-    }
-  }
+	/**
+	 * Sets the constant size.
+	 */
+	public void setConstantSize(FormSizeConstantInfo constantSize) {
+		m_constantSize = constantSize;
+		if (m_constantSize != null) {
+			m_componentSize = null;
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Lower bound
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if there is lower bound size.
-   */
-  public boolean hasLowerSize() {
-    return m_hasLowerSize;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Lower bound
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if there is lower bound size.
+	 */
+	public boolean hasLowerSize() {
+		return m_hasLowerSize;
+	}
 
-  /**
-   * Sets the flag of lower bound size.
-   */
-  public void setLowerSize(boolean hasLowerSize) {
-    m_hasLowerSize = hasLowerSize;
-  }
+	/**
+	 * Sets the flag of lower bound size.
+	 */
+	public void setLowerSize(boolean hasLowerSize) {
+		m_hasLowerSize = hasLowerSize;
+	}
 
-  /**
-   * @return the lower bound size for bounded size.
-   */
-  public FormSizeConstantInfo getLowerSize() {
-    return m_lowerSize;
-  }
+	/**
+	 * @return the lower bound size for bounded size.
+	 */
+	public FormSizeConstantInfo getLowerSize() {
+		return m_lowerSize;
+	}
 
-  /**
-   * Sets the lower bound size for bounded size.
-   */
-  public void setLowerSize(FormSizeConstantInfo lowerSize) {
-    m_lowerSize = lowerSize;
-    m_hasLowerSize = m_lowerSize != null;
-  }
+	/**
+	 * Sets the lower bound size for bounded size.
+	 */
+	public void setLowerSize(FormSizeConstantInfo lowerSize) {
+		m_lowerSize = lowerSize;
+		m_hasLowerSize = m_lowerSize != null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Upper bound
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if there is upper bound size.
-   */
-  public boolean hasUpperSize() {
-    return m_hasUpperSize;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Upper bound
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if there is upper bound size.
+	 */
+	public boolean hasUpperSize() {
+		return m_hasUpperSize;
+	}
 
-  /**
-   * Sets the flag of upper bound size.
-   */
-  public void setUpperSize(boolean hasUpperSize) {
-    m_hasUpperSize = hasUpperSize;
-  }
+	/**
+	 * Sets the flag of upper bound size.
+	 */
+	public void setUpperSize(boolean hasUpperSize) {
+		m_hasUpperSize = hasUpperSize;
+	}
 
-  /**
-   * @return the upper bound size for bounded size.
-   */
-  public FormSizeConstantInfo getUpperSize() {
-    return m_upperSize;
-  }
+	/**
+	 * @return the upper bound size for bounded size.
+	 */
+	public FormSizeConstantInfo getUpperSize() {
+		return m_upperSize;
+	}
 
-  /**
-   * Sets the upper bound size for bounded size.
-   */
-  public void setUpperSize(FormSizeConstantInfo upperSize) {
-    m_upperSize = upperSize;
-    m_hasUpperSize = m_upperSize != null;
-  }
+	/**
+	 * Sets the upper bound size for bounded size.
+	 */
+	public void setUpperSize(FormSizeConstantInfo upperSize) {
+		m_upperSize = upperSize;
+		m_hasUpperSize = m_upperSize != null;
+	}
 }
diff --git a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/IPreferenceConstants.java b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/IPreferenceConstants.java
index 3318f9325..310f3a851 100644
--- a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/IPreferenceConstants.java
+++ b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/IPreferenceConstants.java
@@ -19,14 +19,14 @@
  * @coverage swing.FormLayout.model
  */
 public interface IPreferenceConstants {
-  /**
-   * When <code>true</code>, {@link FormLayoutInfo} can use
-   * {@link GridAlignmentHelper#V_GRAB_HORIZONTAL} and {@link #V_GRAB_VERTICAL}.
-   */
-  String P_ENABLE_GRAB = "FormLayout.enableGrab";
-  /**
-   * When <code>true</code>, {@link FormLayoutInfo} can use
-   * {@link GridAlignmentHelper#V_RIGHT_LABEL} and {@link GridAlignmentHelper#V_RIGHT_TARGET}.
-   */
-  String P_ENABLE_RIGHT_ALIGNMENT = "FormLayout.enableRightAlignment";
+	/**
+	 * When <code>true</code>, {@link FormLayoutInfo} can use
+	 * {@link GridAlignmentHelper#V_GRAB_HORIZONTAL} and {@link #V_GRAB_VERTICAL}.
+	 */
+	String P_ENABLE_GRAB = "FormLayout.enableGrab";
+	/**
+	 * When <code>true</code>, {@link FormLayoutInfo} can use
+	 * {@link GridAlignmentHelper#V_RIGHT_LABEL} and {@link GridAlignmentHelper#V_RIGHT_TARGET}.
+	 */
+	String P_ENABLE_RIGHT_ALIGNMENT = "FormLayout.enableRightAlignment";
 }
diff --git a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/ModelMessages.java b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/ModelMessages.java
index 4bf7f7554..182f914a4 100644
--- a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/ModelMessages.java
+++ b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/ModelMessages.java
@@ -3,92 +3,92 @@
 import org.eclipse.osgi.util.NLS;
 
 public class ModelMessages extends NLS {
-  private static final String BUNDLE_NAME =
-      "org.eclipse.wb.internal.swing.FormLayout.model.ModelMessages"; //$NON-NLS-1$
-  public static String CellConstraintsAssistantPage_gridGroup;
-  public static String CellConstraintsAssistantPage_gridHeight;
-  public static String CellConstraintsAssistantPage_gridWidth;
-  public static String CellConstraintsAssistantPage_gridX;
-  public static String CellConstraintsAssistantPage_gridY;
-  public static String CellConstraintsAssistantPage_haCenter;
-  public static String CellConstraintsAssistantPage_haDefault;
-  public static String CellConstraintsAssistantPage_haFill;
-  public static String CellConstraintsAssistantPage_haLeft;
-  public static String CellConstraintsAssistantPage_haRight;
-  public static String CellConstraintsAssistantPage_horizontalGroup;
-  public static String CellConstraintsAssistantPage_vaBottom;
-  public static String CellConstraintsAssistantPage_vaCenter;
-  public static String CellConstraintsAssistantPage_vaDefault;
-  public static String CellConstraintsAssistantPage_vaFill;
-  public static String CellConstraintsAssistantPage_vaTop;
-  public static String CellConstraintsAssistantPage_verticalGroup;
-  public static String CellConstraintsSupport_alignmentExpected;
-  public static String CellConstraintsSupport_haCenter;
-  public static String CellConstraintsSupport_haDefault;
-  public static String CellConstraintsSupport_haFill;
-  public static String CellConstraintsSupport_haLeft;
-  public static String CellConstraintsSupport_haRight;
-  public static String CellConstraintsSupport_horizontalAlignment;
-  public static String CellConstraintsSupport_integerExpected;
-  public static String CellConstraintsSupport_outOfRange;
-  public static String CellConstraintsSupport_vaBottom;
-  public static String CellConstraintsSupport_vaCenter;
-  public static String CellConstraintsSupport_vaDefault;
-  public static String CellConstraintsSupport_vaFill;
-  public static String CellConstraintsSupport_vaTop;
-  public static String CellConstraintsSupport_verticalAlignment;
-  public static String ColumnsDialog_dialogMessage;
-  public static String ColumnsDialog_dialogTitle;
-  public static String ColumnsDialog_minimalErrorMessage;
-  public static String ColumnsDialog_viewerTitle;
-  public static String DimensionEditDialog_18;
-  public static String DimensionEditDialog_19;
-  public static String DimensionEditDialog_20;
-  public static String DimensionEditDialog_applyButton;
-  public static String DimensionEditDialog_applyConfirmMessage;
-  public static String DimensionEditDialog_applyConfirmTitle;
-  public static String DimensionEditDialog_defaultAlignment;
-  public static String DimensionEditDialog_dialogTitle;
-  public static String DimensionEditDialog_nextButton;
-  public static String DimensionEditDialog_previousButton;
-  public static String DimensionEditDialog_resizeBehavior;
-  public static String DimensionEditDialog_size;
-  public static String DimensionEditDialog_specification;
-  public static String DimensionEditDialog_template;
-  public static String DimensionsDialog_alignmentColumn;
-  public static String DimensionsDialog_appendButton;
-  public static String DimensionsDialog_editButton;
-  public static String DimensionsDialog_insertButton;
-  public static String DimensionsDialog_moveDownButton;
-  public static String DimensionsDialog_moveUpButton;
-  public static String DimensionsDialog_numberColumn;
-  public static String DimensionsDialog_removeButton;
-  public static String DimensionsDialog_resizingColumn;
-  public static String DimensionsDialog_sizeColumn;
-  public static String DimensionsDialog_templateColumn;
-  public static String FormLayoutInfo_editColumns;
-  public static String FormLayoutInfo_editRows;
-  public static String FormLayoutInfo_evenDiffNumColumns;
-  public static String FormLayoutInfo_evenDiffNumRows;
-  public static String RowsDialog_dialogMessage;
-  public static String RowsDialog_dialogTitle;
-  public static String RowsDialog_minimalErrorMesssage;
-  public static String RowsDialog_viewerTitle;
-  public static String SelectionActionsSupport_haCenter;
-  public static String SelectionActionsSupport_haDefault;
-  public static String SelectionActionsSupport_haFill;
-  public static String SelectionActionsSupport_haLeft;
-  public static String SelectionActionsSupport_haRight;
-  public static String SelectionActionsSupport_haTop;
-  public static String SelectionActionsSupport_vaBottom;
-  public static String SelectionActionsSupport_vaCenter;
-  public static String SelectionActionsSupport_vaDefault;
-  public static String SelectionActionsSupport_vaFill;
-  static {
-    // initialize resource bundle
-    NLS.initializeMessages(BUNDLE_NAME, ModelMessages.class);
-  }
+	private static final String BUNDLE_NAME =
+			"org.eclipse.wb.internal.swing.FormLayout.model.ModelMessages"; //$NON-NLS-1$
+	public static String CellConstraintsAssistantPage_gridGroup;
+	public static String CellConstraintsAssistantPage_gridHeight;
+	public static String CellConstraintsAssistantPage_gridWidth;
+	public static String CellConstraintsAssistantPage_gridX;
+	public static String CellConstraintsAssistantPage_gridY;
+	public static String CellConstraintsAssistantPage_haCenter;
+	public static String CellConstraintsAssistantPage_haDefault;
+	public static String CellConstraintsAssistantPage_haFill;
+	public static String CellConstraintsAssistantPage_haLeft;
+	public static String CellConstraintsAssistantPage_haRight;
+	public static String CellConstraintsAssistantPage_horizontalGroup;
+	public static String CellConstraintsAssistantPage_vaBottom;
+	public static String CellConstraintsAssistantPage_vaCenter;
+	public static String CellConstraintsAssistantPage_vaDefault;
+	public static String CellConstraintsAssistantPage_vaFill;
+	public static String CellConstraintsAssistantPage_vaTop;
+	public static String CellConstraintsAssistantPage_verticalGroup;
+	public static String CellConstraintsSupport_alignmentExpected;
+	public static String CellConstraintsSupport_haCenter;
+	public static String CellConstraintsSupport_haDefault;
+	public static String CellConstraintsSupport_haFill;
+	public static String CellConstraintsSupport_haLeft;
+	public static String CellConstraintsSupport_haRight;
+	public static String CellConstraintsSupport_horizontalAlignment;
+	public static String CellConstraintsSupport_integerExpected;
+	public static String CellConstraintsSupport_outOfRange;
+	public static String CellConstraintsSupport_vaBottom;
+	public static String CellConstraintsSupport_vaCenter;
+	public static String CellConstraintsSupport_vaDefault;
+	public static String CellConstraintsSupport_vaFill;
+	public static String CellConstraintsSupport_vaTop;
+	public static String CellConstraintsSupport_verticalAlignment;
+	public static String ColumnsDialog_dialogMessage;
+	public static String ColumnsDialog_dialogTitle;
+	public static String ColumnsDialog_minimalErrorMessage;
+	public static String ColumnsDialog_viewerTitle;
+	public static String DimensionEditDialog_18;
+	public static String DimensionEditDialog_19;
+	public static String DimensionEditDialog_20;
+	public static String DimensionEditDialog_applyButton;
+	public static String DimensionEditDialog_applyConfirmMessage;
+	public static String DimensionEditDialog_applyConfirmTitle;
+	public static String DimensionEditDialog_defaultAlignment;
+	public static String DimensionEditDialog_dialogTitle;
+	public static String DimensionEditDialog_nextButton;
+	public static String DimensionEditDialog_previousButton;
+	public static String DimensionEditDialog_resizeBehavior;
+	public static String DimensionEditDialog_size;
+	public static String DimensionEditDialog_specification;
+	public static String DimensionEditDialog_template;
+	public static String DimensionsDialog_alignmentColumn;
+	public static String DimensionsDialog_appendButton;
+	public static String DimensionsDialog_editButton;
+	public static String DimensionsDialog_insertButton;
+	public static String DimensionsDialog_moveDownButton;
+	public static String DimensionsDialog_moveUpButton;
+	public static String DimensionsDialog_numberColumn;
+	public static String DimensionsDialog_removeButton;
+	public static String DimensionsDialog_resizingColumn;
+	public static String DimensionsDialog_sizeColumn;
+	public static String DimensionsDialog_templateColumn;
+	public static String FormLayoutInfo_editColumns;
+	public static String FormLayoutInfo_editRows;
+	public static String FormLayoutInfo_evenDiffNumColumns;
+	public static String FormLayoutInfo_evenDiffNumRows;
+	public static String RowsDialog_dialogMessage;
+	public static String RowsDialog_dialogTitle;
+	public static String RowsDialog_minimalErrorMesssage;
+	public static String RowsDialog_viewerTitle;
+	public static String SelectionActionsSupport_haCenter;
+	public static String SelectionActionsSupport_haDefault;
+	public static String SelectionActionsSupport_haFill;
+	public static String SelectionActionsSupport_haLeft;
+	public static String SelectionActionsSupport_haRight;
+	public static String SelectionActionsSupport_haTop;
+	public static String SelectionActionsSupport_vaBottom;
+	public static String SelectionActionsSupport_vaCenter;
+	public static String SelectionActionsSupport_vaDefault;
+	public static String SelectionActionsSupport_vaFill;
+	static {
+		// initialize resource bundle
+		NLS.initializeMessages(BUNDLE_NAME, ModelMessages.class);
+	}
 
-  private ModelMessages() {
-  }
+	private ModelMessages() {
+	}
 }
diff --git a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/PreferenceInitializer.java b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/PreferenceInitializer.java
index 1d39d0991..4de616b46 100644
--- a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/PreferenceInitializer.java
+++ b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/PreferenceInitializer.java
@@ -22,17 +22,17 @@
  * @coverage swing.FormLayout.model
  */
 public final class PreferenceInitializer extends AbstractPreferenceInitializer
-    implements
-      IPreferenceConstants {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  //	Initializing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void initializeDefaultPreferences() {
-    IPreferenceStore preferenceStore = Activator.getDefault().getPreferenceStore();
-    preferenceStore.setDefault(P_ENABLE_GRAB, true);
-    preferenceStore.setDefault(P_ENABLE_RIGHT_ALIGNMENT, true);
-  }
+implements
+IPreferenceConstants {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	//	Initializing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void initializeDefaultPreferences() {
+		IPreferenceStore preferenceStore = Activator.getDefault().getPreferenceStore();
+		preferenceStore.setDefault(P_ENABLE_GRAB, true);
+		preferenceStore.setDefault(P_ENABLE_RIGHT_ALIGNMENT, true);
+	}
 }
diff --git a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/SelectionActionsSupport.java b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/SelectionActionsSupport.java
index 85a400144..4ed81ae49 100644
--- a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/SelectionActionsSupport.java
+++ b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/SelectionActionsSupport.java
@@ -31,223 +31,223 @@
  * @coverage swing.FormLayout.model
  */
 public class SelectionActionsSupport extends ObjectEventListener {
-  private final FormLayoutInfo m_layout;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SelectionActionsSupport(FormLayoutInfo layout) {
-    m_layout = layout;
-    m_layout.addBroadcastListener(this);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ObjectEventListener
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void addSelectionActions(List<ObjectInfo> objects, List<Object> actions) throws Exception {
-    if (objects.isEmpty()) {
-      return;
-    }
-    // prepare constraints
-    List<CellConstraintsSupport> constraints = Lists.newArrayList();
-    for (ObjectInfo object : objects) {
-      // check object
-      if (!(object instanceof ComponentInfo) || object.getParent() != m_layout.getContainer()) {
-        return;
-      }
-      // add data info
-      ComponentInfo component = (ComponentInfo) object;
-      constraints.add(FormLayoutInfo.getConstraints(component));
-    }
-    // create horizontal actions
-    actions.add(new Separator());
-    addAlignmentAction(
-        actions,
-        constraints,
-        true,
-        "default.gif",
-        ModelMessages.SelectionActionsSupport_haDefault,
-        CellConstraints.DEFAULT);
-    addAlignmentAction(
-        actions,
-        constraints,
-        true,
-        "left.gif",
-        ModelMessages.SelectionActionsSupport_haLeft,
-        CellConstraints.LEFT);
-    addAlignmentAction(
-        actions,
-        constraints,
-        true,
-        "center.gif",
-        ModelMessages.SelectionActionsSupport_haCenter,
-        CellConstraints.CENTER);
-    addAlignmentAction(
-        actions,
-        constraints,
-        true,
-        "right.gif",
-        ModelMessages.SelectionActionsSupport_haRight,
-        CellConstraints.RIGHT);
-    addAlignmentAction(
-        actions,
-        constraints,
-        true,
-        "fill.gif",
-        ModelMessages.SelectionActionsSupport_haFill,
-        CellConstraints.FILL);
-    // create vertical actions
-    actions.add(new Separator());
-    addAlignmentAction(
-        actions,
-        constraints,
-        false,
-        "default.gif",
-        ModelMessages.SelectionActionsSupport_vaDefault,
-        CellConstraints.DEFAULT);
-    addAlignmentAction(
-        actions,
-        constraints,
-        false,
-        "top.gif",
-        ModelMessages.SelectionActionsSupport_haTop,
-        CellConstraints.TOP);
-    addAlignmentAction(
-        actions,
-        constraints,
-        false,
-        "center.gif",
-        ModelMessages.SelectionActionsSupport_vaCenter,
-        CellConstraints.CENTER);
-    addAlignmentAction(
-        actions,
-        constraints,
-        false,
-        "bottom.gif",
-        ModelMessages.SelectionActionsSupport_vaBottom,
-        CellConstraints.BOTTOM);
-    addAlignmentAction(
-        actions,
-        constraints,
-        false,
-        "fill.gif",
-        ModelMessages.SelectionActionsSupport_vaFill,
-        CellConstraints.FILL);
-  }
-
-  private void addAlignmentAction(List<Object> actions,
-      List<CellConstraintsSupport> constraints,
-      boolean horizontal,
-      String iconPath,
-      String tooltip,
-      CellConstraints.Alignment alignment) {
-    boolean isChecked = true;
-    // prepare select current value
-    for (CellConstraintsSupport constraint : constraints) {
-      if (horizontal) {
-        if (constraint.alignH != alignment) {
-          isChecked = false;
-          break;
-        }
-      } else {
-        if (constraint.alignV != alignment) {
-          isChecked = false;
-          break;
-        }
-      }
-    }
-    // create action
-    AlignmentAction action =
-        new AlignmentAction(constraints, horizontal, iconPath, tooltip, isChecked, alignment);
-    actions.add(action);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Actions
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private abstract class AbstractAction extends ObjectInfoAction {
-    private final List<CellConstraintsSupport> m_constraints;
-    private final boolean m_horizontal;
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public AbstractAction(int style,
-        List<CellConstraintsSupport> constraints,
-        boolean horizontal,
-        String iconPath,
-        String tooltip,
-        boolean checked) {
-      super(m_layout, "", style);
-      m_constraints = constraints;
-      m_horizontal = horizontal;
-      String path = "alignment/" + (m_horizontal ? "h" : "v") + "/menu/" + iconPath;
-      setImageDescriptor(Activator.getImageDescriptor(path));
-      setToolTipText(tooltip);
-      setChecked(checked);
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Run
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    protected void runEx() throws Exception {
-      for (CellConstraintsSupport constraint : m_constraints) {
-        if (m_horizontal) {
-          handleHorizontal(constraint);
-        } else {
-          handleVertical(constraint);
-        }
-        constraint.write();
-      }
-    }
-
-    protected abstract void handleHorizontal(CellConstraintsSupport constraint) throws Exception;
-
-    protected abstract void handleVertical(CellConstraintsSupport constraint) throws Exception;
-  }
-  private final class AlignmentAction extends AbstractAction {
-    private final CellConstraints.Alignment m_alignment;
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public AlignmentAction(List<CellConstraintsSupport> constraints,
-        boolean horizontal,
-        String iconPath,
-        String tooltip,
-        boolean checked,
-        CellConstraints.Alignment alignment) {
-      super(AS_RADIO_BUTTON, constraints, horizontal, iconPath, tooltip, checked);
-      m_alignment = alignment;
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // AbstractAction
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    protected void handleHorizontal(CellConstraintsSupport constraint) throws Exception {
-      constraint.alignH = m_alignment;
-    }
-
-    @Override
-    protected void handleVertical(CellConstraintsSupport constraint) throws Exception {
-      constraint.alignV = m_alignment;
-    }
-  }
+	private final FormLayoutInfo m_layout;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SelectionActionsSupport(FormLayoutInfo layout) {
+		m_layout = layout;
+		m_layout.addBroadcastListener(this);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ObjectEventListener
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void addSelectionActions(List<ObjectInfo> objects, List<Object> actions) throws Exception {
+		if (objects.isEmpty()) {
+			return;
+		}
+		// prepare constraints
+		List<CellConstraintsSupport> constraints = Lists.newArrayList();
+		for (ObjectInfo object : objects) {
+			// check object
+			if (!(object instanceof ComponentInfo) || object.getParent() != m_layout.getContainer()) {
+				return;
+			}
+			// add data info
+			ComponentInfo component = (ComponentInfo) object;
+			constraints.add(FormLayoutInfo.getConstraints(component));
+		}
+		// create horizontal actions
+		actions.add(new Separator());
+		addAlignmentAction(
+				actions,
+				constraints,
+				true,
+				"default.gif",
+				ModelMessages.SelectionActionsSupport_haDefault,
+				CellConstraints.DEFAULT);
+		addAlignmentAction(
+				actions,
+				constraints,
+				true,
+				"left.gif",
+				ModelMessages.SelectionActionsSupport_haLeft,
+				CellConstraints.LEFT);
+		addAlignmentAction(
+				actions,
+				constraints,
+				true,
+				"center.gif",
+				ModelMessages.SelectionActionsSupport_haCenter,
+				CellConstraints.CENTER);
+		addAlignmentAction(
+				actions,
+				constraints,
+				true,
+				"right.gif",
+				ModelMessages.SelectionActionsSupport_haRight,
+				CellConstraints.RIGHT);
+		addAlignmentAction(
+				actions,
+				constraints,
+				true,
+				"fill.gif",
+				ModelMessages.SelectionActionsSupport_haFill,
+				CellConstraints.FILL);
+		// create vertical actions
+		actions.add(new Separator());
+		addAlignmentAction(
+				actions,
+				constraints,
+				false,
+				"default.gif",
+				ModelMessages.SelectionActionsSupport_vaDefault,
+				CellConstraints.DEFAULT);
+		addAlignmentAction(
+				actions,
+				constraints,
+				false,
+				"top.gif",
+				ModelMessages.SelectionActionsSupport_haTop,
+				CellConstraints.TOP);
+		addAlignmentAction(
+				actions,
+				constraints,
+				false,
+				"center.gif",
+				ModelMessages.SelectionActionsSupport_vaCenter,
+				CellConstraints.CENTER);
+		addAlignmentAction(
+				actions,
+				constraints,
+				false,
+				"bottom.gif",
+				ModelMessages.SelectionActionsSupport_vaBottom,
+				CellConstraints.BOTTOM);
+		addAlignmentAction(
+				actions,
+				constraints,
+				false,
+				"fill.gif",
+				ModelMessages.SelectionActionsSupport_vaFill,
+				CellConstraints.FILL);
+	}
+
+	private void addAlignmentAction(List<Object> actions,
+			List<CellConstraintsSupport> constraints,
+			boolean horizontal,
+			String iconPath,
+			String tooltip,
+			CellConstraints.Alignment alignment) {
+		boolean isChecked = true;
+		// prepare select current value
+		for (CellConstraintsSupport constraint : constraints) {
+			if (horizontal) {
+				if (constraint.alignH != alignment) {
+					isChecked = false;
+					break;
+				}
+			} else {
+				if (constraint.alignV != alignment) {
+					isChecked = false;
+					break;
+				}
+			}
+		}
+		// create action
+		AlignmentAction action =
+				new AlignmentAction(constraints, horizontal, iconPath, tooltip, isChecked, alignment);
+		actions.add(action);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Actions
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private abstract class AbstractAction extends ObjectInfoAction {
+		private final List<CellConstraintsSupport> m_constraints;
+		private final boolean m_horizontal;
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public AbstractAction(int style,
+				List<CellConstraintsSupport> constraints,
+				boolean horizontal,
+				String iconPath,
+				String tooltip,
+				boolean checked) {
+			super(m_layout, "", style);
+			m_constraints = constraints;
+			m_horizontal = horizontal;
+			String path = "alignment/" + (m_horizontal ? "h" : "v") + "/menu/" + iconPath;
+			setImageDescriptor(Activator.getImageDescriptor(path));
+			setToolTipText(tooltip);
+			setChecked(checked);
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Run
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		protected void runEx() throws Exception {
+			for (CellConstraintsSupport constraint : m_constraints) {
+				if (m_horizontal) {
+					handleHorizontal(constraint);
+				} else {
+					handleVertical(constraint);
+				}
+				constraint.write();
+			}
+		}
+
+		protected abstract void handleHorizontal(CellConstraintsSupport constraint) throws Exception;
+
+		protected abstract void handleVertical(CellConstraintsSupport constraint) throws Exception;
+	}
+	private final class AlignmentAction extends AbstractAction {
+		private final CellConstraints.Alignment m_alignment;
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public AlignmentAction(List<CellConstraintsSupport> constraints,
+				boolean horizontal,
+				String iconPath,
+				String tooltip,
+				boolean checked,
+				CellConstraints.Alignment alignment) {
+			super(AS_RADIO_BUTTON, constraints, horizontal, iconPath, tooltip, checked);
+			m_alignment = alignment;
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// AbstractAction
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		protected void handleHorizontal(CellConstraintsSupport constraint) throws Exception {
+			constraint.alignH = m_alignment;
+		}
+
+		@Override
+		protected void handleVertical(CellConstraintsSupport constraint) throws Exception {
+			constraint.alignV = m_alignment;
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/ui/ColumnEditDialog.java b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/ui/ColumnEditDialog.java
index e36aaa1fa..1d2375893 100644
--- a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/ui/ColumnEditDialog.java
+++ b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/ui/ColumnEditDialog.java
@@ -27,30 +27,30 @@
  * @coverage swing.FormLayout.ui
  */
 public final class ColumnEditDialog extends DimensionEditDialog<FormColumnInfo> {
-  private static final DefaultAlignmentDescription[] ALIGNMENTS =
-      new DefaultAlignmentDescription[]{
-          new DefaultAlignmentDescription(ColumnSpec.LEFT, "&left"),
-          new DefaultAlignmentDescription(ColumnSpec.CENTER, "&center"),
-          new DefaultAlignmentDescription(ColumnSpec.RIGHT, "&right"),
-          new DefaultAlignmentDescription(ColumnSpec.FILL, "&fill"),};
-  private static final UnitDescription[] UNITS = new UnitDescription[]{
-      new UnitDescription(ConstantSize.DIALOG_UNITS_X, "Dialog units"),
-      new UnitDescription(ConstantSize.PIXEL, "Pixel"),
-      new UnitDescription(ConstantSize.POINT, "Point"),
-      new UnitDescription(ConstantSize.MILLIMETER, "Millimeter"),
-      new UnitDescription(ConstantSize.CENTIMETER, "Centimeter"),
-      new UnitDescription(ConstantSize.INCH, "Inch"),};
+	private static final DefaultAlignmentDescription[] ALIGNMENTS =
+			new DefaultAlignmentDescription[]{
+					new DefaultAlignmentDescription(ColumnSpec.LEFT, "&left"),
+					new DefaultAlignmentDescription(ColumnSpec.CENTER, "&center"),
+					new DefaultAlignmentDescription(ColumnSpec.RIGHT, "&right"),
+					new DefaultAlignmentDescription(ColumnSpec.FILL, "&fill"),};
+	private static final UnitDescription[] UNITS = new UnitDescription[]{
+			new UnitDescription(ConstantSize.DIALOG_UNITS_X, "Dialog units"),
+			new UnitDescription(ConstantSize.PIXEL, "Pixel"),
+			new UnitDescription(ConstantSize.POINT, "Point"),
+			new UnitDescription(ConstantSize.MILLIMETER, "Millimeter"),
+			new UnitDescription(ConstantSize.CENTIMETER, "Centimeter"),
+			new UnitDescription(ConstantSize.INCH, "Inch"),};
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ColumnEditDialog(Shell parentShell, FormLayoutInfo layout, FormColumnInfo column) {
-    super(parentShell, layout, layout.getColumns(), column, "Column", ALIGNMENTS, UNITS);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ColumnEditDialog(Shell parentShell, FormLayoutInfo layout, FormColumnInfo column) {
+		super(parentShell, layout, layout.getColumns(), column, "Column", ALIGNMENTS, UNITS);
+	}
 
-  public ColumnEditDialog(Shell parentShell, List<FormColumnInfo> columns, FormColumnInfo column) {
-    super(parentShell, null, columns, column, "Column", ALIGNMENTS, UNITS);
-  }
+	public ColumnEditDialog(Shell parentShell, List<FormColumnInfo> columns, FormColumnInfo column) {
+		super(parentShell, null, columns, column, "Column", ALIGNMENTS, UNITS);
+	}
 }
diff --git a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/ui/ColumnsDialog.java b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/ui/ColumnsDialog.java
index b54d713ce..79fdba92c 100644
--- a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/ui/ColumnsDialog.java
+++ b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/ui/ColumnsDialog.java
@@ -32,73 +32,73 @@
  * @coverage swing.FormLayout.ui
  */
 public final class ColumnsDialog extends DimensionsDialog<FormColumnInfo> {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ColumnsDialog(Shell parentShell, FormLayoutInfo layout) {
-    super(parentShell, layout, createColumnsCopy(layout), layout.getMinimumSize().width);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ColumnsDialog(Shell parentShell, FormLayoutInfo layout) {
+		super(parentShell, layout, createColumnsCopy(layout), layout.getMinimumSize().width);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Copy/update
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the deep copy of {@link List} with {@link FormColumnInfo}'s.
-   */
-  private static List<FormColumnInfo> createColumnsCopy(final FormLayoutInfo layout) {
-    final List<FormColumnInfo> columns = Lists.newArrayList();
-    ExecutionUtils.runRethrow(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        for (FormColumnInfo column : layout.getColumns()) {
-          columns.add(column.copy());
-        }
-      }
-    });
-    return columns;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Copy/update
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the deep copy of {@link List} with {@link FormColumnInfo}'s.
+	 */
+	private static List<FormColumnInfo> createColumnsCopy(final FormLayoutInfo layout) {
+		final List<FormColumnInfo> columns = Lists.newArrayList();
+		ExecutionUtils.runRethrow(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				for (FormColumnInfo column : layout.getColumns()) {
+					columns.add(column.copy());
+				}
+			}
+		});
+		return columns;
+	}
 
-  @Override
-  protected void updateLayoutInfo(List<FormColumnInfo> dimensions) throws Exception {
-    m_layout.setColumns(dimensions);
-  }
+	@Override
+	protected void updateLayoutInfo(List<FormColumnInfo> dimensions) throws Exception {
+		m_layout.setColumns(dimensions);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // DimensionsDialog
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getDialogTitle() {
-    return ModelMessages.ColumnsDialog_dialogTitle;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// DimensionsDialog
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getDialogTitle() {
+		return ModelMessages.ColumnsDialog_dialogTitle;
+	}
 
-  @Override
-  protected String getDialogMessage() {
-    return ModelMessages.ColumnsDialog_dialogMessage;
-  }
+	@Override
+	protected String getDialogMessage() {
+		return ModelMessages.ColumnsDialog_dialogMessage;
+	}
 
-  @Override
-  protected String getViewerTitle() {
-    return ModelMessages.ColumnsDialog_viewerTitle;
-  }
+	@Override
+	protected String getViewerTitle() {
+		return ModelMessages.ColumnsDialog_viewerTitle;
+	}
 
-  @Override
-  protected String getMinimalErrorMessage(int minimumDimensions) {
-    return MessageFormat.format(ModelMessages.ColumnsDialog_minimalErrorMessage, minimumDimensions);
-  }
+	@Override
+	protected String getMinimalErrorMessage(int minimumDimensions) {
+		return MessageFormat.format(ModelMessages.ColumnsDialog_minimalErrorMessage, minimumDimensions);
+	}
 
-  @Override
-  protected boolean editSelectedDimension(List<FormColumnInfo> dimensions, FormColumnInfo column) {
-    return new ColumnEditDialog(getShell(), dimensions, column).open() == OK;
-  }
+	@Override
+	protected boolean editSelectedDimension(List<FormColumnInfo> dimensions, FormColumnInfo column) {
+		return new ColumnEditDialog(getShell(), dimensions, column).open() == OK;
+	}
 
-  @Override
-  protected FormColumnInfo createNewDimension() throws Exception {
-    return new FormColumnInfo(FormSpecs.DEFAULT_COLSPEC);
-  }
+	@Override
+	protected FormColumnInfo createNewDimension() throws Exception {
+		return new FormColumnInfo(FormSpecs.DEFAULT_COLSPEC);
+	}
 }
diff --git a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/ui/ConstantSizeComposite.java b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/ui/ConstantSizeComposite.java
index 731719e88..c4d394a7e 100644
--- a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/ui/ConstantSizeComposite.java
+++ b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/ui/ConstantSizeComposite.java
@@ -31,126 +31,126 @@
  * @coverage swing.FormLayout.ui
  */
 public final class ConstantSizeComposite extends Composite {
-  private final UnitDescription[] m_units;
-  private final Spinner m_valueSpinner;
-  private final Combo m_unitsCombo;
-  private FormSizeConstantInfo m_currentSize;
-  private double m_divider;
+	private final UnitDescription[] m_units;
+	private final Spinner m_valueSpinner;
+	private final Combo m_unitsCombo;
+	private FormSizeConstantInfo m_currentSize;
+	private double m_divider;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ConstantSizeComposite(Composite parent, int style, UnitDescription[] units) {
-    super(parent, style);
-    m_units = units;
-    GridLayoutFactory.create(this).columns(2).noMargins();
-    {
-      m_valueSpinner = new Spinner(this, SWT.BORDER);
-      GridDataFactory.create(m_valueSpinner).hintHC(10);
-      m_valueSpinner.setMinimum(0);
-      m_valueSpinner.setMaximum(Integer.MAX_VALUE);
-      // add listener
-      m_valueSpinner.addListener(SWT.Selection, new Listener() {
-        @Override
-        public void handleEvent(Event event) {
-          m_currentSize.setValue(m_valueSpinner.getSelection() / m_divider);
-          notifySelection();
-        }
-      });
-    }
-    {
-      m_unitsCombo = new Combo(this, SWT.READ_ONLY);
-      GridDataFactory.create(m_unitsCombo).hintHC(15);
-      // add units
-      m_unitsCombo.setVisibleItemCount(m_units.length);
-      for (int i = 0; i < m_units.length; i++) {
-        UnitDescription description = m_units[i];
-        m_unitsCombo.add(description.getTitle());
-      }
-      // add listener
-      m_unitsCombo.addListener(SWT.Selection, new Listener() {
-        @Override
-        public void handleEvent(Event event) {
-          int unitIndex = m_unitsCombo.getSelectionIndex();
-          Unit unit = m_units[unitIndex].getUnit();
-          try {
-            m_currentSize.setUnit(unit);
-            configureSpinnerForUnit();
-          } catch (Throwable e) {
-          }
-          notifySelection();
-        }
-      });
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ConstantSizeComposite(Composite parent, int style, UnitDescription[] units) {
+		super(parent, style);
+		m_units = units;
+		GridLayoutFactory.create(this).columns(2).noMargins();
+		{
+			m_valueSpinner = new Spinner(this, SWT.BORDER);
+			GridDataFactory.create(m_valueSpinner).hintHC(10);
+			m_valueSpinner.setMinimum(0);
+			m_valueSpinner.setMaximum(Integer.MAX_VALUE);
+			// add listener
+			m_valueSpinner.addListener(SWT.Selection, new Listener() {
+				@Override
+				public void handleEvent(Event event) {
+					m_currentSize.setValue(m_valueSpinner.getSelection() / m_divider);
+					notifySelection();
+				}
+			});
+		}
+		{
+			m_unitsCombo = new Combo(this, SWT.READ_ONLY);
+			GridDataFactory.create(m_unitsCombo).hintHC(15);
+			// add units
+			m_unitsCombo.setVisibleItemCount(m_units.length);
+			for (int i = 0; i < m_units.length; i++) {
+				UnitDescription description = m_units[i];
+				m_unitsCombo.add(description.getTitle());
+			}
+			// add listener
+			m_unitsCombo.addListener(SWT.Selection, new Listener() {
+				@Override
+				public void handleEvent(Event event) {
+					int unitIndex = m_unitsCombo.getSelectionIndex();
+					Unit unit = m_units[unitIndex].getUnit();
+					try {
+						m_currentSize.setUnit(unit);
+						configureSpinnerForUnit();
+					} catch (Throwable e) {
+					}
+					notifySelection();
+				}
+			});
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the selected {@link FormSizeConstantInfo}.
-   */
-  public FormSizeConstantInfo getConstantSize() {
-    return new FormSizeConstantInfo(m_currentSize.getValue(), m_currentSize.getUnit());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the selected {@link FormSizeConstantInfo}.
+	 */
+	public FormSizeConstantInfo getConstantSize() {
+		return new FormSizeConstantInfo(m_currentSize.getValue(), m_currentSize.getUnit());
+	}
 
-  /**
-   * Sets the {@link FormSizeConstantInfo} to display.
-   */
-  public void setConstantSize(FormSizeConstantInfo size) {
-    if (size != null) {
-      m_currentSize = new FormSizeConstantInfo(size.getValue(), size.getUnit());
-      configureSpinnerForUnit();
-      // show value
-      {
-        int value = (int) (size.getValue() * m_divider);
-        if (m_valueSpinner.getSelection() != value) {
-          m_valueSpinner.setSelection(value);
-        }
-      }
-      // show unit
-      for (int i = 0; i < m_units.length; i++) {
-        UnitDescription description = m_units[i];
-        if (size.getUnit() == description.getUnit()) {
-          m_unitsCombo.select(i);
-        }
-      }
-    } else {
-      m_valueSpinner.setSelection(0);
-      m_unitsCombo.select(0);
-    }
-  }
+	/**
+	 * Sets the {@link FormSizeConstantInfo} to display.
+	 */
+	public void setConstantSize(FormSizeConstantInfo size) {
+		if (size != null) {
+			m_currentSize = new FormSizeConstantInfo(size.getValue(), size.getUnit());
+			configureSpinnerForUnit();
+			// show value
+			{
+				int value = (int) (size.getValue() * m_divider);
+				if (m_valueSpinner.getSelection() != value) {
+					m_valueSpinner.setSelection(value);
+				}
+			}
+			// show unit
+			for (int i = 0; i < m_units.length; i++) {
+				UnitDescription description = m_units[i];
+				if (size.getUnit() == description.getUnit()) {
+					m_unitsCombo.select(i);
+				}
+			}
+		} else {
+			m_valueSpinner.setSelection(0);
+			m_unitsCombo.select(0);
+		}
+	}
 
-  /**
-   * Configures value {@link Spinner} according current {@link Unit}.
-   */
-  private void configureSpinnerForUnit() {
-    Unit unit = m_currentSize.getUnit();
-    if (unit == ConstantSize.PIXEL
-        || unit == ConstantSize.POINT
-        || unit == ConstantSize.DIALOG_UNITS_X
-        || unit == ConstantSize.DIALOG_UNITS_Y) {
-      m_valueSpinner.setDigits(0);
-      m_divider = 1.0;
-    } else {
-      m_valueSpinner.setDigits(1);
-      m_divider = 10.0;
-    }
-  }
+	/**
+	 * Configures value {@link Spinner} according current {@link Unit}.
+	 */
+	private void configureSpinnerForUnit() {
+		Unit unit = m_currentSize.getUnit();
+		if (unit == ConstantSize.PIXEL
+				|| unit == ConstantSize.POINT
+				|| unit == ConstantSize.DIALOG_UNITS_X
+				|| unit == ConstantSize.DIALOG_UNITS_Y) {
+			m_valueSpinner.setDigits(0);
+			m_divider = 1.0;
+		} else {
+			m_valueSpinner.setDigits(1);
+			m_divider = 10.0;
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sends the {@link SWT#Selection} notification that value was changed.
-   */
-  private void notifySelection() {
-    notifyListeners(SWT.Selection, null);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sends the {@link SWT#Selection} notification that value was changed.
+	 */
+	private void notifySelection() {
+		notifyListeners(SWT.Selection, null);
+	}
 }
diff --git a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/ui/DefaultAlignmentDescription.java b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/ui/DefaultAlignmentDescription.java
index f7e5e57aa..3285da811 100644
--- a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/ui/DefaultAlignmentDescription.java
+++ b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/ui/DefaultAlignmentDescription.java
@@ -19,35 +19,35 @@
  * @coverage swing.FormLayout.ui
  */
 public final class DefaultAlignmentDescription {
-  private final DefaultAlignment m_alignment;
-  private final String m_title;
+	private final DefaultAlignment m_alignment;
+	private final String m_title;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DefaultAlignmentDescription(DefaultAlignment alignment, String title) {
-    m_alignment = alignment;
-    m_title = title;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DefaultAlignmentDescription(DefaultAlignment alignment, String title) {
+		m_alignment = alignment;
+		m_title = title;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link DefaultAlignment} value.
-   */
-  public DefaultAlignment getAlignment() {
-    return m_alignment;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link DefaultAlignment} value.
+	 */
+	public DefaultAlignment getAlignment() {
+		return m_alignment;
+	}
 
-  /**
-   * @return the title to display.
-   */
-  public String getTitle() {
-    return m_title;
-  }
+	/**
+	 * @return the title to display.
+	 */
+	public String getTitle() {
+		return m_title;
+	}
 }
diff --git a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/ui/DimensionEditDialog.java b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/ui/DimensionEditDialog.java
index 8b1e5b2d8..e173e9fba 100644
--- a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/ui/DimensionEditDialog.java
+++ b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/ui/DimensionEditDialog.java
@@ -55,576 +55,576 @@
  * @coverage swing.FormLayout.ui
  */
 abstract class DimensionEditDialog<T extends FormDimensionInfo> extends ResizableDialog {
-  private final FormLayoutInfo m_layout;
-  private final List<T> m_dimensions;
-  private T m_currentDimension;
-  private T m_dimension;
-  private final boolean m_horizontal;
-  private final String m_dimensionName;
-  private final DefaultAlignmentDescription[] m_alignments;
-  private final UnitDescription[] m_units;
+	private final FormLayoutInfo m_layout;
+	private final List<T> m_dimensions;
+	private T m_currentDimension;
+	private T m_dimension;
+	private final boolean m_horizontal;
+	private final String m_dimensionName;
+	private final DefaultAlignmentDescription[] m_alignments;
+	private final UnitDescription[] m_units;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DimensionEditDialog(Shell parentShell,
-      FormLayoutInfo layout,
-      List<T> dimensions,
-      T dimension,
-      String dimensionName,
-      DefaultAlignmentDescription[] alignments,
-      UnitDescription[] units) {
-    super(parentShell, Activator.getDefault());
-    setShellStyle(SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
-    m_layout = layout;
-    m_dimensions = dimensions;
-    setEditDimension(dimension);
-    m_horizontal = dimension instanceof FormColumnInfo;
-    //
-    m_dimensionName = dimensionName;
-    m_alignments = alignments;
-    m_units = units;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DimensionEditDialog(Shell parentShell,
+			FormLayoutInfo layout,
+			List<T> dimensions,
+			T dimension,
+			String dimensionName,
+			DefaultAlignmentDescription[] alignments,
+			UnitDescription[] units) {
+		super(parentShell, Activator.getDefault());
+		setShellStyle(SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
+		m_layout = layout;
+		m_dimensions = dimensions;
+		setEditDimension(dimension);
+		m_horizontal = dimension instanceof FormColumnInfo;
+		//
+		m_dimensionName = dimensionName;
+		m_alignments = alignments;
+		m_units = units;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI fields
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Text m_indexText;
-  private Button m_prevButton;
-  private Button m_nextButton;
-  //
-  private Text m_specificationText;
-  private Button[] m_alignmentButtons;
-  private Combo m_templateCombo;
-  private final Map<Size, Button> m_componentSizeToButton = Maps.newHashMap();
-  // constant
-  private ConstantSizeComposite m_constantSizeComposite;
-  private Button m_constantSizeButton;
-  // lower bound
-  private Button m_lowerSizeButton;
-  private ConstantSizeComposite m_lowerSizeComposite;
-  // lower bound
-  private Button m_upperSizeButton;
-  private ConstantSizeComposite m_upperSizeComposite;
-  // grow
-  private Button m_noGrowButton;
-  private Button m_growButton;
-  private Spinner m_growSpinner;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI fields
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Text m_indexText;
+	private Button m_prevButton;
+	private Button m_nextButton;
+	//
+	private Text m_specificationText;
+	private Button[] m_alignmentButtons;
+	private Combo m_templateCombo;
+	private final Map<Size, Button> m_componentSizeToButton = Maps.newHashMap();
+	// constant
+	private ConstantSizeComposite m_constantSizeComposite;
+	private Button m_constantSizeButton;
+	// lower bound
+	private Button m_lowerSizeButton;
+	private ConstantSizeComposite m_lowerSizeComposite;
+	// lower bound
+	private Button m_upperSizeButton;
+	private ConstantSizeComposite m_upperSizeComposite;
+	// grow
+	private Button m_noGrowButton;
+	private Button m_growButton;
+	private Spinner m_growSpinner;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Control createDialogArea(Composite parent) {
-    Composite container = (Composite) super.createDialogArea(parent);
-    createHeaderComposite(container);
-    createAlignmentComposite(container);
-    createSizeComposite(container);
-    createResizeComposite(container);
-    //
-    showDimension();
-    return container;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Control createDialogArea(Composite parent) {
+		Composite container = (Composite) super.createDialogArea(parent);
+		createHeaderComposite(container);
+		createAlignmentComposite(container);
+		createSizeComposite(container);
+		createResizeComposite(container);
+		//
+		showDimension();
+		return container;
+	}
 
-  @Override
-  protected void configureShell(Shell newShell) {
-    super.configureShell(newShell);
-    newShell.setText(MessageFormat.format(
-        ModelMessages.DimensionEditDialog_dialogTitle,
-        m_dimensionName));
-  }
+	@Override
+	protected void configureShell(Shell newShell) {
+		super.configureShell(newShell);
+		newShell.setText(MessageFormat.format(
+				ModelMessages.DimensionEditDialog_dialogTitle,
+				m_dimensionName));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Buttons
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final int APPLY_ID = IDialogConstants.CLIENT_ID + 1;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Buttons
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final int APPLY_ID = IDialogConstants.CLIENT_ID + 1;
 
-  @Override
-  protected void createButtonsForButtonBar(Composite parent) {
-    super.createButtonsForButtonBar(parent);
-    if (m_layout != null) {
-      createButton(parent, APPLY_ID, ModelMessages.DimensionEditDialog_applyButton, false);
-    }
-  }
+	@Override
+	protected void createButtonsForButtonBar(Composite parent) {
+		super.createButtonsForButtonBar(parent);
+		if (m_layout != null) {
+			createButton(parent, APPLY_ID, ModelMessages.DimensionEditDialog_applyButton, false);
+		}
+	}
 
-  @Override
-  protected void buttonPressed(int buttonId) {
-    try {
-      if (buttonId == IDialogConstants.OK_ID || buttonId == APPLY_ID) {
-        applyChanges();
-      }
-    } catch (Throwable e) {
-      DesignerPlugin.log(e);
-    }
-    super.buttonPressed(buttonId);
-  }
+	@Override
+	protected void buttonPressed(int buttonId) {
+		try {
+			if (buttonId == IDialogConstants.OK_ID || buttonId == APPLY_ID) {
+				applyChanges();
+			}
+		} catch (Throwable e) {
+			DesignerPlugin.log(e);
+		}
+		super.buttonPressed(buttonId);
+	}
 
-  /**
-   * Saves current {@link FormLayoutInfo} changes into source and refreshes GUI.
-   */
-  private void applyChanges() throws Exception {
-    m_currentDimension.assign(m_dimension);
-    if (m_layout != null) {
-      try {
-        m_layout.startEdit();
-        m_layout.writeDimensions();
-      } finally {
-        m_layout.endEdit();
-      }
-    }
-  }
+	/**
+	 * Saves current {@link FormLayoutInfo} changes into source and refreshes GUI.
+	 */
+	private void applyChanges() throws Exception {
+		m_currentDimension.assign(m_dimension);
+		if (m_layout != null) {
+			try {
+				m_layout.startEdit();
+				m_layout.writeDimensions();
+			} finally {
+				m_layout.endEdit();
+			}
+		}
+	}
 
-  /**
-   * Sets the {@link FormDimensionInfo} to edit.
-   */
-  private void setEditDimension(T dimension) {
-    try {
-      // apply changes
-      if (m_currentDimension != null && !m_currentDimension.equals2(m_dimension)) {
-        // open dialog
-        int dialogResult;
-        {
-          String title = ModelMessages.DimensionEditDialog_applyConfirmTitle;
-          String message =
-              MessageFormat.format(
-                  ModelMessages.DimensionEditDialog_applyConfirmMessage,
-                  m_dimensionName);
-          MessageDialog dialog =
-              new MessageDialog(getShell(),
-                  title,
-                  null,
-                  message,
-                  MessageDialog.QUESTION,
-                  new String[]{
-                      IDialogConstants.YES_LABEL,
-                      IDialogConstants.NO_LABEL,
-                      IDialogConstants.CANCEL_LABEL},
-                  0);
-          dialogResult = dialog.open();
-        }
-        // check cancel/yes
-        if (dialogResult == 2) {
-          return;
-        } else if (dialogResult == 0) {
-          applyChanges();
-        }
-      }
-      // remember new dimension
-      m_currentDimension = dimension;
-      m_dimension = getCopy(dimension);
-    } catch (Throwable e) {
-      DesignerPlugin.log(e);
-    }
-  }
+	/**
+	 * Sets the {@link FormDimensionInfo} to edit.
+	 */
+	private void setEditDimension(T dimension) {
+		try {
+			// apply changes
+			if (m_currentDimension != null && !m_currentDimension.equals2(m_dimension)) {
+				// open dialog
+				int dialogResult;
+				{
+					String title = ModelMessages.DimensionEditDialog_applyConfirmTitle;
+					String message =
+							MessageFormat.format(
+									ModelMessages.DimensionEditDialog_applyConfirmMessage,
+									m_dimensionName);
+					MessageDialog dialog =
+							new MessageDialog(getShell(),
+									title,
+									null,
+									message,
+									MessageDialog.QUESTION,
+									new String[]{
+											IDialogConstants.YES_LABEL,
+											IDialogConstants.NO_LABEL,
+											IDialogConstants.CANCEL_LABEL},
+									0);
+					dialogResult = dialog.open();
+				}
+				// check cancel/yes
+				if (dialogResult == 2) {
+					return;
+				} else if (dialogResult == 0) {
+					applyChanges();
+				}
+			}
+			// remember new dimension
+			m_currentDimension = dimension;
+			m_dimension = getCopy(dimension);
+		} catch (Throwable e) {
+			DesignerPlugin.log(e);
+		}
+	}
 
-  /**
-   * @return the deep copy of {@link FormDimensionInfo}.
-   */
-  @SuppressWarnings("unchecked")
-  private static <T extends FormDimensionInfo> T getCopy(T dimension) throws Exception {
-    return (T) dimension.copy();
-  }
+	/**
+	 * @return the deep copy of {@link FormDimensionInfo}.
+	 */
+	@SuppressWarnings("unchecked")
+	private static <T extends FormDimensionInfo> T getCopy(T dimension) throws Exception {
+		return (T) dimension.copy();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Composites
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Create the header displaying {@link Composite}.
-   */
-  private void createHeaderComposite(Composite parent) {
-    Composite composite = new Composite(parent, SWT.NONE);
-    GridDataFactory.create(composite).grabH().fill();
-    GridLayoutFactory.create(composite).noMargins().columns(4);
-    // index
-    {
-      new Label(composite, SWT.NONE).setText(m_dimensionName + ":");
-      // index
-      {
-        m_indexText = new Text(composite, SWT.BORDER | SWT.READ_ONLY);
-        GridDataFactory.create(m_indexText).grabH().fillH().indentHC(3);
-      }
-      // prev button
-      {
-        m_prevButton = new Button(composite, SWT.NONE);
-        m_prevButton.setToolTipText(MessageFormat.format(
-            ModelMessages.DimensionEditDialog_previousButton,
-            m_dimensionName));
-        m_prevButton.setImage(m_horizontal
-            ? Activator.getImage("navigation/left.gif")
-            : Activator.getImage("navigation/up.gif"));
-        m_prevButton.addListener(SWT.Selection, new Listener() {
-          @Override
-          public void handleEvent(Event event) {
-            int index = m_dimensions.indexOf(m_currentDimension);
-            setEditDimension(m_dimensions.get(index - 1));
-            showDimension();
-          }
-        });
-      }
-      // next button
-      {
-        m_nextButton = new Button(composite, SWT.NONE);
-        m_nextButton.setToolTipText(MessageFormat.format(
-            ModelMessages.DimensionEditDialog_nextButton,
-            m_dimensionName));
-        m_nextButton.setImage(m_horizontal
-            ? Activator.getImage("navigation/right.gif")
-            : Activator.getImage("navigation/down.gif"));
-        m_nextButton.addListener(SWT.Selection, new Listener() {
-          @Override
-          public void handleEvent(Event event) {
-            int index = m_dimensions.indexOf(m_currentDimension);
-            setEditDimension(m_dimensions.get(index + 1));
-            showDimension();
-          }
-        });
-      }
-    }
-    // template
-    {
-      new Label(composite, SWT.NONE).setText(ModelMessages.DimensionEditDialog_template);
-      //
-      m_templateCombo = new Combo(composite, SWT.READ_ONLY);
-      GridDataFactory.create(m_templateCombo).spanH(3).hintHC(40).grabH().fillH().indentHC(3);
-      // fill templates
-      final FormDimensionTemplate[] templates = m_dimension.getTemplates();
-      m_templateCombo.setVisibleItemCount(templates.length);
-      for (int i = 0; i < templates.length; i++) {
-        FormDimensionTemplate template = templates[i];
-        m_templateCombo.add(template.getTitle());
-      }
-      // add selection listener
-      m_templateCombo.addListener(SWT.Selection, new Listener() {
-        @Override
-        public void handleEvent(Event event) {
-          try {
-            int index = m_templateCombo.getSelectionIndex();
-            FormDimensionTemplate template = templates[index];
-            m_dimension.setTemplate(template);
-            //
-            showDimension();
-          } catch (Throwable e) {
-          }
-        }
-      });
-    }
-    // specification
-    {
-      new Label(composite, SWT.NONE).setText(ModelMessages.DimensionEditDialog_specification);
-      //
-      m_specificationText = new Text(composite, SWT.BORDER | SWT.READ_ONLY);
-      GridDataFactory.create(m_specificationText).spanH(3).grabH().fillH().indentHC(3);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Composites
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Create the header displaying {@link Composite}.
+	 */
+	private void createHeaderComposite(Composite parent) {
+		Composite composite = new Composite(parent, SWT.NONE);
+		GridDataFactory.create(composite).grabH().fill();
+		GridLayoutFactory.create(composite).noMargins().columns(4);
+		// index
+		{
+			new Label(composite, SWT.NONE).setText(m_dimensionName + ":");
+			// index
+			{
+				m_indexText = new Text(composite, SWT.BORDER | SWT.READ_ONLY);
+				GridDataFactory.create(m_indexText).grabH().fillH().indentHC(3);
+			}
+			// prev button
+			{
+				m_prevButton = new Button(composite, SWT.NONE);
+				m_prevButton.setToolTipText(MessageFormat.format(
+						ModelMessages.DimensionEditDialog_previousButton,
+						m_dimensionName));
+				m_prevButton.setImage(m_horizontal
+						? Activator.getImage("navigation/left.gif")
+								: Activator.getImage("navigation/up.gif"));
+				m_prevButton.addListener(SWT.Selection, new Listener() {
+					@Override
+					public void handleEvent(Event event) {
+						int index = m_dimensions.indexOf(m_currentDimension);
+						setEditDimension(m_dimensions.get(index - 1));
+						showDimension();
+					}
+				});
+			}
+			// next button
+			{
+				m_nextButton = new Button(composite, SWT.NONE);
+				m_nextButton.setToolTipText(MessageFormat.format(
+						ModelMessages.DimensionEditDialog_nextButton,
+						m_dimensionName));
+				m_nextButton.setImage(m_horizontal
+						? Activator.getImage("navigation/right.gif")
+								: Activator.getImage("navigation/down.gif"));
+				m_nextButton.addListener(SWT.Selection, new Listener() {
+					@Override
+					public void handleEvent(Event event) {
+						int index = m_dimensions.indexOf(m_currentDimension);
+						setEditDimension(m_dimensions.get(index + 1));
+						showDimension();
+					}
+				});
+			}
+		}
+		// template
+		{
+			new Label(composite, SWT.NONE).setText(ModelMessages.DimensionEditDialog_template);
+			//
+			m_templateCombo = new Combo(composite, SWT.READ_ONLY);
+			GridDataFactory.create(m_templateCombo).spanH(3).hintHC(40).grabH().fillH().indentHC(3);
+			// fill templates
+			final FormDimensionTemplate[] templates = m_dimension.getTemplates();
+			m_templateCombo.setVisibleItemCount(templates.length);
+			for (int i = 0; i < templates.length; i++) {
+				FormDimensionTemplate template = templates[i];
+				m_templateCombo.add(template.getTitle());
+			}
+			// add selection listener
+			m_templateCombo.addListener(SWT.Selection, new Listener() {
+				@Override
+				public void handleEvent(Event event) {
+					try {
+						int index = m_templateCombo.getSelectionIndex();
+						FormDimensionTemplate template = templates[index];
+						m_dimension.setTemplate(template);
+						//
+						showDimension();
+					} catch (Throwable e) {
+					}
+				}
+			});
+		}
+		// specification
+		{
+			new Label(composite, SWT.NONE).setText(ModelMessages.DimensionEditDialog_specification);
+			//
+			m_specificationText = new Text(composite, SWT.BORDER | SWT.READ_ONLY);
+			GridDataFactory.create(m_specificationText).spanH(3).grabH().fillH().indentHC(3);
+		}
+	}
 
-  /**
-   * Creates the alignment editing {@link Composite}.
-   */
-  private void createAlignmentComposite(Composite parent) {
-    createSeparator(parent, ModelMessages.DimensionEditDialog_defaultAlignment);
-    //
-    Composite composite = new Composite(parent, SWT.NONE);
-    GridDataFactory.create(composite).grabH().fill().indentHC(2);
-    GridLayoutFactory.create(composite).noMargins().columns(m_alignments.length);
-    //
-    m_alignmentButtons = new Button[m_alignments.length];
-    for (int i = 0; i < m_alignments.length; i++) {
-      final DefaultAlignmentDescription description = m_alignments[i];
-      // create radio button
-      Button button = new Button(composite, SWT.RADIO);
-      button.setText(description.getTitle());
-      // add listener
-      m_alignmentButtons[i] = button;
-      button.addListener(SWT.Selection, new Listener() {
-        @Override
-        public void handleEvent(Event event) {
-          m_dimension.setAlignment(description.getAlignment());
-          showDimension();
-        }
-      });
-    }
-  }
+	/**
+	 * Creates the alignment editing {@link Composite}.
+	 */
+	private void createAlignmentComposite(Composite parent) {
+		createSeparator(parent, ModelMessages.DimensionEditDialog_defaultAlignment);
+		//
+		Composite composite = new Composite(parent, SWT.NONE);
+		GridDataFactory.create(composite).grabH().fill().indentHC(2);
+		GridLayoutFactory.create(composite).noMargins().columns(m_alignments.length);
+		//
+		m_alignmentButtons = new Button[m_alignments.length];
+		for (int i = 0; i < m_alignments.length; i++) {
+			final DefaultAlignmentDescription description = m_alignments[i];
+			// create radio button
+			Button button = new Button(composite, SWT.RADIO);
+			button.setText(description.getTitle());
+			// add listener
+			m_alignmentButtons[i] = button;
+			button.addListener(SWT.Selection, new Listener() {
+				@Override
+				public void handleEvent(Event event) {
+					m_dimension.setAlignment(description.getAlignment());
+					showDimension();
+				}
+			});
+		}
+	}
 
-  /**
-   * Creates the size editing {@link Composite}.
-   */
-  private void createSizeComposite(Composite parent) {
-    createSeparator(parent, ModelMessages.DimensionEditDialog_size);
-    //
-    Composite composite = new Composite(parent, SWT.NONE);
-    GridDataFactory.create(composite).grabH().fill().indentHC(2);
-    GridLayoutFactory.create(composite).noMargins();
-    // default, preferred, minimum
-    {
-      Composite sizesComposite = new Composite(composite, SWT.NONE);
-      GridDataFactory.create(sizesComposite).grabH().fill();
-      GridLayoutFactory.create(sizesComposite).columns(3).noMargins();
-      createComponentSizeButton(sizesComposite, Sizes.DEFAULT, "&default");
-      createComponentSizeButton(sizesComposite, Sizes.PREFERRED, "&preferred");
-      createComponentSizeButton(sizesComposite, Sizes.MINIMUM, "minim&um");
-    }
-    // constants
-    {
-      Composite constantsComposite = new Composite(composite, SWT.NONE);
-      GridDataFactory.create(constantsComposite).grabH().fill();
-      GridLayoutFactory.create(constantsComposite).columns(2).noMargins();
-      // constant size
-      {
-        {
-          m_constantSizeButton = new Button(constantsComposite, SWT.RADIO);
-          m_constantSizeButton.setText(ModelMessages.DimensionEditDialog_18);
-          GridDataFactory.create(m_constantSizeButton).hintHC(15);
-          m_constantSizeButton.addListener(SWT.Selection, new Listener() {
-            @Override
-            public void handleEvent(Event event) {
-              FormSizeInfo size = m_dimension.getSize();
-              size.setComponentSize(null);
-              if (size.getConstantSize() == null) {
-                size.setConstantSize(new FormSizeConstantInfo(50, m_units[0].getUnit()));
-              }
-              showDimension();
-            }
-          });
-        }
-        //
-        m_constantSizeComposite = new ConstantSizeComposite(constantsComposite, SWT.NONE, m_units);
-        m_constantSizeComposite.addListener(SWT.Selection, new Listener() {
-          @Override
-          public void handleEvent(Event event) {
-            FormSizeInfo size = m_dimension.getSize();
-            size.setConstantSize(m_constantSizeComposite.getConstantSize());
-            showDimension();
-          }
-        });
-      }
-      // lower
-      {
-        {
-          m_lowerSizeButton = new Button(constantsComposite, SWT.CHECK);
-          m_lowerSizeButton.setText(ModelMessages.DimensionEditDialog_19);
-          m_lowerSizeButton.addListener(SWT.Selection, new Listener() {
-            @Override
-            public void handleEvent(Event event) {
-              FormSizeInfo size = m_dimension.getSize();
-              size.setLowerSize(m_lowerSizeButton.getSelection());
-              if (size.getLowerSize() == null) {
-                size.setLowerSize(new FormSizeConstantInfo(50, m_units[0].getUnit()));
-              }
-              showDimension();
-            }
-          });
-        }
-        //
-        m_lowerSizeComposite = new ConstantSizeComposite(constantsComposite, SWT.NONE, m_units);
-        m_lowerSizeComposite.addListener(SWT.Selection, new Listener() {
-          @Override
-          public void handleEvent(Event event) {
-            FormSizeInfo size = m_dimension.getSize();
-            size.setLowerSize(m_lowerSizeComposite.getConstantSize());
-            showDimension();
-          }
-        });
-      }
-      // upper
-      {
-        {
-          m_upperSizeButton = new Button(constantsComposite, SWT.CHECK);
-          m_upperSizeButton.setText(ModelMessages.DimensionEditDialog_20);
-          m_upperSizeButton.addListener(SWT.Selection, new Listener() {
-            @Override
-            public void handleEvent(Event event) {
-              FormSizeInfo size = m_dimension.getSize();
-              size.setUpperSize(m_upperSizeButton.getSelection());
-              if (size.getUpperSize() == null) {
-                size.setUpperSize(new FormSizeConstantInfo(50, m_units[0].getUnit()));
-              }
-              showDimension();
-            }
-          });
-        }
-        //
-        m_upperSizeComposite = new ConstantSizeComposite(constantsComposite, SWT.NONE, m_units);
-        m_upperSizeComposite.addListener(SWT.Selection, new Listener() {
-          @Override
-          public void handleEvent(Event event) {
-            FormSizeInfo size = m_dimension.getSize();
-            size.setUpperSize(m_upperSizeComposite.getConstantSize());
-            showDimension();
-          }
-        });
-      }
-    }
-  }
+	/**
+	 * Creates the size editing {@link Composite}.
+	 */
+	private void createSizeComposite(Composite parent) {
+		createSeparator(parent, ModelMessages.DimensionEditDialog_size);
+		//
+		Composite composite = new Composite(parent, SWT.NONE);
+		GridDataFactory.create(composite).grabH().fill().indentHC(2);
+		GridLayoutFactory.create(composite).noMargins();
+		// default, preferred, minimum
+		{
+			Composite sizesComposite = new Composite(composite, SWT.NONE);
+			GridDataFactory.create(sizesComposite).grabH().fill();
+			GridLayoutFactory.create(sizesComposite).columns(3).noMargins();
+			createComponentSizeButton(sizesComposite, Sizes.DEFAULT, "&default");
+			createComponentSizeButton(sizesComposite, Sizes.PREFERRED, "&preferred");
+			createComponentSizeButton(sizesComposite, Sizes.MINIMUM, "minim&um");
+		}
+		// constants
+		{
+			Composite constantsComposite = new Composite(composite, SWT.NONE);
+			GridDataFactory.create(constantsComposite).grabH().fill();
+			GridLayoutFactory.create(constantsComposite).columns(2).noMargins();
+			// constant size
+			{
+				{
+					m_constantSizeButton = new Button(constantsComposite, SWT.RADIO);
+					m_constantSizeButton.setText(ModelMessages.DimensionEditDialog_18);
+					GridDataFactory.create(m_constantSizeButton).hintHC(15);
+					m_constantSizeButton.addListener(SWT.Selection, new Listener() {
+						@Override
+						public void handleEvent(Event event) {
+							FormSizeInfo size = m_dimension.getSize();
+							size.setComponentSize(null);
+							if (size.getConstantSize() == null) {
+								size.setConstantSize(new FormSizeConstantInfo(50, m_units[0].getUnit()));
+							}
+							showDimension();
+						}
+					});
+				}
+				//
+				m_constantSizeComposite = new ConstantSizeComposite(constantsComposite, SWT.NONE, m_units);
+				m_constantSizeComposite.addListener(SWT.Selection, new Listener() {
+					@Override
+					public void handleEvent(Event event) {
+						FormSizeInfo size = m_dimension.getSize();
+						size.setConstantSize(m_constantSizeComposite.getConstantSize());
+						showDimension();
+					}
+				});
+			}
+			// lower
+			{
+				{
+					m_lowerSizeButton = new Button(constantsComposite, SWT.CHECK);
+					m_lowerSizeButton.setText(ModelMessages.DimensionEditDialog_19);
+					m_lowerSizeButton.addListener(SWT.Selection, new Listener() {
+						@Override
+						public void handleEvent(Event event) {
+							FormSizeInfo size = m_dimension.getSize();
+							size.setLowerSize(m_lowerSizeButton.getSelection());
+							if (size.getLowerSize() == null) {
+								size.setLowerSize(new FormSizeConstantInfo(50, m_units[0].getUnit()));
+							}
+							showDimension();
+						}
+					});
+				}
+				//
+				m_lowerSizeComposite = new ConstantSizeComposite(constantsComposite, SWT.NONE, m_units);
+				m_lowerSizeComposite.addListener(SWT.Selection, new Listener() {
+					@Override
+					public void handleEvent(Event event) {
+						FormSizeInfo size = m_dimension.getSize();
+						size.setLowerSize(m_lowerSizeComposite.getConstantSize());
+						showDimension();
+					}
+				});
+			}
+			// upper
+			{
+				{
+					m_upperSizeButton = new Button(constantsComposite, SWT.CHECK);
+					m_upperSizeButton.setText(ModelMessages.DimensionEditDialog_20);
+					m_upperSizeButton.addListener(SWT.Selection, new Listener() {
+						@Override
+						public void handleEvent(Event event) {
+							FormSizeInfo size = m_dimension.getSize();
+							size.setUpperSize(m_upperSizeButton.getSelection());
+							if (size.getUpperSize() == null) {
+								size.setUpperSize(new FormSizeConstantInfo(50, m_units[0].getUnit()));
+							}
+							showDimension();
+						}
+					});
+				}
+				//
+				m_upperSizeComposite = new ConstantSizeComposite(constantsComposite, SWT.NONE, m_units);
+				m_upperSizeComposite.addListener(SWT.Selection, new Listener() {
+					@Override
+					public void handleEvent(Event event) {
+						FormSizeInfo size = m_dimension.getSize();
+						size.setUpperSize(m_upperSizeComposite.getConstantSize());
+						showDimension();
+					}
+				});
+			}
+		}
+	}
 
-  /**
-   * Creates single radio button for given component size.
-   */
-  private void createComponentSizeButton(Composite parent, final Size componentSize, String text) {
-    Button button = new Button(parent, SWT.RADIO);
-    m_componentSizeToButton.put(componentSize, button);
-    button.setText(text);
-    button.addListener(SWT.Selection, new Listener() {
-      @Override
-      public void handleEvent(Event event) {
-        m_dimension.getSize().setComponentSize(componentSize);
-        showDimension();
-      }
-    });
-  }
+	/**
+	 * Creates single radio button for given component size.
+	 */
+	private void createComponentSizeButton(Composite parent, final Size componentSize, String text) {
+		Button button = new Button(parent, SWT.RADIO);
+		m_componentSizeToButton.put(componentSize, button);
+		button.setText(text);
+		button.addListener(SWT.Selection, new Listener() {
+			@Override
+			public void handleEvent(Event event) {
+				m_dimension.getSize().setComponentSize(componentSize);
+				showDimension();
+			}
+		});
+	}
 
-  /**
-   * Creates the resize behavior editing {@link Composite}.
-   */
-  private void createResizeComposite(Composite parent) {
-    createSeparator(parent, ModelMessages.DimensionEditDialog_resizeBehavior);
-    //
-    Composite composite = new Composite(parent, SWT.NONE);
-    GridDataFactory.create(composite).grabH().fill().indentHC(2);
-    GridLayoutFactory.create(composite).noMargins().columns(2);
-    // none
-    {
-      m_noGrowButton = new Button(composite, SWT.RADIO);
-      GridDataFactory.create(m_noGrowButton).spanH(2);
-      m_noGrowButton.setText("&none");
-      m_noGrowButton.addListener(SWT.Selection, new Listener() {
-        @Override
-        public void handleEvent(Event event) {
-          m_dimension.setWeight(0.0);
-          showDimension();
-        }
-      });
-    }
-    // grow
-    {
-      m_growButton = new Button(composite, SWT.RADIO);
-      GridDataFactory.create(m_growButton).hintHC(15);
-      m_growButton.setText("&grow");
-      m_growButton.addListener(SWT.Selection, new Listener() {
-        @Override
-        public void handleEvent(Event event) {
-          m_dimension.setWeight(1.0);
-          showDimension();
-        }
-      });
-      //
-      m_growSpinner = new Spinner(composite, SWT.BORDER);
-      GridDataFactory.create(m_growSpinner).hintHC(10);
-      m_growSpinner.addListener(SWT.Selection, new Listener() {
-        @Override
-        public void handleEvent(Event event) {
-          m_dimension.setWeight(m_growSpinner.getSelection());
-          showDimension();
-        }
-      });
-    }
-  }
+	/**
+	 * Creates the resize behavior editing {@link Composite}.
+	 */
+	private void createResizeComposite(Composite parent) {
+		createSeparator(parent, ModelMessages.DimensionEditDialog_resizeBehavior);
+		//
+		Composite composite = new Composite(parent, SWT.NONE);
+		GridDataFactory.create(composite).grabH().fill().indentHC(2);
+		GridLayoutFactory.create(composite).noMargins().columns(2);
+		// none
+		{
+			m_noGrowButton = new Button(composite, SWT.RADIO);
+			GridDataFactory.create(m_noGrowButton).spanH(2);
+			m_noGrowButton.setText("&none");
+			m_noGrowButton.addListener(SWT.Selection, new Listener() {
+				@Override
+				public void handleEvent(Event event) {
+					m_dimension.setWeight(0.0);
+					showDimension();
+				}
+			});
+		}
+		// grow
+		{
+			m_growButton = new Button(composite, SWT.RADIO);
+			GridDataFactory.create(m_growButton).hintHC(15);
+			m_growButton.setText("&grow");
+			m_growButton.addListener(SWT.Selection, new Listener() {
+				@Override
+				public void handleEvent(Event event) {
+					m_dimension.setWeight(1.0);
+					showDimension();
+				}
+			});
+			//
+			m_growSpinner = new Spinner(composite, SWT.BORDER);
+			GridDataFactory.create(m_growSpinner).hintHC(10);
+			m_growSpinner.addListener(SWT.Selection, new Listener() {
+				@Override
+				public void handleEvent(Event event) {
+					m_dimension.setWeight(m_growSpinner.getSelection());
+					showDimension();
+				}
+			});
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Shows the {@link FormDimensionInfo} in UI controls.
-   */
-  private void showDimension() {
-    // header
-    {
-      // index
-      {
-        int index = 1 + m_dimensions.indexOf(m_currentDimension);
-        m_indexText.setText("" + index);
-        m_prevButton.setEnabled(index != 1);
-        m_nextButton.setEnabled(index < m_dimensions.size());
-      }
-      // template
-      {
-        FormDimensionTemplate[] templates = m_dimension.getTemplates();
-        m_templateCombo.deselectAll();
-        for (int i = 0; i < templates.length; i++) {
-          FormDimensionTemplate template = templates[i];
-          if (m_dimension.isTemplate(template)) {
-            m_templateCombo.select(i);
-            break;
-          }
-        }
-      }
-      // specification
-      m_specificationText.setText(m_dimension.getDisplayString());
-    }
-    // alignment
-    for (int i = 0; i < m_alignments.length; i++) {
-      DefaultAlignmentDescription description = m_alignments[i];
-      Button button = m_alignmentButtons[i];
-      button.setSelection(m_dimension.getAlignment() == description.getAlignment());
-    }
-    // size
-    {
-      FormSizeInfo size = m_dimension.getSize();
-      boolean hasConstantSize = size.getComponentSize() == null;
-      // component size
-      for (Map.Entry<Size, Button> entry : m_componentSizeToButton.entrySet()) {
-        Size componentSize = entry.getKey();
-        Button button = entry.getValue();
-        button.setSelection(componentSize == size.getComponentSize());
-      }
-      // constant size
-      {
-        UiUtils.changeControlEnable(m_constantSizeComposite, hasConstantSize);
-        m_constantSizeButton.setSelection(hasConstantSize);
-        m_constantSizeComposite.setConstantSize(size.getConstantSize());
-      }
-      // lower
-      {
-        m_lowerSizeButton.setEnabled(!hasConstantSize);
-        m_lowerSizeButton.setSelection(size.hasLowerSize());
-        UiUtils.changeControlEnable(m_lowerSizeComposite, size.hasLowerSize());
-        m_lowerSizeComposite.setConstantSize(size.getLowerSize());
-      }
-      // upper
-      {
-        m_upperSizeButton.setEnabled(!hasConstantSize);
-        m_upperSizeButton.setSelection(size.hasUpperSize());
-        UiUtils.changeControlEnable(m_upperSizeComposite, size.hasUpperSize());
-        m_upperSizeComposite.setConstantSize(size.getUpperSize());
-      }
-    }
-    // grow
-    if (m_dimension.hasGrow()) {
-      m_noGrowButton.setSelection(false);
-      m_growButton.setSelection(true);
-      //
-      m_growSpinner.setEnabled(true);
-      int weight = Math.max((int) m_dimension.getWeight(), 1);
-      if (m_growSpinner.getSelection() != weight) {
-        m_growSpinner.setSelection(weight);
-      }
-    } else {
-      m_noGrowButton.setSelection(true);
-      m_growButton.setSelection(false);
-      //
-      m_growSpinner.setEnabled(false);
-      m_growSpinner.setSelection(0);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Shows the {@link FormDimensionInfo} in UI controls.
+	 */
+	private void showDimension() {
+		// header
+		{
+			// index
+			{
+				int index = 1 + m_dimensions.indexOf(m_currentDimension);
+				m_indexText.setText("" + index);
+				m_prevButton.setEnabled(index != 1);
+				m_nextButton.setEnabled(index < m_dimensions.size());
+			}
+			// template
+			{
+				FormDimensionTemplate[] templates = m_dimension.getTemplates();
+				m_templateCombo.deselectAll();
+				for (int i = 0; i < templates.length; i++) {
+					FormDimensionTemplate template = templates[i];
+					if (m_dimension.isTemplate(template)) {
+						m_templateCombo.select(i);
+						break;
+					}
+				}
+			}
+			// specification
+			m_specificationText.setText(m_dimension.getDisplayString());
+		}
+		// alignment
+		for (int i = 0; i < m_alignments.length; i++) {
+			DefaultAlignmentDescription description = m_alignments[i];
+			Button button = m_alignmentButtons[i];
+			button.setSelection(m_dimension.getAlignment() == description.getAlignment());
+		}
+		// size
+		{
+			FormSizeInfo size = m_dimension.getSize();
+			boolean hasConstantSize = size.getComponentSize() == null;
+			// component size
+			for (Map.Entry<Size, Button> entry : m_componentSizeToButton.entrySet()) {
+				Size componentSize = entry.getKey();
+				Button button = entry.getValue();
+				button.setSelection(componentSize == size.getComponentSize());
+			}
+			// constant size
+			{
+				UiUtils.changeControlEnable(m_constantSizeComposite, hasConstantSize);
+				m_constantSizeButton.setSelection(hasConstantSize);
+				m_constantSizeComposite.setConstantSize(size.getConstantSize());
+			}
+			// lower
+			{
+				m_lowerSizeButton.setEnabled(!hasConstantSize);
+				m_lowerSizeButton.setSelection(size.hasLowerSize());
+				UiUtils.changeControlEnable(m_lowerSizeComposite, size.hasLowerSize());
+				m_lowerSizeComposite.setConstantSize(size.getLowerSize());
+			}
+			// upper
+			{
+				m_upperSizeButton.setEnabled(!hasConstantSize);
+				m_upperSizeButton.setSelection(size.hasUpperSize());
+				UiUtils.changeControlEnable(m_upperSizeComposite, size.hasUpperSize());
+				m_upperSizeComposite.setConstantSize(size.getUpperSize());
+			}
+		}
+		// grow
+		if (m_dimension.hasGrow()) {
+			m_noGrowButton.setSelection(false);
+			m_growButton.setSelection(true);
+			//
+			m_growSpinner.setEnabled(true);
+			int weight = Math.max((int) m_dimension.getWeight(), 1);
+			if (m_growSpinner.getSelection() != weight) {
+				m_growSpinner.setSelection(weight);
+			}
+		} else {
+			m_noGrowButton.setSelection(true);
+			m_growButton.setSelection(false);
+			//
+			m_growSpinner.setEnabled(false);
+			m_growSpinner.setSelection(0);
+		}
+	}
 
-  /**
-   * Creates separator with given text.
-   */
-  private static void createSeparator(Composite parent, String text) {
-    Separator separator = new Separator(parent, SWT.NONE);
-    GridDataFactory.create(separator).grabH().fillH();
-    separator.setText(text);
-    separator.setForeground(separator.getDisplay().getSystemColor(SWT.COLOR_LIST_SELECTION));
-  }
+	/**
+	 * Creates separator with given text.
+	 */
+	private static void createSeparator(Composite parent, String text) {
+		Separator separator = new Separator(parent, SWT.NONE);
+		GridDataFactory.create(separator).grabH().fillH();
+		separator.setText(text);
+		separator.setForeground(separator.getDisplay().getSystemColor(SWT.COLOR_LIST_SELECTION));
+	}
 }
diff --git a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/ui/DimensionsDialog.java b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/ui/DimensionsDialog.java
index d58e1b0c0..9451969f4 100644
--- a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/ui/DimensionsDialog.java
+++ b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/ui/DimensionsDialog.java
@@ -52,390 +52,390 @@
  * @coverage swing.FormLayout.ui
  */
 abstract class DimensionsDialog<T extends FormDimensionInfo> extends ResizableTitleAreaDialog {
-  protected final FormLayoutInfo m_layout;
-  private final List<T> m_dimensions;
-  private final int m_minimumDimensions;
+	protected final FormLayoutInfo m_layout;
+	private final List<T> m_dimensions;
+	private final int m_minimumDimensions;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DimensionsDialog(Shell parentShell,
-      FormLayoutInfo layout,
-      List<T> dimensions,
-      int minimumDimensions) {
-    super(parentShell, Activator.getDefault());
-    setShellStyle(SWT.RESIZE | SWT.CLOSE);
-    //
-    m_layout = layout;
-    m_dimensions = dimensions;
-    m_minimumDimensions = minimumDimensions;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DimensionsDialog(Shell parentShell,
+			FormLayoutInfo layout,
+			List<T> dimensions,
+			int minimumDimensions) {
+		super(parentShell, Activator.getDefault());
+		setShellStyle(SWT.RESIZE | SWT.CLOSE);
+		//
+		m_layout = layout;
+		m_dimensions = dimensions;
+		m_minimumDimensions = minimumDimensions;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Control createDialogArea(Composite parent) {
-    Composite area = (Composite) super.createDialogArea(parent);
-    //
-    Composite container = new Composite(area, SWT.NONE);
-    GridDataFactory.create(container).grab().fill();
-    GridLayoutFactory.create(container).columns(2);
-    // title
-    {
-      Label label = new Label(container, SWT.NONE);
-      GridDataFactory.create(label).spanH(2);
-      label.setText(getViewerTitle());
-    }
-    // create viewer
-    createViewer(container);
-    // buttons
-    {
-      createButtonsComposite(container);
-      updateButtons();
-    }
-    // configure title area
-    setTitle(getDialogTitle());
-    setMessage(getDialogMessage());
-    return area;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Control createDialogArea(Composite parent) {
+		Composite area = (Composite) super.createDialogArea(parent);
+		//
+		Composite container = new Composite(area, SWT.NONE);
+		GridDataFactory.create(container).grab().fill();
+		GridLayoutFactory.create(container).columns(2);
+		// title
+		{
+			Label label = new Label(container, SWT.NONE);
+			GridDataFactory.create(label).spanH(2);
+			label.setText(getViewerTitle());
+		}
+		// create viewer
+		createViewer(container);
+		// buttons
+		{
+			createButtonsComposite(container);
+			updateButtons();
+		}
+		// configure title area
+		setTitle(getDialogTitle());
+		setMessage(getDialogMessage());
+		return area;
+	}
 
-  @Override
-  protected void configureShell(Shell newShell) {
-    super.configureShell(newShell);
-    newShell.setText(getDialogTitle());
-  }
+	@Override
+	protected void configureShell(Shell newShell) {
+		super.configureShell(newShell);
+		newShell.setText(getDialogTitle());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Dialog buttons
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void buttonPressed(int buttonId) {
-    if (buttonId == IDialogConstants.OK_ID) {
-      try {
-        try {
-          m_layout.startEdit();
-          updateLayoutInfo(m_dimensions);
-        } finally {
-          m_layout.endEdit();
-        }
-      } catch (Throwable e) {
-        DesignerPlugin.log(e);
-      }
-    }
-    super.buttonPressed(buttonId);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Dialog buttons
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void buttonPressed(int buttonId) {
+		if (buttonId == IDialogConstants.OK_ID) {
+			try {
+				try {
+					m_layout.startEdit();
+					updateLayoutInfo(m_dimensions);
+				} finally {
+					m_layout.endEdit();
+				}
+			} catch (Throwable e) {
+				DesignerPlugin.log(e);
+			}
+		}
+		super.buttonPressed(buttonId);
+	}
 
-  /**
-   * Updates {@link FormLayoutInfo} using given {@link List} of {@link FormDimensionInfo}.
-   */
-  protected abstract void updateLayoutInfo(List<T> dimensions) throws Exception;
+	/**
+	 * Updates {@link FormLayoutInfo} using given {@link List} of {@link FormDimensionInfo}.
+	 */
+	protected abstract void updateLayoutInfo(List<T> dimensions) throws Exception;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Viewer
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private TableViewer m_viewer;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Viewer
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private TableViewer m_viewer;
 
-  /**
-   * Creates {@link TableViewer} for {@link FormDimensionInfo}'s.
-   */
-  private void createViewer(Composite container) {
-    m_viewer = new TableViewer(container, SWT.BORDER | SWT.FULL_SELECTION | SWT.MULTI);
-    // configure table
-    Table table = m_viewer.getTable();
-    GridDataFactory.create(table).hintC(120, 15).grab().fill();
-    table.setHeaderVisible(true);
-    table.setLinesVisible(true);
-    createColumn(ModelMessages.DimensionsDialog_numberColumn, 5);
-    createColumn(ModelMessages.DimensionsDialog_templateColumn, 35);
-    createColumn(ModelMessages.DimensionsDialog_alignmentColumn, 15);
-    createColumn(ModelMessages.DimensionsDialog_sizeColumn, 35);
-    createColumn(ModelMessages.DimensionsDialog_resizingColumn, 15);
-    // configure viewer
-    m_viewer.setContentProvider(new ArrayContentProvider());
-    m_viewer.setLabelProvider(new DimensionsLabelProvider());
-    m_viewer.setInput(m_dimensions);
-    // add listeners
-    m_viewer.addSelectionChangedListener(new ISelectionChangedListener() {
-      @Override
-      public void selectionChanged(SelectionChangedEvent event) {
-        updateButtons();
-      }
-    });
-    m_viewer.addDoubleClickListener(new IDoubleClickListener() {
-      @Override
-      public void doubleClick(DoubleClickEvent event) {
-        editSelectedDimension();
-      }
-    });
-  }
+	/**
+	 * Creates {@link TableViewer} for {@link FormDimensionInfo}'s.
+	 */
+	private void createViewer(Composite container) {
+		m_viewer = new TableViewer(container, SWT.BORDER | SWT.FULL_SELECTION | SWT.MULTI);
+		// configure table
+		Table table = m_viewer.getTable();
+		GridDataFactory.create(table).hintC(120, 15).grab().fill();
+		table.setHeaderVisible(true);
+		table.setLinesVisible(true);
+		createColumn(ModelMessages.DimensionsDialog_numberColumn, 5);
+		createColumn(ModelMessages.DimensionsDialog_templateColumn, 35);
+		createColumn(ModelMessages.DimensionsDialog_alignmentColumn, 15);
+		createColumn(ModelMessages.DimensionsDialog_sizeColumn, 35);
+		createColumn(ModelMessages.DimensionsDialog_resizingColumn, 15);
+		// configure viewer
+		m_viewer.setContentProvider(new ArrayContentProvider());
+		m_viewer.setLabelProvider(new DimensionsLabelProvider());
+		m_viewer.setInput(m_dimensions);
+		// add listeners
+		m_viewer.addSelectionChangedListener(new ISelectionChangedListener() {
+			@Override
+			public void selectionChanged(SelectionChangedEvent event) {
+				updateButtons();
+			}
+		});
+		m_viewer.addDoubleClickListener(new IDoubleClickListener() {
+			@Override
+			public void doubleClick(DoubleClickEvent event) {
+				editSelectedDimension();
+			}
+		});
+	}
 
-  /**
-   * Creates {@link TableColumn} with given parameters.
-   */
-  private void createColumn(String text, int widthInChars) {
-    TableColumn column = new TableColumn(m_viewer.getTable(), SWT.NONE);
-    column.setText(text);
-    column.setWidth(convertWidthInCharsToPixels(widthInChars));
-  }
+	/**
+	 * Creates {@link TableColumn} with given parameters.
+	 */
+	private void createColumn(String text, int widthInChars) {
+		TableColumn column = new TableColumn(m_viewer.getTable(), SWT.NONE);
+		column.setText(text);
+		column.setWidth(convertWidthInCharsToPixels(widthInChars));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Buttons composite
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Button m_editButton;
-  private Button m_removeButton;
-  private Button m_moveUpButton;
-  private Button m_moveDownButton;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Buttons composite
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Button m_editButton;
+	private Button m_removeButton;
+	private Button m_moveUpButton;
+	private Button m_moveDownButton;
 
-  /**
-   * Creates {@link Composite} with {@link Button}'s.
-   */
-  private void createButtonsComposite(Composite parent) {
-    Composite composite = new Composite(parent, SWT.NONE);
-    GridDataFactory.create(composite).fill();
-    GridLayoutFactory.create(composite).marginsV(0);
-    //
-    createButton(composite, ModelMessages.DimensionsDialog_insertButton, new Listener() {
-      @Override
-      public void handleEvent(Event event) {
-        addNewDimension(0);
-      }
-    });
-    createButton(composite, ModelMessages.DimensionsDialog_appendButton, new Listener() {
-      @Override
-      public void handleEvent(Event event) {
-        addNewDimension(1);
-      }
-    });
-    m_editButton =
-        createButton(composite, ModelMessages.DimensionsDialog_editButton, new Listener() {
-          @Override
-          public void handleEvent(Event event) {
-            editSelectedDimension();
-          }
-        });
-    m_removeButton =
-        createButton(composite, ModelMessages.DimensionsDialog_removeButton, new Listener() {
-          @Override
-          public void handleEvent(Event event) {
-            int index = 0;
-            for (T dimension : GenericsUtils.<T>iterable(m_viewer.getSelection())) {
-              index = m_dimensions.indexOf(dimension);
-              m_dimensions.remove(dimension);
-            }
-            // set selection
-            m_viewer.refresh();
-            index = Math.min(index, m_dimensions.size() - 1);
-            m_viewer.getTable().select(index);
-            // validate
-            updateButtons();
-            validateMinimumDimensions();
-          }
-        });
-    //
-    new Label(composite, SWT.NONE);
-    m_moveUpButton =
-        createButton(composite, ModelMessages.DimensionsDialog_moveUpButton, new Listener() {
-          @Override
-          public void handleEvent(Event event) {
-            for (T dimension : GenericsUtils.<T>iterable(m_viewer.getSelection())) {
-              int index = m_dimensions.indexOf(dimension);
-              m_dimensions.remove(dimension);
-              m_dimensions.add(index - 1, dimension);
-            }
-            m_viewer.refresh();
-            updateButtons();
-          }
-        });
-    m_moveDownButton =
-        createButton(composite, ModelMessages.DimensionsDialog_moveDownButton, new Listener() {
-          @Override
-          public void handleEvent(Event event) {
-            for (T dimension : GenericsUtils.<T>iterable(m_viewer.getSelection())) {
-              int index = m_dimensions.indexOf(dimension);
-              m_dimensions.remove(dimension);
-              m_dimensions.add(index + 1, dimension);
-            }
-            m_viewer.refresh();
-            updateButtons();
-          }
-        });
-  }
+	/**
+	 * Creates {@link Composite} with {@link Button}'s.
+	 */
+	private void createButtonsComposite(Composite parent) {
+		Composite composite = new Composite(parent, SWT.NONE);
+		GridDataFactory.create(composite).fill();
+		GridLayoutFactory.create(composite).marginsV(0);
+		//
+		createButton(composite, ModelMessages.DimensionsDialog_insertButton, new Listener() {
+			@Override
+			public void handleEvent(Event event) {
+				addNewDimension(0);
+			}
+		});
+		createButton(composite, ModelMessages.DimensionsDialog_appendButton, new Listener() {
+			@Override
+			public void handleEvent(Event event) {
+				addNewDimension(1);
+			}
+		});
+		m_editButton =
+				createButton(composite, ModelMessages.DimensionsDialog_editButton, new Listener() {
+					@Override
+					public void handleEvent(Event event) {
+						editSelectedDimension();
+					}
+				});
+		m_removeButton =
+				createButton(composite, ModelMessages.DimensionsDialog_removeButton, new Listener() {
+					@Override
+					public void handleEvent(Event event) {
+						int index = 0;
+						for (T dimension : GenericsUtils.<T>iterable(m_viewer.getSelection())) {
+							index = m_dimensions.indexOf(dimension);
+							m_dimensions.remove(dimension);
+						}
+						// set selection
+						m_viewer.refresh();
+						index = Math.min(index, m_dimensions.size() - 1);
+						m_viewer.getTable().select(index);
+						// validate
+						updateButtons();
+						validateMinimumDimensions();
+					}
+				});
+		//
+		new Label(composite, SWT.NONE);
+		m_moveUpButton =
+				createButton(composite, ModelMessages.DimensionsDialog_moveUpButton, new Listener() {
+					@Override
+					public void handleEvent(Event event) {
+						for (T dimension : GenericsUtils.<T>iterable(m_viewer.getSelection())) {
+							int index = m_dimensions.indexOf(dimension);
+							m_dimensions.remove(dimension);
+							m_dimensions.add(index - 1, dimension);
+						}
+						m_viewer.refresh();
+						updateButtons();
+					}
+				});
+		m_moveDownButton =
+				createButton(composite, ModelMessages.DimensionsDialog_moveDownButton, new Listener() {
+					@Override
+					public void handleEvent(Event event) {
+						for (T dimension : GenericsUtils.<T>iterable(m_viewer.getSelection())) {
+							int index = m_dimensions.indexOf(dimension);
+							m_dimensions.remove(dimension);
+							m_dimensions.add(index + 1, dimension);
+						}
+						m_viewer.refresh();
+						updateButtons();
+					}
+				});
+	}
 
-  /**
-   * @return the new {@link Button} with given text and {@link SWT#Selection} {@link Listener}.
-   */
-  private static Button createButton(Composite parent, String text, Listener listener) {
-    Button button = new Button(parent, SWT.NONE);
-    GridDataFactory.create(button).grabH().fillH();
-    button.setText(text);
-    button.addListener(SWT.Selection, listener);
-    return button;
-  }
+	/**
+	 * @return the new {@link Button} with given text and {@link SWT#Selection} {@link Listener}.
+	 */
+	private static Button createButton(Composite parent, String text, Listener listener) {
+		Button button = new Button(parent, SWT.NONE);
+		GridDataFactory.create(button).grabH().fillH();
+		button.setText(text);
+		button.addListener(SWT.Selection, listener);
+		return button;
+	}
 
-  /**
-   * Updates buttons according to the selection in viewer.
-   */
-  private void updateButtons() {
-    IStructuredSelection selection = (IStructuredSelection) m_viewer.getSelection();
-    boolean empty = selection.isEmpty();
-    //
-    m_editButton.setEnabled(selection.size() == 1);
-    m_removeButton.setEnabled(!empty);
-    // up/down buttons
-    {
-      m_moveUpButton.setEnabled(!empty);
-      m_moveDownButton.setEnabled(!empty);
-      for (T dimension : GenericsUtils.<T>iterable(selection)) {
-        int index = m_dimensions.indexOf(dimension);
-        if (index == 0) {
-          m_moveUpButton.setEnabled(false);
-        }
-        if (index == m_dimensions.size() - 1) {
-          m_moveDownButton.setEnabled(false);
-        }
-      }
-    }
-  }
+	/**
+	 * Updates buttons according to the selection in viewer.
+	 */
+	private void updateButtons() {
+		IStructuredSelection selection = (IStructuredSelection) m_viewer.getSelection();
+		boolean empty = selection.isEmpty();
+		//
+		m_editButton.setEnabled(selection.size() == 1);
+		m_removeButton.setEnabled(!empty);
+		// up/down buttons
+		{
+			m_moveUpButton.setEnabled(!empty);
+			m_moveDownButton.setEnabled(!empty);
+			for (T dimension : GenericsUtils.<T>iterable(selection)) {
+				int index = m_dimensions.indexOf(dimension);
+				if (index == 0) {
+					m_moveUpButton.setEnabled(false);
+				}
+				if (index == m_dimensions.size() - 1) {
+					m_moveDownButton.setEnabled(false);
+				}
+			}
+		}
+	}
 
-  /**
-   * Checks that count of {@link FormDimensionInfo} is not less than required.
-   */
-  private void validateMinimumDimensions() {
-    if (m_dimensions.size() < m_minimumDimensions) {
-      setErrorMessage(getMinimalErrorMessage(m_minimumDimensions));
-    } else {
-      setErrorMessage(null);
-    }
-  }
+	/**
+	 * Checks that count of {@link FormDimensionInfo} is not less than required.
+	 */
+	private void validateMinimumDimensions() {
+		if (m_dimensions.size() < m_minimumDimensions) {
+			setErrorMessage(getMinimalErrorMessage(m_minimumDimensions));
+		} else {
+			setErrorMessage(null);
+		}
+	}
 
-  /**
-   * Adds new {@link FormDimensionInfo}.
-   *
-   * @param indexOffset
-   *          the offset to add to the current selection index, <code>0</code> to implement insert
-   *          and <code>1</code> for append.
-   */
-  private void addNewDimension(int indexOffset) {
-    try {
-      T newDimension = createNewDimension();
-      // add new dimension
-      int index = m_viewer.getTable().getSelectionIndex();
-      if (index == -1) {
-        m_dimensions.add(newDimension);
-      } else {
-        m_dimensions.add(index + indexOffset, newDimension);
-      }
-      // edit dimension
-      if (!editSelectedDimension(m_dimensions, newDimension)) {
-        m_dimensions.remove(newDimension);
-      }
-      // refresh
-      m_viewer.refresh();
-      // validate
-      validateMinimumDimensions();
-    } catch (Throwable e) {
-      DesignerPlugin.log(e);
-    }
-  }
+	/**
+	 * Adds new {@link FormDimensionInfo}.
+	 *
+	 * @param indexOffset
+	 *          the offset to add to the current selection index, <code>0</code> to implement insert
+	 *          and <code>1</code> for append.
+	 */
+	private void addNewDimension(int indexOffset) {
+		try {
+			T newDimension = createNewDimension();
+			// add new dimension
+			int index = m_viewer.getTable().getSelectionIndex();
+			if (index == -1) {
+				m_dimensions.add(newDimension);
+			} else {
+				m_dimensions.add(index + indexOffset, newDimension);
+			}
+			// edit dimension
+			if (!editSelectedDimension(m_dimensions, newDimension)) {
+				m_dimensions.remove(newDimension);
+			}
+			// refresh
+			m_viewer.refresh();
+			// validate
+			validateMinimumDimensions();
+		} catch (Throwable e) {
+			DesignerPlugin.log(e);
+		}
+	}
 
-  /**
-   * Edits the selected {@link FormDimensionInfo}.
-   */
-  private void editSelectedDimension() {
-    T dimension = GenericsUtils.<T>first(m_viewer.getSelection());
-    editSelectedDimension(m_dimensions, dimension);
-    m_viewer.refresh();
-  }
+	/**
+	 * Edits the selected {@link FormDimensionInfo}.
+	 */
+	private void editSelectedDimension() {
+		T dimension = GenericsUtils.<T>first(m_viewer.getSelection());
+		editSelectedDimension(m_dimensions, dimension);
+		m_viewer.refresh();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Methods to implement
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the title for dialog title area.
-   */
-  protected abstract String getDialogTitle();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Methods to implement
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the title for dialog title area.
+	 */
+	protected abstract String getDialogTitle();
 
-  /**
-   * @return the description for dialog title area.
-   */
-  protected abstract String getDialogMessage();
+	/**
+	 * @return the description for dialog title area.
+	 */
+	protected abstract String getDialogMessage();
 
-  /**
-   * @return the description for dialog title area.
-   */
-  protected abstract String getMinimalErrorMessage(int minimumDimensions);
+	/**
+	 * @return the description for dialog title area.
+	 */
+	protected abstract String getMinimalErrorMessage(int minimumDimensions);
 
-  /**
-   * @return the title for dimensions viewer.
-   */
-  protected abstract String getViewerTitle();
+	/**
+	 * @return the title for dimensions viewer.
+	 */
+	protected abstract String getViewerTitle();
 
-  /**
-   * Edits given {@link FormDimensionInfo}.
-   *
-   * @return <code>true</code> if edit was successful.
-   */
-  protected abstract boolean editSelectedDimension(List<T> dimensions, T dimension);
+	/**
+	 * Edits given {@link FormDimensionInfo}.
+	 *
+	 * @return <code>true</code> if edit was successful.
+	 */
+	protected abstract boolean editSelectedDimension(List<T> dimensions, T dimension);
 
-  /**
-   * @return the new {@link FormDimensionInfo} instance to append/insert.
-   */
-  protected abstract T createNewDimension() throws Exception;
+	/**
+	 * @return the new {@link FormDimensionInfo} instance to append/insert.
+	 */
+	protected abstract T createNewDimension() throws Exception;
 
-  //protected abstract String getDimensionName();
-  //protected abstract FormDimensionInfo createNewDimension(FormLayoutInfo layout) throws Exception;
-  //protected abstract DimensionEditDialog createDimensionDialog(FormDimensionInfo dimension, List dimensions, int index);
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Dimensions providers
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * {@link ITableLabelProvider} for {@link FormDimensionInfo}.
-   */
-  private class DimensionsLabelProvider extends LabelProvider implements ITableLabelProvider {
-    @Override
-    public String getColumnText(Object element, int columnIndex) {
-      FormDimensionInfo dimension = (FormDimensionInfo) element;
-      if (columnIndex == 0) {
-        int index = m_dimensions.indexOf(element);
-        return "" + (index + 1);
-      }
-      if (columnIndex == 1) {
-        FormDimensionTemplate template = dimension.getTemplate();
-        if (template != null) {
-          return template.getTitle();
-        }
-        return "";
-      }
-      if (columnIndex == 2) {
-        return dimension.getAlignment().toString();
-      }
-      if (columnIndex == 3) {
-        return dimension.getSize().getDisplayString();
-      }
-      if (columnIndex == 4) {
-        return "" + dimension.getWeight();
-      }
-      return element.toString();
-    }
+	//protected abstract String getDimensionName();
+	//protected abstract FormDimensionInfo createNewDimension(FormLayoutInfo layout) throws Exception;
+	//protected abstract DimensionEditDialog createDimensionDialog(FormDimensionInfo dimension, List dimensions, int index);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Dimensions providers
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * {@link ITableLabelProvider} for {@link FormDimensionInfo}.
+	 */
+	private class DimensionsLabelProvider extends LabelProvider implements ITableLabelProvider {
+		@Override
+		public String getColumnText(Object element, int columnIndex) {
+			FormDimensionInfo dimension = (FormDimensionInfo) element;
+			if (columnIndex == 0) {
+				int index = m_dimensions.indexOf(element);
+				return "" + (index + 1);
+			}
+			if (columnIndex == 1) {
+				FormDimensionTemplate template = dimension.getTemplate();
+				if (template != null) {
+					return template.getTitle();
+				}
+				return "";
+			}
+			if (columnIndex == 2) {
+				return dimension.getAlignment().toString();
+			}
+			if (columnIndex == 3) {
+				return dimension.getSize().getDisplayString();
+			}
+			if (columnIndex == 4) {
+				return "" + dimension.getWeight();
+			}
+			return element.toString();
+		}
 
-    @Override
-    public Image getColumnImage(Object element, int columnIndex) {
-      return null;
-    }
-  }
+		@Override
+		public Image getColumnImage(Object element, int columnIndex) {
+			return null;
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/ui/RowEditDialog.java b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/ui/RowEditDialog.java
index b2158e7f8..c88fa9351 100644
--- a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/ui/RowEditDialog.java
+++ b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/ui/RowEditDialog.java
@@ -27,30 +27,30 @@
  * @coverage swing.FormLayout.ui
  */
 public class RowEditDialog extends DimensionEditDialog<FormRowInfo> {
-  private static final DefaultAlignmentDescription[] ALIGNMENTS =
-      new DefaultAlignmentDescription[]{
-          new DefaultAlignmentDescription(RowSpec.TOP, "&top"),
-          new DefaultAlignmentDescription(RowSpec.CENTER, "&center"),
-          new DefaultAlignmentDescription(RowSpec.BOTTOM, "&bottom"),
-          new DefaultAlignmentDescription(RowSpec.FILL, "&fill"),};
-  private static final UnitDescription[] UNITS = new UnitDescription[]{
-      new UnitDescription(ConstantSize.DIALOG_UNITS_Y, "Dialog units"),
-      new UnitDescription(ConstantSize.PIXEL, "Pixel"),
-      new UnitDescription(ConstantSize.POINT, "Point"),
-      new UnitDescription(ConstantSize.MILLIMETER, "Millimeter"),
-      new UnitDescription(ConstantSize.CENTIMETER, "Centimeter"),
-      new UnitDescription(ConstantSize.INCH, "Inch"),};
+	private static final DefaultAlignmentDescription[] ALIGNMENTS =
+			new DefaultAlignmentDescription[]{
+					new DefaultAlignmentDescription(RowSpec.TOP, "&top"),
+					new DefaultAlignmentDescription(RowSpec.CENTER, "&center"),
+					new DefaultAlignmentDescription(RowSpec.BOTTOM, "&bottom"),
+					new DefaultAlignmentDescription(RowSpec.FILL, "&fill"),};
+	private static final UnitDescription[] UNITS = new UnitDescription[]{
+			new UnitDescription(ConstantSize.DIALOG_UNITS_Y, "Dialog units"),
+			new UnitDescription(ConstantSize.PIXEL, "Pixel"),
+			new UnitDescription(ConstantSize.POINT, "Point"),
+			new UnitDescription(ConstantSize.MILLIMETER, "Millimeter"),
+			new UnitDescription(ConstantSize.CENTIMETER, "Centimeter"),
+			new UnitDescription(ConstantSize.INCH, "Inch"),};
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public RowEditDialog(Shell parentShell, FormLayoutInfo layout, FormRowInfo row) {
-    super(parentShell, layout, layout.getRows(), row, "Row", ALIGNMENTS, UNITS);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public RowEditDialog(Shell parentShell, FormLayoutInfo layout, FormRowInfo row) {
+		super(parentShell, layout, layout.getRows(), row, "Row", ALIGNMENTS, UNITS);
+	}
 
-  public RowEditDialog(Shell parentShell, List<FormRowInfo> rows, FormRowInfo row) {
-    super(parentShell, null, rows, row, "Row", ALIGNMENTS, UNITS);
-  }
+	public RowEditDialog(Shell parentShell, List<FormRowInfo> rows, FormRowInfo row) {
+		super(parentShell, null, rows, row, "Row", ALIGNMENTS, UNITS);
+	}
 }
diff --git a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/ui/RowsDialog.java b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/ui/RowsDialog.java
index 7ac96d55d..436a994af 100644
--- a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/ui/RowsDialog.java
+++ b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/ui/RowsDialog.java
@@ -32,73 +32,73 @@
  * @coverage swing.FormLayout.ui
  */
 public final class RowsDialog extends DimensionsDialog<FormRowInfo> {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public RowsDialog(Shell parentShell, FormLayoutInfo layout) {
-    super(parentShell, layout, createRowsCopy(layout), layout.getMinimumSize().width);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public RowsDialog(Shell parentShell, FormLayoutInfo layout) {
+		super(parentShell, layout, createRowsCopy(layout), layout.getMinimumSize().width);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Copy/update
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the deep copy of {@link List} with {@link FormRowInfo}'s.
-   */
-  private static List<FormRowInfo> createRowsCopy(final FormLayoutInfo layout) {
-    final List<FormRowInfo> rows = Lists.newArrayList();
-    ExecutionUtils.runRethrow(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        for (FormRowInfo row : layout.getRows()) {
-          rows.add(row.copy());
-        }
-      }
-    });
-    return rows;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Copy/update
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the deep copy of {@link List} with {@link FormRowInfo}'s.
+	 */
+	private static List<FormRowInfo> createRowsCopy(final FormLayoutInfo layout) {
+		final List<FormRowInfo> rows = Lists.newArrayList();
+		ExecutionUtils.runRethrow(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				for (FormRowInfo row : layout.getRows()) {
+					rows.add(row.copy());
+				}
+			}
+		});
+		return rows;
+	}
 
-  @Override
-  protected void updateLayoutInfo(List<FormRowInfo> dimensions) throws Exception {
-    m_layout.setRows(dimensions);
-  }
+	@Override
+	protected void updateLayoutInfo(List<FormRowInfo> dimensions) throws Exception {
+		m_layout.setRows(dimensions);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // DimensionsDialog
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getDialogTitle() {
-    return ModelMessages.RowsDialog_dialogTitle;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// DimensionsDialog
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getDialogTitle() {
+		return ModelMessages.RowsDialog_dialogTitle;
+	}
 
-  @Override
-  protected String getDialogMessage() {
-    return ModelMessages.RowsDialog_dialogMessage;
-  }
+	@Override
+	protected String getDialogMessage() {
+		return ModelMessages.RowsDialog_dialogMessage;
+	}
 
-  @Override
-  protected String getViewerTitle() {
-    return ModelMessages.RowsDialog_viewerTitle;
-  }
+	@Override
+	protected String getViewerTitle() {
+		return ModelMessages.RowsDialog_viewerTitle;
+	}
 
-  @Override
-  protected String getMinimalErrorMessage(int minimumDimensions) {
-    return MessageFormat.format(ModelMessages.RowsDialog_minimalErrorMesssage, minimumDimensions);
-  }
+	@Override
+	protected String getMinimalErrorMessage(int minimumDimensions) {
+		return MessageFormat.format(ModelMessages.RowsDialog_minimalErrorMesssage, minimumDimensions);
+	}
 
-  @Override
-  protected boolean editSelectedDimension(List<FormRowInfo> dimensions, FormRowInfo column) {
-    return new RowEditDialog(getShell(), dimensions, column).open() == OK;
-  }
+	@Override
+	protected boolean editSelectedDimension(List<FormRowInfo> dimensions, FormRowInfo column) {
+		return new RowEditDialog(getShell(), dimensions, column).open() == OK;
+	}
 
-  @Override
-  protected FormRowInfo createNewDimension() throws Exception {
-    return new FormRowInfo(FormSpecs.DEFAULT_ROWSPEC);
-  }
+	@Override
+	protected FormRowInfo createNewDimension() throws Exception {
+		return new FormRowInfo(FormSpecs.DEFAULT_ROWSPEC);
+	}
 }
diff --git a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/ui/UnitDescription.java b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/ui/UnitDescription.java
index d49de46a2..0fd9451f5 100644
--- a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/ui/UnitDescription.java
+++ b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/model/ui/UnitDescription.java
@@ -19,35 +19,35 @@
  * @coverage swing.FormLayout.ui
  */
 public final class UnitDescription {
-  private final Unit m_unit;
-  private final String m_title;
+	private final Unit m_unit;
+	private final String m_title;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public UnitDescription(Unit unit, String title) {
-    m_unit = unit;
-    m_title = title;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public UnitDescription(Unit unit, String title) {
+		m_unit = unit;
+		m_title = title;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link Unit} value.
-   */
-  public Unit getUnit() {
-    return m_unit;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link Unit} value.
+	 */
+	public Unit getUnit() {
+		return m_unit;
+	}
 
-  /**
-   * @return the title to display.
-   */
-  public String getTitle() {
-    return m_title;
-  }
+	/**
+	 * @return the title to display.
+	 */
+	public String getTitle() {
+		return m_title;
+	}
 }
diff --git a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/palette/DefaultComponentFactoryCreateLabelEntryInfo.java b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/palette/DefaultComponentFactoryCreateLabelEntryInfo.java
index 7f4ae92a9..00ccc71e0 100644
--- a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/palette/DefaultComponentFactoryCreateLabelEntryInfo.java
+++ b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/palette/DefaultComponentFactoryCreateLabelEntryInfo.java
@@ -30,59 +30,59 @@
  * @coverage swing.FormLayout.model
  */
 public final class DefaultComponentFactoryCreateLabelEntryInfo
-    extends
-      DefaultComponentFactoryEntryInfo {
-  private static final Image ICON =
-      Activator.getImage("DefaultComponentFactory/createLabel_java.lang.String_.gif");
+extends
+DefaultComponentFactoryEntryInfo {
+	private static final Image ICON =
+			Activator.getImage("DefaultComponentFactory/createLabel_java.lang.String_.gif");
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DefaultComponentFactoryCreateLabelEntryInfo() {
-    setId(getClass().getName());
-    setName("createLabel(String)");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DefaultComponentFactoryCreateLabelEntryInfo() {
+		setId(getClass().getName());
+		setName("createLabel(String)");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // EntryInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Image getIcon() {
-    return ICON;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// EntryInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Image getIcon() {
+		return ICON;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ToolEntryInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Tool createTool() throws Exception {
-    ICreationFactory factory = new ICreationFactory() {
-      private JavaInfo m_javaInfo;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ToolEntryInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Tool createTool() throws Exception {
+		ICreationFactory factory = new ICreationFactory() {
+			private JavaInfo m_javaInfo;
 
-      @Override
-      public void activate() throws Exception {
-        String source = "createLabel(\"New JGoodies label\")";
-        m_javaInfo =
-            JavaInfoUtils.createJavaInfo(
-                m_editor,
-                "javax.swing.JLabel",
-                new DefaultComponentFactoryCreationSupport(source));
-        m_javaInfo.putArbitraryValue(JavaInfo.FLAG_MANUAL_COMPONENT, Boolean.TRUE);
-      }
+			@Override
+			public void activate() throws Exception {
+				String source = "createLabel(\"New JGoodies label\")";
+				m_javaInfo =
+						JavaInfoUtils.createJavaInfo(
+								m_editor,
+								"javax.swing.JLabel",
+								new DefaultComponentFactoryCreationSupport(source));
+				m_javaInfo.putArbitraryValue(JavaInfo.FLAG_MANUAL_COMPONENT, Boolean.TRUE);
+			}
 
-      @Override
-      public Object getNewObject() {
-        return m_javaInfo;
-      }
-    };
-    // return tool
-    ensureLibrary();
-    return new CreationTool(factory);
-  }
+			@Override
+			public Object getNewObject() {
+				return m_javaInfo;
+			}
+		};
+		// return tool
+		ensureLibrary();
+		return new CreationTool(factory);
+	}
 }
diff --git a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/palette/DefaultComponentFactoryCreateTitleEntryInfo.java b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/palette/DefaultComponentFactoryCreateTitleEntryInfo.java
index 9ca3821ba..968a3db3d 100644
--- a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/palette/DefaultComponentFactoryCreateTitleEntryInfo.java
+++ b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/palette/DefaultComponentFactoryCreateTitleEntryInfo.java
@@ -30,59 +30,59 @@
  * @coverage swing.FormLayout.model
  */
 public final class DefaultComponentFactoryCreateTitleEntryInfo
-    extends
-      DefaultComponentFactoryEntryInfo {
-  private static final Image ICON =
-      Activator.getImage("DefaultComponentFactory/createTitle_java.lang.String_.gif");
+extends
+DefaultComponentFactoryEntryInfo {
+	private static final Image ICON =
+			Activator.getImage("DefaultComponentFactory/createTitle_java.lang.String_.gif");
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DefaultComponentFactoryCreateTitleEntryInfo() {
-    setId(getClass().getName());
-    setName("createTitle(String)");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DefaultComponentFactoryCreateTitleEntryInfo() {
+		setId(getClass().getName());
+		setName("createTitle(String)");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // EntryInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Image getIcon() {
-    return ICON;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// EntryInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Image getIcon() {
+		return ICON;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ToolEntryInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Tool createTool() throws Exception {
-    ICreationFactory factory = new ICreationFactory() {
-      private JavaInfo m_javaInfo;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ToolEntryInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Tool createTool() throws Exception {
+		ICreationFactory factory = new ICreationFactory() {
+			private JavaInfo m_javaInfo;
 
-      @Override
-      public void activate() throws Exception {
-        String source = "createTitle(\"New JGoodies title\")";
-        m_javaInfo =
-            JavaInfoUtils.createJavaInfo(
-                m_editor,
-                "javax.swing.JLabel",
-                new DefaultComponentFactoryCreationSupport(source));
-        m_javaInfo.putArbitraryValue(JavaInfo.FLAG_MANUAL_COMPONENT, Boolean.TRUE);
-      }
+			@Override
+			public void activate() throws Exception {
+				String source = "createTitle(\"New JGoodies title\")";
+				m_javaInfo =
+						JavaInfoUtils.createJavaInfo(
+								m_editor,
+								"javax.swing.JLabel",
+								new DefaultComponentFactoryCreationSupport(source));
+				m_javaInfo.putArbitraryValue(JavaInfo.FLAG_MANUAL_COMPONENT, Boolean.TRUE);
+			}
 
-      @Override
-      public Object getNewObject() {
-        return m_javaInfo;
-      }
-    };
-    // return tool
-    ensureLibrary();
-    return new CreationTool(factory);
-  }
+			@Override
+			public Object getNewObject() {
+				return m_javaInfo;
+			}
+		};
+		// return tool
+		ensureLibrary();
+		return new CreationTool(factory);
+	}
 }
diff --git a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/palette/DefaultComponentFactoryEntryInfo.java b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/palette/DefaultComponentFactoryEntryInfo.java
index d083e1bd8..530726d11 100644
--- a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/palette/DefaultComponentFactoryEntryInfo.java
+++ b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/palette/DefaultComponentFactoryEntryInfo.java
@@ -28,27 +28,27 @@
  * @coverage swing.FormLayout.model
  */
 public abstract class DefaultComponentFactoryEntryInfo extends ToolEntryInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Ensures that jar/source with {@link DefaultComponentFactory} is added to {@link IJavaProject}.
-   */
-  protected final void ensureLibrary() throws Exception {
-    if (!ProjectUtils.hasType(m_javaProject, "com.jgoodies.forms.factories.DefaultComponentFactory")) {
-      Bundle libBundle = Platform.getBundle("org.eclipse.wb.swing.FormLayout.lib");
-      ProjectUtils.addJar(
-          m_javaProject,
-          libBundle,
-          "jgoodies-common-1.8.0.jar",
-          "jgoodies-common-1.8.0-sources.jar");
-      ProjectUtils.addJar(
-          m_javaProject,
-          libBundle,
-          "jgoodies-forms-1.8.0.jar",
-          "jgoodies-forms-1.8.0-sources.jar");
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Ensures that jar/source with {@link DefaultComponentFactory} is added to {@link IJavaProject}.
+	 */
+	protected final void ensureLibrary() throws Exception {
+		if (!ProjectUtils.hasType(m_javaProject, "com.jgoodies.forms.factories.DefaultComponentFactory")) {
+			Bundle libBundle = Platform.getBundle("org.eclipse.wb.swing.FormLayout.lib");
+			ProjectUtils.addJar(
+					m_javaProject,
+					libBundle,
+					"jgoodies-common-1.8.0.jar",
+					"jgoodies-common-1.8.0-sources.jar");
+			ProjectUtils.addJar(
+					m_javaProject,
+					libBundle,
+					"jgoodies-forms-1.8.0.jar",
+					"jgoodies-forms-1.8.0-sources.jar");
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/parser/DefaultComponentFactoryCreationSupport.java b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/parser/DefaultComponentFactoryCreationSupport.java
index c9bcf9264..3525027f2 100644
--- a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/parser/DefaultComponentFactoryCreationSupport.java
+++ b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/parser/DefaultComponentFactoryCreationSupport.java
@@ -32,83 +32,83 @@
  * @coverage swing.FormLayout.model
  */
 public final class DefaultComponentFactoryCreationSupport extends OpaqueCreationSupport
-    implements
-      ILiveCreationSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DefaultComponentFactoryCreationSupport(Expression expression) {
-    super(expression);
-  }
+implements
+ILiveCreationSupport {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DefaultComponentFactoryCreationSupport(Expression expression) {
+		super(expression);
+	}
 
-  public DefaultComponentFactoryCreationSupport(String source) {
-    super("com.jgoodies.forms.factories.DefaultComponentFactory.getInstance()." + source);
-  }
+	public DefaultComponentFactoryCreationSupport(String source) {
+		super("com.jgoodies.forms.factories.DefaultComponentFactory.getInstance()." + source);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ILiveCreationSupport
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public CreationSupport getLiveComponentCreation() {
-    String source = add_getSource(null);
-    return new OpaqueCreationSupport(source);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ILiveCreationSupport
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public CreationSupport getLiveComponentCreation() {
+		String source = add_getSource(null);
+		return new OpaqueCreationSupport(source);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Accessors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void addAccessors(GenericPropertyDescription propertyDescription,
-      List<ExpressionAccessor> accessors) throws Exception {
-    if (propertyDescription.getId().equals("setText(java.lang.String)")) {
-      String signature = getSignature();
-      if (signature.equals("createLabel(java.lang.String)")
-          || signature.equals("createTitle(java.lang.String)")) {
-        String defaultSource = StringConverter.INSTANCE.toJavaSource(m_javaInfo, "");
-        ExpressionAccessor accessor = new FactoryAccessor(0, defaultSource);
-        accessors.add(accessor);
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Accessors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void addAccessors(GenericPropertyDescription propertyDescription,
+			List<ExpressionAccessor> accessors) throws Exception {
+		if (propertyDescription.getId().equals("setText(java.lang.String)")) {
+			String signature = getSignature();
+			if (signature.equals("createLabel(java.lang.String)")
+					|| signature.equals("createTitle(java.lang.String)")) {
+				String defaultSource = StringConverter.INSTANCE.toJavaSource(m_javaInfo, "");
+				ExpressionAccessor accessor = new FactoryAccessor(0, defaultSource);
+				accessors.add(accessor);
+			}
+		}
+	}
 
-  private String getSignature() {
-    MethodInvocation invocation = (MethodInvocation) getNode();
-    return AstNodeUtils.getMethodSignature(invocation);
-  }
+	private String getSignature() {
+		MethodInvocation invocation = (MethodInvocation) getNode();
+		return AstNodeUtils.getMethodSignature(invocation);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Permissions
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean canReorder() {
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Permissions
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean canReorder() {
+		return true;
+	}
 
-  @Override
-  public boolean canReparent() {
-    return true;
-  }
+	@Override
+	public boolean canReparent() {
+		return true;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Delete
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean canDelete() {
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Delete
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean canDelete() {
+		return true;
+	}
 
-  @Override
-  public void delete() throws Exception {
-    JavaInfoUtils.deleteJavaInfo(m_javaInfo, true);
-  }
+	@Override
+	public void delete() throws Exception {
+		JavaInfoUtils.deleteJavaInfo(m_javaInfo, true);
+	}
 }
diff --git a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/parser/ParseFactory.java b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/parser/ParseFactory.java
index ea9d0583a..b918dc3a2 100644
--- a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/parser/ParseFactory.java
+++ b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/parser/ParseFactory.java
@@ -31,33 +31,33 @@
  * @coverage swing.FormLayout.model
  */
 public class ParseFactory extends AbstractParseFactory {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IParseFactory
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public JavaInfo create(AstEditor editor,
-      MethodInvocation invocation,
-      IMethodBinding methodBinding,
-      Expression arguments[],
-      JavaInfo expressionInfo,
-      JavaInfo argumentInfos[],
-      IJavaInfoParseResolver javaInfoResolver) throws Exception {
-    if (invocation.getExpression() != null
-        && AstNodeUtils.isSuccessorOf(
-            invocation.getExpression(),
-            "com.jgoodies.forms.factories.DefaultComponentFactory")
-        && invocation.getName().getIdentifier().startsWith("create")) {
-      Class<?> clazz = getClass(editor, methodBinding.getReturnType());
-      CreationSupport creationSupport = new DefaultComponentFactoryCreationSupport(invocation);
-      return JavaInfoUtils.createJavaInfo(editor, clazz, creationSupport);
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IParseFactory
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public JavaInfo create(AstEditor editor,
+			MethodInvocation invocation,
+			IMethodBinding methodBinding,
+			Expression arguments[],
+			JavaInfo expressionInfo,
+			JavaInfo argumentInfos[],
+			IJavaInfoParseResolver javaInfoResolver) throws Exception {
+		if (invocation.getExpression() != null
+				&& AstNodeUtils.isSuccessorOf(
+						invocation.getExpression(),
+						"com.jgoodies.forms.factories.DefaultComponentFactory")
+				&& invocation.getName().getIdentifier().startsWith("create")) {
+			Class<?> clazz = getClass(editor, methodBinding.getReturnType());
+			CreationSupport creationSupport = new DefaultComponentFactoryCreationSupport(invocation);
+			return JavaInfoUtils.createJavaInfo(editor, clazz, creationSupport);
+		}
+		return null;
+	}
 
-  @Override
-  protected String getToolkitId() {
-    return Activator.PLUGIN_ID;
-  }
+	@Override
+	protected String getToolkitId() {
+		return Activator.PLUGIN_ID;
+	}
 }
diff --git a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/preferences/FormLayoutPreferencePage.java b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/preferences/FormLayoutPreferencePage.java
index 97db92cc4..393c311fc 100644
--- a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/preferences/FormLayoutPreferencePage.java
+++ b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/preferences/FormLayoutPreferencePage.java
@@ -29,47 +29,47 @@
  * @coverage swing.FormLayout.ui
  */
 public final class FormLayoutPreferencePage extends AbstractBindingPreferencesPage {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FormLayoutPreferencePage() {
-    super(Activator.getStore());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FormLayoutPreferencePage() {
+		super(Activator.getStore());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected AbstractBindingComposite createBindingComposite(Composite parent) {
-    return new ContentsComposite(parent, m_bindManager, m_preferences);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected AbstractBindingComposite createBindingComposite(Composite parent) {
+		return new ContentsComposite(parent, m_bindManager, m_preferences);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Contents
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private class ContentsComposite extends AbstractBindingComposite {
-    public ContentsComposite(Composite parent,
-        DataBindManager bindManager,
-        IPreferenceStore preferences) {
-      super(parent, bindManager, preferences);
-      GridLayoutFactory.create(this).noMargins().columns(2);
-      // boolean preferences
-      checkButton(
-          this,
-          2,
-          PreferencesMessages.FormLayoutPreferencePage_useGrab,
-          IPreferenceConstants.P_ENABLE_GRAB);
-      checkButton(
-          this,
-          2,
-          PreferencesMessages.FormLayoutPreferencePage_rightAlignment,
-          IPreferenceConstants.P_ENABLE_RIGHT_ALIGNMENT);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Contents
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private class ContentsComposite extends AbstractBindingComposite {
+		public ContentsComposite(Composite parent,
+				DataBindManager bindManager,
+				IPreferenceStore preferences) {
+			super(parent, bindManager, preferences);
+			GridLayoutFactory.create(this).noMargins().columns(2);
+			// boolean preferences
+			checkButton(
+					this,
+					2,
+					PreferencesMessages.FormLayoutPreferencePage_useGrab,
+					IPreferenceConstants.P_ENABLE_GRAB);
+			checkButton(
+					this,
+					2,
+					PreferencesMessages.FormLayoutPreferencePage_rightAlignment,
+					IPreferenceConstants.P_ENABLE_RIGHT_ALIGNMENT);
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/preferences/PreferencesMessages.java b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/preferences/PreferencesMessages.java
index 00dd8eb3a..ba318df49 100644
--- a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/preferences/PreferencesMessages.java
+++ b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/preferences/PreferencesMessages.java
@@ -3,15 +3,15 @@
 import org.eclipse.osgi.util.NLS;
 
 public class PreferencesMessages extends NLS {
-  private static final String BUNDLE_NAME =
-      "org.eclipse.wb.internal.swing.FormLayout.preferences.PreferencesMessages"; //$NON-NLS-1$
-  public static String FormLayoutPreferencePage_rightAlignment;
-  public static String FormLayoutPreferencePage_useGrab;
-  static {
-    // initialize resource bundle
-    NLS.initializeMessages(BUNDLE_NAME, PreferencesMessages.class);
-  }
+	private static final String BUNDLE_NAME =
+			"org.eclipse.wb.internal.swing.FormLayout.preferences.PreferencesMessages"; //$NON-NLS-1$
+	public static String FormLayoutPreferencePage_rightAlignment;
+	public static String FormLayoutPreferencePage_useGrab;
+	static {
+		// initialize resource bundle
+		NLS.initializeMessages(BUNDLE_NAME, PreferencesMessages.class);
+	}
 
-  private PreferencesMessages() {
-  }
+	private PreferencesMessages() {
+	}
 }
diff --git a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/Activator.java b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/Activator.java
index e8becd41f..547080871 100644
--- a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/Activator.java
+++ b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/Activator.java
@@ -30,72 +30,72 @@
  * @coverage swing.MigLayout.model
  */
 public final class Activator extends AbstractUIPlugin {
-  public static final String PLUGIN_ID = "org.eclipse.wb.swing.MigLayout";
-  private static Activator m_plugin;
+	public static final String PLUGIN_ID = "org.eclipse.wb.swing.MigLayout";
+	private static Activator m_plugin;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Bundle operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void start(BundleContext context) throws Exception {
-    super.start(context);
-    m_plugin = this;
-    LayoutUtil.setDesignTime(null, true);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Bundle operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+		m_plugin = this;
+		LayoutUtil.setDesignTime(null, true);
+	}
 
-  @Override
-  public void stop(BundleContext context) throws Exception {
-    m_plugin = null;
-    super.stop(context);
-  }
+	@Override
+	public void stop(BundleContext context) throws Exception {
+		m_plugin = null;
+		super.stop(context);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the instance of {@link Activator}.
-   */
-  public static Activator getDefault() {
-    return m_plugin;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the instance of {@link Activator}.
+	 */
+	public static Activator getDefault() {
+		return m_plugin;
+	}
 
-  /**
-   * @return the {@link IPreferenceStore} of plugin.
-   */
-  public static IPreferenceStore getStore() {
-    return m_plugin.getPreferenceStore();
-  }
+	/**
+	 * @return the {@link IPreferenceStore} of plugin.
+	 */
+	public static IPreferenceStore getStore() {
+		return m_plugin.getPreferenceStore();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Resources
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final BundleResourceProvider m_resourceProvider =
-      BundleResourceProvider.get(PLUGIN_ID);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Resources
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final BundleResourceProvider m_resourceProvider =
+			BundleResourceProvider.get(PLUGIN_ID);
 
-  /**
-   * @return the {@link InputStream} for file from plugin directory.
-   */
-  public static InputStream getFile(String path) {
-    return m_resourceProvider.getFile(path);
-  }
+	/**
+	 * @return the {@link InputStream} for file from plugin directory.
+	 */
+	public static InputStream getFile(String path) {
+		return m_resourceProvider.getFile(path);
+	}
 
-  /**
-   * @return the {@link Image} from "icons" directory, with caching.
-   */
-  public static Image getImage(String path) {
-    return m_resourceProvider.getImage("icons/" + path);
-  }
+	/**
+	 * @return the {@link Image} from "icons" directory, with caching.
+	 */
+	public static Image getImage(String path) {
+		return m_resourceProvider.getImage("icons/" + path);
+	}
 
-  /**
-   * @return the {@link ImageDescriptor} from "icons" directory.
-   */
-  public static ImageDescriptor getImageDescriptor(String path) {
-    return m_resourceProvider.getImageDescriptor("icons/" + path);
-  }
+	/**
+	 * @return the {@link ImageDescriptor} from "icons" directory.
+	 */
+	public static ImageDescriptor getImageDescriptor(String path) {
+		return m_resourceProvider.getImageDescriptor("icons/" + path);
+	}
 }
diff --git a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/GefMessages.java b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/GefMessages.java
index 611677219..83dfbf224 100644
--- a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/GefMessages.java
+++ b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/GefMessages.java
@@ -3,47 +3,47 @@
 import org.eclipse.osgi.util.NLS;
 
 public class GefMessages extends NLS {
-  private static final String BUNDLE_NAME =
-      "org.eclipse.wb.internal.swing.MigLayout.gef.GefMessages";
-  public static String ColumnHeaderEditPart_appendColumn;
-  public static String ColumnHeaderEditPart_clearColumn;
-  public static String ColumnHeaderEditPart_defaultSize;
-  public static String ColumnHeaderEditPart_deleteColumn;
-  public static String ColumnHeaderEditPart_grow;
-  public static String ColumnHeaderEditPart_insertColumn;
-  public static String ColumnHeaderEditPart_properties;
-  public static String ColumnHeaderEditPart_splitColumn;
-  public static String ColumnsLayoutEditPolicy_columnPrefix;
-  public static String MigLayoutEditPolicy_appendColumn;
-  public static String MigLayoutEditPolicy_appendRow;
-  public static String ResizeHintFigure_keyHint;
-  public static String ResizeHintFigure_maximumSize;
-  public static String ResizeHintFigure_minimumSize;
-  public static String ResizeHintFigure_note;
-  public static String ResizeHintFigure_preferredSize;
-  public static String ResizeHintFigure_unit_centimeters;
-  public static String ResizeHintFigure_unit_default;
-  public static String ResizeHintFigure_unit_inches;
-  public static String ResizeHintFigure_unit_logicalPixels;
-  public static String ResizeHintFigure_unit_millimeters;
-  public static String ResizeHintFigure_unit_percents;
-  public static String ResizeHintFigure_unit_pixels;
-  public static String ResizeHintFigure_unit_points;
-  public static String ResizeHintFigure_unit_screenPercents;
-  public static String RowHeaderEditPart_appendRow;
-  public static String RowHeaderEditPart_clearRow;
-  public static String RowHeaderEditPart_defaultSize;
-  public static String RowHeaderEditPart_deleteRow;
-  public static String RowHeaderEditPart_grow;
-  public static String RowHeaderEditPart_insertRow;
-  public static String RowHeaderEditPart_properties;
-  public static String RowHeaderEditPart_splitRow;
-  public static String RowsLayoutEditPolicy_rowPrefix;
-  static {
-    // initialize resource bundle
-    NLS.initializeMessages(BUNDLE_NAME, GefMessages.class);
-  }
+	private static final String BUNDLE_NAME =
+			"org.eclipse.wb.internal.swing.MigLayout.gef.GefMessages";
+	public static String ColumnHeaderEditPart_appendColumn;
+	public static String ColumnHeaderEditPart_clearColumn;
+	public static String ColumnHeaderEditPart_defaultSize;
+	public static String ColumnHeaderEditPart_deleteColumn;
+	public static String ColumnHeaderEditPart_grow;
+	public static String ColumnHeaderEditPart_insertColumn;
+	public static String ColumnHeaderEditPart_properties;
+	public static String ColumnHeaderEditPart_splitColumn;
+	public static String ColumnsLayoutEditPolicy_columnPrefix;
+	public static String MigLayoutEditPolicy_appendColumn;
+	public static String MigLayoutEditPolicy_appendRow;
+	public static String ResizeHintFigure_keyHint;
+	public static String ResizeHintFigure_maximumSize;
+	public static String ResizeHintFigure_minimumSize;
+	public static String ResizeHintFigure_note;
+	public static String ResizeHintFigure_preferredSize;
+	public static String ResizeHintFigure_unit_centimeters;
+	public static String ResizeHintFigure_unit_default;
+	public static String ResizeHintFigure_unit_inches;
+	public static String ResizeHintFigure_unit_logicalPixels;
+	public static String ResizeHintFigure_unit_millimeters;
+	public static String ResizeHintFigure_unit_percents;
+	public static String ResizeHintFigure_unit_pixels;
+	public static String ResizeHintFigure_unit_points;
+	public static String ResizeHintFigure_unit_screenPercents;
+	public static String RowHeaderEditPart_appendRow;
+	public static String RowHeaderEditPart_clearRow;
+	public static String RowHeaderEditPart_defaultSize;
+	public static String RowHeaderEditPart_deleteRow;
+	public static String RowHeaderEditPart_grow;
+	public static String RowHeaderEditPart_insertRow;
+	public static String RowHeaderEditPart_properties;
+	public static String RowHeaderEditPart_splitRow;
+	public static String RowsLayoutEditPolicy_rowPrefix;
+	static {
+		// initialize resource bundle
+		NLS.initializeMessages(BUNDLE_NAME, GefMessages.class);
+	}
 
-  private GefMessages() {
-  }
+	private GefMessages() {
+	}
 }
diff --git a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/LayoutEditPolicyFactory.java b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/LayoutEditPolicyFactory.java
index 1a9db4101..c8356ed38 100644
--- a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/LayoutEditPolicyFactory.java
+++ b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/LayoutEditPolicyFactory.java
@@ -23,19 +23,19 @@
  * @coverage swing.MigLayout.policy
  */
 public final class LayoutEditPolicyFactory implements ILayoutEditPolicyFactory {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ILayoutEditPolicyFactory
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public LayoutEditPolicy createLayoutEditPolicy(EditPart context, Object model) {
-    if (model instanceof LayoutInfo) {
-      Class<?> layoutClass = model.getClass();
-      if (layoutClass == MigLayoutInfo.class) {
-        return new MigLayoutEditPolicy((MigLayoutInfo) model);
-      }
-    }
-    // not found
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ILayoutEditPolicyFactory
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public LayoutEditPolicy createLayoutEditPolicy(EditPart context, Object model) {
+		if (model instanceof LayoutInfo) {
+			Class<?> layoutClass = model.getClass();
+			if (layoutClass == MigLayoutInfo.class) {
+				return new MigLayoutEditPolicy((MigLayoutInfo) model);
+			}
+		}
+		// not found
+		return null;
+	}
 }
diff --git a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/MigGridHelper.java b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/MigGridHelper.java
index 0b1aba579..e2d05528b 100644
--- a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/MigGridHelper.java
+++ b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/MigGridHelper.java
@@ -22,22 +22,22 @@
  * @coverage swing.MigLayout.policy
  */
 public final class MigGridHelper extends AbstractGridHelper {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public MigGridHelper(GraphicalEditPolicy editPolicy, boolean forTarget) {
-    super(editPolicy, forTarget);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public MigGridHelper(GraphicalEditPolicy editPolicy, boolean forTarget) {
+		super(editPolicy, forTarget);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Feedback
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected IGridInfo getGridInfo() {
-    return ((MigLayoutInfo) getAbstractLayout()).getGridInfo();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Feedback
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected IGridInfo getGridInfo() {
+		return ((MigLayoutInfo) getAbstractLayout()).getGridInfo();
+	}
 }
diff --git a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/MigLayoutEditPolicy.java b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/MigLayoutEditPolicy.java
index aae05f001..5cc6ecc45 100644
--- a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/MigLayoutEditPolicy.java
+++ b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/MigLayoutEditPolicy.java
@@ -55,469 +55,469 @@
  * @coverage swing.MigLayout.policy
  */
 public final class MigLayoutEditPolicy extends AbstractGridLayoutEditPolicy {
-  private final MigLayoutInfo m_layout;
+	private final MigLayoutInfo m_layout;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public MigLayoutEditPolicy(MigLayoutInfo layout) {
-    super(layout);
-    m_layout = layout;
-    m_gridTargetHelper = new MigGridHelper(this, true);
-    m_gridSelectionHelper = new MigGridHelper(this, false);
-    // add listeners
-    new BroadcastListenerHelper(layout, this, new ObjectEventListener() {
-      @Override
-      public void refreshed() throws Exception {
-        decorateChildren();
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public MigLayoutEditPolicy(MigLayoutInfo layout) {
+		super(layout);
+		m_layout = layout;
+		m_gridTargetHelper = new MigGridHelper(this, true);
+		m_gridSelectionHelper = new MigGridHelper(this, false);
+		// add listeners
+		new BroadcastListenerHelper(layout, this, new ObjectEventListener() {
+			@Override
+			public void refreshed() throws Exception {
+				decorateChildren();
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Requests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected ILayoutRequestValidator getRequestValidator() {
-    return ComponentsLayoutRequestValidator.INSTANCE_EXT;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Requests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected ILayoutRequestValidator getRequestValidator() {
+		return ComponentsLayoutRequestValidator.INSTANCE_EXT;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected IGridInfo getGridInfo() {
-    return m_layout.getGridInfo();
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Selection
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final String SECONDARY_SELECTION_FEEDBACK_ROLE = "Secondary Selection Feedback";
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected IGridInfo getGridInfo() {
+		return m_layout.getGridInfo();
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Selection
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final String SECONDARY_SELECTION_FEEDBACK_ROLE = "Secondary Selection Feedback";
 
-  /**
-   * Decorates (with {@link SelectionEditPolicy}) all components children.
-   * <p>
-   * We need this because when we move component from dock side to usual cell, we should use
-   * different {@link SelectionEditPolicy}.
-   */
-  private void decorateChildren() {
-    for (EditPart child : getHost().getChildren()) {
-      decorateChild(child);
-    }
-  }
+	/**
+	 * Decorates (with {@link SelectionEditPolicy}) all components children.
+	 * <p>
+	 * We need this because when we move component from dock side to usual cell, we should use
+	 * different {@link SelectionEditPolicy}.
+	 */
+	private void decorateChildren() {
+		for (EditPart child : getHost().getChildren()) {
+			decorateChild(child);
+		}
+	}
 
-  @Override
-  protected void decorateChild(EditPart child) {
-    if (child.getModel() instanceof ComponentInfo) {
-      ComponentInfo component = (ComponentInfo) child.getModel();
-      CellConstraintsSupport constraints = MigLayoutInfo.getConstraints(component);
-      if (constraints.getDockSide() == null) {
-        setSelectionEditPolicy(child, new MigSelectionEditPolicy(m_layout, component));
-        // secondary selection for component in splitted cell
-        if (m_layout.getCellComponents(constraints.getX(), constraints.getY()).size() > 1) {
-          child.installEditPolicy(
-              SECONDARY_SELECTION_FEEDBACK_ROLE,
-              new NonResizableSelectionEditPolicy());
-        } else {
-          child.installEditPolicy(SECONDARY_SELECTION_FEEDBACK_ROLE, null);
-        }
-      } else {
-        setSelectionEditPolicy(child, new NonResizableSelectionEditPolicy());
-      }
-    }
-  }
+	@Override
+	protected void decorateChild(EditPart child) {
+		if (child.getModel() instanceof ComponentInfo) {
+			ComponentInfo component = (ComponentInfo) child.getModel();
+			CellConstraintsSupport constraints = MigLayoutInfo.getConstraints(component);
+			if (constraints.getDockSide() == null) {
+				setSelectionEditPolicy(child, new MigSelectionEditPolicy(m_layout, component));
+				// secondary selection for component in splitted cell
+				if (m_layout.getCellComponents(constraints.getX(), constraints.getY()).size() > 1) {
+					child.installEditPolicy(
+							SECONDARY_SELECTION_FEEDBACK_ROLE,
+							new NonResizableSelectionEditPolicy());
+				} else {
+					child.installEditPolicy(SECONDARY_SELECTION_FEEDBACK_ROLE, null);
+				}
+			} else {
+				setSelectionEditPolicy(child, new NonResizableSelectionEditPolicy());
+			}
+		}
+	}
 
-  /**
-   * If {@link EditPart} has different type of {@link SelectionEditPolicy}, replaces it with new
-   * one.
-   */
-  private static void setSelectionEditPolicy(EditPart child, SelectionEditPolicy selectionPolicy) {
-    EditPolicy oldPolicy = child.getEditPolicy(EditPolicy.SELECTION_ROLE);
-    if (oldPolicy == null || oldPolicy.getClass() != selectionPolicy.getClass()) {
-      child.installEditPolicy(EditPolicy.SELECTION_ROLE, selectionPolicy);
-    }
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Additional feedback
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private LayoutEditPolicy m_flowPolicy;
-  private Command m_flowCommand;
+	/**
+	 * If {@link EditPart} has different type of {@link SelectionEditPolicy}, replaces it with new
+	 * one.
+	 */
+	private static void setSelectionEditPolicy(EditPart child, SelectionEditPolicy selectionPolicy) {
+		EditPolicy oldPolicy = child.getEditPolicy(EditPolicy.SELECTION_ROLE);
+		if (oldPolicy == null || oldPolicy.getClass() != selectionPolicy.getClass()) {
+			child.installEditPolicy(EditPolicy.SELECTION_ROLE, selectionPolicy);
+		}
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Additional feedback
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private LayoutEditPolicy m_flowPolicy;
+	private Command m_flowCommand;
 
-  @Override
-  protected boolean showOccupiedLayoutTargetFeedback(Request request) {
-    if (m_flowPolicy == null) {
-      m_flowPolicy = new MigLayoutSplitEditPolicy(m_layout, m_target.m_column, m_target.m_row);
-      m_flowPolicy.setHost(getHost());
-    }
-    m_flowPolicy.showTargetFeedback(request);
-    m_flowCommand = m_flowPolicy.getCommand(request);
-    return true;
-  }
+	@Override
+	protected boolean showOccupiedLayoutTargetFeedback(Request request) {
+		if (m_flowPolicy == null) {
+			m_flowPolicy = new MigLayoutSplitEditPolicy(m_layout, m_target.m_column, m_target.m_row);
+			m_flowPolicy.setHost(getHost());
+		}
+		m_flowPolicy.showTargetFeedback(request);
+		m_flowCommand = m_flowPolicy.getCommand(request);
+		return true;
+	}
 
-  @Override
-  protected void eraseOccupiedLayoutTargetFeedback(Request request) {
-    if (m_flowPolicy != null) {
-      m_flowPolicy.eraseTargetFeedback(request);
-      m_flowPolicy.setHost(null);
-      m_flowPolicy = null;
-      m_flowCommand = null;
-    }
-  }
+	@Override
+	protected void eraseOccupiedLayoutTargetFeedback(Request request) {
+		if (m_flowPolicy != null) {
+			m_flowPolicy.eraseTargetFeedback(request);
+			m_flowPolicy.setHost(null);
+			m_flowPolicy = null;
+			m_flowCommand = null;
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if prepared "target" can be used.
-   */
-  private boolean isValidTarget() {
-    // may be invalid cell
-    if (!m_target.m_valid) {
-      return false;
-    }
-    // check for dimension operations limitations
-    if (!m_layout.canChangeDimensions()) {
-      // can not insert
-      if (m_target.m_columnInsert || m_target.m_rowInsert) {
-        return false;
-      }
-      // can not append
-      if (m_target.m_column >= m_layout.getColumns().size()
-          || m_target.m_row >= m_layout.getRows().size()) {
-        return false;
-      }
-    }
-    // OK
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if prepared "target" can be used.
+	 */
+	private boolean isValidTarget() {
+		// may be invalid cell
+		if (!m_target.m_valid) {
+			return false;
+		}
+		// check for dimension operations limitations
+		if (!m_layout.canChangeDimensions()) {
+			// can not insert
+			if (m_target.m_columnInsert || m_target.m_rowInsert) {
+				return false;
+			}
+			// can not append
+			if (m_target.m_column >= m_layout.getColumns().size()
+					|| m_target.m_row >= m_layout.getRows().size()) {
+				return false;
+			}
+		}
+		// OK
+		return true;
+	}
 
-  @Override
-  public Command getCommand(Request request) {
-    if (m_flowCommand != null) {
-      return m_flowCommand;
-    }
-    return super.getCommand(request);
-  }
+	@Override
+	public Command getCommand(Request request) {
+		if (m_flowCommand != null) {
+			return m_flowCommand;
+		}
+		return super.getCommand(request);
+	}
 
-  @Override
-  protected Command getCreateCommand(CreateRequest request) {
-    if (isValidTarget()) {
-      Object newObject = request.getNewObject();
-      if (newObject instanceof ComponentInfo) {
-        final ComponentInfo component = (ComponentInfo) newObject;
-        return new EditCommand(m_layout) {
-          @Override
-          protected void executeEdit() throws Exception {
-            m_layout.command_CREATE(
-                component,
-                m_target.m_column,
-                m_target.m_columnInsert,
-                m_target.m_row,
-                m_target.m_rowInsert);
-          }
-        };
-      }
-    }
-    return null;
-  }
+	@Override
+	protected Command getCreateCommand(CreateRequest request) {
+		if (isValidTarget()) {
+			Object newObject = request.getNewObject();
+			if (newObject instanceof ComponentInfo) {
+				final ComponentInfo component = (ComponentInfo) newObject;
+				return new EditCommand(m_layout) {
+					@Override
+					protected void executeEdit() throws Exception {
+						m_layout.command_CREATE(
+								component,
+								m_target.m_column,
+								m_target.m_columnInsert,
+								m_target.m_row,
+								m_target.m_rowInsert);
+					}
+				};
+			}
+		}
+		return null;
+	}
 
-  @Override
-  @SuppressWarnings("unchecked")
-  protected Command getPasteCommand(PasteRequest request) {
-    List<JavaInfoMemento> mementos = (List<JavaInfoMemento>) request.getMemento();
-    if (isValidTarget() && mementos.size() == 1) {
-      return LayoutPolicyUtils2.getPasteCommand(
-          m_layout,
-          request,
-          ComponentInfo.class,
-          new IPasteProcessor<ComponentInfo>() {
-            public void process(ComponentInfo component) throws Exception {
-              m_layout.command_CREATE(
-                  component,
-                  m_target.m_column,
-                  m_target.m_columnInsert,
-                  m_target.m_row,
-                  m_target.m_rowInsert);
-            }
-          });
-    }
-    return null;
-  }
+	@Override
+	@SuppressWarnings("unchecked")
+	protected Command getPasteCommand(PasteRequest request) {
+		List<JavaInfoMemento> mementos = (List<JavaInfoMemento>) request.getMemento();
+		if (isValidTarget() && mementos.size() == 1) {
+			return LayoutPolicyUtils2.getPasteCommand(
+					m_layout,
+					request,
+					ComponentInfo.class,
+					new IPasteProcessor<ComponentInfo>() {
+						public void process(ComponentInfo component) throws Exception {
+							m_layout.command_CREATE(
+									component,
+									m_target.m_column,
+									m_target.m_columnInsert,
+									m_target.m_row,
+									m_target.m_rowInsert);
+						}
+					});
+		}
+		return null;
+	}
 
-  @Override
-  protected Command getMoveCommand(ChangeBoundsRequest request) {
-    if (isValidTarget() && request.getEditParts().size() == 1) {
-      EditPart moveEditPart = request.getEditParts().get(0);
-      if (moveEditPart.getModel() instanceof ComponentInfo) {
-        final ComponentInfo component = (ComponentInfo) moveEditPart.getModel();
-        return new EditCommand(m_layout) {
-          @Override
-          protected void executeEdit() throws Exception {
-            m_layout.command_MOVE(
-                component,
-                m_target.m_column,
-                m_target.m_columnInsert,
-                m_target.m_row,
-                m_target.m_rowInsert);
-          }
-        };
-      }
-    }
-    return null;
-  }
+	@Override
+	protected Command getMoveCommand(ChangeBoundsRequest request) {
+		if (isValidTarget() && request.getEditParts().size() == 1) {
+			EditPart moveEditPart = request.getEditParts().get(0);
+			if (moveEditPart.getModel() instanceof ComponentInfo) {
+				final ComponentInfo component = (ComponentInfo) moveEditPart.getModel();
+				return new EditCommand(m_layout) {
+					@Override
+					protected void executeEdit() throws Exception {
+						m_layout.command_MOVE(
+								component,
+								m_target.m_column,
+								m_target.m_columnInsert,
+								m_target.m_row,
+								m_target.m_rowInsert);
+					}
+				};
+			}
+		}
+		return null;
+	}
 
-  @Override
-  protected Command getAddCommand(ChangeBoundsRequest request) {
-    return getMoveCommand(request);
-  }
+	@Override
+	protected Command getAddCommand(ChangeBoundsRequest request) {
+		return getMoveCommand(request);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Grid target
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Determines parameters of insert feedback.
-   *
-   * @return the array of: visual gap, begin/end of insert feedback, begin/end of target feedback.
-   */
-  public static int[] getInsertFeedbackParameters(Interval interval,
-      Interval nextInterval,
-      int minGap) {
-    int gap = nextInterval.begin() - interval.end();
-    int visualGap = Math.max(gap, minGap);
-    // determine x1/x2
-    int x1, x2;
-    {
-      int a = interval.end();
-      int b = nextInterval.begin();
-      int x1_2 = a + b - visualGap;
-      x1 = x1_2 % 2 == 0 ? x1_2 / 2 : x1_2 / 2 - 1;
-      x2 = a + b - x1;
-      // we don't want to have insert feedback be same as intervals
-      if (x1 == a - 1) {
-        x1--;
-        x2++;
-      }
-    }
-    //
-    return new int[]{visualGap, x1, x2, x1 - minGap, x2 + minGap};
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Grid target
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Determines parameters of insert feedback.
+	 *
+	 * @return the array of: visual gap, begin/end of insert feedback, begin/end of target feedback.
+	 */
+	public static int[] getInsertFeedbackParameters(Interval interval,
+			Interval nextInterval,
+			int minGap) {
+		int gap = nextInterval.begin() - interval.end();
+		int visualGap = Math.max(gap, minGap);
+		// determine x1/x2
+		int x1, x2;
+		{
+			int a = interval.end();
+			int b = nextInterval.begin();
+			int x1_2 = a + b - visualGap;
+			x1 = x1_2 % 2 == 0 ? x1_2 / 2 : x1_2 / 2 - 1;
+			x2 = a + b - x1;
+			// we don't want to have insert feedback be same as intervals
+			if (x1 == a - 1) {
+				x1--;
+				x2++;
+			}
+		}
+		//
+		return new int[]{visualGap, x1, x2, x1 - minGap, x2 + minGap};
+	}
 
-  @Override
-  protected void updateGridTarget(Point mouseLocation) throws Exception {
-    m_target = new GridTarget();
-    // prepare location in model
-    Point location = mouseLocation.getCopy();
-    PolicyUtils.translateAbsoluteToModel(this, location);
-    // prepare grid information
-    IGridInfo gridInfo = m_layout.getGridInfo();
-    Interval[] columnIntervals = gridInfo.getColumnIntervals();
-    Interval[] rowIntervals = gridInfo.getRowIntervals();
-    int lastX = columnIntervals.length != 0 ? columnIntervals[columnIntervals.length - 1].end() : 0;
-    int lastY = rowIntervals.length != 0 ? rowIntervals[rowIntervals.length - 1].end() : 0;
-    // prepare insert bounds
-    {
-      m_target.m_rowInsertBounds.x = columnIntervals[0].begin() - INSERT_MARGINS;
-      m_target.m_rowInsertBounds.setRight(lastX + INSERT_MARGINS);
-      m_target.m_columnInsertBounds.y = rowIntervals[0].begin() - INSERT_MARGINS;
-      m_target.m_columnInsertBounds.setBottom(lastY + INSERT_MARGINS);
-    }
-    // find existing column
-    for (int columnIndex = 0; columnIndex < columnIntervals.length; columnIndex++) {
-      boolean isLast = columnIndex == columnIntervals.length - 1;
-      Interval interval = columnIntervals[columnIndex];
-      Interval nextInterval = !isLast ? columnIntervals[columnIndex + 1] : null;
-      // before first
-      if (location.x < columnIntervals[0].begin()) {
-        m_target.m_column = 0;
-        m_target.m_columnInsert = true;
-        // prepare parameters
-        int[] parameters =
-            getInsertFeedbackParameters(new Interval(0, 0), interval, INSERT_COLUMN_SIZE);
-        // feedback
-        m_target.m_feedbackBounds.x = parameters[3];
-        m_target.m_feedbackBounds.width = parameters[4] - parameters[3];
-        // insert
-        m_target.m_columnInsertBounds.x = parameters[1];
-        m_target.m_columnInsertBounds.width = parameters[2] - parameters[1];
-        // stop
-        break;
-      }
-      // gap or near to end of interval
-      if (!isLast) {
-        int gap = nextInterval.begin() - interval.end();
-        boolean directGap = interval.end() <= location.x && location.x < nextInterval.begin();
-        boolean narrowGap = gap < 2 * INSERT_COLUMN_SIZE;
-        boolean nearEnd = Math.abs(location.x - interval.end()) < INSERT_COLUMN_SIZE;
-        boolean nearBegin = Math.abs(location.x - nextInterval.begin()) < INSERT_COLUMN_SIZE;
-        if (directGap || narrowGap && (nearEnd || nearBegin)) {
-          m_target.m_column = columnIndex + 1;
-          m_target.m_columnInsert = true;
-          // prepare parameters
-          int[] parameters =
-              getInsertFeedbackParameters(interval, nextInterval, INSERT_COLUMN_SIZE);
-          // feedback
-          m_target.m_feedbackBounds.x = parameters[3];
-          m_target.m_feedbackBounds.width = parameters[4] - parameters[3];
-          // insert
-          m_target.m_columnInsertBounds.x = parameters[1];
-          m_target.m_columnInsertBounds.width = parameters[2] - parameters[1];
-          // stop
-          break;
-        }
-      }
-      // column
-      if (interval.contains(location.x)) {
-        m_target.m_column = columnIndex;
-        // feedback
-        m_target.m_feedbackBounds.x = interval.begin();
-        m_target.m_feedbackBounds.width = interval.length()+ 1;
-        // stop
-        break;
-      }
-    }
-    // find virtual column
-    if (m_target.m_column == -1) {
-      int columnGap = gridInfo.getVirtualColumnGap();
-      int columnSize = gridInfo.getVirtualColumnSize();
-      //
-      int newWidth = columnSize + columnGap;
-      int newDelta = (location.x - lastX - columnGap / 2) / newWidth;
-      //
-      m_target.m_column = columnIntervals.length + newDelta;
-      m_target.m_feedbackBounds.x = lastX + columnGap + newWidth * newDelta;
-      m_target.m_feedbackBounds.width = columnSize + 1;
-    }
-    // find existing row
-    for (int rowIndex = 0; rowIndex < rowIntervals.length; rowIndex++) {
-      boolean isLast = rowIndex == rowIntervals.length - 1;
-      Interval interval = rowIntervals[rowIndex];
-      Interval nextInterval = !isLast ? rowIntervals[rowIndex + 1] : null;
-      // before first
-      if (location.y < rowIntervals[0].begin()) {
-        m_target.m_row = 0;
-        m_target.m_rowInsert = true;
-        // prepare parameters
-        int[] parameters =
-            getInsertFeedbackParameters(new Interval(0, 0), interval, INSERT_ROW_SIZE);
-        // feedback
-        m_target.m_feedbackBounds.y = parameters[3];
-        m_target.m_feedbackBounds.height = parameters[4] - parameters[3];
-        // insert
-        m_target.m_rowInsertBounds.y = parameters[1];
-        m_target.m_rowInsertBounds.height = parameters[2] - parameters[1];
-        // stop
-        break;
-      }
-      // gap or near to end of interval
-      if (!isLast) {
-        int gap = nextInterval.begin() - interval.end();
-        boolean directGap = interval.end() <= location.y && location.y < nextInterval.begin();
-        boolean narrowGap = gap < 2 * INSERT_ROW_SIZE;
-        boolean nearEnd = Math.abs(location.y - interval.end()) < INSERT_ROW_SIZE;
-        boolean nearBegin = Math.abs(location.y - nextInterval.begin()) < INSERT_ROW_SIZE;
-        if (directGap || narrowGap && (nearEnd || nearBegin)) {
-          m_target.m_row = rowIndex + 1;
-          m_target.m_rowInsert = true;
-          // prepare parameters
-          int[] parameters = getInsertFeedbackParameters(interval, nextInterval, INSERT_ROW_SIZE);
-          // feedback
-          m_target.m_feedbackBounds.y = parameters[3];
-          m_target.m_feedbackBounds.height = parameters[4] - parameters[3];
-          // insert
-          m_target.m_rowInsertBounds.y = parameters[1];
-          m_target.m_rowInsertBounds.height = parameters[2] - parameters[1];
-          // stop
-          break;
-        }
-      }
-      // row
-      if (interval.contains(location.y)) {
-        m_target.m_row = rowIndex;
-        // feedback
-        m_target.m_feedbackBounds.y = interval.begin();
-        m_target.m_feedbackBounds.height = interval.length()+ 1;
-        // stop
-        break;
-      }
-    }
-    // find virtual row
-    if (m_target.m_row == -1) {
-      int rowGap = gridInfo.getVirtualRowGap();
-      int rowSize = gridInfo.getVirtualRowSize();
-      //
-      int newHeight = rowSize + rowGap;
-      int newDelta = (location.y - lastY - rowGap / 2) / newHeight;
-      //
-      m_target.m_row = rowIntervals.length + newDelta;
-      m_target.m_feedbackBounds.y = lastY + rowGap + newHeight * newDelta;
-      m_target.m_feedbackBounds.height = rowSize + 1;
-    }
-  }
+	@Override
+	protected void updateGridTarget(Point mouseLocation) throws Exception {
+		m_target = new GridTarget();
+		// prepare location in model
+		Point location = mouseLocation.getCopy();
+		PolicyUtils.translateAbsoluteToModel(this, location);
+		// prepare grid information
+		IGridInfo gridInfo = m_layout.getGridInfo();
+		Interval[] columnIntervals = gridInfo.getColumnIntervals();
+		Interval[] rowIntervals = gridInfo.getRowIntervals();
+		int lastX = columnIntervals.length != 0 ? columnIntervals[columnIntervals.length - 1].end() : 0;
+		int lastY = rowIntervals.length != 0 ? rowIntervals[rowIntervals.length - 1].end() : 0;
+		// prepare insert bounds
+		{
+			m_target.m_rowInsertBounds.x = columnIntervals[0].begin() - INSERT_MARGINS;
+			m_target.m_rowInsertBounds.setRight(lastX + INSERT_MARGINS);
+			m_target.m_columnInsertBounds.y = rowIntervals[0].begin() - INSERT_MARGINS;
+			m_target.m_columnInsertBounds.setBottom(lastY + INSERT_MARGINS);
+		}
+		// find existing column
+		for (int columnIndex = 0; columnIndex < columnIntervals.length; columnIndex++) {
+			boolean isLast = columnIndex == columnIntervals.length - 1;
+			Interval interval = columnIntervals[columnIndex];
+			Interval nextInterval = !isLast ? columnIntervals[columnIndex + 1] : null;
+			// before first
+			if (location.x < columnIntervals[0].begin()) {
+				m_target.m_column = 0;
+				m_target.m_columnInsert = true;
+				// prepare parameters
+				int[] parameters =
+						getInsertFeedbackParameters(new Interval(0, 0), interval, INSERT_COLUMN_SIZE);
+				// feedback
+				m_target.m_feedbackBounds.x = parameters[3];
+				m_target.m_feedbackBounds.width = parameters[4] - parameters[3];
+				// insert
+				m_target.m_columnInsertBounds.x = parameters[1];
+				m_target.m_columnInsertBounds.width = parameters[2] - parameters[1];
+				// stop
+				break;
+			}
+			// gap or near to end of interval
+			if (!isLast) {
+				int gap = nextInterval.begin() - interval.end();
+				boolean directGap = interval.end() <= location.x && location.x < nextInterval.begin();
+				boolean narrowGap = gap < 2 * INSERT_COLUMN_SIZE;
+				boolean nearEnd = Math.abs(location.x - interval.end()) < INSERT_COLUMN_SIZE;
+				boolean nearBegin = Math.abs(location.x - nextInterval.begin()) < INSERT_COLUMN_SIZE;
+				if (directGap || narrowGap && (nearEnd || nearBegin)) {
+					m_target.m_column = columnIndex + 1;
+					m_target.m_columnInsert = true;
+					// prepare parameters
+					int[] parameters =
+							getInsertFeedbackParameters(interval, nextInterval, INSERT_COLUMN_SIZE);
+					// feedback
+					m_target.m_feedbackBounds.x = parameters[3];
+					m_target.m_feedbackBounds.width = parameters[4] - parameters[3];
+					// insert
+					m_target.m_columnInsertBounds.x = parameters[1];
+					m_target.m_columnInsertBounds.width = parameters[2] - parameters[1];
+					// stop
+					break;
+				}
+			}
+			// column
+			if (interval.contains(location.x)) {
+				m_target.m_column = columnIndex;
+				// feedback
+				m_target.m_feedbackBounds.x = interval.begin();
+				m_target.m_feedbackBounds.width = interval.length()+ 1;
+				// stop
+				break;
+			}
+		}
+		// find virtual column
+		if (m_target.m_column == -1) {
+			int columnGap = gridInfo.getVirtualColumnGap();
+			int columnSize = gridInfo.getVirtualColumnSize();
+			//
+			int newWidth = columnSize + columnGap;
+			int newDelta = (location.x - lastX - columnGap / 2) / newWidth;
+			//
+			m_target.m_column = columnIntervals.length + newDelta;
+			m_target.m_feedbackBounds.x = lastX + columnGap + newWidth * newDelta;
+			m_target.m_feedbackBounds.width = columnSize + 1;
+		}
+		// find existing row
+		for (int rowIndex = 0; rowIndex < rowIntervals.length; rowIndex++) {
+			boolean isLast = rowIndex == rowIntervals.length - 1;
+			Interval interval = rowIntervals[rowIndex];
+			Interval nextInterval = !isLast ? rowIntervals[rowIndex + 1] : null;
+			// before first
+			if (location.y < rowIntervals[0].begin()) {
+				m_target.m_row = 0;
+				m_target.m_rowInsert = true;
+				// prepare parameters
+				int[] parameters =
+						getInsertFeedbackParameters(new Interval(0, 0), interval, INSERT_ROW_SIZE);
+				// feedback
+				m_target.m_feedbackBounds.y = parameters[3];
+				m_target.m_feedbackBounds.height = parameters[4] - parameters[3];
+				// insert
+				m_target.m_rowInsertBounds.y = parameters[1];
+				m_target.m_rowInsertBounds.height = parameters[2] - parameters[1];
+				// stop
+				break;
+			}
+			// gap or near to end of interval
+			if (!isLast) {
+				int gap = nextInterval.begin() - interval.end();
+				boolean directGap = interval.end() <= location.y && location.y < nextInterval.begin();
+				boolean narrowGap = gap < 2 * INSERT_ROW_SIZE;
+				boolean nearEnd = Math.abs(location.y - interval.end()) < INSERT_ROW_SIZE;
+				boolean nearBegin = Math.abs(location.y - nextInterval.begin()) < INSERT_ROW_SIZE;
+				if (directGap || narrowGap && (nearEnd || nearBegin)) {
+					m_target.m_row = rowIndex + 1;
+					m_target.m_rowInsert = true;
+					// prepare parameters
+					int[] parameters = getInsertFeedbackParameters(interval, nextInterval, INSERT_ROW_SIZE);
+					// feedback
+					m_target.m_feedbackBounds.y = parameters[3];
+					m_target.m_feedbackBounds.height = parameters[4] - parameters[3];
+					// insert
+					m_target.m_rowInsertBounds.y = parameters[1];
+					m_target.m_rowInsertBounds.height = parameters[2] - parameters[1];
+					// stop
+					break;
+				}
+			}
+			// row
+			if (interval.contains(location.y)) {
+				m_target.m_row = rowIndex;
+				// feedback
+				m_target.m_feedbackBounds.y = interval.begin();
+				m_target.m_feedbackBounds.height = interval.length()+ 1;
+				// stop
+				break;
+			}
+		}
+		// find virtual row
+		if (m_target.m_row == -1) {
+			int rowGap = gridInfo.getVirtualRowGap();
+			int rowSize = gridInfo.getVirtualRowSize();
+			//
+			int newHeight = rowSize + rowGap;
+			int newDelta = (location.y - lastY - rowGap / 2) / newHeight;
+			//
+			m_target.m_row = rowIntervals.length + newDelta;
+			m_target.m_feedbackBounds.y = lastY + rowGap + newHeight * newDelta;
+			m_target.m_feedbackBounds.height = rowSize + 1;
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IHeadersProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public LayoutEditPolicy getContainerLayoutPolicy(boolean horizontal) {
-    if (horizontal) {
-      return new ColumnsLayoutEditPolicy(this, m_layout);
-    } else {
-      return new RowsLayoutEditPolicy(this, m_layout);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IHeadersProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public LayoutEditPolicy getContainerLayoutPolicy(boolean horizontal) {
+		if (horizontal) {
+			return new ColumnsLayoutEditPolicy(this, m_layout);
+		} else {
+			return new RowsLayoutEditPolicy(this, m_layout);
+		}
+	}
 
-  public List<?> getHeaders(boolean horizontal) {
-    return horizontal ? m_layout.getColumns() : m_layout.getRows();
-  }
+	public List<?> getHeaders(boolean horizontal) {
+		return horizontal ? m_layout.getColumns() : m_layout.getRows();
+	}
 
-  public EditPart createHeaderEditPart(boolean horizontal, Object model) {
-    if (horizontal) {
-      return new ColumnHeaderEditPart(m_layout, (MigColumnInfo) model, getHostFigure());
-    } else {
-      return new RowHeaderEditPart(m_layout, (MigRowInfo) model, getHostFigure());
-    }
-  }
+	public EditPart createHeaderEditPart(boolean horizontal, Object model) {
+		if (horizontal) {
+			return new ColumnHeaderEditPart(m_layout, (MigColumnInfo) model, getHostFigure());
+		} else {
+			return new RowHeaderEditPart(m_layout, (MigRowInfo) model, getHostFigure());
+		}
+	}
 
-  public void buildContextMenu(IMenuManager manager, boolean horizontal) {
-    if (horizontal) {
-      manager.add(new ObjectInfoAction(m_layout, GefMessages.MigLayoutEditPolicy_appendColumn) {
-        @Override
-        protected void runEx() throws Exception {
-          int index = m_layout.getColumns().size();
-          m_layout.insertColumn(index);
-        }
-      });
-    } else {
-      manager.add(new ObjectInfoAction(m_layout, GefMessages.MigLayoutEditPolicy_appendRow) {
-        @Override
-        protected void runEx() throws Exception {
-          int index = m_layout.getRows().size();
-          m_layout.insertRow(index);
-        }
-      });
-    }
-  }
+	public void buildContextMenu(IMenuManager manager, boolean horizontal) {
+		if (horizontal) {
+			manager.add(new ObjectInfoAction(m_layout, GefMessages.MigLayoutEditPolicy_appendColumn) {
+				@Override
+				protected void runEx() throws Exception {
+					int index = m_layout.getColumns().size();
+					m_layout.insertColumn(index);
+				}
+			});
+		} else {
+			manager.add(new ObjectInfoAction(m_layout, GefMessages.MigLayoutEditPolicy_appendRow) {
+				@Override
+				protected void runEx() throws Exception {
+					int index = m_layout.getRows().size();
+					m_layout.insertRow(index);
+				}
+			});
+		}
+	}
 
-  public void handleDoubleClick(boolean horizontal) {
-    /*if (horizontal) {
+	public void handleDoubleClick(boolean horizontal) {
+		/*if (horizontal) {
     	new ColumnsDialog(DesignerPlugin.getShell(), m_layout).open();
     } else {
     	new RowsDialog(DesignerPlugin.getShell(), m_layout).open();
     }*/
-  }
+	}
 }
diff --git a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/MigLayoutSplitEditPolicy.java b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/MigLayoutSplitEditPolicy.java
index 85b1bdde7..92c3a8609 100644
--- a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/MigLayoutSplitEditPolicy.java
+++ b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/MigLayoutSplitEditPolicy.java
@@ -36,90 +36,90 @@
  * @coverage swing.MigLayout.policy
  */
 public final class MigLayoutSplitEditPolicy extends ComponentFlowLayoutEditPolicy {
-  private final MigLayoutInfo m_layout;
-  private final int m_column;
-  private final int m_row;
-  private final List<ComponentInfo> m_components;
-  private final boolean m_splitted;
-  private final boolean m_splittedHorizontally;
+	private final MigLayoutInfo m_layout;
+	private final int m_column;
+	private final int m_row;
+	private final List<ComponentInfo> m_components;
+	private final boolean m_splitted;
+	private final boolean m_splittedHorizontally;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public MigLayoutSplitEditPolicy(MigLayoutInfo layout, int column, int row) {
-    super(layout);
-    m_layout = layout;
-    m_column = column;
-    m_row = row;
-    m_components = m_layout.getCellComponents(column, row);
-    Assert.isTrue(m_components.size() != 0);
-    m_splitted = m_components.size() > 1;
-    m_splittedHorizontally = MigLayoutInfo.getConstraints(m_components.get(0)).isHorizontalSplit();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public MigLayoutSplitEditPolicy(MigLayoutInfo layout, int column, int row) {
+		super(layout);
+		m_layout = layout;
+		m_column = column;
+		m_row = row;
+		m_components = m_layout.getCellComponents(column, row);
+		Assert.isTrue(m_components.size() != 0);
+		m_splitted = m_components.size() > 1;
+		m_splittedHorizontally = MigLayoutInfo.getConstraints(m_components.get(0)).isHorizontalSplit();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Configuration
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected boolean isHorizontal(Request _request) {
-    if (m_splitted) {
-      return m_splittedHorizontally;
-    } else {
-      // prepare single target component (it is really only one, because there are no split yet)
-      Figure targetFigure;
-      {
-        ComponentInfo targetComponent = m_components.get(0);
-        EditPart targetEditPart = getHost().getViewer().getEditPartByModel(targetComponent);
-        targetFigure = ((GraphicalEditPart) targetEditPart).getFigure();
-      }
-      // prepare location in target component's Figure
-      Point location;
-      {
-        IDropRequest request = (IDropRequest) _request;
-        location = request.getLocation().getCopy();
-        FigureUtils.translateAbsoluteToFigure2(targetFigure, location);
-      }
-      // prepare bounds where we consider vertical split
-      Rectangle verticalBounds;
-      {
-        Rectangle clientArea = targetFigure.getClientArea().getCopy();
-        verticalBounds = clientArea.shrink(clientArea.width / 4, 0);
-      }
-      // vertical if cursor is inside of center part of component
-      return !verticalBounds.contains(location);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Configuration
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected boolean isHorizontal(Request _request) {
+		if (m_splitted) {
+			return m_splittedHorizontally;
+		} else {
+			// prepare single target component (it is really only one, because there are no split yet)
+			Figure targetFigure;
+			{
+				ComponentInfo targetComponent = m_components.get(0);
+				EditPart targetEditPart = getHost().getViewer().getEditPartByModel(targetComponent);
+				targetFigure = ((GraphicalEditPart) targetEditPart).getFigure();
+			}
+			// prepare location in target component's Figure
+			Point location;
+			{
+				IDropRequest request = (IDropRequest) _request;
+				location = request.getLocation().getCopy();
+				FigureUtils.translateAbsoluteToFigure2(targetFigure, location);
+			}
+			// prepare bounds where we consider vertical split
+			Rectangle verticalBounds;
+			{
+				Rectangle clientArea = targetFigure.getClientArea().getCopy();
+				verticalBounds = clientArea.shrink(clientArea.width / 4, 0);
+			}
+			// vertical if cursor is inside of center part of component
+			return !verticalBounds.contains(location);
+		}
+	}
 
-  @Override
-  protected boolean isGoodReferenceChild(Request request, EditPart editPart) {
-    return m_components.contains(editPart.getModel());
-  }
+	@Override
+	protected boolean isGoodReferenceChild(Request request, EditPart editPart) {
+		return m_components.contains(editPart.getModel());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private boolean m_horizontalCommand;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private boolean m_horizontalCommand;
 
-  @Override
-  public Command getCommand(Request request) {
-    m_horizontalCommand = isHorizontal(request);
-    return super.getCommand(request);
-  }
+	@Override
+	public Command getCommand(Request request) {
+		m_horizontalCommand = isHorizontal(request);
+		return super.getCommand(request);
+	}
 
-  @Override
-  protected void command_CREATE(ComponentInfo newObject, ComponentInfo referenceObject)
-      throws Exception {
-    m_layout.command_splitCREATE(m_column, m_row, m_horizontalCommand, newObject, referenceObject);
-  }
+	@Override
+	protected void command_CREATE(ComponentInfo newObject, ComponentInfo referenceObject)
+			throws Exception {
+		m_layout.command_splitCREATE(m_column, m_row, m_horizontalCommand, newObject, referenceObject);
+	}
 
-  @Override
-  protected void command_MOVE(ComponentInfo object, ComponentInfo referenceObject) throws Exception {
-    m_layout.command_splitMOVE(m_column, m_row, m_horizontalCommand, object, referenceObject);
-  }
+	@Override
+	protected void command_MOVE(ComponentInfo object, ComponentInfo referenceObject) throws Exception {
+		m_layout.command_splitMOVE(m_column, m_row, m_horizontalCommand, object, referenceObject);
+	}
 }
diff --git a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/MigSelectionEditPolicy.java b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/MigSelectionEditPolicy.java
index 5821c80c2..aef17a75b 100644
--- a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/MigSelectionEditPolicy.java
+++ b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/MigSelectionEditPolicy.java
@@ -46,184 +46,184 @@
  * @coverage swing.MigLayout.policy
  */
 public final class MigSelectionEditPolicy extends AbstractGridSelectionEditPolicy {
-  private final MigLayoutInfo m_layout;
-  private final ComponentInfo m_component;
-  private final MigGridHelper m_gridHelper = new MigGridHelper(this, false);
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public MigSelectionEditPolicy(MigLayoutInfo layout, ComponentInfo component) {
-    super(component);
-    m_layout = layout;
-    m_component = component;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected boolean isActiveLayout() {
-    return m_component.getParent().getChildren().contains(m_layout);
-  }
-
-  @Override
-  protected IGridInfo getGridInfo() {
-    return m_layout.getGridInfo();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Selection
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected List<Handle> createSelectionHandles() {
-    List<Handle> handlesList = Lists.newArrayList();
-    // add move handle
-    handlesList.add(createMoveHandle());
-    // add span handles
-    {
-      handlesList.add(createSpanHandle(IPositionConstants.NORTH, 0.25));
-      handlesList.add(createSpanHandle(IPositionConstants.WEST, 0.25));
-      handlesList.add(createSpanHandle(IPositionConstants.EAST, 0.75));
-      handlesList.add(createSpanHandle(IPositionConstants.SOUTH, 0.75));
-    }
-    //
-    return handlesList;
-  }
-
-  @Override
-  protected void showPrimarySelection() {
-    super.showPrimarySelection();
-    m_gridHelper.showGridFeedback();
-  }
-
-  @Override
-  protected void hideSelection() {
-    m_gridHelper.eraseGridFeedback();
-    super.hideSelection();
-  }
-
-  @Override
-  protected Figure createAlignmentFigure(IAbstractComponentInfo component, boolean horizontal) {
-    IEditPartViewer viewer = getHost().getViewer();
-    final CellConstraintsSupport constraints =
-        MigLayoutInfo.getConstraints((ComponentInfo) component);
-    if (horizontal) {
-      return new AbstractPopupFigure(viewer, 9, 5) {
-        @Override
-        protected Image getImage() {
-          return constraints.getSmallAlignmentImage(true);
-        }
-
-        @Override
-        protected void fillMenu(IMenuManager manager) {
-          constraints.fillHorizontalAlignmentMenu(manager);
-        }
-      };
-    } else {
-      return new AbstractPopupFigure(viewer, 5, 9) {
-        @Override
-        protected Image getImage() {
-          return constraints.getSmallAlignmentImage(false);
-        }
-
-        @Override
-        protected void fillMenu(IMenuManager manager) {
-          constraints.fillVerticalAlignmentMenu(manager);
-        }
-      };
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Span
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Command createSpanCommand(final boolean horizontal, final Rectangle cells) {
-    return new EditCommand(m_layout) {
-      @Override
-      protected void executeEdit() throws Exception {
-        m_layout.command_setCells(m_component, cells);
-      }
-    };
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Keyboard
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void performRequest(Request request) {
-    if (request instanceof KeyRequest) {
-      KeyRequest keyRequest = (KeyRequest) request;
-      if (keyRequest.isPressed()) {
-        char c = keyRequest.getCharacter();
-        // horizontal
-        if (c == 'd') {
-          setAlignment(MigColumnInfo.Alignment.DEFAULT);
-        } else if (c == 'l') {
-          setAlignment(MigColumnInfo.Alignment.LEFT);
-        } else if (c == 'c') {
-          setAlignment(MigColumnInfo.Alignment.CENTER);
-        } else if (c == 'r') {
-          setAlignment(MigColumnInfo.Alignment.RIGHT);
-        } else if (c == 'f') {
-          setAlignment(MigColumnInfo.Alignment.FILL);
-        } else if (c == 'q') {
-          setAlignment(MigColumnInfo.Alignment.LEADING);
-        } else if (c == 'w') {
-          setAlignment(MigColumnInfo.Alignment.TRAILING);
-        }
-        // vertical
-        if (c == 'D') {
-          setAlignment(MigRowInfo.Alignment.DEFAULT);
-        } else if (c == 't') {
-          setAlignment(MigRowInfo.Alignment.TOP);
-        } else if (c == 'm') {
-          setAlignment(MigRowInfo.Alignment.CENTER);
-        } else if (c == 'b') {
-          setAlignment(MigRowInfo.Alignment.BOTTOM);
-        } else if (c == 'F') {
-          setAlignment(MigRowInfo.Alignment.FILL);
-        } else if (c == 'a') {
-          setAlignment(MigRowInfo.Alignment.BASELINE);
-        }
-      }
-    }
-  }
-
-  /**
-   * Sets the horizontal alignment.
-   */
-  private void setAlignment(final MigColumnInfo.Alignment alignment) {
-    ExecutionUtils.run(m_layout, new RunnableEx() {
-      public void run() throws Exception {
-        CellConstraintsSupport constraints = MigLayoutInfo.getConstraints(m_component);
-        constraints.setHorizontalAlignment(alignment);
-        constraints.write();
-      }
-    });
-  }
-
-  /**
-   * Sets the vertical alignment.
-   */
-  private void setAlignment(final MigRowInfo.Alignment alignment) {
-    ExecutionUtils.run(m_layout, new RunnableEx() {
-      public void run() throws Exception {
-        CellConstraintsSupport constraints = MigLayoutInfo.getConstraints(m_component);
-        constraints.setVerticalAlignment(alignment);
-        constraints.write();
-      }
-    });
-  }
+	private final MigLayoutInfo m_layout;
+	private final ComponentInfo m_component;
+	private final MigGridHelper m_gridHelper = new MigGridHelper(this, false);
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public MigSelectionEditPolicy(MigLayoutInfo layout, ComponentInfo component) {
+		super(component);
+		m_layout = layout;
+		m_component = component;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected boolean isActiveLayout() {
+		return m_component.getParent().getChildren().contains(m_layout);
+	}
+
+	@Override
+	protected IGridInfo getGridInfo() {
+		return m_layout.getGridInfo();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Selection
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected List<Handle> createSelectionHandles() {
+		List<Handle> handlesList = Lists.newArrayList();
+		// add move handle
+		handlesList.add(createMoveHandle());
+		// add span handles
+		{
+			handlesList.add(createSpanHandle(IPositionConstants.NORTH, 0.25));
+			handlesList.add(createSpanHandle(IPositionConstants.WEST, 0.25));
+			handlesList.add(createSpanHandle(IPositionConstants.EAST, 0.75));
+			handlesList.add(createSpanHandle(IPositionConstants.SOUTH, 0.75));
+		}
+		//
+		return handlesList;
+	}
+
+	@Override
+	protected void showPrimarySelection() {
+		super.showPrimarySelection();
+		m_gridHelper.showGridFeedback();
+	}
+
+	@Override
+	protected void hideSelection() {
+		m_gridHelper.eraseGridFeedback();
+		super.hideSelection();
+	}
+
+	@Override
+	protected Figure createAlignmentFigure(IAbstractComponentInfo component, boolean horizontal) {
+		IEditPartViewer viewer = getHost().getViewer();
+		final CellConstraintsSupport constraints =
+				MigLayoutInfo.getConstraints((ComponentInfo) component);
+		if (horizontal) {
+			return new AbstractPopupFigure(viewer, 9, 5) {
+				@Override
+				protected Image getImage() {
+					return constraints.getSmallAlignmentImage(true);
+				}
+
+				@Override
+				protected void fillMenu(IMenuManager manager) {
+					constraints.fillHorizontalAlignmentMenu(manager);
+				}
+			};
+		} else {
+			return new AbstractPopupFigure(viewer, 5, 9) {
+				@Override
+				protected Image getImage() {
+					return constraints.getSmallAlignmentImage(false);
+				}
+
+				@Override
+				protected void fillMenu(IMenuManager manager) {
+					constraints.fillVerticalAlignmentMenu(manager);
+				}
+			};
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Span
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Command createSpanCommand(final boolean horizontal, final Rectangle cells) {
+		return new EditCommand(m_layout) {
+			@Override
+			protected void executeEdit() throws Exception {
+				m_layout.command_setCells(m_component, cells);
+			}
+		};
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Keyboard
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void performRequest(Request request) {
+		if (request instanceof KeyRequest) {
+			KeyRequest keyRequest = (KeyRequest) request;
+			if (keyRequest.isPressed()) {
+				char c = keyRequest.getCharacter();
+				// horizontal
+				if (c == 'd') {
+					setAlignment(MigColumnInfo.Alignment.DEFAULT);
+				} else if (c == 'l') {
+					setAlignment(MigColumnInfo.Alignment.LEFT);
+				} else if (c == 'c') {
+					setAlignment(MigColumnInfo.Alignment.CENTER);
+				} else if (c == 'r') {
+					setAlignment(MigColumnInfo.Alignment.RIGHT);
+				} else if (c == 'f') {
+					setAlignment(MigColumnInfo.Alignment.FILL);
+				} else if (c == 'q') {
+					setAlignment(MigColumnInfo.Alignment.LEADING);
+				} else if (c == 'w') {
+					setAlignment(MigColumnInfo.Alignment.TRAILING);
+				}
+				// vertical
+				if (c == 'D') {
+					setAlignment(MigRowInfo.Alignment.DEFAULT);
+				} else if (c == 't') {
+					setAlignment(MigRowInfo.Alignment.TOP);
+				} else if (c == 'm') {
+					setAlignment(MigRowInfo.Alignment.CENTER);
+				} else if (c == 'b') {
+					setAlignment(MigRowInfo.Alignment.BOTTOM);
+				} else if (c == 'F') {
+					setAlignment(MigRowInfo.Alignment.FILL);
+				} else if (c == 'a') {
+					setAlignment(MigRowInfo.Alignment.BASELINE);
+				}
+			}
+		}
+	}
+
+	/**
+	 * Sets the horizontal alignment.
+	 */
+	private void setAlignment(final MigColumnInfo.Alignment alignment) {
+		ExecutionUtils.run(m_layout, new RunnableEx() {
+			public void run() throws Exception {
+				CellConstraintsSupport constraints = MigLayoutInfo.getConstraints(m_component);
+				constraints.setHorizontalAlignment(alignment);
+				constraints.write();
+			}
+		});
+	}
+
+	/**
+	 * Sets the vertical alignment.
+	 */
+	private void setAlignment(final MigRowInfo.Alignment alignment) {
+		ExecutionUtils.run(m_layout, new RunnableEx() {
+			public void run() throws Exception {
+				CellConstraintsSupport constraints = MigLayoutInfo.getConstraints(m_component);
+				constraints.setVerticalAlignment(alignment);
+				constraints.write();
+			}
+		});
+	}
 }
diff --git a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/header/actions/DimensionHeaderAction.java b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/header/actions/DimensionHeaderAction.java
index 11ac6d2bd..a148ab521 100644
--- a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/header/actions/DimensionHeaderAction.java
+++ b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/header/actions/DimensionHeaderAction.java
@@ -31,89 +31,89 @@
  * @coverage swing.MigLayout.header
  */
 public abstract class DimensionHeaderAction<T extends MigDimensionInfo> extends ObjectInfoAction {
-  private final boolean m_horizontal;
-  private final IEditPartViewer m_viewer;
-  private final MigLayoutInfo m_layout;
+	private final boolean m_horizontal;
+	private final IEditPartViewer m_viewer;
+	private final MigLayoutInfo m_layout;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DimensionHeaderAction(DimensionHeaderEditPart<T> editPart, String text) {
-    this(editPart, text, null);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DimensionHeaderAction(DimensionHeaderEditPart<T> editPart, String text) {
+		this(editPart, text, null);
+	}
 
-  public DimensionHeaderAction(DimensionHeaderEditPart<T> editPart,
-      String text,
-      ImageDescriptor imageDescriptor) {
-    this(editPart, text, imageDescriptor, AS_PUSH_BUTTON);
-  }
+	public DimensionHeaderAction(DimensionHeaderEditPart<T> editPart,
+			String text,
+			ImageDescriptor imageDescriptor) {
+		this(editPart, text, imageDescriptor, AS_PUSH_BUTTON);
+	}
 
-  public DimensionHeaderAction(DimensionHeaderEditPart<T> editPart,
-      String text,
-      ImageDescriptor imageDescriptor,
-      int style) {
-    super(editPart.getLayout(), text, style);
-    m_horizontal = editPart instanceof ColumnHeaderEditPart;
-    m_viewer = editPart.getViewer();
-    m_layout = editPart.getLayout();
-    setImageDescriptor(imageDescriptor);
-  }
+	public DimensionHeaderAction(DimensionHeaderEditPart<T> editPart,
+			String text,
+			ImageDescriptor imageDescriptor,
+			int style) {
+		super(editPart.getLayout(), text, style);
+		m_horizontal = editPart instanceof ColumnHeaderEditPart;
+		m_viewer = editPart.getViewer();
+		m_layout = editPart.getLayout();
+		setImageDescriptor(imageDescriptor);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final int hashCode() {
-    return 0;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final int hashCode() {
+		return 0;
+	}
 
-  @Override
-  public boolean equals(Object obj) {
-    return obj != null && getClass() == obj.getClass();
-  }
+	@Override
+	public boolean equals(Object obj) {
+		return obj != null && getClass() == obj.getClass();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Run
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected final void runEx() throws Exception {
-    // prepare selection
-    List<T> dimensions = Lists.newArrayList();
-    {
-      List<EditPart> editParts = m_viewer.getSelectedEditParts();
-      for (EditPart editPart : editParts) {
-        if (editPart instanceof DimensionHeaderEditPart) {
-          @SuppressWarnings("unchecked")
-          DimensionHeaderEditPart<T> headerEditPart = (DimensionHeaderEditPart<T>) editPart;
-          dimensions.add(headerEditPart.getDimension());
-        }
-      }
-    }
-    // run over them
-    run(dimensions);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Run
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected final void runEx() throws Exception {
+		// prepare selection
+		List<T> dimensions = Lists.newArrayList();
+		{
+			List<EditPart> editParts = m_viewer.getSelectedEditParts();
+			for (EditPart editPart : editParts) {
+				if (editPart instanceof DimensionHeaderEditPart) {
+					@SuppressWarnings("unchecked")
+					DimensionHeaderEditPart<T> headerEditPart = (DimensionHeaderEditPart<T>) editPart;
+					dimensions.add(headerEditPart.getDimension());
+				}
+			}
+		}
+		// run over them
+		run(dimensions);
+	}
 
-  /**
-   * Does some operation on {@link List} of selected {@link MigDimensionInfo}'s.
-   */
-  protected void run(List<T> dimensions) throws Exception {
-    List<?> allDimensions = m_horizontal ? m_layout.getColumns() : m_layout.getRows();
-    for (T dimension : dimensions) {
-      int index = allDimensions.indexOf(dimension);
-      run(dimension, index);
-    }
-    m_layout.writeDimensions();
-  }
+	/**
+	 * Does some operation on {@link List} of selected {@link MigDimensionInfo}'s.
+	 */
+	protected void run(List<T> dimensions) throws Exception {
+		List<?> allDimensions = m_horizontal ? m_layout.getColumns() : m_layout.getRows();
+		for (T dimension : dimensions) {
+			int index = allDimensions.indexOf(dimension);
+			run(dimension, index);
+		}
+		m_layout.writeDimensions();
+	}
 
-  /**
-   * Does some operation on selected {@link MigDimensionInfo}'s.
-   */
-  protected void run(T dimension, int index) throws Exception {
-  }
+	/**
+	 * Does some operation on selected {@link MigDimensionInfo}'s.
+	 */
+	protected void run(T dimension, int index) throws Exception {
+	}
 }
diff --git a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/header/actions/SetAlignmentColumnAction.java b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/header/actions/SetAlignmentColumnAction.java
index 1ac7d2a2a..d2f7b9ca1 100644
--- a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/header/actions/SetAlignmentColumnAction.java
+++ b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/header/actions/SetAlignmentColumnAction.java
@@ -24,28 +24,28 @@
  * @coverage swing.MigLayout.header
  */
 public final class SetAlignmentColumnAction extends DimensionHeaderAction<MigColumnInfo> {
-  private final Alignment m_alignment;
+	private final Alignment m_alignment;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SetAlignmentColumnAction(DimensionHeaderEditPart<MigColumnInfo> header, Alignment alignment) {
-    super(header, alignment.getText(), alignment.getMenuImage(), AS_RADIO_BUTTON);
-    m_alignment = alignment;
-    setChecked(header.getDimension().getAlignment(false) == m_alignment);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SetAlignmentColumnAction(DimensionHeaderEditPart<MigColumnInfo> header, Alignment alignment) {
+		super(header, alignment.getText(), alignment.getMenuImage(), AS_RADIO_BUTTON);
+		m_alignment = alignment;
+		setChecked(header.getDimension().getAlignment(false) == m_alignment);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Run
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void run(MigColumnInfo dimension, int index) throws Exception {
-    if (isChecked()) {
-      dimension.setAlignment(m_alignment);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Run
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void run(MigColumnInfo dimension, int index) throws Exception {
+		if (isChecked()) {
+			dimension.setAlignment(m_alignment);
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/header/actions/SetAlignmentRowAction.java b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/header/actions/SetAlignmentRowAction.java
index 1f67030dd..b6f590c7e 100644
--- a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/header/actions/SetAlignmentRowAction.java
+++ b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/header/actions/SetAlignmentRowAction.java
@@ -24,28 +24,28 @@
  * @coverage swing.MigLayout.header
  */
 public final class SetAlignmentRowAction extends DimensionHeaderAction<MigRowInfo> {
-  private final Alignment m_alignment;
+	private final Alignment m_alignment;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SetAlignmentRowAction(DimensionHeaderEditPart<MigRowInfo> header, Alignment alignment) {
-    super(header, alignment.getText(), alignment.getMenuImage(), AS_RADIO_BUTTON);
-    m_alignment = alignment;
-    setChecked(header.getDimension().getAlignment(false) == m_alignment);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SetAlignmentRowAction(DimensionHeaderEditPart<MigRowInfo> header, Alignment alignment) {
+		super(header, alignment.getText(), alignment.getMenuImage(), AS_RADIO_BUTTON);
+		m_alignment = alignment;
+		setChecked(header.getDimension().getAlignment(false) == m_alignment);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Run
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void run(MigRowInfo dimension, int index) throws Exception {
-    if (isChecked()) {
-      dimension.setAlignment(m_alignment);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Run
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void run(MigRowInfo dimension, int index) throws Exception {
+		if (isChecked()) {
+			dimension.setAlignment(m_alignment);
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/header/actions/SetGrowAction.java b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/header/actions/SetGrowAction.java
index 1b33e449d..3e031ce28 100644
--- a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/header/actions/SetGrowAction.java
+++ b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/header/actions/SetGrowAction.java
@@ -23,25 +23,25 @@
  * @coverage swing.MigLayout.header
  */
 public final class SetGrowAction<T extends MigDimensionInfo> extends DimensionHeaderAction<T> {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SetGrowAction(DimensionHeaderEditPart<T> header,
-      String text,
-      ImageDescriptor imageDescriptor) {
-    super(header, text, imageDescriptor, AS_CHECK_BOX);
-    setChecked(header.getDimension().hasGrow());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SetGrowAction(DimensionHeaderEditPart<T> header,
+			String text,
+			ImageDescriptor imageDescriptor) {
+		super(header, text, imageDescriptor, AS_CHECK_BOX);
+		setChecked(header.getDimension().hasGrow());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Run
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void run(T dimension, int index) throws Exception {
-    dimension.flipGrow();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Run
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void run(T dimension, int index) throws Exception {
+		dimension.flipGrow();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/header/actions/SetSizeAction.java b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/header/actions/SetSizeAction.java
index 440518409..9406786b7 100644
--- a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/header/actions/SetSizeAction.java
+++ b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/header/actions/SetSizeAction.java
@@ -22,25 +22,25 @@
  * @coverage swing.MigLayout.header
  */
 public final class SetSizeAction<T extends MigDimensionInfo> extends DimensionHeaderAction<T> {
-  private final String m_sizeString;
+	private final String m_sizeString;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SetSizeAction(DimensionHeaderEditPart<T> header, String text, String sizeString) {
-    super(header, text);
-    m_sizeString = sizeString;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SetSizeAction(DimensionHeaderEditPart<T> header, String text, String sizeString) {
+		super(header, text);
+		m_sizeString = sizeString;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Run
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void run(T dimension, int index) throws Exception {
-    dimension.setSize(m_sizeString);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Run
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void run(T dimension, int index) throws Exception {
+		dimension.setSize(m_sizeString);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/header/edit/ColumnHeaderEditPart.java b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/header/edit/ColumnHeaderEditPart.java
index f0f4cb881..8d979be40 100644
--- a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/header/edit/ColumnHeaderEditPart.java
+++ b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/header/edit/ColumnHeaderEditPart.java
@@ -41,197 +41,197 @@
  * @coverage swing.MigLayout.header
  */
 public class ColumnHeaderEditPart extends DimensionHeaderEditPart<MigColumnInfo> {
-  private static final String GROW_SMALL_PATH = "alignment/h/small/grow.gif";
-  private static final String GROW_MENU_PATH = "alignment/h/menu/grow.gif";
-  private static final String PREF_TITLE = "[pref!]";
-  private static final String PREF_CODE = "pref!";
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance fields
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final MigColumnInfo m_column;
+	private static final String GROW_SMALL_PATH = "alignment/h/small/grow.gif";
+	private static final String GROW_MENU_PATH = "alignment/h/menu/grow.gif";
+	private static final String PREF_TITLE = "[pref!]";
+	private static final String PREF_CODE = "pref!";
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance fields
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final MigColumnInfo m_column;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ColumnHeaderEditPart(MigLayoutInfo layout, MigColumnInfo column, Figure containerFigure) {
-    super(layout, column, containerFigure);
-    m_column = column;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ColumnHeaderEditPart(MigLayoutInfo layout, MigColumnInfo column, Figure containerFigure) {
+		super(layout, column, containerFigure);
+		m_column = column;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Figure
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Figure createFigure() {
-    Figure newFigure = new Figure() {
-      @Override
-      protected void paintClientArea(Graphics graphics) {
-        Rectangle r = getClientArea();
-        // draw rectangle
-        graphics.setForegroundColor(IColorConstants.buttonDarker);
-        graphics.drawLine(r.x, r.y, r.x, r.bottom());
-        graphics.drawLine(r.right() - 1, r.y, r.right() - 1, r.bottom());
-        // draw column index
-        int titleLeft;
-        int titleRight;
-        {
-          int index = getIndex();
-          String title = Integer.toString(index);
-          Dimension textExtents = graphics.getTextExtent(title);
-          if (r.width < 3 + textExtents.width + 3) {
-            return;
-          }
-          // draw title
-          titleLeft = r.x + (r.width - textExtents.width) / 2;
-          titleRight = titleLeft + textExtents.width;
-          int y = r.y + (r.height - textExtents.height) / 2;
-          graphics.setForegroundColor(IColorConstants.black);
-          graphics.drawText(title, titleLeft, y);
-        }
-        // draw alignment indicator
-        if (titleLeft - r.x > 3 + 7 + 3) {
-          Image image = m_column.getAlignment(true).getSmallImage();
-          int x = r.x + 2;
-          drawCentered(graphics, image, x);
-        }
-        // draw grow indicator
-        if (m_column.hasGrow()) {
-          if (titleRight + 3 + 7 + 3 < r.right()) {
-            Image image = getImage(GROW_SMALL_PATH);
-            drawCentered(graphics, image, r.right() - 3 - image.getBounds().width);
-          }
-        }
-      }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Figure
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Figure createFigure() {
+		Figure newFigure = new Figure() {
+			@Override
+			protected void paintClientArea(Graphics graphics) {
+				Rectangle r = getClientArea();
+				// draw rectangle
+				graphics.setForegroundColor(IColorConstants.buttonDarker);
+				graphics.drawLine(r.x, r.y, r.x, r.bottom());
+				graphics.drawLine(r.right() - 1, r.y, r.right() - 1, r.bottom());
+				// draw column index
+				int titleLeft;
+				int titleRight;
+				{
+					int index = getIndex();
+					String title = Integer.toString(index);
+					Dimension textExtents = graphics.getTextExtent(title);
+					if (r.width < 3 + textExtents.width + 3) {
+						return;
+					}
+					// draw title
+					titleLeft = r.x + (r.width - textExtents.width) / 2;
+					titleRight = titleLeft + textExtents.width;
+					int y = r.y + (r.height - textExtents.height) / 2;
+					graphics.setForegroundColor(IColorConstants.black);
+					graphics.drawText(title, titleLeft, y);
+				}
+				// draw alignment indicator
+				if (titleLeft - r.x > 3 + 7 + 3) {
+					Image image = m_column.getAlignment(true).getSmallImage();
+					int x = r.x + 2;
+					drawCentered(graphics, image, x);
+				}
+				// draw grow indicator
+				if (m_column.hasGrow()) {
+					if (titleRight + 3 + 7 + 3 < r.right()) {
+						Image image = getImage(GROW_SMALL_PATH);
+						drawCentered(graphics, image, r.right() - 3 - image.getBounds().width);
+					}
+				}
+			}
 
-      private void drawCentered(Graphics graphics, Image image, int x) {
-        int y = (getBounds().height - image.getBounds().height) / 2;
-        graphics.drawImage(image, x, y);
-      }
-    };
-    //
-    newFigure.setFont(DEFAULT_FONT);
-    newFigure.setOpaque(true);
-    return newFigure;
-  }
+			private void drawCentered(Graphics graphics, Image image, int x) {
+				int y = (getBounds().height - image.getBounds().height) / 2;
+				graphics.drawImage(image, x, y);
+			}
+		};
+		//
+		newFigure.setFont(DEFAULT_FONT);
+		newFigure.setOpaque(true);
+		return newFigure;
+	}
 
-  @Override
-  protected void refreshVisuals() {
-    super.refreshVisuals();
-    Figure figure = getFigure();
-    // bounds
-    {
-      int index = getIndex();
-      Interval interval = m_layout.getGridInfo().getColumnIntervals()[index];
-      Rectangle bounds =
-          new Rectangle(interval.begin(),
-              0,
-              interval.length()+ 1,
-              ((GraphicalEditPart) getParent()).getFigure().getSize().height);
-      bounds.performTranslate(getOffset().x, 0);
-      figure.setBounds(bounds);
-    }
-    // tooltip
-    figure.setToolTipText(m_column.getTooltip());
-  }
+	@Override
+	protected void refreshVisuals() {
+		super.refreshVisuals();
+		Figure figure = getFigure();
+		// bounds
+		{
+			int index = getIndex();
+			Interval interval = m_layout.getGridInfo().getColumnIntervals()[index];
+			Rectangle bounds =
+					new Rectangle(interval.begin(),
+							0,
+							interval.length()+ 1,
+							((GraphicalEditPart) getParent()).getFigure().getSize().height);
+			bounds.performTranslate(getOffset().x, 0);
+			figure.setBounds(bounds);
+		}
+		// tooltip
+		figure.setToolTipText(m_column.getTooltip());
+	}
 
-  @Override
-  public int getIndex() {
-    return m_layout.getColumns().indexOf(m_column);
-  }
+	@Override
+	public int getIndex() {
+		return m_layout.getColumns().indexOf(m_column);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IHeaderMenuProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void buildContextMenu(IMenuManager manager) {
-    if (!m_layout.canChangeDimensions()) {
-      return;
-    }
-    // operations
-    {
-      manager.add(new DimensionHeaderAction<MigColumnInfo>(this,
-          GefMessages.ColumnHeaderEditPart_insertColumn) {
-        @Override
-        protected void run(MigColumnInfo dimension, int index) throws Exception {
-          m_layout.insertColumn(index);
-        }
-      });
-      manager.add(new DimensionHeaderAction<MigColumnInfo>(this,
-          GefMessages.ColumnHeaderEditPart_appendColumn) {
-        @Override
-        protected void run(MigColumnInfo dimension, int index) throws Exception {
-          m_layout.insertColumn(index + 1);
-        }
-      });
-      manager.add(new DimensionHeaderAction<MigColumnInfo>(this,
-          GefMessages.ColumnHeaderEditPart_deleteColumn) {
-        @Override
-        protected void run(MigColumnInfo dimension, int index) throws Exception {
-          m_layout.deleteColumn(index);
-        }
-      });
-      manager.add(new DimensionHeaderAction<MigColumnInfo>(this,
-          GefMessages.ColumnHeaderEditPart_clearColumn) {
-        @Override
-        protected void run(MigColumnInfo dimension, int index) throws Exception {
-          m_layout.clearColumn(index);
-        }
-      });
-      manager.add(new DimensionHeaderAction<MigColumnInfo>(this,
-          GefMessages.ColumnHeaderEditPart_splitColumn) {
-        @Override
-        protected void run(MigColumnInfo dimension, int index) throws Exception {
-          m_layout.splitColumn(index);
-        }
-      });
-    }
-    // alignment
-    {
-      manager.add(new Separator());
-      manager.add(new SetAlignmentColumnAction(this, MigColumnInfo.Alignment.DEFAULT));
-      manager.add(new SetAlignmentColumnAction(this, MigColumnInfo.Alignment.LEFT));
-      manager.add(new SetAlignmentColumnAction(this, MigColumnInfo.Alignment.CENTER));
-      manager.add(new SetAlignmentColumnAction(this, MigColumnInfo.Alignment.RIGHT));
-      manager.add(new SetAlignmentColumnAction(this, MigColumnInfo.Alignment.FILL));
-      manager.add(new SetAlignmentColumnAction(this, MigColumnInfo.Alignment.LEADING));
-      manager.add(new SetAlignmentColumnAction(this, MigColumnInfo.Alignment.TRAILING));
-    }
-    // grow
-    {
-      manager.add(new Separator());
-      manager.add(new SetGrowAction<MigColumnInfo>(this,
-          GefMessages.ColumnHeaderEditPart_grow,
-          Activator.getImageDescriptor(GROW_MENU_PATH)));
-    }
-    // size
-    {
-      manager.add(new Separator());
-      manager.add(new SetSizeAction<MigColumnInfo>(this,
-          GefMessages.ColumnHeaderEditPart_defaultSize,
-          null));
-      manager.add(new SetSizeAction<MigColumnInfo>(this, PREF_TITLE, PREF_CODE));
-    }
-    // properties
-    {
-      manager.add(new Separator());
-      manager.add(new Action(GefMessages.ColumnHeaderEditPart_properties) {
-        @Override
-        public void run() {
-          editDimension();
-        }
-      });
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IHeaderMenuProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void buildContextMenu(IMenuManager manager) {
+		if (!m_layout.canChangeDimensions()) {
+			return;
+		}
+		// operations
+		{
+			manager.add(new DimensionHeaderAction<MigColumnInfo>(this,
+					GefMessages.ColumnHeaderEditPart_insertColumn) {
+				@Override
+				protected void run(MigColumnInfo dimension, int index) throws Exception {
+					m_layout.insertColumn(index);
+				}
+			});
+			manager.add(new DimensionHeaderAction<MigColumnInfo>(this,
+					GefMessages.ColumnHeaderEditPart_appendColumn) {
+				@Override
+				protected void run(MigColumnInfo dimension, int index) throws Exception {
+					m_layout.insertColumn(index + 1);
+				}
+			});
+			manager.add(new DimensionHeaderAction<MigColumnInfo>(this,
+					GefMessages.ColumnHeaderEditPart_deleteColumn) {
+				@Override
+				protected void run(MigColumnInfo dimension, int index) throws Exception {
+					m_layout.deleteColumn(index);
+				}
+			});
+			manager.add(new DimensionHeaderAction<MigColumnInfo>(this,
+					GefMessages.ColumnHeaderEditPart_clearColumn) {
+				@Override
+				protected void run(MigColumnInfo dimension, int index) throws Exception {
+					m_layout.clearColumn(index);
+				}
+			});
+			manager.add(new DimensionHeaderAction<MigColumnInfo>(this,
+					GefMessages.ColumnHeaderEditPart_splitColumn) {
+				@Override
+				protected void run(MigColumnInfo dimension, int index) throws Exception {
+					m_layout.splitColumn(index);
+				}
+			});
+		}
+		// alignment
+		{
+			manager.add(new Separator());
+			manager.add(new SetAlignmentColumnAction(this, MigColumnInfo.Alignment.DEFAULT));
+			manager.add(new SetAlignmentColumnAction(this, MigColumnInfo.Alignment.LEFT));
+			manager.add(new SetAlignmentColumnAction(this, MigColumnInfo.Alignment.CENTER));
+			manager.add(new SetAlignmentColumnAction(this, MigColumnInfo.Alignment.RIGHT));
+			manager.add(new SetAlignmentColumnAction(this, MigColumnInfo.Alignment.FILL));
+			manager.add(new SetAlignmentColumnAction(this, MigColumnInfo.Alignment.LEADING));
+			manager.add(new SetAlignmentColumnAction(this, MigColumnInfo.Alignment.TRAILING));
+		}
+		// grow
+		{
+			manager.add(new Separator());
+			manager.add(new SetGrowAction<MigColumnInfo>(this,
+					GefMessages.ColumnHeaderEditPart_grow,
+					Activator.getImageDescriptor(GROW_MENU_PATH)));
+		}
+		// size
+		{
+			manager.add(new Separator());
+			manager.add(new SetSizeAction<MigColumnInfo>(this,
+					GefMessages.ColumnHeaderEditPart_defaultSize,
+					null));
+			manager.add(new SetSizeAction<MigColumnInfo>(this, PREF_TITLE, PREF_CODE));
+		}
+		// properties
+		{
+			manager.add(new Separator());
+			manager.add(new Action(GefMessages.ColumnHeaderEditPart_properties) {
+				@Override
+				public void run() {
+					editDimension();
+				}
+			});
+		}
+	}
 
-  @Override
-  protected void editDimension() {
-    new ColumnEditDialog(DesignerPlugin.getShell(), m_layout, m_column).open();
-  }
+	@Override
+	protected void editDimension() {
+		new ColumnEditDialog(DesignerPlugin.getShell(), m_layout, m_column).open();
+	}
 }
diff --git a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/header/edit/DimensionHeaderEditPart.java b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/header/edit/DimensionHeaderEditPart.java
index d749ac2a0..1a34b0e96 100644
--- a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/header/edit/DimensionHeaderEditPart.java
+++ b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/header/edit/DimensionHeaderEditPart.java
@@ -37,95 +37,95 @@
  * @coverage swing.MigLayout.header
  */
 public abstract class DimensionHeaderEditPart<T extends MigDimensionInfo> extends GraphicalEditPart
-    implements
-      IHeaderMenuProvider {
-  private static final String DEFAULT_FONT_NAME = "Arial";
-  protected static final Color COLOR_NORMAL = Headers.COLOR_HEADER;
-  protected static final Font DEFAULT_FONT = new Font(null, DEFAULT_FONT_NAME, 7, SWT.NONE);
-  protected static final Color GROUP_COLORS[] = new Color[]{
-      new Color(null, 200, 255, 200),
-      new Color(null, 255, 210, 170),
-      new Color(null, 180, 255, 255),
-      new Color(null, 255, 255, 180),
-      new Color(null, 230, 180, 255)};
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance fields
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected final MigLayoutInfo m_layout;
-  protected final T m_dimension;
-  private final Figure m_containerFigure;
+implements
+IHeaderMenuProvider {
+	private static final String DEFAULT_FONT_NAME = "Arial";
+	protected static final Color COLOR_NORMAL = Headers.COLOR_HEADER;
+	protected static final Font DEFAULT_FONT = new Font(null, DEFAULT_FONT_NAME, 7, SWT.NONE);
+	protected static final Color GROUP_COLORS[] = new Color[]{
+			new Color(null, 200, 255, 200),
+			new Color(null, 255, 210, 170),
+			new Color(null, 180, 255, 255),
+			new Color(null, 255, 255, 180),
+			new Color(null, 230, 180, 255)};
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance fields
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected final MigLayoutInfo m_layout;
+	protected final T m_dimension;
+	private final Figure m_containerFigure;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DimensionHeaderEditPart(MigLayoutInfo layout, T dimension, Figure containerFigure) {
-    m_layout = layout;
-    m_dimension = dimension;
-    m_containerFigure = containerFigure;
-    setModel(dimension);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DimensionHeaderEditPart(MigLayoutInfo layout, T dimension, Figure containerFigure) {
+		m_layout = layout;
+		m_dimension = dimension;
+		m_containerFigure = containerFigure;
+		setModel(dimension);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the index of this {@link MigDimensionInfo}.
-   */
-  public abstract int getIndex();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the index of this {@link MigDimensionInfo}.
+	 */
+	public abstract int getIndex();
 
-  /**
-   * @return the host {@link MigLayoutInfo}.
-   */
-  public final MigLayoutInfo getLayout() {
-    return m_layout;
-  }
+	/**
+	 * @return the host {@link MigLayoutInfo}.
+	 */
+	public final MigLayoutInfo getLayout() {
+		return m_layout;
+	}
 
-  /**
-   * @return the {@link MigDimensionInfo} model.
-   */
-  public final T getDimension() {
-    return m_dimension;
-  }
+	/**
+	 * @return the {@link MigDimensionInfo} model.
+	 */
+	public final T getDimension() {
+		return m_dimension;
+	}
 
-  /**
-   * @return the offset of {@link Figure} with headers relative to the absolute layer.
-   */
-  public final Point getOffset() {
-    Point offset = new Point(0, 0);
-    FigureUtils.translateFigureToAbsolute2(m_containerFigure, offset);
-    return offset;
-  }
+	/**
+	 * @return the offset of {@link Figure} with headers relative to the absolute layer.
+	 */
+	public final Point getOffset() {
+		Point offset = new Point(0, 0);
+		FigureUtils.translateFigureToAbsolute2(m_containerFigure, offset);
+		return offset;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Dragging
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final Tool getDragTrackerTool(Request request) {
-    return new ParentTargetDragEditPartTracker(this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Dragging
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final Tool getDragTrackerTool(Request request) {
+		return new ParentTargetDragEditPartTracker(this);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Figure support
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void refreshVisuals() {
-    // update tooltip XXX
-    //getFigure().setToolTipText(m_dimension.getToolTip());
-    // update background
-    {
-      getFigure().setBackground(COLOR_NORMAL);
-      // XXX
-      /*if (m_dimension.isGap()) {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Figure support
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void refreshVisuals() {
+		// update tooltip XXX
+		//getFigure().setToolTipText(m_dimension.getToolTip());
+		// update background
+		{
+			getFigure().setBackground(COLOR_NORMAL);
+			// XXX
+			/*if (m_dimension.isGap()) {
       	getFigure().setBackground(COLOR_GAP);
       } else {
       	int group = m_layout.getDimensionGroupIndex(m_dimension);
@@ -135,37 +135,37 @@ protected void refreshVisuals() {
       		getFigure().setBackground(COLOR_NORMAL);
       	}
       }*/
-    }
-  }
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Images
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected Image getImage(String name) {
-    return Activator.getImage(name);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Images
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected Image getImage(String name) {
+		return Activator.getImage(name);
+	}
 
-  protected ImageDescriptor getImageDescriptor(String name) {
-    return Activator.getImageDescriptor(name);
-  }
+	protected ImageDescriptor getImageDescriptor(String name) {
+		return Activator.getImageDescriptor(name);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Edit
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void performRequest(Request request) {
-    super.performRequest(request);
-    if (request.getType() == Request.REQ_OPEN) {
-      editDimension();
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Edit
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void performRequest(Request request) {
+		super.performRequest(request);
+		if (request.getType() == Request.REQ_OPEN) {
+			editDimension();
+		}
+	}
 
-  /**
-   * Opens the {@link MigDimensionInfo} edit dialog.
-   */
-  protected abstract void editDimension();
+	/**
+	 * Opens the {@link MigDimensionInfo} edit dialog.
+	 */
+	protected abstract void editDimension();
 }
diff --git a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/header/edit/RowHeaderEditPart.java b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/header/edit/RowHeaderEditPart.java
index 525c9ecad..de4fa824e 100644
--- a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/header/edit/RowHeaderEditPart.java
+++ b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/header/edit/RowHeaderEditPart.java
@@ -41,196 +41,196 @@
  * @coverage swing.MigLayout.header
  */
 public class RowHeaderEditPart extends DimensionHeaderEditPart<MigRowInfo> {
-  private static final String GROW_SMALL_PATH = "alignment/v/small/grow.gif";
-  private static final String GROW_MENU_PATH = "alignment/v/menu/grow.gif";
-  private static final String PREF_TITLE = "[pref!]";
-  private static final String PREF_CODE = "pref!";
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance fields
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final MigRowInfo m_row;
+	private static final String GROW_SMALL_PATH = "alignment/v/small/grow.gif";
+	private static final String GROW_MENU_PATH = "alignment/v/menu/grow.gif";
+	private static final String PREF_TITLE = "[pref!]";
+	private static final String PREF_CODE = "pref!";
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance fields
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final MigRowInfo m_row;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public RowHeaderEditPart(MigLayoutInfo layout, MigRowInfo row, Figure containerFigure) {
-    super(layout, row, containerFigure);
-    m_row = row;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public RowHeaderEditPart(MigLayoutInfo layout, MigRowInfo row, Figure containerFigure) {
+		super(layout, row, containerFigure);
+		m_row = row;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Figure
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Figure createFigure() {
-    Figure newFigure = new Figure() {
-      @Override
-      protected void paintClientArea(Graphics graphics) {
-        Rectangle r = getClientArea();
-        // draw rectangle
-        graphics.setForegroundColor(IColorConstants.buttonDarker);
-        graphics.drawLine(r.x, r.y, r.right(), r.y);
-        graphics.drawLine(r.x, r.bottom() - 1, r.right(), r.bottom() - 1);
-        // draw row index
-        int titleTop;
-        int titleBottom;
-        {
-          int index = getIndex();
-          String title = Integer.toString(index);
-          Dimension textExtents = graphics.getTextExtent(title);
-          if (r.height < textExtents.height) {
-            return;
-          }
-          // draw title
-          titleTop = r.y + (r.height - textExtents.height) / 2;
-          titleBottom = titleTop + textExtents.height;
-          int x = r.x + (r.width - textExtents.width) / 2;
-          graphics.setForegroundColor(IColorConstants.black);
-          graphics.drawText(title, x, titleTop);
-        }
-        // draw alignment indicator
-        if (titleTop - r.y > 3 + 7 + 3) {
-          Image image = m_row.getAlignment(true).getSmallImage();
-          int y = r.y + 2;
-          drawCentered(graphics, image, y);
-        }
-        // draw grow indicator
-        if (m_dimension.hasGrow()) {
-          if (titleBottom + 3 + 7 + 3 < r.bottom()) {
-            Image image = getImage(GROW_SMALL_PATH);
-            drawCentered(graphics, image, r.bottom() - 3 - image.getBounds().height);
-          }
-        }
-      }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Figure
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Figure createFigure() {
+		Figure newFigure = new Figure() {
+			@Override
+			protected void paintClientArea(Graphics graphics) {
+				Rectangle r = getClientArea();
+				// draw rectangle
+				graphics.setForegroundColor(IColorConstants.buttonDarker);
+				graphics.drawLine(r.x, r.y, r.right(), r.y);
+				graphics.drawLine(r.x, r.bottom() - 1, r.right(), r.bottom() - 1);
+				// draw row index
+				int titleTop;
+				int titleBottom;
+				{
+					int index = getIndex();
+					String title = Integer.toString(index);
+					Dimension textExtents = graphics.getTextExtent(title);
+					if (r.height < textExtents.height) {
+						return;
+					}
+					// draw title
+					titleTop = r.y + (r.height - textExtents.height) / 2;
+					titleBottom = titleTop + textExtents.height;
+					int x = r.x + (r.width - textExtents.width) / 2;
+					graphics.setForegroundColor(IColorConstants.black);
+					graphics.drawText(title, x, titleTop);
+				}
+				// draw alignment indicator
+				if (titleTop - r.y > 3 + 7 + 3) {
+					Image image = m_row.getAlignment(true).getSmallImage();
+					int y = r.y + 2;
+					drawCentered(graphics, image, y);
+				}
+				// draw grow indicator
+				if (m_dimension.hasGrow()) {
+					if (titleBottom + 3 + 7 + 3 < r.bottom()) {
+						Image image = getImage(GROW_SMALL_PATH);
+						drawCentered(graphics, image, r.bottom() - 3 - image.getBounds().height);
+					}
+				}
+			}
 
-      private void drawCentered(Graphics graphics, Image image, int y) {
-        int x = (getBounds().width - image.getBounds().width) / 2;
-        graphics.drawImage(image, x, y);
-      }
-    };
-    //
-    newFigure.setFont(DEFAULT_FONT);
-    newFigure.setOpaque(true);
-    return newFigure;
-  }
+			private void drawCentered(Graphics graphics, Image image, int y) {
+				int x = (getBounds().width - image.getBounds().width) / 2;
+				graphics.drawImage(image, x, y);
+			}
+		};
+		//
+		newFigure.setFont(DEFAULT_FONT);
+		newFigure.setOpaque(true);
+		return newFigure;
+	}
 
-  @Override
-  protected void refreshVisuals() {
-    super.refreshVisuals();
-    Figure figure = getFigure();
-    // bounds
-    {
-      int index = getIndex();
-      Interval interval = m_layout.getGridInfo().getRowIntervals()[index];
-      Rectangle bounds =
-          new Rectangle(0,
-              interval.begin(),
-              ((GraphicalEditPart) getParent()).getFigure().getSize().width,
-              interval.length()+ 1);
-      bounds.performTranslate(0, getOffset().y);
-      figure.setBounds(bounds);
-    }
-    // tooltip
-    figure.setToolTipText(m_row.getTooltip());
-  }
+	@Override
+	protected void refreshVisuals() {
+		super.refreshVisuals();
+		Figure figure = getFigure();
+		// bounds
+		{
+			int index = getIndex();
+			Interval interval = m_layout.getGridInfo().getRowIntervals()[index];
+			Rectangle bounds =
+					new Rectangle(0,
+							interval.begin(),
+							((GraphicalEditPart) getParent()).getFigure().getSize().width,
+							interval.length()+ 1);
+			bounds.performTranslate(0, getOffset().y);
+			figure.setBounds(bounds);
+		}
+		// tooltip
+		figure.setToolTipText(m_row.getTooltip());
+	}
 
-  @Override
-  public int getIndex() {
-    return m_layout.getRows().indexOf(m_row);
-  }
+	@Override
+	public int getIndex() {
+		return m_layout.getRows().indexOf(m_row);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IHeaderMenuProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void buildContextMenu(IMenuManager manager) {
-    if (!m_layout.canChangeDimensions()) {
-      return;
-    }
-    // operations
-    {
-      manager.add(new DimensionHeaderAction<MigRowInfo>(this,
-          GefMessages.RowHeaderEditPart_insertRow) {
-        @Override
-        protected void run(MigRowInfo dimension, int index) throws Exception {
-          m_layout.insertRow(index);
-        }
-      });
-      manager.add(new DimensionHeaderAction<MigRowInfo>(this,
-          GefMessages.RowHeaderEditPart_appendRow) {
-        @Override
-        protected void run(MigRowInfo dimension, int index) throws Exception {
-          m_layout.insertRow(index + 1);
-        }
-      });
-      manager.add(new DimensionHeaderAction<MigRowInfo>(this,
-          GefMessages.RowHeaderEditPart_deleteRow) {
-        @Override
-        protected void run(MigRowInfo dimension, int index) throws Exception {
-          m_layout.deleteRow(index);
-        }
-      });
-      manager.add(new DimensionHeaderAction<MigRowInfo>(this,
-          GefMessages.RowHeaderEditPart_clearRow) {
-        @Override
-        protected void run(MigRowInfo dimension, int index) throws Exception {
-          m_layout.clearRow(index);
-        }
-      });
-      manager.add(new DimensionHeaderAction<MigRowInfo>(this,
-          GefMessages.RowHeaderEditPart_splitRow) {
-        @Override
-        protected void run(MigRowInfo dimension, int index) throws Exception {
-          m_layout.splitRow(index);
-        }
-      });
-    }
-    // alignment
-    {
-      manager.add(new Separator());
-      manager.add(new SetAlignmentRowAction(this, MigRowInfo.Alignment.DEFAULT));
-      manager.add(new SetAlignmentRowAction(this, MigRowInfo.Alignment.TOP));
-      manager.add(new SetAlignmentRowAction(this, MigRowInfo.Alignment.CENTER));
-      manager.add(new SetAlignmentRowAction(this, MigRowInfo.Alignment.BOTTOM));
-      manager.add(new SetAlignmentRowAction(this, MigRowInfo.Alignment.FILL));
-      manager.add(new SetAlignmentRowAction(this, MigRowInfo.Alignment.BASELINE));
-    }
-    // grow
-    {
-      manager.add(new Separator());
-      manager.add(new SetGrowAction<MigRowInfo>(this,
-          GefMessages.RowHeaderEditPart_grow,
-          Activator.getImageDescriptor(GROW_MENU_PATH)));
-    }
-    // size
-    {
-      manager.add(new Separator());
-      manager.add(new SetSizeAction<MigRowInfo>(this,
-          GefMessages.RowHeaderEditPart_defaultSize,
-          null));
-      manager.add(new SetSizeAction<MigRowInfo>(this, PREF_TITLE, PREF_CODE));
-    }
-    // properties
-    {
-      manager.add(new Separator());
-      manager.add(new Action(GefMessages.RowHeaderEditPart_properties) {
-        @Override
-        public void run() {
-          editDimension();
-        }
-      });
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IHeaderMenuProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void buildContextMenu(IMenuManager manager) {
+		if (!m_layout.canChangeDimensions()) {
+			return;
+		}
+		// operations
+		{
+			manager.add(new DimensionHeaderAction<MigRowInfo>(this,
+					GefMessages.RowHeaderEditPart_insertRow) {
+				@Override
+				protected void run(MigRowInfo dimension, int index) throws Exception {
+					m_layout.insertRow(index);
+				}
+			});
+			manager.add(new DimensionHeaderAction<MigRowInfo>(this,
+					GefMessages.RowHeaderEditPart_appendRow) {
+				@Override
+				protected void run(MigRowInfo dimension, int index) throws Exception {
+					m_layout.insertRow(index + 1);
+				}
+			});
+			manager.add(new DimensionHeaderAction<MigRowInfo>(this,
+					GefMessages.RowHeaderEditPart_deleteRow) {
+				@Override
+				protected void run(MigRowInfo dimension, int index) throws Exception {
+					m_layout.deleteRow(index);
+				}
+			});
+			manager.add(new DimensionHeaderAction<MigRowInfo>(this,
+					GefMessages.RowHeaderEditPart_clearRow) {
+				@Override
+				protected void run(MigRowInfo dimension, int index) throws Exception {
+					m_layout.clearRow(index);
+				}
+			});
+			manager.add(new DimensionHeaderAction<MigRowInfo>(this,
+					GefMessages.RowHeaderEditPart_splitRow) {
+				@Override
+				protected void run(MigRowInfo dimension, int index) throws Exception {
+					m_layout.splitRow(index);
+				}
+			});
+		}
+		// alignment
+		{
+			manager.add(new Separator());
+			manager.add(new SetAlignmentRowAction(this, MigRowInfo.Alignment.DEFAULT));
+			manager.add(new SetAlignmentRowAction(this, MigRowInfo.Alignment.TOP));
+			manager.add(new SetAlignmentRowAction(this, MigRowInfo.Alignment.CENTER));
+			manager.add(new SetAlignmentRowAction(this, MigRowInfo.Alignment.BOTTOM));
+			manager.add(new SetAlignmentRowAction(this, MigRowInfo.Alignment.FILL));
+			manager.add(new SetAlignmentRowAction(this, MigRowInfo.Alignment.BASELINE));
+		}
+		// grow
+		{
+			manager.add(new Separator());
+			manager.add(new SetGrowAction<MigRowInfo>(this,
+					GefMessages.RowHeaderEditPart_grow,
+					Activator.getImageDescriptor(GROW_MENU_PATH)));
+		}
+		// size
+		{
+			manager.add(new Separator());
+			manager.add(new SetSizeAction<MigRowInfo>(this,
+					GefMessages.RowHeaderEditPart_defaultSize,
+					null));
+			manager.add(new SetSizeAction<MigRowInfo>(this, PREF_TITLE, PREF_CODE));
+		}
+		// properties
+		{
+			manager.add(new Separator());
+			manager.add(new Action(GefMessages.RowHeaderEditPart_properties) {
+				@Override
+				public void run() {
+					editDimension();
+				}
+			});
+		}
+	}
 
-  @Override
-  protected void editDimension() {
-    new RowEditDialog(DesignerPlugin.getShell(), m_layout, m_row).open();
-  }
+	@Override
+	protected void editDimension() {
+		new RowEditDialog(DesignerPlugin.getShell(), m_layout, m_row).open();
+	}
 }
diff --git a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/header/layout/ColumnsLayoutEditPolicy.java b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/header/layout/ColumnsLayoutEditPolicy.java
index 7139333de..ff8d8539c 100644
--- a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/header/layout/ColumnsLayoutEditPolicy.java
+++ b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/header/layout/ColumnsLayoutEditPolicy.java
@@ -43,144 +43,144 @@
  * @coverage swing.MigLayout.header
  */
 public final class ColumnsLayoutEditPolicy extends AbstractHeaderLayoutEditPolicy {
-  private final MigLayoutEditPolicy m_mainPolicy;
-  private final MigLayoutInfo m_layout;
+	private final MigLayoutEditPolicy m_mainPolicy;
+	private final MigLayoutInfo m_layout;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ColumnsLayoutEditPolicy(MigLayoutEditPolicy mainPolicy, MigLayoutInfo layout) {
-    super(mainPolicy);
-    m_mainPolicy = mainPolicy;
-    m_layout = layout;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ColumnsLayoutEditPolicy(MigLayoutEditPolicy mainPolicy, MigLayoutInfo layout) {
+		super(mainPolicy);
+		m_mainPolicy = mainPolicy;
+		m_layout = layout;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Children
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void decorateChild(EditPart child) {
-    child.installEditPolicy(EditPolicy.SELECTION_ROLE, new ColumnSelectionEditPolicy(m_mainPolicy));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Children
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void decorateChild(EditPart child) {
+		child.installEditPolicy(EditPolicy.SELECTION_ROLE, new ColumnSelectionEditPolicy(m_mainPolicy));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Move
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final Figure m_insertFeedback = AbstractGridLayoutEditPolicy.createInsertFigure();
-  private TextFeedback m_feedback;
-  private Command m_moveCommand;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Move
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final Figure m_insertFeedback = AbstractGridLayoutEditPolicy.createInsertFigure();
+	private TextFeedback m_feedback;
+	private Command m_moveCommand;
 
-  @Override
-  protected Command getMoveCommand(ChangeBoundsRequest request) {
-    if (!m_layout.canChangeDimensions()) {
-      return null;
-    }
-    return m_moveCommand;
-  }
+	@Override
+	protected Command getMoveCommand(ChangeBoundsRequest request) {
+		if (!m_layout.canChangeDimensions()) {
+			return null;
+		}
+		return m_moveCommand;
+	}
 
-  @Override
-  protected void showLayoutTargetFeedback(Request request) {
-    // prepare header
-    ColumnHeaderEditPart headerEditPart;
-    {
-      ChangeBoundsRequest changeBoundsRequest = (ChangeBoundsRequest) request;
-      headerEditPart = (ColumnHeaderEditPart) changeBoundsRequest.getEditParts().get(0);
-    }
-    // prepare location
-    Point location;
-    {
-      IDropRequest dropRequest = (IDropRequest) request;
-      location = dropRequest.getLocation().getCopy();
-    }
-    // prepare target header
-    ColumnHeaderEditPart target = null;
-    {
-      for (EditPart editPart : getHost().getChildren()) {
-        ColumnHeaderEditPart columnEditPart = (ColumnHeaderEditPart) editPart;
-        Rectangle bounds = columnEditPart.getFigure().getBounds();
-        if (location.x < bounds.getCenter().x) {
-          target = columnEditPart;
-          break;
-        }
-      }
-    }
-    // prepare grid information
-    IGridInfo gridInfo = m_layout.getGridInfo();
-    Interval[] columnIntervals = gridInfo.getColumnIntervals();
-    Interval[] rowIntervals = gridInfo.getRowIntervals();
-    int y1 = rowIntervals[0].begin() - 5;
-    int y2 = rowIntervals[rowIntervals.length - 1].end() + 5;
-    // prepare index of target column and position for insert feedbacks
-    final int targetIndex;
-    int x;
-    int size = AbstractGridLayoutEditPolicy.INSERT_COLUMN_SIZE;
-    if (target != null) {
-      targetIndex = target.getIndex();
-      x = columnIntervals[targetIndex].begin() - size / 2;
-      if (targetIndex != 0) {
-        x -= (columnIntervals[targetIndex].begin() - columnIntervals[targetIndex - 1].end()) / 2;
-      }
-    } else {
-      targetIndex = m_layout.getColumns().size();
-      x = columnIntervals[columnIntervals.length - 1].end() - size / 2;
-    }
-    // show insert feedbacks
-    {
-      // ...on main viewer
-      m_mainPolicy.showInsertFeedbacks(new Rectangle(x, y1, size, y2 - y1), null);
-      // ...on header viewer
-      {
-        if (m_insertFeedback.getParent() == null) {
-          addFeedback(m_insertFeedback);
-        }
-        // set bounds
-        Point offset = headerEditPart.getOffset();
-        Rectangle bounds = new Rectangle(x + offset.x, 0, size, getHostFigure().getSize().height);
-        m_insertFeedback.setBounds(bounds);
-      }
-    }
-    // show text feedback
-    {
-      Layer feedbackLayer = getMainLayer(IEditPartViewer.FEEDBACK_LAYER);
-      // add feedback
-      if (m_feedback == null) {
-        m_feedback = new TextFeedback(feedbackLayer);
-        m_feedback.add();
-      }
-      // set feedback bounds
-      {
-        Point feedbackLocation = new Point(location.x + 30, 10);
-        FigureUtils.translateAbsoluteToFigure(feedbackLayer, feedbackLocation);
-        m_feedback.setLocation(feedbackLocation);
-      }
-      // set text
-      m_feedback.setText(GefMessages.ColumnsLayoutEditPolicy_columnPrefix + targetIndex);
-    }
-    // prepare command
-    {
-      final int sourceIndex = headerEditPart.getIndex();
-      m_moveCommand = new EditCommand(m_layout) {
-        @Override
-        protected void executeEdit() throws Exception {
-          m_layout.moveColumn(sourceIndex, targetIndex);
-        }
-      };
-    }
-  }
+	@Override
+	protected void showLayoutTargetFeedback(Request request) {
+		// prepare header
+		ColumnHeaderEditPart headerEditPart;
+		{
+			ChangeBoundsRequest changeBoundsRequest = (ChangeBoundsRequest) request;
+			headerEditPart = (ColumnHeaderEditPart) changeBoundsRequest.getEditParts().get(0);
+		}
+		// prepare location
+		Point location;
+		{
+			IDropRequest dropRequest = (IDropRequest) request;
+			location = dropRequest.getLocation().getCopy();
+		}
+		// prepare target header
+		ColumnHeaderEditPart target = null;
+		{
+			for (EditPart editPart : getHost().getChildren()) {
+				ColumnHeaderEditPart columnEditPart = (ColumnHeaderEditPart) editPart;
+				Rectangle bounds = columnEditPart.getFigure().getBounds();
+				if (location.x < bounds.getCenter().x) {
+					target = columnEditPart;
+					break;
+				}
+			}
+		}
+		// prepare grid information
+		IGridInfo gridInfo = m_layout.getGridInfo();
+		Interval[] columnIntervals = gridInfo.getColumnIntervals();
+		Interval[] rowIntervals = gridInfo.getRowIntervals();
+		int y1 = rowIntervals[0].begin() - 5;
+		int y2 = rowIntervals[rowIntervals.length - 1].end() + 5;
+		// prepare index of target column and position for insert feedbacks
+		final int targetIndex;
+		int x;
+		int size = AbstractGridLayoutEditPolicy.INSERT_COLUMN_SIZE;
+		if (target != null) {
+			targetIndex = target.getIndex();
+			x = columnIntervals[targetIndex].begin() - size / 2;
+			if (targetIndex != 0) {
+				x -= (columnIntervals[targetIndex].begin() - columnIntervals[targetIndex - 1].end()) / 2;
+			}
+		} else {
+			targetIndex = m_layout.getColumns().size();
+			x = columnIntervals[columnIntervals.length - 1].end() - size / 2;
+		}
+		// show insert feedbacks
+		{
+			// ...on main viewer
+			m_mainPolicy.showInsertFeedbacks(new Rectangle(x, y1, size, y2 - y1), null);
+			// ...on header viewer
+			{
+				if (m_insertFeedback.getParent() == null) {
+					addFeedback(m_insertFeedback);
+				}
+				// set bounds
+				Point offset = headerEditPart.getOffset();
+				Rectangle bounds = new Rectangle(x + offset.x, 0, size, getHostFigure().getSize().height);
+				m_insertFeedback.setBounds(bounds);
+			}
+		}
+		// show text feedback
+		{
+			Layer feedbackLayer = getMainLayer(IEditPartViewer.FEEDBACK_LAYER);
+			// add feedback
+			if (m_feedback == null) {
+				m_feedback = new TextFeedback(feedbackLayer);
+				m_feedback.add();
+			}
+			// set feedback bounds
+			{
+				Point feedbackLocation = new Point(location.x + 30, 10);
+				FigureUtils.translateAbsoluteToFigure(feedbackLayer, feedbackLocation);
+				m_feedback.setLocation(feedbackLocation);
+			}
+			// set text
+			m_feedback.setText(GefMessages.ColumnsLayoutEditPolicy_columnPrefix + targetIndex);
+		}
+		// prepare command
+		{
+			final int sourceIndex = headerEditPart.getIndex();
+			m_moveCommand = new EditCommand(m_layout) {
+				@Override
+				protected void executeEdit() throws Exception {
+					m_layout.moveColumn(sourceIndex, targetIndex);
+				}
+			};
+		}
+	}
 
-  @Override
-  protected void eraseLayoutTargetFeedback(Request request) {
-    m_mainPolicy.eraseInsertFeedbacks();
-    FigureUtils.removeFigure(m_insertFeedback);
-    if (m_feedback != null) {
-      m_feedback.remove();
-      m_feedback = null;
-    }
-  }
+	@Override
+	protected void eraseLayoutTargetFeedback(Request request) {
+		m_mainPolicy.eraseInsertFeedbacks();
+		FigureUtils.removeFigure(m_insertFeedback);
+		if (m_feedback != null) {
+			m_feedback.remove();
+			m_feedback = null;
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/header/layout/RowsLayoutEditPolicy.java b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/header/layout/RowsLayoutEditPolicy.java
index 4e00bb989..bd9d8dd49 100644
--- a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/header/layout/RowsLayoutEditPolicy.java
+++ b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/header/layout/RowsLayoutEditPolicy.java
@@ -43,144 +43,144 @@
  * @coverage swing.MigLayout.header
  */
 public final class RowsLayoutEditPolicy extends AbstractHeaderLayoutEditPolicy {
-  private final MigLayoutEditPolicy m_mainPolicy;
-  private final MigLayoutInfo m_layout;
+	private final MigLayoutEditPolicy m_mainPolicy;
+	private final MigLayoutInfo m_layout;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public RowsLayoutEditPolicy(MigLayoutEditPolicy mainPolicy, MigLayoutInfo layout) {
-    super(mainPolicy);
-    m_mainPolicy = mainPolicy;
-    m_layout = layout;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public RowsLayoutEditPolicy(MigLayoutEditPolicy mainPolicy, MigLayoutInfo layout) {
+		super(mainPolicy);
+		m_mainPolicy = mainPolicy;
+		m_layout = layout;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Children
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void decorateChild(EditPart child) {
-    child.installEditPolicy(EditPolicy.SELECTION_ROLE, new RowSelectionEditPolicy(m_mainPolicy));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Children
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void decorateChild(EditPart child) {
+		child.installEditPolicy(EditPolicy.SELECTION_ROLE, new RowSelectionEditPolicy(m_mainPolicy));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Move
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final Figure m_insertFeedback = AbstractGridLayoutEditPolicy.createInsertFigure();
-  private TextFeedback m_feedback;
-  private Command m_moveCommand;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Move
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final Figure m_insertFeedback = AbstractGridLayoutEditPolicy.createInsertFigure();
+	private TextFeedback m_feedback;
+	private Command m_moveCommand;
 
-  @Override
-  protected Command getMoveCommand(ChangeBoundsRequest request) {
-    if (!m_layout.canChangeDimensions()) {
-      return null;
-    }
-    return m_moveCommand;
-  }
+	@Override
+	protected Command getMoveCommand(ChangeBoundsRequest request) {
+		if (!m_layout.canChangeDimensions()) {
+			return null;
+		}
+		return m_moveCommand;
+	}
 
-  @Override
-  protected void showLayoutTargetFeedback(Request request) {
-    // prepare header
-    RowHeaderEditPart headerEditPart;
-    {
-      ChangeBoundsRequest changeBoundsRequest = (ChangeBoundsRequest) request;
-      headerEditPart = (RowHeaderEditPart) changeBoundsRequest.getEditParts().get(0);
-    }
-    // prepare location
-    Point location;
-    {
-      IDropRequest dropRequest = (IDropRequest) request;
-      location = dropRequest.getLocation().getCopy();
-    }
-    // prepare target header
-    RowHeaderEditPart target = null;
-    {
-      for (EditPart editPart : getHost().getChildren()) {
-        RowHeaderEditPart rowEditPart = (RowHeaderEditPart) editPart;
-        Rectangle bounds = rowEditPart.getFigure().getBounds();
-        if (location.y < bounds.getCenter().y) {
-          target = rowEditPart;
-          break;
-        }
-      }
-    }
-    // prepare grid information
-    IGridInfo gridInfo = m_layout.getGridInfo();
-    Interval[] columnIntervals = gridInfo.getColumnIntervals();
-    Interval[] rowIntervals = gridInfo.getRowIntervals();
-    int x1 = columnIntervals[0].begin() - 5;
-    int x2 = columnIntervals[columnIntervals.length - 1].end() + 5;
-    // prepare index of target column and position for insert feedbacks
-    final int targetIndex;
-    int y;
-    int size = AbstractGridLayoutEditPolicy.INSERT_ROW_SIZE;
-    if (target != null) {
-      targetIndex = target.getIndex();
-      y = rowIntervals[targetIndex].begin() - size / 2;
-      if (targetIndex != 0) {
-        y -= (rowIntervals[targetIndex].begin() - rowIntervals[targetIndex - 1].end()) / 2;
-      }
-    } else {
-      targetIndex = m_layout.getRows().size();
-      y = rowIntervals[rowIntervals.length - 1].end() - size / 2;
-    }
-    // show insert feedbacks
-    {
-      // ...on main viewer
-      m_mainPolicy.showInsertFeedbacks(new Rectangle(x1, y, x2 - x1, size), null);
-      // ...on header viewer
-      {
-        if (m_insertFeedback.getParent() == null) {
-          addFeedback(m_insertFeedback);
-        }
-        // set bounds
-        Point offset = headerEditPart.getOffset();
-        Rectangle bounds = new Rectangle(0, y + offset.y, getHostFigure().getSize().width, size);
-        m_insertFeedback.setBounds(bounds);
-      }
-    }
-    // show text feedback
-    {
-      Layer feedbackLayer = getMainLayer(IEditPartViewer.FEEDBACK_LAYER);
-      // add feedback
-      if (m_feedback == null) {
-        m_feedback = new TextFeedback(feedbackLayer);
-        m_feedback.add();
-      }
-      // set feedback bounds
-      {
-        Point feedbackLocation = new Point(10, location.y + 10);
-        FigureUtils.translateAbsoluteToFigure(feedbackLayer, feedbackLocation);
-        m_feedback.setLocation(feedbackLocation);
-      }
-      // set text
-      m_feedback.setText(GefMessages.RowsLayoutEditPolicy_rowPrefix + targetIndex);
-    }
-    // prepare command
-    {
-      final int sourceIndex = headerEditPart.getIndex();
-      m_moveCommand = new EditCommand(m_layout) {
-        @Override
-        protected void executeEdit() throws Exception {
-          m_layout.moveRow(sourceIndex, targetIndex);
-        }
-      };
-    }
-  }
+	@Override
+	protected void showLayoutTargetFeedback(Request request) {
+		// prepare header
+		RowHeaderEditPart headerEditPart;
+		{
+			ChangeBoundsRequest changeBoundsRequest = (ChangeBoundsRequest) request;
+			headerEditPart = (RowHeaderEditPart) changeBoundsRequest.getEditParts().get(0);
+		}
+		// prepare location
+		Point location;
+		{
+			IDropRequest dropRequest = (IDropRequest) request;
+			location = dropRequest.getLocation().getCopy();
+		}
+		// prepare target header
+		RowHeaderEditPart target = null;
+		{
+			for (EditPart editPart : getHost().getChildren()) {
+				RowHeaderEditPart rowEditPart = (RowHeaderEditPart) editPart;
+				Rectangle bounds = rowEditPart.getFigure().getBounds();
+				if (location.y < bounds.getCenter().y) {
+					target = rowEditPart;
+					break;
+				}
+			}
+		}
+		// prepare grid information
+		IGridInfo gridInfo = m_layout.getGridInfo();
+		Interval[] columnIntervals = gridInfo.getColumnIntervals();
+		Interval[] rowIntervals = gridInfo.getRowIntervals();
+		int x1 = columnIntervals[0].begin() - 5;
+		int x2 = columnIntervals[columnIntervals.length - 1].end() + 5;
+		// prepare index of target column and position for insert feedbacks
+		final int targetIndex;
+		int y;
+		int size = AbstractGridLayoutEditPolicy.INSERT_ROW_SIZE;
+		if (target != null) {
+			targetIndex = target.getIndex();
+			y = rowIntervals[targetIndex].begin() - size / 2;
+			if (targetIndex != 0) {
+				y -= (rowIntervals[targetIndex].begin() - rowIntervals[targetIndex - 1].end()) / 2;
+			}
+		} else {
+			targetIndex = m_layout.getRows().size();
+			y = rowIntervals[rowIntervals.length - 1].end() - size / 2;
+		}
+		// show insert feedbacks
+		{
+			// ...on main viewer
+			m_mainPolicy.showInsertFeedbacks(new Rectangle(x1, y, x2 - x1, size), null);
+			// ...on header viewer
+			{
+				if (m_insertFeedback.getParent() == null) {
+					addFeedback(m_insertFeedback);
+				}
+				// set bounds
+				Point offset = headerEditPart.getOffset();
+				Rectangle bounds = new Rectangle(0, y + offset.y, getHostFigure().getSize().width, size);
+				m_insertFeedback.setBounds(bounds);
+			}
+		}
+		// show text feedback
+		{
+			Layer feedbackLayer = getMainLayer(IEditPartViewer.FEEDBACK_LAYER);
+			// add feedback
+			if (m_feedback == null) {
+				m_feedback = new TextFeedback(feedbackLayer);
+				m_feedback.add();
+			}
+			// set feedback bounds
+			{
+				Point feedbackLocation = new Point(10, location.y + 10);
+				FigureUtils.translateAbsoluteToFigure(feedbackLayer, feedbackLocation);
+				m_feedback.setLocation(feedbackLocation);
+			}
+			// set text
+			m_feedback.setText(GefMessages.RowsLayoutEditPolicy_rowPrefix + targetIndex);
+		}
+		// prepare command
+		{
+			final int sourceIndex = headerEditPart.getIndex();
+			m_moveCommand = new EditCommand(m_layout) {
+				@Override
+				protected void executeEdit() throws Exception {
+					m_layout.moveRow(sourceIndex, targetIndex);
+				}
+			};
+		}
+	}
 
-  @Override
-  protected void eraseLayoutTargetFeedback(Request request) {
-    m_mainPolicy.eraseInsertFeedbacks();
-    FigureUtils.removeFigure(m_insertFeedback);
-    if (m_feedback != null) {
-      m_feedback.remove();
-      m_feedback = null;
-    }
-  }
+	@Override
+	protected void eraseLayoutTargetFeedback(Request request) {
+		m_mainPolicy.eraseInsertFeedbacks();
+		FigureUtils.removeFigure(m_insertFeedback);
+		if (m_feedback != null) {
+			m_feedback.remove();
+			m_feedback = null;
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/header/selection/ColumnSelectionEditPolicy.java b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/header/selection/ColumnSelectionEditPolicy.java
index 29355aa76..5181785bd 100644
--- a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/header/selection/ColumnSelectionEditPolicy.java
+++ b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/header/selection/ColumnSelectionEditPolicy.java
@@ -34,79 +34,79 @@
  * @coverage swing.MigLayout.header
  */
 public final class ColumnSelectionEditPolicy extends DimensionSelectionEditPolicy<MigColumnInfo> {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ColumnSelectionEditPolicy(LayoutEditPolicy mainPolicy) {
-    super(mainPolicy);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ColumnSelectionEditPolicy(LayoutEditPolicy mainPolicy) {
+		super(mainPolicy);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Resize
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Handle createResizeHandle() {
-    Handle handle = new SideResizeHandle(getHost(), IPositionConstants.RIGHT, 7, true);
-    handle.setDragTrackerTool(new ResizeTracker(getHost(), IPositionConstants.EAST, REQ_RESIZE));
-    return handle;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Resize
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Handle createResizeHandle() {
+		Handle handle = new SideResizeHandle(getHost(), IPositionConstants.RIGHT, 7, true);
+		handle.setDragTrackerTool(new ResizeTracker(getHost(), IPositionConstants.EAST, REQ_RESIZE));
+		return handle;
+	}
 
-  @Override
-  protected Point getTextFeedbackLocation(Point mouseLocation) {
-    return new Point(mouseLocation.x + 10, 10);
-  }
+	@Override
+	protected Point getTextFeedbackLocation(Point mouseLocation) {
+		return new Point(mouseLocation.x + 10, 10);
+	}
 
-  @Override
-  protected int getPixelSize(Dimension resizeDelta) {
-    return getHostFigure().getSize().width + resizeDelta.width;
-  }
+	@Override
+	protected int getPixelSize(Dimension resizeDelta) {
+		return getHostFigure().getSize().width + resizeDelta.width;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Keyboard
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void performRequest(Request request) {
-    super.performRequest(request);
-    if (request instanceof KeyRequest) {
-      KeyRequest keyRequest = (KeyRequest) request;
-      if (keyRequest.isPressed()) {
-        char c = keyRequest.getCharacter();
-        // horizontal
-        if (c == 'd') {
-          setAlignment(MigColumnInfo.Alignment.DEFAULT);
-        } else if (c == 'l') {
-          setAlignment(MigColumnInfo.Alignment.LEFT);
-        } else if (c == 'c') {
-          setAlignment(MigColumnInfo.Alignment.CENTER);
-        } else if (c == 'r') {
-          setAlignment(MigColumnInfo.Alignment.RIGHT);
-        } else if (c == 'f') {
-          setAlignment(MigColumnInfo.Alignment.FILL);
-        } else if (c == 'q') {
-          setAlignment(MigColumnInfo.Alignment.LEADING);
-        } else if (c == 'w') {
-          setAlignment(MigColumnInfo.Alignment.TRAILING);
-        }
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Keyboard
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void performRequest(Request request) {
+		super.performRequest(request);
+		if (request instanceof KeyRequest) {
+			KeyRequest keyRequest = (KeyRequest) request;
+			if (keyRequest.isPressed()) {
+				char c = keyRequest.getCharacter();
+				// horizontal
+				if (c == 'd') {
+					setAlignment(MigColumnInfo.Alignment.DEFAULT);
+				} else if (c == 'l') {
+					setAlignment(MigColumnInfo.Alignment.LEFT);
+				} else if (c == 'c') {
+					setAlignment(MigColumnInfo.Alignment.CENTER);
+				} else if (c == 'r') {
+					setAlignment(MigColumnInfo.Alignment.RIGHT);
+				} else if (c == 'f') {
+					setAlignment(MigColumnInfo.Alignment.FILL);
+				} else if (c == 'q') {
+					setAlignment(MigColumnInfo.Alignment.LEADING);
+				} else if (c == 'w') {
+					setAlignment(MigColumnInfo.Alignment.TRAILING);
+				}
+			}
+		}
+	}
 
-  /**
-   * Sets the alignment for {@link MigColumnInfo}.
-   */
-  private void setAlignment(final MigColumnInfo.Alignment alignment) {
-    final MigLayoutInfo layout = getLayout();
-    ExecutionUtils.run(layout, new RunnableEx() {
-      public void run() throws Exception {
-        getDimension().setAlignment(alignment);
-        layout.writeDimensions();
-      }
-    });
-  }
+	/**
+	 * Sets the alignment for {@link MigColumnInfo}.
+	 */
+	private void setAlignment(final MigColumnInfo.Alignment alignment) {
+		final MigLayoutInfo layout = getLayout();
+		ExecutionUtils.run(layout, new RunnableEx() {
+			public void run() throws Exception {
+				getDimension().setAlignment(alignment);
+				layout.writeDimensions();
+			}
+		});
+	}
 }
diff --git a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/header/selection/DimensionSelectionEditPolicy.java b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/header/selection/DimensionSelectionEditPolicy.java
index c1c8ce614..a6a9a0015 100644
--- a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/header/selection/DimensionSelectionEditPolicy.java
+++ b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/header/selection/DimensionSelectionEditPolicy.java
@@ -54,328 +54,328 @@
  * @coverage swing.MigLayout.header
  */
 abstract class DimensionSelectionEditPolicy<T extends MigDimensionInfo>
-    extends
-      AbstractHeaderSelectionEditPolicy {
-  protected static final String REQ_RESIZE = "resize";
+extends
+AbstractHeaderSelectionEditPolicy {
+	protected static final String REQ_RESIZE = "resize";
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DimensionSelectionEditPolicy(LayoutEditPolicy mainPolicy) {
-    super(mainPolicy);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DimensionSelectionEditPolicy(LayoutEditPolicy mainPolicy) {
+		super(mainPolicy);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Handles
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected List<Handle> createSelectionHandles() {
-    List<Handle> handles = Lists.newArrayList();
-    // move handle
-    {
-      MoveHandle moveHandle = new MoveHandle(getHost(), new HeaderMoveHandleLocator());
-      moveHandle.setForeground(IColorConstants.red);
-      handles.add(moveHandle);
-    }
-    //
-    return handles;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Handles
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected List<Handle> createSelectionHandles() {
+		List<Handle> handles = Lists.newArrayList();
+		// move handle
+		{
+			MoveHandle moveHandle = new MoveHandle(getHost(), new HeaderMoveHandleLocator());
+			moveHandle.setForeground(IColorConstants.red);
+			handles.add(moveHandle);
+		}
+		//
+		return handles;
+	}
 
-  @Override
-  protected List<Handle> createStaticHandles() {
-    List<Handle> handles = Lists.newArrayList();
-    handles.add(createResizeHandle());
-    return handles;
-  }
+	@Override
+	protected List<Handle> createStaticHandles() {
+		List<Handle> handles = Lists.newArrayList();
+		handles.add(createResizeHandle());
+		return handles;
+	}
 
-  /**
-   * @return the {@link Handle} for resizing.
-   */
-  protected abstract Handle createResizeHandle();
+	/**
+	 * @return the {@link Handle} for resizing.
+	 */
+	protected abstract Handle createResizeHandle();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the host {@link DimensionHeaderEditPart}.
-   */
-  @SuppressWarnings("unchecked")
-  private DimensionHeaderEditPart<T> getHostHeader() {
-    return (DimensionHeaderEditPart<T>) getHost();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the host {@link DimensionHeaderEditPart}.
+	 */
+	@SuppressWarnings("unchecked")
+	private DimensionHeaderEditPart<T> getHostHeader() {
+		return (DimensionHeaderEditPart<T>) getHost();
+	}
 
-  /**
-   * @return the host {@link MigLayoutInfo}.
-   */
-  protected final MigLayoutInfo getLayout() {
-    return getHostHeader().getLayout();
-  }
+	/**
+	 * @return the host {@link MigLayoutInfo}.
+	 */
+	protected final MigLayoutInfo getLayout() {
+		return getHostHeader().getLayout();
+	}
 
-  /**
-   * @return the host {@link MigDimensionInfo}.
-   */
-  protected final T getDimension() {
-    return getHostHeader().getDimension();
-  }
+	/**
+	 * @return the host {@link MigDimensionInfo}.
+	 */
+	protected final T getDimension() {
+		return getHostHeader().getDimension();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Resize
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private SizeElement m_resizeSizeElement;
-  private String m_resizeSizeUnit;
-  private Figure m_lineFeedback;
-  private ResizeHintFigure m_feedback;
-  private ChangeBoundsRequest m_lastResizeRequest;
-  protected Command m_resizeCommand;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Resize
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private SizeElement m_resizeSizeElement;
+	private String m_resizeSizeUnit;
+	private Figure m_lineFeedback;
+	private ResizeHintFigure m_feedback;
+	private ChangeBoundsRequest m_lastResizeRequest;
+	protected Command m_resizeCommand;
 
-  @Override
-  public boolean understandsRequest(Request request) {
-    return super.understandsRequest(request) || request.getType() == REQ_RESIZE;
-  }
+	@Override
+	public boolean understandsRequest(Request request) {
+		return super.understandsRequest(request) || request.getType() == REQ_RESIZE;
+	}
 
-  @Override
-  public Command getCommand(Request request) {
-    if (!getLayout().canChangeDimensions()) {
-      return null;
-    }
-    // use such "indirect" command because when we press Ctrl and _don't_ move mouse after
-    // this, we will show correct feedback text (without hint), and set correct m_resizeCommand,
-    // but GEF already asked command and will not ask it again
-    return new Command() {
-      @Override
-      public void execute() throws Exception {
-        getHost().getViewer().getEditDomain().executeCommand(m_resizeCommand);
-      }
-    };
-  }
+	@Override
+	public Command getCommand(Request request) {
+		if (!getLayout().canChangeDimensions()) {
+			return null;
+		}
+		// use such "indirect" command because when we press Ctrl and _don't_ move mouse after
+		// this, we will show correct feedback text (without hint), and set correct m_resizeCommand,
+		// but GEF already asked command and will not ask it again
+		return new Command() {
+			@Override
+			public void execute() throws Exception {
+				getHost().getViewer().getEditDomain().executeCommand(m_resizeCommand);
+			}
+		};
+	}
 
-  @Override
-  public void showSourceFeedback(Request request) {
-    ChangeBoundsRequest changeBoundsRequest = (ChangeBoundsRequest) request;
-    m_resizeCommand = null;
-    // line feedback
-    {
-      // create feedback
-      if (m_lineFeedback == null) {
-        m_lineFeedback = new Figure();
-        LineBorder border = new LineBorder(IColorConstants.red, 2);
-        m_lineFeedback.setBorder(border);
-        addFeedback(m_lineFeedback);
-      }
-      // prepare feedback bounds
-      Rectangle bounds;
-      {
-        Figure hostFigure = getHostFigure();
-        bounds = changeBoundsRequest.getTransformedRectangle(hostFigure.getBounds());
-        FigureUtils.translateFigureToAbsolute(hostFigure, bounds);
-      }
-      // show feedback
-      m_lineFeedback.setBounds(bounds);
-    }
-    // text feedback
-    {
-      Layer feedbackLayer = getMainLayer(IEditPartViewer.TOP_LAYER);
-      // add feedback
-      if (m_feedback == null) {
-        m_feedback = new ResizeHintFigure();
-        feedbackLayer.add(m_feedback);
-        // get initial values
-        prepareDefaultResizeElements();
-      }
-      // set feedback bounds
-      {
-        Point mouseLocation = changeBoundsRequest.getLocation().getCopy();
-        Point feedbackLocation = getTextFeedbackLocation(mouseLocation);
-        FigureUtils.translateAbsoluteToFigure(feedbackLayer, feedbackLocation);
-        m_feedback.setLocation(feedbackLocation);
-      }
-      // set text
-      m_lastResizeRequest = changeBoundsRequest;
-      updateFeedbackText(changeBoundsRequest);
-    }
-  }
+	@Override
+	public void showSourceFeedback(Request request) {
+		ChangeBoundsRequest changeBoundsRequest = (ChangeBoundsRequest) request;
+		m_resizeCommand = null;
+		// line feedback
+		{
+			// create feedback
+			if (m_lineFeedback == null) {
+				m_lineFeedback = new Figure();
+				LineBorder border = new LineBorder(IColorConstants.red, 2);
+				m_lineFeedback.setBorder(border);
+				addFeedback(m_lineFeedback);
+			}
+			// prepare feedback bounds
+			Rectangle bounds;
+			{
+				Figure hostFigure = getHostFigure();
+				bounds = changeBoundsRequest.getTransformedRectangle(hostFigure.getBounds());
+				FigureUtils.translateFigureToAbsolute(hostFigure, bounds);
+			}
+			// show feedback
+			m_lineFeedback.setBounds(bounds);
+		}
+		// text feedback
+		{
+			Layer feedbackLayer = getMainLayer(IEditPartViewer.TOP_LAYER);
+			// add feedback
+			if (m_feedback == null) {
+				m_feedback = new ResizeHintFigure();
+				feedbackLayer.add(m_feedback);
+				// get initial values
+				prepareDefaultResizeElements();
+			}
+			// set feedback bounds
+			{
+				Point mouseLocation = changeBoundsRequest.getLocation().getCopy();
+				Point feedbackLocation = getTextFeedbackLocation(mouseLocation);
+				FigureUtils.translateAbsoluteToFigure(feedbackLayer, feedbackLocation);
+				m_feedback.setLocation(feedbackLocation);
+			}
+			// set text
+			m_lastResizeRequest = changeBoundsRequest;
+			updateFeedbackText(changeBoundsRequest);
+		}
+	}
 
-  /**
-   * Initializes {@link #m_resizeSizeElement} and {@link #m_resizeSizeUnit}.
-   */
-  private void prepareDefaultResizeElements() {
-    m_resizeSizeElement = SizeElement.PREF;
-    m_resizeSizeUnit = StringUtils.EMPTY;
-    // prepare default size element to resize
-    UnitValue resizeValue;
-    {
-      T dimension = getDimension();
-      {
-        resizeValue = dimension.getPreferredSize();
-        m_resizeSizeElement = SizeElement.PREF;
-      }
-      if (resizeValue == null) {
-        resizeValue = dimension.getMinimumSize();
-        if (resizeValue != null) {
-          m_resizeSizeElement = SizeElement.MIN;
-        }
-      }
-      if (resizeValue == null) {
-        resizeValue = dimension.getMaximumSize();
-        if (resizeValue != null) {
-          m_resizeSizeElement = SizeElement.MAX;
-        }
-      }
-    }
-    // use existing unit
-    if (resizeValue != null) {
-      m_resizeSizeUnit = resizeValue.getUnitString();
-    }
-  }
+	/**
+	 * Initializes {@link #m_resizeSizeElement} and {@link #m_resizeSizeUnit}.
+	 */
+	private void prepareDefaultResizeElements() {
+		m_resizeSizeElement = SizeElement.PREF;
+		m_resizeSizeUnit = StringUtils.EMPTY;
+		// prepare default size element to resize
+		UnitValue resizeValue;
+		{
+			T dimension = getDimension();
+			{
+				resizeValue = dimension.getPreferredSize();
+				m_resizeSizeElement = SizeElement.PREF;
+			}
+			if (resizeValue == null) {
+				resizeValue = dimension.getMinimumSize();
+				if (resizeValue != null) {
+					m_resizeSizeElement = SizeElement.MIN;
+				}
+			}
+			if (resizeValue == null) {
+				resizeValue = dimension.getMaximumSize();
+				if (resizeValue != null) {
+					m_resizeSizeElement = SizeElement.MAX;
+				}
+			}
+		}
+		// use existing unit
+		if (resizeValue != null) {
+			m_resizeSizeUnit = resizeValue.getUnitString();
+		}
+	}
 
-  /**
-   * Updates the feedback text according to the {@link #m_lastResizeRequest} and size element/unit.
-   */
-  private void updateFeedbackText(Request request) {
-    // prepare size
-    final String sizeString;
-    {
-      int pixels = getPixelSize(m_lastResizeRequest.getSizeDelta());
-      sizeString = getDimension().toUnitString(pixels, m_resizeSizeUnit);
-    }
-    // show text
-    {
-      String text;
-      switch (m_resizeSizeElement) {
-        case MIN :
-          text = "min := ";
-          break;
-        case PREF :
-          text = "pref := ";
-          break;
-        case MAX :
-          text = "max := ";
-          break;
-        default :
-          text = "";
-      }
-      m_feedback.setText(text + sizeString);
-    }
-    // set command
-    final MigLayoutInfo layout = getLayout();
-    m_resizeCommand = new EditCommand(layout) {
-      @Override
-      protected void executeEdit() throws Exception {
-        T dimension = getDimension();
-        switch (m_resizeSizeElement) {
-          case MIN :
-            dimension.setMinimumSize(sizeString);
-            break;
-          case PREF :
-            dimension.setPreferredSize(sizeString);
-            break;
-          case MAX :
-            dimension.setMaximumSize(sizeString);
-            break;
-          default :
-            return;
-        }
-        layout.writeDimensions();
-      }
-    };
-  }
+	/**
+	 * Updates the feedback text according to the {@link #m_lastResizeRequest} and size element/unit.
+	 */
+	private void updateFeedbackText(Request request) {
+		// prepare size
+		final String sizeString;
+		{
+			int pixels = getPixelSize(m_lastResizeRequest.getSizeDelta());
+			sizeString = getDimension().toUnitString(pixels, m_resizeSizeUnit);
+		}
+		// show text
+		{
+			String text;
+			switch (m_resizeSizeElement) {
+			case MIN :
+				text = "min := ";
+				break;
+			case PREF :
+				text = "pref := ";
+				break;
+			case MAX :
+				text = "max := ";
+				break;
+			default :
+				text = "";
+			}
+			m_feedback.setText(text + sizeString);
+		}
+		// set command
+		final MigLayoutInfo layout = getLayout();
+		m_resizeCommand = new EditCommand(layout) {
+			@Override
+			protected void executeEdit() throws Exception {
+				T dimension = getDimension();
+				switch (m_resizeSizeElement) {
+				case MIN :
+					dimension.setMinimumSize(sizeString);
+					break;
+				case PREF :
+					dimension.setPreferredSize(sizeString);
+					break;
+				case MAX :
+					dimension.setMaximumSize(sizeString);
+					break;
+				default :
+					return;
+				}
+				layout.writeDimensions();
+			}
+		};
+	}
 
-  @Override
-  public void eraseSourceFeedback(Request request) {
-    removeFeedback(m_lineFeedback);
-    m_lineFeedback = null;
-    //
-    FigureUtils.removeFigure(m_feedback);
-    m_feedback = null;
-  }
+	@Override
+	public void eraseSourceFeedback(Request request) {
+		removeFeedback(m_lineFeedback);
+		m_lineFeedback = null;
+		//
+		FigureUtils.removeFigure(m_feedback);
+		m_feedback = null;
+	}
 
-  @Override
-  public void performRequest(Request request) {
-    if (request instanceof KeyRequest) {
-      KeyRequest keyRequest = (KeyRequest) request;
-      // special key for resize feedback
-      if (m_feedback != null) {
-        char c = keyRequest.getCharacter();
-        {
-          SizeElement newSizeElement = ResizeHintFigure.getNewSizeElement(c);
-          if (newSizeElement != null) {
-            m_resizeSizeElement = newSizeElement;
-            updateFeedbackText(request);
-          }
-        }
-        {
-          String newSizeUnit = ResizeHintFigure.getNewSizeUnit(c);
-          if (newSizeUnit != null) {
-            m_resizeSizeUnit = newSizeUnit;
-            updateFeedbackText(request);
-          }
-        }
-      }
-      // keyboard based alignment
-      if (keyRequest.isPressed()) {
-        char c = keyRequest.getCharacter();
-        if (c == 'g') {
-          flipGrow();
-        }
-      }
-    }
-  }
+	@Override
+	public void performRequest(Request request) {
+		if (request instanceof KeyRequest) {
+			KeyRequest keyRequest = (KeyRequest) request;
+			// special key for resize feedback
+			if (m_feedback != null) {
+				char c = keyRequest.getCharacter();
+				{
+					SizeElement newSizeElement = ResizeHintFigure.getNewSizeElement(c);
+					if (newSizeElement != null) {
+						m_resizeSizeElement = newSizeElement;
+						updateFeedbackText(request);
+					}
+				}
+				{
+					String newSizeUnit = ResizeHintFigure.getNewSizeUnit(c);
+					if (newSizeUnit != null) {
+						m_resizeSizeUnit = newSizeUnit;
+						updateFeedbackText(request);
+					}
+				}
+			}
+			// keyboard based alignment
+			if (keyRequest.isPressed()) {
+				char c = keyRequest.getCharacter();
+				if (c == 'g') {
+					flipGrow();
+				}
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Resize: abstract feedback
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the location of text feedback (with size hint).
-   */
-  protected abstract Point getTextFeedbackLocation(Point mouseLocation);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Resize: abstract feedback
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the location of text feedback (with size hint).
+	 */
+	protected abstract Point getTextFeedbackLocation(Point mouseLocation);
 
-  /**
-   * @return the size of host {@link EditPart} in pixels, taking into account given resize delta.
-   */
-  protected abstract int getPixelSize(Dimension resizeDelta);
+	/**
+	 * @return the size of host {@link EditPart} in pixels, taking into account given resize delta.
+	 */
+	protected abstract int getPixelSize(Dimension resizeDelta);
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Move location
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Implementation of {@link ILocator} to place handle directly on header.
-   */
-  private class HeaderMoveHandleLocator implements ILocator {
-    public void relocate(Figure target) {
-      Figure reference = getHostFigure();
-      Rectangle bounds = reference.getBounds().getCopy();
-      FigureUtils.translateFigureToFigure(reference, target, bounds);
-      target.setBounds(bounds);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Move location
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Implementation of {@link ILocator} to place handle directly on header.
+	 */
+	private class HeaderMoveHandleLocator implements ILocator {
+		public void relocate(Figure target) {
+			Figure reference = getHostFigure();
+			Rectangle bounds = reference.getBounds().getCopy();
+			FigureUtils.translateFigureToFigure(reference, target, bounds);
+			target.setBounds(bounds);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Keyboard
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Set/unset the "grow" flag.
-   */
-  private void flipGrow() {
-    final MigLayoutInfo layout = getLayout();
-    ExecutionUtils.run(layout, new RunnableEx() {
-      public void run() throws Exception {
-        getDimension().flipGrow();
-        layout.writeDimensions();
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Keyboard
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Set/unset the "grow" flag.
+	 */
+	private void flipGrow() {
+		final MigLayoutInfo layout = getLayout();
+		ExecutionUtils.run(layout, new RunnableEx() {
+			public void run() throws Exception {
+				getDimension().flipGrow();
+				layout.writeDimensions();
+			}
+		});
+	}
 }
diff --git a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/header/selection/ResizeHintFigure.java b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/header/selection/ResizeHintFigure.java
index 1f605f277..1c8ba01da 100644
--- a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/header/selection/ResizeHintFigure.java
+++ b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/header/selection/ResizeHintFigure.java
@@ -34,268 +34,268 @@
  * @coverage swing.MigLayout.header
  */
 public final class ResizeHintFigure extends Figure {
-  private String m_text;
+	private String m_text;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ResizeHintFigure() {
-    setOpaque(true);
-    setBackground(IColorConstants.tooltipBackground);
-    setForeground(IColorConstants.tooltipForeground);
-    setBorder(new CompoundBorder(new LineBorder(IColorConstants.tooltipForeground),
-        new MarginBorder(5)));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ResizeHintFigure() {
+		setOpaque(true);
+		setBackground(IColorConstants.tooltipBackground);
+		setForeground(IColorConstants.tooltipForeground);
+		setBorder(new CompoundBorder(new LineBorder(IColorConstants.tooltipForeground),
+				new MarginBorder(5)));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets the first line text.
-   */
-  public void setText(String text) {
-    m_text = text;
-    update();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets the first line text.
+	 */
+	public void setText(String text) {
+		m_text = text;
+		update();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Paint
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final Shell HIDDEN_SHELL = new Shell();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Paint
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final Shell HIDDEN_SHELL = new Shell();
 
-  /**
-   * @return the desirable size for this {@link ResizeHintFigure}.
-   */
-  private Dimension getPreferredSize() {
-    GC gc = new GC(HIDDEN_SHELL);
-    try {
-      Graphics graphics = new Graphics(gc);
-      Dimension size = doPaint(graphics);
-      // full size
-      Insets insets = getInsets();
-      return size.getExpanded(insets.getWidth(), insets.getHeight());
-    } finally {
-      gc.dispose();
-    }
-  }
+	/**
+	 * @return the desirable size for this {@link ResizeHintFigure}.
+	 */
+	private Dimension getPreferredSize() {
+		GC gc = new GC(HIDDEN_SHELL);
+		try {
+			Graphics graphics = new Graphics(gc);
+			Dimension size = doPaint(graphics);
+			// full size
+			Insets insets = getInsets();
+			return size.getExpanded(insets.getWidth(), insets.getHeight());
+		} finally {
+			gc.dispose();
+		}
+	}
 
-  /**
-   * Updates the size and forces repaint.
-   */
-  private void update() {
-    setSize(getPreferredSize());
-    repaint();
-  }
+	/**
+	 * Updates the size and forces repaint.
+	 */
+	private void update() {
+		setSize(getPreferredSize());
+		repaint();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Character to operation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  enum SizeElement {
-    ALL, MIN, PREF, MAX
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Character to operation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	enum SizeElement {
+		ALL, MIN, PREF, MAX
+	}
 
-  /**
-   * @return the new {@link SizeElement} to change, if given char if size element selection. May be
-   *         <code>null</code>, if given character does not correspond any size element.
-   */
-  static SizeElement getNewSizeElement(char c) {
-    c = Character.toUpperCase(c);
-    if (c == 'N') {
-      return SizeElement.MIN;
-    } else if (c == 'P') {
-      return SizeElement.PREF;
-    } else if (c == 'X') {
-      return SizeElement.MAX;
-    }
-    // no change
-    return null;
-  }
+	/**
+	 * @return the new {@link SizeElement} to change, if given char if size element selection. May be
+	 *         <code>null</code>, if given character does not correspond any size element.
+	 */
+	static SizeElement getNewSizeElement(char c) {
+		c = Character.toUpperCase(c);
+		if (c == 'N') {
+			return SizeElement.MIN;
+		} else if (c == 'P') {
+			return SizeElement.PREF;
+		} else if (c == 'X') {
+			return SizeElement.MAX;
+		}
+		// no change
+		return null;
+	}
 
-  /**
-   * @return the new size unit, if given char if size unit selection. May be <code>null</code>, if
-   *         given character does not correspond any size unit.
-   */
-  static String getNewSizeUnit(char c) {
-    c = Character.toUpperCase(c);
-    if (c == '0') {
-      return "";
-    } else if (c == '1') {
-      return "px";
-    } else if (c == '2') {
-      return "%";
-    } else if (c == '3') {
-      return "lp";
-    } else if (c == '4') {
-      return "pt";
-    } else if (c == '5') {
-      return "mm";
-    } else if (c == '6') {
-      return "cm";
-    } else if (c == '7') {
-      return "in";
-    } else if (c == '8') {
-      return "sp";
-    }
-    // no change
-    return null;
-  }
+	/**
+	 * @return the new size unit, if given char if size unit selection. May be <code>null</code>, if
+	 *         given character does not correspond any size unit.
+	 */
+	static String getNewSizeUnit(char c) {
+		c = Character.toUpperCase(c);
+		if (c == '0') {
+			return "";
+		} else if (c == '1') {
+			return "px";
+		} else if (c == '2') {
+			return "%";
+		} else if (c == '3') {
+			return "lp";
+		} else if (c == '4') {
+			return "pt";
+		} else if (c == '5') {
+			return "mm";
+		} else if (c == '6') {
+			return "cm";
+		} else if (c == '7') {
+			return "in";
+		} else if (c == '8') {
+			return "sp";
+		}
+		// no change
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Paint
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void paintClientArea(Graphics graphics) {
-    doPaint(graphics);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Paint
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void paintClientArea(Graphics graphics) {
+		doPaint(graphics);
+	}
 
-  private Dimension doPaint(Graphics graphics) {
-    Font font = getFont();
-    Font boldFont = DrawUtils.getBoldFont(font);
-    // use fonts
-    try {
-      int y = drawText(graphics, m_text, 0, 0, font).height;
-      // Note
-      {
-        int x = 0;
-        Dimension size;
-        //
-        size = drawText(graphics, GefMessages.ResizeHintFigure_note, x, y + 1, boldFont);
-        x += size.width;
-        //
-        size = drawText(graphics, GefMessages.ResizeHintFigure_keyHint, x, y, font);
-        x += size.width;
-        y += size.height;
-      }
-      // size element/unit
-      {
-        int x = 10;
-        Dimension size;
-        size =
-            drawHintColumn(
-                graphics,
-                x,
-                y,
-                boldFont,
-                font,
-                new String[]{"N", "P", "X"},
-                new String[]{
-                    GefMessages.ResizeHintFigure_minimumSize,
-                    GefMessages.ResizeHintFigure_preferredSize,
-                    GefMessages.ResizeHintFigure_maximumSize});
-        x += size.width + 10;
-        size =
-            drawHintColumn(graphics, x, y, boldFont, font, new String[]{
-                "0",
-                "1",
-                "2",
-                "3",
-                "4",
-                "5",
-                "6",
-                "7",
-                "8",}, new String[]{
-                GefMessages.ResizeHintFigure_unit_default,
-                GefMessages.ResizeHintFigure_unit_pixels,
-                GefMessages.ResizeHintFigure_unit_percents,
-                GefMessages.ResizeHintFigure_unit_logicalPixels,
-                GefMessages.ResizeHintFigure_unit_points,
-                GefMessages.ResizeHintFigure_unit_millimeters,
-                GefMessages.ResizeHintFigure_unit_centimeters,
-                GefMessages.ResizeHintFigure_unit_inches,
-                GefMessages.ResizeHintFigure_unit_screenPercents});
-        return new Dimension(x + size.width, y + size.height);
-      }
-    } finally {
-      boldFont.dispose();
-    }
-  }
+	private Dimension doPaint(Graphics graphics) {
+		Font font = getFont();
+		Font boldFont = DrawUtils.getBoldFont(font);
+		// use fonts
+		try {
+			int y = drawText(graphics, m_text, 0, 0, font).height;
+			// Note
+			{
+				int x = 0;
+				Dimension size;
+				//
+				size = drawText(graphics, GefMessages.ResizeHintFigure_note, x, y + 1, boldFont);
+				x += size.width;
+				//
+				size = drawText(graphics, GefMessages.ResizeHintFigure_keyHint, x, y, font);
+				x += size.width;
+				y += size.height;
+			}
+			// size element/unit
+			{
+				int x = 10;
+				Dimension size;
+				size =
+						drawHintColumn(
+								graphics,
+								x,
+								y,
+								boldFont,
+								font,
+								new String[]{"N", "P", "X"},
+								new String[]{
+										GefMessages.ResizeHintFigure_minimumSize,
+										GefMessages.ResizeHintFigure_preferredSize,
+										GefMessages.ResizeHintFigure_maximumSize});
+				x += size.width + 10;
+				size =
+						drawHintColumn(graphics, x, y, boldFont, font, new String[]{
+								"0",
+								"1",
+								"2",
+								"3",
+								"4",
+								"5",
+								"6",
+								"7",
+								"8",}, new String[]{
+										GefMessages.ResizeHintFigure_unit_default,
+										GefMessages.ResizeHintFigure_unit_pixels,
+										GefMessages.ResizeHintFigure_unit_percents,
+										GefMessages.ResizeHintFigure_unit_logicalPixels,
+										GefMessages.ResizeHintFigure_unit_points,
+										GefMessages.ResizeHintFigure_unit_millimeters,
+										GefMessages.ResizeHintFigure_unit_centimeters,
+										GefMessages.ResizeHintFigure_unit_inches,
+										GefMessages.ResizeHintFigure_unit_screenPercents});
+				return new Dimension(x + size.width, y + size.height);
+			}
+		} finally {
+			boldFont.dispose();
+		}
+	}
 
-  /**
-   * Draws text at given location.
-   *
-   * @return the size of text.
-   */
-  private static Dimension drawText(Graphics graphics, String text, int x, int y, Font font) {
-    graphics.setFont(font);
-    graphics.drawText(text, x, y);
-    return FigureUtils.calculateTextSize(text, font);
-  }
+	/**
+	 * Draws text at given location.
+	 *
+	 * @return the size of text.
+	 */
+	private static Dimension drawText(Graphics graphics, String text, int x, int y, Font font) {
+		graphics.setFont(font);
+		graphics.drawText(text, x, y);
+		return FigureUtils.calculateTextSize(text, font);
+	}
 
-  private static Dimension drawHintColumn(Graphics graphics,
-      int x_,
-      int y_,
-      Font keyFont,
-      Font textFont,
-      String[] keyArray,
-      String[] textArray) {
-    int lineWidth = 0;
-    int lineHeight = 0;
-    //
-    graphics.pushState();
-    try {
-      // prepare width of key column
-      int keyWidth = 0;
-      {
-        for (String key : keyArray) {
-          Dimension size = FigureUtils.calculateTextSize(key, keyFont);
-          keyWidth = Math.max(keyWidth, size.width);
-          lineHeight = size.height;
-        }
-      }
-      // draw key/text pairs
-      int y = y_;
-      for (int i = 0; i < keyArray.length; i++) {
-        int x = x_;
-        // key
-        {
-          String key = keyArray[i];
-          graphics.setForegroundColor(IColorConstants.blue);
-          drawText(graphics, key, x, y, keyFont);
-          x += keyWidth;
-        }
-        // dash
-        {
-          String text = " - ";
-          graphics.setForegroundColor(IColorConstants.black);
-          x += drawText(graphics, text, x, y, textFont).width;
-        }
-        // text
-        {
-          String text = textArray[i];
-          // optional bold part
-          {
-            int boldEnd = text.indexOf('|');
-            if (boldEnd != -1) {
-              String boldText = text.substring(0, boldEnd);
-              // draw bold text
-              graphics.setForegroundColor(IColorConstants.black);
-              x += drawText(graphics, boldText, x, y, keyFont).width;
-              // prepare rest of text
-              text = text.substring(boldEnd + 1);
-            }
-          }
-          // rest of the text
-          graphics.setForegroundColor(IColorConstants.black);
-          Dimension size = drawText(graphics, text, x, y, textFont);
-          // update line width
-          lineWidth = Math.max(lineWidth, x - x_ + size.width);
-        }
-        // next line
-        y += lineHeight;
-      }
-      return new Dimension(lineWidth, y - y_);
-    } finally {
-      graphics.popState();
-    }
-  }
+	private static Dimension drawHintColumn(Graphics graphics,
+			int x_,
+			int y_,
+			Font keyFont,
+			Font textFont,
+			String[] keyArray,
+			String[] textArray) {
+		int lineWidth = 0;
+		int lineHeight = 0;
+		//
+		graphics.pushState();
+		try {
+			// prepare width of key column
+			int keyWidth = 0;
+			{
+				for (String key : keyArray) {
+					Dimension size = FigureUtils.calculateTextSize(key, keyFont);
+					keyWidth = Math.max(keyWidth, size.width);
+					lineHeight = size.height;
+				}
+			}
+			// draw key/text pairs
+			int y = y_;
+			for (int i = 0; i < keyArray.length; i++) {
+				int x = x_;
+				// key
+				{
+					String key = keyArray[i];
+					graphics.setForegroundColor(IColorConstants.blue);
+					drawText(graphics, key, x, y, keyFont);
+					x += keyWidth;
+				}
+				// dash
+				{
+					String text = " - ";
+					graphics.setForegroundColor(IColorConstants.black);
+					x += drawText(graphics, text, x, y, textFont).width;
+				}
+				// text
+				{
+					String text = textArray[i];
+					// optional bold part
+					{
+						int boldEnd = text.indexOf('|');
+						if (boldEnd != -1) {
+							String boldText = text.substring(0, boldEnd);
+							// draw bold text
+							graphics.setForegroundColor(IColorConstants.black);
+							x += drawText(graphics, boldText, x, y, keyFont).width;
+							// prepare rest of text
+							text = text.substring(boldEnd + 1);
+						}
+					}
+					// rest of the text
+					graphics.setForegroundColor(IColorConstants.black);
+					Dimension size = drawText(graphics, text, x, y, textFont);
+					// update line width
+					lineWidth = Math.max(lineWidth, x - x_ + size.width);
+				}
+				// next line
+				y += lineHeight;
+			}
+			return new Dimension(lineWidth, y - y_);
+		} finally {
+			graphics.popState();
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/header/selection/RowSelectionEditPolicy.java b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/header/selection/RowSelectionEditPolicy.java
index d16d39e8d..ee3c2ba11 100644
--- a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/header/selection/RowSelectionEditPolicy.java
+++ b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/header/selection/RowSelectionEditPolicy.java
@@ -34,77 +34,77 @@
  * @coverage swing.MigLayout.header
  */
 public final class RowSelectionEditPolicy extends DimensionSelectionEditPolicy<MigRowInfo> {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public RowSelectionEditPolicy(LayoutEditPolicy mainPolicy) {
-    super(mainPolicy);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public RowSelectionEditPolicy(LayoutEditPolicy mainPolicy) {
+		super(mainPolicy);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Resize
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Handle createResizeHandle() {
-    Handle handle = new SideResizeHandle(getHost(), IPositionConstants.BOTTOM, 7, true);
-    handle.setDragTrackerTool(new ResizeTracker(getHost(), IPositionConstants.SOUTH, REQ_RESIZE));
-    return handle;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Resize
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Handle createResizeHandle() {
+		Handle handle = new SideResizeHandle(getHost(), IPositionConstants.BOTTOM, 7, true);
+		handle.setDragTrackerTool(new ResizeTracker(getHost(), IPositionConstants.SOUTH, REQ_RESIZE));
+		return handle;
+	}
 
-  @Override
-  protected Point getTextFeedbackLocation(Point mouseLocation) {
-    return new Point(10, mouseLocation.y + 10);
-  }
+	@Override
+	protected Point getTextFeedbackLocation(Point mouseLocation) {
+		return new Point(10, mouseLocation.y + 10);
+	}
 
-  @Override
-  protected int getPixelSize(Dimension resizeDelta) {
-    return getHostFigure().getSize().height + resizeDelta.height;
-  }
+	@Override
+	protected int getPixelSize(Dimension resizeDelta) {
+		return getHostFigure().getSize().height + resizeDelta.height;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Keyboard
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void performRequest(Request request) {
-    super.performRequest(request);
-    if (request instanceof KeyRequest) {
-      KeyRequest keyRequest = (KeyRequest) request;
-      if (keyRequest.isPressed()) {
-        char c = keyRequest.getCharacter();
-        // vertical
-        if (c == 'd' || c == 'D') {
-          setAlignment(MigRowInfo.Alignment.DEFAULT);
-        } else if (c == 't') {
-          setAlignment(MigRowInfo.Alignment.TOP);
-        } else if (c == 'm' || c == 'M' || c == 'c' || c == 'C') {
-          setAlignment(MigRowInfo.Alignment.CENTER);
-        } else if (c == 'b') {
-          setAlignment(MigRowInfo.Alignment.BOTTOM);
-        } else if (c == 'f' || c == 'F') {
-          setAlignment(MigRowInfo.Alignment.FILL);
-        } else if (c == 'a') {
-          setAlignment(MigRowInfo.Alignment.BASELINE);
-        }
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Keyboard
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void performRequest(Request request) {
+		super.performRequest(request);
+		if (request instanceof KeyRequest) {
+			KeyRequest keyRequest = (KeyRequest) request;
+			if (keyRequest.isPressed()) {
+				char c = keyRequest.getCharacter();
+				// vertical
+				if (c == 'd' || c == 'D') {
+					setAlignment(MigRowInfo.Alignment.DEFAULT);
+				} else if (c == 't') {
+					setAlignment(MigRowInfo.Alignment.TOP);
+				} else if (c == 'm' || c == 'M' || c == 'c' || c == 'C') {
+					setAlignment(MigRowInfo.Alignment.CENTER);
+				} else if (c == 'b') {
+					setAlignment(MigRowInfo.Alignment.BOTTOM);
+				} else if (c == 'f' || c == 'F') {
+					setAlignment(MigRowInfo.Alignment.FILL);
+				} else if (c == 'a') {
+					setAlignment(MigRowInfo.Alignment.BASELINE);
+				}
+			}
+		}
+	}
 
-  /**
-   * Sets the alignment for {@link MigRowInfo}.
-   */
-  private void setAlignment(final MigRowInfo.Alignment alignment) {
-    final MigLayoutInfo layout = getLayout();
-    ExecutionUtils.run(layout, new RunnableEx() {
-      public void run() throws Exception {
-        getDimension().setAlignment(alignment);
-        layout.writeDimensions();
-      }
-    });
-  }
+	/**
+	 * Sets the alignment for {@link MigRowInfo}.
+	 */
+	private void setAlignment(final MigRowInfo.Alignment alignment) {
+		final MigLayoutInfo layout = getLayout();
+		ExecutionUtils.run(layout, new RunnableEx() {
+			public void run() throws Exception {
+				getDimension().setAlignment(alignment);
+				layout.writeDimensions();
+			}
+		});
+	}
 }
diff --git a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/CellConstraintsSupport.java b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/CellConstraintsSupport.java
index 0041e94d2..91819ef8d 100644
--- a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/CellConstraintsSupport.java
+++ b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/CellConstraintsSupport.java
@@ -59,929 +59,929 @@
  * @coverage swing.MigLayout.model
  */
 public final class CellConstraintsSupport {
-  private final CellConstraintsSupport m_this = this;
-  private final MigLayoutInfo m_layout;
-  private final ComponentInfo m_component;
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constraints values
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private boolean m_dirty;
-  private int x;
-  private int y;
-  private int width;
-  private int height;
-  private CC cc;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  CellConstraintsSupport(MigLayoutInfo layoutInfo, ComponentInfo componentInfo) {
-    m_layout = layoutInfo;
-    m_component = componentInfo;
-    // fetch values
-    Container container = m_layout.getContainer().getContainer();
-    if (m_layout.getObject() != null
-        && m_component.getComponent() != null
-        && m_component.getComponent().getParent() == container) {
-      MigLayout layout = (MigLayout) layoutInfo.getObject();
-      Component component = componentInfo.getComponent();
-      // prepare CC
-      {
-        Object constraints = layout.getComponentConstraints(component);
-        if (constraints instanceof CC) {
-          cc = (CC) constraints;
-        } else if (constraints instanceof String) {
-          cc = ConstraintParser.parseComponentConstraint((String) constraints);
-        } else {
-          cc = new CC();
-        }
-      }
-      // prepare cell
-      {
-        int[] gridPosition = IDEUtil.getGridPositions(container).get(component);
-        if (gridPosition != null) {
-          x = gridPosition[0];
-          y = gridPosition[1];
-          width = gridPosition[2];
-          height = gridPosition[3];
-          // tweaks for span
-          if (width == 30000 - x) {
-            int columnCount = IDEUtil.getColumnSizes(container)[0].length;
-            width = columnCount - x;
-          }
-        } else {
-          x = 0;
-          y = 0;
-          width = 0;
-          height = 0;
-        }
-      }
-    } else {
-      cc = new CC();
-      x = 0;
-      y = 0;
-      width = 1;
-      height = 1;
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link ComponentInfo} which uses this {@link CellConstraintsSupport}.
-   */
-  public ComponentInfo getComponent() {
-    return m_component;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Bounds
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * AFAIK in {@link MigLayout} using explicit <code>cell</code> is not best usage pattern,
-   * components usually are just added consecutive, may be with <code>skip</code> and
-   * <code>wrap</code> tags. But when we perform some grid-based operations, we should make bounds
-   * explicit, to avoid analyzing all components, how change in one will change all other.
-   */
-  public void makeExplicitCell() {
-    // ignore docked
-    if (getDockSide() != null) {
-      return;
-    }
-    // operations
-    if (cc.getSplit() != 1) {
-      cc.setSplit(1);
-      m_dirty = true;
-    }
-    if (cc.isWrap()) {
-      cc.setWrap(false);
-      m_dirty = true;
-    }
-    if (cc.isNewline()) {
-      cc.setNewline(false);
-      m_dirty = true;
-    }
-    if (cc.getSkip() != 0) {
-      cc.setSkip(0);
-      m_dirty = true;
-    }
-    // bounds
-    setX(x);
-    setY(y);
-    setWidth(width);
-    setHeight(height);
-  }
-
-  /**
-   * @return the <code>X</code> location in grid.
-   */
-  public int getX() {
-    return x;
-  }
-
-  /**
-   * Sets the <code>X</code> location in grid.
-   */
-  public void setX(int x) {
-    this.x = x;
-    if (cc.getCellX() != x) {
-      cc.setCellX(x);
-      m_dirty = true;
-    }
-  }
-
-  /**
-   * Changes <b>X</b> on given delta.
-   */
-  public void updateX(int delta) {
-    setX(getX() + delta);
-  }
-
-  /**
-   * @return the <code>Y</code> location in grid.
-   */
-  public int getY() {
-    return y;
-  }
-
-  /**
-   * Sets the <code>Y</code> location in grid.
-   */
-  public void setY(int y) {
-    this.y = y;
-    if (cc.getCellY() != y) {
-      cc.setCellY(y);
-      m_dirty = true;
-    }
-  }
-
-  /**
-   * Changes <b>Y</b> on given delta.
-   */
-  public void updateY(int delta) {
-    setY(getY() + delta);
-  }
-
-  /**
-   * @return the <code>width</code> in cells.
-   */
-  public int getWidth() {
-    return width;
-  }
-
-  /**
-   * Sets the <code>width</code> in cells.
-   */
-  public void setWidth(int width) {
-    this.width = width;
-    if (cc.getSpanX() != width) {
-      cc.setSpanX(width);
-      m_dirty = true;
-    }
-  }
-
-  /**
-   * Changes <b>width</b> on given delta.
-   */
-  public void updateWidth(int delta) {
-    setWidth(getWidth() + delta);
-  }
-
-  /**
-   * @return the <code>height</code> in cells.
-   */
-  public int getHeight() {
-    return height;
-  }
-
-  /**
-   * Sets the <code>height</code> in cells.
-   */
-  public void setHeight(int height) {
-    this.height = height;
-    if (cc.getSpanY() != height) {
-      cc.setSpanY(height);
-      m_dirty = true;
-    }
-  }
-
-  /**
-   * Changes <b>height</b> on given delta.
-   */
-  public void updateHeight(int delta) {
-    setHeight(getHeight() + delta);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Alignment
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the horizontal alignment.
-   */
-  public MigColumnInfo.Alignment getHorizontalAlignment() {
-    DimConstraint constraint = cc.getDimConstraint(true);
-    return MigColumnInfo.getAlignment(constraint, false, false);
-  }
-
-  /**
-   * Sets the horizontal alignment.
-   */
-  public void setHorizontalAlignment(MigColumnInfo.Alignment alignment) {
-    DimConstraint constraint = cc.getDimConstraint(true);
-    MigColumnInfo.setAlignment(constraint, alignment, false);
-    m_dirty = true;
-  }
-
-  /**
-   * @return the vertical alignment.
-   */
-  public MigRowInfo.Alignment getVerticalAlignment() {
-    DimConstraint constraint = cc.getDimConstraint(false);
-    return MigRowInfo.getAlignment(constraint, false, false);
-  }
-
-  /**
-   * Sets the vertical alignment.
-   */
-  public void setVerticalAlignment(MigRowInfo.Alignment alignment) {
-    DimConstraint constraint = cc.getDimConstraint(false);
-    MigRowInfo.setAlignment(constraint, alignment, false);
-    m_dirty = true;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Dock
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public enum DockSide {
-    NORTH, WEST, SOUTH, EAST
-  }
-
-  /**
-   * @return the {@link DockSide} for docked component, may be <code>null</code> if component is not
-   *         docked.
-   */
-  public DockSide getDockSide() {
-    switch (cc.getDockSide()) {
-      case 0 :
-        return DockSide.NORTH;
-      case 1 :
-        return DockSide.WEST;
-      case 2 :
-        return DockSide.SOUTH;
-      case 3 :
-        return DockSide.EAST;
-    }
-    return null;
-  }
-
-  /**
-   * Sets {@link DockSide} as enum.
-   *
-   * @param side
-   *          the {@link DockSide}, may be <code>null</code> if docking should be removed.
-   */
-  public void setDockSide(DockSide side) {
-    m_dirty = true;
-    // no dock
-    if (side == null) {
-      cc.setDockSide(-1);
-      return;
-    }
-    // some dock side
-    switch (side) {
-      case NORTH :
-        cc.setDockSide(0);
-        break;
-      case WEST :
-        cc.setDockSide(1);
-        break;
-      case SOUTH :
-        cc.setDockSide(2);
-        break;
-      case EAST :
-        cc.setDockSide(3);
-        break;
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Split
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if this is first component in splitted cell and this cell has
-   *         horizontal flow. Note: only for first component in splitted cell.
-   */
-  public boolean isHorizontalSplit() {
-    Boolean flowX = cc.getFlowX();
-    if (flowX != null) {
-      return flowX.booleanValue();
-    } else {
-      return m_layout.getLC().isFlowX();
-    }
-  }
-
-  /**
-   * Specifies if split of this this component should be: horizontal, vertical or none.
-   *
-   * @param horizontal
-   *          is <code>true</code>, <code>false</code> or <code>null</code>.
-   */
-  public void setHorizontalSplit(Boolean horizontal) {
-    cc.setFlowX(horizontal);
-    m_dirty = true;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // String
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the string presentation of this {@link CC}.
-   */
-  public final String getString() {
-    return IDEUtil.getConstraintString(cc, false);
-  }
-
-  /**
-   * Sets the string for this {@link CC}.
-   */
-  public final void setString(String s) {
-    s = s.toLowerCase().trim();
-    cc = ConstraintParser.parseComponentConstraint(s);
-    m_dirty = true;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Write
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Writes current values as constraints in component association using
-   * {@link Container#add(Component, Object)}.
-   */
-  public void write() throws Exception {
-    // check if write required
-    if (m_dirty) {
-      write0();
-      m_dirty = false;
-    }
-  }
-
-  /**
-   * Implementation of {@link #write()}.
-   */
-  public void write0() throws Exception {
-    String constraintsString = IDEUtil.getConstraintString(cc, false);
-    constraintsString = cleanUpSource(constraintsString);
-    // update association constraints
-    if (m_component.getAssociation() instanceof InvocationChildAssociation) {
-      InvocationChildAssociation association =
-          (InvocationChildAssociation) m_component.getAssociation();
-      MethodInvocation invocation = association.getInvocation();
-      String signature = AstNodeUtils.getMethodSignature(invocation);
-      String constraintsSource = StringConverter.INSTANCE.toJavaSource(null, constraintsString);
-      if (signature.equals("add(java.awt.Component,java.lang.Object)")) {
-        Expression constraintsExpression = (Expression) invocation.arguments().get(1);
-        m_layout.getEditor().replaceExpression(constraintsExpression, constraintsSource);
-      } else if (signature.equals("add(java.awt.Component)")) {
-        m_layout.getEditor().addInvocationArgument(invocation, 1, constraintsSource);
-      }
-    }
-  }
-
-  /**
-   * Currently {@link IDEUtil} generates sometimes not ideal source. I've asked Mikael to fix this,
-   * but right we clean up several cases manually.
-   */
-  private static String cleanUpSource(String source) {
-    source = cleanUpSource_secondGap(source, "gapx", "gapright ");
-    source = cleanUpSource_secondGap(source, "gapy", "gapbottom ");
-    // bug in 3.7.4
-    if (source.contains("hideMode")) {
-      source = StringUtils.replace(source, "hideMode", "hidemode");
-    }
-    // done
-    return source;
-  }
-
-  /**
-   * "gapx null value" -> "gapright value"
-   */
-  private static String cleanUpSource_secondGap(String source, String sourceName, String targetName) {
-    Pattern pattern = Pattern.compile(sourceName + " null (\\w+)(\\,|\\z)");
-    Matcher matcher = pattern.matcher(source);
-    if (matcher.find()) {
-      String actualGap = matcher.group(1);
-      String optionalComma = matcher.group().endsWith(",") ? "," : "";
-      source =
-          source.substring(0, matcher.start())
-              + targetName
-              + actualGap
-              + optionalComma
-              + source.substring(matcher.end());
-    }
-    return source;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Properties
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private ComplexProperty m_complexProperty;
-
-  /**
-   * @return the {@link Property} with given title.
-   */
-  public Property getPropertyByTitle(String title) throws Exception {
-    for (Property property : getCellProperty().getProperties()) {
-      if (property.getTitle().equals(title)) {
-        return property;
-      }
-    }
-    return null;
-  }
-
-  /**
-   * @return the {@link ComplexProperty} for this {@link CellConstraintsSupport}.
-   */
-  public ComplexProperty getCellProperty() throws Exception {
-    if (m_complexProperty == null) {
-      m_complexProperty = new ComplexProperty("Constraints", null);
-      m_complexProperty.setCategory(PropertyCategory.system(6));
-      m_complexProperty.setEditorPresentation(new ButtonPropertyEditorPresentation() {
-        @Override
-        protected void onClick(PropertyTable propertyTable, Property property) throws Exception {
-          new CellEditDialog(propertyTable.getShell(), m_layout, m_this).open();
-        }
-      });
-      // grid properties
-      Property xProperty = new IntegerCellProperty("grid x", "getX()", "setX(int)") {
-        @Override
-        public boolean isModified() throws Exception {
-          return true;
-        }
-
-        @Override
-        protected String validate(int value) {
-          int columns = m_layout.getColumns().size();
-          if (0 <= value && value + width <= columns) {
-            return null;
-          }
-          return MessageFormat.format(
-              ModelMessages.CellConstraintsSupport_gridX_outOfRange,
-              value,
-              (columns - width));
-        }
-      };
-      Property wProperty = new IntegerCellProperty("grid width", "getWidth()", "setWidth(int)") {
-        @Override
-        public boolean isModified() throws Exception {
-          return width != 1;
-        }
-
-        @Override
-        protected Object getDefaultValue() {
-          return 1;
-        }
-
-        @Override
-        protected String validate(int value) {
-          int columns = m_layout.getColumns().size();
-          if (1 <= value && x + value <= columns) {
-            return null;
-          }
-          return MessageFormat.format(
-              ModelMessages.CellConstraintsSupport_gridWidth_outOfRange,
-              value,
-              (columns - x));
-        }
-      };
-      Property yProperty = new IntegerCellProperty("grid y", "getY()", "setY(int)") {
-        @Override
-        public boolean isModified() throws Exception {
-          return true;
-        }
-
-        @Override
-        protected String validate(int value) {
-          int rows = m_layout.getRows().size();
-          if (0 <= value && value + height <= rows) {
-            return null;
-          }
-          return MessageFormat.format(
-              ModelMessages.CellConstraintsSupport_gridY_outOfRange,
-              value,
-              (rows - y - 1));
-        }
-      };
-      Property hProperty = new IntegerCellProperty("grid height", "getHeight()", "setHeight(int)") {
-        @Override
-        public boolean isModified() throws Exception {
-          return height != 1;
-        }
-
-        @Override
-        protected Object getDefaultValue() {
-          return 1;
-        }
-
-        @Override
-        protected String validate(int value) {
-          int rows = m_layout.getRows().size();
-          if (1 <= value && y + value <= rows) {
-            return null;
-          }
-          return MessageFormat.format(
-              ModelMessages.CellConstraintsSupport_gridHeight_outOfRange,
-              value,
-              (rows - y));
-        }
-      };
-      // set sub-properties
-      m_complexProperty.setProperties(new Property[]{
-          xProperty,
-          yProperty,
-          wProperty,
-          hProperty,
-          getHorizontalAlignmentProperty(),
-          getVerticalAlignmentProperty()});
-    }
-    //
-    m_complexProperty.setText(IDEUtil.getConstraintString(cc, false));
-    return m_complexProperty;
-  }
-
-  private Property getHorizontalAlignmentProperty() throws Exception {
-    return new AlignmentCellProperty<MigColumnInfo.Alignment>("h alignment",
-        "getHorizontalAlignment()",
-        "setHorizontalAlignment(org.eclipse.wb.internal.swing.MigLayout.model.MigColumnInfo.Alignment)",
-        MigColumnInfo.ALIGNMENTS_TO_SET,
-        MigColumnInfo.Alignment.DEFAULT);
-  }
-
-  private Property getVerticalAlignmentProperty() throws Exception {
-    return new AlignmentCellProperty<MigRowInfo.Alignment>("v alignment",
-        "getVerticalAlignment()",
-        "setVerticalAlignment(org.eclipse.wb.internal.swing.MigLayout.model.MigRowInfo.Alignment)",
-        MigRowInfo.ALIGNMENTS_TO_SET,
-        MigRowInfo.Alignment.DEFAULT);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AbstractCellProperty
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Abstract implementation of {@link Property} for {@link CellConstraintsSupport}.
-   *
-   * @author scheglov_ke
-   */
-  private abstract class AbstractCellProperty extends Property {
-    private final String m_title;
-    protected final String m_getterSignature;
-    protected final String m_setterSignature;
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public AbstractCellProperty(String title,
-        String getterSignature,
-        String setterSignature,
-        PropertyEditor propertyEditor) throws Exception {
-      super(propertyEditor);
-      m_title = title;
-      m_getterSignature = getterSignature;
-      m_setterSignature = setterSignature;
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Property
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public final String getTitle() {
-      return m_title;
-    }
-
-    @Override
-    public final void setValue(Object value) throws Exception {
-      // try to replace unknown value with some default value
-      if (value == UNKNOWN_VALUE) {
-        value = getDefaultValue();
-      }
-      // set known value
-      if (value != UNKNOWN_VALUE) {
-        // validate
-        {
-          String errorMessage = validate(value);
-          if (errorMessage != null) {
-            UiUtils.openWarning(DesignerPlugin.getShell(), getTitle(), errorMessage);
-            return;
-          }
-        }
-        // do modification
-        doSetValue(value);
-      }
-    }
-
-    private void doSetValue(final Object value) {
-      ExecutionUtils.run(m_layout, new RunnableEx() {
-        public void run() throws Exception {
-          ReflectionUtils.invokeMethod(m_this, m_setterSignature, value);
-          write();
-        }
-      });
-    }
-
-    /**
-     * @return the default property value.
-     */
-    protected Object getDefaultValue() {
-      return UNKNOWN_VALUE;
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Value
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public Object getValue() throws Exception {
-      return ReflectionUtils.invokeMethod(m_this, m_getterSignature);
-    }
-
-    /**
-     * @return <code>null</code> if given value is valid and can be set, or return some
-     *         {@link String} with error message.
-     */
-    protected abstract String validate(Object value) throws Exception;
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IntegerCellProperty
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Implementation of {@link Property} for integer fields of {@link CellConstraintsSupport}.
-   *
-   * @author scheglov_ke
-   */
-  private abstract class IntegerCellProperty extends AbstractCellProperty {
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public IntegerCellProperty(String title, String getterSignature, String setterSignature)
-        throws Exception {
-      super(title, getterSignature, setterSignature, IntegerPropertyEditor.INSTANCE);
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Value
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    protected final String validate(Object value) throws Exception {
-      if (!(value instanceof Integer)) {
-        return ModelMessages.CellConstraintsSupport_integerValueExpected;
-      }
-      int intValue = ((Integer) value).intValue();
-      return validate(intValue);
-    }
-
-    /**
-     * @return <code>true</code> if given value is valid for this property. For example we should
-     *         not allow to set width outside of number of existing columns.
-     */
-    protected abstract String validate(int value);
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AlignmentCellProperty
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Implementation of {@link Property} for alignment fields of {@link CellConstraintsSupport}.
-   *
-   * @author scheglov_ke
-   */
-  private final class AlignmentCellProperty<A extends Enum<?>> extends AbstractCellProperty {
-    private final A m_defaultValue;
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public AlignmentCellProperty(String title,
-        String getterSignature,
-        String setterSignature,
-        A[] alignments,
-        A defaultValue) throws Exception {
-      super(title, getterSignature, setterSignature, new EnumCustomPropertyEditor());
-      EnumCustomPropertyEditor editor = (EnumCustomPropertyEditor) getEditor();
-      editor.configure(alignments);
-      m_defaultValue = defaultValue;
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Value
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public final boolean isModified() throws Exception {
-      return getValue() != m_defaultValue;
-    }
-
-    @Override
-    protected Object getDefaultValue() {
-      return m_defaultValue;
-    }
-
-    @Override
-    protected String validate(Object value) throws Exception {
-      return null;
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Images
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the small {@link Image} that represents horizontal/vertical alignment.
-   */
-  public Image getSmallAlignmentImage(boolean horizontal) {
-    if (horizontal) {
-      return getHorizontalAlignment().getSmallImage();
-    } else {
-      return getVerticalAlignment().getSmallImage();
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Context menu
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds items to the context {@link IMenuManager}.
-   */
-  public void addContextMenu(IMenuManager manager) throws Exception {
-    manager.appendToGroup(IContextMenuConstants.GROUP_TOP, new Action("Constraints...") {
-      @Override
-      public void run() {
-        new CellEditDialog(DesignerPlugin.getShell(), m_layout, m_this).open();
-      }
-    });
-    // horizontal
-    {
-      IMenuManager manager2 =
-          new MenuManager(ModelMessages.CellConstraintsSupport_horizontalAlignment);
-      manager.appendToGroup(IContextMenuConstants.GROUP_TOP, manager2);
-      fillHorizontalAlignmentMenu(manager2);
-    }
-    // vertical
-    {
-      IMenuManager manager2 =
-          new MenuManager(ModelMessages.CellConstraintsSupport_verticalAlignment);
-      manager.appendToGroup(IContextMenuConstants.GROUP_TOP, manager2);
-      fillVerticalAlignmentMenu(manager2);
-    }
-  }
-
-  /**
-   * Adds the horizontal alignment {@link Action}'s.
-   */
-  public void fillHorizontalAlignmentMenu(IMenuManager manager) {
-    manager.add(new SetHorizontalAlignmentAction(ModelMessages.CellConstraintsSupport_horizontalAlignment_default,
-        MigColumnInfo.Alignment.DEFAULT));
-    manager.add(new SetHorizontalAlignmentAction(ModelMessages.CellConstraintsSupport_horizontalAlignment_left,
-        MigColumnInfo.Alignment.LEFT));
-    manager.add(new SetHorizontalAlignmentAction(ModelMessages.CellConstraintsSupport_horizontalAlignment_center,
-        MigColumnInfo.Alignment.CENTER));
-    manager.add(new SetHorizontalAlignmentAction(ModelMessages.CellConstraintsSupport_horizontalAlignment_right,
-        MigColumnInfo.Alignment.RIGHT));
-    manager.add(new SetHorizontalAlignmentAction(ModelMessages.CellConstraintsSupport_horizontalAlignment_fill,
-        MigColumnInfo.Alignment.FILL));
-    manager.add(new SetHorizontalAlignmentAction(ModelMessages.CellConstraintsSupport_horizontalAlignment_leading,
-        MigColumnInfo.Alignment.LEADING));
-    manager.add(new SetHorizontalAlignmentAction(ModelMessages.CellConstraintsSupport_horizontalAlignment_trailing,
-        MigColumnInfo.Alignment.TRAILING));
-  }
-
-  /**
-   * Adds the vertical alignment {@link Action}'s.
-   */
-  public void fillVerticalAlignmentMenu(IMenuManager manager2) {
-    manager2.add(new SetVerticalAlignmentAction(ModelMessages.CellConstraintsSupport_verticalAlignment_default,
-        MigRowInfo.Alignment.DEFAULT));
-    manager2.add(new SetVerticalAlignmentAction(ModelMessages.CellConstraintsSupport_verticalAlignment_top,
-        MigRowInfo.Alignment.TOP));
-    manager2.add(new SetVerticalAlignmentAction(ModelMessages.CellConstraintsSupport_verticalAlignment_center,
-        MigRowInfo.Alignment.CENTER));
-    manager2.add(new SetVerticalAlignmentAction(ModelMessages.CellConstraintsSupport_verticalAlignment_bottom,
-        MigRowInfo.Alignment.BOTTOM));
-    manager2.add(new SetVerticalAlignmentAction(ModelMessages.CellConstraintsSupport_verticalAlignment_fill,
-        MigRowInfo.Alignment.FILL));
-    manager2.add(new SetVerticalAlignmentAction(ModelMessages.CellConstraintsSupport_verticalAlignment_baseline,
-        MigRowInfo.Alignment.BASELINE));
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // SetHorizontalAlignmentAction
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * {@link Action} for modifying horizontal alignment.
-   */
-  private class SetHorizontalAlignmentAction extends ObjectInfoAction {
-    private final MigColumnInfo.Alignment m_alignment;
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public SetHorizontalAlignmentAction(String text, MigColumnInfo.Alignment alignment) {
-      super(m_layout, text, AS_RADIO_BUTTON);
-      m_alignment = alignment;
-      setImageDescriptor(alignment.getMenuImage());
-      // set check for current alignment
-      setChecked(getHorizontalAlignment() == m_alignment);
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Run
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    protected void runEx() throws Exception {
-      setHorizontalAlignment(m_alignment);
-      write();
-    }
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // SetVerticalAlignmentAction
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * {@link Action} for modifying vertical alignment.
-   */
-  private class SetVerticalAlignmentAction extends ObjectInfoAction {
-    private final MigRowInfo.Alignment m_alignment;
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public SetVerticalAlignmentAction(String text, MigRowInfo.Alignment alignment) {
-      super(m_layout, text, AS_RADIO_BUTTON);
-      m_alignment = alignment;
-      setImageDescriptor(alignment.getMenuImage());
-      // set check for current alignment
-      setChecked(getVerticalAlignment() == m_alignment);
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Run
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    protected void runEx() throws Exception {
-      setVerticalAlignment(m_alignment);
-      write();
-    }
-  }
+	private final CellConstraintsSupport m_this = this;
+	private final MigLayoutInfo m_layout;
+	private final ComponentInfo m_component;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constraints values
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private boolean m_dirty;
+	private int x;
+	private int y;
+	private int width;
+	private int height;
+	private CC cc;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	CellConstraintsSupport(MigLayoutInfo layoutInfo, ComponentInfo componentInfo) {
+		m_layout = layoutInfo;
+		m_component = componentInfo;
+		// fetch values
+		Container container = m_layout.getContainer().getContainer();
+		if (m_layout.getObject() != null
+				&& m_component.getComponent() != null
+				&& m_component.getComponent().getParent() == container) {
+			MigLayout layout = (MigLayout) layoutInfo.getObject();
+			Component component = componentInfo.getComponent();
+			// prepare CC
+			{
+				Object constraints = layout.getComponentConstraints(component);
+				if (constraints instanceof CC) {
+					cc = (CC) constraints;
+				} else if (constraints instanceof String) {
+					cc = ConstraintParser.parseComponentConstraint((String) constraints);
+				} else {
+					cc = new CC();
+				}
+			}
+			// prepare cell
+			{
+				int[] gridPosition = IDEUtil.getGridPositions(container).get(component);
+				if (gridPosition != null) {
+					x = gridPosition[0];
+					y = gridPosition[1];
+					width = gridPosition[2];
+					height = gridPosition[3];
+					// tweaks for span
+					if (width == 30000 - x) {
+						int columnCount = IDEUtil.getColumnSizes(container)[0].length;
+						width = columnCount - x;
+					}
+				} else {
+					x = 0;
+					y = 0;
+					width = 0;
+					height = 0;
+				}
+			}
+		} else {
+			cc = new CC();
+			x = 0;
+			y = 0;
+			width = 1;
+			height = 1;
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link ComponentInfo} which uses this {@link CellConstraintsSupport}.
+	 */
+	public ComponentInfo getComponent() {
+		return m_component;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Bounds
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * AFAIK in {@link MigLayout} using explicit <code>cell</code> is not best usage pattern,
+	 * components usually are just added consecutive, may be with <code>skip</code> and
+	 * <code>wrap</code> tags. But when we perform some grid-based operations, we should make bounds
+	 * explicit, to avoid analyzing all components, how change in one will change all other.
+	 */
+	public void makeExplicitCell() {
+		// ignore docked
+		if (getDockSide() != null) {
+			return;
+		}
+		// operations
+		if (cc.getSplit() != 1) {
+			cc.setSplit(1);
+			m_dirty = true;
+		}
+		if (cc.isWrap()) {
+			cc.setWrap(false);
+			m_dirty = true;
+		}
+		if (cc.isNewline()) {
+			cc.setNewline(false);
+			m_dirty = true;
+		}
+		if (cc.getSkip() != 0) {
+			cc.setSkip(0);
+			m_dirty = true;
+		}
+		// bounds
+		setX(x);
+		setY(y);
+		setWidth(width);
+		setHeight(height);
+	}
+
+	/**
+	 * @return the <code>X</code> location in grid.
+	 */
+	public int getX() {
+		return x;
+	}
+
+	/**
+	 * Sets the <code>X</code> location in grid.
+	 */
+	public void setX(int x) {
+		this.x = x;
+		if (cc.getCellX() != x) {
+			cc.setCellX(x);
+			m_dirty = true;
+		}
+	}
+
+	/**
+	 * Changes <b>X</b> on given delta.
+	 */
+	public void updateX(int delta) {
+		setX(getX() + delta);
+	}
+
+	/**
+	 * @return the <code>Y</code> location in grid.
+	 */
+	public int getY() {
+		return y;
+	}
+
+	/**
+	 * Sets the <code>Y</code> location in grid.
+	 */
+	public void setY(int y) {
+		this.y = y;
+		if (cc.getCellY() != y) {
+			cc.setCellY(y);
+			m_dirty = true;
+		}
+	}
+
+	/**
+	 * Changes <b>Y</b> on given delta.
+	 */
+	public void updateY(int delta) {
+		setY(getY() + delta);
+	}
+
+	/**
+	 * @return the <code>width</code> in cells.
+	 */
+	public int getWidth() {
+		return width;
+	}
+
+	/**
+	 * Sets the <code>width</code> in cells.
+	 */
+	public void setWidth(int width) {
+		this.width = width;
+		if (cc.getSpanX() != width) {
+			cc.setSpanX(width);
+			m_dirty = true;
+		}
+	}
+
+	/**
+	 * Changes <b>width</b> on given delta.
+	 */
+	public void updateWidth(int delta) {
+		setWidth(getWidth() + delta);
+	}
+
+	/**
+	 * @return the <code>height</code> in cells.
+	 */
+	public int getHeight() {
+		return height;
+	}
+
+	/**
+	 * Sets the <code>height</code> in cells.
+	 */
+	public void setHeight(int height) {
+		this.height = height;
+		if (cc.getSpanY() != height) {
+			cc.setSpanY(height);
+			m_dirty = true;
+		}
+	}
+
+	/**
+	 * Changes <b>height</b> on given delta.
+	 */
+	public void updateHeight(int delta) {
+		setHeight(getHeight() + delta);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Alignment
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the horizontal alignment.
+	 */
+	public MigColumnInfo.Alignment getHorizontalAlignment() {
+		DimConstraint constraint = cc.getDimConstraint(true);
+		return MigColumnInfo.getAlignment(constraint, false, false);
+	}
+
+	/**
+	 * Sets the horizontal alignment.
+	 */
+	public void setHorizontalAlignment(MigColumnInfo.Alignment alignment) {
+		DimConstraint constraint = cc.getDimConstraint(true);
+		MigColumnInfo.setAlignment(constraint, alignment, false);
+		m_dirty = true;
+	}
+
+	/**
+	 * @return the vertical alignment.
+	 */
+	public MigRowInfo.Alignment getVerticalAlignment() {
+		DimConstraint constraint = cc.getDimConstraint(false);
+		return MigRowInfo.getAlignment(constraint, false, false);
+	}
+
+	/**
+	 * Sets the vertical alignment.
+	 */
+	public void setVerticalAlignment(MigRowInfo.Alignment alignment) {
+		DimConstraint constraint = cc.getDimConstraint(false);
+		MigRowInfo.setAlignment(constraint, alignment, false);
+		m_dirty = true;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Dock
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public enum DockSide {
+		NORTH, WEST, SOUTH, EAST
+	}
+
+	/**
+	 * @return the {@link DockSide} for docked component, may be <code>null</code> if component is not
+	 *         docked.
+	 */
+	public DockSide getDockSide() {
+		switch (cc.getDockSide()) {
+		case 0 :
+			return DockSide.NORTH;
+		case 1 :
+			return DockSide.WEST;
+		case 2 :
+			return DockSide.SOUTH;
+		case 3 :
+			return DockSide.EAST;
+		}
+		return null;
+	}
+
+	/**
+	 * Sets {@link DockSide} as enum.
+	 *
+	 * @param side
+	 *          the {@link DockSide}, may be <code>null</code> if docking should be removed.
+	 */
+	public void setDockSide(DockSide side) {
+		m_dirty = true;
+		// no dock
+		if (side == null) {
+			cc.setDockSide(-1);
+			return;
+		}
+		// some dock side
+		switch (side) {
+		case NORTH :
+			cc.setDockSide(0);
+			break;
+		case WEST :
+			cc.setDockSide(1);
+			break;
+		case SOUTH :
+			cc.setDockSide(2);
+			break;
+		case EAST :
+			cc.setDockSide(3);
+			break;
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Split
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if this is first component in splitted cell and this cell has
+	 *         horizontal flow. Note: only for first component in splitted cell.
+	 */
+	public boolean isHorizontalSplit() {
+		Boolean flowX = cc.getFlowX();
+		if (flowX != null) {
+			return flowX.booleanValue();
+		} else {
+			return m_layout.getLC().isFlowX();
+		}
+	}
+
+	/**
+	 * Specifies if split of this this component should be: horizontal, vertical or none.
+	 *
+	 * @param horizontal
+	 *          is <code>true</code>, <code>false</code> or <code>null</code>.
+	 */
+	public void setHorizontalSplit(Boolean horizontal) {
+		cc.setFlowX(horizontal);
+		m_dirty = true;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// String
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the string presentation of this {@link CC}.
+	 */
+	public final String getString() {
+		return IDEUtil.getConstraintString(cc, false);
+	}
+
+	/**
+	 * Sets the string for this {@link CC}.
+	 */
+	public final void setString(String s) {
+		s = s.toLowerCase().trim();
+		cc = ConstraintParser.parseComponentConstraint(s);
+		m_dirty = true;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Write
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Writes current values as constraints in component association using
+	 * {@link Container#add(Component, Object)}.
+	 */
+	public void write() throws Exception {
+		// check if write required
+		if (m_dirty) {
+			write0();
+			m_dirty = false;
+		}
+	}
+
+	/**
+	 * Implementation of {@link #write()}.
+	 */
+	public void write0() throws Exception {
+		String constraintsString = IDEUtil.getConstraintString(cc, false);
+		constraintsString = cleanUpSource(constraintsString);
+		// update association constraints
+		if (m_component.getAssociation() instanceof InvocationChildAssociation) {
+			InvocationChildAssociation association =
+					(InvocationChildAssociation) m_component.getAssociation();
+			MethodInvocation invocation = association.getInvocation();
+			String signature = AstNodeUtils.getMethodSignature(invocation);
+			String constraintsSource = StringConverter.INSTANCE.toJavaSource(null, constraintsString);
+			if (signature.equals("add(java.awt.Component,java.lang.Object)")) {
+				Expression constraintsExpression = (Expression) invocation.arguments().get(1);
+				m_layout.getEditor().replaceExpression(constraintsExpression, constraintsSource);
+			} else if (signature.equals("add(java.awt.Component)")) {
+				m_layout.getEditor().addInvocationArgument(invocation, 1, constraintsSource);
+			}
+		}
+	}
+
+	/**
+	 * Currently {@link IDEUtil} generates sometimes not ideal source. I've asked Mikael to fix this,
+	 * but right we clean up several cases manually.
+	 */
+	private static String cleanUpSource(String source) {
+		source = cleanUpSource_secondGap(source, "gapx", "gapright ");
+		source = cleanUpSource_secondGap(source, "gapy", "gapbottom ");
+		// bug in 3.7.4
+		if (source.contains("hideMode")) {
+			source = StringUtils.replace(source, "hideMode", "hidemode");
+		}
+		// done
+		return source;
+	}
+
+	/**
+	 * "gapx null value" -> "gapright value"
+	 */
+	private static String cleanUpSource_secondGap(String source, String sourceName, String targetName) {
+		Pattern pattern = Pattern.compile(sourceName + " null (\\w+)(\\,|\\z)");
+		Matcher matcher = pattern.matcher(source);
+		if (matcher.find()) {
+			String actualGap = matcher.group(1);
+			String optionalComma = matcher.group().endsWith(",") ? "," : "";
+			source =
+					source.substring(0, matcher.start())
+					+ targetName
+					+ actualGap
+					+ optionalComma
+					+ source.substring(matcher.end());
+		}
+		return source;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Properties
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private ComplexProperty m_complexProperty;
+
+	/**
+	 * @return the {@link Property} with given title.
+	 */
+	public Property getPropertyByTitle(String title) throws Exception {
+		for (Property property : getCellProperty().getProperties()) {
+			if (property.getTitle().equals(title)) {
+				return property;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * @return the {@link ComplexProperty} for this {@link CellConstraintsSupport}.
+	 */
+	public ComplexProperty getCellProperty() throws Exception {
+		if (m_complexProperty == null) {
+			m_complexProperty = new ComplexProperty("Constraints", null);
+			m_complexProperty.setCategory(PropertyCategory.system(6));
+			m_complexProperty.setEditorPresentation(new ButtonPropertyEditorPresentation() {
+				@Override
+				protected void onClick(PropertyTable propertyTable, Property property) throws Exception {
+					new CellEditDialog(propertyTable.getShell(), m_layout, m_this).open();
+				}
+			});
+			// grid properties
+			Property xProperty = new IntegerCellProperty("grid x", "getX()", "setX(int)") {
+				@Override
+				public boolean isModified() throws Exception {
+					return true;
+				}
+
+				@Override
+				protected String validate(int value) {
+					int columns = m_layout.getColumns().size();
+					if (0 <= value && value + width <= columns) {
+						return null;
+					}
+					return MessageFormat.format(
+							ModelMessages.CellConstraintsSupport_gridX_outOfRange,
+							value,
+							(columns - width));
+				}
+			};
+			Property wProperty = new IntegerCellProperty("grid width", "getWidth()", "setWidth(int)") {
+				@Override
+				public boolean isModified() throws Exception {
+					return width != 1;
+				}
+
+				@Override
+				protected Object getDefaultValue() {
+					return 1;
+				}
+
+				@Override
+				protected String validate(int value) {
+					int columns = m_layout.getColumns().size();
+					if (1 <= value && x + value <= columns) {
+						return null;
+					}
+					return MessageFormat.format(
+							ModelMessages.CellConstraintsSupport_gridWidth_outOfRange,
+							value,
+							(columns - x));
+				}
+			};
+			Property yProperty = new IntegerCellProperty("grid y", "getY()", "setY(int)") {
+				@Override
+				public boolean isModified() throws Exception {
+					return true;
+				}
+
+				@Override
+				protected String validate(int value) {
+					int rows = m_layout.getRows().size();
+					if (0 <= value && value + height <= rows) {
+						return null;
+					}
+					return MessageFormat.format(
+							ModelMessages.CellConstraintsSupport_gridY_outOfRange,
+							value,
+							(rows - y - 1));
+				}
+			};
+			Property hProperty = new IntegerCellProperty("grid height", "getHeight()", "setHeight(int)") {
+				@Override
+				public boolean isModified() throws Exception {
+					return height != 1;
+				}
+
+				@Override
+				protected Object getDefaultValue() {
+					return 1;
+				}
+
+				@Override
+				protected String validate(int value) {
+					int rows = m_layout.getRows().size();
+					if (1 <= value && y + value <= rows) {
+						return null;
+					}
+					return MessageFormat.format(
+							ModelMessages.CellConstraintsSupport_gridHeight_outOfRange,
+							value,
+							(rows - y));
+				}
+			};
+			// set sub-properties
+			m_complexProperty.setProperties(new Property[]{
+					xProperty,
+					yProperty,
+					wProperty,
+					hProperty,
+					getHorizontalAlignmentProperty(),
+					getVerticalAlignmentProperty()});
+		}
+		//
+		m_complexProperty.setText(IDEUtil.getConstraintString(cc, false));
+		return m_complexProperty;
+	}
+
+	private Property getHorizontalAlignmentProperty() throws Exception {
+		return new AlignmentCellProperty<MigColumnInfo.Alignment>("h alignment",
+				"getHorizontalAlignment()",
+				"setHorizontalAlignment(org.eclipse.wb.internal.swing.MigLayout.model.MigColumnInfo.Alignment)",
+				MigColumnInfo.ALIGNMENTS_TO_SET,
+				MigColumnInfo.Alignment.DEFAULT);
+	}
+
+	private Property getVerticalAlignmentProperty() throws Exception {
+		return new AlignmentCellProperty<MigRowInfo.Alignment>("v alignment",
+				"getVerticalAlignment()",
+				"setVerticalAlignment(org.eclipse.wb.internal.swing.MigLayout.model.MigRowInfo.Alignment)",
+				MigRowInfo.ALIGNMENTS_TO_SET,
+				MigRowInfo.Alignment.DEFAULT);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AbstractCellProperty
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Abstract implementation of {@link Property} for {@link CellConstraintsSupport}.
+	 *
+	 * @author scheglov_ke
+	 */
+	private abstract class AbstractCellProperty extends Property {
+		private final String m_title;
+		protected final String m_getterSignature;
+		protected final String m_setterSignature;
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public AbstractCellProperty(String title,
+				String getterSignature,
+				String setterSignature,
+				PropertyEditor propertyEditor) throws Exception {
+			super(propertyEditor);
+			m_title = title;
+			m_getterSignature = getterSignature;
+			m_setterSignature = setterSignature;
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Property
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public final String getTitle() {
+			return m_title;
+		}
+
+		@Override
+		public final void setValue(Object value) throws Exception {
+			// try to replace unknown value with some default value
+			if (value == UNKNOWN_VALUE) {
+				value = getDefaultValue();
+			}
+			// set known value
+			if (value != UNKNOWN_VALUE) {
+				// validate
+				{
+					String errorMessage = validate(value);
+					if (errorMessage != null) {
+						UiUtils.openWarning(DesignerPlugin.getShell(), getTitle(), errorMessage);
+						return;
+					}
+				}
+				// do modification
+				doSetValue(value);
+			}
+		}
+
+		private void doSetValue(final Object value) {
+			ExecutionUtils.run(m_layout, new RunnableEx() {
+				public void run() throws Exception {
+					ReflectionUtils.invokeMethod(m_this, m_setterSignature, value);
+					write();
+				}
+			});
+		}
+
+		/**
+		 * @return the default property value.
+		 */
+		protected Object getDefaultValue() {
+			return UNKNOWN_VALUE;
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Value
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public Object getValue() throws Exception {
+			return ReflectionUtils.invokeMethod(m_this, m_getterSignature);
+		}
+
+		/**
+		 * @return <code>null</code> if given value is valid and can be set, or return some
+		 *         {@link String} with error message.
+		 */
+		protected abstract String validate(Object value) throws Exception;
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IntegerCellProperty
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Implementation of {@link Property} for integer fields of {@link CellConstraintsSupport}.
+	 *
+	 * @author scheglov_ke
+	 */
+	private abstract class IntegerCellProperty extends AbstractCellProperty {
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public IntegerCellProperty(String title, String getterSignature, String setterSignature)
+				throws Exception {
+			super(title, getterSignature, setterSignature, IntegerPropertyEditor.INSTANCE);
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Value
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		protected final String validate(Object value) throws Exception {
+			if (!(value instanceof Integer)) {
+				return ModelMessages.CellConstraintsSupport_integerValueExpected;
+			}
+			int intValue = ((Integer) value).intValue();
+			return validate(intValue);
+		}
+
+		/**
+		 * @return <code>true</code> if given value is valid for this property. For example we should
+		 *         not allow to set width outside of number of existing columns.
+		 */
+		protected abstract String validate(int value);
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AlignmentCellProperty
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Implementation of {@link Property} for alignment fields of {@link CellConstraintsSupport}.
+	 *
+	 * @author scheglov_ke
+	 */
+	private final class AlignmentCellProperty<A extends Enum<?>> extends AbstractCellProperty {
+		private final A m_defaultValue;
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public AlignmentCellProperty(String title,
+				String getterSignature,
+				String setterSignature,
+				A[] alignments,
+				A defaultValue) throws Exception {
+			super(title, getterSignature, setterSignature, new EnumCustomPropertyEditor());
+			EnumCustomPropertyEditor editor = (EnumCustomPropertyEditor) getEditor();
+			editor.configure(alignments);
+			m_defaultValue = defaultValue;
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Value
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public final boolean isModified() throws Exception {
+			return getValue() != m_defaultValue;
+		}
+
+		@Override
+		protected Object getDefaultValue() {
+			return m_defaultValue;
+		}
+
+		@Override
+		protected String validate(Object value) throws Exception {
+			return null;
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Images
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the small {@link Image} that represents horizontal/vertical alignment.
+	 */
+	public Image getSmallAlignmentImage(boolean horizontal) {
+		if (horizontal) {
+			return getHorizontalAlignment().getSmallImage();
+		} else {
+			return getVerticalAlignment().getSmallImage();
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Context menu
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds items to the context {@link IMenuManager}.
+	 */
+	public void addContextMenu(IMenuManager manager) throws Exception {
+		manager.appendToGroup(IContextMenuConstants.GROUP_TOP, new Action("Constraints...") {
+			@Override
+			public void run() {
+				new CellEditDialog(DesignerPlugin.getShell(), m_layout, m_this).open();
+			}
+		});
+		// horizontal
+		{
+			IMenuManager manager2 =
+					new MenuManager(ModelMessages.CellConstraintsSupport_horizontalAlignment);
+			manager.appendToGroup(IContextMenuConstants.GROUP_TOP, manager2);
+			fillHorizontalAlignmentMenu(manager2);
+		}
+		// vertical
+		{
+			IMenuManager manager2 =
+					new MenuManager(ModelMessages.CellConstraintsSupport_verticalAlignment);
+			manager.appendToGroup(IContextMenuConstants.GROUP_TOP, manager2);
+			fillVerticalAlignmentMenu(manager2);
+		}
+	}
+
+	/**
+	 * Adds the horizontal alignment {@link Action}'s.
+	 */
+	public void fillHorizontalAlignmentMenu(IMenuManager manager) {
+		manager.add(new SetHorizontalAlignmentAction(ModelMessages.CellConstraintsSupport_horizontalAlignment_default,
+				MigColumnInfo.Alignment.DEFAULT));
+		manager.add(new SetHorizontalAlignmentAction(ModelMessages.CellConstraintsSupport_horizontalAlignment_left,
+				MigColumnInfo.Alignment.LEFT));
+		manager.add(new SetHorizontalAlignmentAction(ModelMessages.CellConstraintsSupport_horizontalAlignment_center,
+				MigColumnInfo.Alignment.CENTER));
+		manager.add(new SetHorizontalAlignmentAction(ModelMessages.CellConstraintsSupport_horizontalAlignment_right,
+				MigColumnInfo.Alignment.RIGHT));
+		manager.add(new SetHorizontalAlignmentAction(ModelMessages.CellConstraintsSupport_horizontalAlignment_fill,
+				MigColumnInfo.Alignment.FILL));
+		manager.add(new SetHorizontalAlignmentAction(ModelMessages.CellConstraintsSupport_horizontalAlignment_leading,
+				MigColumnInfo.Alignment.LEADING));
+		manager.add(new SetHorizontalAlignmentAction(ModelMessages.CellConstraintsSupport_horizontalAlignment_trailing,
+				MigColumnInfo.Alignment.TRAILING));
+	}
+
+	/**
+	 * Adds the vertical alignment {@link Action}'s.
+	 */
+	public void fillVerticalAlignmentMenu(IMenuManager manager2) {
+		manager2.add(new SetVerticalAlignmentAction(ModelMessages.CellConstraintsSupport_verticalAlignment_default,
+				MigRowInfo.Alignment.DEFAULT));
+		manager2.add(new SetVerticalAlignmentAction(ModelMessages.CellConstraintsSupport_verticalAlignment_top,
+				MigRowInfo.Alignment.TOP));
+		manager2.add(new SetVerticalAlignmentAction(ModelMessages.CellConstraintsSupport_verticalAlignment_center,
+				MigRowInfo.Alignment.CENTER));
+		manager2.add(new SetVerticalAlignmentAction(ModelMessages.CellConstraintsSupport_verticalAlignment_bottom,
+				MigRowInfo.Alignment.BOTTOM));
+		manager2.add(new SetVerticalAlignmentAction(ModelMessages.CellConstraintsSupport_verticalAlignment_fill,
+				MigRowInfo.Alignment.FILL));
+		manager2.add(new SetVerticalAlignmentAction(ModelMessages.CellConstraintsSupport_verticalAlignment_baseline,
+				MigRowInfo.Alignment.BASELINE));
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// SetHorizontalAlignmentAction
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * {@link Action} for modifying horizontal alignment.
+	 */
+	private class SetHorizontalAlignmentAction extends ObjectInfoAction {
+		private final MigColumnInfo.Alignment m_alignment;
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public SetHorizontalAlignmentAction(String text, MigColumnInfo.Alignment alignment) {
+			super(m_layout, text, AS_RADIO_BUTTON);
+			m_alignment = alignment;
+			setImageDescriptor(alignment.getMenuImage());
+			// set check for current alignment
+			setChecked(getHorizontalAlignment() == m_alignment);
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Run
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		protected void runEx() throws Exception {
+			setHorizontalAlignment(m_alignment);
+			write();
+		}
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// SetVerticalAlignmentAction
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * {@link Action} for modifying vertical alignment.
+	 */
+	private class SetVerticalAlignmentAction extends ObjectInfoAction {
+		private final MigRowInfo.Alignment m_alignment;
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public SetVerticalAlignmentAction(String text, MigRowInfo.Alignment alignment) {
+			super(m_layout, text, AS_RADIO_BUTTON);
+			m_alignment = alignment;
+			setImageDescriptor(alignment.getMenuImage());
+			// set check for current alignment
+			setChecked(getVerticalAlignment() == m_alignment);
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Run
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		protected void runEx() throws Exception {
+			setVerticalAlignment(m_alignment);
+			write();
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/DimensionsProperty.java b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/DimensionsProperty.java
index 4996264b4..d049e34c5 100644
--- a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/DimensionsProperty.java
+++ b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/DimensionsProperty.java
@@ -30,90 +30,90 @@
  * @coverage swing.MigLayout.model
  */
 public final class DimensionsProperty extends Property {
-  private final boolean m_horizontal;
+	private final boolean m_horizontal;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DimensionsProperty(MigLayoutInfo layout, boolean horizontal) {
-    super(new Editor(layout, horizontal));
-    setCategory(PropertyCategory.PREFERRED);
-    m_horizontal = horizontal;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DimensionsProperty(MigLayoutInfo layout, boolean horizontal) {
+		super(new Editor(layout, horizontal));
+		setCategory(PropertyCategory.PREFERRED);
+		m_horizontal = horizontal;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Property
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getTitle() {
-    return m_horizontal ? "columnSpecs" : "rowSpecs";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Property
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getTitle() {
+		return m_horizontal ? "columnSpecs" : "rowSpecs";
+	}
 
-  @Override
-  public Object getValue() throws Exception {
-    return UNKNOWN_VALUE;
-  }
+	@Override
+	public Object getValue() throws Exception {
+		return UNKNOWN_VALUE;
+	}
 
-  @Override
-  public boolean isModified() throws Exception {
-    return true;
-  }
+	@Override
+	public boolean isModified() throws Exception {
+		return true;
+	}
 
-  @Override
-  public void setValue(Object value) throws Exception {
-  }
+	@Override
+	public void setValue(Object value) throws Exception {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static class Editor extends TextDialogPropertyEditor {
-    private final MigLayoutInfo m_layout;
-    private final boolean m_horizontal;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static class Editor extends TextDialogPropertyEditor {
+		private final MigLayoutInfo m_layout;
+		private final boolean m_horizontal;
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public Editor(MigLayoutInfo layout, boolean horizontal) {
-      m_layout = layout;
-      m_horizontal = horizontal;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public Editor(MigLayoutInfo layout, boolean horizontal) {
+			m_layout = layout;
+			m_horizontal = horizontal;
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Presentation
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    protected String getText(Property property) throws Exception {
-      List<String> titles = Lists.newArrayList();
-      List<? extends MigDimensionInfo> dimensions =
-          m_horizontal ? m_layout.getColumns() : m_layout.getRows();
-      for (MigDimensionInfo dimension : dimensions) {
-        titles.add(dimension.getString(true));
-      }
-      return StringUtils.join(titles.iterator(), "");
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Presentation
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		protected String getText(Property property) throws Exception {
+			List<String> titles = Lists.newArrayList();
+			List<? extends MigDimensionInfo> dimensions =
+					m_horizontal ? m_layout.getColumns() : m_layout.getRows();
+			for (MigDimensionInfo dimension : dimensions) {
+				titles.add(dimension.getString(true));
+			}
+			return StringUtils.join(titles.iterator(), "");
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Editing
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    protected void openDialog(Property property) throws Exception {
-      if (m_horizontal) {
-        new ColumnsDialog(DesignerPlugin.getShell(), m_layout).open();
-      } else {
-        new RowsDialog(DesignerPlugin.getShell(), m_layout).open();
-      }
-    }
-  }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Editing
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		protected void openDialog(Property property) throws Exception {
+			if (m_horizontal) {
+				new ColumnsDialog(DesignerPlugin.getShell(), m_layout).open();
+			} else {
+				new RowsDialog(DesignerPlugin.getShell(), m_layout).open();
+			}
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/IPreferenceConstants.java b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/IPreferenceConstants.java
index 9ab9f9de5..0434ef62a 100644
--- a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/IPreferenceConstants.java
+++ b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/IPreferenceConstants.java
@@ -19,14 +19,14 @@
  * @coverage swing.MigLayout.model
  */
 public interface IPreferenceConstants {
-  /**
-   * When <code>true</code>, {@link MigLayoutInfo} can use
-   * {@link GridAlignmentHelper#V_GRAB_HORIZONTAL} and {@link #V_GRAB_VERTICAL}.
-   */
-  String P_ENABLE_GRAB = "MigLayout.enableGrab";
-  /**
-   * When <code>true</code>, {@link MigLayoutInfo} can use {@link GridAlignmentHelper#V_RIGHT_LABEL}
-   * and {@link GridAlignmentHelper#V_RIGHT_TARGET}.
-   */
-  String P_ENABLE_RIGHT_ALIGNMENT = "MigLayout.enableRightAlignment";
+	/**
+	 * When <code>true</code>, {@link MigLayoutInfo} can use
+	 * {@link GridAlignmentHelper#V_GRAB_HORIZONTAL} and {@link #V_GRAB_VERTICAL}.
+	 */
+	String P_ENABLE_GRAB = "MigLayout.enableGrab";
+	/**
+	 * When <code>true</code>, {@link MigLayoutInfo} can use {@link GridAlignmentHelper#V_RIGHT_LABEL}
+	 * and {@link GridAlignmentHelper#V_RIGHT_TARGET}.
+	 */
+	String P_ENABLE_RIGHT_ALIGNMENT = "MigLayout.enableRightAlignment";
 }
diff --git a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/MigColumnInfo.java b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/MigColumnInfo.java
index ec0f8c001..a34630260 100644
--- a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/MigColumnInfo.java
+++ b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/MigColumnInfo.java
@@ -36,186 +36,186 @@
  * @coverage swing.MigLayout.model
  */
 public final class MigColumnInfo extends MigDimensionInfo {
-  public enum Alignment {
-    UNKNOWN, DEFAULT, LEFT, CENTER, RIGHT, FILL, LEADING, TRAILING;
-    /**
-     * @return the small image (5x9) to display current alignment to user.
-     */
-    public Image getSmallImage() {
-      String pattern = "alignment/h/small/{0}.gif";
-      String path = MessageFormat.format(pattern, name().toLowerCase());
-      return Activator.getImage(path);
-    }
-
-    /**
-     * @return the big image (16x16) to display for user in menu.
-     */
-    public ImageDescriptor getMenuImage() {
-      String pattern = "alignment/h/menu/{0}.gif";
-      String path = MessageFormat.format(pattern, name().toLowerCase());
-      return Activator.getImageDescriptor(path);
-    }
-
-    /**
-     * @return the text to use for menu item or toolbar tooltip.
-     */
-    public String getText() {
-      return StringUtils.capitalize(name().toLowerCase());
-    }
-  }
-
-  public static final Alignment[] ALIGNMENTS_TO_SET = new Alignment[]{
-      Alignment.DEFAULT,
-      Alignment.LEFT,
-      Alignment.CENTER,
-      Alignment.RIGHT,
-      Alignment.FILL,
-      Alignment.LEADING,
-      Alignment.TRAILING};
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public MigColumnInfo(MigLayoutInfo layout) {
-    super(layout, true);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void delete() throws Exception {
-    m_layout.deleteColumn(getIndex());
-  }
-
-  @Override
-  public List<? extends MigDimensionInfo> getSiblings() {
-    return m_layout.getColumns();
-  }
-
-  @Override
-  protected DimConstraint fetchConstraint() {
-    int index = getIndex();
-    AC colSpecs = (AC) ReflectionUtils.getFieldObject(m_layout.getObject(), "colSpecs");
-    if (index < colSpecs.getCount()) {
-      return colSpecs.getConstaints()[index];
-    } else {
-      return createDefaultConstraint();
-    }
-  }
-
-  @Override
-  protected DimConstraint createDefaultConstraint() {
-    return ConstraintParser.parseColumnConstraints("[]").getConstaints()[0];
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Alignment
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the default {@link Alignment} for components in this {@link MigColumnInfo}.
-   */
-  public Alignment getAlignment(boolean resolveDefault) {
-    return getAlignment(m_constraint, true, resolveDefault);
-  }
-
-  /**
-   * Sets default {@link Alignment} for components in this {@link MigColumnInfo}.
-   */
-  public void setAlignment(Alignment alignment) {
-    setAlignment(m_constraint, alignment, true);
-  }
-
-  /**
-   * @return the {@link Alignment} enum converted from alignment of {@link DimConstraint}.
-   */
-  static Alignment getAlignment(DimConstraint constraint, boolean forColumn, boolean resolveDefault) {
-    if (forColumn && constraint.isFill()) {
-      return Alignment.FILL;
-    }
-    if (!forColumn && constraint.getGrow() != null) {
-      return Alignment.FILL;
-    }
-    // convert to enum
-    UnitValue alignment =
-        resolveDefault ? constraint.getAlignOrDefault(true) : constraint.getAlign();
-    if (alignment == null) {
-      return Alignment.DEFAULT;
-    } else if (alignment == IDEUtil.LEFT) {
-      return Alignment.LEFT;
-    } else if (alignment == IDEUtil.CENTER) {
-      return Alignment.CENTER;
-    } else if (alignment == IDEUtil.RIGHT) {
-      return Alignment.RIGHT;
-    } else if (alignment == IDEUtil.LEADING) {
-      return Alignment.LEADING;
-    } else if (alignment == IDEUtil.TRAILING) {
-      return Alignment.TRAILING;
-    }
-    // unknown
-    return Alignment.UNKNOWN;
-  }
-
-  /**
-   * Updates {@link DimConstraint} with {@link Alignment} enum value.
-   */
-  static void setAlignment(DimConstraint constraint, Alignment alignment, boolean forColumn) {
-    Assert.isNotNull(alignment);
-    // set default alignment
-    if (alignment == Alignment.DEFAULT) {
-      constraint.setAlign(null);
-      if (forColumn) {
-        constraint.setFill(false);
-      } else {
-        constraint.setGrow(null);
-      }
-      return;
-    }
-    // special support for FILL
-    if (alignment == Alignment.FILL) {
-      if (forColumn) {
-        constraint.setFill(true);
-      } else {
-        constraint.setGrow(100f);
-      }
-      constraint.setAlign(null);
-      return;
-    }
-    // prepare alignment as String
-    UnitValue alignmentValue;
-    switch (alignment) {
-      case LEFT :
-        alignmentValue = IDEUtil.LEFT;
-        break;
-      case CENTER :
-        alignmentValue = IDEUtil.CENTER;
-        break;
-      case RIGHT :
-        alignmentValue = IDEUtil.RIGHT;
-        break;
-      case LEADING :
-        alignmentValue = IDEUtil.LEADING;
-        break;
-      case TRAILING :
-        alignmentValue = IDEUtil.TRAILING;
-        break;
-      default :
-        throw new IllegalArgumentException(MessageFormat.format(
-            ModelMessages.MigColumnInfo_canNotSetAlignment,
-            alignment));
-    }
-    // parse alignment, update constraint
-    constraint.setAlign(alignmentValue);
-    if (!forColumn) {
-      constraint.setGrow(null);
-    } else {
-      constraint.setFill(false);
-    }
-  }
+	public enum Alignment {
+		UNKNOWN, DEFAULT, LEFT, CENTER, RIGHT, FILL, LEADING, TRAILING;
+		/**
+		 * @return the small image (5x9) to display current alignment to user.
+		 */
+		public Image getSmallImage() {
+			String pattern = "alignment/h/small/{0}.gif";
+			String path = MessageFormat.format(pattern, name().toLowerCase());
+			return Activator.getImage(path);
+		}
+
+		/**
+		 * @return the big image (16x16) to display for user in menu.
+		 */
+		public ImageDescriptor getMenuImage() {
+			String pattern = "alignment/h/menu/{0}.gif";
+			String path = MessageFormat.format(pattern, name().toLowerCase());
+			return Activator.getImageDescriptor(path);
+		}
+
+		/**
+		 * @return the text to use for menu item or toolbar tooltip.
+		 */
+		public String getText() {
+			return StringUtils.capitalize(name().toLowerCase());
+		}
+	}
+
+	public static final Alignment[] ALIGNMENTS_TO_SET = new Alignment[]{
+			Alignment.DEFAULT,
+			Alignment.LEFT,
+			Alignment.CENTER,
+			Alignment.RIGHT,
+			Alignment.FILL,
+			Alignment.LEADING,
+			Alignment.TRAILING};
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public MigColumnInfo(MigLayoutInfo layout) {
+		super(layout, true);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void delete() throws Exception {
+		m_layout.deleteColumn(getIndex());
+	}
+
+	@Override
+	public List<? extends MigDimensionInfo> getSiblings() {
+		return m_layout.getColumns();
+	}
+
+	@Override
+	protected DimConstraint fetchConstraint() {
+		int index = getIndex();
+		AC colSpecs = (AC) ReflectionUtils.getFieldObject(m_layout.getObject(), "colSpecs");
+		if (index < colSpecs.getCount()) {
+			return colSpecs.getConstaints()[index];
+		} else {
+			return createDefaultConstraint();
+		}
+	}
+
+	@Override
+	protected DimConstraint createDefaultConstraint() {
+		return ConstraintParser.parseColumnConstraints("[]").getConstaints()[0];
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Alignment
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the default {@link Alignment} for components in this {@link MigColumnInfo}.
+	 */
+	public Alignment getAlignment(boolean resolveDefault) {
+		return getAlignment(m_constraint, true, resolveDefault);
+	}
+
+	/**
+	 * Sets default {@link Alignment} for components in this {@link MigColumnInfo}.
+	 */
+	public void setAlignment(Alignment alignment) {
+		setAlignment(m_constraint, alignment, true);
+	}
+
+	/**
+	 * @return the {@link Alignment} enum converted from alignment of {@link DimConstraint}.
+	 */
+	static Alignment getAlignment(DimConstraint constraint, boolean forColumn, boolean resolveDefault) {
+		if (forColumn && constraint.isFill()) {
+			return Alignment.FILL;
+		}
+		if (!forColumn && constraint.getGrow() != null) {
+			return Alignment.FILL;
+		}
+		// convert to enum
+		UnitValue alignment =
+				resolveDefault ? constraint.getAlignOrDefault(true) : constraint.getAlign();
+		if (alignment == null) {
+			return Alignment.DEFAULT;
+		} else if (alignment == IDEUtil.LEFT) {
+			return Alignment.LEFT;
+		} else if (alignment == IDEUtil.CENTER) {
+			return Alignment.CENTER;
+		} else if (alignment == IDEUtil.RIGHT) {
+			return Alignment.RIGHT;
+		} else if (alignment == IDEUtil.LEADING) {
+			return Alignment.LEADING;
+		} else if (alignment == IDEUtil.TRAILING) {
+			return Alignment.TRAILING;
+		}
+		// unknown
+		return Alignment.UNKNOWN;
+	}
+
+	/**
+	 * Updates {@link DimConstraint} with {@link Alignment} enum value.
+	 */
+	static void setAlignment(DimConstraint constraint, Alignment alignment, boolean forColumn) {
+		Assert.isNotNull(alignment);
+		// set default alignment
+		if (alignment == Alignment.DEFAULT) {
+			constraint.setAlign(null);
+			if (forColumn) {
+				constraint.setFill(false);
+			} else {
+				constraint.setGrow(null);
+			}
+			return;
+		}
+		// special support for FILL
+		if (alignment == Alignment.FILL) {
+			if (forColumn) {
+				constraint.setFill(true);
+			} else {
+				constraint.setGrow(100f);
+			}
+			constraint.setAlign(null);
+			return;
+		}
+		// prepare alignment as String
+		UnitValue alignmentValue;
+		switch (alignment) {
+		case LEFT :
+			alignmentValue = IDEUtil.LEFT;
+			break;
+		case CENTER :
+			alignmentValue = IDEUtil.CENTER;
+			break;
+		case RIGHT :
+			alignmentValue = IDEUtil.RIGHT;
+			break;
+		case LEADING :
+			alignmentValue = IDEUtil.LEADING;
+			break;
+		case TRAILING :
+			alignmentValue = IDEUtil.TRAILING;
+			break;
+		default :
+			throw new IllegalArgumentException(MessageFormat.format(
+					ModelMessages.MigColumnInfo_canNotSetAlignment,
+					alignment));
+		}
+		// parse alignment, update constraint
+		constraint.setAlign(alignmentValue);
+		if (!forColumn) {
+			constraint.setGrow(null);
+		} else {
+			constraint.setFill(false);
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/MigDimensionInfo.java b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/MigDimensionInfo.java
index 36bf045bc..6e279dace 100644
--- a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/MigDimensionInfo.java
+++ b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/MigDimensionInfo.java
@@ -35,403 +35,403 @@
  * @coverage swing.MigLayout.model
  */
 public abstract class MigDimensionInfo {
-  protected final MigLayoutInfo m_layout;
-  private final boolean m_horizontal;
-  protected DimConstraint m_constraint;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public MigDimensionInfo(MigLayoutInfo layout, boolean horizontal) {
-    m_layout = layout;
-    m_horizontal = horizontal;
-    m_constraint = createDefaultConstraint();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public abstract void delete() throws Exception;
-
-  public abstract List<? extends MigDimensionInfo> getSiblings();
-
-  /**
-   * @return the index of this {@link MigDimensionInfo} in all dimensions of {@link MigLayoutInfo}.
-   */
-  public final int getIndex() {
-    return getSiblings().indexOf(this);
-  }
-
-  /**
-   * @return the tooltip text to show for user.
-   */
-  public final String getTooltip() {
-    return getString(true);
-  }
-
-  /**
-   * @param withBraces
-   *          is <code>true</code>, if surrounding <code>[]</code> should be used.
-   *
-   * @return the constraints of this {@link MigDimensionInfo} as string.
-   */
-  public final String getString(boolean withBraces) {
-    AC ac = new AC();
-    ac.setConstaints(new DimConstraint[]{m_constraint});
-    String constraintString = IDEUtil.getConstraintString(ac, false, m_horizontal);
-    if (!withBraces) {
-      constraintString = StringUtils.strip(constraintString, "[]");
-    }
-    return constraintString;
-  }
-
-  /**
-   * Sets the constraints of this {@link MigDimensionInfo} as string.
-   */
-  public final void setString(String s) {
-    m_constraint = parseDimConstraint(m_horizontal, s);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Gaps
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the gap before this dimension.
-   */
-  public final BoundSize getGapBefore() {
-    return m_constraint.getGapBefore();
-  }
-
-  /**
-   * Sets the gap before this dimension.
-   */
-  public final void setGapBefore(String boundSizeString) {
-    BoundSize gap = parseBoundSize(boundSizeString);
-    // set "before" gap for this dimension
-    m_constraint.setGapBefore(gap);
-    // if has previous dimension, set "after" gap
-    {
-      List<? extends MigDimensionInfo> siblings = getSiblings();
-      int index = siblings.indexOf(this);
-      if (index != 0) {
-        siblings.get(index - 1).m_constraint.setGapAfter(gap);
-      }
-    }
-  }
-
-  /**
-   * @return the gap after this dimension.
-   */
-  public final BoundSize getGapAfter() {
-    return m_constraint.getGapAfter();
-  }
-
-  /**
-   * Sets the gap before this dimension.
-   */
-  public final void setGapAfter(String boundSizeString) {
-    BoundSize gap = parseBoundSize(boundSizeString);
-    // set "after" gap for this dimension
-    m_constraint.setGapAfter(gap);
-    // if has next dimension, set "before" gap
-    {
-      List<? extends MigDimensionInfo> siblings = getSiblings();
-      int index = siblings.indexOf(this);
-      if (index != siblings.size() - 1) {
-        siblings.get(index + 1).m_constraint.setGapBefore(gap);
-      }
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Grow
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link DimConstraint#getGrowPriority()} property.
-   */
-  public final int getGrowPriority() {
-    return m_constraint.getGrowPriority();
-  }
-
-  /**
-   * Sets the {@link DimConstraint#getGrowPriority()} property.
-   */
-  public final void setGrowPriority(int priority) {
-    m_constraint.setGrowPriority(priority);
-  }
-
-  /**
-   * @return the grow weight, may be <code>null</code> if no grow required.
-   */
-  public final Float getGrow() {
-    return m_constraint.getGrow();
-  }
-
-  /**
-   * Sets the grow weight, may be <code>null</code> if no grow required.
-   */
-  public final void setGrow(Float weight) {
-    m_constraint.setGrow(weight);
-  }
-
-  /**
-   * @return <code>true</code> if this {@link MigDimensionInfo} has not <code>null</code> grow
-   *         weight.
-   */
-  public final boolean hasGrow() {
-    Float grow = m_constraint.getGrow();
-    return grow != null && grow.floatValue() > 0.001f;
-  }
-
-  /**
-   * Flips "grow" property between <code>true</code> to <code>false</code>.
-   */
-  public final void flipGrow() {
-    if (hasGrow()) {
-      m_constraint.setGrow(null);
-    } else {
-      m_constraint.setGrow(100.0f);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Shrink
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link DimConstraint#getShrinkPriority()} property.
-   */
-  public final int getShrinkPriority() {
-    return m_constraint.getShrinkPriority();
-  }
-
-  /**
-   * Sets the {@link DimConstraint#getGrowPriority()} property.
-   */
-  public final void setShrinkPriority(int priority) {
-    m_constraint.setShrinkPriority(priority);
-  }
-
-  /**
-   * @return the shrink weight, may be <code>null</code> if no shrink required.
-   */
-  public final Float getShrink() {
-    return m_constraint.getShrink();
-  }
-
-  /**
-   * Sets the shrink weight, may be <code>null</code> if no shrink required.
-   */
-  public final void setShrink(Float weight) {
-    m_constraint.setShrink(weight);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Internal access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Updates {@link #m_constraint} with corresponding {@link DimConstraint}.
-   */
-  final void updateConstraint() throws Exception {
-    m_constraint = fetchConstraint();
-  }
-
-  /**
-   * @return the corresponding {@link DimConstraint} for this {@link MigDimensionInfo}.
-   */
-  protected abstract DimConstraint fetchConstraint();
-
-  /**
-   * @return the default {@link DimConstraint} for this type of {@link MigDimensionInfo}.
-   */
-  protected abstract DimConstraint createDefaultConstraint();
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Size
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return minimum size of this {@link MigDimensionInfo}.
-   */
-  public UnitValue getMinimumSize() {
-    BoundSize boundSize = m_constraint.getSize();
-    return boundSize.getMin();
-  }
-
-  /**
-   * Sets only minimum size of this dimension {@link BoundSize}.
-   */
-  public void setMinimumSize(String s) {
-    UnitValue size = parseSimpleSize(s);
-    BoundSize boundSize = m_constraint.getSize();
-    m_constraint.setSize(new BoundSize(size, boundSize.getPreferred(), boundSize.getMax(), null));
-  }
-
-  /**
-   * @return preferred size of this {@link MigDimensionInfo}.
-   */
-  public UnitValue getPreferredSize() {
-    BoundSize boundSize = m_constraint.getSize();
-    return boundSize.getPreferred();
-  }
-
-  /**
-   * Sets only preferred size of this dimension {@link BoundSize}.
-   */
-  public void setPreferredSize(String s) {
-    UnitValue size = parseSimpleSize(s);
-    BoundSize boundSize = m_constraint.getSize();
-    m_constraint.setSize(new BoundSize(boundSize.getMin(), size, boundSize.getMax(), null));
-  }
-
-  /**
-   * @return maximum size of this {@link MigDimensionInfo}.
-   */
-  public UnitValue getMaximumSize() {
-    BoundSize boundSize = m_constraint.getSize();
-    return boundSize.getMax();
-  }
-
-  /**
-   * Sets only maximum size of this dimension {@link BoundSize}.
-   */
-  public void setMaximumSize(String s) {
-    UnitValue size = parseSimpleSize(s);
-    BoundSize boundSize = m_constraint.getSize();
-    m_constraint.setSize(new BoundSize(boundSize.getMin(), boundSize.getPreferred(), size, null));
-  }
-
-  /**
-   * Sets {@link BoundSize} of dimension as single string.
-   */
-  public void setSize(String sizeString) {
-    BoundSize size = parseBoundSize(sizeString);
-    if (size == null) {
-      size = new BoundSize(null, null, null, null);
-    }
-    m_constraint.setSize(size);
-  }
-
-  /**
-   * @return the {@link UnitValue} corresponding to the single size, such as <code>"1cm"</code>.
-   */
-  private UnitValue parseSimpleSize(String s) {
-    BoundSize boundSize = parseBoundSize(s);
-    return boundSize != null ? boundSize.getPreferred() : null;
-  }
-
-  /**
-   * @return the {@link BoundSize} of dimension parsed from string.
-   */
-  private BoundSize parseBoundSize(final String sizeString) {
-    if (sizeString == null) {
-      return null;
-    }
-    boolean old_designTime = Beans.isDesignTime();
-    try {
-      Beans.setDesignTime(true);
-      return ConstraintParser.parseBoundSize(sizeString, false, m_horizontal);
-    } finally {
-      Beans.setDesignTime(old_designTime);
-    }
-  }
-
-  /**
-   * @return the string presentation of given {@link UnitValue}.
-   */
-  public final String getString(UnitValue value) {
-    if (value != null) {
-      return getString(new BoundSize(null, value, null, null));
-    } else {
-      return null;
-    }
-  }
-
-  /**
-   * @return the string presentation of given {@link BoundSize}.
-   */
-  public final String getString(BoundSize boundSize) {
-    if (boundSize != null) {
-      AC ac = new AC();
-      DimConstraint dimConstraint = new DimConstraint();
-      dimConstraint.setSize(boundSize);
-      ac.setConstaints(new DimConstraint[]{dimConstraint});
-      String constraintString = IDEUtil.getConstraintString(ac, false, m_horizontal);
-      return StringUtils.strip(constraintString, "[]");
-    } else {
-      return null;
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parsing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Parses {@link DimConstraint} from {@link String}.
-   */
-  protected static DimConstraint parseDimConstraint(boolean horizontal, String s) {
-    // prepare constraints
-    AC ac;
-    {
-      boolean old_designTime = Beans.isDesignTime();
-      try {
-        Beans.setDesignTime(true);
-        if (horizontal) {
-          ac = ConstraintParser.parseColumnConstraints(s);
-        } else {
-          ac = ConstraintParser.parseRowConstraints(s);
-        }
-      } finally {
-        Beans.setDesignTime(old_designTime);
-      }
-    }
-    // extract single constraint
-    Assert.equals(1, ac.getCount(), s);
-    return ac.getConstaints()[0];
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Unit conversion
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the size string that uses given unit and has required size in pixels.
-   */
-  public String toUnitString(int pixels, String unit) {
-    return String.format(Locale.ENGLISH, "%.2f%s", toUnit(pixels, unit), unit);
-  }
-
-  /**
-   * @return the value in units corresponding to the value in pixels.
-   */
-  public float toUnit(int pixels, String unit) {
-    float pixelsInOne = getPixelsInOneUnit(unit);
-    return pixels / pixelsInOne;
-  }
-
-  /**
-   * @return the size of single unit in pixels.
-   */
-  public float getPixelsInOneUnit(String unit) {
-    UnitValue unitValue = ConstraintParser.parseUnitValue("1" + unit, m_horizontal);
-    Container container = m_layout.getContainer().getContainer();
-    SwingContainerWrapper parentWrapper = new SwingContainerWrapper(container);
-    int refValue = m_horizontal ? container.getBounds().width : container.getBounds().height;
-    return unitValue.getPixelsExact(refValue, parentWrapper, null);
-  }
+	protected final MigLayoutInfo m_layout;
+	private final boolean m_horizontal;
+	protected DimConstraint m_constraint;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public MigDimensionInfo(MigLayoutInfo layout, boolean horizontal) {
+		m_layout = layout;
+		m_horizontal = horizontal;
+		m_constraint = createDefaultConstraint();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public abstract void delete() throws Exception;
+
+	public abstract List<? extends MigDimensionInfo> getSiblings();
+
+	/**
+	 * @return the index of this {@link MigDimensionInfo} in all dimensions of {@link MigLayoutInfo}.
+	 */
+	public final int getIndex() {
+		return getSiblings().indexOf(this);
+	}
+
+	/**
+	 * @return the tooltip text to show for user.
+	 */
+	public final String getTooltip() {
+		return getString(true);
+	}
+
+	/**
+	 * @param withBraces
+	 *          is <code>true</code>, if surrounding <code>[]</code> should be used.
+	 *
+	 * @return the constraints of this {@link MigDimensionInfo} as string.
+	 */
+	public final String getString(boolean withBraces) {
+		AC ac = new AC();
+		ac.setConstaints(new DimConstraint[]{m_constraint});
+		String constraintString = IDEUtil.getConstraintString(ac, false, m_horizontal);
+		if (!withBraces) {
+			constraintString = StringUtils.strip(constraintString, "[]");
+		}
+		return constraintString;
+	}
+
+	/**
+	 * Sets the constraints of this {@link MigDimensionInfo} as string.
+	 */
+	public final void setString(String s) {
+		m_constraint = parseDimConstraint(m_horizontal, s);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Gaps
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the gap before this dimension.
+	 */
+	public final BoundSize getGapBefore() {
+		return m_constraint.getGapBefore();
+	}
+
+	/**
+	 * Sets the gap before this dimension.
+	 */
+	public final void setGapBefore(String boundSizeString) {
+		BoundSize gap = parseBoundSize(boundSizeString);
+		// set "before" gap for this dimension
+		m_constraint.setGapBefore(gap);
+		// if has previous dimension, set "after" gap
+		{
+			List<? extends MigDimensionInfo> siblings = getSiblings();
+			int index = siblings.indexOf(this);
+			if (index != 0) {
+				siblings.get(index - 1).m_constraint.setGapAfter(gap);
+			}
+		}
+	}
+
+	/**
+	 * @return the gap after this dimension.
+	 */
+	public final BoundSize getGapAfter() {
+		return m_constraint.getGapAfter();
+	}
+
+	/**
+	 * Sets the gap before this dimension.
+	 */
+	public final void setGapAfter(String boundSizeString) {
+		BoundSize gap = parseBoundSize(boundSizeString);
+		// set "after" gap for this dimension
+		m_constraint.setGapAfter(gap);
+		// if has next dimension, set "before" gap
+		{
+			List<? extends MigDimensionInfo> siblings = getSiblings();
+			int index = siblings.indexOf(this);
+			if (index != siblings.size() - 1) {
+				siblings.get(index + 1).m_constraint.setGapBefore(gap);
+			}
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Grow
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link DimConstraint#getGrowPriority()} property.
+	 */
+	public final int getGrowPriority() {
+		return m_constraint.getGrowPriority();
+	}
+
+	/**
+	 * Sets the {@link DimConstraint#getGrowPriority()} property.
+	 */
+	public final void setGrowPriority(int priority) {
+		m_constraint.setGrowPriority(priority);
+	}
+
+	/**
+	 * @return the grow weight, may be <code>null</code> if no grow required.
+	 */
+	public final Float getGrow() {
+		return m_constraint.getGrow();
+	}
+
+	/**
+	 * Sets the grow weight, may be <code>null</code> if no grow required.
+	 */
+	public final void setGrow(Float weight) {
+		m_constraint.setGrow(weight);
+	}
+
+	/**
+	 * @return <code>true</code> if this {@link MigDimensionInfo} has not <code>null</code> grow
+	 *         weight.
+	 */
+	public final boolean hasGrow() {
+		Float grow = m_constraint.getGrow();
+		return grow != null && grow.floatValue() > 0.001f;
+	}
+
+	/**
+	 * Flips "grow" property between <code>true</code> to <code>false</code>.
+	 */
+	public final void flipGrow() {
+		if (hasGrow()) {
+			m_constraint.setGrow(null);
+		} else {
+			m_constraint.setGrow(100.0f);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Shrink
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link DimConstraint#getShrinkPriority()} property.
+	 */
+	public final int getShrinkPriority() {
+		return m_constraint.getShrinkPriority();
+	}
+
+	/**
+	 * Sets the {@link DimConstraint#getGrowPriority()} property.
+	 */
+	public final void setShrinkPriority(int priority) {
+		m_constraint.setShrinkPriority(priority);
+	}
+
+	/**
+	 * @return the shrink weight, may be <code>null</code> if no shrink required.
+	 */
+	public final Float getShrink() {
+		return m_constraint.getShrink();
+	}
+
+	/**
+	 * Sets the shrink weight, may be <code>null</code> if no shrink required.
+	 */
+	public final void setShrink(Float weight) {
+		m_constraint.setShrink(weight);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Internal access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Updates {@link #m_constraint} with corresponding {@link DimConstraint}.
+	 */
+	final void updateConstraint() throws Exception {
+		m_constraint = fetchConstraint();
+	}
+
+	/**
+	 * @return the corresponding {@link DimConstraint} for this {@link MigDimensionInfo}.
+	 */
+	protected abstract DimConstraint fetchConstraint();
+
+	/**
+	 * @return the default {@link DimConstraint} for this type of {@link MigDimensionInfo}.
+	 */
+	protected abstract DimConstraint createDefaultConstraint();
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Size
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return minimum size of this {@link MigDimensionInfo}.
+	 */
+	public UnitValue getMinimumSize() {
+		BoundSize boundSize = m_constraint.getSize();
+		return boundSize.getMin();
+	}
+
+	/**
+	 * Sets only minimum size of this dimension {@link BoundSize}.
+	 */
+	public void setMinimumSize(String s) {
+		UnitValue size = parseSimpleSize(s);
+		BoundSize boundSize = m_constraint.getSize();
+		m_constraint.setSize(new BoundSize(size, boundSize.getPreferred(), boundSize.getMax(), null));
+	}
+
+	/**
+	 * @return preferred size of this {@link MigDimensionInfo}.
+	 */
+	public UnitValue getPreferredSize() {
+		BoundSize boundSize = m_constraint.getSize();
+		return boundSize.getPreferred();
+	}
+
+	/**
+	 * Sets only preferred size of this dimension {@link BoundSize}.
+	 */
+	public void setPreferredSize(String s) {
+		UnitValue size = parseSimpleSize(s);
+		BoundSize boundSize = m_constraint.getSize();
+		m_constraint.setSize(new BoundSize(boundSize.getMin(), size, boundSize.getMax(), null));
+	}
+
+	/**
+	 * @return maximum size of this {@link MigDimensionInfo}.
+	 */
+	public UnitValue getMaximumSize() {
+		BoundSize boundSize = m_constraint.getSize();
+		return boundSize.getMax();
+	}
+
+	/**
+	 * Sets only maximum size of this dimension {@link BoundSize}.
+	 */
+	public void setMaximumSize(String s) {
+		UnitValue size = parseSimpleSize(s);
+		BoundSize boundSize = m_constraint.getSize();
+		m_constraint.setSize(new BoundSize(boundSize.getMin(), boundSize.getPreferred(), size, null));
+	}
+
+	/**
+	 * Sets {@link BoundSize} of dimension as single string.
+	 */
+	public void setSize(String sizeString) {
+		BoundSize size = parseBoundSize(sizeString);
+		if (size == null) {
+			size = new BoundSize(null, null, null, null);
+		}
+		m_constraint.setSize(size);
+	}
+
+	/**
+	 * @return the {@link UnitValue} corresponding to the single size, such as <code>"1cm"</code>.
+	 */
+	private UnitValue parseSimpleSize(String s) {
+		BoundSize boundSize = parseBoundSize(s);
+		return boundSize != null ? boundSize.getPreferred() : null;
+	}
+
+	/**
+	 * @return the {@link BoundSize} of dimension parsed from string.
+	 */
+	private BoundSize parseBoundSize(final String sizeString) {
+		if (sizeString == null) {
+			return null;
+		}
+		boolean old_designTime = Beans.isDesignTime();
+		try {
+			Beans.setDesignTime(true);
+			return ConstraintParser.parseBoundSize(sizeString, false, m_horizontal);
+		} finally {
+			Beans.setDesignTime(old_designTime);
+		}
+	}
+
+	/**
+	 * @return the string presentation of given {@link UnitValue}.
+	 */
+	public final String getString(UnitValue value) {
+		if (value != null) {
+			return getString(new BoundSize(null, value, null, null));
+		} else {
+			return null;
+		}
+	}
+
+	/**
+	 * @return the string presentation of given {@link BoundSize}.
+	 */
+	public final String getString(BoundSize boundSize) {
+		if (boundSize != null) {
+			AC ac = new AC();
+			DimConstraint dimConstraint = new DimConstraint();
+			dimConstraint.setSize(boundSize);
+			ac.setConstaints(new DimConstraint[]{dimConstraint});
+			String constraintString = IDEUtil.getConstraintString(ac, false, m_horizontal);
+			return StringUtils.strip(constraintString, "[]");
+		} else {
+			return null;
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parsing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Parses {@link DimConstraint} from {@link String}.
+	 */
+	protected static DimConstraint parseDimConstraint(boolean horizontal, String s) {
+		// prepare constraints
+		AC ac;
+		{
+			boolean old_designTime = Beans.isDesignTime();
+			try {
+				Beans.setDesignTime(true);
+				if (horizontal) {
+					ac = ConstraintParser.parseColumnConstraints(s);
+				} else {
+					ac = ConstraintParser.parseRowConstraints(s);
+				}
+			} finally {
+				Beans.setDesignTime(old_designTime);
+			}
+		}
+		// extract single constraint
+		Assert.equals(1, ac.getCount(), s);
+		return ac.getConstaints()[0];
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Unit conversion
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the size string that uses given unit and has required size in pixels.
+	 */
+	public String toUnitString(int pixels, String unit) {
+		return String.format(Locale.ENGLISH, "%.2f%s", toUnit(pixels, unit), unit);
+	}
+
+	/**
+	 * @return the value in units corresponding to the value in pixels.
+	 */
+	public float toUnit(int pixels, String unit) {
+		float pixelsInOne = getPixelsInOneUnit(unit);
+		return pixels / pixelsInOne;
+	}
+
+	/**
+	 * @return the size of single unit in pixels.
+	 */
+	public float getPixelsInOneUnit(String unit) {
+		UnitValue unitValue = ConstraintParser.parseUnitValue("1" + unit, m_horizontal);
+		Container container = m_layout.getContainer().getContainer();
+		SwingContainerWrapper parentWrapper = new SwingContainerWrapper(container);
+		int refValue = m_horizontal ? container.getBounds().width : container.getBounds().height;
+		return unitValue.getPixelsExact(refValue, parentWrapper, null);
+	}
 }
diff --git a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/MigLayoutConverter.java b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/MigLayoutConverter.java
index 71aadc73d..933d1007c 100644
--- a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/MigLayoutConverter.java
+++ b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/MigLayoutConverter.java
@@ -37,233 +37,233 @@
  * @coverage swing.MigLayout.model
  */
 public final class MigLayoutConverter {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private MigLayoutConverter() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private MigLayoutConverter() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Conversion
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static void convert(ContainerInfo parent, MigLayoutInfo layout) throws Exception {
-    // prepare columns and rows and distribute controls in them
-    List<ComponentGroup> columns =
-        GridConvertionHelper.buildGroups(parent.getChildrenComponents(), true);
-    List<ComponentGroup> rows =
-        GridConvertionHelper.buildGroups(parent.getChildrenComponents(), false);
-    // sort components in columns and rows
-    GridConvertionHelper.sortGroupsByTranspose(columns, rows);
-    GridConvertionHelper.sortGroupsByTranspose(rows, columns);
-    // ensure that columns and rows are sorted by start coordinates
-    GridConvertionHelper.sortGroups(columns);
-    GridConvertionHelper.sortGroups(rows);
-    // calculate begin/end for each column/row
-    GridConvertionHelper.updateBoundsGaps(columns, true);
-    GridConvertionHelper.updateBoundsGaps(rows, true);
-    // create dimensions in layout
-    {
-      createDimensions(layout, columns, true);
-      createDimensions(layout, rows, false);
-    }
-    // prepare set of components in groups
-    Set<ComponentInGroup> componentsInGroups = Sets.newHashSet();
-    for (ComponentGroup column : columns) {
-      for (ComponentInGroup componentInGroup : column.getComponents()) {
-        componentsInGroups.add(componentInGroup);
-      }
-    }
-    // create constraints for each control
-    for (ComponentInGroup componentInGroup : componentsInGroups) {
-      ComponentInfo component = (ComponentInfo) componentInGroup.getComponent();
-      // layout data
-      GeneralLayoutData generalLayoutData = GeneralLayoutData.getFromInfoEx(component);
-      CellConstraintsSupport constraints = MigLayoutInfo.getConstraints(component);
-      // prepare begin/end column/row
-      ComponentGroup beginColumn =
-          GridConvertionHelper.getBeginForComponent(columns, componentInGroup);
-      ComponentGroup endColumn = GridConvertionHelper.getEndForComponent(columns, componentInGroup);
-      ComponentGroup beginRow = GridConvertionHelper.getBeginForComponent(rows, componentInGroup);
-      ComponentGroup endRow = GridConvertionHelper.getEndForComponent(rows, componentInGroup);
-      // update cell coordinates
-      {
-        // calculate location/size
-        int x = columns.indexOf(beginColumn);
-        int y = rows.indexOf(beginRow);
-        int sx = 1 + columns.indexOf(endColumn) - x;
-        int sy = 1 + rows.indexOf(endRow) - y;
-        // set location/size
-        constraints.setX(x);
-        constraints.setY(y);
-        constraints.setWidth(sx);
-        constraints.setHeight(sy);
-      }
-      // alignments
-      constraints.setHorizontalAlignment(getHorizontalAlignment(
-          columns,
-          componentInGroup,
-          generalLayoutData));
-      constraints.setVerticalAlignment(getVerticalAlignment(
-          rows,
-          componentInGroup,
-          generalLayoutData));
-      // write constraints
-      constraints.write();
-    }
-    // write dimensions
-    layout.setObject(new MigLayout());
-    layout.writeDimensions();
-    // remove empty columns
-    for (int i = columns.size() - 1; i >= 0; i--) {
-      if (columns.get(i).getComponents().isEmpty()) {
-        layout.deleteColumn(i);
-      }
-    }
-    // remove empty rows
-    for (int i = rows.size() - 1; i >= 0; i--) {
-      if (rows.get(i).getComponents().isEmpty()) {
-        layout.deleteRow(i);
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Conversion
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static void convert(ContainerInfo parent, MigLayoutInfo layout) throws Exception {
+		// prepare columns and rows and distribute controls in them
+		List<ComponentGroup> columns =
+				GridConvertionHelper.buildGroups(parent.getChildrenComponents(), true);
+		List<ComponentGroup> rows =
+				GridConvertionHelper.buildGroups(parent.getChildrenComponents(), false);
+		// sort components in columns and rows
+		GridConvertionHelper.sortGroupsByTranspose(columns, rows);
+		GridConvertionHelper.sortGroupsByTranspose(rows, columns);
+		// ensure that columns and rows are sorted by start coordinates
+		GridConvertionHelper.sortGroups(columns);
+		GridConvertionHelper.sortGroups(rows);
+		// calculate begin/end for each column/row
+		GridConvertionHelper.updateBoundsGaps(columns, true);
+		GridConvertionHelper.updateBoundsGaps(rows, true);
+		// create dimensions in layout
+		{
+			createDimensions(layout, columns, true);
+			createDimensions(layout, rows, false);
+		}
+		// prepare set of components in groups
+		Set<ComponentInGroup> componentsInGroups = Sets.newHashSet();
+		for (ComponentGroup column : columns) {
+			for (ComponentInGroup componentInGroup : column.getComponents()) {
+				componentsInGroups.add(componentInGroup);
+			}
+		}
+		// create constraints for each control
+		for (ComponentInGroup componentInGroup : componentsInGroups) {
+			ComponentInfo component = (ComponentInfo) componentInGroup.getComponent();
+			// layout data
+			GeneralLayoutData generalLayoutData = GeneralLayoutData.getFromInfoEx(component);
+			CellConstraintsSupport constraints = MigLayoutInfo.getConstraints(component);
+			// prepare begin/end column/row
+			ComponentGroup beginColumn =
+					GridConvertionHelper.getBeginForComponent(columns, componentInGroup);
+			ComponentGroup endColumn = GridConvertionHelper.getEndForComponent(columns, componentInGroup);
+			ComponentGroup beginRow = GridConvertionHelper.getBeginForComponent(rows, componentInGroup);
+			ComponentGroup endRow = GridConvertionHelper.getEndForComponent(rows, componentInGroup);
+			// update cell coordinates
+			{
+				// calculate location/size
+				int x = columns.indexOf(beginColumn);
+				int y = rows.indexOf(beginRow);
+				int sx = 1 + columns.indexOf(endColumn) - x;
+				int sy = 1 + rows.indexOf(endRow) - y;
+				// set location/size
+				constraints.setX(x);
+				constraints.setY(y);
+				constraints.setWidth(sx);
+				constraints.setHeight(sy);
+			}
+			// alignments
+			constraints.setHorizontalAlignment(getHorizontalAlignment(
+					columns,
+					componentInGroup,
+					generalLayoutData));
+			constraints.setVerticalAlignment(getVerticalAlignment(
+					rows,
+					componentInGroup,
+					generalLayoutData));
+			// write constraints
+			constraints.write();
+		}
+		// write dimensions
+		layout.setObject(new MigLayout());
+		layout.writeDimensions();
+		// remove empty columns
+		for (int i = columns.size() - 1; i >= 0; i--) {
+			if (columns.get(i).getComponents().isEmpty()) {
+				layout.deleteColumn(i);
+			}
+		}
+		// remove empty rows
+		for (int i = rows.size() - 1; i >= 0; i--) {
+			if (rows.get(i).getComponents().isEmpty()) {
+				layout.deleteRow(i);
+			}
+		}
+	}
 
-  /**
-   * Creates {@link MigColumnInfo} or {@link MigRowInfo} for given {@link ComponentGroup}'s.
-   */
-  private static void createDimensions(MigLayoutInfo layout,
-      List<ComponentGroup> groups,
-      boolean horizontal) throws Exception {
-    for (ComponentGroup group : groups) {
-      // create new "default" dimension
-      MigDimensionInfo dimension;
-      if (horizontal) {
-        MigColumnInfo column = new MigColumnInfo(layout);
-        layout.getColumns().add(column);
-        dimension = column;
-      } else {
-        MigRowInfo row = new MigRowInfo(layout);
-        layout.getRows().add(row);
-        dimension = row;
-      }
-      // set constant size
-      dimension.setSize(group.getSize() + "px");
-    }
-  }
+	/**
+	 * Creates {@link MigColumnInfo} or {@link MigRowInfo} for given {@link ComponentGroup}'s.
+	 */
+	private static void createDimensions(MigLayoutInfo layout,
+			List<ComponentGroup> groups,
+			boolean horizontal) throws Exception {
+		for (ComponentGroup group : groups) {
+			// create new "default" dimension
+			MigDimensionInfo dimension;
+			if (horizontal) {
+				MigColumnInfo column = new MigColumnInfo(layout);
+				layout.getColumns().add(column);
+				dimension = column;
+			} else {
+				MigRowInfo row = new MigRowInfo(layout);
+				layout.getRows().add(row);
+				dimension = row;
+			}
+			// set constant size
+			dimension.setSize(group.getSize() + "px");
+		}
+	}
 
-  /**
-   * Calculate horizontal alignment.
-   */
-  private static MigColumnInfo.Alignment getHorizontalAlignment(List<ComponentGroup> columns,
-      ComponentInGroup componentInGroup,
-      GeneralLayoutData generalLayoutData) {
-    if (generalLayoutData.horizontalAlignment != null) {
-      // from general layout data
-      MigColumnInfo.Alignment alignment =
-          GeneralLayoutData.getRealValue(
-              MigLayoutInfo.m_horizontalAlignmentMap,
-              generalLayoutData.horizontalAlignment);
-      if (alignment != null && alignment != MigColumnInfo.Alignment.UNKNOWN) {
-        return alignment;
-      }
-    }
-    // calculate
-    ComponentInfo component = (ComponentInfo) componentInGroup.getComponent();
-    ComponentGroup beginColumn =
-        GridConvertionHelper.getBeginForComponent(columns, componentInGroup);
-    ComponentGroup endColumn = GridConvertionHelper.getEndForComponent(columns, componentInGroup);
-    //
-    Rectangle bounds = component.getBounds();
-    Dimension prefSize = component.getPreferredSize();
-    int bl = bounds.x;
-    int br = bounds.right();
-    int columnLeft = beginColumn.getMin();
-    int columnRight = endColumn.getMax();
-    int columnCenter = columnLeft + (columnRight - columnLeft) / 2;
-    //
-    int leftOffset = Math.abs(bl - columnLeft);
-    int rightOffset = Math.abs(columnRight - br);
-    // prepare how much location of two sides will be changed for each alignment
-    int leftDelta = leftOffset + Math.abs(columnLeft + prefSize.width - br);
-    int rightDelta = rightOffset + Math.abs(columnRight - prefSize.width - bl);
-    int fillDelta = leftOffset + rightOffset;
-    int centerDelta =
-        Math.abs(bl - (columnCenter - prefSize.width / 2))
-            + Math.abs(br - (columnCenter + prefSize.width / 2));
-    // set alignment
-    return getAlignment(
-        new int[]{leftDelta, centerDelta, rightDelta, fillDelta},
-        new MigColumnInfo.Alignment[]{
-            MigColumnInfo.Alignment.LEFT,
-            MigColumnInfo.Alignment.CENTER,
-            MigColumnInfo.Alignment.RIGHT,
-            MigColumnInfo.Alignment.FILL});
-  }
+	/**
+	 * Calculate horizontal alignment.
+	 */
+	private static MigColumnInfo.Alignment getHorizontalAlignment(List<ComponentGroup> columns,
+			ComponentInGroup componentInGroup,
+			GeneralLayoutData generalLayoutData) {
+		if (generalLayoutData.horizontalAlignment != null) {
+			// from general layout data
+			MigColumnInfo.Alignment alignment =
+					GeneralLayoutData.getRealValue(
+							MigLayoutInfo.m_horizontalAlignmentMap,
+							generalLayoutData.horizontalAlignment);
+			if (alignment != null && alignment != MigColumnInfo.Alignment.UNKNOWN) {
+				return alignment;
+			}
+		}
+		// calculate
+		ComponentInfo component = (ComponentInfo) componentInGroup.getComponent();
+		ComponentGroup beginColumn =
+				GridConvertionHelper.getBeginForComponent(columns, componentInGroup);
+		ComponentGroup endColumn = GridConvertionHelper.getEndForComponent(columns, componentInGroup);
+		//
+		Rectangle bounds = component.getBounds();
+		Dimension prefSize = component.getPreferredSize();
+		int bl = bounds.x;
+		int br = bounds.right();
+		int columnLeft = beginColumn.getMin();
+		int columnRight = endColumn.getMax();
+		int columnCenter = columnLeft + (columnRight - columnLeft) / 2;
+		//
+		int leftOffset = Math.abs(bl - columnLeft);
+		int rightOffset = Math.abs(columnRight - br);
+		// prepare how much location of two sides will be changed for each alignment
+		int leftDelta = leftOffset + Math.abs(columnLeft + prefSize.width - br);
+		int rightDelta = rightOffset + Math.abs(columnRight - prefSize.width - bl);
+		int fillDelta = leftOffset + rightOffset;
+		int centerDelta =
+				Math.abs(bl - (columnCenter - prefSize.width / 2))
+				+ Math.abs(br - (columnCenter + prefSize.width / 2));
+		// set alignment
+		return getAlignment(
+				new int[]{leftDelta, centerDelta, rightDelta, fillDelta},
+				new MigColumnInfo.Alignment[]{
+						MigColumnInfo.Alignment.LEFT,
+						MigColumnInfo.Alignment.CENTER,
+						MigColumnInfo.Alignment.RIGHT,
+						MigColumnInfo.Alignment.FILL});
+	}
 
-  /**
-   * Calculate horizontal alignment.
-   */
-  private static MigRowInfo.Alignment getVerticalAlignment(List<ComponentGroup> rows,
-      ComponentInGroup componentInGroup,
-      GeneralLayoutData generalLayoutData) {
-    if (generalLayoutData.verticalAlignment != null) {
-      // from general layout data
-      MigRowInfo.Alignment alignment =
-          GeneralLayoutData.getRealValue(
-              MigLayoutInfo.m_verticalAlignmentMap,
-              generalLayoutData.verticalAlignment);
-      if (alignment != null && alignment != MigRowInfo.Alignment.UNKNOWN) {
-        return alignment;
-      }
-    }
-    // calculate
-    ComponentInfo component = (ComponentInfo) componentInGroup.getComponent();
-    // prepare begin/end column/row
-    ComponentGroup beginRow = GridConvertionHelper.getBeginForComponent(rows, componentInGroup);
-    ComponentGroup endRow = GridConvertionHelper.getEndForComponent(rows, componentInGroup);
-    Rectangle bounds = component.getBounds();
-    Dimension prefSize = component.getPreferredSize();
-    int bt = bounds.y;
-    int bb = bounds.bottom();
-    int rowTop = beginRow.getMin();
-    int rowBottom = endRow.getMax();
-    int rowCenter = rowTop + (rowBottom - rowTop) / 2;
-    //
-    int topOffset = bt - rowTop;
-    int bottomOffset = rowBottom - bb;
-    // prepare how much location of two sides will be changed for each alignment
-    int topDelta = topOffset + Math.abs(rowTop + prefSize.height - bb);
-    int bottomDelta = bottomOffset + Math.abs(rowBottom - prefSize.height - bt);
-    int fillDelta = topOffset + bottomOffset;
-    int centerDelta =
-        Math.abs(bt - (rowCenter - prefSize.height / 2))
-            + Math.abs(bb - (rowCenter + prefSize.height / 2));
-    // set alignment
-    return getAlignment(
-        new int[]{topDelta, centerDelta, bottomDelta, fillDelta},
-        new MigRowInfo.Alignment[]{
-            MigRowInfo.Alignment.TOP,
-            MigRowInfo.Alignment.CENTER,
-            MigRowInfo.Alignment.BOTTOM,
-            MigRowInfo.Alignment.FILL});
-  }
+	/**
+	 * Calculate horizontal alignment.
+	 */
+	private static MigRowInfo.Alignment getVerticalAlignment(List<ComponentGroup> rows,
+			ComponentInGroup componentInGroup,
+			GeneralLayoutData generalLayoutData) {
+		if (generalLayoutData.verticalAlignment != null) {
+			// from general layout data
+			MigRowInfo.Alignment alignment =
+					GeneralLayoutData.getRealValue(
+							MigLayoutInfo.m_verticalAlignmentMap,
+							generalLayoutData.verticalAlignment);
+			if (alignment != null && alignment != MigRowInfo.Alignment.UNKNOWN) {
+				return alignment;
+			}
+		}
+		// calculate
+		ComponentInfo component = (ComponentInfo) componentInGroup.getComponent();
+		// prepare begin/end column/row
+		ComponentGroup beginRow = GridConvertionHelper.getBeginForComponent(rows, componentInGroup);
+		ComponentGroup endRow = GridConvertionHelper.getEndForComponent(rows, componentInGroup);
+		Rectangle bounds = component.getBounds();
+		Dimension prefSize = component.getPreferredSize();
+		int bt = bounds.y;
+		int bb = bounds.bottom();
+		int rowTop = beginRow.getMin();
+		int rowBottom = endRow.getMax();
+		int rowCenter = rowTop + (rowBottom - rowTop) / 2;
+		//
+		int topOffset = bt - rowTop;
+		int bottomOffset = rowBottom - bb;
+		// prepare how much location of two sides will be changed for each alignment
+		int topDelta = topOffset + Math.abs(rowTop + prefSize.height - bb);
+		int bottomDelta = bottomOffset + Math.abs(rowBottom - prefSize.height - bt);
+		int fillDelta = topOffset + bottomOffset;
+		int centerDelta =
+				Math.abs(bt - (rowCenter - prefSize.height / 2))
+				+ Math.abs(bb - (rowCenter + prefSize.height / 2));
+		// set alignment
+		return getAlignment(
+				new int[]{topDelta, centerDelta, bottomDelta, fillDelta},
+				new MigRowInfo.Alignment[]{
+						MigRowInfo.Alignment.TOP,
+						MigRowInfo.Alignment.CENTER,
+						MigRowInfo.Alignment.BOTTOM,
+						MigRowInfo.Alignment.FILL});
+	}
 
-  /**
-   * @return the {@link Alignment} corresponding to the minimum delta value.
-   */
-  private static <A extends Enum<?>> A getAlignment(int[] deltas, A[] alignments) {
-    int minimum;
-    {
-      minimum = Integer.MAX_VALUE;
-      for (int i = 0; i < deltas.length; i++) {
-        int delta = deltas[i];
-        minimum = Math.min(minimum, delta);
-      }
-    }
-    // return corresponding alignment
-    return alignments[ArrayUtils.indexOf(deltas, minimum)];
-  }
+	/**
+	 * @return the {@link Alignment} corresponding to the minimum delta value.
+	 */
+	private static <A extends Enum<?>> A getAlignment(int[] deltas, A[] alignments) {
+		int minimum;
+		{
+			minimum = Integer.MAX_VALUE;
+			for (int i = 0; i < deltas.length; i++) {
+				int delta = deltas[i];
+				minimum = Math.min(minimum, delta);
+			}
+		}
+		// return corresponding alignment
+		return alignments[ArrayUtils.indexOf(deltas, minimum)];
+	}
 }
diff --git a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/MigLayoutInfo.java b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/MigLayoutInfo.java
index b57e5f9a2..aa9fdeff5 100644
--- a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/MigLayoutInfo.java
+++ b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/MigLayoutInfo.java
@@ -83,1441 +83,1441 @@
  * @coverage swing.MigLayout.model
  */
 public final class MigLayoutInfo extends LayoutInfo implements IPreferenceConstants {
-  private final List<MigColumnInfo> m_columns = Lists.newArrayList();
-  private final List<MigRowInfo> m_rows = Lists.newArrayList();
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public MigLayoutInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-    // force UnitValue initialization in "design time", to be able to get strings for alignments
-    ExecutionUtils.runDesignTime(new RunnableEx() {
-      public void run() throws Exception {
-        IDEUtil.LEFT.toString();
-      }
-    });
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Initialize
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void initialize() throws Exception {
-    super.initialize();
-    initializeMigLayoutGridAfterParse();
-    new SelectionActionsSupport(this);
-    new LayoutAssistantSupport(this) {
-      @Override
-      protected AbstractAssistantPage createConstraintsPage(Composite parent,
-          List<ObjectInfo> objects) {
-        return new CellConstraintsAssistantPage(parent, MigLayoutInfo.this, objects);
-      }
-    };
-    addContextMenuActions();
-    addConstraintsProperty();
-    addSplitFlowDirectionListener();
-  }
-
-  private void initializeMigLayoutGridAfterParse() {
-    addBroadcastListener(new ObjectInfoTreeComplete() {
-      public void invoke() throws Exception {
-        removeBroadcastListener(this);
-        if (isActive()) {
-          try {
-            getContainer().getContainer().doLayout();
-          } catch (Throwable e) {
-            DesignerPlugin.log(e);
-          }
-        }
-      }
-    });
-  }
-
-  private void addContextMenuActions() {
-    addBroadcastListener(new ObjectEventListener() {
-      @Override
-      public void addContextMenu(List<? extends ObjectInfo> objects,
-          ObjectInfo object,
-          IMenuManager manager) throws Exception {
-        addContextMenuActions(object, manager);
-      }
-    });
-  }
-
-  private void addConstraintsProperty() {
-    addBroadcastListener(new JavaInfoAddProperties() {
-      public void invoke(JavaInfo javaInfo, List<Property> properties) throws Exception {
-        if (isManagedObject(javaInfo)) {
-          ComponentInfo component = (ComponentInfo) javaInfo;
-          CellConstraintsSupport constraints = getConstraints(component);
-          properties.add(constraints.getCellProperty());
-        }
-      }
-    });
-  }
-
-  /**
-   * Updates flow direction specification, when operation with first component of splitted cell.
-   */
-  private void addSplitFlowDirectionListener() {
-    addBroadcastListener(new ObjectInfoDelete() {
-      @Override
-      public void before(ObjectInfo parent, ObjectInfo child) throws Exception {
-        if (isManagedObject(child)) {
-          ComponentInfo component = (ComponentInfo) child;
-          updateSplitFlowDirection(component);
-        }
-      }
-    });
-    addBroadcastListener(new JavaEventListener() {
-      @Override
-      public void moveBefore(JavaInfo child, ObjectInfo oldParent, JavaInfo newParent)
-          throws Exception {
-        if (isManagedObject(child)) {
-          ComponentInfo component = (ComponentInfo) child;
-          updateSplitFlowDirection(component);
-        }
-      }
-    });
-  }
-
-  private void updateSplitFlowDirection(ComponentInfo component) throws Exception {
-    CellConstraintsSupport constraints = getConstraints(component);
-    List<ComponentInfo> cellComponents = getCellComponents(component);
-    if (cellComponents.size() > 1) {
-      if (cellComponents.get(0) == component) {
-        // remove flow direction for component
-        boolean horizontalSplit = constraints.isHorizontalSplit();
-        constraints.setHorizontalSplit(null);
-        constraints.write();
-        // set flow direction for next component
-        if (cellComponents.size() > 2) {
-          ComponentInfo nextComponent = cellComponents.get(1);
-          CellConstraintsSupport nextConstraints = getConstraints(nextComponent);
-          nextConstraints.setHorizontalSplit(horizontalSplit);
-          nextConstraints.write();
-        }
-      }
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link LC} (parsed if needed) for this {@link MigLayout} instance.
-   */
-  LC getLC() {
-    MigLayout layout = (MigLayout) getObject();
-    Object layoutConstraints = layout.getLayoutConstraints();
-    if (layoutConstraints instanceof LC) {
-      return (LC) layoutConstraints;
-    } else {
-      return ConstraintParser.parseLayoutConstraint((String) layoutConstraints);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Context menu
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds {@link MigLayoutInfo} actions into context menu.
-   */
-  private void addContextMenuActions(ObjectInfo object, IMenuManager manager) throws Exception {
-    if (object == getContainer()) {
-      manager.appendToGroup(
-          IContextMenuConstants.GROUP_TOP,
-          new EditDimensionsAction(ModelMessages.MigLayoutInfo_editColumns, true));
-      manager.appendToGroup(
-          IContextMenuConstants.GROUP_TOP,
-          new EditDimensionsAction(ModelMessages.MigLayoutInfo_editRows, false));
-    }
-    if (object instanceof ComponentInfo && object.getParent() == getContainer()) {
-      ComponentInfo component = (ComponentInfo) object;
-      CellConstraintsSupport support = getConstraints(component);
-      support.addContextMenu(manager);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Context menu: EditDimensionsAction
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final class EditDimensionsAction extends Action {
-    private final boolean m_horizontal;
-
-    public EditDimensionsAction(String text, boolean horizontal) {
-      super(text);
-      m_horizontal = horizontal;
-    }
-
-    @Override
-    public void run() {
-      Shell shell = DesignerPlugin.getShell();
-      if (m_horizontal) {
-        new ColumnsDialog(shell, MigLayoutInfo.this).open();
-      } else {
-        new RowsDialog(shell, MigLayoutInfo.this).open();
-      }
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access columns/rows
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link List} of {@link MigColumnInfo}.
-   */
-  public List<MigColumnInfo> getColumns() {
-    return m_columns;
-  }
-
-  /**
-   * @return the {@link List} of {@link MigRowInfo}.
-   */
-  public List<MigRowInfo> getRows() {
-    return m_rows;
-  }
-
-  /**
-   * Sets the new {@link List} of {@link MigColumnInfo}.
-   */
-  public void setColumns(List<MigColumnInfo> columns) throws Exception {
-    m_columns.clear();
-    m_columns.addAll(columns);
-    writeDimensions();
-  }
-
-  /**
-   * Sets the new {@link List} of {@link MigRowInfo}.
-   */
-  public void setRows(List<MigRowInfo> rows) throws Exception {
-    m_rows.clear();
-    m_rows.addAll(rows);
-    writeDimensions();
-  }
-
-  /**
-   * Ensures that we have enough columns/rows models, for each column/row in {@link MigLayout}
-   * instance.
-   */
-  private void updateColumnsRows() throws Exception {
-    // update columns
-    {
-      int columnCount = getGridInfo().getColumnCount();
-      if (m_columns.size() != columnCount) {
-        m_columns.clear();
-        for (int i = 0; i < columnCount; i++) {
-          m_columns.add(new MigColumnInfo(this));
-        }
-      }
-      // fetch constraint
-      for (MigColumnInfo column : m_columns) {
-        column.updateConstraint();
-      }
-    }
-    // update rows
-    {
-      int rowCount = getGridInfo().getRowCount();
-      if (m_rows.size() != rowCount) {
-        m_rows.clear();
-        for (int i = 0; i < rowCount; i++) {
-          m_rows.add(new MigRowInfo(this));
-        }
-      }
-      // fetch constraint
-      for (MigRowInfo row : m_rows) {
-        row.updateConstraint();
-      }
-    }
-  }
-
-  /**
-   * If there are components that span multiple columns/rows, and no other "real" components in
-   * these columns/rows, then removes these excess columns/rows.
-   */
-  public void normalizeSpanning() throws Exception {
-    boolean columnRowDeleted = true;
-    while (columnRowDeleted) {
-      columnRowDeleted = false;
-      // prepare filled columns/rows
-      final boolean[] filledColumns = new boolean[m_columns.size()];
-      final boolean[] filledRows = new boolean[m_rows.size()];
-      visitGridComponents(new MigComponentVisitor() {
-        public void visit(ComponentInfo bean, CellConstraintsSupport constraints) throws Exception {
-          filledColumns[constraints.getX()] = true;
-          filledRows[constraints.getY()] = true;
-        }
-      });
-      // remove empty columns
-      for (int column = filledColumns.length - 1; column >= 0; column--) {
-        if (!filledColumns[column]) {
-          deleteColumn(column);
-          columnRowDeleted = true;
-          break;
-        }
-      }
-      // remove empty rows
-      for (int row = filledRows.length - 1; row >= 0; row--) {
-        if (!filledRows[row]) {
-          deleteRow(row);
-          columnRowDeleted = true;
-          break;
-        }
-      }
-    }
-    // write dimensions
-    writeDimensions();
-  }
-
-  /**
-   * @return <code>true</code> if dimensions of this layout can be changed. We can change them only
-   *         if we created layout using constructor.
-   */
-  public boolean canChangeDimensions() {
-    return getCreationSupport() instanceof ConstructorCreationSupport;
-  }
-
-  /**
-   * Writes columns/rows to the source.
-   */
-  public void writeDimensions() throws Exception {
-    MigLayout layout = (MigLayout) getObject();
-    // prepare source for LC
-    String layoutConstraintsSource;
-    {
-      String layoutConstraintsString;
-      Object layoutConstraints = layout.getLayoutConstraints();
-      if (layoutConstraints instanceof LC) {
-        layoutConstraintsString = IDEUtil.getConstraintString((LC) layoutConstraints, false);
-      } else {
-        layoutConstraintsString = (String) layoutConstraints;
-      }
-      layoutConstraintsSource =
-          StringConverter.INSTANCE.toJavaSource(this, layoutConstraintsString);
-    }
-    // prepare source for columns/rows
-    String columnsSource = getDimensionsSource(m_columns, true);
-    String rowsSource = getDimensionsSource(m_rows, false);
-    // write constructor
-    {
-      ConstructorCreationSupport creationSupport =
-          (ConstructorCreationSupport) getCreationSupport();
-      ClassInstanceCreation creation = creationSupport.getCreation();
-      getEditor().replaceCreationArguments(
-          creation,
-          ImmutableList.of(MessageFormat.format(
-              "{0}, {1}, {2}",
-              layoutConstraintsSource,
-              columnsSource,
-              rowsSource)));
-      setCreationSupport(new ConstructorCreationSupport(creation));
-    }
-  }
-
-  /**
-   * @return the source for dimension constraints.
-   */
-  private static String getDimensionsSource(List<? extends MigDimensionInfo> dimensions,
-      boolean cols) throws Exception {
-    DimConstraint[] constraints = new DimConstraint[dimensions.size()];
-    for (int i = 0; i < dimensions.size(); i++) {
-      constraints[i] = dimensions.get(i).m_constraint;
-    }
-    //
-    String constraintString;
-    {
-      AC ac = new AC();
-      ac.setConstaints(constraints);
-      constraintString = IDEUtil.getConstraintString(ac, false, cols);
-    }
-    // return as source
-    return StringConverter.INSTANCE.toJavaSource(null, constraintString);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Properties
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected List<Property> getPropertyList() throws Exception {
-    List<Property> properties = super.getPropertyList();
-    properties.add(new DimensionsProperty(this, true));
-    properties.add(new DimensionsProperty(this, false));
-    return properties;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // CellConstraintsSupport access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final Map<ComponentInfo, CellConstraintsSupport> m_constraints = Maps.newHashMap();
-
-  /**
-   * @return the {@link CellConstraintsSupport} for given {@link ComponentInfo}.
-   */
-  public static CellConstraintsSupport getConstraints(ComponentInfo component) {
-    ContainerInfo container = (ContainerInfo) component.getParent();
-    Assert.isTrue(container.getChildrenComponents().contains(component));
-    Assert.instanceOf(MigLayoutInfo.class, container.getLayout());
-    //
-    MigLayoutInfo layout = (MigLayoutInfo) container.getLayout();
-    CellConstraintsSupport support = layout.m_constraints.get(component);
-    if (support == null) {
-      support = new CellConstraintsSupport(layout, component);
-      layout.m_constraints.put(component, support);
-    }
-    return support;
-  }
-
-  @Override
-  public void onSet() throws Exception {
-    super.onSet();
-    MigLayoutConverter.convert(getContainer(), this);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Column commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Inserts new {@link MigColumnInfo} into target index.
-   */
-  public void insertColumn(int targetIndex) throws Exception {
-    moveComponentsForInsert(targetIndex, true, -1, false);
-    m_columns.add(targetIndex, new MigColumnInfo(this));
-    writeDimensions();
-  }
-
-  /**
-   * Deletes the {@link MigColumnInfo} with given index.
-   */
-  public void deleteColumn(int index) throws Exception {
-    moveComponentsForDelete(index, true, -1, false);
-    m_columns.remove(index);
-    writeDimensions();
-  }
-
-  /**
-   * Deletes the {@link ComponentInfo}'s that located in {@link MigColumnInfo} with given index.
-   */
-  public void clearColumn(final int index) throws Exception {
-    visitGridComponents(new MigComponentVisitor() {
-      public void visit(ComponentInfo component, CellConstraintsSupport cell) throws Exception {
-        if (cell.getX() == index) {
-          component.delete();
-        }
-      }
-    });
-  }
-
-  /**
-   * Splits the {@link MigColumnInfo} with given index, i.e. adds duplicate of this
-   * {@link MigColumnInfo}.
-   */
-  public void splitColumn(final int index) throws Exception {
-    // update dimensions
-    {
-      MigColumnInfo column = m_columns.get(index);
-      {
-        MigColumnInfo newColumn = new MigColumnInfo(this);
-        m_columns.add(index, newColumn);
-        newColumn.setString(column.getString(false));
-      }
-      writeDimensions();
-    }
-    // update constraints
-    visitGridComponents(new MigComponentVisitor() {
-      public void visit(ComponentInfo component, CellConstraintsSupport cell) throws Exception {
-        if (cell.getX() > index) {
-          cell.updateX(1);
-        } else if (cell.getX() + cell.getWidth() > index) {
-          cell.updateWidth(1);
-        }
-        cell.write();
-      }
-    });
-  }
-
-  /**
-   * Moves {@link MigColumnInfo} at given index into target index.
-   */
-  public void moveColumn(final int index, final int targetIndex) throws Exception {
-    MigColumnInfo column = m_columns.remove(index);
-    if (index < targetIndex) {
-      // add column
-      m_columns.add(targetIndex - 1, column);
-      // change constraints
-      visitGridComponents(new MigComponentVisitor() {
-        public void visit(ComponentInfo bean, CellConstraintsSupport constraints) throws Exception {
-          int x = constraints.getX();
-          int w = constraints.getWidth();
-          if (x < index) {
-            // if component contains source and doesn't contain target, decrease size
-            if (x + w - 1 >= index && x + w - 1 < targetIndex) {
-              constraints.updateWidth(-1);
-            }
-          } else if (x == index) {
-            constraints.setX(targetIndex - 1);
-            constraints.setWidth(1);
-          } else if (x > index && x < targetIndex) {
-            constraints.updateX(-1);
-            // if component contains target, increase size
-            if (x + w - 1 >= targetIndex) {
-              constraints.updateWidth(1);
-            }
-          } else if (x >= 1 + targetIndex) {
-            // after source and target - do nothing
-          }
-          constraints.write();
-        }
-      });
-    } else {
-      // add column
-      m_columns.add(targetIndex, column);
-      // change constraints
-      visitGridComponents(new MigComponentVisitor() {
-        public void visit(ComponentInfo bean, CellConstraintsSupport constraints) throws Exception {
-          int x = constraints.getX();
-          int w = constraints.getWidth();
-          if (x < targetIndex) {
-            // if component doesn't contains source and contains target, increase size
-            if (x + w - 1 >= targetIndex && x + w - 1 < index) {
-              constraints.updateWidth(1);
-            }
-          } else if (x < index) {
-            constraints.updateX(1);
-            // if component contains source, decrease size
-            if (x + w - 1 >= index) {
-              constraints.updateWidth(-1);
-            }
-          } else if (x == index) {
-            constraints.setX(targetIndex);
-            constraints.setWidth(1);
-          } else if (x > index) {
-            // after source and target - do nothing
-          }
-          constraints.write();
-        }
-      });
-    }
-    // finalize
-    writeDimensions();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Row commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Inserts new {@link MigRowInfo} into target index.
-   */
-  public void insertRow(int targetIndex) throws Exception {
-    moveComponentsForInsert(-1, false, targetIndex, true);
-    m_rows.add(targetIndex, new MigRowInfo(this));
-    writeDimensions();
-  }
-
-  /**
-   * Deletes the {@link MigRowInfo} with given index.
-   */
-  public void deleteRow(int index) throws Exception {
-    moveComponentsForDelete(-1, false, index, true);
-    m_rows.remove(index);
-    writeDimensions();
-  }
-
-  /**
-   * Deletes the {@link ComponentInfo}'s that located in {@link MigRowInfo} with given index.
-   */
-  public void clearRow(final int index) throws Exception {
-    visitGridComponents(new MigComponentVisitor() {
-      public void visit(ComponentInfo component, CellConstraintsSupport cell) throws Exception {
-        if (cell.getY() == index) {
-          component.delete();
-        }
-      }
-    });
-  }
-
-  /**
-   * Splits the {@link MigRowInfo} with given index, i.e. adds duplicate of this {@link MigRowInfo}.
-   */
-  public void splitRow(final int index) throws Exception {
-    // update dimensions
-    {
-      MigRowInfo row = m_rows.get(index);
-      {
-        MigRowInfo newRow = new MigRowInfo(this);
-        m_rows.add(index, newRow);
-        newRow.setString(row.getString(false));
-      }
-      writeDimensions();
-    }
-    // update constraints
-    visitGridComponents(new MigComponentVisitor() {
-      public void visit(ComponentInfo component, CellConstraintsSupport cell) throws Exception {
-        if (cell.getY() > index) {
-          cell.updateY(1);
-        } else if (cell.getY() + cell.getHeight() > index) {
-          cell.updateHeight(1);
-        }
-        cell.write();
-      }
-    });
-  }
-
-  /**
-   * Moves {@link MigRowInfo} at given index into target index.
-   */
-  public void moveRow(final int index, final int targetIndex) throws Exception {
-    MigRowInfo row = m_rows.remove(index);
-    if (index < targetIndex) {
-      // add column
-      m_rows.add(targetIndex - 1, row);
-      // change constraints
-      visitGridComponents(new MigComponentVisitor() {
-        public void visit(ComponentInfo bean, CellConstraintsSupport constraints) throws Exception {
-          int y = constraints.getY();
-          int h = constraints.getHeight();
-          if (y < index) {
-            // if component contains source and doesn't contain target, decrease size
-            if (y + h - 1 >= index && y + h - 1 < targetIndex) {
-              constraints.updateHeight(-1);
-            }
-          } else if (y == index) {
-            constraints.setY(targetIndex - 1);
-            constraints.setHeight(1);
-          } else if (y > index && y < targetIndex) {
-            constraints.updateY(-1);
-            // if component contains target, increase size
-            if (y + h - 1 >= targetIndex) {
-              constraints.updateHeight(1);
-            }
-          } else if (y >= 1 + targetIndex) {
-            // after source and target - do nothing
-          }
-          constraints.write();
-        }
-      });
-    } else {
-      // add column
-      m_rows.add(targetIndex, row);
-      // change constraints
-      visitGridComponents(new MigComponentVisitor() {
-        public void visit(ComponentInfo bean, CellConstraintsSupport constraints) throws Exception {
-          int y = constraints.getY();
-          int h = constraints.getHeight();
-          if (y < targetIndex) {
-            // if component doesn't contains source and contains target, increase size
-            if (y + h - 1 >= targetIndex && y + h - 1 < index) {
-              constraints.updateHeight(1);
-            }
-          } else if (y < index) {
-            constraints.updateY(1);
-            // if component contains source, decrease size
-            if (y + h - 1 >= index) {
-              constraints.updateHeight(-1);
-            }
-          } else if (y == index) {
-            constraints.setY(targetIndex);
-            constraints.setHeight(1);
-          } else if (y > index) {
-            // after source and target - do nothing
-          }
-          constraints.write();
-        }
-      });
-    }
-    // finalize
-    writeDimensions();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets cells bounds for given {@link ComponentInfo}, for example during spanning.
-   */
-  public void command_setCells(ComponentInfo component, Rectangle cells) throws Exception {
-    // force dimensions in MigLayout creation, because in some cases MigLayout can "optimize"
-    // columns/rows, if these columns/rows contain only spanned parts of components
-    writeDimensions();
-    makeExplicitCell();
-    // OK, now we can safely update constraints
-    CellConstraintsSupport constraints = getConstraints(component);
-    constraints.setX(cells.x);
-    constraints.setY(cells.y);
-    constraints.setWidth(cells.width);
-    constraints.setHeight(cells.height);
-    constraints.write();
-    // write all constraints (in ideal case - only this one)
-    writeAllConstraints();
-  }
-
-  /**
-   * Creates new {@link ComponentInfo} in given cell.
-   *
-   * @param newComponent
-   *          the new {@link ComponentInfo} to create.
-   * @param column
-   *          the column in {@link MigLayout} terms (0 based).
-   * @param row
-   *          the row in {@link MigLayout} terms (0 based).
-   */
-  public void command_CREATE(ComponentInfo newComponent,
-      int column,
-      boolean insertColumn,
-      int row,
-      boolean insertRow) throws Exception {
-    makeExplicitCell();
-    Point cell = prepareCell(column, insertColumn, row, insertRow);
-    // do add
-    ComponentInfo nextComponent = getReference(column, row, null);
-    add(newComponent, "\"\"", nextComponent);
-    // set bounds
-    {
-      CellConstraintsSupport constraints = getConstraints(newComponent);
-      constraints.setX(cell.x);
-      constraints.setY(cell.y);
-    }
-    // write all constraints (in ideal case - only this one)
-    writeAllConstraints();
-    //
-    doAutomaticAlignment(newComponent);
-  }
-
-  /**
-   * Moves existing {@link ComponentInfo} into new cell.
-   */
-  public void command_MOVE(ComponentInfo component,
-      int column,
-      boolean insertColumn,
-      int row,
-      boolean insertRow) throws Exception {
-    makeExplicitCell();
-    Point cell = prepareCell(column, insertColumn, row, insertRow);
-    // move in components
-    {
-      ComponentInfo nextComponent = getReference(column, row, component);
-      move(component, "\"\"", nextComponent);
-    }
-    // move in grid
-    {
-      CellConstraintsSupport constraints = getConstraints(component);
-      // new bounds
-      constraints.setX(cell.x);
-      constraints.setY(cell.y);
-      constraints.setWidth(1);
-      constraints.setHeight(1);
-      // now component in cell, not docked
-      constraints.setDockSide(null);
-      // write all constraints (in ideal case - only this one)
-      writeAllConstraints();
-    }
-  }
-
-  /**
-   * Forces explicit <code>cell</code> tags for all components.
-   *
-   * @see {@link CellConstraintsSupport#makeExplicitCell()}.
-   */
-  private void makeExplicitCell() {
-    for (ComponentInfo component : getContainer().getChildrenComponents()) {
-      CellConstraintsSupport constraints = getConstraints(component);
-      constraints.makeExplicitCell();
-    }
-  }
-
-  /**
-   * Invokes {@link CellConstraintsSupport#write()} for all constraints.
-   */
-  private void writeAllConstraints() throws Exception {
-    for (ComponentInfo component : getContainer().getChildrenComponents()) {
-      CellConstraintsSupport constraints = getConstraints(component);
-      constraints.write();
-    }
-  }
-
-  /**
-   * @return the {@link ComponentInfo} that should be used as reference of adding into given cell.
-   *
-   * @param exclude
-   *          the {@link ComponentInfo} that should not be checked, for example because we move it
-   *          now.
-   */
-  private ComponentInfo getReference(int column, int row, ComponentInfo exclude) throws Exception {
-    for (ComponentInfo component : getContainer().getChildrenComponents()) {
-      if (component != exclude) {
-        CellConstraintsSupport constraints = getConstraints(component);
-        if (constraints.getY() > row || constraints.getY() == row && constraints.getX() >= column) {
-          return component;
-        }
-      }
-    }
-    // no reference
-    return null;
-  }
-
-  /**
-   * Prepares cell with given column/row - inserts columns/rows if necessary.
-   */
-  private Point prepareCell(int column, boolean insertColumn, int row, boolean insertRow)
-      throws Exception {
-    boolean writeDimensions = false;
-    if (insertColumn || insertRow) {
-      // move existing components
-      moveComponentsForInsert(column, insertColumn, row, insertRow);
-      // insert empty column/row
-      if (insertColumn) {
-        m_columns.add(column, new MigColumnInfo(this));
-      }
-      if (insertRow) {
-        m_rows.add(row, new MigRowInfo(this));
-      }
-      // write dimensions
-      writeDimensions = true;
-    }
-    // append columns
-    while (m_columns.size() <= column) {
-      m_columns.add(new MigColumnInfo(this));
-      writeDimensions = true;
-    }
-    // append rows
-    while (m_rows.size() <= row) {
-      m_rows.add(new MigRowInfo(this));
-      writeDimensions = true;
-    }
-    // write dimensions
-    if (writeDimensions) {
-      writeDimensions();
-    }
-    // return new cell
-    return new Point(column, row);
-  }
-
-  /**
-   * Moves/resizes components constraints for inserting single column/row.
-   */
-  private void moveComponentsForInsert(final int column,
-      final boolean insertColumn,
-      final int row,
-      final boolean insertRow) throws Exception {
-    visitGridComponents(new MigComponentVisitor() {
-      public void visit(ComponentInfo component, CellConstraintsSupport cell) throws Exception {
-        if (insertColumn) {
-          if (cell.getX() >= column) {
-            cell.updateX(1);
-          } else if (cell.getX() + cell.getWidth() > column) {
-            cell.updateWidth(1);
-          }
-        }
-        if (insertRow) {
-          if (cell.getY() >= row) {
-            cell.updateY(1);
-          } else if (cell.getY() + cell.getHeight() > row) {
-            cell.updateHeight(1);
-          }
-        }
-        cell.write();
-      }
-    });
-  }
-
-  /**
-   * Moves/resizes components constraints for deleting single column/row.
-   */
-  private void moveComponentsForDelete(final int column,
-      final boolean deleteColumn,
-      final int row,
-      final boolean deleteRow) throws Exception {
-    visitGridComponents(new MigComponentVisitor() {
-      public void visit(ComponentInfo component, CellConstraintsSupport cell) throws Exception {
-        if (deleteColumn) {
-          if (cell.getX() == column) {
-            component.delete();
-          } else if (cell.getX() >= column) {
-            cell.updateX(-1);
-          } else if (cell.getX() + cell.getWidth() > column) {
-            cell.updateWidth(-1);
-          }
-        }
-        if (deleteRow) {
-          if (cell.getY() == row) {
-            component.delete();
-          } else if (cell.getY() >= row) {
-            cell.updateY(-1);
-          } else if (cell.getY() + cell.getHeight() > row) {
-            cell.updateHeight(-1);
-          }
-        }
-        cell.write();
-      }
-    });
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Split support
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link List} of components that are located in same cell as given
-   *         {@link ComponentInfo}.
-   */
-  public List<ComponentInfo> getCellComponents(ComponentInfo component) {
-    CellConstraintsSupport constraints = getConstraints(component);
-    return getCellComponents(constraints.getX(), constraints.getY());
-  }
-
-  /**
-   * @return the {@link List} of components that are located in given cell (usually zero or one, but
-   *         in case of splitted cell - more than one).
-   */
-  public List<ComponentInfo> getCellComponents(final int column, final int row) {
-    final List<ComponentInfo> components = Lists.newArrayList();
-    visitGridComponents(new MigComponentVisitor() {
-      public void visit(ComponentInfo component, CellConstraintsSupport constraints)
-          throws Exception {
-        int x = constraints.getX();
-        int y = constraints.getY();
-        int w = constraints.getWidth();
-        int h = constraints.getHeight();
-        if (x <= column && column < x + w && y <= row && row < y + h) {
-          components.add(component);
-        }
-      }
-    });
-    return components;
-  }
-
-  /**
-   * Adds new component into cell that already has one or more (in case of already splitted cell)
-   * components.
-   *
-   * @param column
-   *          the target column for new component.
-   * @param row
-   *          the target row for new component.
-   * @param horizontalFlow
-   *          specifies if <code>flowx</code> or <code>flowy</code> should be set, not used, if cell
-   *          was already splitted.
-   */
-  public void command_splitCREATE(int column,
-      int row,
-      boolean horizontalFlow,
-      ComponentInfo newComponent,
-      ComponentInfo nextComponent) throws Exception {
-    horizontalFlow = getUpdatedSplitFlow(column, row, horizontalFlow);
-    // add new component
-    add(newComponent, "\"\"", nextComponent);
-    split_updateCellFlow(column, row, horizontalFlow, newComponent);
-  }
-
-  /**
-   * Moves component into cell that already has one or more (in case of already splitted cell)
-   * components.
-   *
-   * @param column
-   *          the target column for moved component.
-   * @param row
-   *          the target row for moved component.
-   * @param horizontalFlow
-   *          specifies if <code>flowx</code> or <code>flowy</code> should be set, not used, if cell
-   *          was already splitted.
-   */
-  public void command_splitMOVE(int column,
-      int row,
-      boolean horizontalFlow,
-      ComponentInfo movedComponent,
-      ComponentInfo nextComponent) throws Exception {
-    horizontalFlow = getUpdatedSplitFlow(column, row, horizontalFlow);
-    move(movedComponent, "\"\"", nextComponent);
-    split_updateCellFlow(column, row, horizontalFlow, movedComponent);
-  }
-
-  /**
-   * Places given component into cell (already occupied by one or more components), updates flow
-   * direction of splitted cell.
-   */
-  private void split_updateCellFlow(int column,
-      int row,
-      boolean horizontalFlow,
-      ComponentInfo movedComponent) throws Exception {
-    // set bounds
-    {
-      CellConstraintsSupport constraints = getConstraints(movedComponent);
-      constraints.setX(column);
-      constraints.setY(row);
-    }
-    // set flow for first component, remove for next components
-    {
-      List<ComponentInfo> components = getCellComponents(column, row);
-      boolean isFirst = true;
-      for (ComponentInfo component : components) {
-        CellConstraintsSupport constraints = MigLayoutInfo.getConstraints(component);
-        if (isFirst) {
-          isFirst = false;
-          constraints.setHorizontalSplit(Boolean.valueOf(horizontalFlow));
-        } else {
-          constraints.setHorizontalSplit(null);
-        }
-      }
-    }
-    // write all constraints
-    writeAllConstraints();
-  }
-
-  /**
-   * @return the updated flow direction (use existing direction, if cell is already splitted), or
-   *         requested direction.
-   */
-  private boolean getUpdatedSplitFlow(int column, int row, boolean horizontalFlow) {
-    List<ComponentInfo> components = getCellComponents(column, row);
-    if (components.size() > 1) {
-      horizontalFlow = MigLayoutInfo.getConstraints(components.get(0)).isHorizontalSplit();
-    }
-    return horizontalFlow;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Visiting
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Visitor for {@link ComponentInfo} and their {@link CellConstraintsSupport}.
-   */
-  private interface MigComponentVisitor {
-    void visit(ComponentInfo component, CellConstraintsSupport constraints) throws Exception;
-  }
-
-  /**
-   * Visits grid {@link ComponentInfo}'s of this {@link ContainerInfo}.
-   */
-  private void visitGridComponents(final MigComponentVisitor visitor) {
-    ExecutionUtils.runRethrow(new RunnableEx() {
-      public void run() throws Exception {
-        visitAllComponents(new MigComponentVisitor() {
-          public void visit(ComponentInfo component, CellConstraintsSupport constraints)
-              throws Exception {
-            if (constraints.getDockSide() == null) {
-              visitor.visit(component, constraints);
-            }
-          }
-        });
-      }
-    });
-  }
-
-  /**
-   * Visits all {@link ComponentInfo}'s of this {@link ContainerInfo}.
-   */
-  private void visitAllComponents(MigComponentVisitor visitor) throws Exception {
-    for (ComponentInfo component : getContainer().getChildrenComponents()) {
-      CellConstraintsSupport cell = getConstraints(component);
-      visitor.visit(component, cell);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Automatic alignment
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Performs automatic alignment, such as grab/fill for {@link JTextField} or {@link JTable}, right
-   * alignment for {@link JLabel}.
-   */
-  private void doAutomaticAlignment(ComponentInfo component) throws Exception {
-    final IPreferenceStore preferences = Activator.getDefault().getPreferenceStore();
-    GridAlignmentHelper.doAutomaticAlignment(component, new IAlignmentProcessor<ComponentInfo>() {
-      public boolean grabEnabled() {
-        return preferences.getBoolean(P_ENABLE_GRAB);
-      }
-
-      public boolean rightEnabled() {
-        return preferences.getBoolean(P_ENABLE_RIGHT_ALIGNMENT);
-      }
-
-      public ComponentInfo getComponentAtLeft(ComponentInfo component) {
-        CellConstraintsSupport constraints = getConstraints(component);
-        return getComponentAt(constraints.getX() - 1, constraints.getY());
-      }
-
-      public ComponentInfo getComponentAtRight(ComponentInfo component) {
-        CellConstraintsSupport constraints = getConstraints(component);
-        return getComponentAt(constraints.getX() + 1, constraints.getY());
-      }
-
-      public void setGrabFill(ComponentInfo component, boolean horizontal) throws Exception {
-        CellConstraintsSupport constraints = getConstraints(component);
-        if (horizontal) {
-          getColumns().get(constraints.getX()).setGrow(100f);
-          constraints.setHorizontalAlignment(MigColumnInfo.Alignment.FILL);
-        } else {
-          getRows().get(constraints.getY()).setGrow(100f);
-          constraints.setVerticalAlignment(MigRowInfo.Alignment.FILL);
-        }
-        writeDimensions();
-        constraints.write();
-      }
-
-      public void setRightAlignment(ComponentInfo component) throws Exception {
-        CellConstraintsSupport constraints = getConstraints(component);
-        constraints.setHorizontalAlignment(MigColumnInfo.Alignment.TRAILING);
-        constraints.write();
-      }
-    });
-  }
-
-  /**
-   * @return the {@link ComponentInfo} with given top-left cell, may be <code>null</code>.
-   */
-  private ComponentInfo getComponentAt(int x, int y) {
-    for (ComponentInfo component : getContainer().getChildrenComponents()) {
-      CellConstraintsSupport constraints = getConstraints(component);
-      if (constraints.getX() == x && constraints.getY() == y) {
-        return component;
-      }
-    }
-    // no such component
-    return null;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void refresh_dispose() throws Exception {
-    m_gridInfo = null;
-    super.refresh_dispose();
-  }
-
-  @Override
-  protected void refresh_afterCreate2() throws Exception {
-    super.refresh_afterCreate2();
-    Container container = getContainer().getContainer();
-    // do layout, use some reasonable size
-    {
-      java.awt.Dimension containerSizeOriginal = container.getSize();
-      try {
-        container.setSize(450, 300);
-        container.doLayout();
-      } finally {
-        container.setSize(containerSizeOriginal);
-      }
-    }
-    // set constant size for empty columns/rows
-    {
-      Interval[] columnIntervals = getIntervalsForOrigins(IDEUtil.getColumnSizes(container), 0);
-      Interval[] rowIntervals = getIntervalsForOrigins(IDEUtil.getRowSizes(container), 0);
-      // update columns
-      for (int i = 0; i < columnIntervals.length; i++) {
-        Interval interval = columnIntervals[i];
-        if (interval.length() == 0) {
-          String cons = "cell " + i + " 0,width " + m_defaultColumnSize + "px";
-          container.add(new JLabel(), cons);
-        }
-      }
-      // update rows
-      for (int i = 0; i < rowIntervals.length; i++) {
-        Interval interval = rowIntervals[i];
-        if (interval.length() == 0) {
-          String cons = "cell 0 " + i + ",height " + m_defaultRowSize + "px";
-          container.add(new JLabel(), cons);
-        }
-      }
-      // may be column/row constraints were updated, force layout
-      container.doLayout();
-    }
-  }
-
-  @Override
-  protected void refresh_fetch() throws Exception {
-    super.refresh_fetch();
-    updateColumnsRows();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IGridInfo support
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private IGridInfo m_gridInfo;
-  private final int m_defaultColumnSize = 25;
-  private final int m_gapColumnSize = 4;
-  private final int m_defaultRowSize = 25;
-  private final int m_gapRowSize = 4;
-
-  /**
-   * @return the {@link IGridInfo} that describes this layout.
-   */
-  public IGridInfo getGridInfo() {
-    if (m_gridInfo == null) {
-      ExecutionUtils.runRethrow(new RunnableEx() {
-        public void run() throws Exception {
-          createGridInfo();
-        }
-      });
-    }
-    return m_gridInfo;
-  }
-
-  /**
-   * Initializes {@link #m_gridInfo}.
-   */
-  private void createGridInfo() throws Exception {
-    final Insets insets = getContainer().getInsets();
-    // prepare intervals
-    final Interval[] columnIntervals;
-    final Interval[] rowIntervals;
-    {
-      Container container = getContainer().getContainer();
-      if (IDEUtil.getColumnSizes(container) == null) {
-        container.doLayout();
-      }
-      columnIntervals = getIntervalsForOrigins(IDEUtil.getColumnSizes(container), insets.left);
-      rowIntervals = getIntervalsForOrigins(IDEUtil.getRowSizes(container), insets.top);
-    }
-    // prepare cells
-    final Map<ComponentInfo, Rectangle> componentToCells = Maps.newHashMap();
-    final Map<Point, ComponentInfo> occupiedCells = Maps.newHashMap();
-    visitGridComponents(new MigComponentVisitor() {
-      public void visit(ComponentInfo component, CellConstraintsSupport support) throws Exception {
-        Rectangle cells =
-            new Rectangle(support.getX(), support.getY(), support.getWidth(), support.getHeight());
-        // fill map: ComponentInfo -> cells Rectangle
-        componentToCells.put(component, cells);
-        // fill occupied cells map
-        for (int x = cells.x; x < cells.right(); x++) {
-          for (int y = cells.y; y < cells.bottom(); y++) {
-            occupiedCells.put(new Point(x, y), component);
-          }
-        }
-      }
-    });
-    // create IGridInfo instance
-    m_gridInfo = new IGridInfo() {
-      ////////////////////////////////////////////////////////////////////////////
-      //
-      // Dimensions
-      //
-      ////////////////////////////////////////////////////////////////////////////
-      public int getColumnCount() {
-        return columnIntervals.length;
-      }
-
-      public int getRowCount() {
-        return rowIntervals.length;
-      }
-
-      ////////////////////////////////////////////////////////////////////////////
-      //
-      // Intervals
-      //
-      ////////////////////////////////////////////////////////////////////////////
-      public Interval[] getColumnIntervals() {
-        return columnIntervals;
-      }
-
-      public Interval[] getRowIntervals() {
-        return rowIntervals;
-      }
-
-      ////////////////////////////////////////////////////////////////////////////
-      //
-      // Cells
-      //
-      ////////////////////////////////////////////////////////////////////////////
-      public Rectangle getComponentCells(IAbstractComponentInfo component) {
-        Assert.instanceOf(ComponentInfo.class, component);
-        // component in splitted cell
-        {
-          List<ComponentInfo> components = getCellComponents((ComponentInfo) component);
-          if (components.size() > 1 && components.get(0) != component) {
-            return getComponentCells(components.get(0));
-          }
-        }
-        // normal component
-        return componentToCells.get(component);
-      }
-
-      public Rectangle getCellsRectangle(Rectangle cells) {
-        if (cells == null) {
-          return new Rectangle(0, 0, 0, 0);
-        }
-        int x = columnIntervals[cells.x].begin();
-        int y = rowIntervals[cells.y].begin();
-        if (cells.isEmpty()) {
-          return new Rectangle(x, y, 0, 0);
-        } else {
-          int w = columnIntervals[cells.right() - 1].end() - x;
-          int h = rowIntervals[cells.bottom() - 1].end() - y;
-          return new Rectangle(x, y, w + 1, h + 1);
-        }
-      }
-
-      ////////////////////////////////////////////////////////////////////////////
-      //
-      // Feedback
-      //
-      ////////////////////////////////////////////////////////////////////////////
-      public boolean isRTL() {
-        return false;
-      }
-
-      public Insets getInsets() {
-        return insets;
-      }
-
-      ////////////////////////////////////////////////////////////////////////////
-      //
-      // Virtual columns
-      //
-      ////////////////////////////////////////////////////////////////////////////
-      public boolean hasVirtualColumns() {
-        return true;
-      }
-
-      public int getVirtualColumnSize() {
-        return m_defaultColumnSize;
-      }
-
-      public int getVirtualColumnGap() {
-        return m_gapColumnSize;
-      }
-
-      ////////////////////////////////////////////////////////////////////////////
-      //
-      // Virtual rows
-      //
-      ////////////////////////////////////////////////////////////////////////////
-      public boolean hasVirtualRows() {
-        return true;
-      }
-
-      public int getVirtualRowSize() {
-        return m_defaultRowSize;
-      }
-
-      public int getVirtualRowGap() {
-        return m_gapRowSize;
-      }
-
-      ////////////////////////////////////////////////////////////////////////////
-      //
-      // Checks
-      //
-      ////////////////////////////////////////////////////////////////////////////
-      public IAbstractComponentInfo getOccupied(int column, int row) {
-        return occupiedCells.get(new Point(column, row));
-      }
-    };
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Manage general layout data.
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  //MigColumnInfo.Alignment
-  public static final BiMap<GeneralLayoutData.HorizontalAlignment, MigColumnInfo.Alignment> m_horizontalAlignmentMap =
-      ImmutableBiMap.of(
-          GeneralLayoutData.HorizontalAlignment.LEFT,
-          MigColumnInfo.Alignment.LEFT,
-          GeneralLayoutData.HorizontalAlignment.CENTER,
-          MigColumnInfo.Alignment.CENTER,
-          GeneralLayoutData.HorizontalAlignment.RIGHT,
-          MigColumnInfo.Alignment.RIGHT,
-          GeneralLayoutData.HorizontalAlignment.FILL,
-          MigColumnInfo.Alignment.FILL,
-          GeneralLayoutData.HorizontalAlignment.NONE,
-          MigColumnInfo.Alignment.UNKNOWN);
-  public static final BiMap<GeneralLayoutData.VerticalAlignment, MigRowInfo.Alignment> m_verticalAlignmentMap =
-      ImmutableBiMap.of(
-          GeneralLayoutData.VerticalAlignment.TOP,
-          MigRowInfo.Alignment.TOP,
-          GeneralLayoutData.VerticalAlignment.CENTER,
-          MigRowInfo.Alignment.CENTER,
-          GeneralLayoutData.VerticalAlignment.BOTTOM,
-          MigRowInfo.Alignment.BOTTOM,
-          GeneralLayoutData.VerticalAlignment.FILL,
-          MigRowInfo.Alignment.FILL,
-          GeneralLayoutData.VerticalAlignment.NONE,
-          MigRowInfo.Alignment.UNKNOWN);
-
-  @Override
-  protected void storeLayoutData(ComponentInfo component) throws Exception {
-    CellConstraintsSupport gridData = getConstraints(component);
-    if (gridData != null) {
-      GeneralLayoutData generalLayoutData = new GeneralLayoutData();
-      generalLayoutData.gridX = gridData.getX();
-      generalLayoutData.gridY = gridData.getY();
-      generalLayoutData.spanX = gridData.getWidth();
-      generalLayoutData.spanY = gridData.getHeight();
-      generalLayoutData.horizontalGrab = null;
-      generalLayoutData.verticalGrab = null;
-      // alignments
-      generalLayoutData.horizontalAlignment =
-          GeneralLayoutData.getGeneralValue(
-              m_horizontalAlignmentMap,
-              gridData.getHorizontalAlignment());
-      generalLayoutData.verticalAlignment =
-          GeneralLayoutData.getGeneralValue(m_verticalAlignmentMap, gridData.getVerticalAlignment());
-      generalLayoutData.putToInfo(component);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final int DOCK_INDEX = 30000;
-
-  /**
-   * @return the array of {@link Interval}'s for given array like from
-   *         {@link IDEUtil#getColumnSizes(Object)}.
-   */
-  private static Interval[] getIntervalsForOrigins(int[][] sizes, int startOffset) {
-    Assert.isTrue(sizes.length != 0);
-    List<Interval> intervals = Lists.newArrayList();
-    // prepare number of "normal" dimensions
-    int begin = startOffset;
-    for (int index = 0; index < sizes[0].length; index++) {
-      int intervalIndex = sizes[0][index];
-      int gap = sizes[1][2 * index + 0];
-      int size = sizes[1][2 * index + 1];
-      begin += gap;
-      if (Math.abs(intervalIndex) < DOCK_INDEX) {
-        intervals.add(new Interval(begin, size));
-      }
-      begin += size;
-    }
-    // OK, we have intervals.
-    return intervals.toArray(new Interval[intervals.size()]);
-  }
+	private final List<MigColumnInfo> m_columns = Lists.newArrayList();
+	private final List<MigRowInfo> m_rows = Lists.newArrayList();
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public MigLayoutInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+		// force UnitValue initialization in "design time", to be able to get strings for alignments
+		ExecutionUtils.runDesignTime(new RunnableEx() {
+			public void run() throws Exception {
+				IDEUtil.LEFT.toString();
+			}
+		});
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Initialize
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void initialize() throws Exception {
+		super.initialize();
+		initializeMigLayoutGridAfterParse();
+		new SelectionActionsSupport(this);
+		new LayoutAssistantSupport(this) {
+			@Override
+			protected AbstractAssistantPage createConstraintsPage(Composite parent,
+					List<ObjectInfo> objects) {
+				return new CellConstraintsAssistantPage(parent, MigLayoutInfo.this, objects);
+			}
+		};
+		addContextMenuActions();
+		addConstraintsProperty();
+		addSplitFlowDirectionListener();
+	}
+
+	private void initializeMigLayoutGridAfterParse() {
+		addBroadcastListener(new ObjectInfoTreeComplete() {
+			public void invoke() throws Exception {
+				removeBroadcastListener(this);
+				if (isActive()) {
+					try {
+						getContainer().getContainer().doLayout();
+					} catch (Throwable e) {
+						DesignerPlugin.log(e);
+					}
+				}
+			}
+		});
+	}
+
+	private void addContextMenuActions() {
+		addBroadcastListener(new ObjectEventListener() {
+			@Override
+			public void addContextMenu(List<? extends ObjectInfo> objects,
+					ObjectInfo object,
+					IMenuManager manager) throws Exception {
+				addContextMenuActions(object, manager);
+			}
+		});
+	}
+
+	private void addConstraintsProperty() {
+		addBroadcastListener(new JavaInfoAddProperties() {
+			public void invoke(JavaInfo javaInfo, List<Property> properties) throws Exception {
+				if (isManagedObject(javaInfo)) {
+					ComponentInfo component = (ComponentInfo) javaInfo;
+					CellConstraintsSupport constraints = getConstraints(component);
+					properties.add(constraints.getCellProperty());
+				}
+			}
+		});
+	}
+
+	/**
+	 * Updates flow direction specification, when operation with first component of splitted cell.
+	 */
+	private void addSplitFlowDirectionListener() {
+		addBroadcastListener(new ObjectInfoDelete() {
+			@Override
+			public void before(ObjectInfo parent, ObjectInfo child) throws Exception {
+				if (isManagedObject(child)) {
+					ComponentInfo component = (ComponentInfo) child;
+					updateSplitFlowDirection(component);
+				}
+			}
+		});
+		addBroadcastListener(new JavaEventListener() {
+			@Override
+			public void moveBefore(JavaInfo child, ObjectInfo oldParent, JavaInfo newParent)
+					throws Exception {
+				if (isManagedObject(child)) {
+					ComponentInfo component = (ComponentInfo) child;
+					updateSplitFlowDirection(component);
+				}
+			}
+		});
+	}
+
+	private void updateSplitFlowDirection(ComponentInfo component) throws Exception {
+		CellConstraintsSupport constraints = getConstraints(component);
+		List<ComponentInfo> cellComponents = getCellComponents(component);
+		if (cellComponents.size() > 1) {
+			if (cellComponents.get(0) == component) {
+				// remove flow direction for component
+				boolean horizontalSplit = constraints.isHorizontalSplit();
+				constraints.setHorizontalSplit(null);
+				constraints.write();
+				// set flow direction for next component
+				if (cellComponents.size() > 2) {
+					ComponentInfo nextComponent = cellComponents.get(1);
+					CellConstraintsSupport nextConstraints = getConstraints(nextComponent);
+					nextConstraints.setHorizontalSplit(horizontalSplit);
+					nextConstraints.write();
+				}
+			}
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link LC} (parsed if needed) for this {@link MigLayout} instance.
+	 */
+	LC getLC() {
+		MigLayout layout = (MigLayout) getObject();
+		Object layoutConstraints = layout.getLayoutConstraints();
+		if (layoutConstraints instanceof LC) {
+			return (LC) layoutConstraints;
+		} else {
+			return ConstraintParser.parseLayoutConstraint((String) layoutConstraints);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Context menu
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds {@link MigLayoutInfo} actions into context menu.
+	 */
+	private void addContextMenuActions(ObjectInfo object, IMenuManager manager) throws Exception {
+		if (object == getContainer()) {
+			manager.appendToGroup(
+					IContextMenuConstants.GROUP_TOP,
+					new EditDimensionsAction(ModelMessages.MigLayoutInfo_editColumns, true));
+			manager.appendToGroup(
+					IContextMenuConstants.GROUP_TOP,
+					new EditDimensionsAction(ModelMessages.MigLayoutInfo_editRows, false));
+		}
+		if (object instanceof ComponentInfo && object.getParent() == getContainer()) {
+			ComponentInfo component = (ComponentInfo) object;
+			CellConstraintsSupport support = getConstraints(component);
+			support.addContextMenu(manager);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Context menu: EditDimensionsAction
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final class EditDimensionsAction extends Action {
+		private final boolean m_horizontal;
+
+		public EditDimensionsAction(String text, boolean horizontal) {
+			super(text);
+			m_horizontal = horizontal;
+		}
+
+		@Override
+		public void run() {
+			Shell shell = DesignerPlugin.getShell();
+			if (m_horizontal) {
+				new ColumnsDialog(shell, MigLayoutInfo.this).open();
+			} else {
+				new RowsDialog(shell, MigLayoutInfo.this).open();
+			}
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access columns/rows
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link List} of {@link MigColumnInfo}.
+	 */
+	public List<MigColumnInfo> getColumns() {
+		return m_columns;
+	}
+
+	/**
+	 * @return the {@link List} of {@link MigRowInfo}.
+	 */
+	public List<MigRowInfo> getRows() {
+		return m_rows;
+	}
+
+	/**
+	 * Sets the new {@link List} of {@link MigColumnInfo}.
+	 */
+	public void setColumns(List<MigColumnInfo> columns) throws Exception {
+		m_columns.clear();
+		m_columns.addAll(columns);
+		writeDimensions();
+	}
+
+	/**
+	 * Sets the new {@link List} of {@link MigRowInfo}.
+	 */
+	public void setRows(List<MigRowInfo> rows) throws Exception {
+		m_rows.clear();
+		m_rows.addAll(rows);
+		writeDimensions();
+	}
+
+	/**
+	 * Ensures that we have enough columns/rows models, for each column/row in {@link MigLayout}
+	 * instance.
+	 */
+	private void updateColumnsRows() throws Exception {
+		// update columns
+		{
+			int columnCount = getGridInfo().getColumnCount();
+			if (m_columns.size() != columnCount) {
+				m_columns.clear();
+				for (int i = 0; i < columnCount; i++) {
+					m_columns.add(new MigColumnInfo(this));
+				}
+			}
+			// fetch constraint
+			for (MigColumnInfo column : m_columns) {
+				column.updateConstraint();
+			}
+		}
+		// update rows
+		{
+			int rowCount = getGridInfo().getRowCount();
+			if (m_rows.size() != rowCount) {
+				m_rows.clear();
+				for (int i = 0; i < rowCount; i++) {
+					m_rows.add(new MigRowInfo(this));
+				}
+			}
+			// fetch constraint
+			for (MigRowInfo row : m_rows) {
+				row.updateConstraint();
+			}
+		}
+	}
+
+	/**
+	 * If there are components that span multiple columns/rows, and no other "real" components in
+	 * these columns/rows, then removes these excess columns/rows.
+	 */
+	public void normalizeSpanning() throws Exception {
+		boolean columnRowDeleted = true;
+		while (columnRowDeleted) {
+			columnRowDeleted = false;
+			// prepare filled columns/rows
+			final boolean[] filledColumns = new boolean[m_columns.size()];
+			final boolean[] filledRows = new boolean[m_rows.size()];
+			visitGridComponents(new MigComponentVisitor() {
+				public void visit(ComponentInfo bean, CellConstraintsSupport constraints) throws Exception {
+					filledColumns[constraints.getX()] = true;
+					filledRows[constraints.getY()] = true;
+				}
+			});
+			// remove empty columns
+			for (int column = filledColumns.length - 1; column >= 0; column--) {
+				if (!filledColumns[column]) {
+					deleteColumn(column);
+					columnRowDeleted = true;
+					break;
+				}
+			}
+			// remove empty rows
+			for (int row = filledRows.length - 1; row >= 0; row--) {
+				if (!filledRows[row]) {
+					deleteRow(row);
+					columnRowDeleted = true;
+					break;
+				}
+			}
+		}
+		// write dimensions
+		writeDimensions();
+	}
+
+	/**
+	 * @return <code>true</code> if dimensions of this layout can be changed. We can change them only
+	 *         if we created layout using constructor.
+	 */
+	public boolean canChangeDimensions() {
+		return getCreationSupport() instanceof ConstructorCreationSupport;
+	}
+
+	/**
+	 * Writes columns/rows to the source.
+	 */
+	public void writeDimensions() throws Exception {
+		MigLayout layout = (MigLayout) getObject();
+		// prepare source for LC
+		String layoutConstraintsSource;
+		{
+			String layoutConstraintsString;
+			Object layoutConstraints = layout.getLayoutConstraints();
+			if (layoutConstraints instanceof LC) {
+				layoutConstraintsString = IDEUtil.getConstraintString((LC) layoutConstraints, false);
+			} else {
+				layoutConstraintsString = (String) layoutConstraints;
+			}
+			layoutConstraintsSource =
+					StringConverter.INSTANCE.toJavaSource(this, layoutConstraintsString);
+		}
+		// prepare source for columns/rows
+		String columnsSource = getDimensionsSource(m_columns, true);
+		String rowsSource = getDimensionsSource(m_rows, false);
+		// write constructor
+		{
+			ConstructorCreationSupport creationSupport =
+					(ConstructorCreationSupport) getCreationSupport();
+			ClassInstanceCreation creation = creationSupport.getCreation();
+			getEditor().replaceCreationArguments(
+					creation,
+					ImmutableList.of(MessageFormat.format(
+							"{0}, {1}, {2}",
+							layoutConstraintsSource,
+							columnsSource,
+							rowsSource)));
+			setCreationSupport(new ConstructorCreationSupport(creation));
+		}
+	}
+
+	/**
+	 * @return the source for dimension constraints.
+	 */
+	private static String getDimensionsSource(List<? extends MigDimensionInfo> dimensions,
+			boolean cols) throws Exception {
+		DimConstraint[] constraints = new DimConstraint[dimensions.size()];
+		for (int i = 0; i < dimensions.size(); i++) {
+			constraints[i] = dimensions.get(i).m_constraint;
+		}
+		//
+		String constraintString;
+		{
+			AC ac = new AC();
+			ac.setConstaints(constraints);
+			constraintString = IDEUtil.getConstraintString(ac, false, cols);
+		}
+		// return as source
+		return StringConverter.INSTANCE.toJavaSource(null, constraintString);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Properties
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected List<Property> getPropertyList() throws Exception {
+		List<Property> properties = super.getPropertyList();
+		properties.add(new DimensionsProperty(this, true));
+		properties.add(new DimensionsProperty(this, false));
+		return properties;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// CellConstraintsSupport access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final Map<ComponentInfo, CellConstraintsSupport> m_constraints = Maps.newHashMap();
+
+	/**
+	 * @return the {@link CellConstraintsSupport} for given {@link ComponentInfo}.
+	 */
+	public static CellConstraintsSupport getConstraints(ComponentInfo component) {
+		ContainerInfo container = (ContainerInfo) component.getParent();
+		Assert.isTrue(container.getChildrenComponents().contains(component));
+		Assert.instanceOf(MigLayoutInfo.class, container.getLayout());
+		//
+		MigLayoutInfo layout = (MigLayoutInfo) container.getLayout();
+		CellConstraintsSupport support = layout.m_constraints.get(component);
+		if (support == null) {
+			support = new CellConstraintsSupport(layout, component);
+			layout.m_constraints.put(component, support);
+		}
+		return support;
+	}
+
+	@Override
+	public void onSet() throws Exception {
+		super.onSet();
+		MigLayoutConverter.convert(getContainer(), this);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Column commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Inserts new {@link MigColumnInfo} into target index.
+	 */
+	public void insertColumn(int targetIndex) throws Exception {
+		moveComponentsForInsert(targetIndex, true, -1, false);
+		m_columns.add(targetIndex, new MigColumnInfo(this));
+		writeDimensions();
+	}
+
+	/**
+	 * Deletes the {@link MigColumnInfo} with given index.
+	 */
+	public void deleteColumn(int index) throws Exception {
+		moveComponentsForDelete(index, true, -1, false);
+		m_columns.remove(index);
+		writeDimensions();
+	}
+
+	/**
+	 * Deletes the {@link ComponentInfo}'s that located in {@link MigColumnInfo} with given index.
+	 */
+	public void clearColumn(final int index) throws Exception {
+		visitGridComponents(new MigComponentVisitor() {
+			public void visit(ComponentInfo component, CellConstraintsSupport cell) throws Exception {
+				if (cell.getX() == index) {
+					component.delete();
+				}
+			}
+		});
+	}
+
+	/**
+	 * Splits the {@link MigColumnInfo} with given index, i.e. adds duplicate of this
+	 * {@link MigColumnInfo}.
+	 */
+	public void splitColumn(final int index) throws Exception {
+		// update dimensions
+		{
+			MigColumnInfo column = m_columns.get(index);
+			{
+				MigColumnInfo newColumn = new MigColumnInfo(this);
+				m_columns.add(index, newColumn);
+				newColumn.setString(column.getString(false));
+			}
+			writeDimensions();
+		}
+		// update constraints
+		visitGridComponents(new MigComponentVisitor() {
+			public void visit(ComponentInfo component, CellConstraintsSupport cell) throws Exception {
+				if (cell.getX() > index) {
+					cell.updateX(1);
+				} else if (cell.getX() + cell.getWidth() > index) {
+					cell.updateWidth(1);
+				}
+				cell.write();
+			}
+		});
+	}
+
+	/**
+	 * Moves {@link MigColumnInfo} at given index into target index.
+	 */
+	public void moveColumn(final int index, final int targetIndex) throws Exception {
+		MigColumnInfo column = m_columns.remove(index);
+		if (index < targetIndex) {
+			// add column
+			m_columns.add(targetIndex - 1, column);
+			// change constraints
+			visitGridComponents(new MigComponentVisitor() {
+				public void visit(ComponentInfo bean, CellConstraintsSupport constraints) throws Exception {
+					int x = constraints.getX();
+					int w = constraints.getWidth();
+					if (x < index) {
+						// if component contains source and doesn't contain target, decrease size
+						if (x + w - 1 >= index && x + w - 1 < targetIndex) {
+							constraints.updateWidth(-1);
+						}
+					} else if (x == index) {
+						constraints.setX(targetIndex - 1);
+						constraints.setWidth(1);
+					} else if (x > index && x < targetIndex) {
+						constraints.updateX(-1);
+						// if component contains target, increase size
+						if (x + w - 1 >= targetIndex) {
+							constraints.updateWidth(1);
+						}
+					} else if (x >= 1 + targetIndex) {
+						// after source and target - do nothing
+					}
+					constraints.write();
+				}
+			});
+		} else {
+			// add column
+			m_columns.add(targetIndex, column);
+			// change constraints
+			visitGridComponents(new MigComponentVisitor() {
+				public void visit(ComponentInfo bean, CellConstraintsSupport constraints) throws Exception {
+					int x = constraints.getX();
+					int w = constraints.getWidth();
+					if (x < targetIndex) {
+						// if component doesn't contains source and contains target, increase size
+						if (x + w - 1 >= targetIndex && x + w - 1 < index) {
+							constraints.updateWidth(1);
+						}
+					} else if (x < index) {
+						constraints.updateX(1);
+						// if component contains source, decrease size
+						if (x + w - 1 >= index) {
+							constraints.updateWidth(-1);
+						}
+					} else if (x == index) {
+						constraints.setX(targetIndex);
+						constraints.setWidth(1);
+					} else if (x > index) {
+						// after source and target - do nothing
+					}
+					constraints.write();
+				}
+			});
+		}
+		// finalize
+		writeDimensions();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Row commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Inserts new {@link MigRowInfo} into target index.
+	 */
+	public void insertRow(int targetIndex) throws Exception {
+		moveComponentsForInsert(-1, false, targetIndex, true);
+		m_rows.add(targetIndex, new MigRowInfo(this));
+		writeDimensions();
+	}
+
+	/**
+	 * Deletes the {@link MigRowInfo} with given index.
+	 */
+	public void deleteRow(int index) throws Exception {
+		moveComponentsForDelete(-1, false, index, true);
+		m_rows.remove(index);
+		writeDimensions();
+	}
+
+	/**
+	 * Deletes the {@link ComponentInfo}'s that located in {@link MigRowInfo} with given index.
+	 */
+	public void clearRow(final int index) throws Exception {
+		visitGridComponents(new MigComponentVisitor() {
+			public void visit(ComponentInfo component, CellConstraintsSupport cell) throws Exception {
+				if (cell.getY() == index) {
+					component.delete();
+				}
+			}
+		});
+	}
+
+	/**
+	 * Splits the {@link MigRowInfo} with given index, i.e. adds duplicate of this {@link MigRowInfo}.
+	 */
+	public void splitRow(final int index) throws Exception {
+		// update dimensions
+		{
+			MigRowInfo row = m_rows.get(index);
+			{
+				MigRowInfo newRow = new MigRowInfo(this);
+				m_rows.add(index, newRow);
+				newRow.setString(row.getString(false));
+			}
+			writeDimensions();
+		}
+		// update constraints
+		visitGridComponents(new MigComponentVisitor() {
+			public void visit(ComponentInfo component, CellConstraintsSupport cell) throws Exception {
+				if (cell.getY() > index) {
+					cell.updateY(1);
+				} else if (cell.getY() + cell.getHeight() > index) {
+					cell.updateHeight(1);
+				}
+				cell.write();
+			}
+		});
+	}
+
+	/**
+	 * Moves {@link MigRowInfo} at given index into target index.
+	 */
+	public void moveRow(final int index, final int targetIndex) throws Exception {
+		MigRowInfo row = m_rows.remove(index);
+		if (index < targetIndex) {
+			// add column
+			m_rows.add(targetIndex - 1, row);
+			// change constraints
+			visitGridComponents(new MigComponentVisitor() {
+				public void visit(ComponentInfo bean, CellConstraintsSupport constraints) throws Exception {
+					int y = constraints.getY();
+					int h = constraints.getHeight();
+					if (y < index) {
+						// if component contains source and doesn't contain target, decrease size
+						if (y + h - 1 >= index && y + h - 1 < targetIndex) {
+							constraints.updateHeight(-1);
+						}
+					} else if (y == index) {
+						constraints.setY(targetIndex - 1);
+						constraints.setHeight(1);
+					} else if (y > index && y < targetIndex) {
+						constraints.updateY(-1);
+						// if component contains target, increase size
+						if (y + h - 1 >= targetIndex) {
+							constraints.updateHeight(1);
+						}
+					} else if (y >= 1 + targetIndex) {
+						// after source and target - do nothing
+					}
+					constraints.write();
+				}
+			});
+		} else {
+			// add column
+			m_rows.add(targetIndex, row);
+			// change constraints
+			visitGridComponents(new MigComponentVisitor() {
+				public void visit(ComponentInfo bean, CellConstraintsSupport constraints) throws Exception {
+					int y = constraints.getY();
+					int h = constraints.getHeight();
+					if (y < targetIndex) {
+						// if component doesn't contains source and contains target, increase size
+						if (y + h - 1 >= targetIndex && y + h - 1 < index) {
+							constraints.updateHeight(1);
+						}
+					} else if (y < index) {
+						constraints.updateY(1);
+						// if component contains source, decrease size
+						if (y + h - 1 >= index) {
+							constraints.updateHeight(-1);
+						}
+					} else if (y == index) {
+						constraints.setY(targetIndex);
+						constraints.setHeight(1);
+					} else if (y > index) {
+						// after source and target - do nothing
+					}
+					constraints.write();
+				}
+			});
+		}
+		// finalize
+		writeDimensions();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets cells bounds for given {@link ComponentInfo}, for example during spanning.
+	 */
+	public void command_setCells(ComponentInfo component, Rectangle cells) throws Exception {
+		// force dimensions in MigLayout creation, because in some cases MigLayout can "optimize"
+		// columns/rows, if these columns/rows contain only spanned parts of components
+		writeDimensions();
+		makeExplicitCell();
+		// OK, now we can safely update constraints
+		CellConstraintsSupport constraints = getConstraints(component);
+		constraints.setX(cells.x);
+		constraints.setY(cells.y);
+		constraints.setWidth(cells.width);
+		constraints.setHeight(cells.height);
+		constraints.write();
+		// write all constraints (in ideal case - only this one)
+		writeAllConstraints();
+	}
+
+	/**
+	 * Creates new {@link ComponentInfo} in given cell.
+	 *
+	 * @param newComponent
+	 *          the new {@link ComponentInfo} to create.
+	 * @param column
+	 *          the column in {@link MigLayout} terms (0 based).
+	 * @param row
+	 *          the row in {@link MigLayout} terms (0 based).
+	 */
+	public void command_CREATE(ComponentInfo newComponent,
+			int column,
+			boolean insertColumn,
+			int row,
+			boolean insertRow) throws Exception {
+		makeExplicitCell();
+		Point cell = prepareCell(column, insertColumn, row, insertRow);
+		// do add
+		ComponentInfo nextComponent = getReference(column, row, null);
+		add(newComponent, "\"\"", nextComponent);
+		// set bounds
+		{
+			CellConstraintsSupport constraints = getConstraints(newComponent);
+			constraints.setX(cell.x);
+			constraints.setY(cell.y);
+		}
+		// write all constraints (in ideal case - only this one)
+		writeAllConstraints();
+		//
+		doAutomaticAlignment(newComponent);
+	}
+
+	/**
+	 * Moves existing {@link ComponentInfo} into new cell.
+	 */
+	public void command_MOVE(ComponentInfo component,
+			int column,
+			boolean insertColumn,
+			int row,
+			boolean insertRow) throws Exception {
+		makeExplicitCell();
+		Point cell = prepareCell(column, insertColumn, row, insertRow);
+		// move in components
+		{
+			ComponentInfo nextComponent = getReference(column, row, component);
+			move(component, "\"\"", nextComponent);
+		}
+		// move in grid
+		{
+			CellConstraintsSupport constraints = getConstraints(component);
+			// new bounds
+			constraints.setX(cell.x);
+			constraints.setY(cell.y);
+			constraints.setWidth(1);
+			constraints.setHeight(1);
+			// now component in cell, not docked
+			constraints.setDockSide(null);
+			// write all constraints (in ideal case - only this one)
+			writeAllConstraints();
+		}
+	}
+
+	/**
+	 * Forces explicit <code>cell</code> tags for all components.
+	 *
+	 * @see {@link CellConstraintsSupport#makeExplicitCell()}.
+	 */
+	private void makeExplicitCell() {
+		for (ComponentInfo component : getContainer().getChildrenComponents()) {
+			CellConstraintsSupport constraints = getConstraints(component);
+			constraints.makeExplicitCell();
+		}
+	}
+
+	/**
+	 * Invokes {@link CellConstraintsSupport#write()} for all constraints.
+	 */
+	private void writeAllConstraints() throws Exception {
+		for (ComponentInfo component : getContainer().getChildrenComponents()) {
+			CellConstraintsSupport constraints = getConstraints(component);
+			constraints.write();
+		}
+	}
+
+	/**
+	 * @return the {@link ComponentInfo} that should be used as reference of adding into given cell.
+	 *
+	 * @param exclude
+	 *          the {@link ComponentInfo} that should not be checked, for example because we move it
+	 *          now.
+	 */
+	private ComponentInfo getReference(int column, int row, ComponentInfo exclude) throws Exception {
+		for (ComponentInfo component : getContainer().getChildrenComponents()) {
+			if (component != exclude) {
+				CellConstraintsSupport constraints = getConstraints(component);
+				if (constraints.getY() > row || constraints.getY() == row && constraints.getX() >= column) {
+					return component;
+				}
+			}
+		}
+		// no reference
+		return null;
+	}
+
+	/**
+	 * Prepares cell with given column/row - inserts columns/rows if necessary.
+	 */
+	private Point prepareCell(int column, boolean insertColumn, int row, boolean insertRow)
+			throws Exception {
+		boolean writeDimensions = false;
+		if (insertColumn || insertRow) {
+			// move existing components
+			moveComponentsForInsert(column, insertColumn, row, insertRow);
+			// insert empty column/row
+			if (insertColumn) {
+				m_columns.add(column, new MigColumnInfo(this));
+			}
+			if (insertRow) {
+				m_rows.add(row, new MigRowInfo(this));
+			}
+			// write dimensions
+			writeDimensions = true;
+		}
+		// append columns
+		while (m_columns.size() <= column) {
+			m_columns.add(new MigColumnInfo(this));
+			writeDimensions = true;
+		}
+		// append rows
+		while (m_rows.size() <= row) {
+			m_rows.add(new MigRowInfo(this));
+			writeDimensions = true;
+		}
+		// write dimensions
+		if (writeDimensions) {
+			writeDimensions();
+		}
+		// return new cell
+		return new Point(column, row);
+	}
+
+	/**
+	 * Moves/resizes components constraints for inserting single column/row.
+	 */
+	private void moveComponentsForInsert(final int column,
+			final boolean insertColumn,
+			final int row,
+			final boolean insertRow) throws Exception {
+		visitGridComponents(new MigComponentVisitor() {
+			public void visit(ComponentInfo component, CellConstraintsSupport cell) throws Exception {
+				if (insertColumn) {
+					if (cell.getX() >= column) {
+						cell.updateX(1);
+					} else if (cell.getX() + cell.getWidth() > column) {
+						cell.updateWidth(1);
+					}
+				}
+				if (insertRow) {
+					if (cell.getY() >= row) {
+						cell.updateY(1);
+					} else if (cell.getY() + cell.getHeight() > row) {
+						cell.updateHeight(1);
+					}
+				}
+				cell.write();
+			}
+		});
+	}
+
+	/**
+	 * Moves/resizes components constraints for deleting single column/row.
+	 */
+	private void moveComponentsForDelete(final int column,
+			final boolean deleteColumn,
+			final int row,
+			final boolean deleteRow) throws Exception {
+		visitGridComponents(new MigComponentVisitor() {
+			public void visit(ComponentInfo component, CellConstraintsSupport cell) throws Exception {
+				if (deleteColumn) {
+					if (cell.getX() == column) {
+						component.delete();
+					} else if (cell.getX() >= column) {
+						cell.updateX(-1);
+					} else if (cell.getX() + cell.getWidth() > column) {
+						cell.updateWidth(-1);
+					}
+				}
+				if (deleteRow) {
+					if (cell.getY() == row) {
+						component.delete();
+					} else if (cell.getY() >= row) {
+						cell.updateY(-1);
+					} else if (cell.getY() + cell.getHeight() > row) {
+						cell.updateHeight(-1);
+					}
+				}
+				cell.write();
+			}
+		});
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Split support
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link List} of components that are located in same cell as given
+	 *         {@link ComponentInfo}.
+	 */
+	public List<ComponentInfo> getCellComponents(ComponentInfo component) {
+		CellConstraintsSupport constraints = getConstraints(component);
+		return getCellComponents(constraints.getX(), constraints.getY());
+	}
+
+	/**
+	 * @return the {@link List} of components that are located in given cell (usually zero or one, but
+	 *         in case of splitted cell - more than one).
+	 */
+	public List<ComponentInfo> getCellComponents(final int column, final int row) {
+		final List<ComponentInfo> components = Lists.newArrayList();
+		visitGridComponents(new MigComponentVisitor() {
+			public void visit(ComponentInfo component, CellConstraintsSupport constraints)
+					throws Exception {
+				int x = constraints.getX();
+				int y = constraints.getY();
+				int w = constraints.getWidth();
+				int h = constraints.getHeight();
+				if (x <= column && column < x + w && y <= row && row < y + h) {
+					components.add(component);
+				}
+			}
+		});
+		return components;
+	}
+
+	/**
+	 * Adds new component into cell that already has one or more (in case of already splitted cell)
+	 * components.
+	 *
+	 * @param column
+	 *          the target column for new component.
+	 * @param row
+	 *          the target row for new component.
+	 * @param horizontalFlow
+	 *          specifies if <code>flowx</code> or <code>flowy</code> should be set, not used, if cell
+	 *          was already splitted.
+	 */
+	public void command_splitCREATE(int column,
+			int row,
+			boolean horizontalFlow,
+			ComponentInfo newComponent,
+			ComponentInfo nextComponent) throws Exception {
+		horizontalFlow = getUpdatedSplitFlow(column, row, horizontalFlow);
+		// add new component
+		add(newComponent, "\"\"", nextComponent);
+		split_updateCellFlow(column, row, horizontalFlow, newComponent);
+	}
+
+	/**
+	 * Moves component into cell that already has one or more (in case of already splitted cell)
+	 * components.
+	 *
+	 * @param column
+	 *          the target column for moved component.
+	 * @param row
+	 *          the target row for moved component.
+	 * @param horizontalFlow
+	 *          specifies if <code>flowx</code> or <code>flowy</code> should be set, not used, if cell
+	 *          was already splitted.
+	 */
+	public void command_splitMOVE(int column,
+			int row,
+			boolean horizontalFlow,
+			ComponentInfo movedComponent,
+			ComponentInfo nextComponent) throws Exception {
+		horizontalFlow = getUpdatedSplitFlow(column, row, horizontalFlow);
+		move(movedComponent, "\"\"", nextComponent);
+		split_updateCellFlow(column, row, horizontalFlow, movedComponent);
+	}
+
+	/**
+	 * Places given component into cell (already occupied by one or more components), updates flow
+	 * direction of splitted cell.
+	 */
+	private void split_updateCellFlow(int column,
+			int row,
+			boolean horizontalFlow,
+			ComponentInfo movedComponent) throws Exception {
+		// set bounds
+		{
+			CellConstraintsSupport constraints = getConstraints(movedComponent);
+			constraints.setX(column);
+			constraints.setY(row);
+		}
+		// set flow for first component, remove for next components
+		{
+			List<ComponentInfo> components = getCellComponents(column, row);
+			boolean isFirst = true;
+			for (ComponentInfo component : components) {
+				CellConstraintsSupport constraints = MigLayoutInfo.getConstraints(component);
+				if (isFirst) {
+					isFirst = false;
+					constraints.setHorizontalSplit(Boolean.valueOf(horizontalFlow));
+				} else {
+					constraints.setHorizontalSplit(null);
+				}
+			}
+		}
+		// write all constraints
+		writeAllConstraints();
+	}
+
+	/**
+	 * @return the updated flow direction (use existing direction, if cell is already splitted), or
+	 *         requested direction.
+	 */
+	private boolean getUpdatedSplitFlow(int column, int row, boolean horizontalFlow) {
+		List<ComponentInfo> components = getCellComponents(column, row);
+		if (components.size() > 1) {
+			horizontalFlow = MigLayoutInfo.getConstraints(components.get(0)).isHorizontalSplit();
+		}
+		return horizontalFlow;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Visiting
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Visitor for {@link ComponentInfo} and their {@link CellConstraintsSupport}.
+	 */
+	private interface MigComponentVisitor {
+		void visit(ComponentInfo component, CellConstraintsSupport constraints) throws Exception;
+	}
+
+	/**
+	 * Visits grid {@link ComponentInfo}'s of this {@link ContainerInfo}.
+	 */
+	private void visitGridComponents(final MigComponentVisitor visitor) {
+		ExecutionUtils.runRethrow(new RunnableEx() {
+			public void run() throws Exception {
+				visitAllComponents(new MigComponentVisitor() {
+					public void visit(ComponentInfo component, CellConstraintsSupport constraints)
+							throws Exception {
+						if (constraints.getDockSide() == null) {
+							visitor.visit(component, constraints);
+						}
+					}
+				});
+			}
+		});
+	}
+
+	/**
+	 * Visits all {@link ComponentInfo}'s of this {@link ContainerInfo}.
+	 */
+	private void visitAllComponents(MigComponentVisitor visitor) throws Exception {
+		for (ComponentInfo component : getContainer().getChildrenComponents()) {
+			CellConstraintsSupport cell = getConstraints(component);
+			visitor.visit(component, cell);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Automatic alignment
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Performs automatic alignment, such as grab/fill for {@link JTextField} or {@link JTable}, right
+	 * alignment for {@link JLabel}.
+	 */
+	private void doAutomaticAlignment(ComponentInfo component) throws Exception {
+		final IPreferenceStore preferences = Activator.getDefault().getPreferenceStore();
+		GridAlignmentHelper.doAutomaticAlignment(component, new IAlignmentProcessor<ComponentInfo>() {
+			public boolean grabEnabled() {
+				return preferences.getBoolean(P_ENABLE_GRAB);
+			}
+
+			public boolean rightEnabled() {
+				return preferences.getBoolean(P_ENABLE_RIGHT_ALIGNMENT);
+			}
+
+			public ComponentInfo getComponentAtLeft(ComponentInfo component) {
+				CellConstraintsSupport constraints = getConstraints(component);
+				return getComponentAt(constraints.getX() - 1, constraints.getY());
+			}
+
+			public ComponentInfo getComponentAtRight(ComponentInfo component) {
+				CellConstraintsSupport constraints = getConstraints(component);
+				return getComponentAt(constraints.getX() + 1, constraints.getY());
+			}
+
+			public void setGrabFill(ComponentInfo component, boolean horizontal) throws Exception {
+				CellConstraintsSupport constraints = getConstraints(component);
+				if (horizontal) {
+					getColumns().get(constraints.getX()).setGrow(100f);
+					constraints.setHorizontalAlignment(MigColumnInfo.Alignment.FILL);
+				} else {
+					getRows().get(constraints.getY()).setGrow(100f);
+					constraints.setVerticalAlignment(MigRowInfo.Alignment.FILL);
+				}
+				writeDimensions();
+				constraints.write();
+			}
+
+			public void setRightAlignment(ComponentInfo component) throws Exception {
+				CellConstraintsSupport constraints = getConstraints(component);
+				constraints.setHorizontalAlignment(MigColumnInfo.Alignment.TRAILING);
+				constraints.write();
+			}
+		});
+	}
+
+	/**
+	 * @return the {@link ComponentInfo} with given top-left cell, may be <code>null</code>.
+	 */
+	private ComponentInfo getComponentAt(int x, int y) {
+		for (ComponentInfo component : getContainer().getChildrenComponents()) {
+			CellConstraintsSupport constraints = getConstraints(component);
+			if (constraints.getX() == x && constraints.getY() == y) {
+				return component;
+			}
+		}
+		// no such component
+		return null;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void refresh_dispose() throws Exception {
+		m_gridInfo = null;
+		super.refresh_dispose();
+	}
+
+	@Override
+	protected void refresh_afterCreate2() throws Exception {
+		super.refresh_afterCreate2();
+		Container container = getContainer().getContainer();
+		// do layout, use some reasonable size
+		{
+			java.awt.Dimension containerSizeOriginal = container.getSize();
+			try {
+				container.setSize(450, 300);
+				container.doLayout();
+			} finally {
+				container.setSize(containerSizeOriginal);
+			}
+		}
+		// set constant size for empty columns/rows
+		{
+			Interval[] columnIntervals = getIntervalsForOrigins(IDEUtil.getColumnSizes(container), 0);
+			Interval[] rowIntervals = getIntervalsForOrigins(IDEUtil.getRowSizes(container), 0);
+			// update columns
+			for (int i = 0; i < columnIntervals.length; i++) {
+				Interval interval = columnIntervals[i];
+				if (interval.length() == 0) {
+					String cons = "cell " + i + " 0,width " + m_defaultColumnSize + "px";
+					container.add(new JLabel(), cons);
+				}
+			}
+			// update rows
+			for (int i = 0; i < rowIntervals.length; i++) {
+				Interval interval = rowIntervals[i];
+				if (interval.length() == 0) {
+					String cons = "cell 0 " + i + ",height " + m_defaultRowSize + "px";
+					container.add(new JLabel(), cons);
+				}
+			}
+			// may be column/row constraints were updated, force layout
+			container.doLayout();
+		}
+	}
+
+	@Override
+	protected void refresh_fetch() throws Exception {
+		super.refresh_fetch();
+		updateColumnsRows();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IGridInfo support
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private IGridInfo m_gridInfo;
+	private final int m_defaultColumnSize = 25;
+	private final int m_gapColumnSize = 4;
+	private final int m_defaultRowSize = 25;
+	private final int m_gapRowSize = 4;
+
+	/**
+	 * @return the {@link IGridInfo} that describes this layout.
+	 */
+	public IGridInfo getGridInfo() {
+		if (m_gridInfo == null) {
+			ExecutionUtils.runRethrow(new RunnableEx() {
+				public void run() throws Exception {
+					createGridInfo();
+				}
+			});
+		}
+		return m_gridInfo;
+	}
+
+	/**
+	 * Initializes {@link #m_gridInfo}.
+	 */
+	private void createGridInfo() throws Exception {
+		final Insets insets = getContainer().getInsets();
+		// prepare intervals
+		final Interval[] columnIntervals;
+		final Interval[] rowIntervals;
+		{
+			Container container = getContainer().getContainer();
+			if (IDEUtil.getColumnSizes(container) == null) {
+				container.doLayout();
+			}
+			columnIntervals = getIntervalsForOrigins(IDEUtil.getColumnSizes(container), insets.left);
+			rowIntervals = getIntervalsForOrigins(IDEUtil.getRowSizes(container), insets.top);
+		}
+		// prepare cells
+		final Map<ComponentInfo, Rectangle> componentToCells = Maps.newHashMap();
+		final Map<Point, ComponentInfo> occupiedCells = Maps.newHashMap();
+		visitGridComponents(new MigComponentVisitor() {
+			public void visit(ComponentInfo component, CellConstraintsSupport support) throws Exception {
+				Rectangle cells =
+						new Rectangle(support.getX(), support.getY(), support.getWidth(), support.getHeight());
+				// fill map: ComponentInfo -> cells Rectangle
+				componentToCells.put(component, cells);
+				// fill occupied cells map
+				for (int x = cells.x; x < cells.right(); x++) {
+					for (int y = cells.y; y < cells.bottom(); y++) {
+						occupiedCells.put(new Point(x, y), component);
+					}
+				}
+			}
+		});
+		// create IGridInfo instance
+		m_gridInfo = new IGridInfo() {
+			////////////////////////////////////////////////////////////////////////////
+			//
+			// Dimensions
+			//
+			////////////////////////////////////////////////////////////////////////////
+			public int getColumnCount() {
+				return columnIntervals.length;
+			}
+
+			public int getRowCount() {
+				return rowIntervals.length;
+			}
+
+			////////////////////////////////////////////////////////////////////////////
+			//
+			// Intervals
+			//
+			////////////////////////////////////////////////////////////////////////////
+			public Interval[] getColumnIntervals() {
+				return columnIntervals;
+			}
+
+			public Interval[] getRowIntervals() {
+				return rowIntervals;
+			}
+
+			////////////////////////////////////////////////////////////////////////////
+			//
+			// Cells
+			//
+			////////////////////////////////////////////////////////////////////////////
+			public Rectangle getComponentCells(IAbstractComponentInfo component) {
+				Assert.instanceOf(ComponentInfo.class, component);
+				// component in splitted cell
+				{
+					List<ComponentInfo> components = getCellComponents((ComponentInfo) component);
+					if (components.size() > 1 && components.get(0) != component) {
+						return getComponentCells(components.get(0));
+					}
+				}
+				// normal component
+				return componentToCells.get(component);
+			}
+
+			public Rectangle getCellsRectangle(Rectangle cells) {
+				if (cells == null) {
+					return new Rectangle(0, 0, 0, 0);
+				}
+				int x = columnIntervals[cells.x].begin();
+				int y = rowIntervals[cells.y].begin();
+				if (cells.isEmpty()) {
+					return new Rectangle(x, y, 0, 0);
+				} else {
+					int w = columnIntervals[cells.right() - 1].end() - x;
+					int h = rowIntervals[cells.bottom() - 1].end() - y;
+					return new Rectangle(x, y, w + 1, h + 1);
+				}
+			}
+
+			////////////////////////////////////////////////////////////////////////////
+			//
+			// Feedback
+			//
+			////////////////////////////////////////////////////////////////////////////
+			public boolean isRTL() {
+				return false;
+			}
+
+			public Insets getInsets() {
+				return insets;
+			}
+
+			////////////////////////////////////////////////////////////////////////////
+			//
+			// Virtual columns
+			//
+			////////////////////////////////////////////////////////////////////////////
+			public boolean hasVirtualColumns() {
+				return true;
+			}
+
+			public int getVirtualColumnSize() {
+				return m_defaultColumnSize;
+			}
+
+			public int getVirtualColumnGap() {
+				return m_gapColumnSize;
+			}
+
+			////////////////////////////////////////////////////////////////////////////
+			//
+			// Virtual rows
+			//
+			////////////////////////////////////////////////////////////////////////////
+			public boolean hasVirtualRows() {
+				return true;
+			}
+
+			public int getVirtualRowSize() {
+				return m_defaultRowSize;
+			}
+
+			public int getVirtualRowGap() {
+				return m_gapRowSize;
+			}
+
+			////////////////////////////////////////////////////////////////////////////
+			//
+			// Checks
+			//
+			////////////////////////////////////////////////////////////////////////////
+			public IAbstractComponentInfo getOccupied(int column, int row) {
+				return occupiedCells.get(new Point(column, row));
+			}
+		};
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Manage general layout data.
+	//
+	////////////////////////////////////////////////////////////////////////////
+	//MigColumnInfo.Alignment
+	public static final BiMap<GeneralLayoutData.HorizontalAlignment, MigColumnInfo.Alignment> m_horizontalAlignmentMap =
+			ImmutableBiMap.of(
+					GeneralLayoutData.HorizontalAlignment.LEFT,
+					MigColumnInfo.Alignment.LEFT,
+					GeneralLayoutData.HorizontalAlignment.CENTER,
+					MigColumnInfo.Alignment.CENTER,
+					GeneralLayoutData.HorizontalAlignment.RIGHT,
+					MigColumnInfo.Alignment.RIGHT,
+					GeneralLayoutData.HorizontalAlignment.FILL,
+					MigColumnInfo.Alignment.FILL,
+					GeneralLayoutData.HorizontalAlignment.NONE,
+					MigColumnInfo.Alignment.UNKNOWN);
+	public static final BiMap<GeneralLayoutData.VerticalAlignment, MigRowInfo.Alignment> m_verticalAlignmentMap =
+			ImmutableBiMap.of(
+					GeneralLayoutData.VerticalAlignment.TOP,
+					MigRowInfo.Alignment.TOP,
+					GeneralLayoutData.VerticalAlignment.CENTER,
+					MigRowInfo.Alignment.CENTER,
+					GeneralLayoutData.VerticalAlignment.BOTTOM,
+					MigRowInfo.Alignment.BOTTOM,
+					GeneralLayoutData.VerticalAlignment.FILL,
+					MigRowInfo.Alignment.FILL,
+					GeneralLayoutData.VerticalAlignment.NONE,
+					MigRowInfo.Alignment.UNKNOWN);
+
+	@Override
+	protected void storeLayoutData(ComponentInfo component) throws Exception {
+		CellConstraintsSupport gridData = getConstraints(component);
+		if (gridData != null) {
+			GeneralLayoutData generalLayoutData = new GeneralLayoutData();
+			generalLayoutData.gridX = gridData.getX();
+			generalLayoutData.gridY = gridData.getY();
+			generalLayoutData.spanX = gridData.getWidth();
+			generalLayoutData.spanY = gridData.getHeight();
+			generalLayoutData.horizontalGrab = null;
+			generalLayoutData.verticalGrab = null;
+			// alignments
+			generalLayoutData.horizontalAlignment =
+					GeneralLayoutData.getGeneralValue(
+							m_horizontalAlignmentMap,
+							gridData.getHorizontalAlignment());
+			generalLayoutData.verticalAlignment =
+					GeneralLayoutData.getGeneralValue(m_verticalAlignmentMap, gridData.getVerticalAlignment());
+			generalLayoutData.putToInfo(component);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final int DOCK_INDEX = 30000;
+
+	/**
+	 * @return the array of {@link Interval}'s for given array like from
+	 *         {@link IDEUtil#getColumnSizes(Object)}.
+	 */
+	private static Interval[] getIntervalsForOrigins(int[][] sizes, int startOffset) {
+		Assert.isTrue(sizes.length != 0);
+		List<Interval> intervals = Lists.newArrayList();
+		// prepare number of "normal" dimensions
+		int begin = startOffset;
+		for (int index = 0; index < sizes[0].length; index++) {
+			int intervalIndex = sizes[0][index];
+			int gap = sizes[1][2 * index + 0];
+			int size = sizes[1][2 * index + 1];
+			begin += gap;
+			if (Math.abs(intervalIndex) < DOCK_INDEX) {
+				intervals.add(new Interval(begin, size));
+			}
+			begin += size;
+		}
+		// OK, we have intervals.
+		return intervals.toArray(new Interval[intervals.size()]);
+	}
 }
diff --git a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/MigLayoutSurroundProcessor.java b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/MigLayoutSurroundProcessor.java
index 13f40ff79..6f7c39914 100644
--- a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/MigLayoutSurroundProcessor.java
+++ b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/MigLayoutSurroundProcessor.java
@@ -32,94 +32,94 @@
  * @coverage swing.MigLayout.model
  */
 public final class MigLayoutSurroundProcessor
-    implements
-      ISurroundProcessor<ContainerInfo, ComponentInfo> {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final Object INSTANCE = new MigLayoutSurroundProcessor();
+implements
+ISurroundProcessor<ContainerInfo, ComponentInfo> {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final Object INSTANCE = new MigLayoutSurroundProcessor();
 
-  private MigLayoutSurroundProcessor() {
-  }
+	private MigLayoutSurroundProcessor() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ISurroundProcessor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public boolean filter(ContainerInfo sourceContainer, ContainerInfo targetContainer)
-      throws Exception {
-    String targetClassName = targetContainer.getDescription().getComponentClass().getName();
-    boolean isJPanel = targetClassName.equals("javax.swing.JPanel");
-    return sourceContainer.hasLayout()
-        && sourceContainer.getLayout() instanceof MigLayoutInfo
-        && isJPanel;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ISurroundProcessor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public boolean filter(ContainerInfo sourceContainer, ContainerInfo targetContainer)
+			throws Exception {
+		String targetClassName = targetContainer.getDescription().getComponentClass().getName();
+		boolean isJPanel = targetClassName.equals("javax.swing.JPanel");
+		return sourceContainer.hasLayout()
+				&& sourceContainer.getLayout() instanceof MigLayoutInfo
+				&& isJPanel;
+	}
 
-  public void move(ContainerInfo sourceContainer,
-      ContainerInfo targetContainer,
-      List<ComponentInfo> components) throws Exception {
-    // set MigLayout for target
-    MigLayoutInfo targetLayout;
-    {
-      targetLayout =
-          (MigLayoutInfo) JavaInfoUtils.createJavaInfo(
-              targetContainer.getEditor(),
-              "net.miginfocom.swing.MigLayout",
-              new ConstructorCreationSupport());
-      targetContainer.setLayout(targetLayout);
-    }
-    // prepare cells of "targetContainer"
-    Point locationOffset;
-    {
-      Rectangle targetBounds =
-          (Rectangle) targetContainer.getArbitraryValue(MigLayoutSurroundSupport.CELLS_KEY);
-      MigLayoutInfo sourceLayout = (MigLayoutInfo) sourceContainer.getLayout();
-      // copy columns
-      {
-        List<MigColumnInfo> targetColumns = Lists.newArrayList();
-        for (int columnIndex = targetBounds.x; columnIndex < targetBounds.right(); columnIndex++) {
-          MigColumnInfo sourceColumn = sourceLayout.getColumns().get(columnIndex);
-          MigColumnInfo targetColumn = new MigColumnInfo(targetLayout);
-          targetColumn.setString(sourceColumn.getString(false));
-          targetColumns.add(targetColumn);
-        }
-        targetLayout.setColumns(targetColumns);
-      }
-      // copy rows
-      {
-        List<MigRowInfo> targetRows = Lists.newArrayList();
-        for (int rowIndex = targetBounds.y; rowIndex < targetBounds.bottom(); rowIndex++) {
-          MigRowInfo sourceRow = sourceLayout.getRows().get(rowIndex);
-          MigRowInfo targetRow = new MigRowInfo(targetLayout);
-          targetRow.setString(sourceRow.getString(false));
-          targetRows.add(targetRow);
-        }
-        targetLayout.setRows(targetRows);
-      }
-      //
-      locationOffset = targetBounds.getLocation().getNegated();
-    }
-    // move components
-    for (ComponentInfo component : components) {
-      CellConstraintsSupport oldConstraints = MigLayoutInfo.getConstraints(component);
-      // move component
-      {
-        Rectangle cells = MigLayoutSurroundSupport.getCells(component);
-        cells = cells.getTranslated(locationOffset);
-        targetLayout.command_MOVE(component, cells.x, false, cells.y, false);
-      }
-      // update constraints
-      {
-        CellConstraintsSupport constraints = MigLayoutInfo.getConstraints(component);
-        constraints.setWidth(oldConstraints.getWidth());
-        constraints.setHeight(oldConstraints.getHeight());
-        constraints.setHorizontalAlignment(oldConstraints.getHorizontalAlignment());
-        constraints.setVerticalAlignment(oldConstraints.getVerticalAlignment());
-        constraints.write();
-      }
-    }
-  }
+	public void move(ContainerInfo sourceContainer,
+			ContainerInfo targetContainer,
+			List<ComponentInfo> components) throws Exception {
+		// set MigLayout for target
+		MigLayoutInfo targetLayout;
+		{
+			targetLayout =
+					(MigLayoutInfo) JavaInfoUtils.createJavaInfo(
+							targetContainer.getEditor(),
+							"net.miginfocom.swing.MigLayout",
+							new ConstructorCreationSupport());
+			targetContainer.setLayout(targetLayout);
+		}
+		// prepare cells of "targetContainer"
+		Point locationOffset;
+		{
+			Rectangle targetBounds =
+					(Rectangle) targetContainer.getArbitraryValue(MigLayoutSurroundSupport.CELLS_KEY);
+			MigLayoutInfo sourceLayout = (MigLayoutInfo) sourceContainer.getLayout();
+			// copy columns
+			{
+				List<MigColumnInfo> targetColumns = Lists.newArrayList();
+				for (int columnIndex = targetBounds.x; columnIndex < targetBounds.right(); columnIndex++) {
+					MigColumnInfo sourceColumn = sourceLayout.getColumns().get(columnIndex);
+					MigColumnInfo targetColumn = new MigColumnInfo(targetLayout);
+					targetColumn.setString(sourceColumn.getString(false));
+					targetColumns.add(targetColumn);
+				}
+				targetLayout.setColumns(targetColumns);
+			}
+			// copy rows
+			{
+				List<MigRowInfo> targetRows = Lists.newArrayList();
+				for (int rowIndex = targetBounds.y; rowIndex < targetBounds.bottom(); rowIndex++) {
+					MigRowInfo sourceRow = sourceLayout.getRows().get(rowIndex);
+					MigRowInfo targetRow = new MigRowInfo(targetLayout);
+					targetRow.setString(sourceRow.getString(false));
+					targetRows.add(targetRow);
+				}
+				targetLayout.setRows(targetRows);
+			}
+			//
+			locationOffset = targetBounds.getLocation().getNegated();
+		}
+		// move components
+		for (ComponentInfo component : components) {
+			CellConstraintsSupport oldConstraints = MigLayoutInfo.getConstraints(component);
+			// move component
+			{
+				Rectangle cells = MigLayoutSurroundSupport.getCells(component);
+				cells = cells.getTranslated(locationOffset);
+				targetLayout.command_MOVE(component, cells.x, false, cells.y, false);
+			}
+			// update constraints
+			{
+				CellConstraintsSupport constraints = MigLayoutInfo.getConstraints(component);
+				constraints.setWidth(oldConstraints.getWidth());
+				constraints.setHeight(oldConstraints.getHeight());
+				constraints.setHorizontalAlignment(oldConstraints.getHorizontalAlignment());
+				constraints.setVerticalAlignment(oldConstraints.getVerticalAlignment());
+				constraints.write();
+			}
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/MigLayoutSurroundSupport.java b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/MigLayoutSurroundSupport.java
index 636c48f42..def9aaf14 100644
--- a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/MigLayoutSurroundSupport.java
+++ b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/MigLayoutSurroundSupport.java
@@ -27,98 +27,98 @@
  * @coverage swing.MigLayout.model
  */
 public final class MigLayoutSurroundSupport extends LayoutSurroundSupport {
-  static final String CELLS_KEY = "SurroundSupport_CELLS";
-  private final MigLayoutInfo m_layout;
+	static final String CELLS_KEY = "SurroundSupport_CELLS";
+	private final MigLayoutInfo m_layout;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public MigLayoutSurroundSupport(MigLayoutInfo layout) {
-    super(layout);
-    m_layout = layout;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public MigLayoutSurroundSupport(MigLayoutInfo layout) {
+		super(layout);
+		m_layout = layout;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Operation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Rectangle m_enclosingCells;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Operation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Rectangle m_enclosingCells;
 
-  @Override
-  protected boolean validateComponents(List<ComponentInfo> components) throws Exception {
-    // prepare enclosing bounds
-    {
-      m_enclosingCells = getCells(components.get(0));
-      for (ComponentInfo component : components) {
-        m_enclosingCells.union(getCells(component));
-      }
-    }
-    // check that there are no other controls in enclosing bounds
-    for (ComponentInfo component : m_layout.getContainer().getChildrenComponents()) {
-      if (!components.contains(component) && m_enclosingCells.intersects(getCells(component))) {
-        return false;
-      }
-    }
-    // continue
-    return super.validateComponents(components);
-  }
+	@Override
+	protected boolean validateComponents(List<ComponentInfo> components) throws Exception {
+		// prepare enclosing bounds
+		{
+			m_enclosingCells = getCells(components.get(0));
+			for (ComponentInfo component : components) {
+				m_enclosingCells.union(getCells(component));
+			}
+		}
+		// check that there are no other controls in enclosing bounds
+		for (ComponentInfo component : m_layout.getContainer().getChildrenComponents()) {
+			if (!components.contains(component) && m_enclosingCells.intersects(getCells(component))) {
+				return false;
+			}
+		}
+		// continue
+		return super.validateComponents(components);
+	}
 
-  @Override
-  protected void addContainer(ContainerInfo container, List<ComponentInfo> components)
-      throws Exception {
-    container.putArbitraryValue(CELLS_KEY, m_enclosingCells);
-    // don't grab
-    {
-      JavaInfoUtils.setParameter(container, GridAlignmentHelper.V_GRAB_HORIZONTAL, "false");
-      JavaInfoUtils.setParameter(container, GridAlignmentHelper.V_GRAB_VERTICAL, "false");
-    }
-    // add container
-    m_layout.command_CREATE(container, m_enclosingCells.x, false, m_enclosingCells.y, false);
-    setCells(container, m_enclosingCells);
-    // set FILL/FILL alignments
-    {
-      CellConstraintsSupport constraints = MigLayoutInfo.getConstraints(container);
-      constraints.setHorizontalAlignment(MigColumnInfo.Alignment.FILL);
-      constraints.setVerticalAlignment(MigRowInfo.Alignment.FILL);
-      constraints.write();
-    }
-  }
+	@Override
+	protected void addContainer(ContainerInfo container, List<ComponentInfo> components)
+			throws Exception {
+		container.putArbitraryValue(CELLS_KEY, m_enclosingCells);
+		// don't grab
+		{
+			JavaInfoUtils.setParameter(container, GridAlignmentHelper.V_GRAB_HORIZONTAL, "false");
+			JavaInfoUtils.setParameter(container, GridAlignmentHelper.V_GRAB_VERTICAL, "false");
+		}
+		// add container
+		m_layout.command_CREATE(container, m_enclosingCells.x, false, m_enclosingCells.y, false);
+		setCells(container, m_enclosingCells);
+		// set FILL/FILL alignments
+		{
+			CellConstraintsSupport constraints = MigLayoutInfo.getConstraints(container);
+			constraints.setHorizontalAlignment(MigColumnInfo.Alignment.FILL);
+			constraints.setVerticalAlignment(MigRowInfo.Alignment.FILL);
+			constraints.write();
+		}
+	}
 
-  @Override
-  protected void moveDone(ContainerInfo container, List<ComponentInfo> components) throws Exception {
-    super.moveDone(container, components);
-    // "container" may be only component in some columns/rows, so no need for spanning
-    m_layout.normalizeSpanning();
-  }
+	@Override
+	protected void moveDone(ContainerInfo container, List<ComponentInfo> components) throws Exception {
+		super.moveDone(container, components);
+		// "container" may be only component in some columns/rows, so no need for spanning
+		m_layout.normalizeSpanning();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets the {@link Rectangle} with grid bounds, i.e. column/row plus width/height span.
-   */
-  static void setCells(ComponentInfo component, Rectangle cells) throws Exception {
-    CellConstraintsSupport constraints = MigLayoutInfo.getConstraints(component);
-    constraints.setX(cells.x);
-    constraints.setY(cells.y);
-    constraints.setWidth(cells.width);
-    constraints.setHeight(cells.height);
-    constraints.write();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets the {@link Rectangle} with grid bounds, i.e. column/row plus width/height span.
+	 */
+	static void setCells(ComponentInfo component, Rectangle cells) throws Exception {
+		CellConstraintsSupport constraints = MigLayoutInfo.getConstraints(component);
+		constraints.setX(cells.x);
+		constraints.setY(cells.y);
+		constraints.setWidth(cells.width);
+		constraints.setHeight(cells.height);
+		constraints.write();
+	}
 
-  /**
-   * @return the {@link Rectangle} with grid bounds, i.e. column/row plus width/height span.
-   */
-  static Rectangle getCells(ComponentInfo component) throws Exception {
-    CellConstraintsSupport constraints = MigLayoutInfo.getConstraints(component);
-    return new Rectangle(constraints.getX(),
-        constraints.getY(),
-        constraints.getWidth(),
-        constraints.getHeight());
-  }
+	/**
+	 * @return the {@link Rectangle} with grid bounds, i.e. column/row plus width/height span.
+	 */
+	static Rectangle getCells(ComponentInfo component) throws Exception {
+		CellConstraintsSupport constraints = MigLayoutInfo.getConstraints(component);
+		return new Rectangle(constraints.getX(),
+				constraints.getY(),
+				constraints.getWidth(),
+				constraints.getHeight());
+	}
 }
diff --git a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/MigRowInfo.java b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/MigRowInfo.java
index 704656499..fedd9ecf6 100644
--- a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/MigRowInfo.java
+++ b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/MigRowInfo.java
@@ -36,180 +36,180 @@
  * @coverage swing.MigLayout.model
  */
 public final class MigRowInfo extends MigDimensionInfo {
-  public enum Alignment {
-    UNKNOWN, DEFAULT, TOP, CENTER, BOTTOM, FILL, BASELINE;
-    /**
-     * @return the small image (5x9) to display current alignment to user.
-     */
-    public Image getSmallImage() {
-      String pattern = "alignment/v/small/{0}.gif";
-      String path = MessageFormat.format(pattern, name().toLowerCase());
-      return Activator.getImage(path);
-    }
-
-    /**
-     * @return the big image (16x16) to display for user in menu.
-     */
-    public ImageDescriptor getMenuImage() {
-      String pattern = "alignment/v/menu/{0}.gif";
-      String path = MessageFormat.format(pattern, name().toLowerCase());
-      return Activator.getImageDescriptor(path);
-    }
-
-    /**
-     * @return the text to use for menu item or toolbar tooltip.
-     */
-    public String getText() {
-      return StringUtils.capitalize(name().toLowerCase());
-    }
-  }
-
-  public static final Alignment[] ALIGNMENTS_TO_SET = new Alignment[]{
-      Alignment.DEFAULT,
-      Alignment.TOP,
-      Alignment.CENTER,
-      Alignment.BOTTOM,
-      Alignment.FILL,
-      Alignment.BASELINE};
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public MigRowInfo(MigLayoutInfo layout) {
-    super(layout, false);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void delete() throws Exception {
-    m_layout.deleteRow(getIndex());
-  }
-
-  @Override
-  public List<? extends MigDimensionInfo> getSiblings() {
-    return m_layout.getRows();
-  }
-
-  @Override
-  protected DimConstraint fetchConstraint() {
-    int index = getIndex();
-    AC colSpecs = (AC) ReflectionUtils.getFieldObject(m_layout.getObject(), "rowSpecs");
-    if (index >= 0 && index < colSpecs.getCount()) {
-      return colSpecs.getConstaints()[index];
-    } else {
-      return createDefaultConstraint();
-    }
-  }
-
-  @Override
-  protected DimConstraint createDefaultConstraint() {
-    return ConstraintParser.parseRowConstraints("[]").getConstaints()[0];
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Alignment
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the default {@link Alignment} for components in this {@link MigRowInfo}.
-   */
-  public Alignment getAlignment(boolean resolveDefault) {
-    return getAlignment(m_constraint, true, resolveDefault);
-  }
-
-  /**
-   * Sets default {@link Alignment} for components in this {@link MigRowInfo}.
-   */
-  public void setAlignment(Alignment alignment) {
-    setAlignment(m_constraint, alignment, true);
-  }
-
-  /**
-   * @return the {@link Alignment} enum converted from alignment of {@link DimConstraint}.
-   */
-  static Alignment getAlignment(DimConstraint constraint, boolean forRow, boolean resolveDefault) {
-    if (forRow && constraint.isFill()) {
-      return Alignment.FILL;
-    }
-    if (!forRow && constraint.getGrow() != null) {
-      return Alignment.FILL;
-    }
-    // convert to enum
-    UnitValue alignment =
-        resolveDefault ? constraint.getAlignOrDefault(false) : constraint.getAlign();
-    if (alignment == null) {
-      return Alignment.DEFAULT;
-    } else if (alignment == IDEUtil.TOP) {
-      return Alignment.TOP;
-    } else if (alignment == IDEUtil.CENTER) {
-      return Alignment.CENTER;
-    } else if (alignment == IDEUtil.BOTTOM) {
-      return Alignment.BOTTOM;
-    } else if (alignment == IDEUtil.BASELINE_IDENTITY) {
-      return Alignment.BASELINE;
-    }
-    // unknown
-    return Alignment.UNKNOWN;
-  }
-
-  /**
-   * Updates {@link DimConstraint} with {@link Alignment} enum value.
-   */
-  static void setAlignment(DimConstraint constraint, Alignment alignment, boolean forRow) {
-    Assert.isNotNull(alignment);
-    // set default alignment
-    if (alignment == Alignment.DEFAULT) {
-      constraint.setAlign(null);
-      if (forRow) {
-        constraint.setFill(false);
-      } else {
-        constraint.setGrow(null);
-      }
-      return;
-    }
-    // special support for FILL
-    if (alignment == Alignment.FILL) {
-      if (forRow) {
-        constraint.setFill(true);
-      } else {
-        constraint.setGrow(100f);
-      }
-      constraint.setAlign(null);
-      return;
-    }
-    // prepare alignment as String
-    UnitValue alignmentValue;
-    switch (alignment) {
-      case TOP :
-        alignmentValue = IDEUtil.TOP;
-        break;
-      case CENTER :
-        alignmentValue = IDEUtil.CENTER;
-        break;
-      case BOTTOM :
-        alignmentValue = IDEUtil.BOTTOM;
-        break;
-      case BASELINE :
-        alignmentValue = IDEUtil.BASELINE_IDENTITY;
-        break;
-      default :
-        throw new IllegalArgumentException(MessageFormat.format(
-            ModelMessages.MigRowInfo_canNotSetAlignment,
-            alignment));
-    }
-    // parse alignment, update constraint
-    constraint.setAlign(alignmentValue);
-    if (!forRow) {
-      constraint.setGrow(null);
-    } else {
-      constraint.setFill(false);
-    }
-  }
+	public enum Alignment {
+		UNKNOWN, DEFAULT, TOP, CENTER, BOTTOM, FILL, BASELINE;
+		/**
+		 * @return the small image (5x9) to display current alignment to user.
+		 */
+		public Image getSmallImage() {
+			String pattern = "alignment/v/small/{0}.gif";
+			String path = MessageFormat.format(pattern, name().toLowerCase());
+			return Activator.getImage(path);
+		}
+
+		/**
+		 * @return the big image (16x16) to display for user in menu.
+		 */
+		public ImageDescriptor getMenuImage() {
+			String pattern = "alignment/v/menu/{0}.gif";
+			String path = MessageFormat.format(pattern, name().toLowerCase());
+			return Activator.getImageDescriptor(path);
+		}
+
+		/**
+		 * @return the text to use for menu item or toolbar tooltip.
+		 */
+		public String getText() {
+			return StringUtils.capitalize(name().toLowerCase());
+		}
+	}
+
+	public static final Alignment[] ALIGNMENTS_TO_SET = new Alignment[]{
+			Alignment.DEFAULT,
+			Alignment.TOP,
+			Alignment.CENTER,
+			Alignment.BOTTOM,
+			Alignment.FILL,
+			Alignment.BASELINE};
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public MigRowInfo(MigLayoutInfo layout) {
+		super(layout, false);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void delete() throws Exception {
+		m_layout.deleteRow(getIndex());
+	}
+
+	@Override
+	public List<? extends MigDimensionInfo> getSiblings() {
+		return m_layout.getRows();
+	}
+
+	@Override
+	protected DimConstraint fetchConstraint() {
+		int index = getIndex();
+		AC colSpecs = (AC) ReflectionUtils.getFieldObject(m_layout.getObject(), "rowSpecs");
+		if (index >= 0 && index < colSpecs.getCount()) {
+			return colSpecs.getConstaints()[index];
+		} else {
+			return createDefaultConstraint();
+		}
+	}
+
+	@Override
+	protected DimConstraint createDefaultConstraint() {
+		return ConstraintParser.parseRowConstraints("[]").getConstaints()[0];
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Alignment
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the default {@link Alignment} for components in this {@link MigRowInfo}.
+	 */
+	public Alignment getAlignment(boolean resolveDefault) {
+		return getAlignment(m_constraint, true, resolveDefault);
+	}
+
+	/**
+	 * Sets default {@link Alignment} for components in this {@link MigRowInfo}.
+	 */
+	public void setAlignment(Alignment alignment) {
+		setAlignment(m_constraint, alignment, true);
+	}
+
+	/**
+	 * @return the {@link Alignment} enum converted from alignment of {@link DimConstraint}.
+	 */
+	static Alignment getAlignment(DimConstraint constraint, boolean forRow, boolean resolveDefault) {
+		if (forRow && constraint.isFill()) {
+			return Alignment.FILL;
+		}
+		if (!forRow && constraint.getGrow() != null) {
+			return Alignment.FILL;
+		}
+		// convert to enum
+		UnitValue alignment =
+				resolveDefault ? constraint.getAlignOrDefault(false) : constraint.getAlign();
+		if (alignment == null) {
+			return Alignment.DEFAULT;
+		} else if (alignment == IDEUtil.TOP) {
+			return Alignment.TOP;
+		} else if (alignment == IDEUtil.CENTER) {
+			return Alignment.CENTER;
+		} else if (alignment == IDEUtil.BOTTOM) {
+			return Alignment.BOTTOM;
+		} else if (alignment == IDEUtil.BASELINE_IDENTITY) {
+			return Alignment.BASELINE;
+		}
+		// unknown
+		return Alignment.UNKNOWN;
+	}
+
+	/**
+	 * Updates {@link DimConstraint} with {@link Alignment} enum value.
+	 */
+	static void setAlignment(DimConstraint constraint, Alignment alignment, boolean forRow) {
+		Assert.isNotNull(alignment);
+		// set default alignment
+		if (alignment == Alignment.DEFAULT) {
+			constraint.setAlign(null);
+			if (forRow) {
+				constraint.setFill(false);
+			} else {
+				constraint.setGrow(null);
+			}
+			return;
+		}
+		// special support for FILL
+		if (alignment == Alignment.FILL) {
+			if (forRow) {
+				constraint.setFill(true);
+			} else {
+				constraint.setGrow(100f);
+			}
+			constraint.setAlign(null);
+			return;
+		}
+		// prepare alignment as String
+		UnitValue alignmentValue;
+		switch (alignment) {
+		case TOP :
+			alignmentValue = IDEUtil.TOP;
+			break;
+		case CENTER :
+			alignmentValue = IDEUtil.CENTER;
+			break;
+		case BOTTOM :
+			alignmentValue = IDEUtil.BOTTOM;
+			break;
+		case BASELINE :
+			alignmentValue = IDEUtil.BASELINE_IDENTITY;
+			break;
+		default :
+			throw new IllegalArgumentException(MessageFormat.format(
+					ModelMessages.MigRowInfo_canNotSetAlignment,
+					alignment));
+		}
+		// parse alignment, update constraint
+		constraint.setAlign(alignmentValue);
+		if (!forRow) {
+			constraint.setGrow(null);
+		} else {
+			constraint.setFill(false);
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/ModelMessages.java b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/ModelMessages.java
index 6ca3fecd9..fc2595687 100644
--- a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/ModelMessages.java
+++ b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/ModelMessages.java
@@ -3,103 +3,103 @@
 import org.eclipse.osgi.util.NLS;
 
 public class ModelMessages extends NLS {
-  private static final String BUNDLE_NAME =
-      "org.eclipse.wb.internal.swing.MigLayout.model.ModelMessages";
-  public static String CellConstraintsAssistantPage_gridGroup;
-  public static String CellConstraintsAssistantPage_gridHeight;
-  public static String CellConstraintsAssistantPage_gridWidth;
-  public static String CellConstraintsAssistantPage_gridX;
-  public static String CellConstraintsAssistantPage_gridY;
-  public static String CellConstraintsAssistantPage_hAlignment_center;
-  public static String CellConstraintsAssistantPage_hAlignment_default;
-  public static String CellConstraintsAssistantPage_hAlignment_fill;
-  public static String CellConstraintsAssistantPage_hAlignment_leading;
-  public static String CellConstraintsAssistantPage_hAlignment_left;
-  public static String CellConstraintsAssistantPage_hAlignment_right;
-  public static String CellConstraintsAssistantPage_hAlignment_trailing;
-  public static String CellConstraintsAssistantPage_hAlignmentGroup;
-  public static String CellConstraintsAssistantPage_vAlignment_baseline;
-  public static String CellConstraintsAssistantPage_vAlignment_bottom;
-  public static String CellConstraintsAssistantPage_vAlignment_center;
-  public static String CellConstraintsAssistantPage_vAlignment_default;
-  public static String CellConstraintsAssistantPage_vAlignment_fill;
-  public static String CellConstraintsAssistantPage_vAlignment_top;
-  public static String CellConstraintsAssistantPage_vAlignmentGroup;
-  public static String CellConstraintsSupport_gridHeight_outOfRange;
-  public static String CellConstraintsSupport_gridWidth_outOfRange;
-  public static String CellConstraintsSupport_gridX_outOfRange;
-  public static String CellConstraintsSupport_gridY_outOfRange;
-  public static String CellConstraintsSupport_horizontalAlignment;
-  public static String CellConstraintsSupport_horizontalAlignment_center;
-  public static String CellConstraintsSupport_horizontalAlignment_default;
-  public static String CellConstraintsSupport_horizontalAlignment_fill;
-  public static String CellConstraintsSupport_horizontalAlignment_leading;
-  public static String CellConstraintsSupport_horizontalAlignment_left;
-  public static String CellConstraintsSupport_horizontalAlignment_right;
-  public static String CellConstraintsSupport_horizontalAlignment_trailing;
-  public static String CellConstraintsSupport_integerValueExpected;
-  public static String CellConstraintsSupport_verticalAlignment;
-  public static String CellConstraintsSupport_verticalAlignment_baseline;
-  public static String CellConstraintsSupport_verticalAlignment_bottom;
-  public static String CellConstraintsSupport_verticalAlignment_center;
-  public static String CellConstraintsSupport_verticalAlignment_default;
-  public static String CellConstraintsSupport_verticalAlignment_fill;
-  public static String CellConstraintsSupport_verticalAlignment_top;
-  public static String CellEditDialog_cellProperties;
-  public static String CellEditDialog_specification;
-  public static String ColumnEditDialog_alignmentCenter;
-  public static String ColumnEditDialog_alignmentDefault;
-  public static String ColumnEditDialog_alignmentFill;
-  public static String ColumnEditDialog_alignmentLeading;
-  public static String ColumnEditDialog_alignmentLeft;
-  public static String ColumnEditDialog_alignmentRight;
-  public static String ColumnEditDialog_alignmentTrailing;
-  public static String ColumnEditDialog_title;
-  public static String ColumnsDialog_dialogMessage;
-  public static String ColumnsDialog_dialogTitle;
-  public static String ColumnsDialog_viewerTitle;
-  public static String DimensionEditDialog_applyButton;
-  public static String DimensionEditDialog_defaultAlignment;
-  public static String DimensionEditDialog_growTitle;
-  public static String DimensionEditDialog_index;
-  public static String DimensionEditDialog_maximumSize;
-  public static String DimensionEditDialog_minimumSize;
-  public static String DimensionEditDialog_nextButton;
-  public static String DimensionEditDialog_preferredSize;
-  public static String DimensionEditDialog_previousButton;
-  public static String DimensionEditDialog_shrinkTitle;
-  public static String DimensionEditDialog_size;
-  public static String DimensionEditDialog_specification;
-  public static String DimensionEditDialog_title;
-  public static String DimensionResizeComposite_customPriority;
-  public static String DimensionResizeComposite_defaultPriority;
-  public static String DimensionsDialog_appendButton;
-  public static String DimensionsDialog_columnNumber;
-  public static String DimensionsDialog_columnSpecification;
-  public static String DimensionsDialog_editButton;
-  public static String DimensionsDialog_insertButton;
-  public static String DimensionsDialog_moveDownButton;
-  public static String DimensionsDialog_moveUpButton;
-  public static String DimensionsDialog_removeButton;
-  public static String MigColumnInfo_canNotSetAlignment;
-  public static String MigLayoutInfo_editColumns;
-  public static String MigLayoutInfo_editRows;
-  public static String MigRowInfo_canNotSetAlignment;
-  public static String RowEditDialog_alignmentBaseline;
-  public static String RowEditDialog_alignmentBottom;
-  public static String RowEditDialog_alignmentCenter;
-  public static String RowEditDialog_alignmentDefault;
-  public static String RowEditDialog_alignmentFill;
-  public static String RowEditDialog_alignmentTop;
-  public static String RowEditDialog_title;
-  public static String RowsDialog_dialogMessage;
-  public static String RowsDialog_dialogTitle;
-  public static String RowsDialog_viewerTitle;
-  static {
-    // initialize resource bundle
-    NLS.initializeMessages(BUNDLE_NAME, ModelMessages.class);
-  }
+	private static final String BUNDLE_NAME =
+			"org.eclipse.wb.internal.swing.MigLayout.model.ModelMessages";
+	public static String CellConstraintsAssistantPage_gridGroup;
+	public static String CellConstraintsAssistantPage_gridHeight;
+	public static String CellConstraintsAssistantPage_gridWidth;
+	public static String CellConstraintsAssistantPage_gridX;
+	public static String CellConstraintsAssistantPage_gridY;
+	public static String CellConstraintsAssistantPage_hAlignment_center;
+	public static String CellConstraintsAssistantPage_hAlignment_default;
+	public static String CellConstraintsAssistantPage_hAlignment_fill;
+	public static String CellConstraintsAssistantPage_hAlignment_leading;
+	public static String CellConstraintsAssistantPage_hAlignment_left;
+	public static String CellConstraintsAssistantPage_hAlignment_right;
+	public static String CellConstraintsAssistantPage_hAlignment_trailing;
+	public static String CellConstraintsAssistantPage_hAlignmentGroup;
+	public static String CellConstraintsAssistantPage_vAlignment_baseline;
+	public static String CellConstraintsAssistantPage_vAlignment_bottom;
+	public static String CellConstraintsAssistantPage_vAlignment_center;
+	public static String CellConstraintsAssistantPage_vAlignment_default;
+	public static String CellConstraintsAssistantPage_vAlignment_fill;
+	public static String CellConstraintsAssistantPage_vAlignment_top;
+	public static String CellConstraintsAssistantPage_vAlignmentGroup;
+	public static String CellConstraintsSupport_gridHeight_outOfRange;
+	public static String CellConstraintsSupport_gridWidth_outOfRange;
+	public static String CellConstraintsSupport_gridX_outOfRange;
+	public static String CellConstraintsSupport_gridY_outOfRange;
+	public static String CellConstraintsSupport_horizontalAlignment;
+	public static String CellConstraintsSupport_horizontalAlignment_center;
+	public static String CellConstraintsSupport_horizontalAlignment_default;
+	public static String CellConstraintsSupport_horizontalAlignment_fill;
+	public static String CellConstraintsSupport_horizontalAlignment_leading;
+	public static String CellConstraintsSupport_horizontalAlignment_left;
+	public static String CellConstraintsSupport_horizontalAlignment_right;
+	public static String CellConstraintsSupport_horizontalAlignment_trailing;
+	public static String CellConstraintsSupport_integerValueExpected;
+	public static String CellConstraintsSupport_verticalAlignment;
+	public static String CellConstraintsSupport_verticalAlignment_baseline;
+	public static String CellConstraintsSupport_verticalAlignment_bottom;
+	public static String CellConstraintsSupport_verticalAlignment_center;
+	public static String CellConstraintsSupport_verticalAlignment_default;
+	public static String CellConstraintsSupport_verticalAlignment_fill;
+	public static String CellConstraintsSupport_verticalAlignment_top;
+	public static String CellEditDialog_cellProperties;
+	public static String CellEditDialog_specification;
+	public static String ColumnEditDialog_alignmentCenter;
+	public static String ColumnEditDialog_alignmentDefault;
+	public static String ColumnEditDialog_alignmentFill;
+	public static String ColumnEditDialog_alignmentLeading;
+	public static String ColumnEditDialog_alignmentLeft;
+	public static String ColumnEditDialog_alignmentRight;
+	public static String ColumnEditDialog_alignmentTrailing;
+	public static String ColumnEditDialog_title;
+	public static String ColumnsDialog_dialogMessage;
+	public static String ColumnsDialog_dialogTitle;
+	public static String ColumnsDialog_viewerTitle;
+	public static String DimensionEditDialog_applyButton;
+	public static String DimensionEditDialog_defaultAlignment;
+	public static String DimensionEditDialog_growTitle;
+	public static String DimensionEditDialog_index;
+	public static String DimensionEditDialog_maximumSize;
+	public static String DimensionEditDialog_minimumSize;
+	public static String DimensionEditDialog_nextButton;
+	public static String DimensionEditDialog_preferredSize;
+	public static String DimensionEditDialog_previousButton;
+	public static String DimensionEditDialog_shrinkTitle;
+	public static String DimensionEditDialog_size;
+	public static String DimensionEditDialog_specification;
+	public static String DimensionEditDialog_title;
+	public static String DimensionResizeComposite_customPriority;
+	public static String DimensionResizeComposite_defaultPriority;
+	public static String DimensionsDialog_appendButton;
+	public static String DimensionsDialog_columnNumber;
+	public static String DimensionsDialog_columnSpecification;
+	public static String DimensionsDialog_editButton;
+	public static String DimensionsDialog_insertButton;
+	public static String DimensionsDialog_moveDownButton;
+	public static String DimensionsDialog_moveUpButton;
+	public static String DimensionsDialog_removeButton;
+	public static String MigColumnInfo_canNotSetAlignment;
+	public static String MigLayoutInfo_editColumns;
+	public static String MigLayoutInfo_editRows;
+	public static String MigRowInfo_canNotSetAlignment;
+	public static String RowEditDialog_alignmentBaseline;
+	public static String RowEditDialog_alignmentBottom;
+	public static String RowEditDialog_alignmentCenter;
+	public static String RowEditDialog_alignmentDefault;
+	public static String RowEditDialog_alignmentFill;
+	public static String RowEditDialog_alignmentTop;
+	public static String RowEditDialog_title;
+	public static String RowsDialog_dialogMessage;
+	public static String RowsDialog_dialogTitle;
+	public static String RowsDialog_viewerTitle;
+	static {
+		// initialize resource bundle
+		NLS.initializeMessages(BUNDLE_NAME, ModelMessages.class);
+	}
 
-  private ModelMessages() {
-  }
+	private ModelMessages() {
+	}
 }
diff --git a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/PreferenceInitializer.java b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/PreferenceInitializer.java
index e4bf3a96d..e9240dbad 100644
--- a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/PreferenceInitializer.java
+++ b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/PreferenceInitializer.java
@@ -22,17 +22,17 @@
  * @coverage swing.MigLayout.model
  */
 public final class PreferenceInitializer extends AbstractPreferenceInitializer
-    implements
-      IPreferenceConstants {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  //	Initializing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void initializeDefaultPreferences() {
-    IPreferenceStore preferenceStore = Activator.getDefault().getPreferenceStore();
-    preferenceStore.setDefault(P_ENABLE_GRAB, true);
-    preferenceStore.setDefault(P_ENABLE_RIGHT_ALIGNMENT, true);
-  }
+implements
+IPreferenceConstants {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	//	Initializing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void initializeDefaultPreferences() {
+		IPreferenceStore preferenceStore = Activator.getDefault().getPreferenceStore();
+		preferenceStore.setDefault(P_ENABLE_GRAB, true);
+		preferenceStore.setDefault(P_ENABLE_RIGHT_ALIGNMENT, true);
+	}
 }
diff --git a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/SelectionActionsSupport.java b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/SelectionActionsSupport.java
index 0726127ec..24720a563 100644
--- a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/SelectionActionsSupport.java
+++ b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/SelectionActionsSupport.java
@@ -29,165 +29,165 @@
  * @coverage swing.MigLayout.model
  */
 public class SelectionActionsSupport extends ObjectEventListener {
-  private final MigLayoutInfo m_layout;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SelectionActionsSupport(MigLayoutInfo layout) {
-    m_layout = layout;
-    m_layout.addBroadcastListener(this);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ObjectEventListener
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void addSelectionActions(List<ObjectInfo> objects, List<Object> actions) throws Exception {
-    if (objects.isEmpty()) {
-      return;
-    }
-    // prepare constraints
-    List<CellConstraintsSupport> constraints = Lists.newArrayList();
-    for (ObjectInfo object : objects) {
-      // check object
-      if (!(object instanceof ComponentInfo) || object.getParent() != m_layout.getContainer()) {
-        return;
-      }
-      // add data info
-      ComponentInfo component = (ComponentInfo) object;
-      constraints.add(MigLayoutInfo.getConstraints(component));
-    }
-    // create horizontal actions
-    actions.add(new Separator());
-    addHorizontalAlignmentAction(actions, constraints, MigColumnInfo.Alignment.DEFAULT);
-    addHorizontalAlignmentAction(actions, constraints, MigColumnInfo.Alignment.LEFT);
-    addHorizontalAlignmentAction(actions, constraints, MigColumnInfo.Alignment.CENTER);
-    addHorizontalAlignmentAction(actions, constraints, MigColumnInfo.Alignment.RIGHT);
-    addHorizontalAlignmentAction(actions, constraints, MigColumnInfo.Alignment.FILL);
-    addHorizontalAlignmentAction(actions, constraints, MigColumnInfo.Alignment.LEADING);
-    addHorizontalAlignmentAction(actions, constraints, MigColumnInfo.Alignment.TRAILING);
-    // create vertical actions
-    actions.add(new Separator());
-    addVerticalAlignmentAction(actions, constraints, MigRowInfo.Alignment.DEFAULT);
-    addVerticalAlignmentAction(actions, constraints, MigRowInfo.Alignment.TOP);
-    addVerticalAlignmentAction(actions, constraints, MigRowInfo.Alignment.CENTER);
-    addVerticalAlignmentAction(actions, constraints, MigRowInfo.Alignment.BOTTOM);
-    addVerticalAlignmentAction(actions, constraints, MigRowInfo.Alignment.FILL);
-    addVerticalAlignmentAction(actions, constraints, MigRowInfo.Alignment.BASELINE);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Horizontal
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void addHorizontalAlignmentAction(List<Object> actions,
-      List<CellConstraintsSupport> constraints,
-      MigColumnInfo.Alignment alignment) {
-    boolean isChecked = hasGivenHorizontalAlignment(constraints, alignment);
-    IAction action = new HorizontalAlignmentAction(constraints, isChecked, alignment);
-    actions.add(action);
-  }
-
-  private boolean hasGivenHorizontalAlignment(List<CellConstraintsSupport> constraints,
-      MigColumnInfo.Alignment alignment) {
-    for (CellConstraintsSupport constraint : constraints) {
-      if (constraint.getHorizontalAlignment() != alignment) {
-        return false;
-      }
-    }
-    return true;
-  }
-
-  private final class HorizontalAlignmentAction extends ObjectInfoAction {
-    private final List<CellConstraintsSupport> m_constraints;
-    private final MigColumnInfo.Alignment m_alignment;
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public HorizontalAlignmentAction(List<CellConstraintsSupport> constraints,
-        boolean checked,
-        MigColumnInfo.Alignment alignment) {
-      super(m_layout, alignment.getText(), alignment.getMenuImage(), AS_RADIO_BUTTON);
-      setChecked(checked);
-      m_constraints = constraints;
-      m_alignment = alignment;
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Run
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    protected void runEx() throws Exception {
-      for (CellConstraintsSupport constraint : m_constraints) {
-        constraint.setHorizontalAlignment(m_alignment);
-        constraint.write();
-      }
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Vertical
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void addVerticalAlignmentAction(List<Object> actions,
-      List<CellConstraintsSupport> constraints,
-      MigRowInfo.Alignment alignment) {
-    boolean isChecked = hasGivenVerticalAlignment(constraints, alignment);
-    IAction action = new VerticalAlignmentAction(constraints, isChecked, alignment);
-    actions.add(action);
-  }
-
-  private boolean hasGivenVerticalAlignment(List<CellConstraintsSupport> constraints,
-      MigRowInfo.Alignment alignment) {
-    for (CellConstraintsSupport constraint : constraints) {
-      if (constraint.getVerticalAlignment() != alignment) {
-        return false;
-      }
-    }
-    return true;
-  }
-
-  private final class VerticalAlignmentAction extends ObjectInfoAction {
-    private final List<CellConstraintsSupport> m_constraints;
-    private final MigRowInfo.Alignment m_alignment;
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public VerticalAlignmentAction(List<CellConstraintsSupport> constraints,
-        boolean checked,
-        MigRowInfo.Alignment alignment) {
-      super(m_layout, alignment.getText(), alignment.getMenuImage(), AS_RADIO_BUTTON);
-      setChecked(checked);
-      m_constraints = constraints;
-      m_alignment = alignment;
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Run
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    protected void runEx() throws Exception {
-      for (CellConstraintsSupport constraint : m_constraints) {
-        constraint.setVerticalAlignment(m_alignment);
-        constraint.write();
-      }
-    }
-  }
+	private final MigLayoutInfo m_layout;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SelectionActionsSupport(MigLayoutInfo layout) {
+		m_layout = layout;
+		m_layout.addBroadcastListener(this);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ObjectEventListener
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void addSelectionActions(List<ObjectInfo> objects, List<Object> actions) throws Exception {
+		if (objects.isEmpty()) {
+			return;
+		}
+		// prepare constraints
+		List<CellConstraintsSupport> constraints = Lists.newArrayList();
+		for (ObjectInfo object : objects) {
+			// check object
+			if (!(object instanceof ComponentInfo) || object.getParent() != m_layout.getContainer()) {
+				return;
+			}
+			// add data info
+			ComponentInfo component = (ComponentInfo) object;
+			constraints.add(MigLayoutInfo.getConstraints(component));
+		}
+		// create horizontal actions
+		actions.add(new Separator());
+		addHorizontalAlignmentAction(actions, constraints, MigColumnInfo.Alignment.DEFAULT);
+		addHorizontalAlignmentAction(actions, constraints, MigColumnInfo.Alignment.LEFT);
+		addHorizontalAlignmentAction(actions, constraints, MigColumnInfo.Alignment.CENTER);
+		addHorizontalAlignmentAction(actions, constraints, MigColumnInfo.Alignment.RIGHT);
+		addHorizontalAlignmentAction(actions, constraints, MigColumnInfo.Alignment.FILL);
+		addHorizontalAlignmentAction(actions, constraints, MigColumnInfo.Alignment.LEADING);
+		addHorizontalAlignmentAction(actions, constraints, MigColumnInfo.Alignment.TRAILING);
+		// create vertical actions
+		actions.add(new Separator());
+		addVerticalAlignmentAction(actions, constraints, MigRowInfo.Alignment.DEFAULT);
+		addVerticalAlignmentAction(actions, constraints, MigRowInfo.Alignment.TOP);
+		addVerticalAlignmentAction(actions, constraints, MigRowInfo.Alignment.CENTER);
+		addVerticalAlignmentAction(actions, constraints, MigRowInfo.Alignment.BOTTOM);
+		addVerticalAlignmentAction(actions, constraints, MigRowInfo.Alignment.FILL);
+		addVerticalAlignmentAction(actions, constraints, MigRowInfo.Alignment.BASELINE);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Horizontal
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void addHorizontalAlignmentAction(List<Object> actions,
+			List<CellConstraintsSupport> constraints,
+			MigColumnInfo.Alignment alignment) {
+		boolean isChecked = hasGivenHorizontalAlignment(constraints, alignment);
+		IAction action = new HorizontalAlignmentAction(constraints, isChecked, alignment);
+		actions.add(action);
+	}
+
+	private boolean hasGivenHorizontalAlignment(List<CellConstraintsSupport> constraints,
+			MigColumnInfo.Alignment alignment) {
+		for (CellConstraintsSupport constraint : constraints) {
+			if (constraint.getHorizontalAlignment() != alignment) {
+				return false;
+			}
+		}
+		return true;
+	}
+
+	private final class HorizontalAlignmentAction extends ObjectInfoAction {
+		private final List<CellConstraintsSupport> m_constraints;
+		private final MigColumnInfo.Alignment m_alignment;
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public HorizontalAlignmentAction(List<CellConstraintsSupport> constraints,
+				boolean checked,
+				MigColumnInfo.Alignment alignment) {
+			super(m_layout, alignment.getText(), alignment.getMenuImage(), AS_RADIO_BUTTON);
+			setChecked(checked);
+			m_constraints = constraints;
+			m_alignment = alignment;
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Run
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		protected void runEx() throws Exception {
+			for (CellConstraintsSupport constraint : m_constraints) {
+				constraint.setHorizontalAlignment(m_alignment);
+				constraint.write();
+			}
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Vertical
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void addVerticalAlignmentAction(List<Object> actions,
+			List<CellConstraintsSupport> constraints,
+			MigRowInfo.Alignment alignment) {
+		boolean isChecked = hasGivenVerticalAlignment(constraints, alignment);
+		IAction action = new VerticalAlignmentAction(constraints, isChecked, alignment);
+		actions.add(action);
+	}
+
+	private boolean hasGivenVerticalAlignment(List<CellConstraintsSupport> constraints,
+			MigRowInfo.Alignment alignment) {
+		for (CellConstraintsSupport constraint : constraints) {
+			if (constraint.getVerticalAlignment() != alignment) {
+				return false;
+			}
+		}
+		return true;
+	}
+
+	private final class VerticalAlignmentAction extends ObjectInfoAction {
+		private final List<CellConstraintsSupport> m_constraints;
+		private final MigRowInfo.Alignment m_alignment;
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public VerticalAlignmentAction(List<CellConstraintsSupport> constraints,
+				boolean checked,
+				MigRowInfo.Alignment alignment) {
+			super(m_layout, alignment.getText(), alignment.getMenuImage(), AS_RADIO_BUTTON);
+			setChecked(checked);
+			m_constraints = constraints;
+			m_alignment = alignment;
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Run
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		protected void runEx() throws Exception {
+			for (CellConstraintsSupport constraint : m_constraints) {
+				constraint.setVerticalAlignment(m_alignment);
+				constraint.write();
+			}
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/ui/AlignmentDescription.java b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/ui/AlignmentDescription.java
index 0e2209426..5ca830e31 100644
--- a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/ui/AlignmentDescription.java
+++ b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/ui/AlignmentDescription.java
@@ -19,35 +19,35 @@
  * @coverage swing.MigLayout.ui
  */
 public final class AlignmentDescription<A extends Enum<?>> {
-  private final A m_alignment;
-  private final String m_title;
+	private final A m_alignment;
+	private final String m_title;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AlignmentDescription(A alignment, String title) {
-    m_alignment = alignment;
-    m_title = title;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AlignmentDescription(A alignment, String title) {
+		m_alignment = alignment;
+		m_title = title;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the alignment value.
-   */
-  public A getAlignment() {
-    return m_alignment;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the alignment value.
+	 */
+	public A getAlignment() {
+		return m_alignment;
+	}
 
-  /**
-   * @return the title for alignment.
-   */
-  public String getTitle() {
-    return m_title;
-  }
+	/**
+	 * @return the title for alignment.
+	 */
+	public String getTitle() {
+		return m_title;
+	}
 }
diff --git a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/ui/CellConstraintsAssistantPage.java b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/ui/CellConstraintsAssistantPage.java
index 169fe50da..dbbe714f5 100644
--- a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/ui/CellConstraintsAssistantPage.java
+++ b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/ui/CellConstraintsAssistantPage.java
@@ -33,109 +33,109 @@
  * @coverage swing.MigLayout.ui
  */
 public class CellConstraintsAssistantPage extends AbstractAssistantPage {
-  private final MigLayoutInfo m_layout;
+	private final MigLayoutInfo m_layout;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CellConstraintsAssistantPage(Composite parent,
-      MigLayoutInfo layout,
-      List<ObjectInfo> objects) {
-    super(parent, objects);
-    m_layout = layout;
-    GridLayoutFactory.create(this).columns(3);
-    // horizontal alignments
-    {
-      Group horizontalGroup =
-          addChoiceProperty(
-              this,
-              "h alignment",
-              ModelMessages.CellConstraintsAssistantPage_hAlignmentGroup,
-              new Object[][]{
-                  new Object[]{
-                      ModelMessages.CellConstraintsAssistantPage_hAlignment_default,
-                      MigColumnInfo.Alignment.DEFAULT},
-                  new Object[]{
-                      ModelMessages.CellConstraintsAssistantPage_hAlignment_left,
-                      MigColumnInfo.Alignment.LEFT},
-                  new Object[]{
-                      ModelMessages.CellConstraintsAssistantPage_hAlignment_center,
-                      MigColumnInfo.Alignment.CENTER},
-                  new Object[]{
-                      ModelMessages.CellConstraintsAssistantPage_hAlignment_right,
-                      MigColumnInfo.Alignment.RIGHT},
-                  new Object[]{
-                      ModelMessages.CellConstraintsAssistantPage_hAlignment_fill,
-                      MigColumnInfo.Alignment.FILL},
-                  new Object[]{
-                      ModelMessages.CellConstraintsAssistantPage_hAlignment_leading,
-                      MigColumnInfo.Alignment.LEADING},
-                  new Object[]{
-                      ModelMessages.CellConstraintsAssistantPage_hAlignment_trailing,
-                      MigColumnInfo.Alignment.TRAILING},});
-      GridDataFactory.modify(horizontalGroup).fill();
-    }
-    // vertical alignments
-    {
-      Group verticalGroup =
-          addChoiceProperty(
-              this,
-              "v alignment",
-              ModelMessages.CellConstraintsAssistantPage_vAlignmentGroup,
-              new Object[][]{
-                  new Object[]{
-                      ModelMessages.CellConstraintsAssistantPage_vAlignment_default,
-                      MigRowInfo.Alignment.DEFAULT},
-                  new Object[]{
-                      ModelMessages.CellConstraintsAssistantPage_vAlignment_top,
-                      MigRowInfo.Alignment.TOP},
-                  new Object[]{
-                      ModelMessages.CellConstraintsAssistantPage_vAlignment_center,
-                      MigRowInfo.Alignment.CENTER},
-                  new Object[]{
-                      ModelMessages.CellConstraintsAssistantPage_vAlignment_bottom,
-                      MigRowInfo.Alignment.BOTTOM},
-                  new Object[]{
-                      ModelMessages.CellConstraintsAssistantPage_vAlignment_fill,
-                      MigRowInfo.Alignment.FILL},
-                  new Object[]{
-                      ModelMessages.CellConstraintsAssistantPage_vAlignment_baseline,
-                      MigRowInfo.Alignment.BASELINE},});
-      GridDataFactory.modify(verticalGroup).fill();
-    }
-    // grid
-    {
-      Group gridGroup =
-          addIntegerProperties(
-              this,
-              ModelMessages.CellConstraintsAssistantPage_gridGroup,
-              new String[][]{
-                  {"grid x", ModelMessages.CellConstraintsAssistantPage_gridX},
-                  {"grid y", ModelMessages.CellConstraintsAssistantPage_gridY},
-                  {"grid width", ModelMessages.CellConstraintsAssistantPage_gridWidth},
-                  {"grid height", ModelMessages.CellConstraintsAssistantPage_gridHeight}});
-      GridDataFactory.modify(gridGroup).fill();
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CellConstraintsAssistantPage(Composite parent,
+			MigLayoutInfo layout,
+			List<ObjectInfo> objects) {
+		super(parent, objects);
+		m_layout = layout;
+		GridLayoutFactory.create(this).columns(3);
+		// horizontal alignments
+		{
+			Group horizontalGroup =
+					addChoiceProperty(
+							this,
+							"h alignment",
+							ModelMessages.CellConstraintsAssistantPage_hAlignmentGroup,
+							new Object[][]{
+								new Object[]{
+										ModelMessages.CellConstraintsAssistantPage_hAlignment_default,
+										MigColumnInfo.Alignment.DEFAULT},
+								new Object[]{
+										ModelMessages.CellConstraintsAssistantPage_hAlignment_left,
+										MigColumnInfo.Alignment.LEFT},
+								new Object[]{
+										ModelMessages.CellConstraintsAssistantPage_hAlignment_center,
+										MigColumnInfo.Alignment.CENTER},
+								new Object[]{
+										ModelMessages.CellConstraintsAssistantPage_hAlignment_right,
+										MigColumnInfo.Alignment.RIGHT},
+								new Object[]{
+										ModelMessages.CellConstraintsAssistantPage_hAlignment_fill,
+										MigColumnInfo.Alignment.FILL},
+								new Object[]{
+										ModelMessages.CellConstraintsAssistantPage_hAlignment_leading,
+										MigColumnInfo.Alignment.LEADING},
+								new Object[]{
+										ModelMessages.CellConstraintsAssistantPage_hAlignment_trailing,
+										MigColumnInfo.Alignment.TRAILING},});
+			GridDataFactory.modify(horizontalGroup).fill();
+		}
+		// vertical alignments
+		{
+			Group verticalGroup =
+					addChoiceProperty(
+							this,
+							"v alignment",
+							ModelMessages.CellConstraintsAssistantPage_vAlignmentGroup,
+							new Object[][]{
+								new Object[]{
+										ModelMessages.CellConstraintsAssistantPage_vAlignment_default,
+										MigRowInfo.Alignment.DEFAULT},
+								new Object[]{
+										ModelMessages.CellConstraintsAssistantPage_vAlignment_top,
+										MigRowInfo.Alignment.TOP},
+								new Object[]{
+										ModelMessages.CellConstraintsAssistantPage_vAlignment_center,
+										MigRowInfo.Alignment.CENTER},
+								new Object[]{
+										ModelMessages.CellConstraintsAssistantPage_vAlignment_bottom,
+										MigRowInfo.Alignment.BOTTOM},
+								new Object[]{
+										ModelMessages.CellConstraintsAssistantPage_vAlignment_fill,
+										MigRowInfo.Alignment.FILL},
+								new Object[]{
+										ModelMessages.CellConstraintsAssistantPage_vAlignment_baseline,
+										MigRowInfo.Alignment.BASELINE},});
+			GridDataFactory.modify(verticalGroup).fill();
+		}
+		// grid
+		{
+			Group gridGroup =
+					addIntegerProperties(
+							this,
+							ModelMessages.CellConstraintsAssistantPage_gridGroup,
+							new String[][]{
+								{"grid x", ModelMessages.CellConstraintsAssistantPage_gridX},
+								{"grid y", ModelMessages.CellConstraintsAssistantPage_gridY},
+								{"grid width", ModelMessages.CellConstraintsAssistantPage_gridWidth},
+								{"grid height", ModelMessages.CellConstraintsAssistantPage_gridHeight}});
+			GridDataFactory.modify(gridGroup).fill();
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AbstractAssistantPage
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected ObjectInfo getEditObject() {
-    return m_layout;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AbstractAssistantPage
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected ObjectInfo getEditObject() {
+		return m_layout;
+	}
 
-  @Override
-  protected Property getCustomProperty(Object object, String propertyName) throws Exception {
-    if (object instanceof ComponentInfo) {
-      ComponentInfo component = (ComponentInfo) object;
-      return MigLayoutInfo.getConstraints(component).getPropertyByTitle(propertyName);
-    }
-    return null;
-  }
+	@Override
+	protected Property getCustomProperty(Object object, String propertyName) throws Exception {
+		if (object instanceof ComponentInfo) {
+			ComponentInfo component = (ComponentInfo) object;
+			return MigLayoutInfo.getConstraints(component).getPropertyByTitle(propertyName);
+		}
+		return null;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/ui/CellEditDialog.java b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/ui/CellEditDialog.java
index 0923b7c79..9d95eea54 100644
--- a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/ui/CellEditDialog.java
+++ b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/ui/CellEditDialog.java
@@ -36,139 +36,139 @@
  * @coverage swing.MigLayout.ui
  */
 public final class CellEditDialog extends ResizableDialog {
-  private final MigLayoutInfo m_layout;
-  private final CellConstraintsSupport m_cell;
-  private final String m_cellString;
+	private final MigLayoutInfo m_layout;
+	private final CellConstraintsSupport m_cell;
+	private final String m_cellString;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CellEditDialog(Shell parentShell, MigLayoutInfo layout, CellConstraintsSupport cell) {
-    super(parentShell, Activator.getDefault());
-    setShellStyle(SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
-    m_layout = layout;
-    m_cell = cell;
-    m_cellString = m_cell.getString();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CellEditDialog(Shell parentShell, MigLayoutInfo layout, CellConstraintsSupport cell) {
+		super(parentShell, Activator.getDefault());
+		setShellStyle(SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
+		m_layout = layout;
+		m_cell = cell;
+		m_cellString = m_cell.getString();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI fields
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  // specification
-  private CellSpecificationComposite m_specificationComposite;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI fields
+	//
+	////////////////////////////////////////////////////////////////////////////
+	// specification
+	private CellSpecificationComposite m_specificationComposite;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void create() {
-    super.create();
-    showCell();
-    m_specificationComposite.setFocus();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void create() {
+		super.create();
+		showCell();
+		m_specificationComposite.setFocus();
+	}
 
-  @Override
-  protected Control createDialogArea(Composite parent) {
-    Composite container = (Composite) super.createDialogArea(parent);
-    createHeaderComposite(container);
-    return container;
-  }
+	@Override
+	protected Control createDialogArea(Composite parent) {
+		Composite container = (Composite) super.createDialogArea(parent);
+		createHeaderComposite(container);
+		return container;
+	}
 
-  @Override
-  protected void configureShell(Shell newShell) {
-    super.configureShell(newShell);
-    newShell.setText(ModelMessages.CellEditDialog_cellProperties);
-  }
+	@Override
+	protected void configureShell(Shell newShell) {
+		super.configureShell(newShell);
+		newShell.setText(ModelMessages.CellEditDialog_cellProperties);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Buttons
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void buttonPressed(int buttonId) {
-    if (buttonId == IDialogConstants.OK_ID) {
-      commitChanges();
-    }
-    if (buttonId == IDialogConstants.CANCEL_ID) {
-      rollbackChanges();
-    }
-    super.buttonPressed(buttonId);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Buttons
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void buttonPressed(int buttonId) {
+		if (buttonId == IDialogConstants.OK_ID) {
+			commitChanges();
+		}
+		if (buttonId == IDialogConstants.CANCEL_ID) {
+			rollbackChanges();
+		}
+		super.buttonPressed(buttonId);
+	}
 
-  /**
-   * Enable/disable OK button.
-   */
-  private void updateButtons(boolean valid) {
-    getButton(IDialogConstants.OK_ID).setEnabled(valid);
-  }
+	/**
+	 * Enable/disable OK button.
+	 */
+	private void updateButtons(boolean valid) {
+		getButton(IDialogConstants.OK_ID).setEnabled(valid);
+	}
 
-  /**
-   * Saves {@link CellConstraintsSupport} changes into source and refreshes GUI.
-   */
-  private void commitChanges() {
-    ExecutionUtils.run(m_layout, new RunnableEx() {
-      public void run() throws Exception {
-        m_cell.write();
-      }
-    });
-  }
+	/**
+	 * Saves {@link CellConstraintsSupport} changes into source and refreshes GUI.
+	 */
+	private void commitChanges() {
+		ExecutionUtils.run(m_layout, new RunnableEx() {
+			public void run() throws Exception {
+				m_cell.write();
+			}
+		});
+	}
 
-  /**
-   * Rolls back changes in {@link CellConstraintsSupport}.
-   */
-  private void rollbackChanges() {
-    ExecutionUtils.runLog(new RunnableEx() {
-      public void run() throws Exception {
-        m_cell.setString(m_cellString);
-      }
-    });
-  }
+	/**
+	 * Rolls back changes in {@link CellConstraintsSupport}.
+	 */
+	private void rollbackChanges() {
+		ExecutionUtils.runLog(new RunnableEx() {
+			public void run() throws Exception {
+				m_cell.setString(m_cellString);
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Composites
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Create the header displaying {@link Composite}.
-   */
-  private void createHeaderComposite(Composite parent) {
-    Composite composite = new Composite(parent, SWT.NONE);
-    GridDataFactory.create(composite).grabH().fill();
-    GridLayoutFactory.create(composite).noMargins().columns(4);
-    // specification
-    {
-      new Label(composite, SWT.NONE).setText(ModelMessages.CellEditDialog_specification);
-      {
-        m_specificationComposite = new CellSpecificationComposite(composite);
-        GridDataFactory.create(m_specificationComposite).spanH(3).indentHC(3).hintHC(30);
-        m_specificationComposite.addListener(SWT.Modify, new Listener() {
-          public void handleEvent(Event e) {
-            updateButtons(e.doit);
-            showCell();
-          }
-        });
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Composites
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Create the header displaying {@link Composite}.
+	 */
+	private void createHeaderComposite(Composite parent) {
+		Composite composite = new Composite(parent, SWT.NONE);
+		GridDataFactory.create(composite).grabH().fill();
+		GridLayoutFactory.create(composite).noMargins().columns(4);
+		// specification
+		{
+			new Label(composite, SWT.NONE).setText(ModelMessages.CellEditDialog_specification);
+			{
+				m_specificationComposite = new CellSpecificationComposite(composite);
+				GridDataFactory.create(m_specificationComposite).spanH(3).indentHC(3).hintHC(30);
+				m_specificationComposite.addListener(SWT.Modify, new Listener() {
+					public void handleEvent(Event e) {
+						updateButtons(e.doit);
+						showCell();
+					}
+				});
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Shows the {@link CellConstraintsSupport} in UI controls.
-   */
-  private void showCell() {
-    // specification
-    m_specificationComposite.fromCell(m_cell);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Shows the {@link CellConstraintsSupport} in UI controls.
+	 */
+	private void showCell() {
+		// specification
+		m_specificationComposite.fromCell(m_cell);
+	}
 }
diff --git a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/ui/CellSpecificationComposite.java b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/ui/CellSpecificationComposite.java
index f45769e4a..145a63b45 100644
--- a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/ui/CellSpecificationComposite.java
+++ b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/ui/CellSpecificationComposite.java
@@ -26,101 +26,101 @@
  * @coverage swing.MigLayout.ui
  */
 public final class CellSpecificationComposite extends Composite {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // UI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final ErrorMessageTextField m_field;
-  private final Text m_textWidget;
-  private final Listener m_listener = new Listener() {
-    public void handleEvent(Event e) {
-      String s = m_textWidget.getText();
-      toCell(s);
-    }
-  };
-  private boolean m_updatingCell;
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Model
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private CellConstraintsSupport m_cell;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// UI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final ErrorMessageTextField m_field;
+	private final Text m_textWidget;
+	private final Listener m_listener = new Listener() {
+		public void handleEvent(Event e) {
+			String s = m_textWidget.getText();
+			toCell(s);
+		}
+	};
+	private boolean m_updatingCell;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Model
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private CellConstraintsSupport m_cell;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CellSpecificationComposite(Composite parent) {
-    super(parent, SWT.NONE);
-    setLayout(new FillLayout());
-    // prepare field/widget
-    m_field = new ErrorMessageTextField(this, SWT.BORDER);
-    m_textWidget = (Text) m_field.getControl();
-    // listen for modification
-    m_textWidget.addListener(SWT.Modify, m_listener);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CellSpecificationComposite(Composite parent) {
+		super(parent, SWT.NONE);
+		setLayout(new FillLayout());
+		// prepare field/widget
+		m_field = new ErrorMessageTextField(this, SWT.BORDER);
+		m_textWidget = (Text) m_field.getControl();
+		// listen for modification
+		m_textWidget.addListener(SWT.Modify, m_listener);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean setFocus() {
-    return m_textWidget.setFocus();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean setFocus() {
+		return m_textWidget.setFocus();
+	}
 
-  /**
-   * Updates this field from {@link CellConstraintsSupport}.
-   */
-  public void fromCell(CellConstraintsSupport cell) {
-    if (!m_updatingCell) {
-      m_cell = cell;
-      String specification = m_cell.getString();
-      if (!m_textWidget.getText().equals(specification)) {
-        setText(specification);
-      }
-    }
-  }
+	/**
+	 * Updates this field from {@link CellConstraintsSupport}.
+	 */
+	public void fromCell(CellConstraintsSupport cell) {
+		if (!m_updatingCell) {
+			m_cell = cell;
+			String specification = m_cell.getString();
+			if (!m_textWidget.getText().equals(specification)) {
+				setText(specification);
+			}
+		}
+	}
 
-  /**
-   * Uses text from {@link #m_textWidget} to update {@link CellConstraintsSupport}.
-   */
-  private void toCell(String s) {
-    m_updatingCell = true;
-    try {
-      m_cell.setString(s);
-      notifyModified(true);
-      m_field.setErrorMessage(null);
-    } catch (Throwable e) {
-      notifyModified(false);
-      m_field.setErrorMessage(e.getMessage());
-    } finally {
-      m_updatingCell = false;
-    }
-  }
+	/**
+	 * Uses text from {@link #m_textWidget} to update {@link CellConstraintsSupport}.
+	 */
+	private void toCell(String s) {
+		m_updatingCell = true;
+		try {
+			m_cell.setString(s);
+			notifyModified(true);
+			m_field.setErrorMessage(null);
+		} catch (Throwable e) {
+			notifyModified(false);
+			m_field.setErrorMessage(e.getMessage());
+		} finally {
+			m_updatingCell = false;
+		}
+	}
 
-  /**
-   * Notifies {@link SWT#Modify} listener that this field was updated, with given valid state.
-   */
-  private void notifyModified(boolean valid) {
-    Event event = new Event();
-    event.doit = valid;
-    notifyListeners(SWT.Modify, event);
-  }
+	/**
+	 * Notifies {@link SWT#Modify} listener that this field was updated, with given valid state.
+	 */
+	private void notifyModified(boolean valid) {
+		Event event = new Event();
+		event.doit = valid;
+		notifyListeners(SWT.Modify, event);
+	}
 
-  /**
-   * Sets text to {@link #m_textWidget}.
-   */
-  private void setText(String text) {
-    m_textWidget.removeListener(SWT.Modify, m_listener);
-    try {
-      m_textWidget.setText(text);
-      m_field.setErrorMessage(null);
-    } finally {
-      m_textWidget.addListener(SWT.Modify, m_listener);
-    }
-  }
+	/**
+	 * Sets text to {@link #m_textWidget}.
+	 */
+	private void setText(String text) {
+		m_textWidget.removeListener(SWT.Modify, m_listener);
+		try {
+			m_textWidget.setText(text);
+			m_field.setErrorMessage(null);
+		} finally {
+			m_textWidget.addListener(SWT.Modify, m_listener);
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/ui/ColumnEditDialog.java b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/ui/ColumnEditDialog.java
index c68ef1f71..8bee0d526 100644
--- a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/ui/ColumnEditDialog.java
+++ b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/ui/ColumnEditDialog.java
@@ -28,50 +28,50 @@
  * @coverage swing.MigLayout.ui
  */
 public final class ColumnEditDialog extends DimensionEditDialog<MigColumnInfo, Alignment> {
-  private static final List<AlignmentDescription<Alignment>> ALIGNMENTS = Lists.newArrayList();
-  static {
-    ALIGNMENTS.add(new AlignmentDescription<Alignment>(Alignment.DEFAULT,
-        ModelMessages.ColumnEditDialog_alignmentDefault));
-    ALIGNMENTS.add(new AlignmentDescription<Alignment>(Alignment.LEFT,
-        ModelMessages.ColumnEditDialog_alignmentLeft));
-    ALIGNMENTS.add(new AlignmentDescription<Alignment>(Alignment.CENTER,
-        ModelMessages.ColumnEditDialog_alignmentCenter));
-    ALIGNMENTS.add(new AlignmentDescription<Alignment>(Alignment.RIGHT,
-        ModelMessages.ColumnEditDialog_alignmentRight));
-    ALIGNMENTS.add(new AlignmentDescription<Alignment>(Alignment.FILL,
-        ModelMessages.ColumnEditDialog_alignmentFill));
-    ALIGNMENTS.add(new AlignmentDescription<Alignment>(Alignment.LEADING,
-        ModelMessages.ColumnEditDialog_alignmentLeading));
-    ALIGNMENTS.add(new AlignmentDescription<Alignment>(Alignment.TRAILING,
-        ModelMessages.ColumnEditDialog_alignmentTrailing));
-  }
+	private static final List<AlignmentDescription<Alignment>> ALIGNMENTS = Lists.newArrayList();
+	static {
+		ALIGNMENTS.add(new AlignmentDescription<Alignment>(Alignment.DEFAULT,
+				ModelMessages.ColumnEditDialog_alignmentDefault));
+		ALIGNMENTS.add(new AlignmentDescription<Alignment>(Alignment.LEFT,
+				ModelMessages.ColumnEditDialog_alignmentLeft));
+		ALIGNMENTS.add(new AlignmentDescription<Alignment>(Alignment.CENTER,
+				ModelMessages.ColumnEditDialog_alignmentCenter));
+		ALIGNMENTS.add(new AlignmentDescription<Alignment>(Alignment.RIGHT,
+				ModelMessages.ColumnEditDialog_alignmentRight));
+		ALIGNMENTS.add(new AlignmentDescription<Alignment>(Alignment.FILL,
+				ModelMessages.ColumnEditDialog_alignmentFill));
+		ALIGNMENTS.add(new AlignmentDescription<Alignment>(Alignment.LEADING,
+				ModelMessages.ColumnEditDialog_alignmentLeading));
+		ALIGNMENTS.add(new AlignmentDescription<Alignment>(Alignment.TRAILING,
+				ModelMessages.ColumnEditDialog_alignmentTrailing));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ColumnEditDialog(Shell parentShell, MigLayoutInfo layout, MigColumnInfo column) {
-    super(parentShell,
-        layout,
-        layout.getColumns(),
-        column,
-        ModelMessages.ColumnEditDialog_title,
-        ALIGNMENTS);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ColumnEditDialog(Shell parentShell, MigLayoutInfo layout, MigColumnInfo column) {
+		super(parentShell,
+				layout,
+				layout.getColumns(),
+				column,
+				ModelMessages.ColumnEditDialog_title,
+				ALIGNMENTS);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Internal access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Alignment getAlignment(MigColumnInfo dimension) {
-    return dimension.getAlignment(false);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Internal access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Alignment getAlignment(MigColumnInfo dimension) {
+		return dimension.getAlignment(false);
+	}
 
-  @Override
-  protected void setAlignment(MigColumnInfo dimension, Alignment alignment) {
-    dimension.setAlignment(alignment);
-  }
+	@Override
+	protected void setAlignment(MigColumnInfo dimension, Alignment alignment) {
+		dimension.setAlignment(alignment);
+	}
 }
diff --git a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/ui/ColumnsDialog.java b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/ui/ColumnsDialog.java
index 66dffb495..b859ebd1b 100644
--- a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/ui/ColumnsDialog.java
+++ b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/ui/ColumnsDialog.java
@@ -25,65 +25,65 @@
  * @coverage swing.MigLayout.ui
  */
 public final class ColumnsDialog extends DimensionsDialog<MigColumnInfo> {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ColumnsDialog(Shell parentShell, MigLayoutInfo layout) {
-    super(parentShell, layout, layout.getColumns());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ColumnsDialog(Shell parentShell, MigLayoutInfo layout) {
+		super(parentShell, layout, layout.getColumns());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // DimensionsDialog: strings
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getDialogTitle() {
-    return ModelMessages.ColumnsDialog_dialogTitle;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// DimensionsDialog: strings
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getDialogTitle() {
+		return ModelMessages.ColumnsDialog_dialogTitle;
+	}
 
-  @Override
-  protected String getDialogMessage() {
-    return ModelMessages.ColumnsDialog_dialogMessage;
-  }
+	@Override
+	protected String getDialogMessage() {
+		return ModelMessages.ColumnsDialog_dialogMessage;
+	}
 
-  @Override
-  protected String getViewerTitle() {
-    return ModelMessages.ColumnsDialog_viewerTitle;
-  }
+	@Override
+	protected String getViewerTitle() {
+		return ModelMessages.ColumnsDialog_viewerTitle;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // DimensionsDialog: dimensions
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void moveDimensionsUp(Iterable<MigColumnInfo> dimensions) throws Exception {
-    for (MigColumnInfo column : dimensions) {
-      int index = column.getIndex();
-      m_layout.moveColumn(index, index - 1);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// DimensionsDialog: dimensions
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void moveDimensionsUp(Iterable<MigColumnInfo> dimensions) throws Exception {
+		for (MigColumnInfo column : dimensions) {
+			int index = column.getIndex();
+			m_layout.moveColumn(index, index - 1);
+		}
+	}
 
-  @Override
-  protected void moveDimensionsDown(Iterable<MigColumnInfo> dimensions) throws Exception {
-    for (MigColumnInfo column : dimensions) {
-      int index = column.getIndex();
-      m_layout.moveColumn(index, index + 2);
-    }
-  }
+	@Override
+	protected void moveDimensionsDown(Iterable<MigColumnInfo> dimensions) throws Exception {
+		for (MigColumnInfo column : dimensions) {
+			int index = column.getIndex();
+			m_layout.moveColumn(index, index + 2);
+		}
+	}
 
-  @Override
-  protected boolean editSelectedDimension(MigColumnInfo column) {
-    return new ColumnEditDialog(getShell(), m_layout, column).open() == OK;
-  }
+	@Override
+	protected boolean editSelectedDimension(MigColumnInfo column) {
+		return new ColumnEditDialog(getShell(), m_layout, column).open() == OK;
+	}
 
-  @Override
-  protected MigColumnInfo createNewDimension(int targetIndex) throws Exception {
-    MigColumnInfo column = new MigColumnInfo(m_layout);
-    m_layout.insertColumn(targetIndex);
-    return column;
-  }
+	@Override
+	protected MigColumnInfo createNewDimension(int targetIndex) throws Exception {
+		MigColumnInfo column = new MigColumnInfo(m_layout);
+		m_layout.insertColumn(targetIndex);
+		return column;
+	}
 }
diff --git a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/ui/DimensionEditDialog.java b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/ui/DimensionEditDialog.java
index 1f0bb8e13..d4c2628c7 100644
--- a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/ui/DimensionEditDialog.java
+++ b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/ui/DimensionEditDialog.java
@@ -46,386 +46,386 @@
  * @coverage swing.MigLayout.ui
  */
 abstract class DimensionEditDialog<T extends MigDimensionInfo, A extends Enum<?>>
-    extends
-      ResizableDialog {
-  private final MigLayoutInfo m_layout;
-  private final List<T> m_dimensions;
-  private final boolean m_horizontal;
-  private final String m_dimensionName;
-  private final List<AlignmentDescription<A>> m_alignments;
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Current state
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private T m_dimension;
-  private String m_dimensionString;
-  private int m_currentIndex;
+extends
+ResizableDialog {
+	private final MigLayoutInfo m_layout;
+	private final List<T> m_dimensions;
+	private final boolean m_horizontal;
+	private final String m_dimensionName;
+	private final List<AlignmentDescription<A>> m_alignments;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Current state
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private T m_dimension;
+	private String m_dimensionString;
+	private int m_currentIndex;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DimensionEditDialog(Shell parentShell,
-      MigLayoutInfo layout,
-      List<T> dimensions,
-      T dimension,
-      String dimensionName,
-      List<AlignmentDescription<A>> alignments) {
-    super(parentShell, Activator.getDefault());
-    setShellStyle(SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
-    m_layout = layout;
-    m_dimensions = dimensions;
-    m_horizontal = dimension instanceof MigColumnInfo;
-    m_dimensionName = dimensionName;
-    m_alignments = alignments;
-    setEditDimension(dimension);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DimensionEditDialog(Shell parentShell,
+			MigLayoutInfo layout,
+			List<T> dimensions,
+			T dimension,
+			String dimensionName,
+			List<AlignmentDescription<A>> alignments) {
+		super(parentShell, Activator.getDefault());
+		setShellStyle(SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
+		m_layout = layout;
+		m_dimensions = dimensions;
+		m_horizontal = dimension instanceof MigColumnInfo;
+		m_dimensionName = dimensionName;
+		m_alignments = alignments;
+		setEditDimension(dimension);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI fields
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Text m_indexText;
-  private Button m_prevButton;
-  private Button m_nextButton;
-  // specification
-  private DimensionSpecificationComposite m_specificationComposite;
-  // alignment
-  private List<Button> m_alignmentButtons;
-  // size
-  private DimensionUnitValueField m_minField;
-  private DimensionUnitValueField m_prefField;
-  private DimensionUnitValueField m_maxField;
-  // resize
-  private DimensionResizeComposite m_growComposite;
-  private DimensionResizeComposite m_shrinkComposite;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI fields
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Text m_indexText;
+	private Button m_prevButton;
+	private Button m_nextButton;
+	// specification
+	private DimensionSpecificationComposite m_specificationComposite;
+	// alignment
+	private List<Button> m_alignmentButtons;
+	// size
+	private DimensionUnitValueField m_minField;
+	private DimensionUnitValueField m_prefField;
+	private DimensionUnitValueField m_maxField;
+	// resize
+	private DimensionResizeComposite m_growComposite;
+	private DimensionResizeComposite m_shrinkComposite;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void create() {
-    super.create();
-    showDimension();
-    m_specificationComposite.setFocus();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void create() {
+		super.create();
+		showDimension();
+		m_specificationComposite.setFocus();
+	}
 
-  @Override
-  protected Control createDialogArea(Composite parent) {
-    Composite container = (Composite) super.createDialogArea(parent);
-    createHeaderComposite(container);
-    createAlignmentComposite(container);
-    createSizeComposite(container);
-    createResizeComposites(container);
-    return container;
-  }
+	@Override
+	protected Control createDialogArea(Composite parent) {
+		Composite container = (Composite) super.createDialogArea(parent);
+		createHeaderComposite(container);
+		createAlignmentComposite(container);
+		createSizeComposite(container);
+		createResizeComposites(container);
+		return container;
+	}
 
-  @Override
-  protected void configureShell(Shell newShell) {
-    super.configureShell(newShell);
-    newShell.setText(MessageFormat.format(ModelMessages.DimensionEditDialog_title, m_dimensionName));
-  }
+	@Override
+	protected void configureShell(Shell newShell) {
+		super.configureShell(newShell);
+		newShell.setText(MessageFormat.format(ModelMessages.DimensionEditDialog_title, m_dimensionName));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Buttons
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final int APPLY_ID = IDialogConstants.CLIENT_ID + 1;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Buttons
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final int APPLY_ID = IDialogConstants.CLIENT_ID + 1;
 
-  @Override
-  protected void createButtonsForButtonBar(Composite parent) {
-    super.createButtonsForButtonBar(parent);
-    if (m_layout != null) {
-      createButton(parent, APPLY_ID, ModelMessages.DimensionEditDialog_applyButton, false);
-    }
-  }
+	@Override
+	protected void createButtonsForButtonBar(Composite parent) {
+		super.createButtonsForButtonBar(parent);
+		if (m_layout != null) {
+			createButton(parent, APPLY_ID, ModelMessages.DimensionEditDialog_applyButton, false);
+		}
+	}
 
-  @Override
-  protected void buttonPressed(int buttonId) {
-    try {
-      if (buttonId == IDialogConstants.OK_ID || buttonId == APPLY_ID) {
-        applyChanges();
-        m_dimensionString = m_dimension.getString(false);
-      }
-      if (buttonId == IDialogConstants.CANCEL_ID) {
-        m_dimension.setString(m_dimensionString);
-      }
-    } catch (Throwable e) {
-    }
-    super.buttonPressed(buttonId);
-  }
+	@Override
+	protected void buttonPressed(int buttonId) {
+		try {
+			if (buttonId == IDialogConstants.OK_ID || buttonId == APPLY_ID) {
+				applyChanges();
+				m_dimensionString = m_dimension.getString(false);
+			}
+			if (buttonId == IDialogConstants.CANCEL_ID) {
+				m_dimension.setString(m_dimensionString);
+			}
+		} catch (Throwable e) {
+		}
+		super.buttonPressed(buttonId);
+	}
 
-  /**
-   * Enables/disable OK/Apply buttons.
-   */
-  private void updateButtons(boolean valid) {
-    getButton(IDialogConstants.OK_ID).setEnabled(valid);
-    getButton(APPLY_ID).setEnabled(valid);
-  }
+	/**
+	 * Enables/disable OK/Apply buttons.
+	 */
+	private void updateButtons(boolean valid) {
+		getButton(IDialogConstants.OK_ID).setEnabled(valid);
+		getButton(APPLY_ID).setEnabled(valid);
+	}
 
-  /**
-   * Saves current {@link DimensionInfo} changes into source and refreshes GUI.
-   */
-  private void applyChanges() throws Exception {
-    ExecutionUtils.run(m_layout, new RunnableEx() {
-      public void run() throws Exception {
-        m_layout.writeDimensions();
-      }
-    });
-  }
+	/**
+	 * Saves current {@link DimensionInfo} changes into source and refreshes GUI.
+	 */
+	private void applyChanges() throws Exception {
+		ExecutionUtils.run(m_layout, new RunnableEx() {
+			public void run() throws Exception {
+				m_layout.writeDimensions();
+			}
+		});
+	}
 
-  /**
-   * Sets the {@link DimensionInfo} to edit.
-   */
-  private void setEditDimension(final T dimension) {
-    ExecutionUtils.runLog(new RunnableEx() {
-      public void run() throws Exception {
-        // apply changes
-        if (m_dimension != null) {
-          applyChanges();
-        }
-        // remember new dimension
-        m_dimension = dimension;
-        m_dimensionString = m_dimension.getString(false);
-        m_currentIndex = m_dimensions.indexOf(m_dimension);
-      }
-    });
-  }
+	/**
+	 * Sets the {@link DimensionInfo} to edit.
+	 */
+	private void setEditDimension(final T dimension) {
+		ExecutionUtils.runLog(new RunnableEx() {
+			public void run() throws Exception {
+				// apply changes
+				if (m_dimension != null) {
+					applyChanges();
+				}
+				// remember new dimension
+				m_dimension = dimension;
+				m_dimensionString = m_dimension.getString(false);
+				m_currentIndex = m_dimensions.indexOf(m_dimension);
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Internal access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the alignment of {@link DimensionInfo}.
-   */
-  protected abstract A getAlignment(T dimension);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Internal access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the alignment of {@link DimensionInfo}.
+	 */
+	protected abstract A getAlignment(T dimension);
 
-  /**
-   * Sets alignment of {@link DimensionInfo}.
-   */
-  protected abstract void setAlignment(T dimension, A alignment);
+	/**
+	 * Sets alignment of {@link DimensionInfo}.
+	 */
+	protected abstract void setAlignment(T dimension, A alignment);
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Composites
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Create the header displaying {@link Composite}.
-   */
-  private void createHeaderComposite(Composite parent) {
-    Composite composite = new Composite(parent, SWT.NONE);
-    GridDataFactory.create(composite).grabH().fill();
-    GridLayoutFactory.create(composite).noMargins().columns(4);
-    // index
-    {
-      new Label(composite, SWT.NONE).setText(MessageFormat.format(
-          ModelMessages.DimensionEditDialog_index,
-          m_dimensionName));
-      // index
-      {
-        m_indexText = new Text(composite, SWT.BORDER | SWT.READ_ONLY);
-        GridDataFactory.create(m_indexText).grabH().fillH().indentHC(3);
-      }
-      // prev button
-      {
-        m_prevButton = new Button(composite, SWT.NONE);
-        m_prevButton.setToolTipText(MessageFormat.format(
-            ModelMessages.DimensionEditDialog_previousButton,
-            m_dimensionName));
-        m_prevButton.setImage(m_horizontal
-            ? Activator.getImage("navigation/left.gif")
-            : Activator.getImage("navigation/up.gif"));
-        m_prevButton.addListener(SWT.Selection, new Listener() {
-          public void handleEvent(Event event) {
-            setEditDimension(m_dimensions.get(m_currentIndex - 1));
-            showDimension();
-          }
-        });
-      }
-      // next button
-      {
-        m_nextButton = new Button(composite, SWT.NONE);
-        m_nextButton.setToolTipText(MessageFormat.format(
-            ModelMessages.DimensionEditDialog_nextButton,
-            m_dimensionName));
-        m_nextButton.setImage(m_horizontal
-            ? Activator.getImage("navigation/right.gif")
-            : Activator.getImage("navigation/down.gif"));
-        m_nextButton.addListener(SWT.Selection, new Listener() {
-          public void handleEvent(Event event) {
-            setEditDimension(m_dimensions.get(m_currentIndex + 1));
-            showDimension();
-          }
-        });
-      }
-    }
-    // specification
-    {
-      new Label(composite, SWT.NONE).setText(ModelMessages.DimensionEditDialog_specification);
-      {
-        m_specificationComposite = new DimensionSpecificationComposite(composite);
-        GridDataFactory.create(m_specificationComposite).spanH(3).grabH().fillH().indentHC(3);
-        m_specificationComposite.addListener(SWT.Modify, new Listener() {
-          public void handleEvent(Event e) {
-            updateButtons(e.doit);
-            showDimension();
-          }
-        });
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Composites
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Create the header displaying {@link Composite}.
+	 */
+	private void createHeaderComposite(Composite parent) {
+		Composite composite = new Composite(parent, SWT.NONE);
+		GridDataFactory.create(composite).grabH().fill();
+		GridLayoutFactory.create(composite).noMargins().columns(4);
+		// index
+		{
+			new Label(composite, SWT.NONE).setText(MessageFormat.format(
+					ModelMessages.DimensionEditDialog_index,
+					m_dimensionName));
+			// index
+			{
+				m_indexText = new Text(composite, SWT.BORDER | SWT.READ_ONLY);
+				GridDataFactory.create(m_indexText).grabH().fillH().indentHC(3);
+			}
+			// prev button
+			{
+				m_prevButton = new Button(composite, SWT.NONE);
+				m_prevButton.setToolTipText(MessageFormat.format(
+						ModelMessages.DimensionEditDialog_previousButton,
+						m_dimensionName));
+				m_prevButton.setImage(m_horizontal
+						? Activator.getImage("navigation/left.gif")
+								: Activator.getImage("navigation/up.gif"));
+				m_prevButton.addListener(SWT.Selection, new Listener() {
+					public void handleEvent(Event event) {
+						setEditDimension(m_dimensions.get(m_currentIndex - 1));
+						showDimension();
+					}
+				});
+			}
+			// next button
+			{
+				m_nextButton = new Button(composite, SWT.NONE);
+				m_nextButton.setToolTipText(MessageFormat.format(
+						ModelMessages.DimensionEditDialog_nextButton,
+						m_dimensionName));
+				m_nextButton.setImage(m_horizontal
+						? Activator.getImage("navigation/right.gif")
+								: Activator.getImage("navigation/down.gif"));
+				m_nextButton.addListener(SWT.Selection, new Listener() {
+					public void handleEvent(Event event) {
+						setEditDimension(m_dimensions.get(m_currentIndex + 1));
+						showDimension();
+					}
+				});
+			}
+		}
+		// specification
+		{
+			new Label(composite, SWT.NONE).setText(ModelMessages.DimensionEditDialog_specification);
+			{
+				m_specificationComposite = new DimensionSpecificationComposite(composite);
+				GridDataFactory.create(m_specificationComposite).spanH(3).grabH().fillH().indentHC(3);
+				m_specificationComposite.addListener(SWT.Modify, new Listener() {
+					public void handleEvent(Event e) {
+						updateButtons(e.doit);
+						showDimension();
+					}
+				});
+			}
+		}
+	}
 
-  /**
-   * Creates the alignment editing {@link Composite}.
-   */
-  private void createAlignmentComposite(Composite parent) {
-    createSeparator(parent, ModelMessages.DimensionEditDialog_defaultAlignment);
-    Composite composite = new Composite(parent, SWT.NONE);
-    //
-    GridDataFactory.create(composite).grabH().fill().indentHC(2);
-    GridLayoutFactory.create(composite).noMargins().columns(4);
-    //
-    m_alignmentButtons = Lists.newArrayList();
-    for (final AlignmentDescription<A> description : m_alignments) {
-      // create radio button
-      Button button = new Button(composite, SWT.RADIO);
-      //GridDataFactory.create(button).grabH().fillH();
-      button.setText(description.getTitle());
-      // add listener
-      m_alignmentButtons.add(button);
-      button.addListener(SWT.Selection, new Listener() {
-        public void handleEvent(Event event) {
-          setAlignment(m_dimension, description.getAlignment());
-          showDimension();
-        }
-      });
-    }
-  }
+	/**
+	 * Creates the alignment editing {@link Composite}.
+	 */
+	private void createAlignmentComposite(Composite parent) {
+		createSeparator(parent, ModelMessages.DimensionEditDialog_defaultAlignment);
+		Composite composite = new Composite(parent, SWT.NONE);
+		//
+		GridDataFactory.create(composite).grabH().fill().indentHC(2);
+		GridLayoutFactory.create(composite).noMargins().columns(4);
+		//
+		m_alignmentButtons = Lists.newArrayList();
+		for (final AlignmentDescription<A> description : m_alignments) {
+			// create radio button
+			Button button = new Button(composite, SWT.RADIO);
+			//GridDataFactory.create(button).grabH().fillH();
+			button.setText(description.getTitle());
+			// add listener
+			m_alignmentButtons.add(button);
+			button.addListener(SWT.Selection, new Listener() {
+				public void handleEvent(Event event) {
+					setAlignment(m_dimension, description.getAlignment());
+					showDimension();
+				}
+			});
+		}
+	}
 
-  /**
-   * Creates the size editing {@link Composite}.
-   */
-  private void createSizeComposite(Composite parent) {
-    createSeparator(parent, ModelMessages.DimensionEditDialog_size);
-    Composite composite = new Composite(parent, SWT.NONE);
-    GridDataFactory.create(composite).grabH().fill().indentHC(2);
-    GridLayoutFactory.create(composite).noMargins().columns(2);
-    // minimum
-    {
-      Listener listener = new Listener() {
-        public void handleEvent(Event e) {
-          updateButtons(e.doit);
-          showDimension();
-        }
-      };
-      m_minField =
-          new DimensionUnitValueField(composite,
-              ModelMessages.DimensionEditDialog_minimumSize,
-              "minimumSize",
-              listener);
-      m_prefField =
-          new DimensionUnitValueField(composite,
-              ModelMessages.DimensionEditDialog_preferredSize,
-              "preferredSize",
-              listener);
-      m_maxField =
-          new DimensionUnitValueField(composite,
-              ModelMessages.DimensionEditDialog_maximumSize,
-              "maximumSize",
-              listener);
-    }
-  }
+	/**
+	 * Creates the size editing {@link Composite}.
+	 */
+	private void createSizeComposite(Composite parent) {
+		createSeparator(parent, ModelMessages.DimensionEditDialog_size);
+		Composite composite = new Composite(parent, SWT.NONE);
+		GridDataFactory.create(composite).grabH().fill().indentHC(2);
+		GridLayoutFactory.create(composite).noMargins().columns(2);
+		// minimum
+		{
+			Listener listener = new Listener() {
+				public void handleEvent(Event e) {
+					updateButtons(e.doit);
+					showDimension();
+				}
+			};
+			m_minField =
+					new DimensionUnitValueField(composite,
+							ModelMessages.DimensionEditDialog_minimumSize,
+							"minimumSize",
+							listener);
+			m_prefField =
+					new DimensionUnitValueField(composite,
+							ModelMessages.DimensionEditDialog_preferredSize,
+							"preferredSize",
+							listener);
+			m_maxField =
+					new DimensionUnitValueField(composite,
+							ModelMessages.DimensionEditDialog_maximumSize,
+							"maximumSize",
+							listener);
+		}
+	}
 
-  /**
-   * Creates the grow/shrink editing {@link Composite}.
-   */
-  private void createResizeComposites(Composite parent) {
-    Listener listener = new Listener() {
-      public void handleEvent(Event event) {
-        showDimension();
-      }
-    };
-    {
-      createSeparator(parent, ModelMessages.DimensionEditDialog_growTitle);
-      m_growComposite =
-          new DimensionResizeComposite(parent,
-              SWT.NONE,
-              "no grow",
-              "grow",
-              0,
-              100,
-              "grow",
-              listener);
-      GridDataFactory.create(m_growComposite).grabH().fill().indentHC(2);
-    }
-    {
-      createSeparator(parent, ModelMessages.DimensionEditDialog_shrinkTitle);
-      m_shrinkComposite =
-          new DimensionResizeComposite(parent,
-              SWT.NONE,
-              "default shrink",
-              "shrink",
-              100,
-              100,
-              "shrink",
-              listener);
-      GridDataFactory.create(m_shrinkComposite).grabH().fill().indentHC(2);
-    }
-  }
+	/**
+	 * Creates the grow/shrink editing {@link Composite}.
+	 */
+	private void createResizeComposites(Composite parent) {
+		Listener listener = new Listener() {
+			public void handleEvent(Event event) {
+				showDimension();
+			}
+		};
+		{
+			createSeparator(parent, ModelMessages.DimensionEditDialog_growTitle);
+			m_growComposite =
+					new DimensionResizeComposite(parent,
+							SWT.NONE,
+							"no grow",
+							"grow",
+							0,
+							100,
+							"grow",
+							listener);
+			GridDataFactory.create(m_growComposite).grabH().fill().indentHC(2);
+		}
+		{
+			createSeparator(parent, ModelMessages.DimensionEditDialog_shrinkTitle);
+			m_shrinkComposite =
+					new DimensionResizeComposite(parent,
+							SWT.NONE,
+							"default shrink",
+							"shrink",
+							100,
+							100,
+							"shrink",
+							listener);
+			GridDataFactory.create(m_shrinkComposite).grabH().fill().indentHC(2);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Shows the {@link DimensionInfo} in UI controls.
-   */
-  private void showDimension() {
-    // index
-    {
-      m_indexText.setText(Integer.toString(m_currentIndex));
-      m_prevButton.setEnabled(m_currentIndex != 0);
-      m_nextButton.setEnabled(m_currentIndex < m_dimensions.size() - 1);
-    }
-    // specification
-    m_specificationComposite.fromDimension(m_dimension);
-    // alignment
-    {
-      A alignment = getAlignment(m_dimension);
-      for (int i = 0; i < m_alignments.size(); i++) {
-        AlignmentDescription<A> description = m_alignments.get(i);
-        Button button = m_alignmentButtons.get(i);
-        button.setSelection(alignment == description.getAlignment());
-      }
-    }
-    // size
-    {
-      m_minField.fromDimension(m_dimension);
-      m_prefField.fromDimension(m_dimension);
-      m_maxField.fromDimension(m_dimension);
-    }
-    // resize
-    m_growComposite.fromDimension(m_dimension);
-    m_shrinkComposite.fromDimension(m_dimension);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Shows the {@link DimensionInfo} in UI controls.
+	 */
+	private void showDimension() {
+		// index
+		{
+			m_indexText.setText(Integer.toString(m_currentIndex));
+			m_prevButton.setEnabled(m_currentIndex != 0);
+			m_nextButton.setEnabled(m_currentIndex < m_dimensions.size() - 1);
+		}
+		// specification
+		m_specificationComposite.fromDimension(m_dimension);
+		// alignment
+		{
+			A alignment = getAlignment(m_dimension);
+			for (int i = 0; i < m_alignments.size(); i++) {
+				AlignmentDescription<A> description = m_alignments.get(i);
+				Button button = m_alignmentButtons.get(i);
+				button.setSelection(alignment == description.getAlignment());
+			}
+		}
+		// size
+		{
+			m_minField.fromDimension(m_dimension);
+			m_prefField.fromDimension(m_dimension);
+			m_maxField.fromDimension(m_dimension);
+		}
+		// resize
+		m_growComposite.fromDimension(m_dimension);
+		m_shrinkComposite.fromDimension(m_dimension);
+	}
 
-  /**
-   * Creates separator with given text.
-   */
-  private static void createSeparator(Composite parent, String text) {
-    Separator separator = new Separator(parent, SWT.NONE);
-    GridDataFactory.create(separator).grabH().fillH();
-    separator.setText(text);
-    separator.setForeground(separator.getDisplay().getSystemColor(SWT.COLOR_LIST_SELECTION));
-  }
+	/**
+	 * Creates separator with given text.
+	 */
+	private static void createSeparator(Composite parent, String text) {
+		Separator separator = new Separator(parent, SWT.NONE);
+		GridDataFactory.create(separator).grabH().fillH();
+		separator.setText(text);
+		separator.setForeground(separator.getDisplay().getSystemColor(SWT.COLOR_LIST_SELECTION));
+	}
 }
diff --git a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/ui/DimensionResizeComposite.java b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/ui/DimensionResizeComposite.java
index 3515c6589..4cd3c0e32 100644
--- a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/ui/DimensionResizeComposite.java
+++ b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/ui/DimensionResizeComposite.java
@@ -34,208 +34,208 @@
  * @coverage swing.MigLayout.ui
  */
 public final class DimensionResizeComposite extends Composite {
-  private final int m_defaultWeight;
-  private final String m_propertyName;
-  private final Listener m_listener;
-  private MigDimensionInfo m_dimension;
-  // UI
-  private final Button m_defaultWeightButton;
-  private final Button m_customWeightButton;
-  private final CSpinner m_weightSpinner;
-  private final Button m_defaultPriorityButton;
-  private final Button m_customPriorityButton;
-  private final CSpinner m_prioritySpinner;
-  // listener
-  private boolean m_updatingDimension;
+	private final int m_defaultWeight;
+	private final String m_propertyName;
+	private final Listener m_listener;
+	private MigDimensionInfo m_dimension;
+	// UI
+	private final Button m_defaultWeightButton;
+	private final Button m_customWeightButton;
+	private final CSpinner m_weightSpinner;
+	private final Button m_defaultPriorityButton;
+	private final Button m_customPriorityButton;
+	private final CSpinner m_prioritySpinner;
+	// listener
+	private boolean m_updatingDimension;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DimensionResizeComposite(Composite parent,
-      int style,
-      String defaultWeightLabel,
-      String customWeightLabel,
-      final int defaultWeight,
-      final int customWeight,
-      String propertyName,
-      Listener listener) {
-    super(parent, style);
-    m_defaultWeight = defaultWeight;
-    m_propertyName = StringUtils.capitalize(propertyName);
-    m_listener = listener;
-    GridLayoutFactory.create(this).noMargins().columns(2).spacingH(15);
-    // weight
-    {
-      Composite weightComposite = new Composite(this, SWT.NONE);
-      GridDataFactory.create(weightComposite).grabH().fill();
-      GridLayoutFactory.create(weightComposite).noMargins().columns(2);
-      // no weight
-      {
-        m_defaultWeightButton = new Button(weightComposite, SWT.RADIO);
-        GridDataFactory.create(m_defaultWeightButton).spanH(2);
-        m_defaultWeightButton.setText(defaultWeightLabel);
-        m_defaultWeightButton.addListener(SWT.Selection, new Listener() {
-          public void handleEvent(Event event) {
-            m_weightSpinner.setEnabled(false);
-            m_weightSpinner.setSelection(defaultWeight);
-            toDimension();
-          }
-        });
-      }
-      // weight
-      {
-        m_customWeightButton = new Button(weightComposite, SWT.RADIO);
-        m_customWeightButton.setText(customWeightLabel);
-        m_customWeightButton.addListener(SWT.Selection, new Listener() {
-          public void handleEvent(Event event) {
-            m_weightSpinner.setEnabled(true);
-            m_weightSpinner.setSelection(customWeight);
-            toDimension();
-          }
-        });
-        //
-        m_weightSpinner = new CSpinner(weightComposite, SWT.BORDER);
-        GridDataFactory.create(m_weightSpinner).hintHC(10).grabH().fill();
-        m_weightSpinner.setRange(0, Integer.MAX_VALUE);
-        m_weightSpinner.addListener(SWT.Selection, new Listener() {
-          public void handleEvent(Event event) {
-            toDimension();
-          }
-        });
-      }
-    }
-    // priority
-    {
-      Composite priorityComposite = new Composite(this, SWT.NONE);
-      GridDataFactory.create(priorityComposite).grabH().fill();
-      GridLayoutFactory.create(priorityComposite).noMargins().columns(2);
-      // default priority
-      {
-        m_defaultPriorityButton = new Button(priorityComposite, SWT.RADIO);
-        GridDataFactory.create(m_defaultPriorityButton).spanH(2);
-        m_defaultPriorityButton.setText(ModelMessages.DimensionResizeComposite_defaultPriority);
-        m_defaultPriorityButton.addListener(SWT.Selection, new Listener() {
-          public void handleEvent(Event event) {
-            m_prioritySpinner.setEnabled(false);
-            m_prioritySpinner.setSelection(100);
-            toDimension();
-          }
-        });
-      }
-      // priority
-      {
-        m_customPriorityButton = new Button(priorityComposite, SWT.RADIO);
-        m_customPriorityButton.setText(ModelMessages.DimensionResizeComposite_customPriority);
-        m_customPriorityButton.addListener(SWT.Selection, new Listener() {
-          public void handleEvent(Event event) {
-            m_prioritySpinner.setEnabled(true);
-            m_prioritySpinner.setSelection(100);
-            toDimension();
-          }
-        });
-        //
-        m_prioritySpinner = new CSpinner(priorityComposite, SWT.BORDER);
-        GridDataFactory.create(m_prioritySpinner).hintHC(10).grabH().fill();
-        m_prioritySpinner.setRange(0, Integer.MAX_VALUE);
-        m_prioritySpinner.addListener(SWT.Selection, new Listener() {
-          public void handleEvent(Event event) {
-            toDimension();
-          }
-        });
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DimensionResizeComposite(Composite parent,
+			int style,
+			String defaultWeightLabel,
+			String customWeightLabel,
+			final int defaultWeight,
+			final int customWeight,
+			String propertyName,
+			Listener listener) {
+		super(parent, style);
+		m_defaultWeight = defaultWeight;
+		m_propertyName = StringUtils.capitalize(propertyName);
+		m_listener = listener;
+		GridLayoutFactory.create(this).noMargins().columns(2).spacingH(15);
+		// weight
+		{
+			Composite weightComposite = new Composite(this, SWT.NONE);
+			GridDataFactory.create(weightComposite).grabH().fill();
+			GridLayoutFactory.create(weightComposite).noMargins().columns(2);
+			// no weight
+			{
+				m_defaultWeightButton = new Button(weightComposite, SWT.RADIO);
+				GridDataFactory.create(m_defaultWeightButton).spanH(2);
+				m_defaultWeightButton.setText(defaultWeightLabel);
+				m_defaultWeightButton.addListener(SWT.Selection, new Listener() {
+					public void handleEvent(Event event) {
+						m_weightSpinner.setEnabled(false);
+						m_weightSpinner.setSelection(defaultWeight);
+						toDimension();
+					}
+				});
+			}
+			// weight
+			{
+				m_customWeightButton = new Button(weightComposite, SWT.RADIO);
+				m_customWeightButton.setText(customWeightLabel);
+				m_customWeightButton.addListener(SWT.Selection, new Listener() {
+					public void handleEvent(Event event) {
+						m_weightSpinner.setEnabled(true);
+						m_weightSpinner.setSelection(customWeight);
+						toDimension();
+					}
+				});
+				//
+				m_weightSpinner = new CSpinner(weightComposite, SWT.BORDER);
+				GridDataFactory.create(m_weightSpinner).hintHC(10).grabH().fill();
+				m_weightSpinner.setRange(0, Integer.MAX_VALUE);
+				m_weightSpinner.addListener(SWT.Selection, new Listener() {
+					public void handleEvent(Event event) {
+						toDimension();
+					}
+				});
+			}
+		}
+		// priority
+		{
+			Composite priorityComposite = new Composite(this, SWT.NONE);
+			GridDataFactory.create(priorityComposite).grabH().fill();
+			GridLayoutFactory.create(priorityComposite).noMargins().columns(2);
+			// default priority
+			{
+				m_defaultPriorityButton = new Button(priorityComposite, SWT.RADIO);
+				GridDataFactory.create(m_defaultPriorityButton).spanH(2);
+				m_defaultPriorityButton.setText(ModelMessages.DimensionResizeComposite_defaultPriority);
+				m_defaultPriorityButton.addListener(SWT.Selection, new Listener() {
+					public void handleEvent(Event event) {
+						m_prioritySpinner.setEnabled(false);
+						m_prioritySpinner.setSelection(100);
+						toDimension();
+					}
+				});
+			}
+			// priority
+			{
+				m_customPriorityButton = new Button(priorityComposite, SWT.RADIO);
+				m_customPriorityButton.setText(ModelMessages.DimensionResizeComposite_customPriority);
+				m_customPriorityButton.addListener(SWT.Selection, new Listener() {
+					public void handleEvent(Event event) {
+						m_prioritySpinner.setEnabled(true);
+						m_prioritySpinner.setSelection(100);
+						toDimension();
+					}
+				});
+				//
+				m_prioritySpinner = new CSpinner(priorityComposite, SWT.BORDER);
+				GridDataFactory.create(m_prioritySpinner).hintHC(10).grabH().fill();
+				m_prioritySpinner.setRange(0, Integer.MAX_VALUE);
+				m_prioritySpinner.addListener(SWT.Selection, new Listener() {
+					public void handleEvent(Event event) {
+						toDimension();
+					}
+				});
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Updates this field from {@link MigDimensionInfo}.
-   */
-  public void fromDimension(MigDimensionInfo dimension) {
-    if (!m_updatingDimension) {
-      m_dimension = dimension;
-      try {
-        // weight
-        {
-          String methodName = MessageFormat.format("get{0}", m_propertyName);
-          Float weight = (Float) ReflectionUtils.invokeMethod2(m_dimension, methodName);
-          if (weight == null || weight.intValue() == m_defaultWeight) {
-            m_defaultWeightButton.setSelection(true);
-            m_customWeightButton.setSelection(false);
-            m_weightSpinner.setEnabled(false);
-            m_weightSpinner.setSelection(0);
-          } else {
-            m_defaultWeightButton.setSelection(false);
-            m_customWeightButton.setSelection(true);
-            m_weightSpinner.setEnabled(true);
-            m_weightSpinner.setSelection(weight.intValue());
-          }
-        }
-        // priority
-        {
-          String methodName = MessageFormat.format("get{0}Priority", m_propertyName);
-          int priority = (Integer) ReflectionUtils.invokeMethod2(m_dimension, methodName);
-          if (priority == 100) {
-            m_defaultPriorityButton.setSelection(true);
-            m_customPriorityButton.setSelection(false);
-            m_prioritySpinner.setEnabled(false);
-          } else {
-            m_defaultPriorityButton.setSelection(false);
-            m_customPriorityButton.setSelection(true);
-            m_prioritySpinner.setEnabled(true);
-          }
-          m_prioritySpinner.setSelection(priority);
-        }
-      } catch (Throwable e) {
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Updates this field from {@link MigDimensionInfo}.
+	 */
+	public void fromDimension(MigDimensionInfo dimension) {
+		if (!m_updatingDimension) {
+			m_dimension = dimension;
+			try {
+				// weight
+				{
+					String methodName = MessageFormat.format("get{0}", m_propertyName);
+					Float weight = (Float) ReflectionUtils.invokeMethod2(m_dimension, methodName);
+					if (weight == null || weight.intValue() == m_defaultWeight) {
+						m_defaultWeightButton.setSelection(true);
+						m_customWeightButton.setSelection(false);
+						m_weightSpinner.setEnabled(false);
+						m_weightSpinner.setSelection(0);
+					} else {
+						m_defaultWeightButton.setSelection(false);
+						m_customWeightButton.setSelection(true);
+						m_weightSpinner.setEnabled(true);
+						m_weightSpinner.setSelection(weight.intValue());
+					}
+				}
+				// priority
+				{
+					String methodName = MessageFormat.format("get{0}Priority", m_propertyName);
+					int priority = (Integer) ReflectionUtils.invokeMethod2(m_dimension, methodName);
+					if (priority == 100) {
+						m_defaultPriorityButton.setSelection(true);
+						m_customPriorityButton.setSelection(false);
+						m_prioritySpinner.setEnabled(false);
+					} else {
+						m_defaultPriorityButton.setSelection(false);
+						m_customPriorityButton.setSelection(true);
+						m_prioritySpinner.setEnabled(true);
+					}
+					m_prioritySpinner.setSelection(priority);
+				}
+			} catch (Throwable e) {
+			}
+		}
+	}
 
-  /**
-   * Uses values from UI widgets to update {@link MigDimensionInfo}.
-   */
-  private void toDimension() {
-    m_updatingDimension = true;
-    try {
-      // weight
-      {
-        Float weight;
-        if (m_defaultWeightButton.getSelection()) {
-          weight = null;
-        } else {
-          weight = Float.valueOf(m_weightSpinner.getSelection());
-        }
-        String methodName = MessageFormat.format("set{0}", m_propertyName);
-        ReflectionUtils.invokeMethod2(m_dimension, methodName, Float.class, weight);
-      }
-      // priority
-      {
-        int priority;
-        if (m_defaultPriorityButton.getSelection()) {
-          priority = 100;
-        } else {
-          priority = m_prioritySpinner.getSelection();
-        }
-        String methodName = MessageFormat.format("set{0}Priority", m_propertyName);
-        ReflectionUtils.invokeMethod2(m_dimension, methodName, int.class, priority);
-      }
-      notifyModified();
-    } catch (Throwable e) {
-    } finally {
-      m_updatingDimension = false;
-    }
-  }
+	/**
+	 * Uses values from UI widgets to update {@link MigDimensionInfo}.
+	 */
+	private void toDimension() {
+		m_updatingDimension = true;
+		try {
+			// weight
+			{
+				Float weight;
+				if (m_defaultWeightButton.getSelection()) {
+					weight = null;
+				} else {
+					weight = Float.valueOf(m_weightSpinner.getSelection());
+				}
+				String methodName = MessageFormat.format("set{0}", m_propertyName);
+				ReflectionUtils.invokeMethod2(m_dimension, methodName, Float.class, weight);
+			}
+			// priority
+			{
+				int priority;
+				if (m_defaultPriorityButton.getSelection()) {
+					priority = 100;
+				} else {
+					priority = m_prioritySpinner.getSelection();
+				}
+				String methodName = MessageFormat.format("set{0}Priority", m_propertyName);
+				ReflectionUtils.invokeMethod2(m_dimension, methodName, int.class, priority);
+			}
+			notifyModified();
+		} catch (Throwable e) {
+		} finally {
+			m_updatingDimension = false;
+		}
+	}
 
-  /**
-   * Notifies {@link #m_listener} that this field was updated, with given valid state.
-   */
-  private void notifyModified() {
-    Event event = new Event();
-    m_listener.handleEvent(event);
-  }
+	/**
+	 * Notifies {@link #m_listener} that this field was updated, with given valid state.
+	 */
+	private void notifyModified() {
+		Event event = new Event();
+		m_listener.handleEvent(event);
+	}
 }
diff --git a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/ui/DimensionSpecificationComposite.java b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/ui/DimensionSpecificationComposite.java
index 41771f0c0..2027d9cd4 100644
--- a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/ui/DimensionSpecificationComposite.java
+++ b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/ui/DimensionSpecificationComposite.java
@@ -26,91 +26,91 @@
  * @coverage swing.MigLayout.ui
  */
 public final class DimensionSpecificationComposite extends Composite {
-  private MigDimensionInfo m_dimension;
-  private final ErrorMessageTextField m_field;
-  private final Text m_textWidget;
-  private boolean m_updatingDimension;
-  private final Listener m_listener = new Listener() {
-    public void handleEvent(Event e) {
-      String s = m_textWidget.getText();
-      toDimension(s);
-    }
-  };
+	private MigDimensionInfo m_dimension;
+	private final ErrorMessageTextField m_field;
+	private final Text m_textWidget;
+	private boolean m_updatingDimension;
+	private final Listener m_listener = new Listener() {
+		public void handleEvent(Event e) {
+			String s = m_textWidget.getText();
+			toDimension(s);
+		}
+	};
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DimensionSpecificationComposite(Composite parent) {
-    super(parent, SWT.NONE);
-    setLayout(new FillLayout());
-    // prepare field/widget
-    m_field = new ErrorMessageTextField(this, SWT.BORDER);
-    m_textWidget = (Text) m_field.getControl();
-    // listen for modification
-    m_textWidget.addListener(SWT.Modify, m_listener);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DimensionSpecificationComposite(Composite parent) {
+		super(parent, SWT.NONE);
+		setLayout(new FillLayout());
+		// prepare field/widget
+		m_field = new ErrorMessageTextField(this, SWT.BORDER);
+		m_textWidget = (Text) m_field.getControl();
+		// listen for modification
+		m_textWidget.addListener(SWT.Modify, m_listener);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean setFocus() {
-    return m_textWidget.setFocus();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean setFocus() {
+		return m_textWidget.setFocus();
+	}
 
-  /**
-   * Updates this field from {@link MigDimensionInfo}.
-   */
-  public void fromDimension(MigDimensionInfo dimension) {
-    if (!m_updatingDimension) {
-      m_dimension = dimension;
-      String specification = m_dimension.getString(false);
-      if (!m_textWidget.getText().equals(specification)) {
-        setText(specification);
-      }
-    }
-  }
+	/**
+	 * Updates this field from {@link MigDimensionInfo}.
+	 */
+	public void fromDimension(MigDimensionInfo dimension) {
+		if (!m_updatingDimension) {
+			m_dimension = dimension;
+			String specification = m_dimension.getString(false);
+			if (!m_textWidget.getText().equals(specification)) {
+				setText(specification);
+			}
+		}
+	}
 
-  /**
-   * Uses text from {@link #m_textWidget} to update {@link MigDimensionInfo}.
-   */
-  private void toDimension(String s) {
-    m_updatingDimension = true;
-    try {
-      m_dimension.setString(s);
-      notifyModified(true);
-      m_field.setErrorMessage(null);
-    } catch (Throwable e) {
-      notifyModified(false);
-      m_field.setErrorMessage(e.getMessage());
-    } finally {
-      m_updatingDimension = false;
-    }
-  }
+	/**
+	 * Uses text from {@link #m_textWidget} to update {@link MigDimensionInfo}.
+	 */
+	private void toDimension(String s) {
+		m_updatingDimension = true;
+		try {
+			m_dimension.setString(s);
+			notifyModified(true);
+			m_field.setErrorMessage(null);
+		} catch (Throwable e) {
+			notifyModified(false);
+			m_field.setErrorMessage(e.getMessage());
+		} finally {
+			m_updatingDimension = false;
+		}
+	}
 
-  /**
-   * Notifies {@link SWT#Modify} listener that this field was updated, with given valid state.
-   */
-  private void notifyModified(boolean valid) {
-    Event event = new Event();
-    event.doit = valid;
-    notifyListeners(SWT.Modify, event);
-  }
+	/**
+	 * Notifies {@link SWT#Modify} listener that this field was updated, with given valid state.
+	 */
+	private void notifyModified(boolean valid) {
+		Event event = new Event();
+		event.doit = valid;
+		notifyListeners(SWT.Modify, event);
+	}
 
-  /**
-   * Sets text to {@link #m_textWidget}.
-   */
-  private void setText(String text) {
-    m_textWidget.removeListener(SWT.Modify, m_listener);
-    try {
-      m_textWidget.setText(text);
-      m_field.setErrorMessage(null);
-    } finally {
-      m_textWidget.addListener(SWT.Modify, m_listener);
-    }
-  }
+	/**
+	 * Sets text to {@link #m_textWidget}.
+	 */
+	private void setText(String text) {
+		m_textWidget.removeListener(SWT.Modify, m_listener);
+		try {
+			m_textWidget.setText(text);
+			m_field.setErrorMessage(null);
+		} finally {
+			m_textWidget.addListener(SWT.Modify, m_listener);
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/ui/DimensionUnitValueField.java b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/ui/DimensionUnitValueField.java
index 1f7cf399b..c0e0113d5 100644
--- a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/ui/DimensionUnitValueField.java
+++ b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/ui/DimensionUnitValueField.java
@@ -34,128 +34,128 @@
  * @coverage swing.MigLayout.ui
  */
 public final class DimensionUnitValueField {
-  private final String m_propertyName;
-  private final Listener m_listener;
-  private MigDimensionInfo m_dimension;
-  // UI
-  private final Button m_checkButton;
-  private final ErrorMessageTextField m_field;
-  private final Text m_textWidget;
-  // listener
-  private boolean m_updatingDimension;
-  private final Listener m_modifyListener = new Listener() {
-    public void handleEvent(Event e) {
-      toDimension(m_textWidget.getText());
-    }
-  };
+	private final String m_propertyName;
+	private final Listener m_listener;
+	private MigDimensionInfo m_dimension;
+	// UI
+	private final Button m_checkButton;
+	private final ErrorMessageTextField m_field;
+	private final Text m_textWidget;
+	// listener
+	private boolean m_updatingDimension;
+	private final Listener m_modifyListener = new Listener() {
+		public void handleEvent(Event e) {
+			toDimension(m_textWidget.getText());
+		}
+	};
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DimensionUnitValueField(Composite parent,
-      String labelText,
-      String propertyName,
-      Listener listener) {
-    m_propertyName = StringUtils.capitalize(propertyName);
-    m_listener = listener;
-    {
-      m_checkButton = new Button(parent, SWT.CHECK);
-      m_checkButton.setText(labelText);
-      m_checkButton.addListener(SWT.Selection, new Listener() {
-        public void handleEvent(Event event) {
-          if (m_checkButton.getSelection()) {
-            m_textWidget.setEnabled(true);
-            setText("100px");
-            toDimension(m_textWidget.getText());
-          } else {
-            m_textWidget.setEnabled(false);
-            setText("");
-            toDimension(null);
-          }
-        }
-      });
-    }
-    // prepare field/widget
-    m_field = new ErrorMessageTextField(parent, SWT.BORDER);
-    GridDataFactory.create(m_field.getLayoutControl()).grabH().fillH();
-    m_textWidget = (Text) m_field.getControl();
-    // listen for modification
-    m_textWidget.addListener(SWT.Modify, m_modifyListener);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DimensionUnitValueField(Composite parent,
+			String labelText,
+			String propertyName,
+			Listener listener) {
+		m_propertyName = StringUtils.capitalize(propertyName);
+		m_listener = listener;
+		{
+			m_checkButton = new Button(parent, SWT.CHECK);
+			m_checkButton.setText(labelText);
+			m_checkButton.addListener(SWT.Selection, new Listener() {
+				public void handleEvent(Event event) {
+					if (m_checkButton.getSelection()) {
+						m_textWidget.setEnabled(true);
+						setText("100px");
+						toDimension(m_textWidget.getText());
+					} else {
+						m_textWidget.setEnabled(false);
+						setText("");
+						toDimension(null);
+					}
+				}
+			});
+		}
+		// prepare field/widget
+		m_field = new ErrorMessageTextField(parent, SWT.BORDER);
+		GridDataFactory.create(m_field.getLayoutControl()).grabH().fillH();
+		m_textWidget = (Text) m_field.getControl();
+		// listen for modification
+		m_textWidget.addListener(SWT.Modify, m_modifyListener);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Updates this field from {@link MigDimensionInfo}.
-   */
-  public void fromDimension(MigDimensionInfo dimension) {
-    if (!m_updatingDimension) {
-      m_dimension = dimension;
-      try {
-        String methodName = MessageFormat.format("get{0}", m_propertyName);
-        UnitValue value = (UnitValue) ReflectionUtils.invokeMethod2(m_dimension, methodName);
-        if (value == null) {
-          m_checkButton.setSelection(false);
-          m_textWidget.setEnabled(false);
-          setText("");
-        } else {
-          m_checkButton.setSelection(true);
-          m_textWidget.setEnabled(true);
-          // update text
-          String text = m_dimension.getString(value);
-          if (!m_textWidget.getText().equals(text)) {
-            setText(text);
-          }
-        }
-      } catch (Throwable e) {
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Updates this field from {@link MigDimensionInfo}.
+	 */
+	public void fromDimension(MigDimensionInfo dimension) {
+		if (!m_updatingDimension) {
+			m_dimension = dimension;
+			try {
+				String methodName = MessageFormat.format("get{0}", m_propertyName);
+				UnitValue value = (UnitValue) ReflectionUtils.invokeMethod2(m_dimension, methodName);
+				if (value == null) {
+					m_checkButton.setSelection(false);
+					m_textWidget.setEnabled(false);
+					setText("");
+				} else {
+					m_checkButton.setSelection(true);
+					m_textWidget.setEnabled(true);
+					// update text
+					String text = m_dimension.getString(value);
+					if (!m_textWidget.getText().equals(text)) {
+						setText(text);
+					}
+				}
+			} catch (Throwable e) {
+			}
+		}
+	}
 
-  /**
-   * Uses text from {@link #m_textWidget} to update {@link MigDimensionInfo}.
-   */
-  private void toDimension(String s) {
-    m_updatingDimension = true;
-    try {
-      String methodName = MessageFormat.format("set{0}", m_propertyName);
-      ReflectionUtils.invokeMethod2(m_dimension, methodName, String.class, s);
-      notifyModified(true);
-      m_field.setErrorMessage(null);
-    } catch (Throwable e) {
-      notifyModified(false);
-      m_field.setErrorMessage(e.getMessage());
-    } finally {
-      m_updatingDimension = false;
-    }
-  }
+	/**
+	 * Uses text from {@link #m_textWidget} to update {@link MigDimensionInfo}.
+	 */
+	private void toDimension(String s) {
+		m_updatingDimension = true;
+		try {
+			String methodName = MessageFormat.format("set{0}", m_propertyName);
+			ReflectionUtils.invokeMethod2(m_dimension, methodName, String.class, s);
+			notifyModified(true);
+			m_field.setErrorMessage(null);
+		} catch (Throwable e) {
+			notifyModified(false);
+			m_field.setErrorMessage(e.getMessage());
+		} finally {
+			m_updatingDimension = false;
+		}
+	}
 
-  /**
-   * Notifies {@link #m_listener} that this field was updated, with given valid state.
-   */
-  private void notifyModified(boolean valid) {
-    Event event = new Event();
-    event.doit = valid;
-    m_listener.handleEvent(event);
-  }
+	/**
+	 * Notifies {@link #m_listener} that this field was updated, with given valid state.
+	 */
+	private void notifyModified(boolean valid) {
+		Event event = new Event();
+		event.doit = valid;
+		m_listener.handleEvent(event);
+	}
 
-  /**
-   * Sets text to {@link #m_textWidget}.
-   */
-  private void setText(String text) {
-    if (!m_textWidget.getText().equals(text)) {
-      m_textWidget.removeListener(SWT.Modify, m_modifyListener);
-      try {
-        m_textWidget.setText(text);
-        m_field.setErrorMessage(null);
-      } finally {
-        m_textWidget.addListener(SWT.Modify, m_modifyListener);
-      }
-    }
-  }
+	/**
+	 * Sets text to {@link #m_textWidget}.
+	 */
+	private void setText(String text) {
+		if (!m_textWidget.getText().equals(text)) {
+			m_textWidget.removeListener(SWT.Modify, m_modifyListener);
+			try {
+				m_textWidget.setText(text);
+				m_field.setErrorMessage(null);
+			} finally {
+				m_textWidget.addListener(SWT.Modify, m_modifyListener);
+			}
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/ui/DimensionsDialog.java b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/ui/DimensionsDialog.java
index c83eebb93..0e36d1561 100644
--- a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/ui/DimensionsDialog.java
+++ b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/ui/DimensionsDialog.java
@@ -53,354 +53,354 @@
  * @coverage swing.MigLayout.ui
  */
 abstract class DimensionsDialog<T extends MigDimensionInfo> extends ResizableTitleAreaDialog {
-  protected final MigLayoutInfo m_layout;
-  private final List<T> m_dimensions2;
+	protected final MigLayoutInfo m_layout;
+	private final List<T> m_dimensions2;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DimensionsDialog(Shell parentShell, MigLayoutInfo layout, List<T> dimensions) {
-    super(parentShell, Activator.getDefault());
-    setShellStyle(SWT.APPLICATION_MODAL | SWT.DIALOG_TRIM | SWT.RESIZE);
-    //
-    m_layout = layout;
-    m_dimensions2 = dimensions;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DimensionsDialog(Shell parentShell, MigLayoutInfo layout, List<T> dimensions) {
+		super(parentShell, Activator.getDefault());
+		setShellStyle(SWT.APPLICATION_MODAL | SWT.DIALOG_TRIM | SWT.RESIZE);
+		//
+		m_layout = layout;
+		m_dimensions2 = dimensions;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Control createDialogArea(Composite parent) {
-    Composite area = (Composite) super.createDialogArea(parent);
-    //
-    Composite container = new Composite(area, SWT.NONE);
-    GridDataFactory.create(container).grab().fill();
-    GridLayoutFactory.create(container).columns(2);
-    // title
-    {
-      Label label = new Label(container, SWT.NONE);
-      GridDataFactory.create(label).spanH(2);
-      label.setText(getViewerTitle());
-    }
-    // create viewer
-    createViewer(container);
-    // buttons
-    {
-      createButtonsComposite(container);
-      updateButtons();
-    }
-    // configure title area
-    setTitle(getDialogTitle());
-    setMessage(getDialogMessage());
-    return area;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Control createDialogArea(Composite parent) {
+		Composite area = (Composite) super.createDialogArea(parent);
+		//
+		Composite container = new Composite(area, SWT.NONE);
+		GridDataFactory.create(container).grab().fill();
+		GridLayoutFactory.create(container).columns(2);
+		// title
+		{
+			Label label = new Label(container, SWT.NONE);
+			GridDataFactory.create(label).spanH(2);
+			label.setText(getViewerTitle());
+		}
+		// create viewer
+		createViewer(container);
+		// buttons
+		{
+			createButtonsComposite(container);
+			updateButtons();
+		}
+		// configure title area
+		setTitle(getDialogTitle());
+		setMessage(getDialogMessage());
+		return area;
+	}
 
-  @Override
-  protected void configureShell(Shell newShell) {
-    super.configureShell(newShell);
-    newShell.setText(getDialogTitle());
-  }
+	@Override
+	protected void configureShell(Shell newShell) {
+		super.configureShell(newShell);
+		newShell.setText(getDialogTitle());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Dialog buttons
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createButtonsForButtonBar(Composite parent) {
-    createButton(parent, IDialogConstants.OK_ID, IDialogConstants.CLOSE_LABEL, false);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Dialog buttons
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createButtonsForButtonBar(Composite parent) {
+		createButton(parent, IDialogConstants.OK_ID, IDialogConstants.CLOSE_LABEL, false);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Viewer
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private TableViewer m_viewer;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Viewer
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private TableViewer m_viewer;
 
-  /**
-   * Creates {@link TableViewer} for {@link MigDimensionInfo}'s.
-   */
-  private void createViewer(Composite container) {
-    m_viewer = new TableViewer(container, SWT.BORDER | SWT.FULL_SELECTION | SWT.MULTI);
-    // configure table
-    Table table = m_viewer.getTable();
-    GridDataFactory.create(table).hintC(60, 15).grab().fill();
-    table.setHeaderVisible(true);
-    table.setLinesVisible(true);
-    createColumn(ModelMessages.DimensionsDialog_columnNumber, 5);
-    createColumn(ModelMessages.DimensionsDialog_columnSpecification, 65);
-    // configure viewer
-    m_viewer.setContentProvider(new ArrayContentProvider());
-    m_viewer.setLabelProvider(new DimensionsLabelProvider());
-    m_viewer.setInput(m_dimensions2);
-    // add listeners
-    m_viewer.addSelectionChangedListener(new ISelectionChangedListener() {
-      public void selectionChanged(SelectionChangedEvent event) {
-        updateButtons();
-      }
-    });
-    m_viewer.addDoubleClickListener(new IDoubleClickListener() {
-      public void doubleClick(DoubleClickEvent event) {
-        editSelectedDimension();
-      }
-    });
-    // select first
-    if (!m_dimensions2.isEmpty()) {
-      m_viewer.getTable().setSelection(0);
-    }
-  }
+	/**
+	 * Creates {@link TableViewer} for {@link MigDimensionInfo}'s.
+	 */
+	private void createViewer(Composite container) {
+		m_viewer = new TableViewer(container, SWT.BORDER | SWT.FULL_SELECTION | SWT.MULTI);
+		// configure table
+		Table table = m_viewer.getTable();
+		GridDataFactory.create(table).hintC(60, 15).grab().fill();
+		table.setHeaderVisible(true);
+		table.setLinesVisible(true);
+		createColumn(ModelMessages.DimensionsDialog_columnNumber, 5);
+		createColumn(ModelMessages.DimensionsDialog_columnSpecification, 65);
+		// configure viewer
+		m_viewer.setContentProvider(new ArrayContentProvider());
+		m_viewer.setLabelProvider(new DimensionsLabelProvider());
+		m_viewer.setInput(m_dimensions2);
+		// add listeners
+		m_viewer.addSelectionChangedListener(new ISelectionChangedListener() {
+			public void selectionChanged(SelectionChangedEvent event) {
+				updateButtons();
+			}
+		});
+		m_viewer.addDoubleClickListener(new IDoubleClickListener() {
+			public void doubleClick(DoubleClickEvent event) {
+				editSelectedDimension();
+			}
+		});
+		// select first
+		if (!m_dimensions2.isEmpty()) {
+			m_viewer.getTable().setSelection(0);
+		}
+	}
 
-  /**
-   * Creates {@link TableColumn} with given parameters.
-   */
-  private void createColumn(String text, int widthInChars) {
-    TableColumn column = new TableColumn(m_viewer.getTable(), SWT.NONE);
-    column.setText(text);
-    column.setWidth(convertWidthInCharsToPixels(widthInChars));
-  }
+	/**
+	 * Creates {@link TableColumn} with given parameters.
+	 */
+	private void createColumn(String text, int widthInChars) {
+		TableColumn column = new TableColumn(m_viewer.getTable(), SWT.NONE);
+		column.setText(text);
+		column.setWidth(convertWidthInCharsToPixels(widthInChars));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Buttons composite
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Button m_editButton;
-  private Button m_removeButton;
-  private Button m_moveUpButton;
-  private Button m_moveDownButton;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Buttons composite
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Button m_editButton;
+	private Button m_removeButton;
+	private Button m_moveUpButton;
+	private Button m_moveDownButton;
 
-  /**
-   * Creates {@link Composite} with {@link Button}'s.
-   */
-  private void createButtonsComposite(Composite parent) {
-    Composite composite = new Composite(parent, SWT.NONE);
-    GridDataFactory.create(composite).fill();
-    GridLayoutFactory.create(composite).marginsV(0);
-    //
-    createButton(composite, ModelMessages.DimensionsDialog_insertButton, new Listener() {
-      public void handleEvent(Event event) {
-        addNewDimension(0);
-      }
-    });
-    createButton(composite, ModelMessages.DimensionsDialog_appendButton, new Listener() {
-      public void handleEvent(Event event) {
-        addNewDimension(1);
-      }
-    });
-    m_editButton =
-        createButton(composite, ModelMessages.DimensionsDialog_editButton, new Listener() {
-          public void handleEvent(Event event) {
-            editSelectedDimension();
-          }
-        });
-    m_removeButton =
-        createButton(composite, ModelMessages.DimensionsDialog_removeButton, new Listener() {
-          public void handleEvent(Event event) {
-            final AtomicInteger lastIndex = new AtomicInteger();
-            applyChanges(new RunnableEx() {
-              public void run() throws Exception {
-                Iterable<T> selectedDimensions = GenericsUtils.<T>iterable(m_viewer.getSelection());
-                for (T dimension : selectedDimensions) {
-                  lastIndex.set(dimension.getIndex());
-                  dimension.delete();
-                }
-              }
-            });
-            // set selection
-            int index = lastIndex.get();
-            index = Math.min(index, m_dimensions2.size() - 1);
-            m_viewer.getTable().select(index);
-            // validate
-            updateButtons();
-          }
-        });
-    //
-    new Label(composite, SWT.NONE);
-    m_moveUpButton =
-        createButton(composite, ModelMessages.DimensionsDialog_moveUpButton, new Listener() {
-          public void handleEvent(Event event) {
-            applyChanges(new RunnableEx() {
-              public void run() throws Exception {
-                Iterable<T> selectedDimensions = GenericsUtils.<T>iterable(m_viewer.getSelection());
-                moveDimensionsUp(selectedDimensions);
-              }
-            });
-            updateButtons();
-          }
-        });
-    m_moveDownButton =
-        createButton(composite, ModelMessages.DimensionsDialog_moveDownButton, new Listener() {
-          public void handleEvent(Event event) {
-            applyChanges(new RunnableEx() {
-              public void run() throws Exception {
-                Iterable<T> selectedDimensions = GenericsUtils.<T>iterable(m_viewer.getSelection());
-                moveDimensionsDown(selectedDimensions);
-              }
-            });
-            updateButtons();
-          }
-        });
-  }
+	/**
+	 * Creates {@link Composite} with {@link Button}'s.
+	 */
+	private void createButtonsComposite(Composite parent) {
+		Composite composite = new Composite(parent, SWT.NONE);
+		GridDataFactory.create(composite).fill();
+		GridLayoutFactory.create(composite).marginsV(0);
+		//
+		createButton(composite, ModelMessages.DimensionsDialog_insertButton, new Listener() {
+			public void handleEvent(Event event) {
+				addNewDimension(0);
+			}
+		});
+		createButton(composite, ModelMessages.DimensionsDialog_appendButton, new Listener() {
+			public void handleEvent(Event event) {
+				addNewDimension(1);
+			}
+		});
+		m_editButton =
+				createButton(composite, ModelMessages.DimensionsDialog_editButton, new Listener() {
+					public void handleEvent(Event event) {
+						editSelectedDimension();
+					}
+				});
+		m_removeButton =
+				createButton(composite, ModelMessages.DimensionsDialog_removeButton, new Listener() {
+					public void handleEvent(Event event) {
+						final AtomicInteger lastIndex = new AtomicInteger();
+						applyChanges(new RunnableEx() {
+							public void run() throws Exception {
+								Iterable<T> selectedDimensions = GenericsUtils.<T>iterable(m_viewer.getSelection());
+								for (T dimension : selectedDimensions) {
+									lastIndex.set(dimension.getIndex());
+									dimension.delete();
+								}
+							}
+						});
+						// set selection
+						int index = lastIndex.get();
+						index = Math.min(index, m_dimensions2.size() - 1);
+						m_viewer.getTable().select(index);
+						// validate
+						updateButtons();
+					}
+				});
+		//
+		new Label(composite, SWT.NONE);
+		m_moveUpButton =
+				createButton(composite, ModelMessages.DimensionsDialog_moveUpButton, new Listener() {
+					public void handleEvent(Event event) {
+						applyChanges(new RunnableEx() {
+							public void run() throws Exception {
+								Iterable<T> selectedDimensions = GenericsUtils.<T>iterable(m_viewer.getSelection());
+								moveDimensionsUp(selectedDimensions);
+							}
+						});
+						updateButtons();
+					}
+				});
+		m_moveDownButton =
+				createButton(composite, ModelMessages.DimensionsDialog_moveDownButton, new Listener() {
+					public void handleEvent(Event event) {
+						applyChanges(new RunnableEx() {
+							public void run() throws Exception {
+								Iterable<T> selectedDimensions = GenericsUtils.<T>iterable(m_viewer.getSelection());
+								moveDimensionsDown(selectedDimensions);
+							}
+						});
+						updateButtons();
+					}
+				});
+	}
 
-  /**
-   * @return the new {@link Button} with given text and {@link SWT#Selection} {@link Listener}.
-   */
-  private static Button createButton(Composite parent, String text, Listener listener) {
-    Button button = new Button(parent, SWT.NONE);
-    GridDataFactory.create(button).grabH().fillH();
-    button.setText(text);
-    button.addListener(SWT.Selection, listener);
-    return button;
-  }
+	/**
+	 * @return the new {@link Button} with given text and {@link SWT#Selection} {@link Listener}.
+	 */
+	private static Button createButton(Composite parent, String text, Listener listener) {
+		Button button = new Button(parent, SWT.NONE);
+		GridDataFactory.create(button).grabH().fillH();
+		button.setText(text);
+		button.addListener(SWT.Selection, listener);
+		return button;
+	}
 
-  /**
-   * Updates buttons according to the selection in viewer.
-   */
-  private void updateButtons() {
-    IStructuredSelection selection = (IStructuredSelection) m_viewer.getSelection();
-    boolean empty = selection.isEmpty();
-    //
-    m_editButton.setEnabled(selection.size() == 1);
-    m_removeButton.setEnabled(!empty);
-    // up/down buttons
-    {
-      m_moveUpButton.setEnabled(!empty);
-      m_moveDownButton.setEnabled(!empty);
-      for (T dimension : GenericsUtils.<T>iterable(selection)) {
-        int index = dimension.getIndex();
-        if (index == 0) {
-          m_moveUpButton.setEnabled(false);
-        }
-        if (index == m_dimensions2.size() - 1) {
-          m_moveDownButton.setEnabled(false);
-        }
-      }
-    }
-  }
+	/**
+	 * Updates buttons according to the selection in viewer.
+	 */
+	private void updateButtons() {
+		IStructuredSelection selection = (IStructuredSelection) m_viewer.getSelection();
+		boolean empty = selection.isEmpty();
+		//
+		m_editButton.setEnabled(selection.size() == 1);
+		m_removeButton.setEnabled(!empty);
+		// up/down buttons
+		{
+			m_moveUpButton.setEnabled(!empty);
+			m_moveDownButton.setEnabled(!empty);
+			for (T dimension : GenericsUtils.<T>iterable(selection)) {
+				int index = dimension.getIndex();
+				if (index == 0) {
+					m_moveUpButton.setEnabled(false);
+				}
+				if (index == m_dimensions2.size() - 1) {
+					m_moveDownButton.setEnabled(false);
+				}
+			}
+		}
+	}
 
-  /**
-   * Adds new {@link MigDimensionInfo}.
-   *
-   * @param indexOffset
-   *          the offset to add to the current selection index, <code>0</code> to implement insert
-   *          and <code>1</code> for append.
-   */
-  private void addNewDimension(int indexOffset) {
-    // add new dimension
-    final int index = addNewDimension_getIndex(indexOffset);
-    applyChanges(new RunnableEx() {
-      public void run() throws Exception {
-        createNewDimension(index);
-      }
-    });
-    m_viewer.getTable().setSelection(index);
-    // edit it
-    editSelectedDimension();
-  }
+	/**
+	 * Adds new {@link MigDimensionInfo}.
+	 *
+	 * @param indexOffset
+	 *          the offset to add to the current selection index, <code>0</code> to implement insert
+	 *          and <code>1</code> for append.
+	 */
+	private void addNewDimension(int indexOffset) {
+		// add new dimension
+		final int index = addNewDimension_getIndex(indexOffset);
+		applyChanges(new RunnableEx() {
+			public void run() throws Exception {
+				createNewDimension(index);
+			}
+		});
+		m_viewer.getTable().setSelection(index);
+		// edit it
+		editSelectedDimension();
+	}
 
-  private int addNewDimension_getIndex(int indexOffset) {
-    int index = m_viewer.getTable().getSelectionIndex();
-    if (index == -1) {
-      return m_dimensions2.size();
-    } else {
-      return index + indexOffset;
-    }
-  }
+	private int addNewDimension_getIndex(int indexOffset) {
+		int index = m_viewer.getTable().getSelectionIndex();
+		if (index == -1) {
+			return m_dimensions2.size();
+		} else {
+			return index + indexOffset;
+		}
+	}
 
-  /**
-   * Edits the selected {@link MigDimensionInfo}.
-   */
-  private void editSelectedDimension() {
-    T dimension = GenericsUtils.<T>first(m_viewer.getSelection());
-    editSelectedDimension(dimension);
-    applyChanges(new RunnableEx() {
-      public void run() throws Exception {
-      }
-    });
-  }
+	/**
+	 * Edits the selected {@link MigDimensionInfo}.
+	 */
+	private void editSelectedDimension() {
+		T dimension = GenericsUtils.<T>first(m_viewer.getSelection());
+		editSelectedDimension(dimension);
+		applyChanges(new RunnableEx() {
+			public void run() throws Exception {
+			}
+		});
+	}
 
-  /**
-   * Applies changes in {@link MigDimensionInfo}-s.
-   */
-  private void applyChanges(final RunnableEx runnable) {
-    ExecutionUtils.run(m_layout, new RunnableEx() {
-      public void run() throws Exception {
-        runnable.run();
-        m_layout.writeDimensions();
-      }
-    });
-    m_viewer.refresh();
-  }
+	/**
+	 * Applies changes in {@link MigDimensionInfo}-s.
+	 */
+	private void applyChanges(final RunnableEx runnable) {
+		ExecutionUtils.run(m_layout, new RunnableEx() {
+			public void run() throws Exception {
+				runnable.run();
+				m_layout.writeDimensions();
+			}
+		});
+		m_viewer.refresh();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Methods to implement: strings
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the title for dialog title area.
-   */
-  protected abstract String getDialogTitle();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Methods to implement: strings
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the title for dialog title area.
+	 */
+	protected abstract String getDialogTitle();
 
-  /**
-   * @return the description for dialog title area.
-   */
-  protected abstract String getDialogMessage();
+	/**
+	 * @return the description for dialog title area.
+	 */
+	protected abstract String getDialogMessage();
 
-  /**
-   * @return the title for dimensions viewer.
-   */
-  protected abstract String getViewerTitle();
+	/**
+	 * @return the title for dimensions viewer.
+	 */
+	protected abstract String getViewerTitle();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Methods to implement: dimensions
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected abstract void moveDimensionsUp(Iterable<T> dimensions) throws Exception;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Methods to implement: dimensions
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected abstract void moveDimensionsUp(Iterable<T> dimensions) throws Exception;
 
-  protected abstract void moveDimensionsDown(Iterable<T> dimensions) throws Exception;
+	protected abstract void moveDimensionsDown(Iterable<T> dimensions) throws Exception;
 
-  /**
-   * Edits given {@link MigDimensionInfo}.
-   *
-   * @return <code>true</code> if edit was successful.
-   */
-  protected abstract boolean editSelectedDimension(T dimension);
+	/**
+	 * Edits given {@link MigDimensionInfo}.
+	 *
+	 * @return <code>true</code> if edit was successful.
+	 */
+	protected abstract boolean editSelectedDimension(T dimension);
 
-  /**
-   * @return the new {@link MigDimensionInfo} instance to append/insert.
-   */
-  protected abstract T createNewDimension(int targetIndex) throws Exception;
+	/**
+	 * @return the new {@link MigDimensionInfo} instance to append/insert.
+	 */
+	protected abstract T createNewDimension(int targetIndex) throws Exception;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Dimensions providers
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * {@link ITableLabelProvider} for {@link MigDimensionInfo}.
-   */
-  private class DimensionsLabelProvider extends LabelProvider implements ITableLabelProvider {
-    public String getColumnText(Object element, int columnIndex) {
-      MigDimensionInfo dimension = (MigDimensionInfo) element;
-      if (columnIndex == 0) {
-        return "" + dimension.getIndex();
-      }
-      if (columnIndex == 1) {
-        return dimension.getString(false);
-      }
-      return element.toString();
-    }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Dimensions providers
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * {@link ITableLabelProvider} for {@link MigDimensionInfo}.
+	 */
+	private class DimensionsLabelProvider extends LabelProvider implements ITableLabelProvider {
+		public String getColumnText(Object element, int columnIndex) {
+			MigDimensionInfo dimension = (MigDimensionInfo) element;
+			if (columnIndex == 0) {
+				return "" + dimension.getIndex();
+			}
+			if (columnIndex == 1) {
+				return dimension.getString(false);
+			}
+			return element.toString();
+		}
 
-    public Image getColumnImage(Object element, int columnIndex) {
-      return null;
-    }
-  }
+		public Image getColumnImage(Object element, int columnIndex) {
+			return null;
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/ui/ErrorMessageTextField.java b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/ui/ErrorMessageTextField.java
index d6fedefc1..8e037337a 100644
--- a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/ui/ErrorMessageTextField.java
+++ b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/ui/ErrorMessageTextField.java
@@ -27,56 +27,56 @@
  */
 @SuppressWarnings("deprecation")
 public class ErrorMessageTextField extends org.eclipse.jface.fieldassist.DecoratedField {
-  private final FieldDecoration m_fieldDecoration;
+	private final FieldDecoration m_fieldDecoration;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ErrorMessageTextField(Composite parent, int style) {
-    super(parent, style, new org.eclipse.jface.fieldassist.TextControlCreator());
-    // prepare decoration
-    {
-      FieldDecoration standardDecoration =
-          FieldDecorationRegistry.getDefault().getFieldDecoration(FieldDecorationRegistry.DEC_ERROR);
-      m_fieldDecoration = new FieldDecoration(standardDecoration.getImage(), "");
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ErrorMessageTextField(Composite parent, int style) {
+		super(parent, style, new org.eclipse.jface.fieldassist.TextControlCreator());
+		// prepare decoration
+		{
+			FieldDecoration standardDecoration =
+					FieldDecorationRegistry.getDefault().getFieldDecoration(FieldDecorationRegistry.DEC_ERROR);
+			m_fieldDecoration = new FieldDecoration(standardDecoration.getImage(), "");
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Control getLayoutControl() {
-    return super.getLayoutControl();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Control getLayoutControl() {
+		return super.getLayoutControl();
+	}
 
-  @Override
-  public Control getControl() {
-    return super.getControl();
-  }
+	@Override
+	public Control getControl() {
+		return super.getControl();
+	}
 
-  /**
-   * Shows error message.
-   *
-   * @param message
-   *          the message to show as decorator, or <code>null</code> to hide error message.
-   */
-  public void setErrorMessage(String message) {
-    if (message != null) {
-      addFieldDecoration(m_fieldDecoration, SWT.TOP | SWT.RIGHT, false);
-      m_fieldDecoration.setDescription(message);
-    } else {
-      hideDecoration(m_fieldDecoration);
-      // note, that we use knowledge about implementation of DecoratedField (that it uses FormLayout)
-      {
-        FormData data = (FormData) getControl().getLayoutData();
-        data.right = new FormAttachment(100, 0);
-      }
-      getControl().getParent().layout();
-    }
-  }
+	/**
+	 * Shows error message.
+	 *
+	 * @param message
+	 *          the message to show as decorator, or <code>null</code> to hide error message.
+	 */
+	public void setErrorMessage(String message) {
+		if (message != null) {
+			addFieldDecoration(m_fieldDecoration, SWT.TOP | SWT.RIGHT, false);
+			m_fieldDecoration.setDescription(message);
+		} else {
+			hideDecoration(m_fieldDecoration);
+			// note, that we use knowledge about implementation of DecoratedField (that it uses FormLayout)
+			{
+				FormData data = (FormData) getControl().getLayoutData();
+				data.right = new FormAttachment(100, 0);
+			}
+			getControl().getParent().layout();
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/ui/RowEditDialog.java b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/ui/RowEditDialog.java
index 1957e81cc..3ed351150 100644
--- a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/ui/RowEditDialog.java
+++ b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/ui/RowEditDialog.java
@@ -28,43 +28,43 @@
  * @coverage swing.MigLayout.ui
  */
 public final class RowEditDialog extends DimensionEditDialog<MigRowInfo, Alignment> {
-  private static final List<AlignmentDescription<Alignment>> ALIGNMENTS = Lists.newArrayList();
-  static {
-    ALIGNMENTS.add(new AlignmentDescription<Alignment>(Alignment.DEFAULT,
-        ModelMessages.RowEditDialog_alignmentDefault));
-    ALIGNMENTS.add(new AlignmentDescription<Alignment>(Alignment.TOP,
-        ModelMessages.RowEditDialog_alignmentTop));
-    ALIGNMENTS.add(new AlignmentDescription<Alignment>(Alignment.CENTER,
-        ModelMessages.RowEditDialog_alignmentCenter));
-    ALIGNMENTS.add(new AlignmentDescription<Alignment>(Alignment.BOTTOM,
-        ModelMessages.RowEditDialog_alignmentBottom));
-    ALIGNMENTS.add(new AlignmentDescription<Alignment>(Alignment.FILL,
-        ModelMessages.RowEditDialog_alignmentFill));
-    ALIGNMENTS.add(new AlignmentDescription<Alignment>(Alignment.BASELINE,
-        ModelMessages.RowEditDialog_alignmentBaseline));
-  }
+	private static final List<AlignmentDescription<Alignment>> ALIGNMENTS = Lists.newArrayList();
+	static {
+		ALIGNMENTS.add(new AlignmentDescription<Alignment>(Alignment.DEFAULT,
+				ModelMessages.RowEditDialog_alignmentDefault));
+		ALIGNMENTS.add(new AlignmentDescription<Alignment>(Alignment.TOP,
+				ModelMessages.RowEditDialog_alignmentTop));
+		ALIGNMENTS.add(new AlignmentDescription<Alignment>(Alignment.CENTER,
+				ModelMessages.RowEditDialog_alignmentCenter));
+		ALIGNMENTS.add(new AlignmentDescription<Alignment>(Alignment.BOTTOM,
+				ModelMessages.RowEditDialog_alignmentBottom));
+		ALIGNMENTS.add(new AlignmentDescription<Alignment>(Alignment.FILL,
+				ModelMessages.RowEditDialog_alignmentFill));
+		ALIGNMENTS.add(new AlignmentDescription<Alignment>(Alignment.BASELINE,
+				ModelMessages.RowEditDialog_alignmentBaseline));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public RowEditDialog(Shell parentShell, MigLayoutInfo layout, MigRowInfo row) {
-    super(parentShell, layout, layout.getRows(), row, ModelMessages.RowEditDialog_title, ALIGNMENTS);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public RowEditDialog(Shell parentShell, MigLayoutInfo layout, MigRowInfo row) {
+		super(parentShell, layout, layout.getRows(), row, ModelMessages.RowEditDialog_title, ALIGNMENTS);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Internal access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Alignment getAlignment(MigRowInfo dimension) {
-    return dimension.getAlignment(false);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Internal access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Alignment getAlignment(MigRowInfo dimension) {
+		return dimension.getAlignment(false);
+	}
 
-  @Override
-  protected void setAlignment(MigRowInfo dimension, Alignment alignment) {
-    dimension.setAlignment(alignment);
-  }
+	@Override
+	protected void setAlignment(MigRowInfo dimension, Alignment alignment) {
+		dimension.setAlignment(alignment);
+	}
 }
diff --git a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/ui/RowsDialog.java b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/ui/RowsDialog.java
index 7b7cbbbc7..91b316fd9 100644
--- a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/ui/RowsDialog.java
+++ b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/ui/RowsDialog.java
@@ -25,65 +25,65 @@
  * @coverage swing.MigLayout.ui
  */
 public final class RowsDialog extends DimensionsDialog<MigRowInfo> {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public RowsDialog(Shell parentShell, MigLayoutInfo layout) {
-    super(parentShell, layout, layout.getRows());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public RowsDialog(Shell parentShell, MigLayoutInfo layout) {
+		super(parentShell, layout, layout.getRows());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // DimensionsDialog: strings
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getDialogTitle() {
-    return ModelMessages.RowsDialog_dialogTitle;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// DimensionsDialog: strings
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getDialogTitle() {
+		return ModelMessages.RowsDialog_dialogTitle;
+	}
 
-  @Override
-  protected String getDialogMessage() {
-    return ModelMessages.RowsDialog_dialogMessage;
-  }
+	@Override
+	protected String getDialogMessage() {
+		return ModelMessages.RowsDialog_dialogMessage;
+	}
 
-  @Override
-  protected String getViewerTitle() {
-    return ModelMessages.RowsDialog_viewerTitle;
-  }
+	@Override
+	protected String getViewerTitle() {
+		return ModelMessages.RowsDialog_viewerTitle;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // DimensionsDialog: dimensions
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void moveDimensionsUp(Iterable<MigRowInfo> dimensions) throws Exception {
-    for (MigRowInfo row : dimensions) {
-      int index = row.getIndex();
-      m_layout.moveRow(index, index - 1);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// DimensionsDialog: dimensions
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void moveDimensionsUp(Iterable<MigRowInfo> dimensions) throws Exception {
+		for (MigRowInfo row : dimensions) {
+			int index = row.getIndex();
+			m_layout.moveRow(index, index - 1);
+		}
+	}
 
-  @Override
-  protected void moveDimensionsDown(Iterable<MigRowInfo> dimensions) throws Exception {
-    for (MigRowInfo row : dimensions) {
-      int index = row.getIndex();
-      m_layout.moveRow(index, index + 2);
-    }
-  }
+	@Override
+	protected void moveDimensionsDown(Iterable<MigRowInfo> dimensions) throws Exception {
+		for (MigRowInfo row : dimensions) {
+			int index = row.getIndex();
+			m_layout.moveRow(index, index + 2);
+		}
+	}
 
-  @Override
-  protected boolean editSelectedDimension(MigRowInfo row) {
-    return new RowEditDialog(getShell(), m_layout, row).open() == OK;
-  }
+	@Override
+	protected boolean editSelectedDimension(MigRowInfo row) {
+		return new RowEditDialog(getShell(), m_layout, row).open() == OK;
+	}
 
-  @Override
-  protected MigRowInfo createNewDimension(int targetIndex) throws Exception {
-    MigRowInfo row = new MigRowInfo(m_layout);
-    m_layout.insertRow(targetIndex);
-    return row;
-  }
+	@Override
+	protected MigRowInfo createNewDimension(int targetIndex) throws Exception {
+		MigRowInfo row = new MigRowInfo(m_layout);
+		m_layout.insertRow(targetIndex);
+		return row;
+	}
 }
diff --git a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/ui/UnitDescription.java b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/ui/UnitDescription.java
index 5505e3938..7cf7de697 100644
--- a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/ui/UnitDescription.java
+++ b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/model/ui/UnitDescription.java
@@ -17,35 +17,35 @@
  * @coverage swing.MigLayout.ui
  */
 public final class UnitDescription {
-  private final String m_unit;
-  private final String m_title;
+	private final String m_unit;
+	private final String m_title;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public UnitDescription(String unit, String title) {
-    m_unit = unit;
-    m_title = title;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public UnitDescription(String unit, String title) {
+		m_unit = unit;
+		m_title = title;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the unit name.
-   */
-  public String getUnit() {
-    return m_unit;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the unit name.
+	 */
+	public String getUnit() {
+		return m_unit;
+	}
 
-  /**
-   * @return the title to display.
-   */
-  public String getTitle() {
-    return m_title;
-  }
+	/**
+	 * @return the title to display.
+	 */
+	public String getTitle() {
+		return m_title;
+	}
 }
diff --git a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/preferences/MigLayoutPreferencePage.java b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/preferences/MigLayoutPreferencePage.java
index b5cae7dfe..81502e4de 100644
--- a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/preferences/MigLayoutPreferencePage.java
+++ b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/preferences/MigLayoutPreferencePage.java
@@ -29,45 +29,45 @@
  * @coverage swing.MigLayout.ui
  */
 public final class MigLayoutPreferencePage extends AbstractBindingPreferencesPage {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public MigLayoutPreferencePage() {
-    super(Activator.getStore());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public MigLayoutPreferencePage() {
+		super(Activator.getStore());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected AbstractBindingComposite createBindingComposite(Composite parent) {
-    return new ContentsComposite(parent, m_bindManager, m_preferences);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected AbstractBindingComposite createBindingComposite(Composite parent) {
+		return new ContentsComposite(parent, m_bindManager, m_preferences);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Contents
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private class ContentsComposite extends AbstractBindingComposite {
-    public ContentsComposite(Composite parent,
-        DataBindManager bindManager,
-        IPreferenceStore preferences) {
-      super(parent, bindManager, preferences);
-      GridLayoutFactory.create(this).noMargins();
-      // boolean preferences
-      checkButton(
-          this,
-          PreferencesMessages.MigLayoutPreferencePage_autoGrab,
-          IPreferenceConstants.P_ENABLE_GRAB);
-      checkButton(
-          this,
-          PreferencesMessages.MigLayoutPreferencePage_autoAlign,
-          IPreferenceConstants.P_ENABLE_RIGHT_ALIGNMENT);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Contents
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private class ContentsComposite extends AbstractBindingComposite {
+		public ContentsComposite(Composite parent,
+				DataBindManager bindManager,
+				IPreferenceStore preferences) {
+			super(parent, bindManager, preferences);
+			GridLayoutFactory.create(this).noMargins();
+			// boolean preferences
+			checkButton(
+					this,
+					PreferencesMessages.MigLayoutPreferencePage_autoGrab,
+					IPreferenceConstants.P_ENABLE_GRAB);
+			checkButton(
+					this,
+					PreferencesMessages.MigLayoutPreferencePage_autoAlign,
+					IPreferenceConstants.P_ENABLE_RIGHT_ALIGNMENT);
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/preferences/PreferencesMessages.java b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/preferences/PreferencesMessages.java
index a99f2d9f4..babbb12a8 100644
--- a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/preferences/PreferencesMessages.java
+++ b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/preferences/PreferencesMessages.java
@@ -3,15 +3,15 @@
 import org.eclipse.osgi.util.NLS;
 
 public class PreferencesMessages extends NLS {
-  private static final String BUNDLE_NAME =
-      "org.eclipse.wb.internal.swing.MigLayout.preferences.PreferencesMessages";
-  public static String MigLayoutPreferencePage_autoAlign;
-  public static String MigLayoutPreferencePage_autoGrab;
-  static {
-    // initialize resource bundle
-    NLS.initializeMessages(BUNDLE_NAME, PreferencesMessages.class);
-  }
+	private static final String BUNDLE_NAME =
+			"org.eclipse.wb.internal.swing.MigLayout.preferences.PreferencesMessages";
+	public static String MigLayoutPreferencePage_autoAlign;
+	public static String MigLayoutPreferencePage_autoGrab;
+	static {
+		// initialize resource bundle
+		NLS.initializeMessages(BUNDLE_NAME, PreferencesMessages.class);
+	}
 
-  private PreferencesMessages() {
-  }
+	private PreferencesMessages() {
+	}
 }
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/Activator.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/Activator.java
index 168dfa125..c3cadc246 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/Activator.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/Activator.java
@@ -34,95 +34,95 @@
  * @author lobas_av
  */
 public class Activator extends AbstractUIPlugin {
-  public static final String PLUGIN_ID = "org.eclipse.wb.swing.databinding";
-  private static Activator m_plugin;
+	public static final String PLUGIN_ID = "org.eclipse.wb.swing.databinding";
+	private static Activator m_plugin;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Life cycle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void stop(BundleContext context) throws Exception {
-    m_plugin = null;
-    super.stop(context);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Life cycle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void stop(BundleContext context) throws Exception {
+		m_plugin = null;
+		super.stop(context);
+	}
 
-  @Override
-  public void start(BundleContext context) throws Exception {
-    super.start(context);
-    m_plugin = this;
-  }
+	@Override
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+		m_plugin = this;
+	}
 
-  public static Activator getDefault() {
-    return m_plugin;
-  }
+	public static Activator getDefault() {
+		return m_plugin;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link InputStream} for file from plugin directory.
-   */
-  public static InputStream getFile(final String path) {
-    return ExecutionUtils.runObject(new RunnableObjectEx<InputStream>() {
-      public InputStream runObject() throws Exception {
-        return m_plugin.getBundle().getEntry(path).openStream();
-      }
-    }, "Unable to open plugin file %s", path);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link InputStream} for file from plugin directory.
+	 */
+	public static InputStream getFile(final String path) {
+		return ExecutionUtils.runObject(new RunnableObjectEx<InputStream>() {
+			public InputStream runObject() throws Exception {
+				return m_plugin.getBundle().getEntry(path).openStream();
+			}
+		}, "Unable to open plugin file %s", path);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Caches
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final Map<String, Image> m_nameToIconMap = Maps.newHashMap();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Caches
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final Map<String, Image> m_nameToIconMap = Maps.newHashMap();
 
-  /**
-   * Get image from "icons" directory.
-   */
-  public static Image getImage(String name) {
-    Image image = m_nameToIconMap.get(name);
-    if (image == null) {
-      // prepare path
-      String path;
-      if (name.startsWith("/")) {
-        path = name;
-      } else {
-        path = "icons/" + name;
-      }
-      //
-      InputStream is = getFile(path);
-      try {
-        image = new Image(Display.getCurrent(), is);
-        m_nameToIconMap.put(name, image);
-      } finally {
-        IOUtils.closeQuietly(is);
-      }
-    }
-    return image;
-  }
+	/**
+	 * Get image from "icons" directory.
+	 */
+	public static Image getImage(String name) {
+		Image image = m_nameToIconMap.get(name);
+		if (image == null) {
+			// prepare path
+			String path;
+			if (name.startsWith("/")) {
+				path = name;
+			} else {
+				path = "icons/" + name;
+			}
+			//
+			InputStream is = getFile(path);
+			try {
+				image = new Image(Display.getCurrent(), is);
+				m_nameToIconMap.put(name, image);
+			} finally {
+				IOUtils.closeQuietly(is);
+			}
+		}
+		return image;
+	}
 
-  /**
-   * Get image descriptor from "icons" directory.
-   */
-  public static ImageDescriptor getImageDescriptor(String name) {
-    URL url = m_plugin.getBundle().getEntry("icons/" + name);
-    return ImageDescriptor.createFromURL(url);
-  }
+	/**
+	 * Get image descriptor from "icons" directory.
+	 */
+	public static ImageDescriptor getImageDescriptor(String name) {
+		URL url = m_plugin.getBundle().getEntry("icons/" + name);
+		return ImageDescriptor.createFromURL(url);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Preferences
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Returns preference store for DB plugin.
-   */
-  public static IPreferenceStore getStore() {
-    return m_plugin.getPreferenceStore();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Preferences
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Returns preference store for DB plugin.
+	 */
+	public static IPreferenceStore getStore() {
+		return m_plugin.getPreferenceStore();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/DatabindingsProvider.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/DatabindingsProvider.java
index 3ee71b1ae..6b27e5a0e 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/DatabindingsProvider.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/DatabindingsProvider.java
@@ -79,623 +79,623 @@
  * @coverage bindings.swing.model
  */
 public final class DatabindingsProvider implements IDatabindingsProvider {
-  private static List<PropertyFilter> m_filters;
-  private final JavaInfo m_javaInfoRoot;
-  private final DataBindingsRootInfo m_rootInfo = new DataBindingsRootInfo(this);
-  private final List<ObserveTypeContainer> m_containers;
-  private final List<ObserveType> m_types = Lists.newArrayList();
-  private final Map<ObserveType, ObserveTypeContainer> m_typeToContainer = Maps.newHashMap();
-  private BindingDesignPage m_bindingPage;
-  private ObserveType m_targetStartType;
-  private ObserveType m_modelStartType;
-  private JavaInfoDeleteManager m_javaInfoDeleteManager;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DatabindingsProvider(JavaInfo javaInfoRoot) throws Exception {
-    m_javaInfoRoot = javaInfoRoot;
-    // load containers
-    m_containers =
-        ExternalFactoriesHelper.getElementsInstances(
-            ObserveTypeContainer.class,
-            "org.eclipse.wb.swing.databinding.observeTypeContainer",
-            "container");
-    // prepare containers
-    for (ObserveTypeContainer container : m_containers) {
-      ObserveType observeType = container.getObserveType();
-      m_types.add(observeType);
-      m_typeToContainer.put(observeType, container);
-      //
-      if (container.isTargetStartType()) {
-        m_targetStartType = observeType;
-      }
-      if (container.isModelStartType()) {
-        m_modelStartType = observeType;
-      }
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public JavaInfo getJavaInfoRoot() {
-    return m_javaInfoRoot;
-  }
-
-  public List<ObserveTypeContainer> getContainers() {
-    return m_containers;
-  }
-
-  public ObserveTypeContainer getContainer(ObserveType type) {
-    return m_typeToContainer.get(type);
-  }
-
-  public DataBindingsRootInfo getRootInfo() {
-    return m_rootInfo;
-  }
-
-  public void hookJavaInfoEvents() throws Exception {
-    // update observes
-    new SynchronizeManager(this, m_javaInfoRoot);
-    // handle delete info's
-    m_javaInfoDeleteManager = new JavaInfoDeleteManager(this);
-    // decorate info's
-    new JavaInfoDecorator(this);
-    // properties
-    new JavaInfoPropertiesManager(this, m_javaInfoRoot);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Bindings
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void configureBindingViewer(IDialogSettings settings, TableViewer viewer) {
-    // prepare table
-    Table table = viewer.getTable();
-    // binding type image column
-    TableColumn bindingColumn = new TableColumn(table, SWT.NONE);
-    bindingColumn.setWidth(23);
-    bindingColumn.setResizable(false);
-    // target column
-    TableColumn targetColumn = UiUtils.createSmartColumn(table, settings, "TargetColumn", 250);
-    targetColumn.setText(Messages.DatabindingsProvider_targetColumnText);
-    // model column
-    TableColumn modelColumn = UiUtils.createSmartColumn(table, settings, "ModelColumn", 250);
-    modelColumn.setText(Messages.DatabindingsProvider_modelColumnText);
-    // strategy column
-    TableColumn strategyColumn = UiUtils.createSmartColumn(table, settings, "StrategyColumn", 170);
-    strategyColumn.setText(Messages.DatabindingsProvider_strategyColumnText);
-    // binding variable column
-    TableColumn variableBindingColumn =
-        UiUtils.createSmartColumn(table, settings, "VariableBindingColumn", 250);
-    variableBindingColumn.setText(Messages.DatabindingsProvider_bindingColumnText);
-    // label provider
-    viewer.setLabelProvider(new BindingLabelProvider());
-  }
-
-  public List<IBindingInfo> getBindings() {
-    return CoreUtils.cast(m_rootInfo.getBindings());
-  }
-
-  public String getBindingPresentationText(IBindingInfo ibinding) throws Exception {
-    BindingInfo binding = (BindingInfo) ibinding;
-    return "Binding["
-        + binding.getTargetPresentationText(true)
-        + " : "
-        + binding.getModelPresentationText(true)
-        + "]";
-  }
-
-  public void gotoDefinition(IBindingInfo ibinding) {
-    try {
-      // calculate variable
-      BindingInfo binding = (BindingInfo) ibinding;
-      String variable = binding.getVariableIdentifier();
-      if (variable != null) {
-        if (variable.endsWith("()")) {
-          variable = variable.substring(0, variable.length() - 2);
-        }
-        // calculate position
-        int position = m_javaInfoRoot.getEditor().getEnclosingNode(variable).getStartPosition();
-        // sets position
-        IDesignPageSite site = IDesignPageSite.Helper.getSite(m_javaInfoRoot);
-        site.openSourcePosition(position);
-      }
-    } catch (Throwable e) {
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Types
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public List<ObserveType> getTypes() {
-    return m_types;
-  }
-
-  public ObserveType getTargetStartType() {
-    return m_targetStartType;
-  }
-
-  public ObserveType getModelStartType() {
-    return m_modelStartType;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Observes
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public IBaseLabelProvider createPropertiesViewerLabelProvider(TreeViewer viewer) {
-    return new ObserveDecoratingLabelProvider(viewer);
-  }
-
-  public List<PropertyFilter> getObservePropertyFilters() {
-    if (m_filters == null) {
-      m_filters = Lists.newArrayList();
-      // advanced
-      m_filters.add(new HideAdvancedPropertyFilter());
-      m_filters.add(new ShowAdvancedPropertyFilter());
-      // any type
-      m_filters.add(new AllPropertiesFilter(Messages.DatabindingsProvider_allTypes,
-          TypeImageProvider.OBJECT_IMAGE));
-      // String, byte, char
-      m_filters.add(new TypesPropertyFilter("String",
-          TypeImageProvider.STRING_IMAGE,
-          String.class,
-          byte.class,
-          char.class));
-      // boolean
-      m_filters.add(new TypesPropertyFilter("Boolean",
-          TypeImageProvider.BOOLEAN_IMAGE,
-          boolean.class,
-          Boolean.class));
-      // int, short, long, float, double
-      m_filters.add(new TypesPropertyFilter("Numbers",
-          TypeImageProvider.NUMBER_IMAGE,
-          int.class,
-          short.class,
-          long.class,
-          float.class,
-          double.class));
-      // Swing Color
-      m_filters.add(new TypesPropertyFilter("Color",
-          TypeImageProvider.COLOR_IMAGE,
-          java.awt.Color.class));
-      // Swing Font
-      m_filters.add(new TypesPropertyFilter("Font",
-          TypeImageProvider.FONT_IMAGE,
-          java.awt.Font.class));
-      // Swing Image
-      m_filters.add(new TypesPropertyFilter("Image",
-          TypeImageProvider.IMAGE_IMAGE,
-          java.awt.Image.class,
-          javax.swing.Icon.class));
-    }
-    return m_filters;
-  }
-
-  public List<IObserveInfo> getObserves(ObserveType type) {
-    ObserveTypeContainer container = m_typeToContainer.get(type);
-    return container == null ? Collections.<IObserveInfo>emptyList() : container.getObservables();
-  }
-
-  public void synchronizeObserves() throws Exception {
-    // prepare editor
-    AstEditor editor = m_javaInfoRoot.getEditor();
-    // prepare node
-    TypeDeclaration rootNode = JavaInfoUtils.getTypeDeclaration(m_javaInfoRoot);
-    if (rootNode == null) {
-      // use first type declaration from compilation unit
-      CompilationUnit astUnit = editor.getAstUnit();
-      rootNode = (TypeDeclaration) astUnit.types().get(0);
-    }
-    // synchronize
-    for (ObserveTypeContainer container : m_containers) {
-      container.synchronizeObserves(m_javaInfoRoot, editor, rootNode);
-    }
-  }
-
-  public void fillExternalBindingActions(ToolBar toolBar, Menu contextMenu) {
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public List<IUiContentProvider> getContentProviders(IBindingInfo ibinding, IPageListener listener)
-      throws Exception {
-    List<IUiContentProvider> providers = Lists.newArrayList();
-    BindingInfo binding = (BindingInfo) ibinding;
-    binding.createContentProviders(m_rootInfo.getBindings(), providers, listener, this);
-    return providers;
-  }
-
-  public boolean validate(IObserveInfo target,
-      IObserveInfo targetProperty,
-      IObserveInfo model,
-      IObserveInfo modelProperty) throws Exception {
-    // ignore itself
-    if (target == model && targetProperty == modelProperty) {
-      return false;
-    }
-    // prepare ObserveInfo's
-    ObserveInfo targetObserve = (ObserveInfo) target;
-    ObserveInfo targetPropertyObserve = (ObserveInfo) targetProperty;
-    ObserveInfo modelObserve = (ObserveInfo) model;
-    ObserveInfo modelPropertyObserve = (ObserveInfo) modelProperty;
-    // check swing bindings
-    boolean isTargetSwingBinding = isSwingBinding(targetObserve, targetPropertyObserve);
-    boolean isModelSwingBinding = isSwingBinding(modelObserve, modelPropertyObserve);
-    if (isTargetSwingBinding && isModelSwingBinding) {
-      return false;
-    }
-    if (isTargetSwingBinding) {
-      if (findBinding(targetObserve, targetPropertyObserve)) {
-        return false;
-      }
-    } else if (isModelSwingBinding) {
-      if (findBinding(modelObserve, modelPropertyObserve)) {
-        return false;
-      }
-    }
-    // check virtual bindings
-    if (targetObserve.getCreationType() == ObserveCreationType.VirtualBinding) {
-      return isModelSwingBinding;
-    }
-    if (modelObserve.getCreationType() == ObserveCreationType.VirtualBinding) {
-      return isTargetSwingBinding;
-    }
-    // check over reference's
-    return !targetObserve.getReference().equals(modelObserve.getReference())
-        || !targetPropertyObserve.getReference().equals(modelPropertyObserve.getReference());
-  }
-
-  private boolean findBinding(IObserveInfo object, IObserveInfo property) {
-    for (BindingInfo binding : m_rootInfo.getBindings()) {
-      // check target
-      if (binding.getTarget() == object && binding.getTargetProperty() == property) {
-        return true;
-      }
-      // check model
-      if (binding.getModel() == object && binding.getModelProperty() == property) {
-        return true;
-      }
-    }
-    return false;
-  }
-
-  /**
-   * @return <code>true</code> if given pair {@link ObserveInfo} object + property is swing binding
-   *         type.
-   */
-  public static boolean isSwingBinding(ObserveInfo observe, ObserveInfo propertyObserve) {
-    ObserveCreationType creationType = observe.getCreationType();
-    return propertyObserve.getCreationType() == ObserveCreationType.SelfProperty
-        && (creationType == ObserveCreationType.JListBinding
-            || creationType == ObserveCreationType.JTableBinding || creationType == ObserveCreationType.JComboBoxBinding);
-  }
-
-  public IBindingInfo createBinding(IObserveInfo target,
-      IObserveInfo targetProperty,
-      IObserveInfo model,
-      IObserveInfo modelProperty) throws Exception {
-    // prepare ObserveInfo's
-    ObserveInfo targetObserve = (ObserveInfo) target;
-    ObserveInfo targetPropertyObserve = (ObserveInfo) targetProperty;
-    ObserveInfo modelObserve = (ObserveInfo) model;
-    ObserveInfo modelPropertyObserve = (ObserveInfo) modelProperty;
-    // check virtual bindings
-    if (targetObserve.getCreationType() == ObserveCreationType.VirtualBinding
-        || modelObserve.getCreationType() == ObserveCreationType.VirtualBinding) {
-      return new VirtualBindingInfo(targetObserve, targetPropertyObserve, createProperty(
-          targetObserve,
-          targetPropertyObserve), modelObserve, modelPropertyObserve, createProperty(
-          modelObserve,
-          modelPropertyObserve));
-    }
-    // check swing bindings
-    if (targetObserve.getCreationType() != ObserveCreationType.AutoBinding) {
-      IBindingInfo binding =
-          createSwingBinding(
-              targetObserve,
-              targetPropertyObserve,
-              modelObserve,
-              modelPropertyObserve);
-      if (binding != null) {
-        return binding;
-      }
-    }
-    if (modelObserve.getCreationType() != ObserveCreationType.AutoBinding) {
-      IBindingInfo binding =
-          createSwingBinding(
-              modelObserve,
-              modelPropertyObserve,
-              targetObserve,
-              targetPropertyObserve);
-      if (binding != null) {
-        return binding;
-      }
-    }
-    // auto bindings
-    UpdateStrategyInfo strategy = new UpdateStrategyInfo(UpdateStrategyInfo.Value.READ);
-    PropertyInfo targetAstProperty = createProperty(targetObserve, targetPropertyObserve);
-    PropertyInfo modelAstProperty = createProperty(modelObserve, modelPropertyObserve);
-    //
-    return new AutoBindingInfo(strategy,
-        targetObserve,
-        targetPropertyObserve,
-        targetAstProperty,
-        modelObserve,
-        modelPropertyObserve,
-        modelAstProperty);
-  }
-
-  private IBindingInfo createSwingBinding(ObserveInfo component,
-      ObserveInfo componentProperty,
-      ObserveInfo model,
-      ObserveInfo modelProperty) throws Exception {
-    // check swing binding type
-    if (componentProperty.getCreationType() != ObserveCreationType.SelfProperty) {
-      return null;
-    }
-    if (modelProperty.getCreationType() != ObserveCreationType.ListSelfProperty
-        && modelProperty.getCreationType() != ObserveCreationType.ListProperty) {
-      return null;
-    }
-    // create strategy
-    UpdateStrategyInfo strategy = new UpdateStrategyInfo(UpdateStrategyInfo.Value.READ);
-    // create properties
-    PropertyInfo componentAstProperty = createProperty(component, componentProperty);
-    PropertyInfo modelAstProperty = createProperty(model, modelProperty);
-    // create binding
-    switch (component.getCreationType()) {
-      case JListBinding :
-        return new JListBindingInfo(strategy,
-            component,
-            componentProperty,
-            componentAstProperty,
-            model,
-            modelProperty,
-            modelAstProperty);
-      case JTableBinding :
-        return new JTableBindingInfo(strategy,
-            component,
-            componentProperty,
-            componentAstProperty,
-            model,
-            modelProperty,
-            modelAstProperty);
-      case JComboBoxBinding :
-        return new JComboBoxBindingInfo(strategy,
-            component,
-            componentProperty,
-            componentAstProperty,
-            model,
-            modelProperty,
-            modelAstProperty);
-    }
-    //
-    return null;
-  }
-
-  private PropertyInfo createProperty(ObserveInfo observe, ObserveInfo observeProperty)
-      throws Exception {
-    PropertyInfo astProperty = observeProperty.createProperty(observe);
-    //
-    if (observeProperty.canShared()) {
-      for (BindingInfo binding : m_rootInfo.getBindings()) {
-        // check target
-        PropertyInfo targetAstProperty = binding.getTargetAstProperty();
-        if (targetAstProperty.getClass() == astProperty.getClass()) {
-          if (binding.getTarget() == observe
-              && binding.getTargetProperty() == observeProperty
-              || targetAstProperty.canShared(astProperty)) {
-            return targetAstProperty;
-          }
-        }
-        // check model
-        PropertyInfo modelAstProperty = binding.getModelAstProperty();
-        if (modelAstProperty.getClass() == astProperty.getClass()) {
-          if (binding.getModel() == observe
-              && binding.getModelProperty() == observeProperty
-              || modelAstProperty.canShared(astProperty)) {
-            return modelAstProperty;
-          }
-        }
-      }
-    }
-    //
-    return astProperty;
-  }
-
-  public void addBinding(final IBindingInfo ibinding) {
-    // add
-    getBindings().add(ibinding);
-    // post process
-    ExecutionUtils.runLog(new RunnableEx() {
-      public void run() throws Exception {
-        BindingInfo binding = (BindingInfo) ibinding;
-        binding.create(m_rootInfo.getBindings());
-      }
-    });
-    // save
-    saveEdit();
-  }
-
-  public void editBinding(final IBindingInfo ibinding) {
-    // edit
-    ExecutionUtils.runLog(new RunnableEx() {
-      public void run() throws Exception {
-        BindingInfo binding = (BindingInfo) ibinding;
-        binding.edit(m_rootInfo.getBindings());
-      }
-    });
-    // save
-    saveEdit();
-  }
-
-  public void deleteBinding(final IBindingInfo ibinding) {
-    // delete
-    ExecutionUtils.runLog(new RunnableEx() {
-      public void run() throws Exception {
-        BindingInfo binding = (BindingInfo) ibinding;
-        if (binding.delete(m_rootInfo.getBindings())) {
-          binding.postDelete();
-          getBindings().remove(binding);
-        }
-      }
-    });
-    // save
-    saveEdit();
-  }
-
-  public void deleteAllBindings() {
-    // delete all
-    ExecutionUtils.runLog(new RunnableEx() {
-      public void run() throws Exception {
-        for (BindingInfo binding : m_rootInfo.getBindings()) {
-          binding.postDelete();
-        }
-      }
-    });
-    getBindings().clear();
-    // save
-    saveEdit();
-  }
-
-  public void deleteBindings(JavaInfo javaInfo) throws Exception {
-    if (m_javaInfoDeleteManager != null) {
-      m_javaInfoDeleteManager.deleteJavaInfo(javaInfo);
-    }
-  }
-
-  public boolean canMoveBinding(IBindingInfo binding, int targetIndex, boolean upDown) {
-    // don't move detail binding
-    if (binding instanceof DetailBindingInfo) {
-      return false;
-    }
-    // column binding can move only relative to column bindings
-    IBindingInfo target = getBindings().get(targetIndex);
-    if (binding instanceof ColumnBindingInfo) {
-      return target instanceof ColumnBindingInfo;
-    }
-    // enable move to up for JListBindingInfo and JTableBindingInfo
-    if (target instanceof DetailBindingInfo || target instanceof ColumnBindingInfo) {
-      return upDown;
-    }
-    return true;
-  }
-
-  public void moveBinding(IBindingInfo binding, int sourceIndex, int targetIndex, boolean upDown) {
-    // configure target index
-    if (upDown) {
-      targetIndex = configureMoveUpDown(binding, sourceIndex, targetIndex);
-    }
-    // do reorder
-    List<IBindingInfo> bindings = getBindings();
-    bindings.remove(sourceIndex);
-    bindings.add(targetIndex, binding);
-    // binding handle
-    BindingInfo bindingInfo = (BindingInfo) binding;
-    bindingInfo.move(m_rootInfo.getBindings());
-    // save
-    saveEdit();
-  }
-
-  private int configureMoveUpDown(IBindingInfo binding, int sourceIndex, int targetIndex) {
-    if (!(binding instanceof ColumnBindingInfo)) {
-      List<IBindingInfo> bindings = getBindings();
-      IBindingInfo target = bindings.get(targetIndex);
-      boolean up = sourceIndex > targetIndex;
-      // configure target index
-      if (target instanceof ColumnBindingInfo) {
-        ColumnBindingInfo column = (ColumnBindingInfo) target;
-        // calculate column index
-        if (up) {
-          targetIndex = bindings.indexOf(column.getJTableBinding());
-        } else {
-          // skip all columns
-          targetIndex += column.getJTableBinding().getColumns().size();
-          //
-          target = bindings.get(targetIndex);
-          if (target instanceof JTableBindingInfo) {
-            // skip all columns
-            JTableBindingInfo tableBinding = (JTableBindingInfo) target;
-            targetIndex += tableBinding.getColumns().size();
-          } else if (target instanceof JListBindingInfo) {
-            // skip detail binding
-            targetIndex++;
-          }
-        }
-      } else if (target instanceof DetailBindingInfo) {
-        if (up) {
-          DetailBindingInfo detail = (DetailBindingInfo) target;
-          targetIndex = bindings.indexOf(detail.getJListBinding());
-        } else {
-          // skip detail binding
-          targetIndex++;
-          //
-          target = bindings.get(targetIndex);
-          if (target instanceof JTableBindingInfo) {
-            // skip all columns
-            JTableBindingInfo tableBinding = (JTableBindingInfo) target;
-            targetIndex += tableBinding.getColumns().size();
-          } else if (target instanceof JListBindingInfo) {
-            // skip detail binding
-            targetIndex++;
-          }
-        }
-      } else if (target instanceof JTableBindingInfo && !up) {
-        // skip all columns
-        JTableBindingInfo tableBinding = (JTableBindingInfo) target;
-        targetIndex += tableBinding.getColumns().size();
-      } else if (target instanceof JListBindingInfo && !up) {
-        // skip detail binding
-        targetIndex++;
-      }
-    }
-    return targetIndex;
-  }
-
-  public void setBindingPage(Object bindingPage) {
-    m_bindingPage = (BindingDesignPage) bindingPage;
-  }
-
-  public void refreshDesigner() {
-  }
-
-  public void saveEdit() {
-    final boolean[] reparse = new boolean[1];
-    ExecutionUtils.run(m_javaInfoRoot, new RunnableEx() {
-      public void run() throws Exception {
-        try {
-          m_rootInfo.preCommit();
-          reparse[0] = m_rootInfo.commit();
-        } finally {
-          m_rootInfo.postCommit();
-        }
-        // check reparse
-        if (reparse[0]) {
-          BindingDesignPage.handleReparse(m_bindingPage, m_javaInfoRoot);
-        }
-      }
-    });
-    // check synchronize
-    if (!reparse[0]) {
-      ExecutionUtils.runLog(new RunnableEx() {
-        public void run() throws Exception {
-          synchronizeObserves();
-        }
-      });
-    }
-  }
+	private static List<PropertyFilter> m_filters;
+	private final JavaInfo m_javaInfoRoot;
+	private final DataBindingsRootInfo m_rootInfo = new DataBindingsRootInfo(this);
+	private final List<ObserveTypeContainer> m_containers;
+	private final List<ObserveType> m_types = Lists.newArrayList();
+	private final Map<ObserveType, ObserveTypeContainer> m_typeToContainer = Maps.newHashMap();
+	private BindingDesignPage m_bindingPage;
+	private ObserveType m_targetStartType;
+	private ObserveType m_modelStartType;
+	private JavaInfoDeleteManager m_javaInfoDeleteManager;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DatabindingsProvider(JavaInfo javaInfoRoot) throws Exception {
+		m_javaInfoRoot = javaInfoRoot;
+		// load containers
+		m_containers =
+				ExternalFactoriesHelper.getElementsInstances(
+						ObserveTypeContainer.class,
+						"org.eclipse.wb.swing.databinding.observeTypeContainer",
+						"container");
+		// prepare containers
+		for (ObserveTypeContainer container : m_containers) {
+			ObserveType observeType = container.getObserveType();
+			m_types.add(observeType);
+			m_typeToContainer.put(observeType, container);
+			//
+			if (container.isTargetStartType()) {
+				m_targetStartType = observeType;
+			}
+			if (container.isModelStartType()) {
+				m_modelStartType = observeType;
+			}
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public JavaInfo getJavaInfoRoot() {
+		return m_javaInfoRoot;
+	}
+
+	public List<ObserveTypeContainer> getContainers() {
+		return m_containers;
+	}
+
+	public ObserveTypeContainer getContainer(ObserveType type) {
+		return m_typeToContainer.get(type);
+	}
+
+	public DataBindingsRootInfo getRootInfo() {
+		return m_rootInfo;
+	}
+
+	public void hookJavaInfoEvents() throws Exception {
+		// update observes
+		new SynchronizeManager(this, m_javaInfoRoot);
+		// handle delete info's
+		m_javaInfoDeleteManager = new JavaInfoDeleteManager(this);
+		// decorate info's
+		new JavaInfoDecorator(this);
+		// properties
+		new JavaInfoPropertiesManager(this, m_javaInfoRoot);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Bindings
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void configureBindingViewer(IDialogSettings settings, TableViewer viewer) {
+		// prepare table
+		Table table = viewer.getTable();
+		// binding type image column
+		TableColumn bindingColumn = new TableColumn(table, SWT.NONE);
+		bindingColumn.setWidth(23);
+		bindingColumn.setResizable(false);
+		// target column
+		TableColumn targetColumn = UiUtils.createSmartColumn(table, settings, "TargetColumn", 250);
+		targetColumn.setText(Messages.DatabindingsProvider_targetColumnText);
+		// model column
+		TableColumn modelColumn = UiUtils.createSmartColumn(table, settings, "ModelColumn", 250);
+		modelColumn.setText(Messages.DatabindingsProvider_modelColumnText);
+		// strategy column
+		TableColumn strategyColumn = UiUtils.createSmartColumn(table, settings, "StrategyColumn", 170);
+		strategyColumn.setText(Messages.DatabindingsProvider_strategyColumnText);
+		// binding variable column
+		TableColumn variableBindingColumn =
+				UiUtils.createSmartColumn(table, settings, "VariableBindingColumn", 250);
+		variableBindingColumn.setText(Messages.DatabindingsProvider_bindingColumnText);
+		// label provider
+		viewer.setLabelProvider(new BindingLabelProvider());
+	}
+
+	public List<IBindingInfo> getBindings() {
+		return CoreUtils.cast(m_rootInfo.getBindings());
+	}
+
+	public String getBindingPresentationText(IBindingInfo ibinding) throws Exception {
+		BindingInfo binding = (BindingInfo) ibinding;
+		return "Binding["
+		+ binding.getTargetPresentationText(true)
+		+ " : "
+		+ binding.getModelPresentationText(true)
+		+ "]";
+	}
+
+	public void gotoDefinition(IBindingInfo ibinding) {
+		try {
+			// calculate variable
+			BindingInfo binding = (BindingInfo) ibinding;
+			String variable = binding.getVariableIdentifier();
+			if (variable != null) {
+				if (variable.endsWith("()")) {
+					variable = variable.substring(0, variable.length() - 2);
+				}
+				// calculate position
+				int position = m_javaInfoRoot.getEditor().getEnclosingNode(variable).getStartPosition();
+				// sets position
+				IDesignPageSite site = IDesignPageSite.Helper.getSite(m_javaInfoRoot);
+				site.openSourcePosition(position);
+			}
+		} catch (Throwable e) {
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Types
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public List<ObserveType> getTypes() {
+		return m_types;
+	}
+
+	public ObserveType getTargetStartType() {
+		return m_targetStartType;
+	}
+
+	public ObserveType getModelStartType() {
+		return m_modelStartType;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Observes
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public IBaseLabelProvider createPropertiesViewerLabelProvider(TreeViewer viewer) {
+		return new ObserveDecoratingLabelProvider(viewer);
+	}
+
+	public List<PropertyFilter> getObservePropertyFilters() {
+		if (m_filters == null) {
+			m_filters = Lists.newArrayList();
+			// advanced
+			m_filters.add(new HideAdvancedPropertyFilter());
+			m_filters.add(new ShowAdvancedPropertyFilter());
+			// any type
+			m_filters.add(new AllPropertiesFilter(Messages.DatabindingsProvider_allTypes,
+					TypeImageProvider.OBJECT_IMAGE));
+			// String, byte, char
+			m_filters.add(new TypesPropertyFilter("String",
+					TypeImageProvider.STRING_IMAGE,
+					String.class,
+					byte.class,
+					char.class));
+			// boolean
+			m_filters.add(new TypesPropertyFilter("Boolean",
+					TypeImageProvider.BOOLEAN_IMAGE,
+					boolean.class,
+					Boolean.class));
+			// int, short, long, float, double
+			m_filters.add(new TypesPropertyFilter("Numbers",
+					TypeImageProvider.NUMBER_IMAGE,
+					int.class,
+					short.class,
+					long.class,
+					float.class,
+					double.class));
+			// Swing Color
+			m_filters.add(new TypesPropertyFilter("Color",
+					TypeImageProvider.COLOR_IMAGE,
+					java.awt.Color.class));
+			// Swing Font
+			m_filters.add(new TypesPropertyFilter("Font",
+					TypeImageProvider.FONT_IMAGE,
+					java.awt.Font.class));
+			// Swing Image
+			m_filters.add(new TypesPropertyFilter("Image",
+					TypeImageProvider.IMAGE_IMAGE,
+					java.awt.Image.class,
+					javax.swing.Icon.class));
+		}
+		return m_filters;
+	}
+
+	public List<IObserveInfo> getObserves(ObserveType type) {
+		ObserveTypeContainer container = m_typeToContainer.get(type);
+		return container == null ? Collections.<IObserveInfo>emptyList() : container.getObservables();
+	}
+
+	public void synchronizeObserves() throws Exception {
+		// prepare editor
+		AstEditor editor = m_javaInfoRoot.getEditor();
+		// prepare node
+		TypeDeclaration rootNode = JavaInfoUtils.getTypeDeclaration(m_javaInfoRoot);
+		if (rootNode == null) {
+			// use first type declaration from compilation unit
+			CompilationUnit astUnit = editor.getAstUnit();
+			rootNode = (TypeDeclaration) astUnit.types().get(0);
+		}
+		// synchronize
+		for (ObserveTypeContainer container : m_containers) {
+			container.synchronizeObserves(m_javaInfoRoot, editor, rootNode);
+		}
+	}
+
+	public void fillExternalBindingActions(ToolBar toolBar, Menu contextMenu) {
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public List<IUiContentProvider> getContentProviders(IBindingInfo ibinding, IPageListener listener)
+			throws Exception {
+		List<IUiContentProvider> providers = Lists.newArrayList();
+		BindingInfo binding = (BindingInfo) ibinding;
+		binding.createContentProviders(m_rootInfo.getBindings(), providers, listener, this);
+		return providers;
+	}
+
+	public boolean validate(IObserveInfo target,
+			IObserveInfo targetProperty,
+			IObserveInfo model,
+			IObserveInfo modelProperty) throws Exception {
+		// ignore itself
+		if (target == model && targetProperty == modelProperty) {
+			return false;
+		}
+		// prepare ObserveInfo's
+		ObserveInfo targetObserve = (ObserveInfo) target;
+		ObserveInfo targetPropertyObserve = (ObserveInfo) targetProperty;
+		ObserveInfo modelObserve = (ObserveInfo) model;
+		ObserveInfo modelPropertyObserve = (ObserveInfo) modelProperty;
+		// check swing bindings
+		boolean isTargetSwingBinding = isSwingBinding(targetObserve, targetPropertyObserve);
+		boolean isModelSwingBinding = isSwingBinding(modelObserve, modelPropertyObserve);
+		if (isTargetSwingBinding && isModelSwingBinding) {
+			return false;
+		}
+		if (isTargetSwingBinding) {
+			if (findBinding(targetObserve, targetPropertyObserve)) {
+				return false;
+			}
+		} else if (isModelSwingBinding) {
+			if (findBinding(modelObserve, modelPropertyObserve)) {
+				return false;
+			}
+		}
+		// check virtual bindings
+		if (targetObserve.getCreationType() == ObserveCreationType.VirtualBinding) {
+			return isModelSwingBinding;
+		}
+		if (modelObserve.getCreationType() == ObserveCreationType.VirtualBinding) {
+			return isTargetSwingBinding;
+		}
+		// check over reference's
+		return !targetObserve.getReference().equals(modelObserve.getReference())
+				|| !targetPropertyObserve.getReference().equals(modelPropertyObserve.getReference());
+	}
+
+	private boolean findBinding(IObserveInfo object, IObserveInfo property) {
+		for (BindingInfo binding : m_rootInfo.getBindings()) {
+			// check target
+			if (binding.getTarget() == object && binding.getTargetProperty() == property) {
+				return true;
+			}
+			// check model
+			if (binding.getModel() == object && binding.getModelProperty() == property) {
+				return true;
+			}
+		}
+		return false;
+	}
+
+	/**
+	 * @return <code>true</code> if given pair {@link ObserveInfo} object + property is swing binding
+	 *         type.
+	 */
+	public static boolean isSwingBinding(ObserveInfo observe, ObserveInfo propertyObserve) {
+		ObserveCreationType creationType = observe.getCreationType();
+		return propertyObserve.getCreationType() == ObserveCreationType.SelfProperty
+				&& (creationType == ObserveCreationType.JListBinding
+				|| creationType == ObserveCreationType.JTableBinding || creationType == ObserveCreationType.JComboBoxBinding);
+	}
+
+	public IBindingInfo createBinding(IObserveInfo target,
+			IObserveInfo targetProperty,
+			IObserveInfo model,
+			IObserveInfo modelProperty) throws Exception {
+		// prepare ObserveInfo's
+		ObserveInfo targetObserve = (ObserveInfo) target;
+		ObserveInfo targetPropertyObserve = (ObserveInfo) targetProperty;
+		ObserveInfo modelObserve = (ObserveInfo) model;
+		ObserveInfo modelPropertyObserve = (ObserveInfo) modelProperty;
+		// check virtual bindings
+		if (targetObserve.getCreationType() == ObserveCreationType.VirtualBinding
+				|| modelObserve.getCreationType() == ObserveCreationType.VirtualBinding) {
+			return new VirtualBindingInfo(targetObserve, targetPropertyObserve, createProperty(
+					targetObserve,
+					targetPropertyObserve), modelObserve, modelPropertyObserve, createProperty(
+							modelObserve,
+							modelPropertyObserve));
+		}
+		// check swing bindings
+		if (targetObserve.getCreationType() != ObserveCreationType.AutoBinding) {
+			IBindingInfo binding =
+					createSwingBinding(
+							targetObserve,
+							targetPropertyObserve,
+							modelObserve,
+							modelPropertyObserve);
+			if (binding != null) {
+				return binding;
+			}
+		}
+		if (modelObserve.getCreationType() != ObserveCreationType.AutoBinding) {
+			IBindingInfo binding =
+					createSwingBinding(
+							modelObserve,
+							modelPropertyObserve,
+							targetObserve,
+							targetPropertyObserve);
+			if (binding != null) {
+				return binding;
+			}
+		}
+		// auto bindings
+		UpdateStrategyInfo strategy = new UpdateStrategyInfo(UpdateStrategyInfo.Value.READ);
+		PropertyInfo targetAstProperty = createProperty(targetObserve, targetPropertyObserve);
+		PropertyInfo modelAstProperty = createProperty(modelObserve, modelPropertyObserve);
+		//
+		return new AutoBindingInfo(strategy,
+				targetObserve,
+				targetPropertyObserve,
+				targetAstProperty,
+				modelObserve,
+				modelPropertyObserve,
+				modelAstProperty);
+	}
+
+	private IBindingInfo createSwingBinding(ObserveInfo component,
+			ObserveInfo componentProperty,
+			ObserveInfo model,
+			ObserveInfo modelProperty) throws Exception {
+		// check swing binding type
+		if (componentProperty.getCreationType() != ObserveCreationType.SelfProperty) {
+			return null;
+		}
+		if (modelProperty.getCreationType() != ObserveCreationType.ListSelfProperty
+				&& modelProperty.getCreationType() != ObserveCreationType.ListProperty) {
+			return null;
+		}
+		// create strategy
+		UpdateStrategyInfo strategy = new UpdateStrategyInfo(UpdateStrategyInfo.Value.READ);
+		// create properties
+		PropertyInfo componentAstProperty = createProperty(component, componentProperty);
+		PropertyInfo modelAstProperty = createProperty(model, modelProperty);
+		// create binding
+		switch (component.getCreationType()) {
+		case JListBinding :
+			return new JListBindingInfo(strategy,
+					component,
+					componentProperty,
+					componentAstProperty,
+					model,
+					modelProperty,
+					modelAstProperty);
+		case JTableBinding :
+			return new JTableBindingInfo(strategy,
+					component,
+					componentProperty,
+					componentAstProperty,
+					model,
+					modelProperty,
+					modelAstProperty);
+		case JComboBoxBinding :
+			return new JComboBoxBindingInfo(strategy,
+					component,
+					componentProperty,
+					componentAstProperty,
+					model,
+					modelProperty,
+					modelAstProperty);
+		}
+		//
+		return null;
+	}
+
+	private PropertyInfo createProperty(ObserveInfo observe, ObserveInfo observeProperty)
+			throws Exception {
+		PropertyInfo astProperty = observeProperty.createProperty(observe);
+		//
+		if (observeProperty.canShared()) {
+			for (BindingInfo binding : m_rootInfo.getBindings()) {
+				// check target
+				PropertyInfo targetAstProperty = binding.getTargetAstProperty();
+				if (targetAstProperty.getClass() == astProperty.getClass()) {
+					if (binding.getTarget() == observe
+							&& binding.getTargetProperty() == observeProperty
+							|| targetAstProperty.canShared(astProperty)) {
+						return targetAstProperty;
+					}
+				}
+				// check model
+				PropertyInfo modelAstProperty = binding.getModelAstProperty();
+				if (modelAstProperty.getClass() == astProperty.getClass()) {
+					if (binding.getModel() == observe
+							&& binding.getModelProperty() == observeProperty
+							|| modelAstProperty.canShared(astProperty)) {
+						return modelAstProperty;
+					}
+				}
+			}
+		}
+		//
+		return astProperty;
+	}
+
+	public void addBinding(final IBindingInfo ibinding) {
+		// add
+		getBindings().add(ibinding);
+		// post process
+		ExecutionUtils.runLog(new RunnableEx() {
+			public void run() throws Exception {
+				BindingInfo binding = (BindingInfo) ibinding;
+				binding.create(m_rootInfo.getBindings());
+			}
+		});
+		// save
+		saveEdit();
+	}
+
+	public void editBinding(final IBindingInfo ibinding) {
+		// edit
+		ExecutionUtils.runLog(new RunnableEx() {
+			public void run() throws Exception {
+				BindingInfo binding = (BindingInfo) ibinding;
+				binding.edit(m_rootInfo.getBindings());
+			}
+		});
+		// save
+		saveEdit();
+	}
+
+	public void deleteBinding(final IBindingInfo ibinding) {
+		// delete
+		ExecutionUtils.runLog(new RunnableEx() {
+			public void run() throws Exception {
+				BindingInfo binding = (BindingInfo) ibinding;
+				if (binding.delete(m_rootInfo.getBindings())) {
+					binding.postDelete();
+					getBindings().remove(binding);
+				}
+			}
+		});
+		// save
+		saveEdit();
+	}
+
+	public void deleteAllBindings() {
+		// delete all
+		ExecutionUtils.runLog(new RunnableEx() {
+			public void run() throws Exception {
+				for (BindingInfo binding : m_rootInfo.getBindings()) {
+					binding.postDelete();
+				}
+			}
+		});
+		getBindings().clear();
+		// save
+		saveEdit();
+	}
+
+	public void deleteBindings(JavaInfo javaInfo) throws Exception {
+		if (m_javaInfoDeleteManager != null) {
+			m_javaInfoDeleteManager.deleteJavaInfo(javaInfo);
+		}
+	}
+
+	public boolean canMoveBinding(IBindingInfo binding, int targetIndex, boolean upDown) {
+		// don't move detail binding
+		if (binding instanceof DetailBindingInfo) {
+			return false;
+		}
+		// column binding can move only relative to column bindings
+		IBindingInfo target = getBindings().get(targetIndex);
+		if (binding instanceof ColumnBindingInfo) {
+			return target instanceof ColumnBindingInfo;
+		}
+		// enable move to up for JListBindingInfo and JTableBindingInfo
+		if (target instanceof DetailBindingInfo || target instanceof ColumnBindingInfo) {
+			return upDown;
+		}
+		return true;
+	}
+
+	public void moveBinding(IBindingInfo binding, int sourceIndex, int targetIndex, boolean upDown) {
+		// configure target index
+		if (upDown) {
+			targetIndex = configureMoveUpDown(binding, sourceIndex, targetIndex);
+		}
+		// do reorder
+		List<IBindingInfo> bindings = getBindings();
+		bindings.remove(sourceIndex);
+		bindings.add(targetIndex, binding);
+		// binding handle
+		BindingInfo bindingInfo = (BindingInfo) binding;
+		bindingInfo.move(m_rootInfo.getBindings());
+		// save
+		saveEdit();
+	}
+
+	private int configureMoveUpDown(IBindingInfo binding, int sourceIndex, int targetIndex) {
+		if (!(binding instanceof ColumnBindingInfo)) {
+			List<IBindingInfo> bindings = getBindings();
+			IBindingInfo target = bindings.get(targetIndex);
+			boolean up = sourceIndex > targetIndex;
+			// configure target index
+			if (target instanceof ColumnBindingInfo) {
+				ColumnBindingInfo column = (ColumnBindingInfo) target;
+				// calculate column index
+				if (up) {
+					targetIndex = bindings.indexOf(column.getJTableBinding());
+				} else {
+					// skip all columns
+					targetIndex += column.getJTableBinding().getColumns().size();
+					//
+					target = bindings.get(targetIndex);
+					if (target instanceof JTableBindingInfo) {
+						// skip all columns
+						JTableBindingInfo tableBinding = (JTableBindingInfo) target;
+						targetIndex += tableBinding.getColumns().size();
+					} else if (target instanceof JListBindingInfo) {
+						// skip detail binding
+						targetIndex++;
+					}
+				}
+			} else if (target instanceof DetailBindingInfo) {
+				if (up) {
+					DetailBindingInfo detail = (DetailBindingInfo) target;
+					targetIndex = bindings.indexOf(detail.getJListBinding());
+				} else {
+					// skip detail binding
+					targetIndex++;
+					//
+					target = bindings.get(targetIndex);
+					if (target instanceof JTableBindingInfo) {
+						// skip all columns
+						JTableBindingInfo tableBinding = (JTableBindingInfo) target;
+						targetIndex += tableBinding.getColumns().size();
+					} else if (target instanceof JListBindingInfo) {
+						// skip detail binding
+						targetIndex++;
+					}
+				}
+			} else if (target instanceof JTableBindingInfo && !up) {
+				// skip all columns
+				JTableBindingInfo tableBinding = (JTableBindingInfo) target;
+				targetIndex += tableBinding.getColumns().size();
+			} else if (target instanceof JListBindingInfo && !up) {
+				// skip detail binding
+				targetIndex++;
+			}
+		}
+		return targetIndex;
+	}
+
+	public void setBindingPage(Object bindingPage) {
+		m_bindingPage = (BindingDesignPage) bindingPage;
+	}
+
+	public void refreshDesigner() {
+	}
+
+	public void saveEdit() {
+		final boolean[] reparse = new boolean[1];
+		ExecutionUtils.run(m_javaInfoRoot, new RunnableEx() {
+			public void run() throws Exception {
+				try {
+					m_rootInfo.preCommit();
+					reparse[0] = m_rootInfo.commit();
+				} finally {
+					m_rootInfo.postCommit();
+				}
+				// check reparse
+				if (reparse[0]) {
+					BindingDesignPage.handleReparse(m_bindingPage, m_javaInfoRoot);
+				}
+			}
+		});
+		// check synchronize
+		if (!reparse[0]) {
+			ExecutionUtils.runLog(new RunnableEx() {
+				public void run() throws Exception {
+					synchronizeObserves();
+				}
+			});
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/DesignPageFactory.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/DesignPageFactory.java
index 87fd7b1b5..e3b5099be 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/DesignPageFactory.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/DesignPageFactory.java
@@ -29,36 +29,36 @@
  * @coverage bindings.swing.ui
  */
 public final class DesignPageFactory implements IEditorPageFactory {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IDesignPageFactory
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void createPages(IDesignerEditor editor, List<IEditorPage> pages) {
-    if (isSwingDB(editor.getCompilationUnit())) {
-      BindingDesignPage.addPage(pages);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IDesignPageFactory
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void createPages(IDesignerEditor editor, List<IEditorPage> pages) {
+		if (isSwingDB(editor.getCompilationUnit())) {
+			BindingDesignPage.addPage(pages);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static boolean isSwingDB(ICompilationUnit compilationUnit) {
-    IJavaProject javaProject = compilationUnit.getJavaProject();
-    if (DataBindingsCodeUtils.isDBAvailable(javaProject)) {
-      try {
-        IImportDeclaration[] imports = compilationUnit.getImports();
-        for (IImportDeclaration importDeclaration : imports) {
-          String elementName = importDeclaration.getElementName();
-          if (elementName.startsWith("java.awt") || elementName.startsWith("javax.swing")) {
-            return true;
-          }
-        }
-      } catch (Throwable e) {
-      }
-    }
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static boolean isSwingDB(ICompilationUnit compilationUnit) {
+		IJavaProject javaProject = compilationUnit.getJavaProject();
+		if (DataBindingsCodeUtils.isDBAvailable(javaProject)) {
+			try {
+				IImportDeclaration[] imports = compilationUnit.getImports();
+				for (IImportDeclaration importDeclaration : imports) {
+					String elementName = importDeclaration.getElementName();
+					if (elementName.startsWith("java.awt") || elementName.startsWith("javax.swing")) {
+						return true;
+					}
+				}
+			} catch (Throwable e) {
+			}
+		}
+		return false;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/Messages.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/Messages.java
index 148eb7cec..125ed1ceb 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/Messages.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/Messages.java
@@ -3,92 +3,92 @@
 import org.eclipse.osgi.util.NLS;
 
 public class Messages extends NLS {
-  private static final String BUNDLE_NAME = "org.eclipse.wb.internal.swing.databinding.messages"; //$NON-NLS-1$
-  public static String AutomaticDatabindingWizard_bindPageMessage;
-  public static String AutomaticDatabindingWizard_bindPageTitle;
-  public static String AutomaticDatabindingWizard_javaPageMessage;
-  public static String AutomaticDatabindingWizard_javaPageTitle;
-  public static String AutomaticDatabindingWizard_title;
-  public static String BeansObserveTypeContainer_errArgumentNotFound;
-  public static String BindingInfo_converterError;
-  public static String BindingInfo_converterErrorPrefix;
-  public static String BindingInfo_converterLabel;
-  public static String BindingInfo_converterNotFound;
-  public static String BindingInfo_listenerMessage;
-  public static String BindingInfo_listenerTitle;
-  public static String BindingInfo_model;
-  public static String BindingInfo_target;
-  public static String BindingInfo_undefinedField;
-  public static String BindingInfo_validatorError;
-  public static String BindingInfo_validatorErrorPrefix;
-  public static String BindingInfo_validatorLabel;
-  public static String BindingInfo_validatorNotFound;
-  public static String BindingNameUiContentProvider_label;
-  public static String ChooseClassAndPropertiesUiContentProvider_title;
-  public static String ColumnBindingInfo_chooseError;
-  public static String ColumnBindingInfo_chooseErrorPrefix;
-  public static String ColumnBindingInfo_chooseTitle;
-  public static String ColumnBindingInfo_componentLabel;
-  public static String ColumnBindingInfo_listenerMessage;
-  public static String ColumnBindingInfo_listenerTitle;
-  public static String ColumnBindingInfo_modelLabel;
-  public static String ColumnBindingUiContentProvider_elExpression;
-  public static String ColumnBindingUiContentProvider_erorrMessage;
-  public static String ColumnBindingUiContentProvider_properties;
-  public static String ColumnNameUiContentProvider_label;
-  public static String DatabindingsProvider_allTypes;
-  public static String DatabindingsProvider_bindingColumnText;
-  public static String DatabindingsProvider_modelColumnText;
-  public static String DatabindingsProvider_strategyColumnText;
-  public static String DatabindingsProvider_targetColumnText;
-  public static String DataBindingsRootInfo_errArgumentNotFound;
-  public static String DataBindingsRootInfo_errModelArgumentNotFound;
-  public static String DataBindingsRootInfo_errModelProperty2NotFound;
-  public static String DataBindingsRootInfo_errModelPropertyArgumentNotFound;
-  public static String DataBindingsRootInfo_errTargetArgumentNotFound;
-  public static String DataBindingsRootInfo_errTargetProperty2NotFound;
-  public static String DataBindingsRootInfo_errTargetPropertyArgumentNotFound;
-  public static String DetailBindingInfo_chooseError;
-  public static String DetailBindingInfo_chooseErrorPrefix;
-  public static String DetailBindingInfo_chooseLabel;
-  public static String DetailBindingInfo_choosePropertiesError;
-  public static String DetailBindingInfo_choosePropertiesLabel;
-  public static String DetailBindingInfo_component;
-  public static String DetailBindingInfo_listenerMessage;
-  public static String DetailBindingInfo_listenerTitle;
-  public static String DetailBindingInfo_model;
-  public static String EditableUiContentProvider_title;
-  public static String ElPropertyUiContentProvider_0;
-  public static String ElPropertyUiContentProvider_errEmpty;
-  public static String EvalutionLanguageConfiguration_contentAssistMessage;
-  public static String HideAdvancedPropertyFilter_title;
-  public static String JListDetailContainerUiContentProvider_detail;
-  public static String JListDetailContainerUiContentProvider_detail1;
-  public static String JListDetailContainerUiContentProvider_detail2;
-  public static String JListSelfObserveProperty_errNotFound;
-  public static String JTableBindingInfo_newColumn;
-  public static String JTableBindingInfo_tabMessage;
-  public static String JTableBindingInfo_tabTitle;
-  public static String JTableColumnContainerUiContentProvider_column;
-  public static String JTableColumnContainerUiContentProvider_columnIndex;
-  public static String JTableSelfObserveProperty_errNotFound;
-  public static String ShowAdvancedPropertyFilter_title;
-  public static String UpdateStrategyInfo_errUndefined;
-  public static String UpdateStrategyUiContentProvider_label;
-  public static String VirtualBindingInfo_chooseError;
-  public static String VirtualBindingInfo_chooseErrorPrefix;
-  public static String VirtualBindingInfo_chooseTitle;
-  public static String VirtualBindingInfo_listenerMessage;
-  public static String VirtualBindingInfo_listenerTitle;
-  public static String VirtualBindingInfo_model;
-  public static String VirtualBindingInfo_target;
-  public static String VirtualParser_errUndefinedSwingObject;
-  public static String VirtualParser_errUnknownElementClass;
-  static {
-    // initialize resource bundle
-    NLS.initializeMessages(BUNDLE_NAME, Messages.class);
-  }
+	private static final String BUNDLE_NAME = "org.eclipse.wb.internal.swing.databinding.messages"; //$NON-NLS-1$
+	public static String AutomaticDatabindingWizard_bindPageMessage;
+	public static String AutomaticDatabindingWizard_bindPageTitle;
+	public static String AutomaticDatabindingWizard_javaPageMessage;
+	public static String AutomaticDatabindingWizard_javaPageTitle;
+	public static String AutomaticDatabindingWizard_title;
+	public static String BeansObserveTypeContainer_errArgumentNotFound;
+	public static String BindingInfo_converterError;
+	public static String BindingInfo_converterErrorPrefix;
+	public static String BindingInfo_converterLabel;
+	public static String BindingInfo_converterNotFound;
+	public static String BindingInfo_listenerMessage;
+	public static String BindingInfo_listenerTitle;
+	public static String BindingInfo_model;
+	public static String BindingInfo_target;
+	public static String BindingInfo_undefinedField;
+	public static String BindingInfo_validatorError;
+	public static String BindingInfo_validatorErrorPrefix;
+	public static String BindingInfo_validatorLabel;
+	public static String BindingInfo_validatorNotFound;
+	public static String BindingNameUiContentProvider_label;
+	public static String ChooseClassAndPropertiesUiContentProvider_title;
+	public static String ColumnBindingInfo_chooseError;
+	public static String ColumnBindingInfo_chooseErrorPrefix;
+	public static String ColumnBindingInfo_chooseTitle;
+	public static String ColumnBindingInfo_componentLabel;
+	public static String ColumnBindingInfo_listenerMessage;
+	public static String ColumnBindingInfo_listenerTitle;
+	public static String ColumnBindingInfo_modelLabel;
+	public static String ColumnBindingUiContentProvider_elExpression;
+	public static String ColumnBindingUiContentProvider_erorrMessage;
+	public static String ColumnBindingUiContentProvider_properties;
+	public static String ColumnNameUiContentProvider_label;
+	public static String DatabindingsProvider_allTypes;
+	public static String DatabindingsProvider_bindingColumnText;
+	public static String DatabindingsProvider_modelColumnText;
+	public static String DatabindingsProvider_strategyColumnText;
+	public static String DatabindingsProvider_targetColumnText;
+	public static String DataBindingsRootInfo_errArgumentNotFound;
+	public static String DataBindingsRootInfo_errModelArgumentNotFound;
+	public static String DataBindingsRootInfo_errModelProperty2NotFound;
+	public static String DataBindingsRootInfo_errModelPropertyArgumentNotFound;
+	public static String DataBindingsRootInfo_errTargetArgumentNotFound;
+	public static String DataBindingsRootInfo_errTargetProperty2NotFound;
+	public static String DataBindingsRootInfo_errTargetPropertyArgumentNotFound;
+	public static String DetailBindingInfo_chooseError;
+	public static String DetailBindingInfo_chooseErrorPrefix;
+	public static String DetailBindingInfo_chooseLabel;
+	public static String DetailBindingInfo_choosePropertiesError;
+	public static String DetailBindingInfo_choosePropertiesLabel;
+	public static String DetailBindingInfo_component;
+	public static String DetailBindingInfo_listenerMessage;
+	public static String DetailBindingInfo_listenerTitle;
+	public static String DetailBindingInfo_model;
+	public static String EditableUiContentProvider_title;
+	public static String ElPropertyUiContentProvider_0;
+	public static String ElPropertyUiContentProvider_errEmpty;
+	public static String EvalutionLanguageConfiguration_contentAssistMessage;
+	public static String HideAdvancedPropertyFilter_title;
+	public static String JListDetailContainerUiContentProvider_detail;
+	public static String JListDetailContainerUiContentProvider_detail1;
+	public static String JListDetailContainerUiContentProvider_detail2;
+	public static String JListSelfObserveProperty_errNotFound;
+	public static String JTableBindingInfo_newColumn;
+	public static String JTableBindingInfo_tabMessage;
+	public static String JTableBindingInfo_tabTitle;
+	public static String JTableColumnContainerUiContentProvider_column;
+	public static String JTableColumnContainerUiContentProvider_columnIndex;
+	public static String JTableSelfObserveProperty_errNotFound;
+	public static String ShowAdvancedPropertyFilter_title;
+	public static String UpdateStrategyInfo_errUndefined;
+	public static String UpdateStrategyUiContentProvider_label;
+	public static String VirtualBindingInfo_chooseError;
+	public static String VirtualBindingInfo_chooseErrorPrefix;
+	public static String VirtualBindingInfo_chooseTitle;
+	public static String VirtualBindingInfo_listenerMessage;
+	public static String VirtualBindingInfo_listenerTitle;
+	public static String VirtualBindingInfo_model;
+	public static String VirtualBindingInfo_target;
+	public static String VirtualParser_errUndefinedSwingObject;
+	public static String VirtualParser_errUnknownElementClass;
+	static {
+		// initialize resource bundle
+		NLS.initializeMessages(BUNDLE_NAME, Messages.class);
+	}
 
-  private Messages() {
-  }
+	private Messages() {
+	}
 }
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/SwingDatabindingFactory.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/SwingDatabindingFactory.java
index a7a8c7ff1..76ae5402d 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/SwingDatabindingFactory.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/SwingDatabindingFactory.java
@@ -24,34 +24,34 @@
  * @coverage bindings.swing.model
  */
 public final class SwingDatabindingFactory implements IDatabindingFactory {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IDatabindingFactory
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public IDatabindingsProvider createProvider(JavaInfo javaInfoRoot) throws Exception {
-    if (isSwingObject(javaInfoRoot)) {
-      DatabindingsProvider provider = new DatabindingsProvider(javaInfoRoot);
-      DatabindingParser.parse(provider);
-      provider.hookJavaInfoEvents();
-      return provider;
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IDatabindingFactory
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public IDatabindingsProvider createProvider(JavaInfo javaInfoRoot) throws Exception {
+		if (isSwingObject(javaInfoRoot)) {
+			DatabindingsProvider provider = new DatabindingsProvider(javaInfoRoot);
+			DatabindingParser.parse(provider);
+			provider.hookJavaInfoEvents();
+			return provider;
+		}
+		return null;
+	}
 
-  public AbstractUIPlugin getPlugin() {
-    return Activator.getDefault();
-  }
+	public AbstractUIPlugin getPlugin() {
+		return Activator.getDefault();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if given {@link JavaInfo} is Swing/AWT object.
-   */
-  private static boolean isSwingObject(JavaInfo javaInfoRoot) {
-    return javaInfoRoot.getDescription().getToolkit().getId() == org.eclipse.wb.internal.swing.preferences.IPreferenceConstants.TOOLKIT_ID;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if given {@link JavaInfo} is Swing/AWT object.
+	 */
+	private static boolean isSwingObject(JavaInfo javaInfoRoot) {
+		return javaInfoRoot.getDescription().getToolkit().getId() == org.eclipse.wb.internal.swing.preferences.IPreferenceConstants.TOOLKIT_ID;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/ContainerAstObjectInfo.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/ContainerAstObjectInfo.java
index 08be43304..8cf11e9c8 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/ContainerAstObjectInfo.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/ContainerAstObjectInfo.java
@@ -22,26 +22,26 @@
  * @coverage bindings.swing.model
  */
 public final class ContainerAstObjectInfo extends AstObjectInfo {
-  private final List<? extends AstObjectInfo> m_objects;
+	private final List<? extends AstObjectInfo> m_objects;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ContainerAstObjectInfo(List<? extends AstObjectInfo> objects) {
-    m_objects = objects;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ContainerAstObjectInfo(List<? extends AstObjectInfo> objects) {
+		m_objects = objects;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Visiting
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void accept(AstObjectInfoVisitor visitor) throws Exception {
-    for (AstObjectInfo object : m_objects) {
-      object.accept(visitor);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Visiting
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void accept(AstObjectInfoVisitor visitor) throws Exception {
+		for (AstObjectInfo object : m_objects) {
+			object.accept(visitor);
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/DataBindingsCodeUtils.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/DataBindingsCodeUtils.java
index f895029df..32db3d7fc 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/DataBindingsCodeUtils.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/DataBindingsCodeUtils.java
@@ -43,207 +43,207 @@
  * @coverage bindings.swing.model
  */
 public final class DataBindingsCodeUtils {
-  /**
-   * External {@link Bundle} with JSR-295 libraries.
-   */
-  private static final Bundle EXTRAS_BUNDLE;
-  static {
-    EXTRAS_BUNDLE = Platform.getBundle("org.eclipse.wb.swing.extras");
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if given {@link IJavaProject} has JSR-295 libraries.
-   */
-  public static boolean hasDBLibraries(IJavaProject javaProject) {
-    return ProjectUtils.hasType(javaProject, "org.jdesktop.beansbinding.AutoBinding");
-  }
-
-  /**
-   * @return the external {@link Bundle} providing JSR-295 libraries.
-   */
-  public static Bundle getExtrasBundle() {
-    return EXTRAS_BUNDLE;
-  }
-
-  /**
-   * @return <code>true</code> if data binding is available for given {@link IJavaProject}.
-   */
-  public static boolean isDBAvailable(IJavaProject javaProject) {
-    return hasDBLibraries(javaProject) || getExtrasBundle() != null;
-  }
-
-  /**
-   * Ensure that given {@link IJavaProject} has JSR-295 libraries.
-   */
-  public static boolean ensureDBLibraries(IJavaProject javaProject) throws Exception {
-    Bundle extrasBundle = getExtrasBundle();
-    if (!hasDBLibraries(javaProject) && extrasBundle != null) {
-      ProjectUtils.addJar(
-          javaProject,
-          extrasBundle,
-          "lib/beansbinding-1.2.1.jar",
-          "lib/beansbinding-1.2.1-src.zip");
-      return true;
-    }
-    return false;
-  }
-
-  /**
-   * @return {@link MethodDeclaration} for last {@link JavaInfo} into hierarchy.
-   */
-  public static MethodDeclaration getLastInfoDeclaration(MethodDeclaration initDataBindings,
-      JavaInfo rootJavaInfo) throws Exception {
-    LastComponentVisitor visitor = new LastComponentVisitor(initDataBindings, rootJavaInfo);
-    MethodDeclaration method = AstNodeUtils.getEnclosingMethod(visitor.getLastNode());
-    Assert.isNotNull(method);
-    return method;
-  }
-
-  /**
-   * Check add invocation <code>initDataBindings()</code> to method {@link MethodDeclaration}
-   * <code>lastInfoMethod</code>.
-   */
-  public static void ensureInvokeInitDataBindings(AstEditor editor, MethodDeclaration lastInfoMethod)
-      throws Exception {
-    // find call initDataBindings()
-    InitDataBindingsVisitor visitor = new InitDataBindingsVisitor();
-    //
-    editor.getAstUnit().accept(visitor);
-    if (visitor.isInvoke()) {
-      return;
-    }
-    //
-    visitor.reset();
-    lastInfoMethod.accept(visitor);
-    // prepare invoke source
-    String initDBInvokeSource = DataBindingsRootInfo.INIT_DATA_BINDINGS_METHOD_NAME + "();";
-    // add initDataBindings()
-    Statement windowVisibleStatement = visitor.getWindowVisibleStatement();
-    List<Statement> statements = DomGenerics.statements(lastInfoMethod.getBody());
-    StatementTarget methodTarget;
-    //
-    if (windowVisibleStatement != null) {
-      methodTarget = new StatementTarget(windowVisibleStatement, true);
-    } else if (statements.isEmpty()) {
-      methodTarget = new StatementTarget(lastInfoMethod, true);
-    } else {
-      Statement lastStatement = statements.get(statements.size() - 1);
-      methodTarget = new StatementTarget(lastStatement, lastStatement instanceof ReturnStatement);
-    }
-    //
-    editor.addStatement(initDBInvokeSource, methodTarget);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Visitors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * This visitor do find last {@link ComponentInfo} into hierarchy.
-   */
-  private static class LastComponentVisitor extends ObjectInfoVisitor {
-    private final MethodDeclaration m_initDataBindings;
-    private ASTNode m_lastNode;
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public LastComponentVisitor(MethodDeclaration initDataBindings, JavaInfo rootJavaInfo)
-        throws Exception {
-      m_initDataBindings = initDataBindings;
-      m_lastNode = rootJavaInfo.getCreationSupport().getNode();
-      rootJavaInfo.accept0(this);
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Access
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public ASTNode getLastNode() {
-      return m_lastNode;
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // ObjectInfoVisitor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public boolean visit(ObjectInfo objectInfo) throws Exception {
-      if (objectInfo instanceof ComponentInfo) {
-        ComponentInfo componentInfo = (ComponentInfo) objectInfo;
-        ASTNode node = componentInfo.getAssociation().getStatement();
-        if (node == null) {
-          if (componentInfo.getVariableSupport() instanceof LazyVariableSupport) {
-            // TODO
-          } else {
-            node = componentInfo.getCreationSupport().getNode();
-          }
-        }
-        if (node != null && AstNodeUtils.getEnclosingMethod(node) != m_initDataBindings) {
-          m_lastNode = node;
-        }
-      }
-      return true;
-    }
-  }
-  /**
-   * This visitor do find invocation <code>initDataBindings()</code> into AST.
-   */
-  private static class InitDataBindingsVisitor extends ASTVisitor {
-    private boolean m_invoke;
-    private boolean m_checkDoubleInvokeInitDB;
-    private Statement m_windowVisibleStatement;
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // ASTVisitor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public boolean visit(MethodInvocation node) {
-      String methodName = node.getName().getIdentifier();
-      if (node.arguments().isEmpty()) {
-        if ("initDataBindings".equals(methodName)) {
-          if (m_checkDoubleInvokeInitDB) {
-            Assert.isTrue(!m_invoke, "Double invoke initDataBindings()");
-          }
-          m_invoke = true;
-        } else if ("setVisible".equals(methodName)
-            && AstNodeUtils.isSuccessorOf(node.getExpression(), "java.awt.Window")) {
-          Assert.isNull(m_windowVisibleStatement, "Double invoke %window%.setVisible()");
-          m_windowVisibleStatement = AstNodeUtils.getEnclosingStatement(node);
-        }
-      }
-      return false;
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Access
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public boolean isInvoke() {
-      return m_invoke;
-    }
-
-    public Statement getWindowVisibleStatement() {
-      return m_windowVisibleStatement;
-    }
-
-    public void reset() {
-      m_invoke = false;
-      m_checkDoubleInvokeInitDB = true;
-      m_windowVisibleStatement = null;
-    }
-  }
+	/**
+	 * External {@link Bundle} with JSR-295 libraries.
+	 */
+	private static final Bundle EXTRAS_BUNDLE;
+	static {
+		EXTRAS_BUNDLE = Platform.getBundle("org.eclipse.wb.swing.extras");
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if given {@link IJavaProject} has JSR-295 libraries.
+	 */
+	public static boolean hasDBLibraries(IJavaProject javaProject) {
+		return ProjectUtils.hasType(javaProject, "org.jdesktop.beansbinding.AutoBinding");
+	}
+
+	/**
+	 * @return the external {@link Bundle} providing JSR-295 libraries.
+	 */
+	public static Bundle getExtrasBundle() {
+		return EXTRAS_BUNDLE;
+	}
+
+	/**
+	 * @return <code>true</code> if data binding is available for given {@link IJavaProject}.
+	 */
+	public static boolean isDBAvailable(IJavaProject javaProject) {
+		return hasDBLibraries(javaProject) || getExtrasBundle() != null;
+	}
+
+	/**
+	 * Ensure that given {@link IJavaProject} has JSR-295 libraries.
+	 */
+	public static boolean ensureDBLibraries(IJavaProject javaProject) throws Exception {
+		Bundle extrasBundle = getExtrasBundle();
+		if (!hasDBLibraries(javaProject) && extrasBundle != null) {
+			ProjectUtils.addJar(
+					javaProject,
+					extrasBundle,
+					"lib/beansbinding-1.2.1.jar",
+					"lib/beansbinding-1.2.1-src.zip");
+			return true;
+		}
+		return false;
+	}
+
+	/**
+	 * @return {@link MethodDeclaration} for last {@link JavaInfo} into hierarchy.
+	 */
+	public static MethodDeclaration getLastInfoDeclaration(MethodDeclaration initDataBindings,
+			JavaInfo rootJavaInfo) throws Exception {
+		LastComponentVisitor visitor = new LastComponentVisitor(initDataBindings, rootJavaInfo);
+		MethodDeclaration method = AstNodeUtils.getEnclosingMethod(visitor.getLastNode());
+		Assert.isNotNull(method);
+		return method;
+	}
+
+	/**
+	 * Check add invocation <code>initDataBindings()</code> to method {@link MethodDeclaration}
+	 * <code>lastInfoMethod</code>.
+	 */
+	public static void ensureInvokeInitDataBindings(AstEditor editor, MethodDeclaration lastInfoMethod)
+			throws Exception {
+		// find call initDataBindings()
+		InitDataBindingsVisitor visitor = new InitDataBindingsVisitor();
+		//
+		editor.getAstUnit().accept(visitor);
+		if (visitor.isInvoke()) {
+			return;
+		}
+		//
+		visitor.reset();
+		lastInfoMethod.accept(visitor);
+		// prepare invoke source
+		String initDBInvokeSource = DataBindingsRootInfo.INIT_DATA_BINDINGS_METHOD_NAME + "();";
+		// add initDataBindings()
+		Statement windowVisibleStatement = visitor.getWindowVisibleStatement();
+		List<Statement> statements = DomGenerics.statements(lastInfoMethod.getBody());
+		StatementTarget methodTarget;
+		//
+		if (windowVisibleStatement != null) {
+			methodTarget = new StatementTarget(windowVisibleStatement, true);
+		} else if (statements.isEmpty()) {
+			methodTarget = new StatementTarget(lastInfoMethod, true);
+		} else {
+			Statement lastStatement = statements.get(statements.size() - 1);
+			methodTarget = new StatementTarget(lastStatement, lastStatement instanceof ReturnStatement);
+		}
+		//
+		editor.addStatement(initDBInvokeSource, methodTarget);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Visitors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * This visitor do find last {@link ComponentInfo} into hierarchy.
+	 */
+	private static class LastComponentVisitor extends ObjectInfoVisitor {
+		private final MethodDeclaration m_initDataBindings;
+		private ASTNode m_lastNode;
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public LastComponentVisitor(MethodDeclaration initDataBindings, JavaInfo rootJavaInfo)
+				throws Exception {
+			m_initDataBindings = initDataBindings;
+			m_lastNode = rootJavaInfo.getCreationSupport().getNode();
+			rootJavaInfo.accept0(this);
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Access
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public ASTNode getLastNode() {
+			return m_lastNode;
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// ObjectInfoVisitor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public boolean visit(ObjectInfo objectInfo) throws Exception {
+			if (objectInfo instanceof ComponentInfo) {
+				ComponentInfo componentInfo = (ComponentInfo) objectInfo;
+				ASTNode node = componentInfo.getAssociation().getStatement();
+				if (node == null) {
+					if (componentInfo.getVariableSupport() instanceof LazyVariableSupport) {
+						// TODO
+					} else {
+						node = componentInfo.getCreationSupport().getNode();
+					}
+				}
+				if (node != null && AstNodeUtils.getEnclosingMethod(node) != m_initDataBindings) {
+					m_lastNode = node;
+				}
+			}
+			return true;
+		}
+	}
+	/**
+	 * This visitor do find invocation <code>initDataBindings()</code> into AST.
+	 */
+	private static class InitDataBindingsVisitor extends ASTVisitor {
+		private boolean m_invoke;
+		private boolean m_checkDoubleInvokeInitDB;
+		private Statement m_windowVisibleStatement;
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// ASTVisitor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public boolean visit(MethodInvocation node) {
+			String methodName = node.getName().getIdentifier();
+			if (node.arguments().isEmpty()) {
+				if ("initDataBindings".equals(methodName)) {
+					if (m_checkDoubleInvokeInitDB) {
+						Assert.isTrue(!m_invoke, "Double invoke initDataBindings()");
+					}
+					m_invoke = true;
+				} else if ("setVisible".equals(methodName)
+						&& AstNodeUtils.isSuccessorOf(node.getExpression(), "java.awt.Window")) {
+					Assert.isNull(m_windowVisibleStatement, "Double invoke %window%.setVisible()");
+					m_windowVisibleStatement = AstNodeUtils.getEnclosingStatement(node);
+				}
+			}
+			return false;
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Access
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public boolean isInvoke() {
+			return m_invoke;
+		}
+
+		public Statement getWindowVisibleStatement() {
+			return m_windowVisibleStatement;
+		}
+
+		public void reset() {
+			m_invoke = false;
+			m_checkDoubleInvokeInitDB = true;
+			m_windowVisibleStatement = null;
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/DataBindingsRootInfo.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/DataBindingsRootInfo.java
index 275790167..56e884649 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/DataBindingsRootInfo.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/DataBindingsRootInfo.java
@@ -70,637 +70,637 @@
  * @coverage bindings.swing.model
  */
 public final class DataBindingsRootInfo implements ISubParser {
-  public static final String INIT_DATA_BINDINGS_METHOD_NAME = "initDataBindings";
-  public static final String[] ACCESS_VALUES = {"public ", "protected ", "private ", ""};
-  private static final String BINDINGS_CREATE_AUTO_BINDING =
-      "org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy,";
-  private static final String SWING_BINDINGS_CREATE_JLIST_BINDING =
-      "org.jdesktop.swingbinding.SwingBindings.createJListBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy,";
-  private static final String SWING_BINDINGS_CREATE_JTABLE_BINDING =
-      "org.jdesktop.swingbinding.SwingBindings.createJTableBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy,";
-  private static final String SWING_BINDINGS_CREATE_JCOMBO_BOX_BINDING =
-      "org.jdesktop.swingbinding.SwingBindings.createJComboBoxBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy,";
-  private static final String CONSTRUCTOR_SIGNATURE =
-      "<init>(org.eclipse.wb.internal.swing.databinding.model.bindings.UpdateStrategyInfo,org.eclipse.wb.internal.swing.databinding.model.ObserveInfo,org.eclipse.wb.internal.swing.databinding.model.ObserveInfo,org.eclipse.wb.internal.swing.databinding.model.properties.PropertyInfo,org.eclipse.wb.internal.swing.databinding.model.ObserveInfo,org.eclipse.wb.internal.swing.databinding.model.ObserveInfo,org.eclipse.wb.internal.swing.databinding.model.properties.PropertyInfo)";
-  private static Constructor<JListBindingInfo> m_constructorJList;
-  private static Constructor<JTableBindingInfo> m_constructorJTable;
-  private static Constructor<JComboBoxBindingInfo> m_constructorJComboBox;
-  private final DatabindingsProvider m_provider;
-  private final List<BindingInfo> m_bindings = Lists.newArrayList();
-  private MethodDeclaration m_initDataBindings;
-  private boolean m_addToGroup;
-  private boolean m_addInitializeContext;
-  private boolean m_addPostInitializeContext;
+	public static final String INIT_DATA_BINDINGS_METHOD_NAME = "initDataBindings";
+	public static final String[] ACCESS_VALUES = {"public ", "protected ", "private ", ""};
+	private static final String BINDINGS_CREATE_AUTO_BINDING =
+			"org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy,";
+	private static final String SWING_BINDINGS_CREATE_JLIST_BINDING =
+			"org.jdesktop.swingbinding.SwingBindings.createJListBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy,";
+	private static final String SWING_BINDINGS_CREATE_JTABLE_BINDING =
+			"org.jdesktop.swingbinding.SwingBindings.createJTableBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy,";
+	private static final String SWING_BINDINGS_CREATE_JCOMBO_BOX_BINDING =
+			"org.jdesktop.swingbinding.SwingBindings.createJComboBoxBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy,";
+	private static final String CONSTRUCTOR_SIGNATURE =
+			"<init>(org.eclipse.wb.internal.swing.databinding.model.bindings.UpdateStrategyInfo,org.eclipse.wb.internal.swing.databinding.model.ObserveInfo,org.eclipse.wb.internal.swing.databinding.model.ObserveInfo,org.eclipse.wb.internal.swing.databinding.model.properties.PropertyInfo,org.eclipse.wb.internal.swing.databinding.model.ObserveInfo,org.eclipse.wb.internal.swing.databinding.model.ObserveInfo,org.eclipse.wb.internal.swing.databinding.model.properties.PropertyInfo)";
+	private static Constructor<JListBindingInfo> m_constructorJList;
+	private static Constructor<JTableBindingInfo> m_constructorJTable;
+	private static Constructor<JComboBoxBindingInfo> m_constructorJComboBox;
+	private final DatabindingsProvider m_provider;
+	private final List<BindingInfo> m_bindings = Lists.newArrayList();
+	private MethodDeclaration m_initDataBindings;
+	private boolean m_addToGroup;
+	private boolean m_addInitializeContext;
+	private boolean m_addPostInitializeContext;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DataBindingsRootInfo(DatabindingsProvider provider) {
-    m_provider = provider;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DataBindingsRootInfo(DatabindingsProvider provider) {
+		m_provider = provider;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public List<BindingInfo> getBindings() {
-    return m_bindings;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public List<BindingInfo> getBindings() {
+		return m_bindings;
+	}
 
-  public MethodDeclaration getInitDataBindings() {
-    return m_initDataBindings;
-  }
+	public MethodDeclaration getInitDataBindings() {
+		return m_initDataBindings;
+	}
 
-  public void setInitDataBindings(MethodDeclaration initDataBindings) {
-    m_initDataBindings = initDataBindings;
-    IMethodBinding methodBinding = AstNodeUtils.getMethodBinding(m_initDataBindings);
-    ITypeBinding returnType = methodBinding == null ? null : methodBinding.getReturnType();
-    m_addToGroup =
-        returnType != null
-            && "org.jdesktop.beansbinding.BindingGroup".equals(AstNodeUtils.getFullyQualifiedName(
-                returnType,
-                false));
-  }
+	public void setInitDataBindings(MethodDeclaration initDataBindings) {
+		m_initDataBindings = initDataBindings;
+		IMethodBinding methodBinding = AstNodeUtils.getMethodBinding(m_initDataBindings);
+		ITypeBinding returnType = methodBinding == null ? null : methodBinding.getReturnType();
+		m_addToGroup =
+				returnType != null
+				&& "org.jdesktop.beansbinding.BindingGroup".equals(AstNodeUtils.getFullyQualifiedName(
+						returnType,
+						false));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parser
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AstObjectInfo parseExpression(AstEditor editor,
-      String signature,
-      ClassInstanceCreation creation,
-      Expression[] arguments,
-      IModelResolver resolver,
-      IDatabindingsProvider provider) throws Exception {
-    ITypeBinding binding = AstNodeUtils.getTypeBinding(creation);
-    if (binding == null) {
-      return null;
-    }
-    // binding converter/validator
-    if (AstNodeUtils.isSuccessorOf(binding, "org.jdesktop.beansbinding.Converter")
-        || AstNodeUtils.isSuccessorOf(binding, "org.jdesktop.beansbinding.Validator")) {
-      String parameters = null;
-      if (arguments.length > 0) {
-        String source = editor.getSource(creation);
-        parameters = source.substring(source.indexOf('('));
-      }
-      return new TypeObjectInfo(GenericUtils.getCreationType(editor, creation), parameters);
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parser
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AstObjectInfo parseExpression(AstEditor editor,
+			String signature,
+			ClassInstanceCreation creation,
+			Expression[] arguments,
+			IModelResolver resolver,
+			IDatabindingsProvider provider) throws Exception {
+		ITypeBinding binding = AstNodeUtils.getTypeBinding(creation);
+		if (binding == null) {
+			return null;
+		}
+		// binding converter/validator
+		if (AstNodeUtils.isSuccessorOf(binding, "org.jdesktop.beansbinding.Converter")
+				|| AstNodeUtils.isSuccessorOf(binding, "org.jdesktop.beansbinding.Validator")) {
+			String parameters = null;
+			if (arguments.length > 0) {
+				String source = editor.getSource(creation);
+				parameters = source.substring(source.indexOf('('));
+			}
+			return new TypeObjectInfo(GenericUtils.getCreationType(editor, creation), parameters);
+		}
+		return null;
+	}
 
-  public AstObjectInfo parseExpression(AstEditor editor,
-      String signature,
-      MethodInvocation invocation,
-      Expression[] arguments,
-      IModelResolver resolver) throws Exception {
-    if (m_constructorJList == null) {
-      // prepare constructors for swing bindings
-      m_constructorJList =
-          ReflectionUtils.getConstructorBySignature(JListBindingInfo.class, CONSTRUCTOR_SIGNATURE);
-      m_constructorJTable =
-          ReflectionUtils.getConstructorBySignature(JTableBindingInfo.class, CONSTRUCTOR_SIGNATURE);
-      m_constructorJComboBox =
-          ReflectionUtils.getConstructorBySignature(
-              JComboBoxBindingInfo.class,
-              CONSTRUCTOR_SIGNATURE);
-    }
-    if (signature.startsWith(BINDINGS_CREATE_AUTO_BINDING)) {
-      // Bindings.createAutoBinding(AutoBinding.UpdateStrategy, ...)
-      switch (arguments.length) {
-        case 4 :
-          return createAutoBindingForObjectToProperty(
-              editor,
-              signature,
-              invocation,
-              arguments,
-              resolver);
-        case 5 :
-          if (signature.endsWith(",java.lang.String)")) {
-            return createAutoBindingForObjectToProperty(
-                editor,
-                signature,
-                invocation,
-                arguments,
-                resolver);
-          }
-        case 6 :
-          return createAutoBindingForProperties(editor, signature, invocation, arguments, resolver);
-      }
-    } else if (signature.startsWith(SWING_BINDINGS_CREATE_JLIST_BINDING)) {
-      // SwingBindings.createJListBinding(AutoBinding.UpdateStrategy, ...)
-      if (signature.endsWith(",java.util.List,javax.swing.JList)")
-          || signature.endsWith(",java.util.List,javax.swing.JList,java.lang.String)")) {
-        return createBindingForListToJComponent(
-            editor,
-            signature,
-            invocation,
-            arguments,
-            resolver,
-            m_constructorJList);
-      }
-      if (signature.endsWith(",org.jdesktop.beansbinding.Property,javax.swing.JList)")
-          || signature.endsWith(",org.jdesktop.beansbinding.Property,javax.swing.JList,java.lang.String)")) {
-        return createBindingForListPropertyToJComponent(
-            editor,
-            signature,
-            invocation,
-            arguments,
-            resolver,
-            m_constructorJList);
-      }
-    } else if (signature.startsWith(SWING_BINDINGS_CREATE_JTABLE_BINDING)) {
-      // SwingBindings.createJTableBinding(AutoBinding.UpdateStrategy, ...)
-      if (signature.endsWith(",java.util.List,javax.swing.JTable)")
-          || signature.endsWith(",java.util.List,javax.swing.JTable,java.lang.String)")) {
-        return createBindingForListToJComponent(
-            editor,
-            signature,
-            invocation,
-            arguments,
-            resolver,
-            m_constructorJTable);
-      }
-      if (signature.endsWith(",org.jdesktop.beansbinding.Property,javax.swing.JTable)")
-          || signature.endsWith(",org.jdesktop.beansbinding.Property,javax.swing.JTable,java.lang.String)")) {
-        return createBindingForListPropertyToJComponent(
-            editor,
-            signature,
-            invocation,
-            arguments,
-            resolver,
-            m_constructorJTable);
-      }
-    } else if (signature.startsWith(SWING_BINDINGS_CREATE_JCOMBO_BOX_BINDING)) {
-      // SwingBindings.createJComboBoxBinding(AutoBinding.UpdateStrategy, ...)
-      if (signature.endsWith(",java.util.List,javax.swing.JComboBox)")
-          || signature.endsWith(",java.util.List,javax.swing.JComboBox,java.lang.String)")) {
-        return createBindingForListToJComponent(
-            editor,
-            signature,
-            invocation,
-            arguments,
-            resolver,
-            m_constructorJComboBox);
-      }
-      if (signature.endsWith(",org.jdesktop.beansbinding.Property,javax.swing.JComboBox)")
-          || signature.endsWith(",org.jdesktop.beansbinding.Property,javax.swing.JComboBox,java.lang.String)")) {
-        return createBindingForListPropertyToJComponent(
-            editor,
-            signature,
-            invocation,
-            arguments,
-            resolver,
-            m_constructorJComboBox);
-      }
-    } else if (signature.endsWith("initializeBindings()")) {
-      m_addInitializeContext = true;
-    } else if (signature.endsWith("postInitializeBindings()")) {
-      m_addPostInitializeContext = true;
-    }
-    return null;
-  }
+	public AstObjectInfo parseExpression(AstEditor editor,
+			String signature,
+			MethodInvocation invocation,
+			Expression[] arguments,
+			IModelResolver resolver) throws Exception {
+		if (m_constructorJList == null) {
+			// prepare constructors for swing bindings
+			m_constructorJList =
+					ReflectionUtils.getConstructorBySignature(JListBindingInfo.class, CONSTRUCTOR_SIGNATURE);
+			m_constructorJTable =
+					ReflectionUtils.getConstructorBySignature(JTableBindingInfo.class, CONSTRUCTOR_SIGNATURE);
+			m_constructorJComboBox =
+					ReflectionUtils.getConstructorBySignature(
+							JComboBoxBindingInfo.class,
+							CONSTRUCTOR_SIGNATURE);
+		}
+		if (signature.startsWith(BINDINGS_CREATE_AUTO_BINDING)) {
+			// Bindings.createAutoBinding(AutoBinding.UpdateStrategy, ...)
+			switch (arguments.length) {
+			case 4 :
+				return createAutoBindingForObjectToProperty(
+						editor,
+						signature,
+						invocation,
+						arguments,
+						resolver);
+			case 5 :
+				if (signature.endsWith(",java.lang.String)")) {
+					return createAutoBindingForObjectToProperty(
+							editor,
+							signature,
+							invocation,
+							arguments,
+							resolver);
+				}
+			case 6 :
+				return createAutoBindingForProperties(editor, signature, invocation, arguments, resolver);
+			}
+		} else if (signature.startsWith(SWING_BINDINGS_CREATE_JLIST_BINDING)) {
+			// SwingBindings.createJListBinding(AutoBinding.UpdateStrategy, ...)
+			if (signature.endsWith(",java.util.List,javax.swing.JList)")
+					|| signature.endsWith(",java.util.List,javax.swing.JList,java.lang.String)")) {
+				return createBindingForListToJComponent(
+						editor,
+						signature,
+						invocation,
+						arguments,
+						resolver,
+						m_constructorJList);
+			}
+			if (signature.endsWith(",org.jdesktop.beansbinding.Property,javax.swing.JList)")
+					|| signature.endsWith(",org.jdesktop.beansbinding.Property,javax.swing.JList,java.lang.String)")) {
+				return createBindingForListPropertyToJComponent(
+						editor,
+						signature,
+						invocation,
+						arguments,
+						resolver,
+						m_constructorJList);
+			}
+		} else if (signature.startsWith(SWING_BINDINGS_CREATE_JTABLE_BINDING)) {
+			// SwingBindings.createJTableBinding(AutoBinding.UpdateStrategy, ...)
+			if (signature.endsWith(",java.util.List,javax.swing.JTable)")
+					|| signature.endsWith(",java.util.List,javax.swing.JTable,java.lang.String)")) {
+				return createBindingForListToJComponent(
+						editor,
+						signature,
+						invocation,
+						arguments,
+						resolver,
+						m_constructorJTable);
+			}
+			if (signature.endsWith(",org.jdesktop.beansbinding.Property,javax.swing.JTable)")
+					|| signature.endsWith(",org.jdesktop.beansbinding.Property,javax.swing.JTable,java.lang.String)")) {
+				return createBindingForListPropertyToJComponent(
+						editor,
+						signature,
+						invocation,
+						arguments,
+						resolver,
+						m_constructorJTable);
+			}
+		} else if (signature.startsWith(SWING_BINDINGS_CREATE_JCOMBO_BOX_BINDING)) {
+			// SwingBindings.createJComboBoxBinding(AutoBinding.UpdateStrategy, ...)
+			if (signature.endsWith(",java.util.List,javax.swing.JComboBox)")
+					|| signature.endsWith(",java.util.List,javax.swing.JComboBox,java.lang.String)")) {
+				return createBindingForListToJComponent(
+						editor,
+						signature,
+						invocation,
+						arguments,
+						resolver,
+						m_constructorJComboBox);
+			}
+			if (signature.endsWith(",org.jdesktop.beansbinding.Property,javax.swing.JComboBox)")
+					|| signature.endsWith(",org.jdesktop.beansbinding.Property,javax.swing.JComboBox,java.lang.String)")) {
+				return createBindingForListPropertyToJComponent(
+						editor,
+						signature,
+						invocation,
+						arguments,
+						resolver,
+						m_constructorJComboBox);
+			}
+		} else if (signature.endsWith("initializeBindings()")) {
+			m_addInitializeContext = true;
+		} else if (signature.endsWith("postInitializeBindings()")) {
+			m_addPostInitializeContext = true;
+		}
+		return null;
+	}
 
-  private BindingInfo addBinding(AstEditor editor,
-      String signature,
-      Expression[] arguments,
-      BindingInfo binding) throws Exception {
-    if (signature.endsWith(",java.lang.String)")) {
-      String name = CoreUtils.evaluate(String.class, editor, arguments[arguments.length - 1]);
-      binding.setName(StringEscapeUtils.unescapeJava(name));
-    }
-    binding.preCreate();
-    m_bindings.add(binding);
-    return binding;
-  }
+	private BindingInfo addBinding(AstEditor editor,
+			String signature,
+			Expression[] arguments,
+			BindingInfo binding) throws Exception {
+		if (signature.endsWith(",java.lang.String)")) {
+			String name = CoreUtils.evaluate(String.class, editor, arguments[arguments.length - 1]);
+			binding.setName(StringEscapeUtils.unescapeJava(name));
+		}
+		binding.preCreate();
+		m_bindings.add(binding);
+		return binding;
+	}
 
-  /**
-   * Bindings.createAutoBinding(UpdateStrategy, SS, TS, Property<TS, TV>, [String])
-   */
-  private BindingInfo createAutoBindingForObjectToProperty(AstEditor editor,
-      String signature,
-      MethodInvocation invocation,
-      Expression[] arguments,
-      IModelResolver resolver) throws Exception {
-    // strategy
-    UpdateStrategyInfo strategyInfo = createStrategy(arguments[0]);
-    // model object
-    ObserveInfo model = getObserveInfo(arguments[1]);
-    if (model == null) {
-      AbstractParser.addError(
-          editor,
-          MessageFormat.format(Messages.DataBindingsRootInfo_errModelArgumentNotFound, arguments[1]),
-          new Throwable());
-      return null;
-    }
-    // model properties
-    IGenericType[] types = GenericUtils.getReturnTypeArguments(editor, invocation, 3);
-    PropertyInfo modelAstProperty = new ObjectPropertyInfo(types[0]);
-    ObserveInfo modelProperty = modelAstProperty.getObserveProperty(model);
-    Assert.isNotNull(modelProperty);
-    assertEquals(modelProperty, modelAstProperty);
-    // target object
-    ObserveInfo target = getObserveInfo(arguments[2]);
-    if (target == null) {
-      AbstractParser.addError(editor, MessageFormat.format(
-          Messages.DataBindingsRootInfo_errTargetArgumentNotFound,
-          arguments[2]), new Throwable());
-      return null;
-    }
-    // target AST property
-    PropertyInfo targetAstProperty = (PropertyInfo) resolver.getModel(arguments[3]);
-    if (targetAstProperty == null) {
-      AbstractParser.addError(editor, MessageFormat.format(
-          Messages.DataBindingsRootInfo_errTargetPropertyArgumentNotFound,
-          arguments[3]), new Throwable());
-      return null;
-    }
-    // target property
-    ObserveInfo targetProperty = targetAstProperty.getObserveProperty(target);
-    if (targetProperty == null) {
-      AbstractParser.addError(editor, MessageFormat.format(
-          Messages.DataBindingsRootInfo_errTargetProperty2NotFound,
-          arguments[2],
-          arguments[3]), new Throwable());
-      targetProperty = createDefaultProperty(targetAstProperty);
-    } else {
-      assertObserves(types, 1, target, targetAstProperty, targetProperty);
-    }
-    // binding
-    return addBinding(editor, signature, arguments, new AutoBindingInfo(strategyInfo,
-        target,
-        targetProperty,
-        targetAstProperty,
-        model,
-        modelProperty,
-        modelAstProperty));
-  }
+	/**
+	 * Bindings.createAutoBinding(UpdateStrategy, SS, TS, Property<TS, TV>, [String])
+	 */
+	private BindingInfo createAutoBindingForObjectToProperty(AstEditor editor,
+			String signature,
+			MethodInvocation invocation,
+			Expression[] arguments,
+			IModelResolver resolver) throws Exception {
+		// strategy
+		UpdateStrategyInfo strategyInfo = createStrategy(arguments[0]);
+		// model object
+		ObserveInfo model = getObserveInfo(arguments[1]);
+		if (model == null) {
+			AbstractParser.addError(
+					editor,
+					MessageFormat.format(Messages.DataBindingsRootInfo_errModelArgumentNotFound, arguments[1]),
+					new Throwable());
+			return null;
+		}
+		// model properties
+		IGenericType[] types = GenericUtils.getReturnTypeArguments(editor, invocation, 3);
+		PropertyInfo modelAstProperty = new ObjectPropertyInfo(types[0]);
+		ObserveInfo modelProperty = modelAstProperty.getObserveProperty(model);
+		Assert.isNotNull(modelProperty);
+		assertEquals(modelProperty, modelAstProperty);
+		// target object
+		ObserveInfo target = getObserveInfo(arguments[2]);
+		if (target == null) {
+			AbstractParser.addError(editor, MessageFormat.format(
+					Messages.DataBindingsRootInfo_errTargetArgumentNotFound,
+					arguments[2]), new Throwable());
+			return null;
+		}
+		// target AST property
+		PropertyInfo targetAstProperty = (PropertyInfo) resolver.getModel(arguments[3]);
+		if (targetAstProperty == null) {
+			AbstractParser.addError(editor, MessageFormat.format(
+					Messages.DataBindingsRootInfo_errTargetPropertyArgumentNotFound,
+					arguments[3]), new Throwable());
+			return null;
+		}
+		// target property
+		ObserveInfo targetProperty = targetAstProperty.getObserveProperty(target);
+		if (targetProperty == null) {
+			AbstractParser.addError(editor, MessageFormat.format(
+					Messages.DataBindingsRootInfo_errTargetProperty2NotFound,
+					arguments[2],
+					arguments[3]), new Throwable());
+			targetProperty = createDefaultProperty(targetAstProperty);
+		} else {
+			assertObserves(types, 1, target, targetAstProperty, targetProperty);
+		}
+		// binding
+		return addBinding(editor, signature, arguments, new AutoBindingInfo(strategyInfo,
+				target,
+				targetProperty,
+				targetAstProperty,
+				model,
+				modelProperty,
+				modelAstProperty));
+	}
 
-  /**
-   * Bindings.createAutoBinding(UpdateStrategy, SS, Property<SS, SV>, TS, Property<TS, TV>,
-   * [String])
-   */
-  private BindingInfo createAutoBindingForProperties(AstEditor editor,
-      String signature,
-      MethodInvocation invocation,
-      Expression[] arguments,
-      IModelResolver resolver) throws Exception {
-    // strategy
-    UpdateStrategyInfo strategyInfo = createStrategy(arguments[0]);
-    // model object
-    ObserveInfo model = getObserveInfo(arguments[1]);
-    if (model == null) {
-      AbstractParser.addError(
-          editor,
-          MessageFormat.format(Messages.DataBindingsRootInfo_errModelArgumentNotFound, arguments[1]),
-          new Throwable());
-      return null;
-    }
-    // model AST property
-    PropertyInfo modelAstProperty = (PropertyInfo) resolver.getModel(arguments[2]);
-    if (modelAstProperty == null) {
-      AbstractParser.addError(editor, MessageFormat.format(
-          Messages.DataBindingsRootInfo_errModelPropertyArgumentNotFound,
-          arguments[2]), new Throwable());
-      return null;
-    }
-    // model property
-    ObserveInfo modelProperty = modelAstProperty.getObserveProperty(model);
-    IGenericType[] types = GenericUtils.getReturnTypeArguments(editor, invocation, 4);
-    if (modelProperty == null) {
-      AbstractParser.addError(editor, MessageFormat.format(
-          Messages.DataBindingsRootInfo_errModelProperty2NotFound,
-          arguments[1],
-          arguments[2]), new Throwable());
-      modelProperty = createDefaultProperty(modelAstProperty);
-    } else {
-      assertObserves(types, 0, model, modelAstProperty, modelProperty);
-    }
-    // target object
-    ObserveInfo target = getObserveInfo(arguments[3]);
-    if (target == null) {
-      AbstractParser.addError(editor, MessageFormat.format(
-          Messages.DataBindingsRootInfo_errTargetArgumentNotFound,
-          arguments[3]), new Throwable());
-      return null;
-    }
-    // target AST property
-    PropertyInfo targetAstProperty = (PropertyInfo) resolver.getModel(arguments[4]);
-    if (targetAstProperty == null) {
-      AbstractParser.addError(
-          editor,
-          MessageFormat.format(Messages.DataBindingsRootInfo_errArgumentNotFound, arguments[4]),
-          new Throwable());
-      return null;
-    }
-    // target property
-    ObserveInfo targetProperty = targetAstProperty.getObserveProperty(target);
-    if (targetProperty == null) {
-      AbstractParser.addError(editor, MessageFormat.format(
-          Messages.DataBindingsRootInfo_errTargetProperty2NotFound,
-          arguments[3],
-          arguments[4]), new Throwable());
-      targetProperty = createDefaultProperty(targetAstProperty);
-    } else {
-      assertObserves(types, 2, target, targetAstProperty, targetProperty);
-    }
-    // binding
-    return addBinding(editor, signature, arguments, new AutoBindingInfo(strategyInfo,
-        target,
-        targetProperty,
-        targetAstProperty,
-        model,
-        modelProperty,
-        modelAstProperty));
-  }
+	/**
+	 * Bindings.createAutoBinding(UpdateStrategy, SS, Property<SS, SV>, TS, Property<TS, TV>,
+	 * [String])
+	 */
+	private BindingInfo createAutoBindingForProperties(AstEditor editor,
+			String signature,
+			MethodInvocation invocation,
+			Expression[] arguments,
+			IModelResolver resolver) throws Exception {
+		// strategy
+		UpdateStrategyInfo strategyInfo = createStrategy(arguments[0]);
+		// model object
+		ObserveInfo model = getObserveInfo(arguments[1]);
+		if (model == null) {
+			AbstractParser.addError(
+					editor,
+					MessageFormat.format(Messages.DataBindingsRootInfo_errModelArgumentNotFound, arguments[1]),
+					new Throwable());
+			return null;
+		}
+		// model AST property
+		PropertyInfo modelAstProperty = (PropertyInfo) resolver.getModel(arguments[2]);
+		if (modelAstProperty == null) {
+			AbstractParser.addError(editor, MessageFormat.format(
+					Messages.DataBindingsRootInfo_errModelPropertyArgumentNotFound,
+					arguments[2]), new Throwable());
+			return null;
+		}
+		// model property
+		ObserveInfo modelProperty = modelAstProperty.getObserveProperty(model);
+		IGenericType[] types = GenericUtils.getReturnTypeArguments(editor, invocation, 4);
+		if (modelProperty == null) {
+			AbstractParser.addError(editor, MessageFormat.format(
+					Messages.DataBindingsRootInfo_errModelProperty2NotFound,
+					arguments[1],
+					arguments[2]), new Throwable());
+			modelProperty = createDefaultProperty(modelAstProperty);
+		} else {
+			assertObserves(types, 0, model, modelAstProperty, modelProperty);
+		}
+		// target object
+		ObserveInfo target = getObserveInfo(arguments[3]);
+		if (target == null) {
+			AbstractParser.addError(editor, MessageFormat.format(
+					Messages.DataBindingsRootInfo_errTargetArgumentNotFound,
+					arguments[3]), new Throwable());
+			return null;
+		}
+		// target AST property
+		PropertyInfo targetAstProperty = (PropertyInfo) resolver.getModel(arguments[4]);
+		if (targetAstProperty == null) {
+			AbstractParser.addError(
+					editor,
+					MessageFormat.format(Messages.DataBindingsRootInfo_errArgumentNotFound, arguments[4]),
+					new Throwable());
+			return null;
+		}
+		// target property
+		ObserveInfo targetProperty = targetAstProperty.getObserveProperty(target);
+		if (targetProperty == null) {
+			AbstractParser.addError(editor, MessageFormat.format(
+					Messages.DataBindingsRootInfo_errTargetProperty2NotFound,
+					arguments[3],
+					arguments[4]), new Throwable());
+			targetProperty = createDefaultProperty(targetAstProperty);
+		} else {
+			assertObserves(types, 2, target, targetAstProperty, targetProperty);
+		}
+		// binding
+		return addBinding(editor, signature, arguments, new AutoBindingInfo(strategyInfo,
+				target,
+				targetProperty,
+				targetAstProperty,
+				model,
+				modelProperty,
+				modelAstProperty));
+	}
 
-  /**
-   * SwingBindings.createJListBinding(UpdateStrategy, List<E>, JList, [String])<br>
-   * SwingBindings.createJTableBinding(UpdateStrategy, List<E>, JTable, [String])<br>
-   * SwingBindings.createJComboBoxBinding(UpdateStrategy, List<E>, JComboBox, [String])
-   */
-  private BindingInfo createBindingForListToJComponent(AstEditor editor,
-      String signature,
-      MethodInvocation invocation,
-      Expression[] arguments,
-      IModelResolver resolver,
-      Constructor<? extends BindingInfo> constructor) throws Exception {
-    // strategy
-    UpdateStrategyInfo strategyInfo = createStrategy(arguments[0]);
-    // model object
-    ObserveInfo model = getBeanObserveInfo(arguments[1]);
-    if (model == null) {
-      AbstractParser.addError(
-          editor,
-          MessageFormat.format(Messages.DataBindingsRootInfo_errModelArgumentNotFound, arguments[1]),
-          new Throwable());
-      return null;
-    }
-    // model properties
-    PropertyInfo modelAstProperty = new ObjectPropertyInfo(model.getObjectType());
-    ObserveInfo modelProperty = modelAstProperty.getObserveProperty(model);
-    Assert.isNotNull(modelProperty);
-    assertEquals(modelProperty, modelAstProperty);
-    // target object
-    ObserveInfo target = getComponentObserveInfo(arguments[2]);
-    if (target == null) {
-      AbstractParser.addError(editor, MessageFormat.format(
-          Messages.DataBindingsRootInfo_errTargetArgumentNotFound,
-          arguments[2]), new Throwable());
-      return null;
-    }
-    // target properties
-    PropertyInfo targetAstProperty = new ObjectPropertyInfo(target.getObjectType());
-    ObserveInfo targetProperty = targetAstProperty.getObserveProperty(target);
-    Assert.isNotNull(targetProperty);
-    assertEquals(targetProperty, targetAstProperty);
-    // binding
-    return addBinding(editor, signature, arguments, constructor.newInstance(
-        strategyInfo,
-        target,
-        targetProperty,
-        targetAstProperty,
-        model,
-        modelProperty,
-        modelAstProperty));
-  }
+	/**
+	 * SwingBindings.createJListBinding(UpdateStrategy, List<E>, JList, [String])<br>
+	 * SwingBindings.createJTableBinding(UpdateStrategy, List<E>, JTable, [String])<br>
+	 * SwingBindings.createJComboBoxBinding(UpdateStrategy, List<E>, JComboBox, [String])
+	 */
+	private BindingInfo createBindingForListToJComponent(AstEditor editor,
+			String signature,
+			MethodInvocation invocation,
+			Expression[] arguments,
+			IModelResolver resolver,
+			Constructor<? extends BindingInfo> constructor) throws Exception {
+		// strategy
+		UpdateStrategyInfo strategyInfo = createStrategy(arguments[0]);
+		// model object
+		ObserveInfo model = getBeanObserveInfo(arguments[1]);
+		if (model == null) {
+			AbstractParser.addError(
+					editor,
+					MessageFormat.format(Messages.DataBindingsRootInfo_errModelArgumentNotFound, arguments[1]),
+					new Throwable());
+			return null;
+		}
+		// model properties
+		PropertyInfo modelAstProperty = new ObjectPropertyInfo(model.getObjectType());
+		ObserveInfo modelProperty = modelAstProperty.getObserveProperty(model);
+		Assert.isNotNull(modelProperty);
+		assertEquals(modelProperty, modelAstProperty);
+		// target object
+		ObserveInfo target = getComponentObserveInfo(arguments[2]);
+		if (target == null) {
+			AbstractParser.addError(editor, MessageFormat.format(
+					Messages.DataBindingsRootInfo_errTargetArgumentNotFound,
+					arguments[2]), new Throwable());
+			return null;
+		}
+		// target properties
+		PropertyInfo targetAstProperty = new ObjectPropertyInfo(target.getObjectType());
+		ObserveInfo targetProperty = targetAstProperty.getObserveProperty(target);
+		Assert.isNotNull(targetProperty);
+		assertEquals(targetProperty, targetAstProperty);
+		// binding
+		return addBinding(editor, signature, arguments, constructor.newInstance(
+				strategyInfo,
+				target,
+				targetProperty,
+				targetAstProperty,
+				model,
+				modelProperty,
+				modelAstProperty));
+	}
 
-  /**
-   * SwingBindings.createJListBinding(UpdateStrategy, SS, Property<SS, List<E>>, JList, [String]) <br>
-   * SwingBindings.createJTableBinding(UpdateStrategy, SS, Property<SS, List<E>>, JTable, [String])<br>
-   * SwingBindings.createJComboBoxBinding(UpdateStrategy, SS, Property<SS, List<E>>, JComboBox,
-   * [String])
-   */
-  private BindingInfo createBindingForListPropertyToJComponent(AstEditor editor,
-      String signature,
-      MethodInvocation invocation,
-      Expression[] arguments,
-      IModelResolver resolver,
-      Constructor<? extends BindingInfo> constructor) throws Exception {
-    // strategy
-    UpdateStrategyInfo strategyInfo = createStrategy(arguments[0]);
-    // model object
-    ObserveInfo model = getObserveInfo(arguments[1]);
-    if (model == null) {
-      AbstractParser.addError(
-          editor,
-          MessageFormat.format(Messages.DataBindingsRootInfo_errModelArgumentNotFound, arguments[1]),
-          new Throwable());
-      return null;
-    }
-    // model AST property
-    IGenericType[] types = GenericUtils.getReturnTypeArguments(editor, invocation, 2);
-    GenericUtils.assertEquals(model.getObjectType(), types[1]);
-    PropertyInfo modelAstProperty = (PropertyInfo) resolver.getModel(arguments[2]);
-    if (modelAstProperty == null) {
-      AbstractParser.addError(editor, MessageFormat.format(
-          Messages.DataBindingsRootInfo_errModelPropertyArgumentNotFound,
-          arguments[2]), new Throwable());
-      return null;
-    }
-    // model property
-    ObserveInfo modelProperty = modelAstProperty.getObserveProperty(model);
-    if (modelProperty == null) {
-      AbstractParser.addError(editor, MessageFormat.format(
-          Messages.DataBindingsRootInfo_errModelProperty2NotFound,
-          arguments[1],
-          arguments[2]), new Throwable());
-      modelProperty = createDefaultProperty(modelAstProperty);
-    }
-    // target object
-    ObserveInfo target = getComponentObserveInfo(arguments[3]);
-    if (target == null) {
-      AbstractParser.addError(editor, MessageFormat.format(
-          Messages.DataBindingsRootInfo_errTargetArgumentNotFound,
-          arguments[3]), new Throwable());
-      return null;
-    }
-    // target properties
-    PropertyInfo targetAstProperty = new ObjectPropertyInfo(target.getObjectType());
-    ObserveInfo targetProperty = targetAstProperty.getObserveProperty(target);
-    Assert.isNotNull(targetProperty);
-    assertEquals(targetProperty, targetAstProperty);
-    //
-    Assert.isTrue(DatabindingsProvider.isSwingBinding(model, modelProperty) != DatabindingsProvider.isSwingBinding(
-        target,
-        targetProperty));
-    // binding
-    return addBinding(editor, signature, arguments, constructor.newInstance(
-        strategyInfo,
-        target,
-        targetProperty,
-        targetAstProperty,
-        model,
-        modelProperty,
-        modelAstProperty));
-  }
+	/**
+	 * SwingBindings.createJListBinding(UpdateStrategy, SS, Property<SS, List<E>>, JList, [String]) <br>
+	 * SwingBindings.createJTableBinding(UpdateStrategy, SS, Property<SS, List<E>>, JTable, [String])<br>
+	 * SwingBindings.createJComboBoxBinding(UpdateStrategy, SS, Property<SS, List<E>>, JComboBox,
+	 * [String])
+	 */
+	private BindingInfo createBindingForListPropertyToJComponent(AstEditor editor,
+			String signature,
+			MethodInvocation invocation,
+			Expression[] arguments,
+			IModelResolver resolver,
+			Constructor<? extends BindingInfo> constructor) throws Exception {
+		// strategy
+		UpdateStrategyInfo strategyInfo = createStrategy(arguments[0]);
+		// model object
+		ObserveInfo model = getObserveInfo(arguments[1]);
+		if (model == null) {
+			AbstractParser.addError(
+					editor,
+					MessageFormat.format(Messages.DataBindingsRootInfo_errModelArgumentNotFound, arguments[1]),
+					new Throwable());
+			return null;
+		}
+		// model AST property
+		IGenericType[] types = GenericUtils.getReturnTypeArguments(editor, invocation, 2);
+		GenericUtils.assertEquals(model.getObjectType(), types[1]);
+		PropertyInfo modelAstProperty = (PropertyInfo) resolver.getModel(arguments[2]);
+		if (modelAstProperty == null) {
+			AbstractParser.addError(editor, MessageFormat.format(
+					Messages.DataBindingsRootInfo_errModelPropertyArgumentNotFound,
+					arguments[2]), new Throwable());
+			return null;
+		}
+		// model property
+		ObserveInfo modelProperty = modelAstProperty.getObserveProperty(model);
+		if (modelProperty == null) {
+			AbstractParser.addError(editor, MessageFormat.format(
+					Messages.DataBindingsRootInfo_errModelProperty2NotFound,
+					arguments[1],
+					arguments[2]), new Throwable());
+			modelProperty = createDefaultProperty(modelAstProperty);
+		}
+		// target object
+		ObserveInfo target = getComponentObserveInfo(arguments[3]);
+		if (target == null) {
+			AbstractParser.addError(editor, MessageFormat.format(
+					Messages.DataBindingsRootInfo_errTargetArgumentNotFound,
+					arguments[3]), new Throwable());
+			return null;
+		}
+		// target properties
+		PropertyInfo targetAstProperty = new ObjectPropertyInfo(target.getObjectType());
+		ObserveInfo targetProperty = targetAstProperty.getObserveProperty(target);
+		Assert.isNotNull(targetProperty);
+		assertEquals(targetProperty, targetAstProperty);
+		//
+		Assert.isTrue(DatabindingsProvider.isSwingBinding(model, modelProperty) != DatabindingsProvider.isSwingBinding(
+				target,
+				targetProperty));
+		// binding
+		return addBinding(editor, signature, arguments, constructor.newInstance(
+				strategyInfo,
+				target,
+				targetProperty,
+				targetAstProperty,
+				model,
+				modelProperty,
+				modelAstProperty));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static UpdateStrategyInfo createStrategy(Expression expression) {
-    expression = AstNodeUtils.getActualVariableExpression(expression);
-    return new UpdateStrategyInfo(expression.toString());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static UpdateStrategyInfo createStrategy(Expression expression) {
+		expression = AstNodeUtils.getActualVariableExpression(expression);
+		return new UpdateStrategyInfo(expression.toString());
+	}
 
-  private ObserveInfo getObserveInfo(Expression expression) throws Exception {
-    ObserveInfo observeInfo = getComponentObserveInfo(expression);
-    if (observeInfo != null) {
-      return observeInfo;
-    }
-    return getBeanObserveInfo(expression);
-  }
+	private ObserveInfo getObserveInfo(Expression expression) throws Exception {
+		ObserveInfo observeInfo = getComponentObserveInfo(expression);
+		if (observeInfo != null) {
+			return observeInfo;
+		}
+		return getBeanObserveInfo(expression);
+	}
 
-  private ObserveInfo getBeanObserveInfo(Expression expression) throws Exception {
-    BeansObserveTypeContainer beansContainer =
-        (BeansObserveTypeContainer) m_provider.getContainer(ObserveType.BEANS);
-    return beansContainer.resolve(expression);
-  }
+	private ObserveInfo getBeanObserveInfo(Expression expression) throws Exception {
+		BeansObserveTypeContainer beansContainer =
+				(BeansObserveTypeContainer) m_provider.getContainer(ObserveType.BEANS);
+		return beansContainer.resolve(expression);
+	}
 
-  private ObserveInfo getComponentObserveInfo(Expression expression) throws Exception {
-    ComponentsObserveTypeContainer componentsContainer =
-        (ComponentsObserveTypeContainer) m_provider.getContainer(ObserveType.WIDGETS);
-    return componentsContainer.resolve(expression);
-  }
+	private ObserveInfo getComponentObserveInfo(Expression expression) throws Exception {
+		ComponentsObserveTypeContainer componentsContainer =
+				(ComponentsObserveTypeContainer) m_provider.getContainer(ObserveType.WIDGETS);
+		return componentsContainer.resolve(expression);
+	}
 
-  private static void assertEquals(ObserveInfo property, PropertyInfo astProperty) {
-    if (property instanceof ElPropertyObserveInfo) {
-      Assert.instanceOf(ElPropertyInfo.class, astProperty);
-    } else {
-      GenericUtils.assertEquals(property.getObjectType(), astProperty.getValueType());
-    }
-  }
+	private static void assertEquals(ObserveInfo property, PropertyInfo astProperty) {
+		if (property instanceof ElPropertyObserveInfo) {
+			Assert.instanceOf(ElPropertyInfo.class, astProperty);
+		} else {
+			GenericUtils.assertEquals(property.getObjectType(), astProperty.getValueType());
+		}
+	}
 
-  private static void assertObserves(IGenericType[] types,
-      int index,
-      ObserveInfo observe,
-      PropertyInfo astProperty,
-      ObserveInfo property) {
-    GenericUtils.assertEquals(observe.getObjectType(), astProperty.getSourceObjectType());
-    GenericUtils.assertEquals(types[index], astProperty.getSourceObjectType());
-    GenericUtils.assertEquals(types[index + 1], astProperty.getValueType());
-    if (property.getObjectType() != null) {
-      assertEquals(property, astProperty);
-    }
-  }
+	private static void assertObserves(IGenericType[] types,
+			int index,
+			ObserveInfo observe,
+			PropertyInfo astProperty,
+			ObserveInfo property) {
+		GenericUtils.assertEquals(observe.getObjectType(), astProperty.getSourceObjectType());
+		GenericUtils.assertEquals(types[index], astProperty.getSourceObjectType());
+		GenericUtils.assertEquals(types[index + 1], astProperty.getValueType());
+		if (property.getObjectType() != null) {
+			assertEquals(property, astProperty);
+		}
+	}
 
-  private static ObserveInfo createDefaultProperty(PropertyInfo astProperty) {
-    String text = "";
-    if (astProperty instanceof BeanPropertyInfo) {
-      BeanPropertyInfo beanProperty = (BeanPropertyInfo) astProperty;
-      text = beanProperty.getPath();
-    }
-    return new UndefineObserveInfo(text, null);
-  }
+	private static ObserveInfo createDefaultProperty(PropertyInfo astProperty) {
+		String text = "";
+		if (astProperty instanceof BeanPropertyInfo) {
+			BeanPropertyInfo beanProperty = (BeanPropertyInfo) astProperty;
+			text = beanProperty.getPath();
+		}
+		return new UndefineObserveInfo(text, null);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void preCommit() throws Exception {
-    JavaInfoReferenceProvider.LAZY_DETECTED = true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void preCommit() throws Exception {
+		JavaInfoReferenceProvider.LAZY_DETECTED = true;
+	}
 
-  /**
-   * Save model changes to source code.
-   */
-  public boolean commit() throws Exception {
-    JavaInfo javaInfoRoot = m_provider.getJavaInfoRoot();
-    AstEditor editor = javaInfoRoot.getEditor();
-    IJavaProject javaProject = editor.getJavaProject();
-    CodeGenerationSupport generationSupport =
-        new CodeGenerationSupport(CoreUtils.useGenerics(javaProject),
-            new ContainerAstObjectInfo(m_bindings));
-    //
-    boolean reparse = DataBindingsCodeUtils.ensureDBLibraries(javaProject);
-    // prepare source code
-    List<String> methodLines = Lists.newArrayList();
-    //
-    if (m_addInitializeContext) {
-      methodLines.add("initializeBindings();");
-      methodLines.add("//");
-    }
-    //
-    int size = m_bindings.size();
-    for (int i = 0; i < size; i++) {
-      BindingInfo binding = m_bindings.get(i);
-      if (i > 0 && binding.addSourceCodeSeparator()) {
-        methodLines.add("//");
-      }
-      binding.addSourceCode(methodLines, generationSupport);
-    }
-    // handle group
-    if (m_addToGroup) {
-      String groupVariable = generationSupport.generateLocalName("bindingGroup");
-      //
-      methodLines.add("//");
-      methodLines.add("org.jdesktop.beansbinding.BindingGroup "
-          + groupVariable
-          + " = new org.jdesktop.beansbinding.BindingGroup();");
-      methodLines.add("//");
-      //
-      for (BindingInfo binding : m_bindings) {
-        if (!binding.isManaged()) {
-          methodLines.add(groupVariable + ".addBinding(" + binding.getVariableIdentifier() + ");");
-        }
-      }
-      //
-      if (m_addPostInitializeContext) {
-        methodLines.add("//");
-        methodLines.add("postInitializeBindings();");
-        methodLines.add("//");
-      }
-      //
-      methodLines.add("return " + groupVariable + ";");
-    } else if (m_addPostInitializeContext) {
-      methodLines.add("//");
-      methodLines.add("postInitializeBindings();");
-    }
-    //
-    if (m_initDataBindings != null) {
-      editor.removeBodyDeclaration(m_initDataBindings);
-    }
-    // create or replace initDataBindings() method
-    MethodDeclaration lastInfoMethod =
-        DataBindingsCodeUtils.getLastInfoDeclaration(m_initDataBindings, javaInfoRoot);
-    TypeDeclaration typeDeclaration = JavaInfoUtils.getTypeDeclaration(javaInfoRoot);
-    BodyDeclarationTarget target = new BodyDeclarationTarget(typeDeclaration, null, false);
-    m_initDataBindings =
-        editor.addMethodDeclaration(
-            createMethodHeader(m_addToGroup, lastInfoMethod),
-            methodLines,
-            target);
-    // check call initDataBindings() after creation all components
-    DataBindingsCodeUtils.ensureInvokeInitDataBindings(editor, lastInfoMethod);
-    //
-    return reparse;
-  }
+	/**
+	 * Save model changes to source code.
+	 */
+	public boolean commit() throws Exception {
+		JavaInfo javaInfoRoot = m_provider.getJavaInfoRoot();
+		AstEditor editor = javaInfoRoot.getEditor();
+		IJavaProject javaProject = editor.getJavaProject();
+		CodeGenerationSupport generationSupport =
+				new CodeGenerationSupport(CoreUtils.useGenerics(javaProject),
+						new ContainerAstObjectInfo(m_bindings));
+		//
+		boolean reparse = DataBindingsCodeUtils.ensureDBLibraries(javaProject);
+		// prepare source code
+		List<String> methodLines = Lists.newArrayList();
+		//
+		if (m_addInitializeContext) {
+			methodLines.add("initializeBindings();");
+			methodLines.add("//");
+		}
+		//
+		int size = m_bindings.size();
+		for (int i = 0; i < size; i++) {
+			BindingInfo binding = m_bindings.get(i);
+			if (i > 0 && binding.addSourceCodeSeparator()) {
+				methodLines.add("//");
+			}
+			binding.addSourceCode(methodLines, generationSupport);
+		}
+		// handle group
+		if (m_addToGroup) {
+			String groupVariable = generationSupport.generateLocalName("bindingGroup");
+			//
+			methodLines.add("//");
+			methodLines.add("org.jdesktop.beansbinding.BindingGroup "
+					+ groupVariable
+					+ " = new org.jdesktop.beansbinding.BindingGroup();");
+			methodLines.add("//");
+			//
+			for (BindingInfo binding : m_bindings) {
+				if (!binding.isManaged()) {
+					methodLines.add(groupVariable + ".addBinding(" + binding.getVariableIdentifier() + ");");
+				}
+			}
+			//
+			if (m_addPostInitializeContext) {
+				methodLines.add("//");
+				methodLines.add("postInitializeBindings();");
+				methodLines.add("//");
+			}
+			//
+			methodLines.add("return " + groupVariable + ";");
+		} else if (m_addPostInitializeContext) {
+			methodLines.add("//");
+			methodLines.add("postInitializeBindings();");
+		}
+		//
+		if (m_initDataBindings != null) {
+			editor.removeBodyDeclaration(m_initDataBindings);
+		}
+		// create or replace initDataBindings() method
+		MethodDeclaration lastInfoMethod =
+				DataBindingsCodeUtils.getLastInfoDeclaration(m_initDataBindings, javaInfoRoot);
+		TypeDeclaration typeDeclaration = JavaInfoUtils.getTypeDeclaration(javaInfoRoot);
+		BodyDeclarationTarget target = new BodyDeclarationTarget(typeDeclaration, null, false);
+		m_initDataBindings =
+				editor.addMethodDeclaration(
+						createMethodHeader(m_addToGroup, lastInfoMethod),
+						methodLines,
+						target);
+		// check call initDataBindings() after creation all components
+		DataBindingsCodeUtils.ensureInvokeInitDataBindings(editor, lastInfoMethod);
+		//
+		return reparse;
+	}
 
-  public void postCommit() throws Exception {
-    JavaInfoReferenceProvider.LAZY_DETECTED = false;
-  }
+	public void postCommit() throws Exception {
+		JavaInfoReferenceProvider.LAZY_DETECTED = false;
+	}
 
-  private static String createMethodHeader(boolean addToGroup, MethodDeclaration lastInfoMethod)
-      throws Exception {
-    String returnType = addToGroup ? "org.jdesktop.beansbinding.BindingGroup " : "void ";
-    int access = 1; // XXX
-    // check static
-    if (Modifier.isStatic(lastInfoMethod.getModifiers())) {
-      return ACCESS_VALUES[access]
-          + "static "
-          + returnType
-          + ""
-          + INIT_DATA_BINDINGS_METHOD_NAME
-          + "()";
-    }
-    // normal
-    return ACCESS_VALUES[access] + returnType + INIT_DATA_BINDINGS_METHOD_NAME + "()";
-  }
+	private static String createMethodHeader(boolean addToGroup, MethodDeclaration lastInfoMethod)
+			throws Exception {
+		String returnType = addToGroup ? "org.jdesktop.beansbinding.BindingGroup " : "void ";
+		int access = 1; // XXX
+		// check static
+		if (Modifier.isStatic(lastInfoMethod.getModifiers())) {
+			return ACCESS_VALUES[access]
+					+ "static "
+					+ returnType
+					+ ""
+					+ INIT_DATA_BINDINGS_METHOD_NAME
+					+ "()";
+		}
+		// normal
+		return ACCESS_VALUES[access] + returnType + INIT_DATA_BINDINGS_METHOD_NAME + "()";
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/GenericClassObjectInfo.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/GenericClassObjectInfo.java
index fbaa336b0..bdc4f6518 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/GenericClassObjectInfo.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/GenericClassObjectInfo.java
@@ -22,34 +22,34 @@
  * @coverage bindings.swing.model
  */
 public abstract class GenericClassObjectInfo extends SimpleClassObjectInfo {
-  private boolean m_generic;
+	private boolean m_generic;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public GenericClassObjectInfo(String abstractClassName) {
-    super(abstractClassName, null);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public GenericClassObjectInfo(String abstractClassName) {
+		super(abstractClassName, null);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected boolean isGeneric() {
-    return m_generic;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected boolean isGeneric() {
+		return m_generic;
+	}
 
-  public void setClass(IGenericType type) {
-    setClassName(CoreUtils.getClassName(type.getRawType()));
-    m_generic = !(type.isEmpty() && ArrayUtils.isEmpty(type.getRawType().getTypeParameters()));
-  }
+	public void setClass(IGenericType type) {
+		setClassName(CoreUtils.getClassName(type.getRawType()));
+		m_generic = !(type.isEmpty() && ArrayUtils.isEmpty(type.getRawType().getTypeParameters()));
+	}
 
-  /**
-   * @return the array of generic type arguments.
-   */
-  @Override
-  protected abstract IGenericType[] getTypeArguments();
+	/**
+	 * @return the array of generic type arguments.
+	 */
+	@Override
+	protected abstract IGenericType[] getTypeArguments();
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/JavaInfoDecorator.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/JavaInfoDecorator.java
index c7b8759e7..ea0b52074 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/JavaInfoDecorator.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/JavaInfoDecorator.java
@@ -25,37 +25,37 @@
  * @coverage bindings.swing.model
  */
 public final class JavaInfoDecorator
-    extends
-      org.eclipse.wb.internal.core.databinding.model.presentation.JavaInfoDecorator {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public JavaInfoDecorator(DatabindingsProvider provider) {
-    super(provider, provider.getJavaInfoRoot());
-  }
+extends
+org.eclipse.wb.internal.core.databinding.model.presentation.JavaInfoDecorator {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public JavaInfoDecorator(DatabindingsProvider provider) {
+		super(provider, provider.getJavaInfoRoot());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Handle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected boolean accept(ObjectInfo object) throws Exception {
-    return object instanceof AbstractComponentInfo
-        || object.getParent() instanceof NonVisualBeanContainerInfo;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Handle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected boolean accept(ObjectInfo object) throws Exception {
+		return object instanceof AbstractComponentInfo
+				|| object.getParent() instanceof NonVisualBeanContainerInfo;
+	}
 
-  @Override
-  protected String getReference(ObjectInfo object) throws Exception {
-    return JavaInfoReferenceProvider.getReference((JavaInfo) object);
-  }
+	@Override
+	protected String getReference(ObjectInfo object) throws Exception {
+		return JavaInfoReferenceProvider.getReference((JavaInfo) object);
+	}
 
-  @Override
-  protected boolean equals(ObjectInfo object, String objectReference, IObserveInfo iobserve)
-      throws Exception {
-    ObserveInfo observe = (ObserveInfo) iobserve;
-    return objectReference.equals(observe.getReference());
-  }
+	@Override
+	protected boolean equals(ObjectInfo object, String objectReference, IObserveInfo iobserve)
+			throws Exception {
+		ObserveInfo observe = (ObserveInfo) iobserve;
+		return objectReference.equals(observe.getReference());
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/JavaInfoDeleteManager.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/JavaInfoDeleteManager.java
index b822c76fa..9eb8dc457 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/JavaInfoDeleteManager.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/JavaInfoDeleteManager.java
@@ -31,43 +31,43 @@
  * @coverage bindings.swing.model
  */
 public final class JavaInfoDeleteManager
-    extends
-      org.eclipse.wb.internal.core.databinding.model.JavaInfoDeleteManager {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public JavaInfoDeleteManager(DatabindingsProvider provider) {
-    super(provider, provider.getJavaInfoRoot());
-  }
+extends
+org.eclipse.wb.internal.core.databinding.model.JavaInfoDeleteManager {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public JavaInfoDeleteManager(DatabindingsProvider provider) {
+		super(provider, provider.getJavaInfoRoot());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Handle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void deleteBinding(IBindingInfo ibinding, List<IBindingInfo> bindings) throws Exception {
-    BindingInfo binding = (BindingInfo) ibinding;
-    binding.delete(CoreUtils.<BindingInfo>cast(bindings));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Handle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void deleteBinding(IBindingInfo ibinding, List<IBindingInfo> bindings) throws Exception {
+		BindingInfo binding = (BindingInfo) ibinding;
+		binding.delete(CoreUtils.<BindingInfo>cast(bindings));
+	}
 
-  @Override
-  protected boolean accept(ObjectInfo javaInfo) throws Exception {
-    return javaInfo instanceof AbstractComponentInfo
-        || javaInfo.getParent() instanceof NonVisualBeanContainerInfo;
-  }
+	@Override
+	protected boolean accept(ObjectInfo javaInfo) throws Exception {
+		return javaInfo instanceof AbstractComponentInfo
+				|| javaInfo.getParent() instanceof NonVisualBeanContainerInfo;
+	}
 
-  @Override
-  protected String getReference(ObjectInfo javaInfo) throws Exception {
-    return JavaInfoReferenceProvider.getReference((JavaInfo) javaInfo);
-  }
+	@Override
+	protected String getReference(ObjectInfo javaInfo) throws Exception {
+		return JavaInfoReferenceProvider.getReference((JavaInfo) javaInfo);
+	}
 
-  @Override
-  protected boolean equals(ObjectInfo javaInfo, String javaInfoReference, IObserveInfo iobserve)
-      throws Exception {
-    ObserveInfo observe = (ObserveInfo) iobserve;
-    return javaInfoReference.equals(observe.getReference());
-  }
+	@Override
+	protected boolean equals(ObjectInfo javaInfo, String javaInfoReference, IObserveInfo iobserve)
+			throws Exception {
+		ObserveInfo observe = (ObserveInfo) iobserve;
+		return javaInfoReference.equals(observe.getReference());
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/ObserveCreationType.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/ObserveCreationType.java
index fd0a38b80..0771657dc 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/ObserveCreationType.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/ObserveCreationType.java
@@ -17,13 +17,13 @@
  * @coverage bindings.swing.model
  */
 public enum ObserveCreationType {
-  AutoBinding,
-  JListBinding,
-  JTableBinding,
-  JComboBoxBinding,
-  VirtualBinding,
-  SelfProperty,
-  AnyProperty,
-  ListSelfProperty,
-  ListProperty
+	AutoBinding,
+	JListBinding,
+	JTableBinding,
+	JComboBoxBinding,
+	VirtualBinding,
+	SelfProperty,
+	AnyProperty,
+	ListSelfProperty,
+	ListProperty
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/ObserveInfo.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/ObserveInfo.java
index cb4ed6e77..834222f9a 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/ObserveInfo.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/ObserveInfo.java
@@ -33,131 +33,131 @@
  * @coverage bindings.swing.model
  */
 public abstract class ObserveInfo implements IObserveInfo {
-  private IGenericType m_objectType;
-  private final IReferenceProvider m_referenceProvider;
-  private int m_bindingDecorationCorner;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ObserveInfo(IGenericType objectType, IReferenceProvider referenceProvider) {
-    m_objectType = objectType;
-    m_referenceProvider = referenceProvider;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return {@link ObserveCreationType} for this observe object.
-   */
-  public abstract ObserveCreationType getCreationType();
-
-  /**
-   * @return {@link IGenericType} for this observe object.
-   */
-  public final IGenericType getObjectType() {
-    return m_objectType;
-  }
-
-  protected final void setObjectType(IGenericType objectType) {
-    m_objectType = objectType;
-  }
-
-  /**
-   * @return {@link Class} type of observe object or property.
-   */
-  public final Class<?> getObjectClass() {
-    return m_objectType.getRawType();
-  }
-
-  /**
-   * @return {@link IReferenceProvider} reference provider on observe object or property.
-   */
-  public final IReferenceProvider getReferenceProvider() {
-    return m_referenceProvider;
-  }
-
-  /**
-   * @return the reference on observe object or property.
-   */
-  public final String getReference() throws Exception {
-    return m_referenceProvider.getReference();
-  }
-
-  public boolean isRepresentedBy(String reference) throws Exception {
-    return reference.equals(m_referenceProvider.getReference());
-  }
-
-  public boolean canShared() {
-    return false;
-  }
-
-  public PropertyInfo createProperty(ObserveInfo observeObject) throws Exception {
-    throw new UnsupportedOperationException();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Binding
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private List<BindingInfo> m_bindings;
-
-  public void createBinding(BindingInfo binding) throws Exception {
-    if (m_bindings == null) {
-      m_bindings = Lists.newArrayList();
-    }
-    m_bindings.add(binding);
-    updateBindingDecoration();
-  }
-
-  public void deleteBinding(BindingInfo binding) throws Exception {
-    m_bindings.remove(binding);
-    if (m_bindings.isEmpty()) {
-      m_bindings = null;
-    }
-    updateBindingDecoration();
-  }
-
-  public List<BindingInfo> getBindings() {
-    if (m_bindings == null) {
-      return Collections.emptyList();
-    }
-    return m_bindings;
-  }
-
-  protected final void setBindingDecoration(int decorationCorner) {
-    m_bindingDecorationCorner = decorationCorner;
-  }
-
-  private void updateBindingDecoration() throws Exception {
-    if (m_bindingDecorationCorner != 0) {
-      IObservePresentation presentation = getPresentation();
-      if (presentation instanceof IObservePresentationDecorator) {
-        IObservePresentationDecorator presentationDecorator =
-            (IObservePresentationDecorator) presentation;
-        presentationDecorator.setBindingDecorator(CollectionUtils.isEmpty(m_bindings)
-            ? 0
-            : m_bindingDecorationCorner);
-      }
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Create {@link IUiContentProvider} content providers for edit this model.
-   */
-  public void createContentProviders(List<IUiContentProvider> providers,
-      ObserveInfo observeObject,
-      PropertyInfo observeAstProperty) throws Exception {
-  }
+	private IGenericType m_objectType;
+	private final IReferenceProvider m_referenceProvider;
+	private int m_bindingDecorationCorner;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ObserveInfo(IGenericType objectType, IReferenceProvider referenceProvider) {
+		m_objectType = objectType;
+		m_referenceProvider = referenceProvider;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return {@link ObserveCreationType} for this observe object.
+	 */
+	public abstract ObserveCreationType getCreationType();
+
+	/**
+	 * @return {@link IGenericType} for this observe object.
+	 */
+	public final IGenericType getObjectType() {
+		return m_objectType;
+	}
+
+	protected final void setObjectType(IGenericType objectType) {
+		m_objectType = objectType;
+	}
+
+	/**
+	 * @return {@link Class} type of observe object or property.
+	 */
+	public final Class<?> getObjectClass() {
+		return m_objectType.getRawType();
+	}
+
+	/**
+	 * @return {@link IReferenceProvider} reference provider on observe object or property.
+	 */
+	public final IReferenceProvider getReferenceProvider() {
+		return m_referenceProvider;
+	}
+
+	/**
+	 * @return the reference on observe object or property.
+	 */
+	public final String getReference() throws Exception {
+		return m_referenceProvider.getReference();
+	}
+
+	public boolean isRepresentedBy(String reference) throws Exception {
+		return reference.equals(m_referenceProvider.getReference());
+	}
+
+	public boolean canShared() {
+		return false;
+	}
+
+	public PropertyInfo createProperty(ObserveInfo observeObject) throws Exception {
+		throw new UnsupportedOperationException();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Binding
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private List<BindingInfo> m_bindings;
+
+	public void createBinding(BindingInfo binding) throws Exception {
+		if (m_bindings == null) {
+			m_bindings = Lists.newArrayList();
+		}
+		m_bindings.add(binding);
+		updateBindingDecoration();
+	}
+
+	public void deleteBinding(BindingInfo binding) throws Exception {
+		m_bindings.remove(binding);
+		if (m_bindings.isEmpty()) {
+			m_bindings = null;
+		}
+		updateBindingDecoration();
+	}
+
+	public List<BindingInfo> getBindings() {
+		if (m_bindings == null) {
+			return Collections.emptyList();
+		}
+		return m_bindings;
+	}
+
+	protected final void setBindingDecoration(int decorationCorner) {
+		m_bindingDecorationCorner = decorationCorner;
+	}
+
+	private void updateBindingDecoration() throws Exception {
+		if (m_bindingDecorationCorner != 0) {
+			IObservePresentation presentation = getPresentation();
+			if (presentation instanceof IObservePresentationDecorator) {
+				IObservePresentationDecorator presentationDecorator =
+						(IObservePresentationDecorator) presentation;
+				presentationDecorator.setBindingDecorator(CollectionUtils.isEmpty(m_bindings)
+						? 0
+								: m_bindingDecorationCorner);
+			}
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Create {@link IUiContentProvider} content providers for edit this model.
+	 */
+	public void createContentProviders(List<IUiContentProvider> providers,
+			ObserveInfo observeObject,
+			PropertyInfo observeAstProperty) throws Exception {
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/SimpleClassObjectInfo.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/SimpleClassObjectInfo.java
index 5b1971dce..cbb663a59 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/SimpleClassObjectInfo.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/SimpleClassObjectInfo.java
@@ -26,84 +26,84 @@
  * @coverage bindings.swing.model
  */
 public abstract class SimpleClassObjectInfo extends AstObjectInfo {
-  private final String m_abstractClassName;
-  protected String m_className;
-  private String m_parameters;
+	private final String m_abstractClassName;
+	protected String m_className;
+	private String m_parameters;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SimpleClassObjectInfo(String abstractClassName, String className) {
-    m_abstractClassName = abstractClassName;
-    m_className = className;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SimpleClassObjectInfo(String abstractClassName, String className) {
+		m_abstractClassName = abstractClassName;
+		m_className = className;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public String getClassName() {
-    return m_className;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public String getClassName() {
+		return m_className;
+	}
 
-  public void setClassName(String className) {
-    m_className = className;
-  }
+	public void setClassName(String className) {
+		m_className = className;
+	}
 
-  protected IGenericType[] getTypeArguments() {
-    return null;
-  }
+	protected IGenericType[] getTypeArguments() {
+		return null;
+	}
 
-  public String getParameters() {
-    return m_parameters;
-  }
+	public String getParameters() {
+		return m_parameters;
+	}
 
-  public void setParameters(String parameters) {
-    m_parameters = parameters;
-  }
+	public void setParameters(String parameters) {
+		m_parameters = parameters;
+	}
 
-  public String getFullClassName() {
-    return StringUtils.isEmpty(m_parameters) ? m_className : m_className + m_parameters;
-  }
+	public String getFullClassName() {
+		return StringUtils.isEmpty(m_parameters) ? m_className : m_className + m_parameters;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public String getSourceCode(List<String> lines, CodeGenerationSupport generationSupport)
-      throws Exception {
-    IGenericType[] typeArguments = getTypeArguments();
-    boolean variable = getVariableIdentifier() != null;
-    StringBuffer line = new StringBuffer();
-    if (variable) {
-      if (m_abstractClassName == null) {
-        line.append(m_className);
-      } else {
-        line.append(m_abstractClassName);
-      }
-      if (generationSupport.useGenerics() && typeArguments != null) {
-        line.append(GenericUtils.getTypesSource(typeArguments));
-      }
-      line.append(" " + getVariableIdentifier() + " = ");
-    }
-    line.append("new " + m_className);
-    if (generationSupport.useGenerics() && typeArguments != null) {
-      line.append(GenericUtils.getTypesSource(typeArguments));
-    }
-    if (StringUtils.isEmpty(m_parameters)) {
-      line.append("()");
-    } else {
-      line.append(m_parameters);
-    }
-    if (variable) {
-      line.append(";");
-      lines.add(line.toString());
-      return getVariableIdentifier();
-    }
-    return line.toString();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public String getSourceCode(List<String> lines, CodeGenerationSupport generationSupport)
+			throws Exception {
+		IGenericType[] typeArguments = getTypeArguments();
+		boolean variable = getVariableIdentifier() != null;
+		StringBuffer line = new StringBuffer();
+		if (variable) {
+			if (m_abstractClassName == null) {
+				line.append(m_className);
+			} else {
+				line.append(m_abstractClassName);
+			}
+			if (generationSupport.useGenerics() && typeArguments != null) {
+				line.append(GenericUtils.getTypesSource(typeArguments));
+			}
+			line.append(" " + getVariableIdentifier() + " = ");
+		}
+		line.append("new " + m_className);
+		if (generationSupport.useGenerics() && typeArguments != null) {
+			line.append(GenericUtils.getTypesSource(typeArguments));
+		}
+		if (StringUtils.isEmpty(m_parameters)) {
+			line.append("()");
+		} else {
+			line.append(m_parameters);
+		}
+		if (variable) {
+			line.append(";");
+			lines.add(line.toString());
+			return getVariableIdentifier();
+		}
+		return line.toString();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/TypeObjectInfo.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/TypeObjectInfo.java
index e67388362..349927225 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/TypeObjectInfo.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/TypeObjectInfo.java
@@ -20,29 +20,29 @@
  * @coverage bindings.swing.model
  */
 public final class TypeObjectInfo extends AstObjectInfo {
-  private final IGenericType m_objectType;
-  private final String m_parameters;
+	private final IGenericType m_objectType;
+	private final String m_parameters;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public TypeObjectInfo(IGenericType objectType, String parameters) {
-    m_objectType = objectType;
-    m_parameters = parameters;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public TypeObjectInfo(IGenericType objectType, String parameters) {
+		m_objectType = objectType;
+		m_parameters = parameters;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public IGenericType getObjectType() {
-    return m_objectType;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public IGenericType getObjectType() {
+		return m_objectType;
+	}
 
-  public String getParameters() {
-    return m_parameters;
-  }
+	public String getParameters() {
+		return m_parameters;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/UndefineObserveInfo.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/UndefineObserveInfo.java
index 4c6d46403..ce7db819a 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/UndefineObserveInfo.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/UndefineObserveInfo.java
@@ -26,51 +26,51 @@
  * @coverage bindings.swing.model
  */
 public final class UndefineObserveInfo extends ObserveInfo {
-  private final IObservePresentation m_presentation;
+	private final IObservePresentation m_presentation;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public UndefineObserveInfo(String text, IReferenceProvider referenceProvider) {
-    super(null, referenceProvider);
-    m_presentation = new SimpleObservePresentation(text, text, null);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public UndefineObserveInfo(String text, IReferenceProvider referenceProvider) {
+		super(null, referenceProvider);
+		m_presentation = new SimpleObservePresentation(text, text, null);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Type
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ObserveType getType() {
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Type
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ObserveType getType() {
+		return null;
+	}
 
-  @Override
-  public ObserveCreationType getCreationType() {
-    return null;
-  }
+	@Override
+	public ObserveCreationType getCreationType() {
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Hierarchy
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public IObserveInfo getParent() {
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Hierarchy
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public IObserveInfo getParent() {
+		return null;
+	}
 
-  public List<IObserveInfo> getChildren(ChildrenContext context) {
-    return Collections.emptyList();
-  }
+	public List<IObserveInfo> getChildren(ChildrenContext context) {
+		return Collections.emptyList();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public IObservePresentation getPresentation() {
-    return m_presentation;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public IObservePresentation getPresentation() {
+		return m_presentation;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/beans/BeanObserveInfo.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/beans/BeanObserveInfo.java
index 24e6ad3ca..990c5d5ec 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/beans/BeanObserveInfo.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/beans/BeanObserveInfo.java
@@ -28,58 +28,58 @@
  * @coverage bindings.swing.model.beans
  */
 public abstract class BeanObserveInfo extends ObserveInfo {
-  private final BeanSupport m_beanSupport;
-  private final ObserveInfo m_parent;
-  private List<ObserveInfo> m_properties;
+	private final BeanSupport m_beanSupport;
+	private final ObserveInfo m_parent;
+	private List<ObserveInfo> m_properties;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public BeanObserveInfo(BeanSupport beanSupport,
-      ObserveInfo parent,
-      IGenericType objectType,
-      IReferenceProvider referenceProvider) {
-    super(objectType, referenceProvider);
-    m_beanSupport = beanSupport;
-    m_parent = parent;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public BeanObserveInfo(BeanSupport beanSupport,
+			ObserveInfo parent,
+			IGenericType objectType,
+			IReferenceProvider referenceProvider) {
+		super(objectType, referenceProvider);
+		m_beanSupport = beanSupport;
+		m_parent = parent;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Type
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ObserveType getType() {
-    return ObserveType.BEANS;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Type
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ObserveType getType() {
+		return ObserveType.BEANS;
+	}
 
-  @Override
-  public ObserveCreationType getCreationType() {
-    return ObserveCreationType.AutoBinding;
-  }
+	@Override
+	public ObserveCreationType getCreationType() {
+		return ObserveCreationType.AutoBinding;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Hierarchy
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public final IObserveInfo getParent() {
-    return m_parent;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Hierarchy
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public final IObserveInfo getParent() {
+		return m_parent;
+	}
 
-  public final List<IObserveInfo> getChildren(ChildrenContext context) {
-    if (context == ChildrenContext.ChildrenForPropertiesTable) {
-      if (m_properties == null) {
-        m_properties = m_beanSupport.createProperties(this, getObjectType());
-      }
-      return CoreUtils.cast(m_properties);
-    }
-    return Collections.emptyList();
-  }
+	public final List<IObserveInfo> getChildren(ChildrenContext context) {
+		if (context == ChildrenContext.ChildrenForPropertiesTable) {
+			if (m_properties == null) {
+				m_properties = m_beanSupport.createProperties(this, getObjectType());
+			}
+			return CoreUtils.cast(m_properties);
+		}
+		return Collections.emptyList();
+	}
 
-  protected final void setProperties(List<ObserveInfo> properties) {
-    m_properties = properties;
-  }
+	protected final void setProperties(List<ObserveInfo> properties) {
+		m_properties = properties;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/beans/BeanPropertyObserveInfo.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/beans/BeanPropertyObserveInfo.java
index 98e8c500c..b0f4f3c1b 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/beans/BeanPropertyObserveInfo.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/beans/BeanPropertyObserveInfo.java
@@ -33,92 +33,92 @@
  * @coverage bindings.swing.model.beans
  */
 public class BeanPropertyObserveInfo extends BeanObserveInfo implements IObserveDecoration {
-  private final ObserveCreationType m_creationType;
-  private final IObservePresentation m_presentation;
-  private final IObserveDecorator m_decorator;
+	private final ObserveCreationType m_creationType;
+	private final IObservePresentation m_presentation;
+	private final IObserveDecorator m_decorator;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public BeanPropertyObserveInfo(BeanSupport beanSupport,
-      ObserveInfo parent,
-      String text,
-      IGenericType objectType,
-      IReferenceProvider referenceProvider,
-      IObserveDecorator decorator) throws Exception {
-    super(beanSupport,
-        parent instanceof BeanPropertyObserveInfo ? parent : null,
-        objectType,
-        referenceProvider);
-    setBindingDecoration(SwtResourceManager.TOP_LEFT);
-    m_creationType =
-        java.util.List.class.isAssignableFrom(getObjectClass())
-            ? ObserveCreationType.ListProperty
-            : ObserveCreationType.AnyProperty;
-    Image beenImage = beanSupport.getBeanImage(getObjectClass(), null, false);
-    m_presentation =
-        new SimpleObservePresentation(text, text, beenImage == null
-            ? TypeImageProvider.getImage(getObjectClass())
-            : beenImage);
-    m_decorator = decorator;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public BeanPropertyObserveInfo(BeanSupport beanSupport,
+			ObserveInfo parent,
+			String text,
+			IGenericType objectType,
+			IReferenceProvider referenceProvider,
+			IObserveDecorator decorator) throws Exception {
+		super(beanSupport,
+				parent instanceof BeanPropertyObserveInfo ? parent : null,
+						objectType,
+						referenceProvider);
+		setBindingDecoration(SwtResourceManager.TOP_LEFT);
+		m_creationType =
+				java.util.List.class.isAssignableFrom(getObjectClass())
+				? ObserveCreationType.ListProperty
+						: ObserveCreationType.AnyProperty;
+		Image beenImage = beanSupport.getBeanImage(getObjectClass(), null, false);
+		m_presentation =
+				new SimpleObservePresentation(text, text, beenImage == null
+				? TypeImageProvider.getImage(getObjectClass())
+						: beenImage);
+		m_decorator = decorator;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public final void setHostedType(IGenericType objectType) {
-    setObjectType(objectType);
-    setProperties(null);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public final void setHostedType(IGenericType objectType) {
+		setObjectType(objectType);
+		setProperties(null);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Type
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public ObserveType getType() {
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Type
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public ObserveType getType() {
+		return null;
+	}
 
-  @Override
-  public ObserveCreationType getCreationType() {
-    return m_creationType;
-  }
+	@Override
+	public ObserveCreationType getCreationType() {
+		return m_creationType;
+	}
 
-  @Override
-  public boolean canShared() {
-    return true;
-  }
+	@Override
+	public boolean canShared() {
+		return true;
+	}
 
-  @Override
-  public PropertyInfo createProperty(ObserveInfo observeObject) throws Exception {
-    StringBuffer reference = new StringBuffer(getReference());
-    ObserveInfo parent = (ObserveInfo) getParent();
-    while (parent != null) {
-      reference.insert(0, parent.getReference() + ".");
-      parent = (ObserveInfo) parent.getParent();
-    }
-    return new BeanPropertyInfo(observeObject.getObjectType(),
-        getObjectType(),
-        null,
-        reference.toString());
-  }
+	@Override
+	public PropertyInfo createProperty(ObserveInfo observeObject) throws Exception {
+		StringBuffer reference = new StringBuffer(getReference());
+		ObserveInfo parent = (ObserveInfo) getParent();
+		while (parent != null) {
+			reference.insert(0, parent.getReference() + ".");
+			parent = (ObserveInfo) parent.getParent();
+		}
+		return new BeanPropertyInfo(observeObject.getObjectType(),
+				getObjectType(),
+				null,
+				reference.toString());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public IObservePresentation getPresentation() {
-    return m_presentation;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public IObservePresentation getPresentation() {
+		return m_presentation;
+	}
 
-  public final IObserveDecorator getDecorator() {
-    return m_decorator;
-  }
+	public final IObserveDecorator getDecorator() {
+		return m_decorator;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/beans/BeanSupport.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/beans/BeanSupport.java
index aa06c15d5..c16bb8e2c 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/beans/BeanSupport.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/beans/BeanSupport.java
@@ -55,310 +55,310 @@
  * @coverage bindings.swing.model.beans
  */
 public final class BeanSupport {
-  private final Map<Class<?>, Image> m_classToImage = Maps.newHashMap();
-  private boolean m_addELProperty = true;
-  private boolean m_addSelfProperty = true;
+	private final Map<Class<?>, Image> m_classToImage = Maps.newHashMap();
+	private boolean m_addELProperty = true;
+	private boolean m_addSelfProperty = true;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void doAddELProperty(boolean addElProperty) {
-    m_addELProperty = addElProperty;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void doAddELProperty(boolean addElProperty) {
+		m_addELProperty = addElProperty;
+	}
 
-  public void doAddSelfProperty(boolean addSelfProperty) {
-    m_addSelfProperty = addSelfProperty;
-  }
+	public void doAddSelfProperty(boolean addSelfProperty) {
+		m_addSelfProperty = addSelfProperty;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Properties
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final Map<Class<?>, List<PropertyDescriptor>> m_classToDescriptors = Maps.newHashMap();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Properties
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final Map<Class<?>, List<PropertyDescriptor>> m_classToDescriptors = Maps.newHashMap();
 
-  /**
-   * @return {@link PropertyDescriptor} properties for given bean {@link Class}.
-   */
-  public List<PropertyDescriptor> getLocalPropertyDescriptors(Class<?> beanClass) throws Exception {
-    List<PropertyDescriptor> descriptors = m_classToDescriptors.get(beanClass);
-    if (descriptors == null) {
-      descriptors = getPropertyDescriptors(beanClass);
-      m_classToDescriptors.put(beanClass, descriptors);
-      Collections.sort(descriptors, new Comparator<PropertyDescriptor>() {
-        public int compare(PropertyDescriptor descriptor1, PropertyDescriptor descriptor2) {
-          return descriptor1.getName().compareTo(descriptor2.getName());
-        }
-      });
-    }
-    return descriptors;
-  }
+	/**
+	 * @return {@link PropertyDescriptor} properties for given bean {@link Class}.
+	 */
+	public List<PropertyDescriptor> getLocalPropertyDescriptors(Class<?> beanClass) throws Exception {
+		List<PropertyDescriptor> descriptors = m_classToDescriptors.get(beanClass);
+		if (descriptors == null) {
+			descriptors = getPropertyDescriptors(beanClass);
+			m_classToDescriptors.put(beanClass, descriptors);
+			Collections.sort(descriptors, new Comparator<PropertyDescriptor>() {
+				public int compare(PropertyDescriptor descriptor1, PropertyDescriptor descriptor2) {
+					return descriptor1.getName().compareTo(descriptor2.getName());
+				}
+			});
+		}
+		return descriptors;
+	}
 
-  public List<ObserveInfo> createProperties(ObserveInfo parent, IGenericType objectType) {
-    try {
-      Class<?> objectClass = objectType.getRawType();
-      BeanDecorationInfo decorationInfo = DecorationUtils.getDecorationInfo(objectClass);
-      IDecorationProvider decorationProvider =
-          decorationInfo == null ? m_decorationProviderOverType : m_decorationProviderOverInfo;
-      List<ObserveInfo> properties = Lists.newArrayList();
-      // handle generic
-      TypeVariable<?> superTypeParameter = null;
-      Type superTypeParameterClass = null;
-      if (objectClass.getTypeParameters().length == 1 && objectType.getSubTypes().size() == 1) {
-        superTypeParameter = objectClass.getTypeParameters()[0];
-        superTypeParameterClass = objectType.getSubTypes().get(0).getRawType();
-      } else if (objectClass.getGenericSuperclass() instanceof ParameterizedType) {
-        ParameterizedType superType = (ParameterizedType) objectClass.getGenericSuperclass();
-        if (superType.getActualTypeArguments().length == 1
-            && superType.getActualTypeArguments()[0] instanceof Class<?>
-            && superType.getRawType() instanceof Class<?>) {
-          Class<?> superClass = (Class<?>) superType.getRawType();
-          if (superClass.getTypeParameters().length == 1) {
-            superTypeParameter = superClass.getTypeParameters()[0];
-            superTypeParameterClass = superType.getActualTypeArguments()[0];
-          }
-        }
-      }
-      // properties
-      for (PropertyDescriptor descriptor : getLocalPropertyDescriptors(objectClass)) {
-        String name = descriptor.getName();
-        IGenericType propertyType =
-            GenericUtils.getObjectType(superTypeParameter, superTypeParameterClass, descriptor);
-        properties.add(new BeanPropertyObserveInfo(this,
-            parent,
-            name,
-            propertyType,
-            new StringReferenceProvider(name),
-            decorationProvider.getDecorator(decorationInfo, propertyType, name, descriptor)));
-      }
-      // Swing properties
-      if (javax.swing.text.JTextComponent.class.isAssignableFrom(objectClass)) {
-        replaceProperty(properties, "text", new PropertiesObserveInfo(this,
-            parent,
-            "text",
-            ClassGenericType.STRING_CLASS,
-            new StringReferenceProvider("text"),
-            IObserveDecorator.BOLD,
-            new String[]{"text", "text_ON_ACTION_OR_FOCUS_LOST", "text_ON_FOCUS_LOST"}));
-      } else if (javax.swing.JTable.class.isAssignableFrom(objectClass)) {
-        addElementProperties(properties, parent);
-        Collections.sort(properties, ObserveComparator.INSTANCE);
-      } else if (javax.swing.JSlider.class.isAssignableFrom(objectClass)) {
-        replaceProperty(properties, "value", new PropertiesObserveInfo(this,
-            parent,
-            "value",
-            ClassGenericType.INT_CLASS,
-            new StringReferenceProvider("value"),
-            IObserveDecorator.BOLD,
-            new String[]{"value", "value_IGNORE_ADJUSTING"}));
-      } else if (javax.swing.JList.class.isAssignableFrom(objectClass)) {
-        addElementProperties(properties, parent);
-        Collections.sort(properties, ObserveComparator.INSTANCE);
-      }
-      // EL property
-      if (m_addELProperty && !objectClass.isPrimitive()) {
-        properties.add(0, new ElPropertyObserveInfo(parent, objectType));
-      }
-      // Object property
-      if (m_addSelfProperty && (parent == null || !(parent instanceof BeanPropertyObserveInfo))) {
-        properties.add(0, new ObjectPropertyObserveInfo(objectType));
-      }
-      //
-      return properties;
-    } catch (Throwable e) {
-      DesignerPlugin.log(e);
-      return Collections.emptyList();
-    }
-  }
+	public List<ObserveInfo> createProperties(ObserveInfo parent, IGenericType objectType) {
+		try {
+			Class<?> objectClass = objectType.getRawType();
+			BeanDecorationInfo decorationInfo = DecorationUtils.getDecorationInfo(objectClass);
+			IDecorationProvider decorationProvider =
+					decorationInfo == null ? m_decorationProviderOverType : m_decorationProviderOverInfo;
+			List<ObserveInfo> properties = Lists.newArrayList();
+			// handle generic
+			TypeVariable<?> superTypeParameter = null;
+			Type superTypeParameterClass = null;
+			if (objectClass.getTypeParameters().length == 1 && objectType.getSubTypes().size() == 1) {
+				superTypeParameter = objectClass.getTypeParameters()[0];
+				superTypeParameterClass = objectType.getSubTypes().get(0).getRawType();
+			} else if (objectClass.getGenericSuperclass() instanceof ParameterizedType) {
+				ParameterizedType superType = (ParameterizedType) objectClass.getGenericSuperclass();
+				if (superType.getActualTypeArguments().length == 1
+						&& superType.getActualTypeArguments()[0] instanceof Class<?>
+				&& superType.getRawType() instanceof Class<?>) {
+					Class<?> superClass = (Class<?>) superType.getRawType();
+					if (superClass.getTypeParameters().length == 1) {
+						superTypeParameter = superClass.getTypeParameters()[0];
+						superTypeParameterClass = superType.getActualTypeArguments()[0];
+					}
+				}
+			}
+			// properties
+			for (PropertyDescriptor descriptor : getLocalPropertyDescriptors(objectClass)) {
+				String name = descriptor.getName();
+				IGenericType propertyType =
+						GenericUtils.getObjectType(superTypeParameter, superTypeParameterClass, descriptor);
+				properties.add(new BeanPropertyObserveInfo(this,
+						parent,
+						name,
+						propertyType,
+						new StringReferenceProvider(name),
+						decorationProvider.getDecorator(decorationInfo, propertyType, name, descriptor)));
+			}
+			// Swing properties
+			if (javax.swing.text.JTextComponent.class.isAssignableFrom(objectClass)) {
+				replaceProperty(properties, "text", new PropertiesObserveInfo(this,
+						parent,
+						"text",
+						ClassGenericType.STRING_CLASS,
+						new StringReferenceProvider("text"),
+						IObserveDecorator.BOLD,
+						new String[]{"text", "text_ON_ACTION_OR_FOCUS_LOST", "text_ON_FOCUS_LOST"}));
+			} else if (javax.swing.JTable.class.isAssignableFrom(objectClass)) {
+				addElementProperties(properties, parent);
+				Collections.sort(properties, ObserveComparator.INSTANCE);
+			} else if (javax.swing.JSlider.class.isAssignableFrom(objectClass)) {
+				replaceProperty(properties, "value", new PropertiesObserveInfo(this,
+						parent,
+						"value",
+						ClassGenericType.INT_CLASS,
+						new StringReferenceProvider("value"),
+						IObserveDecorator.BOLD,
+						new String[]{"value", "value_IGNORE_ADJUSTING"}));
+			} else if (javax.swing.JList.class.isAssignableFrom(objectClass)) {
+				addElementProperties(properties, parent);
+				Collections.sort(properties, ObserveComparator.INSTANCE);
+			}
+			// EL property
+			if (m_addELProperty && !objectClass.isPrimitive()) {
+				properties.add(0, new ElPropertyObserveInfo(parent, objectType));
+			}
+			// Object property
+			if (m_addSelfProperty && (parent == null || !(parent instanceof BeanPropertyObserveInfo))) {
+				properties.add(0, new ObjectPropertyObserveInfo(objectType));
+			}
+			//
+			return properties;
+		} catch (Throwable e) {
+			DesignerPlugin.log(e);
+			return Collections.emptyList();
+		}
+	}
 
-  private void addElementProperties(List<ObserveInfo> properties, ObserveInfo parent)
-      throws Exception {
-    properties.add(new PropertiesObserveInfo(this,
-        parent,
-        "selectedElement",
-        ClassGenericType.OBJECT_CLASS,
-        new StringReferenceProvider("selectedElement"),
-        IObserveDecorator.BOLD,
-        new String[]{"selectedElement", "selectedElement_IGNORE_ADJUSTING"}));
-    properties.add(new PropertiesObserveInfo(this,
-        parent,
-        "selectedElements",
-        ClassGenericType.LIST_CLASS,
-        new StringReferenceProvider("selectedElements"),
-        IObserveDecorator.BOLD,
-        new String[]{"selectedElements", "selectedElements_IGNORE_ADJUSTING"}));
-  }
+	private void addElementProperties(List<ObserveInfo> properties, ObserveInfo parent)
+			throws Exception {
+		properties.add(new PropertiesObserveInfo(this,
+				parent,
+				"selectedElement",
+				ClassGenericType.OBJECT_CLASS,
+				new StringReferenceProvider("selectedElement"),
+				IObserveDecorator.BOLD,
+				new String[]{"selectedElement", "selectedElement_IGNORE_ADJUSTING"}));
+		properties.add(new PropertiesObserveInfo(this,
+				parent,
+				"selectedElements",
+				ClassGenericType.LIST_CLASS,
+				new StringReferenceProvider("selectedElements"),
+				IObserveDecorator.BOLD,
+				new String[]{"selectedElements", "selectedElements_IGNORE_ADJUSTING"}));
+	}
 
-  private static void replaceProperty(List<ObserveInfo> properties,
-      String reference,
-      ObserveInfo property) throws Exception {
-    int count = properties.size();
-    for (int i = 0; i < count; i++) {
-      if (reference.equals(properties.get(i).getReference())) {
-        properties.set(i, property);
-        return;
-      }
-    }
-  }
+	private static void replaceProperty(List<ObserveInfo> properties,
+			String reference,
+			ObserveInfo property) throws Exception {
+		int count = properties.size();
+		for (int i = 0; i < count; i++) {
+			if (reference.equals(properties.get(i).getReference())) {
+				properties.set(i, property);
+				return;
+			}
+		}
+	}
 
-  public static BeanPropertyObserveInfo getProperty(BindingInfo binding,
-      boolean isTarget,
-      String property) throws Exception {
-    IObserveInfo component = isTarget ? binding.getTarget() : binding.getModel();
-    for (IObserveInfo iobserve : component.getChildren(ChildrenContext.ChildrenForPropertiesTable)) {
-      ObserveInfo observe = (ObserveInfo) iobserve;
-      if (property.equals(observe.getReference())) {
-        return (BeanPropertyObserveInfo) observe;
-      }
-    }
-    return null;
-  }
+	public static BeanPropertyObserveInfo getProperty(BindingInfo binding,
+			boolean isTarget,
+			String property) throws Exception {
+		IObserveInfo component = isTarget ? binding.getTarget() : binding.getModel();
+		for (IObserveInfo iobserve : component.getChildren(ChildrenContext.ChildrenForPropertiesTable)) {
+			ObserveInfo observe = (ObserveInfo) iobserve;
+			if (property.equals(observe.getReference())) {
+				return (BeanPropertyObserveInfo) observe;
+			}
+		}
+		return null;
+	}
 
-  /**
-   * @return {@link PropertyDescriptor} properties for given bean {@link Class}.
-   */
-  public static List<PropertyDescriptor> getPropertyDescriptors(Class<?> beanClass)
-      throws Exception {
-    List<PropertyDescriptor> descriptors = Lists.newArrayList();
-    // handle interfaces
-    if (beanClass.isInterface() || Modifier.isAbstract(beanClass.getModifiers())) {
-      List<Class<?>> interfaces = CoreUtils.cast(ClassUtils.getAllInterfaces(beanClass));
-      for (Class<?> i : interfaces) {
-        BeanInfo beanInfo = Introspector.getBeanInfo(i);
-        addDescriptors(descriptors, beanInfo.getPropertyDescriptors());
-      }
-    }
-    // handle bean
-    BeanInfo beanInfo = Introspector.getBeanInfo(beanClass);
-    addDescriptors(descriptors, beanInfo.getPropertyDescriptors());
-    //
-    return descriptors;
-  }
+	/**
+	 * @return {@link PropertyDescriptor} properties for given bean {@link Class}.
+	 */
+	public static List<PropertyDescriptor> getPropertyDescriptors(Class<?> beanClass)
+			throws Exception {
+		List<PropertyDescriptor> descriptors = Lists.newArrayList();
+		// handle interfaces
+		if (beanClass.isInterface() || Modifier.isAbstract(beanClass.getModifiers())) {
+			List<Class<?>> interfaces = CoreUtils.cast(ClassUtils.getAllInterfaces(beanClass));
+			for (Class<?> i : interfaces) {
+				BeanInfo beanInfo = Introspector.getBeanInfo(i);
+				addDescriptors(descriptors, beanInfo.getPropertyDescriptors());
+			}
+		}
+		// handle bean
+		BeanInfo beanInfo = Introspector.getBeanInfo(beanClass);
+		addDescriptors(descriptors, beanInfo.getPropertyDescriptors());
+		//
+		return descriptors;
+	}
 
-  private static void addDescriptors(List<PropertyDescriptor> descriptors,
-      PropertyDescriptor[] newDescriptors) {
-    int count = descriptors.size();
-    if (count > 0) {
-      // filter equal properties
-      for (int i = 0; i < newDescriptors.length; i++) {
-        PropertyDescriptor newDescriptor = newDescriptors[i];
-        if (newDescriptor.getPropertyType() == null) {
-          continue;
-        }
-        //
-        String name = newDescriptor.getName();
-        boolean addDescriptor = true;
-        //
-        for (int j = 0; j < count; j++) {
-          PropertyDescriptor descriptor = descriptors.get(j);
-          if (name.equals(descriptor.getName())) {
-            addDescriptor = false;
-            break;
-          }
-        }
-        if (addDescriptor) {
-          descriptors.add(newDescriptor);
-        }
-      }
-    } else {
-      // add all properties
-      for (PropertyDescriptor descriptor : newDescriptors) {
-        if (descriptor.getPropertyType() != null) {
-          descriptors.add(descriptor);
-        }
-      }
-    }
-  }
+	private static void addDescriptors(List<PropertyDescriptor> descriptors,
+			PropertyDescriptor[] newDescriptors) {
+		int count = descriptors.size();
+		if (count > 0) {
+			// filter equal properties
+			for (int i = 0; i < newDescriptors.length; i++) {
+				PropertyDescriptor newDescriptor = newDescriptors[i];
+				if (newDescriptor.getPropertyType() == null) {
+					continue;
+				}
+				//
+				String name = newDescriptor.getName();
+				boolean addDescriptor = true;
+				//
+				for (int j = 0; j < count; j++) {
+					PropertyDescriptor descriptor = descriptors.get(j);
+					if (name.equals(descriptor.getName())) {
+						addDescriptor = false;
+						break;
+					}
+				}
+				if (addDescriptor) {
+					descriptors.add(newDescriptor);
+				}
+			}
+		} else {
+			// add all properties
+			for (PropertyDescriptor descriptor : newDescriptors) {
+				if (descriptor.getPropertyType() != null) {
+					descriptors.add(descriptor);
+				}
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Image
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return {@link Image} represented given bean class.
-   */
-  public Image getBeanImage(Class<?> beanClass, JavaInfo javaInfo, boolean useDefault)
-      throws Exception {
-    // check java info
-    if (javaInfo != null) {
-      return null;
-    }
-    // prepare cached image
-    Image beanImage = m_classToImage.get(beanClass);
-    // check load image
-    if (beanImage == null) {
-      try {
-        // load AWT image
-        BeanInfo beanInfo = Introspector.getBeanInfo(beanClass);
-        java.awt.Image awtBeanIcon = beanInfo.getIcon(BeanInfo.ICON_COLOR_16x16);
-        if (awtBeanIcon == null) {
-          // set default
-          beanImage = useDefault ? Activator.getImage("javabean.gif") : null;
-        } else {
-          // convert to SWT image
-          // FIXME: memory leak
-          beanImage = SwingImageUtils.convertImage_AWT_to_SWT(awtBeanIcon);
-        }
-      } catch (Throwable e) {
-        // set default
-        beanImage = useDefault ? Activator.getImage("javabean.gif") : null;
-      }
-      m_classToImage.put(beanClass, beanImage);
-    }
-    return beanImage;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Image
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return {@link Image} represented given bean class.
+	 */
+	public Image getBeanImage(Class<?> beanClass, JavaInfo javaInfo, boolean useDefault)
+			throws Exception {
+		// check java info
+		if (javaInfo != null) {
+			return null;
+		}
+		// prepare cached image
+		Image beanImage = m_classToImage.get(beanClass);
+		// check load image
+		if (beanImage == null) {
+			try {
+				// load AWT image
+				BeanInfo beanInfo = Introspector.getBeanInfo(beanClass);
+				java.awt.Image awtBeanIcon = beanInfo.getIcon(BeanInfo.ICON_COLOR_16x16);
+				if (awtBeanIcon == null) {
+					// set default
+					beanImage = useDefault ? Activator.getImage("javabean.gif") : null;
+				} else {
+					// convert to SWT image
+					// FIXME: memory leak
+					beanImage = SwingImageUtils.convertImage_AWT_to_SWT(awtBeanIcon);
+				}
+			} catch (Throwable e) {
+				// set default
+				beanImage = useDefault ? Activator.getImage("javabean.gif") : null;
+			}
+			m_classToImage.put(beanClass, beanImage);
+		}
+		return beanImage;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final IDecorationProvider m_decorationProviderOverInfo = new IDecorationProvider() {
-    public IObserveDecorator getDecorator(BeanDecorationInfo decorationInfo,
-        IGenericType propertyType,
-        String propertyName,
-        PropertyDescriptor descriptor) {
-      return decorationInfo.getDecorator(propertyName);
-    }
-  };
-  private final IDecorationProvider m_decorationProviderOverType = new IDecorationProvider() {
-    public IObserveDecorator getDecorator(BeanDecorationInfo decorationInfo,
-        IGenericType propertyType,
-        String propertyName,
-        PropertyDescriptor descriptor) {
-      // over PropertyDescriptor
-      if (descriptor.isPreferred()) {
-        return IObserveDecorator.BOLD;
-      }
-      if (descriptor.isExpert()) {
-        return IObserveDecorator.ITALIC;
-      }
-      if (descriptor.isHidden()) {
-        return IObserveDecorator.HIDDEN;
-      }
-      // over Class
-      Class<?> propertyClass = propertyType.getRawType();
-      if (propertyClass == null || propertyClass == Class.class || propertyClass == Object.class) {
-        return IObserveDecorator.HIDDEN;
-      }
-      if (propertyClass == String.class || Collection.class.isAssignableFrom(propertyClass)) {
-        return IObserveDecorator.BOLD;
-      }
-      if (propertyClass.isArray()) {
-        return IObserveDecorator.ITALIC;
-      }
-      //
-      return IObserveDecorator.DEFAULT;
-    }
-  };
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final IDecorationProvider m_decorationProviderOverInfo = new IDecorationProvider() {
+		public IObserveDecorator getDecorator(BeanDecorationInfo decorationInfo,
+				IGenericType propertyType,
+				String propertyName,
+				PropertyDescriptor descriptor) {
+			return decorationInfo.getDecorator(propertyName);
+		}
+	};
+	private final IDecorationProvider m_decorationProviderOverType = new IDecorationProvider() {
+		public IObserveDecorator getDecorator(BeanDecorationInfo decorationInfo,
+				IGenericType propertyType,
+				String propertyName,
+				PropertyDescriptor descriptor) {
+			// over PropertyDescriptor
+			if (descriptor.isPreferred()) {
+				return IObserveDecorator.BOLD;
+			}
+			if (descriptor.isExpert()) {
+				return IObserveDecorator.ITALIC;
+			}
+			if (descriptor.isHidden()) {
+				return IObserveDecorator.HIDDEN;
+			}
+			// over Class
+			Class<?> propertyClass = propertyType.getRawType();
+			if (propertyClass == null || propertyClass == Class.class || propertyClass == Object.class) {
+				return IObserveDecorator.HIDDEN;
+			}
+			if (propertyClass == String.class || Collection.class.isAssignableFrom(propertyClass)) {
+				return IObserveDecorator.BOLD;
+			}
+			if (propertyClass.isArray()) {
+				return IObserveDecorator.ITALIC;
+			}
+			//
+			return IObserveDecorator.DEFAULT;
+		}
+	};
 
-  private static interface IDecorationProvider {
-    IObserveDecorator getDecorator(BeanDecorationInfo decorationInfo,
-        IGenericType propertyType,
-        String propertyName,
-        PropertyDescriptor descriptor);
-  }
+	private static interface IDecorationProvider {
+		IObserveDecorator getDecorator(BeanDecorationInfo decorationInfo,
+				IGenericType propertyType,
+				String propertyName,
+				PropertyDescriptor descriptor);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/beans/BeansObserveTypeContainer.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/beans/BeansObserveTypeContainer.java
index 163161a0a..1e1149f3c 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/beans/BeansObserveTypeContainer.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/beans/BeansObserveTypeContainer.java
@@ -60,311 +60,311 @@
  * @coverage bindings.swing.model.beans
  */
 public final class BeansObserveTypeContainer extends ObserveTypeContainer {
-  private static final String OBJECT_PROPERTY_CREATE =
-      "org.jdesktop.beansbinding.ObjectProperty.create()";
-  private static final String BEAN_PROPERTY_CREATE_1 =
-      "org.jdesktop.beansbinding.BeanProperty.create(java.lang.String)";
-  private static final String BEAN_PROPERTY_CREATE_2 =
-      "org.jdesktop.beansbinding.BeanProperty.create(org.jdesktop.beansbinding.Property,java.lang.String)";
-  private static final String EL_PROPERTY_CREATE_1 =
-      "org.jdesktop.beansbinding.ELProperty.create(java.lang.String)";
-  private static final String EL_PROPERTY_CREATE_2 =
-      "org.jdesktop.beansbinding.ELProperty.create(org.jdesktop.beansbinding.Property,java.lang.String)";
-  private List<IObserveInfo> m_observes = Collections.emptyList();
-  private JavaInfo m_javaInfoRoot;
+	private static final String OBJECT_PROPERTY_CREATE =
+			"org.jdesktop.beansbinding.ObjectProperty.create()";
+	private static final String BEAN_PROPERTY_CREATE_1 =
+			"org.jdesktop.beansbinding.BeanProperty.create(java.lang.String)";
+	private static final String BEAN_PROPERTY_CREATE_2 =
+			"org.jdesktop.beansbinding.BeanProperty.create(org.jdesktop.beansbinding.Property,java.lang.String)";
+	private static final String EL_PROPERTY_CREATE_1 =
+			"org.jdesktop.beansbinding.ELProperty.create(java.lang.String)";
+	private static final String EL_PROPERTY_CREATE_2 =
+			"org.jdesktop.beansbinding.ELProperty.create(org.jdesktop.beansbinding.Property,java.lang.String)";
+	private List<IObserveInfo> m_observes = Collections.emptyList();
+	private JavaInfo m_javaInfoRoot;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public BeansObserveTypeContainer() {
-    super(ObserveType.BEANS, false, true);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public BeansObserveTypeContainer() {
+		super(ObserveType.BEANS, false, true);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IObserveInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public List<IObserveInfo> getObservables() {
-    return m_observes;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IObserveInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public List<IObserveInfo> getObservables() {
+		return m_observes;
+	}
 
-  @Override
-  public void synchronizeObserves(JavaInfo root, final AstEditor editor, TypeDeclaration rootNode)
-      throws Exception {
-    final BeanSupport beanSupport = new BeanSupport();
-    //
-    IObserveInfo virtualObserve = m_observes.remove(0);
-    // fields
-    SynchronizeManager.synchronizeObjects(
-        m_observes,
-        CoreUtils.getFieldFragments(rootNode),
-        new ISynchronizeProcessor<VariableDeclarationFragment, IObserveInfo>() {
-          public boolean handleObject(IObserveInfo object) {
-            return object instanceof FieldBeanObserveInfo;
-          }
+	@Override
+	public void synchronizeObserves(JavaInfo root, final AstEditor editor, TypeDeclaration rootNode)
+			throws Exception {
+		final BeanSupport beanSupport = new BeanSupport();
+		//
+		IObserveInfo virtualObserve = m_observes.remove(0);
+		// fields
+		SynchronizeManager.synchronizeObjects(
+				m_observes,
+				CoreUtils.getFieldFragments(rootNode),
+				new ISynchronizeProcessor<VariableDeclarationFragment, IObserveInfo>() {
+					public boolean handleObject(IObserveInfo object) {
+						return object instanceof FieldBeanObserveInfo;
+					}
 
-          public VariableDeclarationFragment getKeyObject(IObserveInfo observe) {
-            FieldBeanObserveInfo beanObserve = (FieldBeanObserveInfo) observe;
-            return beanObserve.getFragment();
-          }
+					public VariableDeclarationFragment getKeyObject(IObserveInfo observe) {
+						FieldBeanObserveInfo beanObserve = (FieldBeanObserveInfo) observe;
+						return beanObserve.getFragment();
+					}
 
-          public boolean equals(VariableDeclarationFragment key0, VariableDeclarationFragment key1) {
-            return key0 == key1;
-          }
+					public boolean equals(VariableDeclarationFragment key0, VariableDeclarationFragment key1) {
+						return key0 == key1;
+					}
 
-          public IObserveInfo findObject(Map<VariableDeclarationFragment, IObserveInfo> keyObjectToObject,
-              VariableDeclarationFragment key) throws Exception {
-            return null;
-          }
+					public IObserveInfo findObject(Map<VariableDeclarationFragment, IObserveInfo> keyObjectToObject,
+							VariableDeclarationFragment key) throws Exception {
+						return null;
+					}
 
-          public IObserveInfo createObject(VariableDeclarationFragment fragment) throws Exception {
-            Type type = CoreUtils.getType(fragment, true);
-            //
-            if (CoreUtils.isIncludeType(type)) {
-              // prepare bean type
-              ITypeBinding binding = AstNodeUtils.getTypeBinding(type);
-              if (binding != null) {
-                try {
-                  IGenericType beanObjectType = GenericUtils.getObjectType(editor, binding);
-                  // prepare association component
-                  JavaInfo component = getJavaInfoRepresentedBy(fragment.getName().getIdentifier());
-                  //
-                  return new FieldBeanObserveInfo(beanSupport, fragment, beanObjectType, component);
-                } catch (ClassNotFoundException e) {
-                  AbstractParser.addError(m_javaInfoRoot.getEditor(), "ClassNotFoundException: "
-                      + fragment, new Throwable());
-                }
-              }
-            }
-            return null;
-          }
+					public IObserveInfo createObject(VariableDeclarationFragment fragment) throws Exception {
+						Type type = CoreUtils.getType(fragment, true);
+						//
+						if (CoreUtils.isIncludeType(type)) {
+							// prepare bean type
+							ITypeBinding binding = AstNodeUtils.getTypeBinding(type);
+							if (binding != null) {
+								try {
+									IGenericType beanObjectType = GenericUtils.getObjectType(editor, binding);
+									// prepare association component
+									JavaInfo component = getJavaInfoRepresentedBy(fragment.getName().getIdentifier());
+									//
+									return new FieldBeanObserveInfo(beanSupport, fragment, beanObjectType, component);
+								} catch (ClassNotFoundException e) {
+									AbstractParser.addError(m_javaInfoRoot.getEditor(), "ClassNotFoundException: "
+											+ fragment, new Throwable());
+								}
+							}
+						}
+						return null;
+					}
 
-          public void update(IObserveInfo object) throws Exception {
-          }
-        });
-    // local variables
-    int observableSize = m_observes.size();
-    int localVariableIndex = observableSize;
-    //
-    for (int i = 0; i < observableSize; i++) {
-      if (m_observes.get(i) instanceof LocalVariableObserveInfo) {
-        localVariableIndex = i;
-        break;
-      }
-    }
-    //
-    SynchronizeManager.synchronizeObjects(
-        m_observes.subList(localVariableIndex, observableSize),
-        CoreUtils.getLocalFragments(rootNode, DataBindingsRootInfo.INIT_DATA_BINDINGS_METHOD_NAME),
-        new ISynchronizeProcessor<VariableDeclarationFragment, IObserveInfo>() {
-          public boolean handleObject(IObserveInfo object) {
-            return true;
-          }
+					public void update(IObserveInfo object) throws Exception {
+					}
+				});
+		// local variables
+		int observableSize = m_observes.size();
+		int localVariableIndex = observableSize;
+		//
+		for (int i = 0; i < observableSize; i++) {
+			if (m_observes.get(i) instanceof LocalVariableObserveInfo) {
+				localVariableIndex = i;
+				break;
+			}
+		}
+		//
+		SynchronizeManager.synchronizeObjects(
+				m_observes.subList(localVariableIndex, observableSize),
+				CoreUtils.getLocalFragments(rootNode, DataBindingsRootInfo.INIT_DATA_BINDINGS_METHOD_NAME),
+				new ISynchronizeProcessor<VariableDeclarationFragment, IObserveInfo>() {
+					public boolean handleObject(IObserveInfo object) {
+						return true;
+					}
 
-          public VariableDeclarationFragment getKeyObject(IObserveInfo observe) {
-            LocalVariableObserveInfo beanObserve = (LocalVariableObserveInfo) observe;
-            return beanObserve.getFragment();
-          }
+					public VariableDeclarationFragment getKeyObject(IObserveInfo observe) {
+						LocalVariableObserveInfo beanObserve = (LocalVariableObserveInfo) observe;
+						return beanObserve.getFragment();
+					}
 
-          public boolean equals(VariableDeclarationFragment fragment0,
-              VariableDeclarationFragment fragment1) {
-            return fragment0.getName().getIdentifier().equals(fragment1.getName().getIdentifier());
-          }
+					public boolean equals(VariableDeclarationFragment fragment0,
+							VariableDeclarationFragment fragment1) {
+						return fragment0.getName().getIdentifier().equals(fragment1.getName().getIdentifier());
+					}
 
-          public IObserveInfo findObject(Map<VariableDeclarationFragment, IObserveInfo> keyObjectToObject,
-              VariableDeclarationFragment key) throws Exception {
-            return null;
-          }
+					public IObserveInfo findObject(Map<VariableDeclarationFragment, IObserveInfo> keyObjectToObject,
+							VariableDeclarationFragment key) throws Exception {
+						return null;
+					}
 
-          public IObserveInfo createObject(VariableDeclarationFragment fragment) throws Exception {
-            try {
-              ITypeBinding binding = CoreUtils.getType(fragment, true);
-              // prepare bean class
-              IGenericType beanObjectType = GenericUtils.getObjectType(editor, binding);
-              //
-              return new LocalVariableObserveInfo(beanSupport, fragment, beanObjectType);
-            } catch (ClassNotFoundException e) {
-              AbstractParser.addError(m_javaInfoRoot.getEditor(), "ClassNotFoundException: "
-                  + fragment, new Throwable());
-              return null;
-            }
-          }
+					public IObserveInfo createObject(VariableDeclarationFragment fragment) throws Exception {
+						try {
+							ITypeBinding binding = CoreUtils.getType(fragment, true);
+							// prepare bean class
+							IGenericType beanObjectType = GenericUtils.getObjectType(editor, binding);
+							//
+							return new LocalVariableObserveInfo(beanSupport, fragment, beanObjectType);
+						} catch (ClassNotFoundException e) {
+							AbstractParser.addError(m_javaInfoRoot.getEditor(), "ClassNotFoundException: "
+									+ fragment, new Throwable());
+							return null;
+						}
+					}
 
-          public void update(IObserveInfo object) throws Exception {
-          }
-        });
-    //
-    m_observes.add(0, virtualObserve);
-  }
+					public void update(IObserveInfo object) throws Exception {
+					}
+				});
+		//
+		m_observes.add(0, virtualObserve);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parser
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void createObservables(JavaInfo root,
-      IModelResolver resolver,
-      AstEditor editor,
-      TypeDeclaration rootNode) throws Exception {
-    m_javaInfoRoot = root;
-    //
-    m_observes = Lists.newArrayList();
-    // add virtual
-    m_observes.add(new VirtualObserveInfo());
-    // handle fields
-    BeanSupport beanSupport = new BeanSupport();
-    for (VariableDeclarationFragment fragment : CoreUtils.getFieldFragments(rootNode)) {
-      try {
-        Type type = CoreUtils.getType(fragment, true);
-        //
-        if (CoreUtils.isIncludeType(type)) {
-          // prepare bean type
-          ITypeBinding binding = AstNodeUtils.getTypeBinding(type);
-          if (binding != null) {
-            IGenericType beanObjectType = GenericUtils.getObjectType(editor, binding);
-            // prepare association component
-            JavaInfo component = getJavaInfoRepresentedBy(fragment.getName().getIdentifier());
-            m_observes.add(new FieldBeanObserveInfo(beanSupport,
-                fragment,
-                beanObjectType,
-                component));
-          }
-        }
-      } catch (ClassNotFoundException e) {
-        AbstractParser.addError(editor, "ClassNotFoundException: " + fragment, new Throwable());
-      } catch (NoClassDefFoundError e) {
-        AbstractParser.addError(editor, "NoClassDefFoundError: " + fragment, new Throwable());
-      } catch (Throwable e) {
-        throw ReflectionUtils.propagate(e);
-      }
-    }
-    // handle initDataBindings() local variables
-    for (VariableDeclarationFragment fragment : CoreUtils.getLocalFragments(
-        rootNode,
-        DataBindingsRootInfo.INIT_DATA_BINDINGS_METHOD_NAME)) {
-      try {
-        ITypeBinding binding = CoreUtils.getType(fragment, true);
-        // prepare bean class
-        IGenericType beanObjectType = GenericUtils.getObjectType(editor, binding);
-        //
-        m_observes.add(new LocalVariableObserveInfo(beanSupport, fragment, beanObjectType));
-      } catch (ClassNotFoundException e) {
-        AbstractParser.addError(editor, "ClassNotFoundException: " + fragment, new Throwable());
-      } catch (NoClassDefFoundError e) {
-        AbstractParser.addError(editor, "NoClassDefFoundError: " + fragment, new Throwable());
-      } catch (Throwable e) {
-        throw ReflectionUtils.propagate(e);
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parser
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void createObservables(JavaInfo root,
+			IModelResolver resolver,
+			AstEditor editor,
+			TypeDeclaration rootNode) throws Exception {
+		m_javaInfoRoot = root;
+		//
+		m_observes = Lists.newArrayList();
+		// add virtual
+		m_observes.add(new VirtualObserveInfo());
+		// handle fields
+		BeanSupport beanSupport = new BeanSupport();
+		for (VariableDeclarationFragment fragment : CoreUtils.getFieldFragments(rootNode)) {
+			try {
+				Type type = CoreUtils.getType(fragment, true);
+				//
+				if (CoreUtils.isIncludeType(type)) {
+					// prepare bean type
+					ITypeBinding binding = AstNodeUtils.getTypeBinding(type);
+					if (binding != null) {
+						IGenericType beanObjectType = GenericUtils.getObjectType(editor, binding);
+						// prepare association component
+						JavaInfo component = getJavaInfoRepresentedBy(fragment.getName().getIdentifier());
+						m_observes.add(new FieldBeanObserveInfo(beanSupport,
+								fragment,
+								beanObjectType,
+								component));
+					}
+				}
+			} catch (ClassNotFoundException e) {
+				AbstractParser.addError(editor, "ClassNotFoundException: " + fragment, new Throwable());
+			} catch (NoClassDefFoundError e) {
+				AbstractParser.addError(editor, "NoClassDefFoundError: " + fragment, new Throwable());
+			} catch (Throwable e) {
+				throw ReflectionUtils.propagate(e);
+			}
+		}
+		// handle initDataBindings() local variables
+		for (VariableDeclarationFragment fragment : CoreUtils.getLocalFragments(
+				rootNode,
+				DataBindingsRootInfo.INIT_DATA_BINDINGS_METHOD_NAME)) {
+			try {
+				ITypeBinding binding = CoreUtils.getType(fragment, true);
+				// prepare bean class
+				IGenericType beanObjectType = GenericUtils.getObjectType(editor, binding);
+				//
+				m_observes.add(new LocalVariableObserveInfo(beanSupport, fragment, beanObjectType));
+			} catch (ClassNotFoundException e) {
+				AbstractParser.addError(editor, "ClassNotFoundException: " + fragment, new Throwable());
+			} catch (NoClassDefFoundError e) {
+				AbstractParser.addError(editor, "NoClassDefFoundError: " + fragment, new Throwable());
+			} catch (Throwable e) {
+				throw ReflectionUtils.propagate(e);
+			}
+		}
+	}
 
-  public AstObjectInfo parseExpression(AstEditor editor,
-      String signature,
-      ClassInstanceCreation creation,
-      Expression[] arguments,
-      IModelResolver resolver,
-      IDatabindingsProvider provider) throws Exception {
-    return null;
-  }
+	public AstObjectInfo parseExpression(AstEditor editor,
+			String signature,
+			ClassInstanceCreation creation,
+			Expression[] arguments,
+			IModelResolver resolver,
+			IDatabindingsProvider provider) throws Exception {
+		return null;
+	}
 
-  public AstObjectInfo parseExpression(AstEditor editor,
-      String signature,
-      MethodInvocation invocation,
-      Expression[] arguments,
-      IModelResolver resolver) throws Exception {
-    // ObjectProperty.create()
-    if (OBJECT_PROPERTY_CREATE.equals(signature)) {
-      IGenericType[] types = GenericUtils.getReturnTypeArguments(editor, invocation, 1);
-      return new ObjectPropertyInfo(types[0]);
-    }
-    // BeanProperty.create(String)
-    if (BEAN_PROPERTY_CREATE_1.equals(signature)) {
-      IGenericType[] types = GenericUtils.getReturnTypeArguments(editor, invocation, 2);
-      String path = CoreUtils.evaluate(String.class, editor, arguments[0]);
-      return new BeanPropertyInfo(types[0], types[1], null, path);
-    }
-    // BeanProperty.create(Property, String)
-    if (BEAN_PROPERTY_CREATE_2.equals(signature)) {
-      IGenericType[] types = GenericUtils.getReturnTypeArguments(editor, invocation, 2);
-      PropertyInfo baseProperty = (PropertyInfo) resolver.getModel(arguments[0]);
-      if (baseProperty == null) {
-        AbstractParser.addError(editor, MessageFormat.format(
-            Messages.BeansObserveTypeContainer_errArgumentNotFound,
-            arguments[0]), new Throwable());
-        return null;
-      }
-      GenericUtils.assertEquals(baseProperty.getSourceObjectType(), types[0]);
-      String path = CoreUtils.evaluate(String.class, editor, arguments[1]);
-      return new BeanPropertyInfo(types[0], types[1], baseProperty, path);
-    }
-    // ELProperty.create(String)
-    if (EL_PROPERTY_CREATE_1.equals(signature)) {
-      IGenericType[] types = GenericUtils.getReturnTypeArguments(editor, invocation, 2);
-      String path = CoreUtils.evaluate(String.class, editor, arguments[0]);
-      return new ElPropertyInfo(types[0], types[1], null, path);
-    }
-    // ELProperty.create(Property, String)
-    if (EL_PROPERTY_CREATE_2.equals(signature)) {
-      IGenericType[] types = GenericUtils.getReturnTypeArguments(editor, invocation, 2);
-      PropertyInfo baseProperty = (PropertyInfo) resolver.getModel(arguments[0]);
-      if (baseProperty == null) {
-        AbstractParser.addError(editor, MessageFormat.format(
-            Messages.BeansObserveTypeContainer_errArgumentNotFound,
-            arguments[0]), new Throwable());
-        return null;
-      }
-      GenericUtils.assertEquals(baseProperty.getSourceObjectType(), types[0]);
-      String path = CoreUtils.evaluate(String.class, editor, arguments[1]);
-      return new ElPropertyInfo(types[0], types[1], baseProperty, path);
-    }
-    return null;
-  }
+	public AstObjectInfo parseExpression(AstEditor editor,
+			String signature,
+			MethodInvocation invocation,
+			Expression[] arguments,
+			IModelResolver resolver) throws Exception {
+		// ObjectProperty.create()
+		if (OBJECT_PROPERTY_CREATE.equals(signature)) {
+			IGenericType[] types = GenericUtils.getReturnTypeArguments(editor, invocation, 1);
+			return new ObjectPropertyInfo(types[0]);
+		}
+		// BeanProperty.create(String)
+		if (BEAN_PROPERTY_CREATE_1.equals(signature)) {
+			IGenericType[] types = GenericUtils.getReturnTypeArguments(editor, invocation, 2);
+			String path = CoreUtils.evaluate(String.class, editor, arguments[0]);
+			return new BeanPropertyInfo(types[0], types[1], null, path);
+		}
+		// BeanProperty.create(Property, String)
+		if (BEAN_PROPERTY_CREATE_2.equals(signature)) {
+			IGenericType[] types = GenericUtils.getReturnTypeArguments(editor, invocation, 2);
+			PropertyInfo baseProperty = (PropertyInfo) resolver.getModel(arguments[0]);
+			if (baseProperty == null) {
+				AbstractParser.addError(editor, MessageFormat.format(
+						Messages.BeansObserveTypeContainer_errArgumentNotFound,
+						arguments[0]), new Throwable());
+				return null;
+			}
+			GenericUtils.assertEquals(baseProperty.getSourceObjectType(), types[0]);
+			String path = CoreUtils.evaluate(String.class, editor, arguments[1]);
+			return new BeanPropertyInfo(types[0], types[1], baseProperty, path);
+		}
+		// ELProperty.create(String)
+		if (EL_PROPERTY_CREATE_1.equals(signature)) {
+			IGenericType[] types = GenericUtils.getReturnTypeArguments(editor, invocation, 2);
+			String path = CoreUtils.evaluate(String.class, editor, arguments[0]);
+			return new ElPropertyInfo(types[0], types[1], null, path);
+		}
+		// ELProperty.create(Property, String)
+		if (EL_PROPERTY_CREATE_2.equals(signature)) {
+			IGenericType[] types = GenericUtils.getReturnTypeArguments(editor, invocation, 2);
+			PropertyInfo baseProperty = (PropertyInfo) resolver.getModel(arguments[0]);
+			if (baseProperty == null) {
+				AbstractParser.addError(editor, MessageFormat.format(
+						Messages.BeansObserveTypeContainer_errArgumentNotFound,
+						arguments[0]), new Throwable());
+				return null;
+			}
+			GenericUtils.assertEquals(baseProperty.getSourceObjectType(), types[0]);
+			String path = CoreUtils.evaluate(String.class, editor, arguments[1]);
+			return new ElPropertyInfo(types[0], types[1], baseProperty, path);
+		}
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ObserveInfo resolve(Expression expression) throws Exception {
-    String reference = CoreUtils.getNodeReference(expression);
-    for (ObserveInfo observe : CoreUtils.<ObserveInfo>cast(m_observes)) {
-      if (reference.equals(observe.getReference())) {
-        return observe;
-      }
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ObserveInfo resolve(Expression expression) throws Exception {
+		String reference = CoreUtils.getNodeReference(expression);
+		for (ObserveInfo observe : CoreUtils.<ObserveInfo>cast(m_observes)) {
+			if (reference.equals(observe.getReference())) {
+				return observe;
+			}
+		}
+		return null;
+	}
 
-  public ObserveInfo resolve(JavaInfo javaInfo) throws Exception {
-    String reference = JavaInfoReferenceProvider.getReference(javaInfo);
-    Assert.isNotNull(reference);
-    for (ObserveInfo observe : CoreUtils.<ObserveInfo>cast(m_observes)) {
-      if (reference.equals(observe.getReference())) {
-        return observe;
-      }
-    }
-    return null;
-  }
+	public ObserveInfo resolve(JavaInfo javaInfo) throws Exception {
+		String reference = JavaInfoReferenceProvider.getReference(javaInfo);
+		Assert.isNotNull(reference);
+		for (ObserveInfo observe : CoreUtils.<ObserveInfo>cast(m_observes)) {
+			if (reference.equals(observe.getReference())) {
+				return observe;
+			}
+		}
+		return null;
+	}
 
-  private JavaInfo getJavaInfoRepresentedBy(final String variable) {
-    final JavaInfo result[] = new JavaInfo[1];
-    m_javaInfoRoot.accept(new ObjectInfoVisitor() {
-      @Override
-      public boolean visit(ObjectInfo objectInfo) throws Exception {
-        if (result[0] == null && objectInfo instanceof JavaInfo) {
-          JavaInfo javaInfo = (JavaInfo) objectInfo;
-          if (variable.equals(JavaInfoReferenceProvider.getReference(javaInfo))) {
-            result[0] = javaInfo;
-          }
-        }
-        return result[0] == null;
-      }
-    });
-    return result[0];
-  }
+	private JavaInfo getJavaInfoRepresentedBy(final String variable) {
+		final JavaInfo result[] = new JavaInfo[1];
+		m_javaInfoRoot.accept(new ObjectInfoVisitor() {
+			@Override
+			public boolean visit(ObjectInfo objectInfo) throws Exception {
+				if (result[0] == null && objectInfo instanceof JavaInfo) {
+					JavaInfo javaInfo = (JavaInfo) objectInfo;
+					if (variable.equals(JavaInfoReferenceProvider.getReference(javaInfo))) {
+						result[0] = javaInfo;
+					}
+				}
+				return result[0] == null;
+			}
+		});
+		return result[0];
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/beans/ElPropertyObserveInfo.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/beans/ElPropertyObserveInfo.java
index 7c032d1f9..edb17451a 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/beans/ElPropertyObserveInfo.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/beans/ElPropertyObserveInfo.java
@@ -39,83 +39,83 @@
  * @coverage bindings.swing.model.beans
  */
 public final class ElPropertyObserveInfo extends ObserveInfo implements IObserveDecoration {
-  private static final ElPropertyUiConfiguration CONFIGURATION = new ElPropertyUiConfiguration();
-  private final ObserveInfo m_parent;
-  private final IObservePresentation m_presentation;
+	private static final ElPropertyUiConfiguration CONFIGURATION = new ElPropertyUiConfiguration();
+	private final ObserveInfo m_parent;
+	private final IObservePresentation m_presentation;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ElPropertyObserveInfo(ObserveInfo parent, IGenericType objectType) {
-    super(objectType, StringReferenceProvider.EMPTY);
-    m_parent = parent instanceof BeanPropertyObserveInfo ? parent : null;
-    m_presentation =
-        new SimpleObservePresentation("<EL Expression>",
-            "${XXX}",
-            TypeImageProvider.EL_PROPERTY_IMAGE);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ElPropertyObserveInfo(ObserveInfo parent, IGenericType objectType) {
+		super(objectType, StringReferenceProvider.EMPTY);
+		m_parent = parent instanceof BeanPropertyObserveInfo ? parent : null;
+		m_presentation =
+				new SimpleObservePresentation("<EL Expression>",
+						"${XXX}",
+						TypeImageProvider.EL_PROPERTY_IMAGE);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ObserveType
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ObserveType getType() {
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ObserveType
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ObserveType getType() {
+		return null;
+	}
 
-  @Override
-  public ObserveCreationType getCreationType() {
-    return ObserveCreationType.AnyProperty;
-  }
+	@Override
+	public ObserveCreationType getCreationType() {
+		return ObserveCreationType.AnyProperty;
+	}
 
-  @Override
-  public PropertyInfo createProperty(ObserveInfo observeObject) throws Exception {
-    return new ElPropertyInfo(observeObject.getObjectType(),
-        ClassGenericType.OBJECT_CLASS,
-        m_parent == null ? null : m_parent.createProperty(observeObject),
-        "");
-  }
+	@Override
+	public PropertyInfo createProperty(ObserveInfo observeObject) throws Exception {
+		return new ElPropertyInfo(observeObject.getObjectType(),
+				ClassGenericType.OBJECT_CLASS,
+				m_parent == null ? null : m_parent.createProperty(observeObject),
+						"");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Hierarchy
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public IObserveInfo getParent() {
-    return m_parent;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Hierarchy
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public IObserveInfo getParent() {
+		return m_parent;
+	}
 
-  public List<IObserveInfo> getChildren(ChildrenContext context) {
-    return Collections.emptyList();
-  }
+	public List<IObserveInfo> getChildren(ChildrenContext context) {
+		return Collections.emptyList();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public IObservePresentation getPresentation() {
-    return m_presentation;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public IObservePresentation getPresentation() {
+		return m_presentation;
+	}
 
-  public IObserveDecorator getDecorator() {
-    return IObserveDecorator.BOLD;
-  }
+	public IObserveDecorator getDecorator() {
+		return IObserveDecorator.BOLD;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void createContentProviders(List<IUiContentProvider> providers,
-      ObserveInfo observeObject,
-      PropertyInfo observeAstProperty) throws Exception {
-    providers.add(new ElPropertyUiContentProvider(CONFIGURATION,
-        (ElPropertyInfo) observeAstProperty));
-    providers.add(new SeparatorUiContentProvider());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void createContentProviders(List<IUiContentProvider> providers,
+			ObserveInfo observeObject,
+			PropertyInfo observeAstProperty) throws Exception {
+		providers.add(new ElPropertyUiContentProvider(CONFIGURATION,
+				(ElPropertyInfo) observeAstProperty));
+		providers.add(new SeparatorUiContentProvider());
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/beans/FieldBeanObserveInfo.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/beans/FieldBeanObserveInfo.java
index 2f1575c9a..2bd87e934 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/beans/FieldBeanObserveInfo.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/beans/FieldBeanObserveInfo.java
@@ -25,43 +25,43 @@
  * @coverage bindings.swing.model.beans
  */
 public final class FieldBeanObserveInfo extends BeanObserveInfo {
-  private final VariableDeclarationFragment m_fragment;
-  private final IObservePresentation m_presentation;
+	private final VariableDeclarationFragment m_fragment;
+	private final IObservePresentation m_presentation;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FieldBeanObserveInfo(BeanSupport beanSupport,
-      VariableDeclarationFragment fragment,
-      IGenericType objectType,
-      JavaInfo javaInfo) throws Exception {
-    super(beanSupport, null, objectType, new FragmentReferenceProvider(fragment));
-    setBindingDecoration(SwtResourceManager.TOP_LEFT);
-    m_fragment = fragment;
-    m_presentation =
-        new FieldBeanObservePresentation(this, javaInfo, beanSupport.getBeanImage(
-            getObjectClass(),
-            javaInfo,
-            true));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FieldBeanObserveInfo(BeanSupport beanSupport,
+			VariableDeclarationFragment fragment,
+			IGenericType objectType,
+			JavaInfo javaInfo) throws Exception {
+		super(beanSupport, null, objectType, new FragmentReferenceProvider(fragment));
+		setBindingDecoration(SwtResourceManager.TOP_LEFT);
+		m_fragment = fragment;
+		m_presentation =
+				new FieldBeanObservePresentation(this, javaInfo, beanSupport.getBeanImage(
+						getObjectClass(),
+						javaInfo,
+						true));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public VariableDeclarationFragment getFragment() {
-    return m_fragment;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public VariableDeclarationFragment getFragment() {
+		return m_fragment;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public IObservePresentation getPresentation() {
-    return m_presentation;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public IObservePresentation getPresentation() {
+		return m_presentation;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/beans/FieldBeanObservePresentation.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/beans/FieldBeanObservePresentation.java
index b57afe1a1..665f7679e 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/beans/FieldBeanObservePresentation.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/beans/FieldBeanObservePresentation.java
@@ -22,46 +22,46 @@
  * @coverage bindings.swing.model.beans
  */
 public final class FieldBeanObservePresentation extends ObservePresentation {
-  private final FieldBeanObserveInfo m_observe;
-  private final JavaInfo m_javaInfo;
-  private final Image m_beanImage;
+	private final FieldBeanObserveInfo m_observe;
+	private final JavaInfo m_javaInfo;
+	private final Image m_beanImage;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FieldBeanObservePresentation(FieldBeanObserveInfo observe,
-      JavaInfo javaInfo,
-      Image beanImage) {
-    m_observe = observe;
-    m_javaInfo = javaInfo;
-    m_beanImage = beanImage;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FieldBeanObservePresentation(FieldBeanObserveInfo observe,
+			JavaInfo javaInfo,
+			Image beanImage) {
+		m_observe = observe;
+		m_javaInfo = javaInfo;
+		m_beanImage = beanImage;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ObservePresentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Image getInternalImage() throws Exception {
-    if (m_beanImage == null && m_javaInfo == null) {
-      return null;
-    }
-    return m_beanImage == null ? m_javaInfo.getPresentation().getIcon() : m_beanImage;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ObservePresentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Image getInternalImage() throws Exception {
+		if (m_beanImage == null && m_javaInfo == null) {
+			return null;
+		}
+		return m_beanImage == null ? m_javaInfo.getPresentation().getIcon() : m_beanImage;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IObservePresentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public String getText() throws Exception {
-    return m_observe.getReference() + " - " + m_observe.getObjectType().getSimpleTypeName();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IObservePresentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public String getText() throws Exception {
+		return m_observe.getReference() + " - " + m_observe.getObjectType().getSimpleTypeName();
+	}
 
-  public String getTextForBinding() throws Exception {
-    return m_observe.getReference();
-  }
+	public String getTextForBinding() throws Exception {
+		return m_observe.getReference();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/beans/LocalVariableObserveInfo.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/beans/LocalVariableObserveInfo.java
index 89f42b8ee..d873b4e93 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/beans/LocalVariableObserveInfo.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/beans/LocalVariableObserveInfo.java
@@ -26,49 +26,49 @@
  * @coverage bindings.swing.model.beans
  */
 public final class LocalVariableObserveInfo extends BeanObserveInfo {
-  private final VariableDeclarationFragment m_fragment;
-  private final IObservePresentation m_presentation;
+	private final VariableDeclarationFragment m_fragment;
+	private final IObservePresentation m_presentation;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public LocalVariableObserveInfo(BeanSupport beanSupport,
-      VariableDeclarationFragment fragment,
-      IGenericType objectType) throws Exception {
-    super(beanSupport, null, objectType, new FragmentReferenceProvider(fragment));
-    setBindingDecoration(SwtResourceManager.TOP_LEFT);
-    m_fragment = fragment;
-    m_presentation =
-        new SimpleObservePresentation(null, null, Activator.getImage("localvariable_obj.gif")) {
-          @Override
-          public String getText() throws Exception {
-            return getReference() + " - " + getObjectType().getSimpleTypeName();
-          }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public LocalVariableObserveInfo(BeanSupport beanSupport,
+			VariableDeclarationFragment fragment,
+			IGenericType objectType) throws Exception {
+		super(beanSupport, null, objectType, new FragmentReferenceProvider(fragment));
+		setBindingDecoration(SwtResourceManager.TOP_LEFT);
+		m_fragment = fragment;
+		m_presentation =
+				new SimpleObservePresentation(null, null, Activator.getImage("localvariable_obj.gif")) {
+			@Override
+			public String getText() throws Exception {
+				return getReference() + " - " + getObjectType().getSimpleTypeName();
+			}
 
-          @Override
-          public String getTextForBinding() throws Exception {
-            return getReference();
-          }
-        };
-  }
+			@Override
+			public String getTextForBinding() throws Exception {
+				return getReference();
+			}
+		};
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public VariableDeclarationFragment getFragment() {
-    return m_fragment;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public VariableDeclarationFragment getFragment() {
+		return m_fragment;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public IObservePresentation getPresentation() {
-    return m_presentation;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public IObservePresentation getPresentation() {
+		return m_presentation;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/beans/ObjectPropertyObserveInfo.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/beans/ObjectPropertyObserveInfo.java
index a9ec0a263..74cd438e0 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/beans/ObjectPropertyObserveInfo.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/beans/ObjectPropertyObserveInfo.java
@@ -35,77 +35,77 @@
  * @coverage bindings.swing.model.beans
  */
 public final class ObjectPropertyObserveInfo extends ObserveInfo implements IObserveDecoration {
-  private final ObserveCreationType m_creationType;
-  private final IObservePresentation m_presentation;
+	private final ObserveCreationType m_creationType;
+	private final IObservePresentation m_presentation;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ObjectPropertyObserveInfo(IGenericType objectType) {
-    super(objectType, StringReferenceProvider.EMPTY);
-    setBindingDecoration(SwtResourceManager.TOP_LEFT);
-    m_creationType =
-        java.util.List.class.isAssignableFrom(getObjectClass())
-            ? ObserveCreationType.ListSelfProperty
-            : ObserveCreationType.SelfProperty;
-    m_presentation =
-        new SimpleObservePresentation("<Self Object>", "", TypeImageProvider.OBJECT_PROPERTY_IMAGE);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ObjectPropertyObserveInfo(IGenericType objectType) {
+		super(objectType, StringReferenceProvider.EMPTY);
+		setBindingDecoration(SwtResourceManager.TOP_LEFT);
+		m_creationType =
+				java.util.List.class.isAssignableFrom(getObjectClass())
+				? ObserveCreationType.ListSelfProperty
+						: ObserveCreationType.SelfProperty;
+		m_presentation =
+				new SimpleObservePresentation("<Self Object>", "", TypeImageProvider.OBJECT_PROPERTY_IMAGE);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean canShared() {
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean canShared() {
+		return true;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ObserveType
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ObserveType getType() {
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ObserveType
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ObserveType getType() {
+		return null;
+	}
 
-  @Override
-  public ObserveCreationType getCreationType() {
-    return m_creationType;
-  }
+	@Override
+	public ObserveCreationType getCreationType() {
+		return m_creationType;
+	}
 
-  @Override
-  public PropertyInfo createProperty(ObserveInfo observeObject) throws Exception {
-    return new ObjectPropertyInfo(getObjectType());
-  }
+	@Override
+	public PropertyInfo createProperty(ObserveInfo observeObject) throws Exception {
+		return new ObjectPropertyInfo(getObjectType());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Hierarchy
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public IObserveInfo getParent() {
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Hierarchy
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public IObserveInfo getParent() {
+		return null;
+	}
 
-  public List<IObserveInfo> getChildren(ChildrenContext context) {
-    return Collections.emptyList();
-  }
+	public List<IObserveInfo> getChildren(ChildrenContext context) {
+		return Collections.emptyList();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public IObservePresentation getPresentation() {
-    return m_presentation;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public IObservePresentation getPresentation() {
+		return m_presentation;
+	}
 
-  public IObserveDecorator getDecorator() {
-    return IObserveDecorator.BOLD;
-  }
+	public IObserveDecorator getDecorator() {
+		return IObserveDecorator.BOLD;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/beans/PropertiesObserveInfo.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/beans/PropertiesObserveInfo.java
index 700df0dd3..d319ed238 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/beans/PropertiesObserveInfo.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/beans/PropertiesObserveInfo.java
@@ -32,51 +32,51 @@
  * @coverage bindings.swing.model.beans
  */
 public final class PropertiesObserveInfo extends BeanPropertyObserveInfo {
-  private final String[] m_properties;
+	private final String[] m_properties;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public PropertiesObserveInfo(BeanSupport beanSupport,
-      ObserveInfo parent,
-      String text,
-      IGenericType objectType,
-      IReferenceProvider referenceProvider,
-      IObserveDecorator decorator,
-      String[] properties) throws Exception {
-    super(beanSupport, parent, text, objectType, referenceProvider, decorator);
-    setBindingDecoration(SwtResourceManager.TOP_LEFT);
-    m_properties = properties;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public PropertiesObserveInfo(BeanSupport beanSupport,
+			ObserveInfo parent,
+			String text,
+			IGenericType objectType,
+			IReferenceProvider referenceProvider,
+			IObserveDecorator decorator,
+			String[] properties) throws Exception {
+		super(beanSupport, parent, text, objectType, referenceProvider, decorator);
+		setBindingDecoration(SwtResourceManager.TOP_LEFT);
+		m_properties = properties;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean canShared() {
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean canShared() {
+		return false;
+	}
 
-  @Override
-  public boolean isRepresentedBy(String reference) throws Exception {
-    return ArrayUtils.contains(m_properties, reference);
-  }
+	@Override
+	public boolean isRepresentedBy(String reference) throws Exception {
+		return ArrayUtils.contains(m_properties, reference);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void createContentProviders(List<IUiContentProvider> providers,
-      ObserveInfo observeObject,
-      PropertyInfo observeAstProperty) throws Exception {
-    providers.add(new PropertiesUiContentProvider((BeanPropertyInfo) observeAstProperty,
-        m_properties));
-    providers.add(new SeparatorUiContentProvider());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void createContentProviders(List<IUiContentProvider> providers,
+			ObserveInfo observeObject,
+			PropertyInfo observeAstProperty) throws Exception {
+		providers.add(new PropertiesUiContentProvider((BeanPropertyInfo) observeAstProperty,
+				m_properties));
+		providers.add(new SeparatorUiContentProvider());
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/beans/VirtualObserveInfo.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/beans/VirtualObserveInfo.java
index 14182e656..29a7073a4 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/beans/VirtualObserveInfo.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/beans/VirtualObserveInfo.java
@@ -26,37 +26,37 @@
  * @coverage bindings.swing.model.beans
  */
 public final class VirtualObserveInfo extends BeanObserveInfo {
-  private final IObservePresentation m_presentation;
+	private final IObservePresentation m_presentation;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public VirtualObserveInfo() {
-    super(null, null, ClassGenericType.LIST_CLASS, StringReferenceProvider.EMPTY);
-    setBindingDecoration(SwtResourceManager.TOP_LEFT);
-    m_presentation =
-        new SimpleObservePresentation("[Virtual]", "[Virtual]", Activator.getImage("virtual.png"));
-    setProperties(ImmutableList.<ObserveInfo>of(new ObjectPropertyObserveInfo(getObjectType())));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public VirtualObserveInfo() {
+		super(null, null, ClassGenericType.LIST_CLASS, StringReferenceProvider.EMPTY);
+		setBindingDecoration(SwtResourceManager.TOP_LEFT);
+		m_presentation =
+				new SimpleObservePresentation("[Virtual]", "[Virtual]", Activator.getImage("virtual.png"));
+		setProperties(ImmutableList.<ObserveInfo>of(new ObjectPropertyObserveInfo(getObjectType())));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Type
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public ObserveCreationType getCreationType() {
-    return ObserveCreationType.VirtualBinding;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Type
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public ObserveCreationType getCreationType() {
+		return ObserveCreationType.VirtualBinding;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public IObservePresentation getPresentation() {
-    return m_presentation;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public IObservePresentation getPresentation() {
+		return m_presentation;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/bindings/AutoBindingInfo.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/bindings/AutoBindingInfo.java
index 9cd9bd1b2..e41b38a78 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/bindings/AutoBindingInfo.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/bindings/AutoBindingInfo.java
@@ -32,151 +32,151 @@
  * @coverage bindings.swing.model.bindings
  */
 public class AutoBindingInfo extends BindingInfo {
-  protected final UpdateStrategyInfo m_strategyInfo;
+	protected final UpdateStrategyInfo m_strategyInfo;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AutoBindingInfo(UpdateStrategyInfo strategyInfo,
-      ObserveInfo target,
-      ObserveInfo targetProperty,
-      PropertyInfo targetAstProperty,
-      ObserveInfo model,
-      ObserveInfo modelProperty,
-      PropertyInfo modelAstProperty) {
-    super(target, targetProperty, targetAstProperty, model, modelProperty, modelAstProperty);
-    m_strategyInfo = strategyInfo;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AutoBindingInfo(UpdateStrategyInfo strategyInfo,
+			ObserveInfo target,
+			ObserveInfo targetProperty,
+			PropertyInfo targetAstProperty,
+			ObserveInfo model,
+			ObserveInfo modelProperty,
+			PropertyInfo modelAstProperty) {
+		super(target, targetProperty, targetAstProperty, model, modelProperty, modelAstProperty);
+		m_strategyInfo = strategyInfo;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public final UpdateStrategyInfo getStrategyInfo() {
-    return m_strategyInfo;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public final UpdateStrategyInfo getStrategyInfo() {
+		return m_strategyInfo;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Create {@link IUiContentProvider} content providers for edit this model.
-   */
-  @Override
-  public void createContentProviders(List<BindingInfo> bindings,
-      List<IUiContentProvider> providers,
-      IPageListener listener,
-      DatabindingsProvider provider) throws Exception {
-    super.createContentProviders(bindings, providers, listener, provider);
-    providers.add(0, new UpdateStrategyUiContentProvider(m_strategyInfo));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Create {@link IUiContentProvider} content providers for edit this model.
+	 */
+	@Override
+	public void createContentProviders(List<BindingInfo> bindings,
+			List<IUiContentProvider> providers,
+			IPageListener listener,
+			DatabindingsProvider provider) throws Exception {
+		super.createContentProviders(bindings, providers, listener, provider);
+		providers.add(0, new UpdateStrategyUiContentProvider(m_strategyInfo));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  //  Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void addSourceCode(List<String> lines, CodeGenerationSupport generationSupport)
-      throws Exception {
-    // handle variable
-    if (getVariableIdentifier() == null) {
-      setVariableIdentifier(generationSupport.generateLocalName("AutoBinding"));
-    }
-    // begin
-    StringBuffer line = new StringBuffer();
-    boolean localVariable = !isField();
-    if (localVariable) {
-      line.append("org.jdesktop.beansbinding.AutoBinding");
-    }
-    if (m_modelAstProperty instanceof ObjectPropertyInfo) {
-      generationSupport.addSourceCode(m_targetAstProperty, lines);
-      if (localVariable) {
-        appendGenericTypes(line, generationSupport);
-        line.append(" ");
-      }
-      line.append(getVariableIdentifier());
-      line.append(" = org.jdesktop.beansbinding.Bindings.createAutoBinding(");
-      line.append(m_strategyInfo.getStrategySourceCode());
-      line.append(", ");
-      line.append(m_model.getReference());
-      line.append(", ");
-      line.append(m_target.getReference());
-      line.append(", ");
-      line.append(m_targetAstProperty.getVariableIdentifier());
-    } else {
-      generationSupport.addSourceCode(m_modelAstProperty, lines);
-      generationSupport.addSourceCode(m_targetAstProperty, lines);
-      if (localVariable) {
-        appendGenericTypes(line, generationSupport);
-        line.append(" ");
-      }
-      line.append(getVariableIdentifier());
-      line.append(" = org.jdesktop.beansbinding.Bindings.createAutoBinding(");
-      line.append(m_strategyInfo.getStrategySourceCode());
-      line.append(", ");
-      line.append(m_model.getReference());
-      line.append(", ");
-      line.append(m_modelAstProperty.getVariableIdentifier());
-      line.append(", ");
-      line.append(m_target.getReference());
-      line.append(", ");
-      line.append(m_targetAstProperty.getVariableIdentifier());
-    }
-    // end
-    line.append(getCreateMethodHeaderEnd());
-    line.append(";");
-    lines.add(line.toString());
-    // converter & validator
-    addFinishSourceCode(lines, generationSupport, true);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	//  Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void addSourceCode(List<String> lines, CodeGenerationSupport generationSupport)
+			throws Exception {
+		// handle variable
+		if (getVariableIdentifier() == null) {
+			setVariableIdentifier(generationSupport.generateLocalName("AutoBinding"));
+		}
+		// begin
+		StringBuffer line = new StringBuffer();
+		boolean localVariable = !isField();
+		if (localVariable) {
+			line.append("org.jdesktop.beansbinding.AutoBinding");
+		}
+		if (m_modelAstProperty instanceof ObjectPropertyInfo) {
+			generationSupport.addSourceCode(m_targetAstProperty, lines);
+			if (localVariable) {
+				appendGenericTypes(line, generationSupport);
+				line.append(" ");
+			}
+			line.append(getVariableIdentifier());
+			line.append(" = org.jdesktop.beansbinding.Bindings.createAutoBinding(");
+			line.append(m_strategyInfo.getStrategySourceCode());
+			line.append(", ");
+			line.append(m_model.getReference());
+			line.append(", ");
+			line.append(m_target.getReference());
+			line.append(", ");
+			line.append(m_targetAstProperty.getVariableIdentifier());
+		} else {
+			generationSupport.addSourceCode(m_modelAstProperty, lines);
+			generationSupport.addSourceCode(m_targetAstProperty, lines);
+			if (localVariable) {
+				appendGenericTypes(line, generationSupport);
+				line.append(" ");
+			}
+			line.append(getVariableIdentifier());
+			line.append(" = org.jdesktop.beansbinding.Bindings.createAutoBinding(");
+			line.append(m_strategyInfo.getStrategySourceCode());
+			line.append(", ");
+			line.append(m_model.getReference());
+			line.append(", ");
+			line.append(m_modelAstProperty.getVariableIdentifier());
+			line.append(", ");
+			line.append(m_target.getReference());
+			line.append(", ");
+			line.append(m_targetAstProperty.getVariableIdentifier());
+		}
+		// end
+		line.append(getCreateMethodHeaderEnd());
+		line.append(";");
+		lines.add(line.toString());
+		// converter & validator
+		addFinishSourceCode(lines, generationSupport, true);
+	}
 
-  private void appendGenericTypes(StringBuffer line, CodeGenerationSupport generationSupport) {
-    if (generationSupport.useGenerics()) {
-      line.append(GenericUtils.getTypesSource(
-          m_modelAstProperty.getSourceObjectType(),
-          m_modelAstProperty.getValueType(),
-          m_targetAstProperty.getSourceObjectType(),
-          m_targetAstProperty.getValueType()));
-    }
-  }
+	private void appendGenericTypes(StringBuffer line, CodeGenerationSupport generationSupport) {
+		if (generationSupport.useGenerics()) {
+			line.append(GenericUtils.getTypesSource(
+					m_modelAstProperty.getSourceObjectType(),
+					m_modelAstProperty.getValueType(),
+					m_targetAstProperty.getSourceObjectType(),
+					m_targetAstProperty.getValueType()));
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IASTObjectInfo2
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void setVariableIdentifier(JavaInfo javaInfoRoot, String variable, boolean field) {
-    String type = "org.jdesktop.beansbinding.AutoBinding";
-    if (CoreUtils.useGenerics(javaInfoRoot.getEditor().getJavaProject())) {
-      type +=
-          GenericUtils.getTypesSource(
-              m_modelAstProperty.getSourceObjectType(),
-              m_modelAstProperty.getValueType(),
-              m_targetAstProperty.getSourceObjectType(),
-              m_targetAstProperty.getValueType());
-    }
-    setVariableIdentifier(javaInfoRoot, type, variable, field);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IASTObjectInfo2
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void setVariableIdentifier(JavaInfo javaInfoRoot, String variable, boolean field) {
+		String type = "org.jdesktop.beansbinding.AutoBinding";
+		if (CoreUtils.useGenerics(javaInfoRoot.getEditor().getJavaProject())) {
+			type +=
+					GenericUtils.getTypesSource(
+							m_modelAstProperty.getSourceObjectType(),
+							m_modelAstProperty.getValueType(),
+							m_targetAstProperty.getSourceObjectType(),
+							m_targetAstProperty.getValueType());
+		}
+		setVariableIdentifier(javaInfoRoot, type, variable, field);
+	}
 
-  protected static String getTypeSource(ObserveInfo model,
-      ObserveInfo modelProperty,
-      PropertyInfo modelAstProperty,
-      IGenericType genericType) {
-    if (modelAstProperty instanceof ObjectPropertyInfo) {
-      return GenericUtils.getTypesSource(
-          model.getObjectType().getSubType(0),
-          model.getObjectType(),
-          genericType);
-    }
-    return GenericUtils.getTypesSource(
-        modelProperty.getObjectType().getSubType(0),
-        model.getObjectType(),
-        genericType);
-  }
+	protected static String getTypeSource(ObserveInfo model,
+			ObserveInfo modelProperty,
+			PropertyInfo modelAstProperty,
+			IGenericType genericType) {
+		if (modelAstProperty instanceof ObjectPropertyInfo) {
+			return GenericUtils.getTypesSource(
+					model.getObjectType().getSubType(0),
+					model.getObjectType(),
+					genericType);
+		}
+		return GenericUtils.getTypesSource(
+				modelProperty.getObjectType().getSubType(0),
+				model.getObjectType(),
+				genericType);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/bindings/BindingInfo.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/bindings/BindingInfo.java
index da6dcacbd..6a238a34c 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/bindings/BindingInfo.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/bindings/BindingInfo.java
@@ -63,398 +63,398 @@
  * @coverage bindings.swing.model.bindings
  */
 public abstract class BindingInfo extends AstObjectInfo implements IBindingInfo, IASTObjectInfo2 {
-  private static final String SET_CONVERTER =
-      "org.jdesktop.beansbinding.Binding.setConverter(org.jdesktop.beansbinding.Converter)";
-  private static final String SET_VALIDATOR =
-      "org.jdesktop.beansbinding.Binding.setValidator(org.jdesktop.beansbinding.Validator)";
-  //
-  private static ChooseClassConfiguration m_converterConfiguration;
-  private static ChooseClassConfiguration m_validatorConfiguration;
-  //
-  protected final ObserveInfo m_target;
-  protected final ObserveInfo m_targetProperty;
-  protected final PropertyInfo m_targetAstProperty;
-  protected final ObserveInfo m_model;
-  protected final ObserveInfo m_modelProperty;
-  protected final PropertyInfo m_modelAstProperty;
-  protected ConverterInfo m_converter;
-  protected ValidatorInfo m_validator;
-  private String m_name;
-  private boolean m_field;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public BindingInfo(ObserveInfo target,
-      ObserveInfo targetProperty,
-      PropertyInfo targetAstProperty,
-      ObserveInfo model,
-      ObserveInfo modelProperty,
-      PropertyInfo modelAstProperty) {
-    m_target = target;
-    m_targetProperty = targetProperty;
-    m_targetAstProperty = targetAstProperty;
-    m_model = model;
-    m_modelProperty = modelProperty;
-    m_modelAstProperty = modelAstProperty;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Target
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public final IObserveInfo getTarget() {
-    return m_target;
-  }
-
-  public final IObserveInfo getTargetProperty() {
-    return m_targetProperty;
-  }
-
-  public IGenericType getTargetPropertyType() {
-    return m_targetProperty.getObjectType();
-  }
-
-  public final PropertyInfo getTargetAstProperty() {
-    return m_targetAstProperty;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Model
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public final IObserveInfo getModel() {
-    return m_model;
-  }
-
-  public final IObserveInfo getModelProperty() {
-    return m_modelProperty;
-  }
-
-  public IGenericType getModelPropertyType() {
-    return m_modelProperty.getObjectType();
-  }
-
-  public final PropertyInfo getModelAstProperty() {
-    return m_modelAstProperty;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public String getName() {
-    return m_name;
-  }
-
-  public void setName(String name) {
-    m_name = name;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Converter
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public final ConverterInfo getConverter() {
-    return m_converter;
-  }
-
-  public final void setConverter(ConverterInfo converter) {
-    m_converter = converter;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Validator
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public final ValidatorInfo getValidator() {
-    return m_validator;
-  }
-
-  public final void setValidator(ValidatorInfo validator) {
-    m_validator = validator;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Create {@link IUiContentProvider} content providers for edit this model.
-   *
-   * @param provider
-   *          TODO
-   */
-  public void createContentProviders(List<BindingInfo> bindings,
-      List<IUiContentProvider> providers,
-      IPageListener listener,
-      DatabindingsProvider provider) throws Exception {
-    // configure page
-    listener.setTitle(Messages.BindingInfo_listenerTitle);
-    listener.setMessage(Messages.BindingInfo_listenerMessage);
-    // add target editors
-    providers.add(new LabelUiContentProvider(Messages.BindingInfo_target,
-        getTargetPresentationText(false)));
-    m_targetProperty.createContentProviders(providers, m_target, m_targetAstProperty);
-    // add model editors
-    providers.add(new LabelUiContentProvider(Messages.BindingInfo_model,
-        getModelPresentationText(false)));
-    m_modelProperty.createContentProviders(providers, m_model, m_modelAstProperty);
-    // binding self properties
-    providers.add(new ConverterUiContentProvider(createConverterConfiguration(), this));
-    providers.add(new ValidatorUiContentProvider(createValidatorConfiguration(), this));
-    providers.add(new BindingNameUiContentProvider(this));
-    providers.add(new BindingContentProvider(this, provider.getJavaInfoRoot()));
-  }
-
-  protected final ChooseClassConfiguration createConverterConfiguration() {
-    if (m_converterConfiguration == null) {
-      m_converterConfiguration = new ChooseClassConfiguration();
-      m_converterConfiguration.setDialogFieldLabel(Messages.BindingInfo_converterLabel);
-      m_converterConfiguration.setValueScope("org.jdesktop.beansbinding.Converter");
-      m_converterConfiguration.setClearValue("N/S");
-      m_converterConfiguration.setBaseClassName("org.jdesktop.beansbinding.Converter");
-      m_converterConfiguration.setConstructorParameters(ArrayUtils.EMPTY_CLASS_ARRAY);
-      m_converterConfiguration.setEmptyClassErrorMessage(Messages.BindingInfo_converterError);
-      m_converterConfiguration.setErrorMessagePrefix(Messages.BindingInfo_converterErrorPrefix);
-    }
-    m_converterConfiguration.clearDefaultStrings();
-    if (m_converter != null && !StringUtils.isEmpty(m_converter.getParameters())) {
-      m_converterConfiguration.addDefaultStart(m_converter.getFullClassName());
-    }
-    return m_converterConfiguration;
-  }
-
-  protected final ChooseClassConfiguration createValidatorConfiguration() {
-    if (m_validatorConfiguration == null) {
-      m_validatorConfiguration = new ChooseClassConfiguration();
-      m_validatorConfiguration.setDialogFieldLabel(Messages.BindingInfo_validatorLabel);
-      m_validatorConfiguration.setValueScope("org.jdesktop.beansbinding.Validator");
-      m_validatorConfiguration.setClearValue("N/S");
-      m_validatorConfiguration.setBaseClassName("org.jdesktop.beansbinding.Validator");
-      m_validatorConfiguration.setConstructorParameters(ArrayUtils.EMPTY_CLASS_ARRAY);
-      m_validatorConfiguration.setEmptyClassErrorMessage(Messages.BindingInfo_validatorError);
-      m_validatorConfiguration.setErrorMessagePrefix(Messages.BindingInfo_validatorErrorPrefix);
-    }
-    m_validatorConfiguration.clearDefaultStrings();
-    if (m_validator != null && !StringUtils.isEmpty(m_validator.getParameters())) {
-      m_validatorConfiguration.addDefaultStart(m_validator.getFullClassName());
-    }
-    return m_validatorConfiguration;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IASTObjectInfo2
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public final boolean isField() {
-    return m_field;
-  }
-
-  public final void setField() {
-    m_field = true;
-  }
-
-  protected final void setVariableIdentifier(final JavaInfo javaInfoRoot,
-      final String type,
-      final String newVariable,
-      boolean newFieldState) {
-    try {
-      boolean oldFieldState = m_field;
-      m_field = newFieldState;
-      //
-      final String oldVariable = getVariableIdentifier();
-      setVariableIdentifier(newVariable);
-      final TypeDeclaration rootNode = JavaInfoUtils.getTypeDeclaration(javaInfoRoot);
-      //
-      if (!oldFieldState && newFieldState) {
-        ExecutionUtils.run(javaInfoRoot, new RunnableEx() {
-          public void run() throws Exception {
-            BodyDeclarationTarget fieldTarget = new BodyDeclarationTarget(rootNode, null, true);
-            javaInfoRoot.getEditor().addFieldDeclaration(
-                "private " + type + " " + newVariable + ";",
-                fieldTarget);
-          }
-        });
-      } else if (oldFieldState && !newFieldState) {
-        ExecutionUtils.run(javaInfoRoot, new RunnableEx() {
-          public void run() throws Exception {
-            for (FieldDeclaration field : rootNode.getFields()) {
-              VariableDeclarationFragment fragment = DomGenerics.fragments(field).get(0);
-              if (fragment.getName().getIdentifier().equals(oldVariable)) {
-                javaInfoRoot.getEditor().removeBodyDeclaration(field);
-                return;
-              }
-            }
-            Assert.fail(MessageFormat.format(Messages.BindingInfo_undefinedField, oldVariable));
-          }
-        });
-      } else if (oldFieldState && newFieldState) {
-        ExecutionUtils.run(javaInfoRoot, new RunnableEx() {
-          public void run() throws Exception {
-            for (FieldDeclaration field : rootNode.getFields()) {
-              VariableDeclarationFragment fragment = DomGenerics.fragments(field).get(0);
-              if (fragment.getName().getIdentifier().equals(oldVariable)) {
-                javaInfoRoot.getEditor().setIdentifier(fragment.getName(), newVariable);
-                return;
-              }
-            }
-            Assert.fail(MessageFormat.format(Messages.BindingInfo_undefinedField, oldVariable));
-          }
-        });
-      }
-    } catch (Throwable e) {
-      DesignerPlugin.log(e);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  //  Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @see to org.jdesktop.beansbinding.Binding.isManaged()
-   */
-  public boolean isManaged() {
-    return false;
-  }
-
-  protected final void addFinishSourceCode(List<String> lines,
-      CodeGenerationSupport generationSupport,
-      boolean addBind) throws Exception {
-    // converter
-    if (m_converter != null) {
-      lines.add(getVariableIdentifier()
-          + ".setConverter("
-          + m_converter.getSourceCode(lines, generationSupport)
-          + ");");
-    }
-    // validator
-    if (m_validator != null) {
-      lines.add(getVariableIdentifier()
-          + ".setValidator("
-          + m_validator.getSourceCode(lines, generationSupport)
-          + ");");
-    }
-    // bind
-    if (addBind) {
-      lines.add(getVariableIdentifier() + ".bind();");
-    }
-  }
-
-  protected final String getCreateMethodHeaderEnd() {
-    if (StringUtils.isEmpty(m_name)) {
-      return ")";
-    }
-    return ", \"" + StringUtilities.escapeJava(m_name) + "\")";
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parser
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public AstObjectInfo parseExpression(AstEditor editor,
-      String signature,
-      MethodInvocation invocation,
-      Expression[] arguments,
-      IModelResolver resolver,
-      IDatabindingsProvider provider) throws Exception {
-    if (SET_CONVERTER.equals(signature)) {
-      // Binding.setConverter(Converter)
-      Assert.isNull(m_converter);
-      TypeObjectInfo converter = (TypeObjectInfo) resolver.getModel(arguments[0]);
-      if (converter == null) {
-        AbstractParser.addError(
-            editor,
-            MessageFormat.format(Messages.BindingInfo_converterNotFound, arguments[0]),
-            new Throwable());
-        return null;
-      }
-      m_converter = new ConverterInfo(converter.getObjectType(), this);
-      m_converter.setParameters(converter.getParameters());
-      m_converter.setVariableIdentifier(converter.getVariableIdentifier());
-    } else if (SET_VALIDATOR.equals(signature)) {
-      // Binding.setValidator(Validator)
-      Assert.isNull(m_validator);
-      TypeObjectInfo validator = (TypeObjectInfo) resolver.getModel(arguments[0]);
-      if (validator == null) {
-        AbstractParser.addError(
-            editor,
-            MessageFormat.format(Messages.BindingInfo_validatorNotFound, arguments[0]),
-            new Throwable());
-        return null;
-      }
-      m_validator = new ValidatorInfo(validator.getObjectType(), this);
-      m_validator.setParameters(validator.getParameters());
-      m_validator.setVariableIdentifier(validator.getVariableIdentifier());
-    }
-    return null;
-  }
-
-  public void preCreate() throws Exception {
-  }
-
-  /**
-   * This method is invoked as last step of parsing.
-   */
-  public void create(List<BindingInfo> bindings) throws Exception {
-    m_target.createBinding(this);
-    m_targetProperty.createBinding(this);
-    m_model.createBinding(this);
-    m_modelProperty.createBinding(this);
-  }
-
-  public void edit(List<BindingInfo> bindings) throws Exception {
-  }
-
-  public boolean delete(List<BindingInfo> bindings) throws Exception {
-    return true;
-  }
-
-  public void postDelete() throws Exception {
-    m_target.deleteBinding(this);
-    m_targetProperty.deleteBinding(this);
-    m_model.deleteBinding(this);
-    m_modelProperty.deleteBinding(this);
-  }
-
-  public void move(List<BindingInfo> bindings) {
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public String getTargetPresentationText(boolean full) throws Exception {
-    return m_targetAstProperty.getPresentationText(m_target, m_targetProperty, full);
-  }
-
-  public String getModelPresentationText(boolean full) throws Exception {
-    return m_modelAstProperty.getPresentationText(m_model, m_modelProperty, full);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Visiting
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void accept(AstObjectInfoVisitor visitor) throws Exception {
-    super.accept(visitor);
-    m_targetAstProperty.accept(visitor);
-    m_modelAstProperty.accept(visitor);
-  }
+	private static final String SET_CONVERTER =
+			"org.jdesktop.beansbinding.Binding.setConverter(org.jdesktop.beansbinding.Converter)";
+	private static final String SET_VALIDATOR =
+			"org.jdesktop.beansbinding.Binding.setValidator(org.jdesktop.beansbinding.Validator)";
+	//
+	private static ChooseClassConfiguration m_converterConfiguration;
+	private static ChooseClassConfiguration m_validatorConfiguration;
+	//
+	protected final ObserveInfo m_target;
+	protected final ObserveInfo m_targetProperty;
+	protected final PropertyInfo m_targetAstProperty;
+	protected final ObserveInfo m_model;
+	protected final ObserveInfo m_modelProperty;
+	protected final PropertyInfo m_modelAstProperty;
+	protected ConverterInfo m_converter;
+	protected ValidatorInfo m_validator;
+	private String m_name;
+	private boolean m_field;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public BindingInfo(ObserveInfo target,
+			ObserveInfo targetProperty,
+			PropertyInfo targetAstProperty,
+			ObserveInfo model,
+			ObserveInfo modelProperty,
+			PropertyInfo modelAstProperty) {
+		m_target = target;
+		m_targetProperty = targetProperty;
+		m_targetAstProperty = targetAstProperty;
+		m_model = model;
+		m_modelProperty = modelProperty;
+		m_modelAstProperty = modelAstProperty;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Target
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public final IObserveInfo getTarget() {
+		return m_target;
+	}
+
+	public final IObserveInfo getTargetProperty() {
+		return m_targetProperty;
+	}
+
+	public IGenericType getTargetPropertyType() {
+		return m_targetProperty.getObjectType();
+	}
+
+	public final PropertyInfo getTargetAstProperty() {
+		return m_targetAstProperty;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Model
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public final IObserveInfo getModel() {
+		return m_model;
+	}
+
+	public final IObserveInfo getModelProperty() {
+		return m_modelProperty;
+	}
+
+	public IGenericType getModelPropertyType() {
+		return m_modelProperty.getObjectType();
+	}
+
+	public final PropertyInfo getModelAstProperty() {
+		return m_modelAstProperty;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public String getName() {
+		return m_name;
+	}
+
+	public void setName(String name) {
+		m_name = name;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Converter
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public final ConverterInfo getConverter() {
+		return m_converter;
+	}
+
+	public final void setConverter(ConverterInfo converter) {
+		m_converter = converter;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Validator
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public final ValidatorInfo getValidator() {
+		return m_validator;
+	}
+
+	public final void setValidator(ValidatorInfo validator) {
+		m_validator = validator;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Create {@link IUiContentProvider} content providers for edit this model.
+	 *
+	 * @param provider
+	 *          TODO
+	 */
+	public void createContentProviders(List<BindingInfo> bindings,
+			List<IUiContentProvider> providers,
+			IPageListener listener,
+			DatabindingsProvider provider) throws Exception {
+		// configure page
+		listener.setTitle(Messages.BindingInfo_listenerTitle);
+		listener.setMessage(Messages.BindingInfo_listenerMessage);
+		// add target editors
+		providers.add(new LabelUiContentProvider(Messages.BindingInfo_target,
+				getTargetPresentationText(false)));
+		m_targetProperty.createContentProviders(providers, m_target, m_targetAstProperty);
+		// add model editors
+		providers.add(new LabelUiContentProvider(Messages.BindingInfo_model,
+				getModelPresentationText(false)));
+		m_modelProperty.createContentProviders(providers, m_model, m_modelAstProperty);
+		// binding self properties
+		providers.add(new ConverterUiContentProvider(createConverterConfiguration(), this));
+		providers.add(new ValidatorUiContentProvider(createValidatorConfiguration(), this));
+		providers.add(new BindingNameUiContentProvider(this));
+		providers.add(new BindingContentProvider(this, provider.getJavaInfoRoot()));
+	}
+
+	protected final ChooseClassConfiguration createConverterConfiguration() {
+		if (m_converterConfiguration == null) {
+			m_converterConfiguration = new ChooseClassConfiguration();
+			m_converterConfiguration.setDialogFieldLabel(Messages.BindingInfo_converterLabel);
+			m_converterConfiguration.setValueScope("org.jdesktop.beansbinding.Converter");
+			m_converterConfiguration.setClearValue("N/S");
+			m_converterConfiguration.setBaseClassName("org.jdesktop.beansbinding.Converter");
+			m_converterConfiguration.setConstructorParameters(ArrayUtils.EMPTY_CLASS_ARRAY);
+			m_converterConfiguration.setEmptyClassErrorMessage(Messages.BindingInfo_converterError);
+			m_converterConfiguration.setErrorMessagePrefix(Messages.BindingInfo_converterErrorPrefix);
+		}
+		m_converterConfiguration.clearDefaultStrings();
+		if (m_converter != null && !StringUtils.isEmpty(m_converter.getParameters())) {
+			m_converterConfiguration.addDefaultStart(m_converter.getFullClassName());
+		}
+		return m_converterConfiguration;
+	}
+
+	protected final ChooseClassConfiguration createValidatorConfiguration() {
+		if (m_validatorConfiguration == null) {
+			m_validatorConfiguration = new ChooseClassConfiguration();
+			m_validatorConfiguration.setDialogFieldLabel(Messages.BindingInfo_validatorLabel);
+			m_validatorConfiguration.setValueScope("org.jdesktop.beansbinding.Validator");
+			m_validatorConfiguration.setClearValue("N/S");
+			m_validatorConfiguration.setBaseClassName("org.jdesktop.beansbinding.Validator");
+			m_validatorConfiguration.setConstructorParameters(ArrayUtils.EMPTY_CLASS_ARRAY);
+			m_validatorConfiguration.setEmptyClassErrorMessage(Messages.BindingInfo_validatorError);
+			m_validatorConfiguration.setErrorMessagePrefix(Messages.BindingInfo_validatorErrorPrefix);
+		}
+		m_validatorConfiguration.clearDefaultStrings();
+		if (m_validator != null && !StringUtils.isEmpty(m_validator.getParameters())) {
+			m_validatorConfiguration.addDefaultStart(m_validator.getFullClassName());
+		}
+		return m_validatorConfiguration;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IASTObjectInfo2
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public final boolean isField() {
+		return m_field;
+	}
+
+	public final void setField() {
+		m_field = true;
+	}
+
+	protected final void setVariableIdentifier(final JavaInfo javaInfoRoot,
+			final String type,
+			final String newVariable,
+			boolean newFieldState) {
+		try {
+			boolean oldFieldState = m_field;
+			m_field = newFieldState;
+			//
+			final String oldVariable = getVariableIdentifier();
+			setVariableIdentifier(newVariable);
+			final TypeDeclaration rootNode = JavaInfoUtils.getTypeDeclaration(javaInfoRoot);
+			//
+			if (!oldFieldState && newFieldState) {
+				ExecutionUtils.run(javaInfoRoot, new RunnableEx() {
+					public void run() throws Exception {
+						BodyDeclarationTarget fieldTarget = new BodyDeclarationTarget(rootNode, null, true);
+						javaInfoRoot.getEditor().addFieldDeclaration(
+								"private " + type + " " + newVariable + ";",
+								fieldTarget);
+					}
+				});
+			} else if (oldFieldState && !newFieldState) {
+				ExecutionUtils.run(javaInfoRoot, new RunnableEx() {
+					public void run() throws Exception {
+						for (FieldDeclaration field : rootNode.getFields()) {
+							VariableDeclarationFragment fragment = DomGenerics.fragments(field).get(0);
+							if (fragment.getName().getIdentifier().equals(oldVariable)) {
+								javaInfoRoot.getEditor().removeBodyDeclaration(field);
+								return;
+							}
+						}
+						Assert.fail(MessageFormat.format(Messages.BindingInfo_undefinedField, oldVariable));
+					}
+				});
+			} else if (oldFieldState && newFieldState) {
+				ExecutionUtils.run(javaInfoRoot, new RunnableEx() {
+					public void run() throws Exception {
+						for (FieldDeclaration field : rootNode.getFields()) {
+							VariableDeclarationFragment fragment = DomGenerics.fragments(field).get(0);
+							if (fragment.getName().getIdentifier().equals(oldVariable)) {
+								javaInfoRoot.getEditor().setIdentifier(fragment.getName(), newVariable);
+								return;
+							}
+						}
+						Assert.fail(MessageFormat.format(Messages.BindingInfo_undefinedField, oldVariable));
+					}
+				});
+			}
+		} catch (Throwable e) {
+			DesignerPlugin.log(e);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	//  Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @see to org.jdesktop.beansbinding.Binding.isManaged()
+	 */
+	public boolean isManaged() {
+		return false;
+	}
+
+	protected final void addFinishSourceCode(List<String> lines,
+			CodeGenerationSupport generationSupport,
+			boolean addBind) throws Exception {
+		// converter
+		if (m_converter != null) {
+			lines.add(getVariableIdentifier()
+					+ ".setConverter("
+					+ m_converter.getSourceCode(lines, generationSupport)
+					+ ");");
+		}
+		// validator
+		if (m_validator != null) {
+			lines.add(getVariableIdentifier()
+					+ ".setValidator("
+					+ m_validator.getSourceCode(lines, generationSupport)
+					+ ");");
+		}
+		// bind
+		if (addBind) {
+			lines.add(getVariableIdentifier() + ".bind();");
+		}
+	}
+
+	protected final String getCreateMethodHeaderEnd() {
+		if (StringUtils.isEmpty(m_name)) {
+			return ")";
+		}
+		return ", \"" + StringUtilities.escapeJava(m_name) + "\")";
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parser
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public AstObjectInfo parseExpression(AstEditor editor,
+			String signature,
+			MethodInvocation invocation,
+			Expression[] arguments,
+			IModelResolver resolver,
+			IDatabindingsProvider provider) throws Exception {
+		if (SET_CONVERTER.equals(signature)) {
+			// Binding.setConverter(Converter)
+			Assert.isNull(m_converter);
+			TypeObjectInfo converter = (TypeObjectInfo) resolver.getModel(arguments[0]);
+			if (converter == null) {
+				AbstractParser.addError(
+						editor,
+						MessageFormat.format(Messages.BindingInfo_converterNotFound, arguments[0]),
+						new Throwable());
+				return null;
+			}
+			m_converter = new ConverterInfo(converter.getObjectType(), this);
+			m_converter.setParameters(converter.getParameters());
+			m_converter.setVariableIdentifier(converter.getVariableIdentifier());
+		} else if (SET_VALIDATOR.equals(signature)) {
+			// Binding.setValidator(Validator)
+			Assert.isNull(m_validator);
+			TypeObjectInfo validator = (TypeObjectInfo) resolver.getModel(arguments[0]);
+			if (validator == null) {
+				AbstractParser.addError(
+						editor,
+						MessageFormat.format(Messages.BindingInfo_validatorNotFound, arguments[0]),
+						new Throwable());
+				return null;
+			}
+			m_validator = new ValidatorInfo(validator.getObjectType(), this);
+			m_validator.setParameters(validator.getParameters());
+			m_validator.setVariableIdentifier(validator.getVariableIdentifier());
+		}
+		return null;
+	}
+
+	public void preCreate() throws Exception {
+	}
+
+	/**
+	 * This method is invoked as last step of parsing.
+	 */
+	public void create(List<BindingInfo> bindings) throws Exception {
+		m_target.createBinding(this);
+		m_targetProperty.createBinding(this);
+		m_model.createBinding(this);
+		m_modelProperty.createBinding(this);
+	}
+
+	public void edit(List<BindingInfo> bindings) throws Exception {
+	}
+
+	public boolean delete(List<BindingInfo> bindings) throws Exception {
+		return true;
+	}
+
+	public void postDelete() throws Exception {
+		m_target.deleteBinding(this);
+		m_targetProperty.deleteBinding(this);
+		m_model.deleteBinding(this);
+		m_modelProperty.deleteBinding(this);
+	}
+
+	public void move(List<BindingInfo> bindings) {
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public String getTargetPresentationText(boolean full) throws Exception {
+		return m_targetAstProperty.getPresentationText(m_target, m_targetProperty, full);
+	}
+
+	public String getModelPresentationText(boolean full) throws Exception {
+		return m_modelAstProperty.getPresentationText(m_model, m_modelProperty, full);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Visiting
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void accept(AstObjectInfoVisitor visitor) throws Exception {
+		super.accept(visitor);
+		m_targetAstProperty.accept(visitor);
+		m_modelAstProperty.accept(visitor);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/bindings/ColumnBindingInfo.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/bindings/ColumnBindingInfo.java
index 3f5e88db7..8fe0dccb4 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/bindings/ColumnBindingInfo.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/bindings/ColumnBindingInfo.java
@@ -60,334 +60,334 @@
  * @coverage bindings.swing.model.bindings
  */
 public class ColumnBindingInfo extends BindingInfo implements IEditableProvider {
-  private static final String SET_EDITABLE =
-      "org.jdesktop.swingbinding.JTableBinding.ColumnBinding.setEditable(boolean)";
-  private static final String SET_COLUMN_NAME =
-      "org.jdesktop.swingbinding.JTableBinding.ColumnBinding.setColumnName(java.lang.String)";
-  private static final String SET_COLUMN_CLASS =
-      "org.jdesktop.swingbinding.JTableBinding.ColumnBinding.setColumnClass(java.lang.Class)";
-  private static ChooseClassConfiguration m_columnClassConfiguration;
-  private final JTableBindingInfo m_binding;
-  private PropertyInfo m_detailProperty;
-  private boolean m_editable = true;
-  private int m_column = -1;
-  private String m_columnName;
-  private IGenericType m_columnType;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ColumnBindingInfo(ObserveInfo target,
-      ObserveInfo targetProperty,
-      PropertyInfo targetAstProperty,
-      ObserveInfo model,
-      ObserveInfo modelProperty,
-      PropertyInfo modelAstProperty,
-      JTableBindingInfo binding) {
-    super(target, targetProperty, targetAstProperty, model, modelProperty, modelAstProperty);
-    m_binding = binding;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public IGenericType getModelPropertyType() {
-    if (m_detailProperty != null) {
-      return m_detailProperty.getValueType();
-    }
-    return super.getModelPropertyType();
-  }
-
-  @Override
-  public IGenericType getTargetPropertyType() {
-    return m_columnType == null ? ClassGenericType.OBJECT_CLASS : m_columnType;
-  }
-
-  public boolean isEditable() {
-    return m_editable;
-  }
-
-  public void setEditable(boolean editable) {
-    m_editable = editable;
-  }
-
-  public int getColumn() {
-    return m_column;
-  }
-
-  public void setColumn(int column) {
-    m_column = column;
-  }
-
-  public String getColumnName() {
-    return m_columnName;
-  }
-
-  public void setColumnName(String columnName) {
-    m_columnName = columnName;
-  }
-
-  public IGenericType getColumnType() {
-    return m_columnType;
-  }
-
-  public void setColumnType(IGenericType columnType) {
-    m_columnType = columnType;
-  }
-
-  public PropertyInfo getDetailProperty() {
-    return m_detailProperty;
-  }
-
-  public void setDetailProperty(PropertyInfo detailProperty) {
-    Assert.isNotNull(detailProperty);
-    m_detailProperty = detailProperty;
-  }
-
-  public JTableBindingInfo getJTableBinding() {
-    return m_binding;
-  }
-
-  @Override
-  public boolean delete(List<BindingInfo> bindings) throws Exception {
-    m_binding.getColumns().remove(this);
-    return true;
-  }
-
-  @Override
-  public void move(List<BindingInfo> bindings) {
-    m_binding.getColumns().remove(this);
-    int index = bindings.indexOf(this) - bindings.indexOf(m_binding) - 1;
-    m_binding.getColumns().add(index, this);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Create {@link IUiContentProvider} content providers for edit this model.
-   */
-  @Override
-  public void createContentProviders(List<BindingInfo> bindings,
-      List<IUiContentProvider> providers,
-      IPageListener listener,
-      DatabindingsProvider provider) throws Exception {
-    // configure page
-    listener.setTitle(Messages.ColumnBindingInfo_listenerTitle);
-    listener.setMessage(Messages.ColumnBindingInfo_listenerMessage);
-    // add target
-    providers.add(new LabelUiContentProvider(Messages.ColumnBindingInfo_componentLabel,
-        m_target.getPresentation().getTextForBinding()));
-    // add model
-    providers.add(new LabelUiContentProvider(Messages.ColumnBindingInfo_modelLabel,
-        getModelPresentationText(false)));
-    providers.add(new ColumnBindingUiContentProvider(this));
-    // binding self properties
-    providers.add(new SeparatorUiContentProvider());
-    providers.add(new ColumnNameUiContentProvider(this));
-    providers.add(new EditableUiContentProvider(this));
-    providers.add(new ColumnClassUiContentProvider(createColumnConfiguration(), this));
-    providers.add(new ConverterUiContentProvider(createConverterConfiguration(), this));
-    providers.add(new ValidatorUiContentProvider(createValidatorConfiguration(), this));
-    providers.add(new BindingNameUiContentProvider(this));
-    providers.add(new BindingContentProvider(this, provider.getJavaInfoRoot()));
-  }
-
-  private static ChooseClassConfiguration createColumnConfiguration() {
-    if (m_columnClassConfiguration == null) {
-      m_columnClassConfiguration = new ChooseClassConfiguration();
-      m_columnClassConfiguration.setDialogFieldLabel(Messages.ColumnBindingInfo_chooseTitle);
-      m_columnClassConfiguration.setValueScope("beans");
-      m_columnClassConfiguration.setClearValue("N/S");
-      m_columnClassConfiguration.setChooseInterfaces(true);
-      m_columnClassConfiguration.setEmptyClassErrorMessage(Messages.ColumnBindingInfo_chooseError);
-      m_columnClassConfiguration.setErrorMessagePrefix(Messages.ColumnBindingInfo_chooseErrorPrefix);
-    }
-    return m_columnClassConfiguration;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parse
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public AstObjectInfo parseExpression(AstEditor editor,
-      String signature,
-      MethodInvocation invocation,
-      Expression[] arguments,
-      IModelResolver resolver,
-      IDatabindingsProvider provider) throws Exception {
-    // JTableBinding.ColumnBinding.setEditable(boolean)
-    if (SET_EDITABLE.equals(signature)) {
-      m_editable = CoreUtils.evaluate(Boolean.class, editor, arguments[0]);
-      configureModelSupport(invocation, resolver);
-      return null;
-    }
-    // JTableBinding.ColumnBinding.setColumnName(String)
-    if (SET_COLUMN_NAME.equals(signature)) {
-      m_columnName =
-          StringEscapeUtils.unescapeJava(CoreUtils.evaluate(String.class, editor, arguments[0]));
-      configureModelSupport(invocation, resolver);
-      return null;
-    }
-    // JTableBinding.ColumnBinding.setColumnClass(Class)
-    if (SET_COLUMN_CLASS.equals(signature)) {
-      if (arguments[0] instanceof TypeLiteral) {
-        TypeLiteral typeLiteral = (TypeLiteral) arguments[0];
-        ITypeBinding binding = AstNodeUtils.getTypeBinding(typeLiteral.getType());
-        if (binding != null) {
-          m_columnType = GenericUtils.getObjectType(editor, binding);
-        }
-      } else {
-        m_columnType =
-            new ClassGenericType(CoreUtils.evaluate(Class.class, editor, arguments[0]), null, null);
-      }
-      configureModelSupport(invocation, resolver);
-      return null;
-    }
-    return super.parseExpression(editor, signature, invocation, arguments, resolver, provider);
-  }
-
-  private void configureModelSupport(MethodInvocation invocation, IModelResolver resolver)
-      throws Exception {
-    ColumnBindingModelSupport modelSupport =
-        (ColumnBindingModelSupport) resolver.getModelSupport(invocation.getExpression());
-    Assert.isNotNull(modelSupport);
-    Assert.isTrue(this == modelSupport.getModel());
-    modelSupport.addInvocation(invocation);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  //  Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean addSourceCodeSeparator() {
-    return false;
-  }
-
-  @Override
-  public boolean isManaged() {
-    return true;
-  }
-
-  @Override
-  public void addSourceCode(List<String> lines, CodeGenerationSupport generationSupport)
-      throws Exception {
-  }
-
-  public void addColumnSourceCode(List<String> lines, CodeGenerationSupport generationSupport)
-      throws Exception {
-    // detail
-    generationSupport.addSourceCode(m_detailProperty, lines);
-    // handle variable
-    if (getVariableIdentifier() == null) {
-      if (m_converter == null && m_validator == null) {
-        StringBuffer line = new StringBuffer();
-        line.append(m_binding.getVariableIdentifier()
-            + ".addColumnBinding("
-            + m_detailProperty.getVariableIdentifier()
-            + getCreateMethodHeaderEnd());
-        if (!StringUtils.isEmpty(m_columnName)) {
-          line.append(".setColumnName(\"" + StringUtilities.escapeJava(m_columnName) + "\")");
-        }
-        if (!m_editable) {
-          line.append(".setEditable(false)");
-        }
-        if (m_columnType != null) {
-          line.append(".setColumnClass(" + m_columnType.getFullTypeName() + ".class)");
-        }
-        line.append(";");
-        lines.add(line.toString());
-        return;
-      }
-      //
-      setVariableIdentifier(generationSupport.generateLocalName("columnBinding"));
-    }
-    // begin
-    if (!isField()) {
-      lines.add(m_binding.getTypeSourceCode(generationSupport) + ".ColumnBinding ");
-    }
-    lines.add(getVariableIdentifier()
-        + " = "
-        + m_binding.getVariableIdentifier()
-        + ".addColumnBinding("
-        + m_detailProperty.getVariableIdentifier()
-        + getCreateMethodHeaderEnd()
-        + ";");
-    // column name
-    if (!StringUtils.isEmpty(m_columnName)) {
-      lines.add(getVariableIdentifier()
-          + ".setColumnName(\""
-          + StringUtilities.escapeJava(m_columnName)
-          + "\");");
-    }
-    // editable
-    if (!m_editable) {
-      lines.add(getVariableIdentifier() + ".setEditable(false);");
-    }
-    // column class
-    if (m_columnType != null) {
-      lines.add(getVariableIdentifier()
-          + ".setColumnClass("
-          + m_columnType.getFullTypeName()
-          + ".class);");
-    }
-    // converter & validator
-    addFinishSourceCode(lines, generationSupport, false);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IASTObjectInfo2
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void setVariableIdentifier(JavaInfo javaInfoRoot, String variable, boolean field) {
-    boolean useGenerics = CoreUtils.useGenerics(javaInfoRoot.getEditor().getJavaProject());
-    CodeGenerationSupport generationSupport = new CodeGenerationSupport(useGenerics);
-    String type = m_binding.getTypeSourceCode(generationSupport) + ".ColumnBinding";
-    setVariableIdentifier(javaInfoRoot, type, variable, field);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getTargetPresentationText(boolean full) throws Exception {
-    return m_target.getPresentation().getTextForBinding()
-        + ".column"
-        + CoreUtils.getDefaultString(m_columnName, " - ", "");
-  }
-
-  @Override
-  public String getModelPresentationText(boolean full) throws Exception {
-    if (m_detailProperty != null) {
-      return m_detailProperty.getPresentationText(m_model, m_modelProperty, full);
-    }
-    return super.getModelPresentationText(full);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Visiting
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void accept(AstObjectInfoVisitor visitor) throws Exception {
-    super.accept(visitor);
-    if (m_detailProperty != null) {
-      m_detailProperty.accept(visitor);
-    }
-  }
+	private static final String SET_EDITABLE =
+			"org.jdesktop.swingbinding.JTableBinding.ColumnBinding.setEditable(boolean)";
+	private static final String SET_COLUMN_NAME =
+			"org.jdesktop.swingbinding.JTableBinding.ColumnBinding.setColumnName(java.lang.String)";
+	private static final String SET_COLUMN_CLASS =
+			"org.jdesktop.swingbinding.JTableBinding.ColumnBinding.setColumnClass(java.lang.Class)";
+	private static ChooseClassConfiguration m_columnClassConfiguration;
+	private final JTableBindingInfo m_binding;
+	private PropertyInfo m_detailProperty;
+	private boolean m_editable = true;
+	private int m_column = -1;
+	private String m_columnName;
+	private IGenericType m_columnType;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ColumnBindingInfo(ObserveInfo target,
+			ObserveInfo targetProperty,
+			PropertyInfo targetAstProperty,
+			ObserveInfo model,
+			ObserveInfo modelProperty,
+			PropertyInfo modelAstProperty,
+			JTableBindingInfo binding) {
+		super(target, targetProperty, targetAstProperty, model, modelProperty, modelAstProperty);
+		m_binding = binding;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public IGenericType getModelPropertyType() {
+		if (m_detailProperty != null) {
+			return m_detailProperty.getValueType();
+		}
+		return super.getModelPropertyType();
+	}
+
+	@Override
+	public IGenericType getTargetPropertyType() {
+		return m_columnType == null ? ClassGenericType.OBJECT_CLASS : m_columnType;
+	}
+
+	public boolean isEditable() {
+		return m_editable;
+	}
+
+	public void setEditable(boolean editable) {
+		m_editable = editable;
+	}
+
+	public int getColumn() {
+		return m_column;
+	}
+
+	public void setColumn(int column) {
+		m_column = column;
+	}
+
+	public String getColumnName() {
+		return m_columnName;
+	}
+
+	public void setColumnName(String columnName) {
+		m_columnName = columnName;
+	}
+
+	public IGenericType getColumnType() {
+		return m_columnType;
+	}
+
+	public void setColumnType(IGenericType columnType) {
+		m_columnType = columnType;
+	}
+
+	public PropertyInfo getDetailProperty() {
+		return m_detailProperty;
+	}
+
+	public void setDetailProperty(PropertyInfo detailProperty) {
+		Assert.isNotNull(detailProperty);
+		m_detailProperty = detailProperty;
+	}
+
+	public JTableBindingInfo getJTableBinding() {
+		return m_binding;
+	}
+
+	@Override
+	public boolean delete(List<BindingInfo> bindings) throws Exception {
+		m_binding.getColumns().remove(this);
+		return true;
+	}
+
+	@Override
+	public void move(List<BindingInfo> bindings) {
+		m_binding.getColumns().remove(this);
+		int index = bindings.indexOf(this) - bindings.indexOf(m_binding) - 1;
+		m_binding.getColumns().add(index, this);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Create {@link IUiContentProvider} content providers for edit this model.
+	 */
+	@Override
+	public void createContentProviders(List<BindingInfo> bindings,
+			List<IUiContentProvider> providers,
+			IPageListener listener,
+			DatabindingsProvider provider) throws Exception {
+		// configure page
+		listener.setTitle(Messages.ColumnBindingInfo_listenerTitle);
+		listener.setMessage(Messages.ColumnBindingInfo_listenerMessage);
+		// add target
+		providers.add(new LabelUiContentProvider(Messages.ColumnBindingInfo_componentLabel,
+				m_target.getPresentation().getTextForBinding()));
+		// add model
+		providers.add(new LabelUiContentProvider(Messages.ColumnBindingInfo_modelLabel,
+				getModelPresentationText(false)));
+		providers.add(new ColumnBindingUiContentProvider(this));
+		// binding self properties
+		providers.add(new SeparatorUiContentProvider());
+		providers.add(new ColumnNameUiContentProvider(this));
+		providers.add(new EditableUiContentProvider(this));
+		providers.add(new ColumnClassUiContentProvider(createColumnConfiguration(), this));
+		providers.add(new ConverterUiContentProvider(createConverterConfiguration(), this));
+		providers.add(new ValidatorUiContentProvider(createValidatorConfiguration(), this));
+		providers.add(new BindingNameUiContentProvider(this));
+		providers.add(new BindingContentProvider(this, provider.getJavaInfoRoot()));
+	}
+
+	private static ChooseClassConfiguration createColumnConfiguration() {
+		if (m_columnClassConfiguration == null) {
+			m_columnClassConfiguration = new ChooseClassConfiguration();
+			m_columnClassConfiguration.setDialogFieldLabel(Messages.ColumnBindingInfo_chooseTitle);
+			m_columnClassConfiguration.setValueScope("beans");
+			m_columnClassConfiguration.setClearValue("N/S");
+			m_columnClassConfiguration.setChooseInterfaces(true);
+			m_columnClassConfiguration.setEmptyClassErrorMessage(Messages.ColumnBindingInfo_chooseError);
+			m_columnClassConfiguration.setErrorMessagePrefix(Messages.ColumnBindingInfo_chooseErrorPrefix);
+		}
+		return m_columnClassConfiguration;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parse
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public AstObjectInfo parseExpression(AstEditor editor,
+			String signature,
+			MethodInvocation invocation,
+			Expression[] arguments,
+			IModelResolver resolver,
+			IDatabindingsProvider provider) throws Exception {
+		// JTableBinding.ColumnBinding.setEditable(boolean)
+		if (SET_EDITABLE.equals(signature)) {
+			m_editable = CoreUtils.evaluate(Boolean.class, editor, arguments[0]);
+			configureModelSupport(invocation, resolver);
+			return null;
+		}
+		// JTableBinding.ColumnBinding.setColumnName(String)
+		if (SET_COLUMN_NAME.equals(signature)) {
+			m_columnName =
+					StringEscapeUtils.unescapeJava(CoreUtils.evaluate(String.class, editor, arguments[0]));
+			configureModelSupport(invocation, resolver);
+			return null;
+		}
+		// JTableBinding.ColumnBinding.setColumnClass(Class)
+		if (SET_COLUMN_CLASS.equals(signature)) {
+			if (arguments[0] instanceof TypeLiteral) {
+				TypeLiteral typeLiteral = (TypeLiteral) arguments[0];
+				ITypeBinding binding = AstNodeUtils.getTypeBinding(typeLiteral.getType());
+				if (binding != null) {
+					m_columnType = GenericUtils.getObjectType(editor, binding);
+				}
+			} else {
+				m_columnType =
+						new ClassGenericType(CoreUtils.evaluate(Class.class, editor, arguments[0]), null, null);
+			}
+			configureModelSupport(invocation, resolver);
+			return null;
+		}
+		return super.parseExpression(editor, signature, invocation, arguments, resolver, provider);
+	}
+
+	private void configureModelSupport(MethodInvocation invocation, IModelResolver resolver)
+			throws Exception {
+		ColumnBindingModelSupport modelSupport =
+				(ColumnBindingModelSupport) resolver.getModelSupport(invocation.getExpression());
+		Assert.isNotNull(modelSupport);
+		Assert.isTrue(this == modelSupport.getModel());
+		modelSupport.addInvocation(invocation);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	//  Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean addSourceCodeSeparator() {
+		return false;
+	}
+
+	@Override
+	public boolean isManaged() {
+		return true;
+	}
+
+	@Override
+	public void addSourceCode(List<String> lines, CodeGenerationSupport generationSupport)
+			throws Exception {
+	}
+
+	public void addColumnSourceCode(List<String> lines, CodeGenerationSupport generationSupport)
+			throws Exception {
+		// detail
+		generationSupport.addSourceCode(m_detailProperty, lines);
+		// handle variable
+		if (getVariableIdentifier() == null) {
+			if (m_converter == null && m_validator == null) {
+				StringBuffer line = new StringBuffer();
+				line.append(m_binding.getVariableIdentifier()
+						+ ".addColumnBinding("
+						+ m_detailProperty.getVariableIdentifier()
+						+ getCreateMethodHeaderEnd());
+				if (!StringUtils.isEmpty(m_columnName)) {
+					line.append(".setColumnName(\"" + StringUtilities.escapeJava(m_columnName) + "\")");
+				}
+				if (!m_editable) {
+					line.append(".setEditable(false)");
+				}
+				if (m_columnType != null) {
+					line.append(".setColumnClass(" + m_columnType.getFullTypeName() + ".class)");
+				}
+				line.append(";");
+				lines.add(line.toString());
+				return;
+			}
+			//
+			setVariableIdentifier(generationSupport.generateLocalName("columnBinding"));
+		}
+		// begin
+		if (!isField()) {
+			lines.add(m_binding.getTypeSourceCode(generationSupport) + ".ColumnBinding ");
+		}
+		lines.add(getVariableIdentifier()
+				+ " = "
+				+ m_binding.getVariableIdentifier()
+				+ ".addColumnBinding("
+				+ m_detailProperty.getVariableIdentifier()
+				+ getCreateMethodHeaderEnd()
+				+ ";");
+		// column name
+		if (!StringUtils.isEmpty(m_columnName)) {
+			lines.add(getVariableIdentifier()
+					+ ".setColumnName(\""
+					+ StringUtilities.escapeJava(m_columnName)
+					+ "\");");
+		}
+		// editable
+		if (!m_editable) {
+			lines.add(getVariableIdentifier() + ".setEditable(false);");
+		}
+		// column class
+		if (m_columnType != null) {
+			lines.add(getVariableIdentifier()
+					+ ".setColumnClass("
+					+ m_columnType.getFullTypeName()
+					+ ".class);");
+		}
+		// converter & validator
+		addFinishSourceCode(lines, generationSupport, false);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IASTObjectInfo2
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void setVariableIdentifier(JavaInfo javaInfoRoot, String variable, boolean field) {
+		boolean useGenerics = CoreUtils.useGenerics(javaInfoRoot.getEditor().getJavaProject());
+		CodeGenerationSupport generationSupport = new CodeGenerationSupport(useGenerics);
+		String type = m_binding.getTypeSourceCode(generationSupport) + ".ColumnBinding";
+		setVariableIdentifier(javaInfoRoot, type, variable, field);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getTargetPresentationText(boolean full) throws Exception {
+		return m_target.getPresentation().getTextForBinding()
+				+ ".column"
+				+ CoreUtils.getDefaultString(m_columnName, " - ", "");
+	}
+
+	@Override
+	public String getModelPresentationText(boolean full) throws Exception {
+		if (m_detailProperty != null) {
+			return m_detailProperty.getPresentationText(m_model, m_modelProperty, full);
+		}
+		return super.getModelPresentationText(full);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Visiting
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void accept(AstObjectInfoVisitor visitor) throws Exception {
+		super.accept(visitor);
+		if (m_detailProperty != null) {
+			m_detailProperty.accept(visitor);
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/bindings/ColumnBindingModelSupport.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/bindings/ColumnBindingModelSupport.java
index 3b864f3a6..39fc36e47 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/bindings/ColumnBindingModelSupport.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/bindings/ColumnBindingModelSupport.java
@@ -25,40 +25,40 @@
  * @coverage bindings.swing.model.bindings
  */
 public final class ColumnBindingModelSupport extends AstModelSupport {
-  private final List<Expression> m_invocations = Lists.newArrayList();
+	private final List<Expression> m_invocations = Lists.newArrayList();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ColumnBindingModelSupport(AstObjectInfo model, MethodInvocation invocation) {
-    super(model);
-    addInvocation(invocation);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ColumnBindingModelSupport(AstObjectInfo model, MethodInvocation invocation) {
+		super(model);
+		addInvocation(invocation);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void addInvocation(MethodInvocation invocation) {
-    m_invocations.add(invocation);
-    calculateNameReference(invocation);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void addInvocation(MethodInvocation invocation) {
+		m_invocations.add(invocation);
+		calculateNameReference(invocation);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IModelSupport
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean isRepresentedBy(Expression expression) throws Exception {
-    for (Expression invocation : m_invocations) {
-      if (invocation == expression) {
-        return true;
-      }
-    }
-    return isRepresentedOverReference(expression);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IModelSupport
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean isRepresentedBy(Expression expression) throws Exception {
+		for (Expression invocation : m_invocations) {
+			if (invocation == expression) {
+				return true;
+			}
+		}
+		return isRepresentedOverReference(expression);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/bindings/ConverterInfo.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/bindings/ConverterInfo.java
index cb009fab2..505ed9d35 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/bindings/ConverterInfo.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/bindings/ConverterInfo.java
@@ -21,32 +21,32 @@
  * @coverage bindings.swing.model.bindings
  */
 public class ConverterInfo extends GenericClassObjectInfo {
-  private final BindingInfo m_binding;
+	private final BindingInfo m_binding;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ConverterInfo(IGenericType objectType, BindingInfo binding) {
-    super("org.jdesktop.beansbinding.Converter");
-    m_binding = binding;
-    setClass(objectType);
-    if (isGeneric()) {
-      GenericUtils.assertEquals(m_binding.getModelPropertyType(), objectType.getSubType(0));
-      GenericUtils.assertEquals(m_binding.getTargetPropertyType(), objectType.getSubType(1));
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ConverterInfo(IGenericType objectType, BindingInfo binding) {
+		super("org.jdesktop.beansbinding.Converter");
+		m_binding = binding;
+		setClass(objectType);
+		if (isGeneric()) {
+			GenericUtils.assertEquals(m_binding.getModelPropertyType(), objectType.getSubType(0));
+			GenericUtils.assertEquals(m_binding.getTargetPropertyType(), objectType.getSubType(1));
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected IGenericType[] getTypeArguments() {
-    return isGeneric() ? new IGenericType[]{
-        m_binding.getModelPropertyType(),
-        m_binding.getTargetPropertyType()} : null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected IGenericType[] getTypeArguments() {
+		return isGeneric() ? new IGenericType[]{
+				m_binding.getModelPropertyType(),
+				m_binding.getTargetPropertyType()} : null;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/bindings/DetailBindingInfo.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/bindings/DetailBindingInfo.java
index 682a097b6..0ef495c8f 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/bindings/DetailBindingInfo.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/bindings/DetailBindingInfo.java
@@ -42,218 +42,218 @@
  * @coverage bindings.swing.model.bindings
  */
 public final class DetailBindingInfo extends BindingInfo {
-  private final JListBindingInfo m_binding;
-  private PropertyInfo m_detailProperty;
+	private final JListBindingInfo m_binding;
+	private PropertyInfo m_detailProperty;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DetailBindingInfo(ObserveInfo target,
-      ObserveInfo targetProperty,
-      PropertyInfo targetAstProperty,
-      ObserveInfo model,
-      ObserveInfo modelProperty,
-      PropertyInfo modelAstProperty,
-      JListBindingInfo binding) {
-    super(target, targetProperty, targetAstProperty, model, modelProperty, modelAstProperty);
-    m_binding = binding;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DetailBindingInfo(ObserveInfo target,
+			ObserveInfo targetProperty,
+			PropertyInfo targetAstProperty,
+			ObserveInfo model,
+			ObserveInfo modelProperty,
+			PropertyInfo modelAstProperty,
+			JListBindingInfo binding) {
+		super(target, targetProperty, targetAstProperty, model, modelProperty, modelAstProperty);
+		m_binding = binding;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public IGenericType getModelPropertyType() {
-    if (m_detailProperty != null) {
-      return m_detailProperty.getValueType();
-    }
-    return super.getModelPropertyType();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public IGenericType getModelPropertyType() {
+		if (m_detailProperty != null) {
+			return m_detailProperty.getValueType();
+		}
+		return super.getModelPropertyType();
+	}
 
-  @Override
-  public IGenericType getTargetPropertyType() {
-    return ClassGenericType.OBJECT_CLASS;
-  }
+	@Override
+	public IGenericType getTargetPropertyType() {
+		return ClassGenericType.OBJECT_CLASS;
+	}
 
-  public PropertyInfo getDetailProperty() {
-    return m_detailProperty;
-  }
+	public PropertyInfo getDetailProperty() {
+		return m_detailProperty;
+	}
 
-  public void setDetailProperty(PropertyInfo detailProperty) {
-    Assert.isNotNull(detailProperty);
-    m_detailProperty = detailProperty;
-  }
+	public void setDetailProperty(PropertyInfo detailProperty) {
+		Assert.isNotNull(detailProperty);
+		m_detailProperty = detailProperty;
+	}
 
-  public JListBindingInfo getJListBinding() {
-    return m_binding;
-  }
+	public JListBindingInfo getJListBinding() {
+		return m_binding;
+	}
 
-  @Override
-  public boolean delete(List<BindingInfo> bindings) throws Exception {
-    m_detailProperty = new ObjectPropertyInfo(m_binding.getInputElementType());
-    m_converter = null;
-    m_validator = null;
-    return false;
-  }
+	@Override
+	public boolean delete(List<BindingInfo> bindings) throws Exception {
+		m_detailProperty = new ObjectPropertyInfo(m_binding.getInputElementType());
+		m_converter = null;
+		m_validator = null;
+		return false;
+	}
 
-  public boolean isVirtual() {
-    return m_converter == null
-        && m_validator == null
-        && m_detailProperty instanceof ObjectPropertyInfo;
-  }
+	public boolean isVirtual() {
+		return m_converter == null
+				&& m_validator == null
+				&& m_detailProperty instanceof ObjectPropertyInfo;
+	}
 
-  @Override
-  public String getVariableIdentifier() throws Exception {
-    if (isVirtual()) {
-      return m_binding.getVariableIdentifier() + ".getDetailBinding()";
-    }
-    String variable = super.getVariableIdentifier();
-    if (variable == null) {
-      return m_binding.getVariableIdentifier() + ".setDetailBinding()";
-    }
-    return variable;
-  }
+	@Override
+	public String getVariableIdentifier() throws Exception {
+		if (isVirtual()) {
+			return m_binding.getVariableIdentifier() + ".getDetailBinding()";
+		}
+		String variable = super.getVariableIdentifier();
+		if (variable == null) {
+			return m_binding.getVariableIdentifier() + ".setDetailBinding()";
+		}
+		return variable;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Create {@link IUiContentProvider} content providers for edit this model.
-   */
-  @Override
-  public void createContentProviders(List<BindingInfo> bindings,
-      List<IUiContentProvider> providers,
-      IPageListener listener,
-      DatabindingsProvider provider) throws Exception {
-    // configure page
-    listener.setTitle(Messages.DetailBindingInfo_listenerTitle);
-    listener.setMessage(Messages.DetailBindingInfo_listenerMessage);
-    // add target
-    providers.add(new LabelUiContentProvider(Messages.DetailBindingInfo_component,
-        m_target.getPresentation().getTextForBinding()));
-    // add model
-    providers.add(new LabelUiContentProvider(Messages.DetailBindingInfo_model,
-        getModelPresentationText(false)));
-    providers.add(new DetailBindingUiContentProvider(createConfiguration(), this));
-    // binding self properties
-    providers.add(new SeparatorUiContentProvider());
-    providers.add(new ConverterUiContentProvider(createConverterConfiguration(), this));
-    providers.add(new ValidatorUiContentProvider(createValidatorConfiguration(), this));
-    providers.add(new BindingNameUiContentProvider(this));
-    providers.add(new BindingContentProvider(this, provider.getJavaInfoRoot()));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Create {@link IUiContentProvider} content providers for edit this model.
+	 */
+	@Override
+	public void createContentProviders(List<BindingInfo> bindings,
+			List<IUiContentProvider> providers,
+			IPageListener listener,
+			DatabindingsProvider provider) throws Exception {
+		// configure page
+		listener.setTitle(Messages.DetailBindingInfo_listenerTitle);
+		listener.setMessage(Messages.DetailBindingInfo_listenerMessage);
+		// add target
+		providers.add(new LabelUiContentProvider(Messages.DetailBindingInfo_component,
+				m_target.getPresentation().getTextForBinding()));
+		// add model
+		providers.add(new LabelUiContentProvider(Messages.DetailBindingInfo_model,
+				getModelPresentationText(false)));
+		providers.add(new DetailBindingUiContentProvider(createConfiguration(), this));
+		// binding self properties
+		providers.add(new SeparatorUiContentProvider());
+		providers.add(new ConverterUiContentProvider(createConverterConfiguration(), this));
+		providers.add(new ValidatorUiContentProvider(createValidatorConfiguration(), this));
+		providers.add(new BindingNameUiContentProvider(this));
+		providers.add(new BindingContentProvider(this, provider.getJavaInfoRoot()));
+	}
 
-  private static ChooseClassAndPropertiesConfiguration createConfiguration() {
-    ChooseClassAndPropertiesConfiguration configuration =
-        new ChooseClassAndPropertiesConfiguration();
-    configuration.setDialogFieldLabel(Messages.DetailBindingInfo_chooseLabel);
-    configuration.setValueScope("beans");
-    configuration.setChooseInterfaces(true);
-    configuration.setEmptyClassErrorMessage(Messages.DetailBindingInfo_chooseError);
-    configuration.setErrorMessagePrefix(Messages.DetailBindingInfo_chooseErrorPrefix);
-    configuration.setPropertiesLabel(Messages.DetailBindingInfo_choosePropertiesLabel);
-    configuration.setPropertiesErrorMessage(Messages.DetailBindingInfo_choosePropertiesError);
-    return configuration;
-  }
+	private static ChooseClassAndPropertiesConfiguration createConfiguration() {
+		ChooseClassAndPropertiesConfiguration configuration =
+				new ChooseClassAndPropertiesConfiguration();
+		configuration.setDialogFieldLabel(Messages.DetailBindingInfo_chooseLabel);
+		configuration.setValueScope("beans");
+		configuration.setChooseInterfaces(true);
+		configuration.setEmptyClassErrorMessage(Messages.DetailBindingInfo_chooseError);
+		configuration.setErrorMessagePrefix(Messages.DetailBindingInfo_chooseErrorPrefix);
+		configuration.setPropertiesLabel(Messages.DetailBindingInfo_choosePropertiesLabel);
+		configuration.setPropertiesErrorMessage(Messages.DetailBindingInfo_choosePropertiesError);
+		return configuration;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  //  Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean addSourceCodeSeparator() {
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	//  Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean addSourceCodeSeparator() {
+		return false;
+	}
 
-  @Override
-  public boolean isManaged() {
-    return true;
-  }
+	@Override
+	public boolean isManaged() {
+		return true;
+	}
 
-  @Override
-  public void addSourceCode(List<String> lines, CodeGenerationSupport generationSupport)
-      throws Exception {
-  }
+	@Override
+	public void addSourceCode(List<String> lines, CodeGenerationSupport generationSupport)
+			throws Exception {
+	}
 
-  public void addDetailSourceCode(List<String> lines, CodeGenerationSupport generationSupport)
-      throws Exception {
-    if (isVirtual()) {
-      return;
-    }
-    generationSupport.addSourceCode(m_detailProperty, lines);
-    boolean localVariable = !isField();
-    if (localVariable && m_converter == null && m_validator == null) {
-      setVariableIdentifier(null);
-      lines.add(m_binding.getVariableIdentifier()
-          + ".setDetailBinding("
-          + m_detailProperty.getVariableIdentifier()
-          + getCreateMethodHeaderEnd()
-          + ";");
-    } else {
-      if (super.getVariableIdentifier() == null) {
-        setVariableIdentifier(generationSupport.generateLocalName("JListDetail"));
-      }
-      if (localVariable) {
-        lines.add(m_binding.getTypeSourceCode(generationSupport) + ".DetailBinding ");
-      }
-      lines.add(super.getVariableIdentifier()
-          + " = "
-          + m_binding.getVariableIdentifier()
-          + ".setDetailBinding("
-          + m_detailProperty.getVariableIdentifier()
-          + getCreateMethodHeaderEnd()
-          + ";");
-      addFinishSourceCode(lines, generationSupport, false);
-    }
-  }
+	public void addDetailSourceCode(List<String> lines, CodeGenerationSupport generationSupport)
+			throws Exception {
+		if (isVirtual()) {
+			return;
+		}
+		generationSupport.addSourceCode(m_detailProperty, lines);
+		boolean localVariable = !isField();
+		if (localVariable && m_converter == null && m_validator == null) {
+			setVariableIdentifier(null);
+			lines.add(m_binding.getVariableIdentifier()
+					+ ".setDetailBinding("
+					+ m_detailProperty.getVariableIdentifier()
+					+ getCreateMethodHeaderEnd()
+					+ ";");
+		} else {
+			if (super.getVariableIdentifier() == null) {
+				setVariableIdentifier(generationSupport.generateLocalName("JListDetail"));
+			}
+			if (localVariable) {
+				lines.add(m_binding.getTypeSourceCode(generationSupport) + ".DetailBinding ");
+			}
+			lines.add(super.getVariableIdentifier()
+					+ " = "
+					+ m_binding.getVariableIdentifier()
+					+ ".setDetailBinding("
+					+ m_detailProperty.getVariableIdentifier()
+					+ getCreateMethodHeaderEnd()
+					+ ";");
+			addFinishSourceCode(lines, generationSupport, false);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IASTObjectInfo2
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void setVariableIdentifier(JavaInfo javaInfoRoot, String variable, boolean field) {
-    boolean useGenerics = CoreUtils.useGenerics(javaInfoRoot.getEditor().getJavaProject());
-    CodeGenerationSupport generationSupport = new CodeGenerationSupport(useGenerics);
-    String type = m_binding.getTypeSourceCode(generationSupport) + ".DetailBinding";
-    setVariableIdentifier(javaInfoRoot, type, variable, field);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IASTObjectInfo2
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void setVariableIdentifier(JavaInfo javaInfoRoot, String variable, boolean field) {
+		boolean useGenerics = CoreUtils.useGenerics(javaInfoRoot.getEditor().getJavaProject());
+		CodeGenerationSupport generationSupport = new CodeGenerationSupport(useGenerics);
+		String type = m_binding.getTypeSourceCode(generationSupport) + ".DetailBinding";
+		setVariableIdentifier(javaInfoRoot, type, variable, field);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getTargetPresentationText(boolean full) throws Exception {
-    return m_target.getPresentation().getTextForBinding() + ".detail";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getTargetPresentationText(boolean full) throws Exception {
+		return m_target.getPresentation().getTextForBinding() + ".detail";
+	}
 
-  @Override
-  public String getModelPresentationText(boolean full) throws Exception {
-    if (m_detailProperty != null) {
-      return m_detailProperty.getPresentationText(m_model, m_modelProperty, full);
-    }
-    return super.getModelPresentationText(full);
-  }
+	@Override
+	public String getModelPresentationText(boolean full) throws Exception {
+		if (m_detailProperty != null) {
+			return m_detailProperty.getPresentationText(m_model, m_modelProperty, full);
+		}
+		return super.getModelPresentationText(full);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Visiting
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void accept(AstObjectInfoVisitor visitor) throws Exception {
-    super.accept(visitor);
-    if (m_detailProperty != null) {
-      m_detailProperty.accept(visitor);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Visiting
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void accept(AstObjectInfoVisitor visitor) throws Exception {
+		super.accept(visitor);
+		if (m_detailProperty != null) {
+			m_detailProperty.accept(visitor);
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/bindings/JComboBoxBindingInfo.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/bindings/JComboBoxBindingInfo.java
index 37235d389..d8c3a768b 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/bindings/JComboBoxBindingInfo.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/bindings/JComboBoxBindingInfo.java
@@ -31,177 +31,177 @@
  *
  */
 public final class JComboBoxBindingInfo extends AutoBindingInfo {
-  private static final IGenericType JCOMBO_BOX_CLASS =
-      new ClassGenericType(javax.swing.JComboBox.class, null, null);
+	private static final IGenericType JCOMBO_BOX_CLASS =
+			new ClassGenericType(javax.swing.JComboBox.class, null, null);
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public JComboBoxBindingInfo(UpdateStrategyInfo strategyInfo,
-      ObserveInfo target,
-      ObserveInfo targetProperty,
-      PropertyInfo targetAstProperty,
-      ObserveInfo model,
-      ObserveInfo modelProperty,
-      PropertyInfo modelAstProperty) {
-    super(strategyInfo,
-        target,
-        targetProperty,
-        targetAstProperty,
-        model,
-        modelProperty,
-        modelAstProperty);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public JComboBoxBindingInfo(UpdateStrategyInfo strategyInfo,
+			ObserveInfo target,
+			ObserveInfo targetProperty,
+			PropertyInfo targetAstProperty,
+			ObserveInfo model,
+			ObserveInfo modelProperty,
+			PropertyInfo modelAstProperty) {
+		super(strategyInfo,
+				target,
+				targetProperty,
+				targetAstProperty,
+				model,
+				modelProperty,
+				modelAstProperty);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public IGenericType getInputElementType() {
-    if (isJComboBoxBinding(m_target, m_targetProperty)) {
-      return m_modelProperty.getObjectType().getSubType(0);
-    }
-    return m_targetProperty.getObjectType().getSubType(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public IGenericType getInputElementType() {
+		if (isJComboBoxBinding(m_target, m_targetProperty)) {
+			return m_modelProperty.getObjectType().getSubType(0);
+		}
+		return m_targetProperty.getObjectType().getSubType(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  //  Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void addSourceCode(List<String> lines, CodeGenerationSupport generationSupport)
-      throws Exception {
-    if (isJComboBoxBinding(m_target, m_targetProperty)) {
-      addSourceCode(
-          m_target,
-          m_model,
-          m_modelProperty,
-          m_modelAstProperty,
-          lines,
-          generationSupport);
-    } else {
-      addSourceCode(
-          m_model,
-          m_target,
-          m_targetProperty,
-          m_targetAstProperty,
-          lines,
-          generationSupport);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	//  Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void addSourceCode(List<String> lines, CodeGenerationSupport generationSupport)
+			throws Exception {
+		if (isJComboBoxBinding(m_target, m_targetProperty)) {
+			addSourceCode(
+					m_target,
+					m_model,
+					m_modelProperty,
+					m_modelAstProperty,
+					lines,
+					generationSupport);
+		} else {
+			addSourceCode(
+					m_model,
+					m_target,
+					m_targetProperty,
+					m_targetAstProperty,
+					lines,
+					generationSupport);
+		}
+	}
 
-  private void addSourceCode(ObserveInfo widget,
-      ObserveInfo model,
-      ObserveInfo modelProperty,
-      PropertyInfo modelAstProperty,
-      List<String> lines,
-      CodeGenerationSupport generationSupport) throws Exception {
-    if (getVariableIdentifier() == null) {
-      setVariableIdentifier(generationSupport.generateLocalName("JComboBinding"));
-    }
-    StringBuffer line = new StringBuffer();
-    boolean localVariable = !isField();
-    if (localVariable) {
-      line.append("org.jdesktop.swingbinding.JComboBoxBinding");
-    }
-    if (modelAstProperty instanceof ObjectPropertyInfo) {
-      if (localVariable) {
-        if (generationSupport.useGenerics()) {
-          line.append(GenericUtils.getTypesSource(
-              model.getObjectType().getSubType(0),
-              model.getObjectType(),
-              JCOMBO_BOX_CLASS));
-        }
-        line.append(" ");
-      }
-      line.append(getVariableIdentifier());
-      line.append(" = org.jdesktop.swingbinding.SwingBindings.createJComboBoxBinding(");
-      line.append(m_strategyInfo.getStrategySourceCode());
-      line.append(", ");
-      line.append(model.getReference());
-      line.append(", ");
-      line.append(widget.getReference());
-    } else {
-      generationSupport.addSourceCode(modelAstProperty, lines);
-      if (localVariable) {
-        if (generationSupport.useGenerics()) {
-          line.append(GenericUtils.getTypesSource(
-              modelProperty.getObjectType().getSubType(0),
-              model.getObjectType(),
-              JCOMBO_BOX_CLASS));
-        }
-        line.append(" ");
-      }
-      line.append(getVariableIdentifier());
-      line.append(" = org.jdesktop.swingbinding.SwingBindings.createJComboBoxBinding(");
-      line.append(m_strategyInfo.getStrategySourceCode());
-      line.append(", ");
-      line.append(model.getReference());
-      line.append(", ");
-      line.append(modelAstProperty.getVariableIdentifier());
-      line.append(", ");
-      line.append(widget.getReference());
-    }
-    line.append(getCreateMethodHeaderEnd());
-    line.append(";");
-    lines.add(line.toString());
-    addFinishSourceCode(lines, generationSupport, true);
-  }
+	private void addSourceCode(ObserveInfo widget,
+			ObserveInfo model,
+			ObserveInfo modelProperty,
+			PropertyInfo modelAstProperty,
+			List<String> lines,
+			CodeGenerationSupport generationSupport) throws Exception {
+		if (getVariableIdentifier() == null) {
+			setVariableIdentifier(generationSupport.generateLocalName("JComboBinding"));
+		}
+		StringBuffer line = new StringBuffer();
+		boolean localVariable = !isField();
+		if (localVariable) {
+			line.append("org.jdesktop.swingbinding.JComboBoxBinding");
+		}
+		if (modelAstProperty instanceof ObjectPropertyInfo) {
+			if (localVariable) {
+				if (generationSupport.useGenerics()) {
+					line.append(GenericUtils.getTypesSource(
+							model.getObjectType().getSubType(0),
+							model.getObjectType(),
+							JCOMBO_BOX_CLASS));
+				}
+				line.append(" ");
+			}
+			line.append(getVariableIdentifier());
+			line.append(" = org.jdesktop.swingbinding.SwingBindings.createJComboBoxBinding(");
+			line.append(m_strategyInfo.getStrategySourceCode());
+			line.append(", ");
+			line.append(model.getReference());
+			line.append(", ");
+			line.append(widget.getReference());
+		} else {
+			generationSupport.addSourceCode(modelAstProperty, lines);
+			if (localVariable) {
+				if (generationSupport.useGenerics()) {
+					line.append(GenericUtils.getTypesSource(
+							modelProperty.getObjectType().getSubType(0),
+							model.getObjectType(),
+							JCOMBO_BOX_CLASS));
+				}
+				line.append(" ");
+			}
+			line.append(getVariableIdentifier());
+			line.append(" = org.jdesktop.swingbinding.SwingBindings.createJComboBoxBinding(");
+			line.append(m_strategyInfo.getStrategySourceCode());
+			line.append(", ");
+			line.append(model.getReference());
+			line.append(", ");
+			line.append(modelAstProperty.getVariableIdentifier());
+			line.append(", ");
+			line.append(widget.getReference());
+		}
+		line.append(getCreateMethodHeaderEnd());
+		line.append(";");
+		lines.add(line.toString());
+		addFinishSourceCode(lines, generationSupport, true);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IASTObjectInfo2
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void setVariableIdentifier(JavaInfo javaInfoRoot, String variable, boolean field) {
-    String type = "org.jdesktop.swingbinding.JComboBoxBinding";
-    if (CoreUtils.useGenerics(javaInfoRoot.getEditor().getJavaProject())) {
-      if (isJComboBoxBinding(m_target, m_targetProperty)) {
-        type += getTypeSource(m_model, m_modelProperty, m_modelAstProperty, JCOMBO_BOX_CLASS);
-      } else {
-        type += getTypeSource(m_target, m_targetProperty, m_targetAstProperty, JCOMBO_BOX_CLASS);
-      }
-    }
-    setVariableIdentifier(javaInfoRoot, type, variable, field);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IASTObjectInfo2
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void setVariableIdentifier(JavaInfo javaInfoRoot, String variable, boolean field) {
+		String type = "org.jdesktop.swingbinding.JComboBoxBinding";
+		if (CoreUtils.useGenerics(javaInfoRoot.getEditor().getJavaProject())) {
+			if (isJComboBoxBinding(m_target, m_targetProperty)) {
+				type += getTypeSource(m_model, m_modelProperty, m_modelAstProperty, JCOMBO_BOX_CLASS);
+			} else {
+				type += getTypeSource(m_target, m_targetProperty, m_targetAstProperty, JCOMBO_BOX_CLASS);
+			}
+		}
+		setVariableIdentifier(javaInfoRoot, type, variable, field);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parser
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void preCreate() throws Exception {
-    BeanPropertyObserveInfo selectedElement = getSelectedItemProperty();
-    selectedElement.setHostedType(getInputElementType());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parser
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void preCreate() throws Exception {
+		BeanPropertyObserveInfo selectedElement = getSelectedItemProperty();
+		selectedElement.setHostedType(getInputElementType());
+	}
 
-  @Override
-  public void postDelete() throws Exception {
-    super.postDelete();
-    BeanPropertyObserveInfo selectedElement = getSelectedItemProperty();
-    selectedElement.setHostedType(ClassGenericType.OBJECT_CLASS);
-  }
+	@Override
+	public void postDelete() throws Exception {
+		super.postDelete();
+		BeanPropertyObserveInfo selectedElement = getSelectedItemProperty();
+		selectedElement.setHostedType(ClassGenericType.OBJECT_CLASS);
+	}
 
-  private BeanPropertyObserveInfo getSelectedItemProperty() throws Exception {
-    return BeanSupport.getProperty(
-        this,
-        isJComboBoxBinding(m_target, m_targetProperty),
-        "selectedItem");
-  }
+	private BeanPropertyObserveInfo getSelectedItemProperty() throws Exception {
+		return BeanSupport.getProperty(
+				this,
+				isJComboBoxBinding(m_target, m_targetProperty),
+				"selectedItem");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static boolean isJComboBoxBinding(ObserveInfo observe, ObserveInfo propertyObserve) {
-    return observe.getCreationType() == ObserveCreationType.JComboBoxBinding
-        && propertyObserve.getCreationType() == ObserveCreationType.SelfProperty;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static boolean isJComboBoxBinding(ObserveInfo observe, ObserveInfo propertyObserve) {
+		return observe.getCreationType() == ObserveCreationType.JComboBoxBinding
+				&& propertyObserve.getCreationType() == ObserveCreationType.SelfProperty;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/bindings/JListBindingInfo.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/bindings/JListBindingInfo.java
index 9542d6248..5c0f25c0f 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/bindings/JListBindingInfo.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/bindings/JListBindingInfo.java
@@ -47,342 +47,342 @@
  * @coverage bindings.swing.model.bindings
  */
 public final class JListBindingInfo extends AutoBindingInfo {
-  private static final String DETAIL_BINDING_1 =
-      "org.jdesktop.swingbinding.JListBinding.setDetailBinding(org.jdesktop.beansbinding.Property)";
-  private static final String DETAIL_BINDING_2 =
-      "org.jdesktop.swingbinding.JListBinding.setDetailBinding(org.jdesktop.beansbinding.Property,java.lang.String)";
-  //
-  private static final IGenericType JLIST_CLASS = new ClassGenericType(javax.swing.JList.class,
-      null,
-      null);
-  //
-  private DetailBindingInfo m_detailBinding;
+	private static final String DETAIL_BINDING_1 =
+			"org.jdesktop.swingbinding.JListBinding.setDetailBinding(org.jdesktop.beansbinding.Property)";
+	private static final String DETAIL_BINDING_2 =
+			"org.jdesktop.swingbinding.JListBinding.setDetailBinding(org.jdesktop.beansbinding.Property,java.lang.String)";
+	//
+	private static final IGenericType JLIST_CLASS = new ClassGenericType(javax.swing.JList.class,
+			null,
+			null);
+	//
+	private DetailBindingInfo m_detailBinding;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public JListBindingInfo(UpdateStrategyInfo strategyInfo,
-      ObserveInfo target,
-      ObserveInfo targetProperty,
-      PropertyInfo targetAstProperty,
-      ObserveInfo model,
-      ObserveInfo modelProperty,
-      PropertyInfo modelAstProperty) {
-    super(strategyInfo,
-        target,
-        targetProperty,
-        targetAstProperty,
-        model,
-        modelProperty,
-        modelAstProperty);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public JListBindingInfo(UpdateStrategyInfo strategyInfo,
+			ObserveInfo target,
+			ObserveInfo targetProperty,
+			PropertyInfo targetAstProperty,
+			ObserveInfo model,
+			ObserveInfo modelProperty,
+			PropertyInfo modelAstProperty) {
+		super(strategyInfo,
+				target,
+				targetProperty,
+				targetAstProperty,
+				model,
+				modelProperty,
+				modelAstProperty);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parser
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public AstObjectInfo parseExpression(AstEditor editor,
-      String signature,
-      MethodInvocation invocation,
-      Expression[] arguments,
-      IModelResolver resolver,
-      IDatabindingsProvider provider) throws Exception {
-    // JListBinding.setDetailBinding(Property, [String])
-    if (DETAIL_BINDING_1.equals(signature) || DETAIL_BINDING_2.equals(signature)) {
-      Assert.isNull(m_detailBinding);
-      m_detailBinding = createDetailBinding();
-      m_detailBinding.setDetailProperty((PropertyInfo) resolver.getModel(arguments[0]));
-      //
-      if (signature.endsWith(",java.lang.String)")) {
-        String name = CoreUtils.evaluate(String.class, editor, arguments[arguments.length - 1]);
-        m_detailBinding.setName(StringEscapeUtils.unescapeJava(name));
-      }
-      //
-      return m_detailBinding;
-    }
-    return super.parseExpression(editor, signature, invocation, arguments, resolver, provider);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parser
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public AstObjectInfo parseExpression(AstEditor editor,
+			String signature,
+			MethodInvocation invocation,
+			Expression[] arguments,
+			IModelResolver resolver,
+			IDatabindingsProvider provider) throws Exception {
+		// JListBinding.setDetailBinding(Property, [String])
+		if (DETAIL_BINDING_1.equals(signature) || DETAIL_BINDING_2.equals(signature)) {
+			Assert.isNull(m_detailBinding);
+			m_detailBinding = createDetailBinding();
+			m_detailBinding.setDetailProperty((PropertyInfo) resolver.getModel(arguments[0]));
+			//
+			if (signature.endsWith(",java.lang.String)")) {
+				String name = CoreUtils.evaluate(String.class, editor, arguments[arguments.length - 1]);
+				m_detailBinding.setName(StringEscapeUtils.unescapeJava(name));
+			}
+			//
+			return m_detailBinding;
+		}
+		return super.parseExpression(editor, signature, invocation, arguments, resolver, provider);
+	}
 
-  @Override
-  public void create(List<BindingInfo> bindings) throws Exception {
-    super.create(bindings);
-    if (m_detailBinding == null) {
-      m_detailBinding = createDefaultDetailBinding();
-    }
-    bindings.add(bindings.indexOf(this) + 1, m_detailBinding);
-    preCreate();
-  }
+	@Override
+	public void create(List<BindingInfo> bindings) throws Exception {
+		super.create(bindings);
+		if (m_detailBinding == null) {
+			m_detailBinding = createDefaultDetailBinding();
+		}
+		bindings.add(bindings.indexOf(this) + 1, m_detailBinding);
+		preCreate();
+	}
 
-  @Override
-  public boolean delete(List<BindingInfo> bindings) throws Exception {
-    m_detailBinding.postDelete();
-    bindings.remove(m_detailBinding);
-    return true;
-  }
+	@Override
+	public boolean delete(List<BindingInfo> bindings) throws Exception {
+		m_detailBinding.postDelete();
+		bindings.remove(m_detailBinding);
+		return true;
+	}
 
-  @Override
-  public void move(List<BindingInfo> bindings) {
-    bindings.remove(m_detailBinding);
-    bindings.add(bindings.indexOf(this) + 1, m_detailBinding);
-  }
+	@Override
+	public void move(List<BindingInfo> bindings) {
+		bindings.remove(m_detailBinding);
+		bindings.add(bindings.indexOf(this) + 1, m_detailBinding);
+	}
 
-  public DetailBindingInfo createDefaultDetailBinding() {
-    DetailBindingInfo binding = createDetailBinding();
-    binding.setDetailProperty(new ObjectPropertyInfo(getInputElementType()));
-    return binding;
-  }
+	public DetailBindingInfo createDefaultDetailBinding() {
+		DetailBindingInfo binding = createDetailBinding();
+		binding.setDetailProperty(new ObjectPropertyInfo(getInputElementType()));
+		return binding;
+	}
 
-  private DetailBindingInfo createDetailBinding() {
-    if (isJListBinding(m_target, m_targetProperty)) {
-      return new DetailBindingInfo(m_target,
-          m_targetProperty,
-          m_targetAstProperty,
-          m_model,
-          m_modelProperty,
-          m_modelAstProperty,
-          this);
-    }
-    return new DetailBindingInfo(m_model,
-        m_modelProperty,
-        m_modelAstProperty,
-        m_target,
-        m_targetProperty,
-        m_targetAstProperty,
-        this);
-  }
+	private DetailBindingInfo createDetailBinding() {
+		if (isJListBinding(m_target, m_targetProperty)) {
+			return new DetailBindingInfo(m_target,
+					m_targetProperty,
+					m_targetAstProperty,
+					m_model,
+					m_modelProperty,
+					m_modelAstProperty,
+					this);
+		}
+		return new DetailBindingInfo(m_model,
+				m_modelProperty,
+				m_modelAstProperty,
+				m_target,
+				m_targetProperty,
+				m_targetAstProperty,
+				this);
+	}
 
-  @Override
-  public void preCreate() throws Exception {
-    BeanPropertyObserveInfo selectedElement = getSelectedElementProperty();
-    selectedElement.setHostedType(getInputElementType());
-  }
+	@Override
+	public void preCreate() throws Exception {
+		BeanPropertyObserveInfo selectedElement = getSelectedElementProperty();
+		selectedElement.setHostedType(getInputElementType());
+	}
 
-  @Override
-  public void postDelete() throws Exception {
-    super.postDelete();
-    BeanPropertyObserveInfo selectedElement = getSelectedElementProperty();
-    selectedElement.setHostedType(ClassGenericType.OBJECT_CLASS);
-  }
+	@Override
+	public void postDelete() throws Exception {
+		super.postDelete();
+		BeanPropertyObserveInfo selectedElement = getSelectedElementProperty();
+		selectedElement.setHostedType(ClassGenericType.OBJECT_CLASS);
+	}
 
-  private BeanPropertyObserveInfo getSelectedElementProperty() throws Exception {
-    return BeanSupport.getProperty(
-        this,
-        isJListBinding(m_target, m_targetProperty),
-        "selectedElement");
-  }
+	private BeanPropertyObserveInfo getSelectedElementProperty() throws Exception {
+		return BeanSupport.getProperty(
+				this,
+				isJListBinding(m_target, m_targetProperty),
+				"selectedElement");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public IGenericType getInputElementType() {
-    if (isJListBinding(m_target, m_targetProperty)) {
-      return m_modelProperty.getObjectType().getSubType(0);
-    }
-    return m_targetProperty.getObjectType().getSubType(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public IGenericType getInputElementType() {
+		if (isJListBinding(m_target, m_targetProperty)) {
+			return m_modelProperty.getObjectType().getSubType(0);
+		}
+		return m_targetProperty.getObjectType().getSubType(0);
+	}
 
-  public String getTypeSourceCode(CodeGenerationSupport generationSupport) {
-    // check generic
-    if (!generationSupport.useGenerics()) {
-      return "org.jdesktop.swingbinding.JListBinding";
-    }
-    // calculate types
-    IGenericType type0;
-    IGenericType type1;
-    if (isJListBinding(m_target, m_targetProperty)) {
-      if (m_modelAstProperty instanceof ObjectPropertyInfo) {
-        type0 = m_model.getObjectType().getSubType(0);
-        type1 = m_model.getObjectType();
-      } else {
-        type0 = m_modelProperty.getObjectType().getSubType(0);
-        type1 = m_model.getObjectType();
-      }
-    } else {
-      if (m_targetAstProperty instanceof ObjectPropertyInfo) {
-        type0 = m_target.getObjectType().getSubType(0);
-        type1 = m_target.getObjectType();
-      } else {
-        type0 = m_targetProperty.getObjectType().getSubType(0);
-        type1 = m_target.getObjectType();
-      }
-    }
-    // source code
-    return "org.jdesktop.swingbinding.JListBinding"
-        + GenericUtils.getTypesSource(type0, type1, JLIST_CLASS);
-  }
+	public String getTypeSourceCode(CodeGenerationSupport generationSupport) {
+		// check generic
+		if (!generationSupport.useGenerics()) {
+			return "org.jdesktop.swingbinding.JListBinding";
+		}
+		// calculate types
+		IGenericType type0;
+		IGenericType type1;
+		if (isJListBinding(m_target, m_targetProperty)) {
+			if (m_modelAstProperty instanceof ObjectPropertyInfo) {
+				type0 = m_model.getObjectType().getSubType(0);
+				type1 = m_model.getObjectType();
+			} else {
+				type0 = m_modelProperty.getObjectType().getSubType(0);
+				type1 = m_model.getObjectType();
+			}
+		} else {
+			if (m_targetAstProperty instanceof ObjectPropertyInfo) {
+				type0 = m_target.getObjectType().getSubType(0);
+				type1 = m_target.getObjectType();
+			} else {
+				type0 = m_targetProperty.getObjectType().getSubType(0);
+				type1 = m_target.getObjectType();
+			}
+		}
+		// source code
+		return "org.jdesktop.swingbinding.JListBinding"
+		+ GenericUtils.getTypesSource(type0, type1, JLIST_CLASS);
+	}
 
-  public DetailBindingInfo getDetailBinding() {
-    if (m_detailBinding == null) {
-      m_detailBinding = createDefaultDetailBinding();
-    }
-    return m_detailBinding;
-  }
+	public DetailBindingInfo getDetailBinding() {
+		if (m_detailBinding == null) {
+			m_detailBinding = createDefaultDetailBinding();
+		}
+		return m_detailBinding;
+	}
 
-  public void setDetailBinding(DetailBindingInfo detailBinding, List<BindingInfo> bindings)
-      throws Exception {
-    int index = bindings.indexOf(this);
-    if (index == -1) {
-      m_detailBinding = detailBinding;
-    } else {
-      if (m_detailBinding != null) {
-        bindings.remove(m_detailBinding);
-        m_detailBinding.postDelete();
-      }
-      m_detailBinding = detailBinding;
-      bindings.add(index + 1, m_detailBinding);
-    }
-    m_detailBinding.create(bindings);
-  }
+	public void setDetailBinding(DetailBindingInfo detailBinding, List<BindingInfo> bindings)
+			throws Exception {
+		int index = bindings.indexOf(this);
+		if (index == -1) {
+			m_detailBinding = detailBinding;
+		} else {
+			if (m_detailBinding != null) {
+				bindings.remove(m_detailBinding);
+				m_detailBinding.postDelete();
+			}
+			m_detailBinding = detailBinding;
+			bindings.add(index + 1, m_detailBinding);
+		}
+		m_detailBinding.create(bindings);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void createContentProviders(List<BindingInfo> bindings,
-      List<IUiContentProvider> providers,
-      IPageListener listener,
-      DatabindingsProvider provider) throws Exception {
-    super.createContentProviders(bindings, providers, listener, provider);
-    providers.add(new JListDetailContainerUiContentProvider(createTabConfiguration(),
-        this,
-        bindings,
-        provider));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void createContentProviders(List<BindingInfo> bindings,
+			List<IUiContentProvider> providers,
+			IPageListener listener,
+			DatabindingsProvider provider) throws Exception {
+		super.createContentProviders(bindings, providers, listener, provider);
+		providers.add(new JListDetailContainerUiContentProvider(createTabConfiguration(),
+				this,
+				bindings,
+				provider));
+	}
 
-  private TabContainerConfiguration createTabConfiguration() {
-    TabContainerConfiguration configuration = new TabContainerConfiguration();
-    configuration.setUseRemoveButton(true);
-    return configuration;
-  }
+	private TabContainerConfiguration createTabConfiguration() {
+		TabContainerConfiguration configuration = new TabContainerConfiguration();
+		configuration.setUseRemoveButton(true);
+		return configuration;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  //  Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void addSourceCode(List<String> lines, CodeGenerationSupport generationSupport)
-      throws Exception {
-    if (isJListBinding(m_target, m_targetProperty)) {
-      addSourceCode(
-          m_target,
-          m_model,
-          m_modelProperty,
-          m_modelAstProperty,
-          lines,
-          generationSupport);
-    } else {
-      addSourceCode(
-          m_model,
-          m_target,
-          m_targetProperty,
-          m_targetAstProperty,
-          lines,
-          generationSupport);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	//  Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void addSourceCode(List<String> lines, CodeGenerationSupport generationSupport)
+			throws Exception {
+		if (isJListBinding(m_target, m_targetProperty)) {
+			addSourceCode(
+					m_target,
+					m_model,
+					m_modelProperty,
+					m_modelAstProperty,
+					lines,
+					generationSupport);
+		} else {
+			addSourceCode(
+					m_model,
+					m_target,
+					m_targetProperty,
+					m_targetAstProperty,
+					lines,
+					generationSupport);
+		}
+	}
 
-  private void addSourceCode(ObserveInfo component,
-      ObserveInfo model,
-      ObserveInfo modelProperty,
-      PropertyInfo modelAstProperty,
-      List<String> lines,
-      CodeGenerationSupport generationSupport) throws Exception {
-    // handle variable
-    if (getVariableIdentifier() == null) {
-      setVariableIdentifier(generationSupport.generateLocalName("JListBinding"));
-    }
-    // begin
-    StringBuffer line = new StringBuffer();
-    boolean localVariable = !isField();
-    if (localVariable) {
-      line.append("org.jdesktop.swingbinding.JListBinding");
-    }
-    if (modelAstProperty instanceof ObjectPropertyInfo) {
-      if (localVariable) {
-        if (generationSupport.useGenerics()) {
-          line.append(GenericUtils.getTypesSource(
-              model.getObjectType().getSubType(0),
-              model.getObjectType(),
-              JLIST_CLASS));
-        }
-        line.append(" ");
-      }
-      line.append(getVariableIdentifier());
-      line.append(" = org.jdesktop.swingbinding.SwingBindings.createJListBinding(");
-      line.append(m_strategyInfo.getStrategySourceCode());
-      line.append(", ");
-      line.append(model.getReference());
-      line.append(", ");
-      line.append(component.getReference());
-    } else {
-      generationSupport.addSourceCode(modelAstProperty, lines);
-      if (localVariable) {
-        if (generationSupport.useGenerics()) {
-          line.append(GenericUtils.getTypesSource(
-              modelProperty.getObjectType().getSubType(0),
-              model.getObjectType(),
-              JLIST_CLASS));
-        }
-        line.append(" ");
-      }
-      line.append(getVariableIdentifier());
-      line.append(" = org.jdesktop.swingbinding.SwingBindings.createJListBinding(");
-      line.append(m_strategyInfo.getStrategySourceCode());
-      line.append(", ");
-      line.append(model.getReference());
-      line.append(", ");
-      line.append(modelAstProperty.getVariableIdentifier());
-      line.append(", ");
-      line.append(component.getReference());
-    }
-    // end
-    line.append(getCreateMethodHeaderEnd());
-    line.append(";");
-    lines.add(line.toString());
-    // detail
-    if (!m_detailBinding.isVirtual()) {
-      lines.add("//");
-      m_detailBinding.addDetailSourceCode(lines, generationSupport);
-      lines.add("//");
-    }
-    // converter & validator
-    addFinishSourceCode(lines, generationSupport, true);
-  }
+	private void addSourceCode(ObserveInfo component,
+			ObserveInfo model,
+			ObserveInfo modelProperty,
+			PropertyInfo modelAstProperty,
+			List<String> lines,
+			CodeGenerationSupport generationSupport) throws Exception {
+		// handle variable
+		if (getVariableIdentifier() == null) {
+			setVariableIdentifier(generationSupport.generateLocalName("JListBinding"));
+		}
+		// begin
+		StringBuffer line = new StringBuffer();
+		boolean localVariable = !isField();
+		if (localVariable) {
+			line.append("org.jdesktop.swingbinding.JListBinding");
+		}
+		if (modelAstProperty instanceof ObjectPropertyInfo) {
+			if (localVariable) {
+				if (generationSupport.useGenerics()) {
+					line.append(GenericUtils.getTypesSource(
+							model.getObjectType().getSubType(0),
+							model.getObjectType(),
+							JLIST_CLASS));
+				}
+				line.append(" ");
+			}
+			line.append(getVariableIdentifier());
+			line.append(" = org.jdesktop.swingbinding.SwingBindings.createJListBinding(");
+			line.append(m_strategyInfo.getStrategySourceCode());
+			line.append(", ");
+			line.append(model.getReference());
+			line.append(", ");
+			line.append(component.getReference());
+		} else {
+			generationSupport.addSourceCode(modelAstProperty, lines);
+			if (localVariable) {
+				if (generationSupport.useGenerics()) {
+					line.append(GenericUtils.getTypesSource(
+							modelProperty.getObjectType().getSubType(0),
+							model.getObjectType(),
+							JLIST_CLASS));
+				}
+				line.append(" ");
+			}
+			line.append(getVariableIdentifier());
+			line.append(" = org.jdesktop.swingbinding.SwingBindings.createJListBinding(");
+			line.append(m_strategyInfo.getStrategySourceCode());
+			line.append(", ");
+			line.append(model.getReference());
+			line.append(", ");
+			line.append(modelAstProperty.getVariableIdentifier());
+			line.append(", ");
+			line.append(component.getReference());
+		}
+		// end
+		line.append(getCreateMethodHeaderEnd());
+		line.append(";");
+		lines.add(line.toString());
+		// detail
+		if (!m_detailBinding.isVirtual()) {
+			lines.add("//");
+			m_detailBinding.addDetailSourceCode(lines, generationSupport);
+			lines.add("//");
+		}
+		// converter & validator
+		addFinishSourceCode(lines, generationSupport, true);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IASTObjectInfo2
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void setVariableIdentifier(JavaInfo javaInfoRoot, String variable, boolean field) {
-    String type = "org.jdesktop.swingbinding.JListBinding";
-    if (CoreUtils.useGenerics(javaInfoRoot.getEditor().getJavaProject())) {
-      if (isJListBinding(m_target, m_targetProperty)) {
-        type += getTypeSource(m_model, m_modelProperty, m_modelAstProperty, JLIST_CLASS);
-      } else {
-        type += getTypeSource(m_target, m_targetProperty, m_targetAstProperty, JLIST_CLASS);
-      }
-    }
-    setVariableIdentifier(javaInfoRoot, type, variable, field);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IASTObjectInfo2
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void setVariableIdentifier(JavaInfo javaInfoRoot, String variable, boolean field) {
+		String type = "org.jdesktop.swingbinding.JListBinding";
+		if (CoreUtils.useGenerics(javaInfoRoot.getEditor().getJavaProject())) {
+			if (isJListBinding(m_target, m_targetProperty)) {
+				type += getTypeSource(m_model, m_modelProperty, m_modelAstProperty, JLIST_CLASS);
+			} else {
+				type += getTypeSource(m_target, m_targetProperty, m_targetAstProperty, JLIST_CLASS);
+			}
+		}
+		setVariableIdentifier(javaInfoRoot, type, variable, field);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static boolean isJListBinding(ObserveInfo observe, ObserveInfo propertyObserve) {
-    return observe.getCreationType() == ObserveCreationType.JListBinding
-        && propertyObserve.getCreationType() == ObserveCreationType.SelfProperty;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static boolean isJListBinding(ObserveInfo observe, ObserveInfo propertyObserve) {
+		return observe.getCreationType() == ObserveCreationType.JListBinding
+				&& propertyObserve.getCreationType() == ObserveCreationType.SelfProperty;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/bindings/JTableBindingInfo.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/bindings/JTableBindingInfo.java
index 0a52cb58a..8f08ca950 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/bindings/JTableBindingInfo.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/bindings/JTableBindingInfo.java
@@ -51,405 +51,405 @@
  * @coverage bindings.swing.model.bindings
  */
 public final class JTableBindingInfo extends AutoBindingInfo implements IEditableProvider {
-  private static final String SET_EDITABLE =
-      "org.jdesktop.swingbinding.JTableBinding.setEditable(boolean)";
-  private static final String ADD_COLUMN_BINDING_1 =
-      "org.jdesktop.swingbinding.JTableBinding.addColumnBinding(org.jdesktop.beansbinding.Property)";
-  private static final String ADD_COLUMN_BINDING_2 =
-      "org.jdesktop.swingbinding.JTableBinding.addColumnBinding(org.jdesktop.beansbinding.Property,java.lang.String)";
-  private static final String ADD_COLUMN_BINDING_3 =
-      "org.jdesktop.swingbinding.JTableBinding.addColumnBinding(int,org.jdesktop.beansbinding.Property)";
-  private static final String ADD_COLUMN_BINDING_4 =
-      "org.jdesktop.swingbinding.JTableBinding.addColumnBinding(int,org.jdesktop.beansbinding.Property,java.lang.String)";
-  //
-  private static final IGenericType JTABLE_CLASS = new ClassGenericType(javax.swing.JTable.class,
-      null,
-      null);
-  //
-  private boolean m_editable = true;
-  private List<ColumnBindingInfo> m_columns = Lists.newArrayList();
+	private static final String SET_EDITABLE =
+			"org.jdesktop.swingbinding.JTableBinding.setEditable(boolean)";
+	private static final String ADD_COLUMN_BINDING_1 =
+			"org.jdesktop.swingbinding.JTableBinding.addColumnBinding(org.jdesktop.beansbinding.Property)";
+	private static final String ADD_COLUMN_BINDING_2 =
+			"org.jdesktop.swingbinding.JTableBinding.addColumnBinding(org.jdesktop.beansbinding.Property,java.lang.String)";
+	private static final String ADD_COLUMN_BINDING_3 =
+			"org.jdesktop.swingbinding.JTableBinding.addColumnBinding(int,org.jdesktop.beansbinding.Property)";
+	private static final String ADD_COLUMN_BINDING_4 =
+			"org.jdesktop.swingbinding.JTableBinding.addColumnBinding(int,org.jdesktop.beansbinding.Property,java.lang.String)";
+	//
+	private static final IGenericType JTABLE_CLASS = new ClassGenericType(javax.swing.JTable.class,
+			null,
+			null);
+	//
+	private boolean m_editable = true;
+	private List<ColumnBindingInfo> m_columns = Lists.newArrayList();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public JTableBindingInfo(UpdateStrategyInfo strategyInfo,
-      ObserveInfo target,
-      ObserveInfo targetProperty,
-      PropertyInfo targetAstProperty,
-      ObserveInfo model,
-      ObserveInfo modelProperty,
-      PropertyInfo modelAstProperty) {
-    super(strategyInfo,
-        target,
-        targetProperty,
-        targetAstProperty,
-        model,
-        modelProperty,
-        modelAstProperty);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public JTableBindingInfo(UpdateStrategyInfo strategyInfo,
+			ObserveInfo target,
+			ObserveInfo targetProperty,
+			PropertyInfo targetAstProperty,
+			ObserveInfo model,
+			ObserveInfo modelProperty,
+			PropertyInfo modelAstProperty) {
+		super(strategyInfo,
+				target,
+				targetProperty,
+				targetAstProperty,
+				model,
+				modelProperty,
+				modelAstProperty);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public boolean isEditable() {
-    return m_editable;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public boolean isEditable() {
+		return m_editable;
+	}
 
-  public void setEditable(boolean editable) {
-    m_editable = editable;
-  }
+	public void setEditable(boolean editable) {
+		m_editable = editable;
+	}
 
-  public List<ColumnBindingInfo> getColumns() {
-    return m_columns;
-  }
+	public List<ColumnBindingInfo> getColumns() {
+		return m_columns;
+	}
 
-  public void setColumns(List<ColumnBindingInfo> columns, List<BindingInfo> bindings)
-      throws Exception {
-    int index = bindings.indexOf(this);
-    if (index == -1) {
-      m_columns = columns;
-    } else {
-      // remove old
-      bindings.removeAll(m_columns);
-      for (ColumnBindingInfo column : m_columns) {
-        column.postDelete();
-      }
-      // add new
-      m_columns = columns;
-      if (!m_columns.isEmpty()) {
-        bindings.addAll(index + 1, m_columns);
-      }
-    }
-    // force create
-    for (ColumnBindingInfo column : m_columns) {
-      column.create(bindings);
-    }
-  }
+	public void setColumns(List<ColumnBindingInfo> columns, List<BindingInfo> bindings)
+			throws Exception {
+		int index = bindings.indexOf(this);
+		if (index == -1) {
+			m_columns = columns;
+		} else {
+			// remove old
+			bindings.removeAll(m_columns);
+			for (ColumnBindingInfo column : m_columns) {
+				column.postDelete();
+			}
+			// add new
+			m_columns = columns;
+			if (!m_columns.isEmpty()) {
+				bindings.addAll(index + 1, m_columns);
+			}
+		}
+		// force create
+		for (ColumnBindingInfo column : m_columns) {
+			column.create(bindings);
+		}
+	}
 
-  public IGenericType getInputElementType() {
-    if (isJTableBinding(m_target, m_targetProperty)) {
-      return m_modelProperty.getObjectType().getSubType(0);
-    }
-    return m_targetProperty.getObjectType().getSubType(0);
-  }
+	public IGenericType getInputElementType() {
+		if (isJTableBinding(m_target, m_targetProperty)) {
+			return m_modelProperty.getObjectType().getSubType(0);
+		}
+		return m_targetProperty.getObjectType().getSubType(0);
+	}
 
-  public String getTypeSourceCode(CodeGenerationSupport generationSupport) {
-    // check generic
-    if (!generationSupport.useGenerics()) {
-      return "org.jdesktop.swingbinding.JTableBinding";
-    }
-    // calculate types
-    IGenericType type0;
-    IGenericType type1;
-    if (isJTableBinding(m_target, m_targetProperty)) {
-      if (m_modelAstProperty instanceof ObjectPropertyInfo) {
-        type0 = m_model.getObjectType().getSubType(0);
-        type1 = m_model.getObjectType();
-      } else {
-        type0 = m_modelProperty.getObjectType().getSubType(0);
-        type1 = m_model.getObjectType();
-      }
-    } else {
-      if (m_targetAstProperty instanceof ObjectPropertyInfo) {
-        type0 = m_target.getObjectType().getSubType(0);
-        type1 = m_target.getObjectType();
-      } else {
-        type0 = m_targetProperty.getObjectType().getSubType(0);
-        type1 = m_target.getObjectType();
-      }
-    }
-    // source code
-    return "org.jdesktop.swingbinding.JTableBinding"
-        + GenericUtils.getTypesSource(type0, type1, JTABLE_CLASS);
-  }
+	public String getTypeSourceCode(CodeGenerationSupport generationSupport) {
+		// check generic
+		if (!generationSupport.useGenerics()) {
+			return "org.jdesktop.swingbinding.JTableBinding";
+		}
+		// calculate types
+		IGenericType type0;
+		IGenericType type1;
+		if (isJTableBinding(m_target, m_targetProperty)) {
+			if (m_modelAstProperty instanceof ObjectPropertyInfo) {
+				type0 = m_model.getObjectType().getSubType(0);
+				type1 = m_model.getObjectType();
+			} else {
+				type0 = m_modelProperty.getObjectType().getSubType(0);
+				type1 = m_model.getObjectType();
+			}
+		} else {
+			if (m_targetAstProperty instanceof ObjectPropertyInfo) {
+				type0 = m_target.getObjectType().getSubType(0);
+				type1 = m_target.getObjectType();
+			} else {
+				type0 = m_targetProperty.getObjectType().getSubType(0);
+				type1 = m_target.getObjectType();
+			}
+		}
+		// source code
+		return "org.jdesktop.swingbinding.JTableBinding"
+		+ GenericUtils.getTypesSource(type0, type1, JTABLE_CLASS);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parser
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public AstObjectInfo parseExpression(AstEditor editor,
-      String signature,
-      MethodInvocation invocation,
-      Expression[] arguments,
-      IModelResolver resolver,
-      IDatabindingsProvider provider) throws Exception {
-    // JTableBinding.addColumnBinding(Property, [String])
-    if (ADD_COLUMN_BINDING_1.equals(signature) || ADD_COLUMN_BINDING_2.equals(signature)) {
-      createColumnBinding(editor, signature, invocation, arguments, -1, arguments[0], resolver);
-      return null;
-    }
-    // JTableBinding.addColumnBinding(int, Property, [String])
-    if (ADD_COLUMN_BINDING_3.equals(signature) || ADD_COLUMN_BINDING_4.equals(signature)) {
-      int column = CoreUtils.evaluate(Integer.class, editor, arguments[0]);
-      createColumnBinding(editor, signature, invocation, arguments, column, arguments[1], resolver);
-      return null;
-    }
-    // JTableBinding.setEditable(boolean)
-    if (SET_EDITABLE.equals(signature)) {
-      m_editable = CoreUtils.evaluate(Boolean.class, editor, arguments[0]);
-      return null;
-    }
-    return super.parseExpression(editor, signature, invocation, arguments, resolver, provider);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parser
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public AstObjectInfo parseExpression(AstEditor editor,
+			String signature,
+			MethodInvocation invocation,
+			Expression[] arguments,
+			IModelResolver resolver,
+			IDatabindingsProvider provider) throws Exception {
+		// JTableBinding.addColumnBinding(Property, [String])
+		if (ADD_COLUMN_BINDING_1.equals(signature) || ADD_COLUMN_BINDING_2.equals(signature)) {
+			createColumnBinding(editor, signature, invocation, arguments, -1, arguments[0], resolver);
+			return null;
+		}
+		// JTableBinding.addColumnBinding(int, Property, [String])
+		if (ADD_COLUMN_BINDING_3.equals(signature) || ADD_COLUMN_BINDING_4.equals(signature)) {
+			int column = CoreUtils.evaluate(Integer.class, editor, arguments[0]);
+			createColumnBinding(editor, signature, invocation, arguments, column, arguments[1], resolver);
+			return null;
+		}
+		// JTableBinding.setEditable(boolean)
+		if (SET_EDITABLE.equals(signature)) {
+			m_editable = CoreUtils.evaluate(Boolean.class, editor, arguments[0]);
+			return null;
+		}
+		return super.parseExpression(editor, signature, invocation, arguments, resolver, provider);
+	}
 
-  private void createColumnBinding(AstEditor editor,
-      String signature,
-      MethodInvocation invocation,
-      Expression[] arguments,
-      int column,
-      Expression propertyExpression,
-      IModelResolver resolver) throws Exception {
-    ColumnBindingInfo binding = createColumnBinding(column);
-    binding.setDetailProperty((PropertyInfo) resolver.getModel(propertyExpression));
-    if (signature.endsWith(",java.lang.String)")) {
-      String name = CoreUtils.evaluate(String.class, editor, arguments[arguments.length - 1]);
-      binding.setName(StringEscapeUtils.unescapeJava(name));
-    }
-    m_columns.add(binding);
-    resolver.addModelSupport(new ColumnBindingModelSupport(binding, invocation));
-  }
+	private void createColumnBinding(AstEditor editor,
+			String signature,
+			MethodInvocation invocation,
+			Expression[] arguments,
+			int column,
+			Expression propertyExpression,
+			IModelResolver resolver) throws Exception {
+		ColumnBindingInfo binding = createColumnBinding(column);
+		binding.setDetailProperty((PropertyInfo) resolver.getModel(propertyExpression));
+		if (signature.endsWith(",java.lang.String)")) {
+			String name = CoreUtils.evaluate(String.class, editor, arguments[arguments.length - 1]);
+			binding.setName(StringEscapeUtils.unescapeJava(name));
+		}
+		m_columns.add(binding);
+		resolver.addModelSupport(new ColumnBindingModelSupport(binding, invocation));
+	}
 
-  private ColumnBindingInfo createColumnBinding(int column) {
-    ColumnBindingInfo binding;
-    if (isJTableBinding(m_target, m_targetProperty)) {
-      binding =
-          new ColumnBindingInfo(m_target,
-              m_targetProperty,
-              m_targetAstProperty,
-              m_model,
-              m_modelProperty,
-              m_modelAstProperty,
-              this);
-    } else {
-      binding =
-          new ColumnBindingInfo(m_model,
-              m_modelProperty,
-              m_modelAstProperty,
-              m_target,
-              m_targetProperty,
-              m_targetAstProperty,
-              this);
-    }
-    binding.setColumn(column);
-    return binding;
-  }
+	private ColumnBindingInfo createColumnBinding(int column) {
+		ColumnBindingInfo binding;
+		if (isJTableBinding(m_target, m_targetProperty)) {
+			binding =
+					new ColumnBindingInfo(m_target,
+							m_targetProperty,
+							m_targetAstProperty,
+							m_model,
+							m_modelProperty,
+							m_modelAstProperty,
+							this);
+		} else {
+			binding =
+					new ColumnBindingInfo(m_model,
+							m_modelProperty,
+							m_modelAstProperty,
+							m_target,
+							m_targetProperty,
+							m_targetAstProperty,
+							this);
+		}
+		binding.setColumn(column);
+		return binding;
+	}
 
-  public ColumnBindingInfo createNewColumnBinding(int column) {
-    ColumnBindingInfo binding = createColumnBinding(column);
-    binding.setDetailProperty(new ObjectPropertyInfo(getInputElementType()));
-    binding.setColumnName(Messages.JTableBindingInfo_newColumn);
-    return binding;
-  }
+	public ColumnBindingInfo createNewColumnBinding(int column) {
+		ColumnBindingInfo binding = createColumnBinding(column);
+		binding.setDetailProperty(new ObjectPropertyInfo(getInputElementType()));
+		binding.setColumnName(Messages.JTableBindingInfo_newColumn);
+		return binding;
+	}
 
-  @Override
-  public void create(List<BindingInfo> bindings) throws Exception {
-    super.create(bindings);
-    if (!m_columns.isEmpty()) {
-      int index = bindings.indexOf(this) + 1;
-      bindings.addAll(index, m_columns);
-    }
-    preCreate();
-  }
+	@Override
+	public void create(List<BindingInfo> bindings) throws Exception {
+		super.create(bindings);
+		if (!m_columns.isEmpty()) {
+			int index = bindings.indexOf(this) + 1;
+			bindings.addAll(index, m_columns);
+		}
+		preCreate();
+	}
 
-  @Override
-  public boolean delete(List<BindingInfo> bindings) throws Exception {
-    for (ColumnBindingInfo column : m_columns) {
-      column.postDelete();
-    }
-    bindings.removeAll(m_columns);
-    return true;
-  }
+	@Override
+	public boolean delete(List<BindingInfo> bindings) throws Exception {
+		for (ColumnBindingInfo column : m_columns) {
+			column.postDelete();
+		}
+		bindings.removeAll(m_columns);
+		return true;
+	}
 
-  @Override
-  public void preCreate() throws Exception {
-    BeanPropertyObserveInfo selectedElement = getSelectedElementProperty();
-    selectedElement.setHostedType(getInputElementType());
-  }
+	@Override
+	public void preCreate() throws Exception {
+		BeanPropertyObserveInfo selectedElement = getSelectedElementProperty();
+		selectedElement.setHostedType(getInputElementType());
+	}
 
-  @Override
-  public void postDelete() throws Exception {
-    super.postDelete();
-    BeanPropertyObserveInfo selectedElement = getSelectedElementProperty();
-    selectedElement.setHostedType(ClassGenericType.OBJECT_CLASS);
-  }
+	@Override
+	public void postDelete() throws Exception {
+		super.postDelete();
+		BeanPropertyObserveInfo selectedElement = getSelectedElementProperty();
+		selectedElement.setHostedType(ClassGenericType.OBJECT_CLASS);
+	}
 
-  @Override
-  public void move(List<BindingInfo> bindings) {
-    if (!m_columns.isEmpty()) {
-      bindings.removeAll(m_columns);
-      int index = bindings.indexOf(this) + 1;
-      bindings.addAll(index, m_columns);
-    }
-  }
+	@Override
+	public void move(List<BindingInfo> bindings) {
+		if (!m_columns.isEmpty()) {
+			bindings.removeAll(m_columns);
+			int index = bindings.indexOf(this) + 1;
+			bindings.addAll(index, m_columns);
+		}
+	}
 
-  private BeanPropertyObserveInfo getSelectedElementProperty() throws Exception {
-    return BeanSupport.getProperty(
-        this,
-        isJTableBinding(m_target, m_targetProperty),
-        "selectedElement");
-  }
+	private BeanPropertyObserveInfo getSelectedElementProperty() throws Exception {
+		return BeanSupport.getProperty(
+				this,
+				isJTableBinding(m_target, m_targetProperty),
+				"selectedElement");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void createContentProviders(List<BindingInfo> bindings,
-      List<IUiContentProvider> providers,
-      IPageListener listener,
-      DatabindingsProvider provider) throws Exception {
-    super.createContentProviders(bindings, providers, listener, provider);
-    providers.add(new EditableUiContentProvider(this));
-    providers.add(new JTableColumnContainerUiContentProvider(createTabConfiguration(),
-        this,
-        bindings,
-        provider));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void createContentProviders(List<BindingInfo> bindings,
+			List<IUiContentProvider> providers,
+			IPageListener listener,
+			DatabindingsProvider provider) throws Exception {
+		super.createContentProviders(bindings, providers, listener, provider);
+		providers.add(new EditableUiContentProvider(this));
+		providers.add(new JTableColumnContainerUiContentProvider(createTabConfiguration(),
+				this,
+				bindings,
+				provider));
+	}
 
-  private TabContainerConfiguration createTabConfiguration() {
-    TabContainerConfiguration configuration = new TabContainerConfiguration();
-    configuration.setUseAddButton(true);
-    configuration.setUseRemoveButton(true);
-    configuration.setUseUpDownButtons(true);
-    configuration.setCreateEmptyPage(
-        Messages.JTableBindingInfo_tabTitle,
-        Messages.JTableBindingInfo_tabMessage);
-    return configuration;
-  }
+	private TabContainerConfiguration createTabConfiguration() {
+		TabContainerConfiguration configuration = new TabContainerConfiguration();
+		configuration.setUseAddButton(true);
+		configuration.setUseRemoveButton(true);
+		configuration.setUseUpDownButtons(true);
+		configuration.setCreateEmptyPage(
+				Messages.JTableBindingInfo_tabTitle,
+				Messages.JTableBindingInfo_tabMessage);
+		return configuration;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  //  Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void addSourceCode(List<String> lines, CodeGenerationSupport generationSupport)
-      throws Exception {
-    if (isJTableBinding(m_target, m_targetProperty)) {
-      addSourceCode(
-          m_target,
-          m_model,
-          m_modelProperty,
-          m_modelAstProperty,
-          lines,
-          generationSupport);
-    } else {
-      addSourceCode(
-          m_model,
-          m_target,
-          m_targetProperty,
-          m_targetAstProperty,
-          lines,
-          generationSupport);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	//  Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void addSourceCode(List<String> lines, CodeGenerationSupport generationSupport)
+			throws Exception {
+		if (isJTableBinding(m_target, m_targetProperty)) {
+			addSourceCode(
+					m_target,
+					m_model,
+					m_modelProperty,
+					m_modelAstProperty,
+					lines,
+					generationSupport);
+		} else {
+			addSourceCode(
+					m_model,
+					m_target,
+					m_targetProperty,
+					m_targetAstProperty,
+					lines,
+					generationSupport);
+		}
+	}
 
-  private void addSourceCode(ObserveInfo widget,
-      ObserveInfo model,
-      ObserveInfo modelProperty,
-      PropertyInfo modelAstProperty,
-      List<String> lines,
-      CodeGenerationSupport generationSupport) throws Exception {
-    // handle variable
-    if (getVariableIdentifier() == null) {
-      setVariableIdentifier(generationSupport.generateLocalName("JTableBinding"));
-    }
-    // begin
-    StringBuffer line = new StringBuffer();
-    boolean localVariable = !isField();
-    if (localVariable) {
-      line.append("org.jdesktop.swingbinding.JTableBinding");
-    }
-    if (modelAstProperty instanceof ObjectPropertyInfo) {
-      if (localVariable) {
-        if (generationSupport.useGenerics()) {
-          line.append(GenericUtils.getTypesSource(
-              model.getObjectType().getSubType(0),
-              model.getObjectType(),
-              JTABLE_CLASS));
-        }
-        line.append(" ");
-      }
-      line.append(getVariableIdentifier());
-      line.append(" = org.jdesktop.swingbinding.SwingBindings.createJTableBinding(");
-      line.append(m_strategyInfo.getStrategySourceCode());
-      line.append(", ");
-      line.append(model.getReference());
-      line.append(", ");
-      line.append(widget.getReference());
-    } else {
-      generationSupport.addSourceCode(modelAstProperty, lines);
-      if (localVariable) {
-        if (generationSupport.useGenerics()) {
-          line.append(GenericUtils.getTypesSource(
-              modelProperty.getObjectType().getSubType(0),
-              model.getObjectType(),
-              JTABLE_CLASS));
-        }
-        line.append(" ");
-      }
-      line.append(getVariableIdentifier());
-      line.append(" = org.jdesktop.swingbinding.SwingBindings.createJTableBinding(");
-      line.append(m_strategyInfo.getStrategySourceCode());
-      line.append(", ");
-      line.append(model.getReference());
-      line.append(", ");
-      line.append(modelAstProperty.getVariableIdentifier());
-      line.append(", ");
-      line.append(widget.getReference());
-    }
-    // end
-    line.append(getCreateMethodHeaderEnd());
-    line.append(";");
-    lines.add(line.toString());
-    // columns
-    for (ColumnBindingInfo column : m_columns) {
-      lines.add("//");
-      column.addColumnSourceCode(lines, generationSupport);
-    }
-    if (!m_columns.isEmpty()) {
-      lines.add("//");
-    }
-    // editable
-    if (!m_editable) {
-      lines.add(getVariableIdentifier() + ".setEditable(false);");
-    }
-    // converter & validator
-    addFinishSourceCode(lines, generationSupport, true);
-  }
+	private void addSourceCode(ObserveInfo widget,
+			ObserveInfo model,
+			ObserveInfo modelProperty,
+			PropertyInfo modelAstProperty,
+			List<String> lines,
+			CodeGenerationSupport generationSupport) throws Exception {
+		// handle variable
+		if (getVariableIdentifier() == null) {
+			setVariableIdentifier(generationSupport.generateLocalName("JTableBinding"));
+		}
+		// begin
+		StringBuffer line = new StringBuffer();
+		boolean localVariable = !isField();
+		if (localVariable) {
+			line.append("org.jdesktop.swingbinding.JTableBinding");
+		}
+		if (modelAstProperty instanceof ObjectPropertyInfo) {
+			if (localVariable) {
+				if (generationSupport.useGenerics()) {
+					line.append(GenericUtils.getTypesSource(
+							model.getObjectType().getSubType(0),
+							model.getObjectType(),
+							JTABLE_CLASS));
+				}
+				line.append(" ");
+			}
+			line.append(getVariableIdentifier());
+			line.append(" = org.jdesktop.swingbinding.SwingBindings.createJTableBinding(");
+			line.append(m_strategyInfo.getStrategySourceCode());
+			line.append(", ");
+			line.append(model.getReference());
+			line.append(", ");
+			line.append(widget.getReference());
+		} else {
+			generationSupport.addSourceCode(modelAstProperty, lines);
+			if (localVariable) {
+				if (generationSupport.useGenerics()) {
+					line.append(GenericUtils.getTypesSource(
+							modelProperty.getObjectType().getSubType(0),
+							model.getObjectType(),
+							JTABLE_CLASS));
+				}
+				line.append(" ");
+			}
+			line.append(getVariableIdentifier());
+			line.append(" = org.jdesktop.swingbinding.SwingBindings.createJTableBinding(");
+			line.append(m_strategyInfo.getStrategySourceCode());
+			line.append(", ");
+			line.append(model.getReference());
+			line.append(", ");
+			line.append(modelAstProperty.getVariableIdentifier());
+			line.append(", ");
+			line.append(widget.getReference());
+		}
+		// end
+		line.append(getCreateMethodHeaderEnd());
+		line.append(";");
+		lines.add(line.toString());
+		// columns
+		for (ColumnBindingInfo column : m_columns) {
+			lines.add("//");
+			column.addColumnSourceCode(lines, generationSupport);
+		}
+		if (!m_columns.isEmpty()) {
+			lines.add("//");
+		}
+		// editable
+		if (!m_editable) {
+			lines.add(getVariableIdentifier() + ".setEditable(false);");
+		}
+		// converter & validator
+		addFinishSourceCode(lines, generationSupport, true);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IASTObjectInfo2
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void setVariableIdentifier(JavaInfo javaInfoRoot, String variable, boolean field) {
-    String type = "org.jdesktop.swingbinding.JTableBinding";
-    if (CoreUtils.useGenerics(javaInfoRoot.getEditor().getJavaProject())) {
-      if (isJTableBinding(m_target, m_targetProperty)) {
-        type += getTypeSource(m_model, m_modelProperty, m_modelAstProperty, JTABLE_CLASS);
-      } else {
-        type += getTypeSource(m_target, m_targetProperty, m_targetAstProperty, JTABLE_CLASS);
-      }
-    }
-    setVariableIdentifier(javaInfoRoot, type, variable, field);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IASTObjectInfo2
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void setVariableIdentifier(JavaInfo javaInfoRoot, String variable, boolean field) {
+		String type = "org.jdesktop.swingbinding.JTableBinding";
+		if (CoreUtils.useGenerics(javaInfoRoot.getEditor().getJavaProject())) {
+			if (isJTableBinding(m_target, m_targetProperty)) {
+				type += getTypeSource(m_model, m_modelProperty, m_modelAstProperty, JTABLE_CLASS);
+			} else {
+				type += getTypeSource(m_target, m_targetProperty, m_targetAstProperty, JTABLE_CLASS);
+			}
+		}
+		setVariableIdentifier(javaInfoRoot, type, variable, field);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static boolean isJTableBinding(ObserveInfo observe, ObserveInfo propertyObserve) {
-    return observe.getCreationType() == ObserveCreationType.JTableBinding
-        && propertyObserve.getCreationType() == ObserveCreationType.SelfProperty;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static boolean isJTableBinding(ObserveInfo observe, ObserveInfo propertyObserve) {
+		return observe.getCreationType() == ObserveCreationType.JTableBinding
+				&& propertyObserve.getCreationType() == ObserveCreationType.SelfProperty;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/bindings/UpdateStrategyInfo.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/bindings/UpdateStrategyInfo.java
index 2a5ce34ff..57c92ab43 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/bindings/UpdateStrategyInfo.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/bindings/UpdateStrategyInfo.java
@@ -22,79 +22,79 @@
  * @coverage bindings.swing.model.bindings
  */
 public final class UpdateStrategyInfo {
-  public static final String[] VALUES = {"READ_ONCE", "READ", "READ_WRITE"};
-  private Value m_strategyValue;
+	public static final String[] VALUES = {"READ_ONCE", "READ", "READ_WRITE"};
+	private Value m_strategyValue;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public UpdateStrategyInfo(String value) {
-    setStrategyValue(value);
-    Assert.isNotNull(m_strategyValue);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public UpdateStrategyInfo(String value) {
+		setStrategyValue(value);
+		Assert.isNotNull(m_strategyValue);
+	}
 
-  public UpdateStrategyInfo(Value strategyValue) {
-    m_strategyValue = strategyValue;
-  }
+	public UpdateStrategyInfo(Value strategyValue) {
+		m_strategyValue = strategyValue;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Generate source code association with this object.
-   */
-  public String getStrategySourceCode() {
-    switch (m_strategyValue) {
-      case READ_ONCE :
-        return "org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_ONCE";
-      case READ :
-        return "org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ";
-      case READ_WRITE :
-        return "org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE";
-    }
-    Assert.fail(MessageFormat.format(Messages.UpdateStrategyInfo_errUndefined, m_strategyValue));
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Generate source code association with this object.
+	 */
+	public String getStrategySourceCode() {
+		switch (m_strategyValue) {
+		case READ_ONCE :
+			return "org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_ONCE";
+		case READ :
+			return "org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ";
+		case READ_WRITE :
+			return "org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE";
+		}
+		Assert.fail(MessageFormat.format(Messages.UpdateStrategyInfo_errUndefined, m_strategyValue));
+		return null;
+	}
 
-  /**
-   * @return the current value for this strategy.
-   */
-  public String getStrategyValue() {
-    switch (m_strategyValue) {
-      case READ_ONCE :
-        return "READ_ONCE";
-      case READ :
-        return "READ";
-      case READ_WRITE :
-        return "READ_WRITE";
-    }
-    Assert.fail(MessageFormat.format(Messages.UpdateStrategyInfo_errUndefined, m_strategyValue));
-    return null;
-  }
+	/**
+	 * @return the current value for this strategy.
+	 */
+	public String getStrategyValue() {
+		switch (m_strategyValue) {
+		case READ_ONCE :
+			return "READ_ONCE";
+		case READ :
+			return "READ";
+		case READ_WRITE :
+			return "READ_WRITE";
+		}
+		Assert.fail(MessageFormat.format(Messages.UpdateStrategyInfo_errUndefined, m_strategyValue));
+		return null;
+	}
 
-  /**
-   * Sets strategy value.
-   */
-  public void setStrategyValue(String value) {
-    if (value.endsWith("READ_ONCE")) {
-      m_strategyValue = Value.READ_ONCE;
-    } else if (value.endsWith("READ")) {
-      m_strategyValue = Value.READ;
-    } else if (value.endsWith("READ_WRITE")) {
-      m_strategyValue = Value.READ_WRITE;
-    }
-  }
+	/**
+	 * Sets strategy value.
+	 */
+	public void setStrategyValue(String value) {
+		if (value.endsWith("READ_ONCE")) {
+			m_strategyValue = Value.READ_ONCE;
+		} else if (value.endsWith("READ")) {
+			m_strategyValue = Value.READ;
+		} else if (value.endsWith("READ_WRITE")) {
+			m_strategyValue = Value.READ_WRITE;
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Values
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static enum Value {
-    READ_ONCE, READ, READ_WRITE
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Values
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static enum Value {
+		READ_ONCE, READ, READ_WRITE
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/bindings/ValidatorInfo.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/bindings/ValidatorInfo.java
index 5239b1530..3d2e8e1ca 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/bindings/ValidatorInfo.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/bindings/ValidatorInfo.java
@@ -21,29 +21,29 @@
  * @coverage bindings.swing.model.bindings
  */
 public final class ValidatorInfo extends GenericClassObjectInfo {
-  private final BindingInfo m_binding;
+	private final BindingInfo m_binding;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ValidatorInfo(IGenericType objectType, BindingInfo binding) {
-    super("org.jdesktop.beansbinding.Validator");
-    m_binding = binding;
-    setClass(objectType);
-    if (isGeneric()) {
-      GenericUtils.assertEquals(m_binding.getModelPropertyType(), objectType.getSubType(0));
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ValidatorInfo(IGenericType objectType, BindingInfo binding) {
+		super("org.jdesktop.beansbinding.Validator");
+		m_binding = binding;
+		setClass(objectType);
+		if (isGeneric()) {
+			GenericUtils.assertEquals(m_binding.getModelPropertyType(), objectType.getSubType(0));
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected IGenericType[] getTypeArguments() {
-    return isGeneric() ? new IGenericType[]{m_binding.getModelPropertyType()} : null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected IGenericType[] getTypeArguments() {
+		return isGeneric() ? new IGenericType[]{m_binding.getModelPropertyType()} : null;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/bindings/VirtualBindingInfo.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/bindings/VirtualBindingInfo.java
index ce868dab7..ffaeb6e5d 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/bindings/VirtualBindingInfo.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/bindings/VirtualBindingInfo.java
@@ -41,143 +41,143 @@
  * @coverage bindings.swing.model.bindings
  */
 public final class VirtualBindingInfo extends BindingInfo {
-  private IGenericType m_elementType;
-  private final boolean m_isTargetVirtual;
-  private final ObserveCreationType m_swingType;
-  private static ChooseClassConfiguration m_configuration;
-  private List<BindingInfo> m_bindings;
+	private IGenericType m_elementType;
+	private final boolean m_isTargetVirtual;
+	private final ObserveCreationType m_swingType;
+	private static ChooseClassConfiguration m_configuration;
+	private List<BindingInfo> m_bindings;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public VirtualBindingInfo(ObserveInfo target,
-      ObserveInfo targetProperty,
-      PropertyInfo targetAstProperty,
-      ObserveInfo model,
-      ObserveInfo modelProperty,
-      PropertyInfo modelAstProperty) {
-    super(target, targetProperty, targetAstProperty, model, modelProperty, modelAstProperty);
-    m_isTargetVirtual = target.getCreationType() == ObserveCreationType.VirtualBinding;
-    m_swingType = m_isTargetVirtual ? model.getCreationType() : target.getCreationType();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public VirtualBindingInfo(ObserveInfo target,
+			ObserveInfo targetProperty,
+			PropertyInfo targetAstProperty,
+			ObserveInfo model,
+			ObserveInfo modelProperty,
+			PropertyInfo modelAstProperty) {
+		super(target, targetProperty, targetAstProperty, model, modelProperty, modelAstProperty);
+		m_isTargetVirtual = target.getCreationType() == ObserveCreationType.VirtualBinding;
+		m_swingType = m_isTargetVirtual ? model.getCreationType() : target.getCreationType();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public IGenericType getElementType() {
-    return m_elementType;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public IGenericType getElementType() {
+		return m_elementType;
+	}
 
-  public void setElementType(IGenericType elementType) {
-    m_elementType = elementType;
-  }
+	public void setElementType(IGenericType elementType) {
+		m_elementType = elementType;
+	}
 
-  public ObserveCreationType getSwingType() {
-    return m_swingType;
-  }
+	public ObserveCreationType getSwingType() {
+		return m_swingType;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void createContentProviders(List<BindingInfo> bindings,
-      List<IUiContentProvider> providers,
-      IPageListener listener,
-      DatabindingsProvider provider) throws Exception {
-    listener.setTitle(Messages.VirtualBindingInfo_listenerTitle);
-    listener.setMessage(Messages.VirtualBindingInfo_listenerMessage);
-    // add target editors
-    providers.add(new LabelUiContentProvider(Messages.VirtualBindingInfo_target,
-        getTargetPresentationText(false)));
-    // add model editors
-    providers.add(new LabelUiContentProvider(Messages.VirtualBindingInfo_model,
-        getModelPresentationText(false)));
-    //
-    if (m_configuration == null) {
-      m_configuration = new ChooseClassConfiguration();
-      m_configuration.setDialogFieldLabel(Messages.VirtualBindingInfo_chooseTitle);
-      m_configuration.setValueScope("beans");
-      m_configuration.setChooseInterfaces(true);
-      m_configuration.setEmptyClassErrorMessage(Messages.VirtualBindingInfo_chooseError);
-      m_configuration.setErrorMessagePrefix(Messages.VirtualBindingInfo_chooseErrorPrefix);
-    }
-    //
-    providers.add(new ElementTypeUiContentProvider(m_configuration, this));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void createContentProviders(List<BindingInfo> bindings,
+			List<IUiContentProvider> providers,
+			IPageListener listener,
+			DatabindingsProvider provider) throws Exception {
+		listener.setTitle(Messages.VirtualBindingInfo_listenerTitle);
+		listener.setMessage(Messages.VirtualBindingInfo_listenerMessage);
+		// add target editors
+		providers.add(new LabelUiContentProvider(Messages.VirtualBindingInfo_target,
+				getTargetPresentationText(false)));
+		// add model editors
+		providers.add(new LabelUiContentProvider(Messages.VirtualBindingInfo_model,
+				getModelPresentationText(false)));
+		//
+		if (m_configuration == null) {
+			m_configuration = new ChooseClassConfiguration();
+			m_configuration.setDialogFieldLabel(Messages.VirtualBindingInfo_chooseTitle);
+			m_configuration.setValueScope("beans");
+			m_configuration.setChooseInterfaces(true);
+			m_configuration.setEmptyClassErrorMessage(Messages.VirtualBindingInfo_chooseError);
+			m_configuration.setErrorMessagePrefix(Messages.VirtualBindingInfo_chooseErrorPrefix);
+		}
+		//
+		providers.add(new ElementTypeUiContentProvider(m_configuration, this));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  //  Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void addSourceCode(List<String> lines, CodeGenerationSupport generationSupport)
-      throws Exception {
-    String reference = m_isTargetVirtual ? m_model.getReference() : m_target.getReference();
-    String index = Integer.toString(m_bindings.indexOf(this));
-    String target = m_isTargetVirtual ? "model" : "target";
-    lines.add("// [Virtual] "
-        + index
-        + " "
-        + target
-        + " "
-        + reference
-        + " "
-        + m_elementType.getFullTypeName());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	//  Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void addSourceCode(List<String> lines, CodeGenerationSupport generationSupport)
+			throws Exception {
+		String reference = m_isTargetVirtual ? m_model.getReference() : m_target.getReference();
+		String index = Integer.toString(m_bindings.indexOf(this));
+		String target = m_isTargetVirtual ? "model" : "target";
+		lines.add("// [Virtual] "
+				+ index
+				+ " "
+				+ target
+				+ " "
+				+ reference
+				+ " "
+				+ m_elementType.getFullTypeName());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IASTObjectInfo2
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void setVariableIdentifier(JavaInfo javaInfoRoot, String variable, boolean field) {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IASTObjectInfo2
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void setVariableIdentifier(JavaInfo javaInfoRoot, String variable, boolean field) {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parser
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void create(List<BindingInfo> bindings) throws Exception {
-    m_bindings = bindings;
-    super.create(bindings);
-    preCreate();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parser
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void create(List<BindingInfo> bindings) throws Exception {
+		m_bindings = bindings;
+		super.create(bindings);
+		preCreate();
+	}
 
-  @Override
-  public void preCreate() throws Exception {
-    String propertyName =
-        m_swingType == ObserveCreationType.JComboBoxBinding ? "selectedItem" : "selectedElement";
-    BeanPropertyObserveInfo selectedElement =
-        BeanSupport.getProperty(this, !m_isTargetVirtual, propertyName);
-    selectedElement.setHostedType(m_elementType);
-  }
+	@Override
+	public void preCreate() throws Exception {
+		String propertyName =
+				m_swingType == ObserveCreationType.JComboBoxBinding ? "selectedItem" : "selectedElement";
+		BeanPropertyObserveInfo selectedElement =
+				BeanSupport.getProperty(this, !m_isTargetVirtual, propertyName);
+		selectedElement.setHostedType(m_elementType);
+	}
 
-  @Override
-  public void postDelete() throws Exception {
-    super.postDelete();
-    String propertyName =
-        m_swingType == ObserveCreationType.JComboBoxBinding ? "selectedItem" : "selectedElement";
-    BeanPropertyObserveInfo selectedElement =
-        BeanSupport.getProperty(this, !m_isTargetVirtual, propertyName);
-    selectedElement.setHostedType(ClassGenericType.OBJECT_CLASS);
-  }
+	@Override
+	public void postDelete() throws Exception {
+		super.postDelete();
+		String propertyName =
+				m_swingType == ObserveCreationType.JComboBoxBinding ? "selectedItem" : "selectedElement";
+		BeanPropertyObserveInfo selectedElement =
+				BeanSupport.getProperty(this, !m_isTargetVirtual, propertyName);
+		selectedElement.setHostedType(ClassGenericType.OBJECT_CLASS);
+	}
 
-  @Override
-  public AstObjectInfo parseExpression(AstEditor editor,
-      String signature,
-      MethodInvocation invocation,
-      Expression[] arguments,
-      IModelResolver resolver,
-      IDatabindingsProvider provider) throws Exception {
-    return null;
-  }
+	@Override
+	public AstObjectInfo parseExpression(AstEditor editor,
+			String signature,
+			MethodInvocation invocation,
+			Expression[] arguments,
+			IModelResolver resolver,
+			IDatabindingsProvider provider) throws Exception {
+		return null;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/bindings/VirtualParser.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/bindings/VirtualParser.java
index afbfbd2dd..1992d05fa 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/bindings/VirtualParser.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/bindings/VirtualParser.java
@@ -42,95 +42,95 @@
  * @coverage bindings.swing.model.bindings
  */
 public final class VirtualParser {
-  public static Object[] getBindings(AstEditor editor,
-      DatabindingsProvider provider,
-      MethodDeclaration initDataBindings) throws Exception {
-    // prepare virtual observes
-    ObserveInfo virtualObserve =
-        (ObserveInfo) provider.getContainer(ObserveType.BEANS).getObservables().get(0);
-    ObserveInfo virtualProperty =
-        (ObserveInfo) virtualObserve.getChildren(ChildrenContext.ChildrenForPropertiesTable).get(0);
-    PropertyInfo virtualAstProperty = virtualProperty.createProperty(virtualObserve);
-    // prepare components container
-    ComponentsObserveTypeContainer componentsContainer =
-        (ComponentsObserveTypeContainer) provider.getContainer(ObserveType.WIDGETS);
-    // prepare class loader
-    ClassLoader classLoader = EditorState.get(editor).getEditorLoader();
-    //
-    List<Integer> indexes = Lists.newArrayList();
-    List<BindingInfo> virtualBindings = Lists.newArrayList();
-    // scan comments
-    for (Comment comment : editor.getCommentList()) {
-      if (comment instanceof LineComment) {
-        if (initDataBindings == editor.getEnclosingMethod(comment.getStartPosition())) {
-          // filter virtual comment line
-          String line = editor.getSource(comment);
-          if (line.startsWith("// [Virtual]")) {
-            StringTokenizer tokenizer = new StringTokenizer(line);
-            tokenizer.nextToken(); // skip '//'
-            tokenizer.nextToken(); // skip '[Virtual]'
-            // prepare binding location
-            String indexValue = tokenizer.nextToken();
-            int index = NumberUtils.isNumber(indexValue) ? Integer.parseInt(indexValue) : 0;
-            // prepare target/model orientation
-            boolean isSwingTarget = "target".equals(tokenizer.nextToken());
-            // prepare reference to swing component
-            String reference = tokenizer.nextToken();
-            ObserveInfo swingObserve = componentsContainer.resolve(reference);
-            if (swingObserve == null) {
-              AbstractParser.addError(
-                  editor,
-                  MessageFormat.format(Messages.VirtualParser_errUndefinedSwingObject, reference),
-                  new Throwable());
-              continue;
-            }
-            // prepare component observes
-            PropertyInfo swingAstProperty = new ObjectPropertyInfo(swingObserve.getObjectType());
-            ObserveInfo swingProperty = swingAstProperty.getObserveProperty(swingObserve);
-            // prepare element type
-            String elementClassName = tokenizer.nextToken();
-            IGenericType elementType = null;
-            try {
-              elementType =
-                  new ClassGenericType(CoreUtils.load(classLoader, elementClassName), null, null);
-            } catch (ClassNotFoundException e) {
-              AbstractParser.addError(editor, MessageFormat.format(
-                  Messages.VirtualParser_errUnknownElementClass,
-                  elementClassName), new Throwable());
-              continue;
-            }
-            // create binding
-            VirtualBindingInfo binding = null;
-            //
-            if (isSwingTarget) {
-              binding =
-                  new VirtualBindingInfo(swingObserve,
-                      swingProperty,
-                      swingAstProperty,
-                      virtualObserve,
-                      virtualProperty,
-                      virtualAstProperty);
-            } else {
-              binding =
-                  new VirtualBindingInfo(virtualObserve,
-                      virtualProperty,
-                      virtualAstProperty,
-                      swingObserve,
-                      swingProperty,
-                      swingAstProperty);
-            }
-            // configure
-            binding.setElementType(elementType);
-            // add to result
-            indexes.add(index);
-            virtualBindings.add(binding);
-            // complete invoke
-            binding.create(provider.getRootInfo().getBindings());
-          }
-        }
-      }
-    }
-    // result
-    return new Object[]{indexes, virtualBindings};
-  }
+	public static Object[] getBindings(AstEditor editor,
+			DatabindingsProvider provider,
+			MethodDeclaration initDataBindings) throws Exception {
+		// prepare virtual observes
+		ObserveInfo virtualObserve =
+				(ObserveInfo) provider.getContainer(ObserveType.BEANS).getObservables().get(0);
+		ObserveInfo virtualProperty =
+				(ObserveInfo) virtualObserve.getChildren(ChildrenContext.ChildrenForPropertiesTable).get(0);
+		PropertyInfo virtualAstProperty = virtualProperty.createProperty(virtualObserve);
+		// prepare components container
+		ComponentsObserveTypeContainer componentsContainer =
+				(ComponentsObserveTypeContainer) provider.getContainer(ObserveType.WIDGETS);
+		// prepare class loader
+		ClassLoader classLoader = EditorState.get(editor).getEditorLoader();
+		//
+		List<Integer> indexes = Lists.newArrayList();
+		List<BindingInfo> virtualBindings = Lists.newArrayList();
+		// scan comments
+		for (Comment comment : editor.getCommentList()) {
+			if (comment instanceof LineComment) {
+				if (initDataBindings == editor.getEnclosingMethod(comment.getStartPosition())) {
+					// filter virtual comment line
+					String line = editor.getSource(comment);
+					if (line.startsWith("// [Virtual]")) {
+						StringTokenizer tokenizer = new StringTokenizer(line);
+						tokenizer.nextToken(); // skip '//'
+						tokenizer.nextToken(); // skip '[Virtual]'
+						// prepare binding location
+						String indexValue = tokenizer.nextToken();
+						int index = NumberUtils.isNumber(indexValue) ? Integer.parseInt(indexValue) : 0;
+						// prepare target/model orientation
+						boolean isSwingTarget = "target".equals(tokenizer.nextToken());
+						// prepare reference to swing component
+						String reference = tokenizer.nextToken();
+						ObserveInfo swingObserve = componentsContainer.resolve(reference);
+						if (swingObserve == null) {
+							AbstractParser.addError(
+									editor,
+									MessageFormat.format(Messages.VirtualParser_errUndefinedSwingObject, reference),
+									new Throwable());
+							continue;
+						}
+						// prepare component observes
+						PropertyInfo swingAstProperty = new ObjectPropertyInfo(swingObserve.getObjectType());
+						ObserveInfo swingProperty = swingAstProperty.getObserveProperty(swingObserve);
+						// prepare element type
+						String elementClassName = tokenizer.nextToken();
+						IGenericType elementType = null;
+						try {
+							elementType =
+									new ClassGenericType(CoreUtils.load(classLoader, elementClassName), null, null);
+						} catch (ClassNotFoundException e) {
+							AbstractParser.addError(editor, MessageFormat.format(
+									Messages.VirtualParser_errUnknownElementClass,
+									elementClassName), new Throwable());
+							continue;
+						}
+						// create binding
+						VirtualBindingInfo binding = null;
+						//
+						if (isSwingTarget) {
+							binding =
+									new VirtualBindingInfo(swingObserve,
+											swingProperty,
+											swingAstProperty,
+											virtualObserve,
+											virtualProperty,
+											virtualAstProperty);
+						} else {
+							binding =
+									new VirtualBindingInfo(virtualObserve,
+											virtualProperty,
+											virtualAstProperty,
+											swingObserve,
+											swingProperty,
+											swingAstProperty);
+						}
+						// configure
+						binding.setElementType(elementType);
+						// add to result
+						indexes.add(index);
+						virtualBindings.add(binding);
+						// complete invoke
+						binding.create(provider.getRootInfo().getBindings());
+					}
+				}
+			}
+		}
+		// result
+		return new Object[]{indexes, virtualBindings};
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/components/ComponentObserveInfo.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/components/ComponentObserveInfo.java
index 19e55c7cb..cedacd839 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/components/ComponentObserveInfo.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/components/ComponentObserveInfo.java
@@ -44,231 +44,231 @@
  * @coverage bindings.swing.model.components
  */
 public class ComponentObserveInfo extends ObserveInfo {
-  private final BeanSupport m_beanSupport;
-  private final ObserveInfo m_parent;
-  private JavaInfo m_javaInfo;
-  private List<ComponentObserveInfo> m_children;
-  private List<ObserveInfo> m_properties;
-  private final JavaInfoObservePresentation m_presentation;
-  private ObserveCreationType m_creationType;
+	private final BeanSupport m_beanSupport;
+	private final ObserveInfo m_parent;
+	private JavaInfo m_javaInfo;
+	private List<ComponentObserveInfo> m_children;
+	private List<ObserveInfo> m_properties;
+	private final JavaInfoObservePresentation m_presentation;
+	private ObserveCreationType m_creationType;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ComponentObserveInfo(BeanSupport beanSupport, JavaInfo javaInfo) throws Exception {
-    this(beanSupport, null, javaInfo);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ComponentObserveInfo(BeanSupport beanSupport, JavaInfo javaInfo) throws Exception {
+		this(beanSupport, null, javaInfo);
+	}
 
-  public ComponentObserveInfo(BeanSupport beanSupport, ObserveInfo parent, JavaInfo javaInfo)
-      throws Exception {
-    super(new ClassGenericType(javaInfo.getDescription().getComponentClass(), null, null),
-        new JavaInfoReferenceProvider(javaInfo));
-    m_beanSupport = beanSupport;
-    m_parent = parent;
-    m_javaInfo = javaInfo;
-    m_presentation = new JavaInfoObservePresentation(m_javaInfo);
-    m_creationType = ComponentsObserveTypeContainer.getCreationType(getObjectClass());
-    if (JavaInfoReferenceProvider.getReference(m_javaInfo) == null) {
-      m_properties = Collections.emptyList();
-    }
-  }
+	public ComponentObserveInfo(BeanSupport beanSupport, ObserveInfo parent, JavaInfo javaInfo)
+			throws Exception {
+		super(new ClassGenericType(javaInfo.getDescription().getComponentClass(), null, null),
+				new JavaInfoReferenceProvider(javaInfo));
+		m_beanSupport = beanSupport;
+		m_parent = parent;
+		m_javaInfo = javaInfo;
+		m_presentation = new JavaInfoObservePresentation(m_javaInfo);
+		m_creationType = ComponentsObserveTypeContainer.getCreationType(getObjectClass());
+		if (JavaInfoReferenceProvider.getReference(m_javaInfo) == null) {
+			m_properties = Collections.emptyList();
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ObserveType
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public final ObserveType getType() {
-    return ObserveType.WIDGETS;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ObserveType
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public final ObserveType getType() {
+		return ObserveType.WIDGETS;
+	}
 
-  @Override
-  public ObserveCreationType getCreationType() {
-    return m_creationType;
-  }
+	@Override
+	public ObserveCreationType getCreationType() {
+		return m_creationType;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void setJavaInfo(JavaInfo javaInfo) throws Exception {
-    // update info
-    m_javaInfo = javaInfo;
-    // update type
-    setObjectType(new ClassGenericType(javaInfo.getDescription().getComponentClass(), null, null));
-    // update reference
-    JavaInfoReferenceProvider referenceProvider =
-        (JavaInfoReferenceProvider) getReferenceProvider();
-    referenceProvider.setJavaInfo(m_javaInfo);
-    // update presentation
-    m_presentation.setJavaInfo(m_javaInfo);
-    // update creation type
-    m_creationType = ComponentsObserveTypeContainer.getCreationType(getObjectClass());
-    // update properties
-    if (JavaInfoReferenceProvider.getReference(m_javaInfo) == null) {
-      m_properties = Collections.emptyList();
-    } else {
-      m_properties = null;
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void setJavaInfo(JavaInfo javaInfo) throws Exception {
+		// update info
+		m_javaInfo = javaInfo;
+		// update type
+		setObjectType(new ClassGenericType(javaInfo.getDescription().getComponentClass(), null, null));
+		// update reference
+		JavaInfoReferenceProvider referenceProvider =
+				(JavaInfoReferenceProvider) getReferenceProvider();
+		referenceProvider.setJavaInfo(m_javaInfo);
+		// update presentation
+		m_presentation.setJavaInfo(m_javaInfo);
+		// update creation type
+		m_creationType = ComponentsObserveTypeContainer.getCreationType(getObjectClass());
+		// update properties
+		if (JavaInfoReferenceProvider.getReference(m_javaInfo) == null) {
+			m_properties = Collections.emptyList();
+		} else {
+			m_properties = null;
+		}
+	}
 
-  /**
-   * Update (reorder, add, remove) children {@link ComponentObserveInfo}.
-   */
-  public void update() throws Exception {
-    // prepare new javaInfo's
-    List<JavaInfo> javaInfos = SynchronizeManager.getChildren(m_javaInfo, JavaInfo.class);
-    //
-    getChildren(ChildrenContext.ChildrenForMasterTable);
-    //
-    SynchronizeManager.synchronizeObjects(
-        m_children,
-        javaInfos,
-        new ISynchronizeProcessor<JavaInfo, ComponentObserveInfo>() {
-          public boolean handleObject(ComponentObserveInfo object) {
-            return true;
-          }
+	/**
+	 * Update (reorder, add, remove) children {@link ComponentObserveInfo}.
+	 */
+	public void update() throws Exception {
+		// prepare new javaInfo's
+		List<JavaInfo> javaInfos = SynchronizeManager.getChildren(m_javaInfo, JavaInfo.class);
+		//
+		getChildren(ChildrenContext.ChildrenForMasterTable);
+		//
+		SynchronizeManager.synchronizeObjects(
+				m_children,
+				javaInfos,
+				new ISynchronizeProcessor<JavaInfo, ComponentObserveInfo>() {
+					public boolean handleObject(ComponentObserveInfo object) {
+						return true;
+					}
 
-          public JavaInfo getKeyObject(ComponentObserveInfo component) {
-            return component.m_javaInfo;
-          }
+					public JavaInfo getKeyObject(ComponentObserveInfo component) {
+						return component.m_javaInfo;
+					}
 
-          public boolean equals(JavaInfo key0, JavaInfo key1) {
-            return key0 == key1;
-          }
+					public boolean equals(JavaInfo key0, JavaInfo key1) {
+						return key0 == key1;
+					}
 
-          public ComponentObserveInfo findObject(Map<JavaInfo, ComponentObserveInfo> javaInfoToComponent,
-              JavaInfo javaInfo) throws Exception {
-            VariableSupport variableSupport = javaInfo.getVariableSupport();
-            for (Map.Entry<JavaInfo, ComponentObserveInfo> entry : javaInfoToComponent.entrySet()) {
-              if (entry.getKey().getVariableSupport() == variableSupport) {
-                ComponentObserveInfo component = entry.getValue();
-                component.setJavaInfo(javaInfo);
-                return component;
-              }
-            }
-            return null;
-          }
+					public ComponentObserveInfo findObject(Map<JavaInfo, ComponentObserveInfo> javaInfoToComponent,
+							JavaInfo javaInfo) throws Exception {
+						VariableSupport variableSupport = javaInfo.getVariableSupport();
+						for (Map.Entry<JavaInfo, ComponentObserveInfo> entry : javaInfoToComponent.entrySet()) {
+							if (entry.getKey().getVariableSupport() == variableSupport) {
+								ComponentObserveInfo component = entry.getValue();
+								component.setJavaInfo(javaInfo);
+								return component;
+							}
+						}
+						return null;
+					}
 
-          public ComponentObserveInfo createObject(JavaInfo javaInfo) throws Exception {
-            return new ComponentObserveInfo(m_beanSupport, ComponentObserveInfo.this, javaInfo);
-          }
+					public ComponentObserveInfo createObject(JavaInfo javaInfo) throws Exception {
+						return new ComponentObserveInfo(m_beanSupport, ComponentObserveInfo.this, javaInfo);
+					}
 
-          public void update(ComponentObserveInfo component) throws Exception {
-            component.update();
-          }
-        });
-  }
+					public void update(ComponentObserveInfo component) throws Exception {
+						component.update();
+					}
+				});
+	}
 
-  @Override
-  public void createBinding(BindingInfo binding) throws Exception {
-    super.createBinding(binding);
-    // ensure convert local variable to field
-    ensureConvertToField();
-  }
+	@Override
+	public void createBinding(BindingInfo binding) throws Exception {
+		super.createBinding(binding);
+		// ensure convert local variable to field
+		ensureConvertToField();
+	}
 
-  protected void ensureConvertToField() throws Exception {
-    VariableSupport variableSupport = m_javaInfo.getVariableSupport();
-    if (variableSupport.canConvertLocalToField()) {
-      variableSupport.convertLocalToField();
-    }
-    if (variableSupport instanceof ExposedPropertyVariableSupport
-        || variableSupport instanceof ExposedFieldVariableSupport) {
-      ComponentObserveInfo parent = (ComponentObserveInfo) m_parent;
-      parent.ensureConvertToField();
-    }
-  }
+	protected void ensureConvertToField() throws Exception {
+		VariableSupport variableSupport = m_javaInfo.getVariableSupport();
+		if (variableSupport.canConvertLocalToField()) {
+			variableSupport.convertLocalToField();
+		}
+		if (variableSupport instanceof ExposedPropertyVariableSupport
+				|| variableSupport instanceof ExposedFieldVariableSupport) {
+			ComponentObserveInfo parent = (ComponentObserveInfo) m_parent;
+			parent.ensureConvertToField();
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Hierarchy
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public final IObserveInfo getParent() {
-    return m_parent;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Hierarchy
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public final IObserveInfo getParent() {
+		return m_parent;
+	}
 
-  public final List<IObserveInfo> getChildren(ChildrenContext context) {
-    if (context == ChildrenContext.ChildrenForMasterTable) {
-      if (m_children == null) {
-        try {
-          m_children = Lists.newArrayList();
-          List<JavaInfo> childrenInfos = SynchronizeManager.getChildren(m_javaInfo, JavaInfo.class);
-          for (JavaInfo childInfo : childrenInfos) {
-            m_children.add(new ComponentObserveInfo(m_beanSupport, this, childInfo));
-          }
-        } catch (Throwable e) {
-          DesignerPlugin.log(e);
-          m_children = Collections.emptyList();
-        }
-      }
-      return CoreUtils.cast(m_children);
-    }
-    if (context == ChildrenContext.ChildrenForPropertiesTable) {
-      if (m_properties == null) {
-        m_properties = m_beanSupport.createProperties(this, getObjectType());
-      }
-      return CoreUtils.cast(m_properties);
-    }
-    return Collections.emptyList();
-  }
+	public final List<IObserveInfo> getChildren(ChildrenContext context) {
+		if (context == ChildrenContext.ChildrenForMasterTable) {
+			if (m_children == null) {
+				try {
+					m_children = Lists.newArrayList();
+					List<JavaInfo> childrenInfos = SynchronizeManager.getChildren(m_javaInfo, JavaInfo.class);
+					for (JavaInfo childInfo : childrenInfos) {
+						m_children.add(new ComponentObserveInfo(m_beanSupport, this, childInfo));
+					}
+				} catch (Throwable e) {
+					DesignerPlugin.log(e);
+					m_children = Collections.emptyList();
+				}
+			}
+			return CoreUtils.cast(m_children);
+		}
+		if (context == ChildrenContext.ChildrenForPropertiesTable) {
+			if (m_properties == null) {
+				m_properties = m_beanSupport.createProperties(this, getObjectType());
+			}
+			return CoreUtils.cast(m_properties);
+		}
+		return Collections.emptyList();
+	}
 
-  public ComponentObserveInfo resolve(Expression expression) throws Exception {
-    if (AstNodeUtils.isVariable(expression)) {
-      if (AstNodeUtils.getVariableName(expression).equals(
-          JavaInfoReferenceProvider.getReference(m_javaInfo))) {
-        return this;
-      }
-    } else if (m_javaInfo.isRepresentedBy(expression)) {
-      return this;
-    }
-    getChildren(ChildrenContext.ChildrenForMasterTable);
-    for (ComponentObserveInfo child : m_children) {
-      ComponentObserveInfo resultInfo = child.resolve(expression);
-      if (resultInfo != null) {
-        return resultInfo;
-      }
-    }
-    return null;
-  }
+	public ComponentObserveInfo resolve(Expression expression) throws Exception {
+		if (AstNodeUtils.isVariable(expression)) {
+			if (AstNodeUtils.getVariableName(expression).equals(
+					JavaInfoReferenceProvider.getReference(m_javaInfo))) {
+				return this;
+			}
+		} else if (m_javaInfo.isRepresentedBy(expression)) {
+			return this;
+		}
+		getChildren(ChildrenContext.ChildrenForMasterTable);
+		for (ComponentObserveInfo child : m_children) {
+			ComponentObserveInfo resultInfo = child.resolve(expression);
+			if (resultInfo != null) {
+				return resultInfo;
+			}
+		}
+		return null;
+	}
 
-  public ComponentObserveInfo resolve(JavaInfo javaInfo) throws Exception {
-    if (m_javaInfo == javaInfo) {
-      return this;
-    }
-    getChildren(ChildrenContext.ChildrenForMasterTable);
-    for (ComponentObserveInfo child : m_children) {
-      ComponentObserveInfo resultInfo = child.resolve(javaInfo);
-      if (resultInfo != null) {
-        return resultInfo;
-      }
-    }
-    return null;
-  }
+	public ComponentObserveInfo resolve(JavaInfo javaInfo) throws Exception {
+		if (m_javaInfo == javaInfo) {
+			return this;
+		}
+		getChildren(ChildrenContext.ChildrenForMasterTable);
+		for (ComponentObserveInfo child : m_children) {
+			ComponentObserveInfo resultInfo = child.resolve(javaInfo);
+			if (resultInfo != null) {
+				return resultInfo;
+			}
+		}
+		return null;
+	}
 
-  public ComponentObserveInfo resolve(String reference) throws Exception {
-    if (reference.equals(getReference())) {
-      return this;
-    }
-    getChildren(ChildrenContext.ChildrenForMasterTable);
-    for (ComponentObserveInfo child : m_children) {
-      ComponentObserveInfo resultInfo = child.resolve(reference);
-      if (resultInfo != null) {
-        return resultInfo;
-      }
-    }
-    return null;
-  }
+	public ComponentObserveInfo resolve(String reference) throws Exception {
+		if (reference.equals(getReference())) {
+			return this;
+		}
+		getChildren(ChildrenContext.ChildrenForMasterTable);
+		for (ComponentObserveInfo child : m_children) {
+			ComponentObserveInfo resultInfo = child.resolve(reference);
+			if (resultInfo != null) {
+				return resultInfo;
+			}
+		}
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public IObservePresentation getPresentation() {
-    return m_presentation;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public IObservePresentation getPresentation() {
+		return m_presentation;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/components/ComponentsObserveTypeContainer.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/components/ComponentsObserveTypeContainer.java
index 39ac0d718..77bc57105 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/components/ComponentsObserveTypeContainer.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/components/ComponentsObserveTypeContainer.java
@@ -40,120 +40,120 @@
  * @coverage bindings.swing.model.components
  */
 public final class ComponentsObserveTypeContainer extends ObserveTypeContainer {
-  private List<IObserveInfo> m_observes = Collections.emptyList();
+	private List<IObserveInfo> m_observes = Collections.emptyList();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ComponentsObserveTypeContainer() {
-    super(ObserveType.WIDGETS, true, false);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ComponentsObserveTypeContainer() {
+		super(ObserveType.WIDGETS, true, false);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IObserveInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public List<IObserveInfo> getObservables() {
-    return m_observes;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IObserveInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public List<IObserveInfo> getObservables() {
+		return m_observes;
+	}
 
-  @Override
-  public void synchronizeObserves(JavaInfo root, AstEditor editor, TypeDeclaration rootNode)
-      throws Exception {
-    int count = m_observes.size();
-    for (int i = 0; i < count; i++) {
-      ComponentObserveInfo observe = (ComponentObserveInfo) m_observes.get(i);
-      observe.update();
-    }
-  }
+	@Override
+	public void synchronizeObserves(JavaInfo root, AstEditor editor, TypeDeclaration rootNode)
+			throws Exception {
+		int count = m_observes.size();
+		for (int i = 0; i < count; i++) {
+			ComponentObserveInfo observe = (ComponentObserveInfo) m_observes.get(i);
+			observe.update();
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parser
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void createObservables(JavaInfo root,
-      IModelResolver resolver,
-      AstEditor editor,
-      TypeDeclaration rootNode) throws Exception {
-    m_observes = Lists.newArrayList();
-    m_observes.add(new ComponentObserveInfo(new BeanSupport(), root));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parser
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void createObservables(JavaInfo root,
+			IModelResolver resolver,
+			AstEditor editor,
+			TypeDeclaration rootNode) throws Exception {
+		m_observes = Lists.newArrayList();
+		m_observes.add(new ComponentObserveInfo(new BeanSupport(), root));
+	}
 
-  public AstObjectInfo parseExpression(AstEditor editor,
-      String signature,
-      ClassInstanceCreation creation,
-      Expression[] arguments,
-      IModelResolver resolver,
-      IDatabindingsProvider provider) throws Exception {
-    return null;
-  }
+	public AstObjectInfo parseExpression(AstEditor editor,
+			String signature,
+			ClassInstanceCreation creation,
+			Expression[] arguments,
+			IModelResolver resolver,
+			IDatabindingsProvider provider) throws Exception {
+		return null;
+	}
 
-  public AstObjectInfo parseExpression(AstEditor editor,
-      String signature,
-      MethodInvocation invocation,
-      Expression[] arguments,
-      IModelResolver resolver) throws Exception {
-    return null;
-  }
+	public AstObjectInfo parseExpression(AstEditor editor,
+			String signature,
+			MethodInvocation invocation,
+			Expression[] arguments,
+			IModelResolver resolver) throws Exception {
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ObserveInfo resolve(Expression expression) throws Exception {
-    for (IObserveInfo iobserve : m_observes) {
-      ComponentObserveInfo observe = (ComponentObserveInfo) iobserve;
-      ObserveInfo resultInfo = observe.resolve(expression);
-      if (resultInfo != null) {
-        return resultInfo;
-      }
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ObserveInfo resolve(Expression expression) throws Exception {
+		for (IObserveInfo iobserve : m_observes) {
+			ComponentObserveInfo observe = (ComponentObserveInfo) iobserve;
+			ObserveInfo resultInfo = observe.resolve(expression);
+			if (resultInfo != null) {
+				return resultInfo;
+			}
+		}
+		return null;
+	}
 
-  public ObserveInfo resolve(JavaInfo javaInfo) throws Exception {
-    for (IObserveInfo iobserve : m_observes) {
-      ComponentObserveInfo observe = (ComponentObserveInfo) iobserve;
-      ObserveInfo resultInfo = observe.resolve(javaInfo);
-      if (resultInfo != null) {
-        return resultInfo;
-      }
-    }
-    return null;
-  }
+	public ObserveInfo resolve(JavaInfo javaInfo) throws Exception {
+		for (IObserveInfo iobserve : m_observes) {
+			ComponentObserveInfo observe = (ComponentObserveInfo) iobserve;
+			ObserveInfo resultInfo = observe.resolve(javaInfo);
+			if (resultInfo != null) {
+				return resultInfo;
+			}
+		}
+		return null;
+	}
 
-  public ObserveInfo resolve(String reference) throws Exception {
-    for (IObserveInfo iobserve : m_observes) {
-      ComponentObserveInfo observe = (ComponentObserveInfo) iobserve;
-      ObserveInfo resultInfo = observe.resolve(reference);
-      if (resultInfo != null) {
-        return resultInfo;
-      }
-    }
-    return null;
-  }
+	public ObserveInfo resolve(String reference) throws Exception {
+		for (IObserveInfo iobserve : m_observes) {
+			ComponentObserveInfo observe = (ComponentObserveInfo) iobserve;
+			ObserveInfo resultInfo = observe.resolve(reference);
+			if (resultInfo != null) {
+				return resultInfo;
+			}
+		}
+		return null;
+	}
 
-  public static ObserveCreationType getCreationType(Class<?> objectType) {
-    // JList
-    if (javax.swing.JList.class.isAssignableFrom(objectType)) {
-      return ObserveCreationType.JListBinding;
-    }
-    // JTable
-    if (javax.swing.JTable.class.isAssignableFrom(objectType)) {
-      return ObserveCreationType.JTableBinding;
-    }
-    // JComboBox
-    if (javax.swing.JComboBox.class.isAssignableFrom(objectType)) {
-      return ObserveCreationType.JComboBoxBinding;
-    }
-    // auto
-    return ObserveCreationType.AutoBinding;
-  }
+	public static ObserveCreationType getCreationType(Class<?> objectType) {
+		// JList
+		if (javax.swing.JList.class.isAssignableFrom(objectType)) {
+			return ObserveCreationType.JListBinding;
+		}
+		// JTable
+		if (javax.swing.JTable.class.isAssignableFrom(objectType)) {
+			return ObserveCreationType.JTableBinding;
+		}
+		// JComboBox
+		if (javax.swing.JComboBox.class.isAssignableFrom(objectType)) {
+			return ObserveCreationType.JComboBoxBinding;
+		}
+		// auto
+		return ObserveCreationType.AutoBinding;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/components/JavaInfoReferenceProvider.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/components/JavaInfoReferenceProvider.java
index 924f513de..685907fd6 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/components/JavaInfoReferenceProvider.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/components/JavaInfoReferenceProvider.java
@@ -30,67 +30,67 @@
  * @coverage bindings.swing.model.widgets
  */
 public final class JavaInfoReferenceProvider implements IReferenceProvider {
-  public static boolean LAZY_DETECTED;
-  private JavaInfo m_javaInfo;
+	public static boolean LAZY_DETECTED;
+	private JavaInfo m_javaInfo;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public JavaInfoReferenceProvider(JavaInfo javaInfo) {
-    m_javaInfo = javaInfo;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public JavaInfoReferenceProvider(JavaInfo javaInfo) {
+		m_javaInfo = javaInfo;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void setJavaInfo(JavaInfo javaInfo) {
-    m_javaInfo = javaInfo;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void setJavaInfo(JavaInfo javaInfo) {
+		m_javaInfo = javaInfo;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IReferenceProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public String getReference() throws Exception {
-    return getReference(m_javaInfo);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IReferenceProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public String getReference() throws Exception {
+		return getReference(m_javaInfo);
+	}
 
-  public static String getReference(JavaInfo javaInfo) throws Exception {
-    VariableSupport variableSupport = javaInfo.getVariableSupport();
-    // handle lazy
-    if (LAZY_DETECTED && variableSupport instanceof LazyVariableSupport) {
-      LazyVariableSupport lazyVariableSupport = (LazyVariableSupport) variableSupport;
-      return lazyVariableSupport.getAccessorReferenceExpression();
-    }
-    // handle this
-    if (variableSupport instanceof ThisVariableSupport) {
-      return "this";
-    }
-    // handle named variable
-    if (variableSupport instanceof AbstractSimpleVariableSupport && variableSupport.hasName()) {
-      return variableSupport.getName();
-    }
-    // handle exposed
-    if (variableSupport instanceof ExposedPropertyVariableSupport
-        || variableSupport instanceof ExposedFieldVariableSupport) {
-      try {
-        for (ASTNode node : javaInfo.getRelatedNodes()) {
-          if (AstNodeUtils.isVariable(node)) {
-            return CoreUtils.getNodeReference(node);
-          }
-        }
-      } catch (Throwable e) {
-      }
-      String reference = getReference(javaInfo.getParentJava());
-      if (reference != null) {
-        return reference + "." + variableSupport.getTitle();
-      }
-    }
-    return null;
-  }
+	public static String getReference(JavaInfo javaInfo) throws Exception {
+		VariableSupport variableSupport = javaInfo.getVariableSupport();
+		// handle lazy
+		if (LAZY_DETECTED && variableSupport instanceof LazyVariableSupport) {
+			LazyVariableSupport lazyVariableSupport = (LazyVariableSupport) variableSupport;
+			return lazyVariableSupport.getAccessorReferenceExpression();
+		}
+		// handle this
+		if (variableSupport instanceof ThisVariableSupport) {
+			return "this";
+		}
+		// handle named variable
+		if (variableSupport instanceof AbstractSimpleVariableSupport && variableSupport.hasName()) {
+			return variableSupport.getName();
+		}
+		// handle exposed
+		if (variableSupport instanceof ExposedPropertyVariableSupport
+				|| variableSupport instanceof ExposedFieldVariableSupport) {
+			try {
+				for (ASTNode node : javaInfo.getRelatedNodes()) {
+					if (AstNodeUtils.isVariable(node)) {
+						return CoreUtils.getNodeReference(node);
+					}
+				}
+			} catch (Throwable e) {
+			}
+			String reference = getReference(javaInfo.getParentJava());
+			if (reference != null) {
+				return reference + "." + variableSupport.getTitle();
+			}
+		}
+		return null;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/decorate/BeanDecorationInfo.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/decorate/BeanDecorationInfo.java
index 4c60f5227..c1442850b 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/decorate/BeanDecorationInfo.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/decorate/BeanDecorationInfo.java
@@ -26,64 +26,64 @@
  * @coverage bindings.swing.model
  */
 public final class BeanDecorationInfo {
-  private final BeanDecorationInfo m_parent;
-  private Set<String> m_preferred = Collections.emptySet();
-  private Set<String> m_advanced = Collections.emptySet();
-  private Set<String> m_hidden = Collections.emptySet();
+	private final BeanDecorationInfo m_parent;
+	private Set<String> m_preferred = Collections.emptySet();
+	private Set<String> m_advanced = Collections.emptySet();
+	private Set<String> m_hidden = Collections.emptySet();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public BeanDecorationInfo(BeanDecorationInfo parent) {
-    m_parent = parent;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public BeanDecorationInfo(BeanDecorationInfo parent) {
+		m_parent = parent;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  void setPreferredProperties(String[] properties) {
-    if (!ArrayUtils.isEmpty(properties)) {
-      m_preferred = Sets.newHashSet(properties);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	void setPreferredProperties(String[] properties) {
+		if (!ArrayUtils.isEmpty(properties)) {
+			m_preferred = Sets.newHashSet(properties);
+		}
+	}
 
-  void setAdvancedProperties(String[] properties) {
-    if (!ArrayUtils.isEmpty(properties)) {
-      m_advanced = Sets.newHashSet(properties);
-    }
-  }
+	void setAdvancedProperties(String[] properties) {
+		if (!ArrayUtils.isEmpty(properties)) {
+			m_advanced = Sets.newHashSet(properties);
+		}
+	}
 
-  void setHiddenProperties(String[] properties) {
-    if (!ArrayUtils.isEmpty(properties)) {
-      m_hidden = Sets.newHashSet(properties);
-    }
-  }
+	void setHiddenProperties(String[] properties) {
+		if (!ArrayUtils.isEmpty(properties)) {
+			m_hidden = Sets.newHashSet(properties);
+		}
+	}
 
-  /**
-   * @return {@link IObserveDecorator} for given {@code propertyName}.
-   */
-  public IObserveDecorator getDecorator(String propertyName) {
-    // preferred
-    if (m_preferred.contains(propertyName)) {
-      return IObserveDecorator.BOLD;
-    }
-    // advanced
-    if (m_advanced.contains(propertyName)) {
-      return IObserveDecorator.ITALIC;
-    }
-    // hidden
-    if (m_hidden.contains(propertyName)) {
-      return IObserveDecorator.HIDDEN;
-    }
-    // route to parent
-    if (m_parent != null) {
-      return m_parent.getDecorator(propertyName);
-    }
-    // default
-    return IObserveDecorator.DEFAULT;
-  }
+	/**
+	 * @return {@link IObserveDecorator} for given {@code propertyName}.
+	 */
+	public IObserveDecorator getDecorator(String propertyName) {
+		// preferred
+		if (m_preferred.contains(propertyName)) {
+			return IObserveDecorator.BOLD;
+		}
+		// advanced
+		if (m_advanced.contains(propertyName)) {
+			return IObserveDecorator.ITALIC;
+		}
+		// hidden
+		if (m_hidden.contains(propertyName)) {
+			return IObserveDecorator.HIDDEN;
+		}
+		// route to parent
+		if (m_parent != null) {
+			return m_parent.getDecorator(propertyName);
+		}
+		// default
+		return IObserveDecorator.DEFAULT;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/decorate/DecorationUtils.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/decorate/DecorationUtils.java
index 2d18904ab..747cdbb71 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/decorate/DecorationUtils.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/decorate/DecorationUtils.java
@@ -30,61 +30,61 @@
  * @coverage bindings.swing.model
  */
 public final class DecorationUtils {
-  private static final Map<String, BeanDecorationInfo> DECORATIONS = Maps.newHashMap();
-  private static boolean m_loadDecorations;
+	private static final Map<String, BeanDecorationInfo> DECORATIONS = Maps.newHashMap();
+	private static boolean m_loadDecorations;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return {@link BeanDecorationInfo} for given {@code beanClass}.
-   */
-  public static BeanDecorationInfo getDecorationInfo(Class<?> beanClass) throws Exception {
-    if (java.awt.Component.class.isAssignableFrom(beanClass)) {
-      loadDecorations();
-      while (beanClass != null) {
-        BeanDecorationInfo decorationInfo = DECORATIONS.get(beanClass.getName());
-        if (decorationInfo != null) {
-          return decorationInfo;
-        }
-        beanClass = beanClass.getSuperclass();
-      }
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return {@link BeanDecorationInfo} for given {@code beanClass}.
+	 */
+	public static BeanDecorationInfo getDecorationInfo(Class<?> beanClass) throws Exception {
+		if (java.awt.Component.class.isAssignableFrom(beanClass)) {
+			loadDecorations();
+			while (beanClass != null) {
+				BeanDecorationInfo decorationInfo = DECORATIONS.get(beanClass.getName());
+				if (decorationInfo != null) {
+					return decorationInfo;
+				}
+				beanClass = beanClass.getSuperclass();
+			}
+		}
+		return null;
+	}
 
-  private static void loadDecorations() throws Exception {
-    if (m_loadDecorations) {
-      return;
-    }
-    m_loadDecorations = true;
-    InputStream stream = Activator.getFile("templates/Decorations.xml");
-    SAXParser parser = SAXParserFactory.newInstance().newSAXParser();
-    parser.parse(stream, new DefaultHandler() {
-      BeanDecorationInfo m_lastDecoration;
+	private static void loadDecorations() throws Exception {
+		if (m_loadDecorations) {
+			return;
+		}
+		m_loadDecorations = true;
+		InputStream stream = Activator.getFile("templates/Decorations.xml");
+		SAXParser parser = SAXParserFactory.newInstance().newSAXParser();
+		parser.parse(stream, new DefaultHandler() {
+			BeanDecorationInfo m_lastDecoration;
 
-      @Override
-      public void startElement(String uri, String localName, String name, Attributes attributes)
-          throws SAXException {
-        if (name.equals("decoration")) {
-          BeanDecorationInfo parent = DECORATIONS.get(attributes.getValue("parent"));
-          m_lastDecoration = new BeanDecorationInfo(parent);
-          DECORATIONS.put(attributes.getValue("class"), m_lastDecoration);
-        } else if (name.equals("preferred")) {
-          m_lastDecoration.setPreferredProperties(getProperties(attributes));
-        } else if (name.equals("advanced")) {
-          m_lastDecoration.setAdvancedProperties(getProperties(attributes));
-        } else if (name.equals("hidden")) {
-          m_lastDecoration.setHiddenProperties(getProperties(attributes));
-        }
-      }
-    });
-    IOUtils.closeQuietly(stream);
-  }
+			@Override
+			public void startElement(String uri, String localName, String name, Attributes attributes)
+					throws SAXException {
+				if (name.equals("decoration")) {
+					BeanDecorationInfo parent = DECORATIONS.get(attributes.getValue("parent"));
+					m_lastDecoration = new BeanDecorationInfo(parent);
+					DECORATIONS.put(attributes.getValue("class"), m_lastDecoration);
+				} else if (name.equals("preferred")) {
+					m_lastDecoration.setPreferredProperties(getProperties(attributes));
+				} else if (name.equals("advanced")) {
+					m_lastDecoration.setAdvancedProperties(getProperties(attributes));
+				} else if (name.equals("hidden")) {
+					m_lastDecoration.setHiddenProperties(getProperties(attributes));
+				}
+			}
+		});
+		IOUtils.closeQuietly(stream);
+	}
 
-  private static String[] getProperties(Attributes attributes) {
-    return attributes.getValue("properties").split(" ");
-  }
+	private static String[] getProperties(Attributes attributes) {
+		return attributes.getValue("properties").split(" ");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/generic/ClassGenericType.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/generic/ClassGenericType.java
index 4fbc3b2d0..a1ebb49e9 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/generic/ClassGenericType.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/generic/ClassGenericType.java
@@ -22,58 +22,58 @@
  * @coverage bindings.swing.model.generic
  */
 public final class ClassGenericType implements IGenericType {
-  public static final IGenericType OBJECT_CLASS = new ClassGenericType(Object.class, null, null);
-  public static final IGenericType STRING_CLASS = new ClassGenericType(String.class, null, null);
-  public static final IGenericType INT_CLASS = new ClassGenericType(int.class, null, null);
-  public static final IGenericType LIST_CLASS = new ClassGenericType(List.class,
-      "java.util.List<java.lang.Object>",
-      null);
-  public static final IGenericType WILDCARD = new ClassGenericType(null, "?", "?");
-  //
-  private final Class<?> m_rawType;
-  private final String m_fullName;
-  private final String m_simpleName;
+	public static final IGenericType OBJECT_CLASS = new ClassGenericType(Object.class, null, null);
+	public static final IGenericType STRING_CLASS = new ClassGenericType(String.class, null, null);
+	public static final IGenericType INT_CLASS = new ClassGenericType(int.class, null, null);
+	public static final IGenericType LIST_CLASS = new ClassGenericType(List.class,
+			"java.util.List<java.lang.Object>",
+			null);
+	public static final IGenericType WILDCARD = new ClassGenericType(null, "?", "?");
+	//
+	private final Class<?> m_rawType;
+	private final String m_fullName;
+	private final String m_simpleName;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ClassGenericType(Class<?> rawType, String fullName, String simpleName) {
-    m_rawType = rawType;
-    m_fullName =
-        fullName == null ? GenericUtils.convertPrimitiveType(ReflectionUtils.getFullyQualifiedName(
-            m_rawType,
-            false)) : fullName;
-    m_simpleName = simpleName == null ? m_rawType.getSimpleName() : simpleName;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ClassGenericType(Class<?> rawType, String fullName, String simpleName) {
+		m_rawType = rawType;
+		m_fullName =
+				fullName == null ? GenericUtils.convertPrimitiveType(ReflectionUtils.getFullyQualifiedName(
+						m_rawType,
+						false)) : fullName;
+		m_simpleName = simpleName == null ? m_rawType.getSimpleName() : simpleName;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IGenericType
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public Class<?> getRawType() {
-    return m_rawType;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IGenericType
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public Class<?> getRawType() {
+		return m_rawType;
+	}
 
-  public String getFullTypeName() {
-    return m_fullName;
-  }
+	public String getFullTypeName() {
+		return m_fullName;
+	}
 
-  public String getSimpleTypeName() {
-    return m_simpleName;
-  }
+	public String getSimpleTypeName() {
+		return m_simpleName;
+	}
 
-  public List<IGenericType> getSubTypes() {
-    return Collections.emptyList();
-  }
+	public List<IGenericType> getSubTypes() {
+		return Collections.emptyList();
+	}
 
-  public IGenericType getSubType(int index) {
-    return OBJECT_CLASS;
-  }
+	public IGenericType getSubType(int index) {
+		return OBJECT_CLASS;
+	}
 
-  public boolean isEmpty() {
-    return true;
-  }
+	public boolean isEmpty() {
+		return true;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/generic/GenericTypeContainer.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/generic/GenericTypeContainer.java
index e2f4b91a2..343f44196 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/generic/GenericTypeContainer.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/generic/GenericTypeContainer.java
@@ -23,85 +23,85 @@
  * @coverage bindings.swing.model.generic
  */
 public final class GenericTypeContainer implements IGenericType {
-  private final Class<?> m_rawType;
-  private final int m_dimension;
-  private String m_fullName;
-  private final String m_simpleName;
-  private final List<IGenericType> m_subTypes = Lists.newArrayList();
+	private final Class<?> m_rawType;
+	private final int m_dimension;
+	private String m_fullName;
+	private final String m_simpleName;
+	private final List<IGenericType> m_subTypes = Lists.newArrayList();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public GenericTypeContainer(Class<?> rawType) {
-    this(rawType, 0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public GenericTypeContainer(Class<?> rawType) {
+		this(rawType, 0);
+	}
 
-  public GenericTypeContainer(Class<?> rawType, int dimension) {
-    m_rawType = rawType;
-    m_dimension = dimension;
-    m_simpleName = m_rawType.getSimpleName();
-  }
+	public GenericTypeContainer(Class<?> rawType, int dimension) {
+		m_rawType = rawType;
+		m_dimension = dimension;
+		m_simpleName = m_rawType.getSimpleName();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IGenericType
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public Class<?> getRawType() {
-    return m_rawType;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IGenericType
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public Class<?> getRawType() {
+		return m_rawType;
+	}
 
-  public String getFullTypeName() {
-    if (m_fullName == null) {
-      // prepare class name
-      StringBuffer fullName = new StringBuffer();
-      if (m_rawType.isArray()) {
-        Class<?> type = m_rawType;
-        for (int i = 0; i < m_dimension; i++) {
-          type = type.getComponentType();
-        }
-        fullName.append(CoreUtils.getClassName(type));
-      } else {
-        fullName.append(CoreUtils.getClassName(m_rawType));
-      }
-      // prepare generic parameters
-      fullName.append("<");
-      int count = m_subTypes.size();
-      for (int i = 0; i < count; i++) {
-        if (i > 0) {
-          fullName.append(", ");
-        }
-        fullName.append(m_subTypes.get(i).getFullTypeName());
-      }
-      fullName.append(">");
-      // handle array
-      for (int i = 0; i < m_dimension; i++) {
-        fullName.append("[]");
-      }
-      // result
-      m_fullName = fullName.toString();
-    }
-    return m_fullName;
-  }
+	public String getFullTypeName() {
+		if (m_fullName == null) {
+			// prepare class name
+			StringBuffer fullName = new StringBuffer();
+			if (m_rawType.isArray()) {
+				Class<?> type = m_rawType;
+				for (int i = 0; i < m_dimension; i++) {
+					type = type.getComponentType();
+				}
+				fullName.append(CoreUtils.getClassName(type));
+			} else {
+				fullName.append(CoreUtils.getClassName(m_rawType));
+			}
+			// prepare generic parameters
+			fullName.append("<");
+			int count = m_subTypes.size();
+			for (int i = 0; i < count; i++) {
+				if (i > 0) {
+					fullName.append(", ");
+				}
+				fullName.append(m_subTypes.get(i).getFullTypeName());
+			}
+			fullName.append(">");
+			// handle array
+			for (int i = 0; i < m_dimension; i++) {
+				fullName.append("[]");
+			}
+			// result
+			m_fullName = fullName.toString();
+		}
+		return m_fullName;
+	}
 
-  public String getSimpleTypeName() {
-    return m_simpleName;
-  }
+	public String getSimpleTypeName() {
+		return m_simpleName;
+	}
 
-  public List<IGenericType> getSubTypes() {
-    return m_subTypes;
-  }
+	public List<IGenericType> getSubTypes() {
+		return m_subTypes;
+	}
 
-  public IGenericType getSubType(int index) {
-    if (index >= m_subTypes.size()) {
-      return ClassGenericType.OBJECT_CLASS;
-    }
-    return m_subTypes.get(index);
-  }
+	public IGenericType getSubType(int index) {
+		if (index >= m_subTypes.size()) {
+			return ClassGenericType.OBJECT_CLASS;
+		}
+		return m_subTypes.get(index);
+	}
 
-  public boolean isEmpty() {
-    return m_subTypes.isEmpty();
-  }
+	public boolean isEmpty() {
+		return m_subTypes.isEmpty();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/generic/GenericUtils.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/generic/GenericUtils.java
index 1a1554038..c4378b9e0 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/generic/GenericUtils.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/generic/GenericUtils.java
@@ -42,307 +42,307 @@
  * @coverage bindings.swing.model.generic
  */
 public class GenericUtils {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Generic: AST
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static IGenericType[] getReturnTypeArguments(AstEditor editor,
-      MethodInvocation invocation,
-      int count) throws Exception {
-    ITypeBinding[] typeArguments = AstNodeUtils.getMethodBinding(invocation).getTypeArguments();
-    return getObjectTypes(editor, typeArguments, count);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Generic: AST
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static IGenericType[] getReturnTypeArguments(AstEditor editor,
+			MethodInvocation invocation,
+			int count) throws Exception {
+		ITypeBinding[] typeArguments = AstNodeUtils.getMethodBinding(invocation).getTypeArguments();
+		return getObjectTypes(editor, typeArguments, count);
+	}
 
-  public static IGenericType[] getObjectTypes(AstEditor editor, ITypeBinding[] bindings, int count)
-      throws Exception {
-    IGenericType[] types = new IGenericType[count];
-    if (bindings.length == types.length) {
-      ClassLoader classLoader = EditorState.get(editor).getEditorLoader();
-      for (int i = 0; i < types.length; i++) {
-        types[i] = getObjectType(classLoader, bindings[i]);
-      }
-    } else {
-      Arrays.fill(types, ClassGenericType.OBJECT_CLASS);
-    }
-    return types;
-  }
+	public static IGenericType[] getObjectTypes(AstEditor editor, ITypeBinding[] bindings, int count)
+			throws Exception {
+		IGenericType[] types = new IGenericType[count];
+		if (bindings.length == types.length) {
+			ClassLoader classLoader = EditorState.get(editor).getEditorLoader();
+			for (int i = 0; i < types.length; i++) {
+				types[i] = getObjectType(classLoader, bindings[i]);
+			}
+		} else {
+			Arrays.fill(types, ClassGenericType.OBJECT_CLASS);
+		}
+		return types;
+	}
 
-  public static IGenericType getCreationType(AstEditor editor, ClassInstanceCreation creation)
-      throws Exception {
-    ITypeBinding binding = AstNodeUtils.getTypeBinding(creation);
-    return getObjectType(editor, binding);
-  }
+	public static IGenericType getCreationType(AstEditor editor, ClassInstanceCreation creation)
+			throws Exception {
+		ITypeBinding binding = AstNodeUtils.getTypeBinding(creation);
+		return getObjectType(editor, binding);
+	}
 
-  public static IGenericType getObjectType(AstEditor editor, ITypeBinding binding) throws Exception {
-    ClassLoader classLoader = EditorState.get(editor).getEditorLoader();
-    return getObjectType(classLoader, binding);
-  }
+	public static IGenericType getObjectType(AstEditor editor, ITypeBinding binding) throws Exception {
+		ClassLoader classLoader = EditorState.get(editor).getEditorLoader();
+		return getObjectType(classLoader, binding);
+	}
 
-  private static IGenericType getObjectType(ClassLoader classLoader, ITypeBinding binding)
-      throws Exception {
-    Class<?> rawType =
-        ReflectionUtils.getClassByName(
-            classLoader,
-            AstNodeUtils.getFullyQualifiedName(binding, true));
-    String typeName = null;
-    if (binding instanceof DesignerTypeBinding) {
-      // none
-    } else if (binding.isWildcardType() && binding.getBound() == null) {
-      return ClassGenericType.WILDCARD;
-    } else {
-      typeName = resolveTypeName(binding);
-      if (binding.isParameterizedType()) {
-        GenericTypeContainer genericType = new GenericTypeContainer(rawType);
-        for (ITypeBinding subBinding : binding.getTypeArguments()) {
-          genericType.getSubTypes().add(getObjectType(classLoader, subBinding));
-        }
-        return genericType;
-      }
-      if (binding.isArray() && rawType.isArray() && !rawType.getComponentType().isPrimitive()) {
-        GenericTypeContainer genericType =
-            new GenericTypeContainer(rawType, binding.getDimensions());
-        genericType.getSubTypes().add(getObjectType(classLoader, binding.getElementType()));
-        return genericType;
-      }
-    }
-    return new ClassGenericType(rawType, typeName, null);
-  }
+	private static IGenericType getObjectType(ClassLoader classLoader, ITypeBinding binding)
+			throws Exception {
+		Class<?> rawType =
+				ReflectionUtils.getClassByName(
+						classLoader,
+						AstNodeUtils.getFullyQualifiedName(binding, true));
+		String typeName = null;
+		if (binding instanceof DesignerTypeBinding) {
+			// none
+		} else if (binding.isWildcardType() && binding.getBound() == null) {
+			return ClassGenericType.WILDCARD;
+		} else {
+			typeName = resolveTypeName(binding);
+			if (binding.isParameterizedType()) {
+				GenericTypeContainer genericType = new GenericTypeContainer(rawType);
+				for (ITypeBinding subBinding : binding.getTypeArguments()) {
+					genericType.getSubTypes().add(getObjectType(classLoader, subBinding));
+				}
+				return genericType;
+			}
+			if (binding.isArray() && rawType.isArray() && !rawType.getComponentType().isPrimitive()) {
+				GenericTypeContainer genericType =
+						new GenericTypeContainer(rawType, binding.getDimensions());
+				genericType.getSubTypes().add(getObjectType(classLoader, binding.getElementType()));
+				return genericType;
+			}
+		}
+		return new ClassGenericType(rawType, typeName, null);
+	}
 
-  private static String resolveTypeName(ITypeBinding binding) throws Exception {
-    if (binding.isArray()) {
-      StringBuffer fullName = new StringBuffer();
-      for (int i = 0; i < binding.getDimensions(); i++) {
-        fullName.append("[]");
-      }
-      fullName.insert(0, resolveTypeName(binding.getElementType()));
-      return fullName.toString();
-    }
-    if (binding.isWildcardType()) {
-      ITypeBinding boundType = binding.getBound();
-      if (boundType == null) {
-        return "?";
-      }
-      String fullName = binding.isUpperbound() ? "? extends " : "? super ";
-      return fullName + resolveTypeName(boundType);
-    }
-    if (binding.isTypeVariable()) {
-      return binding.getName();
-    }
-    String className = AstNodeUtils.getFullyQualifiedName(binding, false);
-    if (binding.isParameterizedType()) {
-      StringBuffer fullName = new StringBuffer();
-      fullName.append(className);
-      fullName.append("<");
-      ITypeBinding[] types = binding.getTypeArguments();
-      for (int i = 0; i < types.length; i++) {
-        if (i > 0) {
-          fullName.append(", ");
-        }
-        fullName.append(resolveTypeName(types[i]));
-      }
-      fullName.append(">");
-      return fullName.toString();
-    }
-    return convertPrimitiveType(className);
-  }
+	private static String resolveTypeName(ITypeBinding binding) throws Exception {
+		if (binding.isArray()) {
+			StringBuffer fullName = new StringBuffer();
+			for (int i = 0; i < binding.getDimensions(); i++) {
+				fullName.append("[]");
+			}
+			fullName.insert(0, resolveTypeName(binding.getElementType()));
+			return fullName.toString();
+		}
+		if (binding.isWildcardType()) {
+			ITypeBinding boundType = binding.getBound();
+			if (boundType == null) {
+				return "?";
+			}
+			String fullName = binding.isUpperbound() ? "? extends " : "? super ";
+			return fullName + resolveTypeName(boundType);
+		}
+		if (binding.isTypeVariable()) {
+			return binding.getName();
+		}
+		String className = AstNodeUtils.getFullyQualifiedName(binding, false);
+		if (binding.isParameterizedType()) {
+			StringBuffer fullName = new StringBuffer();
+			fullName.append(className);
+			fullName.append("<");
+			ITypeBinding[] types = binding.getTypeArguments();
+			for (int i = 0; i < types.length; i++) {
+				if (i > 0) {
+					fullName.append(", ");
+				}
+				fullName.append(resolveTypeName(types[i]));
+			}
+			fullName.append(">");
+			return fullName.toString();
+		}
+		return convertPrimitiveType(className);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Generic: Java Runtime
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static IGenericType getObjectType(TypeVariable<?> superTypeParameter,
-      Type superTypeParameterClass,
-      PropertyDescriptor descriptor) {
-    Method readMethod = descriptor.getReadMethod();
-    Class<?> rawType = descriptor.getPropertyType();
-    if (readMethod == null) {
-      return new ClassGenericType(rawType, null, null);
-    }
-    Type type = readMethod.getGenericReturnType();
-    if (type instanceof Class<?> || type instanceof TypeVariable<?>) {
-      return new ClassGenericType(rawType, null, null);
-    }
-    if (type instanceof ParameterizedType) {
-      GenericTypeContainer genericType = new GenericTypeContainer(rawType);
-      ParameterizedType parameterizedType = (ParameterizedType) type;
-      //
-      if (superTypeParameter != null
-          && parameterizedType.getActualTypeArguments().length == 1
-          && superTypeParameter == parameterizedType.getActualTypeArguments()[0]) {
-        genericType.getSubTypes().add(resolveType(superTypeParameterClass));
-        return genericType;
-      }
-      for (Type subType : parameterizedType.getActualTypeArguments()) {
-        genericType.getSubTypes().add(resolveType(subType));
-      }
-      return genericType;
-    }
-    if (type instanceof GenericArrayType) {
-      int dimension = 0;
-      Type elementType = null;
-      GenericArrayType arrayType = (GenericArrayType) type;
-      while (true) {
-        dimension++;
-        elementType = arrayType.getGenericComponentType();
-        if (elementType instanceof GenericArrayType) {
-          arrayType = (GenericArrayType) elementType;
-          continue;
-        }
-        break;
-      }
-      GenericTypeContainer genericType = new GenericTypeContainer(rawType, dimension);
-      genericType.getSubTypes().add(resolveType(elementType));
-      return genericType;
-    }
-    Assert.fail(MessageFormat.format("Undefine type: {0} {1}", readMethod, rawType));
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Generic: Java Runtime
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static IGenericType getObjectType(TypeVariable<?> superTypeParameter,
+			Type superTypeParameterClass,
+			PropertyDescriptor descriptor) {
+		Method readMethod = descriptor.getReadMethod();
+		Class<?> rawType = descriptor.getPropertyType();
+		if (readMethod == null) {
+			return new ClassGenericType(rawType, null, null);
+		}
+		Type type = readMethod.getGenericReturnType();
+		if (type instanceof Class<?> || type instanceof TypeVariable<?>) {
+			return new ClassGenericType(rawType, null, null);
+		}
+		if (type instanceof ParameterizedType) {
+			GenericTypeContainer genericType = new GenericTypeContainer(rawType);
+			ParameterizedType parameterizedType = (ParameterizedType) type;
+			//
+			if (superTypeParameter != null
+					&& parameterizedType.getActualTypeArguments().length == 1
+					&& superTypeParameter == parameterizedType.getActualTypeArguments()[0]) {
+				genericType.getSubTypes().add(resolveType(superTypeParameterClass));
+				return genericType;
+			}
+			for (Type subType : parameterizedType.getActualTypeArguments()) {
+				genericType.getSubTypes().add(resolveType(subType));
+			}
+			return genericType;
+		}
+		if (type instanceof GenericArrayType) {
+			int dimension = 0;
+			Type elementType = null;
+			GenericArrayType arrayType = (GenericArrayType) type;
+			while (true) {
+				dimension++;
+				elementType = arrayType.getGenericComponentType();
+				if (elementType instanceof GenericArrayType) {
+					arrayType = (GenericArrayType) elementType;
+					continue;
+				}
+				break;
+			}
+			GenericTypeContainer genericType = new GenericTypeContainer(rawType, dimension);
+			genericType.getSubTypes().add(resolveType(elementType));
+			return genericType;
+		}
+		Assert.fail(MessageFormat.format("Undefine type: {0} {1}", readMethod, rawType));
+		return null;
+	}
 
-  private static IGenericType resolveType(Type type) {
-    if (type instanceof Class<?>) {
-      return new ClassGenericType((Class<?>) type, null, null);
-    }
-    if (type instanceof WildcardType) {
-      WildcardType wildcardType = (WildcardType) type;
-      if (ArrayUtils.isEmpty(wildcardType.getUpperBounds())
-          && ArrayUtils.isEmpty(wildcardType.getLowerBounds())) {
-        return ClassGenericType.WILDCARD;
-      }
-    }
-    if (type instanceof ParameterizedType
-        || type instanceof GenericArrayType
-        || type instanceof WildcardType) {
-      return new ClassGenericType(null, resolveTypeName(type), "???");
-    }
-    if (type instanceof TypeVariable<?>) {
-      return ClassGenericType.WILDCARD;
-    }
-    Assert.fail(MessageFormat.format("Undefine type: {0}", type));
-    return null;
-  }
+	private static IGenericType resolveType(Type type) {
+		if (type instanceof Class<?>) {
+			return new ClassGenericType((Class<?>) type, null, null);
+		}
+		if (type instanceof WildcardType) {
+			WildcardType wildcardType = (WildcardType) type;
+			if (ArrayUtils.isEmpty(wildcardType.getUpperBounds())
+					&& ArrayUtils.isEmpty(wildcardType.getLowerBounds())) {
+				return ClassGenericType.WILDCARD;
+			}
+		}
+		if (type instanceof ParameterizedType
+				|| type instanceof GenericArrayType
+				|| type instanceof WildcardType) {
+			return new ClassGenericType(null, resolveTypeName(type), "???");
+		}
+		if (type instanceof TypeVariable<?>) {
+			return ClassGenericType.WILDCARD;
+		}
+		Assert.fail(MessageFormat.format("Undefine type: {0}", type));
+		return null;
+	}
 
-  private static String resolveTypeName(Type type) {
-    if (type instanceof Class<?>) {
-      Class<?> rawType = (Class<?>) type;
-      return convertPrimitiveType(ReflectionUtils.getFullyQualifiedName(rawType, false));
-    }
-    if (type instanceof ParameterizedType) {
-      ParameterizedType parameterizedType = (ParameterizedType) type;
-      Class<?> rawType = (Class<?>) parameterizedType.getRawType();
-      StringBuffer fullName = new StringBuffer();
-      fullName.append(CoreUtils.getClassName(rawType));
-      fullName.append("<");
-      Type[] types = parameterizedType.getActualTypeArguments();
-      for (int i = 0; i < types.length; i++) {
-        if (i > 0) {
-          fullName.append(", ");
-        }
-        fullName.append(resolveTypeName(types[i]));
-      }
-      fullName.append(">");
-      return fullName.toString();
-    }
-    if (type instanceof GenericArrayType) {
-      StringBuffer fullName = new StringBuffer();
-      Type elementType = null;
-      GenericArrayType arrayType = (GenericArrayType) type;
-      while (true) {
-        fullName.append("[]");
-        elementType = arrayType.getGenericComponentType();
-        if (elementType instanceof GenericArrayType) {
-          arrayType = (GenericArrayType) elementType;
-          continue;
-        }
-        break;
-      }
-      fullName.insert(0, resolveTypeName(elementType));
-      return fullName.toString();
-    }
-    if (type instanceof WildcardType) {
-      WildcardType wildcardType = (WildcardType) type;
-      Type[] upperBounds = wildcardType.getUpperBounds();
-      Type[] lowerBounds = wildcardType.getLowerBounds();
-      if (!ArrayUtils.isEmpty(upperBounds)) {
-        Type upperBound = upperBounds[0];
-        boolean isWildcard =
-            upperBound instanceof Class<?>
-                && ((Class<?>) upperBound).getName().equals("java.lang.Object");
-        if (!isWildcard) {
-          return "? extends " + resolveTypeName(upperBound);
-        }
-      } else if (!ArrayUtils.isEmpty(lowerBounds)) {
-        return "? super " + resolveTypeName(lowerBounds[0]);
-      }
-      return "?";
-    }
-    if (type instanceof TypeVariable<?>) {
-      return "?";
-    }
-    Assert.fail("Undefine type: " + type);
-    return null;
-  }
+	private static String resolveTypeName(Type type) {
+		if (type instanceof Class<?>) {
+			Class<?> rawType = (Class<?>) type;
+			return convertPrimitiveType(ReflectionUtils.getFullyQualifiedName(rawType, false));
+		}
+		if (type instanceof ParameterizedType) {
+			ParameterizedType parameterizedType = (ParameterizedType) type;
+			Class<?> rawType = (Class<?>) parameterizedType.getRawType();
+			StringBuffer fullName = new StringBuffer();
+			fullName.append(CoreUtils.getClassName(rawType));
+			fullName.append("<");
+			Type[] types = parameterizedType.getActualTypeArguments();
+			for (int i = 0; i < types.length; i++) {
+				if (i > 0) {
+					fullName.append(", ");
+				}
+				fullName.append(resolveTypeName(types[i]));
+			}
+			fullName.append(">");
+			return fullName.toString();
+		}
+		if (type instanceof GenericArrayType) {
+			StringBuffer fullName = new StringBuffer();
+			Type elementType = null;
+			GenericArrayType arrayType = (GenericArrayType) type;
+			while (true) {
+				fullName.append("[]");
+				elementType = arrayType.getGenericComponentType();
+				if (elementType instanceof GenericArrayType) {
+					arrayType = (GenericArrayType) elementType;
+					continue;
+				}
+				break;
+			}
+			fullName.insert(0, resolveTypeName(elementType));
+			return fullName.toString();
+		}
+		if (type instanceof WildcardType) {
+			WildcardType wildcardType = (WildcardType) type;
+			Type[] upperBounds = wildcardType.getUpperBounds();
+			Type[] lowerBounds = wildcardType.getLowerBounds();
+			if (!ArrayUtils.isEmpty(upperBounds)) {
+				Type upperBound = upperBounds[0];
+				boolean isWildcard =
+						upperBound instanceof Class<?>
+				&& ((Class<?>) upperBound).getName().equals("java.lang.Object");
+				if (!isWildcard) {
+					return "? extends " + resolveTypeName(upperBound);
+				}
+			} else if (!ArrayUtils.isEmpty(lowerBounds)) {
+				return "? super " + resolveTypeName(lowerBounds[0]);
+			}
+			return "?";
+		}
+		if (type instanceof TypeVariable<?>) {
+			return "?";
+		}
+		Assert.fail("Undefine type: " + type);
+		return null;
+	}
 
-  public static String convertPrimitiveType(String className) {
-    if ("boolean".equals(className)) {
-      return "java.lang.Boolean";
-    } else if ("char".equals(className)) {
-      return "java.lang.Character";
-    } else if ("byte".equals(className)) {
-      return "java.lang.Byte";
-    } else if ("short".equals(className)) {
-      return "java.lang.Short";
-    } else if ("int".equals(className)) {
-      return "java.lang.Integer";
-    } else if ("long".equals(className)) {
-      return "java.lang.Long";
-    } else if ("float".equals(className)) {
-      return "java.lang.Float";
-    } else if ("double".equals(className)) {
-      return "java.lang.Double";
-    }
-    return className;
-  }
+	public static String convertPrimitiveType(String className) {
+		if ("boolean".equals(className)) {
+			return "java.lang.Boolean";
+		} else if ("char".equals(className)) {
+			return "java.lang.Character";
+		} else if ("byte".equals(className)) {
+			return "java.lang.Byte";
+		} else if ("short".equals(className)) {
+			return "java.lang.Short";
+		} else if ("int".equals(className)) {
+			return "java.lang.Integer";
+		} else if ("long".equals(className)) {
+			return "java.lang.Long";
+		} else if ("float".equals(className)) {
+			return "java.lang.Float";
+		} else if ("double".equals(className)) {
+			return "java.lang.Double";
+		}
+		return className;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // String
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static String getTypesSource(IGenericType... types) {
-    StringBuffer line = new StringBuffer();
-    line.append("<");
-    for (int i = 0; i < types.length; i++) {
-      if (i > 0) {
-        line.append(", ");
-      }
-      line.append(types[i].getFullTypeName());
-    }
-    line.append(">");
-    return line.toString();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// String
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static String getTypesSource(IGenericType... types) {
+		StringBuffer line = new StringBuffer();
+		line.append("<");
+		for (int i = 0; i < types.length; i++) {
+			if (i > 0) {
+				line.append(", ");
+			}
+			line.append(types[i].getFullTypeName());
+		}
+		line.append(">");
+		return line.toString();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Assert
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static void assertEquals(IGenericType expected, IGenericType actual) {
-    if (DatabindingParser.useGenerics
-        && !expected.getFullTypeName().equals(actual.getFullTypeName())) {
-      Class<?> actualClass = actual.getRawType();
-      Class<?> expectedClass = expected.getRawType();
-      if (actualClass != null
-          && expectedClass != null
-          && actualClass.isAssignableFrom(expectedClass)) {
-        return;
-      }
-      //
-      Assert.fail(MessageFormat.format(
-          "Generic: {0} expected, but {1} found",
-          expected.getFullTypeName(),
-          actual.getFullTypeName()));
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Assert
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static void assertEquals(IGenericType expected, IGenericType actual) {
+		if (DatabindingParser.useGenerics
+				&& !expected.getFullTypeName().equals(actual.getFullTypeName())) {
+			Class<?> actualClass = actual.getRawType();
+			Class<?> expectedClass = expected.getRawType();
+			if (actualClass != null
+					&& expectedClass != null
+					&& actualClass.isAssignableFrom(expectedClass)) {
+				return;
+			}
+			//
+			Assert.fail(MessageFormat.format(
+					"Generic: {0} expected, but {1} found",
+					expected.getFullTypeName(),
+					actual.getFullTypeName()));
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/generic/IGenericType.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/generic/IGenericType.java
index 2ccd2c0e1..e25521329 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/generic/IGenericType.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/generic/IGenericType.java
@@ -19,33 +19,33 @@
  * @coverage bindings.swing.model.generic
  */
 public interface IGenericType {
-  /**
-   * @return {@link Class} for this object.
-   */
-  Class<?> getRawType();
+	/**
+	 * @return {@link Class} for this object.
+	 */
+	Class<?> getRawType();
 
-  /**
-   * @return the class full name with all generic parameters.
-   */
-  String getFullTypeName();
+	/**
+	 * @return the class full name with all generic parameters.
+	 */
+	String getFullTypeName();
 
-  /**
-   * @return the class name without the package name.
-   */
-  String getSimpleTypeName();
+	/**
+	 * @return the class name without the package name.
+	 */
+	String getSimpleTypeName();
 
-  /**
-   * @return the list of {@link IGenericType} sub generic information models.
-   */
-  List<IGenericType> getSubTypes();
+	/**
+	 * @return the list of {@link IGenericType} sub generic information models.
+	 */
+	List<IGenericType> getSubTypes();
 
-  /**
-   * @return {@link IGenericType} sub generic information model for given index.
-   */
-  IGenericType getSubType(int index);
+	/**
+	 * @return {@link IGenericType} sub generic information model for given index.
+	 */
+	IGenericType getSubType(int index);
 
-  /**
-   * @return <code>true</code> if this model not contains sub generic information models.
-   */
-  boolean isEmpty();
+	/**
+	 * @return <code>true</code> if this model not contains sub generic information models.
+	 */
+	boolean isEmpty();
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/properties/BeanPropertyInfo.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/properties/BeanPropertyInfo.java
index b662587a3..35b071d96 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/properties/BeanPropertyInfo.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/properties/BeanPropertyInfo.java
@@ -32,181 +32,181 @@
  * @coverage bindings.swing.model.properties
  */
 public final class BeanPropertyInfo extends PropertyInfo {
-  private final PropertyInfo m_baseProperty;
-  private String m_path;
-  private String[] m_properties;
+	private final PropertyInfo m_baseProperty;
+	private String m_path;
+	private String[] m_properties;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public BeanPropertyInfo(IGenericType sourceObjectType,
-      IGenericType valueType,
-      PropertyInfo baseProperty,
-      String path) {
-    super(sourceObjectType, valueType);
-    m_baseProperty = baseProperty;
-    setPath(path);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public BeanPropertyInfo(IGenericType sourceObjectType,
+			IGenericType valueType,
+			PropertyInfo baseProperty,
+			String path) {
+		super(sourceObjectType, valueType);
+		m_baseProperty = baseProperty;
+		setPath(path);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public String getPath() {
-    return m_path;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public String getPath() {
+		return m_path;
+	}
 
-  public void setPath(String path) {
-    Assert.isNotNull(path);
-    m_path = path;
-    m_properties = StringUtils.split(m_path, '.');
-  }
+	public void setPath(String path) {
+		Assert.isNotNull(path);
+		m_path = path;
+		m_properties = StringUtils.split(m_path, '.');
+	}
 
-  @Override
-  public ObserveInfo getObserveProperty(ObserveInfo observeObject) throws Exception {
-    // configure observe object account with base property
-    if (m_baseProperty != null) {
-      Assert.instanceOf(BeanPropertyInfo.class, m_baseProperty);
-      observeObject = m_baseProperty.getObserveProperty(observeObject);
-      if (observeObject == null) {
-        return null;
-      }
-    }
-    // find property
-    for (String property : m_properties) {
-      boolean found = false;
-      for (ObserveInfo observeProperty : CoreUtils.<ObserveInfo>cast(observeObject.getChildren(ChildrenContext.ChildrenForPropertiesTable))) {
-        if (observeProperty.isRepresentedBy(property)) {
-          observeObject = observeProperty;
-          found = true;
-          break;
-        }
-      }
-      if (!found) {
-        return null;
-      }
-    }
-    return observeObject;
-  }
+	@Override
+	public ObserveInfo getObserveProperty(ObserveInfo observeObject) throws Exception {
+		// configure observe object account with base property
+		if (m_baseProperty != null) {
+			Assert.instanceOf(BeanPropertyInfo.class, m_baseProperty);
+			observeObject = m_baseProperty.getObserveProperty(observeObject);
+			if (observeObject == null) {
+				return null;
+			}
+		}
+		// find property
+		for (String property : m_properties) {
+			boolean found = false;
+			for (ObserveInfo observeProperty : CoreUtils.<ObserveInfo>cast(observeObject.getChildren(ChildrenContext.ChildrenForPropertiesTable))) {
+				if (observeProperty.isRepresentedBy(property)) {
+					observeObject = observeProperty;
+					found = true;
+					break;
+				}
+			}
+			if (!found) {
+				return null;
+			}
+		}
+		return observeObject;
+	}
 
-  @Override
-  public boolean canShared(PropertyInfo property) {
-    if (property instanceof BeanPropertyInfo) {
-      // check generic types
-      if (DatabindingParser.useGenerics) {
-        if (!m_sourceObjectType.getFullTypeName().equals(
-            property.getSourceObjectType().getFullTypeName())) {
-          return false;
-        }
-        if (!m_valueType.getFullTypeName().equals(property.getValueType().getFullTypeName())) {
-          return false;
-        }
-      }
-      // check path
-      BeanPropertyInfo beanProperty = (BeanPropertyInfo) property;
-      if (!m_path.equals(beanProperty.getPath())) {
-        return false;
-      }
-      // check base property
-      if (m_baseProperty != null
-          && beanProperty.m_baseProperty == null
-          || m_baseProperty == null
-          && beanProperty.m_baseProperty != null) {
-        return false;
-      }
-      if (m_baseProperty != null && beanProperty.m_baseProperty != null) {
-        return m_baseProperty.canShared(beanProperty.m_baseProperty);
-      }
-      // shared
-      return true;
-    }
-    return false;
-  }
+	@Override
+	public boolean canShared(PropertyInfo property) {
+		if (property instanceof BeanPropertyInfo) {
+			// check generic types
+			if (DatabindingParser.useGenerics) {
+				if (!m_sourceObjectType.getFullTypeName().equals(
+						property.getSourceObjectType().getFullTypeName())) {
+					return false;
+				}
+				if (!m_valueType.getFullTypeName().equals(property.getValueType().getFullTypeName())) {
+					return false;
+				}
+			}
+			// check path
+			BeanPropertyInfo beanProperty = (BeanPropertyInfo) property;
+			if (!m_path.equals(beanProperty.getPath())) {
+				return false;
+			}
+			// check base property
+			if (m_baseProperty != null
+					&& beanProperty.m_baseProperty == null
+					|| m_baseProperty == null
+					&& beanProperty.m_baseProperty != null) {
+				return false;
+			}
+			if (m_baseProperty != null && beanProperty.m_baseProperty != null) {
+				return m_baseProperty.canShared(beanProperty.m_baseProperty);
+			}
+			// shared
+			return true;
+		}
+		return false;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void addSourceCode(List<String> lines, CodeGenerationSupport generationSupport)
-      throws Exception {
-    // configure variable
-    if (getVariableIdentifier() == null) {
-      setVariableIdentifier(generationSupport.generateLocalName(
-          m_sourceObjectType.getSimpleTypeName(),
-          "BeanProperty"));
-    }
-    // handle base property
-    String base = "";
-    if (m_baseProperty != null) {
-      generationSupport.addSourceCode(m_baseProperty, lines);
-      base = m_baseProperty.getVariableIdentifier() + ", ";
-    }
-    // add source code
-    if (generationSupport.useGenerics()) {
-      lines.add("org.jdesktop.beansbinding.BeanProperty"
-          + GenericUtils.getTypesSource(m_sourceObjectType, m_valueType)
-          + " "
-          + getVariableIdentifier()
-          + " = org.jdesktop.beansbinding.BeanProperty.create("
-          + base
-          + "\""
-          + m_path
-          + "\");");
-    } else {
-      lines.add("org.jdesktop.beansbinding.Property "
-          + getVariableIdentifier()
-          + " = org.jdesktop.beansbinding.BeanProperty.create("
-          + base
-          + "\""
-          + m_path
-          + "\");");
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void addSourceCode(List<String> lines, CodeGenerationSupport generationSupport)
+			throws Exception {
+		// configure variable
+		if (getVariableIdentifier() == null) {
+			setVariableIdentifier(generationSupport.generateLocalName(
+					m_sourceObjectType.getSimpleTypeName(),
+					"BeanProperty"));
+		}
+		// handle base property
+		String base = "";
+		if (m_baseProperty != null) {
+			generationSupport.addSourceCode(m_baseProperty, lines);
+			base = m_baseProperty.getVariableIdentifier() + ", ";
+		}
+		// add source code
+		if (generationSupport.useGenerics()) {
+			lines.add("org.jdesktop.beansbinding.BeanProperty"
+					+ GenericUtils.getTypesSource(m_sourceObjectType, m_valueType)
+					+ " "
+					+ getVariableIdentifier()
+					+ " = org.jdesktop.beansbinding.BeanProperty.create("
+					+ base
+					+ "\""
+					+ m_path
+					+ "\");");
+		} else {
+			lines.add("org.jdesktop.beansbinding.Property "
+					+ getVariableIdentifier()
+					+ " = org.jdesktop.beansbinding.BeanProperty.create("
+					+ base
+					+ "\""
+					+ m_path
+					+ "\");");
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Visiting
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void accept(AstObjectInfoVisitor visitor) throws Exception {
-    super.accept(visitor);
-    if (m_baseProperty != null) {
-      m_baseProperty.accept(visitor);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Visiting
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void accept(AstObjectInfoVisitor visitor) throws Exception {
+		super.accept(visitor);
+		if (m_baseProperty != null) {
+			m_baseProperty.accept(visitor);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getPresentationText(IObserveInfo observeObject,
-      IObserveInfo observeProperty,
-      boolean full) throws Exception {
-    if (full && observeObject == null && observeProperty == null) {
-      String presentationText = "";
-      if (m_baseProperty != null) {
-        presentationText = m_baseProperty.getPresentationText(null, null, true) + ".";
-      }
-      return presentationText + m_path;
-    }
-    if (full && m_path.length() > 0) {
-      String basePresentationText = "";
-      if (m_baseProperty != null) {
-        basePresentationText = m_baseProperty.getPresentationText(null, null, true) + ".";
-      }
-      return observeObject.getPresentation().getTextForBinding()
-          + "."
-          + basePresentationText
-          + m_path;
-    }
-    return super.getPresentationText(observeObject, observeProperty, full);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getPresentationText(IObserveInfo observeObject,
+			IObserveInfo observeProperty,
+			boolean full) throws Exception {
+		if (full && observeObject == null && observeProperty == null) {
+			String presentationText = "";
+			if (m_baseProperty != null) {
+				presentationText = m_baseProperty.getPresentationText(null, null, true) + ".";
+			}
+			return presentationText + m_path;
+		}
+		if (full && m_path.length() > 0) {
+			String basePresentationText = "";
+			if (m_baseProperty != null) {
+				basePresentationText = m_baseProperty.getPresentationText(null, null, true) + ".";
+			}
+			return observeObject.getPresentation().getTextForBinding()
+					+ "."
+					+ basePresentationText
+					+ m_path;
+		}
+		return super.getPresentationText(observeObject, observeProperty, full);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/properties/ElPropertyInfo.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/properties/ElPropertyInfo.java
index 88331caba..4cc720afd 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/properties/ElPropertyInfo.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/properties/ElPropertyInfo.java
@@ -32,132 +32,132 @@
  * @coverage bindings.swing.model.properties
  */
 public final class ElPropertyInfo extends PropertyInfo {
-  private final PropertyInfo m_baseProperty;
-  private String m_expression;
+	private final PropertyInfo m_baseProperty;
+	private String m_expression;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ElPropertyInfo(IGenericType sourceObjectType,
-      IGenericType valueType,
-      PropertyInfo baseProperty,
-      String expression) {
-    super(sourceObjectType, valueType);
-    m_baseProperty = baseProperty;
-    setExpression(expression);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ElPropertyInfo(IGenericType sourceObjectType,
+			IGenericType valueType,
+			PropertyInfo baseProperty,
+			String expression) {
+		super(sourceObjectType, valueType);
+		m_baseProperty = baseProperty;
+		setExpression(expression);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public String getExpression() {
-    return StringEscapeUtils.unescapeJava(m_expression);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public String getExpression() {
+		return StringEscapeUtils.unescapeJava(m_expression);
+	}
 
-  public void setExpression(String expression) {
-    Assert.isNotNull(expression);
-    m_expression = StringUtilities.escapeJava(expression);
-  }
+	public void setExpression(String expression) {
+		Assert.isNotNull(expression);
+		m_expression = StringUtilities.escapeJava(expression);
+	}
 
-  public PropertyInfo getBaseProperty() {
-    return m_baseProperty;
-  }
+	public PropertyInfo getBaseProperty() {
+		return m_baseProperty;
+	}
 
-  @Override
-  public ObserveInfo getObserveProperty(ObserveInfo observeObject) throws Exception {
-    // configure observe object account with base property
-    if (m_baseProperty != null) {
-      Assert.instanceOf(BeanPropertyInfo.class, m_baseProperty);
-      observeObject = m_baseProperty.getObserveProperty(observeObject);
-    }
-    // find property
-    for (IObserveInfo observeProperty : observeObject.getChildren(ChildrenContext.ChildrenForPropertiesTable)) {
-      if (observeProperty instanceof ElPropertyObserveInfo) {
-        return (ObserveInfo) observeProperty;
-      }
-    }
-    return null;
-  }
+	@Override
+	public ObserveInfo getObserveProperty(ObserveInfo observeObject) throws Exception {
+		// configure observe object account with base property
+		if (m_baseProperty != null) {
+			Assert.instanceOf(BeanPropertyInfo.class, m_baseProperty);
+			observeObject = m_baseProperty.getObserveProperty(observeObject);
+		}
+		// find property
+		for (IObserveInfo observeProperty : observeObject.getChildren(ChildrenContext.ChildrenForPropertiesTable)) {
+			if (observeProperty instanceof ElPropertyObserveInfo) {
+				return (ObserveInfo) observeProperty;
+			}
+		}
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void addSourceCode(List<String> lines, CodeGenerationSupport generationSupport)
-      throws Exception {
-    // configure variable
-    if (getVariableIdentifier() == null) {
-      setVariableIdentifier(generationSupport.generateLocalName(
-          m_sourceObjectType.getSimpleTypeName(),
-          "EvalutionProperty"));
-    }
-    // handle base property
-    String base = "";
-    if (m_baseProperty != null) {
-      generationSupport.addSourceCode(m_baseProperty, lines);
-      base = m_baseProperty.getVariableIdentifier() + ", ";
-    }
-    // add source code
-    if (generationSupport.useGenerics()) {
-      lines.add("org.jdesktop.beansbinding.ELProperty"
-          + GenericUtils.getTypesSource(m_sourceObjectType, m_valueType)
-          + " "
-          + getVariableIdentifier()
-          + " = org.jdesktop.beansbinding.ELProperty.create("
-          + base
-          + "\""
-          + m_expression
-          + "\");");
-    } else {
-      lines.add("org.jdesktop.beansbinding.Property "
-          + getVariableIdentifier()
-          + " = org.jdesktop.beansbinding.ELProperty.create("
-          + base
-          + "\""
-          + m_expression
-          + "\");");
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void addSourceCode(List<String> lines, CodeGenerationSupport generationSupport)
+			throws Exception {
+		// configure variable
+		if (getVariableIdentifier() == null) {
+			setVariableIdentifier(generationSupport.generateLocalName(
+					m_sourceObjectType.getSimpleTypeName(),
+					"EvalutionProperty"));
+		}
+		// handle base property
+		String base = "";
+		if (m_baseProperty != null) {
+			generationSupport.addSourceCode(m_baseProperty, lines);
+			base = m_baseProperty.getVariableIdentifier() + ", ";
+		}
+		// add source code
+		if (generationSupport.useGenerics()) {
+			lines.add("org.jdesktop.beansbinding.ELProperty"
+					+ GenericUtils.getTypesSource(m_sourceObjectType, m_valueType)
+					+ " "
+					+ getVariableIdentifier()
+					+ " = org.jdesktop.beansbinding.ELProperty.create("
+					+ base
+					+ "\""
+					+ m_expression
+					+ "\");");
+		} else {
+			lines.add("org.jdesktop.beansbinding.Property "
+					+ getVariableIdentifier()
+					+ " = org.jdesktop.beansbinding.ELProperty.create("
+					+ base
+					+ "\""
+					+ m_expression
+					+ "\");");
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Visiting
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void accept(AstObjectInfoVisitor visitor) throws Exception {
-    super.accept(visitor);
-    if (m_baseProperty != null) {
-      m_baseProperty.accept(visitor);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Visiting
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void accept(AstObjectInfoVisitor visitor) throws Exception {
+		super.accept(visitor);
+		if (m_baseProperty != null) {
+			m_baseProperty.accept(visitor);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getPresentationText(IObserveInfo observeObject,
-      IObserveInfo observeProperty,
-      boolean full) throws Exception {
-    if (full && m_expression.length() > 0) {
-      String basePresentationText = "";
-      if (m_baseProperty != null) {
-        basePresentationText = m_baseProperty.getPresentationText(null, null, true) + ".";
-      }
-      return observeObject.getPresentation().getTextForBinding()
-          + ".["
-          + basePresentationText
-          + m_expression
-          + "]";
-    }
-    return super.getPresentationText(observeObject, observeProperty, full);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getPresentationText(IObserveInfo observeObject,
+			IObserveInfo observeProperty,
+			boolean full) throws Exception {
+		if (full && m_expression.length() > 0) {
+			String basePresentationText = "";
+			if (m_baseProperty != null) {
+				basePresentationText = m_baseProperty.getPresentationText(null, null, true) + ".";
+			}
+			return observeObject.getPresentation().getTextForBinding()
+					+ ".["
+					+ basePresentationText
+					+ m_expression
+					+ "]";
+		}
+		return super.getPresentationText(observeObject, observeProperty, full);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/properties/ObjectPropertyInfo.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/properties/ObjectPropertyInfo.java
index 6f3b7eb34..f633d7087 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/properties/ObjectPropertyInfo.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/properties/ObjectPropertyInfo.java
@@ -28,75 +28,75 @@
  * @coverage bindings.swing.model.properties
  */
 public final class ObjectPropertyInfo extends PropertyInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ObjectPropertyInfo(IGenericType sourceObjectType) {
-    super(sourceObjectType, sourceObjectType);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ObjectPropertyInfo(IGenericType sourceObjectType) {
+		super(sourceObjectType, sourceObjectType);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public ObserveInfo getObserveProperty(ObserveInfo observeObject) throws Exception {
-    for (IObserveInfo observe : observeObject.getChildren(ChildrenContext.ChildrenForPropertiesTable)) {
-      if (observe instanceof ObjectPropertyObserveInfo) {
-        return (ObserveInfo) observe;
-      }
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public ObserveInfo getObserveProperty(ObserveInfo observeObject) throws Exception {
+		for (IObserveInfo observe : observeObject.getChildren(ChildrenContext.ChildrenForPropertiesTable)) {
+			if (observe instanceof ObjectPropertyObserveInfo) {
+				return (ObserveInfo) observe;
+			}
+		}
+		return null;
+	}
 
-  @Override
-  public boolean canShared(PropertyInfo property) {
-    if (property instanceof ObjectPropertyInfo) {
-      return !DatabindingParser.useGenerics
-          || m_sourceObjectType.getFullTypeName().equals(
-              property.getSourceObjectType().getFullTypeName());
-    }
-    return false;
-  }
+	@Override
+	public boolean canShared(PropertyInfo property) {
+		if (property instanceof ObjectPropertyInfo) {
+			return !DatabindingParser.useGenerics
+					|| m_sourceObjectType.getFullTypeName().equals(
+							property.getSourceObjectType().getFullTypeName());
+		}
+		return false;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void addSourceCode(List<String> lines, CodeGenerationSupport generationSupport)
-      throws Exception {
-    if (getVariableIdentifier() == null) {
-      setVariableIdentifier(generationSupport.generateLocalName(
-          m_sourceObjectType.getSimpleTypeName(),
-          "ObjectProperty"));
-    }
-    if (generationSupport.useGenerics()) {
-      lines.add("org.jdesktop.beansbinding.ObjectProperty"
-          + GenericUtils.getTypesSource(m_sourceObjectType)
-          + " "
-          + getVariableIdentifier()
-          + " = org.jdesktop.beansbinding.ObjectProperty.create();");
-    } else {
-      lines.add("org.jdesktop.beansbinding.Property "
-          + getVariableIdentifier()
-          + " = org.jdesktop.beansbinding.ObjectProperty.create();");
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void addSourceCode(List<String> lines, CodeGenerationSupport generationSupport)
+			throws Exception {
+		if (getVariableIdentifier() == null) {
+			setVariableIdentifier(generationSupport.generateLocalName(
+					m_sourceObjectType.getSimpleTypeName(),
+					"ObjectProperty"));
+		}
+		if (generationSupport.useGenerics()) {
+			lines.add("org.jdesktop.beansbinding.ObjectProperty"
+					+ GenericUtils.getTypesSource(m_sourceObjectType)
+					+ " "
+					+ getVariableIdentifier()
+					+ " = org.jdesktop.beansbinding.ObjectProperty.create();");
+		} else {
+			lines.add("org.jdesktop.beansbinding.Property "
+					+ getVariableIdentifier()
+					+ " = org.jdesktop.beansbinding.ObjectProperty.create();");
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getPresentationText(IObserveInfo observeObject,
-      IObserveInfo observeProperty,
-      boolean full) throws Exception {
-    return observeObject.getPresentation().getTextForBinding();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getPresentationText(IObserveInfo observeObject,
+			IObserveInfo observeProperty,
+			boolean full) throws Exception {
+		return observeObject.getPresentation().getTextForBinding();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/properties/PropertyInfo.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/properties/PropertyInfo.java
index 7addb57cf..794cc59d8 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/properties/PropertyInfo.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/model/properties/PropertyInfo.java
@@ -23,56 +23,56 @@
  * @coverage bindings.swing.model.properties
  */
 public abstract class PropertyInfo extends AstObjectInfo {
-  protected final IGenericType m_sourceObjectType;
-  protected IGenericType m_valueType;
+	protected final IGenericType m_sourceObjectType;
+	protected IGenericType m_valueType;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public PropertyInfo(IGenericType sourceObjectType, IGenericType valueType) {
-    m_sourceObjectType = sourceObjectType;
-    m_valueType = valueType;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public PropertyInfo(IGenericType sourceObjectType, IGenericType valueType) {
+		m_sourceObjectType = sourceObjectType;
+		m_valueType = valueType;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public boolean canShared(PropertyInfo property) {
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public boolean canShared(PropertyInfo property) {
+		return false;
+	}
 
-  public final IGenericType getSourceObjectType() {
-    return m_sourceObjectType;
-  }
+	public final IGenericType getSourceObjectType() {
+		return m_sourceObjectType;
+	}
 
-  public final IGenericType getValueType() {
-    return m_valueType;
-  }
+	public final IGenericType getValueType() {
+		return m_valueType;
+	}
 
-  public final void setValueType(IGenericType valueType) {
-    m_valueType = valueType;
-  }
+	public final void setValueType(IGenericType valueType) {
+		m_valueType = valueType;
+	}
 
-  /**
-   * XXX
-   */
-  public abstract ObserveInfo getObserveProperty(ObserveInfo observeObject) throws Exception;
+	/**
+	 * XXX
+	 */
+	public abstract ObserveInfo getObserveProperty(ObserveInfo observeObject) throws Exception;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the text for visual presentation of this object.
-   */
-  public String getPresentationText(IObserveInfo observeObject,
-      IObserveInfo observeProperty,
-      boolean full) throws Exception {
-    return UiUtils.getPresentationText(observeObject, observeProperty);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the text for visual presentation of this object.
+	 */
+	public String getPresentationText(IObserveInfo observeObject,
+			IObserveInfo observeProperty,
+			boolean full) throws Exception {
+		return UiUtils.getPresentationText(observeObject, observeProperty);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/parser/DatabindingParser.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/parser/DatabindingParser.java
index 0fadf7fef..8208a9792 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/parser/DatabindingParser.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/parser/DatabindingParser.java
@@ -33,68 +33,68 @@
  * @coverage bindings.swing.parser
  */
 public final class DatabindingParser extends AbstractParser {
-  public static boolean useGenerics;
+	public static boolean useGenerics;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parse
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static void parse(DatabindingsProvider provider) throws Exception {
-    new DatabindingParser(provider.getJavaInfoRoot(), provider);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parse
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static void parse(DatabindingsProvider provider) throws Exception {
+		new DatabindingParser(provider.getJavaInfoRoot(), provider);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @SuppressWarnings("unchecked")
-  private DatabindingParser(JavaInfo root, DatabindingsProvider provider) throws Exception {
-    super(root.getEditor(), provider);
-    useGenerics = CoreUtils.useGenerics(m_editor.getJavaProject());
-    // prepare root node
-    TypeDeclaration rootNode = JavaInfoUtils.getTypeDeclaration(root);
-    // prepare parsers
-    for (ObserveTypeContainer container : provider.getContainers()) {
-      container.createObservables(root, this, m_editor, rootNode);
-      m_subParsers.add(container);
-    }
-    //
-    DataBindingsRootInfo rootInfo = provider.getRootInfo();
-    m_subParsers.add(rootInfo);
-    if (rootNode != null) {
-      // find method initDataBindings()
-      MethodDeclaration initDataBindings =
-          AstNodeUtils.getMethodBySignature(
-              rootNode,
-              DataBindingsRootInfo.INIT_DATA_BINDINGS_METHOD_NAME + "()");
-      if (initDataBindings != null) {
-        rootInfo.setInitDataBindings(initDataBindings);
-        // parse virtual bindings
-        Object[] virtualBindingsData =
-            VirtualParser.getBindings(m_editor, provider, initDataBindings);
-        // parse method initDataBindings()
-        parseMethod(initDataBindings);
-        //
-        List<BindingInfo> bindings = rootInfo.getBindings();
-        // after parsing post processing for all bindings
-        for (int i = 0; i < bindings.size(); i++) {
-          bindings.get(i).create(bindings);
-        }
-        // add virtual bindings
-        List<Integer> indexes = (List<Integer>) virtualBindingsData[0];
-        List<BindingInfo> virtualBindings = (List<BindingInfo>) virtualBindingsData[1];
-        int virtualSize = virtualBindings.size();
-        //
-        for (int i = 0; i < virtualSize; i++) {
-          int index = indexes.get(i);
-          if (index < 0 || index >= bindings.size()) {
-            index = 0;
-          }
-          bindings.add(index, virtualBindings.get(i));
-        }
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@SuppressWarnings("unchecked")
+	private DatabindingParser(JavaInfo root, DatabindingsProvider provider) throws Exception {
+		super(root.getEditor(), provider);
+		useGenerics = CoreUtils.useGenerics(m_editor.getJavaProject());
+		// prepare root node
+		TypeDeclaration rootNode = JavaInfoUtils.getTypeDeclaration(root);
+		// prepare parsers
+		for (ObserveTypeContainer container : provider.getContainers()) {
+			container.createObservables(root, this, m_editor, rootNode);
+			m_subParsers.add(container);
+		}
+		//
+		DataBindingsRootInfo rootInfo = provider.getRootInfo();
+		m_subParsers.add(rootInfo);
+		if (rootNode != null) {
+			// find method initDataBindings()
+			MethodDeclaration initDataBindings =
+					AstNodeUtils.getMethodBySignature(
+							rootNode,
+							DataBindingsRootInfo.INIT_DATA_BINDINGS_METHOD_NAME + "()");
+			if (initDataBindings != null) {
+				rootInfo.setInitDataBindings(initDataBindings);
+				// parse virtual bindings
+				Object[] virtualBindingsData =
+						VirtualParser.getBindings(m_editor, provider, initDataBindings);
+				// parse method initDataBindings()
+				parseMethod(initDataBindings);
+				//
+				List<BindingInfo> bindings = rootInfo.getBindings();
+				// after parsing post processing for all bindings
+				for (int i = 0; i < bindings.size(); i++) {
+					bindings.get(i).create(bindings);
+				}
+				// add virtual bindings
+				List<Integer> indexes = (List<Integer>) virtualBindingsData[0];
+				List<BindingInfo> virtualBindings = (List<BindingInfo>) virtualBindingsData[1];
+				int virtualSize = virtualBindings.size();
+				//
+				for (int i = 0; i < virtualSize; i++) {
+					int index = indexes.get(i);
+					if (index < 0 || index >= bindings.size()) {
+						index = 0;
+					}
+					bindings.add(index, virtualBindings.get(i));
+				}
+			}
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/BindingNameUiContentProvider.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/BindingNameUiContentProvider.java
index 62bf5198b..12a83e8be 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/BindingNameUiContentProvider.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/BindingNameUiContentProvider.java
@@ -23,40 +23,40 @@
  * @coverage bindings.swing.ui
  */
 public class BindingNameUiContentProvider extends DialogFieldUiContentProvider {
-  private final BindingInfo m_binding;
-  private final StringDialogField m_dialogField;
+	private final BindingInfo m_binding;
+	private final StringDialogField m_dialogField;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public BindingNameUiContentProvider(BindingInfo binding) {
-    m_binding = binding;
-    m_dialogField = new StringDialogField();
-    m_dialogField.setLabelText(Messages.BindingNameUiContentProvider_label);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public BindingNameUiContentProvider(BindingInfo binding) {
+		m_binding = binding;
+		m_dialogField = new StringDialogField();
+		m_dialogField.setLabelText(Messages.BindingNameUiContentProvider_label);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // DialogFieldUIContentProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public DialogField getDialogField() {
-    return m_dialogField;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// DialogFieldUIContentProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public DialogField getDialogField() {
+		return m_dialogField;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Update
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void updateFromObject() throws Exception {
-    m_dialogField.setText(m_binding.getName());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Update
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void updateFromObject() throws Exception {
+		m_dialogField.setText(m_binding.getName());
+	}
 
-  public void saveToObject() throws Exception {
-    m_binding.setName(m_dialogField.getText());
-  }
+	public void saveToObject() throws Exception {
+		m_binding.setName(m_dialogField.getText());
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/ChooseClassAndPropertiesConfiguration.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/ChooseClassAndPropertiesConfiguration.java
index c7b9aa348..ff83940b8 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/ChooseClassAndPropertiesConfiguration.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/ChooseClassAndPropertiesConfiguration.java
@@ -17,20 +17,20 @@
  * @coverage bindings.swing.ui
  */
 public class ChooseClassAndPropertiesConfiguration
-    extends
-      org.eclipse.wb.internal.core.databinding.ui.editor.contentproviders.ChooseClassAndPropertiesConfiguration {
-  private boolean m_workWithELProperty = true;
+extends
+org.eclipse.wb.internal.core.databinding.ui.editor.contentproviders.ChooseClassAndPropertiesConfiguration {
+	private boolean m_workWithELProperty = true;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ELProperty
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public boolean isWorkWithELProperty() {
-    return m_workWithELProperty;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ELProperty
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public boolean isWorkWithELProperty() {
+		return m_workWithELProperty;
+	}
 
-  public void setWorkWithELProperty(boolean workWithElProperty) {
-    m_workWithELProperty = workWithElProperty;
-  }
+	public void setWorkWithELProperty(boolean workWithElProperty) {
+		m_workWithELProperty = workWithElProperty;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/ChooseClassAndPropertiesUiContentProvider.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/ChooseClassAndPropertiesUiContentProvider.java
index 658dbd0bf..5d8b17a7a 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/ChooseClassAndPropertiesUiContentProvider.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/ChooseClassAndPropertiesUiContentProvider.java
@@ -60,424 +60,424 @@
  * @coverage bindings.swing.ui
  */
 public abstract class ChooseClassAndPropertiesUiContentProvider
-    extends
-      org.eclipse.wb.internal.core.databinding.ui.editor.contentproviders.ChooseClassAndPropertiesUiContentProvider {
-  private CheckboxTreeViewer m_treeViewer;
-  private ElPropertyUiContentProvider m_elPropertyUIContentProvider;
-  private boolean m_elProperty;
-  private final ChooseClassAndPropertiesConfiguration m_configuration;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ChooseClassAndPropertiesUiContentProvider(ChooseClassAndPropertiesConfiguration configuration) {
-    super(configuration);
-    m_configuration = configuration;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void createContent(Composite parent, int columns) {
-    super.createContent(parent, columns);
-    //
-    if (m_configuration.isWorkWithELProperty()) {
-      ElPropertyUiConfiguration configuration = new ElPropertyUiConfiguration();
-      configuration.setTitle(Messages.ChooseClassAndPropertiesUiContentProvider_title);
-      m_elPropertyUIContentProvider = new ElPropertyUiContentProvider(configuration, null);
-      m_elPropertyUIContentProvider.setCompleteListener(new ICompleteListener() {
-        public void calculateFinish() {
-          calculateSubFinish();
-        }
-      });
-      m_elPropertyUIContentProvider.createContent(parent, columns);
-      //
-      m_treeViewer.addCheckStateListener(new ICheckStateListener() {
-        public void checkStateChanged(CheckStateChangedEvent event) {
-          handleELProperty();
-        }
-      });
-    }
-  }
-
-  @Override
-  protected ICheckboxViewerWrapper createPropertiesViewer(Composite parent) {
-    m_treeViewer =
-        new CheckboxTreeViewer(parent, SWT.BORDER
-            | SWT.FULL_SELECTION
-            | SWT.H_SCROLL
-            | SWT.V_SCROLL);
-    m_treeViewer.setContentProvider(new PropertyAdapterContentProvider());
-    m_treeViewer.setLabelProvider(new PropertyAdapterLabelProvider(m_treeViewer));
-    return new CheckboxTreeViewerWrapper(m_treeViewer);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Handling
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void calculateFinish() {
-    super.calculateFinish();
-    if (getErrorMessage() == null && m_elProperty) {
-      setErrorMessage(m_elPropertyUIContentProvider.getErrorMessage());
-    }
-  }
-
-  private void calculateSubFinish() {
-    if (m_elProperty) {
-      setErrorMessage(m_elPropertyUIContentProvider.getErrorMessage());
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Properties
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void handleELProperty() {
-    try {
-      Object[] elements = m_treeViewer.getCheckedElements();
-      if (m_elProperty) {
-        if (elements.length == 1) {
-          ObservePropertyAdapter adapter = (ObservePropertyAdapter) elements[0];
-          if (adapter.getProperty() instanceof ElPropertyObserveInfo) {
-            m_elPropertyUIContentProvider.setProperty((ElPropertyInfo) convertAdapterToProperty(
-                new BeanSupport(),
-                m_choosenClass,
-                adapter));
-            return;
-          }
-        }
-        m_elProperty = false;
-        m_elPropertyUIContentProvider.setProperty(null);
-      } else if (elements.length == 1) {
-        ObservePropertyAdapter adapter = (ObservePropertyAdapter) elements[0];
-        if (adapter.getProperty() instanceof ElPropertyObserveInfo) {
-          m_elProperty = true;
-          m_elPropertyUIContentProvider.setProperty((ElPropertyInfo) convertAdapterToProperty(
-              new BeanSupport(),
-              m_choosenClass,
-              adapter));
-        }
-      }
-    } catch (Throwable e) {
-      DesignerPlugin.log(e);
-    }
-  }
-
-  @Override
-  protected List<PropertyAdapter> getProperties(Class<?> choosenClass) throws Exception {
-    List<PropertyAdapter> adapters = Lists.newArrayList();
-    BeanSupport beanSupport = new BeanSupport();
-    beanSupport.doAddELProperty(m_configuration.isWorkWithELProperty());
-    ClassGenericType objectType = new ClassGenericType(choosenClass, null, null);
-    for (ObserveInfo property : beanSupport.createProperties(null, objectType)) {
-      adapters.add(new ObservePropertyAdapter(null, property));
-    }
-    return adapters;
-  }
-
-  private PropertyInfo convertAdapterToProperty(BeanSupport beanSupport,
-      Class<?> objectClass,
-      ObservePropertyAdapter adapter) throws Exception {
-    ClassGenericType objectType = new ClassGenericType(objectClass, null, null);
-    ObserveInfo observe =
-        new SubBeanObserveInfo(beanSupport, null, objectType, StringReferenceProvider.EMPTY);
-    return adapter.getProperty().createProperty(observe);
-  }
-
-  private ObservePropertyAdapter convertPropertyToAdapter(BeanSupport beanSupport,
-      Class<?> objectClass,
-      PropertyInfo property) throws Exception {
-    ClassGenericType objectType = new ClassGenericType(objectClass, null, null);
-    ObserveInfo observe =
-        property.getObserveProperty(new SubBeanObserveInfo(beanSupport,
-            null,
-            objectType,
-            StringReferenceProvider.EMPTY));
-    Assert.isNotNull(observe);
-    return convertObserveToAdapter(observe);
-  }
-
-  private ObservePropertyAdapter convertObserveToAdapter(ObserveInfo observe) throws Exception {
-    if (observe != null) {
-      ObservePropertyAdapter adapter =
-          new ObservePropertyAdapter(convertObserveToAdapter((ObserveInfo) observe.getParent()),
-              observe);
-      adapter.addToParent();
-      return adapter;
-    }
-    return null;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Update
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected final void setClassNameAndProperty(String className, PropertyInfo property)
-      throws Exception {
-    setClassName(className);
-    if (m_configuration.isWorkWithELProperty()) {
-      m_elProperty = property instanceof ElPropertyInfo;
-      m_elPropertyUIContentProvider.setProperty(m_elProperty ? (ElPropertyInfo) property : null);
-    }
-    setCheckedAdExpand(new Object[]{convertPropertyToAdapter(
-        new BeanSupport(),
-        loadClass(className),
-        property)});
-    calculatePropertiesFinish();
-  }
-
-  protected final void setClassNameAndProperties0(String className, List<PropertyInfo> properties)
-      throws Exception {
-    setClassName(className);
-    BeanSupport beanSupport = new BeanSupport();
-    Class<?> objectClass = loadClass(className);
-    Object[] adapters = new Object[properties.size()];
-    for (int i = 0; i < adapters.length; i++) {
-      adapters[i] = convertPropertyToAdapter(beanSupport, objectClass, properties.get(i));
-    }
-    setCheckedAdExpand(adapters);
-    calculatePropertiesFinish();
-  }
-
-  private void setCheckedAdExpand(Object[] adapters) {
-    for (int i = 0; i < adapters.length; i++) {
-      m_treeViewer.expandToLevel(adapters[i], 0);
-    }
-    m_treeViewer.setCheckedElements(adapters);
-    if (adapters.length > 0) {
-      m_treeViewer.setSelection(new StructuredSelection(adapters[0]), true);
-    }
-  }
-
-  @Override
-  protected final void saveToObject(Class<?> choosenClass, List<PropertyAdapter> choosenAdapters)
-      throws Exception {
-    BeanSupport beanSupport = new BeanSupport();
-    List<PropertyInfo> choosenProperties = Lists.newArrayList();
-    if (m_elProperty) {
-      m_elPropertyUIContentProvider.saveToObject();
-      choosenProperties.add(m_elPropertyUIContentProvider.getProperty());
-    } else {
-      for (PropertyAdapter propertyAdapter : choosenAdapters) {
-        choosenProperties.add(convertAdapterToProperty(
-            beanSupport,
-            choosenClass,
-            (ObservePropertyAdapter) propertyAdapter));
-      }
-    }
-    saveToObject0(choosenClass, choosenProperties);
-  }
-
-  /**
-   * Invoke for save changes class and properties.
-   */
-  protected abstract void saveToObject0(Class<?> choosenClass, List<PropertyInfo> choosenProperties)
-      throws Exception;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Classes
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static class ObservePropertyAdapter extends PropertyAdapter {
-    private final ObservePropertyAdapter m_parent;
-    private final ObserveInfo m_property;
-    private List<ObservePropertyAdapter> m_children;
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public ObservePropertyAdapter(ObservePropertyAdapter parent, ObserveInfo property)
-        throws Exception {
-      super(property.getPresentation().getText(), property.getObjectClass());
-      m_parent = parent;
-      m_property = property;
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Access
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public ObservePropertyAdapter getParent() {
-      return m_parent;
-    }
-
-    public ObserveInfo getProperty() {
-      return m_property;
-    }
-
-    public List<ObservePropertyAdapter> getChildren() {
-      if (m_children == null) {
-        m_children = Lists.newArrayList();
-        List<ObserveInfo> properties =
-            CoreUtils.cast(m_property.getChildren(ChildrenContext.ChildrenForPropertiesTable));
-        for (ObserveInfo property : properties) {
-          try {
-            m_children.add(new ObservePropertyAdapter(this, property));
-          } catch (Throwable e) {
-            DesignerPlugin.log(e);
-          }
-        }
-      }
-      return m_children;
-    }
-
-    public void addToParent() {
-      if (m_parent != null) {
-        m_parent.m_children = Lists.newArrayList();
-        m_parent.m_children.add(this);
-      }
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Object
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public int hashCode() {
-      int parentHash = m_parent == null ? 1 : m_parent.hashCode();
-      return parentHash * super.hashCode();
-    }
-
-    @Override
-    public boolean equals(Object object) {
-      // self check
-      if (object == this) {
-        return true;
-      }
-      // compare with other adapter
-      if (object instanceof ObservePropertyAdapter) {
-        ObservePropertyAdapter adapter = (ObservePropertyAdapter) object;
-        if (m_parent == null && adapter.m_parent == null) {
-        } else if (m_parent != null
-            && adapter.m_parent == null
-            || m_parent == null
-            && adapter.m_parent != null) {
-          return false;
-        } else if (m_parent != null && adapter.m_parent != null) {
-          if (!m_parent.equals(adapter.m_parent)) {
-            return false;
-          }
-        }
-        return m_name.equals(adapter.m_name) && m_type == adapter.m_type;
-      }
-      // default
-      return false;
-    }
-  }
-  private static class PropertyAdapterContentProvider implements ITreeContentProvider {
-    public Object[] getElements(Object input) {
-      return ((List<?>) input).toArray();
-    }
-
-    public Object getParent(Object element) {
-      return getAdapter(element).getParent();
-    }
-
-    public boolean hasChildren(Object element) {
-      return !getAdapter(element).getChildren().isEmpty();
-    }
-
-    public Object[] getChildren(Object element) {
-      return getAdapter(element).getChildren().toArray();
-    }
-
-    public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
-    }
-
-    public void dispose() {
-    }
-  }
-  private static class PropertyAdapterLabelProvider extends LabelProvider
-      implements
-        IColorProvider,
-        IFontProvider {
-    private final ObserveDecoratingLabelProvider m_labelProvider;
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public PropertyAdapterLabelProvider(TreeViewer viewer) {
-      m_labelProvider = new ObserveDecoratingLabelProvider(viewer);
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // LabelProvider
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public void dispose() {
-      super.dispose();
-      m_labelProvider.dispose();
-    }
-
-    @Override
-    public String getText(Object element) {
-      return getAdapter(element).getName();
-    }
-
-    @Override
-    public Image getImage(Object element) {
-      try {
-        return getAdapterProperty(element).getPresentation().getImage();
-      } catch (Throwable e) {
-      }
-      return super.getImage(element);
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Decoration
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public Color getForeground(Object element) {
-      return m_labelProvider.getForeground(getAdapterProperty(element));
-    }
-
-    public Color getBackground(Object element) {
-      return m_labelProvider.getBackground(getAdapterProperty(element));
-    }
-
-    public Font getFont(Object element) {
-      return m_labelProvider.getFont(getAdapterProperty(element));
-    }
-  }
-
-  private static ObservePropertyAdapter getAdapter(Object element) {
-    return (ObservePropertyAdapter) element;
-  }
-
-  private static ObserveInfo getAdapterProperty(Object element) {
-    return getAdapter(element).getProperty();
-  }
-
-  private static class SubBeanObserveInfo extends BeanObserveInfo {
-    public SubBeanObserveInfo(BeanSupport beanSupport,
-        ObserveInfo parent,
-        IGenericType objectType,
-        IReferenceProvider referenceProvider) {
-      super(beanSupport, parent, objectType, referenceProvider);
-    }
-
-    public IObservePresentation getPresentation() {
-      return null;
-    }
-  }
+extends
+org.eclipse.wb.internal.core.databinding.ui.editor.contentproviders.ChooseClassAndPropertiesUiContentProvider {
+	private CheckboxTreeViewer m_treeViewer;
+	private ElPropertyUiContentProvider m_elPropertyUIContentProvider;
+	private boolean m_elProperty;
+	private final ChooseClassAndPropertiesConfiguration m_configuration;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ChooseClassAndPropertiesUiContentProvider(ChooseClassAndPropertiesConfiguration configuration) {
+		super(configuration);
+		m_configuration = configuration;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void createContent(Composite parent, int columns) {
+		super.createContent(parent, columns);
+		//
+		if (m_configuration.isWorkWithELProperty()) {
+			ElPropertyUiConfiguration configuration = new ElPropertyUiConfiguration();
+			configuration.setTitle(Messages.ChooseClassAndPropertiesUiContentProvider_title);
+			m_elPropertyUIContentProvider = new ElPropertyUiContentProvider(configuration, null);
+			m_elPropertyUIContentProvider.setCompleteListener(new ICompleteListener() {
+				public void calculateFinish() {
+					calculateSubFinish();
+				}
+			});
+			m_elPropertyUIContentProvider.createContent(parent, columns);
+			//
+			m_treeViewer.addCheckStateListener(new ICheckStateListener() {
+				public void checkStateChanged(CheckStateChangedEvent event) {
+					handleELProperty();
+				}
+			});
+		}
+	}
+
+	@Override
+	protected ICheckboxViewerWrapper createPropertiesViewer(Composite parent) {
+		m_treeViewer =
+				new CheckboxTreeViewer(parent, SWT.BORDER
+						| SWT.FULL_SELECTION
+						| SWT.H_SCROLL
+						| SWT.V_SCROLL);
+		m_treeViewer.setContentProvider(new PropertyAdapterContentProvider());
+		m_treeViewer.setLabelProvider(new PropertyAdapterLabelProvider(m_treeViewer));
+		return new CheckboxTreeViewerWrapper(m_treeViewer);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Handling
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void calculateFinish() {
+		super.calculateFinish();
+		if (getErrorMessage() == null && m_elProperty) {
+			setErrorMessage(m_elPropertyUIContentProvider.getErrorMessage());
+		}
+	}
+
+	private void calculateSubFinish() {
+		if (m_elProperty) {
+			setErrorMessage(m_elPropertyUIContentProvider.getErrorMessage());
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Properties
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void handleELProperty() {
+		try {
+			Object[] elements = m_treeViewer.getCheckedElements();
+			if (m_elProperty) {
+				if (elements.length == 1) {
+					ObservePropertyAdapter adapter = (ObservePropertyAdapter) elements[0];
+					if (adapter.getProperty() instanceof ElPropertyObserveInfo) {
+						m_elPropertyUIContentProvider.setProperty((ElPropertyInfo) convertAdapterToProperty(
+								new BeanSupport(),
+								m_choosenClass,
+								adapter));
+						return;
+					}
+				}
+				m_elProperty = false;
+				m_elPropertyUIContentProvider.setProperty(null);
+			} else if (elements.length == 1) {
+				ObservePropertyAdapter adapter = (ObservePropertyAdapter) elements[0];
+				if (adapter.getProperty() instanceof ElPropertyObserveInfo) {
+					m_elProperty = true;
+					m_elPropertyUIContentProvider.setProperty((ElPropertyInfo) convertAdapterToProperty(
+							new BeanSupport(),
+							m_choosenClass,
+							adapter));
+				}
+			}
+		} catch (Throwable e) {
+			DesignerPlugin.log(e);
+		}
+	}
+
+	@Override
+	protected List<PropertyAdapter> getProperties(Class<?> choosenClass) throws Exception {
+		List<PropertyAdapter> adapters = Lists.newArrayList();
+		BeanSupport beanSupport = new BeanSupport();
+		beanSupport.doAddELProperty(m_configuration.isWorkWithELProperty());
+		ClassGenericType objectType = new ClassGenericType(choosenClass, null, null);
+		for (ObserveInfo property : beanSupport.createProperties(null, objectType)) {
+			adapters.add(new ObservePropertyAdapter(null, property));
+		}
+		return adapters;
+	}
+
+	private PropertyInfo convertAdapterToProperty(BeanSupport beanSupport,
+			Class<?> objectClass,
+			ObservePropertyAdapter adapter) throws Exception {
+		ClassGenericType objectType = new ClassGenericType(objectClass, null, null);
+		ObserveInfo observe =
+				new SubBeanObserveInfo(beanSupport, null, objectType, StringReferenceProvider.EMPTY);
+		return adapter.getProperty().createProperty(observe);
+	}
+
+	private ObservePropertyAdapter convertPropertyToAdapter(BeanSupport beanSupport,
+			Class<?> objectClass,
+			PropertyInfo property) throws Exception {
+		ClassGenericType objectType = new ClassGenericType(objectClass, null, null);
+		ObserveInfo observe =
+				property.getObserveProperty(new SubBeanObserveInfo(beanSupport,
+						null,
+						objectType,
+						StringReferenceProvider.EMPTY));
+		Assert.isNotNull(observe);
+		return convertObserveToAdapter(observe);
+	}
+
+	private ObservePropertyAdapter convertObserveToAdapter(ObserveInfo observe) throws Exception {
+		if (observe != null) {
+			ObservePropertyAdapter adapter =
+					new ObservePropertyAdapter(convertObserveToAdapter((ObserveInfo) observe.getParent()),
+							observe);
+			adapter.addToParent();
+			return adapter;
+		}
+		return null;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Update
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected final void setClassNameAndProperty(String className, PropertyInfo property)
+			throws Exception {
+		setClassName(className);
+		if (m_configuration.isWorkWithELProperty()) {
+			m_elProperty = property instanceof ElPropertyInfo;
+			m_elPropertyUIContentProvider.setProperty(m_elProperty ? (ElPropertyInfo) property : null);
+		}
+		setCheckedAdExpand(new Object[]{convertPropertyToAdapter(
+				new BeanSupport(),
+				loadClass(className),
+				property)});
+		calculatePropertiesFinish();
+	}
+
+	protected final void setClassNameAndProperties0(String className, List<PropertyInfo> properties)
+			throws Exception {
+		setClassName(className);
+		BeanSupport beanSupport = new BeanSupport();
+		Class<?> objectClass = loadClass(className);
+		Object[] adapters = new Object[properties.size()];
+		for (int i = 0; i < adapters.length; i++) {
+			adapters[i] = convertPropertyToAdapter(beanSupport, objectClass, properties.get(i));
+		}
+		setCheckedAdExpand(adapters);
+		calculatePropertiesFinish();
+	}
+
+	private void setCheckedAdExpand(Object[] adapters) {
+		for (int i = 0; i < adapters.length; i++) {
+			m_treeViewer.expandToLevel(adapters[i], 0);
+		}
+		m_treeViewer.setCheckedElements(adapters);
+		if (adapters.length > 0) {
+			m_treeViewer.setSelection(new StructuredSelection(adapters[0]), true);
+		}
+	}
+
+	@Override
+	protected final void saveToObject(Class<?> choosenClass, List<PropertyAdapter> choosenAdapters)
+			throws Exception {
+		BeanSupport beanSupport = new BeanSupport();
+		List<PropertyInfo> choosenProperties = Lists.newArrayList();
+		if (m_elProperty) {
+			m_elPropertyUIContentProvider.saveToObject();
+			choosenProperties.add(m_elPropertyUIContentProvider.getProperty());
+		} else {
+			for (PropertyAdapter propertyAdapter : choosenAdapters) {
+				choosenProperties.add(convertAdapterToProperty(
+						beanSupport,
+						choosenClass,
+						(ObservePropertyAdapter) propertyAdapter));
+			}
+		}
+		saveToObject0(choosenClass, choosenProperties);
+	}
+
+	/**
+	 * Invoke for save changes class and properties.
+	 */
+	protected abstract void saveToObject0(Class<?> choosenClass, List<PropertyInfo> choosenProperties)
+			throws Exception;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Classes
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static class ObservePropertyAdapter extends PropertyAdapter {
+		private final ObservePropertyAdapter m_parent;
+		private final ObserveInfo m_property;
+		private List<ObservePropertyAdapter> m_children;
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public ObservePropertyAdapter(ObservePropertyAdapter parent, ObserveInfo property)
+				throws Exception {
+			super(property.getPresentation().getText(), property.getObjectClass());
+			m_parent = parent;
+			m_property = property;
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Access
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public ObservePropertyAdapter getParent() {
+			return m_parent;
+		}
+
+		public ObserveInfo getProperty() {
+			return m_property;
+		}
+
+		public List<ObservePropertyAdapter> getChildren() {
+			if (m_children == null) {
+				m_children = Lists.newArrayList();
+				List<ObserveInfo> properties =
+						CoreUtils.cast(m_property.getChildren(ChildrenContext.ChildrenForPropertiesTable));
+				for (ObserveInfo property : properties) {
+					try {
+						m_children.add(new ObservePropertyAdapter(this, property));
+					} catch (Throwable e) {
+						DesignerPlugin.log(e);
+					}
+				}
+			}
+			return m_children;
+		}
+
+		public void addToParent() {
+			if (m_parent != null) {
+				m_parent.m_children = Lists.newArrayList();
+				m_parent.m_children.add(this);
+			}
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Object
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public int hashCode() {
+			int parentHash = m_parent == null ? 1 : m_parent.hashCode();
+			return parentHash * super.hashCode();
+		}
+
+		@Override
+		public boolean equals(Object object) {
+			// self check
+			if (object == this) {
+				return true;
+			}
+			// compare with other adapter
+			if (object instanceof ObservePropertyAdapter) {
+				ObservePropertyAdapter adapter = (ObservePropertyAdapter) object;
+				if (m_parent == null && adapter.m_parent == null) {
+				} else if (m_parent != null
+						&& adapter.m_parent == null
+						|| m_parent == null
+						&& adapter.m_parent != null) {
+					return false;
+				} else if (m_parent != null && adapter.m_parent != null) {
+					if (!m_parent.equals(adapter.m_parent)) {
+						return false;
+					}
+				}
+				return m_name.equals(adapter.m_name) && m_type == adapter.m_type;
+			}
+			// default
+			return false;
+		}
+	}
+	private static class PropertyAdapterContentProvider implements ITreeContentProvider {
+		public Object[] getElements(Object input) {
+			return ((List<?>) input).toArray();
+		}
+
+		public Object getParent(Object element) {
+			return getAdapter(element).getParent();
+		}
+
+		public boolean hasChildren(Object element) {
+			return !getAdapter(element).getChildren().isEmpty();
+		}
+
+		public Object[] getChildren(Object element) {
+			return getAdapter(element).getChildren().toArray();
+		}
+
+		public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+		}
+
+		public void dispose() {
+		}
+	}
+	private static class PropertyAdapterLabelProvider extends LabelProvider
+	implements
+	IColorProvider,
+	IFontProvider {
+		private final ObserveDecoratingLabelProvider m_labelProvider;
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public PropertyAdapterLabelProvider(TreeViewer viewer) {
+			m_labelProvider = new ObserveDecoratingLabelProvider(viewer);
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// LabelProvider
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public void dispose() {
+			super.dispose();
+			m_labelProvider.dispose();
+		}
+
+		@Override
+		public String getText(Object element) {
+			return getAdapter(element).getName();
+		}
+
+		@Override
+		public Image getImage(Object element) {
+			try {
+				return getAdapterProperty(element).getPresentation().getImage();
+			} catch (Throwable e) {
+			}
+			return super.getImage(element);
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Decoration
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public Color getForeground(Object element) {
+			return m_labelProvider.getForeground(getAdapterProperty(element));
+		}
+
+		public Color getBackground(Object element) {
+			return m_labelProvider.getBackground(getAdapterProperty(element));
+		}
+
+		public Font getFont(Object element) {
+			return m_labelProvider.getFont(getAdapterProperty(element));
+		}
+	}
+
+	private static ObservePropertyAdapter getAdapter(Object element) {
+		return (ObservePropertyAdapter) element;
+	}
+
+	private static ObserveInfo getAdapterProperty(Object element) {
+		return getAdapter(element).getProperty();
+	}
+
+	private static class SubBeanObserveInfo extends BeanObserveInfo {
+		public SubBeanObserveInfo(BeanSupport beanSupport,
+				ObserveInfo parent,
+				IGenericType objectType,
+				IReferenceProvider referenceProvider) {
+			super(beanSupport, parent, objectType, referenceProvider);
+		}
+
+		public IObservePresentation getPresentation() {
+			return null;
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/ColumnBindingUiContentProvider.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/ColumnBindingUiContentProvider.java
index c523cd872..0559720d3 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/ColumnBindingUiContentProvider.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/ColumnBindingUiContentProvider.java
@@ -65,462 +65,462 @@
  * @coverage bindings.swing.ui
  */
 public final class ColumnBindingUiContentProvider implements IUiContentProvider {
-  private Label propertiesLabel;
-  private CheckboxTreeViewer treeViewer;
-  private ElPropertyUiContentProvider elPropertyUIContentProvider;
-  private boolean elProperty;
-  private String errorMessage;
-  private List<PropertyAdapter> properties = Collections.emptyList();
-  private ICompleteListener listener;
-  private final ColumnBindingInfo binding;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ColumnBindingUiContentProvider(ColumnBindingInfo binding) {
-    this.binding = binding;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Complete
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void setCompleteListener(ICompleteListener listener) {
-    this.listener = listener;
-  }
-
-  public String getErrorMessage() {
-    return errorMessage;
-  }
-
-  /**
-   * Sets or clears the error message for this provider.
-   */
-  private final void setErrorMessage(String message) {
-    errorMessage = message;
-    if (listener != null) {
-      listener.calculateFinish();
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public int getNumberOfControls() {
-    return 2;
-  }
-
-  public void createContent(Composite parent, int columns) {
-    // create properties title
-    propertiesLabel = new Label(parent, SWT.NONE);
-    propertiesLabel.setText(Messages.ColumnBindingUiContentProvider_properties);
-    // create properties viewer
-    treeViewer =
-        new CheckboxTreeViewer(parent, SWT.BORDER
-            | SWT.FULL_SELECTION
-            | SWT.H_SCROLL
-            | SWT.V_SCROLL);
-    treeViewer.setContentProvider(new PropertyAdapterContentProvider());
-    treeViewer.setLabelProvider(new PropertyAdapterLabelProvider(treeViewer));
-    treeViewer.addCheckStateListener(new ICheckStateListener() {
-      public void checkStateChanged(CheckStateChangedEvent event) {
-        if (event.getChecked()) {
-          treeViewer.setCheckedElements(new Object[]{event.getElement()});
-        }
-        calculateFinish();
-      }
-    });
-    GridDataFactory.create(treeViewer.getTree()).fill().grab().spanH(columns - 1).minVC(5);
-    // create EL property
-    ElPropertyUiConfiguration configuration = new ElPropertyUiConfiguration();
-    configuration.setTitle(Messages.ColumnBindingUiContentProvider_elExpression);
-    elPropertyUIContentProvider = new ElPropertyUiContentProvider(configuration, null);
-    elPropertyUIContentProvider.setCompleteListener(new ICompleteListener() {
-      public void calculateFinish() {
-        ColumnBindingUiContentProvider.this.calculateFinish();
-      }
-    });
-    elPropertyUIContentProvider.createContent(parent, columns);
-    //
-    treeViewer.addCheckStateListener(new ICheckStateListener() {
-      public void checkStateChanged(CheckStateChangedEvent event) {
-        handleELProperty();
-      }
-    });
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Handling
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void calculateFinish() {
-    // prepare checked elements
-    Object[] checkedElements = treeViewer.getCheckedElements();
-    // check properties state
-    if (checkedElements.length == 0) {
-      setErrorMessage(Messages.ColumnBindingUiContentProvider_erorrMessage);
-    } else {
-      if (elProperty) {
-        setErrorMessage(elPropertyUIContentProvider.getErrorMessage());
-      } else {
-        setErrorMessage(null);
-      }
-    }
-  }
-
-  private void handleELProperty() {
-    IGenericType objectType = binding.getJTableBinding().getInputElementType();
-    try {
-      Object[] elements = treeViewer.getCheckedElements();
-      if (elProperty) {
-        if (elements.length == 1) {
-          ObservePropertyAdapter adapter = (ObservePropertyAdapter) elements[0];
-          if (adapter.getProperty() instanceof ElPropertyObserveInfo) {
-            elPropertyUIContentProvider.setProperty((ElPropertyInfo) convertAdapterToProperty(
-                new BeanSupport(),
-                objectType,
-                adapter));
-            return;
-          }
-        }
-        elProperty = false;
-        elPropertyUIContentProvider.setProperty(null);
-      } else if (elements.length == 1) {
-        ObservePropertyAdapter adapter = (ObservePropertyAdapter) elements[0];
-        if (adapter.getProperty() instanceof ElPropertyObserveInfo) {
-          elProperty = true;
-          elPropertyUIContentProvider.setProperty((ElPropertyInfo) convertAdapterToProperty(
-              new BeanSupport(),
-              objectType,
-              adapter));
-        }
-      }
-    } catch (Throwable e) {
-      DesignerPlugin.log(e);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Update
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void updateFromObject() throws Exception {
-    IGenericType objectType = binding.getJTableBinding().getInputElementType();
-    setObjectType(objectType);
-    PropertyInfo property = binding.getDetailProperty();
-    elProperty = property instanceof ElPropertyInfo;
-    elPropertyUIContentProvider.setProperty(elProperty ? (ElPropertyInfo) property : null);
-    ObservePropertyAdapter adapter =
-        convertPropertyToAdapter(new BeanSupport(), objectType, property);
-    setCheckedAdExpand(adapter);
-    calculateFinish();
-  }
-
-  public void saveToObject() throws Exception {
-    if (elProperty) {
-      elPropertyUIContentProvider.saveToObject();
-      binding.setDetailProperty(elPropertyUIContentProvider.getProperty());
-    } else {
-      IGenericType objectType = binding.getJTableBinding().getInputElementType();
-      List<PropertyAdapter> choosenProperties = getChoosenProperties();
-      PropertyAdapter propertyAdapter = choosenProperties.get(0);
-      PropertyInfo property =
-          convertAdapterToProperty(
-              new BeanSupport(),
-              objectType,
-              (ObservePropertyAdapter) propertyAdapter);
-      binding.setDetailProperty(property);
-    }
-  }
-
-  protected void setObjectType(IGenericType objectType) {
-    // check properties
-    if (getErrorMessage() == null) {
-      try {
-        // load properties
-        properties = getProperties(objectType);
-        treeViewer.setInput(properties);
-        // checked properties
-        if (!properties.isEmpty()) {
-          treeViewer.setCheckedElements(ArrayUtils.EMPTY_OBJECT_ARRAY);
-        }
-      } catch (Throwable e) {
-        setEmptyProperties();
-      }
-    } else {
-      setEmptyProperties();
-    }
-  }
-
-  private void setEmptyProperties() {
-    properties = Collections.emptyList();
-    treeViewer.setInput(properties);
-    treeViewer.setCheckedElements(ArrayUtils.EMPTY_OBJECT_ARRAY);
-  }
-
-  private void setCheckedAdExpand(Object... adapters) {
-    for (int i = 0; i < adapters.length; i++) {
-      treeViewer.expandToLevel(adapters[i], 0);
-    }
-    treeViewer.setCheckedElements(adapters);
-    if (adapters.length > 0) {
-      treeViewer.setSelection(new StructuredSelection(adapters[0]), true);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Properties
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private List<PropertyAdapter> getChoosenProperties() {
-    List<PropertyAdapter> properties = Lists.newArrayList();
-    CollectionUtils.addAll(properties, treeViewer.getCheckedElements());
-    return properties;
-  }
-
-  private List<PropertyAdapter> getProperties(IGenericType objectType) throws Exception {
-    List<PropertyAdapter> adapters = Lists.newArrayList();
-    BeanSupport beanSupport = new BeanSupport();
-    beanSupport.doAddELProperty(true);
-    for (ObserveInfo property : beanSupport.createProperties(null, objectType)) {
-      adapters.add(new ObservePropertyAdapter(null, property));
-    }
-    return adapters;
-  }
-
-  private PropertyInfo convertAdapterToProperty(BeanSupport beanSupport,
-      IGenericType objectType,
-      ObservePropertyAdapter adapter) throws Exception {
-    ObserveInfo observe =
-        new SubBeanObserveInfo(beanSupport, null, objectType, StringReferenceProvider.EMPTY);
-    return adapter.getProperty().createProperty(observe);
-  }
-
-  private ObservePropertyAdapter convertPropertyToAdapter(BeanSupport beanSupport,
-      IGenericType objectType,
-      PropertyInfo property) throws Exception {
-    ObserveInfo observe =
-        property.getObserveProperty(new SubBeanObserveInfo(beanSupport,
-            null,
-            objectType,
-            StringReferenceProvider.EMPTY));
-    Assert.isNotNull(observe);
-    return convertObserveToAdapter(observe);
-  }
-
-  private ObservePropertyAdapter convertObserveToAdapter(ObserveInfo observe) throws Exception {
-    if (observe != null) {
-      ObservePropertyAdapter adapter =
-          new ObservePropertyAdapter(convertObserveToAdapter((ObserveInfo) observe.getParent()),
-              observe);
-      adapter.addToParent();
-      return adapter;
-    }
-    return null;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Classes
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static class ObservePropertyAdapter extends PropertyAdapter {
-    private final ObservePropertyAdapter m_parent;
-    private final ObserveInfo m_property;
-    private List<ObservePropertyAdapter> m_children;
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public ObservePropertyAdapter(ObservePropertyAdapter parent, ObserveInfo property)
-        throws Exception {
-      super(property.getPresentation().getText(), property.getObjectClass());
-      m_parent = parent;
-      m_property = property;
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Access
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public ObservePropertyAdapter getParent() {
-      return m_parent;
-    }
-
-    public ObserveInfo getProperty() {
-      return m_property;
-    }
-
-    public List<ObservePropertyAdapter> getChildren() {
-      if (m_children == null) {
-        m_children = Lists.newArrayList();
-        List<ObserveInfo> properties =
-            CoreUtils.cast(m_property.getChildren(ChildrenContext.ChildrenForPropertiesTable));
-        for (ObserveInfo property : properties) {
-          try {
-            m_children.add(new ObservePropertyAdapter(this, property));
-          } catch (Throwable e) {
-            DesignerPlugin.log(e);
-          }
-        }
-      }
-      return m_children;
-    }
-
-    public void addToParent() {
-      if (m_parent != null) {
-        m_parent.m_children = Lists.newArrayList();
-        m_parent.m_children.add(this);
-      }
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Object
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public int hashCode() {
-      int parentHash = m_parent == null ? 1 : m_parent.hashCode();
-      return parentHash * super.hashCode();
-    }
-
-    @Override
-    public boolean equals(Object object) {
-      // self check
-      if (object == this) {
-        return true;
-      }
-      // compare with other adapter
-      if (object instanceof ObservePropertyAdapter) {
-        ObservePropertyAdapter adapter = (ObservePropertyAdapter) object;
-        if (m_parent == null && adapter.m_parent == null) {
-        } else if (m_parent != null
-            && adapter.m_parent == null
-            || m_parent == null
-            && adapter.m_parent != null) {
-          return false;
-        } else if (m_parent != null && adapter.m_parent != null) {
-          if (!m_parent.equals(adapter.m_parent)) {
-            return false;
-          }
-        }
-        return m_name.equals(adapter.m_name) && m_type == adapter.m_type;
-      }
-      // default
-      return false;
-    }
-  }
-  private static class PropertyAdapterContentProvider implements ITreeContentProvider {
-    public Object[] getElements(Object input) {
-      return ((List<?>) input).toArray();
-    }
-
-    public Object getParent(Object element) {
-      return getAdapter(element).getParent();
-    }
-
-    public boolean hasChildren(Object element) {
-      return !getAdapter(element).getChildren().isEmpty();
-    }
-
-    public Object[] getChildren(Object element) {
-      return getAdapter(element).getChildren().toArray();
-    }
-
-    public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
-    }
-
-    public void dispose() {
-    }
-  }
-  private static class PropertyAdapterLabelProvider extends LabelProvider
-      implements
-        IColorProvider,
-        IFontProvider {
-    private final ObserveDecoratingLabelProvider m_labelProvider;
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public PropertyAdapterLabelProvider(TreeViewer viewer) {
-      m_labelProvider = new ObserveDecoratingLabelProvider(viewer);
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // LabelProvider
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public void dispose() {
-      super.dispose();
-      m_labelProvider.dispose();
-    }
-
-    @Override
-    public String getText(Object element) {
-      return getAdapter(element).getName();
-    }
-
-    @Override
-    public Image getImage(Object element) {
-      try {
-        return getAdapterProperty(element).getPresentation().getImage();
-      } catch (Throwable e) {
-      }
-      return super.getImage(element);
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Decoration
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public Color getForeground(Object element) {
-      return m_labelProvider.getForeground(getAdapterProperty(element));
-    }
-
-    public Color getBackground(Object element) {
-      return m_labelProvider.getBackground(getAdapterProperty(element));
-    }
-
-    public Font getFont(Object element) {
-      return m_labelProvider.getFont(getAdapterProperty(element));
-    }
-  }
-
-  private static ObservePropertyAdapter getAdapter(Object element) {
-    return (ObservePropertyAdapter) element;
-  }
-
-  private static ObserveInfo getAdapterProperty(Object element) {
-    return getAdapter(element).getProperty();
-  }
-
-  private static class SubBeanObserveInfo extends BeanObserveInfo {
-    public SubBeanObserveInfo(BeanSupport beanSupport,
-        ObserveInfo parent,
-        IGenericType objectType,
-        IReferenceProvider referenceProvider) {
-      super(beanSupport, parent, objectType, referenceProvider);
-    }
-
-    public IObservePresentation getPresentation() {
-      return null;
-    }
-  }
+	private Label propertiesLabel;
+	private CheckboxTreeViewer treeViewer;
+	private ElPropertyUiContentProvider elPropertyUIContentProvider;
+	private boolean elProperty;
+	private String errorMessage;
+	private List<PropertyAdapter> properties = Collections.emptyList();
+	private ICompleteListener listener;
+	private final ColumnBindingInfo binding;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ColumnBindingUiContentProvider(ColumnBindingInfo binding) {
+		this.binding = binding;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Complete
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void setCompleteListener(ICompleteListener listener) {
+		this.listener = listener;
+	}
+
+	public String getErrorMessage() {
+		return errorMessage;
+	}
+
+	/**
+	 * Sets or clears the error message for this provider.
+	 */
+	private final void setErrorMessage(String message) {
+		errorMessage = message;
+		if (listener != null) {
+			listener.calculateFinish();
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public int getNumberOfControls() {
+		return 2;
+	}
+
+	public void createContent(Composite parent, int columns) {
+		// create properties title
+		propertiesLabel = new Label(parent, SWT.NONE);
+		propertiesLabel.setText(Messages.ColumnBindingUiContentProvider_properties);
+		// create properties viewer
+		treeViewer =
+				new CheckboxTreeViewer(parent, SWT.BORDER
+						| SWT.FULL_SELECTION
+						| SWT.H_SCROLL
+						| SWT.V_SCROLL);
+		treeViewer.setContentProvider(new PropertyAdapterContentProvider());
+		treeViewer.setLabelProvider(new PropertyAdapterLabelProvider(treeViewer));
+		treeViewer.addCheckStateListener(new ICheckStateListener() {
+			public void checkStateChanged(CheckStateChangedEvent event) {
+				if (event.getChecked()) {
+					treeViewer.setCheckedElements(new Object[]{event.getElement()});
+				}
+				calculateFinish();
+			}
+		});
+		GridDataFactory.create(treeViewer.getTree()).fill().grab().spanH(columns - 1).minVC(5);
+		// create EL property
+		ElPropertyUiConfiguration configuration = new ElPropertyUiConfiguration();
+		configuration.setTitle(Messages.ColumnBindingUiContentProvider_elExpression);
+		elPropertyUIContentProvider = new ElPropertyUiContentProvider(configuration, null);
+		elPropertyUIContentProvider.setCompleteListener(new ICompleteListener() {
+			public void calculateFinish() {
+				ColumnBindingUiContentProvider.this.calculateFinish();
+			}
+		});
+		elPropertyUIContentProvider.createContent(parent, columns);
+		//
+		treeViewer.addCheckStateListener(new ICheckStateListener() {
+			public void checkStateChanged(CheckStateChangedEvent event) {
+				handleELProperty();
+			}
+		});
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Handling
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void calculateFinish() {
+		// prepare checked elements
+		Object[] checkedElements = treeViewer.getCheckedElements();
+		// check properties state
+		if (checkedElements.length == 0) {
+			setErrorMessage(Messages.ColumnBindingUiContentProvider_erorrMessage);
+		} else {
+			if (elProperty) {
+				setErrorMessage(elPropertyUIContentProvider.getErrorMessage());
+			} else {
+				setErrorMessage(null);
+			}
+		}
+	}
+
+	private void handleELProperty() {
+		IGenericType objectType = binding.getJTableBinding().getInputElementType();
+		try {
+			Object[] elements = treeViewer.getCheckedElements();
+			if (elProperty) {
+				if (elements.length == 1) {
+					ObservePropertyAdapter adapter = (ObservePropertyAdapter) elements[0];
+					if (adapter.getProperty() instanceof ElPropertyObserveInfo) {
+						elPropertyUIContentProvider.setProperty((ElPropertyInfo) convertAdapterToProperty(
+								new BeanSupport(),
+								objectType,
+								adapter));
+						return;
+					}
+				}
+				elProperty = false;
+				elPropertyUIContentProvider.setProperty(null);
+			} else if (elements.length == 1) {
+				ObservePropertyAdapter adapter = (ObservePropertyAdapter) elements[0];
+				if (adapter.getProperty() instanceof ElPropertyObserveInfo) {
+					elProperty = true;
+					elPropertyUIContentProvider.setProperty((ElPropertyInfo) convertAdapterToProperty(
+							new BeanSupport(),
+							objectType,
+							adapter));
+				}
+			}
+		} catch (Throwable e) {
+			DesignerPlugin.log(e);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Update
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void updateFromObject() throws Exception {
+		IGenericType objectType = binding.getJTableBinding().getInputElementType();
+		setObjectType(objectType);
+		PropertyInfo property = binding.getDetailProperty();
+		elProperty = property instanceof ElPropertyInfo;
+		elPropertyUIContentProvider.setProperty(elProperty ? (ElPropertyInfo) property : null);
+		ObservePropertyAdapter adapter =
+				convertPropertyToAdapter(new BeanSupport(), objectType, property);
+		setCheckedAdExpand(adapter);
+		calculateFinish();
+	}
+
+	public void saveToObject() throws Exception {
+		if (elProperty) {
+			elPropertyUIContentProvider.saveToObject();
+			binding.setDetailProperty(elPropertyUIContentProvider.getProperty());
+		} else {
+			IGenericType objectType = binding.getJTableBinding().getInputElementType();
+			List<PropertyAdapter> choosenProperties = getChoosenProperties();
+			PropertyAdapter propertyAdapter = choosenProperties.get(0);
+			PropertyInfo property =
+					convertAdapterToProperty(
+							new BeanSupport(),
+							objectType,
+							(ObservePropertyAdapter) propertyAdapter);
+			binding.setDetailProperty(property);
+		}
+	}
+
+	protected void setObjectType(IGenericType objectType) {
+		// check properties
+		if (getErrorMessage() == null) {
+			try {
+				// load properties
+				properties = getProperties(objectType);
+				treeViewer.setInput(properties);
+				// checked properties
+				if (!properties.isEmpty()) {
+					treeViewer.setCheckedElements(ArrayUtils.EMPTY_OBJECT_ARRAY);
+				}
+			} catch (Throwable e) {
+				setEmptyProperties();
+			}
+		} else {
+			setEmptyProperties();
+		}
+	}
+
+	private void setEmptyProperties() {
+		properties = Collections.emptyList();
+		treeViewer.setInput(properties);
+		treeViewer.setCheckedElements(ArrayUtils.EMPTY_OBJECT_ARRAY);
+	}
+
+	private void setCheckedAdExpand(Object... adapters) {
+		for (int i = 0; i < adapters.length; i++) {
+			treeViewer.expandToLevel(adapters[i], 0);
+		}
+		treeViewer.setCheckedElements(adapters);
+		if (adapters.length > 0) {
+			treeViewer.setSelection(new StructuredSelection(adapters[0]), true);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Properties
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private List<PropertyAdapter> getChoosenProperties() {
+		List<PropertyAdapter> properties = Lists.newArrayList();
+		CollectionUtils.addAll(properties, treeViewer.getCheckedElements());
+		return properties;
+	}
+
+	private List<PropertyAdapter> getProperties(IGenericType objectType) throws Exception {
+		List<PropertyAdapter> adapters = Lists.newArrayList();
+		BeanSupport beanSupport = new BeanSupport();
+		beanSupport.doAddELProperty(true);
+		for (ObserveInfo property : beanSupport.createProperties(null, objectType)) {
+			adapters.add(new ObservePropertyAdapter(null, property));
+		}
+		return adapters;
+	}
+
+	private PropertyInfo convertAdapterToProperty(BeanSupport beanSupport,
+			IGenericType objectType,
+			ObservePropertyAdapter adapter) throws Exception {
+		ObserveInfo observe =
+				new SubBeanObserveInfo(beanSupport, null, objectType, StringReferenceProvider.EMPTY);
+		return adapter.getProperty().createProperty(observe);
+	}
+
+	private ObservePropertyAdapter convertPropertyToAdapter(BeanSupport beanSupport,
+			IGenericType objectType,
+			PropertyInfo property) throws Exception {
+		ObserveInfo observe =
+				property.getObserveProperty(new SubBeanObserveInfo(beanSupport,
+						null,
+						objectType,
+						StringReferenceProvider.EMPTY));
+		Assert.isNotNull(observe);
+		return convertObserveToAdapter(observe);
+	}
+
+	private ObservePropertyAdapter convertObserveToAdapter(ObserveInfo observe) throws Exception {
+		if (observe != null) {
+			ObservePropertyAdapter adapter =
+					new ObservePropertyAdapter(convertObserveToAdapter((ObserveInfo) observe.getParent()),
+							observe);
+			adapter.addToParent();
+			return adapter;
+		}
+		return null;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Classes
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static class ObservePropertyAdapter extends PropertyAdapter {
+		private final ObservePropertyAdapter m_parent;
+		private final ObserveInfo m_property;
+		private List<ObservePropertyAdapter> m_children;
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public ObservePropertyAdapter(ObservePropertyAdapter parent, ObserveInfo property)
+				throws Exception {
+			super(property.getPresentation().getText(), property.getObjectClass());
+			m_parent = parent;
+			m_property = property;
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Access
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public ObservePropertyAdapter getParent() {
+			return m_parent;
+		}
+
+		public ObserveInfo getProperty() {
+			return m_property;
+		}
+
+		public List<ObservePropertyAdapter> getChildren() {
+			if (m_children == null) {
+				m_children = Lists.newArrayList();
+				List<ObserveInfo> properties =
+						CoreUtils.cast(m_property.getChildren(ChildrenContext.ChildrenForPropertiesTable));
+				for (ObserveInfo property : properties) {
+					try {
+						m_children.add(new ObservePropertyAdapter(this, property));
+					} catch (Throwable e) {
+						DesignerPlugin.log(e);
+					}
+				}
+			}
+			return m_children;
+		}
+
+		public void addToParent() {
+			if (m_parent != null) {
+				m_parent.m_children = Lists.newArrayList();
+				m_parent.m_children.add(this);
+			}
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Object
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public int hashCode() {
+			int parentHash = m_parent == null ? 1 : m_parent.hashCode();
+			return parentHash * super.hashCode();
+		}
+
+		@Override
+		public boolean equals(Object object) {
+			// self check
+			if (object == this) {
+				return true;
+			}
+			// compare with other adapter
+			if (object instanceof ObservePropertyAdapter) {
+				ObservePropertyAdapter adapter = (ObservePropertyAdapter) object;
+				if (m_parent == null && adapter.m_parent == null) {
+				} else if (m_parent != null
+						&& adapter.m_parent == null
+						|| m_parent == null
+						&& adapter.m_parent != null) {
+					return false;
+				} else if (m_parent != null && adapter.m_parent != null) {
+					if (!m_parent.equals(adapter.m_parent)) {
+						return false;
+					}
+				}
+				return m_name.equals(adapter.m_name) && m_type == adapter.m_type;
+			}
+			// default
+			return false;
+		}
+	}
+	private static class PropertyAdapterContentProvider implements ITreeContentProvider {
+		public Object[] getElements(Object input) {
+			return ((List<?>) input).toArray();
+		}
+
+		public Object getParent(Object element) {
+			return getAdapter(element).getParent();
+		}
+
+		public boolean hasChildren(Object element) {
+			return !getAdapter(element).getChildren().isEmpty();
+		}
+
+		public Object[] getChildren(Object element) {
+			return getAdapter(element).getChildren().toArray();
+		}
+
+		public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+		}
+
+		public void dispose() {
+		}
+	}
+	private static class PropertyAdapterLabelProvider extends LabelProvider
+	implements
+	IColorProvider,
+	IFontProvider {
+		private final ObserveDecoratingLabelProvider m_labelProvider;
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public PropertyAdapterLabelProvider(TreeViewer viewer) {
+			m_labelProvider = new ObserveDecoratingLabelProvider(viewer);
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// LabelProvider
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public void dispose() {
+			super.dispose();
+			m_labelProvider.dispose();
+		}
+
+		@Override
+		public String getText(Object element) {
+			return getAdapter(element).getName();
+		}
+
+		@Override
+		public Image getImage(Object element) {
+			try {
+				return getAdapterProperty(element).getPresentation().getImage();
+			} catch (Throwable e) {
+			}
+			return super.getImage(element);
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Decoration
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public Color getForeground(Object element) {
+			return m_labelProvider.getForeground(getAdapterProperty(element));
+		}
+
+		public Color getBackground(Object element) {
+			return m_labelProvider.getBackground(getAdapterProperty(element));
+		}
+
+		public Font getFont(Object element) {
+			return m_labelProvider.getFont(getAdapterProperty(element));
+		}
+	}
+
+	private static ObservePropertyAdapter getAdapter(Object element) {
+		return (ObservePropertyAdapter) element;
+	}
+
+	private static ObserveInfo getAdapterProperty(Object element) {
+		return getAdapter(element).getProperty();
+	}
+
+	private static class SubBeanObserveInfo extends BeanObserveInfo {
+		public SubBeanObserveInfo(BeanSupport beanSupport,
+				ObserveInfo parent,
+				IGenericType objectType,
+				IReferenceProvider referenceProvider) {
+			super(beanSupport, parent, objectType, referenceProvider);
+		}
+
+		public IObservePresentation getPresentation() {
+			return null;
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/ColumnClassUiContentProvider.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/ColumnClassUiContentProvider.java
index 39b1a3bc4..138bc11e1 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/ColumnClassUiContentProvider.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/ColumnClassUiContentProvider.java
@@ -23,36 +23,36 @@
  * @coverage bindings.swing.ui
  */
 public class ColumnClassUiContentProvider extends ChooseClassUiContentProvider {
-  private final ColumnBindingInfo m_binding;
+	private final ColumnBindingInfo m_binding;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ColumnClassUiContentProvider(ChooseClassConfiguration configuration,
-      ColumnBindingInfo binding) {
-    super(configuration);
-    m_binding = binding;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ColumnClassUiContentProvider(ChooseClassConfiguration configuration,
+			ColumnBindingInfo binding) {
+		super(configuration);
+		m_binding = binding;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Update
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void updateFromObject() throws Exception {
-    IGenericType columnType = m_binding.getColumnType();
-    setClassName(columnType == null ? "N/S" : columnType.getFullTypeName());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Update
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void updateFromObject() throws Exception {
+		IGenericType columnType = m_binding.getColumnType();
+		setClassName(columnType == null ? "N/S" : columnType.getFullTypeName());
+	}
 
-  public void saveToObject() throws Exception {
-    String className = getClassName();
-    // check set or clear value
-    if ("N/S".equals(className)) {
-      m_binding.setColumnType(null);
-    } else {
-      m_binding.setColumnType(new ClassGenericType(null, className, "???"));
-    }
-  }
+	public void saveToObject() throws Exception {
+		String className = getClassName();
+		// check set or clear value
+		if ("N/S".equals(className)) {
+			m_binding.setColumnType(null);
+		} else {
+			m_binding.setColumnType(new ClassGenericType(null, className, "???"));
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/ColumnNameUiContentProvider.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/ColumnNameUiContentProvider.java
index 5c4c8a577..35d38d266 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/ColumnNameUiContentProvider.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/ColumnNameUiContentProvider.java
@@ -23,40 +23,40 @@
  * @coverage bindings.swing.ui
  */
 public class ColumnNameUiContentProvider extends DialogFieldUiContentProvider {
-  private final ColumnBindingInfo m_binding;
-  private final StringDialogField m_dialogField;
+	private final ColumnBindingInfo m_binding;
+	private final StringDialogField m_dialogField;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ColumnNameUiContentProvider(ColumnBindingInfo binding) {
-    m_binding = binding;
-    m_dialogField = new StringDialogField();
-    m_dialogField.setLabelText(Messages.ColumnNameUiContentProvider_label);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ColumnNameUiContentProvider(ColumnBindingInfo binding) {
+		m_binding = binding;
+		m_dialogField = new StringDialogField();
+		m_dialogField.setLabelText(Messages.ColumnNameUiContentProvider_label);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // DialogFieldUIContentProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public DialogField getDialogField() {
-    return m_dialogField;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// DialogFieldUIContentProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public DialogField getDialogField() {
+		return m_dialogField;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Update
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void updateFromObject() throws Exception {
-    m_dialogField.setText(m_binding.getColumnName());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Update
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void updateFromObject() throws Exception {
+		m_dialogField.setText(m_binding.getColumnName());
+	}
 
-  public void saveToObject() throws Exception {
-    m_binding.setColumnName(m_dialogField.getText());
-  }
+	public void saveToObject() throws Exception {
+		m_binding.setColumnName(m_dialogField.getText());
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/ConverterUiContentProvider.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/ConverterUiContentProvider.java
index a240bbba8..a1a6193fb 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/ConverterUiContentProvider.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/ConverterUiContentProvider.java
@@ -24,50 +24,50 @@
  * @coverage bindings.swing.ui
  */
 public class ConverterUiContentProvider extends ChooseClassUiContentProvider {
-  private final BindingInfo m_binding;
+	private final BindingInfo m_binding;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ConverterUiContentProvider(ChooseClassConfiguration configuration, BindingInfo binding) {
-    super(configuration);
-    m_binding = binding;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ConverterUiContentProvider(ChooseClassConfiguration configuration, BindingInfo binding) {
+		super(configuration);
+		m_binding = binding;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Update
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void updateFromObject() throws Exception {
-    ConverterInfo converter = m_binding.getConverter();
-    setClassName(converter == null ? "N/S" : converter.getFullClassName());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Update
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void updateFromObject() throws Exception {
+		ConverterInfo converter = m_binding.getConverter();
+		setClassName(converter == null ? "N/S" : converter.getFullClassName());
+	}
 
-  public void saveToObject() throws Exception {
-    String className = getClassName();
-    // check set or clear value
-    if ("N/S".equals(className)) {
-      m_binding.setConverter(null);
-    } else {
-      String parameters = null;
-      int index = className.indexOf('(');
-      if (index != -1) {
-        parameters = className.substring(index);
-        className = className.substring(0, index);
-      }
-      IGenericType converterType = new ClassGenericType(loadClass(className), null, null);
-      ConverterInfo converter = m_binding.getConverter();
-      // check new converter or edit value
-      if (converter == null) {
-        converter = new ConverterInfo(converterType, m_binding);
-        m_binding.setConverter(converter);
-      } else {
-        converter.setClass(converterType);
-      }
-      converter.setParameters(parameters);
-    }
-  }
+	public void saveToObject() throws Exception {
+		String className = getClassName();
+		// check set or clear value
+		if ("N/S".equals(className)) {
+			m_binding.setConverter(null);
+		} else {
+			String parameters = null;
+			int index = className.indexOf('(');
+			if (index != -1) {
+				parameters = className.substring(index);
+				className = className.substring(0, index);
+			}
+			IGenericType converterType = new ClassGenericType(loadClass(className), null, null);
+			ConverterInfo converter = m_binding.getConverter();
+			// check new converter or edit value
+			if (converter == null) {
+				converter = new ConverterInfo(converterType, m_binding);
+				m_binding.setConverter(converter);
+			} else {
+				converter.setClass(converterType);
+			}
+			converter.setParameters(parameters);
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/DetailBindingUiContentProvider.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/DetailBindingUiContentProvider.java
index 9cfc738ae..2289dd3e3 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/DetailBindingUiContentProvider.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/DetailBindingUiContentProvider.java
@@ -24,35 +24,35 @@
  * @coverage bindings.swing.ui
  */
 public final class DetailBindingUiContentProvider extends ChooseClassAndPropertiesUiContentProvider {
-  private final DetailBindingInfo m_binding;
+	private final DetailBindingInfo m_binding;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DetailBindingUiContentProvider(ChooseClassAndPropertiesConfiguration configuration,
-      DetailBindingInfo binding) {
-    super(configuration);
-    m_binding = binding;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DetailBindingUiContentProvider(ChooseClassAndPropertiesConfiguration configuration,
+			DetailBindingInfo binding) {
+		super(configuration);
+		m_binding = binding;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Update
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void updateFromObject() throws Exception {
-    String elementClassName = m_binding.getJListBinding().getInputElementType().getFullTypeName();
-    setClassNameAndProperty(
-        StringUtils.substringBefore(elementClassName, "<")
-            + StringUtils.substringAfterLast(elementClassName, ">"),
-        m_binding.getDetailProperty());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Update
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void updateFromObject() throws Exception {
+		String elementClassName = m_binding.getJListBinding().getInputElementType().getFullTypeName();
+		setClassNameAndProperty(
+				StringUtils.substringBefore(elementClassName, "<")
+				+ StringUtils.substringAfterLast(elementClassName, ">"),
+				m_binding.getDetailProperty());
+	}
 
-  @Override
-  protected void saveToObject0(Class<?> choosenClass, List<PropertyInfo> choosenProperties)
-      throws Exception {
-    m_binding.setDetailProperty(choosenProperties.get(0));
-  }
+	@Override
+	protected void saveToObject0(Class<?> choosenClass, List<PropertyInfo> choosenProperties)
+			throws Exception {
+		m_binding.setDetailProperty(choosenProperties.get(0));
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/EditableUiContentProvider.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/EditableUiContentProvider.java
index a038e1e92..bc0e7d69a 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/EditableUiContentProvider.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/EditableUiContentProvider.java
@@ -22,40 +22,40 @@
  * @coverage bindings.swing.ui
  */
 public class EditableUiContentProvider extends DialogFieldUiContentProvider {
-  private final IEditableProvider m_provider;
-  private final BooleanDialogField m_dialogField;
+	private final IEditableProvider m_provider;
+	private final BooleanDialogField m_dialogField;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public EditableUiContentProvider(IEditableProvider provider) {
-    m_provider = provider;
-    m_dialogField = new BooleanDialogField();
-    m_dialogField.setLabelText(Messages.EditableUiContentProvider_title);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public EditableUiContentProvider(IEditableProvider provider) {
+		m_provider = provider;
+		m_dialogField = new BooleanDialogField();
+		m_dialogField.setLabelText(Messages.EditableUiContentProvider_title);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // DialogFieldUIContentProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public DialogField getDialogField() {
-    return m_dialogField;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// DialogFieldUIContentProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public DialogField getDialogField() {
+		return m_dialogField;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Update
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void updateFromObject() throws Exception {
-    m_dialogField.setSelection(m_provider.isEditable());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Update
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void updateFromObject() throws Exception {
+		m_dialogField.setSelection(m_provider.isEditable());
+	}
 
-  public void saveToObject() throws Exception {
-    m_provider.setEditable(m_dialogField.getSelection());
-  }
+	public void saveToObject() throws Exception {
+		m_provider.setEditable(m_dialogField.getSelection());
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/ElPropertyUiContentProvider.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/ElPropertyUiContentProvider.java
index ec6750a9f..c176366ae 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/ElPropertyUiContentProvider.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/ElPropertyUiContentProvider.java
@@ -26,88 +26,88 @@
  * @coverage bindings.swing.ui
  */
 public final class ElPropertyUiContentProvider
-    extends
-      org.eclipse.wb.internal.swing.databinding.ui.contentproviders.el.ElPropertyUiContentProvider {
-  private ElPropertyInfo m_property;
+extends
+org.eclipse.wb.internal.swing.databinding.ui.contentproviders.el.ElPropertyUiContentProvider {
+	private ElPropertyInfo m_property;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ElPropertyUiContentProvider(ElPropertyUiConfiguration configuration,
-      ElPropertyInfo property) {
-    super(configuration);
-    m_property = property;
-    setEnabled(m_property != null);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ElPropertyUiContentProvider(ElPropertyUiConfiguration configuration,
+			ElPropertyInfo property) {
+		super(configuration);
+		m_property = property;
+		setEnabled(m_property != null);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ElPropertyInfo getProperty() {
-    return m_property;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ElPropertyInfo getProperty() {
+		return m_property;
+	}
 
-  public void setProperty(ElPropertyInfo property) throws Exception {
-    m_property = property;
-    setEnabled(m_property != null);
-    if (m_property == null) {
-      setText(Messages.ElPropertyUiContentProvider_0);
-    } else {
-      updateFromObject();
-    }
-  }
+	public void setProperty(ElPropertyInfo property) throws Exception {
+		m_property = property;
+		setEnabled(m_property != null);
+		if (m_property == null) {
+			setText(Messages.ElPropertyUiContentProvider_0);
+		} else {
+			updateFromObject();
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Handling
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void createContent(Composite parent, int columns) {
-    super.createContent(parent, columns);
-    m_sourceViewer.getDocument().addDocumentListener(new IDocumentListener() {
-      public void documentChanged(DocumentEvent event) {
-        calculateFinish();
-      }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Handling
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void createContent(Composite parent, int columns) {
+		super.createContent(parent, columns);
+		m_sourceViewer.getDocument().addDocumentListener(new IDocumentListener() {
+			public void documentChanged(DocumentEvent event) {
+				calculateFinish();
+			}
 
-      public void documentAboutToBeChanged(DocumentEvent event) {
-      }
-    });
-  }
+			public void documentAboutToBeChanged(DocumentEvent event) {
+			}
+		});
+	}
 
-  public Class<?> getTopLevelBean() throws Exception {
-    if (m_property == null) {
-      return null;
-    }
-    PropertyInfo baseProperty = m_property.getBaseProperty();
-    if (baseProperty != null) {
-      return baseProperty.getValueType().getRawType();
-    }
-    return m_property.getSourceObjectType().getRawType();
-  }
+	public Class<?> getTopLevelBean() throws Exception {
+		if (m_property == null) {
+			return null;
+		}
+		PropertyInfo baseProperty = m_property.getBaseProperty();
+		if (baseProperty != null) {
+			return baseProperty.getValueType().getRawType();
+		}
+		return m_property.getSourceObjectType().getRawType();
+	}
 
-  public void calculateFinish() {
-    if (getText().length() == 0) {
-      setErrorMessage(Messages.ElPropertyUiContentProvider_errEmpty);
-    } else {
-      setErrorMessage(null);
-    }
-  }
+	public void calculateFinish() {
+		if (getText().length() == 0) {
+			setErrorMessage(Messages.ElPropertyUiContentProvider_errEmpty);
+		} else {
+			setErrorMessage(null);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Update
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void updateFromObject() throws Exception {
-    setText(m_property.getExpression());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Update
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void updateFromObject() throws Exception {
+		setText(m_property.getExpression());
+	}
 
-  public void saveToObject() throws Exception {
-    m_property.setExpression(getText());
-  }
+	public void saveToObject() throws Exception {
+		m_property.setExpression(getText());
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/ElementTypeUiContentProvider.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/ElementTypeUiContentProvider.java
index c49bdd1ff..eccc748ef 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/ElementTypeUiContentProvider.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/ElementTypeUiContentProvider.java
@@ -23,34 +23,34 @@
  * @coverage bindings.swing.ui
  */
 public final class ElementTypeUiContentProvider extends ChooseClassUiContentProvider {
-  private final VirtualBindingInfo m_binding;
+	private final VirtualBindingInfo m_binding;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ElementTypeUiContentProvider(ChooseClassConfiguration configuration,
-      VirtualBindingInfo binding) {
-    super(configuration);
-    m_binding = binding;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ElementTypeUiContentProvider(ChooseClassConfiguration configuration,
+			VirtualBindingInfo binding) {
+		super(configuration);
+		m_binding = binding;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Update
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void updateFromObject() throws Exception {
-    IGenericType elementType = m_binding.getElementType();
-    if (elementType == null) {
-      calculateFinish();
-    } else {
-      setClassName(elementType.getFullTypeName());
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Update
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void updateFromObject() throws Exception {
+		IGenericType elementType = m_binding.getElementType();
+		if (elementType == null) {
+			calculateFinish();
+		} else {
+			setClassName(elementType.getFullTypeName());
+		}
+	}
 
-  public void saveToObject() throws Exception {
-    m_binding.setElementType(new ClassGenericType(getChoosenClass(), null, null));
-  }
+	public void saveToObject() throws Exception {
+		m_binding.setElementType(new ClassGenericType(getChoosenClass(), null, null));
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/IEditableProvider.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/IEditableProvider.java
index b637b8fa0..bbeeff019 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/IEditableProvider.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/IEditableProvider.java
@@ -17,13 +17,13 @@
  * @coverage bindings.swing.ui
  */
 public interface IEditableProvider {
-  /**
-   * @return <code>true</code> if {@code editable} attribute is sets.
-   */
-  boolean isEditable();
+	/**
+	 * @return <code>true</code> if {@code editable} attribute is sets.
+	 */
+	boolean isEditable();
 
-  /**
-   * Sets value for {@code editable} attribute.
-   */
-  void setEditable(boolean editable);
+	/**
+	 * Sets value for {@code editable} attribute.
+	 */
+	void setEditable(boolean editable);
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/JListDetailContainerUiContentProvider.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/JListDetailContainerUiContentProvider.java
index 361a45549..363642b4b 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/JListDetailContainerUiContentProvider.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/JListDetailContainerUiContentProvider.java
@@ -32,69 +32,69 @@
  * @coverage bindings.swing.ui
  */
 public class JListDetailContainerUiContentProvider extends TabContainerUiContentProvider {
-  private final JListBindingInfo m_binding;
-  private final List<BindingInfo> m_bindings;
-  private final DatabindingsProvider m_provider;
+	private final JListBindingInfo m_binding;
+	private final List<BindingInfo> m_bindings;
+	private final DatabindingsProvider m_provider;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public JListDetailContainerUiContentProvider(TabContainerConfiguration configuration,
-      JListBindingInfo binding,
-      List<BindingInfo> bindings,
-      DatabindingsProvider provider) {
-    super(configuration);
-    m_binding = binding;
-    m_bindings = bindings;
-    m_provider = provider;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public JListDetailContainerUiContentProvider(TabContainerConfiguration configuration,
+			JListBindingInfo binding,
+			List<BindingInfo> bindings,
+			DatabindingsProvider provider) {
+		super(configuration);
+		m_binding = binding;
+		m_bindings = bindings;
+		m_provider = provider;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Pages
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected IUiContentProvider createNewPageContentProvider() throws Exception {
-    return new UIContentContainer<DetailBindingInfo>(m_binding.createDefaultDetailBinding(),
-        m_bindings,
-        Messages.JListDetailContainerUiContentProvider_detail1,
-        m_provider);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Pages
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected IUiContentProvider createNewPageContentProvider() throws Exception {
+		return new UIContentContainer<DetailBindingInfo>(m_binding.createDefaultDetailBinding(),
+				m_bindings,
+				Messages.JListDetailContainerUiContentProvider_detail1,
+				m_provider);
+	}
 
-  @Override
-  protected void configute(CTabItem tabItem, int index, IUiContentProvider provider) {
-    tabItem.setText(Messages.JListDetailContainerUiContentProvider_detail);
-  }
+	@Override
+	protected void configute(CTabItem tabItem, int index, IUiContentProvider provider) {
+		tabItem.setText(Messages.JListDetailContainerUiContentProvider_detail);
+	}
 
-  @Override
-  protected void postDelete() throws Exception {
-    createPage(-1, createNewPageContentProvider(), true);
-    configure();
-    m_listener.calculateFinish();
-  }
+	@Override
+	protected void postDelete() throws Exception {
+		createPage(-1, createNewPageContentProvider(), true);
+		configure();
+		m_listener.calculateFinish();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Update
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void updateFromObject() throws Exception {
-    List<IUiContentProvider> providers = Lists.newArrayList();
-    providers.add(new UIContentContainer<DetailBindingInfo>(m_binding.getDetailBinding(),
-        m_bindings,
-        Messages.JListDetailContainerUiContentProvider_detail2,
-        m_provider));
-    updateFromObject(providers);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Update
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void updateFromObject() throws Exception {
+		List<IUiContentProvider> providers = Lists.newArrayList();
+		providers.add(new UIContentContainer<DetailBindingInfo>(m_binding.getDetailBinding(),
+				m_bindings,
+				Messages.JListDetailContainerUiContentProvider_detail2,
+				m_provider));
+		updateFromObject(providers);
+	}
 
-  @Override
-  @SuppressWarnings("unchecked")
-  protected void saveToObject(List<IUiContentProvider> providers) throws Exception {
-    UIContentContainer<DetailBindingInfo> container =
-        (UIContentContainer<DetailBindingInfo>) providers.get(0);
-    m_binding.setDetailBinding(container.getBinding(), m_bindings);
-  }
+	@Override
+	@SuppressWarnings("unchecked")
+	protected void saveToObject(List<IUiContentProvider> providers) throws Exception {
+		UIContentContainer<DetailBindingInfo> container =
+				(UIContentContainer<DetailBindingInfo>) providers.get(0);
+		m_binding.setDetailBinding(container.getBinding(), m_bindings);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/JTableColumnContainerUiContentProvider.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/JTableColumnContainerUiContentProvider.java
index 88deb34fc..67e0ee6fb 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/JTableColumnContainerUiContentProvider.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/JTableColumnContainerUiContentProvider.java
@@ -33,70 +33,70 @@
  * @coverage bindings.swing.ui
  */
 public class JTableColumnContainerUiContentProvider extends TabContainerUiContentProvider {
-  private final JTableBindingInfo m_binding;
-  private final List<BindingInfo> m_bindings;
-  private final DatabindingsProvider m_provider;
+	private final JTableBindingInfo m_binding;
+	private final List<BindingInfo> m_bindings;
+	private final DatabindingsProvider m_provider;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public JTableColumnContainerUiContentProvider(TabContainerConfiguration configuration,
-      JTableBindingInfo binding,
-      List<BindingInfo> bindings,
-      DatabindingsProvider provider) {
-    super(configuration);
-    m_binding = binding;
-    m_bindings = bindings;
-    m_provider = provider;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public JTableColumnContainerUiContentProvider(TabContainerConfiguration configuration,
+			JTableBindingInfo binding,
+			List<BindingInfo> bindings,
+			DatabindingsProvider provider) {
+		super(configuration);
+		m_binding = binding;
+		m_bindings = bindings;
+		m_provider = provider;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Pages
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected IUiContentProvider createNewPageContentProvider() throws Exception {
-    return new UIContentContainer<ColumnBindingInfo>(m_binding.createNewColumnBinding(-1),
-        m_bindings,
-        Messages.JTableColumnContainerUiContentProvider_column,
-        m_provider);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Pages
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected IUiContentProvider createNewPageContentProvider() throws Exception {
+		return new UIContentContainer<ColumnBindingInfo>(m_binding.createNewColumnBinding(-1),
+				m_bindings,
+				Messages.JTableColumnContainerUiContentProvider_column,
+				m_provider);
+	}
 
-  @Override
-  protected void configute(CTabItem tabItem, int index, IUiContentProvider provider) {
-    tabItem.setText(MessageFormat.format(
-        Messages.JTableColumnContainerUiContentProvider_columnIndex,
-        index));
-  }
+	@Override
+	protected void configute(CTabItem tabItem, int index, IUiContentProvider provider) {
+		tabItem.setText(MessageFormat.format(
+				Messages.JTableColumnContainerUiContentProvider_columnIndex,
+				index));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Update
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void updateFromObject() throws Exception {
-    List<IUiContentProvider> providers = Lists.newArrayList();
-    for (ColumnBindingInfo binding : m_binding.getColumns()) {
-      providers.add(new UIContentContainer<ColumnBindingInfo>(binding,
-          m_bindings,
-          Messages.JTableColumnContainerUiContentProvider_column,
-          m_provider));
-    }
-    updateFromObject(providers);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Update
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void updateFromObject() throws Exception {
+		List<IUiContentProvider> providers = Lists.newArrayList();
+		for (ColumnBindingInfo binding : m_binding.getColumns()) {
+			providers.add(new UIContentContainer<ColumnBindingInfo>(binding,
+					m_bindings,
+					Messages.JTableColumnContainerUiContentProvider_column,
+					m_provider));
+		}
+		updateFromObject(providers);
+	}
 
-  @Override
-  @SuppressWarnings("unchecked")
-  protected void saveToObject(List<IUiContentProvider> providers) throws Exception {
-    List<ColumnBindingInfo> columns = Lists.newArrayList();
-    for (IUiContentProvider provider : providers) {
-      UIContentContainer<ColumnBindingInfo> container =
-          (UIContentContainer<ColumnBindingInfo>) provider;
-      columns.add(container.getBinding());
-    }
-    m_binding.setColumns(columns, m_bindings);
-  }
+	@Override
+	@SuppressWarnings("unchecked")
+	protected void saveToObject(List<IUiContentProvider> providers) throws Exception {
+		List<ColumnBindingInfo> columns = Lists.newArrayList();
+		for (IUiContentProvider provider : providers) {
+			UIContentContainer<ColumnBindingInfo> container =
+					(UIContentContainer<ColumnBindingInfo>) provider;
+			columns.add(container.getBinding());
+		}
+		m_binding.setColumns(columns, m_bindings);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/PropertiesUiContentProvider.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/PropertiesUiContentProvider.java
index d6f4cbbdb..507dc820f 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/PropertiesUiContentProvider.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/PropertiesUiContentProvider.java
@@ -24,40 +24,40 @@
  * @coverage bindings.swing.ui
  */
 public class PropertiesUiContentProvider extends DialogFieldUiContentProvider {
-  private final BeanPropertyInfo m_property;
-  private final ComboDialogField m_dialogField;
+	private final BeanPropertyInfo m_property;
+	private final ComboDialogField m_dialogField;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public PropertiesUiContentProvider(BeanPropertyInfo property, String[] items) {
-    m_property = property;
-    m_dialogField = new ComboDialogField(SWT.BORDER | SWT.READ_ONLY);
-    m_dialogField.setItems(items);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public PropertiesUiContentProvider(BeanPropertyInfo property, String[] items) {
+		m_property = property;
+		m_dialogField = new ComboDialogField(SWT.BORDER | SWT.READ_ONLY);
+		m_dialogField.setItems(items);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AbstractUIContentProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public DialogField getDialogField() {
-    return m_dialogField;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AbstractUIContentProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public DialogField getDialogField() {
+		return m_dialogField;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Update
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void updateFromObject() throws Exception {
-    m_dialogField.selectItem(m_property.getPath());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Update
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void updateFromObject() throws Exception {
+		m_dialogField.selectItem(m_property.getPath());
+	}
 
-  public void saveToObject() throws Exception {
-    m_property.setPath(m_dialogField.getText());
-  }
+	public void saveToObject() throws Exception {
+		m_property.setPath(m_dialogField.getText());
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/UIContentContainer.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/UIContentContainer.java
index a12a8468e..30182be79 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/UIContentContainer.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/UIContentContainer.java
@@ -24,18 +24,18 @@
  * @coverage bindings.swing.ui
  */
 public class UIContentContainer<T extends BindingInfo>
-    extends
-      org.eclipse.wb.internal.core.databinding.ui.editor.contentproviders.UIContentContainer<T> {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public UIContentContainer(T binding,
-      List<BindingInfo> bindings,
-      String errorPrefix,
-      DatabindingsProvider provider) throws Exception {
-    super(binding, errorPrefix);
-    m_binding.createContentProviders(bindings, m_providers, EmptyPageListener.INSTANCE, provider);
-  }
+extends
+org.eclipse.wb.internal.core.databinding.ui.editor.contentproviders.UIContentContainer<T> {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public UIContentContainer(T binding,
+			List<BindingInfo> bindings,
+			String errorPrefix,
+			DatabindingsProvider provider) throws Exception {
+		super(binding, errorPrefix);
+		m_binding.createContentProviders(bindings, m_providers, EmptyPageListener.INSTANCE, provider);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/UpdateStrategyUiContentProvider.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/UpdateStrategyUiContentProvider.java
index 3fed1e26e..048ca5af4 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/UpdateStrategyUiContentProvider.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/UpdateStrategyUiContentProvider.java
@@ -25,41 +25,41 @@
  * @coverage bindings.swing.ui
  */
 public final class UpdateStrategyUiContentProvider extends DialogFieldUiContentProvider {
-  private final UpdateStrategyInfo m_strategyInfo;
-  private final ComboDialogField m_dialogField;
+	private final UpdateStrategyInfo m_strategyInfo;
+	private final ComboDialogField m_dialogField;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public UpdateStrategyUiContentProvider(UpdateStrategyInfo strategyInfo) {
-    m_strategyInfo = strategyInfo;
-    m_dialogField = new ComboDialogField(SWT.BORDER | SWT.READ_ONLY);
-    m_dialogField.setLabelText(Messages.UpdateStrategyUiContentProvider_label);
-    m_dialogField.setItems(UpdateStrategyInfo.VALUES);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public UpdateStrategyUiContentProvider(UpdateStrategyInfo strategyInfo) {
+		m_strategyInfo = strategyInfo;
+		m_dialogField = new ComboDialogField(SWT.BORDER | SWT.READ_ONLY);
+		m_dialogField.setLabelText(Messages.UpdateStrategyUiContentProvider_label);
+		m_dialogField.setItems(UpdateStrategyInfo.VALUES);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AbstractUIContentProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public DialogField getDialogField() {
-    return m_dialogField;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AbstractUIContentProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public DialogField getDialogField() {
+		return m_dialogField;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Update
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void updateFromObject() throws Exception {
-    m_dialogField.selectItem(m_strategyInfo.getStrategyValue());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Update
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void updateFromObject() throws Exception {
+		m_dialogField.selectItem(m_strategyInfo.getStrategyValue());
+	}
 
-  public void saveToObject() throws Exception {
-    m_strategyInfo.setStrategyValue(m_dialogField.getText());
-  }
+	public void saveToObject() throws Exception {
+		m_strategyInfo.setStrategyValue(m_dialogField.getText());
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/ValidatorUiContentProvider.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/ValidatorUiContentProvider.java
index e33daf08a..d39b83296 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/ValidatorUiContentProvider.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/ValidatorUiContentProvider.java
@@ -24,50 +24,50 @@
  * @coverage bindings.swing.ui
  */
 public class ValidatorUiContentProvider extends ChooseClassUiContentProvider {
-  private final BindingInfo m_binding;
+	private final BindingInfo m_binding;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ValidatorUiContentProvider(ChooseClassConfiguration configuration, BindingInfo binding) {
-    super(configuration);
-    m_binding = binding;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ValidatorUiContentProvider(ChooseClassConfiguration configuration, BindingInfo binding) {
+		super(configuration);
+		m_binding = binding;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Update
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void updateFromObject() throws Exception {
-    ValidatorInfo validator = m_binding.getValidator();
-    setClassName(validator == null ? "N/S" : validator.getFullClassName());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Update
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void updateFromObject() throws Exception {
+		ValidatorInfo validator = m_binding.getValidator();
+		setClassName(validator == null ? "N/S" : validator.getFullClassName());
+	}
 
-  public void saveToObject() throws Exception {
-    String className = getClassName();
-    // check set or clear value
-    if ("N/S".equals(className)) {
-      m_binding.setValidator(null);
-    } else {
-      String parameters = null;
-      int index = className.indexOf('(');
-      if (index != -1) {
-        parameters = className.substring(index);
-        className = className.substring(0, index);
-      }
-      IGenericType validatorType = new ClassGenericType(loadClass(className), null, null);
-      ValidatorInfo validator = m_binding.getValidator();
-      // check new converter or edit value
-      if (validator == null) {
-        validator = new ValidatorInfo(validatorType, m_binding);
-        m_binding.setValidator(validator);
-      } else {
-        validator.setClass(validatorType);
-      }
-      validator.setParameters(parameters);
-    }
-  }
+	public void saveToObject() throws Exception {
+		String className = getClassName();
+		// check set or clear value
+		if ("N/S".equals(className)) {
+			m_binding.setValidator(null);
+		} else {
+			String parameters = null;
+			int index = className.indexOf('(');
+			if (index != -1) {
+				parameters = className.substring(index);
+				className = className.substring(0, index);
+			}
+			IGenericType validatorType = new ClassGenericType(loadClass(className), null, null);
+			ValidatorInfo validator = m_binding.getValidator();
+			// check new converter or edit value
+			if (validator == null) {
+				validator = new ValidatorInfo(validatorType, m_binding);
+				m_binding.setValidator(validator);
+			} else {
+				validator.setClass(validatorType);
+			}
+			validator.setParameters(parameters);
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/el/CharacterScannerWrapper.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/el/CharacterScannerWrapper.java
index 53978e487..b7836d4fa 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/el/CharacterScannerWrapper.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/el/CharacterScannerWrapper.java
@@ -19,44 +19,44 @@
  * @coverage bindings.swing.ui
  */
 public final class CharacterScannerWrapper {
-  private int m_count;
-  private final ICharacterScanner m_scanner;
+	private int m_count;
+	private final ICharacterScanner m_scanner;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CharacterScannerWrapper(ICharacterScanner scanner) {
-    m_scanner = scanner;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CharacterScannerWrapper(ICharacterScanner scanner) {
+		m_scanner = scanner;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public int read() {
-    m_count++;
-    return m_scanner.read();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public int read() {
+		m_count++;
+		return m_scanner.read();
+	}
 
-  public void unread() {
-    for (int i = 0; i < m_count; i++) {
-      m_scanner.unread();
-    }
-  }
+	public void unread() {
+		for (int i = 0; i < m_count; i++) {
+			m_scanner.unread();
+		}
+	}
 
-  public boolean test(int ch) {
-    return read() == ch;
-  }
+	public boolean test(int ch) {
+		return read() == ch;
+	}
 
-  public boolean test(int[] chars) {
-    for (int ch : chars) {
-      if (read() != ch) {
-        return false;
-      }
-    }
-    return true;
-  }
+	public boolean test(int[] chars) {
+		for (int ch : chars) {
+			if (read() != ch) {
+				return false;
+			}
+		}
+		return true;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/el/CompletionProposal.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/el/CompletionProposal.java
index 81b3681c5..aca797180 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/el/CompletionProposal.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/el/CompletionProposal.java
@@ -26,55 +26,55 @@
  * @coverage bindings.swing.ui
  */
 public final class CompletionProposal implements ICompletionProposal {
-  private final String m_displayText;
-  private final Image m_image;
-  private final int m_offset;
-  private final String m_data;
-  private final Point m_selection;
+	private final String m_displayText;
+	private final Image m_image;
+	private final int m_offset;
+	private final String m_data;
+	private final Point m_selection;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CompletionProposal(String displayText, Image image, int offset, String data, int selection) {
-    m_displayText = displayText;
-    m_image = image;
-    m_offset = offset;
-    m_data = data;
-    m_selection = new Point(selection, 0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CompletionProposal(String displayText, Image image, int offset, String data, int selection) {
+		m_displayText = displayText;
+		m_image = image;
+		m_offset = offset;
+		m_data = data;
+		m_selection = new Point(selection, 0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ICompletionProposal
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void apply(IDocument document) {
-    try {
-      document.replace(m_offset, 0, m_data);
-    } catch (BadLocationException e) {
-      DesignerPlugin.log(e);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ICompletionProposal
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void apply(IDocument document) {
+		try {
+			document.replace(m_offset, 0, m_data);
+		} catch (BadLocationException e) {
+			DesignerPlugin.log(e);
+		}
+	}
 
-  public String getDisplayString() {
-    return m_displayText;
-  }
+	public String getDisplayString() {
+		return m_displayText;
+	}
 
-  public Image getImage() {
-    return m_image;
-  }
+	public Image getImage() {
+		return m_image;
+	}
 
-  public Point getSelection(IDocument document) {
-    return m_selection;
-  }
+	public Point getSelection(IDocument document) {
+		return m_selection;
+	}
 
-  public String getAdditionalProposalInfo() {
-    return null;
-  }
+	public String getAdditionalProposalInfo() {
+		return null;
+	}
 
-  public IContextInformation getContextInformation() {
-    return null;
-  }
+	public IContextInformation getContextInformation() {
+		return null;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/el/ContentAssistProcessor.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/el/ContentAssistProcessor.java
index c7c33230e..8575ccf1c 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/el/ContentAssistProcessor.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/el/ContentAssistProcessor.java
@@ -34,144 +34,144 @@
  * @coverage bindings.swing.ui
  */
 public final class ContentAssistProcessor implements IContentAssistProcessor {
-  private static final char[] TOP_LEVEL_AUTO_ACTIVATION_CHARACTERS = {'$', '#'};
-  private static final char[] AUTO_ACTIVATION_CHARACTERS = {'.'};
-  private final IBeanPropertiesSupport m_propertiesSupport;
-  private final boolean m_topLevel;
+	private static final char[] TOP_LEVEL_AUTO_ACTIVATION_CHARACTERS = {'$', '#'};
+	private static final char[] AUTO_ACTIVATION_CHARACTERS = {'.'};
+	private final IBeanPropertiesSupport m_propertiesSupport;
+	private final boolean m_topLevel;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ContentAssistProcessor(IBeanPropertiesSupport propertiesSupport, boolean topLevel) {
-    m_propertiesSupport = propertiesSupport;
-    m_topLevel = topLevel;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ContentAssistProcessor(IBeanPropertiesSupport propertiesSupport, boolean topLevel) {
+		m_propertiesSupport = propertiesSupport;
+		m_topLevel = topLevel;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IContentAssistProcessor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ICompletionProposal[] computeCompletionProposals(ITextViewer viewer, int offset) {
-    try {
-      if (m_propertiesSupport.getTopLevelBean() == null) {
-        return null;
-      }
-      IDocument document = viewer.getDocument();
-      if (m_topLevel) {
-        //
-        String begin = "${";
-        if (offset > 0) {
-          switch (document.getChar(offset - 1)) {
-            case '$' :
-            case '#' :
-              begin = "{";
-              break;
-            case '{' :
-              switch (document.getChar(offset - 2)) {
-                case '$' :
-                case '#' :
-                  begin = "";
-                  break;
-              }
-              break;
-          }
-        }
-        return createProposals(createTopProperties(), offset, begin, "}");
-      } else if (document.getChar(offset - 1) == '.') {
-        int endOffset = offset - 1;
-        int startOffset = endOffset - 1;
-        while (startOffset > 0) {
-          if (document.getChar(startOffset) == '{') {
-            int propertyOffset = startOffset + 1;
-            int length = endOffset - propertyOffset;
-            if (length == 0) {
-              break;
-            }
-            String property = document.get(propertyOffset, length).trim();
-            List<ObserveInfo> properties =
-                resolveProperties(StringUtils.split(property, '.'), createTopProperties(), 0);
-            return properties == null ? null : createProposals(properties, offset, "", "");
-          }
-          startOffset--;
-        }
-      }
-      //
-      return null;
-    } catch (Throwable e) {
-      return new ICompletionProposal[]{new ErrorCompletionProposal(e)};
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IContentAssistProcessor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ICompletionProposal[] computeCompletionProposals(ITextViewer viewer, int offset) {
+		try {
+			if (m_propertiesSupport.getTopLevelBean() == null) {
+				return null;
+			}
+			IDocument document = viewer.getDocument();
+			if (m_topLevel) {
+				//
+				String begin = "${";
+				if (offset > 0) {
+					switch (document.getChar(offset - 1)) {
+					case '$' :
+					case '#' :
+						begin = "{";
+						break;
+					case '{' :
+						switch (document.getChar(offset - 2)) {
+						case '$' :
+						case '#' :
+							begin = "";
+							break;
+						}
+						break;
+					}
+				}
+				return createProposals(createTopProperties(), offset, begin, "}");
+			} else if (document.getChar(offset - 1) == '.') {
+				int endOffset = offset - 1;
+				int startOffset = endOffset - 1;
+				while (startOffset > 0) {
+					if (document.getChar(startOffset) == '{') {
+						int propertyOffset = startOffset + 1;
+						int length = endOffset - propertyOffset;
+						if (length == 0) {
+							break;
+						}
+						String property = document.get(propertyOffset, length).trim();
+						List<ObserveInfo> properties =
+								resolveProperties(StringUtils.split(property, '.'), createTopProperties(), 0);
+						return properties == null ? null : createProposals(properties, offset, "", "");
+					}
+					startOffset--;
+				}
+			}
+			//
+			return null;
+		} catch (Throwable e) {
+			return new ICompletionProposal[]{new ErrorCompletionProposal(e)};
+		}
+	}
 
-  private List<ObserveInfo> createTopProperties() throws Exception {
-    BeanSupport beanSupport = new BeanSupport();
-    beanSupport.doAddELProperty(false);
-    beanSupport.doAddSelfProperty(false);
-    //
-    List<ObserveInfo> properties =
-        beanSupport.createProperties(
-            null,
-            new ClassGenericType(m_propertiesSupport.getTopLevelBean(), null, null));
-    return properties;
-  }
+	private List<ObserveInfo> createTopProperties() throws Exception {
+		BeanSupport beanSupport = new BeanSupport();
+		beanSupport.doAddELProperty(false);
+		beanSupport.doAddSelfProperty(false);
+		//
+		List<ObserveInfo> properties =
+				beanSupport.createProperties(
+						null,
+						new ClassGenericType(m_propertiesSupport.getTopLevelBean(), null, null));
+		return properties;
+	}
 
-  private List<ObserveInfo> resolveProperties(String[] properties,
-      List<ObserveInfo> observes,
-      int index) throws Exception {
-    String property = properties[index++];
-    for (ObserveInfo observe : observes) {
-      if (observe.getPresentation().getText().equals(property)) {
-        List<ObserveInfo> children =
-            CoreUtils.cast(observe.getChildren(ChildrenContext.ChildrenForPropertiesTable));
-        return index == properties.length ? children : resolveProperties(
-            properties,
-            children,
-            index);
-      }
-    }
-    return null;
-  }
+	private List<ObserveInfo> resolveProperties(String[] properties,
+			List<ObserveInfo> observes,
+			int index) throws Exception {
+		String property = properties[index++];
+		for (ObserveInfo observe : observes) {
+			if (observe.getPresentation().getText().equals(property)) {
+				List<ObserveInfo> children =
+						CoreUtils.cast(observe.getChildren(ChildrenContext.ChildrenForPropertiesTable));
+				return index == properties.length ? children : resolveProperties(
+						properties,
+						children,
+						index);
+			}
+		}
+		return null;
+	}
 
-  private static ICompletionProposal[] createProposals(List<ObserveInfo> properties,
-      int offset,
-      String begin,
-      String end) throws Exception {
-    ICompletionProposal[] proposals = new ICompletionProposal[properties.size()];
-    // add proposals
-    for (int i = 0; i < proposals.length; i++) {
-      ObserveInfo observe = properties.get(i);
-      String propertyName = observe.getPresentation().getText();
-      String data = begin + propertyName + end;
-      // add proposal
-      proposals[i] =
-          new CompletionProposal(propertyName,
-              observe.getPresentation().getImage(),
-              offset,
-              data,
-              offset + data.length());
-    }
-    return proposals;
-  }
+	private static ICompletionProposal[] createProposals(List<ObserveInfo> properties,
+			int offset,
+			String begin,
+			String end) throws Exception {
+		ICompletionProposal[] proposals = new ICompletionProposal[properties.size()];
+		// add proposals
+		for (int i = 0; i < proposals.length; i++) {
+			ObserveInfo observe = properties.get(i);
+			String propertyName = observe.getPresentation().getText();
+			String data = begin + propertyName + end;
+			// add proposal
+			proposals[i] =
+					new CompletionProposal(propertyName,
+							observe.getPresentation().getImage(),
+							offset,
+							data,
+							offset + data.length());
+		}
+		return proposals;
+	}
 
-  public char[] getCompletionProposalAutoActivationCharacters() {
-    return m_topLevel ? TOP_LEVEL_AUTO_ACTIVATION_CHARACTERS : AUTO_ACTIVATION_CHARACTERS;
-  }
+	public char[] getCompletionProposalAutoActivationCharacters() {
+		return m_topLevel ? TOP_LEVEL_AUTO_ACTIVATION_CHARACTERS : AUTO_ACTIVATION_CHARACTERS;
+	}
 
-  public IContextInformation[] computeContextInformation(ITextViewer viewer, int offset) {
-    return null;
-  }
+	public IContextInformation[] computeContextInformation(ITextViewer viewer, int offset) {
+		return null;
+	}
 
-  public char[] getContextInformationAutoActivationCharacters() {
-    return null;
-  }
+	public char[] getContextInformationAutoActivationCharacters() {
+		return null;
+	}
 
-  public String getErrorMessage() {
-    return null;
-  }
+	public String getErrorMessage() {
+		return null;
+	}
 
-  public IContextInformationValidator getContextInformationValidator() {
-    return null;
-  }
+	public IContextInformationValidator getContextInformationValidator() {
+		return null;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/el/ElPropertyUiConfiguration.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/el/ElPropertyUiConfiguration.java
index aca87d91b..9d74b05a6 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/el/ElPropertyUiConfiguration.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/el/ElPropertyUiConfiguration.java
@@ -22,77 +22,77 @@
  * @coverage bindings.swing.ui
  */
 public class ElPropertyUiConfiguration {
-  private String m_title;
-  private int m_rows = 4;
-  private Color m_stringsColor = SwtResourceManager.getColor(42, 0, 255);
-  private Color m_keywordsColor = SwtResourceManager.getColor(127, 0, 85);
-  private Color m_numbersColor = SwtResourceManager.getColor(SWT.COLOR_BLACK);
-  private Color m_operatorsColor = SwtResourceManager.getColor(0, 57, 29);
-  private Color m_propertiesColor = SwtResourceManager.getColor(130, 0, 0);
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public String getTitle() {
-    return m_title == null ? "" : m_title;
-  }
-
-  public void setTitle(String title) {
-    m_title = title;
-  }
-
-  public int getRows() {
-    return m_rows;
-  }
-
-  public void setRows(int rows) {
-    m_rows = rows;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Colors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public Color getStringsColor() {
-    return m_stringsColor;
-  }
-
-  public void setStringsColor(Color textColor) {
-    m_stringsColor = textColor;
-  }
-
-  public Color getKeywordsColor() {
-    return m_keywordsColor;
-  }
-
-  public void setKeywordsColor(Color wordColor) {
-    m_keywordsColor = wordColor;
-  }
-
-  public Color getNumbersColor() {
-    return m_numbersColor;
-  }
-
-  public void setNumbersColor(Color digitsColor) {
-    m_numbersColor = digitsColor;
-  }
-
-  public Color getOperatorsColor() {
-    return m_operatorsColor;
-  }
-
-  public void setOperatorsColor(Color operatorsColor) {
-    m_operatorsColor = operatorsColor;
-  }
-
-  public Color getPropertiesColor() {
-    return m_propertiesColor;
-  }
-
-  public void setPropertiesColor(Color propertyColor) {
-    m_propertiesColor = propertyColor;
-  }
+	private String m_title;
+	private int m_rows = 4;
+	private Color m_stringsColor = SwtResourceManager.getColor(42, 0, 255);
+	private Color m_keywordsColor = SwtResourceManager.getColor(127, 0, 85);
+	private Color m_numbersColor = SwtResourceManager.getColor(SWT.COLOR_BLACK);
+	private Color m_operatorsColor = SwtResourceManager.getColor(0, 57, 29);
+	private Color m_propertiesColor = SwtResourceManager.getColor(130, 0, 0);
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public String getTitle() {
+		return m_title == null ? "" : m_title;
+	}
+
+	public void setTitle(String title) {
+		m_title = title;
+	}
+
+	public int getRows() {
+		return m_rows;
+	}
+
+	public void setRows(int rows) {
+		m_rows = rows;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Colors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public Color getStringsColor() {
+		return m_stringsColor;
+	}
+
+	public void setStringsColor(Color textColor) {
+		m_stringsColor = textColor;
+	}
+
+	public Color getKeywordsColor() {
+		return m_keywordsColor;
+	}
+
+	public void setKeywordsColor(Color wordColor) {
+		m_keywordsColor = wordColor;
+	}
+
+	public Color getNumbersColor() {
+		return m_numbersColor;
+	}
+
+	public void setNumbersColor(Color digitsColor) {
+		m_numbersColor = digitsColor;
+	}
+
+	public Color getOperatorsColor() {
+		return m_operatorsColor;
+	}
+
+	public void setOperatorsColor(Color operatorsColor) {
+		m_operatorsColor = operatorsColor;
+	}
+
+	public Color getPropertiesColor() {
+		return m_propertiesColor;
+	}
+
+	public void setPropertiesColor(Color propertyColor) {
+		m_propertiesColor = propertyColor;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/el/ElPropertyUiContentProvider.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/el/ElPropertyUiContentProvider.java
index b91865dd7..03bbd4916 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/el/ElPropertyUiContentProvider.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/el/ElPropertyUiContentProvider.java
@@ -28,88 +28,88 @@
  * @coverage bindings.swing.ui
  */
 public abstract class ElPropertyUiContentProvider
-    implements
-      IUiContentProvider,
-      IBeanPropertiesSupport {
-  private final ElPropertyUiConfiguration m_configuration;
-  private ICompleteListener m_listener;
-  private boolean m_enabled;
-  private String m_errorMessage;
-  private Label m_titleLabel;
-  protected SourceViewer m_sourceViewer;
-  private final IDocument m_document = new Document();
+implements
+IUiContentProvider,
+IBeanPropertiesSupport {
+	private final ElPropertyUiConfiguration m_configuration;
+	private ICompleteListener m_listener;
+	private boolean m_enabled;
+	private String m_errorMessage;
+	private Label m_titleLabel;
+	protected SourceViewer m_sourceViewer;
+	private final IDocument m_document = new Document();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ElPropertyUiContentProvider(ElPropertyUiConfiguration configuration) {
-    m_configuration = configuration;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ElPropertyUiContentProvider(ElPropertyUiConfiguration configuration) {
+		m_configuration = configuration;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected final String getText() {
-    return m_document.get();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected final String getText() {
+		return m_document.get();
+	}
 
-  protected final void setText(String text) {
-    m_document.set(text);
-  }
+	protected final void setText(String text) {
+		m_document.set(text);
+	}
 
-  protected final void setEnabled(boolean enabled) {
-    m_enabled = enabled;
-    if (m_titleLabel != null) {
-      m_titleLabel.setEnabled(m_enabled);
-    }
-    if (m_sourceViewer != null) {
-      m_sourceViewer.getControl().setEnabled(m_enabled);
-    }
-  }
+	protected final void setEnabled(boolean enabled) {
+		m_enabled = enabled;
+		if (m_titleLabel != null) {
+			m_titleLabel.setEnabled(m_enabled);
+		}
+		if (m_sourceViewer != null) {
+			m_sourceViewer.getControl().setEnabled(m_enabled);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Complete
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void setCompleteListener(ICompleteListener listener) {
-    m_listener = listener;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Complete
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void setCompleteListener(ICompleteListener listener) {
+		m_listener = listener;
+	}
 
-  public String getErrorMessage() {
-    return m_errorMessage;
-  }
+	public String getErrorMessage() {
+		return m_errorMessage;
+	}
 
-  protected final void setErrorMessage(String message) {
-    m_errorMessage = message;
-    if (m_listener != null) {
-      m_listener.calculateFinish();
-    }
-  }
+	protected final void setErrorMessage(String message) {
+		m_errorMessage = message;
+		if (m_listener != null) {
+			m_listener.calculateFinish();
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public int getNumberOfControls() {
-    return 2;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public int getNumberOfControls() {
+		return 2;
+	}
 
-  public void createContent(Composite parent, int columns) {
-    m_titleLabel = new Label(parent, SWT.NONE);
-    GridDataFactory.create(m_titleLabel).alignHF();
-    m_titleLabel.setText(m_configuration.getTitle());
-    m_titleLabel.setEnabled(m_enabled);
-    //
-    m_sourceViewer = new SourceViewer(parent, null, SWT.BORDER);
-    GridDataFactory.create(m_sourceViewer.getControl()).spanH(columns - 1).hintVC(
-        m_configuration.getRows()).fill();
-    new EvalutionLanguageConfiguration(m_sourceViewer, m_document, m_configuration, this);
-    m_sourceViewer.getControl().setEnabled(m_enabled);
-  }
+	public void createContent(Composite parent, int columns) {
+		m_titleLabel = new Label(parent, SWT.NONE);
+		GridDataFactory.create(m_titleLabel).alignHF();
+		m_titleLabel.setText(m_configuration.getTitle());
+		m_titleLabel.setEnabled(m_enabled);
+		//
+		m_sourceViewer = new SourceViewer(parent, null, SWT.BORDER);
+		GridDataFactory.create(m_sourceViewer.getControl()).spanH(columns - 1).hintVC(
+				m_configuration.getRows()).fill();
+		new EvalutionLanguageConfiguration(m_sourceViewer, m_document, m_configuration, this);
+		m_sourceViewer.getControl().setEnabled(m_enabled);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/el/ErrorCompletionProposal.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/el/ErrorCompletionProposal.java
index 0586c11e4..1983ff219 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/el/ErrorCompletionProposal.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/el/ErrorCompletionProposal.java
@@ -25,42 +25,42 @@
  * @coverage bindings.swing.ui
  */
 public final class ErrorCompletionProposal implements ICompletionProposal {
-  private final String m_message;
+	private final String m_message;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ErrorCompletionProposal(Throwable e) {
-    m_message = e.toString();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ErrorCompletionProposal(Throwable e) {
+		m_message = e.toString();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ICompletionProposal
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void apply(IDocument document) {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ICompletionProposal
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void apply(IDocument document) {
+	}
 
-  public String getDisplayString() {
-    return m_message;
-  }
+	public String getDisplayString() {
+		return m_message;
+	}
 
-  public Image getImage() {
-    return Activator.getImage("errors.gif");
-  }
+	public Image getImage() {
+		return Activator.getImage("errors.gif");
+	}
 
-  public Point getSelection(IDocument document) {
-    return null;
-  }
+	public Point getSelection(IDocument document) {
+		return null;
+	}
 
-  public String getAdditionalProposalInfo() {
-    return null;
-  }
+	public String getAdditionalProposalInfo() {
+		return null;
+	}
 
-  public IContextInformation getContextInformation() {
-    return null;
-  }
+	public IContextInformation getContextInformation() {
+		return null;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/el/EvalutionLanguageConfiguration.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/el/EvalutionLanguageConfiguration.java
index 76047841f..f0c8c1323 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/el/EvalutionLanguageConfiguration.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/el/EvalutionLanguageConfiguration.java
@@ -42,115 +42,115 @@
  * @coverage bindings.swing.ui
  */
 public final class EvalutionLanguageConfiguration extends SourceViewerConfiguration {
-  private static final String EXPRESSION_TYPE = "__expression_type_";
-  private final ElPropertyUiConfiguration m_configuration;
-  private final IBeanPropertiesSupport m_propertiesSupport;
+	private static final String EXPRESSION_TYPE = "__expression_type_";
+	private final ElPropertyUiConfiguration m_configuration;
+	private final IBeanPropertiesSupport m_propertiesSupport;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public EvalutionLanguageConfiguration(SourceViewer sourceViewer,
-      IDocument document,
-      ElPropertyUiConfiguration configuration,
-      IBeanPropertiesSupport propertiesSupport) {
-    m_configuration = configuration;
-    m_propertiesSupport = propertiesSupport;
-    sourceViewer.configure(this);
-    configureDocument(document);
-    sourceViewer.setDocument(document);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public EvalutionLanguageConfiguration(SourceViewer sourceViewer,
+			IDocument document,
+			ElPropertyUiConfiguration configuration,
+			IBeanPropertiesSupport propertiesSupport) {
+		m_configuration = configuration;
+		m_propertiesSupport = propertiesSupport;
+		sourceViewer.configure(this);
+		configureDocument(document);
+		sourceViewer.setDocument(document);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Document
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static void configureDocument(IDocument document) {
-    // token
-    IToken token = new Token(EXPRESSION_TYPE);
-    IPredicateRule[] rules = new IPredicateRule[2];
-    rules[0] = new MultiLineRule("${", "}", token);
-    rules[1] = new MultiLineRule("#{", "}", token);
-    // scanner
-    RuleBasedPartitionScanner partitionScanner = new RuleBasedPartitionScanner();
-    partitionScanner.setPredicateRules(rules);
-    IDocumentPartitioner partitioner =
-        new FastPartitioner(partitionScanner, new String[]{EXPRESSION_TYPE});
-    // configure document
-    partitioner.connect(document);
-    document.setDocumentPartitioner(partitioner);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Document
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static void configureDocument(IDocument document) {
+		// token
+		IToken token = new Token(EXPRESSION_TYPE);
+		IPredicateRule[] rules = new IPredicateRule[2];
+		rules[0] = new MultiLineRule("${", "}", token);
+		rules[1] = new MultiLineRule("#{", "}", token);
+		// scanner
+		RuleBasedPartitionScanner partitionScanner = new RuleBasedPartitionScanner();
+		partitionScanner.setPredicateRules(rules);
+		IDocumentPartitioner partitioner =
+				new FastPartitioner(partitionScanner, new String[]{EXPRESSION_TYPE});
+		// configure document
+		partitioner.connect(document);
+		document.setDocumentPartitioner(partitioner);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // SourceViewerConfiguration
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String[] getConfiguredContentTypes(ISourceViewer sourceViewer) {
-    return new String[]{IDocument.DEFAULT_CONTENT_TYPE, EXPRESSION_TYPE};
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// SourceViewerConfiguration
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String[] getConfiguredContentTypes(ISourceViewer sourceViewer) {
+		return new String[]{IDocument.DEFAULT_CONTENT_TYPE, EXPRESSION_TYPE};
+	}
 
-  @Override
-  public IPresentationReconciler getPresentationReconciler(ISourceViewer sourceViewer) {
-    PresentationReconciler reconciler = new PresentationReconciler();
-    // EL language rules
-    configureExpressionType(reconciler, sourceViewer);
-    // text rules
-    configureDefaultType(reconciler);
-    return reconciler;
-  }
+	@Override
+	public IPresentationReconciler getPresentationReconciler(ISourceViewer sourceViewer) {
+		PresentationReconciler reconciler = new PresentationReconciler();
+		// EL language rules
+		configureExpressionType(reconciler, sourceViewer);
+		// text rules
+		configureDefaultType(reconciler);
+		return reconciler;
+	}
 
-  private void configureExpressionType(PresentationReconciler reconciler, ISourceViewer sourceViewer) {
-    RuleBasedScanner scanner = new RuleBasedScanner();
-    scanner.setDefaultReturnToken(new Token(new TextAttribute(m_configuration.getPropertiesColor())));
-    // EL language rules
-    IRule keywordsRule = new KeywordsRule(sourceViewer, m_configuration);
-    IRule operatorsRule = new OperatorsRule(m_configuration);
-    IRule numbersRule = new NumbersRule(m_configuration);
-    scanner.setRules(new IRule[]{keywordsRule, operatorsRule, numbersRule});
-    // repairer
-    DefaultDamagerRepairer repairer = new DefaultDamagerRepairer(scanner);
-    reconciler.setDamager(repairer, EXPRESSION_TYPE);
-    reconciler.setRepairer(repairer, EXPRESSION_TYPE);
-  }
+	private void configureExpressionType(PresentationReconciler reconciler, ISourceViewer sourceViewer) {
+		RuleBasedScanner scanner = new RuleBasedScanner();
+		scanner.setDefaultReturnToken(new Token(new TextAttribute(m_configuration.getPropertiesColor())));
+		// EL language rules
+		IRule keywordsRule = new KeywordsRule(sourceViewer, m_configuration);
+		IRule operatorsRule = new OperatorsRule(m_configuration);
+		IRule numbersRule = new NumbersRule(m_configuration);
+		scanner.setRules(new IRule[]{keywordsRule, operatorsRule, numbersRule});
+		// repairer
+		DefaultDamagerRepairer repairer = new DefaultDamagerRepairer(scanner);
+		reconciler.setDamager(repairer, EXPRESSION_TYPE);
+		reconciler.setRepairer(repairer, EXPRESSION_TYPE);
+	}
 
-  private void configureDefaultType(PresentationReconciler reconciler) {
-    // scanner
-    RuleBasedScanner scanner = new RuleBasedScanner();
-    scanner.setDefaultReturnToken(new Token(new TextAttribute(m_configuration.getStringsColor())));
-    // repairer
-    DefaultDamagerRepairer repairer = new DefaultDamagerRepairer(scanner);
-    reconciler.setDamager(repairer, IDocument.DEFAULT_CONTENT_TYPE);
-    reconciler.setRepairer(repairer, IDocument.DEFAULT_CONTENT_TYPE);
-  }
+	private void configureDefaultType(PresentationReconciler reconciler) {
+		// scanner
+		RuleBasedScanner scanner = new RuleBasedScanner();
+		scanner.setDefaultReturnToken(new Token(new TextAttribute(m_configuration.getStringsColor())));
+		// repairer
+		DefaultDamagerRepairer repairer = new DefaultDamagerRepairer(scanner);
+		reconciler.setDamager(repairer, IDocument.DEFAULT_CONTENT_TYPE);
+		reconciler.setRepairer(repairer, IDocument.DEFAULT_CONTENT_TYPE);
+	}
 
-  @Override
-  public IContentAssistant getContentAssistant(ISourceViewer sourceViewer) {
-    final ContentAssistant contentAssistant = new ContentAssistant();
-    // sets processors
-    contentAssistant.setContentAssistProcessor(
-        new ContentAssistProcessor(m_propertiesSupport, true),
-        IDocument.DEFAULT_CONTENT_TYPE);
-    contentAssistant.setContentAssistProcessor(new ContentAssistProcessor(m_propertiesSupport,
-        false), EXPRESSION_TYPE);
-    // configure
-    contentAssistant.enableAutoActivation(true);
-    contentAssistant.enableAutoInsert(true);
-    contentAssistant.setAutoActivationDelay(200);
-    contentAssistant.setStatusLineVisible(true);
-    contentAssistant.setStatusMessage(Messages.EvalutionLanguageConfiguration_contentAssistMessage);
-    // CTRL + SPACE completion
-    sourceViewer.getTextWidget().addKeyListener(new KeyAdapter() {
-      @Override
-      public void keyPressed(KeyEvent e) {
-        if (e.character == ' ' && (e.stateMask & SWT.CTRL) != 0) {
-          contentAssistant.showPossibleCompletions();
-        }
-      }
-    });
-    return contentAssistant;
-  }
+	@Override
+	public IContentAssistant getContentAssistant(ISourceViewer sourceViewer) {
+		final ContentAssistant contentAssistant = new ContentAssistant();
+		// sets processors
+		contentAssistant.setContentAssistProcessor(
+				new ContentAssistProcessor(m_propertiesSupport, true),
+				IDocument.DEFAULT_CONTENT_TYPE);
+		contentAssistant.setContentAssistProcessor(new ContentAssistProcessor(m_propertiesSupport,
+				false), EXPRESSION_TYPE);
+		// configure
+		contentAssistant.enableAutoActivation(true);
+		contentAssistant.enableAutoInsert(true);
+		contentAssistant.setAutoActivationDelay(200);
+		contentAssistant.setStatusLineVisible(true);
+		contentAssistant.setStatusMessage(Messages.EvalutionLanguageConfiguration_contentAssistMessage);
+		// CTRL + SPACE completion
+		sourceViewer.getTextWidget().addKeyListener(new KeyAdapter() {
+			@Override
+			public void keyPressed(KeyEvent e) {
+				if (e.character == ' ' && (e.stateMask & SWT.CTRL) != 0) {
+					contentAssistant.showPossibleCompletions();
+				}
+			}
+		});
+		return contentAssistant;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/el/IBeanPropertiesSupport.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/el/IBeanPropertiesSupport.java
index 7edc8934f..2400c676a 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/el/IBeanPropertiesSupport.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/el/IBeanPropertiesSupport.java
@@ -16,8 +16,8 @@
  * @coverage bindings.swing.ui
  */
 public interface IBeanPropertiesSupport {
-  /**
-   * @return {@link Class} of edit {@code Java Bean}.
-   */
-  Class<?> getTopLevelBean() throws Exception;
+	/**
+	 * @return {@link Class} of edit {@code Java Bean}.
+	 */
+	Class<?> getTopLevelBean() throws Exception;
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/el/KeywordsRule.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/el/KeywordsRule.java
index 46d781c16..34527f216 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/el/KeywordsRule.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/el/KeywordsRule.java
@@ -27,122 +27,122 @@
  * @coverage bindings.swing.ui
  */
 public class KeywordsRule implements IRule {
-  private static final int[] AND = {'n', 'd', ' '};
-  private static final int[] DIV = {'i', 'v', ' '};
-  private static final int[] EMPTY = {'p', 't', 'y', ' '};
-  private static final int[] FALSE = {'a', 'l', 's', 'e', ' '};
-  private static final int[] INSTANCE_OF = {'n', 's', 't', 'a', 'n', 'c', 'e', 'o', 'f', ' '};
-  private static final int[] NOT = {'t', ' '};
-  private static final int[] NULL = {'l', 'l', ' '};
-  private static final int[] MOD = {'o', 'd', ' '};
-  private static final int[] OR = {'r', ' '};
-  private static final int[] TRUE = {'r', 'u', 'e', ' '};
-  private final IToken m_token;
+	private static final int[] AND = {'n', 'd', ' '};
+	private static final int[] DIV = {'i', 'v', ' '};
+	private static final int[] EMPTY = {'p', 't', 'y', ' '};
+	private static final int[] FALSE = {'a', 'l', 's', 'e', ' '};
+	private static final int[] INSTANCE_OF = {'n', 's', 't', 'a', 'n', 'c', 'e', 'o', 'f', ' '};
+	private static final int[] NOT = {'t', ' '};
+	private static final int[] NULL = {'l', 'l', ' '};
+	private static final int[] MOD = {'o', 'd', ' '};
+	private static final int[] OR = {'r', ' '};
+	private static final int[] TRUE = {'r', 'u', 'e', ' '};
+	private final IToken m_token;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public KeywordsRule(ISourceViewer sourceViewer, ElPropertyUiConfiguration configuration) {
-    m_token =
-        new Token(new TextAttribute(configuration.getKeywordsColor(),
-            null,
-            SWT.NORMAL,
-            SwtResourceManager.getBoldFont(sourceViewer.getTextWidget().getFont())));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public KeywordsRule(ISourceViewer sourceViewer, ElPropertyUiConfiguration configuration) {
+		m_token =
+				new Token(new TextAttribute(configuration.getKeywordsColor(),
+						null,
+						SWT.NORMAL,
+						SwtResourceManager.getBoldFont(sourceViewer.getTextWidget().getFont())));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IRule
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public IToken evaluate(ICharacterScanner scanner) {
-    CharacterScannerWrapper wrapper = new CharacterScannerWrapper(scanner);
-    if (wrapper.test(' ')) {
-      switch (wrapper.read()) {
-        case 'a' :
-          if (wrapper.test(AND)) {
-            return m_token;
-          }
-          break;
-        case 'd' :
-          if (wrapper.test(DIV)) {
-            return m_token;
-          }
-          break;
-        case 'e' :
-          switch (wrapper.read()) {
-            case 'm' :
-              if (wrapper.test(EMPTY)) {
-                return m_token;
-              }
-              break;
-            case 'q' :
-              if (wrapper.test(' ')) {
-                return m_token;
-              }
-              break;
-          }
-          break;
-        case 'f' :
-          if (wrapper.test(FALSE)) {
-            return m_token;
-          }
-          break;
-        case 'g' :
-        case 'l' :
-          switch (wrapper.read()) {
-            case 'e' :
-            case 't' :
-              if (wrapper.test(' ')) {
-                return m_token;
-              }
-              break;
-          }
-          break;
-        case 'i' :
-          if (wrapper.test(INSTANCE_OF)) {
-            return m_token;
-          }
-          break;
-        case 'n' :
-          switch (wrapper.read()) {
-            case 'e' :
-              if (wrapper.test(' ')) {
-                return m_token;
-              }
-              break;
-            case 'o' :
-              if (wrapper.test(NOT)) {
-                return m_token;
-              }
-              break;
-            case 'u' :
-              if (wrapper.test(NULL)) {
-                return m_token;
-              }
-              break;
-          }
-          break;
-        case 'm' :
-          if (wrapper.test(MOD)) {
-            return m_token;
-          }
-          break;
-        case 'o' :
-          if (wrapper.test(OR)) {
-            return m_token;
-          }
-          break;
-        case 't' :
-          if (wrapper.test(TRUE)) {
-            return m_token;
-          }
-          break;
-      }
-    }
-    wrapper.unread();
-    return Token.UNDEFINED;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IRule
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public IToken evaluate(ICharacterScanner scanner) {
+		CharacterScannerWrapper wrapper = new CharacterScannerWrapper(scanner);
+		if (wrapper.test(' ')) {
+			switch (wrapper.read()) {
+			case 'a' :
+				if (wrapper.test(AND)) {
+					return m_token;
+				}
+				break;
+			case 'd' :
+				if (wrapper.test(DIV)) {
+					return m_token;
+				}
+				break;
+			case 'e' :
+				switch (wrapper.read()) {
+				case 'm' :
+					if (wrapper.test(EMPTY)) {
+						return m_token;
+					}
+					break;
+				case 'q' :
+					if (wrapper.test(' ')) {
+						return m_token;
+					}
+					break;
+				}
+				break;
+			case 'f' :
+				if (wrapper.test(FALSE)) {
+					return m_token;
+				}
+				break;
+			case 'g' :
+			case 'l' :
+				switch (wrapper.read()) {
+				case 'e' :
+				case 't' :
+					if (wrapper.test(' ')) {
+						return m_token;
+					}
+					break;
+				}
+				break;
+			case 'i' :
+				if (wrapper.test(INSTANCE_OF)) {
+					return m_token;
+				}
+				break;
+			case 'n' :
+				switch (wrapper.read()) {
+				case 'e' :
+					if (wrapper.test(' ')) {
+						return m_token;
+					}
+					break;
+				case 'o' :
+					if (wrapper.test(NOT)) {
+						return m_token;
+					}
+					break;
+				case 'u' :
+					if (wrapper.test(NULL)) {
+						return m_token;
+					}
+					break;
+				}
+				break;
+			case 'm' :
+				if (wrapper.test(MOD)) {
+					return m_token;
+				}
+				break;
+			case 'o' :
+				if (wrapper.test(OR)) {
+					return m_token;
+				}
+				break;
+			case 't' :
+				if (wrapper.test(TRUE)) {
+					return m_token;
+				}
+				break;
+			}
+		}
+		wrapper.unread();
+		return Token.UNDEFINED;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/el/NumbersRule.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/el/NumbersRule.java
index 73195fca4..ed4ea0368 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/el/NumbersRule.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/el/NumbersRule.java
@@ -23,30 +23,30 @@
  * @coverage bindings.swing.ui
  */
 public final class NumbersRule implements IRule {
-  private final IToken m_token;
+	private final IToken m_token;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public NumbersRule(ElPropertyUiConfiguration configuration) {
-    m_token = new Token(new TextAttribute(configuration.getNumbersColor()));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public NumbersRule(ElPropertyUiConfiguration configuration) {
+		m_token = new Token(new TextAttribute(configuration.getNumbersColor()));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IRule
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public IToken evaluate(ICharacterScanner scanner) {
-    if (Character.isDigit(scanner.read())) {
-      while (Character.isDigit(scanner.read())) {
-      }
-      scanner.unread();
-      return m_token;
-    }
-    scanner.unread();
-    return Token.UNDEFINED;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IRule
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public IToken evaluate(ICharacterScanner scanner) {
+		if (Character.isDigit(scanner.read())) {
+			while (Character.isDigit(scanner.read())) {
+			}
+			scanner.unread();
+			return m_token;
+		}
+		scanner.unread();
+		return Token.UNDEFINED;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/el/OperatorsRule.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/el/OperatorsRule.java
index 8afecae59..a243ce10d 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/el/OperatorsRule.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/contentproviders/el/OperatorsRule.java
@@ -23,64 +23,64 @@
  * @coverage bindings.swing.ui
  */
 public final class OperatorsRule implements IRule {
-  private final IToken m_token;
+	private final IToken m_token;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public OperatorsRule(ElPropertyUiConfiguration configuration) {
-    m_token = new Token(new TextAttribute(configuration.getOperatorsColor()));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public OperatorsRule(ElPropertyUiConfiguration configuration) {
+		m_token = new Token(new TextAttribute(configuration.getOperatorsColor()));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IRule
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public IToken evaluate(ICharacterScanner scanner) {
-    CharacterScannerWrapper wrapper = new CharacterScannerWrapper(scanner);
-    switch (wrapper.read()) {
-      case '{' :
-      case '}' :
-      case '[' :
-      case ']' :
-      case '$' :
-      case '#' :
-      case '%' :
-      case '?' :
-      case ':' :
-      case '.' :
-      case '*' :
-      case '+' :
-      case '-' :
-      case '/' :
-        return m_token;
-      case '>' :
-      case '<' :
-      case '!' :
-        if (!wrapper.test('=')) {
-          scanner.unread();
-        }
-        return m_token;
-      case '=' :
-        if (wrapper.test('=')) {
-          return m_token;
-        }
-        break;
-      case '&' :
-        if (wrapper.test('&')) {
-          return m_token;
-        }
-        break;
-      case '|' :
-        if (wrapper.test('|')) {
-          return m_token;
-        }
-        break;
-    }
-    wrapper.unread();
-    return Token.UNDEFINED;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IRule
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public IToken evaluate(ICharacterScanner scanner) {
+		CharacterScannerWrapper wrapper = new CharacterScannerWrapper(scanner);
+		switch (wrapper.read()) {
+		case '{' :
+		case '}' :
+		case '[' :
+		case ']' :
+		case '$' :
+		case '#' :
+		case '%' :
+		case '?' :
+		case ':' :
+		case '.' :
+		case '*' :
+		case '+' :
+		case '-' :
+		case '/' :
+			return m_token;
+		case '>' :
+		case '<' :
+		case '!' :
+			if (!wrapper.test('=')) {
+				scanner.unread();
+			}
+			return m_token;
+		case '=' :
+			if (wrapper.test('=')) {
+				return m_token;
+			}
+			break;
+		case '&' :
+			if (wrapper.test('&')) {
+				return m_token;
+			}
+			break;
+		case '|' :
+			if (wrapper.test('|')) {
+				return m_token;
+			}
+			break;
+		}
+		wrapper.unread();
+		return Token.UNDEFINED;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/filters/HideAdvancedPropertyFilter.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/filters/HideAdvancedPropertyFilter.java
index ff0ce9598..c0325dcb9 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/filters/HideAdvancedPropertyFilter.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/filters/HideAdvancedPropertyFilter.java
@@ -26,24 +26,24 @@
  * @coverage bindings.swing.ui
  */
 public final class HideAdvancedPropertyFilter extends PropertyFilter {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public HideAdvancedPropertyFilter() {
-    super(Messages.HideAdvancedPropertyFilter_title, Activator.getImage("hide_advanced.png"));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public HideAdvancedPropertyFilter() {
+		super(Messages.HideAdvancedPropertyFilter_title, Activator.getImage("hide_advanced.png"));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // PropertyFilter
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean select(Viewer viewer, IObserveInfo propertyObserve) {
-    IObserveDecoration observeDecoration = (IObserveDecoration) propertyObserve;
-    IObserveDecorator decorator = observeDecoration.getDecorator();
-    return decorator != IObserveDecorator.ITALIC && decorator != IObserveDecorator.HIDDEN;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// PropertyFilter
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean select(Viewer viewer, IObserveInfo propertyObserve) {
+		IObserveDecoration observeDecoration = (IObserveDecoration) propertyObserve;
+		IObserveDecorator decorator = observeDecoration.getDecorator();
+		return decorator != IObserveDecorator.ITALIC && decorator != IObserveDecorator.HIDDEN;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/filters/ShowAdvancedPropertyFilter.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/filters/ShowAdvancedPropertyFilter.java
index cf64c2579..162555d78 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/filters/ShowAdvancedPropertyFilter.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/filters/ShowAdvancedPropertyFilter.java
@@ -26,23 +26,23 @@
  * @coverage bindings.swing.ui
  */
 public final class ShowAdvancedPropertyFilter extends PropertyFilter {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ShowAdvancedPropertyFilter() {
-    super(Messages.ShowAdvancedPropertyFilter_title, Activator.getImage("show_advanced.png"));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ShowAdvancedPropertyFilter() {
+		super(Messages.ShowAdvancedPropertyFilter_title, Activator.getImage("show_advanced.png"));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // PropertyFilter
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean select(Viewer viewer, IObserveInfo propertyObserve) {
-    IObserveDecoration observeDecoration = (IObserveDecoration) propertyObserve;
-    return observeDecoration.getDecorator() != IObserveDecorator.HIDDEN;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// PropertyFilter
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean select(Viewer viewer, IObserveInfo propertyObserve) {
+		IObserveDecoration observeDecoration = (IObserveDecoration) propertyObserve;
+		return observeDecoration.getDecorator() != IObserveDecorator.HIDDEN;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/filters/TypesPropertyFilter.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/filters/TypesPropertyFilter.java
index b0cacf7ff..ad547ef53 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/filters/TypesPropertyFilter.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/filters/TypesPropertyFilter.java
@@ -26,30 +26,30 @@
  * @coverage bindings.swing.ui
  */
 public final class TypesPropertyFilter
-    extends
-      org.eclipse.wb.internal.core.databinding.ui.filter.TypesPropertyFilter {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public TypesPropertyFilter(String name, Image image, Class<?>... types) {
-    super(name, image, types);
-  }
+extends
+org.eclipse.wb.internal.core.databinding.ui.filter.TypesPropertyFilter {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public TypesPropertyFilter(String name, Image image, Class<?>... types) {
+		super(name, image, types);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // PropertyFilter
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean select(Viewer viewer, IObserveInfo propertyObserve) {
-    ObserveInfo observe = (ObserveInfo) propertyObserve;
-    if (observe.getParent() instanceof BeanPropertyObserveInfo) {
-      return true;
-    }
-    return observe instanceof ObjectPropertyObserveInfo
-        || observe instanceof ElPropertyObserveInfo
-        || select(observe.getObjectClass());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// PropertyFilter
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean select(Viewer viewer, IObserveInfo propertyObserve) {
+		ObserveInfo observe = (ObserveInfo) propertyObserve;
+		if (observe.getParent() instanceof BeanPropertyObserveInfo) {
+			return true;
+		}
+		return observe instanceof ObjectPropertyObserveInfo
+				|| observe instanceof ElPropertyObserveInfo
+				|| select(observe.getObjectClass());
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/property/BindingProperty.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/property/BindingProperty.java
index 02c9d6c24..9db285ac5 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/property/BindingProperty.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/property/BindingProperty.java
@@ -21,23 +21,23 @@
  * @coverage bindings.swing.ui.properties
  */
 public class BindingProperty extends AbstractBindingProperty {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public BindingProperty(Context context) {
-    super(context);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public BindingProperty(Context context) {
+		super(context);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AbstractBindingProperty
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getText() throws Exception {
-    int column = m_isTarget ? 2 : 1;
-    return BindingLabelProvider.INSTANCE.getColumnText(m_binding, column);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AbstractBindingProperty
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getText() throws Exception {
+		int column = m_isTarget ? 2 : 1;
+		return BindingLabelProvider.INSTANCE.getColumnText(m_binding, column);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/property/BindingsProperty.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/property/BindingsProperty.java
index 78536e01d..2c8bf08f9 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/property/BindingsProperty.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/property/BindingsProperty.java
@@ -43,93 +43,93 @@
  * @coverage bindings.swing.ui.properties
  */
 public class BindingsProperty extends AbstractBindingsProperty {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public BindingsProperty(Context context) {
-    super(context);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public BindingsProperty(Context context) {
+		super(context);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AbstractBindingsProperty
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Property[] createProperties() throws Exception {
-    DatabindingsProvider provider = (DatabindingsProvider) m_context.provider;
-    if (m_context.objectInfo.getParent() instanceof NonVisualBeanContainerInfo) {
-      BeansObserveTypeContainer container =
-          (BeansObserveTypeContainer) provider.getContainer(ObserveType.BEANS);
-      m_context.observeObject = container.resolve(m_context.javaInfo());
-    } else {
-      ComponentsObserveTypeContainer container =
-          (ComponentsObserveTypeContainer) provider.getContainer(ObserveType.WIDGETS);
-      m_context.observeObject = container.resolve(m_context.javaInfo());
-    }
-    if (m_context.observeObject == null) {
-      return new Property[0];
-    }
-    //
-    List<IObserveInfo> observes =
-        Lists.newArrayList(m_context.observeObject.getChildren(ChildrenContext.ChildrenForPropertiesTable));
-    for (Iterator<IObserveInfo> I = observes.iterator(); I.hasNext();) {
-      if (!includeProperty(I.next())) {
-        I.remove();
-      }
-    }
-    //
-    Property[] properties = new Property[observes.size()];
-    for (int i = 0; i < properties.length; i++) {
-      ObserveInfo observeProperty = (ObserveInfo) observes.get(i);
-      if (observeProperty.getCreationType() == ObserveCreationType.SelfProperty) {
-        switch (ComponentsObserveTypeContainer.getCreationType(m_context.javaInfo().getDescription().getComponentClass())) {
-          case JListBinding :
-            properties[i] = new JListSelfObserveProperty(m_context, observeProperty);
-            continue;
-          case JTableBinding :
-            properties[i] = new JTableSelfObserveProperty(m_context, observeProperty);
-            continue;
-          case JComboBoxBinding :
-            properties[i] = new JComboBoxSelfObserveProperty(m_context, observeProperty);
-            continue;
-        }
-      }
-      properties[i] = new ObserveProperty(m_context, observeProperty);
-    }
-    return properties;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AbstractBindingsProperty
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Property[] createProperties() throws Exception {
+		DatabindingsProvider provider = (DatabindingsProvider) m_context.provider;
+		if (m_context.objectInfo.getParent() instanceof NonVisualBeanContainerInfo) {
+			BeansObserveTypeContainer container =
+					(BeansObserveTypeContainer) provider.getContainer(ObserveType.BEANS);
+			m_context.observeObject = container.resolve(m_context.javaInfo());
+		} else {
+			ComponentsObserveTypeContainer container =
+					(ComponentsObserveTypeContainer) provider.getContainer(ObserveType.WIDGETS);
+			m_context.observeObject = container.resolve(m_context.javaInfo());
+		}
+		if (m_context.observeObject == null) {
+			return new Property[0];
+		}
+		//
+		List<IObserveInfo> observes =
+				Lists.newArrayList(m_context.observeObject.getChildren(ChildrenContext.ChildrenForPropertiesTable));
+		for (Iterator<IObserveInfo> I = observes.iterator(); I.hasNext();) {
+			if (!includeProperty(I.next())) {
+				I.remove();
+			}
+		}
+		//
+		Property[] properties = new Property[observes.size()];
+		for (int i = 0; i < properties.length; i++) {
+			ObserveInfo observeProperty = (ObserveInfo) observes.get(i);
+			if (observeProperty.getCreationType() == ObserveCreationType.SelfProperty) {
+				switch (ComponentsObserveTypeContainer.getCreationType(m_context.javaInfo().getDescription().getComponentClass())) {
+				case JListBinding :
+					properties[i] = new JListSelfObserveProperty(m_context, observeProperty);
+					continue;
+				case JTableBinding :
+					properties[i] = new JTableSelfObserveProperty(m_context, observeProperty);
+					continue;
+				case JComboBoxBinding :
+					properties[i] = new JComboBoxSelfObserveProperty(m_context, observeProperty);
+					continue;
+				}
+			}
+			properties[i] = new ObserveProperty(m_context, observeProperty);
+		}
+		return properties;
+	}
 
-  private static boolean includeProperty(IObserveInfo observe) {
-    IObserveDecoration decoration = (IObserveDecoration) observe;
-    IObserveDecorator decorator = decoration.getDecorator();
-    return decorator == IObserveDecorator.BOLD || decorator == IObserveDecorator.DEFAULT;
-  }
+	private static boolean includeProperty(IObserveInfo observe) {
+		IObserveDecoration decoration = (IObserveDecoration) observe;
+		IObserveDecorator decorator = decoration.getDecorator();
+		return decorator == IObserveDecorator.BOLD || decorator == IObserveDecorator.DEFAULT;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Menu
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected boolean checkEquals(IObserveInfo iobserve) throws Exception {
-    String reference = JavaInfoReferenceProvider.getReference(m_context.javaInfo());
-    ObserveInfo observe = (ObserveInfo) iobserve;
-    return reference.equals(observe.getReference());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Menu
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected boolean checkEquals(IObserveInfo iobserve) throws Exception {
+		String reference = JavaInfoReferenceProvider.getReference(m_context.javaInfo());
+		ObserveInfo observe = (ObserveInfo) iobserve;
+		return reference.equals(observe.getReference());
+	}
 
-  @Override
-  protected void addBindingAction(IMenuManager menu,
-      IBindingInfo binding,
-      IObserveInfo observeProperty,
-      boolean isTarget) throws Exception {
-    BindingAction action = new BindingAction(m_context, binding);
-    action.setText(observeProperty.getPresentation().getText()
-        + ": "
-        + BindingLabelProvider.INSTANCE.getColumnText(binding, isTarget ? 2 : 1));
-    action.setIcon(BindingLabelProvider.INSTANCE.getColumnImage(binding, 0));
-    menu.add(action);
-  }
+	@Override
+	protected void addBindingAction(IMenuManager menu,
+			IBindingInfo binding,
+			IObserveInfo observeProperty,
+			boolean isTarget) throws Exception {
+		BindingAction action = new BindingAction(m_context, binding);
+		action.setText(observeProperty.getPresentation().getText()
+				+ ": "
+				+ BindingLabelProvider.INSTANCE.getColumnText(binding, isTarget ? 2 : 1));
+		action.setIcon(BindingLabelProvider.INSTANCE.getColumnImage(binding, 0));
+		menu.add(action);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/property/JComboBoxSelfObserveProperty.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/property/JComboBoxSelfObserveProperty.java
index e62cb7502..0fc39394f 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/property/JComboBoxSelfObserveProperty.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/property/JComboBoxSelfObserveProperty.java
@@ -28,35 +28,35 @@
  * @coverage bindings.swing.ui.properties
  */
 public class JComboBoxSelfObserveProperty extends SingleObserveBindingProperty {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public JComboBoxSelfObserveProperty(Context context, IObserveInfo observeProperty)
-      throws Exception {
-    super(context, observeProperty);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public JComboBoxSelfObserveProperty(Context context, IObserveInfo observeProperty)
+			throws Exception {
+		super(context, observeProperty);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // SingleObserveBindingProperty
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected IBindingInfo getBinding() throws Exception {
-    ObserveInfo observeProperty = (ObserveInfo) m_observeProperty;
-    List<BindingInfo> bindings = observeProperty.getBindings();
-    return bindings.isEmpty() ? null : bindings.get(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// SingleObserveBindingProperty
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected IBindingInfo getBinding() throws Exception {
+		ObserveInfo observeProperty = (ObserveInfo) m_observeProperty;
+		List<BindingInfo> bindings = observeProperty.getBindings();
+		return bindings.isEmpty() ? null : bindings.get(0);
+	}
 
-  @Override
-  protected String getText() throws Exception {
-    IBindingInfo binding = getBinding();
-    if (binding == null) {
-      return "";
-    }
-    int column = binding.getTargetProperty() == m_observeProperty ? 2 : 1;
-    return BindingLabelProvider.INSTANCE.getColumnText(binding, column);
-  }
+	@Override
+	protected String getText() throws Exception {
+		IBindingInfo binding = getBinding();
+		if (binding == null) {
+			return "";
+		}
+		int column = binding.getTargetProperty() == m_observeProperty ? 2 : 1;
+		return BindingLabelProvider.INSTANCE.getColumnText(binding, column);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/property/JListSelfObserveProperty.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/property/JListSelfObserveProperty.java
index e89cc5b7f..675de3873 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/property/JListSelfObserveProperty.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/property/JListSelfObserveProperty.java
@@ -24,32 +24,32 @@
  * @coverage bindings.swing.ui.properties
  */
 public class JListSelfObserveProperty extends ObserveProperty {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public JListSelfObserveProperty(Context context, IObserveInfo observeProperty) throws Exception {
-    super(context, observeProperty);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public JListSelfObserveProperty(Context context, IObserveInfo observeProperty) throws Exception {
+		super(context, observeProperty);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Operation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void createBinding() throws Exception {
-    if (isModified()) {
-      for (AbstractBindingProperty property : m_bindingProperties) {
-        if (property.getBinding() instanceof JListBindingInfo) {
-          property.editBinding();
-          return;
-        }
-      }
-      Assert.fail(Messages.JListSelfObserveProperty_errNotFound);
-    } else {
-      super.createBinding();
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Operation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void createBinding() throws Exception {
+		if (isModified()) {
+			for (AbstractBindingProperty property : m_bindingProperties) {
+				if (property.getBinding() instanceof JListBindingInfo) {
+					property.editBinding();
+					return;
+				}
+			}
+			Assert.fail(Messages.JListSelfObserveProperty_errNotFound);
+		} else {
+			super.createBinding();
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/property/JTableSelfObserveProperty.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/property/JTableSelfObserveProperty.java
index 74cf8843a..d084367ac 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/property/JTableSelfObserveProperty.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/property/JTableSelfObserveProperty.java
@@ -24,32 +24,32 @@
  * @coverage bindings.swing.ui.properties
  */
 public class JTableSelfObserveProperty extends ObserveProperty {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public JTableSelfObserveProperty(Context context, IObserveInfo observeProperty) throws Exception {
-    super(context, observeProperty);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public JTableSelfObserveProperty(Context context, IObserveInfo observeProperty) throws Exception {
+		super(context, observeProperty);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Operation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void createBinding() throws Exception {
-    if (isModified()) {
-      for (AbstractBindingProperty property : m_bindingProperties) {
-        if (property.getBinding() instanceof JTableBindingInfo) {
-          property.editBinding();
-          return;
-        }
-      }
-      Assert.fail(Messages.JTableSelfObserveProperty_errNotFound);
-    } else {
-      super.createBinding();
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Operation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void createBinding() throws Exception {
+		if (isModified()) {
+			for (AbstractBindingProperty property : m_bindingProperties) {
+				if (property.getBinding() instanceof JTableBindingInfo) {
+					property.editBinding();
+					return;
+				}
+			}
+			Assert.fail(Messages.JTableSelfObserveProperty_errNotFound);
+		} else {
+			super.createBinding();
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/property/JavaInfoPropertiesManager.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/property/JavaInfoPropertiesManager.java
index 30e9855be..63978b8d2 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/property/JavaInfoPropertiesManager.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/property/JavaInfoPropertiesManager.java
@@ -28,35 +28,35 @@
  * @coverage bindings.swing.ui.properties
  */
 public class JavaInfoPropertiesManager extends AbstractJavaInfoPropertiesManager {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public JavaInfoPropertiesManager(IDatabindingsProvider provider, JavaInfo javaInfoRoot) {
-    super(provider, javaInfoRoot);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public JavaInfoPropertiesManager(IDatabindingsProvider provider, JavaInfo javaInfoRoot) {
+		super(provider, javaInfoRoot);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AbstractJavaInfoPropertiesManager
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected boolean isCreateProperty(ObjectInfo objectInfo) throws Exception {
-    JavaInfo javaInfo = (JavaInfo) objectInfo;
-    if (JavaInfoUtils.hasTrueParameter(javaInfo, "databinding.disable")) {
-      return false;
-    }
-    if (!DataBindingsCodeUtils.isDBAvailable(javaInfo.getEditor().getJavaProject())) {
-      return false;
-    }
-    return (javaInfo instanceof AbstractComponentInfo || javaInfo.getParent() instanceof NonVisualBeanContainerInfo)
-        && JavaInfoReferenceProvider.getReference(javaInfo) != null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AbstractJavaInfoPropertiesManager
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected boolean isCreateProperty(ObjectInfo objectInfo) throws Exception {
+		JavaInfo javaInfo = (JavaInfo) objectInfo;
+		if (JavaInfoUtils.hasTrueParameter(javaInfo, "databinding.disable")) {
+			return false;
+		}
+		if (!DataBindingsCodeUtils.isDBAvailable(javaInfo.getEditor().getJavaProject())) {
+			return false;
+		}
+		return (javaInfo instanceof AbstractComponentInfo || javaInfo.getParent() instanceof NonVisualBeanContainerInfo)
+				&& JavaInfoReferenceProvider.getReference(javaInfo) != null;
+	}
 
-  @Override
-  protected AbstractBindingsProperty createProperty(ObjectInfo objectInfo) throws Exception {
-    return new BindingsProperty(new Context(Activator.getDefault(), m_provider, objectInfo));
-  }
+	@Override
+	protected AbstractBindingsProperty createProperty(ObjectInfo objectInfo) throws Exception {
+		return new BindingsProperty(new Context(Activator.getDefault(), m_provider, objectInfo));
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/property/ObserveProperty.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/property/ObserveProperty.java
index 00a12d47c..c475b3f84 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/property/ObserveProperty.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/property/ObserveProperty.java
@@ -26,32 +26,32 @@
  * @coverage bindings.swing.ui.properties
  */
 public class ObserveProperty extends AbstractObserveProperty {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ObserveProperty(Context context, IObserveInfo observeProperty) throws Exception {
-    super(context, observeProperty);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ObserveProperty(Context context, IObserveInfo observeProperty) throws Exception {
+		super(context, observeProperty);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AbstractObserveProperty
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void getBindings(List<IBindingInfo> bindings, List<Boolean> isTargets) throws Exception {
-    ObserveInfo observeProperty = (ObserveInfo) m_observeProperty;
-    bindings.addAll(observeProperty.getBindings());
-    //
-    for (IBindingInfo binding : bindings) {
-      isTargets.add(binding.getTargetProperty() == m_observeProperty);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AbstractObserveProperty
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void getBindings(List<IBindingInfo> bindings, List<Boolean> isTargets) throws Exception {
+		ObserveInfo observeProperty = (ObserveInfo) m_observeProperty;
+		bindings.addAll(observeProperty.getBindings());
+		//
+		for (IBindingInfo binding : bindings) {
+			isTargets.add(binding.getTargetProperty() == m_observeProperty);
+		}
+	}
 
-  @Override
-  public AbstractBindingProperty createBindingProperty() throws Exception {
-    return new BindingProperty(m_context);
-  }
+	@Override
+	public AbstractBindingProperty createBindingProperty() throws Exception {
+		return new BindingProperty(m_context);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/providers/BindingLabelProvider.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/providers/BindingLabelProvider.java
index ccd8e77da..21044ced2 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/providers/BindingLabelProvider.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/providers/BindingLabelProvider.java
@@ -37,107 +37,107 @@
  * @coverage bindings.swing.ui
  */
 public final class BindingLabelProvider extends LabelProvider
-    implements
-      ITableLabelProvider,
-      IColorProvider {
-  private static final Image AUTO_BINDING_IMAGE = Activator.getImage("autobinding2.png");
-  private static final Image JLIST_BINDING_IMAGE = Activator.getImage("JList.gif");
-  private static final Image JLIST_DETAIL_BINDING_IMAGE = Activator.getImage("JListDetail2.png");
-  private static final Image JCOMBO_BOX_BINDING_IMAGE = Activator.getImage("JComboBox.gif");
-  private static final Image JTABLE_BINDING_IMAGE = Activator.getImage("JTable.gif");
-  private static final Image JTABLE_COLUMN_BINDING_IMAGE =
-      Activator.getImage("JTableColumnBinding.png");
-  public static final BindingLabelProvider INSTANCE = new BindingLabelProvider();
+implements
+ITableLabelProvider,
+IColorProvider {
+	private static final Image AUTO_BINDING_IMAGE = Activator.getImage("autobinding2.png");
+	private static final Image JLIST_BINDING_IMAGE = Activator.getImage("JList.gif");
+	private static final Image JLIST_DETAIL_BINDING_IMAGE = Activator.getImage("JListDetail2.png");
+	private static final Image JCOMBO_BOX_BINDING_IMAGE = Activator.getImage("JComboBox.gif");
+	private static final Image JTABLE_BINDING_IMAGE = Activator.getImage("JTable.gif");
+	private static final Image JTABLE_COLUMN_BINDING_IMAGE =
+			Activator.getImage("JTableColumnBinding.png");
+	public static final BindingLabelProvider INSTANCE = new BindingLabelProvider();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ITableLabelProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public String getColumnText(final Object element, final int column) {
-    return ExecutionUtils.runObjectLog(new RunnableObjectEx<String>() {
-      public String runObject() throws Exception {
-        BindingInfo binding = (BindingInfo) element;
-        switch (column) {
-          case 1 :
-            // target
-            return binding.getTargetPresentationText(true);
-          case 2 :
-            // model
-            return binding.getModelPresentationText(true);
-          case 3 :
-            // strategy
-            if (binding instanceof AutoBindingInfo) {
-              AutoBindingInfo autoBinding = (AutoBindingInfo) binding;
-              return autoBinding.getStrategyInfo().getStrategyValue();
-            }
-            return null;
-          case 4 :
-            // binding
-          {
-            String variable = binding.getVariableIdentifier();
-            if (variable != null) {
-              String name = binding.getName();
-              if (StringUtils.isEmpty(name)) {
-                return variable;
-              }
-              return variable + " - " + name;
-            }
-          }
-        }
-        return null;
-      }
-    }, "<exception, see log>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ITableLabelProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public String getColumnText(final Object element, final int column) {
+		return ExecutionUtils.runObjectLog(new RunnableObjectEx<String>() {
+			public String runObject() throws Exception {
+				BindingInfo binding = (BindingInfo) element;
+				switch (column) {
+				case 1 :
+					// target
+					return binding.getTargetPresentationText(true);
+				case 2 :
+					// model
+					return binding.getModelPresentationText(true);
+				case 3 :
+					// strategy
+					if (binding instanceof AutoBindingInfo) {
+						AutoBindingInfo autoBinding = (AutoBindingInfo) binding;
+						return autoBinding.getStrategyInfo().getStrategyValue();
+					}
+					return null;
+				case 4 :
+					// binding
+				{
+					String variable = binding.getVariableIdentifier();
+					if (variable != null) {
+						String name = binding.getName();
+						if (StringUtils.isEmpty(name)) {
+							return variable;
+						}
+						return variable + " - " + name;
+					}
+				}
+				}
+				return null;
+			}
+		}, "<exception, see log>");
+	}
 
-  public Image getColumnImage(Object element, int column) {
-    if (column == 0) {
-      if (element instanceof JListBindingInfo) {
-        return JLIST_BINDING_IMAGE;
-      }
-      if (element instanceof DetailBindingInfo) {
-        return JLIST_DETAIL_BINDING_IMAGE;
-      }
-      if (element instanceof JComboBoxBindingInfo) {
-        return JCOMBO_BOX_BINDING_IMAGE;
-      }
-      if (element instanceof JTableBindingInfo) {
-        return JTABLE_BINDING_IMAGE;
-      }
-      if (element instanceof ColumnBindingInfo) {
-        return JTABLE_COLUMN_BINDING_IMAGE;
-      }
-      if (element instanceof AutoBindingInfo) {
-        return AUTO_BINDING_IMAGE;
-      }
-      if (element instanceof VirtualBindingInfo) {
-        VirtualBindingInfo binding = (VirtualBindingInfo) element;
-        switch (binding.getSwingType()) {
-          case JListBinding :
-            return JLIST_BINDING_IMAGE;
-          case JTableBinding :
-            return JTABLE_BINDING_IMAGE;
-          case JComboBoxBinding :
-            return JCOMBO_BOX_BINDING_IMAGE;
-        }
-      }
-    }
-    return null;
-  }
+	public Image getColumnImage(Object element, int column) {
+		if (column == 0) {
+			if (element instanceof JListBindingInfo) {
+				return JLIST_BINDING_IMAGE;
+			}
+			if (element instanceof DetailBindingInfo) {
+				return JLIST_DETAIL_BINDING_IMAGE;
+			}
+			if (element instanceof JComboBoxBindingInfo) {
+				return JCOMBO_BOX_BINDING_IMAGE;
+			}
+			if (element instanceof JTableBindingInfo) {
+				return JTABLE_BINDING_IMAGE;
+			}
+			if (element instanceof ColumnBindingInfo) {
+				return JTABLE_COLUMN_BINDING_IMAGE;
+			}
+			if (element instanceof AutoBindingInfo) {
+				return AUTO_BINDING_IMAGE;
+			}
+			if (element instanceof VirtualBindingInfo) {
+				VirtualBindingInfo binding = (VirtualBindingInfo) element;
+				switch (binding.getSwingType()) {
+				case JListBinding :
+					return JLIST_BINDING_IMAGE;
+				case JTableBinding :
+					return JTABLE_BINDING_IMAGE;
+				case JComboBoxBinding :
+					return JCOMBO_BOX_BINDING_IMAGE;
+				}
+			}
+		}
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IColorProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public Color getForeground(Object element) {
-    if (element instanceof VirtualBindingInfo) {
-      return Display.getCurrent().getSystemColor(SWT.COLOR_DARK_GRAY);
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IColorProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public Color getForeground(Object element) {
+		if (element instanceof VirtualBindingInfo) {
+			return Display.getCurrent().getSystemColor(SWT.COLOR_DARK_GRAY);
+		}
+		return null;
+	}
 
-  public Color getBackground(Object element) {
-    return null;
-  }
+	public Color getBackground(Object element) {
+		return null;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/providers/TypeImageProvider.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/providers/TypeImageProvider.java
index 6fefa52d6..2cee1fc15 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/providers/TypeImageProvider.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/ui/providers/TypeImageProvider.java
@@ -23,68 +23,68 @@
  * @coverage bindings.swing.ui
  */
 public final class TypeImageProvider {
-  public static final Image OBJECT_IMAGE = Activator.getImage("types/Object.png");
-  public static final Image STRING_IMAGE = Activator.getImage("types/String.png");
-  public static final Image BOOLEAN_IMAGE = Activator.getImage("types/Boolean.png");
-  public static final Image NUMBER_IMAGE = Activator.getImage("types/Number.png");
-  public static final Image IMAGE_IMAGE = Activator.getImage("types/Image.png");
-  public static final Image COLOR_IMAGE = Activator.getImage("types/Color.png");
-  public static final Image FONT_IMAGE = Activator.getImage("types/Font.png");
-  public static final Image ARRAY_IMAGE = Activator.getImage("types/Array.png");
-  public static final Image COLLECTION_IMAGE = Activator.getImage("types/Collection.png");
-  public static final Image EL_PROPERTY_IMAGE = Activator.getImage("el_property2.gif");
-  public static final Image OBJECT_PROPERTY_IMAGE = Activator.getImage("SelfObject.png");
+	public static final Image OBJECT_IMAGE = Activator.getImage("types/Object.png");
+	public static final Image STRING_IMAGE = Activator.getImage("types/String.png");
+	public static final Image BOOLEAN_IMAGE = Activator.getImage("types/Boolean.png");
+	public static final Image NUMBER_IMAGE = Activator.getImage("types/Number.png");
+	public static final Image IMAGE_IMAGE = Activator.getImage("types/Image.png");
+	public static final Image COLOR_IMAGE = Activator.getImage("types/Color.png");
+	public static final Image FONT_IMAGE = Activator.getImage("types/Font.png");
+	public static final Image ARRAY_IMAGE = Activator.getImage("types/Array.png");
+	public static final Image COLLECTION_IMAGE = Activator.getImage("types/Collection.png");
+	public static final Image EL_PROPERTY_IMAGE = Activator.getImage("el_property2.gif");
+	public static final Image OBJECT_PROPERTY_IMAGE = Activator.getImage("SelfObject.png");
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Image
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return {@link Image} association with given {@link Class}.
-   */
-  public static Image getImage(Class<?> type) {
-    // unknown type accept as object
-    if (type == null) {
-      return OBJECT_IMAGE;
-    }
-    // string
-    if (type == String.class || type == byte.class || type == char.class) {
-      return STRING_IMAGE;
-    }
-    // boolean
-    if (type == boolean.class || type == Boolean.class) {
-      return BOOLEAN_IMAGE;
-    }
-    // arithmetic
-    if (type == int.class
-        || type == short.class
-        || type == long.class
-        || type == float.class
-        || type == double.class) {
-      return NUMBER_IMAGE;
-    }
-    // array
-    if (type.isArray()) {
-      return ARRAY_IMAGE;
-    }
-    // Collection
-    if (Collection.class.isAssignableFrom(type)) {
-      return COLLECTION_IMAGE;
-    }
-    // AWT image
-    if (type == java.awt.Image.class || type == javax.swing.Icon.class) {
-      return IMAGE_IMAGE;
-    }
-    // AWT color
-    if (type == java.awt.Color.class) {
-      return COLOR_IMAGE;
-    }
-    // AWT font
-    if (type == java.awt.Font.class) {
-      return FONT_IMAGE;
-    }
-    // other accept as object
-    return OBJECT_IMAGE;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Image
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return {@link Image} association with given {@link Class}.
+	 */
+	public static Image getImage(Class<?> type) {
+		// unknown type accept as object
+		if (type == null) {
+			return OBJECT_IMAGE;
+		}
+		// string
+		if (type == String.class || type == byte.class || type == char.class) {
+			return STRING_IMAGE;
+		}
+		// boolean
+		if (type == boolean.class || type == Boolean.class) {
+			return BOOLEAN_IMAGE;
+		}
+		// arithmetic
+		if (type == int.class
+				|| type == short.class
+				|| type == long.class
+				|| type == float.class
+				|| type == double.class) {
+			return NUMBER_IMAGE;
+		}
+		// array
+		if (type.isArray()) {
+			return ARRAY_IMAGE;
+		}
+		// Collection
+		if (Collection.class.isAssignableFrom(type)) {
+			return COLLECTION_IMAGE;
+		}
+		// AWT image
+		if (type == java.awt.Image.class || type == javax.swing.Icon.class) {
+			return IMAGE_IMAGE;
+		}
+		// AWT color
+		if (type == java.awt.Color.class) {
+			return COLOR_IMAGE;
+		}
+		// AWT font
+		if (type == java.awt.Font.class) {
+			return FONT_IMAGE;
+		}
+		// other accept as object
+		return OBJECT_IMAGE;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/wizards/autobindings/AutoBindingUpdateStrategyDescriptor.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/wizards/autobindings/AutoBindingUpdateStrategyDescriptor.java
index e7772ef49..6c8049b27 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/wizards/autobindings/AutoBindingUpdateStrategyDescriptor.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/wizards/autobindings/AutoBindingUpdateStrategyDescriptor.java
@@ -19,28 +19,28 @@
  * @coverage bindings.swing.wizard.auto
  */
 public final class AutoBindingUpdateStrategyDescriptor extends AbstractDescriptor {
-  private String m_sourceCode;
+	private String m_sourceCode;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public String getSourceCode() {
-    return m_sourceCode;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public String getSourceCode() {
+		return m_sourceCode;
+	}
 
-  public void setSourceCode(String sourceCode) {
-    m_sourceCode = sourceCode;
-  }
+	public void setSourceCode(String sourceCode) {
+		m_sourceCode = sourceCode;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Default
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean isDefault(Object property) {
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Default
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean isDefault(Object property) {
+		return true;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/wizards/autobindings/AutomaticDatabindingFirstPage.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/wizards/autobindings/AutomaticDatabindingFirstPage.java
index e71f0653d..bccd85727 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/wizards/autobindings/AutomaticDatabindingFirstPage.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/wizards/autobindings/AutomaticDatabindingFirstPage.java
@@ -22,32 +22,32 @@
  * @coverage bindings.swing.wizard.auto
  */
 public final class AutomaticDatabindingFirstPage
-    extends
-      org.eclipse.wb.internal.core.databinding.wizards.autobindings.AutomaticDatabindingFirstPage {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AutomaticDatabindingFirstPage(IAutomaticDatabindingProvider databindingProvider,
-      String initialBeanClassName) {
-    super(databindingProvider, initialBeanClassName);
-  }
+extends
+org.eclipse.wb.internal.core.databinding.wizards.autobindings.AutomaticDatabindingFirstPage {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AutomaticDatabindingFirstPage(IAutomaticDatabindingProvider databindingProvider,
+			String initialBeanClassName) {
+		super(databindingProvider, initialBeanClassName);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Substitution support
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String performSubstitutions(String code, ImportsManager imports) {
-    code = super.performSubstitutions(code, imports);
-    code = SwingWizardPage.doPerformSubstitutions(this, code, imports);
-    return code;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Substitution support
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String performSubstitutions(String code, ImportsManager imports) {
+		code = super.performSubstitutions(code, imports);
+		code = SwingWizardPage.doPerformSubstitutions(this, code, imports);
+		return code;
+	}
 
-  @Override
-  protected ToolkitDescriptionJava getToolkitDescription() {
-    return ToolkitProvider.DESCRIPTION;
-  }
+	@Override
+	protected ToolkitDescriptionJava getToolkitDescription() {
+		return ToolkitProvider.DESCRIPTION;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/wizards/autobindings/AutomaticDatabindingWizard.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/wizards/autobindings/AutomaticDatabindingWizard.java
index 7afaa2497..dd8f0d944 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/wizards/autobindings/AutomaticDatabindingWizard.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/wizards/autobindings/AutomaticDatabindingWizard.java
@@ -21,40 +21,40 @@
  * @coverage bindings.swing.wizard.auto
  */
 public final class AutomaticDatabindingWizard
-    extends
-      org.eclipse.wb.internal.core.databinding.wizards.autobindings.AutomaticDatabindingWizard {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AutomaticDatabindingWizard() {
-    setWindowTitle(Messages.AutomaticDatabindingWizard_title);
-  }
+extends
+org.eclipse.wb.internal.core.databinding.wizards.autobindings.AutomaticDatabindingWizard {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AutomaticDatabindingWizard() {
+		setWindowTitle(Messages.AutomaticDatabindingWizard_title);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Pages
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void addPages() {
-    IAutomaticDatabindingProvider databindingProvider = SwingDatabindingProvider.create();
-    // prepare selection
-    String beanClassName = getSelectionBeanClass(getSelection());
-    // create first page: via standard "New Java Wizard"
-    AutomaticDatabindingFirstPage firstPage =
-        new AutomaticDatabindingFirstPage(databindingProvider, beanClassName);
-    firstPage.setTitle(Messages.AutomaticDatabindingWizard_javaPageTitle);
-    firstPage.setDescription(Messages.AutomaticDatabindingWizard_javaPageMessage);
-    m_mainPage = firstPage;
-    addPage(firstPage);
-    firstPage.setInitialSelection(getSelection());
-    // create second page: bindings
-    AutomaticDatabindingSecondPage secondPage =
-        new AutomaticDatabindingSecondPage(firstPage, databindingProvider, beanClassName);
-    secondPage.setTitle(Messages.AutomaticDatabindingWizard_bindPageTitle);
-    secondPage.setDescription(Messages.AutomaticDatabindingWizard_bindPageMessage);
-    addPage(secondPage);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Pages
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void addPages() {
+		IAutomaticDatabindingProvider databindingProvider = SwingDatabindingProvider.create();
+		// prepare selection
+		String beanClassName = getSelectionBeanClass(getSelection());
+		// create first page: via standard "New Java Wizard"
+		AutomaticDatabindingFirstPage firstPage =
+				new AutomaticDatabindingFirstPage(databindingProvider, beanClassName);
+		firstPage.setTitle(Messages.AutomaticDatabindingWizard_javaPageTitle);
+		firstPage.setDescription(Messages.AutomaticDatabindingWizard_javaPageMessage);
+		m_mainPage = firstPage;
+		addPage(firstPage);
+		firstPage.setInitialSelection(getSelection());
+		// create second page: bindings
+		AutomaticDatabindingSecondPage secondPage =
+				new AutomaticDatabindingSecondPage(firstPage, databindingProvider, beanClassName);
+		secondPage.setTitle(Messages.AutomaticDatabindingWizard_bindPageTitle);
+		secondPage.setDescription(Messages.AutomaticDatabindingWizard_bindPageMessage);
+		addPage(secondPage);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/wizards/autobindings/ObservePropertyAdapter.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/wizards/autobindings/ObservePropertyAdapter.java
index 2ed6cd9cc..7caab1ba8 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/wizards/autobindings/ObservePropertyAdapter.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/wizards/autobindings/ObservePropertyAdapter.java
@@ -20,24 +20,24 @@
  * @coverage bindings.swing.wizard.auto
  */
 public final class ObservePropertyAdapter extends PropertyAdapter {
-  private final ObserveInfo m_observe;
+	private final ObserveInfo m_observe;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ObservePropertyAdapter(ObserveInfo observe) throws Exception {
-    super(observe.getPresentation().getText(), observe.getObjectType().getRawType());
-    m_observe = observe;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ObservePropertyAdapter(ObserveInfo observe) throws Exception {
+		super(observe.getPresentation().getText(), observe.getObjectType().getRawType());
+		m_observe = observe;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ObserveInfo getObserve() {
-    return m_observe;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ObserveInfo getObserve() {
+		return m_observe;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/wizards/autobindings/ObservePropertyAdapterLabelProvider.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/wizards/autobindings/ObservePropertyAdapterLabelProvider.java
index 9408e8dfe..c0c242bac 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/wizards/autobindings/ObservePropertyAdapterLabelProvider.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/wizards/autobindings/ObservePropertyAdapterLabelProvider.java
@@ -20,24 +20,24 @@
  * @coverage bindings.swing.wizard.auto
  */
 public final class ObservePropertyAdapterLabelProvider extends LabelProvider {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // LabelProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getText(Object element) {
-    ObservePropertyAdapter adapter = (ObservePropertyAdapter) element;
-    return adapter.getName();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// LabelProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getText(Object element) {
+		ObservePropertyAdapter adapter = (ObservePropertyAdapter) element;
+		return adapter.getName();
+	}
 
-  @Override
-  public Image getImage(Object element) {
-    try {
-      ObservePropertyAdapter adapter = (ObservePropertyAdapter) element;
-      return adapter.getObserve().getPresentation().getImage();
-    } catch (Throwable e) {
-      return null;
-    }
-  }
+	@Override
+	public Image getImage(Object element) {
+		try {
+			ObservePropertyAdapter adapter = (ObservePropertyAdapter) element;
+			return adapter.getObserve().getPresentation().getImage();
+		} catch (Throwable e) {
+			return null;
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/wizards/autobindings/SwingComponentDescriptor.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/wizards/autobindings/SwingComponentDescriptor.java
index 65ce2705d..cbd3ac518 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/wizards/autobindings/SwingComponentDescriptor.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/wizards/autobindings/SwingComponentDescriptor.java
@@ -23,42 +23,42 @@
  * @coverage bindings.swing.wizard.auto
  */
 public final class SwingComponentDescriptor extends AbstractDescriptor {
-  private String m_componentClassName;
-  private String[] m_propertyClasses;
+	private String m_componentClassName;
+	private String[] m_propertyClasses;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public String getComponentClass() {
-    return m_componentClassName;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public String getComponentClass() {
+		return m_componentClassName;
+	}
 
-  public void setComponentClass(String className) {
-    m_componentClassName = className;
-  }
+	public void setComponentClass(String className) {
+		m_componentClassName = className;
+	}
 
-  public String getPropertyClass() {
-    return m_propertyClasses[m_propertyClasses.length - 1];
-  }
+	public String getPropertyClass() {
+		return m_propertyClasses[m_propertyClasses.length - 1];
+	}
 
-  public void setPropertyClass(String classes) {
-    m_propertyClasses = StringUtils.split(classes);
-  }
+	public void setPropertyClass(String classes) {
+		m_propertyClasses = StringUtils.split(classes);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Default
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean isDefault(Object property) {
-    PropertyAdapter propertyAdapter = (PropertyAdapter) property;
-    Class<?> propertyType = propertyAdapter.getType();
-    if (propertyType != null) {
-      return ArrayUtils.contains(m_propertyClasses, propertyType.getName());
-    }
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Default
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean isDefault(Object property) {
+		PropertyAdapter propertyAdapter = (PropertyAdapter) property;
+		Class<?> propertyType = propertyAdapter.getType();
+		if (propertyType != null) {
+			return ArrayUtils.contains(m_propertyClasses, propertyType.getName());
+		}
+		return false;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/wizards/autobindings/SwingDatabindingProvider.java b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/wizards/autobindings/SwingDatabindingProvider.java
index c3148caf2..f39547b33 100644
--- a/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/wizards/autobindings/SwingDatabindingProvider.java
+++ b/org.eclipse.wb.swing.databinding/src/org/eclipse/wb/internal/swing/databinding/wizards/autobindings/SwingDatabindingProvider.java
@@ -58,460 +58,460 @@
  * @coverage bindings.swing.wizard.auto
  */
 public final class SwingDatabindingProvider extends DefaultAutomaticDatabindingProvider {
-  private static DescriptorContainer m_componentContainer;
-  private static DescriptorContainer m_strategyContainer;
+	private static DescriptorContainer m_componentContainer;
+	private static DescriptorContainer m_strategyContainer;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static IAutomaticDatabindingProvider create() {
-    try {
-      // check containers
-      if (m_componentContainer == null && m_strategyContainer == null) {
-        // load containers
-        InputStream stream = Activator.getFile("templates/SwingEditors.xml");
-        Map<String, DescriptorContainer> containers =
-            DescriptorContainer.parseDescriptors(
-                stream,
-                SwingDatabindingProvider.class.getClassLoader(),
-                new IImageLoader() {
-                  public Image getImage(String name) {
-                    return Activator.getImage(name);
-                  }
-                });
-        IOUtils.closeQuietly(stream);
-        // sets containers
-        m_componentContainer = containers.get("Swing.Components");
-        m_strategyContainer = containers.get("AutoBinding.UpdateStrategy");
-      }
-      // create provider
-      return new SwingDatabindingProvider(m_componentContainer, m_strategyContainer);
-    } catch (Throwable e) {
-      DesignerPlugin.log(e);
-      return null;
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static IAutomaticDatabindingProvider create() {
+		try {
+			// check containers
+			if (m_componentContainer == null && m_strategyContainer == null) {
+				// load containers
+				InputStream stream = Activator.getFile("templates/SwingEditors.xml");
+				Map<String, DescriptorContainer> containers =
+						DescriptorContainer.parseDescriptors(
+								stream,
+								SwingDatabindingProvider.class.getClassLoader(),
+								new IImageLoader() {
+									public Image getImage(String name) {
+										return Activator.getImage(name);
+									}
+								});
+				IOUtils.closeQuietly(stream);
+				// sets containers
+				m_componentContainer = containers.get("Swing.Components");
+				m_strategyContainer = containers.get("AutoBinding.UpdateStrategy");
+			}
+			// create provider
+			return new SwingDatabindingProvider(m_componentContainer, m_strategyContainer);
+		} catch (Throwable e) {
+			DesignerPlugin.log(e);
+			return null;
+		}
+	}
 
-  private SwingDatabindingProvider(DescriptorContainer widgetContainer,
-      DescriptorContainer strategyContainer) {
-    super(widgetContainer, strategyContainer);
-  }
+	private SwingDatabindingProvider(DescriptorContainer widgetContainer,
+			DescriptorContainer strategyContainer) {
+		super(widgetContainer, strategyContainer);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // SuperClass
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public String[] getSuperClasses() {
-    return new String[]{"javax.swing.JPanel", "javax.swing.JDialog", "javax.swing.JFrame"};
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// SuperClass
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public String[] getSuperClasses() {
+		return new String[]{"javax.swing.JPanel", "javax.swing.JDialog", "javax.swing.JFrame"};
+	}
 
-  public String getInitialSuperClass() {
-    return "javax.swing.JPanel";
-  }
+	public String getInitialSuperClass() {
+		return "javax.swing.JPanel";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void configure(ChooseClassAndPropertiesConfiguration configuration) {
-    configuration.setPropertiesLabelProvider(new ObservePropertyAdapterLabelProvider());
-    configuration.setValueScope("beans");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void configure(ChooseClassAndPropertiesConfiguration configuration) {
+		configuration.setPropertiesLabelProvider(new ObservePropertyAdapterLabelProvider());
+		configuration.setValueScope("beans");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Properties
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected List<PropertyAdapter> getProperties0(Class<?> choosenClass) throws Exception {
-    List<PropertyAdapter> adapters = Lists.newArrayList();
-    BeanSupport beanSupport = new BeanSupport();
-    beanSupport.doAddELProperty(false);
-    beanSupport.doAddSelfProperty(false);
-    ClassGenericType objectType = new ClassGenericType(choosenClass, null, null);
-    for (ObserveInfo property : beanSupport.createProperties(null, objectType)) {
-      adapters.add(new ObservePropertyAdapter(property));
-    }
-    return adapters;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Properties
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected List<PropertyAdapter> getProperties0(Class<?> choosenClass) throws Exception {
+		List<PropertyAdapter> adapters = Lists.newArrayList();
+		BeanSupport beanSupport = new BeanSupport();
+		beanSupport.doAddELProperty(false);
+		beanSupport.doAddSelfProperty(false);
+		ClassGenericType objectType = new ClassGenericType(choosenClass, null, null);
+		for (ObserveInfo property : beanSupport.createProperties(null, objectType)) {
+			adapters.add(new ObservePropertyAdapter(property));
+		}
+		return adapters;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Finish
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public InputStream getTemplateFile(String superClassName) {
-    return Activator.getFile("templates/" + ClassUtils.getShortClassName(superClassName) + ".jvt");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Finish
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public InputStream getTemplateFile(String superClassName) {
+		return Activator.getFile("templates/" + ClassUtils.getShortClassName(superClassName) + ".jvt");
+	}
 
-  public String performSubstitutions(String code, ImportsManager imports) throws Exception {
-    // calculate states
-    boolean blockMode = useBlockMode();
-    boolean lazyVariables = createLazyVariables();
-    //
-    DataBindingsCodeUtils.ensureDBLibraries(m_javaProject);
-    CodeGenerationSupport generationSupport =
-        new CodeGenerationSupport(CoreUtils.useGenerics(m_javaProject));
-    // prepare imports
-    Collection<String> importList = Sets.newHashSet();
-    importList.add("java.awt.GridBagLayout");
-    importList.add("java.awt.GridBagConstraints");
-    importList.add("java.awt.Insets");
-    importList.add("javax.swing.JLabel");
-    importList.add("org.jdesktop.beansbinding.AutoBinding");
-    importList.add("org.jdesktop.beansbinding.Bindings");
-    importList.add("org.jdesktop.beansbinding.BeanProperty");
-    //
-    if (!generationSupport.useGenerics()) {
-      importList.add("org.jdesktop.beansbinding.Property");
-    }
-    // bean class, field, name, field access
-    String beanClassName = m_beanClass.getName().replace('$', '.');
-    String beanClassShortName = ClassUtils.getShortClassName(beanClassName);
-    String fieldPrefix = JavaCore.getOption(JavaCore.CODEASSIST_FIELD_PREFIXES);
-    String fieldName = fieldPrefix + StringUtils.uncapitalize(beanClassShortName);
-    //
-    code = StringUtils.replace(code, "%BeanClass%", beanClassName);
-    //
-    if (ReflectionUtils.getConstructorBySignature(m_beanClass, "<init>()") == null) {
-      code = StringUtils.replace(code, "%BeanField%", fieldName);
-    } else {
-      code = StringUtils.replace(code, "%BeanField%", fieldName + " = new " + beanClassName + "()");
-    }
-    //
-    IPreferenceStore preferences = ToolkitProvider.DESCRIPTION.getPreferences();
-    String accessPrefix =
-        preferences.getBoolean(FieldUniqueVariableSupport.P_PREFIX_THIS) ? "this." : "";
-    String beanFieldAccess = accessPrefix + fieldName;
-    //
-    code = StringUtils.replace(code, "%BeanName%", StringUtils.capitalize(beanClassShortName));
-    code = StringUtils.replace(code, "%BeanFieldAccess%", accessPrefix + fieldName);
-    // prepare properties
-    final List<PropertyAdapter> properties = Lists.newArrayList();
-    Display.getDefault().syncExec(new Runnable() {
-      public void run() {
-        CollectionUtils.addAll(properties, m_propertiesViewer.getCheckedElements());
-      }
-    });
-    // prepare code
-    StringBuffer componentFields = new StringBuffer();
-    StringBuffer components = new StringBuffer();
-    String swingContainer = StringUtils.substringBetween(code, "%Components%", "%");
-    String swingContainerWithDot = "this".equals(swingContainer) ? "" : swingContainer + ".";
-    //
-    int propertiesCount = properties.size();
-    int lastPropertyIndex = propertiesCount - 1;
-    StringBuffer bindings = new StringBuffer();
-    // prepare layout code
-    components.append("\t\tGridBagLayout gridBagLayout = new GridBagLayout();\r\n");
-    components.append("\t\tgridBagLayout.columnWidths = new int[]{0, 0, 0};\r\n");
-    components.append("\t\tgridBagLayout.rowHeights = new int[]{"
-        + StringUtils.repeat("0, ", propertiesCount)
-        + "0};\r\n");
-    components.append("\t\tgridBagLayout.columnWeights = new double[]{0.0, 1.0, 1.0E-4};\r\n");
-    components.append("\t\tgridBagLayout.rowWeights = new double[]{"
-        + StringUtils.repeat("0.0, ", propertiesCount)
-        + "1.0E-4};\r\n");
-    components.append("\t\t" + swingContainerWithDot + "setLayout(gridBagLayout);\r\n");
-    //
-    StringBuffer group = new StringBuffer();
-    generationSupport.generateLocalName("bindingGroup");
-    //
-    StringBuffer lazy = new StringBuffer();
-    //
-    for (int i = 0; i < propertiesCount; i++) {
-      String index = Integer.toString(i);
-      //
-      PropertyAdapter property = properties.get(i);
-      Object[] editorData = m_propertyToEditor.get(property);
-      SwingComponentDescriptor componentDescriptor = (SwingComponentDescriptor) editorData[0];
-      //
-      String propertyName = property.getName();
-      // label
-      addLabelCode(
-          componentFields,
-          components,
-          lazy,
-          swingContainerWithDot,
-          blockMode,
-          lazyVariables,
-          propertyName,
-          index);
-      //
-      String componentClassName = componentDescriptor.getComponentClass();
-      String componentShortClassName = ClassUtils.getShortClassName(componentClassName);
-      String componentFieldName = fieldPrefix + propertyName + componentShortClassName;
-      String componentFieldAccess = accessPrefix + componentFieldName;
-      String componentLazyAccess =
-          "get" + StringUtils.capitalize(propertyName) + componentShortClassName + "()";
-      String componentAccess = lazyVariables ? componentLazyAccess : componentFieldAccess;
-      //
-      importList.add(componentClassName);
-      // field
-      componentFields.append("\r\nfield\r\n\tprivate "
-          + componentShortClassName
-          + " "
-          + componentFieldName
-          + ";");
-      // component
-      addComponentCode(
-          components,
-          lazy,
-          swingContainerWithDot,
-          blockMode,
-          lazyVariables,
-          componentShortClassName,
-          componentFieldAccess,
-          componentLazyAccess,
-          index);
-      // binding properties
-      AutoBindingUpdateStrategyDescriptor strategyDescriptor =
-          (AutoBindingUpdateStrategyDescriptor) editorData[1];
-      //
-      String modelPropertyName = generationSupport.generateLocalName(propertyName, "Property");
-      String targetPropertyName =
-          generationSupport.generateLocalName(componentDescriptor.getName(1), "Property");
-      String bindingName = generationSupport.generateLocalName("autoBinding");
-      String modelGeneric = null;
-      String targetGeneric = null;
-      //
-      if (generationSupport.useGenerics()) {
-        modelGeneric =
-            beanClassName + ", " + GenericUtils.convertPrimitiveType(property.getType().getName());
-        bindings.append("\t\tBeanProperty<" + modelGeneric + "> ");
-      } else {
-        bindings.append("\t\tProperty ");
-      }
-      bindings.append(modelPropertyName + " = BeanProperty.create(\"" + propertyName + "\");\r\n");
-      //
-      if (generationSupport.useGenerics()) {
-        targetGeneric =
-            componentDescriptor.getComponentClass() + ", " + componentDescriptor.getPropertyClass();
-        bindings.append("\t\tBeanProperty<" + targetGeneric + "> ");
-      } else {
-        bindings.append("\t\tProperty ");
-      }
-      bindings.append(targetPropertyName
-          + " = BeanProperty.create(\""
-          + componentDescriptor.getName(1)
-          + "\");\r\n");
-      // binding
-      bindings.append("\t\tAutoBinding");
-      if (generationSupport.useGenerics()) {
-        bindings.append("<" + modelGeneric + ", " + targetGeneric + ">");
-      }
-      bindings.append(" "
-          + bindingName
-          + " = Bindings.createAutoBinding("
-          + strategyDescriptor.getSourceCode()
-          + ", "
-          + beanFieldAccess
-          + ", "
-          + modelPropertyName
-          + ", "
-          + componentAccess
-          + ", "
-          + targetPropertyName
-          + ");\r\n");
-      bindings.append("\t\t" + bindingName + ".bind();");
-      //
-      group.append("\t\tbindingGroup.addBinding(" + bindingName + ");");
-      //
-      if (i < lastPropertyIndex) {
-        componentFields.append("\r\n");
-        components.append("\r\n");
-        bindings.append("\r\n\t\t//\r\n");
-        group.append("\r\n");
-      }
-      //
-    }
-    // replace template patterns
-    code = StringUtils.replace(code, "%ComponentFields%", componentFields.toString());
-    code = StringUtils.replace(code, "%Components%" + swingContainer + "%", components.toString());
-    code = StringUtils.replace(code, "%Bindings%", bindings.toString());
-    code = StringUtils.replace(code, "%Group%", group.toString());
-    code = StringUtils.replace(code, "%LAZY%", lazy.toString());
-    // add imports
-    for (String qualifiedTypeName : importList) {
-      imports.addImport(qualifiedTypeName);
-    }
-    //
-    return code;
-  }
+	public String performSubstitutions(String code, ImportsManager imports) throws Exception {
+		// calculate states
+		boolean blockMode = useBlockMode();
+		boolean lazyVariables = createLazyVariables();
+		//
+		DataBindingsCodeUtils.ensureDBLibraries(m_javaProject);
+		CodeGenerationSupport generationSupport =
+				new CodeGenerationSupport(CoreUtils.useGenerics(m_javaProject));
+		// prepare imports
+		Collection<String> importList = Sets.newHashSet();
+		importList.add("java.awt.GridBagLayout");
+		importList.add("java.awt.GridBagConstraints");
+		importList.add("java.awt.Insets");
+		importList.add("javax.swing.JLabel");
+		importList.add("org.jdesktop.beansbinding.AutoBinding");
+		importList.add("org.jdesktop.beansbinding.Bindings");
+		importList.add("org.jdesktop.beansbinding.BeanProperty");
+		//
+		if (!generationSupport.useGenerics()) {
+			importList.add("org.jdesktop.beansbinding.Property");
+		}
+		// bean class, field, name, field access
+		String beanClassName = m_beanClass.getName().replace('$', '.');
+		String beanClassShortName = ClassUtils.getShortClassName(beanClassName);
+		String fieldPrefix = JavaCore.getOption(JavaCore.CODEASSIST_FIELD_PREFIXES);
+		String fieldName = fieldPrefix + StringUtils.uncapitalize(beanClassShortName);
+		//
+		code = StringUtils.replace(code, "%BeanClass%", beanClassName);
+		//
+		if (ReflectionUtils.getConstructorBySignature(m_beanClass, "<init>()") == null) {
+			code = StringUtils.replace(code, "%BeanField%", fieldName);
+		} else {
+			code = StringUtils.replace(code, "%BeanField%", fieldName + " = new " + beanClassName + "()");
+		}
+		//
+		IPreferenceStore preferences = ToolkitProvider.DESCRIPTION.getPreferences();
+		String accessPrefix =
+				preferences.getBoolean(FieldUniqueVariableSupport.P_PREFIX_THIS) ? "this." : "";
+		String beanFieldAccess = accessPrefix + fieldName;
+		//
+		code = StringUtils.replace(code, "%BeanName%", StringUtils.capitalize(beanClassShortName));
+		code = StringUtils.replace(code, "%BeanFieldAccess%", accessPrefix + fieldName);
+		// prepare properties
+		final List<PropertyAdapter> properties = Lists.newArrayList();
+		Display.getDefault().syncExec(new Runnable() {
+			public void run() {
+				CollectionUtils.addAll(properties, m_propertiesViewer.getCheckedElements());
+			}
+		});
+		// prepare code
+		StringBuffer componentFields = new StringBuffer();
+		StringBuffer components = new StringBuffer();
+		String swingContainer = StringUtils.substringBetween(code, "%Components%", "%");
+		String swingContainerWithDot = "this".equals(swingContainer) ? "" : swingContainer + ".";
+		//
+		int propertiesCount = properties.size();
+		int lastPropertyIndex = propertiesCount - 1;
+		StringBuffer bindings = new StringBuffer();
+		// prepare layout code
+		components.append("\t\tGridBagLayout gridBagLayout = new GridBagLayout();\r\n");
+		components.append("\t\tgridBagLayout.columnWidths = new int[]{0, 0, 0};\r\n");
+		components.append("\t\tgridBagLayout.rowHeights = new int[]{"
+				+ StringUtils.repeat("0, ", propertiesCount)
+				+ "0};\r\n");
+		components.append("\t\tgridBagLayout.columnWeights = new double[]{0.0, 1.0, 1.0E-4};\r\n");
+		components.append("\t\tgridBagLayout.rowWeights = new double[]{"
+				+ StringUtils.repeat("0.0, ", propertiesCount)
+				+ "1.0E-4};\r\n");
+		components.append("\t\t" + swingContainerWithDot + "setLayout(gridBagLayout);\r\n");
+		//
+		StringBuffer group = new StringBuffer();
+		generationSupport.generateLocalName("bindingGroup");
+		//
+		StringBuffer lazy = new StringBuffer();
+		//
+		for (int i = 0; i < propertiesCount; i++) {
+			String index = Integer.toString(i);
+			//
+			PropertyAdapter property = properties.get(i);
+			Object[] editorData = m_propertyToEditor.get(property);
+			SwingComponentDescriptor componentDescriptor = (SwingComponentDescriptor) editorData[0];
+			//
+			String propertyName = property.getName();
+			// label
+			addLabelCode(
+					componentFields,
+					components,
+					lazy,
+					swingContainerWithDot,
+					blockMode,
+					lazyVariables,
+					propertyName,
+					index);
+			//
+			String componentClassName = componentDescriptor.getComponentClass();
+			String componentShortClassName = ClassUtils.getShortClassName(componentClassName);
+			String componentFieldName = fieldPrefix + propertyName + componentShortClassName;
+			String componentFieldAccess = accessPrefix + componentFieldName;
+			String componentLazyAccess =
+					"get" + StringUtils.capitalize(propertyName) + componentShortClassName + "()";
+			String componentAccess = lazyVariables ? componentLazyAccess : componentFieldAccess;
+			//
+			importList.add(componentClassName);
+			// field
+			componentFields.append("\r\nfield\r\n\tprivate "
+					+ componentShortClassName
+					+ " "
+					+ componentFieldName
+					+ ";");
+			// component
+			addComponentCode(
+					components,
+					lazy,
+					swingContainerWithDot,
+					blockMode,
+					lazyVariables,
+					componentShortClassName,
+					componentFieldAccess,
+					componentLazyAccess,
+					index);
+			// binding properties
+			AutoBindingUpdateStrategyDescriptor strategyDescriptor =
+					(AutoBindingUpdateStrategyDescriptor) editorData[1];
+			//
+			String modelPropertyName = generationSupport.generateLocalName(propertyName, "Property");
+			String targetPropertyName =
+					generationSupport.generateLocalName(componentDescriptor.getName(1), "Property");
+			String bindingName = generationSupport.generateLocalName("autoBinding");
+			String modelGeneric = null;
+			String targetGeneric = null;
+			//
+			if (generationSupport.useGenerics()) {
+				modelGeneric =
+						beanClassName + ", " + GenericUtils.convertPrimitiveType(property.getType().getName());
+				bindings.append("\t\tBeanProperty<" + modelGeneric + "> ");
+			} else {
+				bindings.append("\t\tProperty ");
+			}
+			bindings.append(modelPropertyName + " = BeanProperty.create(\"" + propertyName + "\");\r\n");
+			//
+			if (generationSupport.useGenerics()) {
+				targetGeneric =
+						componentDescriptor.getComponentClass() + ", " + componentDescriptor.getPropertyClass();
+				bindings.append("\t\tBeanProperty<" + targetGeneric + "> ");
+			} else {
+				bindings.append("\t\tProperty ");
+			}
+			bindings.append(targetPropertyName
+					+ " = BeanProperty.create(\""
+					+ componentDescriptor.getName(1)
+					+ "\");\r\n");
+			// binding
+			bindings.append("\t\tAutoBinding");
+			if (generationSupport.useGenerics()) {
+				bindings.append("<" + modelGeneric + ", " + targetGeneric + ">");
+			}
+			bindings.append(" "
+					+ bindingName
+					+ " = Bindings.createAutoBinding("
+					+ strategyDescriptor.getSourceCode()
+					+ ", "
+					+ beanFieldAccess
+					+ ", "
+					+ modelPropertyName
+					+ ", "
+					+ componentAccess
+					+ ", "
+					+ targetPropertyName
+					+ ");\r\n");
+			bindings.append("\t\t" + bindingName + ".bind();");
+			//
+			group.append("\t\tbindingGroup.addBinding(" + bindingName + ");");
+			//
+			if (i < lastPropertyIndex) {
+				componentFields.append("\r\n");
+				components.append("\r\n");
+				bindings.append("\r\n\t\t//\r\n");
+				group.append("\r\n");
+			}
+			//
+		}
+		// replace template patterns
+		code = StringUtils.replace(code, "%ComponentFields%", componentFields.toString());
+		code = StringUtils.replace(code, "%Components%" + swingContainer + "%", components.toString());
+		code = StringUtils.replace(code, "%Bindings%", bindings.toString());
+		code = StringUtils.replace(code, "%Group%", group.toString());
+		code = StringUtils.replace(code, "%LAZY%", lazy.toString());
+		// add imports
+		for (String qualifiedTypeName : importList) {
+			imports.addImport(qualifiedTypeName);
+		}
+		//
+		return code;
+	}
 
-  private static void addLabelCode(StringBuffer componentFields,
-      StringBuffer components,
-      StringBuffer lazy,
-      String swingContainerWithDot,
-      boolean blockMode,
-      boolean lazyVariables,
-      String propertyName,
-      String index) {
-    String componentAccess = null;
-    if (lazyVariables) {
-      // field
-      String fieldPrefix = JavaCore.getOption(JavaCore.CODEASSIST_FIELD_PREFIXES);
-      String label = propertyName + "Label";
-      componentFields.append("\r\nfield\r\n\tprivate JLabel " + fieldPrefix + label + ";\r\n");
-      // lazy method
-      IPreferenceStore preferences = ToolkitProvider.DESCRIPTION.getPreferences();
-      String accessPrefix =
-          preferences.getBoolean(FieldUniqueVariableSupport.P_PREFIX_THIS) ? "this." : "";
-      componentAccess = "get" + StringUtils.capitalize(label) + "()";
-      String labelAccess = accessPrefix + fieldPrefix + label;
-      lazy.append("\r\nmethod\r\n\tprivate JLabel "
-          + componentAccess
-          + " {\r\n\t\tif ("
-          + labelAccess
-          + " == null) {\r\n\t\t\t"
-          + labelAccess
-          + " = new JLabel(\""
-          + StringUtils.capitalize(propertyName)
-          + ":\");\r\n\t\t}\r\n\t\treturn "
-          + labelAccess
-          + ";\r\n\t}\r\n\r\n");
-    }
-    if (blockMode) {
-      // block
-      components.append("\t\t{\r\n");
-      // component
-      if (!lazyVariables) {
-        componentAccess = "label";
-        components.append("\t\t\tJLabel label = new JLabel(\""
-            + StringUtils.capitalize(propertyName)
-            + ":\");\r\n");
-      }
-      // layout
-      components.append("\t\t\tGridBagConstraints gbc = new GridBagConstraints();\r\n");
-      components.append("\t\t\tgbc.insets = new Insets(5, 5, 5, 5);\r\n");
-      components.append("\t\t\tgbc.gridx = 0;\r\n");
-      components.append("\t\t\tgbc.gridy = " + index + ";\r\n");
-      components.append("\t\t\t" + swingContainerWithDot + "add(" + componentAccess + ", gbc);\r\n");
-      // block
-      components.append("\t\t}\r\n");
-    } else {
-      // separator
-      components.append("\t\r\n");
-      // component
-      if (!lazyVariables) {
-        componentAccess = propertyName + "Label";
-        components.append("\t\tJLabel "
-            + componentAccess
-            + " = new JLabel(\""
-            + StringUtils.capitalize(propertyName)
-            + ":\");\r\n");
-      }
-      // layout
-      String gbc = "labelGbc_" + index;
-      components.append("\t\tGridBagConstraints " + gbc + " = new GridBagConstraints();\r\n");
-      components.append("\t\t" + gbc + ".insets = new Insets(5, 5, 5, 5);\r\n");
-      components.append("\t\t" + gbc + ".gridx = 0;\r\n");
-      components.append("\t\t" + gbc + ".gridy = " + index + ";\r\n");
-      components.append("\t\t"
-          + swingContainerWithDot
-          + "add("
-          + componentAccess
-          + ", "
-          + gbc
-          + ");\r\n");
-      // separator
-      components.append("\t\r\n");
-    }
-  }
+	private static void addLabelCode(StringBuffer componentFields,
+			StringBuffer components,
+			StringBuffer lazy,
+			String swingContainerWithDot,
+			boolean blockMode,
+			boolean lazyVariables,
+			String propertyName,
+			String index) {
+		String componentAccess = null;
+		if (lazyVariables) {
+			// field
+			String fieldPrefix = JavaCore.getOption(JavaCore.CODEASSIST_FIELD_PREFIXES);
+			String label = propertyName + "Label";
+			componentFields.append("\r\nfield\r\n\tprivate JLabel " + fieldPrefix + label + ";\r\n");
+			// lazy method
+			IPreferenceStore preferences = ToolkitProvider.DESCRIPTION.getPreferences();
+			String accessPrefix =
+					preferences.getBoolean(FieldUniqueVariableSupport.P_PREFIX_THIS) ? "this." : "";
+			componentAccess = "get" + StringUtils.capitalize(label) + "()";
+			String labelAccess = accessPrefix + fieldPrefix + label;
+			lazy.append("\r\nmethod\r\n\tprivate JLabel "
+					+ componentAccess
+					+ " {\r\n\t\tif ("
+					+ labelAccess
+					+ " == null) {\r\n\t\t\t"
+					+ labelAccess
+					+ " = new JLabel(\""
+					+ StringUtils.capitalize(propertyName)
+					+ ":\");\r\n\t\t}\r\n\t\treturn "
+					+ labelAccess
+					+ ";\r\n\t}\r\n\r\n");
+		}
+		if (blockMode) {
+			// block
+			components.append("\t\t{\r\n");
+			// component
+			if (!lazyVariables) {
+				componentAccess = "label";
+				components.append("\t\t\tJLabel label = new JLabel(\""
+						+ StringUtils.capitalize(propertyName)
+						+ ":\");\r\n");
+			}
+			// layout
+			components.append("\t\t\tGridBagConstraints gbc = new GridBagConstraints();\r\n");
+			components.append("\t\t\tgbc.insets = new Insets(5, 5, 5, 5);\r\n");
+			components.append("\t\t\tgbc.gridx = 0;\r\n");
+			components.append("\t\t\tgbc.gridy = " + index + ";\r\n");
+			components.append("\t\t\t" + swingContainerWithDot + "add(" + componentAccess + ", gbc);\r\n");
+			// block
+			components.append("\t\t}\r\n");
+		} else {
+			// separator
+			components.append("\t\r\n");
+			// component
+			if (!lazyVariables) {
+				componentAccess = propertyName + "Label";
+				components.append("\t\tJLabel "
+						+ componentAccess
+						+ " = new JLabel(\""
+						+ StringUtils.capitalize(propertyName)
+						+ ":\");\r\n");
+			}
+			// layout
+			String gbc = "labelGbc_" + index;
+			components.append("\t\tGridBagConstraints " + gbc + " = new GridBagConstraints();\r\n");
+			components.append("\t\t" + gbc + ".insets = new Insets(5, 5, 5, 5);\r\n");
+			components.append("\t\t" + gbc + ".gridx = 0;\r\n");
+			components.append("\t\t" + gbc + ".gridy = " + index + ";\r\n");
+			components.append("\t\t"
+					+ swingContainerWithDot
+					+ "add("
+					+ componentAccess
+					+ ", "
+					+ gbc
+					+ ");\r\n");
+			// separator
+			components.append("\t\r\n");
+		}
+	}
 
-  private static boolean useBlockMode() {
-    StatementGeneratorDescription statement =
-        SwingToolkitDescription.INSTANCE.getGenerationSettings().getStatement();
-    return statement != null && "Block".equals(statement.getName());
-  }
+	private static boolean useBlockMode() {
+		StatementGeneratorDescription statement =
+				SwingToolkitDescription.INSTANCE.getGenerationSettings().getStatement();
+		return statement != null && "Block".equals(statement.getName());
+	}
 
-  private static boolean createLazyVariables() {
-    VariableSupportDescription variable =
-        SwingToolkitDescription.INSTANCE.getGenerationSettings().getVariable();
-    return variable != null && "Lazy".equals(variable.getName());
-  }
+	private static boolean createLazyVariables() {
+		VariableSupportDescription variable =
+				SwingToolkitDescription.INSTANCE.getGenerationSettings().getVariable();
+		return variable != null && "Lazy".equals(variable.getName());
+	}
 
-  private static void addComponentCode(StringBuffer components,
-      StringBuffer lazy,
-      String swingContainerWithDot,
-      boolean blockMode,
-      boolean lazyVariable,
-      String componentShortClassName,
-      String componentFieldAccess,
-      String componentLazyAccess,
-      String index) {
-    String componentAccess = null;
-    if (lazyVariable) {
-      // lazy method
-      componentAccess = componentLazyAccess;
-      lazy.append("\r\nmethod\r\n\tprivate "
-          + componentShortClassName
-          + " "
-          + componentLazyAccess
-          + " {\r\n\t\tif ("
-          + componentFieldAccess
-          + " == null) {\r\n\t\t\t"
-          + componentFieldAccess
-          + " = new "
-          + componentShortClassName
-          + "();\r\n\t\t}\r\n\t\treturn "
-          + componentFieldAccess
-          + ";\r\n\t}\r\n\r\n");
-    }
-    if (blockMode) {
-      // block
-      components.append("\t\t{\r\n");
-      // component
-      if (!lazyVariable) {
-        componentAccess = componentFieldAccess;
-        components.append("\t\t\t "
-            + componentFieldAccess
-            + " = new "
-            + componentShortClassName
-            + "();\r\n");
-      }
-      // layout
-      components.append("\t\t\tGridBagConstraints gbc = new GridBagConstraints();\r\n");
-      components.append("\t\t\tgbc.insets = new Insets(5, 0, 5, 5);\r\n");
-      components.append("\t\t\tgbc.fill = GridBagConstraints.HORIZONTAL;\r\n");
-      components.append("\t\t\tgbc.gridx = 1;\r\n");
-      components.append("\t\t\tgbc.gridy = " + index + ";\r\n");
-      components.append("\t\t\t" + swingContainerWithDot + "add(" + componentAccess + ", gbc);\r\n");
-      // block
-      components.append("\t\t}");
-    } else {
-      // separator
-      components.append("\t\r\n");
-      //component
-      if (!lazyVariable) {
-        componentAccess = componentFieldAccess;
-        components.append("\t\t "
-            + componentFieldAccess
-            + " = new "
-            + componentShortClassName
-            + "();\r\n");
-      }
-      // layout
-      String gbc = "componentGbc_" + index;
-      components.append("\t\tGridBagConstraints " + gbc + " = new GridBagConstraints();\r\n");
-      components.append("\t\t" + gbc + ".insets = new Insets(5, 0, 5, 5);\r\n");
-      components.append("\t\t" + gbc + ".fill = GridBagConstraints.HORIZONTAL;\r\n");
-      components.append("\t\t" + gbc + ".gridx = 1;\r\n");
-      components.append("\t\t" + gbc + ".gridy = " + index + ";\r\n");
-      components.append("\t\t"
-          + swingContainerWithDot
-          + "add("
-          + componentAccess
-          + ", "
-          + gbc
-          + ");\r\n");
-      // separator
-      components.append("\t\t");
-    }
-  }
+	private static void addComponentCode(StringBuffer components,
+			StringBuffer lazy,
+			String swingContainerWithDot,
+			boolean blockMode,
+			boolean lazyVariable,
+			String componentShortClassName,
+			String componentFieldAccess,
+			String componentLazyAccess,
+			String index) {
+		String componentAccess = null;
+		if (lazyVariable) {
+			// lazy method
+			componentAccess = componentLazyAccess;
+			lazy.append("\r\nmethod\r\n\tprivate "
+					+ componentShortClassName
+					+ " "
+					+ componentLazyAccess
+					+ " {\r\n\t\tif ("
+					+ componentFieldAccess
+					+ " == null) {\r\n\t\t\t"
+					+ componentFieldAccess
+					+ " = new "
+					+ componentShortClassName
+					+ "();\r\n\t\t}\r\n\t\treturn "
+					+ componentFieldAccess
+					+ ";\r\n\t}\r\n\r\n");
+		}
+		if (blockMode) {
+			// block
+			components.append("\t\t{\r\n");
+			// component
+			if (!lazyVariable) {
+				componentAccess = componentFieldAccess;
+				components.append("\t\t\t "
+						+ componentFieldAccess
+						+ " = new "
+						+ componentShortClassName
+						+ "();\r\n");
+			}
+			// layout
+			components.append("\t\t\tGridBagConstraints gbc = new GridBagConstraints();\r\n");
+			components.append("\t\t\tgbc.insets = new Insets(5, 0, 5, 5);\r\n");
+			components.append("\t\t\tgbc.fill = GridBagConstraints.HORIZONTAL;\r\n");
+			components.append("\t\t\tgbc.gridx = 1;\r\n");
+			components.append("\t\t\tgbc.gridy = " + index + ";\r\n");
+			components.append("\t\t\t" + swingContainerWithDot + "add(" + componentAccess + ", gbc);\r\n");
+			// block
+			components.append("\t\t}");
+		} else {
+			// separator
+			components.append("\t\r\n");
+			//component
+			if (!lazyVariable) {
+				componentAccess = componentFieldAccess;
+				components.append("\t\t "
+						+ componentFieldAccess
+						+ " = new "
+						+ componentShortClassName
+						+ "();\r\n");
+			}
+			// layout
+			String gbc = "componentGbc_" + index;
+			components.append("\t\tGridBagConstraints " + gbc + " = new GridBagConstraints();\r\n");
+			components.append("\t\t" + gbc + ".insets = new Insets(5, 0, 5, 5);\r\n");
+			components.append("\t\t" + gbc + ".fill = GridBagConstraints.HORIZONTAL;\r\n");
+			components.append("\t\t" + gbc + ".gridx = 1;\r\n");
+			components.append("\t\t" + gbc + ".gridy = " + index + ";\r\n");
+			components.append("\t\t"
+					+ swingContainerWithDot
+					+ "add("
+					+ componentAccess
+					+ ", "
+					+ gbc
+					+ ");\r\n");
+			// separator
+			components.append("\t\t");
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.java6/src/org/eclipse/wb/internal/swing/java6/Activator.java b/org.eclipse.wb.swing.java6/src/org/eclipse/wb/internal/swing/java6/Activator.java
index 2f8a7da1a..91d1df313 100644
--- a/org.eclipse.wb.swing.java6/src/org/eclipse/wb/internal/swing/java6/Activator.java
+++ b/org.eclipse.wb.swing.java6/src/org/eclipse/wb/internal/swing/java6/Activator.java
@@ -28,64 +28,64 @@
  * @coverage swing.model
  */
 public final class Activator extends AbstractUIPlugin {
-  public static final String PLUGIN_ID = "org.eclipse.wb.swing.java6";
-  private static Activator m_plugin;
+	public static final String PLUGIN_ID = "org.eclipse.wb.swing.java6";
+	private static Activator m_plugin;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Bundle operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void start(BundleContext context) throws Exception {
-    super.start(context);
-    m_plugin = this;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Bundle operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+		m_plugin = this;
+	}
 
-  @Override
-  public void stop(BundleContext context) throws Exception {
-    m_plugin = null;
-    super.stop(context);
-  }
+	@Override
+	public void stop(BundleContext context) throws Exception {
+		m_plugin = null;
+		super.stop(context);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the instance of {@link Activator}.
-   */
-  public static Activator getDefault() {
-    return m_plugin;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the instance of {@link Activator}.
+	 */
+	public static Activator getDefault() {
+		return m_plugin;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Resources
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final BundleResourceProvider m_resourceProvider =
-      BundleResourceProvider.get(PLUGIN_ID);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Resources
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final BundleResourceProvider m_resourceProvider =
+			BundleResourceProvider.get(PLUGIN_ID);
 
-  /**
-   * @return the {@link InputStream} for file from plugin directory.
-   */
-  public static InputStream getFile(String path) {
-    return m_resourceProvider.getFile(path);
-  }
+	/**
+	 * @return the {@link InputStream} for file from plugin directory.
+	 */
+	public static InputStream getFile(String path) {
+		return m_resourceProvider.getFile(path);
+	}
 
-  /**
-   * @return the {@link Image} from "icons" directory, with caching.
-   */
-  public static Image getImage(String path) {
-    return m_resourceProvider.getImage("icons/" + path);
-  }
+	/**
+	 * @return the {@link Image} from "icons" directory, with caching.
+	 */
+	public static Image getImage(String path) {
+		return m_resourceProvider.getImage("icons/" + path);
+	}
 
-  /**
-   * @return the {@link ImageDescriptor} from "icons" directory.
-   */
-  public static ImageDescriptor getImageDescriptor(String path) {
-    return m_resourceProvider.getImageDescriptor("icons/" + path);
-  }
+	/**
+	 * @return the {@link ImageDescriptor} from "icons" directory.
+	 */
+	public static ImageDescriptor getImageDescriptor(String path) {
+		return m_resourceProvider.getImageDescriptor("icons/" + path);
+	}
 }
diff --git a/org.eclipse.wb.swing.java6/src/org/eclipse/wb/internal/swing/java6/Messages.java b/org.eclipse.wb.swing.java6/src/org/eclipse/wb/internal/swing/java6/Messages.java
index 63397870f..49aefaf2d 100644
--- a/org.eclipse.wb.swing.java6/src/org/eclipse/wb/internal/swing/java6/Messages.java
+++ b/org.eclipse.wb.swing.java6/src/org/eclipse/wb/internal/swing/java6/Messages.java
@@ -3,15 +3,15 @@
 import org.eclipse.osgi.util.NLS;
 
 public class Messages extends NLS {
-  private static final String BUNDLE_NAME = "org.eclipse.wb.internal.swing.java6.Messages"; //$NON-NLS-1$
-  public static String GroupLayoutParserVisitor_addWithoutArguments;
-  public static String LayoutStyleSupport_unsupportedPlacement;
-  public static String LayoutStyleSupport_unsupportedPosition;
-  static {
-    // initialize resource bundle
-    NLS.initializeMessages(BUNDLE_NAME, Messages.class);
-  }
+	private static final String BUNDLE_NAME = "org.eclipse.wb.internal.swing.java6.Messages"; //$NON-NLS-1$
+	public static String GroupLayoutParserVisitor_addWithoutArguments;
+	public static String LayoutStyleSupport_unsupportedPlacement;
+	public static String LayoutStyleSupport_unsupportedPosition;
+	static {
+		// initialize resource bundle
+		NLS.initializeMessages(BUNDLE_NAME, Messages.class);
+	}
 
-  private Messages() {
-  }
+	private Messages() {
+	}
 }
diff --git a/org.eclipse.wb.swing.java6/src/org/eclipse/wb/internal/swing/java6/gef/GroupLayoutEditPolicy.java b/org.eclipse.wb.swing.java6/src/org/eclipse/wb/internal/swing/java6/gef/GroupLayoutEditPolicy.java
index 60bd549dd..d66a9d298 100644
--- a/org.eclipse.wb.swing.java6/src/org/eclipse/wb/internal/swing/java6/gef/GroupLayoutEditPolicy.java
+++ b/org.eclipse.wb.swing.java6/src/org/eclipse/wb/internal/swing/java6/gef/GroupLayoutEditPolicy.java
@@ -37,164 +37,164 @@
  * @coverage swing.gef.policy
  */
 public final class GroupLayoutEditPolicy extends AbsoluteBasedLayoutEditPolicySwing {
-  private final GroupLayoutInfo m_layout;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public GroupLayoutEditPolicy(GroupLayoutInfo layout) {
-    super(layout);
-    m_layout = layout;
-    createPlacementsSupport(m_layout);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Decorate Child
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void decorateChild(EditPart child) {
-    Object model = child.getModel();
-    if (model instanceof ComponentInfo) {
-      child.installEditPolicy(EditPolicy.SELECTION_ROLE, new GroupSelectionEditPolicy(m_layout));
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Coordinates
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Dimension getContainerSize() {
-    return m_layout.getContainer().getModelBounds().getSize();
-  }
-
-  @Override
-  public Point getClientAreaOffset() {
-    return new Point(0, 0);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Move
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void eraseSelectionFeedbacks() {
-    super.eraseSelectionFeedbacks();
-    for (EditPart child : getHost().getChildren()) {
-      if (child.getModel() instanceof ComponentInfo) {
-        GroupSelectionEditPolicy editPolicy =
-            (GroupSelectionEditPolicy) child.getEditPolicy(EditPolicy.SELECTION_ROLE);
-        editPolicy.hideSelection();
-      }
-    }
-  }
-
-  @Override
-  protected void showSelectionFeedbacks() {
-    super.showSelectionFeedbacks();
-    for (EditPart child : getHost().getChildren()) {
-      if (child.getModel() instanceof ComponentInfo
-          && child.getSelected() != EditPart.SELECTED_NONE) {
-        GroupSelectionEditPolicy editPolicy =
-            (GroupSelectionEditPolicy) child.getEditPolicy(EditPolicy.SELECTION_ROLE);
-        editPolicy.showSelection();
-      }
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Create
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Command getCreateCommand(final CreateRequest request) {
-    return new EditCommand(m_layout) {
-      @Override
-      protected void executeEdit() throws Exception {
-        ComponentInfo component = (ComponentInfo) request.getNewObject();
-        m_layout.command_CREATE(component, null);
-        placementsSupport.commitAdd();
-      }
-    };
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Move
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Command getMoveCommand(final ChangeBoundsRequest request) {
-    return new EditCommand(m_layout) {
-      @Override
-      protected void executeEdit() throws Exception {
-        placementsSupport.commit();
-      }
-    };
-  }
-
-  @Override
-  protected Command getAddCommand(ChangeBoundsRequest request) {
-    final List<EditPart> editParts = request.getEditParts();
-    //
-    return new EditCommand(m_layout) {
-      @Override
-      protected void executeEdit() throws Exception {
-        for (EditPart editPart : editParts) {
-          ComponentInfo component = (ComponentInfo) editPart.getModel();
-          m_layout.command_MOVE(component, null);
-        }
-        placementsSupport.commitAdd();
-      }
-    };
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Resize
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Command getResizeCommand(ChangeBoundsRequest request) {
-    return null;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Paste
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void doPasteComponent(Point pasteLocation, PastedComponentInfo pastedWidget)
-      throws Exception {
-    ComponentInfo control = (ComponentInfo) pastedWidget.getComponent();
-    m_layout.command_CREATE(control, null);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Selection Actions
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected AbstractAlignmentActionsSupport<ComponentInfo> getAlignmentActionsSupport() {
-    return new ComplexAlignmentActionsSupport<ComponentInfo>(placementsSupport) {
-      @Override
-      protected boolean isComponentInfo(ObjectInfo object) {
-        return object instanceof ComponentInfo;
-      }
-
-      @Override
-      protected AbstractComponentInfo getLayoutContainer() {
-        return m_layout.getContainer();
-      }
-    };
-  }
+	private final GroupLayoutInfo m_layout;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public GroupLayoutEditPolicy(GroupLayoutInfo layout) {
+		super(layout);
+		m_layout = layout;
+		createPlacementsSupport(m_layout);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Decorate Child
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void decorateChild(EditPart child) {
+		Object model = child.getModel();
+		if (model instanceof ComponentInfo) {
+			child.installEditPolicy(EditPolicy.SELECTION_ROLE, new GroupSelectionEditPolicy(m_layout));
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Coordinates
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Dimension getContainerSize() {
+		return m_layout.getContainer().getModelBounds().getSize();
+	}
+
+	@Override
+	public Point getClientAreaOffset() {
+		return new Point(0, 0);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Move
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void eraseSelectionFeedbacks() {
+		super.eraseSelectionFeedbacks();
+		for (EditPart child : getHost().getChildren()) {
+			if (child.getModel() instanceof ComponentInfo) {
+				GroupSelectionEditPolicy editPolicy =
+						(GroupSelectionEditPolicy) child.getEditPolicy(EditPolicy.SELECTION_ROLE);
+				editPolicy.hideSelection();
+			}
+		}
+	}
+
+	@Override
+	protected void showSelectionFeedbacks() {
+		super.showSelectionFeedbacks();
+		for (EditPart child : getHost().getChildren()) {
+			if (child.getModel() instanceof ComponentInfo
+					&& child.getSelected() != EditPart.SELECTED_NONE) {
+				GroupSelectionEditPolicy editPolicy =
+						(GroupSelectionEditPolicy) child.getEditPolicy(EditPolicy.SELECTION_ROLE);
+				editPolicy.showSelection();
+			}
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Create
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Command getCreateCommand(final CreateRequest request) {
+		return new EditCommand(m_layout) {
+			@Override
+			protected void executeEdit() throws Exception {
+				ComponentInfo component = (ComponentInfo) request.getNewObject();
+				m_layout.command_CREATE(component, null);
+				placementsSupport.commitAdd();
+			}
+		};
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Move
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Command getMoveCommand(final ChangeBoundsRequest request) {
+		return new EditCommand(m_layout) {
+			@Override
+			protected void executeEdit() throws Exception {
+				placementsSupport.commit();
+			}
+		};
+	}
+
+	@Override
+	protected Command getAddCommand(ChangeBoundsRequest request) {
+		final List<EditPart> editParts = request.getEditParts();
+		//
+		return new EditCommand(m_layout) {
+			@Override
+			protected void executeEdit() throws Exception {
+				for (EditPart editPart : editParts) {
+					ComponentInfo component = (ComponentInfo) editPart.getModel();
+					m_layout.command_MOVE(component, null);
+				}
+				placementsSupport.commitAdd();
+			}
+		};
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Resize
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Command getResizeCommand(ChangeBoundsRequest request) {
+		return null;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Paste
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void doPasteComponent(Point pasteLocation, PastedComponentInfo pastedWidget)
+			throws Exception {
+		ComponentInfo control = (ComponentInfo) pastedWidget.getComponent();
+		m_layout.command_CREATE(control, null);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Selection Actions
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected AbstractAlignmentActionsSupport<ComponentInfo> getAlignmentActionsSupport() {
+		return new ComplexAlignmentActionsSupport<ComponentInfo>(placementsSupport) {
+			@Override
+			protected boolean isComponentInfo(ObjectInfo object) {
+				return object instanceof ComponentInfo;
+			}
+
+			@Override
+			protected AbstractComponentInfo getLayoutContainer() {
+				return m_layout.getContainer();
+			}
+		};
+	}
 }
diff --git a/org.eclipse.wb.swing.java6/src/org/eclipse/wb/internal/swing/java6/gef/GroupSelectionEditPolicy.java b/org.eclipse.wb.swing.java6/src/org/eclipse/wb/internal/swing/java6/gef/GroupSelectionEditPolicy.java
index c99c35b4f..48055e6f4 100644
--- a/org.eclipse.wb.swing.java6/src/org/eclipse/wb/internal/swing/java6/gef/GroupSelectionEditPolicy.java
+++ b/org.eclipse.wb.swing.java6/src/org/eclipse/wb/internal/swing/java6/gef/GroupSelectionEditPolicy.java
@@ -26,41 +26,41 @@
  * @coverage swing.gef.policy
  */
 public final class GroupSelectionEditPolicy extends AbsoluteComplexSelectionEditPolicy {
-  private final GroupLayoutInfo m_layout;
+	private final GroupLayoutInfo m_layout;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public GroupSelectionEditPolicy(GroupLayoutInfo layout) {
-    super(layout);
-    m_layout = layout;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public GroupSelectionEditPolicy(GroupLayoutInfo layout) {
+		super(layout);
+		m_layout = layout;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Overrides
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Image getActionImage(String imageName) {
-    return GroupLayoutInfo.getImage(imageName);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Overrides
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Image getActionImage(String imageName) {
+		return GroupLayoutInfo.getImage(imageName);
+	}
 
-  @Override
-  protected ComponentAttachmentInfo getComponentAttachmentInfo(IAbstractComponentInfo widget,
-      int side) throws Exception {
-    return m_layout.getComponentAttachmentInfo(widget, side);
-  }
+	@Override
+	protected ComponentAttachmentInfo getComponentAttachmentInfo(IAbstractComponentInfo widget,
+			int side) throws Exception {
+		return m_layout.getComponentAttachmentInfo(widget, side);
+	}
 
-  @Override
-  protected void showSelection() {
-    super.showSelection();
-  }
+	@Override
+	protected void showSelection() {
+		super.showSelection();
+	}
 
-  @Override
-  protected void hideSelection() {
-    super.hideSelection();
-  }
+	@Override
+	protected void hideSelection() {
+		super.hideSelection();
+	}
 }
diff --git a/org.eclipse.wb.swing.java6/src/org/eclipse/wb/internal/swing/java6/gef/LayoutEditPolicyFactory2.java b/org.eclipse.wb.swing.java6/src/org/eclipse/wb/internal/swing/java6/gef/LayoutEditPolicyFactory2.java
index 16b39c57b..07d2e533a 100644
--- a/org.eclipse.wb.swing.java6/src/org/eclipse/wb/internal/swing/java6/gef/LayoutEditPolicyFactory2.java
+++ b/org.eclipse.wb.swing.java6/src/org/eclipse/wb/internal/swing/java6/gef/LayoutEditPolicyFactory2.java
@@ -26,23 +26,23 @@
  * @coverage swing.gef.policy
  */
 public final class LayoutEditPolicyFactory2 implements ILayoutEditPolicyFactory {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ILayoutEditPolicyFactory
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public LayoutEditPolicy createLayoutEditPolicy(EditPart context, Object model) {
-    if (model instanceof GroupLayoutInfo2) {
-      if (!(((GroupLayoutInfo2) model).getCreationSupport() instanceof IImplicitCreationSupport)) {
-        IAdaptable adaptable = (IAdaptable) model;
-        IGroupLayoutInfo layoutInfo = adaptable.getAdapter(IGroupLayoutInfo.class);
-        if (layoutInfo != null) {
-          return new SwingGroupLayoutEditPolicy2(layoutInfo);
-        }
-      }
-    }
-    // not found
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ILayoutEditPolicyFactory
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public LayoutEditPolicy createLayoutEditPolicy(EditPart context, Object model) {
+		if (model instanceof GroupLayoutInfo2) {
+			if (!(((GroupLayoutInfo2) model).getCreationSupport() instanceof IImplicitCreationSupport)) {
+				IAdaptable adaptable = (IAdaptable) model;
+				IGroupLayoutInfo layoutInfo = adaptable.getAdapter(IGroupLayoutInfo.class);
+				if (layoutInfo != null) {
+					return new SwingGroupLayoutEditPolicy2(layoutInfo);
+				}
+			}
+		}
+		// not found
+		return null;
+	}
 }
diff --git a/org.eclipse.wb.swing.java6/src/org/eclipse/wb/internal/swing/java6/gef/SwingGroupLayoutEditPolicy2.java b/org.eclipse.wb.swing.java6/src/org/eclipse/wb/internal/swing/java6/gef/SwingGroupLayoutEditPolicy2.java
index cc4a19547..cedd89d57 100644
--- a/org.eclipse.wb.swing.java6/src/org/eclipse/wb/internal/swing/java6/gef/SwingGroupLayoutEditPolicy2.java
+++ b/org.eclipse.wb.swing.java6/src/org/eclipse/wb/internal/swing/java6/gef/SwingGroupLayoutEditPolicy2.java
@@ -23,27 +23,27 @@
  * @author mitin_aa
  */
 public class SwingGroupLayoutEditPolicy2 extends GroupLayoutEditPolicy2 {
-  private static final ILayoutRequestValidator REQUEST_VALIDATOR =
-      LayoutRequestValidators.finalize(LayoutRequestValidators.and(
-          MenuLayoutRequestValidator.INSTANCE,
-          new ComponentClassLayoutRequestValidator("javax.swing.JComponent")));
+	private static final ILayoutRequestValidator REQUEST_VALIDATOR =
+			LayoutRequestValidators.finalize(LayoutRequestValidators.and(
+					MenuLayoutRequestValidator.INSTANCE,
+					new ComponentClassLayoutRequestValidator("javax.swing.JComponent")));
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SwingGroupLayoutEditPolicy2(IGroupLayoutInfo layout) {
-    super(layout);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SwingGroupLayoutEditPolicy2(IGroupLayoutInfo layout) {
+		super(layout);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Requests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected ILayoutRequestValidator getRequestValidator() {
-    return REQUEST_VALIDATOR;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Requests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected ILayoutRequestValidator getRequestValidator() {
+		return REQUEST_VALIDATOR;
+	}
 }
diff --git a/org.eclipse.wb.swing.java6/src/org/eclipse/wb/internal/swing/java6/laf/BaselineSupport.java b/org.eclipse.wb.swing.java6/src/org/eclipse/wb/internal/swing/java6/laf/BaselineSupport.java
index cb5fd76b3..e1a925238 100644
--- a/org.eclipse.wb.swing.java6/src/org/eclipse/wb/internal/swing/java6/laf/BaselineSupport.java
+++ b/org.eclipse.wb.swing.java6/src/org/eclipse/wb/internal/swing/java6/laf/BaselineSupport.java
@@ -21,13 +21,13 @@
  * @author mitin_aa
  */
 public class BaselineSupport implements IBaselineSupport {
-  @Override
-  public int getBaseline(Object component) {
-    if (!(component instanceof Component)) {
-      return NO_BASELINE;
-    }
-    Component comp = (Component) component;
-    Dimension size = comp.getSize();
-    return comp.getBaseline(size.width, size.height);
-  }
+	@Override
+	public int getBaseline(Object component) {
+		if (!(component instanceof Component)) {
+			return NO_BASELINE;
+		}
+		Component comp = (Component) component;
+		Dimension size = comp.getSize();
+		return comp.getBaseline(size.width, size.height);
+	}
 }
diff --git a/org.eclipse.wb.swing.java6/src/org/eclipse/wb/internal/swing/java6/laf/LayoutStyleSupport.java b/org.eclipse.wb.swing.java6/src/org/eclipse/wb/internal/swing/java6/laf/LayoutStyleSupport.java
index d3c1104b6..c61d23341 100644
--- a/org.eclipse.wb.swing.java6/src/org/eclipse/wb/internal/swing/java6/laf/LayoutStyleSupport.java
+++ b/org.eclipse.wb.swing.java6/src/org/eclipse/wb/internal/swing/java6/laf/LayoutStyleSupport.java
@@ -31,75 +31,75 @@
  * @coverage swing.laf
  */
 public final class LayoutStyleSupport implements ILayoutStyleSupport {
-  private LayoutStyle m_layoutStyle;
+	private LayoutStyle m_layoutStyle;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ILayoutStyleSupport
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void setLayoutStyle(LookAndFeel laf) {
-    Assert.isNotNull(laf);
-    m_layoutStyle = laf.getLayoutStyle();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ILayoutStyleSupport
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void setLayoutStyle(LookAndFeel laf) {
+		Assert.isNotNull(laf);
+		m_layoutStyle = laf.getLayoutStyle();
+	}
 
-  @Override
-  public int getContainerGap(JComponent component, int position, Container parent) {
-    return m_layoutStyle.getContainerGap(component, convertPositionConstants(position), parent);
-  }
+	@Override
+	public int getContainerGap(JComponent component, int position, Container parent) {
+		return m_layoutStyle.getContainerGap(component, convertPositionConstants(position), parent);
+	}
 
-  @Override
-  public int getPreferredGap(JComponent component1,
-      JComponent component2,
-      int componentPlacement,
-      int position,
-      Container parent) {
-    return m_layoutStyle.getPreferredGap(
-        component1,
-        component2,
-        convertPlacement(componentPlacement),
-        convertPositionConstants(position),
-        parent);
-  }
+	@Override
+	public int getPreferredGap(JComponent component1,
+			JComponent component2,
+			int componentPlacement,
+			int position,
+			Container parent) {
+		return m_layoutStyle.getPreferredGap(
+				component1,
+				component2,
+				convertPlacement(componentPlacement),
+				convertPositionConstants(position),
+				parent);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Converts from {@link IPositionConstants} into {@link SwingConstants}.
-   */
-  private static int convertPositionConstants(int positionConstant) {
-    switch (positionConstant) {
-      case IPositionConstants.TOP :
-        return SwingConstants.NORTH;
-      case IPositionConstants.BOTTOM :
-        return SwingConstants.SOUTH;
-      case IPositionConstants.LEFT :
-        return SwingConstants.WEST;
-      case IPositionConstants.RIGHT :
-        return SwingConstants.EAST;
-      default :
-        throw new IllegalArgumentException(MessageFormat.format(
-            Messages.LayoutStyleSupport_unsupportedPosition,
-            positionConstant));
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Converts from {@link IPositionConstants} into {@link SwingConstants}.
+	 */
+	private static int convertPositionConstants(int positionConstant) {
+		switch (positionConstant) {
+		case IPositionConstants.TOP :
+			return SwingConstants.NORTH;
+		case IPositionConstants.BOTTOM :
+			return SwingConstants.SOUTH;
+		case IPositionConstants.LEFT :
+			return SwingConstants.WEST;
+		case IPositionConstants.RIGHT :
+			return SwingConstants.EAST;
+		default :
+			throw new IllegalArgumentException(MessageFormat.format(
+					Messages.LayoutStyleSupport_unsupportedPosition,
+					positionConstant));
+		}
+	}
 
-  /**
-   * Converts integer into {@link ComponentPlacement} constant.
-   */
-  private ComponentPlacement convertPlacement(int componentPlacement) {
-    ComponentPlacement[] values = ComponentPlacement.values();
-    for (ComponentPlacement placement : values) {
-      if (placement.ordinal() == componentPlacement) {
-        return placement;
-      }
-    }
-    throw new IllegalArgumentException(MessageFormat.format(
-        Messages.LayoutStyleSupport_unsupportedPlacement,
-        componentPlacement));
-  }
+	/**
+	 * Converts integer into {@link ComponentPlacement} constant.
+	 */
+	private ComponentPlacement convertPlacement(int componentPlacement) {
+		ComponentPlacement[] values = ComponentPlacement.values();
+		for (ComponentPlacement placement : values) {
+			if (placement.ordinal() == componentPlacement) {
+				return placement;
+			}
+		}
+		throw new IllegalArgumentException(MessageFormat.format(
+				Messages.LayoutStyleSupport_unsupportedPlacement,
+				componentPlacement));
+	}
 }
diff --git a/org.eclipse.wb.swing.java6/src/org/eclipse/wb/internal/swing/java6/model/GapSpringInfo.java b/org.eclipse.wb.swing.java6/src/org/eclipse/wb/internal/swing/java6/model/GapSpringInfo.java
index 3bbe863ef..179ceee16 100644
--- a/org.eclipse.wb.swing.java6/src/org/eclipse/wb/internal/swing/java6/model/GapSpringInfo.java
+++ b/org.eclipse.wb.swing.java6/src/org/eclipse/wb/internal/swing/java6/model/GapSpringInfo.java
@@ -23,78 +23,78 @@
  * @coverage swing.model.layout.group
  */
 public final class GapSpringInfo extends SpringInfo {
-  private final boolean m_isContainer;
-  private ComponentPlacement m_placement;
-  private IAbstractComponentInfo m_widget1;
-  private IAbstractComponentInfo m_widget2;
-  private int m_pref = UNSET;
-  private int m_max = UNSET;
+	private final boolean m_isContainer;
+	private ComponentPlacement m_placement;
+	private IAbstractComponentInfo m_widget1;
+	private IAbstractComponentInfo m_widget2;
+	private int m_pref = UNSET;
+	private int m_max = UNSET;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public GapSpringInfo() {
-    this(false);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public GapSpringInfo() {
+		this(false);
+	}
 
-  public GapSpringInfo(boolean isContainer) {
-    m_isContainer = isContainer;
-  }
+	public GapSpringInfo(boolean isContainer) {
+		m_isContainer = isContainer;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void setPlacementType(ComponentPlacement placement) {
-    m_placement = placement;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void setPlacementType(ComponentPlacement placement) {
+		m_placement = placement;
+	}
 
-  public void setGapWidgets(IAbstractComponentInfo widget1, IAbstractComponentInfo widget2) {
-    m_widget1 = widget1;
-    m_widget2 = widget2;
-  }
+	public void setGapWidgets(IAbstractComponentInfo widget1, IAbstractComponentInfo widget2) {
+		m_widget1 = widget1;
+		m_widget2 = widget2;
+	}
 
-  public void setPreferredSize(int prefValue) {
-    m_pref = prefValue;
-  }
+	public void setPreferredSize(int prefValue) {
+		m_pref = prefValue;
+	}
 
-  public void setMaximumSize(int maxValue) {
-    m_max = maxValue;
-  }
+	public void setMaximumSize(int maxValue) {
+		m_max = maxValue;
+	}
 
-  private boolean isPreferred() {
-    return m_placement != null;
-  }
+	private boolean isPreferred() {
+		return m_placement != null;
+	}
 
-  private boolean isContainer() {
-    return m_isContainer;
-  }
+	private boolean isContainer() {
+		return m_isContainer;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Dump
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void dump(int level, StringBuffer buffer) {
-    buffer.append(StringUtils.repeat(" ", level));
-    if (isContainer()) {
-      buffer.append("G cont sizes=");
-      buffer.append((m_pref == UNSET ? "UNSET" : m_pref) + " ");
-      buffer.append((m_max == UNSET ? "UNSET" : m_max));
-    } else if (isPreferred()) {
-      buffer.append("G pref=" + m_placement + " sizes=");
-      buffer.append((m_pref == UNSET ? "UNSET" : m_pref) + " ");
-      buffer.append((m_max == UNSET ? "UNSET" : m_max));
-      if (m_widget1 != null) {
-      }
-    } else {
-      buffer.append("G sizes=");
-      super.dump(level, buffer);
-    }
-    buffer.append("\n");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Dump
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void dump(int level, StringBuffer buffer) {
+		buffer.append(StringUtils.repeat(" ", level));
+		if (isContainer()) {
+			buffer.append("G cont sizes=");
+			buffer.append((m_pref == UNSET ? "UNSET" : m_pref) + " ");
+			buffer.append((m_max == UNSET ? "UNSET" : m_max));
+		} else if (isPreferred()) {
+			buffer.append("G pref=" + m_placement + " sizes=");
+			buffer.append((m_pref == UNSET ? "UNSET" : m_pref) + " ");
+			buffer.append((m_max == UNSET ? "UNSET" : m_max));
+			if (m_widget1 != null) {
+			}
+		} else {
+			buffer.append("G sizes=");
+			super.dump(level, buffer);
+		}
+		buffer.append("\n");
+	}
 }
diff --git a/org.eclipse.wb.swing.java6/src/org/eclipse/wb/internal/swing/java6/model/GroupInfo.java b/org.eclipse.wb.swing.java6/src/org/eclipse/wb/internal/swing/java6/model/GroupInfo.java
index e0050cfdc..9dd4cb18b 100644
--- a/org.eclipse.wb.swing.java6/src/org/eclipse/wb/internal/swing/java6/model/GroupInfo.java
+++ b/org.eclipse.wb.swing.java6/src/org/eclipse/wb/internal/swing/java6/model/GroupInfo.java
@@ -21,13 +21,13 @@
  * @coverage swing.model.layout.group
  */
 public abstract class GroupInfo extends SpringInfo {
-  protected List<SpringInfo> m_children = Lists.newArrayList();
+	protected List<SpringInfo> m_children = Lists.newArrayList();
 
-  /**
-   * Adds a child spring.
-   */
-  public void add(SpringInfo child) {
-    m_children.add(child);
-    child.setParent(this);
-  }
+	/**
+	 * Adds a child spring.
+	 */
+	public void add(SpringInfo child) {
+		m_children.add(child);
+		child.setParent(this);
+	}
 }
diff --git a/org.eclipse.wb.swing.java6/src/org/eclipse/wb/internal/swing/java6/model/GroupLayoutAssociation.java b/org.eclipse.wb.swing.java6/src/org/eclipse/wb/internal/swing/java6/model/GroupLayoutAssociation.java
index 8b51073a6..de0992e36 100644
--- a/org.eclipse.wb.swing.java6/src/org/eclipse/wb/internal/swing/java6/model/GroupLayoutAssociation.java
+++ b/org.eclipse.wb.swing.java6/src/org/eclipse/wb/internal/swing/java6/model/GroupLayoutAssociation.java
@@ -24,38 +24,38 @@
  * @author mitin_aa
  */
 public final class GroupLayoutAssociation extends Association {
-  private Statement m_statement;
+	private Statement m_statement;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void setJavaInfo(JavaInfo javaInfo) throws Exception {
-    super.setJavaInfo(javaInfo);
-    // extract association expression
-    Expression expression =
-        (Expression) javaInfo.getArbitraryValue(GroupLayoutCodeSupport.ASSOCIATION_EXPRESSION_KEY);
-    if (expression != null) {
-      m_statement = AstNodeUtils.getEnclosingStatement(expression);
-    } else {
-      m_statement = null;
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void setJavaInfo(JavaInfo javaInfo) throws Exception {
+		super.setJavaInfo(javaInfo);
+		// extract association expression
+		Expression expression =
+				(Expression) javaInfo.getArbitraryValue(GroupLayoutCodeSupport.ASSOCIATION_EXPRESSION_KEY);
+		if (expression != null) {
+			m_statement = AstNodeUtils.getEnclosingStatement(expression);
+		} else {
+			m_statement = null;
+		}
+	}
 
-  @Override
-  public Statement getStatement() {
-    return m_statement;
-  }
+	@Override
+	public Statement getStatement() {
+		return m_statement;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Clone
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Association getCopy() {
-    return new GroupLayoutAssociation();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Clone
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Association getCopy() {
+		return new GroupLayoutAssociation();
+	}
 }
diff --git a/org.eclipse.wb.swing.java6/src/org/eclipse/wb/internal/swing/java6/model/GroupLayoutInfo.java b/org.eclipse.wb.swing.java6/src/org/eclipse/wb/internal/swing/java6/model/GroupLayoutInfo.java
index 3e534cfa2..2f6786905 100644
--- a/org.eclipse.wb.swing.java6/src/org/eclipse/wb/internal/swing/java6/model/GroupLayoutInfo.java
+++ b/org.eclipse.wb.swing.java6/src/org/eclipse/wb/internal/swing/java6/model/GroupLayoutInfo.java
@@ -41,182 +41,182 @@
  * @coverage swing.model.layout.group
  */
 public final class GroupLayoutInfo extends LayoutInfo implements IAbsoluteLayoutCommands {
-  // constants
-  private static final String GROUP_LAYOUT_CLASS_NAME = "javax.swing.GroupLayout";
-  static final String GROUP_LAYOUT_GROUP_CLASS_NAME = GROUP_LAYOUT_CLASS_NAME + ".Group";
-  static final String PROPERTY_NAME_GROUP = "group";
-  public static final String IDENTIFIER_CREATE_PARALLEL_GROUP = "createParallelGroup";
-  static final String IDENTIFIER_CREATE_SEQUENTIAL_GROUP = "createSequentialGroup";
-  public static final String IDENTIFIER_CREATE_BASELINE_GROUP = "createBaselineGroup";
-  static final String IDENTIFIER_ADD_CONTAINER_GAP = "addContainerGap";
-  static final String IDENTIFIER_ADD_PREFERRED_GAP = "addPreferredGap";
-  static final String IDENTIFIER_ADD_GAP = "addGap";
-  static final String IDENTIFIER_ADD_COMPONENT = "addComponent";
-  static final String IDENTIFIER_ADD_GROUP = "addGroup";
-  private static final String SIGNATURE_SET_HORIZONTAL_GROUP =
-      "setHorizontalGroup(javax.swing.GroupLayout.Group)";
-  private static final String SIGNATURE_SET_VERTICAL_GROUP =
-      "setVerticalGroup(javax.swing.GroupLayout.Group)";
-  // fields
-  private final SpringInfo[] m_rootGroups = new SpringInfo[2];
-  private final Map[] m_widgetMaps = new Map[2];
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public GroupLayoutInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-    m_widgetMaps[0] = Maps.newHashMap();
-    m_widgetMaps[1] = Maps.newHashMap();
-    addBroadcastListener(new JavaEventListener() {
-      @Override
-      public void bindComponents(List<JavaInfo> components) throws Exception {
-        parse();
-      }
-    });
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Layout manipulation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void adjustAttachmentOffset(IAbstractComponentInfo widget, int side, int moveDelta)
-      throws Exception {
-  }
-
-  @Override
-  public void attachAbsolute(IAbstractComponentInfo widget, int side, int distance)
-      throws Exception {
-    // TODO: for testing
-    save();
-  }
-
-  @Override
-  public void attachWidgetParallelly(IAbstractComponentInfo widget,
-      IAbstractComponentInfo attachToWidget,
-      int side,
-      int distance) throws Exception {
-  }
-
-  @Override
-  public void attachWidgetSequientially(IAbstractComponentInfo widget,
-      IAbstractComponentInfo attachToWidget,
-      int side,
-      int distance) throws Exception {
-  }
-
-  @Override
-  public void detach(IAbstractComponentInfo widget, int side) throws Exception {
-  }
-
-  @Override
-  public IAbstractComponentInfo getAttachedToWidget(IAbstractComponentInfo widget, int side)
-      throws Exception {
-    return null;
-  }
-
-  @Override
-  public boolean isAttached(IAbstractComponentInfo widget, int side) throws Exception {
-    return false;
-  }
-
-  @Override
-  public void performAction(int actionId) {
-  }
-
-  @Override
-  public void setExplicitSize(IAbstractComponentInfo widget,
-      int side,
-      int draggingSide,
-      int resizeDelta) throws Exception {
-  }
-
-  public ComponentAttachmentInfo getComponentAttachmentInfo(IAbstractComponentInfo widget,
-      int side) {
-    return null;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public final void command_CREATE(ComponentInfo component, ComponentInfo nextComponent)
-      throws Exception {
-    add(component, null, nextComponent);
-  }
-
-  public final void command_MOVE(ComponentInfo component, ComponentInfo nextComponent)
-      throws Exception {
-    move(component, null, nextComponent);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Misc
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static Image getImage(String imageName) {
-    return Activator.getImage("info/layout/groupLayout/" + imageName);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Save layout code
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void save() throws Exception {
-    saveGroup(SIGNATURE_SET_HORIZONTAL_GROUP, m_rootGroups[0]);
-    saveGroup(SIGNATURE_SET_VERTICAL_GROUP, m_rootGroups[1]);
-    // TODO: link size
-  }
-
-  private void saveGroup(String methodName, SpringInfo rootGroup) throws Exception {
-    /*List<ComponentInfo> childrenComponents = getContainer().getChildrenComponents();
+	// constants
+	private static final String GROUP_LAYOUT_CLASS_NAME = "javax.swing.GroupLayout";
+	static final String GROUP_LAYOUT_GROUP_CLASS_NAME = GROUP_LAYOUT_CLASS_NAME + ".Group";
+	static final String PROPERTY_NAME_GROUP = "group";
+	public static final String IDENTIFIER_CREATE_PARALLEL_GROUP = "createParallelGroup";
+	static final String IDENTIFIER_CREATE_SEQUENTIAL_GROUP = "createSequentialGroup";
+	public static final String IDENTIFIER_CREATE_BASELINE_GROUP = "createBaselineGroup";
+	static final String IDENTIFIER_ADD_CONTAINER_GAP = "addContainerGap";
+	static final String IDENTIFIER_ADD_PREFERRED_GAP = "addPreferredGap";
+	static final String IDENTIFIER_ADD_GAP = "addGap";
+	static final String IDENTIFIER_ADD_COMPONENT = "addComponent";
+	static final String IDENTIFIER_ADD_GROUP = "addGroup";
+	private static final String SIGNATURE_SET_HORIZONTAL_GROUP =
+			"setHorizontalGroup(javax.swing.GroupLayout.Group)";
+	private static final String SIGNATURE_SET_VERTICAL_GROUP =
+			"setVerticalGroup(javax.swing.GroupLayout.Group)";
+	// fields
+	private final SpringInfo[] m_rootGroups = new SpringInfo[2];
+	private final Map[] m_widgetMaps = new Map[2];
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public GroupLayoutInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+		m_widgetMaps[0] = Maps.newHashMap();
+		m_widgetMaps[1] = Maps.newHashMap();
+		addBroadcastListener(new JavaEventListener() {
+			@Override
+			public void bindComponents(List<JavaInfo> components) throws Exception {
+				parse();
+			}
+		});
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Layout manipulation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void adjustAttachmentOffset(IAbstractComponentInfo widget, int side, int moveDelta)
+			throws Exception {
+	}
+
+	@Override
+	public void attachAbsolute(IAbstractComponentInfo widget, int side, int distance)
+			throws Exception {
+		// TODO: for testing
+		save();
+	}
+
+	@Override
+	public void attachWidgetParallelly(IAbstractComponentInfo widget,
+			IAbstractComponentInfo attachToWidget,
+			int side,
+			int distance) throws Exception {
+	}
+
+	@Override
+	public void attachWidgetSequientially(IAbstractComponentInfo widget,
+			IAbstractComponentInfo attachToWidget,
+			int side,
+			int distance) throws Exception {
+	}
+
+	@Override
+	public void detach(IAbstractComponentInfo widget, int side) throws Exception {
+	}
+
+	@Override
+	public IAbstractComponentInfo getAttachedToWidget(IAbstractComponentInfo widget, int side)
+			throws Exception {
+		return null;
+	}
+
+	@Override
+	public boolean isAttached(IAbstractComponentInfo widget, int side) throws Exception {
+		return false;
+	}
+
+	@Override
+	public void performAction(int actionId) {
+	}
+
+	@Override
+	public void setExplicitSize(IAbstractComponentInfo widget,
+			int side,
+			int draggingSide,
+			int resizeDelta) throws Exception {
+	}
+
+	public ComponentAttachmentInfo getComponentAttachmentInfo(IAbstractComponentInfo widget,
+			int side) {
+		return null;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public final void command_CREATE(ComponentInfo component, ComponentInfo nextComponent)
+			throws Exception {
+		add(component, null, nextComponent);
+	}
+
+	public final void command_MOVE(ComponentInfo component, ComponentInfo nextComponent)
+			throws Exception {
+		move(component, null, nextComponent);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Misc
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static Image getImage(String imageName) {
+		return Activator.getImage("info/layout/groupLayout/" + imageName);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Save layout code
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void save() throws Exception {
+		saveGroup(SIGNATURE_SET_HORIZONTAL_GROUP, m_rootGroups[0]);
+		saveGroup(SIGNATURE_SET_VERTICAL_GROUP, m_rootGroups[1]);
+		// TODO: link size
+	}
+
+	private void saveGroup(String methodName, SpringInfo rootGroup) throws Exception {
+		/*List<ComponentInfo> childrenComponents = getContainer().getChildrenComponents();
     StatementTarget statementTarget =
     		JavaInfoUtils.getStatementTarget_whenAllCreated(ImmutableList.copyOf(childrenComponents));
     String referenceExpression =
     		getVariableSupport().getReferenceExpression(new NodeTarget(statementTarget));*/
-    MethodInvocation invocation = getMethodInvocation(methodName);
-    String groupCode = rootGroup.getCode();
-    getEditor().replaceInvocationArguments(invocation, ImmutableList.of(groupCode));
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parse
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @SuppressWarnings("unchecked")
-  protected void parse() {
-    try {
-      m_rootGroups[0] = parseGroup(SIGNATURE_SET_HORIZONTAL_GROUP, m_widgetMaps[0]);
-      m_rootGroups[1] = parseGroup(SIGNATURE_SET_VERTICAL_GROUP, m_widgetMaps[1]);
-    } catch (Throwable e) {
-      throw new DesignerException(1100, e);
-    }
-    if (m_rootGroups[0] == null || m_rootGroups[1] == null) {
-      throw new DesignerException(1100);
-    }
-  }
-
-  protected SpringInfo parseGroup(String methodName,
-      Map<IAbstractComponentInfo, WidgetSpringInfo> widgetMaps) {
-    MethodInvocation invocation = getMethodInvocation(methodName);
-    GroupLayoutParserVisitor parser =
-        new GroupLayoutParserVisitor(widgetMaps, methodName, getContainer());
-    invocation.accept(parser);
-    return parser.getRootGroup();
-  }
-
-  @Override
-  public void attachWidgetBaseline(IAbstractComponentInfo widget,
-      IAbstractComponentInfo attachedToWidget) throws Exception {
-  }
+		MethodInvocation invocation = getMethodInvocation(methodName);
+		String groupCode = rootGroup.getCode();
+		getEditor().replaceInvocationArguments(invocation, ImmutableList.of(groupCode));
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parse
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@SuppressWarnings("unchecked")
+	protected void parse() {
+		try {
+			m_rootGroups[0] = parseGroup(SIGNATURE_SET_HORIZONTAL_GROUP, m_widgetMaps[0]);
+			m_rootGroups[1] = parseGroup(SIGNATURE_SET_VERTICAL_GROUP, m_widgetMaps[1]);
+		} catch (Throwable e) {
+			throw new DesignerException(1100, e);
+		}
+		if (m_rootGroups[0] == null || m_rootGroups[1] == null) {
+			throw new DesignerException(1100);
+		}
+	}
+
+	protected SpringInfo parseGroup(String methodName,
+			Map<IAbstractComponentInfo, WidgetSpringInfo> widgetMaps) {
+		MethodInvocation invocation = getMethodInvocation(methodName);
+		GroupLayoutParserVisitor parser =
+				new GroupLayoutParserVisitor(widgetMaps, methodName, getContainer());
+		invocation.accept(parser);
+		return parser.getRootGroup();
+	}
+
+	@Override
+	public void attachWidgetBaseline(IAbstractComponentInfo widget,
+			IAbstractComponentInfo attachedToWidget) throws Exception {
+	}
 }
diff --git a/org.eclipse.wb.swing.java6/src/org/eclipse/wb/internal/swing/java6/model/GroupLayoutInfo2.java b/org.eclipse.wb.swing.java6/src/org/eclipse/wb/internal/swing/java6/model/GroupLayoutInfo2.java
index f494ef922..49dad3d36 100644
--- a/org.eclipse.wb.swing.java6/src/org/eclipse/wb/internal/swing/java6/model/GroupLayoutInfo2.java
+++ b/org.eclipse.wb.swing.java6/src/org/eclipse/wb/internal/swing/java6/model/GroupLayoutInfo2.java
@@ -46,165 +46,165 @@
  * @author mitin_aa
  */
 public final class GroupLayoutInfo2 extends LayoutInfo implements IAdaptable {
-  public static final String FLAG_IS_MORPHING = "FLAG_IS_MORPHING";
-  private GroupLayoutSupport m_layoutSupport;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public GroupLayoutInfo2(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-    addBroadcastListener(new JavaEventListener() {
-      @Override
-      public void replaceChildAfter(JavaInfo parent, JavaInfo oldChild, JavaInfo newChild)
-          throws Exception {
-        if (oldChild == GroupLayoutInfo2.this) {
-          GroupLayoutInfo2 newLayout = (GroupLayoutInfo2) newChild;
-          newLayout.m_layoutSupport = m_layoutSupport;
-        }
-      }
-    });
-    if (!description.hasTrueTag(FLAG_IS_MORPHING)) {
-      m_layoutSupport =
-          new SwingGroupLayoutSupport(this,
-              new SwingGroupLayoutCodeSupport(this),
-              new SwingVisualMapper(this));
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Copy/Paste
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void clipboardCopy_addContainerCommands(List<ClipboardCommand> commands)
-      throws Exception {
-    super.clipboardCopy_addContainerCommands(commands);
-    commands.add(new GroupLayoutClipboardCommand(m_layoutSupport) {
-      private static final long serialVersionUID = 0L;
-
-      @Override
-      protected GroupLayoutSupport getLayoutSupport(JavaInfo container) {
-        ContainerInfo host = (ContainerInfo) container;
-        GroupLayoutInfo2 layout = (GroupLayoutInfo2) host.getLayout();
-        return layout.m_layoutSupport;
-      }
-    });
-  }
-
-  @Override
-  protected void clipboardCopy_addComponentCommands(ComponentInfo component,
-      List<ClipboardCommand> commands) throws Exception {
-    commands.add(new LayoutClipboardCommand<GroupLayoutInfo2>(component) {
-      private static final long serialVersionUID = 0L;
-
-      @Override
-      protected void add(GroupLayoutInfo2 layout, ComponentInfo component) throws Exception {
-        layout.m_layoutSupport.addComponentImpl(component);
-      }
-    });
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // New layout setup
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void onSet() throws Exception {
-    m_layoutSupport.onSet();
-  }
-
-  @Override
-  protected void onDelete() throws Exception {
-    List<AbstractComponentInfo> components = m_layoutSupport.getLayoutChildren();
-    for (AbstractComponentInfo component : components) {
-      // add default Swing association back
-      InvocationChildAssociation association =
-          new InvocationChildAssociation("%parent%.add(%child%)");
-      association.add(component, JavaInfoUtils.getTarget(getContainer()), null);
-    }
-    super.onDelete();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IAdaptable
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public <T> T getAdapter(Class<T> adapter) {
-    if (JavaInfo.class.isAssignableFrom(adapter)) {
-      return adapter.cast(this);
-    } else if (GroupLayoutSupport.class.isAssignableFrom(adapter)
-        || IGroupLayoutInfo.class.isAssignableFrom(adapter)) {
-      return adapter.cast(m_layoutSupport);
-    }
-    return null;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IImageProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final class ImageProvider implements IImageProvider {
-    static final IImageProvider INSTANCE = new ImageProvider();
-
-    @Override
-    public Image getImage(String path) {
-      return Activator.getImage(path);
-    }
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Swing GroupLayout Support
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final class SwingGroupLayoutSupport extends GroupLayoutSupport {
-    private SwingGroupLayoutSupport(final GroupLayoutInfo2 layout,
-        GroupLayoutCodeSupport codeSupport,
-        VisualMapper visualMapper) {
-      super(layout, codeSupport, visualMapper);
-    }
-
-    @Override
-    protected List<?> getComponents() {
-      return getGroupLayout().getComponents();
-    }
-
-    @Override
-    public Insets getContainerInsets() {
-      return getGroupLayout().getContainer().getInsets();
-    }
-
-    @Override
-    public AbstractComponentInfo getLayoutContainer() {
-      return getGroupLayout().getContainer();
-    }
-
-    @Override
-    public boolean isRelatedComponent(ObjectInfo component) {
-      return getGroupLayout().isManagedObject(component);
-    }
-
-    @Override
-    protected AssociationObject getAssociationObject() {
-      return new AssociationObject("GroupLayout Empty", new GroupLayoutAssociation(), false);
-    }
-
-    @Override
-    protected IImageProvider getImageProvider() {
-      return ImageProvider.INSTANCE;
-    }
-
-    private GroupLayoutInfo2 getGroupLayout() {
-      return (GroupLayoutInfo2) getLayout();
-    }
-  }
+	public static final String FLAG_IS_MORPHING = "FLAG_IS_MORPHING";
+	private GroupLayoutSupport m_layoutSupport;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public GroupLayoutInfo2(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+		addBroadcastListener(new JavaEventListener() {
+			@Override
+			public void replaceChildAfter(JavaInfo parent, JavaInfo oldChild, JavaInfo newChild)
+					throws Exception {
+				if (oldChild == GroupLayoutInfo2.this) {
+					GroupLayoutInfo2 newLayout = (GroupLayoutInfo2) newChild;
+					newLayout.m_layoutSupport = m_layoutSupport;
+				}
+			}
+		});
+		if (!description.hasTrueTag(FLAG_IS_MORPHING)) {
+			m_layoutSupport =
+					new SwingGroupLayoutSupport(this,
+							new SwingGroupLayoutCodeSupport(this),
+							new SwingVisualMapper(this));
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Copy/Paste
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void clipboardCopy_addContainerCommands(List<ClipboardCommand> commands)
+			throws Exception {
+		super.clipboardCopy_addContainerCommands(commands);
+		commands.add(new GroupLayoutClipboardCommand(m_layoutSupport) {
+			private static final long serialVersionUID = 0L;
+
+			@Override
+			protected GroupLayoutSupport getLayoutSupport(JavaInfo container) {
+				ContainerInfo host = (ContainerInfo) container;
+				GroupLayoutInfo2 layout = (GroupLayoutInfo2) host.getLayout();
+				return layout.m_layoutSupport;
+			}
+		});
+	}
+
+	@Override
+	protected void clipboardCopy_addComponentCommands(ComponentInfo component,
+			List<ClipboardCommand> commands) throws Exception {
+		commands.add(new LayoutClipboardCommand<GroupLayoutInfo2>(component) {
+			private static final long serialVersionUID = 0L;
+
+			@Override
+			protected void add(GroupLayoutInfo2 layout, ComponentInfo component) throws Exception {
+				layout.m_layoutSupport.addComponentImpl(component);
+			}
+		});
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// New layout setup
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void onSet() throws Exception {
+		m_layoutSupport.onSet();
+	}
+
+	@Override
+	protected void onDelete() throws Exception {
+		List<AbstractComponentInfo> components = m_layoutSupport.getLayoutChildren();
+		for (AbstractComponentInfo component : components) {
+			// add default Swing association back
+			InvocationChildAssociation association =
+					new InvocationChildAssociation("%parent%.add(%child%)");
+			association.add(component, JavaInfoUtils.getTarget(getContainer()), null);
+		}
+		super.onDelete();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IAdaptable
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public <T> T getAdapter(Class<T> adapter) {
+		if (JavaInfo.class.isAssignableFrom(adapter)) {
+			return adapter.cast(this);
+		} else if (GroupLayoutSupport.class.isAssignableFrom(adapter)
+				|| IGroupLayoutInfo.class.isAssignableFrom(adapter)) {
+			return adapter.cast(m_layoutSupport);
+		}
+		return null;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IImageProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final class ImageProvider implements IImageProvider {
+		static final IImageProvider INSTANCE = new ImageProvider();
+
+		@Override
+		public Image getImage(String path) {
+			return Activator.getImage(path);
+		}
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Swing GroupLayout Support
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final class SwingGroupLayoutSupport extends GroupLayoutSupport {
+		private SwingGroupLayoutSupport(final GroupLayoutInfo2 layout,
+				GroupLayoutCodeSupport codeSupport,
+				VisualMapper visualMapper) {
+			super(layout, codeSupport, visualMapper);
+		}
+
+		@Override
+		protected List<?> getComponents() {
+			return getGroupLayout().getComponents();
+		}
+
+		@Override
+		public Insets getContainerInsets() {
+			return getGroupLayout().getContainer().getInsets();
+		}
+
+		@Override
+		public AbstractComponentInfo getLayoutContainer() {
+			return getGroupLayout().getContainer();
+		}
+
+		@Override
+		public boolean isRelatedComponent(ObjectInfo component) {
+			return getGroupLayout().isManagedObject(component);
+		}
+
+		@Override
+		protected AssociationObject getAssociationObject() {
+			return new AssociationObject("GroupLayout Empty", new GroupLayoutAssociation(), false);
+		}
+
+		@Override
+		protected IImageProvider getImageProvider() {
+			return ImageProvider.INSTANCE;
+		}
+
+		private GroupLayoutInfo2 getGroupLayout() {
+			return (GroupLayoutInfo2) getLayout();
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing.java6/src/org/eclipse/wb/internal/swing/java6/model/GroupLayoutParserVisitor.java b/org.eclipse.wb.swing.java6/src/org/eclipse/wb/internal/swing/java6/model/GroupLayoutParserVisitor.java
index 277b163e0..4167f949d 100644
--- a/org.eclipse.wb.swing.java6/src/org/eclipse/wb/internal/swing/java6/model/GroupLayoutParserVisitor.java
+++ b/org.eclipse.wb.swing.java6/src/org/eclipse/wb/internal/swing/java6/model/GroupLayoutParserVisitor.java
@@ -42,304 +42,304 @@
  * @coverage swing.model.layout.group
  */
 final class GroupLayoutParserVisitor extends ASTVisitor {
-  private final String m_methodName;
-  private final ContainerInfo m_container;
-  private final Map<IAbstractComponentInfo, WidgetSpringInfo> m_mappedWidgets;
-  private SpringInfo m_rootGroup;
+	private final String m_methodName;
+	private final ContainerInfo m_container;
+	private final Map<IAbstractComponentInfo, WidgetSpringInfo> m_mappedWidgets;
+	private SpringInfo m_rootGroup;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public GroupLayoutParserVisitor(Map<IAbstractComponentInfo, WidgetSpringInfo> mappedWidgets,
-      String methodName,
-      ContainerInfo container) {
-    super();
-    m_mappedWidgets = mappedWidgets;
-    m_methodName = methodName;
-    m_container = container;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public GroupLayoutParserVisitor(Map<IAbstractComponentInfo, WidgetSpringInfo> mappedWidgets,
+			String methodName,
+			ContainerInfo container) {
+		super();
+		m_mappedWidgets = mappedWidgets;
+		m_methodName = methodName;
+		m_container = container;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Visitor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void endVisit(final MethodInvocation node) {
-    try {
-      final String identifier = node.getName().getIdentifier();
-      final Expression nodeExpression = node.getExpression();
-      final int argumentsSize = node.arguments().size();
-      if (identifier.equals(GroupLayoutInfo.IDENTIFIER_ADD_GROUP)
-          || identifier.equals(GroupLayoutInfo.IDENTIFIER_ADD_COMPONENT)
-          || identifier.equals(GroupLayoutInfo.IDENTIFIER_ADD_GAP)) {
-        if (argumentsSize == 0) {
-          throw new IllegalArgumentException(Messages.GroupLayoutParserVisitor_addWithoutArguments);
-        }
-        final Expression arg0 = (Expression) node.arguments().get(0);
-        final GroupInfo parentGroup =
-            (GroupInfo) nodeExpression.getProperty(GroupLayoutInfo.PROPERTY_NAME_GROUP);
-        // addGroup(Group group)
-        if (AstNodeUtils.isSuccessorOf(arg0, GroupLayoutInfo.GROUP_LAYOUT_GROUP_CLASS_NAME)) {
-          // add group into group
-          final GroupInfo group = (GroupInfo) arg0.getProperty(GroupLayoutInfo.PROPERTY_NAME_GROUP);
-          parentGroup.add(group);
-          node.setProperty(GroupLayoutInfo.PROPERTY_NAME_GROUP, parentGroup);
-        }
-        if (argumentsSize == 2) {
-          Expression arg1 = (Expression) node.arguments().get(1);
-          // addGroup(Aligment, Group group)
-          if (AstNodeUtils.isSuccessorOf(arg1, GroupLayoutInfo.GROUP_LAYOUT_GROUP_CLASS_NAME)
-              && identifier.equals(GroupLayoutInfo.IDENTIFIER_ADD_GROUP)) {
-            // add group into group
-            final ParallelGroupInfo group =
-                (ParallelGroupInfo) arg1.getProperty(GroupLayoutInfo.PROPERTY_NAME_GROUP);
-            setGroupAlignment(group, arg0);
-            parentGroup.add(group);
-            node.setProperty(GroupLayoutInfo.PROPERTY_NAME_GROUP, parentGroup);
-          }
-        }
-        // addComponent(Component component)
-        if ((argumentsSize == 1 || argumentsSize == 4)
-            && AstNodeUtils.isSuccessorOf(arg0, Component.class)) {
-          final JavaInfo widget = JavaInfoResolver.getJavaInfo(m_container, arg0);
-          final GroupInfo group =
-              (GroupInfo) nodeExpression.getProperty(GroupLayoutInfo.PROPERTY_NAME_GROUP);
-          if (widget != null) {
-            WidgetSpringInfo widgetSpring = addChild((IAbstractComponentInfo) widget, m_container);
-            //	TODO: checkForJTextField(widget, interval);
-            // addComponent(Component component, int min, int pref, int max)
-            if (argumentsSize == 4) {
-              setSizes(
-                  widgetSpring,
-                  (Expression) node.arguments().get(1),
-                  (Expression) node.arguments().get(2),
-                  (Expression) node.arguments().get(3));
-            }
-            group.add(widgetSpring);
-          }
-          node.setProperty(GroupLayoutInfo.PROPERTY_NAME_GROUP, group);
-        }
-        // addGap(int pref)
-        if (AstNodeUtils.isSuccessorOf(arg0, int.class) && argumentsSize == 1) {
-          final GroupInfo group =
-              (GroupInfo) nodeExpression.getProperty(GroupLayoutInfo.PROPERTY_NAME_GROUP);
-          GapSpringInfo gapSpring = new GapSpringInfo();
-          setSize(gapSpring, (Expression) node.arguments().get(0));
-          group.add(gapSpring);
-          node.setProperty(GroupLayoutInfo.PROPERTY_NAME_GROUP, group);
-        }
-        // addGap(int min, int pref, int max)
-        if (AstNodeUtils.isSuccessorOf(arg0, int.class) && argumentsSize == 3) {
-          final GroupInfo group =
-              (GroupInfo) nodeExpression.getProperty(GroupLayoutInfo.PROPERTY_NAME_GROUP);
-          GapSpringInfo gapSpring = new GapSpringInfo();
-          setSizes(
-              gapSpring,
-              (Expression) node.arguments().get(0),
-              (Expression) node.arguments().get(1),
-              (Expression) node.arguments().get(2));
-          group.add(gapSpring);
-          node.setProperty(GroupLayoutInfo.PROPERTY_NAME_GROUP, group);
-        }
-        if (argumentsSize > 1 && argumentsSize != 4) {
-          // addComponent(Component component, Alignment alignment)
-          JavaInfo widget = null;
-          final GroupInfo group =
-              (GroupInfo) nodeExpression.getProperty(GroupLayoutInfo.PROPERTY_NAME_GROUP);
-          Expression arg1 = (Expression) node.arguments().get(1);
-          if (AstNodeUtils.isSuccessorOf(arg0, Component.class)
-              && identifier.equals(GroupLayoutInfo.IDENTIFIER_ADD_COMPONENT)) {
-            widget = JavaInfoResolver.getJavaInfo(m_container, arg0);
-          }
-          if (widget != null) {
-            WidgetSpringInfo widgetSpring = addChild((IAbstractComponentInfo) widget, m_container);
-            Alignment alignment = (Alignment) JavaInfoEvaluationHelper.getValue(arg1);
-            widgetSpring.setAlignment(alignment);
-            //						checkForJTextField(widget, interval);
-            // addComponent(Component component, Alignment alignment, int min, int pref, int max)
-            if (argumentsSize == 5) {
-              setSizes(
-                  widgetSpring,
-                  (Expression) node.arguments().get(2),
-                  (Expression) node.arguments().get(3),
-                  (Expression) node.arguments().get(4));
-            }
-            group.add(widgetSpring);
-          }
-          node.setProperty(GroupLayoutInfo.PROPERTY_NAME_GROUP, group);
-        }
-      } else if (identifier.equals(GroupLayoutInfo.IDENTIFIER_ADD_PREFERRED_GAP)) {
-        final GroupInfo group =
-            (GroupInfo) nodeExpression.getProperty(GroupLayoutInfo.PROPERTY_NAME_GROUP);
-        // parent group should be sequential
-        Assert.instanceOf(SequentialGroupInfo.class, group);
-        GapSpringInfo gapSpring = new GapSpringInfo();
-        switch (argumentsSize) {
-          case 1 : {
-            // addPreferredGap(ComponentPlacement)
-            setPlacementType(gapSpring, (Expression) node.arguments().get(0));
-            break;
-          }
-          case 3 : {
-            final Expression arg0 = (Expression) node.arguments().get(0);
-            final Expression arg1 = (Expression) node.arguments().get(1);
-            final Expression arg2 = (Expression) node.arguments().get(2);
-            // addPreferredGap(JComponent, JComponent, ComponentPlacement)
-            if (AstNodeUtils.isSuccessorOf(arg0, JComponent.class)) {
-              setGapWidgets(gapSpring, arg0, arg1);
-              setPlacementType(gapSpring, arg2);
-            } else {
-              // addPreferredGap(ComponentPlacement, int, int)
-              setPlacementType(gapSpring, arg0);
-              setGapSizes(gapSpring, arg1, arg2);
-            }
-            break;
-          }
-          case 5 : {
-            // addPreferredGap(JComponent, JComponent, ComponentPlacement, int, int)
-            final Expression arg0 = (Expression) node.arguments().get(0);
-            final Expression arg1 = (Expression) node.arguments().get(1);
-            final Expression arg2 = (Expression) node.arguments().get(2);
-            final Expression arg3 = (Expression) node.arguments().get(3);
-            final Expression arg4 = (Expression) node.arguments().get(4);
-            setGapWidgets(gapSpring, arg0, arg1);
-            setPlacementType(gapSpring, arg2);
-            setGapSizes(gapSpring, arg3, arg4);
-            break;
-          }
-        }
-        group.add(gapSpring);
-        node.setProperty(GroupLayoutInfo.PROPERTY_NAME_GROUP, group);
-      } else if (identifier.equals(GroupLayoutInfo.IDENTIFIER_ADD_CONTAINER_GAP)) {
-        final GroupInfo group =
-            (GroupInfo) nodeExpression.getProperty(GroupLayoutInfo.PROPERTY_NAME_GROUP);
-        // parent group should be sequential
-        Assert.instanceOf(SequentialGroupInfo.class, group);
-        GapSpringInfo gapSpring = new GapSpringInfo(true);
-        if (argumentsSize == 2) {
-          setGapSizes(
-              gapSpring,
-              (Expression) node.arguments().get(0),
-              (Expression) node.arguments().get(1));
-        }
-        group.add(gapSpring);
-        node.setProperty(GroupLayoutInfo.PROPERTY_NAME_GROUP, group);
-      } else if (identifier.equals(GroupLayoutInfo.IDENTIFIER_CREATE_SEQUENTIAL_GROUP)
-          && argumentsSize == 0) {
-        final SequentialGroupInfo sequentialGroup = new SequentialGroupInfo();
-        node.setProperty(GroupLayoutInfo.PROPERTY_NAME_GROUP, sequentialGroup);
-      } else if (identifier.equals(GroupLayoutInfo.IDENTIFIER_CREATE_PARALLEL_GROUP)) {
-        // createParallelGroup()
-        final ParallelGroupInfo parallelGroup = new ParallelGroupInfo();
-        if (argumentsSize > 0) {
-          setGroupAlignment(parallelGroup, (Expression) node.arguments().get(0));
-          // createParallelGroup(Alignment, boolean)
-          if (argumentsSize > 1) {
-            setGroupResizeable(parallelGroup, (Expression) node.arguments().get(1));
-          }
-        }
-        node.setProperty(GroupLayoutInfo.PROPERTY_NAME_GROUP, parallelGroup);
-      } else if (identifier.equals(GroupLayoutInfo.IDENTIFIER_CREATE_BASELINE_GROUP)
-          && argumentsSize == 2) {
-        // createBaselineGroup(boolean, boolean)
-        final ParallelGroupInfo parallelGroup = new ParallelGroupInfo();
-        parallelGroup.setGroupAlignment(Alignment.BASELINE);
-        setGroupResizeable(parallelGroup, (Expression) node.arguments().get(0));
-        setGroupAnchorBaselineToTop(parallelGroup, (Expression) node.arguments().get(1));
-        node.setProperty(GroupLayoutInfo.PROPERTY_NAME_GROUP, parallelGroup);
-      } else if (m_methodName.startsWith(identifier) && node.arguments().size() == 1) {
-        final ASTNode arg0 = (ASTNode) node.arguments().get(0);
-        if (arg0 instanceof MethodInvocation) {
-          final MethodInvocation mi = (MethodInvocation) arg0;
-          m_rootGroup = (SpringInfo) mi.getProperty(GroupLayoutInfo.PROPERTY_NAME_GROUP);
-        }
-      }
-    } catch (Throwable e) {
-      throw ReflectionUtils.propagate(e);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Visitor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void endVisit(final MethodInvocation node) {
+		try {
+			final String identifier = node.getName().getIdentifier();
+			final Expression nodeExpression = node.getExpression();
+			final int argumentsSize = node.arguments().size();
+			if (identifier.equals(GroupLayoutInfo.IDENTIFIER_ADD_GROUP)
+					|| identifier.equals(GroupLayoutInfo.IDENTIFIER_ADD_COMPONENT)
+					|| identifier.equals(GroupLayoutInfo.IDENTIFIER_ADD_GAP)) {
+				if (argumentsSize == 0) {
+					throw new IllegalArgumentException(Messages.GroupLayoutParserVisitor_addWithoutArguments);
+				}
+				final Expression arg0 = (Expression) node.arguments().get(0);
+				final GroupInfo parentGroup =
+						(GroupInfo) nodeExpression.getProperty(GroupLayoutInfo.PROPERTY_NAME_GROUP);
+				// addGroup(Group group)
+				if (AstNodeUtils.isSuccessorOf(arg0, GroupLayoutInfo.GROUP_LAYOUT_GROUP_CLASS_NAME)) {
+					// add group into group
+					final GroupInfo group = (GroupInfo) arg0.getProperty(GroupLayoutInfo.PROPERTY_NAME_GROUP);
+					parentGroup.add(group);
+					node.setProperty(GroupLayoutInfo.PROPERTY_NAME_GROUP, parentGroup);
+				}
+				if (argumentsSize == 2) {
+					Expression arg1 = (Expression) node.arguments().get(1);
+					// addGroup(Aligment, Group group)
+					if (AstNodeUtils.isSuccessorOf(arg1, GroupLayoutInfo.GROUP_LAYOUT_GROUP_CLASS_NAME)
+							&& identifier.equals(GroupLayoutInfo.IDENTIFIER_ADD_GROUP)) {
+						// add group into group
+						final ParallelGroupInfo group =
+								(ParallelGroupInfo) arg1.getProperty(GroupLayoutInfo.PROPERTY_NAME_GROUP);
+						setGroupAlignment(group, arg0);
+						parentGroup.add(group);
+						node.setProperty(GroupLayoutInfo.PROPERTY_NAME_GROUP, parentGroup);
+					}
+				}
+				// addComponent(Component component)
+				if ((argumentsSize == 1 || argumentsSize == 4)
+						&& AstNodeUtils.isSuccessorOf(arg0, Component.class)) {
+					final JavaInfo widget = JavaInfoResolver.getJavaInfo(m_container, arg0);
+					final GroupInfo group =
+							(GroupInfo) nodeExpression.getProperty(GroupLayoutInfo.PROPERTY_NAME_GROUP);
+					if (widget != null) {
+						WidgetSpringInfo widgetSpring = addChild((IAbstractComponentInfo) widget, m_container);
+						//	TODO: checkForJTextField(widget, interval);
+						// addComponent(Component component, int min, int pref, int max)
+						if (argumentsSize == 4) {
+							setSizes(
+									widgetSpring,
+									(Expression) node.arguments().get(1),
+									(Expression) node.arguments().get(2),
+									(Expression) node.arguments().get(3));
+						}
+						group.add(widgetSpring);
+					}
+					node.setProperty(GroupLayoutInfo.PROPERTY_NAME_GROUP, group);
+				}
+				// addGap(int pref)
+				if (AstNodeUtils.isSuccessorOf(arg0, int.class) && argumentsSize == 1) {
+					final GroupInfo group =
+							(GroupInfo) nodeExpression.getProperty(GroupLayoutInfo.PROPERTY_NAME_GROUP);
+					GapSpringInfo gapSpring = new GapSpringInfo();
+					setSize(gapSpring, (Expression) node.arguments().get(0));
+					group.add(gapSpring);
+					node.setProperty(GroupLayoutInfo.PROPERTY_NAME_GROUP, group);
+				}
+				// addGap(int min, int pref, int max)
+				if (AstNodeUtils.isSuccessorOf(arg0, int.class) && argumentsSize == 3) {
+					final GroupInfo group =
+							(GroupInfo) nodeExpression.getProperty(GroupLayoutInfo.PROPERTY_NAME_GROUP);
+					GapSpringInfo gapSpring = new GapSpringInfo();
+					setSizes(
+							gapSpring,
+							(Expression) node.arguments().get(0),
+							(Expression) node.arguments().get(1),
+							(Expression) node.arguments().get(2));
+					group.add(gapSpring);
+					node.setProperty(GroupLayoutInfo.PROPERTY_NAME_GROUP, group);
+				}
+				if (argumentsSize > 1 && argumentsSize != 4) {
+					// addComponent(Component component, Alignment alignment)
+					JavaInfo widget = null;
+					final GroupInfo group =
+							(GroupInfo) nodeExpression.getProperty(GroupLayoutInfo.PROPERTY_NAME_GROUP);
+					Expression arg1 = (Expression) node.arguments().get(1);
+					if (AstNodeUtils.isSuccessorOf(arg0, Component.class)
+							&& identifier.equals(GroupLayoutInfo.IDENTIFIER_ADD_COMPONENT)) {
+						widget = JavaInfoResolver.getJavaInfo(m_container, arg0);
+					}
+					if (widget != null) {
+						WidgetSpringInfo widgetSpring = addChild((IAbstractComponentInfo) widget, m_container);
+						Alignment alignment = (Alignment) JavaInfoEvaluationHelper.getValue(arg1);
+						widgetSpring.setAlignment(alignment);
+						//						checkForJTextField(widget, interval);
+						// addComponent(Component component, Alignment alignment, int min, int pref, int max)
+						if (argumentsSize == 5) {
+							setSizes(
+									widgetSpring,
+									(Expression) node.arguments().get(2),
+									(Expression) node.arguments().get(3),
+									(Expression) node.arguments().get(4));
+						}
+						group.add(widgetSpring);
+					}
+					node.setProperty(GroupLayoutInfo.PROPERTY_NAME_GROUP, group);
+				}
+			} else if (identifier.equals(GroupLayoutInfo.IDENTIFIER_ADD_PREFERRED_GAP)) {
+				final GroupInfo group =
+						(GroupInfo) nodeExpression.getProperty(GroupLayoutInfo.PROPERTY_NAME_GROUP);
+				// parent group should be sequential
+				Assert.instanceOf(SequentialGroupInfo.class, group);
+				GapSpringInfo gapSpring = new GapSpringInfo();
+				switch (argumentsSize) {
+				case 1 : {
+					// addPreferredGap(ComponentPlacement)
+					setPlacementType(gapSpring, (Expression) node.arguments().get(0));
+					break;
+				}
+				case 3 : {
+					final Expression arg0 = (Expression) node.arguments().get(0);
+					final Expression arg1 = (Expression) node.arguments().get(1);
+					final Expression arg2 = (Expression) node.arguments().get(2);
+					// addPreferredGap(JComponent, JComponent, ComponentPlacement)
+					if (AstNodeUtils.isSuccessorOf(arg0, JComponent.class)) {
+						setGapWidgets(gapSpring, arg0, arg1);
+						setPlacementType(gapSpring, arg2);
+					} else {
+						// addPreferredGap(ComponentPlacement, int, int)
+						setPlacementType(gapSpring, arg0);
+						setGapSizes(gapSpring, arg1, arg2);
+					}
+					break;
+				}
+				case 5 : {
+					// addPreferredGap(JComponent, JComponent, ComponentPlacement, int, int)
+					final Expression arg0 = (Expression) node.arguments().get(0);
+					final Expression arg1 = (Expression) node.arguments().get(1);
+					final Expression arg2 = (Expression) node.arguments().get(2);
+					final Expression arg3 = (Expression) node.arguments().get(3);
+					final Expression arg4 = (Expression) node.arguments().get(4);
+					setGapWidgets(gapSpring, arg0, arg1);
+					setPlacementType(gapSpring, arg2);
+					setGapSizes(gapSpring, arg3, arg4);
+					break;
+				}
+				}
+				group.add(gapSpring);
+				node.setProperty(GroupLayoutInfo.PROPERTY_NAME_GROUP, group);
+			} else if (identifier.equals(GroupLayoutInfo.IDENTIFIER_ADD_CONTAINER_GAP)) {
+				final GroupInfo group =
+						(GroupInfo) nodeExpression.getProperty(GroupLayoutInfo.PROPERTY_NAME_GROUP);
+				// parent group should be sequential
+				Assert.instanceOf(SequentialGroupInfo.class, group);
+				GapSpringInfo gapSpring = new GapSpringInfo(true);
+				if (argumentsSize == 2) {
+					setGapSizes(
+							gapSpring,
+							(Expression) node.arguments().get(0),
+							(Expression) node.arguments().get(1));
+				}
+				group.add(gapSpring);
+				node.setProperty(GroupLayoutInfo.PROPERTY_NAME_GROUP, group);
+			} else if (identifier.equals(GroupLayoutInfo.IDENTIFIER_CREATE_SEQUENTIAL_GROUP)
+					&& argumentsSize == 0) {
+				final SequentialGroupInfo sequentialGroup = new SequentialGroupInfo();
+				node.setProperty(GroupLayoutInfo.PROPERTY_NAME_GROUP, sequentialGroup);
+			} else if (identifier.equals(GroupLayoutInfo.IDENTIFIER_CREATE_PARALLEL_GROUP)) {
+				// createParallelGroup()
+				final ParallelGroupInfo parallelGroup = new ParallelGroupInfo();
+				if (argumentsSize > 0) {
+					setGroupAlignment(parallelGroup, (Expression) node.arguments().get(0));
+					// createParallelGroup(Alignment, boolean)
+					if (argumentsSize > 1) {
+						setGroupResizeable(parallelGroup, (Expression) node.arguments().get(1));
+					}
+				}
+				node.setProperty(GroupLayoutInfo.PROPERTY_NAME_GROUP, parallelGroup);
+			} else if (identifier.equals(GroupLayoutInfo.IDENTIFIER_CREATE_BASELINE_GROUP)
+					&& argumentsSize == 2) {
+				// createBaselineGroup(boolean, boolean)
+				final ParallelGroupInfo parallelGroup = new ParallelGroupInfo();
+				parallelGroup.setGroupAlignment(Alignment.BASELINE);
+				setGroupResizeable(parallelGroup, (Expression) node.arguments().get(0));
+				setGroupAnchorBaselineToTop(parallelGroup, (Expression) node.arguments().get(1));
+				node.setProperty(GroupLayoutInfo.PROPERTY_NAME_GROUP, parallelGroup);
+			} else if (m_methodName.startsWith(identifier) && node.arguments().size() == 1) {
+				final ASTNode arg0 = (ASTNode) node.arguments().get(0);
+				if (arg0 instanceof MethodInvocation) {
+					final MethodInvocation mi = (MethodInvocation) arg0;
+					m_rootGroup = (SpringInfo) mi.getProperty(GroupLayoutInfo.PROPERTY_NAME_GROUP);
+				}
+			}
+		} catch (Throwable e) {
+			throw ReflectionUtils.propagate(e);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Helper methods
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  //		private void checkForJTextField(JavaInfo model, final LayoutInterval interval) {
-  //			if (((JavaBeanInfo) model).isKindOf(JTextField.class) && m_dimension == HORIZONTAL) {
-  //				interval.setSizes(LayoutConstants.NOT_EXPLICITLY_DEFINED,
-  //					LayoutConstants.NOT_EXPLICITLY_DEFINED,
-  //					LayoutConstants.NOT_EXPLICITLY_DEFINED);
-  //			}
-  //		}
-  private WidgetSpringInfo addChild(final IAbstractComponentInfo component, ContainerInfo container)
-      throws Exception {
-    ComponentInfo widget = (ComponentInfo) component.getUnderlyingModel();
-    // widget may be already added to parent using previous dimension parsing
-    if (widget.getParent() == null && !container.getChildren().contains(widget)) {
-      container.addChild(widget);
-      widget.setAssociation(new EmptyAssociation());
-    }
-    WidgetSpringInfo widgetSpringInfo = new WidgetSpringInfo(widget);
-    m_mappedWidgets.put(widget, widgetSpringInfo);
-    return widgetSpringInfo;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Helper methods
+	//
+	////////////////////////////////////////////////////////////////////////////
+	//		private void checkForJTextField(JavaInfo model, final LayoutInterval interval) {
+	//			if (((JavaBeanInfo) model).isKindOf(JTextField.class) && m_dimension == HORIZONTAL) {
+	//				interval.setSizes(LayoutConstants.NOT_EXPLICITLY_DEFINED,
+	//					LayoutConstants.NOT_EXPLICITLY_DEFINED,
+	//					LayoutConstants.NOT_EXPLICITLY_DEFINED);
+	//			}
+	//		}
+	private WidgetSpringInfo addChild(final IAbstractComponentInfo component, ContainerInfo container)
+			throws Exception {
+		ComponentInfo widget = (ComponentInfo) component.getUnderlyingModel();
+		// widget may be already added to parent using previous dimension parsing
+		if (widget.getParent() == null && !container.getChildren().contains(widget)) {
+			container.addChild(widget);
+			widget.setAssociation(new EmptyAssociation());
+		}
+		WidgetSpringInfo widgetSpringInfo = new WidgetSpringInfo(widget);
+		m_mappedWidgets.put(widget, widgetSpringInfo);
+		return widgetSpringInfo;
+	}
 
-  private void setSize(SpringInfo spring, Expression val) throws Exception {
-    final Number value = (Number) JavaInfoEvaluationHelper.getValue(val);
-    int intValue = value.intValue();
-    spring.setSizes(intValue, intValue, intValue);
-  }
+	private void setSize(SpringInfo spring, Expression val) throws Exception {
+		final Number value = (Number) JavaInfoEvaluationHelper.getValue(val);
+		int intValue = value.intValue();
+		spring.setSizes(intValue, intValue, intValue);
+	}
 
-  private void setSizes(SpringInfo spring, Expression min, Expression pref, Expression max)
-      throws Exception {
-    final Number minValue = (Number) JavaInfoEvaluationHelper.getValue(min);
-    final Number prefValue = (Number) JavaInfoEvaluationHelper.getValue(pref);
-    final Number maxValue = (Number) JavaInfoEvaluationHelper.getValue(max);
-    spring.setSizes(minValue.intValue(), prefValue.intValue(), maxValue.intValue());
-  }
+	private void setSizes(SpringInfo spring, Expression min, Expression pref, Expression max)
+			throws Exception {
+		final Number minValue = (Number) JavaInfoEvaluationHelper.getValue(min);
+		final Number prefValue = (Number) JavaInfoEvaluationHelper.getValue(pref);
+		final Number maxValue = (Number) JavaInfoEvaluationHelper.getValue(max);
+		spring.setSizes(minValue.intValue(), prefValue.intValue(), maxValue.intValue());
+	}
 
-  private void setGapSizes(GapSpringInfo spring, Expression pref, Expression max) throws Exception {
-    final Number prefValue = (Number) JavaInfoEvaluationHelper.getValue(pref);
-    final Number maxValue = (Number) JavaInfoEvaluationHelper.getValue(max);
-    spring.setPreferredSize(prefValue.intValue());
-    spring.setMaximumSize(maxValue.intValue());
-  }
+	private void setGapSizes(GapSpringInfo spring, Expression pref, Expression max) throws Exception {
+		final Number prefValue = (Number) JavaInfoEvaluationHelper.getValue(pref);
+		final Number maxValue = (Number) JavaInfoEvaluationHelper.getValue(max);
+		spring.setPreferredSize(prefValue.intValue());
+		spring.setMaximumSize(maxValue.intValue());
+	}
 
-  private void setGroupAlignment(final ParallelGroupInfo group, final Expression arg0) {
-    Alignment alignment = (Alignment) JavaInfoEvaluationHelper.getValue(arg0);
-    group.setGroupAlignment(alignment);
-  }
+	private void setGroupAlignment(final ParallelGroupInfo group, final Expression arg0) {
+		Alignment alignment = (Alignment) JavaInfoEvaluationHelper.getValue(arg0);
+		group.setGroupAlignment(alignment);
+	}
 
-  private void setGroupResizeable(final ParallelGroupInfo group, final Expression arg0) {
-    Boolean resizeable = (Boolean) JavaInfoEvaluationHelper.getValue(arg0);
-    group.setGroupResizeable(resizeable);
-  }
+	private void setGroupResizeable(final ParallelGroupInfo group, final Expression arg0) {
+		Boolean resizeable = (Boolean) JavaInfoEvaluationHelper.getValue(arg0);
+		group.setGroupResizeable(resizeable);
+	}
 
-  private void setGroupAnchorBaselineToTop(final ParallelGroupInfo group, final Expression arg0) {
-    Boolean anchorToTop = (Boolean) JavaInfoEvaluationHelper.getValue(arg0);
-    group.setGroupAnchorBaselineToTop(anchorToTop);
-  }
+	private void setGroupAnchorBaselineToTop(final ParallelGroupInfo group, final Expression arg0) {
+		Boolean anchorToTop = (Boolean) JavaInfoEvaluationHelper.getValue(arg0);
+		group.setGroupAnchorBaselineToTop(anchorToTop);
+	}
 
-  private void setGapWidgets(GapSpringInfo gapSpring, final Expression arg0, final Expression arg1) {
-    JavaInfo widget1 = JavaInfoResolver.getJavaInfo(m_container, arg0);
-    JavaInfo widget2 = JavaInfoResolver.getJavaInfo(m_container, arg1);
-    gapSpring.setGapWidgets((IAbstractComponentInfo) widget1, (IAbstractComponentInfo) widget2);
-  }
+	private void setGapWidgets(GapSpringInfo gapSpring, final Expression arg0, final Expression arg1) {
+		JavaInfo widget1 = JavaInfoResolver.getJavaInfo(m_container, arg0);
+		JavaInfo widget2 = JavaInfoResolver.getJavaInfo(m_container, arg1);
+		gapSpring.setGapWidgets((IAbstractComponentInfo) widget1, (IAbstractComponentInfo) widget2);
+	}
 
-  private void setPlacementType(GapSpringInfo gapSpring, final Expression arg0) {
-    ComponentPlacement placement = (ComponentPlacement) JavaInfoEvaluationHelper.getValue(arg0);
-    gapSpring.setPlacementType(placement);
-  }
+	private void setPlacementType(GapSpringInfo gapSpring, final Expression arg0) {
+		ComponentPlacement placement = (ComponentPlacement) JavaInfoEvaluationHelper.getValue(arg0);
+		gapSpring.setPlacementType(placement);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public final SpringInfo getRootGroup() {
-    return m_rootGroup;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public final SpringInfo getRootGroup() {
+		return m_rootGroup;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.java6/src/org/eclipse/wb/internal/swing/java6/model/ParallelGroupInfo.java b/org.eclipse.wb.swing.java6/src/org/eclipse/wb/internal/swing/java6/model/ParallelGroupInfo.java
index 4f6b344eb..a2b5f74e8 100644
--- a/org.eclipse.wb.swing.java6/src/org/eclipse/wb/internal/swing/java6/model/ParallelGroupInfo.java
+++ b/org.eclipse.wb.swing.java6/src/org/eclipse/wb/internal/swing/java6/model/ParallelGroupInfo.java
@@ -21,55 +21,55 @@
  * @coverage swing.model.layout.group
  */
 public final class ParallelGroupInfo extends GroupInfo {
-  private Alignment m_alignment = Alignment.LEADING;
-  private boolean m_resizeable = true;
-  private boolean m_anchoredToTop = false;
+	private Alignment m_alignment = Alignment.LEADING;
+	private boolean m_resizeable = true;
+	private boolean m_anchoredToTop = false;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void setGroupAlignment(Alignment alignment) {
-    m_alignment = alignment;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void setGroupAlignment(Alignment alignment) {
+		m_alignment = alignment;
+	}
 
-  public void setGroupResizeable(boolean resizeable) {
-    m_resizeable = resizeable;
-  }
+	public void setGroupResizeable(boolean resizeable) {
+		m_resizeable = resizeable;
+	}
 
-  public void setGroupAnchorBaselineToTop(boolean anchoredToTop) {
-    // only for baseline alignment
-    m_anchoredToTop = anchoredToTop;
-  }
+	public void setGroupAnchorBaselineToTop(boolean anchoredToTop) {
+		// only for baseline alignment
+		m_anchoredToTop = anchoredToTop;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Save
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getCode(int level) throws Exception {
-    String code = StringUtils.repeat(" ", level);
-    if (m_alignment == Alignment.BASELINE && m_anchoredToTop) {
-      code += GroupLayoutInfo.IDENTIFIER_CREATE_BASELINE_GROUP + "(";
-    } else {
-      code += GroupLayoutInfo.IDENTIFIER_CREATE_PARALLEL_GROUP + "(";
-    }
-    return code;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Save
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getCode(int level) throws Exception {
+		String code = StringUtils.repeat(" ", level);
+		if (m_alignment == Alignment.BASELINE && m_anchoredToTop) {
+			code += GroupLayoutInfo.IDENTIFIER_CREATE_BASELINE_GROUP + "(";
+		} else {
+			code += GroupLayoutInfo.IDENTIFIER_CREATE_PARALLEL_GROUP + "(";
+		}
+		return code;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Dump
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void dump(int level, StringBuffer buffer) {
-    buffer.append(StringUtils.repeat(" ", level));
-    buffer.append("P align=" + m_alignment + " resiz=" + m_resizeable + "\n");
-    for (SpringInfo child : m_children) {
-      child.dump(level + 1, buffer);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Dump
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void dump(int level, StringBuffer buffer) {
+		buffer.append(StringUtils.repeat(" ", level));
+		buffer.append("P align=" + m_alignment + " resiz=" + m_resizeable + "\n");
+		for (SpringInfo child : m_children) {
+			child.dump(level + 1, buffer);
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing.java6/src/org/eclipse/wb/internal/swing/java6/model/SequentialGroupInfo.java b/org.eclipse.wb.swing.java6/src/org/eclipse/wb/internal/swing/java6/model/SequentialGroupInfo.java
index 4c58a99e8..998780fa7 100644
--- a/org.eclipse.wb.swing.java6/src/org/eclipse/wb/internal/swing/java6/model/SequentialGroupInfo.java
+++ b/org.eclipse.wb.swing.java6/src/org/eclipse/wb/internal/swing/java6/model/SequentialGroupInfo.java
@@ -19,17 +19,17 @@
  * @coverage swing.model.layout.group
  */
 public final class SequentialGroupInfo extends GroupInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Dump
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void dump(int level, StringBuffer buffer) {
-    buffer.append(StringUtils.repeat(" ", level));
-    buffer.append("S\n");
-    for (SpringInfo child : m_children) {
-      child.dump(level + 1, buffer);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Dump
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void dump(int level, StringBuffer buffer) {
+		buffer.append(StringUtils.repeat(" ", level));
+		buffer.append("S\n");
+		for (SpringInfo child : m_children) {
+			child.dump(level + 1, buffer);
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing.java6/src/org/eclipse/wb/internal/swing/java6/model/SpringInfo.java b/org.eclipse.wb.swing.java6/src/org/eclipse/wb/internal/swing/java6/model/SpringInfo.java
index e65f95cc5..9a5c24ac4 100644
--- a/org.eclipse.wb.swing.java6/src/org/eclipse/wb/internal/swing/java6/model/SpringInfo.java
+++ b/org.eclipse.wb.swing.java6/src/org/eclipse/wb/internal/swing/java6/model/SpringInfo.java
@@ -19,66 +19,66 @@
  * @coverage swing.model.layout.group
  */
 public abstract class SpringInfo {
-  /**
-   * used for size values which wasn't explicitly set
-   */
-  public static final int UNSET = Integer.MIN_VALUE;
-  // fields
-  private SpringInfo m_parent;
-  private int m_min = UNSET;
-  private int m_pref = UNSET;
-  private int m_max = UNSET;
+	/**
+	 * used for size values which wasn't explicitly set
+	 */
+	public static final int UNSET = Integer.MIN_VALUE;
+	// fields
+	private SpringInfo m_parent;
+	private int m_min = UNSET;
+	private int m_pref = UNSET;
+	private int m_max = UNSET;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public final void setParent(SpringInfo parent) {
-    m_parent = parent;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public final void setParent(SpringInfo parent) {
+		m_parent = parent;
+	}
 
-  public final SpringInfo getParent() {
-    return m_parent;
-  }
+	public final SpringInfo getParent() {
+		return m_parent;
+	}
 
-  public final void setSizes(int minValue, int prefValue, int maxValue) {
-    m_min = minValue;
-    m_pref = prefValue;
-    m_max = maxValue;
-  }
+	public final void setSizes(int minValue, int prefValue, int maxValue) {
+		m_min = minValue;
+		m_pref = prefValue;
+		m_max = maxValue;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Save
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public final String getCode() throws Exception {
-    return getCode(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Save
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public final String getCode() throws Exception {
+		return getCode(0);
+	}
 
-  /**
-   * @param level
-   */
-  protected String getCode(int level) throws Exception {
-    throw new NotImplementedException();
-  }
+	/**
+	 * @param level
+	 */
+	protected String getCode(int level) throws Exception {
+		throw new NotImplementedException();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Dump
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void dump(@SuppressWarnings("unused") int level, StringBuffer buffer) {
-    buffer.append((m_min == UNSET ? "UNSET" : m_min) + " ");
-    buffer.append((m_pref == UNSET ? "UNSET" : m_pref) + " ");
-    buffer.append((m_max == UNSET ? "UNSET" : m_max));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Dump
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void dump(@SuppressWarnings("unused") int level, StringBuffer buffer) {
+		buffer.append((m_min == UNSET ? "UNSET" : m_min) + " ");
+		buffer.append((m_pref == UNSET ? "UNSET" : m_pref) + " ");
+		buffer.append((m_max == UNSET ? "UNSET" : m_max));
+	}
 
-  @Override
-  public String toString() {
-    StringBuffer dump = new StringBuffer();
-    dump(0, dump);
-    return dump.toString();
-  }
+	@Override
+	public String toString() {
+		StringBuffer dump = new StringBuffer();
+		dump(0, dump);
+		return dump.toString();
+	}
 }
diff --git a/org.eclipse.wb.swing.java6/src/org/eclipse/wb/internal/swing/java6/model/SwingGroupLayoutCodeSupport.java b/org.eclipse.wb.swing.java6/src/org/eclipse/wb/internal/swing/java6/model/SwingGroupLayoutCodeSupport.java
index c2535a374..f2ab4fcd1 100644
--- a/org.eclipse.wb.swing.java6/src/org/eclipse/wb/internal/swing/java6/model/SwingGroupLayoutCodeSupport.java
+++ b/org.eclipse.wb.swing.java6/src/org/eclipse/wb/internal/swing/java6/model/SwingGroupLayoutCodeSupport.java
@@ -49,249 +49,249 @@
  * @author mitin_aa
  */
 public final class SwingGroupLayoutCodeSupport extends GroupLayoutCodeSupport
-    implements
-      LayoutConstants {
-  private boolean m_isOldLayout;
-  private GroupLayoutInfo2 m_layout;
+implements
+LayoutConstants {
+	private boolean m_isOldLayout;
+	private GroupLayoutInfo2 m_layout;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SwingGroupLayoutCodeSupport(GroupLayoutInfo2 layout) {
-    super(layout);
-    m_layout = layout;
-    CreationSupport creationSupport = layout.getCreationSupport();
-    if (creationSupport instanceof IImplicitCreationSupport) {
-      m_isOldLayout =
-          "org.jdesktop.layout.GroupLayout".equals(layout.getDescription().getComponentClass().getName());
-    } else if (creationSupport.getNode() instanceof Expression) {
-      Expression node = (Expression) creationSupport.getNode();
-      m_isOldLayout =
-          node != null
-              ? AstNodeUtils.isSuccessorOf(node, "org.jdesktop.layout.GroupLayout")
-              : false;
-    } else {
-      m_isOldLayout = false;
-    }
-    // initialize names and signatures
-    initialize(m_isOldLayout);
-    if (m_isOldLayout) {
-      m_layout.addBroadcastListener(new JavaEventListener() {
-        @Override
-        public void replaceChildAfter(JavaInfo parent, JavaInfo oldChild, JavaInfo newChild)
-            throws Exception {
-          if (oldChild == m_layout) {
-            m_layout = (GroupLayoutInfo2) newChild;
-          }
-        }
-      });
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SwingGroupLayoutCodeSupport(GroupLayoutInfo2 layout) {
+		super(layout);
+		m_layout = layout;
+		CreationSupport creationSupport = layout.getCreationSupport();
+		if (creationSupport instanceof IImplicitCreationSupport) {
+			m_isOldLayout =
+					"org.jdesktop.layout.GroupLayout".equals(layout.getDescription().getComponentClass().getName());
+		} else if (creationSupport.getNode() instanceof Expression) {
+			Expression node = (Expression) creationSupport.getNode();
+			m_isOldLayout =
+					node != null
+					? AstNodeUtils.isSuccessorOf(node, "org.jdesktop.layout.GroupLayout")
+							: false;
+		} else {
+			m_isOldLayout = false;
+		}
+		// initialize names and signatures
+		initialize(m_isOldLayout);
+		if (m_isOldLayout) {
+			m_layout.addBroadcastListener(new JavaEventListener() {
+				@Override
+				public void replaceChildAfter(JavaInfo parent, JavaInfo oldChild, JavaInfo newChild)
+						throws Exception {
+					if (oldChild == m_layout) {
+						m_layout = (GroupLayoutInfo2) newChild;
+					}
+				}
+			});
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Initializing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void initialize(boolean old) {
-    if (!old) {
-      GROUP_LAYOUT_CLASS_NAME = "javax.swing.GroupLayout";
-      ID_ADD_GAP = "addGap";
-      ID_ADD_COMPONENT = "addComponent";
-      ID_ADD_GROUP = "addGroup";
-      SIGNATURE_LINK_SIZE = ID_LINK_SIZE + "(java.awt.Component[])";
-      SIGNATURE_LINK_SIZE_AXIS = "linkSize(int,java.awt.Component[])";
-    } else {
-      GROUP_LAYOUT_CLASS_NAME = "org.jdesktop.layout.GroupLayout";
-      ID_ADD_GAP = "add";
-      ID_ADD_COMPONENT = "add";
-      ID_ADD_GROUP = "add";
-      SIGNATURE_LINK_SIZE = ID_LINK_SIZE + "(java.awt.Component[])";
-      SIGNATURE_LINK_SIZE_AXIS = "linkSize(java.awt.Component[],int)";
-    }
-    GROUP_LAYOUT_GROUP_CLASS_NAME = GROUP_LAYOUT_CLASS_NAME + ".Group";
-    SIGNATURE_SET_HORIZONTAL_GROUP =
-        ID_SET_HORIZONTAL_GROUP + "(" + GROUP_LAYOUT_GROUP_CLASS_NAME + ")";
-    SIGNATURE_SET_VERTICAL_GROUP =
-        ID_SET_VERTICAL_GROUP + "(" + GROUP_LAYOUT_GROUP_CLASS_NAME + ")";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Initializing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void initialize(boolean old) {
+		if (!old) {
+			GROUP_LAYOUT_CLASS_NAME = "javax.swing.GroupLayout";
+			ID_ADD_GAP = "addGap";
+			ID_ADD_COMPONENT = "addComponent";
+			ID_ADD_GROUP = "addGroup";
+			SIGNATURE_LINK_SIZE = ID_LINK_SIZE + "(java.awt.Component[])";
+			SIGNATURE_LINK_SIZE_AXIS = "linkSize(int,java.awt.Component[])";
+		} else {
+			GROUP_LAYOUT_CLASS_NAME = "org.jdesktop.layout.GroupLayout";
+			ID_ADD_GAP = "add";
+			ID_ADD_COMPONENT = "add";
+			ID_ADD_GROUP = "add";
+			SIGNATURE_LINK_SIZE = ID_LINK_SIZE + "(java.awt.Component[])";
+			SIGNATURE_LINK_SIZE_AXIS = "linkSize(java.awt.Component[],int)";
+		}
+		GROUP_LAYOUT_GROUP_CLASS_NAME = GROUP_LAYOUT_CLASS_NAME + ".Group";
+		SIGNATURE_SET_HORIZONTAL_GROUP =
+				ID_SET_HORIZONTAL_GROUP + "(" + GROUP_LAYOUT_GROUP_CLASS_NAME + ")";
+		SIGNATURE_SET_VERTICAL_GROUP =
+				ID_SET_VERTICAL_GROUP + "(" + GROUP_LAYOUT_GROUP_CLASS_NAME + ")";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Save
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected final String prepareLayoutCode(List<AbstractComponentInfo> components) throws Exception {
-    // generate always new layout code
-    if (m_isOldLayout) {
-      initialize(!m_isOldLayout);
-      convertLayout();
-      m_isOldLayout = false;
-    }
-    // proceed with generation
-    SwingLayoutCodeGenerator.ComponentInfo[] infos =
-        new SwingLayoutCodeGenerator.ComponentInfo[components.size()];
-    int i = 0;
-    for (AbstractComponentInfo abstractComponent : components) {
-      ComponentInfo component = (ComponentInfo) abstractComponent;
-      SwingLayoutCodeGenerator.ComponentInfo info = new SwingLayoutCodeGenerator.ComponentInfo();
-      info.id = ObjectInfoUtils.getId(component);
-      info.variableName = TemplateUtils.ID_PREFIX + info.id;
-      info.clazz = component.getDescription().getComponentClass();
-      Property minProp = component.getPropertyByTitle("minimumSize");
-      Property prefProp = component.getPropertyByTitle("preferredSize");
-      Property maxProp = component.getPropertyByTitle("maximumSize");
-      info.sizingChanged =
-          !((minProp == null || !minProp.isModified())
-              && (prefProp == null || !prefProp.isModified()) && (maxProp == null || !maxProp.isModified()));
-      {
-        Component componentObject = component.getComponent();
-        info.minSize = componentObject != null ? componentObject.getMinimumSize() : new Dimension();
-      }
-      infos[i++] = info;
-    }
-    String contVarName = getLayoutReference();
-    StringWriter stringWriter = new StringWriter();
-    SwingLayoutCodeGenerator swingGenerator =
-        new SwingLayoutCodeGenerator(getLayout().getLayoutModel());
-    swingGenerator.generateContainerLayout(
-        stringWriter,
-        getRootComponent(),
-        contVarName,
-        infos,
-        false);
-    return stringWriter.toString();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Save
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected final String prepareLayoutCode(List<AbstractComponentInfo> components) throws Exception {
+		// generate always new layout code
+		if (m_isOldLayout) {
+			initialize(!m_isOldLayout);
+			convertLayout();
+			m_isOldLayout = false;
+		}
+		// proceed with generation
+		SwingLayoutCodeGenerator.ComponentInfo[] infos =
+				new SwingLayoutCodeGenerator.ComponentInfo[components.size()];
+		int i = 0;
+		for (AbstractComponentInfo abstractComponent : components) {
+			ComponentInfo component = (ComponentInfo) abstractComponent;
+			SwingLayoutCodeGenerator.ComponentInfo info = new SwingLayoutCodeGenerator.ComponentInfo();
+			info.id = ObjectInfoUtils.getId(component);
+			info.variableName = TemplateUtils.ID_PREFIX + info.id;
+			info.clazz = component.getDescription().getComponentClass();
+			Property minProp = component.getPropertyByTitle("minimumSize");
+			Property prefProp = component.getPropertyByTitle("preferredSize");
+			Property maxProp = component.getPropertyByTitle("maximumSize");
+			info.sizingChanged =
+					!((minProp == null || !minProp.isModified())
+							&& (prefProp == null || !prefProp.isModified()) && (maxProp == null || !maxProp.isModified()));
+			{
+				Component componentObject = component.getComponent();
+				info.minSize = componentObject != null ? componentObject.getMinimumSize() : new Dimension();
+			}
+			infos[i++] = info;
+		}
+		String contVarName = getLayoutReference();
+		StringWriter stringWriter = new StringWriter();
+		SwingLayoutCodeGenerator swingGenerator =
+				new SwingLayoutCodeGenerator(getLayout().getLayoutModel());
+		swingGenerator.generateContainerLayout(
+				stringWriter,
+				getRootComponent(),
+				contVarName,
+				infos,
+				false);
+		return stringWriter.toString();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parsing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void checkComponent(AbstractComponentInfo component, int dimension) {
-    if (JTextField.class.isAssignableFrom(component.getDescription().getComponentClass())
-        && dimension == HORIZONTAL) {
-      LayoutInterval interval =
-          getLayoutModel().getLayoutComponent(ObjectInfoUtils.getId(component)).getLayoutInterval(
-              dimension);
-      interval.setSizes(NOT_EXPLICITLY_DEFINED, NOT_EXPLICITLY_DEFINED, NOT_EXPLICITLY_DEFINED);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parsing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void checkComponent(AbstractComponentInfo component, int dimension) {
+		if (JTextField.class.isAssignableFrom(component.getDescription().getComponentClass())
+				&& dimension == HORIZONTAL) {
+			LayoutInterval interval =
+					getLayoutModel().getLayoutComponent(ObjectInfoUtils.getId(component)).getLayoutInterval(
+							dimension);
+			interval.setSizes(NOT_EXPLICITLY_DEFINED, NOT_EXPLICITLY_DEFINED, NOT_EXPLICITLY_DEFINED);
+		}
+	}
 
-  @Override
-  protected void setGroupAlignment(LayoutInterval group, Expression arg) {
-    if (!m_isOldLayout) {
-      Alignment alignment = (Alignment) JavaInfoEvaluationHelper.getValue(arg);
-      group.setGroupAlignment(alignment.ordinal());
-    } else {
-      Number alignment = (Number) JavaInfoEvaluationHelper.getValue(arg);
-      group.setGroupAlignment(convertOldAlignment(alignment.intValue()));
-    }
-  }
+	@Override
+	protected void setGroupAlignment(LayoutInterval group, Expression arg) {
+		if (!m_isOldLayout) {
+			Alignment alignment = (Alignment) JavaInfoEvaluationHelper.getValue(arg);
+			group.setGroupAlignment(alignment.ordinal());
+		} else {
+			Number alignment = (Number) JavaInfoEvaluationHelper.getValue(arg);
+			group.setGroupAlignment(convertOldAlignment(alignment.intValue()));
+		}
+	}
 
-  @Override
-  protected void setAlignment(LayoutInterval interval, Expression arg) {
-    if (!m_isOldLayout) {
-      Alignment alignment = (Alignment) JavaInfoEvaluationHelper.getValue(arg);
-      interval.setAlignment(alignment.ordinal());
-    } else {
-      Number alignment = (Number) JavaInfoEvaluationHelper.getValue(arg);
-      interval.setAlignment(convertOldAlignment(alignment.intValue()));
-    }
-  }
+	@Override
+	protected void setAlignment(LayoutInterval interval, Expression arg) {
+		if (!m_isOldLayout) {
+			Alignment alignment = (Alignment) JavaInfoEvaluationHelper.getValue(arg);
+			interval.setAlignment(alignment.ordinal());
+		} else {
+			Number alignment = (Number) JavaInfoEvaluationHelper.getValue(arg);
+			interval.setAlignment(convertOldAlignment(alignment.intValue()));
+		}
+	}
 
-  @Override
-  protected void setPaddingType(LayoutInterval gap, Expression arg) {
-    if (!m_isOldLayout) {
-      ComponentPlacement placement = (ComponentPlacement) JavaInfoEvaluationHelper.getValue(arg);
-      gap.setPaddingType(convertPadding(placement));
-    } else {
-      Number placement = (Number) JavaInfoEvaluationHelper.getValue(arg);
-      gap.setPaddingType(convertOldPadding(placement.intValue()));
-    }
-  }
+	@Override
+	protected void setPaddingType(LayoutInterval gap, Expression arg) {
+		if (!m_isOldLayout) {
+			ComponentPlacement placement = (ComponentPlacement) JavaInfoEvaluationHelper.getValue(arg);
+			gap.setPaddingType(convertPadding(placement));
+		} else {
+			Number placement = (Number) JavaInfoEvaluationHelper.getValue(arg);
+			gap.setPaddingType(convertOldPadding(placement.intValue()));
+		}
+	}
 
-  @Override
-  protected boolean isComponent(Expression arg) {
-    return AstNodeUtils.isSuccessorOf(arg, Component.class);
-  }
+	@Override
+	protected boolean isComponent(Expression arg) {
+		return AstNodeUtils.isSuccessorOf(arg, Component.class);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Misc
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private PaddingType convertPadding(ComponentPlacement value) {
-    switch (value) {
-      case RELATED :
-        return PaddingType.RELATED;
-      case UNRELATED :
-        return PaddingType.UNRELATED;
-      case INDENT :
-        return PaddingType.INDENT;
-    }
-    return PaddingType.SEPARATE;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Misc
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private PaddingType convertPadding(ComponentPlacement value) {
+		switch (value) {
+		case RELATED :
+			return PaddingType.RELATED;
+		case UNRELATED :
+			return PaddingType.UNRELATED;
+		case INDENT :
+			return PaddingType.INDENT;
+		}
+		return PaddingType.SEPARATE;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Old layout
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void convertLayout() throws Exception {
-    Class<?> componentClass =
-        EditorState.get(m_layout.getEditor()).getEditorLoader().loadClass("javax.swing.GroupLayout");
-    ComponentDescription layoutDescription =
-        ComponentDescriptionHelper.getDescription(m_layout.getEditor(), componentClass);
-    try {
-      layoutDescription.putTag(GroupLayoutInfo2.FLAG_IS_MORPHING, "true");
-      MorphingTargetDescription target = new MorphingTargetDescription(componentClass, null);
-      MorphingSupport.morph("java.awt.Component", m_layout, target);
-    } finally {
-      layoutDescription.putTag(GroupLayoutInfo2.FLAG_IS_MORPHING, "false");
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Old layout
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void convertLayout() throws Exception {
+		Class<?> componentClass =
+				EditorState.get(m_layout.getEditor()).getEditorLoader().loadClass("javax.swing.GroupLayout");
+		ComponentDescription layoutDescription =
+				ComponentDescriptionHelper.getDescription(m_layout.getEditor(), componentClass);
+		try {
+			layoutDescription.putTag(GroupLayoutInfo2.FLAG_IS_MORPHING, "true");
+			MorphingTargetDescription target = new MorphingTargetDescription(componentClass, null);
+			MorphingSupport.morph("java.awt.Component", m_layout, target);
+		} finally {
+			layoutDescription.putTag(GroupLayoutInfo2.FLAG_IS_MORPHING, "false");
+		}
+	}
 
-  @Override
-  protected int convertDimension(int dimension) {
-    if (m_isOldLayout) {
-      if (dimension == 1 /*GroupLayout.HORIZONTAL*/) {
-        return HORIZONTAL;
-      } else if (dimension == 2 /*GroupLayout.VERTICAL*/) {
-        return VERTICAL;
-      }
-    }
-    return super.convertDimension(dimension);
-  }
+	@Override
+	protected int convertDimension(int dimension) {
+		if (m_isOldLayout) {
+			if (dimension == 1 /*GroupLayout.HORIZONTAL*/) {
+				return HORIZONTAL;
+			} else if (dimension == 2 /*GroupLayout.VERTICAL*/) {
+				return VERTICAL;
+			}
+		}
+		return super.convertDimension(dimension);
+	}
 
-  private int convertOldAlignment(int value) {
-    switch (value) {
-      case 4 /*GroupLayout.CENTER*/:
-        return CENTER;
-      case 3 /*GroupLayout.BASELINE*/:
-        return BASELINE;
-      case 1 /*GroupLayout.LEADING*/:
-        return LEADING;
-      case 2 /*GroupLayout.TRAILING*/:
-        return TRAILING;
-      default :
-        return DEFAULT;
-    }
-  }
+	private int convertOldAlignment(int value) {
+		switch (value) {
+		case 4 /*GroupLayout.CENTER*/:
+			return CENTER;
+		case 3 /*GroupLayout.BASELINE*/:
+			return BASELINE;
+		case 1 /*GroupLayout.LEADING*/:
+			return LEADING;
+		case 2 /*GroupLayout.TRAILING*/:
+			return TRAILING;
+		default :
+			return DEFAULT;
+		}
+	}
 
-  private PaddingType convertOldPadding(int value) {
-    switch (value) {
-      case 0 /*RELATED*/:
-        return PaddingType.RELATED;
-      case 1 /*UNRELATED*/:
-        return PaddingType.UNRELATED;
-      case 2 /*INDENT*/:
-        return PaddingType.INDENT;
-    }
-    return PaddingType.SEPARATE;
-  }
+	private PaddingType convertOldPadding(int value) {
+		switch (value) {
+		case 0 /*RELATED*/:
+			return PaddingType.RELATED;
+		case 1 /*UNRELATED*/:
+			return PaddingType.UNRELATED;
+		case 2 /*INDENT*/:
+			return PaddingType.INDENT;
+		}
+		return PaddingType.SEPARATE;
+	}
 }
diff --git a/org.eclipse.wb.swing.java6/src/org/eclipse/wb/internal/swing/java6/model/SwingVisualMapper.java b/org.eclipse.wb.swing.java6/src/org/eclipse/wb/internal/swing/java6/model/SwingVisualMapper.java
index a8dab03b9..5c0f3caec 100644
--- a/org.eclipse.wb.swing.java6/src/org/eclipse/wb/internal/swing/java6/model/SwingVisualMapper.java
+++ b/org.eclipse.wb.swing.java6/src/org/eclipse/wb/internal/swing/java6/model/SwingVisualMapper.java
@@ -35,181 +35,181 @@
  * @author mitin_aa
  */
 public class SwingVisualMapper implements VisualMapper {
-  private static final int DEFAULT_MIN_SIZE = 25;
-  private GroupLayoutInfo2 m_layout;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SwingVisualMapper(GroupLayoutInfo2 layout) {
-    m_layout = layout;
-    m_layout.addBroadcastListener(new JavaEventListener() {
-      @Override
-      public void replaceChildAfter(JavaInfo parent, JavaInfo oldChild, JavaInfo newChild)
-          throws Exception {
-        if (oldChild == m_layout) {
-          m_layout = (GroupLayoutInfo2) newChild;
-        }
-      }
-    });
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // VisualMapper
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public int getBaselinePosition(String componentId, int width, int height) {
-    return BaselineSupportHelper.getBaseline(getComponent(componentId));
-  }
-
-  @Override
-  public java.awt.Rectangle getComponentBounds(String componentId) {
-    ComponentInfo componentInfo = getComponentInfo(componentId);
-    return GroupLayoutUtils.getBoundsInLayout(
-        m_layout.getAdapter(IGroupLayoutInfo.class),
-        componentInfo);
-  }
-
-  @Override
-  public Dimension getComponentMinimumSize(String componentId) {
-    Component component = getComponent(componentId);
-    if (component == null) {
-      return new Dimension(DEFAULT_MIN_SIZE, DEFAULT_MIN_SIZE);
-    }
-    return component.getMinimumSize();
-  }
-
-  @Override
-  public Dimension getComponentPreferredSize(String componentId) {
-    Component component = getComponent(componentId);
-    return component.getPreferredSize();
-  }
-
-  @Override
-  public java.awt.Rectangle getContainerInterior(String componentId) {
-    org.eclipse.draw2d.geometry.Rectangle bounds = getContainer().getModelBounds().getCopy();
-    bounds.crop(getContainer().getInsets());
-    return new java.awt.Rectangle(0, 0, bounds.width, bounds.height);
-  }
-
-  @Override
-  public int getPreferredPadding(String component1Id,
-      String component2Id,
-      int dimension,
-      int comp2Alignment,
-      PaddingType paddingType) {
-    Component comp1 = getComponent(component1Id);
-    Component comp2 = getComponent(component2Id);
-    JComponent jcomp1 = comp1 instanceof JComponent ? (JComponent) comp1 : null;
-    JComponent jcomp2 = comp2 instanceof JComponent ? (JComponent) comp2 : null;
-    assert dimension == HORIZONTAL || dimension == VERTICAL;
-    assert comp2Alignment == LEADING || comp2Alignment == TRAILING;
-    LayoutStyle.ComponentPlacement type = paddingType == PaddingType.INDENT
-        ? LayoutStyle.ComponentPlacement.INDENT
-        : paddingType == PaddingType.RELATED
-            ? LayoutStyle.ComponentPlacement.RELATED
-            : LayoutStyle.ComponentPlacement.UNRELATED;
-    int position = 0;
-    if (dimension == HORIZONTAL) {
-      if (paddingType == PaddingType.INDENT) {
-        position = comp2Alignment == LEADING ? SwingConstants.WEST : SwingConstants.EAST;
-      } else {
-        position = comp2Alignment == LEADING ? SwingConstants.EAST : SwingConstants.WEST;
-      }
-    } else {
-      position = comp2Alignment == LEADING ? SwingConstants.SOUTH : SwingConstants.NORTH;
-    }
-    if (jcomp1 == null || jcomp2 == null) {
-      // default distance between components
-      return type != javax.swing.LayoutStyle.ComponentPlacement.UNRELATED ? 6 : 12;
-    }
-    int prefPadding = paddingType != PaddingType.SEPARATE
-        ? LayoutStyle.getInstance().getPreferredGap(
-            jcomp1,
-            jcomp2,
-            type,
-            position,
-            getContainer().getContainer())
-        : PADDING_SEPARATE_VALUE;
-    return prefPadding;
-  }
-
-  @Override
-  public void setComponentVisibility(String componentId, boolean visible) {
-  }
-
-  @Override
-  public int getPreferredPaddingInParent(String parentId,
-      String componentId,
-      int dimension,
-      int compAlignment) {
-    int alignment;
-    if (dimension == HORIZONTAL) {
-      if (compAlignment == LEADING) {
-        alignment = SwingConstants.WEST;
-      } else {
-        alignment = SwingConstants.EAST;
-      }
-    } else {
-      if (compAlignment == LEADING) {
-        alignment = SwingConstants.NORTH;
-      } else {
-        alignment = SwingConstants.SOUTH;
-      }
-    }
-    Component component = getComponent(componentId);
-    if (component instanceof JComponent) {
-      return LayoutStyle.getInstance().getContainerGap(
-          (JComponent) component,
-          alignment,
-          getContainer().getContainer());
-    } else {
-      return 6;
-    }
-  }
-
-  @Override
-  public boolean hasExplicitPreferredSize(String componentId) {
-    ComponentInfo componentInfo = getComponentInfo(componentId);
-    Component component = componentInfo.getComponent();
-    // special case for JTextComponent
-    if (JTextComponent.class.isAssignableFrom(componentInfo.getDescription().getComponentClass())) {
-      return true;
-    } else if (component == null) {
-      return false;
-    } else {
-      return ((JComponent) component).isPreferredSizeSet();
-    }
-  }
-
-  @Override
-  public void rebuildLayout(String containerId) {
-  }
-
-  @Override
-  public boolean[] getComponentResizability(String compId, boolean[] resizability) {
-    return null;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Helpers/Misc
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Component getComponent(String id) {
-    ComponentInfo componentInfo = getComponentInfo(id);
-    return componentInfo.getComponent();
-  }
-
-  private ComponentInfo getComponentInfo(String id) {
-    return (ComponentInfo) ObjectInfoUtils.getById(id);
-  }
-
-  private ContainerInfo getContainer() {
-    return m_layout.getContainer();
-  }
+	private static final int DEFAULT_MIN_SIZE = 25;
+	private GroupLayoutInfo2 m_layout;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SwingVisualMapper(GroupLayoutInfo2 layout) {
+		m_layout = layout;
+		m_layout.addBroadcastListener(new JavaEventListener() {
+			@Override
+			public void replaceChildAfter(JavaInfo parent, JavaInfo oldChild, JavaInfo newChild)
+					throws Exception {
+				if (oldChild == m_layout) {
+					m_layout = (GroupLayoutInfo2) newChild;
+				}
+			}
+		});
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// VisualMapper
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public int getBaselinePosition(String componentId, int width, int height) {
+		return BaselineSupportHelper.getBaseline(getComponent(componentId));
+	}
+
+	@Override
+	public java.awt.Rectangle getComponentBounds(String componentId) {
+		ComponentInfo componentInfo = getComponentInfo(componentId);
+		return GroupLayoutUtils.getBoundsInLayout(
+				m_layout.getAdapter(IGroupLayoutInfo.class),
+				componentInfo);
+	}
+
+	@Override
+	public Dimension getComponentMinimumSize(String componentId) {
+		Component component = getComponent(componentId);
+		if (component == null) {
+			return new Dimension(DEFAULT_MIN_SIZE, DEFAULT_MIN_SIZE);
+		}
+		return component.getMinimumSize();
+	}
+
+	@Override
+	public Dimension getComponentPreferredSize(String componentId) {
+		Component component = getComponent(componentId);
+		return component.getPreferredSize();
+	}
+
+	@Override
+	public java.awt.Rectangle getContainerInterior(String componentId) {
+		org.eclipse.draw2d.geometry.Rectangle bounds = getContainer().getModelBounds().getCopy();
+		bounds.crop(getContainer().getInsets());
+		return new java.awt.Rectangle(0, 0, bounds.width, bounds.height);
+	}
+
+	@Override
+	public int getPreferredPadding(String component1Id,
+			String component2Id,
+			int dimension,
+			int comp2Alignment,
+			PaddingType paddingType) {
+		Component comp1 = getComponent(component1Id);
+		Component comp2 = getComponent(component2Id);
+		JComponent jcomp1 = comp1 instanceof JComponent ? (JComponent) comp1 : null;
+		JComponent jcomp2 = comp2 instanceof JComponent ? (JComponent) comp2 : null;
+		assert dimension == HORIZONTAL || dimension == VERTICAL;
+		assert comp2Alignment == LEADING || comp2Alignment == TRAILING;
+		LayoutStyle.ComponentPlacement type = paddingType == PaddingType.INDENT
+				? LayoutStyle.ComponentPlacement.INDENT
+						: paddingType == PaddingType.RELATED
+						? LayoutStyle.ComponentPlacement.RELATED
+								: LayoutStyle.ComponentPlacement.UNRELATED;
+		int position = 0;
+		if (dimension == HORIZONTAL) {
+			if (paddingType == PaddingType.INDENT) {
+				position = comp2Alignment == LEADING ? SwingConstants.WEST : SwingConstants.EAST;
+			} else {
+				position = comp2Alignment == LEADING ? SwingConstants.EAST : SwingConstants.WEST;
+			}
+		} else {
+			position = comp2Alignment == LEADING ? SwingConstants.SOUTH : SwingConstants.NORTH;
+		}
+		if (jcomp1 == null || jcomp2 == null) {
+			// default distance between components
+			return type != javax.swing.LayoutStyle.ComponentPlacement.UNRELATED ? 6 : 12;
+		}
+		int prefPadding = paddingType != PaddingType.SEPARATE
+				? LayoutStyle.getInstance().getPreferredGap(
+						jcomp1,
+						jcomp2,
+						type,
+						position,
+						getContainer().getContainer())
+						: PADDING_SEPARATE_VALUE;
+		return prefPadding;
+	}
+
+	@Override
+	public void setComponentVisibility(String componentId, boolean visible) {
+	}
+
+	@Override
+	public int getPreferredPaddingInParent(String parentId,
+			String componentId,
+			int dimension,
+			int compAlignment) {
+		int alignment;
+		if (dimension == HORIZONTAL) {
+			if (compAlignment == LEADING) {
+				alignment = SwingConstants.WEST;
+			} else {
+				alignment = SwingConstants.EAST;
+			}
+		} else {
+			if (compAlignment == LEADING) {
+				alignment = SwingConstants.NORTH;
+			} else {
+				alignment = SwingConstants.SOUTH;
+			}
+		}
+		Component component = getComponent(componentId);
+		if (component instanceof JComponent) {
+			return LayoutStyle.getInstance().getContainerGap(
+					(JComponent) component,
+					alignment,
+					getContainer().getContainer());
+		} else {
+			return 6;
+		}
+	}
+
+	@Override
+	public boolean hasExplicitPreferredSize(String componentId) {
+		ComponentInfo componentInfo = getComponentInfo(componentId);
+		Component component = componentInfo.getComponent();
+		// special case for JTextComponent
+		if (JTextComponent.class.isAssignableFrom(componentInfo.getDescription().getComponentClass())) {
+			return true;
+		} else if (component == null) {
+			return false;
+		} else {
+			return ((JComponent) component).isPreferredSizeSet();
+		}
+	}
+
+	@Override
+	public void rebuildLayout(String containerId) {
+	}
+
+	@Override
+	public boolean[] getComponentResizability(String compId, boolean[] resizability) {
+		return null;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Helpers/Misc
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Component getComponent(String id) {
+		ComponentInfo componentInfo = getComponentInfo(id);
+		return componentInfo.getComponent();
+	}
+
+	private ComponentInfo getComponentInfo(String id) {
+		return (ComponentInfo) ObjectInfoUtils.getById(id);
+	}
+
+	private ContainerInfo getContainer() {
+		return m_layout.getContainer();
+	}
 }
diff --git a/org.eclipse.wb.swing.java6/src/org/eclipse/wb/internal/swing/java6/model/WidgetSpringInfo.java b/org.eclipse.wb.swing.java6/src/org/eclipse/wb/internal/swing/java6/model/WidgetSpringInfo.java
index d61e3f0f3..6a9e854ad 100644
--- a/org.eclipse.wb.swing.java6/src/org/eclipse/wb/internal/swing/java6/model/WidgetSpringInfo.java
+++ b/org.eclipse.wb.swing.java6/src/org/eclipse/wb/internal/swing/java6/model/WidgetSpringInfo.java
@@ -23,39 +23,39 @@
  * @coverage swing.model.layout.group
  */
 public class WidgetSpringInfo extends SpringInfo {
-  private final AbstractComponentInfo m_widget;
-  private Alignment m_alignment = Alignment.LEADING;
+	private final AbstractComponentInfo m_widget;
+	private Alignment m_alignment = Alignment.LEADING;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public WidgetSpringInfo(AbstractComponentInfo widget) {
-    m_widget = widget;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public WidgetSpringInfo(AbstractComponentInfo widget) {
+		m_widget = widget;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void setAlignment(Alignment alignment) {
-    m_alignment = alignment;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void setAlignment(Alignment alignment) {
+		m_alignment = alignment;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Dump
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void dump(int level, StringBuffer buffer) {
-    String name = m_widget.getVariableSupport().getName();
-    buffer.append(StringUtils.repeat(" ", level));
-    buffer.append("W align=" + m_alignment + " name=");
-    buffer.append((name == null ? m_widget.toString() : name) + " sizes=");
-    super.dump(level, buffer);
-    buffer.append("\n");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Dump
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void dump(int level, StringBuffer buffer) {
+		String name = m_widget.getVariableSupport().getName();
+		buffer.append(StringUtils.repeat(" ", level));
+		buffer.append("W align=" + m_alignment + " name=");
+		buffer.append((name == null ? m_widget.toString() : name) + " sizes=");
+		super.dump(level, buffer);
+		buffer.append("\n");
+	}
 }
diff --git a/org.eclipse.wb.swing.jsr296/src/org/eclipse/wb/internal/swing/jsr296/Activator.java b/org.eclipse.wb.swing.jsr296/src/org/eclipse/wb/internal/swing/jsr296/Activator.java
index e6a956e96..eb5637995 100644
--- a/org.eclipse.wb.swing.jsr296/src/org/eclipse/wb/internal/swing/jsr296/Activator.java
+++ b/org.eclipse.wb.swing.jsr296/src/org/eclipse/wb/internal/swing/jsr296/Activator.java
@@ -27,64 +27,64 @@
  * @coverage swing.jsr296
  */
 public final class Activator extends AbstractUIPlugin {
-  public static final String PLUGIN_ID = "org.eclipse.wb.swing.jsr296";
-  private static Activator m_plugin;
+	public static final String PLUGIN_ID = "org.eclipse.wb.swing.jsr296";
+	private static Activator m_plugin;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Bundle operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void start(BundleContext context) throws Exception {
-    super.start(context);
-    m_plugin = this;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Bundle operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+		m_plugin = this;
+	}
 
-  @Override
-  public void stop(BundleContext context) throws Exception {
-    m_plugin = null;
-    super.stop(context);
-  }
+	@Override
+	public void stop(BundleContext context) throws Exception {
+		m_plugin = null;
+		super.stop(context);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the instance of {@link Activator}.
-   */
-  public static Activator getDefault() {
-    return m_plugin;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the instance of {@link Activator}.
+	 */
+	public static Activator getDefault() {
+		return m_plugin;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Resources
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final BundleResourceProvider m_resourceProvider =
-      BundleResourceProvider.get(PLUGIN_ID);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Resources
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final BundleResourceProvider m_resourceProvider =
+			BundleResourceProvider.get(PLUGIN_ID);
 
-  /**
-   * @return the {@link InputStream} for file from plugin directory.
-   */
-  public static InputStream getFile(String path) {
-    return m_resourceProvider.getFile(path);
-  }
+	/**
+	 * @return the {@link InputStream} for file from plugin directory.
+	 */
+	public static InputStream getFile(String path) {
+		return m_resourceProvider.getFile(path);
+	}
 
-  /**
-   * @return the {@link Image} from "icons" directory, with caching.
-   */
-  public static Image getImage(String path) {
-    return m_resourceProvider.getImage("icons/" + path);
-  }
+	/**
+	 * @return the {@link Image} from "icons" directory, with caching.
+	 */
+	public static Image getImage(String path) {
+		return m_resourceProvider.getImage("icons/" + path);
+	}
 
-  /**
-   * @return the {@link ImageDescriptor} from "icons" directory.
-   */
-  public static ImageDescriptor getImageDescriptor(String path) {
-    return m_resourceProvider.getImageDescriptor("icons/" + path);
-  }
+	/**
+	 * @return the {@link ImageDescriptor} from "icons" directory.
+	 */
+	public static ImageDescriptor getImageDescriptor(String path) {
+		return m_resourceProvider.getImageDescriptor("icons/" + path);
+	}
 }
diff --git a/org.eclipse.wb.swing.jsr296/src/org/eclipse/wb/internal/swing/jsr296/gef/EditPartFactory.java b/org.eclipse.wb.swing.jsr296/src/org/eclipse/wb/internal/swing/jsr296/gef/EditPartFactory.java
index aaec37e68..f31d3b163 100644
--- a/org.eclipse.wb.swing.jsr296/src/org/eclipse/wb/internal/swing/jsr296/gef/EditPartFactory.java
+++ b/org.eclipse.wb.swing.jsr296/src/org/eclipse/wb/internal/swing/jsr296/gef/EditPartFactory.java
@@ -23,16 +23,16 @@
  * @coverage swing.jsr296
  */
 public final class EditPartFactory implements IEditPartFactory {
-  private final static IEditPartFactory MATCHING_FACTORY =
-      new MatchingEditPartFactory(ImmutableList.of("org.eclipse.wb.internal.swing.jsr296.model"),
-          ImmutableList.of("org.eclipse.wb.internal.swing.jsr296.gef"));
+	private final static IEditPartFactory MATCHING_FACTORY =
+			new MatchingEditPartFactory(ImmutableList.of("org.eclipse.wb.internal.swing.jsr296.model"),
+					ImmutableList.of("org.eclipse.wb.internal.swing.jsr296.gef"));
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IEditPartFactory
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public EditPart createEditPart(EditPart context, Object model) {
-    return MATCHING_FACTORY.createEditPart(context, model);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IEditPartFactory
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public EditPart createEditPart(EditPart context, Object model) {
+		return MATCHING_FACTORY.createEditPart(context, model);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.jsr296/src/org/eclipse/wb/internal/swing/jsr296/gef/FrameViewEditPart.java b/org.eclipse.wb.swing.jsr296/src/org/eclipse/wb/internal/swing/jsr296/gef/FrameViewEditPart.java
index cdb2f2b3b..398b9f777 100644
--- a/org.eclipse.wb.swing.jsr296/src/org/eclipse/wb/internal/swing/jsr296/gef/FrameViewEditPart.java
+++ b/org.eclipse.wb.swing.jsr296/src/org/eclipse/wb/internal/swing/jsr296/gef/FrameViewEditPart.java
@@ -21,12 +21,12 @@
  * @coverage swing.jsr296
  */
 public class FrameViewEditPart extends AbstractComponentEditPart {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FrameViewEditPart(FrameViewInfo view) {
-    super(view);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FrameViewEditPart(FrameViewInfo view) {
+		super(view);
+	}
 }
diff --git a/org.eclipse.wb.swing.jsr296/src/org/eclipse/wb/internal/swing/jsr296/model/FrameViewInfo.java b/org.eclipse.wb.swing.jsr296/src/org/eclipse/wb/internal/swing/jsr296/model/FrameViewInfo.java
index fd9b51622..bb7b94381 100644
--- a/org.eclipse.wb.swing.jsr296/src/org/eclipse/wb/internal/swing/jsr296/model/FrameViewInfo.java
+++ b/org.eclipse.wb.swing.jsr296/src/org/eclipse/wb/internal/swing/jsr296/model/FrameViewInfo.java
@@ -40,122 +40,122 @@
  * @coverage swing.jsr296
  */
 public class FrameViewInfo extends AbstractComponentInfo implements IThisMethodParameterEvaluator {
-  private JFrame m_frame;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FrameViewInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IThisMethodParameterEvaluator
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public Object evaluateParameter(EvaluationContext context,
-      MethodDeclaration methodDeclaration,
-      String methodSignature,
-      SingleVariableDeclaration parameter,
-      int index) throws Exception {
-    if (AstNodeUtils.isSuccessorOf(parameter, "org.jdesktop.application.Application")) {
-      ClassLoader classLoader = JavaInfoUtils.getClassLoader(this);
-      Class<?> applicationClass = classLoader.loadClass("org.jdesktop.application.Application");
-      // prepare Application instance (only for Class with callback)
-      Object applicationForClass = new ByteBuddy() //
-          .subclass(applicationClass) //
-          .make() //
-          .load(classLoader) //
-          .getLoaded() //
-          .getConstructor() //
-          .newInstance();
-      // create Application instance using Application method, which performs required initializations
-      return ReflectionUtils.invokeMethod(
-          applicationClass,
-          "create(java.lang.Class)",
-          applicationForClass.getClass());
-    }
-    return AstEvaluationEngine.UNKNOWN;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AbstractComponentInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected TopBoundsSupport createTopBoundsSupport() {
-    return new FrameViewTopBoundsSupport(this);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Hierarchy
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean canBeRoot() {
-    return true;
-  }
-
-  @Override
-  public Object getComponentObject() {
-    return m_frame;
-  }
-
-  /**
-   * @return the {@link FrameViewInfo}'s {@link JFrame}.
-   */
-  public JFrame getFrame() {
-    return m_frame;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void execRefreshOperation(final RunnableEx runnableEx) throws Exception {
-    SwingUtils.runLaterAndWait(runnableEx);
-  }
-
-  @Override
-  public void refresh_dispose() throws Exception {
-    // dispose JFrame
-    if (m_frame != null) {
-      m_frame.dispose();
-      m_frame = null;
-    }
-    // call "super"
-    super.refresh_dispose();
-  }
-
-  @Override
-  public void setObject(Object object) throws Exception {
-    super.setObject(object);
-    m_frame = (JFrame) ReflectionUtils.invokeMethod(getObject(), "getFrame()");
-  }
-
-  @Override
-  protected void refresh_afterCreate() throws Exception {
-    // preferred size, should be here, because "super" applies "top bounds"
-    setPreferredSize(CoordinateUtils.get(m_frame.getPreferredSize()));
-    // call "super"
-    super.refresh_afterCreate();
-  }
-
-  @Override
-  protected void refresh_fetch() throws Exception {
-    ComponentInfo.refresh_fetch(this, m_frame, new RunnableEx() {
-      public void run() throws Exception {
-        FrameViewInfo.super.refresh_fetch();
-      }
-    });
-  }
+	private JFrame m_frame;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FrameViewInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IThisMethodParameterEvaluator
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public Object evaluateParameter(EvaluationContext context,
+			MethodDeclaration methodDeclaration,
+			String methodSignature,
+			SingleVariableDeclaration parameter,
+			int index) throws Exception {
+		if (AstNodeUtils.isSuccessorOf(parameter, "org.jdesktop.application.Application")) {
+			ClassLoader classLoader = JavaInfoUtils.getClassLoader(this);
+			Class<?> applicationClass = classLoader.loadClass("org.jdesktop.application.Application");
+			// prepare Application instance (only for Class with callback)
+			Object applicationForClass = new ByteBuddy() //
+					.subclass(applicationClass) //
+					.make() //
+					.load(classLoader) //
+					.getLoaded() //
+					.getConstructor() //
+					.newInstance();
+			// create Application instance using Application method, which performs required initializations
+			return ReflectionUtils.invokeMethod(
+					applicationClass,
+					"create(java.lang.Class)",
+					applicationForClass.getClass());
+		}
+		return AstEvaluationEngine.UNKNOWN;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AbstractComponentInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected TopBoundsSupport createTopBoundsSupport() {
+		return new FrameViewTopBoundsSupport(this);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Hierarchy
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean canBeRoot() {
+		return true;
+	}
+
+	@Override
+	public Object getComponentObject() {
+		return m_frame;
+	}
+
+	/**
+	 * @return the {@link FrameViewInfo}'s {@link JFrame}.
+	 */
+	public JFrame getFrame() {
+		return m_frame;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void execRefreshOperation(final RunnableEx runnableEx) throws Exception {
+		SwingUtils.runLaterAndWait(runnableEx);
+	}
+
+	@Override
+	public void refresh_dispose() throws Exception {
+		// dispose JFrame
+		if (m_frame != null) {
+			m_frame.dispose();
+			m_frame = null;
+		}
+		// call "super"
+		super.refresh_dispose();
+	}
+
+	@Override
+	public void setObject(Object object) throws Exception {
+		super.setObject(object);
+		m_frame = (JFrame) ReflectionUtils.invokeMethod(getObject(), "getFrame()");
+	}
+
+	@Override
+	protected void refresh_afterCreate() throws Exception {
+		// preferred size, should be here, because "super" applies "top bounds"
+		setPreferredSize(CoordinateUtils.get(m_frame.getPreferredSize()));
+		// call "super"
+		super.refresh_afterCreate();
+	}
+
+	@Override
+	protected void refresh_fetch() throws Exception {
+		ComponentInfo.refresh_fetch(this, m_frame, new RunnableEx() {
+			public void run() throws Exception {
+				FrameViewInfo.super.refresh_fetch();
+			}
+		});
+	}
 }
diff --git a/org.eclipse.wb.swing.jsr296/src/org/eclipse/wb/internal/swing/jsr296/model/FrameViewTopBoundsSupport.java b/org.eclipse.wb.swing.jsr296/src/org/eclipse/wb/internal/swing/jsr296/model/FrameViewTopBoundsSupport.java
index b387651ca..f957112f0 100644
--- a/org.eclipse.wb.swing.jsr296/src/org/eclipse/wb/internal/swing/jsr296/model/FrameViewTopBoundsSupport.java
+++ b/org.eclipse.wb.swing.jsr296/src/org/eclipse/wb/internal/swing/jsr296/model/FrameViewTopBoundsSupport.java
@@ -24,47 +24,47 @@
  * @coverage swing.jsr296
  */
 public class FrameViewTopBoundsSupport extends TopBoundsSupport {
-  private final FrameViewInfo m_view;
+	private final FrameViewInfo m_view;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FrameViewTopBoundsSupport(FrameViewInfo view) {
-    super(view);
-    m_view = view;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FrameViewTopBoundsSupport(FrameViewInfo view) {
+		super(view);
+		m_view = view;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // TopBoundsSupport
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void apply() throws Exception {
-    // set size from resource properties (or default)
-    {
-      Dimension size = getResourceSize();
-      m_view.getFrame().setSize(size.width, size.height);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// TopBoundsSupport
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void apply() throws Exception {
+		// set size from resource properties (or default)
+		{
+			Dimension size = getResourceSize();
+			m_view.getFrame().setSize(size.width, size.height);
+		}
+	}
 
-  @Override
-  public void setSize(int width, int height) throws Exception {
-    // remember size in resource properties
-    setResourceSize(width, height);
-  }
+	@Override
+	public void setSize(int width, int height) throws Exception {
+		// remember size in resource properties
+		setResourceSize(width, height);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Show
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean show() throws Exception {
-    JFrame frame = m_view.getFrame();
-    SwingTopBoundsSupport.show(frame);
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Show
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean show() throws Exception {
+		JFrame frame = m_view.getFrame();
+		SwingTopBoundsSupport.show(frame);
+		return false;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing.jsr296/src/org/eclipse/wb/internal/swing/jsr296/model/Jsr296RootProcessor.java b/org.eclipse.wb.swing.jsr296/src/org/eclipse/wb/internal/swing/jsr296/model/Jsr296RootProcessor.java
index d18de3f73..308eb7c33 100644
--- a/org.eclipse.wb.swing.jsr296/src/org/eclipse/wb/internal/swing/jsr296/model/Jsr296RootProcessor.java
+++ b/org.eclipse.wb.swing.jsr296/src/org/eclipse/wb/internal/swing/jsr296/model/Jsr296RootProcessor.java
@@ -36,86 +36,86 @@
  * @coverage swing.jsr296
  */
 public final class Jsr296RootProcessor implements IRootProcessor {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final IRootProcessor INSTANCE = new Jsr296RootProcessor();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final IRootProcessor INSTANCE = new Jsr296RootProcessor();
 
-  private Jsr296RootProcessor() {
-  }
+	private Jsr296RootProcessor() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IRootProcessor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void process(final JavaInfo root, List<JavaInfo> components) throws Exception {
-    // evaluation <code>ResourceMap.injectComponents(Component)</code>
-    root.addBroadcastListener(new EvaluationEventListener() {
-      private boolean evaluating = false;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IRootProcessor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void process(final JavaInfo root, List<JavaInfo> components) throws Exception {
+		// evaluation <code>ResourceMap.injectComponents(Component)</code>
+		root.addBroadcastListener(new EvaluationEventListener() {
+			private boolean evaluating = false;
 
-      @Override
-      public void evaluateAfter(EvaluationContext context, ASTNode node) throws Exception {
-        if (!evaluating && isInjectComponentsNode(node)) {
-          try {
-            evaluating = true;
-            AstEvaluationEngine.evaluate(context, (MethodInvocation) node);
-            //
-            Expression javaInfoExpression = DomGenerics.arguments(node).get(0);
-            JavaInfo javaInfo = root.getChildRepresentedBy(javaInfoExpression);
-            if (javaInfo != null) {
-              reNewJavaInfoPropertyDefaults(javaInfo);
-            } else {
-              reNewJavaInfoPropertyDefaults(root);
-            }
-          } finally {
-            evaluating = false;
-          }
-        }
-      }
+			@Override
+			public void evaluateAfter(EvaluationContext context, ASTNode node) throws Exception {
+				if (!evaluating && isInjectComponentsNode(node)) {
+					try {
+						evaluating = true;
+						AstEvaluationEngine.evaluate(context, (MethodInvocation) node);
+						//
+						Expression javaInfoExpression = DomGenerics.arguments(node).get(0);
+						JavaInfo javaInfo = root.getChildRepresentedBy(javaInfoExpression);
+						if (javaInfo != null) {
+							reNewJavaInfoPropertyDefaults(javaInfo);
+						} else {
+							reNewJavaInfoPropertyDefaults(root);
+						}
+					} finally {
+						evaluating = false;
+					}
+				}
+			}
 
-      /**
-       * Process renew properties values.
-       *
-       * @param the
-       *          {@link JavaInfo}.
-       */
-      private void reNewJavaInfoPropertyDefaults(JavaInfo javaInfo) throws Exception {
-        if (javaInfo.isObjectReady()) {
-          javaInfo.getDescription().visit(javaInfo, AbstractDescription.STATE_OBJECT_READY);
-        }
-        for (JavaInfo childJava : javaInfo.getChildrenJava()) {
-          reNewJavaInfoPropertyDefaults(childJava);
-        }
-      }
-    });
-    // <code>ResourceMap.injectComponents(Component)</code> invocation is terminal for children
-    root.addBroadcastListener(new JavaEventListener() {
-      @Override
-      public void target_isTerminalStatement(JavaInfo parent,
-          JavaInfo child,
-          Statement statement,
-          boolean[] terminal) {
-        if (statement instanceof ExpressionStatement) {
-          Expression expression = ((ExpressionStatement) statement).getExpression();
-          if (isInjectComponentsNode(expression)) {
-            Expression javaInfoExpression = DomGenerics.arguments(expression).get(0);
-            JavaInfo javaInfo = root.getChildRepresentedBy(javaInfoExpression);
-            if (javaInfo != null && javaInfo.isItOrParentOf(parent)) {
-              terminal[0] = true;
-            }
-          }
-        }
-      }
-    });
-  }
+			/**
+			 * Process renew properties values.
+			 *
+			 * @param the
+			 *          {@link JavaInfo}.
+			 */
+			private void reNewJavaInfoPropertyDefaults(JavaInfo javaInfo) throws Exception {
+				if (javaInfo.isObjectReady()) {
+					javaInfo.getDescription().visit(javaInfo, AbstractDescription.STATE_OBJECT_READY);
+				}
+				for (JavaInfo childJava : javaInfo.getChildrenJava()) {
+					reNewJavaInfoPropertyDefaults(childJava);
+				}
+			}
+		});
+		// <code>ResourceMap.injectComponents(Component)</code> invocation is terminal for children
+		root.addBroadcastListener(new JavaEventListener() {
+			@Override
+			public void target_isTerminalStatement(JavaInfo parent,
+					JavaInfo child,
+					Statement statement,
+					boolean[] terminal) {
+				if (statement instanceof ExpressionStatement) {
+					Expression expression = ((ExpressionStatement) statement).getExpression();
+					if (isInjectComponentsNode(expression)) {
+						Expression javaInfoExpression = DomGenerics.arguments(expression).get(0);
+						JavaInfo javaInfo = root.getChildRepresentedBy(javaInfoExpression);
+						if (javaInfo != null && javaInfo.isItOrParentOf(parent)) {
+							terminal[0] = true;
+						}
+					}
+				}
+			}
+		});
+	}
 
-  private boolean isInjectComponentsNode(ASTNode node) {
-    return AstNodeUtils.isMethodInvocation(
-        node,
-        "org.jdesktop.application.ResourceMap",
-        "injectComponents(java.awt.Component)");
-  }
+	private boolean isInjectComponentsNode(ASTNode node) {
+		return AstNodeUtils.isMethodInvocation(
+				node,
+				"org.jdesktop.application.ResourceMap",
+				"injectComponents(java.awt.Component)");
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/Activator.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/Activator.java
index ebcb8ea02..190b4852f 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/Activator.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/Activator.java
@@ -27,65 +27,65 @@
  * @coverage swing
  */
 public final class Activator extends AbstractUIPlugin {
-  public static final String PLUGIN_ID = "org.eclipse.wb.swing";
-  private static Activator m_plugin;
+	public static final String PLUGIN_ID = "org.eclipse.wb.swing";
+	private static Activator m_plugin;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Bundle operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void start(BundleContext context) throws Exception {
-    super.start(context);
-    m_plugin = this;
-    System.setProperty("javax.swing.adjustPopupLocationToFit", "false");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Bundle operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+		m_plugin = this;
+		System.setProperty("javax.swing.adjustPopupLocationToFit", "false");
+	}
 
-  @Override
-  public void stop(BundleContext context) throws Exception {
-    m_plugin = null;
-    super.stop(context);
-  }
+	@Override
+	public void stop(BundleContext context) throws Exception {
+		m_plugin = null;
+		super.stop(context);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the instance of {@link Activator}.
-   */
-  public static Activator getDefault() {
-    return m_plugin;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the instance of {@link Activator}.
+	 */
+	public static Activator getDefault() {
+		return m_plugin;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Resources
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final BundleResourceProvider m_resourceProvider =
-      BundleResourceProvider.get(PLUGIN_ID);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Resources
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final BundleResourceProvider m_resourceProvider =
+			BundleResourceProvider.get(PLUGIN_ID);
 
-  /**
-   * @return the {@link InputStream} for file from plugin directory.
-   */
-  public static InputStream getFile(String path) {
-    return m_resourceProvider.getFile(path);
-  }
+	/**
+	 * @return the {@link InputStream} for file from plugin directory.
+	 */
+	public static InputStream getFile(String path) {
+		return m_resourceProvider.getFile(path);
+	}
 
-  /**
-   * @return the {@link Image} from "icons" directory, with caching.
-   */
-  public static Image getImage(String path) {
-    return m_resourceProvider.getImage("icons/" + path);
-  }
+	/**
+	 * @return the {@link Image} from "icons" directory, with caching.
+	 */
+	public static Image getImage(String path) {
+		return m_resourceProvider.getImage("icons/" + path);
+	}
 
-  /**
-   * @return the {@link ImageDescriptor} from "icons" directory.
-   */
-  public static ImageDescriptor getImageDescriptor(String path) {
-    return m_resourceProvider.getImageDescriptor("icons/" + path);
-  }
+	/**
+	 * @return the {@link ImageDescriptor} from "icons" directory.
+	 */
+	public static ImageDescriptor getImageDescriptor(String path) {
+		return m_resourceProvider.getImageDescriptor("icons/" + path);
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/DescriptionProcessor.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/DescriptionProcessor.java
index 835b63865..381ae8959 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/DescriptionProcessor.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/DescriptionProcessor.java
@@ -30,73 +30,73 @@
  * @coverage swing
  */
 public final class DescriptionProcessor implements IDescriptionProcessor {
-  private ComponentDescription componentDescription;
-  private BeanInfo beanInfo;
+	private ComponentDescription componentDescription;
+	private BeanInfo beanInfo;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IDescriptionProcessor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void process(AstEditor editor, ComponentDescription componentDescription) throws Exception {
-    this.componentDescription = componentDescription;
-    beanInfo = componentDescription.getBeanInfo();
-    try {
-      if (beanInfo != null) {
-        configureIconFromBeanInfo();
-        configureContainerFlag();
-        configureMethods_add();
-      }
-    } finally {
-      this.componentDescription = null;
-      beanInfo = null;
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IDescriptionProcessor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void process(AstEditor editor, ComponentDescription componentDescription) throws Exception {
+		this.componentDescription = componentDescription;
+		beanInfo = componentDescription.getBeanInfo();
+		try {
+			if (beanInfo != null) {
+				configureIconFromBeanInfo();
+				configureContainerFlag();
+				configureMethods_add();
+			}
+		} finally {
+			this.componentDescription = null;
+			beanInfo = null;
+		}
+	}
 
-  private void configureIconFromBeanInfo() throws Exception {
-    java.awt.Image awtIcon = beanInfo.getIcon(BeanInfo.ICON_COLOR_16x16);
-    if (awtIcon != null) {
-      Image icon = ImageUtils.convertToSWT(awtIcon);
-      componentDescription.setIcon(icon);
-    }
-  }
+	private void configureIconFromBeanInfo() throws Exception {
+		java.awt.Image awtIcon = beanInfo.getIcon(BeanInfo.ICON_COLOR_16x16);
+		if (awtIcon != null) {
+			Image icon = ImageUtils.convertToSWT(awtIcon);
+			componentDescription.setIcon(icon);
+		}
+	}
 
-  /**
-   * Support for "isContainer" flag.
-   */
-  private void configureContainerFlag() {
-    Object value = beanInfo.getBeanDescriptor().getValue("isContainer");
-    if (value instanceof Boolean) {
-      if (!((Boolean) value).booleanValue()) {
-        componentDescription.addParameter("layout.has", "false");
-      }
-    }
-  }
+	/**
+	 * Support for "isContainer" flag.
+	 */
+	private void configureContainerFlag() {
+		Object value = beanInfo.getBeanDescriptor().getValue("isContainer");
+		if (value instanceof Boolean) {
+			if (!((Boolean) value).booleanValue()) {
+				componentDescription.addParameter("layout.has", "false");
+			}
+		}
+	}
 
-  /**
-   * We should execute all <code>add(Type)</code> methods, if <code>Type</code> is {@link Component}
-   * subclass.
-   */
-  private void configureMethods_add() throws Exception {
-    Class<?> componentClass = componentDescription.getComponentClass();
-    // only for java.awt.Container
-    if (!ReflectionUtils.isSuccessorOf(componentClass, "java.awt.Container")) {
-      return;
-    }
-    // check all "add(Type)" methods
-    for (Method method : componentClass.getMethods()) {
-      if (method.getName().equals("add")) {
-        Class<?>[] parameterTypes = method.getParameterTypes();
-        if (parameterTypes.length >= 1
-            && ReflectionUtils.isSuccessorOf(parameterTypes[0], "java.awt.Component")) {
-          String signature = ReflectionUtils.getMethodSignature(method);
-          if (componentDescription.getMethod(signature) == null) {
-            MethodDescription methodDescription = componentDescription.addMethod(method);
-            methodDescription.getParameter(0).setChild(true);
-            methodDescription.postProcess();
-          }
-        }
-      }
-    }
-  }
+	/**
+	 * We should execute all <code>add(Type)</code> methods, if <code>Type</code> is {@link Component}
+	 * subclass.
+	 */
+	private void configureMethods_add() throws Exception {
+		Class<?> componentClass = componentDescription.getComponentClass();
+		// only for java.awt.Container
+		if (!ReflectionUtils.isSuccessorOf(componentClass, "java.awt.Container")) {
+			return;
+		}
+		// check all "add(Type)" methods
+		for (Method method : componentClass.getMethods()) {
+			if (method.getName().equals("add")) {
+				Class<?>[] parameterTypes = method.getParameterTypes();
+				if (parameterTypes.length >= 1
+						&& ReflectionUtils.isSuccessorOf(parameterTypes[0], "java.awt.Component")) {
+					String signature = ReflectionUtils.getMethodSignature(method);
+					if (componentDescription.getMethod(signature) == null) {
+						MethodDescription methodDescription = componentDescription.addMethod(method);
+						methodDescription.getParameter(0).setChild(true);
+						methodDescription.postProcess();
+					}
+				}
+			}
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/IExceptionConstants.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/IExceptionConstants.java
index 910ab7e1b..4ef034520 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/IExceptionConstants.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/IExceptionConstants.java
@@ -19,6 +19,6 @@
  * @coverage swing
  */
 public interface IExceptionConstants {
-  int MORE_THAN_ONE_CONSTRAINTS = 1001;
-  int NO_DESIGN_ACTION = 1002;
+	int MORE_THAN_ONE_CONSTRAINTS = 1001;
+	int NO_DESIGN_ACTION = 1002;
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/SwingToolkitDescription.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/SwingToolkitDescription.java
index f8542ba0a..7f7958720 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/SwingToolkitDescription.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/SwingToolkitDescription.java
@@ -50,135 +50,135 @@
  * @coverage swing
  */
 public final class SwingToolkitDescription extends ToolkitDescriptionJava {
-  public static final ToolkitDescriptionJava INSTANCE = new SwingToolkitDescription();
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance fields
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final IPreferenceStore store = Activator.getDefault().getPreferenceStore();
-  private final GenerationSettings settings = new GenerationSettings(store);
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Initialization
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private boolean m_initialized;
-
-  void initialize() {
-    if (!m_initialized) {
-      m_initialized = true;
-      configureLAF();
-      configureGenerators();
-      configureCodeGeneration();
-      configureTypeSpecific();
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getId() {
-    return IPreferenceConstants.TOOLKIT_ID;
-  }
-
-  @Override
-  public String getName() {
-    return "Swing toolkit";
-  }
-
-  @Override
-  public String getProductName() {
-    return BrandingUtils.getBranding().getProductName();
-  }
-
-  @Override
-  public Bundle getBundle() {
-    return Activator.getDefault().getBundle();
-  }
-
-  @Override
-  public IPreferenceStore getPreferences() {
-    return store;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public GenerationSettings getGenerationSettings() {
-    return settings;
-  }
-
-  private void configureGenerators() {
-    StatementGeneratorDescription[] usualStatements =
-        new StatementGeneratorDescription[]{
-            FlatStatementGeneratorDescription.INSTANCE,
-            BlockStatementGeneratorDescription.INSTANCE};
-    // local unique
-    settings.addGenerators(
-        LocalUniqueVariableDescription.INSTANCE,
-        usualStatements,
-        new GenerationPreview[]{
-            GenerationPreviewLocalUniqueFlat.INSTANCE,
-            GenerationPreviewLocalUniqueBlock.INSTANCE});
-    // field unique
-    settings.addGenerators(
-        FieldUniqueVariableDescription.INSTANCE,
-        usualStatements,
-        new GenerationPreview[]{
-            GenerationPreviewFieldUniqueFlat.INSTANCE,
-            GenerationPreviewFieldUniqueBlock.INSTANCE});
-    // field with initializer
-    settings.addGenerators(
-        FieldInitializerVariableDescription.INSTANCE,
-        usualStatements,
-        new GenerationPreview[]{
-            GenerationPreviewFieldInitializerFlat.INSTANCE,
-            GenerationPreviewFieldInitializerBlock.INSTANCE});
-    // lazy
-    settings.addGenerators(
-        LazyVariableDescription.INSTANCE,
-        new StatementGeneratorDescription[]{LazyStatementGeneratorDescription.INSTANCE},
-        new GenerationPreview[]{GenerationPreviewLazy.INSTANCE});
-  }
-
-  private void configureCodeGeneration() {
-    settings.setDefaultDeduceSettings(true);
-    settings.setDefaultVariable(LocalUniqueVariableDescription.INSTANCE);
-    settings.setDefaultStatement(FlatStatementGeneratorDescription.INSTANCE);
-  }
-
-  private void configureTypeSpecific() {
-    List<ComponentNameDescription> descriptions = Lists.newArrayList();
-    descriptions.add(new ComponentNameDescription("javax.swing.JTextField",
-        "textField",
-        "txt",
-        true));
-    descriptions.add(new ComponentNameDescription("javax.swing.JPasswordField",
-        "passwordField",
-        "pwd",
-        true));
-    descriptions.add(new ComponentNameDescription("javax.swing.JTable", "table", "tbl", true));
-    NamesManager.setDefaultNameDescriptions(this, descriptions);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Look-n-Feel
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void configureLAF() {
-    // forcibly set 'Metal' LAF under Linux, see the description
-    // of LAFSupport.getSystemDefaultLAF() for details.
-    // this is hack though because someone may already initialize Gtk LAF.
-    if (EnvironmentUtils.IS_LINUX) {
-      System.setProperty("swing.systemlaf", "javax.swing.plaf.metal.MetalLookAndFeel");
-    }
-  }
+	public static final ToolkitDescriptionJava INSTANCE = new SwingToolkitDescription();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance fields
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final IPreferenceStore store = Activator.getDefault().getPreferenceStore();
+	private final GenerationSettings settings = new GenerationSettings(store);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Initialization
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private boolean m_initialized;
+
+	void initialize() {
+		if (!m_initialized) {
+			m_initialized = true;
+			configureLAF();
+			configureGenerators();
+			configureCodeGeneration();
+			configureTypeSpecific();
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getId() {
+		return IPreferenceConstants.TOOLKIT_ID;
+	}
+
+	@Override
+	public String getName() {
+		return "Swing toolkit";
+	}
+
+	@Override
+	public String getProductName() {
+		return BrandingUtils.getBranding().getProductName();
+	}
+
+	@Override
+	public Bundle getBundle() {
+		return Activator.getDefault().getBundle();
+	}
+
+	@Override
+	public IPreferenceStore getPreferences() {
+		return store;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public GenerationSettings getGenerationSettings() {
+		return settings;
+	}
+
+	private void configureGenerators() {
+		StatementGeneratorDescription[] usualStatements =
+				new StatementGeneratorDescription[]{
+						FlatStatementGeneratorDescription.INSTANCE,
+						BlockStatementGeneratorDescription.INSTANCE};
+		// local unique
+		settings.addGenerators(
+				LocalUniqueVariableDescription.INSTANCE,
+				usualStatements,
+				new GenerationPreview[]{
+						GenerationPreviewLocalUniqueFlat.INSTANCE,
+						GenerationPreviewLocalUniqueBlock.INSTANCE});
+		// field unique
+		settings.addGenerators(
+				FieldUniqueVariableDescription.INSTANCE,
+				usualStatements,
+				new GenerationPreview[]{
+						GenerationPreviewFieldUniqueFlat.INSTANCE,
+						GenerationPreviewFieldUniqueBlock.INSTANCE});
+		// field with initializer
+		settings.addGenerators(
+				FieldInitializerVariableDescription.INSTANCE,
+				usualStatements,
+				new GenerationPreview[]{
+						GenerationPreviewFieldInitializerFlat.INSTANCE,
+						GenerationPreviewFieldInitializerBlock.INSTANCE});
+		// lazy
+		settings.addGenerators(
+				LazyVariableDescription.INSTANCE,
+				new StatementGeneratorDescription[]{LazyStatementGeneratorDescription.INSTANCE},
+				new GenerationPreview[]{GenerationPreviewLazy.INSTANCE});
+	}
+
+	private void configureCodeGeneration() {
+		settings.setDefaultDeduceSettings(true);
+		settings.setDefaultVariable(LocalUniqueVariableDescription.INSTANCE);
+		settings.setDefaultStatement(FlatStatementGeneratorDescription.INSTANCE);
+	}
+
+	private void configureTypeSpecific() {
+		List<ComponentNameDescription> descriptions = Lists.newArrayList();
+		descriptions.add(new ComponentNameDescription("javax.swing.JTextField",
+				"textField",
+				"txt",
+				true));
+		descriptions.add(new ComponentNameDescription("javax.swing.JPasswordField",
+				"passwordField",
+				"pwd",
+				true));
+		descriptions.add(new ComponentNameDescription("javax.swing.JTable", "table", "tbl", true));
+		NamesManager.setDefaultNameDescriptions(this, descriptions);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Look-n-Feel
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void configureLAF() {
+		// forcibly set 'Metal' LAF under Linux, see the description
+		// of LAFSupport.getSystemDefaultLAF() for details.
+		// this is hack though because someone may already initialize Gtk LAF.
+		if (EnvironmentUtils.IS_LINUX) {
+			System.setProperty("swing.systemlaf", "javax.swing.plaf.metal.MetalLookAndFeel");
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/ToolkitProvider.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/ToolkitProvider.java
index ee7d4d337..922f1857e 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/ToolkitProvider.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/ToolkitProvider.java
@@ -21,17 +21,17 @@
  * @coverage swing
  */
 public final class ToolkitProvider implements IToolkitProvider {
-  public static final ToolkitDescriptionJava DESCRIPTION = SwingToolkitDescription.INSTANCE;
-  static {
-    ((SwingToolkitDescription) DESCRIPTION).initialize();
-  }
+	public static final ToolkitDescriptionJava DESCRIPTION = SwingToolkitDescription.INSTANCE;
+	static {
+		((SwingToolkitDescription) DESCRIPTION).initialize();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IToolkitProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ToolkitDescription getDescription() {
-    return DESCRIPTION;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IToolkitProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ToolkitDescription getDescription() {
+		return DESCRIPTION;
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/customize/AwtComponentDialog.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/customize/AwtComponentDialog.java
index 38c187d30..447911cc3 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/customize/AwtComponentDialog.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/customize/AwtComponentDialog.java
@@ -41,108 +41,108 @@
  * @coverage swing.customize
  */
 public final class AwtComponentDialog extends ResizableDialog {
-  private final Component m_component;
-  private final String m_title;
-  private final String m_settingsName;
-  private Frame m_frame;
+	private final Component m_component;
+	private final String m_title;
+	private final String m_settingsName;
+	private Frame m_frame;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AwtComponentDialog(AbstractUIPlugin plugin,
-      Component component,
-      String title,
-      String settingsName) {
-    super(DesignerPlugin.getShell(), plugin);
-    m_component = component;
-    m_title = title;
-    m_settingsName = settingsName;
-    setShellStyle(SWT.RESIZE | SWT.CLOSE | SWT.APPLICATION_MODAL);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AwtComponentDialog(AbstractUIPlugin plugin,
+			Component component,
+			String title,
+			String settingsName) {
+		super(DesignerPlugin.getShell(), plugin);
+		m_component = component;
+		m_title = title;
+		m_settingsName = settingsName;
+		setShellStyle(SWT.RESIZE | SWT.CLOSE | SWT.APPLICATION_MODAL);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void configureShell(Shell newShell) {
-    super.configureShell(newShell);
-    newShell.setText(m_title);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void configureShell(Shell newShell) {
+		super.configureShell(newShell);
+		newShell.setText(m_title);
+	}
 
-  @Override
-  protected Control createDialogArea(Composite parent) {
-    Composite container = (Composite) super.createDialogArea(parent);
-    container.setLayout(new FillLayout());
-    //
-    Composite composite = new Composite(container, SWT.EMBEDDED) {
-      @Override
-      public Point computeSize(int wHint, int hHint, boolean changed) {
-        Dimension preferredSize = m_component.getPreferredSize();
-        return new Point(preferredSize.width, preferredSize.height);
-      }
-    };
-    // SWT_AWT.new_Frame()
-    m_frame = SWT_AWT.new_Frame(composite);
-    // java.awt.Panel
-    Panel panel = new Panel(new BorderLayout());
-    m_frame.add(panel);
-    // javax.swing.JRootPane
-    JRootPane rootPane = new JRootPane();
-    panel.add(rootPane);
-    // add main Component
-    rootPane.getContentPane().add(m_component);
-    m_frame.doLayout();
-    // done
-    return container;
-  }
+	@Override
+	protected Control createDialogArea(Composite parent) {
+		Composite container = (Composite) super.createDialogArea(parent);
+		container.setLayout(new FillLayout());
+		//
+		Composite composite = new Composite(container, SWT.EMBEDDED) {
+			@Override
+			public Point computeSize(int wHint, int hHint, boolean changed) {
+				Dimension preferredSize = m_component.getPreferredSize();
+				return new Point(preferredSize.width, preferredSize.height);
+			}
+		};
+		// SWT_AWT.new_Frame()
+		m_frame = SWT_AWT.new_Frame(composite);
+		// java.awt.Panel
+		Panel panel = new Panel(new BorderLayout());
+		m_frame.add(panel);
+		// javax.swing.JRootPane
+		JRootPane rootPane = new JRootPane();
+		panel.add(rootPane);
+		// add main Component
+		rootPane.getContentPane().add(m_component);
+		m_frame.doLayout();
+		// done
+		return container;
+	}
 
-  @Override
-  protected String getDialogSettingsSectionName() {
-    return m_settingsName;
-  }
+	@Override
+	protected String getDialogSettingsSectionName() {
+		return m_settingsName;
+	}
 
-  @Override
-  protected Point getDefaultSize() {
-    //return new Point(450, 300);
-    // User asked to use Customizer.getPreferredSize()
-    // http://www.eclipse.org/forums/index.php/t/339421/
-    return super.getDefaultSize();
-  }
+	@Override
+	protected Point getDefaultSize() {
+		//return new Point(450, 300);
+		// User asked to use Customizer.getPreferredSize()
+		// http://www.eclipse.org/forums/index.php/t/339421/
+		return super.getDefaultSize();
+	}
 
-  @Override
-  public boolean close() {
-    dispose(m_frame);
-    return super.close();
-  }
+	@Override
+	public boolean close() {
+		dispose(m_frame);
+		return super.close();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Swing utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Disposes {@link Frame} safely, I hope that it will not lock.
-   */
-  private static void dispose(final Frame frame) {
-    // schedule dispose
-    EventQueue.invokeLater(new Runnable() {
-      public void run() {
-        frame.dispose();
-      }
-    });
-    // run SWT event loop to wait for scheduled AWT operation
-    ExecutionUtils.runIgnore(new RunnableEx() {
-      public void run() throws Exception {
-        for (int i = 0; i < 1000; i++) {
-          while (Display.getCurrent().readAndDispatch()) {
-          }
-          Thread.sleep(0);
-        }
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Swing utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Disposes {@link Frame} safely, I hope that it will not lock.
+	 */
+	private static void dispose(final Frame frame) {
+		// schedule dispose
+		EventQueue.invokeLater(new Runnable() {
+			public void run() {
+				frame.dispose();
+			}
+		});
+		// run SWT event loop to wait for scheduled AWT operation
+		ExecutionUtils.runIgnore(new RunnableEx() {
+			public void run() throws Exception {
+				for (int i = 0; i < 1000; i++) {
+					while (Display.getCurrent().readAndDispatch()) {
+					}
+					Thread.sleep(0);
+				}
+			}
+		});
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/customize/CustomizerAction.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/customize/CustomizerAction.java
index 7473143bc..9582f4bd5 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/customize/CustomizerAction.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/customize/CustomizerAction.java
@@ -38,141 +38,141 @@
  * @coverage swing.customize
  */
 class CustomizerAction extends Action {
-  private final JavaInfo m_javaInfo;
-  private final Class<Customizer> m_customizerClass;
+	private final JavaInfo m_javaInfo;
+	private final Class<Customizer> m_customizerClass;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CustomizerAction(JavaInfo javaInfo, Class<Customizer> customizerClass) {
-    m_javaInfo = javaInfo;
-    m_customizerClass = customizerClass;
-    setImageDescriptor(Activator.getImageDescriptor("actions/customize.gif"));
-    setText(ModelMessages.CustomizerAction_title);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CustomizerAction(JavaInfo javaInfo, Class<Customizer> customizerClass) {
+		m_javaInfo = javaInfo;
+		m_customizerClass = customizerClass;
+		setImageDescriptor(Activator.getImageDescriptor("actions/customize.gif"));
+		setText(ModelMessages.CustomizerAction_title);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IAction
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void run() {
-    performCustomize();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IAction
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void run() {
+		performCustomize();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Implementation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void performCustomize() {
-    ExecutionUtils.runLog(new RunnableEx() {
-      public void run() throws Exception {
-        ExecutionUtils.runDesignTime(new RunnableEx() {
-          public void run() throws Exception {
-            performCustomize0();
-          }
-        });
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Implementation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void performCustomize() {
+		ExecutionUtils.runLog(new RunnableEx() {
+			public void run() throws Exception {
+				ExecutionUtils.runDesignTime(new RunnableEx() {
+					public void run() throws Exception {
+						performCustomize0();
+					}
+				});
+			}
+		});
+	}
 
-  private void performCustomize0() throws Exception {
-    Customizer customizer = m_customizerClass.newInstance();
-    // prepare properties information
-    final JavaInfoState javaInfoState = JavaInfoState.getState(m_javaInfo);
-    boolean explicit = isExplicitPropertyChange(m_javaInfo);
-    PropertyChangeListener propertyChangeListener = null;
-    if (explicit) {
-      propertyChangeListener = new PropertyChangeListener() {
-        public void propertyChange(PropertyChangeEvent event) {
-          javaInfoState.changedProperties.add(event.getPropertyName());
-          javaInfoState.changedPropertyValues.put(event.getPropertyName(), event.getNewValue());
-        }
-      };
-      customizer.addPropertyChangeListener(propertyChangeListener);
-    }
-    //
-    try {
-      // open customizer dialog
-      customizer.setObject(javaInfoState.object);
-      AwtComponentDialog dialog =
-          new AwtComponentDialog(DesignerPlugin.getDefault(),
-              (Component) customizer,
-              ModelMessages.CustomizerAction_dialogTitle,
-              MessageFormat.format(
-                  ModelMessages.CustomizerAction_dialogMessage,
-                  m_customizerClass.getName()));
-      int dialogResult = dialog.open();
-      // handle update properties
-      if (dialogResult == Window.OK) {
-        RunnableEx runnable = null;
-        if (explicit) {
-          // update changed properties
-          runnable = new RunnableEx() {
-            public void run() throws Exception {
-              int size = javaInfoState.properties.size();
-              for (int i = 0; i < size; i++) {
-                Property property = javaInfoState.properties.get(i);
-                if (javaInfoState.changedProperties.contains(property.getTitle())) {
-                  Object newValue = javaInfoState.changedPropertyValues.get(property.getTitle());
-                  Object oldValue = javaInfoState.oldValues.get(i);
-                  if (!ObjectUtils.equals(newValue, oldValue)) {
-                    property.setValue(newValue);
-                  }
-                }
-              }
-            }
-          };
-        } else {
-          // update all properties
-          runnable = new RunnableEx() {
-            public void run() throws Exception {
-              int size = javaInfoState.properties.size();
-              for (int i = 0; i < size; i++) {
-                Object newValue = javaInfoState.getters.get(i).invoke(javaInfoState.object);
-                Object oldValue = javaInfoState.oldValues.get(i);
-                if (!ObjectUtils.equals(newValue, oldValue)) {
-                  javaInfoState.properties.get(i).setValue(newValue);
-                }
-              }
-            }
-          };
-        }
-        // run update
-        ExecutionUtils.run(m_javaInfo, runnable);
-      }
-      // rollback property changes
-      if (dialogResult == Window.CANCEL) {
-        ExecutionUtils.run(m_javaInfo, new RunnableEx() {
-          public void run() throws Exception {
-            int size = javaInfoState.properties.size();
-            for (int i = 0; i < size; i++) {
-              Object newValue = javaInfoState.getters.get(i).invoke(javaInfoState.object);
-              Object oldValue = javaInfoState.oldValues.get(i);
-              if (!ObjectUtils.equals(newValue, oldValue)) {
-                javaInfoState.setters.get(i).invoke(javaInfoState.object, oldValue);
-              }
-            }
-          }
-        });
-      }
-    } finally {
-      if (propertyChangeListener != null) {
-        customizer.removePropertyChangeListener(propertyChangeListener);
-      }
-    }
-  }
+	private void performCustomize0() throws Exception {
+		Customizer customizer = m_customizerClass.newInstance();
+		// prepare properties information
+		final JavaInfoState javaInfoState = JavaInfoState.getState(m_javaInfo);
+		boolean explicit = isExplicitPropertyChange(m_javaInfo);
+		PropertyChangeListener propertyChangeListener = null;
+		if (explicit) {
+			propertyChangeListener = new PropertyChangeListener() {
+				public void propertyChange(PropertyChangeEvent event) {
+					javaInfoState.changedProperties.add(event.getPropertyName());
+					javaInfoState.changedPropertyValues.put(event.getPropertyName(), event.getNewValue());
+				}
+			};
+			customizer.addPropertyChangeListener(propertyChangeListener);
+		}
+		//
+		try {
+			// open customizer dialog
+			customizer.setObject(javaInfoState.object);
+			AwtComponentDialog dialog =
+					new AwtComponentDialog(DesignerPlugin.getDefault(),
+							(Component) customizer,
+							ModelMessages.CustomizerAction_dialogTitle,
+							MessageFormat.format(
+									ModelMessages.CustomizerAction_dialogMessage,
+									m_customizerClass.getName()));
+			int dialogResult = dialog.open();
+			// handle update properties
+			if (dialogResult == Window.OK) {
+				RunnableEx runnable = null;
+				if (explicit) {
+					// update changed properties
+					runnable = new RunnableEx() {
+						public void run() throws Exception {
+							int size = javaInfoState.properties.size();
+							for (int i = 0; i < size; i++) {
+								Property property = javaInfoState.properties.get(i);
+								if (javaInfoState.changedProperties.contains(property.getTitle())) {
+									Object newValue = javaInfoState.changedPropertyValues.get(property.getTitle());
+									Object oldValue = javaInfoState.oldValues.get(i);
+									if (!ObjectUtils.equals(newValue, oldValue)) {
+										property.setValue(newValue);
+									}
+								}
+							}
+						}
+					};
+				} else {
+					// update all properties
+					runnable = new RunnableEx() {
+						public void run() throws Exception {
+							int size = javaInfoState.properties.size();
+							for (int i = 0; i < size; i++) {
+								Object newValue = javaInfoState.getters.get(i).invoke(javaInfoState.object);
+								Object oldValue = javaInfoState.oldValues.get(i);
+								if (!ObjectUtils.equals(newValue, oldValue)) {
+									javaInfoState.properties.get(i).setValue(newValue);
+								}
+							}
+						}
+					};
+				}
+				// run update
+				ExecutionUtils.run(m_javaInfo, runnable);
+			}
+			// rollback property changes
+			if (dialogResult == Window.CANCEL) {
+				ExecutionUtils.run(m_javaInfo, new RunnableEx() {
+					public void run() throws Exception {
+						int size = javaInfoState.properties.size();
+						for (int i = 0; i < size; i++) {
+							Object newValue = javaInfoState.getters.get(i).invoke(javaInfoState.object);
+							Object oldValue = javaInfoState.oldValues.get(i);
+							if (!ObjectUtils.equals(newValue, oldValue)) {
+								javaInfoState.setters.get(i).invoke(javaInfoState.object, oldValue);
+							}
+						}
+					}
+				});
+			}
+		} finally {
+			if (propertyChangeListener != null) {
+				customizer.removePropertyChangeListener(propertyChangeListener);
+			}
+		}
+	}
 
-  /**
-   * @return <code>true</code> if {@link BeanInfo} for given info object contains flag
-   *         "EXPLICIT_PROPERTY_CHANGE".
-   */
-  private static boolean isExplicitPropertyChange(JavaInfo javaInfo) throws Exception {
-    BeanDescriptor beanDescriptor = javaInfo.getDescription().getBeanDescriptor();
-    return Boolean.TRUE.equals(beanDescriptor.getValue("EXPLICIT_PROPERTY_CHANGE"));
-  }
+	/**
+	 * @return <code>true</code> if {@link BeanInfo} for given info object contains flag
+	 *         "EXPLICIT_PROPERTY_CHANGE".
+	 */
+	private static boolean isExplicitPropertyChange(JavaInfo javaInfo) throws Exception {
+		BeanDescriptor beanDescriptor = javaInfo.getDescription().getBeanDescriptor();
+		return Boolean.TRUE.equals(beanDescriptor.getValue("EXPLICIT_PROPERTY_CHANGE"));
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/customize/CustomizerSupport.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/customize/CustomizerSupport.java
index e09ff6401..bb8c657b1 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/customize/CustomizerSupport.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/customize/CustomizerSupport.java
@@ -31,59 +31,59 @@
  * @coverage swing.customize
  */
 public final class CustomizerSupport implements IJavaInfoInitializationParticipator {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IJavaInfoInitializationParticipator
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void process(final JavaInfo javaInfo) throws Exception {
-    final Class<Customizer> customizerClass = getCustomizerClass(javaInfo);
-    if (customizerClass != null) {
-      javaInfo.addBroadcastListener(new ObjectEventListener() {
-        @Override
-        public void addContextMenu(List<? extends ObjectInfo> objects,
-            ObjectInfo object,
-            IMenuManager manager) throws Exception {
-          if (javaInfo == object && objects.size() == 1) {
-            contribute(javaInfo, manager, customizerClass);
-          }
-        }
-      });
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IJavaInfoInitializationParticipator
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void process(final JavaInfo javaInfo) throws Exception {
+		final Class<Customizer> customizerClass = getCustomizerClass(javaInfo);
+		if (customizerClass != null) {
+			javaInfo.addBroadcastListener(new ObjectEventListener() {
+				@Override
+				public void addContextMenu(List<? extends ObjectInfo> objects,
+						ObjectInfo object,
+						IMenuManager manager) throws Exception {
+					if (javaInfo == object && objects.size() == 1) {
+						contribute(javaInfo, manager, customizerClass);
+					}
+				}
+			});
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Bean utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link Customizer} class, explicit for bean, of inherited from super class.
-   */
-  @SuppressWarnings("unchecked")
-  private static Class<Customizer> getCustomizerClass(JavaInfo javaInfo) throws Exception {
-    BeanDescriptor beanDescriptor = javaInfo.getDescription().getBeanDescriptor();
-    if (beanDescriptor != null) {
-      Class<?> customizerClass = beanDescriptor.getCustomizerClass();
-      if (customizerClass != null && Customizer.class.isAssignableFrom(customizerClass)) {
-        return (Class<Customizer>) customizerClass;
-      }
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Bean utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link Customizer} class, explicit for bean, of inherited from super class.
+	 */
+	@SuppressWarnings("unchecked")
+	private static Class<Customizer> getCustomizerClass(JavaInfo javaInfo) throws Exception {
+		BeanDescriptor beanDescriptor = javaInfo.getDescription().getBeanDescriptor();
+		if (beanDescriptor != null) {
+			Class<?> customizerClass = beanDescriptor.getCustomizerClass();
+			if (customizerClass != null && Customizer.class.isAssignableFrom(customizerClass)) {
+				return (Class<Customizer>) customizerClass;
+			}
+		}
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Contribution
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Contribute "Customize" action.
-   */
-  private static void contribute(JavaInfo javaInfo,
-      IContributionManager manager,
-      Class<Customizer> customizerClass) {
-    CustomizerAction action = new CustomizerAction(javaInfo, customizerClass);
-    manager.appendToGroup(IContextMenuConstants.GROUP_ADDITIONAL, action);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Contribution
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Contribute "Customize" action.
+	 */
+	private static void contribute(JavaInfo javaInfo,
+			IContributionManager manager,
+			Class<Customizer> customizerClass) {
+		CustomizerAction action = new CustomizerAction(javaInfo, customizerClass);
+		manager.appendToGroup(IContextMenuConstants.GROUP_ADDITIONAL, action);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/customize/JavaInfoState.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/customize/JavaInfoState.java
index c76666e65..a9fe994e1 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/customize/JavaInfoState.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/customize/JavaInfoState.java
@@ -32,66 +32,66 @@
  * @coverage swing.customize
  */
 public final class JavaInfoState {
-  public final Object object;
-  public final List<Property> properties = new ArrayList<Property>();
-  public final List<Object> oldValues = new ArrayList<Object>();
-  public final List<Method> getters = new ArrayList<Method>();
-  public final List<Method> setters = new ArrayList<Method>();
-  public final Set<String> changedProperties = new TreeSet<String>();
-  public final Map<String, Object> changedPropertyValues = new TreeMap<String, Object>();
+	public final Object object;
+	public final List<Property> properties = new ArrayList<Property>();
+	public final List<Object> oldValues = new ArrayList<Object>();
+	public final List<Method> getters = new ArrayList<Method>();
+	public final List<Method> setters = new ArrayList<Method>();
+	public final Set<String> changedProperties = new TreeSet<String>();
+	public final Map<String, Object> changedPropertyValues = new TreeMap<String, Object>();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private JavaInfoState(JavaInfo javaInfo) {
-    object = javaInfo.getObject();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private JavaInfoState(JavaInfo javaInfo) {
+		object = javaInfo.getObject();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Prepare information about properties: property, currentValue, "get" method.
-   */
-  public static JavaInfoState getState(JavaInfo javaInfo) throws Exception {
-    JavaInfoState info = new JavaInfoState(javaInfo);
-    Map<String, Property> allProperties = preparePropertiesByTitle(javaInfo);
-    for (GenericPropertyDescription description : javaInfo.getDescription().getProperties()) {
-      // find property "get" and "set" methods
-      Method getter = null;
-      Method setter = null;
-      for (ExpressionAccessor accessor : description.getAccessorsList()) {
-        if (accessor instanceof SetterAccessor) {
-          SetterAccessor setAccessor = (SetterAccessor) accessor;
-          getter = setAccessor.getGetter();
-          setter = setAccessor.getSetter();
-          break;
-        }
-      }
-      // add property information
-      if (getter != null) {
-        Property property = allProperties.get(description.getTitle());
-        info.properties.add(property);
-        info.getters.add(getter);
-        info.setters.add(setter);
-        info.oldValues.add(getter.invoke(info.object));
-      }
-    }
-    return info;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Prepare information about properties: property, currentValue, "get" method.
+	 */
+	public static JavaInfoState getState(JavaInfo javaInfo) throws Exception {
+		JavaInfoState info = new JavaInfoState(javaInfo);
+		Map<String, Property> allProperties = preparePropertiesByTitle(javaInfo);
+		for (GenericPropertyDescription description : javaInfo.getDescription().getProperties()) {
+			// find property "get" and "set" methods
+			Method getter = null;
+			Method setter = null;
+			for (ExpressionAccessor accessor : description.getAccessorsList()) {
+				if (accessor instanceof SetterAccessor) {
+					SetterAccessor setAccessor = (SetterAccessor) accessor;
+					getter = setAccessor.getGetter();
+					setter = setAccessor.getSetter();
+					break;
+				}
+			}
+			// add property information
+			if (getter != null) {
+				Property property = allProperties.get(description.getTitle());
+				info.properties.add(property);
+				info.getters.add(getter);
+				info.setters.add(setter);
+				info.oldValues.add(getter.invoke(info.object));
+			}
+		}
+		return info;
+	}
 
-  /**
-   * Prepare table of pair's [title, property].
-   */
-  private static Map<String, Property> preparePropertiesByTitle(JavaInfo javaInfo) throws Exception {
-    Map<String, Property> properties = new HashMap<String, Property>();
-    for (Property property : javaInfo.getProperties()) {
-      properties.put(property.getTitle(), property);
-    }
-    return properties;
-  }
+	/**
+	 * Prepare table of pair's [title, property].
+	 */
+	private static Map<String, Property> preparePropertiesByTitle(JavaInfo javaInfo) throws Exception {
+		Map<String, Property> properties = new HashMap<String, Property>();
+		for (Property property : javaInfo.getProperties()) {
+			properties.put(property.getTitle(), property);
+		}
+		return properties;
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/ComponentsLayoutRequestValidator.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/ComponentsLayoutRequestValidator.java
index 83605585c..848a626f2 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/ComponentsLayoutRequestValidator.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/ComponentsLayoutRequestValidator.java
@@ -22,10 +22,10 @@
  * @coverage swing.gef
  */
 public final class ComponentsLayoutRequestValidator {
-  public static final ILayoutRequestValidator INSTANCE =
-      LayoutRequestValidators.modelType(ComponentInfo.class);
-  public static final ILayoutRequestValidator INSTANCE_EXT =
-      LayoutRequestValidators.finalize(LayoutRequestValidators.and(
-          MenuLayoutRequestValidator.INSTANCE,
-          new ModelClassLayoutRequestValidator(ComponentInfo.class)));
+	public static final ILayoutRequestValidator INSTANCE =
+			LayoutRequestValidators.modelType(ComponentInfo.class);
+	public static final ILayoutRequestValidator INSTANCE_EXT =
+			LayoutRequestValidators.finalize(LayoutRequestValidators.and(
+					MenuLayoutRequestValidator.INSTANCE,
+					new ModelClassLayoutRequestValidator(ComponentInfo.class)));
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/EditPartFactory.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/EditPartFactory.java
index 26aed7bbf..fa12b0a24 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/EditPartFactory.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/EditPartFactory.java
@@ -54,134 +54,134 @@
  * @coverage swing.gef
  */
 public final class EditPartFactory implements IEditPartFactory {
-  private final IEditPartFactory[] FACTORIES = {
-      MENU_FACTORY,
-      BOX_FACTORY,
-      SPECIAL_FACTORY,
-      MATCHING_FACTORY,
-      GENERIC_FACTORY};
+	private final IEditPartFactory[] FACTORIES = {
+			MENU_FACTORY,
+			BOX_FACTORY,
+			SPECIAL_FACTORY,
+			MATCHING_FACTORY,
+			GENERIC_FACTORY};
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IEditPartFactory
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public EditPart createEditPart(EditPart context, Object model) {
-    for (IEditPartFactory factory : FACTORIES) {
-      EditPart editPart = factory.createEditPart(null, model);
-      if (editPart != null) {
-        return editPart;
-      }
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IEditPartFactory
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public EditPart createEditPart(EditPart context, Object model) {
+		for (IEditPartFactory factory : FACTORIES) {
+			EditPart editPart = factory.createEditPart(null, model);
+			if (editPart != null) {
+				return editPart;
+			}
+		}
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Factories
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final IEditPartFactory MENU_FACTORY = new IEditPartFactory() {
-    public EditPart createEditPart(EditPart context, Object model) {
-      if (model instanceof JMenuBarInfo) {
-        JMenuBarInfo menu = (JMenuBarInfo) model;
-        IMenuInfo menuObject = MenuObjectInfoUtils.getMenuInfo(menu);
-        return MenuEditPartFactory.createMenu(model, menuObject);
-      }
-      if (model instanceof JPopupMenuInfo) {
-        JPopupMenuInfo popup = (JPopupMenuInfo) model;
-        IMenuPopupInfo popupObject = MenuObjectInfoUtils.getMenuPopupInfo(popup);
-        return MenuEditPartFactory.createPopupMenu(popup, popupObject);
-      }
-      if (model instanceof IMenuInfo) {
-        IMenuInfo menu = (IMenuInfo) model;
-        return MenuEditPartFactory.createMenu(model, menu);
-      }
-      if (model instanceof JMenuInfo) {
-        JMenuInfo menu = (JMenuInfo) model;
-        IMenuItemInfo itemObject = MenuObjectInfoUtils.getMenuItemInfo(menu);
-        return MenuEditPartFactory.createMenuItem(menu, itemObject);
-      }
-      if (model instanceof JMenuItemInfo) {
-        JMenuItemInfo item = (JMenuItemInfo) model;
-        IMenuItemInfo itemObject = MenuObjectInfoUtils.getMenuItemInfo(item);
-        return MenuEditPartFactory.createMenuItem(item, itemObject);
-      }
-      return null;
-    }
-  };
-  private static final IEditPartFactory SPECIAL_FACTORY = new IEditPartFactory() {
-    public EditPart createEditPart(EditPart context, Object model) {
-      if (model instanceof JSplitPaneInfo) {
-        return new JSplitPaneEditPart((JSplitPaneInfo) model);
-      }
-      if (model instanceof JScrollPaneInfo) {
-        return new JScrollPaneEditPart((JScrollPaneInfo) model);
-      }
-      if (model instanceof JTabbedPaneInfo) {
-        return new JTabbedPaneEditPart((JTabbedPaneInfo) model);
-      }
-      if (model instanceof JTabbedPaneTabInfo) {
-        return new JTabbedPaneTabEditPart((JTabbedPaneTabInfo) model);
-      }
-      return null;
-    }
-  };
-  private static final IEditPartFactory BOX_FACTORY = new IEditPartFactory() {
-    public EditPart createEditPart(EditPart context, Object model) {
-      if (model instanceof ComponentInfo) {
-        ComponentInfo component = (ComponentInfo) model;
-        if (component.getCreationSupport() instanceof StaticFactoryCreationSupport) {
-          StaticFactoryCreationSupport factoryCreationSupport =
-              (StaticFactoryCreationSupport) component.getCreationSupport();
-          FactoryMethodDescription factoryMethodDescription =
-              factoryCreationSupport.getDescription();
-          if (factoryMethodDescription.getDeclaringClass() == Box.class) {
-            String signature = factoryMethodDescription.getSignature();
-            return createEditPart(component, signature);
-          }
-        }
-      }
-      return null;
-    }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Factories
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final IEditPartFactory MENU_FACTORY = new IEditPartFactory() {
+		public EditPart createEditPart(EditPart context, Object model) {
+			if (model instanceof JMenuBarInfo) {
+				JMenuBarInfo menu = (JMenuBarInfo) model;
+				IMenuInfo menuObject = MenuObjectInfoUtils.getMenuInfo(menu);
+				return MenuEditPartFactory.createMenu(model, menuObject);
+			}
+			if (model instanceof JPopupMenuInfo) {
+				JPopupMenuInfo popup = (JPopupMenuInfo) model;
+				IMenuPopupInfo popupObject = MenuObjectInfoUtils.getMenuPopupInfo(popup);
+				return MenuEditPartFactory.createPopupMenu(popup, popupObject);
+			}
+			if (model instanceof IMenuInfo) {
+				IMenuInfo menu = (IMenuInfo) model;
+				return MenuEditPartFactory.createMenu(model, menu);
+			}
+			if (model instanceof JMenuInfo) {
+				JMenuInfo menu = (JMenuInfo) model;
+				IMenuItemInfo itemObject = MenuObjectInfoUtils.getMenuItemInfo(menu);
+				return MenuEditPartFactory.createMenuItem(menu, itemObject);
+			}
+			if (model instanceof JMenuItemInfo) {
+				JMenuItemInfo item = (JMenuItemInfo) model;
+				IMenuItemInfo itemObject = MenuObjectInfoUtils.getMenuItemInfo(item);
+				return MenuEditPartFactory.createMenuItem(item, itemObject);
+			}
+			return null;
+		}
+	};
+	private static final IEditPartFactory SPECIAL_FACTORY = new IEditPartFactory() {
+		public EditPart createEditPart(EditPart context, Object model) {
+			if (model instanceof JSplitPaneInfo) {
+				return new JSplitPaneEditPart((JSplitPaneInfo) model);
+			}
+			if (model instanceof JScrollPaneInfo) {
+				return new JScrollPaneEditPart((JScrollPaneInfo) model);
+			}
+			if (model instanceof JTabbedPaneInfo) {
+				return new JTabbedPaneEditPart((JTabbedPaneInfo) model);
+			}
+			if (model instanceof JTabbedPaneTabInfo) {
+				return new JTabbedPaneTabEditPart((JTabbedPaneTabInfo) model);
+			}
+			return null;
+		}
+	};
+	private static final IEditPartFactory BOX_FACTORY = new IEditPartFactory() {
+		public EditPart createEditPart(EditPart context, Object model) {
+			if (model instanceof ComponentInfo) {
+				ComponentInfo component = (ComponentInfo) model;
+				if (component.getCreationSupport() instanceof StaticFactoryCreationSupport) {
+					StaticFactoryCreationSupport factoryCreationSupport =
+							(StaticFactoryCreationSupport) component.getCreationSupport();
+					FactoryMethodDescription factoryMethodDescription =
+							factoryCreationSupport.getDescription();
+					if (factoryMethodDescription.getDeclaringClass() == Box.class) {
+						String signature = factoryMethodDescription.getSignature();
+						return createEditPart(component, signature);
+					}
+				}
+			}
+			return null;
+		}
 
-    private EditPart createEditPart(ComponentInfo component, String signature) {
-      // glue
-      if (signature.equals("createGlue()")) {
-        return new BoxGlueEditPart(component);
-      }
-      if (signature.equals("createHorizontalGlue()")) {
-        return new BoxGlueHorizontalEditPart(component);
-      }
-      if (signature.equals("createVerticalGlue()")) {
-        return new BoxGlueVerticalEditPart(component);
-      }
-      // strut
-      if (signature.equals("createRigidArea(java.awt.Dimension)")) {
-        return new BoxRigidAreaEditPart(component);
-      }
-      if (signature.equals("createHorizontalStrut(int)")) {
-        return new BoxStrutHorizontalEditPart(component);
-      }
-      if (signature.equals("createVerticalStrut(int)")) {
-        return new BoxStrutVerticalEditPart(component);
-      }
-      // unknown
-      return null;
-    }
-  };
-  private final static IEditPartFactory MATCHING_FACTORY =
-      new MatchingEditPartFactory(ImmutableList.of("org.eclipse.wb.internal.swing.model.component"),
-          ImmutableList.of("org.eclipse.wb.internal.swing.gef.part"));
-  private static final IEditPartFactory GENERIC_FACTORY = new IEditPartFactory() {
-    public EditPart createEditPart(EditPart context, Object model) {
-      if (model instanceof ContainerInfo) {
-        return new ContainerEditPart((ContainerInfo) model);
-      }
-      if (model instanceof ComponentInfo) {
-        return new ComponentEditPart((ComponentInfo) model);
-      }
-      return null;
-    }
-  };
+		private EditPart createEditPart(ComponentInfo component, String signature) {
+			// glue
+			if (signature.equals("createGlue()")) {
+				return new BoxGlueEditPart(component);
+			}
+			if (signature.equals("createHorizontalGlue()")) {
+				return new BoxGlueHorizontalEditPart(component);
+			}
+			if (signature.equals("createVerticalGlue()")) {
+				return new BoxGlueVerticalEditPart(component);
+			}
+			// strut
+			if (signature.equals("createRigidArea(java.awt.Dimension)")) {
+				return new BoxRigidAreaEditPart(component);
+			}
+			if (signature.equals("createHorizontalStrut(int)")) {
+				return new BoxStrutHorizontalEditPart(component);
+			}
+			if (signature.equals("createVerticalStrut(int)")) {
+				return new BoxStrutVerticalEditPart(component);
+			}
+			// unknown
+			return null;
+		}
+	};
+	private final static IEditPartFactory MATCHING_FACTORY =
+			new MatchingEditPartFactory(ImmutableList.of("org.eclipse.wb.internal.swing.model.component"),
+					ImmutableList.of("org.eclipse.wb.internal.swing.gef.part"));
+	private static final IEditPartFactory GENERIC_FACTORY = new IEditPartFactory() {
+		public EditPart createEditPart(EditPart context, Object model) {
+			if (model instanceof ContainerInfo) {
+				return new ContainerEditPart((ContainerInfo) model);
+			}
+			if (model instanceof ComponentInfo) {
+				return new ComponentEditPart((ComponentInfo) model);
+			}
+			return null;
+		}
+	};
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/GefMessages.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/GefMessages.java
index 7e2dbc69f..58a9296f9 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/GefMessages.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/GefMessages.java
@@ -3,49 +3,49 @@
 import org.eclipse.osgi.util.NLS;
 
 public class GefMessages extends NLS {
-  private static final String BUNDLE_NAME = "org.eclipse.wb.internal.swing.gef.GefMessages"; //$NON-NLS-1$
-  public static String ColumnHeaderEditPart_appendColumn;
-  public static String ColumnHeaderEditPart_deleteColumn;
-  public static String ColumnHeaderEditPart_deleteContents;
-  public static String ColumnHeaderEditPart_grow;
-  public static String ColumnHeaderEditPart_haCenter;
-  public static String ColumnHeaderEditPart_haFill;
-  public static String ColumnHeaderEditPart_haLeft;
-  public static String ColumnHeaderEditPart_haRight;
-  public static String ColumnHeaderEditPart_insertColumn;
-  public static String ColumnHeaderEditPart_properties;
-  public static String ColumnHeaderEditPart_splitColumn;
-  public static String ColumnSelectionEditPolicy_feedbackPattern;
-  public static String ColumnsLayoutEditPolicy_feedbackPattern;
-  public static String GridBagLayoutEditPolicy_appendColumn;
-  public static String GridBagLayoutEditPolicy_appendRow;
-  public static String JScrollPaneLayoutEditPolicy_columnHeader;
-  public static String JScrollPaneLayoutEditPolicy_rowHeader;
-  public static String JScrollPaneLayoutEditPolicy_viewport;
-  public static String JSplitPaneLayoutEditPolicy_leftTop;
-  public static String JSplitPaneLayoutEditPolicy_rightBottom;
-  public static String MenuBarDropLayoutEditPolicy_feedbackText;
-  public static String RowHeaderEditPart_appendRow;
-  public static String RowHeaderEditPart_deleteContents;
-  public static String RowHeaderEditPart_deleteRow;
-  public static String RowHeaderEditPart_grow;
-  public static String RowHeaderEditPart_insertRow;
-  public static String RowHeaderEditPart_properties;
-  public static String RowHeaderEditPart_splitRow;
-  public static String RowHeaderEditPart_vaAboveBaseline;
-  public static String RowHeaderEditPart_vaBaseline;
-  public static String RowHeaderEditPart_vaBelowBaseline;
-  public static String RowHeaderEditPart_vaBottom;
-  public static String RowHeaderEditPart_vaCenter;
-  public static String RowHeaderEditPart_vaFill;
-  public static String RowHeaderEditPart_vaTop;
-  public static String RowSelectionEditPolicy_feedbackPattern;
-  public static String RowsLayoutEditPolicy_feedbackPattern;
-  static {
-    // initialize resource bundle
-    NLS.initializeMessages(BUNDLE_NAME, GefMessages.class);
-  }
+	private static final String BUNDLE_NAME = "org.eclipse.wb.internal.swing.gef.GefMessages"; //$NON-NLS-1$
+	public static String ColumnHeaderEditPart_appendColumn;
+	public static String ColumnHeaderEditPart_deleteColumn;
+	public static String ColumnHeaderEditPart_deleteContents;
+	public static String ColumnHeaderEditPart_grow;
+	public static String ColumnHeaderEditPart_haCenter;
+	public static String ColumnHeaderEditPart_haFill;
+	public static String ColumnHeaderEditPart_haLeft;
+	public static String ColumnHeaderEditPart_haRight;
+	public static String ColumnHeaderEditPart_insertColumn;
+	public static String ColumnHeaderEditPart_properties;
+	public static String ColumnHeaderEditPart_splitColumn;
+	public static String ColumnSelectionEditPolicy_feedbackPattern;
+	public static String ColumnsLayoutEditPolicy_feedbackPattern;
+	public static String GridBagLayoutEditPolicy_appendColumn;
+	public static String GridBagLayoutEditPolicy_appendRow;
+	public static String JScrollPaneLayoutEditPolicy_columnHeader;
+	public static String JScrollPaneLayoutEditPolicy_rowHeader;
+	public static String JScrollPaneLayoutEditPolicy_viewport;
+	public static String JSplitPaneLayoutEditPolicy_leftTop;
+	public static String JSplitPaneLayoutEditPolicy_rightBottom;
+	public static String MenuBarDropLayoutEditPolicy_feedbackText;
+	public static String RowHeaderEditPart_appendRow;
+	public static String RowHeaderEditPart_deleteContents;
+	public static String RowHeaderEditPart_deleteRow;
+	public static String RowHeaderEditPart_grow;
+	public static String RowHeaderEditPart_insertRow;
+	public static String RowHeaderEditPart_properties;
+	public static String RowHeaderEditPart_splitRow;
+	public static String RowHeaderEditPart_vaAboveBaseline;
+	public static String RowHeaderEditPart_vaBaseline;
+	public static String RowHeaderEditPart_vaBelowBaseline;
+	public static String RowHeaderEditPart_vaBottom;
+	public static String RowHeaderEditPart_vaCenter;
+	public static String RowHeaderEditPart_vaFill;
+	public static String RowHeaderEditPart_vaTop;
+	public static String RowSelectionEditPolicy_feedbackPattern;
+	public static String RowsLayoutEditPolicy_feedbackPattern;
+	static {
+		// initialize resource bundle
+		NLS.initializeMessages(BUNDLE_NAME, GefMessages.class);
+	}
 
-  private GefMessages() {
-  }
+	private GefMessages() {
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/MenuLayoutRequestValidator.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/MenuLayoutRequestValidator.java
index 9740caeff..a24860290 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/MenuLayoutRequestValidator.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/MenuLayoutRequestValidator.java
@@ -23,22 +23,22 @@
  * @coverage swing.gef
  */
 public final class MenuLayoutRequestValidator extends AbstractModelClassLayoutRequestValidator {
-  public static final ILayoutRequestValidator INSTANCE = new MenuLayoutRequestValidator();
+	public static final ILayoutRequestValidator INSTANCE = new MenuLayoutRequestValidator();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected boolean isValidClass(Class<?> clazz) {
-    // JMenu-related things usually should not be added on "normal" layouts
-    if (JMenuBarInfo.class.isAssignableFrom(clazz)
-        || JPopupMenuInfo.class.isAssignableFrom(clazz)
-        || JMenuItemInfo.class.isAssignableFrom(clazz)) {
-      return false;
-    }
-    // OK, check by type
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected boolean isValidClass(Class<?> clazz) {
+		// JMenu-related things usually should not be added on "normal" layouts
+		if (JMenuBarInfo.class.isAssignableFrom(clazz)
+				|| JPopupMenuInfo.class.isAssignableFrom(clazz)
+				|| JMenuItemInfo.class.isAssignableFrom(clazz)) {
+			return false;
+		}
+		// OK, check by type
+		return true;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/part/ComponentEditPart.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/part/ComponentEditPart.java
index 7f57afd54..6ef239ff1 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/part/ComponentEditPart.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/part/ComponentEditPart.java
@@ -23,25 +23,25 @@
  * @coverage swing.gef.part
  */
 public class ComponentEditPart extends AbstractComponentEditPart {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ComponentEditPart(ComponentInfo component) {
-    super(component);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ComponentEditPart(ComponentInfo component) {
+		super(component);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Edit Policies
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public EditPart getTargetEditPart(Request request) {
-    if (TabOrderContainerEditPolicy.TAB_ORDER_REQUEST == request) {
-      return this;
-    }
-    return super.getTargetEditPart(request);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Edit Policies
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public EditPart getTargetEditPart(Request request) {
+		if (TabOrderContainerEditPolicy.TAB_ORDER_REQUEST == request) {
+			return this;
+		}
+		return super.getTargetEditPart(request);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/part/ContainerEditPart.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/part/ContainerEditPart.java
index bfb1036db..8d5867367 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/part/ContainerEditPart.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/part/ContainerEditPart.java
@@ -35,90 +35,90 @@
  * @coverage swing.gef.part
  */
 public final class ContainerEditPart extends ComponentEditPart {
-  private final ContainerInfo m_container;
+	private final ContainerInfo m_container;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ContainerEditPart(ContainerInfo container) {
-    super(container);
-    m_container = container;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ContainerEditPart(ContainerInfo container) {
+		super(container);
+		m_container = container;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Figure
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void drawCustomBorder(Figure figure, Graphics graphics) {
-    try {
-      if (m_container.shouldDrawDotsBorder()) {
-        graphics.setForegroundColor(IColorConstants.gray);
-        graphics.setLineStyle(SWT.LINE_DOT);
-        Rectangle area = figure.getClientArea();
-        graphics.drawRectangle(0, 0, area.width - 1, area.height - 1);
-      }
-    } catch (Throwable e) {
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Figure
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void drawCustomBorder(Figure figure, Graphics graphics) {
+		try {
+			if (m_container.shouldDrawDotsBorder()) {
+				graphics.setForegroundColor(IColorConstants.gray);
+				graphics.setLineStyle(SWT.LINE_DOT);
+				Rectangle area = figure.getClientArea();
+				graphics.drawRectangle(0, 0, area.width - 1, area.height - 1);
+			}
+		} catch (Throwable e) {
+		}
+	}
 
-  @Override
-  protected void addChildVisual(EditPart childPart, int index) {
-    super.addChildVisual(childPart, getFigure().getChildren().size() - index);
-  }
+	@Override
+	protected void addChildVisual(EditPart childPart, int index) {
+		super.addChildVisual(childPart, getFigure().getChildren().size() - index);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Policies
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private LayoutInfo m_currentLayout;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Policies
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private LayoutInfo m_currentLayout;
 
-  @Override
-  protected void createEditPolicies() {
-    super.createEditPolicies();
-    // support for dropping LayoutInfo's
-    if (m_container.canSetLayout()) {
-      installEditPolicy(new DropLayoutEditPolicy(m_container));
-    }
-    // support tab ordering for children
-    installEditPolicy(
-        TabOrderContainerEditPolicy.TAB_CONTAINER_ROLE,
-        new TabOrderContainerEditPolicy());
-  }
+	@Override
+	protected void createEditPolicies() {
+		super.createEditPolicies();
+		// support for dropping LayoutInfo's
+		if (m_container.canSetLayout()) {
+			installEditPolicy(new DropLayoutEditPolicy(m_container));
+		}
+		// support tab ordering for children
+		installEditPolicy(
+				TabOrderContainerEditPolicy.TAB_CONTAINER_ROLE,
+				new TabOrderContainerEditPolicy());
+	}
 
-  @Override
-  protected void refreshEditPolicies() {
-    super.refreshEditPolicies();
-    // support for dropping components
-    if (m_container.hasLayout()) {
-      LayoutInfo layout = m_container.getLayout();
-      if (m_currentLayout != layout) {
-        m_currentLayout = layout;
+	@Override
+	protected void refreshEditPolicies() {
+		super.refreshEditPolicies();
+		// support for dropping components
+		if (m_container.hasLayout()) {
+			LayoutInfo layout = m_container.getLayout();
+			if (m_currentLayout != layout) {
+				m_currentLayout = layout;
 
-		if (layout.getDescription().getComponentClass() != null) {
-			if (!InstanceScope.INSTANCE.getNode(IEditorPreferenceConstants.P_AVAILABLE_LAYOUTS_NODE)
-					.getBoolean(layout.getDescription().getComponentClass().getName(), true)) {
-				try {
-					m_currentLayout = m_container.getDefaultContainerInfo();
-					m_container.setLayout(m_currentLayout);
-				} catch (Exception e) {
-					e.printStackTrace();
+				if (layout.getDescription().getComponentClass() != null) {
+					if (!InstanceScope.INSTANCE.getNode(IEditorPreferenceConstants.P_AVAILABLE_LAYOUTS_NODE)
+							.getBoolean(layout.getDescription().getComponentClass().getName(), true)) {
+						try {
+							m_currentLayout = m_container.getDefaultContainerInfo();
+							m_container.setLayout(m_currentLayout);
+						} catch (Exception e) {
+							e.printStackTrace();
+						}
+					}
 				}
-			}
-		}
-		LayoutEditPolicy policy = LayoutPolicyUtils.createLayoutEditPolicy(this, layout);
-		installEditPolicy(EditPolicy.LAYOUT_ROLE, policy);
+				LayoutEditPolicy policy = LayoutPolicyUtils.createLayoutEditPolicy(this, layout);
+				installEditPolicy(EditPolicy.LAYOUT_ROLE, policy);
 
-	} else {
-		EditPolicy policy = getEditPolicy(EditPolicy.LAYOUT_ROLE);
-		if (policy instanceof IRefreshableEditPolicy) {
-			((IRefreshableEditPolicy) policy).refreshEditPolicy();
+			} else {
+				EditPolicy policy = getEditPolicy(EditPolicy.LAYOUT_ROLE);
+				if (policy instanceof IRefreshableEditPolicy) {
+					((IRefreshableEditPolicy) policy).refreshEditPolicy();
+				}
+			}
 		}
-      }
-    }
-  }
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/part/JScrollPaneEditPart.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/part/JScrollPaneEditPart.java
index c873a6f1b..291dc79a9 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/part/JScrollPaneEditPart.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/part/JScrollPaneEditPart.java
@@ -22,26 +22,26 @@
  * @coverage swing.gef.part
  */
 public final class JScrollPaneEditPart extends ComponentEditPart {
-  private final JScrollPaneInfo m_component;
+	private final JScrollPaneInfo m_component;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public JScrollPaneEditPart(JScrollPaneInfo component) {
-    super(component);
-    m_component = component;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public JScrollPaneEditPart(JScrollPaneInfo component) {
+		super(component);
+		m_component = component;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Policies
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createEditPolicies() {
-    super.createEditPolicies();
-    installEditPolicy(EditPolicy.LAYOUT_ROLE, new JScrollPaneLayoutEditPolicy(m_component));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Policies
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createEditPolicies() {
+		super.createEditPolicies();
+		installEditPolicy(EditPolicy.LAYOUT_ROLE, new JScrollPaneLayoutEditPolicy(m_component));
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/part/JSplitPaneEditPart.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/part/JSplitPaneEditPart.java
index 17938d3da..da722814e 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/part/JSplitPaneEditPart.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/part/JSplitPaneEditPart.java
@@ -22,26 +22,26 @@
  * @coverage swing.gef.part
  */
 public final class JSplitPaneEditPart extends ComponentEditPart {
-  private final JSplitPaneInfo m_component;
+	private final JSplitPaneInfo m_component;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public JSplitPaneEditPart(JSplitPaneInfo component) {
-    super(component);
-    m_component = component;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public JSplitPaneEditPart(JSplitPaneInfo component) {
+		super(component);
+		m_component = component;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Policies
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createEditPolicies() {
-    super.createEditPolicies();
-    installEditPolicy(EditPolicy.LAYOUT_ROLE, new JSplitPaneLayoutEditPolicy(m_component));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Policies
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createEditPolicies() {
+		super.createEditPolicies();
+		installEditPolicy(EditPolicy.LAYOUT_ROLE, new JSplitPaneLayoutEditPolicy(m_component));
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/part/JTabbedPaneEditPart.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/part/JTabbedPaneEditPart.java
index b54e9135a..4813c4251 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/part/JTabbedPaneEditPart.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/part/JTabbedPaneEditPart.java
@@ -27,40 +27,40 @@
  * @coverage swing.gef.part
  */
 public final class JTabbedPaneEditPart extends ComponentEditPart {
-  private final JTabbedPaneInfo m_component;
+	private final JTabbedPaneInfo m_component;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public JTabbedPaneEditPart(JTabbedPaneInfo component) {
-    super(component);
-    m_component = component;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public JTabbedPaneEditPart(JTabbedPaneInfo component) {
+		super(component);
+		m_component = component;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Policies
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createEditPolicies() {
-    super.createEditPolicies();
-    installEditPolicy(new JTabbedPaneTabLayoutEditPolicy(m_component));
-    installEditPolicy(EditPolicy.LAYOUT_ROLE, new JTabbedPaneLayoutEditPolicy(m_component));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Policies
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createEditPolicies() {
+		super.createEditPolicies();
+		installEditPolicy(new JTabbedPaneTabLayoutEditPolicy(m_component));
+		installEditPolicy(EditPolicy.LAYOUT_ROLE, new JTabbedPaneLayoutEditPolicy(m_component));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Children
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected List<Object> getModelChildren() {
-    List<Object> children = Lists.newArrayList();
-    children.addAll(super.getModelChildren());
-    children.addAll(m_component.getTabs());
-    return children;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Children
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected List<Object> getModelChildren() {
+		List<Object> children = Lists.newArrayList();
+		children.addAll(super.getModelChildren());
+		children.addAll(m_component.getTabs());
+		return children;
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/part/JTabbedPaneTabEditPart.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/part/JTabbedPaneTabEditPart.java
index 73d78f462..10fcfc771 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/part/JTabbedPaneTabEditPart.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/part/JTabbedPaneTabEditPart.java
@@ -28,58 +28,58 @@
  * @coverage swing.gef.part
  */
 public final class JTabbedPaneTabEditPart extends GraphicalEditPart {
-  private JTabbedPaneTabInfo m_component;
+	private JTabbedPaneTabInfo m_component;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public JTabbedPaneTabEditPart(JTabbedPaneTabInfo component) {
-    m_component = component;
-    setModel(m_component);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public JTabbedPaneTabEditPart(JTabbedPaneTabInfo component) {
+		m_component = component;
+		setModel(m_component);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Model
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void updateModel() {
-    m_component = (JTabbedPaneTabInfo) getModel();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Model
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void updateModel() {
+		m_component = (JTabbedPaneTabInfo) getModel();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Figure
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Figure createFigure() {
-    return new Figure();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Figure
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Figure createFigure() {
+		return new Figure();
+	}
 
-  @Override
-  protected void refreshVisuals() {
-    Rectangle bounds = m_component.getBounds();
-    getFigure().setBounds(bounds);
-  }
+	@Override
+	protected void refreshVisuals() {
+		Rectangle bounds = m_component.getBounds();
+		getFigure().setBounds(bounds);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Requests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createEditPolicies() {
-    installEditPolicy(EditPolicy.SELECTION_ROLE, new NonResizableSelectionEditPolicy());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Requests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createEditPolicies() {
+		installEditPolicy(EditPolicy.SELECTION_ROLE, new NonResizableSelectionEditPolicy());
+	}
 
-  @Override
-  public void performRequest(Request request) {
-    if (request.getType() == Request.REQ_OPEN) {
-      m_component.getPane().setActiveComponent(m_component.getComponent());
-    }
-  }
+	@Override
+	public void performRequest(Request request) {
+		if (request.getType() == Request.REQ_OPEN) {
+			m_component.getPane().setActiveComponent(m_component.getComponent());
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/part/box/BoxEditPart.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/part/box/BoxEditPart.java
index fe0d9e72b..952e8bd1b 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/part/box/BoxEditPart.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/part/box/BoxEditPart.java
@@ -26,35 +26,35 @@
  * @coverage swing.gef.part
  */
 abstract class BoxEditPart extends ComponentEditPart {
-  protected static final Color COLOR_BORDER = new Color(null, 45, 90, 150);
-  protected static final Color COLOR_SPRING = new Color(null, 40, 110, 200);
-  protected static final int SPRING_SIZE = 12;
-  protected final ComponentInfo m_component;
+	protected static final Color COLOR_BORDER = new Color(null, 45, 90, 150);
+	protected static final Color COLOR_SPRING = new Color(null, 40, 110, 200);
+	protected static final int SPRING_SIZE = 12;
+	protected final ComponentInfo m_component;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public BoxEditPart(ComponentInfo component) {
-    super(component);
-    m_component = component;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public BoxEditPart(ComponentInfo component) {
+		super(component);
+		m_component = component;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Figure
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void refreshVisuals() {
-    Rectangle bounds = m_component.getBounds();
-    if (bounds.width != 0 && bounds.height == 0) {
-      bounds.height = 12;
-    }
-    if (bounds.height != 0 && bounds.width == 0) {
-      bounds.width = 12;
-    }
-    getFigure().setBounds(bounds);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Figure
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void refreshVisuals() {
+		Rectangle bounds = m_component.getBounds();
+		if (bounds.width != 0 && bounds.height == 0) {
+			bounds.height = 12;
+		}
+		if (bounds.height != 0 && bounds.width == 0) {
+			bounds.width = 12;
+		}
+		getFigure().setBounds(bounds);
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/part/box/BoxGlueEditPart.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/part/box/BoxGlueEditPart.java
index b1c03bd9d..b78c0839d 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/part/box/BoxGlueEditPart.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/part/box/BoxGlueEditPart.java
@@ -28,42 +28,42 @@
  * @coverage swing.gef.part
  */
 public final class BoxGlueEditPart extends BoxEditPart {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public BoxGlueEditPart(ComponentInfo component) {
-    super(component);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public BoxGlueEditPart(ComponentInfo component) {
+		super(component);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Policy
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createEditPolicies() {
-    super.createEditPolicies();
-    installEditPolicy(EditPolicy.SELECTION_ROLE, new GlueSelectionEditPolicy());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Policy
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createEditPolicies() {
+		super.createEditPolicies();
+		installEditPolicy(EditPolicy.SELECTION_ROLE, new GlueSelectionEditPolicy());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Figure
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Figure createFigure() {
-    return new Figure() {
-      @Override
-      protected void paintClientArea(Graphics graphics) {
-        Rectangle r = getClientArea();
-        int x = (r.width - SPRING_SIZE) / 2;
-        int y = (r.height - SPRING_SIZE) / 2;
-        BoxGlueHorizontalEditPart.draw(graphics, new Rectangle(0, y, r.width, SPRING_SIZE));
-        BoxGlueVerticalEditPart.draw(graphics, new Rectangle(x, 0, SPRING_SIZE, r.height));
-      }
-    };
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Figure
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Figure createFigure() {
+		return new Figure() {
+			@Override
+			protected void paintClientArea(Graphics graphics) {
+				Rectangle r = getClientArea();
+				int x = (r.width - SPRING_SIZE) / 2;
+				int y = (r.height - SPRING_SIZE) / 2;
+				BoxGlueHorizontalEditPart.draw(graphics, new Rectangle(0, y, r.width, SPRING_SIZE));
+				BoxGlueVerticalEditPart.draw(graphics, new Rectangle(x, 0, SPRING_SIZE, r.height));
+			}
+		};
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/part/box/BoxGlueHorizontalEditPart.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/part/box/BoxGlueHorizontalEditPart.java
index e32477aed..757186013 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/part/box/BoxGlueHorizontalEditPart.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/part/box/BoxGlueHorizontalEditPart.java
@@ -28,70 +28,70 @@
  * @coverage swing.gef.part
  */
 public final class BoxGlueHorizontalEditPart extends BoxEditPart {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public BoxGlueHorizontalEditPart(ComponentInfo component) {
-    super(component);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public BoxGlueHorizontalEditPart(ComponentInfo component) {
+		super(component);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Policy
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createEditPolicies() {
-    super.createEditPolicies();
-    installEditPolicy(EditPolicy.SELECTION_ROLE, new GlueSelectionEditPolicy());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Policy
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createEditPolicies() {
+		super.createEditPolicies();
+		installEditPolicy(EditPolicy.SELECTION_ROLE, new GlueSelectionEditPolicy());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Figure
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Figure createFigure() {
-    return new Figure() {
-      @Override
-      protected void paintClientArea(Graphics graphics) {
-        Rectangle r = getClientArea();
-        draw(graphics, r);
-      }
-    };
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Figure
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Figure createFigure() {
+		return new Figure() {
+			@Override
+			protected void paintClientArea(Graphics graphics) {
+				Rectangle r = getClientArea();
+				draw(graphics, r);
+			}
+		};
+	}
 
-  /**
-   * Draws horizontal spring in given {@link Rectangle}.
-   */
-  static void draw(Graphics graphics, Rectangle r) {
-    graphics.pushState();
-    try {
-      graphics.translate(r.getLocation());
-      // draw spring
-      {
-        graphics.setForegroundColor(COLOR_SPRING);
-        int x = 0;
-        while (x < r.width) {
-          graphics.drawLine(x, 3, x + 2, 3 + 5);
-          x += 2;
-          graphics.drawLine(x, 3 + 5, x + 2, 3);
-          x += 2;
-        }
-      }
-      // draw borders
-      {
-        graphics.setForegroundColor(COLOR_BORDER);
-        graphics.drawLine(0, 0, 0, r.height);
-        graphics.drawLine(1, 0, 1, r.height);
-        graphics.drawLine(r.width - 1, 0, r.width - 1, r.height);
-        graphics.drawLine(r.width - 2, 0, r.width - 2, r.height);
-      }
-    } finally {
-      graphics.popState();
-    }
-  }
+	/**
+	 * Draws horizontal spring in given {@link Rectangle}.
+	 */
+	static void draw(Graphics graphics, Rectangle r) {
+		graphics.pushState();
+		try {
+			graphics.translate(r.getLocation());
+			// draw spring
+			{
+				graphics.setForegroundColor(COLOR_SPRING);
+				int x = 0;
+				while (x < r.width) {
+					graphics.drawLine(x, 3, x + 2, 3 + 5);
+					x += 2;
+					graphics.drawLine(x, 3 + 5, x + 2, 3);
+					x += 2;
+				}
+			}
+			// draw borders
+			{
+				graphics.setForegroundColor(COLOR_BORDER);
+				graphics.drawLine(0, 0, 0, r.height);
+				graphics.drawLine(1, 0, 1, r.height);
+				graphics.drawLine(r.width - 1, 0, r.width - 1, r.height);
+				graphics.drawLine(r.width - 2, 0, r.width - 2, r.height);
+			}
+		} finally {
+			graphics.popState();
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/part/box/BoxGlueVerticalEditPart.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/part/box/BoxGlueVerticalEditPart.java
index 11712d864..6a9000a96 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/part/box/BoxGlueVerticalEditPart.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/part/box/BoxGlueVerticalEditPart.java
@@ -28,70 +28,70 @@
  * @coverage swing.gef.part
  */
 public final class BoxGlueVerticalEditPart extends BoxEditPart {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public BoxGlueVerticalEditPart(ComponentInfo component) {
-    super(component);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public BoxGlueVerticalEditPart(ComponentInfo component) {
+		super(component);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Policy
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createEditPolicies() {
-    super.createEditPolicies();
-    installEditPolicy(EditPolicy.SELECTION_ROLE, new GlueSelectionEditPolicy());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Policy
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createEditPolicies() {
+		super.createEditPolicies();
+		installEditPolicy(EditPolicy.SELECTION_ROLE, new GlueSelectionEditPolicy());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Figure
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Figure createFigure() {
-    return new Figure() {
-      @Override
-      protected void paintClientArea(Graphics graphics) {
-        Rectangle r = getClientArea();
-        draw(graphics, r);
-      }
-    };
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Figure
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Figure createFigure() {
+		return new Figure() {
+			@Override
+			protected void paintClientArea(Graphics graphics) {
+				Rectangle r = getClientArea();
+				draw(graphics, r);
+			}
+		};
+	}
 
-  /**
-   * Draws vertical spring in given {@link Rectangle}.
-   */
-  static void draw(Graphics graphics, Rectangle r) {
-    graphics.pushState();
-    try {
-      graphics.translate(r.getLocation());
-      // draw spring
-      {
-        graphics.setForegroundColor(COLOR_SPRING);
-        int y = r.y;
-        while (y < r.bottom()) {
-          graphics.drawLine(3, y, 3 + 5, y + 2);
-          y += 2;
-          graphics.drawLine(3 + 5, y, 3, y + 2);
-          y += 2;
-        }
-      }
-      // draw borders
-      {
-        graphics.setForegroundColor(COLOR_BORDER);
-        graphics.drawLine(0, 0, r.width, 0);
-        graphics.drawLine(0, 1, r.width, 1);
-        graphics.drawLine(0, r.height - 1, r.width, r.height - 1);
-        graphics.drawLine(0, r.height - 2, r.width, r.height - 2);
-      }
-    } finally {
-      graphics.popState();
-    }
-  }
+	/**
+	 * Draws vertical spring in given {@link Rectangle}.
+	 */
+	static void draw(Graphics graphics, Rectangle r) {
+		graphics.pushState();
+		try {
+			graphics.translate(r.getLocation());
+			// draw spring
+			{
+				graphics.setForegroundColor(COLOR_SPRING);
+				int y = r.y;
+				while (y < r.bottom()) {
+					graphics.drawLine(3, y, 3 + 5, y + 2);
+					y += 2;
+					graphics.drawLine(3 + 5, y, 3, y + 2);
+					y += 2;
+				}
+			}
+			// draw borders
+			{
+				graphics.setForegroundColor(COLOR_BORDER);
+				graphics.drawLine(0, 0, r.width, 0);
+				graphics.drawLine(0, 1, r.width, 1);
+				graphics.drawLine(0, r.height - 1, r.width, r.height - 1);
+				graphics.drawLine(0, r.height - 2, r.width, r.height - 2);
+			}
+		} finally {
+			graphics.popState();
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/part/box/BoxRigidAreaEditPart.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/part/box/BoxRigidAreaEditPart.java
index 60d0ac4d6..944d4ed58 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/part/box/BoxRigidAreaEditPart.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/part/box/BoxRigidAreaEditPart.java
@@ -29,41 +29,41 @@
  * @coverage swing.gef.part
  */
 public final class BoxRigidAreaEditPart extends BoxEditPart {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public BoxRigidAreaEditPart(ComponentInfo component) {
-    super(component);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public BoxRigidAreaEditPart(ComponentInfo component) {
+		super(component);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Policy
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createEditPolicies() {
-    super.createEditPolicies();
-    installEditPolicy(EditPolicy.SELECTION_ROLE, new StrutSelectionRigidEditPolicy(m_component));
-    installEditPolicy(new StrutDirectRigidEditPolicy(m_component));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Policy
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createEditPolicies() {
+		super.createEditPolicies();
+		installEditPolicy(EditPolicy.SELECTION_ROLE, new StrutSelectionRigidEditPolicy(m_component));
+		installEditPolicy(new StrutDirectRigidEditPolicy(m_component));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Figure
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Figure createFigure() {
-    return new Figure() {
-      @Override
-      protected void paintClientArea(Graphics graphics) {
-        Rectangle r = getClientArea();
-        BoxStrutHorizontalEditPart.draw(graphics, r);
-        BoxStrutVerticalEditPart.draw(graphics, r);
-      }
-    };
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Figure
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Figure createFigure() {
+		return new Figure() {
+			@Override
+			protected void paintClientArea(Graphics graphics) {
+				Rectangle r = getClientArea();
+				BoxStrutHorizontalEditPart.draw(graphics, r);
+				BoxStrutVerticalEditPart.draw(graphics, r);
+			}
+		};
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/part/box/BoxStrutHorizontalEditPart.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/part/box/BoxStrutHorizontalEditPart.java
index d24824c10..e8c146d3e 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/part/box/BoxStrutHorizontalEditPart.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/part/box/BoxStrutHorizontalEditPart.java
@@ -29,65 +29,65 @@
  * @coverage swing.gef.part
  */
 public final class BoxStrutHorizontalEditPart extends BoxEditPart {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public BoxStrutHorizontalEditPart(ComponentInfo component) {
-    super(component);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public BoxStrutHorizontalEditPart(ComponentInfo component) {
+		super(component);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Policy
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createEditPolicies() {
-    super.createEditPolicies();
-    installEditPolicy(
-        EditPolicy.SELECTION_ROLE,
-        new StrutSelectionHorizontalEditPolicy(m_component));
-    installEditPolicy(new StrutDirectHorizontalEditPolicy(m_component));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Policy
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createEditPolicies() {
+		super.createEditPolicies();
+		installEditPolicy(
+				EditPolicy.SELECTION_ROLE,
+				new StrutSelectionHorizontalEditPolicy(m_component));
+		installEditPolicy(new StrutDirectHorizontalEditPolicy(m_component));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Figure
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Figure createFigure() {
-    return new Figure() {
-      @Override
-      protected void paintClientArea(Graphics graphics) {
-        Rectangle r = getClientArea();
-        draw(graphics, r);
-      }
-    };
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Figure
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Figure createFigure() {
+		return new Figure() {
+			@Override
+			protected void paintClientArea(Graphics graphics) {
+				Rectangle r = getClientArea();
+				draw(graphics, r);
+			}
+		};
+	}
 
-  /**
-   * Draws horizontal strut in given {@link Rectangle}.
-   */
-  static void draw(Graphics graphics, Rectangle r) {
-    int y = r.getCenter().y;
-    // draw strut
-    {
-      graphics.setForegroundColor(COLOR_SPRING);
-      graphics.drawLine(r.left(), y - 1, r.right(), y - 1);
-      graphics.drawLine(r.left(), y + 1, r.right(), y + 1);
-    }
-    // draw borders
-    {
-      graphics.setForegroundColor(COLOR_BORDER);
-      int y1 = y - SPRING_SIZE / 2;
-      int y2 = y + SPRING_SIZE / 2;
-      graphics.drawLine(r.left() + 0, y1, r.left() + 0, y2);
-      graphics.drawLine(r.left() + 1, y1, r.left() + 1, y2);
-      graphics.drawLine(r.right() - 1, y1, r.right() - 1, y2);
-      graphics.drawLine(r.right() - 2, y1, r.right() - 2, y2);
-    }
-  }
+	/**
+	 * Draws horizontal strut in given {@link Rectangle}.
+	 */
+	static void draw(Graphics graphics, Rectangle r) {
+		int y = r.getCenter().y;
+		// draw strut
+		{
+			graphics.setForegroundColor(COLOR_SPRING);
+			graphics.drawLine(r.left(), y - 1, r.right(), y - 1);
+			graphics.drawLine(r.left(), y + 1, r.right(), y + 1);
+		}
+		// draw borders
+		{
+			graphics.setForegroundColor(COLOR_BORDER);
+			int y1 = y - SPRING_SIZE / 2;
+			int y2 = y + SPRING_SIZE / 2;
+			graphics.drawLine(r.left() + 0, y1, r.left() + 0, y2);
+			graphics.drawLine(r.left() + 1, y1, r.left() + 1, y2);
+			graphics.drawLine(r.right() - 1, y1, r.right() - 1, y2);
+			graphics.drawLine(r.right() - 2, y1, r.right() - 2, y2);
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/part/box/BoxStrutVerticalEditPart.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/part/box/BoxStrutVerticalEditPart.java
index eee671889..6a7c96e83 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/part/box/BoxStrutVerticalEditPart.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/part/box/BoxStrutVerticalEditPart.java
@@ -29,63 +29,63 @@
  * @coverage swing.gef.part
  */
 public final class BoxStrutVerticalEditPart extends BoxEditPart {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public BoxStrutVerticalEditPart(ComponentInfo component) {
-    super(component);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public BoxStrutVerticalEditPart(ComponentInfo component) {
+		super(component);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Policy
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createEditPolicies() {
-    super.createEditPolicies();
-    installEditPolicy(EditPolicy.SELECTION_ROLE, new StrutSelectionVerticalEditPolicy(m_component));
-    installEditPolicy(new StrutDirectVerticalEditPolicy(m_component));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Policy
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createEditPolicies() {
+		super.createEditPolicies();
+		installEditPolicy(EditPolicy.SELECTION_ROLE, new StrutSelectionVerticalEditPolicy(m_component));
+		installEditPolicy(new StrutDirectVerticalEditPolicy(m_component));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Figure
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Figure createFigure() {
-    return new Figure() {
-      @Override
-      protected void paintClientArea(Graphics graphics) {
-        Rectangle r = getClientArea();
-        draw(graphics, r);
-      }
-    };
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Figure
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Figure createFigure() {
+		return new Figure() {
+			@Override
+			protected void paintClientArea(Graphics graphics) {
+				Rectangle r = getClientArea();
+				draw(graphics, r);
+			}
+		};
+	}
 
-  /**
-   * Draws vertical strut in given {@link Rectangle}.
-   */
-  static void draw(Graphics graphics, Rectangle r) {
-    int x = r.getCenter().x;
-    // draw strut
-    {
-      graphics.setForegroundColor(COLOR_SPRING);
-      graphics.drawLine(x - 1, r.top(), x - 1, r.bottom());
-      graphics.drawLine(x + 1, r.top(), x + 1, r.bottom());
-    }
-    // draw borders
-    {
-      graphics.setForegroundColor(COLOR_BORDER);
-      int x1 = x - SPRING_SIZE / 2;
-      int x2 = x + SPRING_SIZE / 2;
-      graphics.drawLine(x1, r.top() + 0, x2, r.top() + 0);
-      graphics.drawLine(x1, r.top() + 1, x2, r.top() + 1);
-      graphics.drawLine(x1, r.bottom() - 1, x2, r.bottom() - 1);
-      graphics.drawLine(x1, r.bottom() - 2, x2, r.bottom() - 2);
-    }
-  }
+	/**
+	 * Draws vertical strut in given {@link Rectangle}.
+	 */
+	static void draw(Graphics graphics, Rectangle r) {
+		int x = r.getCenter().x;
+		// draw strut
+		{
+			graphics.setForegroundColor(COLOR_SPRING);
+			graphics.drawLine(x - 1, r.top(), x - 1, r.bottom());
+			graphics.drawLine(x + 1, r.top(), x + 1, r.bottom());
+		}
+		// draw borders
+		{
+			graphics.setForegroundColor(COLOR_BORDER);
+			int x1 = x - SPRING_SIZE / 2;
+			int x2 = x + SPRING_SIZE / 2;
+			graphics.drawLine(x1, r.top() + 0, x2, r.top() + 0);
+			graphics.drawLine(x1, r.top() + 1, x2, r.top() + 1);
+			graphics.drawLine(x1, r.bottom() - 1, x2, r.bottom() - 1);
+			graphics.drawLine(x1, r.bottom() - 2, x2, r.bottom() - 2);
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/ComponentFlowLayoutEditPolicy.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/ComponentFlowLayoutEditPolicy.java
index 15434c0b3..88fa48adf 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/ComponentFlowLayoutEditPolicy.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/ComponentFlowLayoutEditPolicy.java
@@ -24,24 +24,24 @@
  * @coverage swing.gef.policy
  */
 public abstract class ComponentFlowLayoutEditPolicy
-    extends
-      ObjectFlowLayoutEditPolicy<ComponentInfo> {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ComponentFlowLayoutEditPolicy(JavaInfo container) {
-    super(container);
-  }
+extends
+ObjectFlowLayoutEditPolicy<ComponentInfo> {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ComponentFlowLayoutEditPolicy(JavaInfo container) {
+		super(container);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Requests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected ILayoutRequestValidator getRequestValidator() {
-    return ComponentsLayoutRequestValidator.INSTANCE;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Requests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected ILayoutRequestValidator getRequestValidator() {
+		return ComponentsLayoutRequestValidator.INSTANCE;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/ComponentPositionLayoutEditPolicy.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/ComponentPositionLayoutEditPolicy.java
index d87bfe950..81f0f8b92 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/ComponentPositionLayoutEditPolicy.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/ComponentPositionLayoutEditPolicy.java
@@ -23,24 +23,24 @@
  * @coverage swing.gef.policy
  */
 public abstract class ComponentPositionLayoutEditPolicy<D>
-    extends
-      ObjectPositionLayoutEditPolicy<ComponentInfo, D> {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ComponentPositionLayoutEditPolicy(JavaInfo javaInfo) {
-    super(javaInfo);
-  }
+extends
+ObjectPositionLayoutEditPolicy<ComponentInfo, D> {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ComponentPositionLayoutEditPolicy(JavaInfo javaInfo) {
+		super(javaInfo);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Requests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected ILayoutRequestValidator getRequestValidator() {
-    return ComponentsLayoutRequestValidator.INSTANCE;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Requests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected ILayoutRequestValidator getRequestValidator() {
+		return ComponentsLayoutRequestValidator.INSTANCE;
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/action/ActionDropButtonLayoutEditPolicy.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/action/ActionDropButtonLayoutEditPolicy.java
index ef47c47d0..b03fd0008 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/action/ActionDropButtonLayoutEditPolicy.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/action/ActionDropButtonLayoutEditPolicy.java
@@ -31,57 +31,57 @@
  * @coverage swing.gef.policy
  */
 public final class ActionDropButtonLayoutEditPolicy extends LayoutEditPolicy {
-  private static final ILayoutRequestValidator VALIDATOR =
-      LayoutRequestValidators.modelType(ActionInfo.class);
-  private final ComponentInfo m_component;
+	private static final ILayoutRequestValidator VALIDATOR =
+			LayoutRequestValidators.modelType(ActionInfo.class);
+	private final ComponentInfo m_component;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ActionDropButtonLayoutEditPolicy(ComponentInfo component) {
-    m_component = component;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ActionDropButtonLayoutEditPolicy(ComponentInfo component) {
+		m_component = component;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Requests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected ILayoutRequestValidator getRequestValidator() {
-    return VALIDATOR;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Requests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected ILayoutRequestValidator getRequestValidator() {
+		return VALIDATOR;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Feedback
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void showLayoutTargetFeedback(Request request) {
-    PolicyUtils.showBorderTargetFeedback(this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Feedback
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void showLayoutTargetFeedback(Request request) {
+		PolicyUtils.showBorderTargetFeedback(this);
+	}
 
-  @Override
-  protected void eraseLayoutTargetFeedback(Request request) {
-    PolicyUtils.eraseBorderTargetFeedback(this);
-  }
+	@Override
+	protected void eraseLayoutTargetFeedback(Request request) {
+		PolicyUtils.eraseBorderTargetFeedback(this);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Command getCreateCommand(CreateRequest request) {
-    final ActionInfo action = (ActionInfo) request.getNewObject();
-    return new EditCommand(m_component) {
-      @Override
-      protected void executeEdit() throws Exception {
-        ActionInfo.setAction(m_component, action);
-      }
-    };
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Command getCreateCommand(CreateRequest request) {
+		final ActionInfo action = (ActionInfo) request.getNewObject();
+		return new EditCommand(m_component) {
+			@Override
+			protected void executeEdit() throws Exception {
+				ActionInfo.setAction(m_component, action);
+			}
+		};
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/action/ActionDropPolicyConfigurator.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/action/ActionDropPolicyConfigurator.java
index 9e5c6438c..4a58e010a 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/action/ActionDropPolicyConfigurator.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/action/ActionDropPolicyConfigurator.java
@@ -25,13 +25,13 @@
  * @coverage swing.gef.policy
  */
 public final class ActionDropPolicyConfigurator implements IEditPartConfigurator {
-  public void configure(EditPart context, EditPart editPart) {
-    // drop ActionInfo on javax.swing.AbstractButton
-    if (editPart.getModel() instanceof ComponentInfo) {
-      ComponentInfo component = (ComponentInfo) editPart.getModel();
-      if (AbstractButton.class.isAssignableFrom(component.getDescription().getComponentClass())) {
-        editPart.installEditPolicy(new ActionDropButtonLayoutEditPolicy(component));
-      }
-    }
-  }
+	public void configure(EditPart context, EditPart editPart) {
+		// drop ActionInfo on javax.swing.AbstractButton
+		if (editPart.getModel() instanceof ComponentInfo) {
+			ComponentInfo component = (ComponentInfo) editPart.getModel();
+			if (AbstractButton.class.isAssignableFrom(component.getDescription().getComponentClass())) {
+				editPart.installEditPolicy(new ActionDropButtonLayoutEditPolicy(component));
+			}
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/component/JScrollPaneLayoutEditPolicy.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/component/JScrollPaneLayoutEditPolicy.java
index ef98be0a3..e78b48b21 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/component/JScrollPaneLayoutEditPolicy.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/component/JScrollPaneLayoutEditPolicy.java
@@ -25,74 +25,74 @@
  * @coverage swing.gef.policy
  */
 public final class JScrollPaneLayoutEditPolicy extends ComponentPositionLayoutEditPolicy<String> {
-  private final JScrollPaneInfo m_component;
+	private final JScrollPaneInfo m_component;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public JScrollPaneLayoutEditPolicy(JScrollPaneInfo component) {
-    super(component);
-    m_component = component;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public JScrollPaneLayoutEditPolicy(JScrollPaneInfo component) {
+		super(component);
+		m_component = component;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Feedbacks
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void addFeedbacks() throws Exception {
-    if (m_component.isEmptyPosition("getColumnHeader")) {
-      addFeedback(
-          0.0,
-          0.0,
-          1.0,
-          0.2,
-          new Insets(0, 0, 2, 0),
-          GefMessages.JScrollPaneLayoutEditPolicy_columnHeader,
-          "setColumnHeaderView");
-    }
-    if (m_component.isEmptyPosition("getRowHeader")) {
-      addFeedback(
-          0.0,
-          0.2,
-          0.2,
-          1.0,
-          new Insets(0, 0, 0, 2),
-          GefMessages.JScrollPaneLayoutEditPolicy_rowHeader,
-          "setRowHeaderView");
-    }
-    if (m_component.isEmptyPosition("getViewport")) {
-      addFeedback(
-          0.2,
-          0.2,
-          1.0,
-          1.0,
-          new Insets(0, 0, 0, 0),
-          GefMessages.JScrollPaneLayoutEditPolicy_viewport,
-          "setViewportView");
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Feedbacks
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void addFeedbacks() throws Exception {
+		if (m_component.isEmptyPosition("getColumnHeader")) {
+			addFeedback(
+					0.0,
+					0.0,
+					1.0,
+					0.2,
+					new Insets(0, 0, 2, 0),
+					GefMessages.JScrollPaneLayoutEditPolicy_columnHeader,
+					"setColumnHeaderView");
+		}
+		if (m_component.isEmptyPosition("getRowHeader")) {
+			addFeedback(
+					0.0,
+					0.2,
+					0.2,
+					1.0,
+					new Insets(0, 0, 0, 2),
+					GefMessages.JScrollPaneLayoutEditPolicy_rowHeader,
+					"setRowHeaderView");
+		}
+		if (m_component.isEmptyPosition("getViewport")) {
+			addFeedback(
+					0.2,
+					0.2,
+					1.0,
+					1.0,
+					new Insets(0, 0, 0, 0),
+					GefMessages.JScrollPaneLayoutEditPolicy_viewport,
+					"setViewportView");
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Implementation of commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void command_CREATE(ComponentInfo component, String data) throws Exception {
-    m_component.command_CREATE(component, data);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Implementation of commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void command_CREATE(ComponentInfo component, String data) throws Exception {
+		m_component.command_CREATE(component, data);
+	}
 
-  @Override
-  protected void command_MOVE(ComponentInfo component, String data) throws Exception {
-    m_component.command_MOVE(component, data);
-  }
+	@Override
+	protected void command_MOVE(ComponentInfo component, String data) throws Exception {
+		m_component.command_MOVE(component, data);
+	}
 
-  @Override
-  protected void command_ADD(ComponentInfo component, String data) throws Exception {
-    m_component.command_ADD(component, data);
-  }
+	@Override
+	protected void command_ADD(ComponentInfo component, String data) throws Exception {
+		m_component.command_ADD(component, data);
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/component/JSplitPaneLayoutEditPolicy.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/component/JSplitPaneLayoutEditPolicy.java
index 095e7a3cd..f264da2b4 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/component/JSplitPaneLayoutEditPolicy.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/component/JSplitPaneLayoutEditPolicy.java
@@ -23,56 +23,56 @@
  * @coverage swing.gef.policy
  */
 public final class JSplitPaneLayoutEditPolicy extends ComponentPositionLayoutEditPolicy<Boolean> {
-  private final JSplitPaneInfo m_component;
+	private final JSplitPaneInfo m_component;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public JSplitPaneLayoutEditPolicy(JSplitPaneInfo component) {
-    super(component);
-    m_component = component;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public JSplitPaneLayoutEditPolicy(JSplitPaneInfo component) {
+		super(component);
+		m_component = component;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Feedbacks
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void addFeedbacks() throws Exception {
-    if (m_component.isEmptyPosition(true)) {
-      addFeedback(
-          m_component.getPositionRectangle(true),
-          GefMessages.JSplitPaneLayoutEditPolicy_leftTop,
-          Boolean.TRUE);
-    }
-    if (m_component.isEmptyPosition(false)) {
-      addFeedback(
-          m_component.getPositionRectangle(false),
-          GefMessages.JSplitPaneLayoutEditPolicy_rightBottom,
-          Boolean.FALSE);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Feedbacks
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void addFeedbacks() throws Exception {
+		if (m_component.isEmptyPosition(true)) {
+			addFeedback(
+					m_component.getPositionRectangle(true),
+					GefMessages.JSplitPaneLayoutEditPolicy_leftTop,
+					Boolean.TRUE);
+		}
+		if (m_component.isEmptyPosition(false)) {
+			addFeedback(
+					m_component.getPositionRectangle(false),
+					GefMessages.JSplitPaneLayoutEditPolicy_rightBottom,
+					Boolean.FALSE);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Implementation of commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void command_CREATE(ComponentInfo component, Boolean data) throws Exception {
-    m_component.command_CREATE(component, data);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Implementation of commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void command_CREATE(ComponentInfo component, Boolean data) throws Exception {
+		m_component.command_CREATE(component, data);
+	}
 
-  @Override
-  protected void command_MOVE(ComponentInfo component, Boolean data) throws Exception {
-    m_component.command_MOVE(component, data);
-  }
+	@Override
+	protected void command_MOVE(ComponentInfo component, Boolean data) throws Exception {
+		m_component.command_MOVE(component, data);
+	}
 
-  @Override
-  protected void command_ADD(ComponentInfo component, Boolean data) throws Exception {
-    m_component.command_ADD(component, data);
-  }
+	@Override
+	protected void command_ADD(ComponentInfo component, Boolean data) throws Exception {
+		m_component.command_ADD(component, data);
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/component/JTabbedPaneLayoutEditPolicy.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/component/JTabbedPaneLayoutEditPolicy.java
index 67679458b..598a62b9c 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/component/JTabbedPaneLayoutEditPolicy.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/component/JTabbedPaneLayoutEditPolicy.java
@@ -29,89 +29,89 @@
  * @coverage swing.gef.policy
  */
 public final class JTabbedPaneLayoutEditPolicy extends ComponentFlowLayoutEditPolicy {
-  private final JTabbedPaneInfo m_pane;
+	private final JTabbedPaneInfo m_pane;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public JTabbedPaneLayoutEditPolicy(JTabbedPaneInfo component) {
-    super(component);
-    m_pane = component;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public JTabbedPaneLayoutEditPolicy(JTabbedPaneInfo component) {
+		super(component);
+		m_pane = component;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected boolean isHorizontal(Request request) {
-    return m_pane.isHorizontal();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected boolean isHorizontal(Request request) {
+		return m_pane.isHorizontal();
+	}
 
-  @Override
-  protected boolean isGoodReferenceChild(Request request, EditPart editPart) {
-    return editPart instanceof JTabbedPaneTabEditPart;
-  }
+	@Override
+	protected boolean isGoodReferenceChild(Request request, EditPart editPart) {
+		return editPart instanceof JTabbedPaneTabEditPart;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Command getMoveCommand(Object moveObject, Object referenceObject) {
-    final ComponentInfo component = getComponent(moveObject);
-    if (component == null || !component.getCreationSupport().canReorder()) {
-      return null;
-    }
-    return super.getMoveCommand(moveObject, referenceObject);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Command getMoveCommand(Object moveObject, Object referenceObject) {
+		final ComponentInfo component = getComponent(moveObject);
+		if (component == null || !component.getCreationSupport().canReorder()) {
+			return null;
+		}
+		return super.getMoveCommand(moveObject, referenceObject);
+	}
 
-  @Override
-  protected Command getAddCommand(Object addObject, Object referenceObject) {
-    final ComponentInfo component = getComponent(addObject);
-    if (component == null || !component.getCreationSupport().canReparent()) {
-      return null;
-    }
-    return super.getAddCommand(addObject, referenceObject);
-  }
+	@Override
+	protected Command getAddCommand(Object addObject, Object referenceObject) {
+		final ComponentInfo component = getComponent(addObject);
+		if (component == null || !component.getCreationSupport().canReparent()) {
+			return null;
+		}
+		return super.getAddCommand(addObject, referenceObject);
+	}
 
-  @Override
-  protected void command_CREATE(ComponentInfo newObject, ComponentInfo referenceObject)
-      throws Exception {
-    m_pane.command_CREATE(newObject, referenceObject);
-  }
+	@Override
+	protected void command_CREATE(ComponentInfo newObject, ComponentInfo referenceObject)
+			throws Exception {
+		m_pane.command_CREATE(newObject, referenceObject);
+	}
 
-  @Override
-  protected void command_MOVE(ComponentInfo object, ComponentInfo referenceObject) throws Exception {
-    m_pane.command_MOVE(object, referenceObject);
-  }
+	@Override
+	protected void command_MOVE(ComponentInfo object, ComponentInfo referenceObject) throws Exception {
+		m_pane.command_MOVE(object, referenceObject);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected ComponentInfo getObjectModel(Object object) {
-    return getComponent(object);
-  };
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected ComponentInfo getObjectModel(Object object) {
+		return getComponent(object);
+	};
 
-  @Override
-  protected ComponentInfo getReferenceObjectModel(Object referenceObject) {
-    return getComponent(referenceObject);
-  }
+	@Override
+	protected ComponentInfo getReferenceObjectModel(Object referenceObject) {
+		return getComponent(referenceObject);
+	}
 
-  /**
-   * @return the {@link ComponentInfo} for given {@link JTabbedPaneTabInfo} object.
-   */
-  private static ComponentInfo getComponent(Object o) {
-    if (o instanceof ComponentInfo) {
-      return (ComponentInfo) o;
-    }
-    return o != null ? ((JTabbedPaneTabInfo) o).getComponent() : null;
-  }
+	/**
+	 * @return the {@link ComponentInfo} for given {@link JTabbedPaneTabInfo} object.
+	 */
+	private static ComponentInfo getComponent(Object o) {
+		if (o instanceof ComponentInfo) {
+			return (ComponentInfo) o;
+		}
+		return o != null ? ((JTabbedPaneTabInfo) o).getComponent() : null;
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/component/JTabbedPaneTabLayoutEditPolicy.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/component/JTabbedPaneTabLayoutEditPolicy.java
index 59a41a774..4f9c865b8 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/component/JTabbedPaneTabLayoutEditPolicy.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/component/JTabbedPaneTabLayoutEditPolicy.java
@@ -29,102 +29,102 @@
  * @coverage swing.gef.policy
  */
 public final class JTabbedPaneTabLayoutEditPolicy
-    extends
-      org.eclipse.wb.core.gef.policy.layout.flow.ObjectFlowLayoutEditPolicy<JTabbedPaneTabInfo> {
-  private final JTabbedPaneInfo m_pane;
+extends
+org.eclipse.wb.core.gef.policy.layout.flow.ObjectFlowLayoutEditPolicy<JTabbedPaneTabInfo> {
+	private final JTabbedPaneInfo m_pane;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public JTabbedPaneTabLayoutEditPolicy(JTabbedPaneInfo component) {
-    super(component);
-    m_pane = component;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public JTabbedPaneTabLayoutEditPolicy(JTabbedPaneInfo component) {
+		super(component);
+		m_pane = component;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected boolean isHorizontal(Request request) {
-    return m_pane.isHorizontal();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected boolean isHorizontal(Request request) {
+		return m_pane.isHorizontal();
+	}
 
-  @Override
-  protected boolean isGoodReferenceChild(Request request, EditPart editPart) {
-    return editPart instanceof JTabbedPaneTabEditPart;
-  }
+	@Override
+	protected boolean isGoodReferenceChild(Request request, EditPart editPart) {
+		return editPart instanceof JTabbedPaneTabEditPart;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Requests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final ILayoutRequestValidator INSTANCE =
-      LayoutRequestValidators.modelType(JTabbedPaneTabInfo.class);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Requests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final ILayoutRequestValidator INSTANCE =
+			LayoutRequestValidators.modelType(JTabbedPaneTabInfo.class);
 
-  @Override
-  protected ILayoutRequestValidator getRequestValidator() {
-    return INSTANCE;
-  }
+	@Override
+	protected ILayoutRequestValidator getRequestValidator() {
+		return INSTANCE;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Command getCreateCommand(Object newObject, Object referenceObject) {
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Command getCreateCommand(Object newObject, Object referenceObject) {
+		return null;
+	}
 
-  @Override
-  protected Command getMoveCommand(Object moveObject, Object referenceObject) {
-    return getComponent(moveObject) != null
-        ? super.getMoveCommand(moveObject, referenceObject)
-        : null;
-  }
+	@Override
+	protected Command getMoveCommand(Object moveObject, Object referenceObject) {
+		return getComponent(moveObject) != null
+				? super.getMoveCommand(moveObject, referenceObject)
+						: null;
+	}
 
-  @Override
-  protected Command getAddCommand(Object addObject, Object referenceObject) {
-    return getComponent(addObject) != null ? super.getAddCommand(addObject, referenceObject) : null;
-  }
+	@Override
+	protected Command getAddCommand(Object addObject, Object referenceObject) {
+		return getComponent(addObject) != null ? super.getAddCommand(addObject, referenceObject) : null;
+	}
 
-  @Override
-  protected void command_CREATE(JTabbedPaneTabInfo newObject, JTabbedPaneTabInfo referenceObject)
-      throws Exception {
-  }
+	@Override
+	protected void command_CREATE(JTabbedPaneTabInfo newObject, JTabbedPaneTabInfo referenceObject)
+			throws Exception {
+	}
 
-  @Override
-  protected void command_MOVE(JTabbedPaneTabInfo object, JTabbedPaneTabInfo referenceObject)
-      throws Exception {
-    ComponentInfo component = object.getComponent();
-    m_pane.command_MOVE(component, referenceObject != null ? referenceObject.getComponent() : null);
-    m_pane.setActiveComponent(component);
-  }
+	@Override
+	protected void command_MOVE(JTabbedPaneTabInfo object, JTabbedPaneTabInfo referenceObject)
+			throws Exception {
+		ComponentInfo component = object.getComponent();
+		m_pane.command_MOVE(component, referenceObject != null ? referenceObject.getComponent() : null);
+		m_pane.setActiveComponent(component);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected JTabbedPaneTabInfo getObjectModel(Object object) {
-    return getComponent(object);
-  };
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected JTabbedPaneTabInfo getObjectModel(Object object) {
+		return getComponent(object);
+	};
 
-  @Override
-  protected JTabbedPaneTabInfo getReferenceObjectModel(Object referenceObject) {
-    return getComponent(referenceObject);
-  }
+	@Override
+	protected JTabbedPaneTabInfo getReferenceObjectModel(Object referenceObject) {
+		return getComponent(referenceObject);
+	}
 
-  /**
-   * @return the {@link ComponentInfo} for given {@link JTabbedPaneTabInfo} object.
-   */
-  private static JTabbedPaneTabInfo getComponent(Object o) {
-    return o instanceof JTabbedPaneTabInfo ? (JTabbedPaneTabInfo) o : null;
-  }
+	/**
+	 * @return the {@link ComponentInfo} for given {@link JTabbedPaneTabInfo} object.
+	 */
+	private static JTabbedPaneTabInfo getComponent(Object o) {
+		return o instanceof JTabbedPaneTabInfo ? (JTabbedPaneTabInfo) o : null;
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/component/box/GlueSelectionEditPolicy.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/component/box/GlueSelectionEditPolicy.java
index c3ab7de8d..d94ae905a 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/component/box/GlueSelectionEditPolicy.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/component/box/GlueSelectionEditPolicy.java
@@ -28,19 +28,19 @@
  * @coverage swing.gef.policy
  */
 public final class GlueSelectionEditPolicy extends SelectionEditPolicy {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Handles
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected List<Handle> createSelectionHandles() {
-    List<Handle> handles = Lists.newArrayList();
-    // create move handle
-    MoveHandle moveHandle = new MoveHandle(getHost());
-    moveHandle.setForeground(IColorConstants.red);
-    handles.add(moveHandle);
-    //
-    return handles;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Handles
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected List<Handle> createSelectionHandles() {
+		List<Handle> handles = Lists.newArrayList();
+		// create move handle
+		MoveHandle moveHandle = new MoveHandle(getHost());
+		moveHandle.setForeground(IColorConstants.red);
+		handles.add(moveHandle);
+		//
+		return handles;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/component/box/StrutDirectEditPolicy.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/component/box/StrutDirectEditPolicy.java
index 82cdcac40..f5eabd9f1 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/component/box/StrutDirectEditPolicy.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/component/box/StrutDirectEditPolicy.java
@@ -31,64 +31,64 @@
  * @coverage swing.gef.policy
  */
 abstract class StrutDirectEditPolicy extends DirectTextEditPolicy {
-  private final ComponentInfo m_strut;
+	private final ComponentInfo m_strut;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public StrutDirectEditPolicy(ComponentInfo strut) {
-    m_strut = strut;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public StrutDirectEditPolicy(ComponentInfo strut) {
+		m_strut = strut;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // DirectTextEditPolicy
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the source corresponding to the text, entered by user.
-   */
-  protected abstract String getSource(ComponentInfo strut, String text) throws Exception;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// DirectTextEditPolicy
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the source corresponding to the text, entered by user.
+	 */
+	protected abstract String getSource(ComponentInfo strut, String text) throws Exception;
 
-  @Override
-  protected final void setText(String text) {
-    // prepare source
-    final String source;
-    try {
-      source = getSource(m_strut, text);
-    } catch (Throwable e) {
-      return;
-    }
-    // set source
-    ExecutionUtils.run(m_strut, new RunnableEx() {
-      public void run() throws Exception {
-        BoxSupport.setStrutSize(m_strut, source);
-      }
-    });
-  }
+	@Override
+	protected final void setText(String text) {
+		// prepare source
+		final String source;
+		try {
+			source = getSource(m_strut, text);
+		} catch (Throwable e) {
+			return;
+		}
+		// set source
+		ExecutionUtils.run(m_strut, new RunnableEx() {
+			public void run() throws Exception {
+				BoxSupport.setStrutSize(m_strut, source);
+			}
+		});
+	}
 
-  @Override
-  protected final Point getTextWidgetLocation(Rectangle hostBounds, Dimension textSize) {
-    int x = hostBounds.getCenter().x - textSize.width / 2;
-    int y = hostBounds.getCenter().y - textSize.height / 2;
-    return new Point(x, y);
-  }
+	@Override
+	protected final Point getTextWidgetLocation(Rectangle hostBounds, Dimension textSize) {
+		int x = hostBounds.getCenter().x - textSize.width / 2;
+		int y = hostBounds.getCenter().y - textSize.height / 2;
+		return new Point(x, y);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Request
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final void performRequest(Request request) {
-    if (request instanceof KeyRequest) {
-      KeyRequest keyRequest = (KeyRequest) request;
-      if (keyRequest.isPressed() && keyRequest.getCharacter() == ' ') {
-        beginEdit();
-      }
-    }
-    super.performRequest(request);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Request
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final void performRequest(Request request) {
+		if (request instanceof KeyRequest) {
+			KeyRequest keyRequest = (KeyRequest) request;
+			if (keyRequest.isPressed() && keyRequest.getCharacter() == ' ') {
+				beginEdit();
+			}
+		}
+		super.performRequest(request);
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/component/box/StrutDirectHorizontalEditPolicy.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/component/box/StrutDirectHorizontalEditPolicy.java
index dd8d2a8b3..af7459ceb 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/component/box/StrutDirectHorizontalEditPolicy.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/component/box/StrutDirectHorizontalEditPolicy.java
@@ -23,28 +23,28 @@
  * @coverage swing.gef.policy
  */
 public final class StrutDirectHorizontalEditPolicy extends StrutDirectEditPolicy {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public StrutDirectHorizontalEditPolicy(ComponentInfo strut) {
-    super(strut);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public StrutDirectHorizontalEditPolicy(ComponentInfo strut) {
+		super(strut);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // DirectTextEditPolicy
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getText() {
-    return "" + getHost().getFigure().getBounds().width;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// DirectTextEditPolicy
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getText() {
+		return "" + getHost().getFigure().getBounds().width;
+	}
 
-  @Override
-  protected String getSource(ComponentInfo strut, String text) throws Exception {
-    int value = Integer.parseInt(text);
-    return IntegerConverter.INSTANCE.toJavaSource(strut, value);
-  }
+	@Override
+	protected String getSource(ComponentInfo strut, String text) throws Exception {
+		int value = Integer.parseInt(text);
+		return IntegerConverter.INSTANCE.toJavaSource(strut, value);
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/component/box/StrutDirectRigidEditPolicy.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/component/box/StrutDirectRigidEditPolicy.java
index fc17ac9f6..ffdb6045d 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/component/box/StrutDirectRigidEditPolicy.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/component/box/StrutDirectRigidEditPolicy.java
@@ -27,31 +27,31 @@
  * @coverage swing.gef.policy
  */
 public final class StrutDirectRigidEditPolicy extends StrutDirectEditPolicy {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public StrutDirectRigidEditPolicy(ComponentInfo strut) {
-    super(strut);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public StrutDirectRigidEditPolicy(ComponentInfo strut) {
+		super(strut);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // DirectTextEditPolicy
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getText() {
-    Rectangle bounds = getHost().getFigure().getBounds();
-    return bounds.width + " " + bounds.height;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// DirectTextEditPolicy
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getText() {
+		Rectangle bounds = getHost().getFigure().getBounds();
+		return bounds.width + " " + bounds.height;
+	}
 
-  @Override
-  protected String getSource(ComponentInfo strut, String text) throws Exception {
-    String[] parts = StringUtils.split(text);
-    int width = Integer.parseInt(parts[0]);
-    int height = Integer.parseInt(parts[1]);
-    return DimensionConverter.INSTANCE.toJavaSource(strut, new java.awt.Dimension(width, height));
-  }
+	@Override
+	protected String getSource(ComponentInfo strut, String text) throws Exception {
+		String[] parts = StringUtils.split(text);
+		int width = Integer.parseInt(parts[0]);
+		int height = Integer.parseInt(parts[1]);
+		return DimensionConverter.INSTANCE.toJavaSource(strut, new java.awt.Dimension(width, height));
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/component/box/StrutDirectVerticalEditPolicy.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/component/box/StrutDirectVerticalEditPolicy.java
index d03f784c4..8b615d322 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/component/box/StrutDirectVerticalEditPolicy.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/component/box/StrutDirectVerticalEditPolicy.java
@@ -23,28 +23,28 @@
  * @coverage swing.gef.policy
  */
 public final class StrutDirectVerticalEditPolicy extends StrutDirectEditPolicy {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public StrutDirectVerticalEditPolicy(ComponentInfo strut) {
-    super(strut);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public StrutDirectVerticalEditPolicy(ComponentInfo strut) {
+		super(strut);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // DirectTextEditPolicy
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getText() {
-    return "" + getHost().getFigure().getBounds().height;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// DirectTextEditPolicy
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getText() {
+		return "" + getHost().getFigure().getBounds().height;
+	}
 
-  @Override
-  protected String getSource(ComponentInfo strut, String text) throws Exception {
-    int value = Integer.parseInt(text);
-    return IntegerConverter.INSTANCE.toJavaSource(strut, value);
-  }
+	@Override
+	protected String getSource(ComponentInfo strut, String text) throws Exception {
+		int value = Integer.parseInt(text);
+		return IntegerConverter.INSTANCE.toJavaSource(strut, value);
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/component/box/StrutSelectionEditPolicy.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/component/box/StrutSelectionEditPolicy.java
index ed7d9f232..552005d92 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/component/box/StrutSelectionEditPolicy.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/component/box/StrutSelectionEditPolicy.java
@@ -42,148 +42,148 @@
  * @coverage swing.gef.policy
  */
 abstract class StrutSelectionEditPolicy extends SelectionEditPolicy {
-  private static final String REQ_RESIZE = "resize";
-  private final ComponentInfo m_strut;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public StrutSelectionEditPolicy(ComponentInfo strut) {
-    m_strut = strut;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Handles
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected List<Handle> createSelectionHandles() {
-    List<Handle> handles = Lists.newArrayList();
-    // create move handle
-    MoveHandle moveHandle = new MoveHandle(getHost());
-    moveHandle.setForeground(IColorConstants.red);
-    handles.add(moveHandle);
-    //
-    return handles;
-  }
-
-  /**
-   * @return the resize {@link Handle} located on given side.
-   */
-  protected Handle createResizeHandle(int handleSide, int resizeDirection) {
-    SideResizeHandle resizeHandle = new SideResizeHandle(getHost(), handleSide, 5, true);
-    resizeHandle.setDragTrackerTool(new ResizeTracker(getHost(), resizeDirection, REQ_RESIZE));
-    return resizeHandle;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Routing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean understandsRequest(Request request) {
-    return super.understandsRequest(request) || request.getType() == REQ_RESIZE;
-  }
-
-  @Override
-  public Command getCommand(Request request) {
-    return getResizeCommand((ChangeBoundsRequest) request);
-  }
-
-  @Override
-  public void showSourceFeedback(Request request) {
-    showResizeFeedback((ChangeBoundsRequest) request);
-  }
-
-  @Override
-  public void eraseSourceFeedback(Request request) {
-    eraseResizeFeedback((ChangeBoundsRequest) request);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Resize
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Figure m_sizeFeedback;
-  private TextFeedback m_textFeedback;
-
-  /**
-   * @return the {@link Command} that resizes strut.
-   */
-  private Command getResizeCommand(ChangeBoundsRequest request) {
-    final Rectangle newBounds = request.getTransformedRectangle(getHostFigure().getBounds());
-    return new EditCommand(m_strut) {
-      @Override
-      protected void executeEdit() throws Exception {
-        String source = getSource(m_strut, newBounds.width, newBounds.height);
-        BoxSupport.setStrutSize(m_strut, source);
-      }
-    };
-  }
-
-  /**
-   * Shows resize feedback.
-   */
-  private void showResizeFeedback(ChangeBoundsRequest request) {
-    if (m_sizeFeedback == null) {
-      // create size feedback
-      {
-        m_sizeFeedback = new RectangleFigure();
-        m_sizeFeedback.setForeground(IColorConstants.red);
-        addFeedback(m_sizeFeedback);
-      }
-      // create text feedback
-      {
-        m_textFeedback = new TextFeedback(getFeedbackLayer());
-        m_textFeedback.add();
-      }
-    }
-    // prepare bounds
-    Rectangle bounds;
-    {
-      Figure hostFigure = getHostFigure();
-      bounds = request.getTransformedRectangle(hostFigure.getBounds());
-      FigureUtils.translateFigureToAbsolute(hostFigure, bounds.shrink(-1, -1));
-    }
-    // update size feedback
-    m_sizeFeedback.setBounds(bounds);
-    // update text feedback
-    {
-      String tooltip = getTooltip(bounds.width - 2, bounds.height - 2);
-      m_textFeedback.setText(tooltip);
-      m_textFeedback.setLocation(request.getLocation().getTranslated(10, 10));
-    }
-  }
-
-  /**
-   * Erases resize feedback.
-   */
-  private void eraseResizeFeedback(ChangeBoundsRequest request) {
-    // erase size feedback
-    removeFeedback(m_sizeFeedback);
-    m_sizeFeedback = null;
-    // erase text feedback
-    m_textFeedback.remove();
-    m_textFeedback = null;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Abstract
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the text to display new size for user during resize.
-   */
-  protected abstract String getTooltip(int width, int height);
-
-  /**
-   * @return the source to set as factory argument, such that size of strut is same as in given.
-   */
-  protected abstract String getSource(ComponentInfo strut, int width, int height) throws Exception;
+	private static final String REQ_RESIZE = "resize";
+	private final ComponentInfo m_strut;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public StrutSelectionEditPolicy(ComponentInfo strut) {
+		m_strut = strut;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Handles
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected List<Handle> createSelectionHandles() {
+		List<Handle> handles = Lists.newArrayList();
+		// create move handle
+		MoveHandle moveHandle = new MoveHandle(getHost());
+		moveHandle.setForeground(IColorConstants.red);
+		handles.add(moveHandle);
+		//
+		return handles;
+	}
+
+	/**
+	 * @return the resize {@link Handle} located on given side.
+	 */
+	protected Handle createResizeHandle(int handleSide, int resizeDirection) {
+		SideResizeHandle resizeHandle = new SideResizeHandle(getHost(), handleSide, 5, true);
+		resizeHandle.setDragTrackerTool(new ResizeTracker(getHost(), resizeDirection, REQ_RESIZE));
+		return resizeHandle;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Routing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean understandsRequest(Request request) {
+		return super.understandsRequest(request) || request.getType() == REQ_RESIZE;
+	}
+
+	@Override
+	public Command getCommand(Request request) {
+		return getResizeCommand((ChangeBoundsRequest) request);
+	}
+
+	@Override
+	public void showSourceFeedback(Request request) {
+		showResizeFeedback((ChangeBoundsRequest) request);
+	}
+
+	@Override
+	public void eraseSourceFeedback(Request request) {
+		eraseResizeFeedback((ChangeBoundsRequest) request);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Resize
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Figure m_sizeFeedback;
+	private TextFeedback m_textFeedback;
+
+	/**
+	 * @return the {@link Command} that resizes strut.
+	 */
+	private Command getResizeCommand(ChangeBoundsRequest request) {
+		final Rectangle newBounds = request.getTransformedRectangle(getHostFigure().getBounds());
+		return new EditCommand(m_strut) {
+			@Override
+			protected void executeEdit() throws Exception {
+				String source = getSource(m_strut, newBounds.width, newBounds.height);
+				BoxSupport.setStrutSize(m_strut, source);
+			}
+		};
+	}
+
+	/**
+	 * Shows resize feedback.
+	 */
+	private void showResizeFeedback(ChangeBoundsRequest request) {
+		if (m_sizeFeedback == null) {
+			// create size feedback
+			{
+				m_sizeFeedback = new RectangleFigure();
+				m_sizeFeedback.setForeground(IColorConstants.red);
+				addFeedback(m_sizeFeedback);
+			}
+			// create text feedback
+			{
+				m_textFeedback = new TextFeedback(getFeedbackLayer());
+				m_textFeedback.add();
+			}
+		}
+		// prepare bounds
+		Rectangle bounds;
+		{
+			Figure hostFigure = getHostFigure();
+			bounds = request.getTransformedRectangle(hostFigure.getBounds());
+			FigureUtils.translateFigureToAbsolute(hostFigure, bounds.shrink(-1, -1));
+		}
+		// update size feedback
+		m_sizeFeedback.setBounds(bounds);
+		// update text feedback
+		{
+			String tooltip = getTooltip(bounds.width - 2, bounds.height - 2);
+			m_textFeedback.setText(tooltip);
+			m_textFeedback.setLocation(request.getLocation().getTranslated(10, 10));
+		}
+	}
+
+	/**
+	 * Erases resize feedback.
+	 */
+	private void eraseResizeFeedback(ChangeBoundsRequest request) {
+		// erase size feedback
+		removeFeedback(m_sizeFeedback);
+		m_sizeFeedback = null;
+		// erase text feedback
+		m_textFeedback.remove();
+		m_textFeedback = null;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Abstract
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the text to display new size for user during resize.
+	 */
+	protected abstract String getTooltip(int width, int height);
+
+	/**
+	 * @return the source to set as factory argument, such that size of strut is same as in given.
+	 */
+	protected abstract String getSource(ComponentInfo strut, int width, int height) throws Exception;
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/component/box/StrutSelectionHorizontalEditPolicy.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/component/box/StrutSelectionHorizontalEditPolicy.java
index 8e6e315ca..6cd4e88c1 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/component/box/StrutSelectionHorizontalEditPolicy.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/component/box/StrutSelectionHorizontalEditPolicy.java
@@ -28,40 +28,40 @@
  * @coverage swing.gef.policy
  */
 public final class StrutSelectionHorizontalEditPolicy extends StrutSelectionEditPolicy {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public StrutSelectionHorizontalEditPolicy(ComponentInfo strut) {
-    super(strut);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public StrutSelectionHorizontalEditPolicy(ComponentInfo strut) {
+		super(strut);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Handles
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected List<Handle> createStaticHandles() {
-    List<Handle> handles = Lists.newArrayList();
-    handles.add(createResizeHandle(IPositionConstants.LEFT, IPositionConstants.WEST));
-    handles.add(createResizeHandle(IPositionConstants.RIGHT, IPositionConstants.EAST));
-    return handles;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Handles
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected List<Handle> createStaticHandles() {
+		List<Handle> handles = Lists.newArrayList();
+		handles.add(createResizeHandle(IPositionConstants.LEFT, IPositionConstants.WEST));
+		handles.add(createResizeHandle(IPositionConstants.RIGHT, IPositionConstants.EAST));
+		return handles;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Resize
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getTooltip(int width, int height) {
-    return Integer.toString(width);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Resize
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getTooltip(int width, int height) {
+		return Integer.toString(width);
+	}
 
-  @Override
-  protected String getSource(ComponentInfo strut, int width, int height) throws Exception {
-    return IntegerConverter.INSTANCE.toJavaSource(strut, width);
-  }
+	@Override
+	protected String getSource(ComponentInfo strut, int width, int height) throws Exception {
+		return IntegerConverter.INSTANCE.toJavaSource(strut, width);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/component/box/StrutSelectionRigidEditPolicy.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/component/box/StrutSelectionRigidEditPolicy.java
index 6a12efff9..d6c5967b8 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/component/box/StrutSelectionRigidEditPolicy.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/component/box/StrutSelectionRigidEditPolicy.java
@@ -28,42 +28,42 @@
  * @coverage swing.gef.policy
  */
 public final class StrutSelectionRigidEditPolicy extends StrutSelectionEditPolicy {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public StrutSelectionRigidEditPolicy(ComponentInfo strut) {
-    super(strut);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public StrutSelectionRigidEditPolicy(ComponentInfo strut) {
+		super(strut);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Handles
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected List<Handle> createStaticHandles() {
-    List<Handle> handles = Lists.newArrayList();
-    handles.add(createResizeHandle(IPositionConstants.LEFT, IPositionConstants.WEST));
-    handles.add(createResizeHandle(IPositionConstants.RIGHT, IPositionConstants.EAST));
-    handles.add(createResizeHandle(IPositionConstants.TOP, IPositionConstants.NORTH));
-    handles.add(createResizeHandle(IPositionConstants.BOTTOM, IPositionConstants.SOUTH));
-    return handles;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Handles
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected List<Handle> createStaticHandles() {
+		List<Handle> handles = Lists.newArrayList();
+		handles.add(createResizeHandle(IPositionConstants.LEFT, IPositionConstants.WEST));
+		handles.add(createResizeHandle(IPositionConstants.RIGHT, IPositionConstants.EAST));
+		handles.add(createResizeHandle(IPositionConstants.TOP, IPositionConstants.NORTH));
+		handles.add(createResizeHandle(IPositionConstants.BOTTOM, IPositionConstants.SOUTH));
+		return handles;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Resize
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getTooltip(int width, int height) {
-    return "(" + Integer.toString(width) + ", " + Integer.toString(height) + ")";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Resize
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getTooltip(int width, int height) {
+		return "(" + Integer.toString(width) + ", " + Integer.toString(height) + ")";
+	}
 
-  @Override
-  protected String getSource(ComponentInfo strut, int width, int height) throws Exception {
-    return DimensionConverter.INSTANCE.toJavaSource(strut, new java.awt.Dimension(width, height));
-  }
+	@Override
+	protected String getSource(ComponentInfo strut, int width, int height) throws Exception {
+		return DimensionConverter.INSTANCE.toJavaSource(strut, new java.awt.Dimension(width, height));
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/component/box/StrutSelectionVerticalEditPolicy.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/component/box/StrutSelectionVerticalEditPolicy.java
index 2b2e27570..4646f10e6 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/component/box/StrutSelectionVerticalEditPolicy.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/component/box/StrutSelectionVerticalEditPolicy.java
@@ -28,40 +28,40 @@
  * @coverage swing.gef.policy
  */
 public final class StrutSelectionVerticalEditPolicy extends StrutSelectionEditPolicy {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public StrutSelectionVerticalEditPolicy(ComponentInfo strut) {
-    super(strut);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public StrutSelectionVerticalEditPolicy(ComponentInfo strut) {
+		super(strut);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Handles
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected List<Handle> createStaticHandles() {
-    List<Handle> handles = Lists.newArrayList();
-    handles.add(createResizeHandle(IPositionConstants.TOP, IPositionConstants.NORTH));
-    handles.add(createResizeHandle(IPositionConstants.BOTTOM, IPositionConstants.SOUTH));
-    return handles;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Handles
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected List<Handle> createStaticHandles() {
+		List<Handle> handles = Lists.newArrayList();
+		handles.add(createResizeHandle(IPositionConstants.TOP, IPositionConstants.NORTH));
+		handles.add(createResizeHandle(IPositionConstants.BOTTOM, IPositionConstants.SOUTH));
+		return handles;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Resize
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getTooltip(int width, int height) {
-    return Integer.toString(height);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Resize
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getTooltip(int width, int height) {
+		return Integer.toString(height);
+	}
 
-  @Override
-  protected String getSource(ComponentInfo strut, int width, int height) throws Exception {
-    return IntegerConverter.INSTANCE.toJavaSource(strut, height);
-  }
+	@Override
+	protected String getSource(ComponentInfo strut, int width, int height) throws Exception {
+		return IntegerConverter.INSTANCE.toJavaSource(strut, height);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/AbsoluteBasedLayoutEditPolicySwing.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/AbsoluteBasedLayoutEditPolicySwing.java
index f4a98e4d2..b4f41a729 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/AbsoluteBasedLayoutEditPolicySwing.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/AbsoluteBasedLayoutEditPolicySwing.java
@@ -37,65 +37,65 @@
  * @coverage swing.gef.policy
  */
 public abstract class AbsoluteBasedLayoutEditPolicySwing
-    extends
-      AbsoluteBasedLayoutEditPolicy<ComponentInfo> {
-  private final LayoutInfo m_layout;
+extends
+AbsoluteBasedLayoutEditPolicy<ComponentInfo> {
+	private final LayoutInfo m_layout;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbsoluteBasedLayoutEditPolicySwing(LayoutInfo layout) {
-    super(layout);
-    m_layout = layout;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbsoluteBasedLayoutEditPolicySwing(LayoutInfo layout) {
+		super(layout);
+		m_layout = layout;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Requests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected ILayoutRequestValidator getRequestValidator() {
-    return ComponentsLayoutRequestValidator.INSTANCE;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Requests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected ILayoutRequestValidator getRequestValidator() {
+		return ComponentsLayoutRequestValidator.INSTANCE;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IVisualDataProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public List<ComponentInfo> getAllComponents() {
-    List<ComponentInfo> components = Lists.newArrayList();
-    components.addAll(m_layout.getContainer().getChildrenComponents());
-    return components;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IVisualDataProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public List<ComponentInfo> getAllComponents() {
+		List<ComponentInfo> components = Lists.newArrayList();
+		components.addAll(m_layout.getContainer().getChildrenComponents());
+		return components;
+	}
 
-  public int getBaseline(IAbstractComponentInfo component) {
-    return BaselineSupportHelper.getBaseline(component.getObject());
-  }
+	public int getBaseline(IAbstractComponentInfo component) {
+		return BaselineSupportHelper.getBaseline(component.getObject());
+	}
 
-  public Dimension getComponentPreferredSize(IAbstractComponentInfo component) {
-    ComponentInfo componentInfo = (ComponentInfo) component;
-    return componentInfo.getPreferredSize();
-  }
+	public Dimension getComponentPreferredSize(IAbstractComponentInfo component) {
+		ComponentInfo componentInfo = (ComponentInfo) component;
+		return componentInfo.getPreferredSize();
+	}
 
-  public Dimension getContainerSize() {
-    IAbstractComponentInfo composite = m_layout.getContainer();
-    Rectangle compositeBounds = composite.getModelBounds().getCopy();
-    Insets clientAreaInsets = composite.getClientAreaInsets();
-    return compositeBounds.crop(clientAreaInsets).getSize();
-  }
+	public Dimension getContainerSize() {
+		IAbstractComponentInfo composite = m_layout.getContainer();
+		Rectangle compositeBounds = composite.getModelBounds().getCopy();
+		Insets clientAreaInsets = composite.getClientAreaInsets();
+		return compositeBounds.crop(clientAreaInsets).getSize();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Misc
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected ToolkitDescription getToolkit() {
-    return ToolkitProvider.DESCRIPTION;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Misc
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected ToolkitDescription getToolkit() {
+		return ToolkitProvider.DESCRIPTION;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/AbsoluteLayoutEditPolicy.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/AbsoluteLayoutEditPolicy.java
index 2e8765c4a..9fcbc16a5 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/AbsoluteLayoutEditPolicy.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/AbsoluteLayoutEditPolicy.java
@@ -53,224 +53,224 @@
  * @coverage swing.gef.policy
  */
 public final class AbsoluteLayoutEditPolicy extends AbsoluteBasedLayoutEditPolicy<ComponentInfo> {
-  private final AbstractAbsoluteLayoutInfo m_layout;
-  private final ILayoutStyleSupport m_layoutStyleSupport =
-      ExternalFactoriesHelper.getElementsInstances(
-          ILayoutStyleSupport.class,
-          ILayoutStyleSupport.LAYOUT_STYLE_POINT,
-          "support").get(0);
+	private final AbstractAbsoluteLayoutInfo m_layout;
+	private final ILayoutStyleSupport m_layoutStyleSupport =
+			ExternalFactoriesHelper.getElementsInstances(
+					ILayoutStyleSupport.class,
+					ILayoutStyleSupport.LAYOUT_STYLE_POINT,
+					"support").get(0);
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbsoluteLayoutEditPolicy(AbstractAbsoluteLayoutInfo layout) {
-    super(layout);
-    m_layout = layout;
-    m_layoutStyleSupport.setLayoutStyle(UIManager.getLookAndFeel());
-    createPlacementsSupport(IAbsoluteLayoutCommands.EMPTY);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbsoluteLayoutEditPolicy(AbstractAbsoluteLayoutInfo layout) {
+		super(layout);
+		m_layout = layout;
+		m_layoutStyleSupport.setLayoutStyle(UIManager.getLookAndFeel());
+		createPlacementsSupport(IAbsoluteLayoutCommands.EMPTY);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Requests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected ILayoutRequestValidator getRequestValidator() {
-    return ComponentsLayoutRequestValidator.INSTANCE;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Requests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected ILayoutRequestValidator getRequestValidator() {
+		return ComponentsLayoutRequestValidator.INSTANCE;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Selection Policy
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void decorateChild(EditPart child) {
-    Object childModel = child.getModel();
-    if (childModel instanceof ComponentInfo) {
-      EditPolicy policy = new AbsoluteLayoutSelectionEditPolicy<ComponentInfo>();
-      child.installEditPolicy(EditPolicy.SELECTION_ROLE, policy);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Selection Policy
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void decorateChild(EditPart child) {
+		Object childModel = child.getModel();
+		if (childModel instanceof ComponentInfo) {
+			EditPolicy policy = new AbsoluteLayoutSelectionEditPolicy<ComponentInfo>();
+			child.installEditPolicy(EditPolicy.SELECTION_ROLE, policy);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IVisualDataProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public List<ComponentInfo> getAllComponents() {
-    List<ComponentInfo> components = m_layout.getContainer().getChildrenComponents();
-    return Lists.newArrayList(components);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IVisualDataProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public List<ComponentInfo> getAllComponents() {
+		List<ComponentInfo> components = m_layout.getContainer().getChildrenComponents();
+		return Lists.newArrayList(components);
+	}
 
-  public int getBaseline(IAbstractComponentInfo component) {
-    return BaselineSupportHelper.getBaseline(((ComponentInfo) component).getComponent());
-  }
+	public int getBaseline(IAbstractComponentInfo component) {
+		return BaselineSupportHelper.getBaseline(((ComponentInfo) component).getComponent());
+	}
 
-  public Dimension getComponentPreferredSize(IAbstractComponentInfo component) {
-    ComponentInfo componentInfo = (ComponentInfo) component;
-    return componentInfo.getPreferredSize();
-  }
+	public Dimension getComponentPreferredSize(IAbstractComponentInfo component) {
+		ComponentInfo componentInfo = (ComponentInfo) component;
+		return componentInfo.getPreferredSize();
+	}
 
-  @Override
-  public int getComponentGapValue(IAbstractComponentInfo component1,
-      IAbstractComponentInfo component2,
-      int direction) {
-    ComponentInfo swingComponentInfo1 = (ComponentInfo) component1;
-    ComponentInfo swingComponentInfo2 = (ComponentInfo) component2;
-    // don't use LS if disabled or one of components are not instance of JComponent
-    if (!useLayoutStyle()
-        || !(swingComponentInfo1.getComponent() instanceof JComponent)
-        || !(swingComponentInfo2.getComponent() instanceof JComponent)) {
-      return super.getComponentGapValue(component1, component2, direction);
-    } else {
-      JComponent componentObject1 = (JComponent) swingComponentInfo1.getComponent();
-      JComponent componentObject2 = (JComponent) swingComponentInfo2.getComponent();
-      return m_layoutStyleSupport.getPreferredGap(componentObject1, componentObject2, 1, // use UNRELATED for AbsoluteLayout
-          direction,
-          componentObject1.getParent());
-    }
-  }
+	@Override
+	public int getComponentGapValue(IAbstractComponentInfo component1,
+			IAbstractComponentInfo component2,
+			int direction) {
+		ComponentInfo swingComponentInfo1 = (ComponentInfo) component1;
+		ComponentInfo swingComponentInfo2 = (ComponentInfo) component2;
+		// don't use LS if disabled or one of components are not instance of JComponent
+		if (!useLayoutStyle()
+				|| !(swingComponentInfo1.getComponent() instanceof JComponent)
+				|| !(swingComponentInfo2.getComponent() instanceof JComponent)) {
+			return super.getComponentGapValue(component1, component2, direction);
+		} else {
+			JComponent componentObject1 = (JComponent) swingComponentInfo1.getComponent();
+			JComponent componentObject2 = (JComponent) swingComponentInfo2.getComponent();
+			return m_layoutStyleSupport.getPreferredGap(componentObject1, componentObject2, 1, // use UNRELATED for AbsoluteLayout
+					direction,
+					componentObject1.getParent());
+		}
+	}
 
-  @Override
-  public int getContainerGapValue(IAbstractComponentInfo component, int direction) {
-    ComponentInfo swingComponentInfo = (ComponentInfo) component;
-    // don't use LS if disabled or component is not instance of JComponent
-    if (!useLayoutStyle() || !(swingComponentInfo.getComponent() instanceof JComponent)) {
-      return super.getContainerGapValue(component, direction);
-    } else {
-      JComponent jcomponentObject = (JComponent) swingComponentInfo.getComponent();
-      return m_layoutStyleSupport.getContainerGap(
-          jcomponentObject,
-          direction,
-          jcomponentObject.getParent());
-    }
-  }
+	@Override
+	public int getContainerGapValue(IAbstractComponentInfo component, int direction) {
+		ComponentInfo swingComponentInfo = (ComponentInfo) component;
+		// don't use LS if disabled or component is not instance of JComponent
+		if (!useLayoutStyle() || !(swingComponentInfo.getComponent() instanceof JComponent)) {
+			return super.getContainerGapValue(component, direction);
+		} else {
+			JComponent jcomponentObject = (JComponent) swingComponentInfo.getComponent();
+			return m_layoutStyleSupport.getContainerGap(
+					jcomponentObject,
+					direction,
+					jcomponentObject.getParent());
+		}
+	}
 
-  public Dimension getContainerSize() {
-    // TODO: insets?
-    return m_layout.getContainer().getModelBounds().getSize();
-  }
+	public Dimension getContainerSize() {
+		// TODO: insets?
+		return m_layout.getContainer().getModelBounds().getSize();
+	}
 
-  protected final boolean useLayoutStyle() {
-    return getPreferenceStore().getBoolean(IPreferenceConstants.P_USE_JDK_LAYOUT_STYLE);
-  }
+	protected final boolean useLayoutStyle() {
+		return getPreferenceStore().getBoolean(IPreferenceConstants.P_USE_JDK_LAYOUT_STYLE);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Paste
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void doPasteComponent(Point pasteLocation, PastedComponentInfo pastedWidget)
-      throws Exception {
-    ComponentInfo component = (ComponentInfo) pastedWidget.getComponent();
-    // create
-    Point location = pasteLocation.getTranslated(pastedWidget.getBounds().getLocation());
-    Dimension size = pastedWidget.getBounds().getSize();
-    m_layout.command_CREATE(component, null);
-    m_layout.command_BOUNDS(component, location, size);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Paste
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void doPasteComponent(Point pasteLocation, PastedComponentInfo pastedWidget)
+			throws Exception {
+		ComponentInfo component = (ComponentInfo) pastedWidget.getComponent();
+		// create
+		Point location = pasteLocation.getTranslated(pastedWidget.getBounds().getLocation());
+		Dimension size = pastedWidget.getBounds().getSize();
+		m_layout.command_CREATE(component, null);
+		m_layout.command_BOUNDS(component, location, size);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Command getMoveCommand(ChangeBoundsRequest request) {
-    final List<EditPart> editParts = request.getEditParts();
-    //
-    return new EditCommand(m_layout) {
-      @Override
-      protected void executeEdit() throws Exception {
-        ArrayList<IAbstractComponentInfo> models = Lists.newArrayList();
-        for (EditPart editPart : editParts) {
-          models.add((IAbstractComponentInfo) editPart.getModel());
-        }
-        placementsSupport.commit();
-        for (IAbstractComponentInfo widget : models) {
-          Rectangle bounds = widget.getModelBounds();
-          m_layout.command_BOUNDS((ComponentInfo) widget, bounds.getLocation(), null);
-        }
-      }
-    };
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Command getMoveCommand(ChangeBoundsRequest request) {
+		final List<EditPart> editParts = request.getEditParts();
+		//
+		return new EditCommand(m_layout) {
+			@Override
+			protected void executeEdit() throws Exception {
+				ArrayList<IAbstractComponentInfo> models = Lists.newArrayList();
+				for (EditPart editPart : editParts) {
+					models.add((IAbstractComponentInfo) editPart.getModel());
+				}
+				placementsSupport.commit();
+				for (IAbstractComponentInfo widget : models) {
+					Rectangle bounds = widget.getModelBounds();
+					m_layout.command_BOUNDS((ComponentInfo) widget, bounds.getLocation(), null);
+				}
+			}
+		};
+	}
 
-  @Override
-  protected Command getAddCommand(ChangeBoundsRequest request) {
-    final List<EditPart> editParts = request.getEditParts();
-    //
-    return new EditCommand(m_layout) {
-      @Override
-      protected void executeEdit() throws Exception {
-        ArrayList<IAbstractComponentInfo> models = Lists.newArrayList();
-        for (EditPart editPart : editParts) {
-          models.add((IAbstractComponentInfo) editPart.getModel());
-        }
-        placementsSupport.commitAdd();
-        for (IAbstractComponentInfo widget : models) {
-          ComponentInfo component = (ComponentInfo) widget;
-          Rectangle bounds = widget.getModelBounds();
-          m_layout.command_MOVE(component, null);
-          m_layout.command_BOUNDS(
-              component,
-              bounds.getLocation(),
-              widget.getModelBounds().getSize());
-        }
-      }
-    };
-  }
+	@Override
+	protected Command getAddCommand(ChangeBoundsRequest request) {
+		final List<EditPart> editParts = request.getEditParts();
+		//
+		return new EditCommand(m_layout) {
+			@Override
+			protected void executeEdit() throws Exception {
+				ArrayList<IAbstractComponentInfo> models = Lists.newArrayList();
+				for (EditPart editPart : editParts) {
+					models.add((IAbstractComponentInfo) editPart.getModel());
+				}
+				placementsSupport.commitAdd();
+				for (IAbstractComponentInfo widget : models) {
+					ComponentInfo component = (ComponentInfo) widget;
+					Rectangle bounds = widget.getModelBounds();
+					m_layout.command_MOVE(component, null);
+					m_layout.command_BOUNDS(
+							component,
+							bounds.getLocation(),
+							widget.getModelBounds().getSize());
+				}
+			}
+		};
+	}
 
-  @Override
-  protected Command getCreateCommand(CreateRequest request) {
-    final ComponentInfo component = (ComponentInfo) request.getNewObject();
-    return new EditCommand(m_layout) {
-      @Override
-      protected void executeEdit() throws Exception {
-        placementsSupport.commitAdd();
-        Rectangle bounds = component.getModelBounds();
-        m_layout.command_CREATE(component, null);
-        m_layout.command_BOUNDS(component, bounds.getLocation(), bounds.getSize());
-      }
-    };
-  }
+	@Override
+	protected Command getCreateCommand(CreateRequest request) {
+		final ComponentInfo component = (ComponentInfo) request.getNewObject();
+		return new EditCommand(m_layout) {
+			@Override
+			protected void executeEdit() throws Exception {
+				placementsSupport.commitAdd();
+				Rectangle bounds = component.getModelBounds();
+				m_layout.command_CREATE(component, null);
+				m_layout.command_BOUNDS(component, bounds.getLocation(), bounds.getSize());
+			}
+		};
+	}
 
-  @Override
-  protected Command getResizeCommand(final ChangeBoundsRequest request) {
-    return new EditCommand(m_layout) {
-      @Override
-      protected void executeEdit() throws Exception {
-        for (EditPart editPart : request.getEditParts()) {
-          IAbstractComponentInfo widget = (IAbstractComponentInfo) editPart.getModel();
-          Rectangle bounds = widget.getModelBounds();
-          m_layout.command_BOUNDS((ComponentInfo) widget, bounds.getLocation(), bounds.getSize());
-        }
-      }
-    };
-  }
+	@Override
+	protected Command getResizeCommand(final ChangeBoundsRequest request) {
+		return new EditCommand(m_layout) {
+			@Override
+			protected void executeEdit() throws Exception {
+				for (EditPart editPart : request.getEditParts()) {
+					IAbstractComponentInfo widget = (IAbstractComponentInfo) editPart.getModel();
+					Rectangle bounds = widget.getModelBounds();
+					m_layout.command_BOUNDS((ComponentInfo) widget, bounds.getLocation(), bounds.getSize());
+				}
+			}
+		};
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Selection Actions
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected AbstractAlignmentActionsSupport<ComponentInfo> getAlignmentActionsSupport() {
-    return new SelectionActionsSupport(m_layout);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Selection Actions
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected AbstractAlignmentActionsSupport<ComponentInfo> getAlignmentActionsSupport() {
+		return new SelectionActionsSupport(m_layout);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Misc
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected ToolkitDescription getToolkit() {
-    return ToolkitProvider.DESCRIPTION;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Misc
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected ToolkitDescription getToolkit() {
+		return ToolkitProvider.DESCRIPTION;
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/BorderLayoutEditPolicy.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/BorderLayoutEditPolicy.java
index 91a2e0190..6094fe289 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/BorderLayoutEditPolicy.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/BorderLayoutEditPolicy.java
@@ -28,78 +28,78 @@
  * @coverage swing.gef.policy
  */
 public final class BorderLayoutEditPolicy extends ComponentPositionLayoutEditPolicy<String> {
-  private final BorderLayoutInfo m_layout;
+	private final BorderLayoutInfo m_layout;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public BorderLayoutEditPolicy(BorderLayoutInfo layout) {
-    super(layout);
-    m_layout = layout;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public BorderLayoutEditPolicy(BorderLayoutInfo layout) {
+		super(layout);
+		m_layout = layout;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Requests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected ILayoutRequestValidator getRequestValidator() {
-    return ComponentsLayoutRequestValidator.INSTANCE_EXT;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Requests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected ILayoutRequestValidator getRequestValidator() {
+		return ComponentsLayoutRequestValidator.INSTANCE_EXT;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Feedbacks
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void addFeedbacks() throws Exception {
-    addFeedback(0, 0, 1, 0.25, new Insets(0, 0, 1, 0), "North", BorderLayout.NORTH, "NORTH");
-    addFeedback(0, 0.75, 1, 1, new Insets(1, 0, 0, 0), "South", BorderLayout.SOUTH, "SOUTH");
-    addFeedback(0, 0.25, 0.25, 0.75, new Insets(1, 0, 1, 1), "West", BorderLayout.WEST, "WEST");
-    addFeedback(0.75, 0.25, 1, 0.75, new Insets(1, 1, 1, 0), "East", BorderLayout.EAST, "EAST");
-    addFeedback(
-        0.25,
-        0.25,
-        0.75,
-        0.75,
-        new Insets(1, 1, 1, 1),
-        "Center",
-        BorderLayout.CENTER,
-        "CENTER");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Feedbacks
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void addFeedbacks() throws Exception {
+		addFeedback(0, 0, 1, 0.25, new Insets(0, 0, 1, 0), "North", BorderLayout.NORTH, "NORTH");
+		addFeedback(0, 0.75, 1, 1, new Insets(1, 0, 0, 0), "South", BorderLayout.SOUTH, "SOUTH");
+		addFeedback(0, 0.25, 0.25, 0.75, new Insets(1, 0, 1, 1), "West", BorderLayout.WEST, "WEST");
+		addFeedback(0.75, 0.25, 1, 0.75, new Insets(1, 1, 1, 0), "East", BorderLayout.EAST, "EAST");
+		addFeedback(
+				0.25,
+				0.25,
+				0.75,
+				0.75,
+				new Insets(1, 1, 1, 1),
+				"Center",
+				BorderLayout.CENTER,
+				"CENTER");
+	}
 
-  /**
-   * Adds feedback for given constraints.
-   */
-  private void addFeedback(double px1,
-      double py1,
-      double px2,
-      double py2,
-      Insets insets,
-      String hint,
-      String region,
-      String regionField) throws Exception {
-    if (m_layout.getComponent(region) == null) {
-      addFeedback(px1, py1, px2, py2, insets, hint, region);
-    }
-  }
+	/**
+	 * Adds feedback for given constraints.
+	 */
+	private void addFeedback(double px1,
+			double py1,
+			double px2,
+			double py2,
+			Insets insets,
+			String hint,
+			String region,
+			String regionField) throws Exception {
+		if (m_layout.getComponent(region) == null) {
+			addFeedback(px1, py1, px2, py2, insets, hint, region);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Implementation of commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void command_CREATE(ComponentInfo component, String data) throws Exception {
-    m_layout.command_CREATE(component, data);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Implementation of commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void command_CREATE(ComponentInfo component, String data) throws Exception {
+		m_layout.command_CREATE(component, data);
+	}
 
-  @Override
-  protected void command_MOVE(ComponentInfo component, String data) throws Exception {
-    m_layout.command_MOVE(component, data);
-  }
+	@Override
+	protected void command_MOVE(ComponentInfo component, String data) throws Exception {
+		m_layout.command_MOVE(component, data);
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/BoxLayoutEditPolicy.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/BoxLayoutEditPolicy.java
index bf4ce0d5b..ee254bdcd 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/BoxLayoutEditPolicy.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/BoxLayoutEditPolicy.java
@@ -21,25 +21,25 @@
  * @coverage swing.gef.policy
  */
 public final class BoxLayoutEditPolicy extends GenericFlowLayoutEditPolicy {
-  private final BoxLayoutInfo m_layout;
+	private final BoxLayoutInfo m_layout;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public BoxLayoutEditPolicy(BoxLayoutInfo layout) {
-    super(layout);
-    m_layout = layout;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public BoxLayoutEditPolicy(BoxLayoutInfo layout) {
+		super(layout);
+		m_layout = layout;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AbstractFlowLayoutEditPolicy
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected boolean isHorizontal(Request request) {
-    return m_layout.isHorizontal();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AbstractFlowLayoutEditPolicy
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected boolean isHorizontal(Request request) {
+		return m_layout.isHorizontal();
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/CardLayoutEditPolicy.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/CardLayoutEditPolicy.java
index 7b43b1690..be8afb0a1 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/CardLayoutEditPolicy.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/CardLayoutEditPolicy.java
@@ -25,64 +25,64 @@
  * @coverage swing.gef.policy
  */
 public final class CardLayoutEditPolicy extends ComponentFlowLayoutEditPolicy {
-  private final CardLayoutInfo m_layout;
+	private final CardLayoutInfo m_layout;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CardLayoutEditPolicy(CardLayoutInfo layout) {
-    super(layout);
-    m_layout = layout;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CardLayoutEditPolicy(CardLayoutInfo layout) {
+		super(layout);
+		m_layout = layout;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Requests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected boolean isHorizontal(Request request) {
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Requests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected boolean isHorizontal(Request request) {
+		return true;
+	}
 
-  @Override
-  protected boolean isGoodReferenceChild(Request request, EditPart editPart) {
-    if (editPart.getModel() instanceof ComponentInfo) {
-      ComponentInfo component = (ComponentInfo) editPart.getModel();
-      return m_layout.isManagedObject(component);
-    }
-    return false;
-  }
+	@Override
+	protected boolean isGoodReferenceChild(Request request, EditPart editPart) {
+		if (editPart.getModel() instanceof ComponentInfo) {
+			ComponentInfo component = (ComponentInfo) editPart.getModel();
+			return m_layout.isManagedObject(component);
+		}
+		return false;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Children
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void decorateChild(EditPart child) {
-    Object model = child.getModel();
-    if (m_layout.isManagedObject(model)) {
-      EditPolicy policy = new CardLayoutSelectionEditPolicy(m_layout);
-      child.installEditPolicy(EditPolicy.SELECTION_ROLE, policy);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Children
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void decorateChild(EditPart child) {
+		Object model = child.getModel();
+		if (m_layout.isManagedObject(model)) {
+			EditPolicy policy = new CardLayoutSelectionEditPolicy(m_layout);
+			child.installEditPolicy(EditPolicy.SELECTION_ROLE, policy);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Command
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void command_CREATE(ComponentInfo newObject, ComponentInfo referenceObject)
-      throws Exception {
-    m_layout.command_CREATE(newObject, referenceObject);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Command
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void command_CREATE(ComponentInfo newObject, ComponentInfo referenceObject)
+			throws Exception {
+		m_layout.command_CREATE(newObject, referenceObject);
+	}
 
-  @Override
-  protected void command_MOVE(ComponentInfo object, ComponentInfo referenceObject) throws Exception {
-    m_layout.command_MOVE(object, referenceObject);
-  }
+	@Override
+	protected void command_MOVE(ComponentInfo object, ComponentInfo referenceObject) throws Exception {
+		m_layout.command_MOVE(object, referenceObject);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/CardLayoutSelectionEditPolicy.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/CardLayoutSelectionEditPolicy.java
index 1de3491f8..f57e170fd 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/CardLayoutSelectionEditPolicy.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/CardLayoutSelectionEditPolicy.java
@@ -38,118 +38,118 @@
  * @coverage swing.gef.policy
  */
 public final class CardLayoutSelectionEditPolicy extends SelectionEditPolicy {
-  private final CardLayoutInfo m_layout;
-  private CardNavigationFigure m_navigationFigure;
+	private final CardLayoutInfo m_layout;
+	private CardNavigationFigure m_navigationFigure;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CardLayoutSelectionEditPolicy(CardLayoutInfo layout) {
-    m_layout = layout;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CardLayoutSelectionEditPolicy(CardLayoutInfo layout) {
+		m_layout = layout;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Handles
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected List<Handle> createSelectionHandles() {
-    List<Handle> handles = Lists.newArrayList();
-    handles.add(new MoveHandle(getHost()));
-    handles.add(createHandle(IPositionConstants.SOUTH_EAST));
-    handles.add(createHandle(IPositionConstants.SOUTH_WEST));
-    handles.add(createHandle(IPositionConstants.NORTH_WEST));
-    handles.add(createHandle(IPositionConstants.NORTH_EAST));
-    return handles;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Handles
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected List<Handle> createSelectionHandles() {
+		List<Handle> handles = Lists.newArrayList();
+		handles.add(new MoveHandle(getHost()));
+		handles.add(createHandle(IPositionConstants.SOUTH_EAST));
+		handles.add(createHandle(IPositionConstants.SOUTH_WEST));
+		handles.add(createHandle(IPositionConstants.NORTH_WEST));
+		handles.add(createHandle(IPositionConstants.NORTH_EAST));
+		return handles;
+	}
 
-  /**
-   * @return the {@link ResizeHandle} for given direction.
-   */
-  private Handle createHandle(int direction) {
-    ResizeHandle handle = new ResizeHandle(getHost(), direction);
-    ResizeTracker tracker = new ResizeTracker(direction, null);
-    tracker.setDefaultCursor(ICursorConstants.SIZEALL);
-    handle.setDragTrackerTool(tracker);
-    handle.setCursor(ICursorConstants.SIZEALL);
-    return handle;
-  }
+	/**
+	 * @return the {@link ResizeHandle} for given direction.
+	 */
+	private Handle createHandle(int direction) {
+		ResizeHandle handle = new ResizeHandle(getHost(), direction);
+		ResizeTracker tracker = new ResizeTracker(direction, null);
+		tracker.setDefaultCursor(ICursorConstants.SIZEALL);
+		handle.setDragTrackerTool(tracker);
+		handle.setCursor(ICursorConstants.SIZEALL);
+		return handle;
+	}
 
-  @Override
-  protected void showSelection() {
-    super.showSelection();
-    // add navigate feedback
-    if (m_navigationFigure == null) {
-      m_navigationFigure = new CardNavigationFigure(this);
-      Figure hostFigure = getHostFigure();
-      Rectangle bounds = hostFigure.getBounds().getCopy();
-      FigureUtils.translateFigureToAbsolute(hostFigure, bounds);
-      m_navigationFigure.setBounds(new Rectangle(bounds.right()
-          - CardNavigationFigure.WIDTH
-          * 2
-          - 3,
-          bounds.y - CardNavigationFigure.HEIGHT / 2,
-          CardNavigationFigure.WIDTH * 2,
-          CardNavigationFigure.HEIGHT));
-      addFeedback(m_navigationFigure);
-    }
-  }
+	@Override
+	protected void showSelection() {
+		super.showSelection();
+		// add navigate feedback
+		if (m_navigationFigure == null) {
+			m_navigationFigure = new CardNavigationFigure(this);
+			Figure hostFigure = getHostFigure();
+			Rectangle bounds = hostFigure.getBounds().getCopy();
+			FigureUtils.translateFigureToAbsolute(hostFigure, bounds);
+			m_navigationFigure.setBounds(new Rectangle(bounds.right()
+					- CardNavigationFigure.WIDTH
+					* 2
+					- 3,
+					bounds.y - CardNavigationFigure.HEIGHT / 2,
+					CardNavigationFigure.WIDTH * 2,
+					CardNavigationFigure.HEIGHT));
+			addFeedback(m_navigationFigure);
+		}
+	}
 
-  @Override
-  protected void hideSelection() {
-    super.hideSelection();
-    // remove navigate feedback
-    if (m_navigationFigure != null) {
-      removeFeedback(m_navigationFigure);
-      m_navigationFigure = null;
-    }
-  }
+	@Override
+	protected void hideSelection() {
+		super.hideSelection();
+		// remove navigate feedback
+		if (m_navigationFigure != null) {
+			removeFeedback(m_navigationFigure);
+			m_navigationFigure = null;
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Selection
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets show previous component relative of current.
-   */
-  public void showPrevComponent() {
-    IEditPartViewer viewer = getHost().getViewer();
-    // show previous component
-    ComponentInfo component = m_layout.getPrevComponent();
-    m_layout.show(component);
-    // select EditPart
-    EditPart editPart = viewer.getEditPartByModel(component);
-    viewer.select(editPart);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Selection
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets show previous component relative of current.
+	 */
+	public void showPrevComponent() {
+		IEditPartViewer viewer = getHost().getViewer();
+		// show previous component
+		ComponentInfo component = m_layout.getPrevComponent();
+		m_layout.show(component);
+		// select EditPart
+		EditPart editPart = viewer.getEditPartByModel(component);
+		viewer.select(editPart);
+	}
 
-  /**
-   * Sets show next component relative of current.
-   */
-  public void showNextComponent() {
-    IEditPartViewer viewer = getHost().getViewer();
-    // show next component
-    ComponentInfo component = m_layout.getNextComponent();
-    m_layout.show(component);
-    // select EditPart
-    EditPart editPart = viewer.getEditPartByModel(component);
-    viewer.select(editPart);
-  }
+	/**
+	 * Sets show next component relative of current.
+	 */
+	public void showNextComponent() {
+		IEditPartViewer viewer = getHost().getViewer();
+		// show next component
+		ComponentInfo component = m_layout.getNextComponent();
+		m_layout.show(component);
+		// select EditPart
+		EditPart editPart = viewer.getEditPartByModel(component);
+		viewer.select(editPart);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Request
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public EditPart getTargetEditPart(Request request) {
-    if (Request.REQ_SELECTION.equals(request.getType())) {
-      ComponentInfo component = m_layout.getCurrentComponent();
-      return getHost().getViewer().getEditPartByModel(component);
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Request
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public EditPart getTargetEditPart(Request request) {
+		if (Request.REQ_SELECTION.equals(request.getType())) {
+			ComponentInfo component = m_layout.getCurrentComponent();
+			return getHost().getViewer().getEditPartByModel(component);
+		}
+		return null;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/CardNavigationFigure.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/CardNavigationFigure.java
index 99a895e71..de339ced0 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/CardNavigationFigure.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/CardNavigationFigure.java
@@ -25,48 +25,48 @@
  * @coverage swing.gef.policy
  */
 public final class CardNavigationFigure extends Figure {
-  public static final int WIDTH = 10;
-  public static final int HEIGHT = 14;
-  private static Image m_prevImage = new Image(null,
-      CardNavigationFigure.class.getResourceAsStream("prev.png"));
-  private static Image m_nextImage = new Image(null,
-      CardNavigationFigure.class.getResourceAsStream("next.png"));
-  private final CardLayoutSelectionEditPolicy m_policy;
+	public static final int WIDTH = 10;
+	public static final int HEIGHT = 14;
+	private static Image m_prevImage = new Image(null,
+			CardNavigationFigure.class.getResourceAsStream("prev.png"));
+	private static Image m_nextImage = new Image(null,
+			CardNavigationFigure.class.getResourceAsStream("next.png"));
+	private final CardLayoutSelectionEditPolicy m_policy;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CardNavigationFigure(CardLayoutSelectionEditPolicy policy) {
-    m_policy = policy;
-    addMouseListener(new IMouseListener() {
-      public void mouseUp(MouseEvent event) {
-      }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CardNavigationFigure(CardLayoutSelectionEditPolicy policy) {
+		m_policy = policy;
+		addMouseListener(new IMouseListener() {
+			public void mouseUp(MouseEvent event) {
+			}
 
-      public void mouseDown(MouseEvent event) {
-        event.consume();
-        if (event.x < WIDTH) {
-          m_policy.showPrevComponent();
-        } else {
-          m_policy.showNextComponent();
-        }
-      }
+			public void mouseDown(MouseEvent event) {
+				event.consume();
+				if (event.x < WIDTH) {
+					m_policy.showPrevComponent();
+				} else {
+					m_policy.showNextComponent();
+				}
+			}
 
-      public void mouseDoubleClick(MouseEvent event) {
-      }
-    });
-  }
+			public void mouseDoubleClick(MouseEvent event) {
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Figure
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void paintClientArea(Graphics graphics) {
-    Rectangle r = getClientArea();
-    graphics.drawImage(m_prevImage, r.x, r.y);
-    graphics.drawImage(m_nextImage, r.x + WIDTH, r.y);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Figure
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void paintClientArea(Graphics graphics) {
+		Rectangle r = getClientArea();
+		graphics.drawImage(m_prevImage, r.x, r.y);
+		graphics.drawImage(m_nextImage, r.x + WIDTH, r.y);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/DropLayoutEditPolicy.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/DropLayoutEditPolicy.java
index 925f404f6..97991519a 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/DropLayoutEditPolicy.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/DropLayoutEditPolicy.java
@@ -29,57 +29,57 @@
  * @coverage swing.gef.policy
  */
 public final class DropLayoutEditPolicy extends LayoutEditPolicy {
-  private static final ILayoutRequestValidator VALIDATOR =
-      LayoutRequestValidators.modelType(LayoutInfo.class);
-  private final ContainerInfo m_container;
+	private static final ILayoutRequestValidator VALIDATOR =
+			LayoutRequestValidators.modelType(LayoutInfo.class);
+	private final ContainerInfo m_container;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DropLayoutEditPolicy(ContainerInfo container) {
-    m_container = container;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DropLayoutEditPolicy(ContainerInfo container) {
+		m_container = container;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Requests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected ILayoutRequestValidator getRequestValidator() {
-    return VALIDATOR;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Requests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected ILayoutRequestValidator getRequestValidator() {
+		return VALIDATOR;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Feedback
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void showLayoutTargetFeedback(Request request) {
-    PolicyUtils.showBorderTargetFeedback(this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Feedback
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void showLayoutTargetFeedback(Request request) {
+		PolicyUtils.showBorderTargetFeedback(this);
+	}
 
-  @Override
-  protected void eraseLayoutTargetFeedback(Request request) {
-    PolicyUtils.eraseBorderTargetFeedback(this);
-  }
+	@Override
+	protected void eraseLayoutTargetFeedback(Request request) {
+		PolicyUtils.eraseBorderTargetFeedback(this);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Command
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Command getCreateCommand(CreateRequest request) {
-    final LayoutInfo newLayout = (LayoutInfo) request.getNewObject();
-    return new EditCommand(m_container) {
-      @Override
-      protected void executeEdit() throws Exception {
-        m_container.setLayout(newLayout);
-      }
-    };
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Command
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Command getCreateCommand(CreateRequest request) {
+		final LayoutInfo newLayout = (LayoutInfo) request.getNewObject();
+		return new EditCommand(m_container) {
+			@Override
+			protected void executeEdit() throws Exception {
+				m_container.setLayout(newLayout);
+			}
+		};
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/FlowLayoutEditPolicy.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/FlowLayoutEditPolicy.java
index dedbe6ece..d02df4493 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/FlowLayoutEditPolicy.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/FlowLayoutEditPolicy.java
@@ -22,25 +22,25 @@
  * @coverage swing.gef.policy
  */
 public final class FlowLayoutEditPolicy extends GenericFlowLayoutEditPolicy {
-  private final FlowLayoutInfo m_layout;
+	private final FlowLayoutInfo m_layout;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FlowLayoutEditPolicy(FlowLayoutInfo layout) {
-    super(layout);
-    m_layout = layout;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FlowLayoutEditPolicy(FlowLayoutInfo layout) {
+		super(layout);
+		m_layout = layout;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AbstractFlowLayoutEditPolicy
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected boolean isHorizontal(Request request) {
-    return JavaInfoUtils.hasTrueParameter(m_layout, "FlowLayout.horizontal");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AbstractFlowLayoutEditPolicy
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected boolean isHorizontal(Request request) {
+		return JavaInfoUtils.hasTrueParameter(m_layout, "FlowLayout.horizontal");
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/GenericFlowLayoutEditPolicy.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/GenericFlowLayoutEditPolicy.java
index 41cb051aa..b6fb0314e 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/GenericFlowLayoutEditPolicy.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/GenericFlowLayoutEditPolicy.java
@@ -28,64 +28,64 @@
  * @coverage swing.gef.policy
  */
 public abstract class GenericFlowLayoutEditPolicy extends ComponentFlowLayoutEditPolicy {
-  private final GenericFlowLayoutInfo m_layout;
+	private final GenericFlowLayoutInfo m_layout;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public GenericFlowLayoutEditPolicy(GenericFlowLayoutInfo layout) {
-    super(layout);
-    m_layout = layout;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public GenericFlowLayoutEditPolicy(GenericFlowLayoutInfo layout) {
+		super(layout);
+		m_layout = layout;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected boolean isRtl(Request request) {
-    return m_layout.getContainer().isRTL();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected boolean isRtl(Request request) {
+		return m_layout.getContainer().isRTL();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Decoration
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void decorateChild(EditPart child) {
-    if (child.getModel() instanceof ComponentInfo) {
-      child.installEditPolicy(EditPolicy.SELECTION_ROLE, new NonResizableSelectionEditPolicy());
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Decoration
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void decorateChild(EditPart child) {
+		if (child.getModel() instanceof ComponentInfo) {
+			child.installEditPolicy(EditPolicy.SELECTION_ROLE, new NonResizableSelectionEditPolicy());
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AbstractFlowLayoutEditPolicy
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected final boolean isGoodReferenceChild(Request request, EditPart editPart) {
-    Object model = editPart.getModel();
-    return model instanceof ComponentInfo && GlobalState.getValidatorHelper().canReference(model);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AbstractFlowLayoutEditPolicy
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected final boolean isGoodReferenceChild(Request request, EditPart editPart) {
+		Object model = editPart.getModel();
+		return model instanceof ComponentInfo && GlobalState.getValidatorHelper().canReference(model);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void command_CREATE(ComponentInfo newObject, ComponentInfo referenceObject)
-      throws Exception {
-    m_layout.add(newObject, referenceObject);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void command_CREATE(ComponentInfo newObject, ComponentInfo referenceObject)
+			throws Exception {
+		m_layout.add(newObject, referenceObject);
+	}
 
-  @Override
-  protected void command_MOVE(ComponentInfo object, ComponentInfo referenceObject) throws Exception {
-    m_layout.move(object, referenceObject);
-  }
+	@Override
+	protected void command_MOVE(ComponentInfo object, ComponentInfo referenceObject) throws Exception {
+		m_layout.move(object, referenceObject);
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/GridLayoutEditPolicy.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/GridLayoutEditPolicy.java
index 7a101cac0..1913125e9 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/GridLayoutEditPolicy.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/GridLayoutEditPolicy.java
@@ -21,22 +21,22 @@
  * @coverage swing.gef.policy
  */
 public final class GridLayoutEditPolicy extends GenericFlowLayoutEditPolicy {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public GridLayoutEditPolicy(GridLayoutInfo layout) {
-    super(layout);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public GridLayoutEditPolicy(GridLayoutInfo layout) {
+		super(layout);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AbstractFlowLayoutEditPolicy
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected boolean isHorizontal(Request request) {
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AbstractFlowLayoutEditPolicy
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected boolean isHorizontal(Request request) {
+		return true;
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/LayoutEditPolicyFactory.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/LayoutEditPolicyFactory.java
index 2ada0aeff..f0a6be063 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/LayoutEditPolicyFactory.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/LayoutEditPolicyFactory.java
@@ -31,37 +31,37 @@
  * @coverage swing.gef.policy
  */
 public final class LayoutEditPolicyFactory implements ILayoutEditPolicyFactory {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ILayoutEditPolicyFactory
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public LayoutEditPolicy createLayoutEditPolicy(EditPart context, Object model) {
-    if (model instanceof AbstractAbsoluteLayoutInfo) {
-      return new AbsoluteLayoutEditPolicy((AbstractAbsoluteLayoutInfo) model);
-    }
-    if (model instanceof BorderLayoutInfo) {
-      return new BorderLayoutEditPolicy((BorderLayoutInfo) model);
-    }
-    if (model instanceof CardLayoutInfo) {
-      return new CardLayoutEditPolicy((CardLayoutInfo) model);
-    }
-    if (model instanceof FlowLayoutInfo) {
-      return new FlowLayoutEditPolicy((FlowLayoutInfo) model);
-    }
-    if (model instanceof GridLayoutInfo) {
-      return new GridLayoutEditPolicy((GridLayoutInfo) model);
-    }
-    if (model instanceof BoxLayoutInfo) {
-      return new BoxLayoutEditPolicy((BoxLayoutInfo) model);
-    }
-    if (model instanceof AbstractGridBagLayoutInfo) {
-      return new GridBagLayoutEditPolicy((AbstractGridBagLayoutInfo) model);
-    }
-    if (model instanceof SpringLayoutInfo) {
-      return new SpringLayoutEditPolicy((SpringLayoutInfo) model);
-    }
-    // not found
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ILayoutEditPolicyFactory
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public LayoutEditPolicy createLayoutEditPolicy(EditPart context, Object model) {
+		if (model instanceof AbstractAbsoluteLayoutInfo) {
+			return new AbsoluteLayoutEditPolicy((AbstractAbsoluteLayoutInfo) model);
+		}
+		if (model instanceof BorderLayoutInfo) {
+			return new BorderLayoutEditPolicy((BorderLayoutInfo) model);
+		}
+		if (model instanceof CardLayoutInfo) {
+			return new CardLayoutEditPolicy((CardLayoutInfo) model);
+		}
+		if (model instanceof FlowLayoutInfo) {
+			return new FlowLayoutEditPolicy((FlowLayoutInfo) model);
+		}
+		if (model instanceof GridLayoutInfo) {
+			return new GridLayoutEditPolicy((GridLayoutInfo) model);
+		}
+		if (model instanceof BoxLayoutInfo) {
+			return new BoxLayoutEditPolicy((BoxLayoutInfo) model);
+		}
+		if (model instanceof AbstractGridBagLayoutInfo) {
+			return new GridBagLayoutEditPolicy((AbstractGridBagLayoutInfo) model);
+		}
+		if (model instanceof SpringLayoutInfo) {
+			return new SpringLayoutEditPolicy((SpringLayoutInfo) model);
+		}
+		// not found
+		return null;
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/SpringLayoutEditPolicy.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/SpringLayoutEditPolicy.java
index 032b00f05..312479ff3 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/SpringLayoutEditPolicy.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/SpringLayoutEditPolicy.java
@@ -41,176 +41,176 @@
  * @coverage swing.gef.policy
  */
 public final class SpringLayoutEditPolicy extends AbsoluteBasedLayoutEditPolicySwing {
-  private final SpringLayoutInfo m_layout;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SpringLayoutEditPolicy(SpringLayoutInfo layout) {
-    super(layout);
-    m_layout = layout;
-    createPlacementsSupport(m_layout);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Decorate Child
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void decorateChild(EditPart child) {
-    Object model = child.getModel();
-    if (model instanceof ComponentInfo) {
-      child.installEditPolicy(EditPolicy.SELECTION_ROLE, new SpringSelectionEditPolicy(m_layout));
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Coordinates
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Dimension getContainerSize() {
-    // TODO check this
-    /*ScrollableInfo composite = m_layout.getComposite();
+	private final SpringLayoutInfo m_layout;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SpringLayoutEditPolicy(SpringLayoutInfo layout) {
+		super(layout);
+		m_layout = layout;
+		createPlacementsSupport(m_layout);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Decorate Child
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void decorateChild(EditPart child) {
+		Object model = child.getModel();
+		if (model instanceof ComponentInfo) {
+			child.installEditPolicy(EditPolicy.SELECTION_ROLE, new SpringSelectionEditPolicy(m_layout));
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Coordinates
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Dimension getContainerSize() {
+		// TODO check this
+		/*ScrollableInfo composite = m_layout.getComposite();
     return composite.getClientArea().getSize();*/
-    ContainerInfo container = m_layout.getContainer();
-    Rectangle bounds = container.getModelBounds().getCopy();
-    bounds.crop(container.getInsets());
-    return bounds.getSize();
-  }
-
-  @Override
-  public Point getClientAreaOffset() {
-    // TODO check this
-    /*return m_layout.getContainer().getClientArea().getLocation();*/
-    //return new Point(0, 0);
-    Insets insets = m_layout.getContainer().getInsets();
-    return new Point(insets.left, insets.top);
-  }
-
-  @Override
-  protected void translateAbsoluteToModel(Translatable t) {
-    super.translateAbsoluteToModel(t);
-    t.performTranslate(getClientAreaOffset().getNegated());
-  }
-
-  @Override
-  protected void translateModelToFeedback(Translatable t) {
-    super.translateModelToFeedback(t);
-    t.performTranslate(getClientAreaOffset());
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Move
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void eraseSelectionFeedbacks() {
-    super.eraseSelectionFeedbacks();
-    for (EditPart child : getHost().getChildren()) {
-      if (child.getModel() instanceof ComponentInfo) {
-        SpringSelectionEditPolicy editPolicy =
-            (SpringSelectionEditPolicy) child.getEditPolicy(EditPolicy.SELECTION_ROLE);
-        editPolicy.hideSelection();
-      }
-    }
-  }
-
-  @Override
-  protected void showSelectionFeedbacks() {
-    super.showSelectionFeedbacks();
-    for (EditPart child : getHost().getChildren()) {
-      if (child.getModel() instanceof ComponentInfo
-          && child.getSelected() != EditPart.SELECTED_NONE) {
-        SpringSelectionEditPolicy editPolicy =
-            (SpringSelectionEditPolicy) child.getEditPolicy(EditPolicy.SELECTION_ROLE);
-        editPolicy.showSelection();
-      }
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Create
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Command getCreateCommand(final CreateRequest request) {
-    return new EditCommand(m_layout) {
-      @Override
-      protected void executeEdit() throws Exception {
-        ComponentInfo component = (ComponentInfo) request.getNewObject();
-        m_layout.command_CREATE(component, null);
-        placementsSupport.commitAdd();
-      }
-    };
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Move
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Command getMoveCommand(final ChangeBoundsRequest request) {
-    return new EditCommand(m_layout) {
-      @Override
-      protected void executeEdit() throws Exception {
-        placementsSupport.commit();
-      }
-    };
-  }
-
-  @Override
-  protected Command getAddCommand(ChangeBoundsRequest request) {
-    final List<EditPart> editParts = request.getEditParts();
-    //
-    return new EditCommand(m_layout) {
-      @Override
-      protected void executeEdit() throws Exception {
-        for (EditPart editPart : editParts) {
-          ComponentInfo component = (ComponentInfo) editPart.getModel();
-          m_layout.command_ADD(component, null);
-        }
-        placementsSupport.commitAdd();
-      }
-    };
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Paste
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void doPasteComponent(Point pasteLocation, PastedComponentInfo pastedWidget)
-      throws Exception {
-    ComponentInfo control = (ComponentInfo) pastedWidget.getComponent();
-    m_layout.command_CREATE(control, null);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Selection Actions
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected AbstractAlignmentActionsSupport<ComponentInfo> getAlignmentActionsSupport() {
-    return new ComplexAlignmentActionsSupport<ComponentInfo>(placementsSupport) {
-      @Override
-      protected boolean isComponentInfo(ObjectInfo object) {
-        return object instanceof ComponentInfo;
-      }
-
-      @Override
-      protected AbstractComponentInfo getLayoutContainer() {
-        return m_layout.getContainer();
-      }
-    };
-  }
+		ContainerInfo container = m_layout.getContainer();
+		Rectangle bounds = container.getModelBounds().getCopy();
+		bounds.crop(container.getInsets());
+		return bounds.getSize();
+	}
+
+	@Override
+	public Point getClientAreaOffset() {
+		// TODO check this
+		/*return m_layout.getContainer().getClientArea().getLocation();*/
+		//return new Point(0, 0);
+		Insets insets = m_layout.getContainer().getInsets();
+		return new Point(insets.left, insets.top);
+	}
+
+	@Override
+	protected void translateAbsoluteToModel(Translatable t) {
+		super.translateAbsoluteToModel(t);
+		t.performTranslate(getClientAreaOffset().getNegated());
+	}
+
+	@Override
+	protected void translateModelToFeedback(Translatable t) {
+		super.translateModelToFeedback(t);
+		t.performTranslate(getClientAreaOffset());
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Move
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void eraseSelectionFeedbacks() {
+		super.eraseSelectionFeedbacks();
+		for (EditPart child : getHost().getChildren()) {
+			if (child.getModel() instanceof ComponentInfo) {
+				SpringSelectionEditPolicy editPolicy =
+						(SpringSelectionEditPolicy) child.getEditPolicy(EditPolicy.SELECTION_ROLE);
+				editPolicy.hideSelection();
+			}
+		}
+	}
+
+	@Override
+	protected void showSelectionFeedbacks() {
+		super.showSelectionFeedbacks();
+		for (EditPart child : getHost().getChildren()) {
+			if (child.getModel() instanceof ComponentInfo
+					&& child.getSelected() != EditPart.SELECTED_NONE) {
+				SpringSelectionEditPolicy editPolicy =
+						(SpringSelectionEditPolicy) child.getEditPolicy(EditPolicy.SELECTION_ROLE);
+				editPolicy.showSelection();
+			}
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Create
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Command getCreateCommand(final CreateRequest request) {
+		return new EditCommand(m_layout) {
+			@Override
+			protected void executeEdit() throws Exception {
+				ComponentInfo component = (ComponentInfo) request.getNewObject();
+				m_layout.command_CREATE(component, null);
+				placementsSupport.commitAdd();
+			}
+		};
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Move
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Command getMoveCommand(final ChangeBoundsRequest request) {
+		return new EditCommand(m_layout) {
+			@Override
+			protected void executeEdit() throws Exception {
+				placementsSupport.commit();
+			}
+		};
+	}
+
+	@Override
+	protected Command getAddCommand(ChangeBoundsRequest request) {
+		final List<EditPart> editParts = request.getEditParts();
+		//
+		return new EditCommand(m_layout) {
+			@Override
+			protected void executeEdit() throws Exception {
+				for (EditPart editPart : editParts) {
+					ComponentInfo component = (ComponentInfo) editPart.getModel();
+					m_layout.command_ADD(component, null);
+				}
+				placementsSupport.commitAdd();
+			}
+		};
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Paste
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void doPasteComponent(Point pasteLocation, PastedComponentInfo pastedWidget)
+			throws Exception {
+		ComponentInfo control = (ComponentInfo) pastedWidget.getComponent();
+		m_layout.command_CREATE(control, null);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Selection Actions
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected AbstractAlignmentActionsSupport<ComponentInfo> getAlignmentActionsSupport() {
+		return new ComplexAlignmentActionsSupport<ComponentInfo>(placementsSupport) {
+			@Override
+			protected boolean isComponentInfo(ObjectInfo object) {
+				return object instanceof ComponentInfo;
+			}
+
+			@Override
+			protected AbstractComponentInfo getLayoutContainer() {
+				return m_layout.getContainer();
+			}
+		};
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/SpringSelectionEditPolicy.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/SpringSelectionEditPolicy.java
index 446bb1eb8..dbd122d5e 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/SpringSelectionEditPolicy.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/SpringSelectionEditPolicy.java
@@ -26,40 +26,40 @@
  * @coverage swing.gef.policy
  */
 public final class SpringSelectionEditPolicy extends AbsoluteComplexSelectionEditPolicy {
-  private final SpringLayoutInfo m_layout;
+	private final SpringLayoutInfo m_layout;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SpringSelectionEditPolicy(SpringLayoutInfo layout) {
-    super(layout);
-    m_layout = layout;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SpringSelectionEditPolicy(SpringLayoutInfo layout) {
+		super(layout);
+		m_layout = layout;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Overrides
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public Image getActionImage(String imageName) {
-    return SpringLayoutInfo.getImage(imageName);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Overrides
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public Image getActionImage(String imageName) {
+		return SpringLayoutInfo.getImage(imageName);
+	}
 
-  @Override
-  protected ComponentAttachmentInfo getComponentAttachmentInfo(IAbstractComponentInfo widget,
-      int side) throws Exception {
-    return m_layout.getComponentAttachmentInfo(widget, side);
-  }
+	@Override
+	protected ComponentAttachmentInfo getComponentAttachmentInfo(IAbstractComponentInfo widget,
+			int side) throws Exception {
+		return m_layout.getComponentAttachmentInfo(widget, side);
+	}
 
-  @Override
-  protected void showSelection() {
-    super.showSelection();
-  }
+	@Override
+	protected void showSelection() {
+		super.showSelection();
+	}
 
-  @Override
-  protected void hideSelection() {
-    super.hideSelection();
-  }
+	@Override
+	protected void hideSelection() {
+		super.hideSelection();
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/gbl/GridBagLayoutEditPolicy.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/gbl/GridBagLayoutEditPolicy.java
index dd064e309..4e9f65129 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/gbl/GridBagLayoutEditPolicy.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/gbl/GridBagLayoutEditPolicy.java
@@ -50,372 +50,372 @@
  * @coverage swing.gef.policy
  */
 public final class GridBagLayoutEditPolicy extends AbstractGridLayoutEditPolicy {
-  private final AbstractGridBagLayoutInfo m_layout;
+	private final AbstractGridBagLayoutInfo m_layout;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public GridBagLayoutEditPolicy(AbstractGridBagLayoutInfo layout) {
-    super(layout);
-    m_layout = layout;
-    m_gridTargetHelper = new GridHelper(this, true);
-    m_gridSelectionHelper = new GridHelper(this, false);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public GridBagLayoutEditPolicy(AbstractGridBagLayoutInfo layout) {
+		super(layout);
+		m_layout = layout;
+		m_gridTargetHelper = new GridHelper(this, true);
+		m_gridSelectionHelper = new GridHelper(this, false);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Requests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected ILayoutRequestValidator getRequestValidator() {
-    return ComponentsLayoutRequestValidator.INSTANCE_EXT;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Requests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected ILayoutRequestValidator getRequestValidator() {
+		return ComponentsLayoutRequestValidator.INSTANCE_EXT;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected IGridInfo getGridInfo() {
-    return m_layout.getGridInfo();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected IGridInfo getGridInfo() {
+		return m_layout.getGridInfo();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Selection
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void decorateChild(EditPart child) {
-    Object model = child.getModel();
-    if (m_layout.isManagedObject(model)) {
-      ComponentInfo component = (ComponentInfo) model;
-      EditPolicy selectionPolicy = new GridBagSelectionEditPolicy(m_layout, component);
-      child.installEditPolicy(EditPolicy.SELECTION_ROLE, selectionPolicy);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Selection
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void decorateChild(EditPart child) {
+		Object model = child.getModel();
+		if (m_layout.isManagedObject(model)) {
+			ComponentInfo component = (ComponentInfo) model;
+			EditPolicy selectionPolicy = new GridBagSelectionEditPolicy(m_layout, component);
+			child.installEditPolicy(EditPolicy.SELECTION_ROLE, selectionPolicy);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Command getCreateCommand(CreateRequest request) {
-    if (m_target.m_valid) {
-      final ComponentInfo component = (ComponentInfo) request.getNewObject();
-      return new EditCommand(m_layout) {
-        @Override
-        protected void executeEdit() throws Exception {
-          m_layout.command_CREATE(
-              component,
-              m_target.m_column,
-              m_target.m_columnInsert,
-              m_target.m_row,
-              m_target.m_rowInsert);
-        }
-      };
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Command getCreateCommand(CreateRequest request) {
+		if (m_target.m_valid) {
+			final ComponentInfo component = (ComponentInfo) request.getNewObject();
+			return new EditCommand(m_layout) {
+				@Override
+				protected void executeEdit() throws Exception {
+					m_layout.command_CREATE(
+							component,
+							m_target.m_column,
+							m_target.m_columnInsert,
+							m_target.m_row,
+							m_target.m_rowInsert);
+				}
+			};
+		}
+		return null;
+	}
 
-  @Override
-  @SuppressWarnings("unchecked")
-  protected Command getPasteCommand(PasteRequest request) {
-    List<JavaInfoMemento> mementos = (List<JavaInfoMemento>) request.getMemento();
-    if (m_target.m_valid && mementos.size() == 1) {
-      return LayoutPolicyUtils2.getPasteCommand(
-          m_layout,
-          request,
-          ComponentInfo.class,
-          new IPasteProcessor<ComponentInfo>() {
-            public void process(ComponentInfo component) throws Exception {
-              m_layout.command_CREATE(
-                  component,
-                  m_target.m_column,
-                  m_target.m_columnInsert,
-                  m_target.m_row,
-                  m_target.m_rowInsert);
-            }
-          });
-    }
-    return null;
-  }
+	@Override
+	@SuppressWarnings("unchecked")
+	protected Command getPasteCommand(PasteRequest request) {
+		List<JavaInfoMemento> mementos = (List<JavaInfoMemento>) request.getMemento();
+		if (m_target.m_valid && mementos.size() == 1) {
+			return LayoutPolicyUtils2.getPasteCommand(
+					m_layout,
+					request,
+					ComponentInfo.class,
+					new IPasteProcessor<ComponentInfo>() {
+						public void process(ComponentInfo component) throws Exception {
+							m_layout.command_CREATE(
+									component,
+									m_target.m_column,
+									m_target.m_columnInsert,
+									m_target.m_row,
+									m_target.m_rowInsert);
+						}
+					});
+		}
+		return null;
+	}
 
-  @Override
-  protected Command getMoveCommand(ChangeBoundsRequest request) {
-    if (m_target.m_valid && request.getEditParts().size() == 1) {
-      EditPart editPart = request.getEditParts().get(0);
-      final ComponentInfo component = (ComponentInfo) editPart.getModel();
-      return new EditCommand(m_layout) {
-        @Override
-        protected void executeEdit() throws Exception {
-          m_layout.command_MOVE(
-              component,
-              m_target.m_column,
-              m_target.m_columnInsert,
-              m_target.m_row,
-              m_target.m_rowInsert);
-        }
-      };
-    }
-    return null;
-  }
+	@Override
+	protected Command getMoveCommand(ChangeBoundsRequest request) {
+		if (m_target.m_valid && request.getEditParts().size() == 1) {
+			EditPart editPart = request.getEditParts().get(0);
+			final ComponentInfo component = (ComponentInfo) editPart.getModel();
+			return new EditCommand(m_layout) {
+				@Override
+				protected void executeEdit() throws Exception {
+					m_layout.command_MOVE(
+							component,
+							m_target.m_column,
+							m_target.m_columnInsert,
+							m_target.m_row,
+							m_target.m_rowInsert);
+				}
+			};
+		}
+		return null;
+	}
 
-  @Override
-  protected Command getAddCommand(ChangeBoundsRequest request) {
-    return getMoveCommand(request);
-  }
+	@Override
+	protected Command getAddCommand(ChangeBoundsRequest request) {
+		return getMoveCommand(request);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Grid target
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void updateGridTarget(Point mouseLocation) throws Exception {
-    m_target = new GridTarget();
-    // prepare location in model
-    Point location = mouseLocation.getCopy();
-    PolicyUtils.translateAbsoluteToModel(this, location);
-    // prepare grid information
-    IGridInfo gridInfo = m_layout.getGridInfo();
-    Interval[] columnIntervals = gridInfo.getColumnIntervals();
-    Interval[] rowIntervals = gridInfo.getRowIntervals();
-    int lastX =
-        columnIntervals.length != 0
-            ? columnIntervals[columnIntervals.length - 1].end()
-            : gridInfo.getInsets().left;
-    int lastY =
-        rowIntervals.length != 0
-            ? rowIntervals[rowIntervals.length - 1].end()
-            : gridInfo.getInsets().top;
-    // prepare insert bounds
-    {
-      if (columnIntervals.length != 0) {
-        m_target.m_rowInsertBounds.x = columnIntervals[0].begin() - INSERT_MARGINS;
-        m_target.m_rowInsertBounds.setRight(lastX + INSERT_MARGINS);
-      } else {
-        m_target.m_rowInsertBounds.x = 0;
-        m_target.m_rowInsertBounds.setRight(getHostFigure().getSize().width);
-      }
-      if (rowIntervals.length != 0) {
-        m_target.m_columnInsertBounds.y = rowIntervals[0].begin() - INSERT_MARGINS;
-        m_target.m_columnInsertBounds.setBottom(lastY + INSERT_MARGINS);
-      } else {
-        m_target.m_columnInsertBounds.y = 0;
-        m_target.m_columnInsertBounds.setBottom(getHostFigure().getSize().height);
-      }
-    }
-    // find existing column
-    for (int columnIndex = 0; columnIndex < columnIntervals.length; columnIndex++) {
-      boolean isLast = columnIndex == columnIntervals.length - 1;
-      Interval interval = columnIntervals[columnIndex];
-      Interval nextInterval = !isLast ? columnIntervals[columnIndex + 1] : null;
-      // before first
-      if (location.x < Math.max(interval.begin(), INSERT_COLUMN_SIZE)) {
-        m_target.m_column = 0;
-        m_target.m_columnInsert = true;
-        // prepare parameters
-        int[] parameters =
-            getInsertFeedbackParameters(new Interval(0, 0), interval, INSERT_COLUMN_SIZE);
-        // feedback
-        m_target.m_feedbackBounds.x = parameters[3];
-        m_target.m_feedbackBounds.width = parameters[4] - parameters[3];
-        // insert
-        m_target.m_columnInsertBounds.x = parameters[1];
-        m_target.m_columnInsertBounds.width = parameters[2] - parameters[1];
-        // stop
-        break;
-      }
-      // gap or near to end of interval
-      if (nextInterval != null) {
-        int gap = nextInterval.begin() - interval.end();
-        boolean directGap = interval.end() <= location.x && location.x < nextInterval.begin();
-        boolean narrowGap = gap < 2 * INSERT_COLUMN_SIZE;
-        boolean nearEnd = Math.abs(location.x - interval.end()) < INSERT_COLUMN_SIZE;
-        boolean nearBegin = Math.abs(location.x - nextInterval.begin()) < INSERT_COLUMN_SIZE;
-        if (directGap || narrowGap && (nearEnd || nearBegin)) {
-          m_target.m_column = columnIndex + 1;
-          m_target.m_columnInsert = true;
-          // prepare parameters
-          int[] parameters =
-              getInsertFeedbackParameters(interval, nextInterval, INSERT_COLUMN_SIZE);
-          // feedback
-          m_target.m_feedbackBounds.x = parameters[3];
-          m_target.m_feedbackBounds.width = parameters[4] - parameters[3];
-          // insert
-          m_target.m_columnInsertBounds.x = parameters[1];
-          m_target.m_columnInsertBounds.width = parameters[2] - parameters[1];
-          // stop
-          break;
-        }
-      }
-      // column
-      if (interval.contains(location.x)) {
-        m_target.m_column = columnIndex;
-        // feedback
-        m_target.m_feedbackBounds.x = interval.begin();
-        m_target.m_feedbackBounds.width = interval.length()+ 1;
-        // stop
-        break;
-      }
-    }
-    // find virtual column
-    if (m_target.m_column == -1) {
-      int columnGap = gridInfo.getVirtualColumnGap();
-      int columnSize = gridInfo.getVirtualColumnSize();
-      //
-      int newWidth = columnSize + columnGap;
-      int newDelta = Math.max(location.x - lastX - columnGap / 2, 0) / newWidth;
-      //
-      m_target.m_column = columnIntervals.length + newDelta;
-      m_target.m_feedbackBounds.x = lastX + columnGap + newWidth * newDelta;
-      m_target.m_feedbackBounds.width = columnSize + 1;
-    }
-    // find existing row
-    for (int rowIndex = 0; rowIndex < rowIntervals.length; rowIndex++) {
-      boolean isLast = rowIndex == rowIntervals.length - 1;
-      Interval interval = rowIntervals[rowIndex];
-      Interval nextInterval = !isLast ? rowIntervals[rowIndex + 1] : null;
-      // before first
-      if (location.y < Math.max(interval.begin(), INSERT_ROW_SIZE)) {
-        m_target.m_row = 0;
-        m_target.m_rowInsert = true;
-        // prepare parameters
-        int[] parameters =
-            getInsertFeedbackParameters(new Interval(0, 0), interval, INSERT_ROW_SIZE);
-        // feedback
-        m_target.m_feedbackBounds.y = parameters[3];
-        m_target.m_feedbackBounds.height = parameters[4] - parameters[3];
-        // insert
-        m_target.m_rowInsertBounds.y = parameters[1];
-        m_target.m_rowInsertBounds.height = parameters[2] - parameters[1];
-        // stop
-        break;
-      }
-      // gap or near to end of interval
-      if (nextInterval != null) {
-        int gap = nextInterval.begin() - interval.end();
-        boolean directGap = interval.end() <= location.y && location.y < nextInterval.begin();
-        boolean narrowGap = gap < 2 * INSERT_ROW_SIZE;
-        boolean nearEnd = Math.abs(location.y - interval.end()) < INSERT_ROW_SIZE;
-        boolean nearBegin = Math.abs(location.y - nextInterval.begin()) < INSERT_ROW_SIZE;
-        if (directGap || narrowGap && (nearEnd || nearBegin)) {
-          m_target.m_row = rowIndex + 1;
-          m_target.m_rowInsert = true;
-          // prepare parameters
-          int[] parameters = getInsertFeedbackParameters(interval, nextInterval, INSERT_ROW_SIZE);
-          // feedback
-          m_target.m_feedbackBounds.y = parameters[3];
-          m_target.m_feedbackBounds.height = parameters[4] - parameters[3];
-          // insert
-          m_target.m_rowInsertBounds.y = parameters[1];
-          m_target.m_rowInsertBounds.height = parameters[2] - parameters[1];
-          // stop
-          break;
-        }
-      }
-      // row
-      if (interval.contains(location.y)) {
-        m_target.m_row = rowIndex;
-        // feedback
-        m_target.m_feedbackBounds.y = interval.begin();
-        m_target.m_feedbackBounds.height = interval.length()+ 1;
-        // stop
-        break;
-      }
-    }
-    // find virtual row
-    if (m_target.m_row == -1) {
-      int rowGap = gridInfo.getVirtualRowGap();
-      int rowSize = gridInfo.getVirtualRowSize();
-      //
-      int newHeight = rowSize + rowGap;
-      int newDelta = Math.max(location.y - lastY - rowGap / 2, 0) / newHeight;
-      //
-      m_target.m_row = rowIntervals.length + newDelta;
-      m_target.m_feedbackBounds.y = lastY + rowGap + newHeight * newDelta;
-      m_target.m_feedbackBounds.height = rowSize + 1;
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Grid target
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void updateGridTarget(Point mouseLocation) throws Exception {
+		m_target = new GridTarget();
+		// prepare location in model
+		Point location = mouseLocation.getCopy();
+		PolicyUtils.translateAbsoluteToModel(this, location);
+		// prepare grid information
+		IGridInfo gridInfo = m_layout.getGridInfo();
+		Interval[] columnIntervals = gridInfo.getColumnIntervals();
+		Interval[] rowIntervals = gridInfo.getRowIntervals();
+		int lastX =
+				columnIntervals.length != 0
+				? columnIntervals[columnIntervals.length - 1].end()
+						: gridInfo.getInsets().left;
+		int lastY =
+				rowIntervals.length != 0
+				? rowIntervals[rowIntervals.length - 1].end()
+						: gridInfo.getInsets().top;
+		// prepare insert bounds
+		{
+			if (columnIntervals.length != 0) {
+				m_target.m_rowInsertBounds.x = columnIntervals[0].begin() - INSERT_MARGINS;
+				m_target.m_rowInsertBounds.setRight(lastX + INSERT_MARGINS);
+			} else {
+				m_target.m_rowInsertBounds.x = 0;
+				m_target.m_rowInsertBounds.setRight(getHostFigure().getSize().width);
+			}
+			if (rowIntervals.length != 0) {
+				m_target.m_columnInsertBounds.y = rowIntervals[0].begin() - INSERT_MARGINS;
+				m_target.m_columnInsertBounds.setBottom(lastY + INSERT_MARGINS);
+			} else {
+				m_target.m_columnInsertBounds.y = 0;
+				m_target.m_columnInsertBounds.setBottom(getHostFigure().getSize().height);
+			}
+		}
+		// find existing column
+		for (int columnIndex = 0; columnIndex < columnIntervals.length; columnIndex++) {
+			boolean isLast = columnIndex == columnIntervals.length - 1;
+			Interval interval = columnIntervals[columnIndex];
+			Interval nextInterval = !isLast ? columnIntervals[columnIndex + 1] : null;
+			// before first
+			if (location.x < Math.max(interval.begin(), INSERT_COLUMN_SIZE)) {
+				m_target.m_column = 0;
+				m_target.m_columnInsert = true;
+				// prepare parameters
+				int[] parameters =
+						getInsertFeedbackParameters(new Interval(0, 0), interval, INSERT_COLUMN_SIZE);
+				// feedback
+				m_target.m_feedbackBounds.x = parameters[3];
+				m_target.m_feedbackBounds.width = parameters[4] - parameters[3];
+				// insert
+				m_target.m_columnInsertBounds.x = parameters[1];
+				m_target.m_columnInsertBounds.width = parameters[2] - parameters[1];
+				// stop
+				break;
+			}
+			// gap or near to end of interval
+			if (nextInterval != null) {
+				int gap = nextInterval.begin() - interval.end();
+				boolean directGap = interval.end() <= location.x && location.x < nextInterval.begin();
+				boolean narrowGap = gap < 2 * INSERT_COLUMN_SIZE;
+				boolean nearEnd = Math.abs(location.x - interval.end()) < INSERT_COLUMN_SIZE;
+				boolean nearBegin = Math.abs(location.x - nextInterval.begin()) < INSERT_COLUMN_SIZE;
+				if (directGap || narrowGap && (nearEnd || nearBegin)) {
+					m_target.m_column = columnIndex + 1;
+					m_target.m_columnInsert = true;
+					// prepare parameters
+					int[] parameters =
+							getInsertFeedbackParameters(interval, nextInterval, INSERT_COLUMN_SIZE);
+					// feedback
+					m_target.m_feedbackBounds.x = parameters[3];
+					m_target.m_feedbackBounds.width = parameters[4] - parameters[3];
+					// insert
+					m_target.m_columnInsertBounds.x = parameters[1];
+					m_target.m_columnInsertBounds.width = parameters[2] - parameters[1];
+					// stop
+					break;
+				}
+			}
+			// column
+			if (interval.contains(location.x)) {
+				m_target.m_column = columnIndex;
+				// feedback
+				m_target.m_feedbackBounds.x = interval.begin();
+				m_target.m_feedbackBounds.width = interval.length()+ 1;
+				// stop
+				break;
+			}
+		}
+		// find virtual column
+		if (m_target.m_column == -1) {
+			int columnGap = gridInfo.getVirtualColumnGap();
+			int columnSize = gridInfo.getVirtualColumnSize();
+			//
+			int newWidth = columnSize + columnGap;
+			int newDelta = Math.max(location.x - lastX - columnGap / 2, 0) / newWidth;
+			//
+			m_target.m_column = columnIntervals.length + newDelta;
+			m_target.m_feedbackBounds.x = lastX + columnGap + newWidth * newDelta;
+			m_target.m_feedbackBounds.width = columnSize + 1;
+		}
+		// find existing row
+		for (int rowIndex = 0; rowIndex < rowIntervals.length; rowIndex++) {
+			boolean isLast = rowIndex == rowIntervals.length - 1;
+			Interval interval = rowIntervals[rowIndex];
+			Interval nextInterval = !isLast ? rowIntervals[rowIndex + 1] : null;
+			// before first
+			if (location.y < Math.max(interval.begin(), INSERT_ROW_SIZE)) {
+				m_target.m_row = 0;
+				m_target.m_rowInsert = true;
+				// prepare parameters
+				int[] parameters =
+						getInsertFeedbackParameters(new Interval(0, 0), interval, INSERT_ROW_SIZE);
+				// feedback
+				m_target.m_feedbackBounds.y = parameters[3];
+				m_target.m_feedbackBounds.height = parameters[4] - parameters[3];
+				// insert
+				m_target.m_rowInsertBounds.y = parameters[1];
+				m_target.m_rowInsertBounds.height = parameters[2] - parameters[1];
+				// stop
+				break;
+			}
+			// gap or near to end of interval
+			if (nextInterval != null) {
+				int gap = nextInterval.begin() - interval.end();
+				boolean directGap = interval.end() <= location.y && location.y < nextInterval.begin();
+				boolean narrowGap = gap < 2 * INSERT_ROW_SIZE;
+				boolean nearEnd = Math.abs(location.y - interval.end()) < INSERT_ROW_SIZE;
+				boolean nearBegin = Math.abs(location.y - nextInterval.begin()) < INSERT_ROW_SIZE;
+				if (directGap || narrowGap && (nearEnd || nearBegin)) {
+					m_target.m_row = rowIndex + 1;
+					m_target.m_rowInsert = true;
+					// prepare parameters
+					int[] parameters = getInsertFeedbackParameters(interval, nextInterval, INSERT_ROW_SIZE);
+					// feedback
+					m_target.m_feedbackBounds.y = parameters[3];
+					m_target.m_feedbackBounds.height = parameters[4] - parameters[3];
+					// insert
+					m_target.m_rowInsertBounds.y = parameters[1];
+					m_target.m_rowInsertBounds.height = parameters[2] - parameters[1];
+					// stop
+					break;
+				}
+			}
+			// row
+			if (interval.contains(location.y)) {
+				m_target.m_row = rowIndex;
+				// feedback
+				m_target.m_feedbackBounds.y = interval.begin();
+				m_target.m_feedbackBounds.height = interval.length()+ 1;
+				// stop
+				break;
+			}
+		}
+		// find virtual row
+		if (m_target.m_row == -1) {
+			int rowGap = gridInfo.getVirtualRowGap();
+			int rowSize = gridInfo.getVirtualRowSize();
+			//
+			int newHeight = rowSize + rowGap;
+			int newDelta = Math.max(location.y - lastY - rowGap / 2, 0) / newHeight;
+			//
+			m_target.m_row = rowIntervals.length + newDelta;
+			m_target.m_feedbackBounds.y = lastY + rowGap + newHeight * newDelta;
+			m_target.m_feedbackBounds.height = rowSize + 1;
+		}
+	}
 
-  /**
-   * Determines parameters of insert feedback.
-   *
-   * @return the array of: visual gap, begin/end of insert feedback, begin/end of target feedback.
-   */
-  public static int[] getInsertFeedbackParameters(Interval interval,
-      Interval nextInterval,
-      int minGap) {
-    int gap = nextInterval.begin() - interval.end();
-    int visualGap = Math.max(gap, minGap);
-    // determine x1/x2
-    int x1, x2;
-    {
-      int a = interval.end();
-      int b = nextInterval.begin();
-      int x1_2 = a + b - visualGap;
-      x1 = x1_2 % 2 == 0 ? x1_2 / 2 : x1_2 / 2 - 1;
-      x2 = a + b - x1;
-      // we don't want to have insert feedback be same as intervals
-      if (x1 == a - 1) {
-        x1--;
-        x2++;
-      }
-    }
-    //
-    return new int[]{visualGap, x1, x2, x1 - minGap, x2 + minGap};
-  }
+	/**
+	 * Determines parameters of insert feedback.
+	 *
+	 * @return the array of: visual gap, begin/end of insert feedback, begin/end of target feedback.
+	 */
+	public static int[] getInsertFeedbackParameters(Interval interval,
+			Interval nextInterval,
+			int minGap) {
+		int gap = nextInterval.begin() - interval.end();
+		int visualGap = Math.max(gap, minGap);
+		// determine x1/x2
+		int x1, x2;
+		{
+			int a = interval.end();
+			int b = nextInterval.begin();
+			int x1_2 = a + b - visualGap;
+			x1 = x1_2 % 2 == 0 ? x1_2 / 2 : x1_2 / 2 - 1;
+			x2 = a + b - x1;
+			// we don't want to have insert feedback be same as intervals
+			if (x1 == a - 1) {
+				x1--;
+				x2++;
+			}
+		}
+		//
+		return new int[]{visualGap, x1, x2, x1 - minGap, x2 + minGap};
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IHeadersProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public LayoutEditPolicy getContainerLayoutPolicy(boolean horizontal) {
-    if (horizontal) {
-      return new ColumnsLayoutEditPolicy(this, m_layout);
-    } else {
-      return new RowsLayoutEditPolicy(this, m_layout);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IHeadersProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public LayoutEditPolicy getContainerLayoutPolicy(boolean horizontal) {
+		if (horizontal) {
+			return new ColumnsLayoutEditPolicy(this, m_layout);
+		} else {
+			return new RowsLayoutEditPolicy(this, m_layout);
+		}
+	}
 
-  public List<?> getHeaders(boolean horizontal) {
-    return horizontal ? m_layout.getColumns() : m_layout.getRows();
-  }
+	public List<?> getHeaders(boolean horizontal) {
+		return horizontal ? m_layout.getColumns() : m_layout.getRows();
+	}
 
-  public EditPart createHeaderEditPart(boolean horizontal, Object model) {
-    if (horizontal) {
-      return new ColumnHeaderEditPart(m_layout, (ColumnInfo) model, getHostFigure());
-    } else {
-      return new RowHeaderEditPart(m_layout, (RowInfo) model, getHostFigure());
-    }
-  }
+	public EditPart createHeaderEditPart(boolean horizontal, Object model) {
+		if (horizontal) {
+			return new ColumnHeaderEditPart(m_layout, (ColumnInfo) model, getHostFigure());
+		} else {
+			return new RowHeaderEditPart(m_layout, (RowInfo) model, getHostFigure());
+		}
+	}
 
-  public void buildContextMenu(IMenuManager manager, boolean horizontal) {
-    if (horizontal) {
-      manager.add(new ObjectInfoAction(m_layout, GefMessages.GridBagLayoutEditPolicy_appendColumn) {
-        @Override
-        protected void runEx() throws Exception {
-          m_layout.getColumnOperations().insert(m_layout.getColumns().size());
-        }
-      });
-    } else {
-      manager.add(new ObjectInfoAction(m_layout, GefMessages.GridBagLayoutEditPolicy_appendRow) {
-        @Override
-        protected void runEx() throws Exception {
-          m_layout.getRowOperations().insert(m_layout.getRows().size());
-        }
-      });
-    }
-  }
+	public void buildContextMenu(IMenuManager manager, boolean horizontal) {
+		if (horizontal) {
+			manager.add(new ObjectInfoAction(m_layout, GefMessages.GridBagLayoutEditPolicy_appendColumn) {
+				@Override
+				protected void runEx() throws Exception {
+					m_layout.getColumnOperations().insert(m_layout.getColumns().size());
+				}
+			});
+		} else {
+			manager.add(new ObjectInfoAction(m_layout, GefMessages.GridBagLayoutEditPolicy_appendRow) {
+				@Override
+				protected void runEx() throws Exception {
+					m_layout.getRowOperations().insert(m_layout.getRows().size());
+				}
+			});
+		}
+	}
 
-  public void handleDoubleClick(boolean horizontal) {
-    // we don't have columns/rows dialogs for GridBagLayout
-  }
+	public void handleDoubleClick(boolean horizontal) {
+		// we don't have columns/rows dialogs for GridBagLayout
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/gbl/GridBagSelectionEditPolicy.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/gbl/GridBagSelectionEditPolicy.java
index 58ad8fe8e..f464bffe0 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/gbl/GridBagSelectionEditPolicy.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/gbl/GridBagSelectionEditPolicy.java
@@ -47,270 +47,270 @@
  * @coverage swing.gef.policy
  */
 public final class GridBagSelectionEditPolicy extends AbstractGridSelectionEditPolicy {
-  private final AbstractGridBagLayoutInfo m_layout;
-  private final ComponentInfo m_component;
-  private final GridHelper m_gridHelper = new GridHelper(this, false);
+	private final AbstractGridBagLayoutInfo m_layout;
+	private final ComponentInfo m_component;
+	private final GridHelper m_gridHelper = new GridHelper(this, false);
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public GridBagSelectionEditPolicy(AbstractGridBagLayoutInfo layout, ComponentInfo component) {
-    super(component);
-    m_layout = layout;
-    m_component = component;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public GridBagSelectionEditPolicy(AbstractGridBagLayoutInfo layout, ComponentInfo component) {
+		super(component);
+		m_layout = layout;
+		m_component = component;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected boolean isActiveLayout() {
-    return m_component.getParent().getChildren().contains(m_layout);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected boolean isActiveLayout() {
+		return m_component.getParent().getChildren().contains(m_layout);
+	}
 
-  @Override
-  protected IGridInfo getGridInfo() {
-    return m_layout.getGridInfo();
-  }
+	@Override
+	protected IGridInfo getGridInfo() {
+		return m_layout.getGridInfo();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Selection
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected List<Handle> createSelectionHandles() {
-    List<Handle> handlesList = Lists.newArrayList();
-    // add move handle
-    handlesList.add(createMoveHandle());
-    // add span handles
-    {
-      handlesList.add(createSpanHandle(IPositionConstants.NORTH, 0.25));
-      handlesList.add(createSpanHandle(IPositionConstants.WEST, 0.25));
-      handlesList.add(createSpanHandle(IPositionConstants.EAST, 0.75));
-      handlesList.add(createSpanHandle(IPositionConstants.SOUTH, 0.75));
-    }
-    //
-    return handlesList;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Selection
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected List<Handle> createSelectionHandles() {
+		List<Handle> handlesList = Lists.newArrayList();
+		// add move handle
+		handlesList.add(createMoveHandle());
+		// add span handles
+		{
+			handlesList.add(createSpanHandle(IPositionConstants.NORTH, 0.25));
+			handlesList.add(createSpanHandle(IPositionConstants.WEST, 0.25));
+			handlesList.add(createSpanHandle(IPositionConstants.EAST, 0.75));
+			handlesList.add(createSpanHandle(IPositionConstants.SOUTH, 0.75));
+		}
+		//
+		return handlesList;
+	}
 
-  @Override
-  protected void showPrimarySelection() {
-    super.showPrimarySelection();
-    m_gridHelper.showGridFeedback();
-  }
+	@Override
+	protected void showPrimarySelection() {
+		super.showPrimarySelection();
+		m_gridHelper.showGridFeedback();
+	}
 
-  @Override
-  protected void hideSelection() {
-    m_gridHelper.eraseGridFeedback();
-    super.hideSelection();
-  }
+	@Override
+	protected void hideSelection() {
+		m_gridHelper.eraseGridFeedback();
+		super.hideSelection();
+	}
 
-  @Override
-  protected Figure createAlignmentFigure(IAbstractComponentInfo component, boolean horizontal) {
-    IEditPartViewer viewer = getHost().getViewer();
-    final AbstractGridBagConstraintsInfo constraints = m_layout.getConstraints(m_component);
-    if (horizontal) {
-      return new AbstractPopupFigure(viewer, 9, 5) {
-        @Override
-        protected Image getImage() {
-          switch (constraints.getHorizontalAlignment()) {
-            case LEFT :
-              return getImage2("h/alignment/left.gif");
-            case CENTER :
-              return getImage2("h/alignment/center.gif");
-            case RIGHT :
-              return getImage2("h/alignment/right.gif");
-            case FILL :
-              return getImage2("h/alignment/fill.gif");
-          }
-          return null;
-        }
+	@Override
+	protected Figure createAlignmentFigure(IAbstractComponentInfo component, boolean horizontal) {
+		IEditPartViewer viewer = getHost().getViewer();
+		final AbstractGridBagConstraintsInfo constraints = m_layout.getConstraints(m_component);
+		if (horizontal) {
+			return new AbstractPopupFigure(viewer, 9, 5) {
+				@Override
+				protected Image getImage() {
+					switch (constraints.getHorizontalAlignment()) {
+					case LEFT :
+						return getImage2("h/alignment/left.gif");
+					case CENTER :
+						return getImage2("h/alignment/center.gif");
+					case RIGHT :
+						return getImage2("h/alignment/right.gif");
+					case FILL :
+						return getImage2("h/alignment/fill.gif");
+					}
+					return null;
+				}
 
-        @Override
-        protected void fillMenu(IMenuManager manager) {
-          constraints.fillHorizontalAlignmentMenu(manager);
-        }
-      };
-    } else {
-      return new AbstractPopupFigure(viewer, 5, 9) {
-        @Override
-        protected Image getImage() {
-          switch (constraints.getVerticalAlignment()) {
-            case TOP :
-              return getImage2("v/alignment/top.gif");
-            case CENTER :
-              return getImage2("v/alignment/center.gif");
-            case BOTTOM :
-              return getImage2("v/alignment/bottom.gif");
-            case FILL :
-              return getImage2("v/alignment/fill.gif");
-            case BASELINE :
-              return getImage2("v/alignment/baseline.gif");
-            case BASELINE_ABOVE :
-              return getImage2("v/alignment/baseline_above.gif");
-            case BASELINE_BELOW :
-              return getImage2("v/alignment/baseline_below.gif");
-          }
-          return null;
-        }
+				@Override
+				protected void fillMenu(IMenuManager manager) {
+					constraints.fillHorizontalAlignmentMenu(manager);
+				}
+			};
+		} else {
+			return new AbstractPopupFigure(viewer, 5, 9) {
+				@Override
+				protected Image getImage() {
+					switch (constraints.getVerticalAlignment()) {
+					case TOP :
+						return getImage2("v/alignment/top.gif");
+					case CENTER :
+						return getImage2("v/alignment/center.gif");
+					case BOTTOM :
+						return getImage2("v/alignment/bottom.gif");
+					case FILL :
+						return getImage2("v/alignment/fill.gif");
+					case BASELINE :
+						return getImage2("v/alignment/baseline.gif");
+					case BASELINE_ABOVE :
+						return getImage2("v/alignment/baseline_above.gif");
+					case BASELINE_BELOW :
+						return getImage2("v/alignment/baseline_below.gif");
+					}
+					return null;
+				}
 
-        @Override
-        protected void fillMenu(IMenuManager manager) {
-          constraints.fillVerticalAlignmentMenu(manager);
-        }
-      };
-    }
-  }
+				@Override
+				protected void fillMenu(IMenuManager manager) {
+					constraints.fillVerticalAlignmentMenu(manager);
+				}
+			};
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Images
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link Image} for {@link AbstractGridBagLayoutInfo}.
-   */
-  protected final Image getImage2(String name) {
-    return AbstractGridBagLayoutInfo.getImage("headers/" + name);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Images
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link Image} for {@link AbstractGridBagLayoutInfo}.
+	 */
+	protected final Image getImage2(String name) {
+		return AbstractGridBagLayoutInfo.getImage("headers/" + name);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Span
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Command createSpanCommand(final boolean horizontal, final Rectangle cells) {
-    return new EditCommand(m_layout) {
-      @Override
-      protected void executeEdit() throws Exception {
-        AbstractGridBagConstraintsInfo constraints = m_layout.getConstraints(m_component);
-        if (horizontal) {
-          constraints.setX(cells.x);
-          constraints.setWidth(cells.width);
-        } else {
-          constraints.setY(cells.y);
-          constraints.setHeight(cells.height);
-        }
-      }
-    };
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Span
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Command createSpanCommand(final boolean horizontal, final Rectangle cells) {
+		return new EditCommand(m_layout) {
+			@Override
+			protected void executeEdit() throws Exception {
+				AbstractGridBagConstraintsInfo constraints = m_layout.getConstraints(m_component);
+				if (horizontal) {
+					constraints.setX(cells.x);
+					constraints.setWidth(cells.width);
+				} else {
+					constraints.setY(cells.y);
+					constraints.setHeight(cells.height);
+				}
+			}
+		};
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Keyboard
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void performRequest(Request request) {
-    if (request instanceof KeyRequest) {
-      KeyRequest keyRequest = (KeyRequest) request;
-      if (keyRequest.isPressed()) {
-        char c = keyRequest.getCharacter();
-        // grab/fill both
-        if (c == 'o') {
-          setFillBoth();
-        }
-        // horizontal
-        if (c == 'h') {
-          flipGrab(true);
-        } else if (c == 'l') {
-          setAlignment(ColumnInfo.Alignment.LEFT);
-        } else if (c == 'c') {
-          setAlignment(ColumnInfo.Alignment.CENTER);
-        } else if (c == 'r') {
-          setAlignment(ColumnInfo.Alignment.RIGHT);
-        } else if (c == 'f') {
-          setAlignment(ColumnInfo.Alignment.FILL);
-        }
-        // vertical
-        if (c == 'v') {
-          flipGrab(false);
-        } else if (c == 't') {
-          setAlignment(RowInfo.Alignment.TOP);
-        } else if (c == 'm') {
-          setAlignment(RowInfo.Alignment.CENTER);
-        } else if (c == 'b') {
-          setAlignment(RowInfo.Alignment.BOTTOM);
-        } else if (c == 'F') {
-          setAlignment(RowInfo.Alignment.FILL);
-        } else if (c == 'L') {
-          setAlignment(RowInfo.Alignment.BASELINE);
-        } else if (c == 'A') {
-          setAlignment(RowInfo.Alignment.BASELINE_ABOVE);
-        } else if (c == 'B') {
-          setAlignment(RowInfo.Alignment.BASELINE_BELOW);
-        }
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Keyboard
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void performRequest(Request request) {
+		if (request instanceof KeyRequest) {
+			KeyRequest keyRequest = (KeyRequest) request;
+			if (keyRequest.isPressed()) {
+				char c = keyRequest.getCharacter();
+				// grab/fill both
+				if (c == 'o') {
+					setFillBoth();
+				}
+				// horizontal
+				if (c == 'h') {
+					flipGrab(true);
+				} else if (c == 'l') {
+					setAlignment(ColumnInfo.Alignment.LEFT);
+				} else if (c == 'c') {
+					setAlignment(ColumnInfo.Alignment.CENTER);
+				} else if (c == 'r') {
+					setAlignment(ColumnInfo.Alignment.RIGHT);
+				} else if (c == 'f') {
+					setAlignment(ColumnInfo.Alignment.FILL);
+				}
+				// vertical
+				if (c == 'v') {
+					flipGrab(false);
+				} else if (c == 't') {
+					setAlignment(RowInfo.Alignment.TOP);
+				} else if (c == 'm') {
+					setAlignment(RowInfo.Alignment.CENTER);
+				} else if (c == 'b') {
+					setAlignment(RowInfo.Alignment.BOTTOM);
+				} else if (c == 'F') {
+					setAlignment(RowInfo.Alignment.FILL);
+				} else if (c == 'L') {
+					setAlignment(RowInfo.Alignment.BASELINE);
+				} else if (c == 'A') {
+					setAlignment(RowInfo.Alignment.BASELINE_ABOVE);
+				} else if (c == 'B') {
+					setAlignment(RowInfo.Alignment.BASELINE_BELOW);
+				}
+			}
+		}
+	}
 
-  /**
-   * Sets grab/fill for both dimensions.
-   */
-  private void setFillBoth() {
-    execute(new RunnableEx() {
-      public void run() throws Exception {
-        AbstractGridBagConstraintsInfo constraints = m_layout.getConstraints(m_component);
-        constraints.getColumn().setWeight(1.0);
-        constraints.getRow().setWeight(1.0);
-        constraints.setAlignment(ColumnInfo.Alignment.FILL, RowInfo.Alignment.FILL);
-      }
-    });
-  }
+	/**
+	 * Sets grab/fill for both dimensions.
+	 */
+	private void setFillBoth() {
+		execute(new RunnableEx() {
+			public void run() throws Exception {
+				AbstractGridBagConstraintsInfo constraints = m_layout.getConstraints(m_component);
+				constraints.getColumn().setWeight(1.0);
+				constraints.getRow().setWeight(1.0);
+				constraints.setAlignment(ColumnInfo.Alignment.FILL, RowInfo.Alignment.FILL);
+			}
+		});
+	}
 
-  /**
-   * Flips horizontal/vertical grab.
-   */
-  private void flipGrab(final boolean horizontal) {
-    execute(new RunnableEx() {
-      public void run() throws Exception {
-        AbstractGridBagConstraintsInfo constraints = m_layout.getConstraints(m_component);
-        DimensionInfo dimension;
-        if (horizontal) {
-          dimension = constraints.getColumn();
-        } else {
-          dimension = constraints.getRow();
-        }
-        double weight = dimension.getWeight();
-        dimension.setWeight(weight != 0.0 ? 0.0 : 1.0);
-      }
-    });
-  }
+	/**
+	 * Flips horizontal/vertical grab.
+	 */
+	private void flipGrab(final boolean horizontal) {
+		execute(new RunnableEx() {
+			public void run() throws Exception {
+				AbstractGridBagConstraintsInfo constraints = m_layout.getConstraints(m_component);
+				DimensionInfo dimension;
+				if (horizontal) {
+					dimension = constraints.getColumn();
+				} else {
+					dimension = constraints.getRow();
+				}
+				double weight = dimension.getWeight();
+				dimension.setWeight(weight != 0.0 ? 0.0 : 1.0);
+			}
+		});
+	}
 
-  /**
-   * Sets the horizontal alignment.
-   */
-  private void setAlignment(final ColumnInfo.Alignment alignment) {
-    execute(new RunnableEx() {
-      public void run() throws Exception {
-        AbstractGridBagConstraintsInfo constraints = m_layout.getConstraints(m_component);
-        constraints.setHorizontalAlignment(alignment);
-      }
-    });
-  }
+	/**
+	 * Sets the horizontal alignment.
+	 */
+	private void setAlignment(final ColumnInfo.Alignment alignment) {
+		execute(new RunnableEx() {
+			public void run() throws Exception {
+				AbstractGridBagConstraintsInfo constraints = m_layout.getConstraints(m_component);
+				constraints.setHorizontalAlignment(alignment);
+			}
+		});
+	}
 
-  /**
-   * Sets the vertical alignment.
-   */
-  private void setAlignment(final RowInfo.Alignment alignment) {
-    execute(new RunnableEx() {
-      public void run() throws Exception {
-        AbstractGridBagConstraintsInfo constraints = m_layout.getConstraints(m_component);
-        constraints.setVerticalAlignment(alignment);
-      }
-    });
-  }
+	/**
+	 * Sets the vertical alignment.
+	 */
+	private void setAlignment(final RowInfo.Alignment alignment) {
+		execute(new RunnableEx() {
+			public void run() throws Exception {
+				AbstractGridBagConstraintsInfo constraints = m_layout.getConstraints(m_component);
+				constraints.setVerticalAlignment(alignment);
+			}
+		});
+	}
 
-  /**
-   * Executes given {@link RunnableEx} as edit operation.
-   */
-  private void execute(final RunnableEx runnable) {
-    ExecutionUtils.run(m_component, runnable);
-  }
+	/**
+	 * Executes given {@link RunnableEx} as edit operation.
+	 */
+	private void execute(final RunnableEx runnable) {
+		ExecutionUtils.run(m_component, runnable);
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/gbl/GridHelper.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/gbl/GridHelper.java
index 47d5debe5..1e43fd05f 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/gbl/GridHelper.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/gbl/GridHelper.java
@@ -22,22 +22,22 @@
  * @coverage swing.gef.policy
  */
 public final class GridHelper extends AbstractGridHelper {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public GridHelper(GraphicalEditPolicy editPolicy, boolean forTarget) {
-    super(editPolicy, forTarget);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public GridHelper(GraphicalEditPolicy editPolicy, boolean forTarget) {
+		super(editPolicy, forTarget);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Feedback
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected IGridInfo getGridInfo() {
-    return ((AbstractGridBagLayoutInfo) getAbstractLayout()).getGridInfo();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Feedback
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected IGridInfo getGridInfo() {
+		return ((AbstractGridBagLayoutInfo) getAbstractLayout()).getGridInfo();
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/gbl/header/actions/DimensionHeaderAction.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/gbl/header/actions/DimensionHeaderAction.java
index 659d4c0c6..707ce107e 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/gbl/header/actions/DimensionHeaderAction.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/gbl/header/actions/DimensionHeaderAction.java
@@ -29,82 +29,82 @@
  * @coverage swing.gef.policy
  */
 public abstract class DimensionHeaderAction<T extends DimensionInfo> extends ObjectInfoAction {
-  private final IEditPartViewer m_viewer;
+	private final IEditPartViewer m_viewer;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DimensionHeaderAction(DimensionHeaderEditPart<T> editPart, String text) {
-    this(editPart, text, null);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DimensionHeaderAction(DimensionHeaderEditPart<T> editPart, String text) {
+		this(editPart, text, null);
+	}
 
-  public DimensionHeaderAction(DimensionHeaderEditPart<T> editPart,
-      String text,
-      ImageDescriptor imageDescriptor) {
-    this(editPart, text, imageDescriptor, AS_PUSH_BUTTON);
-  }
+	public DimensionHeaderAction(DimensionHeaderEditPart<T> editPart,
+			String text,
+			ImageDescriptor imageDescriptor) {
+		this(editPart, text, imageDescriptor, AS_PUSH_BUTTON);
+	}
 
-  public DimensionHeaderAction(DimensionHeaderEditPart<T> editPart,
-      String text,
-      ImageDescriptor imageDescriptor,
-      int style) {
-    super(editPart.getLayout(), text, style);
-    m_viewer = editPart.getViewer();
-    setImageDescriptor(imageDescriptor);
-  }
+	public DimensionHeaderAction(DimensionHeaderEditPart<T> editPart,
+			String text,
+			ImageDescriptor imageDescriptor,
+			int style) {
+		super(editPart.getLayout(), text, style);
+		m_viewer = editPart.getViewer();
+		setImageDescriptor(imageDescriptor);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final int hashCode() {
-    return 0;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final int hashCode() {
+		return 0;
+	}
 
-  @Override
-  public boolean equals(Object obj) {
-    return obj != null && getClass() == obj.getClass();
-  }
+	@Override
+	public boolean equals(Object obj) {
+		return obj != null && getClass() == obj.getClass();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Run
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected final void runEx() throws Exception {
-    // prepare selection
-    List<T> dimensions = Lists.newArrayList();
-    {
-      List<EditPart> editParts = m_viewer.getSelectedEditParts();
-      for (EditPart editPart : editParts) {
-        if (editPart instanceof DimensionHeaderEditPart) {
-          @SuppressWarnings("unchecked")
-          DimensionHeaderEditPart<T> headerEditPart = (DimensionHeaderEditPart<T>) editPart;
-          dimensions.add(headerEditPart.getDimension());
-        }
-      }
-    }
-    // run over them
-    run(dimensions);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Run
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected final void runEx() throws Exception {
+		// prepare selection
+		List<T> dimensions = Lists.newArrayList();
+		{
+			List<EditPart> editParts = m_viewer.getSelectedEditParts();
+			for (EditPart editPart : editParts) {
+				if (editPart instanceof DimensionHeaderEditPart) {
+					@SuppressWarnings("unchecked")
+					DimensionHeaderEditPart<T> headerEditPart = (DimensionHeaderEditPart<T>) editPart;
+					dimensions.add(headerEditPart.getDimension());
+				}
+			}
+		}
+		// run over them
+		run(dimensions);
+	}
 
-  /**
-   * Does some operation on {@link List} of selected {@link FormDimensionInfo}'s.
-   */
-  protected void run(List<T> dimensions) throws Exception {
-    for (T dimension : dimensions) {
-      run(dimension);
-    }
-  }
+	/**
+	 * Does some operation on {@link List} of selected {@link FormDimensionInfo}'s.
+	 */
+	protected void run(List<T> dimensions) throws Exception {
+		for (T dimension : dimensions) {
+			run(dimension);
+		}
+	}
 
-  /**
-   * Does some operation on selected {@link FormDimensionInfo}'s.
-   */
-  protected void run(T dimension) throws Exception {
-  }
+	/**
+	 * Does some operation on selected {@link FormDimensionInfo}'s.
+	 */
+	protected void run(T dimension) throws Exception {
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/gbl/header/actions/SetAlignmentColumnAction.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/gbl/header/actions/SetAlignmentColumnAction.java
index 9909cb9e7..8c59db885 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/gbl/header/actions/SetAlignmentColumnAction.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/gbl/header/actions/SetAlignmentColumnAction.java
@@ -23,31 +23,31 @@
  * @coverage swing.gef.policy
  */
 public final class SetAlignmentColumnAction extends DimensionHeaderAction<ColumnInfo> {
-  private final ColumnInfo.Alignment m_alignment;
+	private final ColumnInfo.Alignment m_alignment;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SetAlignmentColumnAction(DimensionHeaderEditPart<ColumnInfo> header,
-      String text,
-      ImageDescriptor imageDescriptor,
-      ColumnInfo.Alignment alignment) {
-    super(header, text, imageDescriptor, AS_RADIO_BUTTON);
-    m_alignment = alignment;
-    setChecked(header.getDimension().getAlignment() == m_alignment);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SetAlignmentColumnAction(DimensionHeaderEditPart<ColumnInfo> header,
+			String text,
+			ImageDescriptor imageDescriptor,
+			ColumnInfo.Alignment alignment) {
+		super(header, text, imageDescriptor, AS_RADIO_BUTTON);
+		m_alignment = alignment;
+		setChecked(header.getDimension().getAlignment() == m_alignment);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Run
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void run(ColumnInfo dimension) throws Exception {
-    if (isChecked()) {
-      dimension.setAlignment(m_alignment);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Run
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void run(ColumnInfo dimension) throws Exception {
+		if (isChecked()) {
+			dimension.setAlignment(m_alignment);
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/gbl/header/actions/SetAlignmentRowAction.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/gbl/header/actions/SetAlignmentRowAction.java
index 3d993b569..fc73024fc 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/gbl/header/actions/SetAlignmentRowAction.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/gbl/header/actions/SetAlignmentRowAction.java
@@ -23,31 +23,31 @@
  * @coverage swing.gef.policy
  */
 public final class SetAlignmentRowAction extends DimensionHeaderAction<RowInfo> {
-  private final RowInfo.Alignment m_alignment;
+	private final RowInfo.Alignment m_alignment;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SetAlignmentRowAction(DimensionHeaderEditPart<RowInfo> header,
-      String text,
-      ImageDescriptor imageDescriptor,
-      RowInfo.Alignment alignment) {
-    super(header, text, imageDescriptor, AS_RADIO_BUTTON);
-    m_alignment = alignment;
-    setChecked(header.getDimension().getAlignment() == m_alignment);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SetAlignmentRowAction(DimensionHeaderEditPart<RowInfo> header,
+			String text,
+			ImageDescriptor imageDescriptor,
+			RowInfo.Alignment alignment) {
+		super(header, text, imageDescriptor, AS_RADIO_BUTTON);
+		m_alignment = alignment;
+		setChecked(header.getDimension().getAlignment() == m_alignment);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Run
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void run(RowInfo dimension) throws Exception {
-    if (isChecked()) {
-      dimension.setAlignment(m_alignment);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Run
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void run(RowInfo dimension) throws Exception {
+		if (isChecked()) {
+			dimension.setAlignment(m_alignment);
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/gbl/header/actions/SetGrowAction.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/gbl/header/actions/SetGrowAction.java
index a8b89e7d9..0d6f015ad 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/gbl/header/actions/SetGrowAction.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/gbl/header/actions/SetGrowAction.java
@@ -23,26 +23,26 @@
  * @coverage swing.gef.policy
  */
 public final class SetGrowAction<T extends DimensionInfo> extends DimensionHeaderAction<T> {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SetGrowAction(DimensionHeaderEditPart<T> header,
-      String text,
-      ImageDescriptor imageDescriptor) {
-    super(header, text, imageDescriptor, AS_CHECK_BOX);
-    setChecked(header.getDimension().hasWeight());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SetGrowAction(DimensionHeaderEditPart<T> header,
+			String text,
+			ImageDescriptor imageDescriptor) {
+		super(header, text, imageDescriptor, AS_CHECK_BOX);
+		setChecked(header.getDimension().hasWeight());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Run
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void run(T dimension) throws Exception {
-    double weight = dimension.hasWeight() ? 0.0 : 1.0;
-    dimension.setWeight(weight);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Run
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void run(T dimension) throws Exception {
+		double weight = dimension.hasWeight() ? 0.0 : 1.0;
+		dimension.setWeight(weight);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/gbl/header/edit/ColumnHeaderEditPart.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/gbl/header/edit/ColumnHeaderEditPart.java
index 9e2d27abf..de00a266e 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/gbl/header/edit/ColumnHeaderEditPart.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/gbl/header/edit/ColumnHeaderEditPart.java
@@ -40,203 +40,203 @@
  * @coverage swing.gef.policy
  */
 public final class ColumnHeaderEditPart extends DimensionHeaderEditPart<ColumnInfo> {
-  private final ColumnInfo m_column;
+	private final ColumnInfo m_column;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ColumnHeaderEditPart(AbstractGridBagLayoutInfo layout,
-      ColumnInfo column,
-      Figure containerFigure) {
-    super(layout, column, containerFigure);
-    m_column = column;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ColumnHeaderEditPart(AbstractGridBagLayoutInfo layout,
+			ColumnInfo column,
+			Figure containerFigure) {
+		super(layout, column, containerFigure);
+		m_column = column;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Figure
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Figure createFigure() {
-    Figure figure = new Figure() {
-      @Override
-      protected void paintClientArea(Graphics graphics) {
-        Rectangle r = getClientArea();
-        // ignore paint when Layout already replaced, but event loop happens
-        if (!m_layout.isActive()) {
-          return;
-        }
-        // draw rectangle
-        graphics.setForegroundColor(IColorConstants.buttonDarker);
-        graphics.drawLine(r.x, r.y, r.x, r.bottom());
-        graphics.drawLine(r.right() - 1, r.y, r.right() - 1, r.bottom());
-        // draw column index
-        int titleLeft;
-        int titleRight;
-        {
-          String title = "" + getIndex();
-          Dimension textExtents = graphics.getTextExtent(title);
-          if (r.width < 3 + textExtents.width + 3) {
-            return;
-          }
-          // draw title
-          titleLeft = r.x + (r.width - textExtents.width) / 2;
-          titleRight = titleLeft + textExtents.width;
-          int y = r.y + (r.height - textExtents.height) / 2;
-          graphics.setForegroundColor(IColorConstants.black);
-          graphics.drawText(title, titleLeft, y);
-        }
-        // draw alignment indicator
-        if (titleLeft - r.x > 3 + 7 + 3) {
-          Image image = null;
-          Alignment alignment = m_column.getAlignment();
-          if (alignment == ColumnInfo.Alignment.LEFT) {
-            image = getImage("left.gif");
-          } else if (alignment == ColumnInfo.Alignment.RIGHT) {
-            image = getImage("right.gif");
-          } else if (alignment == ColumnInfo.Alignment.CENTER) {
-            image = getImage("center.gif");
-          } else if (alignment == ColumnInfo.Alignment.FILL) {
-            image = getImage("fill.gif");
-          }
-          if (image != null) {
-            int x = r.x + 2;
-            drawCentered(graphics, image, x);
-          }
-        }
-        // draw grow indicator
-        if (m_column.hasWeight()) {
-          if (titleRight + 3 + 7 + 3 < r.right()) {
-            Image image = getImage("grow.gif");
-            drawCentered(graphics, image, r.right() - 3 - image.getBounds().width);
-          }
-        }
-      }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Figure
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Figure createFigure() {
+		Figure figure = new Figure() {
+			@Override
+			protected void paintClientArea(Graphics graphics) {
+				Rectangle r = getClientArea();
+				// ignore paint when Layout already replaced, but event loop happens
+				if (!m_layout.isActive()) {
+					return;
+				}
+				// draw rectangle
+				graphics.setForegroundColor(IColorConstants.buttonDarker);
+				graphics.drawLine(r.x, r.y, r.x, r.bottom());
+				graphics.drawLine(r.right() - 1, r.y, r.right() - 1, r.bottom());
+				// draw column index
+				int titleLeft;
+				int titleRight;
+				{
+					String title = "" + getIndex();
+					Dimension textExtents = graphics.getTextExtent(title);
+					if (r.width < 3 + textExtents.width + 3) {
+						return;
+					}
+					// draw title
+					titleLeft = r.x + (r.width - textExtents.width) / 2;
+					titleRight = titleLeft + textExtents.width;
+					int y = r.y + (r.height - textExtents.height) / 2;
+					graphics.setForegroundColor(IColorConstants.black);
+					graphics.drawText(title, titleLeft, y);
+				}
+				// draw alignment indicator
+				if (titleLeft - r.x > 3 + 7 + 3) {
+					Image image = null;
+					Alignment alignment = m_column.getAlignment();
+					if (alignment == ColumnInfo.Alignment.LEFT) {
+						image = getImage("left.gif");
+					} else if (alignment == ColumnInfo.Alignment.RIGHT) {
+						image = getImage("right.gif");
+					} else if (alignment == ColumnInfo.Alignment.CENTER) {
+						image = getImage("center.gif");
+					} else if (alignment == ColumnInfo.Alignment.FILL) {
+						image = getImage("fill.gif");
+					}
+					if (image != null) {
+						int x = r.x + 2;
+						drawCentered(graphics, image, x);
+					}
+				}
+				// draw grow indicator
+				if (m_column.hasWeight()) {
+					if (titleRight + 3 + 7 + 3 < r.right()) {
+						Image image = getImage("grow.gif");
+						drawCentered(graphics, image, r.right() - 3 - image.getBounds().width);
+					}
+				}
+			}
 
-      private Image getImage(String name) {
-        return AbstractGridBagLayoutInfo.getImage("headers/h/alignment/" + name);
-      }
+			private Image getImage(String name) {
+				return AbstractGridBagLayoutInfo.getImage("headers/h/alignment/" + name);
+			}
 
-      private void drawCentered(Graphics graphics, Image image, int x) {
-        int y = (getBounds().height - image.getBounds().height) / 2;
-        graphics.drawImage(image, x, y);
-      }
-    };
-    //
-    figure.setOpaque(true);
-    figure.setBackground(COLOR_NORMAL);
-    figure.setFont(DEFAULT_FONT);
-    return figure;
-  }
+			private void drawCentered(Graphics graphics, Image image, int x) {
+				int y = (getBounds().height - image.getBounds().height) / 2;
+				graphics.drawImage(image, x, y);
+			}
+		};
+		//
+		figure.setOpaque(true);
+		figure.setBackground(COLOR_NORMAL);
+		figure.setFont(DEFAULT_FONT);
+		return figure;
+	}
 
-  @Override
-  protected void refreshVisuals() {
-    super.refreshVisuals();
-    int index = getIndex();
-    Interval interval = m_layout.getGridInfo().getColumnIntervals()[index];
-    Rectangle bounds =
-        new Rectangle(interval.begin(),
-            0,
-            interval.length()+ 1,
-            ((GraphicalEditPart) getParent()).getFigure().getSize().height);
-    bounds.performTranslate(getOffset().x, 0);
-    getFigure().setBounds(bounds);
-  }
+	@Override
+	protected void refreshVisuals() {
+		super.refreshVisuals();
+		int index = getIndex();
+		Interval interval = m_layout.getGridInfo().getColumnIntervals()[index];
+		Rectangle bounds =
+				new Rectangle(interval.begin(),
+						0,
+						interval.length()+ 1,
+						((GraphicalEditPart) getParent()).getFigure().getSize().height);
+		bounds.performTranslate(getOffset().x, 0);
+		getFigure().setBounds(bounds);
+	}
 
-  @Override
-  public int getIndex() {
-    return m_layout.getColumns().indexOf(m_column);
-  }
+	@Override
+	public int getIndex() {
+		return m_layout.getColumns().indexOf(m_column);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IHeaderMenuProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void buildContextMenu(IMenuManager manager) {
-    // operations
-    {
-      manager.add(new DimensionHeaderAction<ColumnInfo>(this,
-          GefMessages.ColumnHeaderEditPart_insertColumn) {
-        @Override
-        protected void run(ColumnInfo column) throws Exception {
-          m_layout.getColumnOperations().insert(column.getIndex());
-        }
-      });
-      manager.add(new DimensionHeaderAction<ColumnInfo>(this,
-          GefMessages.ColumnHeaderEditPart_appendColumn) {
-        @Override
-        protected void run(ColumnInfo column) throws Exception {
-          m_layout.getColumnOperations().insert(column.getIndex() + 1);
-        }
-      });
-      manager.add(new DimensionHeaderAction<ColumnInfo>(this,
-          GefMessages.ColumnHeaderEditPart_deleteColumn,
-          AbstractGridBagLayoutInfo.getImageDescriptor("headers/h/menu/delete.gif")) {
-        @Override
-        protected void run(ColumnInfo column) throws Exception {
-          m_layout.getColumnOperations().delete(column.getIndex());
-        }
-      });
-      manager.add(new DimensionHeaderAction<ColumnInfo>(this,
-          GefMessages.ColumnHeaderEditPart_deleteContents) {
-        @Override
-        protected void run(ColumnInfo column) throws Exception {
-          m_layout.getColumnOperations().clear(column.getIndex());
-        }
-      });
-      manager.add(new DimensionHeaderAction<ColumnInfo>(this,
-          GefMessages.ColumnHeaderEditPart_splitColumn) {
-        @Override
-        protected void run(ColumnInfo column) throws Exception {
-          m_layout.getColumnOperations().split(column.getIndex());
-        }
-      });
-    }
-    // alignment
-    {
-      manager.add(new Separator());
-      manager.add(new SetAlignmentColumnAction(this,
-          GefMessages.ColumnHeaderEditPart_haLeft,
-          AbstractGridBagLayoutInfo.getImageDescriptor("headers/h/menu/left.gif"),
-          ColumnInfo.Alignment.LEFT));
-      manager.add(new SetAlignmentColumnAction(this,
-          GefMessages.ColumnHeaderEditPart_haCenter,
-          AbstractGridBagLayoutInfo.getImageDescriptor("headers/h/menu/center.gif"),
-          ColumnInfo.Alignment.CENTER));
-      manager.add(new SetAlignmentColumnAction(this,
-          GefMessages.ColumnHeaderEditPart_haRight,
-          AbstractGridBagLayoutInfo.getImageDescriptor("headers/h/menu/right.gif"),
-          ColumnInfo.Alignment.RIGHT));
-      manager.add(new SetAlignmentColumnAction(this,
-          GefMessages.ColumnHeaderEditPart_haFill,
-          AbstractGridBagLayoutInfo.getImageDescriptor("headers/h/menu/fill.gif"),
-          ColumnInfo.Alignment.FILL));
-    }
-    // grow
-    {
-      manager.add(new Separator());
-      manager.add(new SetGrowAction<ColumnInfo>(this,
-          GefMessages.ColumnHeaderEditPart_grow,
-          AbstractGridBagLayoutInfo.getImageDescriptor("headers/h/menu/grow.gif")));
-    }
-    // properties
-    {
-      manager.add(new Separator());
-      manager.add(new Action(GefMessages.ColumnHeaderEditPart_properties) {
-        @Override
-        public void run() {
-          editDimension();
-        }
-      });
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IHeaderMenuProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void buildContextMenu(IMenuManager manager) {
+		// operations
+		{
+			manager.add(new DimensionHeaderAction<ColumnInfo>(this,
+					GefMessages.ColumnHeaderEditPart_insertColumn) {
+				@Override
+				protected void run(ColumnInfo column) throws Exception {
+					m_layout.getColumnOperations().insert(column.getIndex());
+				}
+			});
+			manager.add(new DimensionHeaderAction<ColumnInfo>(this,
+					GefMessages.ColumnHeaderEditPart_appendColumn) {
+				@Override
+				protected void run(ColumnInfo column) throws Exception {
+					m_layout.getColumnOperations().insert(column.getIndex() + 1);
+				}
+			});
+			manager.add(new DimensionHeaderAction<ColumnInfo>(this,
+					GefMessages.ColumnHeaderEditPart_deleteColumn,
+					AbstractGridBagLayoutInfo.getImageDescriptor("headers/h/menu/delete.gif")) {
+				@Override
+				protected void run(ColumnInfo column) throws Exception {
+					m_layout.getColumnOperations().delete(column.getIndex());
+				}
+			});
+			manager.add(new DimensionHeaderAction<ColumnInfo>(this,
+					GefMessages.ColumnHeaderEditPart_deleteContents) {
+				@Override
+				protected void run(ColumnInfo column) throws Exception {
+					m_layout.getColumnOperations().clear(column.getIndex());
+				}
+			});
+			manager.add(new DimensionHeaderAction<ColumnInfo>(this,
+					GefMessages.ColumnHeaderEditPart_splitColumn) {
+				@Override
+				protected void run(ColumnInfo column) throws Exception {
+					m_layout.getColumnOperations().split(column.getIndex());
+				}
+			});
+		}
+		// alignment
+		{
+			manager.add(new Separator());
+			manager.add(new SetAlignmentColumnAction(this,
+					GefMessages.ColumnHeaderEditPart_haLeft,
+					AbstractGridBagLayoutInfo.getImageDescriptor("headers/h/menu/left.gif"),
+					ColumnInfo.Alignment.LEFT));
+			manager.add(new SetAlignmentColumnAction(this,
+					GefMessages.ColumnHeaderEditPart_haCenter,
+					AbstractGridBagLayoutInfo.getImageDescriptor("headers/h/menu/center.gif"),
+					ColumnInfo.Alignment.CENTER));
+			manager.add(new SetAlignmentColumnAction(this,
+					GefMessages.ColumnHeaderEditPart_haRight,
+					AbstractGridBagLayoutInfo.getImageDescriptor("headers/h/menu/right.gif"),
+					ColumnInfo.Alignment.RIGHT));
+			manager.add(new SetAlignmentColumnAction(this,
+					GefMessages.ColumnHeaderEditPart_haFill,
+					AbstractGridBagLayoutInfo.getImageDescriptor("headers/h/menu/fill.gif"),
+					ColumnInfo.Alignment.FILL));
+		}
+		// grow
+		{
+			manager.add(new Separator());
+			manager.add(new SetGrowAction<ColumnInfo>(this,
+					GefMessages.ColumnHeaderEditPart_grow,
+					AbstractGridBagLayoutInfo.getImageDescriptor("headers/h/menu/grow.gif")));
+		}
+		// properties
+		{
+			manager.add(new Separator());
+			manager.add(new Action(GefMessages.ColumnHeaderEditPart_properties) {
+				@Override
+				public void run() {
+					editDimension();
+				}
+			});
+		}
+	}
 
-  @Override
-  protected void editDimension() {
-    new ColumnEditDialog(DesignerPlugin.getShell(), m_layout, m_column).open();
-  }
+	@Override
+	protected void editDimension() {
+		new ColumnEditDialog(DesignerPlugin.getShell(), m_layout, m_column).open();
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/gbl/header/edit/DimensionHeaderEditPart.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/gbl/header/edit/DimensionHeaderEditPart.java
index cee4554d4..a7cd3554b 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/gbl/header/edit/DimensionHeaderEditPart.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/gbl/header/edit/DimensionHeaderEditPart.java
@@ -34,91 +34,91 @@
  * @coverage swing.gef.policy
  */
 public abstract class DimensionHeaderEditPart<T extends DimensionInfo> extends GraphicalEditPart
-    implements
-      IHeaderMenuProvider {
-  protected static final Font DEFAULT_FONT = new Font(null, "Arial", 7, SWT.NONE);
-  protected static final Color COLOR_NORMAL = Headers.COLOR_HEADER;
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance fields
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected final AbstractGridBagLayoutInfo m_layout;
-  protected final T m_dimension;
-  private final Figure m_containerFigure;
+implements
+IHeaderMenuProvider {
+	protected static final Font DEFAULT_FONT = new Font(null, "Arial", 7, SWT.NONE);
+	protected static final Color COLOR_NORMAL = Headers.COLOR_HEADER;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance fields
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected final AbstractGridBagLayoutInfo m_layout;
+	protected final T m_dimension;
+	private final Figure m_containerFigure;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DimensionHeaderEditPart(AbstractGridBagLayoutInfo layout,
-      T dimension,
-      Figure containerFigure) {
-    m_layout = layout;
-    m_dimension = dimension;
-    m_containerFigure = containerFigure;
-    setModel(dimension);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DimensionHeaderEditPart(AbstractGridBagLayoutInfo layout,
+			T dimension,
+			Figure containerFigure) {
+		m_layout = layout;
+		m_dimension = dimension;
+		m_containerFigure = containerFigure;
+		setModel(dimension);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the index of this {@link DimensionInfo}.
-   */
-  public abstract int getIndex();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the index of this {@link DimensionInfo}.
+	 */
+	public abstract int getIndex();
 
-  /**
-   * @return the host {@link AbstractGridBagLayoutInfo}.
-   */
-  public final AbstractGridBagLayoutInfo getLayout() {
-    return m_layout;
-  }
+	/**
+	 * @return the host {@link AbstractGridBagLayoutInfo}.
+	 */
+	public final AbstractGridBagLayoutInfo getLayout() {
+		return m_layout;
+	}
 
-  /**
-   * @return the {@link DimensionInfo} model.
-   */
-  public final T getDimension() {
-    return m_dimension;
-  }
+	/**
+	 * @return the {@link DimensionInfo} model.
+	 */
+	public final T getDimension() {
+		return m_dimension;
+	}
 
-  /**
-   * @return the offset of {@link Figure} with headers relative to the absolute layer.
-   */
-  public final Point getOffset() {
-    Point offset = new Point(0, 0);
-    FigureUtils.translateFigureToAbsolute2(m_containerFigure, offset);
-    return offset;
-  }
+	/**
+	 * @return the offset of {@link Figure} with headers relative to the absolute layer.
+	 */
+	public final Point getOffset() {
+		Point offset = new Point(0, 0);
+		FigureUtils.translateFigureToAbsolute2(m_containerFigure, offset);
+		return offset;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Dragging
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final Tool getDragTrackerTool(Request request) {
-    return new ParentTargetDragEditPartTracker(this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Dragging
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final Tool getDragTrackerTool(Request request) {
+		return new ParentTargetDragEditPartTracker(this);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Edit
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void performRequest(Request request) {
-    super.performRequest(request);
-    if (request.getType() == Request.REQ_OPEN) {
-      editDimension();
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Edit
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void performRequest(Request request) {
+		super.performRequest(request);
+		if (request.getType() == Request.REQ_OPEN) {
+			editDimension();
+		}
+	}
 
-  /**
-   * Opens the {@link DimensionInfo} edit dialog.
-   */
-  protected abstract void editDimension();
+	/**
+	 * Opens the {@link DimensionInfo} edit dialog.
+	 */
+	protected abstract void editDimension();
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/gbl/header/edit/RowHeaderEditPart.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/gbl/header/edit/RowHeaderEditPart.java
index 46aed6d20..e581fc88f 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/gbl/header/edit/RowHeaderEditPart.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/gbl/header/edit/RowHeaderEditPart.java
@@ -42,216 +42,216 @@
  * @coverage swing.gef.policy
  */
 public final class RowHeaderEditPart extends DimensionHeaderEditPart<RowInfo> {
-  private final RowInfo m_row;
+	private final RowInfo m_row;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public RowHeaderEditPart(AbstractGridBagLayoutInfo layout, RowInfo row, Figure containerFigure) {
-    super(layout, row, containerFigure);
-    m_row = row;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public RowHeaderEditPart(AbstractGridBagLayoutInfo layout, RowInfo row, Figure containerFigure) {
+		super(layout, row, containerFigure);
+		m_row = row;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Figure
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Figure createFigure() {
-    Figure figure = new Figure() {
-      @Override
-      protected void paintClientArea(Graphics graphics) {
-        Rectangle r = getClientArea();
-        // ignore paint when Layout already replaced, but event loop happens
-        if (!m_layout.isActive()) {
-          return;
-        }
-        // draw rectangle
-        graphics.setForegroundColor(IColorConstants.buttonDarker);
-        graphics.drawLine(r.x, r.y, r.right(), r.y);
-        graphics.drawLine(r.x, r.bottom() - 1, r.right(), r.bottom() - 1);
-        // draw row index
-        int titleTop;
-        int titleBottom;
-        {
-          String title = "" + getIndex();
-          Dimension textExtents = graphics.getTextExtent(title);
-          if (r.height < textExtents.height) {
-            return;
-          }
-          titleTop = r.y + (r.height - textExtents.height) / 2;
-          titleBottom = titleTop + textExtents.height;
-          int x = r.x + (r.width - textExtents.width) / 2;
-          graphics.setForegroundColor(IColorConstants.black);
-          graphics.drawText(title, x, titleTop);
-        }
-        // draw alignment indicator
-        if (titleTop - r.y > 3 + 7 + 3) {
-          Image image = null;
-          Alignment alignment = m_dimension.getAlignment();
-          if (alignment == RowInfo.Alignment.TOP) {
-            image = getImage("top.gif");
-          } else if (alignment == RowInfo.Alignment.BOTTOM) {
-            image = getImage("bottom.gif");
-          } else if (alignment == RowInfo.Alignment.CENTER) {
-            image = getImage("center.gif");
-          } else if (alignment == RowInfo.Alignment.FILL) {
-            image = getImage("fill.gif");
-          } else if (alignment == RowInfo.Alignment.BASELINE) {
-            image = getImage("baseline.gif");
-          } else if (alignment == RowInfo.Alignment.BASELINE_ABOVE) {
-            image = getImage("baseline_above.gif");
-          } else if (alignment == RowInfo.Alignment.BASELINE_BELOW) {
-            image = getImage("baseline_below.gif");
-          }
-          if (image != null) {
-            int y = r.y + 2;
-            drawCentered(graphics, image, y);
-          }
-        }
-        // draw grow indicator
-        if (m_dimension.hasWeight()) {
-          if (titleBottom + 3 + 7 + 3 < r.bottom()) {
-            Image image = getImage("grow.gif");
-            drawCentered(graphics, image, r.bottom() - 3 - image.getBounds().height);
-          }
-        }
-      }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Figure
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Figure createFigure() {
+		Figure figure = new Figure() {
+			@Override
+			protected void paintClientArea(Graphics graphics) {
+				Rectangle r = getClientArea();
+				// ignore paint when Layout already replaced, but event loop happens
+				if (!m_layout.isActive()) {
+					return;
+				}
+				// draw rectangle
+				graphics.setForegroundColor(IColorConstants.buttonDarker);
+				graphics.drawLine(r.x, r.y, r.right(), r.y);
+				graphics.drawLine(r.x, r.bottom() - 1, r.right(), r.bottom() - 1);
+				// draw row index
+				int titleTop;
+				int titleBottom;
+				{
+					String title = "" + getIndex();
+					Dimension textExtents = graphics.getTextExtent(title);
+					if (r.height < textExtents.height) {
+						return;
+					}
+					titleTop = r.y + (r.height - textExtents.height) / 2;
+					titleBottom = titleTop + textExtents.height;
+					int x = r.x + (r.width - textExtents.width) / 2;
+					graphics.setForegroundColor(IColorConstants.black);
+					graphics.drawText(title, x, titleTop);
+				}
+				// draw alignment indicator
+				if (titleTop - r.y > 3 + 7 + 3) {
+					Image image = null;
+					Alignment alignment = m_dimension.getAlignment();
+					if (alignment == RowInfo.Alignment.TOP) {
+						image = getImage("top.gif");
+					} else if (alignment == RowInfo.Alignment.BOTTOM) {
+						image = getImage("bottom.gif");
+					} else if (alignment == RowInfo.Alignment.CENTER) {
+						image = getImage("center.gif");
+					} else if (alignment == RowInfo.Alignment.FILL) {
+						image = getImage("fill.gif");
+					} else if (alignment == RowInfo.Alignment.BASELINE) {
+						image = getImage("baseline.gif");
+					} else if (alignment == RowInfo.Alignment.BASELINE_ABOVE) {
+						image = getImage("baseline_above.gif");
+					} else if (alignment == RowInfo.Alignment.BASELINE_BELOW) {
+						image = getImage("baseline_below.gif");
+					}
+					if (image != null) {
+						int y = r.y + 2;
+						drawCentered(graphics, image, y);
+					}
+				}
+				// draw grow indicator
+				if (m_dimension.hasWeight()) {
+					if (titleBottom + 3 + 7 + 3 < r.bottom()) {
+						Image image = getImage("grow.gif");
+						drawCentered(graphics, image, r.bottom() - 3 - image.getBounds().height);
+					}
+				}
+			}
 
-      private Image getImage(String name) {
-        return AbstractGridBagLayoutInfo.getImage("headers/v/alignment/" + name);
-      }
+			private Image getImage(String name) {
+				return AbstractGridBagLayoutInfo.getImage("headers/v/alignment/" + name);
+			}
 
-      private void drawCentered(Graphics graphics, Image image, int y) {
-        int x = (getBounds().width - image.getBounds().width) / 2;
-        graphics.drawImage(image, x, y);
-      }
-    };
-    //
-    figure.setOpaque(true);
-    figure.setBackground(COLOR_NORMAL);
-    figure.setFont(DEFAULT_FONT);
-    return figure;
-  }
+			private void drawCentered(Graphics graphics, Image image, int y) {
+				int x = (getBounds().width - image.getBounds().width) / 2;
+				graphics.drawImage(image, x, y);
+			}
+		};
+		//
+		figure.setOpaque(true);
+		figure.setBackground(COLOR_NORMAL);
+		figure.setFont(DEFAULT_FONT);
+		return figure;
+	}
 
-  @Override
-  protected void refreshVisuals() {
-    super.refreshVisuals();
-    int index = getIndex();
-    Interval interval = m_layout.getGridInfo().getRowIntervals()[index];
-    Rectangle bounds =
-        new Rectangle(0,
-            interval.begin(),
-            ((GraphicalEditPart) getParent()).getFigure().getSize().width,
-            interval.length()+ 1);
-    bounds.performTranslate(0, getOffset().y);
-    getFigure().setBounds(bounds);
-  }
+	@Override
+	protected void refreshVisuals() {
+		super.refreshVisuals();
+		int index = getIndex();
+		Interval interval = m_layout.getGridInfo().getRowIntervals()[index];
+		Rectangle bounds =
+				new Rectangle(0,
+						interval.begin(),
+						((GraphicalEditPart) getParent()).getFigure().getSize().width,
+						interval.length()+ 1);
+		bounds.performTranslate(0, getOffset().y);
+		getFigure().setBounds(bounds);
+	}
 
-  @Override
-  public int getIndex() {
-    return m_layout.getRows().indexOf(m_row);
-  }
+	@Override
+	public int getIndex() {
+		return m_layout.getRows().indexOf(m_row);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IHeaderMenuProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void buildContextMenu(IMenuManager manager) {
-    // operations
-    {
-      manager.add(new DimensionHeaderAction<RowInfo>(this, GefMessages.RowHeaderEditPart_insertRow) {
-        @Override
-        protected void run(RowInfo row) throws Exception {
-          m_layout.getRowOperations().insert(row.getIndex());
-        }
-      });
-      manager.add(new DimensionHeaderAction<RowInfo>(this, GefMessages.RowHeaderEditPart_appendRow) {
-        @Override
-        protected void run(RowInfo row) throws Exception {
-          m_layout.getRowOperations().insert(row.getIndex() + 1);
-        }
-      });
-      manager.add(new DimensionHeaderAction<RowInfo>(this, GefMessages.RowHeaderEditPart_deleteRow,
-          AbstractGridBagLayoutInfo.getImageDescriptor("headers/v/menu/delete.gif")) {
-        @Override
-        protected void run(RowInfo row) throws Exception {
-          m_layout.getRowOperations().delete(row.getIndex());
-        }
-      });
-      manager.add(new DimensionHeaderAction<RowInfo>(this,
-          GefMessages.RowHeaderEditPart_deleteContents) {
-        @Override
-        protected void run(RowInfo row) throws Exception {
-          m_layout.getRowOperations().clear(row.getIndex());
-        }
-      });
-      manager.add(new DimensionHeaderAction<RowInfo>(this, GefMessages.RowHeaderEditPart_splitRow) {
-        @Override
-        protected void run(RowInfo row) throws Exception {
-          m_layout.getRowOperations().split(row.getIndex());
-        }
-      });
-    }
-    // alignment
-    {
-      manager.add(new Separator());
-      manager.add(new SetAlignmentRowAction(this,
-          GefMessages.RowHeaderEditPart_vaTop,
-          AbstractGridBagLayoutInfo.getImageDescriptor("headers/v/menu/top.gif"),
-          RowInfo.Alignment.TOP));
-      manager.add(new SetAlignmentRowAction(this,
-          GefMessages.RowHeaderEditPart_vaCenter,
-          AbstractGridBagLayoutInfo.getImageDescriptor("headers/v/menu/center.gif"),
-          RowInfo.Alignment.CENTER));
-      manager.add(new SetAlignmentRowAction(this,
-          GefMessages.RowHeaderEditPart_vaBottom,
-          AbstractGridBagLayoutInfo.getImageDescriptor("headers/v/menu/bottom.gif"),
-          RowInfo.Alignment.BOTTOM));
-      manager.add(new SetAlignmentRowAction(this,
-          GefMessages.RowHeaderEditPart_vaFill,
-          AbstractGridBagLayoutInfo.getImageDescriptor("headers/v/menu/fill.gif"),
-          RowInfo.Alignment.FILL));
-      if (SystemUtils.IS_JAVA_1_6 || SystemUtils.IS_JAVA_1_7) {
-        manager.add(new SetAlignmentRowAction(this,
-            GefMessages.RowHeaderEditPart_vaBaseline,
-            AbstractGridBagLayoutInfo.getImageDescriptor("headers/v/menu/baseline.gif"),
-            RowInfo.Alignment.BASELINE));
-        manager.add(new SetAlignmentRowAction(this,
-            GefMessages.RowHeaderEditPart_vaAboveBaseline,
-            AbstractGridBagLayoutInfo.getImageDescriptor("headers/v/menu/baseline_above.gif"),
-            RowInfo.Alignment.BASELINE_ABOVE));
-        manager.add(new SetAlignmentRowAction(this,
-            GefMessages.RowHeaderEditPart_vaBelowBaseline,
-            AbstractGridBagLayoutInfo.getImageDescriptor("headers/v/menu/baseline_below.gif"),
-            RowInfo.Alignment.BASELINE_BELOW));
-      }
-    }
-    // grow
-    {
-      manager.add(new Separator());
-      manager.add(new SetGrowAction<RowInfo>(this,
-          GefMessages.RowHeaderEditPart_grow,
-          AbstractGridBagLayoutInfo.getImageDescriptor("headers/v/menu/grow.gif")));
-    }
-    // properties
-    {
-      manager.add(new Separator());
-      manager.add(new Action(GefMessages.RowHeaderEditPart_properties) {
-        @Override
-        public void run() {
-          editDimension();
-        }
-      });
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IHeaderMenuProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void buildContextMenu(IMenuManager manager) {
+		// operations
+		{
+			manager.add(new DimensionHeaderAction<RowInfo>(this, GefMessages.RowHeaderEditPart_insertRow) {
+				@Override
+				protected void run(RowInfo row) throws Exception {
+					m_layout.getRowOperations().insert(row.getIndex());
+				}
+			});
+			manager.add(new DimensionHeaderAction<RowInfo>(this, GefMessages.RowHeaderEditPart_appendRow) {
+				@Override
+				protected void run(RowInfo row) throws Exception {
+					m_layout.getRowOperations().insert(row.getIndex() + 1);
+				}
+			});
+			manager.add(new DimensionHeaderAction<RowInfo>(this, GefMessages.RowHeaderEditPart_deleteRow,
+					AbstractGridBagLayoutInfo.getImageDescriptor("headers/v/menu/delete.gif")) {
+				@Override
+				protected void run(RowInfo row) throws Exception {
+					m_layout.getRowOperations().delete(row.getIndex());
+				}
+			});
+			manager.add(new DimensionHeaderAction<RowInfo>(this,
+					GefMessages.RowHeaderEditPart_deleteContents) {
+				@Override
+				protected void run(RowInfo row) throws Exception {
+					m_layout.getRowOperations().clear(row.getIndex());
+				}
+			});
+			manager.add(new DimensionHeaderAction<RowInfo>(this, GefMessages.RowHeaderEditPart_splitRow) {
+				@Override
+				protected void run(RowInfo row) throws Exception {
+					m_layout.getRowOperations().split(row.getIndex());
+				}
+			});
+		}
+		// alignment
+		{
+			manager.add(new Separator());
+			manager.add(new SetAlignmentRowAction(this,
+					GefMessages.RowHeaderEditPart_vaTop,
+					AbstractGridBagLayoutInfo.getImageDescriptor("headers/v/menu/top.gif"),
+					RowInfo.Alignment.TOP));
+			manager.add(new SetAlignmentRowAction(this,
+					GefMessages.RowHeaderEditPart_vaCenter,
+					AbstractGridBagLayoutInfo.getImageDescriptor("headers/v/menu/center.gif"),
+					RowInfo.Alignment.CENTER));
+			manager.add(new SetAlignmentRowAction(this,
+					GefMessages.RowHeaderEditPart_vaBottom,
+					AbstractGridBagLayoutInfo.getImageDescriptor("headers/v/menu/bottom.gif"),
+					RowInfo.Alignment.BOTTOM));
+			manager.add(new SetAlignmentRowAction(this,
+					GefMessages.RowHeaderEditPart_vaFill,
+					AbstractGridBagLayoutInfo.getImageDescriptor("headers/v/menu/fill.gif"),
+					RowInfo.Alignment.FILL));
+			if (SystemUtils.IS_JAVA_1_6 || SystemUtils.IS_JAVA_1_7) {
+				manager.add(new SetAlignmentRowAction(this,
+						GefMessages.RowHeaderEditPart_vaBaseline,
+						AbstractGridBagLayoutInfo.getImageDescriptor("headers/v/menu/baseline.gif"),
+						RowInfo.Alignment.BASELINE));
+				manager.add(new SetAlignmentRowAction(this,
+						GefMessages.RowHeaderEditPart_vaAboveBaseline,
+						AbstractGridBagLayoutInfo.getImageDescriptor("headers/v/menu/baseline_above.gif"),
+						RowInfo.Alignment.BASELINE_ABOVE));
+				manager.add(new SetAlignmentRowAction(this,
+						GefMessages.RowHeaderEditPart_vaBelowBaseline,
+						AbstractGridBagLayoutInfo.getImageDescriptor("headers/v/menu/baseline_below.gif"),
+						RowInfo.Alignment.BASELINE_BELOW));
+			}
+		}
+		// grow
+		{
+			manager.add(new Separator());
+			manager.add(new SetGrowAction<RowInfo>(this,
+					GefMessages.RowHeaderEditPart_grow,
+					AbstractGridBagLayoutInfo.getImageDescriptor("headers/v/menu/grow.gif")));
+		}
+		// properties
+		{
+			manager.add(new Separator());
+			manager.add(new Action(GefMessages.RowHeaderEditPart_properties) {
+				@Override
+				public void run() {
+					editDimension();
+				}
+			});
+		}
+	}
 
-  @Override
-  protected void editDimension() {
-    new RowEditDialog(DesignerPlugin.getShell(), m_layout, m_row).open();
-  }
+	@Override
+	protected void editDimension() {
+		new RowEditDialog(DesignerPlugin.getShell(), m_layout, m_row).open();
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/gbl/header/layout/ColumnsLayoutEditPolicy.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/gbl/header/layout/ColumnsLayoutEditPolicy.java
index ca6524876..a9fa1664a 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/gbl/header/layout/ColumnsLayoutEditPolicy.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/gbl/header/layout/ColumnsLayoutEditPolicy.java
@@ -47,164 +47,164 @@
  * @coverage swing.gef.policy
  */
 public final class ColumnsLayoutEditPolicy extends AbstractHeaderLayoutEditPolicy {
-  private final GridBagLayoutEditPolicy m_mainPolicy;
-  private final AbstractGridBagLayoutInfo m_layout;
+	private final GridBagLayoutEditPolicy m_mainPolicy;
+	private final AbstractGridBagLayoutInfo m_layout;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ColumnsLayoutEditPolicy(GridBagLayoutEditPolicy mainPolicy,
-      AbstractGridBagLayoutInfo layout) {
-    super(mainPolicy);
-    m_mainPolicy = mainPolicy;
-    m_layout = layout;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ColumnsLayoutEditPolicy(GridBagLayoutEditPolicy mainPolicy,
+			AbstractGridBagLayoutInfo layout) {
+		super(mainPolicy);
+		m_mainPolicy = mainPolicy;
+		m_layout = layout;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Children
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void decorateChild(EditPart child) {
-    child.installEditPolicy(EditPolicy.SELECTION_ROLE, new ColumnSelectionEditPolicy(m_mainPolicy));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Children
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void decorateChild(EditPart child) {
+		child.installEditPolicy(EditPolicy.SELECTION_ROLE, new ColumnSelectionEditPolicy(m_mainPolicy));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Move
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final Figure m_insertFeedback = AbstractGridLayoutEditPolicy.createInsertFigure();
-  private TextFeedback m_feedback;
-  private Command m_moveCommand;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Move
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final Figure m_insertFeedback = AbstractGridLayoutEditPolicy.createInsertFigure();
+	private TextFeedback m_feedback;
+	private Command m_moveCommand;
 
-  @Override
-  protected Command getMoveCommand(ChangeBoundsRequest request) {
-    return m_moveCommand;
-  }
+	@Override
+	protected Command getMoveCommand(ChangeBoundsRequest request) {
+		return m_moveCommand;
+	}
 
-  @Override
-  protected void showLayoutTargetFeedback(Request request) {
-    // prepare header
-    ColumnHeaderEditPart headerEditPart;
-    {
-      ChangeBoundsRequest changeBoundsRequest = (ChangeBoundsRequest) request;
-      headerEditPart = (ColumnHeaderEditPart) changeBoundsRequest.getEditParts().get(0);
-    }
-    // prepare location
-    Point location;
-    {
-      IDropRequest dropRequest = (IDropRequest) request;
-      location = dropRequest.getLocation().getCopy();
-    }
-    // prepare target header
-    ColumnHeaderEditPart target = null;
-    {
-      List<EditPart> children = getHost().getChildren();
-      for (EditPart child : children) {
-        ColumnHeaderEditPart columnEditPart = (ColumnHeaderEditPart) child;
-        Rectangle bounds = columnEditPart.getFigure().getBounds();
-        if (location.x < bounds.getCenter().x) {
-          target = columnEditPart;
-          break;
-        }
-      }
-    }
-    // prepare grid information
-    IGridInfo gridInfo = m_layout.getGridInfo();
-    Interval[] columnIntervals = gridInfo.getColumnIntervals();
-    Interval[] rowIntervals = gridInfo.getRowIntervals();
-    int y1 = rowIntervals[0].begin() - 5;
-    int y2 = rowIntervals[rowIntervals.length - 1].end() + 5;
-    // prepare index of target column and position for insert feedbacks
-    final int index;
-    int x;
-    int size;
-    if (target != null) {
-      index = target.getDimension().getIndex();
-      // prepare previous interval
-      Interval prevInterval;
-      if (index == 0) {
-        prevInterval = new Interval(0, 0);
-      } else {
-        prevInterval = columnIntervals[index - 1];
-      }
-      // prepare parameters
-      int[] parameters =
-          GridBagLayoutEditPolicy.getInsertFeedbackParameters(
-              prevInterval,
-              columnIntervals[index],
-              AbstractGridLayoutEditPolicy.INSERT_COLUMN_SIZE);
-      x = parameters[1];
-      size = parameters[2] - parameters[1];
-    } else {
-      index = m_layout.getColumns().size();
-      m_mainPolicy.showInsertFeedbacks(null, null);
-      // prepare parameters
-      x = columnIntervals[columnIntervals.length - 1].end() + 1;
-      size = AbstractGridLayoutEditPolicy.INSERT_COLUMN_SIZE;
-    }
-    // show insert feedbacks
-    {
-      // ...on main viewer
-      m_mainPolicy.showInsertFeedbacks(new Rectangle(x, y1, size, y2 - y1), null);
-      // ...on header viewer
-      {
-        if (m_insertFeedback.getParent() == null) {
-          addFeedback(m_insertFeedback);
-        }
-        //
-        Point offset = headerEditPart.getOffset();
-        Rectangle bounds = new Rectangle(x + offset.x, 0, size, getHostFigure().getSize().height);
-        m_insertFeedback.setBounds(bounds);
-      }
-    }
-    // show text feedback
-    {
-      Layer feedbackLayer = getMainLayer(IEditPartViewer.FEEDBACK_LAYER);
-      // add feedback
-      if (m_feedback == null) {
-        m_feedback = new TextFeedback(feedbackLayer);
-        m_feedback.add();
-      }
-      // set feedback bounds
-      {
-        Point feedbackLocation = new Point(location.x + 30, 10);
-        FigureUtils.translateAbsoluteToFigure(feedbackLayer, feedbackLocation);
-        m_feedback.setLocation(feedbackLocation);
-      }
-      // set text
-      m_feedback.setText(MessageFormat.format(
-          GefMessages.ColumnsLayoutEditPolicy_feedbackPattern,
-          index));
-    }
-    // prepare command
-    {
-      ColumnInfo column = headerEditPart.getDimension();
-      final int sourceIndex = column.getIndex();
-      if (index == sourceIndex || index == sourceIndex + 1) {
-        m_moveCommand = Command.EMPTY;
-      } else {
-        m_moveCommand = new EditCommand(m_layout) {
-          @Override
-          protected void executeEdit() throws Exception {
-            m_layout.getColumnOperations().move(sourceIndex, index);
-          }
-        };
-      }
-    }
-  }
+	@Override
+	protected void showLayoutTargetFeedback(Request request) {
+		// prepare header
+		ColumnHeaderEditPart headerEditPart;
+		{
+			ChangeBoundsRequest changeBoundsRequest = (ChangeBoundsRequest) request;
+			headerEditPart = (ColumnHeaderEditPart) changeBoundsRequest.getEditParts().get(0);
+		}
+		// prepare location
+		Point location;
+		{
+			IDropRequest dropRequest = (IDropRequest) request;
+			location = dropRequest.getLocation().getCopy();
+		}
+		// prepare target header
+		ColumnHeaderEditPart target = null;
+		{
+			List<EditPart> children = getHost().getChildren();
+			for (EditPart child : children) {
+				ColumnHeaderEditPart columnEditPart = (ColumnHeaderEditPart) child;
+				Rectangle bounds = columnEditPart.getFigure().getBounds();
+				if (location.x < bounds.getCenter().x) {
+					target = columnEditPart;
+					break;
+				}
+			}
+		}
+		// prepare grid information
+		IGridInfo gridInfo = m_layout.getGridInfo();
+		Interval[] columnIntervals = gridInfo.getColumnIntervals();
+		Interval[] rowIntervals = gridInfo.getRowIntervals();
+		int y1 = rowIntervals[0].begin() - 5;
+		int y2 = rowIntervals[rowIntervals.length - 1].end() + 5;
+		// prepare index of target column and position for insert feedbacks
+		final int index;
+		int x;
+		int size;
+		if (target != null) {
+			index = target.getDimension().getIndex();
+			// prepare previous interval
+			Interval prevInterval;
+			if (index == 0) {
+				prevInterval = new Interval(0, 0);
+			} else {
+				prevInterval = columnIntervals[index - 1];
+			}
+			// prepare parameters
+			int[] parameters =
+					GridBagLayoutEditPolicy.getInsertFeedbackParameters(
+							prevInterval,
+							columnIntervals[index],
+							AbstractGridLayoutEditPolicy.INSERT_COLUMN_SIZE);
+			x = parameters[1];
+			size = parameters[2] - parameters[1];
+		} else {
+			index = m_layout.getColumns().size();
+			m_mainPolicy.showInsertFeedbacks(null, null);
+			// prepare parameters
+			x = columnIntervals[columnIntervals.length - 1].end() + 1;
+			size = AbstractGridLayoutEditPolicy.INSERT_COLUMN_SIZE;
+		}
+		// show insert feedbacks
+		{
+			// ...on main viewer
+			m_mainPolicy.showInsertFeedbacks(new Rectangle(x, y1, size, y2 - y1), null);
+			// ...on header viewer
+			{
+				if (m_insertFeedback.getParent() == null) {
+					addFeedback(m_insertFeedback);
+				}
+				//
+				Point offset = headerEditPart.getOffset();
+				Rectangle bounds = new Rectangle(x + offset.x, 0, size, getHostFigure().getSize().height);
+				m_insertFeedback.setBounds(bounds);
+			}
+		}
+		// show text feedback
+		{
+			Layer feedbackLayer = getMainLayer(IEditPartViewer.FEEDBACK_LAYER);
+			// add feedback
+			if (m_feedback == null) {
+				m_feedback = new TextFeedback(feedbackLayer);
+				m_feedback.add();
+			}
+			// set feedback bounds
+			{
+				Point feedbackLocation = new Point(location.x + 30, 10);
+				FigureUtils.translateAbsoluteToFigure(feedbackLayer, feedbackLocation);
+				m_feedback.setLocation(feedbackLocation);
+			}
+			// set text
+			m_feedback.setText(MessageFormat.format(
+					GefMessages.ColumnsLayoutEditPolicy_feedbackPattern,
+					index));
+		}
+		// prepare command
+		{
+			ColumnInfo column = headerEditPart.getDimension();
+			final int sourceIndex = column.getIndex();
+			if (index == sourceIndex || index == sourceIndex + 1) {
+				m_moveCommand = Command.EMPTY;
+			} else {
+				m_moveCommand = new EditCommand(m_layout) {
+					@Override
+					protected void executeEdit() throws Exception {
+						m_layout.getColumnOperations().move(sourceIndex, index);
+					}
+				};
+			}
+		}
+	}
 
-  @Override
-  protected void eraseLayoutTargetFeedback(Request request) {
-    m_mainPolicy.eraseInsertFeedbacks();
-    FigureUtils.removeFigure(m_insertFeedback);
-    if (m_feedback != null) {
-      m_feedback.remove();
-      m_feedback = null;
-    }
-  }
+	@Override
+	protected void eraseLayoutTargetFeedback(Request request) {
+		m_mainPolicy.eraseInsertFeedbacks();
+		FigureUtils.removeFigure(m_insertFeedback);
+		if (m_feedback != null) {
+			m_feedback.remove();
+			m_feedback = null;
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/gbl/header/layout/RowsLayoutEditPolicy.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/gbl/header/layout/RowsLayoutEditPolicy.java
index 630d49ffa..dc8ad3b44 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/gbl/header/layout/RowsLayoutEditPolicy.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/gbl/header/layout/RowsLayoutEditPolicy.java
@@ -47,163 +47,163 @@
  * @coverage swing.gef.policy
  */
 public final class RowsLayoutEditPolicy extends AbstractHeaderLayoutEditPolicy {
-  private final GridBagLayoutEditPolicy m_mainPolicy;
-  private final AbstractGridBagLayoutInfo m_layout;
+	private final GridBagLayoutEditPolicy m_mainPolicy;
+	private final AbstractGridBagLayoutInfo m_layout;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public RowsLayoutEditPolicy(GridBagLayoutEditPolicy mainPolicy, AbstractGridBagLayoutInfo layout) {
-    super(mainPolicy);
-    m_mainPolicy = mainPolicy;
-    m_layout = layout;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public RowsLayoutEditPolicy(GridBagLayoutEditPolicy mainPolicy, AbstractGridBagLayoutInfo layout) {
+		super(mainPolicy);
+		m_mainPolicy = mainPolicy;
+		m_layout = layout;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Children
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void decorateChild(EditPart child) {
-    child.installEditPolicy(EditPolicy.SELECTION_ROLE, new RowSelectionEditPolicy(m_mainPolicy));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Children
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void decorateChild(EditPart child) {
+		child.installEditPolicy(EditPolicy.SELECTION_ROLE, new RowSelectionEditPolicy(m_mainPolicy));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Move
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final Figure m_insertFeedback = AbstractGridLayoutEditPolicy.createInsertFigure();
-  private TextFeedback m_feedback;
-  private Command m_moveCommand;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Move
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final Figure m_insertFeedback = AbstractGridLayoutEditPolicy.createInsertFigure();
+	private TextFeedback m_feedback;
+	private Command m_moveCommand;
 
-  @Override
-  protected Command getMoveCommand(ChangeBoundsRequest request) {
-    return m_moveCommand;
-  }
+	@Override
+	protected Command getMoveCommand(ChangeBoundsRequest request) {
+		return m_moveCommand;
+	}
 
-  @Override
-  protected void showLayoutTargetFeedback(Request request) {
-    // prepare header
-    RowHeaderEditPart headerEditPart;
-    {
-      ChangeBoundsRequest changeBoundsRequest = (ChangeBoundsRequest) request;
-      headerEditPart = (RowHeaderEditPart) changeBoundsRequest.getEditParts().get(0);
-    }
-    // prepare location
-    Point location;
-    {
-      IDropRequest dropRequest = (IDropRequest) request;
-      location = dropRequest.getLocation().getCopy();
-    }
-    // prepare target header
-    RowHeaderEditPart target = null;
-    {
-      List<EditPart> children = getHost().getChildren();
-      for (EditPart child : children) {
-        RowHeaderEditPart rowEditPart = (RowHeaderEditPart) child;
-        Rectangle bounds = rowEditPart.getFigure().getBounds();
-        if (location.y < bounds.getCenter().y) {
-          target = rowEditPart;
-          break;
-        }
-      }
-    }
-    // prepare grid information
-    IGridInfo gridInfo = m_layout.getGridInfo();
-    Interval[] columnIntervals = gridInfo.getColumnIntervals();
-    Interval[] rowIntervals = gridInfo.getRowIntervals();
-    int x1 = columnIntervals[0].begin() - 5;
-    int x2 = columnIntervals[columnIntervals.length - 1].end() + 5;
-    // prepare index of target row and position for insert feedbacks
-    final int targetIndex;
-    int y;
-    int size;
-    if (target != null) {
-      targetIndex = target.getDimension().getIndex();
-      // prepare previous interval
-      Interval prevInterval;
-      if (targetIndex == 0) {
-        prevInterval = new Interval(0, 0);
-      } else {
-        prevInterval = rowIntervals[targetIndex - 1];
-      }
-      // prepare parameters
-      int[] parameters =
-          GridBagLayoutEditPolicy.getInsertFeedbackParameters(
-              prevInterval,
-              rowIntervals[targetIndex],
-              AbstractGridLayoutEditPolicy.INSERT_ROW_SIZE);
-      y = parameters[1];
-      size = parameters[2] - parameters[1];
-    } else {
-      targetIndex = m_layout.getRows().size();
-      m_mainPolicy.showInsertFeedbacks(null, null);
-      // prepare parameters
-      y = rowIntervals[rowIntervals.length - 1].end() + 1;
-      size = AbstractGridLayoutEditPolicy.INSERT_ROW_SIZE;
-    }
-    // show insert feedbacks
-    {
-      // ...on main viewer
-      m_mainPolicy.showInsertFeedbacks(null, new Rectangle(x1, y, x2 - x1, size));
-      // ...on header viewer
-      {
-        if (m_insertFeedback.getParent() == null) {
-          addFeedback(m_insertFeedback);
-        }
-        //
-        Point offset = headerEditPart.getOffset();
-        Rectangle bounds = new Rectangle(0, y + offset.y, getHostFigure().getSize().width, size);
-        m_insertFeedback.setBounds(bounds);
-      }
-    }
-    // show text feedback
-    {
-      Layer feedbackLayer = getMainLayer(IEditPartViewer.FEEDBACK_LAYER);
-      // add feedback
-      if (m_feedback == null) {
-        m_feedback = new TextFeedback(feedbackLayer);
-        m_feedback.add();
-      }
-      // set feedback bounds
-      {
-        Point feedbackLocation = new Point(30, location.y + 10);
-        FigureUtils.translateAbsoluteToFigure(feedbackLayer, feedbackLocation);
-        m_feedback.setLocation(feedbackLocation);
-      }
-      // set text
-      m_feedback.setText(MessageFormat.format(
-          GefMessages.RowsLayoutEditPolicy_feedbackPattern,
-          targetIndex));
-    }
-    // prepare command
-    {
-      RowInfo row = headerEditPart.getDimension();
-      final int sourceIndex = row.getIndex();
-      if (targetIndex == sourceIndex || targetIndex == sourceIndex + 1) {
-        m_moveCommand = Command.EMPTY;
-      } else {
-        m_moveCommand = new EditCommand(m_layout) {
-          @Override
-          protected void executeEdit() throws Exception {
-            m_layout.getRowOperations().move(sourceIndex, targetIndex);
-          }
-        };
-      }
-    }
-  }
+	@Override
+	protected void showLayoutTargetFeedback(Request request) {
+		// prepare header
+		RowHeaderEditPart headerEditPart;
+		{
+			ChangeBoundsRequest changeBoundsRequest = (ChangeBoundsRequest) request;
+			headerEditPart = (RowHeaderEditPart) changeBoundsRequest.getEditParts().get(0);
+		}
+		// prepare location
+		Point location;
+		{
+			IDropRequest dropRequest = (IDropRequest) request;
+			location = dropRequest.getLocation().getCopy();
+		}
+		// prepare target header
+		RowHeaderEditPart target = null;
+		{
+			List<EditPart> children = getHost().getChildren();
+			for (EditPart child : children) {
+				RowHeaderEditPart rowEditPart = (RowHeaderEditPart) child;
+				Rectangle bounds = rowEditPart.getFigure().getBounds();
+				if (location.y < bounds.getCenter().y) {
+					target = rowEditPart;
+					break;
+				}
+			}
+		}
+		// prepare grid information
+		IGridInfo gridInfo = m_layout.getGridInfo();
+		Interval[] columnIntervals = gridInfo.getColumnIntervals();
+		Interval[] rowIntervals = gridInfo.getRowIntervals();
+		int x1 = columnIntervals[0].begin() - 5;
+		int x2 = columnIntervals[columnIntervals.length - 1].end() + 5;
+		// prepare index of target row and position for insert feedbacks
+		final int targetIndex;
+		int y;
+		int size;
+		if (target != null) {
+			targetIndex = target.getDimension().getIndex();
+			// prepare previous interval
+			Interval prevInterval;
+			if (targetIndex == 0) {
+				prevInterval = new Interval(0, 0);
+			} else {
+				prevInterval = rowIntervals[targetIndex - 1];
+			}
+			// prepare parameters
+			int[] parameters =
+					GridBagLayoutEditPolicy.getInsertFeedbackParameters(
+							prevInterval,
+							rowIntervals[targetIndex],
+							AbstractGridLayoutEditPolicy.INSERT_ROW_SIZE);
+			y = parameters[1];
+			size = parameters[2] - parameters[1];
+		} else {
+			targetIndex = m_layout.getRows().size();
+			m_mainPolicy.showInsertFeedbacks(null, null);
+			// prepare parameters
+			y = rowIntervals[rowIntervals.length - 1].end() + 1;
+			size = AbstractGridLayoutEditPolicy.INSERT_ROW_SIZE;
+		}
+		// show insert feedbacks
+		{
+			// ...on main viewer
+			m_mainPolicy.showInsertFeedbacks(null, new Rectangle(x1, y, x2 - x1, size));
+			// ...on header viewer
+			{
+				if (m_insertFeedback.getParent() == null) {
+					addFeedback(m_insertFeedback);
+				}
+				//
+				Point offset = headerEditPart.getOffset();
+				Rectangle bounds = new Rectangle(0, y + offset.y, getHostFigure().getSize().width, size);
+				m_insertFeedback.setBounds(bounds);
+			}
+		}
+		// show text feedback
+		{
+			Layer feedbackLayer = getMainLayer(IEditPartViewer.FEEDBACK_LAYER);
+			// add feedback
+			if (m_feedback == null) {
+				m_feedback = new TextFeedback(feedbackLayer);
+				m_feedback.add();
+			}
+			// set feedback bounds
+			{
+				Point feedbackLocation = new Point(30, location.y + 10);
+				FigureUtils.translateAbsoluteToFigure(feedbackLayer, feedbackLocation);
+				m_feedback.setLocation(feedbackLocation);
+			}
+			// set text
+			m_feedback.setText(MessageFormat.format(
+					GefMessages.RowsLayoutEditPolicy_feedbackPattern,
+					targetIndex));
+		}
+		// prepare command
+		{
+			RowInfo row = headerEditPart.getDimension();
+			final int sourceIndex = row.getIndex();
+			if (targetIndex == sourceIndex || targetIndex == sourceIndex + 1) {
+				m_moveCommand = Command.EMPTY;
+			} else {
+				m_moveCommand = new EditCommand(m_layout) {
+					@Override
+					protected void executeEdit() throws Exception {
+						m_layout.getRowOperations().move(sourceIndex, targetIndex);
+					}
+				};
+			}
+		}
+	}
 
-  @Override
-  protected void eraseLayoutTargetFeedback(Request request) {
-    m_mainPolicy.eraseInsertFeedbacks();
-    FigureUtils.removeFigure(m_insertFeedback);
-    if (m_feedback != null) {
-      m_feedback.remove();
-      m_feedback = null;
-    }
-  }
+	@Override
+	protected void eraseLayoutTargetFeedback(Request request) {
+		m_mainPolicy.eraseInsertFeedbacks();
+		FigureUtils.removeFigure(m_insertFeedback);
+		if (m_feedback != null) {
+			m_feedback.remove();
+			m_feedback = null;
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/gbl/header/selection/ColumnSelectionEditPolicy.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/gbl/header/selection/ColumnSelectionEditPolicy.java
index fe64622f6..b5939c172 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/gbl/header/selection/ColumnSelectionEditPolicy.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/gbl/header/selection/ColumnSelectionEditPolicy.java
@@ -33,50 +33,50 @@
  * @coverage swing.gef.policy
  */
 public final class ColumnSelectionEditPolicy extends DimensionSelectionEditPolicy<ColumnInfo> {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ColumnSelectionEditPolicy(LayoutEditPolicy mainPolicy) {
-    super(mainPolicy);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ColumnSelectionEditPolicy(LayoutEditPolicy mainPolicy) {
+		super(mainPolicy);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Resize
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Handle createResizeHandle() {
-    Handle handle = new SideResizeHandle(getHost(), IPositionConstants.RIGHT, 7, false);
-    handle.setDragTrackerTool(new ResizeTracker(getHost(), IPositionConstants.EAST, REQ_RESIZE));
-    return handle;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Resize
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Handle createResizeHandle() {
+		Handle handle = new SideResizeHandle(getHost(), IPositionConstants.RIGHT, 7, false);
+		handle.setDragTrackerTool(new ResizeTracker(getHost(), IPositionConstants.EAST, REQ_RESIZE));
+		return handle;
+	}
 
-  @Override
-  protected Point getTextFeedbackLocation(Point mouseLocation) {
-    return new Point(mouseLocation.x + 10, 10);
-  }
+	@Override
+	protected Point getTextFeedbackLocation(Point mouseLocation) {
+		return new Point(mouseLocation.x + 10, 10);
+	}
 
-  @Override
-  protected String getFeedbackText(ChangeBoundsRequest request) {
-    int pixels = getDimensionSize(getLayout().getGridInfo().getColumnIntervals());
-    int pixelsDelta = request.getSizeDelta().width;
-    final int newPixels = pixels + pixelsDelta;
-    // prepare command
-    m_resizeCommand = new EditCommand(getLayout()) {
-      @Override
-      protected void executeEdit() throws Exception {
-        getDimension().setSize(newPixels);
-      }
-    };
-    // return text
-    String deltaText = pixelsDelta > 0 ? "+" + pixelsDelta : "" + pixelsDelta;
-    return MessageFormat.format(
-        GefMessages.ColumnSelectionEditPolicy_feedbackPattern,
-        newPixels,
-        deltaText,
-        pixels);
-  }
+	@Override
+	protected String getFeedbackText(ChangeBoundsRequest request) {
+		int pixels = getDimensionSize(getLayout().getGridInfo().getColumnIntervals());
+		int pixelsDelta = request.getSizeDelta().width;
+		final int newPixels = pixels + pixelsDelta;
+		// prepare command
+		m_resizeCommand = new EditCommand(getLayout()) {
+			@Override
+			protected void executeEdit() throws Exception {
+				getDimension().setSize(newPixels);
+			}
+		};
+		// return text
+		String deltaText = pixelsDelta > 0 ? "+" + pixelsDelta : "" + pixelsDelta;
+		return MessageFormat.format(
+				GefMessages.ColumnSelectionEditPolicy_feedbackPattern,
+				newPixels,
+				deltaText,
+				pixels);
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/gbl/header/selection/DimensionSelectionEditPolicy.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/gbl/header/selection/DimensionSelectionEditPolicy.java
index 27117e89a..90691889f 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/gbl/header/selection/DimensionSelectionEditPolicy.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/gbl/header/selection/DimensionSelectionEditPolicy.java
@@ -46,187 +46,187 @@
  * @coverage swing.gef.policy
  */
 abstract class DimensionSelectionEditPolicy<T extends DimensionInfo>
-    extends
-      AbstractHeaderSelectionEditPolicy {
-  protected static final String REQ_RESIZE = "resize";
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DimensionSelectionEditPolicy(LayoutEditPolicy mainPolicy) {
-    super(mainPolicy);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Handles
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected List<Handle> createSelectionHandles() {
-    List<Handle> handles = Lists.newArrayList();
-    // move handle
-    {
-      MoveHandle moveHandle = new MoveHandle(getHost(), new HeaderMoveHandleLocator());
-      moveHandle.setForeground(IColorConstants.red);
-      handles.add(moveHandle);
-    }
-    //
-    return handles;
-  }
-
-  @Override
-  protected List<Handle> createStaticHandles() {
-    List<Handle> handles = Lists.newArrayList();
-    handles.add(createResizeHandle());
-    return handles;
-  }
-
-  /**
-   * @return the {@link Handle} for resizing.
-   */
-  protected abstract Handle createResizeHandle();
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the host {@link DimensionHeaderEditPart}.
-   */
-  @SuppressWarnings("unchecked")
-  private DimensionHeaderEditPart<T> getHostHeader() {
-    return (DimensionHeaderEditPart<T>) getHost();
-  }
-
-  /**
-   * @return the host {@link AbstractGridBagLayoutInfo}.
-   */
-  protected final AbstractGridBagLayoutInfo getLayout() {
-    return getHostHeader().getLayout();
-  }
-
-  /**
-   * @return the host {@link DimensionInfo}.
-   */
-  protected final T getDimension() {
-    return getHostHeader().getDimension();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Resize
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Figure m_lineFeedback;
-  private TextFeedback m_feedback;
-  protected Command m_resizeCommand;
-
-  @Override
-  public boolean understandsRequest(Request request) {
-    return super.understandsRequest(request) || request.getType() == REQ_RESIZE;
-  }
-
-  @Override
-  public Command getCommand(Request request) {
-    return m_resizeCommand;
-  }
-
-  @Override
-  public void showSourceFeedback(Request request) {
-    ChangeBoundsRequest changeBoundsRequest = (ChangeBoundsRequest) request;
-    m_resizeCommand = null;
-    // line feedback
-    {
-      // create feedback
-      if (m_lineFeedback == null) {
-        m_lineFeedback = new Figure();
-        LineBorder border = new LineBorder(IColorConstants.red, 2);
-        m_lineFeedback.setBorder(border);
-        addFeedback(m_lineFeedback);
-      }
-      // prepare feedback bounds
-      Rectangle bounds;
-      {
-        Figure hostFigure = getHostFigure();
-        bounds = changeBoundsRequest.getTransformedRectangle(hostFigure.getBounds());
-        FigureUtils.translateFigureToAbsolute(hostFigure, bounds);
-      }
-      // show feedback
-      m_lineFeedback.setBounds(bounds);
-    }
-    // text feedback
-    {
-      Layer feedbackLayer = getMainLayer(IEditPartViewer.FEEDBACK_LAYER);
-      // add feedback
-      if (m_feedback == null) {
-        m_feedback = new TextFeedback(feedbackLayer);
-        m_feedback.add();
-      }
-      // set feedback bounds
-      {
-        Point mouseLocation = changeBoundsRequest.getLocation().getCopy();
-        Point feedbackLocation = getTextFeedbackLocation(mouseLocation);
-        FigureUtils.translateAbsoluteToFigure(feedbackLayer, feedbackLocation);
-        m_feedback.setLocation(feedbackLocation);
-      }
-      // set text
-      m_feedback.setText(getFeedbackText(changeBoundsRequest));
-    }
-  }
-
-  @Override
-  public void eraseSourceFeedback(Request request) {
-    removeFeedback(m_lineFeedback);
-    m_lineFeedback = null;
-    m_feedback.remove();
-    m_feedback = null;
-  }
-
-  /**
-   * @return the size of {@link DimensionInfo} in pixels (based on {@link IGridInfo} information).
-   */
-  protected final int getDimensionSize(Interval[] intervals) {
-    int index = getDimension().getIndex();
-    if (index < intervals.length - 1) {
-      return intervals[index + 1].begin() - intervals[index].begin();
-    } else {
-      return intervals[index].length();
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Resize: abstract feedback
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the location of text feedback (with size hint).
-   */
-  protected abstract Point getTextFeedbackLocation(Point mouseLocation);
-
-  /**
-   * @return the text for feedback.
-   */
-  protected abstract String getFeedbackText(ChangeBoundsRequest request);
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Move location
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Implementation of {@link ILocator} to place handle directly on header.
-   */
-  private class HeaderMoveHandleLocator implements ILocator {
-    public void relocate(Figure target) {
-      Figure reference = getHostFigure();
-      Rectangle bounds = reference.getBounds().getCopy();
-      FigureUtils.translateFigureToFigure(reference, target, bounds);
-      target.setBounds(bounds);
-    }
-  }
+extends
+AbstractHeaderSelectionEditPolicy {
+	protected static final String REQ_RESIZE = "resize";
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DimensionSelectionEditPolicy(LayoutEditPolicy mainPolicy) {
+		super(mainPolicy);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Handles
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected List<Handle> createSelectionHandles() {
+		List<Handle> handles = Lists.newArrayList();
+		// move handle
+		{
+			MoveHandle moveHandle = new MoveHandle(getHost(), new HeaderMoveHandleLocator());
+			moveHandle.setForeground(IColorConstants.red);
+			handles.add(moveHandle);
+		}
+		//
+		return handles;
+	}
+
+	@Override
+	protected List<Handle> createStaticHandles() {
+		List<Handle> handles = Lists.newArrayList();
+		handles.add(createResizeHandle());
+		return handles;
+	}
+
+	/**
+	 * @return the {@link Handle} for resizing.
+	 */
+	protected abstract Handle createResizeHandle();
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the host {@link DimensionHeaderEditPart}.
+	 */
+	@SuppressWarnings("unchecked")
+	private DimensionHeaderEditPart<T> getHostHeader() {
+		return (DimensionHeaderEditPart<T>) getHost();
+	}
+
+	/**
+	 * @return the host {@link AbstractGridBagLayoutInfo}.
+	 */
+	protected final AbstractGridBagLayoutInfo getLayout() {
+		return getHostHeader().getLayout();
+	}
+
+	/**
+	 * @return the host {@link DimensionInfo}.
+	 */
+	protected final T getDimension() {
+		return getHostHeader().getDimension();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Resize
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Figure m_lineFeedback;
+	private TextFeedback m_feedback;
+	protected Command m_resizeCommand;
+
+	@Override
+	public boolean understandsRequest(Request request) {
+		return super.understandsRequest(request) || request.getType() == REQ_RESIZE;
+	}
+
+	@Override
+	public Command getCommand(Request request) {
+		return m_resizeCommand;
+	}
+
+	@Override
+	public void showSourceFeedback(Request request) {
+		ChangeBoundsRequest changeBoundsRequest = (ChangeBoundsRequest) request;
+		m_resizeCommand = null;
+		// line feedback
+		{
+			// create feedback
+			if (m_lineFeedback == null) {
+				m_lineFeedback = new Figure();
+				LineBorder border = new LineBorder(IColorConstants.red, 2);
+				m_lineFeedback.setBorder(border);
+				addFeedback(m_lineFeedback);
+			}
+			// prepare feedback bounds
+			Rectangle bounds;
+			{
+				Figure hostFigure = getHostFigure();
+				bounds = changeBoundsRequest.getTransformedRectangle(hostFigure.getBounds());
+				FigureUtils.translateFigureToAbsolute(hostFigure, bounds);
+			}
+			// show feedback
+			m_lineFeedback.setBounds(bounds);
+		}
+		// text feedback
+		{
+			Layer feedbackLayer = getMainLayer(IEditPartViewer.FEEDBACK_LAYER);
+			// add feedback
+			if (m_feedback == null) {
+				m_feedback = new TextFeedback(feedbackLayer);
+				m_feedback.add();
+			}
+			// set feedback bounds
+			{
+				Point mouseLocation = changeBoundsRequest.getLocation().getCopy();
+				Point feedbackLocation = getTextFeedbackLocation(mouseLocation);
+				FigureUtils.translateAbsoluteToFigure(feedbackLayer, feedbackLocation);
+				m_feedback.setLocation(feedbackLocation);
+			}
+			// set text
+			m_feedback.setText(getFeedbackText(changeBoundsRequest));
+		}
+	}
+
+	@Override
+	public void eraseSourceFeedback(Request request) {
+		removeFeedback(m_lineFeedback);
+		m_lineFeedback = null;
+		m_feedback.remove();
+		m_feedback = null;
+	}
+
+	/**
+	 * @return the size of {@link DimensionInfo} in pixels (based on {@link IGridInfo} information).
+	 */
+	protected final int getDimensionSize(Interval[] intervals) {
+		int index = getDimension().getIndex();
+		if (index < intervals.length - 1) {
+			return intervals[index + 1].begin() - intervals[index].begin();
+		} else {
+			return intervals[index].length();
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Resize: abstract feedback
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the location of text feedback (with size hint).
+	 */
+	protected abstract Point getTextFeedbackLocation(Point mouseLocation);
+
+	/**
+	 * @return the text for feedback.
+	 */
+	protected abstract String getFeedbackText(ChangeBoundsRequest request);
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Move location
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Implementation of {@link ILocator} to place handle directly on header.
+	 */
+	private class HeaderMoveHandleLocator implements ILocator {
+		public void relocate(Figure target) {
+			Figure reference = getHostFigure();
+			Rectangle bounds = reference.getBounds().getCopy();
+			FigureUtils.translateFigureToFigure(reference, target, bounds);
+			target.setBounds(bounds);
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/gbl/header/selection/RowSelectionEditPolicy.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/gbl/header/selection/RowSelectionEditPolicy.java
index 4b4871094..4e686ecc2 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/gbl/header/selection/RowSelectionEditPolicy.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/gbl/header/selection/RowSelectionEditPolicy.java
@@ -33,49 +33,49 @@
  * @coverage swing.gef.policy
  */
 public final class RowSelectionEditPolicy extends DimensionSelectionEditPolicy<RowInfo> {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public RowSelectionEditPolicy(LayoutEditPolicy mainPolicy) {
-    super(mainPolicy);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public RowSelectionEditPolicy(LayoutEditPolicy mainPolicy) {
+		super(mainPolicy);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Resize
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Handle createResizeHandle() {
-    Handle handle = new SideResizeHandle(getHost(), IPositionConstants.BOTTOM, 7, false);
-    handle.setDragTrackerTool(new ResizeTracker(getHost(), IPositionConstants.SOUTH, REQ_RESIZE));
-    return handle;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Resize
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Handle createResizeHandle() {
+		Handle handle = new SideResizeHandle(getHost(), IPositionConstants.BOTTOM, 7, false);
+		handle.setDragTrackerTool(new ResizeTracker(getHost(), IPositionConstants.SOUTH, REQ_RESIZE));
+		return handle;
+	}
 
-  @Override
-  protected Point getTextFeedbackLocation(Point mouseLocation) {
-    return new Point(10, mouseLocation.y + 10);
-  }
+	@Override
+	protected Point getTextFeedbackLocation(Point mouseLocation) {
+		return new Point(10, mouseLocation.y + 10);
+	}
 
-  @Override
-  protected String getFeedbackText(ChangeBoundsRequest request) {
-    int pixels = getDimensionSize(getLayout().getGridInfo().getRowIntervals());
-    int pixelsDelta = request.getSizeDelta().height;
-    final int newPixels = pixels + pixelsDelta;
-    // prepare command
-    m_resizeCommand = new EditCommand(getLayout()) {
-      @Override
-      protected void executeEdit() throws Exception {
-        getDimension().setSize(newPixels);
-      }
-    };
-    // return text
-    String deltaText = pixelsDelta > 0 ? "+" + pixelsDelta : "" + pixelsDelta;
-    return MessageFormat.format(
-        GefMessages.RowSelectionEditPolicy_feedbackPattern,
-        newPixels,
-        deltaText);
-  }
+	@Override
+	protected String getFeedbackText(ChangeBoundsRequest request) {
+		int pixels = getDimensionSize(getLayout().getGridInfo().getRowIntervals());
+		int pixelsDelta = request.getSizeDelta().height;
+		final int newPixels = pixels + pixelsDelta;
+		// prepare command
+		m_resizeCommand = new EditCommand(getLayout()) {
+			@Override
+			protected void executeEdit() throws Exception {
+				getDimension().setSize(newPixels);
+			}
+		};
+		// return text
+		String deltaText = pixelsDelta > 0 ? "+" + pixelsDelta : "" + pixelsDelta;
+		return MessageFormat.format(
+				GefMessages.RowSelectionEditPolicy_feedbackPattern,
+				newPixels,
+				deltaText);
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/menu/MenuBarDropLayoutEditPolicy.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/menu/MenuBarDropLayoutEditPolicy.java
index c7ff60757..c48f0142e 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/menu/MenuBarDropLayoutEditPolicy.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/menu/MenuBarDropLayoutEditPolicy.java
@@ -42,106 +42,106 @@
  * @coverage swing.gef.policy
  */
 public final class MenuBarDropLayoutEditPolicy extends LayoutEditPolicy {
-  private final ContainerInfo m_container;
+	private final ContainerInfo m_container;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public MenuBarDropLayoutEditPolicy(ContainerInfo container) {
-    m_container = container;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public MenuBarDropLayoutEditPolicy(ContainerInfo container) {
+		m_container = container;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Validator
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected ILayoutRequestValidator getRequestValidator() {
-    return VALIDATOR;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Validator
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected ILayoutRequestValidator getRequestValidator() {
+		return VALIDATOR;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Feedback
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Figure m_feedback;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Feedback
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Figure m_feedback;
 
-  @Override
-  protected void showLayoutTargetFeedback(Request request) {
-    if (m_feedback == null) {
-      // create figure
-      m_feedback = new Figure() {
-        @Override
-        protected void paintClientArea(Graphics graphics) {
-          // draw placeholder text
-          Rectangle bounds = getBounds();
-          graphics.setForegroundColor(IColorConstants.darkGreen);
-          String menuBarText = GefMessages.MenuBarDropLayoutEditPolicy_feedbackText;
-          Dimension textExtent = graphics.getTextExtent(menuBarText);
-          //
-          int x = bounds.width / 2 - textExtent.width / 2;
-          int y = bounds.height / 2 - textExtent.height / 2;
-          graphics.drawString(menuBarText, x, y);
-        }
-      };
-      m_feedback.setOpaque(true);
-      m_feedback.setBackground(IColorConstants.menuBackground);
-      // set figure bounds
-      Insets clientAreaInsets = m_container.getInsets();
-      Rectangle bounds = getHostFigure().getBounds().getCopy();
-      bounds.x += clientAreaInsets.left;
-      bounds.y += clientAreaInsets.top;
-      bounds.width -= clientAreaInsets.getWidth();
-      bounds.height = 27;
-      m_feedback.setBounds(bounds);
-      // add some border
-      m_feedback.setBorder(new LineBorder(IColorConstants.menuBackgroundSelected, 1));
-      addFeedback(m_feedback);
-    }
-  }
+	@Override
+	protected void showLayoutTargetFeedback(Request request) {
+		if (m_feedback == null) {
+			// create figure
+			m_feedback = new Figure() {
+				@Override
+				protected void paintClientArea(Graphics graphics) {
+					// draw placeholder text
+					Rectangle bounds = getBounds();
+					graphics.setForegroundColor(IColorConstants.darkGreen);
+					String menuBarText = GefMessages.MenuBarDropLayoutEditPolicy_feedbackText;
+					Dimension textExtent = graphics.getTextExtent(menuBarText);
+					//
+					int x = bounds.width / 2 - textExtent.width / 2;
+					int y = bounds.height / 2 - textExtent.height / 2;
+					graphics.drawString(menuBarText, x, y);
+				}
+			};
+			m_feedback.setOpaque(true);
+			m_feedback.setBackground(IColorConstants.menuBackground);
+			// set figure bounds
+			Insets clientAreaInsets = m_container.getInsets();
+			Rectangle bounds = getHostFigure().getBounds().getCopy();
+			bounds.x += clientAreaInsets.left;
+			bounds.y += clientAreaInsets.top;
+			bounds.width -= clientAreaInsets.getWidth();
+			bounds.height = 27;
+			m_feedback.setBounds(bounds);
+			// add some border
+			m_feedback.setBorder(new LineBorder(IColorConstants.menuBackgroundSelected, 1));
+			addFeedback(m_feedback);
+		}
+	}
 
-  @Override
-  protected void eraseLayoutTargetFeedback(Request request) {
-    if (m_feedback != null) {
-      removeFeedback(m_feedback);
-      m_feedback = null;
-    }
-  }
+	@Override
+	protected void eraseLayoutTargetFeedback(Request request) {
+		if (m_feedback != null) {
+			removeFeedback(m_feedback);
+			m_feedback = null;
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Command
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Command getCreateCommand(CreateRequest request) {
-    final JMenuBarInfo menu = (JMenuBarInfo) request.getNewObject();
-    return new EditCommand(m_container) {
-      @Override
-      protected void executeEdit() throws Exception {
-        menu.command_CREATE(m_container);
-      }
-    };
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Command
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Command getCreateCommand(CreateRequest request) {
+		final JMenuBarInfo menu = (JMenuBarInfo) request.getNewObject();
+		return new EditCommand(m_container) {
+			@Override
+			protected void executeEdit() throws Exception {
+				menu.command_CREATE(m_container);
+			}
+		};
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Validator instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final ILayoutRequestValidator VALIDATOR = new LayoutRequestValidatorStubFalse() {
-    @Override
-    public boolean validateCreateRequest(EditPart host, CreateRequest request) {
-      // only one JMenuBar_Info
-      if (!m_container.getChildren(JMenuBarInfo.class).isEmpty()) {
-        return false;
-      }
-      // check object
-      return request.getNewObject() instanceof JMenuBarInfo;
-    }
-  };
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Validator instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final ILayoutRequestValidator VALIDATOR = new LayoutRequestValidatorStubFalse() {
+		@Override
+		public boolean validateCreateRequest(EditPart host, CreateRequest request) {
+			// only one JMenuBar_Info
+			if (!m_container.getChildren(JMenuBarInfo.class).isEmpty()) {
+				return false;
+			}
+			// check object
+			return request.getNewObject() instanceof JMenuBarInfo;
+		}
+	};
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/menu/MenuDropPolicyConfigurator.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/menu/MenuDropPolicyConfigurator.java
index 1fc2ab10b..d16c1ce13 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/menu/MenuDropPolicyConfigurator.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/menu/MenuDropPolicyConfigurator.java
@@ -28,22 +28,22 @@
  * @coverage swing.gef.policy
  */
 public final class MenuDropPolicyConfigurator implements IEditPartConfigurator {
-  public void configure(EditPart context, EditPart editPart) {
-    // drop JMenuBar on JFrame, JDialog and JApply
-    if (editPart.getModel() instanceof ContainerInfo) {
-      ContainerInfo container = (ContainerInfo) editPart.getModel();
-      Class<?> componentClass = container.getDescription().getComponentClass();
-      if (JFrame.class.isAssignableFrom(componentClass)
-          || JInternalFrame.class.isAssignableFrom(componentClass)
-          || JDialog.class.isAssignableFrom(componentClass)
-          || JApplet.class.isAssignableFrom(componentClass)) {
-        editPart.installEditPolicy(new MenuBarDropLayoutEditPolicy(container));
-      }
-    }
-    // drop JPopupMenu on any java.awt.Component
-    if (editPart.getModel() instanceof ComponentInfo) {
-      ComponentInfo component = (ComponentInfo) editPart.getModel();
-      editPart.installEditPolicy(new MenuPopupDropLayoutEditPolicy(component));
-    }
-  }
+	public void configure(EditPart context, EditPart editPart) {
+		// drop JMenuBar on JFrame, JDialog and JApply
+		if (editPart.getModel() instanceof ContainerInfo) {
+			ContainerInfo container = (ContainerInfo) editPart.getModel();
+			Class<?> componentClass = container.getDescription().getComponentClass();
+			if (JFrame.class.isAssignableFrom(componentClass)
+					|| JInternalFrame.class.isAssignableFrom(componentClass)
+					|| JDialog.class.isAssignableFrom(componentClass)
+					|| JApplet.class.isAssignableFrom(componentClass)) {
+				editPart.installEditPolicy(new MenuBarDropLayoutEditPolicy(container));
+			}
+		}
+		// drop JPopupMenu on any java.awt.Component
+		if (editPart.getModel() instanceof ComponentInfo) {
+			ComponentInfo component = (ComponentInfo) editPart.getModel();
+			editPart.installEditPolicy(new MenuPopupDropLayoutEditPolicy(component));
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/menu/MenuPopupDropLayoutEditPolicy.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/menu/MenuPopupDropLayoutEditPolicy.java
index 0b9525f78..26d23fdda 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/menu/MenuPopupDropLayoutEditPolicy.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/menu/MenuPopupDropLayoutEditPolicy.java
@@ -40,171 +40,171 @@
  * @coverage swing.gef.policy
  */
 public class MenuPopupDropLayoutEditPolicy extends LayoutEditPolicy {
-  private final ComponentInfo m_component;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public MenuPopupDropLayoutEditPolicy(ComponentInfo component) {
-    m_component = component;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Validator
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected ILayoutRequestValidator getRequestValidator() {
-    return VALIDATOR;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Feedback
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void showLayoutTargetFeedback(Request request) {
-    PolicyUtils.showBorderTargetFeedback(this);
-  }
-
-  @Override
-  protected void eraseLayoutTargetFeedback(Request request) {
-    PolicyUtils.eraseBorderTargetFeedback(this);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Command
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Command getCreateCommand(final CreateRequest request) {
-    if (!canAcceptPopup()) {
-      return null;
-    }
-    // OK, we can add new "popup"
-    return new EditCommand(m_component) {
-      @Override
-      protected void executeEdit() throws Exception {
-        JPopupMenuInfo popup = (JPopupMenuInfo) request.getNewObject();
-        popup.command_CREATE(m_component);
-      }
-    };
-  }
-
-  @Override
-  protected Command getPasteCommand(PasteRequest request) {
-    if (!canAcceptPopup()) {
-      return null;
-    }
-    // OK, we can paste "popup"
-    return LayoutPolicyUtils2.getPasteCommand(
-        m_component,
-        request,
-        JPopupMenuInfo.class,
-        new IPasteProcessor<JPopupMenuInfo>() {
-          public void process(JPopupMenuInfo popup) throws Exception {
-            popup.command_CREATE(m_component);
-          }
-        });
-  }
-
-  @Override
-  protected Command getMoveCommand(ChangeBoundsRequest request) {
-    return null;
-  }
-
-  @Override
-  protected Command getAddCommand(ChangeBoundsRequest request) {
-    if (!canAcceptPopup()) {
-      return null;
-    }
-    // OK, we can move "popup"
-    final JPopupMenuInfo popup = (JPopupMenuInfo) request.getEditParts().get(0).getModel();
-    return new EditCommand(m_component) {
-      @Override
-      protected void executeEdit() throws Exception {
-        popup.command_MOVE(m_component);
-      }
-    };
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Validator instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final ILayoutRequestValidator VALIDATOR = new ILayoutRequestValidator() {
-    public boolean validateCreateRequest(EditPart host, CreateRequest request) {
-      return request.getNewObject() instanceof JPopupMenuInfo;
-    }
-
-    public boolean validatePasteRequest(EditPart host, final PasteRequest request) {
-      return ExecutionUtils.runObjectLog(new RunnableObjectEx<Boolean>() {
-        public Boolean runObject() throws Exception {
-          // check that memento contains JPopupMenu_Info
-          @SuppressWarnings("unchecked")
-          List<JavaInfoMemento> mementos = (List<JavaInfoMemento>) request.getMemento();
-          if (mementos.size() == 1) {
-            JavaInfo javaInfo = mementos.get(0).create(m_component);
-            if (javaInfo instanceof JPopupMenuInfo) {
-              request.setObject(javaInfo);
-              return true;
-            }
-          }
-          // not a JPopupMenu_Info
-          return false;
-        }
-      }, false);
-    }
-
-    public boolean validateMoveRequest(EditPart host, ChangeBoundsRequest request) {
-      return request.getEditParts().size() == 1
-          && request.getEditParts().get(0).getModel() instanceof JPopupMenuInfo;
-    }
-
-    public boolean validateAddRequest(EditPart host, ChangeBoundsRequest request) {
-      if (request.getEditParts().size() == 1) {
-        Object object = request.getEditParts().get(0).getModel();
-        return object instanceof JPopupMenuInfo;
-      }
-      return false;
-    }
-  };
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Checks
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if new {@link JPopupMenuInfo} can be added on this
-   *         {@link ComponentInfo}.
-   */
-  private boolean canAcceptPopup() {
-    return !hasChildPopup() && !isPartOfMenu();
-  }
-
-  /**
-   * @return <code>true</code> if this {@link ComponentInfo} already has {@link JPopupMenuInfo}.
-   */
-  private boolean hasChildPopup() {
-    return !m_component.getChildren(JPopupMenuInfo.class).isEmpty();
-  }
-
-  /**
-   * @return <code>true</code> if this {@link ComponentInfo} is already located on
-   *         {@link JMenuBarInfo} or {@link JPopupMenuInfo}.
-   */
-  private boolean isPartOfMenu() {
-    for (ObjectInfo object = m_component; object != null; object = object.getParent()) {
-      if (object instanceof JMenuBarInfo || object instanceof JPopupMenuInfo) {
-        return true;
-      }
-    }
-    return false;
-  }
+	private final ComponentInfo m_component;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public MenuPopupDropLayoutEditPolicy(ComponentInfo component) {
+		m_component = component;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Validator
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected ILayoutRequestValidator getRequestValidator() {
+		return VALIDATOR;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Feedback
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void showLayoutTargetFeedback(Request request) {
+		PolicyUtils.showBorderTargetFeedback(this);
+	}
+
+	@Override
+	protected void eraseLayoutTargetFeedback(Request request) {
+		PolicyUtils.eraseBorderTargetFeedback(this);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Command
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Command getCreateCommand(final CreateRequest request) {
+		if (!canAcceptPopup()) {
+			return null;
+		}
+		// OK, we can add new "popup"
+		return new EditCommand(m_component) {
+			@Override
+			protected void executeEdit() throws Exception {
+				JPopupMenuInfo popup = (JPopupMenuInfo) request.getNewObject();
+				popup.command_CREATE(m_component);
+			}
+		};
+	}
+
+	@Override
+	protected Command getPasteCommand(PasteRequest request) {
+		if (!canAcceptPopup()) {
+			return null;
+		}
+		// OK, we can paste "popup"
+		return LayoutPolicyUtils2.getPasteCommand(
+				m_component,
+				request,
+				JPopupMenuInfo.class,
+				new IPasteProcessor<JPopupMenuInfo>() {
+					public void process(JPopupMenuInfo popup) throws Exception {
+						popup.command_CREATE(m_component);
+					}
+				});
+	}
+
+	@Override
+	protected Command getMoveCommand(ChangeBoundsRequest request) {
+		return null;
+	}
+
+	@Override
+	protected Command getAddCommand(ChangeBoundsRequest request) {
+		if (!canAcceptPopup()) {
+			return null;
+		}
+		// OK, we can move "popup"
+		final JPopupMenuInfo popup = (JPopupMenuInfo) request.getEditParts().get(0).getModel();
+		return new EditCommand(m_component) {
+			@Override
+			protected void executeEdit() throws Exception {
+				popup.command_MOVE(m_component);
+			}
+		};
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Validator instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final ILayoutRequestValidator VALIDATOR = new ILayoutRequestValidator() {
+		public boolean validateCreateRequest(EditPart host, CreateRequest request) {
+			return request.getNewObject() instanceof JPopupMenuInfo;
+		}
+
+		public boolean validatePasteRequest(EditPart host, final PasteRequest request) {
+			return ExecutionUtils.runObjectLog(new RunnableObjectEx<Boolean>() {
+				public Boolean runObject() throws Exception {
+					// check that memento contains JPopupMenu_Info
+					@SuppressWarnings("unchecked")
+					List<JavaInfoMemento> mementos = (List<JavaInfoMemento>) request.getMemento();
+					if (mementos.size() == 1) {
+						JavaInfo javaInfo = mementos.get(0).create(m_component);
+						if (javaInfo instanceof JPopupMenuInfo) {
+							request.setObject(javaInfo);
+							return true;
+						}
+					}
+					// not a JPopupMenu_Info
+					return false;
+				}
+			}, false);
+		}
+
+		public boolean validateMoveRequest(EditPart host, ChangeBoundsRequest request) {
+			return request.getEditParts().size() == 1
+					&& request.getEditParts().get(0).getModel() instanceof JPopupMenuInfo;
+		}
+
+		public boolean validateAddRequest(EditPart host, ChangeBoundsRequest request) {
+			if (request.getEditParts().size() == 1) {
+				Object object = request.getEditParts().get(0).getModel();
+				return object instanceof JPopupMenuInfo;
+			}
+			return false;
+		}
+	};
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Checks
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if new {@link JPopupMenuInfo} can be added on this
+	 *         {@link ComponentInfo}.
+	 */
+	private boolean canAcceptPopup() {
+		return !hasChildPopup() && !isPartOfMenu();
+	}
+
+	/**
+	 * @return <code>true</code> if this {@link ComponentInfo} already has {@link JPopupMenuInfo}.
+	 */
+	private boolean hasChildPopup() {
+		return !m_component.getChildren(JPopupMenuInfo.class).isEmpty();
+	}
+
+	/**
+	 * @return <code>true</code> if this {@link ComponentInfo} is already located on
+	 *         {@link JMenuBarInfo} or {@link JPopupMenuInfo}.
+	 */
+	private boolean isPartOfMenu() {
+		for (ObjectInfo object = m_component; object != null; object = object.getParent()) {
+			if (object instanceof JMenuBarInfo || object instanceof JPopupMenuInfo) {
+				return true;
+			}
+		}
+		return false;
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gefTree/EditPartFactory.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gefTree/EditPartFactory.java
index 0ea44fae9..39c8dc419 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gefTree/EditPartFactory.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gefTree/EditPartFactory.java
@@ -24,19 +24,19 @@
  * @coverage swing.gefTree
  */
 public final class EditPartFactory implements IEditPartFactory {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IEditPartFactory
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public EditPart createEditPart(EditPart context, Object model) {
-    // components
-    if (model instanceof ContainerInfo) {
-      return new ContainerEditPart((ContainerInfo) model);
-    } else if (model instanceof ComponentInfo) {
-      return new ComponentEditPart((ComponentInfo) model);
-    }
-    // unknown
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IEditPartFactory
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public EditPart createEditPart(EditPart context, Object model) {
+		// components
+		if (model instanceof ContainerInfo) {
+			return new ContainerEditPart((ContainerInfo) model);
+		} else if (model instanceof ComponentInfo) {
+			return new ComponentEditPart((ComponentInfo) model);
+		}
+		// unknown
+		return null;
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gefTree/LayoutEditPolicyFactory.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gefTree/LayoutEditPolicyFactory.java
index 2d58d6c55..dacff652f 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gefTree/LayoutEditPolicyFactory.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gefTree/LayoutEditPolicyFactory.java
@@ -31,27 +31,27 @@
  * @coverage swing.gefTree
  */
 public class LayoutEditPolicyFactory implements ILayoutEditPolicyFactory {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ILayoutEditPolicyFactory
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public LayoutEditPolicy createLayoutEditPolicy(EditPart context, Object model) {
-    if (model instanceof GenericFlowLayoutInfo) {
-      return new GenericFlowLayoutEditPolicy((GenericFlowLayoutInfo) model);
-    }
-    if (model instanceof BorderLayoutInfo) {
-      return new BorderLayoutEditPolicy((BorderLayoutInfo) model);
-    }
-    if (model instanceof GridBagLayoutInfo) {
-      return new GridBagLayoutEditPolicy((GridBagLayoutInfo) model);
-    }
-    if (model instanceof AbstractAbsoluteLayoutInfo) {
-      return new AbsoluteLayoutEditPolicy((AbstractAbsoluteLayoutInfo) model);
-    }
-    if (model instanceof SpringLayoutInfo) {
-      return new SpringLayoutEditPolicy((SpringLayoutInfo) model);
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ILayoutEditPolicyFactory
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public LayoutEditPolicy createLayoutEditPolicy(EditPart context, Object model) {
+		if (model instanceof GenericFlowLayoutInfo) {
+			return new GenericFlowLayoutEditPolicy((GenericFlowLayoutInfo) model);
+		}
+		if (model instanceof BorderLayoutInfo) {
+			return new BorderLayoutEditPolicy((BorderLayoutInfo) model);
+		}
+		if (model instanceof GridBagLayoutInfo) {
+			return new GridBagLayoutEditPolicy((GridBagLayoutInfo) model);
+		}
+		if (model instanceof AbstractAbsoluteLayoutInfo) {
+			return new AbsoluteLayoutEditPolicy((AbstractAbsoluteLayoutInfo) model);
+		}
+		if (model instanceof SpringLayoutInfo) {
+			return new SpringLayoutEditPolicy((SpringLayoutInfo) model);
+		}
+		return null;
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gefTree/part/ComponentEditPart.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gefTree/part/ComponentEditPart.java
index 0c62b741f..70ebb40ee 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gefTree/part/ComponentEditPart.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gefTree/part/ComponentEditPart.java
@@ -21,12 +21,12 @@
  * @coverage swing.gefTree.part
  */
 public class ComponentEditPart extends JavaEditPart {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ComponentEditPart(ComponentInfo model) {
-    super(model);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ComponentEditPart(ComponentInfo model) {
+		super(model);
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gefTree/part/ContainerEditPart.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gefTree/part/ContainerEditPart.java
index 3f0979bcc..1857dac45 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gefTree/part/ContainerEditPart.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gefTree/part/ContainerEditPart.java
@@ -26,37 +26,37 @@
  * @coverage swing.gefTree.part
  */
 public final class ContainerEditPart extends ComponentEditPart {
-  private final ContainerInfo m_container;
-  private LayoutInfo m_currentLayout;
+	private final ContainerInfo m_container;
+	private LayoutInfo m_currentLayout;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ContainerEditPart(ContainerInfo model) {
-    super(model);
-    m_container = model;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ContainerEditPart(ContainerInfo model) {
+		super(model);
+		m_container = model;
+	}
 
-  @Override
-  protected void refreshEditPolicies() {
-    super.refreshEditPolicies();
-    // support for dropping LayoutInfo's
-    if (m_container.canSetLayout()) {
-      installEditPolicy(new DropLayoutEditPolicy(m_container));
-    }
-    // support for dropping components
-    if (m_container.hasLayout()) {
-      LayoutInfo layout = m_container.getLayout();
-      if (layout != m_currentLayout) {
-        m_currentLayout = layout;
-        LayoutEditPolicy policy = LayoutPolicyUtils.createLayoutEditPolicy(this, layout);
-        if (policy == null) {
-          policy = new DefaultLayoutEditPolicy();
-        }
-        installEditPolicy(EditPolicy.LAYOUT_ROLE, policy);
-      }
-    }
-  }
+	@Override
+	protected void refreshEditPolicies() {
+		super.refreshEditPolicies();
+		// support for dropping LayoutInfo's
+		if (m_container.canSetLayout()) {
+			installEditPolicy(new DropLayoutEditPolicy(m_container));
+		}
+		// support for dropping components
+		if (m_container.hasLayout()) {
+			LayoutInfo layout = m_container.getLayout();
+			if (layout != m_currentLayout) {
+				m_currentLayout = layout;
+				LayoutEditPolicy policy = LayoutPolicyUtils.createLayoutEditPolicy(this, layout);
+				if (policy == null) {
+					policy = new DefaultLayoutEditPolicy();
+				}
+				installEditPolicy(EditPolicy.LAYOUT_ROLE, policy);
+			}
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gefTree/policy/AbsoluteLayoutEditPolicy.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gefTree/policy/AbsoluteLayoutEditPolicy.java
index 681d312f0..28553efb1 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gefTree/policy/AbsoluteLayoutEditPolicy.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gefTree/policy/AbsoluteLayoutEditPolicy.java
@@ -29,53 +29,53 @@
  * @coverage swing.gefTree.policy
  */
 public final class AbsoluteLayoutEditPolicy extends ObjectLayoutEditPolicy<ComponentInfo> {
-  private final AbstractAbsoluteLayoutInfo m_layout;
+	private final AbstractAbsoluteLayoutInfo m_layout;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbsoluteLayoutEditPolicy(AbstractAbsoluteLayoutInfo layout) {
-    super(layout);
-    m_layout = layout;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbsoluteLayoutEditPolicy(AbstractAbsoluteLayoutInfo layout) {
+		super(layout);
+		m_layout = layout;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Requests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected boolean isGoodReferenceChild(Request request, EditPart editPart) {
-    return editPart.getModel() instanceof ComponentInfo;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Requests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected boolean isGoodReferenceChild(Request request, EditPart editPart) {
+		return editPart.getModel() instanceof ComponentInfo;
+	}
 
-  @Override
-  protected ILayoutRequestValidator getRequestValidator() {
-    return ComponentsLayoutRequestValidator.INSTANCE;
-  }
+	@Override
+	protected ILayoutRequestValidator getRequestValidator() {
+		return ComponentsLayoutRequestValidator.INSTANCE;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void command_CREATE(ComponentInfo component, ComponentInfo reference) throws Exception {
-    Dimension preferredSize = component.getPreferredSize();
-    m_layout.command_CREATE(component, reference);
-    m_layout.command_BOUNDS(component, new Point(0, 0), preferredSize);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void command_CREATE(ComponentInfo component, ComponentInfo reference) throws Exception {
+		Dimension preferredSize = component.getPreferredSize();
+		m_layout.command_CREATE(component, reference);
+		m_layout.command_BOUNDS(component, new Point(0, 0), preferredSize);
+	}
 
-  @Override
-  protected void command_MOVE(ComponentInfo component, ComponentInfo reference) throws Exception {
-    m_layout.command_MOVE(component, reference);
-  }
+	@Override
+	protected void command_MOVE(ComponentInfo component, ComponentInfo reference) throws Exception {
+		m_layout.command_MOVE(component, reference);
+	}
 
-  @Override
-  protected void command_ADD(ComponentInfo component, ComponentInfo reference) throws Exception {
-    m_layout.command_MOVE(component, reference);
-    m_layout.command_BOUNDS(component, new Point(0, 0), component.getModelBounds().getSize());
-  }
+	@Override
+	protected void command_ADD(ComponentInfo component, ComponentInfo reference) throws Exception {
+		m_layout.command_MOVE(component, reference);
+		m_layout.command_BOUNDS(component, new Point(0, 0), component.getModelBounds().getSize());
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gefTree/policy/BorderLayoutEditPolicy.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gefTree/policy/BorderLayoutEditPolicy.java
index a82e0fd11..766786bd5 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gefTree/policy/BorderLayoutEditPolicy.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gefTree/policy/BorderLayoutEditPolicy.java
@@ -29,69 +29,69 @@
  * @coverage swing.gefTree.policy
  */
 public final class BorderLayoutEditPolicy extends ObjectLayoutEditPolicy<ComponentInfo> {
-  private final BorderLayoutInfo m_layout;
+	private final BorderLayoutInfo m_layout;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public BorderLayoutEditPolicy(BorderLayoutInfo layout) {
-    super(layout);
-    m_layout = layout;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public BorderLayoutEditPolicy(BorderLayoutInfo layout) {
+		super(layout);
+		m_layout = layout;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Requests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected boolean isGoodReferenceChild(Request request, EditPart editPart) {
-    return editPart.getModel() instanceof ComponentInfo;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Requests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected boolean isGoodReferenceChild(Request request, EditPart editPart) {
+		return editPart.getModel() instanceof ComponentInfo;
+	}
 
-  @Override
-  protected ILayoutRequestValidator getRequestValidator() {
-    return ComponentsLayoutRequestValidator.INSTANCE;
-  }
+	@Override
+	protected ILayoutRequestValidator getRequestValidator() {
+		return ComponentsLayoutRequestValidator.INSTANCE;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Command getCreateCommand(Object newObject, Object referenceObject) {
-    if (m_layout.getEmptyRegion() == null) {
-      return null;
-    }
-    return super.getCreateCommand(newObject, referenceObject);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Command getCreateCommand(Object newObject, Object referenceObject) {
+		if (m_layout.getEmptyRegion() == null) {
+			return null;
+		}
+		return super.getCreateCommand(newObject, referenceObject);
+	}
 
-  @Override
-  protected Command getAddCommand(List<EditPart> addParts, Object referenceObject) {
-    if (m_layout.getEmptyRegion() == null) {
-      return null;
-    }
-    return super.getAddCommand(addParts, referenceObject);
-  }
+	@Override
+	protected Command getAddCommand(List<EditPart> addParts, Object referenceObject) {
+		if (m_layout.getEmptyRegion() == null) {
+			return null;
+		}
+		return super.getAddCommand(addParts, referenceObject);
+	}
 
-  @Override
-  protected void command_CREATE(ComponentInfo component, ComponentInfo reference) throws Exception {
-    String region = m_layout.getEmptyRegion();
-    m_layout.command_CREATE(component, region, reference);
-  }
+	@Override
+	protected void command_CREATE(ComponentInfo component, ComponentInfo reference) throws Exception {
+		String region = m_layout.getEmptyRegion();
+		m_layout.command_CREATE(component, region, reference);
+	}
 
-  @Override
-  protected void command_MOVE(ComponentInfo component, ComponentInfo reference) throws Exception {
-    m_layout.command_MOVE(component, reference);
-  }
+	@Override
+	protected void command_MOVE(ComponentInfo component, ComponentInfo reference) throws Exception {
+		m_layout.command_MOVE(component, reference);
+	}
 
-  @Override
-  protected void command_ADD(ComponentInfo component, ComponentInfo reference) throws Exception {
-    String region = m_layout.getEmptyRegion();
-    m_layout.command_MOVE(component, reference);
-    m_layout.command_REGION(component, region);
-  }
+	@Override
+	protected void command_ADD(ComponentInfo component, ComponentInfo reference) throws Exception {
+		String region = m_layout.getEmptyRegion();
+		m_layout.command_MOVE(component, reference);
+		m_layout.command_REGION(component, region);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gefTree/policy/DropLayoutEditPolicy.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gefTree/policy/DropLayoutEditPolicy.java
index 9bb00c8a7..057090081 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gefTree/policy/DropLayoutEditPolicy.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gefTree/policy/DropLayoutEditPolicy.java
@@ -27,50 +27,50 @@
  * @coverage swt.gefTree.policy
  */
 public final class DropLayoutEditPolicy extends LayoutEditPolicy {
-  private final ContainerInfo m_composite;
+	private final ContainerInfo m_composite;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DropLayoutEditPolicy(ContainerInfo composite) {
-    m_composite = composite;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DropLayoutEditPolicy(ContainerInfo composite) {
+		m_composite = composite;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Routing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected boolean isRequestCondition(Request request) {
-    // we understand only LayoutInfo drop
-    if (request.getType() == Request.REQ_CREATE) {
-      CreateRequest createRequest = (CreateRequest) request;
-      return createRequest.getNewObject() instanceof LayoutInfo;
-    }
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Routing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected boolean isRequestCondition(Request request) {
+		// we understand only LayoutInfo drop
+		if (request.getType() == Request.REQ_CREATE) {
+			CreateRequest createRequest = (CreateRequest) request;
+			return createRequest.getNewObject() instanceof LayoutInfo;
+		}
+		return false;
+	}
 
-  @Override
-  protected boolean isGoodReferenceChild(Request request, EditPart editPart) {
-    return false;
-  }
+	@Override
+	protected boolean isGoodReferenceChild(Request request, EditPart editPart) {
+		return false;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Command
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Command getCreateCommand(Object newObject, Object referenceObject) {
-    final LayoutInfo newLayout = (LayoutInfo) newObject;
-    return new EditCommand(m_composite) {
-      @Override
-      protected void executeEdit() throws Exception {
-        m_composite.setLayout(newLayout);
-      }
-    };
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Command
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Command getCreateCommand(Object newObject, Object referenceObject) {
+		final LayoutInfo newLayout = (LayoutInfo) newObject;
+		return new EditCommand(m_composite) {
+			@Override
+			protected void executeEdit() throws Exception {
+				m_composite.setLayout(newLayout);
+			}
+		};
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gefTree/policy/GenericFlowLayoutEditPolicy.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gefTree/policy/GenericFlowLayoutEditPolicy.java
index 10b8ef82d..94db0f235 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gefTree/policy/GenericFlowLayoutEditPolicy.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gefTree/policy/GenericFlowLayoutEditPolicy.java
@@ -26,45 +26,45 @@
  * @coverage swing.gefTree.policy
  */
 public final class GenericFlowLayoutEditPolicy extends ObjectLayoutEditPolicy<ComponentInfo> {
-  private final GenericFlowLayoutInfo m_layout;
+	private final GenericFlowLayoutInfo m_layout;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public GenericFlowLayoutEditPolicy(GenericFlowLayoutInfo layout) {
-    super(layout);
-    m_layout = layout;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public GenericFlowLayoutEditPolicy(GenericFlowLayoutInfo layout) {
+		super(layout);
+		m_layout = layout;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Requests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected boolean isGoodReferenceChild(Request request, EditPart editPart) {
-    return editPart.getModel() instanceof ComponentInfo;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Requests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected boolean isGoodReferenceChild(Request request, EditPart editPart) {
+		return editPart.getModel() instanceof ComponentInfo;
+	}
 
-  @Override
-  protected ILayoutRequestValidator getRequestValidator() {
-    return ComponentsLayoutRequestValidator.INSTANCE;
-  }
+	@Override
+	protected ILayoutRequestValidator getRequestValidator() {
+		return ComponentsLayoutRequestValidator.INSTANCE;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void command_CREATE(ComponentInfo component, ComponentInfo reference) throws Exception {
-    m_layout.add(component, reference);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void command_CREATE(ComponentInfo component, ComponentInfo reference) throws Exception {
+		m_layout.add(component, reference);
+	}
 
-  @Override
-  protected void command_MOVE(ComponentInfo component, ComponentInfo reference) throws Exception {
-    m_layout.move(component, reference);
-  }
+	@Override
+	protected void command_MOVE(ComponentInfo component, ComponentInfo reference) throws Exception {
+		m_layout.move(component, reference);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gefTree/policy/GridBagLayoutEditPolicy.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gefTree/policy/GridBagLayoutEditPolicy.java
index e37a95632..c368ce389 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gefTree/policy/GridBagLayoutEditPolicy.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gefTree/policy/GridBagLayoutEditPolicy.java
@@ -29,50 +29,50 @@
  * @coverage swing.gefTree.policy
  */
 public final class GridBagLayoutEditPolicy extends ObjectLayoutEditPolicy<ComponentInfo> {
-  private final GridBagLayoutInfo m_layout;
+	private final GridBagLayoutInfo m_layout;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public GridBagLayoutEditPolicy(GridBagLayoutInfo layout) {
-    super(layout);
-    m_layout = layout;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public GridBagLayoutEditPolicy(GridBagLayoutInfo layout) {
+		super(layout);
+		m_layout = layout;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Requests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected boolean isGoodReferenceChild(Request request, EditPart editPart) {
-    return editPart.getModel() instanceof ComponentInfo;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Requests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected boolean isGoodReferenceChild(Request request, EditPart editPart) {
+		return editPart.getModel() instanceof ComponentInfo;
+	}
 
-  @Override
-  protected ILayoutRequestValidator getRequestValidator() {
-    return ComponentsLayoutRequestValidator.INSTANCE;
-  }
+	@Override
+	protected ILayoutRequestValidator getRequestValidator() {
+		return ComponentsLayoutRequestValidator.INSTANCE;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void command_CREATE(ComponentInfo component, ComponentInfo reference) throws Exception {
-    m_layout.command_CREATE_last(component);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void command_CREATE(ComponentInfo component, ComponentInfo reference) throws Exception {
+		m_layout.command_CREATE_last(component);
+	}
 
-  @Override
-  protected Command getMoveCommand(List<EditPart> moveParts, Object referenceObject) {
-    return null;
-  }
+	@Override
+	protected Command getMoveCommand(List<EditPart> moveParts, Object referenceObject) {
+		return null;
+	}
 
-  @Override
-  protected Command getAddCommand(List<EditPart> addParts, Object referenceObject) {
-    return null;
-  }
+	@Override
+	protected Command getAddCommand(List<EditPart> addParts, Object referenceObject) {
+		return null;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gefTree/policy/SpringLayoutEditPolicy.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gefTree/policy/SpringLayoutEditPolicy.java
index f4f5106e3..0b02d0ad7 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gefTree/policy/SpringLayoutEditPolicy.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gefTree/policy/SpringLayoutEditPolicy.java
@@ -26,40 +26,40 @@
  * @coverage swing.gefTree.policy
  */
 public final class SpringLayoutEditPolicy extends ObjectLayoutEditPolicy<ComponentInfo> {
-  private final SpringLayoutInfo m_layout;
+	private final SpringLayoutInfo m_layout;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SpringLayoutEditPolicy(SpringLayoutInfo layout) {
-    super(layout);
-    m_layout = layout;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SpringLayoutEditPolicy(SpringLayoutInfo layout) {
+		super(layout);
+		m_layout = layout;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Requests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected ILayoutRequestValidator getRequestValidator() {
-    return ComponentsLayoutRequestValidator.INSTANCE;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Requests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected ILayoutRequestValidator getRequestValidator() {
+		return ComponentsLayoutRequestValidator.INSTANCE;
+	}
 
-  @Override
-  protected boolean isGoodReferenceChild(Request request, EditPart editPart) {
-    return editPart.getModel() instanceof ComponentInfo;
-  }
+	@Override
+	protected boolean isGoodReferenceChild(Request request, EditPart editPart) {
+		return editPart.getModel() instanceof ComponentInfo;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void command_MOVE(ComponentInfo component, ComponentInfo reference) throws Exception {
-    m_layout.command_MOVE(component, reference);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void command_MOVE(ComponentInfo component, ComponentInfo reference) throws Exception {
+		m_layout.command_MOVE(component, reference);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/DefaultLayoutStyleSupport.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/DefaultLayoutStyleSupport.java
index cd60547c5..7d67d5759 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/DefaultLayoutStyleSupport.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/DefaultLayoutStyleSupport.java
@@ -22,28 +22,28 @@
  * @coverage swing.laf
  */
 public final class DefaultLayoutStyleSupport implements ILayoutStyleSupport {
-  // constants
-  public static final int DEFAULT_PREFERRED_GAP = 6;
-  public static final int DEFAULT_CONTAINER_GAP = 10;
+	// constants
+	public static final int DEFAULT_PREFERRED_GAP = 6;
+	public static final int DEFAULT_CONTAINER_GAP = 10;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ILayoutStyleSupport
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void setLayoutStyle(LookAndFeel laf) {
-    // do nothing
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ILayoutStyleSupport
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void setLayoutStyle(LookAndFeel laf) {
+		// do nothing
+	}
 
-  public int getContainerGap(JComponent component, int position, Container parent) {
-    return DEFAULT_CONTAINER_GAP;
-  }
+	public int getContainerGap(JComponent component, int position, Container parent) {
+		return DEFAULT_CONTAINER_GAP;
+	}
 
-  public int getPreferredGap(JComponent component1,
-      JComponent component2,
-      int componentPlacement,
-      int position,
-      Container parent) {
-    return DEFAULT_PREFERRED_GAP;
-  }
+	public int getPreferredGap(JComponent component1,
+			JComponent component2,
+			int componentPlacement,
+			int position,
+			Container parent) {
+		return DEFAULT_PREFERRED_GAP;
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/ILayoutStyleSupport.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/ILayoutStyleSupport.java
index 4b150b82c..1e9c78e57 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/ILayoutStyleSupport.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/ILayoutStyleSupport.java
@@ -25,35 +25,35 @@
  * @coverage swing.laf
  */
 public interface ILayoutStyleSupport {
-  String LAYOUT_STYLE_POINT = "org.eclipse.wb.swing.layoutStyle";
+	String LAYOUT_STYLE_POINT = "org.eclipse.wb.swing.layoutStyle";
 
-  /**
-   * Sets the LayoutStyle instance for given <code>laf</code>.
-   *
-   * @param laf
-   *          a {@link LookAndFeel} which LayoutStyle would be used.
-   */
-  void setLayoutStyle(LookAndFeel laf);
+	/**
+	 * Sets the LayoutStyle instance for given <code>laf</code>.
+	 *
+	 * @param laf
+	 *          a {@link LookAndFeel} which LayoutStyle would be used.
+	 */
+	void setLayoutStyle(LookAndFeel laf);
 
-  /**
-   * Calls appropriate LayoutStyle.getPreferredGap() method of LayoutStyle class using reflection.
-   * Note, the <code>position</code> should be one of {@link IPositionConstants#LEFT},
-   * {@link IPositionConstants#RIGHT}, {@link IPositionConstants#TOP},
-   * {@link IPositionConstants#BOTTOM} (it would be converted to appropriate {@link SwingConstants}
-   * values).
-   */
-  int getPreferredGap(JComponent component1,
-      JComponent component2,
-      int componentPlacement,
-      int position,
-      Container parent);
+	/**
+	 * Calls appropriate LayoutStyle.getPreferredGap() method of LayoutStyle class using reflection.
+	 * Note, the <code>position</code> should be one of {@link IPositionConstants#LEFT},
+	 * {@link IPositionConstants#RIGHT}, {@link IPositionConstants#TOP},
+	 * {@link IPositionConstants#BOTTOM} (it would be converted to appropriate {@link SwingConstants}
+	 * values).
+	 */
+	int getPreferredGap(JComponent component1,
+			JComponent component2,
+			int componentPlacement,
+			int position,
+			Container parent);
 
-  /**
-   * Calls appropriate LayoutStyle.getContainerGap() method of LayoutStyle class using reflection.
-   * Note, the <code>position</code> should be one of {@link IPositionConstants#LEFT},
-   * {@link IPositionConstants#RIGHT}, {@link IPositionConstants#TOP},
-   * {@link IPositionConstants#BOTTOM} (it would be converted to appropriate {@link SwingConstants}
-   * values).
-   */
-  int getContainerGap(JComponent component, int position, Container parent);
+	/**
+	 * Calls appropriate LayoutStyle.getContainerGap() method of LayoutStyle class using reflection.
+	 * Note, the <code>position</code> should be one of {@link IPositionConstants#LEFT},
+	 * {@link IPositionConstants#RIGHT}, {@link IPositionConstants#TOP},
+	 * {@link IPositionConstants#BOTTOM} (it would be converted to appropriate {@link SwingConstants}
+	 * values).
+	 */
+	int getContainerGap(JComponent component, int position, Container parent);
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/LafMessages.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/LafMessages.java
index a6c76f22a..eeeafc229 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/LafMessages.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/LafMessages.java
@@ -3,36 +3,36 @@
 import org.eclipse.osgi.util.NLS;
 
 public class LafMessages extends NLS {
-  private static final String BUNDLE_NAME = "org.eclipse.wb.internal.swing.laf.LafMessages"; //$NON-NLS-1$
-  public static String AbstractCustomLookAndFeelDialog_browse;
-  public static String AbstractCustomLookAndFeelDialog_category;
-  public static String AbstractCustomLookAndFeelDialog_jarEmpty;
-  public static String AbstractCustomLookAndFeelDialog_jarError;
-  public static String AbstractCustomLookAndFeelDialog_jarMessage;
-  public static String AbstractCustomLookAndFeelDialog_jarPath;
-  public static String AbstractCustomLookAndFeelDialog_jarScanning;
-  public static String AbstractCustomLookAndFeelDialog_jarTitle;
-  public static String AbstractCustomLookAndFeelDialog_new;
-  public static String AbstractCustomLookAndFeelDialog_newCategory;
-  public static String AbstractCustomLookAndFeelDialog_newCategoryEnterName;
-  public static String AbstractCustomLookAndFeelDialog_searchFileSystem;
-  public static String AbstractCustomLookAndFeelDialog_searchWorkspace;
-  public static String AddCustomLookAndFeelDialog_add;
-  public static String AddCustomLookAndFeelDialog_classesLabel;
-  public static String AddCustomLookAndFeelDialog_deselectAll;
-  public static String AddCustomLookAndFeelDialog_message;
-  public static String AddCustomLookAndFeelDialog_selectAll;
-  public static String EditCustomLookAndFeelDialog_className;
-  public static String EditCustomLookAndFeelDialog_edit;
-  public static String EditCustomLookAndFeelDialog_editProperties;
-  public static String EditCustomLookAndFeelDialog_msgEnterClass;
-  public static String EditCustomLookAndFeelDialog_msgEnterName;
-  public static String EditCustomLookAndFeelDialog_name;
-  static {
-    // initialize resource bundle
-    NLS.initializeMessages(BUNDLE_NAME, LafMessages.class);
-  }
+	private static final String BUNDLE_NAME = "org.eclipse.wb.internal.swing.laf.LafMessages"; //$NON-NLS-1$
+	public static String AbstractCustomLookAndFeelDialog_browse;
+	public static String AbstractCustomLookAndFeelDialog_category;
+	public static String AbstractCustomLookAndFeelDialog_jarEmpty;
+	public static String AbstractCustomLookAndFeelDialog_jarError;
+	public static String AbstractCustomLookAndFeelDialog_jarMessage;
+	public static String AbstractCustomLookAndFeelDialog_jarPath;
+	public static String AbstractCustomLookAndFeelDialog_jarScanning;
+	public static String AbstractCustomLookAndFeelDialog_jarTitle;
+	public static String AbstractCustomLookAndFeelDialog_new;
+	public static String AbstractCustomLookAndFeelDialog_newCategory;
+	public static String AbstractCustomLookAndFeelDialog_newCategoryEnterName;
+	public static String AbstractCustomLookAndFeelDialog_searchFileSystem;
+	public static String AbstractCustomLookAndFeelDialog_searchWorkspace;
+	public static String AddCustomLookAndFeelDialog_add;
+	public static String AddCustomLookAndFeelDialog_classesLabel;
+	public static String AddCustomLookAndFeelDialog_deselectAll;
+	public static String AddCustomLookAndFeelDialog_message;
+	public static String AddCustomLookAndFeelDialog_selectAll;
+	public static String EditCustomLookAndFeelDialog_className;
+	public static String EditCustomLookAndFeelDialog_edit;
+	public static String EditCustomLookAndFeelDialog_editProperties;
+	public static String EditCustomLookAndFeelDialog_msgEnterClass;
+	public static String EditCustomLookAndFeelDialog_msgEnterName;
+	public static String EditCustomLookAndFeelDialog_name;
+	static {
+		// initialize resource bundle
+		NLS.initializeMessages(BUNDLE_NAME, LafMessages.class);
+	}
 
-  private LafMessages() {
-  }
+	private LafMessages() {
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/LafSupport.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/LafSupport.java
index 01ab16e8d..d1b14cbd4 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/LafSupport.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/LafSupport.java
@@ -90,729 +90,729 @@
  * @coverage swing.laf
  */
 public final class LafSupport {
-  // constants
-  public static final String ROOT_ID = "__wbp_laf_root";
-  private static final String EXTERNAL_LAF_POINT = "org.eclipse.wb.swing.lookAndFeel";
-  //
-  private static final QualifiedName SWING_LAF_SELECTED_STORE =
-      new QualifiedName(Activator.PLUGIN_ID, "swing_laf_selected");
-  private static final String SWING_LAF_SELECTED = "SWING_LAF_SELECTED";
-  public static final String SET_LOOK_AND_FEEL_STRING = "setLookAndFeel(java.lang.String)";
-  public static final String SET_LOOK_AND_FEEL_LAF = "setLookAndFeel(javax.swing.LookAndFeel)";
-  // fields
-  private static List<CategoryInfo> m_lafList;
-  private static List<LafInfo> m_mruLAFList = Lists.newLinkedList();
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // private constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private LafSupport() {
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // LAF list, LAF selection
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link List} of {@link CategoryInfo} containing all {@link LookAndFeel}'s
-   *         available.
-   */
-  public static List<CategoryInfo> getLAFCategoriesList() {
-    createLAFList();
-    return ImmutableList.copyOf(m_lafList);
-  }
-
-  /**
-   * @return the {@link List} of {@link LafInfo} containing all most recently used LAF items.
-   */
-  public static List<LafInfo> getMRULAFList() {
-    // must be mutable
-    return m_mruLAFList;
-  }
-
-  /**
-   * Enumerates all available {@link LafInfo} and stores it into <code>m_lafList</code>.
-   */
-  private static void createLAFList() {
-    if (m_lafList == null) {
-      m_lafList = Lists.newArrayList();
-      CategoryInfo rootCategory = new CategoryInfo(ROOT_ID, "<root>");
-      m_lafList.add(rootCategory);
-      // add "undefined" and "current system"
-      rootCategory.add(SystemLafInfo.INSTANCE);
-      rootCategory.add(UndefinedLafInfo.INSTANCE);
-      rootCategory.add(new SeparatorLafInfo());
-      // enumerate system LAFs
-      CategoryInfo jdkCategory = new CategoryInfo("JRE", "JRE");
-      m_lafList.add(jdkCategory);
-      LookAndFeelInfo[] systemLAFs = UIManager.getInstalledLookAndFeels();
-      for (int i = 0; i < systemLAFs.length; i++) {
-        LookAndFeelInfo laf = systemLAFs[i];
-        jdkCategory.add(new LafInfo(laf.getName(), laf.getName(), laf.getClassName()));
-      }
-      // add LAFs using plugin API
-      List<IConfigurationElement> categoryElements =
-          ExternalFactoriesHelper.getElements(EXTERNAL_LAF_POINT, "category");
-      for (IConfigurationElement categoryElement : categoryElements) {
-        CategoryInfo category;
-        if (ROOT_ID.equals(ExternalFactoriesHelper.getRequiredAttribute(categoryElement, "id"))) {
-          category = rootCategory;
-        } else {
-          category = new CategoryInfo(categoryElement);
-          m_lafList.add(category);
-        }
-        for (IConfigurationElement lafElement : categoryElement.getChildren("LookAndFeel")) {
-          if (isConditionTrue(lafElement)) {
-            category.add(new PluginLafInfo(lafElement));
-          }
-        }
-      }
-      // apply commands
-      commands_apply();
-    }
-  }
-
-  /**
-   * @return <code>true</code> if "condition" attribute is empty or evaluates to <code>true</code>.
-   */
-  private static boolean isConditionTrue(IConfigurationElement element) {
-    String condition = element.getAttribute("condition");
-    // no condition
-    if (StringUtils.isEmpty(condition)) {
-      return true;
-    }
-    // evaluate condition
-    Map<String, Object> variables = Maps.newHashMap();
-    {
-      variables.put("isWindows", EnvironmentUtils.IS_WINDOWS);
-    }
-    Object result = ScriptUtils.evaluate(condition, variables);
-    return result instanceof Boolean ? (Boolean) result : false;
-  }
-
-  /**
-   * Causes LAF list to be re-created on next list request.
-   */
-  public static void reloadLAFList() {
-    m_lafList = null;
-  }
-
-  /**
-   * Removes all applied {@link Command}'s.
-   */
-  public static void resetToDefaults() {
-    m_commands.clear();
-    commands_write();
-    reloadLAFList();
-    // restore possibly changed name of special LAFs
-    SystemLafInfo.INSTANCE.setName(SystemLafInfo.SYSTEM_LAF_NAME);
-    UndefinedLafInfo.INSTANCE.setName(UndefinedLafInfo.UNDEFINED_LAF_NAME);
-  }
-
-  /**
-   * Returns the {@link LafInfo} which selected currently in active editor. First it tries to get
-   * the selected LAF from {@link JavaInfo}'s arbitrary value. Next it tries to get LAF from
-   * <code>main()</code> method. Then tries to get the LAF from underlying resource of CU of
-   * <code>javaInfo</code>. At last if nothing found it returns the default LAF as it defined in
-   * preferences.
-   *
-   * @return the {@link LafInfo} which selected currently in active editor.
-   */
-  public static LafInfo getSelectedLAF(JavaInfo javaInfo) {
-    // ensure LAF list created
-    createLAFList();
-    LafInfo selectedLafInfo = null;
-    // first check selected in JavaInfo's arbitrary value
-    selectedLafInfo = lookupLAFByID(getLAFArbitraryID(javaInfo));
-    if (selectedLafInfo != null) {
-      return selectedLafInfo;
-    }
-    // then look into main() if any.
-    selectedLafInfo = getLAFFromMain(javaInfo);
-    if (selectedLafInfo != null) {
-      setLAFArbitraryID(javaInfo, selectedLafInfo.getID());
-      return selectedLafInfo;
-    }
-    // still nothing, look in persistent store
-    try {
-      selectedLafInfo = lookupLAFByID(getLAFPersistentID(javaInfo));
-      if (selectedLafInfo != null) {
-        return selectedLafInfo;
-      }
-    } catch (Throwable e) {
-      // just ignore, proceed with default
-    }
-    // nothing found, return default
-    return getDefaultLAF();
-  }
-
-  /**
-   * @return the default {@link LafInfo} taken from preferences. Returns settings default LAF if
-   *         nothing found.
-   */
-  public static LafInfo getDefaultLAF() {
-    LafInfo lafInfo =
-        lookupLAFByID_ensureList(getPreferenceStore().getString(IPreferenceConstants.P_DEFAULT_LAF));
-    return lafInfo == null ? getSettingsDefaultLAF() : lafInfo;
-  }
-
-  /**
-   * @return the {@link LafInfo} which should be set as "default LAF" by default in preferences.
-   *         Returns system default LAF if nothing found.
-   */
-  public static LafInfo getSettingsDefaultLAF() {
-    LafInfo lafInfo =
-        lookupLAFByID_ensureList(getPreferenceStore().getDefaultString(
-            IPreferenceConstants.P_DEFAULT_LAF));
-    return lafInfo == null ? getSystemDefaultLAF() : lafInfo;
-  }
-
-  /**
-   * Returns system default LAF. For Linux it is 'Metal' LAF because of a bug in JVM, see
-   * http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6922280 For other system it is defined by
-   * {@link UIManager#getSystemLookAndFeelClassName()}.
-   *
-   * @return system default LAF.
-   */
-  public static LafInfo getSystemDefaultLAF() {
-    if (EnvironmentUtils.IS_LINUX) {
-      LafInfo lafInfo = lookupLAFByID_ensureList("Metal");
-      return lafInfo != null ? lafInfo : UndefinedLafInfo.INSTANCE;
-    } else {
-      return SystemLafInfo.INSTANCE;
-    }
-  }
-
-  /**
-   * Selects the LAF. Stores selected LAF into both persistence's and applies in main() method if
-   * needed.
-   */
-  public static void selectLAF(JavaInfo javaInfo, LafInfo lafInfo) throws Exception {
-    Assert.isNotNull(lafInfo);
-    // ensure LAF list created
-    createLAFList();
-    Assert.isLegal(lookupLAFByID(lafInfo.getID()) == lafInfo);
-    // store selected LAF
-    setLAFArbitraryID(javaInfo, lafInfo.getID());
-    setLAFPersistentID(javaInfo, lafInfo.getID());
-    if (getPreferenceStore().getBoolean(IPreferenceConstants.P_APPLY_IN_MAIN)) {
-      IJavaProject javaProject = javaInfo.getEditor().getJavaProject();
-      if (lafInfo instanceof AbstractCustomLafInfo
-          && !ProjectUtils.hasType(javaProject, lafInfo.getClassName())) {
-        // add LAF jar into project classpath
-        ProjectUtils.addJar(javaProject, ((AbstractCustomLafInfo) lafInfo).getJarFile(), null);
-      }
-      lafInfo.applyInMain(javaInfo.getEditor());
-    }
-    // maintain MRU list
-    lafInfo.increaseUsageCount();
-    if (m_mruLAFList.contains(lafInfo)) {
-      // remove to exclude duplicates
-      m_mruLAFList.remove(lafInfo);
-    }
-    m_mruLAFList.add(lafInfo);
-    // keep 5 items, but show only 3 with greatest usage count
-    if (m_mruLAFList.size() > 5) {
-      m_mruLAFList.remove(0);
-    }
-  }
-
-  /**
-   * Applies the selected LAF in Swing via UIManager.
-   *
-   * @param lafInfo
-   *          the {@link LafInfo} to be applied.
-   */
-  public static void applySelectedLAF(final LafInfo lafInfo) {
-    try {
-      SwingUtils.runLaterAndWait(new RunnableEx() {
-        public void run() throws Exception {
-          LookAndFeel lookAndFeelInstance = lafInfo.getLookAndFeelInstance();
-          UIManager.put("ClassLoader", lookAndFeelInstance.getClass().getClassLoader());
-          UIManager.setLookAndFeel(lookAndFeelInstance);
-        }
-      });
-    } catch (Throwable e) {
-      DesignerPlugin.log(e);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils, Misc
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Traverses through LAF list and looks up for LAF with given <code>id</code>.
-   *
-   * @param id
-   *          the id of look-and-feel. Can be <code>null</code>.
-   */
-  private static LafInfo lookupLAFByID(String id) {
-    if (id == null) {
-      return null;
-    }
-    for (CategoryInfo lafCategory : m_lafList) {
-      LafInfo lookupResult = lafCategory.lookupByID(id);
-      if (lookupResult != null) {
-        return lookupResult;
-      }
-    }
-    return null;
-  }
-
-  /**
-   * Ensures the LAF list to be created and traverses through LAF list and looks up for LAF with
-   * given <code>id</code>.
-   *
-   * @param id
-   *          the id of look-and-feel. Can NOT be <code>null</code>.
-   * @return the found look-and-feel or <code>null</code> if nothing found.
-   */
-  private static LafInfo lookupLAFByID_ensureList(String id) {
-    // ensure LAF list created
-    createLAFList();
-    Assert.isNotNull(id);
-    return lookupLAFByID(id);
-  }
-
-  /**
-   * Ensures the LAF list to be created and traverses through LAF categories and looks up for
-   * category with given <code>id</code>.
-   *
-   * @param id
-   *          the id of category. Can NOT be <code>null</code>.
-   * @return the found category or <code>null</code>.
-   */
-  private static CategoryInfo lookupCategoryByID_ensureList(String id) {
-    // ensure LAF list created
-    createLAFList();
-    Assert.isNotNull(id);
-    for (CategoryInfo lafCategory : m_lafList) {
-      if (id.equals(lafCategory.getID())) {
-        return lafCategory;
-      }
-    }
-    // nothing found
-    return null;
-  }
-
-  /**
-   * @return {@link IPreferenceStore} for Swing Toolkit.
-   */
-  private static IPreferenceStore getPreferenceStore() {
-    return ToolkitProvider.DESCRIPTION.getPreferences();
-  }
-
-  /**
-   * Stores the selected LAF ID into underlying resource of this CU.
-   */
-  private static void setLAFPersistentID(JavaInfo javaInfo, String id) throws Exception {
-    IResource resource = javaInfo.getEditor().getModelUnit().getUnderlyingResource();
-    resource.setPersistentProperty(SWING_LAF_SELECTED_STORE, id);
-  }
-
-  /**
-   * Load the selected LAF ID from underlying resource of this CU.
-   */
-  private static String getLAFPersistentID(JavaInfo javaInfo) throws Exception {
-    IResource resource = javaInfo.getEditor().getModelUnit().getUnderlyingResource();
-    return resource.getPersistentProperty(SWING_LAF_SELECTED_STORE);
-  }
-
-  /**
-   * Stores the selected LAF ID into JavaInfo's arbitrary value.
-   */
-  private static void setLAFArbitraryID(JavaInfo javaInfo, String id) {
-    javaInfo.putArbitraryValue(SWING_LAF_SELECTED, id);
-  }
-
-  /**
-   * Load the selected LAF id from JavaInfo's arbitrary value.
-   */
-  private static String getLAFArbitraryID(JavaInfo javaInfo) {
-    return (String) javaInfo.getArbitraryValue(SWING_LAF_SELECTED);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Get LAF installed in main()
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Looks up for <code>main()</code> method and searches the installed LAF by searching
-   * <code>setLookAndFeel</code> method invocation. If found, stores LAF id in passed
-   * <code>javaInfo</code> 's underlying resource under <code>SWING_LAF_SELECTED</code> persistent
-   * key.
-   *
-   * @return {@link LafInfo} which represents installed LAF or <code>null</code> if no
-   *         <code>main</code> method found of no <code>setLookAndFeel</code> method invocation
-   *         found.
-   */
-  private static LafInfo getLAFFromMain(final JavaInfo javaInfo) {
-    AstEditor editor = javaInfo.getEditor();
-    MethodDeclaration mainMethod = getMainMethod(editor);
-    if (mainMethod == null) {
-      // no main method
-      return null;
-    }
-    // look up for setLookAndFeel method
-    MethodInvocation setLookAndFeelMethod = getSetLookAndFeelMethod(mainMethod);
-    if (setLookAndFeelMethod == null) {
-      return null;
-    }
-    String methodSignature = AstNodeUtils.getMethodSignature(setLookAndFeelMethod);
-    try {
-      String className;
-      // evaluate what we've got
-      EvaluationContext context =
-          new EvaluationContext(EditorState.get(editor).getEditorLoader(),
-              new ExecutionFlowDescription(mainMethod));
-      final Object evaluateObject =
-          AstEvaluationEngine.evaluate(context, DomGenerics.arguments(setLookAndFeelMethod).get(0));
-      // it can be String or LookAndFeel only
-      if (SET_LOOK_AND_FEEL_LAF.equals(methodSignature)) {
-        LookAndFeel laf = (LookAndFeel) evaluateObject;
-        className = laf.getClass().getName();
-      } else {
-        className = (String) evaluateObject;
-      }
-      // find in known LAFs list by class name
-      for (CategoryInfo categoryInfo : m_lafList) {
-        LafInfo lafInfo = categoryInfo.lookupByClassName(className);
-        if (lafInfo != null) {
-          return lafInfo;
-        }
-      }
-    } catch (Throwable e) {
-      EditorState.get(editor).addWarning(
-          new EditorWarning(ModelMessages.LafSupport_errCanParse_setLookAndFeel, e));
-    }
-    return null;
-  }
-
-  /**
-   * Searches for main method declaration and looks for any
-   * UIManager.setLookAndFeel(java.lang.String) and
-   * UIManager.setLookAndFeel(javax.swing.LookAndFeel) method invocations in it.
-   *
-   * @return any of UIManager.setLookAndFeel(java.lang.String) or
-   *         UIManager.setLookAndFeel(javax.swing.LookAndFeel) {@link MethodInvocation} instance if
-   *         any. Otherwise returns <code>null</code>.
-   */
-  public static MethodInvocation getSetLookAndFeelMethod(MethodDeclaration mainMethod) {
-    // look up for setLookAndFeel method
-    final MethodInvocation setLAFMethodInvocation[] = new MethodInvocation[1];
-    mainMethod.accept(new ASTVisitor() {
-      @Override
-      public boolean visit(final MethodInvocation node) {
-        // look for UIManager.setLookAndFeel(java.lang.String) and UIManager.setLookAndFeel(javax.swing.LookAndFeel)
-        String methodSignature = AstNodeUtils.getMethodSignature(node);
-        if (isUIManagerInvocation(node)
-            && (SET_LOOK_AND_FEEL_LAF.equals(methodSignature) || SET_LOOK_AND_FEEL_STRING.equals(methodSignature))) {
-          setLAFMethodInvocation[0] = node;
-        }
-        // not interested in children
-        return false;
-      }
-
-      /**
-       * @return <code>true</code> if method invocation expression is type of UIManager.
-       */
-      private boolean isUIManagerInvocation(MethodInvocation node) {
-        return node.getExpression() != null
-            && AstNodeUtils.getFullyQualifiedName(node.getExpression(), false).equals(
-                "javax.swing.UIManager");
-      }
-    });
-    return setLAFMethodInvocation[0];
-  }
-
-  /**
-   * Returns the {@link MethodDeclaration} for main method of primary type of the compilation unit
-   * for given <code>editor</code>. Returns <code>null</code> if no main method found.
-   *
-   * @return the {@link MethodDeclaration} for main method of primary type of the compilation unit
-   *         for given <code>editor</code> or <code>null</code> if no main method found.
-   */
-  public static MethodDeclaration getMainMethod(AstEditor editor) {
-    IType primaryType = CodeUtils.findPrimaryType(editor.getModelUnit());
-    if (primaryType != null) {
-      TypeDeclaration typeDeclaration =
-          AstNodeUtils.getTypeByName(editor.getAstUnit(), primaryType.getElementName());
-      return AstNodeUtils.getMethodBySignature(typeDeclaration, "main(java.lang.String[])");
-    }
-    return null;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if this <code>category</code> is root category.
-   */
-  public static boolean isRootCategory(CategoryInfo category) {
-    return LafSupport.ROOT_ID.equals(category.getID());
-  }
-
-  /**
-   * Ensures the LAF list to be created and traverses through LAF categories and looks up for
-   * category with given <code>id</code>.
-   *
-   * @param id
-   *          the id of category. Can NOT be <code>null</code>.
-   * @return the found category or assertion error if not found.
-   */
-  public static CategoryInfo getCategory(String id) {
-    return lookupCategoryByID_ensureList(id);
-  }
-
-  /**
-   * Ensures the LAF list to be created and traverses through LAF list and looks up for LAF with
-   * given <code>id</code>.
-   *
-   * @param id
-   *          the id of look-and-feel. Can NOT be <code>null</code>.
-   * @return the found look-and-feel or <code>null</code> if nothing found.
-   */
-  public static LafInfo getLookAndFeel(String id) {
-    return lookupLAFByID_ensureList(id);
-  }
-
-  /**
-   * Removes the category specified by <code>id</code> if any. Note that root category cannot be
-   * removed.
-   *
-   * @param id
-   *          the id of category. Can NOT be <code>null</code>.
-   */
-  public static void removeLAFCategory(String id) {
-    Assert.isNotNull(id);
-    CategoryInfo category = getCategory(id);
-    if (category == null || isRootCategory(category)) {
-      return;
-    }
-    // remove from MRU list
-    for (LafInfo lafInfo : category.getLAFList()) {
-      m_mruLAFList.remove(lafInfo);
-    }
-    m_lafList.remove(category);
-  }
-
-  /**
-   * Removes the LookAndFeel specified by <code>lafInfo</code> if any. Note: don't remove from
-   * category directly.
-   *
-   * @param lafInfo
-   *          the instance of {@link LafInfo} to remove. Can't be <code>null</code>.
-   */
-  public static void removeLookAndFeel(LafInfo lafInfo) {
-    Assert.isNotNull(lafInfo);
-    lafInfo.getCategory().remove(lafInfo);
-    m_mruLAFList.remove(lafInfo);
-  }
-
-  /**
-   * Adds the new category with <code>id</code> and <code>name</code>.
-   *
-   * @param id
-   *          the id of category. Can not be <code>null</code>.
-   * @param name
-   *          the name of category. Can not be <code>null</code>.
-   */
-  public static void addLAFCategory(String id, String name) {
-    Assert.isNotNull(id);
-    Assert.isNotNull(name);
-    CategoryInfo category = new CategoryInfo(id, name);
-    m_lafList.add(category);
-  }
-
-  /**
-   * Moves given category within another categories. Root category can not be moved.
-   *
-   * @param moveCategoryID
-   *          the id of moving category. Can not be <code>null</code>.
-   * @param nextCategoryID
-   *          the id of category before which the moving category would be placed. Can be
-   *          <code>null</code>.
-   */
-  public static void moveLAFCategory(String moveCategoryID, String nextCategoryID) {
-    Assert.isNotNull(moveCategoryID);
-    CategoryInfo category = LafSupport.getCategory(moveCategoryID);
-    if (category == null || isRootCategory(category)) {
-      return;
-    }
-    removeLAFCategory(moveCategoryID);
-    CategoryInfo nextCategory;
-    if (nextCategoryID != null && (nextCategory = LafSupport.getCategory(nextCategoryID)) != null) {
-      int index = m_lafList.indexOf(nextCategory);
-      m_lafList.add(index, category);
-    } else {
-      m_lafList.add(category);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final List<Class<? extends Command>> m_commandClasses = Lists.newArrayList();
-  static {
-    m_commandClasses.add(SetVisibleCommand.class);
-    m_commandClasses.add(AddCategoryCommand.class);
-    m_commandClasses.add(RenameCategoryCommand.class);
-    m_commandClasses.add(MoveCategoryCommand.class);
-    m_commandClasses.add(RemoveCategoryCommand.class);
-    m_commandClasses.add(AddCommand.class);
-    m_commandClasses.add(EditNameCommand.class);
-    m_commandClasses.add(EditCommand.class);
-    m_commandClasses.add(MoveCommand.class);
-    m_commandClasses.add(RemoveCommand.class);
-  }
-  private static Map<String, Class<? extends Command>> m_idToCommandClass;
-  private static List<Command> m_commands;
-
-  /**
-   * Applies commands for modifying list of LAFs.
-   */
-  private static void commands_apply() {
-    try {
-      // prepare mapping: id -> command class
-      if (m_idToCommandClass == null) {
-        m_idToCommandClass = Maps.newTreeMap();
-        for (Class<? extends Command> commandClass : m_commandClasses) {
-          String id = (String) commandClass.getField("ID").get(null);
-          m_idToCommandClass.put(id, commandClass);
-        }
-      }
-      // read commands
-      m_commands = Lists.newArrayList();
-      File commandsFile = commands_getFile();
-      if (commandsFile.exists()) {
-        FileInputStream inputStream = new FileInputStream(commandsFile);
-        try {
-          SAXParser parser = SAXParserFactory.newInstance().newSAXParser();
-          parser.parse(inputStream, new DefaultHandler() {
-            @Override
-            public void startElement(String uri,
-                String localName,
-                String name,
-                Attributes attributes) {
-              try {
-                // prepare command class
-                Class<? extends Command> commandClass;
-                {
-                  commandClass = m_idToCommandClass.get(name);
-                  if (commandClass == null) {
-                    return;
-                  }
-                }
-                // create command
-                Command command;
-                {
-                  Constructor<? extends Command> constructor =
-                      commandClass.getConstructor(new Class[]{Attributes.class});
-                  command = constructor.newInstance(new Object[]{attributes});
-                }
-                // add command
-                commands_addExecute(command);
-              } catch (Throwable e) {
-              }
-            }
-          });
-        } finally {
-          inputStream.close();
-        }
-      }
-    } catch (Throwable e) {
-    }
-  }
-
-  /**
-   * Adds given {@link Command} to the list (and executes it).
-   */
-  private static void commands_addExecute(Command command) {
-    try {
-      command.execute();
-      commands_add(command);
-    } catch (Throwable e) {
-    }
-  }
-
-  /**
-   * Adds given {@link Command} to the list and writes commands.
-   */
-  public static void commands_add(Command command) {
-    command.addToCommandList(m_commands);
-  }
-
-  /**
-   * Stores current {@link Command}'s {@link List}.
-   */
-  public static void commands_write() {
-    try {
-      File commandsFile = commands_getFile();
-      XmlWriter xmlWriter = new XmlWriter(commandsFile);
-      try {
-        xmlWriter.openTag("commands");
-        // write separate commands
-        for (Command command : m_commands) {
-          command.write(xmlWriter);
-        }
-        // close
-        xmlWriter.closeTag();
-      } finally {
-        xmlWriter.close();
-      }
-    } catch (Throwable e) {
-    }
-  }
-
-  /**
-   * @return the {@link File} with {@link Command}'s.
-   */
-  private static File commands_getFile() {
-    File stateDirectory = Activator.getDefault().getStateLocation().toFile();
-    stateDirectory.mkdirs();
-    return new File(stateDirectory, "lookAndFeel.commands");
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // LAF changing listener
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static List<ILookAndFeelsChangeListener> m_lafChangingListeners = Lists.newArrayList();
-
-  public static void fireLookAndFeelsChanged() {
-    for (ILookAndFeelsChangeListener listener : m_lafChangingListeners) {
-      listener.lookAndFeelsListChanged();
-    }
-  }
-
-  public static void addLookAndFeelsChangeListener(ILookAndFeelsChangeListener listener) {
-    m_lafChangingListeners.add(listener);
-  }
-
-  public static void removeLookAndFeelsChangeListener(ILookAndFeelsChangeListener listener) {
-    m_lafChangingListeners.remove(listener);
-  }
-
-  /**
-   * Listener interface for changing LookAndFeel preferences.
-   *
-   * @author mitin_aa
-   */
-  public interface ILookAndFeelsChangeListener {
-    /**
-     * Called when LAF list modification occurred.
-     */
-    void lookAndFeelsListChanged();
-  }
+	// constants
+	public static final String ROOT_ID = "__wbp_laf_root";
+	private static final String EXTERNAL_LAF_POINT = "org.eclipse.wb.swing.lookAndFeel";
+	//
+	private static final QualifiedName SWING_LAF_SELECTED_STORE =
+			new QualifiedName(Activator.PLUGIN_ID, "swing_laf_selected");
+	private static final String SWING_LAF_SELECTED = "SWING_LAF_SELECTED";
+	public static final String SET_LOOK_AND_FEEL_STRING = "setLookAndFeel(java.lang.String)";
+	public static final String SET_LOOK_AND_FEEL_LAF = "setLookAndFeel(javax.swing.LookAndFeel)";
+	// fields
+	private static List<CategoryInfo> m_lafList;
+	private static List<LafInfo> m_mruLAFList = Lists.newLinkedList();
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// private constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private LafSupport() {
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// LAF list, LAF selection
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link List} of {@link CategoryInfo} containing all {@link LookAndFeel}'s
+	 *         available.
+	 */
+	public static List<CategoryInfo> getLAFCategoriesList() {
+		createLAFList();
+		return ImmutableList.copyOf(m_lafList);
+	}
+
+	/**
+	 * @return the {@link List} of {@link LafInfo} containing all most recently used LAF items.
+	 */
+	public static List<LafInfo> getMRULAFList() {
+		// must be mutable
+		return m_mruLAFList;
+	}
+
+	/**
+	 * Enumerates all available {@link LafInfo} and stores it into <code>m_lafList</code>.
+	 */
+	private static void createLAFList() {
+		if (m_lafList == null) {
+			m_lafList = Lists.newArrayList();
+			CategoryInfo rootCategory = new CategoryInfo(ROOT_ID, "<root>");
+			m_lafList.add(rootCategory);
+			// add "undefined" and "current system"
+			rootCategory.add(SystemLafInfo.INSTANCE);
+			rootCategory.add(UndefinedLafInfo.INSTANCE);
+			rootCategory.add(new SeparatorLafInfo());
+			// enumerate system LAFs
+			CategoryInfo jdkCategory = new CategoryInfo("JRE", "JRE");
+			m_lafList.add(jdkCategory);
+			LookAndFeelInfo[] systemLAFs = UIManager.getInstalledLookAndFeels();
+			for (int i = 0; i < systemLAFs.length; i++) {
+				LookAndFeelInfo laf = systemLAFs[i];
+				jdkCategory.add(new LafInfo(laf.getName(), laf.getName(), laf.getClassName()));
+			}
+			// add LAFs using plugin API
+			List<IConfigurationElement> categoryElements =
+					ExternalFactoriesHelper.getElements(EXTERNAL_LAF_POINT, "category");
+			for (IConfigurationElement categoryElement : categoryElements) {
+				CategoryInfo category;
+				if (ROOT_ID.equals(ExternalFactoriesHelper.getRequiredAttribute(categoryElement, "id"))) {
+					category = rootCategory;
+				} else {
+					category = new CategoryInfo(categoryElement);
+					m_lafList.add(category);
+				}
+				for (IConfigurationElement lafElement : categoryElement.getChildren("LookAndFeel")) {
+					if (isConditionTrue(lafElement)) {
+						category.add(new PluginLafInfo(lafElement));
+					}
+				}
+			}
+			// apply commands
+			commands_apply();
+		}
+	}
+
+	/**
+	 * @return <code>true</code> if "condition" attribute is empty or evaluates to <code>true</code>.
+	 */
+	private static boolean isConditionTrue(IConfigurationElement element) {
+		String condition = element.getAttribute("condition");
+		// no condition
+		if (StringUtils.isEmpty(condition)) {
+			return true;
+		}
+		// evaluate condition
+		Map<String, Object> variables = Maps.newHashMap();
+		{
+			variables.put("isWindows", EnvironmentUtils.IS_WINDOWS);
+		}
+		Object result = ScriptUtils.evaluate(condition, variables);
+		return result instanceof Boolean ? (Boolean) result : false;
+	}
+
+	/**
+	 * Causes LAF list to be re-created on next list request.
+	 */
+	public static void reloadLAFList() {
+		m_lafList = null;
+	}
+
+	/**
+	 * Removes all applied {@link Command}'s.
+	 */
+	public static void resetToDefaults() {
+		m_commands.clear();
+		commands_write();
+		reloadLAFList();
+		// restore possibly changed name of special LAFs
+		SystemLafInfo.INSTANCE.setName(SystemLafInfo.SYSTEM_LAF_NAME);
+		UndefinedLafInfo.INSTANCE.setName(UndefinedLafInfo.UNDEFINED_LAF_NAME);
+	}
+
+	/**
+	 * Returns the {@link LafInfo} which selected currently in active editor. First it tries to get
+	 * the selected LAF from {@link JavaInfo}'s arbitrary value. Next it tries to get LAF from
+	 * <code>main()</code> method. Then tries to get the LAF from underlying resource of CU of
+	 * <code>javaInfo</code>. At last if nothing found it returns the default LAF as it defined in
+	 * preferences.
+	 *
+	 * @return the {@link LafInfo} which selected currently in active editor.
+	 */
+	public static LafInfo getSelectedLAF(JavaInfo javaInfo) {
+		// ensure LAF list created
+		createLAFList();
+		LafInfo selectedLafInfo = null;
+		// first check selected in JavaInfo's arbitrary value
+		selectedLafInfo = lookupLAFByID(getLAFArbitraryID(javaInfo));
+		if (selectedLafInfo != null) {
+			return selectedLafInfo;
+		}
+		// then look into main() if any.
+		selectedLafInfo = getLAFFromMain(javaInfo);
+		if (selectedLafInfo != null) {
+			setLAFArbitraryID(javaInfo, selectedLafInfo.getID());
+			return selectedLafInfo;
+		}
+		// still nothing, look in persistent store
+		try {
+			selectedLafInfo = lookupLAFByID(getLAFPersistentID(javaInfo));
+			if (selectedLafInfo != null) {
+				return selectedLafInfo;
+			}
+		} catch (Throwable e) {
+			// just ignore, proceed with default
+		}
+		// nothing found, return default
+		return getDefaultLAF();
+	}
+
+	/**
+	 * @return the default {@link LafInfo} taken from preferences. Returns settings default LAF if
+	 *         nothing found.
+	 */
+	public static LafInfo getDefaultLAF() {
+		LafInfo lafInfo =
+				lookupLAFByID_ensureList(getPreferenceStore().getString(IPreferenceConstants.P_DEFAULT_LAF));
+		return lafInfo == null ? getSettingsDefaultLAF() : lafInfo;
+	}
+
+	/**
+	 * @return the {@link LafInfo} which should be set as "default LAF" by default in preferences.
+	 *         Returns system default LAF if nothing found.
+	 */
+	public static LafInfo getSettingsDefaultLAF() {
+		LafInfo lafInfo =
+				lookupLAFByID_ensureList(getPreferenceStore().getDefaultString(
+						IPreferenceConstants.P_DEFAULT_LAF));
+		return lafInfo == null ? getSystemDefaultLAF() : lafInfo;
+	}
+
+	/**
+	 * Returns system default LAF. For Linux it is 'Metal' LAF because of a bug in JVM, see
+	 * http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6922280 For other system it is defined by
+	 * {@link UIManager#getSystemLookAndFeelClassName()}.
+	 *
+	 * @return system default LAF.
+	 */
+	public static LafInfo getSystemDefaultLAF() {
+		if (EnvironmentUtils.IS_LINUX) {
+			LafInfo lafInfo = lookupLAFByID_ensureList("Metal");
+			return lafInfo != null ? lafInfo : UndefinedLafInfo.INSTANCE;
+		} else {
+			return SystemLafInfo.INSTANCE;
+		}
+	}
+
+	/**
+	 * Selects the LAF. Stores selected LAF into both persistence's and applies in main() method if
+	 * needed.
+	 */
+	public static void selectLAF(JavaInfo javaInfo, LafInfo lafInfo) throws Exception {
+		Assert.isNotNull(lafInfo);
+		// ensure LAF list created
+		createLAFList();
+		Assert.isLegal(lookupLAFByID(lafInfo.getID()) == lafInfo);
+		// store selected LAF
+		setLAFArbitraryID(javaInfo, lafInfo.getID());
+		setLAFPersistentID(javaInfo, lafInfo.getID());
+		if (getPreferenceStore().getBoolean(IPreferenceConstants.P_APPLY_IN_MAIN)) {
+			IJavaProject javaProject = javaInfo.getEditor().getJavaProject();
+			if (lafInfo instanceof AbstractCustomLafInfo
+					&& !ProjectUtils.hasType(javaProject, lafInfo.getClassName())) {
+				// add LAF jar into project classpath
+				ProjectUtils.addJar(javaProject, ((AbstractCustomLafInfo) lafInfo).getJarFile(), null);
+			}
+			lafInfo.applyInMain(javaInfo.getEditor());
+		}
+		// maintain MRU list
+		lafInfo.increaseUsageCount();
+		if (m_mruLAFList.contains(lafInfo)) {
+			// remove to exclude duplicates
+			m_mruLAFList.remove(lafInfo);
+		}
+		m_mruLAFList.add(lafInfo);
+		// keep 5 items, but show only 3 with greatest usage count
+		if (m_mruLAFList.size() > 5) {
+			m_mruLAFList.remove(0);
+		}
+	}
+
+	/**
+	 * Applies the selected LAF in Swing via UIManager.
+	 *
+	 * @param lafInfo
+	 *          the {@link LafInfo} to be applied.
+	 */
+	public static void applySelectedLAF(final LafInfo lafInfo) {
+		try {
+			SwingUtils.runLaterAndWait(new RunnableEx() {
+				public void run() throws Exception {
+					LookAndFeel lookAndFeelInstance = lafInfo.getLookAndFeelInstance();
+					UIManager.put("ClassLoader", lookAndFeelInstance.getClass().getClassLoader());
+					UIManager.setLookAndFeel(lookAndFeelInstance);
+				}
+			});
+		} catch (Throwable e) {
+			DesignerPlugin.log(e);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils, Misc
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Traverses through LAF list and looks up for LAF with given <code>id</code>.
+	 *
+	 * @param id
+	 *          the id of look-and-feel. Can be <code>null</code>.
+	 */
+	private static LafInfo lookupLAFByID(String id) {
+		if (id == null) {
+			return null;
+		}
+		for (CategoryInfo lafCategory : m_lafList) {
+			LafInfo lookupResult = lafCategory.lookupByID(id);
+			if (lookupResult != null) {
+				return lookupResult;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Ensures the LAF list to be created and traverses through LAF list and looks up for LAF with
+	 * given <code>id</code>.
+	 *
+	 * @param id
+	 *          the id of look-and-feel. Can NOT be <code>null</code>.
+	 * @return the found look-and-feel or <code>null</code> if nothing found.
+	 */
+	private static LafInfo lookupLAFByID_ensureList(String id) {
+		// ensure LAF list created
+		createLAFList();
+		Assert.isNotNull(id);
+		return lookupLAFByID(id);
+	}
+
+	/**
+	 * Ensures the LAF list to be created and traverses through LAF categories and looks up for
+	 * category with given <code>id</code>.
+	 *
+	 * @param id
+	 *          the id of category. Can NOT be <code>null</code>.
+	 * @return the found category or <code>null</code>.
+	 */
+	private static CategoryInfo lookupCategoryByID_ensureList(String id) {
+		// ensure LAF list created
+		createLAFList();
+		Assert.isNotNull(id);
+		for (CategoryInfo lafCategory : m_lafList) {
+			if (id.equals(lafCategory.getID())) {
+				return lafCategory;
+			}
+		}
+		// nothing found
+		return null;
+	}
+
+	/**
+	 * @return {@link IPreferenceStore} for Swing Toolkit.
+	 */
+	private static IPreferenceStore getPreferenceStore() {
+		return ToolkitProvider.DESCRIPTION.getPreferences();
+	}
+
+	/**
+	 * Stores the selected LAF ID into underlying resource of this CU.
+	 */
+	private static void setLAFPersistentID(JavaInfo javaInfo, String id) throws Exception {
+		IResource resource = javaInfo.getEditor().getModelUnit().getUnderlyingResource();
+		resource.setPersistentProperty(SWING_LAF_SELECTED_STORE, id);
+	}
+
+	/**
+	 * Load the selected LAF ID from underlying resource of this CU.
+	 */
+	private static String getLAFPersistentID(JavaInfo javaInfo) throws Exception {
+		IResource resource = javaInfo.getEditor().getModelUnit().getUnderlyingResource();
+		return resource.getPersistentProperty(SWING_LAF_SELECTED_STORE);
+	}
+
+	/**
+	 * Stores the selected LAF ID into JavaInfo's arbitrary value.
+	 */
+	private static void setLAFArbitraryID(JavaInfo javaInfo, String id) {
+		javaInfo.putArbitraryValue(SWING_LAF_SELECTED, id);
+	}
+
+	/**
+	 * Load the selected LAF id from JavaInfo's arbitrary value.
+	 */
+	private static String getLAFArbitraryID(JavaInfo javaInfo) {
+		return (String) javaInfo.getArbitraryValue(SWING_LAF_SELECTED);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Get LAF installed in main()
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Looks up for <code>main()</code> method and searches the installed LAF by searching
+	 * <code>setLookAndFeel</code> method invocation. If found, stores LAF id in passed
+	 * <code>javaInfo</code> 's underlying resource under <code>SWING_LAF_SELECTED</code> persistent
+	 * key.
+	 *
+	 * @return {@link LafInfo} which represents installed LAF or <code>null</code> if no
+	 *         <code>main</code> method found of no <code>setLookAndFeel</code> method invocation
+	 *         found.
+	 */
+	private static LafInfo getLAFFromMain(final JavaInfo javaInfo) {
+		AstEditor editor = javaInfo.getEditor();
+		MethodDeclaration mainMethod = getMainMethod(editor);
+		if (mainMethod == null) {
+			// no main method
+			return null;
+		}
+		// look up for setLookAndFeel method
+		MethodInvocation setLookAndFeelMethod = getSetLookAndFeelMethod(mainMethod);
+		if (setLookAndFeelMethod == null) {
+			return null;
+		}
+		String methodSignature = AstNodeUtils.getMethodSignature(setLookAndFeelMethod);
+		try {
+			String className;
+			// evaluate what we've got
+			EvaluationContext context =
+					new EvaluationContext(EditorState.get(editor).getEditorLoader(),
+							new ExecutionFlowDescription(mainMethod));
+			final Object evaluateObject =
+					AstEvaluationEngine.evaluate(context, DomGenerics.arguments(setLookAndFeelMethod).get(0));
+			// it can be String or LookAndFeel only
+			if (SET_LOOK_AND_FEEL_LAF.equals(methodSignature)) {
+				LookAndFeel laf = (LookAndFeel) evaluateObject;
+				className = laf.getClass().getName();
+			} else {
+				className = (String) evaluateObject;
+			}
+			// find in known LAFs list by class name
+			for (CategoryInfo categoryInfo : m_lafList) {
+				LafInfo lafInfo = categoryInfo.lookupByClassName(className);
+				if (lafInfo != null) {
+					return lafInfo;
+				}
+			}
+		} catch (Throwable e) {
+			EditorState.get(editor).addWarning(
+					new EditorWarning(ModelMessages.LafSupport_errCanParse_setLookAndFeel, e));
+		}
+		return null;
+	}
+
+	/**
+	 * Searches for main method declaration and looks for any
+	 * UIManager.setLookAndFeel(java.lang.String) and
+	 * UIManager.setLookAndFeel(javax.swing.LookAndFeel) method invocations in it.
+	 *
+	 * @return any of UIManager.setLookAndFeel(java.lang.String) or
+	 *         UIManager.setLookAndFeel(javax.swing.LookAndFeel) {@link MethodInvocation} instance if
+	 *         any. Otherwise returns <code>null</code>.
+	 */
+	public static MethodInvocation getSetLookAndFeelMethod(MethodDeclaration mainMethod) {
+		// look up for setLookAndFeel method
+		final MethodInvocation setLAFMethodInvocation[] = new MethodInvocation[1];
+		mainMethod.accept(new ASTVisitor() {
+			@Override
+			public boolean visit(final MethodInvocation node) {
+				// look for UIManager.setLookAndFeel(java.lang.String) and UIManager.setLookAndFeel(javax.swing.LookAndFeel)
+				String methodSignature = AstNodeUtils.getMethodSignature(node);
+				if (isUIManagerInvocation(node)
+						&& (SET_LOOK_AND_FEEL_LAF.equals(methodSignature) || SET_LOOK_AND_FEEL_STRING.equals(methodSignature))) {
+					setLAFMethodInvocation[0] = node;
+				}
+				// not interested in children
+				return false;
+			}
+
+			/**
+			 * @return <code>true</code> if method invocation expression is type of UIManager.
+			 */
+			private boolean isUIManagerInvocation(MethodInvocation node) {
+				return node.getExpression() != null
+						&& AstNodeUtils.getFullyQualifiedName(node.getExpression(), false).equals(
+								"javax.swing.UIManager");
+			}
+		});
+		return setLAFMethodInvocation[0];
+	}
+
+	/**
+	 * Returns the {@link MethodDeclaration} for main method of primary type of the compilation unit
+	 * for given <code>editor</code>. Returns <code>null</code> if no main method found.
+	 *
+	 * @return the {@link MethodDeclaration} for main method of primary type of the compilation unit
+	 *         for given <code>editor</code> or <code>null</code> if no main method found.
+	 */
+	public static MethodDeclaration getMainMethod(AstEditor editor) {
+		IType primaryType = CodeUtils.findPrimaryType(editor.getModelUnit());
+		if (primaryType != null) {
+			TypeDeclaration typeDeclaration =
+					AstNodeUtils.getTypeByName(editor.getAstUnit(), primaryType.getElementName());
+			return AstNodeUtils.getMethodBySignature(typeDeclaration, "main(java.lang.String[])");
+		}
+		return null;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if this <code>category</code> is root category.
+	 */
+	public static boolean isRootCategory(CategoryInfo category) {
+		return LafSupport.ROOT_ID.equals(category.getID());
+	}
+
+	/**
+	 * Ensures the LAF list to be created and traverses through LAF categories and looks up for
+	 * category with given <code>id</code>.
+	 *
+	 * @param id
+	 *          the id of category. Can NOT be <code>null</code>.
+	 * @return the found category or assertion error if not found.
+	 */
+	public static CategoryInfo getCategory(String id) {
+		return lookupCategoryByID_ensureList(id);
+	}
+
+	/**
+	 * Ensures the LAF list to be created and traverses through LAF list and looks up for LAF with
+	 * given <code>id</code>.
+	 *
+	 * @param id
+	 *          the id of look-and-feel. Can NOT be <code>null</code>.
+	 * @return the found look-and-feel or <code>null</code> if nothing found.
+	 */
+	public static LafInfo getLookAndFeel(String id) {
+		return lookupLAFByID_ensureList(id);
+	}
+
+	/**
+	 * Removes the category specified by <code>id</code> if any. Note that root category cannot be
+	 * removed.
+	 *
+	 * @param id
+	 *          the id of category. Can NOT be <code>null</code>.
+	 */
+	public static void removeLAFCategory(String id) {
+		Assert.isNotNull(id);
+		CategoryInfo category = getCategory(id);
+		if (category == null || isRootCategory(category)) {
+			return;
+		}
+		// remove from MRU list
+		for (LafInfo lafInfo : category.getLAFList()) {
+			m_mruLAFList.remove(lafInfo);
+		}
+		m_lafList.remove(category);
+	}
+
+	/**
+	 * Removes the LookAndFeel specified by <code>lafInfo</code> if any. Note: don't remove from
+	 * category directly.
+	 *
+	 * @param lafInfo
+	 *          the instance of {@link LafInfo} to remove. Can't be <code>null</code>.
+	 */
+	public static void removeLookAndFeel(LafInfo lafInfo) {
+		Assert.isNotNull(lafInfo);
+		lafInfo.getCategory().remove(lafInfo);
+		m_mruLAFList.remove(lafInfo);
+	}
+
+	/**
+	 * Adds the new category with <code>id</code> and <code>name</code>.
+	 *
+	 * @param id
+	 *          the id of category. Can not be <code>null</code>.
+	 * @param name
+	 *          the name of category. Can not be <code>null</code>.
+	 */
+	public static void addLAFCategory(String id, String name) {
+		Assert.isNotNull(id);
+		Assert.isNotNull(name);
+		CategoryInfo category = new CategoryInfo(id, name);
+		m_lafList.add(category);
+	}
+
+	/**
+	 * Moves given category within another categories. Root category can not be moved.
+	 *
+	 * @param moveCategoryID
+	 *          the id of moving category. Can not be <code>null</code>.
+	 * @param nextCategoryID
+	 *          the id of category before which the moving category would be placed. Can be
+	 *          <code>null</code>.
+	 */
+	public static void moveLAFCategory(String moveCategoryID, String nextCategoryID) {
+		Assert.isNotNull(moveCategoryID);
+		CategoryInfo category = LafSupport.getCategory(moveCategoryID);
+		if (category == null || isRootCategory(category)) {
+			return;
+		}
+		removeLAFCategory(moveCategoryID);
+		CategoryInfo nextCategory;
+		if (nextCategoryID != null && (nextCategory = LafSupport.getCategory(nextCategoryID)) != null) {
+			int index = m_lafList.indexOf(nextCategory);
+			m_lafList.add(index, category);
+		} else {
+			m_lafList.add(category);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final List<Class<? extends Command>> m_commandClasses = Lists.newArrayList();
+	static {
+		m_commandClasses.add(SetVisibleCommand.class);
+		m_commandClasses.add(AddCategoryCommand.class);
+		m_commandClasses.add(RenameCategoryCommand.class);
+		m_commandClasses.add(MoveCategoryCommand.class);
+		m_commandClasses.add(RemoveCategoryCommand.class);
+		m_commandClasses.add(AddCommand.class);
+		m_commandClasses.add(EditNameCommand.class);
+		m_commandClasses.add(EditCommand.class);
+		m_commandClasses.add(MoveCommand.class);
+		m_commandClasses.add(RemoveCommand.class);
+	}
+	private static Map<String, Class<? extends Command>> m_idToCommandClass;
+	private static List<Command> m_commands;
+
+	/**
+	 * Applies commands for modifying list of LAFs.
+	 */
+	private static void commands_apply() {
+		try {
+			// prepare mapping: id -> command class
+			if (m_idToCommandClass == null) {
+				m_idToCommandClass = Maps.newTreeMap();
+				for (Class<? extends Command> commandClass : m_commandClasses) {
+					String id = (String) commandClass.getField("ID").get(null);
+					m_idToCommandClass.put(id, commandClass);
+				}
+			}
+			// read commands
+			m_commands = Lists.newArrayList();
+			File commandsFile = commands_getFile();
+			if (commandsFile.exists()) {
+				FileInputStream inputStream = new FileInputStream(commandsFile);
+				try {
+					SAXParser parser = SAXParserFactory.newInstance().newSAXParser();
+					parser.parse(inputStream, new DefaultHandler() {
+						@Override
+						public void startElement(String uri,
+								String localName,
+								String name,
+								Attributes attributes) {
+							try {
+								// prepare command class
+								Class<? extends Command> commandClass;
+								{
+									commandClass = m_idToCommandClass.get(name);
+									if (commandClass == null) {
+										return;
+									}
+								}
+								// create command
+								Command command;
+								{
+									Constructor<? extends Command> constructor =
+											commandClass.getConstructor(new Class[]{Attributes.class});
+									command = constructor.newInstance(new Object[]{attributes});
+								}
+								// add command
+								commands_addExecute(command);
+							} catch (Throwable e) {
+							}
+						}
+					});
+				} finally {
+					inputStream.close();
+				}
+			}
+		} catch (Throwable e) {
+		}
+	}
+
+	/**
+	 * Adds given {@link Command} to the list (and executes it).
+	 */
+	private static void commands_addExecute(Command command) {
+		try {
+			command.execute();
+			commands_add(command);
+		} catch (Throwable e) {
+		}
+	}
+
+	/**
+	 * Adds given {@link Command} to the list and writes commands.
+	 */
+	public static void commands_add(Command command) {
+		command.addToCommandList(m_commands);
+	}
+
+	/**
+	 * Stores current {@link Command}'s {@link List}.
+	 */
+	public static void commands_write() {
+		try {
+			File commandsFile = commands_getFile();
+			XmlWriter xmlWriter = new XmlWriter(commandsFile);
+			try {
+				xmlWriter.openTag("commands");
+				// write separate commands
+				for (Command command : m_commands) {
+					command.write(xmlWriter);
+				}
+				// close
+				xmlWriter.closeTag();
+			} finally {
+				xmlWriter.close();
+			}
+		} catch (Throwable e) {
+		}
+	}
+
+	/**
+	 * @return the {@link File} with {@link Command}'s.
+	 */
+	private static File commands_getFile() {
+		File stateDirectory = Activator.getDefault().getStateLocation().toFile();
+		stateDirectory.mkdirs();
+		return new File(stateDirectory, "lookAndFeel.commands");
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// LAF changing listener
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static List<ILookAndFeelsChangeListener> m_lafChangingListeners = Lists.newArrayList();
+
+	public static void fireLookAndFeelsChanged() {
+		for (ILookAndFeelsChangeListener listener : m_lafChangingListeners) {
+			listener.lookAndFeelsListChanged();
+		}
+	}
+
+	public static void addLookAndFeelsChangeListener(ILookAndFeelsChangeListener listener) {
+		m_lafChangingListeners.add(listener);
+	}
+
+	public static void removeLookAndFeelsChangeListener(ILookAndFeelsChangeListener listener) {
+		m_lafChangingListeners.remove(listener);
+	}
+
+	/**
+	 * Listener interface for changing LookAndFeel preferences.
+	 *
+	 * @author mitin_aa
+	 */
+	public interface ILookAndFeelsChangeListener {
+		/**
+		 * Called when LAF list modification occurred.
+		 */
+		void lookAndFeelsListChanged();
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/LafUtils.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/LafUtils.java
index 7b152d295..3b21fa025 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/LafUtils.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/LafUtils.java
@@ -39,70 +39,70 @@
  * @coverage swing.laf
  */
 public final class LafUtils {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Private constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private LafUtils() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Private constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private LafUtils() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // JAR utilities
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Opens given <code>jarFile</code>, loads every class inside own {@link ClassLoader} and checks
-   * loaded class for to be instance of {@link LookAndFeel}. Returns the array of {@link LafInfo}
-   * containing all found {@link LookAndFeel} classes.
-   *
-   * @param jarFileName
-   *          the absolute OS path pointing to source JAR file.
-   * @param monitor
-   *          the progress monitor which checked for interrupt request.
-   * @return the array of {@link UserDefinedLafInfo} containing all found {@link LookAndFeel}
-   *         classes.
-   */
-  public static UserDefinedLafInfo[] scanJarForLookAndFeels(String jarFileName,
-      IProgressMonitor monitor) throws Exception {
-    List<UserDefinedLafInfo> lafList = Lists.newArrayList();
-    File jarFile = new File(jarFileName);
-    URLClassLoader ucl = new URLClassLoader(new URL[]{jarFile.toURI().toURL()});
-    JarFile jar = new JarFile(jarFile);
-    Enumeration<?> entries = jar.entries();
-    while (entries.hasMoreElements()) {
-      JarEntry entry = (JarEntry) entries.nextElement();
-      String entryName = entry.getName();
-      if (entry.isDirectory() || !entryName.endsWith(".class") || entryName.indexOf('$') >= 0) {
-        continue;
-      }
-      String className = entryName.replace('/', '.').replace('\\', '.');
-      className = className.substring(0, className.lastIndexOf('.'));
-      Class<?> clazz = null;
-      try {
-        clazz = ucl.loadClass(className);
-      } catch (Throwable e) {
-        continue;
-      }
-      // check loaded class to be a non-abstract subclass of javax.swing.LookAndFeel class
-      if (LookAndFeel.class.isAssignableFrom(clazz) && !Modifier.isAbstract(clazz.getModifiers())) {
-        // use the class name as name of LAF
-        String shortClassName = CodeUtils.getShortClass(className);
-        // strip trailing "LookAndFeel"
-        String lafName = StringUtils.chomp(shortClassName, "LookAndFeel");
-        lafList.add(new UserDefinedLafInfo(StringUtils.isEmpty(lafName) ? shortClassName : lafName,
-            className,
-            jarFileName));
-      }
-      // check for Cancel button pressed
-      if (monitor.isCanceled()) {
-        return lafList.toArray(new UserDefinedLafInfo[lafList.size()]);
-      }
-      // update ui
-      while (DesignerPlugin.getStandardDisplay().readAndDispatch()) {
-      }
-    }
-    return lafList.toArray(new UserDefinedLafInfo[lafList.size()]);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// JAR utilities
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Opens given <code>jarFile</code>, loads every class inside own {@link ClassLoader} and checks
+	 * loaded class for to be instance of {@link LookAndFeel}. Returns the array of {@link LafInfo}
+	 * containing all found {@link LookAndFeel} classes.
+	 *
+	 * @param jarFileName
+	 *          the absolute OS path pointing to source JAR file.
+	 * @param monitor
+	 *          the progress monitor which checked for interrupt request.
+	 * @return the array of {@link UserDefinedLafInfo} containing all found {@link LookAndFeel}
+	 *         classes.
+	 */
+	public static UserDefinedLafInfo[] scanJarForLookAndFeels(String jarFileName,
+			IProgressMonitor monitor) throws Exception {
+		List<UserDefinedLafInfo> lafList = Lists.newArrayList();
+		File jarFile = new File(jarFileName);
+		URLClassLoader ucl = new URLClassLoader(new URL[]{jarFile.toURI().toURL()});
+		JarFile jar = new JarFile(jarFile);
+		Enumeration<?> entries = jar.entries();
+		while (entries.hasMoreElements()) {
+			JarEntry entry = (JarEntry) entries.nextElement();
+			String entryName = entry.getName();
+			if (entry.isDirectory() || !entryName.endsWith(".class") || entryName.indexOf('$') >= 0) {
+				continue;
+			}
+			String className = entryName.replace('/', '.').replace('\\', '.');
+			className = className.substring(0, className.lastIndexOf('.'));
+			Class<?> clazz = null;
+			try {
+				clazz = ucl.loadClass(className);
+			} catch (Throwable e) {
+				continue;
+			}
+			// check loaded class to be a non-abstract subclass of javax.swing.LookAndFeel class
+			if (LookAndFeel.class.isAssignableFrom(clazz) && !Modifier.isAbstract(clazz.getModifiers())) {
+				// use the class name as name of LAF
+				String shortClassName = CodeUtils.getShortClass(className);
+				// strip trailing "LookAndFeel"
+				String lafName = StringUtils.chomp(shortClassName, "LookAndFeel");
+				lafList.add(new UserDefinedLafInfo(StringUtils.isEmpty(lafName) ? shortClassName : lafName,
+						className,
+						jarFileName));
+			}
+			// check for Cancel button pressed
+			if (monitor.isCanceled()) {
+				return lafList.toArray(new UserDefinedLafInfo[lafList.size()]);
+			}
+			// update ui
+			while (DesignerPlugin.getStandardDisplay().readAndDispatch()) {
+			}
+		}
+		return lafList.toArray(new UserDefinedLafInfo[lafList.size()]);
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/command/AddCategoryCommand.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/command/AddCategoryCommand.java
index f9e3edc09..851c9ddba 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/command/AddCategoryCommand.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/command/AddCategoryCommand.java
@@ -23,50 +23,50 @@
  * @coverage swing.laf.model
  */
 public final class AddCategoryCommand extends Command {
-  // constants
-  public static final String ID = "add-category";
-  // fields
-  private final String m_id;
-  private final String m_name;
-  private boolean m_executed;
+	// constants
+	public static final String ID = "add-category";
+	// fields
+	private final String m_id;
+	private final String m_name;
+	private boolean m_executed;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AddCategoryCommand(String id, String name) {
-    m_id = id;
-    m_name = name;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AddCategoryCommand(String id, String name) {
+		m_id = id;
+		m_name = name;
+	}
 
-  public AddCategoryCommand(Attributes attributes) {
-    m_id = attributes.getValue(ATTR_ID);
-    m_name = attributes.getValue(ATTR_NAME);
-  }
+	public AddCategoryCommand(Attributes attributes) {
+		m_id = attributes.getValue(ATTR_ID);
+		m_name = attributes.getValue(ATTR_NAME);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Execute
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void execute() {
-    // this may be called twice because this command need to be executed while adding LAF and the user adds new category in adding LAF dialog.
-    if (!m_executed) {
-      LafSupport.addLAFCategory(m_id, m_name);
-      m_executed = true;
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Execute
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void execute() {
+		// this may be called twice because this command need to be executed while adding LAF and the user adds new category in adding LAF dialog.
+		if (!m_executed) {
+			LafSupport.addLAFCategory(m_id, m_name);
+			m_executed = true;
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Save
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void addAttributes(XmlWriter writer) {
-    addAttribute(writer, ATTR_ID, m_id);
-    addAttribute(writer, ATTR_NAME, m_name);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Save
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void addAttributes(XmlWriter writer) {
+		addAttribute(writer, ATTR_ID, m_id);
+		addAttribute(writer, ATTR_NAME, m_name);
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/command/AddCommand.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/command/AddCommand.java
index 012d954e1..29575fec2 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/command/AddCommand.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/command/AddCommand.java
@@ -26,55 +26,55 @@
  * @coverage swing.laf.model
  */
 public final class AddCommand extends EditCommand {
-  // constants
-  private static final String ATTR_CATEGORY_ID = "category-id";
-  public static final String ID = "add";
-  // fields
-  private final String m_categoryID;
+	// constants
+	private static final String ATTR_CATEGORY_ID = "category-id";
+	public static final String ID = "add";
+	// fields
+	private final String m_categoryID;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AddCommand(CategoryInfo category, UserDefinedLafInfo lafInfo) {
-    super(lafInfo.getID(), lafInfo.getName(), lafInfo.getClassName(), lafInfo.getJarFile());
-    m_categoryID = category.getID();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AddCommand(CategoryInfo category, UserDefinedLafInfo lafInfo) {
+		super(lafInfo.getID(), lafInfo.getName(), lafInfo.getClassName(), lafInfo.getJarFile());
+		m_categoryID = category.getID();
+	}
 
-  public AddCommand(Attributes attributes) {
-    super(attributes);
-    m_categoryID = attributes.getValue(ATTR_CATEGORY_ID);
-  }
+	public AddCommand(Attributes attributes) {
+		super(attributes);
+		m_categoryID = attributes.getValue(ATTR_CATEGORY_ID);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Execution
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void execute() {
-    CategoryInfo category = LafSupport.getCategory(m_categoryID);
-    if (category != null) {
-      UserDefinedLafInfo lafInfo = new UserDefinedLafInfo(m_id, m_name, m_className, m_jarName);
-      category.add(lafInfo);
-      lafInfo.setCategory(category);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Execution
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void execute() {
+		CategoryInfo category = LafSupport.getCategory(m_categoryID);
+		if (category != null) {
+			UserDefinedLafInfo lafInfo = new UserDefinedLafInfo(m_id, m_name, m_className, m_jarName);
+			category.add(lafInfo);
+			lafInfo.setCategory(category);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void addAttributes(XmlWriter writer) {
-    super.addAttributes(writer);
-    addAttribute(writer, ATTR_CATEGORY_ID, m_categoryID);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void addAttributes(XmlWriter writer) {
+		super.addAttributes(writer);
+		addAttribute(writer, ATTR_CATEGORY_ID, m_categoryID);
+	}
 
-  @Override
-  public void addToCommandList(List<Command> commands) {
-    commands.add(this);
-  }
+	@Override
+	public void addToCommandList(List<Command> commands) {
+		commands.add(this);
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/command/Command.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/command/Command.java
index 517793309..06274a261 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/command/Command.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/command/Command.java
@@ -22,74 +22,74 @@
  * @coverage swing.laf.model
  */
 public abstract class Command {
-  // constants
-  protected static final String ATTR_ID = "id";
-  protected static final String ATTR_NAME = "name";
-  protected static final String ATTR_VALUE_TRUE = "true";
-  protected static final String ATTR_VALUE_FALSE = "false";
+	// constants
+	protected static final String ATTR_ID = "id";
+	protected static final String ATTR_NAME = "name";
+	protected static final String ATTR_VALUE_TRUE = "true";
+	protected static final String ATTR_VALUE_FALSE = "false";
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Execution
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Executes this {@link Command}.
-   */
-  public abstract void execute();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Execution
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Executes this {@link Command}.
+	 */
+	public abstract void execute();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Writing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link String} that contains information about this {@link Command}. It will be
-   *         passed back to constructor during reading.
-   */
-  public void write(XmlWriter xmlWriter) {
-    try {
-      String id = (String) getClass().getField("ID").get(null);
-      xmlWriter.beginTag(id);
-      addAttributes(xmlWriter);
-    } catch (Throwable e) {
-      throw ReflectionUtils.propagate(e);
-    } finally {
-      xmlWriter.closeTag();
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Writing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link String} that contains information about this {@link Command}. It will be
+	 *         passed back to constructor during reading.
+	 */
+	public void write(XmlWriter xmlWriter) {
+		try {
+			String id = (String) getClass().getField("ID").get(null);
+			xmlWriter.beginTag(id);
+			addAttributes(xmlWriter);
+		} catch (Throwable e) {
+			throw ReflectionUtils.propagate(e);
+		} finally {
+			xmlWriter.closeTag();
+		}
+	}
 
-  /**
-   * Adds single attribute.
-   */
-  protected final void addAttribute(XmlWriter xmlWriter, String name, boolean value) {
-    addAttribute(xmlWriter, name, value ? ATTR_VALUE_TRUE : ATTR_VALUE_FALSE);
-  }
+	/**
+	 * Adds single attribute.
+	 */
+	protected final void addAttribute(XmlWriter xmlWriter, String name, boolean value) {
+		addAttribute(xmlWriter, name, value ? ATTR_VALUE_TRUE : ATTR_VALUE_FALSE);
+	}
 
-  /**
-   * Adds single attribute.
-   */
-  protected final void addAttribute(XmlWriter xmlWriter, String name, String value) {
-    if (value != null) {
-      xmlWriter.writeAttribute(name, value);
-    }
-  }
+	/**
+	 * Adds single attribute.
+	 */
+	protected final void addAttribute(XmlWriter xmlWriter, String name, String value) {
+		if (value != null) {
+			xmlWriter.writeAttribute(name, value);
+		}
+	}
 
-  /**
-   * Subclasses should implement this methods and use {@link #addAttribute(String, String)} to add
-   * separate attributes.
-   */
-  protected abstract void addAttributes(XmlWriter xmlWriter);
+	/**
+	 * Subclasses should implement this methods and use {@link #addAttribute(String, String)} to add
+	 * separate attributes.
+	 */
+	protected abstract void addAttributes(XmlWriter xmlWriter);
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Add command in given list, possible with some optimizations.
-   */
-  public void addToCommandList(List<Command> commands) {
-    commands.add(this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Add command in given list, possible with some optimizations.
+	 */
+	public void addToCommandList(List<Command> commands) {
+		commands.add(this);
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/command/EditCommand.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/command/EditCommand.java
index 0b519da7c..03249585d 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/command/EditCommand.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/command/EditCommand.java
@@ -26,71 +26,71 @@
  * @coverage swing.laf.model
  */
 public class EditCommand extends EditNameCommand {
-  // constants
-  public static final String ID = "edit";
-  private static final String ATTR_JAR_PATH = "jar-path";
-  private static final String ATTR_CLASS_NAME = "class-name";
-  // fields
-  protected final String m_className;
-  protected final String m_jarName;
+	// constants
+	public static final String ID = "edit";
+	private static final String ATTR_JAR_PATH = "jar-path";
+	private static final String ATTR_CLASS_NAME = "class-name";
+	// fields
+	protected final String m_className;
+	protected final String m_jarName;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public EditCommand(String id, String name, String className, String jarName) {
-    super(id, name);
-    m_className = className;
-    m_jarName = jarName;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public EditCommand(String id, String name, String className, String jarName) {
+		super(id, name);
+		m_className = className;
+		m_jarName = jarName;
+	}
 
-  public EditCommand(Attributes attributes) {
-    super(attributes);
-    m_className = attributes.getValue(ATTR_CLASS_NAME);
-    m_jarName = attributes.getValue(ATTR_JAR_PATH);
-  }
+	public EditCommand(Attributes attributes) {
+		super(attributes);
+		m_className = attributes.getValue(ATTR_CLASS_NAME);
+		m_jarName = attributes.getValue(ATTR_JAR_PATH);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Execution
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void execute() {
-    super.execute();
-    UserDefinedLafInfo lafInfo = (UserDefinedLafInfo) LafSupport.getLookAndFeel(m_id);
-    if (lafInfo != null) {
-      lafInfo.setClassName(m_className);
-      lafInfo.setJarFile(m_jarName);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Execution
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void execute() {
+		super.execute();
+		UserDefinedLafInfo lafInfo = (UserDefinedLafInfo) LafSupport.getLookAndFeel(m_id);
+		if (lafInfo != null) {
+			lafInfo.setClassName(m_className);
+			lafInfo.setJarFile(m_jarName);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void addToCommandList(List<Command> commands) {
-    // remove other edit commands for this
-    for (Iterator<Command> I = commands.iterator(); I.hasNext();) {
-      Command command = I.next();
-      if (command instanceof EditCommand) {
-        EditCommand editCommand = (EditCommand) command;
-        if (editCommand.m_id.equals(m_id)) {
-          I.remove();
-        }
-      }
-    }
-    // do add
-    commands.add(this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void addToCommandList(List<Command> commands) {
+		// remove other edit commands for this
+		for (Iterator<Command> I = commands.iterator(); I.hasNext();) {
+			Command command = I.next();
+			if (command instanceof EditCommand) {
+				EditCommand editCommand = (EditCommand) command;
+				if (editCommand.m_id.equals(m_id)) {
+					I.remove();
+				}
+			}
+		}
+		// do add
+		commands.add(this);
+	}
 
-  @Override
-  protected void addAttributes(XmlWriter writer) {
-    super.addAttributes(writer);
-    addAttribute(writer, ATTR_CLASS_NAME, m_className);
-    addAttribute(writer, ATTR_JAR_PATH, m_jarName);
-  }
+	@Override
+	protected void addAttributes(XmlWriter writer) {
+		super.addAttributes(writer);
+		addAttribute(writer, ATTR_CLASS_NAME, m_className);
+		addAttribute(writer, ATTR_JAR_PATH, m_jarName);
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/command/EditNameCommand.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/command/EditNameCommand.java
index ea90e2bd1..1c06febe6 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/command/EditNameCommand.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/command/EditNameCommand.java
@@ -25,53 +25,53 @@
  * @coverage swing.laf.model
  */
 public class EditNameCommand extends LookAndFeelCommand {
-  // constants
-  public static final String ID = "edit-name";
+	// constants
+	public static final String ID = "edit-name";
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public EditNameCommand(String id, String name) {
-    super(id, name);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public EditNameCommand(String id, String name) {
+		super(id, name);
+	}
 
-  public EditNameCommand(Attributes attributes) {
-    super(attributes);
-  }
+	public EditNameCommand(Attributes attributes) {
+		super(attributes);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Execution
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void execute() {
-    LafInfo lafInfo = LafSupport.getLookAndFeel(m_id);
-    if (lafInfo != null) {
-      lafInfo.setName(m_name);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Execution
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void execute() {
+		LafInfo lafInfo = LafSupport.getLookAndFeel(m_id);
+		if (lafInfo != null) {
+			lafInfo.setName(m_name);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void addToCommandList(List<Command> commands) {
-    // remove other edit commands for this
-    for (Iterator<Command> I = commands.iterator(); I.hasNext();) {
-      Command command = I.next();
-      if (command instanceof EditNameCommand) {
-        EditNameCommand editCommand = (EditNameCommand) command;
-        if (editCommand.m_id.equals(m_id)) {
-          I.remove();
-        }
-      }
-    }
-    // do add
-    commands.add(this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void addToCommandList(List<Command> commands) {
+		// remove other edit commands for this
+		for (Iterator<Command> I = commands.iterator(); I.hasNext();) {
+			Command command = I.next();
+			if (command instanceof EditNameCommand) {
+				EditNameCommand editCommand = (EditNameCommand) command;
+				if (editCommand.m_id.equals(m_id)) {
+					I.remove();
+				}
+			}
+		}
+		// do add
+		commands.add(this);
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/command/LookAndFeelCommand.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/command/LookAndFeelCommand.java
index 8188c76cb..c3b4def36 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/command/LookAndFeelCommand.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/command/LookAndFeelCommand.java
@@ -22,32 +22,32 @@
  * @coverage swing.laf.model
  */
 public abstract class LookAndFeelCommand extends Command {
-  protected final String m_id;
-  protected final String m_name;
+	protected final String m_id;
+	protected final String m_name;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public LookAndFeelCommand(String id, String name) {
-    m_id = id;
-    m_name = name;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public LookAndFeelCommand(String id, String name) {
+		m_id = id;
+		m_name = name;
+	}
 
-  public LookAndFeelCommand(Attributes attributes) {
-    m_id = attributes.getValue(ATTR_ID);
-    m_name = attributes.getValue(ATTR_NAME);
-  }
+	public LookAndFeelCommand(Attributes attributes) {
+		m_id = attributes.getValue(ATTR_ID);
+		m_name = attributes.getValue(ATTR_NAME);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void addAttributes(XmlWriter writer) {
-    addAttribute(writer, ATTR_ID, m_id);
-    addAttribute(writer, ATTR_NAME, m_name);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void addAttributes(XmlWriter writer) {
+		addAttribute(writer, ATTR_ID, m_id);
+		addAttribute(writer, ATTR_NAME, m_name);
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/command/MoveCategoryCommand.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/command/MoveCategoryCommand.java
index 9b8925fc2..1a4a2c3f9 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/command/MoveCategoryCommand.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/command/MoveCategoryCommand.java
@@ -23,50 +23,50 @@
  * @coverage swing.laf.model
  */
 public final class MoveCategoryCommand extends Command {
-  // constants
-  private static final String ATTR_NEXT_CATEGORY = "next-category";
-  public static final String ID = "move-category";
-  // fields
-  private final String m_id;
-  private final String m_nextCategoryID;
+	// constants
+	private static final String ATTR_NEXT_CATEGORY = "next-category";
+	public static final String ID = "move-category";
+	// fields
+	private final String m_id;
+	private final String m_nextCategoryID;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public MoveCategoryCommand(CategoryInfo category, CategoryInfo nextCategory) {
-    m_id = category.getID();
-    m_nextCategoryID = nextCategory != null ? nextCategory.getID() : null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public MoveCategoryCommand(CategoryInfo category, CategoryInfo nextCategory) {
+		m_id = category.getID();
+		m_nextCategoryID = nextCategory != null ? nextCategory.getID() : null;
+	}
 
-  public MoveCategoryCommand(Attributes attributes) {
-    m_id = attributes.getValue(ATTR_ID);
-    m_nextCategoryID = attributes.getValue(ATTR_NEXT_CATEGORY);
-  }
+	public MoveCategoryCommand(Attributes attributes) {
+		m_id = attributes.getValue(ATTR_ID);
+		m_nextCategoryID = attributes.getValue(ATTR_NEXT_CATEGORY);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Execution
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void execute() {
-    // don't move before itself
-    if (m_id.equals(m_nextCategoryID)) {
-      return;
-    }
-    LafSupport.moveLAFCategory(m_id, m_nextCategoryID);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Execution
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void execute() {
+		// don't move before itself
+		if (m_id.equals(m_nextCategoryID)) {
+			return;
+		}
+		LafSupport.moveLAFCategory(m_id, m_nextCategoryID);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void addAttributes(XmlWriter writer) {
-    addAttribute(writer, ATTR_ID, m_id);
-    addAttribute(writer, ATTR_NEXT_CATEGORY, m_nextCategoryID);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void addAttributes(XmlWriter writer) {
+		addAttribute(writer, ATTR_ID, m_id);
+		addAttribute(writer, ATTR_NEXT_CATEGORY, m_nextCategoryID);
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/command/MoveCommand.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/command/MoveCommand.java
index 0b9f8a9d6..05b2dfa1c 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/command/MoveCommand.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/command/MoveCommand.java
@@ -27,90 +27,90 @@
  * @coverage swing.laf.model
  */
 public final class MoveCommand extends Command {
-  // constants
-  private static final String ATTR_CATEGORY = "category";
-  private static final String ATTR_NEXT_LOOK_N_FEEL = "next-look-n-feel";
-  public static final String ID = "move";
-  // fields
-  private final String m_id;
-  private final String m_targetCategoryID;
-  private final String m_nextLookAndFeelID;
+	// constants
+	private static final String ATTR_CATEGORY = "category";
+	private static final String ATTR_NEXT_LOOK_N_FEEL = "next-look-n-feel";
+	public static final String ID = "move";
+	// fields
+	private final String m_id;
+	private final String m_targetCategoryID;
+	private final String m_nextLookAndFeelID;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public MoveCommand(LafInfo laf, CategoryInfo targetCategory, LafInfo lafNext) {
-    m_id = laf.getID();
-    m_targetCategoryID = targetCategory.getID();
-    m_nextLookAndFeelID = lafNext != null ? lafNext.getID() : null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public MoveCommand(LafInfo laf, CategoryInfo targetCategory, LafInfo lafNext) {
+		m_id = laf.getID();
+		m_targetCategoryID = targetCategory.getID();
+		m_nextLookAndFeelID = lafNext != null ? lafNext.getID() : null;
+	}
 
-  public MoveCommand(Attributes attributes) {
-    m_id = attributes.getValue(ATTR_ID);
-    m_targetCategoryID = attributes.getValue(ATTR_CATEGORY);
-    m_nextLookAndFeelID = attributes.getValue(ATTR_NEXT_LOOK_N_FEEL);
-  }
+	public MoveCommand(Attributes attributes) {
+		m_id = attributes.getValue(ATTR_ID);
+		m_targetCategoryID = attributes.getValue(ATTR_CATEGORY);
+		m_nextLookAndFeelID = attributes.getValue(ATTR_NEXT_LOOK_N_FEEL);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Execution
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void execute() {
-    LafInfo lafInfo = LafSupport.getLookAndFeel(m_id);
-    CategoryInfo category = LafSupport.getCategory(m_targetCategoryID);
-    if (lafInfo == null || category == null) {
-      return;
-    }
-    // don't move before itself
-    if (m_id.equals(m_nextLookAndFeelID)) {
-      return;
-    }
-    // remove source entry
-    LafSupport.removeLookAndFeel(lafInfo);
-    // add to new
-    LafInfo lafNext;
-    if (m_nextLookAndFeelID != null
-        && (lafNext = LafSupport.getLookAndFeel(m_nextLookAndFeelID)) != null) {
-      int index = category.getLAFList().indexOf(lafNext);
-      category.add(index, lafInfo);
-    } else {
-      category.add(lafInfo);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Execution
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void execute() {
+		LafInfo lafInfo = LafSupport.getLookAndFeel(m_id);
+		CategoryInfo category = LafSupport.getCategory(m_targetCategoryID);
+		if (lafInfo == null || category == null) {
+			return;
+		}
+		// don't move before itself
+		if (m_id.equals(m_nextLookAndFeelID)) {
+			return;
+		}
+		// remove source entry
+		LafSupport.removeLookAndFeel(lafInfo);
+		// add to new
+		LafInfo lafNext;
+		if (m_nextLookAndFeelID != null
+				&& (lafNext = LafSupport.getLookAndFeel(m_nextLookAndFeelID)) != null) {
+			int index = category.getLAFList().indexOf(lafNext);
+			category.add(index, lafInfo);
+		} else {
+			category.add(lafInfo);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void addAttributes(XmlWriter writer) {
-    addAttribute(writer, ATTR_ID, m_id);
-    addAttribute(writer, ATTR_CATEGORY, m_targetCategoryID);
-    addAttribute(writer, ATTR_NEXT_LOOK_N_FEEL, m_nextLookAndFeelID);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void addAttributes(XmlWriter writer) {
+		addAttribute(writer, ATTR_ID, m_id);
+		addAttribute(writer, ATTR_CATEGORY, m_targetCategoryID);
+		addAttribute(writer, ATTR_NEXT_LOOK_N_FEEL, m_nextLookAndFeelID);
+	}
 
-  @Override
-  public void addToCommandList(List<Command> commands) {
-    ListIterator<Command> I = commands.listIterator(commands.size());
-    while (I.hasPrevious()) {
-      Command command = I.previous();
-      if (command instanceof MoveCommand) {
-        MoveCommand moveCommand = (MoveCommand) command;
-        if (m_id.equals(moveCommand.m_id)) {
-          // remove moves of source entry
-          I.remove();
-        } else if (m_id.equals(moveCommand.m_nextLookAndFeelID)) {
-          // if source entry used as target, stop optimizing
-          break;
-        }
-      }
-    }
-    // add command
-    commands.add(this);
-  }
+	@Override
+	public void addToCommandList(List<Command> commands) {
+		ListIterator<Command> I = commands.listIterator(commands.size());
+		while (I.hasPrevious()) {
+			Command command = I.previous();
+			if (command instanceof MoveCommand) {
+				MoveCommand moveCommand = (MoveCommand) command;
+				if (m_id.equals(moveCommand.m_id)) {
+					// remove moves of source entry
+					I.remove();
+				} else if (m_id.equals(moveCommand.m_nextLookAndFeelID)) {
+					// if source entry used as target, stop optimizing
+					break;
+				}
+			}
+		}
+		// add command
+		commands.add(this);
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/command/RemoveCategoryCommand.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/command/RemoveCategoryCommand.java
index a8e92dc6b..1ff239b0b 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/command/RemoveCategoryCommand.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/command/RemoveCategoryCommand.java
@@ -23,41 +23,41 @@
  * @coverage swing.laf.model
  */
 public final class RemoveCategoryCommand extends Command {
-  // constants
-  public static final String ID = "remove-category";
-  // fields
-  private final String m_id;
+	// constants
+	public static final String ID = "remove-category";
+	// fields
+	private final String m_id;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public RemoveCategoryCommand(CategoryInfo category) {
-    m_id = category.getID();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public RemoveCategoryCommand(CategoryInfo category) {
+		m_id = category.getID();
+	}
 
-  public RemoveCategoryCommand(Attributes attributes) {
-    m_id = attributes.getValue(ATTR_ID);
-  }
+	public RemoveCategoryCommand(Attributes attributes) {
+		m_id = attributes.getValue(ATTR_ID);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Execution
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void execute() {
-    LafSupport.removeLAFCategory(m_id);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Execution
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void execute() {
+		LafSupport.removeLAFCategory(m_id);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void addAttributes(XmlWriter writer) {
-    addAttribute(writer, ATTR_ID, m_id);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void addAttributes(XmlWriter writer) {
+		addAttribute(writer, ATTR_ID, m_id);
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/command/RemoveCommand.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/command/RemoveCommand.java
index 9542af74e..895696155 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/command/RemoveCommand.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/command/RemoveCommand.java
@@ -26,60 +26,60 @@
  * @coverage swing.laf.model
  */
 public final class RemoveCommand extends Command {
-  // constants
-  public static final String ID = "remove";
-  // fields
-  private final String m_id;
+	// constants
+	public static final String ID = "remove";
+	// fields
+	private final String m_id;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public RemoveCommand(LafInfo lafInfo) {
-    m_id = lafInfo.getID();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public RemoveCommand(LafInfo lafInfo) {
+		m_id = lafInfo.getID();
+	}
 
-  public RemoveCommand(Attributes attributes) {
-    m_id = attributes.getValue(ATTR_ID);
-  }
+	public RemoveCommand(Attributes attributes) {
+		m_id = attributes.getValue(ATTR_ID);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Execution
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void execute() {
-    LafInfo lafInfo = LafSupport.getLookAndFeel(m_id);
-    if (lafInfo != null) {
-      LafSupport.removeLookAndFeel(lafInfo);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Execution
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void execute() {
+		LafInfo lafInfo = LafSupport.getLookAndFeel(m_id);
+		if (lafInfo != null) {
+			LafSupport.removeLookAndFeel(lafInfo);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void addAttributes(XmlWriter writer) {
-    addAttribute(writer, ATTR_ID, m_id);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void addAttributes(XmlWriter writer) {
+		addAttribute(writer, ATTR_ID, m_id);
+	}
 
-  @Override
-  public void addToCommandList(List<Command> commands) {
-    // remove other commands, these are not needed because this entry will be deleted
-    for (Iterator<Command> I = commands.iterator(); I.hasNext();) {
-      Command command = I.next();
-      if (command instanceof LookAndFeelCommand) {
-        LookAndFeelCommand lookAndFeelCommand = (LookAndFeelCommand) command;
-        if (lookAndFeelCommand.m_id.equals(m_id)) {
-          I.remove();
-        }
-      }
-    }
-    // do add
-    commands.add(this);
-  }
+	@Override
+	public void addToCommandList(List<Command> commands) {
+		// remove other commands, these are not needed because this entry will be deleted
+		for (Iterator<Command> I = commands.iterator(); I.hasNext();) {
+			Command command = I.next();
+			if (command instanceof LookAndFeelCommand) {
+				LookAndFeelCommand lookAndFeelCommand = (LookAndFeelCommand) command;
+				if (lookAndFeelCommand.m_id.equals(m_id)) {
+					I.remove();
+				}
+			}
+		}
+		// do add
+		commands.add(this);
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/command/RenameCategoryCommand.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/command/RenameCategoryCommand.java
index 2dae35d02..93d5d1a97 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/command/RenameCategoryCommand.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/command/RenameCategoryCommand.java
@@ -23,48 +23,48 @@
  * @coverage swing.laf.model
  */
 public final class RenameCategoryCommand extends Command {
-  // constants
-  public static final String ID = "rename-category";
-  // fields
-  private final String m_id;
-  private final String m_name;
+	// constants
+	public static final String ID = "rename-category";
+	// fields
+	private final String m_id;
+	private final String m_name;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public RenameCategoryCommand(CategoryInfo category, String name) {
-    m_id = category.getID();
-    m_name = name;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public RenameCategoryCommand(CategoryInfo category, String name) {
+		m_id = category.getID();
+		m_name = name;
+	}
 
-  public RenameCategoryCommand(Attributes attributes) {
-    m_id = attributes.getValue(ATTR_ID);
-    m_name = attributes.getValue(ATTR_NAME);
-  }
+	public RenameCategoryCommand(Attributes attributes) {
+		m_id = attributes.getValue(ATTR_ID);
+		m_name = attributes.getValue(ATTR_NAME);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Execute
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void execute() {
-    CategoryInfo category = LafSupport.getCategory(m_id);
-    if (category != null) {
-      category.setName(m_name);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Execute
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void execute() {
+		CategoryInfo category = LafSupport.getCategory(m_id);
+		if (category != null) {
+			category.setName(m_name);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Save
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void addAttributes(XmlWriter writer) {
-    addAttribute(writer, ATTR_ID, m_id);
-    addAttribute(writer, ATTR_NAME, m_name);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Save
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void addAttributes(XmlWriter writer) {
+		addAttribute(writer, ATTR_ID, m_id);
+		addAttribute(writer, ATTR_NAME, m_name);
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/command/SetVisibleCommand.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/command/SetVisibleCommand.java
index ae5635dbd..d4ee4c772 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/command/SetVisibleCommand.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/command/SetVisibleCommand.java
@@ -28,74 +28,74 @@
  * @coverage swing.laf.model
  */
 public final class SetVisibleCommand extends Command {
-  // constants
-  private static final String ATTR_VISIBLE = "visible";
-  public static final String ID = "set-visible";
-  // fields
-  private final String m_id;
-  private final boolean m_visible;
+	// constants
+	private static final String ATTR_VISIBLE = "visible";
+	public static final String ID = "set-visible";
+	// fields
+	private final String m_id;
+	private final boolean m_visible;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SetVisibleCommand(LafEntryInfo element, boolean visible) {
-    m_id = element.getID();
-    m_visible = visible;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SetVisibleCommand(LafEntryInfo element, boolean visible) {
+		m_id = element.getID();
+		m_visible = visible;
+	}
 
-  public SetVisibleCommand(Attributes attributes) {
-    m_id = attributes.getValue(ATTR_ID);
-    m_visible = ATTR_VALUE_TRUE.equals(attributes.getValue(ATTR_VISIBLE));
-  }
+	public SetVisibleCommand(Attributes attributes) {
+		m_id = attributes.getValue(ATTR_ID);
+		m_visible = ATTR_VALUE_TRUE.equals(attributes.getValue(ATTR_VISIBLE));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Execute
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void execute() {
-    // try category
-    {
-      CategoryInfo category = LafSupport.getCategory(m_id);
-      if (category != null) {
-        category.setVisible(m_visible);
-        return;
-      }
-    }
-    // try LAF
-    {
-      LafInfo lafInfo = LafSupport.getLookAndFeel(m_id);
-      if (lafInfo != null) {
-        lafInfo.setVisible(m_visible);
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Execute
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void execute() {
+		// try category
+		{
+			CategoryInfo category = LafSupport.getCategory(m_id);
+			if (category != null) {
+				category.setVisible(m_visible);
+				return;
+			}
+		}
+		// try LAF
+		{
+			LafInfo lafInfo = LafSupport.getLookAndFeel(m_id);
+			if (lafInfo != null) {
+				lafInfo.setVisible(m_visible);
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Save
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void addAttributes(XmlWriter writer) {
-    addAttribute(writer, ATTR_ID, m_id);
-    addAttribute(writer, ATTR_VISIBLE, m_visible);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Save
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void addAttributes(XmlWriter writer) {
+		addAttribute(writer, ATTR_ID, m_id);
+		addAttribute(writer, ATTR_VISIBLE, m_visible);
+	}
 
-  @Override
-  public void addToCommandList(List<Command> commands) {
-    for (Iterator<Command> I = commands.iterator(); I.hasNext();) {
-      Command command = I.next();
-      if (command instanceof SetVisibleCommand) {
-        SetVisibleCommand svCommand = (SetVisibleCommand) command;
-        if (svCommand.m_id.equals(m_id)) {
-          I.remove();
-        }
-      }
-    }
-    commands.add(this);
-  }
+	@Override
+	public void addToCommandList(List<Command> commands) {
+		for (Iterator<Command> I = commands.iterator(); I.hasNext();) {
+			Command command = I.next();
+			if (command instanceof SetVisibleCommand) {
+				SetVisibleCommand svCommand = (SetVisibleCommand) command;
+				if (svCommand.m_id.equals(m_id)) {
+					I.remove();
+				}
+			}
+		}
+		commands.add(this);
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/external/ILookAndFeelInitializer.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/external/ILookAndFeelInitializer.java
index 161a8878a..96ab7d03c 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/external/ILookAndFeelInitializer.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/external/ILookAndFeelInitializer.java
@@ -19,22 +19,22 @@
  * @coverage swing.laf
  */
 public interface ILookAndFeelInitializer {
-  /**
-   * Performs any initializing before using look-n-feel class, i.e., just before
-   * javax.swing.UIManager.setLookAndFeel(javax.swing.LookAndFeel).
-   *
-   * @throws Exception
-   */
-  void initialize() throws Exception;
+	/**
+	 * Performs any initializing before using look-n-feel class, i.e., just before
+	 * javax.swing.UIManager.setLookAndFeel(javax.swing.LookAndFeel).
+	 *
+	 * @throws Exception
+	 */
+	void initialize() throws Exception;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Default implementation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  final ILookAndFeelInitializer DEFAULT = new ILookAndFeelInitializer() {
-    public void initialize() throws Exception {
-      // do nothing
-    }
-  };
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Default implementation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	final ILookAndFeelInitializer DEFAULT = new ILookAndFeelInitializer() {
+		public void initialize() throws Exception {
+			// do nothing
+		}
+	};
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/model/AbstractCustomLafInfo.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/model/AbstractCustomLafInfo.java
index b334924a2..290db7e19 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/model/AbstractCustomLafInfo.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/model/AbstractCustomLafInfo.java
@@ -17,34 +17,34 @@
  * @coverage swing.laf.model
  */
 public abstract class AbstractCustomLafInfo extends LafInfo {
-  private String m_jarFile;
+	private String m_jarFile;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractCustomLafInfo(String id, String name, String className, String jarFile) {
-    super(id, name, className);
-    m_jarFile = jarFile;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractCustomLafInfo(String id, String name, String className, String jarFile) {
+		super(id, name, className);
+		m_jarFile = jarFile;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the full path to jar-file containing this LookAndFeel.
-   */
-  public final String getJarFile() {
-    return m_jarFile;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the full path to jar-file containing this LookAndFeel.
+	 */
+	public final String getJarFile() {
+		return m_jarFile;
+	}
 
-  /**
-   * Sets the full path to jar-file containing this LookAndFeel.
-   */
-  public void setJarFile(String jarFile) {
-    m_jarFile = jarFile;
-  }
+	/**
+	 * Sets the full path to jar-file containing this LookAndFeel.
+	 */
+	public void setJarFile(String jarFile) {
+		m_jarFile = jarFile;
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/model/CategoryInfo.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/model/CategoryInfo.java
index b2ceeee7e..2e0cc1c15 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/model/CategoryInfo.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/model/CategoryInfo.java
@@ -25,88 +25,88 @@
  * @coverage swing.laf.model
  */
 public final class CategoryInfo extends LafEntryInfo {
-  private final List<LafInfo> m_lafList = Lists.newArrayList();
+	private final List<LafInfo> m_lafList = Lists.newArrayList();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CategoryInfo(String id, String name) {
-    super(id, name);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CategoryInfo(String id, String name) {
+		super(id, name);
+	}
 
-  public CategoryInfo(IConfigurationElement element) {
-    super(ExternalFactoriesHelper.getRequiredAttribute(element, "id"),
-        ExternalFactoriesHelper.getRequiredAttribute(element, "name"));
-  }
+	public CategoryInfo(IConfigurationElement element) {
+		super(ExternalFactoriesHelper.getRequiredAttribute(element, "id"),
+				ExternalFactoriesHelper.getRequiredAttribute(element, "name"));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // LAFInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return {@link LafInfo}'s in this {@link CategoryInfo}.
-   */
-  public List<LafInfo> getLAFList() {
-    return m_lafList;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// LAFInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return {@link LafInfo}'s in this {@link CategoryInfo}.
+	 */
+	public List<LafInfo> getLAFList() {
+		return m_lafList;
+	}
 
-  /**
-   * Adds new {@link LafInfo} using specified index.
-   */
-  public void add(int index, LafInfo lafInfo) {
-    if (!m_lafList.contains(lafInfo)) {
-      m_lafList.add(index, lafInfo);
-    }
-    lafInfo.setCategory(this);
-  }
+	/**
+	 * Adds new {@link LafInfo} using specified index.
+	 */
+	public void add(int index, LafInfo lafInfo) {
+		if (!m_lafList.contains(lafInfo)) {
+			m_lafList.add(index, lafInfo);
+		}
+		lafInfo.setCategory(this);
+	}
 
-  /**
-   * Adds new {@link LafInfo}.
-   */
-  public void add(LafInfo lafInfo) {
-    if (!m_lafList.contains(lafInfo)) {
-      m_lafList.add(lafInfo);
-    }
-    lafInfo.setCategory(this);
-  }
+	/**
+	 * Adds new {@link LafInfo}.
+	 */
+	public void add(LafInfo lafInfo) {
+		if (!m_lafList.contains(lafInfo)) {
+			m_lafList.add(lafInfo);
+		}
+		lafInfo.setCategory(this);
+	}
 
-  /**
-   * Removes given {@link LafInfo} from this {@link CategoryInfo}.
-   */
-  public void remove(LafInfo lafInfo) {
-    m_lafList.remove(lafInfo);
-  }
+	/**
+	 * Removes given {@link LafInfo} from this {@link CategoryInfo}.
+	 */
+	public void remove(LafInfo lafInfo) {
+		m_lafList.remove(lafInfo);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Search
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Non-recursive. Looks up within own children for {@link LafInfo} with given <code>id</code>.
-   */
-  public LafInfo lookupByID(String id) {
-    for (LafInfo lafInfo : m_lafList) {
-      if (id.equals(lafInfo.getID())) {
-        return lafInfo;
-      }
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Search
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Non-recursive. Looks up within own children for {@link LafInfo} with given <code>id</code>.
+	 */
+	public LafInfo lookupByID(String id) {
+		for (LafInfo lafInfo : m_lafList) {
+			if (id.equals(lafInfo.getID())) {
+				return lafInfo;
+			}
+		}
+		return null;
+	}
 
-  /**
-   * Non-recursive. Looks up within own children for {@link LafInfo} with given
-   * <code>className</code>.
-   */
-  public LafInfo lookupByClassName(String className) {
-    for (LafInfo lafInfo : m_lafList) {
-      if (className.equals(lafInfo.getClassName())) {
-        return lafInfo;
-      }
-    }
-    return null;
-  }
+	/**
+	 * Non-recursive. Looks up within own children for {@link LafInfo} with given
+	 * <code>className</code>.
+	 */
+	public LafInfo lookupByClassName(String className) {
+		for (LafInfo lafInfo : m_lafList) {
+			if (className.equals(lafInfo.getClassName())) {
+				return lafInfo;
+			}
+		}
+		return null;
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/model/LafEntryInfo.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/model/LafEntryInfo.java
index 7e9b2d989..b78c02c4c 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/model/LafEntryInfo.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/model/LafEntryInfo.java
@@ -17,80 +17,80 @@
  * @coverage swing.laf.model
  */
 public abstract class LafEntryInfo {
-  private String m_name;
-  private String m_id;
-  private boolean m_visible = true;
+	private String m_name;
+	private String m_id;
+	private boolean m_visible = true;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public LafEntryInfo(String id, String name) {
-    m_id = id;
-    m_name = name;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public LafEntryInfo(String id, String name) {
+		m_id = id;
+		m_name = name;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets the name for this entry.
-   *
-   * @param name
-   *          the name string to set.
-   */
-  public final void setName(String name) {
-    m_name = name;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets the name for this entry.
+	 *
+	 * @param name
+	 *          the name string to set.
+	 */
+	public final void setName(String name) {
+		m_name = name;
+	}
 
-  /**
-   * @return the name of this entry.
-   */
-  public final String getName() {
-    return m_name;
-  }
+	/**
+	 * @return the name of this entry.
+	 */
+	public final String getName() {
+		return m_name;
+	}
 
-  /**
-   * Sets the ID for this entry.
-   *
-   * @param id
-   *          the ID string to set.
-   */
-  public final void setID(String id) {
-    m_id = id;
-  }
+	/**
+	 * Sets the ID for this entry.
+	 *
+	 * @param id
+	 *          the ID string to set.
+	 */
+	public final void setID(String id) {
+		m_id = id;
+	}
 
-  /**
-   * @return the ID of this entry.
-   */
-  public final String getID() {
-    return m_id;
-  }
+	/**
+	 * @return the ID of this entry.
+	 */
+	public final String getID() {
+		return m_id;
+	}
 
-  /**
-   * @return <code>true</code> if this entry should be displayed for the user.
-   */
-  public final boolean isVisible() {
-    return m_visible;
-  }
+	/**
+	 * @return <code>true</code> if this entry should be displayed for the user.
+	 */
+	public final boolean isVisible() {
+		return m_visible;
+	}
 
-  /**
-   * Specifies if this entry should be displayed for the user.
-   */
-  public final void setVisible(boolean visible) {
-    m_visible = visible;
-  }
+	/**
+	 * Specifies if this entry should be displayed for the user.
+	 */
+	public final void setVisible(boolean visible) {
+		m_visible = visible;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Misc
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    return "id: " + m_id + ", name: " + m_name;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Misc
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		return "id: " + m_id + ", name: " + m_name;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/model/LafInfo.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/model/LafInfo.java
index 12fb39402..dee925aee 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/model/LafInfo.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/model/LafInfo.java
@@ -28,127 +28,127 @@
  * @coverage swing.laf.models
  */
 public class LafInfo extends LafEntryInfo {
-  private CategoryInfo m_category;
-  private String m_className;
-  private int m_usageCount;
+	private CategoryInfo m_category;
+	private String m_className;
+	private int m_usageCount;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public LafInfo(String id, String name, String className) {
-    super(id, name);
-    m_className = className;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public LafInfo(String id, String name, String className) {
+		super(id, name);
+		m_className = className;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the class name of LookAndFeel.
-   */
-  public final String getClassName() {
-    return m_className;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the class name of LookAndFeel.
+	 */
+	public final String getClassName() {
+		return m_className;
+	}
 
-  /**
-   * Sets the class name of LookAndFeel.
-   */
-  public void setClassName(String className) {
-    m_className = className;
-  }
+	/**
+	 * Sets the class name of LookAndFeel.
+	 */
+	public void setClassName(String className) {
+		m_className = className;
+	}
 
-  /**
-   * @return the parent {@link CategoryInfo}.
-   */
-  public CategoryInfo getCategory() {
-    return m_category;
-  }
+	/**
+	 * @return the parent {@link CategoryInfo}.
+	 */
+	public CategoryInfo getCategory() {
+		return m_category;
+	}
 
-  /**
-   * Sets the new parent {@link CategoryInfo}.
-   */
-  public void setCategory(CategoryInfo category) {
-    m_category = category;
-  }
+	/**
+	 * Sets the new parent {@link CategoryInfo}.
+	 */
+	public void setCategory(CategoryInfo category) {
+		m_category = category;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // MRU support
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Indicates that this LAF was selected, increase number of usage times to place it first in MRU
-   * list.
-   */
-  public void increaseUsageCount() {
-    m_usageCount++;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// MRU support
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Indicates that this LAF was selected, increase number of usage times to place it first in MRU
+	 * list.
+	 */
+	public void increaseUsageCount() {
+		m_usageCount++;
+	}
 
-  /**
-   * @return the number of selection times of this LAF.
-   */
-  public int getUsageCount() {
-    return m_usageCount;
-  }
+	/**
+	 * @return the number of selection times of this LAF.
+	 */
+	public int getUsageCount() {
+		return m_usageCount;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Load the LAF class and creates an instance of LAF class.
-   *
-   * @return the instance of LAF class.
-   */
-  public LookAndFeel getLookAndFeelInstance() throws Exception {
-    Class<?> lafClass = Class.forName(getClassName());
-    return (LookAndFeel) lafClass.newInstance();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Load the LAF class and creates an instance of LAF class.
+	 *
+	 * @return the instance of LAF class.
+	 */
+	public LookAndFeel getLookAndFeelInstance() throws Exception {
+		Class<?> lafClass = Class.forName(getClassName());
+		return (LookAndFeel) lafClass.newInstance();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // apply LAF in main() method
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Places (or modifies existing) the code calling UIManager.setLookAndFeel() method in main
-   * method. Called when appropriate preference enabled.
-   */
-  public void applyInMain(AstEditor editor) throws Exception {
-    MethodDeclaration mainMethod = LafSupport.getMainMethod(editor);
-    if (mainMethod == null) {
-      // no main method
-      return;
-    }
-    // look up for setLookAndFeel method
-    MethodInvocation setLookAndFeelMethod = LafSupport.getSetLookAndFeelMethod(mainMethod);
-    if (setLookAndFeelMethod == null) {
-      // no any setLookAndFeel method invocation, just add the new one
-      StatementTarget target = new StatementTarget(mainMethod, true);
-      editor.addStatement("try {\n\tjavax.swing.UIManager.setLookAndFeel(\""
-          + getClassName()
-          + "\");\n} catch (Throwable e) {\n\te.printStackTrace();\n}", target);
-    } else {
-      // modify existing
-      String methodSignature = AstNodeUtils.getMethodSignature(setLookAndFeelMethod);
-      if (LafSupport.SET_LOOK_AND_FEEL_LAF.equals(methodSignature)) {
-        // UIManager.setLookAndFeel(javax.swing.LookAndFeel)
-        editor.replaceExpression(DomGenerics.arguments(setLookAndFeelMethod).get(0), "new "
-            + getClassName()
-            + "()");
-      } else if (LafSupport.SET_LOOK_AND_FEEL_STRING.equals(methodSignature)) {
-        // UIManager.setLookAndFeel(java.lang.String)
-        editor.replaceExpression(DomGenerics.arguments(setLookAndFeelMethod).get(0), "\""
-            + getClassName()
-            + "\"");
-      }
-    }
-    // commit changes
-    editor.commitChanges();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// apply LAF in main() method
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Places (or modifies existing) the code calling UIManager.setLookAndFeel() method in main
+	 * method. Called when appropriate preference enabled.
+	 */
+	public void applyInMain(AstEditor editor) throws Exception {
+		MethodDeclaration mainMethod = LafSupport.getMainMethod(editor);
+		if (mainMethod == null) {
+			// no main method
+			return;
+		}
+		// look up for setLookAndFeel method
+		MethodInvocation setLookAndFeelMethod = LafSupport.getSetLookAndFeelMethod(mainMethod);
+		if (setLookAndFeelMethod == null) {
+			// no any setLookAndFeel method invocation, just add the new one
+			StatementTarget target = new StatementTarget(mainMethod, true);
+			editor.addStatement("try {\n\tjavax.swing.UIManager.setLookAndFeel(\""
+					+ getClassName()
+					+ "\");\n} catch (Throwable e) {\n\te.printStackTrace();\n}", target);
+		} else {
+			// modify existing
+			String methodSignature = AstNodeUtils.getMethodSignature(setLookAndFeelMethod);
+			if (LafSupport.SET_LOOK_AND_FEEL_LAF.equals(methodSignature)) {
+				// UIManager.setLookAndFeel(javax.swing.LookAndFeel)
+				editor.replaceExpression(DomGenerics.arguments(setLookAndFeelMethod).get(0), "new "
+						+ getClassName()
+						+ "()");
+			} else if (LafSupport.SET_LOOK_AND_FEEL_STRING.equals(methodSignature)) {
+				// UIManager.setLookAndFeel(java.lang.String)
+				editor.replaceExpression(DomGenerics.arguments(setLookAndFeelMethod).get(0), "\""
+						+ getClassName()
+						+ "\"");
+			}
+		}
+		// commit changes
+		editor.commitChanges();
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/model/PluginLafInfo.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/model/PluginLafInfo.java
index 6c8758418..13bd21fc6 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/model/PluginLafInfo.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/model/PluginLafInfo.java
@@ -33,63 +33,63 @@
  * @coverage swing.laf.model
  */
 public class PluginLafInfo extends AbstractCustomLafInfo {
-  private ILookAndFeelInitializer m_initializer = ILookAndFeelInitializer.DEFAULT;
-  private final Bundle m_extensionBundle;
+	private ILookAndFeelInitializer m_initializer = ILookAndFeelInitializer.DEFAULT;
+	private final Bundle m_extensionBundle;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public PluginLafInfo(final IConfigurationElement element) {
-    super(ExternalFactoriesHelper.getRequiredAttribute(element, "id"),
-        ExternalFactoriesHelper.getRequiredAttribute(element, "name"),
-        ExternalFactoriesHelper.getRequiredAttribute(element, "class"),
-        resolveJarFile(
-            ExternalFactoriesHelper.getRequiredAttribute(element, "jarFile"),
-            ExternalFactoriesHelper.getExtensionBundle(element)));
-    m_extensionBundle = ExternalFactoriesHelper.getExtensionBundle(element);
-    String initializerValue = element.getAttribute("initializer");
-    if (initializerValue != null) {
-      ExecutionUtils.runLog(new RunnableEx() {
-        public void run() throws Exception {
-          m_initializer =
-              (ILookAndFeelInitializer) element.createExecutableExtension("initializer");
-        }
-      });
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public PluginLafInfo(final IConfigurationElement element) {
+		super(ExternalFactoriesHelper.getRequiredAttribute(element, "id"),
+				ExternalFactoriesHelper.getRequiredAttribute(element, "name"),
+				ExternalFactoriesHelper.getRequiredAttribute(element, "class"),
+				resolveJarFile(
+						ExternalFactoriesHelper.getRequiredAttribute(element, "jarFile"),
+						ExternalFactoriesHelper.getExtensionBundle(element)));
+		m_extensionBundle = ExternalFactoriesHelper.getExtensionBundle(element);
+		String initializerValue = element.getAttribute("initializer");
+		if (initializerValue != null) {
+			ExecutionUtils.runLog(new RunnableEx() {
+				public void run() throws Exception {
+					m_initializer =
+							(ILookAndFeelInitializer) element.createExecutableExtension("initializer");
+				}
+			});
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Reference<LookAndFeel> m_instanceReference;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Reference<LookAndFeel> m_instanceReference;
 
-  @Override
-  public LookAndFeel getLookAndFeelInstance() throws Exception {
-    if (m_instanceReference == null || m_instanceReference.get() == null) {
-      m_initializer.initialize();
-      Class<?> lafClass = m_extensionBundle.loadClass(getClassName());
-      m_instanceReference = new SoftReference<LookAndFeel>((LookAndFeel) lafClass.newInstance());
-    }
-    return m_instanceReference.get();
-  }
+	@Override
+	public LookAndFeel getLookAndFeelInstance() throws Exception {
+		if (m_instanceReference == null || m_instanceReference.get() == null) {
+			m_initializer.initialize();
+			Class<?> lafClass = m_extensionBundle.loadClass(getClassName());
+			m_instanceReference = new SoftReference<LookAndFeel>((LookAndFeel) lafClass.newInstance());
+		}
+		return m_instanceReference.get();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the full path to JAR file.
-   */
-  private static String resolveJarFile(String jarFile, Bundle extensionBundle) {
-    try {
-      return FileLocator.toFileURL(extensionBundle.getEntry(jarFile)).getPath();
-    } catch (Throwable e) {
-      throw ReflectionUtils.propagate(e);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the full path to JAR file.
+	 */
+	private static String resolveJarFile(String jarFile, Bundle extensionBundle) {
+		try {
+			return FileLocator.toFileURL(extensionBundle.getEntry(jarFile)).getPath();
+		} catch (Throwable e) {
+			throw ReflectionUtils.propagate(e);
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/model/SeparatorLafInfo.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/model/SeparatorLafInfo.java
index 37711ba61..ae16331ec 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/model/SeparatorLafInfo.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/model/SeparatorLafInfo.java
@@ -21,26 +21,26 @@
  * @coverage swing.laf.model
  */
 public class SeparatorLafInfo extends LafInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SeparatorLafInfo(String name) {
-    super(name, name, null);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SeparatorLafInfo(String name) {
+		super(name, name, null);
+	}
 
-  public SeparatorLafInfo() {
-    this("");
-  }
+	public SeparatorLafInfo() {
+		this("");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public LookAndFeel getLookAndFeelInstance() throws Exception {
-    throw new RuntimeException(ModelMessages.SeparatorLafInfo_canNotInstantiate);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public LookAndFeel getLookAndFeelInstance() throws Exception {
+		throw new RuntimeException(ModelMessages.SeparatorLafInfo_canNotInstantiate);
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/model/SystemLafInfo.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/model/SystemLafInfo.java
index 3446501fe..f57cccc31 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/model/SystemLafInfo.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/model/SystemLafInfo.java
@@ -28,54 +28,54 @@
  * @coverage swing.laf.model
  */
 public class SystemLafInfo extends LafInfo {
-  public static final String SYSTEM_LAF_NAME = "<system>";
-  public static final LafInfo INSTANCE = new SystemLafInfo();
+	public static final String SYSTEM_LAF_NAME = "<system>";
+	public static final LafInfo INSTANCE = new SystemLafInfo();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Private constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private SystemLafInfo() {
-    super("__wbp_" + SYSTEM_LAF_NAME, SYSTEM_LAF_NAME, UIManager.getSystemLookAndFeelClassName());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Private constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private SystemLafInfo() {
+		super("__wbp_" + SYSTEM_LAF_NAME, SYSTEM_LAF_NAME, UIManager.getSystemLookAndFeelClassName());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // apply LAF in main() method
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void applyInMain(AstEditor editor) throws Exception {
-    MethodDeclaration mainMethod = LafSupport.getMainMethod(editor);
-    if (mainMethod == null) {
-      // no main method
-      return;
-    }
-    // look up for setLookAndFeel method
-    MethodInvocation setLookAndFeelMethod = LafSupport.getSetLookAndFeelMethod(mainMethod);
-    if (setLookAndFeelMethod == null) {
-      // no any setLookAndFeel method invocation, just add the new one
-      StatementTarget target = new StatementTarget(mainMethod, true);
-      editor.addStatement("try {\n\tjavax.swing.UIManager.setLookAndFeel("
-          + "javax.swing.UIManager.getSystemLookAndFeelClassName());\n"
-          + "} catch (Throwable e) {\n\te.printStackTrace();\n}", target);
-    } else {
-      // modify any existing to set system LAF class name
-      editor.replaceExpression(
-          DomGenerics.arguments(setLookAndFeelMethod).get(0),
-          "javax.swing.UIManager.getSystemLookAndFeelClassName()");
-    }
-    // commit changes
-    editor.commitChanges();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// apply LAF in main() method
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void applyInMain(AstEditor editor) throws Exception {
+		MethodDeclaration mainMethod = LafSupport.getMainMethod(editor);
+		if (mainMethod == null) {
+			// no main method
+			return;
+		}
+		// look up for setLookAndFeel method
+		MethodInvocation setLookAndFeelMethod = LafSupport.getSetLookAndFeelMethod(mainMethod);
+		if (setLookAndFeelMethod == null) {
+			// no any setLookAndFeel method invocation, just add the new one
+			StatementTarget target = new StatementTarget(mainMethod, true);
+			editor.addStatement("try {\n\tjavax.swing.UIManager.setLookAndFeel("
+					+ "javax.swing.UIManager.getSystemLookAndFeelClassName());\n"
+					+ "} catch (Throwable e) {\n\te.printStackTrace();\n}", target);
+		} else {
+			// modify any existing to set system LAF class name
+			editor.replaceExpression(
+					DomGenerics.arguments(setLookAndFeelMethod).get(0),
+					"javax.swing.UIManager.getSystemLookAndFeelClassName()");
+		}
+		// commit changes
+		editor.commitChanges();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // No access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void setClassName(String className) {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// No access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void setClassName(String className) {
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/model/UndefinedLafInfo.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/model/UndefinedLafInfo.java
index 39ed86ff7..977b8dc15 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/model/UndefinedLafInfo.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/model/UndefinedLafInfo.java
@@ -34,96 +34,96 @@
  * @coverage swing.laf.model
  */
 public class UndefinedLafInfo extends LafInfo {
-  public static final String UNDEFINED_LAF_NAME = "<undefined>";
-  public static final LafInfo INSTANCE = new UndefinedLafInfo();
-  private static Properties m_swingProperties;
+	public static final String UNDEFINED_LAF_NAME = "<undefined>";
+	public static final LafInfo INSTANCE = new UndefinedLafInfo();
+	private static Properties m_swingProperties;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private UndefinedLafInfo() {
-    super("__wbp_" + UNDEFINED_LAF_NAME, UNDEFINED_LAF_NAME, getClassName0());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private UndefinedLafInfo() {
+		super("__wbp_" + UNDEFINED_LAF_NAME, UNDEFINED_LAF_NAME, getClassName0());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // apply LAF in main() method
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void applyInMain(AstEditor editor) throws Exception {
-    // remove any setLookAndFeel method invocation, remove try..catch clauses if they are empty
-    MethodDeclaration mainMethod = LafSupport.getMainMethod(editor);
-    if (mainMethod == null) {
-      // no main method
-      return;
-    }
-    // look up for setLookAndFeel method
-    MethodInvocation setLookAndFeelMethod = LafSupport.getSetLookAndFeelMethod(mainMethod);
-    if (setLookAndFeelMethod != null) {
-      // remove it
-      Statement enclosingMethodStatement = AstNodeUtils.getEnclosingStatement(setLookAndFeelMethod);
-      // look for try..catch
-      TryStatement tryStatement =
-          AstNodeUtils.getEnclosingNode(enclosingMethodStatement, TryStatement.class);
-      editor.removeStatement(enclosingMethodStatement);
-      // remove try..catch if try statement has no statements now
-      if (tryStatement != null && tryStatement.getBody().statements().isEmpty()) {
-        editor.removeEnclosingStatement(tryStatement);
-      }
-      // done
-      editor.commitChanges();
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// apply LAF in main() method
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void applyInMain(AstEditor editor) throws Exception {
+		// remove any setLookAndFeel method invocation, remove try..catch clauses if they are empty
+		MethodDeclaration mainMethod = LafSupport.getMainMethod(editor);
+		if (mainMethod == null) {
+			// no main method
+			return;
+		}
+		// look up for setLookAndFeel method
+		MethodInvocation setLookAndFeelMethod = LafSupport.getSetLookAndFeelMethod(mainMethod);
+		if (setLookAndFeelMethod != null) {
+			// remove it
+			Statement enclosingMethodStatement = AstNodeUtils.getEnclosingStatement(setLookAndFeelMethod);
+			// look for try..catch
+			TryStatement tryStatement =
+					AstNodeUtils.getEnclosingNode(enclosingMethodStatement, TryStatement.class);
+			editor.removeStatement(enclosingMethodStatement);
+			// remove try..catch if try statement has no statements now
+			if (tryStatement != null && tryStatement.getBody().statements().isEmpty()) {
+				editor.removeEnclosingStatement(tryStatement);
+			}
+			// done
+			editor.commitChanges();
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // LAFInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Try to find which LAF used as "undefined", i.e. when no LAF explicitly specified in main.
-   */
-  private static synchronized String getClassName0() {
-    // 1. Try to get system LAF class name from "swing.systemlaf" property name
-    // in $(java.home)/lib/swing.properties file.
-    if (m_swingProperties == null) {
-      String javaHome = System.getProperty("java.home");
-      if (javaHome != null) {
-        String propertiesFileName =
-            javaHome + File.separator + "lib" + File.separator + "swing.properties";
-        m_swingProperties = new Properties();
-        File file = new File(propertiesFileName);
-        if (file.exists()) {
-          try {
-            FileInputStream inputStream = new FileInputStream(file);
-            try {
-              m_swingProperties.load(inputStream);
-            } finally {
-              IOUtils.closeQuietly(inputStream);
-            }
-          } catch (Throwable e) {
-            // Just ignore any exceptions.
-          }
-        }
-      }
-    }
-    // 2. If no LAF defined in "swing.systemlaf" use cross-platform LAF like UIManager does.
-    String systemLAFClassName = m_swingProperties.getProperty("swing.systemlaf");
-    if (systemLAFClassName == null) {
-      systemLAFClassName = UIManager.getCrossPlatformLookAndFeelClassName();
-    }
-    return systemLAFClassName;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// LAFInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Try to find which LAF used as "undefined", i.e. when no LAF explicitly specified in main.
+	 */
+	private static synchronized String getClassName0() {
+		// 1. Try to get system LAF class name from "swing.systemlaf" property name
+		// in $(java.home)/lib/swing.properties file.
+		if (m_swingProperties == null) {
+			String javaHome = System.getProperty("java.home");
+			if (javaHome != null) {
+				String propertiesFileName =
+						javaHome + File.separator + "lib" + File.separator + "swing.properties";
+				m_swingProperties = new Properties();
+				File file = new File(propertiesFileName);
+				if (file.exists()) {
+					try {
+						FileInputStream inputStream = new FileInputStream(file);
+						try {
+							m_swingProperties.load(inputStream);
+						} finally {
+							IOUtils.closeQuietly(inputStream);
+						}
+					} catch (Throwable e) {
+						// Just ignore any exceptions.
+					}
+				}
+			}
+		}
+		// 2. If no LAF defined in "swing.systemlaf" use cross-platform LAF like UIManager does.
+		String systemLAFClassName = m_swingProperties.getProperty("swing.systemlaf");
+		if (systemLAFClassName == null) {
+			systemLAFClassName = UIManager.getCrossPlatformLookAndFeelClassName();
+		}
+		return systemLAFClassName;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // No access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void setClassName(String className) {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// No access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void setClassName(String className) {
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/model/UserDefinedLafInfo.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/model/UserDefinedLafInfo.java
index 02251f5ab..3def8113e 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/model/UserDefinedLafInfo.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/model/UserDefinedLafInfo.java
@@ -23,44 +23,44 @@
  * @coverage swing.laf.model
  */
 public class UserDefinedLafInfo extends AbstractCustomLafInfo {
-  private Class<?> m_lafClass;
+	private Class<?> m_lafClass;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public UserDefinedLafInfo(String name, String className, String jarFile) {
-    this("laf_" + System.currentTimeMillis(), name, className, jarFile);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public UserDefinedLafInfo(String name, String className, String jarFile) {
+		this("laf_" + System.currentTimeMillis(), name, className, jarFile);
+	}
 
-  public UserDefinedLafInfo(String id, String name, String className, String jarFile) {
-    super(id, name, className, jarFile);
-  }
+	public UserDefinedLafInfo(String id, String name, String className, String jarFile) {
+		super(id, name, className, jarFile);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public LookAndFeel getLookAndFeelInstance() throws Exception {
-    if (m_lafClass == null) {
-      ClassLoader classLoader = getClassLoader();
-      m_lafClass = classLoader.loadClass(getClassName());
-    }
-    return (LookAndFeel) m_lafClass.newInstance();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public LookAndFeel getLookAndFeelInstance() throws Exception {
+		if (m_lafClass == null) {
+			ClassLoader classLoader = getClassLoader();
+			m_lafClass = classLoader.loadClass(getClassName());
+		}
+		return (LookAndFeel) m_lafClass.newInstance();
+	}
 
-  private ClassLoader getClassLoader() throws Exception {
-    File jarFile = new File(getJarFile());
-    URL jarURL = jarFile.toURI().toURL();
-    // special hack for Substance
-    if (jarFile.getName().equals("substance.jar")) {
-      URL secondaryJarURL = new File(jarFile.getParentFile(), "trident.jar").toURI().toURL();
-      return new URLClassLoader(new URL[]{jarURL, secondaryJarURL});
-    }
-    // single jar
-    return new URLClassLoader(new URL[]{jarURL});
-  }
+	private ClassLoader getClassLoader() throws Exception {
+		File jarFile = new File(getJarFile());
+		URL jarURL = jarFile.toURI().toURL();
+		// special hack for Substance
+		if (jarFile.getName().equals("substance.jar")) {
+			URL secondaryJarURL = new File(jarFile.getParentFile(), "trident.jar").toURI().toURL();
+			return new URLClassLoader(new URL[]{jarURL, secondaryJarURL});
+		}
+		// single jar
+		return new URLClassLoader(new URL[]{jarURL});
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/ui/AbstractCustomLookAndFeelDialog.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/ui/AbstractCustomLookAndFeelDialog.java
index 4d23ce05f..743e7c1a5 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/ui/AbstractCustomLookAndFeelDialog.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/ui/AbstractCustomLookAndFeelDialog.java
@@ -68,282 +68,282 @@
  * @coverage swing.laf.ui
  */
 public abstract class AbstractCustomLookAndFeelDialog extends AbstractValidationTitleAreaDialog {
-  protected final List<Command> m_commands = Lists.newArrayList();
-  private final CategoryInfo m_targetCategory;
-  // ui
-  protected ComboViewer m_categoriesCombo;
-  protected StringButtonDialogField m_jarField;
-  protected ProgressMonitorPart m_progressMonitorPart;
-  // choose jar workspace dialog settings
-  private Object m_initSelection;
-  private Object[] m_initExpanded;
+	protected final List<Command> m_commands = Lists.newArrayList();
+	private final CategoryInfo m_targetCategory;
+	// ui
+	protected ComboViewer m_categoriesCombo;
+	protected StringButtonDialogField m_jarField;
+	protected ProgressMonitorPart m_progressMonitorPart;
+	// choose jar workspace dialog settings
+	private Object m_initSelection;
+	private Object[] m_initExpanded;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractCustomLookAndFeelDialog(Shell parentShell,
-      CategoryInfo targetCategory,
-      String shellText,
-      String titleText,
-      Image titleImage,
-      String titleMessage) {
-    super(parentShell, Activator.getDefault(), shellText, titleText, titleImage, titleMessage);
-    setShellStyle(SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
-    m_targetCategory = targetCategory;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractCustomLookAndFeelDialog(Shell parentShell,
+			CategoryInfo targetCategory,
+			String shellText,
+			String titleText,
+			Image titleImage,
+			String titleMessage) {
+		super(parentShell, Activator.getDefault(), shellText, titleText, titleImage, titleMessage);
+		setShellStyle(SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
+		m_targetCategory = targetCategory;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Contents
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Creates the UI for managing LAF categories.
-   */
-  protected void createCategoriesUI(final Composite parent) {
-    {
-      Label label = new Label(parent, SWT.NONE);
-      label.setText(LafMessages.AbstractCustomLookAndFeelDialog_category);
-    }
-    {
-      m_categoriesCombo = new ComboViewer(parent, SWT.READ_ONLY);
-      GridDataFactory.create(m_categoriesCombo.getControl()).grabH().fillH();
-      m_categoriesCombo.setContentProvider(new IStructuredContentProvider() {
-        public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
-        }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Contents
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Creates the UI for managing LAF categories.
+	 */
+	protected void createCategoriesUI(final Composite parent) {
+		{
+			Label label = new Label(parent, SWT.NONE);
+			label.setText(LafMessages.AbstractCustomLookAndFeelDialog_category);
+		}
+		{
+			m_categoriesCombo = new ComboViewer(parent, SWT.READ_ONLY);
+			GridDataFactory.create(m_categoriesCombo.getControl()).grabH().fillH();
+			m_categoriesCombo.setContentProvider(new IStructuredContentProvider() {
+				public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+				}
 
-        public void dispose() {
-        }
+				public void dispose() {
+				}
 
-        public Object[] getElements(Object inputElement) {
-          return LafSupport.getLAFCategoriesList().toArray();
-        }
-      });
-      m_categoriesCombo.setLabelProvider(new LabelProvider() {
-        @Override
-        public String getText(Object element) {
-          return ((CategoryInfo) element).getName();
-        }
-      });
-      m_categoriesCombo.setInput(m_categoriesCombo);
-      m_categoriesCombo.setSelection(new StructuredSelection(m_targetCategory));
-    }
-    {
-      Button newCategoryButton = new Button(parent, SWT.NONE);
-      GridDataFactory.create(newCategoryButton).alignHF();
-      newCategoryButton.setText(LafMessages.AbstractCustomLookAndFeelDialog_new);
-      newCategoryButton.addSelectionListener(new SelectionAdapter() {
-        @Override
-        public void widgetSelected(SelectionEvent e) {
-          InputDialog inputDialog =
-              new InputDialog(getShell(),
-                  LafMessages.AbstractCustomLookAndFeelDialog_newCategory,
-                  LafMessages.AbstractCustomLookAndFeelDialog_newCategoryEnterName,
-                  "",
-                  null);
-          if (inputDialog.open() == Window.OK) {
-            String newCategoryID = "category_" + System.currentTimeMillis();
-            AddCategoryCommand command =
-                new AddCategoryCommand(newCategoryID, inputDialog.getValue());
-            command.execute();
-            m_categoriesCombo.refresh();
-            m_categoriesCombo.setSelection(new StructuredSelection(LafSupport.getCategory(newCategoryID)));
-            // add command to be stored
-            m_commands.add(command);
-          }
-        }
-      });
-    }
-  }
+				public Object[] getElements(Object inputElement) {
+					return LafSupport.getLAFCategoriesList().toArray();
+				}
+			});
+			m_categoriesCombo.setLabelProvider(new LabelProvider() {
+				@Override
+				public String getText(Object element) {
+					return ((CategoryInfo) element).getName();
+				}
+			});
+			m_categoriesCombo.setInput(m_categoriesCombo);
+			m_categoriesCombo.setSelection(new StructuredSelection(m_targetCategory));
+		}
+		{
+			Button newCategoryButton = new Button(parent, SWT.NONE);
+			GridDataFactory.create(newCategoryButton).alignHF();
+			newCategoryButton.setText(LafMessages.AbstractCustomLookAndFeelDialog_new);
+			newCategoryButton.addSelectionListener(new SelectionAdapter() {
+				@Override
+				public void widgetSelected(SelectionEvent e) {
+					InputDialog inputDialog =
+							new InputDialog(getShell(),
+									LafMessages.AbstractCustomLookAndFeelDialog_newCategory,
+									LafMessages.AbstractCustomLookAndFeelDialog_newCategoryEnterName,
+									"",
+									null);
+					if (inputDialog.open() == Window.OK) {
+						String newCategoryID = "category_" + System.currentTimeMillis();
+						AddCategoryCommand command =
+								new AddCategoryCommand(newCategoryID, inputDialog.getValue());
+						command.execute();
+						m_categoriesCombo.refresh();
+						m_categoriesCombo.setSelection(new StructuredSelection(LafSupport.getCategory(newCategoryID)));
+						// add command to be stored
+						m_commands.add(command);
+					}
+				}
+			});
+		}
+	}
 
-  /**
-   * Creates the {@link StringButtonDialogField} for selecting JAR file.
-   */
-  protected void createJarUI(final Composite parent) {
-    JarFileSelectionButtonAdapter adapter = new JarFileSelectionButtonAdapter(parent);
-    m_jarField = new StringButtonDialogField(adapter);
-    adapter.setField(m_jarField);
-    m_jarField.setButtonLabel(LafMessages.AbstractCustomLookAndFeelDialog_browse);
-    m_jarField.setLabelText(LafMessages.AbstractCustomLookAndFeelDialog_jarPath);
-    DialogFieldUtils.fillControls(parent, m_jarField, 3, 60);
-    m_jarField.getTextControl(parent).setEditable(false);
-  }
+	/**
+	 * Creates the {@link StringButtonDialogField} for selecting JAR file.
+	 */
+	protected void createJarUI(final Composite parent) {
+		JarFileSelectionButtonAdapter adapter = new JarFileSelectionButtonAdapter(parent);
+		m_jarField = new StringButtonDialogField(adapter);
+		adapter.setField(m_jarField);
+		m_jarField.setButtonLabel(LafMessages.AbstractCustomLookAndFeelDialog_browse);
+		m_jarField.setLabelText(LafMessages.AbstractCustomLookAndFeelDialog_jarPath);
+		DialogFieldUtils.fillControls(parent, m_jarField, 3, 60);
+		m_jarField.getTextControl(parent).setEditable(false);
+	}
 
-  /**
-   * Creates the {@link ProgressMonitorPart}.
-   */
-  protected void createProgressUI(Composite container) {
-    final GridLayout layout = new GridLayout();
-    layout.marginHeight = 0;
-    m_progressMonitorPart = new ProgressMonitorPart(container, layout);
-    GridDataFactory.modify(m_progressMonitorPart).alignHF().spanH(3);
-  }
+	/**
+	 * Creates the {@link ProgressMonitorPart}.
+	 */
+	protected void createProgressUI(Composite container) {
+		final GridLayout layout = new GridLayout();
+		layout.marginHeight = 0;
+		m_progressMonitorPart = new ProgressMonitorPart(container, layout);
+		GridDataFactory.modify(m_progressMonitorPart).alignHF().spanH(3);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Handlers
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Opens JAR selection dialog browsing workspace JARs, if the user selection is valid, updates JAR
-   * selection label and schedules to parse selected JAR.
-   */
-  private void handleBrowseWorkspace() {
-    JarSelectionDialog dialog = new JarSelectionDialog(getShell());
-    if (m_initSelection != null) {
-      dialog.setInitialSelection(m_initSelection);
-    }
-    dialog.setInitialExpanded(m_initExpanded);
-    dialog.setTitle(LafMessages.AbstractCustomLookAndFeelDialog_jarTitle);
-    dialog.setMessage(LafMessages.AbstractCustomLookAndFeelDialog_jarMessage);
-    dialog.setInput(ResourcesPlugin.getWorkspace());
-    int openResult = dialog.open();
-    if (openResult == Window.OK) {
-      IFile path = dialog.getSelectedJarFile();
-      m_initSelection = dialog.getSelection();
-      m_initExpanded = dialog.getExpandedElements();
-      if (path != null) {
-        String jarFileName = path.getLocation().toOSString();
-        handleJarSelected(jarFileName);
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Handlers
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Opens JAR selection dialog browsing workspace JARs, if the user selection is valid, updates JAR
+	 * selection label and schedules to parse selected JAR.
+	 */
+	private void handleBrowseWorkspace() {
+		JarSelectionDialog dialog = new JarSelectionDialog(getShell());
+		if (m_initSelection != null) {
+			dialog.setInitialSelection(m_initSelection);
+		}
+		dialog.setInitialExpanded(m_initExpanded);
+		dialog.setTitle(LafMessages.AbstractCustomLookAndFeelDialog_jarTitle);
+		dialog.setMessage(LafMessages.AbstractCustomLookAndFeelDialog_jarMessage);
+		dialog.setInput(ResourcesPlugin.getWorkspace());
+		int openResult = dialog.open();
+		if (openResult == Window.OK) {
+			IFile path = dialog.getSelectedJarFile();
+			m_initSelection = dialog.getSelection();
+			m_initExpanded = dialog.getExpandedElements();
+			if (path != null) {
+				String jarFileName = path.getLocation().toOSString();
+				handleJarSelected(jarFileName);
+			}
+		}
+	}
 
-  /**
-   * Opens JAR selection dialog browsing JARs in file system, if the user selection is valid,
-   * updates JAR selection label and schedules to parse selected JAR.
-   */
-  private void handleBrowseFileSystem() {
-    FileDialog dialog = new FileDialog(getShell());
-    dialog.setFilterExtensions(new String[]{"*.jar"});
-    String jarFileName = dialog.open();
-    if (jarFileName != null) {
-      handleJarSelected(jarFileName);
-    }
-  }
+	/**
+	 * Opens JAR selection dialog browsing JARs in file system, if the user selection is valid,
+	 * updates JAR selection label and schedules to parse selected JAR.
+	 */
+	private void handleBrowseFileSystem() {
+		FileDialog dialog = new FileDialog(getShell());
+		dialog.setFilterExtensions(new String[]{"*.jar"});
+		String jarFileName = dialog.open();
+		if (jarFileName != null) {
+			handleJarSelected(jarFileName);
+		}
+	}
 
-  /**
-   * Called when the user selects jar file either using workspace or file-system.
-   *
-   * @param jarFileName
-   *          the path to selected jar file.
-   */
-  protected abstract void handleJarSelected(String jarFileName);
+	/**
+	 * Called when the user selects jar file either using workspace or file-system.
+	 *
+	 * @param jarFileName
+	 *          the path to selected jar file.
+	 */
+	protected abstract void handleJarSelected(String jarFileName);
 
-  /**
-   * Called when the error occurred during scanning the jar file.
-   */
-  protected abstract void handleJarScanningError();
+	/**
+	 * Called when the error occurred during scanning the jar file.
+	 */
+	protected abstract void handleJarScanningError();
 
-  /**
-   * Performs scanning of JAR file using progress monitor and performs the error handling.
-   *
-   * @param monitor
-   *          the instance of {@link IProgressMonitor}, cannot be <code>null</code>.
-   * @param jarFileName
-   *          the full path of JAR file.
-   * @return the array of {@link UserDefinedLafInfo} as array of objects.
-   */
-  protected Object[] scanJarFile(IProgressMonitor monitor, String jarFileName) {
-    monitor.beginTask(
-        LafMessages.AbstractCustomLookAndFeelDialog_jarScanning,
-        IProgressMonitor.UNKNOWN);
-    try {
-      // proceed with scanning
-      try {
-        LafInfo[] lafsFound = LafUtils.scanJarForLookAndFeels(jarFileName, monitor);
-        if (ArrayUtils.isEmpty(lafsFound)) {
-          handleJarScanningError();
-          return new String[]{LafMessages.AbstractCustomLookAndFeelDialog_jarEmpty};
-        }
-        return lafsFound;
-      } catch (Throwable e) {
-        DesignerPlugin.log(e);
-        handleJarScanningError();
-        return new String[]{MessageFormat.format(
-            LafMessages.AbstractCustomLookAndFeelDialog_jarError,
-            jarFileName)};
-      }
-    } finally {
-      monitor.done();
-    }
-  }
+	/**
+	 * Performs scanning of JAR file using progress monitor and performs the error handling.
+	 *
+	 * @param monitor
+	 *          the instance of {@link IProgressMonitor}, cannot be <code>null</code>.
+	 * @param jarFileName
+	 *          the full path of JAR file.
+	 * @return the array of {@link UserDefinedLafInfo} as array of objects.
+	 */
+	protected Object[] scanJarFile(IProgressMonitor monitor, String jarFileName) {
+		monitor.beginTask(
+				LafMessages.AbstractCustomLookAndFeelDialog_jarScanning,
+				IProgressMonitor.UNKNOWN);
+		try {
+			// proceed with scanning
+			try {
+				LafInfo[] lafsFound = LafUtils.scanJarForLookAndFeels(jarFileName, monitor);
+				if (ArrayUtils.isEmpty(lafsFound)) {
+					handleJarScanningError();
+					return new String[]{LafMessages.AbstractCustomLookAndFeelDialog_jarEmpty};
+				}
+				return lafsFound;
+			} catch (Throwable e) {
+				DesignerPlugin.log(e);
+				handleJarScanningError();
+				return new String[]{MessageFormat.format(
+						LafMessages.AbstractCustomLookAndFeelDialog_jarError,
+						jarFileName)};
+			}
+		} finally {
+			monitor.done();
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Inner class
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final class JarFileSelectionButtonAdapter implements IStringButtonAdapter {
-    private StringButtonDialogField m_jarField;
-    private final Composite m_parent;
-    private Menu m_menu;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Inner class
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final class JarFileSelectionButtonAdapter implements IStringButtonAdapter {
+		private StringButtonDialogField m_jarField;
+		private final Composite m_parent;
+		private Menu m_menu;
 
-    private JarFileSelectionButtonAdapter(Composite parent) {
-      m_parent = parent;
-    }
+		private JarFileSelectionButtonAdapter(Composite parent) {
+			m_parent = parent;
+		}
 
-    /**
-     * Creates the popup menu showing by pressing "Browse" button
-     */
-    private Menu getPopupMenu() {
-      if (m_menu == null) {
-        m_menu = new Menu(m_jarField.getChangeControl(m_parent));
-        {
-          MenuItem item = new MenuItem(m_menu, SWT.NONE);
-          item.setText(LafMessages.AbstractCustomLookAndFeelDialog_searchWorkspace);
-          item.addSelectionListener(new SelectionAdapter() {
-            @Override
-            public void widgetSelected(SelectionEvent e) {
-              // open jar selection dialog selecting from workspace
-              handleBrowseWorkspace();
-            }
-          });
-        }
-        {
-          MenuItem item = new MenuItem(m_menu, SWT.NONE);
-          item.setText(LafMessages.AbstractCustomLookAndFeelDialog_searchFileSystem);
-          item.addSelectionListener(new SelectionAdapter() {
-            @Override
-            public void widgetSelected(SelectionEvent e) {
-              // open file system jar selection dialog
-              handleBrowseFileSystem();
-            }
-          });
-        }
-      }
-      return m_menu;
-    }
+		/**
+		 * Creates the popup menu showing by pressing "Browse" button
+		 */
+		private Menu getPopupMenu() {
+			if (m_menu == null) {
+				m_menu = new Menu(m_jarField.getChangeControl(m_parent));
+				{
+					MenuItem item = new MenuItem(m_menu, SWT.NONE);
+					item.setText(LafMessages.AbstractCustomLookAndFeelDialog_searchWorkspace);
+					item.addSelectionListener(new SelectionAdapter() {
+						@Override
+						public void widgetSelected(SelectionEvent e) {
+							// open jar selection dialog selecting from workspace
+							handleBrowseWorkspace();
+						}
+					});
+				}
+				{
+					MenuItem item = new MenuItem(m_menu, SWT.NONE);
+					item.setText(LafMessages.AbstractCustomLookAndFeelDialog_searchFileSystem);
+					item.addSelectionListener(new SelectionAdapter() {
+						@Override
+						public void widgetSelected(SelectionEvent e) {
+							// open file system jar selection dialog
+							handleBrowseFileSystem();
+						}
+					});
+				}
+			}
+			return m_menu;
+		}
 
-    public void changeControlPressed(DialogField field) {
-      getPopupMenu();
-      // prepare location
-      Point menuLocation;
-      {
-        Rectangle bounds = m_jarField.getChangeControl(m_parent).getBounds();
-        menuLocation = m_parent.toDisplay(bounds.x, bounds.y + bounds.height);
-      }
-      // show menu
-      m_menu.setLocation(menuLocation);
-      m_menu.setVisible(true);
-    }
+		public void changeControlPressed(DialogField field) {
+			getPopupMenu();
+			// prepare location
+			Point menuLocation;
+			{
+				Rectangle bounds = m_jarField.getChangeControl(m_parent).getBounds();
+				menuLocation = m_parent.toDisplay(bounds.x, bounds.y + bounds.height);
+			}
+			// show menu
+			m_menu.setLocation(menuLocation);
+			m_menu.setVisible(true);
+		}
 
-    /**
-     * Sets the {@link StringButtonDialogField} for this adapter.
-     */
-    public void setField(StringButtonDialogField jarField) {
-      m_jarField = jarField;
-    }
-  }
+		/**
+		 * Sets the {@link StringButtonDialogField} for this adapter.
+		 */
+		public void setField(StringButtonDialogField jarField) {
+			m_jarField = jarField;
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Command
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public List<Command> getCommands() {
-    return m_commands;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Command
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public List<Command> getCommands() {
+		return m_commands;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/ui/AddCustomLookAndFeelDialog.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/ui/AddCustomLookAndFeelDialog.java
index 2687bc673..f1f2fe83b 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/ui/AddCustomLookAndFeelDialog.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/ui/AddCustomLookAndFeelDialog.java
@@ -39,173 +39,173 @@
  * @coverage swing.laf.ui
  */
 public final class AddCustomLookAndFeelDialog extends AbstractCustomLookAndFeelDialog {
-  // fields
-  CheckboxTableViewer m_classTable;
+	// fields
+	CheckboxTableViewer m_classTable;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AddCustomLookAndFeelDialog(Shell parentShell, CategoryInfo targetCategory) {
-    super(parentShell,
-        targetCategory,
-        LafMessages.AddCustomLookAndFeelDialog_add,
-        LafMessages.AddCustomLookAndFeelDialog_add,
-        null,
-        LafMessages.AddCustomLookAndFeelDialog_message);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AddCustomLookAndFeelDialog(Shell parentShell, CategoryInfo targetCategory) {
+		super(parentShell,
+				targetCategory,
+				LafMessages.AddCustomLookAndFeelDialog_add,
+				LafMessages.AddCustomLookAndFeelDialog_add,
+				null,
+				LafMessages.AddCustomLookAndFeelDialog_message);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Contents
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createControls(Composite container) {
-    {
-      GridLayoutFactory.create(container).columns(3);
-      // category
-      {
-        createCategoriesUI(container);
-      }
-      // separator label
-      {
-        Label label = new Label(container, SWT.NONE);
-        GridDataFactory.create(label).spanH(3);
-      }
-      // jar
-      {
-        createJarUI(container);
-      }
-      // LAF classes
-      {
-        Label label = new Label(container, SWT.NONE);
-        GridDataFactory.create(label).spanH(3).fillH();
-        label.setText(LafMessages.AddCustomLookAndFeelDialog_classesLabel);
-      }
-      {
-        m_classTable =
-            CheckboxTableViewer.newCheckList(container, SWT.BORDER
-                | SWT.FULL_SELECTION
-                | SWT.V_SCROLL);
-        GridDataFactory.create(m_classTable.getControl()).spanH(2).grab().fill().hintVC(6);
-      }
-      // buttons composite
-      {
-        Composite composite = new Composite(container, SWT.NONE);
-        GridDataFactory.create(composite).fill();
-        GridLayoutFactory.create(composite).noMargins();
-        {
-          Button button = new Button(composite, SWT.NONE);
-          GridDataFactory.create(button).grabH().alignHF();
-          button.setText(LafMessages.AddCustomLookAndFeelDialog_selectAll);
-          button.addSelectionListener(new SelectionAdapter() {
-            @Override
-            public void widgetSelected(SelectionEvent e) {
-              if (m_classTable.getTable().isEnabled()) {
-                m_classTable.setAllChecked(true);
-              }
-            }
-          });
-        }
-        {
-          Button button = new Button(composite, SWT.NONE);
-          GridDataFactory.create(button).grabH().alignHF();
-          button.setText(LafMessages.AddCustomLookAndFeelDialog_deselectAll);
-          button.addSelectionListener(new SelectionAdapter() {
-            @Override
-            public void widgetSelected(SelectionEvent e) {
-              if (m_classTable.getTable().isEnabled()) {
-                m_classTable.setAllChecked(false);
-              }
-            }
-          });
-        }
-      }
-    }
-    // progress
-    {
-      createProgressUI(container);
-    }
-    // configure LAF class table viewer
-    m_classTable.setContentProvider(new IStructuredContentProvider() {
-      public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
-      }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Contents
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createControls(Composite container) {
+		{
+			GridLayoutFactory.create(container).columns(3);
+			// category
+			{
+				createCategoriesUI(container);
+			}
+			// separator label
+			{
+				Label label = new Label(container, SWT.NONE);
+				GridDataFactory.create(label).spanH(3);
+			}
+			// jar
+			{
+				createJarUI(container);
+			}
+			// LAF classes
+			{
+				Label label = new Label(container, SWT.NONE);
+				GridDataFactory.create(label).spanH(3).fillH();
+				label.setText(LafMessages.AddCustomLookAndFeelDialog_classesLabel);
+			}
+			{
+				m_classTable =
+						CheckboxTableViewer.newCheckList(container, SWT.BORDER
+								| SWT.FULL_SELECTION
+								| SWT.V_SCROLL);
+				GridDataFactory.create(m_classTable.getControl()).spanH(2).grab().fill().hintVC(6);
+			}
+			// buttons composite
+			{
+				Composite composite = new Composite(container, SWT.NONE);
+				GridDataFactory.create(composite).fill();
+				GridLayoutFactory.create(composite).noMargins();
+				{
+					Button button = new Button(composite, SWT.NONE);
+					GridDataFactory.create(button).grabH().alignHF();
+					button.setText(LafMessages.AddCustomLookAndFeelDialog_selectAll);
+					button.addSelectionListener(new SelectionAdapter() {
+						@Override
+						public void widgetSelected(SelectionEvent e) {
+							if (m_classTable.getTable().isEnabled()) {
+								m_classTable.setAllChecked(true);
+							}
+						}
+					});
+				}
+				{
+					Button button = new Button(composite, SWT.NONE);
+					GridDataFactory.create(button).grabH().alignHF();
+					button.setText(LafMessages.AddCustomLookAndFeelDialog_deselectAll);
+					button.addSelectionListener(new SelectionAdapter() {
+						@Override
+						public void widgetSelected(SelectionEvent e) {
+							if (m_classTable.getTable().isEnabled()) {
+								m_classTable.setAllChecked(false);
+							}
+						}
+					});
+				}
+			}
+		}
+		// progress
+		{
+			createProgressUI(container);
+		}
+		// configure LAF class table viewer
+		m_classTable.setContentProvider(new IStructuredContentProvider() {
+			public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+			}
 
-      public void dispose() {
-      }
+			public void dispose() {
+			}
 
-      public Object[] getElements(Object inputElement) {
-        return scanJarFile(m_progressMonitorPart, (String) inputElement);
-      }
-    });
-    m_classTable.setLabelProvider(new LabelProvider() {
-      @Override
-      public String getText(Object element) {
-        if (element instanceof LafEntryInfo) {
-          return ((LafEntryInfo) element).getName();
-        }
-        return element.toString();
-      }
-    });
-  }
+			public Object[] getElements(Object inputElement) {
+				return scanJarFile(m_progressMonitorPart, (String) inputElement);
+			}
+		});
+		m_classTable.setLabelProvider(new LabelProvider() {
+			@Override
+			public String getText(Object element) {
+				if (element instanceof LafEntryInfo) {
+					return ((LafEntryInfo) element).getName();
+				}
+				return element.toString();
+			}
+		});
+	}
 
-  @Override
-  protected void createButtonsForButtonBar(Composite parent) {
-    createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true);
-    createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false);
-  }
+	@Override
+	protected void createButtonsForButtonBar(Composite parent) {
+		createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true);
+		createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Handlers
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void okPressed() {
-    handleApply();
-    super.okPressed();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Handlers
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void okPressed() {
+		handleApply();
+		super.okPressed();
+	}
 
-  /**
-   * Applies user selections (adds created LAF, stores in persistence).
-   */
-  private void handleApply() {
-    IStructuredSelection selection = (IStructuredSelection) m_categoriesCombo.getSelection();
-    CategoryInfo targetCategory = (CategoryInfo) selection.getFirstElement();
-    Object[] checkedLafs = m_classTable.getCheckedElements();
-    if (checkedLafs.length > 0) {
-      for (Object lafInfo : checkedLafs) {
-        m_commands.add(new AddCommand(targetCategory, (UserDefinedLafInfo) lafInfo));
-      }
-    }
-  }
+	/**
+	 * Applies user selections (adds created LAF, stores in persistence).
+	 */
+	private void handleApply() {
+		IStructuredSelection selection = (IStructuredSelection) m_categoriesCombo.getSelection();
+		CategoryInfo targetCategory = (CategoryInfo) selection.getFirstElement();
+		Object[] checkedLafs = m_classTable.getCheckedElements();
+		if (checkedLafs.length > 0) {
+			for (Object lafInfo : checkedLafs) {
+				m_commands.add(new AddCommand(targetCategory, (UserDefinedLafInfo) lafInfo));
+			}
+		}
+	}
 
-  @Override
-  protected void handleJarSelected(String jarFileName) {
-    m_classTable.getTable().setEnabled(true);
-    m_jarField.setText(jarFileName);
-    enableButtons(false);
-    m_classTable.setInput(jarFileName);
-    enableButtons(true);
-  }
+	@Override
+	protected void handleJarSelected(String jarFileName) {
+		m_classTable.getTable().setEnabled(true);
+		m_jarField.setText(jarFileName);
+		enableButtons(false);
+		m_classTable.setInput(jarFileName);
+		enableButtons(true);
+	}
 
-  @Override
-  protected void handleJarScanningError() {
-    m_classTable.getTable().setEnabled(false);
-  }
+	@Override
+	protected void handleJarScanningError() {
+		m_classTable.getTable().setEnabled(false);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils/Misc
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Enables/Disables dialog buttons.
-   */
-  void enableButtons(boolean enabled) {
-    getButton(IDialogConstants.CANCEL_ID).setEnabled(enabled);
-    getButton(IDialogConstants.OK_ID).setEnabled(enabled);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils/Misc
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Enables/Disables dialog buttons.
+	 */
+	void enableButtons(boolean enabled) {
+		getButton(IDialogConstants.CANCEL_ID).setEnabled(enabled);
+		getButton(IDialogConstants.OK_ID).setEnabled(enabled);
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/ui/EditCustomLookAndFeelDialog.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/ui/EditCustomLookAndFeelDialog.java
index 724183145..153abf79b 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/ui/EditCustomLookAndFeelDialog.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/ui/EditCustomLookAndFeelDialog.java
@@ -43,161 +43,161 @@
  * @coverage swing.laf.ui
  */
 public class EditCustomLookAndFeelDialog extends AbstractCustomLookAndFeelDialog {
-  private final LafInfo m_lafInfo;
-  private StringDialogField m_nameField;
-  private ComboViewer m_classNameViewer;
+	private final LafInfo m_lafInfo;
+	private StringDialogField m_nameField;
+	private ComboViewer m_classNameViewer;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public EditCustomLookAndFeelDialog(Shell parentShell, LafInfo lafInfo) {
-    super(parentShell,
-        lafInfo.getCategory(),
-        LafMessages.EditCustomLookAndFeelDialog_edit,
-        LafMessages.EditCustomLookAndFeelDialog_edit,
-        null,
-        LafMessages.EditCustomLookAndFeelDialog_editProperties);
-    m_lafInfo = lafInfo;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public EditCustomLookAndFeelDialog(Shell parentShell, LafInfo lafInfo) {
+		super(parentShell,
+				lafInfo.getCategory(),
+				LafMessages.EditCustomLookAndFeelDialog_edit,
+				LafMessages.EditCustomLookAndFeelDialog_edit,
+				null,
+				LafMessages.EditCustomLookAndFeelDialog_editProperties);
+		m_lafInfo = lafInfo;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Contents
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createControls(Composite container) {
-    GridLayoutFactory.create(container).columns(3);
-    // category
-    {
-      createCategoriesUI(container);
-    }
-    // name
-    {
-      m_nameField = new StringDialogField();
-      m_nameField.setLabelText(LafMessages.EditCustomLookAndFeelDialog_name);
-      DialogFieldUtils.fillControls(container, m_nameField, 2, 40);
-      m_nameField.setText(m_lafInfo.getName());
-      {
-        new Label(container, SWT.NONE);
-      }
-    }
-    // jar
-    {
-      createJarUI(container);
-      m_jarField.setEnabled(m_lafInfo instanceof UserDefinedLafInfo);
-      if (m_lafInfo instanceof UserDefinedLafInfo) {
-        UserDefinedLafInfo userDefinedLAFInfo = (UserDefinedLafInfo) m_lafInfo;
-        m_jarField.setText(userDefinedLAFInfo.getJarFile());
-      }
-    }
-    // class name
-    {
-      {
-        Label label = new Label(container, SWT.NONE);
-        label.setText(LafMessages.EditCustomLookAndFeelDialog_className);
-        label.setEnabled(m_lafInfo instanceof UserDefinedLafInfo);
-      }
-      {
-        m_classNameViewer = new ComboViewer(container, SWT.READ_ONLY);
-        GridDataFactory.create(m_classNameViewer.getControl()).fillH().grabH();
-        m_classNameViewer.setContentProvider(new ArrayContentProvider());
-        m_classNameViewer.setLabelProvider(new LabelProvider() {
-          @Override
-          public String getText(Object element) {
-            return ((UserDefinedLafInfo) element).getClassName();
-          }
-        });
-        m_classNameViewer.getControl().setEnabled(m_lafInfo instanceof UserDefinedLafInfo);
-      }
-    }
-    {
-      createProgressUI(container);
-    }
-    // configure viewer
-    if (m_lafInfo instanceof UserDefinedLafInfo) {
-      UserDefinedLafInfo userDefinedLAFInfo = (UserDefinedLafInfo) m_lafInfo;
-      Object[] scannedLAFs = scanJarFile(m_progressMonitorPart, userDefinedLAFInfo.getJarFile());
-      m_classNameViewer.setInput(scannedLAFs);
-      // set selection by searching for class name (this LAFInfo instances is *not* the same as m_lafInfo)
-      for (Object lafObject : scannedLAFs) {
-        if (((UserDefinedLafInfo) lafObject).getClassName().equals(
-            userDefinedLAFInfo.getClassName())) {
-          m_classNameViewer.setSelection(new StructuredSelection(lafObject));
-          break;
-        }
-      }
-    }
-    // set focus to name field
-    Text nameTextControl = m_nameField.getTextControl(container);
-    nameTextControl.selectAll();
-    nameTextControl.setFocus();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Contents
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createControls(Composite container) {
+		GridLayoutFactory.create(container).columns(3);
+		// category
+		{
+			createCategoriesUI(container);
+		}
+		// name
+		{
+			m_nameField = new StringDialogField();
+			m_nameField.setLabelText(LafMessages.EditCustomLookAndFeelDialog_name);
+			DialogFieldUtils.fillControls(container, m_nameField, 2, 40);
+			m_nameField.setText(m_lafInfo.getName());
+			{
+				new Label(container, SWT.NONE);
+			}
+		}
+		// jar
+		{
+			createJarUI(container);
+			m_jarField.setEnabled(m_lafInfo instanceof UserDefinedLafInfo);
+			if (m_lafInfo instanceof UserDefinedLafInfo) {
+				UserDefinedLafInfo userDefinedLAFInfo = (UserDefinedLafInfo) m_lafInfo;
+				m_jarField.setText(userDefinedLAFInfo.getJarFile());
+			}
+		}
+		// class name
+		{
+			{
+				Label label = new Label(container, SWT.NONE);
+				label.setText(LafMessages.EditCustomLookAndFeelDialog_className);
+				label.setEnabled(m_lafInfo instanceof UserDefinedLafInfo);
+			}
+			{
+				m_classNameViewer = new ComboViewer(container, SWT.READ_ONLY);
+				GridDataFactory.create(m_classNameViewer.getControl()).fillH().grabH();
+				m_classNameViewer.setContentProvider(new ArrayContentProvider());
+				m_classNameViewer.setLabelProvider(new LabelProvider() {
+					@Override
+					public String getText(Object element) {
+						return ((UserDefinedLafInfo) element).getClassName();
+					}
+				});
+				m_classNameViewer.getControl().setEnabled(m_lafInfo instanceof UserDefinedLafInfo);
+			}
+		}
+		{
+			createProgressUI(container);
+		}
+		// configure viewer
+		if (m_lafInfo instanceof UserDefinedLafInfo) {
+			UserDefinedLafInfo userDefinedLAFInfo = (UserDefinedLafInfo) m_lafInfo;
+			Object[] scannedLAFs = scanJarFile(m_progressMonitorPart, userDefinedLAFInfo.getJarFile());
+			m_classNameViewer.setInput(scannedLAFs);
+			// set selection by searching for class name (this LAFInfo instances is *not* the same as m_lafInfo)
+			for (Object lafObject : scannedLAFs) {
+				if (((UserDefinedLafInfo) lafObject).getClassName().equals(
+						userDefinedLAFInfo.getClassName())) {
+					m_classNameViewer.setSelection(new StructuredSelection(lafObject));
+					break;
+				}
+			}
+		}
+		// set focus to name field
+		Text nameTextControl = m_nameField.getTextControl(container);
+		nameTextControl.selectAll();
+		nameTextControl.setFocus();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Handlers
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void handleJarSelected(String jarFileName) {
-    m_classNameViewer.getControl().setEnabled(true);
-    m_jarField.setText(jarFileName);
-    Object[] scannedLAFs = scanJarFile(m_progressMonitorPart, jarFileName);
-    m_classNameViewer.setInput(scannedLAFs);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Handlers
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void handleJarSelected(String jarFileName) {
+		m_classNameViewer.getControl().setEnabled(true);
+		m_jarField.setText(jarFileName);
+		Object[] scannedLAFs = scanJarFile(m_progressMonitorPart, jarFileName);
+		m_classNameViewer.setInput(scannedLAFs);
+	}
 
-  @Override
-  protected void handleJarScanningError() {
-    m_classNameViewer.getControl().setEnabled(false);
-  }
+	@Override
+	protected void handleJarScanningError() {
+		m_classNameViewer.getControl().setEnabled(false);
+	}
 
-  @Override
-  protected void okPressed() {
-    handleApply();
-    super.okPressed();
-  }
+	@Override
+	protected void okPressed() {
+		handleApply();
+		super.okPressed();
+	}
 
-  /**
-   * Applies user selections (adds created LAF, stores in persistence).
-   */
-  private void handleApply() {
-    IStructuredSelection selection = (IStructuredSelection) m_categoriesCombo.getSelection();
-    CategoryInfo targetCategory = (CategoryInfo) selection.getFirstElement();
-    if (!targetCategory.getID().equals(m_lafInfo.getCategory().getID())) {
-      m_commands.add(new MoveCommand(m_lafInfo, targetCategory, null));
-    }
-    //
-    String name = m_nameField.getText();
-    if (m_lafInfo instanceof UserDefinedLafInfo) {
-      selection = (IStructuredSelection) m_classNameViewer.getSelection();
-      UserDefinedLafInfo selectedLAF = (UserDefinedLafInfo) selection.getFirstElement();
-      m_commands.add(new EditCommand(m_lafInfo.getID(),
-          name,
-          selectedLAF.getClassName(),
-          selectedLAF.getJarFile()));
-    } else {
-      m_commands.add(new EditNameCommand(m_lafInfo.getID(), name));
-    }
-  }
+	/**
+	 * Applies user selections (adds created LAF, stores in persistence).
+	 */
+	private void handleApply() {
+		IStructuredSelection selection = (IStructuredSelection) m_categoriesCombo.getSelection();
+		CategoryInfo targetCategory = (CategoryInfo) selection.getFirstElement();
+		if (!targetCategory.getID().equals(m_lafInfo.getCategory().getID())) {
+			m_commands.add(new MoveCommand(m_lafInfo, targetCategory, null));
+		}
+		//
+		String name = m_nameField.getText();
+		if (m_lafInfo instanceof UserDefinedLafInfo) {
+			selection = (IStructuredSelection) m_classNameViewer.getSelection();
+			UserDefinedLafInfo selectedLAF = (UserDefinedLafInfo) selection.getFirstElement();
+			m_commands.add(new EditCommand(m_lafInfo.getID(),
+					name,
+					selectedLAF.getClassName(),
+					selectedLAF.getJarFile()));
+		} else {
+			m_commands.add(new EditNameCommand(m_lafInfo.getID(), name));
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Validating
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String validate() throws Exception {
-    String name = m_nameField.getText();
-    if (StringUtils.isEmpty(name)) {
-      return LafMessages.EditCustomLookAndFeelDialog_msgEnterName;
-    }
-    IStructuredSelection selection = (IStructuredSelection) m_classNameViewer.getSelection();
-    if (m_lafInfo instanceof UserDefinedLafInfo && (selection == null || selection.isEmpty())) {
-      return LafMessages.EditCustomLookAndFeelDialog_msgEnterClass;
-    }
-    return super.validate();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Validating
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String validate() throws Exception {
+		String name = m_nameField.getText();
+		if (StringUtils.isEmpty(name)) {
+			return LafMessages.EditCustomLookAndFeelDialog_msgEnterName;
+		}
+		IStructuredSelection selection = (IStructuredSelection) m_classNameViewer.getSelection();
+		if (m_lafInfo instanceof UserDefinedLafInfo && (selection == null || selection.isEmpty())) {
+			return LafMessages.EditCustomLookAndFeelDialog_msgEnterClass;
+		}
+		return super.validate();
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/ui/JarSelectionDialog.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/ui/JarSelectionDialog.java
index f90289164..b3ec74f6b 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/ui/JarSelectionDialog.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/ui/JarSelectionDialog.java
@@ -39,122 +39,122 @@
  * @coverage swing.laf.ui
  */
 public final class JarSelectionDialog extends ElementTreeSelectionDialog {
-  private Object[] m_expanded;
-  private Object m_selection;
-  private final JarFileFilter m_filter;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public JarSelectionDialog(Shell parent) {
-    super(parent, new WorkbenchLabelProvider(), new WorkbenchContentProvider());
-    m_filter = new JarFileFilter();
-    addFilter(m_filter);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Contents
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected TreeViewer createTreeViewer(Composite parent) {
-    TreeViewer viewer = super.createTreeViewer(parent);
-    if (m_expanded != null && m_expanded.length > 0) {
-      viewer.setExpandedElements(m_expanded);
-    }
-    return viewer;
-  }
-
-  public void setInitialExpanded(Object[] initExpanded) {
-    m_expanded = initExpanded;
-  }
-
-  @Override
-  protected void updateOKStatus() {
-    TreeViewer viewer = getTreeViewer();
-    m_expanded = viewer.getExpandedElements();
-    IStructuredSelection selection = (IStructuredSelection) viewer.getSelection();
-    m_selection = selection.getFirstElement();
-    super.updateOKStatus();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public final IFile getSelectedJarFile() {
-    Object[] selectionResult = getResult();
-    if (ArrayUtils.isEmpty(selectionResult)) {
-      return null;
-    }
-    for (Object object : selectionResult) {
-      if (m_filter.select(null, null, object)) {
-        return (IFile) object;
-      }
-    }
-    return null;
-  }
-
-  public Object[] getExpandedElements() {
-    return m_expanded;
-  }
-
-  public Object getSelection() {
-    return m_selection;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // @see org.eclipse.pde.internal.ui.editor.build.JARFileFilter
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static class JarFileFilter extends ViewerFilter {
-    private final static String jarExt = "jar"; //$NON-NLS-1$
-    private final HashSet<IPath> fPaths;
-
-    //
-    public JarFileFilter() {
-      fPaths = new HashSet<IPath>();
-    }
-
-    @Override
-    public boolean select(Viewer viewer, Object parent, Object element) {
-      if (element instanceof IFile) {
-        return isFileValid(((IFile) element).getProjectRelativePath());
-      }
-      if (element instanceof IContainer) { // i.e. IProject, IFolder
-        try {
-          if (!((IContainer) element).isAccessible()) {
-            return false;
-          }
-          IResource[] resources = ((IContainer) element).members();
-          for (int i = 0; i < resources.length; i++) {
-            if (select(viewer, parent, resources[i])) {
-              return true;
-            }
-          }
-        } catch (CoreException e) {
-          DesignerPlugin.log(e);
-          return false;
-        }
-      }
-      return false;
-    }
-
-    public boolean isFileValid(IPath path) {
-      String ext = path.getFileExtension();
-      if (isPathValid(path) && ext != null && ext.length() != 0) {
-        return ext.equals(jarExt);
-      }
-      return false;
-    }
-
-    public boolean isPathValid(IPath path) {
-      return !fPaths.contains(path);
-    }
-  }
+	private Object[] m_expanded;
+	private Object m_selection;
+	private final JarFileFilter m_filter;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public JarSelectionDialog(Shell parent) {
+		super(parent, new WorkbenchLabelProvider(), new WorkbenchContentProvider());
+		m_filter = new JarFileFilter();
+		addFilter(m_filter);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Contents
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected TreeViewer createTreeViewer(Composite parent) {
+		TreeViewer viewer = super.createTreeViewer(parent);
+		if (m_expanded != null && m_expanded.length > 0) {
+			viewer.setExpandedElements(m_expanded);
+		}
+		return viewer;
+	}
+
+	public void setInitialExpanded(Object[] initExpanded) {
+		m_expanded = initExpanded;
+	}
+
+	@Override
+	protected void updateOKStatus() {
+		TreeViewer viewer = getTreeViewer();
+		m_expanded = viewer.getExpandedElements();
+		IStructuredSelection selection = (IStructuredSelection) viewer.getSelection();
+		m_selection = selection.getFirstElement();
+		super.updateOKStatus();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public final IFile getSelectedJarFile() {
+		Object[] selectionResult = getResult();
+		if (ArrayUtils.isEmpty(selectionResult)) {
+			return null;
+		}
+		for (Object object : selectionResult) {
+			if (m_filter.select(null, null, object)) {
+				return (IFile) object;
+			}
+		}
+		return null;
+	}
+
+	public Object[] getExpandedElements() {
+		return m_expanded;
+	}
+
+	public Object getSelection() {
+		return m_selection;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// @see org.eclipse.pde.internal.ui.editor.build.JARFileFilter
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static class JarFileFilter extends ViewerFilter {
+		private final static String jarExt = "jar"; //$NON-NLS-1$
+		private final HashSet<IPath> fPaths;
+
+		//
+		public JarFileFilter() {
+			fPaths = new HashSet<IPath>();
+		}
+
+		@Override
+		public boolean select(Viewer viewer, Object parent, Object element) {
+			if (element instanceof IFile) {
+				return isFileValid(((IFile) element).getProjectRelativePath());
+			}
+			if (element instanceof IContainer) { // i.e. IProject, IFolder
+				try {
+					if (!((IContainer) element).isAccessible()) {
+						return false;
+					}
+					IResource[] resources = ((IContainer) element).members();
+					for (int i = 0; i < resources.length; i++) {
+						if (select(viewer, parent, resources[i])) {
+							return true;
+						}
+					}
+				} catch (CoreException e) {
+					DesignerPlugin.log(e);
+					return false;
+				}
+			}
+			return false;
+		}
+
+		public boolean isFileValid(IPath path) {
+			String ext = path.getFileExtension();
+			if (isPathValid(path) && ext != null && ext.length() != 0) {
+				return ext.equals(jarExt);
+			}
+			return false;
+		}
+
+		public boolean isPathValid(IPath path) {
+			return !fPaths.contains(path);
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/ui/LafRootProcessor.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/ui/LafRootProcessor.java
index 393865eaa..ee448fca6 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/ui/LafRootProcessor.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/ui/LafRootProcessor.java
@@ -28,16 +28,16 @@
  * @coverage swing.laf.ui
  */
 public final class LafRootProcessor implements IRootProcessor {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IRootProcessor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void process(JavaInfo root, List<JavaInfo> components) throws Exception {
-    if (root instanceof ComponentInfo) {
-      final ComponentInfo rootComponent = (ComponentInfo) root;
-      // TODO
-      /*rootComponent.addBroadcastListener(new BroadcastGroup() {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IRootProcessor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void process(JavaInfo root, List<JavaInfo> components) throws Exception {
+		if (root instanceof ComponentInfo) {
+			final ComponentInfo rootComponent = (ComponentInfo) root;
+			// TODO
+			/*rootComponent.addBroadcastListener(new BroadcastGroup() {
         LafSelectionItem lafItem;
         {
           add(new ObjectEventListener() {
@@ -63,33 +63,33 @@ public void invoke(EditorActivatedRequest request) throws Exception {
           });
         }
       });*/
-      new Object() {
-        LafSelectionItem lafItem;
-        {
-          rootComponent.addBroadcastListener(new ObjectEventListener() {
-            @Override
-            public void addHierarchyActions(List<Object> actions) throws Exception {
-              if (lafItem == null) {
-                lafItem = new LafSelectionItem(rootComponent);
-              }
-              actions.add(lafItem);
-            }
+			new Object() {
+				LafSelectionItem lafItem;
+				{
+					rootComponent.addBroadcastListener(new ObjectEventListener() {
+						@Override
+						public void addHierarchyActions(List<Object> actions) throws Exception {
+							if (lafItem == null) {
+								lafItem = new LafSelectionItem(rootComponent);
+							}
+							actions.add(lafItem);
+						}
 
-            @Override
-            public void refreshBeforeCreate() throws Exception {
-              LafInfo lafInfo = LafSupport.getSelectedLAF(rootComponent);
-              LafSupport.applySelectedLAF(lafInfo);
-            }
-          });
-          rootComponent.addBroadcastListener(new EditorActivatedListener() {
-            public void invoke(EditorActivatedRequest request) throws Exception {
-              if (lafItem != null) {
-                lafItem.update();
-              }
-            }
-          });
-        }
-      };
-    }
-  }
+						@Override
+						public void refreshBeforeCreate() throws Exception {
+							LafInfo lafInfo = LafSupport.getSelectedLAF(rootComponent);
+							LafSupport.applySelectedLAF(lafInfo);
+						}
+					});
+					rootComponent.addBroadcastListener(new EditorActivatedListener() {
+						public void invoke(EditorActivatedRequest request) throws Exception {
+							if (lafItem != null) {
+								lafItem.update();
+							}
+						}
+					});
+				}
+			};
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/ui/LafSelectionItem.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/ui/LafSelectionItem.java
index 03c3a3baa..c8da18119 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/ui/LafSelectionItem.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/laf/ui/LafSelectionItem.java
@@ -53,238 +53,238 @@
  * @coverage swing.laf.ui
  */
 public final class LafSelectionItem extends ContributionItem
-    implements
-      LafSupport.ILookAndFeelsChangeListener {
-  private ToolItem m_toolItem;
-  private Menu m_menu;
-  private final ComponentInfo m_componentInfo;
+implements
+LafSupport.ILookAndFeelsChangeListener {
+	private ToolItem m_toolItem;
+	private Menu m_menu;
+	private final ComponentInfo m_componentInfo;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public LafSelectionItem(ComponentInfo componentInfo) {
-    m_componentInfo = componentInfo;
-    LafSupport.addLookAndFeelsChangeListener(this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public LafSelectionItem(ComponentInfo componentInfo) {
+		m_componentInfo = componentInfo;
+		LafSupport.addLookAndFeelsChangeListener(this);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ContributionItem
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void fill(final ToolBar parent, int index) {
-    m_toolItem = new ToolItem(parent, SWT.DROP_DOWN);
-    m_toolItem.setImage(Activator.getImage("info/laf/laf.png"));
-    m_toolItem.setText(LafSupport.getSelectedLAF(m_componentInfo).getName());
-    m_toolItem.setToolTipText(ModelMessages.LafSelectionItem_select);
-    // setup drop-down menu
-    m_toolItem.addListener(SWT.Selection, new Listener() {
-      public void handleEvent(Event event) {
-        createMenu(parent);
-        // prepare location
-        Point menuLocation;
-        {
-          Rectangle bounds = m_toolItem.getBounds();
-          menuLocation = parent.toDisplay(bounds.x, bounds.y + bounds.height);
-        }
-        // show menu
-        m_menu.setLocation(menuLocation);
-        m_menu.setVisible(true);
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ContributionItem
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void fill(final ToolBar parent, int index) {
+		m_toolItem = new ToolItem(parent, SWT.DROP_DOWN);
+		m_toolItem.setImage(Activator.getImage("info/laf/laf.png"));
+		m_toolItem.setText(LafSupport.getSelectedLAF(m_componentInfo).getName());
+		m_toolItem.setToolTipText(ModelMessages.LafSelectionItem_select);
+		// setup drop-down menu
+		m_toolItem.addListener(SWT.Selection, new Listener() {
+			public void handleEvent(Event event) {
+				createMenu(parent);
+				// prepare location
+				Point menuLocation;
+				{
+					Rectangle bounds = m_toolItem.getBounds();
+					menuLocation = parent.toDisplay(bounds.x, bounds.y + bounds.height);
+				}
+				// show menu
+				m_menu.setLocation(menuLocation);
+				m_menu.setVisible(true);
+			}
+		});
+	}
 
-  @Override
-  public void dispose() {
-    LafSupport.removeLookAndFeelsChangeListener(this);
-    disposeMenu();
-    super.dispose();
-  }
+	@Override
+	public void dispose() {
+		LafSupport.removeLookAndFeelsChangeListener(this);
+		disposeMenu();
+		super.dispose();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Drop-down menu
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Disposes existing {@link #m_menu} drop-down.
-   */
-  private void disposeMenu() {
-    if (m_menu != null) {
-      m_menu.dispose();
-      m_menu = null;
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Drop-down menu
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Disposes existing {@link #m_menu} drop-down.
+	 */
+	private void disposeMenu() {
+		if (m_menu != null) {
+			m_menu.dispose();
+			m_menu = null;
+		}
+	}
 
-  /**
-   * Initializes {@link #m_menu} drop-down.
-   */
-  private void createMenu(ToolBar parent) {
-    disposeMenu();
-    // create new menu
-    m_menu = new Menu(parent);
-    // add MRU items
-    addMRUItems();
-    //
-    for (final CategoryInfo categoryInfo : LafSupport.getLAFCategoriesList()) {
-      if (LafSupport.isRootCategory(categoryInfo)) {
-        createLAFMenuItem(m_menu, categoryInfo);
-      } else {
-        if (categoryInfo.isVisible()) {
-          MenuItem categoryMenuItem = new MenuItem(m_menu, SWT.CASCADE);
-          categoryMenuItem.setText(categoryInfo.getName());
-          Menu parentMenu = new Menu(categoryMenuItem);
-          categoryMenuItem.setMenu(parentMenu);
-          createLAFMenuItem(parentMenu, categoryInfo);
-        }
-      }
-    }
-    // add "add LAF" item
-    new MenuItem(m_menu, SWT.SEPARATOR);
-    MenuItem addLafItem = new MenuItem(m_menu, SWT.PUSH);
-    addLafItem.setText(ModelMessages.LafSelectionItem_addMore);
-    addLafItem.addSelectionListener(new SelectionAdapter() {
-      @Override
-      public void widgetSelected(SelectionEvent e) {
-        AddCustomLookAndFeelDialog dialog =
-            new AddCustomLookAndFeelDialog(DesignerPlugin.getShell(),
-                LafSupport.getCategory(LafSupport.ROOT_ID));
-        if (dialog.open() == Window.OK) {
-          List<Command> commands = dialog.getCommands();
-          for (Command command : commands) {
-            command.execute();
-            LafSupport.commands_add(command);
-          }
-          LafSupport.commands_write();
-        }
-      }
-    });
-  }
+	/**
+	 * Initializes {@link #m_menu} drop-down.
+	 */
+	private void createMenu(ToolBar parent) {
+		disposeMenu();
+		// create new menu
+		m_menu = new Menu(parent);
+		// add MRU items
+		addMRUItems();
+		//
+		for (final CategoryInfo categoryInfo : LafSupport.getLAFCategoriesList()) {
+			if (LafSupport.isRootCategory(categoryInfo)) {
+				createLAFMenuItem(m_menu, categoryInfo);
+			} else {
+				if (categoryInfo.isVisible()) {
+					MenuItem categoryMenuItem = new MenuItem(m_menu, SWT.CASCADE);
+					categoryMenuItem.setText(categoryInfo.getName());
+					Menu parentMenu = new Menu(categoryMenuItem);
+					categoryMenuItem.setMenu(parentMenu);
+					createLAFMenuItem(parentMenu, categoryInfo);
+				}
+			}
+		}
+		// add "add LAF" item
+		new MenuItem(m_menu, SWT.SEPARATOR);
+		MenuItem addLafItem = new MenuItem(m_menu, SWT.PUSH);
+		addLafItem.setText(ModelMessages.LafSelectionItem_addMore);
+		addLafItem.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				AddCustomLookAndFeelDialog dialog =
+						new AddCustomLookAndFeelDialog(DesignerPlugin.getShell(),
+								LafSupport.getCategory(LafSupport.ROOT_ID));
+				if (dialog.open() == Window.OK) {
+					List<Command> commands = dialog.getCommands();
+					for (Command command : commands) {
+						command.execute();
+						LafSupport.commands_add(command);
+					}
+					LafSupport.commands_write();
+				}
+			}
+		});
+	}
 
-  /**
-   * Adds most recently used items into drop-down LAF menu.
-   */
-  private void addMRUItems() {
-    // sort recently used by usage count
-    List<LafInfo> resultList = LafSupport.getMRULAFList();
-    Collections.sort(resultList, new Comparator<LafInfo>() {
-      public int compare(LafInfo o1, LafInfo o2) {
-        return o2.getUsageCount() - o1.getUsageCount();
-      }
-    });
-    // add items (no more than 3, this can be optional)
-    int itemsCount = 0;
-    boolean anyAdded = false;
-    for (LafInfo lafInfo : resultList) {
-      if (++itemsCount > 3) {
-        break;
-      }
-      createLAFMenuItem(m_menu, lafInfo);
-      anyAdded = true;
-    }
-    // add separator
-    if (anyAdded) {
-      new MenuItem(m_menu, SWT.SEPARATOR);
-    }
-  }
+	/**
+	 * Adds most recently used items into drop-down LAF menu.
+	 */
+	private void addMRUItems() {
+		// sort recently used by usage count
+		List<LafInfo> resultList = LafSupport.getMRULAFList();
+		Collections.sort(resultList, new Comparator<LafInfo>() {
+			public int compare(LafInfo o1, LafInfo o2) {
+				return o2.getUsageCount() - o1.getUsageCount();
+			}
+		});
+		// add items (no more than 3, this can be optional)
+		int itemsCount = 0;
+		boolean anyAdded = false;
+		for (LafInfo lafInfo : resultList) {
+			if (++itemsCount > 3) {
+				break;
+			}
+			createLAFMenuItem(m_menu, lafInfo);
+			anyAdded = true;
+		}
+		// add separator
+		if (anyAdded) {
+			new MenuItem(m_menu, SWT.SEPARATOR);
+		}
+	}
 
-  /**
-   * Traverses via LAF items in given <code>category</code> and add menu item into given parent
-   * <code>menu</code>.
-   */
-  private void createLAFMenuItem(Menu parentMenu, CategoryInfo category) {
-    boolean skippedFirstSeparator = false;
-    for (final LafInfo lafInfo : category.getLAFList()) {
-      if (lafInfo.isVisible()) {
-        // check for separator
-        if (lafInfo instanceof SeparatorLafInfo) {
-          if (skippedFirstSeparator) {
-            new MenuItem(parentMenu, SWT.SEPARATOR);
-          }
-          continue;
-        }
-        skippedFirstSeparator = true;
-        createLAFMenuItem(parentMenu, lafInfo);
-      }
-    }
-  }
+	/**
+	 * Traverses via LAF items in given <code>category</code> and add menu item into given parent
+	 * <code>menu</code>.
+	 */
+	private void createLAFMenuItem(Menu parentMenu, CategoryInfo category) {
+		boolean skippedFirstSeparator = false;
+		for (final LafInfo lafInfo : category.getLAFList()) {
+			if (lafInfo.isVisible()) {
+				// check for separator
+				if (lafInfo instanceof SeparatorLafInfo) {
+					if (skippedFirstSeparator) {
+						new MenuItem(parentMenu, SWT.SEPARATOR);
+					}
+					continue;
+				}
+				skippedFirstSeparator = true;
+				createLAFMenuItem(parentMenu, lafInfo);
+			}
+		}
+	}
 
-  /**
-   * Creates single menu item selecting appropriate <code>lafInfo</code> by being clicked by user.
-   */
-  private void createLAFMenuItem(Menu parentMenu, final LafInfo lafInfo) {
-    MenuItem item = new MenuItem(parentMenu, SWT.CHECK);
-    item.setText(lafInfo.getName());
-    item.setSelection(LafSupport.getSelectedLAF(m_componentInfo) == lafInfo);
-    // add listeners
-    item.addSelectionListener(new SelectionAdapter() {
-      @Override
-      public void widgetSelected(SelectionEvent e) {
-        try {
-          m_toolItem.setText(lafInfo.getName());
-          LafSupport.selectLAF(m_componentInfo, lafInfo);
-          m_componentInfo.getRoot().refresh();
-        } catch (Throwable ex) {
-          handleException(ex);
-        }
-      }
-    });
-  }
+	/**
+	 * Creates single menu item selecting appropriate <code>lafInfo</code> by being clicked by user.
+	 */
+	private void createLAFMenuItem(Menu parentMenu, final LafInfo lafInfo) {
+		MenuItem item = new MenuItem(parentMenu, SWT.CHECK);
+		item.setText(lafInfo.getName());
+		item.setSelection(LafSupport.getSelectedLAF(m_componentInfo) == lafInfo);
+		// add listeners
+		item.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				try {
+					m_toolItem.setText(lafInfo.getName());
+					LafSupport.selectLAF(m_componentInfo, lafInfo);
+					m_componentInfo.getRoot().refresh();
+				} catch (Throwable ex) {
+					handleException(ex);
+				}
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Update
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void update() {
-    LafInfo selectedLAF = LafSupport.getSelectedLAF(m_componentInfo);
-    LafSupport.applySelectedLAF(selectedLAF);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Update
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void update() {
+		LafInfo selectedLAF = LafSupport.getSelectedLAF(m_componentInfo);
+		LafSupport.applySelectedLAF(selectedLAF);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // LAFSupport.ILookAndFeelsChangeListener
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void lookAndFeelsListChanged() {
-    LafInfo selectedLAF = LafSupport.getSelectedLAF(m_componentInfo);
-    m_toolItem.setText(selectedLAF.getName());
-    AstEditor activeEditor = EditorState.getActiveJavaInfo().getEditor();
-    if (m_componentInfo.getEditor() == activeEditor) {
-      try {
-        boolean needRefresh =
-            !selectedLAF.getClassName().equals(UIManager.getLookAndFeel().getClass().getName());
-        update();
-        // refresh if getSelectedLAF() returns another LAF (in case of deleting the currently selected LAF)
-        if (needRefresh) {
-          m_componentInfo.getRoot().refresh();
-        }
-      } catch (Throwable ex) {
-        handleException(ex);
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// LAFSupport.ILookAndFeelsChangeListener
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void lookAndFeelsListChanged() {
+		LafInfo selectedLAF = LafSupport.getSelectedLAF(m_componentInfo);
+		m_toolItem.setText(selectedLAF.getName());
+		AstEditor activeEditor = EditorState.getActiveJavaInfo().getEditor();
+		if (m_componentInfo.getEditor() == activeEditor) {
+			try {
+				boolean needRefresh =
+						!selectedLAF.getClassName().equals(UIManager.getLookAndFeel().getClass().getName());
+				update();
+				// refresh if getSelectedLAF() returns another LAF (in case of deleting the currently selected LAF)
+				if (needRefresh) {
+					m_componentInfo.getRoot().refresh();
+				}
+			} catch (Throwable ex) {
+				handleException(ex);
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Misc
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Handles the possibly thrown {@link Throwable} during refresh.
-   */
-  private void handleException(Throwable ex) throws NestableError {
-    IDesignPageSite site = IDesignPageSite.Helper.getSite(m_componentInfo);
-    if (site != null) {
-      site.handleException(ex);
-    } else {
-      throw new NestableError(MessageFormat.format(
-          ModelMessages.LafSelectionItem_noDesignPage,
-          m_componentInfo), ex);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Misc
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Handles the possibly thrown {@link Throwable} during refresh.
+	 */
+	private void handleException(Throwable ex) throws NestableError {
+		IDesignPageSite site = IDesignPageSite.Helper.getSite(m_componentInfo);
+		if (site != null) {
+			site.handleException(ex);
+		} else {
+			throw new NestableError(MessageFormat.format(
+					ModelMessages.LafSelectionItem_noDesignPage,
+					m_componentInfo), ex);
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/CoordinateUtils.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/CoordinateUtils.java
index 2e23022a5..b9a13845d 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/CoordinateUtils.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/CoordinateUtils.java
@@ -18,65 +18,65 @@
  * @coverage swing.model
  */
 public final class CoordinateUtils {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private CoordinateUtils() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private CoordinateUtils() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AWT -> draw2d
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the draw2d {@link org.eclipse.wb.draw2d.geometry.Point} for given AWT
-   *         {@link java.awt.Point}.
-   */
-  public static org.eclipse.draw2d.geometry.Point get(java.awt.Point o) {
-    return new org.eclipse.draw2d.geometry.Point(o.x, o.y);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AWT -> draw2d
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the draw2d {@link org.eclipse.wb.draw2d.geometry.Point} for given AWT
+	 *         {@link java.awt.Point}.
+	 */
+	public static org.eclipse.draw2d.geometry.Point get(java.awt.Point o) {
+		return new org.eclipse.draw2d.geometry.Point(o.x, o.y);
+	}
 
-  /**
-   * @return the draw2d {@link org.eclipse.draw2d.geometry.Rectangle} for given AWT
-   *         {@link java.awt.Rectangle}.
-   */
-  public static org.eclipse.draw2d.geometry.Rectangle get(java.awt.Rectangle o) {
-    return new org.eclipse.draw2d.geometry.Rectangle(o.x, o.y, o.width, o.height);
-  }
+	/**
+	 * @return the draw2d {@link org.eclipse.draw2d.geometry.Rectangle} for given AWT
+	 *         {@link java.awt.Rectangle}.
+	 */
+	public static org.eclipse.draw2d.geometry.Rectangle get(java.awt.Rectangle o) {
+		return new org.eclipse.draw2d.geometry.Rectangle(o.x, o.y, o.width, o.height);
+	}
 
-  /**
-   * @return the draw2d {@link org.eclipse.draw2d.geometry.Dimension} for given AWT
-   *         {@link java.awt.Dimension}.
-   */
-  public static org.eclipse.draw2d.geometry.Dimension get(java.awt.Dimension o) {
-    return new org.eclipse.draw2d.geometry.Dimension(o.width, o.height);
-  }
+	/**
+	 * @return the draw2d {@link org.eclipse.draw2d.geometry.Dimension} for given AWT
+	 *         {@link java.awt.Dimension}.
+	 */
+	public static org.eclipse.draw2d.geometry.Dimension get(java.awt.Dimension o) {
+		return new org.eclipse.draw2d.geometry.Dimension(o.width, o.height);
+	}
 
-  /**
-   * @return the draw2d {@link org.eclipse.draw2d.geometry.Insets} for given AWT
-   *         {@link java.awt.Insets}.
-   */
-  public static org.eclipse.draw2d.geometry.Insets get(java.awt.Insets o) {
-    return new org.eclipse.draw2d.geometry.Insets(o.top, o.left, o.bottom, o.right);
-  }
+	/**
+	 * @return the draw2d {@link org.eclipse.draw2d.geometry.Insets} for given AWT
+	 *         {@link java.awt.Insets}.
+	 */
+	public static org.eclipse.draw2d.geometry.Insets get(java.awt.Insets o) {
+		return new org.eclipse.draw2d.geometry.Insets(o.top, o.left, o.bottom, o.right);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // draw2d -> AWT
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the AWT {@link java.awt.Insets} for given draw2d
-   *         {@link org.eclipse.draw2d.geometry.Insets}.
-   */
-  public static java.awt.Insets get(org.eclipse.draw2d.geometry.Insets o) {
-    return new java.awt.Insets(o.top, o.left, o.bottom, o.right);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// draw2d -> AWT
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the AWT {@link java.awt.Insets} for given draw2d
+	 *         {@link org.eclipse.draw2d.geometry.Insets}.
+	 */
+	public static java.awt.Insets get(org.eclipse.draw2d.geometry.Insets o) {
+		return new java.awt.Insets(o.top, o.left, o.bottom, o.right);
+	}
 
-  public static java.awt.Rectangle get(org.eclipse.draw2d.geometry.Rectangle o) {
-    return new java.awt.Rectangle(o.x, o.y, o.width, o.height);
-  }
+	public static java.awt.Rectangle get(org.eclipse.draw2d.geometry.Rectangle o) {
+		return new java.awt.Rectangle(o.x, o.y, o.width, o.height);
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/ModelMessages.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/ModelMessages.java
index 3b75805da..92dfd0243 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/ModelMessages.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/ModelMessages.java
@@ -3,300 +3,300 @@
 import org.eclipse.osgi.util.NLS;
 
 public class ModelMessages extends NLS {
-  private static final String BUNDLE_NAME = "org.eclipse.wb.internal.swing.model.ModelMessages"; //$NON-NLS-1$
-  public static String AbstractAbsoluteLayoutInfo_autosize;
-  public static String AbstractGridBagConstraintsInfo_haCenter;
-  public static String AbstractGridBagConstraintsInfo_haFill;
-  public static String AbstractGridBagConstraintsInfo_haGrow;
-  public static String AbstractGridBagConstraintsInfo_haLeft;
-  public static String AbstractGridBagConstraintsInfo_haRight;
-  public static String AbstractGridBagConstraintsInfo_horizontalAlignment;
-  public static String AbstractGridBagConstraintsInfo_vaAboveBaseline;
-  public static String AbstractGridBagConstraintsInfo_vaBaseline;
-  public static String AbstractGridBagConstraintsInfo_vaBelowBaseline;
-  public static String AbstractGridBagConstraintsInfo_vaBottom;
-  public static String AbstractGridBagConstraintsInfo_vaCenter;
-  public static String AbstractGridBagConstraintsInfo_vaFill;
-  public static String AbstractGridBagConstraintsInfo_vaGrow;
-  public static String AbstractGridBagConstraintsInfo_vaTop;
-  public static String AbstractGridBagConstraintsInfo_verticalAlignment;
-  public static String ActionJavaInfoParticipator_new;
-  public static String ActionJavaInfoParticipator_none;
-  public static String ActionJavaInfoParticipator_setActionManager;
-  public static String ActionUseEntryInfo_description;
-  public static String BevelBorderComposite_bevelType;
-  public static String BevelBorderComposite_highlightInnerColor;
-  public static String BevelBorderComposite_highlightOuterColor;
-  public static String BevelBorderComposite_shadowInnerColor;
-  public static String BevelBorderComposite_shadowOuterColor;
-  public static String BevelBorderComposite_typeLowered;
-  public static String BevelBorderComposite_typeRaised;
-  public static String BorderDialog_preview;
-  public static String BorderDialog_properties;
-  public static String BorderDialog_title;
-  public static String BorderDialog_type;
-  public static String BorderLayoutAssistantPage_horizontalGap;
-  public static String BorderLayoutAssistantPage_verticalGap;
-  public static String ButtonGroupJavaInfoParticipator_newCustom;
-  public static String ButtonGroupJavaInfoParticipator_newStandard;
-  public static String ButtonGroupJavaInfoParticipator_none;
-  public static String ButtonGroupJavaInfoParticipator_setGroupManager;
-  public static String CardLayoutAssistantPage_horizontalGap;
-  public static String CardLayoutAssistantPage_verticalGap;
-  public static String ColorField_reset;
-  public static String ColorField_select;
-  public static String ColorPreferenceChooser_Include;
-  public static String ColumnEditDialog_aCenter;
-  public static String ColumnEditDialog_aFill;
-  public static String ColumnEditDialog_aLeft;
-  public static String ColumnEditDialog_aRight;
-  public static String ColumnEditDialog_title;
-  public static String ComboBoxModelDialog_enumBrowse;
-  public static String ComboBoxModelDialog_enumRadio;
-  public static String ComboBoxModelDialog_footerLabel;
-  public static String ComboBoxModelDialog_itemsRadio;
-  public static String ComboBoxModelDialog_typeDialogMessage;
-  public static String ComboBoxModelDialog_typeDialogTitle;
-  public static String ComponentInfo_exposeComponent;
-  public static String CompoundBorderComposite_insideBorder;
-  public static String CompoundBorderComposite_insideEdit;
-  public static String CompoundBorderComposite_outsideBorder;
-  public static String CompoundBorderComposite_outsideEdit;
-  public static String CompoundBorderComposite_swap;
-  public static String ContainerInfo_containerShouldHaveLayout;
-  public static String ContainerInfo_setLayout;
-  public static String ContainerInfo_setLayoutAbsolute;
-  public static String CustomizerAction_dialogMessage;
-  public static String CustomizerAction_dialogTitle;
-  public static String CustomizerAction_title;
-  public static String DateSpinnerComposite_end;
-  public static String DateSpinnerComposite_errMaxValue;
-  public static String DateSpinnerComposite_errMinValue;
-  public static String DateSpinnerComposite_initialValue;
-  public static String DateSpinnerComposite_numberType;
-  public static String DateSpinnerComposite_start;
-  public static String DateSpinnerComposite_title;
-  public static String DerivedFontPage_familyLabel;
-  public static String DerivedFontPage_familySeparator;
-  public static String DerivedFontPage_size;
-  public static String DerivedFontPage_sizeAbsolute;
-  public static String DerivedFontPage_sizeRelative;
-  public static String DerivedFontPage_styleBold;
-  public static String DerivedFontPage_styleBoldClear;
-  public static String DerivedFontPage_styleBoldSet;
-  public static String DerivedFontPage_styleBoldUnchanged;
-  public static String DerivedFontPage_styleItalic;
-  public static String DerivedFontPage_styleItalicClear;
-  public static String DerivedFontPage_styleItalicSet;
-  public static String DerivedFontPage_styleItalicUnchanged;
-  public static String DerivedFontPage_styleSeparator;
-  public static String DerivedFontPage_unchanged;
-  public static String DimensionEditDialog_applyButton;
-  public static String DimensionEditDialog_defaultAlignment;
-  public static String DimensionEditDialog_minimum;
-  public static String DimensionEditDialog_nextButton;
-  public static String DimensionEditDialog_previousButton;
-  public static String DimensionEditDialog_resizeBehavior;
-  public static String DimensionEditDialog_size;
-  public static String DimensionEditDialog_title;
-  public static String DimensionPropertyEditor_height;
-  public static String DimensionPropertyEditor_width;
-  public static String EmptyBorderComposite_bottom;
-  public static String EmptyBorderComposite_left;
-  public static String EmptyBorderComposite_right;
-  public static String EmptyBorderComposite_top;
-  public static String EtchedBorderComposite_etchLowered;
-  public static String EtchedBorderComposite_etchRaised;
-  public static String EtchedBorderComposite_etchType;
-  public static String EtchedBorderComposite_highlightColor;
-  public static String EtchedBorderComposite_shadowColor;
-  public static String ExplicitFontPage_atyle;
-  public static String ExplicitFontPage_family;
-  public static String ExplicitFontPage_size;
-  public static String ExplicitFontPage_styleBold;
-  public static String ExplicitFontPage_styleBoldItalic;
-  public static String ExplicitFontPage_styleItalic;
-  public static String ExplicitFontPage_stylePlain;
-  public static String FlowLayoutAssistantPage_alignmentCenter;
-  public static String FlowLayoutAssistantPage_alignmentGroup;
-  public static String FlowLayoutAssistantPage_alignmentLeading;
-  public static String FlowLayoutAssistantPage_alignmentLeft;
-  public static String FlowLayoutAssistantPage_alignmentRight;
-  public static String FlowLayoutAssistantPage_alignmentTrailing;
-  public static String FlowLayoutAssistantPage_gapHorizontal;
-  public static String FlowLayoutAssistantPage_gapsGroup;
-  public static String FlowLayoutAssistantPage_gapVertical;
-  public static String FontDialog_pageConstruction;
-  public static String FontDialog_pageDerived;
-  public static String FontDialog_pageSwing;
-  public static String FontDialog_previewText;
-  public static String FontDialog_title;
-  public static String GridBagConstraintsAssistantPage_growGroup;
-  public static String GridBagConstraintsAssistantPage_growHorizontal;
-  public static String GridBagConstraintsAssistantPage_growVertical;
-  public static String GridBagConstraintsAssistantPage_haCenter;
-  public static String GridBagConstraintsAssistantPage_haFill;
-  public static String GridBagConstraintsAssistantPage_haLeft;
-  public static String GridBagConstraintsAssistantPage_haRight;
-  public static String GridBagConstraintsAssistantPage_horizontalAlignmentGroup;
-  public static String GridBagConstraintsAssistantPage_insetsBottom;
-  public static String GridBagConstraintsAssistantPage_insetsGroup;
-  public static String GridBagConstraintsAssistantPage_insetsLeft;
-  public static String GridBagConstraintsAssistantPage_insetsRight;
-  public static String GridBagConstraintsAssistantPage_insetsTop;
-  public static String GridBagConstraintsAssistantPage_paddingGroup;
-  public static String GridBagConstraintsAssistantPage_paddingHeight;
-  public static String GridBagConstraintsAssistantPage_paddingWidth;
-  public static String GridBagConstraintsAssistantPage_vaAboveBaseline;
-  public static String GridBagConstraintsAssistantPage_vaBaseline;
-  public static String GridBagConstraintsAssistantPage_vaBelowBaseline;
-  public static String GridBagConstraintsAssistantPage_vaBottom;
-  public static String GridBagConstraintsAssistantPage_vaCenter;
-  public static String GridBagConstraintsAssistantPage_vaFill;
-  public static String GridBagConstraintsAssistantPage_vaTop;
-  public static String GridBagConstraintsAssistantPage_verticalAlignmentGroup;
-  public static String GridBagConstraintsAssistantPage_weightGroup;
-  public static String GridBagConstraintsAssistantPage_weightX;
-  public static String GridBagConstraintsAssistantPage_weightY;
-  public static String GridLayoutAssistantPage_columnCount;
-  public static String GridLayoutAssistantPage_horizontalGap;
-  public static String GridLayoutAssistantPage_rowCount;
-  public static String GridLayoutAssistantPage_verticalGap;
-  public static String InsetsPropertyEditor_bottom;
-  public static String InsetsPropertyEditor_left;
-  public static String InsetsPropertyEditor_right;
-  public static String InsetsPropertyEditor_top;
-  public static String KeyStrokePropertyEditor_keyCode;
-  public static String KeyStrokePropertyEditor_keyStrokeProperties;
-  public static String KeyStrokePropertyEditor_modifiers;
-  public static String KeyStrokePropertyEditor_pressCombination;
-  public static String LafSelectionItem_addMore;
-  public static String LafSelectionItem_noDesignPage;
-  public static String LafSelectionItem_select;
-  public static String LafSupport_errCanParse_setLookAndFeel;
-  public static String LineBorderComposite_color;
-  public static String LineBorderComposite_corners;
-  public static String LineBorderComposite_cornersRounded;
-  public static String LineBorderComposite_cornersSquare;
-  public static String LineBorderComposite_thinkness;
-  public static String ListModelPropertyEditor_itemsDialogMessage;
-  public static String ListModelPropertyEditor_itemsDialogTitle;
-  public static String ListSpinnerComposite_hint;
-  public static String ListSpinnerComposite_itemsLabel;
-  public static String ListSpinnerComposite_title;
-  public static String MatteBorderComposite_bottom;
-  public static String MatteBorderComposite_color;
-  public static String MatteBorderComposite_left;
-  public static String MatteBorderComposite_right;
-  public static String MatteBorderComposite_top;
-  public static String NumberSpinnerComposite_initialValue;
-  public static String NumberSpinnerComposite_maximum;
-  public static String NumberSpinnerComposite_maxValue;
-  public static String NumberSpinnerComposite_minimum;
-  public static String NumberSpinnerComposite_minValue;
-  public static String NumberSpinnerComposite_numberType;
-  public static String NumberSpinnerComposite_stepSize;
-  public static String NumberSpinnerComposite_title;
-  public static String PointPropertyEditor_x;
-  public static String PointPropertyEditor_y;
-  public static String PropertyEditorWrapper_awtComponentDialogTitle;
-  public static String RectanglePropertyEditor_height;
-  public static String RectanglePropertyEditor_width;
-  public static String RectanglePropertyEditor_x;
-  public static String RectanglePropertyEditor_y;
-  public static String RowEditDialog_aAboveBaseline;
-  public static String RowEditDialog_aBaseline;
-  public static String RowEditDialog_aBelowBaseline;
-  public static String RowEditDialog_aBottom;
-  public static String RowEditDialog_aCenter;
-  public static String RowEditDialog_aFill;
-  public static String RowEditDialog_aTop;
-  public static String RowEditDialog_title;
-  public static String SelectionActionsSupport_haCenter;
-  public static String SelectionActionsSupport_haFill;
-  public static String SelectionActionsSupport_haGrow;
-  public static String SelectionActionsSupport_haLeft;
-  public static String SelectionActionsSupport_haRight;
-  public static String SelectionActionsSupport_vaAboveBaseline;
-  public static String SelectionActionsSupport_vaBaseline;
-  public static String SelectionActionsSupport_vaBelowBaseline;
-  public static String SelectionActionsSupport_vaBottom;
-  public static String SelectionActionsSupport_vaCenter;
-  public static String SelectionActionsSupport_vaFill;
-  public static String SelectionActionsSupport_vaGrow;
-  public static String SelectionActionsSupport_vaTop;
-  public static String SeparatorLafInfo_canNotInstantiate;
-  public static String SoftBevelBorderComposite_bevelLowered;
-  public static String SoftBevelBorderComposite_bevelRaised;
-  public static String SoftBevelBorderComposite_bevelType;
-  public static String SoftBevelBorderComposite_highlightInnerColor;
-  public static String SoftBevelBorderComposite_highlightOuterColor;
-  public static String SoftBevelBorderComposite_shadowInnerColor;
-  public static String SoftBevelBorderComposite_shadowOuterColor;
-  public static String SpinnerModelDialog_hint;
-  public static String SpinnerModelDialog_message;
-  public static String SpinnerModelDialog_preview;
-  public static String SpinnerModelDialog_test;
-  public static String SpinnerModelDialog_title;
-  public static String SwingInvocationEvaluatorInterceptor_placeholderMessage;
-  public static String SwingTopBoundsSupport_wrapperTitle;
-  public static String SystemColorWarning;
-  public static String TableModelDialog_columnDeleteButton;
-  public static String TableModelDialog_columnInsertButton;
-  public static String TableModelDialog_columnMoveLeftButton;
-  public static String TableModelDialog_columnMoveRightButton;
-  public static String TableModelDialog_columnProperties;
-  public static String TableModelDialog_columnPropertiesEditable;
-  public static String TableModelDialog_columnPropertiesHint;
-  public static String TableModelDialog_columnPropertiesMaxWidth;
-  public static String TableModelDialog_columnPropertiesMinWidth;
-  public static String TableModelDialog_columnPropertiesNo;
-  public static String TableModelDialog_columnPropertiesPrefWidth;
-  public static String TableModelDialog_columnPropertiesResizable;
-  public static String TableModelDialog_columnPropertiesTitle;
-  public static String TableModelDialog_columnPropertiesType;
-  public static String TableModelDialog_columnPropertiesValues;
-  public static String TableModelDialog_columnPropertiesValuesEdit;
-  public static String TableModelDialog_columnsCount;
-  public static String TableModelDialog_columnsTitle;
-  public static String TableModelDialog_hint;
-  public static String TableModelDialog_itemsLabel;
-  public static String TableModelDialog_resetValue;
-  public static String TableModelDialog_rowDeleteButton;
-  public static String TableModelDialog_rowInsertButton;
-  public static String TableModelDialog_rowMoveDownButton;
-  public static String TableModelDialog_rowMoveUpButton;
-  public static String TableModelDialog_rowsCount;
-  public static String TableModelDialog_rowsTitle;
-  public static String TabOrderProperty_tooltip;
-  public static String TitledBorderComposite_border;
-  public static String TitledBorderComposite_borderEdit;
-  public static String TitledBorderComposite_justCenter;
-  public static String TitledBorderComposite_justLeading;
-  public static String TitledBorderComposite_justLeft;
-  public static String TitledBorderComposite_justRight;
-  public static String TitledBorderComposite_justTrailing;
-  public static String TitledBorderComposite_posAboveBottom;
-  public static String TitledBorderComposite_posAboveTop;
-  public static String TitledBorderComposite_posBelowBottom;
-  public static String TitledBorderComposite_posBelowTop;
-  public static String TitledBorderComposite_posBottom;
-  public static String TitledBorderComposite_posTop;
-  public static String TitledBorderComposite_title;
-  public static String TitledBorderComposite_titleColor;
-  public static String TitledBorderComposite_titleJustification;
-  public static String TitledBorderComposite_titlePosition;
-  public static String TreeModelDialog_hint;
-  public static String TreeModelDialog_itemsLabel;
-  public static String TreeModelDialog_previewLabel;
-  public static String UiManagerFontPage_listLabel;
-  public static String UiManagerFontPage_nameColumn;
-  public static String UiManagerFontPage_valueColumn;
-  static {
-    // initialize resource bundle
-    NLS.initializeMessages(BUNDLE_NAME, ModelMessages.class);
-  }
+	private static final String BUNDLE_NAME = "org.eclipse.wb.internal.swing.model.ModelMessages"; //$NON-NLS-1$
+	public static String AbstractAbsoluteLayoutInfo_autosize;
+	public static String AbstractGridBagConstraintsInfo_haCenter;
+	public static String AbstractGridBagConstraintsInfo_haFill;
+	public static String AbstractGridBagConstraintsInfo_haGrow;
+	public static String AbstractGridBagConstraintsInfo_haLeft;
+	public static String AbstractGridBagConstraintsInfo_haRight;
+	public static String AbstractGridBagConstraintsInfo_horizontalAlignment;
+	public static String AbstractGridBagConstraintsInfo_vaAboveBaseline;
+	public static String AbstractGridBagConstraintsInfo_vaBaseline;
+	public static String AbstractGridBagConstraintsInfo_vaBelowBaseline;
+	public static String AbstractGridBagConstraintsInfo_vaBottom;
+	public static String AbstractGridBagConstraintsInfo_vaCenter;
+	public static String AbstractGridBagConstraintsInfo_vaFill;
+	public static String AbstractGridBagConstraintsInfo_vaGrow;
+	public static String AbstractGridBagConstraintsInfo_vaTop;
+	public static String AbstractGridBagConstraintsInfo_verticalAlignment;
+	public static String ActionJavaInfoParticipator_new;
+	public static String ActionJavaInfoParticipator_none;
+	public static String ActionJavaInfoParticipator_setActionManager;
+	public static String ActionUseEntryInfo_description;
+	public static String BevelBorderComposite_bevelType;
+	public static String BevelBorderComposite_highlightInnerColor;
+	public static String BevelBorderComposite_highlightOuterColor;
+	public static String BevelBorderComposite_shadowInnerColor;
+	public static String BevelBorderComposite_shadowOuterColor;
+	public static String BevelBorderComposite_typeLowered;
+	public static String BevelBorderComposite_typeRaised;
+	public static String BorderDialog_preview;
+	public static String BorderDialog_properties;
+	public static String BorderDialog_title;
+	public static String BorderDialog_type;
+	public static String BorderLayoutAssistantPage_horizontalGap;
+	public static String BorderLayoutAssistantPage_verticalGap;
+	public static String ButtonGroupJavaInfoParticipator_newCustom;
+	public static String ButtonGroupJavaInfoParticipator_newStandard;
+	public static String ButtonGroupJavaInfoParticipator_none;
+	public static String ButtonGroupJavaInfoParticipator_setGroupManager;
+	public static String CardLayoutAssistantPage_horizontalGap;
+	public static String CardLayoutAssistantPage_verticalGap;
+	public static String ColorField_reset;
+	public static String ColorField_select;
+	public static String ColorPreferenceChooser_Include;
+	public static String ColumnEditDialog_aCenter;
+	public static String ColumnEditDialog_aFill;
+	public static String ColumnEditDialog_aLeft;
+	public static String ColumnEditDialog_aRight;
+	public static String ColumnEditDialog_title;
+	public static String ComboBoxModelDialog_enumBrowse;
+	public static String ComboBoxModelDialog_enumRadio;
+	public static String ComboBoxModelDialog_footerLabel;
+	public static String ComboBoxModelDialog_itemsRadio;
+	public static String ComboBoxModelDialog_typeDialogMessage;
+	public static String ComboBoxModelDialog_typeDialogTitle;
+	public static String ComponentInfo_exposeComponent;
+	public static String CompoundBorderComposite_insideBorder;
+	public static String CompoundBorderComposite_insideEdit;
+	public static String CompoundBorderComposite_outsideBorder;
+	public static String CompoundBorderComposite_outsideEdit;
+	public static String CompoundBorderComposite_swap;
+	public static String ContainerInfo_containerShouldHaveLayout;
+	public static String ContainerInfo_setLayout;
+	public static String ContainerInfo_setLayoutAbsolute;
+	public static String CustomizerAction_dialogMessage;
+	public static String CustomizerAction_dialogTitle;
+	public static String CustomizerAction_title;
+	public static String DateSpinnerComposite_end;
+	public static String DateSpinnerComposite_errMaxValue;
+	public static String DateSpinnerComposite_errMinValue;
+	public static String DateSpinnerComposite_initialValue;
+	public static String DateSpinnerComposite_numberType;
+	public static String DateSpinnerComposite_start;
+	public static String DateSpinnerComposite_title;
+	public static String DerivedFontPage_familyLabel;
+	public static String DerivedFontPage_familySeparator;
+	public static String DerivedFontPage_size;
+	public static String DerivedFontPage_sizeAbsolute;
+	public static String DerivedFontPage_sizeRelative;
+	public static String DerivedFontPage_styleBold;
+	public static String DerivedFontPage_styleBoldClear;
+	public static String DerivedFontPage_styleBoldSet;
+	public static String DerivedFontPage_styleBoldUnchanged;
+	public static String DerivedFontPage_styleItalic;
+	public static String DerivedFontPage_styleItalicClear;
+	public static String DerivedFontPage_styleItalicSet;
+	public static String DerivedFontPage_styleItalicUnchanged;
+	public static String DerivedFontPage_styleSeparator;
+	public static String DerivedFontPage_unchanged;
+	public static String DimensionEditDialog_applyButton;
+	public static String DimensionEditDialog_defaultAlignment;
+	public static String DimensionEditDialog_minimum;
+	public static String DimensionEditDialog_nextButton;
+	public static String DimensionEditDialog_previousButton;
+	public static String DimensionEditDialog_resizeBehavior;
+	public static String DimensionEditDialog_size;
+	public static String DimensionEditDialog_title;
+	public static String DimensionPropertyEditor_height;
+	public static String DimensionPropertyEditor_width;
+	public static String EmptyBorderComposite_bottom;
+	public static String EmptyBorderComposite_left;
+	public static String EmptyBorderComposite_right;
+	public static String EmptyBorderComposite_top;
+	public static String EtchedBorderComposite_etchLowered;
+	public static String EtchedBorderComposite_etchRaised;
+	public static String EtchedBorderComposite_etchType;
+	public static String EtchedBorderComposite_highlightColor;
+	public static String EtchedBorderComposite_shadowColor;
+	public static String ExplicitFontPage_atyle;
+	public static String ExplicitFontPage_family;
+	public static String ExplicitFontPage_size;
+	public static String ExplicitFontPage_styleBold;
+	public static String ExplicitFontPage_styleBoldItalic;
+	public static String ExplicitFontPage_styleItalic;
+	public static String ExplicitFontPage_stylePlain;
+	public static String FlowLayoutAssistantPage_alignmentCenter;
+	public static String FlowLayoutAssistantPage_alignmentGroup;
+	public static String FlowLayoutAssistantPage_alignmentLeading;
+	public static String FlowLayoutAssistantPage_alignmentLeft;
+	public static String FlowLayoutAssistantPage_alignmentRight;
+	public static String FlowLayoutAssistantPage_alignmentTrailing;
+	public static String FlowLayoutAssistantPage_gapHorizontal;
+	public static String FlowLayoutAssistantPage_gapsGroup;
+	public static String FlowLayoutAssistantPage_gapVertical;
+	public static String FontDialog_pageConstruction;
+	public static String FontDialog_pageDerived;
+	public static String FontDialog_pageSwing;
+	public static String FontDialog_previewText;
+	public static String FontDialog_title;
+	public static String GridBagConstraintsAssistantPage_growGroup;
+	public static String GridBagConstraintsAssistantPage_growHorizontal;
+	public static String GridBagConstraintsAssistantPage_growVertical;
+	public static String GridBagConstraintsAssistantPage_haCenter;
+	public static String GridBagConstraintsAssistantPage_haFill;
+	public static String GridBagConstraintsAssistantPage_haLeft;
+	public static String GridBagConstraintsAssistantPage_haRight;
+	public static String GridBagConstraintsAssistantPage_horizontalAlignmentGroup;
+	public static String GridBagConstraintsAssistantPage_insetsBottom;
+	public static String GridBagConstraintsAssistantPage_insetsGroup;
+	public static String GridBagConstraintsAssistantPage_insetsLeft;
+	public static String GridBagConstraintsAssistantPage_insetsRight;
+	public static String GridBagConstraintsAssistantPage_insetsTop;
+	public static String GridBagConstraintsAssistantPage_paddingGroup;
+	public static String GridBagConstraintsAssistantPage_paddingHeight;
+	public static String GridBagConstraintsAssistantPage_paddingWidth;
+	public static String GridBagConstraintsAssistantPage_vaAboveBaseline;
+	public static String GridBagConstraintsAssistantPage_vaBaseline;
+	public static String GridBagConstraintsAssistantPage_vaBelowBaseline;
+	public static String GridBagConstraintsAssistantPage_vaBottom;
+	public static String GridBagConstraintsAssistantPage_vaCenter;
+	public static String GridBagConstraintsAssistantPage_vaFill;
+	public static String GridBagConstraintsAssistantPage_vaTop;
+	public static String GridBagConstraintsAssistantPage_verticalAlignmentGroup;
+	public static String GridBagConstraintsAssistantPage_weightGroup;
+	public static String GridBagConstraintsAssistantPage_weightX;
+	public static String GridBagConstraintsAssistantPage_weightY;
+	public static String GridLayoutAssistantPage_columnCount;
+	public static String GridLayoutAssistantPage_horizontalGap;
+	public static String GridLayoutAssistantPage_rowCount;
+	public static String GridLayoutAssistantPage_verticalGap;
+	public static String InsetsPropertyEditor_bottom;
+	public static String InsetsPropertyEditor_left;
+	public static String InsetsPropertyEditor_right;
+	public static String InsetsPropertyEditor_top;
+	public static String KeyStrokePropertyEditor_keyCode;
+	public static String KeyStrokePropertyEditor_keyStrokeProperties;
+	public static String KeyStrokePropertyEditor_modifiers;
+	public static String KeyStrokePropertyEditor_pressCombination;
+	public static String LafSelectionItem_addMore;
+	public static String LafSelectionItem_noDesignPage;
+	public static String LafSelectionItem_select;
+	public static String LafSupport_errCanParse_setLookAndFeel;
+	public static String LineBorderComposite_color;
+	public static String LineBorderComposite_corners;
+	public static String LineBorderComposite_cornersRounded;
+	public static String LineBorderComposite_cornersSquare;
+	public static String LineBorderComposite_thinkness;
+	public static String ListModelPropertyEditor_itemsDialogMessage;
+	public static String ListModelPropertyEditor_itemsDialogTitle;
+	public static String ListSpinnerComposite_hint;
+	public static String ListSpinnerComposite_itemsLabel;
+	public static String ListSpinnerComposite_title;
+	public static String MatteBorderComposite_bottom;
+	public static String MatteBorderComposite_color;
+	public static String MatteBorderComposite_left;
+	public static String MatteBorderComposite_right;
+	public static String MatteBorderComposite_top;
+	public static String NumberSpinnerComposite_initialValue;
+	public static String NumberSpinnerComposite_maximum;
+	public static String NumberSpinnerComposite_maxValue;
+	public static String NumberSpinnerComposite_minimum;
+	public static String NumberSpinnerComposite_minValue;
+	public static String NumberSpinnerComposite_numberType;
+	public static String NumberSpinnerComposite_stepSize;
+	public static String NumberSpinnerComposite_title;
+	public static String PointPropertyEditor_x;
+	public static String PointPropertyEditor_y;
+	public static String PropertyEditorWrapper_awtComponentDialogTitle;
+	public static String RectanglePropertyEditor_height;
+	public static String RectanglePropertyEditor_width;
+	public static String RectanglePropertyEditor_x;
+	public static String RectanglePropertyEditor_y;
+	public static String RowEditDialog_aAboveBaseline;
+	public static String RowEditDialog_aBaseline;
+	public static String RowEditDialog_aBelowBaseline;
+	public static String RowEditDialog_aBottom;
+	public static String RowEditDialog_aCenter;
+	public static String RowEditDialog_aFill;
+	public static String RowEditDialog_aTop;
+	public static String RowEditDialog_title;
+	public static String SelectionActionsSupport_haCenter;
+	public static String SelectionActionsSupport_haFill;
+	public static String SelectionActionsSupport_haGrow;
+	public static String SelectionActionsSupport_haLeft;
+	public static String SelectionActionsSupport_haRight;
+	public static String SelectionActionsSupport_vaAboveBaseline;
+	public static String SelectionActionsSupport_vaBaseline;
+	public static String SelectionActionsSupport_vaBelowBaseline;
+	public static String SelectionActionsSupport_vaBottom;
+	public static String SelectionActionsSupport_vaCenter;
+	public static String SelectionActionsSupport_vaFill;
+	public static String SelectionActionsSupport_vaGrow;
+	public static String SelectionActionsSupport_vaTop;
+	public static String SeparatorLafInfo_canNotInstantiate;
+	public static String SoftBevelBorderComposite_bevelLowered;
+	public static String SoftBevelBorderComposite_bevelRaised;
+	public static String SoftBevelBorderComposite_bevelType;
+	public static String SoftBevelBorderComposite_highlightInnerColor;
+	public static String SoftBevelBorderComposite_highlightOuterColor;
+	public static String SoftBevelBorderComposite_shadowInnerColor;
+	public static String SoftBevelBorderComposite_shadowOuterColor;
+	public static String SpinnerModelDialog_hint;
+	public static String SpinnerModelDialog_message;
+	public static String SpinnerModelDialog_preview;
+	public static String SpinnerModelDialog_test;
+	public static String SpinnerModelDialog_title;
+	public static String SwingInvocationEvaluatorInterceptor_placeholderMessage;
+	public static String SwingTopBoundsSupport_wrapperTitle;
+	public static String SystemColorWarning;
+	public static String TableModelDialog_columnDeleteButton;
+	public static String TableModelDialog_columnInsertButton;
+	public static String TableModelDialog_columnMoveLeftButton;
+	public static String TableModelDialog_columnMoveRightButton;
+	public static String TableModelDialog_columnProperties;
+	public static String TableModelDialog_columnPropertiesEditable;
+	public static String TableModelDialog_columnPropertiesHint;
+	public static String TableModelDialog_columnPropertiesMaxWidth;
+	public static String TableModelDialog_columnPropertiesMinWidth;
+	public static String TableModelDialog_columnPropertiesNo;
+	public static String TableModelDialog_columnPropertiesPrefWidth;
+	public static String TableModelDialog_columnPropertiesResizable;
+	public static String TableModelDialog_columnPropertiesTitle;
+	public static String TableModelDialog_columnPropertiesType;
+	public static String TableModelDialog_columnPropertiesValues;
+	public static String TableModelDialog_columnPropertiesValuesEdit;
+	public static String TableModelDialog_columnsCount;
+	public static String TableModelDialog_columnsTitle;
+	public static String TableModelDialog_hint;
+	public static String TableModelDialog_itemsLabel;
+	public static String TableModelDialog_resetValue;
+	public static String TableModelDialog_rowDeleteButton;
+	public static String TableModelDialog_rowInsertButton;
+	public static String TableModelDialog_rowMoveDownButton;
+	public static String TableModelDialog_rowMoveUpButton;
+	public static String TableModelDialog_rowsCount;
+	public static String TableModelDialog_rowsTitle;
+	public static String TabOrderProperty_tooltip;
+	public static String TitledBorderComposite_border;
+	public static String TitledBorderComposite_borderEdit;
+	public static String TitledBorderComposite_justCenter;
+	public static String TitledBorderComposite_justLeading;
+	public static String TitledBorderComposite_justLeft;
+	public static String TitledBorderComposite_justRight;
+	public static String TitledBorderComposite_justTrailing;
+	public static String TitledBorderComposite_posAboveBottom;
+	public static String TitledBorderComposite_posAboveTop;
+	public static String TitledBorderComposite_posBelowBottom;
+	public static String TitledBorderComposite_posBelowTop;
+	public static String TitledBorderComposite_posBottom;
+	public static String TitledBorderComposite_posTop;
+	public static String TitledBorderComposite_title;
+	public static String TitledBorderComposite_titleColor;
+	public static String TitledBorderComposite_titleJustification;
+	public static String TitledBorderComposite_titlePosition;
+	public static String TreeModelDialog_hint;
+	public static String TreeModelDialog_itemsLabel;
+	public static String TreeModelDialog_previewLabel;
+	public static String UiManagerFontPage_listLabel;
+	public static String UiManagerFontPage_nameColumn;
+	public static String UiManagerFontPage_valueColumn;
+	static {
+		// initialize resource bundle
+		NLS.initializeMessages(BUNDLE_NAME, ModelMessages.class);
+	}
 
-  private ModelMessages() {
-  }
+	private ModelMessages() {
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/bean/AbstractActionInfo.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/bean/AbstractActionInfo.java
index 3225ded81..83269313c 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/bean/AbstractActionInfo.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/bean/AbstractActionInfo.java
@@ -56,176 +56,176 @@
  * @coverage swing.model
  */
 public class AbstractActionInfo extends ActionInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractActionInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-    // add "putValue()" properties
-    addBroadcastListener(new JavaInfoAddProperties() {
-      public void invoke(JavaInfo javaInfo, List<Property> properties) throws Exception {
-        if (javaInfo == AbstractActionInfo.this) {
-          addProperties(properties);
-        }
-      }
-    });
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Properties
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds additional properties accessed via
-   * {@link javax.swing.AbstractAction#putValue(String, Object)} if can.
-   */
-  private List<Property> m_properties = null;
-
-  private void addProperties(List<Property> properties) throws Exception {
-    if (m_properties == null) {
-      m_properties = createProperties();
-    }
-    if (!m_properties.isEmpty()) {
-      properties.addAll(m_properties);
-    }
-  }
-
-  private List<Property> createProperties() throws Exception {
-    CreationSupport creationSupport = getCreationSupport();
-    // no additional properties available
-    if (!(creationSupport instanceof IActionSupport)) {
-      return Lists.newArrayList();
-    }
-    // create properties
-    List<Property> properties = Lists.newArrayList();
-    properties.add(createStringProperty("name", "NAME"));
-    properties.add(createStringProperty("short description", "SHORT_DESCRIPTION"));
-    properties.add(createStringProperty("long description", "LONG_DESCRIPTION"));
-    properties.add(createIconProperty("small icon", "SMALL_ICON"));
-    properties.add(createStringProperty("action command", "ACTION_COMMAND_KEY"));
-    properties.add(createProperty(
-        "accelerator",
-        "ACCELERATOR_KEY",
-        null,
-        KeyStrokePropertyEditor.INSTANCE));
-    properties.add(createProperty(
-        "mnemonic",
-        "MNEMONIC_KEY",
-        null,
-        DisplayedMnemonicKeyPropertyEditor.INSTANCE));
-    if (SystemUtils.JAVA_VERSION_FLOAT >= 1.6) {
-      properties.add(createProperty(
-          "displayed mnemonic index",
-          "DISPLAYED_MNEMONIC_INDEX_KEY",
-          IntegerConverter.INSTANCE,
-          IntegerPropertyEditor.INSTANCE));
-      properties.add(createIconProperty("large icon", "LARGE_ICON_KEY"));
-    }
-    // remove null-s
-    Iterables.removeIf(properties, Predicates.isNull());
-    return properties;
-  }
-
-  /**
-   * @return the new {@link Action} property for {@link String}.
-   */
-  private Property createStringProperty(String title, String keyName) throws Exception {
-    return createProperty(title, keyName, StringConverter.INSTANCE, StringPropertyEditor.INSTANCE);
-  }
-
-  /**
-   * @return the new {@link Action} property for {@link Icon}.
-   */
-  private Property createIconProperty(String title, String keyName) throws Exception {
-    return createProperty(title, keyName, null, IconPropertyEditor.INSTANCE);
-  }
-
-  /**
-   * @return the new {@link Action} property.
-   */
-  private Property createProperty(String title,
-      String keyName,
-      ExpressionConverter converter,
-      PropertyEditor editor) throws Exception {
-    List<ExpressionAccessor> accessors = getAccessors(keyName);
-    // may be no accessors
-    if (accessors.isEmpty()) {
-      return null;
-    }
-    // create property
-    return new GenericPropertyImpl(this, title, Iterables.toArray(
-        accessors,
-        ExpressionAccessor.class), Property.UNKNOWN_VALUE, converter, editor);
-  }
-
-  private List<ExpressionAccessor> getAccessors(String keyName) throws Exception {
-    IActionSupport creationInfo = (IActionSupport) getCreationSupport();
-    List<ExpressionAccessor> accessors = Lists.newArrayList();
-    // <init>()
-    {
-      ExpressionAccessor constructorAccessor =
-          createConstructorArgumentAccessor(creationInfo, keyName);
-      if (constructorAccessor != null) {
-        accessors.add(constructorAccessor);
-      }
-    }
-    // putValue()
-    if (!creationInfo.getInitializationBlocks().isEmpty()) {
-      ExpressionAccessor actionExpressionAccessor =
-          new ActionExpressionAccessor(creationInfo, keyName);
-      accessors.add(actionExpressionAccessor);
-    }
-    // done
-    return accessors;
-  }
-
-  private static ExpressionAccessor createConstructorArgumentAccessor(final IActionSupport creationInfo,
-      String keyName) throws Exception {
-    String keyValue = (String) ReflectionUtils.getFieldObject(Action.class, keyName);
-    ConstructorDescription constructorDescription = creationInfo.getConstructorDescription();
-    if (constructorDescription != null) {
-      for (ParameterDescription parameter : constructorDescription.getParameters()) {
-        if (keyValue.equals(parameter.getTag("actionKey"))) {
-          final int index = parameter.getIndex();
-          return new ExpressionAccessor() {
-            @Override
-            public Expression getExpression(JavaInfo javaInfo) throws Exception {
-              ASTNode creationNode = creationInfo.getCreation();
-              return DomGenerics.arguments(creationNode).get(index);
-            }
-
-            @Override
-            public boolean setExpression(JavaInfo javaInfo, String source) throws Exception {
-              // prepare source
-              final String newSource;
-              if (source != null) {
-                newSource = source;
-              } else {
-                newSource = "null";
-              }
-              // replace source
-              final AstEditor editor = javaInfo.getEditor();
-              final Expression oldExpression = getExpression(javaInfo);
-              if (!editor.getSource(oldExpression).equals(source)) {
-                ExecutionUtils.run(javaInfo, new RunnableEx() {
-                  public void run() throws Exception {
-                    editor.replaceExpression(oldExpression, newSource);
-                  }
-                });
-                return true;
-              }
-              // no changes
-              return false;
-            }
-          };
-        }
-      }
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractActionInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+		// add "putValue()" properties
+		addBroadcastListener(new JavaInfoAddProperties() {
+			public void invoke(JavaInfo javaInfo, List<Property> properties) throws Exception {
+				if (javaInfo == AbstractActionInfo.this) {
+					addProperties(properties);
+				}
+			}
+		});
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Properties
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds additional properties accessed via
+	 * {@link javax.swing.AbstractAction#putValue(String, Object)} if can.
+	 */
+	private List<Property> m_properties = null;
+
+	private void addProperties(List<Property> properties) throws Exception {
+		if (m_properties == null) {
+			m_properties = createProperties();
+		}
+		if (!m_properties.isEmpty()) {
+			properties.addAll(m_properties);
+		}
+	}
+
+	private List<Property> createProperties() throws Exception {
+		CreationSupport creationSupport = getCreationSupport();
+		// no additional properties available
+		if (!(creationSupport instanceof IActionSupport)) {
+			return Lists.newArrayList();
+		}
+		// create properties
+		List<Property> properties = Lists.newArrayList();
+		properties.add(createStringProperty("name", "NAME"));
+		properties.add(createStringProperty("short description", "SHORT_DESCRIPTION"));
+		properties.add(createStringProperty("long description", "LONG_DESCRIPTION"));
+		properties.add(createIconProperty("small icon", "SMALL_ICON"));
+		properties.add(createStringProperty("action command", "ACTION_COMMAND_KEY"));
+		properties.add(createProperty(
+				"accelerator",
+				"ACCELERATOR_KEY",
+				null,
+				KeyStrokePropertyEditor.INSTANCE));
+		properties.add(createProperty(
+				"mnemonic",
+				"MNEMONIC_KEY",
+				null,
+				DisplayedMnemonicKeyPropertyEditor.INSTANCE));
+		if (SystemUtils.JAVA_VERSION_FLOAT >= 1.6) {
+			properties.add(createProperty(
+					"displayed mnemonic index",
+					"DISPLAYED_MNEMONIC_INDEX_KEY",
+					IntegerConverter.INSTANCE,
+					IntegerPropertyEditor.INSTANCE));
+			properties.add(createIconProperty("large icon", "LARGE_ICON_KEY"));
+		}
+		// remove null-s
+		Iterables.removeIf(properties, Predicates.isNull());
+		return properties;
+	}
+
+	/**
+	 * @return the new {@link Action} property for {@link String}.
+	 */
+	private Property createStringProperty(String title, String keyName) throws Exception {
+		return createProperty(title, keyName, StringConverter.INSTANCE, StringPropertyEditor.INSTANCE);
+	}
+
+	/**
+	 * @return the new {@link Action} property for {@link Icon}.
+	 */
+	private Property createIconProperty(String title, String keyName) throws Exception {
+		return createProperty(title, keyName, null, IconPropertyEditor.INSTANCE);
+	}
+
+	/**
+	 * @return the new {@link Action} property.
+	 */
+	private Property createProperty(String title,
+			String keyName,
+			ExpressionConverter converter,
+			PropertyEditor editor) throws Exception {
+		List<ExpressionAccessor> accessors = getAccessors(keyName);
+		// may be no accessors
+		if (accessors.isEmpty()) {
+			return null;
+		}
+		// create property
+		return new GenericPropertyImpl(this, title, Iterables.toArray(
+				accessors,
+				ExpressionAccessor.class), Property.UNKNOWN_VALUE, converter, editor);
+	}
+
+	private List<ExpressionAccessor> getAccessors(String keyName) throws Exception {
+		IActionSupport creationInfo = (IActionSupport) getCreationSupport();
+		List<ExpressionAccessor> accessors = Lists.newArrayList();
+		// <init>()
+		{
+			ExpressionAccessor constructorAccessor =
+					createConstructorArgumentAccessor(creationInfo, keyName);
+			if (constructorAccessor != null) {
+				accessors.add(constructorAccessor);
+			}
+		}
+		// putValue()
+		if (!creationInfo.getInitializationBlocks().isEmpty()) {
+			ExpressionAccessor actionExpressionAccessor =
+					new ActionExpressionAccessor(creationInfo, keyName);
+			accessors.add(actionExpressionAccessor);
+		}
+		// done
+		return accessors;
+	}
+
+	private static ExpressionAccessor createConstructorArgumentAccessor(final IActionSupport creationInfo,
+			String keyName) throws Exception {
+		String keyValue = (String) ReflectionUtils.getFieldObject(Action.class, keyName);
+		ConstructorDescription constructorDescription = creationInfo.getConstructorDescription();
+		if (constructorDescription != null) {
+			for (ParameterDescription parameter : constructorDescription.getParameters()) {
+				if (keyValue.equals(parameter.getTag("actionKey"))) {
+					final int index = parameter.getIndex();
+					return new ExpressionAccessor() {
+						@Override
+						public Expression getExpression(JavaInfo javaInfo) throws Exception {
+							ASTNode creationNode = creationInfo.getCreation();
+							return DomGenerics.arguments(creationNode).get(index);
+						}
+
+						@Override
+						public boolean setExpression(JavaInfo javaInfo, String source) throws Exception {
+							// prepare source
+							final String newSource;
+							if (source != null) {
+								newSource = source;
+							} else {
+								newSource = "null";
+							}
+							// replace source
+							final AstEditor editor = javaInfo.getEditor();
+							final Expression oldExpression = getExpression(javaInfo);
+							if (!editor.getSource(oldExpression).equals(source)) {
+								ExecutionUtils.run(javaInfo, new RunnableEx() {
+									public void run() throws Exception {
+										editor.replaceExpression(oldExpression, newSource);
+									}
+								});
+								return true;
+							}
+							// no changes
+							return false;
+						}
+					};
+				}
+			}
+		}
+		return null;
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/bean/ActionAbstractCreationSupport.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/bean/ActionAbstractCreationSupport.java
index efb8dbc7c..c4f6498b9 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/bean/ActionAbstractCreationSupport.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/bean/ActionAbstractCreationSupport.java
@@ -48,217 +48,217 @@
  * @coverage swing.model
  */
 public abstract class ActionAbstractCreationSupport extends CreationSupport
-    implements
-      IActionSupport {
-  protected ClassInstanceCreation m_creation;
-  protected TypeDeclaration m_typeDeclaration;
-  protected List<Block> m_initializingBlocks;
-  protected ComponentDescription m_typeDescription;
+implements
+IActionSupport {
+	protected ClassInstanceCreation m_creation;
+	protected TypeDeclaration m_typeDeclaration;
+	protected List<Block> m_initializingBlocks;
+	protected ComponentDescription m_typeDescription;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected ActionAbstractCreationSupport() throws Exception {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected ActionAbstractCreationSupport() throws Exception {
+	}
 
-  protected ActionAbstractCreationSupport(ClassInstanceCreation creation) throws Exception {
-    setCreation(creation);
-    updateTypeDescription();
-  }
+	protected ActionAbstractCreationSupport(ClassInstanceCreation creation) throws Exception {
+		setCreation(creation);
+		updateTypeDescription();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    return "abstractAction";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		return "abstractAction";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // State
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets the {@link ClassInstanceCreation}, initializes internal state.
-   */
-  protected void setCreation(ClassInstanceCreation creation) throws Exception {
-    m_creation = creation;
-    setCreationEx();
-    addInitializationBlocks();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// State
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets the {@link ClassInstanceCreation}, initializes internal state.
+	 */
+	protected void setCreation(ClassInstanceCreation creation) throws Exception {
+		m_creation = creation;
+		setCreationEx();
+		addInitializationBlocks();
+	}
 
-  /**
-   * Additional processing of {@link ClassInstanceCreation} in superclasses.
-   */
-  protected void setCreationEx() {
-  }
+	/**
+	 * Additional processing of {@link ClassInstanceCreation} in superclasses.
+	 */
+	protected void setCreationEx() {
+	}
 
-  /**
-   * Adds initializer {@link Block}s into {@link #m_initializingBlocks}.
-   */
-  protected void addInitializationBlocks() {
-    m_initializingBlocks = Lists.newArrayList();
-    for (Initializer typeInitializer : DomGenerics.initializers(m_typeDeclaration, false)) {
-      m_initializingBlocks.add(typeInitializer.getBody());
-    }
-  }
+	/**
+	 * Adds initializer {@link Block}s into {@link #m_initializingBlocks}.
+	 */
+	protected void addInitializationBlocks() {
+		m_initializingBlocks = Lists.newArrayList();
+		for (Initializer typeInitializer : DomGenerics.initializers(m_typeDeclaration, false)) {
+			m_initializingBlocks.add(typeInitializer.getBody());
+		}
+	}
 
-  /**
-   * Prepares {@link ComponentDescription} for super class, in field {@link #m_typeDescription}.
-   */
-  protected void updateTypeDescription() throws Exception {
-    if (m_typeDescription == null && m_javaInfo != null && m_typeDeclaration != null) {
-      // prepare super Class
-      String superClassName = getActionClassName();
-      Class<?> superClass = JavaInfoUtils.getClassLoader(m_javaInfo).loadClass(superClassName);
-      // load description for super Class
-      m_typeDescription =
-          ComponentDescriptionHelper.getDescription(m_javaInfo.getEditor(), superClass);
-    }
-  }
+	/**
+	 * Prepares {@link ComponentDescription} for super class, in field {@link #m_typeDescription}.
+	 */
+	protected void updateTypeDescription() throws Exception {
+		if (m_typeDescription == null && m_javaInfo != null && m_typeDeclaration != null) {
+			// prepare super Class
+			String superClassName = getActionClassName();
+			Class<?> superClass = JavaInfoUtils.getClassLoader(m_javaInfo).loadClass(superClassName);
+			// load description for super Class
+			m_typeDescription =
+					ComponentDescriptionHelper.getDescription(m_javaInfo.getEditor(), superClass);
+		}
+	}
 
-  protected String getActionClassName() throws Exception {
-    ITypeBinding typeBinding = AstNodeUtils.getTypeBinding(m_typeDeclaration);
-    return AstNodeUtils.getFullyQualifiedName(typeBinding.getSuperclass(), true);
-  }
+	protected String getActionClassName() throws Exception {
+		ITypeBinding typeBinding = AstNodeUtils.getTypeBinding(m_typeDeclaration);
+		return AstNodeUtils.getFullyQualifiedName(typeBinding.getSuperclass(), true);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public ASTNode getNode() {
-    return m_creation;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public ASTNode getNode() {
+		return m_creation;
+	}
 
-  @Override
-  public boolean isJavaInfo(ASTNode node) {
-    return node == m_creation;
-  }
+	@Override
+	public boolean isJavaInfo(ASTNode node) {
+		return node == m_creation;
+	}
 
-  @Override
-  public void setJavaInfo(JavaInfo javaInfo) throws Exception {
-    super.setJavaInfo(javaInfo);
-    updateTypeDescription();
-  }
+	@Override
+	public void setJavaInfo(JavaInfo javaInfo) throws Exception {
+		super.setJavaInfo(javaInfo);
+		updateTypeDescription();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Evaluation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean canBeEvaluated() {
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Evaluation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean canBeEvaluated() {
+		return false;
+	}
 
-  @Override
-  public Object create(EvaluationContext context, ExecutionFlowFrameVisitor visitor)
-      throws Exception {
-    AbstractAction action = create_createObject(context);
-    create_evaluateInitialization(context, action);
-    // OK, we have Action instance
-    return action;
-  }
+	@Override
+	public Object create(EvaluationContext context, ExecutionFlowFrameVisitor visitor)
+			throws Exception {
+		AbstractAction action = create_createObject(context);
+		create_evaluateInitialization(context, action);
+		// OK, we have Action instance
+		return action;
+	}
 
-  /**
-   * @return {@link AbstractAction} instance.
-   */
-  protected abstract AbstractAction create_createObject(EvaluationContext context) throws Exception;
+	/**
+	 * @return {@link AbstractAction} instance.
+	 */
+	protected abstract AbstractAction create_createObject(EvaluationContext context) throws Exception;
 
-  /**
-   * Evaluate putValue(key,value) invocations in top-level constructor statements
-   */
-  protected void create_evaluateInitialization(EvaluationContext context, AbstractAction action)
-      throws Exception {
-    for (Block constructorBlock : m_initializingBlocks) {
-      for (Statement statement : DomGenerics.statements(constructorBlock)) {
-        create_evaluateStatement(context, action, statement);
-      }
-    }
-  }
+	/**
+	 * Evaluate putValue(key,value) invocations in top-level constructor statements
+	 */
+	protected void create_evaluateInitialization(EvaluationContext context, AbstractAction action)
+			throws Exception {
+		for (Block constructorBlock : m_initializingBlocks) {
+			for (Statement statement : DomGenerics.statements(constructorBlock)) {
+				create_evaluateStatement(context, action, statement);
+			}
+		}
+	}
 
-  /**
-   * Evaluate any {@link Statement} in initialization blocks.
-   */
-  protected void create_evaluateStatement(EvaluationContext context,
-      AbstractAction action,
-      Statement statement) throws Exception {
-    if (statement instanceof ExpressionStatement) {
-      ExpressionStatement expressionStatement = (ExpressionStatement) statement;
-      updateAction_ExpressionStatement(context, action, expressionStatement);
-    }
-  }
+	/**
+	 * Evaluate any {@link Statement} in initialization blocks.
+	 */
+	protected void create_evaluateStatement(EvaluationContext context,
+			AbstractAction action,
+			Statement statement) throws Exception {
+		if (statement instanceof ExpressionStatement) {
+			ExpressionStatement expressionStatement = (ExpressionStatement) statement;
+			updateAction_ExpressionStatement(context, action, expressionStatement);
+		}
+	}
 
-  /**
-   * Updates {@link Action} instance using {@link Action#putValue(String, Object)} invocation.
-   */
-  private void updateAction_ExpressionStatement(EvaluationContext context,
-      AbstractAction action,
-      ExpressionStatement expressionStatement) throws Exception {
-    if (expressionStatement.getExpression() instanceof MethodInvocation) {
-      MethodInvocation invocation = (MethodInvocation) expressionStatement.getExpression();
-      if (invocation.getExpression() == null
-          && AstNodeUtils.getMethodSignature(invocation).equals(
-              "putValue(java.lang.String,java.lang.Object)")) {
-        // evaluate key/value
-        List<Expression> arguments = DomGenerics.arguments(invocation);
-        String key = (String) AstEvaluationEngine.evaluate(context, arguments.get(0));
-        Object value = AstEvaluationEngine.evaluate(context, arguments.get(1));
-        // put value
-        action.putValue(key, value);
-      }
-    }
-  }
+	/**
+	 * Updates {@link Action} instance using {@link Action#putValue(String, Object)} invocation.
+	 */
+	private void updateAction_ExpressionStatement(EvaluationContext context,
+			AbstractAction action,
+			ExpressionStatement expressionStatement) throws Exception {
+		if (expressionStatement.getExpression() instanceof MethodInvocation) {
+			MethodInvocation invocation = (MethodInvocation) expressionStatement.getExpression();
+			if (invocation.getExpression() == null
+					&& AstNodeUtils.getMethodSignature(invocation).equals(
+							"putValue(java.lang.String,java.lang.Object)")) {
+				// evaluate key/value
+				List<Expression> arguments = DomGenerics.arguments(invocation);
+				String key = (String) AstEvaluationEngine.evaluate(context, arguments.get(0));
+				Object value = AstEvaluationEngine.evaluate(context, arguments.get(1));
+				// put value
+				action.putValue(key, value);
+			}
+		}
+	}
 
-  /**
-   * Evaluate constructor arguments.
-   */
-  protected void evaluateConstructorArguments(EvaluationContext context,
-      AbstractAction action,
-      ConstructorDescription constructor,
-      List<Expression> arguments) throws Exception {
-    for (ParameterDescription parameter : constructor.getParameters()) {
-      String key = parameter.getTag("actionKey");
-      if (key != null) {
-        Expression argument = arguments.get(parameter.getIndex());
-        Object value = AstEvaluationEngine.evaluate(context, argument);
-        action.putValue(key, value);
-      }
-    }
-  }
+	/**
+	 * Evaluate constructor arguments.
+	 */
+	protected void evaluateConstructorArguments(EvaluationContext context,
+			AbstractAction action,
+			ConstructorDescription constructor,
+			List<Expression> arguments) throws Exception {
+		for (ParameterDescription parameter : constructor.getParameters()) {
+			String key = parameter.getTag("actionKey");
+			if (key != null) {
+				Expression argument = arguments.get(parameter.getIndex());
+				Object value = AstEvaluationEngine.evaluate(context, argument);
+				action.putValue(key, value);
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Delete
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean canDelete() {
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Delete
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean canDelete() {
+		return true;
+	}
 
-  @Override
-  public void delete() throws Exception {
-    JavaInfoUtils.deleteJavaInfo(m_javaInfo, true);
-  }
+	@Override
+	public void delete() throws Exception {
+		JavaInfoUtils.deleteJavaInfo(m_javaInfo, true);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IActionSupport
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ASTNode getCreation() {
-    return m_creation;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IActionSupport
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ASTNode getCreation() {
+		return m_creation;
+	}
 
-  public List<Block> getInitializationBlocks() {
-    return m_initializingBlocks;
-  }
+	public List<Block> getInitializationBlocks() {
+		return m_initializingBlocks;
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/bean/ActionAnonymousCreationSupport.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/bean/ActionAnonymousCreationSupport.java
index 0435e5910..f56cb0e57 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/bean/ActionAnonymousCreationSupport.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/bean/ActionAnonymousCreationSupport.java
@@ -34,72 +34,72 @@
  * @coverage swing.model
  */
 public final class ActionAnonymousCreationSupport extends ActionAbstractCreationSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ActionAnonymousCreationSupport() throws Exception {
-    super();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ActionAnonymousCreationSupport() throws Exception {
+		super();
+	}
 
-  public ActionAnonymousCreationSupport(ClassInstanceCreation creation) throws Exception {
-    super(creation);
-  }
+	public ActionAnonymousCreationSupport(ClassInstanceCreation creation) throws Exception {
+		super(creation);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    return "anonymousAction";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		return "anonymousAction";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // State
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void setCreationEx() {
-    super.setCreationEx();
-    m_typeDeclaration = AnonymousTypeDeclaration.create(m_creation.getAnonymousClassDeclaration());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// State
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void setCreationEx() {
+		super.setCreationEx();
+		m_typeDeclaration = AnonymousTypeDeclaration.create(m_creation.getAnonymousClassDeclaration());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Evaluation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected AbstractAction create_createObject(EvaluationContext context) throws Exception {
-    return (AbstractAction) AstEvaluationEngine.createClassInstanceCreationDirectly(
-        context,
-        m_creation);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Evaluation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected AbstractAction create_createObject(EvaluationContext context) throws Exception {
+		return (AbstractAction) AstEvaluationEngine.createClassInstanceCreationDirectly(
+				context,
+				m_creation);
+	}
 
-  @Override
-  protected void create_evaluateInitialization(EvaluationContext context, AbstractAction action)
-      throws Exception {
-    {
-      ConstructorDescription constructor = getConstructorDescription();
-      if (constructor != null) {
-        List<Expression> arguments = DomGenerics.arguments(m_creation);
-        evaluateConstructorArguments(context, action, constructor, arguments);
-      }
-    }
-    super.create_evaluateInitialization(context, action);
-  }
+	@Override
+	protected void create_evaluateInitialization(EvaluationContext context, AbstractAction action)
+			throws Exception {
+		{
+			ConstructorDescription constructor = getConstructorDescription();
+			if (constructor != null) {
+				List<Expression> arguments = DomGenerics.arguments(m_creation);
+				evaluateConstructorArguments(context, action, constructor, arguments);
+			}
+		}
+		super.create_evaluateInitialization(context, action);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IActionSupport
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ConstructorDescription getConstructorDescription() {
-    IMethodBinding binding = AstNodeUtils.getCreationBinding(m_creation);
-    return m_typeDescription.getConstructor(binding);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IActionSupport
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ConstructorDescription getConstructorDescription() {
+		IMethodBinding binding = AstNodeUtils.getCreationBinding(m_creation);
+		return m_typeDescription.getConstructor(binding);
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/bean/ActionContainerInfo.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/bean/ActionContainerInfo.java
index 6ffdd6b43..042365a11 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/bean/ActionContainerInfo.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/bean/ActionContainerInfo.java
@@ -38,122 +38,122 @@
  * @coverage swing.model
  */
 public final class ActionContainerInfo extends ObjectInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    return "{org.eclipse.wb.internal.swing.model.bean.ActionContainerInfo}";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		return "{org.eclipse.wb.internal.swing.model.bean.ActionContainerInfo}";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the existing or new {@link ActionContainerInfo} for given root.
-   */
-  public static ActionContainerInfo get(JavaInfo root) throws Exception {
-    // try to find existing container
-    ActionContainerInfo container = findContainer(root);
-    if (container != null) {
-      return container;
-    }
-    // add new container
-    container = new ActionContainerInfo();
-    root.addChild(container);
-    return container;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the existing or new {@link ActionContainerInfo} for given root.
+	 */
+	public static ActionContainerInfo get(JavaInfo root) throws Exception {
+		// try to find existing container
+		ActionContainerInfo container = findContainer(root);
+		if (container != null) {
+			return container;
+		}
+		// add new container
+		container = new ActionContainerInfo();
+		root.addChild(container);
+		return container;
+	}
 
-  /**
-   * @return all {@link ActionInfo}'s for given root.
-   */
-  public static List<ActionInfo> getActions(JavaInfo root) {
-    ActionContainerInfo container = findContainer(root);
-    if (container != null) {
-      return container.getChildren(ActionInfo.class);
-    }
-    return Collections.emptyList();
-  }
+	/**
+	 * @return all {@link ActionInfo}'s for given root.
+	 */
+	public static List<ActionInfo> getActions(JavaInfo root) {
+		ActionContainerInfo container = findContainer(root);
+		if (container != null) {
+			return container.getChildren(ActionInfo.class);
+		}
+		return Collections.emptyList();
+	}
 
-  /**
-   * Adds {@link ActionInfo} and to the {@link ActionContainerInfo}.
-   *
-   * @param action
-   *          the {@link ActionInfo} to add.
-   */
-  public static void add(JavaInfo root, ActionInfo action) throws Exception {
-    // prepare code generation settings
-    VariableSupport variableSupport = GenerationUtils.getVariableSupport(action);
-    StatementGenerator statementGenerator = GenerationUtils.getStatementGenerator(action);
-    if (!(variableSupport instanceof LazyVariableSupport)) {
-      variableSupport = new FieldInitializerVariableSupport(action);
-      statementGenerator = PureFlatStatementGenerator.INSTANCE;
-    }
-    // do add
-    JavaInfoUtils.add(
-        action,
-        variableSupport,
-        statementGenerator,
-        AssociationObjects.empty(),
-        root,
-        null);
-    root.removeChild(action);
-    ActionContainerInfo.get(root).addChild(action);
-    // If "lazy" Action just added and not attached later, it will be not if execution flow.
-    // Include it now.
-    if (action.getVariableSupport() instanceof LazyVariableSupport) {
-      LazyVariableSupport lazyVariable = (LazyVariableSupport) action.getVariableSupport();
-      ExecutionFlowDescription flowDescription =
-          JavaInfoUtils.getState(action).getFlowDescription();
-      flowDescription.addStartMethod(lazyVariable.m_accessor);
-    }
-  }
+	/**
+	 * Adds {@link ActionInfo} and to the {@link ActionContainerInfo}.
+	 *
+	 * @param action
+	 *          the {@link ActionInfo} to add.
+	 */
+	public static void add(JavaInfo root, ActionInfo action) throws Exception {
+		// prepare code generation settings
+		VariableSupport variableSupport = GenerationUtils.getVariableSupport(action);
+		StatementGenerator statementGenerator = GenerationUtils.getStatementGenerator(action);
+		if (!(variableSupport instanceof LazyVariableSupport)) {
+			variableSupport = new FieldInitializerVariableSupport(action);
+			statementGenerator = PureFlatStatementGenerator.INSTANCE;
+		}
+		// do add
+		JavaInfoUtils.add(
+				action,
+				variableSupport,
+				statementGenerator,
+				AssociationObjects.empty(),
+				root,
+				null);
+		root.removeChild(action);
+		ActionContainerInfo.get(root).addChild(action);
+		// If "lazy" Action just added and not attached later, it will be not if execution flow.
+		// Include it now.
+		if (action.getVariableSupport() instanceof LazyVariableSupport) {
+			LazyVariableSupport lazyVariable = (LazyVariableSupport) action.getVariableSupport();
+			ExecutionFlowDescription flowDescription =
+					JavaInfoUtils.getState(action).getFlowDescription();
+			flowDescription.addStartMethod(lazyVariable.m_accessor);
+		}
+	}
 
-  /**
-   * @return find the existing {@link ActionContainerInfo} for given root.
-   */
-  private static ActionContainerInfo findContainer(JavaInfo root) {
-    for (ObjectInfo child : root.getChildren()) {
-      if (child instanceof ActionContainerInfo) {
-        return (ActionContainerInfo) child;
-      }
-    }
-    return null;
-  }
+	/**
+	 * @return find the existing {@link ActionContainerInfo} for given root.
+	 */
+	private static ActionContainerInfo findContainer(JavaInfo root) {
+		for (ObjectInfo child : root.getChildren()) {
+			if (child instanceof ActionContainerInfo) {
+				return (ActionContainerInfo) child;
+			}
+		}
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds {@link ActionInfo} as {@link ObjectInfo} child.
-   */
-  void addAction(ActionInfo action) throws Exception {
-    action.setAssociation(new EmptyAssociation());
-    addChild(action);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds {@link ActionInfo} as {@link ObjectInfo} child.
+	 */
+	void addAction(ActionInfo action) throws Exception {
+		action.setAssociation(new EmptyAssociation());
+		addChild(action);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public IObjectPresentation getPresentation() {
-    return new DefaultObjectPresentation(this) {
-      public String getText() throws Exception {
-        return "(actions)";
-      }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public IObjectPresentation getPresentation() {
+		return new DefaultObjectPresentation(this) {
+			public String getText() throws Exception {
+				return "(actions)";
+			}
 
-      @Override
-      public Image getIcon() throws Exception {
-        return Activator.getImage("info/Action/container.gif");
-      }
-    };
-  }
+			@Override
+			public Image getIcon() throws Exception {
+				return Activator.getImage("info/Action/container.gif");
+			}
+		};
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/bean/ActionExpressionAccessor.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/bean/ActionExpressionAccessor.java
index f7cfec4ba..3298a691c 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/bean/ActionExpressionAccessor.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/bean/ActionExpressionAccessor.java
@@ -45,150 +45,150 @@
  * @coverage swing.model
  */
 public final class ActionExpressionAccessor extends ExpressionAccessor {
-  private final IActionSupport m_actionInfo;
-  private final String m_keyName;
-  private final String m_keyValue;
+	private final IActionSupport m_actionInfo;
+	private final String m_keyName;
+	private final String m_keyValue;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ActionExpressionAccessor(IActionSupport actionInfo, String keyName) throws Exception {
-    Assert.isTrue(!actionInfo.getInitializationBlocks().isEmpty());
-    m_actionInfo = actionInfo;
-    m_keyName = keyName;
-    m_keyValue = (String) ReflectionUtils.getFieldObject(Action.class, m_keyName);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ActionExpressionAccessor(IActionSupport actionInfo, String keyName) throws Exception {
+		Assert.isTrue(!actionInfo.getInitializationBlocks().isEmpty());
+		m_actionInfo = actionInfo;
+		m_keyName = keyName;
+		m_keyValue = (String) ReflectionUtils.getFieldObject(Action.class, m_keyName);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ExpressionAccessor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Expression getExpression(JavaInfo javaInfo) throws Exception {
-    for (Block block : m_actionInfo.getInitializationBlocks()) {
-      for (Statement statement : DomGenerics.statements(block)) {
-        Expression expression = null;
-        if (statement instanceof SuperConstructorInvocation) {
-          SuperConstructorInvocation invocation = (SuperConstructorInvocation) statement;
-          expression = getExpression_SuperConstructorInvocation(invocation);
-        }
-        if (statement instanceof ExpressionStatement) {
-          ExpressionStatement expressionStatement = (ExpressionStatement) statement;
-          expression = getExpression_ExpressionStatement(expressionStatement);
-        }
-        // check for result
-        if (expression != null) {
-          return expression;
-        }
-      }
-    }
-    // no Expression
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ExpressionAccessor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Expression getExpression(JavaInfo javaInfo) throws Exception {
+		for (Block block : m_actionInfo.getInitializationBlocks()) {
+			for (Statement statement : DomGenerics.statements(block)) {
+				Expression expression = null;
+				if (statement instanceof SuperConstructorInvocation) {
+					SuperConstructorInvocation invocation = (SuperConstructorInvocation) statement;
+					expression = getExpression_SuperConstructorInvocation(invocation);
+				}
+				if (statement instanceof ExpressionStatement) {
+					ExpressionStatement expressionStatement = (ExpressionStatement) statement;
+					expression = getExpression_ExpressionStatement(expressionStatement);
+				}
+				// check for result
+				if (expression != null) {
+					return expression;
+				}
+			}
+		}
+		// no Expression
+		return null;
+	}
 
-  private Expression getExpression_SuperConstructorInvocation(SuperConstructorInvocation invocation)
-      throws Exception {
-    // prepare description
-    ConstructorDescription constructor = m_actionInfo.getConstructorDescription();
-    // analyze arguments
-    if (constructor != null) {
-      List<Expression> arguments = DomGenerics.arguments(invocation);
-      for (ParameterDescription parameter : constructor.getParameters()) {
-        String key = parameter.getTag("actionKey");
-        if (m_keyValue.equals(key)) {
-          return arguments.get(parameter.getIndex());
-        }
-      }
-    }
-    // no expression
-    return null;
-  }
+	private Expression getExpression_SuperConstructorInvocation(SuperConstructorInvocation invocation)
+			throws Exception {
+		// prepare description
+		ConstructorDescription constructor = m_actionInfo.getConstructorDescription();
+		// analyze arguments
+		if (constructor != null) {
+			List<Expression> arguments = DomGenerics.arguments(invocation);
+			for (ParameterDescription parameter : constructor.getParameters()) {
+				String key = parameter.getTag("actionKey");
+				if (m_keyValue.equals(key)) {
+					return arguments.get(parameter.getIndex());
+				}
+			}
+		}
+		// no expression
+		return null;
+	}
 
-  private Expression getExpression_ExpressionStatement(ExpressionStatement expressionStatement) {
-    if (expressionStatement.getExpression() instanceof MethodInvocation) {
-      MethodInvocation invocation = (MethodInvocation) expressionStatement.getExpression();
-      if (invocation.getExpression() == null
-          && AstNodeUtils.getMethodSignature(invocation).equals(
-              "putValue(java.lang.String,java.lang.Object)")) {
-        List<Expression> arguments = DomGenerics.arguments(invocation);
-        Expression keyExpression = arguments.get(0);
-        Expression valueExpression = arguments.get(1);
-        if (m_keyValue.equals(getKeyValue(keyExpression))) {
-          return valueExpression;
-        }
-      }
-    }
-    return null;
-  }
+	private Expression getExpression_ExpressionStatement(ExpressionStatement expressionStatement) {
+		if (expressionStatement.getExpression() instanceof MethodInvocation) {
+			MethodInvocation invocation = (MethodInvocation) expressionStatement.getExpression();
+			if (invocation.getExpression() == null
+					&& AstNodeUtils.getMethodSignature(invocation).equals(
+							"putValue(java.lang.String,java.lang.Object)")) {
+				List<Expression> arguments = DomGenerics.arguments(invocation);
+				Expression keyExpression = arguments.get(0);
+				Expression valueExpression = arguments.get(1);
+				if (m_keyValue.equals(getKeyValue(keyExpression))) {
+					return valueExpression;
+				}
+			}
+		}
+		return null;
+	}
 
-  @Override
-  public boolean setExpression(final JavaInfo javaInfo, final String source) throws Exception {
-    final Expression expression = getExpression(javaInfo);
-    if (expression != null) {
-      final AstEditor editor = javaInfo.getEditor();
-      if (source == null) {
-        if (expression.getLocationInParent() == MethodInvocation.ARGUMENTS_PROPERTY) {
-          ExecutionUtils.run(javaInfo, new RunnableEx() {
-            public void run() throws Exception {
-              editor.removeEnclosingStatement(expression);
-            }
-          });
-        }
-      } else if (!editor.getSource(expression).equals(source)) {
-        ExecutionUtils.run(javaInfo, new RunnableEx() {
-          public void run() throws Exception {
-            editor.replaceExpression(expression, source);
-          }
-        });
-      }
-    } else if (source != null) {
-      ExecutionUtils.run(javaInfo, new RunnableEx() {
-        public void run() throws Exception {
-          String statementSource = "putValue(" + m_keyName + ", " + source + ");";
-          javaInfo.getEditor().addStatement(statementSource, getTarget());
-        }
+	@Override
+	public boolean setExpression(final JavaInfo javaInfo, final String source) throws Exception {
+		final Expression expression = getExpression(javaInfo);
+		if (expression != null) {
+			final AstEditor editor = javaInfo.getEditor();
+			if (source == null) {
+				if (expression.getLocationInParent() == MethodInvocation.ARGUMENTS_PROPERTY) {
+					ExecutionUtils.run(javaInfo, new RunnableEx() {
+						public void run() throws Exception {
+							editor.removeEnclosingStatement(expression);
+						}
+					});
+				}
+			} else if (!editor.getSource(expression).equals(source)) {
+				ExecutionUtils.run(javaInfo, new RunnableEx() {
+					public void run() throws Exception {
+						editor.replaceExpression(expression, source);
+					}
+				});
+			}
+		} else if (source != null) {
+			ExecutionUtils.run(javaInfo, new RunnableEx() {
+				public void run() throws Exception {
+					String statementSource = "putValue(" + m_keyName + ", " + source + ");";
+					javaInfo.getEditor().addStatement(statementSource, getTarget());
+				}
 
-        private StatementTarget getTarget() throws Exception {
-          // if first statement in constructor is "super", add after it
-          Block block = m_actionInfo.getInitializationBlocks().get(0);
-          List<Statement> statements = DomGenerics.statements(block);
-          if (!statements.isEmpty()) {
-            Statement statement = statements.get(0);
-            if (statement instanceof SuperConstructorInvocation) {
-              return new StatementTarget(statement, false);
-            }
-          }
-          // in other case add as first statement in constructor
-          return new StatementTarget(block, true);
-        }
-      });
-    }
-    // success
-    return true;
-  }
+				private StatementTarget getTarget() throws Exception {
+					// if first statement in constructor is "super", add after it
+					Block block = m_actionInfo.getInitializationBlocks().get(0);
+					List<Statement> statements = DomGenerics.statements(block);
+					if (!statements.isEmpty()) {
+						Statement statement = statements.get(0);
+						if (statement instanceof SuperConstructorInvocation) {
+							return new StatementTarget(statement, false);
+						}
+					}
+					// in other case add as first statement in constructor
+					return new StatementTarget(block, true);
+				}
+			});
+		}
+		// success
+		return true;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @param keyExpression
-   *          the {@link Expression} for {@link Action#putValue(String, Object)} key. Only
-   *          {@link SimpleName} and {@link StringLiteral} are supported.
-   *
-   * @return the value of "key" {@link Expression}.
-   */
-  static String getKeyValue(Expression keyExpression) {
-    return (String) JavaInfoEvaluationHelper.getValue(keyExpression);
-    /*if (keyExpression instanceof SimpleName) {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @param keyExpression
+	 *          the {@link Expression} for {@link Action#putValue(String, Object)} key. Only
+	 *          {@link SimpleName} and {@link StringLiteral} are supported.
+	 *
+	 * @return the value of "key" {@link Expression}.
+	 */
+	static String getKeyValue(Expression keyExpression) {
+		return (String) JavaInfoEvaluationHelper.getValue(keyExpression);
+		/*if (keyExpression instanceof SimpleName) {
     	String keyName = ((SimpleName) keyExpression).getIdentifier();
     	return (String) ReflectionUtils.getFieldObject(Action.class, keyName);
     } else {
     	return ((StringLiteral) keyExpression).getLiteralValue();
     }*/
-  }
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/bean/ActionInfo.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/bean/ActionInfo.java
index 08561e6ee..9686566f2 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/bean/ActionInfo.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/bean/ActionInfo.java
@@ -46,129 +46,129 @@
  * @coverage swing.model
  */
 public class ActionInfo extends JavaInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ActionInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-    addListeners();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ActionInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+		addListeners();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Listeners
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds broadcast listeners.
-   */
-  private void addListeners() {
-    // add to palette
-    addBroadcastListener(new PaletteEventListener() {
-      @Override
-      public void entries(CategoryInfo category, List<EntryInfo> entries) throws Exception {
-        if (category.getId().equals("org.eclipse.wb.internal.swing.actions")) {
-          entries.add(new ActionUseEntryInfo(ActionInfo.this));
-        }
-      }
-    });
-    // update SMALL_ICON image
-    addBroadcastListener(new ObjectEventListener() {
-      @Override
-      public void refreshed() throws Exception {
-        refreshIconImage();
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Listeners
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds broadcast listeners.
+	 */
+	private void addListeners() {
+		// add to palette
+		addBroadcastListener(new PaletteEventListener() {
+			@Override
+			public void entries(CategoryInfo category, List<EntryInfo> entries) throws Exception {
+				if (category.getId().equals("org.eclipse.wb.internal.swing.actions")) {
+					entries.add(new ActionUseEntryInfo(ActionInfo.this));
+				}
+			}
+		});
+		// update SMALL_ICON image
+		addBroadcastListener(new ObjectEventListener() {
+			@Override
+			public void refreshed() throws Exception {
+				refreshIconImage();
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * The SWT {@link Image} created from {@link Action#SMALL_ICON}, may be <code>null</code>.
-   */
-  private Image m_smallIconImage;
-  private final IObjectPresentation m_presentation = new DefaultJavaInfoPresentation(this) {
-    @Override
-    public Image getIcon() throws Exception {
-      if (m_smallIconImage != null) {
-        return m_smallIconImage;
-      }
-      return super.getIcon();
-    }
-  };
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * The SWT {@link Image} created from {@link Action#SMALL_ICON}, may be <code>null</code>.
+	 */
+	private Image m_smallIconImage;
+	private final IObjectPresentation m_presentation = new DefaultJavaInfoPresentation(this) {
+		@Override
+		public Image getIcon() throws Exception {
+			if (m_smallIconImage != null) {
+				return m_smallIconImage;
+			}
+			return super.getIcon();
+		}
+	};
 
-  @Override
-  public IObjectPresentation getPresentation() {
-    return m_presentation;
-  }
+	@Override
+	public IObjectPresentation getPresentation() {
+		return m_presentation;
+	}
 
-  /**
-   * Converts {@link Action#SMALL_ICON} into {@link #m_smallIconImage}.
-   */
-  private void refreshIconImage() throws IOException {
-    m_smallIconImage = null;
-    // if Action has icon, convert it into SWT image
-    if (getObject() instanceof Action) {
-      javax.swing.Icon smallIcon = (Icon) ((Action) getObject()).getValue(Action.SMALL_ICON);
-      if (smallIcon != null) {
-        m_smallIconImage = ImageUtils.convertToSWT(smallIcon);
-        // schedule SWT image for disposing
-        JavaInfoUtils.getState(this).addDisposableImage(m_smallIconImage);
-      }
-    }
-  }
+	/**
+	 * Converts {@link Action#SMALL_ICON} into {@link #m_smallIconImage}.
+	 */
+	private void refreshIconImage() throws IOException {
+		m_smallIconImage = null;
+		// if Action has icon, convert it into SWT image
+		if (getObject() instanceof Action) {
+			javax.swing.Icon smallIcon = (Icon) ((Action) getObject()).getValue(Action.SMALL_ICON);
+			if (smallIcon != null) {
+				m_smallIconImage = ImageUtils.convertToSWT(smallIcon);
+				// schedule SWT image for disposing
+				JavaInfoUtils.getState(this).addDisposableImage(m_smallIconImage);
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets {@link ActionInfo} for given {@link ComponentInfo} using
-   * {@link AbstractButton#setAction(javax.swing.Action)}.
-   *
-   * @param component
-   *          the {@link ComponentInfo} to set action for.
-   * @param action
-   *          the {@link ActionInfo} to set, may be <code>null</code>, then any existing action will
-   *          be unset.
-   */
-  public static void setAction(ComponentInfo component, ActionInfo action) throws Exception {
-    if (action == null) {
-      component.removeMethodInvocations("setAction(javax.swing.Action)");
-    } else {
-      // ensure that ActionInfo is already added
-      if (action.getParent() == null) {
-        ActionContainerInfo.add(component.getRootJava(), action);
-      }
-      // do set using setAction()
-      String actionSource = TemplateUtils.getExpression(action);
-      MethodInvocation invocation = component.getMethodInvocation("setAction(javax.swing.Action)");
-      if (invocation != null) {
-        component.replaceExpression(DomGenerics.arguments(invocation).get(0), actionSource);
-      } else {
-        invocation = component.addMethodInvocation("setAction(javax.swing.Action)", actionSource);
-      }
-      action.addRelatedNodes(invocation);
-      // select component
-      component.getBroadcastObject().select(ImmutableList.of(component));
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets {@link ActionInfo} for given {@link ComponentInfo} using
+	 * {@link AbstractButton#setAction(javax.swing.Action)}.
+	 *
+	 * @param component
+	 *          the {@link ComponentInfo} to set action for.
+	 * @param action
+	 *          the {@link ActionInfo} to set, may be <code>null</code>, then any existing action will
+	 *          be unset.
+	 */
+	public static void setAction(ComponentInfo component, ActionInfo action) throws Exception {
+		if (action == null) {
+			component.removeMethodInvocations("setAction(javax.swing.Action)");
+		} else {
+			// ensure that ActionInfo is already added
+			if (action.getParent() == null) {
+				ActionContainerInfo.add(component.getRootJava(), action);
+			}
+			// do set using setAction()
+			String actionSource = TemplateUtils.getExpression(action);
+			MethodInvocation invocation = component.getMethodInvocation("setAction(javax.swing.Action)");
+			if (invocation != null) {
+				component.replaceExpression(DomGenerics.arguments(invocation).get(0), actionSource);
+			} else {
+				invocation = component.addMethodInvocation("setAction(javax.swing.Action)", actionSource);
+			}
+			action.addRelatedNodes(invocation);
+			// select component
+			component.getBroadcastObject().select(ImmutableList.of(component));
+		}
+	}
 
-  /**
-   * @return the new {@link ActionInfo} instance for adding as inner class.
-   */
-  public static ActionInfo createInner(AstEditor editor) throws Exception {
-    return (ActionInfo) JavaInfoUtils.createJavaInfo(
-        editor,
-        Action.class,
-        new ActionInnerCreationSupport());
-  }
+	/**
+	 * @return the new {@link ActionInfo} instance for adding as inner class.
+	 */
+	public static ActionInfo createInner(AstEditor editor) throws Exception {
+		return (ActionInfo) JavaInfoUtils.createJavaInfo(
+				editor,
+				Action.class,
+				new ActionInnerCreationSupport());
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/bean/ActionInnerCreationSupport.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/bean/ActionInnerCreationSupport.java
index 0835af871..987050745 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/bean/ActionInnerCreationSupport.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/bean/ActionInnerCreationSupport.java
@@ -44,111 +44,111 @@
  * @coverage swing.model
  */
 public final class ActionInnerCreationSupport extends ActionAbstractCreationSupport {
-  private MethodDeclaration m_typeConstructor;
-  private SuperConstructorInvocation m_superInvocation;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ActionInnerCreationSupport() throws Exception {
-    super();
-  }
-
-  public ActionInnerCreationSupport(ClassInstanceCreation creation) throws Exception {
-    super(creation);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    return "innerAction";
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // State
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void setCreationEx() {
-    super.setCreationEx();
-    m_typeDeclaration = AstNodeUtils.getTypeDeclaration(m_creation);
-    m_typeConstructor =
-        AstNodeUtils.getMethodBySignature(
-            m_typeDeclaration,
-            AstNodeUtils.getCreationSignature(m_creation));
-  }
-
-  @Override
-  protected void addInitializationBlocks() {
-    super.addInitializationBlocks();
-    if (m_typeConstructor != null) {
-      m_initializingBlocks.add(m_typeConstructor.getBody());
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Evaluation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected AbstractAction create_createObject(EvaluationContext context) throws Exception {
-    return new AbstractAction() {
-      private static final long serialVersionUID = 0L;
-
-      public void actionPerformed(ActionEvent e) {
-        String message = "Action \"" + m_javaInfo.getVariableSupport().getName() + "\" performed.";
-        JOptionPane.showMessageDialog(null, message, "Information", JOptionPane.INFORMATION_MESSAGE);
-      }
-    };
-  }
-
-  @Override
-  protected void create_evaluateStatement(EvaluationContext context,
-      AbstractAction action,
-      Statement statement) throws Exception {
-    if (statement instanceof SuperConstructorInvocation) {
-      SuperConstructorInvocation invocation = (SuperConstructorInvocation) statement;
-      updateAction_SuperConstructorInvocation(context, action, invocation);
-    } else {
-      super.create_evaluateStatement(context, action, statement);
-    }
-  }
-
-  /**
-   * Updates {@link Action} instance using {@link SuperConstructorInvocation}.
-   */
-  private void updateAction_SuperConstructorInvocation(EvaluationContext context,
-      AbstractAction action,
-      SuperConstructorInvocation invocation) throws Exception {
-    m_superInvocation = invocation;
-    ConstructorDescription constructor = getConstructorDescription();
-    if (constructor != null) {
-      List<Expression> arguments = DomGenerics.arguments(invocation);
-      evaluateConstructorArguments(context, action, constructor, arguments);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Adding
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String add_getSource(NodeTarget target) throws Exception {
-    AstEditor editor = m_javaInfo.getEditor();
-    // fill m_typeDeclaration with target type
-    m_typeDeclaration = EditorState.get(editor).getFlowDescription().geTypeDeclaration();
-    // prepare target for new Action type
-    BodyDeclarationTarget innerTarget = new BodyDeclarationTarget(m_typeDeclaration, false);
-    /*NewBodyDeclarationTarget target = new NewBodyDeclarationTarget(m_typeDeclaration, true);
+	private MethodDeclaration m_typeConstructor;
+	private SuperConstructorInvocation m_superInvocation;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ActionInnerCreationSupport() throws Exception {
+		super();
+	}
+
+	public ActionInnerCreationSupport(ClassInstanceCreation creation) throws Exception {
+		super(creation);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		return "innerAction";
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// State
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void setCreationEx() {
+		super.setCreationEx();
+		m_typeDeclaration = AstNodeUtils.getTypeDeclaration(m_creation);
+		m_typeConstructor =
+				AstNodeUtils.getMethodBySignature(
+						m_typeDeclaration,
+						AstNodeUtils.getCreationSignature(m_creation));
+	}
+
+	@Override
+	protected void addInitializationBlocks() {
+		super.addInitializationBlocks();
+		if (m_typeConstructor != null) {
+			m_initializingBlocks.add(m_typeConstructor.getBody());
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Evaluation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected AbstractAction create_createObject(EvaluationContext context) throws Exception {
+		return new AbstractAction() {
+			private static final long serialVersionUID = 0L;
+
+			public void actionPerformed(ActionEvent e) {
+				String message = "Action \"" + m_javaInfo.getVariableSupport().getName() + "\" performed.";
+				JOptionPane.showMessageDialog(null, message, "Information", JOptionPane.INFORMATION_MESSAGE);
+			}
+		};
+	}
+
+	@Override
+	protected void create_evaluateStatement(EvaluationContext context,
+			AbstractAction action,
+			Statement statement) throws Exception {
+		if (statement instanceof SuperConstructorInvocation) {
+			SuperConstructorInvocation invocation = (SuperConstructorInvocation) statement;
+			updateAction_SuperConstructorInvocation(context, action, invocation);
+		} else {
+			super.create_evaluateStatement(context, action, statement);
+		}
+	}
+
+	/**
+	 * Updates {@link Action} instance using {@link SuperConstructorInvocation}.
+	 */
+	private void updateAction_SuperConstructorInvocation(EvaluationContext context,
+			AbstractAction action,
+			SuperConstructorInvocation invocation) throws Exception {
+		m_superInvocation = invocation;
+		ConstructorDescription constructor = getConstructorDescription();
+		if (constructor != null) {
+			List<Expression> arguments = DomGenerics.arguments(invocation);
+			evaluateConstructorArguments(context, action, constructor, arguments);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Adding
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String add_getSource(NodeTarget target) throws Exception {
+		AstEditor editor = m_javaInfo.getEditor();
+		// fill m_typeDeclaration with target type
+		m_typeDeclaration = EditorState.get(editor).getFlowDescription().geTypeDeclaration();
+		// prepare target for new Action type
+		BodyDeclarationTarget innerTarget = new BodyDeclarationTarget(m_typeDeclaration, false);
+		/*NewBodyDeclarationTarget target = new NewBodyDeclarationTarget(m_typeDeclaration, true);
     for (BodyDeclaration bodyDeclaration : DomGenerics.bodyDeclarations(m_typeDeclaration)) {
     	if (bodyDeclaration instanceof TypeDeclaration) {
     		TypeDeclaration typeDeclaration = (TypeDeclaration) bodyDeclaration;
@@ -159,45 +159,45 @@ public String add_getSource(NodeTarget target) throws Exception {
     		}
     	}
     }*/
-    // add inner TypeDeclaration with Action
-    String typeName = editor.getUniqueTypeName("SwingAction");
-    {
-      List<String> lines = Lists.newArrayList();
-      lines.add("private class " + typeName + " extends javax.swing.AbstractAction {");
-      lines.add("\tpublic " + typeName + "() {");
-      lines.add("\t\tputValue(NAME, \"" + typeName + "\");");
-      lines.add("\t\tputValue(SHORT_DESCRIPTION, \"Some short description\");");
-      lines.add("\t}");
-      lines.add("\tpublic void actionPerformed(java.awt.event.ActionEvent e) {");
-      lines.add("\t}");
-      lines.add("}");
-      editor.addTypeDeclaration(lines, innerTarget);
-    }
-    // create instance of Action
-    return "new " + typeName + "()";
-  }
-
-  @Override
-  public void add_setSourceExpression(Expression expression) throws Exception {
-    m_javaInfo.bindToExpression(expression);
-    setCreation((ClassInstanceCreation) expression);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IActionSupport
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public ASTNode getCreation() {
-    return m_superInvocation;
-  }
-
-  public ConstructorDescription getConstructorDescription() {
-    if (m_superInvocation != null) {
-      IMethodBinding binding = AstNodeUtils.getSuperBinding(m_superInvocation);
-      return m_typeDescription.getConstructor(binding);
-    }
-    return null;
-  }
+		// add inner TypeDeclaration with Action
+		String typeName = editor.getUniqueTypeName("SwingAction");
+		{
+			List<String> lines = Lists.newArrayList();
+			lines.add("private class " + typeName + " extends javax.swing.AbstractAction {");
+			lines.add("\tpublic " + typeName + "() {");
+			lines.add("\t\tputValue(NAME, \"" + typeName + "\");");
+			lines.add("\t\tputValue(SHORT_DESCRIPTION, \"Some short description\");");
+			lines.add("\t}");
+			lines.add("\tpublic void actionPerformed(java.awt.event.ActionEvent e) {");
+			lines.add("\t}");
+			lines.add("}");
+			editor.addTypeDeclaration(lines, innerTarget);
+		}
+		// create instance of Action
+		return "new " + typeName + "()";
+	}
+
+	@Override
+	public void add_setSourceExpression(Expression expression) throws Exception {
+		m_javaInfo.bindToExpression(expression);
+		setCreation((ClassInstanceCreation) expression);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IActionSupport
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public ASTNode getCreation() {
+		return m_superInvocation;
+	}
+
+	public ConstructorDescription getConstructorDescription() {
+		if (m_superInvocation != null) {
+			IMethodBinding binding = AstNodeUtils.getSuperBinding(m_superInvocation);
+			return m_typeDescription.getConstructor(binding);
+		}
+		return null;
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/bean/ActionJavaInfoParticipator.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/bean/ActionJavaInfoParticipator.java
index d2cd3cdd2..427e0754a 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/bean/ActionJavaInfoParticipator.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/bean/ActionJavaInfoParticipator.java
@@ -42,182 +42,182 @@
  * @coverage swing.model
  */
 public final class ActionJavaInfoParticipator implements IJavaInfoInitializationParticipator {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IJavaInfoInitializationParticipator
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void process(final JavaInfo javaInfo) throws Exception {
-    if (javaInfo.getDescription().getToolkit() == ToolkitProvider.DESCRIPTION) {
-      javaInfo.addBroadcastListener(new ObjectEventListener() {
-        @Override
-        public void addContextMenu(List<? extends ObjectInfo> objects,
-            ObjectInfo object,
-            IMenuManager manager) throws Exception {
-          if (objects != null) {
-            JavaInfo root = javaInfo.getRootJava();
-            if (javaInfo == root) {
-              contextMenu_contribute(root, objects, object, manager);
-            }
-          }
-        }
-      });
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IJavaInfoInitializationParticipator
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void process(final JavaInfo javaInfo) throws Exception {
+		if (javaInfo.getDescription().getToolkit() == ToolkitProvider.DESCRIPTION) {
+			javaInfo.addBroadcastListener(new ObjectEventListener() {
+				@Override
+				public void addContextMenu(List<? extends ObjectInfo> objects,
+						ObjectInfo object,
+						IMenuManager manager) throws Exception {
+					if (objects != null) {
+						JavaInfo root = javaInfo.getRootJava();
+						if (javaInfo == root) {
+							contextMenu_contribute(root, objects, object, manager);
+						}
+					}
+				}
+			});
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Context menu
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Contributes {@link IAction}'s into context menu.
-   */
-  private void contextMenu_contribute(JavaInfo root,
-      List<? extends ObjectInfo> objects,
-      ObjectInfo object,
-      IMenuManager manager) throws Exception {
-    boolean isFirst = objects.indexOf(object) == 0;
-    // prepare button
-    ComponentInfo button = contextMenu_getButton(object);
-    if (button == null) {
-      return;
-    }
-    // append sub-menu with Actions's
-    MenuManagerEx groupsManager =
-        new MenuManagerEx(ModelMessages.ActionJavaInfoParticipator_setActionManager);
-    groupsManager.setImage(Activator.getImage("info/Action/action.gif"));
-    manager.appendToGroup(IContextMenuConstants.GROUP_ADDITIONAL, groupsManager);
-    // append actions
-    contextMenu_noAction(groupsManager, root, objects, isFirst);
-    groupsManager.add(new Separator());
-    contextMenu_existingAction(groupsManager, root, objects, isFirst);
-    groupsManager.add(new Separator());
-    contextMenu_newAction(groupsManager, root, objects, isFirst);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Context menu
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Contributes {@link IAction}'s into context menu.
+	 */
+	private void contextMenu_contribute(JavaInfo root,
+			List<? extends ObjectInfo> objects,
+			ObjectInfo object,
+			IMenuManager manager) throws Exception {
+		boolean isFirst = objects.indexOf(object) == 0;
+		// prepare button
+		ComponentInfo button = contextMenu_getButton(object);
+		if (button == null) {
+			return;
+		}
+		// append sub-menu with Actions's
+		MenuManagerEx groupsManager =
+				new MenuManagerEx(ModelMessages.ActionJavaInfoParticipator_setActionManager);
+		groupsManager.setImage(Activator.getImage("info/Action/action.gif"));
+		manager.appendToGroup(IContextMenuConstants.GROUP_ADDITIONAL, groupsManager);
+		// append actions
+		contextMenu_noAction(groupsManager, root, objects, isFirst);
+		groupsManager.add(new Separator());
+		contextMenu_existingAction(groupsManager, root, objects, isFirst);
+		groupsManager.add(new Separator());
+		contextMenu_newAction(groupsManager, root, objects, isFirst);
+	}
 
-  /**
-   * Adds {@link IAction}'s for removing {@link ActionInfo} for all selected {@link AbstractButton}
-   * 's.
-   */
-  private void contextMenu_noAction(MenuManagerEx groupsManager,
-      JavaInfo root,
-      final List<? extends ObjectInfo> objects,
-      boolean isFirst) {
-    RunnableEx runnable = new RunnableEx() {
-      public void run() throws Exception {
-        for (ObjectInfo object : objects) {
-          ComponentInfo button = (ComponentInfo) object;
-          button.removeMethodInvocations("setAction(javax.swing.Action)");
-        }
-      }
-    };
-    IAction action =
-        contextMenu_createAction(
-            root,
-            isFirst,
-            ModelMessages.ActionJavaInfoParticipator_none,
-            IAction.AS_PUSH_BUTTON,
-            runnable);
-    groupsManager.add(action);
-  }
+	/**
+	 * Adds {@link IAction}'s for removing {@link ActionInfo} for all selected {@link AbstractButton}
+	 * 's.
+	 */
+	private void contextMenu_noAction(MenuManagerEx groupsManager,
+			JavaInfo root,
+			final List<? extends ObjectInfo> objects,
+			boolean isFirst) {
+		RunnableEx runnable = new RunnableEx() {
+			public void run() throws Exception {
+				for (ObjectInfo object : objects) {
+					ComponentInfo button = (ComponentInfo) object;
+					button.removeMethodInvocations("setAction(javax.swing.Action)");
+				}
+			}
+		};
+		IAction action =
+				contextMenu_createAction(
+						root,
+						isFirst,
+						ModelMessages.ActionJavaInfoParticipator_none,
+						IAction.AS_PUSH_BUTTON,
+						runnable);
+		groupsManager.add(action);
+	}
 
-  /**
-   * Adds {@link IAction}'s for setting for all selected {@link AbstractButton}'s newly created
-   * {@link ActionInfo}.
-   */
-  private void contextMenu_newAction(MenuManagerEx groupsManager,
-      final JavaInfo root,
-      final List<? extends ObjectInfo> objects,
-      boolean isFirst) {
-    RunnableEx runnable = new RunnableEx() {
-      public void run() throws Exception {
-        ActionInfo action = ActionInfo.createInner(root.getEditor());
-        for (ObjectInfo object : objects) {
-          ComponentInfo button = (ComponentInfo) object;
-          ActionInfo.setAction(button, action);
-        }
-      }
-    };
-    IAction action =
-        contextMenu_createAction(
-            root,
-            isFirst,
-            ModelMessages.ActionJavaInfoParticipator_new,
-            IAction.AS_PUSH_BUTTON,
-            runnable);
-    groupsManager.add(action);
-  }
+	/**
+	 * Adds {@link IAction}'s for setting for all selected {@link AbstractButton}'s newly created
+	 * {@link ActionInfo}.
+	 */
+	private void contextMenu_newAction(MenuManagerEx groupsManager,
+			final JavaInfo root,
+			final List<? extends ObjectInfo> objects,
+			boolean isFirst) {
+		RunnableEx runnable = new RunnableEx() {
+			public void run() throws Exception {
+				ActionInfo action = ActionInfo.createInner(root.getEditor());
+				for (ObjectInfo object : objects) {
+					ComponentInfo button = (ComponentInfo) object;
+					ActionInfo.setAction(button, action);
+				}
+			}
+		};
+		IAction action =
+				contextMenu_createAction(
+						root,
+						isFirst,
+						ModelMessages.ActionJavaInfoParticipator_new,
+						IAction.AS_PUSH_BUTTON,
+						runnable);
+		groupsManager.add(action);
+	}
 
-  /**
-   * Adds {@link IAction}'s for setting for all selected {@link AbstractButton}'s one of the
-   * existing {@link ActionInfo}'s.
-   */
-  private void contextMenu_existingAction(MenuManagerEx groupsManager,
-      JavaInfo root,
-      final List<? extends ObjectInfo> objects,
-      boolean isFirst) throws Exception {
-    for (final ActionInfo actionInfo : ActionContainerInfo.getActions(root)) {
-      String text = actionInfo.getPresentation().getText();
-      Image image = actionInfo.getPresentation().getIcon();
-      // add action
-      RunnableEx runnable = new RunnableEx() {
-        public void run() throws Exception {
-          for (ObjectInfo object : objects) {
-            ComponentInfo button = (ComponentInfo) object;
-            ActionInfo.setAction(button, actionInfo);
-          }
-        }
-      };
-      IAction action =
-          contextMenu_createAction(root, isFirst, text, IAction.AS_RADIO_BUTTON, runnable);
-      action.setImageDescriptor(new ImageImageDescriptor(image));
-      groupsManager.add(action);
-      // update check state
-      {
-        boolean hasAction = true;
-        for (ObjectInfo object : objects) {
-          ComponentInfo button = (ComponentInfo) object;
-          hasAction &= ((AbstractButton) button.getObject()).getAction() == actionInfo.getObject();
-        }
-        action.setChecked(hasAction);
-      }
-    }
-  }
+	/**
+	 * Adds {@link IAction}'s for setting for all selected {@link AbstractButton}'s one of the
+	 * existing {@link ActionInfo}'s.
+	 */
+	private void contextMenu_existingAction(MenuManagerEx groupsManager,
+			JavaInfo root,
+			final List<? extends ObjectInfo> objects,
+			boolean isFirst) throws Exception {
+		for (final ActionInfo actionInfo : ActionContainerInfo.getActions(root)) {
+			String text = actionInfo.getPresentation().getText();
+			Image image = actionInfo.getPresentation().getIcon();
+			// add action
+			RunnableEx runnable = new RunnableEx() {
+				public void run() throws Exception {
+					for (ObjectInfo object : objects) {
+						ComponentInfo button = (ComponentInfo) object;
+						ActionInfo.setAction(button, actionInfo);
+					}
+				}
+			};
+			IAction action =
+					contextMenu_createAction(root, isFirst, text, IAction.AS_RADIO_BUTTON, runnable);
+			action.setImageDescriptor(new ImageImageDescriptor(image));
+			groupsManager.add(action);
+			// update check state
+			{
+				boolean hasAction = true;
+				for (ObjectInfo object : objects) {
+					ComponentInfo button = (ComponentInfo) object;
+					hasAction &= ((AbstractButton) button.getObject()).getAction() == actionInfo.getObject();
+				}
+				action.setChecked(hasAction);
+			}
+		}
+	}
 
-  /**
-   * @return the action with given text/style that runs {@link RunnableEx} (if
-   *         <code>isFirst == true</code>), or just empty {@link IAction} with given text/style that
-   *         does nothing.
-   */
-  private IAction contextMenu_createAction(JavaInfo root,
-      boolean isFirst,
-      String text,
-      int style,
-      final RunnableEx runnable) {
-    if (isFirst) {
-      return new ObjectInfoAction(root, text, style) {
-        @Override
-        protected void runEx() throws Exception {
-          runnable.run();
-        }
-      };
-    } else {
-      return new Action(text, style) {
-      };
-    }
-  }
+	/**
+	 * @return the action with given text/style that runs {@link RunnableEx} (if
+	 *         <code>isFirst == true</code>), or just empty {@link IAction} with given text/style that
+	 *         does nothing.
+	 */
+	private IAction contextMenu_createAction(JavaInfo root,
+			boolean isFirst,
+			String text,
+			int style,
+			final RunnableEx runnable) {
+		if (isFirst) {
+			return new ObjectInfoAction(root, text, style) {
+				@Override
+				protected void runEx() throws Exception {
+					runnable.run();
+				}
+			};
+		} else {
+			return new Action(text, style) {
+			};
+		}
+	}
 
-  /**
-   * @return the {@link ComponentInfo} of button, or <code>null</code>.
-   */
-  private static ComponentInfo contextMenu_getButton(ObjectInfo object) {
-    if (object instanceof ComponentInfo) {
-      ComponentInfo component = (ComponentInfo) object;
-      if (AbstractButton.class.isAssignableFrom(component.getDescription().getComponentClass())) {
-        return component;
-      }
-    }
-    return null;
-  }
+	/**
+	 * @return the {@link ComponentInfo} of button, or <code>null</code>.
+	 */
+	private static ComponentInfo contextMenu_getButton(ObjectInfo object) {
+		if (object instanceof ComponentInfo) {
+			ComponentInfo component = (ComponentInfo) object;
+			if (AbstractButton.class.isAssignableFrom(component.getDescription().getComponentClass())) {
+				return component;
+			}
+		}
+		return null;
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/bean/ActionRootProcessor.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/bean/ActionRootProcessor.java
index d7f08d67f..2c5cfa7a5 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/bean/ActionRootProcessor.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/bean/ActionRootProcessor.java
@@ -22,27 +22,27 @@
  * @coverage swing.model
  */
 public final class ActionRootProcessor implements IRootProcessor {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final IRootProcessor INSTANCE = new ActionRootProcessor();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final IRootProcessor INSTANCE = new ActionRootProcessor();
 
-  private ActionRootProcessor() {
-  }
+	private ActionRootProcessor() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IRootProcessor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void process(final JavaInfo root, List<JavaInfo> components) throws Exception {
-    for (JavaInfo javaInfo : components) {
-      if (javaInfo instanceof ActionInfo) {
-        ActionInfo actionInfo = (ActionInfo) javaInfo;
-        ActionContainerInfo.get(root).addAction(actionInfo);
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IRootProcessor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void process(final JavaInfo root, List<JavaInfo> components) throws Exception {
+		for (JavaInfo javaInfo : components) {
+			if (javaInfo instanceof ActionInfo) {
+				ActionInfo actionInfo = (ActionInfo) javaInfo;
+				ActionContainerInfo.get(root).addAction(actionInfo);
+			}
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/bean/ButtonGroupContainerInfo.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/bean/ButtonGroupContainerInfo.java
index b1323590a..de90f693a 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/bean/ButtonGroupContainerInfo.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/bean/ButtonGroupContainerInfo.java
@@ -34,108 +34,108 @@
  * @coverage swing.model
  */
 public final class ButtonGroupContainerInfo extends ObjectInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the existing or new {@link ButtonGroupContainerInfo} for given root.
-   */
-  public static ButtonGroupContainerInfo get(JavaInfo root) throws Exception {
-    // try to find existing container
-    ButtonGroupContainerInfo container = findContainer(root);
-    if (container != null) {
-      return container;
-    }
-    // add new container
-    container = new ButtonGroupContainerInfo();
-    root.addChild(container);
-    return container;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the existing or new {@link ButtonGroupContainerInfo} for given root.
+	 */
+	public static ButtonGroupContainerInfo get(JavaInfo root) throws Exception {
+		// try to find existing container
+		ButtonGroupContainerInfo container = findContainer(root);
+		if (container != null) {
+			return container;
+		}
+		// add new container
+		container = new ButtonGroupContainerInfo();
+		root.addChild(container);
+		return container;
+	}
 
-  /**
-   * @return all {@link ButtonGroupInfo}'s for given root.
-   */
-  public static List<ButtonGroupInfo> getButtonGroups(JavaInfo root) {
-    ButtonGroupContainerInfo container = findContainer(root);
-    if (container != null) {
-      return container.getChildren(ButtonGroupInfo.class);
-    }
-    return Collections.emptyList();
-  }
+	/**
+	 * @return all {@link ButtonGroupInfo}'s for given root.
+	 */
+	public static List<ButtonGroupInfo> getButtonGroups(JavaInfo root) {
+		ButtonGroupContainerInfo container = findContainer(root);
+		if (container != null) {
+			return container.getChildren(ButtonGroupInfo.class);
+		}
+		return Collections.emptyList();
+	}
 
-  /**
-   * Creates new instance of {@link ButtonGroupInfo} and adds it to the
-   * {@link ButtonGroupContainerInfo}.
-   *
-   * @return the new added {@link ButtonGroupInfo}.
-   */
-  public static ButtonGroupInfo add(JavaInfo root, String className) throws Exception {
-    // create ButtonGroupInfo
-    ButtonGroupInfo buttonGroup;
-    {
-      AstEditor editor = root.getEditor();
-      buttonGroup =
-          (ButtonGroupInfo) JavaInfoUtils.createJavaInfo(
-              editor,
-              className,
-              new ConstructorCreationSupport());
-    }
-    // add ButtonGroupInfo to ButtonGroupContainerInfo
-    {
-      JavaInfoUtils.add(
-          buttonGroup,
-          new FieldInitializerVariableSupport(buttonGroup),
-          PureFlatStatementGenerator.INSTANCE,
-          AssociationObjects.empty(),
-          root,
-          null);
-      root.removeChild(buttonGroup);
-      ButtonGroupContainerInfo.get(root).addChild(buttonGroup);
-    }
-    //
-    return buttonGroup;
-  }
+	/**
+	 * Creates new instance of {@link ButtonGroupInfo} and adds it to the
+	 * {@link ButtonGroupContainerInfo}.
+	 *
+	 * @return the new added {@link ButtonGroupInfo}.
+	 */
+	public static ButtonGroupInfo add(JavaInfo root, String className) throws Exception {
+		// create ButtonGroupInfo
+		ButtonGroupInfo buttonGroup;
+		{
+			AstEditor editor = root.getEditor();
+			buttonGroup =
+					(ButtonGroupInfo) JavaInfoUtils.createJavaInfo(
+							editor,
+							className,
+							new ConstructorCreationSupport());
+		}
+		// add ButtonGroupInfo to ButtonGroupContainerInfo
+		{
+			JavaInfoUtils.add(
+					buttonGroup,
+					new FieldInitializerVariableSupport(buttonGroup),
+					PureFlatStatementGenerator.INSTANCE,
+					AssociationObjects.empty(),
+					root,
+					null);
+			root.removeChild(buttonGroup);
+			ButtonGroupContainerInfo.get(root).addChild(buttonGroup);
+		}
+		//
+		return buttonGroup;
+	}
 
-  /**
-   * @return find the existing {@link ButtonGroupContainerInfo} for given root.
-   */
-  private static ButtonGroupContainerInfo findContainer(JavaInfo root) {
-    for (ObjectInfo child : root.getChildren()) {
-      if (child instanceof ButtonGroupContainerInfo) {
-        return (ButtonGroupContainerInfo) child;
-      }
-    }
-    return null;
-  }
+	/**
+	 * @return find the existing {@link ButtonGroupContainerInfo} for given root.
+	 */
+	private static ButtonGroupContainerInfo findContainer(JavaInfo root) {
+		for (ObjectInfo child : root.getChildren()) {
+			if (child instanceof ButtonGroupContainerInfo) {
+				return (ButtonGroupContainerInfo) child;
+			}
+		}
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    return "{org.eclipse.wb.internal.swing.model.bean.ButtonGroupContainerInfo}";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		return "{org.eclipse.wb.internal.swing.model.bean.ButtonGroupContainerInfo}";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public IObjectPresentation getPresentation() {
-    return new DefaultObjectPresentation(this) {
-      public String getText() throws Exception {
-        return "(button groups)";
-      }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public IObjectPresentation getPresentation() {
+		return new DefaultObjectPresentation(this) {
+			public String getText() throws Exception {
+				return "(button groups)";
+			}
 
-      @Override
-      public Image getIcon() throws Exception {
-        return Activator.getImage("info/ButtonGroup/ButtonGroup_container.gif");
-      }
-    };
-  }
+			@Override
+			public Image getIcon() throws Exception {
+				return Activator.getImage("info/ButtonGroup/ButtonGroup_container.gif");
+			}
+		};
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/bean/ButtonGroupInfo.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/bean/ButtonGroupInfo.java
index 193e6f107..15e1476eb 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/bean/ButtonGroupInfo.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/bean/ButtonGroupInfo.java
@@ -43,106 +43,106 @@
  * @coverage swing.model
  */
 public final class ButtonGroupInfo extends JavaInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ButtonGroupInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ButtonGroupInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the list of {@link ObjectReferenceInfo}'s on {@link ComponentInfo}'s with
-   *         {@link AbstractButton} model, bounded to this {@link ButtonGroupInfo}.
-   */
-  public List<ObjectReferenceInfo> getButtons() throws Exception {
-    getChildren().clear();
-    List<ObjectReferenceInfo> buttons = Lists.newArrayList();
-    for (MethodInvocation addInvocation : getMethodInvocations("add(javax.swing.AbstractButton)")) {
-      Expression buttonReference = DomGenerics.arguments(addInvocation).get(0);
-      ComponentInfo button = (ComponentInfo) getRootJava().getChildRepresentedBy(buttonReference);
-      if (button != null) {
-        ObjectReferenceInfo reference = new ObjectReferenceInfo(button);
-        addChild(reference);
-        buttons.add(reference);
-      }
-    }
-    return buttons;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the list of {@link ObjectReferenceInfo}'s on {@link ComponentInfo}'s with
+	 *         {@link AbstractButton} model, bounded to this {@link ButtonGroupInfo}.
+	 */
+	public List<ObjectReferenceInfo> getButtons() throws Exception {
+		getChildren().clear();
+		List<ObjectReferenceInfo> buttons = Lists.newArrayList();
+		for (MethodInvocation addInvocation : getMethodInvocations("add(javax.swing.AbstractButton)")) {
+			Expression buttonReference = DomGenerics.arguments(addInvocation).get(0);
+			ComponentInfo button = (ComponentInfo) getRootJava().getChildRepresentedBy(buttonReference);
+			if (button != null) {
+				ObjectReferenceInfo reference = new ObjectReferenceInfo(button);
+				addChild(reference);
+				buttons.add(reference);
+			}
+		}
+		return buttons;
+	}
 
-  /**
-   * @return <code>true</code> if given {@link AbstractButton} is contained in this
-   *         {@link ButtonGroupInfo}.
-   */
-  public boolean hasButton(ComponentInfo button) {
-    for (MethodInvocation addInvocation : getMethodInvocations("add(javax.swing.AbstractButton)")) {
-      Expression buttonExpression = DomGenerics.arguments(addInvocation).get(0);
-      if (button.isRepresentedBy(buttonExpression)) {
-        return true;
-      }
-    }
-    // no such button
-    return false;
-  }
+	/**
+	 * @return <code>true</code> if given {@link AbstractButton} is contained in this
+	 *         {@link ButtonGroupInfo}.
+	 */
+	public boolean hasButton(ComponentInfo button) {
+		for (MethodInvocation addInvocation : getMethodInvocations("add(javax.swing.AbstractButton)")) {
+			Expression buttonExpression = DomGenerics.arguments(addInvocation).get(0);
+			if (button.isRepresentedBy(buttonExpression)) {
+				return true;
+			}
+		}
+		// no such button
+		return false;
+	}
 
-  /**
-   * Removes given {@link AbstractButton} from any {@link ButtonGroupInfo}.
-   */
-  public static void clearButton(ComponentInfo button) throws Exception {
-    assertIsButton(button);
-    for (ASTNode relatedNode : button.getRelatedNodes()) {
-      if (relatedNode.getLocationInParent() == MethodInvocation.ARGUMENTS_PROPERTY) {
-        MethodInvocation invocation = (MethodInvocation) relatedNode.getParent();
-        if (AstNodeUtils.getMethodSignature(invocation).equals("add(javax.swing.AbstractButton)")) {
-          button.getEditor().removeEnclosingStatement(invocation);
-        }
-      }
-    }
-  }
+	/**
+	 * Removes given {@link AbstractButton} from any {@link ButtonGroupInfo}.
+	 */
+	public static void clearButton(ComponentInfo button) throws Exception {
+		assertIsButton(button);
+		for (ASTNode relatedNode : button.getRelatedNodes()) {
+			if (relatedNode.getLocationInParent() == MethodInvocation.ARGUMENTS_PROPERTY) {
+				MethodInvocation invocation = (MethodInvocation) relatedNode.getParent();
+				if (AstNodeUtils.getMethodSignature(invocation).equals("add(javax.swing.AbstractButton)")) {
+					button.getEditor().removeEnclosingStatement(invocation);
+				}
+			}
+		}
+	}
 
-  /**
-   * Adds new {@link AbstractButton} to this {@link ButtonGroupInfo}.
-   */
-  public void addButton(ComponentInfo button) throws Exception {
-    assertIsButton(button);
-    clearButton(button);
-    // add to this ButtonGroupInfo
-    {
-      String addSource = TemplateUtils.format("{0}.add({1})", this, button);
-      MethodInvocation addInvocation = (MethodInvocation) button.addExpressionStatement(addSource);
-      addRelatedNode(addInvocation.getExpression());
-    }
-  }
+	/**
+	 * Adds new {@link AbstractButton} to this {@link ButtonGroupInfo}.
+	 */
+	public void addButton(ComponentInfo button) throws Exception {
+		assertIsButton(button);
+		clearButton(button);
+		// add to this ButtonGroupInfo
+		{
+			String addSource = TemplateUtils.format("{0}.add({1})", this, button);
+			MethodInvocation addInvocation = (MethodInvocation) button.addExpressionStatement(addSource);
+			addRelatedNode(addInvocation.getExpression());
+		}
+	}
 
-  /**
-   * Asserts that given {@link ComponentInfo} is {@link AbstractButton}.
-   */
-  private static void assertIsButton(ComponentInfo button) {
-    Assert.isLegal(AbstractButton.class.isAssignableFrom(button.getDescription().getComponentClass()));
-  }
+	/**
+	 * Asserts that given {@link ComponentInfo} is {@link AbstractButton}.
+	 */
+	private static void assertIsButton(ComponentInfo button) {
+		Assert.isLegal(AbstractButton.class.isAssignableFrom(button.getDescription().getComponentClass()));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final IObjectPresentation m_presentation = new DefaultJavaInfoPresentation(this) {
-    @Override
-    public List<ObjectInfo> getChildrenTree() throws Exception {
-      return new ArrayList<ObjectInfo>(getButtons());
-    }
-  };
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final IObjectPresentation m_presentation = new DefaultJavaInfoPresentation(this) {
+		@Override
+		public List<ObjectInfo> getChildrenTree() throws Exception {
+			return new ArrayList<ObjectInfo>(getButtons());
+		}
+	};
 
-  @Override
-  public IObjectPresentation getPresentation() {
-    return m_presentation;
-  }
+	@Override
+	public IObjectPresentation getPresentation() {
+		return m_presentation;
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/bean/ButtonGroupJavaInfoParticipator.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/bean/ButtonGroupJavaInfoParticipator.java
index 3d3649691..8bb7e2570 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/bean/ButtonGroupJavaInfoParticipator.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/bean/ButtonGroupJavaInfoParticipator.java
@@ -47,215 +47,215 @@
  * @coverage swing.model
  */
 public final class ButtonGroupJavaInfoParticipator implements IJavaInfoInitializationParticipator {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IJavaInfoInitializationParticipator
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void process(final JavaInfo javaInfo) throws Exception {
-    if (javaInfo.getDescription().getToolkit() == ToolkitProvider.DESCRIPTION) {
-      javaInfo.addBroadcastListener(new ObjectEventListener() {
-        @Override
-        public void addContextMenu(List<? extends ObjectInfo> objects,
-            ObjectInfo object,
-            IMenuManager manager) throws Exception {
-          if (objects != null) {
-            JavaInfo root = javaInfo.getRootJava();
-            if (javaInfo == root) {
-              contextMenu_contribute(root, objects, object, manager);
-            }
-          }
-        }
-      });
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IJavaInfoInitializationParticipator
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void process(final JavaInfo javaInfo) throws Exception {
+		if (javaInfo.getDescription().getToolkit() == ToolkitProvider.DESCRIPTION) {
+			javaInfo.addBroadcastListener(new ObjectEventListener() {
+				@Override
+				public void addContextMenu(List<? extends ObjectInfo> objects,
+						ObjectInfo object,
+						IMenuManager manager) throws Exception {
+					if (objects != null) {
+						JavaInfo root = javaInfo.getRootJava();
+						if (javaInfo == root) {
+							contextMenu_contribute(root, objects, object, manager);
+						}
+					}
+				}
+			});
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Context menu
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Contributes {@link IAction}'s into context menu.
-   */
-  private void contextMenu_contribute(JavaInfo root,
-      List<? extends ObjectInfo> objects,
-      ObjectInfo object,
-      IMenuManager manager) {
-    boolean isFirst = objects.indexOf(object) == 0;
-    // prepare button
-    ComponentInfo button = contextMenu_getButton(object);
-    if (button == null) {
-      return;
-    }
-    // append sub-menu with ButtonGroup's
-    MenuManagerEx groupsManager =
-        new MenuManagerEx(ModelMessages.ButtonGroupJavaInfoParticipator_setGroupManager);
-    groupsManager.setImage(Activator.getImage("info/ButtonGroup/ButtonGroup.gif"));
-    manager.appendToGroup(IContextMenuConstants.GROUP_ADDITIONAL, groupsManager);
-    // append actions
-    contextMenu_noButtonGroup(groupsManager, root, objects, isFirst);
-    groupsManager.add(new Separator());
-    contextMenu_existingButtonGroups(groupsManager, root, objects, button, isFirst);
-    groupsManager.add(new Separator());
-    contextMenu_newButtonGroup(groupsManager, root, objects, isFirst);
-    contextMenu_newCustomButtonGroup(groupsManager, root, objects, isFirst);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Context menu
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Contributes {@link IAction}'s into context menu.
+	 */
+	private void contextMenu_contribute(JavaInfo root,
+			List<? extends ObjectInfo> objects,
+			ObjectInfo object,
+			IMenuManager manager) {
+		boolean isFirst = objects.indexOf(object) == 0;
+		// prepare button
+		ComponentInfo button = contextMenu_getButton(object);
+		if (button == null) {
+			return;
+		}
+		// append sub-menu with ButtonGroup's
+		MenuManagerEx groupsManager =
+				new MenuManagerEx(ModelMessages.ButtonGroupJavaInfoParticipator_setGroupManager);
+		groupsManager.setImage(Activator.getImage("info/ButtonGroup/ButtonGroup.gif"));
+		manager.appendToGroup(IContextMenuConstants.GROUP_ADDITIONAL, groupsManager);
+		// append actions
+		contextMenu_noButtonGroup(groupsManager, root, objects, isFirst);
+		groupsManager.add(new Separator());
+		contextMenu_existingButtonGroups(groupsManager, root, objects, button, isFirst);
+		groupsManager.add(new Separator());
+		contextMenu_newButtonGroup(groupsManager, root, objects, isFirst);
+		contextMenu_newCustomButtonGroup(groupsManager, root, objects, isFirst);
+	}
 
-  /**
-   * Adds {@link IAction}'s for setting removing all selected {@link AbstractButton}'s from any
-   * {@link ButtonGroupInfo}'s.
-   */
-  private void contextMenu_noButtonGroup(MenuManagerEx groupsManager,
-      JavaInfo root,
-      final List<? extends ObjectInfo> objects,
-      boolean isFirst) {
-    RunnableEx runnable = new RunnableEx() {
-      public void run() throws Exception {
-        for (ObjectInfo button : objects) {
-          ButtonGroupInfo.clearButton((ComponentInfo) button);
-        }
-      }
-    };
-    IAction action =
-        contextMenu_createAction(
-            root,
-            isFirst,
-            ModelMessages.ButtonGroupJavaInfoParticipator_none,
-            IAction.AS_PUSH_BUTTON,
-            runnable);
-    groupsManager.add(action);
-  }
+	/**
+	 * Adds {@link IAction}'s for setting removing all selected {@link AbstractButton}'s from any
+	 * {@link ButtonGroupInfo}'s.
+	 */
+	private void contextMenu_noButtonGroup(MenuManagerEx groupsManager,
+			JavaInfo root,
+			final List<? extends ObjectInfo> objects,
+			boolean isFirst) {
+		RunnableEx runnable = new RunnableEx() {
+			public void run() throws Exception {
+				for (ObjectInfo button : objects) {
+					ButtonGroupInfo.clearButton((ComponentInfo) button);
+				}
+			}
+		};
+		IAction action =
+				contextMenu_createAction(
+						root,
+						isFirst,
+						ModelMessages.ButtonGroupJavaInfoParticipator_none,
+						IAction.AS_PUSH_BUTTON,
+						runnable);
+		groupsManager.add(action);
+	}
 
-  /**
-   * Adds {@link IAction}'s for setting for all selected {@link AbstractButton}'s newly created
-   * {@link ButtonGroupInfo}.
-   */
-  private void contextMenu_newButtonGroup(MenuManagerEx groupsManager,
-      final JavaInfo root,
-      final List<? extends ObjectInfo> objects,
-      boolean isFirst) {
-    RunnableEx runnable = new RunnableEx() {
-      public void run() throws Exception {
-        ButtonGroupInfo buttonGroup = ButtonGroupContainerInfo.add(root, "javax.swing.ButtonGroup");
-        for (ObjectInfo button : objects) {
-          buttonGroup.addButton((ComponentInfo) button);
-        }
-      }
-    };
-    IAction action =
-        contextMenu_createAction(
-            root,
-            isFirst,
-            ModelMessages.ButtonGroupJavaInfoParticipator_newStandard,
-            IAction.AS_PUSH_BUTTON,
-            runnable);
-    groupsManager.add(action);
-  }
+	/**
+	 * Adds {@link IAction}'s for setting for all selected {@link AbstractButton}'s newly created
+	 * {@link ButtonGroupInfo}.
+	 */
+	private void contextMenu_newButtonGroup(MenuManagerEx groupsManager,
+			final JavaInfo root,
+			final List<? extends ObjectInfo> objects,
+			boolean isFirst) {
+		RunnableEx runnable = new RunnableEx() {
+			public void run() throws Exception {
+				ButtonGroupInfo buttonGroup = ButtonGroupContainerInfo.add(root, "javax.swing.ButtonGroup");
+				for (ObjectInfo button : objects) {
+					buttonGroup.addButton((ComponentInfo) button);
+				}
+			}
+		};
+		IAction action =
+				contextMenu_createAction(
+						root,
+						isFirst,
+						ModelMessages.ButtonGroupJavaInfoParticipator_newStandard,
+						IAction.AS_PUSH_BUTTON,
+						runnable);
+		groupsManager.add(action);
+	}
 
-  /**
-   * Adds {@link IAction}'s for setting for all selected {@link AbstractButton}'s newly created
-   * custom {@link ButtonGroupInfo}.
-   */
-  private void contextMenu_newCustomButtonGroup(MenuManagerEx groupsManager,
-      final JavaInfo root,
-      final List<? extends ObjectInfo> objects,
-      boolean isFirst) {
-    RunnableEx runnable = new RunnableEx() {
-      public void run() throws Exception {
-        String className;
-        {
-          IJavaProject javaProject = root.getEditor().getJavaProject();
-          IType type = JdtUiUtils.selectClassType(DesignerPlugin.getShell(), javaProject);
-          if (type == null) {
-            return;
-          }
-          {
-            ITypeHierarchy supertypeHierarchy = type.newSupertypeHierarchy(null);
-            if (!supertypeHierarchy.contains(javaProject.findType("javax.swing.ButtonGroup"))) {
-              return;
-            }
-          }
-          className = type.getFullyQualifiedName();
-        }
-        //
-        ButtonGroupInfo buttonGroup = ButtonGroupContainerInfo.add(root, className);
-        for (ObjectInfo button : objects) {
-          buttonGroup.addButton((ComponentInfo) button);
-        }
-      }
-    };
-    IAction action =
-        contextMenu_createAction(
-            root,
-            isFirst,
-            ModelMessages.ButtonGroupJavaInfoParticipator_newCustom,
-            IAction.AS_PUSH_BUTTON,
-            runnable);
-    groupsManager.add(action);
-  }
+	/**
+	 * Adds {@link IAction}'s for setting for all selected {@link AbstractButton}'s newly created
+	 * custom {@link ButtonGroupInfo}.
+	 */
+	private void contextMenu_newCustomButtonGroup(MenuManagerEx groupsManager,
+			final JavaInfo root,
+			final List<? extends ObjectInfo> objects,
+			boolean isFirst) {
+		RunnableEx runnable = new RunnableEx() {
+			public void run() throws Exception {
+				String className;
+				{
+					IJavaProject javaProject = root.getEditor().getJavaProject();
+					IType type = JdtUiUtils.selectClassType(DesignerPlugin.getShell(), javaProject);
+					if (type == null) {
+						return;
+					}
+					{
+						ITypeHierarchy supertypeHierarchy = type.newSupertypeHierarchy(null);
+						if (!supertypeHierarchy.contains(javaProject.findType("javax.swing.ButtonGroup"))) {
+							return;
+						}
+					}
+					className = type.getFullyQualifiedName();
+				}
+				//
+				ButtonGroupInfo buttonGroup = ButtonGroupContainerInfo.add(root, className);
+				for (ObjectInfo button : objects) {
+					buttonGroup.addButton((ComponentInfo) button);
+				}
+			}
+		};
+		IAction action =
+				contextMenu_createAction(
+						root,
+						isFirst,
+						ModelMessages.ButtonGroupJavaInfoParticipator_newCustom,
+						IAction.AS_PUSH_BUTTON,
+						runnable);
+		groupsManager.add(action);
+	}
 
-  /**
-   * Adds {@link IAction}'s for setting for all selected {@link AbstractButton}'s one of the
-   * existing {@link ButtonGroupInfo}'s.
-   */
-  private void contextMenu_existingButtonGroups(MenuManagerEx groupsManager,
-      JavaInfo root,
-      final List<? extends ObjectInfo> objects,
-      ComponentInfo button,
-      boolean isFirst) {
-    for (final ButtonGroupInfo buttonGroup : ButtonGroupContainerInfo.getButtonGroups(root)) {
-      String text = buttonGroup.getVariableSupport().getName();
-      Image image = buttonGroup.getDescription().getIcon();
-      // add action
-      RunnableEx runnable = new RunnableEx() {
-        public void run() throws Exception {
-          for (ObjectInfo button : objects) {
-            buttonGroup.addButton((ComponentInfo) button);
-          }
-        }
-      };
-      IAction action =
-          contextMenu_createAction(root, isFirst, text, IAction.AS_RADIO_BUTTON, runnable);
-      action.setImageDescriptor(new ImageImageDescriptor(image));
-      action.setChecked(buttonGroup.hasButton(button));
-      groupsManager.add(action);
-    }
-  }
+	/**
+	 * Adds {@link IAction}'s for setting for all selected {@link AbstractButton}'s one of the
+	 * existing {@link ButtonGroupInfo}'s.
+	 */
+	private void contextMenu_existingButtonGroups(MenuManagerEx groupsManager,
+			JavaInfo root,
+			final List<? extends ObjectInfo> objects,
+			ComponentInfo button,
+			boolean isFirst) {
+		for (final ButtonGroupInfo buttonGroup : ButtonGroupContainerInfo.getButtonGroups(root)) {
+			String text = buttonGroup.getVariableSupport().getName();
+			Image image = buttonGroup.getDescription().getIcon();
+			// add action
+			RunnableEx runnable = new RunnableEx() {
+				public void run() throws Exception {
+					for (ObjectInfo button : objects) {
+						buttonGroup.addButton((ComponentInfo) button);
+					}
+				}
+			};
+			IAction action =
+					contextMenu_createAction(root, isFirst, text, IAction.AS_RADIO_BUTTON, runnable);
+			action.setImageDescriptor(new ImageImageDescriptor(image));
+			action.setChecked(buttonGroup.hasButton(button));
+			groupsManager.add(action);
+		}
+	}
 
-  /**
-   * @return the action with given text/style that runs {@link RunnableEx} (if
-   *         <code>isFirst == true</code> ), or just empty {@link IAction} with given text/style
-   *         that does nothing.
-   */
-  private IAction contextMenu_createAction(JavaInfo root,
-      boolean isFirst,
-      String text,
-      int style,
-      final RunnableEx runnable) {
-    if (isFirst) {
-      return new ObjectInfoAction(root, text, style) {
-        @Override
-        protected void runEx() throws Exception {
-          runnable.run();
-        }
-      };
-    } else {
-      return new Action(text, style) {
-      };
-    }
-  }
+	/**
+	 * @return the action with given text/style that runs {@link RunnableEx} (if
+	 *         <code>isFirst == true</code> ), or just empty {@link IAction} with given text/style
+	 *         that does nothing.
+	 */
+	private IAction contextMenu_createAction(JavaInfo root,
+			boolean isFirst,
+			String text,
+			int style,
+			final RunnableEx runnable) {
+		if (isFirst) {
+			return new ObjectInfoAction(root, text, style) {
+				@Override
+				protected void runEx() throws Exception {
+					runnable.run();
+				}
+			};
+		} else {
+			return new Action(text, style) {
+			};
+		}
+	}
 
-  /**
-   * @return the {@link ComponentInfo} of button, or <code>null</code>.
-   */
-  private static ComponentInfo contextMenu_getButton(ObjectInfo object) {
-    if (object instanceof ComponentInfo) {
-      ComponentInfo component = (ComponentInfo) object;
-      if (AbstractButton.class.isAssignableFrom(component.getDescription().getComponentClass())) {
-        return component;
-      }
-    }
-    return null;
-  }
+	/**
+	 * @return the {@link ComponentInfo} of button, or <code>null</code>.
+	 */
+	private static ComponentInfo contextMenu_getButton(ObjectInfo object) {
+		if (object instanceof ComponentInfo) {
+			ComponentInfo component = (ComponentInfo) object;
+			if (AbstractButton.class.isAssignableFrom(component.getDescription().getComponentClass())) {
+				return component;
+			}
+		}
+		return null;
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/bean/ButtonGroupRootProcessor.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/bean/ButtonGroupRootProcessor.java
index db746de78..23f6c9834 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/bean/ButtonGroupRootProcessor.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/bean/ButtonGroupRootProcessor.java
@@ -23,28 +23,28 @@
  * @coverage swing.model
  */
 public final class ButtonGroupRootProcessor implements IRootProcessor {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final IRootProcessor INSTANCE = new ButtonGroupRootProcessor();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final IRootProcessor INSTANCE = new ButtonGroupRootProcessor();
 
-  private ButtonGroupRootProcessor() {
-  }
+	private ButtonGroupRootProcessor() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IRootProcessor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void process(final JavaInfo root, List<JavaInfo> components) throws Exception {
-    for (JavaInfo javaInfo : components) {
-      if (javaInfo instanceof ButtonGroupInfo) {
-        ButtonGroupInfo buttonGroupInfo = (ButtonGroupInfo) javaInfo;
-        buttonGroupInfo.setAssociation(new EmptyAssociation());
-        ButtonGroupContainerInfo.get(root).addChild(buttonGroupInfo);
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IRootProcessor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void process(final JavaInfo root, List<JavaInfo> components) throws Exception {
+		for (JavaInfo javaInfo : components) {
+			if (javaInfo instanceof ButtonGroupInfo) {
+				ButtonGroupInfo buttonGroupInfo = (ButtonGroupInfo) javaInfo;
+				buttonGroupInfo.setAssociation(new EmptyAssociation());
+				ButtonGroupContainerInfo.get(root).addChild(buttonGroupInfo);
+			}
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/bean/IActionSupport.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/bean/IActionSupport.java
index efd5963ca..05d5fa603 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/bean/IActionSupport.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/bean/IActionSupport.java
@@ -26,18 +26,18 @@
  * @coverage swing.model
  */
 public interface IActionSupport {
-  /**
-   * @return the {@link ASTNode} of action.
-   */
-  ASTNode getCreation();
+	/**
+	 * @return the {@link ASTNode} of action.
+	 */
+	ASTNode getCreation();
 
-  /**
-   * @return list {@link Block} containing initialization source code.
-   */
-  List<Block> getInitializationBlocks() throws Exception;
+	/**
+	 * @return list {@link Block} containing initialization source code.
+	 */
+	List<Block> getInitializationBlocks() throws Exception;
 
-  /**
-   * @return {@link ConstructorDescription} for action instance creation.
-   */
-  ConstructorDescription getConstructorDescription() throws Exception;
+	/**
+	 * @return {@link ConstructorDescription} for action instance creation.
+	 */
+	ConstructorDescription getConstructorDescription() throws Exception;
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/AbstractPositionContainerInfo.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/AbstractPositionContainerInfo.java
index 5cf9c1264..e5a94a908 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/AbstractPositionContainerInfo.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/AbstractPositionContainerInfo.java
@@ -32,60 +32,60 @@
  * @coverage swing.model
  */
 public abstract class AbstractPositionContainerInfo extends ContainerInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractPositionContainerInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractPositionContainerInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Creates new {@link ComponentInfo} and associates using given method.
-   */
-  public final void command_CREATE(ComponentInfo component, String methodName) throws Exception {
-    JavaInfoUtils.add(component, getAssociation(methodName), this, null);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Creates new {@link ComponentInfo} and associates using given method.
+	 */
+	public final void command_CREATE(ComponentInfo component, String methodName) throws Exception {
+		JavaInfoUtils.add(component, getAssociation(methodName), this, null);
+	}
 
-  /**
-   * Moves child {@link ComponentInfo} to given position.
-   */
-  public final void command_MOVE(ComponentInfo component, String methodName) throws Exception {
-    MethodInvocation invocation = getAssociationInvocation(component);
-    getEditor().replaceInvocationName(invocation, methodName);
-  }
+	/**
+	 * Moves child {@link ComponentInfo} to given position.
+	 */
+	public final void command_MOVE(ComponentInfo component, String methodName) throws Exception {
+		MethodInvocation invocation = getAssociationInvocation(component);
+		getEditor().replaceInvocationName(invocation, methodName);
+	}
 
-  /**
-   * Reparents {@link ComponentInfo} to given position.
-   */
-  public final void command_ADD(ComponentInfo component, String methodName) throws Exception {
-    JavaInfoUtils.move(component, getAssociation(methodName), this, null);
-  }
+	/**
+	 * Reparents {@link ComponentInfo} to given position.
+	 */
+	public final void command_ADD(ComponentInfo component, String methodName) throws Exception {
+		JavaInfoUtils.move(component, getAssociation(methodName), this, null);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link AssociationObject} for associating using given method.
-   */
-  private static AssociationObject getAssociation(String methodName) throws Exception {
-    return AssociationObjects.invocationChild("%parent%." + methodName + "(%child%)", false);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link AssociationObject} for associating using given method.
+	 */
+	private static AssociationObject getAssociation(String methodName) throws Exception {
+		return AssociationObjects.invocationChild("%parent%." + methodName + "(%child%)", false);
+	}
 
-  /**
-   * @return the {@link MethodInvocation} of given {@link JavaInfo} association.
-   */
-  private static MethodInvocation getAssociationInvocation(JavaInfo javaInfo) {
-    return ((InvocationChildAssociation) javaInfo.getAssociation()).getInvocation();
-  }
+	/**
+	 * @return the {@link MethodInvocation} of given {@link JavaInfo} association.
+	 */
+	private static MethodInvocation getAssociationInvocation(JavaInfo javaInfo) {
+		return ((InvocationChildAssociation) javaInfo.getAssociation()).getInvocation();
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/AppletInfo.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/AppletInfo.java
index 64f2aa5b6..78dea3d3f 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/AppletInfo.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/AppletInfo.java
@@ -28,25 +28,25 @@
  * @coverage swing.model
  */
 public final class AppletInfo extends ContainerInfo implements IJavaInfoRendering {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AppletInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-    JavaInfoUtils.scheduleSpecialRendering(this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AppletInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+		JavaInfoUtils.scheduleSpecialRendering(this);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IJavaInfoRendering
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void render() throws Exception {
-    Object applet = getObject();
-    ReflectionUtils.invokeMethod(applet, "init()");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IJavaInfoRendering
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void render() throws Exception {
+		Object applet = getObject();
+		ReflectionUtils.invokeMethod(applet, "init()");
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/ComponentInfo.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/ComponentInfo.java
index 003f1b1d6..5aa633497 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/ComponentInfo.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/ComponentInfo.java
@@ -52,229 +52,229 @@
  * @coverage swing.model
  */
 public class ComponentInfo extends AbstractComponentInfo {
-  private static final Class<?>[] EXPOSED_TYPES = {java.awt.Component.class};
+	private static final Class<?>[] EXPOSED_TYPES = {java.awt.Component.class};
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ComponentInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-    addBroadcastListeners();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ComponentInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+		addBroadcastListeners();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Initializing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds listeners to the {@link BroadcastSupport}.
-   */
-  private void addBroadcastListeners() {
-    addBroadcastListener(new ObjectEventListener() {
-      @Override
-      public void addContextMenu(List<? extends ObjectInfo> objects,
-          ObjectInfo object,
-          IMenuManager manager) throws Exception {
-        if (object == ComponentInfo.this) {
-          ExposeComponentSupport.contribute(
-              ComponentInfo.this,
-              manager,
-              ModelMessages.ComponentInfo_exposeComponent);
-          MorphingSupport.contribute("java.awt.Component", ComponentInfo.this, manager);
-          FactoryActionsSupport.contribute(ComponentInfo.this, manager);
-          RenameConvertSupport.contribute(objects, manager);
-        }
-      }
-    });
-    addBroadcastListener(new JavaEventListener() {
-      @Override
-      public void variable_setName(AbstractNamedVariableSupport variableSupport,
-          String oldName,
-          String newName) throws Exception {
-        if (variableSupport.getJavaInfo() == ComponentInfo.this) {
-          setVariableNameAs_setName(newName);
-        }
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Initializing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds listeners to the {@link BroadcastSupport}.
+	 */
+	private void addBroadcastListeners() {
+		addBroadcastListener(new ObjectEventListener() {
+			@Override
+			public void addContextMenu(List<? extends ObjectInfo> objects,
+					ObjectInfo object,
+					IMenuManager manager) throws Exception {
+				if (object == ComponentInfo.this) {
+					ExposeComponentSupport.contribute(
+							ComponentInfo.this,
+							manager,
+							ModelMessages.ComponentInfo_exposeComponent);
+					MorphingSupport.contribute("java.awt.Component", ComponentInfo.this, manager);
+					FactoryActionsSupport.contribute(ComponentInfo.this, manager);
+					RenameConvertSupport.contribute(objects, manager);
+				}
+			}
+		});
+		addBroadcastListener(new JavaEventListener() {
+			@Override
+			public void variable_setName(AbstractNamedVariableSupport variableSupport,
+					String oldName,
+					String newName) throws Exception {
+				if (variableSupport.getJavaInfo() == ComponentInfo.this) {
+					setVariableNameAs_setName(newName);
+				}
+			}
+		});
+	}
 
-  @Override
-  public void createExposedChildren() throws Exception {
-    super.createExposedChildren();
-    JavaInfoUtils.addExposedChildren(this, EXPOSED_TYPES);
-  }
+	@Override
+	public void createExposedChildren() throws Exception {
+		super.createExposedChildren();
+		JavaInfoUtils.addExposedChildren(this, EXPOSED_TYPES);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void execRefreshOperation(final RunnableEx runnableEx) throws Exception {
-    SwingUtils.runLaterAndWait(runnableEx);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void execRefreshOperation(final RunnableEx runnableEx) throws Exception {
+		SwingUtils.runLaterAndWait(runnableEx);
+	}
 
-  @Override
-  public void refresh_dispose() throws Exception {
-    if (getObject() instanceof Window) {
-      SwingImageUtils.disposeWindow((Window) getObject());
-    }
-    super.refresh_dispose();
-  }
+	@Override
+	public void refresh_dispose() throws Exception {
+		if (getObject() instanceof Window) {
+			SwingImageUtils.disposeWindow((Window) getObject());
+		}
+		super.refresh_dispose();
+	}
 
-  /**
-   * Invokes {@link #refresh_fetch()} inherited from {@link ObjectInfo}, to process all children.
-   */
-  protected final void refresh_fetch_super() throws Exception {
-    super.refresh_fetch();
-  }
+	/**
+	 * Invokes {@link #refresh_fetch()} inherited from {@link ObjectInfo}, to process all children.
+	 */
+	protected final void refresh_fetch_super() throws Exception {
+		super.refresh_fetch();
+	}
 
-  @Override
-  protected void refresh_fetch() throws Exception {
-    Component component = getComponent();
-    refresh_fetch(this, component, new RunnableEx() {
-      public void run() throws Exception {
-        ComponentInfo.super.refresh_fetch();
-      }
-    });
-  }
+	@Override
+	protected void refresh_fetch() throws Exception {
+		Component component = getComponent();
+		refresh_fetch(this, component, new RunnableEx() {
+			public void run() throws Exception {
+				ComponentInfo.super.refresh_fetch();
+			}
+		});
+	}
 
-  public static void refresh_fetch(AbstractComponentInfo model,
-      Component component,
-      RunnableEx superRefreshFetch) throws Exception {
-    // create shot for top component
-    SwingScreenshotMaker screenshotMaker = null;
-    try {
-      if (!(model instanceof ComponentInfo) || ((ComponentInfo) model).isSwingRoot()) {
-        screenshotMaker = new SwingScreenshotMaker(model, component);
-        screenshotMaker.makeShots();
-      }
-      // fetch bounds
-      {
-        java.awt.Rectangle bounds = component.getBounds();
-        // store model bounds
-        model.setModelBounds(CoordinateUtils.get(bounds));
-        // convert location in parent "bounds" coordinates
-        if (model.getParent() instanceof AbstractComponentInfo) {
-          AbstractComponentInfo parentModel = (AbstractComponentInfo) model.getParent();
-          Object parentObject = parentModel.getComponentObject();
-          if (parentObject instanceof Component) {
-            Component parentComponent = (Component) parentObject;
-            java.awt.Point p_component = SwingUtils.getScreenLocation(component);
-            java.awt.Point p_parent = SwingUtils.getScreenLocation(parentComponent);
-            bounds.x = p_component.x - p_parent.x;
-            bounds.y = p_component.y - p_parent.y;
-          }
-        }
-        // remember bounds
-        model.setBounds(CoordinateUtils.get(bounds));
-      }
-      // fetch preferred size
-      model.setPreferredSize(CoordinateUtils.get(component.getPreferredSize()));
-      // continue, process children
-      if (superRefreshFetch != null) {
-        superRefreshFetch.run();
-      }
-    } finally {
-      if (screenshotMaker != null) {
-        screenshotMaker.dispose();
-      }
-    }
-  }
+	public static void refresh_fetch(AbstractComponentInfo model,
+			Component component,
+			RunnableEx superRefreshFetch) throws Exception {
+		// create shot for top component
+		SwingScreenshotMaker screenshotMaker = null;
+		try {
+			if (!(model instanceof ComponentInfo) || ((ComponentInfo) model).isSwingRoot()) {
+				screenshotMaker = new SwingScreenshotMaker(model, component);
+				screenshotMaker.makeShots();
+			}
+			// fetch bounds
+			{
+				java.awt.Rectangle bounds = component.getBounds();
+				// store model bounds
+				model.setModelBounds(CoordinateUtils.get(bounds));
+				// convert location in parent "bounds" coordinates
+				if (model.getParent() instanceof AbstractComponentInfo) {
+					AbstractComponentInfo parentModel = (AbstractComponentInfo) model.getParent();
+					Object parentObject = parentModel.getComponentObject();
+					if (parentObject instanceof Component) {
+						Component parentComponent = (Component) parentObject;
+						java.awt.Point p_component = SwingUtils.getScreenLocation(component);
+						java.awt.Point p_parent = SwingUtils.getScreenLocation(parentComponent);
+						bounds.x = p_component.x - p_parent.x;
+						bounds.y = p_component.y - p_parent.y;
+					}
+				}
+				// remember bounds
+				model.setBounds(CoordinateUtils.get(bounds));
+			}
+			// fetch preferred size
+			model.setPreferredSize(CoordinateUtils.get(component.getPreferredSize()));
+			// continue, process children
+			if (superRefreshFetch != null) {
+				superRefreshFetch.run();
+			}
+		} finally {
+			if (screenshotMaker != null) {
+				screenshotMaker.dispose();
+			}
+		}
+	}
 
-  /**
-   * @return <code>true</code> if this {@link ComponentInfo} is root of Swing hierarchy. Usually
-   *         this means that it is just root {@link ObjectInfo}, but SWT_AWT Frame overrides this.
-   */
-  protected boolean isSwingRoot() {
-    return isRoot();
-  }
+	/**
+	 * @return <code>true</code> if this {@link ComponentInfo} is root of Swing hierarchy. Usually
+	 *         this means that it is just root {@link ObjectInfo}, but SWT_AWT Frame overrides this.
+	 */
+	protected boolean isSwingRoot() {
+		return isRoot();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the AWT {@link Component} object for this model.
-   */
-  public final Component getComponent() {
-    if (getObject() == null && getParent() == null) {
-      return getLiveObject();
-    }
-    return (Component) getObject();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the AWT {@link Component} object for this model.
+	 */
+	public final Component getComponent() {
+		if (getObject() == null && getParent() == null) {
+			return getLiveObject();
+		}
+		return (Component) getObject();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // TopBoundsSupport
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected TopBoundsSupport createTopBoundsSupport() {
-    return new SwingTopBoundsSupport(this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// TopBoundsSupport
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected TopBoundsSupport createTopBoundsSupport() {
+		return new SwingTopBoundsSupport(this);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Rename
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds/updates {@link Component#setName(String)} with new variable name.
-   *
-   * @param newName
-   *          the new variable name
-   */
-  private void setVariableNameAs_setName(String newName) throws Exception {
-    if (getDescription().getToolkit().getPreferences().getBoolean(
-        IPreferenceConstants.P_VARIABLE_IN_COMPONENT)) {
-      String valueSource = StringConverter.INSTANCE.toJavaSource(this, newName);
-      // try to find existing setName()
-      {
-        MethodInvocation invocation = getMethodInvocation("setName(java.lang.String)");
-        if (invocation != null) {
-          Expression valueExpression = (Expression) invocation.arguments().get(0);
-          getEditor().replaceExpression(valueExpression, valueSource);
-          return;
-        }
-      }
-      // add new setName()
-      addMethodInvocation("setName(java.lang.String)", valueSource);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Rename
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds/updates {@link Component#setName(String)} with new variable name.
+	 *
+	 * @param newName
+	 *          the new variable name
+	 */
+	private void setVariableNameAs_setName(String newName) throws Exception {
+		if (getDescription().getToolkit().getPreferences().getBoolean(
+				IPreferenceConstants.P_VARIABLE_IN_COMPONENT)) {
+			String valueSource = StringConverter.INSTANCE.toJavaSource(this, newName);
+			// try to find existing setName()
+			{
+				MethodInvocation invocation = getMethodInvocation("setName(java.lang.String)");
+				if (invocation != null) {
+					Expression valueExpression = (Expression) invocation.arguments().get(0);
+					getEditor().replaceExpression(valueExpression, valueSource);
+					return;
+				}
+			}
+			// add new setName()
+			addMethodInvocation("setName(java.lang.String)", valueSource);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // "Live" support
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Image getLiveImage() {
-    return getLiveComponentsManager().getImage();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// "Live" support
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Image getLiveImage() {
+		return getLiveComponentsManager().getImage();
+	}
 
-  @Override
-  protected int getLiveBaseline() {
-    return getLiveComponentsManager().getBaseline();
-  }
+	@Override
+	protected int getLiveBaseline() {
+		return getLiveComponentsManager().getBaseline();
+	}
 
-  /**
-   * @return the component instance of this component info which is used during creation.
-   */
-  protected final Component getLiveObject() {
-    return getLiveComponentsManager().getComponent();
-  }
+	/**
+	 * @return the component instance of this component info which is used during creation.
+	 */
+	protected final Component getLiveObject() {
+		return getLiveComponentsManager().getComponent();
+	}
 
-  /**
-   * @return the {@link SwingLiveManager} instance.
-   */
-  protected SwingLiveManager getLiveComponentsManager() {
-    return new SwingLiveManager(this);
-  }
+	/**
+	 * @return the {@link SwingLiveManager} instance.
+	 */
+	protected SwingLiveManager getLiveComponentsManager() {
+		return new SwingLiveManager(this);
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/ContainerClipboardCommand.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/ContainerClipboardCommand.java
index 9c5a1ebd9..ae0b12d12 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/ContainerClipboardCommand.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/ContainerClipboardCommand.java
@@ -21,34 +21,34 @@
  * @coverage swing.model
  */
 public abstract class ContainerClipboardCommand<T> extends ClipboardCommand {
-  private static final long serialVersionUID = 0L;
-  private final JavaInfoMemento m_memento;
+	private static final long serialVersionUID = 0L;
+	private final JavaInfoMemento m_memento;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ContainerClipboardCommand(ComponentInfo component) throws Exception {
-    m_memento = JavaInfoMemento.createMemento(component);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ContainerClipboardCommand(ComponentInfo component) throws Exception {
+		m_memento = JavaInfoMemento.createMemento(component);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Execute
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  @SuppressWarnings("unchecked")
-  public final void execute(JavaInfo javaInfo) throws Exception {
-    T container = (T) javaInfo;
-    ComponentInfo component = (ComponentInfo) m_memento.create(javaInfo);
-    add(container, component);
-    m_memento.apply();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Execute
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	@SuppressWarnings("unchecked")
+	public final void execute(JavaInfo javaInfo) throws Exception {
+		T container = (T) javaInfo;
+		ComponentInfo component = (ComponentInfo) m_memento.create(javaInfo);
+		add(container, component);
+		m_memento.apply();
+	}
 
-  /**
-   * Adds given {@link ComponentInfo} to {@link ContainerInfo} using container specific way.
-   */
-  protected abstract void add(T container, ComponentInfo component) throws Exception;
+	/**
+	 * Adds given {@link ComponentInfo} to {@link ContainerInfo} using container specific way.
+	 */
+	protected abstract void add(T container, ComponentInfo component) throws Exception;
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/ContainerInfo.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/ContainerInfo.java
index a0e9100ee..ef4ef8a95 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/ContainerInfo.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/ContainerInfo.java
@@ -82,538 +82,538 @@
  * @coverage swing.model
  */
 public class ContainerInfo extends ComponentInfo {
-  /**
-   * We set this key during {@link #setLayout(LayoutInfo)} to prevent implicit {@link LayoutInfo}
-   * activation during layout replacement.
-   */
-  public static final String KEY_DONT_SET_IMPLICIT_LAYOUT = "KEY_DONT_SET_IMPLICIT_LAYOUT";
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance fields
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final ContainerInfo m_this = this;
-  private Insets m_insets;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ContainerInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-    m_tabOrderProperty = new TabOrderProperty(this);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Initializing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void initialize() throws Exception {
-    super.initialize();
-    addBroadcastListener(new ObjectInfoTreeComplete() {
-      public void invoke() throws Exception {
-        initialize_createAbsoluteLayout();
-      }
-    });
-    addBroadcastListener(new ObjectEventListener() {
-      @Override
-      public void addContextMenu(List<? extends ObjectInfo> objects,
-          ObjectInfo object,
-          IMenuManager manager) throws Exception {
-        if (object == m_this) {
-          contextMenu_setLayout(manager);
-        }
-      }
-    });
-    addBroadcastListener(new JavaEventListener() {
-      @Override
-      public void clipboardCopy(JavaInfo javaInfo, List<ClipboardCommand> commands)
-          throws Exception {
-        if (javaInfo == m_this) {
-          clipboardCopy_addCommands(commands);
-        }
-      }
-    });
-  }
-
-  @Override
-  public void createExposedChildren() throws Exception {
-    super.createExposedChildren();
-    initialize_createImplicitLayout();
-  }
-
-  /**
-   * Adds "Set Layout" sub-menu for setting new {@link LayoutInfo} on this {@link CompositeInfo}.
-   */
-  private void contextMenu_setLayout(IMenuManager manager) throws Exception {
-    // check if we have layout at all
-    if (!canSetLayout()) {
-      return;
-    }
-    // OK, add "Set layout"
-    IMenuManager layoutsManager = new MenuManager(ModelMessages.ContainerInfo_setLayout);
-    manager.appendToGroup(IContextMenuConstants.GROUP_LAYOUT, layoutsManager);
-    fillLayoutsManager(layoutsManager);
-  }
-
-  /**
-   * Fills given {@link IMenuManager} with {@link IAction}s for setting new {@link LayoutInfo} on
-   * this {@link CompositeInfo}.
-   */
-  public void fillLayoutsManager(IMenuManager layoutsManager)
-      throws ClassNotFoundException, Exception {
-    // add "absolute"
-    {
-      ObjectInfoAction action = new ObjectInfoAction(this) {
-        @Override
-        protected void runEx() throws Exception {
-          AbsoluteLayoutInfo layout = AbsoluteLayoutInfo.createExplicit(getEditor());
-          setLayout(layout);
-        }
-      };
-      action.setText(ModelMessages.ContainerInfo_setLayoutAbsolute);
-      action.setImageDescriptor(Activator.getImageDescriptor("info/layout/absolute/layout.gif"));
-      layoutsManager.add(action);
-    }
-    // add layout items
-    final AstEditor editor = getEditor();
-    ClassLoader editorLoader = EditorState.get(editor).getEditorLoader();
-    List<LayoutDescription> descriptions =
-        LayoutDescriptionHelper.get(getDescription().getToolkit());
-    for (final LayoutDescription description : descriptions) {
-      if (InstanceScope.INSTANCE.getNode(
-          IEditorPreferenceConstants.P_AVAILABLE_LAYOUTS_NODE).getBoolean(
-              description.getLayoutClassName(),
-              true)) {
-        final Class<?> layoutClass = editorLoader.loadClass(description.getLayoutClassName());
-        final String creationId = description.getCreationId();
-        ComponentDescription layoutComponentDescription =
-            ComponentDescriptionHelper.getDescription(editor, layoutClass);
-        ObjectInfoAction action = new ObjectInfoAction(this) {
-          @Override
-          protected void runEx() throws Exception {
-            description.ensureLibraries(editor.getJavaProject());
-            LayoutInfo layout = (LayoutInfo) JavaInfoUtils.createJavaInfo(
-                editor,
-                layoutClass,
-                new ConstructorCreationSupport(creationId, true));
-            setLayout(layout);
-          }
-        };
-        action.setText(description.getName());
-        action.setImageDescriptor(new ImageImageDescriptor(layoutComponentDescription.getIcon()));
-        layoutsManager.add(action);
-      }
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Properties
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final TabOrderProperty m_tabOrderProperty;
-
-  @Override
-  protected List<Property> getPropertyList() throws Exception {
-    List<Property> properties = super.getPropertyList();
-    if (!isRoot() && !hasLayout()) {
-      m_tabOrderProperty.setCategory(PropertyCategory.ADVANCED);
-    }
-    properties.add(m_tabOrderProperty);
-    return properties;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void refresh_dispose() throws Exception {
-    // remember Container instance, we need it for clearSwingTree(), but "super" set object to "null"
-    Container container = (Container) getObject();
-    // inherit parent layout, if it is valid at all and valid time
-    processInitialLayout();
-    // call "super"
-    super.refresh_dispose();
-    if (isSwingRoot()) {
-      SwingUtils.clearSwingTree(container);
-    }
-  }
-
-  @Override
-  protected void refresh_fetch() throws Exception {
-    // fetch insets
-    if (getContainer() != null) {
-      java.awt.Insets insets = getContainer().getInsets();
-      m_insets = CoordinateUtils.get(insets);
-    }
-    // continue in super()
-    super.refresh_fetch();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Layout
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final String KEY_LAYOUT_HAS = "layout.has";
-  private static final String KEY_LAYOUT_ALREADY_PROCESSED =
-      "default/parent layout already processed";
-
-  /**
-   * Prepares {@link LayoutInfo} for any layout existing by default for this container.
-   */
-  private void initialize_createImplicitLayout() throws Exception {
-    if (hasLayout()) {
-      if (initialize_hasExplicitLayout()) {
-        return;
-      }
-      // prepare for creation
-      AstEditor editor = getEditor();
-      Container container = (Container) getObject();
-      LayoutManager layout = container.getLayout();
-      // check if same implicit already exists
-      if (initialize_removeImplicitLayout(layout)) {
-        return;
-      }
-      // create implicit layout model
-      LayoutInfo implicitLayout;
-      CreationSupport creationSupport = new ImplicitLayoutCreationSupport(this);
-      if (layout == null) {
-        implicitLayout = new AbsoluteLayoutInfo(editor, creationSupport);
-      } else {
-        Class<?> layoutClass = layout.getClass();
-		// The root pane should not have it's layout changed. During creation of the
-		// implicit layouts the JRootPane
-		// is also processed. In this case the checkLayoutPreferences should not be
-		// performed
-		if (!isLayout(layoutClass)) {
-			implicitLayout = checkLayoutPreferences(layoutClass, editor,
-				creationSupport);
-	} else {
-		// Initialize implicit layout to the specified layout
-		implicitLayout = (LayoutInfo) JavaInfoUtils.createJavaInfo(editor, layoutClass, creationSupport);
+	/**
+	 * We set this key during {@link #setLayout(LayoutInfo)} to prevent implicit {@link LayoutInfo}
+	 * activation during layout replacement.
+	 */
+	public static final String KEY_DONT_SET_IMPLICIT_LAYOUT = "KEY_DONT_SET_IMPLICIT_LAYOUT";
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance fields
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final ContainerInfo m_this = this;
+	private Insets m_insets;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ContainerInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+		m_tabOrderProperty = new TabOrderProperty(this);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Initializing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void initialize() throws Exception {
+		super.initialize();
+		addBroadcastListener(new ObjectInfoTreeComplete() {
+			public void invoke() throws Exception {
+				initialize_createAbsoluteLayout();
+			}
+		});
+		addBroadcastListener(new ObjectEventListener() {
+			@Override
+			public void addContextMenu(List<? extends ObjectInfo> objects,
+					ObjectInfo object,
+					IMenuManager manager) throws Exception {
+				if (object == m_this) {
+					contextMenu_setLayout(manager);
+				}
+			}
+		});
+		addBroadcastListener(new JavaEventListener() {
+			@Override
+			public void clipboardCopy(JavaInfo javaInfo, List<ClipboardCommand> commands)
+					throws Exception {
+				if (javaInfo == m_this) {
+					clipboardCopy_addCommands(commands);
+				}
+			}
+		});
+	}
+
+	@Override
+	public void createExposedChildren() throws Exception {
+		super.createExposedChildren();
+		initialize_createImplicitLayout();
+	}
+
+	/**
+	 * Adds "Set Layout" sub-menu for setting new {@link LayoutInfo} on this {@link CompositeInfo}.
+	 */
+	private void contextMenu_setLayout(IMenuManager manager) throws Exception {
+		// check if we have layout at all
+		if (!canSetLayout()) {
+			return;
 		}
-      }
-      // initialize layout model
-      {
-        // set variable support
-        {
-			VariableSupport variableSupport = new ImplicitLayoutVariableSupport(implicitLayout);
-			implicitLayout.setVariableSupport(variableSupport);
-        }
-        // set association
-        implicitLayout.setAssociation(new ImplicitObjectAssociation(this));
-        // add as child
-        addChildFirst(implicitLayout);
-      }
-    }
-  }
-
-  /**
-   * @return <code>true</code> if explicit layout was already set, so we should not try to find
-   *         implicit layout anymore.
-   */
-  private boolean initialize_hasExplicitLayout() {
-    List<LayoutInfo> layouts = getChildren(LayoutInfo.class);
-    return !layouts.isEmpty()
-        && !(layouts.get(0).getCreationSupport() instanceof ImplicitLayoutCreationSupport);
-  }
-
-  /**
-   * We may call {@link #initialize_createImplicitLayout()} many times, may be after each
-   * {@link Statement}, so before adding new implicit layout we should remove existing one.
-   *
-   * @return <code>true</code> if {@link LayoutInfo} with same object already exists, so it was not
-   *         removed and no need for creating new implicit {@link LayoutInfo}.
-   */
-  private boolean initialize_removeImplicitLayout(Object layoutObject) throws Exception {
-    for (JavaInfo child : getChildrenJava()) {
-      if (child.getCreationSupport() instanceof ImplicitLayoutCreationSupport) {
-        if (child.getObject() == layoutObject) {
-          return true;
-        }
-        ImplicitLayoutCreationSupport creationSupport =
-            (ImplicitLayoutCreationSupport) child.getCreationSupport();
-        creationSupport.removeForever();
-        break;
-      }
-    }
-    return false;
-  }
-
-  /**
-   * Adds {@link AbsoluteLayoutInfo} model, if {@link Container#setLayout(LayoutManager)} is invoked
-   * with {@link NullLiteral}.
-   */
-  private void initialize_createAbsoluteLayout() throws Exception {
-    if (hasLayout()) {
-      MethodInvocation setLayoutInvocation =
-          getMethodInvocation("setLayout(java.awt.LayoutManager)");
-      if (setLayoutInvocation != null
-          && setLayoutInvocation.arguments().get(0) instanceof NullLiteral) {
-        addExplicitAbsoluteLayoutChild(setLayoutInvocation);
-      }
-    }
-  }
-
-  private void addExplicitAbsoluteLayoutChild(MethodInvocation setLayoutInvocation)
-      throws Exception {
-    AstEditor editor = getEditor();
-    CreationSupport creationSupport = new AbsoluteLayoutCreationSupport(setLayoutInvocation);
-    AbsoluteLayoutInfo absoluteLayoutInfo = new AbsoluteLayoutInfo(editor, creationSupport);
-    absoluteLayoutInfo.setAssociation(new InvocationChildAssociation(setLayoutInvocation));
-    absoluteLayoutInfo.setObject(null);
-    addChild(absoluteLayoutInfo);
-  }
-
-  /**
-   * @return <code>true</code> if this {@link ContainerInfo} can have {@link LayoutInfo}.
-   */
-  public final boolean hasLayout() {
-    if (isPlaceholder()) {
-      return false;
-    }
-    return JavaInfoUtils.hasTrueParameter(this, KEY_LAYOUT_HAS);
-  }
-
-  /**
-   * @return <code>true</code> if it is possible to set new {@link LayoutInfo} for this
-   *         {@link ContainerInfo}. Note difference between "has" and "can set".
-   */
-  public final boolean canSetLayout() {
-    if (!hasLayout()) {
-      return false;
-    }
-    MethodDescription setLayoutMethod =
-        getDescription().getMethod("setLayout(java.awt.LayoutManager)");
-    return setLayoutMethod != null && setLayoutMethod.isExecutable();
-  }
-
-  /**
-   * @return the current {@link LayoutInfo} for this container.
-   */
-  public final LayoutInfo getLayout() {
-    Assert.isTrue(hasLayout());
-    // try to find layout
-    for (ObjectInfo child : getChildren()) {
-      if (child instanceof LayoutInfo) {
-        return (LayoutInfo) child;
-      }
-    }
-    // container that has layout, should always have some layout model
-    throw new IllegalStateException(ModelMessages.ContainerInfo_containerShouldHaveLayout);
-  }
-
-  /**
-   * Sets new {@link LayoutInfo}.
-   */
-  public final void setLayout(LayoutInfo newLayout) throws Exception {
-    putArbitraryValue(KEY_DONT_SET_IMPLICIT_LAYOUT, Boolean.TRUE);
-    startEdit();
-    try {
-      // remove old layout
-      {
-        LayoutInfo oldLayout = getLayout();
-        oldLayout.delete();
-      }
-      // set new layout
-      VariableSupport variableSupport =
-          new EmptyInvocationVariableSupport(newLayout, "%parent%.setLayout(%child%)", 0);
-      JavaInfoUtils.add(
-          newLayout,
-          variableSupport,
-          PureFlatStatementGenerator.INSTANCE,
-          AssociationObjects.invocationChildNull(),
-          this,
-          null);
-      newLayout.onSet();
-    } finally {
-      endEdit();
-      putArbitraryValue(KEY_DONT_SET_IMPLICIT_LAYOUT, Boolean.FALSE);
-    }
-  }
-
-  /**
-   * Sets default {@link LayoutInfo} or inherits {@link LayoutInfo} of parent {@link CompositeInfo}.
-   */
-  private void processInitialLayout() throws Exception {
-    IPreferenceStore preferences = getDescription().getToolkit().getPreferences();
-    // check if processing required
-    {
-      boolean shouldBeProcessed = hasLayout()
-          && getArbitraryValue(JavaInfo.FLAG_MANUAL_COMPONENT) == Boolean.TRUE
-          && getArbitraryValue(KEY_LAYOUT_ALREADY_PROCESSED) == null;
-      if (!shouldBeProcessed) {
-        return;
-      }
-      // this is first, and last time when we should do processing
-      putArbitraryValue(KEY_LAYOUT_ALREADY_PROCESSED, Boolean.TRUE);
-    }
-    // check for inheritance from parent
-    if (preferences.getBoolean(IPreferenceConstants.P_LAYOUT_OF_PARENT)
-        && getParent() instanceof ContainerInfo) {
-      ContainerInfo parentComposite = (ContainerInfo) getParent();
-      if (parentComposite.hasLayout()) {
-        final LayoutInfo thisLayout;
-        {
-          LayoutInfo parentLayout = parentComposite.getLayout();
-          Class<?> layoutClass = parentLayout.getDescription().getComponentClass();
-          if (layoutClass == null) {
-            thisLayout = AbsoluteLayoutInfo.createExplicit(getEditor());
-          } else {
-            thisLayout = (LayoutInfo) JavaInfoUtils.createJavaInfo(
-                getEditor(),
-                layoutClass,
-                new ConstructorCreationSupport());
-          }
-        }
-        // we are in process of refresh(), set inherited layout later
-        ExecutionUtils.runLater(this, new RunnableEx() {
-          public void run() throws Exception {
-            setLayout(thisLayout);
-          }
-        });
-      }
-      // OK, stop here
-      return;
-    }
-    // check for default layout
-    {
-      String layoutId = preferences.getString(IPreferenceConstants.P_LAYOUT_DEFAULT);
-      LayoutDescription layoutDescription =
-          LayoutDescriptionHelper.get(getDescription().getToolkit(), layoutId);
-      if (layoutDescription != null) {
-        final LayoutInfo thisLayout = (LayoutInfo) JavaInfoUtils.createJavaInfo(
-            getEditor(),
-            layoutDescription.getLayoutClassName(),
-            new ConstructorCreationSupport());
-        // we are in process of refresh(), set inherited layout later
-        ExecutionUtils.runLater(this, new RunnableEx() {
-          public void run() throws Exception {
-            setLayout(thisLayout);
-          }
-        });
-      }
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Hierarchy
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean canBeRoot() {
-    return true;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Returns the {@link Insets} for this AWT {@link Container}. Note, that this method is different
-   * from {@link #getClientAreaInsets()}, because in AWT/Swing insets means that it is preferred to
-   * place children {@link Component}'s inside of area after cropping by insets, but (0,0) is point
-   * on insets, not inside of insets.
-   *
-   * @return the {@link Insets} for this AWT {@link Container}.
-   */
-  public final Insets getInsets() {
-    return m_insets;
-  }
-
-  /**
-   * @return the AWT {@link Container} object for this model.
-   */
-  public final Container getContainer() {
-    return (Container) getObject();
-  }
-
-  /**
-   * @return the collection of {@link ComponentInfo} children.
-   */
-  public final List<ComponentInfo> getChildrenComponents() {
-    return getChildren(ComponentInfo.class);
-  }
-
-  @Override
-  public boolean isRTL() {
-    return !getComponent().getComponentOrientation().isLeftToRight();
-  }
-
-  /**
-   * @return <code>true</code> if need draw dots border for this {@link ContainerInfo}.
-   */
-  public final boolean shouldDrawDotsBorder() {
-    IPreferenceStore preferences = getDescription().getToolkit().getPreferences();
-    if (preferences.getBoolean(IPreferenceConstants.P_GENERAL_HIGHLIGHT_CONTAINERS)) {
-      // no border for "this"
-      if (getCreationSupport() instanceof ThisCreationSupport) {
-        return false;
-      }
-      // only if "normal" container, not complex one
-      Container container = getContainer();
-      if (hasLayout()) {
-        // check for existing Swing border
-        if (container instanceof JComponent) {
-          return ((JComponent) container).getBorder() == null;
-        }
-        // OK, probably need border
-        return true;
-      }
-    }
-    return false;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Clipboard
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds commands for coping this {@link ContainerInfo}.
-   */
-  protected void clipboardCopy_addCommands(List<ClipboardCommand> commands) throws Exception {
-    if (hasLayout()) {
-      LayoutInfo layout = getLayout();
-      if (layout.getCreationSupport() instanceof IImplicitCreationSupport) {
-        // no need to set implicit layout
-      } else if (layout instanceof AbsoluteLayoutInfo) {
-        commands.add(new ComponentClipboardCommand<ContainerInfo>() {
-          private static final long serialVersionUID = 0L;
-
-          @Override
-          protected void execute(ContainerInfo container) throws Exception {
-            MethodInvocation setLayoutInvocation =
-                container.addMethodInvocation("setLayout(java.awt.LayoutManager)", "null");
-            container.addExplicitAbsoluteLayoutChild(setLayoutInvocation);
-          }
-        });
-      } else {
-        final JavaInfoMemento layoutMemento = JavaInfoMemento.createMemento(layout);
-        commands.add(new ComponentClipboardCommand<ContainerInfo>() {
-          private static final long serialVersionUID = 0L;
-
-          @Override
-          protected void execute(ContainerInfo container) throws Exception {
-            LayoutInfo newLayout = (LayoutInfo) layoutMemento.create(container);
-            container.setLayout(newLayout);
-            layoutMemento.apply();
-          }
-        });
-      }
-    }
-  }
+		// OK, add "Set layout"
+		IMenuManager layoutsManager = new MenuManager(ModelMessages.ContainerInfo_setLayout);
+		manager.appendToGroup(IContextMenuConstants.GROUP_LAYOUT, layoutsManager);
+		fillLayoutsManager(layoutsManager);
+	}
+
+	/**
+	 * Fills given {@link IMenuManager} with {@link IAction}s for setting new {@link LayoutInfo} on
+	 * this {@link CompositeInfo}.
+	 */
+	public void fillLayoutsManager(IMenuManager layoutsManager)
+			throws ClassNotFoundException, Exception {
+		// add "absolute"
+		{
+			ObjectInfoAction action = new ObjectInfoAction(this) {
+				@Override
+				protected void runEx() throws Exception {
+					AbsoluteLayoutInfo layout = AbsoluteLayoutInfo.createExplicit(getEditor());
+					setLayout(layout);
+				}
+			};
+			action.setText(ModelMessages.ContainerInfo_setLayoutAbsolute);
+			action.setImageDescriptor(Activator.getImageDescriptor("info/layout/absolute/layout.gif"));
+			layoutsManager.add(action);
+		}
+		// add layout items
+		final AstEditor editor = getEditor();
+		ClassLoader editorLoader = EditorState.get(editor).getEditorLoader();
+		List<LayoutDescription> descriptions =
+				LayoutDescriptionHelper.get(getDescription().getToolkit());
+		for (final LayoutDescription description : descriptions) {
+			if (InstanceScope.INSTANCE.getNode(
+					IEditorPreferenceConstants.P_AVAILABLE_LAYOUTS_NODE).getBoolean(
+							description.getLayoutClassName(),
+							true)) {
+				final Class<?> layoutClass = editorLoader.loadClass(description.getLayoutClassName());
+				final String creationId = description.getCreationId();
+				ComponentDescription layoutComponentDescription =
+						ComponentDescriptionHelper.getDescription(editor, layoutClass);
+				ObjectInfoAction action = new ObjectInfoAction(this) {
+					@Override
+					protected void runEx() throws Exception {
+						description.ensureLibraries(editor.getJavaProject());
+						LayoutInfo layout = (LayoutInfo) JavaInfoUtils.createJavaInfo(
+								editor,
+								layoutClass,
+								new ConstructorCreationSupport(creationId, true));
+						setLayout(layout);
+					}
+				};
+				action.setText(description.getName());
+				action.setImageDescriptor(new ImageImageDescriptor(layoutComponentDescription.getIcon()));
+				layoutsManager.add(action);
+			}
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Properties
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final TabOrderProperty m_tabOrderProperty;
+
+	@Override
+	protected List<Property> getPropertyList() throws Exception {
+		List<Property> properties = super.getPropertyList();
+		if (!isRoot() && !hasLayout()) {
+			m_tabOrderProperty.setCategory(PropertyCategory.ADVANCED);
+		}
+		properties.add(m_tabOrderProperty);
+		return properties;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void refresh_dispose() throws Exception {
+		// remember Container instance, we need it for clearSwingTree(), but "super" set object to "null"
+		Container container = (Container) getObject();
+		// inherit parent layout, if it is valid at all and valid time
+		processInitialLayout();
+		// call "super"
+		super.refresh_dispose();
+		if (isSwingRoot()) {
+			SwingUtils.clearSwingTree(container);
+		}
+	}
+
+	@Override
+	protected void refresh_fetch() throws Exception {
+		// fetch insets
+		if (getContainer() != null) {
+			java.awt.Insets insets = getContainer().getInsets();
+			m_insets = CoordinateUtils.get(insets);
+		}
+		// continue in super()
+		super.refresh_fetch();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Layout
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final String KEY_LAYOUT_HAS = "layout.has";
+	private static final String KEY_LAYOUT_ALREADY_PROCESSED =
+			"default/parent layout already processed";
+
+	/**
+	 * Prepares {@link LayoutInfo} for any layout existing by default for this container.
+	 */
+	private void initialize_createImplicitLayout() throws Exception {
+		if (hasLayout()) {
+			if (initialize_hasExplicitLayout()) {
+				return;
+			}
+			// prepare for creation
+			AstEditor editor = getEditor();
+			Container container = (Container) getObject();
+			LayoutManager layout = container.getLayout();
+			// check if same implicit already exists
+			if (initialize_removeImplicitLayout(layout)) {
+				return;
+			}
+			// create implicit layout model
+			LayoutInfo implicitLayout;
+			CreationSupport creationSupport = new ImplicitLayoutCreationSupport(this);
+			if (layout == null) {
+				implicitLayout = new AbsoluteLayoutInfo(editor, creationSupport);
+			} else {
+				Class<?> layoutClass = layout.getClass();
+				// The root pane should not have it's layout changed. During creation of the
+				// implicit layouts the JRootPane
+				// is also processed. In this case the checkLayoutPreferences should not be
+				// performed
+				if (!isLayout(layoutClass)) {
+					implicitLayout = checkLayoutPreferences(layoutClass, editor,
+							creationSupport);
+				} else {
+					// Initialize implicit layout to the specified layout
+					implicitLayout = (LayoutInfo) JavaInfoUtils.createJavaInfo(editor, layoutClass, creationSupport);
+				}
+			}
+			// initialize layout model
+			{
+				// set variable support
+				{
+					VariableSupport variableSupport = new ImplicitLayoutVariableSupport(implicitLayout);
+					implicitLayout.setVariableSupport(variableSupport);
+				}
+				// set association
+				implicitLayout.setAssociation(new ImplicitObjectAssociation(this));
+				// add as child
+				addChildFirst(implicitLayout);
+			}
+		}
+	}
+
+	/**
+	 * @return <code>true</code> if explicit layout was already set, so we should not try to find
+	 *         implicit layout anymore.
+	 */
+	private boolean initialize_hasExplicitLayout() {
+		List<LayoutInfo> layouts = getChildren(LayoutInfo.class);
+		return !layouts.isEmpty()
+				&& !(layouts.get(0).getCreationSupport() instanceof ImplicitLayoutCreationSupport);
+	}
+
+	/**
+	 * We may call {@link #initialize_createImplicitLayout()} many times, may be after each
+	 * {@link Statement}, so before adding new implicit layout we should remove existing one.
+	 *
+	 * @return <code>true</code> if {@link LayoutInfo} with same object already exists, so it was not
+	 *         removed and no need for creating new implicit {@link LayoutInfo}.
+	 */
+	private boolean initialize_removeImplicitLayout(Object layoutObject) throws Exception {
+		for (JavaInfo child : getChildrenJava()) {
+			if (child.getCreationSupport() instanceof ImplicitLayoutCreationSupport) {
+				if (child.getObject() == layoutObject) {
+					return true;
+				}
+				ImplicitLayoutCreationSupport creationSupport =
+						(ImplicitLayoutCreationSupport) child.getCreationSupport();
+				creationSupport.removeForever();
+				break;
+			}
+		}
+		return false;
+	}
+
+	/**
+	 * Adds {@link AbsoluteLayoutInfo} model, if {@link Container#setLayout(LayoutManager)} is invoked
+	 * with {@link NullLiteral}.
+	 */
+	private void initialize_createAbsoluteLayout() throws Exception {
+		if (hasLayout()) {
+			MethodInvocation setLayoutInvocation =
+					getMethodInvocation("setLayout(java.awt.LayoutManager)");
+			if (setLayoutInvocation != null
+					&& setLayoutInvocation.arguments().get(0) instanceof NullLiteral) {
+				addExplicitAbsoluteLayoutChild(setLayoutInvocation);
+			}
+		}
+	}
+
+	private void addExplicitAbsoluteLayoutChild(MethodInvocation setLayoutInvocation)
+			throws Exception {
+		AstEditor editor = getEditor();
+		CreationSupport creationSupport = new AbsoluteLayoutCreationSupport(setLayoutInvocation);
+		AbsoluteLayoutInfo absoluteLayoutInfo = new AbsoluteLayoutInfo(editor, creationSupport);
+		absoluteLayoutInfo.setAssociation(new InvocationChildAssociation(setLayoutInvocation));
+		absoluteLayoutInfo.setObject(null);
+		addChild(absoluteLayoutInfo);
+	}
+
+	/**
+	 * @return <code>true</code> if this {@link ContainerInfo} can have {@link LayoutInfo}.
+	 */
+	public final boolean hasLayout() {
+		if (isPlaceholder()) {
+			return false;
+		}
+		return JavaInfoUtils.hasTrueParameter(this, KEY_LAYOUT_HAS);
+	}
+
+	/**
+	 * @return <code>true</code> if it is possible to set new {@link LayoutInfo} for this
+	 *         {@link ContainerInfo}. Note difference between "has" and "can set".
+	 */
+	public final boolean canSetLayout() {
+		if (!hasLayout()) {
+			return false;
+		}
+		MethodDescription setLayoutMethod =
+				getDescription().getMethod("setLayout(java.awt.LayoutManager)");
+		return setLayoutMethod != null && setLayoutMethod.isExecutable();
+	}
+
+	/**
+	 * @return the current {@link LayoutInfo} for this container.
+	 */
+	public final LayoutInfo getLayout() {
+		Assert.isTrue(hasLayout());
+		// try to find layout
+		for (ObjectInfo child : getChildren()) {
+			if (child instanceof LayoutInfo) {
+				return (LayoutInfo) child;
+			}
+		}
+		// container that has layout, should always have some layout model
+		throw new IllegalStateException(ModelMessages.ContainerInfo_containerShouldHaveLayout);
+	}
+
+	/**
+	 * Sets new {@link LayoutInfo}.
+	 */
+	public final void setLayout(LayoutInfo newLayout) throws Exception {
+		putArbitraryValue(KEY_DONT_SET_IMPLICIT_LAYOUT, Boolean.TRUE);
+		startEdit();
+		try {
+			// remove old layout
+			{
+				LayoutInfo oldLayout = getLayout();
+				oldLayout.delete();
+			}
+			// set new layout
+			VariableSupport variableSupport =
+					new EmptyInvocationVariableSupport(newLayout, "%parent%.setLayout(%child%)", 0);
+			JavaInfoUtils.add(
+					newLayout,
+					variableSupport,
+					PureFlatStatementGenerator.INSTANCE,
+					AssociationObjects.invocationChildNull(),
+					this,
+					null);
+			newLayout.onSet();
+		} finally {
+			endEdit();
+			putArbitraryValue(KEY_DONT_SET_IMPLICIT_LAYOUT, Boolean.FALSE);
+		}
+	}
+
+	/**
+	 * Sets default {@link LayoutInfo} or inherits {@link LayoutInfo} of parent {@link CompositeInfo}.
+	 */
+	private void processInitialLayout() throws Exception {
+		IPreferenceStore preferences = getDescription().getToolkit().getPreferences();
+		// check if processing required
+		{
+			boolean shouldBeProcessed = hasLayout()
+					&& getArbitraryValue(JavaInfo.FLAG_MANUAL_COMPONENT) == Boolean.TRUE
+					&& getArbitraryValue(KEY_LAYOUT_ALREADY_PROCESSED) == null;
+			if (!shouldBeProcessed) {
+				return;
+			}
+			// this is first, and last time when we should do processing
+			putArbitraryValue(KEY_LAYOUT_ALREADY_PROCESSED, Boolean.TRUE);
+		}
+		// check for inheritance from parent
+		if (preferences.getBoolean(IPreferenceConstants.P_LAYOUT_OF_PARENT)
+				&& getParent() instanceof ContainerInfo) {
+			ContainerInfo parentComposite = (ContainerInfo) getParent();
+			if (parentComposite.hasLayout()) {
+				final LayoutInfo thisLayout;
+				{
+					LayoutInfo parentLayout = parentComposite.getLayout();
+					Class<?> layoutClass = parentLayout.getDescription().getComponentClass();
+					if (layoutClass == null) {
+						thisLayout = AbsoluteLayoutInfo.createExplicit(getEditor());
+					} else {
+						thisLayout = (LayoutInfo) JavaInfoUtils.createJavaInfo(
+								getEditor(),
+								layoutClass,
+								new ConstructorCreationSupport());
+					}
+				}
+				// we are in process of refresh(), set inherited layout later
+				ExecutionUtils.runLater(this, new RunnableEx() {
+					public void run() throws Exception {
+						setLayout(thisLayout);
+					}
+				});
+			}
+			// OK, stop here
+			return;
+		}
+		// check for default layout
+		{
+			String layoutId = preferences.getString(IPreferenceConstants.P_LAYOUT_DEFAULT);
+			LayoutDescription layoutDescription =
+					LayoutDescriptionHelper.get(getDescription().getToolkit(), layoutId);
+			if (layoutDescription != null) {
+				final LayoutInfo thisLayout = (LayoutInfo) JavaInfoUtils.createJavaInfo(
+						getEditor(),
+						layoutDescription.getLayoutClassName(),
+						new ConstructorCreationSupport());
+				// we are in process of refresh(), set inherited layout later
+				ExecutionUtils.runLater(this, new RunnableEx() {
+					public void run() throws Exception {
+						setLayout(thisLayout);
+					}
+				});
+			}
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Hierarchy
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean canBeRoot() {
+		return true;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Returns the {@link Insets} for this AWT {@link Container}. Note, that this method is different
+	 * from {@link #getClientAreaInsets()}, because in AWT/Swing insets means that it is preferred to
+	 * place children {@link Component}'s inside of area after cropping by insets, but (0,0) is point
+	 * on insets, not inside of insets.
+	 *
+	 * @return the {@link Insets} for this AWT {@link Container}.
+	 */
+	public final Insets getInsets() {
+		return m_insets;
+	}
+
+	/**
+	 * @return the AWT {@link Container} object for this model.
+	 */
+	public final Container getContainer() {
+		return (Container) getObject();
+	}
+
+	/**
+	 * @return the collection of {@link ComponentInfo} children.
+	 */
+	public final List<ComponentInfo> getChildrenComponents() {
+		return getChildren(ComponentInfo.class);
+	}
+
+	@Override
+	public boolean isRTL() {
+		return !getComponent().getComponentOrientation().isLeftToRight();
+	}
+
+	/**
+	 * @return <code>true</code> if need draw dots border for this {@link ContainerInfo}.
+	 */
+	public final boolean shouldDrawDotsBorder() {
+		IPreferenceStore preferences = getDescription().getToolkit().getPreferences();
+		if (preferences.getBoolean(IPreferenceConstants.P_GENERAL_HIGHLIGHT_CONTAINERS)) {
+			// no border for "this"
+			if (getCreationSupport() instanceof ThisCreationSupport) {
+				return false;
+			}
+			// only if "normal" container, not complex one
+			Container container = getContainer();
+			if (hasLayout()) {
+				// check for existing Swing border
+				if (container instanceof JComponent) {
+					return ((JComponent) container).getBorder() == null;
+				}
+				// OK, probably need border
+				return true;
+			}
+		}
+		return false;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Clipboard
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds commands for coping this {@link ContainerInfo}.
+	 */
+	protected void clipboardCopy_addCommands(List<ClipboardCommand> commands) throws Exception {
+		if (hasLayout()) {
+			LayoutInfo layout = getLayout();
+			if (layout.getCreationSupport() instanceof IImplicitCreationSupport) {
+				// no need to set implicit layout
+			} else if (layout instanceof AbsoluteLayoutInfo) {
+				commands.add(new ComponentClipboardCommand<ContainerInfo>() {
+					private static final long serialVersionUID = 0L;
+
+					@Override
+					protected void execute(ContainerInfo container) throws Exception {
+						MethodInvocation setLayoutInvocation =
+								container.addMethodInvocation("setLayout(java.awt.LayoutManager)", "null");
+						container.addExplicitAbsoluteLayoutChild(setLayoutInvocation);
+					}
+				});
+			} else {
+				final JavaInfoMemento layoutMemento = JavaInfoMemento.createMemento(layout);
+				commands.add(new ComponentClipboardCommand<ContainerInfo>() {
+					private static final long serialVersionUID = 0L;
+
+					@Override
+					protected void execute(ContainerInfo container) throws Exception {
+						LayoutInfo newLayout = (LayoutInfo) layoutMemento.create(container);
+						container.setLayout(newLayout);
+						layoutMemento.apply();
+					}
+				});
+			}
+		}
+	}
 
 	/**
 	 * Returns the default layout specified in the preferences.
@@ -670,13 +670,13 @@ public LayoutInfo checkLayoutPreferences(Class<?> layoutInf, AstEditor editor, C
 		} catch (Exception e) {
 
 			e.printStackTrace();
-			}
+		}
 		return null;
 	}
 
 	private boolean isLayout(Class<?> layoutInf) {
 		List<LayoutDescription> descriptions =
-		        LayoutDescriptionHelper.get(getDescription().getToolkit());
+				LayoutDescriptionHelper.get(getDescription().getToolkit());
 		for(LayoutDescription description : descriptions) {
 			if (description.getLayoutClassName().equals(layoutInf.getCanonicalName())) {
 				return true;
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/JDesktopPaneInfo.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/JDesktopPaneInfo.java
index 1b5fd95f1..bf7dfab69 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/JDesktopPaneInfo.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/JDesktopPaneInfo.java
@@ -28,34 +28,34 @@
  * @coverage swing.model
  */
 public final class JDesktopPaneInfo extends JLayeredPaneInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public JDesktopPaneInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-    // A workaround for http://www.eclipse.org/forums/index.php/t/264347/
-    // Under OS X JDesktopPane has an internal layout manager installed, see
-    // http://hg.openjdk.java.net/macosx-port/macosx-port/jdk/file/2a8a869b2a60/src/macosx/classes/com/apple/laf/AquaInternalFramePaneUI.java
-    // The workaround is to set layout to null.
-    if (EnvironmentUtils.IS_MAC) {
-      addBroadcastListener(new JavaInfosetObjectBefore() {
-        public void invoke(JavaInfo target, Object[] objectRef) throws Exception {
-          if (target == JDesktopPaneInfo.this) {
-            JDesktopPane pane = (JDesktopPane) objectRef[0];
-            LayoutManager layout = pane.getLayout();
-            if (layout != null) {
-              String layoutClassName = layout.getClass().getName();
-              if ("com.apple.laf.AquaInternalFramePaneUI$DockLayoutManager".equals(layoutClassName)) {
-                pane.setLayout(null);
-              }
-            }
-          }
-        }
-      });
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public JDesktopPaneInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+		// A workaround for http://www.eclipse.org/forums/index.php/t/264347/
+		// Under OS X JDesktopPane has an internal layout manager installed, see
+		// http://hg.openjdk.java.net/macosx-port/macosx-port/jdk/file/2a8a869b2a60/src/macosx/classes/com/apple/laf/AquaInternalFramePaneUI.java
+		// The workaround is to set layout to null.
+		if (EnvironmentUtils.IS_MAC) {
+			addBroadcastListener(new JavaInfosetObjectBefore() {
+				public void invoke(JavaInfo target, Object[] objectRef) throws Exception {
+					if (target == JDesktopPaneInfo.this) {
+						JDesktopPane pane = (JDesktopPane) objectRef[0];
+						LayoutManager layout = pane.getLayout();
+						if (layout != null) {
+							String layoutClassName = layout.getClass().getName();
+							if ("com.apple.laf.AquaInternalFramePaneUI$DockLayoutManager".equals(layoutClassName)) {
+								pane.setLayout(null);
+							}
+						}
+					}
+				}
+			});
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/JDialogInfo.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/JDialogInfo.java
index e65a6b20d..34adfae45 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/JDialogInfo.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/JDialogInfo.java
@@ -25,24 +25,24 @@
  * @coverage swing.model
  */
 public final class JDialogInfo extends ContainerInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public JDialogInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public JDialogInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // TopBoundsSupport
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected TopBoundsSupport createTopBoundsSupport() {
-    return new WindowTopBoundsSupport(this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// TopBoundsSupport
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected TopBoundsSupport createTopBoundsSupport() {
+		return new WindowTopBoundsSupport(this);
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/JFrameInfo.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/JFrameInfo.java
index bd5722fda..0a311770b 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/JFrameInfo.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/JFrameInfo.java
@@ -25,24 +25,24 @@
  * @coverage swing.model
  */
 public final class JFrameInfo extends ContainerInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public JFrameInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public JFrameInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // TopBoundsSupport
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected TopBoundsSupport createTopBoundsSupport() {
-    return new WindowTopBoundsSupport(this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// TopBoundsSupport
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected TopBoundsSupport createTopBoundsSupport() {
+		return new WindowTopBoundsSupport(this);
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/JInternalFrameInfo.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/JInternalFrameInfo.java
index 783e5e4c8..21d407024 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/JInternalFrameInfo.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/JInternalFrameInfo.java
@@ -24,25 +24,25 @@
  * @coverage swing.model
  */
 public final class JInternalFrameInfo extends ContainerInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public JInternalFrameInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public JInternalFrameInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void refresh_afterCreate() throws Exception {
-    super.refresh_afterCreate();
-    ScriptUtils.evaluate("setVisible(true)", getObject());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void refresh_afterCreate() throws Exception {
+		super.refresh_afterCreate();
+		ScriptUtils.evaluate("setVisible(true)", getObject());
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/JLayeredPaneInfo.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/JLayeredPaneInfo.java
index 331239987..674e8a22c 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/JLayeredPaneInfo.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/JLayeredPaneInfo.java
@@ -48,188 +48,188 @@
  * @coverage swing.model
  */
 public class JLayeredPaneInfo extends ContainerInfo {
-  private final JLayeredPaneInfo m_this = this;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public JLayeredPaneInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-    contributeProperties();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final IObjectPresentation m_presentation = new DefaultJavaInfoPresentation(this) {
-    @Override
-    public List<ObjectInfo> getChildrenGraphical() throws Exception {
-      List<ObjectInfo> children = super.getChildrenGraphical();
-      Collections.sort(children, new Comparator<ObjectInfo>() {
-        public int compare(ObjectInfo o1, ObjectInfo o2) {
-          return getLayer(o2) - getLayer(o1);
-        }
-      });
-      return children;
-    }
-  };
-
-  @Override
-  public IObjectPresentation getPresentation() {
-    return m_presentation;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private int getLayer(ObjectInfo object) {
-    if (object instanceof ComponentInfo) {
-      return getLayer((ComponentInfo) object);
-    }
-    return -1;
-  }
-
-  private int getLayer(ComponentInfo component) {
-    return ((JLayeredPane) getObject()).getLayer(component.getComponent());
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Properties
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Contributes properties to {@link ComponentInfo} children.
-   */
-  private void contributeProperties() {
-    addBroadcastListener(new JavaInfoAddProperties() {
-      public void invoke(JavaInfo javaInfo, List<Property> properties) throws Exception {
-        if (javaInfo instanceof ComponentInfo && javaInfo.getParent() == m_this) {
-          ComponentInfo component = (ComponentInfo) javaInfo;
-          properties.addAll(getContributedProperties(component));
-        }
-      }
-
-      @SuppressWarnings("unchecked")
-      private List<Property> getContributedProperties(ComponentInfo component) {
-        List<Property> properties = (List<Property>) component.getArbitraryValue(m_this);
-        if (properties == null) {
-          properties = Lists.newArrayList();
-          properties.add(new LayerProperty(component));
-          component.putArbitraryValue(m_this, properties);
-        }
-        return properties;
-      }
-    });
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // LayerProperty
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * "Layer" property that is contributed to each {@link ComponentInfo} child of
-   * {@link JLayeredPaneInfo}.
-   */
-  private final class LayerProperty extends JavaProperty {
-    private final ComponentInfo m_component;
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public LayerProperty(ComponentInfo component) {
-      super(component, "Layer", IntegerPropertyEditor.INSTANCE);
-      m_component = component;
-      setCategory(PropertyCategory.system(7));
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Property
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public boolean isModified() throws Exception {
-      return true;
-    }
-
-    @Override
-    public Object getValue() throws Exception {
-      return getLayer(m_component);
-    }
-
-    @Override
-    public void setValue(final Object value) throws Exception {
-      ExecutionUtils.run(m_component, new RunnableEx() {
-        public void run() throws Exception {
-          setValueEx(value);
-        }
-      });
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // setValue() implementation
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    /**
-     * Implementation for {@link #setValue(Object)}.
-     */
-    private void setValueEx(Object value) throws Exception {
-      AstEditor editor = m_this.getEditor();
-      // remove layer from association add(Component,Integer)
-      if (m_component.getAssociation() instanceof InvocationChildAssociation) {
-        InvocationChildAssociation association =
-            (InvocationChildAssociation) m_component.getAssociation();
-        MethodInvocation invocation = association.getInvocation();
-        if (association.getDescription().getSignature().equals(
-            "add(java.awt.Component,java.lang.Object)")
-            && AstNodeUtils.getFullyQualifiedName(
-                DomGenerics.arguments(invocation).get(1),
-                isModified()).equals("java.lang.Integer")) {
-          editor.removeInvocationArgument(invocation, 1);
-        }
-      }
-      // try to update setLayer(Component,layer) or setLayer(Component,layer,position)
-      boolean updated = false;
-      updated |= updateExistingLayerInvocation(editor, value, "setLayer(java.awt.Component,int)");
-      updated |=
-          updateExistingLayerInvocation(editor, value, "setLayer(java.awt.Component,int,int)");
-      // if not updated yet, add new setLayer(Component,layer)
-      if (!updated && value != UNKNOWN_VALUE) {
-        String source = TemplateUtils.format("{0}.setLayer({1}, {2})", m_this, m_component, value);
-        Expression newInvocation = m_component.addExpressionStatement(source);
-        addRelatedNodes(newInvocation);
-      }
-    }
-
-    private boolean updateExistingLayerInvocation(AstEditor editor, Object value, String signature)
-        throws Exception {
-      for (MethodInvocation invocation : getMethodInvocations(signature)) {
-        Expression componentExpression = DomGenerics.arguments(invocation).get(0);
-        Expression layerExpression = DomGenerics.arguments(invocation).get(1);
-        if (m_component.isRepresentedBy(componentExpression)) {
-          if (value == UNKNOWN_VALUE) {
-            editor.removeEnclosingStatement(invocation);
-          } else {
-            String layerSource = IntegerConverter.INSTANCE.toJavaSource(m_component, value);
-            editor.replaceExpression(layerExpression, layerSource);
-          }
-          return true;
-        }
-      }
-      return false;
-    }
-  }
+	private final JLayeredPaneInfo m_this = this;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public JLayeredPaneInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+		contributeProperties();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final IObjectPresentation m_presentation = new DefaultJavaInfoPresentation(this) {
+		@Override
+		public List<ObjectInfo> getChildrenGraphical() throws Exception {
+			List<ObjectInfo> children = super.getChildrenGraphical();
+			Collections.sort(children, new Comparator<ObjectInfo>() {
+				public int compare(ObjectInfo o1, ObjectInfo o2) {
+					return getLayer(o2) - getLayer(o1);
+				}
+			});
+			return children;
+		}
+	};
+
+	@Override
+	public IObjectPresentation getPresentation() {
+		return m_presentation;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private int getLayer(ObjectInfo object) {
+		if (object instanceof ComponentInfo) {
+			return getLayer((ComponentInfo) object);
+		}
+		return -1;
+	}
+
+	private int getLayer(ComponentInfo component) {
+		return ((JLayeredPane) getObject()).getLayer(component.getComponent());
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Properties
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Contributes properties to {@link ComponentInfo} children.
+	 */
+	private void contributeProperties() {
+		addBroadcastListener(new JavaInfoAddProperties() {
+			public void invoke(JavaInfo javaInfo, List<Property> properties) throws Exception {
+				if (javaInfo instanceof ComponentInfo && javaInfo.getParent() == m_this) {
+					ComponentInfo component = (ComponentInfo) javaInfo;
+					properties.addAll(getContributedProperties(component));
+				}
+			}
+
+			@SuppressWarnings("unchecked")
+			private List<Property> getContributedProperties(ComponentInfo component) {
+				List<Property> properties = (List<Property>) component.getArbitraryValue(m_this);
+				if (properties == null) {
+					properties = Lists.newArrayList();
+					properties.add(new LayerProperty(component));
+					component.putArbitraryValue(m_this, properties);
+				}
+				return properties;
+			}
+		});
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// LayerProperty
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * "Layer" property that is contributed to each {@link ComponentInfo} child of
+	 * {@link JLayeredPaneInfo}.
+	 */
+	private final class LayerProperty extends JavaProperty {
+		private final ComponentInfo m_component;
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public LayerProperty(ComponentInfo component) {
+			super(component, "Layer", IntegerPropertyEditor.INSTANCE);
+			m_component = component;
+			setCategory(PropertyCategory.system(7));
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Property
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public boolean isModified() throws Exception {
+			return true;
+		}
+
+		@Override
+		public Object getValue() throws Exception {
+			return getLayer(m_component);
+		}
+
+		@Override
+		public void setValue(final Object value) throws Exception {
+			ExecutionUtils.run(m_component, new RunnableEx() {
+				public void run() throws Exception {
+					setValueEx(value);
+				}
+			});
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// setValue() implementation
+		//
+		////////////////////////////////////////////////////////////////////////////
+		/**
+		 * Implementation for {@link #setValue(Object)}.
+		 */
+		private void setValueEx(Object value) throws Exception {
+			AstEditor editor = m_this.getEditor();
+			// remove layer from association add(Component,Integer)
+			if (m_component.getAssociation() instanceof InvocationChildAssociation) {
+				InvocationChildAssociation association =
+						(InvocationChildAssociation) m_component.getAssociation();
+				MethodInvocation invocation = association.getInvocation();
+				if (association.getDescription().getSignature().equals(
+						"add(java.awt.Component,java.lang.Object)")
+						&& AstNodeUtils.getFullyQualifiedName(
+								DomGenerics.arguments(invocation).get(1),
+								isModified()).equals("java.lang.Integer")) {
+					editor.removeInvocationArgument(invocation, 1);
+				}
+			}
+			// try to update setLayer(Component,layer) or setLayer(Component,layer,position)
+			boolean updated = false;
+			updated |= updateExistingLayerInvocation(editor, value, "setLayer(java.awt.Component,int)");
+			updated |=
+					updateExistingLayerInvocation(editor, value, "setLayer(java.awt.Component,int,int)");
+			// if not updated yet, add new setLayer(Component,layer)
+			if (!updated && value != UNKNOWN_VALUE) {
+				String source = TemplateUtils.format("{0}.setLayer({1}, {2})", m_this, m_component, value);
+				Expression newInvocation = m_component.addExpressionStatement(source);
+				addRelatedNodes(newInvocation);
+			}
+		}
+
+		private boolean updateExistingLayerInvocation(AstEditor editor, Object value, String signature)
+				throws Exception {
+			for (MethodInvocation invocation : getMethodInvocations(signature)) {
+				Expression componentExpression = DomGenerics.arguments(invocation).get(0);
+				Expression layerExpression = DomGenerics.arguments(invocation).get(1);
+				if (m_component.isRepresentedBy(componentExpression)) {
+					if (value == UNKNOWN_VALUE) {
+						editor.removeEnclosingStatement(invocation);
+					} else {
+						String layerSource = IntegerConverter.INSTANCE.toJavaSource(m_component, value);
+						editor.replaceExpression(layerExpression, layerSource);
+					}
+					return true;
+				}
+			}
+			return false;
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/JPanelInfo.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/JPanelInfo.java
index e1831a958..c56b44e5b 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/JPanelInfo.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/JPanelInfo.java
@@ -25,24 +25,24 @@
  * @coverage swing.model
  */
 public class JPanelInfo extends ContainerInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public JPanelInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public JPanelInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // TopBoundsSupport
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected TopBoundsSupport createTopBoundsSupport() {
-    return new JPanelTopBoundsSupport(this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// TopBoundsSupport
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected TopBoundsSupport createTopBoundsSupport() {
+		return new JPanelTopBoundsSupport(this);
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/JScrollPaneInfo.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/JScrollPaneInfo.java
index 845aa2a87..79a5a8dfe 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/JScrollPaneInfo.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/JScrollPaneInfo.java
@@ -27,38 +27,38 @@
  * @coverage swing.model
  */
 public final class JScrollPaneInfo extends AbstractPositionContainerInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public JScrollPaneInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public JScrollPaneInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if position is empty.
-   */
-  public boolean isEmptyPosition(String methodName) {
-    try {
-      Object container = getObject();
-      Method method = container.getClass().getMethod(methodName);
-      JViewport viewport = (JViewport) method.invoke(container);
-      if (viewport == null) {
-        return true;
-      }
-      //
-      Component component = viewport.getView();
-      return getChildByObject(component) == null;
-    } catch (Throwable e) {
-    }
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if position is empty.
+	 */
+	public boolean isEmptyPosition(String methodName) {
+		try {
+			Object container = getObject();
+			Method method = container.getClass().getMethod(methodName);
+			JViewport viewport = (JViewport) method.invoke(container);
+			if (viewport == null) {
+				return true;
+			}
+			//
+			Component component = viewport.getView();
+			return getChildByObject(component) == null;
+		} catch (Throwable e) {
+		}
+		return false;
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/JSplitPaneInfo.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/JSplitPaneInfo.java
index 67d9f9742..9c5f2c97a 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/JSplitPaneInfo.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/JSplitPaneInfo.java
@@ -30,121 +30,121 @@
  * @coverage swing.model
  */
 public final class JSplitPaneInfo extends AbstractPositionContainerInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public JSplitPaneInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public JSplitPaneInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if position is empty.
-   */
-  public boolean isEmptyPosition(boolean left) {
-    JSplitPane splitPane = (JSplitPane) getObject();
-    if (left) {
-      Component component = splitPane.getLeftComponent();
-      return getChildByObject(component) == null;
-    } else {
-      Component component = splitPane.getRightComponent();
-      return getChildByObject(component) == null;
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if position is empty.
+	 */
+	public boolean isEmptyPosition(boolean left) {
+		JSplitPane splitPane = (JSplitPane) getObject();
+		if (left) {
+			Component component = splitPane.getLeftComponent();
+			return getChildByObject(component) == null;
+		} else {
+			Component component = splitPane.getRightComponent();
+			return getChildByObject(component) == null;
+		}
+	}
 
-  /**
-   * @return the {@link Rectangle} for left/right position.
-   */
-  public Rectangle getPositionRectangle(boolean left) {
-    JSplitPane splitPane = (JSplitPane) getObject();
-    if (left) {
-      Component component = splitPane.getLeftComponent();
-      if (component != null) {
-        return CoordinateUtils.get(component.getBounds());
-      }
-    } else {
-      Component component = splitPane.getRightComponent();
-      if (component != null) {
-        return CoordinateUtils.get(component.getBounds());
-      }
-    }
-    return new Rectangle();
-  }
+	/**
+	 * @return the {@link Rectangle} for left/right position.
+	 */
+	public Rectangle getPositionRectangle(boolean left) {
+		JSplitPane splitPane = (JSplitPane) getObject();
+		if (left) {
+			Component component = splitPane.getLeftComponent();
+			if (component != null) {
+				return CoordinateUtils.get(component.getBounds());
+			}
+		} else {
+			Component component = splitPane.getRightComponent();
+			if (component != null) {
+				return CoordinateUtils.get(component.getBounds());
+			}
+		}
+		return new Rectangle();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Creates new {@link ComponentInfo} in left/right position.
-   */
-  public void command_CREATE(ComponentInfo component, boolean left) throws Exception {
-    command_CREATE(component, get_setMethodName(left));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Creates new {@link ComponentInfo} in left/right position.
+	 */
+	public void command_CREATE(ComponentInfo component, boolean left) throws Exception {
+		command_CREATE(component, get_setMethodName(left));
+	}
 
-  /**
-   * Moves child {@link ComponentInfo} to left/right position.
-   */
-  public void command_MOVE(ComponentInfo component, boolean left) throws Exception {
-    command_MOVE(component, get_setMethodName(left));
-  }
+	/**
+	 * Moves child {@link ComponentInfo} to left/right position.
+	 */
+	public void command_MOVE(ComponentInfo component, boolean left) throws Exception {
+		command_MOVE(component, get_setMethodName(left));
+	}
 
-  /**
-   * Reparents {@link ComponentInfo} to left/right position.
-   */
-  public void command_ADD(ComponentInfo component, boolean left) throws Exception {
-    command_ADD(component, get_setMethodName(left));
-  }
+	/**
+	 * Reparents {@link ComponentInfo} to left/right position.
+	 */
+	public void command_ADD(ComponentInfo component, boolean left) throws Exception {
+		command_ADD(component, get_setMethodName(left));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Clipboard
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void clipboardCopy_addCommands(List<ClipboardCommand> commands) throws Exception {
-    super.clipboardCopy_addCommands(commands);
-    {
-      JSplitPane splitPane = (JSplitPane) getObject();
-      clipboard_addComponent(commands, splitPane.getLeftComponent(), true);
-      clipboard_addComponent(commands, splitPane.getRightComponent(), false);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Clipboard
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void clipboardCopy_addCommands(List<ClipboardCommand> commands) throws Exception {
+		super.clipboardCopy_addCommands(commands);
+		{
+			JSplitPane splitPane = (JSplitPane) getObject();
+			clipboard_addComponent(commands, splitPane.getLeftComponent(), true);
+			clipboard_addComponent(commands, splitPane.getRightComponent(), false);
+		}
+	}
 
-  private void clipboard_addComponent(List<ClipboardCommand> commands,
-      Component componentObject,
-      final boolean left) throws Exception {
-    ComponentInfo component = (ComponentInfo) getChildByObject(componentObject);
-    if (component != null) {
-      commands.add(new ContainerClipboardCommand<JSplitPaneInfo>(component) {
-        private static final long serialVersionUID = 0L;
+	private void clipboard_addComponent(List<ClipboardCommand> commands,
+			Component componentObject,
+			final boolean left) throws Exception {
+		ComponentInfo component = (ComponentInfo) getChildByObject(componentObject);
+		if (component != null) {
+			commands.add(new ContainerClipboardCommand<JSplitPaneInfo>(component) {
+				private static final long serialVersionUID = 0L;
 
-        @Override
-        protected void add(JSplitPaneInfo container, ComponentInfo component) throws Exception {
-          container.command_CREATE(component, left);
-        }
-      });
-    }
-  }
+				@Override
+				protected void add(JSplitPaneInfo container, ComponentInfo component) throws Exception {
+					container.command_CREATE(component, left);
+				}
+			});
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the name of "set" method for left/right position.
-   */
-  private String get_setMethodName(boolean left) {
-    return left ? "setLeftComponent" : "setRightComponent";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the name of "set" method for left/right position.
+	 */
+	private String get_setMethodName(boolean left) {
+		return left ? "setLeftComponent" : "setRightComponent";
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/JTabbedPaneAtAccessor.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/JTabbedPaneAtAccessor.java
index 7d6f139d1..bad0880d7 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/JTabbedPaneAtAccessor.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/JTabbedPaneAtAccessor.java
@@ -37,153 +37,153 @@
  * @coverage swing.model
  */
 public final class JTabbedPaneAtAccessor extends ExpressionAccessor {
-  private final String m_signature;
-  private final JTabbedPaneInfo m_pane;
-  private final ComponentInfo m_component;
-  private final String m_defaultSource;
+	private final String m_signature;
+	private final JTabbedPaneInfo m_pane;
+	private final ComponentInfo m_component;
+	private final String m_defaultSource;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public JTabbedPaneAtAccessor(String signature,
-      JTabbedPaneInfo pane,
-      ComponentInfo component,
-      String defaultSource) {
-    m_signature = signature;
-    m_pane = pane;
-    m_component = component;
-    m_defaultSource = defaultSource;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public JTabbedPaneAtAccessor(String signature,
+			JTabbedPaneInfo pane,
+			ComponentInfo component,
+			String defaultSource) {
+		m_signature = signature;
+		m_pane = pane;
+		m_component = component;
+		m_defaultSource = defaultSource;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ExpressionAccessor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Expression getExpression(JavaInfo javaInfo) throws Exception {
-    MethodInvocation invocation = getMethodInvocation();
-    // check if valid creation found
-    if (invocation != null) {
-      return (Expression) invocation.arguments().get(1);
-    }
-    // not found
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ExpressionAccessor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Expression getExpression(JavaInfo javaInfo) throws Exception {
+		MethodInvocation invocation = getMethodInvocation();
+		// check if valid creation found
+		if (invocation != null) {
+			return (Expression) invocation.arguments().get(1);
+		}
+		// not found
+		return null;
+	}
 
-  @Override
-  public boolean setExpression(JavaInfo javaInfo, String source) throws Exception {
-    MethodInvocation invocation = getMethodInvocation();
-    if (invocation != null) {
-      boolean remove = source == null || source.equals(m_defaultSource);
-      if (remove) {
-        javaInfo.startEdit();
-        try {
-          m_pane.getEditor().removeEnclosingStatement(invocation);
-        } finally {
-          javaInfo.endEdit();
-        }
-      } else {
-        Expression oldExpression = (Expression) invocation.arguments().get(1);
-        if (!javaInfo.getEditor().getSource(oldExpression).equals(source)) {
-          javaInfo.startEdit();
-          try {
-            javaInfo.getEditor().replaceExpression(oldExpression, source);
-          } finally {
-            javaInfo.endEdit();
-          }
-        }
-      }
-    } else if (source != null) {
-      javaInfo.startEdit();
-      try {
-        // prepare invocation source
-        String invocationSource;
-        {
-          String methodName = StringUtils.substringBefore(m_signature, "(");
-          int componentIndex = getComponentIndex();
-          invocationSource =
-              TemplateUtils.format("{0}.{1}({2}, {3})", m_pane, methodName, componentIndex, source);
-        }
-        // prepare target
-        StatementTarget target = getAtTarget(m_component);
-        // add invocation
-        Expression expression = m_pane.addExpressionStatement(target, invocationSource);
-        m_component.addRelatedNode(expression);
-      } finally {
-        javaInfo.endEdit();
-      }
-    }
-    // success
-    return true;
-  }
+	@Override
+	public boolean setExpression(JavaInfo javaInfo, String source) throws Exception {
+		MethodInvocation invocation = getMethodInvocation();
+		if (invocation != null) {
+			boolean remove = source == null || source.equals(m_defaultSource);
+			if (remove) {
+				javaInfo.startEdit();
+				try {
+					m_pane.getEditor().removeEnclosingStatement(invocation);
+				} finally {
+					javaInfo.endEdit();
+				}
+			} else {
+				Expression oldExpression = (Expression) invocation.arguments().get(1);
+				if (!javaInfo.getEditor().getSource(oldExpression).equals(source)) {
+					javaInfo.startEdit();
+					try {
+						javaInfo.getEditor().replaceExpression(oldExpression, source);
+					} finally {
+						javaInfo.endEdit();
+					}
+				}
+			}
+		} else if (source != null) {
+			javaInfo.startEdit();
+			try {
+				// prepare invocation source
+				String invocationSource;
+				{
+					String methodName = StringUtils.substringBefore(m_signature, "(");
+					int componentIndex = getComponentIndex();
+					invocationSource =
+							TemplateUtils.format("{0}.{1}({2}, {3})", m_pane, methodName, componentIndex, source);
+				}
+				// prepare target
+				StatementTarget target = getAtTarget(m_component);
+				// add invocation
+				Expression expression = m_pane.addExpressionStatement(target, invocationSource);
+				m_component.addRelatedNode(expression);
+			} finally {
+				javaInfo.endEdit();
+			}
+		}
+		// success
+		return true;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link MethodInvocation} for this {@link JTabbedPaneInfo} and {@link ComponentInfo}
-   *         .
-   */
-  private MethodInvocation getMethodInvocation() throws Exception {
-    int componentIndex = getComponentIndex();
-    Assert.isTrue(componentIndex >= 0);
-    //
-    List<MethodInvocation> invocations = m_pane.getMethodInvocations(m_signature);
-    for (MethodInvocation invocation : invocations) {
-      if (isAtIndexInvocation(invocation, componentIndex)) {
-        return invocation;
-      }
-    }
-    // not found
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link MethodInvocation} for this {@link JTabbedPaneInfo} and {@link ComponentInfo}
+	 *         .
+	 */
+	private MethodInvocation getMethodInvocation() throws Exception {
+		int componentIndex = getComponentIndex();
+		Assert.isTrue(componentIndex >= 0);
+		//
+		List<MethodInvocation> invocations = m_pane.getMethodInvocations(m_signature);
+		for (MethodInvocation invocation : invocations) {
+			if (isAtIndexInvocation(invocation, componentIndex)) {
+				return invocation;
+			}
+		}
+		// not found
+		return null;
+	}
 
-  /**
-   * @return the {@link StatementTarget} for adding "set*At()" {@link MethodInvocation}.
-   */
-  static StatementTarget getAtTarget(ComponentInfo component) throws Exception {
-    Statement associationStatement = component.getAssociation().getStatement();
-    return new StatementTarget(associationStatement, false);
-  }
+	/**
+	 * @return the {@link StatementTarget} for adding "set*At()" {@link MethodInvocation}.
+	 */
+	static StatementTarget getAtTarget(ComponentInfo component) throws Exception {
+		Statement associationStatement = component.getAssociation().getStatement();
+		return new StatementTarget(associationStatement, false);
+	}
 
-  /**
-   * @return the index from given "set*At()" {@link MethodInvocation}.
-   */
-  static int getAtIndex(MethodInvocation invocation) {
-    Expression indexExpression = (Expression) invocation.arguments().get(0);
-    // we generate only NumberLiteral
-    if (indexExpression instanceof NumberLiteral) {
-      String token = ((NumberLiteral) indexExpression).getToken();
-      return Integer.parseInt(token);
-    }
-    // if not NumberLiteral, then we parsed it, so we know its value
-    return (Integer) JavaInfoEvaluationHelper.getValue(indexExpression);
-  }
+	/**
+	 * @return the index from given "set*At()" {@link MethodInvocation}.
+	 */
+	static int getAtIndex(MethodInvocation invocation) {
+		Expression indexExpression = (Expression) invocation.arguments().get(0);
+		// we generate only NumberLiteral
+		if (indexExpression instanceof NumberLiteral) {
+			String token = ((NumberLiteral) indexExpression).getToken();
+			return Integer.parseInt(token);
+		}
+		// if not NumberLiteral, then we parsed it, so we know its value
+		return (Integer) JavaInfoEvaluationHelper.getValue(indexExpression);
+	}
 
-  /**
-   * Sets the new value for index in given "set*At()" {@link MethodInvocation}.
-   */
-  static void setAtIndex(AstEditor editor, MethodInvocation invocation, int index) throws Exception {
-    Expression indexExpression = (Expression) invocation.arguments().get(0);
-    editor.replaceExpression(indexExpression, Integer.toString(index));
-  }
+	/**
+	 * Sets the new value for index in given "set*At()" {@link MethodInvocation}.
+	 */
+	static void setAtIndex(AstEditor editor, MethodInvocation invocation, int index) throws Exception {
+		Expression indexExpression = (Expression) invocation.arguments().get(0);
+		editor.replaceExpression(indexExpression, Integer.toString(index));
+	}
 
-  /**
-   * @return <code>true</code> if given {@link MethodInvocation} has required index.
-   */
-  static boolean isAtIndexInvocation(MethodInvocation invocation, int componentIndex) {
-    return getAtIndex(invocation) == componentIndex;
-  }
+	/**
+	 * @return <code>true</code> if given {@link MethodInvocation} has required index.
+	 */
+	static boolean isAtIndexInvocation(MethodInvocation invocation, int componentIndex) {
+		return getAtIndex(invocation) == componentIndex;
+	}
 
-  /**
-   * @return the index of this {@link ComponentInfo} of {@link JTabbedPaneInfo}.
-   */
-  private int getComponentIndex() {
-    return m_pane.getChildrenComponents().indexOf(m_component);
-  }
+	/**
+	 * @return the index of this {@link ComponentInfo} of {@link JTabbedPaneInfo}.
+	 */
+	private int getComponentIndex() {
+		return m_pane.getChildrenComponents().indexOf(m_component);
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/JTabbedPaneInfo.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/JTabbedPaneInfo.java
index 27404764f..31a9922ca 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/JTabbedPaneInfo.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/JTabbedPaneInfo.java
@@ -64,444 +64,444 @@
  * @coverage swing.model
  */
 public final class JTabbedPaneInfo extends ContainerInfo {
-  private final StackContainerSupport<ComponentInfo> m_stackContainer =
-      new StackContainerSupport<ComponentInfo>(this) {
-        @Override
-        protected List<ComponentInfo> getChildren() {
-          return getChildrenComponents();
-        }
-      };
+	private final StackContainerSupport<ComponentInfo> m_stackContainer =
+			new StackContainerSupport<ComponentInfo>(this) {
+		@Override
+		protected List<ComponentInfo> getChildren() {
+			return getChildrenComponents();
+		}
+	};
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public JTabbedPaneInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public JTabbedPaneInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if orientation is horizontal.
-   */
-  public boolean isHorizontal() {
-    JTabbedPane pane = (JTabbedPane) getObject();
-    int tabPlacement = pane.getTabPlacement();
-    return tabPlacement == SwingConstants.TOP || tabPlacement == SwingConstants.BOTTOM;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if orientation is horizontal.
+	 */
+	public boolean isHorizontal() {
+		JTabbedPane pane = (JTabbedPane) getObject();
+		int tabPlacement = pane.getTabPlacement();
+		return tabPlacement == SwingConstants.TOP || tabPlacement == SwingConstants.BOTTOM;
+	}
 
-  /**
-   * @return the array of {@link JTabbedPaneTabInfo} for tabs on this {@link JTabbedPane}.
-   */
-  public List<JTabbedPaneTabInfo> getTabs() {
-    JTabbedPane pane = (JTabbedPane) getObject();
-    int tabCount = pane.getTabCount();
-    // fill tabs
-    List<JTabbedPaneTabInfo> tabs = Lists.newArrayList();
-    for (int i = 0; i < tabCount; i++) {
-      Component componentObject = pane.getComponentAt(i);
-      ComponentInfo component = (ComponentInfo) getChildByObject(componentObject);
-      if (component != null) {
-        Rectangle bounds = CoordinateUtils.get(pane.getBoundsAt(i));
-        tabs.add(new JTabbedPaneTabInfo(this, component, bounds));
-      }
-    }
-    //
-    return tabs;
-  }
+	/**
+	 * @return the array of {@link JTabbedPaneTabInfo} for tabs on this {@link JTabbedPane}.
+	 */
+	public List<JTabbedPaneTabInfo> getTabs() {
+		JTabbedPane pane = (JTabbedPane) getObject();
+		int tabCount = pane.getTabCount();
+		// fill tabs
+		List<JTabbedPaneTabInfo> tabs = Lists.newArrayList();
+		for (int i = 0; i < tabCount; i++) {
+			Component componentObject = pane.getComponentAt(i);
+			ComponentInfo component = (ComponentInfo) getChildByObject(componentObject);
+			if (component != null) {
+				Rectangle bounds = CoordinateUtils.get(pane.getBoundsAt(i));
+				tabs.add(new JTabbedPaneTabInfo(this, component, bounds));
+			}
+		}
+		//
+		return tabs;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Active component
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link ComponentInfo} for active tab.
-   */
-  public ComponentInfo getActiveComponent() {
-    return m_stackContainer.getActive();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Active component
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link ComponentInfo} for active tab.
+	 */
+	public ComponentInfo getActiveComponent() {
+		return m_stackContainer.getActive();
+	}
 
-  /**
-   * Sets the active {@link ComponentInfo}.
-   */
-  public void setActiveComponent(ComponentInfo component) {
-    m_stackContainer.setActive(component);
-  }
+	/**
+	 * Sets the active {@link ComponentInfo}.
+	 */
+	public void setActiveComponent(ComponentInfo component) {
+		m_stackContainer.setActive(component);
+	}
 
-  @Override
-  protected void refresh_afterCreate() throws Exception {
-    super.refresh_afterCreate();
-    JTabbedPane pane = (JTabbedPane) getObject();
-    // if for some reason tab Component is "null", for example we were not able to evaluate it, remove tab
-    {
-      int tabCount = pane.getTabCount();
-      for (int i = tabCount - 1; i >= 0; i--) {
-        if (pane.getComponentAt(i) == null) {
-          pane.remove(i);
-        }
-      }
-    }
-    // apply active component
-    {
-      ComponentInfo activeComponent = getActiveComponent();
-      if (activeComponent != null) {
-        pane.setSelectedComponent(activeComponent.getComponent());
-      }
-    }
-  }
+	@Override
+	protected void refresh_afterCreate() throws Exception {
+		super.refresh_afterCreate();
+		JTabbedPane pane = (JTabbedPane) getObject();
+		// if for some reason tab Component is "null", for example we were not able to evaluate it, remove tab
+		{
+			int tabCount = pane.getTabCount();
+			for (int i = tabCount - 1; i >= 0; i--) {
+				if (pane.getComponentAt(i) == null) {
+					pane.remove(i);
+				}
+			}
+		}
+		// apply active component
+		{
+			ComponentInfo activeComponent = getActiveComponent();
+			if (activeComponent != null) {
+				pane.setSelectedComponent(activeComponent.getComponent());
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final IObjectPresentation m_presentation = new DefaultJavaInfoPresentation(this) {
-    @Override
-    public List<ObjectInfo> getChildrenGraphical() throws Exception {
-      List<ObjectInfo> children = super.getChildrenGraphical();
-      // remove all Components's except of active
-      ComponentInfo activeComponent = getActiveComponent();
-      for (Iterator<ObjectInfo> I = children.iterator(); I.hasNext();) {
-        ObjectInfo child = I.next();
-        if (child instanceof ComponentInfo && child != activeComponent) {
-          I.remove();
-        }
-      }
-      // OK, show these children
-      return children;
-    }
-  };
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final IObjectPresentation m_presentation = new DefaultJavaInfoPresentation(this) {
+		@Override
+		public List<ObjectInfo> getChildrenGraphical() throws Exception {
+			List<ObjectInfo> children = super.getChildrenGraphical();
+			// remove all Components's except of active
+			ComponentInfo activeComponent = getActiveComponent();
+			for (Iterator<ObjectInfo> I = children.iterator(); I.hasNext();) {
+				ObjectInfo child = I.next();
+				if (child instanceof ComponentInfo && child != activeComponent) {
+					I.remove();
+				}
+			}
+			// OK, show these children
+			return children;
+		}
+	};
 
-  @Override
-  public IObjectPresentation getPresentation() {
-    return m_presentation;
-  }
+	@Override
+	public IObjectPresentation getPresentation() {
+		return m_presentation;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Events
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void initialize() throws Exception {
-    super.initialize();
-    // add listeners
-    final JTabbedPaneInfo pane = this;
-    addBroadcastListener(new ObjectInfoChildAddAfter() {
-      public void invoke(ObjectInfo parent, ObjectInfo child) throws Exception {
-        if (child instanceof ComponentInfo && parent == pane) {
-          final int newIndex = pane.getChildrenComponents().indexOf(child);
-          processAtInvocations(new AtInvocationProcessor() {
-            public void process(AstEditor editor, MethodInvocation invocation, int index)
-                throws Exception {
-              if (index >= newIndex) {
-                JTabbedPaneAtAccessor.setAtIndex(editor, invocation, index + 1);
-              }
-            }
-          });
-        }
-      }
-    });
-    addBroadcastListener(new ObjectEventListener() {
-      @Override
-      public void childMoveAfter(ObjectInfo parent,
-          ObjectInfo child,
-          ObjectInfo nextChild,
-          int oldIndex,
-          int newIndex) throws Exception {
-        if (child instanceof ComponentInfo && parent == pane) {
-          moveUpdateAtInvocations((ComponentInfo) child, oldIndex, newIndex);
-        }
-      }
-    });
-    addBroadcastListener(new ObjectInfoDelete() {
-      @Override
-      public void before(ObjectInfo parent, ObjectInfo child) throws Exception {
-        if (child instanceof ComponentInfo && parent == pane) {
-          removeComponentStatements((ComponentInfo) child);
-        }
-      }
-    });
-    addBroadcastListener(new JavaEventListener() {
-      @Override
-      public void moveBefore(JavaInfo child, ObjectInfo oldParent, JavaInfo newParent)
-          throws Exception {
-        // move OUT
-        if (child instanceof ComponentInfo && child.getParent() == pane && newParent != pane) {
-          removeComponentStatements((ComponentInfo) child);
-        }
-      }
-    });
-    addBroadcastListener(new JavaInfoAddProperties() {
-      public void invoke(JavaInfo javaInfo, List<Property> properties) throws Exception {
-        if (javaInfo instanceof ComponentInfo && javaInfo.getParent() == pane) {
-          ComponentInfo component = (ComponentInfo) javaInfo;
-          // prepare complex "Tab" property
-          ComplexProperty complexProperty = (ComplexProperty) component.getArbitraryValue(pane);
-          if (complexProperty == null) {
-            complexProperty = new ComplexProperty("Tab", "(Tab properties)");
-            complexProperty.setCategory(PropertyCategory.system(4));
-            complexProperty.setModified(true);
-            // set sub-properties
-            complexProperty.setProperties(getTabProperties(component));
-            // remember
-            component.putArbitraryValue(pane, complexProperty);
-          }
-          // add "Tab" property
-          properties.add(complexProperty);
-        }
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Events
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void initialize() throws Exception {
+		super.initialize();
+		// add listeners
+		final JTabbedPaneInfo pane = this;
+		addBroadcastListener(new ObjectInfoChildAddAfter() {
+			public void invoke(ObjectInfo parent, ObjectInfo child) throws Exception {
+				if (child instanceof ComponentInfo && parent == pane) {
+					final int newIndex = pane.getChildrenComponents().indexOf(child);
+					processAtInvocations(new AtInvocationProcessor() {
+						public void process(AstEditor editor, MethodInvocation invocation, int index)
+								throws Exception {
+							if (index >= newIndex) {
+								JTabbedPaneAtAccessor.setAtIndex(editor, invocation, index + 1);
+							}
+						}
+					});
+				}
+			}
+		});
+		addBroadcastListener(new ObjectEventListener() {
+			@Override
+			public void childMoveAfter(ObjectInfo parent,
+					ObjectInfo child,
+					ObjectInfo nextChild,
+					int oldIndex,
+					int newIndex) throws Exception {
+				if (child instanceof ComponentInfo && parent == pane) {
+					moveUpdateAtInvocations((ComponentInfo) child, oldIndex, newIndex);
+				}
+			}
+		});
+		addBroadcastListener(new ObjectInfoDelete() {
+			@Override
+			public void before(ObjectInfo parent, ObjectInfo child) throws Exception {
+				if (child instanceof ComponentInfo && parent == pane) {
+					removeComponentStatements((ComponentInfo) child);
+				}
+			}
+		});
+		addBroadcastListener(new JavaEventListener() {
+			@Override
+			public void moveBefore(JavaInfo child, ObjectInfo oldParent, JavaInfo newParent)
+					throws Exception {
+				// move OUT
+				if (child instanceof ComponentInfo && child.getParent() == pane && newParent != pane) {
+					removeComponentStatements((ComponentInfo) child);
+				}
+			}
+		});
+		addBroadcastListener(new JavaInfoAddProperties() {
+			public void invoke(JavaInfo javaInfo, List<Property> properties) throws Exception {
+				if (javaInfo instanceof ComponentInfo && javaInfo.getParent() == pane) {
+					ComponentInfo component = (ComponentInfo) javaInfo;
+					// prepare complex "Tab" property
+					ComplexProperty complexProperty = (ComplexProperty) component.getArbitraryValue(pane);
+					if (complexProperty == null) {
+						complexProperty = new ComplexProperty("Tab", "(Tab properties)");
+						complexProperty.setCategory(PropertyCategory.system(4));
+						complexProperty.setModified(true);
+						// set sub-properties
+						complexProperty.setProperties(getTabProperties(component));
+						// remember
+						component.putArbitraryValue(pane, complexProperty);
+					}
+					// add "Tab" property
+					properties.add(complexProperty);
+				}
+			}
+		});
+	}
 
-  /**
-   * @return the array of "Tab" {@link Property}'s for given {@link ComponentInfo}.
-   */
-  private Property[] getTabProperties(ComponentInfo component) throws Exception {
-    // prepare GenericPropertyDescription's
-    Map<String, GenericPropertyDescription> idToProperty = Maps.newTreeMap();
-    for (MethodDescription method : getDescription().getMethods()) {
-      String signature = method.getSignature();
-      //
-      for (ParameterDescription parameter : method.getParameters()) {
-        String defaultSource = parameter.getDefaultSource();
-        //
-        String propertyId = parameter.getProperty();
-        if (propertyId != null && propertyId.startsWith("tab:")) {
-          GenericPropertyDescription description = idToProperty.get(propertyId);
-          // create new description
-          if (description == null) {
-            String title = propertyId.substring("tab:".length()).trim();
-            description = new GenericPropertyDescription(propertyId, title);
-            description.setConverter(parameter.getConverter());
-            description.setEditor(parameter.getEditor());
-            // remember description
-            idToProperty.put(propertyId, description);
-          }
-          // add accessor
-          if (method.getName().endsWith("At")) {
-            // setTitleAt(index,value), setIconAt(index,value), etc
-            description.addAccessor(new JTabbedPaneAtAccessor(signature,
-                this,
-                component,
-                defaultSource));
-          } else if (method.getName().startsWith("add")) {
-            // check for correct (invocation) association, with correct signature
-            if (component.getAssociation() instanceof InvocationChildAssociation) {
-              InvocationChildAssociation association =
-                  (InvocationChildAssociation) component.getAssociation();
-              if (AstNodeUtils.getMethodSignature(association.getInvocation()).equals(signature)) {
-                description.addAccessor(new InvocationChildAssociationAccessor(parameter.getIndex(),
-                    defaultSource));
-              }
-            }
-          }
-        }
-      }
-    }
-    // creation properties
-    Property[] properties = new Property[idToProperty.size()];
-    int index = 0;
-    for (GenericPropertyDescription description : idToProperty.values()) {
-      properties[index++] =
-          new GenericPropertyImpl(component,
-              description.getTitle(),
-              description.getAccessorsArray(),
-              Property.UNKNOWN_VALUE,
-              description.getConverter(),
-              description.getEditor());
-    }
-    //
-    return properties;
-  }
+	/**
+	 * @return the array of "Tab" {@link Property}'s for given {@link ComponentInfo}.
+	 */
+	private Property[] getTabProperties(ComponentInfo component) throws Exception {
+		// prepare GenericPropertyDescription's
+		Map<String, GenericPropertyDescription> idToProperty = Maps.newTreeMap();
+		for (MethodDescription method : getDescription().getMethods()) {
+			String signature = method.getSignature();
+			//
+			for (ParameterDescription parameter : method.getParameters()) {
+				String defaultSource = parameter.getDefaultSource();
+				//
+				String propertyId = parameter.getProperty();
+				if (propertyId != null && propertyId.startsWith("tab:")) {
+					GenericPropertyDescription description = idToProperty.get(propertyId);
+					// create new description
+					if (description == null) {
+						String title = propertyId.substring("tab:".length()).trim();
+						description = new GenericPropertyDescription(propertyId, title);
+						description.setConverter(parameter.getConverter());
+						description.setEditor(parameter.getEditor());
+						// remember description
+						idToProperty.put(propertyId, description);
+					}
+					// add accessor
+					if (method.getName().endsWith("At")) {
+						// setTitleAt(index,value), setIconAt(index,value), etc
+						description.addAccessor(new JTabbedPaneAtAccessor(signature,
+								this,
+								component,
+								defaultSource));
+					} else if (method.getName().startsWith("add")) {
+						// check for correct (invocation) association, with correct signature
+						if (component.getAssociation() instanceof InvocationChildAssociation) {
+							InvocationChildAssociation association =
+									(InvocationChildAssociation) component.getAssociation();
+							if (AstNodeUtils.getMethodSignature(association.getInvocation()).equals(signature)) {
+								description.addAccessor(new InvocationChildAssociationAccessor(parameter.getIndex(),
+										defaultSource));
+							}
+						}
+					}
+				}
+			}
+		}
+		// creation properties
+		Property[] properties = new Property[idToProperty.size()];
+		int index = 0;
+		for (GenericPropertyDescription description : idToProperty.values()) {
+			properties[index++] =
+					new GenericPropertyImpl(component,
+							description.getTitle(),
+							description.getAccessorsArray(),
+							Property.UNKNOWN_VALUE,
+							description.getConverter(),
+							description.getEditor());
+		}
+		//
+		return properties;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Creates new {@link ComponentInfo} and associates using given method.
-   */
-  public final void command_CREATE(ComponentInfo component, ComponentInfo nextComponent)
-      throws Exception {
-    JavaInfoUtils.add(component, getAssociationObject(), this, nextComponent);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Creates new {@link ComponentInfo} and associates using given method.
+	 */
+	public final void command_CREATE(ComponentInfo component, ComponentInfo nextComponent)
+			throws Exception {
+		JavaInfoUtils.add(component, getAssociationObject(), this, nextComponent);
+	}
 
-  /**
-   * Moves existing child {@link ComponentInfo} to given position.
-   */
-  public final void command_MOVE(ComponentInfo component, ComponentInfo nextComponent)
-      throws Exception {
-    if (component.getParent() == this) {
-      // before itself
-      if (component == nextComponent) {
-        return;
-      }
-      // before already next
-      {
-        List<ComponentInfo> components = getChildrenComponents();
-        ComponentInfo current_nextComponent = GenericsUtils.getNextOrNull(components, component);
-        if (nextComponent == current_nextComponent) {
-          return;
-        }
-      }
-    }
-    // do move
-    JavaInfoUtils.move(component, getAssociationObject(), this, nextComponent);
-  }
+	/**
+	 * Moves existing child {@link ComponentInfo} to given position.
+	 */
+	public final void command_MOVE(ComponentInfo component, ComponentInfo nextComponent)
+			throws Exception {
+		if (component.getParent() == this) {
+			// before itself
+			if (component == nextComponent) {
+				return;
+			}
+			// before already next
+			{
+				List<ComponentInfo> components = getChildrenComponents();
+				ComponentInfo current_nextComponent = GenericsUtils.getNextOrNull(components, component);
+				if (nextComponent == current_nextComponent) {
+					return;
+				}
+			}
+		}
+		// do move
+		JavaInfoUtils.move(component, getAssociationObject(), this, nextComponent);
+	}
 
-  /**
-   * Adds {@link ComponentInfo} from other parent to given position.
-   */
-  public final void command_ADD(ComponentInfo component, ComponentInfo nextComponent)
-      throws Exception {
-    command_MOVE(component, nextComponent);
-  }
+	/**
+	 * Adds {@link ComponentInfo} from other parent to given position.
+	 */
+	public final void command_ADD(ComponentInfo component, ComponentInfo nextComponent)
+			throws Exception {
+		command_MOVE(component, nextComponent);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the standard {@link AssociationObject} for {@link JTabbedPane}.
-   */
-  private static AssociationObject getAssociationObject() throws Exception {
-    return AssociationObjects.invocationChild(
-        "%parent%.addTab(\"New tab\", null, %child%, null)",
-        false);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the standard {@link AssociationObject} for {@link JTabbedPane}.
+	 */
+	private static AssociationObject getAssociationObject() throws Exception {
+		return AssociationObjects.invocationChild(
+				"%parent%.addTab(\"New tab\", null, %child%, null)",
+				false);
+	}
 
-  /**
-   * Removes the {@link Statement} for given {@link ComponentInfo}, such as association and
-   * "set*At()" invocations.
-   */
-  private void removeComponentStatements(ComponentInfo component) throws Exception {
-    // update set*At() invocations
-    {
-      final int componentIndex = getChildrenComponents().indexOf(component);
-      processAtInvocations(new AtInvocationProcessor() {
-        public void process(AstEditor editor, MethodInvocation invocation, int index)
-            throws Exception {
-          if (index == componentIndex) {
-            editor.removeEnclosingStatement(invocation);
-          } else if (index > componentIndex) {
-            JTabbedPaneAtAccessor.setAtIndex(editor, invocation, index - 1);
-          }
-        }
-      });
-    }
-  }
+	/**
+	 * Removes the {@link Statement} for given {@link ComponentInfo}, such as association and
+	 * "set*At()" invocations.
+	 */
+	private void removeComponentStatements(ComponentInfo component) throws Exception {
+		// update set*At() invocations
+		{
+			final int componentIndex = getChildrenComponents().indexOf(component);
+			processAtInvocations(new AtInvocationProcessor() {
+				public void process(AstEditor editor, MethodInvocation invocation, int index)
+						throws Exception {
+					if (index == componentIndex) {
+						editor.removeEnclosingStatement(invocation);
+					} else if (index > componentIndex) {
+						JTabbedPaneAtAccessor.setAtIndex(editor, invocation, index - 1);
+					}
+				}
+			});
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // "set*At()" invocations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Updates each <code>set*At()</code> invocation according move component operation.
-   */
-  private void moveUpdateAtInvocations(ComponentInfo child, int oldIndex, int newIndex)
-      throws Exception {
-    Assert.isTrue(oldIndex != newIndex);
-    ComponentInfo component = child;
-    //
-    final StatementTarget target[] = new StatementTarget[1];
-    target[0] = JTabbedPaneAtAccessor.getAtTarget(component);
-    //
-    if (oldIndex > newIndex) {
-      final int oldIndex2 = getComponentIndexForObject(oldIndex);
-      final int newIndex2 = getComponentIndexForObject(newIndex);
-      processAtInvocations(new AtInvocationProcessor() {
-        public void process(AstEditor editor, MethodInvocation invocation, int index)
-            throws Exception {
-          if (index >= newIndex2 && index < oldIndex2) {
-            JTabbedPaneAtAccessor.setAtIndex(editor, invocation, index + 1);
-          }
-          if (index == oldIndex2) {
-            JTabbedPaneAtAccessor.setAtIndex(editor, invocation, newIndex2);
-            // move statement
-            Statement statement = AstNodeUtils.getEnclosingStatement(invocation);
-            editor.moveStatement(statement, target[0]);
-            // update target
-            target[0] = new StatementTarget(statement, false);
-          }
-        }
-      });
-    } else {
-      final int oldIndex2 = getComponentIndexForObject(oldIndex);
-      final int newIndex2 = getComponentIndexForObject(newIndex);
-      processAtInvocations(new AtInvocationProcessor() {
-        public void process(AstEditor editor, MethodInvocation invocation, int index)
-            throws Exception {
-          if (index > oldIndex2 && index <= newIndex2) {
-            JTabbedPaneAtAccessor.setAtIndex(editor, invocation, index - 1);
-          }
-          if (index == oldIndex2) {
-            JTabbedPaneAtAccessor.setAtIndex(editor, invocation, newIndex2);
-            // move statement
-            Statement statement = AstNodeUtils.getEnclosingStatement(invocation);
-            editor.moveStatement(statement, target[0]);
-            // update target
-            target[0] = new StatementTarget(statement, false);
-          }
-        }
-      });
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// "set*At()" invocations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Updates each <code>set*At()</code> invocation according move component operation.
+	 */
+	private void moveUpdateAtInvocations(ComponentInfo child, int oldIndex, int newIndex)
+			throws Exception {
+		Assert.isTrue(oldIndex != newIndex);
+		ComponentInfo component = child;
+		//
+		final StatementTarget target[] = new StatementTarget[1];
+		target[0] = JTabbedPaneAtAccessor.getAtTarget(component);
+		//
+		if (oldIndex > newIndex) {
+			final int oldIndex2 = getComponentIndexForObject(oldIndex);
+			final int newIndex2 = getComponentIndexForObject(newIndex);
+			processAtInvocations(new AtInvocationProcessor() {
+				public void process(AstEditor editor, MethodInvocation invocation, int index)
+						throws Exception {
+					if (index >= newIndex2 && index < oldIndex2) {
+						JTabbedPaneAtAccessor.setAtIndex(editor, invocation, index + 1);
+					}
+					if (index == oldIndex2) {
+						JTabbedPaneAtAccessor.setAtIndex(editor, invocation, newIndex2);
+						// move statement
+						Statement statement = AstNodeUtils.getEnclosingStatement(invocation);
+						editor.moveStatement(statement, target[0]);
+						// update target
+						target[0] = new StatementTarget(statement, false);
+					}
+				}
+			});
+		} else {
+			final int oldIndex2 = getComponentIndexForObject(oldIndex);
+			final int newIndex2 = getComponentIndexForObject(newIndex);
+			processAtInvocations(new AtInvocationProcessor() {
+				public void process(AstEditor editor, MethodInvocation invocation, int index)
+						throws Exception {
+					if (index > oldIndex2 && index <= newIndex2) {
+						JTabbedPaneAtAccessor.setAtIndex(editor, invocation, index - 1);
+					}
+					if (index == oldIndex2) {
+						JTabbedPaneAtAccessor.setAtIndex(editor, invocation, newIndex2);
+						// move statement
+						Statement statement = AstNodeUtils.getEnclosingStatement(invocation);
+						editor.moveStatement(statement, target[0]);
+						// update target
+						target[0] = new StatementTarget(statement, false);
+					}
+				}
+			});
+		}
+	}
 
-  /**
-   * @return the index of {@link ComponentInfo} for given index of {@link ObjectInfo} child.
-   */
-  private int getComponentIndexForObject(int objectIndex) {
-    List<ObjectInfo> children = getChildren();
-    List<ComponentInfo> components = getChildrenComponents();
-    while (true) {
-      Object o = children.get(objectIndex++);
-      int componentIndex = components.indexOf(o);
-      if (componentIndex != -1) {
-        return componentIndex;
-      }
-    }
-  }
+	/**
+	 * @return the index of {@link ComponentInfo} for given index of {@link ObjectInfo} child.
+	 */
+	private int getComponentIndexForObject(int objectIndex) {
+		List<ObjectInfo> children = getChildren();
+		List<ComponentInfo> components = getChildrenComponents();
+		while (true) {
+			Object o = children.get(objectIndex++);
+			int componentIndex = components.indexOf(o);
+			if (componentIndex != -1) {
+				return componentIndex;
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // "set*At()" processing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Processes each <code>set*At()</code> invocation using given {@link AtInvocationProcessor}.
-   */
-  private void processAtInvocations(AtInvocationProcessor processor) throws Exception {
-    AstEditor editor = getEditor();
-    for (ASTNode node : getRelatedNodes()) {
-      if (node.getLocationInParent() == MethodInvocation.EXPRESSION_PROPERTY) {
-        MethodInvocation invocation = (MethodInvocation) node.getParent();
-        // check invocation
-        if (invocation.getName().getIdentifier().endsWith("At")) {
-          int index = JTabbedPaneAtAccessor.getAtIndex(invocation);
-          processor.process(editor, invocation, index);
-        }
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// "set*At()" processing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Processes each <code>set*At()</code> invocation using given {@link AtInvocationProcessor}.
+	 */
+	private void processAtInvocations(AtInvocationProcessor processor) throws Exception {
+		AstEditor editor = getEditor();
+		for (ASTNode node : getRelatedNodes()) {
+			if (node.getLocationInParent() == MethodInvocation.EXPRESSION_PROPERTY) {
+				MethodInvocation invocation = (MethodInvocation) node.getParent();
+				// check invocation
+				if (invocation.getName().getIdentifier().endsWith("At")) {
+					int index = JTabbedPaneAtAccessor.getAtIndex(invocation);
+					processor.process(editor, invocation, index);
+				}
+			}
+		}
+	}
 
-  /**
-   * Processor for processing <code>set*At()</code> invocations.
-   *
-   * @author scheglov_ke
-   */
-  private interface AtInvocationProcessor {
-    void process(AstEditor editor, MethodInvocation invocation, int index) throws Exception;
-  }
+	/**
+	 * Processor for processing <code>set*At()</code> invocations.
+	 *
+	 * @author scheglov_ke
+	 */
+	private interface AtInvocationProcessor {
+		void process(AstEditor editor, MethodInvocation invocation, int index) throws Exception;
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/JTabbedPaneTabInfo.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/JTabbedPaneTabInfo.java
index bcd4dc038..9c12c84f6 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/JTabbedPaneTabInfo.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/JTabbedPaneTabInfo.java
@@ -21,63 +21,63 @@
  * @coverage swing.model
  */
 public final class JTabbedPaneTabInfo {
-  private final JTabbedPaneInfo m_pane;
-  private final ComponentInfo m_component;
-  private final Rectangle m_bounds;
+	private final JTabbedPaneInfo m_pane;
+	private final ComponentInfo m_component;
+	private final Rectangle m_bounds;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public JTabbedPaneTabInfo(JTabbedPaneInfo pane, ComponentInfo component, Rectangle bounds) {
-    m_pane = pane;
-    m_component = component;
-    m_bounds = bounds;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public JTabbedPaneTabInfo(JTabbedPaneInfo pane, ComponentInfo component, Rectangle bounds) {
+		m_pane = pane;
+		m_component = component;
+		m_bounds = bounds;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public int hashCode() {
-    return m_component.hashCode();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public int hashCode() {
+		return m_component.hashCode();
+	}
 
-  @Override
-  public boolean equals(Object obj) {
-    if (obj instanceof JTabbedPaneTabInfo) {
-      JTabbedPaneTabInfo tab = (JTabbedPaneTabInfo) obj;
-      return tab.m_component == m_component;
-    }
-    return false;
-  }
+	@Override
+	public boolean equals(Object obj) {
+		if (obj instanceof JTabbedPaneTabInfo) {
+			JTabbedPaneTabInfo tab = (JTabbedPaneTabInfo) obj;
+			return tab.m_component == m_component;
+		}
+		return false;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link JTabbedPaneInfo} container for this tab.
-   */
-  public JTabbedPaneInfo getPane() {
-    return m_pane;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link JTabbedPaneInfo} container for this tab.
+	 */
+	public JTabbedPaneInfo getPane() {
+		return m_pane;
+	}
 
-  /**
-   * @return the {@link ComponentInfo} of this tab.
-   */
-  public ComponentInfo getComponent() {
-    return m_component;
-  }
+	/**
+	 * @return the {@link ComponentInfo} of this tab.
+	 */
+	public ComponentInfo getComponent() {
+		return m_component;
+	}
 
-  /**
-   * @return the bounds of this tab.
-   */
-  public Rectangle getBounds() {
-    return m_bounds;
-  }
+	/**
+	 * @return the bounds of this tab.
+	 */
+	public Rectangle getBounds() {
+		return m_bounds;
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/JTableInfo.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/JTableInfo.java
index 1117648ff..c08fd3c82 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/JTableInfo.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/JTableInfo.java
@@ -32,50 +32,50 @@
  * @coverage swing.model
  */
 public final class JTableInfo extends ContainerInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public JTableInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-    evaluateColumnModelInvocations();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public JTableInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+		evaluateColumnModelInvocations();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Support for getColumnModel() invocations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void evaluateColumnModelInvocations() {
-    addBroadcastListener(new EvaluationEventListener() {
-      @Override
-      public void evaluateAfter(EvaluationContext context, ASTNode node) throws Exception {
-        if (node instanceof ExpressionStatement) {
-          ExpressionStatement expressionStatement = (ExpressionStatement) node;
-          if (AstNodeUtils.isMethodInvocation(
-              expressionStatement.getExpression(),
-              "javax.swing.JTable",
-              "setModel(javax.swing.table.TableModel)")) {
-            evaluateColumnModelInvocations(context);
-          }
-        }
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Support for getColumnModel() invocations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void evaluateColumnModelInvocations() {
+		addBroadcastListener(new EvaluationEventListener() {
+			@Override
+			public void evaluateAfter(EvaluationContext context, ASTNode node) throws Exception {
+				if (node instanceof ExpressionStatement) {
+					ExpressionStatement expressionStatement = (ExpressionStatement) node;
+					if (AstNodeUtils.isMethodInvocation(
+							expressionStatement.getExpression(),
+							"javax.swing.JTable",
+							"setModel(javax.swing.table.TableModel)")) {
+						evaluateColumnModelInvocations(context);
+					}
+				}
+			}
+		});
+	}
 
-  private void evaluateColumnModelInvocations(EvaluationContext context) throws Exception {
-    for (MethodInvocation invocationPart : getMethodInvocations("getColumnModel()")) {
-      Statement statement = AstNodeUtils.getEnclosingStatement(invocationPart);
-      if (statement instanceof ExpressionStatement) {
-        ExpressionStatement expressionStatement = (ExpressionStatement) statement;
-        if (expressionStatement.getExpression() instanceof MethodInvocation) {
-          MethodInvocation invocation = (MethodInvocation) expressionStatement.getExpression();
-          AstEvaluationEngine.evaluate(context, invocation);
-        }
-      }
-    }
-  }
+	private void evaluateColumnModelInvocations(EvaluationContext context) throws Exception {
+		for (MethodInvocation invocationPart : getMethodInvocations("getColumnModel()")) {
+			Statement statement = AstNodeUtils.getEnclosingStatement(invocationPart);
+			if (statement instanceof ExpressionStatement) {
+				ExpressionStatement expressionStatement = (ExpressionStatement) statement;
+				if (expressionStatement.getExpression() instanceof MethodInvocation) {
+					MethodInvocation invocation = (MethodInvocation) expressionStatement.getExpression();
+					AstEvaluationEngine.evaluate(context, invocation);
+				}
+			}
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/JToolBarInfo.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/JToolBarInfo.java
index 11829edce..f854b77ad 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/JToolBarInfo.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/JToolBarInfo.java
@@ -36,97 +36,97 @@
  * @coverage swing.model
  */
 public final class JToolBarInfo extends ContainerInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public JToolBarInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public JToolBarInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if this {@link JToolBar} is horizontally oriented.
-   */
-  public boolean isHorizontal() {
-    JToolBar bar = (JToolBar) getObject();
-    return bar.getOrientation() == SwingConstants.HORIZONTAL;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if this {@link JToolBar} is horizontally oriented.
+	 */
+	public boolean isHorizontal() {
+		JToolBar bar = (JToolBar) getObject();
+		return bar.getOrientation() == SwingConstants.HORIZONTAL;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Creates new {@link ComponentInfo}.
-   */
-  public void command_CREATE(ComponentInfo component, ComponentInfo nextComponent) throws Exception {
-    JavaInfoUtils.add(component, getAssociation_(), this, nextComponent);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Creates new {@link ComponentInfo}.
+	 */
+	public void command_CREATE(ComponentInfo component, ComponentInfo nextComponent) throws Exception {
+		JavaInfoUtils.add(component, getAssociation_(), this, nextComponent);
+	}
 
-  /**
-   * Creates new {@link ComponentInfo} for {@link JButton} using {@link ActionInfo}.
-   *
-   * @return the created {@link ComponentInfo}.
-   */
-  public ComponentInfo command_CREATE(ActionInfo action, ComponentInfo nextComponent)
-      throws Exception {
-    // ensure that ActionInfo is already added
-    if (action.getParent() == null) {
-      ActionContainerInfo.add(getRootJava(), action);
-    }
-    // prepare CreationSupport
-    CreationSupport creationSupport;
-    {
-      String source = TemplateUtils.format("add({0})", action);
-      creationSupport = new ImplicitFactoryCreationSupport("add(javax.swing.Action)", source);
-    }
-    // create JButton
-    ComponentInfo newButton =
-        (ComponentInfo) JavaInfoUtils.createJavaInfo(getEditor(), JButton.class, creationSupport);
-    JavaInfoUtils.add(newButton, AssociationObjects.invocationVoid(), this, nextComponent);
-    getBroadcastObject().select(ImmutableList.of(newButton));
-    return newButton;
-  }
+	/**
+	 * Creates new {@link ComponentInfo} for {@link JButton} using {@link ActionInfo}.
+	 *
+	 * @return the created {@link ComponentInfo}.
+	 */
+	public ComponentInfo command_CREATE(ActionInfo action, ComponentInfo nextComponent)
+			throws Exception {
+		// ensure that ActionInfo is already added
+		if (action.getParent() == null) {
+			ActionContainerInfo.add(getRootJava(), action);
+		}
+		// prepare CreationSupport
+		CreationSupport creationSupport;
+		{
+			String source = TemplateUtils.format("add({0})", action);
+			creationSupport = new ImplicitFactoryCreationSupport("add(javax.swing.Action)", source);
+		}
+		// create JButton
+		ComponentInfo newButton =
+				(ComponentInfo) JavaInfoUtils.createJavaInfo(getEditor(), JButton.class, creationSupport);
+		JavaInfoUtils.add(newButton, AssociationObjects.invocationVoid(), this, nextComponent);
+		getBroadcastObject().select(ImmutableList.of(newButton));
+		return newButton;
+	}
 
-  /**
-   * Creates new {@link JToolBarSeparatorInfo}.
-   */
-  public void command_CREATE(JToolBarSeparatorInfo separator, ComponentInfo nextComponent)
-      throws Exception {
-    JavaInfoUtils.add(
-        separator,
-        new VoidInvocationVariableSupport(separator),
-        PureFlatStatementGenerator.INSTANCE,
-        AssociationObjects.invocationVoid(),
-        this,
-        nextComponent);
-  }
+	/**
+	 * Creates new {@link JToolBarSeparatorInfo}.
+	 */
+	public void command_CREATE(JToolBarSeparatorInfo separator, ComponentInfo nextComponent)
+			throws Exception {
+		JavaInfoUtils.add(
+				separator,
+				new VoidInvocationVariableSupport(separator),
+				PureFlatStatementGenerator.INSTANCE,
+				AssociationObjects.invocationVoid(),
+				this,
+				nextComponent);
+	}
 
-  /**
-   * Moves child {@link ComponentInfo}.
-   */
-  public void command_MOVE(ComponentInfo component, ComponentInfo nextComponent) throws Exception {
-    JavaInfoUtils.move(component, getAssociation_(), this, nextComponent);
-  }
+	/**
+	 * Moves child {@link ComponentInfo}.
+	 */
+	public void command_MOVE(ComponentInfo component, ComponentInfo nextComponent) throws Exception {
+		JavaInfoUtils.move(component, getAssociation_(), this, nextComponent);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link AssociationObject} for standard association with {@link JToolBar}.
-   */
-  private static AssociationObject getAssociation_() throws Exception {
-    return AssociationObjects.invocationChild("%parent%.add(%child%)", false);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link AssociationObject} for standard association with {@link JToolBar}.
+	 */
+	private static AssociationObject getAssociation_() throws Exception {
+		return AssociationObjects.invocationChild("%parent%.add(%child%)", false);
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/JToolBarSeparatorCreationSupport.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/JToolBarSeparatorCreationSupport.java
index b2b31c2e9..c0eaa6cfc 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/JToolBarSeparatorCreationSupport.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/JToolBarSeparatorCreationSupport.java
@@ -27,60 +27,60 @@
  * @coverage swing.model
  */
 public final class JToolBarSeparatorCreationSupport extends VoidInvocationCreationSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public JToolBarSeparatorCreationSupport(JavaInfo hostJavaInfo,
-      MethodDescription description,
-      MethodInvocation invocation,
-      JavaInfo[] argumentInfos) {
-    super(hostJavaInfo, description, invocation);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public JToolBarSeparatorCreationSupport(JavaInfo hostJavaInfo,
+			MethodDescription description,
+			MethodInvocation invocation,
+			JavaInfo[] argumentInfos) {
+		super(hostJavaInfo, description, invocation);
+	}
 
-  public JToolBarSeparatorCreationSupport(JavaInfo hostJavaInfo) {
-    super(hostJavaInfo, getMethodDescription(hostJavaInfo));
-  }
+	public JToolBarSeparatorCreationSupport(JavaInfo hostJavaInfo) {
+		super(hostJavaInfo, getMethodDescription(hostJavaInfo));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static MethodDescription getMethodDescription(JavaInfo hostJavaInfo) {
-    return hostJavaInfo.getDescription().getMethod("addSeparator()");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static MethodDescription getMethodDescription(JavaInfo hostJavaInfo) {
+		return hostJavaInfo.getDescription().getMethod("addSeparator()");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Object getObject(Object hostObject) throws Exception {
-    JToolBar bar = (JToolBar) hostObject;
-    int index = bar.getComponentCount() - 1;
-    return bar.getComponent(index);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Object getObject(Object hostObject) throws Exception {
+		JToolBar bar = (JToolBar) hostObject;
+		int index = bar.getComponentCount() - 1;
+		return bar.getComponent(index);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Validation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean canReorder() {
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Validation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean canReorder() {
+		return true;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Adding
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String add_getMethodSource() throws Exception {
-    return "addSeparator()";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Adding
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String add_getMethodSource() throws Exception {
+		return "addSeparator()";
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/JToolBarSeparatorInfo.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/JToolBarSeparatorInfo.java
index 300be9f1f..3c45db4f8 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/JToolBarSeparatorInfo.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/JToolBarSeparatorInfo.java
@@ -25,15 +25,15 @@
  * @coverage swing.model
  */
 public final class JToolBarSeparatorInfo extends ComponentInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public JToolBarSeparatorInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-    setVariableSupport(new VoidInvocationVariableSupport(this));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public JToolBarSeparatorInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+		setVariableSupport(new VoidInvocationVariableSupport(this));
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/SwingInvocationEvaluatorInterceptor.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/SwingInvocationEvaluatorInterceptor.java
index 409b11415..be9baac2d 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/SwingInvocationEvaluatorInterceptor.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/SwingInvocationEvaluatorInterceptor.java
@@ -43,163 +43,163 @@
  * @coverage swing.model
  */
 public final class SwingInvocationEvaluatorInterceptor extends InvocationEvaluatorInterceptor {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // InvocationEvaluatorInterceptor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Object evaluate(EvaluationContext context,
-      ClassInstanceCreation expression,
-      ITypeBinding typeBinding,
-      Class<?> clazz,
-      Constructor<?> actualConstructor,
-      Object[] arguments) throws Exception {
-    if (isSwingComponent(clazz)) {
-      return evaluateSwing(context, expression, clazz, actualConstructor, arguments);
-    }
-    return AstEvaluationEngine.UNKNOWN;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// InvocationEvaluatorInterceptor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Object evaluate(EvaluationContext context,
+			ClassInstanceCreation expression,
+			ITypeBinding typeBinding,
+			Class<?> clazz,
+			Constructor<?> actualConstructor,
+			Object[] arguments) throws Exception {
+		if (isSwingComponent(clazz)) {
+			return evaluateSwing(context, expression, clazz, actualConstructor, arguments);
+		}
+		return AstEvaluationEngine.UNKNOWN;
+	}
 
-  private Object evaluateSwing(EvaluationContext context,
-      ClassInstanceCreation expression,
-      Class<?> clazz,
-      Constructor<?> actualConstructor,
-      Object[] arguments) {
-    PlaceholderUtils.clear(expression);
-    processJList(clazz, actualConstructor, arguments);
-    // try actual constructor
-    try {
-      return actualConstructor.newInstance(arguments);
-    } catch (Throwable e) {
-      context.addException(expression, e);
-      PlaceholderUtils.addException(expression, e);
-    }
-    // some exception happened, try default constructor (if actual was not default)
-    boolean isActualDefault = actualConstructor.getParameterTypes().length == 0;
-    if (!isActualDefault) {
-      try {
-        Constructor<?> defaultConstructor =
-            ReflectionUtils.getConstructorBySignature(clazz, "<init>()");
-        if (defaultConstructor != null) {
-          return defaultConstructor.newInstance();
-        }
-      } catch (Throwable e) {
-        context.addException(expression, e);
-        PlaceholderUtils.addException(expression, e);
-      }
-    }
-    // still no success, use placeholder
-    PlaceholderUtils.markPlaceholder(expression);
-    return createPlaceholder(clazz);
-  }
+	private Object evaluateSwing(EvaluationContext context,
+			ClassInstanceCreation expression,
+			Class<?> clazz,
+			Constructor<?> actualConstructor,
+			Object[] arguments) {
+		PlaceholderUtils.clear(expression);
+		processJList(clazz, actualConstructor, arguments);
+		// try actual constructor
+		try {
+			return actualConstructor.newInstance(arguments);
+		} catch (Throwable e) {
+			context.addException(expression, e);
+			PlaceholderUtils.addException(expression, e);
+		}
+		// some exception happened, try default constructor (if actual was not default)
+		boolean isActualDefault = actualConstructor.getParameterTypes().length == 0;
+		if (!isActualDefault) {
+			try {
+				Constructor<?> defaultConstructor =
+						ReflectionUtils.getConstructorBySignature(clazz, "<init>()");
+				if (defaultConstructor != null) {
+					return defaultConstructor.newInstance();
+				}
+			} catch (Throwable e) {
+				context.addException(expression, e);
+				PlaceholderUtils.addException(expression, e);
+			}
+		}
+		// still no success, use placeholder
+		PlaceholderUtils.markPlaceholder(expression);
+		return createPlaceholder(clazz);
+	}
 
-  @Override
-  public Object evaluateAnonymous(EvaluationContext context,
-      ClassInstanceCreation expression,
-      ITypeBinding typeBinding,
-      ITypeBinding typeBindingConcrete,
-      IMethodBinding methodBinding,
-      Object[] arguments) throws Exception {
-    if (AstNodeUtils.isSuccessorOf(typeBindingConcrete, "java.awt.Component")) {
-      String componentClassName = AstNodeUtils.getFullyQualifiedName(typeBindingConcrete, true);
-      Class<?> componentClass = context.getClassLoader().loadClass(componentClassName);
-      Constructor<?> constructor = ReflectionUtils.getConstructor(componentClass);
-      if (constructor != null) {
-        return constructor.newInstance();
-      }
-    }
-    return AstEvaluationEngine.UNKNOWN;
-  }
+	@Override
+	public Object evaluateAnonymous(EvaluationContext context,
+			ClassInstanceCreation expression,
+			ITypeBinding typeBinding,
+			ITypeBinding typeBindingConcrete,
+			IMethodBinding methodBinding,
+			Object[] arguments) throws Exception {
+		if (AstNodeUtils.isSuccessorOf(typeBindingConcrete, "java.awt.Component")) {
+			String componentClassName = AstNodeUtils.getFullyQualifiedName(typeBindingConcrete, true);
+			Class<?> componentClass = context.getClassLoader().loadClass(componentClassName);
+			Constructor<?> constructor = ReflectionUtils.getConstructor(componentClass);
+			if (constructor != null) {
+				return constructor.newInstance();
+			}
+		}
+		return AstEvaluationEngine.UNKNOWN;
+	}
 
-  @Override
-  public Object evaluate(EvaluationContext context,
-      MethodInvocation invocation,
-      IMethodBinding methodBinding,
-      Class<?> clazz,
-      Method method,
-      Object[] argumentValues) {
-    // JComboBox
-    if (ReflectionUtils.isSuccessorOf(clazz, "javax.swing.JComboBox")) {
-      String signature = ReflectionUtils.getMethodSignature(method);
-      // ignore JComboBox.setModel(null)
-      if (signature.equals("setModel(javax.swing.ComboBoxModel)") && argumentValues[0] == null) {
-        return null;
-      }
-      // ignore JComboBox.setRenderer(null)
-      if (signature.equals("setRenderer(javax.swing.ListCellRenderer)")
-          && argumentValues[0] == null) {
-        return null;
-      }
-    }
-    // JList
-    if (ReflectionUtils.isSuccessorOf(clazz, "javax.swing.JList")) {
-      String signature = ReflectionUtils.getMethodSignature(method);
-      // ignore JList.setListData((Object[]) null)
-      if (signature.equals("setListData(java.lang.Object[])") && argumentValues[0] == null) {
-        return null;
-      }
-      // ignore JList.setListData((Vector) null)
-      if (signature.equals("setListData(java.util.Vector)") && argumentValues[0] == null) {
-        return null;
-      }
-    }
-    // use default handling
-    return AstEvaluationEngine.UNKNOWN;
-  }
+	@Override
+	public Object evaluate(EvaluationContext context,
+			MethodInvocation invocation,
+			IMethodBinding methodBinding,
+			Class<?> clazz,
+			Method method,
+			Object[] argumentValues) {
+		// JComboBox
+		if (ReflectionUtils.isSuccessorOf(clazz, "javax.swing.JComboBox")) {
+			String signature = ReflectionUtils.getMethodSignature(method);
+			// ignore JComboBox.setModel(null)
+			if (signature.equals("setModel(javax.swing.ComboBoxModel)") && argumentValues[0] == null) {
+				return null;
+			}
+			// ignore JComboBox.setRenderer(null)
+			if (signature.equals("setRenderer(javax.swing.ListCellRenderer)")
+					&& argumentValues[0] == null) {
+				return null;
+			}
+		}
+		// JList
+		if (ReflectionUtils.isSuccessorOf(clazz, "javax.swing.JList")) {
+			String signature = ReflectionUtils.getMethodSignature(method);
+			// ignore JList.setListData((Object[]) null)
+			if (signature.equals("setListData(java.lang.Object[])") && argumentValues[0] == null) {
+				return null;
+			}
+			// ignore JList.setListData((Vector) null)
+			if (signature.equals("setListData(java.util.Vector)") && argumentValues[0] == null) {
+				return null;
+			}
+		}
+		// use default handling
+		return AstEvaluationEngine.UNKNOWN;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Implementation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static boolean isSwingComponent(Class<?> clazz) {
-    return ReflectionUtils.isSuccessorOf(clazz, "java.awt.Component");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Implementation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static boolean isSwingComponent(Class<?> clazz) {
+		return ReflectionUtils.isSuccessorOf(clazz, "java.awt.Component");
+	}
 
-  /**
-   * {@link javax.swing.JList} constructors accept <code>null</code> as model values, but later
-   * throw exception. So, we should fix these values and use empty collections.
-   */
-  private static void processJList(Class<?> clazz,
-      Constructor<?> actualConstructor,
-      Object[] arguments) {
-    String signature = ReflectionUtils.getConstructorSignature(actualConstructor);
-    if (clazz == JList.class || clazz == JComboBox.class) {
-      if ("<init>(java.lang.Object[])".equals(signature) && arguments[0] == null) {
-        arguments[0] = new Object[0];
-      }
-      if ("<init>(java.util.Vector)".equals(signature) && arguments[0] == null) {
-        arguments[0] = new java.util.Vector<Object>();
-      }
-    }
-    if (clazz == JComboBox.class) {
-      if ("<init>(javax.swing.ComboBoxModel)".equals(signature) && arguments[0] == null) {
-        arguments[0] = new javax.swing.DefaultComboBoxModel();
-      }
-    }
-  }
+	/**
+	 * {@link javax.swing.JList} constructors accept <code>null</code> as model values, but later
+	 * throw exception. So, we should fix these values and use empty collections.
+	 */
+	private static void processJList(Class<?> clazz,
+			Constructor<?> actualConstructor,
+			Object[] arguments) {
+		String signature = ReflectionUtils.getConstructorSignature(actualConstructor);
+		if (clazz == JList.class || clazz == JComboBox.class) {
+			if ("<init>(java.lang.Object[])".equals(signature) && arguments[0] == null) {
+				arguments[0] = new Object[0];
+			}
+			if ("<init>(java.util.Vector)".equals(signature) && arguments[0] == null) {
+				arguments[0] = new java.util.Vector<Object>();
+			}
+		}
+		if (clazz == JComboBox.class) {
+			if ("<init>(javax.swing.ComboBoxModel)".equals(signature) && arguments[0] == null) {
+				arguments[0] = new javax.swing.DefaultComboBoxModel();
+			}
+		}
+	}
 
-  /**
-   * @return the {@link Component} to use as placeholder instead of real component that can not be
-   *         created because of some exception.
-   */
-  private static Component createPlaceholder(Class<?> clazz) {
-    String message =
-        MessageFormat.format(
-            ModelMessages.SwingInvocationEvaluatorInterceptor_placeholderMessage,
-            clazz.getName());
-    JPanel panel = new JPanel();
-    panel.setLayout(new BorderLayout(5, 5));
-    panel.setBackground(new Color(0xFF, 0xCC, 0xCC));
-    {
-      JTextArea textArea = new JTextArea(message);
-      textArea.setLineWrap(true);
-      textArea.setWrapStyleWord(true);
-      textArea.setOpaque(false);
-      textArea.setFont(new JLabel().getFont());
-      panel.add(textArea);
-    }
-    return panel;
-  }
+	/**
+	 * @return the {@link Component} to use as placeholder instead of real component that can not be
+	 *         created because of some exception.
+	 */
+	private static Component createPlaceholder(Class<?> clazz) {
+		String message =
+				MessageFormat.format(
+						ModelMessages.SwingInvocationEvaluatorInterceptor_placeholderMessage,
+						clazz.getName());
+		JPanel panel = new JPanel();
+		panel.setLayout(new BorderLayout(5, 5));
+		panel.setBackground(new Color(0xFF, 0xCC, 0xCC));
+		{
+			JTextArea textArea = new JTextArea(message);
+			textArea.setLineWrap(true);
+			textArea.setWrapStyleWord(true);
+			textArea.setOpaque(false);
+			textArea.setFont(new JLabel().getFont());
+			panel.add(textArea);
+		}
+		return panel;
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/SwtAwtFrameInfo.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/SwtAwtFrameInfo.java
index de5b41794..2e3034a94 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/SwtAwtFrameInfo.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/SwtAwtFrameInfo.java
@@ -23,42 +23,42 @@
  * @coverage swing.model
  */
 public class SwtAwtFrameInfo extends ContainerInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SwtAwtFrameInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SwtAwtFrameInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Hierarchy
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected boolean isSwingRoot() {
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Hierarchy
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected boolean isSwingRoot() {
+		return true;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void refresh_fetch() throws Exception {
-    SwingUtils.runLaterAndWait(new RunnableEx() {
-      public void run() throws Exception {
-        runRefreshFetch();
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void refresh_fetch() throws Exception {
+		SwingUtils.runLaterAndWait(new RunnableEx() {
+			public void run() throws Exception {
+				runRefreshFetch();
+			}
+		});
+	}
 
-  private void runRefreshFetch() throws Exception {
-    super.refresh_fetch();
-  }
+	private void runRefreshFetch() throws Exception {
+		super.refresh_fetch();
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/exposed/SwingHierarchyProvider.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/exposed/SwingHierarchyProvider.java
index 8bf41afde..26091932b 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/exposed/SwingHierarchyProvider.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/exposed/SwingHierarchyProvider.java
@@ -28,58 +28,58 @@
  * @coverage swing.model
  */
 public final class SwingHierarchyProvider extends HierarchyProvider {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // HierarchyProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Object getParentObject(Object object) throws Exception {
-    if (object instanceof JMenuItem) {
-      return getJMenu((JMenuItem) object);
-    }
-    if (object instanceof Component) {
-      Component component = (Component) object;
-      return component.getParent();
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// HierarchyProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Object getParentObject(Object object) throws Exception {
+		if (object instanceof JMenuItem) {
+			return getJMenu((JMenuItem) object);
+		}
+		if (object instanceof Component) {
+			Component component = (Component) object;
+			return component.getParent();
+		}
+		return null;
+	}
 
-  @Override
-  public Object[] getChildrenObjects(Object object) throws Exception {
-    // javax.swing.JMenu
-    if (object instanceof JMenu) {
-      JMenu menu = (JMenu) object;
-      int componentCount = menu.getMenuComponentCount();
-      Component[] menuComponents = new Component[componentCount];
-      for (int i = 0; i < componentCount; i++) {
-        menuComponents[i] = menu.getMenuComponent(i);
-      }
-      return menuComponents;
-    }
-    // generic java.awt.Container
-    if (object instanceof Container) {
-      Container container = (Container) object;
-      return container.getComponents();
-    }
-    // unknown
-    return ArrayUtils.EMPTY_OBJECT_ARRAY;
-  }
+	@Override
+	public Object[] getChildrenObjects(Object object) throws Exception {
+		// javax.swing.JMenu
+		if (object instanceof JMenu) {
+			JMenu menu = (JMenu) object;
+			int componentCount = menu.getMenuComponentCount();
+			Component[] menuComponents = new Component[componentCount];
+			for (int i = 0; i < componentCount; i++) {
+				menuComponents[i] = menu.getMenuComponent(i);
+			}
+			return menuComponents;
+		}
+		// generic java.awt.Container
+		if (object instanceof Container) {
+			Container container = (Container) object;
+			return container.getComponents();
+		}
+		// unknown
+		return ArrayUtils.EMPTY_OBJECT_ARRAY;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * There are no good way to find {@link JMenu} parent of {@link JMenuItem}, see
-   * http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4103931
-   */
-  private static Component getJMenu(JMenuItem item) {
-    if (item.getParent() instanceof JPopupMenu) {
-      JPopupMenu popup = (JPopupMenu) item.getParent();
-      return popup.getInvoker();
-    }
-    return item.getParent();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * There are no good way to find {@link JMenu} parent of {@link JMenuItem}, see
+	 * http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4103931
+	 */
+	private static Component getJMenu(JMenuItem item) {
+		if (item.getParent() instanceof JPopupMenu) {
+			JPopupMenu popup = (JPopupMenu) item.getParent();
+			return popup.getInvoker();
+		}
+		return item.getParent();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/live/SwingLiveCacheEntry.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/live/SwingLiveCacheEntry.java
index b1f082f12..b2022e9ac 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/live/SwingLiveCacheEntry.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/live/SwingLiveCacheEntry.java
@@ -23,70 +23,70 @@
  * @coverage swing.model
  */
 public final class SwingLiveCacheEntry implements ILiveCacheEntry {
-  private Component m_component;
-  private Image m_image;
-  private int m_baseline;
+	private Component m_component;
+	private Image m_image;
+	private int m_baseline;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IDisposable
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void dispose() {
-    if (m_image != null && !m_image.isDisposed()) {
-      m_image.dispose();
-      m_image = null;
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IDisposable
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void dispose() {
+		if (m_image != null && !m_image.isDisposed()) {
+			m_image.dispose();
+			m_image = null;
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Component
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Store component to be cached.
-   */
-  public void setComponent(Component component) {
-    m_component = component;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Component
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Store component to be cached.
+	 */
+	public void setComponent(Component component) {
+		m_component = component;
+	}
 
-  /**
-   * @return the cached component.
-   */
-  public Component getComponent() {
-    return m_component;
-  }
+	/**
+	 * @return the cached component.
+	 */
+	public Component getComponent() {
+		return m_component;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Image
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Store image into cache.
-   */
-  public void setImage(Image image) {
-    m_image = image;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Image
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Store image into cache.
+	 */
+	public void setImage(Image image) {
+		m_image = image;
+	}
 
-  /**
-   * @return the cached image.
-   */
-  public Image getImage() {
-    return m_image;
-  }
+	/**
+	 * @return the cached image.
+	 */
+	public Image getImage() {
+		return m_image;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Baseline
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void setBaseline(int baseline) {
-    m_baseline = baseline;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Baseline
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void setBaseline(int baseline) {
+		m_baseline = baseline;
+	}
 
-  public int getBaseline() {
-    return m_baseline;
-  }
+	public int getBaseline() {
+		return m_baseline;
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/live/SwingLiveManager.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/live/SwingLiveManager.java
index a50ad136d..773bbefe8 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/live/SwingLiveManager.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/live/SwingLiveManager.java
@@ -32,106 +32,106 @@
  * @coverage swing.model
  */
 public class SwingLiveManager extends AbstractLiveManager {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SwingLiveManager(AbstractComponentInfo component) {
-    super(component);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SwingLiveManager(AbstractComponentInfo component) {
+		super(component);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AbstractLiveComponentsManager
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected AbstractComponentInfo createLiveComponent() throws Exception {
-    // prepare empty JPanel
-    ContainerInfo panel;
-    {
-      String[] sourceLines =
-          new String[]{"  javax.swing.JPanel __wbp_panel = new javax.swing.JPanel();"};
-      panel = (ContainerInfo) parse(sourceLines);
-    }
-    // prepare component
-    ComponentInfo component = createClone();
-    // add component
-    {
-      FlowLayoutInfo flowLayoutInfo = (FlowLayoutInfo) panel.getLayout();
-      flowLayoutInfo.add(component, null);
-    }
-    // apply forced size
-    {
-      String forcedWidthString =
-          JavaInfoUtils.getParameter(m_component, "liveComponent.forcedSize.width");
-      String forcedHeightString =
-          JavaInfoUtils.getParameter(m_component, "liveComponent.forcedSize.height");
-      if (forcedWidthString != null && forcedHeightString != null) {
-        component.addMethodInvocation("setSize(int,int)", forcedWidthString
-            + ", "
-            + forcedHeightString);
-      }
-    }
-    return component;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AbstractLiveComponentsManager
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected AbstractComponentInfo createLiveComponent() throws Exception {
+		// prepare empty JPanel
+		ContainerInfo panel;
+		{
+			String[] sourceLines =
+					new String[]{"  javax.swing.JPanel __wbp_panel = new javax.swing.JPanel();"};
+			panel = (ContainerInfo) parse(sourceLines);
+		}
+		// prepare component
+		ComponentInfo component = createClone();
+		// add component
+		{
+			FlowLayoutInfo flowLayoutInfo = (FlowLayoutInfo) panel.getLayout();
+			flowLayoutInfo.add(component, null);
+		}
+		// apply forced size
+		{
+			String forcedWidthString =
+					JavaInfoUtils.getParameter(m_component, "liveComponent.forcedSize.width");
+			String forcedHeightString =
+					JavaInfoUtils.getParameter(m_component, "liveComponent.forcedSize.height");
+			if (forcedWidthString != null && forcedHeightString != null) {
+				component.addMethodInvocation("setSize(int,int)", forcedWidthString
+						+ ", "
+						+ forcedHeightString);
+			}
+		}
+		return component;
+	}
 
-  @Override
-  protected String getKey() {
-    return super.getKey() + "|" + UIManager.getLookAndFeel().getID();
-  }
+	@Override
+	protected String getKey() {
+		return super.getKey() + "|" + UIManager.getLookAndFeel().getID();
+	}
 
-  @Override
-  protected ILiveCacheEntry createComponentCacheEntry(AbstractComponentInfo liveComponentInfo) {
-    SwingLiveCacheEntry cacheEntry = new SwingLiveCacheEntry();
-    // get component and detach it from parent
-    final ComponentInfo componentInfo = (ComponentInfo) liveComponentInfo;
-    Component component = componentInfo.getComponent();
-    component.getParent().remove(component);
-    cacheEntry.setComponent(component);
-    // image
-    cacheEntry.setImage(componentInfo.getImage());
-    componentInfo.setImage(null);
-    // baseline
-    cacheEntry.setBaseline(componentInfo.getBaseline());
-    // done
-    return cacheEntry;
-  }
+	@Override
+	protected ILiveCacheEntry createComponentCacheEntry(AbstractComponentInfo liveComponentInfo) {
+		SwingLiveCacheEntry cacheEntry = new SwingLiveCacheEntry();
+		// get component and detach it from parent
+		final ComponentInfo componentInfo = (ComponentInfo) liveComponentInfo;
+		Component component = componentInfo.getComponent();
+		component.getParent().remove(component);
+		cacheEntry.setComponent(component);
+		// image
+		cacheEntry.setImage(componentInfo.getImage());
+		componentInfo.setImage(null);
+		// baseline
+		cacheEntry.setBaseline(componentInfo.getBaseline());
+		// done
+		return cacheEntry;
+	}
 
-  @Override
-  protected ILiveCacheEntry createComponentCacheEntryEx(Throwable e) {
-    SwingLiveCacheEntry cacheEntry = new SwingLiveCacheEntry();
-    // no component
-    cacheEntry.setComponent(null);
-    // set image
-    {
-      Image image = createImageForException(e);
-      cacheEntry.setImage(image);
-    }
-    // done
-    return cacheEntry;
-  }
+	@Override
+	protected ILiveCacheEntry createComponentCacheEntryEx(Throwable e) {
+		SwingLiveCacheEntry cacheEntry = new SwingLiveCacheEntry();
+		// no component
+		cacheEntry.setComponent(null);
+		// set image
+		{
+			Image image = createImageForException(e);
+			cacheEntry.setImage(image);
+		}
+		// done
+		return cacheEntry;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public Component getComponent() {
-    return ((SwingLiveCacheEntry) getCachedEntry()).getComponent();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public Component getComponent() {
+		return ((SwingLiveCacheEntry) getCachedEntry()).getComponent();
+	}
 
-  public Image getImage() {
-    // get image from memento during paste
-    final Image image = ComponentInfoMemento.getImage(m_component);
-    if (image != null) {
-      return image;
-    }
-    return ((SwingLiveCacheEntry) getCachedEntry()).getImage();
-  }
+	public Image getImage() {
+		// get image from memento during paste
+		final Image image = ComponentInfoMemento.getImage(m_component);
+		if (image != null) {
+			return image;
+		}
+		return ((SwingLiveCacheEntry) getCachedEntry()).getImage();
+	}
 
-  public int getBaseline() {
-    return ((SwingLiveCacheEntry) getCachedEntry()).getBaseline();
-  }
+	public int getBaseline() {
+		return ((SwingLiveCacheEntry) getCachedEntry()).getBaseline();
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/menu/ComponentMenuItemInfo.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/menu/ComponentMenuItemInfo.java
index 83cb55a29..cce7f362f 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/menu/ComponentMenuItemInfo.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/menu/ComponentMenuItemInfo.java
@@ -26,55 +26,55 @@
  * @coverage swing.model.menu
  */
 public class ComponentMenuItemInfo extends AbstractMenuObject implements IMenuItemInfo {
-  private final ComponentInfo m_component;
+	private final ComponentInfo m_component;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ComponentMenuItemInfo(ComponentInfo component) {
-    super(component);
-    m_component = component;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ComponentMenuItemInfo(ComponentInfo component) {
+		super(component);
+		m_component = component;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Model
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public Object getModel() {
-    return m_component;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Model
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public Object getModel() {
+		return m_component;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public Image getImage() {
-    return m_component.getImage();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public Image getImage() {
+		return m_component.getImage();
+	}
 
-  public Rectangle getBounds() {
-    return m_component.getBounds();
-  }
+	public Rectangle getBounds() {
+		return m_component.getBounds();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IMenuItemInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public IMenuInfo getMenu() {
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IMenuItemInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public IMenuInfo getMenu() {
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Policy
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public IMenuPolicy getPolicy() {
-    return IMenuPolicy.NOOP;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Policy
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public IMenuPolicy getPolicy() {
+		return IMenuPolicy.NOOP;
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/menu/JMenuBarInfo.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/menu/JMenuBarInfo.java
index b9b85c609..a528f7a1b 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/menu/JMenuBarInfo.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/menu/JMenuBarInfo.java
@@ -48,172 +48,172 @@
  * @coverage swing.model.menu
  */
 public final class JMenuBarInfo extends ContainerInfo implements IAdaptable {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public JMenuBarInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link JMenuInfo} children.
-   */
-  public List<JMenuInfo> getChildrenMenus() {
-    return getChildren(JMenuInfo.class);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private MenuVisualData m_visualData;
-
-  /**
-   * @return <code>true</code> if {@link JMenuBar} has visible {@link JMenu} elements. Note, that
-   *         just checking {@link JMenuBar#getComponentCount()} if not enough, because some
-   *         {@link LookAndFeel}'s (for example Substance) add special components.
-   */
-  private static boolean hasJMenuChildren(JMenuBar menuBar) {
-    Component[] components = menuBar.getComponents();
-    for (Component component : components) {
-      if (component instanceof JMenu) {
-        return true;
-      }
-    }
-    return false;
-  }
-
-  @Override
-  protected void refresh_afterCreate() throws Exception {
-    // add text, if no "real" items
-    {
-      JMenuBar menuBar = (JMenuBar) getObject();
-      if (!hasJMenuChildren(menuBar)) {
-        menuBar.add(new JMenu(IMenuInfo.NO_ITEMS_TEXT));
-      }
-    }
-    // continue
-    super.refresh_afterCreate();
-  }
-
-  @Override
-  protected void refresh_fetch() throws Exception {
-    AbstractComponentInfo parentInfo = (AbstractComponentInfo) getParent();
-    Container parentContainer =
-        parentInfo != null ? (Container) parentInfo.getComponentObject() : null;
-    m_visualData = SwingImageUtils.fetchMenuVisualData(getContainer(), parentContainer);
-    super.refresh_fetch();
-    MenuUtils.setItemsBounds(m_visualData, getChildrenComponents());
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds this {@link JMenuBarInfo} to given {@link ContainerInfo}, such as {@link JFrame},
-   * {@link JDialog} and {@link JApplet}.
-   */
-  public void command_CREATE(ContainerInfo container) throws Exception {
-    AssociationObject association =
-        AssociationObjects.invocationChild("%parent%.setJMenuBar(%child%)", true);
-    JavaInfoUtils.addFirst(this, association, container);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IAdaptable
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final IMenuInfo m_menuImpl = new MenuImpl();
-  private final IMenuPolicy m_menuPolicyImpl = new JMenuPolicyImpl(this);
-
-  public <T> T getAdapter(Class<T> adapter) {
-    if (adapter.isAssignableFrom(IMenuInfo.class)) {
-      return adapter.cast(m_menuImpl);
-    }
-    return null;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AbstractMenuImpl
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Abstract superclass for {@link IMenuObjectInfo} implementations.
-   *
-   * @author scheglov_ke
-   */
-  private abstract class MenuAbstractImpl extends JavaMenuMenuObject {
-    public MenuAbstractImpl() {
-      super(JMenuBarInfo.this);
-    }
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IMenuInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Implementation of {@link IMenuInfo}.
-   *
-   * @author scheglov_ke
-   */
-  private final class MenuImpl extends MenuAbstractImpl implements IMenuInfo {
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Model
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public Object getModel() {
-      return JMenuBarInfo.this;
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Presentation
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public Image getImage() {
-      return m_visualData.m_menuImage;
-    }
-
-    public Rectangle getBounds() {
-      return m_visualData.m_menuBounds;
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Access
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public boolean isHorizontal() {
-      return true;
-    }
-
-    public List<IMenuItemInfo> getItems() {
-      return MenuUtils.getItems(JMenuBarInfo.this);
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Policy
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public IMenuPolicy getPolicy() {
-      return m_menuPolicyImpl;
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public JMenuBarInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link JMenuInfo} children.
+	 */
+	public List<JMenuInfo> getChildrenMenus() {
+		return getChildren(JMenuInfo.class);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private MenuVisualData m_visualData;
+
+	/**
+	 * @return <code>true</code> if {@link JMenuBar} has visible {@link JMenu} elements. Note, that
+	 *         just checking {@link JMenuBar#getComponentCount()} if not enough, because some
+	 *         {@link LookAndFeel}'s (for example Substance) add special components.
+	 */
+	private static boolean hasJMenuChildren(JMenuBar menuBar) {
+		Component[] components = menuBar.getComponents();
+		for (Component component : components) {
+			if (component instanceof JMenu) {
+				return true;
+			}
+		}
+		return false;
+	}
+
+	@Override
+	protected void refresh_afterCreate() throws Exception {
+		// add text, if no "real" items
+		{
+			JMenuBar menuBar = (JMenuBar) getObject();
+			if (!hasJMenuChildren(menuBar)) {
+				menuBar.add(new JMenu(IMenuInfo.NO_ITEMS_TEXT));
+			}
+		}
+		// continue
+		super.refresh_afterCreate();
+	}
+
+	@Override
+	protected void refresh_fetch() throws Exception {
+		AbstractComponentInfo parentInfo = (AbstractComponentInfo) getParent();
+		Container parentContainer =
+				parentInfo != null ? (Container) parentInfo.getComponentObject() : null;
+		m_visualData = SwingImageUtils.fetchMenuVisualData(getContainer(), parentContainer);
+		super.refresh_fetch();
+		MenuUtils.setItemsBounds(m_visualData, getChildrenComponents());
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds this {@link JMenuBarInfo} to given {@link ContainerInfo}, such as {@link JFrame},
+	 * {@link JDialog} and {@link JApplet}.
+	 */
+	public void command_CREATE(ContainerInfo container) throws Exception {
+		AssociationObject association =
+				AssociationObjects.invocationChild("%parent%.setJMenuBar(%child%)", true);
+		JavaInfoUtils.addFirst(this, association, container);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IAdaptable
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final IMenuInfo m_menuImpl = new MenuImpl();
+	private final IMenuPolicy m_menuPolicyImpl = new JMenuPolicyImpl(this);
+
+	public <T> T getAdapter(Class<T> adapter) {
+		if (adapter.isAssignableFrom(IMenuInfo.class)) {
+			return adapter.cast(m_menuImpl);
+		}
+		return null;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AbstractMenuImpl
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Abstract superclass for {@link IMenuObjectInfo} implementations.
+	 *
+	 * @author scheglov_ke
+	 */
+	private abstract class MenuAbstractImpl extends JavaMenuMenuObject {
+		public MenuAbstractImpl() {
+			super(JMenuBarInfo.this);
+		}
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IMenuInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Implementation of {@link IMenuInfo}.
+	 *
+	 * @author scheglov_ke
+	 */
+	private final class MenuImpl extends MenuAbstractImpl implements IMenuInfo {
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Model
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public Object getModel() {
+			return JMenuBarInfo.this;
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Presentation
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public Image getImage() {
+			return m_visualData.m_menuImage;
+		}
+
+		public Rectangle getBounds() {
+			return m_visualData.m_menuBounds;
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Access
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public boolean isHorizontal() {
+			return true;
+		}
+
+		public List<IMenuItemInfo> getItems() {
+			return MenuUtils.getItems(JMenuBarInfo.this);
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Policy
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public IMenuPolicy getPolicy() {
+			return m_menuPolicyImpl;
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/menu/JMenuInfo.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/menu/JMenuInfo.java
index cf1c80b61..1b790fc36 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/menu/JMenuInfo.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/menu/JMenuInfo.java
@@ -39,226 +39,226 @@
  * @coverage swing.model.menu
  */
 public final class JMenuInfo extends JMenuItemInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public JMenuInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public JMenuInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Events
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void initialize() throws Exception {
-    super.initialize();
-    MenuUtils.copyPasteItems(this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Events
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void initialize() throws Exception {
+		super.initialize();
+		MenuUtils.copyPasteItems(this);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link JMenuItemInfo} children. Practically can be used only in tests because
-   *         {@link JMenu} may have not only {@link JMenuItem} children, but also {@link JSeparator}
-   *         or just any {@link Component}.
-   */
-  public List<JMenuItemInfo> getChildrenItems() {
-    return getChildren(JMenuItemInfo.class);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link JMenuItemInfo} children. Practically can be used only in tests because
+	 *         {@link JMenu} may have not only {@link JMenuItem} children, but also {@link JSeparator}
+	 *         or just any {@link Component}.
+	 */
+	public List<JMenuItemInfo> getChildrenItems() {
+		return getChildren(JMenuItemInfo.class);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private MenuVisualData m_visualData;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private MenuVisualData m_visualData;
 
-  @Override
-  protected void refresh_afterCreate() throws Exception {
-    // add text, if no "real" items
-    {
-      JMenu menu = (JMenu) getObject();
-      if (menu.getItemCount() == 0) {
-        menu.add(new JMenuItem(IMenuInfo.NO_ITEMS_TEXT));
-      }
-    }
-    // continue
-    super.refresh_afterCreate();
-  }
+	@Override
+	protected void refresh_afterCreate() throws Exception {
+		// add text, if no "real" items
+		{
+			JMenu menu = (JMenu) getObject();
+			if (menu.getItemCount() == 0) {
+				menu.add(new JMenuItem(IMenuInfo.NO_ITEMS_TEXT));
+			}
+		}
+		// continue
+		super.refresh_afterCreate();
+	}
 
-  @Override
-  protected void refresh_fetch() throws Exception {
-    m_visualData = SwingImageUtils.fetchMenuVisualData(getContainer(), null);
-    super.refresh_fetch();
-    MenuUtils.setItemsBounds(m_visualData, getChildrenComponents());
-  }
+	@Override
+	protected void refresh_fetch() throws Exception {
+		m_visualData = SwingImageUtils.fetchMenuVisualData(getContainer(), null);
+		super.refresh_fetch();
+		MenuUtils.setItemsBounds(m_visualData, getChildrenComponents());
+	}
 
-  @Override
-  public void refresh_dispose() throws Exception {
-    super.refresh_dispose();
-    if (m_visualData != null) {
-      m_visualData.m_menuImage.dispose();
-      m_visualData = null;
-    }
-  }
+	@Override
+	public void refresh_dispose() throws Exception {
+		super.refresh_dispose();
+		if (m_visualData != null) {
+			m_visualData.m_menuImage.dispose();
+			m_visualData = null;
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IAdaptable
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final IMenuItemInfo m_itemImpl = new MenuItemImpl();
-  private final IMenuInfo m_menuImpl = new MenuImpl();
-  private final IMenuPolicy m_menuPolicyImpl = new JMenuPolicyImpl(this);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IAdaptable
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final IMenuItemInfo m_itemImpl = new MenuItemImpl();
+	private final IMenuInfo m_menuImpl = new MenuImpl();
+	private final IMenuPolicy m_menuPolicyImpl = new JMenuPolicyImpl(this);
 
-  @Override
-  public <T> T getAdapter(Class<T> adapter) {
-    if (adapter.isAssignableFrom(IMenuItemInfo.class)) {
-      return adapter.cast(m_itemImpl);
-    }
-    if (adapter.isAssignableFrom(IMenuInfo.class)) {
-      return adapter.cast(m_menuImpl);
-    }
-    return null;
-  }
+	@Override
+	public <T> T getAdapter(Class<T> adapter) {
+		if (adapter.isAssignableFrom(IMenuItemInfo.class)) {
+			return adapter.cast(m_itemImpl);
+		}
+		if (adapter.isAssignableFrom(IMenuInfo.class)) {
+			return adapter.cast(m_menuImpl);
+		}
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AbstractMenuImpl
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Abstract superclass for {@link IMenuObjectInfo} implementations.
-   *
-   * @author scheglov_ke
-   */
-  private abstract class MenuAbstractImpl extends JavaMenuMenuObject {
-    public MenuAbstractImpl() {
-      super(JMenuInfo.this);
-    }
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IMenuItemInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Implementation of {@link IMenuItemInfo}.
-   *
-   * @author scheglov_ke
-   */
-  private final class MenuItemImpl extends AbstractMenuObject implements IMenuItemInfo {
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public MenuItemImpl() {
-      super(JMenuInfo.this);
-    }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AbstractMenuImpl
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Abstract superclass for {@link IMenuObjectInfo} implementations.
+	 *
+	 * @author scheglov_ke
+	 */
+	private abstract class MenuAbstractImpl extends JavaMenuMenuObject {
+		public MenuAbstractImpl() {
+			super(JMenuInfo.this);
+		}
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IMenuItemInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Implementation of {@link IMenuItemInfo}.
+	 *
+	 * @author scheglov_ke
+	 */
+	private final class MenuItemImpl extends AbstractMenuObject implements IMenuItemInfo {
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public MenuItemImpl() {
+			super(JMenuInfo.this);
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Model
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public Object getModel() {
-      return JMenuInfo.this;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Model
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public Object getModel() {
+			return JMenuInfo.this;
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Presentation
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public Image getImage() {
-      return null;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Presentation
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public Image getImage() {
+			return null;
+		}
 
-    public Rectangle getBounds() {
-      return JMenuInfo.this.getBounds();
-    }
+		public Rectangle getBounds() {
+			return JMenuInfo.this.getBounds();
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // IMenuItemInfo
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public IMenuInfo getMenu() {
-      return m_menuImpl;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// IMenuItemInfo
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public IMenuInfo getMenu() {
+			return m_menuImpl;
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Policy
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public IMenuPolicy getPolicy() {
-      return m_menuPolicyImpl;
-    }
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IMenuInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Implementation of {@link IMenuInfo}.
-   *
-   * @author scheglov_ke
-   */
-  private final class MenuImpl extends MenuAbstractImpl implements IMenuInfo {
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Model
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public Object getModel() {
-      return this;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Policy
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public IMenuPolicy getPolicy() {
+			return m_menuPolicyImpl;
+		}
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IMenuInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Implementation of {@link IMenuInfo}.
+	 *
+	 * @author scheglov_ke
+	 */
+	private final class MenuImpl extends MenuAbstractImpl implements IMenuInfo {
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Model
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public Object getModel() {
+			return this;
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Presentation
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public Image getImage() {
-      return m_visualData.m_menuImage;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Presentation
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public Image getImage() {
+			return m_visualData.m_menuImage;
+		}
 
-    public Rectangle getBounds() {
-      return m_visualData.m_menuBounds;
-    }
+		public Rectangle getBounds() {
+			return m_visualData.m_menuBounds;
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Access
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public boolean isHorizontal() {
-      return false;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Access
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public boolean isHorizontal() {
+			return false;
+		}
 
-    public List<IMenuItemInfo> getItems() {
-      return MenuUtils.getItems(JMenuInfo.this);
-    }
+		public List<IMenuItemInfo> getItems() {
+			return MenuUtils.getItems(JMenuInfo.this);
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Policy
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public IMenuPolicy getPolicy() {
-      return m_menuPolicyImpl;
-    }
-  }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Policy
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public IMenuPolicy getPolicy() {
+			return m_menuPolicyImpl;
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/menu/JMenuItemInfo.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/menu/JMenuItemInfo.java
index dbed05f73..e9039a31a 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/menu/JMenuItemInfo.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/menu/JMenuItemInfo.java
@@ -32,105 +32,105 @@
  * @coverage swing.model.menu
  */
 public class JMenuItemInfo extends ContainerInfo implements IAdaptable {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public JMenuItemInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public JMenuItemInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IAdaptable
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final IMenuItemInfo m_itemImpl = new MenuItemImpl();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IAdaptable
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final IMenuItemInfo m_itemImpl = new MenuItemImpl();
 
-  public <T> T getAdapter(Class<T> adapter) {
-    if (adapter.isAssignableFrom(IMenuItemInfo.class)) {
-      return adapter.cast(m_itemImpl);
-    }
-    return null;
-  }
+	public <T> T getAdapter(Class<T> adapter) {
+		if (adapter.isAssignableFrom(IMenuItemInfo.class)) {
+			return adapter.cast(m_itemImpl);
+		}
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void refresh_fetch() throws Exception {
-    // item bounds fetches by using SwingImageUtils.fetchMenuVisualData()
-    if (getParent() instanceof JMenuInfo || getParent() instanceof JPopupMenuInfo) {
-      refresh_fetch_super();
-      return;
-    }
-    // other container
-    super.refresh_fetch();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void refresh_fetch() throws Exception {
+		// item bounds fetches by using SwingImageUtils.fetchMenuVisualData()
+		if (getParent() instanceof JMenuInfo || getParent() instanceof JPopupMenuInfo) {
+			refresh_fetch_super();
+			return;
+		}
+		// other container
+		super.refresh_fetch();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IMenuItemInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Implementation of {@link IMenuItemInfo}.
-   *
-   * @author scheglov_ke
-   */
-  private final class MenuItemImpl extends AbstractMenuObject implements IMenuItemInfo {
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public MenuItemImpl() {
-      super(JMenuItemInfo.this);
-    }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IMenuItemInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Implementation of {@link IMenuItemInfo}.
+	 *
+	 * @author scheglov_ke
+	 */
+	private final class MenuItemImpl extends AbstractMenuObject implements IMenuItemInfo {
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public MenuItemImpl() {
+			super(JMenuItemInfo.this);
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Model
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public Object getModel() {
-      return JMenuItemInfo.this;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Model
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public Object getModel() {
+			return JMenuItemInfo.this;
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Presentation
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public Image getImage() {
-      return null;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Presentation
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public Image getImage() {
+			return null;
+		}
 
-    public Rectangle getBounds() {
-      return JMenuItemInfo.this.getBounds();
-    }
+		public Rectangle getBounds() {
+			return JMenuItemInfo.this.getBounds();
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // IMenuItemInfo
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public IMenuInfo getMenu() {
-      return null;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// IMenuItemInfo
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public IMenuInfo getMenu() {
+			return null;
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Policy
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public IMenuPolicy getPolicy() {
-      return IMenuPolicy.NOOP;
-    }
-  }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Policy
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public IMenuPolicy getPolicy() {
+			return IMenuPolicy.NOOP;
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/menu/JMenuPolicyImpl.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/menu/JMenuPolicyImpl.java
index b83cfdbab..561e2d2c5 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/menu/JMenuPolicyImpl.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/menu/JMenuPolicyImpl.java
@@ -44,150 +44,150 @@
  * @coverage swing.model.menu
  */
 final class JMenuPolicyImpl implements IMenuPolicy {
-  private final JavaInfo m_menu;
+	private final JavaInfo m_menu;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  JMenuPolicyImpl(JavaInfo menu_Info) {
-    m_menu = menu_Info;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	JMenuPolicyImpl(JavaInfo menu_Info) {
+		m_menu = menu_Info;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Validation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public boolean validateCreate(Object newObject) {
-    return isValidObjectType(newObject);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Validation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public boolean validateCreate(Object newObject) {
+		return isValidObjectType(newObject);
+	}
 
-  @SuppressWarnings("unchecked")
-  public boolean validatePaste(final Object mementoObject) {
-    return ExecutionUtils.runObjectLog(new RunnableObjectEx<Boolean>() {
-      public Boolean runObject() throws Exception {
-        List<JavaInfoMemento> mementos = (List<JavaInfoMemento>) mementoObject;
-        for (JavaInfoMemento memento : mementos) {
-          JavaInfo component = memento.create(m_menu);
-          if (!isValidObjectType(component)) {
-            return false;
-          }
-        }
-        return true;
-      }
-    }, false);
-  }
+	@SuppressWarnings("unchecked")
+	public boolean validatePaste(final Object mementoObject) {
+		return ExecutionUtils.runObjectLog(new RunnableObjectEx<Boolean>() {
+			public Boolean runObject() throws Exception {
+				List<JavaInfoMemento> mementos = (List<JavaInfoMemento>) mementoObject;
+				for (JavaInfoMemento memento : mementos) {
+					JavaInfo component = memento.create(m_menu);
+					if (!isValidObjectType(component)) {
+						return false;
+					}
+				}
+				return true;
+			}
+		}, false);
+	}
 
-  public boolean validateMove(Object object) {
-    if (isValidObjectType(object)) {
-      ComponentInfo component = (ComponentInfo) object;
-      // don't move item on its child menu
-      return !component.isItOrParentOf(m_menu);
-    }
-    return false;
-  }
+	public boolean validateMove(Object object) {
+		if (isValidObjectType(object)) {
+			ComponentInfo component = (ComponentInfo) object;
+			// don't move item on its child menu
+			return !component.isItOrParentOf(m_menu);
+		}
+		return false;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void commandCreate(Object newObject, Object nextObject) throws Exception {
-    // prepare ComponentInfo to add and its Association
-    ComponentInfo newComponent;
-    AssociationObject association;
-    if (newObject instanceof ActionInfo) {
-      ActionInfo action = (ActionInfo) newObject;
-      // ensure that ActionInfo is already added
-      if (action.getParent() == null) {
-        ActionContainerInfo.add(m_menu.getRootJava(), action);
-      }
-      // prepare CreationSupport
-      CreationSupport creationSupport;
-      {
-        String signature = "add(javax.swing.Action)";
-        String source = TemplateUtils.format("add({0})", action);
-        creationSupport = new ImplicitFactoryCreationSupport(signature, source);
-      }
-      // use JMenuItem as component
-      newComponent =
-          (ComponentInfo) JavaInfoUtils.createJavaInfo(
-              m_menu.getEditor(),
-              JMenuItem.class,
-              creationSupport);
-      m_menu.getBroadcastObject().select(ImmutableList.of(newComponent));
-      // association is done implicitly during creation
-      association = AssociationObjects.invocationVoid();
-    } else {
-      newComponent = (ComponentInfo) newObject;
-      association = getNewAssociation();
-    }
-    // add ComponentInfo
-    ComponentInfo nextComponent = (ComponentInfo) nextObject;
-    if (newComponent.getCreationSupport() instanceof VoidInvocationCreationSupport) {
-      JavaInfoUtils.add(
-          newComponent,
-          new VoidInvocationVariableSupport(newComponent),
-          PureFlatStatementGenerator.INSTANCE,
-          AssociationObjects.invocationVoid(),
-          m_menu,
-          nextComponent);
-    } else {
-      JavaInfoUtils.add(newComponent, association, m_menu, nextComponent);
-    }
-    // schedule selection
-    MenuUtils.setSelectingItem(newComponent);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void commandCreate(Object newObject, Object nextObject) throws Exception {
+		// prepare ComponentInfo to add and its Association
+		ComponentInfo newComponent;
+		AssociationObject association;
+		if (newObject instanceof ActionInfo) {
+			ActionInfo action = (ActionInfo) newObject;
+			// ensure that ActionInfo is already added
+			if (action.getParent() == null) {
+				ActionContainerInfo.add(m_menu.getRootJava(), action);
+			}
+			// prepare CreationSupport
+			CreationSupport creationSupport;
+			{
+				String signature = "add(javax.swing.Action)";
+				String source = TemplateUtils.format("add({0})", action);
+				creationSupport = new ImplicitFactoryCreationSupport(signature, source);
+			}
+			// use JMenuItem as component
+			newComponent =
+					(ComponentInfo) JavaInfoUtils.createJavaInfo(
+							m_menu.getEditor(),
+							JMenuItem.class,
+							creationSupport);
+			m_menu.getBroadcastObject().select(ImmutableList.of(newComponent));
+			// association is done implicitly during creation
+			association = AssociationObjects.invocationVoid();
+		} else {
+			newComponent = (ComponentInfo) newObject;
+			association = getNewAssociation();
+		}
+		// add ComponentInfo
+		ComponentInfo nextComponent = (ComponentInfo) nextObject;
+		if (newComponent.getCreationSupport() instanceof VoidInvocationCreationSupport) {
+			JavaInfoUtils.add(
+					newComponent,
+					new VoidInvocationVariableSupport(newComponent),
+					PureFlatStatementGenerator.INSTANCE,
+					AssociationObjects.invocationVoid(),
+					m_menu,
+					nextComponent);
+		} else {
+			JavaInfoUtils.add(newComponent, association, m_menu, nextComponent);
+		}
+		// schedule selection
+		MenuUtils.setSelectingItem(newComponent);
+	}
 
-  @SuppressWarnings("unchecked")
-  public List<?> commandPaste(Object mementoObject, final Object nextObject) throws Exception {
-    List<ComponentInfo> pastedObjects = Lists.newArrayList();
-    List<JavaInfoMemento> mementos = (List<JavaInfoMemento>) mementoObject;
-    for (JavaInfoMemento memento : mementos) {
-      ComponentInfo newComponent = (ComponentInfo) memento.create(m_menu);
-      commandCreate(newComponent, nextObject);
-      memento.apply();
-      pastedObjects.add(newComponent);
-    }
-    return pastedObjects;
-  }
+	@SuppressWarnings("unchecked")
+	public List<?> commandPaste(Object mementoObject, final Object nextObject) throws Exception {
+		List<ComponentInfo> pastedObjects = Lists.newArrayList();
+		List<JavaInfoMemento> mementos = (List<JavaInfoMemento>) mementoObject;
+		for (JavaInfoMemento memento : mementos) {
+			ComponentInfo newComponent = (ComponentInfo) memento.create(m_menu);
+			commandCreate(newComponent, nextObject);
+			memento.apply();
+			pastedObjects.add(newComponent);
+		}
+		return pastedObjects;
+	}
 
-  public void commandMove(Object object, Object nextObject) throws Exception {
-    ComponentInfo component = (ComponentInfo) object;
-    ComponentInfo nextComponent = (ComponentInfo) nextObject;
-    JavaInfoUtils.move(component, getNewAssociation(), m_menu, nextComponent);
-    // schedule selection
-    MenuUtils.setSelectingItem(component);
-  }
+	public void commandMove(Object object, Object nextObject) throws Exception {
+		ComponentInfo component = (ComponentInfo) object;
+		ComponentInfo nextComponent = (ComponentInfo) nextObject;
+		JavaInfoUtils.move(component, getNewAssociation(), m_menu, nextComponent);
+		// schedule selection
+		MenuUtils.setSelectingItem(component);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if object has valid type, i.e. {@link ComponentInfo} and not
-   *         {@link JPopupMenuInfo}.
-   */
-  private static boolean isValidObjectType(Object object) {
-    // don't allow JPopupMenu
-    if (object instanceof JPopupMenuInfo) {
-      return false;
-    }
-    // allow Action
-    if (object instanceof ActionInfo) {
-      return true;
-    }
-    // add any component
-    return object instanceof ComponentInfo;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if object has valid type, i.e. {@link ComponentInfo} and not
+	 *         {@link JPopupMenuInfo}.
+	 */
+	private static boolean isValidObjectType(Object object) {
+		// don't allow JPopupMenu
+		if (object instanceof JPopupMenuInfo) {
+			return false;
+		}
+		// allow Action
+		if (object instanceof ActionInfo) {
+			return true;
+		}
+		// add any component
+		return object instanceof ComponentInfo;
+	}
 
-  /**
-   * @return the {@link AssociationObject} for new {@link JMenuItemInfo}.
-   */
-  private AssociationObject getNewAssociation() {
-    return AssociationObjects.invocationChild("%parent%.add(%child%)", false);
-  }
+	/**
+	 * @return the {@link AssociationObject} for new {@link JMenuItemInfo}.
+	 */
+	private AssociationObject getNewAssociation() {
+		return AssociationObjects.invocationChild("%parent%.add(%child%)", false);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/menu/JMenuSeparatorCreationSupport.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/menu/JMenuSeparatorCreationSupport.java
index 58d4f79b8..d824113d2 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/menu/JMenuSeparatorCreationSupport.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/menu/JMenuSeparatorCreationSupport.java
@@ -27,60 +27,60 @@
  * @coverage swing.model.menu
  */
 public final class JMenuSeparatorCreationSupport extends VoidInvocationCreationSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public JMenuSeparatorCreationSupport(JavaInfo hostJavaInfo,
-      MethodDescription description,
-      MethodInvocation invocation,
-      JavaInfo[] argumentInfos) {
-    super(hostJavaInfo, description, invocation);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public JMenuSeparatorCreationSupport(JavaInfo hostJavaInfo,
+			MethodDescription description,
+			MethodInvocation invocation,
+			JavaInfo[] argumentInfos) {
+		super(hostJavaInfo, description, invocation);
+	}
 
-  public JMenuSeparatorCreationSupport(JavaInfo hostJavaInfo) {
-    super(hostJavaInfo, getMethodDescription(hostJavaInfo));
-  }
+	public JMenuSeparatorCreationSupport(JavaInfo hostJavaInfo) {
+		super(hostJavaInfo, getMethodDescription(hostJavaInfo));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static MethodDescription getMethodDescription(JavaInfo hostJavaInfo) {
-    return hostJavaInfo.getDescription().getMethod("addSeparator()");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static MethodDescription getMethodDescription(JavaInfo hostJavaInfo) {
+		return hostJavaInfo.getDescription().getMethod("addSeparator()");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Object getObject(Object hostObject) throws Exception {
-    JMenu menu = (JMenu) hostObject;
-    int index = menu.getMenuComponentCount() - 1;
-    return menu.getMenuComponent(index);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Object getObject(Object hostObject) throws Exception {
+		JMenu menu = (JMenu) hostObject;
+		int index = menu.getMenuComponentCount() - 1;
+		return menu.getMenuComponent(index);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Validation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean canReorder() {
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Validation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean canReorder() {
+		return true;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Adding
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String add_getMethodSource() throws Exception {
-    return "addSeparator()";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Adding
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String add_getMethodSource() throws Exception {
+		return "addSeparator()";
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/menu/JPopupMenuAssociation.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/menu/JPopupMenuAssociation.java
index 3e2e6c984..4c193c7e3 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/menu/JPopupMenuAssociation.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/menu/JPopupMenuAssociation.java
@@ -44,107 +44,107 @@
  * @coverage swing.model.menu
  */
 public final class JPopupMenuAssociation extends InvocationAssociation {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public JPopupMenuAssociation() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public JPopupMenuAssociation() {
+	}
 
-  public JPopupMenuAssociation(MethodInvocation invocation) {
-    super(invocation);
-  }
+	public JPopupMenuAssociation(MethodInvocation invocation) {
+		super(invocation);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void add(JavaInfo javaInfo, StatementTarget target, String[] leadingComments)
-      throws Exception {
-    AstEditor editor = javaInfo.getEditor();
-    // ensure addPopup() method
-    ensure_addPopup(editor, target);
-    // initialize MethodInvocation instance
-    {
-      String source =
-          AssociationUtils.replaceTemplates(javaInfo, "addPopup(%parent%, %child%);", target);
-      List<String> lines = GenericsUtils.asList(leadingComments, source);
-      ExpressionStatement statement = (ExpressionStatement) editor.addStatement(lines, target);
-      m_invocation = (MethodInvocation) statement.getExpression();
-    }
-    // add related nodes
-    AbstractInsideStatementGenerator.addRelatedNodes(javaInfo, m_invocation);
-    // set association
-    setInModelNoCompound(javaInfo);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void add(JavaInfo javaInfo, StatementTarget target, String[] leadingComments)
+			throws Exception {
+		AstEditor editor = javaInfo.getEditor();
+		// ensure addPopup() method
+		ensure_addPopup(editor, target);
+		// initialize MethodInvocation instance
+		{
+			String source =
+					AssociationUtils.replaceTemplates(javaInfo, "addPopup(%parent%, %child%);", target);
+			List<String> lines = GenericsUtils.asList(leadingComments, source);
+			ExpressionStatement statement = (ExpressionStatement) editor.addStatement(lines, target);
+			m_invocation = (MethodInvocation) statement.getExpression();
+		}
+		// add related nodes
+		AbstractInsideStatementGenerator.addRelatedNodes(javaInfo, m_invocation);
+		// set association
+		setInModelNoCompound(javaInfo);
+	}
 
-  @Override
-  public boolean remove() throws Exception {
-    Statement statement = getStatement();
-    m_editor.removeEnclosingStatement(statement);
-    // continue
-    return super.remove();
-  }
+	@Override
+	public boolean remove() throws Exception {
+		Statement statement = getStatement();
+		m_editor.removeEnclosingStatement(statement);
+		// continue
+		return super.remove();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Ensures that {@link TypeDeclaration} has method "addPopup()", that is used by Designer to
-   * attach {@link JPopupMenu} to {@link Component}.
-   */
-  private void ensure_addPopup(AstEditor editor, StatementTarget target) throws Exception {
-    TypeDeclaration typeDeclaration = editor.getEnclosingType(target.getPosition());
-    if (AstNodeUtils.getMethodBySignature(
-        typeDeclaration,
-        "addPopup(java.awt.Component,javax.swing.JPopupMenu)") == null) {
-      // prepare method lines
-      List<String> lines = Lists.newArrayList();
-      {
-        lines.add("component.addMouseListener(new java.awt.event.MouseAdapter() {");
-        lines.add("  public void mousePressed(java.awt.event.MouseEvent e) {");
-        lines.add("    if (e.isPopupTrigger()) {");
-        lines.add("      showMenu(e);");
-        lines.add("    }");
-        lines.add("  }");
-        lines.add("  public void mouseReleased(java.awt.event.MouseEvent e) {");
-        lines.add("    if (e.isPopupTrigger()) {");
-        lines.add("      showMenu(e);");
-        lines.add("    }");
-        lines.add("  }");
-        lines.add("  private void showMenu(java.awt.event.MouseEvent e) {");
-        lines.add("    popup.show(e.getComponent(), e.getX(), e.getY());");
-        lines.add("  }");
-        lines.add("});");
-        // replace spaces with "\t"
-        for (ListIterator<String> I = lines.listIterator(); I.hasNext();) {
-          String line = I.next();
-          // prepare count of leading spaces
-          int spaceCount = 0;
-          for (char c : line.toCharArray()) {
-            if (c != ' ') {
-              break;
-            }
-            spaceCount++;
-          }
-          // replace each two leading spaces with one \t
-          line = StringUtils.repeat("\t", spaceCount / 2) + line.substring(spaceCount);
-          I.set(line);
-        }
-      }
-      // add method
-      {
-        String header =
-            "private static void addPopup(java.awt.Component component, "
-                + "final javax.swing.JPopupMenu popup)";
-        BodyDeclarationTarget methodTarget = new BodyDeclarationTarget(typeDeclaration, false);
-        editor.addMethodDeclaration(header, lines, methodTarget);
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Ensures that {@link TypeDeclaration} has method "addPopup()", that is used by Designer to
+	 * attach {@link JPopupMenu} to {@link Component}.
+	 */
+	private void ensure_addPopup(AstEditor editor, StatementTarget target) throws Exception {
+		TypeDeclaration typeDeclaration = editor.getEnclosingType(target.getPosition());
+		if (AstNodeUtils.getMethodBySignature(
+				typeDeclaration,
+				"addPopup(java.awt.Component,javax.swing.JPopupMenu)") == null) {
+			// prepare method lines
+			List<String> lines = Lists.newArrayList();
+			{
+				lines.add("component.addMouseListener(new java.awt.event.MouseAdapter() {");
+				lines.add("  public void mousePressed(java.awt.event.MouseEvent e) {");
+				lines.add("    if (e.isPopupTrigger()) {");
+				lines.add("      showMenu(e);");
+				lines.add("    }");
+				lines.add("  }");
+				lines.add("  public void mouseReleased(java.awt.event.MouseEvent e) {");
+				lines.add("    if (e.isPopupTrigger()) {");
+				lines.add("      showMenu(e);");
+				lines.add("    }");
+				lines.add("  }");
+				lines.add("  private void showMenu(java.awt.event.MouseEvent e) {");
+				lines.add("    popup.show(e.getComponent(), e.getX(), e.getY());");
+				lines.add("  }");
+				lines.add("});");
+				// replace spaces with "\t"
+				for (ListIterator<String> I = lines.listIterator(); I.hasNext();) {
+					String line = I.next();
+					// prepare count of leading spaces
+					int spaceCount = 0;
+					for (char c : line.toCharArray()) {
+						if (c != ' ') {
+							break;
+						}
+						spaceCount++;
+					}
+					// replace each two leading spaces with one \t
+					line = StringUtils.repeat("\t", spaceCount / 2) + line.substring(spaceCount);
+					I.set(line);
+				}
+			}
+			// add method
+			{
+				String header =
+						"private static void addPopup(java.awt.Component component, "
+								+ "final javax.swing.JPopupMenu popup)";
+				BodyDeclarationTarget methodTarget = new BodyDeclarationTarget(typeDeclaration, false);
+				editor.addMethodDeclaration(header, lines, methodTarget);
+			}
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/menu/JPopupMenuInfo.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/menu/JPopupMenuInfo.java
index 42800e8fb..cb4468000 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/menu/JPopupMenuInfo.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/menu/JPopupMenuInfo.java
@@ -53,273 +53,273 @@
  * @coverage swing.model.menu
  */
 public final class JPopupMenuInfo extends ContainerInfo implements IAdaptable {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public JPopupMenuInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public JPopupMenuInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Events
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void initialize() throws Exception {
-    super.initialize();
-    MenuUtils.copyPasteItems(this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Events
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void initialize() throws Exception {
+		super.initialize();
+		MenuUtils.copyPasteItems(this);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link JMenuItemInfo} children. Practically can be used only in tests because
-   *         {@link JMenu} may have not only {@link JMenuItem} children, but also {@link JSeparator}
-   *         or just any {@link Component}.
-   */
-  public List<JMenuItemInfo> getChildrenItems() {
-    return getChildren(JMenuItemInfo.class);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link JMenuItemInfo} children. Practically can be used only in tests because
+	 *         {@link JMenu} may have not only {@link JMenuItem} children, but also {@link JSeparator}
+	 *         or just any {@link Component}.
+	 */
+	public List<JMenuItemInfo> getChildrenItems() {
+		return getChildren(JMenuItemInfo.class);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private MenuVisualData m_visualData;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private MenuVisualData m_visualData;
 
-  @Override
-  protected void refresh_afterCreate() throws Exception {
-    JPopupMenu menu = (JPopupMenu) getObject();
-    // add text, if no "real" items
-    {
-      if (menu.getComponentCount() == 0) {
-        menu.add(new JMenuItem(IMenuInfo.NO_ITEMS_TEXT));
-      }
-    }
-    // add a popup menu tracking listener to get the menu working in 'Test/Preview' mode.
-    {
-      ComponentInfo parent = (ComponentInfo) getParent();
-      if (parent != null) {
-        Component parentComponent = parent.getComponent();
-        addPopup(parentComponent, menu);
-      }
-    }
-    // continue
-    super.refresh_afterCreate();
-  }
+	@Override
+	protected void refresh_afterCreate() throws Exception {
+		JPopupMenu menu = (JPopupMenu) getObject();
+		// add text, if no "real" items
+		{
+			if (menu.getComponentCount() == 0) {
+				menu.add(new JMenuItem(IMenuInfo.NO_ITEMS_TEXT));
+			}
+		}
+		// add a popup menu tracking listener to get the menu working in 'Test/Preview' mode.
+		{
+			ComponentInfo parent = (ComponentInfo) getParent();
+			if (parent != null) {
+				Component parentComponent = parent.getComponent();
+				addPopup(parentComponent, menu);
+			}
+		}
+		// continue
+		super.refresh_afterCreate();
+	}
 
-  @Override
-  protected void refresh_fetch() throws Exception {
-    m_visualData = SwingImageUtils.fetchMenuVisualData(getContainer(), null);
-    super.refresh_fetch();
-    MenuUtils.setItemsBounds(m_visualData, getChildrenComponents());
-  }
+	@Override
+	protected void refresh_fetch() throws Exception {
+		m_visualData = SwingImageUtils.fetchMenuVisualData(getContainer(), null);
+		super.refresh_fetch();
+		MenuUtils.setItemsBounds(m_visualData, getChildrenComponents());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds new {@link JPopupMenuInfo} on given {@link ComponentInfo}.
-   */
-  public void command_CREATE(ComponentInfo component) throws Exception {
-    JavaInfoUtils.addFirst(this, getAssociation_(), component);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds new {@link JPopupMenuInfo} on given {@link ComponentInfo}.
+	 */
+	public void command_CREATE(ComponentInfo component) throws Exception {
+		JavaInfoUtils.addFirst(this, getAssociation_(), component);
+	}
 
-  /**
-   * Moves this {@link JPopupMenuInfo} on given {@link ComponentInfo}.
-   */
-  public void command_MOVE(ComponentInfo component) throws Exception {
-    ComponentOrder order = ComponentOrderFirst.INSTANCE;
-    JavaInfo nextComponent = order.getNextComponent_whenLast(this, component);
-    JavaInfoUtils.move(this, getAssociation_(), component, nextComponent);
-  }
+	/**
+	 * Moves this {@link JPopupMenuInfo} on given {@link ComponentInfo}.
+	 */
+	public void command_MOVE(ComponentInfo component) throws Exception {
+		ComponentOrder order = ComponentOrderFirst.INSTANCE;
+		JavaInfo nextComponent = order.getNextComponent_whenLast(this, component);
+		JavaInfoUtils.move(this, getAssociation_(), component, nextComponent);
+	}
 
-  private static AssociationObject getAssociation_() {
-    Association association = new JPopupMenuAssociation();
-    return new AssociationObject(association, true);
-  }
+	private static AssociationObject getAssociation_() {
+		Association association = new JPopupMenuAssociation();
+		return new AssociationObject(association, true);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IAdaptable
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final IMenuPopupInfo m_popupImpl = new MenuPopupImpl();
-  private final IMenuInfo m_menuImpl = new MenuImpl();
-  private final IMenuPolicy m_menuPolicyImpl = new JMenuPolicyImpl(this);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IAdaptable
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final IMenuPopupInfo m_popupImpl = new MenuPopupImpl();
+	private final IMenuInfo m_menuImpl = new MenuImpl();
+	private final IMenuPolicy m_menuPolicyImpl = new JMenuPolicyImpl(this);
 
-  public <T> T getAdapter(Class<T> adapter) {
-    if (adapter.isAssignableFrom(IMenuPopupInfo.class)) {
-      return adapter.cast(m_popupImpl);
-    }
-    return null;
-  }
+	public <T> T getAdapter(Class<T> adapter) {
+		if (adapter.isAssignableFrom(IMenuPopupInfo.class)) {
+			return adapter.cast(m_popupImpl);
+		}
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Popup menu tracking
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds a special popup tracking listener to get the menu working in 'Test/Preview' mode.
-   */
-  private static void addPopup(Component component, final JPopupMenu popup) {
-    component.addMouseListener(new MouseAdapter() {
-      @Override
-      public void mousePressed(MouseEvent e) {
-        if (e.isPopupTrigger()) {
-          showMenu(e);
-        }
-      }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Popup menu tracking
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds a special popup tracking listener to get the menu working in 'Test/Preview' mode.
+	 */
+	private static void addPopup(Component component, final JPopupMenu popup) {
+		component.addMouseListener(new MouseAdapter() {
+			@Override
+			public void mousePressed(MouseEvent e) {
+				if (e.isPopupTrigger()) {
+					showMenu(e);
+				}
+			}
 
-      @Override
-      public void mouseReleased(MouseEvent e) {
-        if (e.isPopupTrigger()) {
-          showMenu(e);
-        }
-      }
+			@Override
+			public void mouseReleased(MouseEvent e) {
+				if (e.isPopupTrigger()) {
+					showMenu(e);
+				}
+			}
 
-      private void showMenu(MouseEvent e) {
-        popup.show(e.getComponent(), e.getX(), e.getY());
-      }
-    });
-  }
+			private void showMenu(MouseEvent e) {
+				popup.show(e.getComponent(), e.getX(), e.getY());
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AbstractMenuImpl
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Abstract superclass for {@link IMenuObjectInfo} implementations.
-   *
-   * @author scheglov_ke
-   */
-  private abstract class MenuAbstractImpl extends JavaMenuMenuObject {
-    public MenuAbstractImpl() {
-      super(JPopupMenuInfo.this);
-    }
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IMenuPopupInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Implementation of {@link IMenuPopupInfo}.
-   *
-   * @author scheglov_ke
-   */
-  private final class MenuPopupImpl extends MenuAbstractImpl implements IMenuPopupInfo {
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Model
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public Object getModel() {
-      return JPopupMenuInfo.this;
-    }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AbstractMenuImpl
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Abstract superclass for {@link IMenuObjectInfo} implementations.
+	 *
+	 * @author scheglov_ke
+	 */
+	private abstract class MenuAbstractImpl extends JavaMenuMenuObject {
+		public MenuAbstractImpl() {
+			super(JPopupMenuInfo.this);
+		}
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IMenuPopupInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Implementation of {@link IMenuPopupInfo}.
+	 *
+	 * @author scheglov_ke
+	 */
+	private final class MenuPopupImpl extends MenuAbstractImpl implements IMenuPopupInfo {
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Model
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public Object getModel() {
+			return JPopupMenuInfo.this;
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Presentation
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public Image getImage() {
-      return ExecutionUtils.runObjectLog(new RunnableObjectEx<Image>() {
-        public Image runObject() throws Exception {
-          return getPresentation().getIcon();
-        }
-      }, getDescription().getIcon());
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Presentation
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public Image getImage() {
+			return ExecutionUtils.runObjectLog(new RunnableObjectEx<Image>() {
+				public Image runObject() throws Exception {
+					return getPresentation().getIcon();
+				}
+			}, getDescription().getIcon());
+		}
 
-    public Rectangle getBounds() {
-      Image image = getImage();
-      return new Rectangle(0, 0, image.getBounds().width, image.getBounds().height);
-    }
+		public Rectangle getBounds() {
+			Image image = getImage();
+			return new Rectangle(0, 0, image.getBounds().width, image.getBounds().height);
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // IMenuPopupInfo
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public IMenuInfo getMenu() {
-      return m_menuImpl;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// IMenuPopupInfo
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public IMenuInfo getMenu() {
+			return m_menuImpl;
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Policy
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public IMenuPolicy getPolicy() {
-      return IMenuPolicy.NOOP;
-    }
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IMenuInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Implementation of {@link IMenuInfo}.
-   *
-   * @author scheglov_ke
-   */
-  private final class MenuImpl extends MenuAbstractImpl implements IMenuInfo {
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Model
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public Object getModel() {
-      return this;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Policy
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public IMenuPolicy getPolicy() {
+			return IMenuPolicy.NOOP;
+		}
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IMenuInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Implementation of {@link IMenuInfo}.
+	 *
+	 * @author scheglov_ke
+	 */
+	private final class MenuImpl extends MenuAbstractImpl implements IMenuInfo {
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Model
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public Object getModel() {
+			return this;
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Presentation
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public Image getImage() {
-      return m_visualData.m_menuImage;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Presentation
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public Image getImage() {
+			return m_visualData.m_menuImage;
+		}
 
-    public Rectangle getBounds() {
-      return m_visualData.m_menuBounds;
-    }
+		public Rectangle getBounds() {
+			return m_visualData.m_menuBounds;
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Access
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public boolean isHorizontal() {
-      return false;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Access
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public boolean isHorizontal() {
+			return false;
+		}
 
-    public List<IMenuItemInfo> getItems() {
-      return MenuUtils.getItems(JPopupMenuInfo.this);
-    }
+		public List<IMenuItemInfo> getItems() {
+			return MenuUtils.getItems(JPopupMenuInfo.this);
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Policy
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public IMenuPolicy getPolicy() {
-      return m_menuPolicyImpl;
-    }
-  }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Policy
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public IMenuPolicy getPolicy() {
+			return m_menuPolicyImpl;
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/menu/JPopupMenuSeparatorCreationSupport.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/menu/JPopupMenuSeparatorCreationSupport.java
index bb38c05b6..a00021cfe 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/menu/JPopupMenuSeparatorCreationSupport.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/menu/JPopupMenuSeparatorCreationSupport.java
@@ -26,60 +26,60 @@
  * @coverage swing.model.menu
  */
 public final class JPopupMenuSeparatorCreationSupport extends VoidInvocationCreationSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public JPopupMenuSeparatorCreationSupport(JavaInfo hostJavaInfo,
-      MethodDescription description,
-      MethodInvocation invocation,
-      JavaInfo[] argumentInfos) {
-    super(hostJavaInfo, description, invocation);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public JPopupMenuSeparatorCreationSupport(JavaInfo hostJavaInfo,
+			MethodDescription description,
+			MethodInvocation invocation,
+			JavaInfo[] argumentInfos) {
+		super(hostJavaInfo, description, invocation);
+	}
 
-  public JPopupMenuSeparatorCreationSupport(JavaInfo hostJavaInfo) {
-    super(hostJavaInfo, getMethodDescription(hostJavaInfo));
-  }
+	public JPopupMenuSeparatorCreationSupport(JavaInfo hostJavaInfo) {
+		super(hostJavaInfo, getMethodDescription(hostJavaInfo));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static MethodDescription getMethodDescription(JavaInfo hostJavaInfo) {
-    return hostJavaInfo.getDescription().getMethod("addSeparator()");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static MethodDescription getMethodDescription(JavaInfo hostJavaInfo) {
+		return hostJavaInfo.getDescription().getMethod("addSeparator()");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Object getObject(Object hostObject) throws Exception {
-    JPopupMenu popup = (JPopupMenu) hostObject;
-    int index = popup.getComponentCount() - 1;
-    return popup.getComponent(index);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Object getObject(Object hostObject) throws Exception {
+		JPopupMenu popup = (JPopupMenu) hostObject;
+		int index = popup.getComponentCount() - 1;
+		return popup.getComponent(index);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Validation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean canReorder() {
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Validation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean canReorder() {
+		return true;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Adding
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String add_getMethodSource() throws Exception {
-    return "addSeparator()";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Adding
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String add_getMethodSource() throws Exception {
+		return "addSeparator()";
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/menu/JPopupMenuSeparatorInfo.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/menu/JPopupMenuSeparatorInfo.java
index 2ac9042cc..7a114212d 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/menu/JPopupMenuSeparatorInfo.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/menu/JPopupMenuSeparatorInfo.java
@@ -28,17 +28,17 @@
  * @coverage swing.model.menu
  */
 public final class JPopupMenuSeparatorInfo extends JMenuItemInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public JPopupMenuSeparatorInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-    if (creationSupport.getNode() instanceof MethodInvocation) {
-      setVariableSupport(new VoidInvocationVariableSupport(this));
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public JPopupMenuSeparatorInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+		if (creationSupport.getNode() instanceof MethodInvocation) {
+			setVariableSupport(new VoidInvocationVariableSupport(this));
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/menu/MenuUtils.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/menu/MenuUtils.java
index 9c7665758..324c82bef 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/menu/MenuUtils.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/menu/MenuUtils.java
@@ -32,97 +32,97 @@
  * @coverage swing.model.menu
  */
 public final class MenuUtils {
-  private static final String KEY_MENU_UTILS_ITEM = "Surrogate IMenuItemInfo for ComponentInfo";
+	private static final String KEY_MENU_UTILS_ITEM = "Surrogate IMenuItemInfo for ComponentInfo";
 
-  /**
-   * Sets bounds for {@link ComponentInfo} children of some menu.
-   */
-  public static void setItemsBounds(MenuVisualData visualData, List<ComponentInfo> items) {
-    for (int i = 0; i < items.size(); i++) {
-      ComponentInfo item = items.get(i);
-      item.setModelBounds(visualData.m_itemBounds.get(i));
-    }
-  }
+	/**
+	 * Sets bounds for {@link ComponentInfo} children of some menu.
+	 */
+	public static void setItemsBounds(MenuVisualData visualData, List<ComponentInfo> items) {
+		for (int i = 0; i < items.size(); i++) {
+			ComponentInfo item = items.get(i);
+			item.setModelBounds(visualData.m_itemBounds.get(i));
+		}
+	}
 
-  /**
-   * @param container
-   *          some menu container, {@link JMenuInfo} or {@link JPopupMenuInfo}.
-   *
-   * @return the {@link IMenuItemInfo}'s of given menu container.
-   */
-  public static List<IMenuItemInfo> getItems(ContainerInfo container) {
-    List<IMenuItemInfo> items = Lists.newArrayList();
-    for (ComponentInfo component : container.getChildrenComponents()) {
-      IMenuItemInfo item = getMenuItem(component);
-      items.add(item);
-    }
-    return items;
-  }
+	/**
+	 * @param container
+	 *          some menu container, {@link JMenuInfo} or {@link JPopupMenuInfo}.
+	 *
+	 * @return the {@link IMenuItemInfo}'s of given menu container.
+	 */
+	public static List<IMenuItemInfo> getItems(ContainerInfo container) {
+		List<IMenuItemInfo> items = Lists.newArrayList();
+		for (ComponentInfo component : container.getChildrenComponents()) {
+			IMenuItemInfo item = getMenuItem(component);
+			items.add(item);
+		}
+		return items;
+	}
 
-  /**
-   * @param component
-   *          some {@link ComponentInfo}, may be menu related, may be just generic.
-   *
-   * @return the {@link IMenuItemInfo} wrapper for given {@link ComponentInfo}.
-   */
-  public static IMenuItemInfo getMenuItem(ComponentInfo component) {
-    if (component instanceof JMenuInfo) {
-      return MenuObjectInfoUtils.getMenuItemInfo(component);
-    } else if (component instanceof JMenuItemInfo) {
-      return MenuObjectInfoUtils.getMenuItemInfo(component);
-    } else {
-      IMenuItemInfo item = (IMenuItemInfo) component.getArbitraryValue(KEY_MENU_UTILS_ITEM);
-      if (item == null) {
-        item = new ComponentMenuItemInfo(component);
-        component.putArbitraryValue(KEY_MENU_UTILS_ITEM, item);
-      }
-      return item;
-    }
-  }
+	/**
+	 * @param component
+	 *          some {@link ComponentInfo}, may be menu related, may be just generic.
+	 *
+	 * @return the {@link IMenuItemInfo} wrapper for given {@link ComponentInfo}.
+	 */
+	public static IMenuItemInfo getMenuItem(ComponentInfo component) {
+		if (component instanceof JMenuInfo) {
+			return MenuObjectInfoUtils.getMenuItemInfo(component);
+		} else if (component instanceof JMenuItemInfo) {
+			return MenuObjectInfoUtils.getMenuItemInfo(component);
+		} else {
+			IMenuItemInfo item = (IMenuItemInfo) component.getArbitraryValue(KEY_MENU_UTILS_ITEM);
+			if (item == null) {
+				item = new ComponentMenuItemInfo(component);
+				component.putArbitraryValue(KEY_MENU_UTILS_ITEM, item);
+			}
+			return item;
+		}
+	}
 
-  /**
-   * Sets {@link ComponentInfo} which is menu item and should be selected (and expanded) during
-   * refresh.
-   */
-  public static void setSelectingItem(ComponentInfo component) {
-    IMenuItemInfo item = getMenuItem(component);
-    MenuObjectInfoUtils.setSelectingObject(item);
-  }
+	/**
+	 * Sets {@link ComponentInfo} which is menu item and should be selected (and expanded) during
+	 * refresh.
+	 */
+	public static void setSelectingItem(ComponentInfo component) {
+		IMenuItemInfo item = getMenuItem(component);
+		MenuObjectInfoUtils.setSelectingObject(item);
+	}
 
-  /**
-   * Adds broadcast listener for copy/paste items of menu container.
-   *
-   * @param container
-   *          some menu container, {@link JMenuInfo} or {@link JPopupMenuInfo}.
-   */
-  public static void copyPasteItems(final ContainerInfo container) {
-    container.addBroadcastListener(new JavaEventListener() {
-      @Override
-      public void clipboardCopy(JavaInfo javaInfo, List<ClipboardCommand> commands)
-          throws Exception {
-        if (javaInfo == container) {
-          for (ComponentInfo item : container.getChildrenComponents()) {
-            final JavaInfoMemento memento = JavaInfoMemento.createMemento(item);
-            commands.add(new ClipboardCommand() {
-              private static final long serialVersionUID = 0L;
+	/**
+	 * Adds broadcast listener for copy/paste items of menu container.
+	 *
+	 * @param container
+	 *          some menu container, {@link JMenuInfo} or {@link JPopupMenuInfo}.
+	 */
+	public static void copyPasteItems(final ContainerInfo container) {
+		container.addBroadcastListener(new JavaEventListener() {
+			@Override
+			public void clipboardCopy(JavaInfo javaInfo, List<ClipboardCommand> commands)
+					throws Exception {
+				if (javaInfo == container) {
+					for (ComponentInfo item : container.getChildrenComponents()) {
+						final JavaInfoMemento memento = JavaInfoMemento.createMemento(item);
+						commands.add(new ClipboardCommand() {
+							private static final long serialVersionUID = 0L;
 
-              @Override
-              public void execute(JavaInfo javaInfo) throws Exception {
-                IMenuInfo menuObject;
-                if (javaInfo instanceof JMenuInfo) {
-                  menuObject = MenuObjectInfoUtils.getMenuInfo(javaInfo);
-                } else {
-                  menuObject = MenuObjectInfoUtils.getMenuPopupInfo(javaInfo).getMenu();
-                }
-                // paste item
-                ComponentInfo item = (ComponentInfo) memento.create(javaInfo);
-                menuObject.getPolicy().commandCreate(item, null);
-                memento.apply();
-              }
-            });
-          }
-        }
-      }
-    });
-  }
+							@Override
+							public void execute(JavaInfo javaInfo) throws Exception {
+								IMenuInfo menuObject;
+								if (javaInfo instanceof JMenuInfo) {
+									menuObject = MenuObjectInfoUtils.getMenuInfo(javaInfo);
+								} else {
+									menuObject = MenuObjectInfoUtils.getMenuPopupInfo(javaInfo).getMenu();
+								}
+								// paste item
+								ComponentInfo item = (ComponentInfo) memento.create(javaInfo);
+								menuObject.getPolicy().commandCreate(item, null);
+								memento.apply();
+							}
+						});
+					}
+				}
+			}
+		});
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/top/JPanelTopBoundsSupport.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/top/JPanelTopBoundsSupport.java
index ebbab3d32..46aa657c2 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/top/JPanelTopBoundsSupport.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/top/JPanelTopBoundsSupport.java
@@ -26,43 +26,43 @@
  * @coverage swing.model.top
  */
 public final class JPanelTopBoundsSupport extends SwingTopBoundsSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public JPanelTopBoundsSupport(ContainerInfo container) {
-    super(container);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public JPanelTopBoundsSupport(ContainerInfo container) {
+		super(container);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // TopBoundsSupport
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void apply() throws Exception {
-    // check for: setPreferredSize(java.awt.Dimension)void and use it for setSize()
-    {
-      MethodInvocation invocation =
-          m_component.getMethodInvocation("setPreferredSize(java.awt.Dimension)");
-      if (invocation != null) {
-        Component component = (Component) m_component.getObject();
-        component.setSize(component.getPreferredSize());
-        return;
-      }
-    }
-    //
-    super.apply();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// TopBoundsSupport
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void apply() throws Exception {
+		// check for: setPreferredSize(java.awt.Dimension)void and use it for setSize()
+		{
+			MethodInvocation invocation =
+					m_component.getMethodInvocation("setPreferredSize(java.awt.Dimension)");
+			if (invocation != null) {
+				Component component = (Component) m_component.getObject();
+				component.setSize(component.getPreferredSize());
+				return;
+			}
+		}
+		//
+		super.apply();
+	}
 
-  @Override
-  public void setSize(int width, int height) throws Exception {
-    // check for: setPreferredSize(java.awt.Dimension)void
-    if (setSizeDimension("setPreferredSize", width, height)) {
-      return;
-    }
-    //
-    super.setSize(width, height);
-  }
+	@Override
+	public void setSize(int width, int height) throws Exception {
+		// check for: setPreferredSize(java.awt.Dimension)void
+		if (setSizeDimension("setPreferredSize", width, height)) {
+			return;
+		}
+		//
+		super.setSize(width, height);
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/top/SwingTopBoundsSupport.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/top/SwingTopBoundsSupport.java
index 1eae0b319..1f587e461 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/top/SwingTopBoundsSupport.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/top/SwingTopBoundsSupport.java
@@ -42,214 +42,214 @@
  * @coverage swing.model.top
  */
 public class SwingTopBoundsSupport extends TopBoundsSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SwingTopBoundsSupport(ComponentInfo component) {
-    super(component);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SwingTopBoundsSupport(ComponentInfo component) {
+		super(component);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // TopBoundsSupport
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void apply() throws Exception {
-    // if one these methods is present, we already set size during AST evaluation
-    if (hasMethodInvocations(new String[]{
-        "setSize(int,int)",
-        "setBounds(int,int,int,int)",
-        "setSize(java.awt.Dimension)"})) {
-      return;
-    }
-    // set size from resource properties (or default)
-    {
-      Component component = (Component) m_component.getObject();
-      org.eclipse.draw2d.geometry.Dimension size = getResourceSize();
-      component.setSize(size.width, size.height);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// TopBoundsSupport
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void apply() throws Exception {
+		// if one these methods is present, we already set size during AST evaluation
+		if (hasMethodInvocations(new String[]{
+				"setSize(int,int)",
+				"setBounds(int,int,int,int)",
+		"setSize(java.awt.Dimension)"})) {
+			return;
+		}
+		// set size from resource properties (or default)
+		{
+			Component component = (Component) m_component.getObject();
+			org.eclipse.draw2d.geometry.Dimension size = getResourceSize();
+			component.setSize(size.width, size.height);
+		}
+	}
 
-  @Override
-  public void setSize(int width, int height) throws Exception {
-    // check for: setSize(java.awt.Dimension)void
-    if (setSizeDimension("setSize", width, height)) {
-      return;
-    }
-    // check for: setSize(int,int)void
-    if (setSizeInts("setSize(int,int)", 0, 1, width, height)) {
-      return;
-    }
-    // check for: setBounds(int,int,int,int)void
-    if (setSizeInts("setBounds(int,int,int,int)", 2, 3, width, height)) {
-      return;
-    }
-    // remember size in resource properties
-    setResourceSize(width, height);
-  }
+	@Override
+	public void setSize(int width, int height) throws Exception {
+		// check for: setSize(java.awt.Dimension)void
+		if (setSizeDimension("setSize", width, height)) {
+			return;
+		}
+		// check for: setSize(int,int)void
+		if (setSizeInts("setSize(int,int)", 0, 1, width, height)) {
+			return;
+		}
+		// check for: setBounds(int,int,int,int)void
+		if (setSizeInts("setBounds(int,int,int,int)", 2, 3, width, height)) {
+			return;
+		}
+		// remember size in resource properties
+		setResourceSize(width, height);
+	}
 
-  @Override
-  protected Dimension getDefaultSize() {
-    // if "preferred" size if big enough, don't change it
-    if (m_component.getObject() instanceof Component) {
-      Component component = (Component) m_component.getObject();
-      java.awt.Dimension size = component.getSize();
-      if (size.width >= 200 || size.height >= 200) {
-        return new Dimension(size.width, size.height);
-      }
-    }
-    // use toolkit defaults
-    return super.getDefaultSize();
-  }
+	@Override
+	protected Dimension getDefaultSize() {
+		// if "preferred" size if big enough, don't change it
+		if (m_component.getObject() instanceof Component) {
+			Component component = (Component) m_component.getObject();
+			java.awt.Dimension size = component.getSize();
+			if (size.width >= 200 || size.height >= 200) {
+				return new Dimension(size.width, size.height);
+			}
+		}
+		// use toolkit defaults
+		return super.getDefaultSize();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Show
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean show() throws Exception {
-    Component component = (Component) m_component.getObject();
-    show(component);
-    // yes, we've shown window
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Show
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean show() throws Exception {
+		Component component = (Component) m_component.getObject();
+		show(component);
+		// yes, we've shown window
+		return true;
+	}
 
-  /**
-   * Shows given {@link Component} for testing/preview.
-   */
-  public static void show(Component component) throws Exception {
-    // prepare Window
-    final Window window;
-    {
-      Rectangle monitorClientArea = DesignerPlugin.getShell().getMonitor().getClientArea();
-      window = prepareWindow(component, monitorClientArea);
-    }
-    // show and wait for close
-    {
-      // add close listener
-      final Shell mainShell = DesignerPlugin.getShell();
-      window.addWindowListener(new WindowAdapter() {
-        @Override
-        public void windowClosing(WindowEvent e) {
-          mainShell.getDisplay().asyncExec(new Runnable() {
-            public void run() {
-              mainShell.setEnabled(true);
-              mainShell.forceActive();
-            }
-          });
-        }
-      });
-      SwingUtils.runLaterAndWait(new RunnableEx() {
-        public void run() throws Exception {
-          window.setFocusableWindowState(true);
-          window.setVisible(true);
-          window.toFront();
-        }
-      });
-      // wait for close
-      mainShell.setEnabled(false);
-      while (window.isVisible()) {
-        while (mainShell.getDisplay().readAndDispatch()) {
-        }
-        mainShell.getDisplay().sleep();
-      }
-    }
-  }
+	/**
+	 * Shows given {@link Component} for testing/preview.
+	 */
+	public static void show(Component component) throws Exception {
+		// prepare Window
+		final Window window;
+		{
+			Rectangle monitorClientArea = DesignerPlugin.getShell().getMonitor().getClientArea();
+			window = prepareWindow(component, monitorClientArea);
+		}
+		// show and wait for close
+		{
+			// add close listener
+			final Shell mainShell = DesignerPlugin.getShell();
+			window.addWindowListener(new WindowAdapter() {
+				@Override
+				public void windowClosing(WindowEvent e) {
+					mainShell.getDisplay().asyncExec(new Runnable() {
+						public void run() {
+							mainShell.setEnabled(true);
+							mainShell.forceActive();
+						}
+					});
+				}
+			});
+			SwingUtils.runLaterAndWait(new RunnableEx() {
+				public void run() throws Exception {
+					window.setFocusableWindowState(true);
+					window.setVisible(true);
+					window.toFront();
+				}
+			});
+			// wait for close
+			mainShell.setEnabled(false);
+			while (window.isVisible()) {
+				while (mainShell.getDisplay().readAndDispatch()) {
+				}
+				mainShell.getDisplay().sleep();
+			}
+		}
+	}
 
-  /**
-   * Creates Window instance (if needed) to show be shown.
-   */
-  private static Window prepareWindow(final Component component, final Rectangle clientArea)
-      throws Exception {
-    return SwingUtils.runObjectLaterAndWait(new RunnableObjectEx<Window>() {
-      public Window runObject() throws Exception {
-        final Window window;
-        if (component instanceof Window) {
-          window = (Window) component;
-        } else {
-          JFrame frame = new JFrame();
-          window = frame;
-          // add component on frame
-          component.setPreferredSize(component.getSize());
-          frame.getContentPane().add(component, BorderLayout.CENTER);
-          // configure frame
-          frame.setTitle(ModelMessages.SwingTopBoundsSupport_wrapperTitle);
-          frame.pack();
-        }
-        // set window location
-        {
-          int x = clientArea.x + (clientArea.width - window.getWidth()) / 2;
-          int y = clientArea.y + (clientArea.height - window.getHeight()) / 2;
-          window.setLocation(x, y);
-        }
-        // configure special windows
-        {
-          if (window instanceof Dialog) {
-            ((Dialog) window).setModal(false);
-          }
-          if (window instanceof JFrame) {
-            ((JFrame) window).setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
-          }
-        }
-        return window;
-      }
-    });
-  }
+	/**
+	 * Creates Window instance (if needed) to show be shown.
+	 */
+	private static Window prepareWindow(final Component component, final Rectangle clientArea)
+			throws Exception {
+		return SwingUtils.runObjectLaterAndWait(new RunnableObjectEx<Window>() {
+			public Window runObject() throws Exception {
+				final Window window;
+				if (component instanceof Window) {
+					window = (Window) component;
+				} else {
+					JFrame frame = new JFrame();
+					window = frame;
+					// add component on frame
+					component.setPreferredSize(component.getSize());
+					frame.getContentPane().add(component, BorderLayout.CENTER);
+					// configure frame
+					frame.setTitle(ModelMessages.SwingTopBoundsSupport_wrapperTitle);
+					frame.pack();
+				}
+				// set window location
+				{
+					int x = clientArea.x + (clientArea.width - window.getWidth()) / 2;
+					int y = clientArea.y + (clientArea.height - window.getHeight()) / 2;
+					window.setLocation(x, y);
+				}
+				// configure special windows
+				{
+					if (window instanceof Dialog) {
+						((Dialog) window).setModal(false);
+					}
+					if (window instanceof JFrame) {
+						((JFrame) window).setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
+					}
+				}
+				return window;
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Changes {@link Dimension} argument of given method.
-   *
-   * @return <code>true</code> if method was found and change done.
-   */
-  protected final boolean setSizeDimension(String methodName, int width, int height)
-      throws Exception {
-    MethodInvocation invocation =
-        m_component.getMethodInvocation(methodName + "(java.awt.Dimension)");
-    if (invocation != null) {
-      AstEditor editor = m_component.getEditor();
-      Expression dimensionExpression = (Expression) invocation.arguments().get(0);
-      editor.replaceExpression(dimensionExpression, "new java.awt.Dimension("
-          + width
-          + ", "
-          + height
-          + ")");
-      return true;
-    }
-    // not found
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Changes {@link Dimension} argument of given method.
+	 *
+	 * @return <code>true</code> if method was found and change done.
+	 */
+	protected final boolean setSizeDimension(String methodName, int width, int height)
+			throws Exception {
+		MethodInvocation invocation =
+				m_component.getMethodInvocation(methodName + "(java.awt.Dimension)");
+		if (invocation != null) {
+			AstEditor editor = m_component.getEditor();
+			Expression dimensionExpression = (Expression) invocation.arguments().get(0);
+			editor.replaceExpression(dimensionExpression, "new java.awt.Dimension("
+					+ width
+					+ ", "
+					+ height
+					+ ")");
+			return true;
+		}
+		// not found
+		return false;
+	}
 
-  /**
-   * Changes <code>int</code> arguments of given method.
-   *
-   * @return <code>true</code> if method was found and change done.
-   */
-  private boolean setSizeInts(String methodSignature,
-      int widthIndex,
-      int heightIndex,
-      int width,
-      int height) throws Exception {
-    MethodInvocation invocation = m_component.getMethodInvocation(methodSignature);
-    if (invocation != null) {
-      AstEditor editor = m_component.getEditor();
-      editor.replaceExpression(
-          (Expression) invocation.arguments().get(widthIndex),
-          Integer.toString(width));
-      editor.replaceExpression(
-          (Expression) invocation.arguments().get(heightIndex),
-          Integer.toString(height));
-      return true;
-    }
-    // not found
-    return false;
-  }
+	/**
+	 * Changes <code>int</code> arguments of given method.
+	 *
+	 * @return <code>true</code> if method was found and change done.
+	 */
+	private boolean setSizeInts(String methodSignature,
+			int widthIndex,
+			int heightIndex,
+			int width,
+			int height) throws Exception {
+		MethodInvocation invocation = m_component.getMethodInvocation(methodSignature);
+		if (invocation != null) {
+			AstEditor editor = m_component.getEditor();
+			editor.replaceExpression(
+					(Expression) invocation.arguments().get(widthIndex),
+					Integer.toString(width));
+			editor.replaceExpression(
+					(Expression) invocation.arguments().get(heightIndex),
+					Integer.toString(height));
+			return true;
+		}
+		// not found
+		return false;
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/top/WindowTopBoundsSupport.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/top/WindowTopBoundsSupport.java
index 0686f39f5..f91facace 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/top/WindowTopBoundsSupport.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/component/top/WindowTopBoundsSupport.java
@@ -27,45 +27,45 @@
  * @coverage swing.model.top
  */
 public final class WindowTopBoundsSupport extends SwingTopBoundsSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public WindowTopBoundsSupport(ContainerInfo container) {
-    super(container);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public WindowTopBoundsSupport(ContainerInfo container) {
+		super(container);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // TopBoundsSupport
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void apply() throws Exception {
-    try {
-      // check for: pack()
-      if (JavaInfoUtils.hasTrueParameter(m_component, "topBounds.pack")
-          || hasMethodInvocations(new String[]{"pack()"})) {
-        ((Window) m_component.getObject()).pack();
-        return;
-      }
-      // continue in "super"
-      super.apply();
-    } finally {
-      // Force peer's creating.
-      // We need this to force resize/layout for children containers/components.
-      if (m_component.getObject() instanceof Window) {
-        Window window = (Window) m_component.getObject();
-        // bug/feature in MacOSX Java5 (at least in build 1.5.0_16-b06-284):
-        // if the window is not valid and has no peer, making it visible leads to
-        // invalid insets (0x80000000) returned by peer's native window.
-        // the workaround it to create peer by invoking 'addNotify()' method.
-        if (!window.isDisplayable()) {
-          window.addNotify();
-        }
-        window.validate();
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// TopBoundsSupport
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void apply() throws Exception {
+		try {
+			// check for: pack()
+			if (JavaInfoUtils.hasTrueParameter(m_component, "topBounds.pack")
+					|| hasMethodInvocations(new String[]{"pack()"})) {
+				((Window) m_component.getObject()).pack();
+				return;
+			}
+			// continue in "super"
+			super.apply();
+		} finally {
+			// Force peer's creating.
+			// We need this to force resize/layout for children containers/components.
+			if (m_component.getObject() instanceof Window) {
+				Window window = (Window) m_component.getObject();
+				// bug/feature in MacOSX Java5 (at least in build 1.5.0_16-b06-284):
+				// if the window is not valid and has no peer, making it visible leads to
+				// invalid insets (0x80000000) returned by peer's native window.
+				// the workaround it to create peer by invoking 'addNotify()' method.
+				if (!window.isDisplayable()) {
+					window.addNotify();
+				}
+				window.validate();
+			}
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/BorderLayoutAssistantPage.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/BorderLayoutAssistantPage.java
index da3df5c51..d23296fae 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/BorderLayoutAssistantPage.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/BorderLayoutAssistantPage.java
@@ -25,15 +25,15 @@
  * @coverage swing.assistant
  */
 public final class BorderLayoutAssistantPage extends AbstractAssistantPage {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public BorderLayoutAssistantPage(Composite parent, Object selection) {
-    super(parent, selection);
-    GridLayoutFactory.create(this).columns(2);
-    addIntegerProperty(this, "hgap", ModelMessages.BorderLayoutAssistantPage_horizontalGap);
-    addIntegerProperty(this, "vgap", ModelMessages.BorderLayoutAssistantPage_verticalGap);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public BorderLayoutAssistantPage(Composite parent, Object selection) {
+		super(parent, selection);
+		GridLayoutFactory.create(this).columns(2);
+		addIntegerProperty(this, "hgap", ModelMessages.BorderLayoutAssistantPage_horizontalGap);
+		addIntegerProperty(this, "vgap", ModelMessages.BorderLayoutAssistantPage_verticalGap);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/BorderLayoutInfo.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/BorderLayoutInfo.java
index 88ddacd2f..9b34a5772 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/BorderLayoutInfo.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/BorderLayoutInfo.java
@@ -45,210 +45,210 @@
  * @coverage swing.model.layout
  */
 public final class BorderLayoutInfo extends LayoutInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public BorderLayoutInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Initialize
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void initialize() throws Exception {
-    super.initialize();
-    addBroadcastListener(new JavaInfoAddProperties() {
-      public void invoke(JavaInfo javaInfo, List<Property> properties) throws Exception {
-        if (isManagedObject(javaInfo)) {
-          ComponentInfo component = (ComponentInfo) javaInfo;
-          BorderLayoutInfo key = BorderLayoutInfo.this;
-          Property constraintsProperty = (Property) component.getArbitraryValue(key);
-          if (constraintsProperty == null) {
-            constraintsProperty = new ConstraintsProperty(component);
-            component.putArbitraryValue(key, constraintsProperty);
-          }
-          properties.add(constraintsProperty);
-        }
-      }
-    });
-    new LayoutAssistantSupport(this) {
-      @Override
-      protected AbstractAssistantPage createLayoutPage(Composite parent) {
-        return new BorderLayoutAssistantPage(parent, m_layout);
-      }
-    };
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link Component} with given constraints.
-   */
-  public Component getComponent(String constraints) {
-    return (Component) ReflectionUtils.invokeMethodEx(
-        getObject(),
-        "getChild(java.lang.String,boolean)",
-        constraints,
-        true);
-  }
-
-  /**
-   * @return the region which has no {@link Component}, may be <code>null</code> if all regions are
-   *         filled.
-   */
-  public String getEmptyRegion() {
-    for (String region : CONSTRAINTS_VALUES) {
-      if (getComponent(region) == null) {
-        return region;
-      }
-    }
-    return null;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds new {@link ComponentInfo} to given region.
-   */
-  public void command_CREATE(ComponentInfo component, String region) throws Exception {
-    command_CREATE(component, region, null);
-  }
-
-  /**
-   * Adds new {@link ComponentInfo} to given region.
-   */
-  public void command_CREATE(ComponentInfo component, String region, ComponentInfo nextComponent)
-      throws Exception {
-    String constraintsSource = getConstraintsSourceOfRegion(region);
-    add(component, constraintsSource, nextComponent);
-  }
-
-  /**
-   * Moves {@link ComponentInfo} to this {@link ContainerInfo} and given region.
-   */
-  public void command_MOVE(ComponentInfo component, String region) throws Exception {
-    if (component.getParent() != getContainer()) {
-      command_MOVE(component, (ComponentInfo) null);
-    }
-    command_REGION(component, region);
-  }
-
-  /**
-   * Moves {@link ComponentInfo} inside of this {@link ContainerInfo}, without changing region.
-   */
-  public void command_MOVE(ComponentInfo component, ComponentInfo nextComponent) throws Exception {
-    move(component, null, nextComponent);
-  }
-
-  /**
-   * Moves {@link ComponentInfo} to this {@link ContainerInfo} and given region.
-   */
-  public void command_REGION(ComponentInfo component, String region) throws Exception {
-    AstEditor editor = getEditor();
-    Association association = component.getAssociation();
-    MethodInvocation invocation = ((InvocationChildAssociation) association).getInvocation();
-    List<Expression> arguments = DomGenerics.arguments(invocation);
-    String constraintsSource = getConstraintsSourceOfRegion(region);
-    if (arguments.size() == 2) {
-      editor.replaceExpression(arguments.get(1), constraintsSource);
-    } else if (invocation.arguments().size() == 1) {
-      editor.addInvocationArgument(invocation, 1, constraintsSource);
-    }
-  }
-
-  private static String getConstraintsSourceOfRegion(String region) {
-    if (region == null) {
-      return null;
-    }
-    return "java.awt.BorderLayout." + region.toUpperCase(Locale.ENGLISH);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // "Constraints" property
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final String[] CONSTRAINTS_TITLES = {"North", "South", "West", "East", "Center"};
-  private static final String[] CONSTRAINTS_FIELDS = {"NORTH", "SOUTH", "WEST", "EAST", "CENTER"};
-  private static final String[] CONSTRAINTS_VALUES = {
-      BorderLayout.NORTH,
-      BorderLayout.SOUTH,
-      BorderLayout.WEST,
-      BorderLayout.EAST,
-      BorderLayout.CENTER};
-  private static final PropertyEditor m_constraintsPropertyEditor =
-      new StringComboPropertyEditor(CONSTRAINTS_TITLES);
-
-  /**
-   * {@link Property} for modifying region of {@link ComponentInfo} on this {@link BorderLayoutInfo}
-   * .
-   */
-  private final class ConstraintsProperty extends Property {
-    private final ComponentInfo m_component;
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public ConstraintsProperty(ComponentInfo component) {
-      super(m_constraintsPropertyEditor);
-      m_component = component;
-      setCategory(PropertyCategory.system(6));
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Property
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public String getTitle() {
-      return "Constraints";
-    }
-
-    @Override
-    public Object getValue() throws Exception {
-      Object constraints = ((BorderLayout) getObject()).getConstraints(m_component.getComponent());
-      for (int i = 0; i < CONSTRAINTS_VALUES.length; i++) {
-        String constraintsValue = CONSTRAINTS_VALUES[i];
-        if (constraintsValue.equals(constraints)) {
-          return CONSTRAINTS_TITLES[i];
-        }
-      }
-      return "";
-    }
-
-    @Override
-    public boolean isModified() throws Exception {
-      return true;
-    }
-
-    @Override
-    public void setValue(final Object value) throws Exception {
-      ExecutionUtils.run(m_component, new RunnableEx() {
-        public void run() throws Exception {
-          for (int i = 0; i < CONSTRAINTS_TITLES.length; i++) {
-            String constraintsTitle = CONSTRAINTS_TITLES[i];
-            if (constraintsTitle.equals(value)) {
-              command_REGION(m_component, CONSTRAINTS_FIELDS[i]);
-            }
-          }
-        }
-      });
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public BorderLayoutInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Initialize
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void initialize() throws Exception {
+		super.initialize();
+		addBroadcastListener(new JavaInfoAddProperties() {
+			public void invoke(JavaInfo javaInfo, List<Property> properties) throws Exception {
+				if (isManagedObject(javaInfo)) {
+					ComponentInfo component = (ComponentInfo) javaInfo;
+					BorderLayoutInfo key = BorderLayoutInfo.this;
+					Property constraintsProperty = (Property) component.getArbitraryValue(key);
+					if (constraintsProperty == null) {
+						constraintsProperty = new ConstraintsProperty(component);
+						component.putArbitraryValue(key, constraintsProperty);
+					}
+					properties.add(constraintsProperty);
+				}
+			}
+		});
+		new LayoutAssistantSupport(this) {
+			@Override
+			protected AbstractAssistantPage createLayoutPage(Composite parent) {
+				return new BorderLayoutAssistantPage(parent, m_layout);
+			}
+		};
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link Component} with given constraints.
+	 */
+	public Component getComponent(String constraints) {
+		return (Component) ReflectionUtils.invokeMethodEx(
+				getObject(),
+				"getChild(java.lang.String,boolean)",
+				constraints,
+				true);
+	}
+
+	/**
+	 * @return the region which has no {@link Component}, may be <code>null</code> if all regions are
+	 *         filled.
+	 */
+	public String getEmptyRegion() {
+		for (String region : CONSTRAINTS_VALUES) {
+			if (getComponent(region) == null) {
+				return region;
+			}
+		}
+		return null;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds new {@link ComponentInfo} to given region.
+	 */
+	public void command_CREATE(ComponentInfo component, String region) throws Exception {
+		command_CREATE(component, region, null);
+	}
+
+	/**
+	 * Adds new {@link ComponentInfo} to given region.
+	 */
+	public void command_CREATE(ComponentInfo component, String region, ComponentInfo nextComponent)
+			throws Exception {
+		String constraintsSource = getConstraintsSourceOfRegion(region);
+		add(component, constraintsSource, nextComponent);
+	}
+
+	/**
+	 * Moves {@link ComponentInfo} to this {@link ContainerInfo} and given region.
+	 */
+	public void command_MOVE(ComponentInfo component, String region) throws Exception {
+		if (component.getParent() != getContainer()) {
+			command_MOVE(component, (ComponentInfo) null);
+		}
+		command_REGION(component, region);
+	}
+
+	/**
+	 * Moves {@link ComponentInfo} inside of this {@link ContainerInfo}, without changing region.
+	 */
+	public void command_MOVE(ComponentInfo component, ComponentInfo nextComponent) throws Exception {
+		move(component, null, nextComponent);
+	}
+
+	/**
+	 * Moves {@link ComponentInfo} to this {@link ContainerInfo} and given region.
+	 */
+	public void command_REGION(ComponentInfo component, String region) throws Exception {
+		AstEditor editor = getEditor();
+		Association association = component.getAssociation();
+		MethodInvocation invocation = ((InvocationChildAssociation) association).getInvocation();
+		List<Expression> arguments = DomGenerics.arguments(invocation);
+		String constraintsSource = getConstraintsSourceOfRegion(region);
+		if (arguments.size() == 2) {
+			editor.replaceExpression(arguments.get(1), constraintsSource);
+		} else if (invocation.arguments().size() == 1) {
+			editor.addInvocationArgument(invocation, 1, constraintsSource);
+		}
+	}
+
+	private static String getConstraintsSourceOfRegion(String region) {
+		if (region == null) {
+			return null;
+		}
+		return "java.awt.BorderLayout." + region.toUpperCase(Locale.ENGLISH);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// "Constraints" property
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final String[] CONSTRAINTS_TITLES = {"North", "South", "West", "East", "Center"};
+	private static final String[] CONSTRAINTS_FIELDS = {"NORTH", "SOUTH", "WEST", "EAST", "CENTER"};
+	private static final String[] CONSTRAINTS_VALUES = {
+			BorderLayout.NORTH,
+			BorderLayout.SOUTH,
+			BorderLayout.WEST,
+			BorderLayout.EAST,
+			BorderLayout.CENTER};
+	private static final PropertyEditor m_constraintsPropertyEditor =
+			new StringComboPropertyEditor(CONSTRAINTS_TITLES);
+
+	/**
+	 * {@link Property} for modifying region of {@link ComponentInfo} on this {@link BorderLayoutInfo}
+	 * .
+	 */
+	private final class ConstraintsProperty extends Property {
+		private final ComponentInfo m_component;
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public ConstraintsProperty(ComponentInfo component) {
+			super(m_constraintsPropertyEditor);
+			m_component = component;
+			setCategory(PropertyCategory.system(6));
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Property
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public String getTitle() {
+			return "Constraints";
+		}
+
+		@Override
+		public Object getValue() throws Exception {
+			Object constraints = ((BorderLayout) getObject()).getConstraints(m_component.getComponent());
+			for (int i = 0; i < CONSTRAINTS_VALUES.length; i++) {
+				String constraintsValue = CONSTRAINTS_VALUES[i];
+				if (constraintsValue.equals(constraints)) {
+					return CONSTRAINTS_TITLES[i];
+				}
+			}
+			return "";
+		}
+
+		@Override
+		public boolean isModified() throws Exception {
+			return true;
+		}
+
+		@Override
+		public void setValue(final Object value) throws Exception {
+			ExecutionUtils.run(m_component, new RunnableEx() {
+				public void run() throws Exception {
+					for (int i = 0; i < CONSTRAINTS_TITLES.length; i++) {
+						String constraintsTitle = CONSTRAINTS_TITLES[i];
+						if (constraintsTitle.equals(value)) {
+							command_REGION(m_component, CONSTRAINTS_FIELDS[i]);
+						}
+					}
+				}
+			});
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/BoxLayoutInfo.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/BoxLayoutInfo.java
index 22c6f6aa5..60625ab47 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/BoxLayoutInfo.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/BoxLayoutInfo.java
@@ -39,107 +39,107 @@
  * @coverage swing.model.layout
  */
 public final class BoxLayoutInfo extends GenericFlowLayoutInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public BoxLayoutInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public BoxLayoutInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if this {@link BoxLayoutInfo} lays out {@link Component}'s
-   *         horizontally.
-   */
-  public boolean isHorizontal() {
-    BoxLayout layout = (BoxLayout) getObject();
-    int axis = ReflectionUtils.getFieldInt(layout, "axis");
-    return axis == BoxLayout.X_AXIS || axis == BoxLayout.LINE_AXIS;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if this {@link BoxLayoutInfo} lays out {@link Component}'s
+	 *         horizontally.
+	 */
+	public boolean isHorizontal() {
+		BoxLayout layout = (BoxLayout) getObject();
+		int axis = ReflectionUtils.getFieldInt(layout, "axis");
+		return axis == BoxLayout.X_AXIS || axis == BoxLayout.LINE_AXIS;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Initialize
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void initialize() throws Exception {
-    super.initialize();
-    // add "Alignment" property for children JComponent's
-    addBroadcastListener(new JavaInfoAddProperties() {
-      public void invoke(JavaInfo javaInfo, List<Property> properties) throws Exception {
-        if (javaInfo instanceof ComponentInfo
-            && javaInfo.getParent() == getContainer()
-            && JComponent.class.isAssignableFrom(javaInfo.getDescription().getComponentClass())) {
-          ComponentInfo component = (ComponentInfo) javaInfo;
-          Property alignmentProperty = addAlignmentProperty(component, properties);
-          properties.add(alignmentProperty);
-        }
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Initialize
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void initialize() throws Exception {
+		super.initialize();
+		// add "Alignment" property for children JComponent's
+		addBroadcastListener(new JavaInfoAddProperties() {
+			public void invoke(JavaInfo javaInfo, List<Property> properties) throws Exception {
+				if (javaInfo instanceof ComponentInfo
+						&& javaInfo.getParent() == getContainer()
+						&& JComponent.class.isAssignableFrom(javaInfo.getDescription().getComponentClass())) {
+					ComponentInfo component = (ComponentInfo) javaInfo;
+					Property alignmentProperty = addAlignmentProperty(component, properties);
+					properties.add(alignmentProperty);
+				}
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Properties
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final Map<ComponentInfo, Property> m_alignmentProperties = Maps.newHashMap();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Properties
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final Map<ComponentInfo, Property> m_alignmentProperties = Maps.newHashMap();
 
-  /**
-   * @return the composite "Alignment" property constructed from given {@link Property}'s.
-   */
-  private Property addAlignmentProperty(ComponentInfo component, List<Property> properties)
-      throws Exception {
-    Property property = m_alignmentProperties.get(component);
-    if (property == null) {
-      ComplexProperty alignmentProperty = new ComplexProperty("Alignment", "(X/Y alignments)");
-      alignmentProperty.setModified(true);
-      alignmentProperty.setCategory(PropertyCategory.system(6));
-      // add sub-properties
-      Property alignmentX = getAlignmentSubProperty(properties, "alignmentX");
-      Property alignmentY = getAlignmentSubProperty(properties, "alignmentY");
-      alignmentProperty.setProperties(new Property[]{alignmentX, alignmentY});
-      // remember
-      m_alignmentProperties.put(component, alignmentProperty);
-      property = alignmentProperty;
-    }
-    return property;
-  }
+	/**
+	 * @return the composite "Alignment" property constructed from given {@link Property}'s.
+	 */
+	private Property addAlignmentProperty(ComponentInfo component, List<Property> properties)
+			throws Exception {
+		Property property = m_alignmentProperties.get(component);
+		if (property == null) {
+			ComplexProperty alignmentProperty = new ComplexProperty("Alignment", "(X/Y alignments)");
+			alignmentProperty.setModified(true);
+			alignmentProperty.setCategory(PropertyCategory.system(6));
+			// add sub-properties
+			Property alignmentX = getAlignmentSubProperty(properties, "alignmentX");
+			Property alignmentY = getAlignmentSubProperty(properties, "alignmentY");
+			alignmentProperty.setProperties(new Property[]{alignmentX, alignmentY});
+			// remember
+			m_alignmentProperties.put(component, alignmentProperty);
+			property = alignmentProperty;
+		}
+		return property;
+	}
 
-  /**
-   * @return the non-advanced copy of {@link GenericPropertyImpl} with given title.
-   */
-  private static Property getAlignmentSubProperty(List<Property> properties, String title)
-      throws Exception {
-    GenericPropertyImpl alignmentSubProperty = null;
-    for (Property property : properties) {
-      if (property instanceof GenericPropertyImpl && property.getTitle().equals(title)) {
-        GenericPropertyImpl genericProperty = (GenericPropertyImpl) property;
-        alignmentSubProperty = new GenericPropertyImpl(genericProperty, property.getTitle());
-        alignmentSubProperty.setCategory(PropertyCategory.NORMAL);
-        break;
-      }
-    }
-    Assert.isNotNull(alignmentSubProperty);
-    return alignmentSubProperty;
-  }
+	/**
+	 * @return the non-advanced copy of {@link GenericPropertyImpl} with given title.
+	 */
+	private static Property getAlignmentSubProperty(List<Property> properties, String title)
+			throws Exception {
+		GenericPropertyImpl alignmentSubProperty = null;
+		for (Property property : properties) {
+			if (property instanceof GenericPropertyImpl && property.getTitle().equals(title)) {
+				GenericPropertyImpl genericProperty = (GenericPropertyImpl) property;
+				alignmentSubProperty = new GenericPropertyImpl(genericProperty, property.getTitle());
+				alignmentSubProperty.setCategory(PropertyCategory.NORMAL);
+				break;
+			}
+		}
+		Assert.isNotNull(alignmentSubProperty);
+		return alignmentSubProperty;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Manage general layout data.
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void storeLayoutData(ComponentInfo component) throws Exception {
-    storeLayoutDataDefault(component);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Manage general layout data.
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void storeLayoutData(ComponentInfo component) throws Exception {
+		storeLayoutDataDefault(component);
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/BoxSupport.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/BoxSupport.java
index 5f27f330d..7ce20e265 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/BoxSupport.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/BoxSupport.java
@@ -26,15 +26,15 @@
  * @coverage swing.model.layout
  */
 public final class BoxSupport {
-  /**
-   * Sets size for {@link Box#createHorizontalStrut(int)}, {@link Box#createVerticalStrut(int)} or
-   * {@link Box#createRigidArea(java.awt.Dimension)}.
-   */
-  public static void setStrutSize(ComponentInfo strut, String source) throws Exception {
-    StaticFactoryCreationSupport factoryCreationSupport =
-        (StaticFactoryCreationSupport) strut.getCreationSupport();
-    MethodInvocation factoryInvocation = factoryCreationSupport.getInvocation();
-    Expression oldExpression = DomGenerics.arguments(factoryInvocation).get(0);
-    strut.getEditor().replaceExpression(oldExpression, source);
-  }
+	/**
+	 * Sets size for {@link Box#createHorizontalStrut(int)}, {@link Box#createVerticalStrut(int)} or
+	 * {@link Box#createRigidArea(java.awt.Dimension)}.
+	 */
+	public static void setStrutSize(ComponentInfo strut, String source) throws Exception {
+		StaticFactoryCreationSupport factoryCreationSupport =
+				(StaticFactoryCreationSupport) strut.getCreationSupport();
+		MethodInvocation factoryInvocation = factoryCreationSupport.getInvocation();
+		Expression oldExpression = DomGenerics.arguments(factoryInvocation).get(0);
+		strut.getEditor().replaceExpression(oldExpression, source);
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/CardLayoutAssistantPage.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/CardLayoutAssistantPage.java
index 98ba10c7f..b5b329daf 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/CardLayoutAssistantPage.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/CardLayoutAssistantPage.java
@@ -25,15 +25,15 @@
  * @coverage swing.assistant
  */
 public final class CardLayoutAssistantPage extends AbstractAssistantPage {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CardLayoutAssistantPage(Composite parent, Object selection) {
-    super(parent, selection);
-    GridLayoutFactory.create(this).columns(2);
-    addIntegerProperty(this, "hgap", ModelMessages.CardLayoutAssistantPage_horizontalGap);
-    addIntegerProperty(this, "vgap", ModelMessages.CardLayoutAssistantPage_verticalGap);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CardLayoutAssistantPage(Composite parent, Object selection) {
+		super(parent, selection);
+		GridLayoutFactory.create(this).columns(2);
+		addIntegerProperty(this, "hgap", ModelMessages.CardLayoutAssistantPage_horizontalGap);
+		addIntegerProperty(this, "vgap", ModelMessages.CardLayoutAssistantPage_verticalGap);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/CardLayoutInfo.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/CardLayoutInfo.java
index 2c5fdd7fb..16e21411b 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/CardLayoutInfo.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/CardLayoutInfo.java
@@ -37,162 +37,162 @@
  * @coverage swing.model.layout
  */
 public final class CardLayoutInfo extends LayoutInfo {
-  private final StackContainerSupport<ComponentInfo> m_stackContainer =
-      new StackContainerSupport<ComponentInfo>(this) {
-        @Override
-        protected boolean isActive() {
-          return CardLayoutInfo.this.isActive();
-        }
-
-        @Override
-        protected ObjectInfo getContainer() {
-          return CardLayoutInfo.this.getContainer();
-        }
-
-        @Override
-        protected List<ComponentInfo> getChildren() {
-          return getComponents();
-        }
-      };
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CardLayoutInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // CardLayout
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the AWT {@link CardLayout} object for this model.
-   */
-  private CardLayout getLayout() {
-    return (CardLayout) getObject();
-  }
-
-  public ComponentInfo getCurrentComponent() {
-    return m_stackContainer.getActive();
-  }
-
-  public ComponentInfo getPrevComponent() {
-    return m_stackContainer.getPrev();
-  }
-
-  public ComponentInfo getNextComponent() {
-    return m_stackContainer.getNext();
-  }
-
-  /**
-   * Shows {@link ComponentInfo}, performs "refresh".
-   */
-  public void show(ComponentInfo component) {
-    m_stackContainer.setActive(component);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Events
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void initialize() throws Exception {
-    super.initialize();
-    addBroadcastListener(new ObjectInfoChildGraphical() {
-      public void invoke(ObjectInfo object, boolean[] visible) throws Exception {
-        // show only current component on design canvas
-        if (isManagedObject(object)) {
-          ComponentInfo component = (ComponentInfo) object;
-          if (isManagedObject(component) && component != getCurrentComponent()) {
-            visible[0] = false;
-          }
-        }
-      }
-    });
-    new LayoutAssistantSupport(this) {
-      @Override
-      protected AbstractAssistantPage createLayoutPage(Composite parent) {
-        return new CardLayoutAssistantPage(parent, m_layout);
-      }
-    };
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void refresh_afterCreate() throws Exception {
-    super.refresh_afterCreate();
-    ComponentInfo currentComponent = getCurrentComponent();
-    if (currentComponent != null) {
-      // prepare swing objects
-      CardLayout layout = getLayout();
-      Component component = currentComponent.getComponent();
-      Container container = component.getParent();
-      // show current component
-      while (!component.isVisible()) {
-        layout.next(container);
-      }
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Conversion
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void onSet() throws Exception {
-    for (ComponentInfo component : getContainer().getChildrenComponents()) {
-      Association association = component.getAssociation();
-      if (association instanceof InvocationAssociation) {
-        MethodInvocation invocation = ((InvocationAssociation) association).getInvocation();
-        if (invocation.arguments().size() == 1) {
-          getEditor().addInvocationArgument(invocation, 1, getComponentConstraints());
-        }
-      }
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds {@link ComponentInfo} to this {@link ContainerInfo}.
-   */
-  public void command_CREATE(ComponentInfo component, ComponentInfo nextComponent) throws Exception {
-    add(component, getComponentConstraints(), nextComponent);
-  }
-
-  /**
-   * Moves {@link ComponentInfo} to this {@link ContainerInfo}.
-   */
-  public void command_MOVE(ComponentInfo component, ComponentInfo nextComponent) throws Exception {
-    move(component, getComponentConstraints(), nextComponent);
-  }
-
-  /**
-   * @return unique source of name for {@link CardLayout} constraints.
-   */
-  private static final String getComponentConstraints() {
-    return '"' + getUniqueString() + '"';
-  }
-
-  /**
-   * @return the unique {@link String} to use as name.
-   */
-  private static String getUniqueString() {
-    return "name_" + System.nanoTime();
-  }
+	private final StackContainerSupport<ComponentInfo> m_stackContainer =
+			new StackContainerSupport<ComponentInfo>(this) {
+		@Override
+		protected boolean isActive() {
+			return CardLayoutInfo.this.isActive();
+		}
+
+		@Override
+		protected ObjectInfo getContainer() {
+			return CardLayoutInfo.this.getContainer();
+		}
+
+		@Override
+		protected List<ComponentInfo> getChildren() {
+			return getComponents();
+		}
+	};
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CardLayoutInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// CardLayout
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the AWT {@link CardLayout} object for this model.
+	 */
+	private CardLayout getLayout() {
+		return (CardLayout) getObject();
+	}
+
+	public ComponentInfo getCurrentComponent() {
+		return m_stackContainer.getActive();
+	}
+
+	public ComponentInfo getPrevComponent() {
+		return m_stackContainer.getPrev();
+	}
+
+	public ComponentInfo getNextComponent() {
+		return m_stackContainer.getNext();
+	}
+
+	/**
+	 * Shows {@link ComponentInfo}, performs "refresh".
+	 */
+	public void show(ComponentInfo component) {
+		m_stackContainer.setActive(component);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Events
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void initialize() throws Exception {
+		super.initialize();
+		addBroadcastListener(new ObjectInfoChildGraphical() {
+			public void invoke(ObjectInfo object, boolean[] visible) throws Exception {
+				// show only current component on design canvas
+				if (isManagedObject(object)) {
+					ComponentInfo component = (ComponentInfo) object;
+					if (isManagedObject(component) && component != getCurrentComponent()) {
+						visible[0] = false;
+					}
+				}
+			}
+		});
+		new LayoutAssistantSupport(this) {
+			@Override
+			protected AbstractAssistantPage createLayoutPage(Composite parent) {
+				return new CardLayoutAssistantPage(parent, m_layout);
+			}
+		};
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void refresh_afterCreate() throws Exception {
+		super.refresh_afterCreate();
+		ComponentInfo currentComponent = getCurrentComponent();
+		if (currentComponent != null) {
+			// prepare swing objects
+			CardLayout layout = getLayout();
+			Component component = currentComponent.getComponent();
+			Container container = component.getParent();
+			// show current component
+			while (!component.isVisible()) {
+				layout.next(container);
+			}
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Conversion
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void onSet() throws Exception {
+		for (ComponentInfo component : getContainer().getChildrenComponents()) {
+			Association association = component.getAssociation();
+			if (association instanceof InvocationAssociation) {
+				MethodInvocation invocation = ((InvocationAssociation) association).getInvocation();
+				if (invocation.arguments().size() == 1) {
+					getEditor().addInvocationArgument(invocation, 1, getComponentConstraints());
+				}
+			}
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds {@link ComponentInfo} to this {@link ContainerInfo}.
+	 */
+	public void command_CREATE(ComponentInfo component, ComponentInfo nextComponent) throws Exception {
+		add(component, getComponentConstraints(), nextComponent);
+	}
+
+	/**
+	 * Moves {@link ComponentInfo} to this {@link ContainerInfo}.
+	 */
+	public void command_MOVE(ComponentInfo component, ComponentInfo nextComponent) throws Exception {
+		move(component, getComponentConstraints(), nextComponent);
+	}
+
+	/**
+	 * @return unique source of name for {@link CardLayout} constraints.
+	 */
+	private static final String getComponentConstraints() {
+		return '"' + getUniqueString() + '"';
+	}
+
+	/**
+	 * @return the unique {@link String} to use as name.
+	 */
+	private static String getUniqueString() {
+		return "name_" + System.nanoTime();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/FlowLayoutAssistantPage.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/FlowLayoutAssistantPage.java
index b0debc422..6dc6e65ec 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/FlowLayoutAssistantPage.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/FlowLayoutAssistantPage.java
@@ -27,47 +27,47 @@
  * @coverage swing.assistant
  */
 public final class FlowLayoutAssistantPage extends AbstractAssistantPage {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FlowLayoutAssistantPage(Composite parent, Object selection) {
-    super(parent, selection);
-    GridLayoutFactory.create(this).columns(2);
-    // orientation
-    {
-      Group orientationGroup =
-          addChoiceProperty(
-              this,
-              "alignment",
-              ModelMessages.FlowLayoutAssistantPage_alignmentGroup,
-              new Object[][]{
-                  new Object[]{ModelMessages.FlowLayoutAssistantPage_alignmentLeft, FlowLayout.LEFT},
-                  new Object[]{
-                      ModelMessages.FlowLayoutAssistantPage_alignmentCenter,
-                      FlowLayout.CENTER},
-                  new Object[]{
-                      ModelMessages.FlowLayoutAssistantPage_alignmentRight,
-                      FlowLayout.RIGHT},
-                  new Object[]{
-                      ModelMessages.FlowLayoutAssistantPage_alignmentLeading,
-                      FlowLayout.LEADING},
-                  new Object[]{
-                      ModelMessages.FlowLayoutAssistantPage_alignmentTrailing,
-                      FlowLayout.TRAILING}});
-      GridDataFactory.create(orientationGroup).fillV();
-    }
-    //
-    {
-      Group gapGroup =
-          addIntegerProperties(
-              this,
-              ModelMessages.FlowLayoutAssistantPage_gapsGroup,
-              new String[][]{
-                  {"hgap", ModelMessages.FlowLayoutAssistantPage_gapHorizontal},
-                  {"vgap", ModelMessages.FlowLayoutAssistantPage_gapVertical}});
-      GridDataFactory.create(gapGroup).fillV();
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FlowLayoutAssistantPage(Composite parent, Object selection) {
+		super(parent, selection);
+		GridLayoutFactory.create(this).columns(2);
+		// orientation
+		{
+			Group orientationGroup =
+					addChoiceProperty(
+							this,
+							"alignment",
+							ModelMessages.FlowLayoutAssistantPage_alignmentGroup,
+							new Object[][]{
+								new Object[]{ModelMessages.FlowLayoutAssistantPage_alignmentLeft, FlowLayout.LEFT},
+								new Object[]{
+										ModelMessages.FlowLayoutAssistantPage_alignmentCenter,
+										FlowLayout.CENTER},
+								new Object[]{
+										ModelMessages.FlowLayoutAssistantPage_alignmentRight,
+										FlowLayout.RIGHT},
+								new Object[]{
+										ModelMessages.FlowLayoutAssistantPage_alignmentLeading,
+										FlowLayout.LEADING},
+								new Object[]{
+										ModelMessages.FlowLayoutAssistantPage_alignmentTrailing,
+										FlowLayout.TRAILING}});
+			GridDataFactory.create(orientationGroup).fillV();
+		}
+		//
+		{
+			Group gapGroup =
+					addIntegerProperties(
+							this,
+							ModelMessages.FlowLayoutAssistantPage_gapsGroup,
+							new String[][]{
+								{"hgap", ModelMessages.FlowLayoutAssistantPage_gapHorizontal},
+								{"vgap", ModelMessages.FlowLayoutAssistantPage_gapVertical}});
+			GridDataFactory.create(gapGroup).fillV();
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/FlowLayoutInfo.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/FlowLayoutInfo.java
index de6cb37c6..773f20707 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/FlowLayoutInfo.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/FlowLayoutInfo.java
@@ -26,30 +26,30 @@
  * @coverage swing.model.layout
  */
 public final class FlowLayoutInfo extends GenericFlowLayoutInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FlowLayoutInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FlowLayoutInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Initialize
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void initialize() throws Exception {
-    super.initialize();
-    new LayoutAssistantSupport(this) {
-      @Override
-      protected AbstractAssistantPage createLayoutPage(Composite parent) {
-        return new FlowLayoutAssistantPage(parent, m_layout);
-      }
-    };
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Initialize
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void initialize() throws Exception {
+		super.initialize();
+		new LayoutAssistantSupport(this) {
+			@Override
+			protected AbstractAssistantPage createLayoutPage(Composite parent) {
+				return new FlowLayoutAssistantPage(parent, m_layout);
+			}
+		};
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/GenericFlowLayoutInfo.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/GenericFlowLayoutInfo.java
index 43e1528b9..a9cad4646 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/GenericFlowLayoutInfo.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/GenericFlowLayoutInfo.java
@@ -28,54 +28,54 @@
  * @coverage swing.model.layout
  */
 public abstract class GenericFlowLayoutInfo extends LayoutInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public GenericFlowLayoutInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public GenericFlowLayoutInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds new {@link ComponentInfo}.
-   */
-  public final void add(ComponentInfo componentInfo, ComponentInfo nextComponentInfo)
-      throws Exception {
-    add(componentInfo, null, nextComponentInfo);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds new {@link ComponentInfo}.
+	 */
+	public final void add(ComponentInfo componentInfo, ComponentInfo nextComponentInfo)
+			throws Exception {
+		add(componentInfo, null, nextComponentInfo);
+	}
 
-  /**
-   * Moves given {@link ComponentInfo}.
-   */
-  public final void move(ComponentInfo componentInfo, ComponentInfo nextComponentInfo)
-      throws Exception {
-    move(componentInfo, null, nextComponentInfo);
-  }
+	/**
+	 * Moves given {@link ComponentInfo}.
+	 */
+	public final void move(ComponentInfo componentInfo, ComponentInfo nextComponentInfo)
+			throws Exception {
+		move(componentInfo, null, nextComponentInfo);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Clipboard
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void clipboardCopy_addComponentCommands(ComponentInfo component,
-      List<ClipboardCommand> commands) throws Exception {
-    super.clipboardCopy_addComponentCommands(component, commands);
-    commands.add(new LayoutClipboardCommand<GenericFlowLayoutInfo>(component) {
-      private static final long serialVersionUID = 0L;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Clipboard
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void clipboardCopy_addComponentCommands(ComponentInfo component,
+			List<ClipboardCommand> commands) throws Exception {
+		super.clipboardCopy_addComponentCommands(component, commands);
+		commands.add(new LayoutClipboardCommand<GenericFlowLayoutInfo>(component) {
+			private static final long serialVersionUID = 0L;
 
-      @Override
-      protected void add(GenericFlowLayoutInfo layout, ComponentInfo component) throws Exception {
-        layout.add(component, null);
-      }
-    });
-  }
+			@Override
+			protected void add(GenericFlowLayoutInfo layout, ComponentInfo component) throws Exception {
+				layout.add(component, null);
+			}
+		});
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/GenericFlowLayoutSurroundSupport.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/GenericFlowLayoutSurroundSupport.java
index 14feeb3db..7ec778bb3 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/GenericFlowLayoutSurroundSupport.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/GenericFlowLayoutSurroundSupport.java
@@ -25,39 +25,39 @@
  * @coverage swing.model.layout
  */
 public final class GenericFlowLayoutSurroundSupport extends LayoutSurroundSupport {
-  private final GenericFlowLayoutInfo m_layout;
+	private final GenericFlowLayoutInfo m_layout;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public GenericFlowLayoutSurroundSupport(GenericFlowLayoutInfo layout) {
-    super(layout);
-    m_layout = layout;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public GenericFlowLayoutSurroundSupport(GenericFlowLayoutInfo layout) {
+		super(layout);
+		m_layout = layout;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Operation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected boolean validateComponents(List<ComponentInfo> components) throws Exception {
-    // check that components are adjacent
-    {
-      List<ComponentInfo> allComponents = m_layout.getContainer().getChildrenComponents();
-      if (!GenericsUtils.areAdjacent(allComponents, components)) {
-        return false;
-      }
-    }
-    // continue
-    return super.validateComponents(components);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Operation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected boolean validateComponents(List<ComponentInfo> components) throws Exception {
+		// check that components are adjacent
+		{
+			List<ComponentInfo> allComponents = m_layout.getContainer().getChildrenComponents();
+			if (!GenericsUtils.areAdjacent(allComponents, components)) {
+				return false;
+			}
+		}
+		// continue
+		return super.validateComponents(components);
+	}
 
-  @Override
-  protected void addContainer(ContainerInfo container, List<ComponentInfo> components)
-      throws Exception {
-    m_layout.add(container, components.get(0));
-  }
+	@Override
+	protected void addContainer(ContainerInfo container, List<ComponentInfo> components)
+			throws Exception {
+		m_layout.add(container, components.get(0));
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/GridLayoutAssistantPage.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/GridLayoutAssistantPage.java
index a81c28b36..eb41046b9 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/GridLayoutAssistantPage.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/GridLayoutAssistantPage.java
@@ -25,17 +25,17 @@
  * @coverage swing.assistant
  */
 public final class GridLayoutAssistantPage extends AbstractAssistantPage {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public GridLayoutAssistantPage(Composite parent, Object selection) {
-    super(parent, selection);
-    GridLayoutFactory.create(this).columns(2);
-    addIntegerProperty(this, "rows", ModelMessages.GridLayoutAssistantPage_rowCount);
-    addIntegerProperty(this, "columns", ModelMessages.GridLayoutAssistantPage_columnCount);
-    addIntegerProperty(this, "hgap", ModelMessages.GridLayoutAssistantPage_horizontalGap);
-    addIntegerProperty(this, "vgap", ModelMessages.GridLayoutAssistantPage_verticalGap);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public GridLayoutAssistantPage(Composite parent, Object selection) {
+		super(parent, selection);
+		GridLayoutFactory.create(this).columns(2);
+		addIntegerProperty(this, "rows", ModelMessages.GridLayoutAssistantPage_rowCount);
+		addIntegerProperty(this, "columns", ModelMessages.GridLayoutAssistantPage_columnCount);
+		addIntegerProperty(this, "hgap", ModelMessages.GridLayoutAssistantPage_horizontalGap);
+		addIntegerProperty(this, "vgap", ModelMessages.GridLayoutAssistantPage_verticalGap);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/GridLayoutConverter.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/GridLayoutConverter.java
index 0c2e7ae2f..242baec72 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/GridLayoutConverter.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/GridLayoutConverter.java
@@ -35,255 +35,255 @@
  * @coverage swing.model.layout
  */
 public final class GridLayoutConverter extends AbstractGridConverter {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private GridLayoutConverter() {
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Conversion
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static void convert(final ContainerInfo container, final GridLayoutInfo layout)
-      throws Exception {
-    GridLayoutContainer gridContainer = new GridLayoutContainer(container);
-    GridLayoutInstance gridLayout = new GridLayoutInstance(gridContainer, layout);
-    convert(gridContainer, gridLayout);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Interfaces implementation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Implementation {@link IGridLayoutContainer}.
-   */
-  protected static class GridLayoutContainer implements IGridLayoutContainer {
-    private final ContainerInfo m_container;
-
-    GridLayoutContainer(ContainerInfo container) {
-      m_container = container;
-    }
-
-    public IAbstractComponentInfo getComponent() {
-      return m_container;
-    }
-
-    public ContainerInfo getContainer() {
-      return m_container;
-    }
-
-    public List<IAbstractComponentInfo> getControls() {
-      List<IAbstractComponentInfo> controls = Lists.newArrayList();
-      controls.addAll(m_container.getChildrenComponents());
-      return controls;
-    }
-
-    public List<ComponentInfo> getComponents() {
-      return m_container.getChildrenComponents();
-    }
-  }
-  /**
-   * Implementation {@link IGridLayoutInstance}.
-   */
-  protected static class GridLayoutInstance implements IGridLayoutInstance {
-    private final GridLayoutContainer m_container;
-    private final GridLayoutInfo m_layout;
-
-    GridLayoutInstance(GridLayoutContainer container, GridLayoutInfo layout) {
-      m_container = container;
-      m_layout = layout;
-    }
-
-    public IGridLayoutContainer getContainer() {
-      return m_container;
-    }
-
-    public GridLayoutContainer getContainerEx() {
-      return m_container;
-    }
-
-    private final Map<Object, GridLayoutData> m_layoutDatas = Maps.newHashMap();
-
-    public IGridLayoutData getLayoutData(IAbstractComponentInfo control) {
-      return getLayoutDataEx(control);
-    }
-
-    public GridLayoutData getLayoutDataEx(IAbstractComponentInfo control) {
-      GridLayoutData layoutData = m_layoutDatas.get(control);
-      if (layoutData == null) {
-        layoutData = new GridLayoutData(this, control);
-        m_layoutDatas.put(control, layoutData);
-      }
-      return layoutData;
-    }
-
-    public void setColumnCount(int value) throws Exception {
-      m_layout.getPropertyByTitle("rows").setValue(0);
-      m_layout.getPropertyByTitle("columns").setValue(value);
-    }
-
-    private int getColumnCount() throws Exception {
-      Object value = m_layout.getPropertyByTitle("columns").getValue();
-      return value == null || value == Property.UNKNOWN_VALUE ? 0 : (Integer) value;
-    }
-
-    public void applyChanges() throws Exception {
-      List<ComponentInfo> components = m_container.getComponents();
-      List<ComponentInfo> fillers = Lists.newArrayList();
-      int colCount = getColumnCount();
-      // calculate rows count
-      int rowCount;
-      if (colCount == 0) {
-        colCount = 1;
-        rowCount = components.size();
-      } else {
-        rowCount = (components.size() - 1) / colCount + 1;
-      }
-      for (ComponentInfo component : components) {
-        GridLayoutData layoutData = getLayoutDataEx(component);
-        if (layoutData != null) {
-          rowCount = Math.max(rowCount, layoutData.y + layoutData.h);
-        }
-      }
-      // fill cells by components & fillers
-      ComponentInfo gridCells[][] = new ComponentInfo[colCount][rowCount];
-      for (ComponentInfo component : components) {
-        GridLayoutData layoutData = getLayoutDataEx(component);
-        if (layoutData.x >= 0 && layoutData.y >= 0) {
-          // fill multi cells
-          for (int x = layoutData.x; x < layoutData.x + layoutData.w; x++) {
-            for (int y = layoutData.y; y < layoutData.y + layoutData.h; y++) {
-              if (x == layoutData.x && y == layoutData.y) {
-                // destination cell
-                ComponentInfo cell = gridCells[x][y];
-                if (cell == null || fillers.contains(cell)) {
-                  // place component
-                  gridCells[x][y] = component;
-                  fillers.remove(cell);
-                } else {
-                  // collision detected
-                  DesignerPlugin.log("swing.model.layout.GridLayout_Converter.convert(ContainerInfo, GridLayoutInfo) collision: in cell ("
-                      + x
-                      + ","
-                      + y
-                      + ")");
-                }
-              } else {
-                // add filler if empty
-                if (gridCells[x][y] == null) {
-                  // create filler
-                  ComponentInfo emptyLabel = createFiller();
-                  gridCells[x][y] = emptyLabel;
-                  fillers.add(emptyLabel);
-                }
-              }
-            }
-          }
-        }
-      }
-      // reorder components for correct flow
-      ContainerInfo parent = m_container.getContainer();
-      List<ComponentInfo> childrenComponents = parent.getChildrenComponents();
-      ComponentInfo referenceComponent =
-          childrenComponents.size() == 0 ? null : childrenComponents.get(0);
-      for (int y = 0; y < rowCount; y++) {
-        for (int x = 0; x < colCount; x++) {
-          ComponentInfo cell = gridCells[x][y];
-          if (cell == null) {
-            cell = createFiller();
-            fillers.add(cell);
-          }
-          if (cell.getParent() == parent) {
-            // move to new place
-            if (cell == referenceComponent) {
-              // skip current referenced
-              referenceComponent =
-                  GenericsUtils.getNextOrNull(parent.getChildrenComponents(), referenceComponent);
-            } else {
-              // move
-              m_layout.move(cell, referenceComponent);
-            }
-          } else {
-            // add to container
-            m_layout.add(cell, referenceComponent);
-          }
-          // clear text in filler label
-          if (fillers.contains(cell)) {
-            cell.getPropertyByTitle("text").setValue("");
-          }
-        }
-      }
-    }
-
-    private ComponentInfo createFiller() throws Exception {
-      ComponentInfo emptyLabel =
-          (ComponentInfo) JavaInfoUtils.createJavaInfo(
-              m_layout.getEditor(),
-              "javax.swing.JLabel",
-              new ConstructorCreationSupport());
-      return emptyLabel;
-    }
-  }
-  /**
-   * Implementation {@link IGridLayoutData}.
-   */
-  protected static class GridLayoutData implements IGridLayoutData {
-    private final GridLayoutInstance m_layout;
-    private final IAbstractComponentInfo m_control;
-    int x = -1;
-    int y = -1;
-    int w = 1;
-    int h = 1;
-
-    GridLayoutData(GridLayoutInstance layout, IAbstractComponentInfo control) {
-      m_layout = layout;
-      m_control = control;
-    }
-
-    public IAbstractComponentInfo getComponent() {
-      return m_control;
-    }
-
-    public IGridLayoutInstance getLayout() {
-      return m_layout;
-    }
-
-    public void setGridX(int value) throws Exception {
-      x = value;
-    }
-
-    public void setGridY(int value) throws Exception {
-      y = value;
-    }
-
-    public void setSpanX(int value) throws Exception {
-      w = value;
-    }
-
-    public void setSpanY(int value) throws Exception {
-      h = value;
-    }
-
-    public void setHorizontalGrab(boolean value) throws Exception {
-      // NONE
-    }
-
-    public void setVerticalGrab(boolean value) throws Exception {
-      // NONE
-    }
-
-    public void setHorizontalAlignment(HorizontalAlignment value) throws Exception {
-      // NONE
-    }
-
-    public void setVerticalAlignment(VerticalAlignment value) throws Exception {
-      // NONE
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private GridLayoutConverter() {
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Conversion
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static void convert(final ContainerInfo container, final GridLayoutInfo layout)
+			throws Exception {
+		GridLayoutContainer gridContainer = new GridLayoutContainer(container);
+		GridLayoutInstance gridLayout = new GridLayoutInstance(gridContainer, layout);
+		convert(gridContainer, gridLayout);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Interfaces implementation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Implementation {@link IGridLayoutContainer}.
+	 */
+	protected static class GridLayoutContainer implements IGridLayoutContainer {
+		private final ContainerInfo m_container;
+
+		GridLayoutContainer(ContainerInfo container) {
+			m_container = container;
+		}
+
+		public IAbstractComponentInfo getComponent() {
+			return m_container;
+		}
+
+		public ContainerInfo getContainer() {
+			return m_container;
+		}
+
+		public List<IAbstractComponentInfo> getControls() {
+			List<IAbstractComponentInfo> controls = Lists.newArrayList();
+			controls.addAll(m_container.getChildrenComponents());
+			return controls;
+		}
+
+		public List<ComponentInfo> getComponents() {
+			return m_container.getChildrenComponents();
+		}
+	}
+	/**
+	 * Implementation {@link IGridLayoutInstance}.
+	 */
+	protected static class GridLayoutInstance implements IGridLayoutInstance {
+		private final GridLayoutContainer m_container;
+		private final GridLayoutInfo m_layout;
+
+		GridLayoutInstance(GridLayoutContainer container, GridLayoutInfo layout) {
+			m_container = container;
+			m_layout = layout;
+		}
+
+		public IGridLayoutContainer getContainer() {
+			return m_container;
+		}
+
+		public GridLayoutContainer getContainerEx() {
+			return m_container;
+		}
+
+		private final Map<Object, GridLayoutData> m_layoutDatas = Maps.newHashMap();
+
+		public IGridLayoutData getLayoutData(IAbstractComponentInfo control) {
+			return getLayoutDataEx(control);
+		}
+
+		public GridLayoutData getLayoutDataEx(IAbstractComponentInfo control) {
+			GridLayoutData layoutData = m_layoutDatas.get(control);
+			if (layoutData == null) {
+				layoutData = new GridLayoutData(this, control);
+				m_layoutDatas.put(control, layoutData);
+			}
+			return layoutData;
+		}
+
+		public void setColumnCount(int value) throws Exception {
+			m_layout.getPropertyByTitle("rows").setValue(0);
+			m_layout.getPropertyByTitle("columns").setValue(value);
+		}
+
+		private int getColumnCount() throws Exception {
+			Object value = m_layout.getPropertyByTitle("columns").getValue();
+			return value == null || value == Property.UNKNOWN_VALUE ? 0 : (Integer) value;
+		}
+
+		public void applyChanges() throws Exception {
+			List<ComponentInfo> components = m_container.getComponents();
+			List<ComponentInfo> fillers = Lists.newArrayList();
+			int colCount = getColumnCount();
+			// calculate rows count
+			int rowCount;
+			if (colCount == 0) {
+				colCount = 1;
+				rowCount = components.size();
+			} else {
+				rowCount = (components.size() - 1) / colCount + 1;
+			}
+			for (ComponentInfo component : components) {
+				GridLayoutData layoutData = getLayoutDataEx(component);
+				if (layoutData != null) {
+					rowCount = Math.max(rowCount, layoutData.y + layoutData.h);
+				}
+			}
+			// fill cells by components & fillers
+			ComponentInfo gridCells[][] = new ComponentInfo[colCount][rowCount];
+			for (ComponentInfo component : components) {
+				GridLayoutData layoutData = getLayoutDataEx(component);
+				if (layoutData.x >= 0 && layoutData.y >= 0) {
+					// fill multi cells
+					for (int x = layoutData.x; x < layoutData.x + layoutData.w; x++) {
+						for (int y = layoutData.y; y < layoutData.y + layoutData.h; y++) {
+							if (x == layoutData.x && y == layoutData.y) {
+								// destination cell
+								ComponentInfo cell = gridCells[x][y];
+								if (cell == null || fillers.contains(cell)) {
+									// place component
+									gridCells[x][y] = component;
+									fillers.remove(cell);
+								} else {
+									// collision detected
+									DesignerPlugin.log("swing.model.layout.GridLayout_Converter.convert(ContainerInfo, GridLayoutInfo) collision: in cell ("
+											+ x
+											+ ","
+											+ y
+											+ ")");
+								}
+							} else {
+								// add filler if empty
+								if (gridCells[x][y] == null) {
+									// create filler
+									ComponentInfo emptyLabel = createFiller();
+									gridCells[x][y] = emptyLabel;
+									fillers.add(emptyLabel);
+								}
+							}
+						}
+					}
+				}
+			}
+			// reorder components for correct flow
+			ContainerInfo parent = m_container.getContainer();
+			List<ComponentInfo> childrenComponents = parent.getChildrenComponents();
+			ComponentInfo referenceComponent =
+					childrenComponents.size() == 0 ? null : childrenComponents.get(0);
+			for (int y = 0; y < rowCount; y++) {
+				for (int x = 0; x < colCount; x++) {
+					ComponentInfo cell = gridCells[x][y];
+					if (cell == null) {
+						cell = createFiller();
+						fillers.add(cell);
+					}
+					if (cell.getParent() == parent) {
+						// move to new place
+						if (cell == referenceComponent) {
+							// skip current referenced
+							referenceComponent =
+									GenericsUtils.getNextOrNull(parent.getChildrenComponents(), referenceComponent);
+						} else {
+							// move
+							m_layout.move(cell, referenceComponent);
+						}
+					} else {
+						// add to container
+						m_layout.add(cell, referenceComponent);
+					}
+					// clear text in filler label
+					if (fillers.contains(cell)) {
+						cell.getPropertyByTitle("text").setValue("");
+					}
+				}
+			}
+		}
+
+		private ComponentInfo createFiller() throws Exception {
+			ComponentInfo emptyLabel =
+					(ComponentInfo) JavaInfoUtils.createJavaInfo(
+							m_layout.getEditor(),
+							"javax.swing.JLabel",
+							new ConstructorCreationSupport());
+			return emptyLabel;
+		}
+	}
+	/**
+	 * Implementation {@link IGridLayoutData}.
+	 */
+	protected static class GridLayoutData implements IGridLayoutData {
+		private final GridLayoutInstance m_layout;
+		private final IAbstractComponentInfo m_control;
+		int x = -1;
+		int y = -1;
+		int w = 1;
+		int h = 1;
+
+		GridLayoutData(GridLayoutInstance layout, IAbstractComponentInfo control) {
+			m_layout = layout;
+			m_control = control;
+		}
+
+		public IAbstractComponentInfo getComponent() {
+			return m_control;
+		}
+
+		public IGridLayoutInstance getLayout() {
+			return m_layout;
+		}
+
+		public void setGridX(int value) throws Exception {
+			x = value;
+		}
+
+		public void setGridY(int value) throws Exception {
+			y = value;
+		}
+
+		public void setSpanX(int value) throws Exception {
+			w = value;
+		}
+
+		public void setSpanY(int value) throws Exception {
+			h = value;
+		}
+
+		public void setHorizontalGrab(boolean value) throws Exception {
+			// NONE
+		}
+
+		public void setVerticalGrab(boolean value) throws Exception {
+			// NONE
+		}
+
+		public void setHorizontalAlignment(HorizontalAlignment value) throws Exception {
+			// NONE
+		}
+
+		public void setVerticalAlignment(VerticalAlignment value) throws Exception {
+			// NONE
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/GridLayoutInfo.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/GridLayoutInfo.java
index 5ed56afcc..2d46fd7c0 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/GridLayoutInfo.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/GridLayoutInfo.java
@@ -34,88 +34,88 @@
  * @coverage swing.model.layout
  */
 public final class GridLayoutInfo extends GenericFlowLayoutInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public GridLayoutInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public GridLayoutInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Initialize
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void initialize() throws Exception {
-    super.initialize();
-    // GridLayout uses "columns" only when "rows == 0"
-    addBroadcastListener(new JavaEventListener() {
-      @Override
-      public void setPropertyExpression(GenericPropertyImpl property,
-          String[] source,
-          Object[] value,
-          boolean[] shouldSet) throws Exception {
-        if (property.getJavaInfo() == GridLayoutInfo.this && property.getTitle().equals("columns")) {
-          getPropertyByTitle("rows").setValue(0);
-        }
-      }
-    });
-    // alignment support
-    new LayoutAssistantSupport(this) {
-      @Override
-      protected AbstractAssistantPage createLayoutPage(Composite parent) {
-        return new GridLayoutAssistantPage(parent, m_layout);
-      }
-    };
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Initialize
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void initialize() throws Exception {
+		super.initialize();
+		// GridLayout uses "columns" only when "rows == 0"
+		addBroadcastListener(new JavaEventListener() {
+			@Override
+			public void setPropertyExpression(GenericPropertyImpl property,
+					String[] source,
+					Object[] value,
+					boolean[] shouldSet) throws Exception {
+				if (property.getJavaInfo() == GridLayoutInfo.this && property.getTitle().equals("columns")) {
+					getPropertyByTitle("rows").setValue(0);
+				}
+			}
+		});
+		// alignment support
+		new LayoutAssistantSupport(this) {
+			@Override
+			protected AbstractAssistantPage createLayoutPage(Composite parent) {
+				return new GridLayoutAssistantPage(parent, m_layout);
+			}
+		};
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void onSet() throws Exception {
-    super.onSet();
-    GridLayoutConverter.convert(getContainer(), this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void onSet() throws Exception {
+		super.onSet();
+		GridLayoutConverter.convert(getContainer(), this);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Manage general layout data.
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void storeLayoutData(ComponentInfo component) throws Exception {
-    if (isManagedObject(component)) {
-      GeneralLayoutData generalLayoutData = new GeneralLayoutData();
-      {
-        // calculate cell
-        List<ComponentInfo> components = getComponents();
-        int rowCount = (Integer) ReflectionUtils.invokeMethod(getObject(), "getRows()");
-        int colCount;
-        if (rowCount > 0) {
-          colCount = (components.size() - 1) / rowCount + 1;
-        } else {
-          colCount = (Integer) ReflectionUtils.invokeMethod(getObject(), "getColumns()");
-        }
-        int index = components.indexOf(component);
-        generalLayoutData.gridX = index % colCount;
-        generalLayoutData.gridY = index / colCount;
-      }
-      generalLayoutData.spanX = 1;
-      generalLayoutData.spanY = 1;
-      generalLayoutData.horizontalGrab = null;
-      generalLayoutData.verticalGrab = null;
-      // alignments
-      generalLayoutData.horizontalAlignment = HorizontalAlignment.FILL;
-      generalLayoutData.verticalAlignment = VerticalAlignment.FILL;
-      generalLayoutData.putToInfo(component);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Manage general layout data.
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void storeLayoutData(ComponentInfo component) throws Exception {
+		if (isManagedObject(component)) {
+			GeneralLayoutData generalLayoutData = new GeneralLayoutData();
+			{
+				// calculate cell
+				List<ComponentInfo> components = getComponents();
+				int rowCount = (Integer) ReflectionUtils.invokeMethod(getObject(), "getRows()");
+				int colCount;
+				if (rowCount > 0) {
+					colCount = (components.size() - 1) / rowCount + 1;
+				} else {
+					colCount = (Integer) ReflectionUtils.invokeMethod(getObject(), "getColumns()");
+				}
+				int index = components.indexOf(component);
+				generalLayoutData.gridX = index % colCount;
+				generalLayoutData.gridY = index / colCount;
+			}
+			generalLayoutData.spanX = 1;
+			generalLayoutData.spanY = 1;
+			generalLayoutData.horizontalGrab = null;
+			generalLayoutData.verticalGrab = null;
+			// alignments
+			generalLayoutData.horizontalAlignment = HorizontalAlignment.FILL;
+			generalLayoutData.verticalAlignment = VerticalAlignment.FILL;
+			generalLayoutData.putToInfo(component);
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/ImplicitLayoutCreationSupport.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/ImplicitLayoutCreationSupport.java
index a0c4a0c45..f3f4429f8 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/ImplicitLayoutCreationSupport.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/ImplicitLayoutCreationSupport.java
@@ -37,161 +37,161 @@
  * @coverage swing.model.layout
  */
 public final class ImplicitLayoutCreationSupport extends CreationSupport
-    implements
-      IImplicitCreationSupport {
-  private final ContainerInfo m_container;
-  private final Object m_objectListener1 = new ObjectInfoChildAddBefore() {
-    public void invoke(ObjectInfo parent, ObjectInfo child, ObjectInfo[] nextChild)
-        throws Exception {
-      if (isAddNewLayout(parent, child) && parent.getChildren().contains(m_javaInfo)) {
-        if (nextChild[0] == m_javaInfo) {
-          nextChild[0] = GenericsUtils.getNextOrNull(parent.getChildren(), m_javaInfo);
-        }
-        parent.removeChild(m_javaInfo);
-      }
-    }
-  };
-  private final Object m_objectListener2 = new ObjectEventListener() {
-    @Override
-    public void childRemoveAfter(ObjectInfo parent, ObjectInfo child) throws Exception {
-      if (useImplicitLayout() && isAddNewLayout(parent, child)) {
-        parent.addChild(m_javaInfo);
-        ((LayoutInfo) m_javaInfo).onSet();
-      }
-    }
-  };
-  private final Object m_javaListener = new JavaInfoSetObjectAfter() {
-    public void invoke(JavaInfo target, Object o) throws Exception {
-      if (target == m_container) {
-        if (m_javaInfo.getObject() == null) {
-          Container container = (Container) o;
-          m_javaInfo.setObject(container.getLayout());
-        }
-      }
-    }
-  };
-
-  /**
-   * @return <code>true</code> if implicit layout should be added/removed.
-   */
-  private boolean useImplicitLayout() {
-    return m_container.getArbitraryValue(ContainerInfo.KEY_DONT_SET_IMPLICIT_LAYOUT) != Boolean.TRUE;
-  }
-
-  /**
-   * @return <code>true</code> if given combination of parent/child is adding new {@link LayoutInfo}
-   *         on our {@link ContainerInfo}.
-   */
-  private boolean isAddNewLayout(ObjectInfo parent, ObjectInfo child) {
-    return parent == m_container && child instanceof LayoutInfo && child != m_javaInfo;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ImplicitLayoutCreationSupport(ContainerInfo containerInfo) {
-    m_container = containerInfo;
-    m_container.addBroadcastListener(m_objectListener1);
-    m_container.addBroadcastListener(m_objectListener2);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    Class<?> layoutClass = getComponentClass();
-    // check for absolute layout
-    if (layoutClass == null) {
-      return "implicit-layout: absolute";
-    }
-    // "real" layout
-    return "implicit-layout: " + layoutClass.getName();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void setJavaInfo(JavaInfo javaInfo) throws Exception {
-    super.setJavaInfo(javaInfo);
-    m_container.addBroadcastListener(m_javaListener);
-  }
-
-  @Override
-  public boolean isJavaInfo(ASTNode node) {
-    if (node instanceof MethodInvocation) {
-      MethodInvocation invocation = (MethodInvocation) node;
-      return invocation.arguments().isEmpty()
-          && invocation.getName().getIdentifier().equals("getLayout")
-          && m_container.isRepresentedBy(invocation.getExpression());
-    }
-    return false;
-  }
-
-  @Override
-  public ASTNode getNode() {
-    return m_container.getCreationSupport().getNode();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Special access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void removeForever() throws Exception {
-    m_container.removeBroadcastListener(m_objectListener1);
-    m_container.removeBroadcastListener(m_objectListener2);
-    m_container.removeBroadcastListener(m_javaListener);
-    m_container.removeChild(m_javaInfo);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Add
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String add_getSource(NodeTarget target) throws Exception {
-    String layoutClassName = m_javaInfo.getDescription().getComponentClass().getName();
-    return TemplateUtils.format("({0}) {1}.getLayout()", layoutClassName, m_container);
-  }
-
-  @Override
-  public void add_setSourceExpression(Expression expression) throws Exception {
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Delete
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean canDelete() {
-    return true;
-  }
-
-  @Override
-  public void delete() throws Exception {
-    JavaInfoUtils.deleteJavaInfo(m_javaInfo, false);
-    // if implicit layout was materialized, so has real variable, restore implicit variable
-    if (!(m_javaInfo.getVariableSupport() instanceof ImplicitLayoutVariableSupport)) {
-      m_javaInfo.setVariableSupport(new ImplicitLayoutVariableSupport(m_javaInfo));
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IClipboardImplicitCreationSupport
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public IClipboardImplicitCreationSupport getImplicitClipboard() {
-    return null;
-  }
+implements
+IImplicitCreationSupport {
+	private final ContainerInfo m_container;
+	private final Object m_objectListener1 = new ObjectInfoChildAddBefore() {
+		public void invoke(ObjectInfo parent, ObjectInfo child, ObjectInfo[] nextChild)
+				throws Exception {
+			if (isAddNewLayout(parent, child) && parent.getChildren().contains(m_javaInfo)) {
+				if (nextChild[0] == m_javaInfo) {
+					nextChild[0] = GenericsUtils.getNextOrNull(parent.getChildren(), m_javaInfo);
+				}
+				parent.removeChild(m_javaInfo);
+			}
+		}
+	};
+	private final Object m_objectListener2 = new ObjectEventListener() {
+		@Override
+		public void childRemoveAfter(ObjectInfo parent, ObjectInfo child) throws Exception {
+			if (useImplicitLayout() && isAddNewLayout(parent, child)) {
+				parent.addChild(m_javaInfo);
+				((LayoutInfo) m_javaInfo).onSet();
+			}
+		}
+	};
+	private final Object m_javaListener = new JavaInfoSetObjectAfter() {
+		public void invoke(JavaInfo target, Object o) throws Exception {
+			if (target == m_container) {
+				if (m_javaInfo.getObject() == null) {
+					Container container = (Container) o;
+					m_javaInfo.setObject(container.getLayout());
+				}
+			}
+		}
+	};
+
+	/**
+	 * @return <code>true</code> if implicit layout should be added/removed.
+	 */
+	private boolean useImplicitLayout() {
+		return m_container.getArbitraryValue(ContainerInfo.KEY_DONT_SET_IMPLICIT_LAYOUT) != Boolean.TRUE;
+	}
+
+	/**
+	 * @return <code>true</code> if given combination of parent/child is adding new {@link LayoutInfo}
+	 *         on our {@link ContainerInfo}.
+	 */
+	private boolean isAddNewLayout(ObjectInfo parent, ObjectInfo child) {
+		return parent == m_container && child instanceof LayoutInfo && child != m_javaInfo;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ImplicitLayoutCreationSupport(ContainerInfo containerInfo) {
+		m_container = containerInfo;
+		m_container.addBroadcastListener(m_objectListener1);
+		m_container.addBroadcastListener(m_objectListener2);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		Class<?> layoutClass = getComponentClass();
+		// check for absolute layout
+		if (layoutClass == null) {
+			return "implicit-layout: absolute";
+		}
+		// "real" layout
+		return "implicit-layout: " + layoutClass.getName();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void setJavaInfo(JavaInfo javaInfo) throws Exception {
+		super.setJavaInfo(javaInfo);
+		m_container.addBroadcastListener(m_javaListener);
+	}
+
+	@Override
+	public boolean isJavaInfo(ASTNode node) {
+		if (node instanceof MethodInvocation) {
+			MethodInvocation invocation = (MethodInvocation) node;
+			return invocation.arguments().isEmpty()
+					&& invocation.getName().getIdentifier().equals("getLayout")
+					&& m_container.isRepresentedBy(invocation.getExpression());
+		}
+		return false;
+	}
+
+	@Override
+	public ASTNode getNode() {
+		return m_container.getCreationSupport().getNode();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Special access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void removeForever() throws Exception {
+		m_container.removeBroadcastListener(m_objectListener1);
+		m_container.removeBroadcastListener(m_objectListener2);
+		m_container.removeBroadcastListener(m_javaListener);
+		m_container.removeChild(m_javaInfo);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Add
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String add_getSource(NodeTarget target) throws Exception {
+		String layoutClassName = m_javaInfo.getDescription().getComponentClass().getName();
+		return TemplateUtils.format("({0}) {1}.getLayout()", layoutClassName, m_container);
+	}
+
+	@Override
+	public void add_setSourceExpression(Expression expression) throws Exception {
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Delete
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean canDelete() {
+		return true;
+	}
+
+	@Override
+	public void delete() throws Exception {
+		JavaInfoUtils.deleteJavaInfo(m_javaInfo, false);
+		// if implicit layout was materialized, so has real variable, restore implicit variable
+		if (!(m_javaInfo.getVariableSupport() instanceof ImplicitLayoutVariableSupport)) {
+			m_javaInfo.setVariableSupport(new ImplicitLayoutVariableSupport(m_javaInfo));
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IClipboardImplicitCreationSupport
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public IClipboardImplicitCreationSupport getImplicitClipboard() {
+		return null;
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/ImplicitLayoutVariableSupport.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/ImplicitLayoutVariableSupport.java
index 75f1722d9..9f0be4092 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/ImplicitLayoutVariableSupport.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/ImplicitLayoutVariableSupport.java
@@ -21,47 +21,47 @@
  * @coverage swing.model.layout
  */
 public final class ImplicitLayoutVariableSupport extends AbstractImplicitVariableSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ImplicitLayoutVariableSupport(JavaInfo javaInfo) {
-    super(javaInfo);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ImplicitLayoutVariableSupport(JavaInfo javaInfo) {
+		super(javaInfo);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    return "implicit-layout";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		return "implicit-layout";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean isDefault() {
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean isDefault() {
+		return true;
+	}
 
-  @Override
-  public String getTitle() throws Exception {
-    return "(implicit layout)";
-  }
+	@Override
+	public String getTitle() throws Exception {
+		return "(implicit layout)";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Materializing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected JavaInfo getParent() {
-    return m_javaInfo.getParentJava();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Materializing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected JavaInfo getParent() {
+		return m_javaInfo.getParentJava();
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/LayoutAssistantSupport.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/LayoutAssistantSupport.java
index 0ec27b2e9..4dbb4fe6a 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/LayoutAssistantSupport.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/LayoutAssistantSupport.java
@@ -19,32 +19,32 @@
  * @coverage swing.assistant
  */
 public class LayoutAssistantSupport
-    extends
-      org.eclipse.wb.core.editor.actions.assistant.LayoutAssistantSupport {
-  protected final LayoutInfo m_layout;
+extends
+org.eclipse.wb.core.editor.actions.assistant.LayoutAssistantSupport {
+	protected final LayoutInfo m_layout;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public LayoutAssistantSupport(LayoutInfo layout) {
-    super(layout);
-    m_layout = layout;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public LayoutAssistantSupport(LayoutInfo layout) {
+		super(layout);
+		m_layout = layout;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  //
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected final String getConstraintsPageTitle() {
-    return "Constraints";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	//
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected final String getConstraintsPageTitle() {
+		return "Constraints";
+	}
 
-  @Override
-  protected final ObjectInfo getContainer() {
-    return m_layout.getContainer();
-  }
+	@Override
+	protected final ObjectInfo getContainer() {
+		return m_layout.getContainer();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/LayoutClipboardCommand.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/LayoutClipboardCommand.java
index dd7c12f24..28eefe49f 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/LayoutClipboardCommand.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/LayoutClipboardCommand.java
@@ -22,35 +22,35 @@
  * @coverage swing.model.layout
  */
 public abstract class LayoutClipboardCommand<L extends LayoutInfo>
-    extends
-      ComponentClipboardCommand<ContainerInfo> {
-  private static final long serialVersionUID = 0L;
-  private final JavaInfoMemento m_memento;
+extends
+ComponentClipboardCommand<ContainerInfo> {
+	private static final long serialVersionUID = 0L;
+	private final JavaInfoMemento m_memento;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public LayoutClipboardCommand(ComponentInfo component) throws Exception {
-    m_memento = JavaInfoMemento.createMemento(component);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public LayoutClipboardCommand(ComponentInfo component) throws Exception {
+		m_memento = JavaInfoMemento.createMemento(component);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Execute
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  @SuppressWarnings("unchecked")
-  protected void execute(ContainerInfo container) throws Exception {
-    ComponentInfo component = (ComponentInfo) m_memento.create(container);
-    add((L) container.getLayout(), component);
-    m_memento.apply();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Execute
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	@SuppressWarnings("unchecked")
+	protected void execute(ContainerInfo container) throws Exception {
+		ComponentInfo component = (ComponentInfo) m_memento.create(container);
+		add((L) container.getLayout(), component);
+		m_memento.apply();
+	}
 
-  /**
-   * Adds given {@link ComponentInfo} to {@link ContainerInfo} using layout specific way.
-   */
-  protected abstract void add(L layout, ComponentInfo component) throws Exception;
+	/**
+	 * Adds given {@link ComponentInfo} to {@link ContainerInfo} using layout specific way.
+	 */
+	protected abstract void add(L layout, ComponentInfo component) throws Exception;
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/LayoutInfo.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/LayoutInfo.java
index 2f11ef352..07c26e86e 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/LayoutInfo.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/LayoutInfo.java
@@ -69,394 +69,394 @@
  * @coverage swing.model.layout
  */
 public class LayoutInfo extends JavaInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public LayoutInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-    addBroadcastListeners();
-    new LayoutNameSupport(this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public LayoutInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+		addBroadcastListeners();
+		new LayoutNameSupport(this);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Broadcast events
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds listeners to the {@link BroadcastSupport}.
-   */
-  private void addBroadcastListeners() {
-    addBroadcastListener(new ObjectInfoDelete() {
-      @Override
-      public void before(ObjectInfo parent, ObjectInfo child) throws Exception {
-        // delete this layout
-        if (child == LayoutInfo.this) {
-          onDelete();
-        }
-        // delete child from this container
-        if (isManagedObject(child)) {
-          ComponentInfo component = (ComponentInfo) child;
-          removeComponentConstraints(getContainer(), component);
-        }
-      }
-    });
-    addBroadcastListener(new JavaEventListener() {
-      @Override
-      public void moveBefore(JavaInfo child, ObjectInfo oldParent, JavaInfo newParent)
-          throws Exception {
-        // move FROM this layout
-        if (isManagedObject(child) && newParent != oldParent) {
-          ComponentInfo component = (ComponentInfo) child;
-          removeComponentConstraints(getContainer(), component);
-        }
-      }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Broadcast events
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds listeners to the {@link BroadcastSupport}.
+	 */
+	private void addBroadcastListeners() {
+		addBroadcastListener(new ObjectInfoDelete() {
+			@Override
+			public void before(ObjectInfo parent, ObjectInfo child) throws Exception {
+				// delete this layout
+				if (child == LayoutInfo.this) {
+					onDelete();
+				}
+				// delete child from this container
+				if (isManagedObject(child)) {
+					ComponentInfo component = (ComponentInfo) child;
+					removeComponentConstraints(getContainer(), component);
+				}
+			}
+		});
+		addBroadcastListener(new JavaEventListener() {
+			@Override
+			public void moveBefore(JavaInfo child, ObjectInfo oldParent, JavaInfo newParent)
+					throws Exception {
+				// move FROM this layout
+				if (isManagedObject(child) && newParent != oldParent) {
+					ComponentInfo component = (ComponentInfo) child;
+					removeComponentConstraints(getContainer(), component);
+				}
+			}
 
-      @Override
-      public void clipboardCopy(JavaInfo javaInfo, List<ClipboardCommand> commands)
-          throws Exception {
-        if (isActiveOnContainer(javaInfo)) {
-          clipboardCopy_addContainerCommands(commands);
-        }
-      }
-    });
-    addBroadcastListener(new JavaInfoAddProperties() {
-      public void invoke(JavaInfo javaInfo, List<Property> properties) throws Exception {
-        if (isActiveOnContainer(javaInfo)) {
-          event_addLayoutProperties(properties);
-        }
-      }
-    });
-  }
+			@Override
+			public void clipboardCopy(JavaInfo javaInfo, List<ClipboardCommand> commands)
+					throws Exception {
+				if (isActiveOnContainer(javaInfo)) {
+					clipboardCopy_addContainerCommands(commands);
+				}
+			}
+		});
+		addBroadcastListener(new JavaInfoAddProperties() {
+			public void invoke(JavaInfo javaInfo, List<Property> properties) throws Exception {
+				if (isActiveOnContainer(javaInfo)) {
+					event_addLayoutProperties(properties);
+				}
+			}
+		});
+	}
 
-  /**
-   * @return <code>true</code> if given {@link Object} is managed by this {@link LayoutInfo}.
-   */
-  public boolean isManagedObject(Object object) {
-    if (isManagedClass(object)) {
-      ComponentInfo component = (ComponentInfo) object;
-      if (JavaInfoUtils.isIndirectlyExposed(component)) {
-        return false;
-      }
-      ObjectInfo container = component.getParent();
-      return isActiveOnContainer(container);
-    }
-    return false;
-  }
+	/**
+	 * @return <code>true</code> if given {@link Object} is managed by this {@link LayoutInfo}.
+	 */
+	public boolean isManagedObject(Object object) {
+		if (isManagedClass(object)) {
+			ComponentInfo component = (ComponentInfo) object;
+			if (JavaInfoUtils.isIndirectlyExposed(component)) {
+				return false;
+			}
+			ObjectInfo container = component.getParent();
+			return isActiveOnContainer(container);
+		}
+		return false;
+	}
 
-  /**
-   * @return <code>true</code> if given {@link Object} is {@link ComponentInfo}.
-   */
-  private static boolean isManagedClass(Object object) {
-    return object instanceof ComponentInfo && !(object instanceof JPopupMenuInfo);
-  }
+	/**
+	 * @return <code>true</code> if given {@link Object} is {@link ComponentInfo}.
+	 */
+	private static boolean isManagedClass(Object object) {
+		return object instanceof ComponentInfo && !(object instanceof JPopupMenuInfo);
+	}
 
-  /**
-   * @return <code>true</code> if this {@link LayoutInfo} is active on its {@link ContainerInfo}.
-   */
-  protected final boolean isActiveOnContainer(ObjectInfo container) {
-    return container != null && container.getChildren().contains(this);
-  }
+	/**
+	 * @return <code>true</code> if this {@link LayoutInfo} is active on its {@link ContainerInfo}.
+	 */
+	protected final boolean isActiveOnContainer(ObjectInfo container) {
+		return container != null && container.getChildren().contains(this);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final IObjectPresentation getPresentation() {
-    return new LayoutPresentation(this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final IObjectPresentation getPresentation() {
+		return new LayoutPresentation(this);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link ContainerInfo} that contains this {@link LayoutInfo}.
-   */
-  public final ContainerInfo getContainer() {
-    return (ContainerInfo) getParent();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link ContainerInfo} that contains this {@link LayoutInfo}.
+	 */
+	public final ContainerInfo getContainer() {
+		return (ContainerInfo) getParent();
+	}
 
-  /**
-   * @return the {@link ComponentInfo} children of container.
-   */
-  public final List<ComponentInfo> getComponents() {
-    List<ComponentInfo> components = Lists.newArrayList();
-    for (ObjectInfo child : getContainer().getChildren()) {
-      if (isManagedObject(child)) {
-        ComponentInfo component = (ComponentInfo) child;
-        components.add(component);
-      }
-    }
-    return components;
-  }
+	/**
+	 * @return the {@link ComponentInfo} children of container.
+	 */
+	public final List<ComponentInfo> getComponents() {
+		List<ComponentInfo> components = Lists.newArrayList();
+		for (ObjectInfo child : getContainer().getChildren()) {
+			if (isManagedObject(child)) {
+				ComponentInfo component = (ComponentInfo) child;
+				components.add(component);
+			}
+		}
+		return components;
+	}
 
-  /**
-   * @return <code>true</code> if this {@link LayoutInfo} is active on its {@link ContainerInfo}.
-   *         For example implicit {@link LayoutInfo}'s replaced by "real" {@link LayoutInfo} are
-   *         inactive.
-   */
-  public final boolean isActive() {
-    ContainerInfo container = getContainer();
-    return isActiveOnContainer(container);
-  }
+	/**
+	 * @return <code>true</code> if this {@link LayoutInfo} is active on its {@link ContainerInfo}.
+	 *         For example implicit {@link LayoutInfo}'s replaced by "real" {@link LayoutInfo} are
+	 *         inactive.
+	 */
+	public final boolean isActive() {
+		ContainerInfo container = getContainer();
+		return isActiveOnContainer(container);
+	}
 
-  /**
-   * This method is invoked when this {@link LayoutInfo} is set on its {@link ContainerInfo}.
-   */
-  public void onSet() throws Exception {
-  }
+	/**
+	 * This method is invoked when this {@link LayoutInfo} is set on its {@link ContainerInfo}.
+	 */
+	public void onSet() throws Exception {
+	}
 
-  /**
-   * This method is invoked when this {@link LayoutInfo} is deleted from its {@link ContainerInfo}.
-   */
-  protected void onDelete() throws Exception {
-    ContainerInfo container = getContainer();
-    for (ComponentInfo componentInfo : container.getChildrenComponents()) {
-      storeLayoutData(componentInfo);
-      removeComponentConstraints(container, componentInfo);
-    }
-  }
+	/**
+	 * This method is invoked when this {@link LayoutInfo} is deleted from its {@link ContainerInfo}.
+	 */
+	protected void onDelete() throws Exception {
+		ContainerInfo container = getContainer();
+		for (ComponentInfo componentInfo : container.getChildrenComponents()) {
+			storeLayoutData(componentInfo);
+			removeComponentConstraints(container, componentInfo);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // "Layout" property
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private ComplexProperty m_layoutComplexProperty;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// "Layout" property
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private ComplexProperty m_layoutComplexProperty;
 
-  /**
-   * Adds properties of this {@link LayoutInfo} to the properties of its {@link ContainerInfo}.
-   */
-  private void event_addLayoutProperties(List<Property> properties) throws Exception {
-    // prepare layout complex property
-    {
-      Property[] layoutProperties = getProperties();
-      if (m_layoutComplexProperty == null) {
-        String text;
-        {
-          Class<?> componentClass = getDescription().getComponentClass();
-          if (componentClass != null) {
-            text = "(" + componentClass.getName() + ")";
-          } else {
-            text = "(absolute)";
-          }
-        }
-        //
-        m_layoutComplexProperty = new ComplexProperty("Layout", text) {
-          @Override
-          public boolean isModified() throws Exception {
-            return true;
-          }
+	/**
+	 * Adds properties of this {@link LayoutInfo} to the properties of its {@link ContainerInfo}.
+	 */
+	private void event_addLayoutProperties(List<Property> properties) throws Exception {
+		// prepare layout complex property
+		{
+			Property[] layoutProperties = getProperties();
+			if (m_layoutComplexProperty == null) {
+				String text;
+				{
+					Class<?> componentClass = getDescription().getComponentClass();
+					if (componentClass != null) {
+						text = "(" + componentClass.getName() + ")";
+					} else {
+						text = "(absolute)";
+					}
+				}
+				//
+				m_layoutComplexProperty = new ComplexProperty("Layout", text) {
+					@Override
+					public boolean isModified() throws Exception {
+						return true;
+					}
 
-          @Override
-          public void setValue(Object value) throws Exception {
-            if (value == UNKNOWN_VALUE) {
-              setDefaultLayout();
-            }
-          }
-        };
-        m_layoutComplexProperty.setCategory(PropertyCategory.system(5));
-        if (getContainer().canSetLayout()) {
-          m_layoutComplexProperty.setEditorPresentation(new ButtonPropertyEditorPresentation() {
-            @Override
-            protected Image getImage() {
-              return DesignerPlugin.getImage("properties/down.png");
-            }
+					@Override
+					public void setValue(Object value) throws Exception {
+						if (value == UNKNOWN_VALUE) {
+							setDefaultLayout();
+						}
+					}
+				};
+				m_layoutComplexProperty.setCategory(PropertyCategory.system(5));
+				if (getContainer().canSetLayout()) {
+					m_layoutComplexProperty.setEditorPresentation(new ButtonPropertyEditorPresentation() {
+						@Override
+						protected Image getImage() {
+							return DesignerPlugin.getImage("properties/down.png");
+						}
 
-            @Override
-            protected void onClick(PropertyTable propertyTable, Property property)
-                throws Exception {
-              MenuManager manager = new MenuManager();
-              getContainer().fillLayoutsManager(manager);
-              Menu menu = manager.createContextMenu(propertyTable);
-              UiUtils.showAndDisposeOnHide(menu);
-            }
-          });
-        }
-      }
-      m_layoutComplexProperty.setProperties(layoutProperties);
-    }
-    // add property
-    properties.add(m_layoutComplexProperty);
-  }
+						@Override
+						protected void onClick(PropertyTable propertyTable, Property property)
+								throws Exception {
+							MenuManager manager = new MenuManager();
+							getContainer().fillLayoutsManager(manager);
+							Menu menu = manager.createContextMenu(propertyTable);
+							UiUtils.showAndDisposeOnHide(menu);
+						}
+					});
+				}
+			}
+			m_layoutComplexProperty.setProperties(layoutProperties);
+		}
+		// add property
+		properties.add(m_layoutComplexProperty);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Components/constraints
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Removes constraints for given {@link ComponentInfo}.
-   * <p>
-   * By default it tries to remove constraints in {@link Container#add(Component, Object)}.
-   */
-  protected void removeComponentConstraints(ContainerInfo container, ComponentInfo component)
-      throws Exception {
-    if (component.getAssociation() instanceof InvocationChildAssociation) {
-      InvocationChildAssociation association =
-          (InvocationChildAssociation) component.getAssociation();
-      MethodInvocation invocation = association.getInvocation();
-      String signature = AstNodeUtils.getMethodSignature(invocation);
-      if (signature.equals("add(java.awt.Component,java.lang.Object)")) {
-        getEditor().removeInvocationArgument(invocation, 1);
-      }
-      if (signature.equals("add(java.lang.String,java.awt.Component)")) {
-        getEditor().removeInvocationArgument(invocation, 0);
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Components/constraints
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Removes constraints for given {@link ComponentInfo}.
+	 * <p>
+	 * By default it tries to remove constraints in {@link Container#add(Component, Object)}.
+	 */
+	protected void removeComponentConstraints(ContainerInfo container, ComponentInfo component)
+			throws Exception {
+		if (component.getAssociation() instanceof InvocationChildAssociation) {
+			InvocationChildAssociation association =
+					(InvocationChildAssociation) component.getAssociation();
+			MethodInvocation invocation = association.getInvocation();
+			String signature = AstNodeUtils.getMethodSignature(invocation);
+			if (signature.equals("add(java.awt.Component,java.lang.Object)")) {
+				getEditor().removeInvocationArgument(invocation, 1);
+			}
+			if (signature.equals("add(java.lang.String,java.awt.Component)")) {
+				getEditor().removeInvocationArgument(invocation, 0);
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds given {@link ComponentInfo} using {@link Container#add(Component, Object)} or
-   * {@link Container#add(Component)}.
-   */
-  protected final void add(ComponentInfo component,
-      String constraintsSource,
-      ComponentInfo nextComponent) throws Exception {
-    AssociationObject association = getAssociation(constraintsSource);
-    JavaInfoUtils.add(component, association, getContainer(), nextComponent);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds given {@link ComponentInfo} using {@link Container#add(Component, Object)} or
+	 * {@link Container#add(Component)}.
+	 */
+	protected final void add(ComponentInfo component,
+			String constraintsSource,
+			ComponentInfo nextComponent) throws Exception {
+		AssociationObject association = getAssociation(constraintsSource);
+		JavaInfoUtils.add(component, association, getContainer(), nextComponent);
+	}
 
-  /**
-   * Moves {@link ComponentInfo} to this container.
-   */
-  protected final void move(ComponentInfo component,
-      String constraintsSource,
-      ComponentInfo nextComponent) throws Exception {
-    ContainerInfo container = getContainer();
-    AssociationObject association = getAssociation(constraintsSource);
-    JavaInfoUtils.move(component, association, container, nextComponent);
-  }
+	/**
+	 * Moves {@link ComponentInfo} to this container.
+	 */
+	protected final void move(ComponentInfo component,
+			String constraintsSource,
+			ComponentInfo nextComponent) throws Exception {
+		ContainerInfo container = getContainer();
+		AssociationObject association = getAssociation(constraintsSource);
+		JavaInfoUtils.move(component, association, container, nextComponent);
+	}
 
-  /**
-   * @return the {@link AssociationObject} for standard Swing parent/child association - using
-   *         methods {@link Container#add(Component, Object)} or {@link Container#add(Component)}
-   *
-   * @param constraintsSource
-   *          the source for constraints object for {@link Container#add(Component, Object)} or
-   *          <code>null</code> if {@link Container#add(Component)} should be used.
-   */
-  private static AssociationObject getAssociation(String constraintsSource) throws Exception {
-    if (constraintsSource != null) {
-      return AssociationObjects.invocationChild(
-          "%parent%.add(%child%, " + constraintsSource + ")",
-          false);
-    } else {
-      return AssociationObjects.invocationChild("%parent%.add(%child%)", false);
-    }
-  }
+	/**
+	 * @return the {@link AssociationObject} for standard Swing parent/child association - using
+	 *         methods {@link Container#add(Component, Object)} or {@link Container#add(Component)}
+	 *
+	 * @param constraintsSource
+	 *          the source for constraints object for {@link Container#add(Component, Object)} or
+	 *          <code>null</code> if {@link Container#add(Component)} should be used.
+	 */
+	private static AssociationObject getAssociation(String constraintsSource) throws Exception {
+		if (constraintsSource != null) {
+			return AssociationObjects.invocationChild(
+					"%parent%.add(%child%, " + constraintsSource + ")",
+					false);
+		} else {
+			return AssociationObjects.invocationChild("%parent%.add(%child%)", false);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Clipboard
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds commands for coping parent {@link ContainerInfo}.
-   */
-  protected void clipboardCopy_addContainerCommands(List<ClipboardCommand> commands)
-      throws Exception {
-    for (ComponentInfo component : getContainer().getChildrenComponents()) {
-      if (!JavaInfoUtils.isImplicitlyCreated(component)) {
-        clipboardCopy_addComponentCommands(component, commands);
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Clipboard
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds commands for coping parent {@link ContainerInfo}.
+	 */
+	protected void clipboardCopy_addContainerCommands(List<ClipboardCommand> commands)
+			throws Exception {
+		for (ComponentInfo component : getContainer().getChildrenComponents()) {
+			if (!JavaInfoUtils.isImplicitlyCreated(component)) {
+				clipboardCopy_addComponentCommands(component, commands);
+			}
+		}
+	}
 
-  /**
-   * Adds commands for coping {@link ComponentInfo} on parent {@link ContainerInfo}.
-   */
-  protected void clipboardCopy_addComponentCommands(ComponentInfo component,
-      List<ClipboardCommand> commands) throws Exception {
-  }
+	/**
+	 * Adds commands for coping {@link ComponentInfo} on parent {@link ContainerInfo}.
+	 */
+	protected void clipboardCopy_addComponentCommands(ComponentInfo component,
+			List<ClipboardCommand> commands) throws Exception {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Manage general layout data.
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Store general layout data properties for {@link ComponentInfo}.
-   */
-  protected void storeLayoutData(ComponentInfo component) throws Exception {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Manage general layout data.
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Store general layout data properties for {@link ComponentInfo}.
+	 */
+	protected void storeLayoutData(ComponentInfo component) throws Exception {
+	}
 
-  protected void storeLayoutDataDefault(ComponentInfo component) throws Exception {
-    if (isManagedObject(component)) {
-      GeneralLayoutData generalLayoutData = new GeneralLayoutData();
-      generalLayoutData.gridX = null;
-      generalLayoutData.gridY = null;
-      generalLayoutData.spanX = null;
-      generalLayoutData.spanY = null;
-      generalLayoutData.horizontalGrab = null;
-      generalLayoutData.verticalGrab = null;
-      // alignments
-      {
-        float alignmentX = (Float) component.getPropertyByTitle("alignmentX").getValue();
-        if (alignmentX <= 0.3) {
-          generalLayoutData.horizontalAlignment = HorizontalAlignment.LEFT;
-        } else if (alignmentX >= 0.6) {
-          generalLayoutData.horizontalAlignment = HorizontalAlignment.RIGHT;
-        } else {
-          generalLayoutData.horizontalAlignment = HorizontalAlignment.CENTER;
-        }
-      }
-      {
-        float alignmentY = (Float) component.getPropertyByTitle("alignmentY").getValue();
-        if (alignmentY <= 0.3) {
-          generalLayoutData.verticalAlignment = VerticalAlignment.TOP;
-        } else if (alignmentY >= 0.6) {
-          generalLayoutData.verticalAlignment = VerticalAlignment.BOTTOM;
-        } else {
-          generalLayoutData.verticalAlignment = VerticalAlignment.CENTER;
-        }
-      }
-      generalLayoutData.putToInfo(component);
-    }
-  }
+	protected void storeLayoutDataDefault(ComponentInfo component) throws Exception {
+		if (isManagedObject(component)) {
+			GeneralLayoutData generalLayoutData = new GeneralLayoutData();
+			generalLayoutData.gridX = null;
+			generalLayoutData.gridY = null;
+			generalLayoutData.spanX = null;
+			generalLayoutData.spanY = null;
+			generalLayoutData.horizontalGrab = null;
+			generalLayoutData.verticalGrab = null;
+			// alignments
+			{
+				float alignmentX = (Float) component.getPropertyByTitle("alignmentX").getValue();
+				if (alignmentX <= 0.3) {
+					generalLayoutData.horizontalAlignment = HorizontalAlignment.LEFT;
+				} else if (alignmentX >= 0.6) {
+					generalLayoutData.horizontalAlignment = HorizontalAlignment.RIGHT;
+				} else {
+					generalLayoutData.horizontalAlignment = HorizontalAlignment.CENTER;
+				}
+			}
+			{
+				float alignmentY = (Float) component.getPropertyByTitle("alignmentY").getValue();
+				if (alignmentY <= 0.3) {
+					generalLayoutData.verticalAlignment = VerticalAlignment.TOP;
+				} else if (alignmentY >= 0.6) {
+					generalLayoutData.verticalAlignment = VerticalAlignment.BOTTOM;
+				} else {
+					generalLayoutData.verticalAlignment = VerticalAlignment.CENTER;
+				}
+			}
+			generalLayoutData.putToInfo(component);
+		}
+	}
 
-  /**
-   * Removes the previous layout and sets the default layout as specified in the Windowbuilder
-   * layout preferences
-   *
-   * When the Implicit (default) layout option is selected the layout defaults to the GridLayout
-   *
-   * @throws Exception
-   */
-  private void setDefaultLayout() throws Exception {
-    Preferences prefs = InstanceScope.INSTANCE.getNode("org.eclipse.wb.swing");
-    //when the preferences are set to "Implicit (default) layout" the returned value is null
-    //therefore the default value for that would then default to flowLayout
-    String defaultValue = prefs.get("layout.default", "gridLayout");
-    List<LayoutDescription> descriptions =
-        LayoutDescriptionHelper.get(getDescription().getToolkit());
-    String creationId = null;
-    ClassLoader editorLoader = null;
-    Class<?> layoutClass = null;
-    for (LayoutDescription description : descriptions) {
-      if (StringUtils.equals(defaultValue, description.getId())) {
-        creationId = description.getCreationId();
-        editorLoader = EditorState.get(getContainer().getEditor()).getEditorLoader();
-        layoutClass = editorLoader.loadClass(description.getLayoutClassName());
-      }
-    }
-    LayoutInfo defaultLayoutInfo = (LayoutInfo) JavaInfoUtils.createJavaInfo(
-        getContainer().getEditor(),
-        layoutClass,
-        new ConstructorCreationSupport(creationId, true));
-    getContainer().setLayout(defaultLayoutInfo);
-  }
+	/**
+	 * Removes the previous layout and sets the default layout as specified in the Windowbuilder
+	 * layout preferences
+	 *
+	 * When the Implicit (default) layout option is selected the layout defaults to the GridLayout
+	 *
+	 * @throws Exception
+	 */
+	private void setDefaultLayout() throws Exception {
+		Preferences prefs = InstanceScope.INSTANCE.getNode("org.eclipse.wb.swing");
+		//when the preferences are set to "Implicit (default) layout" the returned value is null
+		//therefore the default value for that would then default to flowLayout
+		String defaultValue = prefs.get("layout.default", "gridLayout");
+		List<LayoutDescription> descriptions =
+				LayoutDescriptionHelper.get(getDescription().getToolkit());
+		String creationId = null;
+		ClassLoader editorLoader = null;
+		Class<?> layoutClass = null;
+		for (LayoutDescription description : descriptions) {
+			if (StringUtils.equals(defaultValue, description.getId())) {
+				creationId = description.getCreationId();
+				editorLoader = EditorState.get(getContainer().getEditor()).getEditorLoader();
+				layoutClass = editorLoader.loadClass(description.getLayoutClassName());
+			}
+		}
+		LayoutInfo defaultLayoutInfo = (LayoutInfo) JavaInfoUtils.createJavaInfo(
+				getContainer().getEditor(),
+				layoutClass,
+				new ConstructorCreationSupport(creationId, true));
+		getContainer().setLayout(defaultLayoutInfo);
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/LayoutJavaInfoParticipator.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/LayoutJavaInfoParticipator.java
index 09abb6d4e..cc4282df3 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/LayoutJavaInfoParticipator.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/LayoutJavaInfoParticipator.java
@@ -32,106 +32,106 @@
  * @coverage swing.model.layout
  */
 public final class LayoutJavaInfoParticipator implements IJavaInfoInitializationParticipator {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final Object INSTANCE = new LayoutJavaInfoParticipator();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final Object INSTANCE = new LayoutJavaInfoParticipator();
 
-  private LayoutJavaInfoParticipator() {
-  }
+	private LayoutJavaInfoParticipator() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IJavaInfoInitializationParticipator
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void process(JavaInfo javaInfo) throws Exception {
-    if (javaInfo instanceof LayoutInfo) {
-      final LayoutInfo layout = (LayoutInfo) javaInfo;
-      // perform bindings...
-      if (layout.getParent() != null) {
-        // ...right now, if Layout already bound to its container
-        performBindings(layout);
-      } else {
-        // ...or later, when Layout will be bound to its container
-        layout.addBroadcastListener(new ObjectInfoChildAddAfter() {
-          public void invoke(ObjectInfo parent, ObjectInfo child) throws Exception {
-            if (child == layout) {
-              layout.removeBroadcastListener(this);
-              performBindings(layout);
-            }
-          }
-        });
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IJavaInfoInitializationParticipator
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void process(JavaInfo javaInfo) throws Exception {
+		if (javaInfo instanceof LayoutInfo) {
+			final LayoutInfo layout = (LayoutInfo) javaInfo;
+			// perform bindings...
+			if (layout.getParent() != null) {
+				// ...right now, if Layout already bound to its container
+				performBindings(layout);
+			} else {
+				// ...or later, when Layout will be bound to its container
+				layout.addBroadcastListener(new ObjectInfoChildAddAfter() {
+					public void invoke(ObjectInfo parent, ObjectInfo child) throws Exception {
+						if (child == layout) {
+							layout.removeBroadcastListener(this);
+							performBindings(layout);
+						}
+					}
+				});
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Bindings
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Performs artifacts bindings after building components tree.
-   */
-  private void performBindings(LayoutInfo layout) throws Exception {
-    // bind SurroundSupport
-    run(layout, new IBindingProcessor() {
-      public boolean run(LayoutInfo layout,
-          ClassLoader classLoader,
-          Class<?> layoutClass,
-          String layoutName) throws Exception {
-        String surroundClassName = layoutName + "SurroundSupport";
-        Class<?> surroundClass = classLoader.loadClass(surroundClassName);
-        ReflectionUtils.getConstructor(surroundClass, layoutClass).newInstance(layout);
-        return true;
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Bindings
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Performs artifacts bindings after building components tree.
+	 */
+	private void performBindings(LayoutInfo layout) throws Exception {
+		// bind SurroundSupport
+		run(layout, new IBindingProcessor() {
+			public boolean run(LayoutInfo layout,
+					ClassLoader classLoader,
+					Class<?> layoutClass,
+					String layoutName) throws Exception {
+				String surroundClassName = layoutName + "SurroundSupport";
+				Class<?> surroundClass = classLoader.loadClass(surroundClassName);
+				ReflectionUtils.getConstructor(surroundClass, layoutClass).newInstance(layout);
+				return true;
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * The processor to use with {@link LayoutJavaInfoParticipator#run(LayoutInfo, IBindingProcessor)}
-   * .
-   */
-  private interface IBindingProcessor {
-    boolean run(LayoutInfo layout, ClassLoader classLoader, Class<?> layoutClass, String layoutName)
-        throws Exception;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * The processor to use with {@link LayoutJavaInfoParticipator#run(LayoutInfo, IBindingProcessor)}
+	 * .
+	 */
+	private interface IBindingProcessor {
+		boolean run(LayoutInfo layout, ClassLoader classLoader, Class<?> layoutClass, String layoutName)
+				throws Exception;
+	}
 
-  /**
-   * Uses {@link IBindingProcessor} to attempt to perform binding by class of {@link LayoutInfo} and
-   * any of its super classes. Trick is that sometimes artifact is bound not to the exact class of
-   * {@link LayoutInfo}, but to some of its super classes, so we should check them too.
-   */
-  private static void run(final LayoutInfo layout, final IBindingProcessor processor) {
-    Class<?> layoutClass = layout.getClass();
-    while (layoutClass != null) {
-      final ClassLoader classLoader = ReflectionUtils.getClassLoader(layoutClass);
-      // prepare name of Layout without "Info" suffix
-      final String layoutName;
-      {
-        String layoutClassName = layoutClass.getName();
-        layoutName = StringUtils.removeEnd(layoutClassName, "Info");
-      }
-      // bind safely
-      final Class<?> finalLayoutClass = layoutClass;
-      boolean success = ExecutionUtils.runObjectIgnore(new RunnableObjectEx<Boolean>() {
-        public Boolean runObject() throws Exception {
-          return processor.run(layout, classLoader, finalLayoutClass, layoutName);
-        }
-      }, false);
-      if (success) {
-        return;
-      }
-      // try super class
-      layoutClass = layoutClass.getSuperclass();
-    }
-  }
+	/**
+	 * Uses {@link IBindingProcessor} to attempt to perform binding by class of {@link LayoutInfo} and
+	 * any of its super classes. Trick is that sometimes artifact is bound not to the exact class of
+	 * {@link LayoutInfo}, but to some of its super classes, so we should check them too.
+	 */
+	private static void run(final LayoutInfo layout, final IBindingProcessor processor) {
+		Class<?> layoutClass = layout.getClass();
+		while (layoutClass != null) {
+			final ClassLoader classLoader = ReflectionUtils.getClassLoader(layoutClass);
+			// prepare name of Layout without "Info" suffix
+			final String layoutName;
+			{
+				String layoutClassName = layoutClass.getName();
+				layoutName = StringUtils.removeEnd(layoutClassName, "Info");
+			}
+			// bind safely
+			final Class<?> finalLayoutClass = layoutClass;
+			boolean success = ExecutionUtils.runObjectIgnore(new RunnableObjectEx<Boolean>() {
+				public Boolean runObject() throws Exception {
+					return processor.run(layout, classLoader, finalLayoutClass, layoutName);
+				}
+			}, false);
+			if (success) {
+				return;
+			}
+			// try super class
+			layoutClass = layoutClass.getSuperclass();
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/LayoutNameSupport.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/LayoutNameSupport.java
index d475b20cb..38313ff4b 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/LayoutNameSupport.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/LayoutNameSupport.java
@@ -27,48 +27,48 @@
  * @coverage swing.model.layout
  */
 public final class LayoutNameSupport
-    extends
-      org.eclipse.wb.internal.core.model.layout.LayoutNameSupport<LayoutInfo> {
-  public final static String[] TEMPLATES = new String[]{
-      "${layoutAcronym}_${containerName}",
-      "${layoutAcronym}${containerName-cap}",
-      "${containerName}${layoutClassName}",
-      "${defaultName}"};
+extends
+org.eclipse.wb.internal.core.model.layout.LayoutNameSupport<LayoutInfo> {
+	public final static String[] TEMPLATES = new String[]{
+			"${layoutAcronym}_${containerName}",
+			"${layoutAcronym}${containerName-cap}",
+			"${containerName}${layoutClassName}",
+	"${defaultName}"};
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public LayoutNameSupport(LayoutInfo layout) {
-    super(layout);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public LayoutNameSupport(LayoutInfo layout) {
+		super(layout);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utilities
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getTemplate() {
-    IPreferenceStore preferences = m_childInfo.getDescription().getToolkit().getPreferences();
-    String template = preferences.getString(IPreferenceConstants.P_LAYOUT_NAME_TEMPLATE);
-    if (!isValidTemplate(TEMPLATES, template)) {
-      template = getTemplateForDefault();
-    }
-    return template;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utilities
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getTemplate() {
+		IPreferenceStore preferences = m_childInfo.getDescription().getToolkit().getPreferences();
+		String template = preferences.getString(IPreferenceConstants.P_LAYOUT_NAME_TEMPLATE);
+		if (!isValidTemplate(TEMPLATES, template)) {
+			template = getTemplateForDefault();
+		}
+		return template;
+	}
 
-  @Override
-  protected Map<String, String> getValueMap() {
-    // prepare variables
-    Map<String, String> valueMap = Maps.newTreeMap();
-    {
-      valueMap.put("layoutAcronym", getAcronym());
-      valueMap.put("layoutClassName", getClassName());
-      valueMap.put("containerName", getParentName());
-      valueMap.put("containerName-cap", getParentNameCap());
-    }
-    return valueMap;
-  }
+	@Override
+	protected Map<String, String> getValueMap() {
+		// prepare variables
+		Map<String, String> valueMap = Maps.newTreeMap();
+		{
+			valueMap.put("layoutAcronym", getAcronym());
+			valueMap.put("layoutClassName", getClassName());
+			valueMap.put("containerName", getParentName());
+			valueMap.put("containerName-cap", getParentNameCap());
+		}
+		return valueMap;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/LayoutPresentation.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/LayoutPresentation.java
index 2693ed064..06dc7e8ef 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/LayoutPresentation.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/LayoutPresentation.java
@@ -20,22 +20,22 @@
  * @coverage swing.model.layout
  */
 public final class LayoutPresentation extends DefaultJavaInfoPresentation {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public LayoutPresentation(LayoutInfo layoutInfo) {
-    super(layoutInfo);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public LayoutPresentation(LayoutInfo layoutInfo) {
+		super(layoutInfo);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IObjectPresentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean isVisible() throws Exception {
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IObjectPresentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean isVisible() throws Exception {
+		return false;
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/absolute/AbsoluteLayoutCreationSupport.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/absolute/AbsoluteLayoutCreationSupport.java
index 1fa6b9e91..1da2a268e 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/absolute/AbsoluteLayoutCreationSupport.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/absolute/AbsoluteLayoutCreationSupport.java
@@ -27,77 +27,77 @@
  * @coverage swing.model.layout
  */
 public final class AbsoluteLayoutCreationSupport extends CreationSupport {
-  private Expression m_expression;
+	private Expression m_expression;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbsoluteLayoutCreationSupport() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbsoluteLayoutCreationSupport() {
+	}
 
-  public AbsoluteLayoutCreationSupport(Expression expression) {
-    Assert.isNotNull(expression);
-    m_expression = expression;
-  }
+	public AbsoluteLayoutCreationSupport(Expression expression) {
+		Assert.isNotNull(expression);
+		m_expression = expression;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    return m_javaInfo.getEditor().getSource(m_expression);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		return m_javaInfo.getEditor().getSource(m_expression);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean isJavaInfo(ASTNode node) {
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean isJavaInfo(ASTNode node) {
+		return false;
+	}
 
-  @Override
-  public ASTNode getNode() {
-    return m_expression;
-  }
+	@Override
+	public ASTNode getNode() {
+		return m_expression;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Delete
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean canDelete() {
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Delete
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean canDelete() {
+		return true;
+	}
 
-  @Override
-  public void delete() throws Exception {
-    JavaInfo parent = m_javaInfo.getParentJava();
-    parent.removeChild(m_javaInfo);
-  }
+	@Override
+	public void delete() throws Exception {
+		JavaInfo parent = m_javaInfo.getParentJava();
+		parent.removeChild(m_javaInfo);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Add
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String add_getSource(NodeTarget target) throws Exception {
-    return "null";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Add
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String add_getSource(NodeTarget target) throws Exception {
+		return "null";
+	}
 
-  @Override
-  public void add_setSourceExpression(Expression expression) throws Exception {
-    Assert.isNotNull(expression);
-    m_expression = expression;
-    // set object (to initialize JavaInfo)
-    m_javaInfo.setObject(null);
-  }
+	@Override
+	public void add_setSourceExpression(Expression expression) throws Exception {
+		Assert.isNotNull(expression);
+		m_expression = expression;
+		// set object (to initialize JavaInfo)
+		m_javaInfo.setObject(null);
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/absolute/AbsoluteLayoutInfo.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/absolute/AbsoluteLayoutInfo.java
index ca82187a6..916da8a9a 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/absolute/AbsoluteLayoutInfo.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/absolute/AbsoluteLayoutInfo.java
@@ -45,349 +45,349 @@
  * @coverage swing.model.layout
  */
 public final class AbsoluteLayoutInfo extends AbstractAbsoluteLayoutInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbsoluteLayoutInfo(AstEditor editor, CreationSupport creationSupport) throws Exception {
-    super(editor, new ComponentDescription(null), creationSupport);
-    ObjectInfoUtils.setNewId(this);
-    getDescription().setToolkit(ToolkitProvider.DESCRIPTION);
-    getDescription().setOrder("first");
-    getDescription().setIcon(Activator.getImage("info/layout/absolute/layout.gif"));
-    setVariableSupport(new AbsoluteLayoutVariableSupport(this));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbsoluteLayoutInfo(AstEditor editor, CreationSupport creationSupport) throws Exception {
+		super(editor, new ComponentDescription(null), creationSupport);
+		ObjectInfoUtils.setNewId(this);
+		getDescription().setToolkit(ToolkitProvider.DESCRIPTION);
+		getDescription().setOrder("first");
+		getDescription().setIcon(Activator.getImage("info/layout/absolute/layout.gif"));
+		setVariableSupport(new AbsoluteLayoutVariableSupport(this));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Properties
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected List<Property> getPropertyList() throws Exception {
-    return Collections.emptyList();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Properties
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected List<Property> getPropertyList() throws Exception {
+		return Collections.emptyList();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Conversion
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void removeComponentConstraints(ContainerInfo container, ComponentInfo component)
-      throws Exception {
-    super.removeComponentConstraints(container, component);
-    // remove absolute location/size invocations
-    component.removeMethodInvocations("setLocation(int,int)");
-    component.removeMethodInvocations("setLocation(java.awt.Point)");
-    component.removeMethodInvocations("setSize(int,int)");
-    component.removeMethodInvocations("setSize(java.awt.Dimension)");
-    component.removeMethodInvocations("setBounds(int,int,int,int)");
-    component.removeMethodInvocations("setBounds(java.awt.Rectangle)");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Conversion
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void removeComponentConstraints(ContainerInfo container, ComponentInfo component)
+			throws Exception {
+		super.removeComponentConstraints(container, component);
+		// remove absolute location/size invocations
+		component.removeMethodInvocations("setLocation(int,int)");
+		component.removeMethodInvocations("setLocation(java.awt.Point)");
+		component.removeMethodInvocations("setSize(int,int)");
+		component.removeMethodInvocations("setSize(java.awt.Dimension)");
+		component.removeMethodInvocations("setBounds(int,int,int,int)");
+		component.removeMethodInvocations("setBounds(java.awt.Rectangle)");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Variable support
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static class AbsoluteLayoutVariableSupport extends VariableSupport {
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public AbsoluteLayoutVariableSupport(JavaInfo javaInfo) {
-      super(javaInfo);
-    }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Variable support
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static class AbsoluteLayoutVariableSupport extends VariableSupport {
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public AbsoluteLayoutVariableSupport(JavaInfo javaInfo) {
+			super(javaInfo);
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Object
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public String toString() {
-      return "absolute";
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Object
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public String toString() {
+			return "absolute";
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Name
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public boolean hasName() {
-      return false;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Name
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public boolean hasName() {
+			return false;
+		}
 
-    @Override
-    public String getName() {
-      throw new IllegalStateException();
-    }
+		@Override
+		public String getName() {
+			throw new IllegalStateException();
+		}
 
-    @Override
-    public void setName(String newName) throws Exception {
-      throw new IllegalStateException();
-    }
+		@Override
+		public void setName(String newName) throws Exception {
+			throw new IllegalStateException();
+		}
 
-    @Override
-    public String getTitle() throws Exception {
-      throw new IllegalStateException();
-    }
+		@Override
+		public String getTitle() throws Exception {
+			throw new IllegalStateException();
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Expressions
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public String getReferenceExpression(NodeTarget target) throws Exception {
-      throw new IllegalStateException();
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Expressions
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public String getReferenceExpression(NodeTarget target) throws Exception {
+			throw new IllegalStateException();
+		}
 
-    @Override
-    public String getAccessExpression(NodeTarget target) throws Exception {
-      throw new IllegalStateException();
-    }
+		@Override
+		public String getAccessExpression(NodeTarget target) throws Exception {
+			throw new IllegalStateException();
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Conversion
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public boolean canConvertLocalToField() {
-      return false;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Conversion
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public boolean canConvertLocalToField() {
+			return false;
+		}
 
-    @Override
-    public void convertLocalToField() throws Exception {
-      throw new IllegalStateException();
-    }
+		@Override
+		public void convertLocalToField() throws Exception {
+			throw new IllegalStateException();
+		}
 
-    @Override
-    public boolean canConvertFieldToLocal() {
-      return false;
-    }
+		@Override
+		public boolean canConvertFieldToLocal() {
+			return false;
+		}
 
-    @Override
-    public void convertFieldToLocal() throws Exception {
-      throw new IllegalStateException();
-    }
+		@Override
+		public void convertFieldToLocal() throws Exception {
+			throw new IllegalStateException();
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Target
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public StatementTarget getStatementTarget() throws Exception {
-      throw new IllegalStateException();
-    }
-  }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Target
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public StatementTarget getStatementTarget() throws Exception {
+			throw new IllegalStateException();
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Bounds property
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void setBoundsX(ComponentInfo component, int value) throws Exception {
-    Rectangle modelBounds = component.getModelBounds();
-    Point location = new Point(value, modelBounds.y);
-    command_BOUNDS(component, location, null);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Bounds property
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void setBoundsX(ComponentInfo component, int value) throws Exception {
+		Rectangle modelBounds = component.getModelBounds();
+		Point location = new Point(value, modelBounds.y);
+		command_BOUNDS(component, location, null);
+	}
 
-  @Override
-  protected void setBoundsY(ComponentInfo component, int value) throws Exception {
-    Rectangle modelBounds = component.getModelBounds();
-    Point location = new Point(modelBounds.x, value);
-    command_BOUNDS(component, location, null);
-  }
+	@Override
+	protected void setBoundsY(ComponentInfo component, int value) throws Exception {
+		Rectangle modelBounds = component.getModelBounds();
+		Point location = new Point(modelBounds.x, value);
+		command_BOUNDS(component, location, null);
+	}
 
-  @Override
-  protected void setBoundsWidth(ComponentInfo component, int value) throws Exception {
-    Rectangle modelBounds = component.getModelBounds();
-    Dimension size = new Dimension(value, modelBounds.height);
-    command_BOUNDS(component, null, size);
-  }
+	@Override
+	protected void setBoundsWidth(ComponentInfo component, int value) throws Exception {
+		Rectangle modelBounds = component.getModelBounds();
+		Dimension size = new Dimension(value, modelBounds.height);
+		command_BOUNDS(component, null, size);
+	}
 
-  @Override
-  protected void setBoundsHeight(ComponentInfo component, int value) throws Exception {
-    Rectangle modelBounds = component.getModelBounds();
-    Dimension size = new Dimension(modelBounds.width, value);
-    command_BOUNDS(component, null, size);
-  }
+	@Override
+	protected void setBoundsHeight(ComponentInfo component, int value) throws Exception {
+		Rectangle modelBounds = component.getModelBounds();
+		Dimension size = new Dimension(modelBounds.width, value);
+		command_BOUNDS(component, null, size);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Perform "move" or "resize" operation. Modifies location/size values by modifying appropriate
-   * "setLocation", "setSize", "setBounds" arguments.
-   *
-   * @param component
-   *          the {@link ComponentInfo} which modifications applies to.
-   * @param location
-   *          the {@link Point} of new location of component. May be null.
-   * @param size
-   *          the {@link Dimension} of new size of component. May be null.
-   */
-  @Override
-  public void command_BOUNDS(ComponentInfo component, Point location, Dimension size)
-      throws Exception {
-    command_BOUNDS0(component, location, size);
-    // apply creation flow
-    if (location != null && useCreationFlow()) {
-      AbsoluteLayoutCreationFlowSupport.apply(
-          getContainer(),
-          getComponents(),
-          component,
-          location,
-          size);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Perform "move" or "resize" operation. Modifies location/size values by modifying appropriate
+	 * "setLocation", "setSize", "setBounds" arguments.
+	 *
+	 * @param component
+	 *          the {@link ComponentInfo} which modifications applies to.
+	 * @param location
+	 *          the {@link Point} of new location of component. May be null.
+	 * @param size
+	 *          the {@link Dimension} of new size of component. May be null.
+	 */
+	@Override
+	public void command_BOUNDS(ComponentInfo component, Point location, Dimension size)
+			throws Exception {
+		command_BOUNDS0(component, location, size);
+		// apply creation flow
+		if (location != null && useCreationFlow()) {
+			AbsoluteLayoutCreationFlowSupport.apply(
+					getContainer(),
+					getComponents(),
+					component,
+					location,
+					size);
+		}
+	}
 
-  public void command_BOUNDS0(ComponentInfo component, Point location, Dimension size)
-      throws Exception {
-    Assert.isLegal(location != null || size != null, "Either location or size may not be null.");
-    AstEditor editor = component.getEditor();
-    // setBounds(int,int,int,int)
-    {
-      MethodInvocation mi = component.getMethodInvocation("setBounds(int,int,int,int)");
-      if (mi != null) {
-        if (location != null) {
-          setExpression(mi, 0, location.x);
-          setExpression(mi, 1, location.y);
-        }
-        if (size != null) {
-          setExpression(mi, 2, size.width);
-          setExpression(mi, 3, size.height);
-        }
-        return;
-      }
-    }
-    // setBounds(java.awt.Rectangle)
-    {
-      MethodInvocation mi = component.getMethodInvocation("setBounds(java.awt.Rectangle)");
-      if (mi != null) {
-        Rectangle widgetBounds = component.getModelBounds();
-        Expression exp = (Expression) mi.arguments().get(0);
-        String newCode = "new java.awt.Rectangle(";
-        if (location != null) {
-          newCode += location.x + ", " + location.y;
-        } else {
-          newCode += widgetBounds.x + ", " + widgetBounds.y;
-        }
-        newCode += ", ";
-        if (size != null) {
-          newCode += size.width + ", " + size.height;
-        } else {
-          newCode += widgetBounds.width + ", " + widgetBounds.height;
-        }
-        newCode += ")";
-        editor.replaceExpression(exp, newCode);
-        return;
-      }
-    }
-    boolean setLocationFound = false;
-    boolean setSizeFound = false;
-    if (location != null) {
-      // setLocation(int,int)
-      {
-        MethodInvocation mi = component.getMethodInvocation("setLocation(int,int)");
-        if (mi != null) {
-          setLocationFound = true;
-          setExpression(mi, 0, location.x);
-          setExpression(mi, 1, location.y);
-        }
-      }
-      // setLocation(new java.awt.Point)
-      {
-        MethodInvocation mi = component.getMethodInvocation("setLocation(java.awt.Point)");
-        if (mi != null) {
-          setLocationFound = true;
-          Expression exp = (Expression) mi.arguments().get(0);
-          String newCode = "new java.awt.Point(";
-          newCode += location.x + ", " + location.y + ")";
-          editor.replaceExpression(exp, newCode);
-        }
-      }
-    }
-    if (size != null) {
-      // setSize(int,int)
-      {
-        MethodInvocation mi = component.getMethodInvocation("setSize(int,int)");
-        if (mi != null) {
-          setSizeFound = true;
-          setExpression(mi, 0, size.width);
-          setExpression(mi, 1, size.height);
-        }
-      }
-      // setSize(new java.awt.Dimension)
-      {
-        MethodInvocation mi = component.getMethodInvocation("setSize(java.awt.Dimension)");
-        if (mi != null) {
-          setSizeFound = true;
-          Expression exp = (Expression) mi.arguments().get(0);
-          String newCode = "new java.awt.Dimension(";
-          newCode += size.width + ", " + size.height + ")";
-          editor.replaceExpression(exp, newCode);
-        }
-      }
-    }
-    // nothing found, add setBounds(int, int, int, int)
-    if (location != null && !setLocationFound && size != null && !setSizeFound) {
-      component.addMethodInvocation("setBounds(int,int,int,int)", location.x
-          + ", "
-          + location.y
-          + ", "
-          + size.width
-          + ", "
-          + size.height);
-      return;
-    }
-    // something found, add as needed
-    if (location != null && !setLocationFound) {
-      component.addMethodInvocation("setLocation(int,int)", location.x + ", " + location.y);
-    }
-    if (size != null && !setSizeFound) {
-      component.addMethodInvocation("setSize(int,int)", size.width + ", " + size.height);
-    }
-  }
+	public void command_BOUNDS0(ComponentInfo component, Point location, Dimension size)
+			throws Exception {
+		Assert.isLegal(location != null || size != null, "Either location or size may not be null.");
+		AstEditor editor = component.getEditor();
+		// setBounds(int,int,int,int)
+		{
+			MethodInvocation mi = component.getMethodInvocation("setBounds(int,int,int,int)");
+			if (mi != null) {
+				if (location != null) {
+					setExpression(mi, 0, location.x);
+					setExpression(mi, 1, location.y);
+				}
+				if (size != null) {
+					setExpression(mi, 2, size.width);
+					setExpression(mi, 3, size.height);
+				}
+				return;
+			}
+		}
+		// setBounds(java.awt.Rectangle)
+		{
+			MethodInvocation mi = component.getMethodInvocation("setBounds(java.awt.Rectangle)");
+			if (mi != null) {
+				Rectangle widgetBounds = component.getModelBounds();
+				Expression exp = (Expression) mi.arguments().get(0);
+				String newCode = "new java.awt.Rectangle(";
+				if (location != null) {
+					newCode += location.x + ", " + location.y;
+				} else {
+					newCode += widgetBounds.x + ", " + widgetBounds.y;
+				}
+				newCode += ", ";
+				if (size != null) {
+					newCode += size.width + ", " + size.height;
+				} else {
+					newCode += widgetBounds.width + ", " + widgetBounds.height;
+				}
+				newCode += ")";
+				editor.replaceExpression(exp, newCode);
+				return;
+			}
+		}
+		boolean setLocationFound = false;
+		boolean setSizeFound = false;
+		if (location != null) {
+			// setLocation(int,int)
+			{
+				MethodInvocation mi = component.getMethodInvocation("setLocation(int,int)");
+				if (mi != null) {
+					setLocationFound = true;
+					setExpression(mi, 0, location.x);
+					setExpression(mi, 1, location.y);
+				}
+			}
+			// setLocation(new java.awt.Point)
+			{
+				MethodInvocation mi = component.getMethodInvocation("setLocation(java.awt.Point)");
+				if (mi != null) {
+					setLocationFound = true;
+					Expression exp = (Expression) mi.arguments().get(0);
+					String newCode = "new java.awt.Point(";
+					newCode += location.x + ", " + location.y + ")";
+					editor.replaceExpression(exp, newCode);
+				}
+			}
+		}
+		if (size != null) {
+			// setSize(int,int)
+			{
+				MethodInvocation mi = component.getMethodInvocation("setSize(int,int)");
+				if (mi != null) {
+					setSizeFound = true;
+					setExpression(mi, 0, size.width);
+					setExpression(mi, 1, size.height);
+				}
+			}
+			// setSize(new java.awt.Dimension)
+			{
+				MethodInvocation mi = component.getMethodInvocation("setSize(java.awt.Dimension)");
+				if (mi != null) {
+					setSizeFound = true;
+					Expression exp = (Expression) mi.arguments().get(0);
+					String newCode = "new java.awt.Dimension(";
+					newCode += size.width + ", " + size.height + ")";
+					editor.replaceExpression(exp, newCode);
+				}
+			}
+		}
+		// nothing found, add setBounds(int, int, int, int)
+		if (location != null && !setLocationFound && size != null && !setSizeFound) {
+			component.addMethodInvocation("setBounds(int,int,int,int)", location.x
+					+ ", "
+					+ location.y
+					+ ", "
+					+ size.width
+					+ ", "
+					+ size.height);
+			return;
+		}
+		// something found, add as needed
+		if (location != null && !setLocationFound) {
+			component.addMethodInvocation("setLocation(int,int)", location.x + ", " + location.y);
+		}
+		if (size != null && !setSizeFound) {
+			component.addMethodInvocation("setSize(int,int)", size.width + ", " + size.height);
+		}
+	}
 
-  private boolean useCreationFlow() {
-    return getToolkit().getPreferences().getBoolean(
-        org.eclipse.wb.internal.core.model.layout.absolute.IPreferenceConstants.P_CREATION_FLOW);
-  }
+	private boolean useCreationFlow() {
+		return getToolkit().getPreferences().getBoolean(
+				org.eclipse.wb.internal.core.model.layout.absolute.IPreferenceConstants.P_CREATION_FLOW);
+	}
 
-  private ToolkitDescription getToolkit() {
-    return getDescription().getToolkit();
-  }
+	private ToolkitDescription getToolkit() {
+		return getDescription().getToolkit();
+	}
 
-  /**
-   * Set the expression as integer value to avoid cast expressions in Designer code.
-   */
-  private void setExpression(MethodInvocation mi, int index, int arg) throws Exception {
-    getEditor().replaceExpression(
-        (Expression) mi.arguments().get(index),
-        IntegerConverter.INSTANCE.toJavaSource(this, Integer.valueOf(arg)));
-  }
+	/**
+	 * Set the expression as integer value to avoid cast expressions in Designer code.
+	 */
+	private void setExpression(MethodInvocation mi, int index, int arg) throws Exception {
+		getEditor().replaceExpression(
+				(Expression) mi.arguments().get(index),
+				IntegerConverter.INSTANCE.toJavaSource(this, Integer.valueOf(arg)));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link AbsoluteLayoutInfo} that generate code <code>setLayout(null)</code>.
-   */
-  public static AbsoluteLayoutInfo createExplicit(AstEditor editor) throws Exception {
-    AbsoluteLayoutCreationSupport creationSupport = new AbsoluteLayoutCreationSupport();
-    return new AbsoluteLayoutInfo(editor, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link AbsoluteLayoutInfo} that generate code <code>setLayout(null)</code>.
+	 */
+	public static AbsoluteLayoutInfo createExplicit(AstEditor editor) throws Exception {
+		AbsoluteLayoutCreationSupport creationSupport = new AbsoluteLayoutCreationSupport();
+		return new AbsoluteLayoutInfo(editor, creationSupport);
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/absolute/AbsoluteLayoutSurroundProcessor.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/absolute/AbsoluteLayoutSurroundProcessor.java
index 9251cacaf..c3ae12ddd 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/absolute/AbsoluteLayoutSurroundProcessor.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/absolute/AbsoluteLayoutSurroundProcessor.java
@@ -29,61 +29,61 @@
  * @coverage swing.model.layout
  */
 public final class AbsoluteLayoutSurroundProcessor
-    implements
-      ISurroundProcessor<ContainerInfo, ComponentInfo> {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final Object INSTANCE = new AbsoluteLayoutSurroundProcessor();
+implements
+ISurroundProcessor<ContainerInfo, ComponentInfo> {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final Object INSTANCE = new AbsoluteLayoutSurroundProcessor();
 
-  private AbsoluteLayoutSurroundProcessor() {
-  }
+	private AbsoluteLayoutSurroundProcessor() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ISurroundProcessor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public boolean filter(ContainerInfo sourceContainer, ContainerInfo targetContainer)
-      throws Exception {
-    String targetClassName = targetContainer.getDescription().getComponentClass().getName();
-    boolean isJPanel = targetClassName.equals("javax.swing.JPanel");
-    return sourceContainer.hasLayout()
-        && sourceContainer.getLayout() instanceof AbsoluteLayoutInfo
-        && isJPanel;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ISurroundProcessor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public boolean filter(ContainerInfo sourceContainer, ContainerInfo targetContainer)
+			throws Exception {
+		String targetClassName = targetContainer.getDescription().getComponentClass().getName();
+		boolean isJPanel = targetClassName.equals("javax.swing.JPanel");
+		return sourceContainer.hasLayout()
+				&& sourceContainer.getLayout() instanceof AbsoluteLayoutInfo
+				&& isJPanel;
+	}
 
-  public void move(ContainerInfo sourceContainer,
-      ContainerInfo targetContainer,
-      List<ComponentInfo> components) throws Exception {
-    // set absolute layout for target
-    AbsoluteLayoutInfo targetLayout;
-    {
-      targetLayout = AbsoluteLayoutInfo.createExplicit(targetContainer.getEditor());
-      targetContainer.setLayout(targetLayout);
-    }
-    // prepare expanded bounds for "targetContainer"
-    Point locationOffset;
-    {
-      Rectangle targetBounds =
-          (Rectangle) targetContainer.getArbitraryValue(AbsoluteLayoutSurroundSupport.BOUNDS_KEY);
-      targetBounds.expand(targetContainer.getInsets());
-      // prepare offset for components
-      locationOffset = targetBounds.getLocation().getNegated();
-      // set for "targetContainer" expanded bounds
-      AbsoluteLayoutInfo sourceLayout = (AbsoluteLayoutInfo) sourceContainer.getLayout();
-      sourceLayout.command_BOUNDS(
-          targetContainer,
-          targetBounds.getLocation(),
-          targetBounds.getSize());
-    }
-    // move components
-    for (ComponentInfo component : components) {
-      Rectangle bounds = component.getModelBounds().getTranslated(locationOffset);
-      targetLayout.command_MOVE(component, null);
-      targetLayout.command_BOUNDS(component, bounds.getLocation(), bounds.getSize());
-    }
-  }
+	public void move(ContainerInfo sourceContainer,
+			ContainerInfo targetContainer,
+			List<ComponentInfo> components) throws Exception {
+		// set absolute layout for target
+		AbsoluteLayoutInfo targetLayout;
+		{
+			targetLayout = AbsoluteLayoutInfo.createExplicit(targetContainer.getEditor());
+			targetContainer.setLayout(targetLayout);
+		}
+		// prepare expanded bounds for "targetContainer"
+		Point locationOffset;
+		{
+			Rectangle targetBounds =
+					(Rectangle) targetContainer.getArbitraryValue(AbsoluteLayoutSurroundSupport.BOUNDS_KEY);
+			targetBounds.expand(targetContainer.getInsets());
+			// prepare offset for components
+			locationOffset = targetBounds.getLocation().getNegated();
+			// set for "targetContainer" expanded bounds
+			AbsoluteLayoutInfo sourceLayout = (AbsoluteLayoutInfo) sourceContainer.getLayout();
+			sourceLayout.command_BOUNDS(
+					targetContainer,
+					targetBounds.getLocation(),
+					targetBounds.getSize());
+		}
+		// move components
+		for (ComponentInfo component : components) {
+			Rectangle bounds = component.getModelBounds().getTranslated(locationOffset);
+			targetLayout.command_MOVE(component, null);
+			targetLayout.command_BOUNDS(component, bounds.getLocation(), bounds.getSize());
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/absolute/AbsoluteLayoutSurroundSupport.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/absolute/AbsoluteLayoutSurroundSupport.java
index da655ce39..b51c0f117 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/absolute/AbsoluteLayoutSurroundSupport.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/absolute/AbsoluteLayoutSurroundSupport.java
@@ -25,42 +25,42 @@
  * @coverage swing.model.layout
  */
 public final class AbsoluteLayoutSurroundSupport extends LayoutSurroundSupport {
-  static final String BOUNDS_KEY = "SurroundSupport_BOUNDS";
-  private final AbsoluteLayoutInfo m_layout;
+	static final String BOUNDS_KEY = "SurroundSupport_BOUNDS";
+	private final AbsoluteLayoutInfo m_layout;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbsoluteLayoutSurroundSupport(AbsoluteLayoutInfo layout) {
-    super(layout);
-    m_layout = layout;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbsoluteLayoutSurroundSupport(AbsoluteLayoutInfo layout) {
+		super(layout);
+		m_layout = layout;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Operation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void addContainer(ContainerInfo container, List<ComponentInfo> components)
-      throws Exception {
-    //m_layout.add(container, components.get(0));
-    // prepare enclosing bounds
-    Rectangle enclosingRectangle;
-    {
-      enclosingRectangle = components.get(0).getModelBounds().getCopy();
-      for (ComponentInfo component : components) {
-        enclosingRectangle.union(component.getModelBounds());
-      }
-    }
-    // set bounds
-    m_layout.command_CREATE(container, components.get(0));
-    m_layout.command_BOUNDS(
-        container,
-        enclosingRectangle.getLocation(),
-        enclosingRectangle.getSize());
-    container.putArbitraryValue(BOUNDS_KEY, enclosingRectangle);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Operation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void addContainer(ContainerInfo container, List<ComponentInfo> components)
+			throws Exception {
+		//m_layout.add(container, components.get(0));
+		// prepare enclosing bounds
+		Rectangle enclosingRectangle;
+		{
+			enclosingRectangle = components.get(0).getModelBounds().getCopy();
+			for (ComponentInfo component : components) {
+				enclosingRectangle.union(component.getModelBounds());
+			}
+		}
+		// set bounds
+		m_layout.command_CREATE(container, components.get(0));
+		m_layout.command_BOUNDS(
+				container,
+				enclosingRectangle.getLocation(),
+				enclosingRectangle.getSize());
+		container.putArbitraryValue(BOUNDS_KEY, enclosingRectangle);
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/absolute/AbstractAbsoluteLayoutInfo.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/absolute/AbstractAbsoluteLayoutInfo.java
index b1b27dc41..df4e13fb4 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/absolute/AbstractAbsoluteLayoutInfo.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/absolute/AbstractAbsoluteLayoutInfo.java
@@ -51,225 +51,225 @@
  * @coverage swing.model.layout
  */
 public abstract class AbstractAbsoluteLayoutInfo extends LayoutInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractAbsoluteLayoutInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractAbsoluteLayoutInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Initialize
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void initialize() throws Exception {
-    super.initialize();
-    // context menu
-    addBroadcastListener(new ObjectEventListener() {
-      @Override
-      public void addContextMenu(List<? extends ObjectInfo> objects,
-          ObjectInfo object,
-          IMenuManager manager) throws Exception {
-        if (isManagedObject(object)) {
-          ComponentInfo component = (ComponentInfo) object;
-          contributeComponentContextMenu(manager, component);
-        }
-      }
-    });
-    addBroadcastListener(new JavaInfoAddProperties() {
-      public void invoke(JavaInfo javaInfo, List<Property> properties) throws Exception {
-        if (javaInfo instanceof ComponentInfo && javaInfo.getParent() == getContainer()) {
-          ComponentInfo component = (ComponentInfo) javaInfo;
-          properties.add(getBoundsProperty(component));
-        }
-      }
-    });
-    addBroadcastListener(new JavaEventListener() {
-      @Override
-      public void canMove(JavaInfo javaInfo, boolean[] forceMoveEnable, boolean[] forceMoveDisable)
-          throws Exception {
-        if (javaInfo instanceof ComponentInfo && javaInfo.getParent() == getContainer()) {
-          forceMoveEnable[0] = true;
-        }
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Initialize
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void initialize() throws Exception {
+		super.initialize();
+		// context menu
+		addBroadcastListener(new ObjectEventListener() {
+			@Override
+			public void addContextMenu(List<? extends ObjectInfo> objects,
+					ObjectInfo object,
+					IMenuManager manager) throws Exception {
+				if (isManagedObject(object)) {
+					ComponentInfo component = (ComponentInfo) object;
+					contributeComponentContextMenu(manager, component);
+				}
+			}
+		});
+		addBroadcastListener(new JavaInfoAddProperties() {
+			public void invoke(JavaInfo javaInfo, List<Property> properties) throws Exception {
+				if (javaInfo instanceof ComponentInfo && javaInfo.getParent() == getContainer()) {
+					ComponentInfo component = (ComponentInfo) javaInfo;
+					properties.add(getBoundsProperty(component));
+				}
+			}
+		});
+		addBroadcastListener(new JavaEventListener() {
+			@Override
+			public void canMove(JavaInfo javaInfo, boolean[] forceMoveEnable, boolean[] forceMoveDisable)
+					throws Exception {
+				if (javaInfo instanceof ComponentInfo && javaInfo.getParent() == getContainer()) {
+					forceMoveEnable[0] = true;
+				}
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Context menu
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Contributes {@link Action}'s into {@link ComponentInfo} context menu.
-   */
-  private void contributeComponentContextMenu(IMenuManager manager, final ComponentInfo component) {
-    // order
-    {
-      List<ComponentInfo> components = getContainer().getChildrenComponents();
-      new OrderingSupport(components, component).contributeActions(manager);
-    }
-    // auto-size
-    {
-      IAction action =
-          new ObjectInfoAction(component, ModelMessages.AbstractAbsoluteLayoutInfo_autosize,
-              DesignerPlugin.getImageDescriptor("info/layout/absolute/fit_to_size.png")) {
-            @Override
-            protected void runEx() throws Exception {
-              command_BOUNDS(component, null, component.getPreferredSize());
-            }
-          };
-      manager.appendToGroup(IContextMenuConstants.GROUP_CONSTRAINTS, action);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Context menu
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Contributes {@link Action}'s into {@link ComponentInfo} context menu.
+	 */
+	private void contributeComponentContextMenu(IMenuManager manager, final ComponentInfo component) {
+		// order
+		{
+			List<ComponentInfo> components = getContainer().getChildrenComponents();
+			new OrderingSupport(components, component).contributeActions(manager);
+		}
+		// auto-size
+		{
+			IAction action =
+					new ObjectInfoAction(component, ModelMessages.AbstractAbsoluteLayoutInfo_autosize,
+							DesignerPlugin.getImageDescriptor("info/layout/absolute/fit_to_size.png")) {
+				@Override
+				protected void runEx() throws Exception {
+					command_BOUNDS(component, null, component.getPreferredSize());
+				}
+			};
+			manager.appendToGroup(IContextMenuConstants.GROUP_CONSTRAINTS, action);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Properties
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected List<Property> getPropertyList() throws Exception {
-    return Collections.emptyList();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Properties
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected List<Property> getPropertyList() throws Exception {
+		return Collections.emptyList();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Bounds Property
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected abstract void setBoundsX(ComponentInfo component, int value) throws Exception;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Bounds Property
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected abstract void setBoundsX(ComponentInfo component, int value) throws Exception;
 
-  protected abstract void setBoundsY(ComponentInfo component, int value) throws Exception;
+	protected abstract void setBoundsY(ComponentInfo component, int value) throws Exception;
 
-  protected abstract void setBoundsWidth(ComponentInfo component, int value) throws Exception;
+	protected abstract void setBoundsWidth(ComponentInfo component, int value) throws Exception;
 
-  protected abstract void setBoundsHeight(ComponentInfo component, int value) throws Exception;
+	protected abstract void setBoundsHeight(ComponentInfo component, int value) throws Exception;
 
-  private Property getBoundsProperty(ComponentInfo component) {
-    ComplexProperty boundsProperty = (ComplexProperty) component.getArbitraryValue(this);
-    if (boundsProperty == null) {
-      boundsProperty = new ComplexProperty("Bounds", null);
-      boundsProperty.setCategory(PropertyCategory.system(5));
-      boundsProperty.setModified(true);
-      component.putArbitraryValue(this, boundsProperty);
-      // x
-      BoundsProperty<?> xProperty = new BoundsProperty<ComponentInfo>(component, "x") {
-        @Override
-        public void setValue2(int value, Rectangle modelBounds) throws Exception {
-          setBoundsX(m_component, value);
-        }
-      };
-      // y
-      BoundsProperty<?> yProperty = new BoundsProperty<ComponentInfo>(component, "y") {
-        @Override
-        public void setValue2(int value, Rectangle modelBounds) throws Exception {
-          setBoundsY(m_component, value);
-        }
-      };
-      // width
-      BoundsProperty<?> widthProperty = new BoundsProperty<ComponentInfo>(component, "width") {
-        @Override
-        public void setValue2(int value, Rectangle modelBounds) throws Exception {
-          setBoundsWidth(m_component, value);
-        }
-      };
-      // height
-      BoundsProperty<?> heightProperty = new BoundsProperty<ComponentInfo>(component, "height") {
-        @Override
-        public void setValue2(int value, Rectangle modelBounds) throws Exception {
-          setBoundsHeight(m_component, value);
-        }
-      };
-      // set properties
-      boundsProperty.setProperties(new Property[]{
-          xProperty,
-          yProperty,
-          widthProperty,
-          heightProperty});
-    }
-    Rectangle modelBounds = component.getModelBounds();
-    if (modelBounds != null) {
-      boundsProperty.setText(MessageFormat.format(
-          "({0}, {1}, {2}, {3})",
-          modelBounds.x,
-          modelBounds.y,
-          modelBounds.width,
-          modelBounds.height));
-    }
-    return boundsProperty;
-  }
+	private Property getBoundsProperty(ComponentInfo component) {
+		ComplexProperty boundsProperty = (ComplexProperty) component.getArbitraryValue(this);
+		if (boundsProperty == null) {
+			boundsProperty = new ComplexProperty("Bounds", null);
+			boundsProperty.setCategory(PropertyCategory.system(5));
+			boundsProperty.setModified(true);
+			component.putArbitraryValue(this, boundsProperty);
+			// x
+			BoundsProperty<?> xProperty = new BoundsProperty<ComponentInfo>(component, "x") {
+				@Override
+				public void setValue2(int value, Rectangle modelBounds) throws Exception {
+					setBoundsX(m_component, value);
+				}
+			};
+			// y
+			BoundsProperty<?> yProperty = new BoundsProperty<ComponentInfo>(component, "y") {
+				@Override
+				public void setValue2(int value, Rectangle modelBounds) throws Exception {
+					setBoundsY(m_component, value);
+				}
+			};
+			// width
+			BoundsProperty<?> widthProperty = new BoundsProperty<ComponentInfo>(component, "width") {
+				@Override
+				public void setValue2(int value, Rectangle modelBounds) throws Exception {
+					setBoundsWidth(m_component, value);
+				}
+			};
+			// height
+			BoundsProperty<?> heightProperty = new BoundsProperty<ComponentInfo>(component, "height") {
+				@Override
+				public void setValue2(int value, Rectangle modelBounds) throws Exception {
+					setBoundsHeight(m_component, value);
+				}
+			};
+			// set properties
+			boundsProperty.setProperties(new Property[]{
+					xProperty,
+					yProperty,
+					widthProperty,
+					heightProperty});
+		}
+		Rectangle modelBounds = component.getModelBounds();
+		if (modelBounds != null) {
+			boundsProperty.setText(MessageFormat.format(
+					"({0}, {1}, {2}, {3})",
+					modelBounds.x,
+					modelBounds.y,
+					modelBounds.width,
+					modelBounds.height));
+		}
+		return boundsProperty;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Conversion
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void onSet() throws Exception {
-    for (ComponentInfo component : getContainer().getChildrenComponents()) {
-      Rectangle bounds = component.getBounds();
-      command_BOUNDS(component, bounds.getLocation(), bounds.getSize());
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Conversion
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void onSet() throws Exception {
+		for (ComponentInfo component : getContainer().getChildrenComponents()) {
+			Rectangle bounds = component.getBounds();
+			command_BOUNDS(component, bounds.getLocation(), bounds.getSize());
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Modifies location/size values by modifying appropriate "setLocation", "setSize", "setBounds"
-   * arguments.
-   *
-   * @param component
-   *          the {@link ComponentInfo} which modifications applies to.
-   * @param location
-   *          the {@link Point} of new location of component. May be null.
-   * @param size
-   *          the {@link Dimension} of new size of component. May be null.
-   */
-  public abstract void command_BOUNDS(ComponentInfo component, Point location, Dimension size)
-      throws Exception;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Modifies location/size values by modifying appropriate "setLocation", "setSize", "setBounds"
+	 * arguments.
+	 *
+	 * @param component
+	 *          the {@link ComponentInfo} which modifications applies to.
+	 * @param location
+	 *          the {@link Point} of new location of component. May be null.
+	 * @param size
+	 *          the {@link Dimension} of new size of component. May be null.
+	 */
+	public abstract void command_BOUNDS(ComponentInfo component, Point location, Dimension size)
+			throws Exception;
 
-  /**
-   * Performs create operation.
-   */
-  public void command_CREATE(ComponentInfo component, ComponentInfo nextComponent) throws Exception {
-    add(component, null, nextComponent);
-  }
+	/**
+	 * Performs create operation.
+	 */
+	public void command_CREATE(ComponentInfo component, ComponentInfo nextComponent) throws Exception {
+		add(component, null, nextComponent);
+	}
 
-  /**
-   * Performs reorder operation.
-   */
-  public void command_MOVE(ComponentInfo component, ComponentInfo nextComponent) throws Exception {
-    move(component, null, nextComponent);
-  }
+	/**
+	 * Performs reorder operation.
+	 */
+	public void command_MOVE(ComponentInfo component, ComponentInfo nextComponent) throws Exception {
+		move(component, null, nextComponent);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Clipboard
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void clipboardCopy_addComponentCommands(ComponentInfo component,
-      List<ClipboardCommand> commands) throws Exception {
-    final Rectangle bounds = component.getModelBounds();
-    commands.add(new LayoutClipboardCommand<AbstractAbsoluteLayoutInfo>(component) {
-      private static final long serialVersionUID = 0L;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Clipboard
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void clipboardCopy_addComponentCommands(ComponentInfo component,
+			List<ClipboardCommand> commands) throws Exception {
+		final Rectangle bounds = component.getModelBounds();
+		commands.add(new LayoutClipboardCommand<AbstractAbsoluteLayoutInfo>(component) {
+			private static final long serialVersionUID = 0L;
 
-      @Override
-      protected void add(AbstractAbsoluteLayoutInfo layout, ComponentInfo component)
-          throws Exception {
-        layout.command_CREATE(component, null);
-        layout.command_BOUNDS(component, bounds.getLocation(), bounds.getSize());
-      }
-    });
-  }
+			@Override
+			protected void add(AbstractAbsoluteLayoutInfo layout, ComponentInfo component)
+					throws Exception {
+				layout.command_CREATE(component, null);
+				layout.command_BOUNDS(component, bounds.getLocation(), bounds.getSize());
+			}
+		});
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/absolute/ConstraintsAbsoluteLayoutDataInfo.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/absolute/ConstraintsAbsoluteLayoutDataInfo.java
index 3f36219d5..73404c0f9 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/absolute/ConstraintsAbsoluteLayoutDataInfo.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/absolute/ConstraintsAbsoluteLayoutDataInfo.java
@@ -23,15 +23,15 @@
  * @coverage swing.model.layout
  */
 public final class ConstraintsAbsoluteLayoutDataInfo extends JavaInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ConstraintsAbsoluteLayoutDataInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-    JavaInfoUtils.setParameter(this, "visible", "false");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ConstraintsAbsoluteLayoutDataInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+		JavaInfoUtils.setParameter(this, "visible", "false");
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/absolute/ConstraintsAbsoluteLayoutInfo.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/absolute/ConstraintsAbsoluteLayoutInfo.java
index 9cfc06b10..f2790444a 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/absolute/ConstraintsAbsoluteLayoutInfo.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/absolute/ConstraintsAbsoluteLayoutInfo.java
@@ -46,157 +46,157 @@
  * @coverage swing.model.layout
  */
 public final class ConstraintsAbsoluteLayoutInfo extends AbstractAbsoluteLayoutInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ConstraintsAbsoluteLayoutInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ConstraintsAbsoluteLayoutInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constraints access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link ConstraintsAbsoluteLayoutDataInfo} for given {@link ComponentInfo}.
-   */
-  public static ConstraintsAbsoluteLayoutDataInfo getConstraints(final ComponentInfo component) {
-    return ExecutionUtils.runObject(new RunnableObjectEx<ConstraintsAbsoluteLayoutDataInfo>() {
-      public ConstraintsAbsoluteLayoutDataInfo runObject() throws Exception {
-        // prepare constraints
-        ConstraintsAbsoluteLayoutDataInfo constraints;
-        {
-          List<ConstraintsAbsoluteLayoutDataInfo> constraintsList =
-              component.getChildren(ConstraintsAbsoluteLayoutDataInfo.class);
-          Assert.isLegal(constraintsList.size() <= 1);
-          if (constraintsList.size() == 1) {
-            constraints = constraintsList.get(0);
-          } else {
-            String constraintsClassName;
-            {
-              ContainerInfo container = (ContainerInfo) component.getParent();
-              LayoutInfo layout = container.getLayout();
-              constraintsClassName =
-                  JavaInfoUtils.getParameter(layout, "absoluteLayout.constraintsClass");
-            }
-            constraints =
-                (ConstraintsAbsoluteLayoutDataInfo) JavaInfoUtils.createJavaInfo(
-                    component.getEditor(),
-                    constraintsClassName,
-                    new ConstructorCreationSupport());
-            // prepare add() invocation
-            InvocationChildAssociation association =
-                (InvocationChildAssociation) component.getAssociation();
-            MethodInvocation invocation = association.getInvocation();
-            // ensure LayoutData expression
-            Expression expression;
-            {
-              String source = constraints.getDescription().getCreation(null).getSource();
-              expression = constraints.getEditor().addInvocationArgument(invocation, 1, source);
-            }
-            // set CreationSupport
-            {
-              constraints.setCreationSupport(new ConstructorCreationSupport((ClassInstanceCreation) expression));
-              constraints.addRelatedNode(expression);
-            }
-            // set Association
-            constraints.setAssociation(new InvocationSecondaryAssociation(invocation));
-            // set VariableSupport
-            VariableSupport variableSupport = new EmptyVariableSupport(constraints, expression);
-            constraints.setVariableSupport(variableSupport);
-            // add
-            component.addChild(constraints);
-          }
-        }
-        // initialize and return
-        return constraints;
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constraints access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link ConstraintsAbsoluteLayoutDataInfo} for given {@link ComponentInfo}.
+	 */
+	public static ConstraintsAbsoluteLayoutDataInfo getConstraints(final ComponentInfo component) {
+		return ExecutionUtils.runObject(new RunnableObjectEx<ConstraintsAbsoluteLayoutDataInfo>() {
+			public ConstraintsAbsoluteLayoutDataInfo runObject() throws Exception {
+				// prepare constraints
+				ConstraintsAbsoluteLayoutDataInfo constraints;
+				{
+					List<ConstraintsAbsoluteLayoutDataInfo> constraintsList =
+							component.getChildren(ConstraintsAbsoluteLayoutDataInfo.class);
+					Assert.isLegal(constraintsList.size() <= 1);
+					if (constraintsList.size() == 1) {
+						constraints = constraintsList.get(0);
+					} else {
+						String constraintsClassName;
+						{
+							ContainerInfo container = (ContainerInfo) component.getParent();
+							LayoutInfo layout = container.getLayout();
+							constraintsClassName =
+									JavaInfoUtils.getParameter(layout, "absoluteLayout.constraintsClass");
+						}
+						constraints =
+								(ConstraintsAbsoluteLayoutDataInfo) JavaInfoUtils.createJavaInfo(
+										component.getEditor(),
+										constraintsClassName,
+										new ConstructorCreationSupport());
+						// prepare add() invocation
+						InvocationChildAssociation association =
+								(InvocationChildAssociation) component.getAssociation();
+						MethodInvocation invocation = association.getInvocation();
+						// ensure LayoutData expression
+						Expression expression;
+						{
+							String source = constraints.getDescription().getCreation(null).getSource();
+							expression = constraints.getEditor().addInvocationArgument(invocation, 1, source);
+						}
+						// set CreationSupport
+						{
+							constraints.setCreationSupport(new ConstructorCreationSupport((ClassInstanceCreation) expression));
+							constraints.addRelatedNode(expression);
+						}
+						// set Association
+						constraints.setAssociation(new InvocationSecondaryAssociation(invocation));
+						// set VariableSupport
+						VariableSupport variableSupport = new EmptyVariableSupport(constraints, expression);
+						constraints.setVariableSupport(variableSupport);
+						// add
+						component.addChild(constraints);
+					}
+				}
+				// initialize and return
+				return constraints;
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Bounds property
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void setBoundsX(ComponentInfo component, int value) throws Exception {
-    setBoundsProperty(component, "x", value);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Bounds property
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void setBoundsX(ComponentInfo component, int value) throws Exception {
+		setBoundsProperty(component, "x", value);
+	}
 
-  @Override
-  protected void setBoundsY(ComponentInfo component, int value) throws Exception {
-    setBoundsProperty(component, "y", value);
-  }
+	@Override
+	protected void setBoundsY(ComponentInfo component, int value) throws Exception {
+		setBoundsProperty(component, "y", value);
+	}
 
-  @Override
-  protected void setBoundsWidth(ComponentInfo component, int value) throws Exception {
-    setBoundsProperty(component, "width", value);
-  }
+	@Override
+	protected void setBoundsWidth(ComponentInfo component, int value) throws Exception {
+		setBoundsProperty(component, "width", value);
+	}
 
-  @Override
-  protected void setBoundsHeight(ComponentInfo component, int value) throws Exception {
-    setBoundsProperty(component, "height", value);
-  }
+	@Override
+	protected void setBoundsHeight(ComponentInfo component, int value) throws Exception {
+		setBoundsProperty(component, "height", value);
+	}
 
-  private void setBoundsProperty(ComponentInfo component, String title, int value) throws Exception {
-    value = updateValueUsingScript(component, title, value);
-    ConstraintsAbsoluteLayoutDataInfo constraints = getConstraints(component);
-    if (constraints != null) {
-      Property property = constraints.getPropertyByTitle(title);
-      if (property != null) {
-        property.setValue(value);
-      }
-    }
-  }
+	private void setBoundsProperty(ComponentInfo component, String title, int value) throws Exception {
+		value = updateValueUsingScript(component, title, value);
+		ConstraintsAbsoluteLayoutDataInfo constraints = getConstraints(component);
+		if (constraints != null) {
+			Property property = constraints.getPropertyByTitle(title);
+			if (property != null) {
+				property.setValue(value);
+			}
+		}
+	}
 
-  private int updateValueUsingScript(ComponentInfo component, String title, int value)
-      throws Exception {
-    String scriptName = "absoluteLayout.setBounds." + title;
-    String script = JavaInfoUtils.getParameter(this, scriptName);
-    if (script != null) {
-      ClassLoader classLoader = JavaInfoUtils.getClassLoader(this);
-      Map<String, Object> variables = Maps.newHashMap();
-      variables.put("component", component);
-      variables.put("value", value);
-      value = (Integer) ScriptUtils.evaluate(classLoader, script, variables);
-    }
-    return value;
-  }
+	private int updateValueUsingScript(ComponentInfo component, String title, int value)
+			throws Exception {
+		String scriptName = "absoluteLayout.setBounds." + title;
+		String script = JavaInfoUtils.getParameter(this, scriptName);
+		if (script != null) {
+			ClassLoader classLoader = JavaInfoUtils.getClassLoader(this);
+			Map<String, Object> variables = Maps.newHashMap();
+			variables.put("component", component);
+			variables.put("value", value);
+			value = (Integer) ScriptUtils.evaluate(classLoader, script, variables);
+		}
+		return value;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Perform "move" or "resize" operation. Modifies location/size values by modifying appropriate
-   * "setLocation", "setSize", "setBounds" arguments.
-   *
-   * @param component
-   *          the {@link ComponentInfo} which modifications applies to.
-   * @param location
-   *          the {@link Point} of new location of component. May be null.
-   * @param size
-   *          the {@link Dimension} of new size of component. May be null.
-   */
-  @Override
-  public void command_BOUNDS(ComponentInfo component, Point location, Dimension size)
-      throws Exception {
-    // set location
-    if (location != null) {
-      setBoundsX(component, location.x);
-      setBoundsY(component, location.y);
-    }
-    // set size
-    if (size != null) {
-      setBoundsWidth(component, size.width);
-      setBoundsHeight(component, size.height);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Perform "move" or "resize" operation. Modifies location/size values by modifying appropriate
+	 * "setLocation", "setSize", "setBounds" arguments.
+	 *
+	 * @param component
+	 *          the {@link ComponentInfo} which modifications applies to.
+	 * @param location
+	 *          the {@link Point} of new location of component. May be null.
+	 * @param size
+	 *          the {@link Dimension} of new size of component. May be null.
+	 */
+	@Override
+	public void command_BOUNDS(ComponentInfo component, Point location, Dimension size)
+			throws Exception {
+		// set location
+		if (location != null) {
+			setBoundsX(component, location.x);
+			setBoundsY(component, location.y);
+		}
+		// set size
+		if (size != null) {
+			setBoundsWidth(component, size.width);
+			setBoundsHeight(component, size.height);
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/absolute/IPreferenceConstants.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/absolute/IPreferenceConstants.java
index ce46a9802..4804b5e48 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/absolute/IPreferenceConstants.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/absolute/IPreferenceConstants.java
@@ -17,7 +17,7 @@
  * @coverage swing.model.layout
  */
 public interface IPreferenceConstants
-    extends
-      org.eclipse.wb.internal.core.model.layout.absolute.IPreferenceConstants {
-  String P_USE_JDK_LAYOUT_STYLE = "P_USE_JDK_LAYOUT_STYLE";
+extends
+org.eclipse.wb.internal.core.model.layout.absolute.IPreferenceConstants {
+	String P_USE_JDK_LAYOUT_STYLE = "P_USE_JDK_LAYOUT_STYLE";
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/absolute/PreferenceInitializer.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/absolute/PreferenceInitializer.java
index ad9f6ab3b..05e1aa42b 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/absolute/PreferenceInitializer.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/absolute/PreferenceInitializer.java
@@ -23,41 +23,41 @@
  * @coverage swing.preferences.layout
  */
 public final class PreferenceInitializer extends AbstractPreferenceInitializer
-    implements
-      IPreferenceConstants {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  //	Initializing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link ToolkitDescription}.
-   */
-  private ToolkitDescription getToolkit() {
-    return ToolkitProvider.DESCRIPTION;
-  }
+implements
+IPreferenceConstants {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	//	Initializing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link ToolkitDescription}.
+	 */
+	private ToolkitDescription getToolkit() {
+		return ToolkitProvider.DESCRIPTION;
+	}
 
-  @Override
-  public void initializeDefaultPreferences() {
-    IPreferenceStore preferenceStore = getToolkit().getPreferences();
-    // editing mode
-    preferenceStore.setDefault(P_USE_FREE_MODE, true);
-    preferenceStore.setDefault(P_USE_GRID, false);
-    preferenceStore.setDefault(P_DISPLAY_GRID, false);
-    preferenceStore.setDefault(P_GRID_STEP_X, 5);
-    preferenceStore.setDefault(P_GRID_STEP_Y, 5);
-    preferenceStore.setDefault(P_CREATION_FLOW, false);
-    // gaps
-    preferenceStore.setDefault(P_COMPONENT_GAP_LEFT, 6);
-    preferenceStore.setDefault(P_COMPONENT_GAP_RIGHT, 6);
-    preferenceStore.setDefault(P_COMPONENT_GAP_TOP, 6);
-    preferenceStore.setDefault(P_COMPONENT_GAP_BOTTOM, 6);
-    preferenceStore.setDefault(P_CONTAINER_GAP_LEFT, 10);
-    preferenceStore.setDefault(P_CONTAINER_GAP_RIGHT, 10);
-    preferenceStore.setDefault(P_CONTAINER_GAP_TOP, 10);
-    preferenceStore.setDefault(P_CONTAINER_GAP_BOTTOM, 10);
-    // misc
-    preferenceStore.setDefault(P_DISPLAY_LOCATION_SIZE_HINTS, true);
-    preferenceStore.setDefault(P_USE_JDK_LAYOUT_STYLE, true);
-  }
+	@Override
+	public void initializeDefaultPreferences() {
+		IPreferenceStore preferenceStore = getToolkit().getPreferences();
+		// editing mode
+		preferenceStore.setDefault(P_USE_FREE_MODE, true);
+		preferenceStore.setDefault(P_USE_GRID, false);
+		preferenceStore.setDefault(P_DISPLAY_GRID, false);
+		preferenceStore.setDefault(P_GRID_STEP_X, 5);
+		preferenceStore.setDefault(P_GRID_STEP_Y, 5);
+		preferenceStore.setDefault(P_CREATION_FLOW, false);
+		// gaps
+		preferenceStore.setDefault(P_COMPONENT_GAP_LEFT, 6);
+		preferenceStore.setDefault(P_COMPONENT_GAP_RIGHT, 6);
+		preferenceStore.setDefault(P_COMPONENT_GAP_TOP, 6);
+		preferenceStore.setDefault(P_COMPONENT_GAP_BOTTOM, 6);
+		preferenceStore.setDefault(P_CONTAINER_GAP_LEFT, 10);
+		preferenceStore.setDefault(P_CONTAINER_GAP_RIGHT, 10);
+		preferenceStore.setDefault(P_CONTAINER_GAP_TOP, 10);
+		preferenceStore.setDefault(P_CONTAINER_GAP_BOTTOM, 10);
+		// misc
+		preferenceStore.setDefault(P_DISPLAY_LOCATION_SIZE_HINTS, true);
+		preferenceStore.setDefault(P_USE_JDK_LAYOUT_STYLE, true);
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/absolute/SelectionActionsSupport.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/absolute/SelectionActionsSupport.java
index a6c49abdd..12139eba7 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/absolute/SelectionActionsSupport.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/absolute/SelectionActionsSupport.java
@@ -25,44 +25,44 @@
  * @coverage swing.model.layout
  */
 public final class SelectionActionsSupport
-    extends
-      org.eclipse.wb.internal.core.gef.policy.layout.absolute.actions.SimpleAlignmentActionsSupport<ComponentInfo> {
-  private final AbstractAbsoluteLayoutInfo m_layout;
+extends
+org.eclipse.wb.internal.core.gef.policy.layout.absolute.actions.SimpleAlignmentActionsSupport<ComponentInfo> {
+	private final AbstractAbsoluteLayoutInfo m_layout;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SelectionActionsSupport(AbstractAbsoluteLayoutInfo layout) {
-    super();
-    m_layout = layout;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SelectionActionsSupport(AbstractAbsoluteLayoutInfo layout) {
+		super();
+		m_layout = layout;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  //
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected boolean isComponentInfo(ObjectInfo object) {
-    return object instanceof ComponentInfo;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	//
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected boolean isComponentInfo(ObjectInfo object) {
+		return object instanceof ComponentInfo;
+	}
 
-  @Override
-  protected boolean isValidObjectOnRootPath(IAbstractComponentInfo parent) {
-    ContainerInfo container = (ContainerInfo) parent;
-    return container.hasLayout() && container.getLayout() instanceof AbstractAbsoluteLayoutInfo;
-  }
+	@Override
+	protected boolean isValidObjectOnRootPath(IAbstractComponentInfo parent) {
+		ContainerInfo container = (ContainerInfo) parent;
+		return container.hasLayout() && container.getLayout() instanceof AbstractAbsoluteLayoutInfo;
+	}
 
-  @Override
-  protected IAbstractComponentInfo getLayoutContainer() {
-    return m_layout.getContainer();
-  }
+	@Override
+	protected IAbstractComponentInfo getLayoutContainer() {
+		return m_layout.getContainer();
+	}
 
-  @Override
-  protected void commandChangeBounds(ComponentInfo component, Point location, Dimension size)
-      throws Exception {
-    m_layout.command_BOUNDS(component, location, size);
-  }
+	@Override
+	protected void commandChangeBounds(ComponentInfo component, Point location, Dimension size)
+			throws Exception {
+		m_layout.command_BOUNDS(component, location, size);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/AbstractGridBagConstraintsInfo.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/AbstractGridBagConstraintsInfo.java
index 00c8c6b75..67cdb7c70 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/AbstractGridBagConstraintsInfo.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/AbstractGridBagConstraintsInfo.java
@@ -56,589 +56,589 @@
  * @coverage swing.model.layout
  */
 public abstract class AbstractGridBagConstraintsInfo extends JavaInfo {
-  private final AbstractGridBagConstraintsInfo m_this = this;
-  protected boolean m_initialized = false;
-  private boolean m_internalLocationChange = false;
-  public int x;
-  public int y;
-  public int width;
-  public int height;
-  protected int anchor;
-  protected int fill;
-  public Insets insets;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractGridBagConstraintsInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-    whenSetLocation_expandGrid();
-    new GridBagConstraintsNameSupport(this);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Initialize
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void initialize() throws Exception {
-    super.initialize();
-    addBroadcastListener(new ObjectEventListener() {
-      @Override
-      public void addContextMenu(List<? extends ObjectInfo> objects,
-          ObjectInfo object,
-          IMenuManager manager) throws Exception {
-        if (getParent() == object) {
-          AbstractGridBagConstraintsInfo.this.addContextMenu(manager);
-        }
-      }
-    });
-  }
-
-  /**
-   * When user sets gridx/gridy manually, he may try to set value outside of current grid. So, we
-   * should expand grid to make this value valid.
-   */
-  private void whenSetLocation_expandGrid() {
-    addBroadcastListener(new GenericPropertySetValue() {
-      public void invoke(GenericPropertyImpl property, Object[] value, boolean[] shouldSetValue)
-          throws Exception {
-        if (!m_internalLocationChange
-            && property.getJavaInfo() == m_this
-            && value[0] instanceof Integer) {
-          int newLocation = (Integer) value[0];
-          if (newLocation >= 100) {
-            shouldSetValue[0] = false;
-            return;
-          }
-          if (property.getTitle().equals("gridx")) {
-            getLayout().getColumnOperations().prepare(newLocation, false);
-          }
-          if (property.getTitle().equals("gridy")) {
-            getLayout().getRowOperations().prepare(newLocation, false);
-          }
-        }
-      }
-    });
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void refresh_fetch() throws Exception {
-    super.refresh_fetch();
-    getCurrentObjectFields(false);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link ColumnInfo} where located this {@link ComponentInfo}.
-   */
-  public ColumnInfo getColumn() {
-    return getLayout().getColumns().get(x);
-  }
-
-  /**
-   * @return the {@link RowInfo} where located this {@link ComponentInfo}.
-   */
-  public RowInfo getRow() {
-    return getLayout().getRows().get(y);
-  }
-
-  /**
-   * @return the {@link AbstractGridBagConstraintsInfo} that contains {@link ComponentInfo} of this
-   *         {@link AbstractGridBagConstraintsInfo}.
-   */
-  private AbstractGridBagLayoutInfo getLayout() {
-    ComponentInfo component = (ComponentInfo) getParent();
-    ContainerInfo container = (ContainerInfo) component.getParent();
-    return (AbstractGridBagLayoutInfo) container.getLayout();
-  }
-
-  /**
-   * Initializes fields of {@link AbstractGridBagConstraintsInfo} from instance of
-   * {@link AbstractGridBagConstraintsInfo}.
-   */
-  public void init() throws Exception {
-    if (!m_initialized) {
-      m_initialized = true;
-      getCurrentObjectFields(true);
-    }
-  }
-
-  /**
-   * Gets values from {@link GridBagConstraints} object to this
-   * {@link AbstractGridBagConstraintsInfo} fields.
-   */
-  public abstract void getCurrentObjectFields(boolean init) throws Exception;
-
-  /**
-   * This method materializes {@link AbstractGridBagConstraintsInfo} before asking properties to
-   * allow using {@link ExpressionAccessor}'s from {@link CreationSupport}.
-   *
-   * @return the {@link Property} with given title.
-   */
-  private Property getProperty(String title) throws Exception {
-    if (isVirtual()) {
-      materialize();
-    }
-    return getPropertyByTitle(title);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access: location
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Ensures that location values are expressed directly, not using
-   * {@link GridBagConstraints#RELATIVE}.
-   */
-  public abstract void materializeLocation() throws Exception;
-
-  /**
-   * @return the "gridx" property value.
-   */
-  public int getX() {
-    return x;
-  }
-
-  /**
-   * Sets the "gridx" property.
-   */
-  public void setX(int x) throws Exception {
-    this.x = x;
-    setLocationPropertyValue("gridx", x);
-  }
-
-  /**
-   * @return the "gridy" property value.
-   */
-  public int getY() {
-    return y;
-  }
-
-  /**
-   * Sets the "gridy" property.
-   */
-  public void setY(int y) throws Exception {
-    this.y = y;
-    setLocationPropertyValue("gridy", y);
-  }
-
-  /**
-   * @return the "gridwidth" property value.
-   */
-  public int getWidth() {
-    return width;
-  }
-
-  /**
-   * Sets the "gridwidth" property.
-   */
-  public void setWidth(int width) throws Exception {
-    this.width = width;
-    getProperty("gridwidth").setValue(width);
-  }
-
-  /**
-   * @return the "gridheight" property value.
-   */
-  public int getHeight() {
-    return height;
-  }
-
-  /**
-   * Sets the "gridheight" property.
-   */
-  public void setHeight(int height) throws Exception {
-    this.height = height;
-    getProperty("gridheight").setValue(height);
-  }
-
-  private void setLocationPropertyValue(String title, int value) throws Exception {
-    m_internalLocationChange = true;
-    try {
-      getProperty(title).setValue(value);
-    } finally {
-      m_internalLocationChange = false;
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access: insets
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the value of single side of "insets" property.
-   */
-  public int getInsets(String side) throws Exception {
-    return ReflectionUtils.getFieldInt(insets, side);
-  }
-
-  /**
-   * Sets the value for single side of "insets" property.
-   */
-  public void setInsets(String side, int value) throws Exception {
-    ReflectionUtils.setField(insets, side, value);
-    getProperty("insets").setValue(CoordinateUtils.get(insets));
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access: alignment
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the horizontal alignment.
-   */
-  public abstract ColumnInfo.Alignment getHorizontalAlignment();
-
-  /**
-   * @return the vertical alignment.
-   */
-  public abstract RowInfo.Alignment getVerticalAlignment();
-
-  /**
-   * Sets horizontal alignment.
-   */
-  public void setHorizontalAlignment(ColumnInfo.Alignment alignment) throws Exception {
-    setAlignment(alignment, getVerticalAlignment());
-  }
-
-  /**
-   * Sets vertical alignment.
-   */
-  public void setVerticalAlignment(RowInfo.Alignment alignment) throws Exception {
-    setAlignment(getHorizontalAlignment(), alignment);
-  }
-
-  /**
-   * Sets horizontal/vertical alignments.<br>
-   * This updates "fill" and "anchor" properties.
-   */
-  public void setAlignment(ColumnInfo.Alignment hAlignment, RowInfo.Alignment vAlignment)
-      throws Exception {
-    for (AlignmentInfo alignment : getAlignments()) {
-      if (alignment.equals(hAlignment, vAlignment)) {
-        {
-          int newFill = getClassStaticFieldByName(alignment.fill);
-          if (newFill != fill) {
-            fill = newFill;
-            GenericPropertyImpl property = (GenericPropertyImpl) getProperty("fill");
-            String source = getClassNameForConstants() + "." + alignment.fill;
-            property.setExpression(source, fill);
-          }
-        }
-        {
-          int newAnchor = getClassStaticFieldByName(alignment.anchor);
-          if (newAnchor != anchor) {
-            anchor = newAnchor;
-            GenericPropertyImpl property = (GenericPropertyImpl) getProperty("anchor");
-            String source = getClassNameForConstants() + "." + alignment.anchor;
-            property.setExpression(source, anchor);
-          }
-        }
-        break;
-      }
-    }
-  }
-
-  /**
-   * @return constant value by name
-   */
-  protected int getClassStaticFieldByName(String fieldName) throws Exception {
-    return ReflectionUtils.getFieldInt(getDescription().getComponentClass(), fieldName);
-  }
-
-  protected int getClassStaticFieldByNameSoft(String fieldName) {
-    int value;
-    try {
-      value = getClassStaticFieldByName(fieldName);
-    } catch (Exception e) {
-      EditorState.get(getEditor()).addWarning(
-          new EditorWarning("AbstractGridBagConstraintsInfo.getClassStaticFieldByName(String) :", e));
-      value = 0;
-    }
-    return value;
-  }
-
-  /**
-   * @return class name for source
-   */
-  public String getClassNameForConstants() {
-    return ReflectionUtils.getFullyQualifiedName(getDescription().getComponentClass(), false);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AlignmentInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Container with information about conversion column/row alignments into "fill" and "anchor".
-   *
-   * @author scheglov_ke
-   */
-  protected static class AlignmentInfo {
-    final public ColumnInfo.Alignment hAlignment;
-    final public RowInfo.Alignment vAlignment;
-    final public String fill;
-    final public String anchor;
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public AlignmentInfo(String alignmentString, final String fill, final String anchor) {
-      Assert.isTrue(alignmentString.length() == 2);
-      {
-        char c = alignmentString.charAt(0);
-        switch (c) {
-          case 'L' :
-            hAlignment = ColumnInfo.Alignment.LEFT;
-            break;
-          case 'C' :
-            hAlignment = ColumnInfo.Alignment.CENTER;
-            break;
-          case 'R' :
-            hAlignment = ColumnInfo.Alignment.RIGHT;
-            break;
-          default :
-            Assert.isTrue(c == 'F');
-            hAlignment = ColumnInfo.Alignment.FILL;
-        }
-      }
-      {
-        char c = alignmentString.charAt(1);
-        switch (c) {
-          case 'T' :
-            vAlignment = RowInfo.Alignment.TOP;
-            break;
-          case 'C' :
-            vAlignment = RowInfo.Alignment.CENTER;
-            break;
-          case 'B' :
-            vAlignment = RowInfo.Alignment.BOTTOM;
-            break;
-          case 's' :
-            vAlignment = RowInfo.Alignment.BASELINE;
-            break;
-          case 'a' :
-            vAlignment = RowInfo.Alignment.BASELINE_ABOVE;
-            break;
-          case 'b' :
-            vAlignment = RowInfo.Alignment.BASELINE_BELOW;
-            break;
-          default :
-            Assert.isTrue(c == 'F');
-            vAlignment = RowInfo.Alignment.FILL;
-        }
-      }
-      // fill/anchor
-      this.fill = fill;
-      this.anchor = anchor;
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Access
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public boolean equals(ColumnInfo.Alignment hAlignment, RowInfo.Alignment vAlignment) {
-      return this.hAlignment == hAlignment && this.vAlignment == vAlignment;
-    }
-  }
-
-  protected abstract AlignmentInfo[] getAlignments();
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // "virtual" and materialization
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if this {@link AbstractGridBagConstraintsInfo} is virtual.
-   */
-  public boolean isVirtual() {
-    return getVariableSupport() instanceof VirtualConstraintsVariableSupport;
-  }
-
-  /**
-   * Materializes this "virtual" {@link AbstractGridBagConstraintsInfo}.
-   */
-  private void materialize() throws Exception {
-    ((VirtualConstraintsVariableSupport) getVariableSupport()).materialize();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // "Constraints" property
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private ComplexProperty m_complexProperty;
-
-  /**
-   * Adds properties of this {@link AbstractGridBagConstraintsInfo} to the properties of its
-   * {@link ComponentInfo}.
-   */
-  void addConstraintsProperties(List<Property> properties) throws Exception {
-    // prepare complex property
-    {
-      if (m_complexProperty == null) {
-        // prepare text
-        String text;
-        {
-          Class<?> componentClass = getDescription().getComponentClass();
-          text = "(" + componentClass.getName() + ")";
-        }
-        //
-        m_complexProperty = new ComplexProperty("Constraints", text) {
-          @Override
-          public boolean isModified() throws Exception {
-            return true;
-          }
-        };
-        m_complexProperty.setCategory(PropertyCategory.system(6));
-        // set sub-properties
-        final Property[] constraintsProperties = getProperties();
-        m_complexProperty.setProperties(constraintsProperties);
-        // materialize constraints on sub-property modification
-        if (isVirtual()) {
-          addBroadcastListener(new JavaEventListener() {
-            @Override
-            public void setPropertyExpression(GenericPropertyImpl property,
-                String[] source,
-                Object[] value,
-                boolean[] shouldSet) throws Exception {
-              if (isVirtual() && ArrayUtils.contains(constraintsProperties, property)) {
-                materialize();
-              }
-            }
-          });
-        }
-      }
-    }
-    // add property
-    properties.add(m_complexProperty);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Context menu
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds items to the context {@link IMenuManager}.
-   */
-  public void addContextMenu(IMenuManager manager) throws Exception {
-    // horizontal
-    {
-      IMenuManager manager2 =
-          new MenuManager(ModelMessages.AbstractGridBagConstraintsInfo_horizontalAlignment);
-      manager.appendToGroup(IContextMenuConstants.GROUP_TOP, manager2);
-      fillHorizontalAlignmentMenu(manager2);
-    }
-    // vertical
-    {
-      IMenuManager manager2 =
-          new MenuManager(ModelMessages.AbstractGridBagConstraintsInfo_verticalAlignment);
-      manager.appendToGroup(IContextMenuConstants.GROUP_TOP, manager2);
-      fillVerticalAlignmentMenu(manager2);
-    }
-  }
-
-  /**
-   * Adds the horizontal alignment {@link Action}'s.
-   */
-  public void fillHorizontalAlignmentMenu(IMenuManager manager) {
-    manager.add(new SetAlignmentHorizontalAction(this,
-        ModelMessages.AbstractGridBagConstraintsInfo_haLeft,
-        "left.gif",
-        ColumnInfo.Alignment.LEFT));
-    manager.add(new SetAlignmentHorizontalAction(this,
-        ModelMessages.AbstractGridBagConstraintsInfo_haCenter,
-        "center.gif",
-        ColumnInfo.Alignment.CENTER));
-    manager.add(new SetAlignmentHorizontalAction(this,
-        ModelMessages.AbstractGridBagConstraintsInfo_haRight,
-        "right.gif",
-        ColumnInfo.Alignment.RIGHT));
-    manager.add(new SetAlignmentHorizontalAction(this,
-        ModelMessages.AbstractGridBagConstraintsInfo_haFill,
-        "fill.gif",
-        ColumnInfo.Alignment.FILL));
-    manager.add(new Separator());
-    manager.add(new SetGrowAction(this,
-        ModelMessages.AbstractGridBagConstraintsInfo_haGrow,
-        "grow.gif",
-        true));
-  }
-
-  /**
-   * Adds the vertical alignment {@link Action}'s.
-   */
-  public void fillVerticalAlignmentMenu(IMenuManager manager) {
-    manager.add(new SetAlignmentVerticalAction(this,
-        ModelMessages.AbstractGridBagConstraintsInfo_vaTop,
-        "top.gif",
-        RowInfo.Alignment.TOP));
-    manager.add(new SetAlignmentVerticalAction(this,
-        ModelMessages.AbstractGridBagConstraintsInfo_vaCenter,
-        "center.gif",
-        RowInfo.Alignment.CENTER));
-    manager.add(new SetAlignmentVerticalAction(this,
-        ModelMessages.AbstractGridBagConstraintsInfo_vaBottom,
-        "bottom.gif",
-        RowInfo.Alignment.BOTTOM));
-    manager.add(new SetAlignmentVerticalAction(this,
-        ModelMessages.AbstractGridBagConstraintsInfo_vaFill,
-        "fill.gif",
-        RowInfo.Alignment.FILL));
-    if (SystemUtils.IS_JAVA_1_6 || SystemUtils.IS_JAVA_1_7) {
-      manager.add(new SetAlignmentVerticalAction(this,
-          ModelMessages.AbstractGridBagConstraintsInfo_vaBaseline,
-          "baseline.gif",
-          RowInfo.Alignment.BASELINE));
-      manager.add(new SetAlignmentVerticalAction(this,
-          ModelMessages.AbstractGridBagConstraintsInfo_vaAboveBaseline,
-          "baseline_above.gif",
-          RowInfo.Alignment.BASELINE_ABOVE));
-      manager.add(new SetAlignmentVerticalAction(this,
-          ModelMessages.AbstractGridBagConstraintsInfo_vaBelowBaseline,
-          "baseline_below.gif",
-          RowInfo.Alignment.BASELINE_BELOW));
-    }
-    manager.add(new Separator());
-    manager.add(new SetGrowAction(this,
-        ModelMessages.AbstractGridBagConstraintsInfo_vaGrow,
-        "grow.gif",
-        false));
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Source utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return source for initializing new constraints object instance
-   */
-  public abstract String newInstanceSourceLong();
-
-  public abstract String newInstanceSourceShort();
+	private final AbstractGridBagConstraintsInfo m_this = this;
+	protected boolean m_initialized = false;
+	private boolean m_internalLocationChange = false;
+	public int x;
+	public int y;
+	public int width;
+	public int height;
+	protected int anchor;
+	protected int fill;
+	public Insets insets;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractGridBagConstraintsInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+		whenSetLocation_expandGrid();
+		new GridBagConstraintsNameSupport(this);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Initialize
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void initialize() throws Exception {
+		super.initialize();
+		addBroadcastListener(new ObjectEventListener() {
+			@Override
+			public void addContextMenu(List<? extends ObjectInfo> objects,
+					ObjectInfo object,
+					IMenuManager manager) throws Exception {
+				if (getParent() == object) {
+					AbstractGridBagConstraintsInfo.this.addContextMenu(manager);
+				}
+			}
+		});
+	}
+
+	/**
+	 * When user sets gridx/gridy manually, he may try to set value outside of current grid. So, we
+	 * should expand grid to make this value valid.
+	 */
+	private void whenSetLocation_expandGrid() {
+		addBroadcastListener(new GenericPropertySetValue() {
+			public void invoke(GenericPropertyImpl property, Object[] value, boolean[] shouldSetValue)
+					throws Exception {
+				if (!m_internalLocationChange
+						&& property.getJavaInfo() == m_this
+						&& value[0] instanceof Integer) {
+					int newLocation = (Integer) value[0];
+					if (newLocation >= 100) {
+						shouldSetValue[0] = false;
+						return;
+					}
+					if (property.getTitle().equals("gridx")) {
+						getLayout().getColumnOperations().prepare(newLocation, false);
+					}
+					if (property.getTitle().equals("gridy")) {
+						getLayout().getRowOperations().prepare(newLocation, false);
+					}
+				}
+			}
+		});
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void refresh_fetch() throws Exception {
+		super.refresh_fetch();
+		getCurrentObjectFields(false);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link ColumnInfo} where located this {@link ComponentInfo}.
+	 */
+	public ColumnInfo getColumn() {
+		return getLayout().getColumns().get(x);
+	}
+
+	/**
+	 * @return the {@link RowInfo} where located this {@link ComponentInfo}.
+	 */
+	public RowInfo getRow() {
+		return getLayout().getRows().get(y);
+	}
+
+	/**
+	 * @return the {@link AbstractGridBagConstraintsInfo} that contains {@link ComponentInfo} of this
+	 *         {@link AbstractGridBagConstraintsInfo}.
+	 */
+	private AbstractGridBagLayoutInfo getLayout() {
+		ComponentInfo component = (ComponentInfo) getParent();
+		ContainerInfo container = (ContainerInfo) component.getParent();
+		return (AbstractGridBagLayoutInfo) container.getLayout();
+	}
+
+	/**
+	 * Initializes fields of {@link AbstractGridBagConstraintsInfo} from instance of
+	 * {@link AbstractGridBagConstraintsInfo}.
+	 */
+	public void init() throws Exception {
+		if (!m_initialized) {
+			m_initialized = true;
+			getCurrentObjectFields(true);
+		}
+	}
+
+	/**
+	 * Gets values from {@link GridBagConstraints} object to this
+	 * {@link AbstractGridBagConstraintsInfo} fields.
+	 */
+	public abstract void getCurrentObjectFields(boolean init) throws Exception;
+
+	/**
+	 * This method materializes {@link AbstractGridBagConstraintsInfo} before asking properties to
+	 * allow using {@link ExpressionAccessor}'s from {@link CreationSupport}.
+	 *
+	 * @return the {@link Property} with given title.
+	 */
+	private Property getProperty(String title) throws Exception {
+		if (isVirtual()) {
+			materialize();
+		}
+		return getPropertyByTitle(title);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access: location
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Ensures that location values are expressed directly, not using
+	 * {@link GridBagConstraints#RELATIVE}.
+	 */
+	public abstract void materializeLocation() throws Exception;
+
+	/**
+	 * @return the "gridx" property value.
+	 */
+	public int getX() {
+		return x;
+	}
+
+	/**
+	 * Sets the "gridx" property.
+	 */
+	public void setX(int x) throws Exception {
+		this.x = x;
+		setLocationPropertyValue("gridx", x);
+	}
+
+	/**
+	 * @return the "gridy" property value.
+	 */
+	public int getY() {
+		return y;
+	}
+
+	/**
+	 * Sets the "gridy" property.
+	 */
+	public void setY(int y) throws Exception {
+		this.y = y;
+		setLocationPropertyValue("gridy", y);
+	}
+
+	/**
+	 * @return the "gridwidth" property value.
+	 */
+	public int getWidth() {
+		return width;
+	}
+
+	/**
+	 * Sets the "gridwidth" property.
+	 */
+	public void setWidth(int width) throws Exception {
+		this.width = width;
+		getProperty("gridwidth").setValue(width);
+	}
+
+	/**
+	 * @return the "gridheight" property value.
+	 */
+	public int getHeight() {
+		return height;
+	}
+
+	/**
+	 * Sets the "gridheight" property.
+	 */
+	public void setHeight(int height) throws Exception {
+		this.height = height;
+		getProperty("gridheight").setValue(height);
+	}
+
+	private void setLocationPropertyValue(String title, int value) throws Exception {
+		m_internalLocationChange = true;
+		try {
+			getProperty(title).setValue(value);
+		} finally {
+			m_internalLocationChange = false;
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access: insets
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the value of single side of "insets" property.
+	 */
+	public int getInsets(String side) throws Exception {
+		return ReflectionUtils.getFieldInt(insets, side);
+	}
+
+	/**
+	 * Sets the value for single side of "insets" property.
+	 */
+	public void setInsets(String side, int value) throws Exception {
+		ReflectionUtils.setField(insets, side, value);
+		getProperty("insets").setValue(CoordinateUtils.get(insets));
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access: alignment
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the horizontal alignment.
+	 */
+	public abstract ColumnInfo.Alignment getHorizontalAlignment();
+
+	/**
+	 * @return the vertical alignment.
+	 */
+	public abstract RowInfo.Alignment getVerticalAlignment();
+
+	/**
+	 * Sets horizontal alignment.
+	 */
+	public void setHorizontalAlignment(ColumnInfo.Alignment alignment) throws Exception {
+		setAlignment(alignment, getVerticalAlignment());
+	}
+
+	/**
+	 * Sets vertical alignment.
+	 */
+	public void setVerticalAlignment(RowInfo.Alignment alignment) throws Exception {
+		setAlignment(getHorizontalAlignment(), alignment);
+	}
+
+	/**
+	 * Sets horizontal/vertical alignments.<br>
+	 * This updates "fill" and "anchor" properties.
+	 */
+	public void setAlignment(ColumnInfo.Alignment hAlignment, RowInfo.Alignment vAlignment)
+			throws Exception {
+		for (AlignmentInfo alignment : getAlignments()) {
+			if (alignment.equals(hAlignment, vAlignment)) {
+				{
+					int newFill = getClassStaticFieldByName(alignment.fill);
+					if (newFill != fill) {
+						fill = newFill;
+						GenericPropertyImpl property = (GenericPropertyImpl) getProperty("fill");
+						String source = getClassNameForConstants() + "." + alignment.fill;
+						property.setExpression(source, fill);
+					}
+				}
+				{
+					int newAnchor = getClassStaticFieldByName(alignment.anchor);
+					if (newAnchor != anchor) {
+						anchor = newAnchor;
+						GenericPropertyImpl property = (GenericPropertyImpl) getProperty("anchor");
+						String source = getClassNameForConstants() + "." + alignment.anchor;
+						property.setExpression(source, anchor);
+					}
+				}
+				break;
+			}
+		}
+	}
+
+	/**
+	 * @return constant value by name
+	 */
+	protected int getClassStaticFieldByName(String fieldName) throws Exception {
+		return ReflectionUtils.getFieldInt(getDescription().getComponentClass(), fieldName);
+	}
+
+	protected int getClassStaticFieldByNameSoft(String fieldName) {
+		int value;
+		try {
+			value = getClassStaticFieldByName(fieldName);
+		} catch (Exception e) {
+			EditorState.get(getEditor()).addWarning(
+					new EditorWarning("AbstractGridBagConstraintsInfo.getClassStaticFieldByName(String) :", e));
+			value = 0;
+		}
+		return value;
+	}
+
+	/**
+	 * @return class name for source
+	 */
+	public String getClassNameForConstants() {
+		return ReflectionUtils.getFullyQualifiedName(getDescription().getComponentClass(), false);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AlignmentInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Container with information about conversion column/row alignments into "fill" and "anchor".
+	 *
+	 * @author scheglov_ke
+	 */
+	protected static class AlignmentInfo {
+		final public ColumnInfo.Alignment hAlignment;
+		final public RowInfo.Alignment vAlignment;
+		final public String fill;
+		final public String anchor;
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public AlignmentInfo(String alignmentString, final String fill, final String anchor) {
+			Assert.isTrue(alignmentString.length() == 2);
+			{
+				char c = alignmentString.charAt(0);
+				switch (c) {
+				case 'L' :
+					hAlignment = ColumnInfo.Alignment.LEFT;
+					break;
+				case 'C' :
+					hAlignment = ColumnInfo.Alignment.CENTER;
+					break;
+				case 'R' :
+					hAlignment = ColumnInfo.Alignment.RIGHT;
+					break;
+				default :
+					Assert.isTrue(c == 'F');
+					hAlignment = ColumnInfo.Alignment.FILL;
+				}
+			}
+			{
+				char c = alignmentString.charAt(1);
+				switch (c) {
+				case 'T' :
+					vAlignment = RowInfo.Alignment.TOP;
+					break;
+				case 'C' :
+					vAlignment = RowInfo.Alignment.CENTER;
+					break;
+				case 'B' :
+					vAlignment = RowInfo.Alignment.BOTTOM;
+					break;
+				case 's' :
+					vAlignment = RowInfo.Alignment.BASELINE;
+					break;
+				case 'a' :
+					vAlignment = RowInfo.Alignment.BASELINE_ABOVE;
+					break;
+				case 'b' :
+					vAlignment = RowInfo.Alignment.BASELINE_BELOW;
+					break;
+				default :
+					Assert.isTrue(c == 'F');
+					vAlignment = RowInfo.Alignment.FILL;
+				}
+			}
+			// fill/anchor
+			this.fill = fill;
+			this.anchor = anchor;
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Access
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public boolean equals(ColumnInfo.Alignment hAlignment, RowInfo.Alignment vAlignment) {
+			return this.hAlignment == hAlignment && this.vAlignment == vAlignment;
+		}
+	}
+
+	protected abstract AlignmentInfo[] getAlignments();
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// "virtual" and materialization
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if this {@link AbstractGridBagConstraintsInfo} is virtual.
+	 */
+	public boolean isVirtual() {
+		return getVariableSupport() instanceof VirtualConstraintsVariableSupport;
+	}
+
+	/**
+	 * Materializes this "virtual" {@link AbstractGridBagConstraintsInfo}.
+	 */
+	private void materialize() throws Exception {
+		((VirtualConstraintsVariableSupport) getVariableSupport()).materialize();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// "Constraints" property
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private ComplexProperty m_complexProperty;
+
+	/**
+	 * Adds properties of this {@link AbstractGridBagConstraintsInfo} to the properties of its
+	 * {@link ComponentInfo}.
+	 */
+	void addConstraintsProperties(List<Property> properties) throws Exception {
+		// prepare complex property
+		{
+			if (m_complexProperty == null) {
+				// prepare text
+				String text;
+				{
+					Class<?> componentClass = getDescription().getComponentClass();
+					text = "(" + componentClass.getName() + ")";
+				}
+				//
+				m_complexProperty = new ComplexProperty("Constraints", text) {
+					@Override
+					public boolean isModified() throws Exception {
+						return true;
+					}
+				};
+				m_complexProperty.setCategory(PropertyCategory.system(6));
+				// set sub-properties
+				final Property[] constraintsProperties = getProperties();
+				m_complexProperty.setProperties(constraintsProperties);
+				// materialize constraints on sub-property modification
+				if (isVirtual()) {
+					addBroadcastListener(new JavaEventListener() {
+						@Override
+						public void setPropertyExpression(GenericPropertyImpl property,
+								String[] source,
+								Object[] value,
+								boolean[] shouldSet) throws Exception {
+							if (isVirtual() && ArrayUtils.contains(constraintsProperties, property)) {
+								materialize();
+							}
+						}
+					});
+				}
+			}
+		}
+		// add property
+		properties.add(m_complexProperty);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Context menu
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds items to the context {@link IMenuManager}.
+	 */
+	public void addContextMenu(IMenuManager manager) throws Exception {
+		// horizontal
+		{
+			IMenuManager manager2 =
+					new MenuManager(ModelMessages.AbstractGridBagConstraintsInfo_horizontalAlignment);
+			manager.appendToGroup(IContextMenuConstants.GROUP_TOP, manager2);
+			fillHorizontalAlignmentMenu(manager2);
+		}
+		// vertical
+		{
+			IMenuManager manager2 =
+					new MenuManager(ModelMessages.AbstractGridBagConstraintsInfo_verticalAlignment);
+			manager.appendToGroup(IContextMenuConstants.GROUP_TOP, manager2);
+			fillVerticalAlignmentMenu(manager2);
+		}
+	}
+
+	/**
+	 * Adds the horizontal alignment {@link Action}'s.
+	 */
+	public void fillHorizontalAlignmentMenu(IMenuManager manager) {
+		manager.add(new SetAlignmentHorizontalAction(this,
+				ModelMessages.AbstractGridBagConstraintsInfo_haLeft,
+				"left.gif",
+				ColumnInfo.Alignment.LEFT));
+		manager.add(new SetAlignmentHorizontalAction(this,
+				ModelMessages.AbstractGridBagConstraintsInfo_haCenter,
+				"center.gif",
+				ColumnInfo.Alignment.CENTER));
+		manager.add(new SetAlignmentHorizontalAction(this,
+				ModelMessages.AbstractGridBagConstraintsInfo_haRight,
+				"right.gif",
+				ColumnInfo.Alignment.RIGHT));
+		manager.add(new SetAlignmentHorizontalAction(this,
+				ModelMessages.AbstractGridBagConstraintsInfo_haFill,
+				"fill.gif",
+				ColumnInfo.Alignment.FILL));
+		manager.add(new Separator());
+		manager.add(new SetGrowAction(this,
+				ModelMessages.AbstractGridBagConstraintsInfo_haGrow,
+				"grow.gif",
+				true));
+	}
+
+	/**
+	 * Adds the vertical alignment {@link Action}'s.
+	 */
+	public void fillVerticalAlignmentMenu(IMenuManager manager) {
+		manager.add(new SetAlignmentVerticalAction(this,
+				ModelMessages.AbstractGridBagConstraintsInfo_vaTop,
+				"top.gif",
+				RowInfo.Alignment.TOP));
+		manager.add(new SetAlignmentVerticalAction(this,
+				ModelMessages.AbstractGridBagConstraintsInfo_vaCenter,
+				"center.gif",
+				RowInfo.Alignment.CENTER));
+		manager.add(new SetAlignmentVerticalAction(this,
+				ModelMessages.AbstractGridBagConstraintsInfo_vaBottom,
+				"bottom.gif",
+				RowInfo.Alignment.BOTTOM));
+		manager.add(new SetAlignmentVerticalAction(this,
+				ModelMessages.AbstractGridBagConstraintsInfo_vaFill,
+				"fill.gif",
+				RowInfo.Alignment.FILL));
+		if (SystemUtils.IS_JAVA_1_6 || SystemUtils.IS_JAVA_1_7) {
+			manager.add(new SetAlignmentVerticalAction(this,
+					ModelMessages.AbstractGridBagConstraintsInfo_vaBaseline,
+					"baseline.gif",
+					RowInfo.Alignment.BASELINE));
+			manager.add(new SetAlignmentVerticalAction(this,
+					ModelMessages.AbstractGridBagConstraintsInfo_vaAboveBaseline,
+					"baseline_above.gif",
+					RowInfo.Alignment.BASELINE_ABOVE));
+			manager.add(new SetAlignmentVerticalAction(this,
+					ModelMessages.AbstractGridBagConstraintsInfo_vaBelowBaseline,
+					"baseline_below.gif",
+					RowInfo.Alignment.BASELINE_BELOW));
+		}
+		manager.add(new Separator());
+		manager.add(new SetGrowAction(this,
+				ModelMessages.AbstractGridBagConstraintsInfo_vaGrow,
+				"grow.gif",
+				false));
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Source utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return source for initializing new constraints object instance
+	 */
+	public abstract String newInstanceSourceLong();
+
+	public abstract String newInstanceSourceShort();
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/AbstractGridBagLayoutInfo.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/AbstractGridBagLayoutInfo.java
index b608c8c5f..8559a315d 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/AbstractGridBagLayoutInfo.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/AbstractGridBagLayoutInfo.java
@@ -73,904 +73,904 @@
  * @coverage swing.model.layout
  */
 public abstract class AbstractGridBagLayoutInfo extends LayoutInfo implements IPreferenceConstants {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractGridBagLayoutInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Initialize
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void initialize() throws Exception {
-    super.initialize();
-    // add listeners
-    addBroadcastListener(new JavaInfoAddProperties() {
-      public void invoke(JavaInfo javaInfo, List<Property> properties) throws Exception {
-        if (isManagedObject(javaInfo)) {
-          ComponentInfo component = (ComponentInfo) javaInfo;
-          getConstraints(component).addConstraintsProperties(properties);
-        }
-      }
-    });
-    // alignment
-    new SelectionActionsSupport(this);
-    // assistant
-    new LayoutAssistantSupport(this) {
-      @Override
-      protected AbstractAssistantPage createConstraintsPage(Composite parent,
-          List<ObjectInfo> objects) {
-        List<AbstractGridBagConstraintsInfo> constraints =
-            Lists.transform(objects, new Function<ObjectInfo, AbstractGridBagConstraintsInfo>() {
-              public AbstractGridBagConstraintsInfo apply(ObjectInfo from) {
-                return getConstraints((ComponentInfo) from);
-              }
-            });
-        return new GridBagConstraintsAssistantPage(parent, constraints);
-      }
-    };
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GridBagConstraintsInfo access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link AbstractGridBagConstraintsInfo} for given {@link ComponentInfo}.
-   */
-  public abstract AbstractGridBagConstraintsInfo getConstraints(ComponentInfo component);
-
-  public abstract Object getConstraintsObject(java.awt.Component component) throws Exception;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Visiting
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Visits all {@link ComponentInfo} of this {@link ContainerInfo}.
-   */
-  void visitComponents(IComponentVisitor visitor) throws Exception {
-    visitComponents(visitor, IComponentPredicate.TRUE);
-  }
-
-  /**
-   * Visits all {@link ComponentInfo} of this {@link ContainerInfo}.
-   */
-  void visitComponents(IComponentVisitor visitor, IComponentPredicate predicate) throws Exception {
-    List<ComponentInfo> components = ImmutableList.copyOf(getComponents());
-    for (ComponentInfo component : components) {
-      AbstractGridBagConstraintsInfo constraints = getConstraints(component);
-      if (predicate.apply(component, constraints)) {
-        visitor.visit(component, constraints);
-      }
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Set
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void onSet() throws Exception {
-    super.onSet();
-    GridBagLayoutConverter.convert(getContainer(), this);
-  }
-
-  @Override
-  protected void removeComponentConstraints(ContainerInfo container, ComponentInfo component)
-      throws Exception {
-    getConstraints(component).delete();
-    super.removeComponentConstraints(container, component);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected final Set<Integer> m_refreshFilledColumns = Sets.newTreeSet();
-  protected final Set<Integer> m_refreshFilledRows = Sets.newTreeSet();
-
-  @Override
-  public void refresh_dispose() throws Exception {
-    m_gridInfo = null;
-    super.refresh_dispose();
-  }
-
-  @Override
-  protected void refresh_afterCreate() throws Exception {
-    super.refresh_afterCreate();
-    // force layout() to calculate "real" location/size in GridBagConstraints."temp*" fields
-    {
-      ContainerInfo container = getContainer();
-      // do layout, use some reasonable size
-      {
-        Container containerObject = container.getContainer();
-        java.awt.Dimension containerSizeOriginal = containerObject.getSize();
-        try {
-          containerObject.setSize(450, 300);
-          containerObject.doLayout();
-        } finally {
-          containerObject.setSize(containerSizeOriginal);
-        }
-      }
-      // fetch fields
-      for (ComponentInfo component : getComponents()) {
-        getConstraints(component).getCurrentObjectFields(false);
-      }
-    }
-    // initialize dimensions
-    int[][] dimensions = getLayoutDimensions();
-    int gridWidth = dimensions[0].length;
-    int gridHeight = dimensions[1].length;
-    if (!m_dimensionsInitialized) {
-      m_dimensionsInitialized = true;
-      // columns
-      for (int i = 0; i < gridWidth; i++) {
-        ColumnInfo column = new ColumnInfo(this, m_columnOperations);
-        m_columns.add(column);
-        column.initialize();
-      }
-      if (!m_columns.isEmpty() && m_columns.getLast().isFiller()) {
-        m_columns.removeLast();
-      }
-      // rows
-      for (int i = 0; i < gridHeight; i++) {
-        RowInfo row = new RowInfo(this, m_rowOperations);
-        m_rows.add(row);
-        row.initialize();
-      }
-      if (!m_rows.isEmpty() && m_rows.getLast().isFiller()) {
-        m_rows.removeLast();
-      }
-    }
-    // cut columns/rows that does not exist in layout
-    {
-      boolean removedAnyDimension = false;
-      removedAnyDimension |= m_columnOperations.cutToGrid(gridWidth);
-      removedAnyDimension |= m_rowOperations.cutToGrid(gridHeight);
-      if (removedAnyDimension) {
-        getEditor().commitChanges();
-      }
-    }
-    // set constant size for empty columns/rows
-    {
-      // prepare columns/rows with components
-      beforeRefreshFilled();
-      visitComponents(new IComponentVisitor() {
-        public void visit(ComponentInfo component, AbstractGridBagConstraintsInfo constraints)
-            throws Exception {
-          if (constraints.width == 1) {
-            m_refreshFilledColumns.add(constraints.x);
-          }
-          if (constraints.height == 1) {
-            m_refreshFilledRows.add(constraints.y);
-          }
-        }
-      });
-      // we changed minimum size for columns/rows, force layout
-      if (afterRefreshFilled()) {
-        getContainer().getContainer().doLayout();
-        ((AbstractComponentInfo) getRoot()).getTopBoundsSupport().apply();
-      }
-    }
-  }
-
-  /**
-   * Do before fetching filled columns/rows numbers in {@link #refresh_afterCreate()}.
-   */
-  protected void beforeRefreshFilled() throws Exception {
-    m_refreshFilledColumns.clear();
-    m_refreshFilledRows.clear();
-  }
-
-  /**
-   * Do after fetching filled columns/rows numbers in {@link #refresh_afterCreate()}.
-   */
-  protected boolean afterRefreshFilled() throws Exception {
-    return false;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Dimensions
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private boolean m_dimensionsInitialized;
-  private final LinkedList<ColumnInfo> m_columns = Lists.newLinkedList();
-  private final LinkedList<RowInfo> m_rows = Lists.newLinkedList();
-  private final DimensionOperations<ColumnInfo> m_columnOperations =
-      new DimensionOperationsColumn(this);
-  private final DimensionOperations<RowInfo> m_rowOperations = new DimensionOperationsRow(this);
-
-  /**
-   * @return Dimensions
-   */
-  protected abstract int[][] getLayoutDimensions() throws Exception;
-
-  /**
-   * @return Origin
-   */
-  protected abstract java.awt.Point getLayoutOrigin() throws Exception;
-
-  /**
-   * @return the {@link ColumnInfo}'s of this {@link AbstractGridBagLayoutInfo}.
-   */
-  public LinkedList<ColumnInfo> getColumns() {
-    return m_columns;
-  }
-
-  /**
-   * @return the {@link RowInfo}'s of this {@link AbstractGridBagLayoutInfo}.
-   */
-  public LinkedList<RowInfo> getRows() {
-    return m_rows;
-  }
-
-  /**
-   * @return the {@link DimensionOperations} for operations with {@link ColumnInfo}'s.
-   */
-  public DimensionOperations<ColumnInfo> getColumnOperations() {
-    return m_columnOperations;
-  }
-
-  /**
-   * @return the {@link DimensionOperations} for operations with {@link RowInfo}'s.
-   */
-  public DimensionOperations<RowInfo> getRowOperations() {
-    return m_rowOperations;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Creates new {@link ComponentInfo} in given cell.
-   *
-   * @param newComponent
-   *          the new {@link ComponentInfo} to create.
-   * @param column
-   *          the column, 0 based.
-   * @param row
-   *          the row, 0 based.
-   */
-  public void command_CREATE(ComponentInfo newComponent,
-      int column,
-      boolean insertColumn,
-      int row,
-      boolean insertRow) throws Exception {
-    prepareCell(column, insertColumn, row, insertRow);
-    // do add
-    ComponentInfo nextComponent = getReference(column, row, null);
-    add(newComponent, null, nextComponent);
-    // set location
-    AbstractGridBagConstraintsInfo constraints = getConstraints(newComponent);
-    constraints.setY(row);
-    constraints.setX(column);
-    // automatic alignment
-    doAutomaticAlignment(newComponent);
-    // ensure gaps
-    ensureGapInsets();
-  }
-
-  /**
-   * Creates new {@link ComponentInfo} into first empty cell at the end of grid.
-   */
-  public void command_CREATE_last(ComponentInfo newComponent) throws Exception {
-    Point emptyCell = getFirstEmptyCellAtTheEnd();
-    if (emptyCell == null) {
-      IGridInfo gridInfo = getGridInfo();
-      int rowCount = gridInfo.getRowCount();
-      emptyCell = new Point(0, rowCount);
-    }
-    command_CREATE(newComponent, emptyCell.x, false, emptyCell.y, false);
-  }
-
-  /**
-   * Moves given {@link ComponentInfo} in new cell.
-   *
-   * @param component
-   *          the new {@link ComponentInfo} to move.
-   * @param column
-   *          the column, 0 based.
-   * @param row
-   *          the row, 0 based.
-   */
-  public void command_MOVE(ComponentInfo component,
-      int column,
-      boolean insertColumn,
-      int row,
-      boolean insertRow) throws Exception {
-    prepareCell(column, insertColumn, row, insertRow);
-    // do move
-    ComponentInfo nextComponent = getReference(column, row, component);
-    move(component, null, nextComponent);
-    // set location
-    AbstractGridBagConstraintsInfo constraints = getConstraints(component);
-    constraints.setY(row);
-    constraints.setX(column);
-    // ensure gaps
-    ensureGapInsets();
-  }
-
-  /**
-   * Sets the location/size of {@link ComponentInfo} inside of existing cells, without
-   * inserting/appending new dimensions.
-   */
-  public void command_setCells(ComponentInfo component, Rectangle cells) throws Exception {
-    AbstractGridBagConstraintsInfo constraints = getConstraints(component);
-    // may be move
-    if (constraints.x != cells.x || constraints.y != cells.y) {
-      ComponentInfo nextComponent = getReference(cells.x, cells.y, component);
-      move(component, null, nextComponent);
-    }
-    // set location/size
-    constraints.setX(cells.x);
-    constraints.setY(cells.y);
-    constraints.setWidth(cells.width);
-    constraints.setHeight(cells.height);
-    // ensure gaps
-    ensureGapInsets();
-  }
-
-  private Point getFirstEmptyCellAtTheEnd() {
-    IGridInfo gridInfo = getGridInfo();
-    int columnCount = gridInfo.getColumnCount();
-    int rowCount = gridInfo.getRowCount();
-    int emptyRow = -1;
-    int emptyColumn = -1;
-    for (int row = rowCount - 1; row >= 0; row--) {
-      for (int column = columnCount - 1; column >= 0; column--) {
-        if (gridInfo.getOccupied(column, row) != null) {
-          break;
-        }
-        emptyRow = row;
-        emptyColumn = column;
-      }
-    }
-    if (emptyColumn == -1) {
-      return null;
-    }
-    return new Point(emptyColumn, emptyRow);
-  }
-
-  /**
-   * @return the {@link ComponentInfo} that should be used as reference of adding into given cell.
-   *
-   * @param exclude
-   *          the {@link ComponentInfo} that should not be checked, for example because we move it
-   *          now.
-   */
-  private ComponentInfo getReference(int column, int row, ComponentInfo exclude) throws Exception {
-    for (ComponentInfo component : getComponents()) {
-      if (component != exclude) {
-        AbstractGridBagConstraintsInfo constraints = getConstraints(component);
-        if (constraints.y > row || constraints.y == row && constraints.x >= column) {
-          return component;
-        }
-      }
-    }
-    // no reference
-    return null;
-  }
-
-  /**
-   * Prepares cell with given column/row - inserts columns/rows if necessary.
-   */
-  void prepareCell(int column, boolean insertColumn, int row, boolean insertRow) throws Exception {
-    // as first step: materialize locations
-    visitComponents(new IComponentVisitor() {
-      public void visit(ComponentInfo component, AbstractGridBagConstraintsInfo constraints)
-          throws Exception {
-        constraints.materializeLocation();
-      }
-    });
-    // prepare dimensions
-    m_columnOperations.prepare(column, insertColumn);
-    m_rowOperations.prepare(row, insertRow);
-  }
-
-  /**
-   * Ensures that in the middle of the grid have gap insets on the right/bottom.
-   */
-  void ensureGapInsets() throws Exception {
-    // may be changing insets disabled
-    {
-      IPreferenceStore preferences = Activator.getDefault().getPreferenceStore();
-      if (!preferences.getBoolean(IPreferenceConstants.P_CHANGE_INSETS_FOR_GAPS)) {
-        return;
-      }
-    }
-    // perform changes
-    visitComponents(new IComponentVisitor() {
-      public void visit(ComponentInfo component, AbstractGridBagConstraintsInfo constraints)
-          throws Exception {
-        if (constraints.x + constraints.width < m_columns.size()) {
-          ensureInsets(constraints, "right", true);
-        } else {
-          removeInsets(constraints, "right", true);
-        }
-        if (constraints.y + constraints.height < m_rows.size()) {
-          ensureInsets(constraints, "bottom", false);
-        } else {
-          removeInsets(constraints, "bottom", false);
-        }
-      }
-
-      /**
-       * Ensures that given {@link AbstractGridBagConstraintsInfo} has at least <code>GAP</code> as
-       * insets on given side.
-       */
-      private void ensureInsets(AbstractGridBagConstraintsInfo constraints,
-          String side,
-          boolean horizontal) throws Exception {
-        int value = constraints.getInsets(side);
-        if (value < getGap(horizontal)) {
-          constraints.setInsets(side, getGap(horizontal));
-        }
-      }
-
-      /**
-       * Removes <code>GAP</code> insets of given side of {@link AbstractGridBagConstraintsInfo}.
-       */
-      private void removeInsets(AbstractGridBagConstraintsInfo constraints,
-          String side,
-          boolean horizontal) throws Exception {
-        int value = constraints.getInsets(side);
-        if (value == getGap(horizontal)) {
-          constraints.setInsets(side, 0);
-        }
-      }
-    });
-  }
-
-  /**
-   * @return the gap between dimensions.
-   */
-  private static int getGap(boolean horizontal) {
-    IPreferenceStore preferences = Activator.getDefault().getPreferenceStore();
-    String key = horizontal ? IPreferenceConstants.P_GAP_COLUMN : IPreferenceConstants.P_GAP_ROW;
-    return preferences.getInt(key);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Automatic alignment
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private boolean m_autoAlignmentEnabled = true;
-
-  /**
-   * Performs automatic alignment, such as grab/fill for {@link JTextField} or {@link JTable}, right
-   * alignment for {@link JLabel}.
-   */
-  private void doAutomaticAlignment(ComponentInfo component) throws Exception {
-    if (!m_autoAlignmentEnabled) {
-      return;
-    }
-    GridAlignmentHelper.doAutomaticAlignment(component, new IAlignmentProcessor<ComponentInfo>() {
-      public boolean grabEnabled() {
-        return getDescription().getToolkit().getPreferences().getBoolean(P_ENABLE_GRAB);
-      }
-
-      public boolean rightEnabled() {
-        return getDescription().getToolkit().getPreferences().getBoolean(P_ENABLE_RIGHT_ALIGNMENT);
-      }
-
-      public ComponentInfo getComponentAtLeft(ComponentInfo component) {
-        AbstractGridBagConstraintsInfo constraints = getConstraints(component);
-        return getComponentAt(constraints.x - 1, constraints.y);
-      }
-
-      public ComponentInfo getComponentAtRight(ComponentInfo component) {
-        AbstractGridBagConstraintsInfo constraints = getConstraints(component);
-        return getComponentAt(constraints.x + 1, constraints.y);
-      }
-
-      public void setGrabFill(ComponentInfo component, boolean horizontal) throws Exception {
-        AbstractGridBagConstraintsInfo constraints = getConstraints(component);
-        if (horizontal) {
-          getColumns().get(constraints.x).setWeight(1.0);
-          constraints.setHorizontalAlignment(ColumnInfo.Alignment.FILL);
-        } else {
-          getRows().get(constraints.y).setWeight(1.0);
-          constraints.setVerticalAlignment(RowInfo.Alignment.FILL);
-        }
-      }
-
-      public void setRightAlignment(ComponentInfo component) throws Exception {
-        AbstractGridBagConstraintsInfo constraints = getConstraints(component);
-        constraints.setHorizontalAlignment(ColumnInfo.Alignment.RIGHT);
-      }
-    });
-  }
-
-  /**
-   * @return the {@link ComponentInfo} with given top-left cell, may be <code>null</code>.
-   */
-  private ComponentInfo getComponentAt(int x, int y) {
-    for (ComponentInfo component : getComponents()) {
-      AbstractGridBagConstraintsInfo constraints = getConstraints(component);
-      if (constraints.x == x && constraints.y == y) {
-        return component;
-      }
-    }
-    // no such component
-    return null;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Clipboard
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void clipboardCopy_addContainerCommands(List<ClipboardCommand> commands)
-      throws Exception {
-    commands.add(getColumnOperations().getClipboardCommand());
-    commands.add(getRowOperations().getClipboardCommand());
-    super.clipboardCopy_addContainerCommands(commands);
-  }
-
-  @Override
-  protected void clipboardCopy_addComponentCommands(ComponentInfo component,
-      List<ClipboardCommand> commands) throws Exception {
-    // prepare information
-    final Rectangle cells = getGridInfo().getComponentCells(component);
-    final PropertiesClipboardCommand propertiesCommand;
-    {
-      AbstractGridBagConstraintsInfo constraints = getConstraints(component);
-      propertiesCommand = new PropertiesClipboardCommand(constraints);
-    }
-    // add command
-    commands.add(new LayoutClipboardCommand<AbstractGridBagLayoutInfo>(component) {
-      private static final long serialVersionUID = 0L;
-
-      @Override
-      protected void add(AbstractGridBagLayoutInfo layout, ComponentInfo component)
-          throws Exception {
-        layout.m_autoAlignmentEnabled = false;
-        try {
-          layout.command_CREATE(component, cells.x, false, cells.y, false);
-          layout.command_setCells(component, cells);
-          {
-            AbstractGridBagConstraintsInfo constraints = layout.getConstraints(component);
-            propertiesCommand.execute(constraints);
-          }
-        } finally {
-          layout.m_autoAlignmentEnabled = true;
-        }
-      }
-    });
-    super.clipboardCopy_addComponentCommands(component, commands);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Images
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link Image} for {@link AbstractGridBagLayoutInfo}.
-   */
-  public static Image getImage(String name) {
-    return Activator.getImage("info/layout/gridBagLayout/" + name);
-  }
-
-  /**
-   * @return the {@link ImageDescriptor} for {@link AbstractGridBagLayoutInfo}.
-   */
-  public static ImageDescriptor getImageDescriptor(String name) {
-    return Activator.getImageDescriptor("info/layout/gridBagLayout/" + name);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IGridInfo support
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected static final int EMPTY_DIM = 25;
-  protected static final int EMPTY_GAP = 5;
-  private IGridInfo m_gridInfo;
-
-  /**
-   * @return the {@link IGridInfo} that describes this layout.
-   */
-  public IGridInfo getGridInfo() {
-    if (m_gridInfo == null) {
-      ExecutionUtils.runRethrow(new RunnableEx() {
-        public void run() throws Exception {
-          createGridInfo();
-        }
-      });
-    }
-    return m_gridInfo;
-  }
-
-  /**
-   * Initializes {@link #m_gridInfo}.
-   */
-  private void createGridInfo() throws Exception {
-    // prepare cells
-    final Map<ComponentInfo, Rectangle> componentToCells = Maps.newHashMap();
-    final Map<Point, ComponentInfo> occupiedCells = Maps.newHashMap();
-    visitComponents(new IComponentVisitor() {
-      public void visit(ComponentInfo component, AbstractGridBagConstraintsInfo constraints)
-          throws Exception {
-        Rectangle cells =
-            new Rectangle(constraints.x, constraints.y, constraints.width, constraints.height);
-        // fill map: ComponentInfo -> cells Rectangle
-        componentToCells.put(component, cells);
-        // fill map: occupied cells
-        for (int x = cells.x; x < cells.right(); x++) {
-          for (int y = cells.y; y < cells.bottom(); y++) {
-            occupiedCells.put(new Point(x, y), component);
-          }
-        }
-      }
-    });
-    // prepare intervals
-    Interval[] columnIntervals;
-    Interval[] rowIntervals;
-    {
-      int[][] layoutDimensions = getLayoutDimensions();
-      java.awt.Point layoutOrigin = getLayoutOrigin();
-      // convert origins into intervals
-      columnIntervals = getIntervalsForLengths(layoutOrigin.x, layoutDimensions[0]);
-      rowIntervals = getIntervalsForLengths(layoutOrigin.y, layoutDimensions[1]);
-      // update intervals with insets (gaps)
-      {
-        final int[] leftGaps = new int[columnIntervals.length];
-        final int[] rightGaps = new int[columnIntervals.length];
-        final int[] topGaps = new int[rowIntervals.length];
-        final int[] bottomGaps = new int[rowIntervals.length];
-        // deduce gaps from insets
-        visitComponents(new IComponentVisitor() {
-          public void visit(ComponentInfo component, AbstractGridBagConstraintsInfo constraints)
-              throws Exception {
-            updateGaps(leftGaps, constraints.x, constraints.insets.left);
-            updateGaps(rightGaps, constraints.x + constraints.width - 1, constraints.insets.right);
-            updateGaps(topGaps, constraints.y, constraints.insets.top);
-            updateGaps(
-                bottomGaps,
-                constraints.y + constraints.height - 1,
-                constraints.insets.bottom);
-          }
-
-          private void updateGaps(int[] gaps, int index, int newGap) {
-            newGap = Math.max(newGap, 0);
-            if (gaps[index] == 0) {
-              gaps[index] = newGap;
-            } else {
-              gaps[index] = Math.min(gaps[index], newGap);
-            }
-          }
-        });
-        // force gap after empty column/row
-        for (int column = 0; column < rightGaps.length; column++) {
-          if (!m_refreshFilledColumns.contains(column)) {
-            rightGaps[column] = EMPTY_GAP;
-          }
-        }
-        for (int row = 0; row < bottomGaps.length; row++) {
-          if (!m_refreshFilledRows.contains(row)) {
-            bottomGaps[row] = EMPTY_GAP;
-          }
-        }
-        // update intervals
-        updateIntervals(columnIntervals, leftGaps, rightGaps);
-        updateIntervals(rowIntervals, topGaps, bottomGaps);
-      }
-      // if last interval has weight 1.0E-4, it should be considered as synthetic and removed
-      columnIntervals = checkColumnIntervals(columnIntervals);
-      rowIntervals = checkRowIntervals(rowIntervals);
-    }
-    // create IGridInfo instance
-    final Interval[] m_columnIntervals = columnIntervals;
-    final Interval[] m_rowIntervals = rowIntervals;
-    m_gridInfo = new IGridInfo() {
-      ////////////////////////////////////////////////////////////////////////////
-      //
-      // Dimensions
-      //
-      ////////////////////////////////////////////////////////////////////////////
-      public int getColumnCount() {
-        return m_columnIntervals.length;
-      }
-
-      public int getRowCount() {
-        return m_rowIntervals.length;
-      }
-
-      ////////////////////////////////////////////////////////////////////////////
-      //
-      // Intervals
-      //
-      ////////////////////////////////////////////////////////////////////////////
-      public Interval[] getColumnIntervals() {
-        return m_columnIntervals;
-      }
-
-      public Interval[] getRowIntervals() {
-        return m_rowIntervals;
-      }
-
-      ////////////////////////////////////////////////////////////////////////////
-      //
-      // Cells
-      //
-      ////////////////////////////////////////////////////////////////////////////
-      public Rectangle getComponentCells(IAbstractComponentInfo component) {
-        Assert.instanceOf(ComponentInfo.class, component);
-        return componentToCells.get(component);
-      }
-
-      public Rectangle getCellsRectangle(Rectangle cells) {
-        int x = m_columnIntervals[cells.x].begin();
-        int y = m_rowIntervals[cells.y].begin();
-        int w = m_columnIntervals[cells.right() - 1].end() - x;
-        int h = m_rowIntervals[cells.bottom() - 1].end() - y;
-        return new Rectangle(x, y, w + 1, h + 1);
-      }
-
-      ////////////////////////////////////////////////////////////////////////////
-      //
-      // Feedback
-      //
-      ////////////////////////////////////////////////////////////////////////////
-      public boolean isRTL() {
-        return false;
-      }
-
-      public Insets getInsets() {
-        return getContainer().getInsets();
-      }
-
-      ////////////////////////////////////////////////////////////////////////////
-      //
-      // Virtual columns
-      //
-      ////////////////////////////////////////////////////////////////////////////
-      public boolean hasVirtualColumns() {
-        return true;
-      }
-
-      public int getVirtualColumnSize() {
-        return EMPTY_DIM;
-      }
-
-      public int getVirtualColumnGap() {
-        return EMPTY_GAP;
-      }
-
-      ////////////////////////////////////////////////////////////////////////////
-      //
-      // Virtual rows
-      //
-      ////////////////////////////////////////////////////////////////////////////
-      public boolean hasVirtualRows() {
-        return true;
-      }
-
-      public int getVirtualRowSize() {
-        return EMPTY_DIM;
-      }
-
-      public int getVirtualRowGap() {
-        return EMPTY_GAP;
-      }
-
-      ////////////////////////////////////////////////////////////////////////////
-      //
-      // Checks
-      //
-      ////////////////////////////////////////////////////////////////////////////
-      public ComponentInfo getOccupied(int column, int row) {
-        return occupiedCells.get(new Point(column, row));
-      }
-    };
-  }
-
-  protected Interval[] checkColumnIntervals(Interval[] columnIntervals) {
-    return columnIntervals;
-  }
-
-  protected Interval[] checkRowIntervals(Interval[] rowIntervals) {
-    return rowIntervals;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Manage general layout data.
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final BiMap<GeneralLayoutData.HorizontalAlignment, ColumnInfo.Alignment> m_horizontalAlignmentMap =
-      ImmutableBiMap.of(
-          GeneralLayoutData.HorizontalAlignment.LEFT,
-          ColumnInfo.Alignment.LEFT,
-          GeneralLayoutData.HorizontalAlignment.CENTER,
-          ColumnInfo.Alignment.CENTER,
-          GeneralLayoutData.HorizontalAlignment.RIGHT,
-          ColumnInfo.Alignment.RIGHT,
-          GeneralLayoutData.HorizontalAlignment.FILL,
-          ColumnInfo.Alignment.FILL,
-          GeneralLayoutData.HorizontalAlignment.NONE,
-          ColumnInfo.Alignment.UNKNOWN);
-  public static final BiMap<GeneralLayoutData.VerticalAlignment, RowInfo.Alignment> m_verticalAlignmentMap =
-      ImmutableBiMap.of(
-          GeneralLayoutData.VerticalAlignment.TOP,
-          RowInfo.Alignment.TOP,
-          GeneralLayoutData.VerticalAlignment.CENTER,
-          RowInfo.Alignment.CENTER,
-          GeneralLayoutData.VerticalAlignment.BOTTOM,
-          RowInfo.Alignment.BOTTOM,
-          GeneralLayoutData.VerticalAlignment.FILL,
-          RowInfo.Alignment.FILL,
-          GeneralLayoutData.VerticalAlignment.NONE,
-          RowInfo.Alignment.UNKNOWN);
-
-  @Override
-  protected void storeLayoutData(ComponentInfo component) throws Exception {
-    AbstractGridBagConstraintsInfo gridData = getConstraints(component);
-    if (gridData != null) {
-      GeneralLayoutData generalLayoutData = new GeneralLayoutData();
-      generalLayoutData.gridX = gridData.x;
-      generalLayoutData.gridY = gridData.y;
-      generalLayoutData.spanX = gridData.width;
-      generalLayoutData.spanY = gridData.height;
-      generalLayoutData.horizontalGrab = null;
-      generalLayoutData.verticalGrab = null;
-      // alignments
-      generalLayoutData.horizontalAlignment =
-          GeneralLayoutData.getGeneralValue(
-              m_horizontalAlignmentMap,
-              gridData.getHorizontalAlignment());
-      generalLayoutData.verticalAlignment =
-          GeneralLayoutData.getGeneralValue(m_verticalAlignmentMap, gridData.getVerticalAlignment());
-      generalLayoutData.putToInfo(component);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the array of {@link Interval}'s for given array of column/row lengths.
-   */
-  private static Interval[] getIntervalsForLengths(int begin, int lengths[]) {
-    Interval[] intervals = new Interval[lengths.length];
-    for (int i = 0; i < lengths.length; i++) {
-      int length = lengths[i];
-      intervals[i] = new Interval(begin, length);
-      begin += length;
-    }
-    return intervals;
-  }
-
-  /**
-   * Updates given {@link Interval}'s using begin/end gaps.
-   */
-  private static void updateIntervals(Interval[] intervals, int[] beginGaps, int[] endGaps) {
-    for (int i = 0; i < intervals.length; i++) {
-      Interval interval = intervals[i];
-      interval = interval.growLeading(beginGaps[i]);
-      interval = interval.growTrailing(-endGaps[i]);
-      intervals[i] = interval;
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractGridBagLayoutInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Initialize
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void initialize() throws Exception {
+		super.initialize();
+		// add listeners
+		addBroadcastListener(new JavaInfoAddProperties() {
+			public void invoke(JavaInfo javaInfo, List<Property> properties) throws Exception {
+				if (isManagedObject(javaInfo)) {
+					ComponentInfo component = (ComponentInfo) javaInfo;
+					getConstraints(component).addConstraintsProperties(properties);
+				}
+			}
+		});
+		// alignment
+		new SelectionActionsSupport(this);
+		// assistant
+		new LayoutAssistantSupport(this) {
+			@Override
+			protected AbstractAssistantPage createConstraintsPage(Composite parent,
+					List<ObjectInfo> objects) {
+				List<AbstractGridBagConstraintsInfo> constraints =
+						Lists.transform(objects, new Function<ObjectInfo, AbstractGridBagConstraintsInfo>() {
+							public AbstractGridBagConstraintsInfo apply(ObjectInfo from) {
+								return getConstraints((ComponentInfo) from);
+							}
+						});
+				return new GridBagConstraintsAssistantPage(parent, constraints);
+			}
+		};
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GridBagConstraintsInfo access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link AbstractGridBagConstraintsInfo} for given {@link ComponentInfo}.
+	 */
+	public abstract AbstractGridBagConstraintsInfo getConstraints(ComponentInfo component);
+
+	public abstract Object getConstraintsObject(java.awt.Component component) throws Exception;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Visiting
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Visits all {@link ComponentInfo} of this {@link ContainerInfo}.
+	 */
+	void visitComponents(IComponentVisitor visitor) throws Exception {
+		visitComponents(visitor, IComponentPredicate.TRUE);
+	}
+
+	/**
+	 * Visits all {@link ComponentInfo} of this {@link ContainerInfo}.
+	 */
+	void visitComponents(IComponentVisitor visitor, IComponentPredicate predicate) throws Exception {
+		List<ComponentInfo> components = ImmutableList.copyOf(getComponents());
+		for (ComponentInfo component : components) {
+			AbstractGridBagConstraintsInfo constraints = getConstraints(component);
+			if (predicate.apply(component, constraints)) {
+				visitor.visit(component, constraints);
+			}
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Set
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void onSet() throws Exception {
+		super.onSet();
+		GridBagLayoutConverter.convert(getContainer(), this);
+	}
+
+	@Override
+	protected void removeComponentConstraints(ContainerInfo container, ComponentInfo component)
+			throws Exception {
+		getConstraints(component).delete();
+		super.removeComponentConstraints(container, component);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected final Set<Integer> m_refreshFilledColumns = Sets.newTreeSet();
+	protected final Set<Integer> m_refreshFilledRows = Sets.newTreeSet();
+
+	@Override
+	public void refresh_dispose() throws Exception {
+		m_gridInfo = null;
+		super.refresh_dispose();
+	}
+
+	@Override
+	protected void refresh_afterCreate() throws Exception {
+		super.refresh_afterCreate();
+		// force layout() to calculate "real" location/size in GridBagConstraints."temp*" fields
+		{
+			ContainerInfo container = getContainer();
+			// do layout, use some reasonable size
+			{
+				Container containerObject = container.getContainer();
+				java.awt.Dimension containerSizeOriginal = containerObject.getSize();
+				try {
+					containerObject.setSize(450, 300);
+					containerObject.doLayout();
+				} finally {
+					containerObject.setSize(containerSizeOriginal);
+				}
+			}
+			// fetch fields
+			for (ComponentInfo component : getComponents()) {
+				getConstraints(component).getCurrentObjectFields(false);
+			}
+		}
+		// initialize dimensions
+		int[][] dimensions = getLayoutDimensions();
+		int gridWidth = dimensions[0].length;
+		int gridHeight = dimensions[1].length;
+		if (!m_dimensionsInitialized) {
+			m_dimensionsInitialized = true;
+			// columns
+			for (int i = 0; i < gridWidth; i++) {
+				ColumnInfo column = new ColumnInfo(this, m_columnOperations);
+				m_columns.add(column);
+				column.initialize();
+			}
+			if (!m_columns.isEmpty() && m_columns.getLast().isFiller()) {
+				m_columns.removeLast();
+			}
+			// rows
+			for (int i = 0; i < gridHeight; i++) {
+				RowInfo row = new RowInfo(this, m_rowOperations);
+				m_rows.add(row);
+				row.initialize();
+			}
+			if (!m_rows.isEmpty() && m_rows.getLast().isFiller()) {
+				m_rows.removeLast();
+			}
+		}
+		// cut columns/rows that does not exist in layout
+		{
+			boolean removedAnyDimension = false;
+			removedAnyDimension |= m_columnOperations.cutToGrid(gridWidth);
+			removedAnyDimension |= m_rowOperations.cutToGrid(gridHeight);
+			if (removedAnyDimension) {
+				getEditor().commitChanges();
+			}
+		}
+		// set constant size for empty columns/rows
+		{
+			// prepare columns/rows with components
+			beforeRefreshFilled();
+			visitComponents(new IComponentVisitor() {
+				public void visit(ComponentInfo component, AbstractGridBagConstraintsInfo constraints)
+						throws Exception {
+					if (constraints.width == 1) {
+						m_refreshFilledColumns.add(constraints.x);
+					}
+					if (constraints.height == 1) {
+						m_refreshFilledRows.add(constraints.y);
+					}
+				}
+			});
+			// we changed minimum size for columns/rows, force layout
+			if (afterRefreshFilled()) {
+				getContainer().getContainer().doLayout();
+				((AbstractComponentInfo) getRoot()).getTopBoundsSupport().apply();
+			}
+		}
+	}
+
+	/**
+	 * Do before fetching filled columns/rows numbers in {@link #refresh_afterCreate()}.
+	 */
+	protected void beforeRefreshFilled() throws Exception {
+		m_refreshFilledColumns.clear();
+		m_refreshFilledRows.clear();
+	}
+
+	/**
+	 * Do after fetching filled columns/rows numbers in {@link #refresh_afterCreate()}.
+	 */
+	protected boolean afterRefreshFilled() throws Exception {
+		return false;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Dimensions
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private boolean m_dimensionsInitialized;
+	private final LinkedList<ColumnInfo> m_columns = Lists.newLinkedList();
+	private final LinkedList<RowInfo> m_rows = Lists.newLinkedList();
+	private final DimensionOperations<ColumnInfo> m_columnOperations =
+			new DimensionOperationsColumn(this);
+	private final DimensionOperations<RowInfo> m_rowOperations = new DimensionOperationsRow(this);
+
+	/**
+	 * @return Dimensions
+	 */
+	protected abstract int[][] getLayoutDimensions() throws Exception;
+
+	/**
+	 * @return Origin
+	 */
+	protected abstract java.awt.Point getLayoutOrigin() throws Exception;
+
+	/**
+	 * @return the {@link ColumnInfo}'s of this {@link AbstractGridBagLayoutInfo}.
+	 */
+	public LinkedList<ColumnInfo> getColumns() {
+		return m_columns;
+	}
+
+	/**
+	 * @return the {@link RowInfo}'s of this {@link AbstractGridBagLayoutInfo}.
+	 */
+	public LinkedList<RowInfo> getRows() {
+		return m_rows;
+	}
+
+	/**
+	 * @return the {@link DimensionOperations} for operations with {@link ColumnInfo}'s.
+	 */
+	public DimensionOperations<ColumnInfo> getColumnOperations() {
+		return m_columnOperations;
+	}
+
+	/**
+	 * @return the {@link DimensionOperations} for operations with {@link RowInfo}'s.
+	 */
+	public DimensionOperations<RowInfo> getRowOperations() {
+		return m_rowOperations;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Creates new {@link ComponentInfo} in given cell.
+	 *
+	 * @param newComponent
+	 *          the new {@link ComponentInfo} to create.
+	 * @param column
+	 *          the column, 0 based.
+	 * @param row
+	 *          the row, 0 based.
+	 */
+	public void command_CREATE(ComponentInfo newComponent,
+			int column,
+			boolean insertColumn,
+			int row,
+			boolean insertRow) throws Exception {
+		prepareCell(column, insertColumn, row, insertRow);
+		// do add
+		ComponentInfo nextComponent = getReference(column, row, null);
+		add(newComponent, null, nextComponent);
+		// set location
+		AbstractGridBagConstraintsInfo constraints = getConstraints(newComponent);
+		constraints.setY(row);
+		constraints.setX(column);
+		// automatic alignment
+		doAutomaticAlignment(newComponent);
+		// ensure gaps
+		ensureGapInsets();
+	}
+
+	/**
+	 * Creates new {@link ComponentInfo} into first empty cell at the end of grid.
+	 */
+	public void command_CREATE_last(ComponentInfo newComponent) throws Exception {
+		Point emptyCell = getFirstEmptyCellAtTheEnd();
+		if (emptyCell == null) {
+			IGridInfo gridInfo = getGridInfo();
+			int rowCount = gridInfo.getRowCount();
+			emptyCell = new Point(0, rowCount);
+		}
+		command_CREATE(newComponent, emptyCell.x, false, emptyCell.y, false);
+	}
+
+	/**
+	 * Moves given {@link ComponentInfo} in new cell.
+	 *
+	 * @param component
+	 *          the new {@link ComponentInfo} to move.
+	 * @param column
+	 *          the column, 0 based.
+	 * @param row
+	 *          the row, 0 based.
+	 */
+	public void command_MOVE(ComponentInfo component,
+			int column,
+			boolean insertColumn,
+			int row,
+			boolean insertRow) throws Exception {
+		prepareCell(column, insertColumn, row, insertRow);
+		// do move
+		ComponentInfo nextComponent = getReference(column, row, component);
+		move(component, null, nextComponent);
+		// set location
+		AbstractGridBagConstraintsInfo constraints = getConstraints(component);
+		constraints.setY(row);
+		constraints.setX(column);
+		// ensure gaps
+		ensureGapInsets();
+	}
+
+	/**
+	 * Sets the location/size of {@link ComponentInfo} inside of existing cells, without
+	 * inserting/appending new dimensions.
+	 */
+	public void command_setCells(ComponentInfo component, Rectangle cells) throws Exception {
+		AbstractGridBagConstraintsInfo constraints = getConstraints(component);
+		// may be move
+		if (constraints.x != cells.x || constraints.y != cells.y) {
+			ComponentInfo nextComponent = getReference(cells.x, cells.y, component);
+			move(component, null, nextComponent);
+		}
+		// set location/size
+		constraints.setX(cells.x);
+		constraints.setY(cells.y);
+		constraints.setWidth(cells.width);
+		constraints.setHeight(cells.height);
+		// ensure gaps
+		ensureGapInsets();
+	}
+
+	private Point getFirstEmptyCellAtTheEnd() {
+		IGridInfo gridInfo = getGridInfo();
+		int columnCount = gridInfo.getColumnCount();
+		int rowCount = gridInfo.getRowCount();
+		int emptyRow = -1;
+		int emptyColumn = -1;
+		for (int row = rowCount - 1; row >= 0; row--) {
+			for (int column = columnCount - 1; column >= 0; column--) {
+				if (gridInfo.getOccupied(column, row) != null) {
+					break;
+				}
+				emptyRow = row;
+				emptyColumn = column;
+			}
+		}
+		if (emptyColumn == -1) {
+			return null;
+		}
+		return new Point(emptyColumn, emptyRow);
+	}
+
+	/**
+	 * @return the {@link ComponentInfo} that should be used as reference of adding into given cell.
+	 *
+	 * @param exclude
+	 *          the {@link ComponentInfo} that should not be checked, for example because we move it
+	 *          now.
+	 */
+	private ComponentInfo getReference(int column, int row, ComponentInfo exclude) throws Exception {
+		for (ComponentInfo component : getComponents()) {
+			if (component != exclude) {
+				AbstractGridBagConstraintsInfo constraints = getConstraints(component);
+				if (constraints.y > row || constraints.y == row && constraints.x >= column) {
+					return component;
+				}
+			}
+		}
+		// no reference
+		return null;
+	}
+
+	/**
+	 * Prepares cell with given column/row - inserts columns/rows if necessary.
+	 */
+	void prepareCell(int column, boolean insertColumn, int row, boolean insertRow) throws Exception {
+		// as first step: materialize locations
+		visitComponents(new IComponentVisitor() {
+			public void visit(ComponentInfo component, AbstractGridBagConstraintsInfo constraints)
+					throws Exception {
+				constraints.materializeLocation();
+			}
+		});
+		// prepare dimensions
+		m_columnOperations.prepare(column, insertColumn);
+		m_rowOperations.prepare(row, insertRow);
+	}
+
+	/**
+	 * Ensures that in the middle of the grid have gap insets on the right/bottom.
+	 */
+	void ensureGapInsets() throws Exception {
+		// may be changing insets disabled
+		{
+			IPreferenceStore preferences = Activator.getDefault().getPreferenceStore();
+			if (!preferences.getBoolean(IPreferenceConstants.P_CHANGE_INSETS_FOR_GAPS)) {
+				return;
+			}
+		}
+		// perform changes
+		visitComponents(new IComponentVisitor() {
+			public void visit(ComponentInfo component, AbstractGridBagConstraintsInfo constraints)
+					throws Exception {
+				if (constraints.x + constraints.width < m_columns.size()) {
+					ensureInsets(constraints, "right", true);
+				} else {
+					removeInsets(constraints, "right", true);
+				}
+				if (constraints.y + constraints.height < m_rows.size()) {
+					ensureInsets(constraints, "bottom", false);
+				} else {
+					removeInsets(constraints, "bottom", false);
+				}
+			}
+
+			/**
+			 * Ensures that given {@link AbstractGridBagConstraintsInfo} has at least <code>GAP</code> as
+			 * insets on given side.
+			 */
+			private void ensureInsets(AbstractGridBagConstraintsInfo constraints,
+					String side,
+					boolean horizontal) throws Exception {
+				int value = constraints.getInsets(side);
+				if (value < getGap(horizontal)) {
+					constraints.setInsets(side, getGap(horizontal));
+				}
+			}
+
+			/**
+			 * Removes <code>GAP</code> insets of given side of {@link AbstractGridBagConstraintsInfo}.
+			 */
+			private void removeInsets(AbstractGridBagConstraintsInfo constraints,
+					String side,
+					boolean horizontal) throws Exception {
+				int value = constraints.getInsets(side);
+				if (value == getGap(horizontal)) {
+					constraints.setInsets(side, 0);
+				}
+			}
+		});
+	}
+
+	/**
+	 * @return the gap between dimensions.
+	 */
+	private static int getGap(boolean horizontal) {
+		IPreferenceStore preferences = Activator.getDefault().getPreferenceStore();
+		String key = horizontal ? IPreferenceConstants.P_GAP_COLUMN : IPreferenceConstants.P_GAP_ROW;
+		return preferences.getInt(key);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Automatic alignment
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private boolean m_autoAlignmentEnabled = true;
+
+	/**
+	 * Performs automatic alignment, such as grab/fill for {@link JTextField} or {@link JTable}, right
+	 * alignment for {@link JLabel}.
+	 */
+	private void doAutomaticAlignment(ComponentInfo component) throws Exception {
+		if (!m_autoAlignmentEnabled) {
+			return;
+		}
+		GridAlignmentHelper.doAutomaticAlignment(component, new IAlignmentProcessor<ComponentInfo>() {
+			public boolean grabEnabled() {
+				return getDescription().getToolkit().getPreferences().getBoolean(P_ENABLE_GRAB);
+			}
+
+			public boolean rightEnabled() {
+				return getDescription().getToolkit().getPreferences().getBoolean(P_ENABLE_RIGHT_ALIGNMENT);
+			}
+
+			public ComponentInfo getComponentAtLeft(ComponentInfo component) {
+				AbstractGridBagConstraintsInfo constraints = getConstraints(component);
+				return getComponentAt(constraints.x - 1, constraints.y);
+			}
+
+			public ComponentInfo getComponentAtRight(ComponentInfo component) {
+				AbstractGridBagConstraintsInfo constraints = getConstraints(component);
+				return getComponentAt(constraints.x + 1, constraints.y);
+			}
+
+			public void setGrabFill(ComponentInfo component, boolean horizontal) throws Exception {
+				AbstractGridBagConstraintsInfo constraints = getConstraints(component);
+				if (horizontal) {
+					getColumns().get(constraints.x).setWeight(1.0);
+					constraints.setHorizontalAlignment(ColumnInfo.Alignment.FILL);
+				} else {
+					getRows().get(constraints.y).setWeight(1.0);
+					constraints.setVerticalAlignment(RowInfo.Alignment.FILL);
+				}
+			}
+
+			public void setRightAlignment(ComponentInfo component) throws Exception {
+				AbstractGridBagConstraintsInfo constraints = getConstraints(component);
+				constraints.setHorizontalAlignment(ColumnInfo.Alignment.RIGHT);
+			}
+		});
+	}
+
+	/**
+	 * @return the {@link ComponentInfo} with given top-left cell, may be <code>null</code>.
+	 */
+	private ComponentInfo getComponentAt(int x, int y) {
+		for (ComponentInfo component : getComponents()) {
+			AbstractGridBagConstraintsInfo constraints = getConstraints(component);
+			if (constraints.x == x && constraints.y == y) {
+				return component;
+			}
+		}
+		// no such component
+		return null;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Clipboard
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void clipboardCopy_addContainerCommands(List<ClipboardCommand> commands)
+			throws Exception {
+		commands.add(getColumnOperations().getClipboardCommand());
+		commands.add(getRowOperations().getClipboardCommand());
+		super.clipboardCopy_addContainerCommands(commands);
+	}
+
+	@Override
+	protected void clipboardCopy_addComponentCommands(ComponentInfo component,
+			List<ClipboardCommand> commands) throws Exception {
+		// prepare information
+		final Rectangle cells = getGridInfo().getComponentCells(component);
+		final PropertiesClipboardCommand propertiesCommand;
+		{
+			AbstractGridBagConstraintsInfo constraints = getConstraints(component);
+			propertiesCommand = new PropertiesClipboardCommand(constraints);
+		}
+		// add command
+		commands.add(new LayoutClipboardCommand<AbstractGridBagLayoutInfo>(component) {
+			private static final long serialVersionUID = 0L;
+
+			@Override
+			protected void add(AbstractGridBagLayoutInfo layout, ComponentInfo component)
+					throws Exception {
+				layout.m_autoAlignmentEnabled = false;
+				try {
+					layout.command_CREATE(component, cells.x, false, cells.y, false);
+					layout.command_setCells(component, cells);
+					{
+						AbstractGridBagConstraintsInfo constraints = layout.getConstraints(component);
+						propertiesCommand.execute(constraints);
+					}
+				} finally {
+					layout.m_autoAlignmentEnabled = true;
+				}
+			}
+		});
+		super.clipboardCopy_addComponentCommands(component, commands);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Images
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link Image} for {@link AbstractGridBagLayoutInfo}.
+	 */
+	public static Image getImage(String name) {
+		return Activator.getImage("info/layout/gridBagLayout/" + name);
+	}
+
+	/**
+	 * @return the {@link ImageDescriptor} for {@link AbstractGridBagLayoutInfo}.
+	 */
+	public static ImageDescriptor getImageDescriptor(String name) {
+		return Activator.getImageDescriptor("info/layout/gridBagLayout/" + name);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IGridInfo support
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected static final int EMPTY_DIM = 25;
+	protected static final int EMPTY_GAP = 5;
+	private IGridInfo m_gridInfo;
+
+	/**
+	 * @return the {@link IGridInfo} that describes this layout.
+	 */
+	public IGridInfo getGridInfo() {
+		if (m_gridInfo == null) {
+			ExecutionUtils.runRethrow(new RunnableEx() {
+				public void run() throws Exception {
+					createGridInfo();
+				}
+			});
+		}
+		return m_gridInfo;
+	}
+
+	/**
+	 * Initializes {@link #m_gridInfo}.
+	 */
+	private void createGridInfo() throws Exception {
+		// prepare cells
+		final Map<ComponentInfo, Rectangle> componentToCells = Maps.newHashMap();
+		final Map<Point, ComponentInfo> occupiedCells = Maps.newHashMap();
+		visitComponents(new IComponentVisitor() {
+			public void visit(ComponentInfo component, AbstractGridBagConstraintsInfo constraints)
+					throws Exception {
+				Rectangle cells =
+						new Rectangle(constraints.x, constraints.y, constraints.width, constraints.height);
+				// fill map: ComponentInfo -> cells Rectangle
+				componentToCells.put(component, cells);
+				// fill map: occupied cells
+				for (int x = cells.x; x < cells.right(); x++) {
+					for (int y = cells.y; y < cells.bottom(); y++) {
+						occupiedCells.put(new Point(x, y), component);
+					}
+				}
+			}
+		});
+		// prepare intervals
+		Interval[] columnIntervals;
+		Interval[] rowIntervals;
+		{
+			int[][] layoutDimensions = getLayoutDimensions();
+			java.awt.Point layoutOrigin = getLayoutOrigin();
+			// convert origins into intervals
+			columnIntervals = getIntervalsForLengths(layoutOrigin.x, layoutDimensions[0]);
+			rowIntervals = getIntervalsForLengths(layoutOrigin.y, layoutDimensions[1]);
+			// update intervals with insets (gaps)
+			{
+				final int[] leftGaps = new int[columnIntervals.length];
+				final int[] rightGaps = new int[columnIntervals.length];
+				final int[] topGaps = new int[rowIntervals.length];
+				final int[] bottomGaps = new int[rowIntervals.length];
+				// deduce gaps from insets
+				visitComponents(new IComponentVisitor() {
+					public void visit(ComponentInfo component, AbstractGridBagConstraintsInfo constraints)
+							throws Exception {
+						updateGaps(leftGaps, constraints.x, constraints.insets.left);
+						updateGaps(rightGaps, constraints.x + constraints.width - 1, constraints.insets.right);
+						updateGaps(topGaps, constraints.y, constraints.insets.top);
+						updateGaps(
+								bottomGaps,
+								constraints.y + constraints.height - 1,
+								constraints.insets.bottom);
+					}
+
+					private void updateGaps(int[] gaps, int index, int newGap) {
+						newGap = Math.max(newGap, 0);
+						if (gaps[index] == 0) {
+							gaps[index] = newGap;
+						} else {
+							gaps[index] = Math.min(gaps[index], newGap);
+						}
+					}
+				});
+				// force gap after empty column/row
+				for (int column = 0; column < rightGaps.length; column++) {
+					if (!m_refreshFilledColumns.contains(column)) {
+						rightGaps[column] = EMPTY_GAP;
+					}
+				}
+				for (int row = 0; row < bottomGaps.length; row++) {
+					if (!m_refreshFilledRows.contains(row)) {
+						bottomGaps[row] = EMPTY_GAP;
+					}
+				}
+				// update intervals
+				updateIntervals(columnIntervals, leftGaps, rightGaps);
+				updateIntervals(rowIntervals, topGaps, bottomGaps);
+			}
+			// if last interval has weight 1.0E-4, it should be considered as synthetic and removed
+			columnIntervals = checkColumnIntervals(columnIntervals);
+			rowIntervals = checkRowIntervals(rowIntervals);
+		}
+		// create IGridInfo instance
+		final Interval[] m_columnIntervals = columnIntervals;
+		final Interval[] m_rowIntervals = rowIntervals;
+		m_gridInfo = new IGridInfo() {
+			////////////////////////////////////////////////////////////////////////////
+			//
+			// Dimensions
+			//
+			////////////////////////////////////////////////////////////////////////////
+			public int getColumnCount() {
+				return m_columnIntervals.length;
+			}
+
+			public int getRowCount() {
+				return m_rowIntervals.length;
+			}
+
+			////////////////////////////////////////////////////////////////////////////
+			//
+			// Intervals
+			//
+			////////////////////////////////////////////////////////////////////////////
+			public Interval[] getColumnIntervals() {
+				return m_columnIntervals;
+			}
+
+			public Interval[] getRowIntervals() {
+				return m_rowIntervals;
+			}
+
+			////////////////////////////////////////////////////////////////////////////
+			//
+			// Cells
+			//
+			////////////////////////////////////////////////////////////////////////////
+			public Rectangle getComponentCells(IAbstractComponentInfo component) {
+				Assert.instanceOf(ComponentInfo.class, component);
+				return componentToCells.get(component);
+			}
+
+			public Rectangle getCellsRectangle(Rectangle cells) {
+				int x = m_columnIntervals[cells.x].begin();
+				int y = m_rowIntervals[cells.y].begin();
+				int w = m_columnIntervals[cells.right() - 1].end() - x;
+				int h = m_rowIntervals[cells.bottom() - 1].end() - y;
+				return new Rectangle(x, y, w + 1, h + 1);
+			}
+
+			////////////////////////////////////////////////////////////////////////////
+			//
+			// Feedback
+			//
+			////////////////////////////////////////////////////////////////////////////
+			public boolean isRTL() {
+				return false;
+			}
+
+			public Insets getInsets() {
+				return getContainer().getInsets();
+			}
+
+			////////////////////////////////////////////////////////////////////////////
+			//
+			// Virtual columns
+			//
+			////////////////////////////////////////////////////////////////////////////
+			public boolean hasVirtualColumns() {
+				return true;
+			}
+
+			public int getVirtualColumnSize() {
+				return EMPTY_DIM;
+			}
+
+			public int getVirtualColumnGap() {
+				return EMPTY_GAP;
+			}
+
+			////////////////////////////////////////////////////////////////////////////
+			//
+			// Virtual rows
+			//
+			////////////////////////////////////////////////////////////////////////////
+			public boolean hasVirtualRows() {
+				return true;
+			}
+
+			public int getVirtualRowSize() {
+				return EMPTY_DIM;
+			}
+
+			public int getVirtualRowGap() {
+				return EMPTY_GAP;
+			}
+
+			////////////////////////////////////////////////////////////////////////////
+			//
+			// Checks
+			//
+			////////////////////////////////////////////////////////////////////////////
+			public ComponentInfo getOccupied(int column, int row) {
+				return occupiedCells.get(new Point(column, row));
+			}
+		};
+	}
+
+	protected Interval[] checkColumnIntervals(Interval[] columnIntervals) {
+		return columnIntervals;
+	}
+
+	protected Interval[] checkRowIntervals(Interval[] rowIntervals) {
+		return rowIntervals;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Manage general layout data.
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final BiMap<GeneralLayoutData.HorizontalAlignment, ColumnInfo.Alignment> m_horizontalAlignmentMap =
+			ImmutableBiMap.of(
+					GeneralLayoutData.HorizontalAlignment.LEFT,
+					ColumnInfo.Alignment.LEFT,
+					GeneralLayoutData.HorizontalAlignment.CENTER,
+					ColumnInfo.Alignment.CENTER,
+					GeneralLayoutData.HorizontalAlignment.RIGHT,
+					ColumnInfo.Alignment.RIGHT,
+					GeneralLayoutData.HorizontalAlignment.FILL,
+					ColumnInfo.Alignment.FILL,
+					GeneralLayoutData.HorizontalAlignment.NONE,
+					ColumnInfo.Alignment.UNKNOWN);
+	public static final BiMap<GeneralLayoutData.VerticalAlignment, RowInfo.Alignment> m_verticalAlignmentMap =
+			ImmutableBiMap.of(
+					GeneralLayoutData.VerticalAlignment.TOP,
+					RowInfo.Alignment.TOP,
+					GeneralLayoutData.VerticalAlignment.CENTER,
+					RowInfo.Alignment.CENTER,
+					GeneralLayoutData.VerticalAlignment.BOTTOM,
+					RowInfo.Alignment.BOTTOM,
+					GeneralLayoutData.VerticalAlignment.FILL,
+					RowInfo.Alignment.FILL,
+					GeneralLayoutData.VerticalAlignment.NONE,
+					RowInfo.Alignment.UNKNOWN);
+
+	@Override
+	protected void storeLayoutData(ComponentInfo component) throws Exception {
+		AbstractGridBagConstraintsInfo gridData = getConstraints(component);
+		if (gridData != null) {
+			GeneralLayoutData generalLayoutData = new GeneralLayoutData();
+			generalLayoutData.gridX = gridData.x;
+			generalLayoutData.gridY = gridData.y;
+			generalLayoutData.spanX = gridData.width;
+			generalLayoutData.spanY = gridData.height;
+			generalLayoutData.horizontalGrab = null;
+			generalLayoutData.verticalGrab = null;
+			// alignments
+			generalLayoutData.horizontalAlignment =
+					GeneralLayoutData.getGeneralValue(
+							m_horizontalAlignmentMap,
+							gridData.getHorizontalAlignment());
+			generalLayoutData.verticalAlignment =
+					GeneralLayoutData.getGeneralValue(m_verticalAlignmentMap, gridData.getVerticalAlignment());
+			generalLayoutData.putToInfo(component);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the array of {@link Interval}'s for given array of column/row lengths.
+	 */
+	private static Interval[] getIntervalsForLengths(int begin, int lengths[]) {
+		Interval[] intervals = new Interval[lengths.length];
+		for (int i = 0; i < lengths.length; i++) {
+			int length = lengths[i];
+			intervals[i] = new Interval(begin, length);
+			begin += length;
+		}
+		return intervals;
+	}
+
+	/**
+	 * Updates given {@link Interval}'s using begin/end gaps.
+	 */
+	private static void updateIntervals(Interval[] intervals, int[] beginGaps, int[] endGaps) {
+		for (int i = 0; i < intervals.length; i++) {
+			Interval interval = intervals[i];
+			interval = interval.growLeading(beginGaps[i]);
+			interval = interval.growTrailing(-endGaps[i]);
+			intervals[i] = interval;
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/ColumnInfo.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/ColumnInfo.java
index f036bda2e..15d938e3e 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/ColumnInfo.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/ColumnInfo.java
@@ -23,91 +23,91 @@
  * @coverage swing.model.layout
  */
 public final class ColumnInfo extends DimensionInfo {
-  public enum Alignment {
-    UNKNOWN, LEFT, CENTER, RIGHT, FILL
-  }
+	public enum Alignment {
+		UNKNOWN, LEFT, CENTER, RIGHT, FILL
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ColumnInfo(AbstractGridBagLayoutInfo layout, DimensionOperations<?> operations) {
-    super(layout, operations);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ColumnInfo(AbstractGridBagLayoutInfo layout, DimensionOperations<?> operations) {
+		super(layout, operations);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the alignment of this {@link ColumnInfo}. {@link ColumnInfo} has alignment only if all
-   *         {@link ComponentInfo}'s have same alignment. In other case {@link Alignment#UNKNOWN}
-   *         will be returned.
-   */
-  public Alignment getAlignment() {
-    final EnumSet<Alignment> alignments = EnumSet.noneOf(Alignment.class);
-    visit(new IComponentVisitor() {
-      public void visit(ComponentInfo component, AbstractGridBagConstraintsInfo constraints)
-          throws Exception {
-        alignments.add(constraints.getHorizontalAlignment());
-      }
-    });
-    return alignments.size() == 1 ? alignments.iterator().next() : Alignment.UNKNOWN;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the alignment of this {@link ColumnInfo}. {@link ColumnInfo} has alignment only if all
+	 *         {@link ComponentInfo}'s have same alignment. In other case {@link Alignment#UNKNOWN}
+	 *         will be returned.
+	 */
+	public Alignment getAlignment() {
+		final EnumSet<Alignment> alignments = EnumSet.noneOf(Alignment.class);
+		visit(new IComponentVisitor() {
+			public void visit(ComponentInfo component, AbstractGridBagConstraintsInfo constraints)
+					throws Exception {
+				alignments.add(constraints.getHorizontalAlignment());
+			}
+		});
+		return alignments.size() == 1 ? alignments.iterator().next() : Alignment.UNKNOWN;
+	}
 
-  /**
-   * Sets alignment for all {@link ComponentInfo}'s in this {@link ColumnInfo}.
-   */
-  public void setAlignment(final ColumnInfo.Alignment alignment) throws Exception {
-    visit(new IComponentVisitor() {
-      public void visit(ComponentInfo component, AbstractGridBagConstraintsInfo constraints)
-          throws Exception {
-        constraints.setHorizontalAlignment(alignment);
-      }
-    });
-  }
+	/**
+	 * Sets alignment for all {@link ComponentInfo}'s in this {@link ColumnInfo}.
+	 */
+	public void setAlignment(final ColumnInfo.Alignment alignment) throws Exception {
+		visit(new IComponentVisitor() {
+			public void visit(ComponentInfo component, AbstractGridBagConstraintsInfo constraints)
+					throws Exception {
+				constraints.setHorizontalAlignment(alignment);
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Implementation access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected int initialize_getMinimumSize(int index) {
-    Object layoutObject = m_layout.getObject();
-    int[] widths = (int[]) ReflectionUtils.getFieldObject(layoutObject, "columnWidths");
-    if (widths != null && widths.length > index) {
-      return widths[index];
-    } else {
-      return 0;
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Implementation access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected int initialize_getMinimumSize(int index) {
+		Object layoutObject = m_layout.getObject();
+		int[] widths = (int[]) ReflectionUtils.getFieldObject(layoutObject, "columnWidths");
+		if (widths != null && widths.length > index) {
+			return widths[index];
+		} else {
+			return 0;
+		}
+	}
 
-  @Override
-  protected double initialize_getWeight(int index) {
-    Object layoutObject = m_layout.getObject();
-    double[] weights = (double[]) ReflectionUtils.getFieldObject(layoutObject, "columnWeights");
-    if (weights != null && weights.length > index) {
-      return weights[index];
-    } else {
-      return 0;
-    }
-  }
+	@Override
+	protected double initialize_getWeight(int index) {
+		Object layoutObject = m_layout.getObject();
+		double[] weights = (double[]) ReflectionUtils.getFieldObject(layoutObject, "columnWeights");
+		if (weights != null && weights.length > index) {
+			return weights[index];
+		} else {
+			return 0;
+		}
+	}
 
-  @Override
-  protected List<? extends DimensionInfo> getDimensions() {
-    return m_layout.getColumns();
-  }
+	@Override
+	protected List<? extends DimensionInfo> getDimensions() {
+		return m_layout.getColumns();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Visiting
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected boolean isDimensionComponent(AbstractGridBagConstraintsInfo constraints) {
-    return constraints.x == getIndex();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Visiting
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected boolean isDimensionComponent(AbstractGridBagConstraintsInfo constraints) {
+		return constraints.x == getIndex();
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/DimensionInfo.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/DimensionInfo.java
index 586843131..3def956ce 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/DimensionInfo.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/DimensionInfo.java
@@ -24,140 +24,140 @@
  * @coverage swing.model.layout
  */
 public abstract class DimensionInfo {
-  protected final AbstractGridBagLayoutInfo m_layout;
-  protected final DimensionOperations<?> m_operations;
-  private int m_size;
-  private double m_weight;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DimensionInfo(AbstractGridBagLayoutInfo layout, DimensionOperations<?> operations) {
-    m_layout = layout;
-    m_operations = operations;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the index of this {@link DimensionInfo} in all dimensions on
-   *         {@link AbstractGridBagLayoutInfo}.
-   */
-  public final int getIndex() {
-    return getDimensions().indexOf(this);
-  }
-
-  /**
-   * @return the minimum size, from {@link GridBagLayout#columnWidths} or
-   *         {@link GridBagLayout#rowHeights}.
-   */
-  public final int getSize() {
-    return m_size;
-  }
-
-  /**
-   * Sets the minimum size, from {@link GridBagLayout#columnWidths} or
-   * {@link GridBagLayout#rowHeights}.
-   */
-  public void setSize(int size) throws Exception {
-    m_size = size;
-    m_operations.setSizeFieldElement(getIndex(), m_size);
-  }
-
-  /**
-   * @return <code>true</code> if this {@link DimensionInfo} has non-zero weight.
-   */
-  public final boolean hasWeight() {
-    return m_weight != 0.0;
-  }
-
-  /**
-   * @return the weight, from {@link GridBagLayout#columnWeights} or
-   *         {@link GridBagLayout#rowWeights}.
-   */
-  public final double getWeight() {
-    return m_weight;
-  }
-
-  /**
-   * Sets the weight, from {@link GridBagLayout#columnWeights} or {@link GridBagLayout#rowWeights}.
-   */
-  public void setWeight(double weight) throws Exception {
-    m_weight = weight;
-    m_operations.setWeightFieldElement(getIndex(), m_weight);
-  }
-
-  /**
-   * {@link DimensionInfo} is "end of grid" filler, if it has very small (but not zero) weight.
-   */
-  public final boolean isFiller() {
-    if (0.0 < m_weight && m_weight < 0.001) {
-      int index = getIndex();
-      return m_operations.isEmpty(index);
-    }
-    return false;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Implementation access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Initializes this {@link DimensionInfo} from existing {@link AbstractGridBagLayoutInfo} object. <br>
-   * This operation should be performed only once, when we first time have fully initialized
-   * {@link AbstractGridBagLayoutInfo} object.
-   */
-  void initialize() throws Exception {
-    int index = getIndex();
-    m_size = initialize_getMinimumSize(index);
-    m_weight = initialize_getWeight(index);
-  }
-
-  /**
-   * @return the minimum size, from "columnWidths" or "rowHeights" fields.
-   */
-  protected abstract int initialize_getMinimumSize(int index);
-
-  /**
-   * @return the weight of dimension, from "columnWeights" or "rowWeights".
-   */
-  protected abstract double initialize_getWeight(int index);
-
-  /**
-   * @return all {@link DimensionInfo}, siblings of this {@link DimensionInfo}.
-   */
-  protected abstract List<? extends DimensionInfo> getDimensions();
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Visiting
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Visits {@link ComponentInfo} that belongs to this {@link DimensionInfo}.
-   */
-  protected final void visit(final IComponentVisitor visitor) {
-    ExecutionUtils.runRethrow(new RunnableEx() {
-      public void run() throws Exception {
-        m_layout.visitComponents(visitor, new IComponentPredicate() {
-          public boolean apply(ComponentInfo component, AbstractGridBagConstraintsInfo constraints)
-              throws Exception {
-            return isDimensionComponent(constraints);
-          }
-        });
-      }
-    });
-  }
-
-  /**
-   * @return <code>true</code> if {@link ComponentInfo} belongs to this {@link DimensionInfo}, so
-   *         should be visited.
-   */
-  protected abstract boolean isDimensionComponent(AbstractGridBagConstraintsInfo constraints);
+	protected final AbstractGridBagLayoutInfo m_layout;
+	protected final DimensionOperations<?> m_operations;
+	private int m_size;
+	private double m_weight;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DimensionInfo(AbstractGridBagLayoutInfo layout, DimensionOperations<?> operations) {
+		m_layout = layout;
+		m_operations = operations;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the index of this {@link DimensionInfo} in all dimensions on
+	 *         {@link AbstractGridBagLayoutInfo}.
+	 */
+	public final int getIndex() {
+		return getDimensions().indexOf(this);
+	}
+
+	/**
+	 * @return the minimum size, from {@link GridBagLayout#columnWidths} or
+	 *         {@link GridBagLayout#rowHeights}.
+	 */
+	public final int getSize() {
+		return m_size;
+	}
+
+	/**
+	 * Sets the minimum size, from {@link GridBagLayout#columnWidths} or
+	 * {@link GridBagLayout#rowHeights}.
+	 */
+	public void setSize(int size) throws Exception {
+		m_size = size;
+		m_operations.setSizeFieldElement(getIndex(), m_size);
+	}
+
+	/**
+	 * @return <code>true</code> if this {@link DimensionInfo} has non-zero weight.
+	 */
+	public final boolean hasWeight() {
+		return m_weight != 0.0;
+	}
+
+	/**
+	 * @return the weight, from {@link GridBagLayout#columnWeights} or
+	 *         {@link GridBagLayout#rowWeights}.
+	 */
+	public final double getWeight() {
+		return m_weight;
+	}
+
+	/**
+	 * Sets the weight, from {@link GridBagLayout#columnWeights} or {@link GridBagLayout#rowWeights}.
+	 */
+	public void setWeight(double weight) throws Exception {
+		m_weight = weight;
+		m_operations.setWeightFieldElement(getIndex(), m_weight);
+	}
+
+	/**
+	 * {@link DimensionInfo} is "end of grid" filler, if it has very small (but not zero) weight.
+	 */
+	public final boolean isFiller() {
+		if (0.0 < m_weight && m_weight < 0.001) {
+			int index = getIndex();
+			return m_operations.isEmpty(index);
+		}
+		return false;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Implementation access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Initializes this {@link DimensionInfo} from existing {@link AbstractGridBagLayoutInfo} object. <br>
+	 * This operation should be performed only once, when we first time have fully initialized
+	 * {@link AbstractGridBagLayoutInfo} object.
+	 */
+	void initialize() throws Exception {
+		int index = getIndex();
+		m_size = initialize_getMinimumSize(index);
+		m_weight = initialize_getWeight(index);
+	}
+
+	/**
+	 * @return the minimum size, from "columnWidths" or "rowHeights" fields.
+	 */
+	protected abstract int initialize_getMinimumSize(int index);
+
+	/**
+	 * @return the weight of dimension, from "columnWeights" or "rowWeights".
+	 */
+	protected abstract double initialize_getWeight(int index);
+
+	/**
+	 * @return all {@link DimensionInfo}, siblings of this {@link DimensionInfo}.
+	 */
+	protected abstract List<? extends DimensionInfo> getDimensions();
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Visiting
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Visits {@link ComponentInfo} that belongs to this {@link DimensionInfo}.
+	 */
+	protected final void visit(final IComponentVisitor visitor) {
+		ExecutionUtils.runRethrow(new RunnableEx() {
+			public void run() throws Exception {
+				m_layout.visitComponents(visitor, new IComponentPredicate() {
+					public boolean apply(ComponentInfo component, AbstractGridBagConstraintsInfo constraints)
+							throws Exception {
+						return isDimensionComponent(constraints);
+					}
+				});
+			}
+		});
+	}
+
+	/**
+	 * @return <code>true</code> if {@link ComponentInfo} belongs to this {@link DimensionInfo}, so
+	 *         should be visited.
+	 */
+	protected abstract boolean isDimensionComponent(AbstractGridBagConstraintsInfo constraints);
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/DimensionOperations.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/DimensionOperations.java
index eb962eee9..642b5cc76 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/DimensionOperations.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/DimensionOperations.java
@@ -38,458 +38,458 @@
  * @coverage swing.model.layout
  */
 public abstract class DimensionOperations<T extends DimensionInfo> {
-  protected final AbstractGridBagLayoutInfo m_layout;
-  protected final AstEditor m_editor;
-  private final String m_sizeField;
-  private final String m_weightField;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DimensionOperations(AbstractGridBagLayoutInfo layout, String sizeField, String weightField) {
-    m_layout = layout;
-    m_editor = layout.getEditor();
-    m_sizeField = sizeField;
-    m_weightField = weightField;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if this {@link DimensionInfo} has not components in it.
-   */
-  public abstract boolean isEmpty(int index);
-
-  /**
-   * @return the {@link ClipboardCommand} for copying dimensions information.
-   */
-  public ClipboardCommand getClipboardCommand() {
-    LinkedList<T> dimensions = getDimensions();
-    final boolean forColumns = this instanceof DimensionOperationsColumn;
-    final int count = dimensions.size();
-    final int[] sizeArray = new int[count];
-    final double[] weightArray = new double[count];
-    for (int i = 0; i < count; i++) {
-      T dimension = dimensions.get(i);
-      sizeArray[i] = dimension.getSize();
-      weightArray[i] = dimension.getWeight();
-    }
-    // create command
-    return new ComponentClipboardCommand<ContainerInfo>() {
-      private static final long serialVersionUID = 0L;
-
-      @Override
-      @SuppressWarnings("unchecked")
-      protected void execute(ContainerInfo container) throws Exception {
-        AbstractGridBagLayoutInfo layout = (AbstractGridBagLayoutInfo) container.getLayout();
-        DimensionOperations<T> operations =
-            (DimensionOperations<T>) (forColumns
-                ? layout.getColumnOperations()
-                : layout.getRowOperations());
-        operations.prepare(count - 1, false);
-        LinkedList<T> dimensions = operations.getDimensions();
-        for (int i = 0; i < count; i++) {
-          T dimension = dimensions.get(i);
-          dimension.setSize(sizeArray[i]);
-          dimension.setWeight(weightArray[i]);
-        }
-      }
-    };
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Inserts new empty {@link DimensionInfo} before given index.
-   */
-  public abstract T insert(int index) throws Exception;
-
-  /**
-   * Deletes {@link DimensionInfo} with given index and all components located in it.
-   */
-  public final void delete(final int index) throws Exception {
-    // delete components, update constraints
-    m_layout.visitComponents(new IComponentVisitor() {
-      public void visit(ComponentInfo component, AbstractGridBagConstraintsInfo constraints)
-          throws Exception {
-        int location = getLocation(constraints);
-        int size = getSize(constraints);
-        if (location == index) {
-          component.delete();
-        } else if (location > index) {
-          setLocation(constraints, location - 1);
-        } else if (location + size > index) {
-          setSize(constraints, size - 1);
-        }
-      }
-    });
-    // remove dimension
-    {
-      getDimensions().remove(index);
-      removeFieldArrayElement(m_sizeField, index);
-      removeFieldArrayElement(m_weightField, index);
-    }
-    // fix gaps
-    m_layout.ensureGapInsets();
-  }
-
-  /**
-   * Deletes {@link ComponentInfo}'s located in {@link DimensionInfo} with given index, but does not
-   * delete {@link DimensionInfo} itself.
-   */
-  public final void clear(final int index) throws Exception {
-    m_layout.visitComponents(new IComponentVisitor() {
-      public void visit(ComponentInfo component, AbstractGridBagConstraintsInfo constraints)
-          throws Exception {
-        if (getLocation(constraints) == index) {
-          component.delete();
-        }
-      }
-    });
-  }
-
-  /**
-   * Splits {@link DimensionInfo} with given index, i.e. adds new {@link DimensionInfo} with same
-   * size/width and spans all components to both {@link DimensionInfo}.
-   */
-  public final void split(final int index) throws Exception {
-    // insert dimension
-    insert(index + 1);
-    // copy size/weight
-    {
-      List<T> dimensions = getDimensions();
-      T dimension = dimensions.get(index);
-      T newDimension = dimensions.get(index + 1);
-      newDimension.setSize(dimension.getSize());
-      newDimension.setWeight(dimension.getWeight());
-    }
-    // span components
-    m_layout.visitComponents(new IComponentVisitor() {
-      public void visit(ComponentInfo component, AbstractGridBagConstraintsInfo constraints)
-          throws Exception {
-        int location = getLocation(constraints);
-        int size = getSize(constraints);
-        if (location + size - 1 == index) {
-          setSize(constraints, size + 1);
-        }
-      }
-    });
-  }
-
-  /**
-   * Moves {@link DimensionInfo} with given index into target index.
-   */
-  public void move(int index, final int targetIndex) throws Exception {
-    insert(targetIndex);
-    final int sourceIndex = targetIndex < index ? index + 1 : index;
-    // transfer size/weight into newly inserted dimension
-    exchangeFieldArrayElement(m_sizeField, sourceIndex, targetIndex);
-    exchangeFieldArrayElement(m_weightField, sourceIndex, targetIndex);
-    // exchange dimensions
-    {
-      List<T> dimensions = getDimensions();
-      T sourceDimension = dimensions.get(sourceIndex);
-      T targetDimension = dimensions.get(targetIndex);
-      dimensions.set(sourceIndex, targetDimension);
-      dimensions.set(targetIndex, sourceDimension);
-    }
-    // move components
-    m_layout.visitComponents(new IComponentVisitor() {
-      public void visit(ComponentInfo component, AbstractGridBagConstraintsInfo constraints)
-          throws Exception {
-        if (getLocation(constraints) == sourceIndex) {
-          moveComponent(component, constraints, targetIndex);
-          setSize(constraints, 1);
-        }
-      }
-    });
-    // delete old dimension
-    delete(sourceIndex);
-    m_layout.ensureGapInsets();
-  }
-
-  /**
-   * If there are components that span multiple dimensions, and no other "real" components in these
-   * dimensions, then removes these excess dimensions.
-   */
-  public final void normalizeSpanning() throws Exception {
-    LinkedList<T> dimensions = getDimensions();
-    // prepare filled dimensions
-    final boolean[] filledDimensions = new boolean[dimensions.size()];
-    m_layout.visitComponents(new IComponentVisitor() {
-      public void visit(ComponentInfo component, AbstractGridBagConstraintsInfo constraints)
-          throws Exception {
-        int location = getLocation(constraints);
-        filledDimensions[location] = true;
-      }
-    });
-    // remove empty dimensions
-    for (int index = dimensions.size() - 1; index >= 0; index--) {
-      if (!filledDimensions[index]) {
-        delete(index);
-      }
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Internal operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Cuts dimensions to the size rendered by {@link GridBagLayout}.<br>
-   * We don't analyze that there are empty columns/rows ourselves. Instead we just allow
-   * {@link GridBagLayout} to this for us and obey it - remove {@link DimensionInfo}'s and cut
-   * "weight" arrays.
-   *
-   * @return <code>true</code> if any dimension was removed.
-   */
-  boolean cutToGrid(int renderedSize) throws Exception {
-    LinkedList<T> dimensions = getDimensions();
-    // cut dimensions
-    boolean removedAnyDimension = false;
-    while (dimensions.size() > renderedSize) {
-      dimensions.removeLast();
-      removedAnyDimension = true;
-    }
-    // cut "weight"
-    {
-      ArrayInitializer initializer = getFieldArrayInitializer(m_weightField);
-      if (initializer != null) {
-        while (initializer.expressions().size() > renderedSize) {
-          m_editor.removeArrayElement(initializer, initializer.expressions().size() - 1);
-        }
-      }
-    }
-    //
-    return removedAnyDimension;
-  }
-
-  /**
-   * Ensures that {@link DimensionInfo} with given index exists in {@link AbstractGridBagLayoutInfo}
-   * , may be inserts/appends new {@link DimensionInfo}'s.
-   */
-  void prepare(final int index, boolean insert) throws Exception {
-    // prepare dimensions
-    {
-      List<T> dimensions = getDimensions();
-      if (insert) {
-        addNewDimension(dimensions, index);
-      } else {
-        while (index >= dimensions.size()) {
-          addNewDimension(dimensions, dimensions.size());
-        }
-      }
-    }
-    // move components
-    if (insert) {
-      m_layout.visitComponents(new IComponentVisitor() {
-        public void visit(ComponentInfo component, AbstractGridBagConstraintsInfo constraints)
-            throws Exception {
-          int location = getLocation(constraints);
-          int size = getSize(constraints);
-          if (location >= index) {
-            setLocation(constraints, location + 1);
-          } else if (location + size > index) {
-            setSize(constraints, size + 1);
-          }
-        }
-      });
-    }
-  }
-
-  /**
-   * Adds new {@link DimensionInfo} into collection, may be updates also size/weight arrays.
-   */
-  private void addNewDimension(List<T> dimensions, int index) throws Exception {
-    T dimension = newDimension();
-    dimensions.add(index, dimension);
-    // update size/weight arrays
-    insertFieldArrayElement(m_sizeField, index, "0");
-    insertFieldArrayElement(m_weightField, index, "0.0");
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Internal dimensions
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the all {@link DimensionInfo}'s.
-   */
-  protected abstract LinkedList<T> getDimensions();
-
-  /**
-   * @return the new {@link DimensionInfo} instance.
-   */
-  protected abstract T newDimension();
-
-  /**
-   * Moves {@link ComponentInfo} into given location.
-   */
-  protected abstract void moveComponent(ComponentInfo component,
-      AbstractGridBagConstraintsInfo constraints,
-      int location) throws Exception;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Internal GridBagConstraintsInfo operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the x/y location.
-   */
-  protected abstract int getLocation(AbstractGridBagConstraintsInfo constraints);
-
-  /**
-   * @return the width/height size.
-   */
-  protected abstract int getSize(AbstractGridBagConstraintsInfo constraints);
-
-  /**
-   * Sets the x/y location.
-   */
-  protected abstract void setLocation(AbstractGridBagConstraintsInfo constraints, int location)
-      throws Exception;
-
-  /**
-   * Sets the width/height size.
-   */
-  protected abstract void setSize(AbstractGridBagConstraintsInfo constraints, int size)
-      throws Exception;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Size/weight arrays operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the (optional, may be <code>null</code>) element of minimum size field.
-   */
-  Expression getSizeFieldElement(int index) {
-    return getFieldArrayElement(index, m_sizeField);
-  }
-
-  /**
-   * @return the (optional, may be <code>null</code>) element of weight field.
-   */
-  Expression getWeightFieldElement(int index) {
-    return getFieldArrayElement(index, m_weightField);
-  }
-
-  /**
-   * Sets the minimum size of {@link DimensionInfo}.
-   */
-  void setSizeFieldElement(int index, int value) throws Exception {
-    String source = IntegerConverter.INSTANCE.toJavaSource(m_layout, value);
-    setFieldArrayElement(m_sizeField, "int", "0", index, source);
-  }
-
-  /**
-   * Sets the weight of {@link DimensionInfo}.
-   */
-  void setWeightFieldElement(int index, double value) throws Exception {
-    String source = DoubleConverter.INSTANCE.toJavaSource(m_layout, value);
-    setFieldArrayElement(m_weightField, "double", "0.0", index, source);
-  }
-
-  /**
-   * Sets the value for element of {@link ArrayInitializer} assigned to field.<br>
-   * If there are no assignment to this field, adds assignment.
-   */
-  private void setFieldArrayElement(String fieldName,
-      String typeName,
-      String emptyElementSource,
-      int index,
-      String elementSource) throws Exception {
-    ArrayInitializer initializer = getFieldArrayInitializer(fieldName);
-    // ensure assignment
-    if (initializer == null) {
-      String initializerSource =
-          StringUtils.repeat(", " + emptyElementSource, getDimensions().size()).substring(2);
-      String fieldSource = MessageFormat.format("new {0}[]'{'{1}'}'", typeName, initializerSource);
-      m_layout.addFieldAssignment(fieldName, fieldSource);
-      initializer = getFieldArrayInitializer(fieldName);
-    }
-    // replace element
-    m_editor.replaceExpression(DomGenerics.expressions(initializer).get(index), elementSource);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Field arrays operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link ArrayInitializer} of (optional) field assignment, such as
-   *         {@link GridBagLayout#columnWidths}, or <code>null</code>, if no assignments to this
-   *         field exists.
-   */
-  private ArrayInitializer getFieldArrayInitializer(String fieldName) {
-    Assignment assignment = m_layout.getFieldAssignment(fieldName);
-    if (assignment != null && assignment.getRightHandSide() instanceof ArrayCreation) {
-      ArrayCreation arrayCreation = (ArrayCreation) assignment.getRightHandSide();
-      return arrayCreation.getInitializer();
-    }
-    return null;
-  }
-
-  /**
-   * @return the element of {@link ArrayInitializer} of (optional) field assignment, such as
-   *         {@link GridBagLayout#columnWidths}, or <code>null</code>, if no assignments to this
-   *         field exists, or given index is greater than size of {@link ArrayInitializer}.
-   */
-  private Expression getFieldArrayElement(int index, String fieldName) {
-    ArrayInitializer initializer = getFieldArrayInitializer(fieldName);
-    if (initializer != null && initializer.expressions().size() > index) {
-      return DomGenerics.expressions(initializer).get(index);
-    }
-    return null;
-  }
-
-  /**
-   * Inserts new element into (optional) field assignment, such as
-   * {@link GridBagLayout#columnWidths}. Does nothing, if no assignments to this field exists.
-   */
-  private void insertFieldArrayElement(String fieldName, int index, String source) throws Exception {
-    ArrayInitializer arrayInitializer = getFieldArrayInitializer(fieldName);
-    if (arrayInitializer != null) {
-      while (arrayInitializer.expressions().size() < index) {
-        int i = arrayInitializer.expressions().size();
-        m_editor.addArrayElement(arrayInitializer, i, source);
-      }
-      m_editor.addArrayElement(arrayInitializer, index, source);
-    }
-  }
-
-  /**
-   * Removes element from field assignment, such as {@link GridBagLayout#columnWidths}. Does
-   * nothing, if no assignments to this field exists.
-   */
-  private void removeFieldArrayElement(String fieldName, int index) throws Exception {
-    ArrayInitializer arrayInitializer = getFieldArrayInitializer(fieldName);
-    if (arrayInitializer != null) {
-      m_editor.removeArrayElement(arrayInitializer, index);
-    }
-  }
-
-  /**
-   * Exchanges two elements of field assignment, such as {@link GridBagLayout#columnWidths}. Does
-   * nothing, if no assignments to this field exists.
-   */
-  private void exchangeFieldArrayElement(String fieldName, int index_1, int index_2)
-      throws Exception {
-    ArrayInitializer arrayInitializer = getFieldArrayInitializer(fieldName);
-    if (arrayInitializer != null) {
-      m_editor.exchangeArrayElements(arrayInitializer, index_1, index_2);
-    }
-  }
+	protected final AbstractGridBagLayoutInfo m_layout;
+	protected final AstEditor m_editor;
+	private final String m_sizeField;
+	private final String m_weightField;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DimensionOperations(AbstractGridBagLayoutInfo layout, String sizeField, String weightField) {
+		m_layout = layout;
+		m_editor = layout.getEditor();
+		m_sizeField = sizeField;
+		m_weightField = weightField;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if this {@link DimensionInfo} has not components in it.
+	 */
+	public abstract boolean isEmpty(int index);
+
+	/**
+	 * @return the {@link ClipboardCommand} for copying dimensions information.
+	 */
+	public ClipboardCommand getClipboardCommand() {
+		LinkedList<T> dimensions = getDimensions();
+		final boolean forColumns = this instanceof DimensionOperationsColumn;
+		final int count = dimensions.size();
+		final int[] sizeArray = new int[count];
+		final double[] weightArray = new double[count];
+		for (int i = 0; i < count; i++) {
+			T dimension = dimensions.get(i);
+			sizeArray[i] = dimension.getSize();
+			weightArray[i] = dimension.getWeight();
+		}
+		// create command
+		return new ComponentClipboardCommand<ContainerInfo>() {
+			private static final long serialVersionUID = 0L;
+
+			@Override
+			@SuppressWarnings("unchecked")
+			protected void execute(ContainerInfo container) throws Exception {
+				AbstractGridBagLayoutInfo layout = (AbstractGridBagLayoutInfo) container.getLayout();
+				DimensionOperations<T> operations =
+						(DimensionOperations<T>) (forColumns
+								? layout.getColumnOperations()
+										: layout.getRowOperations());
+				operations.prepare(count - 1, false);
+				LinkedList<T> dimensions = operations.getDimensions();
+				for (int i = 0; i < count; i++) {
+					T dimension = dimensions.get(i);
+					dimension.setSize(sizeArray[i]);
+					dimension.setWeight(weightArray[i]);
+				}
+			}
+		};
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Inserts new empty {@link DimensionInfo} before given index.
+	 */
+	public abstract T insert(int index) throws Exception;
+
+	/**
+	 * Deletes {@link DimensionInfo} with given index and all components located in it.
+	 */
+	public final void delete(final int index) throws Exception {
+		// delete components, update constraints
+		m_layout.visitComponents(new IComponentVisitor() {
+			public void visit(ComponentInfo component, AbstractGridBagConstraintsInfo constraints)
+					throws Exception {
+				int location = getLocation(constraints);
+				int size = getSize(constraints);
+				if (location == index) {
+					component.delete();
+				} else if (location > index) {
+					setLocation(constraints, location - 1);
+				} else if (location + size > index) {
+					setSize(constraints, size - 1);
+				}
+			}
+		});
+		// remove dimension
+		{
+			getDimensions().remove(index);
+			removeFieldArrayElement(m_sizeField, index);
+			removeFieldArrayElement(m_weightField, index);
+		}
+		// fix gaps
+		m_layout.ensureGapInsets();
+	}
+
+	/**
+	 * Deletes {@link ComponentInfo}'s located in {@link DimensionInfo} with given index, but does not
+	 * delete {@link DimensionInfo} itself.
+	 */
+	public final void clear(final int index) throws Exception {
+		m_layout.visitComponents(new IComponentVisitor() {
+			public void visit(ComponentInfo component, AbstractGridBagConstraintsInfo constraints)
+					throws Exception {
+				if (getLocation(constraints) == index) {
+					component.delete();
+				}
+			}
+		});
+	}
+
+	/**
+	 * Splits {@link DimensionInfo} with given index, i.e. adds new {@link DimensionInfo} with same
+	 * size/width and spans all components to both {@link DimensionInfo}.
+	 */
+	public final void split(final int index) throws Exception {
+		// insert dimension
+		insert(index + 1);
+		// copy size/weight
+		{
+			List<T> dimensions = getDimensions();
+			T dimension = dimensions.get(index);
+			T newDimension = dimensions.get(index + 1);
+			newDimension.setSize(dimension.getSize());
+			newDimension.setWeight(dimension.getWeight());
+		}
+		// span components
+		m_layout.visitComponents(new IComponentVisitor() {
+			public void visit(ComponentInfo component, AbstractGridBagConstraintsInfo constraints)
+					throws Exception {
+				int location = getLocation(constraints);
+				int size = getSize(constraints);
+				if (location + size - 1 == index) {
+					setSize(constraints, size + 1);
+				}
+			}
+		});
+	}
+
+	/**
+	 * Moves {@link DimensionInfo} with given index into target index.
+	 */
+	public void move(int index, final int targetIndex) throws Exception {
+		insert(targetIndex);
+		final int sourceIndex = targetIndex < index ? index + 1 : index;
+		// transfer size/weight into newly inserted dimension
+		exchangeFieldArrayElement(m_sizeField, sourceIndex, targetIndex);
+		exchangeFieldArrayElement(m_weightField, sourceIndex, targetIndex);
+		// exchange dimensions
+		{
+			List<T> dimensions = getDimensions();
+			T sourceDimension = dimensions.get(sourceIndex);
+			T targetDimension = dimensions.get(targetIndex);
+			dimensions.set(sourceIndex, targetDimension);
+			dimensions.set(targetIndex, sourceDimension);
+		}
+		// move components
+		m_layout.visitComponents(new IComponentVisitor() {
+			public void visit(ComponentInfo component, AbstractGridBagConstraintsInfo constraints)
+					throws Exception {
+				if (getLocation(constraints) == sourceIndex) {
+					moveComponent(component, constraints, targetIndex);
+					setSize(constraints, 1);
+				}
+			}
+		});
+		// delete old dimension
+		delete(sourceIndex);
+		m_layout.ensureGapInsets();
+	}
+
+	/**
+	 * If there are components that span multiple dimensions, and no other "real" components in these
+	 * dimensions, then removes these excess dimensions.
+	 */
+	public final void normalizeSpanning() throws Exception {
+		LinkedList<T> dimensions = getDimensions();
+		// prepare filled dimensions
+		final boolean[] filledDimensions = new boolean[dimensions.size()];
+		m_layout.visitComponents(new IComponentVisitor() {
+			public void visit(ComponentInfo component, AbstractGridBagConstraintsInfo constraints)
+					throws Exception {
+				int location = getLocation(constraints);
+				filledDimensions[location] = true;
+			}
+		});
+		// remove empty dimensions
+		for (int index = dimensions.size() - 1; index >= 0; index--) {
+			if (!filledDimensions[index]) {
+				delete(index);
+			}
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Internal operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Cuts dimensions to the size rendered by {@link GridBagLayout}.<br>
+	 * We don't analyze that there are empty columns/rows ourselves. Instead we just allow
+	 * {@link GridBagLayout} to this for us and obey it - remove {@link DimensionInfo}'s and cut
+	 * "weight" arrays.
+	 *
+	 * @return <code>true</code> if any dimension was removed.
+	 */
+	boolean cutToGrid(int renderedSize) throws Exception {
+		LinkedList<T> dimensions = getDimensions();
+		// cut dimensions
+		boolean removedAnyDimension = false;
+		while (dimensions.size() > renderedSize) {
+			dimensions.removeLast();
+			removedAnyDimension = true;
+		}
+		// cut "weight"
+		{
+			ArrayInitializer initializer = getFieldArrayInitializer(m_weightField);
+			if (initializer != null) {
+				while (initializer.expressions().size() > renderedSize) {
+					m_editor.removeArrayElement(initializer, initializer.expressions().size() - 1);
+				}
+			}
+		}
+		//
+		return removedAnyDimension;
+	}
+
+	/**
+	 * Ensures that {@link DimensionInfo} with given index exists in {@link AbstractGridBagLayoutInfo}
+	 * , may be inserts/appends new {@link DimensionInfo}'s.
+	 */
+	void prepare(final int index, boolean insert) throws Exception {
+		// prepare dimensions
+		{
+			List<T> dimensions = getDimensions();
+			if (insert) {
+				addNewDimension(dimensions, index);
+			} else {
+				while (index >= dimensions.size()) {
+					addNewDimension(dimensions, dimensions.size());
+				}
+			}
+		}
+		// move components
+		if (insert) {
+			m_layout.visitComponents(new IComponentVisitor() {
+				public void visit(ComponentInfo component, AbstractGridBagConstraintsInfo constraints)
+						throws Exception {
+					int location = getLocation(constraints);
+					int size = getSize(constraints);
+					if (location >= index) {
+						setLocation(constraints, location + 1);
+					} else if (location + size > index) {
+						setSize(constraints, size + 1);
+					}
+				}
+			});
+		}
+	}
+
+	/**
+	 * Adds new {@link DimensionInfo} into collection, may be updates also size/weight arrays.
+	 */
+	private void addNewDimension(List<T> dimensions, int index) throws Exception {
+		T dimension = newDimension();
+		dimensions.add(index, dimension);
+		// update size/weight arrays
+		insertFieldArrayElement(m_sizeField, index, "0");
+		insertFieldArrayElement(m_weightField, index, "0.0");
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Internal dimensions
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the all {@link DimensionInfo}'s.
+	 */
+	protected abstract LinkedList<T> getDimensions();
+
+	/**
+	 * @return the new {@link DimensionInfo} instance.
+	 */
+	protected abstract T newDimension();
+
+	/**
+	 * Moves {@link ComponentInfo} into given location.
+	 */
+	protected abstract void moveComponent(ComponentInfo component,
+			AbstractGridBagConstraintsInfo constraints,
+			int location) throws Exception;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Internal GridBagConstraintsInfo operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the x/y location.
+	 */
+	protected abstract int getLocation(AbstractGridBagConstraintsInfo constraints);
+
+	/**
+	 * @return the width/height size.
+	 */
+	protected abstract int getSize(AbstractGridBagConstraintsInfo constraints);
+
+	/**
+	 * Sets the x/y location.
+	 */
+	protected abstract void setLocation(AbstractGridBagConstraintsInfo constraints, int location)
+			throws Exception;
+
+	/**
+	 * Sets the width/height size.
+	 */
+	protected abstract void setSize(AbstractGridBagConstraintsInfo constraints, int size)
+			throws Exception;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Size/weight arrays operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the (optional, may be <code>null</code>) element of minimum size field.
+	 */
+	Expression getSizeFieldElement(int index) {
+		return getFieldArrayElement(index, m_sizeField);
+	}
+
+	/**
+	 * @return the (optional, may be <code>null</code>) element of weight field.
+	 */
+	Expression getWeightFieldElement(int index) {
+		return getFieldArrayElement(index, m_weightField);
+	}
+
+	/**
+	 * Sets the minimum size of {@link DimensionInfo}.
+	 */
+	void setSizeFieldElement(int index, int value) throws Exception {
+		String source = IntegerConverter.INSTANCE.toJavaSource(m_layout, value);
+		setFieldArrayElement(m_sizeField, "int", "0", index, source);
+	}
+
+	/**
+	 * Sets the weight of {@link DimensionInfo}.
+	 */
+	void setWeightFieldElement(int index, double value) throws Exception {
+		String source = DoubleConverter.INSTANCE.toJavaSource(m_layout, value);
+		setFieldArrayElement(m_weightField, "double", "0.0", index, source);
+	}
+
+	/**
+	 * Sets the value for element of {@link ArrayInitializer} assigned to field.<br>
+	 * If there are no assignment to this field, adds assignment.
+	 */
+	private void setFieldArrayElement(String fieldName,
+			String typeName,
+			String emptyElementSource,
+			int index,
+			String elementSource) throws Exception {
+		ArrayInitializer initializer = getFieldArrayInitializer(fieldName);
+		// ensure assignment
+		if (initializer == null) {
+			String initializerSource =
+					StringUtils.repeat(", " + emptyElementSource, getDimensions().size()).substring(2);
+			String fieldSource = MessageFormat.format("new {0}[]'{'{1}'}'", typeName, initializerSource);
+			m_layout.addFieldAssignment(fieldName, fieldSource);
+			initializer = getFieldArrayInitializer(fieldName);
+		}
+		// replace element
+		m_editor.replaceExpression(DomGenerics.expressions(initializer).get(index), elementSource);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Field arrays operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link ArrayInitializer} of (optional) field assignment, such as
+	 *         {@link GridBagLayout#columnWidths}, or <code>null</code>, if no assignments to this
+	 *         field exists.
+	 */
+	private ArrayInitializer getFieldArrayInitializer(String fieldName) {
+		Assignment assignment = m_layout.getFieldAssignment(fieldName);
+		if (assignment != null && assignment.getRightHandSide() instanceof ArrayCreation) {
+			ArrayCreation arrayCreation = (ArrayCreation) assignment.getRightHandSide();
+			return arrayCreation.getInitializer();
+		}
+		return null;
+	}
+
+	/**
+	 * @return the element of {@link ArrayInitializer} of (optional) field assignment, such as
+	 *         {@link GridBagLayout#columnWidths}, or <code>null</code>, if no assignments to this
+	 *         field exists, or given index is greater than size of {@link ArrayInitializer}.
+	 */
+	private Expression getFieldArrayElement(int index, String fieldName) {
+		ArrayInitializer initializer = getFieldArrayInitializer(fieldName);
+		if (initializer != null && initializer.expressions().size() > index) {
+			return DomGenerics.expressions(initializer).get(index);
+		}
+		return null;
+	}
+
+	/**
+	 * Inserts new element into (optional) field assignment, such as
+	 * {@link GridBagLayout#columnWidths}. Does nothing, if no assignments to this field exists.
+	 */
+	private void insertFieldArrayElement(String fieldName, int index, String source) throws Exception {
+		ArrayInitializer arrayInitializer = getFieldArrayInitializer(fieldName);
+		if (arrayInitializer != null) {
+			while (arrayInitializer.expressions().size() < index) {
+				int i = arrayInitializer.expressions().size();
+				m_editor.addArrayElement(arrayInitializer, i, source);
+			}
+			m_editor.addArrayElement(arrayInitializer, index, source);
+		}
+	}
+
+	/**
+	 * Removes element from field assignment, such as {@link GridBagLayout#columnWidths}. Does
+	 * nothing, if no assignments to this field exists.
+	 */
+	private void removeFieldArrayElement(String fieldName, int index) throws Exception {
+		ArrayInitializer arrayInitializer = getFieldArrayInitializer(fieldName);
+		if (arrayInitializer != null) {
+			m_editor.removeArrayElement(arrayInitializer, index);
+		}
+	}
+
+	/**
+	 * Exchanges two elements of field assignment, such as {@link GridBagLayout#columnWidths}. Does
+	 * nothing, if no assignments to this field exists.
+	 */
+	private void exchangeFieldArrayElement(String fieldName, int index_1, int index_2)
+			throws Exception {
+		ArrayInitializer arrayInitializer = getFieldArrayInitializer(fieldName);
+		if (arrayInitializer != null) {
+			m_editor.exchangeArrayElements(arrayInitializer, index_1, index_2);
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/DimensionOperationsColumn.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/DimensionOperationsColumn.java
index 58cba7b87..32786220d 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/DimensionOperationsColumn.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/DimensionOperationsColumn.java
@@ -23,100 +23,100 @@
  * @coverage swing.model.layout
  */
 public final class DimensionOperationsColumn extends DimensionOperations<ColumnInfo> {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DimensionOperationsColumn(AbstractGridBagLayoutInfo layout) {
-    super(layout, "columnWidths", "columnWeights");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DimensionOperationsColumn(AbstractGridBagLayoutInfo layout) {
+		super(layout, "columnWidths", "columnWeights");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean isEmpty(final int index) {
-    final boolean[] filled = new boolean[1];
-    ExecutionUtils.runLog(new RunnableEx() {
-      public void run() throws Exception {
-        m_layout.visitComponents(new IComponentVisitor() {
-          public void visit(ComponentInfo component, AbstractGridBagConstraintsInfo constraints)
-              throws Exception {
-            int x = constraints.getX();
-            int width = constraints.getWidth();
-            filled[0] |= x <= index && index < x + width;
-          }
-        });
-      }
-    });
-    return !filled[0];
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean isEmpty(final int index) {
+		final boolean[] filled = new boolean[1];
+		ExecutionUtils.runLog(new RunnableEx() {
+			public void run() throws Exception {
+				m_layout.visitComponents(new IComponentVisitor() {
+					public void visit(ComponentInfo component, AbstractGridBagConstraintsInfo constraints)
+							throws Exception {
+						int x = constraints.getX();
+						int width = constraints.getWidth();
+						filled[0] |= x <= index && index < x + width;
+					}
+				});
+			}
+		});
+		return !filled[0];
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public ColumnInfo insert(int index) throws Exception {
-    m_layout.prepareCell(index, true, -1, false);
-    m_layout.ensureGapInsets();
-    return m_layout.getColumns().get(index);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public ColumnInfo insert(int index) throws Exception {
+		m_layout.prepareCell(index, true, -1, false);
+		m_layout.ensureGapInsets();
+		return m_layout.getColumns().get(index);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Internal dimensions
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected LinkedList<ColumnInfo> getDimensions() {
-    return m_layout.getColumns();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Internal dimensions
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected LinkedList<ColumnInfo> getDimensions() {
+		return m_layout.getColumns();
+	}
 
-  @Override
-  protected ColumnInfo newDimension() {
-    return new ColumnInfo(m_layout, this);
-  }
+	@Override
+	protected ColumnInfo newDimension() {
+		return new ColumnInfo(m_layout, this);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Internal component operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void moveComponent(ComponentInfo component,
-      AbstractGridBagConstraintsInfo constraints,
-      int location) throws Exception {
-    m_layout.command_MOVE(component, location, false, constraints.y, false);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Internal component operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void moveComponent(ComponentInfo component,
+			AbstractGridBagConstraintsInfo constraints,
+			int location) throws Exception {
+		m_layout.command_MOVE(component, location, false, constraints.y, false);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Internal GridBagConstraintsInfo operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected int getLocation(AbstractGridBagConstraintsInfo constraints) {
-    return constraints.x;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Internal GridBagConstraintsInfo operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected int getLocation(AbstractGridBagConstraintsInfo constraints) {
+		return constraints.x;
+	}
 
-  @Override
-  protected int getSize(AbstractGridBagConstraintsInfo constraints) {
-    return constraints.width;
-  }
+	@Override
+	protected int getSize(AbstractGridBagConstraintsInfo constraints) {
+		return constraints.width;
+	}
 
-  @Override
-  protected void setLocation(AbstractGridBagConstraintsInfo constraints, int location)
-      throws Exception {
-    constraints.setX(location);
-  }
+	@Override
+	protected void setLocation(AbstractGridBagConstraintsInfo constraints, int location)
+			throws Exception {
+		constraints.setX(location);
+	}
 
-  @Override
-  protected void setSize(AbstractGridBagConstraintsInfo constraints, int size) throws Exception {
-    constraints.setWidth(size);
-  }
+	@Override
+	protected void setSize(AbstractGridBagConstraintsInfo constraints, int size) throws Exception {
+		constraints.setWidth(size);
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/DimensionOperationsRow.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/DimensionOperationsRow.java
index 0be235812..90b104e1e 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/DimensionOperationsRow.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/DimensionOperationsRow.java
@@ -23,100 +23,100 @@
  * @coverage swing.model.layout
  */
 public final class DimensionOperationsRow extends DimensionOperations<RowInfo> {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DimensionOperationsRow(AbstractGridBagLayoutInfo layout) {
-    super(layout, "rowHeights", "rowWeights");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DimensionOperationsRow(AbstractGridBagLayoutInfo layout) {
+		super(layout, "rowHeights", "rowWeights");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean isEmpty(final int index) {
-    final boolean[] filled = new boolean[1];
-    ExecutionUtils.runLog(new RunnableEx() {
-      public void run() throws Exception {
-        m_layout.visitComponents(new IComponentVisitor() {
-          public void visit(ComponentInfo component, AbstractGridBagConstraintsInfo constraints)
-              throws Exception {
-            int y = constraints.getY();
-            int height = constraints.getHeight();
-            filled[0] |= y <= index && index < y + height;
-          }
-        });
-      }
-    });
-    return !filled[0];
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean isEmpty(final int index) {
+		final boolean[] filled = new boolean[1];
+		ExecutionUtils.runLog(new RunnableEx() {
+			public void run() throws Exception {
+				m_layout.visitComponents(new IComponentVisitor() {
+					public void visit(ComponentInfo component, AbstractGridBagConstraintsInfo constraints)
+							throws Exception {
+						int y = constraints.getY();
+						int height = constraints.getHeight();
+						filled[0] |= y <= index && index < y + height;
+					}
+				});
+			}
+		});
+		return !filled[0];
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public RowInfo insert(int index) throws Exception {
-    m_layout.prepareCell(-1, false, index, true);
-    m_layout.ensureGapInsets();
-    return m_layout.getRows().get(index);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public RowInfo insert(int index) throws Exception {
+		m_layout.prepareCell(-1, false, index, true);
+		m_layout.ensureGapInsets();
+		return m_layout.getRows().get(index);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Internal dimensions
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected LinkedList<RowInfo> getDimensions() {
-    return m_layout.getRows();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Internal dimensions
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected LinkedList<RowInfo> getDimensions() {
+		return m_layout.getRows();
+	}
 
-  @Override
-  protected RowInfo newDimension() {
-    return new RowInfo(m_layout, this);
-  }
+	@Override
+	protected RowInfo newDimension() {
+		return new RowInfo(m_layout, this);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Internal component operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void moveComponent(ComponentInfo component,
-      AbstractGridBagConstraintsInfo constraints,
-      int location) throws Exception {
-    m_layout.command_MOVE(component, constraints.x, false, location, false);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Internal component operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void moveComponent(ComponentInfo component,
+			AbstractGridBagConstraintsInfo constraints,
+			int location) throws Exception {
+		m_layout.command_MOVE(component, constraints.x, false, location, false);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Internal GridBagConstraintsInfo operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected int getLocation(AbstractGridBagConstraintsInfo constraints) {
-    return constraints.y;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Internal GridBagConstraintsInfo operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected int getLocation(AbstractGridBagConstraintsInfo constraints) {
+		return constraints.y;
+	}
 
-  @Override
-  protected int getSize(AbstractGridBagConstraintsInfo constraints) {
-    return constraints.height;
-  }
+	@Override
+	protected int getSize(AbstractGridBagConstraintsInfo constraints) {
+		return constraints.height;
+	}
 
-  @Override
-  protected void setLocation(AbstractGridBagConstraintsInfo constraints, int location)
-      throws Exception {
-    constraints.setY(location);
-  }
+	@Override
+	protected void setLocation(AbstractGridBagConstraintsInfo constraints, int location)
+			throws Exception {
+		constraints.setY(location);
+	}
 
-  @Override
-  protected void setSize(AbstractGridBagConstraintsInfo constraints, int size) throws Exception {
-    constraints.setHeight(size);
-  }
+	@Override
+	protected void setSize(AbstractGridBagConstraintsInfo constraints, int size) throws Exception {
+		constraints.setHeight(size);
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/GridBagConstraintsAssistantPage.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/GridBagConstraintsAssistantPage.java
index d69cb4952..89c726353 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/GridBagConstraintsAssistantPage.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/GridBagConstraintsAssistantPage.java
@@ -29,235 +29,235 @@
  * @coverage swing.assistant
  */
 public class GridBagConstraintsAssistantPage extends AbstractAssistantPage {
-  private static final String GROW_H = "__Grow_H";
-  private static final String GROW_V = "__Grow_V";
+	private static final String GROW_H = "__Grow_H";
+	private static final String GROW_V = "__Grow_V";
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public GridBagConstraintsAssistantPage(Composite parent, Object selection) {
-    super(parent, selection);
-    GridLayoutFactory.create(this).columns(3);
-    //
-    if (SystemUtils.IS_JAVA_1_6 || SystemUtils.IS_JAVA_1_7) {
-      // horizontal alignments
-      {
-        Group horizontalGroup = createHorizontalAlignmentGroup();
-        GridDataFactory.modify(horizontalGroup).fill();
-      }
-      // vertical alignments
-      {
-        Group verticalGroup =
-            addChoiceProperty(
-                this,
-                "verticalAlignment",
-                ModelMessages.GridBagConstraintsAssistantPage_verticalAlignmentGroup,
-                new Object[][]{
-                    new Object[]{
-                        ModelMessages.GridBagConstraintsAssistantPage_vaTop,
-                        RowInfo.Alignment.TOP},
-                    new Object[]{
-                        ModelMessages.GridBagConstraintsAssistantPage_vaCenter,
-                        RowInfo.Alignment.CENTER},
-                    new Object[]{
-                        ModelMessages.GridBagConstraintsAssistantPage_vaBottom,
-                        RowInfo.Alignment.BOTTOM},
-                    new Object[]{
-                        ModelMessages.GridBagConstraintsAssistantPage_vaFill,
-                        RowInfo.Alignment.FILL},
-                    new Object[]{
-                        ModelMessages.GridBagConstraintsAssistantPage_vaBaseline,
-                        RowInfo.Alignment.BASELINE},
-                    new Object[]{
-                        ModelMessages.GridBagConstraintsAssistantPage_vaAboveBaseline,
-                        RowInfo.Alignment.BASELINE_ABOVE},
-                    new Object[]{
-                        ModelMessages.GridBagConstraintsAssistantPage_vaBelowBaseline,
-                        RowInfo.Alignment.BASELINE_BELOW}});
-        GridDataFactory.modify(verticalGroup).fillV();
-      }
-      // insets
-      {
-        Group insetsGroup = createInsetsGroup();
-        GridDataFactory.modify(insetsGroup).fillV();
-      }
-      // weight
-      {
-        Group weightGroup = createWeightGroup();
-        GridDataFactory.modify(weightGroup).fillV();
-      }
-      // grow
-      {
-        createGrowGroup();
-      }
-      // padding
-      {
-        Group paddingGroup = createPaddingGroup();
-        GridDataFactory.create(paddingGroup).fill();
-      }
-    } else {
-      // horizontal alignments
-      {
-        Group horizontalGroup = createHorizontalAlignmentGroup();
-        GridDataFactory.modify(horizontalGroup).fillV();
-      }
-      // vertical alignments
-      {
-        Group verticalGroup =
-            addChoiceProperty(
-                this,
-                "verticalAlignment",
-                ModelMessages.GridBagConstraintsAssistantPage_verticalAlignmentGroup,
-                new Object[][]{
-                    new Object[]{
-                        ModelMessages.GridBagConstraintsAssistantPage_vaTop,
-                        RowInfo.Alignment.TOP},
-                    new Object[]{
-                        ModelMessages.GridBagConstraintsAssistantPage_vaCenter,
-                        RowInfo.Alignment.CENTER},
-                    new Object[]{
-                        ModelMessages.GridBagConstraintsAssistantPage_vaBottom,
-                        RowInfo.Alignment.BOTTOM},
-                    new Object[]{
-                        ModelMessages.GridBagConstraintsAssistantPage_vaFill,
-                        RowInfo.Alignment.FILL}});
-        GridDataFactory.modify(verticalGroup).fillV();
-      }
-      // insets
-      {
-        createInsetsGroup();
-      }
-      // padding
-      {
-        Group paddingGroup = createPaddingGroup();
-        GridDataFactory.create(paddingGroup).fill().spanH(2);
-      }
-      // grow
-      {
-        createGrowGroup();
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public GridBagConstraintsAssistantPage(Composite parent, Object selection) {
+		super(parent, selection);
+		GridLayoutFactory.create(this).columns(3);
+		//
+		if (SystemUtils.IS_JAVA_1_6 || SystemUtils.IS_JAVA_1_7) {
+			// horizontal alignments
+			{
+				Group horizontalGroup = createHorizontalAlignmentGroup();
+				GridDataFactory.modify(horizontalGroup).fill();
+			}
+			// vertical alignments
+			{
+				Group verticalGroup =
+						addChoiceProperty(
+								this,
+								"verticalAlignment",
+								ModelMessages.GridBagConstraintsAssistantPage_verticalAlignmentGroup,
+								new Object[][]{
+									new Object[]{
+											ModelMessages.GridBagConstraintsAssistantPage_vaTop,
+											RowInfo.Alignment.TOP},
+									new Object[]{
+											ModelMessages.GridBagConstraintsAssistantPage_vaCenter,
+											RowInfo.Alignment.CENTER},
+									new Object[]{
+											ModelMessages.GridBagConstraintsAssistantPage_vaBottom,
+											RowInfo.Alignment.BOTTOM},
+									new Object[]{
+											ModelMessages.GridBagConstraintsAssistantPage_vaFill,
+											RowInfo.Alignment.FILL},
+									new Object[]{
+											ModelMessages.GridBagConstraintsAssistantPage_vaBaseline,
+											RowInfo.Alignment.BASELINE},
+									new Object[]{
+											ModelMessages.GridBagConstraintsAssistantPage_vaAboveBaseline,
+											RowInfo.Alignment.BASELINE_ABOVE},
+									new Object[]{
+											ModelMessages.GridBagConstraintsAssistantPage_vaBelowBaseline,
+											RowInfo.Alignment.BASELINE_BELOW}});
+				GridDataFactory.modify(verticalGroup).fillV();
+			}
+			// insets
+			{
+				Group insetsGroup = createInsetsGroup();
+				GridDataFactory.modify(insetsGroup).fillV();
+			}
+			// weight
+			{
+				Group weightGroup = createWeightGroup();
+				GridDataFactory.modify(weightGroup).fillV();
+			}
+			// grow
+			{
+				createGrowGroup();
+			}
+			// padding
+			{
+				Group paddingGroup = createPaddingGroup();
+				GridDataFactory.create(paddingGroup).fill();
+			}
+		} else {
+			// horizontal alignments
+			{
+				Group horizontalGroup = createHorizontalAlignmentGroup();
+				GridDataFactory.modify(horizontalGroup).fillV();
+			}
+			// vertical alignments
+			{
+				Group verticalGroup =
+						addChoiceProperty(
+								this,
+								"verticalAlignment",
+								ModelMessages.GridBagConstraintsAssistantPage_verticalAlignmentGroup,
+								new Object[][]{
+									new Object[]{
+											ModelMessages.GridBagConstraintsAssistantPage_vaTop,
+											RowInfo.Alignment.TOP},
+									new Object[]{
+											ModelMessages.GridBagConstraintsAssistantPage_vaCenter,
+											RowInfo.Alignment.CENTER},
+									new Object[]{
+											ModelMessages.GridBagConstraintsAssistantPage_vaBottom,
+											RowInfo.Alignment.BOTTOM},
+									new Object[]{
+											ModelMessages.GridBagConstraintsAssistantPage_vaFill,
+											RowInfo.Alignment.FILL}});
+				GridDataFactory.modify(verticalGroup).fillV();
+			}
+			// insets
+			{
+				createInsetsGroup();
+			}
+			// padding
+			{
+				Group paddingGroup = createPaddingGroup();
+				GridDataFactory.create(paddingGroup).fill().spanH(2);
+			}
+			// grow
+			{
+				createGrowGroup();
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Builders
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Group createInsetsGroup() {
-    return addIntegerProperties(
-        this,
-        ModelMessages.GridBagConstraintsAssistantPage_insetsGroup,
-        new String[][]{
-            new String[]{"insets.top", ModelMessages.GridBagConstraintsAssistantPage_insetsTop},
-            new String[]{"insets.left", ModelMessages.GridBagConstraintsAssistantPage_insetsLeft},
-            new String[]{
-                "insets.bottom",
-                ModelMessages.GridBagConstraintsAssistantPage_insetsBottom},
-            new String[]{"insets.right", ModelMessages.GridBagConstraintsAssistantPage_insetsRight}});
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Builders
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Group createInsetsGroup() {
+		return addIntegerProperties(
+				this,
+				ModelMessages.GridBagConstraintsAssistantPage_insetsGroup,
+				new String[][]{
+					new String[]{"insets.top", ModelMessages.GridBagConstraintsAssistantPage_insetsTop},
+					new String[]{"insets.left", ModelMessages.GridBagConstraintsAssistantPage_insetsLeft},
+					new String[]{
+							"insets.bottom",
+							ModelMessages.GridBagConstraintsAssistantPage_insetsBottom},
+					new String[]{"insets.right", ModelMessages.GridBagConstraintsAssistantPage_insetsRight}});
+	}
 
-  private Group createWeightGroup() {
-    return addDoubleProperties(
-        this,
-        ModelMessages.GridBagConstraintsAssistantPage_weightGroup,
-        new String[][]{
-            new String[]{"weightx", ModelMessages.GridBagConstraintsAssistantPage_weightX},
-            new String[]{"weighty", ModelMessages.GridBagConstraintsAssistantPage_weightY}});
-  }
+	private Group createWeightGroup() {
+		return addDoubleProperties(
+				this,
+				ModelMessages.GridBagConstraintsAssistantPage_weightGroup,
+				new String[][]{
+					new String[]{"weightx", ModelMessages.GridBagConstraintsAssistantPage_weightX},
+					new String[]{"weighty", ModelMessages.GridBagConstraintsAssistantPage_weightY}});
+	}
 
-  private Group createPaddingGroup() {
-    return addIntegerProperties(
-        this,
-        ModelMessages.GridBagConstraintsAssistantPage_paddingGroup,
-        new String[][]{
-            new String[]{"ipadx", ModelMessages.GridBagConstraintsAssistantPage_paddingWidth},
-            new String[]{"ipady", ModelMessages.GridBagConstraintsAssistantPage_paddingHeight}});
-  }
+	private Group createPaddingGroup() {
+		return addIntegerProperties(
+				this,
+				ModelMessages.GridBagConstraintsAssistantPage_paddingGroup,
+				new String[][]{
+					new String[]{"ipadx", ModelMessages.GridBagConstraintsAssistantPage_paddingWidth},
+					new String[]{"ipady", ModelMessages.GridBagConstraintsAssistantPage_paddingHeight}});
+	}
 
-  private Group createHorizontalAlignmentGroup() {
-    return addChoiceProperty(
-        this,
-        "horizontalAlignment",
-        ModelMessages.GridBagConstraintsAssistantPage_horizontalAlignmentGroup,
-        new Object[][]{
-            new Object[]{
-                ModelMessages.GridBagConstraintsAssistantPage_haLeft,
-                ColumnInfo.Alignment.LEFT},
-            new Object[]{
-                ModelMessages.GridBagConstraintsAssistantPage_haCenter,
-                ColumnInfo.Alignment.CENTER},
-            new Object[]{
-                ModelMessages.GridBagConstraintsAssistantPage_haRight,
-                ColumnInfo.Alignment.RIGHT},
-            new Object[]{
-                ModelMessages.GridBagConstraintsAssistantPage_haFill,
-                ColumnInfo.Alignment.FILL}});
-  }
+	private Group createHorizontalAlignmentGroup() {
+		return addChoiceProperty(
+				this,
+				"horizontalAlignment",
+				ModelMessages.GridBagConstraintsAssistantPage_horizontalAlignmentGroup,
+				new Object[][]{
+					new Object[]{
+							ModelMessages.GridBagConstraintsAssistantPage_haLeft,
+							ColumnInfo.Alignment.LEFT},
+					new Object[]{
+							ModelMessages.GridBagConstraintsAssistantPage_haCenter,
+							ColumnInfo.Alignment.CENTER},
+					new Object[]{
+							ModelMessages.GridBagConstraintsAssistantPage_haRight,
+							ColumnInfo.Alignment.RIGHT},
+					new Object[]{
+							ModelMessages.GridBagConstraintsAssistantPage_haFill,
+							ColumnInfo.Alignment.FILL}});
+	}
 
-  private void createGrowGroup() {
-    Group growGroup = new Group(this, SWT.NONE);
-    GridLayoutFactory.create(growGroup);
-    GridDataFactory.create(growGroup).fill();
-    growGroup.setText(ModelMessages.GridBagConstraintsAssistantPage_growGroup);
-    //
-    addBooleanProperty(
-        growGroup,
-        GROW_H,
-        ModelMessages.GridBagConstraintsAssistantPage_growHorizontal);
-    addBooleanProperty(
-        growGroup,
-        GROW_V,
-        ModelMessages.GridBagConstraintsAssistantPage_growVertical);
-  }
+	private void createGrowGroup() {
+		Group growGroup = new Group(this, SWT.NONE);
+		GridLayoutFactory.create(growGroup);
+		GridDataFactory.create(growGroup).fill();
+		growGroup.setText(ModelMessages.GridBagConstraintsAssistantPage_growGroup);
+		//
+		addBooleanProperty(
+				growGroup,
+				GROW_H,
+				ModelMessages.GridBagConstraintsAssistantPage_growHorizontal);
+		addBooleanProperty(
+				growGroup,
+				GROW_V,
+				ModelMessages.GridBagConstraintsAssistantPage_growVertical);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Properties
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Property getCustomProperty(Object object, String propertyName) throws Exception {
-    // horizontal grow
-    if (GROW_H.equals(propertyName)) {
-      AbstractGridBagConstraintsInfo constraints = (AbstractGridBagConstraintsInfo) object;
-      return new GrowProperty(constraints.getColumn());
-    }
-    // vertical grow
-    if (GROW_V.equals(propertyName)) {
-      AbstractGridBagConstraintsInfo constraints = (AbstractGridBagConstraintsInfo) object;
-      return new GrowProperty(constraints.getRow());
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Properties
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Property getCustomProperty(Object object, String propertyName) throws Exception {
+		// horizontal grow
+		if (GROW_H.equals(propertyName)) {
+			AbstractGridBagConstraintsInfo constraints = (AbstractGridBagConstraintsInfo) object;
+			return new GrowProperty(constraints.getColumn());
+		}
+		// vertical grow
+		if (GROW_V.equals(propertyName)) {
+			AbstractGridBagConstraintsInfo constraints = (AbstractGridBagConstraintsInfo) object;
+			return new GrowProperty(constraints.getRow());
+		}
+		return null;
+	}
 
-  private static final class GrowProperty extends InternalProperty {
-    private final DimensionInfo m_dimension;
+	private static final class GrowProperty extends InternalProperty {
+		private final DimensionInfo m_dimension;
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public GrowProperty(DimensionInfo dimension) {
-      m_dimension = dimension;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public GrowProperty(DimensionInfo dimension) {
+			m_dimension = dimension;
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Property
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public Object getValue() throws Exception {
-      return m_dimension.hasWeight();
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Property
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public Object getValue() throws Exception {
+			return m_dimension.hasWeight();
+		}
 
-    @Override
-    public void setValue(Object value) throws Exception {
-      m_dimension.setWeight(m_dimension.hasWeight() ? 0 : 1);
-    }
-  }
+		@Override
+		public void setValue(Object value) throws Exception {
+			m_dimension.setWeight(m_dimension.hasWeight() ? 0 : 1);
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/GridBagConstraintsInfo.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/GridBagConstraintsInfo.java
index 687c8fe6a..2b23dc15d 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/GridBagConstraintsInfo.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/GridBagConstraintsInfo.java
@@ -33,230 +33,230 @@
  * @coverage swing.model.layout
  */
 public final class GridBagConstraintsInfo extends AbstractGridBagConstraintsInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public GridBagConstraintsInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public GridBagConstraintsInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void getCurrentObjectFields(boolean init) throws Exception {
-    GridBagConstraints constraints;
-    if (init) {
-      constraints = (GridBagConstraints) getObject();
-      // location
-      x = constraints.gridx;
-      y = constraints.gridy;
-      width = constraints.gridwidth;
-      height = constraints.gridheight;
-    } else {
-      Component component = ((ComponentInfo) getParent()).getComponent();
-      // prepare GridBagLayout
-      GridBagLayout gridBagLayout;
-      {
-        LayoutManager layout = component.getParent().getLayout();
-        if (!(layout instanceof GridBagLayout)) {
-          return;
-        }
-        gridBagLayout = (GridBagLayout) layout;
-      }
-      // get constraints
-      constraints =
-          (GridBagConstraints) ReflectionUtils.invokeMethod(
-              gridBagLayout,
-              "lookupConstraints(java.awt.Component)",
-              component);
-      // location
-      x = ReflectionUtils.getFieldInt(constraints, "tempX");
-      y = ReflectionUtils.getFieldInt(constraints, "tempY");
-      width = ReflectionUtils.getFieldInt(constraints, "tempWidth");
-      height = ReflectionUtils.getFieldInt(constraints, "tempHeight");
-    }
-    // fetch fields
-    insets = CoordinateUtils.get(constraints.insets);
-    anchor = constraints.anchor;
-    fill = constraints.fill;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void getCurrentObjectFields(boolean init) throws Exception {
+		GridBagConstraints constraints;
+		if (init) {
+			constraints = (GridBagConstraints) getObject();
+			// location
+			x = constraints.gridx;
+			y = constraints.gridy;
+			width = constraints.gridwidth;
+			height = constraints.gridheight;
+		} else {
+			Component component = ((ComponentInfo) getParent()).getComponent();
+			// prepare GridBagLayout
+			GridBagLayout gridBagLayout;
+			{
+				LayoutManager layout = component.getParent().getLayout();
+				if (!(layout instanceof GridBagLayout)) {
+					return;
+				}
+				gridBagLayout = (GridBagLayout) layout;
+			}
+			// get constraints
+			constraints =
+					(GridBagConstraints) ReflectionUtils.invokeMethod(
+							gridBagLayout,
+							"lookupConstraints(java.awt.Component)",
+							component);
+			// location
+			x = ReflectionUtils.getFieldInt(constraints, "tempX");
+			y = ReflectionUtils.getFieldInt(constraints, "tempY");
+			width = ReflectionUtils.getFieldInt(constraints, "tempWidth");
+			height = ReflectionUtils.getFieldInt(constraints, "tempHeight");
+		}
+		// fetch fields
+		insets = CoordinateUtils.get(constraints.insets);
+		anchor = constraints.anchor;
+		fill = constraints.fill;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access: location
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void materializeLocation() throws Exception {
-    GridBagConstraints constraints = (GridBagConstraints) getObject();
-    if (constraints.gridy == GridBagConstraints.RELATIVE) {
-      constraints.gridy = y;
-      setY(y);
-    }
-    if (constraints.gridx == GridBagConstraints.RELATIVE) {
-      constraints.gridx = x;
-      setX(x);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access: location
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void materializeLocation() throws Exception {
+		GridBagConstraints constraints = (GridBagConstraints) getObject();
+		if (constraints.gridy == GridBagConstraints.RELATIVE) {
+			constraints.gridy = y;
+			setY(y);
+		}
+		if (constraints.gridx == GridBagConstraints.RELATIVE) {
+			constraints.gridx = x;
+			setX(x);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access: alignment
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public ColumnInfo.Alignment getHorizontalAlignment() {
-    return getHorizontalAlignment(fill, anchor);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access: alignment
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public ColumnInfo.Alignment getHorizontalAlignment() {
+		return getHorizontalAlignment(fill, anchor);
+	}
 
-  public static ColumnInfo.Alignment getHorizontalAlignment(int fill, int anchor) {
-    if (fill == GridBagConstraints.BOTH || fill == GridBagConstraints.HORIZONTAL) {
-      return ColumnInfo.Alignment.FILL;
-    }
-    for (AlignmentInfoEx alignment : ALIGNMENTS) {
-      if (alignment.equals(anchor)) {
-        return alignment.hAlignment;
-      }
-    }
-    throw new IllegalArgumentException(MessageFormat.format(
-        "Unknown combination of fill/anchor: {0} {1}",
-        fill,
-        anchor));
-  }
+	public static ColumnInfo.Alignment getHorizontalAlignment(int fill, int anchor) {
+		if (fill == GridBagConstraints.BOTH || fill == GridBagConstraints.HORIZONTAL) {
+			return ColumnInfo.Alignment.FILL;
+		}
+		for (AlignmentInfoEx alignment : ALIGNMENTS) {
+			if (alignment.equals(anchor)) {
+				return alignment.hAlignment;
+			}
+		}
+		throw new IllegalArgumentException(MessageFormat.format(
+				"Unknown combination of fill/anchor: {0} {1}",
+				fill,
+				anchor));
+	}
 
-  @Override
-  public RowInfo.Alignment getVerticalAlignment() {
-    return getVerticalAlignment(fill, anchor);
-  }
+	@Override
+	public RowInfo.Alignment getVerticalAlignment() {
+		return getVerticalAlignment(fill, anchor);
+	}
 
-  public static RowInfo.Alignment getVerticalAlignment(int fill, int anchor) {
-    if (fill == GridBagConstraints.BOTH || fill == GridBagConstraints.VERTICAL) {
-      return RowInfo.Alignment.FILL;
-    }
-    for (AlignmentInfoEx alignment : ALIGNMENTS) {
-      if (alignment.equals(anchor)) {
-        return alignment.vAlignment;
-      }
-    }
-    throw new IllegalArgumentException(MessageFormat.format(
-        "Unknown combination of fill/anchor: {0} {1}",
-        fill,
-        anchor));
-  }
+	public static RowInfo.Alignment getVerticalAlignment(int fill, int anchor) {
+		if (fill == GridBagConstraints.BOTH || fill == GridBagConstraints.VERTICAL) {
+			return RowInfo.Alignment.FILL;
+		}
+		for (AlignmentInfoEx alignment : ALIGNMENTS) {
+			if (alignment.equals(anchor)) {
+				return alignment.vAlignment;
+			}
+		}
+		throw new IllegalArgumentException(MessageFormat.format(
+				"Unknown combination of fill/anchor: {0} {1}",
+				fill,
+				anchor));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AlignmentInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected static final class AlignmentInfoEx extends AlignmentInfo {
-    int anchorValue;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AlignmentInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected static final class AlignmentInfoEx extends AlignmentInfo {
+		int anchorValue;
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public AlignmentInfoEx(String alignmentString, final String fill, final String anchor) {
-      // some fields not exists in Java6, so return Integer.MIN_VALUE as anchor.
-      super(alignmentString, fill, anchor);
-      anchorValue = ExecutionUtils.runObjectIgnore(new RunnableObjectEx<Integer>() {
-        public Integer runObject() throws Exception {
-          return ReflectionUtils.getFieldInt(GridBagConstraints.class, anchor);
-        }
-      }, Integer.MIN_VALUE);
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public AlignmentInfoEx(String alignmentString, final String fill, final String anchor) {
+			// some fields not exists in Java6, so return Integer.MIN_VALUE as anchor.
+			super(alignmentString, fill, anchor);
+			anchorValue = ExecutionUtils.runObjectIgnore(new RunnableObjectEx<Integer>() {
+				public Integer runObject() throws Exception {
+					return ReflectionUtils.getFieldInt(GridBagConstraints.class, anchor);
+				}
+			}, Integer.MIN_VALUE);
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Access
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public boolean equals(int anchor) {
-      return anchorValue == anchor;
-    }
-  }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Access
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public boolean equals(int anchor) {
+			return anchorValue == anchor;
+		}
+	}
 
-  private static final AlignmentInfoEx[] ALIGNMENTS = {
-      /* NORTH */
-      new AlignmentInfoEx("LT", "NONE", "NORTHWEST"),
-      new AlignmentInfoEx("CT", "NONE", "NORTH"),
-      new AlignmentInfoEx("RT", "NONE", "NORTHEAST"),
-      new AlignmentInfoEx("FT", "HORIZONTAL", "NORTH"),
-      /* CENTER */
-      new AlignmentInfoEx("LC", "NONE", "WEST"),
-      new AlignmentInfoEx("CC", "NONE", "CENTER"),
-      new AlignmentInfoEx("RC", "NONE", "EAST"),
-      new AlignmentInfoEx("FC", "HORIZONTAL", "CENTER"),
-      /* SOUTH */
-      new AlignmentInfoEx("LB", "NONE", "SOUTHWEST"),
-      new AlignmentInfoEx("CB", "NONE", "SOUTH"),
-      new AlignmentInfoEx("RB", "NONE", "SOUTHEAST"),
-      new AlignmentInfoEx("FB", "HORIZONTAL", "SOUTH"),
-      /* FILL */
-      new AlignmentInfoEx("LF", "VERTICAL", "WEST"),
-      new AlignmentInfoEx("CF", "VERTICAL", "CENTER"),
-      new AlignmentInfoEx("RF", "VERTICAL", "EAST"),
-      new AlignmentInfoEx("FF", "BOTH", "CENTER"),
-      /* PAGE_START */
-      new AlignmentInfoEx("LT", "NONE", "FIRST_LINE_START"),
-      new AlignmentInfoEx("CT", "NONE", "PAGE_START"),
-      new AlignmentInfoEx("RT", "NONE", "FIRST_LINE_END"),
-      new AlignmentInfoEx("FT", "HORIZONTAL", "PAGE_START"),
-      /* PAGE_END */
-      new AlignmentInfoEx("LB", "NONE", "PAGE_END"),
-      new AlignmentInfoEx("CB", "NONE", "LAST_LINE_START"),
-      new AlignmentInfoEx("RB", "NONE", "LAST_LINE_END"),
-      new AlignmentInfoEx("FB", "HORIZONTAL", "PAGE_END"),
-      /* PAGE_CENTER */
-      new AlignmentInfoEx("LC", "NONE", "LINE_START"),
-      new AlignmentInfoEx("RC", "NONE", "LINE_END"),
-      /* BASELINE: s */
-      new AlignmentInfoEx("Ls", "NONE", "BASELINE_LEADING"),
-      new AlignmentInfoEx("Cs", "NONE", "BASELINE"),
-      new AlignmentInfoEx("Rs", "NONE", "BASELINE_TRAILING"),
-      new AlignmentInfoEx("Fs", "HORIZONTAL", "BASELINE"),
-      /* ABOVE_BASELINE: a */
-      new AlignmentInfoEx("La", "NONE", "ABOVE_BASELINE_LEADING"),
-      new AlignmentInfoEx("Ca", "NONE", "ABOVE_BASELINE"),
-      new AlignmentInfoEx("Ra", "NONE", "ABOVE_BASELINE_TRAILING"),
-      new AlignmentInfoEx("Fa", "HORIZONTAL", "ABOVE_BASELINE"),
-      /* BELOW_BASELINE: b */
-      new AlignmentInfoEx("Lb", "NONE", "BELOW_BASELINE_LEADING"),
-      new AlignmentInfoEx("Cb", "NONE", "BELOW_BASELINE"),
-      new AlignmentInfoEx("Rb", "NONE", "BELOW_BASELINE_TRAILING"),
-      new AlignmentInfoEx("Fb", "HORIZONTAL", "BELOW_BASELINE"),};
+	private static final AlignmentInfoEx[] ALIGNMENTS = {
+			/* NORTH */
+			new AlignmentInfoEx("LT", "NONE", "NORTHWEST"),
+			new AlignmentInfoEx("CT", "NONE", "NORTH"),
+			new AlignmentInfoEx("RT", "NONE", "NORTHEAST"),
+			new AlignmentInfoEx("FT", "HORIZONTAL", "NORTH"),
+			/* CENTER */
+			new AlignmentInfoEx("LC", "NONE", "WEST"),
+			new AlignmentInfoEx("CC", "NONE", "CENTER"),
+			new AlignmentInfoEx("RC", "NONE", "EAST"),
+			new AlignmentInfoEx("FC", "HORIZONTAL", "CENTER"),
+			/* SOUTH */
+			new AlignmentInfoEx("LB", "NONE", "SOUTHWEST"),
+			new AlignmentInfoEx("CB", "NONE", "SOUTH"),
+			new AlignmentInfoEx("RB", "NONE", "SOUTHEAST"),
+			new AlignmentInfoEx("FB", "HORIZONTAL", "SOUTH"),
+			/* FILL */
+			new AlignmentInfoEx("LF", "VERTICAL", "WEST"),
+			new AlignmentInfoEx("CF", "VERTICAL", "CENTER"),
+			new AlignmentInfoEx("RF", "VERTICAL", "EAST"),
+			new AlignmentInfoEx("FF", "BOTH", "CENTER"),
+			/* PAGE_START */
+			new AlignmentInfoEx("LT", "NONE", "FIRST_LINE_START"),
+			new AlignmentInfoEx("CT", "NONE", "PAGE_START"),
+			new AlignmentInfoEx("RT", "NONE", "FIRST_LINE_END"),
+			new AlignmentInfoEx("FT", "HORIZONTAL", "PAGE_START"),
+			/* PAGE_END */
+			new AlignmentInfoEx("LB", "NONE", "PAGE_END"),
+			new AlignmentInfoEx("CB", "NONE", "LAST_LINE_START"),
+			new AlignmentInfoEx("RB", "NONE", "LAST_LINE_END"),
+			new AlignmentInfoEx("FB", "HORIZONTAL", "PAGE_END"),
+			/* PAGE_CENTER */
+			new AlignmentInfoEx("LC", "NONE", "LINE_START"),
+			new AlignmentInfoEx("RC", "NONE", "LINE_END"),
+			/* BASELINE: s */
+			new AlignmentInfoEx("Ls", "NONE", "BASELINE_LEADING"),
+			new AlignmentInfoEx("Cs", "NONE", "BASELINE"),
+			new AlignmentInfoEx("Rs", "NONE", "BASELINE_TRAILING"),
+			new AlignmentInfoEx("Fs", "HORIZONTAL", "BASELINE"),
+			/* ABOVE_BASELINE: a */
+			new AlignmentInfoEx("La", "NONE", "ABOVE_BASELINE_LEADING"),
+			new AlignmentInfoEx("Ca", "NONE", "ABOVE_BASELINE"),
+			new AlignmentInfoEx("Ra", "NONE", "ABOVE_BASELINE_TRAILING"),
+			new AlignmentInfoEx("Fa", "HORIZONTAL", "ABOVE_BASELINE"),
+			/* BELOW_BASELINE: b */
+			new AlignmentInfoEx("Lb", "NONE", "BELOW_BASELINE_LEADING"),
+			new AlignmentInfoEx("Cb", "NONE", "BELOW_BASELINE"),
+			new AlignmentInfoEx("Rb", "NONE", "BELOW_BASELINE_TRAILING"),
+			new AlignmentInfoEx("Fb", "HORIZONTAL", "BELOW_BASELINE"),};
 
-  @Override
-  protected AlignmentInfo[] getAlignments() {
-    return ALIGNMENTS;
-  }
+	@Override
+	protected AlignmentInfo[] getAlignments() {
+		return ALIGNMENTS;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Source utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String newInstanceSourceLong() {
-    return "new java.awt.GridBagConstraints("
-        + "java.awt.GridBagConstraints.RELATIVE, "
-        + "java.awt.GridBagConstraints.RELATIVE, "
-        + "1, 1, 0.0, 0.0, "
-        + "java.awt.GridBagConstraints.CENTER, "
-        + "java.awt.GridBagConstraints.NONE, "
-        + "new java.awt.Insets(0, 0, 0, 0), 0, 0)";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Source utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String newInstanceSourceLong() {
+		return "new java.awt.GridBagConstraints("
+				+ "java.awt.GridBagConstraints.RELATIVE, "
+				+ "java.awt.GridBagConstraints.RELATIVE, "
+				+ "1, 1, 0.0, 0.0, "
+				+ "java.awt.GridBagConstraints.CENTER, "
+				+ "java.awt.GridBagConstraints.NONE, "
+				+ "new java.awt.Insets(0, 0, 0, 0), 0, 0)";
+	}
 
-  @Override
-  public String newInstanceSourceShort() {
-    return "new java.awt.GridBagConstraints()";
-  }
+	@Override
+	public String newInstanceSourceShort() {
+		return "new java.awt.GridBagConstraints()";
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/GridBagConstraintsNameSupport.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/GridBagConstraintsNameSupport.java
index 1c4db4637..002026a6b 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/GridBagConstraintsNameSupport.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/GridBagConstraintsNameSupport.java
@@ -26,48 +26,48 @@
  * @coverage swing.model.layout
  */
 public final class GridBagConstraintsNameSupport
-    extends
-      org.eclipse.wb.internal.core.model.layout.LayoutDataNameSupport<AbstractGridBagConstraintsInfo> {
-  public final static String[] TEMPLATES = new String[]{
-      "${constraintsAcronym}_${componentName}",
-      "${constraintsAcronym}${componentName-cap}",
-      "${componentName}${constraintsClassName}",
-      "${defaultName}"};
+extends
+org.eclipse.wb.internal.core.model.layout.LayoutDataNameSupport<AbstractGridBagConstraintsInfo> {
+	public final static String[] TEMPLATES = new String[]{
+			"${constraintsAcronym}_${componentName}",
+			"${constraintsAcronym}${componentName-cap}",
+			"${componentName}${constraintsClassName}",
+	"${defaultName}"};
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public GridBagConstraintsNameSupport(AbstractGridBagConstraintsInfo layoutData) {
-    super(layoutData);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public GridBagConstraintsNameSupport(AbstractGridBagConstraintsInfo layoutData) {
+		super(layoutData);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utilities
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getTemplate() {
-    IPreferenceStore preferences = m_childInfo.getDescription().getToolkit().getPreferences();
-    String template = preferences.getString(IPreferenceConstants.P_CONSTRAINTS_NAME_TEMPLATE);
-    if (!isValidTemplate(TEMPLATES, template)) {
-      template = getTemplateForDefault();
-    }
-    return template;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utilities
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getTemplate() {
+		IPreferenceStore preferences = m_childInfo.getDescription().getToolkit().getPreferences();
+		String template = preferences.getString(IPreferenceConstants.P_CONSTRAINTS_NAME_TEMPLATE);
+		if (!isValidTemplate(TEMPLATES, template)) {
+			template = getTemplateForDefault();
+		}
+		return template;
+	}
 
-  @Override
-  protected Map<String, String> getValueMap() {
-    // prepare variables
-    Map<String, String> valueMap = Maps.newTreeMap();
-    {
-      valueMap.put("constraintsAcronym", getAcronym());
-      valueMap.put("constraintsClassName", getClassName());
-      valueMap.put("componentName", getParentName());
-      valueMap.put("componentName-cap", getParentNameCap());
-    }
-    return valueMap;
-  }
+	@Override
+	protected Map<String, String> getValueMap() {
+		// prepare variables
+		Map<String, String> valueMap = Maps.newTreeMap();
+		{
+			valueMap.put("constraintsAcronym", getAcronym());
+			valueMap.put("constraintsClassName", getClassName());
+			valueMap.put("componentName", getParentName());
+			valueMap.put("componentName-cap", getParentNameCap());
+		}
+		return valueMap;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/GridBagLayoutConverter.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/GridBagLayoutConverter.java
index d748f62e5..6d18de5fa 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/GridBagLayoutConverter.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/GridBagLayoutConverter.java
@@ -37,98 +37,98 @@
  * @coverage swing.model.layout
  */
 public class GridBagLayoutConverter {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private GridBagLayoutConverter() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private GridBagLayoutConverter() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Conversion
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static void convert(ContainerInfo parent, AbstractGridBagLayoutInfo layout)
-      throws Exception {
-    layout.getRoot().refreshLight();
-    // prepare columns and rows and distribute controls in them
-    List<ComponentGroup> columns =
-        GridConvertionHelper.buildGroups(parent.getChildrenComponents(), true);
-    List<ComponentGroup> rows =
-        GridConvertionHelper.buildGroups(parent.getChildrenComponents(), false);
-    // sort components in columns and rows
-    GridConvertionHelper.sortGroupsByTranspose(columns, rows);
-    GridConvertionHelper.sortGroupsByTranspose(rows, columns);
-    // ensure that columns and rows are sorted by start coordinates
-    GridConvertionHelper.sortGroups(columns);
-    GridConvertionHelper.sortGroups(rows);
-    // calculate begin/end for each column/row
-    GridConvertionHelper.updateBoundsGaps(columns, true);
-    GridConvertionHelper.updateBoundsGaps(rows, true);
-    // create dimensions in layout
-    {
-      layout.getColumns().clear();
-      layout.getRows().clear();
-      createDimensions(layout.getColumnOperations(), columns);
-      createDimensions(layout.getRowOperations(), rows);
-    }
-    // prepare set of components in groups
-    Set<ComponentInGroup> componentsInGroups = Sets.newHashSet();
-    for (ComponentGroup column : columns) {
-      for (ComponentInGroup componentInGroup : column.getComponents()) {
-        componentsInGroups.add(componentInGroup);
-      }
-    }
-    // create constraints for each control
-    List<ComponentInfo> appliedControls = Lists.newArrayList();
-    for (ComponentInGroup componentInGroup : componentsInGroups) {
-      ComponentInfo component = (ComponentInfo) componentInGroup.getComponent();
-      if (appliedControls.contains(component)) {
-        continue;
-      }
-      // layout data
-      GeneralLayoutData generalLayoutData = GeneralLayoutData.getFromInfoEx(component);
-      AbstractGridBagConstraintsInfo constraints = layout.getConstraints(component);
-      // location/size
-      Rectangle cell = getCells(columns, rows, componentInGroup, generalLayoutData);
-      // alignments
-      ColumnInfo.Alignment horizontalAlignment =
-          getHorzontalAlignment(columns, componentInGroup, generalLayoutData);
-      RowInfo.Alignment verticalAlignment =
-          getVerticalAlignment(rows, componentInGroup, generalLayoutData);
-      // apply layout data
-      layout.command_setCells(component, cell);
-      constraints.setAlignment(horizontalAlignment, verticalAlignment);
-      appliedControls.add(component);
-    }
-    // remove empty/small columns/rows
-    {
-      final Set<Integer> filledColumns = Sets.newHashSet();
-      final Set<Integer> filledRows = Sets.newHashSet();
-      layout.visitComponents(new IComponentVisitor() {
-        public void visit(ComponentInfo component, AbstractGridBagConstraintsInfo constraints)
-            throws Exception {
-          filledColumns.add(constraints.x);
-          filledRows.add(constraints.y);
-        }
-      });
-      // do remove
-      removeEmptyDimensions(layout.getColumnOperations(), filledColumns);
-      removeEmptyDimensions(layout.getRowOperations(), filledRows);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Conversion
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static void convert(ContainerInfo parent, AbstractGridBagLayoutInfo layout)
+			throws Exception {
+		layout.getRoot().refreshLight();
+		// prepare columns and rows and distribute controls in them
+		List<ComponentGroup> columns =
+				GridConvertionHelper.buildGroups(parent.getChildrenComponents(), true);
+		List<ComponentGroup> rows =
+				GridConvertionHelper.buildGroups(parent.getChildrenComponents(), false);
+		// sort components in columns and rows
+		GridConvertionHelper.sortGroupsByTranspose(columns, rows);
+		GridConvertionHelper.sortGroupsByTranspose(rows, columns);
+		// ensure that columns and rows are sorted by start coordinates
+		GridConvertionHelper.sortGroups(columns);
+		GridConvertionHelper.sortGroups(rows);
+		// calculate begin/end for each column/row
+		GridConvertionHelper.updateBoundsGaps(columns, true);
+		GridConvertionHelper.updateBoundsGaps(rows, true);
+		// create dimensions in layout
+		{
+			layout.getColumns().clear();
+			layout.getRows().clear();
+			createDimensions(layout.getColumnOperations(), columns);
+			createDimensions(layout.getRowOperations(), rows);
+		}
+		// prepare set of components in groups
+		Set<ComponentInGroup> componentsInGroups = Sets.newHashSet();
+		for (ComponentGroup column : columns) {
+			for (ComponentInGroup componentInGroup : column.getComponents()) {
+				componentsInGroups.add(componentInGroup);
+			}
+		}
+		// create constraints for each control
+		List<ComponentInfo> appliedControls = Lists.newArrayList();
+		for (ComponentInGroup componentInGroup : componentsInGroups) {
+			ComponentInfo component = (ComponentInfo) componentInGroup.getComponent();
+			if (appliedControls.contains(component)) {
+				continue;
+			}
+			// layout data
+			GeneralLayoutData generalLayoutData = GeneralLayoutData.getFromInfoEx(component);
+			AbstractGridBagConstraintsInfo constraints = layout.getConstraints(component);
+			// location/size
+			Rectangle cell = getCells(columns, rows, componentInGroup, generalLayoutData);
+			// alignments
+			ColumnInfo.Alignment horizontalAlignment =
+					getHorzontalAlignment(columns, componentInGroup, generalLayoutData);
+			RowInfo.Alignment verticalAlignment =
+					getVerticalAlignment(rows, componentInGroup, generalLayoutData);
+			// apply layout data
+			layout.command_setCells(component, cell);
+			constraints.setAlignment(horizontalAlignment, verticalAlignment);
+			appliedControls.add(component);
+		}
+		// remove empty/small columns/rows
+		{
+			final Set<Integer> filledColumns = Sets.newHashSet();
+			final Set<Integer> filledRows = Sets.newHashSet();
+			layout.visitComponents(new IComponentVisitor() {
+				public void visit(ComponentInfo component, AbstractGridBagConstraintsInfo constraints)
+						throws Exception {
+					filledColumns.add(constraints.x);
+					filledRows.add(constraints.y);
+				}
+			});
+			// do remove
+			removeEmptyDimensions(layout.getColumnOperations(), filledColumns);
+			removeEmptyDimensions(layout.getRowOperations(), filledRows);
+		}
+	}
 
-  /**
-   * Calculate cell position & size.
-   */
-  private static Rectangle getCells(List<ComponentGroup> columns,
-      List<ComponentGroup> rows,
-      ComponentInGroup componentInGroup,
-      GeneralLayoutData generalLayoutData) {
-    Rectangle cell;
-    /*
+	/**
+	 * Calculate cell position & size.
+	 */
+	private static Rectangle getCells(List<ComponentGroup> columns,
+			List<ComponentGroup> rows,
+			ComponentInGroup componentInGroup,
+			GeneralLayoutData generalLayoutData) {
+		Rectangle cell;
+		/*
     if (generalLayoutData.gridX != null
     	&& generalLayoutData.gridY != null
     	&& generalLayoutData.spanX != null
@@ -140,149 +140,149 @@ private static Rectangle getCells(List<ComponentGroup> columns,
     				generalLayoutData.spanX,
     				generalLayoutData.spanY);
     } else */{
-      // calculate
-      ComponentGroup beginColumn =
-          GridConvertionHelper.getBeginForComponent(columns, componentInGroup);
-      ComponentGroup endColumn = GridConvertionHelper.getEndForComponent(columns, componentInGroup);
-      ComponentGroup beginRow = GridConvertionHelper.getBeginForComponent(rows, componentInGroup);
-      ComponentGroup endRow = GridConvertionHelper.getEndForComponent(rows, componentInGroup);
-      int x = columns.indexOf(beginColumn);
-      int y = rows.indexOf(beginRow);
-      int sx = 1 + columns.indexOf(endColumn) - x;
-      int sy = 1 + rows.indexOf(endRow) - y;
-      cell = new Rectangle(x, y, sx, sy);
+    	// calculate
+    	ComponentGroup beginColumn =
+    			GridConvertionHelper.getBeginForComponent(columns, componentInGroup);
+    	ComponentGroup endColumn = GridConvertionHelper.getEndForComponent(columns, componentInGroup);
+    	ComponentGroup beginRow = GridConvertionHelper.getBeginForComponent(rows, componentInGroup);
+    	ComponentGroup endRow = GridConvertionHelper.getEndForComponent(rows, componentInGroup);
+    	int x = columns.indexOf(beginColumn);
+    	int y = rows.indexOf(beginRow);
+    	int sx = 1 + columns.indexOf(endColumn) - x;
+    	int sy = 1 + rows.indexOf(endRow) - y;
+    	cell = new Rectangle(x, y, sx, sy);
     }
     return cell;
-  }
+	}
 
-  /**
-   * Calculate horizontal alignment.
-   */
-  private static ColumnInfo.Alignment getHorzontalAlignment(List<ComponentGroup> columns,
-      ComponentInGroup componentInGroup,
-      GeneralLayoutData generalLayoutData) {
-    if (generalLayoutData.horizontalAlignment != null) {
-      // from general layout data
-      ColumnInfo.Alignment alignment =
-          GeneralLayoutData.getRealValue(
-              AbstractGridBagLayoutInfo.m_horizontalAlignmentMap,
-              generalLayoutData.horizontalAlignment);
-      if (alignment != null && alignment != ColumnInfo.Alignment.UNKNOWN) {
-        return alignment;
-      }
-    }
-    // calculate
-    ComponentInfo component = (ComponentInfo) componentInGroup.getComponent();
-    Rectangle bounds = component.getBounds();
-    Dimension prefSize = component.getPreferredSize();
-    ComponentGroup beginColumn =
-        GridConvertionHelper.getBeginForComponent(columns, componentInGroup);
-    ComponentGroup endColumn = GridConvertionHelper.getEndForComponent(columns, componentInGroup);
-    int columnLeft = beginColumn.getMin();
-    int columnRight = endColumn.getMax();
-    int columnCenter = columnLeft + (columnRight - columnLeft) / 2;
-    int leftOffset = Math.abs(bounds.x - columnLeft);
-    int rightOffset = Math.abs(columnRight - bounds.right());
-    // prepare how much location of two sides will be changed for each alignment
-    int leftDelta = leftOffset + Math.abs(columnLeft + prefSize.width - bounds.right());
-    int rightDelta = rightOffset + Math.abs(columnRight - prefSize.width - bounds.x);
-    int fillDelta = leftOffset + rightOffset;
-    int centerDelta =
-        Math.abs(bounds.x - (columnCenter - prefSize.width / 2))
-            + Math.abs(bounds.right() - (columnCenter + prefSize.width / 2));
-    // prepare alignment
-    return getAlignment(
-        new int[]{leftDelta, centerDelta, rightDelta, fillDelta},
-        new ColumnInfo.Alignment[]{
-            ColumnInfo.Alignment.LEFT,
-            ColumnInfo.Alignment.CENTER,
-            ColumnInfo.Alignment.RIGHT,
-            ColumnInfo.Alignment.FILL});
-  }
+	/**
+	 * Calculate horizontal alignment.
+	 */
+	private static ColumnInfo.Alignment getHorzontalAlignment(List<ComponentGroup> columns,
+			ComponentInGroup componentInGroup,
+			GeneralLayoutData generalLayoutData) {
+		if (generalLayoutData.horizontalAlignment != null) {
+			// from general layout data
+			ColumnInfo.Alignment alignment =
+					GeneralLayoutData.getRealValue(
+							AbstractGridBagLayoutInfo.m_horizontalAlignmentMap,
+							generalLayoutData.horizontalAlignment);
+			if (alignment != null && alignment != ColumnInfo.Alignment.UNKNOWN) {
+				return alignment;
+			}
+		}
+		// calculate
+		ComponentInfo component = (ComponentInfo) componentInGroup.getComponent();
+		Rectangle bounds = component.getBounds();
+		Dimension prefSize = component.getPreferredSize();
+		ComponentGroup beginColumn =
+				GridConvertionHelper.getBeginForComponent(columns, componentInGroup);
+		ComponentGroup endColumn = GridConvertionHelper.getEndForComponent(columns, componentInGroup);
+		int columnLeft = beginColumn.getMin();
+		int columnRight = endColumn.getMax();
+		int columnCenter = columnLeft + (columnRight - columnLeft) / 2;
+		int leftOffset = Math.abs(bounds.x - columnLeft);
+		int rightOffset = Math.abs(columnRight - bounds.right());
+		// prepare how much location of two sides will be changed for each alignment
+		int leftDelta = leftOffset + Math.abs(columnLeft + prefSize.width - bounds.right());
+		int rightDelta = rightOffset + Math.abs(columnRight - prefSize.width - bounds.x);
+		int fillDelta = leftOffset + rightOffset;
+		int centerDelta =
+				Math.abs(bounds.x - (columnCenter - prefSize.width / 2))
+				+ Math.abs(bounds.right() - (columnCenter + prefSize.width / 2));
+		// prepare alignment
+		return getAlignment(
+				new int[]{leftDelta, centerDelta, rightDelta, fillDelta},
+				new ColumnInfo.Alignment[]{
+						ColumnInfo.Alignment.LEFT,
+						ColumnInfo.Alignment.CENTER,
+						ColumnInfo.Alignment.RIGHT,
+						ColumnInfo.Alignment.FILL});
+	}
 
-  /**
-   * Calculate vertical alignment.
-   */
-  private static RowInfo.Alignment getVerticalAlignment(List<ComponentGroup> rows,
-      ComponentInGroup componentInGroup,
-      GeneralLayoutData generalLayoutData) {
-    if (generalLayoutData.verticalAlignment != null) {
-      // from general layout data
-      RowInfo.Alignment alignment =
-          GeneralLayoutData.getRealValue(
-              AbstractGridBagLayoutInfo.m_verticalAlignmentMap,
-              generalLayoutData.verticalAlignment);
-      if (alignment != null && alignment != RowInfo.Alignment.UNKNOWN) {
-        return alignment;
-      }
-    }
-    // calculate
-    ComponentInfo component = (ComponentInfo) componentInGroup.getComponent();
-    Rectangle bounds = component.getBounds();
-    Dimension prefSize = component.getPreferredSize();
-    ComponentGroup beginRow = GridConvertionHelper.getBeginForComponent(rows, componentInGroup);
-    ComponentGroup endRow = GridConvertionHelper.getEndForComponent(rows, componentInGroup);
-    int rowTop = beginRow.getMin();
-    int rowBottom = endRow.getMax();
-    int rowCenter = rowTop + (rowBottom - rowTop) / 2;
-    int topOffset = bounds.y - rowTop;
-    int bottomOffset = rowBottom - bounds.bottom();
-    // prepare how much location of two sides will be changed for each alignment
-    int topDelta = topOffset + Math.abs(rowTop + prefSize.height - bounds.bottom());
-    int bottomDelta = bottomOffset + Math.abs(rowBottom - prefSize.height - bounds.y);
-    int fillDelta = topOffset + bottomOffset;
-    int centerDelta =
-        Math.abs(bounds.y - (rowCenter - prefSize.height / 2))
-            + Math.abs(bounds.bottom() - (rowCenter + prefSize.height / 2));
-    // prepare alignment
-    return getAlignment(
-        new int[]{topDelta, centerDelta, bottomDelta, fillDelta},
-        new RowInfo.Alignment[]{
-            RowInfo.Alignment.TOP,
-            RowInfo.Alignment.CENTER,
-            RowInfo.Alignment.BOTTOM,
-            RowInfo.Alignment.FILL});
-  }
+	/**
+	 * Calculate vertical alignment.
+	 */
+	private static RowInfo.Alignment getVerticalAlignment(List<ComponentGroup> rows,
+			ComponentInGroup componentInGroup,
+			GeneralLayoutData generalLayoutData) {
+		if (generalLayoutData.verticalAlignment != null) {
+			// from general layout data
+			RowInfo.Alignment alignment =
+					GeneralLayoutData.getRealValue(
+							AbstractGridBagLayoutInfo.m_verticalAlignmentMap,
+							generalLayoutData.verticalAlignment);
+			if (alignment != null && alignment != RowInfo.Alignment.UNKNOWN) {
+				return alignment;
+			}
+		}
+		// calculate
+		ComponentInfo component = (ComponentInfo) componentInGroup.getComponent();
+		Rectangle bounds = component.getBounds();
+		Dimension prefSize = component.getPreferredSize();
+		ComponentGroup beginRow = GridConvertionHelper.getBeginForComponent(rows, componentInGroup);
+		ComponentGroup endRow = GridConvertionHelper.getEndForComponent(rows, componentInGroup);
+		int rowTop = beginRow.getMin();
+		int rowBottom = endRow.getMax();
+		int rowCenter = rowTop + (rowBottom - rowTop) / 2;
+		int topOffset = bounds.y - rowTop;
+		int bottomOffset = rowBottom - bounds.bottom();
+		// prepare how much location of two sides will be changed for each alignment
+		int topDelta = topOffset + Math.abs(rowTop + prefSize.height - bounds.bottom());
+		int bottomDelta = bottomOffset + Math.abs(rowBottom - prefSize.height - bounds.y);
+		int fillDelta = topOffset + bottomOffset;
+		int centerDelta =
+				Math.abs(bounds.y - (rowCenter - prefSize.height / 2))
+				+ Math.abs(bounds.bottom() - (rowCenter + prefSize.height / 2));
+		// prepare alignment
+		return getAlignment(
+				new int[]{topDelta, centerDelta, bottomDelta, fillDelta},
+				new RowInfo.Alignment[]{
+						RowInfo.Alignment.TOP,
+						RowInfo.Alignment.CENTER,
+						RowInfo.Alignment.BOTTOM,
+						RowInfo.Alignment.FILL});
+	}
 
-  /**
-   * Creates {@link DimensionInfo}'s for given {@link ComponentGroup}'s.
-   */
-  private static <T extends DimensionInfo> void createDimensions(DimensionOperations<T> operations,
-      List<ComponentGroup> groups) throws Exception {
-    int index = 0;
-    for (ComponentGroup group : groups) {
-      T dimension = operations.insert(index++);
-      dimension.setSize(group.getSize());
-    }
-  }
+	/**
+	 * Creates {@link DimensionInfo}'s for given {@link ComponentGroup}'s.
+	 */
+	private static <T extends DimensionInfo> void createDimensions(DimensionOperations<T> operations,
+			List<ComponentGroup> groups) throws Exception {
+		int index = 0;
+		for (ComponentGroup group : groups) {
+			T dimension = operations.insert(index++);
+			dimension.setSize(group.getSize());
+		}
+	}
 
-  /**
-   * Removes {@link DimensionInfo}'s without components, and small size.
-   */
-  private static <T extends DimensionInfo> void removeEmptyDimensions(DimensionOperations<T> operations,
-      Set<Integer> filledDimensions) throws Exception {
-    LinkedList<T> dimensions = operations.getDimensions();
-    for (int i = dimensions.size() - 1; i >= 0; i--) {
-      T dimension = dimensions.get(i);
-      if (!filledDimensions.contains(i) && dimension.getSize() < 30) {
-        operations.delete(i);
-      }
-    }
-  }
+	/**
+	 * Removes {@link DimensionInfo}'s without components, and small size.
+	 */
+	private static <T extends DimensionInfo> void removeEmptyDimensions(DimensionOperations<T> operations,
+			Set<Integer> filledDimensions) throws Exception {
+		LinkedList<T> dimensions = operations.getDimensions();
+		for (int i = dimensions.size() - 1; i >= 0; i--) {
+			T dimension = dimensions.get(i);
+			if (!filledDimensions.contains(i) && dimension.getSize() < 30) {
+				operations.delete(i);
+			}
+		}
+	}
 
-  /**
-   * @return the alignment corresponding to the minimum delta value.
-   */
-  private static <A extends Enum<?>> A getAlignment(int[] deltas, A[] alignments) {
-    int minimum;
-    {
-      minimum = Integer.MAX_VALUE;
-      for (int i = 0; i < deltas.length; i++) {
-        int delta = deltas[i];
-        minimum = Math.min(minimum, delta);
-      }
-    }
-    // return corresponding alignment
-    return alignments[ArrayUtils.indexOf(deltas, minimum)];
-  }
+	/**
+	 * @return the alignment corresponding to the minimum delta value.
+	 */
+	private static <A extends Enum<?>> A getAlignment(int[] deltas, A[] alignments) {
+		int minimum;
+		{
+			minimum = Integer.MAX_VALUE;
+			for (int i = 0; i < deltas.length; i++) {
+				int delta = deltas[i];
+				minimum = Math.min(minimum, delta);
+			}
+		}
+		// return corresponding alignment
+		return alignments[ArrayUtils.indexOf(deltas, minimum)];
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/GridBagLayoutInfo.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/GridBagLayoutInfo.java
index 915ae1622..918688ed7 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/GridBagLayoutInfo.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/GridBagLayoutInfo.java
@@ -39,197 +39,197 @@
  * @coverage swing.model.layout
  */
 public final class GridBagLayoutInfo extends AbstractGridBagLayoutInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public GridBagLayoutInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GridBagConstraintsInfo access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link AbstractGridBagConstraintsInfo} for given {@link ComponentInfo}.
-   */
-  @Override
-  public AbstractGridBagConstraintsInfo getConstraints(final ComponentInfo component) {
-    return getConstraintsFor(component);
-  }
-
-  public static GridBagConstraintsInfo getConstraintsFor(final ComponentInfo component) {
-    return ExecutionUtils.runObject(new RunnableObjectEx<GridBagConstraintsInfo>() {
-      public GridBagConstraintsInfo runObject() throws Exception {
-        // prepare constraints
-        GridBagConstraintsInfo constraints;
-        {
-          List<GridBagConstraintsInfo> constraintsList =
-              component.getChildren(GridBagConstraintsInfo.class);
-          if (constraintsList.size() > 1) {
-            throw new DesignerException(IExceptionConstants.MORE_THAN_ONE_CONSTRAINTS,
-                component.toString(),
-                constraintsList.toString(),
-                component.getVariableSupport().getComponentName());
-          }
-          if (constraintsList.size() == 1) {
-            constraints = constraintsList.get(0);
-          } else {
-            constraints =
-                (GridBagConstraintsInfo) JavaInfoUtils.createJavaInfo(
-                    component.getEditor(),
-                    GridBagConstraints.class,
-                    new VirtualConstraintsCreationSupport(component));
-            constraints.setVariableSupport(new VirtualConstraintsVariableSupport(constraints));
-            constraints.setAssociation(new EmptyAssociation());
-            component.addChild(constraints);
-          }
-        }
-        // initialize and return
-        constraints.init();
-        return constraints;
-      }
-    });
-  }
-
-  @Override
-  public Object getConstraintsObject(final java.awt.Component component) throws Exception {
-    GridBagConstraints constraints;
-    if (component == null) {
-      // no component instance, we probably add new component, so use just some GridBagConstraints
-      constraints = new GridBagConstraints();
-    } else {
-      // component is bound to parent, get constraints from layout
-      GridBagLayout layout = (GridBagLayout) getObject();
-      constraints = layout.getConstraints(component);
-    }
-    return constraints;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Set
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void onSet() throws Exception {
-    addFieldAssignment("rowWeights", "new double[]{Double.MIN_VALUE}");
-    addFieldAssignment("columnWeights", "new double[]{Double.MIN_VALUE}");
-    addFieldAssignment("rowHeights", "new int[]{0}");
-    addFieldAssignment("columnWidths", "new int[]{0}");
-    super.onSet();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void beforeRefreshFilled() throws Exception {
-    Object layout = getObject();
-    // size arrays should have elements for all columns/rows
-    ensureObjectFieldArrayLength(layout, "columnWidths", getColumns().size());
-    ensureObjectFieldArrayLength(layout, "rowHeights", getRows().size());
-    super.beforeRefreshFilled();
-  }
-
-  @Override
-  protected boolean afterRefreshFilled() throws Exception {
-    boolean shouldPerformLayout = super.afterRefreshFilled();
-    GridBagLayout layout = (GridBagLayout) getObject();
-    int columnCount = getColumns().size();
-    int rowCount = getRows().size();
-    int[][] dimensions = getLayoutDimensions();
-    // set minimum size for empty columns
-    int minWidth = EMPTY_DIM + EMPTY_GAP;
-    for (int column = 0; column < columnCount; column++) {
-      if (!m_refreshFilledColumns.contains(column) && dimensions[0][column] < minWidth) {
-        layout.columnWidths[column] = minWidth;
-        shouldPerformLayout = true;
-      }
-    }
-    // set minimum size for empty rows
-    int minHeight = EMPTY_DIM + EMPTY_GAP;
-    for (int row = 0; row < rowCount; row++) {
-      if (!m_refreshFilledRows.contains(row) && dimensions[1][row] < minHeight) {
-        layout.rowHeights[row] = minHeight;
-        shouldPerformLayout = true;
-      }
-    }
-    return shouldPerformLayout;
-  }
-
-  /**
-   * Ensures that <code>int[]</code> field of given object is not <code>null</code> and has at least
-   * required length.
-   */
-  private static void ensureObjectFieldArrayLength(Object o, String fieldName, int requiredLength)
-      throws Exception {
-    int[] array = (int[]) ReflectionUtils.getFieldObject(o, fieldName);
-    if (array == null) {
-      ReflectionUtils.setField(o, fieldName, new int[requiredLength]);
-    } else if (array.length < requiredLength) {
-      int[] newArray = new int[requiredLength];
-      System.arraycopy(array, 0, newArray, 0, array.length);
-      ReflectionUtils.setField(o, fieldName, newArray);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Dimensions
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected int[][] getLayoutDimensions() throws Exception {
-    GridBagLayout layout = (GridBagLayout) getObject();
-    return layout.getLayoutDimensions();
-  }
-
-  @Override
-  protected Point getLayoutOrigin() throws Exception {
-    GridBagLayout layout = (GridBagLayout) getObject();
-    return layout.getLayoutOrigin();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IGridInfo support
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Interval[] checkColumnIntervals(Interval[] columnIntervals) {
-    GridBagLayout layout = (GridBagLayout) getObject();
-    final int lastIndex = columnIntervals.length - 1;
-    if (columnIntervals.length > 0
-        && layout.columnWeights != null
-        && layout.columnWeights.length >= columnIntervals.length
-        && layout.columnWeights[lastIndex] > 0.0
-        && layout.columnWeights[lastIndex] < 0.001
-        && getColumnOperations().isEmpty(lastIndex)) {
-      return (Interval[]) ArrayUtils.remove(columnIntervals, lastIndex);
-    }
-    return columnIntervals;
-  }
-
-  @Override
-  protected Interval[] checkRowIntervals(Interval[] rowIntervals) {
-    GridBagLayout layout = (GridBagLayout) getObject();
-    int lastIndex = rowIntervals.length - 1;
-    if (rowIntervals.length > 0
-        && layout.rowWeights != null
-        && layout.rowWeights.length >= rowIntervals.length
-        && layout.rowWeights[lastIndex] > 0.0
-        && layout.rowWeights[lastIndex] < 0.001
-        && getRowOperations().isEmpty(lastIndex)) {
-      return (Interval[]) ArrayUtils.remove(rowIntervals, lastIndex);
-    }
-    return rowIntervals;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public GridBagLayoutInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GridBagConstraintsInfo access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link AbstractGridBagConstraintsInfo} for given {@link ComponentInfo}.
+	 */
+	@Override
+	public AbstractGridBagConstraintsInfo getConstraints(final ComponentInfo component) {
+		return getConstraintsFor(component);
+	}
+
+	public static GridBagConstraintsInfo getConstraintsFor(final ComponentInfo component) {
+		return ExecutionUtils.runObject(new RunnableObjectEx<GridBagConstraintsInfo>() {
+			public GridBagConstraintsInfo runObject() throws Exception {
+				// prepare constraints
+				GridBagConstraintsInfo constraints;
+				{
+					List<GridBagConstraintsInfo> constraintsList =
+							component.getChildren(GridBagConstraintsInfo.class);
+					if (constraintsList.size() > 1) {
+						throw new DesignerException(IExceptionConstants.MORE_THAN_ONE_CONSTRAINTS,
+								component.toString(),
+								constraintsList.toString(),
+								component.getVariableSupport().getComponentName());
+					}
+					if (constraintsList.size() == 1) {
+						constraints = constraintsList.get(0);
+					} else {
+						constraints =
+								(GridBagConstraintsInfo) JavaInfoUtils.createJavaInfo(
+										component.getEditor(),
+										GridBagConstraints.class,
+										new VirtualConstraintsCreationSupport(component));
+						constraints.setVariableSupport(new VirtualConstraintsVariableSupport(constraints));
+						constraints.setAssociation(new EmptyAssociation());
+						component.addChild(constraints);
+					}
+				}
+				// initialize and return
+						constraints.init();
+				return constraints;
+			}
+		});
+	}
+
+	@Override
+	public Object getConstraintsObject(final java.awt.Component component) throws Exception {
+		GridBagConstraints constraints;
+		if (component == null) {
+			// no component instance, we probably add new component, so use just some GridBagConstraints
+			constraints = new GridBagConstraints();
+		} else {
+			// component is bound to parent, get constraints from layout
+			GridBagLayout layout = (GridBagLayout) getObject();
+			constraints = layout.getConstraints(component);
+		}
+		return constraints;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Set
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void onSet() throws Exception {
+		addFieldAssignment("rowWeights", "new double[]{Double.MIN_VALUE}");
+		addFieldAssignment("columnWeights", "new double[]{Double.MIN_VALUE}");
+		addFieldAssignment("rowHeights", "new int[]{0}");
+		addFieldAssignment("columnWidths", "new int[]{0}");
+		super.onSet();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void beforeRefreshFilled() throws Exception {
+		Object layout = getObject();
+		// size arrays should have elements for all columns/rows
+		ensureObjectFieldArrayLength(layout, "columnWidths", getColumns().size());
+		ensureObjectFieldArrayLength(layout, "rowHeights", getRows().size());
+		super.beforeRefreshFilled();
+	}
+
+	@Override
+	protected boolean afterRefreshFilled() throws Exception {
+		boolean shouldPerformLayout = super.afterRefreshFilled();
+		GridBagLayout layout = (GridBagLayout) getObject();
+		int columnCount = getColumns().size();
+		int rowCount = getRows().size();
+		int[][] dimensions = getLayoutDimensions();
+		// set minimum size for empty columns
+		int minWidth = EMPTY_DIM + EMPTY_GAP;
+		for (int column = 0; column < columnCount; column++) {
+			if (!m_refreshFilledColumns.contains(column) && dimensions[0][column] < minWidth) {
+				layout.columnWidths[column] = minWidth;
+				shouldPerformLayout = true;
+			}
+		}
+		// set minimum size for empty rows
+		int minHeight = EMPTY_DIM + EMPTY_GAP;
+		for (int row = 0; row < rowCount; row++) {
+			if (!m_refreshFilledRows.contains(row) && dimensions[1][row] < minHeight) {
+				layout.rowHeights[row] = minHeight;
+				shouldPerformLayout = true;
+			}
+		}
+		return shouldPerformLayout;
+	}
+
+	/**
+	 * Ensures that <code>int[]</code> field of given object is not <code>null</code> and has at least
+	 * required length.
+	 */
+	private static void ensureObjectFieldArrayLength(Object o, String fieldName, int requiredLength)
+			throws Exception {
+		int[] array = (int[]) ReflectionUtils.getFieldObject(o, fieldName);
+		if (array == null) {
+			ReflectionUtils.setField(o, fieldName, new int[requiredLength]);
+		} else if (array.length < requiredLength) {
+			int[] newArray = new int[requiredLength];
+			System.arraycopy(array, 0, newArray, 0, array.length);
+			ReflectionUtils.setField(o, fieldName, newArray);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Dimensions
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected int[][] getLayoutDimensions() throws Exception {
+		GridBagLayout layout = (GridBagLayout) getObject();
+		return layout.getLayoutDimensions();
+	}
+
+	@Override
+	protected Point getLayoutOrigin() throws Exception {
+		GridBagLayout layout = (GridBagLayout) getObject();
+		return layout.getLayoutOrigin();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IGridInfo support
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Interval[] checkColumnIntervals(Interval[] columnIntervals) {
+		GridBagLayout layout = (GridBagLayout) getObject();
+		final int lastIndex = columnIntervals.length - 1;
+		if (columnIntervals.length > 0
+				&& layout.columnWeights != null
+				&& layout.columnWeights.length >= columnIntervals.length
+				&& layout.columnWeights[lastIndex] > 0.0
+				&& layout.columnWeights[lastIndex] < 0.001
+				&& getColumnOperations().isEmpty(lastIndex)) {
+			return (Interval[]) ArrayUtils.remove(columnIntervals, lastIndex);
+		}
+		return columnIntervals;
+	}
+
+	@Override
+	protected Interval[] checkRowIntervals(Interval[] rowIntervals) {
+		GridBagLayout layout = (GridBagLayout) getObject();
+		int lastIndex = rowIntervals.length - 1;
+		if (rowIntervals.length > 0
+				&& layout.rowWeights != null
+				&& layout.rowWeights.length >= rowIntervals.length
+				&& layout.rowWeights[lastIndex] > 0.0
+				&& layout.rowWeights[lastIndex] < 0.001
+				&& getRowOperations().isEmpty(lastIndex)) {
+			return (Interval[]) ArrayUtils.remove(rowIntervals, lastIndex);
+		}
+		return rowIntervals;
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/GridBagLayoutSurroundProcessor.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/GridBagLayoutSurroundProcessor.java
index bfc9416bd..36bf6f5eb 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/GridBagLayoutSurroundProcessor.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/GridBagLayoutSurroundProcessor.java
@@ -31,111 +31,111 @@
  * @coverage swing.model.layout
  */
 public final class GridBagLayoutSurroundProcessor
-    implements
-      ISurroundProcessor<ContainerInfo, ComponentInfo> {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final Object INSTANCE = new GridBagLayoutSurroundProcessor();
+implements
+ISurroundProcessor<ContainerInfo, ComponentInfo> {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final Object INSTANCE = new GridBagLayoutSurroundProcessor();
 
-  private GridBagLayoutSurroundProcessor() {
-  }
+	private GridBagLayoutSurroundProcessor() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ISurroundProcessor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public boolean filter(ContainerInfo sourceContainer, ContainerInfo targetContainer)
-      throws Exception {
-    String targetClassName = targetContainer.getDescription().getComponentClass().getName();
-    boolean isJPanel = targetClassName.equals("javax.swing.JPanel");
-    return sourceContainer.hasLayout()
-        && sourceContainer.getLayout() instanceof GridBagLayoutInfo
-        && isJPanel;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ISurroundProcessor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public boolean filter(ContainerInfo sourceContainer, ContainerInfo targetContainer)
+			throws Exception {
+		String targetClassName = targetContainer.getDescription().getComponentClass().getName();
+		boolean isJPanel = targetClassName.equals("javax.swing.JPanel");
+		return sourceContainer.hasLayout()
+				&& sourceContainer.getLayout() instanceof GridBagLayoutInfo
+				&& isJPanel;
+	}
 
-  public void move(ContainerInfo sourceContainer,
-      ContainerInfo targetContainer,
-      List<ComponentInfo> components) throws Exception {
-    // set GridBagLayoutInfo for target
-    GridBagLayoutInfo targetLayout;
-    {
-      targetLayout =
-          (GridBagLayoutInfo) JavaInfoUtils.createJavaInfo(
-              targetContainer.getEditor(),
-              "java.awt.GridBagLayout",
-              new ConstructorCreationSupport());
-      targetContainer.setLayout(targetLayout);
-    }
-    // configure target layout
-    Point locationOffset;
-    {
-      Rectangle targetBounds =
-          (Rectangle) targetContainer.getArbitraryValue(GridBagLayoutSurroundSupport.CELLS_KEY);
-      GridBagLayoutInfo sourceLayout = (GridBagLayoutInfo) sourceContainer.getLayout();
-      // copy columns
-      copyDimensions(
-          targetLayout.getColumnOperations(),
-          sourceLayout.getColumnOperations(),
-          targetBounds.x,
-          targetBounds.right());
-      // copy rows
-      copyDimensions(
-          targetLayout.getRowOperations(),
-          sourceLayout.getRowOperations(),
-          targetBounds.y,
-          targetBounds.bottom());
-      // offset for components to move
-      locationOffset = targetBounds.getLocation().getNegated();
-    }
-    // move components
-    for (ComponentInfo component : components) {
-      GridBagConstraintsInfo oldConstraints = GridBagLayoutInfo.getConstraintsFor(component);
-      // move component
-      {
-        Rectangle cells = GridBagLayoutSurroundSupport.getCells(component);
-        cells = cells.getTranslated(locationOffset);
-        targetLayout.command_MOVE(component, cells.x, false, cells.y, false);
-      }
-      // update constraints
-      {
-        GridBagConstraintsInfo constraints = GridBagLayoutInfo.getConstraintsFor(component);
-        constraints.setWidth(oldConstraints.width);
-        constraints.setHeight(oldConstraints.height);
-        constraints.setAlignment(
-            oldConstraints.getHorizontalAlignment(),
-            oldConstraints.getVerticalAlignment());
-      }
-    }
-  }
+	public void move(ContainerInfo sourceContainer,
+			ContainerInfo targetContainer,
+			List<ComponentInfo> components) throws Exception {
+		// set GridBagLayoutInfo for target
+		GridBagLayoutInfo targetLayout;
+		{
+			targetLayout =
+					(GridBagLayoutInfo) JavaInfoUtils.createJavaInfo(
+							targetContainer.getEditor(),
+							"java.awt.GridBagLayout",
+							new ConstructorCreationSupport());
+			targetContainer.setLayout(targetLayout);
+		}
+		// configure target layout
+		Point locationOffset;
+		{
+			Rectangle targetBounds =
+					(Rectangle) targetContainer.getArbitraryValue(GridBagLayoutSurroundSupport.CELLS_KEY);
+			GridBagLayoutInfo sourceLayout = (GridBagLayoutInfo) sourceContainer.getLayout();
+			// copy columns
+			copyDimensions(
+					targetLayout.getColumnOperations(),
+					sourceLayout.getColumnOperations(),
+					targetBounds.x,
+					targetBounds.right());
+			// copy rows
+			copyDimensions(
+					targetLayout.getRowOperations(),
+					sourceLayout.getRowOperations(),
+					targetBounds.y,
+					targetBounds.bottom());
+			// offset for components to move
+			locationOffset = targetBounds.getLocation().getNegated();
+		}
+		// move components
+		for (ComponentInfo component : components) {
+			GridBagConstraintsInfo oldConstraints = GridBagLayoutInfo.getConstraintsFor(component);
+			// move component
+			{
+				Rectangle cells = GridBagLayoutSurroundSupport.getCells(component);
+				cells = cells.getTranslated(locationOffset);
+				targetLayout.command_MOVE(component, cells.x, false, cells.y, false);
+			}
+			// update constraints
+			{
+				GridBagConstraintsInfo constraints = GridBagLayoutInfo.getConstraintsFor(component);
+				constraints.setWidth(oldConstraints.width);
+				constraints.setHeight(oldConstraints.height);
+				constraints.setAlignment(
+						oldConstraints.getHorizontalAlignment(),
+						oldConstraints.getVerticalAlignment());
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Copies {@link DimensionInfo}'s from source to target {@link DimensionOperations}.
-   */
-  private static <T extends DimensionInfo> void copyDimensions(DimensionOperations<T> targetOperations,
-      DimensionOperations<T> sourceOperations,
-      int beginIndex,
-      int endIndex) throws Exception {
-    for (int sourceIndex = beginIndex; sourceIndex < endIndex; sourceIndex++) {
-      T sourceDimension = sourceOperations.getDimensions().get(sourceIndex);
-      // prepare targetDimension
-      T targetDimension;
-      {
-        int targetIndex = sourceIndex - beginIndex;
-        targetOperations.prepare(targetIndex, false);
-        targetDimension = targetOperations.getDimensions().get(targetIndex);
-      }
-      // copy properties
-      targetDimension.setSize(sourceDimension.getSize());
-      targetDimension.setWeight(sourceDimension.getWeight());
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Copies {@link DimensionInfo}'s from source to target {@link DimensionOperations}.
+	 */
+	private static <T extends DimensionInfo> void copyDimensions(DimensionOperations<T> targetOperations,
+			DimensionOperations<T> sourceOperations,
+			int beginIndex,
+			int endIndex) throws Exception {
+		for (int sourceIndex = beginIndex; sourceIndex < endIndex; sourceIndex++) {
+			T sourceDimension = sourceOperations.getDimensions().get(sourceIndex);
+			// prepare targetDimension
+			T targetDimension;
+			{
+				int targetIndex = sourceIndex - beginIndex;
+				targetOperations.prepare(targetIndex, false);
+				targetDimension = targetOperations.getDimensions().get(targetIndex);
+			}
+			// copy properties
+			targetDimension.setSize(sourceDimension.getSize());
+			targetDimension.setWeight(sourceDimension.getWeight());
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/GridBagLayoutSurroundSupport.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/GridBagLayoutSurroundSupport.java
index c22c16ee8..4f38a81eb 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/GridBagLayoutSurroundSupport.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/GridBagLayoutSurroundSupport.java
@@ -27,93 +27,93 @@
  * @coverage swing.model.layout
  */
 public final class GridBagLayoutSurroundSupport extends LayoutSurroundSupport {
-  static final String CELLS_KEY = "SurroundSupport_CELLS";
-  private final GridBagLayoutInfo m_layout;
+	static final String CELLS_KEY = "SurroundSupport_CELLS";
+	private final GridBagLayoutInfo m_layout;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public GridBagLayoutSurroundSupport(GridBagLayoutInfo layout) {
-    super(layout);
-    m_layout = layout;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public GridBagLayoutSurroundSupport(GridBagLayoutInfo layout) {
+		super(layout);
+		m_layout = layout;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Operation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Rectangle m_enclosingCells;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Operation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Rectangle m_enclosingCells;
 
-  @Override
-  protected boolean validateComponents(List<ComponentInfo> components) throws Exception {
-    // prepare enclosing bounds
-    {
-      m_enclosingCells = getCells(components.get(0));
-      for (ComponentInfo component : components) {
-        m_enclosingCells.union(getCells(component));
-      }
-    }
-    // check that there are no other controls in enclosing bounds
-    for (ComponentInfo component : m_layout.getContainer().getChildrenComponents()) {
-      if (!components.contains(component) && m_enclosingCells.intersects(getCells(component))) {
-        return false;
-      }
-    }
-    // continue
-    return super.validateComponents(components);
-  }
+	@Override
+	protected boolean validateComponents(List<ComponentInfo> components) throws Exception {
+		// prepare enclosing bounds
+		{
+			m_enclosingCells = getCells(components.get(0));
+			for (ComponentInfo component : components) {
+				m_enclosingCells.union(getCells(component));
+			}
+		}
+		// check that there are no other controls in enclosing bounds
+		for (ComponentInfo component : m_layout.getContainer().getChildrenComponents()) {
+			if (!components.contains(component) && m_enclosingCells.intersects(getCells(component))) {
+				return false;
+			}
+		}
+		// continue
+		return super.validateComponents(components);
+	}
 
-  @Override
-  protected void addContainer(ContainerInfo container, List<ComponentInfo> components)
-      throws Exception {
-    container.putArbitraryValue(CELLS_KEY, m_enclosingCells);
-    // don't grab
-    {
-      JavaInfoUtils.setParameter(container, GridAlignmentHelper.V_GRAB_HORIZONTAL, "false");
-      JavaInfoUtils.setParameter(container, GridAlignmentHelper.V_GRAB_VERTICAL, "false");
-    }
-    // add container
-    m_layout.command_CREATE(container, m_enclosingCells.x, false, m_enclosingCells.y, false);
-    setCells(container, m_enclosingCells);
-    // set FILL/FILL alignments
-    {
-      GridBagConstraintsInfo constraints = GridBagLayoutInfo.getConstraintsFor(container);
-      constraints.setAlignment(ColumnInfo.Alignment.FILL, RowInfo.Alignment.FILL);
-    }
-  }
+	@Override
+	protected void addContainer(ContainerInfo container, List<ComponentInfo> components)
+			throws Exception {
+		container.putArbitraryValue(CELLS_KEY, m_enclosingCells);
+		// don't grab
+		{
+			JavaInfoUtils.setParameter(container, GridAlignmentHelper.V_GRAB_HORIZONTAL, "false");
+			JavaInfoUtils.setParameter(container, GridAlignmentHelper.V_GRAB_VERTICAL, "false");
+		}
+		// add container
+		m_layout.command_CREATE(container, m_enclosingCells.x, false, m_enclosingCells.y, false);
+		setCells(container, m_enclosingCells);
+		// set FILL/FILL alignments
+		{
+			GridBagConstraintsInfo constraints = GridBagLayoutInfo.getConstraintsFor(container);
+			constraints.setAlignment(ColumnInfo.Alignment.FILL, RowInfo.Alignment.FILL);
+		}
+	}
 
-  @Override
-  protected void moveDone(ContainerInfo container, List<ComponentInfo> components) throws Exception {
-    super.moveDone(container, components);
-    // "container" may be only component in some columns/rows, so no need for spanning
-    m_layout.getColumnOperations().normalizeSpanning();
-    m_layout.getRowOperations().normalizeSpanning();
-  }
+	@Override
+	protected void moveDone(ContainerInfo container, List<ComponentInfo> components) throws Exception {
+		super.moveDone(container, components);
+		// "container" may be only component in some columns/rows, so no need for spanning
+		m_layout.getColumnOperations().normalizeSpanning();
+		m_layout.getRowOperations().normalizeSpanning();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets the {@link Rectangle} with grid bounds, i.e. column/row plus width/height span.
-   */
-  void setCells(ComponentInfo component, Rectangle cells) throws Exception {
-    GridBagConstraintsInfo constraints = GridBagLayoutInfo.getConstraintsFor(component);
-    constraints.setX(cells.x);
-    constraints.setY(cells.y);
-    constraints.setWidth(cells.width);
-    constraints.setHeight(cells.height);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets the {@link Rectangle} with grid bounds, i.e. column/row plus width/height span.
+	 */
+	void setCells(ComponentInfo component, Rectangle cells) throws Exception {
+		GridBagConstraintsInfo constraints = GridBagLayoutInfo.getConstraintsFor(component);
+		constraints.setX(cells.x);
+		constraints.setY(cells.y);
+		constraints.setWidth(cells.width);
+		constraints.setHeight(cells.height);
+	}
 
-  /**
-   * @return the {@link Rectangle} with grid bounds, i.e. column/row plus width/height span.
-   */
-  static Rectangle getCells(ComponentInfo component) throws Exception {
-    GridBagConstraintsInfo constraints = GridBagLayoutInfo.getConstraintsFor(component);
-    return new Rectangle(constraints.x, constraints.y, constraints.width, constraints.height);
-  }
+	/**
+	 * @return the {@link Rectangle} with grid bounds, i.e. column/row plus width/height span.
+	 */
+	static Rectangle getCells(ComponentInfo component) throws Exception {
+		GridBagConstraintsInfo constraints = GridBagLayoutInfo.getConstraintsFor(component);
+		return new Rectangle(constraints.x, constraints.y, constraints.width, constraints.height);
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/IComponentPredicate.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/IComponentPredicate.java
index 1890c4056..c0a06db6f 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/IComponentPredicate.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/IComponentPredicate.java
@@ -19,24 +19,24 @@
  * @coverage swing.model.layout
  */
 public interface IComponentPredicate {
-  /**
-   * @return <code>true</code> if {@link ComponentInfo} should be visited.
-   */
-  boolean apply(ComponentInfo component, AbstractGridBagConstraintsInfo constraints)
-      throws Exception;
+	/**
+	 * @return <code>true</code> if {@link ComponentInfo} should be visited.
+	 */
+	boolean apply(ComponentInfo component, AbstractGridBagConstraintsInfo constraints)
+			throws Exception;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // TRUE
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Implementation of {@link IComponentPredicate} that accepts all {@link ComponentInfo}'s.
-   */
-  IComponentPredicate TRUE = new IComponentPredicate() {
-    public boolean apply(ComponentInfo component, AbstractGridBagConstraintsInfo constraints)
-        throws Exception {
-      return true;
-    }
-  };
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// TRUE
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Implementation of {@link IComponentPredicate} that accepts all {@link ComponentInfo}'s.
+	 */
+	IComponentPredicate TRUE = new IComponentPredicate() {
+		public boolean apply(ComponentInfo component, AbstractGridBagConstraintsInfo constraints)
+				throws Exception {
+			return true;
+		}
+	};
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/IComponentVisitor.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/IComponentVisitor.java
index 2504ba5d9..6aa2be33d 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/IComponentVisitor.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/IComponentVisitor.java
@@ -19,8 +19,8 @@
  * @coverage swing.model.layout
  */
 interface IComponentVisitor {
-  /**
-   * Visits {@link ComponentInfo} and its {@link AbstractGridBagConstraintsInfo}.
-   */
-  void visit(ComponentInfo component, AbstractGridBagConstraintsInfo constraints) throws Exception;
+	/**
+	 * Visits {@link ComponentInfo} and its {@link AbstractGridBagConstraintsInfo}.
+	 */
+	void visit(ComponentInfo component, AbstractGridBagConstraintsInfo constraints) throws Exception;
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/IPreferenceConstants.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/IPreferenceConstants.java
index 18e6d73c9..02d4c904f 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/IPreferenceConstants.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/IPreferenceConstants.java
@@ -21,35 +21,35 @@
  * @coverage swing.preferences.layout
  */
 public interface IPreferenceConstants {
-  /**
-   * When <code>true</code>, {@link AbstractGridBagLayoutInfo} can use
-   * {@link GridAlignmentHelper#V_GRAB_HORIZONTAL} and {@link GridAlignmentHelper#V_GRAB_VERTICAL}.
-   */
-  String P_ENABLE_GRAB = "GridBagLayout.enableGrab";
-  /**
-   * When <code>true</code>, {@link AbstractGridBagLayoutInfo} can use
-   * {@link GridAlignmentHelper#V_RIGHT_LABEL} and {@link GridAlignmentHelper#V_RIGHT_TARGET}.
-   */
-  String P_ENABLE_RIGHT_ALIGNMENT = "GridBagLayout.enableRightAlignment";
-  /**
-   * When <code>true</code>, {@link AbstractGridBagLayoutInfo} should use long form of
-   * {@link GridBagConstraints} constructor.
-   */
-  String P_GBC_LONG = "GridBagLayout.longConstraints";
-  /**
-   * Allow automatically change insets to generate gaps between components.
-   */
-  String P_CHANGE_INSETS_FOR_GAPS = "GridBagLayout.changeInsets.forGaps";
-  /**
-   * Gap between columns.
-   */
-  String P_GAP_COLUMN = "GridBagLayout.gap.column";
-  /**
-   * Gap between rows.
-   */
-  String P_GAP_ROW = "GridBagLayout.gap.row";
-  /**
-   * The template for <code>GridBagConstraints</code> variable name.
-   */
-  String P_CONSTRAINTS_NAME_TEMPLATE = "templateConstraintsName";
+	/**
+	 * When <code>true</code>, {@link AbstractGridBagLayoutInfo} can use
+	 * {@link GridAlignmentHelper#V_GRAB_HORIZONTAL} and {@link GridAlignmentHelper#V_GRAB_VERTICAL}.
+	 */
+	String P_ENABLE_GRAB = "GridBagLayout.enableGrab";
+	/**
+	 * When <code>true</code>, {@link AbstractGridBagLayoutInfo} can use
+	 * {@link GridAlignmentHelper#V_RIGHT_LABEL} and {@link GridAlignmentHelper#V_RIGHT_TARGET}.
+	 */
+	String P_ENABLE_RIGHT_ALIGNMENT = "GridBagLayout.enableRightAlignment";
+	/**
+	 * When <code>true</code>, {@link AbstractGridBagLayoutInfo} should use long form of
+	 * {@link GridBagConstraints} constructor.
+	 */
+	String P_GBC_LONG = "GridBagLayout.longConstraints";
+	/**
+	 * Allow automatically change insets to generate gaps between components.
+	 */
+	String P_CHANGE_INSETS_FOR_GAPS = "GridBagLayout.changeInsets.forGaps";
+	/**
+	 * Gap between columns.
+	 */
+	String P_GAP_COLUMN = "GridBagLayout.gap.column";
+	/**
+	 * Gap between rows.
+	 */
+	String P_GAP_ROW = "GridBagLayout.gap.row";
+	/**
+	 * The template for <code>GridBagConstraints</code> variable name.
+	 */
+	String P_CONSTRAINTS_NAME_TEMPLATE = "templateConstraintsName";
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/PreferenceInitializer.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/PreferenceInitializer.java
index 6028ad9d1..20f899295 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/PreferenceInitializer.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/PreferenceInitializer.java
@@ -22,24 +22,24 @@
  * @coverage swing.preferences.layout
  */
 public final class PreferenceInitializer extends AbstractPreferenceInitializer
-    implements
-      IPreferenceConstants {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  //	Initializing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void initializeDefaultPreferences() {
-    IPreferenceStore preferenceStore = Activator.getDefault().getPreferenceStore();
-    preferenceStore.setDefault(P_ENABLE_GRAB, true);
-    preferenceStore.setDefault(P_ENABLE_RIGHT_ALIGNMENT, true);
-    preferenceStore.setDefault(P_GBC_LONG, false);
-    preferenceStore.setDefault(P_CHANGE_INSETS_FOR_GAPS, true);
-    preferenceStore.setDefault(P_GAP_COLUMN, 5);
-    preferenceStore.setDefault(P_GAP_ROW, 5);
-    preferenceStore.setDefault(
-        P_CONSTRAINTS_NAME_TEMPLATE,
-        "${constraintsAcronym}_${componentName}");
-  }
+implements
+IPreferenceConstants {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	//	Initializing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void initializeDefaultPreferences() {
+		IPreferenceStore preferenceStore = Activator.getDefault().getPreferenceStore();
+		preferenceStore.setDefault(P_ENABLE_GRAB, true);
+		preferenceStore.setDefault(P_ENABLE_RIGHT_ALIGNMENT, true);
+		preferenceStore.setDefault(P_GBC_LONG, false);
+		preferenceStore.setDefault(P_CHANGE_INSETS_FOR_GAPS, true);
+		preferenceStore.setDefault(P_GAP_COLUMN, 5);
+		preferenceStore.setDefault(P_GAP_ROW, 5);
+		preferenceStore.setDefault(
+				P_CONSTRAINTS_NAME_TEMPLATE,
+				"${constraintsAcronym}_${componentName}");
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/RowInfo.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/RowInfo.java
index e11319a2f..0ce0da33a 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/RowInfo.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/RowInfo.java
@@ -23,91 +23,91 @@
  * @coverage swing.model.layout
  */
 public final class RowInfo extends DimensionInfo {
-  public enum Alignment {
-    UNKNOWN, TOP, CENTER, BOTTOM, FILL, BASELINE, BASELINE_ABOVE, BASELINE_BELOW
-  }
+	public enum Alignment {
+		UNKNOWN, TOP, CENTER, BOTTOM, FILL, BASELINE, BASELINE_ABOVE, BASELINE_BELOW
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public RowInfo(AbstractGridBagLayoutInfo layout, DimensionOperations<?> operations) {
-    super(layout, operations);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public RowInfo(AbstractGridBagLayoutInfo layout, DimensionOperations<?> operations) {
+		super(layout, operations);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the alignment of this {@link ColumnInfo}. {@link ColumnInfo} has alignment only if all
-   *         {@link ComponentInfo}'s have same alignment. In other case {@link Alignment#UNKNOWN}
-   *         will be returned.
-   */
-  public Alignment getAlignment() {
-    final EnumSet<Alignment> alignments = EnumSet.noneOf(Alignment.class);
-    visit(new IComponentVisitor() {
-      public void visit(ComponentInfo component, AbstractGridBagConstraintsInfo constraints)
-          throws Exception {
-        alignments.add(constraints.getVerticalAlignment());
-      }
-    });
-    return alignments.size() == 1 ? alignments.iterator().next() : Alignment.UNKNOWN;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the alignment of this {@link ColumnInfo}. {@link ColumnInfo} has alignment only if all
+	 *         {@link ComponentInfo}'s have same alignment. In other case {@link Alignment#UNKNOWN}
+	 *         will be returned.
+	 */
+	public Alignment getAlignment() {
+		final EnumSet<Alignment> alignments = EnumSet.noneOf(Alignment.class);
+		visit(new IComponentVisitor() {
+			public void visit(ComponentInfo component, AbstractGridBagConstraintsInfo constraints)
+					throws Exception {
+				alignments.add(constraints.getVerticalAlignment());
+			}
+		});
+		return alignments.size() == 1 ? alignments.iterator().next() : Alignment.UNKNOWN;
+	}
 
-  /**
-   * Sets alignment for all {@link ComponentInfo}'s in this {@link RowInfo}.
-   */
-  public void setAlignment(final RowInfo.Alignment alignment) throws Exception {
-    visit(new IComponentVisitor() {
-      public void visit(ComponentInfo component, AbstractGridBagConstraintsInfo constraints)
-          throws Exception {
-        constraints.setVerticalAlignment(alignment);
-      }
-    });
-  }
+	/**
+	 * Sets alignment for all {@link ComponentInfo}'s in this {@link RowInfo}.
+	 */
+	public void setAlignment(final RowInfo.Alignment alignment) throws Exception {
+		visit(new IComponentVisitor() {
+			public void visit(ComponentInfo component, AbstractGridBagConstraintsInfo constraints)
+					throws Exception {
+				constraints.setVerticalAlignment(alignment);
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Implementation access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected int initialize_getMinimumSize(int index) {
-    Object layoutObject = m_layout.getObject();
-    int[] widths = (int[]) ReflectionUtils.getFieldObject(layoutObject, "rowHeights");
-    if (widths != null && widths.length > index) {
-      return widths[index];
-    } else {
-      return 0;
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Implementation access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected int initialize_getMinimumSize(int index) {
+		Object layoutObject = m_layout.getObject();
+		int[] widths = (int[]) ReflectionUtils.getFieldObject(layoutObject, "rowHeights");
+		if (widths != null && widths.length > index) {
+			return widths[index];
+		} else {
+			return 0;
+		}
+	}
 
-  @Override
-  protected double initialize_getWeight(int index) {
-    Object layoutObject = m_layout.getObject();
-    double[] weights = (double[]) ReflectionUtils.getFieldObject(layoutObject, "rowWeights");
-    if (weights != null && weights.length > index) {
-      return weights[index];
-    } else {
-      return 0;
-    }
-  }
+	@Override
+	protected double initialize_getWeight(int index) {
+		Object layoutObject = m_layout.getObject();
+		double[] weights = (double[]) ReflectionUtils.getFieldObject(layoutObject, "rowWeights");
+		if (weights != null && weights.length > index) {
+			return weights[index];
+		} else {
+			return 0;
+		}
+	}
 
-  @Override
-  protected List<? extends DimensionInfo> getDimensions() {
-    return m_layout.getRows();
-  }
+	@Override
+	protected List<? extends DimensionInfo> getDimensions() {
+		return m_layout.getRows();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Visiting
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected boolean isDimensionComponent(AbstractGridBagConstraintsInfo constraints) {
-    return constraints.y == getIndex();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Visiting
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected boolean isDimensionComponent(AbstractGridBagConstraintsInfo constraints) {
+		return constraints.y == getIndex();
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/VirtualConstraintsCreationSupport.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/VirtualConstraintsCreationSupport.java
index 7c68c2de0..67c045702 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/VirtualConstraintsCreationSupport.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/VirtualConstraintsCreationSupport.java
@@ -28,91 +28,91 @@
  * @coverage swing.model.layout
  */
 public final class VirtualConstraintsCreationSupport extends CreationSupport {
-  private final VirtualConstraintsCreationSupport m_this = this;
-  private final AbstractGridBagLayoutInfo m_layout;
-  private final ComponentInfo m_component;
+	private final VirtualConstraintsCreationSupport m_this = this;
+	private final AbstractGridBagLayoutInfo m_layout;
+	private final ComponentInfo m_component;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public VirtualConstraintsCreationSupport(ComponentInfo component) throws Exception {
-    m_component = component;
-    m_layout = (AbstractGridBagLayoutInfo) ((ContainerInfo) m_component.getParent()).getLayout();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public VirtualConstraintsCreationSupport(ComponentInfo component) throws Exception {
+		m_component = component;
+		m_layout = (AbstractGridBagLayoutInfo) ((ContainerInfo) m_component.getParent()).getLayout();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean isJavaInfo(ASTNode node) {
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean isJavaInfo(ASTNode node) {
+		return false;
+	}
 
-  @Override
-  public ASTNode getNode() {
-    return null;
-  }
+	@Override
+	public ASTNode getNode() {
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void setJavaInfo(JavaInfo javaInfo) throws Exception {
-    super.setJavaInfo(javaInfo);
-    // evaluate during each "refresh"
-    m_javaInfo.addBroadcastListener(new ObjectEventListener() {
-      @Override
-      public void refreshAfterCreate() throws Exception {
-        if (m_javaInfo.getCreationSupport() == m_this) {
-          evaluateConstraints();
-        } else {
-          m_javaInfo.removeBroadcastListener(this);
-        }
-      }
-    });
-    // evaluate first time now
-    evaluateConstraints();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void setJavaInfo(JavaInfo javaInfo) throws Exception {
+		super.setJavaInfo(javaInfo);
+		// evaluate during each "refresh"
+		m_javaInfo.addBroadcastListener(new ObjectEventListener() {
+			@Override
+			public void refreshAfterCreate() throws Exception {
+				if (m_javaInfo.getCreationSupport() == m_this) {
+					evaluateConstraints();
+				} else {
+					m_javaInfo.removeBroadcastListener(this);
+				}
+			}
+		});
+		// evaluate first time now
+		evaluateConstraints();
+	}
 
-  /**
-   * Evaluates current {@link GridBagConstraints} value.
-   */
-  private void evaluateConstraints() throws Exception {
-    Component component = m_component.getComponent();
-    // prepare constraints
-    Object constraints = m_layout.getConstraintsObject(component);
-    // set constraints object
-    m_javaInfo.setObject(constraints);
-  }
+	/**
+	 * Evaluates current {@link GridBagConstraints} value.
+	 */
+	private void evaluateConstraints() throws Exception {
+		Component component = m_component.getComponent();
+		// prepare constraints
+		Object constraints = m_layout.getConstraintsObject(component);
+		// set constraints object
+		m_javaInfo.setObject(constraints);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Delete
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean canDelete() {
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Delete
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean canDelete() {
+		return true;
+	}
 
-  @Override
-  public void delete() throws Exception {
-    m_component.removeChild(m_javaInfo);
-  }
+	@Override
+	public void delete() throws Exception {
+		m_component.removeChild(m_javaInfo);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    return "virtual-GBL-constraints";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		return "virtual-GBL-constraints";
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/VirtualConstraintsVariableSupport.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/VirtualConstraintsVariableSupport.java
index 8cd0d9dd8..6639e5baf 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/VirtualConstraintsVariableSupport.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/VirtualConstraintsVariableSupport.java
@@ -36,110 +36,110 @@
  * @coverage swing.model.layout
  */
 public final class VirtualConstraintsVariableSupport extends AbstractNoNameVariableSupport {
-  final AbstractGridBagConstraintsInfo m_constraints;
+	final AbstractGridBagConstraintsInfo m_constraints;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public VirtualConstraintsVariableSupport(AbstractGridBagConstraintsInfo constraints) {
-    super(constraints);
-    m_constraints = constraints;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public VirtualConstraintsVariableSupport(AbstractGridBagConstraintsInfo constraints) {
+		super(constraints);
+		m_constraints = constraints;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getTitle() throws Exception {
-    return "(virtual GBL constraints)";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getTitle() throws Exception {
+		return "(virtual GBL constraints)";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Expressions
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getReferenceExpression(NodeTarget target) throws Exception {
-    materialize();
-    return m_javaInfo.getVariableSupport().getReferenceExpression(target);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Expressions
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getReferenceExpression(NodeTarget target) throws Exception {
+		materialize();
+		return m_javaInfo.getVariableSupport().getReferenceExpression(target);
+	}
 
-  @Override
-  public String getAccessExpression(NodeTarget target) throws Exception {
-    return getReferenceExpression(target) + ".";
-  }
+	@Override
+	public String getAccessExpression(NodeTarget target) throws Exception {
+		return getReferenceExpression(target) + ".";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Implementation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Materializes {@link AbstractGridBagConstraintsInfo} with this
-   * {@link VirtualConstraintsVariableSupport} , i.e. ensures that it has {@link ASTNode}, real
-   * {@link CreationSupport} and {@link VariableSupport}.
-   */
-  void materialize() throws Exception {
-    ComponentInfo component = (ComponentInfo) m_javaInfo.getParent();
-    AstEditor editor = component.getEditor();
-    // check for usual code pattern: add(java.awt.Component)
-    if (component.getAssociation() instanceof InvocationChildAssociation) {
-      InvocationChildAssociation association =
-          (InvocationChildAssociation) component.getAssociation();
-      MethodInvocation invocation = association.getInvocation();
-      if (AstNodeUtils.getMethodSignature(invocation).equals("add(java.awt.Component)")) {
-        // prepare constraints source
-        String source;
-        if (Activator.getDefault().getPreferenceStore().getBoolean(IPreferenceConstants.P_GBC_LONG)) {
-          source = m_constraints.newInstanceSourceLong();
-        } else {
-          source = m_constraints.newInstanceSourceShort();
-        }
-        // add constraints ASTNode
-        Expression constraintsExpression = editor.addInvocationArgument(invocation, 1, source);
-        m_javaInfo.addRelatedNode(constraintsExpression);
-        // ConstructorCreationSupport was used
-        {
-          ConstructorCreationSupport creationSupport = new ConstructorCreationSupport();
-          m_javaInfo.setCreationSupport(creationSupport);
-          creationSupport.add_setSourceExpression(constraintsExpression);
-        }
-        // use empty variable
-        VariableSupport variableSupport =
-            new EmptyVariableSupport(m_javaInfo, constraintsExpression);
-        m_javaInfo.setVariableSupport(variableSupport);
-        // use "secondary" association
-        m_javaInfo.setAssociation(new InvocationSecondaryAssociation(invocation));
-        // done
-        return;
-      }
-    }
-    // XXX
-    Assert.fail("Not implemented yet.");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Implementation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Materializes {@link AbstractGridBagConstraintsInfo} with this
+	 * {@link VirtualConstraintsVariableSupport} , i.e. ensures that it has {@link ASTNode}, real
+	 * {@link CreationSupport} and {@link VariableSupport}.
+	 */
+	void materialize() throws Exception {
+		ComponentInfo component = (ComponentInfo) m_javaInfo.getParent();
+		AstEditor editor = component.getEditor();
+		// check for usual code pattern: add(java.awt.Component)
+		if (component.getAssociation() instanceof InvocationChildAssociation) {
+			InvocationChildAssociation association =
+					(InvocationChildAssociation) component.getAssociation();
+			MethodInvocation invocation = association.getInvocation();
+			if (AstNodeUtils.getMethodSignature(invocation).equals("add(java.awt.Component)")) {
+				// prepare constraints source
+				String source;
+				if (Activator.getDefault().getPreferenceStore().getBoolean(IPreferenceConstants.P_GBC_LONG)) {
+					source = m_constraints.newInstanceSourceLong();
+				} else {
+					source = m_constraints.newInstanceSourceShort();
+				}
+				// add constraints ASTNode
+				Expression constraintsExpression = editor.addInvocationArgument(invocation, 1, source);
+				m_javaInfo.addRelatedNode(constraintsExpression);
+				// ConstructorCreationSupport was used
+				{
+					ConstructorCreationSupport creationSupport = new ConstructorCreationSupport();
+					m_javaInfo.setCreationSupport(creationSupport);
+					creationSupport.add_setSourceExpression(constraintsExpression);
+				}
+				// use empty variable
+				VariableSupport variableSupport =
+						new EmptyVariableSupport(m_javaInfo, constraintsExpression);
+				m_javaInfo.setVariableSupport(variableSupport);
+				// use "secondary" association
+				m_javaInfo.setAssociation(new InvocationSecondaryAssociation(invocation));
+				// done
+				return;
+			}
+		}
+		// XXX
+		Assert.fail("Not implemented yet.");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Target
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public StatementTarget getStatementTarget() throws Exception {
-    throw new IllegalStateException();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Target
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public StatementTarget getStatementTarget() throws Exception {
+		throw new IllegalStateException();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    return "virtual-GBL-constraints";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		return "virtual-GBL-constraints";
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/actions/AbstractAction.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/actions/AbstractAction.java
index 194b022aa..9c0ac9df6 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/actions/AbstractAction.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/actions/AbstractAction.java
@@ -24,26 +24,26 @@
  * @coverage swing.model.layout
  */
 abstract class AbstractAction extends ObjectInfoAction {
-  protected final AbstractGridBagConstraintsInfo m_constraints;
-  protected final boolean m_horizontal;
+	protected final AbstractGridBagConstraintsInfo m_constraints;
+	protected final boolean m_horizontal;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractAction(AbstractGridBagConstraintsInfo constraints,
-      String text,
-      int style,
-      String iconPath,
-      boolean horizontal) {
-    super(constraints, text, style);
-    m_constraints = constraints;
-    m_horizontal = horizontal;
-    // set image
-    if (iconPath != null) {
-      String path = "headers/" + (horizontal ? "h" : "v") + "/menu/" + iconPath;
-      setImageDescriptor(AbstractGridBagLayoutInfo.getImageDescriptor(path));
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractAction(AbstractGridBagConstraintsInfo constraints,
+			String text,
+			int style,
+			String iconPath,
+			boolean horizontal) {
+		super(constraints, text, style);
+		m_constraints = constraints;
+		m_horizontal = horizontal;
+		// set image
+		if (iconPath != null) {
+			String path = "headers/" + (horizontal ? "h" : "v") + "/menu/" + iconPath;
+			setImageDescriptor(AbstractGridBagLayoutInfo.getImageDescriptor(path));
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/actions/SelectionActionsSupport.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/actions/SelectionActionsSupport.java
index 63114dcbb..1649e3976 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/actions/SelectionActionsSupport.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/actions/SelectionActionsSupport.java
@@ -35,308 +35,308 @@
  * @coverage swing.model.layout
  */
 public class SelectionActionsSupport extends ObjectEventListener {
-  private final AbstractGridBagLayoutInfo m_layout;
+	private final AbstractGridBagLayoutInfo m_layout;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SelectionActionsSupport(AbstractGridBagLayoutInfo layout) {
-    m_layout = layout;
-    m_layout.addBroadcastListener(this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SelectionActionsSupport(AbstractGridBagLayoutInfo layout) {
+		m_layout = layout;
+		m_layout.addBroadcastListener(this);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ObjectEventListener
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void addSelectionActions(List<ObjectInfo> objects, List<Object> actions) throws Exception {
-    if (objects.isEmpty()) {
-      return;
-    }
-    // prepare constraints
-    List<AbstractGridBagConstraintsInfo> constraints = Lists.newArrayList();
-    for (ObjectInfo object : objects) {
-      // check object
-      if (!m_layout.isManagedObject(object)) {
-        return;
-      }
-      // add data info
-      ComponentInfo component = (ComponentInfo) object;
-      constraints.add(m_layout.getConstraints(component));
-    }
-    // create horizontal actions
-    actions.add(new Separator());
-    addAlignmentAction(
-        actions,
-        constraints,
-        true,
-        "left.gif",
-        ModelMessages.SelectionActionsSupport_haLeft,
-        ColumnInfo.Alignment.LEFT);
-    addAlignmentAction(
-        actions,
-        constraints,
-        true,
-        "center.gif",
-        ModelMessages.SelectionActionsSupport_haCenter,
-        ColumnInfo.Alignment.CENTER);
-    addAlignmentAction(
-        actions,
-        constraints,
-        true,
-        "right.gif",
-        ModelMessages.SelectionActionsSupport_haRight,
-        ColumnInfo.Alignment.RIGHT);
-    addAlignmentAction(
-        actions,
-        constraints,
-        true,
-        "fill.gif",
-        ModelMessages.SelectionActionsSupport_haFill,
-        ColumnInfo.Alignment.FILL);
-    // create vertical actions
-    actions.add(new Separator());
-    addAlignmentAction(
-        actions,
-        constraints,
-        false,
-        "top.gif",
-        ModelMessages.SelectionActionsSupport_vaTop,
-        RowInfo.Alignment.TOP);
-    addAlignmentAction(
-        actions,
-        constraints,
-        false,
-        "center.gif",
-        ModelMessages.SelectionActionsSupport_vaCenter,
-        RowInfo.Alignment.CENTER);
-    addAlignmentAction(
-        actions,
-        constraints,
-        false,
-        "bottom.gif",
-        ModelMessages.SelectionActionsSupport_vaBottom,
-        RowInfo.Alignment.BOTTOM);
-    addAlignmentAction(
-        actions,
-        constraints,
-        false,
-        "fill.gif",
-        ModelMessages.SelectionActionsSupport_vaFill,
-        RowInfo.Alignment.FILL);
-    if (SystemUtils.IS_JAVA_1_6 || SystemUtils.IS_JAVA_1_7) {
-      addAlignmentAction(
-          actions,
-          constraints,
-          false,
-          "baseline.gif",
-          ModelMessages.SelectionActionsSupport_vaBaseline,
-          RowInfo.Alignment.BASELINE);
-      addAlignmentAction(
-          actions,
-          constraints,
-          false,
-          "baseline_above.gif",
-          ModelMessages.SelectionActionsSupport_vaAboveBaseline,
-          RowInfo.Alignment.BASELINE_ABOVE);
-      addAlignmentAction(
-          actions,
-          constraints,
-          false,
-          "baseline_below.gif",
-          ModelMessages.SelectionActionsSupport_vaBelowBaseline,
-          RowInfo.Alignment.BASELINE_BELOW);
-    }
-    // create grow actions
-    actions.add(new Separator());
-    addGrowAction(
-        actions,
-        constraints,
-        true,
-        "grow.gif",
-        ModelMessages.SelectionActionsSupport_haGrow);
-    addGrowAction(
-        actions,
-        constraints,
-        false,
-        "grow.gif",
-        ModelMessages.SelectionActionsSupport_vaGrow);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ObjectEventListener
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void addSelectionActions(List<ObjectInfo> objects, List<Object> actions) throws Exception {
+		if (objects.isEmpty()) {
+			return;
+		}
+		// prepare constraints
+		List<AbstractGridBagConstraintsInfo> constraints = Lists.newArrayList();
+		for (ObjectInfo object : objects) {
+			// check object
+			if (!m_layout.isManagedObject(object)) {
+				return;
+			}
+			// add data info
+			ComponentInfo component = (ComponentInfo) object;
+			constraints.add(m_layout.getConstraints(component));
+		}
+		// create horizontal actions
+		actions.add(new Separator());
+		addAlignmentAction(
+				actions,
+				constraints,
+				true,
+				"left.gif",
+				ModelMessages.SelectionActionsSupport_haLeft,
+				ColumnInfo.Alignment.LEFT);
+		addAlignmentAction(
+				actions,
+				constraints,
+				true,
+				"center.gif",
+				ModelMessages.SelectionActionsSupport_haCenter,
+				ColumnInfo.Alignment.CENTER);
+		addAlignmentAction(
+				actions,
+				constraints,
+				true,
+				"right.gif",
+				ModelMessages.SelectionActionsSupport_haRight,
+				ColumnInfo.Alignment.RIGHT);
+		addAlignmentAction(
+				actions,
+				constraints,
+				true,
+				"fill.gif",
+				ModelMessages.SelectionActionsSupport_haFill,
+				ColumnInfo.Alignment.FILL);
+		// create vertical actions
+		actions.add(new Separator());
+		addAlignmentAction(
+				actions,
+				constraints,
+				false,
+				"top.gif",
+				ModelMessages.SelectionActionsSupport_vaTop,
+				RowInfo.Alignment.TOP);
+		addAlignmentAction(
+				actions,
+				constraints,
+				false,
+				"center.gif",
+				ModelMessages.SelectionActionsSupport_vaCenter,
+				RowInfo.Alignment.CENTER);
+		addAlignmentAction(
+				actions,
+				constraints,
+				false,
+				"bottom.gif",
+				ModelMessages.SelectionActionsSupport_vaBottom,
+				RowInfo.Alignment.BOTTOM);
+		addAlignmentAction(
+				actions,
+				constraints,
+				false,
+				"fill.gif",
+				ModelMessages.SelectionActionsSupport_vaFill,
+				RowInfo.Alignment.FILL);
+		if (SystemUtils.IS_JAVA_1_6 || SystemUtils.IS_JAVA_1_7) {
+			addAlignmentAction(
+					actions,
+					constraints,
+					false,
+					"baseline.gif",
+					ModelMessages.SelectionActionsSupport_vaBaseline,
+					RowInfo.Alignment.BASELINE);
+			addAlignmentAction(
+					actions,
+					constraints,
+					false,
+					"baseline_above.gif",
+					ModelMessages.SelectionActionsSupport_vaAboveBaseline,
+					RowInfo.Alignment.BASELINE_ABOVE);
+			addAlignmentAction(
+					actions,
+					constraints,
+					false,
+					"baseline_below.gif",
+					ModelMessages.SelectionActionsSupport_vaBelowBaseline,
+					RowInfo.Alignment.BASELINE_BELOW);
+		}
+		// create grow actions
+		actions.add(new Separator());
+		addGrowAction(
+				actions,
+				constraints,
+				true,
+				"grow.gif",
+				ModelMessages.SelectionActionsSupport_haGrow);
+		addGrowAction(
+				actions,
+				constraints,
+				false,
+				"grow.gif",
+				ModelMessages.SelectionActionsSupport_vaGrow);
+	}
 
-  private void addAlignmentAction(List<Object> actions,
-      List<AbstractGridBagConstraintsInfo> constraints,
-      boolean horizontal,
-      String iconPath,
-      String tooltip,
-      Object alignment) {
-    boolean isChecked = true;
-    // prepare select current value
-    for (AbstractGridBagConstraintsInfo constraint : constraints) {
-      if (horizontal) {
-        if (constraint.getHorizontalAlignment() != alignment) {
-          isChecked = false;
-          break;
-        }
-      } else {
-        if (constraint.getVerticalAlignment() != alignment) {
-          isChecked = false;
-          break;
-        }
-      }
-    }
-    // create action
-    AlignmentAction action =
-        new AlignmentAction(constraints, horizontal, iconPath, tooltip, isChecked, alignment);
-    actions.add(action);
-  }
+	private void addAlignmentAction(List<Object> actions,
+			List<AbstractGridBagConstraintsInfo> constraints,
+			boolean horizontal,
+			String iconPath,
+			String tooltip,
+			Object alignment) {
+		boolean isChecked = true;
+		// prepare select current value
+		for (AbstractGridBagConstraintsInfo constraint : constraints) {
+			if (horizontal) {
+				if (constraint.getHorizontalAlignment() != alignment) {
+					isChecked = false;
+					break;
+				}
+			} else {
+				if (constraint.getVerticalAlignment() != alignment) {
+					isChecked = false;
+					break;
+				}
+			}
+		}
+		// create action
+		AlignmentAction action =
+				new AlignmentAction(constraints, horizontal, iconPath, tooltip, isChecked, alignment);
+		actions.add(action);
+	}
 
-  private void addGrowAction(List<Object> actions,
-      List<AbstractGridBagConstraintsInfo> constraints,
-      boolean horizontal,
-      String iconPath,
-      String tooltip) {
-    boolean isChecked = true;
-    // prepare select current value
-    for (AbstractGridBagConstraintsInfo constraint : constraints) {
-      if (horizontal) {
-        if (!constraint.getColumn().hasWeight()) {
-          isChecked = false;
-          break;
-        }
-      } else {
-        if (!constraint.getRow().hasWeight()) {
-          isChecked = false;
-          break;
-        }
-      }
-    }
-    // create action
-    GrowAction action =
-        new GrowAction(constraints, horizontal, iconPath, tooltip, isChecked, !isChecked);
-    actions.add(action);
-  }
+	private void addGrowAction(List<Object> actions,
+			List<AbstractGridBagConstraintsInfo> constraints,
+			boolean horizontal,
+			String iconPath,
+			String tooltip) {
+		boolean isChecked = true;
+		// prepare select current value
+		for (AbstractGridBagConstraintsInfo constraint : constraints) {
+			if (horizontal) {
+				if (!constraint.getColumn().hasWeight()) {
+					isChecked = false;
+					break;
+				}
+			} else {
+				if (!constraint.getRow().hasWeight()) {
+					isChecked = false;
+					break;
+				}
+			}
+		}
+		// create action
+		GrowAction action =
+				new GrowAction(constraints, horizontal, iconPath, tooltip, isChecked, !isChecked);
+		actions.add(action);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Actions
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private abstract class AbstractAction extends ObjectInfoAction {
-    private final List<AbstractGridBagConstraintsInfo> m_constraints;
-    private final boolean m_horizontal;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Actions
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private abstract class AbstractAction extends ObjectInfoAction {
+		private final List<AbstractGridBagConstraintsInfo> m_constraints;
+		private final boolean m_horizontal;
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public AbstractAction(int style,
-        List<AbstractGridBagConstraintsInfo> constraints,
-        boolean horizontal,
-        String iconPath,
-        String tooltip,
-        boolean checked) {
-      super(m_layout, "", style);
-      m_constraints = constraints;
-      m_horizontal = horizontal;
-      String path = "headers/" + (m_horizontal ? "h" : "v") + "/menu/" + iconPath;
-      setImageDescriptor(AbstractGridBagLayoutInfo.getImageDescriptor(path));
-      setToolTipText(tooltip);
-      setChecked(checked);
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public AbstractAction(int style,
+				List<AbstractGridBagConstraintsInfo> constraints,
+				boolean horizontal,
+				String iconPath,
+				String tooltip,
+				boolean checked) {
+			super(m_layout, "", style);
+			m_constraints = constraints;
+			m_horizontal = horizontal;
+			String path = "headers/" + (m_horizontal ? "h" : "v") + "/menu/" + iconPath;
+			setImageDescriptor(AbstractGridBagLayoutInfo.getImageDescriptor(path));
+			setToolTipText(tooltip);
+			setChecked(checked);
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Run
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    protected void runEx() throws Exception {
-      for (AbstractGridBagConstraintsInfo constraint : m_constraints) {
-        if (m_horizontal) {
-          handleHorizontal(constraint);
-        } else {
-          handleVertical(constraint);
-        }
-      }
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Run
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		protected void runEx() throws Exception {
+			for (AbstractGridBagConstraintsInfo constraint : m_constraints) {
+				if (m_horizontal) {
+					handleHorizontal(constraint);
+				} else {
+					handleVertical(constraint);
+				}
+			}
+		}
 
-    protected abstract void handleHorizontal(AbstractGridBagConstraintsInfo constraint)
-        throws Exception;
+		protected abstract void handleHorizontal(AbstractGridBagConstraintsInfo constraint)
+				throws Exception;
 
-    protected abstract void handleVertical(AbstractGridBagConstraintsInfo constraint)
-        throws Exception;
-  }
-  private final class AlignmentAction extends AbstractAction {
-    private final Object m_alignment;
+		protected abstract void handleVertical(AbstractGridBagConstraintsInfo constraint)
+				throws Exception;
+	}
+	private final class AlignmentAction extends AbstractAction {
+		private final Object m_alignment;
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public AlignmentAction(List<AbstractGridBagConstraintsInfo> constraints,
-        boolean horizontal,
-        String iconPath,
-        String tooltip,
-        boolean checked,
-        Object alignment) {
-      super(AS_RADIO_BUTTON, constraints, horizontal, iconPath, tooltip, checked);
-      m_alignment = alignment;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public AlignmentAction(List<AbstractGridBagConstraintsInfo> constraints,
+				boolean horizontal,
+				String iconPath,
+				String tooltip,
+				boolean checked,
+				Object alignment) {
+			super(AS_RADIO_BUTTON, constraints, horizontal, iconPath, tooltip, checked);
+			m_alignment = alignment;
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // AbstractAction
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    protected void handleHorizontal(AbstractGridBagConstraintsInfo constraint) throws Exception {
-      constraint.setHorizontalAlignment((ColumnInfo.Alignment) m_alignment);
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// AbstractAction
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		protected void handleHorizontal(AbstractGridBagConstraintsInfo constraint) throws Exception {
+			constraint.setHorizontalAlignment((ColumnInfo.Alignment) m_alignment);
+		}
 
-    @Override
-    protected void handleVertical(AbstractGridBagConstraintsInfo constraint) throws Exception {
-      constraint.setVerticalAlignment((RowInfo.Alignment) m_alignment);
-    }
-  }
-  private final class GrowAction extends AbstractAction {
-    private final boolean m_grow;
+		@Override
+		protected void handleVertical(AbstractGridBagConstraintsInfo constraint) throws Exception {
+			constraint.setVerticalAlignment((RowInfo.Alignment) m_alignment);
+		}
+	}
+	private final class GrowAction extends AbstractAction {
+		private final boolean m_grow;
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public GrowAction(List<AbstractGridBagConstraintsInfo> constraints,
-        boolean horizontal,
-        String iconPath,
-        String tooltip,
-        boolean checked,
-        boolean grow) {
-      super(AS_CHECK_BOX, constraints, horizontal, iconPath, tooltip, checked);
-      m_grow = grow;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public GrowAction(List<AbstractGridBagConstraintsInfo> constraints,
+				boolean horizontal,
+				String iconPath,
+				String tooltip,
+				boolean checked,
+				boolean grow) {
+			super(AS_CHECK_BOX, constraints, horizontal, iconPath, tooltip, checked);
+			m_grow = grow;
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // AbstractAction
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    protected void handleHorizontal(AbstractGridBagConstraintsInfo constraint) throws Exception {
-      ColumnInfo column = constraint.getColumn();
-      column.setWeight(m_grow ? 1 : 0);
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// AbstractAction
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		protected void handleHorizontal(AbstractGridBagConstraintsInfo constraint) throws Exception {
+			ColumnInfo column = constraint.getColumn();
+			column.setWeight(m_grow ? 1 : 0);
+		}
 
-    @Override
-    protected void handleVertical(AbstractGridBagConstraintsInfo constraint) throws Exception {
-      RowInfo row = constraint.getRow();
-      row.setWeight(m_grow ? 1 : 0);
-    }
-  }
+		@Override
+		protected void handleVertical(AbstractGridBagConstraintsInfo constraint) throws Exception {
+			RowInfo row = constraint.getRow();
+			row.setWeight(m_grow ? 1 : 0);
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/actions/SetAlignmentHorizontalAction.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/actions/SetAlignmentHorizontalAction.java
index bb19fe0d7..cfcc1433f 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/actions/SetAlignmentHorizontalAction.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/actions/SetAlignmentHorizontalAction.java
@@ -22,30 +22,30 @@
  * @coverage swing.model.layout
  */
 public final class SetAlignmentHorizontalAction extends AbstractAction {
-  private final ColumnInfo.Alignment m_alignment;
+	private final ColumnInfo.Alignment m_alignment;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SetAlignmentHorizontalAction(AbstractGridBagConstraintsInfo constraints,
-      String text,
-      String iconPath,
-      ColumnInfo.Alignment alignment) {
-    super(constraints, text, AS_RADIO_BUTTON, iconPath, true);
-    m_alignment = alignment;
-    // set check for current alignment
-    setChecked(constraints.getHorizontalAlignment() == m_alignment);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SetAlignmentHorizontalAction(AbstractGridBagConstraintsInfo constraints,
+			String text,
+			String iconPath,
+			ColumnInfo.Alignment alignment) {
+		super(constraints, text, AS_RADIO_BUTTON, iconPath, true);
+		m_alignment = alignment;
+		// set check for current alignment
+		setChecked(constraints.getHorizontalAlignment() == m_alignment);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Run
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void runEx() throws Exception {
-    m_constraints.setHorizontalAlignment(m_alignment);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Run
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void runEx() throws Exception {
+		m_constraints.setHorizontalAlignment(m_alignment);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/actions/SetAlignmentVerticalAction.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/actions/SetAlignmentVerticalAction.java
index 63a926b06..5a491180e 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/actions/SetAlignmentVerticalAction.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/actions/SetAlignmentVerticalAction.java
@@ -22,30 +22,30 @@
  * @coverage swing.model.layout
  */
 public final class SetAlignmentVerticalAction extends AbstractAction {
-  private final RowInfo.Alignment m_alignment;
+	private final RowInfo.Alignment m_alignment;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SetAlignmentVerticalAction(AbstractGridBagConstraintsInfo constraints,
-      String text,
-      String iconPath,
-      RowInfo.Alignment alignment) {
-    super(constraints, text, AS_RADIO_BUTTON, iconPath, false);
-    m_alignment = alignment;
-    // set check for current alignment
-    setChecked(constraints.getVerticalAlignment() == m_alignment);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SetAlignmentVerticalAction(AbstractGridBagConstraintsInfo constraints,
+			String text,
+			String iconPath,
+			RowInfo.Alignment alignment) {
+		super(constraints, text, AS_RADIO_BUTTON, iconPath, false);
+		m_alignment = alignment;
+		// set check for current alignment
+		setChecked(constraints.getVerticalAlignment() == m_alignment);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Run
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void runEx() throws Exception {
-    m_constraints.setVerticalAlignment(m_alignment);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Run
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void runEx() throws Exception {
+		m_constraints.setVerticalAlignment(m_alignment);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/actions/SetGrowAction.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/actions/SetGrowAction.java
index e3f48e3ca..5b49a0c77 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/actions/SetGrowAction.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/actions/SetGrowAction.java
@@ -22,29 +22,29 @@
  * @coverage swing.model.layout
  */
 public final class SetGrowAction extends AbstractAction {
-  private final DimensionInfo m_dimension;
+	private final DimensionInfo m_dimension;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SetGrowAction(AbstractGridBagConstraintsInfo constraints,
-      String text,
-      String iconPath,
-      boolean horizontal) {
-    super(constraints, text, AS_CHECK_BOX, iconPath, horizontal);
-    m_dimension = horizontal ? constraints.getColumn() : constraints.getRow();
-    setChecked(m_dimension.hasWeight());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SetGrowAction(AbstractGridBagConstraintsInfo constraints,
+			String text,
+			String iconPath,
+			boolean horizontal) {
+		super(constraints, text, AS_CHECK_BOX, iconPath, horizontal);
+		m_dimension = horizontal ? constraints.getColumn() : constraints.getRow();
+		setChecked(m_dimension.hasWeight());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Run
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void runEx() throws Exception {
-    m_dimension.setWeight(m_dimension.hasWeight() ? 0.0 : 1.0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Run
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void runEx() throws Exception {
+		m_dimension.setWeight(m_dimension.hasWeight() ? 0.0 : 1.0);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/ui/AlignmentDescription.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/ui/AlignmentDescription.java
index 4fb5c7321..7d94ac5f8 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/ui/AlignmentDescription.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/ui/AlignmentDescription.java
@@ -19,35 +19,35 @@
  * @coverage swing.model.layout.ui
  */
 public final class AlignmentDescription<A extends Enum<?>> {
-  private final A m_alignment;
-  private final String m_title;
+	private final A m_alignment;
+	private final String m_title;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AlignmentDescription(A alignment, String title) {
-    m_alignment = alignment;
-    m_title = title;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AlignmentDescription(A alignment, String title) {
+		m_alignment = alignment;
+		m_title = title;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the alignment value.
-   */
-  public A getAlignment() {
-    return m_alignment;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the alignment value.
+	 */
+	public A getAlignment() {
+		return m_alignment;
+	}
 
-  /**
-   * @return the title for alignment.
-   */
-  public String getTitle() {
-    return m_title;
-  }
+	/**
+	 * @return the title for alignment.
+	 */
+	public String getTitle() {
+		return m_title;
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/ui/ColumnEditDialog.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/ui/ColumnEditDialog.java
index bd66c9105..b37d96196 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/ui/ColumnEditDialog.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/ui/ColumnEditDialog.java
@@ -27,46 +27,46 @@
  * @coverage swing.model.layout.ui
  */
 public final class ColumnEditDialog extends DimensionEditDialog<ColumnInfo, ColumnInfo.Alignment> {
-  private static final List<AlignmentDescription<ColumnInfo.Alignment>> ALIGNMENTS =
-      Lists.newArrayList();
-  static {
-    ALIGNMENTS.add(new AlignmentDescription<ColumnInfo.Alignment>(ColumnInfo.Alignment.LEFT,
-        ModelMessages.ColumnEditDialog_aLeft));
-    ALIGNMENTS.add(new AlignmentDescription<ColumnInfo.Alignment>(ColumnInfo.Alignment.CENTER,
-        ModelMessages.ColumnEditDialog_aCenter));
-    ALIGNMENTS.add(new AlignmentDescription<ColumnInfo.Alignment>(ColumnInfo.Alignment.RIGHT,
-        ModelMessages.ColumnEditDialog_aRight));
-    ALIGNMENTS.add(new AlignmentDescription<ColumnInfo.Alignment>(ColumnInfo.Alignment.FILL,
-        ModelMessages.ColumnEditDialog_aFill));
-  }
+	private static final List<AlignmentDescription<ColumnInfo.Alignment>> ALIGNMENTS =
+			Lists.newArrayList();
+	static {
+		ALIGNMENTS.add(new AlignmentDescription<ColumnInfo.Alignment>(ColumnInfo.Alignment.LEFT,
+				ModelMessages.ColumnEditDialog_aLeft));
+		ALIGNMENTS.add(new AlignmentDescription<ColumnInfo.Alignment>(ColumnInfo.Alignment.CENTER,
+				ModelMessages.ColumnEditDialog_aCenter));
+		ALIGNMENTS.add(new AlignmentDescription<ColumnInfo.Alignment>(ColumnInfo.Alignment.RIGHT,
+				ModelMessages.ColumnEditDialog_aRight));
+		ALIGNMENTS.add(new AlignmentDescription<ColumnInfo.Alignment>(ColumnInfo.Alignment.FILL,
+				ModelMessages.ColumnEditDialog_aFill));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ColumnEditDialog(Shell parentShell, AbstractGridBagLayoutInfo layout, ColumnInfo column) {
-    super(parentShell,
-        layout,
-        layout.getColumns(),
-        column,
-        ModelMessages.ColumnEditDialog_title,
-        ALIGNMENTS);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ColumnEditDialog(Shell parentShell, AbstractGridBagLayoutInfo layout, ColumnInfo column) {
+		super(parentShell,
+				layout,
+				layout.getColumns(),
+				column,
+				ModelMessages.ColumnEditDialog_title,
+				ALIGNMENTS);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Internal access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected ColumnInfo.Alignment getAlignment(ColumnInfo dimension) {
-    return dimension.getAlignment();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Internal access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected ColumnInfo.Alignment getAlignment(ColumnInfo dimension) {
+		return dimension.getAlignment();
+	}
 
-  @Override
-  protected void setAlignment(ColumnInfo dimension, ColumnInfo.Alignment alignment)
-      throws Exception {
-    dimension.setAlignment(alignment);
-  }
+	@Override
+	protected void setAlignment(ColumnInfo dimension, ColumnInfo.Alignment alignment)
+			throws Exception {
+		dimension.setAlignment(alignment);
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/ui/DimensionEditDialog.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/ui/DimensionEditDialog.java
index 499295777..ecdfa73f5 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/ui/DimensionEditDialog.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/ui/DimensionEditDialog.java
@@ -47,362 +47,362 @@
  * @coverage swing.model.layout.ui
  */
 abstract class DimensionEditDialog<T extends DimensionInfo, A extends Enum<?>>
-    extends
-      ResizableDialog {
-  private final AbstractGridBagLayoutInfo m_layout;
-  private final List<T> m_dimensions;
-  private final boolean m_horizontal;
-  private final String m_dimensionName;
-  private final List<AlignmentDescription<A>> m_alignments;
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Current state
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private T m_dimension;
-  private int m_currentIndex;
-  private A m_currentAlignment;
-  private int m_currentSize;
-  private double m_currentWeight;
+extends
+ResizableDialog {
+	private final AbstractGridBagLayoutInfo m_layout;
+	private final List<T> m_dimensions;
+	private final boolean m_horizontal;
+	private final String m_dimensionName;
+	private final List<AlignmentDescription<A>> m_alignments;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Current state
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private T m_dimension;
+	private int m_currentIndex;
+	private A m_currentAlignment;
+	private int m_currentSize;
+	private double m_currentWeight;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DimensionEditDialog(Shell parentShell,
-      AbstractGridBagLayoutInfo layout,
-      List<T> dimensions,
-      T dimension,
-      String dimensionName,
-      List<AlignmentDescription<A>> alignments) {
-    super(parentShell, Activator.getDefault());
-    setShellStyle(SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
-    m_layout = layout;
-    m_dimensions = dimensions;
-    m_horizontal = dimension instanceof ColumnInfo;
-    m_dimensionName = dimensionName;
-    m_alignments = alignments;
-    setEditDimension(dimension);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DimensionEditDialog(Shell parentShell,
+			AbstractGridBagLayoutInfo layout,
+			List<T> dimensions,
+			T dimension,
+			String dimensionName,
+			List<AlignmentDescription<A>> alignments) {
+		super(parentShell, Activator.getDefault());
+		setShellStyle(SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
+		m_layout = layout;
+		m_dimensions = dimensions;
+		m_horizontal = dimension instanceof ColumnInfo;
+		m_dimensionName = dimensionName;
+		m_alignments = alignments;
+		setEditDimension(dimension);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI fields
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Text m_indexText;
-  private Button m_prevButton;
-  private Button m_nextButton;
-  // alignment
-  private List<Button> m_alignmentButtons;
-  // size
-  private CSpinner m_sizeSpinner;
-  // grow
-  private Button m_noGrowButton;
-  private Button m_growButton;
-  private CSpinner m_growSpinner;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI fields
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Text m_indexText;
+	private Button m_prevButton;
+	private Button m_nextButton;
+	// alignment
+	private List<Button> m_alignmentButtons;
+	// size
+	private CSpinner m_sizeSpinner;
+	// grow
+	private Button m_noGrowButton;
+	private Button m_growButton;
+	private CSpinner m_growSpinner;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Control createDialogArea(Composite parent) {
-    Composite container = (Composite) super.createDialogArea(parent);
-    createHeaderComposite(container);
-    createAlignmentComposite(container);
-    createSizeComposite(container);
-    createWeightComposite(container);
-    //
-    showDimension();
-    return container;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Control createDialogArea(Composite parent) {
+		Composite container = (Composite) super.createDialogArea(parent);
+		createHeaderComposite(container);
+		createAlignmentComposite(container);
+		createSizeComposite(container);
+		createWeightComposite(container);
+		//
+		showDimension();
+		return container;
+	}
 
-  @Override
-  protected void configureShell(Shell newShell) {
-    super.configureShell(newShell);
-    newShell.setText(MessageFormat.format(ModelMessages.DimensionEditDialog_title, m_dimensionName));
-  }
+	@Override
+	protected void configureShell(Shell newShell) {
+		super.configureShell(newShell);
+		newShell.setText(MessageFormat.format(ModelMessages.DimensionEditDialog_title, m_dimensionName));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Buttons
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final int APPLY_ID = IDialogConstants.CLIENT_ID + 1;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Buttons
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final int APPLY_ID = IDialogConstants.CLIENT_ID + 1;
 
-  @Override
-  protected void createButtonsForButtonBar(Composite parent) {
-    super.createButtonsForButtonBar(parent);
-    if (m_layout != null) {
-      createButton(parent, APPLY_ID, ModelMessages.DimensionEditDialog_applyButton, false);
-    }
-  }
+	@Override
+	protected void createButtonsForButtonBar(Composite parent) {
+		super.createButtonsForButtonBar(parent);
+		if (m_layout != null) {
+			createButton(parent, APPLY_ID, ModelMessages.DimensionEditDialog_applyButton, false);
+		}
+	}
 
-  @Override
-  protected void buttonPressed(int buttonId) {
-    try {
-      if (buttonId == IDialogConstants.OK_ID || buttonId == APPLY_ID) {
-        applyChanges();
-      }
-    } catch (Throwable e) {
-      DesignerPlugin.log(e);
-    }
-    super.buttonPressed(buttonId);
-  }
+	@Override
+	protected void buttonPressed(int buttonId) {
+		try {
+			if (buttonId == IDialogConstants.OK_ID || buttonId == APPLY_ID) {
+				applyChanges();
+			}
+		} catch (Throwable e) {
+			DesignerPlugin.log(e);
+		}
+		super.buttonPressed(buttonId);
+	}
 
-  /**
-   * Saves current {@link DimensionInfo} changes into source and refreshes GUI.
-   */
-  private void applyChanges() throws Exception {
-    ExecutionUtils.run(m_layout, new RunnableEx() {
-      public void run() throws Exception {
-        setAlignment(m_dimension, m_currentAlignment);
-        m_dimension.setSize(m_currentSize);
-        m_dimension.setWeight(m_currentWeight);
-      }
-    });
-  }
+	/**
+	 * Saves current {@link DimensionInfo} changes into source and refreshes GUI.
+	 */
+	private void applyChanges() throws Exception {
+		ExecutionUtils.run(m_layout, new RunnableEx() {
+			public void run() throws Exception {
+				setAlignment(m_dimension, m_currentAlignment);
+				m_dimension.setSize(m_currentSize);
+				m_dimension.setWeight(m_currentWeight);
+			}
+		});
+	}
 
-  /**
-   * Sets the {@link DimensionInfo} to edit.
-   */
-  private void setEditDimension(final T dimension) {
-    ExecutionUtils.runLog(new RunnableEx() {
-      public void run() throws Exception {
-        // apply changes
-        if (m_dimension != null) {
-          applyChanges();
-        }
-        // remember new dimension
-        m_dimension = dimension;
-        m_currentIndex = m_dimensions.indexOf(m_dimension);
-        m_currentAlignment = getAlignment(m_dimension);
-        m_currentSize = m_dimension.getSize();
-        m_currentWeight = m_dimension.getWeight();
-      }
-    });
-  }
+	/**
+	 * Sets the {@link DimensionInfo} to edit.
+	 */
+	private void setEditDimension(final T dimension) {
+		ExecutionUtils.runLog(new RunnableEx() {
+			public void run() throws Exception {
+				// apply changes
+				if (m_dimension != null) {
+					applyChanges();
+				}
+				// remember new dimension
+				m_dimension = dimension;
+				m_currentIndex = m_dimensions.indexOf(m_dimension);
+				m_currentAlignment = getAlignment(m_dimension);
+				m_currentSize = m_dimension.getSize();
+				m_currentWeight = m_dimension.getWeight();
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Internal access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the alignment of {@link DimensionInfo}.
-   */
-  protected abstract A getAlignment(T dimension);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Internal access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the alignment of {@link DimensionInfo}.
+	 */
+	protected abstract A getAlignment(T dimension);
 
-  /**
-   * Sets alignment of {@link DimensionInfo}.
-   */
-  protected abstract void setAlignment(T dimension, A alignment) throws Exception;
+	/**
+	 * Sets alignment of {@link DimensionInfo}.
+	 */
+	protected abstract void setAlignment(T dimension, A alignment) throws Exception;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Composites
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Create the header displaying {@link Composite}.
-   */
-  private void createHeaderComposite(Composite parent) {
-    Composite composite = new Composite(parent, SWT.NONE);
-    GridDataFactory.create(composite).grabH().fill();
-    GridLayoutFactory.create(composite).noMargins().columns(4);
-    // index
-    {
-      new Label(composite, SWT.NONE).setText(m_dimensionName + ":");
-      // index
-      {
-        m_indexText = new Text(composite, SWT.BORDER | SWT.READ_ONLY);
-        GridDataFactory.create(m_indexText).grabH().fillH().indentHC(3);
-      }
-      // prev button
-      {
-        m_prevButton = new Button(composite, SWT.NONE);
-        m_prevButton.setToolTipText(MessageFormat.format(
-            ModelMessages.DimensionEditDialog_previousButton,
-            m_dimensionName));
-        m_prevButton.setImage(m_horizontal
-            ? AbstractGridBagLayoutInfo.getImage("navigation/left.gif")
-            : AbstractGridBagLayoutInfo.getImage("navigation/up.gif"));
-        m_prevButton.addListener(SWT.Selection, new Listener() {
-          public void handleEvent(Event event) {
-            setEditDimension(m_dimensions.get(m_currentIndex - 1));
-            showDimension();
-          }
-        });
-      }
-      // next button
-      {
-        m_nextButton = new Button(composite, SWT.NONE);
-        m_nextButton.setToolTipText(MessageFormat.format(
-            ModelMessages.DimensionEditDialog_nextButton,
-            m_dimensionName));
-        m_nextButton.setImage(m_horizontal
-            ? AbstractGridBagLayoutInfo.getImage("navigation/right.gif")
-            : AbstractGridBagLayoutInfo.getImage("navigation/down.gif"));
-        m_nextButton.addListener(SWT.Selection, new Listener() {
-          public void handleEvent(Event event) {
-            setEditDimension(m_dimensions.get(m_currentIndex + 1));
-            showDimension();
-          }
-        });
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Composites
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Create the header displaying {@link Composite}.
+	 */
+	private void createHeaderComposite(Composite parent) {
+		Composite composite = new Composite(parent, SWT.NONE);
+		GridDataFactory.create(composite).grabH().fill();
+		GridLayoutFactory.create(composite).noMargins().columns(4);
+		// index
+		{
+			new Label(composite, SWT.NONE).setText(m_dimensionName + ":");
+			// index
+			{
+				m_indexText = new Text(composite, SWT.BORDER | SWT.READ_ONLY);
+				GridDataFactory.create(m_indexText).grabH().fillH().indentHC(3);
+			}
+			// prev button
+			{
+				m_prevButton = new Button(composite, SWT.NONE);
+				m_prevButton.setToolTipText(MessageFormat.format(
+						ModelMessages.DimensionEditDialog_previousButton,
+						m_dimensionName));
+				m_prevButton.setImage(m_horizontal
+						? AbstractGridBagLayoutInfo.getImage("navigation/left.gif")
+								: AbstractGridBagLayoutInfo.getImage("navigation/up.gif"));
+				m_prevButton.addListener(SWT.Selection, new Listener() {
+					public void handleEvent(Event event) {
+						setEditDimension(m_dimensions.get(m_currentIndex - 1));
+						showDimension();
+					}
+				});
+			}
+			// next button
+			{
+				m_nextButton = new Button(composite, SWT.NONE);
+				m_nextButton.setToolTipText(MessageFormat.format(
+						ModelMessages.DimensionEditDialog_nextButton,
+						m_dimensionName));
+				m_nextButton.setImage(m_horizontal
+						? AbstractGridBagLayoutInfo.getImage("navigation/right.gif")
+								: AbstractGridBagLayoutInfo.getImage("navigation/down.gif"));
+				m_nextButton.addListener(SWT.Selection, new Listener() {
+					public void handleEvent(Event event) {
+						setEditDimension(m_dimensions.get(m_currentIndex + 1));
+						showDimension();
+					}
+				});
+			}
+		}
+	}
 
-  /**
-   * Creates the alignment editing {@link Composite}.
-   */
-  private void createAlignmentComposite(Composite parent) {
-    createSeparator(parent, ModelMessages.DimensionEditDialog_defaultAlignment);
-    Composite composite = new Composite(parent, SWT.NONE);
-    GridDataFactory.create(composite).grabH().fill().indentHC(2).hintHC(50);
-    GridLayoutFactory.create(composite).noMargins().columns(1);
-    //composite.setLayout(new RowLayout());
-    //
-    m_alignmentButtons = Lists.newArrayList();
-    for (final AlignmentDescription<A> description : m_alignments) {
-      // create radio button
-      Button button = new Button(composite, SWT.RADIO);
-      GridDataFactory.create(button).grabH().fillH();
-      button.setText(description.getTitle());
-      // add listener
-      m_alignmentButtons.add(button);
-      button.addListener(SWT.Selection, new Listener() {
-        public void handleEvent(Event event) {
-          m_currentAlignment = description.getAlignment();
-        }
-      });
-    }
-  }
+	/**
+	 * Creates the alignment editing {@link Composite}.
+	 */
+	private void createAlignmentComposite(Composite parent) {
+		createSeparator(parent, ModelMessages.DimensionEditDialog_defaultAlignment);
+		Composite composite = new Composite(parent, SWT.NONE);
+		GridDataFactory.create(composite).grabH().fill().indentHC(2).hintHC(50);
+		GridLayoutFactory.create(composite).noMargins().columns(1);
+		//composite.setLayout(new RowLayout());
+		//
+		m_alignmentButtons = Lists.newArrayList();
+		for (final AlignmentDescription<A> description : m_alignments) {
+			// create radio button
+			Button button = new Button(composite, SWT.RADIO);
+			GridDataFactory.create(button).grabH().fillH();
+			button.setText(description.getTitle());
+			// add listener
+			m_alignmentButtons.add(button);
+			button.addListener(SWT.Selection, new Listener() {
+				public void handleEvent(Event event) {
+					m_currentAlignment = description.getAlignment();
+				}
+			});
+		}
+	}
 
-  /**
-   * Creates the size editing {@link Composite}.
-   */
-  private void createSizeComposite(Composite parent) {
-    createSeparator(parent, ModelMessages.DimensionEditDialog_size);
-    Composite composite = new Composite(parent, SWT.NONE);
-    GridDataFactory.create(composite).grabH().fill().indentHC(2);
-    GridLayoutFactory.create(composite).noMargins().columns(2);
-    // minimum
-    {
-      {
-        Label label = new Label(composite, SWT.NONE);
-        GridDataFactory.create(label).hintHC(10);
-        label.setText(ModelMessages.DimensionEditDialog_minimum);
-      }
-      {
-        m_sizeSpinner = new CSpinner(composite, SWT.BORDER);
-        GridDataFactory.create(m_sizeSpinner).hintHC(15);
-        m_sizeSpinner.setMinimum(0);
-        m_sizeSpinner.setMaximum(Integer.MAX_VALUE);
-        m_sizeSpinner.addListener(SWT.Selection, new Listener() {
-          public void handleEvent(Event event) {
-            m_currentSize = m_sizeSpinner.getSelection();
-          }
-        });
-      }
-    }
-  }
+	/**
+	 * Creates the size editing {@link Composite}.
+	 */
+	private void createSizeComposite(Composite parent) {
+		createSeparator(parent, ModelMessages.DimensionEditDialog_size);
+		Composite composite = new Composite(parent, SWT.NONE);
+		GridDataFactory.create(composite).grabH().fill().indentHC(2);
+		GridLayoutFactory.create(composite).noMargins().columns(2);
+		// minimum
+		{
+			{
+				Label label = new Label(composite, SWT.NONE);
+				GridDataFactory.create(label).hintHC(10);
+				label.setText(ModelMessages.DimensionEditDialog_minimum);
+			}
+			{
+				m_sizeSpinner = new CSpinner(composite, SWT.BORDER);
+				GridDataFactory.create(m_sizeSpinner).hintHC(15);
+				m_sizeSpinner.setMinimum(0);
+				m_sizeSpinner.setMaximum(Integer.MAX_VALUE);
+				m_sizeSpinner.addListener(SWT.Selection, new Listener() {
+					public void handleEvent(Event event) {
+						m_currentSize = m_sizeSpinner.getSelection();
+					}
+				});
+			}
+		}
+	}
 
-  /**
-   * Creates the weight editing {@link Composite}.
-   */
-  private void createWeightComposite(Composite parent) {
-    createSeparator(parent, ModelMessages.DimensionEditDialog_resizeBehavior);
-    Composite composite = new Composite(parent, SWT.NONE);
-    GridDataFactory.create(composite).grabH().fill().indentHC(2);
-    GridLayoutFactory.create(composite).noMargins().columns(2);
-    // none
-    {
-      m_noGrowButton = new Button(composite, SWT.RADIO);
-      GridDataFactory.create(m_noGrowButton).spanH(2);
-      m_noGrowButton.setText("&none");
-      m_noGrowButton.addListener(SWT.Selection, new Listener() {
-        public void handleEvent(Event event) {
-          m_currentWeight = 0.0;
-          showDimension();
-        }
-      });
-    }
-    // grow
-    {
-      m_growButton = new Button(composite, SWT.RADIO);
-      GridDataFactory.create(m_growButton).hintHC(10);
-      m_growButton.setText("&grow");
-      m_growButton.addListener(SWT.Selection, new Listener() {
-        public void handleEvent(Event event) {
-          m_currentWeight = 1.0;
-          showDimension();
-        }
-      });
-      //
-      m_growSpinner = new CSpinner(composite, SWT.BORDER);
-      GridDataFactory.create(m_growSpinner).hintHC(15);
-      m_growSpinner.addListener(SWT.Selection, new Listener() {
-        public void handleEvent(Event event) {
-          m_currentWeight = m_growSpinner.getSelection();
-          showDimension();
-        }
-      });
-    }
-  }
+	/**
+	 * Creates the weight editing {@link Composite}.
+	 */
+	private void createWeightComposite(Composite parent) {
+		createSeparator(parent, ModelMessages.DimensionEditDialog_resizeBehavior);
+		Composite composite = new Composite(parent, SWT.NONE);
+		GridDataFactory.create(composite).grabH().fill().indentHC(2);
+		GridLayoutFactory.create(composite).noMargins().columns(2);
+		// none
+		{
+			m_noGrowButton = new Button(composite, SWT.RADIO);
+			GridDataFactory.create(m_noGrowButton).spanH(2);
+			m_noGrowButton.setText("&none");
+			m_noGrowButton.addListener(SWT.Selection, new Listener() {
+				public void handleEvent(Event event) {
+					m_currentWeight = 0.0;
+					showDimension();
+				}
+			});
+		}
+		// grow
+		{
+			m_growButton = new Button(composite, SWT.RADIO);
+			GridDataFactory.create(m_growButton).hintHC(10);
+			m_growButton.setText("&grow");
+			m_growButton.addListener(SWT.Selection, new Listener() {
+				public void handleEvent(Event event) {
+					m_currentWeight = 1.0;
+					showDimension();
+				}
+			});
+			//
+			m_growSpinner = new CSpinner(composite, SWT.BORDER);
+			GridDataFactory.create(m_growSpinner).hintHC(15);
+			m_growSpinner.addListener(SWT.Selection, new Listener() {
+				public void handleEvent(Event event) {
+					m_currentWeight = m_growSpinner.getSelection();
+					showDimension();
+				}
+			});
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Shows the {@link DimensionInfo} in UI controls.
-   */
-  private void showDimension() {
-    // header
-    {
-      m_indexText.setText("" + (1 + m_currentIndex));
-      m_prevButton.setEnabled(m_currentIndex != 0);
-      m_nextButton.setEnabled(m_currentIndex < m_dimensions.size() - 1);
-    }
-    // alignment
-    for (int i = 0; i < m_alignments.size(); i++) {
-      AlignmentDescription<A> description = m_alignments.get(i);
-      Button button = m_alignmentButtons.get(i);
-      button.setSelection(m_currentAlignment == description.getAlignment());
-    }
-    // size
-    m_sizeSpinner.setSelection(m_currentSize);
-    // grow
-    if (m_currentWeight != 0.0) {
-      m_noGrowButton.setSelection(false);
-      m_growButton.setSelection(true);
-      //
-      m_growSpinner.setEnabled(true);
-      int weight = Math.max((int) m_currentWeight, 1);
-      if (m_growSpinner.getSelection() != weight) {
-        m_growSpinner.setSelection(weight);
-      }
-    } else {
-      m_noGrowButton.setSelection(true);
-      m_growButton.setSelection(false);
-      //
-      m_growSpinner.setEnabled(false);
-      m_growSpinner.setSelection(0);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Shows the {@link DimensionInfo} in UI controls.
+	 */
+	private void showDimension() {
+		// header
+		{
+			m_indexText.setText("" + (1 + m_currentIndex));
+			m_prevButton.setEnabled(m_currentIndex != 0);
+			m_nextButton.setEnabled(m_currentIndex < m_dimensions.size() - 1);
+		}
+		// alignment
+		for (int i = 0; i < m_alignments.size(); i++) {
+			AlignmentDescription<A> description = m_alignments.get(i);
+			Button button = m_alignmentButtons.get(i);
+			button.setSelection(m_currentAlignment == description.getAlignment());
+		}
+		// size
+		m_sizeSpinner.setSelection(m_currentSize);
+		// grow
+		if (m_currentWeight != 0.0) {
+			m_noGrowButton.setSelection(false);
+			m_growButton.setSelection(true);
+			//
+			m_growSpinner.setEnabled(true);
+			int weight = Math.max((int) m_currentWeight, 1);
+			if (m_growSpinner.getSelection() != weight) {
+				m_growSpinner.setSelection(weight);
+			}
+		} else {
+			m_noGrowButton.setSelection(true);
+			m_growButton.setSelection(false);
+			//
+			m_growSpinner.setEnabled(false);
+			m_growSpinner.setSelection(0);
+		}
+	}
 
-  /**
-   * Creates separator with given text.
-   */
-  private static void createSeparator(Composite parent, String text) {
-    Separator separator = new Separator(parent, SWT.NONE);
-    GridDataFactory.create(separator).grabH().fillH();
-    separator.setText(text);
-    separator.setForeground(separator.getDisplay().getSystemColor(SWT.COLOR_LIST_SELECTION));
-  }
+	/**
+	 * Creates separator with given text.
+	 */
+	private static void createSeparator(Composite parent, String text) {
+		Separator separator = new Separator(parent, SWT.NONE);
+		GridDataFactory.create(separator).grabH().fillH();
+		separator.setText(text);
+		separator.setForeground(separator.getDisplay().getSystemColor(SWT.COLOR_LIST_SELECTION));
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/ui/RowEditDialog.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/ui/RowEditDialog.java
index dd77381b0..be6506aee 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/ui/RowEditDialog.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/gbl/ui/RowEditDialog.java
@@ -27,46 +27,46 @@
  * @coverage swing.model.layout.ui
  */
 public final class RowEditDialog extends DimensionEditDialog<RowInfo, RowInfo.Alignment> {
-  private static final List<AlignmentDescription<RowInfo.Alignment>> ALIGNMENTS =
-      Lists.newArrayList();
-  static {
-    ALIGNMENTS.add(new AlignmentDescription<RowInfo.Alignment>(RowInfo.Alignment.TOP,
-        ModelMessages.RowEditDialog_aTop));
-    ALIGNMENTS.add(new AlignmentDescription<RowInfo.Alignment>(RowInfo.Alignment.CENTER,
-        ModelMessages.RowEditDialog_aCenter));
-    ALIGNMENTS.add(new AlignmentDescription<RowInfo.Alignment>(RowInfo.Alignment.BOTTOM,
-        ModelMessages.RowEditDialog_aBottom));
-    ALIGNMENTS.add(new AlignmentDescription<RowInfo.Alignment>(RowInfo.Alignment.FILL,
-        ModelMessages.RowEditDialog_aFill));
-    ALIGNMENTS.add(new AlignmentDescription<RowInfo.Alignment>(RowInfo.Alignment.BASELINE,
-        ModelMessages.RowEditDialog_aBaseline));
-    ALIGNMENTS.add(new AlignmentDescription<RowInfo.Alignment>(RowInfo.Alignment.BASELINE_ABOVE,
-        ModelMessages.RowEditDialog_aAboveBaseline));
-    ALIGNMENTS.add(new AlignmentDescription<RowInfo.Alignment>(RowInfo.Alignment.BASELINE_BELOW,
-        ModelMessages.RowEditDialog_aBelowBaseline));
-  }
+	private static final List<AlignmentDescription<RowInfo.Alignment>> ALIGNMENTS =
+			Lists.newArrayList();
+	static {
+		ALIGNMENTS.add(new AlignmentDescription<RowInfo.Alignment>(RowInfo.Alignment.TOP,
+				ModelMessages.RowEditDialog_aTop));
+		ALIGNMENTS.add(new AlignmentDescription<RowInfo.Alignment>(RowInfo.Alignment.CENTER,
+				ModelMessages.RowEditDialog_aCenter));
+		ALIGNMENTS.add(new AlignmentDescription<RowInfo.Alignment>(RowInfo.Alignment.BOTTOM,
+				ModelMessages.RowEditDialog_aBottom));
+		ALIGNMENTS.add(new AlignmentDescription<RowInfo.Alignment>(RowInfo.Alignment.FILL,
+				ModelMessages.RowEditDialog_aFill));
+		ALIGNMENTS.add(new AlignmentDescription<RowInfo.Alignment>(RowInfo.Alignment.BASELINE,
+				ModelMessages.RowEditDialog_aBaseline));
+		ALIGNMENTS.add(new AlignmentDescription<RowInfo.Alignment>(RowInfo.Alignment.BASELINE_ABOVE,
+				ModelMessages.RowEditDialog_aAboveBaseline));
+		ALIGNMENTS.add(new AlignmentDescription<RowInfo.Alignment>(RowInfo.Alignment.BASELINE_BELOW,
+				ModelMessages.RowEditDialog_aBelowBaseline));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public RowEditDialog(Shell parentShell, AbstractGridBagLayoutInfo layout, RowInfo row) {
-    super(parentShell, layout, layout.getRows(), row, ModelMessages.RowEditDialog_title, ALIGNMENTS);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public RowEditDialog(Shell parentShell, AbstractGridBagLayoutInfo layout, RowInfo row) {
+		super(parentShell, layout, layout.getRows(), row, ModelMessages.RowEditDialog_title, ALIGNMENTS);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Internal access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected RowInfo.Alignment getAlignment(RowInfo dimension) {
-    return dimension.getAlignment();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Internal access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected RowInfo.Alignment getAlignment(RowInfo dimension) {
+		return dimension.getAlignment();
+	}
 
-  @Override
-  protected void setAlignment(RowInfo dimension, RowInfo.Alignment alignment) throws Exception {
-    dimension.setAlignment(alignment);
-  }
+	@Override
+	protected void setAlignment(RowInfo dimension, RowInfo.Alignment alignment) throws Exception {
+		dimension.setAlignment(alignment);
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/spring/SpringAttachmentInfo.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/spring/SpringAttachmentInfo.java
index fb644e219..f2d3b48d2 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/spring/SpringAttachmentInfo.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/spring/SpringAttachmentInfo.java
@@ -52,574 +52,574 @@
  * @coverage swing.model.layout
  */
 public final class SpringAttachmentInfo {
-  private static final String PUT_CONSTRAINT =
-      "putConstraint(java.lang.String,java.awt.Component,int,java.lang.String,java.awt.Component)";
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link SpringAttachmentInfo} for side of component.
-   *
-   * @param side
-   *          one of the {@link IPositionConstants#LEFT}, {@link IPositionConstants#TOP},
-   *          {@link IPositionConstants#RIGHT}, {@link IPositionConstants#BOTTOM}.
-   */
-  public static SpringAttachmentInfo get(SpringLayoutInfo layout, ComponentInfo component, int side) {
-    String key = getAttachmentKey(side);
-    SpringAttachmentInfo attachment = (SpringAttachmentInfo) component.getArbitraryValue(key);
-    if (attachment == null) {
-      attachment = new SpringAttachmentInfo(layout, component, side);
-      component.putArbitraryValue(key, attachment);
-    }
-    return attachment;
-  }
-
-  private static String getAttachmentKey(int side) {
-    return "SpringLayout_" + side;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance fields
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final SpringLayoutInfo m_layout;
-  private final AstEditor m_editor;
-  private final ComponentInfo m_component;
-  private final int m_side;
-  private final String m_springSide;
-  private MethodInvocation m_invocation;
-  private int m_offset;
-  private ComponentInfo m_anchorComponent;
-  private int m_anchorSide;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private SpringAttachmentInfo(SpringLayoutInfo layout, ComponentInfo component, int side) {
-    m_layout = layout;
-    m_editor = layout.getEditor();
-    m_component = component;
-    m_side = side;
-    m_springSide = getSpringSide(side);
-    setInitialState();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Initialization
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void setInitialState() {
-    m_invocation = getInvocation();
-    if (m_invocation != null) {
-      List<Expression> arguments = DomGenerics.arguments(m_invocation);
-      Expression anchorExpression = arguments.get(4);
-      Expression anchorSideExpression = arguments.get(3);
-      Expression offsetExpression = arguments.get(2);
-      m_anchorComponent =
-          (ComponentInfo) m_layout.getContainer().getChildRepresentedBy(anchorExpression);
-      {
-        String springSide = (String) JavaInfoEvaluationHelper.getValue(anchorSideExpression);
-        m_anchorSide = getFrameworkSide(springSide);
-      }
-      m_offset = (Integer) JavaInfoEvaluationHelper.getValue(offsetExpression);
-    }
-  }
-
-  private void materialize() {
-    if (m_invocation == null) {
-      m_offset = 0;
-      m_anchorComponent = m_layout.getContainer();
-      m_anchorSide = m_side;
-    }
-  }
-
-  private MethodInvocation getInvocation() {
-    List<MethodInvocation> invocations = m_layout.getMethodInvocations(PUT_CONSTRAINT);
-    for (MethodInvocation invocation : invocations) {
-      List<Expression> arguments = DomGenerics.arguments(invocation);
-      Expression componentArgument = arguments.get(1);
-      Expression sideArgument = arguments.get(0);
-      if (m_component.isRepresentedBy(componentArgument)
-          && m_springSide.equals(JavaInfoEvaluationHelper.getValue(sideArgument))) {
-        return invocation;
-      }
-    }
-    return null;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Converts {@link IPositionConstants} side into {@link SpringLayout} side.
-   */
-  public static String getSpringSide(int side) {
-    switch (side) {
-      case IPositionConstants.LEFT :
-        return SpringLayout.WEST;
-      case IPositionConstants.TOP :
-        return SpringLayout.NORTH;
-      case IPositionConstants.RIGHT :
-        return SpringLayout.EAST;
-      case IPositionConstants.BOTTOM :
-        return SpringLayout.SOUTH;
-    }
-    throw new IllegalArgumentException(MessageFormat.format("Invalid side: {0}", side));
-  }
-
-  /**
-   * Converts {@link IPositionConstants} side into source for {@link SpringLayout} side.
-   */
-  public static String getSpringSideSource(int side) {
-    String springSideName;
-    switch (side) {
-      case IPositionConstants.LEFT :
-        springSideName = "WEST";
-        break;
-      case IPositionConstants.TOP :
-        springSideName = "NORTH";
-        break;
-      case IPositionConstants.RIGHT :
-        springSideName = "EAST";
-        break;
-      case IPositionConstants.BOTTOM :
-        springSideName = "SOUTH";
-        break;
-      default :
-        throw new IllegalArgumentException(MessageFormat.format("Invalid side: {0}", side));
-    }
-    return "javax.swing.SpringLayout." + springSideName;
-  }
-
-  /**
-   * @param side
-   *          the side from {@link SpringLayout}.
-   *
-   * @return the absolute framework side one of the {@link IPositionConstants#LEFT},
-   *         {@link IPositionConstants#TOP}, {@link IPositionConstants#RIGHT},
-   *         {@link IPositionConstants#BOTTOM}.
-   */
-  public static int getFrameworkSide(String side) {
-    if (SpringLayout.WEST.equals(side)) {
-      return IPositionConstants.LEFT;
-    }
-    if (SpringLayout.NORTH.equals(side)) {
-      return IPositionConstants.TOP;
-    }
-    if (SpringLayout.EAST.equals(side)) {
-      return IPositionConstants.RIGHT;
-    }
-    if (SpringLayout.SOUTH.equals(side)) {
-      return IPositionConstants.BOTTOM;
-    }
-    throw new IllegalArgumentException(MessageFormat.format("Invalid side: {0}", side));
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the side of this attachment.
-   */
-  public int getSide() {
-    return m_side;
-  }
-
-  /**
-   * @return <code>true</code> if this attachment is not represented in source.
-   */
-  public boolean isVirtual() {
-    return m_invocation == null;
-  }
-
-  public ComponentInfo getAnchorComponent() {
-    return m_anchorComponent;
-  }
-
-  public void setAnchorComponent(ComponentInfo anchorComponent) {
-    m_anchorComponent = anchorComponent;
-  }
-
-  public int getAnchorSide() {
-    return m_anchorSide;
-  }
-
-  public void setAnchorSide(int anchorSide) {
-    m_anchorSide = anchorSide;
-  }
-
-  /**
-   * @return the offset from anchor.
-   */
-  public int getOffset() {
-    return m_offset;
-  }
-
-  public void setOffset(int offset) {
-    m_offset = offset;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Write
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Deletes this attachment, so makes it virtual.
-   */
-  public void delete() throws Exception {
-    if (m_invocation != null) {
-      m_editor.removeEnclosingStatement(m_invocation);
-      m_invocation = null;
-      m_anchorComponent = null;
-    }
-  }
-
-  /**
-   * Writes changes from fields to AST/source.
-   */
-  public void write() throws Exception {
-    NodeTarget target = getRequiredNodeTarget();
-    String componentSource = m_component.getVariableSupport().getReferenceExpression(target);
-    // ensure putConstraint()
-    if (m_invocation == null) {
-      String arguments =
-          StringUtils.join(new String[]{
-              getSpringSideSource(m_side),
-              componentSource,
-              "0",
-              "(java.lang.String) null",
-              "null"}, ", ");
-      StatementTarget statementTarget = target.getStatementTarget();
-      m_invocation = m_layout.addMethodInvocation(statementTarget, PUT_CONSTRAINT, arguments);
-      m_component.addRelatedNodes(m_invocation);
-    }
-    // move putConstraint() to target
-    {
-      Statement invocationStatement = AstNodeUtils.getEnclosingStatement(m_invocation);
-      StatementTarget statementTarget = target.getStatementTarget();
-      m_editor.moveStatement(invocationStatement, statementTarget);
-    }
-    // update putConstraint()
-    {
-      String offsetSource = IntegerConverter.INSTANCE.toJavaSource(m_layout, m_offset);
-      String anchorSideSource = getSpringSideSource(m_anchorSide);
-      String anchorComponentSource =
-          m_anchorComponent.getVariableSupport().getReferenceExpression(target);
-      // replace arguments
-      List<Expression> arguments = DomGenerics.arguments(m_invocation);
-      m_editor.replaceExpression(arguments.get(1), componentSource);
-      m_editor.replaceExpression(arguments.get(2), offsetSource);
-      m_editor.replaceExpression(arguments.get(3), anchorSideSource);
-      m_editor.replaceExpression(arguments.get(4), anchorComponentSource);
-      // add related node
-      m_component.addRelatedNodes(m_invocation);
-      m_anchorComponent.addRelatedNodes(m_invocation);
-    }
-  }
-
-  /**
-   * Does refreshing after attachment's write().
-   */
-  private void writeAndRefresh() throws Exception {
-    write();
-    ExecutionUtils.refresh(m_component);
-  }
-
-  /**
-   * Component or its anchor was moved (in same parent), so this attachment should be updated.
-   */
-  public void adjustAfterComponentMove() throws Exception {
-    write();
-  }
-
-  /**
-   * @return the {@link StatementTarget} based {@link NodeTarget} such that layout, component and
-   *         anchor can be referenced at it.
-   */
-  private NodeTarget getRequiredNodeTarget() throws Exception {
-    StatementTarget statementTarget =
-        JavaInfoUtils.getStatementTarget_whenAllCreated(ImmutableList.of(
-            m_layout,
-            m_component,
-            m_anchorComponent));
-    statementTarget = updateTargetToSortAttachments(statementTarget);
-    return new NodeTarget(statementTarget);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Side ordering utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final int[] sides = {
-      IPositionConstants.TOP,
-      IPositionConstants.LEFT,
-      IPositionConstants.BOTTOM,
-      IPositionConstants.RIGHT};
-
-  private StatementTarget updateTargetToSortAttachments(StatementTarget target) {
-    Statement statement = target.getStatement();
-    if (target.isAfter() && statement != null) {
-      while (true) {
-        Statement nextStatement = getNextStatement_ifBeforeSide(statement);
-        if (nextStatement != statement) {
-          statement = nextStatement;
-        } else {
-          break;
-        }
-      }
-    }
-    target = new StatementTarget(statement, false);
-    return target;
-  }
-
-  private Statement getNextStatement_ifBeforeSide(Statement statement) {
-    Statement nextStatement = AstNodeUtils.getNextStatement(statement);
-    SpringAttachmentInfo attachment = getCorrespondingSide(nextStatement);
-    if (attachment != null) {
-      if (isBeforeSide(attachment.m_side, m_side)) {
-        statement = nextStatement;
-      }
-    }
-    return statement;
-  }
-
-  private SpringAttachmentInfo getCorrespondingSide(Statement statement) {
-    for (int i = 0; i < sides.length; i++) {
-      int side = sides[i];
-      SpringAttachmentInfo attachment = m_layout.getAttachment(m_component, side);
-      MethodInvocation invocation = attachment.m_invocation;
-      if (invocation != null) {
-        if (AstNodeUtils.getEnclosingStatement(invocation) == statement) {
-          return attachment;
-        }
-      }
-    }
-    return null;
-  }
-
-  private static boolean isBeforeSide(int side, int nextSide) {
-    return getSideOrder(side) - getSideOrder(nextSide) < 0;
-  }
-
-  private static int getSideOrder(int side) {
-    for (int i = 0; i < sides.length; i++) {
-      if (sides[i] == side) {
-        return 1 + i;
-      }
-    }
-    return 0;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Properties
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected Property[] getProperties() throws Exception {
-    // offset
-    Property offsetProperty = new Property(IntegerPropertyEditor.INSTANCE) {
-      @Override
-      public String getTitle() {
-        return "offset";
-      }
-
-      @Override
-      public boolean isModified() throws Exception {
-        return !isVirtual();
-      }
-
-      @Override
-      public Object getValue() throws Exception {
-        if (isVirtual()) {
-          return null;
-        }
-        return getOffset();
-      }
-
-      @Override
-      public void setValue(Object value) throws Exception {
-        if (value instanceof Integer) {
-          materialize();
-          setOffset((Integer) value);
-          writeAndRefresh();
-        }
-      }
-    };
-    // anchor component
-    Property anchorProperty = new Property(new ComponentEditor()) {
-      @Override
-      public String getTitle() {
-        return "anchor";
-      }
-
-      @Override
-      public boolean isModified() throws Exception {
-        return !isVirtual();
-      }
-
-      @Override
-      public Object getValue() throws Exception {
-        if (isVirtual()) {
-          return null;
-        }
-        return getAnchorComponent();
-      }
-
-      @Override
-      public void setValue(Object value) throws Exception {
-        if (value instanceof ComponentInfo) {
-          materialize();
-          setAnchorComponent((ComponentInfo) value);
-          writeAndRefresh();
-        }
-      }
-    };
-    // anchor side
-    Property sideProperty;
-    {
-      StaticFieldPropertyEditor editor = new StaticFieldPropertyEditor();
-      String[] fieldDescriptions =
-          PlacementUtils.isHorizontalSide(getSide())
-              ? new String[]{"EAST", "WEST",}
-              : new String[]{"NORTH", "SOUTH"};
-      editor.configure(SpringLayout.class, fieldDescriptions);
-      sideProperty = new Property(editor) {
-        @Override
-        public String getTitle() {
-          return "side";
-        }
-
-        @Override
-        public boolean isModified() throws Exception {
-          return !isVirtual();
-        }
-
-        @Override
-        public Object getValue() throws Exception {
-          if (isVirtual()) {
-            return null;
-          }
-          return getSpringSide(getAnchorSide());
-        }
-
-        @Override
-        public void setValue(Object value) throws Exception {
-          if (value instanceof String) {
-            materialize();
-            setAnchorSide(getFrameworkSide((String) value));
-            writeAndRefresh();
-          }
-        }
-      };
-    }
-    return new Property[]{offsetProperty, anchorProperty, sideProperty};
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    if (isVirtual()) {
-      return "<none>";
-    } else {
-      return ExecutionUtils.runObjectIgnore(new RunnableObjectEx<String>() {
-        public String runObject() throws Exception {
-          return "("
-              + getOffset()
-              + ", "
-              + CodeUtils.getShortClass(getSpringSideSource(getAnchorSide()))
-              + ", "
-              + getAnchorComponent().getPresentation().getText()
-              + ")";
-        }
-      },
-          "<exception>");
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Inner classes
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * An editor for choosing components in properties.
-   */
-  private final class ComponentEditor extends AbstractComboPropertyEditor {
-    private final List<ComponentInfo> m_components = Lists.newArrayList();
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Presentation
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    protected String getText(Property property) throws Exception {
-      ComponentInfo component = (ComponentInfo) property.getValue();
-      if (component != null) {
-        return getText(component);
-      }
-      return null;
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Combo
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    protected void addItems(Property property, CCombo3 combo) throws Exception {
-      m_components.clear();
-      // parent
-      {
-        ContainerInfo container = m_layout.getContainer();
-        m_components.add(container);
-        combo.add(getText(container));
-      }
-      // siblings
-      List<ComponentInfo> components = m_layout.getComponents();
-      for (ComponentInfo component : components) {
-        if (component != m_component) {
-          m_components.add(component);
-          combo.add(getText(component));
-        }
-      }
-    }
-
-    @Override
-    protected void selectItem(Property property, CCombo3 combo) throws Exception {
-      combo.setText(getText(property));
-    }
-
-    @Override
-    protected void toPropertyEx(Property property, CCombo3 combo, int index) throws Exception {
-      ComponentInfo component = m_components.get(index);
-      property.setValue(component);
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Utils
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    private String getText(ComponentInfo component) throws Exception {
-      return component.getPresentation().getText();
-    }
-  }
+	private static final String PUT_CONSTRAINT =
+			"putConstraint(java.lang.String,java.awt.Component,int,java.lang.String,java.awt.Component)";
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link SpringAttachmentInfo} for side of component.
+	 *
+	 * @param side
+	 *          one of the {@link IPositionConstants#LEFT}, {@link IPositionConstants#TOP},
+	 *          {@link IPositionConstants#RIGHT}, {@link IPositionConstants#BOTTOM}.
+	 */
+	public static SpringAttachmentInfo get(SpringLayoutInfo layout, ComponentInfo component, int side) {
+		String key = getAttachmentKey(side);
+		SpringAttachmentInfo attachment = (SpringAttachmentInfo) component.getArbitraryValue(key);
+		if (attachment == null) {
+			attachment = new SpringAttachmentInfo(layout, component, side);
+			component.putArbitraryValue(key, attachment);
+		}
+		return attachment;
+	}
+
+	private static String getAttachmentKey(int side) {
+		return "SpringLayout_" + side;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance fields
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final SpringLayoutInfo m_layout;
+	private final AstEditor m_editor;
+	private final ComponentInfo m_component;
+	private final int m_side;
+	private final String m_springSide;
+	private MethodInvocation m_invocation;
+	private int m_offset;
+	private ComponentInfo m_anchorComponent;
+	private int m_anchorSide;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private SpringAttachmentInfo(SpringLayoutInfo layout, ComponentInfo component, int side) {
+		m_layout = layout;
+		m_editor = layout.getEditor();
+		m_component = component;
+		m_side = side;
+		m_springSide = getSpringSide(side);
+		setInitialState();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Initialization
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void setInitialState() {
+		m_invocation = getInvocation();
+		if (m_invocation != null) {
+			List<Expression> arguments = DomGenerics.arguments(m_invocation);
+			Expression anchorExpression = arguments.get(4);
+			Expression anchorSideExpression = arguments.get(3);
+			Expression offsetExpression = arguments.get(2);
+			m_anchorComponent =
+					(ComponentInfo) m_layout.getContainer().getChildRepresentedBy(anchorExpression);
+			{
+				String springSide = (String) JavaInfoEvaluationHelper.getValue(anchorSideExpression);
+				m_anchorSide = getFrameworkSide(springSide);
+			}
+			m_offset = (Integer) JavaInfoEvaluationHelper.getValue(offsetExpression);
+		}
+	}
+
+	private void materialize() {
+		if (m_invocation == null) {
+			m_offset = 0;
+			m_anchorComponent = m_layout.getContainer();
+			m_anchorSide = m_side;
+		}
+	}
+
+	private MethodInvocation getInvocation() {
+		List<MethodInvocation> invocations = m_layout.getMethodInvocations(PUT_CONSTRAINT);
+		for (MethodInvocation invocation : invocations) {
+			List<Expression> arguments = DomGenerics.arguments(invocation);
+			Expression componentArgument = arguments.get(1);
+			Expression sideArgument = arguments.get(0);
+			if (m_component.isRepresentedBy(componentArgument)
+					&& m_springSide.equals(JavaInfoEvaluationHelper.getValue(sideArgument))) {
+				return invocation;
+			}
+		}
+		return null;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Converts {@link IPositionConstants} side into {@link SpringLayout} side.
+	 */
+	public static String getSpringSide(int side) {
+		switch (side) {
+		case IPositionConstants.LEFT :
+			return SpringLayout.WEST;
+		case IPositionConstants.TOP :
+			return SpringLayout.NORTH;
+		case IPositionConstants.RIGHT :
+			return SpringLayout.EAST;
+		case IPositionConstants.BOTTOM :
+			return SpringLayout.SOUTH;
+		}
+		throw new IllegalArgumentException(MessageFormat.format("Invalid side: {0}", side));
+	}
+
+	/**
+	 * Converts {@link IPositionConstants} side into source for {@link SpringLayout} side.
+	 */
+	public static String getSpringSideSource(int side) {
+		String springSideName;
+		switch (side) {
+		case IPositionConstants.LEFT :
+			springSideName = "WEST";
+			break;
+		case IPositionConstants.TOP :
+			springSideName = "NORTH";
+			break;
+		case IPositionConstants.RIGHT :
+			springSideName = "EAST";
+			break;
+		case IPositionConstants.BOTTOM :
+			springSideName = "SOUTH";
+			break;
+		default :
+			throw new IllegalArgumentException(MessageFormat.format("Invalid side: {0}", side));
+		}
+		return "javax.swing.SpringLayout." + springSideName;
+	}
+
+	/**
+	 * @param side
+	 *          the side from {@link SpringLayout}.
+	 *
+	 * @return the absolute framework side one of the {@link IPositionConstants#LEFT},
+	 *         {@link IPositionConstants#TOP}, {@link IPositionConstants#RIGHT},
+	 *         {@link IPositionConstants#BOTTOM}.
+	 */
+	public static int getFrameworkSide(String side) {
+		if (SpringLayout.WEST.equals(side)) {
+			return IPositionConstants.LEFT;
+		}
+		if (SpringLayout.NORTH.equals(side)) {
+			return IPositionConstants.TOP;
+		}
+		if (SpringLayout.EAST.equals(side)) {
+			return IPositionConstants.RIGHT;
+		}
+		if (SpringLayout.SOUTH.equals(side)) {
+			return IPositionConstants.BOTTOM;
+		}
+		throw new IllegalArgumentException(MessageFormat.format("Invalid side: {0}", side));
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the side of this attachment.
+	 */
+	public int getSide() {
+		return m_side;
+	}
+
+	/**
+	 * @return <code>true</code> if this attachment is not represented in source.
+	 */
+	public boolean isVirtual() {
+		return m_invocation == null;
+	}
+
+	public ComponentInfo getAnchorComponent() {
+		return m_anchorComponent;
+	}
+
+	public void setAnchorComponent(ComponentInfo anchorComponent) {
+		m_anchorComponent = anchorComponent;
+	}
+
+	public int getAnchorSide() {
+		return m_anchorSide;
+	}
+
+	public void setAnchorSide(int anchorSide) {
+		m_anchorSide = anchorSide;
+	}
+
+	/**
+	 * @return the offset from anchor.
+	 */
+	public int getOffset() {
+		return m_offset;
+	}
+
+	public void setOffset(int offset) {
+		m_offset = offset;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Write
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Deletes this attachment, so makes it virtual.
+	 */
+	public void delete() throws Exception {
+		if (m_invocation != null) {
+			m_editor.removeEnclosingStatement(m_invocation);
+			m_invocation = null;
+			m_anchorComponent = null;
+		}
+	}
+
+	/**
+	 * Writes changes from fields to AST/source.
+	 */
+	public void write() throws Exception {
+		NodeTarget target = getRequiredNodeTarget();
+		String componentSource = m_component.getVariableSupport().getReferenceExpression(target);
+		// ensure putConstraint()
+		if (m_invocation == null) {
+			String arguments =
+					StringUtils.join(new String[]{
+							getSpringSideSource(m_side),
+							componentSource,
+							"0",
+							"(java.lang.String) null",
+					"null"}, ", ");
+			StatementTarget statementTarget = target.getStatementTarget();
+			m_invocation = m_layout.addMethodInvocation(statementTarget, PUT_CONSTRAINT, arguments);
+			m_component.addRelatedNodes(m_invocation);
+		}
+		// move putConstraint() to target
+		{
+			Statement invocationStatement = AstNodeUtils.getEnclosingStatement(m_invocation);
+			StatementTarget statementTarget = target.getStatementTarget();
+			m_editor.moveStatement(invocationStatement, statementTarget);
+		}
+		// update putConstraint()
+		{
+			String offsetSource = IntegerConverter.INSTANCE.toJavaSource(m_layout, m_offset);
+			String anchorSideSource = getSpringSideSource(m_anchorSide);
+			String anchorComponentSource =
+					m_anchorComponent.getVariableSupport().getReferenceExpression(target);
+			// replace arguments
+			List<Expression> arguments = DomGenerics.arguments(m_invocation);
+			m_editor.replaceExpression(arguments.get(1), componentSource);
+			m_editor.replaceExpression(arguments.get(2), offsetSource);
+			m_editor.replaceExpression(arguments.get(3), anchorSideSource);
+			m_editor.replaceExpression(arguments.get(4), anchorComponentSource);
+			// add related node
+			m_component.addRelatedNodes(m_invocation);
+			m_anchorComponent.addRelatedNodes(m_invocation);
+		}
+	}
+
+	/**
+	 * Does refreshing after attachment's write().
+	 */
+	private void writeAndRefresh() throws Exception {
+		write();
+		ExecutionUtils.refresh(m_component);
+	}
+
+	/**
+	 * Component or its anchor was moved (in same parent), so this attachment should be updated.
+	 */
+	public void adjustAfterComponentMove() throws Exception {
+		write();
+	}
+
+	/**
+	 * @return the {@link StatementTarget} based {@link NodeTarget} such that layout, component and
+	 *         anchor can be referenced at it.
+	 */
+	private NodeTarget getRequiredNodeTarget() throws Exception {
+		StatementTarget statementTarget =
+				JavaInfoUtils.getStatementTarget_whenAllCreated(ImmutableList.of(
+						m_layout,
+						m_component,
+						m_anchorComponent));
+		statementTarget = updateTargetToSortAttachments(statementTarget);
+		return new NodeTarget(statementTarget);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Side ordering utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final int[] sides = {
+			IPositionConstants.TOP,
+			IPositionConstants.LEFT,
+			IPositionConstants.BOTTOM,
+			IPositionConstants.RIGHT};
+
+	private StatementTarget updateTargetToSortAttachments(StatementTarget target) {
+		Statement statement = target.getStatement();
+		if (target.isAfter() && statement != null) {
+			while (true) {
+				Statement nextStatement = getNextStatement_ifBeforeSide(statement);
+				if (nextStatement != statement) {
+					statement = nextStatement;
+				} else {
+					break;
+				}
+			}
+		}
+		target = new StatementTarget(statement, false);
+		return target;
+	}
+
+	private Statement getNextStatement_ifBeforeSide(Statement statement) {
+		Statement nextStatement = AstNodeUtils.getNextStatement(statement);
+		SpringAttachmentInfo attachment = getCorrespondingSide(nextStatement);
+		if (attachment != null) {
+			if (isBeforeSide(attachment.m_side, m_side)) {
+				statement = nextStatement;
+			}
+		}
+		return statement;
+	}
+
+	private SpringAttachmentInfo getCorrespondingSide(Statement statement) {
+		for (int i = 0; i < sides.length; i++) {
+			int side = sides[i];
+			SpringAttachmentInfo attachment = m_layout.getAttachment(m_component, side);
+			MethodInvocation invocation = attachment.m_invocation;
+			if (invocation != null) {
+				if (AstNodeUtils.getEnclosingStatement(invocation) == statement) {
+					return attachment;
+				}
+			}
+		}
+		return null;
+	}
+
+	private static boolean isBeforeSide(int side, int nextSide) {
+		return getSideOrder(side) - getSideOrder(nextSide) < 0;
+	}
+
+	private static int getSideOrder(int side) {
+		for (int i = 0; i < sides.length; i++) {
+			if (sides[i] == side) {
+				return 1 + i;
+			}
+		}
+		return 0;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Properties
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected Property[] getProperties() throws Exception {
+		// offset
+		Property offsetProperty = new Property(IntegerPropertyEditor.INSTANCE) {
+			@Override
+			public String getTitle() {
+				return "offset";
+			}
+
+			@Override
+			public boolean isModified() throws Exception {
+				return !isVirtual();
+			}
+
+			@Override
+			public Object getValue() throws Exception {
+				if (isVirtual()) {
+					return null;
+				}
+				return getOffset();
+			}
+
+			@Override
+			public void setValue(Object value) throws Exception {
+				if (value instanceof Integer) {
+					materialize();
+					setOffset((Integer) value);
+					writeAndRefresh();
+				}
+			}
+		};
+		// anchor component
+		Property anchorProperty = new Property(new ComponentEditor()) {
+			@Override
+			public String getTitle() {
+				return "anchor";
+			}
+
+			@Override
+			public boolean isModified() throws Exception {
+				return !isVirtual();
+			}
+
+			@Override
+			public Object getValue() throws Exception {
+				if (isVirtual()) {
+					return null;
+				}
+				return getAnchorComponent();
+			}
+
+			@Override
+			public void setValue(Object value) throws Exception {
+				if (value instanceof ComponentInfo) {
+					materialize();
+					setAnchorComponent((ComponentInfo) value);
+					writeAndRefresh();
+				}
+			}
+		};
+		// anchor side
+		Property sideProperty;
+		{
+			StaticFieldPropertyEditor editor = new StaticFieldPropertyEditor();
+			String[] fieldDescriptions =
+					PlacementUtils.isHorizontalSide(getSide())
+					? new String[]{"EAST", "WEST",}
+			: new String[]{"NORTH", "SOUTH"};
+			editor.configure(SpringLayout.class, fieldDescriptions);
+			sideProperty = new Property(editor) {
+				@Override
+				public String getTitle() {
+					return "side";
+				}
+
+				@Override
+				public boolean isModified() throws Exception {
+					return !isVirtual();
+				}
+
+				@Override
+				public Object getValue() throws Exception {
+					if (isVirtual()) {
+						return null;
+					}
+					return getSpringSide(getAnchorSide());
+				}
+
+				@Override
+				public void setValue(Object value) throws Exception {
+					if (value instanceof String) {
+						materialize();
+						setAnchorSide(getFrameworkSide((String) value));
+						writeAndRefresh();
+					}
+				}
+			};
+		}
+		return new Property[]{offsetProperty, anchorProperty, sideProperty};
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		if (isVirtual()) {
+			return "<none>";
+		} else {
+			return ExecutionUtils.runObjectIgnore(new RunnableObjectEx<String>() {
+				public String runObject() throws Exception {
+					return "("
+							+ getOffset()
+							+ ", "
+							+ CodeUtils.getShortClass(getSpringSideSource(getAnchorSide()))
+							+ ", "
+							+ getAnchorComponent().getPresentation().getText()
+							+ ")";
+				}
+			},
+					"<exception>");
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Inner classes
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * An editor for choosing components in properties.
+	 */
+	private final class ComponentEditor extends AbstractComboPropertyEditor {
+		private final List<ComponentInfo> m_components = Lists.newArrayList();
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Presentation
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		protected String getText(Property property) throws Exception {
+			ComponentInfo component = (ComponentInfo) property.getValue();
+			if (component != null) {
+				return getText(component);
+			}
+			return null;
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Combo
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		protected void addItems(Property property, CCombo3 combo) throws Exception {
+			m_components.clear();
+			// parent
+			{
+				ContainerInfo container = m_layout.getContainer();
+				m_components.add(container);
+				combo.add(getText(container));
+			}
+			// siblings
+			List<ComponentInfo> components = m_layout.getComponents();
+			for (ComponentInfo component : components) {
+				if (component != m_component) {
+					m_components.add(component);
+					combo.add(getText(component));
+				}
+			}
+		}
+
+		@Override
+		protected void selectItem(Property property, CCombo3 combo) throws Exception {
+			combo.setText(getText(property));
+		}
+
+		@Override
+		protected void toPropertyEx(Property property, CCombo3 combo, int index) throws Exception {
+			ComponentInfo component = m_components.get(index);
+			property.setValue(component);
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Utils
+		//
+		////////////////////////////////////////////////////////////////////////////
+		private String getText(ComponentInfo component) throws Exception {
+			return component.getPresentation().getText();
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/spring/SpringLayoutInfo.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/spring/SpringLayoutInfo.java
index eb382ce2c..b354fdc52 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/spring/SpringLayoutInfo.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/layout/spring/SpringLayoutInfo.java
@@ -44,423 +44,423 @@
  * @coverage swing.model.layout
  */
 public final class SpringLayoutInfo extends LayoutInfo implements IAbsoluteLayoutCommands {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SpringLayoutInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-    // add listeners
-    addBroadcastListener(new JavaInfoAddProperties() {
-      public void invoke(JavaInfo javaInfo, List<Property> properties) throws Exception {
-        if (isManagedObject(javaInfo)) {
-          properties.add(getConstraintsProperty((ComponentInfo) javaInfo));
-        }
-      }
-    });
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void refresh_finish() throws Exception {
-    super.refresh_finish();
-    // update constraints text
-    updateConstraintsProperties();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Layout manipulation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void detach(IAbstractComponentInfo widget, int side) throws Exception {
-    SpringAttachmentInfo attachment = getAttachment(widget, side);
-    attachment.delete();
-  }
-
-  public void attachAbsolute(IAbstractComponentInfo widget, int side, int distance)
-      throws Exception {
-    SpringAttachmentInfo attachment = getAttachment(widget, side);
-    attachment.setAnchorComponent(getContainer());
-    attachment.setAnchorSide(side);
-    attachment.setOffset(getSideOffset(side, distance));
-    attachment.write();
-  }
-
-  public void adjustAttachmentOffset(IAbstractComponentInfo widget, int side, int delta)
-      throws Exception {
-    SpringAttachmentInfo attachment = getAttachment(widget, side);
-    int oldOffset = attachment.getOffset();
-    int newOffset = oldOffset + delta;
-    attachment.setOffset(newOffset);
-    attachment.write();
-  }
-
-  public void attachWidgetSequientially(IAbstractComponentInfo widget,
-      IAbstractComponentInfo attachToWidget,
-      int side,
-      int distance) throws Exception {
-    SpringAttachmentInfo attachment = getAttachment(widget, side);
-    attachment.setAnchorComponent((ComponentInfo) attachToWidget);
-    attachment.setAnchorSide(PlacementUtils.getOppositeSide(side));
-    attachment.setOffset(getSideOffset(side, distance));
-    attachment.write();
-  }
-
-  public void attachWidgetParallelly(IAbstractComponentInfo widget,
-      IAbstractComponentInfo attachToWidget,
-      int side,
-      int distance) throws Exception {
-    SpringAttachmentInfo attachment = getAttachment(widget, side);
-    attachment.setAnchorComponent((ComponentInfo) attachToWidget);
-    attachment.setAnchorSide(side);
-    attachment.setOffset(getSideOffset(side, distance));
-    attachment.write();
-  }
-
-  public void attachWidgetBaseline(IAbstractComponentInfo widget,
-      IAbstractComponentInfo attachedToWidget) throws Exception {
-    SpringAttachmentInfo attachment = getAttachmentTop((ComponentInfo) widget.getUnderlyingModel());
-    int offset = 0;
-    int baseline = widget.getBaseline();
-    int targetBaseline = attachedToWidget.getBaseline();
-    if (baseline == -1 || targetBaseline == -1) {
-      // move to center
-      Rectangle sourceBounds = widget.getModelBounds();
-      Rectangle targetBounds = attachedToWidget.getModelBounds();
-      offset = targetBounds.bottom() / 2 - sourceBounds.height / 2;
-    } else {
-      offset = targetBaseline - baseline;
-    }
-    attachment.setAnchorComponent((ComponentInfo) attachedToWidget);
-    attachment.setAnchorSide(IPositionConstants.TOP);
-    attachment.setOffset(offset);
-    attachment.write();
-  }
-
-  private static int getSideOffset(int side, int distance) {
-    if (PlacementUtils.isLeadingSide(side)) {
-      return distance;
-    } else {
-      return -distance;
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Resize
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void setExplicitSize(IAbstractComponentInfo widget,
-      int attachedSide,
-      int draggingSide,
-      int resizeDelta) throws Exception {
-    Rectangle modelBounds = widget.getModelBounds();
-    Dimension oldSize = modelBounds != null ? modelBounds.getSize() : widget.getPreferredSize();
-    //
-    int oldLinearSize = PlacementUtils.getSideSize(oldSize, draggingSide);
-    setExplicitSize(widget, attachedSide, draggingSide, resizeDelta, oldLinearSize);
-  }
-
-  private void setExplicitSize(IAbstractComponentInfo widget,
-      int attachedSide,
-      int draggingSide,
-      int resizeDelta,
-      int oldSize) throws Exception {
-    SpringAttachmentInfo attached = getAttachment(widget, attachedSide);
-    SpringAttachmentInfo dragging = getAttachment(widget, draggingSide);
-    if (attachedSide == draggingSide) {
-      // lock "free" side
-      {
-        SpringAttachmentInfo lock =
-            getAttachment(widget, PlacementUtils.getOppositeSide(attachedSide));
-        setNewSize(attached, lock, oldSize);
-      }
-      // move "attached"
-      /*{
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SpringLayoutInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+		// add listeners
+		addBroadcastListener(new JavaInfoAddProperties() {
+			public void invoke(JavaInfo javaInfo, List<Property> properties) throws Exception {
+				if (isManagedObject(javaInfo)) {
+					properties.add(getConstraintsProperty((ComponentInfo) javaInfo));
+				}
+			}
+		});
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void refresh_finish() throws Exception {
+		super.refresh_finish();
+		// update constraints text
+		updateConstraintsProperties();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Layout manipulation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void detach(IAbstractComponentInfo widget, int side) throws Exception {
+		SpringAttachmentInfo attachment = getAttachment(widget, side);
+		attachment.delete();
+	}
+
+	public void attachAbsolute(IAbstractComponentInfo widget, int side, int distance)
+			throws Exception {
+		SpringAttachmentInfo attachment = getAttachment(widget, side);
+		attachment.setAnchorComponent(getContainer());
+		attachment.setAnchorSide(side);
+		attachment.setOffset(getSideOffset(side, distance));
+		attachment.write();
+	}
+
+	public void adjustAttachmentOffset(IAbstractComponentInfo widget, int side, int delta)
+			throws Exception {
+		SpringAttachmentInfo attachment = getAttachment(widget, side);
+		int oldOffset = attachment.getOffset();
+		int newOffset = oldOffset + delta;
+		attachment.setOffset(newOffset);
+		attachment.write();
+	}
+
+	public void attachWidgetSequientially(IAbstractComponentInfo widget,
+			IAbstractComponentInfo attachToWidget,
+			int side,
+			int distance) throws Exception {
+		SpringAttachmentInfo attachment = getAttachment(widget, side);
+		attachment.setAnchorComponent((ComponentInfo) attachToWidget);
+		attachment.setAnchorSide(PlacementUtils.getOppositeSide(side));
+		attachment.setOffset(getSideOffset(side, distance));
+		attachment.write();
+	}
+
+	public void attachWidgetParallelly(IAbstractComponentInfo widget,
+			IAbstractComponentInfo attachToWidget,
+			int side,
+			int distance) throws Exception {
+		SpringAttachmentInfo attachment = getAttachment(widget, side);
+		attachment.setAnchorComponent((ComponentInfo) attachToWidget);
+		attachment.setAnchorSide(side);
+		attachment.setOffset(getSideOffset(side, distance));
+		attachment.write();
+	}
+
+	public void attachWidgetBaseline(IAbstractComponentInfo widget,
+			IAbstractComponentInfo attachedToWidget) throws Exception {
+		SpringAttachmentInfo attachment = getAttachmentTop((ComponentInfo) widget.getUnderlyingModel());
+		int offset = 0;
+		int baseline = widget.getBaseline();
+		int targetBaseline = attachedToWidget.getBaseline();
+		if (baseline == -1 || targetBaseline == -1) {
+			// move to center
+			Rectangle sourceBounds = widget.getModelBounds();
+			Rectangle targetBounds = attachedToWidget.getModelBounds();
+			offset = targetBounds.bottom() / 2 - sourceBounds.height / 2;
+		} else {
+			offset = targetBaseline - baseline;
+		}
+		attachment.setAnchorComponent((ComponentInfo) attachedToWidget);
+		attachment.setAnchorSide(IPositionConstants.TOP);
+		attachment.setOffset(offset);
+		attachment.write();
+	}
+
+	private static int getSideOffset(int side, int distance) {
+		if (PlacementUtils.isLeadingSide(side)) {
+			return distance;
+		} else {
+			return -distance;
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Resize
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void setExplicitSize(IAbstractComponentInfo widget,
+			int attachedSide,
+			int draggingSide,
+			int resizeDelta) throws Exception {
+		Rectangle modelBounds = widget.getModelBounds();
+		Dimension oldSize = modelBounds != null ? modelBounds.getSize() : widget.getPreferredSize();
+		//
+		int oldLinearSize = PlacementUtils.getSideSize(oldSize, draggingSide);
+		setExplicitSize(widget, attachedSide, draggingSide, resizeDelta, oldLinearSize);
+	}
+
+	private void setExplicitSize(IAbstractComponentInfo widget,
+			int attachedSide,
+			int draggingSide,
+			int resizeDelta,
+			int oldSize) throws Exception {
+		SpringAttachmentInfo attached = getAttachment(widget, attachedSide);
+		SpringAttachmentInfo dragging = getAttachment(widget, draggingSide);
+		if (attachedSide == draggingSide) {
+			// lock "free" side
+			{
+				SpringAttachmentInfo lock =
+						getAttachment(widget, PlacementUtils.getOppositeSide(attachedSide));
+				setNewSize(attached, lock, oldSize);
+			}
+			// move "attached"
+			/*{
       	int offsetDelta = PlacementUtils.isLeadingSide(attachedSide) ? -resizeDelta : resizeDelta;
       	adjustAttachmentOffset(widget, attachedSide, offsetDelta);
       }*/
-    } else {
-      int newWidth = oldSize + resizeDelta;
-      setNewSize(attached, dragging, newWidth);
-    }
-  }
-
-  private static void setNewSize(SpringAttachmentInfo attached,
-      SpringAttachmentInfo dragging,
-      int newSize) throws Exception {
-    dragging.setAnchorComponent(attached.getAnchorComponent());
-    dragging.setAnchorSide(attached.getAnchorSide());
-    // set offset
-    int offset;
-    if (PlacementUtils.isLeadingSide(attached.getSide())) {
-      offset = attached.getOffset() + newSize;
-    } else {
-      offset = attached.getOffset() - newSize;
-    }
-    dragging.setOffset(offset);
-    dragging.write();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Attachments
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link SpringAttachmentInfo} for side of component.
-   *
-   * @param side
-   *          one of the {@link IPositionConstants#LEFT}, {@link IPositionConstants#TOP},
-   *          {@link IPositionConstants#RIGHT}, {@link IPositionConstants#BOTTOM}.
-   */
-  public final SpringAttachmentInfo getAttachment(IAbstractComponentInfo component, int side) {
-    return SpringAttachmentInfo.get(this, (ComponentInfo) component.getUnderlyingModel(), side);
-  }
-
-  public final SpringAttachmentInfo getAttachmentLeft(ComponentInfo component) {
-    return getAttachment(component, IPositionConstants.LEFT);
-  }
-
-  public final SpringAttachmentInfo getAttachmentRight(ComponentInfo component) {
-    return getAttachment(component, IPositionConstants.RIGHT);
-  }
-
-  public final SpringAttachmentInfo getAttachmentTop(ComponentInfo component) {
-    return getAttachment(component, IPositionConstants.TOP);
-  }
-
-  public final SpringAttachmentInfo getAttachmentBottom(ComponentInfo component) {
-    return getAttachment(component, IPositionConstants.BOTTOM);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ComponentAttachmentInfo getComponentAttachmentInfo(IAbstractComponentInfo widget, int side)
-      throws Exception {
-    SpringAttachmentInfo attachment = getAttachment(widget, side);
-    if (attachment != null && !attachment.isVirtual()) {
-      ComponentInfo anchorComponent = attachment.getAnchorComponent();
-      if (anchorComponent != null && anchorComponent != getContainer()) {
-        int anchorSide = attachment.getAnchorSide();
-        return new ComponentAttachmentInfo(widget, anchorComponent, anchorSide);
-      }
-    }
-    return null;
-  }
-
-  public ComponentInfo getAttachedToWidget(IAbstractComponentInfo widget, int side) {
-    SpringAttachmentInfo attachment = getAttachment(widget, side);
-    ComponentInfo anchorComponent = attachment.getAnchorComponent();
-    return anchorComponent != getContainer() ? anchorComponent : null;
-  }
-
-  public boolean isAttached(IAbstractComponentInfo widget, int side) throws Exception {
-    return !getAttachment(widget, side).isVirtual();
-  }
-
-  public static Image getImage(String imageName) {
-    return Activator.getImage("info/layout/springLayout/" + imageName);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Layout-defined actions
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void performAction(int actionId) {
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public final void command_CREATE(ComponentInfo component, ComponentInfo nextComponent)
-      throws Exception {
-    add(component, null, nextComponent);
-  }
-
-  public final void command_ADD(ComponentInfo component, ComponentInfo nextComponent)
-      throws Exception {
-    move(component, null, nextComponent);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // MOVE
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void command_MOVE(ComponentInfo component, ComponentInfo nextComponent) throws Exception {
-    initializeAttachments(component);
-    move(component, null, nextComponent);
-    adjustMovedComponentSides(component);
-    adjustAnchoredToMovedComponent(component);
-  }
-
-  /**
-   * Ensures that all {@link SpringAttachmentInfo} of {@link ComponentInfo} are initialized, mainly
-   * for preparing anchors. After moving component its anchor references may become invalid
-   * temporary.
-   */
-  private void initializeAttachments(ComponentInfo component) {
-    getAttachmentLeft(component);
-    getAttachmentRight(component);
-    getAttachmentTop(component);
-    getAttachmentBottom(component);
-  }
-
-  private void adjustMovedComponentSides(ComponentInfo component) throws Exception {
-    adjustMovedComponentSide(component, IPositionConstants.TOP);
-    adjustMovedComponentSide(component, IPositionConstants.LEFT);
-    adjustMovedComponentSide(component, IPositionConstants.BOTTOM);
-    adjustMovedComponentSide(component, IPositionConstants.RIGHT);
-  }
-
-  private void adjustMovedComponentSide(ComponentInfo component, int side) throws Exception {
-    SpringAttachmentInfo attachment = getAttachment(component, side);
-    if (!attachment.isVirtual()) {
-      attachment.adjustAfterComponentMove();
-    }
-  }
-
-  private void adjustAnchoredToMovedComponent(ComponentInfo component) throws Exception {
-    for (ComponentInfo sibling : getContainer().getChildrenComponents()) {
-      adjustAnchoredToMovedComponentSides(sibling, component);
-    }
-  }
-
-  private void adjustAnchoredToMovedComponentSides(ComponentInfo component, ComponentInfo anchor)
-      throws Exception {
-    adjustAnchoredToMovedComponentSide(component, anchor, IPositionConstants.TOP);
-    adjustAnchoredToMovedComponentSide(component, anchor, IPositionConstants.LEFT);
-    adjustAnchoredToMovedComponentSide(component, anchor, IPositionConstants.BOTTOM);
-    adjustAnchoredToMovedComponentSide(component, anchor, IPositionConstants.RIGHT);
-  }
-
-  private void adjustAnchoredToMovedComponentSide(ComponentInfo component,
-      ComponentInfo anchor,
-      int side) throws Exception {
-    SpringAttachmentInfo attachment = getAttachment(component, side);
-    if (attachment.getAnchorComponent() == anchor) {
-      attachment.adjustAfterComponentMove();
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Setting new layout
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void onSet() throws Exception {
-    List<ComponentInfo> components = getComponents();
-    Insets parentAreaInsets = getContainer().getClientAreaInsets();
-    for (ComponentInfo component : components) {
-      Rectangle componentBounds = component.getModelBounds();
-      Dimension preferredSize = component.getPreferredSize();
-      int x = componentBounds.x - parentAreaInsets.left;
-      int y = componentBounds.y - parentAreaInsets.top;
-      int width = componentBounds.width;
-      int height = componentBounds.height;
-      setAttachmentOffset(component, IPositionConstants.LEFT, IPositionConstants.LEFT, x);
-      setAttachmentOffset(component, IPositionConstants.TOP, IPositionConstants.TOP, y);
-      if (width != preferredSize.width) {
-        setAttachmentOffset(component, IPositionConstants.RIGHT, IPositionConstants.LEFT, x + width);
-      }
-      if (height != preferredSize.height) {
-        setAttachmentOffset(component, IPositionConstants.BOTTOM, IPositionConstants.TOP, y
-            + height);
-      }
-    }
-  }
-
-  private void setAttachmentOffset(ComponentInfo component, int side, int parentSide, int offset)
-      throws Exception {
-    SpringAttachmentInfo attachment = getAttachment(component, side);
-    attachment.setAnchorSide(parentSide);
-    attachment.setAnchorComponent(getContainer());
-    attachment.setOffset(offset);
-    attachment.write();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Properties
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void updateConstraintsProperties() throws Exception {
-    List<ComponentInfo> components = getComponents();
-    for (ComponentInfo component : components) {
-      if (isManagedObject(component)) {
-        Property[] properties = getConstraintsProperty(component).getProperties();
-        ((ComplexProperty) properties[0]).setText(getAttachmentLeft(component).toString());
-        ((ComplexProperty) properties[1]).setText(getAttachmentRight(component).toString());
-        ((ComplexProperty) properties[2]).setText(getAttachmentTop(component).toString());
-        ((ComplexProperty) properties[3]).setText(getAttachmentBottom(component).toString());
-      }
-    }
-  }
-
-  private ComplexProperty getConstraintsProperty(ComponentInfo component) throws Exception {
-    ComplexProperty constraintsProperty = (ComplexProperty) component.getArbitraryValue(this);
-    if (constraintsProperty == null) {
-      constraintsProperty = new ComplexProperty("Constraints", "<constraints>") {
-        @Override
-        public boolean isModified() throws Exception {
-          return true;
-        }
-      };
-      component.putArbitraryValue(this, constraintsProperty);
-      constraintsProperty.setCategory(PropertyCategory.system(6));
-      // set sub-properties
-      Property[] constraintsProperties = createAttachmentsProperties(component);
-      constraintsProperty.setProperties(constraintsProperties);
-    }
-    return constraintsProperty;
-  }
-
-  private Property[] createAttachmentsProperties(ComponentInfo component) throws Exception {
-    return new Property[]{
-        createAttachmentProperty(component, IPositionConstants.LEFT, "WEST"),
-        createAttachmentProperty(component, IPositionConstants.RIGHT, "EAST"),
-        createAttachmentProperty(component, IPositionConstants.TOP, "NORTH"),
-        createAttachmentProperty(component, IPositionConstants.BOTTOM, "SOUTH")};
-  }
-
-  /**
-   * Creates the {@link ComplexProperty} for {@link SpringAttachmentInfo} by attachment's property
-   * name.
-   */
-  private ComplexProperty createAttachmentProperty(ComponentInfo component, int side, String title)
-      throws Exception {
-    final SpringAttachmentInfo attachment = getAttachment(component, side);
-    ComplexProperty attachmentProperty = new ComplexProperty(title, attachment.toString()) {
-      @Override
-      public boolean isModified() throws Exception {
-        return !attachment.isVirtual();
-      }
-
-      @Override
-      public void setValue(Object value) throws Exception {
-        if (value == Property.UNKNOWN_VALUE) {
-          attachment.delete();
-          ExecutionUtils.refresh(SpringLayoutInfo.this);
-        }
-      }
-    };
-    attachmentProperty.setProperties(attachment.getProperties());
-    return attachmentProperty;
-  }
+		} else {
+			int newWidth = oldSize + resizeDelta;
+			setNewSize(attached, dragging, newWidth);
+		}
+	}
+
+	private static void setNewSize(SpringAttachmentInfo attached,
+			SpringAttachmentInfo dragging,
+			int newSize) throws Exception {
+		dragging.setAnchorComponent(attached.getAnchorComponent());
+		dragging.setAnchorSide(attached.getAnchorSide());
+		// set offset
+		int offset;
+		if (PlacementUtils.isLeadingSide(attached.getSide())) {
+			offset = attached.getOffset() + newSize;
+		} else {
+			offset = attached.getOffset() - newSize;
+		}
+		dragging.setOffset(offset);
+		dragging.write();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Attachments
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link SpringAttachmentInfo} for side of component.
+	 *
+	 * @param side
+	 *          one of the {@link IPositionConstants#LEFT}, {@link IPositionConstants#TOP},
+	 *          {@link IPositionConstants#RIGHT}, {@link IPositionConstants#BOTTOM}.
+	 */
+	public final SpringAttachmentInfo getAttachment(IAbstractComponentInfo component, int side) {
+		return SpringAttachmentInfo.get(this, (ComponentInfo) component.getUnderlyingModel(), side);
+	}
+
+	public final SpringAttachmentInfo getAttachmentLeft(ComponentInfo component) {
+		return getAttachment(component, IPositionConstants.LEFT);
+	}
+
+	public final SpringAttachmentInfo getAttachmentRight(ComponentInfo component) {
+		return getAttachment(component, IPositionConstants.RIGHT);
+	}
+
+	public final SpringAttachmentInfo getAttachmentTop(ComponentInfo component) {
+		return getAttachment(component, IPositionConstants.TOP);
+	}
+
+	public final SpringAttachmentInfo getAttachmentBottom(ComponentInfo component) {
+		return getAttachment(component, IPositionConstants.BOTTOM);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ComponentAttachmentInfo getComponentAttachmentInfo(IAbstractComponentInfo widget, int side)
+			throws Exception {
+		SpringAttachmentInfo attachment = getAttachment(widget, side);
+		if (attachment != null && !attachment.isVirtual()) {
+			ComponentInfo anchorComponent = attachment.getAnchorComponent();
+			if (anchorComponent != null && anchorComponent != getContainer()) {
+				int anchorSide = attachment.getAnchorSide();
+				return new ComponentAttachmentInfo(widget, anchorComponent, anchorSide);
+			}
+		}
+		return null;
+	}
+
+	public ComponentInfo getAttachedToWidget(IAbstractComponentInfo widget, int side) {
+		SpringAttachmentInfo attachment = getAttachment(widget, side);
+		ComponentInfo anchorComponent = attachment.getAnchorComponent();
+		return anchorComponent != getContainer() ? anchorComponent : null;
+	}
+
+	public boolean isAttached(IAbstractComponentInfo widget, int side) throws Exception {
+		return !getAttachment(widget, side).isVirtual();
+	}
+
+	public static Image getImage(String imageName) {
+		return Activator.getImage("info/layout/springLayout/" + imageName);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Layout-defined actions
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void performAction(int actionId) {
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public final void command_CREATE(ComponentInfo component, ComponentInfo nextComponent)
+			throws Exception {
+		add(component, null, nextComponent);
+	}
+
+	public final void command_ADD(ComponentInfo component, ComponentInfo nextComponent)
+			throws Exception {
+		move(component, null, nextComponent);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// MOVE
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void command_MOVE(ComponentInfo component, ComponentInfo nextComponent) throws Exception {
+		initializeAttachments(component);
+		move(component, null, nextComponent);
+		adjustMovedComponentSides(component);
+		adjustAnchoredToMovedComponent(component);
+	}
+
+	/**
+	 * Ensures that all {@link SpringAttachmentInfo} of {@link ComponentInfo} are initialized, mainly
+	 * for preparing anchors. After moving component its anchor references may become invalid
+	 * temporary.
+	 */
+	private void initializeAttachments(ComponentInfo component) {
+		getAttachmentLeft(component);
+		getAttachmentRight(component);
+		getAttachmentTop(component);
+		getAttachmentBottom(component);
+	}
+
+	private void adjustMovedComponentSides(ComponentInfo component) throws Exception {
+		adjustMovedComponentSide(component, IPositionConstants.TOP);
+		adjustMovedComponentSide(component, IPositionConstants.LEFT);
+		adjustMovedComponentSide(component, IPositionConstants.BOTTOM);
+		adjustMovedComponentSide(component, IPositionConstants.RIGHT);
+	}
+
+	private void adjustMovedComponentSide(ComponentInfo component, int side) throws Exception {
+		SpringAttachmentInfo attachment = getAttachment(component, side);
+		if (!attachment.isVirtual()) {
+			attachment.adjustAfterComponentMove();
+		}
+	}
+
+	private void adjustAnchoredToMovedComponent(ComponentInfo component) throws Exception {
+		for (ComponentInfo sibling : getContainer().getChildrenComponents()) {
+			adjustAnchoredToMovedComponentSides(sibling, component);
+		}
+	}
+
+	private void adjustAnchoredToMovedComponentSides(ComponentInfo component, ComponentInfo anchor)
+			throws Exception {
+		adjustAnchoredToMovedComponentSide(component, anchor, IPositionConstants.TOP);
+		adjustAnchoredToMovedComponentSide(component, anchor, IPositionConstants.LEFT);
+		adjustAnchoredToMovedComponentSide(component, anchor, IPositionConstants.BOTTOM);
+		adjustAnchoredToMovedComponentSide(component, anchor, IPositionConstants.RIGHT);
+	}
+
+	private void adjustAnchoredToMovedComponentSide(ComponentInfo component,
+			ComponentInfo anchor,
+			int side) throws Exception {
+		SpringAttachmentInfo attachment = getAttachment(component, side);
+		if (attachment.getAnchorComponent() == anchor) {
+			attachment.adjustAfterComponentMove();
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Setting new layout
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void onSet() throws Exception {
+		List<ComponentInfo> components = getComponents();
+		Insets parentAreaInsets = getContainer().getClientAreaInsets();
+		for (ComponentInfo component : components) {
+			Rectangle componentBounds = component.getModelBounds();
+			Dimension preferredSize = component.getPreferredSize();
+			int x = componentBounds.x - parentAreaInsets.left;
+			int y = componentBounds.y - parentAreaInsets.top;
+			int width = componentBounds.width;
+			int height = componentBounds.height;
+			setAttachmentOffset(component, IPositionConstants.LEFT, IPositionConstants.LEFT, x);
+			setAttachmentOffset(component, IPositionConstants.TOP, IPositionConstants.TOP, y);
+			if (width != preferredSize.width) {
+				setAttachmentOffset(component, IPositionConstants.RIGHT, IPositionConstants.LEFT, x + width);
+			}
+			if (height != preferredSize.height) {
+				setAttachmentOffset(component, IPositionConstants.BOTTOM, IPositionConstants.TOP, y
+						+ height);
+			}
+		}
+	}
+
+	private void setAttachmentOffset(ComponentInfo component, int side, int parentSide, int offset)
+			throws Exception {
+		SpringAttachmentInfo attachment = getAttachment(component, side);
+		attachment.setAnchorSide(parentSide);
+		attachment.setAnchorComponent(getContainer());
+		attachment.setOffset(offset);
+		attachment.write();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Properties
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void updateConstraintsProperties() throws Exception {
+		List<ComponentInfo> components = getComponents();
+		for (ComponentInfo component : components) {
+			if (isManagedObject(component)) {
+				Property[] properties = getConstraintsProperty(component).getProperties();
+				((ComplexProperty) properties[0]).setText(getAttachmentLeft(component).toString());
+				((ComplexProperty) properties[1]).setText(getAttachmentRight(component).toString());
+				((ComplexProperty) properties[2]).setText(getAttachmentTop(component).toString());
+				((ComplexProperty) properties[3]).setText(getAttachmentBottom(component).toString());
+			}
+		}
+	}
+
+	private ComplexProperty getConstraintsProperty(ComponentInfo component) throws Exception {
+		ComplexProperty constraintsProperty = (ComplexProperty) component.getArbitraryValue(this);
+		if (constraintsProperty == null) {
+			constraintsProperty = new ComplexProperty("Constraints", "<constraints>") {
+				@Override
+				public boolean isModified() throws Exception {
+					return true;
+				}
+			};
+			component.putArbitraryValue(this, constraintsProperty);
+			constraintsProperty.setCategory(PropertyCategory.system(6));
+			// set sub-properties
+			Property[] constraintsProperties = createAttachmentsProperties(component);
+			constraintsProperty.setProperties(constraintsProperties);
+		}
+		return constraintsProperty;
+	}
+
+	private Property[] createAttachmentsProperties(ComponentInfo component) throws Exception {
+		return new Property[]{
+				createAttachmentProperty(component, IPositionConstants.LEFT, "WEST"),
+				createAttachmentProperty(component, IPositionConstants.RIGHT, "EAST"),
+				createAttachmentProperty(component, IPositionConstants.TOP, "NORTH"),
+				createAttachmentProperty(component, IPositionConstants.BOTTOM, "SOUTH")};
+	}
+
+	/**
+	 * Creates the {@link ComplexProperty} for {@link SpringAttachmentInfo} by attachment's property
+	 * name.
+	 */
+	private ComplexProperty createAttachmentProperty(ComponentInfo component, int side, String title)
+			throws Exception {
+		final SpringAttachmentInfo attachment = getAttachment(component, side);
+		ComplexProperty attachmentProperty = new ComplexProperty(title, attachment.toString()) {
+			@Override
+			public boolean isModified() throws Exception {
+				return !attachment.isVirtual();
+			}
+
+			@Override
+			public void setValue(Object value) throws Exception {
+				if (value == Property.UNKNOWN_VALUE) {
+					attachment.delete();
+					ExecutionUtils.refresh(SpringLayoutInfo.this);
+				}
+			}
+		};
+		attachmentProperty.setProperties(attachment.getProperties());
+		return attachmentProperty;
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/TabOrderProperty.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/TabOrderProperty.java
index 51619c34c..d7b2d7e6f 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/TabOrderProperty.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/TabOrderProperty.java
@@ -37,118 +37,118 @@
  * @coverage swing.property.order
  */
 public class TabOrderProperty
-    extends
-      org.eclipse.wb.internal.core.model.property.order.TabOrderProperty {
-  private static final String FOCUS_TRAVERSAL_CLASS = "org.eclipse.wb.swing.FocusTraversalOnArray";
-  private static final String FOCUS_TRAVERSAL_METHOD_SIGNATURE =
-      "setFocusTraversalPolicy(java.awt.FocusTraversalPolicy)";
-  private static final String TITLE_TOOLTIP = ModelMessages.TabOrderProperty_tooltip;
+extends
+org.eclipse.wb.internal.core.model.property.order.TabOrderProperty {
+	private static final String FOCUS_TRAVERSAL_CLASS = "org.eclipse.wb.swing.FocusTraversalOnArray";
+	private static final String FOCUS_TRAVERSAL_METHOD_SIGNATURE =
+			"setFocusTraversalPolicy(java.awt.FocusTraversalPolicy)";
+	private static final String TITLE_TOOLTIP = ModelMessages.TabOrderProperty_tooltip;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public TabOrderProperty(ContainerInfo container) {
-    super(container);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public TabOrderProperty(ContainerInfo container) {
+		super(container);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Value
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected ArrayInitializer getOrderedArray() throws Exception {
-    MethodInvocation invocation = m_container.getMethodInvocation(FOCUS_TRAVERSAL_METHOD_SIGNATURE);
-    if (invocation != null) {
-      Object traversalPolicy = invocation.arguments().get(0);
-      if (traversalPolicy instanceof ClassInstanceCreation) {
-        ClassInstanceCreation traversalPolicyCreation = (ClassInstanceCreation) traversalPolicy;
-        if (FOCUS_TRAVERSAL_CLASS.equals(AstNodeUtils.getFullyQualifiedName(
-            traversalPolicyCreation,
-            false))) {
-          Object focusTraversalOnArray = traversalPolicyCreation.arguments().get(0);
-          if (focusTraversalOnArray instanceof ArrayCreation) {
-            ArrayCreation creation = (ArrayCreation) focusTraversalOnArray;
-            return creation.getInitializer();
-          }
-        }
-      }
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Value
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected ArrayInitializer getOrderedArray() throws Exception {
+		MethodInvocation invocation = m_container.getMethodInvocation(FOCUS_TRAVERSAL_METHOD_SIGNATURE);
+		if (invocation != null) {
+			Object traversalPolicy = invocation.arguments().get(0);
+			if (traversalPolicy instanceof ClassInstanceCreation) {
+				ClassInstanceCreation traversalPolicyCreation = (ClassInstanceCreation) traversalPolicy;
+				if (FOCUS_TRAVERSAL_CLASS.equals(AstNodeUtils.getFullyQualifiedName(
+						traversalPolicyCreation,
+						false))) {
+					Object focusTraversalOnArray = traversalPolicyCreation.arguments().get(0);
+					if (focusTraversalOnArray instanceof ArrayCreation) {
+						ArrayCreation creation = (ArrayCreation) focusTraversalOnArray;
+						return creation.getInitializer();
+					}
+				}
+			}
+		}
+		return null;
+	}
 
-  @Override
-  protected void removePropertyAssociation() throws Exception {
-    m_container.removeMethodInvocations(FOCUS_TRAVERSAL_METHOD_SIGNATURE);
-  }
+	@Override
+	protected void removePropertyAssociation() throws Exception {
+		m_container.removeMethodInvocations(FOCUS_TRAVERSAL_METHOD_SIGNATURE);
+	}
 
-  @Override
-  protected void setOrderedArraySource(String source) throws Exception {
-    String newSource =
-        "new org.eclipse.wb.swing.FocusTraversalOnArray(new java.awt.Component[]" + source + ")";
-    MethodInvocation invocation = m_container.getMethodInvocation(FOCUS_TRAVERSAL_METHOD_SIGNATURE);
-    if (invocation == null) {
-      ProjectUtils.ensureResourceType(
-          m_container.getEditor().getJavaProject(),
-          m_container.getDescription().getToolkit().getBundle(),
-          FOCUS_TRAVERSAL_CLASS);
-      m_container.addMethodInvocation(FOCUS_TRAVERSAL_METHOD_SIGNATURE, newSource);
-    } else {
-      Expression argument = DomGenerics.arguments(invocation).get(0);
-      m_container.replaceExpression(argument, newSource);
-    }
-  }
+	@Override
+	protected void setOrderedArraySource(String source) throws Exception {
+		String newSource =
+				"new org.eclipse.wb.swing.FocusTraversalOnArray(new java.awt.Component[]" + source + ")";
+		MethodInvocation invocation = m_container.getMethodInvocation(FOCUS_TRAVERSAL_METHOD_SIGNATURE);
+		if (invocation == null) {
+			ProjectUtils.ensureResourceType(
+					m_container.getEditor().getJavaProject(),
+					m_container.getDescription().getToolkit().getBundle(),
+					FOCUS_TRAVERSAL_CLASS);
+			m_container.addMethodInvocation(FOCUS_TRAVERSAL_METHOD_SIGNATURE, newSource);
+		} else {
+			Expression argument = DomGenerics.arguments(invocation).get(0);
+			m_container.replaceExpression(argument, newSource);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Children
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected List<? extends AbstractComponentInfo> getTabPossibleChildren() throws Exception {
-    final List<AbstractComponentInfo> children = Lists.newArrayList();
-    m_container.accept(new ObjectInfoVisitor() {
-      @Override
-      public boolean visit(ObjectInfo objectInfo) throws Exception {
-        if (objectInfo != m_container && objectInfo instanceof ComponentInfo) {
-          children.add((AbstractComponentInfo) objectInfo);
-        }
-        return true;
-      }
-    });
-    return children;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Children
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected List<? extends AbstractComponentInfo> getTabPossibleChildren() throws Exception {
+		final List<AbstractComponentInfo> children = Lists.newArrayList();
+		m_container.accept(new ObjectInfoVisitor() {
+			@Override
+			public boolean visit(ObjectInfo objectInfo) throws Exception {
+				if (objectInfo != m_container && objectInfo instanceof ComponentInfo) {
+					children.add((AbstractComponentInfo) objectInfo);
+				}
+				return true;
+			}
+		});
+		return children;
+	}
 
-  @Override
-  protected boolean isDefaultOrdered(AbstractComponentInfo component) throws Exception {
-    return true;
-  }
+	@Override
+	protected boolean isDefaultOrdered(AbstractComponentInfo component) throws Exception {
+		return true;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Delete
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected boolean hasOrderElement(ObjectInfo parent, ObjectInfo child) throws Exception {
-    while (parent != null) {
-      if (parent == m_container) {
-        return true;
-      }
-      parent = parent.getParent();
-    }
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Delete
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected boolean hasOrderElement(ObjectInfo parent, ObjectInfo child) throws Exception {
+		while (parent != null) {
+			if (parent == m_container) {
+				return true;
+			}
+			parent = parent.getParent();
+		}
+		return false;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tooltip
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getPropertyTooltipText() {
-    return TITLE_TOOLTIP;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tooltip
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getPropertyTooltipText() {
+		return TITLE_TOOLTIP;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/converter/ColorConverter.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/converter/ColorConverter.java
index f3bd9c5ee..30c062262 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/converter/ColorConverter.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/converter/ColorConverter.java
@@ -24,54 +24,54 @@
  * @coverage swing.property.converter
  */
 public class ColorConverter extends ExpressionConverter {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final ExpressionConverter INSTANCE = new ColorConverter();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final ExpressionConverter INSTANCE = new ColorConverter();
 
-  private ColorConverter() {
-  }
+	private ColorConverter() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ExpressionConverter
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toJavaSource(JavaInfo javaInfo, Object value) throws Exception {
-    // handle "null" value
-    if (value == null) {
-      return "(java.awt.Color) null";
-    }
-    // find constant value
-    for (ColorInfo colorInfo : AwtColors.getColors_System()) {
-      if (value == colorInfo.getToolkitColor()) {
-        return (String) colorInfo.getData();
-      }
-    }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ExpressionConverter
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toJavaSource(JavaInfo javaInfo, Object value) throws Exception {
+		// handle "null" value
+		if (value == null) {
+			return "(java.awt.Color) null";
+		}
+		// find constant value
+		for (ColorInfo colorInfo : AwtColors.getColors_System()) {
+			if (value == colorInfo.getToolkitColor()) {
+				return (String) colorInfo.getData();
+			}
+		}
 
-    for (ColorInfo[] colorInfos : new ColorInfo[][]{
-        AwtColors.getColors_AWT(),
-        AwtColors.getColors_Swing(),}) {
-      for (ColorInfo colorInfo : colorInfos) {
-        if (value.equals(colorInfo.getToolkitColor())) {
-          return (String) colorInfo.getData();
-        }
-      }
-    }
-    // Color constructor
-    Color color = (Color) value;
-    int alpha = color.getAlpha();
-    String alphaParameter = alpha == 255 ? "" : ", " + Integer.toString(alpha);
-    return "new java.awt.Color("
-        + Integer.toString(color.getRed())
-        + ", "
-        + Integer.toString(color.getGreen())
-        + ", "
-        + Integer.toString(color.getBlue())
-        + alphaParameter
-        + ")";
-  }
+		for (ColorInfo[] colorInfos : new ColorInfo[][]{
+			AwtColors.getColors_AWT(),
+			AwtColors.getColors_Swing(),}) {
+			for (ColorInfo colorInfo : colorInfos) {
+				if (value.equals(colorInfo.getToolkitColor())) {
+					return (String) colorInfo.getData();
+				}
+			}
+		}
+		// Color constructor
+		Color color = (Color) value;
+		int alpha = color.getAlpha();
+		String alphaParameter = alpha == 255 ? "" : ", " + Integer.toString(alpha);
+		return "new java.awt.Color("
+		+ Integer.toString(color.getRed())
+		+ ", "
+		+ Integer.toString(color.getGreen())
+		+ ", "
+		+ Integer.toString(color.getBlue())
+		+ alphaParameter
+		+ ")";
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/converter/DimensionConverter.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/converter/DimensionConverter.java
index 3fabdf617..c7d7e39d6 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/converter/DimensionConverter.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/converter/DimensionConverter.java
@@ -23,30 +23,30 @@
  * @coverage swing.property.converter
  */
 public final class DimensionConverter extends ExpressionConverter {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final ExpressionConverter INSTANCE = new DimensionConverter();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final ExpressionConverter INSTANCE = new DimensionConverter();
 
-  private DimensionConverter() {
-  }
+	private DimensionConverter() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ExpressionConverter
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toJavaSource(JavaInfo javaInfo, Object value) throws Exception {
-    if (value == null) {
-      return "(java.awt.Dimension) null";
-    } else {
-      Dimension dimension = (Dimension) value;
-      String widthSource = IntegerConverter.INSTANCE.toJavaSource(javaInfo, dimension.width);
-      String heightSource = IntegerConverter.INSTANCE.toJavaSource(javaInfo, dimension.height);
-      return "new java.awt.Dimension(" + widthSource + ", " + heightSource + ")";
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ExpressionConverter
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toJavaSource(JavaInfo javaInfo, Object value) throws Exception {
+		if (value == null) {
+			return "(java.awt.Dimension) null";
+		} else {
+			Dimension dimension = (Dimension) value;
+			String widthSource = IntegerConverter.INSTANCE.toJavaSource(javaInfo, dimension.width);
+			String heightSource = IntegerConverter.INSTANCE.toJavaSource(javaInfo, dimension.height);
+			return "new java.awt.Dimension(" + widthSource + ", " + heightSource + ")";
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/converter/InsetsConverter.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/converter/InsetsConverter.java
index 6e44c4964..8fa62b9fe 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/converter/InsetsConverter.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/converter/InsetsConverter.java
@@ -22,36 +22,36 @@
  * @coverage swing.property.converter
  */
 public final class InsetsConverter extends ExpressionConverter {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final ExpressionConverter INSTANCE = new InsetsConverter();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final ExpressionConverter INSTANCE = new InsetsConverter();
 
-  private InsetsConverter() {
-  }
+	private InsetsConverter() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ExpressionConverter
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toJavaSource(JavaInfo javaInfo, Object value) throws Exception {
-    if (value == null) {
-      return "(java.awt.Insets) null";
-    } else {
-      Insets insets = (Insets) value;
-      return "new java.awt.Insets("
-          + insets.top
-          + ", "
-          + insets.left
-          + ", "
-          + insets.bottom
-          + ", "
-          + insets.right
-          + ")";
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ExpressionConverter
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toJavaSource(JavaInfo javaInfo, Object value) throws Exception {
+		if (value == null) {
+			return "(java.awt.Insets) null";
+		} else {
+			Insets insets = (Insets) value;
+			return "new java.awt.Insets("
+			+ insets.top
+			+ ", "
+			+ insets.left
+			+ ", "
+			+ insets.bottom
+			+ ", "
+			+ insets.right
+			+ ")";
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/converter/PointConverter.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/converter/PointConverter.java
index e8567aff1..7b153da07 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/converter/PointConverter.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/converter/PointConverter.java
@@ -22,28 +22,28 @@
  * @coverage swing.property.converter
  */
 public final class PointConverter extends ExpressionConverter {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final ExpressionConverter INSTANCE = new PointConverter();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final ExpressionConverter INSTANCE = new PointConverter();
 
-  private PointConverter() {
-  }
+	private PointConverter() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ExpressionConverter
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toJavaSource(JavaInfo javaInfo, Object value) throws Exception {
-    if (value == null) {
-      return "(java.awt.Point) null";
-    } else {
-      Point point = (Point) value;
-      return "new java.awt.Point(" + point.x + ", " + point.y + ")";
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ExpressionConverter
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toJavaSource(JavaInfo javaInfo, Object value) throws Exception {
+		if (value == null) {
+			return "(java.awt.Point) null";
+		} else {
+			Point point = (Point) value;
+			return "new java.awt.Point(" + point.x + ", " + point.y + ")";
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/converter/RectangleConverter.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/converter/RectangleConverter.java
index f18bcc58c..8433599bb 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/converter/RectangleConverter.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/converter/RectangleConverter.java
@@ -22,36 +22,36 @@
  * @coverage swing.property.converter
  */
 public final class RectangleConverter extends ExpressionConverter {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final ExpressionConverter INSTANCE = new RectangleConverter();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final ExpressionConverter INSTANCE = new RectangleConverter();
 
-  private RectangleConverter() {
-  }
+	private RectangleConverter() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ExpressionConverter
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toJavaSource(JavaInfo javaInfo, Object value) throws Exception {
-    if (value == null) {
-      return "(java.awt.Rectangle) null";
-    } else {
-      Rectangle rectangle = (Rectangle) value;
-      return "new java.awt.Rectangle("
-          + rectangle.x
-          + ", "
-          + rectangle.y
-          + ", "
-          + rectangle.width
-          + ", "
-          + rectangle.height
-          + ")";
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ExpressionConverter
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toJavaSource(JavaInfo javaInfo, Object value) throws Exception {
+		if (value == null) {
+			return "(java.awt.Rectangle) null";
+		} else {
+			Rectangle rectangle = (Rectangle) value;
+			return "new java.awt.Rectangle("
+			+ rectangle.x
+			+ ", "
+			+ rectangle.y
+			+ ", "
+			+ rectangle.width
+			+ ", "
+			+ rectangle.height
+			+ ")";
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/DisplayedMnemonicKeyPropertyEditor.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/DisplayedMnemonicKeyPropertyEditor.java
index 13f126c80..8955d7cb3 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/DisplayedMnemonicKeyPropertyEditor.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/DisplayedMnemonicKeyPropertyEditor.java
@@ -31,37 +31,37 @@
  * @coverage swing.property.editor
  */
 public final class DisplayedMnemonicKeyPropertyEditor extends StaticFieldPropertyEditor {
-  public static final PropertyEditor INSTANCE = new DisplayedMnemonicKeyPropertyEditor();
+	public static final PropertyEditor INSTANCE = new DisplayedMnemonicKeyPropertyEditor();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DisplayedMnemonicKeyPropertyEditor() {
-    // prepare VK_ fields
-    final List<String> fieldNames = Lists.newArrayList();
-    for (Field field : KeyEvent.class.getFields()) {
-      String fieldName = field.getName();
-      if (fieldName.startsWith("VK_")) {
-        fieldNames.add(fieldName);
-      }
-    }
-    // do configure
-    ExecutionUtils.runRethrow(new RunnableEx() {
-      public void run() throws Exception {
-        configure(KeyEvent.class, fieldNames.toArray(new String[fieldNames.size()]));
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DisplayedMnemonicKeyPropertyEditor() {
+		// prepare VK_ fields
+		final List<String> fieldNames = Lists.newArrayList();
+		for (Field field : KeyEvent.class.getFields()) {
+			String fieldName = field.getName();
+			if (fieldName.startsWith("VK_")) {
+				fieldNames.add(fieldName);
+			}
+		}
+		// do configure
+		ExecutionUtils.runRethrow(new RunnableEx() {
+			public void run() throws Exception {
+				configure(KeyEvent.class, fieldNames.toArray(new String[fieldNames.size()]));
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IConfigurablePropertyObject
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void configure(EditorState state, Map<String, Object> parameters) throws Exception {
-    // no external configuration supported
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IConfigurablePropertyObject
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void configure(EditorState state, Map<String, Object> parameters) throws Exception {
+		// no external configuration supported
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/accelerator/KeyStrokePropertyEditor.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/accelerator/KeyStrokePropertyEditor.java
index be790aec3..d8faf019a 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/accelerator/KeyStrokePropertyEditor.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/accelerator/KeyStrokePropertyEditor.java
@@ -55,409 +55,409 @@
  * @coverage swing.property.editor
  */
 public final class KeyStrokePropertyEditor extends TextDialogPropertyEditor {
-  private static final int CTRL_MASK = InputEvent.CTRL_MASK | InputEvent.CTRL_DOWN_MASK;
-  private static final int ALT_MASK = InputEvent.ALT_MASK | InputEvent.ALT_DOWN_MASK;
-  private static final int SHIFT_MASK = InputEvent.SHIFT_MASK | InputEvent.SHIFT_DOWN_MASK;
-  private static final int META_MASK = InputEvent.META_MASK | InputEvent.META_DOWN_MASK;
-  private static final int ALT_GRAPH_MASK = InputEvent.ALT_GRAPH_MASK
-      | InputEvent.ALT_GRAPH_DOWN_MASK;
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final PropertyEditor INSTANCE = new KeyStrokePropertyEditor();
+	private static final int CTRL_MASK = InputEvent.CTRL_MASK | InputEvent.CTRL_DOWN_MASK;
+	private static final int ALT_MASK = InputEvent.ALT_MASK | InputEvent.ALT_DOWN_MASK;
+	private static final int SHIFT_MASK = InputEvent.SHIFT_MASK | InputEvent.SHIFT_DOWN_MASK;
+	private static final int META_MASK = InputEvent.META_MASK | InputEvent.META_DOWN_MASK;
+	private static final int ALT_GRAPH_MASK = InputEvent.ALT_GRAPH_MASK
+			| InputEvent.ALT_GRAPH_DOWN_MASK;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final PropertyEditor INSTANCE = new KeyStrokePropertyEditor();
 
-  private KeyStrokePropertyEditor() {
-  }
+	private KeyStrokePropertyEditor() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getText(Property property) throws Exception {
-    Object value = property.getValue();
-    if (value instanceof KeyStroke) {
-      return getText((KeyStroke) value);
-    }
-    // unknown value
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getText(Property property) throws Exception {
+		Object value = property.getValue();
+		if (value instanceof KeyStroke) {
+			return getText((KeyStroke) value);
+		}
+		// unknown value
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void openDialog(Property property) throws Exception {
-    KeyStrokeDialog dialog = new KeyStrokeDialog(property.getTitle());
-    // set initial KeyStroke
-    {
-      Object value = property.getValue();
-      if (value instanceof KeyStroke) {
-        KeyStroke keyStroke = (KeyStroke) value;
-        int modifiers = keyStroke.getModifiers();
-        int keyCode = keyStroke.getKeyCode();
-        boolean onKeyRelease = keyStroke.isOnKeyRelease();
-        dialog.setKeyStroke(KeyStroke.getKeyStroke(keyCode, modifiers, onKeyRelease));
-      } else {
-        dialog.setKeyStroke(KeyStroke.getKeyStroke(0, 0));
-      }
-    }
-    // open dialog
-    if (dialog.open() == Window.OK) {
-      KeyStroke keyStroke = dialog.getKeyStroke();
-      GenericProperty genericProperty = (GenericProperty) property;
-      // prepare source
-      String source = getKeyStrokeSource(keyStroke);
-      // update source
-      genericProperty.setExpression(source, Property.UNKNOWN_VALUE);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void openDialog(Property property) throws Exception {
+		KeyStrokeDialog dialog = new KeyStrokeDialog(property.getTitle());
+		// set initial KeyStroke
+		{
+			Object value = property.getValue();
+			if (value instanceof KeyStroke) {
+				KeyStroke keyStroke = (KeyStroke) value;
+				int modifiers = keyStroke.getModifiers();
+				int keyCode = keyStroke.getKeyCode();
+				boolean onKeyRelease = keyStroke.isOnKeyRelease();
+				dialog.setKeyStroke(KeyStroke.getKeyStroke(keyCode, modifiers, onKeyRelease));
+			} else {
+				dialog.setKeyStroke(KeyStroke.getKeyStroke(0, 0));
+			}
+		}
+		// open dialog
+		if (dialog.open() == Window.OK) {
+			KeyStroke keyStroke = dialog.getKeyStroke();
+			GenericProperty genericProperty = (GenericProperty) property;
+			// prepare source
+			String source = getKeyStrokeSource(keyStroke);
+			// update source
+			genericProperty.setExpression(source, Property.UNKNOWN_VALUE);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // KeyStrokeDialog
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final class KeyStrokeDialog extends ResizableDialog {
-    private final String m_title;
-    private KeyStroke m_keyStroke;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// KeyStrokeDialog
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final class KeyStrokeDialog extends ResizableDialog {
+		private final String m_title;
+		private KeyStroke m_keyStroke;
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public KeyStrokeDialog(String title) {
-      super(DesignerPlugin.getShell(), Activator.getDefault());
-      m_title = title;
-      setShellStyle(SWT.APPLICATION_MODAL | SWT.DIALOG_TRIM | SWT.RESIZE);
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public KeyStrokeDialog(String title) {
+			super(DesignerPlugin.getShell(), Activator.getDefault());
+			m_title = title;
+			setShellStyle(SWT.APPLICATION_MODAL | SWT.DIALOG_TRIM | SWT.RESIZE);
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Access
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    /**
-     * Sets the {@link KeyStroke} to edit.
-     */
-    public void setKeyStroke(KeyStroke keyStroke) {
-      m_keyStroke = keyStroke;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Access
+		//
+		////////////////////////////////////////////////////////////////////////////
+		/**
+		 * Sets the {@link KeyStroke} to edit.
+		 */
+		public void setKeyStroke(KeyStroke keyStroke) {
+			m_keyStroke = keyStroke;
+		}
 
-    /**
-     * @return the {@link KeyStroke} result.
-     */
-    public KeyStroke getKeyStroke() {
-      return m_keyStroke;
-    }
+		/**
+		 * @return the {@link KeyStroke} result.
+		 */
+		public KeyStroke getKeyStroke() {
+			return m_keyStroke;
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // GUI
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    private Text m_keyStrokeText;
-    private List m_keyCodeList;
-    private final Map<Integer, Button> m_modifierToButton = Maps.newHashMap();
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// GUI
+		//
+		////////////////////////////////////////////////////////////////////////////
+		private Text m_keyStrokeText;
+		private List m_keyCodeList;
+		private final Map<Integer, Button> m_modifierToButton = Maps.newHashMap();
 
-    @Override
-    protected Control createDialogArea(Composite parent) {
-      Composite area = new Composite(parent, SWT.NONE);
-      GridDataFactory.create(area).grab().fill();
-      GridLayoutFactory.create(area);
-      // combination
-      {
-        {
-          Label label = new Label(area, SWT.NONE);
-          label.setText(ModelMessages.KeyStrokePropertyEditor_pressCombination);
-        }
-        {
-          m_keyStrokeText = new Text(area, SWT.BORDER | SWT.READ_ONLY);
-          GridDataFactory.create(m_keyStrokeText).grabH().fillH();
-          m_keyStrokeText.addListener(SWT.KeyDown, new Listener() {
-            public void handleEvent(Event event) {
-              int unmodifiedAccelerator = SWTKeySupport.convertEventToUnmodifiedAccelerator(event);
-              int keyCode = unmodifiedAccelerator & 0xFFFF;
-              if (keyCode != 0) {
-                int modifiers = 0;
-                if ((unmodifiedAccelerator & SWT.CTRL) != 0) {
-                  modifiers |= CTRL_MASK;
-                }
-                if ((unmodifiedAccelerator & SWT.ALT) != 0) {
-                  modifiers |= ALT_MASK;
-                }
-                if ((unmodifiedAccelerator & SWT.SHIFT) != 0) {
-                  modifiers |= SHIFT_MASK;
-                }
-                // set new KeyStroke
-                m_keyStroke = KeyStroke.getKeyStroke(keyCode, modifiers);
-                displayKeyStroke();
-              }
-            }
-          });
-        }
-      }
-      // properties
-      {
-        Group propertiesGroup = new Group(area, SWT.NONE);
-        GridDataFactory.create(propertiesGroup).grab().fill();
-        GridLayoutFactory.create(propertiesGroup);
-        propertiesGroup.setText(ModelMessages.KeyStrokePropertyEditor_keyStrokeProperties);
-        // modifiers
-        {
-          Group modifiersGroup = new Group(propertiesGroup, SWT.NONE);
-          GridDataFactory.create(modifiersGroup).grabH().fillH();
-          GridLayoutFactory.create(modifiersGroup).columns(5);
-          modifiersGroup.setText(ModelMessages.KeyStrokePropertyEditor_modifiers);
-          addModifierButton(modifiersGroup, CTRL_MASK, "&Ctrl");
-          addModifierButton(modifiersGroup, ALT_MASK, "&Alt");
-          addModifierButton(modifiersGroup, SHIFT_MASK, "&Shift");
-          addModifierButton(modifiersGroup, META_MASK, "&Meta");
-          addModifierButton(modifiersGroup, ALT_GRAPH_MASK, "Alt &Gr");
-        }
-        // key code
-        {
-          Group keyGroup = new Group(propertiesGroup, SWT.NONE);
-          GridDataFactory.create(keyGroup).grab().fill();
-          GridLayoutFactory.create(keyGroup);
-          keyGroup.setText(ModelMessages.KeyStrokePropertyEditor_keyCode);
-          //
-          m_keyCodeList = new List(keyGroup, SWT.BORDER | SWT.V_SCROLL);
-          GridDataFactory.create(m_keyCodeList).hintC(50, 15).grab().fill();
-          // add items
-          prepareKeyMaps();
-          for (String name : m_keyFields) {
-            m_keyCodeList.add(name);
-          }
-          // add listener
-          m_keyCodeList.addListener(SWT.Selection, new Listener() {
-            public void handleEvent(Event event) {
-              int modifiers = m_keyStroke.getModifiers();
-              boolean onKeyRelease = m_keyStroke.isOnKeyRelease();
-              // prepare keyCode
-              int keyCode;
-              {
-                String name = m_keyCodeList.getSelection()[0];
-                keyCode = getKeyCode(name);
-              }
-              // update existing KeyStroke
-              m_keyStroke = KeyStroke.getKeyStroke(keyCode, modifiers, onKeyRelease);
-              displayKeyStroke();
-            }
-          });
-        }
-      }
-      //
-      displayKeyStroke();
-      return area;
-    }
+		@Override
+		protected Control createDialogArea(Composite parent) {
+			Composite area = new Composite(parent, SWT.NONE);
+			GridDataFactory.create(area).grab().fill();
+			GridLayoutFactory.create(area);
+			// combination
+			{
+				{
+					Label label = new Label(area, SWT.NONE);
+					label.setText(ModelMessages.KeyStrokePropertyEditor_pressCombination);
+				}
+				{
+					m_keyStrokeText = new Text(area, SWT.BORDER | SWT.READ_ONLY);
+					GridDataFactory.create(m_keyStrokeText).grabH().fillH();
+					m_keyStrokeText.addListener(SWT.KeyDown, new Listener() {
+						public void handleEvent(Event event) {
+							int unmodifiedAccelerator = SWTKeySupport.convertEventToUnmodifiedAccelerator(event);
+							int keyCode = unmodifiedAccelerator & 0xFFFF;
+							if (keyCode != 0) {
+								int modifiers = 0;
+								if ((unmodifiedAccelerator & SWT.CTRL) != 0) {
+									modifiers |= CTRL_MASK;
+								}
+								if ((unmodifiedAccelerator & SWT.ALT) != 0) {
+									modifiers |= ALT_MASK;
+								}
+								if ((unmodifiedAccelerator & SWT.SHIFT) != 0) {
+									modifiers |= SHIFT_MASK;
+								}
+								// set new KeyStroke
+								m_keyStroke = KeyStroke.getKeyStroke(keyCode, modifiers);
+								displayKeyStroke();
+							}
+						}
+					});
+				}
+			}
+			// properties
+			{
+				Group propertiesGroup = new Group(area, SWT.NONE);
+				GridDataFactory.create(propertiesGroup).grab().fill();
+				GridLayoutFactory.create(propertiesGroup);
+				propertiesGroup.setText(ModelMessages.KeyStrokePropertyEditor_keyStrokeProperties);
+				// modifiers
+				{
+					Group modifiersGroup = new Group(propertiesGroup, SWT.NONE);
+					GridDataFactory.create(modifiersGroup).grabH().fillH();
+					GridLayoutFactory.create(modifiersGroup).columns(5);
+					modifiersGroup.setText(ModelMessages.KeyStrokePropertyEditor_modifiers);
+					addModifierButton(modifiersGroup, CTRL_MASK, "&Ctrl");
+					addModifierButton(modifiersGroup, ALT_MASK, "&Alt");
+					addModifierButton(modifiersGroup, SHIFT_MASK, "&Shift");
+					addModifierButton(modifiersGroup, META_MASK, "&Meta");
+					addModifierButton(modifiersGroup, ALT_GRAPH_MASK, "Alt &Gr");
+				}
+				// key code
+				{
+					Group keyGroup = new Group(propertiesGroup, SWT.NONE);
+					GridDataFactory.create(keyGroup).grab().fill();
+					GridLayoutFactory.create(keyGroup);
+					keyGroup.setText(ModelMessages.KeyStrokePropertyEditor_keyCode);
+					//
+					m_keyCodeList = new List(keyGroup, SWT.BORDER | SWT.V_SCROLL);
+					GridDataFactory.create(m_keyCodeList).hintC(50, 15).grab().fill();
+					// add items
+					prepareKeyMaps();
+					for (String name : m_keyFields) {
+						m_keyCodeList.add(name);
+					}
+					// add listener
+					m_keyCodeList.addListener(SWT.Selection, new Listener() {
+						public void handleEvent(Event event) {
+							int modifiers = m_keyStroke.getModifiers();
+							boolean onKeyRelease = m_keyStroke.isOnKeyRelease();
+							// prepare keyCode
+							int keyCode;
+							{
+								String name = m_keyCodeList.getSelection()[0];
+								keyCode = getKeyCode(name);
+							}
+							// update existing KeyStroke
+							m_keyStroke = KeyStroke.getKeyStroke(keyCode, modifiers, onKeyRelease);
+							displayKeyStroke();
+						}
+					});
+				}
+			}
+			//
+			displayKeyStroke();
+			return area;
+		}
 
-    /**
-     * Creates check {@link Button} for given modifier.
-     */
-    private void addModifierButton(Composite parent, final int modifier, String title) {
-      final Button button = new Button(parent, SWT.CHECK);
-      button.setText(title);
-      m_modifierToButton.put(modifier, button);
-      // add listener
-      button.addListener(SWT.Selection, new Listener() {
-        public void handleEvent(Event event) {
-          int modifiers = m_keyStroke.getModifiers();
-          int keyCode = m_keyStroke.getKeyCode();
-          boolean onKeyRelease = m_keyStroke.isOnKeyRelease();
-          // update modifiers
-          if (button.getSelection()) {
-            modifiers |= modifier;
-          } else {
-            modifiers &= ~modifier;
-          }
-          // update existing KeyStroke
-          m_keyStroke = KeyStroke.getKeyStroke(keyCode, modifiers, onKeyRelease);
-          displayKeyStroke();
-        }
-      });
-    }
+		/**
+		 * Creates check {@link Button} for given modifier.
+		 */
+		private void addModifierButton(Composite parent, final int modifier, String title) {
+			final Button button = new Button(parent, SWT.CHECK);
+			button.setText(title);
+			m_modifierToButton.put(modifier, button);
+			// add listener
+			button.addListener(SWT.Selection, new Listener() {
+				public void handleEvent(Event event) {
+					int modifiers = m_keyStroke.getModifiers();
+					int keyCode = m_keyStroke.getKeyCode();
+					boolean onKeyRelease = m_keyStroke.isOnKeyRelease();
+					// update modifiers
+					if (button.getSelection()) {
+						modifiers |= modifier;
+					} else {
+						modifiers &= ~modifier;
+					}
+					// update existing KeyStroke
+					m_keyStroke = KeyStroke.getKeyStroke(keyCode, modifiers, onKeyRelease);
+					displayKeyStroke();
+				}
+			});
+		}
 
-    @Override
-    protected void configureShell(Shell newShell) {
-      super.configureShell(newShell);
-      newShell.setText(m_title);
-    }
+		@Override
+		protected void configureShell(Shell newShell) {
+			super.configureShell(newShell);
+			newShell.setText(m_title);
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Internal
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    private void displayKeyStroke() {
-      m_keyStrokeText.setText(KeyStrokePropertyEditor.getText(m_keyStroke));
-      // update modifiers buttons
-      for (Map.Entry<Integer, Button> entry : m_modifierToButton.entrySet()) {
-        int modifier = entry.getKey();
-        Button button = entry.getValue();
-        if ((m_keyStroke.getModifiers() & modifier) != 0) {
-          button.setSelection(true);
-        } else {
-          button.setSelection(false);
-        }
-      }
-      // update key code list
-      m_keyCodeList.setSelection(new String[]{getKeyName(m_keyStroke.getKeyCode())});
-    }
-  }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Internal
+		//
+		////////////////////////////////////////////////////////////////////////////
+		private void displayKeyStroke() {
+			m_keyStrokeText.setText(KeyStrokePropertyEditor.getText(m_keyStroke));
+			// update modifiers buttons
+			for (Map.Entry<Integer, Button> entry : m_modifierToButton.entrySet()) {
+				int modifier = entry.getKey();
+				Button button = entry.getValue();
+				if ((m_keyStroke.getModifiers() & modifier) != 0) {
+					button.setSelection(true);
+				} else {
+					button.setSelection(false);
+				}
+			}
+			// update key code list
+			m_keyCodeList.setSelection(new String[]{getKeyName(m_keyStroke.getKeyCode())});
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // KeyStroke utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the textual presentation of given {@link KeyStroke}.
-   */
-  private static String getText(KeyStroke stroke) {
-    try {
-      // prepare modifiers
-      String modifiersText = "";
-      {
-        int modifiers = stroke.getModifiers();
-        if ((modifiers & CTRL_MASK) != 0) {
-          modifiersText += "Ctrl+";
-        }
-        if ((modifiers & ALT_MASK) != 0) {
-          modifiersText += "Alt+";
-        }
-        if ((modifiers & SHIFT_MASK) != 0) {
-          modifiersText += "Shift+";
-        }
-        if ((modifiers & META_MASK) != 0) {
-          modifiersText += "Meta+";
-        }
-        if ((modifiers & ALT_GRAPH_MASK) != 0) {
-          modifiersText += "AltGr+";
-        }
-        // remove trailing '+'
-        if (modifiersText.length() != 0) {
-          modifiersText = StringUtils.substring(modifiersText, 0, -1);
-        }
-      }
-      // add key
-      int keyCode = stroke.getKeyCode();
-      if (keyCode != KeyEvent.VK_UNDEFINED) {
-        return modifiersText + "-" + getKeyName(keyCode);
-      }
-      // no key
-      return modifiersText;
-    } catch (Throwable e) {
-      DesignerPlugin.log(e);
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// KeyStroke utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the textual presentation of given {@link KeyStroke}.
+	 */
+	private static String getText(KeyStroke stroke) {
+		try {
+			// prepare modifiers
+			String modifiersText = "";
+			{
+				int modifiers = stroke.getModifiers();
+				if ((modifiers & CTRL_MASK) != 0) {
+					modifiersText += "Ctrl+";
+				}
+				if ((modifiers & ALT_MASK) != 0) {
+					modifiersText += "Alt+";
+				}
+				if ((modifiers & SHIFT_MASK) != 0) {
+					modifiersText += "Shift+";
+				}
+				if ((modifiers & META_MASK) != 0) {
+					modifiersText += "Meta+";
+				}
+				if ((modifiers & ALT_GRAPH_MASK) != 0) {
+					modifiersText += "AltGr+";
+				}
+				// remove trailing '+'
+				if (modifiersText.length() != 0) {
+					modifiersText = StringUtils.substring(modifiersText, 0, -1);
+				}
+			}
+			// add key
+			int keyCode = stroke.getKeyCode();
+			if (keyCode != KeyEvent.VK_UNDEFINED) {
+				return modifiersText + "-" + getKeyName(keyCode);
+			}
+			// no key
+			return modifiersText;
+		} catch (Throwable e) {
+			DesignerPlugin.log(e);
+		}
+		return null;
+	}
 
-  /**
-   * @return the source for given {@link KeyStroke}.
-   */
-  private static String getKeyStrokeSource(KeyStroke keyStroke) {
-    // prepare modifiers source
-    String modifiersSource = "";
-    {
-      int modifiers = keyStroke.getModifiers();
-      if ((modifiers & CTRL_MASK) != 0) {
-        modifiersSource += "java.awt.event.InputEvent.CTRL_DOWN_MASK | ";
-      }
-      if ((modifiers & ALT_MASK) != 0) {
-        modifiersSource += "java.awt.event.InputEvent.ALT_DOWN_MASK | ";
-      }
-      if ((modifiers & SHIFT_MASK) != 0) {
-        modifiersSource += "java.awt.event.InputEvent.SHIFT_DOWN_MASK | ";
-      }
-      if ((modifiers & META_MASK) != 0) {
-        modifiersSource += "java.awt.event.InputEvent.META_DOWN_MASK | ";
-      }
-      if ((modifiers & ALT_GRAPH_MASK) != 0) {
-        modifiersSource += "java.awt.event.InputEvent.ALT_GRAPH_DOWN_MASK | ";
-      }
-      //
-      if (modifiersSource.length() != 0) {
-        modifiersSource = StringUtils.substring(modifiersSource, 0, -" | ".length());
-      } else {
-        modifiersSource = "0";
-      }
-    }
-    // prepare key source
-    String keyCodeSource;
-    {
-      String keyName = getKeyName(keyStroke.getKeyCode());
-      if (keyName == null) {
-        return null;
-      }
-      keyCodeSource = "java.awt.event.KeyEvent.VK_" + keyName;
-    }
-    // prepare source
-    return "javax.swing.KeyStroke.getKeyStroke(" + keyCodeSource + ", " + modifiersSource + ")";
-  }
+	/**
+	 * @return the source for given {@link KeyStroke}.
+	 */
+	private static String getKeyStrokeSource(KeyStroke keyStroke) {
+		// prepare modifiers source
+		String modifiersSource = "";
+		{
+			int modifiers = keyStroke.getModifiers();
+			if ((modifiers & CTRL_MASK) != 0) {
+				modifiersSource += "java.awt.event.InputEvent.CTRL_DOWN_MASK | ";
+			}
+			if ((modifiers & ALT_MASK) != 0) {
+				modifiersSource += "java.awt.event.InputEvent.ALT_DOWN_MASK | ";
+			}
+			if ((modifiers & SHIFT_MASK) != 0) {
+				modifiersSource += "java.awt.event.InputEvent.SHIFT_DOWN_MASK | ";
+			}
+			if ((modifiers & META_MASK) != 0) {
+				modifiersSource += "java.awt.event.InputEvent.META_DOWN_MASK | ";
+			}
+			if ((modifiers & ALT_GRAPH_MASK) != 0) {
+				modifiersSource += "java.awt.event.InputEvent.ALT_GRAPH_DOWN_MASK | ";
+			}
+			//
+			if (modifiersSource.length() != 0) {
+				modifiersSource = StringUtils.substring(modifiersSource, 0, -" | ".length());
+			} else {
+				modifiersSource = "0";
+			}
+		}
+		// prepare key source
+		String keyCodeSource;
+		{
+			String keyName = getKeyName(keyStroke.getKeyCode());
+			if (keyName == null) {
+				return null;
+			}
+			keyCodeSource = "java.awt.event.KeyEvent.VK_" + keyName;
+		}
+		// prepare source
+		return "javax.swing.KeyStroke.getKeyStroke(" + keyCodeSource + ", " + modifiersSource + ")";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Key codes
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static java.util.List<String> m_keyFields;
-  private static Map<Integer, String> m_keyCodeToName;
-  private static Map<String, Integer> m_keyNameToCode;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Key codes
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static java.util.List<String> m_keyFields;
+	private static Map<Integer, String> m_keyCodeToName;
+	private static Map<String, Integer> m_keyNameToCode;
 
-  /**
-   * @return the name of key with given code.
-   */
-  private static String getKeyName(int keyCode) {
-    prepareKeyMaps();
-    return m_keyCodeToName.get(keyCode);
-  }
+	/**
+	 * @return the name of key with given code.
+	 */
+	private static String getKeyName(int keyCode) {
+		prepareKeyMaps();
+		return m_keyCodeToName.get(keyCode);
+	}
 
-  /**
-   * @return the code of key with given name.
-   */
-  private static int getKeyCode(String keyName) {
-    prepareKeyMaps();
-    Integer value = m_keyNameToCode.get(keyName);
-    if (value != null) {
-      return value.intValue();
-    }
-    return KeyEvent.VK_UNDEFINED;
-  }
+	/**
+	 * @return the code of key with given name.
+	 */
+	private static int getKeyCode(String keyName) {
+		prepareKeyMaps();
+		Integer value = m_keyNameToCode.get(keyName);
+		if (value != null) {
+			return value.intValue();
+		}
+		return KeyEvent.VK_UNDEFINED;
+	}
 
-  /**
-   * Prepares {@link Map}'s for key code/name conversion.
-   */
-  private static synchronized void prepareKeyMaps() {
-    if (m_keyCodeToName == null) {
-      m_keyFields = Lists.newArrayList();
-      m_keyCodeToName = Maps.newTreeMap();
-      m_keyNameToCode = Maps.newTreeMap();
-      // add fields
-      try {
-        int expected_modifiers = Modifier.PUBLIC | Modifier.STATIC | Modifier.FINAL;
-        Field[] fields = KeyEvent.class.getDeclaredFields();
-        for (int i = 0; i < fields.length; i++) {
-          Field field = fields[i];
-          if (field.getModifiers() == expected_modifiers
-              && field.getType() == Integer.TYPE
-              && field.getName().startsWith("VK_")) {
-            String name = field.getName().substring(3);
-            Integer value = (Integer) field.get(null);
-            m_keyFields.add(name);
-            m_keyCodeToName.put(value, name);
-            m_keyNameToCode.put(name, value);
-          }
-        }
-      } catch (Throwable e) {
-        DesignerPlugin.log(e);
-      }
-    }
-  }
+	/**
+	 * Prepares {@link Map}'s for key code/name conversion.
+	 */
+	private static synchronized void prepareKeyMaps() {
+		if (m_keyCodeToName == null) {
+			m_keyFields = Lists.newArrayList();
+			m_keyCodeToName = Maps.newTreeMap();
+			m_keyNameToCode = Maps.newTreeMap();
+			// add fields
+			try {
+				int expected_modifiers = Modifier.PUBLIC | Modifier.STATIC | Modifier.FINAL;
+				Field[] fields = KeyEvent.class.getDeclaredFields();
+				for (int i = 0; i < fields.length; i++) {
+					Field field = fields[i];
+					if (field.getModifiers() == expected_modifiers
+							&& field.getType() == Integer.TYPE
+							&& field.getName().startsWith("VK_")) {
+						String name = field.getName().substring(3);
+						Integer value = (Integer) field.get(null);
+						m_keyFields.add(name);
+						m_keyCodeToName.put(value, name);
+						m_keyNameToCode.put(name, value);
+					}
+				}
+			} catch (Throwable e) {
+				DesignerPlugin.log(e);
+			}
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/alignment/AlignmentPropertyEditor.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/alignment/AlignmentPropertyEditor.java
index bf811dfc1..2086eded4 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/alignment/AlignmentPropertyEditor.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/alignment/AlignmentPropertyEditor.java
@@ -42,91 +42,91 @@
  * @coverage swing.property.editor
  */
 abstract class AlignmentPropertyEditor extends FloatPropertyEditor {
-  private final Map<Float, ButtonPropertyEditorPresentation> m_valueToPresentation =
-      Maps.newHashMap();
+	private final Map<Float, ButtonPropertyEditorPresentation> m_valueToPresentation =
+			Maps.newHashMap();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AlignmentPropertyEditor(String[] fields, String[] images) {
-    Assert.equals(fields.length, images.length);
-    for (int i = 0; i < fields.length; i++) {
-      final String field = fields[i];
-      final float value = ReflectionUtils.getFieldFloat(Component.class, field);
-      final Image image = Activator.getImage("info/alignment/" + images[i]);
-      ButtonPropertyEditorPresentation presentation =
-          new ButtonPropertyEditorPresentation(SWT.TOGGLE) {
-            @Override
-            protected Image getImage() {
-              return image;
-            }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AlignmentPropertyEditor(String[] fields, String[] images) {
+		Assert.equals(fields.length, images.length);
+		for (int i = 0; i < fields.length; i++) {
+			final String field = fields[i];
+			final float value = ReflectionUtils.getFieldFloat(Component.class, field);
+			final Image image = Activator.getImage("info/alignment/" + images[i]);
+			ButtonPropertyEditorPresentation presentation =
+					new ButtonPropertyEditorPresentation(SWT.TOGGLE) {
+				@Override
+				protected Image getImage() {
+					return image;
+				}
 
-            @Override
-            protected String getTooltip() {
-              return field;
-            }
+				@Override
+				protected String getTooltip() {
+					return field;
+				}
 
-            @Override
-            protected void onClick(PropertyTable propertyTable, Property property) throws Exception {
-              GenericProperty genericProperty = (GenericProperty) property;
-              genericProperty.setExpression("java.awt.Component." + field, value);
-            }
-          };
-      m_presentation.add(presentation);
-      // remember presentation for value
-      m_valueToPresentation.put(value, presentation);
-    }
-  }
+				@Override
+				protected void onClick(PropertyTable propertyTable, Property property) throws Exception {
+					GenericProperty genericProperty = (GenericProperty) property;
+					genericProperty.setExpression("java.awt.Component." + field, value);
+				}
+			};
+			m_presentation.add(presentation);
+			// remember presentation for value
+			m_valueToPresentation.put(value, presentation);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final CompoundPropertyEditorPresentation m_presentation =
-      new CompoundPropertyEditorPresentation() {
-        @Override
-        public int show(final PropertyTable propertyTable,
-            final Property property,
-            int x,
-            int y,
-            int width,
-            int height) {
-          int presentationWidth = super.show(propertyTable, property, x, y, width, height);
-          ExecutionUtils.runLog(new RunnableEx() {
-            public void run() throws Exception {
-              selectButtonByValue(propertyTable, property);
-            }
-          });
-          return presentationWidth;
-        }
-      };
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final CompoundPropertyEditorPresentation m_presentation =
+			new CompoundPropertyEditorPresentation() {
+		@Override
+		public int show(final PropertyTable propertyTable,
+				final Property property,
+				int x,
+				int y,
+				int width,
+				int height) {
+			int presentationWidth = super.show(propertyTable, property, x, y, width, height);
+			ExecutionUtils.runLog(new RunnableEx() {
+				public void run() throws Exception {
+					selectButtonByValue(propertyTable, property);
+				}
+			});
+			return presentationWidth;
+		}
+	};
 
-  @Override
-  public PropertyEditorPresentation getPresentation() {
-    return m_presentation;
-  }
+	@Override
+	public PropertyEditorPresentation getPresentation() {
+		return m_presentation;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Selects {@link ButtonPropertyEditorPresentation} that corresponds to current value of
-   * {@link Property}.
-   */
-  private void selectButtonByValue(PropertyTable propertyTable, Property property) throws Exception {
-    Object value = property.getValue();
-    for (Map.Entry<Float, ButtonPropertyEditorPresentation> entry : m_valueToPresentation.entrySet()) {
-      ButtonPropertyEditorPresentation presentation = entry.getValue();
-      if (entry.getKey().equals(value)) {
-        presentation.setSelection(propertyTable, property, true);
-      } else {
-        presentation.setSelection(propertyTable, property, false);
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Selects {@link ButtonPropertyEditorPresentation} that corresponds to current value of
+	 * {@link Property}.
+	 */
+	private void selectButtonByValue(PropertyTable propertyTable, Property property) throws Exception {
+		Object value = property.getValue();
+		for (Map.Entry<Float, ButtonPropertyEditorPresentation> entry : m_valueToPresentation.entrySet()) {
+			ButtonPropertyEditorPresentation presentation = entry.getValue();
+			if (entry.getKey().equals(value)) {
+				presentation.setSelection(propertyTable, property, true);
+			} else {
+				presentation.setSelection(propertyTable, property, false);
+			}
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/alignment/AlignmentXPropertyEditor.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/alignment/AlignmentXPropertyEditor.java
index a45ecca10..585e5863a 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/alignment/AlignmentXPropertyEditor.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/alignment/AlignmentXPropertyEditor.java
@@ -21,10 +21,10 @@
  * @coverage swing.property.editor
  */
 public final class AlignmentXPropertyEditor extends AlignmentPropertyEditor {
-  public AlignmentXPropertyEditor() {
-    super(new String[]{"RIGHT_ALIGNMENT", "CENTER_ALIGNMENT", "LEFT_ALIGNMENT",}, new String[]{
-        "right.gif",
-        "center.gif",
-        "left.gif",});
-  }
+	public AlignmentXPropertyEditor() {
+		super(new String[]{"RIGHT_ALIGNMENT", "CENTER_ALIGNMENT", "LEFT_ALIGNMENT",}, new String[]{
+				"right.gif",
+				"center.gif",
+				"left.gif",});
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/alignment/AlignmentYPropertyEditor.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/alignment/AlignmentYPropertyEditor.java
index 0688fdf40..36c92b912 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/alignment/AlignmentYPropertyEditor.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/alignment/AlignmentYPropertyEditor.java
@@ -21,10 +21,10 @@
  * @coverage swing.property.editor
  */
 public final class AlignmentYPropertyEditor extends AlignmentPropertyEditor {
-  public AlignmentYPropertyEditor() {
-    super(new String[]{"BOTTOM_ALIGNMENT", "CENTER_ALIGNMENT", "TOP_ALIGNMENT",}, new String[]{
-        "bottom.gif",
-        "middle.gif",
-        "top.gif",});
-  }
+	public AlignmentYPropertyEditor() {
+		super(new String[]{"BOTTOM_ALIGNMENT", "CENTER_ALIGNMENT", "TOP_ALIGNMENT",}, new String[]{
+				"bottom.gif",
+				"middle.gif",
+				"top.gif",});
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/beans/ComboPropertyEditor.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/beans/ComboPropertyEditor.java
index a2cd7a423..883c03849 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/beans/ComboPropertyEditor.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/beans/ComboPropertyEditor.java
@@ -26,77 +26,77 @@
  * @coverage swing.property.beans
  */
 public final class ComboPropertyEditor extends AbstractComboPropertyEditor
-    implements
-      IValueSourcePropertyEditor {
-  private final PropertyEditorWrapper m_editorWrapper;
+implements
+IValueSourcePropertyEditor {
+	private final PropertyEditorWrapper m_editorWrapper;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ComboPropertyEditor(PropertyEditorWrapper editorWrapper) {
-    m_editorWrapper = editorWrapper;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ComboPropertyEditor(PropertyEditorWrapper editorWrapper) {
+		m_editorWrapper = editorWrapper;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Combo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void addItems(Property property, CCombo3 combo) throws Exception {
-    for (String item : getTags(property)) {
-      combo.add(item);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Combo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void addItems(Property property, CCombo3 combo) throws Exception {
+		for (String item : getTags(property)) {
+			combo.add(item);
+		}
+	}
 
-  @Override
-  protected void selectItem(Property property, CCombo3 combo) throws Exception {
-    combo.setText(getText(property));
-  }
+	@Override
+	protected void selectItem(Property property, CCombo3 combo) throws Exception {
+		combo.setText(getText(property));
+	}
 
-  @Override
-  protected void toPropertyEx(Property property, CCombo3 combo, int index) throws Exception {
-    String[] items = getTags(property);
-    m_editorWrapper.setText(property, items[index]);
-  }
+	@Override
+	protected void toPropertyEx(Property property, CCombo3 combo, int index) throws Exception {
+		String[] items = getTags(property);
+		m_editorWrapper.setText(property, items[index]);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IValueSourcePropertyEditor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public String getValueSource(Object value) throws Exception {
-    return m_editorWrapper.getSource(value);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IValueSourcePropertyEditor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public String getValueSource(Object value) throws Exception {
+		return m_editorWrapper.getSource(value);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public PropertyEditorPresentation getPresentation() {
-    return m_editorWrapper.getPresentation();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public PropertyEditorPresentation getPresentation() {
+		return m_editorWrapper.getPresentation();
+	}
 
-  @Override
-  protected String getText(Property property) throws Exception {
-    return m_editorWrapper.getText(property);
-  }
+	@Override
+	protected String getText(Property property) throws Exception {
+		return m_editorWrapper.getText(property);
+	}
 
-  @Override
-  public void paint(Property property, GC gc, int x, int y, int width, int height) throws Exception {
-    m_editorWrapper.paint(property, gc, x, y, width, height);
-  }
+	@Override
+	public void paint(Property property, GC gc, int x, int y, int width, int height) throws Exception {
+		m_editorWrapper.paint(property, gc, x, y, width, height);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private String[] getTags(Property property) throws Exception {
-    return m_editorWrapper.getTags(property);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private String[] getTags(Property property) throws Exception {
+		return m_editorWrapper.getTags(property);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/beans/JavaBeanEditorProvider.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/beans/JavaBeanEditorProvider.java
index 653504cd2..eb391f3ae 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/beans/JavaBeanEditorProvider.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/beans/JavaBeanEditorProvider.java
@@ -25,58 +25,58 @@
  * @coverage swing.property.beans
  */
 public final class JavaBeanEditorProvider extends PropertyEditorProvider {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // PropertyEditorProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public PropertyEditor getEditorForEditorType(Class<?> editorType) throws Exception {
-    if (java.beans.PropertyEditor.class.isAssignableFrom(editorType)) {
-      try {
-        return createEditor((java.beans.PropertyEditor) editorType.newInstance());
-      } catch (Throwable e) {
-        // silently ignore any errors, as Introspector does
-      }
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// PropertyEditorProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public PropertyEditor getEditorForEditorType(Class<?> editorType) throws Exception {
+		if (java.beans.PropertyEditor.class.isAssignableFrom(editorType)) {
+			try {
+				return createEditor((java.beans.PropertyEditor) editorType.newInstance());
+			} catch (Throwable e) {
+				// silently ignore any errors, as Introspector does
+			}
+		}
+		return null;
+	}
 
-  @Override
-  public PropertyEditor getEditorForType(Class<?> propertyType) throws Exception {
-    String propertyTypeName = propertyType.getName();
-    if (Object.class.isAssignableFrom(propertyType)
-        && propertyType != char[].class
-        && propertyType != byte[].class
-        && propertyType != int[].class
-        && propertyType != int[][].class
-        && propertyTypeName.indexOf("java.lang.") == -1
-        && propertyTypeName.indexOf("java.util.") == -1
-        && propertyTypeName.indexOf("java.awt.") == -1
-        && propertyTypeName.indexOf("javax.swing.") == -1
-        && propertyTypeName.indexOf("org.eclipse.") == -1) {
-      String[] standard_editorSearchPath = PropertyEditorManager.getEditorSearchPath();
-      try {
-        PropertyEditorManager.setEditorSearchPath((String[]) ArrayUtils.removeElement(
-            standard_editorSearchPath,
-            "sun.beans.editors"));
-        java.beans.PropertyEditor propertyEditor = PropertyEditorManager.findEditor(propertyType);
-        if (propertyEditor != null) {
-          return createEditor(propertyEditor);
-        }
-      } finally {
-        PropertyEditorManager.setEditorSearchPath(standard_editorSearchPath);
-      }
-    }
-    return null;
-  }
+	@Override
+	public PropertyEditor getEditorForType(Class<?> propertyType) throws Exception {
+		String propertyTypeName = propertyType.getName();
+		if (Object.class.isAssignableFrom(propertyType)
+				&& propertyType != char[].class
+				&& propertyType != byte[].class
+				&& propertyType != int[].class
+				&& propertyType != int[][].class
+				&& propertyTypeName.indexOf("java.lang.") == -1
+				&& propertyTypeName.indexOf("java.util.") == -1
+				&& propertyTypeName.indexOf("java.awt.") == -1
+				&& propertyTypeName.indexOf("javax.swing.") == -1
+				&& propertyTypeName.indexOf("org.eclipse.") == -1) {
+			String[] standard_editorSearchPath = PropertyEditorManager.getEditorSearchPath();
+			try {
+				PropertyEditorManager.setEditorSearchPath((String[]) ArrayUtils.removeElement(
+						standard_editorSearchPath,
+						"sun.beans.editors"));
+				java.beans.PropertyEditor propertyEditor = PropertyEditorManager.findEditor(propertyType);
+				if (propertyEditor != null) {
+					return createEditor(propertyEditor);
+				}
+			} finally {
+				PropertyEditorManager.setEditorSearchPath(standard_editorSearchPath);
+			}
+		}
+		return null;
+	}
 
-  private static PropertyEditor createEditor(java.beans.PropertyEditor propertyEditor)
-      throws Exception {
-    PropertyEditorWrapper editorSite = new PropertyEditorWrapper(propertyEditor);
-    if (editorSite.getTags(null) == null) {
-      return new TextPropertyEditor(editorSite);
-    }
-    return new ComboPropertyEditor(editorSite);
-  }
+	private static PropertyEditor createEditor(java.beans.PropertyEditor propertyEditor)
+			throws Exception {
+		PropertyEditorWrapper editorSite = new PropertyEditorWrapper(propertyEditor);
+		if (editorSite.getTags(null) == null) {
+			return new TextPropertyEditor(editorSite);
+		}
+		return new ComboPropertyEditor(editorSite);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/beans/PropertyEditorWrapper.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/beans/PropertyEditorWrapper.java
index 892cea508..a590bdc7a 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/beans/PropertyEditorWrapper.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/beans/PropertyEditorWrapper.java
@@ -42,177 +42,177 @@
  * @coverage swing.property.beans
  */
 public final class PropertyEditorWrapper {
-  private final java.beans.PropertyEditor m_propertyEditor;
-  private DialogPresentation m_presentation;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public PropertyEditorWrapper(java.beans.PropertyEditor propertyEditor) throws Exception {
-    m_propertyEditor = propertyEditor;
-    if (m_propertyEditor.supportsCustomEditor()) {
-      m_presentation = new DialogPresentation(m_propertyEditor);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static void updatePropertyValue(Property property,
-      java.beans.PropertyEditor propertyEditor) throws Exception {
-    Object value = propertyEditor.getValue();
-    String source = propertyEditor.getJavaInitializationString();
-    GenericProperty genericProperty = (GenericProperty) property;
-    genericProperty.setExpression(source, value);
-  }
-
-  /**
-   * Configures {@link java.beans.PropertyEditor} to be used with given {@link Property}.
-   */
-  private void configure(Property property) throws Exception {
-    if (property != null) {
-      Method method_setSource =
-          ReflectionUtils.getMethodBySignature(
-              m_propertyEditor.getClass(),
-              "setSource(java.lang.Object)");
-      if (method_setSource != null) {
-        Object source = ((GenericProperty) property).getJavaInfo().getObject();
-        method_setSource.invoke(m_propertyEditor, source);
-      }
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public java.beans.PropertyEditor getPropertyEditor() {
-    return m_propertyEditor;
-  }
-
-  public String[] getTags(Property property) throws Exception {
-    configure(property);
-    return m_propertyEditor.getTags();
-  }
-
-  public String getText(Property property) throws Exception {
-    configure(property);
-    m_propertyEditor.setValue(property.getValue());
-    return m_propertyEditor.getAsText();
-  }
-
-  public void setText(Property property, String text) throws Exception {
-    configure(property);
-    m_propertyEditor.setAsText(text);
-    updatePropertyValue(property, m_propertyEditor);
-  }
-
-  public String getSource(Object value) throws Exception {
-    m_propertyEditor.setValue(value);
-    return m_propertyEditor.getJavaInitializationString();
-  }
-
-  public void openDialogEditor(PropertyTable propertyTable, Property property) throws Exception {
-    configure(property);
-    m_presentation.onClick(propertyTable, property);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Paint
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public PropertyEditorPresentation getPresentation() {
-    return m_presentation;
-  }
-
-  public void paint(Property property, GC gc, int x, int y, int width, int height) throws Exception {
-    configure(property);
-    m_propertyEditor.setValue(property.getValue());
-    // paint
-    if (m_propertyEditor.isPaintable()) {
-      Image image = paintValue(gc, width, height);
-      gc.drawImage(image, x, y);
-      image.dispose();
-      return;
-    }
-    // text
-    {
-      String text = m_propertyEditor.getAsText();
-      if (!StringUtils.isEmpty(text)) {
-        DrawUtils.drawStringCV(gc, text, x, y, width, height);
-      }
-    }
-  }
-
-  private Image paintValue(GC gc, int width, int height) throws Exception {
-    // create AWT graphics
-    BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
-    Graphics2D graphics2D = (Graphics2D) image.getGraphics();
-    // prepare color's
-    Color background = gc.getBackground();
-    Color foreground = gc.getForeground();
-    // fill graphics
-    graphics2D.setColor(SwingUtils.getAWTColor(background));
-    graphics2D.fillRect(0, 0, width, height);
-    // set color
-    graphics2D.setBackground(SwingUtils.getAWTColor(background));
-    graphics2D.setColor(SwingUtils.getAWTColor(foreground));
-    // set font
-    FontData[] fontData = gc.getFont().getFontData();
-    String name = fontData.length > 0 ? fontData[0].getName() : "Arial";
-    graphics2D.setFont(new java.awt.Font(name,
-        java.awt.Font.PLAIN,
-        graphics2D.getFont().getSize() - 1));
-    // paint image
-    m_propertyEditor.paintValue(graphics2D, new java.awt.Rectangle(0, 0, width, height));
-    // conversion
-    try {
-      return SwingImageUtils.convertImage_AWT_to_SWT(image);
-    } finally {
-      image.flush();
-      graphics2D.dispose();
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static class DialogPresentation extends ButtonPropertyEditorPresentation {
-    private final java.beans.PropertyEditor m_dialogPropertyEditor;
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public DialogPresentation(java.beans.PropertyEditor propertyEditor) throws Exception {
-      m_dialogPropertyEditor = propertyEditor.getClass().newInstance();
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // ButtonPropertyEditorPresentation
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    protected void onClick(PropertyTable propertyTable, Property property) throws Exception {
-      m_dialogPropertyEditor.setValue(property.getValue());
-      AwtComponentDialog dialog =
-          new AwtComponentDialog(Activator.getDefault(),
-              m_dialogPropertyEditor.getCustomEditor(),
-              ModelMessages.PropertyEditorWrapper_awtComponentDialogTitle,
-              "DialogPropertyEditor: " + m_dialogPropertyEditor.getClass().getName());
-      if (dialog.open() == Window.OK) {
-        updatePropertyValue(property, m_dialogPropertyEditor);
-      }
-    }
-  }
+	private final java.beans.PropertyEditor m_propertyEditor;
+	private DialogPresentation m_presentation;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public PropertyEditorWrapper(java.beans.PropertyEditor propertyEditor) throws Exception {
+		m_propertyEditor = propertyEditor;
+		if (m_propertyEditor.supportsCustomEditor()) {
+			m_presentation = new DialogPresentation(m_propertyEditor);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static void updatePropertyValue(Property property,
+			java.beans.PropertyEditor propertyEditor) throws Exception {
+		Object value = propertyEditor.getValue();
+		String source = propertyEditor.getJavaInitializationString();
+		GenericProperty genericProperty = (GenericProperty) property;
+		genericProperty.setExpression(source, value);
+	}
+
+	/**
+	 * Configures {@link java.beans.PropertyEditor} to be used with given {@link Property}.
+	 */
+	private void configure(Property property) throws Exception {
+		if (property != null) {
+			Method method_setSource =
+					ReflectionUtils.getMethodBySignature(
+							m_propertyEditor.getClass(),
+							"setSource(java.lang.Object)");
+			if (method_setSource != null) {
+				Object source = ((GenericProperty) property).getJavaInfo().getObject();
+				method_setSource.invoke(m_propertyEditor, source);
+			}
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public java.beans.PropertyEditor getPropertyEditor() {
+		return m_propertyEditor;
+	}
+
+	public String[] getTags(Property property) throws Exception {
+		configure(property);
+		return m_propertyEditor.getTags();
+	}
+
+	public String getText(Property property) throws Exception {
+		configure(property);
+		m_propertyEditor.setValue(property.getValue());
+		return m_propertyEditor.getAsText();
+	}
+
+	public void setText(Property property, String text) throws Exception {
+		configure(property);
+		m_propertyEditor.setAsText(text);
+		updatePropertyValue(property, m_propertyEditor);
+	}
+
+	public String getSource(Object value) throws Exception {
+		m_propertyEditor.setValue(value);
+		return m_propertyEditor.getJavaInitializationString();
+	}
+
+	public void openDialogEditor(PropertyTable propertyTable, Property property) throws Exception {
+		configure(property);
+		m_presentation.onClick(propertyTable, property);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Paint
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public PropertyEditorPresentation getPresentation() {
+		return m_presentation;
+	}
+
+	public void paint(Property property, GC gc, int x, int y, int width, int height) throws Exception {
+		configure(property);
+		m_propertyEditor.setValue(property.getValue());
+		// paint
+		if (m_propertyEditor.isPaintable()) {
+			Image image = paintValue(gc, width, height);
+			gc.drawImage(image, x, y);
+			image.dispose();
+			return;
+		}
+		// text
+		{
+			String text = m_propertyEditor.getAsText();
+			if (!StringUtils.isEmpty(text)) {
+				DrawUtils.drawStringCV(gc, text, x, y, width, height);
+			}
+		}
+	}
+
+	private Image paintValue(GC gc, int width, int height) throws Exception {
+		// create AWT graphics
+		BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
+		Graphics2D graphics2D = (Graphics2D) image.getGraphics();
+		// prepare color's
+		Color background = gc.getBackground();
+		Color foreground = gc.getForeground();
+		// fill graphics
+		graphics2D.setColor(SwingUtils.getAWTColor(background));
+		graphics2D.fillRect(0, 0, width, height);
+		// set color
+		graphics2D.setBackground(SwingUtils.getAWTColor(background));
+		graphics2D.setColor(SwingUtils.getAWTColor(foreground));
+		// set font
+		FontData[] fontData = gc.getFont().getFontData();
+		String name = fontData.length > 0 ? fontData[0].getName() : "Arial";
+		graphics2D.setFont(new java.awt.Font(name,
+				java.awt.Font.PLAIN,
+				graphics2D.getFont().getSize() - 1));
+		// paint image
+		m_propertyEditor.paintValue(graphics2D, new java.awt.Rectangle(0, 0, width, height));
+		// conversion
+		try {
+			return SwingImageUtils.convertImage_AWT_to_SWT(image);
+		} finally {
+			image.flush();
+			graphics2D.dispose();
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static class DialogPresentation extends ButtonPropertyEditorPresentation {
+		private final java.beans.PropertyEditor m_dialogPropertyEditor;
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public DialogPresentation(java.beans.PropertyEditor propertyEditor) throws Exception {
+			m_dialogPropertyEditor = propertyEditor.getClass().newInstance();
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// ButtonPropertyEditorPresentation
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		protected void onClick(PropertyTable propertyTable, Property property) throws Exception {
+			m_dialogPropertyEditor.setValue(property.getValue());
+			AwtComponentDialog dialog =
+					new AwtComponentDialog(Activator.getDefault(),
+							m_dialogPropertyEditor.getCustomEditor(),
+							ModelMessages.PropertyEditorWrapper_awtComponentDialogTitle,
+							"DialogPropertyEditor: " + m_dialogPropertyEditor.getClass().getName());
+			if (dialog.open() == Window.OK) {
+				updatePropertyValue(property, m_dialogPropertyEditor);
+			}
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/beans/TextPropertyEditor.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/beans/TextPropertyEditor.java
index 1f70816ac..a45055944 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/beans/TextPropertyEditor.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/beans/TextPropertyEditor.java
@@ -29,92 +29,92 @@
  * @coverage swing.property.beans
  */
 public final class TextPropertyEditor extends AbstractTextPropertyEditor
-    implements
-      IValueSourcePropertyEditor,
-      IClipboardSourceProvider {
-  private final PropertyEditorWrapper m_editorWrapper;
+implements
+IValueSourcePropertyEditor,
+IClipboardSourceProvider {
+	private final PropertyEditorWrapper m_editorWrapper;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public TextPropertyEditor(PropertyEditorWrapper editorWrapper) {
-    m_editorWrapper = editorWrapper;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public TextPropertyEditor(PropertyEditorWrapper editorWrapper) {
+		m_editorWrapper = editorWrapper;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean activate(PropertyTable propertyTable, Property property, Point location)
-      throws Exception {
-    if (getText(property) == null) {
-      if (getPresentation() != null && location == null) {
-        m_editorWrapper.openDialogEditor(propertyTable, property);
-      }
-      return false;
-    }
-    return super.activate(propertyTable, property, location);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean activate(PropertyTable propertyTable, Property property, Point location)
+			throws Exception {
+		if (getText(property) == null) {
+			if (getPresentation() != null && location == null) {
+				m_editorWrapper.openDialogEditor(propertyTable, property);
+			}
+			return false;
+		}
+		return super.activate(propertyTable, property, location);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Text
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getEditorText(Property property) throws Exception {
-    return getText(property);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Text
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getEditorText(Property property) throws Exception {
+		return getText(property);
+	}
 
-  @Override
-  protected boolean setEditorText(Property property, String text) throws Exception {
-    if (text.length() == 0) {
-      property.setValue(Property.UNKNOWN_VALUE);
-    } else {
-      m_editorWrapper.setText(property, text);
-    }
-    return true;
-  }
+	@Override
+	protected boolean setEditorText(Property property, String text) throws Exception {
+		if (text.length() == 0) {
+			property.setValue(Property.UNKNOWN_VALUE);
+		} else {
+			m_editorWrapper.setText(property, text);
+		}
+		return true;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IValueSourcePropertyEditor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public String getValueSource(Object value) throws Exception {
-    return m_editorWrapper.getSource(value);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IValueSourcePropertyEditor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public String getValueSource(Object value) throws Exception {
+		return m_editorWrapper.getSource(value);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IClipboardSourceProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public String getClipboardSource(GenericProperty property) throws Exception {
-    return m_editorWrapper.getSource(property.getValue());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IClipboardSourceProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public String getClipboardSource(GenericProperty property) throws Exception {
+		return m_editorWrapper.getSource(property.getValue());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public PropertyEditorPresentation getPresentation() {
-    return m_editorWrapper.getPresentation();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public PropertyEditorPresentation getPresentation() {
+		return m_editorWrapper.getPresentation();
+	}
 
-  @Override
-  protected String getText(Property property) throws Exception {
-    return m_editorWrapper.getText(property);
-  }
+	@Override
+	protected String getText(Property property) throws Exception {
+		return m_editorWrapper.getText(property);
+	}
 
-  @Override
-  public void paint(Property property, GC gc, int x, int y, int width, int height) throws Exception {
-    m_editorWrapper.paint(property, gc, x, y, width, height);
-  }
+	@Override
+	public void paint(Property property, GC gc, int x, int y, int width, int height) throws Exception {
+		m_editorWrapper.paint(property, gc, x, y, width, height);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/BorderDialog.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/BorderDialog.java
index 41da44cc1..d2fbe5521 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/BorderDialog.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/BorderDialog.java
@@ -66,263 +66,263 @@
  * @coverage swing.property.editor
  */
 public final class BorderDialog extends ResizableDialog {
-  private final AstEditor m_editor;
-  private boolean m_borderModified;
-  private Border m_border;
-  private String m_source;
+	private final AstEditor m_editor;
+	private boolean m_borderModified;
+	private Border m_border;
+	private String m_source;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public BorderDialog(Shell parentShell, AstEditor editor) {
-    super(parentShell, Activator.getDefault());
-    setShellStyle(SWT.DIALOG_TRIM | SWT.RESIZE);
-    m_editor = editor;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public BorderDialog(Shell parentShell, AstEditor editor) {
+		super(parentShell, Activator.getDefault());
+		setShellStyle(SWT.DIALOG_TRIM | SWT.RESIZE);
+		m_editor = editor;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets flag, that {@link Border} is modified.
-   *
-   * @param borderModified
-   *          is <code>false</code>, if {@link Border} is not set, so <code>(default)</code> page
-   *          should be used.
-   */
-  public void setBorderModified(boolean borderModified) {
-    m_borderModified = borderModified;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets flag, that {@link Border} is modified.
+	 *
+	 * @param borderModified
+	 *          is <code>false</code>, if {@link Border} is not set, so <code>(default)</code> page
+	 *          should be used.
+	 */
+	public void setBorderModified(boolean borderModified) {
+		m_borderModified = borderModified;
+	}
 
-  /**
-   * Sets the {@link Border} to edit.
-   */
-  public void setBorder(Border border) {
-    m_border = border;
-  }
+	/**
+	 * Sets the {@link Border} to edit.
+	 */
+	public void setBorder(Border border) {
+		m_border = border;
+	}
 
-  /**
-   * @return the updated {@link Border}.
-   */
-  public Border getBorder() {
-    return m_border;
-  }
+	/**
+	 * @return the updated {@link Border}.
+	 */
+	public Border getBorder() {
+		return m_border;
+	}
 
-  /**
-   * @return the Java source for selected {@link Border}.
-   */
-  public String getBorderSource() {
-    return m_source;
-  }
+	/**
+	 * @return the Java source for selected {@link Border}.
+	 */
+	public String getBorderSource() {
+		return m_source;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private BorderPreviewCanvas m_previewCanvas;
-  private Combo m_typeCombo;
-  private Group m_pagesComposite;
-  private StackLayout m_pagesLayout;
-  private final java.util.List<AbstractBorderComposite> m_pages = Lists.newArrayList();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private BorderPreviewCanvas m_previewCanvas;
+	private Combo m_typeCombo;
+	private Group m_pagesComposite;
+	private StackLayout m_pagesLayout;
+	private final java.util.List<AbstractBorderComposite> m_pages = Lists.newArrayList();
 
-  @Override
-  protected Control createDialogArea(Composite parent) {
-    Composite area = (Composite) super.createDialogArea(parent);
-    GridLayoutFactory.create(area).margins(10);
-    // create Border type combo
-    {
-      Group typeGroup = new Group(area, SWT.NONE);
-      GridDataFactory.create(typeGroup).grabH().fillH();
-      GridLayoutFactory.create(typeGroup);
-      typeGroup.setText(ModelMessages.BorderDialog_type);
-      {
-        m_typeCombo = new Combo(typeGroup, SWT.READ_ONLY);
-        GridDataFactory.create(m_typeCombo).grab().fill();
-        m_typeCombo.addListener(SWT.Selection, new Listener() {
-          public void handleEvent(Event event) {
-            int index = m_typeCombo.getSelectionIndex();
-            m_pagesLayout.topControl = m_pages.get(index);
-            m_pagesComposite.layout();
-            // show Border from new page
-            borderUpdated();
-          }
-        });
-      }
-    }
-    // pages
-    {
-      m_pagesComposite = new Group(area, SWT.NONE);
-      GridDataFactory.create(m_pagesComposite).spanH(2).grab().fill();
-      m_pagesComposite.setText(ModelMessages.BorderDialog_properties);
-      // create pages
-      addPages(m_pagesComposite);
-      m_typeCombo.setVisibleItemCount(m_typeCombo.getItemCount());
-      // set layout
-      m_pagesLayout = new StackLayout();
-      m_pagesLayout.topControl = m_pages.get(0);
-      m_pagesComposite.setLayout(m_pagesLayout);
-    }
-    // create preview
-    {
-      Group previewGroup = new Group(area, SWT.NONE);
-      GridDataFactory.create(previewGroup).spanH(2).grabH().fillH();
-      GridLayoutFactory.create(previewGroup);
-      previewGroup.setText(ModelMessages.BorderDialog_preview);
-      //
-      if (EmbeddedSwingComposite2.canUseAwt()) {
-        m_previewCanvas = new BorderPreviewCanvas(previewGroup, SWT.NONE);
-        GridDataFactory.create(m_previewCanvas).grab().fill().hintV(100);
-      }
-    }
-    //
-    updateGUI();
-    return area;
-  }
+	@Override
+	protected Control createDialogArea(Composite parent) {
+		Composite area = (Composite) super.createDialogArea(parent);
+		GridLayoutFactory.create(area).margins(10);
+		// create Border type combo
+		{
+			Group typeGroup = new Group(area, SWT.NONE);
+			GridDataFactory.create(typeGroup).grabH().fillH();
+			GridLayoutFactory.create(typeGroup);
+			typeGroup.setText(ModelMessages.BorderDialog_type);
+			{
+				m_typeCombo = new Combo(typeGroup, SWT.READ_ONLY);
+				GridDataFactory.create(m_typeCombo).grab().fill();
+				m_typeCombo.addListener(SWT.Selection, new Listener() {
+					public void handleEvent(Event event) {
+						int index = m_typeCombo.getSelectionIndex();
+						m_pagesLayout.topControl = m_pages.get(index);
+						m_pagesComposite.layout();
+						// show Border from new page
+						borderUpdated();
+					}
+				});
+			}
+		}
+		// pages
+		{
+			m_pagesComposite = new Group(area, SWT.NONE);
+			GridDataFactory.create(m_pagesComposite).spanH(2).grab().fill();
+			m_pagesComposite.setText(ModelMessages.BorderDialog_properties);
+			// create pages
+			addPages(m_pagesComposite);
+			m_typeCombo.setVisibleItemCount(m_typeCombo.getItemCount());
+			// set layout
+			m_pagesLayout = new StackLayout();
+			m_pagesLayout.topControl = m_pages.get(0);
+			m_pagesComposite.setLayout(m_pagesLayout);
+		}
+		// create preview
+		{
+			Group previewGroup = new Group(area, SWT.NONE);
+			GridDataFactory.create(previewGroup).spanH(2).grabH().fillH();
+			GridLayoutFactory.create(previewGroup);
+			previewGroup.setText(ModelMessages.BorderDialog_preview);
+			//
+			if (EmbeddedSwingComposite2.canUseAwt()) {
+				m_previewCanvas = new BorderPreviewCanvas(previewGroup, SWT.NONE);
+				GridDataFactory.create(m_previewCanvas).grab().fill().hintV(100);
+			}
+		}
+		//
+		updateGUI();
+		return area;
+	}
 
-  @Override
-  protected void configureShell(Shell newShell) {
-    super.configureShell(newShell);
-    newShell.setText(ModelMessages.BorderDialog_title);
-  }
+	@Override
+	protected void configureShell(Shell newShell) {
+		super.configureShell(newShell);
+		newShell.setText(ModelMessages.BorderDialog_title);
+	}
 
-  @Override
-  protected void okPressed() {
-    m_source = getCurrentBorderSource();
-    super.okPressed();
-  }
+	@Override
+	protected void okPressed() {
+		m_source = getCurrentBorderSource();
+		super.okPressed();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Internal
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Updates GUI using current {@link Border}.
-   */
-  private void updateGUI() {
-    // select page
-    {
-      m_pagesLayout.topControl = m_pages.get(0);
-      ExecutionUtils.runLog(new RunnableEx() {
-        public void run() throws Exception {
-          for (AbstractBorderComposite page : m_pages) {
-            boolean understands = page.setBorder(m_border);
-            if (understands && m_borderModified) {
-              m_pagesLayout.topControl = page;
-            }
-          }
-        }
-      });
-      m_pagesComposite.layout();
-      // select in "type" combo
-      m_typeCombo.select(m_pages.indexOf(m_pagesLayout.topControl));
-    }
-    // update preview
-    if (m_previewCanvas != null) {
-      m_previewCanvas.setBorder(m_border);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Internal
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Updates GUI using current {@link Border}.
+	 */
+	private void updateGUI() {
+		// select page
+		{
+			m_pagesLayout.topControl = m_pages.get(0);
+			ExecutionUtils.runLog(new RunnableEx() {
+				public void run() throws Exception {
+					for (AbstractBorderComposite page : m_pages) {
+						boolean understands = page.setBorder(m_border);
+						if (understands && m_borderModified) {
+							m_pagesLayout.topControl = page;
+						}
+					}
+				}
+			});
+			m_pagesComposite.layout();
+			// select in "type" combo
+			m_typeCombo.select(m_pages.indexOf(m_pagesLayout.topControl));
+		}
+		// update preview
+		if (m_previewCanvas != null) {
+			m_previewCanvas.setBorder(m_border);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Pages
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds new {@link AbstractBorderComposite}.
-   */
-  protected final void addPage(AbstractBorderComposite page) {
-    page.initialize(this, m_editor);
-    m_pages.add(page);
-    m_typeCombo.add(page.getTitle());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Pages
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds new {@link AbstractBorderComposite}.
+	 */
+	protected final void addPage(AbstractBorderComposite page) {
+		page.initialize(this, m_editor);
+		m_pages.add(page);
+		m_typeCombo.add(page.getTitle());
+	}
 
-  /**
-   * Adds {@link AbstractBorderComposite}'s.
-   */
-  protected void addPages(Composite parent) {
-    addPage(new DefaultBorderComposite(parent));
-    addPage(new NoBorderComposite(parent));
-    addPage(new BevelBorderComposite(parent));
-    addPage(new CompoundBorderComposite(parent));
-    addPage(new EmptyBorderComposite(parent));
-    addPage(new EtchedBorderComposite(parent));
-    addPage(new LineBorderComposite(parent));
-    addPage(new MatteBorderComposite(parent));
-    addPage(new SoftBevelBorderComposite(parent));
-    addPage(new TitledBorderComposite(parent));
-    addPage(new SwingBorderComposite(parent));
-  }
+	/**
+	 * Adds {@link AbstractBorderComposite}'s.
+	 */
+	protected void addPages(Composite parent) {
+		addPage(new DefaultBorderComposite(parent));
+		addPage(new NoBorderComposite(parent));
+		addPage(new BevelBorderComposite(parent));
+		addPage(new CompoundBorderComposite(parent));
+		addPage(new EmptyBorderComposite(parent));
+		addPage(new EtchedBorderComposite(parent));
+		addPage(new LineBorderComposite(parent));
+		addPage(new MatteBorderComposite(parent));
+		addPage(new SoftBevelBorderComposite(parent));
+		addPage(new TitledBorderComposite(parent));
+		addPage(new SwingBorderComposite(parent));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Internal access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the source of {@link Border} from currently selected {@link AbstractBorderComposite}.
-   */
-  private String getCurrentBorderSource() {
-    return ExecutionUtils.runObjectLog(new RunnableObjectEx<String>() {
-      public String runObject() throws Exception {
-        int index = m_typeCombo.getSelectionIndex();
-        return m_pages.get(index).getSource();
-      }
-    }, null);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Internal access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the source of {@link Border} from currently selected {@link AbstractBorderComposite}.
+	 */
+	private String getCurrentBorderSource() {
+		return ExecutionUtils.runObjectLog(new RunnableObjectEx<String>() {
+			public String runObject() throws Exception {
+				int index = m_typeCombo.getSelectionIndex();
+				return m_pages.get(index).getSource();
+			}
+		}, null);
+	}
 
-  /**
-   * This method is invoked by {@link AbstractBorderComposite} to notify that something was changed,
-   * so we need to update {@link BorderPreviewCanvas}.
-   */
-  public void borderUpdated() {
-    ExecutionUtils.runIgnore(new RunnableEx() {
-      public void run() throws Exception {
-        borderUpdatedEx();
-      }
-    });
-  }
+	/**
+	 * This method is invoked by {@link AbstractBorderComposite} to notify that something was changed,
+	 * so we need to update {@link BorderPreviewCanvas}.
+	 */
+	public void borderUpdated() {
+		ExecutionUtils.runIgnore(new RunnableEx() {
+			public void run() throws Exception {
+				borderUpdatedEx();
+			}
+		});
+	}
 
-  /**
-   * Implementation of {@link #borderUpdated()}, that throws {@link Exception}.
-   */
-  private void borderUpdatedEx() throws Exception {
-    ICompilationUnit unit = m_editor.getModelUnit().getWorkingCopy(new NullProgressMonitor());
-    try {
-      updateBorderEx(unit);
-    } finally {
-      unit.discardWorkingCopy();
-    }
-  }
+	/**
+	 * Implementation of {@link #borderUpdated()}, that throws {@link Exception}.
+	 */
+	private void borderUpdatedEx() throws Exception {
+		ICompilationUnit unit = m_editor.getModelUnit().getWorkingCopy(new NullProgressMonitor());
+		try {
+			updateBorderEx(unit);
+		} finally {
+			unit.discardWorkingCopy();
+		}
+	}
 
-  private void updateBorderEx(ICompilationUnit unit) throws Exception {
-    // prepare Border expression
-    Expression borderExpression;
-    {
-      String borderSource = getCurrentBorderSource();
-      unit.getBuffer().setContents(
-          StringUtils.join(new String[]{
-              "class __Foo {",
-              "  private javax.swing.border.Border border = " + borderSource,
-              "}"}, "\n"));
-      AstEditor editor = new AstEditor(unit);
-      FieldDeclaration fieldDeclaration =
-          DomGenerics.types(editor.getAstUnit()).get(0).getFields()[0];
-      borderExpression = DomGenerics.fragments(fieldDeclaration).get(0).getInitializer();
-    }
-    // evaluate Border expression
-    {
-      ClassLoader classLoader = EditorState.get(m_editor).getEditorLoader();
-      EvaluationContext context =
-          new EvaluationContext(classLoader, new ExecutionFlowDescription());
-      m_border = (Border) AstEvaluationEngine.evaluate(context, borderExpression);
-    }
-    // set new Border
-    m_previewCanvas.setBorder(m_border);
-  }
+	private void updateBorderEx(ICompilationUnit unit) throws Exception {
+		// prepare Border expression
+		Expression borderExpression;
+		{
+			String borderSource = getCurrentBorderSource();
+			unit.getBuffer().setContents(
+					StringUtils.join(new String[]{
+							"class __Foo {",
+							"  private javax.swing.border.Border border = " + borderSource,
+					"}"}, "\n"));
+			AstEditor editor = new AstEditor(unit);
+			FieldDeclaration fieldDeclaration =
+					DomGenerics.types(editor.getAstUnit()).get(0).getFields()[0];
+			borderExpression = DomGenerics.fragments(fieldDeclaration).get(0).getInitializer();
+		}
+		// evaluate Border expression
+		{
+			ClassLoader classLoader = EditorState.get(m_editor).getEditorLoader();
+			EvaluationContext context =
+					new EvaluationContext(classLoader, new ExecutionFlowDescription());
+			m_border = (Border) AstEvaluationEngine.evaluate(context, borderExpression);
+		}
+		// set new Border
+		m_previewCanvas.setBorder(m_border);
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/BorderPreviewCanvas.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/BorderPreviewCanvas.java
index c01095721..095764b70 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/BorderPreviewCanvas.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/BorderPreviewCanvas.java
@@ -34,81 +34,81 @@
  * @coverage swing.property.editor
  */
 public final class BorderPreviewCanvas extends EmbeddedSwingComposite2 {
-  private JPanel m_awtRoot;
-  private JPanel m_emptyPanel;
-  private JPanel m_filledPanel_1;
-  private JPanel m_filledPanel_2;
+	private JPanel m_awtRoot;
+	private JPanel m_emptyPanel;
+	private JPanel m_filledPanel_1;
+	private JPanel m_filledPanel_2;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public BorderPreviewCanvas(Composite parent, int style) {
-    super(parent, SWT.NONE);
-    populate();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public BorderPreviewCanvas(Composite parent, int style) {
+		super(parent, SWT.NONE);
+		populate();
+	}
 
-  @Override
-  protected JComponent createSwingComponent() {
-    m_awtRoot = new JPanel();
-    m_awtRoot.setLayout(new GridLayout(1, 0, 5, 0));
-    m_awtRoot.setBackground(new Color(200, 225, 255));
-    // empty JPanel
-    {
-      m_emptyPanel = new JPanel();
-      m_awtRoot.add(m_emptyPanel);
-    }
-    // filled JPanel
-    {
-      m_filledPanel_1 = new JPanel();
-      m_awtRoot.add(m_filledPanel_1);
-      // fill JPanel
-      m_filledPanel_1.setLayout(new GridLayout());
-      m_filledPanel_1.add(new JButton("JButton"));
-    }
-    // filled JPanel
-    {
-      m_filledPanel_2 = new JPanel();
-      m_awtRoot.add(m_filledPanel_2);
-      m_filledPanel_2.setBackground(new Color(192, 192, 192));
-      // fill JPanel
-      m_filledPanel_2.setLayout(new GridLayout());
-      m_filledPanel_2.add(new JButton("JButton"));
-    }
-    // OK, filled container
-    return m_awtRoot;
-  }
+	@Override
+	protected JComponent createSwingComponent() {
+		m_awtRoot = new JPanel();
+		m_awtRoot.setLayout(new GridLayout(1, 0, 5, 0));
+		m_awtRoot.setBackground(new Color(200, 225, 255));
+		// empty JPanel
+		{
+			m_emptyPanel = new JPanel();
+			m_awtRoot.add(m_emptyPanel);
+		}
+		// filled JPanel
+		{
+			m_filledPanel_1 = new JPanel();
+			m_awtRoot.add(m_filledPanel_1);
+			// fill JPanel
+			m_filledPanel_1.setLayout(new GridLayout());
+			m_filledPanel_1.add(new JButton("JButton"));
+		}
+		// filled JPanel
+		{
+			m_filledPanel_2 = new JPanel();
+			m_awtRoot.add(m_filledPanel_2);
+			m_filledPanel_2.setBackground(new Color(192, 192, 192));
+			// fill JPanel
+			m_filledPanel_2.setLayout(new GridLayout());
+			m_filledPanel_2.add(new JButton("JButton"));
+		}
+		// OK, filled container
+		return m_awtRoot;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final Border ERROR_BORDER = new LineBorder(Color.RED, 5);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final Border ERROR_BORDER = new LineBorder(Color.RED, 5);
 
-  /**
-   * Sets the {@link Border} to display.
-   */
-  public void setBorder(final Border border) {
-    EventQueue.invokeLater(new Runnable() {
-      public void run() {
-        try {
-          if (border != null) {
-            Graphics graphics = m_emptyPanel.getGraphics();
-            graphics.setClip(new Rectangle(0, 0, 0, 0));
-            border.paintBorder(m_emptyPanel, graphics, 0, 0, 0, 0);
-          }
-          // OK, now we know, that this Border can be set on JPanel
-          m_emptyPanel.setBorder(border);
-          m_filledPanel_1.setBorder(border);
-          m_filledPanel_2.setBorder(border);
-          m_awtRoot.validate();
-        } catch (Throwable e) {
-          // oops...this Border can not be used on JPanel
-          setBorder(ERROR_BORDER);
-        }
-      }
-    });
-  }
+	/**
+	 * Sets the {@link Border} to display.
+	 */
+	public void setBorder(final Border border) {
+		EventQueue.invokeLater(new Runnable() {
+			public void run() {
+				try {
+					if (border != null) {
+						Graphics graphics = m_emptyPanel.getGraphics();
+						graphics.setClip(new Rectangle(0, 0, 0, 0));
+						border.paintBorder(m_emptyPanel, graphics, 0, 0, 0, 0);
+					}
+					// OK, now we know, that this Border can be set on JPanel
+					m_emptyPanel.setBorder(border);
+					m_filledPanel_1.setBorder(border);
+					m_filledPanel_2.setBorder(border);
+					m_awtRoot.validate();
+				} catch (Throwable e) {
+					// oops...this Border can not be used on JPanel
+					setBorder(ERROR_BORDER);
+				}
+			}
+		});
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/BorderPropertyEditor.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/BorderPropertyEditor.java
index 834054424..739d9fb63 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/BorderPropertyEditor.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/BorderPropertyEditor.java
@@ -48,155 +48,155 @@
  * @coverage swing.property.editor
  */
 public final class BorderPropertyEditor extends TextDialogPropertyEditor
-    implements
-      INlsPropertyContributor,
-      IClipboardSourceProvider {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final PropertyEditor INSTANCE = new BorderPropertyEditor();
-
-  private BorderPropertyEditor() {
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getText(Property property) throws Exception {
-    Object value = property.getValue();
-    if (value instanceof Border) {
-      return CodeUtils.getShortClass(value.getClass().getName());
-    }
-    if (property.isModified() && value == null) {
-      return "(no border)";
-    }
-    return null;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IClipboardSourceProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public String getClipboardSource(GenericProperty property) throws Exception {
-    Expression expression = property.getExpression();
-    if (expression != null) {
-      final String badExpressionMark = "__wbp_variableReference";
-      // Ask "external" source.
-      // Replace each reference on variable with "bad" mark.
-      AstEditor editor = property.getJavaInfo().getEditor();
-      String source = editor.getExternalSource(expression, new Function<ASTNode, String>() {
-        public String apply(ASTNode input) {
-          IVariableBinding variableBinding = AstNodeUtils.getVariableBinding(input);
-          if (variableBinding != null && !variableBinding.isField()) {
-            return badExpressionMark;
-          }
-          return null;
-        }
-      });
-      // if source has variable references, fail
-      if (source.contains(badExpressionMark)) {
-        return null;
-      }
-      // OK, we have good external source
-      return source;
-    }
-    return null;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void openDialog(Property property) throws Exception {
-    GenericProperty genericProperty = (GenericProperty) property;
-    BorderDialog borderDialog =
-        new BorderDialog(DesignerPlugin.getShell(), genericProperty.getJavaInfo().getEditor());
-    // set "modified" flag
-    borderDialog.setBorderModified(property.isModified());
-    // set initial value
-    {
-      Object value = property.getValue();
-      if (value instanceof Border) {
-        Border border = (Border) value;
-        borderDialog.setBorder(border);
-      }
-    }
-    // open dialog
-    if (borderDialog.open() == Window.OK) {
-      String source = borderDialog.getBorderSource();
-      genericProperty.setExpression(source, Property.UNKNOWN_VALUE);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // INlsPropertyContributor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void contributeNlsProperties(Property _property, List<Property> properties)
-      throws Exception {
-    GenericProperty property = (GenericProperty) _property;
-    if (property.getValue() instanceof TitledBorder
-        && property.getExpression() instanceof ClassInstanceCreation) {
-      ClassInstanceCreation borderCreation = (ClassInstanceCreation) property.getExpression();
-      final JavaInfo javaInfo = property.getJavaInfo();
-      for (final Expression argument : DomGenerics.arguments(borderCreation)) {
-        if (AstNodeUtils.isSuccessorOf(argument, "java.lang.String")) {
-          properties.add(new GenericProperty(javaInfo, property.getTitle() + "Title",
-              StringPropertyEditor.INSTANCE) {
-            public Class<?> getType() {
-              return String.class;
-            }
-
-            @Override
-            public void setValue(Object value) throws Exception {
-              if (value == UNKNOWN_VALUE) {
-                setExpression(null, value);
-              } else if (value instanceof String) {
-                String s = (String) value;
-                setExpression(StringConverter.INSTANCE.toJavaSource(javaInfo, s), s);
-              }
-            }
-
-            @Override
-            public boolean isModified() throws Exception {
-              return true;
-            }
-
-            @Override
-            public void setExpression(final String source, Object value) throws Exception {
-              ExecutionUtils.run(javaInfo, new RunnableEx() {
-                public void run() throws Exception {
-                  javaInfo.getEditor().replaceExpression(argument, source);
-                }
-              });
-            }
-
-            @Override
-            public Object getValue() throws Exception {
-              return JavaInfoEvaluationHelper.getValue(argument);
-            }
-
-            @Override
-            public Expression getExpression() throws Exception {
-              return argument;
-            }
-
-            @Override
-            public Object getDefaultValue() throws Exception {
-              return UNKNOWN_VALUE;
-            }
-          });
-        }
-      }
-    }
-  }
+implements
+INlsPropertyContributor,
+IClipboardSourceProvider {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final PropertyEditor INSTANCE = new BorderPropertyEditor();
+
+	private BorderPropertyEditor() {
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getText(Property property) throws Exception {
+		Object value = property.getValue();
+		if (value instanceof Border) {
+			return CodeUtils.getShortClass(value.getClass().getName());
+		}
+		if (property.isModified() && value == null) {
+			return "(no border)";
+		}
+		return null;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IClipboardSourceProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public String getClipboardSource(GenericProperty property) throws Exception {
+		Expression expression = property.getExpression();
+		if (expression != null) {
+			final String badExpressionMark = "__wbp_variableReference";
+			// Ask "external" source.
+			// Replace each reference on variable with "bad" mark.
+			AstEditor editor = property.getJavaInfo().getEditor();
+			String source = editor.getExternalSource(expression, new Function<ASTNode, String>() {
+				public String apply(ASTNode input) {
+					IVariableBinding variableBinding = AstNodeUtils.getVariableBinding(input);
+					if (variableBinding != null && !variableBinding.isField()) {
+						return badExpressionMark;
+					}
+					return null;
+				}
+			});
+			// if source has variable references, fail
+			if (source.contains(badExpressionMark)) {
+				return null;
+			}
+			// OK, we have good external source
+			return source;
+		}
+		return null;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void openDialog(Property property) throws Exception {
+		GenericProperty genericProperty = (GenericProperty) property;
+		BorderDialog borderDialog =
+				new BorderDialog(DesignerPlugin.getShell(), genericProperty.getJavaInfo().getEditor());
+		// set "modified" flag
+		borderDialog.setBorderModified(property.isModified());
+		// set initial value
+		{
+			Object value = property.getValue();
+			if (value instanceof Border) {
+				Border border = (Border) value;
+				borderDialog.setBorder(border);
+			}
+		}
+		// open dialog
+		if (borderDialog.open() == Window.OK) {
+			String source = borderDialog.getBorderSource();
+			genericProperty.setExpression(source, Property.UNKNOWN_VALUE);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// INlsPropertyContributor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void contributeNlsProperties(Property _property, List<Property> properties)
+			throws Exception {
+		GenericProperty property = (GenericProperty) _property;
+		if (property.getValue() instanceof TitledBorder
+				&& property.getExpression() instanceof ClassInstanceCreation) {
+			ClassInstanceCreation borderCreation = (ClassInstanceCreation) property.getExpression();
+			final JavaInfo javaInfo = property.getJavaInfo();
+			for (final Expression argument : DomGenerics.arguments(borderCreation)) {
+				if (AstNodeUtils.isSuccessorOf(argument, "java.lang.String")) {
+					properties.add(new GenericProperty(javaInfo, property.getTitle() + "Title",
+							StringPropertyEditor.INSTANCE) {
+						public Class<?> getType() {
+							return String.class;
+						}
+
+						@Override
+						public void setValue(Object value) throws Exception {
+							if (value == UNKNOWN_VALUE) {
+								setExpression(null, value);
+							} else if (value instanceof String) {
+								String s = (String) value;
+								setExpression(StringConverter.INSTANCE.toJavaSource(javaInfo, s), s);
+							}
+						}
+
+						@Override
+						public boolean isModified() throws Exception {
+							return true;
+						}
+
+						@Override
+						public void setExpression(final String source, Object value) throws Exception {
+							ExecutionUtils.run(javaInfo, new RunnableEx() {
+								public void run() throws Exception {
+									javaInfo.getEditor().replaceExpression(argument, source);
+								}
+							});
+						}
+
+						@Override
+						public Object getValue() throws Exception {
+							return JavaInfoEvaluationHelper.getValue(argument);
+						}
+
+						@Override
+						public Expression getExpression() throws Exception {
+							return argument;
+						}
+
+						@Override
+						public Object getDefaultValue() throws Exception {
+							return UNKNOWN_VALUE;
+						}
+					});
+				}
+			}
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/fields/AbstractBorderField.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/fields/AbstractBorderField.java
index 762cd8d93..9b4e1247c 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/fields/AbstractBorderField.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/fields/AbstractBorderField.java
@@ -26,30 +26,30 @@
  * @coverage swing.property.editor
  */
 public abstract class AbstractBorderField extends Composite {
-  private static final int LABEL_WIDTH = 23;
+	private static final int LABEL_WIDTH = 23;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractBorderField(Composite parent, int columns, String labelText) {
-    super(parent, SWT.NONE);
-    GridLayoutFactory.create(this).noMargins().columns(1 + columns);
-    {
-      Label label = new Label(this, SWT.NONE);
-      GridDataFactory.create(label).hintHC(LABEL_WIDTH);
-      label.setText(labelText);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractBorderField(Composite parent, int columns, String labelText) {
+		super(parent, SWT.NONE);
+		GridLayoutFactory.create(this).noMargins().columns(1 + columns);
+		{
+			Label label = new Label(this, SWT.NONE);
+			GridDataFactory.create(label).hintHC(LABEL_WIDTH);
+			label.setText(labelText);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the source corresponding to the made selection.
-   */
-  public abstract String getSource() throws Exception;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the source corresponding to the made selection.
+	 */
+	public abstract String getSource() throws Exception;
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/fields/BooleanField.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/fields/BooleanField.java
index 384a81d87..9fc0198bb 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/fields/BooleanField.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/fields/BooleanField.java
@@ -27,65 +27,65 @@
  * @coverage swing.property.editor
  */
 public final class BooleanField extends AbstractBorderField {
-  private final Button[] m_buttons;
-  private String m_source;
+	private final Button[] m_buttons;
+	private String m_source;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public BooleanField(Composite parent, String labelText, String[] titles) {
-    super(parent, 2, labelText);
-    Assert.equals(2, titles.length);
-    // create radio buttons
-    m_buttons = new Button[2];
-    m_buttons[0] = createRadioButton(titles[0], "false");
-    m_buttons[1] = createRadioButton(titles[1], "true");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public BooleanField(Composite parent, String labelText, String[] titles) {
+		super(parent, 2, labelText);
+		Assert.equals(2, titles.length);
+		// create radio buttons
+		m_buttons = new Button[2];
+		m_buttons[0] = createRadioButton(titles[0], "false");
+		m_buttons[1] = createRadioButton(titles[1], "true");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Creates single radio {@link Button}.
-   */
-  private Button createRadioButton(String title, final String source) {
-    Button button = new Button(this, SWT.RADIO);
-    button.setText(title);
-    button.addListener(SWT.Selection, new Listener() {
-      public void handleEvent(Event e) {
-        m_source = source;
-        notifyListeners(SWT.Selection, new Event());
-      }
-    });
-    return button;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Creates single radio {@link Button}.
+	 */
+	private Button createRadioButton(String title, final String source) {
+		Button button = new Button(this, SWT.RADIO);
+		button.setText(title);
+		button.addListener(SWT.Selection, new Listener() {
+			public void handleEvent(Event e) {
+				m_source = source;
+				notifyListeners(SWT.Selection, new Event());
+			}
+		});
+		return button;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets the value, that should correspond to the one of the field values.
-   */
-  public void setValue(Object value) throws Exception {
-    if (ObjectUtils.equals(Boolean.FALSE, value)) {
-      m_source = "false";
-      m_buttons[0].setSelection(true);
-      m_buttons[1].setSelection(false);
-    } else {
-      m_source = "true";
-      m_buttons[0].setSelection(false);
-      m_buttons[1].setSelection(true);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets the value, that should correspond to the one of the field values.
+	 */
+	public void setValue(Object value) throws Exception {
+		if (ObjectUtils.equals(Boolean.FALSE, value)) {
+			m_source = "false";
+			m_buttons[0].setSelection(true);
+			m_buttons[1].setSelection(false);
+		} else {
+			m_source = "true";
+			m_buttons[0].setSelection(false);
+			m_buttons[1].setSelection(true);
+		}
+	}
 
-  @Override
-  public String getSource() throws Exception {
-    return m_source;
-  }
+	@Override
+	public String getSource() throws Exception {
+		return m_source;
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/fields/BorderField.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/fields/BorderField.java
index e5f71a6c2..227067e8b 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/fields/BorderField.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/fields/BorderField.java
@@ -47,144 +47,144 @@
  * @coverage swing.property.editor
  */
 public final class BorderField extends AbstractBorderField {
-  private AstEditor m_editor;
-  private Text m_text;
-  private Border m_border;
+	private AstEditor m_editor;
+	private Text m_text;
+	private Border m_border;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public BorderField(Composite parent, String labelText, String buttonText) {
-    super(parent, 2, labelText);
-    {
-      m_text = new Text(this, SWT.BORDER | SWT.READ_ONLY);
-      GridDataFactory.create(m_text).hintHC(35);
-    }
-    {
-      Button button = new Button(this, SWT.NONE);
-      GridDataFactory.create(button).hintHC(10);
-      button.setText(buttonText);
-      button.addListener(SWT.Selection, new Listener() {
-        public void handleEvent(Event e) {
-          BorderDialog borderDialog = new BorderDialog(getShell(), m_editor);
-          borderDialog.setBorderModified(m_border != null);
-          borderDialog.setBorder(m_border);
-          if (borderDialog.open() == Window.OK) {
-            m_border = borderDialog.getBorder();
-            showBorder();
-            notifyListeners(SWT.Selection, new Event());
-          }
-        }
-      });
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public BorderField(Composite parent, String labelText, String buttonText) {
+		super(parent, 2, labelText);
+		{
+			m_text = new Text(this, SWT.BORDER | SWT.READ_ONLY);
+			GridDataFactory.create(m_text).hintHC(35);
+		}
+		{
+			Button button = new Button(this, SWT.NONE);
+			GridDataFactory.create(button).hintHC(10);
+			button.setText(buttonText);
+			button.addListener(SWT.Selection, new Listener() {
+				public void handleEvent(Event e) {
+					BorderDialog borderDialog = new BorderDialog(getShell(), m_editor);
+					borderDialog.setBorderModified(m_border != null);
+					borderDialog.setBorder(m_border);
+					if (borderDialog.open() == Window.OK) {
+						m_border = borderDialog.getBorder();
+						showBorder();
+						notifyListeners(SWT.Selection, new Event());
+					}
+				}
+			});
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets the {@link AstEditor} to use with {@link BorderDialog}.
-   */
-  public void setEditor(AstEditor editor) {
-    m_editor = editor;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets the {@link AstEditor} to use with {@link BorderDialog}.
+	 */
+	public void setEditor(AstEditor editor) {
+		m_editor = editor;
+	}
 
-  /**
-   * @return current {@link Border}.
-   */
-  public Border getBorder() {
-    return m_border;
-  }
+	/**
+	 * @return current {@link Border}.
+	 */
+	public Border getBorder() {
+		return m_border;
+	}
 
-  /**
-   * Sets the {@link Border} value.
-   */
-  public void setBorder(Border border) throws Exception {
-    m_border = border;
-    showBorder();
-  }
+	/**
+	 * Sets the {@link Border} value.
+	 */
+	public void setBorder(Border border) throws Exception {
+		m_border = border;
+		showBorder();
+	}
 
-  @Override
-  public String getSource() throws Exception {
-    // try to use AbstractBorderComposite's to convert Border into source
-    if (m_border != null) {
-      for (Class<?> compositeClass : COMPOSITE_CLASSES) {
-        AbstractBorderComposite borderComposite = getBorderComposite(compositeClass);
-        try {
-          if (borderComposite.setBorder(m_border)) {
-            return borderComposite.getSource();
-          }
-        } finally {
-          returnBorderComposite(borderComposite);
-        }
-      }
-    }
-    // no, we don't understand this Border
-    return null;
-  }
+	@Override
+	public String getSource() throws Exception {
+		// try to use AbstractBorderComposite's to convert Border into source
+		if (m_border != null) {
+			for (Class<?> compositeClass : COMPOSITE_CLASSES) {
+				AbstractBorderComposite borderComposite = getBorderComposite(compositeClass);
+				try {
+					if (borderComposite.setBorder(m_border)) {
+						return borderComposite.getSource();
+					}
+				} finally {
+					returnBorderComposite(borderComposite);
+				}
+			}
+		}
+		// no, we don't understand this Border
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Borders
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final Shell INVISIBLE_SHELL = new Shell();
-  private static final Class<?>[] COMPOSITE_CLASSES = {
-      BevelBorderComposite.class,
-      CompoundBorderComposite.class,
-      EmptyBorderComposite.class,
-      EtchedBorderComposite.class,
-      LineBorderComposite.class,
-      MatteBorderComposite.class,
-      SoftBevelBorderComposite.class,
-      TitledBorderComposite.class,
-      SwingBorderComposite.class,};
-  private static final List<AbstractBorderComposite> m_borderComposites = Lists.newLinkedList();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Borders
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final Shell INVISIBLE_SHELL = new Shell();
+	private static final Class<?>[] COMPOSITE_CLASSES = {
+			BevelBorderComposite.class,
+			CompoundBorderComposite.class,
+			EmptyBorderComposite.class,
+			EtchedBorderComposite.class,
+			LineBorderComposite.class,
+			MatteBorderComposite.class,
+			SoftBevelBorderComposite.class,
+			TitledBorderComposite.class,
+			SwingBorderComposite.class,};
+	private static final List<AbstractBorderComposite> m_borderComposites = Lists.newLinkedList();
 
-  /**
-   * Note, that we can not reuse {@link AbstractBorderComposite}'s, so when we get some
-   * {@link AbstractBorderComposite}, we should return it back, else new instance will be created.
-   *
-   * @return the instance free of {@link AbstractBorderComposite}.
-   */
-  private static final AbstractBorderComposite getBorderComposite(Class<?> compositeClass)
-      throws Exception {
-    for (Iterator<AbstractBorderComposite> I = m_borderComposites.iterator(); I.hasNext();) {
-      AbstractBorderComposite borderComposite = I.next();
-      if (borderComposite.getClass() == compositeClass) {
-        I.remove();
-        return borderComposite;
-      }
-    }
-    // create new instance
-    return (AbstractBorderComposite) compositeClass.getConstructor(Composite.class).newInstance(
-        INVISIBLE_SHELL);
-  }
+	/**
+	 * Note, that we can not reuse {@link AbstractBorderComposite}'s, so when we get some
+	 * {@link AbstractBorderComposite}, we should return it back, else new instance will be created.
+	 *
+	 * @return the instance free of {@link AbstractBorderComposite}.
+	 */
+	private static final AbstractBorderComposite getBorderComposite(Class<?> compositeClass)
+			throws Exception {
+		for (Iterator<AbstractBorderComposite> I = m_borderComposites.iterator(); I.hasNext();) {
+			AbstractBorderComposite borderComposite = I.next();
+			if (borderComposite.getClass() == compositeClass) {
+				I.remove();
+				return borderComposite;
+			}
+		}
+		// create new instance
+		return (AbstractBorderComposite) compositeClass.getConstructor(Composite.class).newInstance(
+				INVISIBLE_SHELL);
+	}
 
-  /**
-   * Returns given {@link AbstractBorderComposite} to the list of available.
-   */
-  private static final void returnBorderComposite(AbstractBorderComposite borderComposite) {
-    m_borderComposites.add(borderComposite);
-  }
+	/**
+	 * Returns given {@link AbstractBorderComposite} to the list of available.
+	 */
+	private static final void returnBorderComposite(AbstractBorderComposite borderComposite) {
+		m_borderComposites.add(borderComposite);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Internal
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Shows current value of {@link #m_border}.
-   */
-  private void showBorder() {
-    if (m_border != null) {
-      m_text.setText(m_border.getClass().getName());
-    } else {
-      m_text.setText("");
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Internal
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Shows current value of {@link #m_border}.
+	 */
+	private void showBorder() {
+		if (m_border != null) {
+			m_text.setText(m_border.getClass().getName());
+		} else {
+			m_text.setText("");
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/fields/ColorField.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/fields/ColorField.java
index a7c5b198c..8d16cdd1e 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/fields/ColorField.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/fields/ColorField.java
@@ -34,101 +34,101 @@
  * @coverage swing.property.editor
  */
 public final class ColorField extends AbstractBorderField {
-  private final Canvas m_colorCanvas;
-  private final Label m_colorLabel;
-  private ColorInfo m_colorInfo;
+	private final Canvas m_colorCanvas;
+	private final Label m_colorLabel;
+	private ColorInfo m_colorInfo;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ColorField(Composite parent, String labelText) {
-    super(parent, 3, labelText);
-    {
-      m_colorCanvas = new Canvas(this, SWT.BORDER);
-      GridDataFactory.create(m_colorCanvas).hint(12, 12).alignVM();
-    }
-    {
-      m_colorLabel = new Label(this, SWT.NONE);
-      GridDataFactory.create(m_colorLabel).hintHC(18);
-    }
-    {
-      ToolBar toolBar = new ToolBar(this, SWT.FLAT);
-      {
-        ToolItem selectItem = new ToolItem(toolBar, SWT.NONE);
-        selectItem.setImage(Activator.getImage("borderEditor/selectColor.gif"));
-        selectItem.setToolTipText(ModelMessages.ColorField_select);
-        selectItem.addListener(SWT.Selection, new Listener() {
-          public void handleEvent(Event event) {
-            ColorInfo newColorInfo = ColorPropertyEditor.external_editColor(m_colorInfo);
-            getShell().setActive();
-            if (newColorInfo != null) {
-              onColorSelected(newColorInfo);
-            }
-          }
-        });
-      }
-      {
-        ToolItem defaultItem = new ToolItem(toolBar, SWT.NONE);
-        defaultItem.setImage(Activator.getImage("borderEditor/clear.gif"));
-        defaultItem.setToolTipText(ModelMessages.ColorField_reset);
-        defaultItem.addListener(SWT.Selection, new Listener() {
-          public void handleEvent(Event event) {
-            onColorSelected(null);
-          }
-        });
-      }
-    }
-    showColor();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ColorField(Composite parent, String labelText) {
+		super(parent, 3, labelText);
+		{
+			m_colorCanvas = new Canvas(this, SWT.BORDER);
+			GridDataFactory.create(m_colorCanvas).hint(12, 12).alignVM();
+		}
+		{
+			m_colorLabel = new Label(this, SWT.NONE);
+			GridDataFactory.create(m_colorLabel).hintHC(18);
+		}
+		{
+			ToolBar toolBar = new ToolBar(this, SWT.FLAT);
+			{
+				ToolItem selectItem = new ToolItem(toolBar, SWT.NONE);
+				selectItem.setImage(Activator.getImage("borderEditor/selectColor.gif"));
+				selectItem.setToolTipText(ModelMessages.ColorField_select);
+				selectItem.addListener(SWT.Selection, new Listener() {
+					public void handleEvent(Event event) {
+						ColorInfo newColorInfo = ColorPropertyEditor.external_editColor(m_colorInfo);
+						getShell().setActive();
+						if (newColorInfo != null) {
+							onColorSelected(newColorInfo);
+						}
+					}
+				});
+			}
+			{
+				ToolItem defaultItem = new ToolItem(toolBar, SWT.NONE);
+				defaultItem.setImage(Activator.getImage("borderEditor/clear.gif"));
+				defaultItem.setToolTipText(ModelMessages.ColorField_reset);
+				defaultItem.addListener(SWT.Selection, new Listener() {
+					public void handleEvent(Event event) {
+						onColorSelected(null);
+					}
+				});
+			}
+		}
+		showColor();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets the value, that should correspond to the one of the field values.
-   */
-  public void setValue(Color color) throws Exception {
-    if (color != null) {
-      m_colorInfo = new ColorInfo(color.getRed(), color.getGreen(), color.getBlue());
-    } else {
-      m_colorInfo = null;
-    }
-    showColor();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets the value, that should correspond to the one of the field values.
+	 */
+	public void setValue(Color color) throws Exception {
+		if (color != null) {
+			m_colorInfo = new ColorInfo(color.getRed(), color.getGreen(), color.getBlue());
+		} else {
+			m_colorInfo = null;
+		}
+		showColor();
+	}
 
-  @Override
-  public String getSource() throws Exception {
-    return m_colorInfo != null ? ColorPropertyEditor.external_getSource(m_colorInfo) : "null";
-  }
+	@Override
+	public String getSource() throws Exception {
+		return m_colorInfo != null ? ColorPropertyEditor.external_getSource(m_colorInfo) : "null";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Internal
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * User selected new {@link ColorInfo}.
-   */
-  private void onColorSelected(ColorInfo colorInfo) {
-    m_colorInfo = colorInfo;
-    showColor();
-    notifyListeners(SWT.Selection, new Event());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Internal
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * User selected new {@link ColorInfo}.
+	 */
+	private void onColorSelected(ColorInfo colorInfo) {
+		m_colorInfo = colorInfo;
+		showColor();
+		notifyListeners(SWT.Selection, new Event());
+	}
 
-  /**
-   * Shows current {@link #m_colorInfo} in {@link #m_colorCanvas} and {@link #m_colorLabel}.
-   */
-  private void showColor() {
-    if (m_colorInfo != null) {
-      m_colorCanvas.setBackground(new org.eclipse.swt.graphics.Color(null, m_colorInfo.getRGB()));
-      m_colorLabel.setText("(" + m_colorInfo.getCommaRGB() + ")");
-    } else {
-      m_colorCanvas.setBackground(null);
-      m_colorLabel.setText("(default)");
-    }
-  }
+	/**
+	 * Shows current {@link #m_colorInfo} in {@link #m_colorCanvas} and {@link #m_colorLabel}.
+	 */
+	private void showColor() {
+		if (m_colorInfo != null) {
+			m_colorCanvas.setBackground(new org.eclipse.swt.graphics.Color(null, m_colorInfo.getRGB()));
+			m_colorLabel.setText("(" + m_colorInfo.getCommaRGB() + ")");
+		} else {
+			m_colorCanvas.setBackground(null);
+			m_colorLabel.setText("(default)");
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/fields/ComboField.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/fields/ComboField.java
index 01111d5b7..25ad4556c 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/fields/ComboField.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/fields/ComboField.java
@@ -30,61 +30,61 @@
  * @coverage swing.property.editor
  */
 public final class ComboField extends AbstractBorderField {
-  private final Class<?> m_clazz;
-  private final String[] m_fields;
-  private final Combo m_combo;
-  private String m_source;
+	private final Class<?> m_clazz;
+	private final String[] m_fields;
+	private final Combo m_combo;
+	private String m_source;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ComboField(Composite parent,
-      String labelText,
-      Class<?> clazz,
-      String[] fields,
-      String[] titles) {
-    super(parent, 1, labelText);
-    Assert.equals(fields.length, titles.length);
-    m_clazz = clazz;
-    m_fields = fields;
-    // create Combo
-    m_combo = new Combo(this, SWT.READ_ONLY);
-    GridDataFactory.create(m_combo).grabH().fillH();
-    m_combo.setItems(titles);
-    m_combo.setVisibleItemCount(titles.length);
-    m_combo.addListener(SWT.Selection, new Listener() {
-      public void handleEvent(Event e) {
-        int index = m_combo.getSelectionIndex();
-        m_source = m_clazz.getName() + "." + m_fields[index];
-        notifyListeners(SWT.Selection, new Event());
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ComboField(Composite parent,
+			String labelText,
+			Class<?> clazz,
+			String[] fields,
+			String[] titles) {
+		super(parent, 1, labelText);
+		Assert.equals(fields.length, titles.length);
+		m_clazz = clazz;
+		m_fields = fields;
+		// create Combo
+		m_combo = new Combo(this, SWT.READ_ONLY);
+		GridDataFactory.create(m_combo).grabH().fillH();
+		m_combo.setItems(titles);
+		m_combo.setVisibleItemCount(titles.length);
+		m_combo.addListener(SWT.Selection, new Listener() {
+			public void handleEvent(Event e) {
+				int index = m_combo.getSelectionIndex();
+				m_source = m_clazz.getName() + "." + m_fields[index];
+				notifyListeners(SWT.Selection, new Event());
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets the value, that should correspond to the one of the field values.
-   */
-  public void setValue(Object value) throws Exception {
-    for (int i = 0; i < m_fields.length; i++) {
-      String fieldName = m_fields[i];
-      Field field = m_clazz.getField(fieldName);
-      if (ObjectUtils.equals(field.get(null), value)) {
-        m_source = m_clazz.getName() + "." + m_fields[i];
-        m_combo.select(i);
-        break;
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets the value, that should correspond to the one of the field values.
+	 */
+	public void setValue(Object value) throws Exception {
+		for (int i = 0; i < m_fields.length; i++) {
+			String fieldName = m_fields[i];
+			Field field = m_clazz.getField(fieldName);
+			if (ObjectUtils.equals(field.get(null), value)) {
+				m_source = m_clazz.getName() + "." + m_fields[i];
+				m_combo.select(i);
+				break;
+			}
+		}
+	}
 
-  @Override
-  public String getSource() throws Exception {
-    return m_source;
-  }
+	@Override
+	public String getSource() throws Exception {
+		return m_source;
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/fields/IntegerField.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/fields/IntegerField.java
index 178365f64..d9c0bc45c 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/fields/IntegerField.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/fields/IntegerField.java
@@ -26,43 +26,43 @@
  * @coverage swing.property.editor
  */
 public final class IntegerField extends AbstractBorderField {
-  private CSpinner m_spinner;
+	private CSpinner m_spinner;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public IntegerField(Composite parent, String labelText) {
-    super(parent, 2, labelText);
-    // create spinner
-    {
-      m_spinner = new CSpinner(this, SWT.BORDER);
-      GridDataFactory.create(m_spinner).hintHC(15);
-      m_spinner.addListener(SWT.Selection, new Listener() {
-        public void handleEvent(Event event) {
-          notifyListeners(SWT.Selection, event);
-        }
-      });
-    }
-    new Label(this, SWT.NONE).setText("pixel");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public IntegerField(Composite parent, String labelText) {
+		super(parent, 2, labelText);
+		// create spinner
+		{
+			m_spinner = new CSpinner(this, SWT.BORDER);
+			GridDataFactory.create(m_spinner).hintHC(15);
+			m_spinner.addListener(SWT.Selection, new Listener() {
+				public void handleEvent(Event event) {
+					notifyListeners(SWT.Selection, event);
+				}
+			});
+		}
+		new Label(this, SWT.NONE).setText("pixel");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets the value, that should correspond to the one of the field values.
-   */
-  public void setValue(int value) throws Exception {
-    m_spinner.setSelection(value);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets the value, that should correspond to the one of the field values.
+	 */
+	public void setValue(int value) throws Exception {
+		m_spinner.setSelection(value);
+	}
 
-  @Override
-  public String getSource() throws Exception {
-    int value = m_spinner.getSelection();
-    return Integer.toString(value);
-  }
+	@Override
+	public String getSource() throws Exception {
+		int value = m_spinner.getSelection();
+		return Integer.toString(value);
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/fields/RadioField.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/fields/RadioField.java
index 76db9dc9b..21fc45c5c 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/fields/RadioField.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/fields/RadioField.java
@@ -29,63 +29,63 @@
  * @coverage swing.property.editor
  */
 public final class RadioField extends AbstractBorderField {
-  private final Class<?> m_clazz;
-  private final String[] m_fields;
-  private final Button[] m_buttons;
-  private String m_source;
+	private final Class<?> m_clazz;
+	private final String[] m_fields;
+	private final Button[] m_buttons;
+	private String m_source;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public RadioField(Composite parent,
-      String labelText,
-      Class<?> clazz,
-      String[] fields,
-      String[] titles) {
-    super(parent, fields.length, labelText);
-    Assert.equals(fields.length, titles.length);
-    m_clazz = clazz;
-    m_fields = fields;
-    // create radio buttons
-    m_buttons = new Button[fields.length];
-    for (int i = 0; i < titles.length; i++) {
-      final int index = i;
-      m_buttons[i] = new Button(this, SWT.RADIO);
-      m_buttons[i].setText(titles[i]);
-      m_buttons[i].addListener(SWT.Selection, new Listener() {
-        public void handleEvent(Event e) {
-          m_source = m_clazz.getName() + "." + m_fields[index];
-          notifyListeners(SWT.Selection, new Event());
-        }
-      });
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public RadioField(Composite parent,
+			String labelText,
+			Class<?> clazz,
+			String[] fields,
+			String[] titles) {
+		super(parent, fields.length, labelText);
+		Assert.equals(fields.length, titles.length);
+		m_clazz = clazz;
+		m_fields = fields;
+		// create radio buttons
+		m_buttons = new Button[fields.length];
+		for (int i = 0; i < titles.length; i++) {
+			final int index = i;
+			m_buttons[i] = new Button(this, SWT.RADIO);
+			m_buttons[i].setText(titles[i]);
+			m_buttons[i].addListener(SWT.Selection, new Listener() {
+				public void handleEvent(Event e) {
+					m_source = m_clazz.getName() + "." + m_fields[index];
+					notifyListeners(SWT.Selection, new Event());
+				}
+			});
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets the value, that should correspond to the one of the field values.
-   */
-  public void setValue(Object value) throws Exception {
-    for (int i = 0; i < m_fields.length; i++) {
-      String fieldName = m_fields[i];
-      Field field = m_clazz.getField(fieldName);
-      if (ObjectUtils.equals(field.get(null), value)) {
-        m_source = m_clazz.getName() + "." + m_fields[i];
-        m_buttons[i].setSelection(true);
-      } else {
-        m_buttons[i].setSelection(false);
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets the value, that should correspond to the one of the field values.
+	 */
+	public void setValue(Object value) throws Exception {
+		for (int i = 0; i < m_fields.length; i++) {
+			String fieldName = m_fields[i];
+			Field field = m_clazz.getField(fieldName);
+			if (ObjectUtils.equals(field.get(null), value)) {
+				m_source = m_clazz.getName() + "." + m_fields[i];
+				m_buttons[i].setSelection(true);
+			} else {
+				m_buttons[i].setSelection(false);
+			}
+		}
+	}
 
-  @Override
-  public String getSource() throws Exception {
-    return m_source;
-  }
+	@Override
+	public String getSource() throws Exception {
+		return m_source;
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/fields/TextField.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/fields/TextField.java
index 840530df5..df9dd33cb 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/fields/TextField.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/fields/TextField.java
@@ -26,47 +26,47 @@
  * @coverage swing.property.editor
  */
 public final class TextField extends AbstractBorderField {
-  private final Text m_text;
-  private final Listener m_modifyListener = new Listener() {
-    public void handleEvent(Event event) {
-      notifyListeners(SWT.Selection, event);
-    }
-  };
+	private final Text m_text;
+	private final Listener m_modifyListener = new Listener() {
+		public void handleEvent(Event event) {
+			notifyListeners(SWT.Selection, event);
+		}
+	};
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public TextField(Composite parent, String labelText) {
-    super(parent, 1, labelText);
-    // create Text
-    {
-      m_text = new Text(this, SWT.BORDER);
-      GridDataFactory.create(m_text).grabH().fill().hintHC(40);
-      m_text.addListener(SWT.Modify, m_modifyListener);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public TextField(Composite parent, String labelText) {
+		super(parent, 1, labelText);
+		// create Text
+		{
+			m_text = new Text(this, SWT.BORDER);
+			GridDataFactory.create(m_text).grabH().fill().hintHC(40);
+			m_text.addListener(SWT.Modify, m_modifyListener);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets the value to edit.
-   */
-  public void setValue(String value) throws Exception {
-    m_text.removeListener(SWT.Modify, m_modifyListener);
-    try {
-      m_text.setText(value);
-    } finally {
-      m_text.addListener(SWT.Modify, m_modifyListener);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets the value to edit.
+	 */
+	public void setValue(String value) throws Exception {
+		m_text.removeListener(SWT.Modify, m_modifyListener);
+		try {
+			m_text.setText(value);
+		} finally {
+			m_text.addListener(SWT.Modify, m_modifyListener);
+		}
+	}
 
-  @Override
-  public String getSource() throws Exception {
-    return StringConverter.INSTANCE.toJavaSource(null, m_text.getText());
-  }
+	@Override
+	public String getSource() throws Exception {
+		return StringConverter.INSTANCE.toJavaSource(null, m_text.getText());
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/pages/AbstractBorderComposite.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/pages/AbstractBorderComposite.java
index c866c06a5..f31546fff 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/pages/AbstractBorderComposite.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/pages/AbstractBorderComposite.java
@@ -35,134 +35,134 @@
  * @coverage swing.property.editor
  */
 public abstract class AbstractBorderComposite extends Composite {
-  private final String m_title;
-  protected BorderDialog m_borderDialog;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractBorderComposite(Composite parent, String title) {
-    super(parent, SWT.NONE);
-    m_title = title;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Initializes this {@link AbstractBorderComposite}.
-   */
-  public void initialize(BorderDialog borderDialog, AstEditor editor) {
-    m_borderDialog = borderDialog;
-  }
-
-  /**
-   * @return the title to display for user.
-   */
-  public final String getTitle() {
-    return m_title;
-  }
-
-  /**
-   * Sets the {@link Border} to edit.
-   *
-   * @return <code>true</code> if this {@link AbstractBorderComposite} understands given
-   *         {@link Border}.
-   */
-  public abstract boolean setBorder(Border border) throws Exception;
-
-  /**
-   * @return the source for updated {@link Border}.
-   */
-  public abstract String getSource() throws Exception;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Components
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Binds given {@link AbstractBorderField}, so that when {@link SWT#Selection} event issued, we
-   * notify {@link BorderDialog}.
-   */
-  private void bindField(AbstractBorderField field) {
-    field.addListener(SWT.Selection, new Listener() {
-      public void handleEvent(Event event) {
-        m_borderDialog.borderUpdated();
-      }
-    });
-  }
-
-  /**
-   * @return the bound {@link TextField}.
-   */
-  protected final TextField createTextField(String label) {
-    TextField field = new TextField(this, label);
-    bindField(field);
-    return field;
-  }
-
-  /**
-   * @return the bound {@link IntegerField}.
-   */
-  protected final IntegerField createIntegerField(String label) {
-    IntegerField field = new IntegerField(this, label);
-    bindField(field);
-    return field;
-  }
-
-  /**
-   * @return the bound {@link RadioField}.
-   */
-  protected final RadioField createRadioField(String label,
-      Class<?> clazz,
-      String[] fields,
-      String[] titles) {
-    RadioField field = new RadioField(this, label, clazz, fields, titles);
-    bindField(field);
-    return field;
-  }
-
-  /**
-   * @return the bound {@link ComboField}.
-   */
-  protected final ComboField createComboField(String label,
-      Class<?> clazz,
-      String[] fields,
-      String[] titles) {
-    ComboField field = new ComboField(this, label, clazz, fields, titles);
-    bindField(field);
-    return field;
-  }
-
-  /**
-   * @return the bound {@link BooleanField}.
-   */
-  protected final BooleanField createBooleanField(String label, String[] titles) {
-    BooleanField field = new BooleanField(this, label, titles);
-    bindField(field);
-    return field;
-  }
-
-  /**
-   * @return the bound {@link ColorField}.
-   */
-  protected final ColorField createColorField(String label) {
-    ColorField field = new ColorField(this, label);
-    bindField(field);
-    return field;
-  }
-
-  /**
-   * @return the bound {@link BorderField}.
-   */
-  protected final BorderField createBorderField(String label, String buttonText) {
-    BorderField field = new BorderField(this, label, buttonText);
-    bindField(field);
-    return field;
-  }
+	private final String m_title;
+	protected BorderDialog m_borderDialog;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractBorderComposite(Composite parent, String title) {
+		super(parent, SWT.NONE);
+		m_title = title;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Initializes this {@link AbstractBorderComposite}.
+	 */
+	public void initialize(BorderDialog borderDialog, AstEditor editor) {
+		m_borderDialog = borderDialog;
+	}
+
+	/**
+	 * @return the title to display for user.
+	 */
+	public final String getTitle() {
+		return m_title;
+	}
+
+	/**
+	 * Sets the {@link Border} to edit.
+	 *
+	 * @return <code>true</code> if this {@link AbstractBorderComposite} understands given
+	 *         {@link Border}.
+	 */
+	public abstract boolean setBorder(Border border) throws Exception;
+
+	/**
+	 * @return the source for updated {@link Border}.
+	 */
+	public abstract String getSource() throws Exception;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Components
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Binds given {@link AbstractBorderField}, so that when {@link SWT#Selection} event issued, we
+	 * notify {@link BorderDialog}.
+	 */
+	private void bindField(AbstractBorderField field) {
+		field.addListener(SWT.Selection, new Listener() {
+			public void handleEvent(Event event) {
+				m_borderDialog.borderUpdated();
+			}
+		});
+	}
+
+	/**
+	 * @return the bound {@link TextField}.
+	 */
+	protected final TextField createTextField(String label) {
+		TextField field = new TextField(this, label);
+		bindField(field);
+		return field;
+	}
+
+	/**
+	 * @return the bound {@link IntegerField}.
+	 */
+	protected final IntegerField createIntegerField(String label) {
+		IntegerField field = new IntegerField(this, label);
+		bindField(field);
+		return field;
+	}
+
+	/**
+	 * @return the bound {@link RadioField}.
+	 */
+	protected final RadioField createRadioField(String label,
+			Class<?> clazz,
+			String[] fields,
+			String[] titles) {
+		RadioField field = new RadioField(this, label, clazz, fields, titles);
+		bindField(field);
+		return field;
+	}
+
+	/**
+	 * @return the bound {@link ComboField}.
+	 */
+	protected final ComboField createComboField(String label,
+			Class<?> clazz,
+			String[] fields,
+			String[] titles) {
+		ComboField field = new ComboField(this, label, clazz, fields, titles);
+		bindField(field);
+		return field;
+	}
+
+	/**
+	 * @return the bound {@link BooleanField}.
+	 */
+	protected final BooleanField createBooleanField(String label, String[] titles) {
+		BooleanField field = new BooleanField(this, label, titles);
+		bindField(field);
+		return field;
+	}
+
+	/**
+	 * @return the bound {@link ColorField}.
+	 */
+	protected final ColorField createColorField(String label) {
+		ColorField field = new ColorField(this, label);
+		bindField(field);
+		return field;
+	}
+
+	/**
+	 * @return the bound {@link BorderField}.
+	 */
+	protected final BorderField createBorderField(String label, String buttonText) {
+		BorderField field = new BorderField(this, label, buttonText);
+		bindField(field);
+		return field;
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/pages/BevelBorderComposite.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/pages/BevelBorderComposite.java
index 63906f038..3974c1fcc 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/pages/BevelBorderComposite.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/pages/BevelBorderComposite.java
@@ -27,94 +27,94 @@
  * @coverage swing.property.editor
  */
 public final class BevelBorderComposite extends AbstractBorderComposite {
-  private final RadioField m_typeField;
-  private final ColorField m_highlightOuterField;
-  private final ColorField m_highlightInnerField;
-  private final ColorField m_shadowOuterField;
-  private final ColorField m_shadowInnerField;
+	private final RadioField m_typeField;
+	private final ColorField m_highlightOuterField;
+	private final ColorField m_highlightInnerField;
+	private final ColorField m_shadowOuterField;
+	private final ColorField m_shadowInnerField;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public BevelBorderComposite(Composite parent) {
-    super(parent, "BevelBorder");
-    GridLayoutFactory.create(this);
-    m_typeField =
-        createRadioField(
-            ModelMessages.BevelBorderComposite_bevelType,
-            BevelBorder.class,
-            new String[]{"LOWERED", "RAISED"},
-            new String[]{
-                ModelMessages.BevelBorderComposite_typeLowered,
-                ModelMessages.BevelBorderComposite_typeRaised});
-    m_highlightOuterField =
-        createColorField(ModelMessages.BevelBorderComposite_highlightOuterColor);
-    m_highlightInnerField =
-        createColorField(ModelMessages.BevelBorderComposite_highlightInnerColor);
-    m_shadowOuterField = createColorField(ModelMessages.BevelBorderComposite_shadowOuterColor);
-    m_shadowInnerField = createColorField(ModelMessages.BevelBorderComposite_shadowInnerColor);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public BevelBorderComposite(Composite parent) {
+		super(parent, "BevelBorder");
+		GridLayoutFactory.create(this);
+		m_typeField =
+				createRadioField(
+						ModelMessages.BevelBorderComposite_bevelType,
+						BevelBorder.class,
+						new String[]{"LOWERED", "RAISED"},
+						new String[]{
+								ModelMessages.BevelBorderComposite_typeLowered,
+								ModelMessages.BevelBorderComposite_typeRaised});
+		m_highlightOuterField =
+				createColorField(ModelMessages.BevelBorderComposite_highlightOuterColor);
+		m_highlightInnerField =
+				createColorField(ModelMessages.BevelBorderComposite_highlightInnerColor);
+		m_shadowOuterField = createColorField(ModelMessages.BevelBorderComposite_shadowOuterColor);
+		m_shadowInnerField = createColorField(ModelMessages.BevelBorderComposite_shadowInnerColor);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean setBorder(Border border) throws Exception {
-    if (border instanceof BevelBorder) {
-      BevelBorder ourBorder = (BevelBorder) border;
-      m_typeField.setValue(ourBorder.getBevelType());
-      m_highlightOuterField.setValue(ourBorder.getHighlightOuterColor());
-      m_highlightInnerField.setValue(ourBorder.getHighlightInnerColor());
-      m_shadowOuterField.setValue(ourBorder.getShadowOuterColor());
-      m_shadowInnerField.setValue(ourBorder.getShadowInnerColor());
-      // OK, this is our Border
-      return true;
-    } else {
-      m_typeField.setValue(BevelBorder.LOWERED);
-      // no, we don't know this Border
-      return false;
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean setBorder(Border border) throws Exception {
+		if (border instanceof BevelBorder) {
+			BevelBorder ourBorder = (BevelBorder) border;
+			m_typeField.setValue(ourBorder.getBevelType());
+			m_highlightOuterField.setValue(ourBorder.getHighlightOuterColor());
+			m_highlightInnerField.setValue(ourBorder.getHighlightInnerColor());
+			m_shadowOuterField.setValue(ourBorder.getShadowOuterColor());
+			m_shadowInnerField.setValue(ourBorder.getShadowInnerColor());
+			// OK, this is our Border
+			return true;
+		} else {
+			m_typeField.setValue(BevelBorder.LOWERED);
+			// no, we don't know this Border
+			return false;
+		}
+	}
 
-  @Override
-  public String getSource() throws Exception {
-    String typeSource = m_typeField.getSource();
-    String highlightOuterSource = m_highlightOuterField.getSource();
-    String highlightInnerSource = m_highlightInnerField.getSource();
-    String shadowOuterSource = m_shadowOuterField.getSource();
-    String shadowInnerSource = m_shadowInnerField.getSource();
-    if (highlightOuterSource == null
-        && highlightInnerSource == null
-        && shadowOuterSource == null
-        && shadowInnerSource == null) {
-      return "new javax.swing.border.BevelBorder(" + typeSource + ")";
-    }
-    if (highlightOuterSource == null
-        && highlightInnerSource != null
-        && shadowOuterSource != null
-        && shadowInnerSource == null) {
-      return "new javax.swing.border.BevelBorder("
-          + typeSource
-          + ", "
-          + highlightInnerSource
-          + ", "
-          + shadowOuterSource
-          + ")";
-    }
-    return "new javax.swing.border.BevelBorder("
-        + typeSource
-        + ", "
-        + highlightOuterSource
-        + ", "
-        + highlightInnerSource
-        + ", "
-        + shadowOuterSource
-        + ", "
-        + shadowInnerSource
-        + ")";
-  }
+	@Override
+	public String getSource() throws Exception {
+		String typeSource = m_typeField.getSource();
+		String highlightOuterSource = m_highlightOuterField.getSource();
+		String highlightInnerSource = m_highlightInnerField.getSource();
+		String shadowOuterSource = m_shadowOuterField.getSource();
+		String shadowInnerSource = m_shadowInnerField.getSource();
+		if (highlightOuterSource == null
+				&& highlightInnerSource == null
+				&& shadowOuterSource == null
+				&& shadowInnerSource == null) {
+			return "new javax.swing.border.BevelBorder(" + typeSource + ")";
+		}
+		if (highlightOuterSource == null
+				&& highlightInnerSource != null
+				&& shadowOuterSource != null
+				&& shadowInnerSource == null) {
+			return "new javax.swing.border.BevelBorder("
+					+ typeSource
+					+ ", "
+					+ highlightInnerSource
+					+ ", "
+					+ shadowOuterSource
+					+ ")";
+		}
+		return "new javax.swing.border.BevelBorder("
+		+ typeSource
+		+ ", "
+		+ highlightOuterSource
+		+ ", "
+		+ highlightInnerSource
+		+ ", "
+		+ shadowOuterSource
+		+ ", "
+		+ shadowInnerSource
+		+ ")";
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/pages/CompoundBorderComposite.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/pages/CompoundBorderComposite.java
index 66218e22c..69ab45797 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/pages/CompoundBorderComposite.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/pages/CompoundBorderComposite.java
@@ -35,77 +35,77 @@
  * @coverage swing.property.editor
  */
 public final class CompoundBorderComposite extends AbstractBorderComposite {
-  private final BorderField m_outsideField;
-  private final BorderField m_insideField;
+	private final BorderField m_outsideField;
+	private final BorderField m_insideField;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CompoundBorderComposite(Composite parent) {
-    super(parent, "CompoundBorder");
-    GridLayoutFactory.create(this);
-    m_outsideField =
-        createBorderField(
-            ModelMessages.CompoundBorderComposite_outsideBorder,
-            ModelMessages.CompoundBorderComposite_outsideEdit);
-    m_insideField =
-        createBorderField(
-            ModelMessages.CompoundBorderComposite_insideBorder,
-            ModelMessages.CompoundBorderComposite_insideEdit);
-    {
-      Button swapButton = new Button(this, SWT.NONE);
-      GridDataFactory.create(swapButton).grabH().alignHR().hintHC(10);
-      swapButton.setText(ModelMessages.CompoundBorderComposite_swap);
-      swapButton.addListener(SWT.Selection, new Listener() {
-        public void handleEvent(Event e) {
-          ExecutionUtils.runLog(new RunnableEx() {
-            public void run() throws Exception {
-              Border outsideBorder = m_outsideField.getBorder();
-              m_outsideField.setBorder(m_insideField.getBorder());
-              m_insideField.setBorder(outsideBorder);
-              m_borderDialog.borderUpdated();
-            }
-          });
-        }
-      });
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CompoundBorderComposite(Composite parent) {
+		super(parent, "CompoundBorder");
+		GridLayoutFactory.create(this);
+		m_outsideField =
+				createBorderField(
+						ModelMessages.CompoundBorderComposite_outsideBorder,
+						ModelMessages.CompoundBorderComposite_outsideEdit);
+		m_insideField =
+				createBorderField(
+						ModelMessages.CompoundBorderComposite_insideBorder,
+						ModelMessages.CompoundBorderComposite_insideEdit);
+		{
+			Button swapButton = new Button(this, SWT.NONE);
+			GridDataFactory.create(swapButton).grabH().alignHR().hintHC(10);
+			swapButton.setText(ModelMessages.CompoundBorderComposite_swap);
+			swapButton.addListener(SWT.Selection, new Listener() {
+				public void handleEvent(Event e) {
+					ExecutionUtils.runLog(new RunnableEx() {
+						public void run() throws Exception {
+							Border outsideBorder = m_outsideField.getBorder();
+							m_outsideField.setBorder(m_insideField.getBorder());
+							m_insideField.setBorder(outsideBorder);
+							m_borderDialog.borderUpdated();
+						}
+					});
+				}
+			});
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void initialize(BorderDialog borderDialog, AstEditor editor) {
-    super.initialize(borderDialog, editor);
-    m_outsideField.setEditor(editor);
-    m_insideField.setEditor(editor);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void initialize(BorderDialog borderDialog, AstEditor editor) {
+		super.initialize(borderDialog, editor);
+		m_outsideField.setEditor(editor);
+		m_insideField.setEditor(editor);
+	}
 
-  @Override
-  public boolean setBorder(Border border) throws Exception {
-    if (border instanceof CompoundBorder) {
-      CompoundBorder ourBorder = (CompoundBorder) border;
-      m_outsideField.setBorder(ourBorder.getOutsideBorder());
-      m_insideField.setBorder(ourBorder.getInsideBorder());
-      // OK, this is our Border
-      return true;
-    } else {
-      // no, we don't know this Border
-      return false;
-    }
-  }
+	@Override
+	public boolean setBorder(Border border) throws Exception {
+		if (border instanceof CompoundBorder) {
+			CompoundBorder ourBorder = (CompoundBorder) border;
+			m_outsideField.setBorder(ourBorder.getOutsideBorder());
+			m_insideField.setBorder(ourBorder.getInsideBorder());
+			// OK, this is our Border
+			return true;
+		} else {
+			// no, we don't know this Border
+			return false;
+		}
+	}
 
-  @Override
-  public String getSource() throws Exception {
-    String outsideSource = m_outsideField.getSource();
-    String insideSource = m_insideField.getSource();
-    if (outsideSource == null && insideSource == null) {
-      return "new javax.swing.border.CompoundBorder()";
-    }
-    return "new javax.swing.border.CompoundBorder(" + outsideSource + ", " + insideSource + ")";
-  }
+	@Override
+	public String getSource() throws Exception {
+		String outsideSource = m_outsideField.getSource();
+		String insideSource = m_insideField.getSource();
+		if (outsideSource == null && insideSource == null) {
+			return "new javax.swing.border.CompoundBorder()";
+		}
+		return "new javax.swing.border.CompoundBorder(" + outsideSource + ", " + insideSource + ")";
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/pages/DefaultBorderComposite.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/pages/DefaultBorderComposite.java
index a7aca1772..557244c99 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/pages/DefaultBorderComposite.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/pages/DefaultBorderComposite.java
@@ -24,27 +24,27 @@
  * @coverage swing.property.editor
  */
 public final class DefaultBorderComposite extends AbstractBorderComposite {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DefaultBorderComposite(Composite parent) {
-    super(parent, "(default)");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DefaultBorderComposite(Composite parent) {
+		super(parent, "(default)");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean setBorder(Border border) throws Exception {
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean setBorder(Border border) throws Exception {
+		return false;
+	}
 
-  @Override
-  public String getSource() throws Exception {
-    return null;
-  }
+	@Override
+	public String getSource() throws Exception {
+		return null;
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/pages/EmptyBorderComposite.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/pages/EmptyBorderComposite.java
index eb096c1c3..3aae979c0 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/pages/EmptyBorderComposite.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/pages/EmptyBorderComposite.java
@@ -28,61 +28,61 @@
  * @coverage swing.property.editor
  */
 public final class EmptyBorderComposite extends AbstractBorderComposite {
-  private final IntegerField m_topField;
-  private final IntegerField m_leftField;
-  private final IntegerField m_bottomField;
-  private final IntegerField m_rightField;
+	private final IntegerField m_topField;
+	private final IntegerField m_leftField;
+	private final IntegerField m_bottomField;
+	private final IntegerField m_rightField;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public EmptyBorderComposite(Composite parent) {
-    super(parent, "EmptyBorder");
-    GridLayoutFactory.create(this);
-    m_topField = createIntegerField(ModelMessages.EmptyBorderComposite_top);
-    m_leftField = createIntegerField(ModelMessages.EmptyBorderComposite_left);
-    m_bottomField = createIntegerField(ModelMessages.EmptyBorderComposite_bottom);
-    m_rightField = createIntegerField(ModelMessages.EmptyBorderComposite_right);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public EmptyBorderComposite(Composite parent) {
+		super(parent, "EmptyBorder");
+		GridLayoutFactory.create(this);
+		m_topField = createIntegerField(ModelMessages.EmptyBorderComposite_top);
+		m_leftField = createIntegerField(ModelMessages.EmptyBorderComposite_left);
+		m_bottomField = createIntegerField(ModelMessages.EmptyBorderComposite_bottom);
+		m_rightField = createIntegerField(ModelMessages.EmptyBorderComposite_right);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean setBorder(Border border) throws Exception {
-    if (border != null && border.getClass() == EmptyBorder.class) {
-      EmptyBorder ourBorder = (EmptyBorder) border;
-      Insets borderInsets = ourBorder.getBorderInsets();
-      m_topField.setValue(borderInsets.top);
-      m_leftField.setValue(borderInsets.left);
-      m_bottomField.setValue(borderInsets.bottom);
-      m_rightField.setValue(borderInsets.right);
-      // OK, this is our Border
-      return true;
-    } else {
-      m_topField.setValue(0);
-      m_leftField.setValue(0);
-      m_bottomField.setValue(0);
-      m_rightField.setValue(0);
-      // no, we don't know this Border
-      return false;
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean setBorder(Border border) throws Exception {
+		if (border != null && border.getClass() == EmptyBorder.class) {
+			EmptyBorder ourBorder = (EmptyBorder) border;
+			Insets borderInsets = ourBorder.getBorderInsets();
+			m_topField.setValue(borderInsets.top);
+			m_leftField.setValue(borderInsets.left);
+			m_bottomField.setValue(borderInsets.bottom);
+			m_rightField.setValue(borderInsets.right);
+			// OK, this is our Border
+			return true;
+		} else {
+			m_topField.setValue(0);
+			m_leftField.setValue(0);
+			m_bottomField.setValue(0);
+			m_rightField.setValue(0);
+			// no, we don't know this Border
+			return false;
+		}
+	}
 
-  @Override
-  public String getSource() throws Exception {
-    return "new javax.swing.border.EmptyBorder("
-        + m_topField.getSource()
-        + ", "
-        + m_leftField.getSource()
-        + ", "
-        + m_bottomField.getSource()
-        + ", "
-        + m_rightField.getSource()
-        + ")";
-  }
+	@Override
+	public String getSource() throws Exception {
+		return "new javax.swing.border.EmptyBorder("
+				+ m_topField.getSource()
+				+ ", "
+				+ m_leftField.getSource()
+				+ ", "
+				+ m_bottomField.getSource()
+				+ ", "
+				+ m_rightField.getSource()
+				+ ")";
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/pages/EtchedBorderComposite.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/pages/EtchedBorderComposite.java
index 7f146b90a..3ae6291ee 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/pages/EtchedBorderComposite.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/pages/EtchedBorderComposite.java
@@ -27,65 +27,65 @@
  * @coverage swing.property.editor
  */
 public final class EtchedBorderComposite extends AbstractBorderComposite {
-  private final RadioField m_typeField;
-  private final ColorField m_highlightField;
-  private final ColorField m_shadowField;
+	private final RadioField m_typeField;
+	private final ColorField m_highlightField;
+	private final ColorField m_shadowField;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public EtchedBorderComposite(Composite parent) {
-    super(parent, "EtchedBorder");
-    GridLayoutFactory.create(this);
-    m_typeField =
-        createRadioField(
-            ModelMessages.EtchedBorderComposite_etchType,
-            EtchedBorder.class,
-            new String[]{"LOWERED", "RAISED"},
-            new String[]{
-                ModelMessages.EtchedBorderComposite_etchLowered,
-                ModelMessages.EtchedBorderComposite_etchRaised});
-    m_highlightField = createColorField(ModelMessages.EtchedBorderComposite_highlightColor);
-    m_shadowField = createColorField(ModelMessages.EtchedBorderComposite_shadowColor);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public EtchedBorderComposite(Composite parent) {
+		super(parent, "EtchedBorder");
+		GridLayoutFactory.create(this);
+		m_typeField =
+				createRadioField(
+						ModelMessages.EtchedBorderComposite_etchType,
+						EtchedBorder.class,
+						new String[]{"LOWERED", "RAISED"},
+						new String[]{
+								ModelMessages.EtchedBorderComposite_etchLowered,
+								ModelMessages.EtchedBorderComposite_etchRaised});
+		m_highlightField = createColorField(ModelMessages.EtchedBorderComposite_highlightColor);
+		m_shadowField = createColorField(ModelMessages.EtchedBorderComposite_shadowColor);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean setBorder(Border border) throws Exception {
-    if (border instanceof EtchedBorder) {
-      EtchedBorder ourBorder = (EtchedBorder) border;
-      m_typeField.setValue(ourBorder.getEtchType());
-      m_highlightField.setValue(ourBorder.getHighlightColor());
-      m_shadowField.setValue(ourBorder.getShadowColor());
-      // OK, this is our Border
-      return true;
-    } else {
-      m_typeField.setValue(EtchedBorder.LOWERED);
-      // no, we don't know this Border
-      return false;
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean setBorder(Border border) throws Exception {
+		if (border instanceof EtchedBorder) {
+			EtchedBorder ourBorder = (EtchedBorder) border;
+			m_typeField.setValue(ourBorder.getEtchType());
+			m_highlightField.setValue(ourBorder.getHighlightColor());
+			m_shadowField.setValue(ourBorder.getShadowColor());
+			// OK, this is our Border
+			return true;
+		} else {
+			m_typeField.setValue(EtchedBorder.LOWERED);
+			// no, we don't know this Border
+			return false;
+		}
+	}
 
-  @Override
-  public String getSource() throws Exception {
-    String typeSource = m_typeField.getSource();
-    String highlightSource = m_highlightField.getSource();
-    String shadowSource = m_shadowField.getSource();
-    if (highlightSource == null && shadowSource == null) {
-      return "new javax.swing.border.EtchedBorder(" + typeSource + ")";
-    }
-    return "new javax.swing.border.EtchedBorder("
-        + typeSource
-        + ", "
-        + highlightSource
-        + ", "
-        + shadowSource
-        + ")";
-  }
+	@Override
+	public String getSource() throws Exception {
+		String typeSource = m_typeField.getSource();
+		String highlightSource = m_highlightField.getSource();
+		String shadowSource = m_shadowField.getSource();
+		if (highlightSource == null && shadowSource == null) {
+			return "new javax.swing.border.EtchedBorder(" + typeSource + ")";
+		}
+		return "new javax.swing.border.EtchedBorder("
+		+ typeSource
+		+ ", "
+		+ highlightSource
+		+ ", "
+		+ shadowSource
+		+ ")";
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/pages/LineBorderComposite.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/pages/LineBorderComposite.java
index 945299ad1..3fba35728 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/pages/LineBorderComposite.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/pages/LineBorderComposite.java
@@ -30,60 +30,60 @@
  * @coverage swing.property.editor
  */
 public final class LineBorderComposite extends AbstractBorderComposite {
-  private final ColorField m_colorField;
-  private final IntegerField m_thicknessField;
-  private final BooleanField m_typeField;
+	private final ColorField m_colorField;
+	private final IntegerField m_thicknessField;
+	private final BooleanField m_typeField;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public LineBorderComposite(Composite parent) {
-    super(parent, "LineBorder");
-    GridLayoutFactory.create(this);
-    m_colorField = createColorField(ModelMessages.LineBorderComposite_color);
-    m_thicknessField = createIntegerField(ModelMessages.LineBorderComposite_thinkness);
-    m_typeField =
-        createBooleanField(ModelMessages.LineBorderComposite_corners, new String[]{
-            ModelMessages.LineBorderComposite_cornersSquare,
-            ModelMessages.LineBorderComposite_cornersRounded});
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public LineBorderComposite(Composite parent) {
+		super(parent, "LineBorder");
+		GridLayoutFactory.create(this);
+		m_colorField = createColorField(ModelMessages.LineBorderComposite_color);
+		m_thicknessField = createIntegerField(ModelMessages.LineBorderComposite_thinkness);
+		m_typeField =
+				createBooleanField(ModelMessages.LineBorderComposite_corners, new String[]{
+						ModelMessages.LineBorderComposite_cornersSquare,
+						ModelMessages.LineBorderComposite_cornersRounded});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean setBorder(Border border) throws Exception {
-    if (border instanceof LineBorder) {
-      LineBorder ourBorder = (LineBorder) border;
-      m_colorField.setValue(ourBorder.getLineColor());
-      m_thicknessField.setValue(ourBorder.getThickness());
-      m_typeField.setValue(ourBorder.getRoundedCorners());
-      // OK, this is our Border
-      return true;
-    } else {
-      m_colorField.setValue(Color.BLACK);
-      m_thicknessField.setValue(1);
-      m_typeField.setValue(false);
-      // no, we don't know this Border
-      return false;
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean setBorder(Border border) throws Exception {
+		if (border instanceof LineBorder) {
+			LineBorder ourBorder = (LineBorder) border;
+			m_colorField.setValue(ourBorder.getLineColor());
+			m_thicknessField.setValue(ourBorder.getThickness());
+			m_typeField.setValue(ourBorder.getRoundedCorners());
+			// OK, this is our Border
+			return true;
+		} else {
+			m_colorField.setValue(Color.BLACK);
+			m_thicknessField.setValue(1);
+			m_typeField.setValue(false);
+			// no, we don't know this Border
+			return false;
+		}
+	}
 
-  @Override
-  public String getSource() throws Exception {
-    String colorSource = m_colorField.getSource();
-    String thinknessSource = m_thicknessField.getSource();
-    String cornersSource = m_typeField.getSource();
-    if ("false".equals(cornersSource)) {
-      if ("1".equals(thinknessSource)) {
-        return "new javax.swing.border.LineBorder(" + colorSource + ")";
-      }
-      return "new javax.swing.border.LineBorder(" + colorSource + ", " + thinknessSource + ")";
-    }
-    return "new javax.swing.border.LineBorder(" + colorSource + ", " + thinknessSource + ", true)";
-  }
+	@Override
+	public String getSource() throws Exception {
+		String colorSource = m_colorField.getSource();
+		String thinknessSource = m_thicknessField.getSource();
+		String cornersSource = m_typeField.getSource();
+		if ("false".equals(cornersSource)) {
+			if ("1".equals(thinknessSource)) {
+				return "new javax.swing.border.LineBorder(" + colorSource + ")";
+			}
+			return "new javax.swing.border.LineBorder(" + colorSource + ", " + thinknessSource + ")";
+		}
+		return "new javax.swing.border.LineBorder(" + colorSource + ", " + thinknessSource + ", true)";
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/pages/MatteBorderComposite.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/pages/MatteBorderComposite.java
index df3bf5dfe..b13673f7f 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/pages/MatteBorderComposite.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/pages/MatteBorderComposite.java
@@ -30,67 +30,67 @@
  * @coverage swing.property.editor
  */
 public final class MatteBorderComposite extends AbstractBorderComposite {
-  private final ColorField m_colorField;
-  private final IntegerField m_topField;
-  private final IntegerField m_leftField;
-  private final IntegerField m_bottomField;
-  private final IntegerField m_rightField;
+	private final ColorField m_colorField;
+	private final IntegerField m_topField;
+	private final IntegerField m_leftField;
+	private final IntegerField m_bottomField;
+	private final IntegerField m_rightField;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public MatteBorderComposite(Composite parent) {
-    super(parent, "MatteBorder");
-    GridLayoutFactory.create(this);
-    m_colorField = createColorField(ModelMessages.MatteBorderComposite_color);
-    m_topField = createIntegerField(ModelMessages.MatteBorderComposite_top);
-    m_leftField = createIntegerField(ModelMessages.MatteBorderComposite_left);
-    m_bottomField = createIntegerField(ModelMessages.MatteBorderComposite_bottom);
-    m_rightField = createIntegerField(ModelMessages.MatteBorderComposite_right);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public MatteBorderComposite(Composite parent) {
+		super(parent, "MatteBorder");
+		GridLayoutFactory.create(this);
+		m_colorField = createColorField(ModelMessages.MatteBorderComposite_color);
+		m_topField = createIntegerField(ModelMessages.MatteBorderComposite_top);
+		m_leftField = createIntegerField(ModelMessages.MatteBorderComposite_left);
+		m_bottomField = createIntegerField(ModelMessages.MatteBorderComposite_bottom);
+		m_rightField = createIntegerField(ModelMessages.MatteBorderComposite_right);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean setBorder(Border border) throws Exception {
-    if (border instanceof MatteBorder) {
-      MatteBorder ourBorder = (MatteBorder) border;
-      Insets borderInsets = ourBorder.getBorderInsets();
-      m_colorField.setValue(ourBorder.getMatteColor());
-      m_topField.setValue(borderInsets.top);
-      m_leftField.setValue(borderInsets.left);
-      m_bottomField.setValue(borderInsets.bottom);
-      m_rightField.setValue(borderInsets.right);
-      // OK, this is our Border
-      return true;
-    } else {
-      m_colorField.setValue(Color.BLACK);
-      m_topField.setValue(1);
-      m_leftField.setValue(1);
-      m_bottomField.setValue(1);
-      m_rightField.setValue(1);
-      // no, we don't know this Border
-      return false;
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean setBorder(Border border) throws Exception {
+		if (border instanceof MatteBorder) {
+			MatteBorder ourBorder = (MatteBorder) border;
+			Insets borderInsets = ourBorder.getBorderInsets();
+			m_colorField.setValue(ourBorder.getMatteColor());
+			m_topField.setValue(borderInsets.top);
+			m_leftField.setValue(borderInsets.left);
+			m_bottomField.setValue(borderInsets.bottom);
+			m_rightField.setValue(borderInsets.right);
+			// OK, this is our Border
+			return true;
+		} else {
+			m_colorField.setValue(Color.BLACK);
+			m_topField.setValue(1);
+			m_leftField.setValue(1);
+			m_bottomField.setValue(1);
+			m_rightField.setValue(1);
+			// no, we don't know this Border
+			return false;
+		}
+	}
 
-  @Override
-  public String getSource() throws Exception {
-    return "new javax.swing.border.MatteBorder("
-        + m_topField.getSource()
-        + ", "
-        + m_leftField.getSource()
-        + ", "
-        + m_bottomField.getSource()
-        + ", "
-        + m_rightField.getSource()
-        + ", (java.awt.Color) "
-        + m_colorField.getSource()
-        + ")";
-  }
+	@Override
+	public String getSource() throws Exception {
+		return "new javax.swing.border.MatteBorder("
+				+ m_topField.getSource()
+				+ ", "
+				+ m_leftField.getSource()
+				+ ", "
+				+ m_bottomField.getSource()
+				+ ", "
+				+ m_rightField.getSource()
+				+ ", (java.awt.Color) "
+				+ m_colorField.getSource()
+				+ ")";
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/pages/NoBorderComposite.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/pages/NoBorderComposite.java
index 9ac0d3465..13a5f4068 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/pages/NoBorderComposite.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/pages/NoBorderComposite.java
@@ -21,27 +21,27 @@
  * @coverage swing.property.editor
  */
 public final class NoBorderComposite extends AbstractBorderComposite {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public NoBorderComposite(Composite parent) {
-    super(parent, "(no border)");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public NoBorderComposite(Composite parent) {
+		super(parent, "(no border)");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean setBorder(Border border) throws Exception {
-    return border == null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean setBorder(Border border) throws Exception {
+		return border == null;
+	}
 
-  @Override
-  public String getSource() throws Exception {
-    return "null";
-  }
+	@Override
+	public String getSource() throws Exception {
+		return "null";
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/pages/SoftBevelBorderComposite.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/pages/SoftBevelBorderComposite.java
index f43597a0e..b4908f8db 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/pages/SoftBevelBorderComposite.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/pages/SoftBevelBorderComposite.java
@@ -28,94 +28,94 @@
  * @coverage swing.property.editor
  */
 public final class SoftBevelBorderComposite extends AbstractBorderComposite {
-  private final RadioField m_typeField;
-  private final ColorField m_highlightOuterField;
-  private final ColorField m_highlightInnerField;
-  private final ColorField m_shadowOuterField;
-  private final ColorField m_shadowInnerField;
+	private final RadioField m_typeField;
+	private final ColorField m_highlightOuterField;
+	private final ColorField m_highlightInnerField;
+	private final ColorField m_shadowOuterField;
+	private final ColorField m_shadowInnerField;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SoftBevelBorderComposite(Composite parent) {
-    super(parent, "SoftBevelBorder");
-    GridLayoutFactory.create(this);
-    m_typeField =
-        createRadioField(
-            ModelMessages.SoftBevelBorderComposite_bevelType,
-            BevelBorder.class,
-            new String[]{"LOWERED", "RAISED"},
-            new String[]{
-                ModelMessages.SoftBevelBorderComposite_bevelLowered,
-                ModelMessages.SoftBevelBorderComposite_bevelRaised});
-    m_highlightOuterField =
-        createColorField(ModelMessages.SoftBevelBorderComposite_highlightOuterColor);
-    m_highlightInnerField =
-        createColorField(ModelMessages.SoftBevelBorderComposite_highlightInnerColor);
-    m_shadowOuterField = createColorField(ModelMessages.SoftBevelBorderComposite_shadowOuterColor);
-    m_shadowInnerField = createColorField(ModelMessages.SoftBevelBorderComposite_shadowInnerColor);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SoftBevelBorderComposite(Composite parent) {
+		super(parent, "SoftBevelBorder");
+		GridLayoutFactory.create(this);
+		m_typeField =
+				createRadioField(
+						ModelMessages.SoftBevelBorderComposite_bevelType,
+						BevelBorder.class,
+						new String[]{"LOWERED", "RAISED"},
+						new String[]{
+								ModelMessages.SoftBevelBorderComposite_bevelLowered,
+								ModelMessages.SoftBevelBorderComposite_bevelRaised});
+		m_highlightOuterField =
+				createColorField(ModelMessages.SoftBevelBorderComposite_highlightOuterColor);
+		m_highlightInnerField =
+				createColorField(ModelMessages.SoftBevelBorderComposite_highlightInnerColor);
+		m_shadowOuterField = createColorField(ModelMessages.SoftBevelBorderComposite_shadowOuterColor);
+		m_shadowInnerField = createColorField(ModelMessages.SoftBevelBorderComposite_shadowInnerColor);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean setBorder(Border border) throws Exception {
-    if (border instanceof SoftBevelBorder) {
-      SoftBevelBorder ourBorder = (SoftBevelBorder) border;
-      m_typeField.setValue(ourBorder.getBevelType());
-      m_highlightOuterField.setValue(ourBorder.getHighlightOuterColor());
-      m_highlightInnerField.setValue(ourBorder.getHighlightInnerColor());
-      m_shadowOuterField.setValue(ourBorder.getShadowOuterColor());
-      m_shadowInnerField.setValue(ourBorder.getShadowInnerColor());
-      // OK, this is our Border
-      return true;
-    } else {
-      m_typeField.setValue(BevelBorder.LOWERED);
-      // no, we don't know this Border
-      return false;
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean setBorder(Border border) throws Exception {
+		if (border instanceof SoftBevelBorder) {
+			SoftBevelBorder ourBorder = (SoftBevelBorder) border;
+			m_typeField.setValue(ourBorder.getBevelType());
+			m_highlightOuterField.setValue(ourBorder.getHighlightOuterColor());
+			m_highlightInnerField.setValue(ourBorder.getHighlightInnerColor());
+			m_shadowOuterField.setValue(ourBorder.getShadowOuterColor());
+			m_shadowInnerField.setValue(ourBorder.getShadowInnerColor());
+			// OK, this is our Border
+			return true;
+		} else {
+			m_typeField.setValue(BevelBorder.LOWERED);
+			// no, we don't know this Border
+			return false;
+		}
+	}
 
-  @Override
-  public String getSource() throws Exception {
-    String typeSource = m_typeField.getSource();
-    String highlightOuterSource = m_highlightOuterField.getSource();
-    String highlightInnerSource = m_highlightInnerField.getSource();
-    String shadowOuterSource = m_shadowOuterField.getSource();
-    String shadowInnerSource = m_shadowInnerField.getSource();
-    if (highlightOuterSource == null
-        && highlightInnerSource == null
-        && shadowOuterSource == null
-        && shadowInnerSource == null) {
-      return "new javax.swing.border.SoftBevelBorder(" + typeSource + ")";
-    }
-    if (highlightOuterSource == null
-        && highlightInnerSource != null
-        && shadowOuterSource != null
-        && shadowInnerSource == null) {
-      return "new javax.swing.border.SoftBevelBorder("
-          + typeSource
-          + ", "
-          + highlightInnerSource
-          + ", "
-          + shadowOuterSource
-          + ")";
-    }
-    return "new javax.swing.border.SoftBevelBorder("
-        + typeSource
-        + ", "
-        + highlightOuterSource
-        + ", "
-        + highlightInnerSource
-        + ", "
-        + shadowOuterSource
-        + ", "
-        + shadowInnerSource
-        + ")";
-  }
+	@Override
+	public String getSource() throws Exception {
+		String typeSource = m_typeField.getSource();
+		String highlightOuterSource = m_highlightOuterField.getSource();
+		String highlightInnerSource = m_highlightInnerField.getSource();
+		String shadowOuterSource = m_shadowOuterField.getSource();
+		String shadowInnerSource = m_shadowInnerField.getSource();
+		if (highlightOuterSource == null
+				&& highlightInnerSource == null
+				&& shadowOuterSource == null
+				&& shadowInnerSource == null) {
+			return "new javax.swing.border.SoftBevelBorder(" + typeSource + ")";
+		}
+		if (highlightOuterSource == null
+				&& highlightInnerSource != null
+				&& shadowOuterSource != null
+				&& shadowInnerSource == null) {
+			return "new javax.swing.border.SoftBevelBorder("
+					+ typeSource
+					+ ", "
+					+ highlightInnerSource
+					+ ", "
+					+ shadowOuterSource
+					+ ")";
+		}
+		return "new javax.swing.border.SoftBevelBorder("
+		+ typeSource
+		+ ", "
+		+ highlightOuterSource
+		+ ", "
+		+ highlightInnerSource
+		+ ", "
+		+ shadowOuterSource
+		+ ", "
+		+ shadowInnerSource
+		+ ")";
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/pages/SwingBorderComposite.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/pages/SwingBorderComposite.java
index 6bd93c44b..42951b071 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/pages/SwingBorderComposite.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/pages/SwingBorderComposite.java
@@ -40,105 +40,105 @@
  * @coverage swing.property.editor
  */
 public final class SwingBorderComposite extends AbstractBorderComposite {
-  private final List m_bordersList;
+	private final List m_bordersList;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SwingBorderComposite(Composite parent) {
-    super(parent, "Swing");
-    GridLayoutFactory.create(this);
-    m_bordersList = new List(this, SWT.BORDER | SWT.V_SCROLL);
-    GridDataFactory.create(m_bordersList).hintVC(10).grab().fill();
-    // fill Border's
-    prepareBorders();
-    for (String key : m_borderKeys) {
-      m_bordersList.add(key);
-    }
-    // selection listener
-    m_bordersList.addListener(SWT.Selection, new Listener() {
-      public void handleEvent(Event e) {
-        m_borderDialog.borderUpdated();
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SwingBorderComposite(Composite parent) {
+		super(parent, "Swing");
+		GridLayoutFactory.create(this);
+		m_bordersList = new List(this, SWT.BORDER | SWT.V_SCROLL);
+		GridDataFactory.create(m_bordersList).hintVC(10).grab().fill();
+		// fill Border's
+		prepareBorders();
+		for (String key : m_borderKeys) {
+			m_bordersList.add(key);
+		}
+		// selection listener
+		m_bordersList.addListener(SWT.Selection, new Listener() {
+			public void handleEvent(Event e) {
+				m_borderDialog.borderUpdated();
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean setBorder(Border border) throws Exception {
-    // note, that this algorithm is not ideal, because we can not identify "key" by Border,
-    // and we don't have AST Expression, so we try to do our best, but can fail...
-    if (border != null) {
-      String borderClassName = border.getClass().getName();
-      if (borderClassName.indexOf('$') != -1) {
-        for (int i = 0; i < m_borders.size(); i++) {
-          if (m_borders.get(i).getClass() == border.getClass()) {
-            m_bordersList.select(i);
-            // when setBorder() invoked, our page may not have size yet, so wait for finishing
-            DesignerPlugin.getStandardDisplay().asyncExec(new Runnable() {
-              public void run() {
-                m_bordersList.showSelection();
-              }
-            });
-            // OK, this is our Border
-            return true;
-          }
-        }
-      }
-    }
-    // no, we don't know this Border
-    m_bordersList.deselectAll();
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean setBorder(Border border) throws Exception {
+		// note, that this algorithm is not ideal, because we can not identify "key" by Border,
+		// and we don't have AST Expression, so we try to do our best, but can fail...
+		if (border != null) {
+			String borderClassName = border.getClass().getName();
+			if (borderClassName.indexOf('$') != -1) {
+				for (int i = 0; i < m_borders.size(); i++) {
+					if (m_borders.get(i).getClass() == border.getClass()) {
+						m_bordersList.select(i);
+						// when setBorder() invoked, our page may not have size yet, so wait for finishing
+						DesignerPlugin.getStandardDisplay().asyncExec(new Runnable() {
+							public void run() {
+								m_bordersList.showSelection();
+							}
+						});
+						// OK, this is our Border
+						return true;
+					}
+				}
+			}
+		}
+		// no, we don't know this Border
+		m_bordersList.deselectAll();
+		return false;
+	}
 
-  @Override
-  public String getSource() throws Exception {
-    int index = m_bordersList.getSelectionIndex();
-    if (index != -1) {
-      String key = m_borderKeys.get(index);
-      return "javax.swing.UIManager.getBorder(\"" + key + "\")";
-    }
-    return null;
-  }
+	@Override
+	public String getSource() throws Exception {
+		int index = m_bordersList.getSelectionIndex();
+		if (index != -1) {
+			String key = m_borderKeys.get(index);
+			return "javax.swing.UIManager.getBorder(\"" + key + "\")";
+		}
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Internal
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static java.util.List<String> m_borderKeys;
-  private static java.util.List<Border> m_borders;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Internal
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static java.util.List<String> m_borderKeys;
+	private static java.util.List<Border> m_borders;
 
-  /**
-   * Prepares {@link FontInfo}'s for {@link Font}'s from {@link UIManager}.
-   */
-  private static synchronized void prepareBorders() {
-    if (m_borders == null) {
-      m_borderKeys = Lists.newArrayList();
-      m_borders = Lists.newArrayList();
-      UIDefaults defaults = UIManager.getLookAndFeelDefaults();
-      // prepare set of all String keys in UIManager
-      Set<String> allKeys = Sets.newTreeSet();
-      for (Iterator<?> I = defaults.keySet().iterator(); I.hasNext();) {
-        Object key = I.next();
-        if (key instanceof String) {
-          allKeys.add((String) key);
-        }
-      }
-      // add Border for each key
-      for (String key : allKeys) {
-        Border border = defaults.getBorder(key);
-        if (border != null) {
-          m_borderKeys.add(key);
-          m_borders.add(border);
-        }
-      }
-    }
-  }
+	/**
+	 * Prepares {@link FontInfo}'s for {@link Font}'s from {@link UIManager}.
+	 */
+	private static synchronized void prepareBorders() {
+		if (m_borders == null) {
+			m_borderKeys = Lists.newArrayList();
+			m_borders = Lists.newArrayList();
+			UIDefaults defaults = UIManager.getLookAndFeelDefaults();
+			// prepare set of all String keys in UIManager
+			Set<String> allKeys = Sets.newTreeSet();
+			for (Iterator<?> I = defaults.keySet().iterator(); I.hasNext();) {
+				Object key = I.next();
+				if (key instanceof String) {
+					allKeys.add((String) key);
+				}
+			}
+			// add Border for each key
+			for (String key : allKeys) {
+				Border border = defaults.getBorder(key);
+				if (border != null) {
+					m_borderKeys.add(key);
+					m_borders.add(border);
+				}
+			}
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/pages/TitledBorderComposite.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/pages/TitledBorderComposite.java
index db7199c55..acdaadc66 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/pages/TitledBorderComposite.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/border/pages/TitledBorderComposite.java
@@ -32,108 +32,108 @@
  * @coverage swing.property.editor
  */
 public final class TitledBorderComposite extends AbstractBorderComposite {
-  private final TextField m_titleField;
-  private final ComboField m_titleJustificationField;
-  private final ComboField m_titlePositionField;
-  private final ColorField m_titleColorField;
-  private final BorderField m_borderField;
+	private final TextField m_titleField;
+	private final ComboField m_titleJustificationField;
+	private final ComboField m_titlePositionField;
+	private final ColorField m_titleColorField;
+	private final BorderField m_borderField;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public TitledBorderComposite(Composite parent) {
-    super(parent, "TitledBorder");
-    GridLayoutFactory.create(this);
-    m_titleField = createTextField(ModelMessages.TitledBorderComposite_title);
-    m_titleJustificationField =
-        createComboField(
-            ModelMessages.TitledBorderComposite_titleJustification,
-            TitledBorder.class,
-            new String[]{"LEFT", "CENTER", "RIGHT", "LEADING", "TRAILING"},
-            new String[]{
-                ModelMessages.TitledBorderComposite_justLeft,
-                ModelMessages.TitledBorderComposite_justCenter,
-                ModelMessages.TitledBorderComposite_justRight,
-                ModelMessages.TitledBorderComposite_justLeading,
-                ModelMessages.TitledBorderComposite_justTrailing});
-    m_titlePositionField =
-        createComboField(
-            ModelMessages.TitledBorderComposite_titlePosition,
-            TitledBorder.class,
-            new String[]{"ABOVE_TOP", "TOP", "BELOW_TOP", "ABOVE_BOTTOM", "BOTTOM", "BELOW_BOTTOM"},
-            new String[]{
-                ModelMessages.TitledBorderComposite_posAboveTop,
-                ModelMessages.TitledBorderComposite_posTop,
-                ModelMessages.TitledBorderComposite_posBelowTop,
-                ModelMessages.TitledBorderComposite_posAboveBottom,
-                ModelMessages.TitledBorderComposite_posBottom,
-                ModelMessages.TitledBorderComposite_posBelowBottom});
-    m_titleColorField = createColorField(ModelMessages.TitledBorderComposite_titleColor);
-    m_borderField =
-        createBorderField(
-            ModelMessages.TitledBorderComposite_border,
-            ModelMessages.TitledBorderComposite_borderEdit);
-    // configure layout
-    GridDataFactory.create(m_titleField).fillH();
-    GridDataFactory.create(m_titleJustificationField).fillH();
-    GridDataFactory.create(m_titlePositionField).fillH();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public TitledBorderComposite(Composite parent) {
+		super(parent, "TitledBorder");
+		GridLayoutFactory.create(this);
+		m_titleField = createTextField(ModelMessages.TitledBorderComposite_title);
+		m_titleJustificationField =
+				createComboField(
+						ModelMessages.TitledBorderComposite_titleJustification,
+						TitledBorder.class,
+						new String[]{"LEFT", "CENTER", "RIGHT", "LEADING", "TRAILING"},
+						new String[]{
+								ModelMessages.TitledBorderComposite_justLeft,
+								ModelMessages.TitledBorderComposite_justCenter,
+								ModelMessages.TitledBorderComposite_justRight,
+								ModelMessages.TitledBorderComposite_justLeading,
+								ModelMessages.TitledBorderComposite_justTrailing});
+		m_titlePositionField =
+				createComboField(
+						ModelMessages.TitledBorderComposite_titlePosition,
+						TitledBorder.class,
+						new String[]{"ABOVE_TOP", "TOP", "BELOW_TOP", "ABOVE_BOTTOM", "BOTTOM", "BELOW_BOTTOM"},
+						new String[]{
+								ModelMessages.TitledBorderComposite_posAboveTop,
+								ModelMessages.TitledBorderComposite_posTop,
+								ModelMessages.TitledBorderComposite_posBelowTop,
+								ModelMessages.TitledBorderComposite_posAboveBottom,
+								ModelMessages.TitledBorderComposite_posBottom,
+								ModelMessages.TitledBorderComposite_posBelowBottom});
+		m_titleColorField = createColorField(ModelMessages.TitledBorderComposite_titleColor);
+		m_borderField =
+				createBorderField(
+						ModelMessages.TitledBorderComposite_border,
+						ModelMessages.TitledBorderComposite_borderEdit);
+		// configure layout
+		GridDataFactory.create(m_titleField).fillH();
+		GridDataFactory.create(m_titleJustificationField).fillH();
+		GridDataFactory.create(m_titlePositionField).fillH();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void initialize(BorderDialog borderDialog, AstEditor editor) {
-    super.initialize(borderDialog, editor);
-    m_borderField.setEditor(editor);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void initialize(BorderDialog borderDialog, AstEditor editor) {
+		super.initialize(borderDialog, editor);
+		m_borderField.setEditor(editor);
+	}
 
-  @Override
-  public boolean setBorder(Border border) throws Exception {
-    if (border instanceof TitledBorder) {
-      TitledBorder ourBorder = (TitledBorder) border;
-      m_titleField.setValue(ourBorder.getTitle());
-      m_titleJustificationField.setValue(ourBorder.getTitleJustification());
-      m_titlePositionField.setValue(ourBorder.getTitlePosition());
-      m_titleColorField.setValue(ourBorder.getTitleColor());
-      m_borderField.setBorder(ourBorder.getBorder());
-      // OK, this is our Border
-      return true;
-    } else {
-      m_titleField.setValue("");
-      m_titleJustificationField.setValue(TitledBorder.LEADING);
-      m_titlePositionField.setValue(TitledBorder.TOP);
-      m_titleColorField.setValue(null);
-      m_borderField.setBorder(null);
-      // no, we don't know this Border
-      return false;
-    }
-  }
+	@Override
+	public boolean setBorder(Border border) throws Exception {
+		if (border instanceof TitledBorder) {
+			TitledBorder ourBorder = (TitledBorder) border;
+			m_titleField.setValue(ourBorder.getTitle());
+			m_titleJustificationField.setValue(ourBorder.getTitleJustification());
+			m_titlePositionField.setValue(ourBorder.getTitlePosition());
+			m_titleColorField.setValue(ourBorder.getTitleColor());
+			m_borderField.setBorder(ourBorder.getBorder());
+			// OK, this is our Border
+			return true;
+		} else {
+			m_titleField.setValue("");
+			m_titleJustificationField.setValue(TitledBorder.LEADING);
+			m_titlePositionField.setValue(TitledBorder.TOP);
+			m_titleColorField.setValue(null);
+			m_borderField.setBorder(null);
+			// no, we don't know this Border
+			return false;
+		}
+	}
 
-  @Override
-  public String getSource() throws Exception {
-    String borderSource = m_borderField.getSource();
-    String titleSource = m_titleField.getSource();
-    String titleJustificationSource = m_titleJustificationField.getSource();
-    String titlePositionSource = m_titlePositionField.getSource();
-    String titleFontSource = "null";
-    String titleColorSource = m_titleColorField.getSource();
-    return "new javax.swing.border.TitledBorder("
-        + borderSource
-        + ", "
-        + titleSource
-        + ", "
-        + titleJustificationSource
-        + ", "
-        + titlePositionSource
-        + ", "
-        + titleFontSource
-        + ", "
-        + titleColorSource
-        + ")";
-  }
+	@Override
+	public String getSource() throws Exception {
+		String borderSource = m_borderField.getSource();
+		String titleSource = m_titleField.getSource();
+		String titleJustificationSource = m_titleJustificationField.getSource();
+		String titlePositionSource = m_titlePositionField.getSource();
+		String titleFontSource = "null";
+		String titleColorSource = m_titleColorField.getSource();
+		return "new javax.swing.border.TitledBorder("
+		+ borderSource
+		+ ", "
+		+ titleSource
+		+ ", "
+		+ titleJustificationSource
+		+ ", "
+		+ titlePositionSource
+		+ ", "
+		+ titleFontSource
+		+ ", "
+		+ titleColorSource
+		+ ")";
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/color/AwtColors.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/color/AwtColors.java
index 68eda4537..9185193c7 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/color/AwtColors.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/color/AwtColors.java
@@ -36,119 +36,119 @@
  * @coverage swing.property.editor
  */
 public final class AwtColors {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AWT
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static ColorInfo[] m_colors_AWT;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AWT
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static ColorInfo[] m_colors_AWT;
 
-  /**
-   * @return {@link ColorInfo}'s for colors from {@link Color}.
-   */
-  public static ColorInfo[] getColors_AWT() {
-    if (m_colors_AWT == null) {
-      List<ColorInfo> colors = Lists.newArrayList();
-      try {
-        Field[] colorFields = Color.class.getFields();
-        for (int i = 0; i < colorFields.length; i++) {
-          Field field = colorFields[i];
-          String fieldName = field.getName();
-          if (field.getType() == Color.class
-              && fieldName.toUpperCase(Locale.ENGLISH).equals(fieldName)) {
-            Color color = (Color) field.get(null);
-            ColorInfo colorInfo =
-                new ColorInfo(fieldName, color.getRed(), color.getGreen(), color.getBlue());
-            colorInfo.setData("java.awt.Color." + fieldName);
-            colorInfo.setToolkitColor(color);
-            colors.add(colorInfo);
-          }
-        }
-      } catch (Throwable e) {
-        throw ReflectionUtils.propagate(e);
-      }
-      m_colors_AWT = colors.toArray(new ColorInfo[colors.size()]);
-    }
-    return m_colors_AWT;
-  }
+	/**
+	 * @return {@link ColorInfo}'s for colors from {@link Color}.
+	 */
+	public static ColorInfo[] getColors_AWT() {
+		if (m_colors_AWT == null) {
+			List<ColorInfo> colors = Lists.newArrayList();
+			try {
+				Field[] colorFields = Color.class.getFields();
+				for (int i = 0; i < colorFields.length; i++) {
+					Field field = colorFields[i];
+					String fieldName = field.getName();
+					if (field.getType() == Color.class
+							&& fieldName.toUpperCase(Locale.ENGLISH).equals(fieldName)) {
+						Color color = (Color) field.get(null);
+						ColorInfo colorInfo =
+								new ColorInfo(fieldName, color.getRed(), color.getGreen(), color.getBlue());
+						colorInfo.setData("java.awt.Color." + fieldName);
+						colorInfo.setToolkitColor(color);
+						colors.add(colorInfo);
+					}
+				}
+			} catch (Throwable e) {
+				throw ReflectionUtils.propagate(e);
+			}
+			m_colors_AWT = colors.toArray(new ColorInfo[colors.size()]);
+		}
+		return m_colors_AWT;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // System
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static ColorInfo[] m_colors_System;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// System
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static ColorInfo[] m_colors_System;
 
-  /**
-   * @return {@link ColorInfo}'s for colors from {@link SystemColor}.
-   */
-  public static ColorInfo[] getColors_System() {
-    if (m_colors_System == null) {
-      List<ColorInfo> colors = Lists.newArrayList();
-      try {
-        Field[] colorFields = SystemColor.class.getFields();
-        for (int i = 0; i < colorFields.length; i++) {
-          Field field = colorFields[i];
-          String fieldName = field.getName();
-          if (field.getType() == SystemColor.class) {
-            Color color = (Color) field.get(null);
-            ColorInfo colorInfo =
-                new ColorInfo(fieldName, color.getRed(), color.getGreen(), color.getBlue());
-            colorInfo.setData("java.awt.SystemColor." + fieldName);
-            colorInfo.setToolkitColor(color);
-            colors.add(colorInfo);
-          }
-        }
-      } catch (Throwable e) {
-        throw ReflectionUtils.propagate(e);
-      }
-      m_colors_System = colors.toArray(new ColorInfo[colors.size()]);
-    }
-    return m_colors_System;
-  }
+	/**
+	 * @return {@link ColorInfo}'s for colors from {@link SystemColor}.
+	 */
+	public static ColorInfo[] getColors_System() {
+		if (m_colors_System == null) {
+			List<ColorInfo> colors = Lists.newArrayList();
+			try {
+				Field[] colorFields = SystemColor.class.getFields();
+				for (int i = 0; i < colorFields.length; i++) {
+					Field field = colorFields[i];
+					String fieldName = field.getName();
+					if (field.getType() == SystemColor.class) {
+						Color color = (Color) field.get(null);
+						ColorInfo colorInfo =
+								new ColorInfo(fieldName, color.getRed(), color.getGreen(), color.getBlue());
+						colorInfo.setData("java.awt.SystemColor." + fieldName);
+						colorInfo.setToolkitColor(color);
+						colors.add(colorInfo);
+					}
+				}
+			} catch (Throwable e) {
+				throw ReflectionUtils.propagate(e);
+			}
+			m_colors_System = colors.toArray(new ColorInfo[colors.size()]);
+		}
+		return m_colors_System;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Swing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static Map<String, ColorInfo[]> m_LAFColors = Maps.newHashMap();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Swing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static Map<String, ColorInfo[]> m_LAFColors = Maps.newHashMap();
 
-  //private static ColorInfo[] m_colors;
-  /**
-   * @return {@link ColorInfo}'s for colors from {@link UIManager}.
-   */
-  public static ColorInfo[] getColors_Swing() {
-    String lafClassName = UIManager.getLookAndFeel().getClass().getName();
-    ColorInfo[] colors = m_LAFColors.get(lafClassName);
-    if (colors == null) {
-      List<ColorInfo> colorList = Lists.newArrayList();
-      {
-        UIDefaults defaults = UIManager.getLookAndFeelDefaults();
-        // prepare set of all String keys in UIManager
-        Set<String> allKeys = Sets.newTreeSet();
-        for (Iterator<?> I = defaults.keySet().iterator(); I.hasNext();) {
-          Object key = I.next();
-          if (key instanceof String) {
-            allKeys.add((String) key);
-          }
-        }
-        // add ColorInfo for each Color key
-        for (String key : allKeys) {
-          Color color = defaults.getColor(key);
-          if (color != null) {
-            ColorInfo colorInfo =
-                new ColorInfo(key, color.getRed(), color.getGreen(), color.getBlue());
-            colorInfo.setData("javax.swing.UIManager.getColor(\"" + key + "\")");
-            colorInfo.setToolkitColor(color);
-            colorList.add(colorInfo);
-          }
-        }
-      }
-      // convert into array
-      colors = colorList.toArray(new ColorInfo[colorList.size()]);
-      m_LAFColors.put(lafClassName, colors);
-    }
-    return colors;
-  }
+	//private static ColorInfo[] m_colors;
+	/**
+	 * @return {@link ColorInfo}'s for colors from {@link UIManager}.
+	 */
+	public static ColorInfo[] getColors_Swing() {
+		String lafClassName = UIManager.getLookAndFeel().getClass().getName();
+		ColorInfo[] colors = m_LAFColors.get(lafClassName);
+		if (colors == null) {
+			List<ColorInfo> colorList = Lists.newArrayList();
+			{
+				UIDefaults defaults = UIManager.getLookAndFeelDefaults();
+				// prepare set of all String keys in UIManager
+				Set<String> allKeys = Sets.newTreeSet();
+				for (Iterator<?> I = defaults.keySet().iterator(); I.hasNext();) {
+					Object key = I.next();
+					if (key instanceof String) {
+						allKeys.add((String) key);
+					}
+				}
+				// add ColorInfo for each Color key
+				for (String key : allKeys) {
+					Color color = defaults.getColor(key);
+					if (color != null) {
+						ColorInfo colorInfo =
+								new ColorInfo(key, color.getRed(), color.getGreen(), color.getBlue());
+						colorInfo.setData("javax.swing.UIManager.getColor(\"" + key + "\")");
+						colorInfo.setToolkitColor(color);
+						colorList.add(colorInfo);
+					}
+				}
+			}
+			// convert into array
+			colors = colorList.toArray(new ColorInfo[colorList.size()]);
+			m_LAFColors.put(lafClassName, colors);
+		}
+		return colors;
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/color/ColorPropertyEditor.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/color/ColorPropertyEditor.java
index 1f9e1b33b..9cb021077 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/color/ColorPropertyEditor.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/color/ColorPropertyEditor.java
@@ -59,331 +59,331 @@
  * @coverage swing.property.editor
  */
 public final class ColorPropertyEditor extends PropertyEditor {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final PropertyEditor INSTANCE = new ColorPropertyEditor();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final PropertyEditor INSTANCE = new ColorPropertyEditor();
 	private static String preferencePrefix = "SWING";
-  //Preferences for the color property editor
-  static Preferences preferences =
-      InstanceScope.INSTANCE.getNode(IColorChooserPreferenceConstants.PREFERENCE_NODE);
+	//Preferences for the color property editor
+	static Preferences preferences =
+			InstanceScope.INSTANCE.getNode(IColorChooserPreferenceConstants.PREFERENCE_NODE);
 
-  private ColorPropertyEditor() {
-  }
+	private ColorPropertyEditor() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final int SAMPLE_SIZE = 10;
-  private static final int SAMPLE_MARGIN = 3;
-  private final PropertyEditorPresentation m_presentation = new ButtonPropertyEditorPresentation() {
-    @Override
-    protected void onClick(PropertyTable propertyTable, Property property) throws Exception {
-      openDialog(property);
-    }
-  };
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final int SAMPLE_SIZE = 10;
+	private static final int SAMPLE_MARGIN = 3;
+	private final PropertyEditorPresentation m_presentation = new ButtonPropertyEditorPresentation() {
+		@Override
+		protected void onClick(PropertyTable propertyTable, Property property) throws Exception {
+			openDialog(property);
+		}
+	};
 
-  @Override
-  public PropertyEditorPresentation getPresentation() {
-    return m_presentation;
-  }
+	@Override
+	public PropertyEditorPresentation getPresentation() {
+		return m_presentation;
+	}
 
-  @Override
-  public void paint(Property property, GC gc, int x, int y, int width, int height)
-      throws Exception {
-    Object value = property.getValue();
-    if (value instanceof java.awt.Color) {
-      // draw color sample
-      {
-        java.awt.Color awtColor = (java.awt.Color) value;
-        Color swtColor =
-            new Color(null, awtColor.getRed(), awtColor.getGreen(), awtColor.getBlue());
-        //
-        Color oldBackground = gc.getBackground();
-        Color oldForeground = gc.getForeground();
-        try {
-          int width_c = SAMPLE_SIZE;
-          int height_c = SAMPLE_SIZE;
-          int x_c = x;
-          int y_c = y + (height - height_c) / 2;
-          // update rest bounds
-          {
-            int delta = SAMPLE_SIZE + SAMPLE_MARGIN;
-            x += delta;
-            width -= delta;
-          }
-          // fill
-          {
-            gc.setBackground(swtColor);
-            gc.fillRectangle(x_c, y_c, width_c, height_c);
-          }
-          // draw line
-          gc.setForeground(IColorConstants.gray);
-          gc.drawRectangle(x_c, y_c, width_c, height_c);
-        } finally {
-          gc.setBackground(oldBackground);
-          gc.setForeground(oldForeground);
-          swtColor.dispose();
-        }
-      }
-      // draw color text
-      {
-        String text = getText(property);
-        DrawUtils.drawStringCV(gc, text, x, y, width, height);
-      }
-    }
-  }
+	@Override
+	public void paint(Property property, GC gc, int x, int y, int width, int height)
+			throws Exception {
+		Object value = property.getValue();
+		if (value instanceof java.awt.Color) {
+			// draw color sample
+			{
+				java.awt.Color awtColor = (java.awt.Color) value;
+				Color swtColor =
+						new Color(null, awtColor.getRed(), awtColor.getGreen(), awtColor.getBlue());
+				//
+				Color oldBackground = gc.getBackground();
+				Color oldForeground = gc.getForeground();
+				try {
+					int width_c = SAMPLE_SIZE;
+					int height_c = SAMPLE_SIZE;
+					int x_c = x;
+					int y_c = y + (height - height_c) / 2;
+					// update rest bounds
+					{
+						int delta = SAMPLE_SIZE + SAMPLE_MARGIN;
+						x += delta;
+						width -= delta;
+					}
+					// fill
+					{
+						gc.setBackground(swtColor);
+						gc.fillRectangle(x_c, y_c, width_c, height_c);
+					}
+					// draw line
+					gc.setForeground(IColorConstants.gray);
+					gc.drawRectangle(x_c, y_c, width_c, height_c);
+				} finally {
+					gc.setBackground(oldBackground);
+					gc.setForeground(oldForeground);
+					swtColor.dispose();
+				}
+			}
+			// draw color text
+			{
+				String text = getText(property);
+				DrawUtils.drawStringCV(gc, text, x, y, width, height);
+			}
+		}
+	}
 
-  /**
-   * @return the text for current color value.
-   */
-  private String getText(Property property) throws Exception {
-    Object value = property.getValue();
-    if (value instanceof java.awt.Color) {
-      java.awt.Color color = (java.awt.Color) value;
-      Expression expression = ((GenericProperty) property).getExpression();
-      // UIManager.getColor(key)
-      {
-        String colorKey = getKey_UIManager_getColor(expression);
-        if (colorKey != null) {
-          return colorKey;
-        }
-      }
-      // Color.xxx or SystemColor.xxx
-      if (expression instanceof QualifiedName) {
-        QualifiedName qualifiedName = (QualifiedName) expression;
-        String qualifier = AstNodeUtils.getFullyQualifiedName(qualifiedName.getQualifier(), false);
-        String fieldName = qualifiedName.getName().getIdentifier();
-        // Color.xxx
-        if ("java.awt.Color".equals(qualifier)) {
-          return fieldName;
-        }
-        // system.Color.xxx
-        if ("java.awt.SystemColor".equals(qualifier)) {
-          return fieldName;
-        }
-      }
-      // use RGB
-      return color.getRed() + "," + color.getGreen() + "," + color.getBlue();
-    }
-    // not a java.awt.Color
-    return null;
-  }
+	/**
+	 * @return the text for current color value.
+	 */
+	private String getText(Property property) throws Exception {
+		Object value = property.getValue();
+		if (value instanceof java.awt.Color) {
+			java.awt.Color color = (java.awt.Color) value;
+			Expression expression = ((GenericProperty) property).getExpression();
+			// UIManager.getColor(key)
+			{
+				String colorKey = getKey_UIManager_getColor(expression);
+				if (colorKey != null) {
+					return colorKey;
+				}
+			}
+			// Color.xxx or SystemColor.xxx
+			if (expression instanceof QualifiedName) {
+				QualifiedName qualifiedName = (QualifiedName) expression;
+				String qualifier = AstNodeUtils.getFullyQualifiedName(qualifiedName.getQualifier(), false);
+				String fieldName = qualifiedName.getName().getIdentifier();
+				// Color.xxx
+				if ("java.awt.Color".equals(qualifier)) {
+					return fieldName;
+				}
+				// system.Color.xxx
+				if ("java.awt.SystemColor".equals(qualifier)) {
+					return fieldName;
+				}
+			}
+			// use RGB
+			return color.getRed() + "," + color.getGreen() + "," + color.getBlue();
+		}
+		// not a java.awt.Color
+		return null;
+	}
 
-  /**
-   * @return the key for {@link UIManager#getColor(Object)} invocation.
-   */
-  private static String getKey_UIManager_getColor(Expression expression) {
-    if (expression instanceof MethodInvocation) {
-      MethodInvocation invocation = (MethodInvocation) expression;
-      if (AstNodeUtils.getMethodSignature(invocation).equals("getColor(java.lang.Object)")
-          && AstNodeUtils.getFullyQualifiedName(invocation.getExpression(), false).equals(
-              "javax.swing.UIManager")
-          && invocation.arguments().get(0) instanceof StringLiteral) {
-        return ((StringLiteral) invocation.arguments().get(0)).getLiteralValue();
-      }
-    }
-    return null;
-  }
+	/**
+	 * @return the key for {@link UIManager#getColor(Object)} invocation.
+	 */
+	private static String getKey_UIManager_getColor(Expression expression) {
+		if (expression instanceof MethodInvocation) {
+			MethodInvocation invocation = (MethodInvocation) expression;
+			if (AstNodeUtils.getMethodSignature(invocation).equals("getColor(java.lang.Object)")
+					&& AstNodeUtils.getFullyQualifiedName(invocation.getExpression(), false).equals(
+							"javax.swing.UIManager")
+					&& invocation.arguments().get(0) instanceof StringLiteral) {
+				return ((StringLiteral) invocation.arguments().get(0)).getLiteralValue();
+			}
+		}
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static ColorDialog m_colorDialog = new ColorDialog();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static ColorDialog m_colorDialog = new ColorDialog();
 
-  public static void reloadColorDialog() {
-    m_colorDialog = new ColorDialog();
-  }
+	public static void reloadColorDialog() {
+		m_colorDialog = new ColorDialog();
+	}
 
-  @Override
-  public boolean activate(PropertyTable propertyTable, Property property, Point location)
-      throws Exception {
-    // activate using keyboard
-    if (location == null) {
-      openDialog(property);
-    }
-    // don't activate
-    return false;
-  }
+	@Override
+	public boolean activate(PropertyTable propertyTable, Property property, Point location)
+			throws Exception {
+		// activate using keyboard
+		if (location == null) {
+			openDialog(property);
+		}
+		// don't activate
+		return false;
+	}
 
-  /**
-   * Opens editing dialog.
-   */
-  private void openDialog(Property property) throws Exception {
-    // set initial color
-    {
-      Object value = property.getValue();
-      if (value instanceof java.awt.Color) {
-        java.awt.Color awtColor = (java.awt.Color) value;
-        m_colorDialog.setColorInfo(
-            new ColorInfo(awtColor.getRed(), awtColor.getGreen(), awtColor.getBlue()));
-      }
-    }
-    // open dialog
-    if (m_colorDialog.open() == Window.OK) {
-      ColorInfo colorInfo = m_colorDialog.getColorInfo();
-      String source = external_getSource(colorInfo);
-      // set expression
-      GenericProperty genericProperty = (GenericProperty) property;
-      genericProperty.setExpression(source, Property.UNKNOWN_VALUE);
-    }
-  }
+	/**
+	 * Opens editing dialog.
+	 */
+	private void openDialog(Property property) throws Exception {
+		// set initial color
+		{
+			Object value = property.getValue();
+			if (value instanceof java.awt.Color) {
+				java.awt.Color awtColor = (java.awt.Color) value;
+				m_colorDialog.setColorInfo(
+						new ColorInfo(awtColor.getRed(), awtColor.getGreen(), awtColor.getBlue()));
+			}
+		}
+		// open dialog
+		if (m_colorDialog.open() == Window.OK) {
+			ColorInfo colorInfo = m_colorDialog.getColorInfo();
+			String source = external_getSource(colorInfo);
+			// set expression
+			GenericProperty genericProperty = (GenericProperty) property;
+			genericProperty.setExpression(source, Property.UNKNOWN_VALUE);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // External editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Edits given {@link ColorInfo}.
-   *
-   * @return the modified {@link ColorInfo}, or <code>null</code> if editing was canceled.
-   */
-  public static ColorInfo external_editColor(ColorInfo colorInfo) {
-    // set initial color
-    if (colorInfo != null) {
-      m_colorDialog.setColorInfo(colorInfo);
-    }
-    // open dialog
-    if (m_colorDialog.open() == Window.OK) {
-      return m_colorDialog.getColorInfo();
-    }
-    // cancel
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// External editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Edits given {@link ColorInfo}.
+	 *
+	 * @return the modified {@link ColorInfo}, or <code>null</code> if editing was canceled.
+	 */
+	public static ColorInfo external_editColor(ColorInfo colorInfo) {
+		// set initial color
+		if (colorInfo != null) {
+			m_colorDialog.setColorInfo(colorInfo);
+		}
+		// open dialog
+		if (m_colorDialog.open() == Window.OK) {
+			return m_colorDialog.getColorInfo();
+		}
+		// cancel
+		return null;
+	}
 
-  /**
-   * @return the source for given {@link ColorInfo}.
-   */
-  public static String external_getSource(ColorInfo colorInfo) {
-    if (colorInfo.getData() != null) {
-      return (String) colorInfo.getData();
-    } else {
-      return "new java.awt.Color(" + colorInfo.getCommaRGB() + ")";
-    }
-  }
+	/**
+	 * @return the source for given {@link ColorInfo}.
+	 */
+	public static String external_getSource(ColorInfo colorInfo) {
+		if (colorInfo.getData() != null) {
+			return (String) colorInfo.getData();
+		} else {
+			return "new java.awt.Color(" + colorInfo.getCommaRGB() + ")";
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ColorDialog
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final class ColorDialog extends AbstractColorDialog {
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public ColorDialog() {
-      super(DesignerPlugin.getShell());
-    }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ColorDialog
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final class ColorDialog extends AbstractColorDialog {
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public ColorDialog() {
+			super(DesignerPlugin.getShell());
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Pages
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    protected void addPages(Composite parent) {
-      Preferences prefs = preferences.node(IColorChooserPreferenceConstants.PREFERENCE_NODE_1);
-		if (prefs.getBoolean(preferencePrefix + IColorChooserPreferenceConstants.P_CUSTOM_COLORS, true)) {
-        addPage(
-				org.eclipse.wb.internal.core.model.ModelMessages.ColorPropertyEditor_pageCustomColors,
-            new CustomColorPickerComposite(parent, SWT.NONE, this));
-      }
-		if (prefs.getBoolean(preferencePrefix + IColorChooserPreferenceConstants.P_AWT_COLORS, true)) {
-        addPage(
-				org.eclipse.wb.internal.core.model.ModelMessages.ColorPropertyEditor_pageAwtColors,
-            new AwtColorsPage(parent, SWT.NONE, this));
-      }
-		if (prefs.getBoolean(preferencePrefix + IColorChooserPreferenceConstants.P_SYSTEM_COLORS, true)) {
-        addPage(
-				org.eclipse.wb.internal.core.model.ModelMessages.ColorPropertyEditor_pageSystemColors,
-            new SystemColorsPage(parent, SWT.NONE, this));
-      }
-		if (prefs.getBoolean(preferencePrefix + IColorChooserPreferenceConstants.P_SWING_COLORS, true)) {
-        addPage(
-				org.eclipse.wb.internal.core.model.ModelMessages.ColorPropertyEditor_pageSwingColors,
-            new SwingColorsPage(parent, SWT.NONE, this));
-      }
-		if (prefs.getBoolean(preferencePrefix + IColorChooserPreferenceConstants.P_NAMED_COLORS, true)) {
-        addPage(
-				org.eclipse.wb.internal.core.model.ModelMessages.ColorPropertyEditor_pageNamedColors,
-            new NamedColorsComposite(parent, SWT.NONE, this));
-      }
-		if (prefs.getBoolean(preferencePrefix + IColorChooserPreferenceConstants.P_WEB_SAFE_COLORS, true)) {
-        addPage(
-				org.eclipse.wb.internal.core.model.ModelMessages.ColorPropertyEditor_pageWebColors,
-            new WebSafeColorsComposite(parent, SWT.NONE, this));
-      }
-    }
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AWT Colors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final class AwtColorsPage extends AbstractColorsGridComposite {
-    public AwtColorsPage(Composite parent, int style, AbstractColorDialog colorDialog) {
-      super(parent, style, colorDialog);
-      {
-        ColorsGridComposite colorsGrid = createColorsGroup(this, null, AwtColors.getColors_AWT());
-        colorsGrid.showNames(50);
-        colorsGrid.setCellHeight(25);
-        colorsGrid.setColumns(2);
-      }
-    }
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // System Colors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final class SystemColorsPage extends AbstractColorsGridComposite {
-    public SystemColorsPage(Composite parent, int style, AbstractColorDialog colorDialog) {
-      super(parent, style, colorDialog);
-      {
-        ColorsGridComposite colorsGrid =
-            createColorsGroup(this, null, AwtColors.getColors_System());
-        colorsGrid.showNames(50);
-        colorsGrid.setCellHeight(25);
-        colorsGrid.setColumns(2);
-        Image warningIcon = Display.getCurrent().getSystemImage(SWT.ICON_WARNING);
-        CLabel label = new CLabel(this, SWT.NONE);
-        label.setImage(warningIcon);
-        label.setText(ModelMessages.SystemColorWarning);
-      }
-    }
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Swing Colors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final class SwingColorsPage extends AbstractColorsGridComposite {
-    public SwingColorsPage(Composite parent, int style, AbstractColorDialog colorDialog) {
-      super(parent, style, colorDialog);
-      {
-        ScrolledComposite scrolledComposite =
-            new ScrolledComposite(this, SWT.BORDER | SWT.V_SCROLL);
-        GridDataFactory.create(scrolledComposite).grab().fill().hintV(400);
-        // create grid
-        ColorsGridComposite colorsGrid =
-            createColorsGrid(scrolledComposite, AwtColors.getColors_Swing());
-        colorsGrid.showNames(50);
-        colorsGrid.setCellHeight(25);
-        colorsGrid.setColumns(1);
-        // configure scrolling
-        scrolledComposite.setExpandHorizontal(true);
-        scrolledComposite.setContent(colorsGrid);
-        colorsGrid.setSize(colorsGrid.computeSize(SWT.DEFAULT, SWT.DEFAULT));
-      }
-    }
-  }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Pages
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		protected void addPages(Composite parent) {
+			Preferences prefs = preferences.node(IColorChooserPreferenceConstants.PREFERENCE_NODE_1);
+			if (prefs.getBoolean(preferencePrefix + IColorChooserPreferenceConstants.P_CUSTOM_COLORS, true)) {
+				addPage(
+						org.eclipse.wb.internal.core.model.ModelMessages.ColorPropertyEditor_pageCustomColors,
+						new CustomColorPickerComposite(parent, SWT.NONE, this));
+			}
+			if (prefs.getBoolean(preferencePrefix + IColorChooserPreferenceConstants.P_AWT_COLORS, true)) {
+				addPage(
+						org.eclipse.wb.internal.core.model.ModelMessages.ColorPropertyEditor_pageAwtColors,
+						new AwtColorsPage(parent, SWT.NONE, this));
+			}
+			if (prefs.getBoolean(preferencePrefix + IColorChooserPreferenceConstants.P_SYSTEM_COLORS, true)) {
+				addPage(
+						org.eclipse.wb.internal.core.model.ModelMessages.ColorPropertyEditor_pageSystemColors,
+						new SystemColorsPage(parent, SWT.NONE, this));
+			}
+			if (prefs.getBoolean(preferencePrefix + IColorChooserPreferenceConstants.P_SWING_COLORS, true)) {
+				addPage(
+						org.eclipse.wb.internal.core.model.ModelMessages.ColorPropertyEditor_pageSwingColors,
+						new SwingColorsPage(parent, SWT.NONE, this));
+			}
+			if (prefs.getBoolean(preferencePrefix + IColorChooserPreferenceConstants.P_NAMED_COLORS, true)) {
+				addPage(
+						org.eclipse.wb.internal.core.model.ModelMessages.ColorPropertyEditor_pageNamedColors,
+						new NamedColorsComposite(parent, SWT.NONE, this));
+			}
+			if (prefs.getBoolean(preferencePrefix + IColorChooserPreferenceConstants.P_WEB_SAFE_COLORS, true)) {
+				addPage(
+						org.eclipse.wb.internal.core.model.ModelMessages.ColorPropertyEditor_pageWebColors,
+						new WebSafeColorsComposite(parent, SWT.NONE, this));
+			}
+		}
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AWT Colors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final class AwtColorsPage extends AbstractColorsGridComposite {
+		public AwtColorsPage(Composite parent, int style, AbstractColorDialog colorDialog) {
+			super(parent, style, colorDialog);
+			{
+				ColorsGridComposite colorsGrid = createColorsGroup(this, null, AwtColors.getColors_AWT());
+				colorsGrid.showNames(50);
+				colorsGrid.setCellHeight(25);
+				colorsGrid.setColumns(2);
+			}
+		}
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// System Colors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final class SystemColorsPage extends AbstractColorsGridComposite {
+		public SystemColorsPage(Composite parent, int style, AbstractColorDialog colorDialog) {
+			super(parent, style, colorDialog);
+			{
+				ColorsGridComposite colorsGrid =
+						createColorsGroup(this, null, AwtColors.getColors_System());
+				colorsGrid.showNames(50);
+				colorsGrid.setCellHeight(25);
+				colorsGrid.setColumns(2);
+				Image warningIcon = Display.getCurrent().getSystemImage(SWT.ICON_WARNING);
+				CLabel label = new CLabel(this, SWT.NONE);
+				label.setImage(warningIcon);
+				label.setText(ModelMessages.SystemColorWarning);
+			}
+		}
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Swing Colors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final class SwingColorsPage extends AbstractColorsGridComposite {
+		public SwingColorsPage(Composite parent, int style, AbstractColorDialog colorDialog) {
+			super(parent, style, colorDialog);
+			{
+				ScrolledComposite scrolledComposite =
+						new ScrolledComposite(this, SWT.BORDER | SWT.V_SCROLL);
+				GridDataFactory.create(scrolledComposite).grab().fill().hintV(400);
+				// create grid
+				ColorsGridComposite colorsGrid =
+						createColorsGrid(scrolledComposite, AwtColors.getColors_Swing());
+				colorsGrid.showNames(50);
+				colorsGrid.setCellHeight(25);
+				colorsGrid.setColumns(1);
+				// configure scrolling
+				scrolledComposite.setExpandHorizontal(true);
+				scrolledComposite.setContent(colorsGrid);
+				colorsGrid.setSize(colorsGrid.computeSize(SWT.DEFAULT, SWT.DEFAULT));
+			}
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/color/SwingColorChooserPreferences.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/color/SwingColorChooserPreferences.java
index 120eb68d3..8b34b934a 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/color/SwingColorChooserPreferences.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/color/SwingColorChooserPreferences.java
@@ -70,8 +70,8 @@ protected void createPreferenceCheckboxes(Group groupLayout) {
 	protected void setPersistedPreferencesToUI() {
 		super.setPersistedPreferencesToUI();
 		cbxIncludeSwingColors
-				.setSelection(prefs.getBoolean(prefPrefix + IColorChooserPreferenceConstants.P_SWING_COLORS,
-						defaultPreferences.get(prefPrefix + IColorChooserPreferenceConstants.P_SWING_COLORS)));
+		.setSelection(prefs.getBoolean(prefPrefix + IColorChooserPreferenceConstants.P_SWING_COLORS,
+				defaultPreferences.get(prefPrefix + IColorChooserPreferenceConstants.P_SWING_COLORS)));
 		cbxIncludeAwtColors.setSelection(prefs.getBoolean(prefPrefix + IColorChooserPreferenceConstants.P_AWT_COLORS,
 				defaultPreferences.get(prefPrefix + IColorChooserPreferenceConstants.P_AWT_COLORS)));
 
@@ -102,9 +102,9 @@ protected void performApply() {
 	protected void performDefaults() {
 		super.performDefaults();
 		cbxIncludeSwingColors
-				.setSelection(defaultPreferences.get(prefPrefix + IColorChooserPreferenceConstants.P_SWING_COLORS));
+		.setSelection(defaultPreferences.get(prefPrefix + IColorChooserPreferenceConstants.P_SWING_COLORS));
 		cbxIncludeAwtColors
-				.setSelection(defaultPreferences.get(prefPrefix + IColorChooserPreferenceConstants.P_AWT_COLORS));
+		.setSelection(defaultPreferences.get(prefPrefix + IColorChooserPreferenceConstants.P_AWT_COLORS));
 
 		// Update the preferences to the default values
 		setPreferenceDefaults();
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/cursor/CursorPropertyEditor.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/cursor/CursorPropertyEditor.java
index 7c1079b20..b10f2bfc0 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/cursor/CursorPropertyEditor.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/cursor/CursorPropertyEditor.java
@@ -30,101 +30,101 @@
  * @coverage swing.property.editor
  */
 public final class CursorPropertyEditor extends AbstractComboPropertyEditor {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final PropertyEditor INSTANCE = new CursorPropertyEditor();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final PropertyEditor INSTANCE = new CursorPropertyEditor();
 
-  private CursorPropertyEditor() {
-  }
+	private CursorPropertyEditor() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getText(Property property) throws Exception {
-    Object value = property.getValue();
-    if (value instanceof Cursor) {
-      Cursor cursor = (Cursor) value;
-      // return the name of cursor field
-      for (Field cursorField : getCursorFields()) {
-        if (cursor.getType() == cursorField.getInt(null)) {
-          return cursorField.getName();
-        }
-      }
-    }
-    // unknown value
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getText(Property property) throws Exception {
+		Object value = property.getValue();
+		if (value instanceof Cursor) {
+			Cursor cursor = (Cursor) value;
+			// return the name of cursor field
+			for (Field cursorField : getCursorFields()) {
+				if (cursor.getType() == cursorField.getInt(null)) {
+					return cursorField.getName();
+				}
+			}
+		}
+		// unknown value
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AbstractComboPropertyEditor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void addItems(Property property, CCombo3 combo) throws Exception {
-    for (Field cursorField : getCursorFields()) {
-      combo.add(cursorField.getName());
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AbstractComboPropertyEditor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void addItems(Property property, CCombo3 combo) throws Exception {
+		for (Field cursorField : getCursorFields()) {
+			combo.add(cursorField.getName());
+		}
+	}
 
-  @Override
-  protected void selectItem(Property property, CCombo3 combo) throws Exception {
-    combo.setText(getText(property));
-  }
+	@Override
+	protected void selectItem(Property property, CCombo3 combo) throws Exception {
+		combo.setText(getText(property));
+	}
 
-  @Override
-  protected void toPropertyEx(Property property, CCombo3 combo, int index) throws Exception {
-    if (property instanceof GenericProperty) {
-      GenericProperty genericProperty = (GenericProperty) property;
-      // prepare source
-      String source;
-      {
-        Field cursorField = getCursorFields()[index];
-        String typeSource = "java.awt.Cursor." + cursorField.getName();
-        source = "java.awt.Cursor.getPredefinedCursor(" + typeSource + ")";
-      }
-      // set source
-      genericProperty.setExpression(source, Property.UNKNOWN_VALUE);
-    }
-  }
+	@Override
+	protected void toPropertyEx(Property property, CCombo3 combo, int index) throws Exception {
+		if (property instanceof GenericProperty) {
+			GenericProperty genericProperty = (GenericProperty) property;
+			// prepare source
+			String source;
+			{
+				Field cursorField = getCursorFields()[index];
+				String typeSource = "java.awt.Cursor." + cursorField.getName();
+				source = "java.awt.Cursor.getPredefinedCursor(" + typeSource + ")";
+			}
+			// set source
+			genericProperty.setExpression(source, Property.UNKNOWN_VALUE);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static Field[] m_cursorFields;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static Field[] m_cursorFields;
 
-  /**
-   * @return the {@link Field}'s with cursor constants from {@link Cursor}.
-   */
-  private static Field[] getCursorFields() throws Exception {
-    if (m_cursorFields == null) {
-      List<Field> cursorFields = Lists.newArrayList();
-      //
-      Field[] declaredFields = Cursor.class.getDeclaredFields();
-      for (Field field : declaredFields) {
-        int modifiers = field.getModifiers();
-        if (Modifier.isPublic(modifiers)
-            && Modifier.isStatic(modifiers)
-            && field.getType() == int.class
-            && field.getName().endsWith("_CURSOR")) {
-          int cursorType = field.getInt(null);
-          if (cursorType != Cursor.CUSTOM_CURSOR) {
-            cursorFields.add(field);
-          }
-        }
-      }
-      //
-      m_cursorFields = cursorFields.toArray(new Field[cursorFields.size()]);
-    }
-    //
-    return m_cursorFields;
-  }
+	/**
+	 * @return the {@link Field}'s with cursor constants from {@link Cursor}.
+	 */
+	private static Field[] getCursorFields() throws Exception {
+		if (m_cursorFields == null) {
+			List<Field> cursorFields = Lists.newArrayList();
+			//
+			Field[] declaredFields = Cursor.class.getDeclaredFields();
+			for (Field field : declaredFields) {
+				int modifiers = field.getModifiers();
+				if (Modifier.isPublic(modifiers)
+						&& Modifier.isStatic(modifiers)
+						&& field.getType() == int.class
+						&& field.getName().endsWith("_CURSOR")) {
+					int cursorType = field.getInt(null);
+					if (cursorType != Cursor.CUSTOM_CURSOR) {
+						cursorFields.add(field);
+					}
+				}
+			}
+			//
+			m_cursorFields = cursorFields.toArray(new Field[cursorFields.size()]);
+		}
+		//
+		return m_cursorFields;
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/font/AbstractFontPage.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/font/AbstractFontPage.java
index 93d58bc53..3b5859f73 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/font/AbstractFontPage.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/font/AbstractFontPage.java
@@ -19,27 +19,27 @@
  * @coverage swing.property.editor
  */
 public abstract class AbstractFontPage extends Composite {
-  protected final FontDialog m_fontDialog;
+	protected final FontDialog m_fontDialog;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractFontPage(Composite parent, int style, FontDialog fontDialog) {
-    super(parent, style);
-    m_fontDialog = fontDialog;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractFontPage(Composite parent, int style, FontDialog fontDialog) {
+		super(parent, style);
+		m_fontDialog = fontDialog;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets the {@link FontInfo} selected in {@link FontDialog}.
-   *
-   * @return <code>true</code> if this page thinks that it is suits for given {@link FontInfo}.
-   */
-  public abstract boolean setFont(FontInfo fontInfo);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets the {@link FontInfo} selected in {@link FontDialog}.
+	 *
+	 * @return <code>true</code> if this page thinks that it is suits for given {@link FontInfo}.
+	 */
+	public abstract boolean setFont(FontInfo fontInfo);
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/font/DerivedFontInfo.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/font/DerivedFontInfo.java
index e4da1302e..6a1b64a76 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/font/DerivedFontInfo.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/font/DerivedFontInfo.java
@@ -24,228 +24,228 @@
  * @coverage swing.property.editor
  */
 public final class DerivedFontInfo extends FontInfo {
-  final Font m_baseFont;
-  final String m_baseFontSource;
-  final String m_baseFontClipboardSource;
-  final String m_newFamily;
-  final Boolean m_newBold;
-  final Boolean m_newItalic;
-  final Integer m_deltaSize;
-  final Integer m_newSize;
-  private final Font m_font;
+	final Font m_baseFont;
+	final String m_baseFontSource;
+	final String m_baseFontClipboardSource;
+	final String m_newFamily;
+	final Boolean m_newBold;
+	final Boolean m_newItalic;
+	final Integer m_deltaSize;
+	final Integer m_newSize;
+	private final Font m_font;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DerivedFontInfo(Font baseFont,
-      String baseFontSource,
-      String baseFontClipboardSource,
-      String newFamily,
-      Boolean newBold,
-      Boolean newItalic,
-      Integer deltaSize,
-      Integer newSize) {
-    m_baseFont = baseFont;
-    m_baseFontSource = baseFontSource;
-    m_baseFontClipboardSource = baseFontClipboardSource;
-    m_newFamily = newFamily;
-    m_newBold = newBold;
-    m_newItalic = newItalic;
-    m_deltaSize = deltaSize;
-    m_newSize = newSize;
-    // create derived Font
-    {
-      String family = newFamily != null ? newFamily : baseFont.getFamily();
-      // style
-      int style = baseFont.getStyle();
-      if (newBold != null) {
-        if (newBold.booleanValue()) {
-          style |= Font.BOLD;
-        } else {
-          style &= ~Font.BOLD;
-        }
-      }
-      if (newItalic != null) {
-        if (newItalic.booleanValue()) {
-          style |= Font.ITALIC;
-        } else {
-          style &= ~Font.ITALIC;
-        }
-      }
-      // size
-      int size = baseFont.getSize();
-      if (deltaSize != null) {
-        size += deltaSize.intValue();
-      } else if (newSize != null) {
-        size = newSize.intValue();
-      }
-      // create derived Font
-      m_font = new Font(family, style, size);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DerivedFontInfo(Font baseFont,
+			String baseFontSource,
+			String baseFontClipboardSource,
+			String newFamily,
+			Boolean newBold,
+			Boolean newItalic,
+			Integer deltaSize,
+			Integer newSize) {
+		m_baseFont = baseFont;
+		m_baseFontSource = baseFontSource;
+		m_baseFontClipboardSource = baseFontClipboardSource;
+		m_newFamily = newFamily;
+		m_newBold = newBold;
+		m_newItalic = newItalic;
+		m_deltaSize = deltaSize;
+		m_newSize = newSize;
+		// create derived Font
+		{
+			String family = newFamily != null ? newFamily : baseFont.getFamily();
+			// style
+			int style = baseFont.getStyle();
+			if (newBold != null) {
+				if (newBold.booleanValue()) {
+					style |= Font.BOLD;
+				} else {
+					style &= ~Font.BOLD;
+				}
+			}
+			if (newItalic != null) {
+				if (newItalic.booleanValue()) {
+					style |= Font.ITALIC;
+				} else {
+					style &= ~Font.ITALIC;
+				}
+			}
+			// size
+			int size = baseFont.getSize();
+			if (deltaSize != null) {
+				size += deltaSize.intValue();
+			} else if (newSize != null) {
+				size = newSize.intValue();
+			}
+			// create derived Font
+			m_font = new Font(family, style, size);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Font getFont() {
-    return m_font;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Font getFont() {
+		return m_font;
+	}
 
-  @Override
-  public String getText() {
-    StringBuilder sb = new StringBuilder();
-    // derive attributes
-    {
-      // family
-      if (m_newFamily != null) {
-        sb.append("*");
-        sb.append(m_newFamily);
-      }
-      // size
-      if (m_deltaSize != null) {
-        int deltaSize = m_deltaSize.intValue();
-        if (sb.length() != 0) {
-          sb.append(" ");
-        }
-        if (deltaSize > 0) {
-          sb.append("+");
-          sb.append(deltaSize);
-        } else if (deltaSize < 0) {
-          sb.append(deltaSize);
-        }
-      } else if (m_newSize != null) {
-        if (sb.length() != 0) {
-          sb.append(" ");
-        }
-        sb.append(m_newSize.intValue());
-      }
-      // style
-      if (m_newBold != null) {
-        if (sb.length() != 0) {
-          sb.append(" ");
-        }
-        sb.append(m_newBold.booleanValue() ? "+Bold" : "-Bold");
-      }
-      if (m_newItalic != null) {
-        if (sb.length() != 0) {
-          sb.append(" ");
-        }
-        sb.append(m_newItalic.booleanValue() ? "+Italic" : "-Italic");
-      }
-    }
-    // if no changes, say this
-    if (sb.length() == 0) {
-      sb.append("<no changes>");
-    }
-    // "value" of Font
-    {
-      sb.append(", ");
-      sb.append(getText(m_font));
-    }
-    // final result
-    return sb.toString();
-  }
+	@Override
+	public String getText() {
+		StringBuilder sb = new StringBuilder();
+		// derive attributes
+		{
+			// family
+			if (m_newFamily != null) {
+				sb.append("*");
+				sb.append(m_newFamily);
+			}
+			// size
+			if (m_deltaSize != null) {
+				int deltaSize = m_deltaSize.intValue();
+				if (sb.length() != 0) {
+					sb.append(" ");
+				}
+				if (deltaSize > 0) {
+					sb.append("+");
+					sb.append(deltaSize);
+				} else if (deltaSize < 0) {
+					sb.append(deltaSize);
+				}
+			} else if (m_newSize != null) {
+				if (sb.length() != 0) {
+					sb.append(" ");
+				}
+				sb.append(m_newSize.intValue());
+			}
+			// style
+			if (m_newBold != null) {
+				if (sb.length() != 0) {
+					sb.append(" ");
+				}
+				sb.append(m_newBold.booleanValue() ? "+Bold" : "-Bold");
+			}
+			if (m_newItalic != null) {
+				if (sb.length() != 0) {
+					sb.append(" ");
+				}
+				sb.append(m_newItalic.booleanValue() ? "+Italic" : "-Italic");
+			}
+		}
+		// if no changes, say this
+		if (sb.length() == 0) {
+			sb.append("<no changes>");
+		}
+		// "value" of Font
+		{
+			sb.append(", ");
+			sb.append(getText(m_font));
+		}
+		// final result
+		return sb.toString();
+	}
 
-  @Override
-  public String getSource() throws Exception {
-    return getSource(m_baseFontSource);
-  }
+	@Override
+	public String getSource() throws Exception {
+		return getSource(m_baseFontSource);
+	}
 
-  @Override
-  public String getClipboardSource() throws Exception {
-    if (m_baseFontClipboardSource == null) {
-      return null;
-    }
-    return getSource(m_baseFontClipboardSource);
-  }
+	@Override
+	public String getClipboardSource() throws Exception {
+		if (m_baseFontClipboardSource == null) {
+			return null;
+		}
+		return getSource(m_baseFontClipboardSource);
+	}
 
-  private String getSource(String baseFontSource) throws Exception {
-    // style
-    boolean styleChanged = true;
-    String styleSource = baseFontSource + ".getStyle()";
-    {
-      if (m_newBold == null && m_newItalic == null) {
-        styleChanged = false;
-      } else if (m_newBold != null && m_newBold.booleanValue() && m_newItalic == null) {
-        styleSource += " | java.awt.Font.BOLD";
-      } else if (m_newBold != null && !m_newBold.booleanValue() && m_newItalic == null) {
-        styleSource += " & ~java.awt.Font.BOLD";
-      } else if (m_newBold == null && m_newItalic != null && m_newItalic.booleanValue()) {
-        styleSource += " | java.awt.Font.ITALIC";
-      } else if (m_newBold == null && m_newItalic != null && !m_newItalic.booleanValue()) {
-        styleSource += " & ~java.awt.Font.ITALIC";
-      } else if (m_newBold != null
-          && m_newItalic != null
-          && m_newBold.booleanValue()
-          && m_newItalic.booleanValue()) {
-        styleSource += " | java.awt.Font.BOLD";
-        styleSource += " | java.awt.Font.ITALIC";
-      } else if (m_newBold != null
-          && m_newItalic != null
-          && !m_newBold.booleanValue()
-          && m_newItalic.booleanValue()) {
-        styleSource += " & ~java.awt.Font.BOLD";
-        styleSource += " | java.awt.Font.ITALIC";
-      } else if (m_newBold != null
-          && m_newItalic != null
-          && m_newBold.booleanValue()
-          && !m_newItalic.booleanValue()) {
-        styleSource += " & ~java.awt.Font.ITALIC";
-        styleSource += " | java.awt.Font.BOLD";
-      } else if (m_newBold != null
-          && m_newItalic != null
-          && !m_newBold.booleanValue()
-          && !m_newItalic.booleanValue()) {
-        styleSource += " & ~java.awt.Font.BOLD";
-        styleSource += " & ~java.awt.Font.ITALIC";
-      }
-    }
-    // size
-    boolean sizeChanged = false;
-    String sizeSource = baseFontSource + ".getSize()";
-    {
-      if (m_deltaSize != null) {
-        int deltaSize = m_deltaSize.intValue();
-        if (deltaSize > 0) {
-          sizeSource += " + " + deltaSize + "f";
-        } else {
-          sizeSource += " - " + -deltaSize + "f";
-        }
-        sizeChanged = true;
-      } else if (m_newSize != null) {
-        sizeSource = "" + m_newSize.intValue() + "f";
-        sizeChanged = true;
-      }
-    }
-    // new family
-    if (m_newFamily != null) {
-      sizeSource = StringUtils.removeEnd(sizeSource, "f");
-      return MessageFormat.format(
-          "new java.awt.Font({0}, {1}, {2})",
-          StringConverter.INSTANCE.toJavaSource(null, m_newFamily),
-          styleSource,
-          sizeSource);
-    }
-    // style/size change
-    if (styleChanged & sizeChanged) {
-      return MessageFormat.format(
-          "{0}.deriveFont({1}, {2})",
-          baseFontSource,
-          styleSource,
-          sizeSource);
-    }
-    if (styleChanged) {
-      return MessageFormat.format("{0}.deriveFont({1})", baseFontSource, styleSource);
-    }
-    if (sizeChanged) {
-      return MessageFormat.format("{0}.deriveFont({1})", baseFontSource, sizeSource);
-    }
-    // no changes
-    return null;
-  }
+	private String getSource(String baseFontSource) throws Exception {
+		// style
+		boolean styleChanged = true;
+		String styleSource = baseFontSource + ".getStyle()";
+		{
+			if (m_newBold == null && m_newItalic == null) {
+				styleChanged = false;
+			} else if (m_newBold != null && m_newBold.booleanValue() && m_newItalic == null) {
+				styleSource += " | java.awt.Font.BOLD";
+			} else if (m_newBold != null && !m_newBold.booleanValue() && m_newItalic == null) {
+				styleSource += " & ~java.awt.Font.BOLD";
+			} else if (m_newBold == null && m_newItalic != null && m_newItalic.booleanValue()) {
+				styleSource += " | java.awt.Font.ITALIC";
+			} else if (m_newBold == null && m_newItalic != null && !m_newItalic.booleanValue()) {
+				styleSource += " & ~java.awt.Font.ITALIC";
+			} else if (m_newBold != null
+					&& m_newItalic != null
+					&& m_newBold.booleanValue()
+					&& m_newItalic.booleanValue()) {
+				styleSource += " | java.awt.Font.BOLD";
+				styleSource += " | java.awt.Font.ITALIC";
+			} else if (m_newBold != null
+					&& m_newItalic != null
+					&& !m_newBold.booleanValue()
+					&& m_newItalic.booleanValue()) {
+				styleSource += " & ~java.awt.Font.BOLD";
+				styleSource += " | java.awt.Font.ITALIC";
+			} else if (m_newBold != null
+					&& m_newItalic != null
+					&& m_newBold.booleanValue()
+					&& !m_newItalic.booleanValue()) {
+				styleSource += " & ~java.awt.Font.ITALIC";
+				styleSource += " | java.awt.Font.BOLD";
+			} else if (m_newBold != null
+					&& m_newItalic != null
+					&& !m_newBold.booleanValue()
+					&& !m_newItalic.booleanValue()) {
+				styleSource += " & ~java.awt.Font.BOLD";
+				styleSource += " & ~java.awt.Font.ITALIC";
+			}
+		}
+		// size
+		boolean sizeChanged = false;
+		String sizeSource = baseFontSource + ".getSize()";
+		{
+			if (m_deltaSize != null) {
+				int deltaSize = m_deltaSize.intValue();
+				if (deltaSize > 0) {
+					sizeSource += " + " + deltaSize + "f";
+				} else {
+					sizeSource += " - " + -deltaSize + "f";
+				}
+				sizeChanged = true;
+			} else if (m_newSize != null) {
+				sizeSource = "" + m_newSize.intValue() + "f";
+				sizeChanged = true;
+			}
+		}
+		// new family
+		if (m_newFamily != null) {
+			sizeSource = StringUtils.removeEnd(sizeSource, "f");
+			return MessageFormat.format(
+					"new java.awt.Font({0}, {1}, {2})",
+					StringConverter.INSTANCE.toJavaSource(null, m_newFamily),
+					styleSource,
+					sizeSource);
+		}
+		// style/size change
+		if (styleChanged & sizeChanged) {
+			return MessageFormat.format(
+					"{0}.deriveFont({1}, {2})",
+					baseFontSource,
+					styleSource,
+					sizeSource);
+		}
+		if (styleChanged) {
+			return MessageFormat.format("{0}.deriveFont({1})", baseFontSource, styleSource);
+		}
+		if (sizeChanged) {
+			return MessageFormat.format("{0}.deriveFont({1})", baseFontSource, sizeSource);
+		}
+		// no changes
+		return null;
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/font/DerivedFontPage.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/font/DerivedFontPage.java
index f8e1f83e8..4f0cbb590 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/font/DerivedFontPage.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/font/DerivedFontPage.java
@@ -39,328 +39,328 @@
  * @coverage swing.property.editor
  */
 public final class DerivedFontPage extends AbstractFontPage {
-  private final Combo m_familyCombo;
-  private final Button m_boldSame;
-  private final Button m_boldSet;
-  private final Button m_boldClear;
-  private final Button m_italicSame;
-  private final Button m_italicSet;
-  private final Button m_italicClear;
-  private final Button m_relativeButton;
-  private final Button m_absoluteButton;
-  private final CSpinner m_relativeSpinner;
-  private final CSpinner m_absoluteSpinner;
+	private final Combo m_familyCombo;
+	private final Button m_boldSame;
+	private final Button m_boldSet;
+	private final Button m_boldClear;
+	private final Button m_italicSame;
+	private final Button m_italicSet;
+	private final Button m_italicClear;
+	private final Button m_relativeButton;
+	private final Button m_absoluteButton;
+	private final CSpinner m_relativeSpinner;
+	private final CSpinner m_absoluteSpinner;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DerivedFontPage(Composite parent, int style, FontDialog fontDialog) {
-    super(parent, style, fontDialog);
-    GridLayoutFactory.create(this);
-    // update listener
-    Listener listener = new Listener() {
-      public void handleEvent(Event event) {
-        updateFont();
-      }
-    };
-    // family
-    {
-      createSeparator(this, ModelMessages.DerivedFontPage_familySeparator);
-      Composite composite = new Composite(this, SWT.NONE);
-      GridDataFactory.create(composite).grabH().fill();
-      GridLayoutFactory.create(composite).columns(2).noMargins();
-      {
-        Label label = new Label(composite, SWT.NONE);
-        GridDataFactory.create(label).indentHC(2).hintHC(15);
-        label.setText(ModelMessages.DerivedFontPage_familyLabel);
-      }
-      {
-        m_familyCombo = new Combo(composite, SWT.READ_ONLY);
-        GridDataFactory.create(m_familyCombo).grabH().fillH();
-        m_familyCombo.addListener(SWT.Selection, listener);
-        m_familyCombo.setVisibleItemCount(15);
-        // add items
-        {
-          m_familyCombo.add(ModelMessages.DerivedFontPage_unchanged);
-          GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
-          for (String family : ge.getAvailableFontFamilyNames()) {
-            m_familyCombo.add(family);
-          }
-        }
-      }
-    }
-    // style
-    {
-      createSeparator(this, ModelMessages.DerivedFontPage_styleSeparator);
-      Composite composite = new Composite(this, SWT.NONE);
-      GridDataFactory.create(composite).grabH().fill();
-      GridLayoutFactory.create(composite).columns(2).noMargins();
-      // BOLD
-      {
-        {
-          Label label = new Label(composite, SWT.NONE);
-          GridDataFactory.create(label).indentHC(2).hintHC(15);
-          label.setText(ModelMessages.DerivedFontPage_styleBold);
-        }
-        {
-          Composite composite2 = new Composite(composite, SWT.NONE);
-          GridLayoutFactory.create(composite2).columns(3).noMargins();
-          m_boldSame =
-              createRadioButton(
-                  composite2,
-                  ModelMessages.DerivedFontPage_styleBoldUnchanged,
-                  listener);
-          m_boldSet =
-              createRadioButton(composite2, ModelMessages.DerivedFontPage_styleBoldSet, listener);
-          m_boldClear =
-              createRadioButton(composite2, ModelMessages.DerivedFontPage_styleBoldClear, listener);
-        }
-      }
-      // ITALIC
-      {
-        {
-          Label label = new Label(composite, SWT.NONE);
-          GridDataFactory.create(label).indentHC(2).hintHC(15);
-          label.setText(ModelMessages.DerivedFontPage_styleItalic);
-        }
-        {
-          Composite composite2 = new Composite(composite, SWT.NONE);
-          GridLayoutFactory.create(composite2).columns(3).noMargins();
-          m_italicSame =
-              createRadioButton(
-                  composite2,
-                  ModelMessages.DerivedFontPage_styleItalicUnchanged,
-                  listener);
-          m_italicSet =
-              createRadioButton(composite2, ModelMessages.DerivedFontPage_styleItalicSet, listener);
-          m_italicClear =
-              createRadioButton(
-                  composite2,
-                  ModelMessages.DerivedFontPage_styleItalicClear,
-                  listener);
-        }
-      }
-    }
-    // size
-    {
-      createSeparator(this, ModelMessages.DerivedFontPage_size);
-      Composite composite = new Composite(this, SWT.NONE);
-      GridDataFactory.create(composite).grabH().fill();
-      GridLayoutFactory.create(composite).columns(2).noMargins();
-      // relative
-      {
-        {
-          m_relativeButton =
-              createRadioButton(composite, ModelMessages.DerivedFontPage_sizeRelative, listener);
-          GridDataFactory.create(m_relativeButton).indentHC(2).hintHC(15);
-        }
-        {
-          m_relativeSpinner = new CSpinner(composite, SWT.BORDER);
-          GridDataFactory.create(m_relativeSpinner).hintHC(15);
-          m_relativeSpinner.addListener(SWT.Selection, listener);
-          m_relativeSpinner.setRange(Integer.MIN_VALUE, Integer.MAX_VALUE);
-        }
-      }
-      // absolute
-      {
-        {
-          m_absoluteButton =
-              createRadioButton(composite, ModelMessages.DerivedFontPage_sizeAbsolute, listener);
-          GridDataFactory.create(m_absoluteButton).indentHC(2).hintHC(15);
-        }
-        {
-          m_absoluteSpinner = new CSpinner(composite, SWT.BORDER);
-          GridDataFactory.create(m_absoluteSpinner).hintHC(15);
-          m_absoluteSpinner.addListener(SWT.Selection, listener);
-          m_absoluteSpinner.setRange(0, Integer.MAX_VALUE);
-        }
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DerivedFontPage(Composite parent, int style, FontDialog fontDialog) {
+		super(parent, style, fontDialog);
+		GridLayoutFactory.create(this);
+		// update listener
+		Listener listener = new Listener() {
+			public void handleEvent(Event event) {
+				updateFont();
+			}
+		};
+		// family
+		{
+			createSeparator(this, ModelMessages.DerivedFontPage_familySeparator);
+			Composite composite = new Composite(this, SWT.NONE);
+			GridDataFactory.create(composite).grabH().fill();
+			GridLayoutFactory.create(composite).columns(2).noMargins();
+			{
+				Label label = new Label(composite, SWT.NONE);
+				GridDataFactory.create(label).indentHC(2).hintHC(15);
+				label.setText(ModelMessages.DerivedFontPage_familyLabel);
+			}
+			{
+				m_familyCombo = new Combo(composite, SWT.READ_ONLY);
+				GridDataFactory.create(m_familyCombo).grabH().fillH();
+				m_familyCombo.addListener(SWT.Selection, listener);
+				m_familyCombo.setVisibleItemCount(15);
+				// add items
+				{
+					m_familyCombo.add(ModelMessages.DerivedFontPage_unchanged);
+					GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
+					for (String family : ge.getAvailableFontFamilyNames()) {
+						m_familyCombo.add(family);
+					}
+				}
+			}
+		}
+		// style
+		{
+			createSeparator(this, ModelMessages.DerivedFontPage_styleSeparator);
+			Composite composite = new Composite(this, SWT.NONE);
+			GridDataFactory.create(composite).grabH().fill();
+			GridLayoutFactory.create(composite).columns(2).noMargins();
+			// BOLD
+			{
+				{
+					Label label = new Label(composite, SWT.NONE);
+					GridDataFactory.create(label).indentHC(2).hintHC(15);
+					label.setText(ModelMessages.DerivedFontPage_styleBold);
+				}
+				{
+					Composite composite2 = new Composite(composite, SWT.NONE);
+					GridLayoutFactory.create(composite2).columns(3).noMargins();
+					m_boldSame =
+							createRadioButton(
+									composite2,
+									ModelMessages.DerivedFontPage_styleBoldUnchanged,
+									listener);
+					m_boldSet =
+							createRadioButton(composite2, ModelMessages.DerivedFontPage_styleBoldSet, listener);
+					m_boldClear =
+							createRadioButton(composite2, ModelMessages.DerivedFontPage_styleBoldClear, listener);
+				}
+			}
+			// ITALIC
+			{
+				{
+					Label label = new Label(composite, SWT.NONE);
+					GridDataFactory.create(label).indentHC(2).hintHC(15);
+					label.setText(ModelMessages.DerivedFontPage_styleItalic);
+				}
+				{
+					Composite composite2 = new Composite(composite, SWT.NONE);
+					GridLayoutFactory.create(composite2).columns(3).noMargins();
+					m_italicSame =
+							createRadioButton(
+									composite2,
+									ModelMessages.DerivedFontPage_styleItalicUnchanged,
+									listener);
+					m_italicSet =
+							createRadioButton(composite2, ModelMessages.DerivedFontPage_styleItalicSet, listener);
+					m_italicClear =
+							createRadioButton(
+									composite2,
+									ModelMessages.DerivedFontPage_styleItalicClear,
+									listener);
+				}
+			}
+		}
+		// size
+		{
+			createSeparator(this, ModelMessages.DerivedFontPage_size);
+			Composite composite = new Composite(this, SWT.NONE);
+			GridDataFactory.create(composite).grabH().fill();
+			GridLayoutFactory.create(composite).columns(2).noMargins();
+			// relative
+			{
+				{
+					m_relativeButton =
+							createRadioButton(composite, ModelMessages.DerivedFontPage_sizeRelative, listener);
+					GridDataFactory.create(m_relativeButton).indentHC(2).hintHC(15);
+				}
+				{
+					m_relativeSpinner = new CSpinner(composite, SWT.BORDER);
+					GridDataFactory.create(m_relativeSpinner).hintHC(15);
+					m_relativeSpinner.addListener(SWT.Selection, listener);
+					m_relativeSpinner.setRange(Integer.MIN_VALUE, Integer.MAX_VALUE);
+				}
+			}
+			// absolute
+			{
+				{
+					m_absoluteButton =
+							createRadioButton(composite, ModelMessages.DerivedFontPage_sizeAbsolute, listener);
+					GridDataFactory.create(m_absoluteButton).indentHC(2).hintHC(15);
+				}
+				{
+					m_absoluteSpinner = new CSpinner(composite, SWT.BORDER);
+					GridDataFactory.create(m_absoluteSpinner).hintHC(15);
+					m_absoluteSpinner.addListener(SWT.Selection, listener);
+					m_absoluteSpinner.setRange(0, Integer.MAX_VALUE);
+				}
+			}
+		}
+	}
 
-  /**
-   * Creates separator with given text.
-   */
-  private static void createSeparator(Composite parent, String text) {
-    Separator separator = new Separator(parent, SWT.NONE);
-    GridDataFactory.create(separator).grabH().fillH();
-    separator.setText(text);
-    separator.setForeground(separator.getDisplay().getSystemColor(SWT.COLOR_LIST_SELECTION));
-  }
+	/**
+	 * Creates separator with given text.
+	 */
+	private static void createSeparator(Composite parent, String text) {
+		Separator separator = new Separator(parent, SWT.NONE);
+		GridDataFactory.create(separator).grabH().fillH();
+		separator.setText(text);
+		separator.setForeground(separator.getDisplay().getSystemColor(SWT.COLOR_LIST_SELECTION));
+	}
 
-  /**
-   * Creates radio {@link Button} with given text and selection {@link Listener}.
-   */
-  private static Button createRadioButton(Composite parent, String text, Listener listener) {
-    Button button = new Button(parent, SWT.RADIO);
-    button.setText(text);
-    button.addListener(SWT.Selection, listener);
-    return button;
-  }
+	/**
+	 * Creates radio {@link Button} with given text and selection {@link Listener}.
+	 */
+	private static Button createRadioButton(Composite parent, String text, Listener listener) {
+		Button button = new Button(parent, SWT.RADIO);
+		button.setText(text);
+		button.addListener(SWT.Selection, listener);
+		return button;
+	}
 
-  /**
-   * Updates current font in {@link FontDialog} based on selection in controls.
-   */
-  private void updateFont() {
-    m_relativeSpinner.setEnabled(m_relativeButton.getSelection());
-    m_absoluteSpinner.setEnabled(m_absoluteButton.getSelection());
-    // family
-    String newFamily = null;
-    {
-      int index = m_familyCombo.getSelectionIndex();
-      if (index != 0) {
-        newFamily = m_familyCombo.getItem(index);
-      }
-    }
-    // BOLD
-    Boolean newBold = null;
-    if (m_boldSet.getSelection()) {
-      newBold = true;
-    } else if (m_boldClear.getSelection()) {
-      newBold = false;
-    }
-    // ITALIC
-    Boolean newItalic = null;
-    if (m_italicSet.getSelection()) {
-      newItalic = true;
-    } else if (m_italicClear.getSelection()) {
-      newItalic = false;
-    }
-    // size
-    Integer deltaSize = null;
-    Integer newSize = null;
-    if (m_relativeButton.getSelection()) {
-      int delta = m_relativeSpinner.getSelection();
-      if (delta != 0) {
-        deltaSize = delta;
-      }
-    }
-    if (m_absoluteButton.getSelection()) {
-      newSize = m_absoluteSpinner.getSelection();
-    }
-    // set new Font
-    m_fontDialog.setFontInfo(new DerivedFontInfo(m_baseFont,
-        m_baseFontSource,
-        null,
-        newFamily,
-        newBold,
-        newItalic,
-        deltaSize,
-        newSize));
-  }
+	/**
+	 * Updates current font in {@link FontDialog} based on selection in controls.
+	 */
+	private void updateFont() {
+		m_relativeSpinner.setEnabled(m_relativeButton.getSelection());
+		m_absoluteSpinner.setEnabled(m_absoluteButton.getSelection());
+		// family
+		String newFamily = null;
+		{
+			int index = m_familyCombo.getSelectionIndex();
+			if (index != 0) {
+				newFamily = m_familyCombo.getItem(index);
+			}
+		}
+		// BOLD
+		Boolean newBold = null;
+		if (m_boldSet.getSelection()) {
+			newBold = true;
+		} else if (m_boldClear.getSelection()) {
+			newBold = false;
+		}
+		// ITALIC
+		Boolean newItalic = null;
+		if (m_italicSet.getSelection()) {
+			newItalic = true;
+		} else if (m_italicClear.getSelection()) {
+			newItalic = false;
+		}
+		// size
+		Integer deltaSize = null;
+		Integer newSize = null;
+		if (m_relativeButton.getSelection()) {
+			int delta = m_relativeSpinner.getSelection();
+			if (delta != 0) {
+				deltaSize = delta;
+			}
+		}
+		if (m_absoluteButton.getSelection()) {
+			newSize = m_absoluteSpinner.getSelection();
+		}
+		// set new Font
+		m_fontDialog.setFontInfo(new DerivedFontInfo(m_baseFont,
+				m_baseFontSource,
+				null,
+				newFamily,
+				newBold,
+				newItalic,
+				deltaSize,
+				newSize));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Internal access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Font m_baseFont;
-  private String m_baseFontSource;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Internal access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Font m_baseFont;
+	private String m_baseFontSource;
 
-  /**
-   * Configures with {@link GenericProperty}, we should get "base" attributes required to create
-   * {@link DerivedFontInfo}.
-   *
-   * @return <code>true</code> if configuration was successful.
-   */
-  boolean configure(GenericProperty property) throws Exception {
-    JavaInfo javaInfo = property.getJavaInfo();
-    if (javaInfo.getObject() instanceof Component) {
-      m_baseFont = (Font) property.getDefaultValue();
-      m_baseFontSource = TemplateUtils.format("{0}.getFont()", javaInfo);
-      return true;
-    }
-    return false;
-  }
+	/**
+	 * Configures with {@link GenericProperty}, we should get "base" attributes required to create
+	 * {@link DerivedFontInfo}.
+	 *
+	 * @return <code>true</code> if configuration was successful.
+	 */
+	boolean configure(GenericProperty property) throws Exception {
+		JavaInfo javaInfo = property.getJavaInfo();
+		if (javaInfo.getObject() instanceof Component) {
+			m_baseFont = (Font) property.getDefaultValue();
+			m_baseFontSource = TemplateUtils.format("{0}.getFont()", javaInfo);
+			return true;
+		}
+		return false;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean setFont(FontInfo _font) {
-    if (_font instanceof DerivedFontInfo) {
-      DerivedFontInfo font = (DerivedFontInfo) _font;
-      // family
-      if (font.m_newFamily != null) {
-        m_familyCombo.setText(font.m_newFamily);
-      } else {
-        m_familyCombo.select(0);
-      }
-      // BOLD
-      if (font.m_newBold == null) {
-        m_boldSame.setSelection(true);
-        m_boldSet.setSelection(false);
-        m_boldClear.setSelection(false);
-      } else if (font.m_newBold.booleanValue()) {
-        m_boldSame.setSelection(false);
-        m_boldSet.setSelection(true);
-        m_boldClear.setSelection(false);
-      } else {
-        m_boldSame.setSelection(false);
-        m_boldSet.setSelection(false);
-        m_boldClear.setSelection(true);
-      }
-      // ITALIC
-      if (font.m_newItalic == null) {
-        m_italicSame.setSelection(true);
-        m_italicSet.setSelection(false);
-        m_italicClear.setSelection(false);
-      } else if (font.m_newItalic.booleanValue()) {
-        m_italicSame.setSelection(false);
-        m_italicSet.setSelection(true);
-        m_italicClear.setSelection(false);
-      } else {
-        m_italicSame.setSelection(false);
-        m_italicSet.setSelection(false);
-        m_italicClear.setSelection(true);
-      }
-      // size
-      if (font.m_deltaSize != null) {
-        m_relativeButton.setSelection(true);
-        m_absoluteButton.setSelection(false);
-        m_relativeSpinner.setEnabled(true);
-        m_absoluteSpinner.setEnabled(false);
-        m_relativeSpinner.setSelection(font.m_deltaSize.intValue());
-        m_absoluteSpinner.setSelection(font.getFont().getSize());
-      } else if (font.m_newSize != null) {
-        m_relativeButton.setSelection(false);
-        m_absoluteButton.setSelection(true);
-        m_relativeSpinner.setEnabled(false);
-        m_absoluteSpinner.setEnabled(true);
-        m_relativeSpinner.setSelection(font.getFont().getSize() - m_baseFont.getSize());
-        m_absoluteSpinner.setSelection(font.getFont().getSize());
-      } else {
-        m_relativeButton.setSelection(true);
-        m_absoluteButton.setSelection(false);
-        m_relativeSpinner.setEnabled(true);
-        m_absoluteSpinner.setEnabled(false);
-        m_relativeSpinner.setSelection(0);
-        m_absoluteSpinner.setSelection(font.getFont().getSize());
-      }
-      // yes, we know this FontInfo
-      return true;
-    } else {
-      if (_font != null) {
-        m_familyCombo.select(0);
-        //
-        m_boldSame.setSelection(true);
-        m_italicSame.setSelection(true);
-        //
-        m_relativeButton.setSelection(true);
-        m_relativeSpinner.setEnabled(true);
-        m_absoluteSpinner.setEnabled(false);
-        //
-        m_relativeSpinner.setSelection(0);
-        if (_font.getFont() != null) {
-          m_absoluteSpinner.setSelection(_font.getFont().getSize());
-        }
-      }
-      // no, we don't know this FontInfo
-      return false;
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean setFont(FontInfo _font) {
+		if (_font instanceof DerivedFontInfo) {
+			DerivedFontInfo font = (DerivedFontInfo) _font;
+			// family
+			if (font.m_newFamily != null) {
+				m_familyCombo.setText(font.m_newFamily);
+			} else {
+				m_familyCombo.select(0);
+			}
+			// BOLD
+			if (font.m_newBold == null) {
+				m_boldSame.setSelection(true);
+				m_boldSet.setSelection(false);
+				m_boldClear.setSelection(false);
+			} else if (font.m_newBold.booleanValue()) {
+				m_boldSame.setSelection(false);
+				m_boldSet.setSelection(true);
+				m_boldClear.setSelection(false);
+			} else {
+				m_boldSame.setSelection(false);
+				m_boldSet.setSelection(false);
+				m_boldClear.setSelection(true);
+			}
+			// ITALIC
+			if (font.m_newItalic == null) {
+				m_italicSame.setSelection(true);
+				m_italicSet.setSelection(false);
+				m_italicClear.setSelection(false);
+			} else if (font.m_newItalic.booleanValue()) {
+				m_italicSame.setSelection(false);
+				m_italicSet.setSelection(true);
+				m_italicClear.setSelection(false);
+			} else {
+				m_italicSame.setSelection(false);
+				m_italicSet.setSelection(false);
+				m_italicClear.setSelection(true);
+			}
+			// size
+			if (font.m_deltaSize != null) {
+				m_relativeButton.setSelection(true);
+				m_absoluteButton.setSelection(false);
+				m_relativeSpinner.setEnabled(true);
+				m_absoluteSpinner.setEnabled(false);
+				m_relativeSpinner.setSelection(font.m_deltaSize.intValue());
+				m_absoluteSpinner.setSelection(font.getFont().getSize());
+			} else if (font.m_newSize != null) {
+				m_relativeButton.setSelection(false);
+				m_absoluteButton.setSelection(true);
+				m_relativeSpinner.setEnabled(false);
+				m_absoluteSpinner.setEnabled(true);
+				m_relativeSpinner.setSelection(font.getFont().getSize() - m_baseFont.getSize());
+				m_absoluteSpinner.setSelection(font.getFont().getSize());
+			} else {
+				m_relativeButton.setSelection(true);
+				m_absoluteButton.setSelection(false);
+				m_relativeSpinner.setEnabled(true);
+				m_absoluteSpinner.setEnabled(false);
+				m_relativeSpinner.setSelection(0);
+				m_absoluteSpinner.setSelection(font.getFont().getSize());
+			}
+			// yes, we know this FontInfo
+			return true;
+		} else {
+			if (_font != null) {
+				m_familyCombo.select(0);
+				//
+				m_boldSame.setSelection(true);
+				m_italicSame.setSelection(true);
+				//
+				m_relativeButton.setSelection(true);
+				m_relativeSpinner.setEnabled(true);
+				m_absoluteSpinner.setEnabled(false);
+				//
+				m_relativeSpinner.setSelection(0);
+				if (_font.getFont() != null) {
+					m_absoluteSpinner.setSelection(_font.getFont().getSize());
+				}
+			}
+			// no, we don't know this FontInfo
+			return false;
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/font/ExplicitFontInfo.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/font/ExplicitFontInfo.java
index 42951792b..52f06adca 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/font/ExplicitFontInfo.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/font/ExplicitFontInfo.java
@@ -20,38 +20,38 @@
  * @coverage swing.property.editor
  */
 public final class ExplicitFontInfo extends FontInfo {
-  private final Font m_font;
+	private final Font m_font;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ExplicitFontInfo(Font font) {
-    m_font = font;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ExplicitFontInfo(Font font) {
+		m_font = font;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Font getFont() {
-    return m_font;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Font getFont() {
+		return m_font;
+	}
 
-  @Override
-  public String getText() {
-    return getText(m_font);
-  }
+	@Override
+	public String getText() {
+		return getText(m_font);
+	}
 
-  @Override
-  public String getSource() throws Exception {
-    return MessageFormat.format(
-        "new java.awt.Font(\"{0}\", {1}, {2})",
-        m_font.getFamily(),
-        getStyleSource(m_font.getStyle()),
-        m_font.getSize());
-  }
+	@Override
+	public String getSource() throws Exception {
+		return MessageFormat.format(
+				"new java.awt.Font(\"{0}\", {1}, {2})",
+				m_font.getFamily(),
+				getStyleSource(m_font.getStyle()),
+				m_font.getSize());
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/font/ExplicitFontPage.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/font/ExplicitFontPage.java
index 05a30560e..49cb9be22 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/font/ExplicitFontPage.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/font/ExplicitFontPage.java
@@ -33,170 +33,170 @@
  * @coverage swing.property.editor
  */
 public final class ExplicitFontPage extends AbstractFontPage {
-  private final String m_families[];
-  private final Text m_familyText;
-  private final List m_familyList;
-  //
-  private static final String[] m_styleTitles = new String[]{
-      ModelMessages.ExplicitFontPage_stylePlain,
-      ModelMessages.ExplicitFontPage_styleBold,
-      ModelMessages.ExplicitFontPage_styleItalic,
-      ModelMessages.ExplicitFontPage_styleBoldItalic};
-  private static final int[] m_styleValues = new int[]{
-      Font.PLAIN,
-      Font.BOLD,
-      Font.ITALIC,
-      Font.BOLD | Font.ITALIC};
-  private final Text m_styleText;
-  private final List m_styleList;
-  //
-  private final Text m_sizeText;
-  private final List m_sizeList;
+	private final String m_families[];
+	private final Text m_familyText;
+	private final List m_familyList;
+	//
+	private static final String[] m_styleTitles = new String[]{
+			ModelMessages.ExplicitFontPage_stylePlain,
+			ModelMessages.ExplicitFontPage_styleBold,
+			ModelMessages.ExplicitFontPage_styleItalic,
+			ModelMessages.ExplicitFontPage_styleBoldItalic};
+	private static final int[] m_styleValues = new int[]{
+			Font.PLAIN,
+			Font.BOLD,
+			Font.ITALIC,
+			Font.BOLD | Font.ITALIC};
+	private final Text m_styleText;
+	private final List m_styleList;
+	//
+	private final Text m_sizeText;
+	private final List m_sizeList;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ExplicitFontPage(Composite parent, int style, FontDialog fontDialog) {
-    super(parent, style, fontDialog);
-    GridLayoutFactory.create(this).columns(3);
-    // labels
-    {
-      new Label(this, SWT.NONE).setText(ModelMessages.ExplicitFontPage_family);
-      new Label(this, SWT.NONE).setText(ModelMessages.ExplicitFontPage_atyle);
-      new Label(this, SWT.NONE).setText(ModelMessages.ExplicitFontPage_size);
-    }
-    // text's
-    {
-      {
-        m_familyText = new Text(this, SWT.BORDER | SWT.READ_ONLY);
-        GridDataFactory.create(m_familyText).fill();
-      }
-      {
-        m_styleText = new Text(this, SWT.BORDER | SWT.READ_ONLY);
-        GridDataFactory.create(m_styleText).fill();
-      }
-      {
-        m_sizeText = new Text(this, SWT.BORDER | SWT.READ_ONLY);
-        GridDataFactory.create(m_sizeText).fill();
-      }
-    }
-    // list's
-    {
-      {
-        m_familyList = new List(this, SWT.BORDER | SWT.V_SCROLL);
-        GridDataFactory.create(m_familyList).hintVC(12).grab().fill();
-        // add items
-        m_families =
-            GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames();
-        for (String family : m_families) {
-          m_familyList.add(family);
-        }
-        // add listener
-        m_familyList.addListener(SWT.Selection, new Listener() {
-          public void handleEvent(Event event) {
-            int index = m_familyList.getSelectionIndex();
-            String family = m_families[index];
-            m_familyText.setText(family);
-            updateFont();
-          }
-        });
-      }
-      {
-        m_styleList = new List(this, SWT.BORDER);
-        GridDataFactory.create(m_styleList).hintHC(20).fill();
-        // add items
-        for (int i = 0; i < m_styleTitles.length; i++) {
-          String styleTitle = m_styleTitles[i];
-          m_styleList.add(styleTitle);
-        }
-        // add listener
-        m_styleList.addListener(SWT.Selection, new Listener() {
-          public void handleEvent(Event event) {
-            int index = m_styleList.getSelectionIndex();
-            String fontStyle = m_styleTitles[index];
-            m_styleText.setText(fontStyle);
-            updateFont();
-          }
-        });
-      }
-      {
-        m_sizeList = new List(this, SWT.BORDER | SWT.V_SCROLL);
-        GridDataFactory.create(m_sizeList).hintC(10, 12).fill();
-        // add items
-        for (int i = 5; i < 100; i++) {
-          m_sizeList.add("" + i);
-        }
-        // add listener
-        m_sizeList.addListener(SWT.Selection, new Listener() {
-          public void handleEvent(Event event) {
-            String size = m_sizeList.getSelection()[0];
-            m_sizeText.setText(size);
-            updateFont();
-          }
-        });
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ExplicitFontPage(Composite parent, int style, FontDialog fontDialog) {
+		super(parent, style, fontDialog);
+		GridLayoutFactory.create(this).columns(3);
+		// labels
+		{
+			new Label(this, SWT.NONE).setText(ModelMessages.ExplicitFontPage_family);
+			new Label(this, SWT.NONE).setText(ModelMessages.ExplicitFontPage_atyle);
+			new Label(this, SWT.NONE).setText(ModelMessages.ExplicitFontPage_size);
+		}
+		// text's
+		{
+			{
+				m_familyText = new Text(this, SWT.BORDER | SWT.READ_ONLY);
+				GridDataFactory.create(m_familyText).fill();
+			}
+			{
+				m_styleText = new Text(this, SWT.BORDER | SWT.READ_ONLY);
+				GridDataFactory.create(m_styleText).fill();
+			}
+			{
+				m_sizeText = new Text(this, SWT.BORDER | SWT.READ_ONLY);
+				GridDataFactory.create(m_sizeText).fill();
+			}
+		}
+		// list's
+		{
+			{
+				m_familyList = new List(this, SWT.BORDER | SWT.V_SCROLL);
+				GridDataFactory.create(m_familyList).hintVC(12).grab().fill();
+				// add items
+				m_families =
+						GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames();
+				for (String family : m_families) {
+					m_familyList.add(family);
+				}
+				// add listener
+				m_familyList.addListener(SWT.Selection, new Listener() {
+					public void handleEvent(Event event) {
+						int index = m_familyList.getSelectionIndex();
+						String family = m_families[index];
+						m_familyText.setText(family);
+						updateFont();
+					}
+				});
+			}
+			{
+				m_styleList = new List(this, SWT.BORDER);
+				GridDataFactory.create(m_styleList).hintHC(20).fill();
+				// add items
+				for (int i = 0; i < m_styleTitles.length; i++) {
+					String styleTitle = m_styleTitles[i];
+					m_styleList.add(styleTitle);
+				}
+				// add listener
+				m_styleList.addListener(SWT.Selection, new Listener() {
+					public void handleEvent(Event event) {
+						int index = m_styleList.getSelectionIndex();
+						String fontStyle = m_styleTitles[index];
+						m_styleText.setText(fontStyle);
+						updateFont();
+					}
+				});
+			}
+			{
+				m_sizeList = new List(this, SWT.BORDER | SWT.V_SCROLL);
+				GridDataFactory.create(m_sizeList).hintC(10, 12).fill();
+				// add items
+				for (int i = 5; i < 100; i++) {
+					m_sizeList.add("" + i);
+				}
+				// add listener
+				m_sizeList.addListener(SWT.Selection, new Listener() {
+					public void handleEvent(Event event) {
+						String size = m_sizeList.getSelection()[0];
+						m_sizeText.setText(size);
+						updateFont();
+					}
+				});
+			}
+		}
+	}
 
-  /**
-   * Updates current font in {@link FontDialog} based on selection in controls.
-   */
-  private void updateFont() {
-    String family = m_familyText.getText();
-    // prepare style
-    int style = Font.PLAIN;
-    {
-      int index = m_styleList.getSelectionIndex();
-      if (index != -1) {
-        style = m_styleValues[index];
-      }
-    }
-    // prepare size
-    int size = 12;
-    try {
-      size = Integer.parseInt(m_sizeText.getText());
-    } catch (Throwable e) {
-    }
-    //
-    Font font = new Font(family, style, size);
-    m_fontDialog.setFontInfo(new ExplicitFontInfo(font));
-  }
+	/**
+	 * Updates current font in {@link FontDialog} based on selection in controls.
+	 */
+	private void updateFont() {
+		String family = m_familyText.getText();
+		// prepare style
+		int style = Font.PLAIN;
+		{
+			int index = m_styleList.getSelectionIndex();
+			if (index != -1) {
+				style = m_styleValues[index];
+			}
+		}
+		// prepare size
+		int size = 12;
+		try {
+			size = Integer.parseInt(m_sizeText.getText());
+		} catch (Throwable e) {
+		}
+		//
+		Font font = new Font(family, style, size);
+		m_fontDialog.setFontInfo(new ExplicitFontInfo(font));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean setFont(FontInfo fontInfo) {
-    if (fontInfo != null) {
-      Font font = fontInfo.getFont();
-      if (font == null) {
-        return false;
-      }
-      // family
-      {
-        String family = font.getFamily();
-        m_familyList.setSelection(new String[]{family});
-        m_familyText.setText(family);
-      }
-      // style
-      for (int i = 0; i < m_styleValues.length; i++) {
-        int style = m_styleValues[i];
-        if (style == font.getStyle()) {
-          m_styleList.select(i);
-          m_styleText.setText(m_styleTitles[i]);
-        }
-      }
-      // size
-      {
-        String text = "" + font.getSize();
-        m_sizeList.setSelection(new String[]{text});
-        m_sizeText.setText(text);
-      }
-    }
-    return fontInfo instanceof ExplicitFontInfo;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean setFont(FontInfo fontInfo) {
+		if (fontInfo != null) {
+			Font font = fontInfo.getFont();
+			if (font == null) {
+				return false;
+			}
+			// family
+			{
+				String family = font.getFamily();
+				m_familyList.setSelection(new String[]{family});
+				m_familyText.setText(family);
+			}
+			// style
+			for (int i = 0; i < m_styleValues.length; i++) {
+				int style = m_styleValues[i];
+				if (style == font.getStyle()) {
+					m_styleList.select(i);
+					m_styleText.setText(m_styleTitles[i]);
+				}
+			}
+			// size
+			{
+				String text = "" + font.getSize();
+				m_sizeList.setSelection(new String[]{text});
+				m_sizeText.setText(text);
+			}
+		}
+		return fontInfo instanceof ExplicitFontInfo;
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/font/FontDialog.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/font/FontDialog.java
index f231b1b69..d595cfcba 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/font/FontDialog.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/font/FontDialog.java
@@ -37,144 +37,144 @@
  * @coverage swing.property.editor
  */
 public final class FontDialog extends ResizableDialog {
-  private FontInfo m_fontInfo;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected FontDialog(Shell parentShell) {
-    super(parentShell, Activator.getDefault());
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the selected {@link FontInfo}.
-   */
-  public FontInfo getFontInfo() {
-    return m_fontInfo;
-  }
-
-  /**
-   * Sets the selected {@link FontInfo}
-   */
-  public void setFontInfo(FontInfo fontInfo) {
-    m_fontInfo = fontInfo;
-    updateGUI();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private FontPreviewCanvas m_previewCanvas;
-  private TabFolder m_tabFolder;
-  private final List<AbstractFontPage> m_pages = Lists.newArrayList();
-
-  @Override
-  protected Control createDialogArea(Composite parent) {
-    Composite area = (Composite) super.createDialogArea(parent);
-    // create preview
-    {
-      Group previewGroup = new Group(area, SWT.NONE);
-      GridDataFactory.create(previewGroup).grabH().fillH();
-      GridLayoutFactory.create(previewGroup);
-      previewGroup.setText(ModelMessages.FontDialog_previewText);
-      //
-      m_previewCanvas = new FontPreviewCanvas(previewGroup, SWT.NONE);
-      GridDataFactory.create(m_previewCanvas).grab().fill();
-    }
-    // create folder for pages
-    {
-      m_tabFolder = new TabFolder(area, SWT.NONE);
-      GridDataFactory.create(m_tabFolder).grab().fill();
-      addPages(m_tabFolder);
-    }
-    //
-    return area;
-  }
-
-  @Override
-  public void create() {
-    super.create();
-    updateGUI();
-  }
-
-  @Override
-  protected void configureShell(Shell newShell) {
-    super.configureShell(newShell);
-    newShell.setText(ModelMessages.FontDialog_title);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Internal
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Updates GUI using current {@link FontInfo}.
-   */
-  private void updateGUI() {
-    if (getShell() != null) {
-      // update preview
-      m_previewCanvas.setFontInfo(m_fontInfo);
-      // notify pages
-      for (AbstractFontPage page : m_pages) {
-        boolean suits = page.setFont(m_fontInfo);
-        if (suits) {
-          m_tabFolder.setSelection(m_pages.indexOf(page));
-        }
-      }
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Pages
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds new page with given title and {@link AbstractFontPage}.
-   */
-  protected final void addPage(String title, AbstractFontPage page) {
-    m_pages.add(page);
-    TabItem tabItem = new TabItem(m_tabFolder, SWT.NONE);
-    tabItem.setText(title);
-    tabItem.setControl(page);
-  }
-
-  /**
-   * Adds pages with {@link AbstractFontPage}'s.
-   */
-  protected void addPages(Composite parent) {
-    addPage(ModelMessages.FontDialog_pageConstruction, new ExplicitFontPage(parent, SWT.NONE, this));
-    addPage(ModelMessages.FontDialog_pageDerived, new DerivedFontPage(parent, SWT.NONE, this));
-    addPage(ModelMessages.FontDialog_pageSwing, new UiManagerFontPage(parent, SWT.NONE, this));
-  }
-
-  /**
-   * @return the {@link AbstractFontPage} of this dialog, to configure them externally.
-   */
-  List<AbstractFontPage> getPages() {
-    return m_pages;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Internal access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Closes dialog with "OK" result.
-   */
-  public final void closeOk() {
-    setReturnCode(IDialogConstants.OK_ID);
-    close();
-  }
+	private FontInfo m_fontInfo;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected FontDialog(Shell parentShell) {
+		super(parentShell, Activator.getDefault());
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the selected {@link FontInfo}.
+	 */
+	public FontInfo getFontInfo() {
+		return m_fontInfo;
+	}
+
+	/**
+	 * Sets the selected {@link FontInfo}
+	 */
+	public void setFontInfo(FontInfo fontInfo) {
+		m_fontInfo = fontInfo;
+		updateGUI();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private FontPreviewCanvas m_previewCanvas;
+	private TabFolder m_tabFolder;
+	private final List<AbstractFontPage> m_pages = Lists.newArrayList();
+
+	@Override
+	protected Control createDialogArea(Composite parent) {
+		Composite area = (Composite) super.createDialogArea(parent);
+		// create preview
+		{
+			Group previewGroup = new Group(area, SWT.NONE);
+			GridDataFactory.create(previewGroup).grabH().fillH();
+			GridLayoutFactory.create(previewGroup);
+			previewGroup.setText(ModelMessages.FontDialog_previewText);
+			//
+			m_previewCanvas = new FontPreviewCanvas(previewGroup, SWT.NONE);
+			GridDataFactory.create(m_previewCanvas).grab().fill();
+		}
+		// create folder for pages
+		{
+			m_tabFolder = new TabFolder(area, SWT.NONE);
+			GridDataFactory.create(m_tabFolder).grab().fill();
+			addPages(m_tabFolder);
+		}
+		//
+		return area;
+	}
+
+	@Override
+	public void create() {
+		super.create();
+		updateGUI();
+	}
+
+	@Override
+	protected void configureShell(Shell newShell) {
+		super.configureShell(newShell);
+		newShell.setText(ModelMessages.FontDialog_title);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Internal
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Updates GUI using current {@link FontInfo}.
+	 */
+	private void updateGUI() {
+		if (getShell() != null) {
+			// update preview
+			m_previewCanvas.setFontInfo(m_fontInfo);
+			// notify pages
+			for (AbstractFontPage page : m_pages) {
+				boolean suits = page.setFont(m_fontInfo);
+				if (suits) {
+					m_tabFolder.setSelection(m_pages.indexOf(page));
+				}
+			}
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Pages
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds new page with given title and {@link AbstractFontPage}.
+	 */
+	protected final void addPage(String title, AbstractFontPage page) {
+		m_pages.add(page);
+		TabItem tabItem = new TabItem(m_tabFolder, SWT.NONE);
+		tabItem.setText(title);
+		tabItem.setControl(page);
+	}
+
+	/**
+	 * Adds pages with {@link AbstractFontPage}'s.
+	 */
+	protected void addPages(Composite parent) {
+		addPage(ModelMessages.FontDialog_pageConstruction, new ExplicitFontPage(parent, SWT.NONE, this));
+		addPage(ModelMessages.FontDialog_pageDerived, new DerivedFontPage(parent, SWT.NONE, this));
+		addPage(ModelMessages.FontDialog_pageSwing, new UiManagerFontPage(parent, SWT.NONE, this));
+	}
+
+	/**
+	 * @return the {@link AbstractFontPage} of this dialog, to configure them externally.
+	 */
+	List<AbstractFontPage> getPages() {
+		return m_pages;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Internal access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Closes dialog with "OK" result.
+	 */
+	public final void closeOk() {
+		setReturnCode(IDialogConstants.OK_ID);
+		close();
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/font/FontInfo.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/font/FontInfo.java
index 26a897ad6..167f5c6a7 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/font/FontInfo.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/font/FontInfo.java
@@ -19,76 +19,76 @@
  * @coverage swing.property.editor
  */
 public abstract class FontInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link Font} value.
-   */
-  public abstract Font getFont();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link Font} value.
+	 */
+	public abstract Font getFont();
 
-  /**
-   * @return the description to show for user.
-   */
-  public abstract String getText();
+	/**
+	 * @return the description to show for user.
+	 */
+	public abstract String getText();
 
-  /**
-   * @return the Java source.
-   */
-  public abstract String getSource() throws Exception;
+	/**
+	 * @return the Java source.
+	 */
+	public abstract String getSource() throws Exception;
 
-  /**
-   * @return the Java source for clipboard.
-   */
-  public String getClipboardSource() throws Exception {
-    return getSource();
-  }
+	/**
+	 * @return the Java source for clipboard.
+	 */
+	public String getClipboardSource() throws Exception {
+		return getSource();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the text presentation of given {@link Font}.
-   */
-  protected static String getText(Font font) {
-    StringBuilder sb = new StringBuilder();
-    // family
-    sb.append(font.getFamily());
-    // size
-    {
-      sb.append(" ");
-      sb.append(font.getSize());
-    }
-    // style
-    {
-      int style = font.getStyle();
-      if ((style & Font.BOLD) != 0) {
-        sb.append(" Bold");
-      }
-      if ((style & Font.ITALIC) != 0) {
-        sb.append(" Italic");
-      }
-    }
-    // final result
-    return sb.toString();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the text presentation of given {@link Font}.
+	 */
+	protected static String getText(Font font) {
+		StringBuilder sb = new StringBuilder();
+		// family
+		sb.append(font.getFamily());
+		// size
+		{
+			sb.append(" ");
+			sb.append(font.getSize());
+		}
+		// style
+		{
+			int style = font.getStyle();
+			if ((style & Font.BOLD) != 0) {
+				sb.append(" Bold");
+			}
+			if ((style & Font.ITALIC) != 0) {
+				sb.append(" Italic");
+			}
+		}
+		// final result
+		return sb.toString();
+	}
 
-  /**
-   * @return the style source for given {@link Font}.
-   */
-  protected static String getStyleSource(int style) {
-    if ((style & (Font.BOLD | Font.ITALIC)) == (Font.BOLD | Font.ITALIC)) {
-      return "java.awt.Font.BOLD | java.awt.Font.ITALIC";
-    } else if ((style & Font.BOLD) == Font.BOLD) {
-      return "java.awt.Font.BOLD";
-    } else if ((style & Font.ITALIC) == Font.ITALIC) {
-      return "java.awt.Font.ITALIC";
-    } else {
-      return "java.awt.Font.PLAIN";
-    }
-  }
+	/**
+	 * @return the style source for given {@link Font}.
+	 */
+	protected static String getStyleSource(int style) {
+		if ((style & (Font.BOLD | Font.ITALIC)) == (Font.BOLD | Font.ITALIC)) {
+			return "java.awt.Font.BOLD | java.awt.Font.ITALIC";
+		} else if ((style & Font.BOLD) == Font.BOLD) {
+			return "java.awt.Font.BOLD";
+		} else if ((style & Font.ITALIC) == Font.ITALIC) {
+			return "java.awt.Font.ITALIC";
+		} else {
+			return "java.awt.Font.PLAIN";
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/font/FontPreviewCanvas.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/font/FontPreviewCanvas.java
index d4799dd58..81f8ac5a8 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/font/FontPreviewCanvas.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/font/FontPreviewCanvas.java
@@ -37,89 +37,89 @@
  * @coverage swing.property.editor
  */
 public final class FontPreviewCanvas extends Canvas {
-  private FontInfo m_fontInfo;
+	private FontInfo m_fontInfo;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FontPreviewCanvas(Composite parent, int style) {
-    super(parent, style);
-    addListener(SWT.Paint, new Listener() {
-      public void handleEvent(Event event) {
-        onPaint(event.gc);
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FontPreviewCanvas(Composite parent, int style) {
+		super(parent, style);
+		addListener(SWT.Paint, new Listener() {
+			public void handleEvent(Event event) {
+				onPaint(event.gc);
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Painting
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Point computeSize(int wHint, int hHint, boolean changed) {
-    int width = 450;
-    int height = 50;
-    return new Point(width, height);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Painting
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Point computeSize(int wHint, int hHint, boolean changed) {
+		int width = 450;
+		int height = 50;
+		return new Point(width, height);
+	}
 
-  /**
-   * Handler for {@link SWT#Paint}.
-   */
-  private void onPaint(final GC gc) {
-    if (m_fontInfo != null) {
-      ExecutionUtils.runLog(new RunnableEx() {
-        public void run() throws Exception {
-          // prepare label
-          JLabel label;
-          {
-            label = new JLabel();
-            label.setFont(m_fontInfo.getFont());
-            label.setText(m_fontInfo.getText());
-            {
-              org.eclipse.swt.graphics.Color swtColor = gc.getBackground();
-              label.setBackground(new Color(swtColor.getRed(),
-                  swtColor.getGreen(),
-                  swtColor.getBlue()));
-              label.setOpaque(true);
-            }
-          }
-          // prepare image
-          Image image;
-          {
-            label.setSize(label.getPreferredSize());
-            image = SwingImageUtils.createComponentShot(label);
-          }
-          // draw image
-          try {
-            Rectangle clientArea = getClientArea();
-            DrawUtils.drawImageCHCV(
-                gc,
-                image,
-                clientArea.x,
-                clientArea.y,
-                clientArea.width,
-                clientArea.height);
-          } finally {
-            image.dispose();
-          }
-        }
-      });
-    }
-  }
+	/**
+	 * Handler for {@link SWT#Paint}.
+	 */
+	private void onPaint(final GC gc) {
+		if (m_fontInfo != null) {
+			ExecutionUtils.runLog(new RunnableEx() {
+				public void run() throws Exception {
+					// prepare label
+					JLabel label;
+					{
+						label = new JLabel();
+						label.setFont(m_fontInfo.getFont());
+						label.setText(m_fontInfo.getText());
+						{
+							org.eclipse.swt.graphics.Color swtColor = gc.getBackground();
+							label.setBackground(new Color(swtColor.getRed(),
+									swtColor.getGreen(),
+									swtColor.getBlue()));
+							label.setOpaque(true);
+						}
+					}
+					// prepare image
+					Image image;
+					{
+						label.setSize(label.getPreferredSize());
+						image = SwingImageUtils.createComponentShot(label);
+					}
+					// draw image
+					try {
+						Rectangle clientArea = getClientArea();
+						DrawUtils.drawImageCHCV(
+								gc,
+								image,
+								clientArea.x,
+								clientArea.y,
+								clientArea.width,
+								clientArea.height);
+					} finally {
+						image.dispose();
+					}
+				}
+			});
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets the {@link Font} to display.
-   */
-  public void setFontInfo(FontInfo font) {
-    m_fontInfo = font;
-    redraw();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets the {@link Font} to display.
+	 */
+	public void setFontInfo(FontInfo font) {
+		m_fontInfo = font;
+		redraw();
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/font/FontPropertyEditor.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/font/FontPropertyEditor.java
index 394bf895a..86ee51836 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/font/FontPropertyEditor.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/font/FontPropertyEditor.java
@@ -41,317 +41,317 @@
  * @coverage swing.property.editor
  */
 public final class FontPropertyEditor extends TextDialogPropertyEditor
-    implements
-      IClipboardSourceProvider {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final PropertyEditor INSTANCE = new FontPropertyEditor();
+implements
+IClipboardSourceProvider {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final PropertyEditor INSTANCE = new FontPropertyEditor();
 
-  private FontPropertyEditor() {
-  }
+	private FontPropertyEditor() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getText(Property property) throws Exception {
-    GenericProperty genericProperty = (GenericProperty) property;
-    FontInfo fontInfo = getFontInfo(genericProperty);
-    if (fontInfo != null) {
-      return fontInfo.getText();
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getText(Property property) throws Exception {
+		GenericProperty genericProperty = (GenericProperty) property;
+		FontInfo fontInfo = getFontInfo(genericProperty);
+		if (fontInfo != null) {
+			return fontInfo.getText();
+		}
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IClipboardSourceProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public String getClipboardSource(GenericProperty property) throws Exception {
-    FontInfo fontInfo = getFontInfo(property);
-    if (fontInfo != null) {
-      return fontInfo.getClipboardSource();
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IClipboardSourceProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public String getClipboardSource(GenericProperty property) throws Exception {
+		FontInfo fontInfo = getFontInfo(property);
+		if (fontInfo != null) {
+			return fontInfo.getClipboardSource();
+		}
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void openDialog(Property property) throws Exception {
-    FontDialog fontDialog = new FontDialog(DesignerPlugin.getShell());
-    fontDialog.create();
-    //
-    GenericProperty genericProperty = (GenericProperty) property;
-    // configure pages
-    for (Iterator<AbstractFontPage> I = fontDialog.getPages().iterator(); I.hasNext();) {
-      AbstractFontPage page = I.next();
-      if (page instanceof DerivedFontPage) {
-        DerivedFontPage derivedPage = (DerivedFontPage) page;
-        boolean success = derivedPage.configure(genericProperty);
-        if (!success) {
-          I.remove();
-        }
-      }
-    }
-    // set initial value
-    {
-      FontInfo fontInfo = getFontInfo(genericProperty);
-      fontDialog.setFontInfo(fontInfo);
-    }
-    // open dialog
-    if (fontDialog.open() == Window.OK) {
-      String source = fontDialog.getFontInfo().getSource();
-      genericProperty.setExpression(source, Property.UNKNOWN_VALUE);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void openDialog(Property property) throws Exception {
+		FontDialog fontDialog = new FontDialog(DesignerPlugin.getShell());
+		fontDialog.create();
+		//
+		GenericProperty genericProperty = (GenericProperty) property;
+		// configure pages
+		for (Iterator<AbstractFontPage> I = fontDialog.getPages().iterator(); I.hasNext();) {
+			AbstractFontPage page = I.next();
+			if (page instanceof DerivedFontPage) {
+				DerivedFontPage derivedPage = (DerivedFontPage) page;
+				boolean success = derivedPage.configure(genericProperty);
+				if (!success) {
+					I.remove();
+				}
+			}
+		}
+		// set initial value
+		{
+			FontInfo fontInfo = getFontInfo(genericProperty);
+			fontDialog.setFontInfo(fontInfo);
+		}
+		// open dialog
+		if (fontDialog.open() == Window.OK) {
+			String source = fontDialog.getFontInfo().getSource();
+			genericProperty.setExpression(source, Property.UNKNOWN_VALUE);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link FontInfo} that corresponds to the value of {@link GenericProperty}.
-   */
-  private static FontInfo getFontInfo(GenericProperty property) throws Exception {
-    Font font;
-    {
-      Object value = property.getValue();
-      if (value == null) {
-        return new NullFontInfo();
-      }
-      if (!(value instanceof Font)) {
-        return null;
-      }
-      font = (Font) value;
-    }
-    // analyze Expression
-    Expression expression = property.getExpression();
-    AstEditor editor = property.getJavaInfo().getEditor();
-    //
-    // UIManager.getFont(key)
-    //
-    if (AstNodeUtils.isMethodInvocation(
-        expression,
-        "javax.swing.UIManager",
-        "getFont(java.lang.Object)")) {
-      MethodInvocation invocation = (MethodInvocation) expression;
-      Expression keyExpression = DomGenerics.arguments(invocation).get(0);
-      String key = (String) JavaInfoEvaluationHelper.getValue(keyExpression);
-      return new UiManagerFontInfo(key, font);
-    }
-    //
-    // Font.deriveFont(*)
-    //
-    boolean deriveStyle =
-        AstNodeUtils.isMethodInvocation(expression, "java.awt.Font", "deriveFont(int)");
-    boolean deriveSize =
-        AstNodeUtils.isMethodInvocation(expression, "java.awt.Font", "deriveFont(float)");
-    boolean deriveStyleSize =
-        AstNodeUtils.isMethodInvocation(expression, "java.awt.Font", "deriveFont(int,float)");
-    if (deriveStyle || deriveSize || deriveStyleSize) {
-      MethodInvocation invocation = (MethodInvocation) expression;
-      // prepare base Font
-      Font baseFont;
-      String baseFontSource;
-      String baseFontClipboardSource;
-      {
-        Expression baseFontExpression = invocation.getExpression();
-        baseFont = (Font) JavaInfoEvaluationHelper.getValue(baseFontExpression);
-        baseFontSource = editor.getSource(baseFontExpression);
-        baseFontClipboardSource = getBaseFontClipboardSource(editor, baseFontExpression);
-      }
-      // Font.deriveFont(newStyle)
-      if (deriveStyle) {
-        Expression styleExpression = DomGenerics.arguments(invocation).get(0);
-        Boolean[] styles = getFontInfo_decodeStyle(editor, baseFontSource, styleExpression);
-        return new DerivedFontInfo(baseFont,
-            baseFontSource,
-            baseFontClipboardSource,
-            null,
-            styles[0],
-            styles[1],
-            null,
-            null);
-      }
-      // Font.deriveFont(newSize)
-      if (deriveSize) {
-        Expression sizeExpression = DomGenerics.arguments(invocation).get(0);
-        Integer[] sizes = getFontInfo_decodeSize(editor, baseFontSource, sizeExpression);
-        return new DerivedFontInfo(baseFont,
-            baseFontSource,
-            baseFontClipboardSource,
-            null,
-            null,
-            null,
-            sizes[0],
-            sizes[1]);
-      }
-      // Font.deriveFont(newStyle,newSize)
-      if (deriveStyleSize) {
-        Expression styleExpression = DomGenerics.arguments(invocation).get(0);
-        Expression sizeExpression = DomGenerics.arguments(invocation).get(1);
-        Boolean[] styles = getFontInfo_decodeStyle(editor, baseFontSource, styleExpression);
-        Integer[] sizes = getFontInfo_decodeSize(editor, baseFontSource, sizeExpression);
-        return new DerivedFontInfo(baseFont,
-            baseFontSource,
-            baseFontClipboardSource,
-            null,
-            styles[0],
-            styles[1],
-            sizes[0],
-            sizes[1]);
-      }
-    }
-    //
-    // new Font(newFamily, derivedStyle, derivedSize)
-    //
-    if (AstNodeUtils.isCreation(expression, "java.awt.Font", "<init>(java.lang.String,int,int)")) {
-      ClassInstanceCreation creation = (ClassInstanceCreation) expression;
-      Expression familyExpression = DomGenerics.arguments(creation).get(0);
-      Expression styleExpression = DomGenerics.arguments(creation).get(1);
-      Expression sizeExpression = DomGenerics.arguments(creation).get(2);
-      // prepare Expression for base Font
-      final Expression[] baseFontExpression = new Expression[1];
-      {
-        expression.accept(new ASTVisitor() {
-          @Override
-          public void endVisit(MethodInvocation node) {
-            String expressionName = AstNodeUtils.getFullyQualifiedName(node.getExpression(), false);
-            if (expressionName.equals("java.awt.Font")) {
-              baseFontExpression[0] = node.getExpression();
-            }
-          }
-        });
-      }
-      // if found reference on base Font...
-      if (baseFontExpression[0] != null) {
-        // prepare base Font
-        Font baseFont;
-        String baseFontSource;
-        String baseFontClipboardSource;
-        {
-          baseFont = (Font) JavaInfoEvaluationHelper.getValue(baseFontExpression[0]);
-          baseFontSource = editor.getSource(baseFontExpression[0]);
-          baseFontClipboardSource = null;
-        }
-        // prepare updates
-        String newFamily = (String) JavaInfoEvaluationHelper.getValue(familyExpression);
-        Boolean[] styles = getFontInfo_decodeStyle(editor, baseFontSource, styleExpression);
-        Integer[] sizes = getFontInfo_decodeSize(editor, baseFontSource, sizeExpression);
-        return new DerivedFontInfo(baseFont,
-            baseFontSource,
-            baseFontClipboardSource,
-            newFamily,
-            styles[0],
-            styles[1],
-            sizes[0],
-            sizes[1]);
-      }
-    }
-    // no better FontInfo variant that explicit
-    return new ExplicitFontInfo(font);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link FontInfo} that corresponds to the value of {@link GenericProperty}.
+	 */
+	private static FontInfo getFontInfo(GenericProperty property) throws Exception {
+		Font font;
+		{
+			Object value = property.getValue();
+			if (value == null) {
+				return new NullFontInfo();
+			}
+			if (!(value instanceof Font)) {
+				return null;
+			}
+			font = (Font) value;
+		}
+		// analyze Expression
+		Expression expression = property.getExpression();
+		AstEditor editor = property.getJavaInfo().getEditor();
+		//
+		// UIManager.getFont(key)
+		//
+		if (AstNodeUtils.isMethodInvocation(
+				expression,
+				"javax.swing.UIManager",
+				"getFont(java.lang.Object)")) {
+			MethodInvocation invocation = (MethodInvocation) expression;
+			Expression keyExpression = DomGenerics.arguments(invocation).get(0);
+			String key = (String) JavaInfoEvaluationHelper.getValue(keyExpression);
+			return new UiManagerFontInfo(key, font);
+		}
+		//
+		// Font.deriveFont(*)
+		//
+		boolean deriveStyle =
+				AstNodeUtils.isMethodInvocation(expression, "java.awt.Font", "deriveFont(int)");
+		boolean deriveSize =
+				AstNodeUtils.isMethodInvocation(expression, "java.awt.Font", "deriveFont(float)");
+		boolean deriveStyleSize =
+				AstNodeUtils.isMethodInvocation(expression, "java.awt.Font", "deriveFont(int,float)");
+		if (deriveStyle || deriveSize || deriveStyleSize) {
+			MethodInvocation invocation = (MethodInvocation) expression;
+			// prepare base Font
+			Font baseFont;
+			String baseFontSource;
+			String baseFontClipboardSource;
+			{
+				Expression baseFontExpression = invocation.getExpression();
+				baseFont = (Font) JavaInfoEvaluationHelper.getValue(baseFontExpression);
+				baseFontSource = editor.getSource(baseFontExpression);
+				baseFontClipboardSource = getBaseFontClipboardSource(editor, baseFontExpression);
+			}
+			// Font.deriveFont(newStyle)
+			if (deriveStyle) {
+				Expression styleExpression = DomGenerics.arguments(invocation).get(0);
+				Boolean[] styles = getFontInfo_decodeStyle(editor, baseFontSource, styleExpression);
+				return new DerivedFontInfo(baseFont,
+						baseFontSource,
+						baseFontClipboardSource,
+						null,
+						styles[0],
+						styles[1],
+						null,
+						null);
+			}
+			// Font.deriveFont(newSize)
+			if (deriveSize) {
+				Expression sizeExpression = DomGenerics.arguments(invocation).get(0);
+				Integer[] sizes = getFontInfo_decodeSize(editor, baseFontSource, sizeExpression);
+				return new DerivedFontInfo(baseFont,
+						baseFontSource,
+						baseFontClipboardSource,
+						null,
+						null,
+						null,
+						sizes[0],
+						sizes[1]);
+			}
+			// Font.deriveFont(newStyle,newSize)
+			if (deriveStyleSize) {
+				Expression styleExpression = DomGenerics.arguments(invocation).get(0);
+				Expression sizeExpression = DomGenerics.arguments(invocation).get(1);
+				Boolean[] styles = getFontInfo_decodeStyle(editor, baseFontSource, styleExpression);
+				Integer[] sizes = getFontInfo_decodeSize(editor, baseFontSource, sizeExpression);
+				return new DerivedFontInfo(baseFont,
+						baseFontSource,
+						baseFontClipboardSource,
+						null,
+						styles[0],
+						styles[1],
+						sizes[0],
+						sizes[1]);
+			}
+		}
+		//
+		// new Font(newFamily, derivedStyle, derivedSize)
+		//
+		if (AstNodeUtils.isCreation(expression, "java.awt.Font", "<init>(java.lang.String,int,int)")) {
+			ClassInstanceCreation creation = (ClassInstanceCreation) expression;
+			Expression familyExpression = DomGenerics.arguments(creation).get(0);
+			Expression styleExpression = DomGenerics.arguments(creation).get(1);
+			Expression sizeExpression = DomGenerics.arguments(creation).get(2);
+			// prepare Expression for base Font
+			final Expression[] baseFontExpression = new Expression[1];
+			{
+				expression.accept(new ASTVisitor() {
+					@Override
+					public void endVisit(MethodInvocation node) {
+						String expressionName = AstNodeUtils.getFullyQualifiedName(node.getExpression(), false);
+						if (expressionName.equals("java.awt.Font")) {
+							baseFontExpression[0] = node.getExpression();
+						}
+					}
+				});
+			}
+			// if found reference on base Font...
+			if (baseFontExpression[0] != null) {
+				// prepare base Font
+				Font baseFont;
+				String baseFontSource;
+				String baseFontClipboardSource;
+				{
+					baseFont = (Font) JavaInfoEvaluationHelper.getValue(baseFontExpression[0]);
+					baseFontSource = editor.getSource(baseFontExpression[0]);
+					baseFontClipboardSource = null;
+				}
+				// prepare updates
+				String newFamily = (String) JavaInfoEvaluationHelper.getValue(familyExpression);
+				Boolean[] styles = getFontInfo_decodeStyle(editor, baseFontSource, styleExpression);
+				Integer[] sizes = getFontInfo_decodeSize(editor, baseFontSource, sizeExpression);
+				return new DerivedFontInfo(baseFont,
+						baseFontSource,
+						baseFontClipboardSource,
+						newFamily,
+						styles[0],
+						styles[1],
+						sizes[0],
+						sizes[1]);
+			}
+		}
+		// no better FontInfo variant that explicit
+		return new ExplicitFontInfo(font);
+	}
 
-  private static String getBaseFontClipboardSource(AstEditor editor, Expression baseFontExpression) {
-    if (baseFontExpression instanceof MethodInvocation) {
-      MethodInvocation invocation2 = (MethodInvocation) baseFontExpression;
-      return "%this%."
-          + editor.getSourceBeginEnd(
-              invocation2.getName().getStartPosition(),
-              AstNodeUtils.getSourceEnd(invocation2));
-    } else {
-      return null;
-    }
-  }
+	private static String getBaseFontClipboardSource(AstEditor editor, Expression baseFontExpression) {
+		if (baseFontExpression instanceof MethodInvocation) {
+			MethodInvocation invocation2 = (MethodInvocation) baseFontExpression;
+			return "%this%."
+			+ editor.getSourceBeginEnd(
+					invocation2.getName().getStartPosition(),
+					AstNodeUtils.getSourceEnd(invocation2));
+		} else {
+			return null;
+		}
+	}
 
-  /**
-   * @return the array with 2 {@link Boolean} values - for <code>newBold</code> and for
-   *         <code>newItalic</code>, any of them should be <code>null</code>.
-   */
-  private static Boolean[] getFontInfo_decodeStyle(final AstEditor editor,
-      final String baseFontSource,
-      Expression styleExpression) {
-    final Boolean[] styles = new Boolean[]{null, null, false};
-    styleExpression.accept(new ASTVisitor() {
-      @Override
-      public void endVisit(QualifiedName node) {
-        // OR
-        if (node.getParent() instanceof InfixExpression) {
-          InfixExpression infixExpression = (InfixExpression) node.getParent();
-          if (infixExpression.getOperator() == InfixExpression.Operator.OR) {
-            int mask = ((Integer) JavaInfoEvaluationHelper.getValue(node)).intValue();
-            if (mask == Font.BOLD) {
-              styles[0] = true;
-            }
-            if (mask == Font.ITALIC) {
-              styles[1] = true;
-            }
-          }
-        }
-        // AND complement
-        if (node.getParent() instanceof PrefixExpression
-            && node.getParent().getParent() instanceof InfixExpression) {
-          PrefixExpression prefixExpression = (PrefixExpression) node.getParent();
-          InfixExpression infixExpression = (InfixExpression) node.getParent().getParent();
-          if (prefixExpression.getOperator() == PrefixExpression.Operator.COMPLEMENT
-              && infixExpression.getOperator() == InfixExpression.Operator.AND) {
-            int mask = ((Integer) JavaInfoEvaluationHelper.getValue(node)).intValue();
-            if (mask == Font.BOLD) {
-              styles[0] = false;
-            }
-            if (mask == Font.ITALIC) {
-              styles[1] = false;
-            }
-          }
-        }
-      }
+	/**
+	 * @return the array with 2 {@link Boolean} values - for <code>newBold</code> and for
+	 *         <code>newItalic</code>, any of them should be <code>null</code>.
+	 */
+	private static Boolean[] getFontInfo_decodeStyle(final AstEditor editor,
+			final String baseFontSource,
+			Expression styleExpression) {
+		final Boolean[] styles = new Boolean[]{null, null, false};
+		styleExpression.accept(new ASTVisitor() {
+			@Override
+			public void endVisit(QualifiedName node) {
+				// OR
+				if (node.getParent() instanceof InfixExpression) {
+					InfixExpression infixExpression = (InfixExpression) node.getParent();
+					if (infixExpression.getOperator() == InfixExpression.Operator.OR) {
+						int mask = ((Integer) JavaInfoEvaluationHelper.getValue(node)).intValue();
+						if (mask == Font.BOLD) {
+							styles[0] = true;
+						}
+						if (mask == Font.ITALIC) {
+							styles[1] = true;
+						}
+					}
+				}
+				// AND complement
+				if (node.getParent() instanceof PrefixExpression
+						&& node.getParent().getParent() instanceof InfixExpression) {
+					PrefixExpression prefixExpression = (PrefixExpression) node.getParent();
+					InfixExpression infixExpression = (InfixExpression) node.getParent().getParent();
+					if (prefixExpression.getOperator() == PrefixExpression.Operator.COMPLEMENT
+							&& infixExpression.getOperator() == InfixExpression.Operator.AND) {
+						int mask = ((Integer) JavaInfoEvaluationHelper.getValue(node)).intValue();
+						if (mask == Font.BOLD) {
+							styles[0] = false;
+						}
+						if (mask == Font.ITALIC) {
+							styles[1] = false;
+						}
+					}
+				}
+			}
 
-      @Override
-      public void endVisit(MethodInvocation node) {
-        if (editor.getSource(node).equals(baseFontSource + ".getStyle()")) {
-          styles[2] = true;
-        }
-      }
-    });
-    return styles;
-  }
+			@Override
+			public void endVisit(MethodInvocation node) {
+				if (editor.getSource(node).equals(baseFontSource + ".getStyle()")) {
+					styles[2] = true;
+				}
+			}
+		});
+		return styles;
+	}
 
-  /**
-   * @return the array with 2 {@link Integer} values - for <code>deltaSize</code> and for
-   *         <code>newSize</code>, only one of them should be not <code>null</code>.
-   */
-  private static Integer[] getFontInfo_decodeSize(AstEditor editor,
-      String baseFontSource,
-      Expression sizeExpression) {
-    // size as +/-
-    if (sizeExpression instanceof InfixExpression) {
-      InfixExpression infixExpression = (InfixExpression) sizeExpression;
-      Expression leftOperand = infixExpression.getLeftOperand();
-      Expression rightOperand = infixExpression.getRightOperand();
-      boolean isBaseFontSize = editor.getSource(leftOperand).equals(baseFontSource + ".getSize()");
-      if (isBaseFontSize && rightOperand instanceof NumberLiteral) {
-        int delta = ((Number) JavaInfoEvaluationHelper.getValue(rightOperand)).intValue();
-        if (infixExpression.getOperator() == InfixExpression.Operator.PLUS) {
-          return new Integer[]{delta, null};
-        }
-        if (infixExpression.getOperator() == InfixExpression.Operator.MINUS) {
-          return new Integer[]{-delta, null};
-        }
-      }
-    }
-    // size as value
-    int size = ((Number) JavaInfoEvaluationHelper.getValue(sizeExpression)).intValue();
-    return new Integer[]{null, size};
-  }
+	/**
+	 * @return the array with 2 {@link Integer} values - for <code>deltaSize</code> and for
+	 *         <code>newSize</code>, only one of them should be not <code>null</code>.
+	 */
+	private static Integer[] getFontInfo_decodeSize(AstEditor editor,
+			String baseFontSource,
+			Expression sizeExpression) {
+		// size as +/-
+		if (sizeExpression instanceof InfixExpression) {
+			InfixExpression infixExpression = (InfixExpression) sizeExpression;
+			Expression leftOperand = infixExpression.getLeftOperand();
+			Expression rightOperand = infixExpression.getRightOperand();
+			boolean isBaseFontSize = editor.getSource(leftOperand).equals(baseFontSource + ".getSize()");
+			if (isBaseFontSize && rightOperand instanceof NumberLiteral) {
+				int delta = ((Number) JavaInfoEvaluationHelper.getValue(rightOperand)).intValue();
+				if (infixExpression.getOperator() == InfixExpression.Operator.PLUS) {
+					return new Integer[]{delta, null};
+				}
+				if (infixExpression.getOperator() == InfixExpression.Operator.MINUS) {
+					return new Integer[]{-delta, null};
+				}
+			}
+		}
+		// size as value
+		int size = ((Number) JavaInfoEvaluationHelper.getValue(sizeExpression)).intValue();
+		return new Integer[]{null, size};
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/font/NullFontInfo.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/font/NullFontInfo.java
index f106b417b..f47ee569f 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/font/NullFontInfo.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/font/NullFontInfo.java
@@ -19,23 +19,23 @@
  * @coverage swing.property.editor
  */
 public final class NullFontInfo extends FontInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Font getFont() {
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Font getFont() {
+		return null;
+	}
 
-  @Override
-  public String getText() {
-    return null;
-  }
+	@Override
+	public String getText() {
+		return null;
+	}
 
-  @Override
-  public String getSource() throws Exception {
-    return "null";
-  }
+	@Override
+	public String getSource() throws Exception {
+		return "null";
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/font/UiManagerFontInfo.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/font/UiManagerFontInfo.java
index e6c3d7087..174f8d77b 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/font/UiManagerFontInfo.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/font/UiManagerFontInfo.java
@@ -23,55 +23,55 @@
  * @coverage swing.property.editor
  */
 public final class UiManagerFontInfo extends FontInfo {
-  private final String m_key;
-  private final Font m_font;
+	private final String m_key;
+	private final Font m_font;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public UiManagerFontInfo(String key, Font font) {
-    m_key = key;
-    m_font = font;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public UiManagerFontInfo(String key, Font font) {
+		m_key = key;
+		m_font = font;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the key value of font in {@link UIManager}.
-   */
-  public String getKey() {
-    return m_key;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the key value of font in {@link UIManager}.
+	 */
+	public String getKey() {
+		return m_key;
+	}
 
-  /**
-   * @return the only value text, without key in contrast to {@link #getText()}.
-   */
-  public String getValueText() {
-    return getText(m_font);
-  }
+	/**
+	 * @return the only value text, without key in contrast to {@link #getText()}.
+	 */
+	public String getValueText() {
+		return getText(m_font);
+	}
 
-  /**
-   * @return the inner {@link Font}.
-   */
-  @Override
-  public Font getFont() {
-    return m_font;
-  }
+	/**
+	 * @return the inner {@link Font}.
+	 */
+	@Override
+	public Font getFont() {
+		return m_font;
+	}
 
-  @Override
-  public String getText() {
-    return m_key + ", " + getText(m_font);
-  }
+	@Override
+	public String getText() {
+		return m_key + ", " + getText(m_font);
+	}
 
-  @Override
-  public String getSource() throws Exception {
-    return "javax.swing.UIManager.getFont("
-        + StringConverter.INSTANCE.toJavaSource(null, m_key)
-        + ")";
-  }
+	@Override
+	public String getSource() throws Exception {
+		return "javax.swing.UIManager.getFont("
+				+ StringConverter.INSTANCE.toJavaSource(null, m_key)
+				+ ")";
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/font/UiManagerFontPage.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/font/UiManagerFontPage.java
index fe7abe4c1..cd31135cf 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/font/UiManagerFontPage.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/font/UiManagerFontPage.java
@@ -41,107 +41,107 @@
  * @coverage swing.property.editor
  */
 public final class UiManagerFontPage extends AbstractFontPage {
-  private final Table m_fontTable;
+	private final Table m_fontTable;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public UiManagerFontPage(Composite parent, int style, FontDialog fontDialog) {
-    super(parent, style, fontDialog);
-    GridLayoutFactory.create(this);
-    //
-    {
-      new Label(this, SWT.NONE).setText(ModelMessages.UiManagerFontPage_listLabel);
-    }
-    //
-    {
-      m_fontTable = new Table(this, SWT.BORDER | SWT.FULL_SELECTION);
-      GridDataFactory.create(m_fontTable).hintVC(15).grab().fill();
-      m_fontTable.setHeaderVisible(true);
-      m_fontTable.setLinesVisible(true);
-      // create columns
-      {
-        new TableColumn(m_fontTable, SWT.NONE).setText(ModelMessages.UiManagerFontPage_nameColumn);
-        new TableColumn(m_fontTable, SWT.NONE).setText(ModelMessages.UiManagerFontPage_valueColumn);
-      }
-      // add items
-      prepareFonts();
-      for (UiManagerFontInfo fontInfo : m_fonts) {
-        TableItem tableItem = new TableItem(m_fontTable, SWT.NONE);
-        tableItem.setText(0, fontInfo.getKey());
-        tableItem.setText(1, fontInfo.getValueText());
-      }
-      // pack columns
-      for (TableColumn column : m_fontTable.getColumns()) {
-        column.pack();
-      }
-      // add listeners
-      m_fontTable.addListener(SWT.Selection, new Listener() {
-        public void handleEvent(Event event) {
-          int selectionIndex = m_fontTable.getSelectionIndex();
-          FontInfo fontInfo = m_fonts.get(selectionIndex);
-          m_fontDialog.setFontInfo(fontInfo);
-        }
-      });
-      m_fontTable.addListener(SWT.MouseDoubleClick, new Listener() {
-        public void handleEvent(Event event) {
-          m_fontDialog.closeOk();
-        }
-      });
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public UiManagerFontPage(Composite parent, int style, FontDialog fontDialog) {
+		super(parent, style, fontDialog);
+		GridLayoutFactory.create(this);
+		//
+		{
+			new Label(this, SWT.NONE).setText(ModelMessages.UiManagerFontPage_listLabel);
+		}
+		//
+		{
+			m_fontTable = new Table(this, SWT.BORDER | SWT.FULL_SELECTION);
+			GridDataFactory.create(m_fontTable).hintVC(15).grab().fill();
+			m_fontTable.setHeaderVisible(true);
+			m_fontTable.setLinesVisible(true);
+			// create columns
+			{
+				new TableColumn(m_fontTable, SWT.NONE).setText(ModelMessages.UiManagerFontPage_nameColumn);
+				new TableColumn(m_fontTable, SWT.NONE).setText(ModelMessages.UiManagerFontPage_valueColumn);
+			}
+			// add items
+			prepareFonts();
+			for (UiManagerFontInfo fontInfo : m_fonts) {
+				TableItem tableItem = new TableItem(m_fontTable, SWT.NONE);
+				tableItem.setText(0, fontInfo.getKey());
+				tableItem.setText(1, fontInfo.getValueText());
+			}
+			// pack columns
+			for (TableColumn column : m_fontTable.getColumns()) {
+				column.pack();
+			}
+			// add listeners
+			m_fontTable.addListener(SWT.Selection, new Listener() {
+				public void handleEvent(Event event) {
+					int selectionIndex = m_fontTable.getSelectionIndex();
+					FontInfo fontInfo = m_fonts.get(selectionIndex);
+					m_fontDialog.setFontInfo(fontInfo);
+				}
+			});
+			m_fontTable.addListener(SWT.MouseDoubleClick, new Listener() {
+				public void handleEvent(Event event) {
+					m_fontDialog.closeOk();
+				}
+			});
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean setFont(FontInfo fontInfo) {
-    if (fontInfo instanceof UiManagerFontInfo) {
-      String key = ((UiManagerFontInfo) fontInfo).getKey();
-      for (TableItem item : m_fontTable.getItems()) {
-        if (item.getText(0).equals(key)) {
-          m_fontTable.setSelection(item);
-        }
-      }
-      return true;
-    }
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean setFont(FontInfo fontInfo) {
+		if (fontInfo instanceof UiManagerFontInfo) {
+			String key = ((UiManagerFontInfo) fontInfo).getKey();
+			for (TableItem item : m_fontTable.getItems()) {
+				if (item.getText(0).equals(key)) {
+					m_fontTable.setSelection(item);
+				}
+			}
+			return true;
+		}
+		return false;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Internal
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static List<UiManagerFontInfo> m_fonts;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Internal
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static List<UiManagerFontInfo> m_fonts;
 
-  /**
-   * Prepares {@link FontInfo}'s for {@link Font}'s from {@link UIManager}.
-   */
-  private static void prepareFonts() {
-    if (m_fonts == null) {
-      m_fonts = Lists.newArrayList();
-      UIDefaults defaults = UIManager.getLookAndFeelDefaults();
-      // prepare set of all String keys in UIManager
-      Set<String> allKeys = Sets.newTreeSet();
-      for (Iterator<?> I = defaults.keySet().iterator(); I.hasNext();) {
-        Object key = I.next();
-        if (key instanceof String) {
-          allKeys.add((String) key);
-        }
-      }
-      // add FontInfo for each Font key
-      for (String key : allKeys) {
-        Font font = defaults.getFont(key);
-        if (font != null) {
-          UiManagerFontInfo fontInfo = new UiManagerFontInfo(key, font);
-          m_fonts.add(fontInfo);
-        }
-      }
-    }
-  }
+	/**
+	 * Prepares {@link FontInfo}'s for {@link Font}'s from {@link UIManager}.
+	 */
+	private static void prepareFonts() {
+		if (m_fonts == null) {
+			m_fonts = Lists.newArrayList();
+			UIDefaults defaults = UIManager.getLookAndFeelDefaults();
+			// prepare set of all String keys in UIManager
+			Set<String> allKeys = Sets.newTreeSet();
+			for (Iterator<?> I = defaults.keySet().iterator(); I.hasNext();) {
+				Object key = I.next();
+				if (key instanceof String) {
+					allKeys.add((String) key);
+				}
+			}
+			// add FontInfo for each Font key
+			for (String key : allKeys) {
+				Font font = defaults.getFont(key);
+				if (font != null) {
+					UiManagerFontInfo fontInfo = new UiManagerFontInfo(key, font);
+					m_fonts.add(fontInfo);
+				}
+			}
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/geometry/DimensionPropertyEditor.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/geometry/DimensionPropertyEditor.java
index c57e48a76..826fb2a8e 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/geometry/DimensionPropertyEditor.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/geometry/DimensionPropertyEditor.java
@@ -27,84 +27,84 @@
  * @coverage swing.property.editor
  */
 public final class DimensionPropertyEditor extends TextDialogPropertyEditor {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final PropertyEditor INSTANCE = new DimensionPropertyEditor();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final PropertyEditor INSTANCE = new DimensionPropertyEditor();
 
-  private DimensionPropertyEditor() {
-  }
+	private DimensionPropertyEditor() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getText(Property property) throws Exception {
-    Object value = property.getValue();
-    if (value instanceof Dimension) {
-      Dimension dimension = (Dimension) value;
-      return "(" + dimension.width + ", " + dimension.height + ")";
-    }
-    // unknown value
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getText(Property property) throws Exception {
+		Object value = property.getValue();
+		if (value instanceof Dimension) {
+			Dimension dimension = (Dimension) value;
+			return "(" + dimension.width + ", " + dimension.height + ")";
+		}
+		// unknown value
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void openDialog(Property property) throws Exception {
-    // prepare Dimension to edit
-    Dimension dimension;
-    {
-      Object value = property.getValue();
-      if (value instanceof Dimension) {
-        dimension = new Dimension((Dimension) value);
-      } else {
-        dimension = new Dimension();
-      }
-    }
-    // prepare dialog
-    DimensionDialog dimensionDialog = new DimensionDialog(property.getTitle(), dimension);
-    // open dialog
-    int result = dimensionDialog.open();
-    if (result == IDialogConstants.IGNORE_ID) {
-      property.setValue(Property.UNKNOWN_VALUE);
-    } else if (result == IDialogConstants.OK_ID) {
-      property.setValue(dimension);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void openDialog(Property property) throws Exception {
+		// prepare Dimension to edit
+		Dimension dimension;
+		{
+			Object value = property.getValue();
+			if (value instanceof Dimension) {
+				dimension = new Dimension((Dimension) value);
+			} else {
+				dimension = new Dimension();
+			}
+		}
+		// prepare dialog
+		DimensionDialog dimensionDialog = new DimensionDialog(property.getTitle(), dimension);
+		// open dialog
+		int result = dimensionDialog.open();
+		if (result == IDialogConstants.IGNORE_ID) {
+			property.setValue(Property.UNKNOWN_VALUE);
+		} else if (result == IDialogConstants.OK_ID) {
+			property.setValue(dimension);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // DimensionDialog
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final class DimensionDialog extends AbstractGeometryDialog {
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public DimensionDialog(String title, Dimension dimension) {
-      super(title, dimension);
-    }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// DimensionDialog
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final class DimensionDialog extends AbstractGeometryDialog {
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public DimensionDialog(String title, Dimension dimension) {
+			super(title, dimension);
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // GUI
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    protected void createEditors() {
-      createEditor(ModelMessages.DimensionPropertyEditor_width, "width");
-      createEditor(ModelMessages.DimensionPropertyEditor_height, "height");
-    }
-  }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// GUI
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		protected void createEditors() {
+			createEditor(ModelMessages.DimensionPropertyEditor_width, "width");
+			createEditor(ModelMessages.DimensionPropertyEditor_height, "height");
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/geometry/InsetsPropertyEditor.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/geometry/InsetsPropertyEditor.java
index f3811c0fb..8a1062293 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/geometry/InsetsPropertyEditor.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/geometry/InsetsPropertyEditor.java
@@ -27,96 +27,96 @@
  * @coverage swing.property.editor
  */
 public final class InsetsPropertyEditor extends TextDialogPropertyEditor {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final PropertyEditor INSTANCE = new InsetsPropertyEditor();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final PropertyEditor INSTANCE = new InsetsPropertyEditor();
 
-  private InsetsPropertyEditor() {
-  }
+	private InsetsPropertyEditor() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getText(Property property) throws Exception {
-    Object value = property.getValue();
-    if (value instanceof Insets) {
-      Insets insets = (Insets) value;
-      return "("
-          + insets.top
-          + ", "
-          + insets.left
-          + ", "
-          + insets.bottom
-          + ", "
-          + insets.right
-          + ")";
-    }
-    // unknown value
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getText(Property property) throws Exception {
+		Object value = property.getValue();
+		if (value instanceof Insets) {
+			Insets insets = (Insets) value;
+			return "("
+			+ insets.top
+			+ ", "
+			+ insets.left
+			+ ", "
+			+ insets.bottom
+			+ ", "
+			+ insets.right
+			+ ")";
+		}
+		// unknown value
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void openDialog(Property property) throws Exception {
-    // prepare Insets to edit
-    Insets insets;
-    {
-      Object value = property.getValue();
-      if (value instanceof Insets) {
-        Insets insetsValue = (Insets) value;
-        insets =
-            new Insets(insetsValue.top, insetsValue.left, insetsValue.bottom, insetsValue.right);
-      } else {
-        insets = new Insets(0, 0, 0, 0);
-      }
-    }
-    // prepare dialog
-    InsetsDialog insetsDialog = new InsetsDialog(property.getTitle(), insets);
-    // open dialog
-    int result = insetsDialog.open();
-    if (result == IDialogConstants.IGNORE_ID) {
-      property.setValue(Property.UNKNOWN_VALUE);
-    } else if (result == IDialogConstants.OK_ID) {
-      property.setValue(insets);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void openDialog(Property property) throws Exception {
+		// prepare Insets to edit
+		Insets insets;
+		{
+			Object value = property.getValue();
+			if (value instanceof Insets) {
+				Insets insetsValue = (Insets) value;
+				insets =
+						new Insets(insetsValue.top, insetsValue.left, insetsValue.bottom, insetsValue.right);
+			} else {
+				insets = new Insets(0, 0, 0, 0);
+			}
+		}
+		// prepare dialog
+		InsetsDialog insetsDialog = new InsetsDialog(property.getTitle(), insets);
+		// open dialog
+		int result = insetsDialog.open();
+		if (result == IDialogConstants.IGNORE_ID) {
+			property.setValue(Property.UNKNOWN_VALUE);
+		} else if (result == IDialogConstants.OK_ID) {
+			property.setValue(insets);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // InsetsDialog
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final class InsetsDialog extends AbstractGeometryDialog {
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public InsetsDialog(String title, Insets insets) {
-      super(title, insets);
-    }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// InsetsDialog
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final class InsetsDialog extends AbstractGeometryDialog {
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public InsetsDialog(String title, Insets insets) {
+			super(title, insets);
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // GUI
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    protected void createEditors() {
-      createEditor(ModelMessages.InsetsPropertyEditor_top, "top");
-      createEditor(ModelMessages.InsetsPropertyEditor_left, "left");
-      createEditor(ModelMessages.InsetsPropertyEditor_bottom, "bottom");
-      createEditor(ModelMessages.InsetsPropertyEditor_right, "right");
-    }
-  }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// GUI
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		protected void createEditors() {
+			createEditor(ModelMessages.InsetsPropertyEditor_top, "top");
+			createEditor(ModelMessages.InsetsPropertyEditor_left, "left");
+			createEditor(ModelMessages.InsetsPropertyEditor_bottom, "bottom");
+			createEditor(ModelMessages.InsetsPropertyEditor_right, "right");
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/geometry/PointPropertyEditor.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/geometry/PointPropertyEditor.java
index 1f62a4f6b..db5746a3e 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/geometry/PointPropertyEditor.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/geometry/PointPropertyEditor.java
@@ -27,84 +27,84 @@
  * @coverage swing.property.editor
  */
 public final class PointPropertyEditor extends TextDialogPropertyEditor {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final PropertyEditor INSTANCE = new PointPropertyEditor();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final PropertyEditor INSTANCE = new PointPropertyEditor();
 
-  private PointPropertyEditor() {
-  }
+	private PointPropertyEditor() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getText(Property property) throws Exception {
-    Object value = property.getValue();
-    if (value instanceof Point) {
-      Point point = (Point) value;
-      return "(" + point.x + ", " + point.y + ")";
-    }
-    // unknown value
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getText(Property property) throws Exception {
+		Object value = property.getValue();
+		if (value instanceof Point) {
+			Point point = (Point) value;
+			return "(" + point.x + ", " + point.y + ")";
+		}
+		// unknown value
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void openDialog(Property property) throws Exception {
-    // prepare Point to edit
-    Point point;
-    {
-      Object value = property.getValue();
-      if (value instanceof Point) {
-        point = new Point((Point) value);
-      } else {
-        point = new Point();
-      }
-    }
-    // prepare dialog
-    PointDialog pointDialog = new PointDialog(property.getTitle(), point);
-    // open dialog
-    int result = pointDialog.open();
-    if (result == IDialogConstants.IGNORE_ID) {
-      property.setValue(Property.UNKNOWN_VALUE);
-    } else if (result == IDialogConstants.OK_ID) {
-      property.setValue(point);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void openDialog(Property property) throws Exception {
+		// prepare Point to edit
+		Point point;
+		{
+			Object value = property.getValue();
+			if (value instanceof Point) {
+				point = new Point((Point) value);
+			} else {
+				point = new Point();
+			}
+		}
+		// prepare dialog
+		PointDialog pointDialog = new PointDialog(property.getTitle(), point);
+		// open dialog
+		int result = pointDialog.open();
+		if (result == IDialogConstants.IGNORE_ID) {
+			property.setValue(Property.UNKNOWN_VALUE);
+		} else if (result == IDialogConstants.OK_ID) {
+			property.setValue(point);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // PointDialog
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final class PointDialog extends AbstractGeometryDialog {
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public PointDialog(String title, Point point) {
-      super(title, point);
-    }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// PointDialog
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final class PointDialog extends AbstractGeometryDialog {
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public PointDialog(String title, Point point) {
+			super(title, point);
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // GUI
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    protected void createEditors() {
-      createEditor(ModelMessages.PointPropertyEditor_x, "x");
-      createEditor(ModelMessages.PointPropertyEditor_y, "y");
-    }
-  }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// GUI
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		protected void createEditors() {
+			createEditor(ModelMessages.PointPropertyEditor_x, "x");
+			createEditor(ModelMessages.PointPropertyEditor_y, "y");
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/geometry/RectanglePropertyEditor.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/geometry/RectanglePropertyEditor.java
index 3f163d8ac..aa34ba4d0 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/geometry/RectanglePropertyEditor.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/geometry/RectanglePropertyEditor.java
@@ -27,94 +27,94 @@
  * @coverage swing.property.editor
  */
 public final class RectanglePropertyEditor extends TextDialogPropertyEditor {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final PropertyEditor INSTANCE = new RectanglePropertyEditor();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final PropertyEditor INSTANCE = new RectanglePropertyEditor();
 
-  private RectanglePropertyEditor() {
-  }
+	private RectanglePropertyEditor() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getText(Property property) throws Exception {
-    Object value = property.getValue();
-    if (value instanceof Rectangle) {
-      Rectangle rectangle = (Rectangle) value;
-      return "("
-          + rectangle.x
-          + ", "
-          + rectangle.y
-          + ", "
-          + rectangle.width
-          + ", "
-          + rectangle.height
-          + ")";
-    }
-    // unknown value
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getText(Property property) throws Exception {
+		Object value = property.getValue();
+		if (value instanceof Rectangle) {
+			Rectangle rectangle = (Rectangle) value;
+			return "("
+			+ rectangle.x
+			+ ", "
+			+ rectangle.y
+			+ ", "
+			+ rectangle.width
+			+ ", "
+			+ rectangle.height
+			+ ")";
+		}
+		// unknown value
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void openDialog(Property property) throws Exception {
-    // prepare Rectangle to edit
-    Rectangle rectangle;
-    {
-      Object value = property.getValue();
-      if (value instanceof Rectangle) {
-        rectangle = new Rectangle((Rectangle) value);
-      } else {
-        rectangle = new Rectangle();
-      }
-    }
-    // prepare dialog
-    RectangleDialog rectangleDialog = new RectangleDialog(property.getTitle(), rectangle);
-    // open dialog
-    int result = rectangleDialog.open();
-    if (result == IDialogConstants.IGNORE_ID) {
-      property.setValue(Property.UNKNOWN_VALUE);
-    } else if (result == IDialogConstants.OK_ID) {
-      property.setValue(rectangle);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void openDialog(Property property) throws Exception {
+		// prepare Rectangle to edit
+		Rectangle rectangle;
+		{
+			Object value = property.getValue();
+			if (value instanceof Rectangle) {
+				rectangle = new Rectangle((Rectangle) value);
+			} else {
+				rectangle = new Rectangle();
+			}
+		}
+		// prepare dialog
+		RectangleDialog rectangleDialog = new RectangleDialog(property.getTitle(), rectangle);
+		// open dialog
+		int result = rectangleDialog.open();
+		if (result == IDialogConstants.IGNORE_ID) {
+			property.setValue(Property.UNKNOWN_VALUE);
+		} else if (result == IDialogConstants.OK_ID) {
+			property.setValue(rectangle);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // RectangleDialog
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final class RectangleDialog extends AbstractGeometryDialog {
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public RectangleDialog(String title, Rectangle rectangle) {
-      super(title, rectangle);
-    }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// RectangleDialog
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final class RectangleDialog extends AbstractGeometryDialog {
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public RectangleDialog(String title, Rectangle rectangle) {
+			super(title, rectangle);
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // GUI
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    protected void createEditors() {
-      createEditor(ModelMessages.RectanglePropertyEditor_x, "x");
-      createEditor(ModelMessages.RectanglePropertyEditor_y, "y");
-      createEditor(ModelMessages.RectanglePropertyEditor_width, "width");
-      createEditor(ModelMessages.RectanglePropertyEditor_height, "height");
-    }
-  }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// GUI
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		protected void createEditors() {
+			createEditor(ModelMessages.RectanglePropertyEditor_x, "x");
+			createEditor(ModelMessages.RectanglePropertyEditor_y, "y");
+			createEditor(ModelMessages.RectanglePropertyEditor_width, "width");
+			createEditor(ModelMessages.RectanglePropertyEditor_height, "height");
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/icon/IconPropertyEditor.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/icon/IconPropertyEditor.java
index 0715f4496..f3fe09c91 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/icon/IconPropertyEditor.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/icon/IconPropertyEditor.java
@@ -51,164 +51,164 @@
  * @coverage swing.property.editor
  */
 public final class IconPropertyEditor extends TextDialogPropertyEditor {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final PropertyEditor INSTANCE = new IconPropertyEditor();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final PropertyEditor INSTANCE = new IconPropertyEditor();
 
-  private IconPropertyEditor() {
-  }
+	private IconPropertyEditor() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getText(Property property) throws Exception {
-    GenericProperty genericProperty = (GenericProperty) property;
-    Expression expression = genericProperty.getExpression();
-    JavaInfo javaInfo = genericProperty.getJavaInfo();
-    // check for "null" expression
-    if (expression instanceof NullLiteral) {
-      return "(null)";
-    }
-    //
-    expression = getFinalExpression(javaInfo, expression);
-    if (expression instanceof ClassInstanceCreation) {
-      ClassInstanceCreation creation = (ClassInstanceCreation) expression;
-      // absolute path
-      if (AstNodeUtils.isCreation(creation, "javax.swing.ImageIcon", new String[]{
-          "<init>(java.lang.String)",
-          "<init>(java.lang.String,java.lang.String)"})
-          && creation.arguments().get(0) instanceof StringLiteral) {
-        String path = ((StringLiteral) creation.arguments().get(0)).getLiteralValue();
-        return "File: " + path;
-      }
-      // URL
-      if (AstNodeUtils.isCreation(creation, "javax.swing.ImageIcon", new String[]{
-          "<init>(java.net.URL)",
-          "<init>(java.net.URL,java.lang.String)"})) {
-        Expression urlExpression = DomGenerics.arguments(creation).get(0);
-        urlExpression = getFinalExpression(javaInfo, urlExpression);
-        if (urlExpression instanceof MethodInvocation) {
-          MethodInvocation urlInvocation = (MethodInvocation) urlExpression;
-          boolean fromClass =
-              AstNodeUtils.isMethodInvocation(
-                  urlInvocation,
-                  "java.lang.Class",
-                  "getResource(java.lang.String)");
-          boolean fromClassLoader =
-              AstNodeUtils.isMethodInvocation(
-                  urlInvocation,
-                  "java.lang.ClassLoader",
-                  "getResource(java.lang.String)");
-          if ((fromClass || fromClassLoader)
-              && urlInvocation.arguments().get(0) instanceof StringLiteral) {
-            StringLiteral resourceLiteral = (StringLiteral) urlInvocation.arguments().get(0);
-            return "Classpath: " + resourceLiteral.getLiteralValue();
-          }
-        }
-      }
-    }
-    // unknown value
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getText(Property property) throws Exception {
+		GenericProperty genericProperty = (GenericProperty) property;
+		Expression expression = genericProperty.getExpression();
+		JavaInfo javaInfo = genericProperty.getJavaInfo();
+		// check for "null" expression
+		if (expression instanceof NullLiteral) {
+			return "(null)";
+		}
+		//
+		expression = getFinalExpression(javaInfo, expression);
+		if (expression instanceof ClassInstanceCreation) {
+			ClassInstanceCreation creation = (ClassInstanceCreation) expression;
+			// absolute path
+			if (AstNodeUtils.isCreation(creation, "javax.swing.ImageIcon", new String[]{
+					"<init>(java.lang.String)",
+			"<init>(java.lang.String,java.lang.String)"})
+					&& creation.arguments().get(0) instanceof StringLiteral) {
+				String path = ((StringLiteral) creation.arguments().get(0)).getLiteralValue();
+				return "File: " + path;
+			}
+			// URL
+			if (AstNodeUtils.isCreation(creation, "javax.swing.ImageIcon", new String[]{
+					"<init>(java.net.URL)",
+			"<init>(java.net.URL,java.lang.String)"})) {
+				Expression urlExpression = DomGenerics.arguments(creation).get(0);
+				urlExpression = getFinalExpression(javaInfo, urlExpression);
+				if (urlExpression instanceof MethodInvocation) {
+					MethodInvocation urlInvocation = (MethodInvocation) urlExpression;
+					boolean fromClass =
+							AstNodeUtils.isMethodInvocation(
+									urlInvocation,
+									"java.lang.Class",
+									"getResource(java.lang.String)");
+					boolean fromClassLoader =
+							AstNodeUtils.isMethodInvocation(
+									urlInvocation,
+									"java.lang.ClassLoader",
+									"getResource(java.lang.String)");
+					if ((fromClass || fromClassLoader)
+							&& urlInvocation.arguments().get(0) instanceof StringLiteral) {
+						StringLiteral resourceLiteral = (StringLiteral) urlInvocation.arguments().get(0);
+						return "Classpath: " + resourceLiteral.getLiteralValue();
+					}
+				}
+			}
+		}
+		// unknown value
+		return null;
+	}
 
-  /**
-   * @return the final {@link Expression} for given one. This method will traverse
-   *         {@link SimpleName}'s until last assignment of "real" {@link Expression} will be found.
-   */
-  private static Expression getFinalExpression(JavaInfo javaInfo, Expression expression) {
-    ExecutionFlowDescription flowDescription =
-        JavaInfoUtils.getState(javaInfo).getFlowDescription();
-    return ExecutionFlowUtils.getFinalExpression(flowDescription, expression);
-  }
+	/**
+	 * @return the final {@link Expression} for given one. This method will traverse
+	 *         {@link SimpleName}'s until last assignment of "real" {@link Expression} will be found.
+	 */
+	private static Expression getFinalExpression(JavaInfo javaInfo, Expression expression) {
+		ExecutionFlowDescription flowDescription =
+				JavaInfoUtils.getState(javaInfo).getFlowDescription();
+		return ExecutionFlowUtils.getFinalExpression(flowDescription, expression);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void openDialog(Property property) throws Exception {
-    GenericProperty genericProperty = (GenericProperty) property;
-    JavaInfo javaInfo = genericProperty.getJavaInfo();
-    AstEditor editor = javaInfo.getEditor();
-    IJavaProject javaProject = editor.getJavaProject();
-    // create dialog
-    ImageDialog imageDialog = new ImageDialog(javaProject);
-    // set input for dialog
-    {
-      String text = getText(property);
-      if (text == null) {
-        imageDialog.setInput(DefaultImagePage.ID, null);
-      } else if (text.equals("(null)")) {
-        imageDialog.setInput(NullImagePage.ID, null);
-      } else if (text.startsWith("File: ")) {
-        String path = text.substring("File: ".length());
-        imageDialog.setInput(FileImagePage.ID, path);
-      } else if (text.startsWith("Classpath: ")) {
-        String path = text.substring("Classpath: ".length());
-        imageDialog.setInput(ClasspathImagePage.ID, path);
-      }
-    }
-    // open dialog
-    if (imageDialog.open() == Window.OK) {
-      ImageInfo imageInfo = imageDialog.getImageInfo();
-      // prepare source
-      String source = null;
-      {
-        String pageId = imageInfo.getPageId();
-        if (pageId == DefaultImagePage.ID) {
-        } else if (pageId == NullImagePage.ID) {
-          source = "null";
-        } else if (pageId == FileImagePage.ID) {
-          String path = (String) imageInfo.getData();
-          String pathSource = StringConverter.INSTANCE.toJavaSource(javaInfo, path);
-          source = "new javax.swing.ImageIcon(" + pathSource + ")";
-        } else if (pageId == ClasspathImagePage.ID) {
-          String path = "/" + imageInfo.getData();
-          String pathSource = StringConverter.INSTANCE.toJavaSource(javaInfo, path);
-          source = "new javax.swing.ImageIcon({wbp_classTop}.getResource(" + pathSource + "))";
-        }
-      }
-      // set expression
-      genericProperty.setExpression(source, Property.UNKNOWN_VALUE);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void openDialog(Property property) throws Exception {
+		GenericProperty genericProperty = (GenericProperty) property;
+		JavaInfo javaInfo = genericProperty.getJavaInfo();
+		AstEditor editor = javaInfo.getEditor();
+		IJavaProject javaProject = editor.getJavaProject();
+		// create dialog
+		ImageDialog imageDialog = new ImageDialog(javaProject);
+		// set input for dialog
+		{
+			String text = getText(property);
+			if (text == null) {
+				imageDialog.setInput(DefaultImagePage.ID, null);
+			} else if (text.equals("(null)")) {
+				imageDialog.setInput(NullImagePage.ID, null);
+			} else if (text.startsWith("File: ")) {
+				String path = text.substring("File: ".length());
+				imageDialog.setInput(FileImagePage.ID, path);
+			} else if (text.startsWith("Classpath: ")) {
+				String path = text.substring("Classpath: ".length());
+				imageDialog.setInput(ClasspathImagePage.ID, path);
+			}
+		}
+		// open dialog
+		if (imageDialog.open() == Window.OK) {
+			ImageInfo imageInfo = imageDialog.getImageInfo();
+			// prepare source
+			String source = null;
+			{
+				String pageId = imageInfo.getPageId();
+				if (pageId == DefaultImagePage.ID) {
+				} else if (pageId == NullImagePage.ID) {
+					source = "null";
+				} else if (pageId == FileImagePage.ID) {
+					String path = (String) imageInfo.getData();
+					String pathSource = StringConverter.INSTANCE.toJavaSource(javaInfo, path);
+					source = "new javax.swing.ImageIcon(" + pathSource + ")";
+				} else if (pageId == ClasspathImagePage.ID) {
+					String path = "/" + imageInfo.getData();
+					String pathSource = StringConverter.INSTANCE.toJavaSource(javaInfo, path);
+					source = "new javax.swing.ImageIcon({wbp_classTop}.getResource(" + pathSource + "))";
+				}
+			}
+			// set expression
+			genericProperty.setExpression(source, Property.UNKNOWN_VALUE);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ImageDialog
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final class ImageDialog extends AbstractImageDialog {
-    private final IJavaProject m_javaProject;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ImageDialog
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final class ImageDialog extends AbstractImageDialog {
+		private final IJavaProject m_javaProject;
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    protected ImageDialog(IJavaProject javaProject) {
-      super(DesignerPlugin.getShell(), Activator.getDefault());
-      m_javaProject = javaProject;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		protected ImageDialog(IJavaProject javaProject) {
+			super(DesignerPlugin.getShell(), Activator.getDefault());
+			m_javaProject = javaProject;
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Pages
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    protected void addPages(Composite parent) {
-      addPage(new ClasspathImagePage(parent, SWT.NONE, this, m_javaProject));
-      addPage(new FileImagePage(parent, SWT.NONE, this));
-      addPage(new NullImagePage(parent, SWT.NONE, this));
-      addPage(new DefaultImagePage(parent, SWT.NONE, this));
-    }
-  }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Pages
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		protected void addPages(Composite parent) {
+			addPage(new ClasspathImagePage(parent, SWT.NONE, this, m_javaProject));
+			addPage(new FileImagePage(parent, SWT.NONE, this));
+			addPage(new NullImagePage(parent, SWT.NONE, this));
+			addPage(new DefaultImagePage(parent, SWT.NONE, this));
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/icon/ImagePropertyEditor.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/icon/ImagePropertyEditor.java
index fdbb0992e..4fecafcdd 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/icon/ImagePropertyEditor.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/icon/ImagePropertyEditor.java
@@ -50,163 +50,163 @@
  * @coverage swing.property.editor
  */
 public final class ImagePropertyEditor extends TextDialogPropertyEditor {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final PropertyEditor INSTANCE = new ImagePropertyEditor();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final PropertyEditor INSTANCE = new ImagePropertyEditor();
 
-  private ImagePropertyEditor() {
-  }
+	private ImagePropertyEditor() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getText(Property property) throws Exception {
-    GenericProperty genericProperty = (GenericProperty) property;
-    Expression expression = genericProperty.getExpression();
-    JavaInfo javaInfo = genericProperty.getJavaInfo();
-    // check for "null" expression
-    if (expression instanceof NullLiteral) {
-      return "(null)";
-    }
-    //
-    expression = getFinalExpression(javaInfo, expression);
-    if (expression instanceof MethodInvocation) {
-      MethodInvocation invocation = (MethodInvocation) expression;
-      if (AstNodeUtils.isMethodInvocation(
-          invocation,
-          "java.awt.Toolkit",
-          "getImage(java.lang.String)")) {
-        Expression pathExpression = DomGenerics.arguments(invocation).get(0);
-        String path = (String) JavaInfoEvaluationHelper.getValue(pathExpression);
-        return "File: " + path;
-      }
-      if (AstNodeUtils.isMethodInvocation(invocation, "java.awt.Toolkit", "getImage(java.net.URL)")) {
-        Expression urlExpression = DomGenerics.arguments(invocation).get(0);
-        urlExpression = getFinalExpression(javaInfo, urlExpression);
-        if (urlExpression instanceof MethodInvocation) {
-          MethodInvocation urlInvocation = (MethodInvocation) urlExpression;
-          boolean fromClass =
-              AstNodeUtils.isMethodInvocation(
-                  urlInvocation,
-                  "java.lang.Class",
-                  "getResource(java.lang.String)");
-          boolean fromClassLoader =
-              AstNodeUtils.isMethodInvocation(
-                  urlInvocation,
-                  "java.lang.ClassLoader",
-                  "getResource(java.lang.String)");
-          if (fromClass || fromClassLoader) {
-            Expression pathExpression = DomGenerics.arguments(urlInvocation).get(0);
-            String resource = (String) JavaInfoEvaluationHelper.getValue(pathExpression);
-            return "Classpath: " + resource;
-          }
-        }
-      }
-    }
-    // unknown value
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getText(Property property) throws Exception {
+		GenericProperty genericProperty = (GenericProperty) property;
+		Expression expression = genericProperty.getExpression();
+		JavaInfo javaInfo = genericProperty.getJavaInfo();
+		// check for "null" expression
+		if (expression instanceof NullLiteral) {
+			return "(null)";
+		}
+		//
+		expression = getFinalExpression(javaInfo, expression);
+		if (expression instanceof MethodInvocation) {
+			MethodInvocation invocation = (MethodInvocation) expression;
+			if (AstNodeUtils.isMethodInvocation(
+					invocation,
+					"java.awt.Toolkit",
+					"getImage(java.lang.String)")) {
+				Expression pathExpression = DomGenerics.arguments(invocation).get(0);
+				String path = (String) JavaInfoEvaluationHelper.getValue(pathExpression);
+				return "File: " + path;
+			}
+			if (AstNodeUtils.isMethodInvocation(invocation, "java.awt.Toolkit", "getImage(java.net.URL)")) {
+				Expression urlExpression = DomGenerics.arguments(invocation).get(0);
+				urlExpression = getFinalExpression(javaInfo, urlExpression);
+				if (urlExpression instanceof MethodInvocation) {
+					MethodInvocation urlInvocation = (MethodInvocation) urlExpression;
+					boolean fromClass =
+							AstNodeUtils.isMethodInvocation(
+									urlInvocation,
+									"java.lang.Class",
+									"getResource(java.lang.String)");
+					boolean fromClassLoader =
+							AstNodeUtils.isMethodInvocation(
+									urlInvocation,
+									"java.lang.ClassLoader",
+									"getResource(java.lang.String)");
+					if (fromClass || fromClassLoader) {
+						Expression pathExpression = DomGenerics.arguments(urlInvocation).get(0);
+						String resource = (String) JavaInfoEvaluationHelper.getValue(pathExpression);
+						return "Classpath: " + resource;
+					}
+				}
+			}
+		}
+		// unknown value
+		return null;
+	}
 
-  /**
-   * @return the final {@link Expression} for given one. This method will traverse
-   *         {@link SimpleName}'s until last assignment of "real" {@link Expression} will be found.
-   */
-  private static Expression getFinalExpression(JavaInfo javaInfo, Expression expression) {
-    ExecutionFlowDescription flowDescription =
-        JavaInfoUtils.getState(javaInfo).getFlowDescription();
-    return ExecutionFlowUtils.getFinalExpression(flowDescription, expression);
-  }
+	/**
+	 * @return the final {@link Expression} for given one. This method will traverse
+	 *         {@link SimpleName}'s until last assignment of "real" {@link Expression} will be found.
+	 */
+	private static Expression getFinalExpression(JavaInfo javaInfo, Expression expression) {
+		ExecutionFlowDescription flowDescription =
+				JavaInfoUtils.getState(javaInfo).getFlowDescription();
+		return ExecutionFlowUtils.getFinalExpression(flowDescription, expression);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void openDialog(Property property) throws Exception {
-    GenericProperty genericProperty = (GenericProperty) property;
-    JavaInfo javaInfo = genericProperty.getJavaInfo();
-    AstEditor editor = javaInfo.getEditor();
-    IJavaProject javaProject = editor.getJavaProject();
-    // create dialog
-    ImageDialog imageDialog = new ImageDialog(javaProject);
-    // set input for dialog
-    {
-      String text = getText(property);
-      if (text == null) {
-        imageDialog.setInput(DefaultImagePage.ID, null);
-      } else if (text.equals("(null)")) {
-        imageDialog.setInput(NullImagePage.ID, null);
-      } else if (text.startsWith("File: ")) {
-        String path = text.substring("File: ".length());
-        imageDialog.setInput(FileImagePage.ID, path);
-      } else if (text.startsWith("Classpath: ")) {
-        String path = text.substring("Classpath: ".length());
-        imageDialog.setInput(ClasspathImagePage.ID, path);
-      }
-    }
-    // open dialog
-    if (imageDialog.open() == Window.OK) {
-      ImageInfo imageInfo = imageDialog.getImageInfo();
-      // prepare source
-      String source = null;
-      {
-        String pageId = imageInfo.getPageId();
-        if (pageId == DefaultImagePage.ID) {
-        } else if (pageId == NullImagePage.ID) {
-          source = "null";
-        } else if (pageId == FileImagePage.ID) {
-          String path = (String) imageInfo.getData();
-          String pathSource = StringConverter.INSTANCE.toJavaSource(javaInfo, path);
-          source = "java.awt.Toolkit.getDefaultToolkit().getImage(" + pathSource + ")";
-        } else if (pageId == ClasspathImagePage.ID) {
-          String path = "/" + imageInfo.getData();
-          String pathSource = StringConverter.INSTANCE.toJavaSource(javaInfo, path);
-          source =
-              "java.awt.Toolkit.getDefaultToolkit().getImage({wbp_classTop}.getResource("
-                  + pathSource
-                  + "))";
-        }
-      }
-      // set expression
-      genericProperty.setExpression(source, Property.UNKNOWN_VALUE);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void openDialog(Property property) throws Exception {
+		GenericProperty genericProperty = (GenericProperty) property;
+		JavaInfo javaInfo = genericProperty.getJavaInfo();
+		AstEditor editor = javaInfo.getEditor();
+		IJavaProject javaProject = editor.getJavaProject();
+		// create dialog
+		ImageDialog imageDialog = new ImageDialog(javaProject);
+		// set input for dialog
+		{
+			String text = getText(property);
+			if (text == null) {
+				imageDialog.setInput(DefaultImagePage.ID, null);
+			} else if (text.equals("(null)")) {
+				imageDialog.setInput(NullImagePage.ID, null);
+			} else if (text.startsWith("File: ")) {
+				String path = text.substring("File: ".length());
+				imageDialog.setInput(FileImagePage.ID, path);
+			} else if (text.startsWith("Classpath: ")) {
+				String path = text.substring("Classpath: ".length());
+				imageDialog.setInput(ClasspathImagePage.ID, path);
+			}
+		}
+		// open dialog
+		if (imageDialog.open() == Window.OK) {
+			ImageInfo imageInfo = imageDialog.getImageInfo();
+			// prepare source
+			String source = null;
+			{
+				String pageId = imageInfo.getPageId();
+				if (pageId == DefaultImagePage.ID) {
+				} else if (pageId == NullImagePage.ID) {
+					source = "null";
+				} else if (pageId == FileImagePage.ID) {
+					String path = (String) imageInfo.getData();
+					String pathSource = StringConverter.INSTANCE.toJavaSource(javaInfo, path);
+					source = "java.awt.Toolkit.getDefaultToolkit().getImage(" + pathSource + ")";
+				} else if (pageId == ClasspathImagePage.ID) {
+					String path = "/" + imageInfo.getData();
+					String pathSource = StringConverter.INSTANCE.toJavaSource(javaInfo, path);
+					source =
+							"java.awt.Toolkit.getDefaultToolkit().getImage({wbp_classTop}.getResource("
+									+ pathSource
+									+ "))";
+				}
+			}
+			// set expression
+			genericProperty.setExpression(source, Property.UNKNOWN_VALUE);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ImageDialog
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final class ImageDialog extends AbstractImageDialog {
-    private final IJavaProject m_javaProject;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ImageDialog
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final class ImageDialog extends AbstractImageDialog {
+		private final IJavaProject m_javaProject;
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    protected ImageDialog(IJavaProject javaProject) {
-      super(DesignerPlugin.getShell(), Activator.getDefault());
-      m_javaProject = javaProject;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		protected ImageDialog(IJavaProject javaProject) {
+			super(DesignerPlugin.getShell(), Activator.getDefault());
+			m_javaProject = javaProject;
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Pages
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    protected void addPages(Composite parent) {
-      addPage(new ClasspathImagePage(parent, SWT.NONE, this, m_javaProject));
-      addPage(new FileImagePage(parent, SWT.NONE, this));
-      addPage(new DefaultImagePage(parent, SWT.NONE, this));
-    }
-  }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Pages
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		protected void addPages(Composite parent) {
+			addPage(new ClasspathImagePage(parent, SWT.NONE, this, m_javaProject));
+			addPage(new FileImagePage(parent, SWT.NONE, this));
+			addPage(new DefaultImagePage(parent, SWT.NONE, this));
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/models/combo/ComboBoxModelDialog.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/models/combo/ComboBoxModelDialog.java
index aaa2e7789..1680b978a 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/models/combo/ComboBoxModelDialog.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/models/combo/ComboBoxModelDialog.java
@@ -59,229 +59,229 @@
  * @coverage swing.property.editor
  */
 public class ComboBoxModelDialog extends ResizableDialog {
-  final IJavaProject javaProject;
-  final String title;
+	final IJavaProject javaProject;
+	final String title;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ComboBoxModelDialog(Shell parentShell,
-      AbstractUIPlugin plugin,
-      IJavaProject javaProject,
-      String title) {
-    super(parentShell, plugin);
-    this.javaProject = javaProject;
-    this.title = title;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ComboBoxModelDialog(Shell parentShell,
+			AbstractUIPlugin plugin,
+			IJavaProject javaProject,
+			String title) {
+		super(parentShell, plugin);
+		this.javaProject = javaProject;
+		this.title = title;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final int COLUMNS = 3;
-  private Button enumRadio;
-  private Text enumText;
-  private Button enumButton;
-  private Button itemsRadio;
-  private Text itemsText;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final int COLUMNS = 3;
+	private Button enumRadio;
+	private Text enumText;
+	private Button enumButton;
+	private Button itemsRadio;
+	private Text itemsText;
 
-  @Override
-  protected Control createDialogArea(Composite parent) {
-    Composite area = (Composite) super.createDialogArea(parent);
-    GridLayoutFactory.create(area).columns(COLUMNS);
-    // enum selection
-    {
-      enumRadio = new Button(area, SWT.RADIO);
-      GridDataFactory.create(enumRadio).spanH(COLUMNS);
-      enumRadio.setText(ModelMessages.ComboBoxModelDialog_enumRadio);
-      new Label(area, SWT.NONE).setText("   "); // filler
-      enumText = new Text(area, SWT.BORDER);
-      GridDataFactory.create(enumText).grabH().fillH().hintHC(60);
-      // handle Ctrl+Enter as OK
-      enumText.addKeyListener(new KeyAdapter() {
-        @Override
-        public void keyPressed(KeyEvent e) {
-          setEnumSelected(true);
-          if (e.stateMask == SWT.CTRL && e.keyCode == SWT.CR) {
-            okPressed();
-          }
-        }
-      });
-      enumButton = new Button(area, SWT.NONE);
-      enumButton.setText(ModelMessages.ComboBoxModelDialog_enumBrowse);
-      enumButton.addSelectionListener(new SelectionListener() {
-        public void widgetSelected(SelectionEvent event) {
-          setEnumSelected(true);
-          selectEnumType();
-        }
+	@Override
+	protected Control createDialogArea(Composite parent) {
+		Composite area = (Composite) super.createDialogArea(parent);
+		GridLayoutFactory.create(area).columns(COLUMNS);
+		// enum selection
+		{
+			enumRadio = new Button(area, SWT.RADIO);
+			GridDataFactory.create(enumRadio).spanH(COLUMNS);
+			enumRadio.setText(ModelMessages.ComboBoxModelDialog_enumRadio);
+			new Label(area, SWT.NONE).setText("   "); // filler
+			enumText = new Text(area, SWT.BORDER);
+			GridDataFactory.create(enumText).grabH().fillH().hintHC(60);
+			// handle Ctrl+Enter as OK
+			enumText.addKeyListener(new KeyAdapter() {
+				@Override
+				public void keyPressed(KeyEvent e) {
+					setEnumSelected(true);
+					if (e.stateMask == SWT.CTRL && e.keyCode == SWT.CR) {
+						okPressed();
+					}
+				}
+			});
+			enumButton = new Button(area, SWT.NONE);
+			enumButton.setText(ModelMessages.ComboBoxModelDialog_enumBrowse);
+			enumButton.addSelectionListener(new SelectionListener() {
+				public void widgetSelected(SelectionEvent event) {
+					setEnumSelected(true);
+					selectEnumType();
+				}
 
-        public void widgetDefaultSelected(SelectionEvent e) {
-        }
-      });
-    }
-    // direct text items
-    {
-      itemsRadio = new Button(area, SWT.RADIO);
-      itemsRadio.setText(ModelMessages.ComboBoxModelDialog_itemsRadio);
-      GridDataFactory.create(itemsRadio).spanH(COLUMNS);
-      new Label(area, SWT.NONE).setText("   "); // filler
-      itemsText = new Text(area, SWT.BORDER | SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
-      GridDataFactory.create(itemsText).spanH(COLUMNS - 1).grab().fill().hintVC(10);
-      // handle Ctrl+Enter as OK
-      itemsText.addKeyListener(new KeyAdapter() {
-        @Override
-        public void keyPressed(KeyEvent e) {
-          setEnumSelected(false);
-          if (e.stateMask == SWT.CTRL && e.keyCode == SWT.CR) {
-            okPressed();
-          }
-        }
-      });
-    }
-    // footer
-    Label footerLabel = new Label(area, SWT.NONE);
-    GridDataFactory.create(footerLabel).spanH(COLUMNS).alignH(SWT.RIGHT);
-    footerLabel.setText(ModelMessages.ComboBoxModelDialog_footerLabel);
-    // initialize
-    if (StringUtils.isEmpty(enumTypeName)) {
-      setEnumTypeName("");
-      setItems(StringUtils.isEmpty(stringItems) ? "" : stringItems);
-    } else {
-      setItems("");
-      setEnumTypeName(enumTypeName);
-    }
-    //
-    return area;
-  }
+				public void widgetDefaultSelected(SelectionEvent e) {
+				}
+			});
+		}
+		// direct text items
+		{
+			itemsRadio = new Button(area, SWT.RADIO);
+			itemsRadio.setText(ModelMessages.ComboBoxModelDialog_itemsRadio);
+			GridDataFactory.create(itemsRadio).spanH(COLUMNS);
+			new Label(area, SWT.NONE).setText("   "); // filler
+			itemsText = new Text(area, SWT.BORDER | SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
+			GridDataFactory.create(itemsText).spanH(COLUMNS - 1).grab().fill().hintVC(10);
+			// handle Ctrl+Enter as OK
+			itemsText.addKeyListener(new KeyAdapter() {
+				@Override
+				public void keyPressed(KeyEvent e) {
+					setEnumSelected(false);
+					if (e.stateMask == SWT.CTRL && e.keyCode == SWT.CR) {
+						okPressed();
+					}
+				}
+			});
+		}
+		// footer
+		Label footerLabel = new Label(area, SWT.NONE);
+		GridDataFactory.create(footerLabel).spanH(COLUMNS).alignH(SWT.RIGHT);
+		footerLabel.setText(ModelMessages.ComboBoxModelDialog_footerLabel);
+		// initialize
+		if (StringUtils.isEmpty(enumTypeName)) {
+			setEnumTypeName("");
+			setItems(StringUtils.isEmpty(stringItems) ? "" : stringItems);
+		} else {
+			setItems("");
+			setEnumTypeName(enumTypeName);
+		}
+		//
+		return area;
+	}
 
-  @Override
-  protected void configureShell(Shell newShell) {
-    super.configureShell(newShell);
-    newShell.setText(title);
-  }
+	@Override
+	protected void configureShell(Shell newShell) {
+		super.configureShell(newShell);
+		newShell.setText(title);
+	}
 
-  @Override
-  protected void okPressed() {
-    isEnumSelected = enumRadio.getSelection();
-    enumTypeName = enumText.getText();
-    stringItems = itemsText.getText();
-    super.okPressed();
-  }
+	@Override
+	protected void okPressed() {
+		isEnumSelected = enumRadio.getSelection();
+		enumTypeName = enumText.getText();
+		stringItems = itemsText.getText();
+		super.okPressed();
+	}
 
-  private void selectEnumType() {
-    try {
-      Shell shell = DesignerPlugin.getShell();
-      IJavaSearchScope scope = SearchEngine.createJavaSearchScope(new IJavaElement[]{javaProject});
-      SelectionDialog dialog =
-          JavaUI.createTypeDialog(
-              shell,
-              new ProgressMonitorDialog(shell),
-              scope,
-              IJavaElementSearchConstants.CONSIDER_ENUMS,
-              false,
-              enumText.getText());
-      dialog.setTitle(ModelMessages.ComboBoxModelDialog_typeDialogTitle);
-      dialog.setMessage(ModelMessages.ComboBoxModelDialog_typeDialogMessage);
-      // open dialog
-      if (dialog.open() == Window.OK) {
-        IType selectedEnumType = (IType) dialog.getResult()[0];
-        setEnumTypeName(selectedEnumType.getFullyQualifiedName());
-      }
-    } catch (Throwable e) {
-      DesignerPlugin.log(e);
-    }
-  }
+	private void selectEnumType() {
+		try {
+			Shell shell = DesignerPlugin.getShell();
+			IJavaSearchScope scope = SearchEngine.createJavaSearchScope(new IJavaElement[]{javaProject});
+			SelectionDialog dialog =
+					JavaUI.createTypeDialog(
+							shell,
+							new ProgressMonitorDialog(shell),
+							scope,
+							IJavaElementSearchConstants.CONSIDER_ENUMS,
+							false,
+							enumText.getText());
+			dialog.setTitle(ModelMessages.ComboBoxModelDialog_typeDialogTitle);
+			dialog.setMessage(ModelMessages.ComboBoxModelDialog_typeDialogMessage);
+			// open dialog
+			if (dialog.open() == Window.OK) {
+				IType selectedEnumType = (IType) dialog.getResult()[0];
+				setEnumTypeName(selectedEnumType.getFullyQualifiedName());
+			}
+		} catch (Throwable e) {
+			DesignerPlugin.log(e);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private boolean isEnumSelected;
-  private String enumTypeName;
-  private String stringItems;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private boolean isEnumSelected;
+	private String enumTypeName;
+	private String stringItems;
 
-  /**
-   * Switch the configuration mode.
-   */
-  private void setEnumSelected(boolean selected) {
-    isEnumSelected = selected;
-    if (enumRadio != null && !enumRadio.isDisposed()) {
-      enumRadio.setSelection(selected);
-    }
-    if (itemsRadio != null && !itemsRadio.isDisposed()) {
-      itemsRadio.setSelection(!selected);
-    }
-  }
+	/**
+	 * Switch the configuration mode.
+	 */
+	private void setEnumSelected(boolean selected) {
+		isEnumSelected = selected;
+		if (enumRadio != null && !enumRadio.isDisposed()) {
+			enumRadio.setSelection(selected);
+		}
+		if (itemsRadio != null && !itemsRadio.isDisposed()) {
+			itemsRadio.setSelection(!selected);
+		}
+	}
 
-  /**
-   * @return <code>true</code> if configuration mode is enum-selection.
-   */
-  public boolean isEnumSelected() {
-    return isEnumSelected;
-  }
+	/**
+	 * @return <code>true</code> if configuration mode is enum-selection.
+	 */
+	public boolean isEnumSelected() {
+		return isEnumSelected;
+	}
 
-  /**
-   * Sets the enum type name to edit.
-   */
-  public void setEnumTypeName(String enumTypeName) {
-    this.enumTypeName = enumTypeName.replace('$', '.');;
-    if (enumText != null && !enumText.isDisposed()) {
-      enumText.setText(this.enumTypeName);
-    }
-    setEnumSelected(true);
-  }
+	/**
+	 * Sets the enum type name to edit.
+	 */
+	public void setEnumTypeName(String enumTypeName) {
+		this.enumTypeName = enumTypeName.replace('$', '.');;
+		if (enumText != null && !enumText.isDisposed()) {
+			enumText.setText(this.enumTypeName);
+		}
+		setEnumSelected(true);
+	}
 
-  /**
-   * @return the enum type name.
-   */
-  public String getEnumTypeName() {
-    if (enumText != null && !enumText.isDisposed()) {
-      return enumText.getText();
-    } else {
-      return enumTypeName;
-    }
-  }
+	/**
+	 * @return the enum type name.
+	 */
+	public String getEnumTypeName() {
+		if (enumText != null && !enumText.isDisposed()) {
+			return enumText.getText();
+		} else {
+			return enumTypeName;
+		}
+	}
 
-  /**
-   * Sets the items to edit.
-   */
-  public void setItems(String stringItems) {
-    this.stringItems = stringItems;
-    if (itemsText != null && !itemsText.isDisposed()) {
-      itemsText.setText(this.stringItems);
-    }
-    setEnumSelected(false);
-  }
+	/**
+	 * Sets the items to edit.
+	 */
+	public void setItems(String stringItems) {
+		this.stringItems = stringItems;
+		if (itemsText != null && !itemsText.isDisposed()) {
+			itemsText.setText(this.stringItems);
+		}
+		setEnumSelected(false);
+	}
 
-  public void setItems(String[] items) {
-    setItems(StringUtils.join(items, "\n"));
-  }
+	public void setItems(String[] items) {
+		setItems(StringUtils.join(items, "\n"));
+	}
 
-  /**
-   * @return the edited items.
-   */
-  public String[] getItems() {
-    return ExecutionUtils.runObjectLog(new RunnableObjectEx<String[]>() {
-      public String[] runObject() throws Exception {
-        List<String> strings = Lists.newArrayList();
-        String stringItems =
-            itemsText != null && !itemsText.isDisposed()
-                ? itemsText.getText()
-                : ComboBoxModelDialog.this.stringItems;
-        BufferedReader br = new BufferedReader(new StringReader(stringItems));
-        while (true) {
-          String s = br.readLine();
-          if (s == null) {
-            break;
-          }
-          strings.add(s);
-        }
-        return strings.toArray(new String[strings.size()]);
-      }
-    }, ArrayUtils.EMPTY_STRING_ARRAY);
-  }
+	/**
+	 * @return the edited items.
+	 */
+	public String[] getItems() {
+		return ExecutionUtils.runObjectLog(new RunnableObjectEx<String[]>() {
+			public String[] runObject() throws Exception {
+				List<String> strings = Lists.newArrayList();
+				String stringItems =
+						itemsText != null && !itemsText.isDisposed()
+						? itemsText.getText()
+								: ComboBoxModelDialog.this.stringItems;
+				BufferedReader br = new BufferedReader(new StringReader(stringItems));
+				while (true) {
+					String s = br.readLine();
+					if (s == null) {
+						break;
+					}
+					strings.add(s);
+				}
+				return strings.toArray(new String[strings.size()]);
+			}
+		}, ArrayUtils.EMPTY_STRING_ARRAY);
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/models/combo/ComboBoxModelPropertyEditor.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/models/combo/ComboBoxModelPropertyEditor.java
index 1a6aa2280..d7fcd90b9 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/models/combo/ComboBoxModelPropertyEditor.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/models/combo/ComboBoxModelPropertyEditor.java
@@ -45,137 +45,137 @@
  * @coverage swing.property.editor
  */
 public final class ComboBoxModelPropertyEditor extends TextDialogPropertyEditor {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final PropertyEditor INSTANCE = new ComboBoxModelPropertyEditor();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final PropertyEditor INSTANCE = new ComboBoxModelPropertyEditor();
 
-  private ComboBoxModelPropertyEditor() {
-  }
+	private ComboBoxModelPropertyEditor() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getText(Property property) throws Exception {
-    if (property instanceof GenericProperty) {
-      GenericProperty genericProperty = (GenericProperty) property;
-      ITypeBinding enumTypeBinding = extractEnumTypeBinding(genericProperty.getExpression());
-      if (enumTypeBinding != null) {
-        return enumTypeBinding.getName();
-      }
-    }
-    String[] items = getItems(property);
-    return "[" + StringUtils.join(items, ", ") + "]";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getText(Property property) throws Exception {
+		if (property instanceof GenericProperty) {
+			GenericProperty genericProperty = (GenericProperty) property;
+			ITypeBinding enumTypeBinding = extractEnumTypeBinding(genericProperty.getExpression());
+			if (enumTypeBinding != null) {
+				return enumTypeBinding.getName();
+			}
+		}
+		String[] items = getItems(property);
+		return "[" + StringUtils.join(items, ", ") + "]";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void openDialog(Property property) throws Exception {
-    if (property instanceof GenericProperty) {
-      GenericProperty genericProperty = (GenericProperty) property;
-      ComboBoxModelDialog dialog =
-          new ComboBoxModelDialog(DesignerPlugin.getShell(),
-              Activator.getDefault(),
-              genericProperty.getJavaInfo().getEditor().getJavaProject(),
-              property.getTitle());
-      ITypeBinding enumTypeBinding = extractEnumTypeBinding(genericProperty.getExpression());
-      if (enumTypeBinding != null) {
-        dialog.setEnumTypeName(AstNodeUtils.getFullyQualifiedName(enumTypeBinding, true));
-      } else {
-        dialog.setItems(getItems(genericProperty));
-      }
-      // open dialog
-      if (dialog.open() == Window.OK) {
-        JavaInfo javaInfo = genericProperty.getJavaInfo();
-        // prepare model source
-        String source = null;
-        if (dialog.isEnumSelected()) {
-          String enumTypeName = dialog.getEnumTypeName();
-          if (!StringUtils.isEmpty(enumTypeName)) {
-            source = "new javax.swing.DefaultComboBoxModel(" + enumTypeName + ".values())";
-          }
-        } else {
-          String[] items = dialog.getItems();
-          if (items != null && items.length > 0) {
-            source = "new javax.swing.DefaultComboBoxModel(new String[] {";
-            // append items
-            for (int i = 0; i < items.length; i++) {
-              String item = items[i];
-              if (i != 0) {
-                source += ", ";
-              }
-              source += StringConverter.INSTANCE.toJavaSource(javaInfo, item);
-            }
-            // close model
-            source += "})";
-          }
-        }
-        // set source
-        if (StringUtils.isEmpty(source)) {
-          genericProperty.setValue(Property.UNKNOWN_VALUE);
-        } else {
-          genericProperty.setExpression(source, Property.UNKNOWN_VALUE);
-        }
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void openDialog(Property property) throws Exception {
+		if (property instanceof GenericProperty) {
+			GenericProperty genericProperty = (GenericProperty) property;
+			ComboBoxModelDialog dialog =
+					new ComboBoxModelDialog(DesignerPlugin.getShell(),
+							Activator.getDefault(),
+							genericProperty.getJavaInfo().getEditor().getJavaProject(),
+							property.getTitle());
+			ITypeBinding enumTypeBinding = extractEnumTypeBinding(genericProperty.getExpression());
+			if (enumTypeBinding != null) {
+				dialog.setEnumTypeName(AstNodeUtils.getFullyQualifiedName(enumTypeBinding, true));
+			} else {
+				dialog.setItems(getItems(genericProperty));
+			}
+			// open dialog
+			if (dialog.open() == Window.OK) {
+				JavaInfo javaInfo = genericProperty.getJavaInfo();
+				// prepare model source
+				String source = null;
+				if (dialog.isEnumSelected()) {
+					String enumTypeName = dialog.getEnumTypeName();
+					if (!StringUtils.isEmpty(enumTypeName)) {
+						source = "new javax.swing.DefaultComboBoxModel(" + enumTypeName + ".values())";
+					}
+				} else {
+					String[] items = dialog.getItems();
+					if (items != null && items.length > 0) {
+						source = "new javax.swing.DefaultComboBoxModel(new String[] {";
+						// append items
+						for (int i = 0; i < items.length; i++) {
+							String item = items[i];
+							if (i != 0) {
+								source += ", ";
+							}
+							source += StringConverter.INSTANCE.toJavaSource(javaInfo, item);
+						}
+						// close model
+						source += "})";
+					}
+				}
+				// set source
+				if (StringUtils.isEmpty(source)) {
+					genericProperty.setValue(Property.UNKNOWN_VALUE);
+				} else {
+					genericProperty.setExpression(source, Property.UNKNOWN_VALUE);
+				}
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Value
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static ITypeBinding extractEnumTypeBinding(Expression expression) {
-    if (expression != null) {
-      expression = AstNodeUtils.getActualVariableExpression(expression);
-      if (AstNodeUtils.isSuccessorOf(expression, DefaultComboBoxModel.class)) {
-        if (expression instanceof ClassInstanceCreation) {
-          ClassInstanceCreation creation = (ClassInstanceCreation) expression;
-          if ("<init>(java.lang.Object[])".equals(AstNodeUtils.getCreationSignature(creation))) {
-            Expression argumentExpression =
-                AstNodeUtils.getActualVariableExpression(DomGenerics.arguments(creation).get(0));
-            if (argumentExpression instanceof MethodInvocation) {
-              MethodInvocation argumentInvocation = (MethodInvocation) argumentExpression;
-              IMethodBinding methodBinding = AstNodeUtils.getMethodBinding(argumentInvocation);
-              ITypeBinding methodDeclaringClassBinding = methodBinding.getDeclaringClass();
-              if (methodDeclaringClassBinding.isEnum()
-                  && "values()".equals(AstNodeUtils.getMethodSignature(argumentInvocation))) {
-                return methodDeclaringClassBinding;
-              }
-            }
-          }
-        }
-      }
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Value
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static ITypeBinding extractEnumTypeBinding(Expression expression) {
+		if (expression != null) {
+			expression = AstNodeUtils.getActualVariableExpression(expression);
+			if (AstNodeUtils.isSuccessorOf(expression, DefaultComboBoxModel.class)) {
+				if (expression instanceof ClassInstanceCreation) {
+					ClassInstanceCreation creation = (ClassInstanceCreation) expression;
+					if ("<init>(java.lang.Object[])".equals(AstNodeUtils.getCreationSignature(creation))) {
+						Expression argumentExpression =
+								AstNodeUtils.getActualVariableExpression(DomGenerics.arguments(creation).get(0));
+						if (argumentExpression instanceof MethodInvocation) {
+							MethodInvocation argumentInvocation = (MethodInvocation) argumentExpression;
+							IMethodBinding methodBinding = AstNodeUtils.getMethodBinding(argumentInvocation);
+							ITypeBinding methodDeclaringClassBinding = methodBinding.getDeclaringClass();
+							if (methodDeclaringClassBinding.isEnum()
+									&& "values()".equals(AstNodeUtils.getMethodSignature(argumentInvocation))) {
+								return methodDeclaringClassBinding;
+							}
+						}
+					}
+				}
+			}
+		}
+		return null;
+	}
 
-  /**
-   * @return the items specified in value of given {@link Property}.
-   */
-  private static String[] getItems(Property property) throws Exception {
-    Object value = property.getValue();
-    if (value instanceof ComboBoxModel) {
-      List<String> items = Lists.newArrayList();
-      ComboBoxModel model = (ComboBoxModel) value;
-      for (int i = 0; i < model.getSize(); i++) {
-        Object element = model.getElementAt(i);
-        if (element instanceof String) {
-          items.add((String) element);
-        }
-      }
-      return items.toArray(new String[items.size()]);
-    }
-    // no items
-    return ArrayUtils.EMPTY_STRING_ARRAY;
-  }
+	/**
+	 * @return the items specified in value of given {@link Property}.
+	 */
+	private static String[] getItems(Property property) throws Exception {
+		Object value = property.getValue();
+		if (value instanceof ComboBoxModel) {
+			List<String> items = Lists.newArrayList();
+			ComboBoxModel model = (ComboBoxModel) value;
+			for (int i = 0; i < model.getSize(); i++) {
+				Object element = model.getElementAt(i);
+				if (element instanceof String) {
+					items.add((String) element);
+				}
+			}
+			return items.toArray(new String[items.size()]);
+		}
+		// no items
+		return ArrayUtils.EMPTY_STRING_ARRAY;
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/models/list/ListModelEvaluator.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/models/list/ListModelEvaluator.java
index b5b061101..1822cf0ce 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/models/list/ListModelEvaluator.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/models/list/ListModelEvaluator.java
@@ -39,50 +39,50 @@
  * @coverage swing.model
  */
 public final class ListModelEvaluator implements IExpressionEvaluator {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IExpressionEvaluator
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public Object evaluate(EvaluationContext context,
-      Expression expression,
-      ITypeBinding typeBinding,
-      String typeQualifiedName) throws Exception {
-    // check for anonymous AbstractListModel
-    if (expression instanceof ClassInstanceCreation) {
-      ClassInstanceCreation creation = (ClassInstanceCreation) expression;
-      if (creation.getAnonymousClassDeclaration() != null
-          && AstNodeUtils.isSuccessorOf(expression, AbstractListModel.class)) {
-        AnonymousClassDeclaration declaration = creation.getAnonymousClassDeclaration();
-        List<BodyDeclaration> declarations = DomGenerics.bodyDeclarations(declaration);
-        for (BodyDeclaration bodyDeclaration : declarations) {
-          if (bodyDeclaration instanceof FieldDeclaration) {
-            FieldDeclaration fieldDeclaration = (FieldDeclaration) bodyDeclaration;
-            VariableDeclaration fragment = DomGenerics.fragments(fieldDeclaration).get(0);
-            Type fieldType = fieldDeclaration.getType();
-            String fieldTypeName = AstNodeUtils.getFullyQualifiedName(fieldType, false);
-            if (fieldTypeName.equals("java.lang.String[]")) {
-              final String[] values =
-                  (String[]) AstEvaluationEngine.evaluate(context, fragment.getInitializer());
-              if (values != null) {
-                return new AbstractListModel() {
-                  private static final long serialVersionUID = 0L;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IExpressionEvaluator
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public Object evaluate(EvaluationContext context,
+			Expression expression,
+			ITypeBinding typeBinding,
+			String typeQualifiedName) throws Exception {
+		// check for anonymous AbstractListModel
+		if (expression instanceof ClassInstanceCreation) {
+			ClassInstanceCreation creation = (ClassInstanceCreation) expression;
+			if (creation.getAnonymousClassDeclaration() != null
+					&& AstNodeUtils.isSuccessorOf(expression, AbstractListModel.class)) {
+				AnonymousClassDeclaration declaration = creation.getAnonymousClassDeclaration();
+				List<BodyDeclaration> declarations = DomGenerics.bodyDeclarations(declaration);
+				for (BodyDeclaration bodyDeclaration : declarations) {
+					if (bodyDeclaration instanceof FieldDeclaration) {
+						FieldDeclaration fieldDeclaration = (FieldDeclaration) bodyDeclaration;
+						VariableDeclaration fragment = DomGenerics.fragments(fieldDeclaration).get(0);
+						Type fieldType = fieldDeclaration.getType();
+						String fieldTypeName = AstNodeUtils.getFullyQualifiedName(fieldType, false);
+						if (fieldTypeName.equals("java.lang.String[]")) {
+							final String[] values =
+									(String[]) AstEvaluationEngine.evaluate(context, fragment.getInitializer());
+							if (values != null) {
+								return new AbstractListModel() {
+									private static final long serialVersionUID = 0L;
 
-                  public int getSize() {
-                    return values.length;
-                  }
+									public int getSize() {
+										return values.length;
+									}
 
-                  public Object getElementAt(int index) {
-                    return values[index];
-                  }
-                };
-              }
-            }
-          }
-        }
-      }
-    }
-    // we don't understand given expression
-    return AstEvaluationEngine.UNKNOWN;
-  }
+									public Object getElementAt(int index) {
+										return values[index];
+									}
+								};
+							}
+						}
+					}
+				}
+			}
+		}
+		// we don't understand given expression
+		return AstEvaluationEngine.UNKNOWN;
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/models/list/ListModelPropertyEditor.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/models/list/ListModelPropertyEditor.java
index a50b6c163..898815a43 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/models/list/ListModelPropertyEditor.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/models/list/ListModelPropertyEditor.java
@@ -39,110 +39,110 @@
  * @coverage swing.property.editor
  */
 public final class ListModelPropertyEditor extends TextDialogPropertyEditor {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final PropertyEditor INSTANCE = new ListModelPropertyEditor();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final PropertyEditor INSTANCE = new ListModelPropertyEditor();
 
-  private ListModelPropertyEditor() {
-  }
+	private ListModelPropertyEditor() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getText(Property property) throws Exception {
-    String[] items = getItems(property);
-    return "[" + StringUtils.join(items, ", ") + "]";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getText(Property property) throws Exception {
+		String[] items = getItems(property);
+		return "[" + StringUtils.join(items, ", ") + "]";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void openDialog(Property property) throws Exception {
-    StringsDialog itemsDialog =
-        new StringsDialog(DesignerPlugin.getShell(),
-            Activator.getDefault(),
-            property.getTitle(),
-            ModelMessages.ListModelPropertyEditor_itemsDialogTitle,
-            ModelMessages.ListModelPropertyEditor_itemsDialogMessage);
-    itemsDialog.setItems(getItems(property));
-    // open dialog
-    if (itemsDialog.open() == Window.OK) {
-      String[] items = itemsDialog.getItems();
-      setItems(property, items);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void openDialog(Property property) throws Exception {
+		StringsDialog itemsDialog =
+				new StringsDialog(DesignerPlugin.getShell(),
+						Activator.getDefault(),
+						property.getTitle(),
+						ModelMessages.ListModelPropertyEditor_itemsDialogTitle,
+						ModelMessages.ListModelPropertyEditor_itemsDialogMessage);
+		itemsDialog.setItems(getItems(property));
+		// open dialog
+		if (itemsDialog.open() == Window.OK) {
+			String[] items = itemsDialog.getItems();
+			setItems(property, items);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the items specified in value of given {@link Property}.
-   */
-  public static String[] getItems(Property property) throws Exception {
-    Object value = property.getValue();
-    if (value instanceof ListModel) {
-      List<String> items = Lists.newArrayList();
-      ListModel model = (ListModel) value;
-      for (int i = 0; i < model.getSize(); i++) {
-        Object element = model.getElementAt(i);
-        if (element instanceof String) {
-          items.add((String) element);
-        }
-      }
-      return items.toArray(new String[items.size()]);
-    }
-    // no items
-    return ArrayUtils.EMPTY_STRING_ARRAY;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the items specified in value of given {@link Property}.
+	 */
+	public static String[] getItems(Property property) throws Exception {
+		Object value = property.getValue();
+		if (value instanceof ListModel) {
+			List<String> items = Lists.newArrayList();
+			ListModel model = (ListModel) value;
+			for (int i = 0; i < model.getSize(); i++) {
+				Object element = model.getElementAt(i);
+				if (element instanceof String) {
+					items.add((String) element);
+				}
+			}
+			return items.toArray(new String[items.size()]);
+		}
+		// no items
+		return ArrayUtils.EMPTY_STRING_ARRAY;
+	}
 
-  /**
-   * Sets the items for given {@link ListModel} {@link Property}.
-   */
-  public static void setItems(Property property, String[] items) throws Exception {
-    if (property instanceof GenericProperty) {
-      GenericProperty genericProperty = (GenericProperty) property;
-      JavaInfo javaInfo = genericProperty.getJavaInfo();
-      // prepare source lines
-      String[] lines =
-          new String[]{
-              "new javax.swing.AbstractListModel() {",
-              "\tString[] values = new String[] {",
-              "\tpublic int getSize() {",
-              "\t\treturn values.length;",
-              "\t}",
-              "\tpublic Object getElementAt(int index) {",
-              "\t\treturn values[index];",
-              "\t}",
-              "}",};
-      // append items
-      {
-        String valuesLine = lines[1];
-        //
-        for (int i = 0; i < items.length; i++) {
-          String item = items[i];
-          if (i != 0) {
-            valuesLine += ", ";
-          }
-          valuesLine += StringConverter.INSTANCE.toJavaSource(javaInfo, item);
-        }
-        // close items
-        valuesLine += "};";
-        lines[1] = valuesLine;
-      }
-      // set source as single String
-      String source = StringUtils.join(lines, "\n");
-      genericProperty.setExpression(source, Property.UNKNOWN_VALUE);
-    }
-  }
+	/**
+	 * Sets the items for given {@link ListModel} {@link Property}.
+	 */
+	public static void setItems(Property property, String[] items) throws Exception {
+		if (property instanceof GenericProperty) {
+			GenericProperty genericProperty = (GenericProperty) property;
+			JavaInfo javaInfo = genericProperty.getJavaInfo();
+			// prepare source lines
+			String[] lines =
+					new String[]{
+							"new javax.swing.AbstractListModel() {",
+							"\tString[] values = new String[] {",
+							"\tpublic int getSize() {",
+							"\t\treturn values.length;",
+							"\t}",
+							"\tpublic Object getElementAt(int index) {",
+							"\t\treturn values[index];",
+							"\t}",
+							"}",};
+			// append items
+			{
+				String valuesLine = lines[1];
+				//
+				for (int i = 0; i < items.length; i++) {
+					String item = items[i];
+					if (i != 0) {
+						valuesLine += ", ";
+					}
+					valuesLine += StringConverter.INSTANCE.toJavaSource(javaInfo, item);
+				}
+				// close items
+				valuesLine += "};";
+				lines[1] = valuesLine;
+			}
+			// set source as single String
+			String source = StringUtils.join(lines, "\n");
+			genericProperty.setExpression(source, Property.UNKNOWN_VALUE);
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/models/spinner/AbstractSpinnerComposite.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/models/spinner/AbstractSpinnerComposite.java
index c87a6ed4e..8ba9ff8a6 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/models/spinner/AbstractSpinnerComposite.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/models/spinner/AbstractSpinnerComposite.java
@@ -23,48 +23,48 @@
  * @coverage swing.property.editor
  */
 abstract class AbstractSpinnerComposite extends Composite {
-  protected final SpinnerModelDialog m_modelDialog;
+	protected final SpinnerModelDialog m_modelDialog;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractSpinnerComposite(Composite parent, SpinnerModelDialog modelDialog) {
-    super(parent, SWT.NONE);
-    m_modelDialog = modelDialog;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractSpinnerComposite(Composite parent, SpinnerModelDialog modelDialog) {
+		super(parent, SWT.NONE);
+		m_modelDialog = modelDialog;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the title to display.
-   */
-  public abstract String getTitle();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the title to display.
+	 */
+	public abstract String getTitle();
 
-  /**
-   * Sets the {@link SpinnerModel} to display/edit.
-   *
-   * @return <code>true</code> if this {@link AbstractSpinnerComposite} understands given model.
-   */
-  public abstract boolean setModel(SpinnerModel model);
+	/**
+	 * Sets the {@link SpinnerModel} to display/edit.
+	 *
+	 * @return <code>true</code> if this {@link AbstractSpinnerComposite} understands given model.
+	 */
+	public abstract boolean setModel(SpinnerModel model);
 
-  /**
-   * @return the error message, or <code>null</code> if model configured correctly.
-   */
-  public abstract String validate();
+	/**
+	 * @return the error message, or <code>null</code> if model configured correctly.
+	 */
+	public abstract String validate();
 
-  /**
-   * @return the {@link SpinnerModel} that corresponds to this {@link AbstractSpinnerComposite} and
-   *         configuration. This {@link SpinnerModel} is used later for preview in {@link JSpinner}.
-   */
-  public abstract SpinnerModel getModel();
+	/**
+	 * @return the {@link SpinnerModel} that corresponds to this {@link AbstractSpinnerComposite} and
+	 *         configuration. This {@link SpinnerModel} is used later for preview in {@link JSpinner}.
+	 */
+	public abstract SpinnerModel getModel();
 
-  /**
-   * @return the source to apply.
-   */
-  public abstract String getSource() throws Exception;
+	/**
+	 * @return the source to apply.
+	 */
+	public abstract String getSource() throws Exception;
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/models/spinner/DateSpinnerComposite.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/models/spinner/DateSpinnerComposite.java
index c209455df..0c620e8ae 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/models/spinner/DateSpinnerComposite.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/models/spinner/DateSpinnerComposite.java
@@ -42,265 +42,265 @@
  * @coverage swing.property.editor
  */
 final class DateSpinnerComposite extends AbstractSpinnerComposite {
-  private static final String[] CALENDAR_FIELDS = {
-      "MILLISECOND",
-      "SECOND",
-      "MINUTE",
-      "HOUR_OF_DAY",
-      "HOUR",
-      "AM_PM",
-      "DAY_OF_WEEK_IN_MONTH",
-      "DAY_OF_WEEK",
-      "DAY_OF_YEAR",
-      "DAY_OF_MONTH",
-      "WEEK_OF_MONTH",
-      "WEEK_OF_YEAR",
-      "MONTH",
-      "YEAR",
-      "ERA",
-      "ZONE_OFFSET",
-      "DST_OFFSET"};
-  private static final int DEFAULT_CALENDAR_FIELD = 8;
-  private final Button m_minButton;
-  private final Button m_maxButton;
-  private final CDateTime m_valueField;
-  private final CDateTime m_minField;
-  private final CDateTime m_maxField;
-  private final Combo m_stepCombo;
+	private static final String[] CALENDAR_FIELDS = {
+			"MILLISECOND",
+			"SECOND",
+			"MINUTE",
+			"HOUR_OF_DAY",
+			"HOUR",
+			"AM_PM",
+			"DAY_OF_WEEK_IN_MONTH",
+			"DAY_OF_WEEK",
+			"DAY_OF_YEAR",
+			"DAY_OF_MONTH",
+			"WEEK_OF_MONTH",
+			"WEEK_OF_YEAR",
+			"MONTH",
+			"YEAR",
+			"ERA",
+			"ZONE_OFFSET",
+	"DST_OFFSET"};
+	private static final int DEFAULT_CALENDAR_FIELD = 8;
+	private final Button m_minButton;
+	private final Button m_maxButton;
+	private final CDateTime m_valueField;
+	private final CDateTime m_minField;
+	private final CDateTime m_maxField;
+	private final Combo m_stepCombo;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DateSpinnerComposite(Composite parent, SpinnerModelDialog modelDialog) {
-    super(parent, modelDialog);
-    GridLayoutFactory.create(this).columns(2);
-    // value
-    {
-      createLabel(ModelMessages.DateSpinnerComposite_initialValue);
-      m_valueField = createDateTime();
-    }
-    // minimum
-    {
-      m_minButton = createCheck(ModelMessages.DateSpinnerComposite_start);
-      m_minField = createDateTime();
-      trackCheckField(m_minButton, m_minField);
-    }
-    // maximum
-    {
-      m_maxButton = createCheck(ModelMessages.DateSpinnerComposite_end);
-      m_maxField = createDateTime();
-      trackCheckField(m_maxButton, m_maxField);
-    }
-    // step
-    {
-      createLabel(ModelMessages.DateSpinnerComposite_numberType);
-      m_stepCombo = new Combo(this, SWT.READ_ONLY);
-      GridDataFactory.create(m_stepCombo).grabH().fillH();
-      // add items
-      for (String field : CALENDAR_FIELDS) {
-        m_stepCombo.add(field);
-      }
-      m_stepCombo.select(DEFAULT_CALENDAR_FIELD);
-      UiUtils.setVisibleItemCount(m_stepCombo, m_stepCombo.getItemCount());
-      // add listener
-      m_stepCombo.addListener(SWT.Selection, m_validateListener);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DateSpinnerComposite(Composite parent, SpinnerModelDialog modelDialog) {
+		super(parent, modelDialog);
+		GridLayoutFactory.create(this).columns(2);
+		// value
+		{
+			createLabel(ModelMessages.DateSpinnerComposite_initialValue);
+			m_valueField = createDateTime();
+		}
+		// minimum
+		{
+			m_minButton = createCheck(ModelMessages.DateSpinnerComposite_start);
+			m_minField = createDateTime();
+			trackCheckField(m_minButton, m_minField);
+		}
+		// maximum
+		{
+			m_maxButton = createCheck(ModelMessages.DateSpinnerComposite_end);
+			m_maxField = createDateTime();
+			trackCheckField(m_maxButton, m_maxField);
+		}
+		// step
+		{
+			createLabel(ModelMessages.DateSpinnerComposite_numberType);
+			m_stepCombo = new Combo(this, SWT.READ_ONLY);
+			GridDataFactory.create(m_stepCombo).grabH().fillH();
+			// add items
+			for (String field : CALENDAR_FIELDS) {
+				m_stepCombo.add(field);
+			}
+			m_stepCombo.select(DEFAULT_CALENDAR_FIELD);
+			UiUtils.setVisibleItemCount(m_stepCombo, m_stepCombo.getItemCount());
+			// add listener
+			m_stepCombo.addListener(SWT.Selection, m_validateListener);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * {@link Listener} that performs validation of host {@link SpinnerModelDialog}.
-   */
-  private final Listener m_validateListener = new Listener() {
-    public void handleEvent(Event event) {
-      m_modelDialog.validateAll();
-    }
-  };
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * {@link Listener} that performs validation of host {@link SpinnerModelDialog}.
+	 */
+	private final Listener m_validateListener = new Listener() {
+		public void handleEvent(Event event) {
+			m_modelDialog.validateAll();
+		}
+	};
 
-  /**
-   * Creates {@link Label}, configured for column <code>1</code>.
-   */
-  private void createLabel(String text) {
-    Label label = new Label(this, SWT.NONE);
-    SpinnerModelDialog.configureColumn_1(label);
-    label.setText(text);
-  }
+	/**
+	 * Creates {@link Label}, configured for column <code>1</code>.
+	 */
+	private void createLabel(String text) {
+		Label label = new Label(this, SWT.NONE);
+		SpinnerModelDialog.configureColumn_1(label);
+		label.setText(text);
+	}
 
-  /**
-   * Creates check {@link Button}, configured for column <code>1</code>.
-   */
-  private Button createCheck(String text) {
-    Button button = new Button(this, SWT.CHECK);
-    SpinnerModelDialog.configureColumn_1(button);
-    button.setText(text);
-    return button;
-  }
+	/**
+	 * Creates check {@link Button}, configured for column <code>1</code>.
+	 */
+	private Button createCheck(String text) {
+		Button button = new Button(this, SWT.CHECK);
+		SpinnerModelDialog.configureColumn_1(button);
+		button.setText(text);
+		return button;
+	}
 
-  /**
-   * Enables/disables given {@link CDateTime} on check {@link Button} enable/disable.
-   */
-  private void trackCheckField(final Button check, final CDateTime field) {
-    check.addListener(SWT.Selection, new Listener() {
-      public void handleEvent(Event event) {
-        if (check.getSelection()) {
-          field.setEnabled(true);
-          if (check.getSelection() && field.getSelection() == null) {
-            field.setSelection(m_valueField.getSelection());
-          }
-        } else {
-          field.setEnabled(false);
-        }
-        m_modelDialog.validateAll();
-      }
-    });
-  }
+	/**
+	 * Enables/disables given {@link CDateTime} on check {@link Button} enable/disable.
+	 */
+	private void trackCheckField(final Button check, final CDateTime field) {
+		check.addListener(SWT.Selection, new Listener() {
+			public void handleEvent(Event event) {
+				if (check.getSelection()) {
+					field.setEnabled(true);
+					if (check.getSelection() && field.getSelection() == null) {
+						field.setSelection(m_valueField.getSelection());
+					}
+				} else {
+					field.setEnabled(false);
+				}
+				m_modelDialog.validateAll();
+			}
+		});
+	}
 
-  /**
-   * Checks/enables check {@link Button} and {@link CDateTime}.
-   */
-  private static void updateCheckField(Button check, CDateTime field, boolean checked) {
-    check.setSelection(checked);
-    field.setEnabled(checked);
-  }
+	/**
+	 * Checks/enables check {@link Button} and {@link CDateTime}.
+	 */
+	private static void updateCheckField(Button check, CDateTime field, boolean checked) {
+		check.setSelection(checked);
+		field.setEnabled(checked);
+	}
 
-  /**
-   * @return new {@link CDateTime}.
-   */
-  private CDateTime createDateTime() {
-    CDateTime field =
-        new CDateTime(this, CDT.BORDER
-            | CDT.TEXT_RIGHT
-            | CDT.SPINNER
-            | CDT.DATE_MEDIUM
-            | CDT.TIME_MEDIUM);
-    GridDataFactory.create(field).grabH().fillH();
-    field.addListener(SWT.Selection, m_validateListener);
-    return field;
-  }
+	/**
+	 * @return new {@link CDateTime}.
+	 */
+	private CDateTime createDateTime() {
+		CDateTime field =
+				new CDateTime(this, CDT.BORDER
+						| CDT.TEXT_RIGHT
+						| CDT.SPINNER
+						| CDT.DATE_MEDIUM
+						| CDT.TIME_MEDIUM);
+		GridDataFactory.create(field).grabH().fillH();
+		field.addListener(SWT.Selection, m_validateListener);
+		return field;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getTitle() {
-    return ModelMessages.DateSpinnerComposite_title;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getTitle() {
+		return ModelMessages.DateSpinnerComposite_title;
+	}
 
-  @Override
-  public boolean setModel(SpinnerModel model) {
-    if (model instanceof SpinnerDateModel) {
-      SpinnerDateModel dateModel = (SpinnerDateModel) model;
-      // values
-      setValue(m_valueField, dateModel.getValue());
-      setValue(m_minField, dateModel.getStart());
-      setValue(m_maxField, dateModel.getEnd());
-      // step
-      for (int i = 0; i < CALENDAR_FIELDS.length; i++) {
-        String field = CALENDAR_FIELDS[i];
-        if (ReflectionUtils.getFieldInt(Calendar.class, field) == dateModel.getCalendarField()) {
-          m_stepCombo.select(i);
-          break;
-        }
-      }
-      // enable/disable min/max fields
-      updateCheckField(m_minButton, m_minField, dateModel.getStart() != null);
-      updateCheckField(m_maxButton, m_maxField, dateModel.getEnd() != null);
-      // OK, this is our model
-      return true;
-    } else {
-      // values
-      m_valueField.setSelection(DEFAULT_DATE);
-      m_minField.setSelection(DEFAULT_DATE);
-      m_maxField.setSelection(DEFAULT_DATE);
-      // disable min/max fields
-      updateCheckField(m_minButton, m_minField, false);
-      updateCheckField(m_maxButton, m_maxField, false);
-      // no, we don't know this model
-      return false;
-    }
-  }
+	@Override
+	public boolean setModel(SpinnerModel model) {
+		if (model instanceof SpinnerDateModel) {
+			SpinnerDateModel dateModel = (SpinnerDateModel) model;
+			// values
+			setValue(m_valueField, dateModel.getValue());
+			setValue(m_minField, dateModel.getStart());
+			setValue(m_maxField, dateModel.getEnd());
+			// step
+			for (int i = 0; i < CALENDAR_FIELDS.length; i++) {
+				String field = CALENDAR_FIELDS[i];
+				if (ReflectionUtils.getFieldInt(Calendar.class, field) == dateModel.getCalendarField()) {
+					m_stepCombo.select(i);
+					break;
+				}
+			}
+			// enable/disable min/max fields
+			updateCheckField(m_minButton, m_minField, dateModel.getStart() != null);
+			updateCheckField(m_maxButton, m_maxField, dateModel.getEnd() != null);
+			// OK, this is our model
+			return true;
+		} else {
+			// values
+			m_valueField.setSelection(DEFAULT_DATE);
+			m_minField.setSelection(DEFAULT_DATE);
+			m_maxField.setSelection(DEFAULT_DATE);
+			// disable min/max fields
+			updateCheckField(m_minButton, m_minField, false);
+			updateCheckField(m_maxButton, m_maxField, false);
+			// no, we don't know this model
+			return false;
+		}
+	}
 
-  @Override
-  public String validate() {
-    Date value = m_valueField.getSelection();
-    Date minimum = m_minField.getSelection();
-    Date maximum = m_maxField.getSelection();
-    if (m_minButton.getSelection() && minimum.compareTo(value) > 0) {
-      return ModelMessages.DateSpinnerComposite_errMinValue;
-    }
-    if (m_maxButton.getSelection() && maximum.compareTo(value) < 0) {
-      return ModelMessages.DateSpinnerComposite_errMaxValue;
-    }
-    // OK
-    return null;
-  }
+	@Override
+	public String validate() {
+		Date value = m_valueField.getSelection();
+		Date minimum = m_minField.getSelection();
+		Date maximum = m_maxField.getSelection();
+		if (m_minButton.getSelection() && minimum.compareTo(value) > 0) {
+			return ModelMessages.DateSpinnerComposite_errMinValue;
+		}
+		if (m_maxButton.getSelection() && maximum.compareTo(value) < 0) {
+			return ModelMessages.DateSpinnerComposite_errMaxValue;
+		}
+		// OK
+		return null;
+	}
 
-  @Override
-  public SpinnerModel getModel() {
-    Date value = m_valueField.getSelection();
-    Date minimum = m_minButton.getSelection() ? m_minField.getSelection() : null;
-    Date maximum = m_maxButton.getSelection() ? m_maxField.getSelection() : null;
-    String stepField = CALENDAR_FIELDS[m_stepCombo.getSelectionIndex()];
-    int step = ReflectionUtils.getFieldInt(Calendar.class, stepField);
-    return new SpinnerDateModel(value, minimum, maximum, step);
-  }
+	@Override
+	public SpinnerModel getModel() {
+		Date value = m_valueField.getSelection();
+		Date minimum = m_minButton.getSelection() ? m_minField.getSelection() : null;
+		Date maximum = m_maxButton.getSelection() ? m_maxField.getSelection() : null;
+		String stepField = CALENDAR_FIELDS[m_stepCombo.getSelectionIndex()];
+		int step = ReflectionUtils.getFieldInt(Calendar.class, stepField);
+		return new SpinnerDateModel(value, minimum, maximum, step);
+	}
 
-  @Override
-  public String getSource() throws Exception {
-    String valueSource = getValueSource(m_valueField);
-    String minSource = m_minButton.getSelection() ? getValueSource(m_minField) : "null";
-    String maxSource = m_maxButton.getSelection() ? getValueSource(m_maxField) : "null";
-    //String stepSource = getValueSource(m_stepField);
-    String stepField = CALENDAR_FIELDS[m_stepCombo.getSelectionIndex()];
-    String stepSource = "java.util.Calendar." + stepField;
-    return "new javax.swing.SpinnerDateModel("
-        + valueSource
-        + ", "
-        + minSource
-        + ", "
-        + maxSource
-        + ", "
-        + stepSource
-        + ")";
-  }
+	@Override
+	public String getSource() throws Exception {
+		String valueSource = getValueSource(m_valueField);
+		String minSource = m_minButton.getSelection() ? getValueSource(m_minField) : "null";
+		String maxSource = m_maxButton.getSelection() ? getValueSource(m_maxField) : "null";
+		//String stepSource = getValueSource(m_stepField);
+		String stepField = CALENDAR_FIELDS[m_stepCombo.getSelectionIndex()];
+		String stepSource = "java.util.Calendar." + stepField;
+		return "new javax.swing.SpinnerDateModel("
+		+ valueSource
+		+ ", "
+		+ minSource
+		+ ", "
+		+ maxSource
+		+ ", "
+		+ stepSource
+		+ ")";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IntegerField utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final Date DEFAULT_DATE = DateUtils.truncate(new Date(), Calendar.DAY_OF_MONTH);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IntegerField utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final Date DEFAULT_DATE = DateUtils.truncate(new Date(), Calendar.DAY_OF_MONTH);
 
-  /**
-   * Sets {@link Date} value for {@link CDateTime}.
-   */
-  private static void setValue(CDateTime field, Object value) {
-    if (value instanceof Date) {
-      field.setSelection((Date) value);
-    } else {
-      field.setSelection(null);
-    }
-  }
+	/**
+	 * Sets {@link Date} value for {@link CDateTime}.
+	 */
+	private static void setValue(CDateTime field, Object value) {
+		if (value instanceof Date) {
+			field.setSelection((Date) value);
+		} else {
+			field.setSelection(null);
+		}
+	}
 
-  /**
-   * @return the source for value from {@link CSpinner}.
-   */
-  private String getValueSource(CDateTime field) {
-    long milliseconds;
-    {
-      Calendar calendar = Calendar.getInstance();
-      calendar.setTime(field.getSelection());
-      milliseconds = calendar.getTimeInMillis();
-    }
-    // OK, return source
-    return "new java.util.Date(" + milliseconds + "L)";
-  }
+	/**
+	 * @return the source for value from {@link CSpinner}.
+	 */
+	private String getValueSource(CDateTime field) {
+		long milliseconds;
+		{
+			Calendar calendar = Calendar.getInstance();
+			calendar.setTime(field.getSelection());
+			milliseconds = calendar.getTimeInMillis();
+		}
+		// OK, return source
+		return "new java.util.Date(" + milliseconds + "L)";
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/models/spinner/ListSpinnerComposite.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/models/spinner/ListSpinnerComposite.java
index 7172d2ae0..5f8c70750 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/models/spinner/ListSpinnerComposite.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/models/spinner/ListSpinnerComposite.java
@@ -34,82 +34,82 @@
  * @coverage swing.property.editor
  */
 final class ListSpinnerComposite extends AbstractSpinnerComposite {
-  private final Text m_textWidget;
+	private final Text m_textWidget;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ListSpinnerComposite(Composite parent, SpinnerModelDialog modelDialog) {
-    super(parent, modelDialog);
-    GridLayoutFactory.create(this);
-    // Text with items
-    {
-      new Label(this, SWT.NONE).setText(ModelMessages.ListSpinnerComposite_itemsLabel);
-      {
-        m_textWidget = new Text(this, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
-        GridDataFactory.create(m_textWidget).spanH(2).grab().fill().hintC(50, 8);
-        // update preview on modify
-        m_textWidget.addListener(SWT.Modify, new Listener() {
-          public void handleEvent(Event event) {
-            m_modelDialog.validateAll();
-          }
-        });
-      }
-      new Label(this, SWT.NONE).setText(ModelMessages.ListSpinnerComposite_hint);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ListSpinnerComposite(Composite parent, SpinnerModelDialog modelDialog) {
+		super(parent, modelDialog);
+		GridLayoutFactory.create(this);
+		// Text with items
+		{
+			new Label(this, SWT.NONE).setText(ModelMessages.ListSpinnerComposite_itemsLabel);
+			{
+				m_textWidget = new Text(this, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
+				GridDataFactory.create(m_textWidget).spanH(2).grab().fill().hintC(50, 8);
+				// update preview on modify
+				m_textWidget.addListener(SWT.Modify, new Listener() {
+					public void handleEvent(Event event) {
+						m_modelDialog.validateAll();
+					}
+				});
+			}
+			new Label(this, SWT.NONE).setText(ModelMessages.ListSpinnerComposite_hint);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getTitle() {
-    return ModelMessages.ListSpinnerComposite_title;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getTitle() {
+		return ModelMessages.ListSpinnerComposite_title;
+	}
 
-  @Override
-  public boolean setModel(SpinnerModel model) {
-    if (model instanceof SpinnerListModel) {
-      SpinnerListModel listModel = (SpinnerListModel) model;
-      String text = StringUtils.join(listModel.getList().iterator(), "\n");
-      m_textWidget.setText(text);
-      // OK, this is our model
-      return true;
-    }
-    return false;
-  }
+	@Override
+	public boolean setModel(SpinnerModel model) {
+		if (model instanceof SpinnerListModel) {
+			SpinnerListModel listModel = (SpinnerListModel) model;
+			String text = StringUtils.join(listModel.getList().iterator(), "\n");
+			m_textWidget.setText(text);
+			// OK, this is our model
+			return true;
+		}
+		return false;
+	}
 
-  @Override
-  public String validate() {
-    return null;
-  }
+	@Override
+	public String validate() {
+		return null;
+	}
 
-  @Override
-  public SpinnerModel getModel() {
-    String[] items = getItems();
-    return new SpinnerListModel(items);
-  }
+	@Override
+	public SpinnerModel getModel() {
+		String[] items = getItems();
+		return new SpinnerListModel(items);
+	}
 
-  @Override
-  public String getSource() throws Exception {
-    String[] items = getItems();
-    String itemsSource = StringArrayConverter.INSTANCE.toJavaSource(null, items);
-    return "new javax.swing.SpinnerListModel(" + itemsSource + ")";
-  }
+	@Override
+	public String getSource() throws Exception {
+		String[] items = getItems();
+		String itemsSource = StringArrayConverter.INSTANCE.toJavaSource(null, items);
+		return "new javax.swing.SpinnerListModel(" + itemsSource + ")";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the items entered by user into {@link #m_textWidget}.
-   */
-  private String[] getItems() {
-    return StringUtils.split(m_textWidget.getText(), "\r\n");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the items entered by user into {@link #m_textWidget}.
+	 */
+	private String[] getItems() {
+		return StringUtils.split(m_textWidget.getText(), "\r\n");
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/models/spinner/NumberSpinnerComposite.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/models/spinner/NumberSpinnerComposite.java
index ad0dce847..bb333fe37 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/models/spinner/NumberSpinnerComposite.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/models/spinner/NumberSpinnerComposite.java
@@ -35,308 +35,308 @@
  * @coverage swing.property.editor
  */
 final class NumberSpinnerComposite extends AbstractSpinnerComposite {
-  private final Combo m_typeCombo;
-  private final Button m_minButton;
-  private final Button m_maxButton;
-  private final CSpinner m_valueField;
-  private final CSpinner m_minField;
-  private final CSpinner m_maxField;
-  private final CSpinner m_stepField;
+	private final Combo m_typeCombo;
+	private final Button m_minButton;
+	private final Button m_maxButton;
+	private final CSpinner m_valueField;
+	private final CSpinner m_minField;
+	private final CSpinner m_maxField;
+	private final CSpinner m_stepField;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public NumberSpinnerComposite(Composite parent, SpinnerModelDialog modelDialog) {
-    super(parent, modelDialog);
-    GridLayoutFactory.create(this).columns(2);
-    // type
-    {
-      createLabel(ModelMessages.NumberSpinnerComposite_numberType);
-      m_typeCombo = new Combo(this, SWT.READ_ONLY);
-      GridDataFactory.create(m_typeCombo).grabH().fillH();
-      for (NumberTypeDescription typeDescription : NumberTypeDescription.values()) {
-        m_typeCombo.add(typeDescription.getTitle());
-      }
-      UiUtils.setVisibleItemCount(m_typeCombo, m_typeCombo.getItemCount());
-      m_typeCombo.addListener(SWT.Selection, m_validateListener);
-    }
-    // value
-    {
-      createLabel(ModelMessages.NumberSpinnerComposite_initialValue);
-      m_valueField = createSpinner();
-    }
-    // minimum
-    {
-      m_minButton = createCheck(ModelMessages.NumberSpinnerComposite_minimum);
-      m_minField = createSpinner();
-      trackCheckSpinner(m_minButton, m_minField);
-    }
-    // maximum
-    {
-      m_maxButton = createCheck(ModelMessages.NumberSpinnerComposite_maximum);
-      m_maxField = createSpinner();
-      trackCheckSpinner(m_maxButton, m_maxField);
-    }
-    // step
-    {
-      createLabel(ModelMessages.NumberSpinnerComposite_stepSize);
-      m_stepField = createSpinner();
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public NumberSpinnerComposite(Composite parent, SpinnerModelDialog modelDialog) {
+		super(parent, modelDialog);
+		GridLayoutFactory.create(this).columns(2);
+		// type
+		{
+			createLabel(ModelMessages.NumberSpinnerComposite_numberType);
+			m_typeCombo = new Combo(this, SWT.READ_ONLY);
+			GridDataFactory.create(m_typeCombo).grabH().fillH();
+			for (NumberTypeDescription typeDescription : NumberTypeDescription.values()) {
+				m_typeCombo.add(typeDescription.getTitle());
+			}
+			UiUtils.setVisibleItemCount(m_typeCombo, m_typeCombo.getItemCount());
+			m_typeCombo.addListener(SWT.Selection, m_validateListener);
+		}
+		// value
+		{
+			createLabel(ModelMessages.NumberSpinnerComposite_initialValue);
+			m_valueField = createSpinner();
+		}
+		// minimum
+		{
+			m_minButton = createCheck(ModelMessages.NumberSpinnerComposite_minimum);
+			m_minField = createSpinner();
+			trackCheckSpinner(m_minButton, m_minField);
+		}
+		// maximum
+		{
+			m_maxButton = createCheck(ModelMessages.NumberSpinnerComposite_maximum);
+			m_maxField = createSpinner();
+			trackCheckSpinner(m_maxButton, m_maxField);
+		}
+		// step
+		{
+			createLabel(ModelMessages.NumberSpinnerComposite_stepSize);
+			m_stepField = createSpinner();
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * {@link Listener} that performs validation of host {@link SpinnerModelDialog}.
-   */
-  private final Listener m_validateListener = new Listener() {
-    public void handleEvent(Event event) {
-      m_modelDialog.validateAll();
-    }
-  };
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * {@link Listener} that performs validation of host {@link SpinnerModelDialog}.
+	 */
+	private final Listener m_validateListener = new Listener() {
+		public void handleEvent(Event event) {
+			m_modelDialog.validateAll();
+		}
+	};
 
-  /**
-   * Creates {@link Label}, configured for column <code>1</code>.
-   */
-  private void createLabel(String text) {
-    Label label = new Label(this, SWT.NONE);
-    SpinnerModelDialog.configureColumn_1(label);
-    label.setText(text);
-  }
+	/**
+	 * Creates {@link Label}, configured for column <code>1</code>.
+	 */
+	private void createLabel(String text) {
+		Label label = new Label(this, SWT.NONE);
+		SpinnerModelDialog.configureColumn_1(label);
+		label.setText(text);
+	}
 
-  /**
-   * Creates check {@link Button}, configured for column <code>1</code>.
-   */
-  private Button createCheck(String text) {
-    Button button = new Button(this, SWT.CHECK);
-    SpinnerModelDialog.configureColumn_1(button);
-    button.setText(text);
-    return button;
-  }
+	/**
+	 * Creates check {@link Button}, configured for column <code>1</code>.
+	 */
+	private Button createCheck(String text) {
+		Button button = new Button(this, SWT.CHECK);
+		SpinnerModelDialog.configureColumn_1(button);
+		button.setText(text);
+		return button;
+	}
 
-  /**
-   * Enables/disables given {@link CSpinner} on check {@link Button} enable/disable.
-   */
-  private static void trackCheckSpinner(final Button check, final CSpinner spinner) {
-    check.addListener(SWT.Selection, new Listener() {
-      public void handleEvent(Event event) {
-        spinner.setEnabled(check.getSelection());
-      }
-    });
-  }
+	/**
+	 * Enables/disables given {@link CSpinner} on check {@link Button} enable/disable.
+	 */
+	private static void trackCheckSpinner(final Button check, final CSpinner spinner) {
+		check.addListener(SWT.Selection, new Listener() {
+			public void handleEvent(Event event) {
+				spinner.setEnabled(check.getSelection());
+			}
+		});
+	}
 
-  /**
-   * Checks/enables check {@link Button} and {@link CSpinner}.
-   */
-  private static void updateCheckSpinner(Button check, CSpinner spinner, boolean checked) {
-    check.setSelection(checked);
-    spinner.setEnabled(checked);
-  }
+	/**
+	 * Checks/enables check {@link Button} and {@link CSpinner}.
+	 */
+	private static void updateCheckSpinner(Button check, CSpinner spinner, boolean checked) {
+		check.setSelection(checked);
+		spinner.setEnabled(checked);
+	}
 
-  /**
-   * @return new {@link CSpinner}.
-   */
-  private CSpinner createSpinner() {
-    CSpinner spinner = new CSpinner(this, SWT.BORDER);
-    GridDataFactory.create(spinner).grabH().fillH();
-    // configure range
-    spinner.setMinimum(Integer.MIN_VALUE);
-    spinner.setMaximum(Integer.MAX_VALUE);
-    // add listener
-    spinner.addListener(SWT.Selection, m_validateListener);
-    return spinner;
-  }
+	/**
+	 * @return new {@link CSpinner}.
+	 */
+	private CSpinner createSpinner() {
+		CSpinner spinner = new CSpinner(this, SWT.BORDER);
+		GridDataFactory.create(spinner).grabH().fillH();
+		// configure range
+		spinner.setMinimum(Integer.MIN_VALUE);
+		spinner.setMaximum(Integer.MAX_VALUE);
+		// add listener
+		spinner.addListener(SWT.Selection, m_validateListener);
+		return spinner;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getTitle() {
-    return ModelMessages.NumberSpinnerComposite_title;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getTitle() {
+		return ModelMessages.NumberSpinnerComposite_title;
+	}
 
-  @Override
-  public boolean setModel(SpinnerModel model) {
-    if (model instanceof SpinnerNumberModel) {
-      SpinnerNumberModel numberModel = (SpinnerNumberModel) model;
-      // type
-      NumberTypeDescription[] values = NumberTypeDescription.values();
-      for (int i = 0; i < values.length; i++) {
-        NumberTypeDescription typeDescription = values[i];
-        if (typeDescription.getType() == numberModel.getValue().getClass()) {
-          m_typeCombo.select(i);
-        }
-      }
-      // values
-      setValue(m_valueField, numberModel.getValue());
-      setValue(m_minField, numberModel.getMinimum());
-      setValue(m_maxField, numberModel.getMaximum());
-      setValue(m_stepField, numberModel.getStepSize());
-      // enable/disable min/max fields
-      updateCheckSpinner(m_minButton, m_minField, numberModel.getMinimum() != null);
-      updateCheckSpinner(m_maxButton, m_maxField, numberModel.getMaximum() != null);
-      // OK, this is our model
-      return true;
-    }
-    return false;
-  }
+	@Override
+	public boolean setModel(SpinnerModel model) {
+		if (model instanceof SpinnerNumberModel) {
+			SpinnerNumberModel numberModel = (SpinnerNumberModel) model;
+			// type
+			NumberTypeDescription[] values = NumberTypeDescription.values();
+			for (int i = 0; i < values.length; i++) {
+				NumberTypeDescription typeDescription = values[i];
+				if (typeDescription.getType() == numberModel.getValue().getClass()) {
+					m_typeCombo.select(i);
+				}
+			}
+			// values
+			setValue(m_valueField, numberModel.getValue());
+			setValue(m_minField, numberModel.getMinimum());
+			setValue(m_maxField, numberModel.getMaximum());
+			setValue(m_stepField, numberModel.getStepSize());
+			// enable/disable min/max fields
+			updateCheckSpinner(m_minButton, m_minField, numberModel.getMinimum() != null);
+			updateCheckSpinner(m_maxButton, m_maxField, numberModel.getMaximum() != null);
+			// OK, this is our model
+			return true;
+		}
+		return false;
+	}
 
-  @Override
-  public String validate() {
-    if (m_minButton.getSelection() && m_minField.getSelection() > m_valueField.getSelection()) {
-      return ModelMessages.NumberSpinnerComposite_minValue;
-    }
-    if (m_maxButton.getSelection() && m_maxField.getSelection() < m_valueField.getSelection()) {
-      return ModelMessages.NumberSpinnerComposite_maxValue;
-    }
-    return null;
-  }
+	@Override
+	public String validate() {
+		if (m_minButton.getSelection() && m_minField.getSelection() > m_valueField.getSelection()) {
+			return ModelMessages.NumberSpinnerComposite_minValue;
+		}
+		if (m_maxButton.getSelection() && m_maxField.getSelection() < m_valueField.getSelection()) {
+			return ModelMessages.NumberSpinnerComposite_maxValue;
+		}
+		return null;
+	}
 
-  @Override
-  public SpinnerModel getModel() {
-    int value = m_valueField.getSelection();
-    Integer minimum = m_minButton.getSelection() ? m_minField.getSelection() : null;
-    Integer maximum = m_maxButton.getSelection() ? m_maxField.getSelection() : null;
-    Number step = m_stepField.getSelection();
-    return new SpinnerNumberModel(value, minimum, maximum, step);
-  }
+	@Override
+	public SpinnerModel getModel() {
+		int value = m_valueField.getSelection();
+		Integer minimum = m_minButton.getSelection() ? m_minField.getSelection() : null;
+		Integer maximum = m_maxButton.getSelection() ? m_maxField.getSelection() : null;
+		Number step = m_stepField.getSelection();
+		return new SpinnerNumberModel(value, minimum, maximum, step);
+	}
 
-  @Override
-  public String getSource() throws Exception {
-    String valueSource = getValueSource(m_valueField);
-    String minSource = m_minButton.getSelection() ? getValueSource(m_minField) : "null";
-    String maxSource = m_maxButton.getSelection() ? getValueSource(m_maxField) : "null";
-    String stepSource = getValueSource(m_stepField);
-    return "new javax.swing.SpinnerNumberModel("
-        + valueSource
-        + ", "
-        + minSource
-        + ", "
-        + maxSource
-        + ", "
-        + stepSource
-        + ")";
-  }
+	@Override
+	public String getSource() throws Exception {
+		String valueSource = getValueSource(m_valueField);
+		String minSource = m_minButton.getSelection() ? getValueSource(m_minField) : "null";
+		String maxSource = m_maxButton.getSelection() ? getValueSource(m_maxField) : "null";
+		String stepSource = getValueSource(m_stepField);
+		return "new javax.swing.SpinnerNumberModel("
+		+ valueSource
+		+ ", "
+		+ minSource
+		+ ", "
+		+ maxSource
+		+ ", "
+		+ stepSource
+		+ ")";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IntegerField utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets integer value for {@link CSpinner}.
-   */
-  private static void setValue(CSpinner spinner, Object value) {
-    if (value instanceof Number) {
-      spinner.setSelection(((Number) value).intValue());
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IntegerField utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets integer value for {@link CSpinner}.
+	 */
+	private static void setValue(CSpinner spinner, Object value) {
+		if (value instanceof Number) {
+			spinner.setSelection(((Number) value).intValue());
+		}
+	}
 
-  /**
-   * @return the source for value from {@link CSpinner}.
-   */
-  private String getValueSource(CSpinner spinner) {
-    NumberTypeDescription typeDescription =
-        NumberTypeDescription.values()[m_typeCombo.getSelectionIndex()];
-    int value = spinner.getSelection();
-    if (m_maxButton.getSelection() && m_maxButton.getSelection()) {
-      return typeDescription.getSourceOptimized(value);
-    } else {
-      return typeDescription.getSource(value);
-    }
-  }
+	/**
+	 * @return the source for value from {@link CSpinner}.
+	 */
+	private String getValueSource(CSpinner spinner) {
+		NumberTypeDescription typeDescription =
+				NumberTypeDescription.values()[m_typeCombo.getSelectionIndex()];
+		int value = spinner.getSelection();
+		if (m_maxButton.getSelection() && m_maxButton.getSelection()) {
+			return typeDescription.getSourceOptimized(value);
+		} else {
+			return typeDescription.getSource(value);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // NumberTypeDescription
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Description for {@link Number} in {@link SpinnerNumberModel}.
-   */
-  private static enum NumberTypeDescription {
-    BYTE(Byte.class) {
-      @Override
-      public String getSource(int value) {
-        return "Byte.valueOf((byte) " + value + ")";
-      }
-    },
-    SHORT(Short.class) {
-      @Override
-      public String getSource(int value) {
-        return "Short.valueOf((short) " + value + ")";
-      }
-    },
-    INTEGER(Integer.class) {
-      @Override
-      public String getSourceOptimized(int value) {
-        return Integer.toString(value);
-      }
-    },
-    FLOAT(Float.class),
-    LONG(Long.class),
-    DOUBLE(Double.class) {
-      @Override
-      public String getSourceOptimized(int value) {
-        return Double.toString(value);
-      }
-    };
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// NumberTypeDescription
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Description for {@link Number} in {@link SpinnerNumberModel}.
+	 */
+	private static enum NumberTypeDescription {
+		BYTE(Byte.class) {
+			@Override
+			public String getSource(int value) {
+				return "Byte.valueOf((byte) " + value + ")";
+			}
+		},
+		SHORT(Short.class) {
+			@Override
+			public String getSource(int value) {
+				return "Short.valueOf((short) " + value + ")";
+			}
+		},
+		INTEGER(Integer.class) {
+			@Override
+			public String getSourceOptimized(int value) {
+				return Integer.toString(value);
+			}
+		},
+		FLOAT(Float.class),
+		LONG(Long.class),
+		DOUBLE(Double.class) {
+			@Override
+			public String getSourceOptimized(int value) {
+				return Double.toString(value);
+			}
+		};
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Instance fields
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    private final Class<?> m_type;
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Instance fields
+		//
+		////////////////////////////////////////////////////////////////////////////
+		private final Class<?> m_type;
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    private NumberTypeDescription(Class<?> type) {
-      m_type = type;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		private NumberTypeDescription(Class<?> type) {
+			m_type = type;
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Access
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    /**
-     * @return the type of this {@link NumberTypeDescription}.
-     */
-    public Class<?> getType() {
-      return m_type;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Access
+		//
+		////////////////////////////////////////////////////////////////////////////
+		/**
+		 * @return the type of this {@link NumberTypeDescription}.
+		 */
+		public Class<?> getType() {
+			return m_type;
+		}
 
-    /**
-     * @return the title of this {@link NumberTypeDescription}.
-     */
-    public final String getTitle() {
-      return CodeUtils.getShortClass(m_type.getName());
-    }
+		/**
+		 * @return the title of this {@link NumberTypeDescription}.
+		 */
+		public final String getTitle() {
+			return CodeUtils.getShortClass(m_type.getName());
+		}
 
-    /**
-     * @return the <code>new Type(value)</code> source.
-     */
-    public String getSource(int value) {
-      return m_type.getName() + ".valueOf(" + value + ")";
-    }
+		/**
+		 * @return the <code>new Type(value)</code> source.
+		 */
+		public String getSource(int value) {
+			return m_type.getName() + ".valueOf(" + value + ")";
+		}
 
-    /**
-     * @return usually same as {@link #getSource(int)}, but for <code>int</code> and
-     *         <code>double</code> returns optimized value.
-     */
-    public String getSourceOptimized(int value) {
-      return getSource(value);
-    }
-  }
+		/**
+		 * @return usually same as {@link #getSource(int)}, but for <code>int</code> and
+		 *         <code>double</code> returns optimized value.
+		 */
+		public String getSourceOptimized(int value) {
+			return getSource(value);
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/models/spinner/SpinnerModelDialog.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/models/spinner/SpinnerModelDialog.java
index 7315b1684..9c3ad850e 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/models/spinner/SpinnerModelDialog.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/models/spinner/SpinnerModelDialog.java
@@ -44,165 +44,165 @@
  * @coverage swing.property.editor
  */
 public final class SpinnerModelDialog extends AbstractValidationTitleAreaDialog {
-  private final SpinnerModel m_model;
-  private String m_source;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SpinnerModelDialog(Shell parentShell, String shellText, SpinnerModel model) {
-    super(parentShell,
-        Activator.getDefault(),
-        shellText,
-        ModelMessages.SpinnerModelDialog_title,
-        null,
-        ModelMessages.SpinnerModelDialog_message);
-    m_model = model;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the source of {@link SpinnerModel} that represents user selections.
-   */
-  public String getSource() {
-    return m_source;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final List<AbstractSpinnerComposite> m_composites = Lists.newArrayList();
-  private TabFolder m_tabFolder;
-  private JSpinner m_spinner;
-
-  //private Combo m_typeCombo;
-  @Override
-  protected void createControls(Composite container) {
-    GridLayoutFactory.create(container);
-    m_tabFolder = new TabFolder(container, SWT.NONE);
-    GridDataFactory.create(m_tabFolder).grab().fill();
-    // add composites
-    {
-      m_composites.add(new ListSpinnerComposite(m_tabFolder, this));
-      m_composites.add(new NumberSpinnerComposite(m_tabFolder, this));
-      m_composites.add(new DateSpinnerComposite(m_tabFolder, this));
-    }
-    // create tab for each spinner composite
-    for (AbstractSpinnerComposite composite : m_composites) {
-      // create tab
-      TabItem tabItem = new TabItem(m_tabFolder, SWT.NONE);
-      tabItem.setControl(composite);
-      tabItem.setText(composite.getTitle());
-      // select tab
-      if (composite.setModel(m_model)) {
-        m_tabFolder.setSelection(tabItem);
-      }
-    }
-    // preview
-    createPreviewComposite(container);
-  }
-
-  /**
-   * Creates {@link Composite} with {@link JSpinner} for preview.
-   */
-  private void createPreviewComposite(Composite parent) {
-    Group previewGroup = new Group(parent, SWT.NONE);
-    GridDataFactory.create(previewGroup).fill();
-    GridLayoutFactory.create(previewGroup).columns(2);
-    previewGroup.setText(ModelMessages.SpinnerModelDialog_preview);
-    // hint
-    {
-      Label label = new Label(previewGroup, SWT.NONE);
-      GridDataFactory.create(label).spanH(2);
-      label.setText(ModelMessages.SpinnerModelDialog_hint);
-    }
-    {
-      Label label = new Label(previewGroup, SWT.NONE);
-      configureColumn_1(label);
-      label.setText(ModelMessages.SpinnerModelDialog_test);
-    }
-    {
-      // two clicks needed to focus AWT component, see:
-      // http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6523306
-      EmbeddedSwingComposite2 spinnerComposite =
-          new EmbeddedSwingComposite2(previewGroup, SWT.NONE) {
-            @Override
-            protected JComponent createSwingComponent() {
-              m_spinner = new JSpinner();
-              return m_spinner;
-            }
-          };
-      spinnerComposite.populate();
-      GridDataFactory.create(spinnerComposite).grab().fill();
-    }
-  }
-
-  @Override
-  protected void okPressed() {
-    try {
-      AbstractSpinnerComposite spinnerComposite = getSelectedSpinnerComposite();
-      m_source = spinnerComposite.getSource();
-    } catch (Throwable e) {
-      DesignerPlugin.log(e);
-      return;
-    }
-    // close dialog
-    super.okPressed();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String validate() throws Exception {
-    AbstractSpinnerComposite spinnerComposite = getSelectedSpinnerComposite();
-    // validate
-    {
-      String message = spinnerComposite.validate();
-      if (message != null) {
-        m_spinner.setEnabled(false);
-        return message;
-      }
-    }
-    // configure spinner
-    {
-      m_spinner.setEnabled(true);
-      m_spinner.setModel(spinnerComposite.getModel());
-    }
-    // OK
-    return null;
-  }
-
-  /**
-   * @return the selected {@link AbstractSpinnerComposite}.
-   */
-  private AbstractSpinnerComposite getSelectedSpinnerComposite() {
-    int index = m_tabFolder.getSelectionIndex();
-    AbstractSpinnerComposite spinnerComposite = m_composites.get(index);
-    return spinnerComposite;
-  }
-
-  /**
-   * Sets the standard {@link GridData} for column <code>1</code> of {@link SpinnerModelDialog}.
-   */
-  static GridDataFactory configureColumn_1(Control control) {
-    return GridDataFactory.create(control).hintHC(15);
-  }
-
-  /**
-   * Sets the standard {@link GridData} for column <code>2</code> of {@link SpinnerModelDialog}.
-   */
-  static GridDataFactory configureColumn_2(Control control) {
-    return GridDataFactory.create(control).hintHC(20);
-  }
+	private final SpinnerModel m_model;
+	private String m_source;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SpinnerModelDialog(Shell parentShell, String shellText, SpinnerModel model) {
+		super(parentShell,
+				Activator.getDefault(),
+				shellText,
+				ModelMessages.SpinnerModelDialog_title,
+				null,
+				ModelMessages.SpinnerModelDialog_message);
+		m_model = model;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the source of {@link SpinnerModel} that represents user selections.
+	 */
+	public String getSource() {
+		return m_source;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final List<AbstractSpinnerComposite> m_composites = Lists.newArrayList();
+	private TabFolder m_tabFolder;
+	private JSpinner m_spinner;
+
+	//private Combo m_typeCombo;
+	@Override
+	protected void createControls(Composite container) {
+		GridLayoutFactory.create(container);
+		m_tabFolder = new TabFolder(container, SWT.NONE);
+		GridDataFactory.create(m_tabFolder).grab().fill();
+		// add composites
+		{
+			m_composites.add(new ListSpinnerComposite(m_tabFolder, this));
+			m_composites.add(new NumberSpinnerComposite(m_tabFolder, this));
+			m_composites.add(new DateSpinnerComposite(m_tabFolder, this));
+		}
+		// create tab for each spinner composite
+		for (AbstractSpinnerComposite composite : m_composites) {
+			// create tab
+			TabItem tabItem = new TabItem(m_tabFolder, SWT.NONE);
+			tabItem.setControl(composite);
+			tabItem.setText(composite.getTitle());
+			// select tab
+			if (composite.setModel(m_model)) {
+				m_tabFolder.setSelection(tabItem);
+			}
+		}
+		// preview
+		createPreviewComposite(container);
+	}
+
+	/**
+	 * Creates {@link Composite} with {@link JSpinner} for preview.
+	 */
+	private void createPreviewComposite(Composite parent) {
+		Group previewGroup = new Group(parent, SWT.NONE);
+		GridDataFactory.create(previewGroup).fill();
+		GridLayoutFactory.create(previewGroup).columns(2);
+		previewGroup.setText(ModelMessages.SpinnerModelDialog_preview);
+		// hint
+		{
+			Label label = new Label(previewGroup, SWT.NONE);
+			GridDataFactory.create(label).spanH(2);
+			label.setText(ModelMessages.SpinnerModelDialog_hint);
+		}
+		{
+			Label label = new Label(previewGroup, SWT.NONE);
+			configureColumn_1(label);
+			label.setText(ModelMessages.SpinnerModelDialog_test);
+		}
+		{
+			// two clicks needed to focus AWT component, see:
+			// http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6523306
+			EmbeddedSwingComposite2 spinnerComposite =
+					new EmbeddedSwingComposite2(previewGroup, SWT.NONE) {
+				@Override
+				protected JComponent createSwingComponent() {
+					m_spinner = new JSpinner();
+					return m_spinner;
+				}
+			};
+			spinnerComposite.populate();
+			GridDataFactory.create(spinnerComposite).grab().fill();
+		}
+	}
+
+	@Override
+	protected void okPressed() {
+		try {
+			AbstractSpinnerComposite spinnerComposite = getSelectedSpinnerComposite();
+			m_source = spinnerComposite.getSource();
+		} catch (Throwable e) {
+			DesignerPlugin.log(e);
+			return;
+		}
+		// close dialog
+		super.okPressed();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String validate() throws Exception {
+		AbstractSpinnerComposite spinnerComposite = getSelectedSpinnerComposite();
+		// validate
+		{
+			String message = spinnerComposite.validate();
+			if (message != null) {
+				m_spinner.setEnabled(false);
+				return message;
+			}
+		}
+		// configure spinner
+		{
+			m_spinner.setEnabled(true);
+			m_spinner.setModel(spinnerComposite.getModel());
+		}
+		// OK
+		return null;
+	}
+
+	/**
+	 * @return the selected {@link AbstractSpinnerComposite}.
+	 */
+	private AbstractSpinnerComposite getSelectedSpinnerComposite() {
+		int index = m_tabFolder.getSelectionIndex();
+		AbstractSpinnerComposite spinnerComposite = m_composites.get(index);
+		return spinnerComposite;
+	}
+
+	/**
+	 * Sets the standard {@link GridData} for column <code>1</code> of {@link SpinnerModelDialog}.
+	 */
+	static GridDataFactory configureColumn_1(Control control) {
+		return GridDataFactory.create(control).hintHC(15);
+	}
+
+	/**
+	 * Sets the standard {@link GridData} for column <code>2</code> of {@link SpinnerModelDialog}.
+	 */
+	static GridDataFactory configureColumn_2(Control control) {
+		return GridDataFactory.create(control).hintHC(20);
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/models/spinner/SpinnerModelPropertyEditor.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/models/spinner/SpinnerModelPropertyEditor.java
index f54044e2b..d1bab3be5 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/models/spinner/SpinnerModelPropertyEditor.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/models/spinner/SpinnerModelPropertyEditor.java
@@ -39,161 +39,161 @@
  * @coverage swing.property.editor
  */
 public final class SpinnerModelPropertyEditor extends TextDialogPropertyEditor {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final PropertyEditor INSTANCE = new SpinnerModelPropertyEditor();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final PropertyEditor INSTANCE = new SpinnerModelPropertyEditor();
 
-  private SpinnerModelPropertyEditor() {
-  }
+	private SpinnerModelPropertyEditor() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss");
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss");
 
-  @Override
-  protected String getText(Property property) throws Exception {
-    return getText(property, false);
-  }
+	@Override
+	protected String getText(Property property) throws Exception {
+		return getText(property, false);
+	}
 
-  @Override
-  protected PropertyTooltipProvider createPropertyTooltipProvider() {
-    return new PropertyTooltipTextProvider() {
-      @Override
-      protected String getText(Property property) throws Exception {
-        return SpinnerModelPropertyEditor.this.getText(property, true);
-      }
+	@Override
+	protected PropertyTooltipProvider createPropertyTooltipProvider() {
+		return new PropertyTooltipTextProvider() {
+			@Override
+			protected String getText(Property property) throws Exception {
+				return SpinnerModelPropertyEditor.this.getText(property, true);
+			}
 
-      @Override
-      public int getTooltipPosition() {
-        return BELOW;
-      }
-    };
-  }
+			@Override
+			public int getTooltipPosition() {
+				return BELOW;
+			}
+		};
+	}
 
-  /**
-   * @return the text to display for given {@link Property}.
-   */
-  private String getText(Property property, boolean forTooltip) throws Exception {
-    Object value = property.getValue();
-    if (value instanceof SpinnerModel) {
-      SpinnerModel model = (SpinnerModel) value;
-      // analyze known models
-      if (model instanceof SpinnerNumberModel) {
-        SpinnerNumberModel numberModel = (SpinnerNumberModel) model;
-        // prepare labels
-        String typeLabel = forTooltip ? "type=" : "";
-        String valueLabel = forTooltip ? " value=" : ", ";
-        String startLabel = forTooltip ? " start=" : ", ";
-        String endLabel = forTooltip ? " end=" : ", ";
-        String stepLabel = forTooltip ? " step=" : ", ";
-        // text
-        String typeText =
-            typeLabel + CodeUtils.getShortClass(numberModel.getValue().getClass().getName());
-        String valueText = valueLabel + numberModel.getValue();
-        String startText = startLabel + numberModel.getMinimum();
-        String endText = endLabel + numberModel.getMaximum();
-        String stepText = stepLabel + numberModel.getStepSize();
-        return typeText + valueText + startText + endText + stepText;
-      } else if (model instanceof SpinnerListModel) {
-        SpinnerListModel listModel = (SpinnerListModel) model;
-        String separator = forTooltip ? "\n" : ", ";
-        return StringUtils.join(listModel.getList().iterator(), separator);
-      } else if (model instanceof SpinnerDateModel) {
-        SpinnerDateModel dateModel = (SpinnerDateModel) model;
-        // prepare labels
-        String valueLabel = forTooltip ? "value=" : "";
-        String startLabel = forTooltip ? "\nstart=" : ", ";
-        String endLabel = forTooltip ? "\nend=" : ", ";
-        String stepLabel = forTooltip ? "\nstep=" : ", ";
-        // text
-        String valueText = valueLabel + getDateText(dateModel.getValue());
-        String startText = startLabel + getDateText(dateModel.getStart());
-        String endText = endLabel + getDateText(dateModel.getEnd());
-        String stepText = stepLabel + getDateStep(dateModel.getCalendarField());
-        return valueText + startText + endText + stepText;
-      } else {
-        return model.toString();
-      }
-    }
-    // unknown value
-    return null;
-  }
+	/**
+	 * @return the text to display for given {@link Property}.
+	 */
+	private String getText(Property property, boolean forTooltip) throws Exception {
+		Object value = property.getValue();
+		if (value instanceof SpinnerModel) {
+			SpinnerModel model = (SpinnerModel) value;
+			// analyze known models
+			if (model instanceof SpinnerNumberModel) {
+				SpinnerNumberModel numberModel = (SpinnerNumberModel) model;
+				// prepare labels
+				String typeLabel = forTooltip ? "type=" : "";
+				String valueLabel = forTooltip ? " value=" : ", ";
+				String startLabel = forTooltip ? " start=" : ", ";
+				String endLabel = forTooltip ? " end=" : ", ";
+				String stepLabel = forTooltip ? " step=" : ", ";
+				// text
+				String typeText =
+						typeLabel + CodeUtils.getShortClass(numberModel.getValue().getClass().getName());
+				String valueText = valueLabel + numberModel.getValue();
+				String startText = startLabel + numberModel.getMinimum();
+				String endText = endLabel + numberModel.getMaximum();
+				String stepText = stepLabel + numberModel.getStepSize();
+				return typeText + valueText + startText + endText + stepText;
+			} else if (model instanceof SpinnerListModel) {
+				SpinnerListModel listModel = (SpinnerListModel) model;
+				String separator = forTooltip ? "\n" : ", ";
+				return StringUtils.join(listModel.getList().iterator(), separator);
+			} else if (model instanceof SpinnerDateModel) {
+				SpinnerDateModel dateModel = (SpinnerDateModel) model;
+				// prepare labels
+				String valueLabel = forTooltip ? "value=" : "";
+				String startLabel = forTooltip ? "\nstart=" : ", ";
+				String endLabel = forTooltip ? "\nend=" : ", ";
+				String stepLabel = forTooltip ? "\nstep=" : ", ";
+				// text
+				String valueText = valueLabel + getDateText(dateModel.getValue());
+				String startText = startLabel + getDateText(dateModel.getStart());
+				String endText = endLabel + getDateText(dateModel.getEnd());
+				String stepText = stepLabel + getDateStep(dateModel.getCalendarField());
+				return valueText + startText + endText + stepText;
+			} else {
+				return model.toString();
+			}
+		}
+		// unknown value
+		return null;
+	}
 
-  /**
-   * @return the text presentation of given {@link Date} object, may be <code>"null"</code>, if
-   *         object is not {@link Date}.
-   */
-  private static String getDateText(Object value) {
-    if (value instanceof Date) {
-      return DATE_FORMAT.format((Date) value);
-    } else {
-      return "null";
-    }
-  }
+	/**
+	 * @return the text presentation of given {@link Date} object, may be <code>"null"</code>, if
+	 *         object is not {@link Date}.
+	 */
+	private static String getDateText(Object value) {
+		if (value instanceof Date) {
+			return DATE_FORMAT.format((Date) value);
+		} else {
+			return "null";
+		}
+	}
 
-  /**
-   * @return the the name of step from {@link Calendar} fields.
-   */
-  private static String getDateStep(int calendarField) {
-    switch (calendarField) {
-      case Calendar.ERA :
-        return "ERA";
-      case Calendar.YEAR :
-        return "YEAR";
-      case Calendar.MONTH :
-        return "MONTH";
-      case Calendar.WEEK_OF_YEAR :
-        return "WEEK_OF_YEAR";
-      case Calendar.WEEK_OF_MONTH :
-        return "WEEK_OF_MONTH";
-      case Calendar.DAY_OF_MONTH :
-        return "DAY_OF_MONTH";
-      case Calendar.DAY_OF_YEAR :
-        return "DAY_OF_YEAR";
-      case Calendar.DAY_OF_WEEK :
-        return "DAY_OF_WEEK";
-      case Calendar.DAY_OF_WEEK_IN_MONTH :
-        return "DAY_OF_WEEK_IN_MONTH";
-      case Calendar.AM_PM :
-        return "AM_PM";
-      case Calendar.HOUR :
-        return "HOUR";
-      case Calendar.HOUR_OF_DAY :
-        return "HOUR_OF_DAY";
-      case Calendar.MINUTE :
-        return "MINUTE";
-      case Calendar.SECOND :
-        return "SECOND";
-      case Calendar.MILLISECOND :
-        return "MILLISECOND";
-      default :
-        return null;
-    }
-  }
+	/**
+	 * @return the the name of step from {@link Calendar} fields.
+	 */
+	private static String getDateStep(int calendarField) {
+		switch (calendarField) {
+		case Calendar.ERA :
+			return "ERA";
+		case Calendar.YEAR :
+			return "YEAR";
+		case Calendar.MONTH :
+			return "MONTH";
+		case Calendar.WEEK_OF_YEAR :
+			return "WEEK_OF_YEAR";
+		case Calendar.WEEK_OF_MONTH :
+			return "WEEK_OF_MONTH";
+		case Calendar.DAY_OF_MONTH :
+			return "DAY_OF_MONTH";
+		case Calendar.DAY_OF_YEAR :
+			return "DAY_OF_YEAR";
+		case Calendar.DAY_OF_WEEK :
+			return "DAY_OF_WEEK";
+		case Calendar.DAY_OF_WEEK_IN_MONTH :
+			return "DAY_OF_WEEK_IN_MONTH";
+		case Calendar.AM_PM :
+			return "AM_PM";
+		case Calendar.HOUR :
+			return "HOUR";
+		case Calendar.HOUR_OF_DAY :
+			return "HOUR_OF_DAY";
+		case Calendar.MINUTE :
+			return "MINUTE";
+		case Calendar.SECOND :
+			return "SECOND";
+		case Calendar.MILLISECOND :
+			return "MILLISECOND";
+		default :
+			return null;
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void openDialog(Property property) throws Exception {
-    Object value = property.getValue();
-    if (value instanceof SpinnerModel) {
-      SpinnerModel model = (SpinnerModel) value;
-      SpinnerModelDialog modelDialog =
-          new SpinnerModelDialog(DesignerPlugin.getShell(), property.getTitle(), model);
-      // open dialog
-      if (modelDialog.open() == Window.OK) {
-        GenericProperty genericProperty = (GenericProperty) property;
-        genericProperty.setExpression(modelDialog.getSource(), Property.UNKNOWN_VALUE);
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void openDialog(Property property) throws Exception {
+		Object value = property.getValue();
+		if (value instanceof SpinnerModel) {
+			SpinnerModel model = (SpinnerModel) value;
+			SpinnerModelDialog modelDialog =
+					new SpinnerModelDialog(DesignerPlugin.getShell(), property.getTitle(), model);
+			// open dialog
+			if (modelDialog.open() == Window.OK) {
+				GenericProperty genericProperty = (GenericProperty) property;
+				genericProperty.setExpression(modelDialog.getSource(), Property.UNKNOWN_VALUE);
+			}
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/models/table/TableColumnDescription.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/models/table/TableColumnDescription.java
index 879f211a6..f72c7b098 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/models/table/TableColumnDescription.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/models/table/TableColumnDescription.java
@@ -26,68 +26,68 @@
  * @coverage swing.model
  */
 public final class TableColumnDescription {
-  public static final int DEFAULT_PREFERRED_WIDTH = 75;
-  public static final int DEFAULT_MIN_WIDTH = 15;
-  public static final int DEFAULT_MAX_WIDTH = Integer.MAX_VALUE;
-  public String m_name;
-  public Class<?> m_class;
-  public boolean m_editable;
-  public boolean m_resizable;
-  public int m_preferredWidth;
-  public int m_minWidth;
-  public int m_maxWidth;
+	public static final int DEFAULT_PREFERRED_WIDTH = 75;
+	public static final int DEFAULT_MIN_WIDTH = 15;
+	public static final int DEFAULT_MAX_WIDTH = Integer.MAX_VALUE;
+	public String m_name;
+	public Class<?> m_class;
+	public boolean m_editable;
+	public boolean m_resizable;
+	public int m_preferredWidth;
+	public int m_minWidth;
+	public int m_maxWidth;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public TableColumnDescription() {
-    m_name = "New column";
-    m_class = Object.class;
-    m_editable = true;
-    m_resizable = true;
-    m_preferredWidth = DEFAULT_PREFERRED_WIDTH;
-    m_minWidth = DEFAULT_MIN_WIDTH;
-    m_maxWidth = DEFAULT_MAX_WIDTH;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public TableColumnDescription() {
+		m_name = "New column";
+		m_class = Object.class;
+		m_editable = true;
+		m_resizable = true;
+		m_preferredWidth = DEFAULT_PREFERRED_WIDTH;
+		m_minWidth = DEFAULT_MIN_WIDTH;
+		m_maxWidth = DEFAULT_MAX_WIDTH;
+	}
 
-  public TableColumnDescription(JTable table, int index) {
-    TableModel model = table.getModel();
-    TableColumn column = table.getColumnModel().getColumn(index);
-    //
-    m_name = model.getColumnName(index);
-    m_class = model.getColumnClass(index);
-    m_editable = model.isCellEditable(0, index);
-    m_resizable = column.getResizable();
-    m_preferredWidth = column.getPreferredWidth();
-    m_minWidth = column.getMinWidth();
-    m_maxWidth = column.getMaxWidth();
-  }
+	public TableColumnDescription(JTable table, int index) {
+		TableModel model = table.getModel();
+		TableColumn column = table.getColumnModel().getColumn(index);
+		//
+		m_name = model.getColumnName(index);
+		m_class = model.getColumnClass(index);
+		m_editable = model.isCellEditable(0, index);
+		m_resizable = column.getResizable();
+		m_preferredWidth = column.getPreferredWidth();
+		m_minWidth = column.getMinWidth();
+		m_maxWidth = column.getMaxWidth();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds invocations (without {@link TableColumn} or {@link TableColumnModel} access code) to
-   * update non-default values of this column.
-   */
-  List<String> getInvocations() {
-    List<String> invocations = Lists.newArrayList();
-    if (!m_resizable) {
-      invocations.add("setResizable(false)");
-    }
-    if (m_preferredWidth != DEFAULT_PREFERRED_WIDTH) {
-      invocations.add("setPreferredWidth(" + m_preferredWidth + ")");
-    }
-    if (m_minWidth != DEFAULT_MIN_WIDTH) {
-      invocations.add("setMinWidth(" + m_minWidth + ")");
-    }
-    if (m_maxWidth != DEFAULT_MAX_WIDTH) {
-      invocations.add("setMaxWidth(" + m_maxWidth + ")");
-    }
-    return invocations;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds invocations (without {@link TableColumn} or {@link TableColumnModel} access code) to
+	 * update non-default values of this column.
+	 */
+	List<String> getInvocations() {
+		List<String> invocations = Lists.newArrayList();
+		if (!m_resizable) {
+			invocations.add("setResizable(false)");
+		}
+		if (m_preferredWidth != DEFAULT_PREFERRED_WIDTH) {
+			invocations.add("setPreferredWidth(" + m_preferredWidth + ")");
+		}
+		if (m_minWidth != DEFAULT_MIN_WIDTH) {
+			invocations.add("setMinWidth(" + m_minWidth + ")");
+		}
+		if (m_maxWidth != DEFAULT_MAX_WIDTH) {
+			invocations.add("setMaxWidth(" + m_maxWidth + ")");
+		}
+		return invocations;
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/models/table/TableModelDescription.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/models/table/TableModelDescription.java
index e3a8d77c0..b6b64e93c 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/models/table/TableModelDescription.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/models/table/TableModelDescription.java
@@ -37,351 +37,351 @@
  * @coverage swing.model
  */
 public final class TableModelDescription {
-  private final LinkedList<LinkedList<Object>> m_values = Lists.newLinkedList();
-  private final LinkedList<TableColumnDescription> m_columns = Lists.newLinkedList();
-  private int m_rowCount;
-  private int m_columnCount;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public TableModelDescription() {
-  }
-
-  public TableModelDescription(JTable table) {
-    TableModel model = table.getModel();
-    m_rowCount = model.getRowCount();
-    m_columnCount = model.getColumnCount();
-    // copy values
-    for (int row = 0; row < m_rowCount; row++) {
-      LinkedList<Object> rowValues = Lists.newLinkedList();
-      m_values.add(rowValues);
-      for (int column = 0; column < m_columnCount; column++) {
-        rowValues.add(model.getValueAt(row, column));
-      }
-    }
-    // copy columns
-    for (int column = 0; column < m_columnCount; column++) {
-      m_columns.add(new TableColumnDescription(table, column));
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public int getRowCount() {
-    return m_rowCount;
-  }
-
-  public int getColumnCount() {
-    return m_columnCount;
-  }
-
-  public Object getValue(int row, int column) {
-    return m_values.get(row).get(column);
-  }
-
-  public TableColumnDescription getColumn(int index) {
-    return m_columns.get(index);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Operations: columns
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void insertColumn(int index) {
-    m_columns.add(index, new TableColumnDescription());
-    m_columnCount++;
-    for (List<Object> row : m_values) {
-      row.add(index, null);
-    }
-  }
-
-  public void removeColumn(int index) {
-    m_columnCount--;
-    m_columns.remove(index);
-    for (List<Object> row : m_values) {
-      row.remove(index);
-    }
-  }
-
-  public void setColumnCount(int columnCount) {
-    while (m_columnCount < columnCount) {
-      insertColumn(m_columnCount);
-    }
-    while (m_columnCount > columnCount) {
-      removeColumn(m_columnCount - 1);
-    }
-  }
-
-  public void moveColumn(int source, int target) {
-    m_columns.add(target, m_columns.remove(source));
-    for (List<Object> row : m_values) {
-      row.add(target, row.remove(source));
-    }
-  }
-
-  public void setColumnType(int index, Class<?> columnType) {
-    getColumn(index).m_class = columnType;
-    for (List<Object> row : m_values) {
-      Object value = row.get(index);
-      if (value != null && !columnType.isAssignableFrom(value.getClass())) {
-        row.set(index, null);
-      }
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Operations: rows
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void insertRow(int index) {
-    m_rowCount++;
-    LinkedList<Object> newRow = Lists.newLinkedList();
-    m_values.add(newRow);
-    for (int column = 0; column < m_columnCount; column++) {
-      newRow.add(null);
-    }
-  }
-
-  public void removeRow(int index) {
-    m_rowCount--;
-    m_values.remove(index);
-  }
-
-  public void setRowCount(int rowCount) {
-    while (m_rowCount < rowCount) {
-      insertRow(m_rowCount);
-    }
-    while (m_rowCount > rowCount) {
-      removeRow(m_rowCount - 1);
-    }
-  }
-
-  public void moveRow(int source, int target) {
-    m_values.add(target, m_values.remove(source));
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public String getModelSource() throws Exception {
-    String source = "";
-    source += "new javax.swing.table.DefaultTableModel(\n";
-    // add values
-    source += "\tnew Object[][] {\n";
-    for (int row = 0; row < m_rowCount; row++) {
-      source += "\t\t{";
-      for (int column = 0; column < m_columnCount; column++) {
-        Object value = getValue(row, column);
-        if (column != 0) {
-          source += ", ";
-        }
-        source += getValueSource(value, column);
-      }
-      source += "},\n";
-    }
-    source += "\t},\n";
-    // add column names
-    source += "\tnew String[] {\n";
-    if (m_columnCount != 0) {
-      source += "\t\t";
-      for (int columnIndex = 0; columnIndex < m_columnCount; columnIndex++) {
-        TableColumnDescription column = m_columns.get(columnIndex);
-        if (columnIndex != 0) {
-          source += ", ";
-        }
-        source += StringConverter.INSTANCE.toJavaSource(null, column.m_name);
-      }
-      source += "\n";
-    }
-    source += "\t}\n";
-    // close constructor
-    source += ")";
-    // add column class/editable
-    {
-      String overridenMethods = getModelSource_overridenMethods();
-      if (overridenMethods.length() != 0) {
-        source += " {\n";
-        source += overridenMethods;
-        source += "}";
-      }
-    }
-    // final source
-    return source;
-  }
-
-  private String getModelSource_overridenMethods() {
-    String source = "";
-    // class
-    if (hasNonObjectColumn()) {
-      // constants
-      source += "\tClass[] columnTypes = new Class[] {\n";
-      source += "\t\t";
-      for (int columnIndex = 0; columnIndex < m_columnCount; columnIndex++) {
-        TableColumnDescription column = m_columns.get(columnIndex);
-        if (columnIndex != 0) {
-          source += ", ";
-        }
-        source += column.m_class.getCanonicalName() + ".class";
-      }
-      source += "\n";
-      source += "\t};\n";
-      // isCellEditable()
-      source += "\tpublic Class getColumnClass(int columnIndex) {\n";
-      source += "\t\treturn columnTypes[columnIndex];\n";
-      source += "\t}\n";
-    }
-    // editable
-    if (hasNotEditableColumn()) {
-      // constants
-      source += "\tboolean[] columnEditables = new boolean[] {\n";
-      source += "\t\t";
-      for (int columnIndex = 0; columnIndex < m_columnCount; columnIndex++) {
-        TableColumnDescription column = m_columns.get(columnIndex);
-        if (columnIndex != 0) {
-          source += ", ";
-        }
-        source += column.m_editable;
-      }
-      source += "\n";
-      source += "\t};\n";
-      // isCellEditable()
-      source += "\tpublic boolean isCellEditable(int row, int column) {\n";
-      source += "\t\treturn columnEditables[column];\n";
-      source += "\t}\n";
-    }
-    // final source
-    return source;
-  }
-
-  private boolean hasNonObjectColumn() {
-    for (TableColumnDescription column : m_columns) {
-      if (column.m_class != Object.class) {
-        return true;
-      }
-    }
-    return false;
-  }
-
-  private boolean hasNotEditableColumn() {
-    for (TableColumnDescription column : m_columns) {
-      if (!column.m_editable) {
-        return true;
-      }
-    }
-    return false;
-  }
-
-  public List<String> getColumnModelInvocations() {
-    List<String> invocations = Lists.newArrayList();
-    for (int columnIndex = 0; columnIndex < m_columnCount; columnIndex++) {
-      TableColumnDescription column = m_columns.get(columnIndex);
-      for (String invocation : column.getInvocations()) {
-        invocations.add(MessageFormat.format(
-            "getColumnModel().getColumn({0}).{1}",
-            columnIndex,
-            invocation));
-      }
-    }
-    return invocations;
-  }
-
-  private static String getValueSource(Object value, int column) throws Exception {
-    if (value instanceof String) {
-      return StringConverter.INSTANCE.toJavaSource(null, value);
-    }
-    if (value instanceof Boolean) {
-      if (((Boolean) value).booleanValue()) {
-        return "Boolean.TRUE";
-      } else {
-        return "Boolean.FALSE";
-      }
-    }
-    if (value instanceof Integer) {
-      return "new Integer(" + IntegerConverter.INSTANCE.toJavaSource(null, value) + ")";
-    }
-    if (value instanceof Byte) {
-      return "new Byte(" + ByteConverter.INSTANCE.toJavaSource(null, value) + ")";
-    }
-    if (value instanceof Short) {
-      return "new Short(" + ShortConverter.INSTANCE.toJavaSource(null, value) + ")";
-    }
-    if (value instanceof Long) {
-      return "new Long(" + LongConverter.INSTANCE.toJavaSource(null, value) + ")";
-    }
-    if (value instanceof Float) {
-      return "new Float(" + FloatConverter.INSTANCE.toJavaSource(null, value) + ")";
-    }
-    if (value instanceof Double) {
-      return "new Double(" + DoubleConverter.INSTANCE.toJavaSource(null, value) + ")";
-    }
-    return "null";
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Model
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public TableModel createTableModel() {
-    return new DefaultTableModel() {
-      private static final long serialVersionUID = 0L;
-
-      @Override
-      public int getColumnCount() {
-        return TableModelDescription.this.getColumnCount();
-      }
-
-      @Override
-      public int getRowCount() {
-        return TableModelDescription.this.getRowCount();
-      }
-
-      @Override
-      public String getColumnName(int column) {
-        return getColumn(column).m_name;
-      }
-
-      @Override
-      public Class<?> getColumnClass(int columnIndex) {
-        return getColumn(columnIndex).m_class;
-      }
-
-      @Override
-      public boolean isCellEditable(int row, int column) {
-        return getColumn(column).m_editable;
-      }
-
-      @Override
-      public Object getValueAt(int row, int column) {
-        return m_values.get(row).get(column);
-      }
-
-      @Override
-      public void setValueAt(Object value, int row, int column) {
-        m_values.get(row).set(column, value);
-      }
-    };
-  }
-
-  public void applyModel(JTable table) {
-    TableColumnModel columnModel = table.getColumnModel();
-    for (int columnIndex = 0; columnIndex < m_columnCount; columnIndex++) {
-      TableColumnDescription columnDescription = m_columns.get(columnIndex);
-      TableColumn column = columnModel.getColumn(columnIndex);
-      column.setResizable(columnDescription.m_resizable);
-      column.setPreferredWidth(columnDescription.m_preferredWidth);
-      column.setMinWidth(columnDescription.m_minWidth);
-      column.setMaxWidth(columnDescription.m_maxWidth);
-    }
-  }
+	private final LinkedList<LinkedList<Object>> m_values = Lists.newLinkedList();
+	private final LinkedList<TableColumnDescription> m_columns = Lists.newLinkedList();
+	private int m_rowCount;
+	private int m_columnCount;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public TableModelDescription() {
+	}
+
+	public TableModelDescription(JTable table) {
+		TableModel model = table.getModel();
+		m_rowCount = model.getRowCount();
+		m_columnCount = model.getColumnCount();
+		// copy values
+		for (int row = 0; row < m_rowCount; row++) {
+			LinkedList<Object> rowValues = Lists.newLinkedList();
+			m_values.add(rowValues);
+			for (int column = 0; column < m_columnCount; column++) {
+				rowValues.add(model.getValueAt(row, column));
+			}
+		}
+		// copy columns
+		for (int column = 0; column < m_columnCount; column++) {
+			m_columns.add(new TableColumnDescription(table, column));
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public int getRowCount() {
+		return m_rowCount;
+	}
+
+	public int getColumnCount() {
+		return m_columnCount;
+	}
+
+	public Object getValue(int row, int column) {
+		return m_values.get(row).get(column);
+	}
+
+	public TableColumnDescription getColumn(int index) {
+		return m_columns.get(index);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Operations: columns
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void insertColumn(int index) {
+		m_columns.add(index, new TableColumnDescription());
+		m_columnCount++;
+		for (List<Object> row : m_values) {
+			row.add(index, null);
+		}
+	}
+
+	public void removeColumn(int index) {
+		m_columnCount--;
+		m_columns.remove(index);
+		for (List<Object> row : m_values) {
+			row.remove(index);
+		}
+	}
+
+	public void setColumnCount(int columnCount) {
+		while (m_columnCount < columnCount) {
+			insertColumn(m_columnCount);
+		}
+		while (m_columnCount > columnCount) {
+			removeColumn(m_columnCount - 1);
+		}
+	}
+
+	public void moveColumn(int source, int target) {
+		m_columns.add(target, m_columns.remove(source));
+		for (List<Object> row : m_values) {
+			row.add(target, row.remove(source));
+		}
+	}
+
+	public void setColumnType(int index, Class<?> columnType) {
+		getColumn(index).m_class = columnType;
+		for (List<Object> row : m_values) {
+			Object value = row.get(index);
+			if (value != null && !columnType.isAssignableFrom(value.getClass())) {
+				row.set(index, null);
+			}
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Operations: rows
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void insertRow(int index) {
+		m_rowCount++;
+		LinkedList<Object> newRow = Lists.newLinkedList();
+		m_values.add(newRow);
+		for (int column = 0; column < m_columnCount; column++) {
+			newRow.add(null);
+		}
+	}
+
+	public void removeRow(int index) {
+		m_rowCount--;
+		m_values.remove(index);
+	}
+
+	public void setRowCount(int rowCount) {
+		while (m_rowCount < rowCount) {
+			insertRow(m_rowCount);
+		}
+		while (m_rowCount > rowCount) {
+			removeRow(m_rowCount - 1);
+		}
+	}
+
+	public void moveRow(int source, int target) {
+		m_values.add(target, m_values.remove(source));
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public String getModelSource() throws Exception {
+		String source = "";
+		source += "new javax.swing.table.DefaultTableModel(\n";
+		// add values
+		source += "\tnew Object[][] {\n";
+		for (int row = 0; row < m_rowCount; row++) {
+			source += "\t\t{";
+			for (int column = 0; column < m_columnCount; column++) {
+				Object value = getValue(row, column);
+				if (column != 0) {
+					source += ", ";
+				}
+				source += getValueSource(value, column);
+			}
+			source += "},\n";
+		}
+		source += "\t},\n";
+		// add column names
+		source += "\tnew String[] {\n";
+		if (m_columnCount != 0) {
+			source += "\t\t";
+			for (int columnIndex = 0; columnIndex < m_columnCount; columnIndex++) {
+				TableColumnDescription column = m_columns.get(columnIndex);
+				if (columnIndex != 0) {
+					source += ", ";
+				}
+				source += StringConverter.INSTANCE.toJavaSource(null, column.m_name);
+			}
+			source += "\n";
+		}
+		source += "\t}\n";
+		// close constructor
+		source += ")";
+		// add column class/editable
+		{
+			String overridenMethods = getModelSource_overridenMethods();
+			if (overridenMethods.length() != 0) {
+				source += " {\n";
+				source += overridenMethods;
+				source += "}";
+			}
+		}
+		// final source
+		return source;
+	}
+
+	private String getModelSource_overridenMethods() {
+		String source = "";
+		// class
+		if (hasNonObjectColumn()) {
+			// constants
+			source += "\tClass[] columnTypes = new Class[] {\n";
+			source += "\t\t";
+			for (int columnIndex = 0; columnIndex < m_columnCount; columnIndex++) {
+				TableColumnDescription column = m_columns.get(columnIndex);
+				if (columnIndex != 0) {
+					source += ", ";
+				}
+				source += column.m_class.getCanonicalName() + ".class";
+			}
+			source += "\n";
+			source += "\t};\n";
+			// isCellEditable()
+			source += "\tpublic Class getColumnClass(int columnIndex) {\n";
+			source += "\t\treturn columnTypes[columnIndex];\n";
+			source += "\t}\n";
+		}
+		// editable
+		if (hasNotEditableColumn()) {
+			// constants
+			source += "\tboolean[] columnEditables = new boolean[] {\n";
+			source += "\t\t";
+			for (int columnIndex = 0; columnIndex < m_columnCount; columnIndex++) {
+				TableColumnDescription column = m_columns.get(columnIndex);
+				if (columnIndex != 0) {
+					source += ", ";
+				}
+				source += column.m_editable;
+			}
+			source += "\n";
+			source += "\t};\n";
+			// isCellEditable()
+			source += "\tpublic boolean isCellEditable(int row, int column) {\n";
+			source += "\t\treturn columnEditables[column];\n";
+			source += "\t}\n";
+		}
+		// final source
+		return source;
+	}
+
+	private boolean hasNonObjectColumn() {
+		for (TableColumnDescription column : m_columns) {
+			if (column.m_class != Object.class) {
+				return true;
+			}
+		}
+		return false;
+	}
+
+	private boolean hasNotEditableColumn() {
+		for (TableColumnDescription column : m_columns) {
+			if (!column.m_editable) {
+				return true;
+			}
+		}
+		return false;
+	}
+
+	public List<String> getColumnModelInvocations() {
+		List<String> invocations = Lists.newArrayList();
+		for (int columnIndex = 0; columnIndex < m_columnCount; columnIndex++) {
+			TableColumnDescription column = m_columns.get(columnIndex);
+			for (String invocation : column.getInvocations()) {
+				invocations.add(MessageFormat.format(
+						"getColumnModel().getColumn({0}).{1}",
+						columnIndex,
+						invocation));
+			}
+		}
+		return invocations;
+	}
+
+	private static String getValueSource(Object value, int column) throws Exception {
+		if (value instanceof String) {
+			return StringConverter.INSTANCE.toJavaSource(null, value);
+		}
+		if (value instanceof Boolean) {
+			if (((Boolean) value).booleanValue()) {
+				return "Boolean.TRUE";
+			} else {
+				return "Boolean.FALSE";
+			}
+		}
+		if (value instanceof Integer) {
+			return "new Integer(" + IntegerConverter.INSTANCE.toJavaSource(null, value) + ")";
+		}
+		if (value instanceof Byte) {
+			return "new Byte(" + ByteConverter.INSTANCE.toJavaSource(null, value) + ")";
+		}
+		if (value instanceof Short) {
+			return "new Short(" + ShortConverter.INSTANCE.toJavaSource(null, value) + ")";
+		}
+		if (value instanceof Long) {
+			return "new Long(" + LongConverter.INSTANCE.toJavaSource(null, value) + ")";
+		}
+		if (value instanceof Float) {
+			return "new Float(" + FloatConverter.INSTANCE.toJavaSource(null, value) + ")";
+		}
+		if (value instanceof Double) {
+			return "new Double(" + DoubleConverter.INSTANCE.toJavaSource(null, value) + ")";
+		}
+		return "null";
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Model
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public TableModel createTableModel() {
+		return new DefaultTableModel() {
+			private static final long serialVersionUID = 0L;
+
+			@Override
+			public int getColumnCount() {
+				return TableModelDescription.this.getColumnCount();
+			}
+
+			@Override
+			public int getRowCount() {
+				return TableModelDescription.this.getRowCount();
+			}
+
+			@Override
+			public String getColumnName(int column) {
+				return getColumn(column).m_name;
+			}
+
+			@Override
+			public Class<?> getColumnClass(int columnIndex) {
+				return getColumn(columnIndex).m_class;
+			}
+
+			@Override
+			public boolean isCellEditable(int row, int column) {
+				return getColumn(column).m_editable;
+			}
+
+			@Override
+			public Object getValueAt(int row, int column) {
+				return m_values.get(row).get(column);
+			}
+
+			@Override
+			public void setValueAt(Object value, int row, int column) {
+				m_values.get(row).set(column, value);
+			}
+		};
+	}
+
+	public void applyModel(JTable table) {
+		TableColumnModel columnModel = table.getColumnModel();
+		for (int columnIndex = 0; columnIndex < m_columnCount; columnIndex++) {
+			TableColumnDescription columnDescription = m_columns.get(columnIndex);
+			TableColumn column = columnModel.getColumn(columnIndex);
+			column.setResizable(columnDescription.m_resizable);
+			column.setPreferredWidth(columnDescription.m_preferredWidth);
+			column.setMinWidth(columnDescription.m_minWidth);
+			column.setMaxWidth(columnDescription.m_maxWidth);
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/models/table/TableModelDialog.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/models/table/TableModelDialog.java
index ff7627308..a50f38797 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/models/table/TableModelDialog.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/models/table/TableModelDialog.java
@@ -61,628 +61,628 @@
  * @coverage swing.property.editor
  */
 public final class TableModelDialog extends ResizableDialog {
-  private static final BiMap<String, Class<?>> COLUMN_TYPES = HashBiMap.create();
-  static {
-    COLUMN_TYPES.put("Object", Object.class);
-    COLUMN_TYPES.put("String", String.class);
-    COLUMN_TYPES.put("Boolean", Boolean.class);
-    COLUMN_TYPES.put("Integer", Integer.class);
-    COLUMN_TYPES.put("Byte", Byte.class);
-    COLUMN_TYPES.put("Short", Short.class);
-    COLUMN_TYPES.put("Long", Long.class);
-    COLUMN_TYPES.put("Float", Float.class);
-    COLUMN_TYPES.put("Double", Double.class);
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance fields
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final String m_title;
-  private final TableModelDescription m_model;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public TableModelDialog(Shell parentShell, String title, TableModelDescription model) {
-    super(parentShell, DesignerPlugin.getDefault());
-    m_title = title;
-    m_model = model;
-    setShellStyle(SWT.RESIZE | SWT.TITLE | SWT.APPLICATION_MODAL);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Composite m_tableComposite;
-  private TitledComposite m_columnsComposite;
-  private TitledComposite m_rowsComposite;
-  private TitledComposite m_columnPropertiesComposite;
-  private EmbeddedSwingComposite2 m_swingComposite;
-  private JTable m_table;
-  // columns
-  private CSpinner m_columnCountSpinner;
-  private Button m_insertColumnButton;
-  private Button m_deleteColumnButton;
-  private Button m_moveColumnLeftButton;
-  private Button m_moveColumnRightButton;
-  // rows
-  private CSpinner m_rowCountSpinner;
-  private Button m_insertRowButton;
-  private Button m_deleteRowButton;
-  private Button m_moveRowUpButton;
-  private Button m_moveRowDownButton;
-  // column properties
-  private Text m_columnPropertyNo;
-  private Text m_columnPropertyTitle;
-  private Combo m_columnPropertyType;
-  private Button m_columnPropertyEditable;
-  private Button m_columnPropertyResizable;
-  private Label m_columnPropertyValuesLabel;
-  private Text m_columnPropertyValues;
-  private Button m_columnPropertyValuesEdit;
-  private CSpinner m_columnPropertyPrefWidth;
-  private CSpinner m_columnPropertyMinWidth;
-  private CSpinner m_columnPropertyMaxWidth;
-
-  @Override
-  protected Control createDialogArea(Composite parent) {
-    Composite area = (Composite) super.createDialogArea(parent);
-    GridLayoutFactory.create(area).columns(2);
-    // create GUI elements
-    createJTableComposite(area);
-    createColumnsComposite(area);
-    createRowsComposite(area);
-    createColumnPropertiesComposite(area);
-    // set constraints
-    GridDataFactory.create(m_tableComposite).spanV(2).hintC(70, 20).grab().fill();
-    GridDataFactory.create(m_columnsComposite).fill();
-    GridDataFactory.create(m_rowsComposite).fill();
-    GridDataFactory.create(m_columnPropertiesComposite).grabH().fill();
-    //
-    m_swingComposite.populate();
-    return area;
-  }
-
-  private void createJTableComposite(Composite parent) {
-    m_tableComposite = new Composite(parent, SWT.NONE);
-    GridLayoutFactory.create(m_tableComposite).noMargins();
-    new Label(m_tableComposite, SWT.NONE).setText(ModelMessages.TableModelDialog_itemsLabel);
-    {
-      m_swingComposite = new EmbeddedSwingComposite2(m_tableComposite, SWT.NONE) {
-        @Override
-        protected JComponent createSwingComponent() {
-          TableModel model = m_model.createTableModel();
-          m_table = new JTable(model);
-          m_table.setCellSelectionEnabled(true);
-          m_table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
-          updateTableModel();
-          trackTableSelection();
-          return new JScrollPane(m_table);
-        }
-      };
-      GridDataFactory.create(m_swingComposite).grab().fill();
-    }
-    {
-      Label label = new Label(m_tableComposite, SWT.WRAP);
-      GridDataFactory.create(label).grabH().fill();
-      label.setText(ModelMessages.TableModelDialog_hint);
-    }
-  }
-
-  private void createColumnsComposite(Composite parent) {
-    m_columnsComposite =
-        new TitledComposite(parent, SWT.NONE, ModelMessages.TableModelDialog_columnsTitle);
-    // content container
-    Composite container = m_columnsComposite.getContent();
-    GridLayoutFactory.create(container).columns(2).noMargins();
-    // Count
-    {
-      new Label(container, SWT.NONE).setText(ModelMessages.TableModelDialog_columnsCount);
-      m_columnCountSpinner = new CSpinner(container, SWT.BORDER);
-      GridDataFactory.create(m_columnCountSpinner).grabH().fillH().hintHC(5);
-      addJTableOperationSelectionListener(m_columnCountSpinner, new TableOperationRunnable() {
-        public void run(int row, int column) {
-          m_model.setColumnCount(m_columnCountSpinner.getSelection());
-        }
-      });
-    }
-    // Insert
-    {
-      m_insertColumnButton = new Button(container, SWT.NONE);
-      GridDataFactory.create(m_insertColumnButton).spanH(2).hintHC(13).alignHC();
-      m_insertColumnButton.setText(ModelMessages.TableModelDialog_columnInsertButton);
-      addJTableOperationSelectionListener(m_insertColumnButton, new TableOperationRunnable() {
-        public void run(int row, int column) {
-          m_model.insertColumn(getInsertColumnIndex(column));
-        }
-      }, new TableOperationRunnable() {
-        public void run(int row, int column) {
-          setTableSelection(row, getInsertColumnIndex(column));
-        }
-      });
-    }
-    // Delete
-    {
-      m_deleteColumnButton = new Button(container, SWT.NONE);
-      GridDataFactory.create(m_deleteColumnButton).spanH(2).hintHC(13).alignHC();
-      m_deleteColumnButton.setText(ModelMessages.TableModelDialog_columnDeleteButton);
-      addJTableOperationSelectionListener(m_deleteColumnButton, new TableOperationRunnable() {
-        public void run(int row, int column) {
-          m_model.removeColumn(column);
-        }
-      }, new TableOperationRunnable() {
-        public void run(int row, int column) {
-          if (column < m_table.getColumnCount()) {
-            setTableSelection(row, column);
-          } else {
-            setTableSelection(row, column - 1);
-          }
-        }
-      });
-    }
-    // Move Left
-    {
-      m_moveColumnLeftButton = new Button(container, SWT.NONE);
-      GridDataFactory.create(m_moveColumnLeftButton).spanH(2).hintHC(13).alignHC();
-      m_moveColumnLeftButton.setText(ModelMessages.TableModelDialog_columnMoveLeftButton);
-      addJTableOperationSelectionListener(m_moveColumnLeftButton, new TableOperationRunnable() {
-        public void run(int row, int column) {
-          m_model.moveColumn(column, column - 1);
-        }
-      }, new TableOperationRunnable() {
-        public void run(int row, int column) {
-          setTableSelection(row, column - 1);
-        }
-      });
-    }
-    // Move Right
-    {
-      m_moveColumnRightButton = new Button(container, SWT.NONE);
-      GridDataFactory.create(m_moveColumnRightButton).spanH(2).hintHC(13).alignHC();
-      m_moveColumnRightButton.setText(ModelMessages.TableModelDialog_columnMoveRightButton);
-      addJTableOperationSelectionListener(m_moveColumnRightButton, new TableOperationRunnable() {
-        public void run(int row, int column) {
-          m_model.moveColumn(column, column + 1);
-        }
-      }, new TableOperationRunnable() {
-        public void run(int row, int column) {
-          setTableSelection(row, column + 1);
-        }
-      });
-    }
-  }
-
-  private void createRowsComposite(Composite parent) {
-    m_rowsComposite =
-        new TitledComposite(parent, SWT.NONE, ModelMessages.TableModelDialog_rowsTitle);
-    // content container
-    Composite container = m_rowsComposite.getContent();
-    GridLayoutFactory.create(container).columns(2).noMargins();
-    // Count
-    {
-      new Label(container, SWT.NONE).setText(ModelMessages.TableModelDialog_rowsCount);
-      m_rowCountSpinner = new CSpinner(container, SWT.BORDER);
-      GridDataFactory.create(m_rowCountSpinner).grabH().fillH().hintHC(5);
-      addJTableOperationSelectionListener(m_rowCountSpinner, new TableOperationRunnable() {
-        public void run(int row, int column) {
-          m_model.setRowCount(m_rowCountSpinner.getSelection());
-        }
-      });
-    }
-    // Insert
-    {
-      m_insertRowButton = new Button(container, SWT.NONE);
-      GridDataFactory.create(m_insertRowButton).spanH(2).hintHC(13).alignHC();
-      m_insertRowButton.setText(ModelMessages.TableModelDialog_rowInsertButton);
-      addJTableOperationSelectionListener(m_insertRowButton, new TableOperationRunnable() {
-        public void run(int row, int column) {
-          m_model.insertRow(getInsertRowIndex(row));
-        }
-      }, new TableOperationRunnable() {
-        public void run(int row, int column) {
-          setTableSelection(getInsertRowIndex(row), column);
-        }
-      });
-    }
-    // Delete
-    {
-      m_deleteRowButton = new Button(container, SWT.NONE);
-      GridDataFactory.create(m_deleteRowButton).spanH(2).hintHC(13).alignHC();
-      m_deleteRowButton.setText(ModelMessages.TableModelDialog_rowDeleteButton);
-      addJTableOperationSelectionListener(m_deleteRowButton, new TableOperationRunnable() {
-        public void run(int row, int column) {
-          m_model.removeRow(row);
-        }
-      }, new TableOperationRunnable() {
-        public void run(int row, int column) {
-          if (row < m_table.getRowCount()) {
-            setTableSelection(row, column);
-          } else {
-            setTableSelection(row - 1, column);
-          }
-        }
-      });
-    }
-    // Move Up
-    {
-      m_moveRowUpButton = new Button(container, SWT.NONE);
-      GridDataFactory.create(m_moveRowUpButton).spanH(2).hintHC(13).alignHC();
-      m_moveRowUpButton.setText(ModelMessages.TableModelDialog_rowMoveUpButton);
-      addJTableOperationSelectionListener(m_moveRowUpButton, new TableOperationRunnable() {
-        public void run(int row, int column) {
-          m_model.moveRow(row, row - 1);
-        }
-      }, new TableOperationRunnable() {
-        public void run(int row, int column) {
-          setTableSelection(row - 1, column);
-        }
-      });
-    }
-    // Move Down
-    {
-      m_moveRowDownButton = new Button(container, SWT.NONE);
-      GridDataFactory.create(m_moveRowDownButton).spanH(2).hintHC(13).alignHC();
-      m_moveRowDownButton.setText(ModelMessages.TableModelDialog_rowMoveDownButton);
-      addJTableOperationSelectionListener(m_moveRowDownButton, new TableOperationRunnable() {
-        public void run(int row, int column) {
-          m_model.moveRow(row, row + 1);
-        }
-      }, new TableOperationRunnable() {
-        public void run(int row, int column) {
-          setTableSelection(row + 1, column);
-        }
-      });
-    }
-  }
-
-  private void createColumnPropertiesComposite(Composite parent) {
-    m_columnPropertiesComposite =
-        new TitledComposite(parent, SWT.NONE, ModelMessages.TableModelDialog_columnProperties);
-    // content container
-    Composite container = m_columnPropertiesComposite.getContent();
-    GridLayoutFactory.create(container).columns(8).noMargins();
-    // header
-    {
-      Label label = new Label(container, SWT.NONE);
-      GridDataFactory.create(label).spanH(8);
-      label.setText(ModelMessages.TableModelDialog_columnPropertiesHint);
-    }
-    // first row
-    {
-      new Label(container, SWT.NONE).setText(ModelMessages.TableModelDialog_columnPropertiesNo);
-      m_columnPropertyNo = new Text(container, SWT.BORDER | SWT.READ_ONLY);
-      GridDataFactory.create(m_columnPropertyNo).hintHC(6).fillH();
-    }
-    {
-      new Label(container, SWT.NONE).setText(ModelMessages.TableModelDialog_columnPropertiesTitle);
-      m_columnPropertyTitle = new Text(container, SWT.BORDER);
-      GridDataFactory.create(m_columnPropertyTitle).spanH(2).hintHC(40).fillH();
-      addJTableOperationListener(m_columnPropertyTitle, SWT.Modify, new TableOperationRunnable() {
-        public void run(int row, int column) {
-          m_model.getColumn(column).m_name = m_columnPropertyTitle.getText();
-        }
-      });
-    }
-    {
-      new Label(container, SWT.NONE).setText(
-          ModelMessages.TableModelDialog_columnPropertiesPrefWidth);
-      m_columnPropertyPrefWidth = new CSpinner(container, SWT.BORDER);
-      GridDataFactory.create(m_columnPropertyPrefWidth).hintHC(15);
-      m_columnPropertyPrefWidth.setRange(0, Integer.MAX_VALUE);
-      addJTableOperationSelectionListener(m_columnPropertyPrefWidth, new TableOperationRunnable() {
-        public void run(int row, int column) {
-          m_model.getColumn(column).m_preferredWidth = m_columnPropertyPrefWidth.getSelection();
-        }
-      });
-    }
-    {
-      ToolItem clearButton = createClearSpinnerButton(container);
-      addJTableOperationSelectionListener(clearButton, new TableOperationRunnable() {
-        public void run(int row, int column) {
-          m_model.getColumn(column).m_preferredWidth =
-              TableColumnDescription.DEFAULT_PREFERRED_WIDTH;
-        }
-      });
-    }
-    // second row
-    {
-      new Label(container, SWT.NONE).setText(ModelMessages.TableModelDialog_columnPropertiesType);
-      m_columnPropertyType = new Combo(container, SWT.BORDER | SWT.READ_ONLY);
-      GridDataFactory.create(m_columnPropertyType).hintHC(10).fillH();
-      // items
-      for (String typeTitle : COLUMN_TYPES.keySet()) {
-        m_columnPropertyType.add(typeTitle);
-      }
-      m_columnPropertyType.setVisibleItemCount(COLUMN_TYPES.size());
-      // listener
-      addJTableOperationSelectionListener(m_columnPropertyType, new TableOperationRunnable() {
-        public void run(int row, int column) {
-          String typeTitle = m_columnPropertyType.getText();
-          Class<?> type = COLUMN_TYPES.get(typeTitle);
-          m_model.setColumnType(column, type);
-        }
-      });
-    }
-    {
-      m_columnPropertyValuesLabel = new Label(container, SWT.NONE);
-      m_columnPropertyValuesLabel.setText(ModelMessages.TableModelDialog_columnPropertiesValues);
-      m_columnPropertyValuesLabel.setEnabled(false);
-      m_columnPropertyValuesLabel.setData(UiUtils.KEY_IGNORE_HIERARCHY_ENABLED, true);
-      //
-      m_columnPropertyValues = new Text(container, SWT.BORDER);
-      GridDataFactory.create(m_columnPropertyValues).hintHC(30);
-      m_columnPropertyValues.setEnabled(false);
-      m_columnPropertyValues.setData(UiUtils.KEY_IGNORE_HIERARCHY_ENABLED, true);
-    }
-    {
-      m_columnPropertyValuesEdit = new Button(container, SWT.NONE);
-      GridDataFactory.create(m_columnPropertyValuesEdit).hintHC(10);
-      m_columnPropertyValuesEdit.setText(ModelMessages.TableModelDialog_columnPropertiesValuesEdit);
-      m_columnPropertyValuesEdit.setEnabled(false);
-      m_columnPropertyValuesEdit.setData(UiUtils.KEY_IGNORE_HIERARCHY_ENABLED, true);
-    }
-    {
-      new Label(container, SWT.NONE).setText(
-          ModelMessages.TableModelDialog_columnPropertiesMinWidth);
-      m_columnPropertyMinWidth = new CSpinner(container, SWT.BORDER);
-      GridDataFactory.create(m_columnPropertyMinWidth).hintHC(15);
-      m_columnPropertyMinWidth.setRange(0, Integer.MAX_VALUE);
-      addJTableOperationSelectionListener(m_columnPropertyMinWidth, new TableOperationRunnable() {
-        public void run(int row, int column) {
-          m_model.getColumn(column).m_minWidth = m_columnPropertyMinWidth.getSelection();
-        }
-      });
-    }
-    {
-      ToolItem clearButton = createClearSpinnerButton(container);
-      addJTableOperationSelectionListener(clearButton, new TableOperationRunnable() {
-        public void run(int row, int column) {
-          m_model.getColumn(column).m_minWidth = TableColumnDescription.DEFAULT_MIN_WIDTH;
-        }
-      });
-    }
-    // third row
-    {
-      Composite booleanContainer = new Composite(container, SWT.NONE);
-      GridDataFactory.create(booleanContainer).spanH(5).fillH();
-      GridLayoutFactory.create(booleanContainer).columns(2).noMargins();
-      {
-        m_columnPropertyEditable = new Button(booleanContainer, SWT.CHECK);
-        m_columnPropertyEditable.setText(ModelMessages.TableModelDialog_columnPropertiesEditable);
-        addJTableOperationSelectionListener(m_columnPropertyEditable, new TableOperationRunnable() {
-          public void run(int row, int column) {
-            m_model.getColumn(column).m_editable = m_columnPropertyEditable.getSelection();
-          }
-        });
-      }
-      {
-        m_columnPropertyResizable = new Button(booleanContainer, SWT.CHECK);
-        m_columnPropertyResizable.setText(ModelMessages.TableModelDialog_columnPropertiesResizable);
-        addJTableOperationSelectionListener(
-            m_columnPropertyResizable,
-            new TableOperationRunnable() {
-              public void run(int row, int column) {
-                m_model.getColumn(column).m_resizable = m_columnPropertyResizable.getSelection();
-              }
-            });
-      }
-    }
-    {
-      new Label(container, SWT.NONE).setText(
-          ModelMessages.TableModelDialog_columnPropertiesMaxWidth);
-      m_columnPropertyMaxWidth = new CSpinner(container, SWT.BORDER);
-      GridDataFactory.create(m_columnPropertyMaxWidth).hintHC(15);
-      m_columnPropertyMaxWidth.setRange(0, Integer.MAX_VALUE);
-      addJTableOperationSelectionListener(m_columnPropertyMaxWidth, new TableOperationRunnable() {
-        public void run(int row, int column) {
-          m_model.getColumn(column).m_maxWidth = m_columnPropertyMaxWidth.getSelection();
-        }
-      });
-    }
-    {
-      ToolItem clearButton = createClearSpinnerButton(container);
-      addJTableOperationSelectionListener(clearButton, new TableOperationRunnable() {
-        public void run(int row, int column) {
-          m_model.getColumn(column).m_maxWidth = TableColumnDescription.DEFAULT_MAX_WIDTH;
-        }
-      });
-    }
-  }
-
-  private ToolItem createClearSpinnerButton(Composite container) {
-    ToolBar toolBar = new ToolBar(container, SWT.FLAT);
-    ToolItem toolItem = new ToolItem(toolBar, SWT.NONE);
-    toolItem.setImage(DesignerPlugin.getImage("clear.gif"));
-    toolItem.setToolTipText(ModelMessages.TableModelDialog_resetValue);
-    return toolItem;
-  }
-
-  @Override
-  protected void configureShell(Shell newShell) {
-    super.configureShell(newShell);
-    newShell.setText(m_title);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static int getInsertColumnIndex(int column) {
-    return column != -1 ? column : 0;
-  }
-
-  private static int getInsertRowIndex(int row) {
-    return row != -1 ? row : 0;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Selection in JTable
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private int m_tableSelectedColumn;
-  private int m_tableSelectedRow;
-  private boolean m_processTableSelectionEvent = true;
-
-  private void trackTableSelection() {
-    m_tableSelectedRow = -1;
-    m_tableSelectedColumn = -1;
-    ListSelectionListener listener = new ListSelectionListener() {
-      public void valueChanged(ListSelectionEvent e) {
-        if (m_processTableSelectionEvent) {
-          m_tableSelectedColumn = m_table.getSelectedColumn();
-          m_tableSelectedRow = m_table.getSelectedRow();
-          updateControls();
-        }
-      }
-    };
-    m_table.getSelectionModel().addListSelectionListener(listener);
-    m_table.getColumnModel().getSelectionModel().addListSelectionListener(listener);
-    updateControls();
-    // XXX
-    final PropertyChangeListener columnWidthListener = new PropertyChangeListener() {
-      public void propertyChange(PropertyChangeEvent evt) {
-        if (m_processTableSelectionEvent) {
-          TableColumn column = (TableColumn) evt.getSource();
-          int index = column.getModelIndex();
-          m_model.getColumn(index).m_preferredWidth = (Integer) evt.getNewValue();
-          updateControls();
-        }
-      }
-    };
-    m_table.getColumnModel().addColumnModelListener(new TableColumnModelListener() {
-      public void columnAdded(TableColumnModelEvent e) {
-        TableColumnModel columnModel = (TableColumnModel) e.getSource();
-        int columnIndex = e.getToIndex();
-        columnModel.getColumn(columnIndex).addPropertyChangeListener(columnWidthListener);
-      }
-
-      public void columnSelectionChanged(ListSelectionEvent e) {
-      }
-
-      public void columnRemoved(TableColumnModelEvent e) {
-      }
-
-      public void columnMoved(TableColumnModelEvent e) {
-      }
-
-      public void columnMarginChanged(ChangeEvent e) {
-      }
-    });
-  }
-
-  private void setTableSelection(int row, int column) {
-    m_table.changeSelection(row, column, false, false);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Updates
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void updateControls() {
-    Display.getDefault().asyncExec(new Runnable() {
-      public void run() {
-        updateControlsInDisplay();
-      }
-    });
-  }
-
-  private void updateControlsInDisplay() {
-    int row = m_tableSelectedRow;
-    int column = m_tableSelectedColumn;
-    int rowCount = m_table.getRowCount();
-    int columnCount = m_table.getColumnCount();
-    //
-    m_columnCountSpinner.setSelection(m_model.getColumnCount());
-    m_rowCountSpinner.setSelection(m_model.getRowCount());
-    // column
-    m_deleteColumnButton.setEnabled(column != -1);
-    m_moveColumnLeftButton.setEnabled(column > 0 && column < columnCount);
-    m_moveColumnRightButton.setEnabled(column >= 0 && column < columnCount - 1);
-    // row
-    m_deleteRowButton.setEnabled(row != -1);
-    m_moveRowUpButton.setEnabled(row > 0 && row < rowCount);
-    m_moveRowDownButton.setEnabled(row >= 0 && row < rowCount - 1);
-    // column properties
-    UiUtils.changeControlEnable(m_columnPropertiesComposite, column != -1);
-    if (column != -1 && column < columnCount) {
-      TableColumnDescription columnDescription = m_model.getColumn(column);
-      m_columnPropertyNo.setText("" + column);
-      if (!m_columnPropertyTitle.getText().equals(columnDescription.m_name)) {
-        m_columnPropertyTitle.setText(columnDescription.m_name);
-      }
-      m_columnPropertyType.setText(COLUMN_TYPES.inverse().get(columnDescription.m_class));
-      m_columnPropertyPrefWidth.setSelection(columnDescription.m_preferredWidth);
-      m_columnPropertyMinWidth.setSelection(columnDescription.m_minWidth);
-      m_columnPropertyMaxWidth.setSelection(columnDescription.m_maxWidth);
-      m_columnPropertyEditable.setSelection(columnDescription.m_editable);
-      m_columnPropertyResizable.setSelection(columnDescription.m_resizable);
-    }
-  }
-
-  private interface TableOperationRunnable {
-    void run(int row, int column);
-  }
-
-  private final TableOperationRunnable DEFAULT_TABLE_UPDATE = new TableOperationRunnable() {
-    public void run(int row, int column) {
-      setTableSelection(row, column);
-      updateControls();
-    }
-  };
-
-  private void addJTableOperationListener(Widget eventTarget,
-      int eventType,
-      TableOperationRunnable operation) {
-    addJTableOperationSelectionListener(eventTarget, eventType, operation, DEFAULT_TABLE_UPDATE);
-  }
-
-  private void addJTableOperationSelectionListener(Widget eventTarget,
-      TableOperationRunnable operation) {
-    addJTableOperationSelectionListener(eventTarget, operation, DEFAULT_TABLE_UPDATE);
-  }
-
-  private void addJTableOperationSelectionListener(Widget eventTarget,
-      final TableOperationRunnable operation,
-      final TableOperationRunnable tableUpdateRunnable) {
-    addJTableOperationSelectionListener(eventTarget, SWT.Selection, operation, tableUpdateRunnable);
-  }
-
-  private void addJTableOperationSelectionListener(Widget eventTarget,
-      int eventType,
-      final TableOperationRunnable operation,
-      final TableOperationRunnable tableUpdateRunnable) {
-    eventTarget.addListener(eventType, new Listener() {
-      public void handleEvent(Event event) {
-        final int row = m_table.getSelectedRow();
-        final int column = m_table.getSelectedColumn();
-        operation.run(row, column);
-        // update JTable and controls
-        EventQueue.invokeLater(new Runnable() {
-          public void run() {
-            updateTableModel();
-            tableUpdateRunnable.run(row, column);
-            updateControls();
-          }
-        });
-      }
-    });
-  }
-
-  private void updateTableModel() {
-    m_processTableSelectionEvent = false;
-    try {
-      m_table.tableChanged(null);
-      m_model.applyModel(m_table);
-    } finally {
-      m_processTableSelectionEvent = true;
-    }
-  }
+	private static final BiMap<String, Class<?>> COLUMN_TYPES = HashBiMap.create();
+	static {
+		COLUMN_TYPES.put("Object", Object.class);
+		COLUMN_TYPES.put("String", String.class);
+		COLUMN_TYPES.put("Boolean", Boolean.class);
+		COLUMN_TYPES.put("Integer", Integer.class);
+		COLUMN_TYPES.put("Byte", Byte.class);
+		COLUMN_TYPES.put("Short", Short.class);
+		COLUMN_TYPES.put("Long", Long.class);
+		COLUMN_TYPES.put("Float", Float.class);
+		COLUMN_TYPES.put("Double", Double.class);
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance fields
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final String m_title;
+	private final TableModelDescription m_model;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public TableModelDialog(Shell parentShell, String title, TableModelDescription model) {
+		super(parentShell, DesignerPlugin.getDefault());
+		m_title = title;
+		m_model = model;
+		setShellStyle(SWT.RESIZE | SWT.TITLE | SWT.APPLICATION_MODAL);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Composite m_tableComposite;
+	private TitledComposite m_columnsComposite;
+	private TitledComposite m_rowsComposite;
+	private TitledComposite m_columnPropertiesComposite;
+	private EmbeddedSwingComposite2 m_swingComposite;
+	private JTable m_table;
+	// columns
+	private CSpinner m_columnCountSpinner;
+	private Button m_insertColumnButton;
+	private Button m_deleteColumnButton;
+	private Button m_moveColumnLeftButton;
+	private Button m_moveColumnRightButton;
+	// rows
+	private CSpinner m_rowCountSpinner;
+	private Button m_insertRowButton;
+	private Button m_deleteRowButton;
+	private Button m_moveRowUpButton;
+	private Button m_moveRowDownButton;
+	// column properties
+	private Text m_columnPropertyNo;
+	private Text m_columnPropertyTitle;
+	private Combo m_columnPropertyType;
+	private Button m_columnPropertyEditable;
+	private Button m_columnPropertyResizable;
+	private Label m_columnPropertyValuesLabel;
+	private Text m_columnPropertyValues;
+	private Button m_columnPropertyValuesEdit;
+	private CSpinner m_columnPropertyPrefWidth;
+	private CSpinner m_columnPropertyMinWidth;
+	private CSpinner m_columnPropertyMaxWidth;
+
+	@Override
+	protected Control createDialogArea(Composite parent) {
+		Composite area = (Composite) super.createDialogArea(parent);
+		GridLayoutFactory.create(area).columns(2);
+		// create GUI elements
+		createJTableComposite(area);
+		createColumnsComposite(area);
+		createRowsComposite(area);
+		createColumnPropertiesComposite(area);
+		// set constraints
+		GridDataFactory.create(m_tableComposite).spanV(2).hintC(70, 20).grab().fill();
+		GridDataFactory.create(m_columnsComposite).fill();
+		GridDataFactory.create(m_rowsComposite).fill();
+		GridDataFactory.create(m_columnPropertiesComposite).grabH().fill();
+		//
+		m_swingComposite.populate();
+		return area;
+	}
+
+	private void createJTableComposite(Composite parent) {
+		m_tableComposite = new Composite(parent, SWT.NONE);
+		GridLayoutFactory.create(m_tableComposite).noMargins();
+		new Label(m_tableComposite, SWT.NONE).setText(ModelMessages.TableModelDialog_itemsLabel);
+		{
+			m_swingComposite = new EmbeddedSwingComposite2(m_tableComposite, SWT.NONE) {
+				@Override
+				protected JComponent createSwingComponent() {
+					TableModel model = m_model.createTableModel();
+					m_table = new JTable(model);
+					m_table.setCellSelectionEnabled(true);
+					m_table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
+					updateTableModel();
+					trackTableSelection();
+					return new JScrollPane(m_table);
+				}
+			};
+			GridDataFactory.create(m_swingComposite).grab().fill();
+		}
+		{
+			Label label = new Label(m_tableComposite, SWT.WRAP);
+			GridDataFactory.create(label).grabH().fill();
+			label.setText(ModelMessages.TableModelDialog_hint);
+		}
+	}
+
+	private void createColumnsComposite(Composite parent) {
+		m_columnsComposite =
+				new TitledComposite(parent, SWT.NONE, ModelMessages.TableModelDialog_columnsTitle);
+		// content container
+		Composite container = m_columnsComposite.getContent();
+		GridLayoutFactory.create(container).columns(2).noMargins();
+		// Count
+		{
+			new Label(container, SWT.NONE).setText(ModelMessages.TableModelDialog_columnsCount);
+			m_columnCountSpinner = new CSpinner(container, SWT.BORDER);
+			GridDataFactory.create(m_columnCountSpinner).grabH().fillH().hintHC(5);
+			addJTableOperationSelectionListener(m_columnCountSpinner, new TableOperationRunnable() {
+				public void run(int row, int column) {
+					m_model.setColumnCount(m_columnCountSpinner.getSelection());
+				}
+			});
+		}
+		// Insert
+		{
+			m_insertColumnButton = new Button(container, SWT.NONE);
+			GridDataFactory.create(m_insertColumnButton).spanH(2).hintHC(13).alignHC();
+			m_insertColumnButton.setText(ModelMessages.TableModelDialog_columnInsertButton);
+			addJTableOperationSelectionListener(m_insertColumnButton, new TableOperationRunnable() {
+				public void run(int row, int column) {
+					m_model.insertColumn(getInsertColumnIndex(column));
+				}
+			}, new TableOperationRunnable() {
+				public void run(int row, int column) {
+					setTableSelection(row, getInsertColumnIndex(column));
+				}
+			});
+		}
+		// Delete
+		{
+			m_deleteColumnButton = new Button(container, SWT.NONE);
+			GridDataFactory.create(m_deleteColumnButton).spanH(2).hintHC(13).alignHC();
+			m_deleteColumnButton.setText(ModelMessages.TableModelDialog_columnDeleteButton);
+			addJTableOperationSelectionListener(m_deleteColumnButton, new TableOperationRunnable() {
+				public void run(int row, int column) {
+					m_model.removeColumn(column);
+				}
+			}, new TableOperationRunnable() {
+				public void run(int row, int column) {
+					if (column < m_table.getColumnCount()) {
+						setTableSelection(row, column);
+					} else {
+						setTableSelection(row, column - 1);
+					}
+				}
+			});
+		}
+		// Move Left
+		{
+			m_moveColumnLeftButton = new Button(container, SWT.NONE);
+			GridDataFactory.create(m_moveColumnLeftButton).spanH(2).hintHC(13).alignHC();
+			m_moveColumnLeftButton.setText(ModelMessages.TableModelDialog_columnMoveLeftButton);
+			addJTableOperationSelectionListener(m_moveColumnLeftButton, new TableOperationRunnable() {
+				public void run(int row, int column) {
+					m_model.moveColumn(column, column - 1);
+				}
+			}, new TableOperationRunnable() {
+				public void run(int row, int column) {
+					setTableSelection(row, column - 1);
+				}
+			});
+		}
+		// Move Right
+		{
+			m_moveColumnRightButton = new Button(container, SWT.NONE);
+			GridDataFactory.create(m_moveColumnRightButton).spanH(2).hintHC(13).alignHC();
+			m_moveColumnRightButton.setText(ModelMessages.TableModelDialog_columnMoveRightButton);
+			addJTableOperationSelectionListener(m_moveColumnRightButton, new TableOperationRunnable() {
+				public void run(int row, int column) {
+					m_model.moveColumn(column, column + 1);
+				}
+			}, new TableOperationRunnable() {
+				public void run(int row, int column) {
+					setTableSelection(row, column + 1);
+				}
+			});
+		}
+	}
+
+	private void createRowsComposite(Composite parent) {
+		m_rowsComposite =
+				new TitledComposite(parent, SWT.NONE, ModelMessages.TableModelDialog_rowsTitle);
+		// content container
+		Composite container = m_rowsComposite.getContent();
+		GridLayoutFactory.create(container).columns(2).noMargins();
+		// Count
+		{
+			new Label(container, SWT.NONE).setText(ModelMessages.TableModelDialog_rowsCount);
+			m_rowCountSpinner = new CSpinner(container, SWT.BORDER);
+			GridDataFactory.create(m_rowCountSpinner).grabH().fillH().hintHC(5);
+			addJTableOperationSelectionListener(m_rowCountSpinner, new TableOperationRunnable() {
+				public void run(int row, int column) {
+					m_model.setRowCount(m_rowCountSpinner.getSelection());
+				}
+			});
+		}
+		// Insert
+		{
+			m_insertRowButton = new Button(container, SWT.NONE);
+			GridDataFactory.create(m_insertRowButton).spanH(2).hintHC(13).alignHC();
+			m_insertRowButton.setText(ModelMessages.TableModelDialog_rowInsertButton);
+			addJTableOperationSelectionListener(m_insertRowButton, new TableOperationRunnable() {
+				public void run(int row, int column) {
+					m_model.insertRow(getInsertRowIndex(row));
+				}
+			}, new TableOperationRunnable() {
+				public void run(int row, int column) {
+					setTableSelection(getInsertRowIndex(row), column);
+				}
+			});
+		}
+		// Delete
+		{
+			m_deleteRowButton = new Button(container, SWT.NONE);
+			GridDataFactory.create(m_deleteRowButton).spanH(2).hintHC(13).alignHC();
+			m_deleteRowButton.setText(ModelMessages.TableModelDialog_rowDeleteButton);
+			addJTableOperationSelectionListener(m_deleteRowButton, new TableOperationRunnable() {
+				public void run(int row, int column) {
+					m_model.removeRow(row);
+				}
+			}, new TableOperationRunnable() {
+				public void run(int row, int column) {
+					if (row < m_table.getRowCount()) {
+						setTableSelection(row, column);
+					} else {
+						setTableSelection(row - 1, column);
+					}
+				}
+			});
+		}
+		// Move Up
+		{
+			m_moveRowUpButton = new Button(container, SWT.NONE);
+			GridDataFactory.create(m_moveRowUpButton).spanH(2).hintHC(13).alignHC();
+			m_moveRowUpButton.setText(ModelMessages.TableModelDialog_rowMoveUpButton);
+			addJTableOperationSelectionListener(m_moveRowUpButton, new TableOperationRunnable() {
+				public void run(int row, int column) {
+					m_model.moveRow(row, row - 1);
+				}
+			}, new TableOperationRunnable() {
+				public void run(int row, int column) {
+					setTableSelection(row - 1, column);
+				}
+			});
+		}
+		// Move Down
+		{
+			m_moveRowDownButton = new Button(container, SWT.NONE);
+			GridDataFactory.create(m_moveRowDownButton).spanH(2).hintHC(13).alignHC();
+			m_moveRowDownButton.setText(ModelMessages.TableModelDialog_rowMoveDownButton);
+			addJTableOperationSelectionListener(m_moveRowDownButton, new TableOperationRunnable() {
+				public void run(int row, int column) {
+					m_model.moveRow(row, row + 1);
+				}
+			}, new TableOperationRunnable() {
+				public void run(int row, int column) {
+					setTableSelection(row + 1, column);
+				}
+			});
+		}
+	}
+
+	private void createColumnPropertiesComposite(Composite parent) {
+		m_columnPropertiesComposite =
+				new TitledComposite(parent, SWT.NONE, ModelMessages.TableModelDialog_columnProperties);
+		// content container
+		Composite container = m_columnPropertiesComposite.getContent();
+		GridLayoutFactory.create(container).columns(8).noMargins();
+		// header
+		{
+			Label label = new Label(container, SWT.NONE);
+			GridDataFactory.create(label).spanH(8);
+			label.setText(ModelMessages.TableModelDialog_columnPropertiesHint);
+		}
+		// first row
+		{
+			new Label(container, SWT.NONE).setText(ModelMessages.TableModelDialog_columnPropertiesNo);
+			m_columnPropertyNo = new Text(container, SWT.BORDER | SWT.READ_ONLY);
+			GridDataFactory.create(m_columnPropertyNo).hintHC(6).fillH();
+		}
+		{
+			new Label(container, SWT.NONE).setText(ModelMessages.TableModelDialog_columnPropertiesTitle);
+			m_columnPropertyTitle = new Text(container, SWT.BORDER);
+			GridDataFactory.create(m_columnPropertyTitle).spanH(2).hintHC(40).fillH();
+			addJTableOperationListener(m_columnPropertyTitle, SWT.Modify, new TableOperationRunnable() {
+				public void run(int row, int column) {
+					m_model.getColumn(column).m_name = m_columnPropertyTitle.getText();
+				}
+			});
+		}
+		{
+			new Label(container, SWT.NONE).setText(
+					ModelMessages.TableModelDialog_columnPropertiesPrefWidth);
+			m_columnPropertyPrefWidth = new CSpinner(container, SWT.BORDER);
+			GridDataFactory.create(m_columnPropertyPrefWidth).hintHC(15);
+			m_columnPropertyPrefWidth.setRange(0, Integer.MAX_VALUE);
+			addJTableOperationSelectionListener(m_columnPropertyPrefWidth, new TableOperationRunnable() {
+				public void run(int row, int column) {
+					m_model.getColumn(column).m_preferredWidth = m_columnPropertyPrefWidth.getSelection();
+				}
+			});
+		}
+		{
+			ToolItem clearButton = createClearSpinnerButton(container);
+			addJTableOperationSelectionListener(clearButton, new TableOperationRunnable() {
+				public void run(int row, int column) {
+					m_model.getColumn(column).m_preferredWidth =
+							TableColumnDescription.DEFAULT_PREFERRED_WIDTH;
+				}
+			});
+		}
+		// second row
+		{
+			new Label(container, SWT.NONE).setText(ModelMessages.TableModelDialog_columnPropertiesType);
+			m_columnPropertyType = new Combo(container, SWT.BORDER | SWT.READ_ONLY);
+			GridDataFactory.create(m_columnPropertyType).hintHC(10).fillH();
+			// items
+			for (String typeTitle : COLUMN_TYPES.keySet()) {
+				m_columnPropertyType.add(typeTitle);
+			}
+			m_columnPropertyType.setVisibleItemCount(COLUMN_TYPES.size());
+			// listener
+			addJTableOperationSelectionListener(m_columnPropertyType, new TableOperationRunnable() {
+				public void run(int row, int column) {
+					String typeTitle = m_columnPropertyType.getText();
+					Class<?> type = COLUMN_TYPES.get(typeTitle);
+					m_model.setColumnType(column, type);
+				}
+			});
+		}
+		{
+			m_columnPropertyValuesLabel = new Label(container, SWT.NONE);
+			m_columnPropertyValuesLabel.setText(ModelMessages.TableModelDialog_columnPropertiesValues);
+			m_columnPropertyValuesLabel.setEnabled(false);
+			m_columnPropertyValuesLabel.setData(UiUtils.KEY_IGNORE_HIERARCHY_ENABLED, true);
+			//
+			m_columnPropertyValues = new Text(container, SWT.BORDER);
+			GridDataFactory.create(m_columnPropertyValues).hintHC(30);
+			m_columnPropertyValues.setEnabled(false);
+			m_columnPropertyValues.setData(UiUtils.KEY_IGNORE_HIERARCHY_ENABLED, true);
+		}
+		{
+			m_columnPropertyValuesEdit = new Button(container, SWT.NONE);
+			GridDataFactory.create(m_columnPropertyValuesEdit).hintHC(10);
+			m_columnPropertyValuesEdit.setText(ModelMessages.TableModelDialog_columnPropertiesValuesEdit);
+			m_columnPropertyValuesEdit.setEnabled(false);
+			m_columnPropertyValuesEdit.setData(UiUtils.KEY_IGNORE_HIERARCHY_ENABLED, true);
+		}
+		{
+			new Label(container, SWT.NONE).setText(
+					ModelMessages.TableModelDialog_columnPropertiesMinWidth);
+			m_columnPropertyMinWidth = new CSpinner(container, SWT.BORDER);
+			GridDataFactory.create(m_columnPropertyMinWidth).hintHC(15);
+			m_columnPropertyMinWidth.setRange(0, Integer.MAX_VALUE);
+			addJTableOperationSelectionListener(m_columnPropertyMinWidth, new TableOperationRunnable() {
+				public void run(int row, int column) {
+					m_model.getColumn(column).m_minWidth = m_columnPropertyMinWidth.getSelection();
+				}
+			});
+		}
+		{
+			ToolItem clearButton = createClearSpinnerButton(container);
+			addJTableOperationSelectionListener(clearButton, new TableOperationRunnable() {
+				public void run(int row, int column) {
+					m_model.getColumn(column).m_minWidth = TableColumnDescription.DEFAULT_MIN_WIDTH;
+				}
+			});
+		}
+		// third row
+		{
+			Composite booleanContainer = new Composite(container, SWT.NONE);
+			GridDataFactory.create(booleanContainer).spanH(5).fillH();
+			GridLayoutFactory.create(booleanContainer).columns(2).noMargins();
+			{
+				m_columnPropertyEditable = new Button(booleanContainer, SWT.CHECK);
+				m_columnPropertyEditable.setText(ModelMessages.TableModelDialog_columnPropertiesEditable);
+				addJTableOperationSelectionListener(m_columnPropertyEditable, new TableOperationRunnable() {
+					public void run(int row, int column) {
+						m_model.getColumn(column).m_editable = m_columnPropertyEditable.getSelection();
+					}
+				});
+			}
+			{
+				m_columnPropertyResizable = new Button(booleanContainer, SWT.CHECK);
+				m_columnPropertyResizable.setText(ModelMessages.TableModelDialog_columnPropertiesResizable);
+				addJTableOperationSelectionListener(
+						m_columnPropertyResizable,
+						new TableOperationRunnable() {
+							public void run(int row, int column) {
+								m_model.getColumn(column).m_resizable = m_columnPropertyResizable.getSelection();
+							}
+						});
+			}
+		}
+		{
+			new Label(container, SWT.NONE).setText(
+					ModelMessages.TableModelDialog_columnPropertiesMaxWidth);
+			m_columnPropertyMaxWidth = new CSpinner(container, SWT.BORDER);
+			GridDataFactory.create(m_columnPropertyMaxWidth).hintHC(15);
+			m_columnPropertyMaxWidth.setRange(0, Integer.MAX_VALUE);
+			addJTableOperationSelectionListener(m_columnPropertyMaxWidth, new TableOperationRunnable() {
+				public void run(int row, int column) {
+					m_model.getColumn(column).m_maxWidth = m_columnPropertyMaxWidth.getSelection();
+				}
+			});
+		}
+		{
+			ToolItem clearButton = createClearSpinnerButton(container);
+			addJTableOperationSelectionListener(clearButton, new TableOperationRunnable() {
+				public void run(int row, int column) {
+					m_model.getColumn(column).m_maxWidth = TableColumnDescription.DEFAULT_MAX_WIDTH;
+				}
+			});
+		}
+	}
+
+	private ToolItem createClearSpinnerButton(Composite container) {
+		ToolBar toolBar = new ToolBar(container, SWT.FLAT);
+		ToolItem toolItem = new ToolItem(toolBar, SWT.NONE);
+		toolItem.setImage(DesignerPlugin.getImage("clear.gif"));
+		toolItem.setToolTipText(ModelMessages.TableModelDialog_resetValue);
+		return toolItem;
+	}
+
+	@Override
+	protected void configureShell(Shell newShell) {
+		super.configureShell(newShell);
+		newShell.setText(m_title);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static int getInsertColumnIndex(int column) {
+		return column != -1 ? column : 0;
+	}
+
+	private static int getInsertRowIndex(int row) {
+		return row != -1 ? row : 0;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Selection in JTable
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private int m_tableSelectedColumn;
+	private int m_tableSelectedRow;
+	private boolean m_processTableSelectionEvent = true;
+
+	private void trackTableSelection() {
+		m_tableSelectedRow = -1;
+		m_tableSelectedColumn = -1;
+		ListSelectionListener listener = new ListSelectionListener() {
+			public void valueChanged(ListSelectionEvent e) {
+				if (m_processTableSelectionEvent) {
+					m_tableSelectedColumn = m_table.getSelectedColumn();
+					m_tableSelectedRow = m_table.getSelectedRow();
+					updateControls();
+				}
+			}
+		};
+		m_table.getSelectionModel().addListSelectionListener(listener);
+		m_table.getColumnModel().getSelectionModel().addListSelectionListener(listener);
+		updateControls();
+		// XXX
+		final PropertyChangeListener columnWidthListener = new PropertyChangeListener() {
+			public void propertyChange(PropertyChangeEvent evt) {
+				if (m_processTableSelectionEvent) {
+					TableColumn column = (TableColumn) evt.getSource();
+					int index = column.getModelIndex();
+					m_model.getColumn(index).m_preferredWidth = (Integer) evt.getNewValue();
+					updateControls();
+				}
+			}
+		};
+		m_table.getColumnModel().addColumnModelListener(new TableColumnModelListener() {
+			public void columnAdded(TableColumnModelEvent e) {
+				TableColumnModel columnModel = (TableColumnModel) e.getSource();
+				int columnIndex = e.getToIndex();
+				columnModel.getColumn(columnIndex).addPropertyChangeListener(columnWidthListener);
+			}
+
+			public void columnSelectionChanged(ListSelectionEvent e) {
+			}
+
+			public void columnRemoved(TableColumnModelEvent e) {
+			}
+
+			public void columnMoved(TableColumnModelEvent e) {
+			}
+
+			public void columnMarginChanged(ChangeEvent e) {
+			}
+		});
+	}
+
+	private void setTableSelection(int row, int column) {
+		m_table.changeSelection(row, column, false, false);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Updates
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void updateControls() {
+		Display.getDefault().asyncExec(new Runnable() {
+			public void run() {
+				updateControlsInDisplay();
+			}
+		});
+	}
+
+	private void updateControlsInDisplay() {
+		int row = m_tableSelectedRow;
+		int column = m_tableSelectedColumn;
+		int rowCount = m_table.getRowCount();
+		int columnCount = m_table.getColumnCount();
+		//
+		m_columnCountSpinner.setSelection(m_model.getColumnCount());
+		m_rowCountSpinner.setSelection(m_model.getRowCount());
+		// column
+		m_deleteColumnButton.setEnabled(column != -1);
+		m_moveColumnLeftButton.setEnabled(column > 0 && column < columnCount);
+		m_moveColumnRightButton.setEnabled(column >= 0 && column < columnCount - 1);
+		// row
+		m_deleteRowButton.setEnabled(row != -1);
+		m_moveRowUpButton.setEnabled(row > 0 && row < rowCount);
+		m_moveRowDownButton.setEnabled(row >= 0 && row < rowCount - 1);
+		// column properties
+		UiUtils.changeControlEnable(m_columnPropertiesComposite, column != -1);
+		if (column != -1 && column < columnCount) {
+			TableColumnDescription columnDescription = m_model.getColumn(column);
+			m_columnPropertyNo.setText("" + column);
+			if (!m_columnPropertyTitle.getText().equals(columnDescription.m_name)) {
+				m_columnPropertyTitle.setText(columnDescription.m_name);
+			}
+			m_columnPropertyType.setText(COLUMN_TYPES.inverse().get(columnDescription.m_class));
+			m_columnPropertyPrefWidth.setSelection(columnDescription.m_preferredWidth);
+			m_columnPropertyMinWidth.setSelection(columnDescription.m_minWidth);
+			m_columnPropertyMaxWidth.setSelection(columnDescription.m_maxWidth);
+			m_columnPropertyEditable.setSelection(columnDescription.m_editable);
+			m_columnPropertyResizable.setSelection(columnDescription.m_resizable);
+		}
+	}
+
+	private interface TableOperationRunnable {
+		void run(int row, int column);
+	}
+
+	private final TableOperationRunnable DEFAULT_TABLE_UPDATE = new TableOperationRunnable() {
+		public void run(int row, int column) {
+			setTableSelection(row, column);
+			updateControls();
+		}
+	};
+
+	private void addJTableOperationListener(Widget eventTarget,
+			int eventType,
+			TableOperationRunnable operation) {
+		addJTableOperationSelectionListener(eventTarget, eventType, operation, DEFAULT_TABLE_UPDATE);
+	}
+
+	private void addJTableOperationSelectionListener(Widget eventTarget,
+			TableOperationRunnable operation) {
+		addJTableOperationSelectionListener(eventTarget, operation, DEFAULT_TABLE_UPDATE);
+	}
+
+	private void addJTableOperationSelectionListener(Widget eventTarget,
+			final TableOperationRunnable operation,
+			final TableOperationRunnable tableUpdateRunnable) {
+		addJTableOperationSelectionListener(eventTarget, SWT.Selection, operation, tableUpdateRunnable);
+	}
+
+	private void addJTableOperationSelectionListener(Widget eventTarget,
+			int eventType,
+			final TableOperationRunnable operation,
+			final TableOperationRunnable tableUpdateRunnable) {
+		eventTarget.addListener(eventType, new Listener() {
+			public void handleEvent(Event event) {
+				final int row = m_table.getSelectedRow();
+				final int column = m_table.getSelectedColumn();
+				operation.run(row, column);
+				// update JTable and controls
+				EventQueue.invokeLater(new Runnable() {
+					public void run() {
+						updateTableModel();
+						tableUpdateRunnable.run(row, column);
+						updateControls();
+					}
+				});
+			}
+		});
+	}
+
+	private void updateTableModel() {
+		m_processTableSelectionEvent = false;
+		try {
+			m_table.tableChanged(null);
+			m_model.applyModel(m_table);
+		} finally {
+			m_processTableSelectionEvent = true;
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/models/table/TableModelEvaluator.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/models/table/TableModelEvaluator.java
index 088004b9c..ea5fcbcdc 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/models/table/TableModelEvaluator.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/models/table/TableModelEvaluator.java
@@ -56,95 +56,95 @@ public Class getColumnClass(int columnIndex) {
  * @coverage swing.model
  */
 public final class TableModelEvaluator implements IExpressionEvaluator {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IExpressionEvaluator
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public Object evaluate(EvaluationContext context,
-      Expression expression,
-      ITypeBinding typeBinding,
-      String typeQualifiedName) throws Exception {
-    if (expression instanceof ClassInstanceCreation) {
-      ClassInstanceCreation creation = (ClassInstanceCreation) expression;
-      if (isAnonymous_DefaultTableModel(creation)) {
-        List<Expression> arguments = DomGenerics.arguments(creation);
-        Object[][] values = (Object[][]) AstEvaluationEngine.evaluate(context, arguments.get(0));
-        Object[] columnNames = (Object[]) AstEvaluationEngine.evaluate(context, arguments.get(1));
-        final Class<?>[] columnTypes = getAnonymousColumnTypes(context, creation);
-        final boolean[] columnEditables = getAnonymousColumnEditables(context, creation);
-        return new DefaultTableModel(values, columnNames) {
-          private static final long serialVersionUID = 0L;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IExpressionEvaluator
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public Object evaluate(EvaluationContext context,
+			Expression expression,
+			ITypeBinding typeBinding,
+			String typeQualifiedName) throws Exception {
+		if (expression instanceof ClassInstanceCreation) {
+			ClassInstanceCreation creation = (ClassInstanceCreation) expression;
+			if (isAnonymous_DefaultTableModel(creation)) {
+				List<Expression> arguments = DomGenerics.arguments(creation);
+				Object[][] values = (Object[][]) AstEvaluationEngine.evaluate(context, arguments.get(0));
+				Object[] columnNames = (Object[]) AstEvaluationEngine.evaluate(context, arguments.get(1));
+				final Class<?>[] columnTypes = getAnonymousColumnTypes(context, creation);
+				final boolean[] columnEditables = getAnonymousColumnEditables(context, creation);
+				return new DefaultTableModel(values, columnNames) {
+					private static final long serialVersionUID = 0L;
 
-          @Override
-          public Class<?> getColumnClass(int columnIndex) {
-            if (columnTypes != null) {
-              return columnTypes[columnIndex];
-            }
-            return super.getColumnClass(columnIndex);
-          }
+					@Override
+					public Class<?> getColumnClass(int columnIndex) {
+						if (columnTypes != null) {
+							return columnTypes[columnIndex];
+						}
+						return super.getColumnClass(columnIndex);
+					}
 
-          @Override
-          public boolean isCellEditable(int row, int column) {
-            if (columnEditables != null) {
-              return columnEditables[column];
-            }
-            return super.isCellEditable(row, column);
-          }
-        };
-      }
-    }
-    // we don't understand given expression
-    return AstEvaluationEngine.UNKNOWN;
-  }
+					@Override
+					public boolean isCellEditable(int row, int column) {
+						if (columnEditables != null) {
+							return columnEditables[column];
+						}
+						return super.isCellEditable(row, column);
+					}
+				};
+			}
+		}
+		// we don't understand given expression
+		return AstEvaluationEngine.UNKNOWN;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static boolean isAnonymous_DefaultTableModel(ClassInstanceCreation creation) {
-    return creation.getAnonymousClassDeclaration() != null
-        && AstNodeUtils.isSuccessorOf(
-            AstNodeUtils.getTypeBinding(creation),
-            DefaultTableModel.class)
-        && AstNodeUtils.getCreationSignature(creation).equals(
-            "<init>(java.lang.Object[][],java.lang.Object[])");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static boolean isAnonymous_DefaultTableModel(ClassInstanceCreation creation) {
+		return creation.getAnonymousClassDeclaration() != null
+				&& AstNodeUtils.isSuccessorOf(
+						AstNodeUtils.getTypeBinding(creation),
+						DefaultTableModel.class)
+				&& AstNodeUtils.getCreationSignature(creation).equals(
+						"<init>(java.lang.Object[][],java.lang.Object[])");
+	}
 
-  private static Class<?>[] getAnonymousColumnTypes(EvaluationContext context,
-      ClassInstanceCreation creation) throws Exception {
-    return (Class<?>[]) getAnonymousFieldValue(
-        context,
-        creation,
-        "columnTypes",
-        "java.lang.Class[]");
-  }
+	private static Class<?>[] getAnonymousColumnTypes(EvaluationContext context,
+			ClassInstanceCreation creation) throws Exception {
+		return (Class<?>[]) getAnonymousFieldValue(
+				context,
+				creation,
+				"columnTypes",
+				"java.lang.Class[]");
+	}
 
-  private static boolean[] getAnonymousColumnEditables(EvaluationContext context,
-      ClassInstanceCreation creation) throws Exception {
-    return (boolean[]) getAnonymousFieldValue(context, creation, "columnEditables", "boolean[]");
-  }
+	private static boolean[] getAnonymousColumnEditables(EvaluationContext context,
+			ClassInstanceCreation creation) throws Exception {
+		return (boolean[]) getAnonymousFieldValue(context, creation, "columnEditables", "boolean[]");
+	}
 
-  private static Object getAnonymousFieldValue(EvaluationContext context,
-      ClassInstanceCreation creation,
-      String fieldName,
-      String fieldTypeName) throws Exception {
-    AnonymousClassDeclaration anonymous = creation.getAnonymousClassDeclaration();
-    List<BodyDeclaration> declarations = DomGenerics.bodyDeclarations(anonymous);
-    if (!declarations.isEmpty() && declarations.get(0) instanceof FieldDeclaration) {
-      FieldDeclaration field = (FieldDeclaration) declarations.get(0);
-      if (field.fragments().size() == 1 && hasTypeName(field, fieldTypeName)) {
-        VariableDeclaration fragment = (VariableDeclaration) field.fragments().get(0);
-        if (fragment.getName().getIdentifier().equals(fieldName)) {
-          return AstEvaluationEngine.evaluate(context, fragment.getInitializer());
-        }
-      }
-    }
-    return null;
-  }
+	private static Object getAnonymousFieldValue(EvaluationContext context,
+			ClassInstanceCreation creation,
+			String fieldName,
+			String fieldTypeName) throws Exception {
+		AnonymousClassDeclaration anonymous = creation.getAnonymousClassDeclaration();
+		List<BodyDeclaration> declarations = DomGenerics.bodyDeclarations(anonymous);
+		if (!declarations.isEmpty() && declarations.get(0) instanceof FieldDeclaration) {
+			FieldDeclaration field = (FieldDeclaration) declarations.get(0);
+			if (field.fragments().size() == 1 && hasTypeName(field, fieldTypeName)) {
+				VariableDeclaration fragment = (VariableDeclaration) field.fragments().get(0);
+				if (fragment.getName().getIdentifier().equals(fieldName)) {
+					return AstEvaluationEngine.evaluate(context, fragment.getInitializer());
+				}
+			}
+		}
+		return null;
+	}
 
-  private static boolean hasTypeName(FieldDeclaration field, String typeName) {
-    return AstNodeUtils.getFullyQualifiedName(field.getType(), false).equals(typeName);
-  }
+	private static boolean hasTypeName(FieldDeclaration field, String typeName) {
+		return AstNodeUtils.getFullyQualifiedName(field.getType(), false).equals(typeName);
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/models/table/TableModelPropertyEditor.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/models/table/TableModelPropertyEditor.java
index caf8087cc..791e40dd4 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/models/table/TableModelPropertyEditor.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/models/table/TableModelPropertyEditor.java
@@ -38,80 +38,80 @@
  * @coverage swing.property.editor
  */
 public final class TableModelPropertyEditor extends TextDialogPropertyEditor {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final PropertyEditor INSTANCE = new TableModelPropertyEditor();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final PropertyEditor INSTANCE = new TableModelPropertyEditor();
 
-  private TableModelPropertyEditor() {
-  }
+	private TableModelPropertyEditor() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getText(Property property) throws Exception {
-    if (property.isModified()) {
-      Object value = property.getValue();
-      if (value instanceof TableModel) {
-        TableModel tableModel = (TableModel) value;
-        return tableModel.getColumnCount() + " columns, " + tableModel.getRowCount() + " rows";
-      }
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getText(Property property) throws Exception {
+		if (property.isModified()) {
+			Object value = property.getValue();
+			if (value instanceof TableModel) {
+				TableModel tableModel = (TableModel) value;
+				return tableModel.getColumnCount() + " columns, " + tableModel.getRowCount() + " rows";
+			}
+		}
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void openDialog(Property property) throws Exception {
-    GenericProperty genericProperty = (GenericProperty) property;
-    JTable table = (JTable) genericProperty.getJavaInfo().getObject();
-    TableModelDescription model = new TableModelDescription(table);
-    TableModelDialog dialog =
-        new TableModelDialog(DesignerPlugin.getShell(), property.getTitle(), model);
-    // open dialog
-    if (dialog.open() == Window.OK) {
-      setModel(genericProperty, model);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void openDialog(Property property) throws Exception {
+		GenericProperty genericProperty = (GenericProperty) property;
+		JTable table = (JTable) genericProperty.getJavaInfo().getObject();
+		TableModelDescription model = new TableModelDescription(table);
+		TableModelDialog dialog =
+				new TableModelDialog(DesignerPlugin.getShell(), property.getTitle(), model);
+		// open dialog
+		if (dialog.open() == Window.OK) {
+			setModel(genericProperty, model);
+		}
+	}
 
-  private static void setModel(final GenericProperty genericProperty,
-      final TableModelDescription model) throws Exception {
-    final ComponentInfo table = (ComponentInfo) genericProperty.getJavaInfo();
-    ExecutionUtils.run(table, new RunnableEx() {
-      public void run() throws Exception {
-        setModelEx(table, genericProperty, model);
-      }
-    });
-  }
+	private static void setModel(final GenericProperty genericProperty,
+			final TableModelDescription model) throws Exception {
+		final ComponentInfo table = (ComponentInfo) genericProperty.getJavaInfo();
+		ExecutionUtils.run(table, new RunnableEx() {
+			public void run() throws Exception {
+				setModelEx(table, genericProperty, model);
+			}
+		});
+	}
 
-  private static void setModelEx(ComponentInfo table,
-      GenericProperty genericProperty,
-      TableModelDescription model) throws Exception {
-    genericProperty.setExpression(model.getModelSource(), Property.UNKNOWN_VALUE);
-    // remove existing column invocations
-    table.removeMethodInvocations("getColumnModel()");
-    // add new column invocations
-    ASTNode prevNode = table.getMethodInvocation("setModel(javax.swing.table.TableModel)");
-    for (String columnInvocation : model.getColumnModelInvocations()) {
-      String newSource = TemplateUtils.getExpression(table) + "." + columnInvocation;
-      prevNode = addExpressionStatement(table, prevNode, newSource);
-    }
-  }
+	private static void setModelEx(ComponentInfo table,
+			GenericProperty genericProperty,
+			TableModelDescription model) throws Exception {
+		genericProperty.setExpression(model.getModelSource(), Property.UNKNOWN_VALUE);
+		// remove existing column invocations
+		table.removeMethodInvocations("getColumnModel()");
+		// add new column invocations
+		ASTNode prevNode = table.getMethodInvocation("setModel(javax.swing.table.TableModel)");
+		for (String columnInvocation : model.getColumnModelInvocations()) {
+			String newSource = TemplateUtils.getExpression(table) + "." + columnInvocation;
+			prevNode = addExpressionStatement(table, prevNode, newSource);
+		}
+	}
 
-  private static ASTNode addExpressionStatement(JavaInfo javaInfo,
-      ASTNode nodeOfPrevStatement,
-      String expressionSource) throws Exception {
-    Statement prevStatement = AstNodeUtils.getEnclosingStatement(nodeOfPrevStatement);
-    StatementTarget target = new StatementTarget(prevStatement, false);
-    return javaInfo.addExpressionStatement(target, expressionSource);
-  }
+	private static ASTNode addExpressionStatement(JavaInfo javaInfo,
+			ASTNode nodeOfPrevStatement,
+			String expressionSource) throws Exception {
+		Statement prevStatement = AstNodeUtils.getEnclosingStatement(nodeOfPrevStatement);
+		StatementTarget target = new StatementTarget(prevStatement, false);
+		return javaInfo.addExpressionStatement(target, expressionSource);
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/models/table/TitledComposite.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/models/table/TitledComposite.java
index dc9c094db..400c07a82 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/models/table/TitledComposite.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/models/table/TitledComposite.java
@@ -24,38 +24,38 @@
  * @coverage swing.property.editor
  */
 public final class TitledComposite extends Composite {
-  private final Composite m_content;
+	private final Composite m_content;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public TitledComposite(Composite parent, int style, String text) {
-    super(parent, style);
-    GridLayoutFactory.create(this).noMargins();
-    // separator
-    {
-      Separator separator = new Separator(this, SWT.NONE);
-      separator.setText(text);
-      GridDataFactory.create(separator).grabH().fillH();
-    }
-    // content container
-    {
-      m_content = new Composite(this, SWT.NONE);
-      GridDataFactory.create(m_content).indentHC(2).grab().fill();
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public TitledComposite(Composite parent, int style, String text) {
+		super(parent, style);
+		GridLayoutFactory.create(this).noMargins();
+		// separator
+		{
+			Separator separator = new Separator(this, SWT.NONE);
+			separator.setText(text);
+			GridDataFactory.create(separator).grabH().fillH();
+		}
+		// content container
+		{
+			m_content = new Composite(this, SWT.NONE);
+			GridDataFactory.create(m_content).indentHC(2).grab().fill();
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link Composite} to use as parent for creating content.
-   */
-  public Composite getContent() {
-    return m_content;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link Composite} to use as parent for creating content.
+	 */
+	public Composite getContent() {
+		return m_content;
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/models/tree/TreeModelDialog.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/models/tree/TreeModelDialog.java
index 12e402956..b14af9511 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/models/tree/TreeModelDialog.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/models/tree/TreeModelDialog.java
@@ -45,264 +45,264 @@
  * @coverage swing.property.editor
  */
 public final class TreeModelDialog extends ResizableDialog {
-  private final String m_titleText;
+	private final String m_titleText;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public TreeModelDialog(Shell parentShell, String titleText) {
-    super(parentShell, Activator.getDefault());
-    m_titleText = titleText;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public TreeModelDialog(Shell parentShell, String titleText) {
+		super(parentShell, Activator.getDefault());
+		m_titleText = titleText;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Text
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private String m_text;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Text
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private String m_text;
 
-  /**
-   * Sets the text to edit.
-   */
-  public final void setText(String text) {
-    m_text = text;
-  }
+	/**
+	 * Sets the text to edit.
+	 */
+	public final void setText(String text) {
+		m_text = text;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Text m_textWidget;
-  private Tree m_treeWidget;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Text m_textWidget;
+	private Tree m_treeWidget;
 
-  @Override
-  protected final Control createDialogArea(Composite parent) {
-    Composite area = (Composite) super.createDialogArea(parent);
-    GridLayoutFactory.create(area).columns(2).equalColumns();
-    // headers
-    {
-      new Label(area, SWT.NONE).setText(ModelMessages.TreeModelDialog_itemsLabel);
-      new Label(area, SWT.NONE).setText(ModelMessages.TreeModelDialog_previewLabel);
-    }
-    // Text widget
-    {
-      m_textWidget = new Text(area, SWT.BORDER | SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
-      GridDataFactory.create(m_textWidget).grab().fill().hintC(40, 20);
-      m_textWidget.setText(m_text);
-      // listener
-      m_textWidget.addModifyListener(new ModifyListener() {
-        public void modifyText(ModifyEvent e) {
-          refreshTree();
-        }
-      });
-      m_textWidget.addTraverseListener(new TraverseListener() {
-        public void keyTraversed(TraverseEvent e) {
-          if (e.detail == SWT.TRAVERSE_TAB_NEXT) {
-            e.doit = false;
-          }
-        }
-      });
-    }
-    // Tree widget
-    {
-      m_treeWidget = new Tree(area, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
-      GridDataFactory.create(m_treeWidget).grab().fill().hintC(40, 20);
-    }
-    // footer
-    {
-      Label footerLabel = new Label(area, SWT.NONE);
-      GridDataFactory.create(footerLabel).spanH(2);
-      footerLabel.setText(ModelMessages.TreeModelDialog_hint);
-    }
-    //
-    refreshTree();
-    return area;
-  }
+	@Override
+	protected final Control createDialogArea(Composite parent) {
+		Composite area = (Composite) super.createDialogArea(parent);
+		GridLayoutFactory.create(area).columns(2).equalColumns();
+		// headers
+		{
+			new Label(area, SWT.NONE).setText(ModelMessages.TreeModelDialog_itemsLabel);
+			new Label(area, SWT.NONE).setText(ModelMessages.TreeModelDialog_previewLabel);
+		}
+		// Text widget
+		{
+			m_textWidget = new Text(area, SWT.BORDER | SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
+			GridDataFactory.create(m_textWidget).grab().fill().hintC(40, 20);
+			m_textWidget.setText(m_text);
+			// listener
+			m_textWidget.addModifyListener(new ModifyListener() {
+				public void modifyText(ModifyEvent e) {
+					refreshTree();
+				}
+			});
+			m_textWidget.addTraverseListener(new TraverseListener() {
+				public void keyTraversed(TraverseEvent e) {
+					if (e.detail == SWT.TRAVERSE_TAB_NEXT) {
+						e.doit = false;
+					}
+				}
+			});
+		}
+		// Tree widget
+		{
+			m_treeWidget = new Tree(area, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
+			GridDataFactory.create(m_treeWidget).grab().fill().hintC(40, 20);
+		}
+		// footer
+		{
+			Label footerLabel = new Label(area, SWT.NONE);
+			GridDataFactory.create(footerLabel).spanH(2);
+			footerLabel.setText(ModelMessages.TreeModelDialog_hint);
+		}
+		//
+		refreshTree();
+		return area;
+	}
 
-  @Override
-  protected void configureShell(Shell newShell) {
-    super.configureShell(newShell);
-    newShell.setText(m_titleText);
-  }
+	@Override
+	protected void configureShell(Shell newShell) {
+		super.configureShell(newShell);
+		newShell.setText(m_titleText);
+	}
 
-  @Override
-  protected void okPressed() {
-    {
-      m_resultItems = Lists.newArrayList();
-      prepareResult(m_resultItems, 0, m_treeWidget.getItems());
-    }
-    super.okPressed();
-  }
+	@Override
+	protected void okPressed() {
+		{
+			m_resultItems = Lists.newArrayList();
+			prepareResult(m_resultItems, 0, m_treeWidget.getItems());
+		}
+		super.okPressed();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Result
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private int m_maxLevel;
-  private List<ItemInformation> m_resultItems;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Result
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private int m_maxLevel;
+	private List<ItemInformation> m_resultItems;
 
-  /**
-   * @return the maximal level of items.
-   */
-  public int getMaxLevel() {
-    return m_maxLevel;
-  }
+	/**
+	 * @return the maximal level of items.
+	 */
+	public int getMaxLevel() {
+		return m_maxLevel;
+	}
 
-  /**
-   * @return the root level {@link ItemInformation}.
-   */
-  public List<ItemInformation> getResultItems() {
-    return m_resultItems;
-  }
+	/**
+	 * @return the root level {@link ItemInformation}.
+	 */
+	public List<ItemInformation> getResultItems() {
+		return m_resultItems;
+	}
 
-  /**
-   * Appends given {@link TreeItem}'s to the result {@link List}'s.
-   */
-  private void prepareResult(List<ItemInformation> resultItems, int level, TreeItem[] items) {
-    m_maxLevel = Math.max(m_maxLevel, level);
-    for (TreeItem treeItem : items) {
-      // add current item
-      ItemInformation resultItem = new ItemInformation(level, treeItem.getText());
-      resultItems.add(resultItem);
-      // add sub-items
-      prepareResult(resultItem.getChildren(), level + 1, treeItem.getItems());
-    }
-  }
+	/**
+	 * Appends given {@link TreeItem}'s to the result {@link List}'s.
+	 */
+	private void prepareResult(List<ItemInformation> resultItems, int level, TreeItem[] items) {
+		m_maxLevel = Math.max(m_maxLevel, level);
+		for (TreeItem treeItem : items) {
+			// add current item
+			ItemInformation resultItem = new ItemInformation(level, treeItem.getText());
+			resultItems.add(resultItem);
+			// add sub-items
+			prepareResult(resultItem.getChildren(), level + 1, treeItem.getItems());
+		}
+	}
 
-  /**
-   * Information about resulting item.
-   *
-   * @author scheglov_ke
-   */
-  static final class ItemInformation {
-    private final int m_level;
-    private final String m_text;
-    private final List<ItemInformation> m_children = Lists.newArrayList();
+	/**
+	 * Information about resulting item.
+	 *
+	 * @author scheglov_ke
+	 */
+	static final class ItemInformation {
+		private final int m_level;
+		private final String m_text;
+		private final List<ItemInformation> m_children = Lists.newArrayList();
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public ItemInformation(int level, String text) {
-      m_level = level;
-      m_text = text;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public ItemInformation(int level, String text) {
+			m_level = level;
+			m_text = text;
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Access
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public int getLevel() {
-      return m_level;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Access
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public int getLevel() {
+			return m_level;
+		}
 
-    public String getText() {
-      return m_text;
-    }
+		public String getText() {
+			return m_text;
+		}
 
-    public List<ItemInformation> getChildren() {
-      return m_children;
-    }
-  }
+		public List<ItemInformation> getChildren() {
+			return m_children;
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final Image IMAGE_FOLDER = new Image(null,
-      TreeModelDialog.class.getResourceAsStream("icons/folder.gif"));
-  private static final Image IMAGE_LEAF = new Image(null,
-      TreeModelDialog.class.getResourceAsStream("icons/leaf.gif"));
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final Image IMAGE_FOLDER = new Image(null,
+			TreeModelDialog.class.getResourceAsStream("icons/folder.gif"));
+	private static final Image IMAGE_LEAF = new Image(null,
+			TreeModelDialog.class.getResourceAsStream("icons/leaf.gif"));
 
-  /**
-   * Refreshes {@link #m_treeWidget} with current text.
-   */
-  private void refreshTree() {
-    m_treeWidget.setRedraw(false);
-    try {
-      m_treeWidget.removeAll();
-      TreeItem currentItem = null;
-      int currentLevel = -1;
-      // process lines
-      String[] lines = StringUtils.split(m_textWidget.getText(), "\r\n");
-      for (String line : lines) {
-        ItemInformationImpl information = createItem(currentItem, currentLevel, line);
-        currentItem = information.m_item;
-        currentLevel = information.m_level;
-      }
-      // expand all
-      expandItems(m_treeWidget.getItems());
-    } finally {
-      m_treeWidget.setRedraw(true);
-    }
-  }
+	/**
+	 * Refreshes {@link #m_treeWidget} with current text.
+	 */
+	private void refreshTree() {
+		m_treeWidget.setRedraw(false);
+		try {
+			m_treeWidget.removeAll();
+			TreeItem currentItem = null;
+			int currentLevel = -1;
+			// process lines
+			String[] lines = StringUtils.split(m_textWidget.getText(), "\r\n");
+			for (String line : lines) {
+				ItemInformationImpl information = createItem(currentItem, currentLevel, line);
+				currentItem = information.m_item;
+				currentLevel = information.m_level;
+			}
+			// expand all
+			expandItems(m_treeWidget.getItems());
+		} finally {
+			m_treeWidget.setRedraw(true);
+		}
+	}
 
-  /**
-   * @return the newly create {@link TreeItem} with given text/indentation.
-   */
-  private ItemInformationImpl createItem(TreeItem parent, int parentLevel, String line) {
-    int level = StringUtils.indexOfAnyBut(line, "\t");
-    if (level == -1) {
-      level = line.length();
-    }
-    // update parent
-    if (parent == null) {
-      level = 0;
-    } else {
-      // create empty items
-      for (int i = parentLevel; i < level - 1; i++) {
-        parent = new TreeItem(parent, SWT.NONE);
-        parent.setText("(empty)");
-        parent.setImage(IMAGE_FOLDER);
-      }
-      // go up, if needed
-      for (int i = level - 1; i < parentLevel; i++) {
-        parent = parent.getParentItem();
-      }
-    }
-    // create new item
-    TreeItem item;
-    if (parent == null) {
-      item = new TreeItem(m_treeWidget, SWT.NONE);
-    } else {
-      parent.setImage(IMAGE_FOLDER);
-      item = new TreeItem(parent, SWT.NONE);
-    }
-    item.setText(line.substring(level));
-    item.setImage(IMAGE_LEAF);
-    return new ItemInformationImpl(item, level);
-  }
+	/**
+	 * @return the newly create {@link TreeItem} with given text/indentation.
+	 */
+	private ItemInformationImpl createItem(TreeItem parent, int parentLevel, String line) {
+		int level = StringUtils.indexOfAnyBut(line, "\t");
+		if (level == -1) {
+			level = line.length();
+		}
+		// update parent
+		if (parent == null) {
+			level = 0;
+		} else {
+			// create empty items
+			for (int i = parentLevel; i < level - 1; i++) {
+				parent = new TreeItem(parent, SWT.NONE);
+				parent.setText("(empty)");
+				parent.setImage(IMAGE_FOLDER);
+			}
+			// go up, if needed
+			for (int i = level - 1; i < parentLevel; i++) {
+				parent = parent.getParentItem();
+			}
+		}
+		// create new item
+		TreeItem item;
+		if (parent == null) {
+			item = new TreeItem(m_treeWidget, SWT.NONE);
+		} else {
+			parent.setImage(IMAGE_FOLDER);
+			item = new TreeItem(parent, SWT.NONE);
+		}
+		item.setText(line.substring(level));
+		item.setImage(IMAGE_LEAF);
+		return new ItemInformationImpl(item, level);
+	}
 
-  /**
-   * Expands given {@link TreeItem}'s and their sub-items.
-   */
-  private static void expandItems(TreeItem[] items) {
-    for (TreeItem treeItem : items) {
-      treeItem.setExpanded(true);
-      expandItems(treeItem.getItems());
-    }
-  }
+	/**
+	 * Expands given {@link TreeItem}'s and their sub-items.
+	 */
+	private static void expandItems(TreeItem[] items) {
+		for (TreeItem treeItem : items) {
+			treeItem.setExpanded(true);
+			expandItems(treeItem.getItems());
+		}
+	}
 
-  /**
-   * Information about {@link TreeItem}.
-   *
-   * @author scheglov_ke
-   */
-  private static final class ItemInformationImpl {
-    final TreeItem m_item;
-    final int m_level;
+	/**
+	 * Information about {@link TreeItem}.
+	 *
+	 * @author scheglov_ke
+	 */
+	private static final class ItemInformationImpl {
+		final TreeItem m_item;
+		final int m_level;
 
-    public ItemInformationImpl(TreeItem item, int level) {
-      m_item = item;
-      m_level = level;
-    }
-  }
+		public ItemInformationImpl(TreeItem item, int level) {
+			m_item = item;
+			m_level = level;
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/models/tree/TreeModelEvaluator.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/models/tree/TreeModelEvaluator.java
index 0c3a280df..c426a3093 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/models/tree/TreeModelEvaluator.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/models/tree/TreeModelEvaluator.java
@@ -43,120 +43,120 @@
  * @coverage swing.model
  */
 public final class TreeModelEvaluator implements IExpressionEvaluator {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IExpressionEvaluator
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public Object evaluate(EvaluationContext context,
-      Expression expression,
-      ITypeBinding typeBinding,
-      String typeQualifiedName) throws Exception {
-    AnonymousClassDeclaration rootDeclaration = findRootNodeDeclaration(expression);
-    if (rootDeclaration != null) {
-      // create root node
-      final DefaultMutableTreeNode rootNode;
-      {
-        ClassInstanceCreation rootNodeCreation =
-            (ClassInstanceCreation) rootDeclaration.getParent();
-        StringLiteral rootTextLiteral = (StringLiteral) rootNodeCreation.arguments().get(0);
-        rootNode = new DefaultMutableTreeNode(rootTextLiteral.getLiteralValue());
-      }
-      // create nodes
-      final Map<String, DefaultMutableTreeNode> nameToNode = Maps.newTreeMap();
-      rootDeclaration.accept(new ASTVisitor() {
-        private DefaultMutableTreeNode m_lastNode;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IExpressionEvaluator
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public Object evaluate(EvaluationContext context,
+			Expression expression,
+			ITypeBinding typeBinding,
+			String typeQualifiedName) throws Exception {
+		AnonymousClassDeclaration rootDeclaration = findRootNodeDeclaration(expression);
+		if (rootDeclaration != null) {
+			// create root node
+			final DefaultMutableTreeNode rootNode;
+			{
+				ClassInstanceCreation rootNodeCreation =
+						(ClassInstanceCreation) rootDeclaration.getParent();
+				StringLiteral rootTextLiteral = (StringLiteral) rootNodeCreation.arguments().get(0);
+				rootNode = new DefaultMutableTreeNode(rootTextLiteral.getLiteralValue());
+			}
+			// create nodes
+			final Map<String, DefaultMutableTreeNode> nameToNode = Maps.newTreeMap();
+			rootDeclaration.accept(new ASTVisitor() {
+				private DefaultMutableTreeNode m_lastNode;
 
-        @Override
-        public void endVisit(ClassInstanceCreation creation) {
-          if (AstNodeUtils.getFullyQualifiedName(creation, false).equals(
-              "javax.swing.tree.DefaultMutableTreeNode")
-              && creation.arguments().size() == 1
-              && creation.arguments().get(0) instanceof StringLiteral) {
-            StringLiteral stringLiteral = (StringLiteral) creation.arguments().get(0);
-            DefaultMutableTreeNode node =
-                new DefaultMutableTreeNode(stringLiteral.getLiteralValue());
-            if (creation.getLocationInParent() == VariableDeclarationFragment.INITIALIZER_PROPERTY) {
-              String name =
-                  ((VariableDeclarationFragment) creation.getParent()).getName().getIdentifier();
-              nameToNode.put(name, node);
-            } else if (creation.getLocationInParent() == Assignment.RIGHT_HAND_SIDE_PROPERTY
-                && ((Assignment) creation.getParent()).getLeftHandSide() instanceof SimpleName) {
-              Assignment assignment = (Assignment) creation.getParent();
-              SimpleName variable = (SimpleName) assignment.getLeftHandSide();
-              String name = variable.getIdentifier();
-              nameToNode.put(name, node);
-            } else {
-              m_lastNode = node;
-            }
-          }
-        }
+				@Override
+				public void endVisit(ClassInstanceCreation creation) {
+					if (AstNodeUtils.getFullyQualifiedName(creation, false).equals(
+							"javax.swing.tree.DefaultMutableTreeNode")
+							&& creation.arguments().size() == 1
+							&& creation.arguments().get(0) instanceof StringLiteral) {
+						StringLiteral stringLiteral = (StringLiteral) creation.arguments().get(0);
+						DefaultMutableTreeNode node =
+								new DefaultMutableTreeNode(stringLiteral.getLiteralValue());
+						if (creation.getLocationInParent() == VariableDeclarationFragment.INITIALIZER_PROPERTY) {
+							String name =
+									((VariableDeclarationFragment) creation.getParent()).getName().getIdentifier();
+							nameToNode.put(name, node);
+						} else if (creation.getLocationInParent() == Assignment.RIGHT_HAND_SIDE_PROPERTY
+								&& ((Assignment) creation.getParent()).getLeftHandSide() instanceof SimpleName) {
+							Assignment assignment = (Assignment) creation.getParent();
+							SimpleName variable = (SimpleName) assignment.getLeftHandSide();
+							String name = variable.getIdentifier();
+							nameToNode.put(name, node);
+						} else {
+							m_lastNode = node;
+						}
+					}
+				}
 
-        @Override
-        public void endVisit(MethodInvocation invocation) {
-          if (AstNodeUtils.getMethodSignature(invocation).equals(
-              "add(javax.swing.tree.MutableTreeNode)")) {
-            // prepare node
-            DefaultMutableTreeNode node = null;
-            {
-              Object argument = invocation.arguments().get(0);
-              if (argument instanceof SimpleName) {
-                SimpleName variable = (SimpleName) argument;
-                node = nameToNode.get(variable.getIdentifier());
-              } else if (argument instanceof ClassInstanceCreation) {
-                node = m_lastNode;
-              }
-            }
-            // prepare parent
-            DefaultMutableTreeNode parentNode = null;
-            if (invocation.getExpression() instanceof SimpleName) {
-              SimpleName variable = (SimpleName) invocation.getExpression();
-              parentNode = nameToNode.get(variable.getIdentifier());
-            } else if (invocation.getExpression() == null) {
-              parentNode = rootNode;
-            }
-            // add node to parent
-            if (parentNode != null && node != null) {
-              parentNode.add(node);
-            }
-            // clear last node
-            m_lastNode = null;
-          }
-        }
-      });
-      // OK, return model
-      return new DefaultTreeModel(rootNode);
-    }
-    // we don't understand given expression
-    return AstEvaluationEngine.UNKNOWN;
-  }
+				@Override
+				public void endVisit(MethodInvocation invocation) {
+					if (AstNodeUtils.getMethodSignature(invocation).equals(
+							"add(javax.swing.tree.MutableTreeNode)")) {
+						// prepare node
+						DefaultMutableTreeNode node = null;
+						{
+							Object argument = invocation.arguments().get(0);
+							if (argument instanceof SimpleName) {
+								SimpleName variable = (SimpleName) argument;
+								node = nameToNode.get(variable.getIdentifier());
+							} else if (argument instanceof ClassInstanceCreation) {
+								node = m_lastNode;
+							}
+						}
+						// prepare parent
+						DefaultMutableTreeNode parentNode = null;
+						if (invocation.getExpression() instanceof SimpleName) {
+							SimpleName variable = (SimpleName) invocation.getExpression();
+							parentNode = nameToNode.get(variable.getIdentifier());
+						} else if (invocation.getExpression() == null) {
+							parentNode = rootNode;
+						}
+						// add node to parent
+						if (parentNode != null && node != null) {
+							parentNode.add(node);
+						}
+						// clear last node
+						m_lastNode = null;
+					}
+				}
+			});
+			// OK, return model
+			return new DefaultTreeModel(rootNode);
+		}
+		// we don't understand given expression
+		return AstEvaluationEngine.UNKNOWN;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link AnonymousClassDeclaration} of {@link DefaultMutableTreeNode} for root node
-   *         or <code>null</code> if no such model can be found.
-   */
-  private static AnonymousClassDeclaration findRootNodeDeclaration(Expression expression) {
-    if (expression instanceof ClassInstanceCreation) {
-      ClassInstanceCreation modelCreation = (ClassInstanceCreation) expression;
-      ITypeBinding modelBinding = AstNodeUtils.getTypeBinding(modelCreation);
-      if (AstNodeUtils.isSuccessorOf(modelBinding, DefaultTreeModel.class)
-          && modelCreation.arguments().size() == 1
-          && modelCreation.arguments().get(0) instanceof ClassInstanceCreation) {
-        ClassInstanceCreation nodeCreation =
-            (ClassInstanceCreation) modelCreation.arguments().get(0);
-        ITypeBinding nodeBinding = AstNodeUtils.getTypeBinding(nodeCreation);
-        if (nodeCreation.getAnonymousClassDeclaration() != null
-            && AstNodeUtils.isSuccessorOf(nodeBinding, DefaultMutableTreeNode.class)) {
-          return nodeCreation.getAnonymousClassDeclaration();
-        }
-      }
-    }
-    // no valid model
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link AnonymousClassDeclaration} of {@link DefaultMutableTreeNode} for root node
+	 *         or <code>null</code> if no such model can be found.
+	 */
+	private static AnonymousClassDeclaration findRootNodeDeclaration(Expression expression) {
+		if (expression instanceof ClassInstanceCreation) {
+			ClassInstanceCreation modelCreation = (ClassInstanceCreation) expression;
+			ITypeBinding modelBinding = AstNodeUtils.getTypeBinding(modelCreation);
+			if (AstNodeUtils.isSuccessorOf(modelBinding, DefaultTreeModel.class)
+					&& modelCreation.arguments().size() == 1
+					&& modelCreation.arguments().get(0) instanceof ClassInstanceCreation) {
+				ClassInstanceCreation nodeCreation =
+						(ClassInstanceCreation) modelCreation.arguments().get(0);
+				ITypeBinding nodeBinding = AstNodeUtils.getTypeBinding(nodeCreation);
+				if (nodeCreation.getAnonymousClassDeclaration() != null
+						&& AstNodeUtils.isSuccessorOf(nodeBinding, DefaultMutableTreeNode.class)) {
+					return nodeCreation.getAnonymousClassDeclaration();
+				}
+			}
+		}
+		// no valid model
+		return null;
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/models/tree/TreeModelPropertyEditor.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/models/tree/TreeModelPropertyEditor.java
index 880310681..401a5de38 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/models/tree/TreeModelPropertyEditor.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/property/editor/models/tree/TreeModelPropertyEditor.java
@@ -40,211 +40,211 @@
  * @coverage swing.property.editor
  */
 public final class TreeModelPropertyEditor extends TextDialogPropertyEditor {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final PropertyEditor INSTANCE = new TreeModelPropertyEditor();
-
-  private TreeModelPropertyEditor() {
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getText(Property property) throws Exception {
-    Object value = property.getValue();
-    if (value instanceof TreeModel) {
-      TreeModel model = (TreeModel) value;
-      TreeNode rootNode = (TreeNode) model.getRoot();
-      //
-      StringBuffer buffer = new StringBuffer();
-      getText_appendNodes(buffer, rootNode, "");
-      return buffer.toString();
-    }
-    // no string presentation
-    return null;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void openDialog(Property property) throws Exception {
-    TreeModelDialog treeModelDialog =
-        new TreeModelDialog(DesignerPlugin.getShell(), property.getTitle());
-    {
-      String text = getTooltip(property);
-      text = StringUtils.defaultString(text);
-      text = StringUtils.replace(text, "    ", "\t");
-      treeModelDialog.setText(text);
-    }
-    // open dialog
-    if (treeModelDialog.open() == Window.OK) {
-      int maxLevel = treeModelDialog.getMaxLevel();
-      ItemInformation rootItem = treeModelDialog.getResultItems().get(0);
-      setItems(property, maxLevel, rootItem);
-    }
-  }
-
-  private void setItems(Property property, int maxLevel, ItemInformation rootItem) throws Exception {
-    if (property instanceof GenericProperty) {
-      GenericProperty genericProperty = (GenericProperty) property;
-      JavaInfo javaInfo = genericProperty.getJavaInfo();
-      // prepare lines
-      List<String> lines = Lists.newArrayList();
-      // header
-      {
-        lines.add("new javax.swing.tree.DefaultTreeModel(");
-        lines.add("\tnew javax.swing.tree.DefaultMutableTreeNode("
-            + StringConverter.INSTANCE.toJavaSource(javaInfo, rootItem.getText())
-            + ") {");
-        lines.add("\t\t{");
-      }
-      // items
-      String prefix = "\t\t\t";
-      {
-        // declare variables for nodes;
-        for (int i = 0; i < maxLevel - 2; i++) {
-          lines.add(prefix + "javax.swing.tree.DefaultMutableTreeNode node_" + (1 + i) + ";");
-        }
-        // add nodes
-        appendSourceItems(javaInfo, maxLevel, lines, rootItem.getChildren());
-      }
-      // footer
-      {
-        lines.add("\t\t}");
-        lines.add("\t}");
-        lines.add(")");
-      }
-      // set source as single String
-      String source = StringUtils.join(lines.iterator(), "\n");
-      genericProperty.setExpression(source, Property.UNKNOWN_VALUE);
-    }
-  }
-
-  private static void appendSourceItems(JavaInfo javaInfo,
-      int maxLevel,
-      List<String> lines,
-      List<ItemInformation> items) throws Exception {
-    for (ItemInformation item : items) {
-      int level = item.getLevel();
-      String text = item.getText();
-      String prefix = "\t\t\t" + StringUtils.repeat("\t", level - 1);
-      // prepare node source
-      String nodeCreation =
-          "new javax.swing.tree.DefaultMutableTreeNode("
-              + StringConverter.INSTANCE.toJavaSource(javaInfo, text)
-              + ")";
-      // prepare parent access
-      String parentAccess;
-      if (level == 1) {
-        parentAccess = "";
-      } else {
-        parentAccess = "node_" + (level - 1) + ".";
-      }
-      // add node
-      if (item.getChildren().isEmpty()) {
-        lines.add(prefix + parentAccess + "add(" + nodeCreation + ");");
-      } else {
-        // assign node
-        lines.add(prefix + "node_" + level + " = " + nodeCreation + ";");
-        // append children
-        appendSourceItems(javaInfo, maxLevel, lines, item.getChildren());
-        // add node
-        lines.add(prefix + parentAccess + "add(node_" + level + ");");
-      }
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tooltip
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected PropertyTooltipProvider createPropertyTooltipProvider() {
-    return new PropertyTooltipTextProvider() {
-      @Override
-      protected String getText(Property property) throws Exception {
-        return getTooltip(property);
-      }
-
-      @Override
-      public int getTooltipPosition() {
-        return BELOW;
-      }
-    };
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Appends given {@link TreeNode} and its children to the {@link StringBuffer}.
-   */
-  private static void getText_appendNodes(StringBuffer buffer, TreeNode node, String prefix) {
-    // append separator
-    if (buffer.length() != 0) {
-      buffer.append(", ");
-    }
-    // append current node
-    buffer.append(prefix);
-    if (node instanceof DefaultMutableTreeNode) {
-      DefaultMutableTreeNode mutableTreeNode = (DefaultMutableTreeNode) node;
-      buffer.append(mutableTreeNode.getUserObject());
-    }
-    // append children
-    String newPrefix = prefix + "+";
-    for (int i = 0; i < node.getChildCount(); i++) {
-      getText_appendNodes(buffer, node.getChildAt(i), newPrefix);
-    }
-  }
-
-  /**
-   * @return the text to display as tooltip, or <code>null</code> if {@link Property} has invalid
-   *         value.
-   */
-  private String getTooltip(Property property) throws Exception {
-    Object value = property.getValue();
-    if (value instanceof TreeModel) {
-      TreeModel model = (TreeModel) value;
-      TreeNode rootNode = (TreeNode) model.getRoot();
-      //
-      StringBuffer buffer = new StringBuffer();
-      getTooltip_appendNodes(buffer, rootNode, "");
-      return buffer.toString();
-    }
-    // no tooltip
-    return null;
-  }
-
-  /**
-   * Appends given {@link TreeNode} and its children to the {@link StringBuffer}.
-   */
-  private static void getTooltip_appendNodes(StringBuffer buffer, TreeNode node, String prefix) {
-    // append separator
-    if (buffer.length() != 0) {
-      buffer.append("\n");
-    }
-    // append current node
-    buffer.append(prefix);
-    if (node instanceof DefaultMutableTreeNode) {
-      DefaultMutableTreeNode mutableTreeNode = (DefaultMutableTreeNode) node;
-      buffer.append(mutableTreeNode.getUserObject());
-    }
-    // append children
-    String newPrefix = prefix + "    ";
-    for (int i = 0; i < node.getChildCount(); i++) {
-      getTooltip_appendNodes(buffer, node.getChildAt(i), newPrefix);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final PropertyEditor INSTANCE = new TreeModelPropertyEditor();
+
+	private TreeModelPropertyEditor() {
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getText(Property property) throws Exception {
+		Object value = property.getValue();
+		if (value instanceof TreeModel) {
+			TreeModel model = (TreeModel) value;
+			TreeNode rootNode = (TreeNode) model.getRoot();
+			//
+			StringBuffer buffer = new StringBuffer();
+			getText_appendNodes(buffer, rootNode, "");
+			return buffer.toString();
+		}
+		// no string presentation
+		return null;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void openDialog(Property property) throws Exception {
+		TreeModelDialog treeModelDialog =
+				new TreeModelDialog(DesignerPlugin.getShell(), property.getTitle());
+		{
+			String text = getTooltip(property);
+			text = StringUtils.defaultString(text);
+			text = StringUtils.replace(text, "    ", "\t");
+			treeModelDialog.setText(text);
+		}
+		// open dialog
+		if (treeModelDialog.open() == Window.OK) {
+			int maxLevel = treeModelDialog.getMaxLevel();
+			ItemInformation rootItem = treeModelDialog.getResultItems().get(0);
+			setItems(property, maxLevel, rootItem);
+		}
+	}
+
+	private void setItems(Property property, int maxLevel, ItemInformation rootItem) throws Exception {
+		if (property instanceof GenericProperty) {
+			GenericProperty genericProperty = (GenericProperty) property;
+			JavaInfo javaInfo = genericProperty.getJavaInfo();
+			// prepare lines
+			List<String> lines = Lists.newArrayList();
+			// header
+			{
+				lines.add("new javax.swing.tree.DefaultTreeModel(");
+				lines.add("\tnew javax.swing.tree.DefaultMutableTreeNode("
+						+ StringConverter.INSTANCE.toJavaSource(javaInfo, rootItem.getText())
+						+ ") {");
+				lines.add("\t\t{");
+			}
+			// items
+			String prefix = "\t\t\t";
+			{
+				// declare variables for nodes;
+				for (int i = 0; i < maxLevel - 2; i++) {
+					lines.add(prefix + "javax.swing.tree.DefaultMutableTreeNode node_" + (1 + i) + ";");
+				}
+				// add nodes
+				appendSourceItems(javaInfo, maxLevel, lines, rootItem.getChildren());
+			}
+			// footer
+			{
+				lines.add("\t\t}");
+				lines.add("\t}");
+				lines.add(")");
+			}
+			// set source as single String
+			String source = StringUtils.join(lines.iterator(), "\n");
+			genericProperty.setExpression(source, Property.UNKNOWN_VALUE);
+		}
+	}
+
+	private static void appendSourceItems(JavaInfo javaInfo,
+			int maxLevel,
+			List<String> lines,
+			List<ItemInformation> items) throws Exception {
+		for (ItemInformation item : items) {
+			int level = item.getLevel();
+			String text = item.getText();
+			String prefix = "\t\t\t" + StringUtils.repeat("\t", level - 1);
+			// prepare node source
+			String nodeCreation =
+					"new javax.swing.tree.DefaultMutableTreeNode("
+							+ StringConverter.INSTANCE.toJavaSource(javaInfo, text)
+							+ ")";
+			// prepare parent access
+			String parentAccess;
+			if (level == 1) {
+				parentAccess = "";
+			} else {
+				parentAccess = "node_" + (level - 1) + ".";
+			}
+			// add node
+			if (item.getChildren().isEmpty()) {
+				lines.add(prefix + parentAccess + "add(" + nodeCreation + ");");
+			} else {
+				// assign node
+				lines.add(prefix + "node_" + level + " = " + nodeCreation + ";");
+				// append children
+				appendSourceItems(javaInfo, maxLevel, lines, item.getChildren());
+				// add node
+				lines.add(prefix + parentAccess + "add(node_" + level + ");");
+			}
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tooltip
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected PropertyTooltipProvider createPropertyTooltipProvider() {
+		return new PropertyTooltipTextProvider() {
+			@Override
+			protected String getText(Property property) throws Exception {
+				return getTooltip(property);
+			}
+
+			@Override
+			public int getTooltipPosition() {
+				return BELOW;
+			}
+		};
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Appends given {@link TreeNode} and its children to the {@link StringBuffer}.
+	 */
+	private static void getText_appendNodes(StringBuffer buffer, TreeNode node, String prefix) {
+		// append separator
+		if (buffer.length() != 0) {
+			buffer.append(", ");
+		}
+		// append current node
+		buffer.append(prefix);
+		if (node instanceof DefaultMutableTreeNode) {
+			DefaultMutableTreeNode mutableTreeNode = (DefaultMutableTreeNode) node;
+			buffer.append(mutableTreeNode.getUserObject());
+		}
+		// append children
+		String newPrefix = prefix + "+";
+		for (int i = 0; i < node.getChildCount(); i++) {
+			getText_appendNodes(buffer, node.getChildAt(i), newPrefix);
+		}
+	}
+
+	/**
+	 * @return the text to display as tooltip, or <code>null</code> if {@link Property} has invalid
+	 *         value.
+	 */
+	private String getTooltip(Property property) throws Exception {
+		Object value = property.getValue();
+		if (value instanceof TreeModel) {
+			TreeModel model = (TreeModel) value;
+			TreeNode rootNode = (TreeNode) model.getRoot();
+			//
+			StringBuffer buffer = new StringBuffer();
+			getTooltip_appendNodes(buffer, rootNode, "");
+			return buffer.toString();
+		}
+		// no tooltip
+		return null;
+	}
+
+	/**
+	 * Appends given {@link TreeNode} and its children to the {@link StringBuffer}.
+	 */
+	private static void getTooltip_appendNodes(StringBuffer buffer, TreeNode node, String prefix) {
+		// append separator
+		if (buffer.length() != 0) {
+			buffer.append("\n");
+		}
+		// append current node
+		buffer.append(prefix);
+		if (node instanceof DefaultMutableTreeNode) {
+			DefaultMutableTreeNode mutableTreeNode = (DefaultMutableTreeNode) node;
+			buffer.append(mutableTreeNode.getUserObject());
+		}
+		// append children
+		String newPrefix = prefix + "    ";
+		for (int i = 0; i < node.getChildCount(); i++) {
+			getTooltip_appendNodes(buffer, node.getChildAt(i), newPrefix);
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/util/surround/JPanelSurroundTarget.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/util/surround/JPanelSurroundTarget.java
index 865d9eccf..706decb01 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/util/surround/JPanelSurroundTarget.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/util/surround/JPanelSurroundTarget.java
@@ -30,39 +30,39 @@
  * @coverage swing.model.util
  */
 public final class JPanelSurroundTarget extends ISurroundTarget<ContainerInfo, ComponentInfo> {
-  private static final String CLASS_NAME = "javax.swing.JPanel";
+	private static final String CLASS_NAME = "javax.swing.JPanel";
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Image getIcon(AstEditor editor) throws Exception {
-    return ComponentDescriptionHelper.getDescription(editor, CLASS_NAME).getIcon();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Image getIcon(AstEditor editor) throws Exception {
+		return ComponentDescriptionHelper.getDescription(editor, CLASS_NAME).getIcon();
+	}
 
-  @Override
-  public String getText(AstEditor editor) throws Exception {
-    return CLASS_NAME;
-  }
+	@Override
+	public String getText(AstEditor editor) throws Exception {
+		return CLASS_NAME;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Operation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public ContainerInfo createContainer(AstEditor editor) throws Exception {
-    return (ContainerInfo) JavaInfoUtils.createJavaInfo(
-        editor,
-        CLASS_NAME,
-        new ConstructorCreationSupport());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Operation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public ContainerInfo createContainer(AstEditor editor) throws Exception {
+		return (ContainerInfo) JavaInfoUtils.createJavaInfo(
+				editor,
+				CLASS_NAME,
+				new ConstructorCreationSupport());
+	}
 
-  @Override
-  public void move(ContainerInfo container, ComponentInfo component) throws Exception {
-    FlowLayoutInfo flowLayout = (FlowLayoutInfo) container.getLayout();
-    flowLayout.move(component, null);
-  }
+	@Override
+	public void move(ContainerInfo container, ComponentInfo component) throws Exception {
+		FlowLayoutInfo flowLayout = (FlowLayoutInfo) container.getLayout();
+		flowLayout.move(component, null);
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/util/surround/JPanelWithBorderSurroundTarget.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/util/surround/JPanelWithBorderSurroundTarget.java
index 808eb76b6..0a9b0f5c5 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/util/surround/JPanelWithBorderSurroundTarget.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/util/surround/JPanelWithBorderSurroundTarget.java
@@ -32,53 +32,53 @@
  * @coverage swing.model.util
  */
 public final class JPanelWithBorderSurroundTarget
-    extends
-      ISurroundTarget<ContainerInfo, ComponentInfo> {
-  private static final String CLASS_NAME = "javax.swing.JPanel";
+extends
+ISurroundTarget<ContainerInfo, ComponentInfo> {
+	private static final String CLASS_NAME = "javax.swing.JPanel";
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Image getIcon(AstEditor editor) throws Exception {
-    return ComponentDescriptionHelper.getDescription(editor, CLASS_NAME).getIcon();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Image getIcon(AstEditor editor) throws Exception {
+		return ComponentDescriptionHelper.getDescription(editor, CLASS_NAME).getIcon();
+	}
 
-  @Override
-  public String getText(AstEditor editor) throws Exception {
-    return CLASS_NAME + " (border)";
-  }
+	@Override
+	public String getText(AstEditor editor) throws Exception {
+		return CLASS_NAME + " (border)";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Operation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public ContainerInfo createContainer(AstEditor editor) throws Exception {
-    return (ContainerInfo) JavaInfoUtils.createJavaInfo(
-        editor,
-        CLASS_NAME,
-        new ConstructorCreationSupport());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Operation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public ContainerInfo createContainer(AstEditor editor) throws Exception {
+		return (ContainerInfo) JavaInfoUtils.createJavaInfo(
+				editor,
+				CLASS_NAME,
+				new ConstructorCreationSupport());
+	}
 
-  @Override
-  public void afterContainerAdd(ContainerInfo container, List<ComponentInfo> components)
-      throws Exception {
-    container.addMethodInvocation(
-        "setBorder(javax.swing.border.Border)",
-        "new javax.swing.border.TitledBorder(null, "
-            + "\"JPanel title\", "
-            + "javax.swing.border.TitledBorder.LEADING, "
-            + "javax.swing.border.TitledBorder.TOP, "
-            + "null, null)");
-  }
+	@Override
+	public void afterContainerAdd(ContainerInfo container, List<ComponentInfo> components)
+			throws Exception {
+		container.addMethodInvocation(
+				"setBorder(javax.swing.border.Border)",
+				"new javax.swing.border.TitledBorder(null, "
+						+ "\"JPanel title\", "
+						+ "javax.swing.border.TitledBorder.LEADING, "
+						+ "javax.swing.border.TitledBorder.TOP, "
+						+ "null, null)");
+	}
 
-  @Override
-  public void move(ContainerInfo container, ComponentInfo component) throws Exception {
-    FlowLayoutInfo flowLayout = (FlowLayoutInfo) container.getLayout();
-    flowLayout.move(component, null);
-  }
+	@Override
+	public void move(ContainerInfo container, ComponentInfo component) throws Exception {
+		FlowLayoutInfo flowLayout = (FlowLayoutInfo) container.getLayout();
+		flowLayout.move(component, null);
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/util/surround/JScrollPaneSurroundTarget.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/util/surround/JScrollPaneSurroundTarget.java
index b35962542..fc5b61cb6 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/util/surround/JScrollPaneSurroundTarget.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/util/surround/JScrollPaneSurroundTarget.java
@@ -33,60 +33,60 @@
  * @coverage swing.model.util
  */
 public final class JScrollPaneSurroundTarget
-    extends
-      ISurroundTarget<JScrollPaneInfo, ComponentInfo> {
-  private static final String CLASS_NAME = "javax.swing.JScrollPane";
+extends
+ISurroundTarget<JScrollPaneInfo, ComponentInfo> {
+	private static final String CLASS_NAME = "javax.swing.JScrollPane";
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Image getIcon(AstEditor editor) throws Exception {
-    return ComponentDescriptionHelper.getDescription(editor, CLASS_NAME).getIcon();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Image getIcon(AstEditor editor) throws Exception {
+		return ComponentDescriptionHelper.getDescription(editor, CLASS_NAME).getIcon();
+	}
 
-  @Override
-  public String getText(AstEditor editor) throws Exception {
-    return CLASS_NAME;
-  }
+	@Override
+	public String getText(AstEditor editor) throws Exception {
+		return CLASS_NAME;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Operation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public JScrollPaneInfo createContainer(AstEditor editor) throws Exception {
-    return (JScrollPaneInfo) JavaInfoUtils.createJavaInfo(
-        editor,
-        CLASS_NAME,
-        new ConstructorCreationSupport());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Operation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public JScrollPaneInfo createContainer(AstEditor editor) throws Exception {
+		return (JScrollPaneInfo) JavaInfoUtils.createJavaInfo(
+				editor,
+				CLASS_NAME,
+				new ConstructorCreationSupport());
+	}
 
-  @Override
-  public void afterContainerAdd(JScrollPaneInfo container, List<ComponentInfo> components)
-      throws Exception {
-    super.afterContainerAdd(container, components);
-    if (components.size() != 1) {
-      ContainerInfo panel =
-          (ContainerInfo) JavaInfoUtils.createJavaInfo(
-              container.getEditor(),
-              "javax.swing.JPanel",
-              new ConstructorCreationSupport());
-      container.command_CREATE(panel, "setViewportView");
-    }
-  }
+	@Override
+	public void afterContainerAdd(JScrollPaneInfo container, List<ComponentInfo> components)
+			throws Exception {
+		super.afterContainerAdd(container, components);
+		if (components.size() != 1) {
+			ContainerInfo panel =
+					(ContainerInfo) JavaInfoUtils.createJavaInfo(
+							container.getEditor(),
+							"javax.swing.JPanel",
+							new ConstructorCreationSupport());
+			container.command_CREATE(panel, "setViewportView");
+		}
+	}
 
-  @Override
-  public void move(JScrollPaneInfo container, ComponentInfo component) throws Exception {
-    if (container.getChildrenComponents().isEmpty()) {
-      container.command_ADD(component, "setViewportView");
-    } else {
-      ContainerInfo panel = (ContainerInfo) container.getChildrenComponents().get(0);
-      FlowLayoutInfo flowLayout = (FlowLayoutInfo) panel.getLayout();
-      flowLayout.move(component, null);
-    }
-  }
+	@Override
+	public void move(JScrollPaneInfo container, ComponentInfo component) throws Exception {
+		if (container.getChildrenComponents().isEmpty()) {
+			container.command_ADD(component, "setViewportView");
+		} else {
+			ContainerInfo panel = (ContainerInfo) container.getChildrenComponents().get(0);
+			FlowLayoutInfo flowLayout = (FlowLayoutInfo) panel.getLayout();
+			flowLayout.move(component, null);
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/util/surround/JSplitPaneSurroundTarget.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/util/surround/JSplitPaneSurroundTarget.java
index d984d01a6..c36a5afc9 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/util/surround/JSplitPaneSurroundTarget.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/util/surround/JSplitPaneSurroundTarget.java
@@ -31,52 +31,52 @@
  * @coverage swing.model.util
  */
 public final class JSplitPaneSurroundTarget extends ISurroundTarget<JSplitPaneInfo, ComponentInfo> {
-  private static final String CLASS_NAME = "javax.swing.JSplitPane";
+	private static final String CLASS_NAME = "javax.swing.JSplitPane";
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Image getIcon(AstEditor editor) throws Exception {
-    return ComponentDescriptionHelper.getDescription(editor, CLASS_NAME).getIcon();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Image getIcon(AstEditor editor) throws Exception {
+		return ComponentDescriptionHelper.getDescription(editor, CLASS_NAME).getIcon();
+	}
 
-  @Override
-  public String getText(AstEditor editor) throws Exception {
-    return CLASS_NAME;
-  }
+	@Override
+	public String getText(AstEditor editor) throws Exception {
+		return CLASS_NAME;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Validation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean validate(List<ComponentInfo> components) throws Exception {
-    return components.size() <= 2;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Validation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean validate(List<ComponentInfo> components) throws Exception {
+		return components.size() <= 2;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Operation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public JSplitPaneInfo createContainer(AstEditor editor) throws Exception {
-    return (JSplitPaneInfo) JavaInfoUtils.createJavaInfo(
-        editor,
-        CLASS_NAME,
-        new ConstructorCreationSupport());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Operation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public JSplitPaneInfo createContainer(AstEditor editor) throws Exception {
+		return (JSplitPaneInfo) JavaInfoUtils.createJavaInfo(
+				editor,
+				CLASS_NAME,
+				new ConstructorCreationSupport());
+	}
 
-  @Override
-  public void move(JSplitPaneInfo container, ComponentInfo component) throws Exception {
-    if (container.getChildrenComponents().isEmpty()) {
-      container.command_ADD(component, true);
-    } else {
-      container.command_ADD(component, false);
-    }
-  }
+	@Override
+	public void move(JSplitPaneInfo container, ComponentInfo component) throws Exception {
+		if (container.getChildrenComponents().isEmpty()) {
+			container.command_ADD(component, true);
+		} else {
+			container.command_ADD(component, false);
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/util/surround/JTabbedPaneSurroundTarget.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/util/surround/JTabbedPaneSurroundTarget.java
index 3e228ba96..ee3197eb0 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/util/surround/JTabbedPaneSurroundTarget.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/util/surround/JTabbedPaneSurroundTarget.java
@@ -29,40 +29,40 @@
  * @coverage swing.model.util
  */
 public final class JTabbedPaneSurroundTarget
-    extends
-      ISurroundTarget<JTabbedPaneInfo, ComponentInfo> {
-  private static final String CLASS_NAME = "javax.swing.JTabbedPane";
+extends
+ISurroundTarget<JTabbedPaneInfo, ComponentInfo> {
+	private static final String CLASS_NAME = "javax.swing.JTabbedPane";
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Image getIcon(AstEditor editor) throws Exception {
-    return ComponentDescriptionHelper.getDescription(editor, CLASS_NAME).getIcon();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Image getIcon(AstEditor editor) throws Exception {
+		return ComponentDescriptionHelper.getDescription(editor, CLASS_NAME).getIcon();
+	}
 
-  @Override
-  public String getText(AstEditor editor) throws Exception {
-    return CLASS_NAME;
-  }
+	@Override
+	public String getText(AstEditor editor) throws Exception {
+		return CLASS_NAME;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Operation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public JTabbedPaneInfo createContainer(AstEditor editor) throws Exception {
-    return (JTabbedPaneInfo) JavaInfoUtils.createJavaInfo(
-        editor,
-        CLASS_NAME,
-        new ConstructorCreationSupport());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Operation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public JTabbedPaneInfo createContainer(AstEditor editor) throws Exception {
+		return (JTabbedPaneInfo) JavaInfoUtils.createJavaInfo(
+				editor,
+				CLASS_NAME,
+				new ConstructorCreationSupport());
+	}
 
-  @Override
-  public void move(JTabbedPaneInfo container, ComponentInfo component) throws Exception {
-    container.command_ADD(component, null);
-  }
+	@Override
+	public void move(JTabbedPaneInfo container, ComponentInfo component) throws Exception {
+		container.command_ADD(component, null);
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/util/surround/LayoutSurroundSupport.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/util/surround/LayoutSurroundSupport.java
index 983482d59..e0c25221d 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/util/surround/LayoutSurroundSupport.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/util/surround/LayoutSurroundSupport.java
@@ -23,30 +23,30 @@
  * @coverage swing.model.util
  */
 public abstract class LayoutSurroundSupport extends SwingSurroundSupport {
-  private final LayoutInfo m_layout;
+	private final LayoutInfo m_layout;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public LayoutSurroundSupport(LayoutInfo layout) {
-    super(layout.getContainer());
-    m_layout = layout;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public LayoutSurroundSupport(LayoutInfo layout) {
+		super(layout.getContainer());
+		m_layout = layout;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Validate
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected boolean validateComponents(List<ComponentInfo> components) throws Exception {
-    // perform "surround" only for "active" layout
-    if (!m_layout.isActive()) {
-      return false;
-    }
-    // continue
-    return super.validateComponents(components);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Validate
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected boolean validateComponents(List<ComponentInfo> components) throws Exception {
+		// perform "surround" only for "active" layout
+		if (!m_layout.isActive()) {
+			return false;
+		}
+		// continue
+		return super.validateComponents(components);
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/util/surround/SwingSurroundSupport.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/util/surround/SwingSurroundSupport.java
index 8ae746f00..c7376383c 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/util/surround/SwingSurroundSupport.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/model/util/surround/SwingSurroundSupport.java
@@ -21,12 +21,12 @@
  * @coverage swing.model.util
  */
 public abstract class SwingSurroundSupport extends SurroundSupport<ContainerInfo, ComponentInfo> {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SwingSurroundSupport(ContainerInfo sourceContainer) {
-    super(sourceContainer, ComponentInfo.class);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SwingSurroundSupport(ContainerInfo sourceContainer) {
+		super(sourceContainer, ComponentInfo.class);
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/palette/AbsoluteLayoutEntryInfo.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/palette/AbsoluteLayoutEntryInfo.java
index 2eb7fc27e..ba1824e17 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/palette/AbsoluteLayoutEntryInfo.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/palette/AbsoluteLayoutEntryInfo.java
@@ -26,49 +26,49 @@
  * @coverage swing.editor.palette
  */
 public final class AbsoluteLayoutEntryInfo extends ToolEntryInfo {
-  private static final Image ICON = Activator.getImage("info/layout/absolute/layout.gif");
+	private static final Image ICON = Activator.getImage("info/layout/absolute/layout.gif");
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbsoluteLayoutEntryInfo() {
-    setName(PaletteMessages.AbsoluteLayoutEntryInfo_name);
-    setDescription(PaletteMessages.AbsoluteLayoutEntryInfo_description);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbsoluteLayoutEntryInfo() {
+		setName(PaletteMessages.AbsoluteLayoutEntryInfo_name);
+		setDescription(PaletteMessages.AbsoluteLayoutEntryInfo_description);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // EntryInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Image getIcon() {
-    return ICON;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// EntryInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Image getIcon() {
+		return ICON;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ToolEntryInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Tool createTool() throws Exception {
-    // prepare factory
-    ICreationFactory factory = new ICreationFactory() {
-      private AbsoluteLayoutInfo m_layout;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ToolEntryInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Tool createTool() throws Exception {
+		// prepare factory
+		ICreationFactory factory = new ICreationFactory() {
+			private AbsoluteLayoutInfo m_layout;
 
-      public void activate() throws Exception {
-        m_layout = AbsoluteLayoutInfo.createExplicit(m_rootJavaInfo.getEditor());
-        m_layout.setObject(null); // force initialize
-      }
+			public void activate() throws Exception {
+				m_layout = AbsoluteLayoutInfo.createExplicit(m_rootJavaInfo.getEditor());
+				m_layout.setObject(null); // force initialize
+			}
 
-      public Object getNewObject() {
-        return m_layout;
-      }
-    };
-    // return tool
-    return new CreationTool(factory);
-  }
+			public Object getNewObject() {
+				return m_layout;
+			}
+		};
+		// return tool
+		return new CreationTool(factory);
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/palette/ActionExternalEntryInfo.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/palette/ActionExternalEntryInfo.java
index e91b4e185..8f9330233 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/palette/ActionExternalEntryInfo.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/palette/ActionExternalEntryInfo.java
@@ -33,41 +33,41 @@
  * @coverage swing.editor.palette
  */
 public final class ActionExternalEntryInfo extends ToolEntryInfo {
-  private static final Image ICON = Activator.getImage("info/Action/action_open.gif");
+	private static final Image ICON = Activator.getImage("info/Action/action_open.gif");
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ActionExternalEntryInfo() {
-    setName(PaletteMessages.ActionExternalEntryInfo_name);
-    setDescription(PaletteMessages.ActionExternalEntryInfo_description);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ActionExternalEntryInfo() {
+		setName(PaletteMessages.ActionExternalEntryInfo_name);
+		setDescription(PaletteMessages.ActionExternalEntryInfo_description);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // EntryInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Image getIcon() {
-    return ICON;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// EntryInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Image getIcon() {
+		return ICON;
+	}
 
-  @Override
-  public Tool createTool() throws Exception {
-    IType actionType = m_javaProject.findType("javax.swing.Action");
-    SubtypesScope scope = new SubtypesScope(actionType);
-    IType selectedActionType = JdtUiUtils.selectType(DesignerPlugin.getShell(), scope);
-    if (selectedActionType != null) {
-      ActionInfo actionInfo =
-          (ActionInfo) JavaInfoUtils.createJavaInfo(
-              m_editor,
-              selectedActionType.getFullyQualifiedName(),
-              new ConstructorCreationSupport());
-      return ActionUseEntryInfo.createActionTool(actionInfo);
-    }
-    return null;
-  }
+	@Override
+	public Tool createTool() throws Exception {
+		IType actionType = m_javaProject.findType("javax.swing.Action");
+		SubtypesScope scope = new SubtypesScope(actionType);
+		IType selectedActionType = JdtUiUtils.selectType(DesignerPlugin.getShell(), scope);
+		if (selectedActionType != null) {
+			ActionInfo actionInfo =
+					(ActionInfo) JavaInfoUtils.createJavaInfo(
+							m_editor,
+							selectedActionType.getFullyQualifiedName(),
+							new ConstructorCreationSupport());
+			return ActionUseEntryInfo.createActionTool(actionInfo);
+		}
+		return null;
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/palette/ActionNewEntryInfo.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/palette/ActionNewEntryInfo.java
index 0028b73c7..b46e4673b 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/palette/ActionNewEntryInfo.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/palette/ActionNewEntryInfo.java
@@ -28,31 +28,31 @@
  * @coverage swing.editor.palette
  */
 public final class ActionNewEntryInfo extends ToolEntryInfo {
-  private static final Image ICON = Activator.getImage("info/Action/action_new.gif");
+	private static final Image ICON = Activator.getImage("info/Action/action_new.gif");
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ActionNewEntryInfo() {
-    setName(PaletteMessages.ActionNewEntryInfo_name);
-    setDescription(PaletteMessages.ActionNewEntryInfo_description);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ActionNewEntryInfo() {
+		setName(PaletteMessages.ActionNewEntryInfo_name);
+		setDescription(PaletteMessages.ActionNewEntryInfo_description);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // EntryInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Image getIcon() {
-    return ICON;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// EntryInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Image getIcon() {
+		return ICON;
+	}
 
-  @Override
-  public Tool createTool() throws Exception {
-    ActionInfo action = ActionInfo.createInner(m_editor);
-    return ActionUseEntryInfo.createActionTool(action);
-  }
+	@Override
+	public Tool createTool() throws Exception {
+		ActionInfo action = ActionInfo.createInner(m_editor);
+		return ActionUseEntryInfo.createActionTool(action);
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/palette/ActionUseEntryInfo.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/palette/ActionUseEntryInfo.java
index ff6711cec..b7a0f5320 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/palette/ActionUseEntryInfo.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/palette/ActionUseEntryInfo.java
@@ -39,63 +39,63 @@
  * @coverage swing.editor.palette
  */
 public final class ActionUseEntryInfo extends ToolEntryInfo {
-  private static final Image ICON = Activator.getImage("info/Action/action.gif");
-  private final ActionInfo m_action;
+	private static final Image ICON = Activator.getImage("info/Action/action.gif");
+	private final ActionInfo m_action;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ActionUseEntryInfo(ActionInfo action) throws Exception {
-    m_action = action;
-    setId(ObjectUtils.identityToString(action));
-    setName(action.getVariableSupport().getName());
-    setDescription(ModelMessages.ActionUseEntryInfo_description);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ActionUseEntryInfo(ActionInfo action) throws Exception {
+		m_action = action;
+		setId(ObjectUtils.identityToString(action));
+		setName(action.getVariableSupport().getName());
+		setDescription(ModelMessages.ActionUseEntryInfo_description);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // EntryInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Image getIcon() {
-    return ExecutionUtils.runObjectLog(new RunnableObjectEx<Image>() {
-      public Image runObject() throws Exception {
-        return m_action.getPresentation().getIcon();
-      }
-    }, ICON);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// EntryInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Image getIcon() {
+		return ExecutionUtils.runObjectLog(new RunnableObjectEx<Image>() {
+			public Image runObject() throws Exception {
+				return m_action.getPresentation().getIcon();
+			}
+		}, ICON);
+	}
 
-  @Override
-  public Tool createTool() throws Exception {
-    return createActionTool(m_action);
-  }
+	@Override
+	public Tool createTool() throws Exception {
+		return createActionTool(m_action);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link Tool} for dropping {@link ActionInfo}.
-   */
-  static Tool createActionTool(final ActionInfo action) {
-    // prepare factory
-    ICreationFactory factory = new ICreationFactory() {
-      public void activate() throws Exception {
-      }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link Tool} for dropping {@link ActionInfo}.
+	 */
+	static Tool createActionTool(final ActionInfo action) {
+		// prepare factory
+		ICreationFactory factory = new ICreationFactory() {
+			public void activate() throws Exception {
+			}
 
-      public Object getNewObject() {
-        return action;
-      }
-    };
-    // return tool
-    return new CreationTool(factory) {
-      @Override
-      protected void selectAddedObjects() {
-      }
-    };
-  }
+			public Object getNewObject() {
+				return action;
+			}
+		};
+		// return tool
+		return new CreationTool(factory) {
+			@Override
+			protected void selectAddedObjects() {
+			}
+		};
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/palette/PaletteMessages.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/palette/PaletteMessages.java
index f2c86361c..2fd1e9664 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/palette/PaletteMessages.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/palette/PaletteMessages.java
@@ -3,20 +3,20 @@
 import org.eclipse.osgi.util.NLS;
 
 public class PaletteMessages extends NLS {
-  private static final String BUNDLE_NAME = "org.eclipse.wb.internal.swing.palette.PaletteMessages"; //$NON-NLS-1$
-  public static String AbsoluteLayoutEntryInfo_description;
-  public static String AbsoluteLayoutEntryInfo_name;
-  public static String ActionExternalEntryInfo_description;
-  public static String ActionExternalEntryInfo_name;
-  public static String ActionNewEntryInfo_description;
-  public static String ActionNewEntryInfo_name;
-  public static String SwingPaletteEntryInfo_description;
-  public static String SwingPaletteEntryInfo_name;
-  static {
-    // initialize resource bundle
-    NLS.initializeMessages(BUNDLE_NAME, PaletteMessages.class);
-  }
+	private static final String BUNDLE_NAME = "org.eclipse.wb.internal.swing.palette.PaletteMessages"; //$NON-NLS-1$
+	public static String AbsoluteLayoutEntryInfo_description;
+	public static String AbsoluteLayoutEntryInfo_name;
+	public static String ActionExternalEntryInfo_description;
+	public static String ActionExternalEntryInfo_name;
+	public static String ActionNewEntryInfo_description;
+	public static String ActionNewEntryInfo_name;
+	public static String SwingPaletteEntryInfo_description;
+	public static String SwingPaletteEntryInfo_name;
+	static {
+		// initialize resource bundle
+		NLS.initializeMessages(BUNDLE_NAME, PaletteMessages.class);
+	}
 
-  private PaletteMessages() {
-  }
+	private PaletteMessages() {
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/palette/SwingPaletteEntryInfo.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/palette/SwingPaletteEntryInfo.java
index cec129029..5cef481b6 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/palette/SwingPaletteEntryInfo.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/palette/SwingPaletteEntryInfo.java
@@ -43,158 +43,158 @@
  * @coverage swing.editor.palette
  */
 public final class SwingPaletteEntryInfo extends EntryInfo {
-  private static final Image ICON = Activator.getImage("popup_palette.png");
+	private static final Image ICON = Activator.getImage("popup_palette.png");
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SwingPaletteEntryInfo() {
-    setId(getClass().getName());
-    setName(PaletteMessages.SwingPaletteEntryInfo_name);
-    setDescription(PaletteMessages.SwingPaletteEntryInfo_description);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SwingPaletteEntryInfo() {
+		setId(getClass().getName());
+		setName(PaletteMessages.SwingPaletteEntryInfo_name);
+		setDescription(PaletteMessages.SwingPaletteEntryInfo_description);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // EntryInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Image getIcon() {
-    return ICON;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// EntryInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Image getIcon() {
+		return ICON;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Activation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean activate(boolean reload) {
-    Display display = Display.getCurrent();
-    // create Shell with Swing palette
-    final Shell shell = new Shell(DesignerPlugin.getShell(), SWT.ON_TOP | SWT.NO_FOCUS);
-    {
-      shell.setLayout(new FillLayout());
-      DesignerPalette palette = new DesignerPalette(shell, SWT.NONE, false);
-      palette.setInput(m_editPartViewer, m_rootJavaInfo, IPreferenceConstants.TOOLKIT_ID);
-      // make all Control's non-focusable, to avoid Shell activation on click
-      ExecutionUtils.runLog(new RunnableEx() {
-        public void run() throws Exception {
-          makeNoFocus(shell);
-        }
-      });
-    }
-    // show Shell near to mouse cursor
-    {
-      // prepare default bounds for popup palette
-      Rectangle bounds;
-      {
-        Rectangle mainPaletteBounds = display.getCursorControl().getBounds();
-        Point cursorLocation = display.getCursorLocation();
-        bounds =
-            new Rectangle(cursorLocation.x,
-                cursorLocation.y,
-                mainPaletteBounds.width,
-                mainPaletteBounds.height);
-      }
-      // check for leaving Display client area
-      {
-        Rectangle displayArea = display.getClientArea();
-        if (bounds.x + bounds.width > displayArea.width - 100) {
-          bounds.x = bounds.x - bounds.width;
-        }
-        if (bounds.y + bounds.height > displayArea.height - 50) {
-          bounds.y = displayArea.height - bounds.height - 10;
-        }
-      }
-      // set bounds
-      shell.setBounds(bounds);
-    }
-    // hide Shell when appropriate
-    addClosePaletteListeners(shell);
-    // show Shell
-    shell.setVisible(true);
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Activation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean activate(boolean reload) {
+		Display display = Display.getCurrent();
+		// create Shell with Swing palette
+		final Shell shell = new Shell(DesignerPlugin.getShell(), SWT.ON_TOP | SWT.NO_FOCUS);
+		{
+			shell.setLayout(new FillLayout());
+			DesignerPalette palette = new DesignerPalette(shell, SWT.NONE, false);
+			palette.setInput(m_editPartViewer, m_rootJavaInfo, IPreferenceConstants.TOOLKIT_ID);
+			// make all Control's non-focusable, to avoid Shell activation on click
+			ExecutionUtils.runLog(new RunnableEx() {
+				public void run() throws Exception {
+					makeNoFocus(shell);
+				}
+			});
+		}
+		// show Shell near to mouse cursor
+		{
+			// prepare default bounds for popup palette
+			Rectangle bounds;
+			{
+				Rectangle mainPaletteBounds = display.getCursorControl().getBounds();
+				Point cursorLocation = display.getCursorLocation();
+				bounds =
+						new Rectangle(cursorLocation.x,
+								cursorLocation.y,
+								mainPaletteBounds.width,
+								mainPaletteBounds.height);
+			}
+			// check for leaving Display client area
+			{
+				Rectangle displayArea = display.getClientArea();
+				if (bounds.x + bounds.width > displayArea.width - 100) {
+					bounds.x = bounds.x - bounds.width;
+				}
+				if (bounds.y + bounds.height > displayArea.height - 50) {
+					bounds.y = displayArea.height - bounds.height - 10;
+				}
+			}
+			// set bounds
+			shell.setBounds(bounds);
+		}
+		// hide Shell when appropriate
+		addClosePaletteListeners(shell);
+		// show Shell
+		shell.setVisible(true);
+		return false;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Not only {@link Shell}, but also any {@link Control} should be marked with {@link SWT#NO_FOCUS}
-   * to avoid {@link Shell} activation.
-   */
-  private static void makeNoFocus(Control control) throws Exception {
-    ReflectionUtils.setField(control, "style", control.getStyle() | SWT.NO_FOCUS);
-    if (control instanceof Composite) {
-      Composite composite = (Composite) control;
-      for (Control child : composite.getChildren()) {
-        makeNoFocus(child);
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Not only {@link Shell}, but also any {@link Control} should be marked with {@link SWT#NO_FOCUS}
+	 * to avoid {@link Shell} activation.
+	 */
+	private static void makeNoFocus(Control control) throws Exception {
+		ReflectionUtils.setField(control, "style", control.getStyle() | SWT.NO_FOCUS);
+		if (control instanceof Composite) {
+			Composite composite = (Composite) control;
+			for (Control child : composite.getChildren()) {
+				makeNoFocus(child);
+			}
+		}
+	}
 
-  private void addClosePaletteListeners(final Shell shell) {
-    final Shell shellMain = (Shell) shell.getParent();
-    final Display display = shell.getDisplay();
-    // close Shell on...
-    final Listener shellClose_filter = new Listener() {
-      public void handleEvent(Event event) {
-        if (event.type == SWT.KeyDown) {
-          // ...ESC press
-          if (event.keyCode == SWT.ESC) {
-            event.doit = false;
-            shell.dispose();
-          }
-        } else if (event.type == SWT.MouseDown) {
-          // ...click outside of Shell hierarchy
-          if (!UiUtils.isChildOf(shell, event.widget)) {
-            shell.dispose();
-          }
-        } else if (event.type == SWT.Deactivate) {
-          // ..."main" Shell deactivation
-          if (event.widget instanceof Shell) {
-            display.asyncExec(new Runnable() {
-              public void run() {
-                if (!UiUtils.isChildOf(shellMain, display.getActiveShell())) {
-                  shell.dispose();
-                }
-              }
-            });
-          }
-        }
-      }
-    };
-    display.addFilter(SWT.KeyDown, shellClose_filter);
-    display.addFilter(SWT.MouseDown, shellClose_filter);
-    display.addFilter(SWT.Deactivate, shellClose_filter);
-    // close Shell: on Tool selection (in popup palette)
-    final EditDomain editDomain = m_editPartViewer.getEditDomain();
-    final IActiveToolListener toolListener = new IActiveToolListener() {
-      public void toolActivated(Tool tool) {
-        shell.dispose();
-      }
-    };
-    display.asyncExec(new Runnable() {
-      public void run() {
-        editDomain.addActiveToolListener(toolListener);
-      }
-    });
-    // remove "shellClose_filter" on Shell dispose
-    Listener listener = new Listener() {
-      public void handleEvent(Event event) {
-        if (event.type == SWT.Dispose) {
-          display.removeFilter(SWT.KeyDown, shellClose_filter);
-          display.removeFilter(SWT.MouseDown, shellClose_filter);
-          display.removeFilter(SWT.Deactivate, shellClose_filter);
-        }
-      }
-    };
-    shell.addListener(SWT.Dispose, listener);
-  }
+	private void addClosePaletteListeners(final Shell shell) {
+		final Shell shellMain = (Shell) shell.getParent();
+		final Display display = shell.getDisplay();
+		// close Shell on...
+		final Listener shellClose_filter = new Listener() {
+			public void handleEvent(Event event) {
+				if (event.type == SWT.KeyDown) {
+					// ...ESC press
+					if (event.keyCode == SWT.ESC) {
+						event.doit = false;
+						shell.dispose();
+					}
+				} else if (event.type == SWT.MouseDown) {
+					// ...click outside of Shell hierarchy
+					if (!UiUtils.isChildOf(shell, event.widget)) {
+						shell.dispose();
+					}
+				} else if (event.type == SWT.Deactivate) {
+					// ..."main" Shell deactivation
+					if (event.widget instanceof Shell) {
+						display.asyncExec(new Runnable() {
+							public void run() {
+								if (!UiUtils.isChildOf(shellMain, display.getActiveShell())) {
+									shell.dispose();
+								}
+							}
+						});
+					}
+				}
+			}
+		};
+		display.addFilter(SWT.KeyDown, shellClose_filter);
+		display.addFilter(SWT.MouseDown, shellClose_filter);
+		display.addFilter(SWT.Deactivate, shellClose_filter);
+		// close Shell: on Tool selection (in popup palette)
+		final EditDomain editDomain = m_editPartViewer.getEditDomain();
+		final IActiveToolListener toolListener = new IActiveToolListener() {
+			public void toolActivated(Tool tool) {
+				shell.dispose();
+			}
+		};
+		display.asyncExec(new Runnable() {
+			public void run() {
+				editDomain.addActiveToolListener(toolListener);
+			}
+		});
+		// remove "shellClose_filter" on Shell dispose
+		Listener listener = new Listener() {
+			public void handleEvent(Event event) {
+				if (event.type == SWT.Dispose) {
+					display.removeFilter(SWT.KeyDown, shellClose_filter);
+					display.removeFilter(SWT.MouseDown, shellClose_filter);
+					display.removeFilter(SWT.Deactivate, shellClose_filter);
+				}
+			}
+		};
+		shell.addListener(SWT.Dispose, listener);
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/parser/ParseFactory.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/parser/ParseFactory.java
index 67b21388f..59a15b304 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/parser/ParseFactory.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/parser/ParseFactory.java
@@ -66,286 +66,286 @@
  * @coverage swing.parser
  */
 public class ParseFactory extends AbstractParseFactory {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IParseFactory
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public ParseRootContext getRootContext(AstEditor editor,
-      TypeDeclaration typeDeclaration,
-      ITypeBinding typeBinding) throws Exception {
-    // special unsupported classes
-    if (AstNodeUtils.isSuccessorOf(typeBinding, "javax.swing.Action")) {
-      throw new DesignerException(IExceptionConstants.NO_DESIGN_ACTION);
-    }
-    // check for Swing/AWT type
-    {
-      // check if there are java.awt.Component successors
-      final boolean[] isSwing = new boolean[1];
-      typeDeclaration.accept(new ASTVisitor() {
-        @Override
-        public void postVisit(ASTNode node) {
-          if (!isSwing[0] && node instanceof Expression) {
-            Expression expression = (Expression) node;
-            ITypeBinding expressionBinding = AstNodeUtils.getTypeBinding(expression);
-            if (AstNodeUtils.isSuccessorOf(expressionBinding, Component.class)) {
-              isSwing[0] = true;
-            }
-          }
-        }
-      });
-      // not Swing, ignore
-      if (!isSwing[0]) {
-        return null;
-      }
-    }
-    // rewrite
-    new SwingRewriteProcessor(editor, typeDeclaration).rewrite();
-    // prepare class loader
-    initializeClassLoader(editor);
-    // check for @wbp.parser.entryPoint
-    {
-      MethodDeclaration method = ExecutionFlowUtils.getExecutionFlow_entryPoint(typeDeclaration);
-      if (method != null) {
-        List<MethodDeclaration> rootMethods = Lists.newArrayList(method);
-        return new ParseRootContext(null, new ExecutionFlowDescription(rootMethods));
-      }
-    }
-    // support for java.awt.Component
-    if (AstNodeUtils.isSuccessorOf(typeBinding, Component.class)
-        || AstNodeUtils.isSuccessorOf(typeBinding, "org.jdesktop.application.View")) {
-      ITypeBinding typeBinding_super = typeBinding.getSuperclass();
-      // prepare class of component
-      Class<?> superClass = getSuperClass(editor, typeBinding_super);
-      if (superClass == javax.swing.JComponent.class) {
-        superClass = java.awt.Container.class;
-      }
-      // prepare creation
-      MethodDeclaration constructor = getConstructor(editor, typeDeclaration);
-      ThisCreationSupport creationSupport = new ThisCreationSupport(constructor);
-      // create JavaInfo
-      JavaInfo javaInfo = JavaInfoUtils.createJavaInfo(editor, superClass, creationSupport);
-      if (javaInfo != null) {
-        javaInfo.setVariableSupport(new ThisVariableSupport(javaInfo, constructor));
-        // prepare root context
-        List<MethodDeclaration> rootMethods = Lists.newArrayList();
-        rootMethods.add(constructor);
-        addRootMethods(rootMethods, superClass, typeDeclaration);
-        return new ParseRootContext(javaInfo, new ExecutionFlowDescription(rootMethods));
-      }
-    }
-    // no root found
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IParseFactory
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public ParseRootContext getRootContext(AstEditor editor,
+			TypeDeclaration typeDeclaration,
+			ITypeBinding typeBinding) throws Exception {
+		// special unsupported classes
+		if (AstNodeUtils.isSuccessorOf(typeBinding, "javax.swing.Action")) {
+			throw new DesignerException(IExceptionConstants.NO_DESIGN_ACTION);
+		}
+		// check for Swing/AWT type
+		{
+			// check if there are java.awt.Component successors
+			final boolean[] isSwing = new boolean[1];
+			typeDeclaration.accept(new ASTVisitor() {
+				@Override
+				public void postVisit(ASTNode node) {
+					if (!isSwing[0] && node instanceof Expression) {
+						Expression expression = (Expression) node;
+						ITypeBinding expressionBinding = AstNodeUtils.getTypeBinding(expression);
+						if (AstNodeUtils.isSuccessorOf(expressionBinding, Component.class)) {
+							isSwing[0] = true;
+						}
+					}
+				}
+			});
+			// not Swing, ignore
+			if (!isSwing[0]) {
+				return null;
+			}
+		}
+		// rewrite
+		new SwingRewriteProcessor(editor, typeDeclaration).rewrite();
+		// prepare class loader
+		initializeClassLoader(editor);
+		// check for @wbp.parser.entryPoint
+		{
+			MethodDeclaration method = ExecutionFlowUtils.getExecutionFlow_entryPoint(typeDeclaration);
+			if (method != null) {
+				List<MethodDeclaration> rootMethods = Lists.newArrayList(method);
+				return new ParseRootContext(null, new ExecutionFlowDescription(rootMethods));
+			}
+		}
+		// support for java.awt.Component
+		if (AstNodeUtils.isSuccessorOf(typeBinding, Component.class)
+				|| AstNodeUtils.isSuccessorOf(typeBinding, "org.jdesktop.application.View")) {
+			ITypeBinding typeBinding_super = typeBinding.getSuperclass();
+			// prepare class of component
+			Class<?> superClass = getSuperClass(editor, typeBinding_super);
+			if (superClass == javax.swing.JComponent.class) {
+				superClass = java.awt.Container.class;
+			}
+			// prepare creation
+			MethodDeclaration constructor = getConstructor(editor, typeDeclaration);
+			ThisCreationSupport creationSupport = new ThisCreationSupport(constructor);
+			// create JavaInfo
+			JavaInfo javaInfo = JavaInfoUtils.createJavaInfo(editor, superClass, creationSupport);
+			if (javaInfo != null) {
+				javaInfo.setVariableSupport(new ThisVariableSupport(javaInfo, constructor));
+				// prepare root context
+				List<MethodDeclaration> rootMethods = Lists.newArrayList();
+				rootMethods.add(constructor);
+				addRootMethods(rootMethods, superClass, typeDeclaration);
+				return new ParseRootContext(javaInfo, new ExecutionFlowDescription(rootMethods));
+			}
+		}
+		// no root found
+		return null;
+	}
 
-  /**
-   * Includes additional {@link MethodDeclaration} into execution flow.
-   */
-  private static void addRootMethods(List<MethodDeclaration> rootMethods,
-      Class<?> superClass,
-      TypeDeclaration typeDeclaration) {
-    if (ReflectionUtils.isSuccessorOf(superClass, "java.applet.Applet")) {
-      MethodDeclaration initMethod = AstNodeUtils.getMethodBySignature(typeDeclaration, "init()");
-      if (initMethod != null) {
-        rootMethods.add(initMethod);
-      }
-    }
-    // add Action methods
-    for (MethodDeclaration method : typeDeclaration.getMethods()) {
-      IMethodBinding methodBinding = AstNodeUtils.getMethodBinding(method);
-      if (methodBinding != null) {
-        if (AstNodeUtils.isSuccessorOf(methodBinding.getReturnType(), "javax.swing.Action")) {
-          rootMethods.add(method);
-        }
-      }
-    }
-  }
+	/**
+	 * Includes additional {@link MethodDeclaration} into execution flow.
+	 */
+	private static void addRootMethods(List<MethodDeclaration> rootMethods,
+			Class<?> superClass,
+			TypeDeclaration typeDeclaration) {
+		if (ReflectionUtils.isSuccessorOf(superClass, "java.applet.Applet")) {
+			MethodDeclaration initMethod = AstNodeUtils.getMethodBySignature(typeDeclaration, "init()");
+			if (initMethod != null) {
+				rootMethods.add(initMethod);
+			}
+		}
+		// add Action methods
+		for (MethodDeclaration method : typeDeclaration.getMethods()) {
+			IMethodBinding methodBinding = AstNodeUtils.getMethodBinding(method);
+			if (methodBinding != null) {
+				if (AstNodeUtils.isSuccessorOf(methodBinding.getReturnType(), "javax.swing.Action")) {
+					rootMethods.add(method);
+				}
+			}
+		}
+	}
 
-  @Override
-  public JavaInfo create(AstEditor editor,
-      ClassInstanceCreation creation,
-      IMethodBinding methodBinding,
-      ITypeBinding typeBinding,
-      Expression arguments[],
-      JavaInfo argumentInfos[]) throws Exception {
-    AnonymousClassDeclaration anonymousClassDeclaration = creation.getAnonymousClassDeclaration();
-    // tweak anonymous type binding
-    if (anonymousClassDeclaration != null) {
-      typeBinding = typeBinding.getSuperclass();
-    }
-    // special support for javax.swing.AbstractAction
-    if (AstNodeUtils.isSuccessorOf(creation, "javax.swing.AbstractAction")) {
-      // ... as named class
-      {
-        ITypeBinding declaringClassBinding = AstNodeUtils.getGenericDeclaringClass(typeBinding);
-        if (declaringClassBinding != null) {
-          // ... as inner class
-          ITypeBinding topTypeBinding = AstNodeUtils.getEnclosingTypeTop(creation).resolveBinding();
-          if (declaringClassBinding == topTypeBinding) {
-            CreationSupport creationSupport = new ActionInnerCreationSupport(creation);
-            return JavaInfoUtils.createJavaInfo(editor, AbstractAction.class, creationSupport);
-          }
-          // ... as external class
-          {
-            CreationSupport creationSupport = new ConstructorCreationSupport(creation);
-            return JavaInfoUtils.createJavaInfo(editor, AbstractAction.class, creationSupport);
-          }
-        }
-      }
-      // ... as anonymous class
-      if (anonymousClassDeclaration != null) {
-        Class<?> clazz = getClass(editor, typeBinding);
-        CreationSupport creationSupport = new ActionAnonymousCreationSupport(creation);
-        return JavaInfoUtils.createJavaInfo(editor, clazz, creationSupport);
-      }
-    }
-    // check "super"
-    {
-      JavaInfo javaInfo =
-          super.create(editor, creation, methodBinding, typeBinding, arguments, argumentInfos);
-      if (javaInfo != null) {
-        return javaInfo;
-      }
-    }
-    // Swing object
-    if (isSwingObject(editor, typeBinding)) {
-      // prepare class of component
-      Class<?> componentClass = getClass(editor, typeBinding);
-      if (componentClass == null) {
-        return null;
-      }
-      // create JavaInfo
-      CreationSupport creationSupport = new ConstructorCreationSupport(creation);
-      return JavaInfoUtils.createJavaInfo(editor, componentClass, creationSupport);
-    }
-    // unknown class
-    return null;
-  }
+	@Override
+	public JavaInfo create(AstEditor editor,
+			ClassInstanceCreation creation,
+			IMethodBinding methodBinding,
+			ITypeBinding typeBinding,
+			Expression arguments[],
+			JavaInfo argumentInfos[]) throws Exception {
+		AnonymousClassDeclaration anonymousClassDeclaration = creation.getAnonymousClassDeclaration();
+		// tweak anonymous type binding
+		if (anonymousClassDeclaration != null) {
+			typeBinding = typeBinding.getSuperclass();
+		}
+		// special support for javax.swing.AbstractAction
+		if (AstNodeUtils.isSuccessorOf(creation, "javax.swing.AbstractAction")) {
+			// ... as named class
+			{
+				ITypeBinding declaringClassBinding = AstNodeUtils.getGenericDeclaringClass(typeBinding);
+				if (declaringClassBinding != null) {
+					// ... as inner class
+					ITypeBinding topTypeBinding = AstNodeUtils.getEnclosingTypeTop(creation).resolveBinding();
+					if (declaringClassBinding == topTypeBinding) {
+						CreationSupport creationSupport = new ActionInnerCreationSupport(creation);
+						return JavaInfoUtils.createJavaInfo(editor, AbstractAction.class, creationSupport);
+					}
+					// ... as external class
+					{
+						CreationSupport creationSupport = new ConstructorCreationSupport(creation);
+						return JavaInfoUtils.createJavaInfo(editor, AbstractAction.class, creationSupport);
+					}
+				}
+			}
+			// ... as anonymous class
+			if (anonymousClassDeclaration != null) {
+				Class<?> clazz = getClass(editor, typeBinding);
+				CreationSupport creationSupport = new ActionAnonymousCreationSupport(creation);
+				return JavaInfoUtils.createJavaInfo(editor, clazz, creationSupport);
+			}
+		}
+		// check "super"
+		{
+			JavaInfo javaInfo =
+					super.create(editor, creation, methodBinding, typeBinding, arguments, argumentInfos);
+			if (javaInfo != null) {
+				return javaInfo;
+			}
+		}
+		// Swing object
+		if (isSwingObject(editor, typeBinding)) {
+			// prepare class of component
+			Class<?> componentClass = getClass(editor, typeBinding);
+			if (componentClass == null) {
+				return null;
+			}
+			// create JavaInfo
+			CreationSupport creationSupport = new ConstructorCreationSupport(creation);
+			return JavaInfoUtils.createJavaInfo(editor, componentClass, creationSupport);
+		}
+		// unknown class
+		return null;
+	}
 
-  @Override
-  public JavaInfo create(AstEditor editor,
-      MethodInvocation invocation,
-      IMethodBinding methodBinding,
-      Expression arguments[],
-      JavaInfo expressionInfo,
-      JavaInfo argumentInfos[],
-      IJavaInfoParseResolver javaInfoResolver) throws Exception {
-    // check "super"
-    {
-      JavaInfo javaInfo =
-          super.create(
-              editor,
-              invocation,
-              methodBinding,
-              arguments,
-              expressionInfo,
-              argumentInfos,
-              javaInfoResolver);
-      if (javaInfo != null) {
-        return javaInfo;
-      }
-    }
-    // javax.swing.JPopupMenu is associated using addPopup() invocation
-    if (argumentInfos.length == 2
-        && argumentInfos[0] instanceof ComponentInfo
-        && argumentInfos[1] instanceof JPopupMenuInfo
-        && AstNodeUtils.getMethodSignature(methodBinding).equals(
-            "addPopup(java.awt.Component,javax.swing.JPopupMenu)")) {
-      ComponentInfo component = (ComponentInfo) argumentInfos[0];
-      JPopupMenuInfo popup = (JPopupMenuInfo) argumentInfos[1];
-      popup.setAssociation(new JPopupMenuAssociation(invocation));
-      component.addChild(popup);
-    }
-    // no JavaInfo for MethodInvocation
-    return null;
-  }
+	@Override
+	public JavaInfo create(AstEditor editor,
+			MethodInvocation invocation,
+			IMethodBinding methodBinding,
+			Expression arguments[],
+			JavaInfo expressionInfo,
+			JavaInfo argumentInfos[],
+			IJavaInfoParseResolver javaInfoResolver) throws Exception {
+		// check "super"
+		{
+			JavaInfo javaInfo =
+					super.create(
+							editor,
+							invocation,
+							methodBinding,
+							arguments,
+							expressionInfo,
+							argumentInfos,
+							javaInfoResolver);
+			if (javaInfo != null) {
+				return javaInfo;
+			}
+		}
+		// javax.swing.JPopupMenu is associated using addPopup() invocation
+		if (argumentInfos.length == 2
+				&& argumentInfos[0] instanceof ComponentInfo
+				&& argumentInfos[1] instanceof JPopupMenuInfo
+				&& AstNodeUtils.getMethodSignature(methodBinding).equals(
+						"addPopup(java.awt.Component,javax.swing.JPopupMenu)")) {
+			ComponentInfo component = (ComponentInfo) argumentInfos[0];
+			JPopupMenuInfo popup = (JPopupMenuInfo) argumentInfos[1];
+			popup.setAssociation(new JPopupMenuAssociation(invocation));
+			component.addChild(popup);
+		}
+		// no JavaInfo for MethodInvocation
+		return null;
+	}
 
-  @Override
-  public boolean isToolkitObject(AstEditor editor, ITypeBinding typeBinding) throws Exception {
-    return isSwingObject(editor, typeBinding);
-  }
+	@Override
+	public boolean isToolkitObject(AstEditor editor, ITypeBinding typeBinding) throws Exception {
+		return isSwingObject(editor, typeBinding);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ClassLoader
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getToolkitId() {
-    return IPreferenceConstants.TOOLKIT_ID;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ClassLoader
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getToolkitId() {
+		return IPreferenceConstants.TOOLKIT_ID;
+	}
 
-  @Override
-  protected void initializeClassLoader(AstEditor editor) throws Exception {
-    ensureNotHeadless();
-    super.initializeClassLoader(editor);
-  }
+	@Override
+	protected void initializeClassLoader(AstEditor editor) throws Exception {
+		ensureNotHeadless();
+		super.initializeClassLoader(editor);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if given {@link ITypeBinding} is Swing/AWT object.
-   */
-  private static boolean isSwingObject(AstEditor editor, ITypeBinding typeBinding) throws Exception {
-    if (typeBinding == null) {
-      return false;
-    }
-    if (AstNodeUtils.isSuccessorOf(
-        typeBinding,
-        "java.awt.Component",
-        "java.awt.LayoutManager",
-        "javax.swing.Action",
-        "javax.swing.ButtonGroup")) {
-      return true;
-    }
-    //
-    String qualifiedName = AstNodeUtils.getFullyQualifiedName(typeBinding, true);
-    if ("java.awt.GridBagConstraints".equals(qualifiedName)
-        || "javax.swing.AbstractAction".equals(qualifiedName)) {
-      return true;
-    }
-    // try to find forced toolkit
-    {
-      EditorState editorState = EditorState.get(editor);
-      ILoadingContext loadingContext = EditorStateLoadingContext.get(editorState);
-      if (DescriptionHelper.hasForcedToolkitForComponent(
-          loadingContext,
-          IPreferenceConstants.TOOLKIT_ID,
-          qualifiedName)) {
-        return true;
-      }
-    }
-    //
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if given {@link ITypeBinding} is Swing/AWT object.
+	 */
+	private static boolean isSwingObject(AstEditor editor, ITypeBinding typeBinding) throws Exception {
+		if (typeBinding == null) {
+			return false;
+		}
+		if (AstNodeUtils.isSuccessorOf(
+				typeBinding,
+				"java.awt.Component",
+				"java.awt.LayoutManager",
+				"javax.swing.Action",
+				"javax.swing.ButtonGroup")) {
+			return true;
+		}
+		//
+		String qualifiedName = AstNodeUtils.getFullyQualifiedName(typeBinding, true);
+		if ("java.awt.GridBagConstraints".equals(qualifiedName)
+				|| "javax.swing.AbstractAction".equals(qualifiedName)) {
+			return true;
+		}
+		// try to find forced toolkit
+		{
+			EditorState editorState = EditorState.get(editor);
+			ILoadingContext loadingContext = EditorStateLoadingContext.get(editorState);
+			if (DescriptionHelper.hasForcedToolkitForComponent(
+					loadingContext,
+					IPreferenceConstants.TOOLKIT_ID,
+					qualifiedName)) {
+				return true;
+			}
+		}
+		//
+		return false;
+	}
 
-  /**
-   * FlexBuilder from Adobe configures Swing to work in "headless" mode. We should check and
-   * configure it back into valid state.
-   */
-  private static void ensureNotHeadless() {
-    try {
-      if (GraphicsEnvironment.isHeadless()) {
-        // set 'headless' to false
-        Properties systemProps = System.getProperties();
-        systemProps.put("java.awt.headless", "false");
-        System.setProperties(systemProps);
-        // clear cached values
-        Toolkit.getDefaultToolkit();
-        ReflectionUtils.setField(Toolkit.class, "toolkit", null);
-        ReflectionUtils.setField(GraphicsEnvironment.class, "headless", null);
-        ReflectionUtils.setField(GraphicsEnvironment.class, "localEnv", null);
-        // force re-initialize
-        GraphicsEnvironment.isHeadless();
-        GraphicsEnvironment.getLocalGraphicsEnvironment();
-        Toolkit.getDefaultToolkit();
-      }
-    } catch (Throwable e) {
-      // ignore
-    }
-  }
+	/**
+	 * FlexBuilder from Adobe configures Swing to work in "headless" mode. We should check and
+	 * configure it back into valid state.
+	 */
+	private static void ensureNotHeadless() {
+		try {
+			if (GraphicsEnvironment.isHeadless()) {
+				// set 'headless' to false
+				Properties systemProps = System.getProperties();
+				systemProps.put("java.awt.headless", "false");
+				System.setProperties(systemProps);
+				// clear cached values
+				Toolkit.getDefaultToolkit();
+				ReflectionUtils.setField(Toolkit.class, "toolkit", null);
+				ReflectionUtils.setField(GraphicsEnvironment.class, "headless", null);
+				ReflectionUtils.setField(GraphicsEnvironment.class, "localEnv", null);
+				// force re-initialize
+				GraphicsEnvironment.isHeadless();
+				GraphicsEnvironment.getLocalGraphicsEnvironment();
+				Toolkit.getDefaultToolkit();
+			}
+		} catch (Throwable e) {
+			// ignore
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/parser/ParseFactorySimpleModelCic.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/parser/ParseFactorySimpleModelCic.java
index 1a2df59e0..923e1e9bf 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/parser/ParseFactorySimpleModelCic.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/parser/ParseFactorySimpleModelCic.java
@@ -28,40 +28,40 @@
  * @coverage swing.parser
  */
 public class ParseFactorySimpleModelCic implements IParseFactorySimpleModelCic {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IParseFactory_simpleModel_CIC
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public boolean accept(AstEditor editor, ClassInstanceCreation creation, ITypeBinding typeBinding)
-      throws Exception {
-    EditorState state = EditorState.get(editor);
-    if (state.getEditorLoader() == null) {
-      return false;
-    }
-    // Swing components
-    String typeName = AstNodeUtils.getFullyQualifiedName(typeBinding, true);
-    if (typeName.startsWith("java.awt.") || typeName.startsWith("javax.swing.")) {
-      return true;
-    }
-    // something different
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IParseFactory_simpleModel_CIC
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public boolean accept(AstEditor editor, ClassInstanceCreation creation, ITypeBinding typeBinding)
+			throws Exception {
+		EditorState state = EditorState.get(editor);
+		if (state.getEditorLoader() == null) {
+			return false;
+		}
+		// Swing components
+		String typeName = AstNodeUtils.getFullyQualifiedName(typeBinding, true);
+		if (typeName.startsWith("java.awt.") || typeName.startsWith("javax.swing.")) {
+			return true;
+		}
+		// something different
+		return false;
+	}
 
-  public JavaInfo create(AstEditor editor, ClassInstanceCreation creation, ITypeBinding typeBinding)
-      throws Exception {
-    // only Component
-    boolean isSwingModel =
-        AstNodeUtils.isSuccessorOf(typeBinding, "java.awt.Component")
-            || AstNodeUtils.isSuccessorOf(typeBinding, "java.awt.LayoutManager")
-            || AstNodeUtils.isSuccessorOf(typeBinding, "java.awt.GridBagConstraints")
-            || AstNodeUtils.isSuccessorOf(typeBinding, "javax.swing.ButtonGroup")
-            || AstNodeUtils.isSuccessorOf(typeBinding, "javax.swing.AbstractAction");
-    if (!isSwingModel) {
-      return null;
-    }
-    // standard Swing component
-    String typeName = AstNodeUtils.getFullyQualifiedName(typeBinding, true);
-    return JavaInfoUtils.createJavaInfo(editor, typeName, new ConstructorCreationSupport(creation));
-  }
+	public JavaInfo create(AstEditor editor, ClassInstanceCreation creation, ITypeBinding typeBinding)
+			throws Exception {
+		// only Component
+		boolean isSwingModel =
+				AstNodeUtils.isSuccessorOf(typeBinding, "java.awt.Component")
+				|| AstNodeUtils.isSuccessorOf(typeBinding, "java.awt.LayoutManager")
+				|| AstNodeUtils.isSuccessorOf(typeBinding, "java.awt.GridBagConstraints")
+				|| AstNodeUtils.isSuccessorOf(typeBinding, "javax.swing.ButtonGroup")
+				|| AstNodeUtils.isSuccessorOf(typeBinding, "javax.swing.AbstractAction");
+		if (!isSwingModel) {
+			return null;
+		}
+		// standard Swing component
+		String typeName = AstNodeUtils.getFullyQualifiedName(typeBinding, true);
+		return JavaInfoUtils.createJavaInfo(editor, typeName, new ConstructorCreationSupport(creation));
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/parser/SwingExecutionFlowProvider.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/parser/SwingExecutionFlowProvider.java
index 1a50960c9..fee3479f8 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/parser/SwingExecutionFlowProvider.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/parser/SwingExecutionFlowProvider.java
@@ -27,45 +27,45 @@
  * @coverage swing.parser
  */
 public class SwingExecutionFlowProvider extends ExecutionFlowProvider {
-  @Override
-  public MethodDeclaration getDefaultConstructor(TypeDeclaration typeDeclaration) {
-    ITypeBinding typeBinding = AstNodeUtils.getTypeBinding(typeDeclaration);
-    // find constructor without parameters
-    if (AstNodeUtils.isSuccessorOf(typeBinding, "java.awt.Component")) {
-      for (MethodDeclaration constructor : AstNodeUtils.getConstructors(typeDeclaration)) {
-        if (constructor.parameters().isEmpty()) {
-          return constructor;
-        }
-      }
-    }
-    // super
-    return super.getDefaultConstructor(typeDeclaration);
-  }
+	@Override
+	public MethodDeclaration getDefaultConstructor(TypeDeclaration typeDeclaration) {
+		ITypeBinding typeBinding = AstNodeUtils.getTypeBinding(typeDeclaration);
+		// find constructor without parameters
+		if (AstNodeUtils.isSuccessorOf(typeBinding, "java.awt.Component")) {
+			for (MethodDeclaration constructor : AstNodeUtils.getConstructors(typeDeclaration)) {
+				if (constructor.parameters().isEmpty()) {
+					return constructor;
+				}
+			}
+		}
+		// super
+		return super.getDefaultConstructor(typeDeclaration);
+	}
 
-  @Override
-  public boolean shouldVisit(AnonymousClassDeclaration anonymous) throws Exception {
-    if (AstNodeUtils.isSuccessorOf(anonymous.resolveBinding(), "java.lang.Runnable")) {
-      ClassInstanceCreation creation = (ClassInstanceCreation) anonymous.getParent();
-      if (creation.getLocationInParent() == MethodInvocation.ARGUMENTS_PROPERTY) {
-        MethodInvocation invocation = (MethodInvocation) creation.getParent();
-        return AstNodeUtils.isMethodInvocation(
-            invocation,
-            "java.awt.EventQueue",
-            "invokeLater(java.lang.Runnable)")
-            || AstNodeUtils.isMethodInvocation(
-                invocation,
-                "javax.swing.SwingUtilities",
-                "invokeLater(java.lang.Runnable)")
-            || AstNodeUtils.isMethodInvocation(
-                invocation,
-                "java.awt.EventQueue",
-                "invokeAndWait(java.lang.Runnable)")
-            || AstNodeUtils.isMethodInvocation(
-                invocation,
-                "javax.swing.SwingUtilities",
-                "invokeAndWait(java.lang.Runnable)");
-      }
-    }
-    return super.shouldVisit(anonymous);
-  }
+	@Override
+	public boolean shouldVisit(AnonymousClassDeclaration anonymous) throws Exception {
+		if (AstNodeUtils.isSuccessorOf(anonymous.resolveBinding(), "java.lang.Runnable")) {
+			ClassInstanceCreation creation = (ClassInstanceCreation) anonymous.getParent();
+			if (creation.getLocationInParent() == MethodInvocation.ARGUMENTS_PROPERTY) {
+				MethodInvocation invocation = (MethodInvocation) creation.getParent();
+				return AstNodeUtils.isMethodInvocation(
+						invocation,
+						"java.awt.EventQueue",
+						"invokeLater(java.lang.Runnable)")
+						|| AstNodeUtils.isMethodInvocation(
+								invocation,
+								"javax.swing.SwingUtilities",
+								"invokeLater(java.lang.Runnable)")
+						|| AstNodeUtils.isMethodInvocation(
+								invocation,
+								"java.awt.EventQueue",
+								"invokeAndWait(java.lang.Runnable)")
+						|| AstNodeUtils.isMethodInvocation(
+								invocation,
+								"javax.swing.SwingUtilities",
+								"invokeAndWait(java.lang.Runnable)");
+			}
+		}
+		return super.shouldVisit(anonymous);
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/parser/SwingRewriteProcessor.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/parser/SwingRewriteProcessor.java
index 7418f2323..37c1aef2a 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/parser/SwingRewriteProcessor.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/parser/SwingRewriteProcessor.java
@@ -34,128 +34,128 @@
  * @coverage swing.parser
  */
 public final class SwingRewriteProcessor {
-  private final AstEditor editor;
-  private final TypeDeclaration typeDeclaration;
+	private final AstEditor editor;
+	private final TypeDeclaration typeDeclaration;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SwingRewriteProcessor(AstEditor editor, TypeDeclaration typeDeclaration) {
-    this.editor = editor;
-    this.typeDeclaration = typeDeclaration;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SwingRewriteProcessor(AstEditor editor, TypeDeclaration typeDeclaration) {
+		this.editor = editor;
+		this.typeDeclaration = typeDeclaration;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Rewrite
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void rewrite() {
-    rewrite_JScrollPane();
-    rewrite_SuperMethodInvocation();
-    rewrite_RootPaneContainer();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Rewrite
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void rewrite() {
+		rewrite_JScrollPane();
+		rewrite_SuperMethodInvocation();
+		rewrite_RootPaneContainer();
+	}
 
-  private void rewrite_JScrollPane() {
-    typeDeclaration.accept(new AstVisitorEx() {
-      @Override
-      public void endVisitEx(MethodInvocation node) throws Exception {
-        if (AstNodeUtils.isMethodInvocation(node, "javax.swing.JScrollPane", "getViewport()")) {
-          if (node.getParent() instanceof MethodInvocation) {
-            MethodInvocation addInvocation = (MethodInvocation) node.getParent();
-            if (addInvocation.getName().getIdentifier().equals("add")
-                && addInvocation.getParent() instanceof ExpressionStatement) {
-              Statement statement = (Statement) addInvocation.getParent();
-              String scrollSource = editor.getSource(node.getExpression());
-              Expression componentExpression = DomGenerics.arguments(addInvocation).get(0);
-              String componentSource = editor.getSource(componentExpression);
-              StatementTarget target = new StatementTarget(statement, true);
-              editor.addStatement(
-                  scrollSource + ".setViewportView(" + componentSource + ");",
-                  target);
-              editor.removeEnclosingStatement(statement);
-            }
-          }
-        }
-      }
-    });
-  }
+	private void rewrite_JScrollPane() {
+		typeDeclaration.accept(new AstVisitorEx() {
+			@Override
+			public void endVisitEx(MethodInvocation node) throws Exception {
+				if (AstNodeUtils.isMethodInvocation(node, "javax.swing.JScrollPane", "getViewport()")) {
+					if (node.getParent() instanceof MethodInvocation) {
+						MethodInvocation addInvocation = (MethodInvocation) node.getParent();
+						if (addInvocation.getName().getIdentifier().equals("add")
+								&& addInvocation.getParent() instanceof ExpressionStatement) {
+							Statement statement = (Statement) addInvocation.getParent();
+							String scrollSource = editor.getSource(node.getExpression());
+							Expression componentExpression = DomGenerics.arguments(addInvocation).get(0);
+							String componentSource = editor.getSource(componentExpression);
+							StatementTarget target = new StatementTarget(statement, true);
+							editor.addStatement(
+									scrollSource + ".setViewportView(" + componentSource + ");",
+									target);
+							editor.removeEnclosingStatement(statement);
+						}
+					}
+				}
+			}
+		});
+	}
 
-  private void rewrite_SuperMethodInvocation() {
-    typeDeclaration.accept(new AstVisitorEx() {
-      @Override
-      public void endVisitEx(SuperMethodInvocation node) throws Exception {
-        if (AstNodeUtils.isMethodInvocation(
-            node,
-            "java.awt.Container",
-            "setLayout(java.awt.LayoutManager)")) {
-          String superSource = editor.getSource(node);
-          String source = StringUtils.removeStart(superSource, "super.");
-          editor.replaceExpression(node, source);
-        }
-      }
-    });
-  }
+	private void rewrite_SuperMethodInvocation() {
+		typeDeclaration.accept(new AstVisitorEx() {
+			@Override
+			public void endVisitEx(SuperMethodInvocation node) throws Exception {
+				if (AstNodeUtils.isMethodInvocation(
+						node,
+						"java.awt.Container",
+						"setLayout(java.awt.LayoutManager)")) {
+					String superSource = editor.getSource(node);
+					String source = StringUtils.removeStart(superSource, "super.");
+					editor.replaceExpression(node, source);
+				}
+			}
+		});
+	}
 
-  private void rewrite_RootPaneContainer() {
-    typeDeclaration.accept(new AstVisitorEx() {
-      @Override
-      public void endVisitEx(MethodInvocation node) throws Exception {
-        if (isInterestingMethod(node)) {
-          Expression expression = node.getExpression();
-          String newExpression;
-          if (expression == null || expression instanceof ThisExpression) {
-            newExpression = "getContentPane()";
-          } else {
-            newExpression = editor.getSource(expression) + ".getContentPane()";
-          }
-          editor.replaceInvocationExpression(node, newExpression);
-        }
-      }
+	private void rewrite_RootPaneContainer() {
+		typeDeclaration.accept(new AstVisitorEx() {
+			@Override
+			public void endVisitEx(MethodInvocation node) throws Exception {
+				if (isInterestingMethod(node)) {
+					Expression expression = node.getExpression();
+					String newExpression;
+					if (expression == null || expression instanceof ThisExpression) {
+						newExpression = "getContentPane()";
+					} else {
+						newExpression = editor.getSource(expression) + ".getContentPane()";
+					}
+					editor.replaceInvocationExpression(node, newExpression);
+				}
+			}
 
-      private boolean isInterestingMethod(MethodInvocation node) {
-        // expression
-        {
-          Expression expression = node.getExpression();
-          if (expression == null) {
-            if (AstNodeUtils.getEnclosingType(node) != typeDeclaration) {
-              return false;
-            }
-            if (!isRootPaneContainer(typeDeclaration)) {
-              return false;
-            }
-          } else {
-            if (!isRootPaneContainer(expression)) {
-              return false;
-            }
-          }
-        }
-        // signature
-        String methodName = node.getName().getIdentifier();
-        if (methodName.equals("setLayout")) {
-          String signature = AstNodeUtils.getMethodSignature(node);
-          if (signature.equals("setLayout(java.awt.LayoutManager)")) {
-            return true;
-          }
-        }
-        if (methodName.equals("add")) {
-          return true;
-        }
-        return false;
-      }
-    });
-  }
+			private boolean isInterestingMethod(MethodInvocation node) {
+				// expression
+				{
+					Expression expression = node.getExpression();
+					if (expression == null) {
+						if (AstNodeUtils.getEnclosingType(node) != typeDeclaration) {
+							return false;
+						}
+						if (!isRootPaneContainer(typeDeclaration)) {
+							return false;
+						}
+					} else {
+						if (!isRootPaneContainer(expression)) {
+							return false;
+						}
+					}
+				}
+				// signature
+				String methodName = node.getName().getIdentifier();
+				if (methodName.equals("setLayout")) {
+					String signature = AstNodeUtils.getMethodSignature(node);
+					if (signature.equals("setLayout(java.awt.LayoutManager)")) {
+						return true;
+					}
+				}
+				if (methodName.equals("add")) {
+					return true;
+				}
+				return false;
+			}
+		});
+	}
 
-  private static boolean isRootPaneContainer(Object target) {
-    ITypeBinding typeBinding;
-    if (target instanceof TypeDeclaration) {
-      typeBinding = AstNodeUtils.getTypeBinding((TypeDeclaration) target);
-    } else {
-      assert target instanceof Expression;
-      typeBinding = AstNodeUtils.getTypeBinding((Expression) target);
-    }
-    return AstNodeUtils.isSuccessorOf(typeBinding, "javax.swing.RootPaneContainer");
-  }
+	private static boolean isRootPaneContainer(Object target) {
+		ITypeBinding typeBinding;
+		if (target instanceof TypeDeclaration) {
+			typeBinding = AstNodeUtils.getTypeBinding((TypeDeclaration) target);
+		} else {
+			assert target instanceof Expression;
+			typeBinding = AstNodeUtils.getTypeBinding((Expression) target);
+		}
+		return AstNodeUtils.isSuccessorOf(typeBinding, "javax.swing.RootPaneContainer");
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/preferences/IPreferenceConstants.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/preferences/IPreferenceConstants.java
index 42c89770f..db266d086 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/preferences/IPreferenceConstants.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/preferences/IPreferenceConstants.java
@@ -17,11 +17,11 @@
  * @coverage swing.preferences
  */
 public interface IPreferenceConstants
-    extends
-      org.eclipse.wb.internal.core.preferences.IPreferenceConstants {
-  String TOOLKIT_ID = "org.eclipse.wb.swing";
-  /**
-   * The template for <code>Layout</code> variable name.
-   */
-  String P_LAYOUT_NAME_TEMPLATE = "templateLayoutName";
+extends
+org.eclipse.wb.internal.core.preferences.IPreferenceConstants {
+	String TOOLKIT_ID = "org.eclipse.wb.swing";
+	/**
+	 * The template for <code>Layout</code> variable name.
+	 */
+	String P_LAYOUT_NAME_TEMPLATE = "templateLayoutName";
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/preferences/MainPreferencePage.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/preferences/MainPreferencePage.java
index 0126147d0..e58261fd6 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/preferences/MainPreferencePage.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/preferences/MainPreferencePage.java
@@ -32,72 +32,72 @@
  * @coverage swing.preferences.ui
  */
 public final class MainPreferencePage extends AbstractBindingPreferencesPage {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public MainPreferencePage() {
-    super(ToolkitProvider.DESCRIPTION);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public MainPreferencePage() {
+		super(ToolkitProvider.DESCRIPTION);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected AbstractBindingComposite createBindingComposite(Composite parent) {
-    return new ContentsComposite(parent, m_bindManager, m_preferences);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected AbstractBindingComposite createBindingComposite(Composite parent) {
+		return new ContentsComposite(parent, m_bindManager, m_preferences);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Contents
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static class ContentsComposite extends AbstractBindingComposite {
-    public ContentsComposite(Composite parent,
-        DataBindManager bindManager,
-        IPreferenceStore preferences) {
-      super(parent, bindManager, preferences);
-      GridLayoutFactory.create(this).noMargins().columns(2);
-      // default size
-      {
-        {
-          new Label(this, SWT.NONE).setText(Messages.MainPreferencePage_defaultWidth);
-          Text text = new Text(this, SWT.BORDER | SWT.RIGHT);
-          GridDataFactory.create(text).grabH().fillH();
-          bindInteger(text, IPreferenceConstants.P_GENERAL_DEFAULT_TOP_WIDTH);
-        }
-        {
-          new Label(this, SWT.NONE).setText(Messages.MainPreferencePage_defaultHeight);
-          Text text = new Text(this, SWT.BORDER | SWT.RIGHT);
-          GridDataFactory.create(text).grabH().fillH();
-          bindInteger(text, IPreferenceConstants.P_GENERAL_DEFAULT_TOP_HEIGHT);
-        }
-      }
-      // other, boolean preferences
-      checkButton(
-          this,
-          2,
-          Messages.MainPreferencePage_highlightBorders,
-          IPreferenceConstants.P_GENERAL_HIGHLIGHT_CONTAINERS);
-      checkButton(
-          this,
-          2,
-          Messages.MainPreferencePage_showTextInTree,
-          IPreferenceConstants.P_GENERAL_TEXT_SUFFIX);
-      checkButton(
-          this,
-          2,
-          Messages.MainPreferencePage_showImportProperties,
-          IPreferenceConstants.P_GENERAL_IMPORTANT_PROPERTIES_AFTER_ADD);
-      checkButton(
-          this,
-          2,
-          Messages.MainPreferencePage_autoDirectEdit,
-          IPreferenceConstants.P_GENERAL_DIRECT_EDIT_AFTER_ADD);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Contents
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static class ContentsComposite extends AbstractBindingComposite {
+		public ContentsComposite(Composite parent,
+				DataBindManager bindManager,
+				IPreferenceStore preferences) {
+			super(parent, bindManager, preferences);
+			GridLayoutFactory.create(this).noMargins().columns(2);
+			// default size
+			{
+				{
+					new Label(this, SWT.NONE).setText(Messages.MainPreferencePage_defaultWidth);
+					Text text = new Text(this, SWT.BORDER | SWT.RIGHT);
+					GridDataFactory.create(text).grabH().fillH();
+					bindInteger(text, IPreferenceConstants.P_GENERAL_DEFAULT_TOP_WIDTH);
+				}
+				{
+					new Label(this, SWT.NONE).setText(Messages.MainPreferencePage_defaultHeight);
+					Text text = new Text(this, SWT.BORDER | SWT.RIGHT);
+					GridDataFactory.create(text).grabH().fillH();
+					bindInteger(text, IPreferenceConstants.P_GENERAL_DEFAULT_TOP_HEIGHT);
+				}
+			}
+			// other, boolean preferences
+			checkButton(
+					this,
+					2,
+					Messages.MainPreferencePage_highlightBorders,
+					IPreferenceConstants.P_GENERAL_HIGHLIGHT_CONTAINERS);
+			checkButton(
+					this,
+					2,
+					Messages.MainPreferencePage_showTextInTree,
+					IPreferenceConstants.P_GENERAL_TEXT_SUFFIX);
+			checkButton(
+					this,
+					2,
+					Messages.MainPreferencePage_showImportProperties,
+					IPreferenceConstants.P_GENERAL_IMPORTANT_PROPERTIES_AFTER_ADD);
+			checkButton(
+					this,
+					2,
+					Messages.MainPreferencePage_autoDirectEdit,
+					IPreferenceConstants.P_GENERAL_DIRECT_EDIT_AFTER_ADD);
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/preferences/Messages.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/preferences/Messages.java
index 826e3ce2e..1b8ba8fb7 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/preferences/Messages.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/preferences/Messages.java
@@ -3,74 +3,74 @@
 import org.eclipse.osgi.util.NLS;
 
 public class Messages extends NLS {
-  private static final String BUNDLE_NAME = "org.eclipse.wb.internal.swing.preferences.messages"; //$NON-NLS-1$
-  public static String AbsoluteLayoutPreferencePage_applyGridFlow;
-  public static String AbsoluteLayoutPreferencePage_bottom;
-  public static String AbsoluteLayoutPreferencePage_componentGapsGroup;
-  public static String AbsoluteLayoutPreferencePage_containerGapsGroup;
-  public static String AbsoluteLayoutPreferencePage_displayGrid;
-  public static String AbsoluteLayoutPreferencePage_displayHints;
-  public static String AbsoluteLayoutPreferencePage_gridGroup;
-  public static String AbsoluteLayoutPreferencePage_left;
-  public static String AbsoluteLayoutPreferencePage_right;
-  public static String AbsoluteLayoutPreferencePage_stepX;
-  public static String AbsoluteLayoutPreferencePage_stepY;
-  public static String AbsoluteLayoutPreferencePage_top;
-  public static String AbsoluteLayoutPreferencePage_useAssistedStyle;
-  public static String AbsoluteLayoutPreferencePage_useGridSnapping;
-  public static String AbsoluteLayoutPreferencePage_useLayoutStyle;
-  public static String GridBagLayoutPreferencePage_autoGrab;
-  public static String GridBagLayoutPreferencePage_changeInsets;
-  public static String GridBagLayoutPreferencePage_columnGap;
-  public static String GridBagLayoutPreferencePage_constraintsNamePattern;
-  public static String GridBagLayoutPreferencePage_rightAlign;
-  public static String GridBagLayoutPreferencePage_rowGap;
-  public static String GridBagLayoutPreferencePage_useLong;
-  public static String LafPreferencePage_addButton;
-  public static String LafPreferencePage_addCategoryButton;
-  public static String LafPreferencePage_addCategoryMessage;
-  public static String LafPreferencePage_addCategoryTitle;
-  public static String LafPreferencePage_applyInMain;
-  public static String LafPreferencePage_available;
-  public static String LafPreferencePage_collapseAllButton;
-  public static String LafPreferencePage_deleteConfirmMessage;
-  public static String LafPreferencePage_deleteConfirmTitle;
-  public static String LafPreferencePage_deleteWarningMessage;
-  public static String LafPreferencePage_deleteWarningTitle;
-  public static String LafPreferencePage_downButton;
-  public static String LafPreferencePage_editButton;
-  public static String LafPreferencePage_editCategoryMessage;
-  public static String LafPreferencePage_editCategoryTitle;
-  public static String LafPreferencePage_expandAllButton;
-  public static String LafPreferencePage_preview;
-  public static String LafPreferencePage_previewButton;
-  public static String LafPreferencePage_previewCheck;
-  public static String LafPreferencePage_previewCombo;
-  public static String LafPreferencePage_previewCommon;
-  public static String LafPreferencePage_previewExit;
-  public static String LafPreferencePage_previewFile;
-  public static String LafPreferencePage_previewLabel;
-  public static String LafPreferencePage_previewNew;
-  public static String LafPreferencePage_previewRadio;
-  public static String LafPreferencePage_previewTextField;
-  public static String LafPreferencePage_previewView;
-  public static String LafPreferencePage_removeButton;
-  public static String LafPreferencePage_removeConfirmMessage;
-  public static String LafPreferencePage_removeConfirmTitle;
-  public static String LafPreferencePage_setDefaultButton;
-  public static String LafPreferencePage_upButton;
-  public static String LayoutsPreferencePage_layoutNamePattern;
-  public static String MainPreferencePage_autoDirectEdit;
-  public static String MainPreferencePage_defaultHeight;
-  public static String MainPreferencePage_defaultWidth;
-  public static String MainPreferencePage_highlightBorders;
-  public static String MainPreferencePage_showImportProperties;
-  public static String MainPreferencePage_showTextInTree;
-  static {
-    // initialize resource bundle
-    NLS.initializeMessages(BUNDLE_NAME, Messages.class);
-  }
+	private static final String BUNDLE_NAME = "org.eclipse.wb.internal.swing.preferences.messages"; //$NON-NLS-1$
+	public static String AbsoluteLayoutPreferencePage_applyGridFlow;
+	public static String AbsoluteLayoutPreferencePage_bottom;
+	public static String AbsoluteLayoutPreferencePage_componentGapsGroup;
+	public static String AbsoluteLayoutPreferencePage_containerGapsGroup;
+	public static String AbsoluteLayoutPreferencePage_displayGrid;
+	public static String AbsoluteLayoutPreferencePage_displayHints;
+	public static String AbsoluteLayoutPreferencePage_gridGroup;
+	public static String AbsoluteLayoutPreferencePage_left;
+	public static String AbsoluteLayoutPreferencePage_right;
+	public static String AbsoluteLayoutPreferencePage_stepX;
+	public static String AbsoluteLayoutPreferencePage_stepY;
+	public static String AbsoluteLayoutPreferencePage_top;
+	public static String AbsoluteLayoutPreferencePage_useAssistedStyle;
+	public static String AbsoluteLayoutPreferencePage_useGridSnapping;
+	public static String AbsoluteLayoutPreferencePage_useLayoutStyle;
+	public static String GridBagLayoutPreferencePage_autoGrab;
+	public static String GridBagLayoutPreferencePage_changeInsets;
+	public static String GridBagLayoutPreferencePage_columnGap;
+	public static String GridBagLayoutPreferencePage_constraintsNamePattern;
+	public static String GridBagLayoutPreferencePage_rightAlign;
+	public static String GridBagLayoutPreferencePage_rowGap;
+	public static String GridBagLayoutPreferencePage_useLong;
+	public static String LafPreferencePage_addButton;
+	public static String LafPreferencePage_addCategoryButton;
+	public static String LafPreferencePage_addCategoryMessage;
+	public static String LafPreferencePage_addCategoryTitle;
+	public static String LafPreferencePage_applyInMain;
+	public static String LafPreferencePage_available;
+	public static String LafPreferencePage_collapseAllButton;
+	public static String LafPreferencePage_deleteConfirmMessage;
+	public static String LafPreferencePage_deleteConfirmTitle;
+	public static String LafPreferencePage_deleteWarningMessage;
+	public static String LafPreferencePage_deleteWarningTitle;
+	public static String LafPreferencePage_downButton;
+	public static String LafPreferencePage_editButton;
+	public static String LafPreferencePage_editCategoryMessage;
+	public static String LafPreferencePage_editCategoryTitle;
+	public static String LafPreferencePage_expandAllButton;
+	public static String LafPreferencePage_preview;
+	public static String LafPreferencePage_previewButton;
+	public static String LafPreferencePage_previewCheck;
+	public static String LafPreferencePage_previewCombo;
+	public static String LafPreferencePage_previewCommon;
+	public static String LafPreferencePage_previewExit;
+	public static String LafPreferencePage_previewFile;
+	public static String LafPreferencePage_previewLabel;
+	public static String LafPreferencePage_previewNew;
+	public static String LafPreferencePage_previewRadio;
+	public static String LafPreferencePage_previewTextField;
+	public static String LafPreferencePage_previewView;
+	public static String LafPreferencePage_removeButton;
+	public static String LafPreferencePage_removeConfirmMessage;
+	public static String LafPreferencePage_removeConfirmTitle;
+	public static String LafPreferencePage_setDefaultButton;
+	public static String LafPreferencePage_upButton;
+	public static String LayoutsPreferencePage_layoutNamePattern;
+	public static String MainPreferencePage_autoDirectEdit;
+	public static String MainPreferencePage_defaultHeight;
+	public static String MainPreferencePage_defaultWidth;
+	public static String MainPreferencePage_highlightBorders;
+	public static String MainPreferencePage_showImportProperties;
+	public static String MainPreferencePage_showTextInTree;
+	static {
+		// initialize resource bundle
+		NLS.initializeMessages(BUNDLE_NAME, Messages.class);
+	}
 
-  private Messages() {
-  }
+	private Messages() {
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/preferences/PreferenceInitializer.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/preferences/PreferenceInitializer.java
index e24a0e32c..5d0c9e345 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/preferences/PreferenceInitializer.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/preferences/PreferenceInitializer.java
@@ -22,35 +22,35 @@
  * @coverage swing.preferences
  */
 public final class PreferenceInitializer extends AbstractPreferenceInitializer
-    implements
-      org.eclipse.wb.internal.swing.preferences.IPreferenceConstants {
-  @Override
-  public void initializeDefaultPreferences() {
-    IPreferenceStore preferences = ToolkitProvider.DESCRIPTION.getPreferences();
-    // general
-    preferences.setDefault(P_GENERAL_HIGHLIGHT_CONTAINERS, true);
-    preferences.setDefault(P_GENERAL_TEXT_SUFFIX, true);
-    preferences.setDefault(P_GENERAL_IMPORTANT_PROPERTIES_AFTER_ADD, false);
-    preferences.setDefault(P_GENERAL_DIRECT_EDIT_AFTER_ADD, true);
-    preferences.setDefault(P_GENERAL_DEFAULT_TOP_WIDTH, 450);
-    preferences.setDefault(P_GENERAL_DEFAULT_TOP_HEIGHT, 300);
-    // variable names
-    {
-      preferences.setDefault(P_VARIABLE_TEXT_MODE, V_VARIABLE_TEXT_MODE_DEFAULT);
-      preferences.setDefault(P_VARIABLE_TEXT_TEMPLATE, "${class_acronym}${text}");
-      preferences.setDefault(P_VARIABLE_TEXT_WORDS_LIMIT, 3);
-    }
-    // NLS
-    {
-      preferences.setDefault(P_NLS_AUTO_EXTERNALIZE, true);
-      preferences.setDefault(P_NLS_KEY_AS_STRING_VALUE_ONLY, false);
-      preferences.setDefault(P_NLS_KEY_QUALIFIED_TYPE_NAME, false);
-      preferences.setDefault(P_NLS_KEY_RENAME_WITH_VARIABLE, false);
-      preferences.setDefault(P_NLS_KEY_HAS_STRING_VALUE, false);
-      preferences.setDefault(P_NLS_KEY_AS_VALUE_PREFIX, "*");
-    }
-    // layouts
-    preferences.setDefault(P_LAYOUT_OF_PARENT, false);
-    preferences.setDefault(P_LAYOUT_NAME_TEMPLATE, "${layoutAcronym}_${containerName}");
-  }
+implements
+org.eclipse.wb.internal.swing.preferences.IPreferenceConstants {
+	@Override
+	public void initializeDefaultPreferences() {
+		IPreferenceStore preferences = ToolkitProvider.DESCRIPTION.getPreferences();
+		// general
+		preferences.setDefault(P_GENERAL_HIGHLIGHT_CONTAINERS, true);
+		preferences.setDefault(P_GENERAL_TEXT_SUFFIX, true);
+		preferences.setDefault(P_GENERAL_IMPORTANT_PROPERTIES_AFTER_ADD, false);
+		preferences.setDefault(P_GENERAL_DIRECT_EDIT_AFTER_ADD, true);
+		preferences.setDefault(P_GENERAL_DEFAULT_TOP_WIDTH, 450);
+		preferences.setDefault(P_GENERAL_DEFAULT_TOP_HEIGHT, 300);
+		// variable names
+		{
+			preferences.setDefault(P_VARIABLE_TEXT_MODE, V_VARIABLE_TEXT_MODE_DEFAULT);
+			preferences.setDefault(P_VARIABLE_TEXT_TEMPLATE, "${class_acronym}${text}");
+			preferences.setDefault(P_VARIABLE_TEXT_WORDS_LIMIT, 3);
+		}
+		// NLS
+		{
+			preferences.setDefault(P_NLS_AUTO_EXTERNALIZE, true);
+			preferences.setDefault(P_NLS_KEY_AS_STRING_VALUE_ONLY, false);
+			preferences.setDefault(P_NLS_KEY_QUALIFIED_TYPE_NAME, false);
+			preferences.setDefault(P_NLS_KEY_RENAME_WITH_VARIABLE, false);
+			preferences.setDefault(P_NLS_KEY_HAS_STRING_VALUE, false);
+			preferences.setDefault(P_NLS_KEY_AS_VALUE_PREFIX, "*");
+		}
+		// layouts
+		preferences.setDefault(P_LAYOUT_OF_PARENT, false);
+		preferences.setDefault(P_LAYOUT_NAME_TEMPLATE, "${layoutAcronym}_${containerName}");
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/preferences/code/CodeGenerationPreferencePage.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/preferences/code/CodeGenerationPreferencePage.java
index 98b3d3316..ee55a1ff4 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/preferences/code/CodeGenerationPreferencePage.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/preferences/code/CodeGenerationPreferencePage.java
@@ -19,14 +19,14 @@
  * @coverage swing.preferences.ui
  */
 public final class CodeGenerationPreferencePage
-    extends
-      org.eclipse.wb.internal.core.preferences.code.CodeGenerationPreferencePage {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CodeGenerationPreferencePage() {
-    super(ToolkitProvider.DESCRIPTION);
-  }
+extends
+org.eclipse.wb.internal.core.preferences.code.CodeGenerationPreferencePage {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CodeGenerationPreferencePage() {
+		super(ToolkitProvider.DESCRIPTION);
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/preferences/code/NlsPreferencePage.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/preferences/code/NlsPreferencePage.java
index 5ddf15f29..fd457a6ab 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/preferences/code/NlsPreferencePage.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/preferences/code/NlsPreferencePage.java
@@ -19,12 +19,12 @@
  * @coverage swing.preferences.ui
  */
 public final class NlsPreferencePage extends org.eclipse.wb.internal.core.nls.NlsPreferencePage {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public NlsPreferencePage() {
-    super(ToolkitProvider.DESCRIPTION);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public NlsPreferencePage() {
+		super(ToolkitProvider.DESCRIPTION);
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/preferences/code/VariablesPreferencePage.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/preferences/code/VariablesPreferencePage.java
index 2122c71c0..b41d10c4f 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/preferences/code/VariablesPreferencePage.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/preferences/code/VariablesPreferencePage.java
@@ -20,14 +20,14 @@
  * @coverage swing.preferences.ui
  */
 public final class VariablesPreferencePage
-    extends
-      org.eclipse.wb.internal.core.preferences.code.VariablesPreferencePage {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public VariablesPreferencePage() {
-    super(ToolkitProvider.DESCRIPTION);
-  }
+extends
+org.eclipse.wb.internal.core.preferences.code.VariablesPreferencePage {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public VariablesPreferencePage() {
+		super(ToolkitProvider.DESCRIPTION);
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/preferences/event/EventsPreferencePage.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/preferences/event/EventsPreferencePage.java
index d5e290055..d1fe979ca 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/preferences/event/EventsPreferencePage.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/preferences/event/EventsPreferencePage.java
@@ -22,14 +22,14 @@
  * @coverage swing.preferences.ui
  */
 public final class EventsPreferencePage
-    extends
-      org.eclipse.wb.internal.core.preferences.event.EventsPreferencePage {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public EventsPreferencePage() {
-    super(Activator.getDefault().getPreferenceStore());
-  }
+extends
+org.eclipse.wb.internal.core.preferences.event.EventsPreferencePage {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public EventsPreferencePage() {
+		super(Activator.getDefault().getPreferenceStore());
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/preferences/event/PreferenceInitializer.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/preferences/event/PreferenceInitializer.java
index 06e55fbe5..b65da4934 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/preferences/event/PreferenceInitializer.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/preferences/event/PreferenceInitializer.java
@@ -24,27 +24,27 @@
  * @coverage swing.preferences
  */
 public final class PreferenceInitializer extends AbstractPreferenceInitializer
-    implements
-      IPreferenceConstants {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  //	Initializing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void initializeDefaultPreferences() {
-    IPreferenceStore preferences = Activator.getDefault().getPreferenceStore();
-    // type
-    preferences.setDefault(P_CODE_TYPE, V_CODE_ANONYMOUS);
-    preferences.setDefault(P_INNER_POSITION, V_INNER_AFTER);
-    // stub
-    preferences.setDefault(P_CREATE_STUB, false);
-    preferences.setDefault(P_STUB_NAME_TEMPLATE, "do_${component_name}_${event_name}");
-    preferences.setDefault(P_DELETE_STUB, true);
-    // inner
-    preferences.setDefault(P_INNER_NAME_TEMPLATE, "${Component_name}${Listener_className}");
-    // other
-    preferences.setDefault(P_FINAL_PARAMETERS, false);
-    preferences.setDefault(P_DECORATE_ICON, true);
-  }
+implements
+IPreferenceConstants {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	//	Initializing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void initializeDefaultPreferences() {
+		IPreferenceStore preferences = Activator.getDefault().getPreferenceStore();
+		// type
+		preferences.setDefault(P_CODE_TYPE, V_CODE_ANONYMOUS);
+		preferences.setDefault(P_INNER_POSITION, V_INNER_AFTER);
+		// stub
+		preferences.setDefault(P_CREATE_STUB, false);
+		preferences.setDefault(P_STUB_NAME_TEMPLATE, "do_${component_name}_${event_name}");
+		preferences.setDefault(P_DELETE_STUB, true);
+		// inner
+		preferences.setDefault(P_INNER_NAME_TEMPLATE, "${Component_name}${Listener_className}");
+		// other
+		preferences.setDefault(P_FINAL_PARAMETERS, false);
+		preferences.setDefault(P_DECORATE_ICON, true);
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/preferences/laf/IPreferenceConstants.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/preferences/laf/IPreferenceConstants.java
index ee0f0358b..68aa8a434 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/preferences/laf/IPreferenceConstants.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/preferences/laf/IPreferenceConstants.java
@@ -17,6 +17,6 @@
  * @coverage swing.preferences.laf
  */
 public interface IPreferenceConstants {
-  String P_DEFAULT_LAF = "P_DEFAULT_LAF";
-  String P_APPLY_IN_MAIN = "P_APPLY_IN_MAIN";
+	String P_DEFAULT_LAF = "P_DEFAULT_LAF";
+	String P_APPLY_IN_MAIN = "P_APPLY_IN_MAIN";
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/preferences/laf/LafPreferencePage.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/preferences/laf/LafPreferencePage.java
index bb3e76e81..9720f832a 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/preferences/laf/LafPreferencePage.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/preferences/laf/LafPreferencePage.java
@@ -118,965 +118,965 @@
  * @coverage swing.preferences.laf
  */
 public class LafPreferencePage extends PreferencePage
-    implements
-      IWorkbenchPreferencePage,
-      IPreferenceConstants {
-  // constants
-  private static final Image CATEGORY_IMAGE = Activator.getImage("info/laf/container.gif");
-  private static final Image LAF_ITEM_IMAGE = Activator.getImage("info/laf/laf.png");
-  // variables
-  private LafInfo m_defaultLAF;
-  private final LookAndFeel m_currentLookAndFeel;
-  // ui variables
-  private CheckboxTreeViewer m_lafTree;
-  private Group m_previewGroup;
-  private Button m_deleteButton;
-  private Button m_applyInMainButton;
-  private Button m_moveUpButton;
-  private Button m_moveDownButton;
-  private Button m_editButton;
-  private Button m_setDefaultButton;
-  // updating preview
-  private boolean m_updatingPreview;
-  private final Timer m_previewTimer = new Timer();
-  private TimerTask m_previewTimerTask;
+implements
+IWorkbenchPreferencePage,
+IPreferenceConstants {
+	// constants
+	private static final Image CATEGORY_IMAGE = Activator.getImage("info/laf/container.gif");
+	private static final Image LAF_ITEM_IMAGE = Activator.getImage("info/laf/laf.png");
+	// variables
+	private LafInfo m_defaultLAF;
+	private final LookAndFeel m_currentLookAndFeel;
+	// ui variables
+	private CheckboxTreeViewer m_lafTree;
+	private Group m_previewGroup;
+	private Button m_deleteButton;
+	private Button m_applyInMainButton;
+	private Button m_moveUpButton;
+	private Button m_moveDownButton;
+	private Button m_editButton;
+	private Button m_setDefaultButton;
+	// updating preview
+	private boolean m_updatingPreview;
+	private final Timer m_previewTimer = new Timer();
+	private TimerTask m_previewTimerTask;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public LafPreferencePage() {
-    m_currentLookAndFeel = UIManager.getLookAndFeel();
-    m_defaultLAF = LafSupport.getDefaultLAF();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public LafPreferencePage() {
+		m_currentLookAndFeel = UIManager.getLookAndFeel();
+		m_defaultLAF = LafSupport.getDefaultLAF();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Contents
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Control createContents(Composite parent) {
-    Composite container = new Composite(parent, SWT.NONE);
-    GridLayoutFactory.create(container).margins(0);
-    {
-      m_applyInMainButton = new Button(container, SWT.CHECK);
-      m_applyInMainButton.setText(Messages.LafPreferencePage_applyInMain);
-      m_applyInMainButton.setSelection(getPreferenceStore().getBoolean(P_APPLY_IN_MAIN));
-    }
-    {
-      Group lafGroup = new Group(container, SWT.NONE);
-      GridDataFactory.create(lafGroup).grab().fill();
-      GridLayoutFactory.create(lafGroup).columns(2);
-      lafGroup.setText(Messages.LafPreferencePage_available);
-      // LAF tree
-      {
-        m_lafTree =
-            new CheckboxTreeViewer(lafGroup, SWT.MULTI | SWT.BORDER | SWT.V_SCROLL | SWT.VIRTUAL);
-        final Tree tree = m_lafTree.getTree();
-        GridDataFactory.create(tree).grab().fill();
-        m_lafTree.setContentProvider(new LAFItemsContentProvider());
-        m_lafTree.setLabelProvider(new LAFItemsLabelProvider());
-        m_lafTree.addSelectionChangedListener(new ISelectionChangedListener() {
-          public void selectionChanged(SelectionChangedEvent event) {
-            handleLAFSelectionChanged();
-          }
-        });
-        m_lafTree.addDoubleClickListener(new IDoubleClickListener() {
-          public void doubleClick(DoubleClickEvent event) {
-            handleSetDefaultLAF();
-          }
-        });
-        m_lafTree.setInput(new Object[0]);
-        refreshViewer();
-        m_lafTree.addCheckStateListener(new ICheckStateListener() {
-          public void checkStateChanged(CheckStateChangedEvent event) {
-            handleChangeVisibility(event);
-          }
-        });
-        configureDND();
-      }
-      // buttons
-      {
-        createButtons(lafGroup);
-      }
-    }
-    {
-      m_previewGroup = new Group(container, SWT.NONE);
-      GridDataFactory.create(m_previewGroup).grabH().fill();
-      m_previewGroup.setText(Messages.LafPreferencePage_preview);
-      m_previewGroup.setLayout(new FillLayout());
-    }
-    // return back LAF
-    container.addDisposeListener(new DisposeListener() {
-      public void widgetDisposed(DisposeEvent e) {
-        // cancel preview updating
-        cancelPreviewUpdate();
-        m_previewTimer.cancel();
-        restoreLookAndFeel();
-      }
-    });
-    return container;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Contents
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Control createContents(Composite parent) {
+		Composite container = new Composite(parent, SWT.NONE);
+		GridLayoutFactory.create(container).margins(0);
+		{
+			m_applyInMainButton = new Button(container, SWT.CHECK);
+			m_applyInMainButton.setText(Messages.LafPreferencePage_applyInMain);
+			m_applyInMainButton.setSelection(getPreferenceStore().getBoolean(P_APPLY_IN_MAIN));
+		}
+		{
+			Group lafGroup = new Group(container, SWT.NONE);
+			GridDataFactory.create(lafGroup).grab().fill();
+			GridLayoutFactory.create(lafGroup).columns(2);
+			lafGroup.setText(Messages.LafPreferencePage_available);
+			// LAF tree
+			{
+				m_lafTree =
+						new CheckboxTreeViewer(lafGroup, SWT.MULTI | SWT.BORDER | SWT.V_SCROLL | SWT.VIRTUAL);
+				final Tree tree = m_lafTree.getTree();
+				GridDataFactory.create(tree).grab().fill();
+				m_lafTree.setContentProvider(new LAFItemsContentProvider());
+				m_lafTree.setLabelProvider(new LAFItemsLabelProvider());
+				m_lafTree.addSelectionChangedListener(new ISelectionChangedListener() {
+					public void selectionChanged(SelectionChangedEvent event) {
+						handleLAFSelectionChanged();
+					}
+				});
+				m_lafTree.addDoubleClickListener(new IDoubleClickListener() {
+					public void doubleClick(DoubleClickEvent event) {
+						handleSetDefaultLAF();
+					}
+				});
+				m_lafTree.setInput(new Object[0]);
+				refreshViewer();
+				m_lafTree.addCheckStateListener(new ICheckStateListener() {
+					public void checkStateChanged(CheckStateChangedEvent event) {
+						handleChangeVisibility(event);
+					}
+				});
+				configureDND();
+			}
+			// buttons
+			{
+				createButtons(lafGroup);
+			}
+		}
+		{
+			m_previewGroup = new Group(container, SWT.NONE);
+			GridDataFactory.create(m_previewGroup).grabH().fill();
+			m_previewGroup.setText(Messages.LafPreferencePage_preview);
+			m_previewGroup.setLayout(new FillLayout());
+		}
+		// return back LAF
+		container.addDisposeListener(new DisposeListener() {
+			public void widgetDisposed(DisposeEvent e) {
+				// cancel preview updating
+				cancelPreviewUpdate();
+				m_previewTimer.cancel();
+				restoreLookAndFeel();
+			}
+		});
+		return container;
+	}
 
-  /**
-   * Creates the buttons on own composite for managing look-and-feels.
-   */
-  private void createButtons(Composite parent) {
-    Composite buttonsComposite = new Composite(parent, SWT.NONE);
-    GridDataFactory.create(buttonsComposite).grabV().fill();
-    GridLayoutFactory.create(buttonsComposite).noMargins();
-    //
-    createButton(buttonsComposite, Messages.LafPreferencePage_addButton, new Listener() {
-      public void handleEvent(Event event) {
-        handleAddUserDefinedLAF();
-      }
-    });
-    createButton(buttonsComposite, Messages.LafPreferencePage_addCategoryButton, new Listener() {
-      public void handleEvent(Event event) {
-        handleAddCategory();
-      }
-    });
-    //
-    createButtonSeparator(buttonsComposite);
-    m_setDefaultButton =
-        createButton(buttonsComposite, Messages.LafPreferencePage_setDefaultButton, new Listener() {
-          public void handleEvent(Event event) {
-            handleSetDefaultLAF();
-          }
-        });
-    createButtonSeparator(buttonsComposite);
-    m_editButton =
-        createButton(buttonsComposite, Messages.LafPreferencePage_editButton, new Listener() {
-          public void handleEvent(Event event) {
-            handleEdit();
-          }
-        });
-    m_deleteButton =
-        createButton(buttonsComposite, Messages.LafPreferencePage_removeButton, new Listener() {
-          public void handleEvent(Event event) {
-            handleDelete();
-          }
-        });
-    //
-    createButtonSeparator(buttonsComposite);
-    m_moveUpButton =
-        createButton(buttonsComposite, Messages.LafPreferencePage_upButton, new Listener() {
-          public void handleEvent(Event event) {
-            handleMove(-1);
-          }
-        });
-    m_moveDownButton =
-        createButton(buttonsComposite, Messages.LafPreferencePage_downButton, new Listener() {
-          public void handleEvent(Event event) {
-            handleMove(+2);
-          }
-        });
-    //
-    createButtonSeparator(buttonsComposite);
-    createButton(buttonsComposite, Messages.LafPreferencePage_collapseAllButton, new Listener() {
-      public void handleEvent(Event event) {
-        m_lafTree.collapseAll();
-      }
-    });
-    createButton(buttonsComposite, Messages.LafPreferencePage_expandAllButton, new Listener() {
-      public void handleEvent(Event event) {
-        m_lafTree.expandAll();
-      }
-    });
-    // update buttons
-    updateButtons();
-  }
+	/**
+	 * Creates the buttons on own composite for managing look-and-feels.
+	 */
+	private void createButtons(Composite parent) {
+		Composite buttonsComposite = new Composite(parent, SWT.NONE);
+		GridDataFactory.create(buttonsComposite).grabV().fill();
+		GridLayoutFactory.create(buttonsComposite).noMargins();
+		//
+		createButton(buttonsComposite, Messages.LafPreferencePage_addButton, new Listener() {
+			public void handleEvent(Event event) {
+				handleAddUserDefinedLAF();
+			}
+		});
+		createButton(buttonsComposite, Messages.LafPreferencePage_addCategoryButton, new Listener() {
+			public void handleEvent(Event event) {
+				handleAddCategory();
+			}
+		});
+		//
+		createButtonSeparator(buttonsComposite);
+		m_setDefaultButton =
+				createButton(buttonsComposite, Messages.LafPreferencePage_setDefaultButton, new Listener() {
+					public void handleEvent(Event event) {
+						handleSetDefaultLAF();
+					}
+				});
+		createButtonSeparator(buttonsComposite);
+		m_editButton =
+				createButton(buttonsComposite, Messages.LafPreferencePage_editButton, new Listener() {
+					public void handleEvent(Event event) {
+						handleEdit();
+					}
+				});
+		m_deleteButton =
+				createButton(buttonsComposite, Messages.LafPreferencePage_removeButton, new Listener() {
+					public void handleEvent(Event event) {
+						handleDelete();
+					}
+				});
+		//
+		createButtonSeparator(buttonsComposite);
+		m_moveUpButton =
+				createButton(buttonsComposite, Messages.LafPreferencePage_upButton, new Listener() {
+					public void handleEvent(Event event) {
+						handleMove(-1);
+					}
+				});
+		m_moveDownButton =
+				createButton(buttonsComposite, Messages.LafPreferencePage_downButton, new Listener() {
+					public void handleEvent(Event event) {
+						handleMove(+2);
+					}
+				});
+		//
+		createButtonSeparator(buttonsComposite);
+		createButton(buttonsComposite, Messages.LafPreferencePage_collapseAllButton, new Listener() {
+			public void handleEvent(Event event) {
+				m_lafTree.collapseAll();
+			}
+		});
+		createButton(buttonsComposite, Messages.LafPreferencePage_expandAllButton, new Listener() {
+			public void handleEvent(Event event) {
+				m_lafTree.expandAll();
+			}
+		});
+		// update buttons
+		updateButtons();
+	}
 
-  /**
-   * Creates {@link Button} with given text and {@link SWT#Selection} listener.
-   */
-  private static Button createButton(Composite parent, String text, Listener selectionListener) {
-    Button button = new Button(parent, SWT.NONE);
-    GridDataFactory.create(button).grabH().fillH();
-    button.setText(text);
-    button.addListener(SWT.Selection, selectionListener);
-    return button;
-  }
+	/**
+	 * Creates {@link Button} with given text and {@link SWT#Selection} listener.
+	 */
+	private static Button createButton(Composite parent, String text, Listener selectionListener) {
+		Button button = new Button(parent, SWT.NONE);
+		GridDataFactory.create(button).grabH().fillH();
+		button.setText(text);
+		button.addListener(SWT.Selection, selectionListener);
+		return button;
+	}
 
-  /**
-   * Creates separator between buttons on vertical buttons bar.
-   */
-  private static void createButtonSeparator(Composite parent) {
-    Label separator = new Label(parent, SWT.NONE);
-    GridDataFactory.create(separator).hintV(7);
-  }
+	/**
+	 * Creates separator between buttons on vertical buttons bar.
+	 */
+	private static void createButtonSeparator(Composite parent) {
+		Label separator = new Label(parent, SWT.NONE);
+		GridDataFactory.create(separator).hintV(7);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  //	IWorkbenchPreferencePage
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void init(IWorkbench workbench) {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	//	IWorkbenchPreferencePage
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void init(IWorkbench workbench) {
+	}
 
-  @Override
-  public IPreferenceStore getPreferenceStore() {
-    return ToolkitProvider.DESCRIPTION.getPreferences();
-  }
+	@Override
+	public IPreferenceStore getPreferenceStore() {
+		return ToolkitProvider.DESCRIPTION.getPreferences();
+	}
 
-  @Override
-  public boolean performOk() {
-    getPreferenceStore().setValue(P_APPLY_IN_MAIN, m_applyInMainButton.getSelection());
-    getPreferenceStore().setValue(P_DEFAULT_LAF, m_defaultLAF.getID());
-    // write all executed commands
-    {
-      for (Command command : m_commands) {
-        LafSupport.commands_add(command);
-      }
-      LafSupport.commands_write();
-      if (!m_commands.isEmpty()) {
-        fireLookAndFeelsChanged();
-      }
-    }
-    return super.performOk();
-  }
+	@Override
+	public boolean performOk() {
+		getPreferenceStore().setValue(P_APPLY_IN_MAIN, m_applyInMainButton.getSelection());
+		getPreferenceStore().setValue(P_DEFAULT_LAF, m_defaultLAF.getID());
+		// write all executed commands
+		{
+			for (Command command : m_commands) {
+				LafSupport.commands_add(command);
+			}
+			LafSupport.commands_write();
+			if (!m_commands.isEmpty()) {
+				fireLookAndFeelsChanged();
+			}
+		}
+		return super.performOk();
+	}
 
-  @Override
-  protected void performDefaults() {
-    m_applyInMainButton.setSelection(getPreferenceStore().getDefaultBoolean(P_APPLY_IN_MAIN));
-    m_defaultLAF = LafSupport.getSettingsDefaultLAF();
-    if (MessageDialog.openConfirm(
-        getShell(),
-        Messages.LafPreferencePage_removeConfirmTitle,
-        Messages.LafPreferencePage_removeConfirmMessage)) {
-      LafSupport.resetToDefaults();
-      refreshViewer();
-      fireLookAndFeelsChanged();
-    }
-    super.performDefaults();
-  }
+	@Override
+	protected void performDefaults() {
+		m_applyInMainButton.setSelection(getPreferenceStore().getDefaultBoolean(P_APPLY_IN_MAIN));
+		m_defaultLAF = LafSupport.getSettingsDefaultLAF();
+		if (MessageDialog.openConfirm(
+				getShell(),
+				Messages.LafPreferencePage_removeConfirmTitle,
+				Messages.LafPreferencePage_removeConfirmMessage)) {
+			LafSupport.resetToDefaults();
+			refreshViewer();
+			fireLookAndFeelsChanged();
+		}
+		super.performDefaults();
+	}
 
-  /**
-   * Runs the firing of listeners asynchronously, needed for dispose listeners to be fired first and
-   * restore
-   */
-  private void fireLookAndFeelsChanged() {
-    restoreLookAndFeel();
-    LafSupport.fireLookAndFeelsChanged();
-  }
+	/**
+	 * Runs the firing of listeners asynchronously, needed for dispose listeners to be fired first and
+	 * restore
+	 */
+	private void fireLookAndFeelsChanged() {
+		restoreLookAndFeel();
+		LafSupport.fireLookAndFeelsChanged();
+	}
 
-  @Override
-  public boolean performCancel() {
-    LafSupport.reloadLAFList();
-    return super.performCancel();
-  }
+	@Override
+	public boolean performCancel() {
+		LafSupport.reloadLAFList();
+		return super.performCancel();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Action handling
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void handleAddCategory() {
-    InputDialog inputDialog = new InputDialog(getShell(),
-        Messages.LafPreferencePage_addCategoryTitle,
-        Messages.LafPreferencePage_addCategoryMessage,
-        "",
-        null);
-    if (inputDialog.open() == Window.OK) {
-      commands_add(
-          new AddCategoryCommand("category_" + System.currentTimeMillis(), inputDialog.getValue()));
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Action handling
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void handleAddCategory() {
+		InputDialog inputDialog = new InputDialog(getShell(),
+				Messages.LafPreferencePage_addCategoryTitle,
+				Messages.LafPreferencePage_addCategoryMessage,
+				"",
+				null);
+		if (inputDialog.open() == Window.OK) {
+			commands_add(
+					new AddCategoryCommand("category_" + System.currentTimeMillis(), inputDialog.getValue()));
+		}
+	}
 
-  /**
-   * Changes the visibility state.
-   */
-  private void handleChangeVisibility(CheckStateChangedEvent event) {
-    LafEntryInfo checkedEntry = (LafEntryInfo) event.getElement();
-    commands_add(new SetVisibleCommand(checkedEntry, event.getChecked()));
-  }
+	/**
+	 * Changes the visibility state.
+	 */
+	private void handleChangeVisibility(CheckStateChangedEvent event) {
+		LafEntryInfo checkedEntry = (LafEntryInfo) event.getElement();
+		commands_add(new SetVisibleCommand(checkedEntry, event.getChecked()));
+	}
 
-  private void handleMove(int moveDelta) {
-    m_lafTree.getTree().setRedraw(false);
-    try {
-      for (Object entry : getSelectedEntries()) {
-        if (entry instanceof CategoryInfo) {
-          CategoryInfo category = (CategoryInfo) entry;
-          List<CategoryInfo> categories = LafSupport.getLAFCategoriesList();
-          int index = categories.indexOf(entry);
-          int targetIndex = index + moveDelta;
-          CategoryInfo nextCategory =
-              targetIndex < categories.size() ? (CategoryInfo) categories.get(targetIndex) : null;
-          commands_add(new MoveCategoryCommand(category, nextCategory));
-        } else if (entry instanceof LafInfo) {
-          LafInfo lafInfo = (LafInfo) entry;
-          CategoryInfo category = lafInfo.getCategory();
-          List<LafInfo> lafs = category.getLAFList();
-          int index = lafs.indexOf(lafInfo);
-          if (index + moveDelta < lafs.size()) {
-            commands_add(new MoveCommand(lafInfo, category, lafs.get(index + moveDelta)));
-          } else {
-            commands_add(new MoveCommand(lafInfo, category, null));
-          }
-        }
-      }
-      refreshViewer();
-      updateButtons();
-    } finally {
-      m_lafTree.getTree().setRedraw(true);
-    }
-  }
+	private void handleMove(int moveDelta) {
+		m_lafTree.getTree().setRedraw(false);
+		try {
+			for (Object entry : getSelectedEntries()) {
+				if (entry instanceof CategoryInfo) {
+					CategoryInfo category = (CategoryInfo) entry;
+					List<CategoryInfo> categories = LafSupport.getLAFCategoriesList();
+					int index = categories.indexOf(entry);
+					int targetIndex = index + moveDelta;
+					CategoryInfo nextCategory =
+							targetIndex < categories.size() ? (CategoryInfo) categories.get(targetIndex) : null;
+					commands_add(new MoveCategoryCommand(category, nextCategory));
+				} else if (entry instanceof LafInfo) {
+					LafInfo lafInfo = (LafInfo) entry;
+					CategoryInfo category = lafInfo.getCategory();
+					List<LafInfo> lafs = category.getLAFList();
+					int index = lafs.indexOf(lafInfo);
+					if (index + moveDelta < lafs.size()) {
+						commands_add(new MoveCommand(lafInfo, category, lafs.get(index + moveDelta)));
+					} else {
+						commands_add(new MoveCommand(lafInfo, category, null));
+					}
+				}
+			}
+			refreshViewer();
+			updateButtons();
+		} finally {
+			m_lafTree.getTree().setRedraw(true);
+		}
+	}
 
-  /**
-   * Called by pressing "default" button or double-clicking in LAF list. Marks selected LAF as
-   * default.
-   */
-  private void handleSetDefaultLAF() {
-    final LafInfo selectedLAF = getSelectedLAF();
-    if (selectedLAF == null || selectedLAF instanceof SeparatorLafInfo) {
-      return;
-    }
-    m_defaultLAF = selectedLAF;
-    refreshViewer();
-  }
+	/**
+	 * Called by pressing "default" button or double-clicking in LAF list. Marks selected LAF as
+	 * default.
+	 */
+	private void handleSetDefaultLAF() {
+		final LafInfo selectedLAF = getSelectedLAF();
+		if (selectedLAF == null || selectedLAF instanceof SeparatorLafInfo) {
+			return;
+		}
+		m_defaultLAF = selectedLAF;
+		refreshViewer();
+	}
 
-  /**
-   * Handles the selection changing in LAF table.
-   *
-   * @param event
-   */
-  protected void handleLAFSelectionChanged() {
-    // update buttons
-    updateButtons();
-    // update preview
-    updatePreview();
-  }
+	/**
+	 * Handles the selection changing in LAF table.
+	 *
+	 * @param event
+	 */
+	protected void handleLAFSelectionChanged() {
+		// update buttons
+		updateButtons();
+		// update preview
+		updatePreview();
+	}
 
-  /**
-   * Deletes (or permanently hide) LAF and store LAF list into persistence.
-   */
-  @SuppressWarnings("unchecked")
-  private void handleDelete() {
-    List<Object> selection = getSelectedEntries();
-    if (selection.contains(m_defaultLAF)) {
-      MessageDialog.openWarning(
-          getShell(),
-          Messages.LafPreferencePage_deleteWarningTitle,
-          Messages.LafPreferencePage_deleteWarningMessage);
-      // filter out default LAF
-      selection = (List<Object>) CollectionUtils.select(selection, new Predicate() {
-        public boolean evaluate(Object object) {
-          return object != m_defaultLAF;
-        }
-      });
-    }
-    if (!selection.isEmpty()) {
-      if (MessageDialog.openConfirm(
-          getShell(),
-          Messages.LafPreferencePage_deleteConfirmTitle,
-          MessageFormat.format(
-              Messages.LafPreferencePage_deleteConfirmMessage,
-              selection.size()))) {
-        for (Object entry : selection) {
-          if (entry instanceof CategoryInfo) {
-            commands_add(new RemoveCategoryCommand((CategoryInfo) entry));
-          } else if (entry instanceof LafInfo) {
-            commands_add(new RemoveCommand((LafInfo) entry));
-          }
-        }
-        refreshViewer();
-      }
-    }
-  }
+	/**
+	 * Deletes (or permanently hide) LAF and store LAF list into persistence.
+	 */
+	@SuppressWarnings("unchecked")
+	private void handleDelete() {
+		List<Object> selection = getSelectedEntries();
+		if (selection.contains(m_defaultLAF)) {
+			MessageDialog.openWarning(
+					getShell(),
+					Messages.LafPreferencePage_deleteWarningTitle,
+					Messages.LafPreferencePage_deleteWarningMessage);
+			// filter out default LAF
+			selection = (List<Object>) CollectionUtils.select(selection, new Predicate() {
+				public boolean evaluate(Object object) {
+					return object != m_defaultLAF;
+				}
+			});
+		}
+		if (!selection.isEmpty()) {
+			if (MessageDialog.openConfirm(
+					getShell(),
+					Messages.LafPreferencePage_deleteConfirmTitle,
+					MessageFormat.format(
+							Messages.LafPreferencePage_deleteConfirmMessage,
+							selection.size()))) {
+				for (Object entry : selection) {
+					if (entry instanceof CategoryInfo) {
+						commands_add(new RemoveCategoryCommand((CategoryInfo) entry));
+					} else if (entry instanceof LafInfo) {
+						commands_add(new RemoveCommand((LafInfo) entry));
+					}
+				}
+				refreshViewer();
+			}
+		}
+	}
 
-  /**
-   * Adds user-defined LAF.
-   */
-  private void handleAddUserDefinedLAF() {
-    CategoryInfo targetCategory = LafSupport.getCategory(LafSupport.ROOT_ID);
-    {
-      List<Object> selectedEntries = getSelectedEntries();
-      if (!CollectionUtils.isEmpty(selectedEntries)) {
-        Object entry = selectedEntries.get(0);
-        if (entry instanceof CategoryInfo) {
-          targetCategory = (CategoryInfo) entry;
-        } else if (entry instanceof LafInfo) {
-          targetCategory = ((LafInfo) entry).getCategory();
-        }
-      }
-    }
-    AddCustomLookAndFeelDialog dialog =
-        new AddCustomLookAndFeelDialog(DesignerPlugin.getShell(), targetCategory);
-    if (dialog.open() == Window.OK) {
-      List<Command> commands = dialog.getCommands();
-      for (Command command : commands) {
-        commands_add(command);
-      }
-      refreshViewer();
-    }
-  }
+	/**
+	 * Adds user-defined LAF.
+	 */
+	private void handleAddUserDefinedLAF() {
+		CategoryInfo targetCategory = LafSupport.getCategory(LafSupport.ROOT_ID);
+		{
+			List<Object> selectedEntries = getSelectedEntries();
+			if (!CollectionUtils.isEmpty(selectedEntries)) {
+				Object entry = selectedEntries.get(0);
+				if (entry instanceof CategoryInfo) {
+					targetCategory = (CategoryInfo) entry;
+				} else if (entry instanceof LafInfo) {
+					targetCategory = ((LafInfo) entry).getCategory();
+				}
+			}
+		}
+		AddCustomLookAndFeelDialog dialog =
+				new AddCustomLookAndFeelDialog(DesignerPlugin.getShell(), targetCategory);
+		if (dialog.open() == Window.OK) {
+			List<Command> commands = dialog.getCommands();
+			for (Command command : commands) {
+				commands_add(command);
+			}
+			refreshViewer();
+		}
+	}
 
-  /**
-   * Performs editing either of category or look-and-feel entry.
-   */
-  private void handleEdit() {
-    Object entry = getSelectedEntries().get(0);
-    if (entry instanceof CategoryInfo) {
-      CategoryInfo category = (CategoryInfo) entry;
-      InputDialog inputDialog = new InputDialog(getShell(),
-          Messages.LafPreferencePage_editCategoryTitle,
-          Messages.LafPreferencePage_editCategoryMessage,
-          category.getName(),
-          null);
-      // execute dialog
-      if (inputDialog.open() == Window.OK) {
-        commands_add(new RenameCategoryCommand(category, inputDialog.getValue()));
-      }
-    } else if (entry instanceof LafInfo) {
-      LafInfo lafInfo = (LafInfo) entry;
-      EditCustomLookAndFeelDialog dialog =
-          new EditCustomLookAndFeelDialog(DesignerPlugin.getShell(), lafInfo);
-      // execute dialog
-      if (dialog.open() == Window.OK) {
-        List<Command> commands = dialog.getCommands();
-        for (Command command : commands) {
-          commands_add(command);
-        }
-      }
-    }
-  }
+	/**
+	 * Performs editing either of category or look-and-feel entry.
+	 */
+	private void handleEdit() {
+		Object entry = getSelectedEntries().get(0);
+		if (entry instanceof CategoryInfo) {
+			CategoryInfo category = (CategoryInfo) entry;
+			InputDialog inputDialog = new InputDialog(getShell(),
+					Messages.LafPreferencePage_editCategoryTitle,
+					Messages.LafPreferencePage_editCategoryMessage,
+					category.getName(),
+					null);
+			// execute dialog
+			if (inputDialog.open() == Window.OK) {
+				commands_add(new RenameCategoryCommand(category, inputDialog.getValue()));
+			}
+		} else if (entry instanceof LafInfo) {
+			LafInfo lafInfo = (LafInfo) entry;
+			EditCustomLookAndFeelDialog dialog =
+					new EditCustomLookAndFeelDialog(DesignerPlugin.getShell(), lafInfo);
+			// execute dialog
+			if (dialog.open() == Window.OK) {
+				List<Command> commands = dialog.getCommands();
+				for (Command command : commands) {
+					commands_add(command);
+				}
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Update UI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Simply refreshes the LAF list viewer.
-   */
-  private void refreshViewer() {
-    m_lafTree.refresh();
-    updateVisibilityStates();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Update UI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Simply refreshes the LAF list viewer.
+	 */
+	private void refreshViewer() {
+		m_lafTree.refresh();
+		updateVisibilityStates();
+	}
 
-  /**
-   * Updates buttons basing on selection in LAF list viewer.
-   */
-  private void updateButtons() {
-    List<Object> selection = getSelectedEntries();
-    m_setDefaultButton.setEnabled(selection.size() == 1 && selection.get(0) instanceof LafInfo);
-    m_editButton.setEnabled(selection.size() == 1);
-    m_deleteButton.setEnabled(!selection.isEmpty());
-    // move up/down
-    List<CategoryInfo> categories = LafSupport.getLAFCategoriesList();
-    {
-      boolean upEnabled = !selection.isEmpty();
-      boolean downEnabled = !selection.isEmpty();
-      for (Object element : selection) {
-        if (element instanceof CategoryInfo) {
-          upEnabled &= categories.indexOf(element) != 0;
-          downEnabled &= categories.indexOf(element) != categories.size() - 1;
-        } else if (element instanceof LafInfo) {
-          LafInfo lafInfo = (LafInfo) element;
-          List<LafInfo> lafList = lafInfo.getCategory().getLAFList();
-          upEnabled &= lafList.indexOf(lafInfo) != 0;
-          downEnabled &= lafList.indexOf(lafInfo) != lafList.size() - 1;
-        }
-      }
-      m_moveUpButton.setEnabled(upEnabled);
-      m_moveDownButton.setEnabled(downEnabled);
-    }
-  }
+	/**
+	 * Updates buttons basing on selection in LAF list viewer.
+	 */
+	private void updateButtons() {
+		List<Object> selection = getSelectedEntries();
+		m_setDefaultButton.setEnabled(selection.size() == 1 && selection.get(0) instanceof LafInfo);
+		m_editButton.setEnabled(selection.size() == 1);
+		m_deleteButton.setEnabled(!selection.isEmpty());
+		// move up/down
+		List<CategoryInfo> categories = LafSupport.getLAFCategoriesList();
+		{
+			boolean upEnabled = !selection.isEmpty();
+			boolean downEnabled = !selection.isEmpty();
+			for (Object element : selection) {
+				if (element instanceof CategoryInfo) {
+					upEnabled &= categories.indexOf(element) != 0;
+					downEnabled &= categories.indexOf(element) != categories.size() - 1;
+				} else if (element instanceof LafInfo) {
+					LafInfo lafInfo = (LafInfo) element;
+					List<LafInfo> lafList = lafInfo.getCategory().getLAFList();
+					upEnabled &= lafList.indexOf(lafInfo) != 0;
+					downEnabled &= lafList.indexOf(lafInfo) != lafList.size() - 1;
+				}
+			}
+			m_moveUpButton.setEnabled(upEnabled);
+			m_moveDownButton.setEnabled(downEnabled);
+		}
+	}
 
-  /**
-   * Updates the LAF list checking items which has "visible" property set.
-   */
-  private void updateVisibilityStates() {
-    List<Object> visibleElements = Lists.newArrayList();
-    for (CategoryInfo category : LafSupport.getLAFCategoriesList()) {
-      if (category.isVisible()) {
-        visibleElements.add(category);
-      }
-      for (LafInfo lafInfo : category.getLAFList()) {
-        if (lafInfo.isVisible()) {
-          visibleElements.add(lafInfo);
-        }
-      }
-    }
-    // update viewer
-    m_lafTree.setCheckedElements(visibleElements.toArray());
-  }
+	/**
+	 * Updates the LAF list checking items which has "visible" property set.
+	 */
+	private void updateVisibilityStates() {
+		List<Object> visibleElements = Lists.newArrayList();
+		for (CategoryInfo category : LafSupport.getLAFCategoriesList()) {
+			if (category.isVisible()) {
+				visibleElements.add(category);
+			}
+			for (LafInfo lafInfo : category.getLAFList()) {
+				if (lafInfo.isVisible()) {
+					visibleElements.add(lafInfo);
+				}
+			}
+		}
+		// update viewer
+		m_lafTree.setCheckedElements(visibleElements.toArray());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Swing LAF Preview
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Restores the {@link LookAndFeel} used before preview changed it.
-   */
-  private void restoreLookAndFeel() {
-    ExecutionUtils.runLog(new RunnableEx() {
-      public void run() throws Exception {
-        UIManager.put("ClassLoader", m_currentLookAndFeel.getClass().getClassLoader());
-        UIManager.setLookAndFeel(m_currentLookAndFeel);
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Swing LAF Preview
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Restores the {@link LookAndFeel} used before preview changed it.
+	 */
+	private void restoreLookAndFeel() {
+		ExecutionUtils.runLog(new RunnableEx() {
+			public void run() throws Exception {
+				UIManager.put("ClassLoader", m_currentLookAndFeel.getClass().getClassLoader());
+				UIManager.setLookAndFeel(m_currentLookAndFeel);
+			}
+		});
+	}
 
-  /**
-   * Schedules Swing LAF preview updating.
-   */
-  private void updatePreview() {
-    cancelPreviewUpdate();
-    m_previewTimerTask = new TimerTask() {
-      @Override
-      public void run() {
-        DesignerPlugin.getStandardDisplay().syncExec(new Runnable() {
-          public void run() {
-            updatePreview0();
-          }
-        });
-      }
-    };
-    m_previewTimer.schedule(m_previewTimerTask, 200);
-  }
+	/**
+	 * Schedules Swing LAF preview updating.
+	 */
+	private void updatePreview() {
+		cancelPreviewUpdate();
+		m_previewTimerTask = new TimerTask() {
+			@Override
+			public void run() {
+				DesignerPlugin.getStandardDisplay().syncExec(new Runnable() {
+					public void run() {
+						updatePreview0();
+					}
+				});
+			}
+		};
+		m_previewTimer.schedule(m_previewTimerTask, 200);
+	}
 
-  /**
-   * Updates the Swing preview part basing on selected LAF.
-   */
-  private void updatePreview0() {
-    if (m_updatingPreview) {
-      return;
-    }
-    m_updatingPreview = true;
-    try {
-      ExecutionUtils.runLog(new RunnableEx() {
-        public void run() throws Exception {
-          try {
-            m_previewGroup.getParent().setRedraw(false);
-            for (Control control : m_previewGroup.getChildren()) {
-              control.dispose();
-            }
-            LafInfo selectedLAF = getSelectedLAF();
-            if (selectedLAF == null) {
-              // nothing selected
-              return;
-            }
-            LookAndFeel lookAndFeel = selectedLAF.getLookAndFeelInstance();
-            m_previewGroup.getParent().layout(true);
-            UIManager.put("ClassLoader", lookAndFeel.getClass().getClassLoader());
-            UIManager.setLookAndFeel(lookAndFeel);
-            createPreviewArea(m_previewGroup);
-            m_previewGroup.getParent().layout(true);
-          } finally {
-            m_previewGroup.getParent().setRedraw(true);
-          }
-        }
-      });
-    } finally {
-      m_updatingPreview = false;
-    }
-  }
+	/**
+	 * Updates the Swing preview part basing on selected LAF.
+	 */
+	private void updatePreview0() {
+		if (m_updatingPreview) {
+			return;
+		}
+		m_updatingPreview = true;
+		try {
+			ExecutionUtils.runLog(new RunnableEx() {
+				public void run() throws Exception {
+					try {
+						m_previewGroup.getParent().setRedraw(false);
+						for (Control control : m_previewGroup.getChildren()) {
+							control.dispose();
+						}
+						LafInfo selectedLAF = getSelectedLAF();
+						if (selectedLAF == null) {
+							// nothing selected
+							return;
+						}
+						LookAndFeel lookAndFeel = selectedLAF.getLookAndFeelInstance();
+						m_previewGroup.getParent().layout(true);
+						UIManager.put("ClassLoader", lookAndFeel.getClass().getClassLoader());
+						UIManager.setLookAndFeel(lookAndFeel);
+						createPreviewArea(m_previewGroup);
+						m_previewGroup.getParent().layout(true);
+					} finally {
+						m_previewGroup.getParent().setRedraw(true);
+					}
+				}
+			});
+		} finally {
+			m_updatingPreview = false;
+		}
+	}
 
-  /**
-   * Cancels any pending preview updating task.
-   */
-  private void cancelPreviewUpdate() {
-    if (m_previewTimerTask != null) {
-      m_previewTimerTask.cancel();
-    }
-  }
+	/**
+	 * Cancels any pending preview updating task.
+	 */
+	private void cancelPreviewUpdate() {
+		if (m_previewTimerTask != null) {
+			m_previewTimerTask.cancel();
+		}
+	}
 
-  /**
-   * Creates {@link EmbeddedSwingComposite} with some Swing components to show it using different
-   * LAFs.
-   */
-  private void createPreviewArea(Group previewGroup) {
-    try {
-      LookAndFeel currentLookAndFeel = UIManager.getLookAndFeel();
-      EmbeddedSwingComposite awtComposite = new EmbeddedSwingComposite(previewGroup, SWT.NONE) {
-        @Override
-        protected JComponent createSwingComponent() {
-          // create the JRootPane
-          JRootPane rootPane = new JRootPane();
-          {
-            JMenuBar menuBar = new JMenuBar();
-            rootPane.setJMenuBar(menuBar);
-            {
-              JMenu mnFile = new JMenu(Messages.LafPreferencePage_previewFile);
-              menuBar.add(mnFile);
-              {
-                JMenuItem mntmNew = new JMenuItem(Messages.LafPreferencePage_previewNew);
-                mnFile.add(mntmNew);
-              }
-              {
-                JMenuItem mntmExit = new JMenuItem(Messages.LafPreferencePage_previewExit);
-                mnFile.add(mntmExit);
-              }
-            }
-            {
-              JMenu mnView = new JMenu(Messages.LafPreferencePage_previewView);
-              menuBar.add(mnView);
-              {
-                JMenuItem mntmCommon = new JMenuItem(Messages.LafPreferencePage_previewCommon);
-                mnView.add(mntmCommon);
-              }
-            }
-          }
-          GridBagLayout gridBagLayout = new GridBagLayout();
-          gridBagLayout.columnWidths = new int[]{0, 0, 0};
-          gridBagLayout.rowHeights = new int[]{0, 0, 0, 0};
-          gridBagLayout.columnWeights = new double[]{0.0, 0.0, 1.0E-4};
-          gridBagLayout.rowWeights = new double[]{0.0, 0.0, 0.0, 1.0E-4};
-          rootPane.getContentPane().setLayout(gridBagLayout);
-          {
-            JLabel lblLabel = new JLabel(Messages.LafPreferencePage_previewLabel);
-            GridBagConstraints gbc = new GridBagConstraints();
-            gbc.insets = new Insets(0, 0, 5, 5);
-            gbc.gridx = 0;
-            gbc.gridy = 0;
-            rootPane.getContentPane().add(lblLabel, gbc);
-          }
-          {
-            JButton btnPushButton = new JButton(Messages.LafPreferencePage_previewButton);
-            GridBagConstraints gbc = new GridBagConstraints();
-            gbc.insets = new Insets(0, 0, 5, 0);
-            gbc.gridx = 1;
-            gbc.gridy = 0;
-            rootPane.getContentPane().add(btnPushButton, gbc);
-          }
-          {
-            JComboBox<String> comboBox = new JComboBox<String>();
-            comboBox.setModel(
-                new DefaultComboBoxModel<String>(new String[]{
-                    Messages.LafPreferencePage_previewCombo,
-                    "ComboBox Item 1",
-                    "ComboBox Item 2"}));
-            GridBagConstraints gbc = new GridBagConstraints();
-            gbc.insets = new Insets(0, 0, 5, 5);
-            gbc.fill = GridBagConstraints.HORIZONTAL;
-            gbc.gridx = 0;
-            gbc.gridy = 1;
-            rootPane.getContentPane().add(comboBox, gbc);
-          }
-          {
-            JRadioButton rdbtnRadioButton =
-                new JRadioButton(Messages.LafPreferencePage_previewRadio);
-            GridBagConstraints gbc = new GridBagConstraints();
-            gbc.insets = new Insets(0, 0, 5, 0);
-            gbc.gridx = 1;
-            gbc.gridy = 1;
-            rootPane.getContentPane().add(rdbtnRadioButton, gbc);
-          }
-          {
-            JCheckBox chckbxCheckbox = new JCheckBox(Messages.LafPreferencePage_previewCheck);
-            GridBagConstraints gbc = new GridBagConstraints();
-            gbc.insets = new Insets(0, 0, 0, 5);
-            gbc.gridx = 0;
-            gbc.gridy = 2;
-            rootPane.getContentPane().add(chckbxCheckbox, gbc);
-          }
-          {
-            JTextField textField = new JTextField();
-            textField.setText(Messages.LafPreferencePage_previewTextField);
-            GridBagConstraints gbc = new GridBagConstraints();
-            gbc.fill = GridBagConstraints.HORIZONTAL;
-            gbc.gridx = 1;
-            gbc.gridy = 2;
-            rootPane.getContentPane().add(textField, gbc);
-          }
-          return rootPane;
-        }
-      };
-      awtComposite.populate();
-      // restore current laf
-      UIManager.put("ClassLoader", currentLookAndFeel.getClass().getClassLoader());
-      UIManager.setLookAndFeel(currentLookAndFeel);
-    } catch (Throwable e) {
-      DesignerPlugin.log(e);
-    }
-  }
+	/**
+	 * Creates {@link EmbeddedSwingComposite} with some Swing components to show it using different
+	 * LAFs.
+	 */
+	private void createPreviewArea(Group previewGroup) {
+		try {
+			LookAndFeel currentLookAndFeel = UIManager.getLookAndFeel();
+			EmbeddedSwingComposite awtComposite = new EmbeddedSwingComposite(previewGroup, SWT.NONE) {
+				@Override
+				protected JComponent createSwingComponent() {
+					// create the JRootPane
+					JRootPane rootPane = new JRootPane();
+					{
+						JMenuBar menuBar = new JMenuBar();
+						rootPane.setJMenuBar(menuBar);
+						{
+							JMenu mnFile = new JMenu(Messages.LafPreferencePage_previewFile);
+							menuBar.add(mnFile);
+							{
+								JMenuItem mntmNew = new JMenuItem(Messages.LafPreferencePage_previewNew);
+								mnFile.add(mntmNew);
+							}
+							{
+								JMenuItem mntmExit = new JMenuItem(Messages.LafPreferencePage_previewExit);
+								mnFile.add(mntmExit);
+							}
+						}
+						{
+							JMenu mnView = new JMenu(Messages.LafPreferencePage_previewView);
+							menuBar.add(mnView);
+							{
+								JMenuItem mntmCommon = new JMenuItem(Messages.LafPreferencePage_previewCommon);
+								mnView.add(mntmCommon);
+							}
+						}
+					}
+					GridBagLayout gridBagLayout = new GridBagLayout();
+					gridBagLayout.columnWidths = new int[]{0, 0, 0};
+					gridBagLayout.rowHeights = new int[]{0, 0, 0, 0};
+					gridBagLayout.columnWeights = new double[]{0.0, 0.0, 1.0E-4};
+					gridBagLayout.rowWeights = new double[]{0.0, 0.0, 0.0, 1.0E-4};
+					rootPane.getContentPane().setLayout(gridBagLayout);
+					{
+						JLabel lblLabel = new JLabel(Messages.LafPreferencePage_previewLabel);
+						GridBagConstraints gbc = new GridBagConstraints();
+						gbc.insets = new Insets(0, 0, 5, 5);
+						gbc.gridx = 0;
+						gbc.gridy = 0;
+						rootPane.getContentPane().add(lblLabel, gbc);
+					}
+					{
+						JButton btnPushButton = new JButton(Messages.LafPreferencePage_previewButton);
+						GridBagConstraints gbc = new GridBagConstraints();
+						gbc.insets = new Insets(0, 0, 5, 0);
+						gbc.gridx = 1;
+						gbc.gridy = 0;
+						rootPane.getContentPane().add(btnPushButton, gbc);
+					}
+					{
+						JComboBox<String> comboBox = new JComboBox<String>();
+						comboBox.setModel(
+								new DefaultComboBoxModel<String>(new String[]{
+										Messages.LafPreferencePage_previewCombo,
+										"ComboBox Item 1",
+								"ComboBox Item 2"}));
+						GridBagConstraints gbc = new GridBagConstraints();
+						gbc.insets = new Insets(0, 0, 5, 5);
+						gbc.fill = GridBagConstraints.HORIZONTAL;
+						gbc.gridx = 0;
+						gbc.gridy = 1;
+						rootPane.getContentPane().add(comboBox, gbc);
+					}
+					{
+						JRadioButton rdbtnRadioButton =
+								new JRadioButton(Messages.LafPreferencePage_previewRadio);
+						GridBagConstraints gbc = new GridBagConstraints();
+						gbc.insets = new Insets(0, 0, 5, 0);
+						gbc.gridx = 1;
+						gbc.gridy = 1;
+						rootPane.getContentPane().add(rdbtnRadioButton, gbc);
+					}
+					{
+						JCheckBox chckbxCheckbox = new JCheckBox(Messages.LafPreferencePage_previewCheck);
+						GridBagConstraints gbc = new GridBagConstraints();
+						gbc.insets = new Insets(0, 0, 0, 5);
+						gbc.gridx = 0;
+						gbc.gridy = 2;
+						rootPane.getContentPane().add(chckbxCheckbox, gbc);
+					}
+					{
+						JTextField textField = new JTextField();
+						textField.setText(Messages.LafPreferencePage_previewTextField);
+						GridBagConstraints gbc = new GridBagConstraints();
+						gbc.fill = GridBagConstraints.HORIZONTAL;
+						gbc.gridx = 1;
+						gbc.gridy = 2;
+						rootPane.getContentPane().add(textField, gbc);
+					}
+					return rootPane;
+				}
+			};
+			awtComposite.populate();
+			// restore current laf
+			UIManager.put("ClassLoader", currentLookAndFeel.getClass().getClassLoader());
+			UIManager.setLookAndFeel(currentLookAndFeel);
+		} catch (Throwable e) {
+			DesignerPlugin.log(e);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final List<Command> m_commands = Lists.newArrayList();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final List<Command> m_commands = Lists.newArrayList();
 
-  /**
-   * Executes new {@link Command} and updates {@link #m_viewer} accordingly.
-   */
-  private void commands_add(Command command) {
-    command.execute();
-    command.addToCommandList(m_commands);
-    refreshViewer();
-  }
+	/**
+	 * Executes new {@link Command} and updates {@link #m_viewer} accordingly.
+	 */
+	private void commands_add(Command command) {
+		command.execute();
+		command.addToCommandList(m_commands);
+		refreshViewer();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // DND
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private List<Object> m_dragEntries;
-  private boolean m_dragCategory;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// DND
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private List<Object> m_dragEntries;
+	private boolean m_dragCategory;
 
-  /**
-   * Configures DND for LAF list viewer.
-   */
-  private void configureDND() {
-    Transfer[] transfers = new Transfer[]{LookAndFeelTransfer.INSTANCE};
-    m_lafTree.addDragSupport(DND.DROP_MOVE, transfers, new DragSourceListener() {
-      public void dragStart(DragSourceEvent event) {
-        m_dragEntries = getSelectedEntries();
-        m_dragCategory = m_dragEntries.get(0) instanceof CategoryInfo;
-        // check that we drag only categories or only entries
-        for (Object element : m_dragEntries) {
-          if (m_dragCategory != element instanceof CategoryInfo) {
-            event.doit = false;
-          }
-        }
-      }
+	/**
+	 * Configures DND for LAF list viewer.
+	 */
+	private void configureDND() {
+		Transfer[] transfers = new Transfer[]{LookAndFeelTransfer.INSTANCE};
+		m_lafTree.addDragSupport(DND.DROP_MOVE, transfers, new DragSourceListener() {
+			public void dragStart(DragSourceEvent event) {
+				m_dragEntries = getSelectedEntries();
+				m_dragCategory = m_dragEntries.get(0) instanceof CategoryInfo;
+				// check that we drag only categories or only entries
+				for (Object element : m_dragEntries) {
+					if (m_dragCategory != element instanceof CategoryInfo) {
+						event.doit = false;
+					}
+				}
+			}
 
-      public void dragSetData(DragSourceEvent event) {
-      }
+			public void dragSetData(DragSourceEvent event) {
+			}
 
-      public void dragFinished(DragSourceEvent event) {
-      }
-    });
-    ViewerDropAdapter dropAdapter = new ViewerDropAdapter(m_lafTree) {
-      @Override
-      protected int determineLocation(DropTargetEvent event) {
-        if (event.item instanceof Item) {
-          Item item = (Item) event.item;
-          Point coordinates = m_lafTree.getControl().toControl(event.x, event.y);
-          Rectangle bounds = getBounds(item);
-          // when dragging LAF entry relation with category can be only ON
-          if (!m_dragCategory && determineTarget(event) instanceof CategoryInfo) {
-            return LOCATION_ON;
-          }
-          // in all other cases, drop before/after
-          return coordinates.y < bounds.y + bounds.height / 2 ? LOCATION_BEFORE : LOCATION_AFTER;
-        }
-        return LOCATION_NONE;
-      }
+			public void dragFinished(DragSourceEvent event) {
+			}
+		});
+		ViewerDropAdapter dropAdapter = new ViewerDropAdapter(m_lafTree) {
+			@Override
+			protected int determineLocation(DropTargetEvent event) {
+				if (event.item instanceof Item) {
+					Item item = (Item) event.item;
+					Point coordinates = m_lafTree.getControl().toControl(event.x, event.y);
+					Rectangle bounds = getBounds(item);
+					// when dragging LAF entry relation with category can be only ON
+					if (!m_dragCategory && determineTarget(event) instanceof CategoryInfo) {
+						return LOCATION_ON;
+					}
+					// in all other cases, drop before/after
+					return coordinates.y < bounds.y + bounds.height / 2 ? LOCATION_BEFORE : LOCATION_AFTER;
+				}
+				return LOCATION_NONE;
+			}
 
-      @Override
-      public boolean validateDrop(Object target, int operation, TransferData transferType) {
-        // category can be dragged only relative other category
-        if (m_dragCategory) {
-          return target instanceof CategoryInfo;
-        }
-        // all other cases are valid
-        return true;
-      }
+			@Override
+			public boolean validateDrop(Object target, int operation, TransferData transferType) {
+				// category can be dragged only relative other category
+				if (m_dragCategory) {
+					return target instanceof CategoryInfo;
+				}
+				// all other cases are valid
+				return true;
+			}
 
-      @Override
-      public boolean performDrop(Object data) {
-        Object target = getCurrentTarget();
-        int location = getCurrentLocation();
-        if (m_dragCategory) {
-          Assert.instanceOf(CategoryInfo.class, target);
-          Assert.isTrue(location == LOCATION_BEFORE || location == LOCATION_AFTER);
-          // prepare next category
-          CategoryInfo nextCategory;
-          {
-            List<CategoryInfo> categories = LafSupport.getLAFCategoriesList();
-            int index = categories.indexOf(target);
-            if (location == LOCATION_BEFORE) {
-              nextCategory = categories.get(index);
-            } else {
-              nextCategory = GenericsUtils.getNextOrNull(categories, index);
-            }
-          }
-          // add commands
-          for (Object element : m_dragEntries) {
-            CategoryInfo category = (CategoryInfo) element;
-            commands_add(new MoveCategoryCommand(category, nextCategory));
-          }
-        } else if (target instanceof CategoryInfo) {
-          Assert.isTrue(location == LOCATION_ON);
-          CategoryInfo targetCategory = (CategoryInfo) target;
-          for (Object entry : m_dragEntries) {
-            commands_add(new MoveCommand((LafInfo) entry, targetCategory, null));
-          }
-        } else {
-          LafInfo targetLAF = (LafInfo) target;
-          CategoryInfo targetCategory = targetLAF.getCategory();
-          // prepare next LAF
-          LafInfo nextLAF;
-          {
-            List<LafInfo> entries = targetCategory.getLAFList();
-            int index = entries.indexOf(targetLAF);
-            if (location == LOCATION_BEFORE) {
-              nextLAF = entries.get(index);
-            } else {
-              nextLAF = GenericsUtils.getNextOrNull(entries, index);
-            }
-          }
-          // add commands
-          for (Object entry : m_dragEntries) {
-            commands_add(new MoveCommand((LafInfo) entry, targetCategory, nextLAF));
-          }
-        }
-        // refresh viewer to show result of applying commands
-        refreshViewer();
-        return true;
-      }
-    };
-    dropAdapter.setScrollExpandEnabled(false);
-    m_lafTree.addDropSupport(DND.DROP_MOVE, transfers, dropAdapter);
-  }
+			@Override
+			public boolean performDrop(Object data) {
+				Object target = getCurrentTarget();
+				int location = getCurrentLocation();
+				if (m_dragCategory) {
+					Assert.instanceOf(CategoryInfo.class, target);
+					Assert.isTrue(location == LOCATION_BEFORE || location == LOCATION_AFTER);
+					// prepare next category
+					CategoryInfo nextCategory;
+					{
+						List<CategoryInfo> categories = LafSupport.getLAFCategoriesList();
+						int index = categories.indexOf(target);
+						if (location == LOCATION_BEFORE) {
+							nextCategory = categories.get(index);
+						} else {
+							nextCategory = GenericsUtils.getNextOrNull(categories, index);
+						}
+					}
+					// add commands
+					for (Object element : m_dragEntries) {
+						CategoryInfo category = (CategoryInfo) element;
+						commands_add(new MoveCategoryCommand(category, nextCategory));
+					}
+				} else if (target instanceof CategoryInfo) {
+					Assert.isTrue(location == LOCATION_ON);
+					CategoryInfo targetCategory = (CategoryInfo) target;
+					for (Object entry : m_dragEntries) {
+						commands_add(new MoveCommand((LafInfo) entry, targetCategory, null));
+					}
+				} else {
+					LafInfo targetLAF = (LafInfo) target;
+					CategoryInfo targetCategory = targetLAF.getCategory();
+					// prepare next LAF
+					LafInfo nextLAF;
+					{
+						List<LafInfo> entries = targetCategory.getLAFList();
+						int index = entries.indexOf(targetLAF);
+						if (location == LOCATION_BEFORE) {
+							nextLAF = entries.get(index);
+						} else {
+							nextLAF = GenericsUtils.getNextOrNull(entries, index);
+						}
+					}
+					// add commands
+					for (Object entry : m_dragEntries) {
+						commands_add(new MoveCommand((LafInfo) entry, targetCategory, nextLAF));
+					}
+				}
+				// refresh viewer to show result of applying commands
+				refreshViewer();
+				return true;
+			}
+		};
+		dropAdapter.setScrollExpandEnabled(false);
+		m_lafTree.addDropSupport(DND.DROP_MOVE, transfers, dropAdapter);
+	}
 
-  /**
-   * Implementation of {@link ByteArrayTransfer} for LAF entries.
-   *
-   * @author mitin_aa
-   */
-  private static final class LookAndFeelTransfer extends ByteArrayTransfer {
-    public static LookAndFeelTransfer INSTANCE = new LookAndFeelTransfer();
-    private static final String TYPE_NAME = "__WBP_LookAndFeel_Tranfser";
-    private static final int TYPE_ID = registerType(TYPE_NAME);
+	/**
+	 * Implementation of {@link ByteArrayTransfer} for LAF entries.
+	 *
+	 * @author mitin_aa
+	 */
+	private static final class LookAndFeelTransfer extends ByteArrayTransfer {
+		public static LookAndFeelTransfer INSTANCE = new LookAndFeelTransfer();
+		private static final String TYPE_NAME = "__WBP_LookAndFeel_Tranfser";
+		private static final int TYPE_ID = registerType(TYPE_NAME);
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    private LookAndFeelTransfer() {
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		private LookAndFeelTransfer() {
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Transfer
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    protected int[] getTypeIds() {
-      return new int[]{TYPE_ID};
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Transfer
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		protected int[] getTypeIds() {
+			return new int[]{TYPE_ID};
+		}
 
-    @Override
-    protected String[] getTypeNames() {
-      return new String[]{TYPE_NAME};
-    }
+		@Override
+		protected String[] getTypeNames() {
+			return new String[]{TYPE_NAME};
+		}
 
-    @Override
-    protected void javaToNative(Object object, TransferData transferData) {
-    }
+		@Override
+		protected void javaToNative(Object object, TransferData transferData) {
+		}
 
-    @Override
-    protected Object nativeToJava(TransferData transferData) {
-      return ArrayUtils.EMPTY_BYTE_ARRAY;
-    }
-  }
+		@Override
+		protected Object nativeToJava(TransferData transferData) {
+			return ArrayUtils.EMPTY_BYTE_ARRAY;
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils/Misc
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the currently selected {@link LafInfo} from LAF table or <code>null</code> if nothing
-   *         or separator selected.
-   */
-  private LafInfo getSelectedLAF() {
-    IStructuredSelection selection = (IStructuredSelection) m_lafTree.getSelection();
-    if (selection == null) {
-      return null;
-    }
-    Object firstElement = selection.getFirstElement();
-    return firstElement instanceof LafInfo && !(firstElement instanceof SeparatorLafInfo)
-        ? (LafInfo) firstElement
-        : null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils/Misc
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the currently selected {@link LafInfo} from LAF table or <code>null</code> if nothing
+	 *         or separator selected.
+	 */
+	private LafInfo getSelectedLAF() {
+		IStructuredSelection selection = (IStructuredSelection) m_lafTree.getSelection();
+		if (selection == null) {
+			return null;
+		}
+		Object firstElement = selection.getFirstElement();
+		return firstElement instanceof LafInfo && !(firstElement instanceof SeparatorLafInfo)
+				? (LafInfo) firstElement
+						: null;
+	}
 
-  /**
-   * @return the {@link List} of anything selectes in LAF list viewer.
-   */
-  @SuppressWarnings("unchecked")
-  private List<Object> getSelectedEntries() {
-    IStructuredSelection selection = (IStructuredSelection) m_lafTree.getSelection();
-    return selection.toList();
-  }
+	/**
+	 * @return the {@link List} of anything selectes in LAF list viewer.
+	 */
+	@SuppressWarnings("unchecked")
+	private List<Object> getSelectedEntries() {
+		IStructuredSelection selection = (IStructuredSelection) m_lafTree.getSelection();
+		return selection.toList();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Content/LabelProvider for LAF list
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final class LAFItemsLabelProvider extends LabelProvider {
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // LabelProvider
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public String getText(Object element) {
-      LafEntryInfo laf = (LafEntryInfo) element;
-      String name = laf.getName();
-      boolean isDefault = m_defaultLAF != null
-          && laf.getID().equals(m_defaultLAF.getID())
-          && name.equals(m_defaultLAF.getName());
-      return isDefault ? name + " [default]" : name;
-    }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Content/LabelProvider for LAF list
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final class LAFItemsLabelProvider extends LabelProvider {
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// LabelProvider
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public String getText(Object element) {
+			LafEntryInfo laf = (LafEntryInfo) element;
+			String name = laf.getName();
+			boolean isDefault = m_defaultLAF != null
+					&& laf.getID().equals(m_defaultLAF.getID())
+					&& name.equals(m_defaultLAF.getName());
+			return isDefault ? name + " [default]" : name;
+		}
 
-    @Override
-    public Image getImage(Object element) {
-      if (element instanceof CategoryInfo) {
-        return CATEGORY_IMAGE;
-      }
-      return LAF_ITEM_IMAGE;
-    }
-  }
-  /**
-   * Content provider for LAF list.
-   *
-   * @author mitin_aa
-   */
-  private static class LAFItemsContentProvider implements ITreeContentProvider {
-    @SuppressWarnings("unchecked")
-    public Object[] getElements(Object inputElement) {
-      List<Object> resultList = Lists.newArrayList();
-      for (CategoryInfo category : LafSupport.getLAFCategoriesList()) {
-        if (LafSupport.isRootCategory(category)) {
-          resultList.addAll(category.getLAFList());
-        } else {
-          resultList.add(category);
-        }
-      }
-      // filter out SeparatorLAFInfo
-      resultList = (List<Object>) CollectionUtils.select(resultList, new Predicate() {
-        public boolean evaluate(Object object) {
-          return !(object instanceof SeparatorLafInfo);
-        }
-      });
-      return resultList.toArray(new Object[resultList.size()]);
-    }
+		@Override
+		public Image getImage(Object element) {
+			if (element instanceof CategoryInfo) {
+				return CATEGORY_IMAGE;
+			}
+			return LAF_ITEM_IMAGE;
+		}
+	}
+	/**
+	 * Content provider for LAF list.
+	 *
+	 * @author mitin_aa
+	 */
+	private static class LAFItemsContentProvider implements ITreeContentProvider {
+		@SuppressWarnings("unchecked")
+		public Object[] getElements(Object inputElement) {
+			List<Object> resultList = Lists.newArrayList();
+			for (CategoryInfo category : LafSupport.getLAFCategoriesList()) {
+				if (LafSupport.isRootCategory(category)) {
+					resultList.addAll(category.getLAFList());
+				} else {
+					resultList.add(category);
+				}
+			}
+			// filter out SeparatorLAFInfo
+			resultList = (List<Object>) CollectionUtils.select(resultList, new Predicate() {
+				public boolean evaluate(Object object) {
+					return !(object instanceof SeparatorLafInfo);
+				}
+			});
+			return resultList.toArray(new Object[resultList.size()]);
+		}
 
-    public Object[] getChildren(Object parentElement) {
-      if (parentElement instanceof CategoryInfo) {
-        CategoryInfo category = (CategoryInfo) parentElement;
-        return LafSupport.isRootCategory(category)
-            ? ArrayUtils.EMPTY_OBJECT_ARRAY
-            : category.getLAFList().toArray();
-      }
-      return ArrayUtils.EMPTY_OBJECT_ARRAY;
-    }
+		public Object[] getChildren(Object parentElement) {
+			if (parentElement instanceof CategoryInfo) {
+				CategoryInfo category = (CategoryInfo) parentElement;
+				return LafSupport.isRootCategory(category)
+						? ArrayUtils.EMPTY_OBJECT_ARRAY
+								: category.getLAFList().toArray();
+			}
+			return ArrayUtils.EMPTY_OBJECT_ARRAY;
+		}
 
-    public Object getParent(Object element) {
-      if (element instanceof LafInfo) {
-        return ((LafInfo) element).getCategory();
-      }
-      return null;
-    }
+		public Object getParent(Object element) {
+			if (element instanceof LafInfo) {
+				return ((LafInfo) element).getCategory();
+			}
+			return null;
+		}
 
-    public boolean hasChildren(Object element) {
-      return getChildren(element).length != 0;
-    }
+		public boolean hasChildren(Object element) {
+			return getChildren(element).length != 0;
+		}
 
-    public void dispose() {
-    }
+		public void dispose() {
+		}
 
-    public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
-    }
-  }
+		public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/preferences/laf/PreferenceInitializer.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/preferences/laf/PreferenceInitializer.java
index accd80084..9f991b4dc 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/preferences/laf/PreferenceInitializer.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/preferences/laf/PreferenceInitializer.java
@@ -23,18 +23,18 @@
  * @coverage swing.preferences.laf
  */
 public final class PreferenceInitializer extends AbstractPreferenceInitializer
-    implements
-      IPreferenceConstants {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  //	Initializing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void initializeDefaultPreferences() {
-    IPreferenceStore preferenceStore = ToolkitProvider.DESCRIPTION.getPreferences();
-    preferenceStore.setDefault(P_APPLY_IN_MAIN, false);
-    // This system LAF is default
-    preferenceStore.setDefault(P_DEFAULT_LAF, LafSupport.getSystemDefaultLAF().getID());
-  }
+implements
+IPreferenceConstants {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	//	Initializing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void initializeDefaultPreferences() {
+		IPreferenceStore preferenceStore = ToolkitProvider.DESCRIPTION.getPreferences();
+		preferenceStore.setDefault(P_APPLY_IN_MAIN, false);
+		// This system LAF is default
+		preferenceStore.setDefault(P_DEFAULT_LAF, LafSupport.getSystemDefaultLAF().getID());
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/preferences/layout/AbsoluteLayoutPreferencePage.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/preferences/layout/AbsoluteLayoutPreferencePage.java
index d48e8f60e..832e66f42 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/preferences/layout/AbsoluteLayoutPreferencePage.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/preferences/layout/AbsoluteLayoutPreferencePage.java
@@ -37,162 +37,162 @@
  * @coverage swing.preferences.ui
  */
 public final class AbsoluteLayoutPreferencePage extends FieldLayoutPreferencePage
-    implements
-      IWorkbenchPreferencePage,
-      IPreferenceConstants {
-  /**
-   * @return The {@link IPreferenceStore} of Swing Toolkit Support plugin
-   */
-  @Override
-  public IPreferenceStore getPreferenceStore() {
-    return getToolkit().getPreferences();
-  }
+implements
+IWorkbenchPreferencePage,
+IPreferenceConstants {
+	/**
+	 * @return The {@link IPreferenceStore} of Swing Toolkit Support plugin
+	 */
+	@Override
+	public IPreferenceStore getPreferenceStore() {
+		return getToolkit().getPreferences();
+	}
 
-  /**
-   * @return the {@link ToolkitDescription}.
-   */
-  private ToolkitDescription getToolkit() {
-    return ToolkitProvider.DESCRIPTION;
-  }
+	/**
+	 * @return the {@link ToolkitDescription}.
+	 */
+	private ToolkitDescription getToolkit() {
+		return ToolkitProvider.DESCRIPTION;
+	}
 
-  @Override
-  protected Control createPageContents(Composite parent) {
-    Composite container = new Composite(parent, SWT.NULL);
-    GridLayoutFactory.create(container);
-    createBooleanFieldEditor(
-        P_USE_FREE_MODE,
-        Messages.AbsoluteLayoutPreferencePage_useAssistedStyle,
-        container);
-    createBooleanFieldEditor(
-        P_USE_JDK_LAYOUT_STYLE,
-        Messages.AbsoluteLayoutPreferencePage_useLayoutStyle,
-        container);
-    {
-      final Composite freeStylePropertiesComposite = new Composite(container, SWT.NONE);
-      GridDataFactory.create(freeStylePropertiesComposite).fillH().alignVM();
-      GridLayoutFactory.create(freeStylePropertiesComposite).marginsH(0).columns(3);
-      {
-        final Group componentGapsGroup = new Group(freeStylePropertiesComposite, SWT.NONE);
-        GridLayoutFactory.create(componentGapsGroup);
-        componentGapsGroup.setText(Messages.AbsoluteLayoutPreferencePage_componentGapsGroup);
-        createIntegerFieldEditor(
-            P_COMPONENT_GAP_LEFT,
-            Messages.AbsoluteLayoutPreferencePage_left,
-            componentGapsGroup,
-            true);
-        createIntegerFieldEditor(
-            P_COMPONENT_GAP_RIGHT,
-            Messages.AbsoluteLayoutPreferencePage_right,
-            componentGapsGroup,
-            true);
-        createIntegerFieldEditor(
-            P_COMPONENT_GAP_TOP,
-            Messages.AbsoluteLayoutPreferencePage_top,
-            componentGapsGroup,
-            true);
-        createIntegerFieldEditor(
-            P_COMPONENT_GAP_BOTTOM,
-            Messages.AbsoluteLayoutPreferencePage_bottom,
-            componentGapsGroup,
-            true);
-      }
-      {
-        final Group containerGapsGroup = new Group(freeStylePropertiesComposite, SWT.NONE);
-        GridLayoutFactory.create(containerGapsGroup);
-        containerGapsGroup.setText(Messages.AbsoluteLayoutPreferencePage_containerGapsGroup);
-        createIntegerFieldEditor(
-            P_CONTAINER_GAP_LEFT,
-            Messages.AbsoluteLayoutPreferencePage_left,
-            containerGapsGroup,
-            true);
-        createIntegerFieldEditor(
-            P_CONTAINER_GAP_RIGHT,
-            Messages.AbsoluteLayoutPreferencePage_right,
-            containerGapsGroup,
-            true);
-        createIntegerFieldEditor(
-            P_CONTAINER_GAP_TOP,
-            Messages.AbsoluteLayoutPreferencePage_top,
-            containerGapsGroup,
-            true);
-        createIntegerFieldEditor(
-            P_CONTAINER_GAP_BOTTOM,
-            Messages.AbsoluteLayoutPreferencePage_bottom,
-            containerGapsGroup,
-            true);
-      }
-    }
-    createBooleanFieldEditor(
-        P_CREATION_FLOW,
-        Messages.AbsoluteLayoutPreferencePage_applyGridFlow,
-        container);
-    createBooleanFieldEditor(
-        P_USE_GRID,
-        Messages.AbsoluteLayoutPreferencePage_useGridSnapping,
-        container);
-    {
-      final Group gridGroup = new Group(container, SWT.NONE);
-      GridDataFactory.create(gridGroup).fillH().alignVM();
-      gridGroup.setText(Messages.AbsoluteLayoutPreferencePage_gridGroup);
-      GridLayoutFactory.create(gridGroup);
-      createIntegerFieldEditor(
-          P_GRID_STEP_X,
-          Messages.AbsoluteLayoutPreferencePage_stepX,
-          gridGroup,
-          false);
-      createIntegerFieldEditor(
-          P_GRID_STEP_Y,
-          Messages.AbsoluteLayoutPreferencePage_stepY,
-          gridGroup,
-          false);
-      createBooleanFieldEditor(
-          P_DISPLAY_GRID,
-          Messages.AbsoluteLayoutPreferencePage_displayGrid,
-          gridGroup);
-    }
-    createBooleanFieldEditor(
-        P_DISPLAY_LOCATION_SIZE_HINTS,
-        Messages.AbsoluteLayoutPreferencePage_displayHints,
-        container);
-    return container;
-  }
+	@Override
+	protected Control createPageContents(Composite parent) {
+		Composite container = new Composite(parent, SWT.NULL);
+		GridLayoutFactory.create(container);
+		createBooleanFieldEditor(
+				P_USE_FREE_MODE,
+				Messages.AbsoluteLayoutPreferencePage_useAssistedStyle,
+				container);
+		createBooleanFieldEditor(
+				P_USE_JDK_LAYOUT_STYLE,
+				Messages.AbsoluteLayoutPreferencePage_useLayoutStyle,
+				container);
+		{
+			final Composite freeStylePropertiesComposite = new Composite(container, SWT.NONE);
+			GridDataFactory.create(freeStylePropertiesComposite).fillH().alignVM();
+			GridLayoutFactory.create(freeStylePropertiesComposite).marginsH(0).columns(3);
+			{
+				final Group componentGapsGroup = new Group(freeStylePropertiesComposite, SWT.NONE);
+				GridLayoutFactory.create(componentGapsGroup);
+				componentGapsGroup.setText(Messages.AbsoluteLayoutPreferencePage_componentGapsGroup);
+				createIntegerFieldEditor(
+						P_COMPONENT_GAP_LEFT,
+						Messages.AbsoluteLayoutPreferencePage_left,
+						componentGapsGroup,
+						true);
+				createIntegerFieldEditor(
+						P_COMPONENT_GAP_RIGHT,
+						Messages.AbsoluteLayoutPreferencePage_right,
+						componentGapsGroup,
+						true);
+				createIntegerFieldEditor(
+						P_COMPONENT_GAP_TOP,
+						Messages.AbsoluteLayoutPreferencePage_top,
+						componentGapsGroup,
+						true);
+				createIntegerFieldEditor(
+						P_COMPONENT_GAP_BOTTOM,
+						Messages.AbsoluteLayoutPreferencePage_bottom,
+						componentGapsGroup,
+						true);
+			}
+			{
+				final Group containerGapsGroup = new Group(freeStylePropertiesComposite, SWT.NONE);
+				GridLayoutFactory.create(containerGapsGroup);
+				containerGapsGroup.setText(Messages.AbsoluteLayoutPreferencePage_containerGapsGroup);
+				createIntegerFieldEditor(
+						P_CONTAINER_GAP_LEFT,
+						Messages.AbsoluteLayoutPreferencePage_left,
+						containerGapsGroup,
+						true);
+				createIntegerFieldEditor(
+						P_CONTAINER_GAP_RIGHT,
+						Messages.AbsoluteLayoutPreferencePage_right,
+						containerGapsGroup,
+						true);
+				createIntegerFieldEditor(
+						P_CONTAINER_GAP_TOP,
+						Messages.AbsoluteLayoutPreferencePage_top,
+						containerGapsGroup,
+						true);
+				createIntegerFieldEditor(
+						P_CONTAINER_GAP_BOTTOM,
+						Messages.AbsoluteLayoutPreferencePage_bottom,
+						containerGapsGroup,
+						true);
+			}
+		}
+		createBooleanFieldEditor(
+				P_CREATION_FLOW,
+				Messages.AbsoluteLayoutPreferencePage_applyGridFlow,
+				container);
+		createBooleanFieldEditor(
+				P_USE_GRID,
+				Messages.AbsoluteLayoutPreferencePage_useGridSnapping,
+				container);
+		{
+			final Group gridGroup = new Group(container, SWT.NONE);
+			GridDataFactory.create(gridGroup).fillH().alignVM();
+			gridGroup.setText(Messages.AbsoluteLayoutPreferencePage_gridGroup);
+			GridLayoutFactory.create(gridGroup);
+			createIntegerFieldEditor(
+					P_GRID_STEP_X,
+					Messages.AbsoluteLayoutPreferencePage_stepX,
+					gridGroup,
+					false);
+			createIntegerFieldEditor(
+					P_GRID_STEP_Y,
+					Messages.AbsoluteLayoutPreferencePage_stepY,
+					gridGroup,
+					false);
+			createBooleanFieldEditor(
+					P_DISPLAY_GRID,
+					Messages.AbsoluteLayoutPreferencePage_displayGrid,
+					gridGroup);
+		}
+		createBooleanFieldEditor(
+				P_DISPLAY_LOCATION_SIZE_HINTS,
+				Messages.AbsoluteLayoutPreferencePage_displayHints,
+				container);
+		return container;
+	}
 
-  /**
-   * Helper method Create {@link #BooleanFieldEditor} within own composite on specified parent
-   */
-  private void createBooleanFieldEditor(final String key,
-      final String text,
-      final Composite parent) {
-    final Composite composite = new Composite(parent, SWT.NONE);
-    addField(new BooleanFieldEditor(key, text, composite));
-  }
+	/**
+	 * Helper method Create {@link #BooleanFieldEditor} within own composite on specified parent
+	 */
+	private void createBooleanFieldEditor(final String key,
+			final String text,
+			final Composite parent) {
+		final Composite composite = new Composite(parent, SWT.NONE);
+		addField(new BooleanFieldEditor(key, text, composite));
+	}
 
-  /**
-   * Helper method Create {@link #IntegerFieldEditor} within own composite on specified parent
-   *
-   * @param alignedRight
-   *          if this parameter is true then align filed editor to the right
-   */
-  private void createIntegerFieldEditor(final String key,
-      final String text,
-      final Composite parent,
-      boolean alignedRight) {
-    final Composite composite = new Composite(parent, SWT.NONE);
-    if (alignedRight) {
-      GridDataFactory.create(composite).grabH().alignHR().alignVM();
-    }
-    // set min width of text control to 40
-    IntegerFieldEditor integerFieldEditor = new IntegerFieldEditor(key, text, composite);
-    Text textControl = integerFieldEditor.getTextControl(composite);
-    GridDataFactory.modify(textControl).hintHC(5);
-    addField(integerFieldEditor);
-  }
+	/**
+	 * Helper method Create {@link #IntegerFieldEditor} within own composite on specified parent
+	 *
+	 * @param alignedRight
+	 *          if this parameter is true then align filed editor to the right
+	 */
+	private void createIntegerFieldEditor(final String key,
+			final String text,
+			final Composite parent,
+			boolean alignedRight) {
+		final Composite composite = new Composite(parent, SWT.NONE);
+		if (alignedRight) {
+			GridDataFactory.create(composite).grabH().alignHR().alignVM();
+		}
+		// set min width of text control to 40
+		IntegerFieldEditor integerFieldEditor = new IntegerFieldEditor(key, text, composite);
+		Text textControl = integerFieldEditor.getTextControl(composite);
+		GridDataFactory.modify(textControl).hintHC(5);
+		addField(integerFieldEditor);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  //	IWorkbenchPreferencePage
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void init(IWorkbench workbench) {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	//	IWorkbenchPreferencePage
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void init(IWorkbench workbench) {
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/preferences/layout/GridBagLayoutPreferencePage.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/preferences/layout/GridBagLayoutPreferencePage.java
index 8c16bdf89..d65307a63 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/preferences/layout/GridBagLayoutPreferencePage.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/preferences/layout/GridBagLayoutPreferencePage.java
@@ -35,77 +35,77 @@
  * @coverage swing.preferences.ui
  */
 public final class GridBagLayoutPreferencePage extends AbstractBindingPreferencesPage {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public GridBagLayoutPreferencePage() {
-    super(ToolkitProvider.DESCRIPTION);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public GridBagLayoutPreferencePage() {
+		super(ToolkitProvider.DESCRIPTION);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected AbstractBindingComposite createBindingComposite(Composite parent) {
-    return new ContentsComposite(parent, m_bindManager, m_preferences);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected AbstractBindingComposite createBindingComposite(Composite parent) {
+		return new ContentsComposite(parent, m_bindManager, m_preferences);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Contents
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static class ContentsComposite extends AbstractBindingComposite {
-    public ContentsComposite(Composite parent,
-        DataBindManager bindManager,
-        IPreferenceStore preferences) {
-      super(parent, bindManager, preferences);
-      GridLayoutFactory.create(this).noMargins().columns(2);
-      // boolean preferences
-      checkButton(
-          this,
-          2,
-          Messages.GridBagLayoutPreferencePage_useLong,
-          IPreferenceConstants.P_GBC_LONG);
-      checkButton(
-          this,
-          2,
-          Messages.GridBagLayoutPreferencePage_autoGrab,
-          IPreferenceConstants.P_ENABLE_GRAB);
-      checkButton(
-          this,
-          2,
-          Messages.GridBagLayoutPreferencePage_rightAlign,
-          IPreferenceConstants.P_ENABLE_RIGHT_ALIGNMENT);
-      checkButton(
-          this,
-          2,
-          Messages.GridBagLayoutPreferencePage_changeInsets,
-          IPreferenceConstants.P_CHANGE_INSETS_FOR_GAPS);
-      integerField(
-          this,
-          2,
-          Messages.GridBagLayoutPreferencePage_columnGap,
-          IPreferenceConstants.P_GAP_COLUMN);
-      integerField(
-          this,
-          2,
-          Messages.GridBagLayoutPreferencePage_rowGap,
-          IPreferenceConstants.P_GAP_ROW);
-      // gbl-constraints variable name template
-      {
-        new Label(this, SWT.NONE).setText(Messages.GridBagLayoutPreferencePage_constraintsNamePattern);
-        // control
-        Combo templateCombo = new Combo(this, SWT.READ_ONLY);
-        GridDataFactory.create(templateCombo).grabH().fillH();
-        templateCombo.setItems(GridBagConstraintsNameSupport.TEMPLATES);
-        // bind
-        bindString(templateCombo, IPreferenceConstants.P_CONSTRAINTS_NAME_TEMPLATE);
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Contents
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static class ContentsComposite extends AbstractBindingComposite {
+		public ContentsComposite(Composite parent,
+				DataBindManager bindManager,
+				IPreferenceStore preferences) {
+			super(parent, bindManager, preferences);
+			GridLayoutFactory.create(this).noMargins().columns(2);
+			// boolean preferences
+			checkButton(
+					this,
+					2,
+					Messages.GridBagLayoutPreferencePage_useLong,
+					IPreferenceConstants.P_GBC_LONG);
+			checkButton(
+					this,
+					2,
+					Messages.GridBagLayoutPreferencePage_autoGrab,
+					IPreferenceConstants.P_ENABLE_GRAB);
+			checkButton(
+					this,
+					2,
+					Messages.GridBagLayoutPreferencePage_rightAlign,
+					IPreferenceConstants.P_ENABLE_RIGHT_ALIGNMENT);
+			checkButton(
+					this,
+					2,
+					Messages.GridBagLayoutPreferencePage_changeInsets,
+					IPreferenceConstants.P_CHANGE_INSETS_FOR_GAPS);
+			integerField(
+					this,
+					2,
+					Messages.GridBagLayoutPreferencePage_columnGap,
+					IPreferenceConstants.P_GAP_COLUMN);
+			integerField(
+					this,
+					2,
+					Messages.GridBagLayoutPreferencePage_rowGap,
+					IPreferenceConstants.P_GAP_ROW);
+			// gbl-constraints variable name template
+			{
+				new Label(this, SWT.NONE).setText(Messages.GridBagLayoutPreferencePage_constraintsNamePattern);
+				// control
+				Combo templateCombo = new Combo(this, SWT.READ_ONLY);
+				GridDataFactory.create(templateCombo).grabH().fillH();
+				templateCombo.setItems(GridBagConstraintsNameSupport.TEMPLATES);
+				// bind
+				bindString(templateCombo, IPreferenceConstants.P_CONSTRAINTS_NAME_TEMPLATE);
+			}
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/preferences/layout/LayoutsPreferencePage.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/preferences/layout/LayoutsPreferencePage.java
index d8866cee2..ead41f3ee 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/preferences/layout/LayoutsPreferencePage.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/preferences/layout/LayoutsPreferencePage.java
@@ -33,42 +33,42 @@
  * @coverage swing.preferences.ui
  */
 public final class LayoutsPreferencePage
-    extends
-      org.eclipse.wb.internal.core.preferences.LayoutsPreferencePage {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public LayoutsPreferencePage() {
-    super(ToolkitProvider.DESCRIPTION);
-  }
+extends
+org.eclipse.wb.internal.core.preferences.LayoutsPreferencePage {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public LayoutsPreferencePage() {
+		super(ToolkitProvider.DESCRIPTION);
+	}
 
-  @Override
-  protected AbstractBindingComposite createBindingComposite(Composite parent) {
-    return new ContentsCompositeEx(parent, m_bindManager, m_preferences);
-  }
+	@Override
+	protected AbstractBindingComposite createBindingComposite(Composite parent) {
+		return new ContentsCompositeEx(parent, m_bindManager, m_preferences);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Contents
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected class ContentsCompositeEx extends ContentsComposite {
-    public ContentsCompositeEx(Composite parent,
-        DataBindManager bindManager,
-        IPreferenceStore preferences) {
-      super(parent, bindManager, preferences);
-      // layout variable name template
-      {
-        new Label(this, SWT.NONE).setText(Messages.LayoutsPreferencePage_layoutNamePattern);
-        // control
-        Combo templateCombo = new Combo(this, SWT.READ_ONLY);
-        GridDataFactory.create(templateCombo).grabH().fillH();
-        templateCombo.setItems(LayoutNameSupport.TEMPLATES);
-        // bind
-        bindString(templateCombo, IPreferenceConstants.P_LAYOUT_NAME_TEMPLATE);
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Contents
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected class ContentsCompositeEx extends ContentsComposite {
+		public ContentsCompositeEx(Composite parent,
+				DataBindManager bindManager,
+				IPreferenceStore preferences) {
+			super(parent, bindManager, preferences);
+			// layout variable name template
+			{
+				new Label(this, SWT.NONE).setText(Messages.LayoutsPreferencePage_layoutNamePattern);
+				// control
+				Combo templateCombo = new Combo(this, SWT.READ_ONLY);
+				GridDataFactory.create(templateCombo).grabH().fillH();
+				templateCombo.setItems(LayoutNameSupport.TEMPLATES);
+				// bind
+				bindString(templateCombo, IPreferenceConstants.P_LAYOUT_NAME_TEMPLATE);
+			}
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/swingx/JXTaskPaneInfo.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/swingx/JXTaskPaneInfo.java
index 82c5a2723..332107fa4 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/swingx/JXTaskPaneInfo.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/swingx/JXTaskPaneInfo.java
@@ -33,44 +33,44 @@
  * @coverage swingx.model
  */
 public final class JXTaskPaneInfo extends JPanelInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public JXTaskPaneInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public JXTaskPaneInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Creates new {@link ComponentInfo} using {@link ActionInfo}.
-   *
-   * @return the created {@link ComponentInfo}.
-   */
-  public ComponentInfo command_CREATE(ActionInfo action, ComponentInfo nextComponent)
-      throws Exception {
-    // ensure that ActionInfo is already added
-    if (action.getParent() == null) {
-      ActionContainerInfo.add(getRootJava(), action);
-    }
-    // prepare CreationSupport
-    CreationSupport creationSupport;
-    {
-      String source = TemplateUtils.format("add({0})", action);
-      creationSupport = new ImplicitFactoryCreationSupport("add(javax.swing.Action)", source);
-    }
-    // create Component
-    ComponentInfo newComponent =
-        (ComponentInfo) JavaInfoUtils.createJavaInfo(getEditor(), Component.class, creationSupport);
-    JavaInfoUtils.add(newComponent, AssociationObjects.invocationVoid(), this, nextComponent);
-    getBroadcastObject().select(ImmutableList.of(newComponent));
-    return newComponent;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Creates new {@link ComponentInfo} using {@link ActionInfo}.
+	 *
+	 * @return the created {@link ComponentInfo}.
+	 */
+	public ComponentInfo command_CREATE(ActionInfo action, ComponentInfo nextComponent)
+			throws Exception {
+		// ensure that ActionInfo is already added
+		if (action.getParent() == null) {
+			ActionContainerInfo.add(getRootJava(), action);
+		}
+		// prepare CreationSupport
+		CreationSupport creationSupport;
+		{
+			String source = TemplateUtils.format("add({0})", action);
+			creationSupport = new ImplicitFactoryCreationSupport("add(javax.swing.Action)", source);
+		}
+		// create Component
+		ComponentInfo newComponent =
+				(ComponentInfo) JavaInfoUtils.createJavaInfo(getEditor(), Component.class, creationSupport);
+		JavaInfoUtils.add(newComponent, AssociationObjects.invocationVoid(), this, nextComponent);
+		getBroadcastObject().select(ImmutableList.of(newComponent));
+		return newComponent;
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/utils/SwingImageUtils.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/utils/SwingImageUtils.java
index 5d7cdc2de..2f1a0b40e 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/utils/SwingImageUtils.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/utils/SwingImageUtils.java
@@ -63,631 +63,631 @@
  * @coverage swing.utils
  */
 public class SwingImageUtils {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Shot
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link Image} of given {@link Component}.
-   */
-  public static Image createComponentShot(final Component component) throws Exception {
-    return SwingUtils.runObjectLaterAndWait(new RunnableObjectEx<Image>() {
-      public Image runObject() throws Exception {
-        return convertImage_AWT_to_SWT(createComponentShotAWT(component));
-      }
-    });
-  }
-
-  /**
-   * @return the {@link java.awt.Image} of given {@link Component}. Must be called from AWT disp
-   *         thread.
-   */
-  static java.awt.Image createComponentShotAWT(final Component component) throws Exception {
-    Assert.isNotNull(component);
-    // prepare sizes
-    final int componentWidth = component.getWidth();
-    final int componentHeight = component.getHeight();
-    final int imageWidth = Math.max(1, componentWidth);
-    final int imageHeight = Math.max(1, componentHeight);
-    // prepare empty image
-    final BufferedImage componentImage =
-        new BufferedImage(imageWidth, imageHeight, BufferedImage.TYPE_INT_RGB);
-    // If actual size on component is zero, then we are done.
-    if (componentWidth == 0 || componentHeight == 0) {
-      return componentImage;
-    }
-    // some components like JLabel are transparent by default and printing it separately gives
-    // bad results like invalid background color. The workaround is to set opacity property and
-    // restore old value back when all done.
-    ComponentShotConfigurator shotConfigurator = new ComponentShotConfigurator(component);
-    try {
-      // Linux only: it seems that printAll() should be invoked in AWT dispatch thread
-      // to prevent deadlocks between main thread and AWT event queue.
-      // See also SwingUtils.invokeLaterAndWait().
-      runInDispatchThread(new Runnable() {
-        public void run() {
-          component.printAll(componentImage.getGraphics());
-        }
-      });
-    } finally {
-      shotConfigurator.dispose();
-    }
-    // convert into SWT image
-    return componentImage;
-  }
-
-  static Image createOSXImage(Window window, Image windowImage) throws Exception {
-    // draw decorations manually, because it becomes slow if using SWT shell to capture decorations.
-    int width = Math.max(1, window.getWidth());
-    int height = Math.max(1, window.getHeight());
-    Image fullImage = new Image(null, width, height);
-    try {
-      GC gc = new GC(fullImage);
-      //
-      Insets windowInsets = getWindowInsets(window);
-      int offsetY = windowInsets.top;
-      int offsetX = windowInsets.left;
-      // draw caption background
-      {
-        Image image = Activator.getImage("decorations/osx/background.png");
-        int imageWidth = image.getBounds().width;
-        int x = 0;
-        while (x < width) {
-          gc.drawImage(image, x, 0);
-          x += imageWidth;
-        }
-      }
-      // draw left corner
-      {
-        Image image = Activator.getImage("decorations/osx/background-left.png");
-        gc.drawImage(image, 0, 0);
-      }
-      // draw right corner
-      {
-        Image image = Activator.getImage("decorations/osx/background-right.png");
-        gc.drawImage(image, width - image.getBounds().width, 0);
-      }
-      // draw close button
-      {
-        Image image = Activator.getImage("decorations/osx/button-close-icon.png");
-        gc.drawImage(image, 8, 3);
-      }
-      // draw minimize button
-      {
-        Image image = Activator.getImage("decorations/osx/button-minimize-icon.png");
-        gc.drawImage(image, 29, 3);
-      }
-      // draw contents button
-      {
-        Image image = Activator.getImage("decorations/osx/button-contents-icon.png");
-        gc.drawImage(image, 50, 3);
-      }
-      // draw title
-      {
-        String windowTitle = getWindowTitle(window);
-        if (!StringUtils.isEmpty(windowTitle)) {
-          gc.setClipping(70, 0, width - 80, offsetY);
-          gc.setForeground(IColorConstants.titleForeground);
-          org.eclipse.swt.graphics.Point titleExtent = gc.stringExtent(windowTitle);
-          gc.drawString(
-              windowTitle,
-              width / 2 - titleExtent.x / 2,
-              offsetY / 2 - titleExtent.y / 2,
-              true);
-          gc.setClipping((org.eclipse.swt.graphics.Rectangle) null);
-        }
-      }
-      // draw SWING contents
-      try {
-        gc.drawImage(
-            windowImage,
-            offsetX,
-            offsetY,
-            width - offsetX * 2,
-            height - offsetY - offsetX,
-            offsetX,
-            offsetY,
-            width - offsetX * 2,
-            height - offsetY - offsetX);
-      } finally {
-        gc.dispose();
-      }
-    } finally {
-      windowImage.dispose();
-    }
-    return fullImage;
-  }
-
-  private static Insets getWindowInsets(final Window window) throws Exception {
-    return SwingUtils.runObjectLaterAndWait(new RunnableObjectEx<Insets>() {
-      public Insets runObject() throws Exception {
-        return window.getInsets();
-      }
-    });
-  }
-
-  private static String getWindowTitle(final Window window) {
-    try {
-      return SwingUtils.runObjectLaterAndWait(new RunnableObjectEx<String>() {
-        public String runObject() throws Exception {
-          String title = (String) ReflectionUtils.invokeMethod(window, "getTitle()");
-          return title != null ? title : "";
-        }
-      });
-    } catch (Throwable e) {
-      // ignore and return empty string
-      return "";
-    }
-  }
-
-  /**
-   * Traverses through components hierarchy and prepares screen shot for every component passed in
-   * <code>componentImages</code> map except for branch root if <code>isRoot</code> is
-   * <code>true</code>.
-   *
-   * @param component
-   *          the branch hierarchy root component.
-   * @param componentImages
-   *          the {@link Map} of components which screen shots should be made for. This map would be
-   *          filled by prepared {@link java.awt.Image} instances.
-   * @param rootComponent
-   *          this branch hierarchy root component.
-   */
-  static void makeShotsHierarchy(Component component,
-      Map<Component, java.awt.Image> componentImages,
-      Component rootComponent) throws Exception {
-    if (componentImages.containsKey(component) && component != rootComponent) {
-      BufferedImage thisComponentImage = (BufferedImage) createComponentShotAWT(component);
-      // BUG in OS X (Java 1.6.0_24-b07-334-10M3326): Component.printAll() returns no image
-      // for AWT components and these components are not drawn on the JComponent container
-      // using the same printAll() method.
-      // The workaround is to hack into a native peer, get the native image and then paint it.
-      if (EnvironmentUtils.IS_MAC && !(component instanceof JComponent)) {
-        int width = Math.max(1, component.getWidth());
-        int height = Math.max(1, component.getHeight());
-        Image nativeImage = OSSupport.get().makeShotAwt(component, width, height);
-        if (nativeImage != null) {
-          BufferedImage rootImage = (BufferedImage) componentImages.get(rootComponent);
-          Point rootLocation = rootComponent.getLocationOnScreen();
-          Point componentLocation = component.getLocationOnScreen();
-          thisComponentImage = ImageUtils.convertToAWT(nativeImage.getImageData());
-          rootImage.getGraphics().drawImage(
-              thisComponentImage,
-              componentLocation.x - rootLocation.x,
-              componentLocation.y - rootLocation.y,
-              null);
-        }
-      }
-      componentImages.put(component, thisComponentImage);
-    }
-    if (component instanceof Container) {
-      Container container = (Container) component;
-      for (Component childComponent : container.getComponents()) {
-        makeShotsHierarchy(childComponent, componentImages, rootComponent);
-      }
-    }
-  }
-
-  /**
-   * Keep weak references to Window for save/restore it's focusable state.
-   */
-  private static Map<Window, Boolean> m_fosucableStates = new WeakHashMap<Window, Boolean>();
-
-  /**
-   * Prepares {@link Component} for printing.
-   *
-   * mitin_aa: Linux: for Metacity window manager (as recommended to use with the Designer) to
-   * prevent preview window flickering a better place for preview window is right-bottom screen
-   * direction.
-   *
-   * TODO: add a preference (Linux only) allowing the user to explicitly set preview window location
-   */
-  public static void prepareForPrinting(Component component) throws Exception {
-    component.setLocation(10000, 10000);
-    // don't grab focus during printing
-    if (component instanceof Window) {
-      Window window = (Window) component;
-      m_fosucableStates.put(window, window.getFocusableWindowState());
-      window.setFocusableWindowState(false);
-    }
-    // make visible
-    setVisible(component, true);
-    {
-      // workaround to prevent window from flashing if the Window Manager
-      // doesn't allow the window to appear off-screen.
-      if (component instanceof Window) {
-        Window window = (Window) component;
-        window.toBack();
-        // do the location change once again, because sometimes setLocation()
-        // for invisible windows could be ignored.
-        component.setLocation(10000, 10000);
-      }
-    }
-  }
-
-  /**
-   * Disposes given Window with trying to restore it's focusable state.
-   */
-  public static void disposeWindow(final Window window) throws Exception {
-    SwingUtils.runLaterAndWait(new RunnableEx() {
-      public void run() throws Exception {
-        // restore focusable state
-        Boolean focusable = m_fosucableStates.get(window);
-        if (focusable == null) {
-          focusable = true;
-        }
-        window.setFocusableWindowState(focusable);
-        window.dispose();
-      }
-    });
-  }
-
-  /**
-   * Set "visible" property of {@link Component} using dispatch thread.
-   *
-   * @param component
-   *          A {@link Component} which property would be set.
-   * @param visible
-   *          A "visible" property value to set.
-   */
-  static void setVisible(final Component component, final boolean visible) throws Exception {
-    // set "visible" property in AWT Queue
-    SwingUtils.runLaterAndWait(new RunnableEx() {
-      public void run() throws Exception {
-        component.setVisible(visible);
-        if (!visible) {
-          if (EnvironmentUtils.IS_LINUX) {
-            component.removeNotify();
-          }
-        }
-      }
-    });
-  }
-
-  /**
-   * Removes modal state if given <code>component</code> is instance of {@link Dialog}.
-   */
-  static void checkForDialog(Component component) {
-    // set modal to "false" to prevent lock after setVisible(true)
-    if (component instanceof Dialog) {
-      ((Dialog) component).setModal(false);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ComponentShotConfigurator
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Helper for configuring {@link Component} before/after shot making.
-   */
-  private static class ComponentShotConfigurator {
-    private final Component m_component;
-    private boolean m_oldOpaque;
-    private Color m_oldBackground;
-
-    /**
-     * Creates {@link ComponentShotConfigurator} instance and configures given {@link Component} for
-     * shot making.
-     */
-    public ComponentShotConfigurator(Component component) {
-      m_component = component;
-      if (m_component instanceof JComponent) {
-        JComponent jcomponent = (JComponent) m_component;
-        m_oldOpaque = jcomponent.isOpaque();
-        m_oldBackground = jcomponent.getBackground();
-        if (!m_oldOpaque) {
-          jcomponent.setOpaque(true);
-          // use background of parent to fill background of our Component
-          // not ideal (may be parent has background image), but good enough in most cases
-          for (Component parent = m_component.getParent(); parent != null; parent =
-              parent.getParent()) {
-            if (!(parent instanceof JComponent) || ((JComponent) parent).isOpaque()) {
-              jcomponent.setBackground(parent.getBackground());
-              break;
-            }
-          }
-        }
-      }
-    }
-
-    /**
-     * Performs "undo" for any changes made in {@link Component} in
-     * {@link ComponentShotConfigurator} constructor.
-     */
-    public void dispose() {
-      if (m_component instanceof JComponent) {
-        JComponent jcomponent = (JComponent) m_component;
-        jcomponent.setOpaque(m_oldOpaque);
-        jcomponent.setBackground(m_oldBackground);
-      }
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Menu
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link MenuVisualData} for given "menu" object, such as {@link JMenuBar},
-   *         {@link JMenu} or {@link JPopupMenu}. Must be called from AWT disp thread.
-   */
-  public static MenuVisualData fetchMenuVisualData(Container menuObject, Container parent)
-      throws Exception {
-    MenuVisualData menuData = new MenuVisualData();
-    if (menuObject instanceof JMenuBar) {
-      fetchMenuVisualData_JMenuBar(menuData, menuObject, parent);
-    } else {
-      fetchMenuVisualData_JMenu_JPopupMenu(menuData, menuObject);
-    }
-    return menuData;
-  }
-
-  private static void fetchMenuVisualData_JMenuBar(MenuVisualData menuData,
-      Container menuObject,
-      Container parent) throws Exception {
-    if (parent != null) {
-      menuData.m_menuBounds =
-          CoordinateUtils.get(SwingUtilities.convertRectangle(
-              menuObject,
-              menuObject.getBounds(),
-              parent));
-    } else {
-      // image
-      {
-        JFrame frame = new JFrame();
-        frame.setBounds(menuObject.getBounds());
-        frame.setJMenuBar((JMenuBar) menuObject);
-        frame.pack();
-        prepareForPrinting(frame);
-        try {
-          menuData.m_menuImage = createComponentShot(menuObject);
-        } finally {
-          setVisible(frame, false);
-          frame.dispose();
-        }
-      }
-      // bounds
-      menuData.m_menuBounds = CoordinateUtils.get(menuObject.getBounds());
-    }
-    // items
-    fetchMenuVisualData_items(menuData, menuObject);
-  }
-
-  private static void fetchMenuVisualData_JMenu_JPopupMenu(MenuVisualData menuData,
-      Container menuObject) throws Exception {
-    JPopupMenu popupMenu =
-        menuObject instanceof JPopupMenu
-            ? (JPopupMenu) menuObject
-            : ((JMenu) menuObject).getPopupMenu();
-    // image
-    {
-      prepareForPrinting(popupMenu);
-      // OSX Java since jdk 1.6.0_20 requires menu invoker to be visible.
-      // traverse parents until null or already visible and make sure that all are visible.
-      // CHECK: it could flash on Windows.
-      Point parentLocation = null;
-      Component parent = popupMenu.getInvoker();
-      while (parent != null && !parent.isShowing()) {
-        Container parent2 = parent.getParent();
-        if (parent2 != null) {
-          parent = parent2;
-        } else {
-          break;
-        }
-      }
-      if (parent != null) {
-        parentLocation = parent.getLocation();
-        prepareForPrinting(parent);
-      }
-      // fetch image
-      try {
-        Container popupMenuParent = popupMenu.getParent();
-        if (popupMenuParent != null) {
-          popupMenuParent.doLayout();
-        }
-        popupMenu.doLayout();
-        menuData.m_menuImage = createComponentShot(popupMenu);
-      } finally {
-        setVisible(popupMenu, false);
-        if (parent != null) {
-          parent.setLocation(parentLocation);
-          if (parent instanceof JPopupMenu) {
-            setVisible(parent, false);
-          }
-        }
-      }
-    }
-    // bounds
-    {
-      org.eclipse.swt.graphics.Rectangle imageBounds = menuData.m_menuImage.getBounds();
-      menuData.m_menuBounds = new Rectangle(0, 0, imageBounds.width, imageBounds.height);
-    }
-    // items
-    fetchMenuVisualData_items(menuData, popupMenu);
-  }
-
-  private static void fetchMenuVisualData_items(MenuVisualData menuData, Container menuObject) {
-    menuData.m_itemBounds = Lists.newArrayList();
-    for (Component menuComponent : menuObject.getComponents()) {
-      menuData.m_itemBounds.add(CoordinateUtils.get(menuComponent.getBounds()));
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AWT -> SWT image conversion
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Converts AWT image into SWT one. Yours, C.O. ;-)
-   */
-  public static Image convertImage_AWT_to_SWT(final java.awt.Image image) throws Exception {
-    return SwingUtils.runObjectLaterAndWait(new RunnableObjectEx<Image>() {
-      public Image runObject() throws Exception {
-        BufferedImage bufferedImage = (BufferedImage) image;
-        int imageWidth = bufferedImage.getWidth();
-        int imageHeight = bufferedImage.getHeight();
-        Image swtImage = new Image(null, imageWidth, imageHeight);
-        final ImageData swtImageData = swtImage.getImageData();
-        try {
-          ImageProducer source = image.getSource();
-          source.startProduction(new AwtToSwtImageConverter(bufferedImage, swtImageData));
-          return new Image(null, swtImageData);
-        } catch (Throwable e) {
-          // fallback to ImageIO.
-          return ImageUtils.convertToSWT(image);
-        } finally {
-          swtImage.dispose();
-        }
-      }
-    });
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Runs given runnable in dispatch thread.
-   */
-  public static void runInDispatchThread(final Runnable runnable) throws Exception {
-    if (EventQueue.isDispatchThread()) {
-      runnable.run();
-    } else {
-      EventQueue.invokeAndWait(runnable);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AWT -> SWT converter
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @author mitin_aa
-   */
-  private static final class AwtToSwtImageConverter implements ImageConsumer {
-    private final java.awt.image.BufferedImage m_image;
-    private final ImageData m_swtImageData;
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    private AwtToSwtImageConverter(java.awt.image.BufferedImage image, ImageData swtImageData) {
-      m_image = image;
-      m_swtImageData = swtImageData;
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // ImageConsumer
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public final void imageComplete(int status) {
-      m_image.getSource().removeConsumer(this);
-    }
-
-    public final void setHints(int hintflags) {
-    }
-
-    public final void setDimensions(int width, int height) {
-    }
-
-    public final void setPixels(int x,
-        int y,
-        int w,
-        int h,
-        ColorModel model,
-        byte[] pixels,
-        int off,
-        int scansize) {
-      SWT.error(SWT.ERROR_NOT_IMPLEMENTED);
-    }
-
-    public final void setPixels(int x,
-        int y,
-        int w,
-        int h,
-        ColorModel model,
-        int[] pixels,
-        int off,
-        int scansize) {
-      if (m_swtImageData.depth == 16) {
-        int index = y * m_swtImageData.bytesPerLine;
-        for (int i = 0; i < w; i++) {
-          int rgb = model.getRGB(pixels[i]);
-          int r = rgb >>> 19 & 0x1F;
-          int g = rgb >>> 11 & 0x1F;
-          int b = rgb >>> 3 & 0x1F;
-          rgb = (r << 10) + (g << 5) + b;
-          //
-          m_swtImageData.data[index + 0] = (byte) (rgb & 0x00FF);
-          m_swtImageData.data[index + 1] = (byte) (rgb >> 8);
-          index += 2;
-        }
-        return;
-      }
-      if (m_swtImageData.depth == 24) {
-        int index = y * m_swtImageData.bytesPerLine;
-        // there are different RGB orders in SWT ImageData in Linux and Windows, hack it
-        if (m_swtImageData.palette.blueShift != 0) {
-          // Windows
-          for (int i = 0; i < w; i++) {
-            int pixel = pixels[i];
-            m_swtImageData.data[index + 0] = (byte) (pixel & 0xFF);
-            m_swtImageData.data[index + 1] = (byte) (pixel >> 8 & 0xFF);
-            m_swtImageData.data[index + 2] = (byte) (pixel >> 16 & 0xFF);
-            index += 3;
-          }
-        } else {
-          // Linux
-          for (int i = 0; i < w; i++) {
-            int pixel = pixels[i];
-            m_swtImageData.data[index + 0] = (byte) (pixel >> 16 & 0xFF);
-            m_swtImageData.data[index + 1] = (byte) (pixel >> 8 & 0xFF);
-            m_swtImageData.data[index + 2] = (byte) (pixel & 0xFF);
-            index += 3;
-          }
-        }
-        return;
-      }
-      if (m_swtImageData.depth == 32) {
-        int index = y * w * 4;
-        if (m_swtImageData.palette.blueShift != 0) {
-          for (int i = 0; i < w; i++) {
-            int pixel = pixels[i];
-            m_swtImageData.data[index + 0] = (byte) (pixel & 0xFF);
-            m_swtImageData.data[index + 1] = (byte) (pixel >> 8 & 0xFF);
-            m_swtImageData.data[index + 2] = (byte) (pixel >> 16 & 0xFF);
-            m_swtImageData.data[index + 3] = (byte) (pixel >> 24 & 0xFF);
-            index += 4;
-          }
-        } else {
-          for (int i = 0; i < w; i++) {
-            int pixel = pixels[i];
-            m_swtImageData.data[index + 0] = (byte) (pixel >> 24 & 0xFF);
-            m_swtImageData.data[index + 1] = (byte) (pixel >> 16 & 0xFF);
-            m_swtImageData.data[index + 2] = (byte) (pixel >> 8 & 0xFF);
-            m_swtImageData.data[index + 3] = (byte) (pixel & 0xFF);
-            index += 4;
-          }
-        }
-        return;
-      }
-      SWT.error(SWT.ERROR_UNSUPPORTED_DEPTH);
-    }
-
-    public final void setColorModel(ColorModel model) {
-    }
-
-    public final void setProperties(Hashtable<?, ?> props) {
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Shot
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link Image} of given {@link Component}.
+	 */
+	public static Image createComponentShot(final Component component) throws Exception {
+		return SwingUtils.runObjectLaterAndWait(new RunnableObjectEx<Image>() {
+			public Image runObject() throws Exception {
+				return convertImage_AWT_to_SWT(createComponentShotAWT(component));
+			}
+		});
+	}
+
+	/**
+	 * @return the {@link java.awt.Image} of given {@link Component}. Must be called from AWT disp
+	 *         thread.
+	 */
+	static java.awt.Image createComponentShotAWT(final Component component) throws Exception {
+		Assert.isNotNull(component);
+		// prepare sizes
+		final int componentWidth = component.getWidth();
+		final int componentHeight = component.getHeight();
+		final int imageWidth = Math.max(1, componentWidth);
+		final int imageHeight = Math.max(1, componentHeight);
+		// prepare empty image
+		final BufferedImage componentImage =
+				new BufferedImage(imageWidth, imageHeight, BufferedImage.TYPE_INT_RGB);
+		// If actual size on component is zero, then we are done.
+		if (componentWidth == 0 || componentHeight == 0) {
+			return componentImage;
+		}
+		// some components like JLabel are transparent by default and printing it separately gives
+		// bad results like invalid background color. The workaround is to set opacity property and
+		// restore old value back when all done.
+		ComponentShotConfigurator shotConfigurator = new ComponentShotConfigurator(component);
+		try {
+			// Linux only: it seems that printAll() should be invoked in AWT dispatch thread
+			// to prevent deadlocks between main thread and AWT event queue.
+			// See also SwingUtils.invokeLaterAndWait().
+			runInDispatchThread(new Runnable() {
+				public void run() {
+					component.printAll(componentImage.getGraphics());
+				}
+			});
+		} finally {
+			shotConfigurator.dispose();
+		}
+		// convert into SWT image
+		return componentImage;
+	}
+
+	static Image createOSXImage(Window window, Image windowImage) throws Exception {
+		// draw decorations manually, because it becomes slow if using SWT shell to capture decorations.
+		int width = Math.max(1, window.getWidth());
+		int height = Math.max(1, window.getHeight());
+		Image fullImage = new Image(null, width, height);
+		try {
+			GC gc = new GC(fullImage);
+			//
+			Insets windowInsets = getWindowInsets(window);
+			int offsetY = windowInsets.top;
+			int offsetX = windowInsets.left;
+			// draw caption background
+			{
+				Image image = Activator.getImage("decorations/osx/background.png");
+				int imageWidth = image.getBounds().width;
+				int x = 0;
+				while (x < width) {
+					gc.drawImage(image, x, 0);
+					x += imageWidth;
+				}
+			}
+			// draw left corner
+			{
+				Image image = Activator.getImage("decorations/osx/background-left.png");
+				gc.drawImage(image, 0, 0);
+			}
+			// draw right corner
+			{
+				Image image = Activator.getImage("decorations/osx/background-right.png");
+				gc.drawImage(image, width - image.getBounds().width, 0);
+			}
+			// draw close button
+			{
+				Image image = Activator.getImage("decorations/osx/button-close-icon.png");
+				gc.drawImage(image, 8, 3);
+			}
+			// draw minimize button
+			{
+				Image image = Activator.getImage("decorations/osx/button-minimize-icon.png");
+				gc.drawImage(image, 29, 3);
+			}
+			// draw contents button
+			{
+				Image image = Activator.getImage("decorations/osx/button-contents-icon.png");
+				gc.drawImage(image, 50, 3);
+			}
+			// draw title
+			{
+				String windowTitle = getWindowTitle(window);
+				if (!StringUtils.isEmpty(windowTitle)) {
+					gc.setClipping(70, 0, width - 80, offsetY);
+					gc.setForeground(IColorConstants.titleForeground);
+					org.eclipse.swt.graphics.Point titleExtent = gc.stringExtent(windowTitle);
+					gc.drawString(
+							windowTitle,
+							width / 2 - titleExtent.x / 2,
+							offsetY / 2 - titleExtent.y / 2,
+							true);
+					gc.setClipping((org.eclipse.swt.graphics.Rectangle) null);
+				}
+			}
+			// draw SWING contents
+			try {
+				gc.drawImage(
+						windowImage,
+						offsetX,
+						offsetY,
+						width - offsetX * 2,
+						height - offsetY - offsetX,
+						offsetX,
+						offsetY,
+						width - offsetX * 2,
+						height - offsetY - offsetX);
+			} finally {
+				gc.dispose();
+			}
+		} finally {
+			windowImage.dispose();
+		}
+		return fullImage;
+	}
+
+	private static Insets getWindowInsets(final Window window) throws Exception {
+		return SwingUtils.runObjectLaterAndWait(new RunnableObjectEx<Insets>() {
+			public Insets runObject() throws Exception {
+				return window.getInsets();
+			}
+		});
+	}
+
+	private static String getWindowTitle(final Window window) {
+		try {
+			return SwingUtils.runObjectLaterAndWait(new RunnableObjectEx<String>() {
+				public String runObject() throws Exception {
+					String title = (String) ReflectionUtils.invokeMethod(window, "getTitle()");
+					return title != null ? title : "";
+				}
+			});
+		} catch (Throwable e) {
+			// ignore and return empty string
+			return "";
+		}
+	}
+
+	/**
+	 * Traverses through components hierarchy and prepares screen shot for every component passed in
+	 * <code>componentImages</code> map except for branch root if <code>isRoot</code> is
+	 * <code>true</code>.
+	 *
+	 * @param component
+	 *          the branch hierarchy root component.
+	 * @param componentImages
+	 *          the {@link Map} of components which screen shots should be made for. This map would be
+	 *          filled by prepared {@link java.awt.Image} instances.
+	 * @param rootComponent
+	 *          this branch hierarchy root component.
+	 */
+	static void makeShotsHierarchy(Component component,
+			Map<Component, java.awt.Image> componentImages,
+			Component rootComponent) throws Exception {
+		if (componentImages.containsKey(component) && component != rootComponent) {
+			BufferedImage thisComponentImage = (BufferedImage) createComponentShotAWT(component);
+			// BUG in OS X (Java 1.6.0_24-b07-334-10M3326): Component.printAll() returns no image
+			// for AWT components and these components are not drawn on the JComponent container
+			// using the same printAll() method.
+			// The workaround is to hack into a native peer, get the native image and then paint it.
+			if (EnvironmentUtils.IS_MAC && !(component instanceof JComponent)) {
+				int width = Math.max(1, component.getWidth());
+				int height = Math.max(1, component.getHeight());
+				Image nativeImage = OSSupport.get().makeShotAwt(component, width, height);
+				if (nativeImage != null) {
+					BufferedImage rootImage = (BufferedImage) componentImages.get(rootComponent);
+					Point rootLocation = rootComponent.getLocationOnScreen();
+					Point componentLocation = component.getLocationOnScreen();
+					thisComponentImage = ImageUtils.convertToAWT(nativeImage.getImageData());
+					rootImage.getGraphics().drawImage(
+							thisComponentImage,
+							componentLocation.x - rootLocation.x,
+							componentLocation.y - rootLocation.y,
+							null);
+				}
+			}
+			componentImages.put(component, thisComponentImage);
+		}
+		if (component instanceof Container) {
+			Container container = (Container) component;
+			for (Component childComponent : container.getComponents()) {
+				makeShotsHierarchy(childComponent, componentImages, rootComponent);
+			}
+		}
+	}
+
+	/**
+	 * Keep weak references to Window for save/restore it's focusable state.
+	 */
+	private static Map<Window, Boolean> m_fosucableStates = new WeakHashMap<Window, Boolean>();
+
+	/**
+	 * Prepares {@link Component} for printing.
+	 *
+	 * mitin_aa: Linux: for Metacity window manager (as recommended to use with the Designer) to
+	 * prevent preview window flickering a better place for preview window is right-bottom screen
+	 * direction.
+	 *
+	 * TODO: add a preference (Linux only) allowing the user to explicitly set preview window location
+	 */
+	public static void prepareForPrinting(Component component) throws Exception {
+		component.setLocation(10000, 10000);
+		// don't grab focus during printing
+		if (component instanceof Window) {
+			Window window = (Window) component;
+			m_fosucableStates.put(window, window.getFocusableWindowState());
+			window.setFocusableWindowState(false);
+		}
+		// make visible
+		setVisible(component, true);
+		{
+			// workaround to prevent window from flashing if the Window Manager
+			// doesn't allow the window to appear off-screen.
+			if (component instanceof Window) {
+				Window window = (Window) component;
+				window.toBack();
+				// do the location change once again, because sometimes setLocation()
+				// for invisible windows could be ignored.
+				component.setLocation(10000, 10000);
+			}
+		}
+	}
+
+	/**
+	 * Disposes given Window with trying to restore it's focusable state.
+	 */
+	public static void disposeWindow(final Window window) throws Exception {
+		SwingUtils.runLaterAndWait(new RunnableEx() {
+			public void run() throws Exception {
+				// restore focusable state
+				Boolean focusable = m_fosucableStates.get(window);
+				if (focusable == null) {
+					focusable = true;
+				}
+				window.setFocusableWindowState(focusable);
+				window.dispose();
+			}
+		});
+	}
+
+	/**
+	 * Set "visible" property of {@link Component} using dispatch thread.
+	 *
+	 * @param component
+	 *          A {@link Component} which property would be set.
+	 * @param visible
+	 *          A "visible" property value to set.
+	 */
+	static void setVisible(final Component component, final boolean visible) throws Exception {
+		// set "visible" property in AWT Queue
+		SwingUtils.runLaterAndWait(new RunnableEx() {
+			public void run() throws Exception {
+				component.setVisible(visible);
+				if (!visible) {
+					if (EnvironmentUtils.IS_LINUX) {
+						component.removeNotify();
+					}
+				}
+			}
+		});
+	}
+
+	/**
+	 * Removes modal state if given <code>component</code> is instance of {@link Dialog}.
+	 */
+	static void checkForDialog(Component component) {
+		// set modal to "false" to prevent lock after setVisible(true)
+		if (component instanceof Dialog) {
+			((Dialog) component).setModal(false);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ComponentShotConfigurator
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Helper for configuring {@link Component} before/after shot making.
+	 */
+	private static class ComponentShotConfigurator {
+		private final Component m_component;
+		private boolean m_oldOpaque;
+		private Color m_oldBackground;
+
+		/**
+		 * Creates {@link ComponentShotConfigurator} instance and configures given {@link Component} for
+		 * shot making.
+		 */
+		public ComponentShotConfigurator(Component component) {
+			m_component = component;
+			if (m_component instanceof JComponent) {
+				JComponent jcomponent = (JComponent) m_component;
+				m_oldOpaque = jcomponent.isOpaque();
+				m_oldBackground = jcomponent.getBackground();
+				if (!m_oldOpaque) {
+					jcomponent.setOpaque(true);
+					// use background of parent to fill background of our Component
+					// not ideal (may be parent has background image), but good enough in most cases
+					for (Component parent = m_component.getParent(); parent != null; parent =
+							parent.getParent()) {
+						if (!(parent instanceof JComponent) || ((JComponent) parent).isOpaque()) {
+							jcomponent.setBackground(parent.getBackground());
+							break;
+						}
+					}
+				}
+			}
+		}
+
+		/**
+		 * Performs "undo" for any changes made in {@link Component} in
+		 * {@link ComponentShotConfigurator} constructor.
+		 */
+		public void dispose() {
+			if (m_component instanceof JComponent) {
+				JComponent jcomponent = (JComponent) m_component;
+				jcomponent.setOpaque(m_oldOpaque);
+				jcomponent.setBackground(m_oldBackground);
+			}
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Menu
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link MenuVisualData} for given "menu" object, such as {@link JMenuBar},
+	 *         {@link JMenu} or {@link JPopupMenu}. Must be called from AWT disp thread.
+	 */
+	public static MenuVisualData fetchMenuVisualData(Container menuObject, Container parent)
+			throws Exception {
+		MenuVisualData menuData = new MenuVisualData();
+		if (menuObject instanceof JMenuBar) {
+			fetchMenuVisualData_JMenuBar(menuData, menuObject, parent);
+		} else {
+			fetchMenuVisualData_JMenu_JPopupMenu(menuData, menuObject);
+		}
+		return menuData;
+	}
+
+	private static void fetchMenuVisualData_JMenuBar(MenuVisualData menuData,
+			Container menuObject,
+			Container parent) throws Exception {
+		if (parent != null) {
+			menuData.m_menuBounds =
+					CoordinateUtils.get(SwingUtilities.convertRectangle(
+							menuObject,
+							menuObject.getBounds(),
+							parent));
+		} else {
+			// image
+			{
+				JFrame frame = new JFrame();
+				frame.setBounds(menuObject.getBounds());
+				frame.setJMenuBar((JMenuBar) menuObject);
+				frame.pack();
+				prepareForPrinting(frame);
+				try {
+					menuData.m_menuImage = createComponentShot(menuObject);
+				} finally {
+					setVisible(frame, false);
+					frame.dispose();
+				}
+			}
+			// bounds
+			menuData.m_menuBounds = CoordinateUtils.get(menuObject.getBounds());
+		}
+		// items
+		fetchMenuVisualData_items(menuData, menuObject);
+	}
+
+	private static void fetchMenuVisualData_JMenu_JPopupMenu(MenuVisualData menuData,
+			Container menuObject) throws Exception {
+		JPopupMenu popupMenu =
+				menuObject instanceof JPopupMenu
+				? (JPopupMenu) menuObject
+						: ((JMenu) menuObject).getPopupMenu();
+		// image
+		{
+			prepareForPrinting(popupMenu);
+			// OSX Java since jdk 1.6.0_20 requires menu invoker to be visible.
+			// traverse parents until null or already visible and make sure that all are visible.
+			// CHECK: it could flash on Windows.
+			Point parentLocation = null;
+			Component parent = popupMenu.getInvoker();
+			while (parent != null && !parent.isShowing()) {
+				Container parent2 = parent.getParent();
+				if (parent2 != null) {
+					parent = parent2;
+				} else {
+					break;
+				}
+			}
+			if (parent != null) {
+				parentLocation = parent.getLocation();
+				prepareForPrinting(parent);
+			}
+			// fetch image
+			try {
+				Container popupMenuParent = popupMenu.getParent();
+				if (popupMenuParent != null) {
+					popupMenuParent.doLayout();
+				}
+				popupMenu.doLayout();
+				menuData.m_menuImage = createComponentShot(popupMenu);
+			} finally {
+				setVisible(popupMenu, false);
+				if (parent != null) {
+					parent.setLocation(parentLocation);
+					if (parent instanceof JPopupMenu) {
+						setVisible(parent, false);
+					}
+				}
+			}
+		}
+		// bounds
+		{
+			org.eclipse.swt.graphics.Rectangle imageBounds = menuData.m_menuImage.getBounds();
+			menuData.m_menuBounds = new Rectangle(0, 0, imageBounds.width, imageBounds.height);
+		}
+		// items
+		fetchMenuVisualData_items(menuData, popupMenu);
+	}
+
+	private static void fetchMenuVisualData_items(MenuVisualData menuData, Container menuObject) {
+		menuData.m_itemBounds = Lists.newArrayList();
+		for (Component menuComponent : menuObject.getComponents()) {
+			menuData.m_itemBounds.add(CoordinateUtils.get(menuComponent.getBounds()));
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AWT -> SWT image conversion
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Converts AWT image into SWT one. Yours, C.O. ;-)
+	 */
+	public static Image convertImage_AWT_to_SWT(final java.awt.Image image) throws Exception {
+		return SwingUtils.runObjectLaterAndWait(new RunnableObjectEx<Image>() {
+			public Image runObject() throws Exception {
+				BufferedImage bufferedImage = (BufferedImage) image;
+				int imageWidth = bufferedImage.getWidth();
+				int imageHeight = bufferedImage.getHeight();
+				Image swtImage = new Image(null, imageWidth, imageHeight);
+				final ImageData swtImageData = swtImage.getImageData();
+				try {
+					ImageProducer source = image.getSource();
+					source.startProduction(new AwtToSwtImageConverter(bufferedImage, swtImageData));
+					return new Image(null, swtImageData);
+				} catch (Throwable e) {
+					// fallback to ImageIO.
+					return ImageUtils.convertToSWT(image);
+				} finally {
+					swtImage.dispose();
+				}
+			}
+		});
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Runs given runnable in dispatch thread.
+	 */
+	public static void runInDispatchThread(final Runnable runnable) throws Exception {
+		if (EventQueue.isDispatchThread()) {
+			runnable.run();
+		} else {
+			EventQueue.invokeAndWait(runnable);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AWT -> SWT converter
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @author mitin_aa
+	 */
+	private static final class AwtToSwtImageConverter implements ImageConsumer {
+		private final java.awt.image.BufferedImage m_image;
+		private final ImageData m_swtImageData;
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		private AwtToSwtImageConverter(java.awt.image.BufferedImage image, ImageData swtImageData) {
+			m_image = image;
+			m_swtImageData = swtImageData;
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// ImageConsumer
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public final void imageComplete(int status) {
+			m_image.getSource().removeConsumer(this);
+		}
+
+		public final void setHints(int hintflags) {
+		}
+
+		public final void setDimensions(int width, int height) {
+		}
+
+		public final void setPixels(int x,
+				int y,
+				int w,
+				int h,
+				ColorModel model,
+				byte[] pixels,
+				int off,
+				int scansize) {
+			SWT.error(SWT.ERROR_NOT_IMPLEMENTED);
+		}
+
+		public final void setPixels(int x,
+				int y,
+				int w,
+				int h,
+				ColorModel model,
+				int[] pixels,
+				int off,
+				int scansize) {
+			if (m_swtImageData.depth == 16) {
+				int index = y * m_swtImageData.bytesPerLine;
+				for (int i = 0; i < w; i++) {
+					int rgb = model.getRGB(pixels[i]);
+					int r = rgb >>> 19 & 0x1F;
+				int g = rgb >>> 11 & 0x1F;
+				int b = rgb >>> 3 & 0x1F;
+				rgb = (r << 10) + (g << 5) + b;
+				//
+				m_swtImageData.data[index + 0] = (byte) (rgb & 0x00FF);
+				m_swtImageData.data[index + 1] = (byte) (rgb >> 8);
+				index += 2;
+				}
+				return;
+			}
+			if (m_swtImageData.depth == 24) {
+				int index = y * m_swtImageData.bytesPerLine;
+				// there are different RGB orders in SWT ImageData in Linux and Windows, hack it
+				if (m_swtImageData.palette.blueShift != 0) {
+					// Windows
+					for (int i = 0; i < w; i++) {
+						int pixel = pixels[i];
+						m_swtImageData.data[index + 0] = (byte) (pixel & 0xFF);
+						m_swtImageData.data[index + 1] = (byte) (pixel >> 8 & 0xFF);
+						m_swtImageData.data[index + 2] = (byte) (pixel >> 16 & 0xFF);
+						index += 3;
+					}
+				} else {
+					// Linux
+					for (int i = 0; i < w; i++) {
+						int pixel = pixels[i];
+						m_swtImageData.data[index + 0] = (byte) (pixel >> 16 & 0xFF);
+						m_swtImageData.data[index + 1] = (byte) (pixel >> 8 & 0xFF);
+						m_swtImageData.data[index + 2] = (byte) (pixel & 0xFF);
+						index += 3;
+					}
+				}
+				return;
+			}
+			if (m_swtImageData.depth == 32) {
+				int index = y * w * 4;
+				if (m_swtImageData.palette.blueShift != 0) {
+					for (int i = 0; i < w; i++) {
+						int pixel = pixels[i];
+						m_swtImageData.data[index + 0] = (byte) (pixel & 0xFF);
+						m_swtImageData.data[index + 1] = (byte) (pixel >> 8 & 0xFF);
+						m_swtImageData.data[index + 2] = (byte) (pixel >> 16 & 0xFF);
+						m_swtImageData.data[index + 3] = (byte) (pixel >> 24 & 0xFF);
+						index += 4;
+					}
+				} else {
+					for (int i = 0; i < w; i++) {
+						int pixel = pixels[i];
+						m_swtImageData.data[index + 0] = (byte) (pixel >> 24 & 0xFF);
+						m_swtImageData.data[index + 1] = (byte) (pixel >> 16 & 0xFF);
+						m_swtImageData.data[index + 2] = (byte) (pixel >> 8 & 0xFF);
+						m_swtImageData.data[index + 3] = (byte) (pixel & 0xFF);
+						index += 4;
+					}
+				}
+				return;
+			}
+			SWT.error(SWT.ERROR_UNSUPPORTED_DEPTH);
+		}
+
+		public final void setColorModel(ColorModel model) {
+		}
+
+		public final void setProperties(Hashtable<?, ?> props) {
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/utils/SwingScreenshotMaker.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/utils/SwingScreenshotMaker.java
index 36a4b6460..c1f046fdf 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/utils/SwingScreenshotMaker.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/utils/SwingScreenshotMaker.java
@@ -45,205 +45,205 @@
  * @author mitin_aa
  */
 public final class SwingScreenshotMaker {
-  private final AbstractComponentInfo m_root;
-  private final Map<Component, java.awt.Image> m_componentImages = Maps.newHashMap();
-  private final Component m_component;
-  private Window m_window;
-  private Point m_oldComponentLocation;
+	private final AbstractComponentInfo m_root;
+	private final Map<Component, java.awt.Image> m_componentImages = Maps.newHashMap();
+	private final Component m_component;
+	private Window m_window;
+	private Point m_oldComponentLocation;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SwingScreenshotMaker(AbstractComponentInfo rootModel, Component rootComponent) {
-    m_root = rootModel;
-    SwingUtils.ensureQueueEmpty();
-    // fill images map with key
-    m_componentImages.put(rootComponent, null);
-    rootModel.accept(new ObjectInfoVisitor() {
-      @Override
-      public void endVisit(ObjectInfo objectInfo) throws Exception {
-        if (objectInfo instanceof ComponentInfo) {
-          m_componentImages.put(((ComponentInfo) objectInfo).getComponent(), null);
-        }
-      }
-    });
-    // prepare component
-    m_component = rootComponent;
-    if (m_component instanceof Window) {
-      m_window = (Window) m_component;
-    } else {
-      JFrame frame = new JFrame();
-      m_window = frame;
-      // configure panel to have same size as given component
-      JPanel panel;
-      {
-        panel = new JPanel(new BorderLayout());
-        panel.setPreferredSize(m_component.getSize());
-        frame.getContentPane().add(panel, BorderLayout.CENTER);
-      }
-      // add component
-      if (m_component instanceof JInternalFrame) {
-        JDesktopPane desktop = new JDesktopPane();
-        desktop.setLayout(new BorderLayout());
-        panel.add(desktop);
-        desktop.add(m_component);
-        m_component.setVisible(true);
-      } else {
-        panel.add(m_component);
-      }
-      frame.pack();
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SwingScreenshotMaker(AbstractComponentInfo rootModel, Component rootComponent) {
+		m_root = rootModel;
+		SwingUtils.ensureQueueEmpty();
+		// fill images map with key
+		m_componentImages.put(rootComponent, null);
+		rootModel.accept(new ObjectInfoVisitor() {
+			@Override
+			public void endVisit(ObjectInfo objectInfo) throws Exception {
+				if (objectInfo instanceof ComponentInfo) {
+					m_componentImages.put(((ComponentInfo) objectInfo).getComponent(), null);
+				}
+			}
+		});
+		// prepare component
+		m_component = rootComponent;
+		if (m_component instanceof Window) {
+			m_window = (Window) m_component;
+		} else {
+			JFrame frame = new JFrame();
+			m_window = frame;
+			// configure panel to have same size as given component
+			JPanel panel;
+			{
+				panel = new JPanel(new BorderLayout());
+				panel.setPreferredSize(m_component.getSize());
+				frame.getContentPane().add(panel, BorderLayout.CENTER);
+			}
+			// add component
+			if (m_component instanceof JInternalFrame) {
+				JDesktopPane desktop = new JDesktopPane();
+				desktop.setLayout(new BorderLayout());
+				panel.add(desktop);
+				desktop.add(m_component);
+				m_component.setVisible(true);
+			} else {
+				panel.add(m_component);
+			}
+			frame.pack();
+		}
+	}
 
-  /**
-   * Traverses through components hierarchy and prepares screen shot for every component needed.
-   *
-   * Note: it doesn't make top component not visible, use {@link #dispose()} for that.
-   *
-   * Important note: must be called from AWT dispatch thread.
-   */
-  public void makeShots() throws Exception {
-    SwingImageUtils.checkForDialog(m_component);
-    final int componentWidth = Math.max(1, m_component.getWidth());
-    final int componentHeight = Math.max(1, m_component.getHeight());
-    m_oldComponentLocation = m_component.getLocation();
-    SwingImageUtils.prepareForPrinting(m_window);
-    fixJLabelWithHTML(m_component);
-    // prepare empty image
-    BufferedImage image;
-    // prepare window image
-    final BufferedImage windowImage;
-    // print component and its children
-    {
-      int windowWidth = Math.max(1, m_window.getWidth());
-      int windowHeight = Math.max(1, m_window.getHeight());
-      windowImage = new BufferedImage(windowWidth, windowHeight, BufferedImage.TYPE_INT_RGB);
-      m_window.printAll(windowImage.getGraphics());
-    }
-    // prepare component image
-    if (m_component == m_window) {
-      image = windowImage;
-    } else {
-      // prepare location of component image on window image
-      Point componentLocation;
-      {
-        Point p_component;
-        if (m_component instanceof Applet) {
-          // Applet reports "screen location" as (0,0), but we want location on "window"
-          p_component = SwingUtils.getScreenLocation(m_component.getParent());
-        } else {
-          p_component = SwingUtils.getScreenLocation(m_component);
-        }
-        // continue
-        Point p_window = SwingUtils.getScreenLocation(m_window);
-        componentLocation = new Point(p_component.x - p_window.x, p_component.y - p_window.y);
-      }
-      // copy part of window image
-      BufferedImage componentImage =
-          new BufferedImage(componentWidth, componentHeight, BufferedImage.TYPE_INT_RGB);
-      componentImage.getGraphics().drawImage(
-          windowImage,
-          0,
-          0,
-          componentWidth,
-          componentHeight,
-          componentLocation.x,
-          componentLocation.y,
-          componentLocation.x + componentWidth,
-          componentLocation.y + componentHeight,
-          m_window);
-      image = componentImage;
-    }
-    // store image for top-level first
-    m_componentImages.put(m_component, image);
-    // do traverse
-    SwingImageUtils.makeShotsHierarchy(m_component, m_componentImages, m_component);
-    // convert images
-    final Map<Component, Image> convertedImages = Maps.newHashMap();
-    for (Component keyComponent : Collections.unmodifiableMap(m_componentImages).keySet()) {
-      java.awt.Image image2 = m_componentImages.get(keyComponent);
-      if (image2 != null) {
-        convertedImages.put(keyComponent, SwingImageUtils.convertImage_AWT_to_SWT(image2));
-      }
-    }
-    // draw decorations on OS X
-    if (EnvironmentUtils.IS_MAC && m_window == m_component) {
-      Image oldImage = convertedImages.get(m_component);
-      convertedImages.put(m_component, SwingImageUtils.createOSXImage(m_window, oldImage));
-      if (oldImage != null) {
-        oldImage.dispose();
-      }
-    }
-    // set images
-    m_root.accept(new ObjectInfoVisitor() {
-      @Override
-      public void endVisit(ObjectInfo objectInfo) throws Exception {
-        if (objectInfo instanceof AbstractComponentInfo) {
-          AbstractComponentInfo componentInfo = (AbstractComponentInfo) objectInfo;
-          Object componentObject = componentInfo.getComponentObject();
-          Image image = convertedImages.get(componentObject);
-          componentInfo.setImage(image);
-        }
-      }
-    });
-  }
+	/**
+	 * Traverses through components hierarchy and prepares screen shot for every component needed.
+	 *
+	 * Note: it doesn't make top component not visible, use {@link #dispose()} for that.
+	 *
+	 * Important note: must be called from AWT dispatch thread.
+	 */
+	public void makeShots() throws Exception {
+		SwingImageUtils.checkForDialog(m_component);
+		final int componentWidth = Math.max(1, m_component.getWidth());
+		final int componentHeight = Math.max(1, m_component.getHeight());
+		m_oldComponentLocation = m_component.getLocation();
+		SwingImageUtils.prepareForPrinting(m_window);
+		fixJLabelWithHTML(m_component);
+		// prepare empty image
+		BufferedImage image;
+		// prepare window image
+		final BufferedImage windowImage;
+		// print component and its children
+		{
+			int windowWidth = Math.max(1, m_window.getWidth());
+			int windowHeight = Math.max(1, m_window.getHeight());
+			windowImage = new BufferedImage(windowWidth, windowHeight, BufferedImage.TYPE_INT_RGB);
+			m_window.printAll(windowImage.getGraphics());
+		}
+		// prepare component image
+		if (m_component == m_window) {
+			image = windowImage;
+		} else {
+			// prepare location of component image on window image
+			Point componentLocation;
+			{
+				Point p_component;
+				if (m_component instanceof Applet) {
+					// Applet reports "screen location" as (0,0), but we want location on "window"
+					p_component = SwingUtils.getScreenLocation(m_component.getParent());
+				} else {
+					p_component = SwingUtils.getScreenLocation(m_component);
+				}
+				// continue
+				Point p_window = SwingUtils.getScreenLocation(m_window);
+				componentLocation = new Point(p_component.x - p_window.x, p_component.y - p_window.y);
+			}
+			// copy part of window image
+			BufferedImage componentImage =
+					new BufferedImage(componentWidth, componentHeight, BufferedImage.TYPE_INT_RGB);
+			componentImage.getGraphics().drawImage(
+					windowImage,
+					0,
+					0,
+					componentWidth,
+					componentHeight,
+					componentLocation.x,
+					componentLocation.y,
+					componentLocation.x + componentWidth,
+					componentLocation.y + componentHeight,
+					m_window);
+			image = componentImage;
+		}
+		// store image for top-level first
+		m_componentImages.put(m_component, image);
+		// do traverse
+		SwingImageUtils.makeShotsHierarchy(m_component, m_componentImages, m_component);
+		// convert images
+		final Map<Component, Image> convertedImages = Maps.newHashMap();
+		for (Component keyComponent : Collections.unmodifiableMap(m_componentImages).keySet()) {
+			java.awt.Image image2 = m_componentImages.get(keyComponent);
+			if (image2 != null) {
+				convertedImages.put(keyComponent, SwingImageUtils.convertImage_AWT_to_SWT(image2));
+			}
+		}
+		// draw decorations on OS X
+		if (EnvironmentUtils.IS_MAC && m_window == m_component) {
+			Image oldImage = convertedImages.get(m_component);
+			convertedImages.put(m_component, SwingImageUtils.createOSXImage(m_window, oldImage));
+			if (oldImage != null) {
+				oldImage.dispose();
+			}
+		}
+		// set images
+		m_root.accept(new ObjectInfoVisitor() {
+			@Override
+			public void endVisit(ObjectInfo objectInfo) throws Exception {
+				if (objectInfo instanceof AbstractComponentInfo) {
+					AbstractComponentInfo componentInfo = (AbstractComponentInfo) objectInfo;
+					Object componentObject = componentInfo.getComponentObject();
+					Image image = convertedImages.get(componentObject);
+					componentInfo.setImage(image);
+				}
+			}
+		});
+	}
 
-  /**
-   * Fix for {@link JLabel} with "html" as text.
-   */
-  private static void fixJLabelWithHTML(Component component) throws Exception {
-    if (component instanceof JLabel) {
-      JLabel label = (JLabel) component;
-      String text = label.getText();
-      if (StringUtils.containsIgnoreCase(text, "<html>")) {
-        SwingImageUtils.createComponentShotAWT(component);
-      }
-    }
-    // process children
-    if (component instanceof Container) {
-      Container container = (Container) component;
-      for (Component childComponent : container.getComponents()) {
-        fixJLabelWithHTML(childComponent);
-      }
-    }
-  }
+	/**
+	 * Fix for {@link JLabel} with "html" as text.
+	 */
+	private static void fixJLabelWithHTML(Component component) throws Exception {
+		if (component instanceof JLabel) {
+			JLabel label = (JLabel) component;
+			String text = label.getText();
+			if (StringUtils.containsIgnoreCase(text, "<html>")) {
+				SwingImageUtils.createComponentShotAWT(component);
+			}
+		}
+		// process children
+		if (component instanceof Container) {
+			Container container = (Container) component;
+			for (Component childComponent : container.getComponents()) {
+				fixJLabelWithHTML(childComponent);
+			}
+		}
+	}
 
-  /**
-   * Restores the top component state: restores location and makes it invisible.
-   */
-  public void dispose() throws Exception {
-    if (m_window == null || m_component == null) {
-      return;
-    }
-    // hide only if it is not part of bigger hierarchy (for example embedded into SWT)
-    if (m_root.isRoot()) {
-      SwingImageUtils.setVisible(m_window, false);
-    }
-    // restore location
-    if (m_oldComponentLocation != null) {
-      int deltaX = m_component.getLocation().x - m_oldComponentLocation.x;
-      int deltaY = m_component.getLocation().y - m_oldComponentLocation.y;
-      moveRectangleSafe(m_root.getBounds(), deltaX, deltaY);
-      moveRectangleSafe(m_root.getModelBounds(), deltaX, deltaY);
-    }
-    // dispose temporary window
-    if (m_window != m_component) {
-      if (m_window instanceof JFrame) {
-        ((JFrame) m_window).setContentPane(new JPanel());
-      }
-      m_window.dispose();
-    }
-  }
+	/**
+	 * Restores the top component state: restores location and makes it invisible.
+	 */
+	public void dispose() throws Exception {
+		if (m_window == null || m_component == null) {
+			return;
+		}
+		// hide only if it is not part of bigger hierarchy (for example embedded into SWT)
+		if (m_root.isRoot()) {
+			SwingImageUtils.setVisible(m_window, false);
+		}
+		// restore location
+		if (m_oldComponentLocation != null) {
+			int deltaX = m_component.getLocation().x - m_oldComponentLocation.x;
+			int deltaY = m_component.getLocation().y - m_oldComponentLocation.y;
+			moveRectangleSafe(m_root.getBounds(), deltaX, deltaY);
+			moveRectangleSafe(m_root.getModelBounds(), deltaX, deltaY);
+		}
+		// dispose temporary window
+		if (m_window != m_component) {
+			if (m_window instanceof JFrame) {
+				((JFrame) m_window).setContentPane(new JPanel());
+			}
+			m_window.dispose();
+		}
+	}
 
-  /**
-   * Moves given {@link Rectangle}, if it is not <code>null</code>.
-   */
-  private static void moveRectangleSafe(Rectangle bounds, int deltaX, int deltaY) {
-    if (bounds != null) {
-      bounds.x -= deltaX;
-      bounds.y -= deltaY;
-    }
-  }
+	/**
+	 * Moves given {@link Rectangle}, if it is not <code>null</code>.
+	 */
+	private static void moveRectangleSafe(Rectangle bounds, int deltaX, int deltaY) {
+		if (bounds != null) {
+			bounds.x -= deltaX;
+			bounds.y -= deltaY;
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/utils/SwingUtils.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/utils/SwingUtils.java
index 31d8ea2eb..14f9bc6e1 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/utils/SwingUtils.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/utils/SwingUtils.java
@@ -46,267 +46,267 @@
  * @coverage swing.utils
  */
 public final class SwingUtils {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private SwingUtils() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private SwingUtils() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Runs the {@link RunnableEx} in the AWT event dispatching thread using
-   * {@link SwingUtilities#invokeLater(Runnable)} and waits for it to get done with SWT message
-   * pumping. Due to SWT principles this means pumping system message loop. Using
-   * {@link SwingUtilities#invokeAndWait(Runnable)} is not acceptable because it could produce
-   * deadlocks between SWT and AWT dispatch threads.
-   *
-   * Note: must be invoked from SWT UI thread.
-   */
-  public static void runLaterAndWait(final RunnableEx runnableEx) throws Exception {
-    final AtomicBoolean done = new AtomicBoolean();
-    final Throwable ex[] = new Throwable[1];
-    invokeLaterAndWait(done, new Runnable() {
-      public void run() {
-        try {
-          runnableEx.run();
-        } catch (Throwable e) {
-          ex[0] = e;
-        } finally {
-          done.set(true);
-        }
-      }
-    });
-    propagateIfNotNull(ex[0]);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Runs the {@link RunnableEx} in the AWT event dispatching thread using
+	 * {@link SwingUtilities#invokeLater(Runnable)} and waits for it to get done with SWT message
+	 * pumping. Due to SWT principles this means pumping system message loop. Using
+	 * {@link SwingUtilities#invokeAndWait(Runnable)} is not acceptable because it could produce
+	 * deadlocks between SWT and AWT dispatch threads.
+	 *
+	 * Note: must be invoked from SWT UI thread.
+	 */
+	public static void runLaterAndWait(final RunnableEx runnableEx) throws Exception {
+		final AtomicBoolean done = new AtomicBoolean();
+		final Throwable ex[] = new Throwable[1];
+		invokeLaterAndWait(done, new Runnable() {
+			public void run() {
+				try {
+					runnableEx.run();
+				} catch (Throwable e) {
+					ex[0] = e;
+				} finally {
+					done.set(true);
+				}
+			}
+		});
+		propagateIfNotNull(ex[0]);
+	}
 
-  /**
-   * Ensures that the AWT EventQueue is empty by adding fake event into queue and pumping SWT
-   * message loop until fake event processed.
-   */
-  public static void ensureQueueEmpty() {
-    if (EventQueue.isDispatchThread()) {
-      return;
-    }
-    final AtomicBoolean done = new AtomicBoolean();
-    SwingUtilities.invokeLater(new Runnable() {
-      public void run() {
-        done.set(true);
-      }
-    });
-    // wait and pump SWT message loop
-    while (!done.get()) {
-      ExecutionUtils.waitEventLoop(0);
-    }
-  }
+	/**
+	 * Ensures that the AWT EventQueue is empty by adding fake event into queue and pumping SWT
+	 * message loop until fake event processed.
+	 */
+	public static void ensureQueueEmpty() {
+		if (EventQueue.isDispatchThread()) {
+			return;
+		}
+		final AtomicBoolean done = new AtomicBoolean();
+		SwingUtilities.invokeLater(new Runnable() {
+			public void run() {
+				done.set(true);
+			}
+		});
+		// wait and pump SWT message loop
+		while (!done.get()) {
+			ExecutionUtils.waitEventLoop(0);
+		}
+	}
 
-  /**
-   * Same as {@link #runLaterAndWait(RunnableEx)} but returns the result of execution. See
-   * {@link ExecutionUtils#runObject(RunnableObjectEx)}.
-   */
-  @SuppressWarnings("unchecked")
-  public static <T> T runObjectLaterAndWait(final RunnableObjectEx<T> runnableEx) throws Exception {
-    final AtomicBoolean done = new AtomicBoolean();
-    final Throwable ex[] = new Throwable[1];
-    final Object[] result = new Object[1];
-    invokeLaterAndWait(done, new Runnable() {
-      public void run() {
-        try {
-          result[0] = runnableEx.runObject();
-        } catch (Throwable e) {
-          ex[0] = e;
-        } finally {
-          done.set(true);
-        }
-      }
-    });
-    propagateIfNotNull(ex[0]);
-    return (T) result[0];
-  }
+	/**
+	 * Same as {@link #runLaterAndWait(RunnableEx)} but returns the result of execution. See
+	 * {@link ExecutionUtils#runObject(RunnableObjectEx)}.
+	 */
+	@SuppressWarnings("unchecked")
+	public static <T> T runObjectLaterAndWait(final RunnableObjectEx<T> runnableEx) throws Exception {
+		final AtomicBoolean done = new AtomicBoolean();
+		final Throwable ex[] = new Throwable[1];
+		final Object[] result = new Object[1];
+		invokeLaterAndWait(done, new Runnable() {
+			public void run() {
+				try {
+					result[0] = runnableEx.runObject();
+				} catch (Throwable e) {
+					ex[0] = e;
+				} finally {
+					done.set(true);
+				}
+			}
+		});
+		propagateIfNotNull(ex[0]);
+		return (T) result[0];
+	}
 
-  private static void invokeLaterAndWait(final AtomicBoolean done, Runnable job) {
-    Display display = Display.getCurrent();
-    /*
-     * Different platforms requires different Swing execution:
-     * 1. Mac OS X is very slow while invoking Swing using main thread;
-     * 2. Linux synchronizes GTK calls and if being invoked from different threads it may lock up.
-     * 3. Windows is indifferent. :-)
-     */
-    if (!EventQueue.isDispatchThread() && display != null && !EnvironmentUtils.IS_LINUX) {
-      // async events should be disabled while waiting AWT to be done.
-      // Otherwise its possible the state at which AWT still does something
-      // and puts async events into Display, which immediately would be executed
-      // because the SWT message loop is pumping up.
-      // Do this by Synchronizer delegate.
-      final Synchronizer oldSynchronizer = getSynchronizer(display);
-      Synchronizer newSynchronizer = new Synchronizer(display) {
-        @Override
-        protected void asyncExec(Runnable runnable) {
-          ReflectionUtils.invokeMethodEx(oldSynchronizer, "asyncExec(java.lang.Runnable)", runnable);
-        }
-      };
-      // notify about running SWT message loop (to prevent MouseUp event during current refresh)
-      DisplayEventListener displayListener = null;
-      if (GlobalState.getActiveObject() != null) {
-        displayListener = GlobalState.getActiveObject().getBroadcast(DisplayEventListener.class);
-        displayListener.beforeMessagesLoop();
-      }
-      // run and clean up
-      setMainShellEnabled(false);
-      try {
-        // set new Synchronizer, do not use Display.setSynchronizer() because it
-        // gets pending events executed
-        setSynchronizer(display, newSynchronizer);
-        // schedule runnable to AWT dispatch thread
-        SwingUtilities.invokeLater(job);
-        // wait and pump SWT message loop
-        while (!done.get()) {
-          ExecutionUtils.waitEventLoop(0);
-        }
-      } finally {
-        setMainShellEnabled(true);
-        if (displayListener != null) {
-          displayListener.afterMessagesLoop();
-        }
-        // restore old Synchronizer
-        display.setSynchronizer(oldSynchronizer);
-      }
-    } else {
-      // just run if in dispatch thread
-      OSSupport.get().runAwt(job);
-    }
-  }
+	private static void invokeLaterAndWait(final AtomicBoolean done, Runnable job) {
+		Display display = Display.getCurrent();
+		/*
+		 * Different platforms requires different Swing execution:
+		 * 1. Mac OS X is very slow while invoking Swing using main thread;
+		 * 2. Linux synchronizes GTK calls and if being invoked from different threads it may lock up.
+		 * 3. Windows is indifferent. :-)
+		 */
+		if (!EventQueue.isDispatchThread() && display != null && !EnvironmentUtils.IS_LINUX) {
+			// async events should be disabled while waiting AWT to be done.
+			// Otherwise its possible the state at which AWT still does something
+			// and puts async events into Display, which immediately would be executed
+			// because the SWT message loop is pumping up.
+			// Do this by Synchronizer delegate.
+			final Synchronizer oldSynchronizer = getSynchronizer(display);
+			Synchronizer newSynchronizer = new Synchronizer(display) {
+				@Override
+				protected void asyncExec(Runnable runnable) {
+					ReflectionUtils.invokeMethodEx(oldSynchronizer, "asyncExec(java.lang.Runnable)", runnable);
+				}
+			};
+			// notify about running SWT message loop (to prevent MouseUp event during current refresh)
+			DisplayEventListener displayListener = null;
+			if (GlobalState.getActiveObject() != null) {
+				displayListener = GlobalState.getActiveObject().getBroadcast(DisplayEventListener.class);
+				displayListener.beforeMessagesLoop();
+			}
+			// run and clean up
+			setMainShellEnabled(false);
+			try {
+				// set new Synchronizer, do not use Display.setSynchronizer() because it
+				// gets pending events executed
+				setSynchronizer(display, newSynchronizer);
+				// schedule runnable to AWT dispatch thread
+				SwingUtilities.invokeLater(job);
+				// wait and pump SWT message loop
+				while (!done.get()) {
+					ExecutionUtils.waitEventLoop(0);
+				}
+			} finally {
+				setMainShellEnabled(true);
+				if (displayListener != null) {
+					displayListener.afterMessagesLoop();
+				}
+				// restore old Synchronizer
+				display.setSynchronizer(oldSynchronizer);
+			}
+		} else {
+			// just run if in dispatch thread
+			OSSupport.get().runAwt(job);
+		}
+	}
 
-  private static void propagateIfNotNull(Throwable throwable) {
-    if (throwable != null) {
-      ReflectionUtils.propagate(throwable);
-    }
-  }
+	private static void propagateIfNotNull(Throwable throwable) {
+		if (throwable != null) {
+			ReflectionUtils.propagate(throwable);
+		}
+	}
 
-  /**
-   * We set this filter to disable some events during rendering. Specifically we disable
-   * {@link SWT#MouseDoubleClick} because it is sent event when {@link Shell} is disabled on
-   * {@link SWT#MouseUp}.
-   */
-  private static final Listener m_disableEventFilter = new Listener() {
-    public void handleEvent(Event event) {
-      event.type = SWT.None;
-    }
-  };
+	/**
+	 * We set this filter to disable some events during rendering. Specifically we disable
+	 * {@link SWT#MouseDoubleClick} because it is sent event when {@link Shell} is disabled on
+	 * {@link SWT#MouseUp}.
+	 */
+	private static final Listener m_disableEventFilter = new Listener() {
+		public void handleEvent(Event event) {
+			event.type = SWT.None;
+		}
+	};
 
-  /**
-   * We should disable main Eclipse {@link Shell} during running SWT events loop to prevent user
-   * from interacting with it, while models may be temporary in unusable state.
-   */
-  private static void setMainShellEnabled(boolean enabled) {
-    Shell shell = DesignerPlugin.getShell();
-    // process outstanding paint events before disabling any drawing.
-    if (!enabled) {
-      if (!EnvironmentUtils.IS_WINDOWS) {
-        shell.update();
-      }
-    }
-    // set/remove filter
-    Display display = shell.getDisplay();
-    if (enabled) {
-      display.removeFilter(SWT.MouseDoubleClick, m_disableEventFilter);
-    } else {
-      display.addFilter(SWT.MouseDoubleClick, m_disableEventFilter);
-    }
-    // do disable/enable
-    shell.setRedraw(enabled);
-    shell.setEnabled(enabled);
-  }
+	/**
+	 * We should disable main Eclipse {@link Shell} during running SWT events loop to prevent user
+	 * from interacting with it, while models may be temporary in unusable state.
+	 */
+	private static void setMainShellEnabled(boolean enabled) {
+		Shell shell = DesignerPlugin.getShell();
+		// process outstanding paint events before disabling any drawing.
+		if (!enabled) {
+			if (!EnvironmentUtils.IS_WINDOWS) {
+				shell.update();
+			}
+		}
+		// set/remove filter
+		Display display = shell.getDisplay();
+		if (enabled) {
+			display.removeFilter(SWT.MouseDoubleClick, m_disableEventFilter);
+		} else {
+			display.addFilter(SWT.MouseDoubleClick, m_disableEventFilter);
+		}
+		// do disable/enable
+		shell.setRedraw(enabled);
+		shell.setEnabled(enabled);
+	}
 
-  private static Synchronizer getSynchronizer(Display display) {
-    synchronized (Device.class) {
-      return (Synchronizer) ReflectionUtils.getFieldObject(display, "synchronizer");
-    }
-  }
+	private static Synchronizer getSynchronizer(Display display) {
+		synchronized (Device.class) {
+			return (Synchronizer) ReflectionUtils.getFieldObject(display, "synchronizer");
+		}
+	}
 
-  private static void setSynchronizer(Display display, Synchronizer newSynchronizer) {
-    synchronized (Device.class) {
-      ReflectionUtils.setField(display, "synchronizer", newSynchronizer);
-    }
-  }
+	private static void setSynchronizer(Display display, Synchronizer newSynchronizer) {
+		synchronized (Device.class) {
+			ReflectionUtils.setField(display, "synchronizer", newSynchronizer);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Clean up
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * For unknown reason, when we have {@link Display} created and add any {@link JTextComponent}
-   * sub-class to {@link JFrame}, we see {@link JFrame} in <code>[JNI global]</code> roots until we
-   * dispose {@link Display} (until OleUninitialize() invocation). So, we clear all
-   * {@link Container}'s to minimize number of components referenced from {@link JFrame}.
-   * <p>
-   * See also https://bugs.eclipse.org/bugs/show_bug.cgi?id=127374 and
-   * http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6407026
-   * <p>
-   * I found also that in Java6 {@link JFrame} may stuck somewhere in Draw2D/DirectDraw, so we
-   * should clear not only for text components, but even when we make Swing screen shot.
-   */
-  public static void clearSwingTree(final Container container) throws Exception {
-    runLaterAndWait(new RunnableEx() {
-      public void run() throws Exception {
-        if (container != null) {
-          // even if this container can not be effectively cleared, we will clear children,
-          // so minimize potential memory as much as possible
-          for (Component child : container.getComponents()) {
-            if (child instanceof Container) {
-              clearSwingTree((Container) child);
-            }
-          }
-          // remove all children Component's
-          ExecutionUtils.runIgnore(new RunnableEx() {
-            public void run() throws Exception {
-              container.removeAll();
-            }
-          });
-          // "tab order" property may install our FocusTraversalOnArray, so clear it
-          container.setFocusTraversalPolicy(null);
-          // remove layout manager: under JVM < 1.5 JFrame.setLayout() throws exception that
-          // JFrame.getContentPane().setLayout() should be used, so do this safely
-          ExecutionUtils.runIgnore(new RunnableEx() {
-            public void run() throws Exception {
-              container.setLayout(null);
-            }
-          });
-        }
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Clean up
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * For unknown reason, when we have {@link Display} created and add any {@link JTextComponent}
+	 * sub-class to {@link JFrame}, we see {@link JFrame} in <code>[JNI global]</code> roots until we
+	 * dispose {@link Display} (until OleUninitialize() invocation). So, we clear all
+	 * {@link Container}'s to minimize number of components referenced from {@link JFrame}.
+	 * <p>
+	 * See also https://bugs.eclipse.org/bugs/show_bug.cgi?id=127374 and
+	 * http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6407026
+	 * <p>
+	 * I found also that in Java6 {@link JFrame} may stuck somewhere in Draw2D/DirectDraw, so we
+	 * should clear not only for text components, but even when we make Swing screen shot.
+	 */
+	public static void clearSwingTree(final Container container) throws Exception {
+		runLaterAndWait(new RunnableEx() {
+			public void run() throws Exception {
+				if (container != null) {
+					// even if this container can not be effectively cleared, we will clear children,
+					// so minimize potential memory as much as possible
+					for (Component child : container.getComponents()) {
+						if (child instanceof Container) {
+							clearSwingTree((Container) child);
+						}
+					}
+					// remove all children Component's
+					ExecutionUtils.runIgnore(new RunnableEx() {
+						public void run() throws Exception {
+							container.removeAll();
+						}
+					});
+					// "tab order" property may install our FocusTraversalOnArray, so clear it
+					container.setFocusTraversalPolicy(null);
+					// remove layout manager: under JVM < 1.5 JFrame.setLayout() throws exception that
+					// JFrame.getContentPane().setLayout() should be used, so do this safely
+					ExecutionUtils.runIgnore(new RunnableEx() {
+						public void run() throws Exception {
+							container.setLayout(null);
+						}
+					});
+				}
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Coordinate utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return location of given {@link Component} in screen coordinates.
-   */
-  public static Point getScreenLocation(final Component component) throws Exception {
-    try {
-      return runObjectLaterAndWait(new RunnableObjectEx<Point>() {
-        public Point runObject() throws Exception {
-          return component.getLocationOnScreen();
-        }
-      });
-    } catch (IllegalComponentStateException e) {
-      return new Point();
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Coordinate utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return location of given {@link Component} in screen coordinates.
+	 */
+	public static Point getScreenLocation(final Component component) throws Exception {
+		try {
+			return runObjectLaterAndWait(new RunnableObjectEx<Point>() {
+				public Point runObject() throws Exception {
+					return component.getLocationOnScreen();
+				}
+			});
+		} catch (IllegalComponentStateException e) {
+			return new Point();
+		}
+	}
 
-  /**
-   * Convert SWT color to AWT color.
-   */
-  public static java.awt.Color getAWTColor(org.eclipse.swt.graphics.Color color) {
-    return new java.awt.Color(color.getRed(), color.getGreen(), color.getBlue());
-  }
+	/**
+	 * Convert SWT color to AWT color.
+	 */
+	public static java.awt.Color getAWTColor(org.eclipse.swt.graphics.Color color) {
+		return new java.awt.Color(color.getRed(), color.getGreen(), color.getBlue());
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/wizards/Messages.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/wizards/Messages.java
index f41f8e6b2..a925ed580 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/wizards/Messages.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/wizards/Messages.java
@@ -3,32 +3,32 @@
 import org.eclipse.osgi.util.NLS;
 
 public class Messages extends NLS {
-  private static final String BUNDLE_NAME = "org.eclipse.wb.internal.swing.wizards.messages"; //$NON-NLS-1$
-  public static String NewJAppletWizard_title;
-  public static String NewJAppletWizardPage_description;
-  public static String NewJAppletWizardPage_title;
-  public static String NewJDialogWizard_title;
-  public static String NewJDialogWizardPage_description;
-  public static String NewJDialogWizardPage_generateButtons;
-  public static String NewJDialogWizardPage_title;
-  public static String NewJFrameWizard_title;
-  public static String NewJFrameWizardPage_description;
-  public static String NewJFrameWizardPage_title;
-  public static String NewJFrameWizardPage_useAdvancedTemplate;
-  public static String NewJInternalFrameWizard_title;
-  public static String NewJInternalFrameWizardPage_description;
-  public static String NewJInternalFrameWizardPage_title;
-  public static String NewJPanelWizard_title;
-  public static String NewJPanelWizardPage_description;
-  public static String NewJPanelWizardPage_title;
-  public static String NewSwingApplicationWizard_title;
-  public static String NewSwingApplicationWizardPage_description;
-  public static String NewSwingApplicationWizardPage_title;
-  static {
-    // initialize resource bundle
-    NLS.initializeMessages(BUNDLE_NAME, Messages.class);
-  }
+	private static final String BUNDLE_NAME = "org.eclipse.wb.internal.swing.wizards.messages"; //$NON-NLS-1$
+	public static String NewJAppletWizard_title;
+	public static String NewJAppletWizardPage_description;
+	public static String NewJAppletWizardPage_title;
+	public static String NewJDialogWizard_title;
+	public static String NewJDialogWizardPage_description;
+	public static String NewJDialogWizardPage_generateButtons;
+	public static String NewJDialogWizardPage_title;
+	public static String NewJFrameWizard_title;
+	public static String NewJFrameWizardPage_description;
+	public static String NewJFrameWizardPage_title;
+	public static String NewJFrameWizardPage_useAdvancedTemplate;
+	public static String NewJInternalFrameWizard_title;
+	public static String NewJInternalFrameWizardPage_description;
+	public static String NewJInternalFrameWizardPage_title;
+	public static String NewJPanelWizard_title;
+	public static String NewJPanelWizardPage_description;
+	public static String NewJPanelWizardPage_title;
+	public static String NewSwingApplicationWizard_title;
+	public static String NewSwingApplicationWizardPage_description;
+	public static String NewSwingApplicationWizardPage_title;
+	static {
+		// initialize resource bundle
+		NLS.initializeMessages(BUNDLE_NAME, Messages.class);
+	}
 
-  private Messages() {
-  }
+	private Messages() {
+	}
 }
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/wizards/SwingWizardPage.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/wizards/SwingWizardPage.java
index 698371fc2..91eea124a 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/wizards/SwingWizardPage.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/wizards/SwingWizardPage.java
@@ -25,42 +25,42 @@
  * @coverage swing.wizards.ui
  */
 public class SwingWizardPage extends TemplateDesignWizardPage {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Substitution support
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static String doPerformSubstitutions(TemplateDesignWizardPage page,
-      String code,
-      ImportsManager imports) {
-    code = StringUtils.replace(code, "%SwingLayout%", page.getLayoutCode("", imports));
-    code =
-        StringUtils.replace(
-            code,
-            "%ContentPane.SwingLayout%",
-            page.getLayoutCode("getContentPane().", imports));
-    return code;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Substitution support
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static String doPerformSubstitutions(TemplateDesignWizardPage page,
+			String code,
+			ImportsManager imports) {
+		code = StringUtils.replace(code, "%SwingLayout%", page.getLayoutCode("", imports));
+		code =
+				StringUtils.replace(
+						code,
+						"%ContentPane.SwingLayout%",
+						page.getLayoutCode("getContentPane().", imports));
+		return code;
+	}
 
-  @Override
-  protected String performSubstitutions(String code, ImportsManager imports) {
-    code = super.performSubstitutions(code, imports);
-    code = doPerformSubstitutions(this, code, imports);
-    return code;
-  }
+	@Override
+	protected String performSubstitutions(String code, ImportsManager imports) {
+		code = super.performSubstitutions(code, imports);
+		code = doPerformSubstitutions(this, code, imports);
+		return code;
+	}
 
-  @Override
-  protected ToolkitDescriptionJava getToolkitDescription() {
-    return ToolkitProvider.DESCRIPTION;
-  }
+	@Override
+	protected ToolkitDescriptionJava getToolkitDescription() {
+		return ToolkitProvider.DESCRIPTION;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createDesignSuperClassControls(Composite composite, int nColumns) {
-    createSuperClassControls(composite, nColumns);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createDesignSuperClassControls(Composite composite, int nColumns) {
+		createSuperClassControls(composite, nColumns);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/wizards/applet/NewJAppletWizard.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/wizards/applet/NewJAppletWizard.java
index 1eb71c616..411ce4e64 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/wizards/applet/NewJAppletWizard.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/wizards/applet/NewJAppletWizard.java
@@ -25,22 +25,22 @@
  * @coverage swing.wizards.ui
  */
 public final class NewJAppletWizard extends SwingWizard {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public NewJAppletWizard() {
-    setWindowTitle(Messages.NewJAppletWizard_title);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public NewJAppletWizard() {
+		setWindowTitle(Messages.NewJAppletWizard_title);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Pages
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected AbstractDesignWizardPage createMainPage() {
-    return new NewJAppletWizardPage();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Pages
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected AbstractDesignWizardPage createMainPage() {
+		return new NewJAppletWizardPage();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/wizards/applet/NewJAppletWizardPage.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/wizards/applet/NewJAppletWizardPage.java
index a34479c7d..1fea32868 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/wizards/applet/NewJAppletWizardPage.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/wizards/applet/NewJAppletWizardPage.java
@@ -31,37 +31,37 @@
  * @coverage swing.wizards.ui
  */
 public final class NewJAppletWizardPage extends SwingWizardPage {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public NewJAppletWizardPage() {
-    setTitle(Messages.NewJAppletWizardPage_title);
-    setImageDescriptor(Activator.getImageDescriptor("wizard/JApplet/banner.gif"));
-    setDescription(Messages.NewJAppletWizardPage_description);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public NewJAppletWizardPage() {
+		setTitle(Messages.NewJAppletWizardPage_title);
+		setImageDescriptor(Activator.getImageDescriptor("wizard/JApplet/banner.gif"));
+		setDescription(Messages.NewJAppletWizardPage_description);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // WizardPage
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createTypeMembers(IType newType, ImportsManager imports, IProgressMonitor monitor)
-      throws CoreException {
-    InputStream file = Activator.getFile("templates/JApplet.jvt");
-    fillTypeFromTemplate(newType, imports, monitor, file);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// WizardPage
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createTypeMembers(IType newType, ImportsManager imports, IProgressMonitor monitor)
+			throws CoreException {
+		InputStream file = Activator.getFile("templates/JApplet.jvt");
+		fillTypeFromTemplate(newType, imports, monitor, file);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void initTypePage(IJavaElement elem) {
-    super.initTypePage(elem);
-    setSuperClass("javax.swing.JApplet", true);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void initTypePage(IJavaElement elem) {
+		super.initTypePage(elem);
+		setSuperClass("javax.swing.JApplet", true);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/wizards/application/NewSwingApplicationWizard.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/wizards/application/NewSwingApplicationWizard.java
index 1b0632df1..5fd9bde1f 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/wizards/application/NewSwingApplicationWizard.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/wizards/application/NewSwingApplicationWizard.java
@@ -23,22 +23,22 @@
  * @coverage swing.wizards.ui
  */
 public final class NewSwingApplicationWizard extends SwingWizard {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public NewSwingApplicationWizard() {
-    setWindowTitle(Messages.NewSwingApplicationWizard_title);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public NewSwingApplicationWizard() {
+		setWindowTitle(Messages.NewSwingApplicationWizard_title);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Pages
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected AbstractDesignWizardPage createMainPage() {
-    return new NewSwingApplicationWizardPage();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Pages
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected AbstractDesignWizardPage createMainPage() {
+		return new NewSwingApplicationWizardPage();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/wizards/application/NewSwingApplicationWizardPage.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/wizards/application/NewSwingApplicationWizardPage.java
index 07e19dc4d..54faf3f1e 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/wizards/application/NewSwingApplicationWizardPage.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/wizards/application/NewSwingApplicationWizardPage.java
@@ -29,35 +29,35 @@
  * @coverage swing.wizards.ui
  */
 public final class NewSwingApplicationWizardPage extends SwingWizardPage {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public NewSwingApplicationWizardPage() {
-    setTitle(Messages.NewSwingApplicationWizardPage_title);
-    setImageDescriptor(Activator.getImageDescriptor("wizard/SwingApplication/banner.gif"));
-    setDescription(Messages.NewSwingApplicationWizardPage_description);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public NewSwingApplicationWizardPage() {
+		setTitle(Messages.NewSwingApplicationWizardPage_title);
+		setImageDescriptor(Activator.getImageDescriptor("wizard/SwingApplication/banner.gif"));
+		setDescription(Messages.NewSwingApplicationWizardPage_description);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // WizardPage
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createTypeMembers(IType newType, ImportsManager imports, IProgressMonitor monitor)
-      throws CoreException {
-    InputStream file = Activator.getFile("templates/SwingApplication.jvt");
-    fillTypeFromTemplate(newType, imports, monitor, file);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// WizardPage
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createTypeMembers(IType newType, ImportsManager imports, IProgressMonitor monitor)
+			throws CoreException {
+		InputStream file = Activator.getFile("templates/SwingApplication.jvt");
+		fillTypeFromTemplate(newType, imports, monitor, file);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createDesignSuperClassControls(Composite composite, int nColumns) {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createDesignSuperClassControls(Composite composite, int nColumns) {
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/wizards/dialog/NewJDialogWizard.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/wizards/dialog/NewJDialogWizard.java
index 53d857c08..9c135f485 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/wizards/dialog/NewJDialogWizard.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/wizards/dialog/NewJDialogWizard.java
@@ -25,22 +25,22 @@
  * @coverage swing.wizards.ui
  */
 public final class NewJDialogWizard extends SwingWizard {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public NewJDialogWizard() {
-    setWindowTitle(Messages.NewJDialogWizard_title);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public NewJDialogWizard() {
+		setWindowTitle(Messages.NewJDialogWizard_title);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Pages
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected AbstractDesignWizardPage createMainPage() {
-    return new NewJDialogWizardPage();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Pages
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected AbstractDesignWizardPage createMainPage() {
+		return new NewJDialogWizardPage();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/wizards/dialog/NewJDialogWizardPage.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/wizards/dialog/NewJDialogWizardPage.java
index f7854801a..9a785bd2d 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/wizards/dialog/NewJDialogWizardPage.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/wizards/dialog/NewJDialogWizardPage.java
@@ -36,54 +36,54 @@
  * @coverage swing.wizards.ui
  */
 public final class NewJDialogWizardPage extends SwingWizardPage {
-  private CheckDialogField m_buttonsField;
+	private CheckDialogField m_buttonsField;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public NewJDialogWizardPage() {
-    setTitle(Messages.NewJDialogWizardPage_title);
-    setImageDescriptor(Activator.getImageDescriptor("wizard/JDialog/banner.gif"));
-    setDescription(Messages.NewJDialogWizardPage_description);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public NewJDialogWizardPage() {
+		setTitle(Messages.NewJDialogWizardPage_title);
+		setImageDescriptor(Activator.getImageDescriptor("wizard/JDialog/banner.gif"));
+		setDescription(Messages.NewJDialogWizardPage_description);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // WizardPage
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createTypeMembers(IType newType, ImportsManager imports, IProgressMonitor monitor)
-      throws CoreException {
-    InputStream file =
-        Activator.getFile(m_buttonsField.getSelection()
-            ? "templates/JDialog_buttons.jvt"
-            : "templates/JDialog.jvt");
-    fillTypeFromTemplate(newType, imports, monitor, file);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// WizardPage
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createTypeMembers(IType newType, ImportsManager imports, IProgressMonitor monitor)
+			throws CoreException {
+		InputStream file =
+				Activator.getFile(m_buttonsField.getSelection()
+						? "templates/JDialog_buttons.jvt"
+								: "templates/JDialog.jvt");
+		fillTypeFromTemplate(newType, imports, monitor, file);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void initTypePage(IJavaElement elem) {
-    super.initTypePage(elem);
-    setSuperClass("javax.swing.JDialog", true);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void initTypePage(IJavaElement elem) {
+		super.initTypePage(elem);
+		setSuperClass("javax.swing.JDialog", true);
+	}
 
-  @Override
-  protected void createLocalControls(Composite parent, int columns) {
-    Composite composite = new Composite(parent, SWT.NONE);
-    GridLayoutFactory.create(composite).noMargins();
-    GridDataFactory.create(composite).fillH().grabH().spanH(columns);
-    //
-    m_buttonsField = new CheckDialogField();
-    m_buttonsField.setLabelText(Messages.NewJDialogWizardPage_generateButtons);
-    m_buttonsField.setSelection(true);
-    m_buttonsField.doFillIntoGrid(composite, 1);
-  }
+	@Override
+	protected void createLocalControls(Composite parent, int columns) {
+		Composite composite = new Composite(parent, SWT.NONE);
+		GridLayoutFactory.create(composite).noMargins();
+		GridDataFactory.create(composite).fillH().grabH().spanH(columns);
+		//
+		m_buttonsField = new CheckDialogField();
+		m_buttonsField.setLabelText(Messages.NewJDialogWizardPage_generateButtons);
+		m_buttonsField.setSelection(true);
+		m_buttonsField.doFillIntoGrid(composite, 1);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/wizards/frame/NewJFrameWizard.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/wizards/frame/NewJFrameWizard.java
index 022d9cc83..931856a2f 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/wizards/frame/NewJFrameWizard.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/wizards/frame/NewJFrameWizard.java
@@ -25,22 +25,22 @@
  * @coverage swing.wizards.ui
  */
 public final class NewJFrameWizard extends SwingWizard {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public NewJFrameWizard() {
-    setWindowTitle(Messages.NewJFrameWizard_title);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public NewJFrameWizard() {
+		setWindowTitle(Messages.NewJFrameWizard_title);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Pages
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected AbstractDesignWizardPage createMainPage() {
-    return new NewJFrameWizardPage();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Pages
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected AbstractDesignWizardPage createMainPage() {
+		return new NewJFrameWizardPage();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/wizards/frame/NewJFrameWizardPage.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/wizards/frame/NewJFrameWizardPage.java
index b76ee9af6..68edc5c79 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/wizards/frame/NewJFrameWizardPage.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/wizards/frame/NewJFrameWizardPage.java
@@ -38,78 +38,78 @@
  * @coverage swing.wizards.ui
  */
 public final class NewJFrameWizardPage extends SwingWizardPage {
-  private CheckDialogField m_advancedField;
+	private CheckDialogField m_advancedField;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public NewJFrameWizardPage() {
-    setTitle(Messages.NewJFrameWizardPage_title);
-    setImageDescriptor(Activator.getImageDescriptor("wizard/JFrame/banner.gif"));
-    setDescription(Messages.NewJFrameWizardPage_description);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public NewJFrameWizardPage() {
+		setTitle(Messages.NewJFrameWizardPage_title);
+		setImageDescriptor(Activator.getImageDescriptor("wizard/JFrame/banner.gif"));
+		setDescription(Messages.NewJFrameWizardPage_description);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // WizardPage
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createTypeMembers(IType newType, ImportsManager imports, IProgressMonitor monitor)
-      throws CoreException {
-    InputStream file =
-        Activator.getFile(m_advancedField.getSelection()
-            ? "templates/JFrame_advanced.jvt"
-            : "templates/JFrame.jvt");
-    fillTypeFromTemplate(newType, imports, monitor, file);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// WizardPage
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createTypeMembers(IType newType, ImportsManager imports, IProgressMonitor monitor)
+			throws CoreException {
+		InputStream file =
+				Activator.getFile(m_advancedField.getSelection()
+						? "templates/JFrame_advanced.jvt"
+								: "templates/JFrame.jvt");
+		fillTypeFromTemplate(newType, imports, monitor, file);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void initTypePage(IJavaElement elem) {
-    super.initTypePage(elem);
-    setSuperClass("javax.swing.JFrame", true);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void initTypePage(IJavaElement elem) {
+		super.initTypePage(elem);
+		setSuperClass("javax.swing.JFrame", true);
+	}
 
-  @Override
-  protected void createLocalControls(Composite parent, int columns) {
-    Composite composite = new Composite(parent, SWT.NONE);
-    GridLayoutFactory.create(composite).noMargins();
-    GridDataFactory.create(composite).fillH().grabH().spanH(columns);
-    //
-    m_advancedField = new CheckDialogField();
-    m_advancedField.setLabelText(Messages.NewJFrameWizardPage_useAdvancedTemplate);
-    m_advancedField.setSelection(true);
-    m_advancedField.doFillIntoGrid(composite, 1);
-    // I always use same names during tests
-    if (EnvironmentUtils.DEVELOPER_HOST) {
-      setTypeName("JFrame_1", true);
-    }
-  }
+	@Override
+	protected void createLocalControls(Composite parent, int columns) {
+		Composite composite = new Composite(parent, SWT.NONE);
+		GridLayoutFactory.create(composite).noMargins();
+		GridDataFactory.create(composite).fillH().grabH().spanH(columns);
+		//
+		m_advancedField = new CheckDialogField();
+		m_advancedField.setLabelText(Messages.NewJFrameWizardPage_useAdvancedTemplate);
+		m_advancedField.setSelection(true);
+		m_advancedField.doFillIntoGrid(composite, 1);
+		// I always use same names during tests
+		if (EnvironmentUtils.DEVELOPER_HOST) {
+			setTypeName("JFrame_1", true);
+		}
+	}
 
-  @Override
-  protected void updateStatus(IStatus status) {
-    super.updateStatus(status);
-    if (isDirectlyJFrame()) {
-      m_advancedField.setEnabled(true);
-      m_advancedField.setSelection(true);
-    } else {
-      m_advancedField.setEnabled(false);
-      m_advancedField.setSelection(false);
-    }
-    // I don't like advanced template anymore :-(
-    if (EnvironmentUtils.DEVELOPER_HOST) {
-      m_advancedField.setSelection(false);
-    }
-  }
+	@Override
+	protected void updateStatus(IStatus status) {
+		super.updateStatus(status);
+		if (isDirectlyJFrame()) {
+			m_advancedField.setEnabled(true);
+			m_advancedField.setSelection(true);
+		} else {
+			m_advancedField.setEnabled(false);
+			m_advancedField.setSelection(false);
+		}
+		// I don't like advanced template anymore :-(
+		if (EnvironmentUtils.DEVELOPER_HOST) {
+			m_advancedField.setSelection(false);
+		}
+	}
 
-  private boolean isDirectlyJFrame() {
-    return "javax.swing.JFrame".equals(getSuperClass());
-  }
+	private boolean isDirectlyJFrame() {
+		return "javax.swing.JFrame".equals(getSuperClass());
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/wizards/frame/NewJInternalFrameWizard.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/wizards/frame/NewJInternalFrameWizard.java
index ef1521703..a2c3690c4 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/wizards/frame/NewJInternalFrameWizard.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/wizards/frame/NewJInternalFrameWizard.java
@@ -25,22 +25,22 @@
  * @coverage swing.wizards.ui
  */
 public final class NewJInternalFrameWizard extends SwingWizard {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public NewJInternalFrameWizard() {
-    setWindowTitle(Messages.NewJInternalFrameWizard_title);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public NewJInternalFrameWizard() {
+		setWindowTitle(Messages.NewJInternalFrameWizard_title);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Pages
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected AbstractDesignWizardPage createMainPage() {
-    return new NewJInternalFrameWizardPage();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Pages
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected AbstractDesignWizardPage createMainPage() {
+		return new NewJInternalFrameWizardPage();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/wizards/frame/NewJInternalFrameWizardPage.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/wizards/frame/NewJInternalFrameWizardPage.java
index 97107f513..ad4c1fc39 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/wizards/frame/NewJInternalFrameWizardPage.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/wizards/frame/NewJInternalFrameWizardPage.java
@@ -31,37 +31,37 @@
  * @coverage swing.wizards.ui
  */
 public final class NewJInternalFrameWizardPage extends SwingWizardPage {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public NewJInternalFrameWizardPage() {
-    setTitle(Messages.NewJInternalFrameWizardPage_title);
-    setImageDescriptor(Activator.getImageDescriptor("wizard/JInternalFrame/banner.gif"));
-    setDescription(Messages.NewJInternalFrameWizardPage_description);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public NewJInternalFrameWizardPage() {
+		setTitle(Messages.NewJInternalFrameWizardPage_title);
+		setImageDescriptor(Activator.getImageDescriptor("wizard/JInternalFrame/banner.gif"));
+		setDescription(Messages.NewJInternalFrameWizardPage_description);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // WizardPage
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createTypeMembers(IType newType, ImportsManager imports, IProgressMonitor monitor)
-      throws CoreException {
-    InputStream file = Activator.getFile("templates/JInternalFrame.jvt");
-    fillTypeFromTemplate(newType, imports, monitor, file);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// WizardPage
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createTypeMembers(IType newType, ImportsManager imports, IProgressMonitor monitor)
+			throws CoreException {
+		InputStream file = Activator.getFile("templates/JInternalFrame.jvt");
+		fillTypeFromTemplate(newType, imports, monitor, file);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void initTypePage(IJavaElement elem) {
-    super.initTypePage(elem);
-    setSuperClass("javax.swing.JInternalFrame", true);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void initTypePage(IJavaElement elem) {
+		super.initTypePage(elem);
+		setSuperClass("javax.swing.JInternalFrame", true);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/wizards/panel/NewJPanelWizard.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/wizards/panel/NewJPanelWizard.java
index 29521b864..0bd098847 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/wizards/panel/NewJPanelWizard.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/wizards/panel/NewJPanelWizard.java
@@ -25,22 +25,22 @@
  * @coverage swing.wizards.ui
  */
 public final class NewJPanelWizard extends SwingWizard {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public NewJPanelWizard() {
-    setWindowTitle(Messages.NewJPanelWizard_title);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public NewJPanelWizard() {
+		setWindowTitle(Messages.NewJPanelWizard_title);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Pages
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected AbstractDesignWizardPage createMainPage() {
-    return new NewJPanelWizardPage();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Pages
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected AbstractDesignWizardPage createMainPage() {
+		return new NewJPanelWizardPage();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/wizards/panel/NewJPanelWizardPage.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/wizards/panel/NewJPanelWizardPage.java
index c0d038051..d6f2722a5 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/wizards/panel/NewJPanelWizardPage.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/wizards/panel/NewJPanelWizardPage.java
@@ -33,46 +33,46 @@
  * @coverage swing.wizards.ui
  */
 public final class NewJPanelWizardPage extends SwingWizardPage {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public NewJPanelWizardPage() {
-    setTitle(Messages.NewJPanelWizardPage_title);
-    setImageDescriptor(Activator.getImageDescriptor("wizard/JPanel/banner.gif"));
-    setDescription(Messages.NewJPanelWizardPage_description);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public NewJPanelWizardPage() {
+		setTitle(Messages.NewJPanelWizardPage_title);
+		setImageDescriptor(Activator.getImageDescriptor("wizard/JPanel/banner.gif"));
+		setDescription(Messages.NewJPanelWizardPage_description);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // WizardPage
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createLocalControls(Composite parent, int nColumns) {
-    super.createLocalControls(parent, nColumns);
-    // I always use same names during tests
-    if (EnvironmentUtils.DEVELOPER_HOST) {
-      setTypeName("JPanel_1", true);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// WizardPage
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createLocalControls(Composite parent, int nColumns) {
+		super.createLocalControls(parent, nColumns);
+		// I always use same names during tests
+		if (EnvironmentUtils.DEVELOPER_HOST) {
+			setTypeName("JPanel_1", true);
+		}
+	}
 
-  @Override
-  protected void createTypeMembers(IType newType, ImportsManager imports, IProgressMonitor monitor)
-      throws CoreException {
-    InputStream file = Activator.getFile("templates/JPanel.jvt");
-    fillTypeFromTemplate(newType, imports, monitor, file);
-  }
+	@Override
+	protected void createTypeMembers(IType newType, ImportsManager imports, IProgressMonitor monitor)
+			throws CoreException {
+		InputStream file = Activator.getFile("templates/JPanel.jvt");
+		fillTypeFromTemplate(newType, imports, monitor, file);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void initTypePage(IJavaElement elem) {
-    super.initTypePage(elem);
-    setSuperClass("javax.swing.JPanel", true);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void initTypePage(IJavaElement elem) {
+		super.initTypePage(elem);
+		setSuperClass("javax.swing.JPanel", true);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing/src/swingintegration/example/AwtDialogListener.java b/org.eclipse.wb.swing/src/swingintegration/example/AwtDialogListener.java
index 952960dcf..1d379a2d8 100644
--- a/org.eclipse.wb.swing/src/swingintegration/example/AwtDialogListener.java
+++ b/org.eclipse.wb.swing/src/swingintegration/example/AwtDialogListener.java
@@ -28,173 +28,173 @@
  * and hidden.
  */
 class AwtDialogListener implements AWTEventListener, ComponentListener {
-  // modalDialogs should be accessed only from the AWT thread, so no
-  // synchronization is needed.
-  private final List<Dialog> modalDialogs = Lists.newArrayList();
-  private final Display display;
-
-  /**
-   * Registers this object as an AWT event listener so that Swing dialogs have the proper modal
-   * behavior in the containing SWT environment. This is called automatically when you construct a
-   * {@link EmbeddedSwingComposite}, and it need not be called separately in that case.
-   *
-   * @param shell
-   */
-  AwtDialogListener(Display display) {
-    assert display != null;
-    this.display = display;
-    Toolkit.getDefaultToolkit().addAWTEventListener(this, AWTEvent.WINDOW_EVENT_MASK);
-  }
-
-  private void handleRemovedDialog(Dialog awtDialog, boolean removeListener) {
-    assert awtDialog != null;
-    assert modalDialogs != null;
-    assert display != null;
-    assert EventQueue.isDispatchThread(); // On AWT event thread
-    if (removeListener) {
-      awtDialog.removeComponentListener(this);
-    }
-    // Note: there is no isModal() check here because the dialog might
-    // have been changed from modal to non-modal after it was opened. In this case
-    // the currently visible dialog would still act modal and we'd need to unblock
-    // SWT here when it goes away.
-    if (modalDialogs.remove(awtDialog)) {
-      display.asyncExec(new Runnable() {
-        public void run() {
-          SwtInputBlocker.unblock();
-        }
-      });
-    }
-  }
-
-  private void handleAddedDialog(final Dialog awtDialog) {
-    assert awtDialog != null;
-    assert modalDialogs != null;
-    assert EventQueue.isDispatchThread(); // On AWT event thread
-    if (modalDialogs.contains(awtDialog) || !awtDialog.isModal() || !awtDialog.isVisible()) {
-      return;
-    }
-    modalDialogs.add(awtDialog);
-    awtDialog.addComponentListener(this);
-    display.asyncExec(new Runnable() {
-      public void run() {
-        SwtInputBlocker.block();
-      }
-    });
-  }
-
-  void requestFocus() {
-    // TODO: this does not always bring the dialog to the top
-    // under some Linux desktops/window managers (e.g. metacity under GNOME).
-    EventQueue.invokeLater(new Runnable() {
-      public void run() {
-        assert modalDialogs != null;
-        int size = modalDialogs.size();
-        if (size > 0) {
-          final Dialog awtDialog = modalDialogs.get(size - 1);
-          // In one case, a call to requestFocus() alone does not
-          // bring the AWT dialog to the top. This happens if the
-          // dialog is given a null parent frame. When opened, the dialog
-          // can be hidden by the SWT window even when it obtains focus.
-          // Calling toFront() solves the problem, but...
-          //
-          // There are still problems if the Metal look and feel is in use.
-          // The SWT window will hide the dialog the first time it is
-          // selected. Once the dialog is brought back to the front by
-          // the user, there is no further problem.
-          //
-          // Why? It looks like SWT is not being notified of lost focus when
-          // the Metal dialog first opens; subsequently, when focus is regained, the
-          // focus gain event is not posted to the SwtInputBlocker.
-          //
-          // The workaround is to use Windows look and feel, rather than Metal.
-          awtDialog.requestFocus();
-          awtDialog.toFront();
-        }
-      }
-    });
-  }
-
-  private void handleOpenedWindow(WindowEvent event) {
-    assert event != null;
-    assert EventQueue.isDispatchThread(); // On AWT event thread
-    Window window = event.getWindow();
-    if (window instanceof Dialog) {
-      handleAddedDialog((Dialog) window);
-    }
-  }
-
-  private void handleClosedWindow(WindowEvent event) {
-    assert event != null;
-    assert EventQueue.isDispatchThread(); // On AWT event thread
-    // Dispose-based close
-    Window window = event.getWindow();
-    if (window instanceof Dialog) {
-      // Remove dialog and component listener
-      handleRemovedDialog((Dialog) window, true);
-    }
-  }
-
-  private void handleClosingWindow(WindowEvent event) {
-    assert event != null;
-    assert EventQueue.isDispatchThread(); // On AWT event thread
-    // System-based close
-    Window window = event.getWindow();
-    if (window instanceof Dialog) {
-      final Dialog dialog = (Dialog) window;
-      // Defer until later. Bad things happen if
-      // handleRemovedDialog() is called directly from
-      // this event handler. The Swing dialog does not close
-      // properly and its modality remains in effect.
-      EventQueue.invokeLater(new Runnable() {
-        public void run() {
-          // Remove dialog and component listener
-          handleRemovedDialog(dialog, true);
-        }
-      });
-    }
-  }
-
-  public void eventDispatched(AWTEvent event) {
-    assert event != null;
-    assert EventQueue.isDispatchThread(); // On AWT event thread
-    switch (event.getID()) {
-      case WindowEvent.WINDOW_OPENED :
-        handleOpenedWindow((WindowEvent) event);
-        break;
-      case WindowEvent.WINDOW_CLOSED :
-        handleClosedWindow((WindowEvent) event);
-        break;
-      case WindowEvent.WINDOW_CLOSING :
-        handleClosingWindow((WindowEvent) event);
-        break;
-      default :
-        break;
-    }
-  }
-
-  public void componentHidden(ComponentEvent e) {
-    assert e != null;
-    assert EventQueue.isDispatchThread(); // On AWT event thread
-    Object obj = e.getSource();
-    if (obj instanceof Dialog) {
-      // Remove dialog but keep listener in place so that we know if/when it is set visible
-      handleRemovedDialog((Dialog) obj, false);
-    }
-  }
-
-  public void componentShown(ComponentEvent e) {
-    assert e != null;
-    assert EventQueue.isDispatchThread(); // On AWT event thread
-    Object obj = e.getSource();
-    if (obj instanceof Dialog) {
-      handleAddedDialog((Dialog) obj);
-    }
-  }
-
-  public void componentResized(ComponentEvent e) {
-  }
-
-  public void componentMoved(ComponentEvent e) {
-  }
+	// modalDialogs should be accessed only from the AWT thread, so no
+	// synchronization is needed.
+	private final List<Dialog> modalDialogs = Lists.newArrayList();
+	private final Display display;
+
+	/**
+	 * Registers this object as an AWT event listener so that Swing dialogs have the proper modal
+	 * behavior in the containing SWT environment. This is called automatically when you construct a
+	 * {@link EmbeddedSwingComposite}, and it need not be called separately in that case.
+	 *
+	 * @param shell
+	 */
+	AwtDialogListener(Display display) {
+		assert display != null;
+		this.display = display;
+		Toolkit.getDefaultToolkit().addAWTEventListener(this, AWTEvent.WINDOW_EVENT_MASK);
+	}
+
+	private void handleRemovedDialog(Dialog awtDialog, boolean removeListener) {
+		assert awtDialog != null;
+		assert modalDialogs != null;
+		assert display != null;
+		assert EventQueue.isDispatchThread(); // On AWT event thread
+		if (removeListener) {
+			awtDialog.removeComponentListener(this);
+		}
+		// Note: there is no isModal() check here because the dialog might
+		// have been changed from modal to non-modal after it was opened. In this case
+		// the currently visible dialog would still act modal and we'd need to unblock
+		// SWT here when it goes away.
+		if (modalDialogs.remove(awtDialog)) {
+			display.asyncExec(new Runnable() {
+				public void run() {
+					SwtInputBlocker.unblock();
+				}
+			});
+		}
+	}
+
+	private void handleAddedDialog(final Dialog awtDialog) {
+		assert awtDialog != null;
+		assert modalDialogs != null;
+		assert EventQueue.isDispatchThread(); // On AWT event thread
+		if (modalDialogs.contains(awtDialog) || !awtDialog.isModal() || !awtDialog.isVisible()) {
+			return;
+		}
+		modalDialogs.add(awtDialog);
+		awtDialog.addComponentListener(this);
+		display.asyncExec(new Runnable() {
+			public void run() {
+				SwtInputBlocker.block();
+			}
+		});
+	}
+
+	void requestFocus() {
+		// TODO: this does not always bring the dialog to the top
+		// under some Linux desktops/window managers (e.g. metacity under GNOME).
+		EventQueue.invokeLater(new Runnable() {
+			public void run() {
+				assert modalDialogs != null;
+				int size = modalDialogs.size();
+				if (size > 0) {
+					final Dialog awtDialog = modalDialogs.get(size - 1);
+					// In one case, a call to requestFocus() alone does not
+					// bring the AWT dialog to the top. This happens if the
+					// dialog is given a null parent frame. When opened, the dialog
+					// can be hidden by the SWT window even when it obtains focus.
+					// Calling toFront() solves the problem, but...
+					//
+					// There are still problems if the Metal look and feel is in use.
+					// The SWT window will hide the dialog the first time it is
+					// selected. Once the dialog is brought back to the front by
+					// the user, there is no further problem.
+					//
+					// Why? It looks like SWT is not being notified of lost focus when
+					// the Metal dialog first opens; subsequently, when focus is regained, the
+					// focus gain event is not posted to the SwtInputBlocker.
+					//
+					// The workaround is to use Windows look and feel, rather than Metal.
+					awtDialog.requestFocus();
+					awtDialog.toFront();
+				}
+			}
+		});
+	}
+
+	private void handleOpenedWindow(WindowEvent event) {
+		assert event != null;
+		assert EventQueue.isDispatchThread(); // On AWT event thread
+		Window window = event.getWindow();
+		if (window instanceof Dialog) {
+			handleAddedDialog((Dialog) window);
+		}
+	}
+
+	private void handleClosedWindow(WindowEvent event) {
+		assert event != null;
+		assert EventQueue.isDispatchThread(); // On AWT event thread
+		// Dispose-based close
+		Window window = event.getWindow();
+		if (window instanceof Dialog) {
+			// Remove dialog and component listener
+			handleRemovedDialog((Dialog) window, true);
+		}
+	}
+
+	private void handleClosingWindow(WindowEvent event) {
+		assert event != null;
+		assert EventQueue.isDispatchThread(); // On AWT event thread
+		// System-based close
+		Window window = event.getWindow();
+		if (window instanceof Dialog) {
+			final Dialog dialog = (Dialog) window;
+			// Defer until later. Bad things happen if
+			// handleRemovedDialog() is called directly from
+			// this event handler. The Swing dialog does not close
+			// properly and its modality remains in effect.
+			EventQueue.invokeLater(new Runnable() {
+				public void run() {
+					// Remove dialog and component listener
+					handleRemovedDialog(dialog, true);
+				}
+			});
+		}
+	}
+
+	public void eventDispatched(AWTEvent event) {
+		assert event != null;
+		assert EventQueue.isDispatchThread(); // On AWT event thread
+		switch (event.getID()) {
+		case WindowEvent.WINDOW_OPENED :
+			handleOpenedWindow((WindowEvent) event);
+			break;
+		case WindowEvent.WINDOW_CLOSED :
+			handleClosedWindow((WindowEvent) event);
+			break;
+		case WindowEvent.WINDOW_CLOSING :
+			handleClosingWindow((WindowEvent) event);
+			break;
+		default :
+			break;
+		}
+	}
+
+	public void componentHidden(ComponentEvent e) {
+		assert e != null;
+		assert EventQueue.isDispatchThread(); // On AWT event thread
+		Object obj = e.getSource();
+		if (obj instanceof Dialog) {
+			// Remove dialog but keep listener in place so that we know if/when it is set visible
+			handleRemovedDialog((Dialog) obj, false);
+		}
+	}
+
+	public void componentShown(ComponentEvent e) {
+		assert e != null;
+		assert EventQueue.isDispatchThread(); // On AWT event thread
+		Object obj = e.getSource();
+		if (obj instanceof Dialog) {
+			handleAddedDialog((Dialog) obj);
+		}
+	}
+
+	public void componentResized(ComponentEvent e) {
+	}
+
+	public void componentMoved(ComponentEvent e) {
+	}
 }
diff --git a/org.eclipse.wb.swing/src/swingintegration/example/AwtEnvironment.java b/org.eclipse.wb.swing/src/swingintegration/example/AwtEnvironment.java
index 7149a732d..73d39f666 100644
--- a/org.eclipse.wb.swing/src/swingintegration/example/AwtEnvironment.java
+++ b/org.eclipse.wb.swing/src/swingintegration/example/AwtEnvironment.java
@@ -43,269 +43,269 @@
  * An instance of this class can be obtained with the static {@link #getInstance(Display)} method.
  */
 public final class AwtEnvironment {
-  // TODO: add pop-up dismissal and font synchronization support to this level?
-  //private static final String GTK_LOOK_AND_FEEL_NAME = "com.sun.java.swing.plaf.gtk.GTKLookAndFeel"; //$NON-NLS-1$
-  private static AwtEnvironment instance = null;
-  private static boolean isLookAndFeelInitialized = false;
-  private final Display display;
-  private final AwtDialogListener dialogListener;
+	// TODO: add pop-up dismissal and font synchronization support to this level?
+	//private static final String GTK_LOOK_AND_FEEL_NAME = "com.sun.java.swing.plaf.gtk.GTKLookAndFeel"; //$NON-NLS-1$
+	private static AwtEnvironment instance = null;
+	private static boolean isLookAndFeelInitialized = false;
+	private final Display display;
+	private final AwtDialogListener dialogListener;
 
-  /**
-   * Returns the single instance of AwtEnvironment for the given display. On the first call to this
-   * method, the necessary initialization to allow AWT/Swing code to run properly within an Eclipse
-   * application is done. This initialization includes setting the approprite look and feel and
-   * registering the necessary listeners to ensure proper behavior of modal dialogs.
-   * <p>
-   * The first call to this method must occur before any AWT/Swing APIs are called.
-   * <p>
-   * The current implementation limits the number of instances of AwtEnvironment to one. If this
-   * method is called with a display different to one used on a previous call,
-   * {@link UnsupportedOperationException} is thrown.
-   *
-   * @param display
-   *          the non-null SWT display
-   * @return the AWT environment
-   * @exception IllegalArgumentException
-   *              <ul>
-   *              <li>ERROR_NULL_ARGUMENT - if the display is null</li>
-   *              </ul>
-   * @exception UnsupportedOperationException
-   *              - on attempt to use multiple displays.
-   */
-  public static AwtEnvironment getInstance(Display display) {
-    // For now assume a single display. If necessary, this implementation
-    // can be changed to create multiple environments for multiple display
-    // applications.
-    // TODO: add multiple display support
-    if (display == null) {
-      SWT.error(SWT.ERROR_NULL_ARGUMENT);
-      return null;
-    }
-    if (instance != null && !display.equals(instance.display)) {
-      throw new UnsupportedOperationException("Multiple displays not supported");
-    }
-    synchronized (AwtEnvironment.class) {
-      if (instance == null) {
-        instance = new AwtEnvironment(display);
-      }
-    }
-    return instance;
-  }
+	/**
+	 * Returns the single instance of AwtEnvironment for the given display. On the first call to this
+	 * method, the necessary initialization to allow AWT/Swing code to run properly within an Eclipse
+	 * application is done. This initialization includes setting the approprite look and feel and
+	 * registering the necessary listeners to ensure proper behavior of modal dialogs.
+	 * <p>
+	 * The first call to this method must occur before any AWT/Swing APIs are called.
+	 * <p>
+	 * The current implementation limits the number of instances of AwtEnvironment to one. If this
+	 * method is called with a display different to one used on a previous call,
+	 * {@link UnsupportedOperationException} is thrown.
+	 *
+	 * @param display
+	 *          the non-null SWT display
+	 * @return the AWT environment
+	 * @exception IllegalArgumentException
+	 *              <ul>
+	 *              <li>ERROR_NULL_ARGUMENT - if the display is null</li>
+	 *              </ul>
+	 * @exception UnsupportedOperationException
+	 *              - on attempt to use multiple displays.
+	 */
+	public static AwtEnvironment getInstance(Display display) {
+		// For now assume a single display. If necessary, this implementation
+		// can be changed to create multiple environments for multiple display
+		// applications.
+		// TODO: add multiple display support
+		if (display == null) {
+			SWT.error(SWT.ERROR_NULL_ARGUMENT);
+			return null;
+		}
+		if (instance != null && !display.equals(instance.display)) {
+			throw new UnsupportedOperationException("Multiple displays not supported");
+		}
+		synchronized (AwtEnvironment.class) {
+			if (instance == null) {
+				instance = new AwtEnvironment(display);
+			}
+		}
+		return instance;
+	}
 
-  // Private constructor - clients use getInstance() to obtain instances
-  private AwtEnvironment(Display display) {
-    assert display != null;
-    /*
-     * This property removes a large amount of flicker from embedded swing
-     * components. Ideally it would not be set until EmbeddedSwingComposite
-     * is used, but since its value is read once and cached by AWT, it needs
-     * to be set before any AWT/Swing APIs are called.
-     */
-    // TODO: this is effective only on Windows.
-    System.setProperty("sun.awt.noerasebackground", "true"); //$NON-NLS-1$//$NON-NLS-2$
-    /*
-     * RCP apps always want the standard platform look and feel It's
-     * important to wait for the L&F to be set so that any subsequent calls
-     * to createFrame() will be return a frame with the proper L&F (note
-     * that createFrame() happens on the SWT thread).
-     *
-     * The call to invokeAndWait is safe because
-     * the first call AwtEnvironment.getInstance should happen
-     * before any (potential deadlocking) activity occurs on the
-     * AWT thread.
-     */
-    try {
-      EventQueue.invokeAndWait(new Runnable() {
-        public void run() {
-          setSystemLookAndFeel();
-        }
-      });
-    } catch (InterruptedException e) {
-      SWT.error(SWT.ERROR_FAILED_EXEC, e);
-    } catch (InvocationTargetException e) {
-      SWT.error(SWT.ERROR_FAILED_EXEC, e);
-    }
-    this.display = display;
-    // Listen for AWT modal dialogs to make them modal application-wide
-    dialogListener = new AwtDialogListener(display);
-  }
+	// Private constructor - clients use getInstance() to obtain instances
+	private AwtEnvironment(Display display) {
+		assert display != null;
+		/*
+		 * This property removes a large amount of flicker from embedded swing
+		 * components. Ideally it would not be set until EmbeddedSwingComposite
+		 * is used, but since its value is read once and cached by AWT, it needs
+		 * to be set before any AWT/Swing APIs are called.
+		 */
+		// TODO: this is effective only on Windows.
+		System.setProperty("sun.awt.noerasebackground", "true"); //$NON-NLS-1$//$NON-NLS-2$
+		/*
+		 * RCP apps always want the standard platform look and feel It's
+		 * important to wait for the L&F to be set so that any subsequent calls
+		 * to createFrame() will be return a frame with the proper L&F (note
+		 * that createFrame() happens on the SWT thread).
+		 *
+		 * The call to invokeAndWait is safe because
+		 * the first call AwtEnvironment.getInstance should happen
+		 * before any (potential deadlocking) activity occurs on the
+		 * AWT thread.
+		 */
+		try {
+			EventQueue.invokeAndWait(new Runnable() {
+				public void run() {
+					setSystemLookAndFeel();
+				}
+			});
+		} catch (InterruptedException e) {
+			SWT.error(SWT.ERROR_FAILED_EXEC, e);
+		} catch (InvocationTargetException e) {
+			SWT.error(SWT.ERROR_FAILED_EXEC, e);
+		}
+		this.display = display;
+		// Listen for AWT modal dialogs to make them modal application-wide
+		dialogListener = new AwtDialogListener(display);
+	}
 
-  /**
-   * Invokes the given runnable in the AWT event thread while blocking user input on the SWT event
-   * thread. The SWT event thread will remain blocked until the runnable task completes, at which
-   * point this method will return.
-   * <p>
-   * This method is useful for displayng modal AWT/Swing dialogs from the SWT event thread. The
-   * modal AWT/Swing dialog will always block input across the whole application, but not until it
-   * appears. By calling this method, it is guaranteed that SWT input is blocked immediately, even
-   * before the AWT/Swing dialog appears.
-   * <p>
-   * To avoid unnecessary flicker, AWT/Swing dialogs should have their parent set to a frame
-   * returned by {@link #createDialogParentFrame()}.
-   * <p>
-   * This method must be called from the SWT event thread.
-   *
-   * @param runnable
-   *          the code to schedule on the AWT event thread
-   * @exception IllegalArgumentException
-   *              <ul>
-   *              <li>ERROR_NULL_ARGUMENT - if the runnable is null</li>
-   *              </ul>
-   * @exception SWTException
-   *              <ul>
-   *              <li>ERROR_THREAD_INVALID_ACCESS - if not called from the SWT event thread
-   *              </ul>
-   */
-  public void invokeAndBlockSwt(final Runnable runnable) {
-    assert display != null;
-    /*
-     * This code snippet is based on the following thread on
-     * news.eclipse.platform.swt:
-     * http://dev.eclipse.org/newslists/news.eclipse.platform.swt/msg24234.html
-     */
-    if (runnable == null) {
-      SWT.error(SWT.ERROR_NULL_ARGUMENT);
-      return;
-    }
-    if (display != Display.getCurrent()) {
-      SWT.error(SWT.ERROR_THREAD_INVALID_ACCESS);
-    }
-    // Switch to the AWT thread...
-    EventQueue.invokeLater(new Runnable() {
-      public void run() {
-        try {
-          // do swing work...
-          runnable.run();
-        } finally {
-          display.asyncExec(new Runnable() {
-            public void run() {
-              // Unblock SWT
-              SwtInputBlocker.unblock();
-            }
-          });
-        }
-      }
-    });
-    // Prevent user input on SWT components
-    SwtInputBlocker.block();
-  }
+	/**
+	 * Invokes the given runnable in the AWT event thread while blocking user input on the SWT event
+	 * thread. The SWT event thread will remain blocked until the runnable task completes, at which
+	 * point this method will return.
+	 * <p>
+	 * This method is useful for displayng modal AWT/Swing dialogs from the SWT event thread. The
+	 * modal AWT/Swing dialog will always block input across the whole application, but not until it
+	 * appears. By calling this method, it is guaranteed that SWT input is blocked immediately, even
+	 * before the AWT/Swing dialog appears.
+	 * <p>
+	 * To avoid unnecessary flicker, AWT/Swing dialogs should have their parent set to a frame
+	 * returned by {@link #createDialogParentFrame()}.
+	 * <p>
+	 * This method must be called from the SWT event thread.
+	 *
+	 * @param runnable
+	 *          the code to schedule on the AWT event thread
+	 * @exception IllegalArgumentException
+	 *              <ul>
+	 *              <li>ERROR_NULL_ARGUMENT - if the runnable is null</li>
+	 *              </ul>
+	 * @exception SWTException
+	 *              <ul>
+	 *              <li>ERROR_THREAD_INVALID_ACCESS - if not called from the SWT event thread
+	 *              </ul>
+	 */
+	public void invokeAndBlockSwt(final Runnable runnable) {
+		assert display != null;
+		/*
+		 * This code snippet is based on the following thread on
+		 * news.eclipse.platform.swt:
+		 * http://dev.eclipse.org/newslists/news.eclipse.platform.swt/msg24234.html
+		 */
+		if (runnable == null) {
+			SWT.error(SWT.ERROR_NULL_ARGUMENT);
+			return;
+		}
+		if (display != Display.getCurrent()) {
+			SWT.error(SWT.ERROR_THREAD_INVALID_ACCESS);
+		}
+		// Switch to the AWT thread...
+		EventQueue.invokeLater(new Runnable() {
+			public void run() {
+				try {
+					// do swing work...
+					runnable.run();
+				} finally {
+					display.asyncExec(new Runnable() {
+						public void run() {
+							// Unblock SWT
+							SwtInputBlocker.unblock();
+						}
+					});
+				}
+			}
+		});
+		// Prevent user input on SWT components
+		SwtInputBlocker.block();
+	}
 
-  /**
-   * Creates an AWT frame suitable as a parent for AWT/Swing dialogs.
-   * <p>
-   * This method must be called from the SWT event thread. There must be an active shell associated
-   * with the environment's display.
-   * <p>
-   * The created frame is a non-visible child of the active shell and will be disposed when that
-   * shell is disposed.
-   * <p>
-   * See {@link #createDialogParentFrame(Shell)} for more details.
-   *
-   * @return a {@link java.awt.Frame} to be used for parenting dialogs
-   * @exception SWTException
-   *              <ul>
-   *              <li>ERROR_THREAD_INVALID_ACCESS - if not called from the SWT event thread
-   *              </ul>
-   * @exception IllegalStateException
-   *              if the current display has no shells
-   */
-  public Frame createDialogParentFrame() {
-    if (display != Display.getCurrent()) {
-      SWT.error(SWT.ERROR_THREAD_INVALID_ACCESS);
-    }
-    Shell parent = display.getActiveShell();
-    if (parent == null) {
-      throw new IllegalStateException("No Active Shell");
-    }
-    return createDialogParentFrame(parent);
-  }
+	/**
+	 * Creates an AWT frame suitable as a parent for AWT/Swing dialogs.
+	 * <p>
+	 * This method must be called from the SWT event thread. There must be an active shell associated
+	 * with the environment's display.
+	 * <p>
+	 * The created frame is a non-visible child of the active shell and will be disposed when that
+	 * shell is disposed.
+	 * <p>
+	 * See {@link #createDialogParentFrame(Shell)} for more details.
+	 *
+	 * @return a {@link java.awt.Frame} to be used for parenting dialogs
+	 * @exception SWTException
+	 *              <ul>
+	 *              <li>ERROR_THREAD_INVALID_ACCESS - if not called from the SWT event thread
+	 *              </ul>
+	 * @exception IllegalStateException
+	 *              if the current display has no shells
+	 */
+	public Frame createDialogParentFrame() {
+		if (display != Display.getCurrent()) {
+			SWT.error(SWT.ERROR_THREAD_INVALID_ACCESS);
+		}
+		Shell parent = display.getActiveShell();
+		if (parent == null) {
+			throw new IllegalStateException("No Active Shell");
+		}
+		return createDialogParentFrame(parent);
+	}
 
-  /**
-   * Creates an AWT frame suitable as a parent for AWT/Swing dialogs.
-   * <p>
-   * This method must be called from the SWT event thread. There must be an active shell associated
-   * with the environment's display.
-   * <p>
-   * The created frame is a non-visible child of the given shell and will be disposed when that
-   * shell is disposed.
-   * <p>
-   * This method is useful for creating a frame to parent any AWT/Swing dialogs created for use
-   * inside a SWT application. A modal AWT/Swing dialogs will flicker less if its parent is set to
-   * the returned frame rather than to null or to an independently created {@link java.awt.Frame}.
-   *
-   * @return a {@link java.awt.Frame} to be used for parenting dialogs
-   * @exception SWTException
-   *              <ul>
-   *              <li>ERROR_THREAD_INVALID_ACCESS - if not called from the SWT event thread
-   *              </ul>
-   * @exception IllegalStateException
-   *              if the current display has no shells
-   */
-  public Frame createDialogParentFrame(Shell parent) {
-    if (parent == null) {
-      SWT.error(SWT.ERROR_NULL_ARGUMENT);
-    }
-    if (display != Display.getCurrent()) {
-      SWT.error(SWT.ERROR_THREAD_INVALID_ACCESS);
-    }
-    Shell shell = new Shell(parent);
-    shell.setVisible(false);
-    Composite composite = new Composite(shell, SWT.EMBEDDED);
-    return SWT_AWT.new_Frame(composite);
-  }
+	/**
+	 * Creates an AWT frame suitable as a parent for AWT/Swing dialogs.
+	 * <p>
+	 * This method must be called from the SWT event thread. There must be an active shell associated
+	 * with the environment's display.
+	 * <p>
+	 * The created frame is a non-visible child of the given shell and will be disposed when that
+	 * shell is disposed.
+	 * <p>
+	 * This method is useful for creating a frame to parent any AWT/Swing dialogs created for use
+	 * inside a SWT application. A modal AWT/Swing dialogs will flicker less if its parent is set to
+	 * the returned frame rather than to null or to an independently created {@link java.awt.Frame}.
+	 *
+	 * @return a {@link java.awt.Frame} to be used for parenting dialogs
+	 * @exception SWTException
+	 *              <ul>
+	 *              <li>ERROR_THREAD_INVALID_ACCESS - if not called from the SWT event thread
+	 *              </ul>
+	 * @exception IllegalStateException
+	 *              if the current display has no shells
+	 */
+	public Frame createDialogParentFrame(Shell parent) {
+		if (parent == null) {
+			SWT.error(SWT.ERROR_NULL_ARGUMENT);
+		}
+		if (display != Display.getCurrent()) {
+			SWT.error(SWT.ERROR_THREAD_INVALID_ACCESS);
+		}
+		Shell shell = new Shell(parent);
+		shell.setVisible(false);
+		Composite composite = new Composite(shell, SWT.EMBEDDED);
+		return SWT_AWT.new_Frame(composite);
+	}
 
-  // Find a shell to use, giving preference to the active shell.
-  Shell getShell() {
-    Shell shell = display.getActiveShell();
-    if (shell == null) {
-      Shell[] allShells = display.getShells();
-      if (allShells.length > 0) {
-        shell = allShells[0];
-      }
-    }
-    return shell;
-  }
+	// Find a shell to use, giving preference to the active shell.
+	Shell getShell() {
+		Shell shell = display.getActiveShell();
+		if (shell == null) {
+			Shell[] allShells = display.getShells();
+			if (allShells.length > 0) {
+				shell = allShells[0];
+			}
+		}
+		return shell;
+	}
 
-  void requestAwtDialogFocus() {
-    assert dialogListener != null;
-    dialogListener.requestFocus();
-  }
+	void requestAwtDialogFocus() {
+		assert dialogListener != null;
+		dialogListener.requestFocus();
+	}
 
-  private void setSystemLookAndFeel() {
-    assert EventQueue.isDispatchThread(); // On AWT event thread
-    if (!isLookAndFeelInitialized) {
-      isLookAndFeelInitialized = true;
-      try {
-        String systemLaf = UIManager.getSystemLookAndFeelClassName();
-        //String xplatLaf = UIManager.getCrossPlatformLookAndFeelClassName();
-        // Java makes metal the system look and feel if running under a
-        // non-gnome Linux desktop. Fix that here, if the RCP itself is
-        // running
-        // with the GTK windowing system set.
-        //
-        // mitin_aa: commented out due to http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6922280
-        /*if (xplatLaf.equals(systemLaf) && Platform.isGtk()) {
+	private void setSystemLookAndFeel() {
+		assert EventQueue.isDispatchThread(); // On AWT event thread
+		if (!isLookAndFeelInitialized) {
+			isLookAndFeelInitialized = true;
+			try {
+				String systemLaf = UIManager.getSystemLookAndFeelClassName();
+				//String xplatLaf = UIManager.getCrossPlatformLookAndFeelClassName();
+				// Java makes metal the system look and feel if running under a
+				// non-gnome Linux desktop. Fix that here, if the RCP itself is
+				// running
+				// with the GTK windowing system set.
+				//
+				// mitin_aa: commented out due to http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6922280
+				/*if (xplatLaf.equals(systemLaf) && Platform.isGtk()) {
             systemLaf = GTK_LOOK_AND_FEEL_NAME;
         }*/
-        UIManager.setLookAndFeel(systemLaf);
-      } catch (ClassNotFoundException e) {
-        // TODO Auto-generated catch block
-        e.printStackTrace();
-      } catch (InstantiationException e) {
-        // TODO Auto-generated catch block
-        e.printStackTrace();
-      } catch (IllegalAccessException e) {
-        // TODO Auto-generated catch block
-        e.printStackTrace();
-      } catch (UnsupportedLookAndFeelException e) {
-        // TODO Auto-generated catch block
-        e.printStackTrace();
-      }
-    }
-  }
+				UIManager.setLookAndFeel(systemLaf);
+			} catch (ClassNotFoundException e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+			} catch (InstantiationException e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+			} catch (IllegalAccessException e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+			} catch (UnsupportedLookAndFeelException e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+			}
+		}
+	}
 
-  // This method is called by unit tests
-  static void reset() {
-    instance = null;
-  }
+	// This method is called by unit tests
+	static void reset() {
+		instance = null;
+	}
 }
diff --git a/org.eclipse.wb.swing/src/swingintegration/example/AwtFocusHandler.java b/org.eclipse.wb.swing/src/swingintegration/example/AwtFocusHandler.java
index ec67bff63..bf014f6f5 100644
--- a/org.eclipse.wb.swing/src/swingintegration/example/AwtFocusHandler.java
+++ b/org.eclipse.wb.swing/src/swingintegration/example/AwtFocusHandler.java
@@ -28,202 +28,202 @@
 import javax.swing.text.JTextComponent;
 
 class AwtFocusHandler implements FocusListener, ContainerListener, WindowFocusListener {
-  private final Frame frame;
-  private SwtFocusHandler swtHandler;
-  private boolean awtHasFocus = false;
-  private Component currentComponent = null;
-
-  AwtFocusHandler(Frame frame) {
-    assert frame != null;
-    this.frame = frame;
-    frame.addContainerListener(new RecursiveContainerListener(this));
-    frame.addWindowFocusListener(this);
-  }
-
-  void setSwtHandler(SwtFocusHandler handler) {
-    assert handler != null;
-    assert swtHandler == null; // this method is meant to be called once
-    swtHandler = handler;
-  }
-
-  void gainFocus() {
-    assert frame != null;
-    // assert !awtHasFocus;
-    assert EventQueue.isDispatchThread(); // On AWT event thread
-    FocusTraversalPolicy policy = frame.getFocusTraversalPolicy();
-    Component component;
-    if (policy instanceof EmbeddedChildFocusTraversalPolicy) {
-      EmbeddedChildFocusTraversalPolicy embeddedPolicy = (EmbeddedChildFocusTraversalPolicy) policy;
-      component = embeddedPolicy.getCurrentComponent(frame);
-    } else {
-      // TODO: direction based?
-      component = policy.getDefaultComponent(frame);
-    }
-    if (component != null) {
-      // System.out.println("Requesting focus for component: " + component);
-      component.requestFocus();
-      // TODO: else case error? If not, consider moving flag setting below into this if
-    }
-    awtHasFocus = true;
-  }
-
-  /**
-   * Moves focus back to the next SWT component
-   */
-  void transferFocusNext() {
-    assert swtHandler != null;
-    assert awtHasFocus;
-    awtHasFocus = false;
-    swtHandler.gainFocusNext();
-  }
-
-  /**
-   * Moves focus back to the previous SWT component
-   */
-  void transferFocusPrevious() {
-    assert swtHandler != null;
-    assert awtHasFocus;
-    awtHasFocus = false;
-    swtHandler.gainFocusPrevious();
-  }
-
-  boolean awtHasFocus() {
-    return awtHasFocus;
-  }
-
-  Component getCurrentComponent() {
-    return currentComponent;
-  }
-
-  // ..................... Listener implementations
-  public void focusGained(FocusEvent e) {
-    assert e != null;
-    assert EventQueue.isDispatchThread(); // On AWT event thread
-    // System.out.println("gained (awt). component = " + e.getComponent() + ", opposite = " + e.getOppositeComponent());
-    currentComponent = e.getComponent();
-  }
-
-  public void focusLost(FocusEvent e) {
-    // System.out.println("component focus lost (awt). opposite = " + e.getOppositeComponent());
-    // Intentionally leaving currentComponent set. When window focus is lost,
-    // it will be needed.
-  }
-
-  public void componentAdded(ContainerEvent e) {
-    assert e != null;
-    assert EventQueue.isDispatchThread(); // On AWT event thread
-    e.getChild().addFocusListener(this);
-  }
-
-  public void componentRemoved(ContainerEvent e) {
-    assert e != null;
-    assert EventQueue.isDispatchThread(); // On AWT event thread
-    e.getChild().removeFocusListener(this);
-  }
-
-  public void windowGainedFocus(WindowEvent e) {
-    assert EventQueue.isDispatchThread(); // On AWT event thread
-    // System.out.println("WindowFocusListener.windowGainedFocus");
-    awtHasFocus = true;
-  }
-
-  public void windowLostFocus(WindowEvent e) {
-    assert e != null;
-    assert swtHandler != null;
-    assert EventQueue.isDispatchThread(); // On AWT event thread
-    // System.out.println("WindowFocusListener.windowLostFocus");
-    // Dismiss any popup menus that are
-    // open when losing focus. This prevents situations where
-    // multiple popup menus are visible at the same time. In JDK 1.4 and earlier,
-    // the dismissal is not done automatically. In JDK 1.5, this code is
-    // unnecessary, but it doesn't seem to hurt anything.
-    // TODO: verify this is OK on other windowing systems
-    // TODO: disable in post-1.4 environments
-    /* boolean popupShown = */hidePopups();
-    // If focus is being lost to the parent SWT composite, then
-    // grab it back for AWT and return. Normally the parent SWT composite will
-    // do this for us, but it will not see a focus gained event when focus
-    // is transferred to it from its AWT frame child.
-    // This happens, for example, if an AWT control has focus and the
-    // tab of a containing (already active) view is clicked.
-    //
-    // However, don't grab back focus if a popup was hidden above. The popup
-    // area will not be properly redrawn (the popup, or part of it, will
-    // appear to be still there.
-    //if (!popupShown && swtHandler.hasFocus()) {
-    // System.out.println("**** Taking back focus: " + e);
-    // This seems to have side effects, so it's commented out for now.
-    // (Sometimes, it forces the workbench window to the foreground when another
-    // program's window is selected.)
-    // TODO: find an alternate approach to reassert focus
-    // gainFocus();
-    // return;
-    //}
-    // On a normal change of focus, Swing will turn off any selection
-    // in a text field to help indicate focus is lost. This won't happen
-    // automatically when transferring to SWT, so turn off the selection
-    // manually.
-    if (currentComponent instanceof JTextComponent) {
-      Caret caret = ((JTextComponent) currentComponent).getCaret();
-      if (caret != null) {
-        caret.setSelectionVisible(false);
-      }
-    }
-    awtHasFocus = false;
-  }
-
-  // Returns true if any popup has been hidden
-  private boolean hidePopups() {
-    boolean result = false;
-    List<JPopupMenu> popups = Lists.newArrayList();
-    assert EventQueue.isDispatchThread(); // On AWT event thread
-    // Look for popups inside the frame's component hierarchy.
-    // Lightweight popups will be found here.
-    findContainedPopups(frame, popups);
-    // Also look for popups in the frame's window hierarchy.
-    // Heavyweight popups will be found here.
-    findOwnedPopups(frame, popups);
-    // System.out.println("Hiding popups, count=" + popups.size());
-    for (JPopupMenu popup : popups) {
-      if (popup.isVisible()) {
-        result = true;
-        popup.setVisible(false);
-      }
-    }
-    return result;
-  }
-
-  private void findOwnedPopups(Window window, List<JPopupMenu> popups) {
-    assert window != null;
-    assert EventQueue.isDispatchThread(); // On AWT event thread
-    Window[] ownedWindows = window.getOwnedWindows();
-    for (Window ownedWindow : ownedWindows) {
-      findContainedPopups(ownedWindow, popups);
-      findOwnedPopups(ownedWindow, popups);
-    }
-  }
-
-  private void findContainedPopups(Container container, List<JPopupMenu> popups) {
-    assert container != null;
-    assert popups != null;
-    assert EventQueue.isDispatchThread(); // On AWT event thread
-    Component[] components = container.getComponents();
-    for (int i = 0; i < components.length; i++) {
-      Component c = components[i];
-      // JPopupMenu is a container, so check for it first
-      if (c instanceof JPopupMenu) {
-        popups.add((JPopupMenu) c);
-      } else if (c instanceof Container) {
-        findContainedPopups((Container) c, popups);
-      }
-    }
-  }
-
-  void postHidePopups() {
-    EventQueue.invokeLater(new Runnable() {
-      public void run() {
-        hidePopups();
-      }
-    });
-  }
+	private final Frame frame;
+	private SwtFocusHandler swtHandler;
+	private boolean awtHasFocus = false;
+	private Component currentComponent = null;
+
+	AwtFocusHandler(Frame frame) {
+		assert frame != null;
+		this.frame = frame;
+		frame.addContainerListener(new RecursiveContainerListener(this));
+		frame.addWindowFocusListener(this);
+	}
+
+	void setSwtHandler(SwtFocusHandler handler) {
+		assert handler != null;
+		assert swtHandler == null; // this method is meant to be called once
+		swtHandler = handler;
+	}
+
+	void gainFocus() {
+		assert frame != null;
+		// assert !awtHasFocus;
+		assert EventQueue.isDispatchThread(); // On AWT event thread
+		FocusTraversalPolicy policy = frame.getFocusTraversalPolicy();
+		Component component;
+		if (policy instanceof EmbeddedChildFocusTraversalPolicy) {
+			EmbeddedChildFocusTraversalPolicy embeddedPolicy = (EmbeddedChildFocusTraversalPolicy) policy;
+			component = embeddedPolicy.getCurrentComponent(frame);
+		} else {
+			// TODO: direction based?
+			component = policy.getDefaultComponent(frame);
+		}
+		if (component != null) {
+			// System.out.println("Requesting focus for component: " + component);
+			component.requestFocus();
+			// TODO: else case error? If not, consider moving flag setting below into this if
+		}
+		awtHasFocus = true;
+	}
+
+	/**
+	 * Moves focus back to the next SWT component
+	 */
+	void transferFocusNext() {
+		assert swtHandler != null;
+		assert awtHasFocus;
+		awtHasFocus = false;
+		swtHandler.gainFocusNext();
+	}
+
+	/**
+	 * Moves focus back to the previous SWT component
+	 */
+	void transferFocusPrevious() {
+		assert swtHandler != null;
+		assert awtHasFocus;
+		awtHasFocus = false;
+		swtHandler.gainFocusPrevious();
+	}
+
+	boolean awtHasFocus() {
+		return awtHasFocus;
+	}
+
+	Component getCurrentComponent() {
+		return currentComponent;
+	}
+
+	// ..................... Listener implementations
+	public void focusGained(FocusEvent e) {
+		assert e != null;
+		assert EventQueue.isDispatchThread(); // On AWT event thread
+		// System.out.println("gained (awt). component = " + e.getComponent() + ", opposite = " + e.getOppositeComponent());
+		currentComponent = e.getComponent();
+	}
+
+	public void focusLost(FocusEvent e) {
+		// System.out.println("component focus lost (awt). opposite = " + e.getOppositeComponent());
+		// Intentionally leaving currentComponent set. When window focus is lost,
+		// it will be needed.
+	}
+
+	public void componentAdded(ContainerEvent e) {
+		assert e != null;
+		assert EventQueue.isDispatchThread(); // On AWT event thread
+		e.getChild().addFocusListener(this);
+	}
+
+	public void componentRemoved(ContainerEvent e) {
+		assert e != null;
+		assert EventQueue.isDispatchThread(); // On AWT event thread
+		e.getChild().removeFocusListener(this);
+	}
+
+	public void windowGainedFocus(WindowEvent e) {
+		assert EventQueue.isDispatchThread(); // On AWT event thread
+		// System.out.println("WindowFocusListener.windowGainedFocus");
+		awtHasFocus = true;
+	}
+
+	public void windowLostFocus(WindowEvent e) {
+		assert e != null;
+		assert swtHandler != null;
+		assert EventQueue.isDispatchThread(); // On AWT event thread
+		// System.out.println("WindowFocusListener.windowLostFocus");
+		// Dismiss any popup menus that are
+		// open when losing focus. This prevents situations where
+		// multiple popup menus are visible at the same time. In JDK 1.4 and earlier,
+		// the dismissal is not done automatically. In JDK 1.5, this code is
+		// unnecessary, but it doesn't seem to hurt anything.
+		// TODO: verify this is OK on other windowing systems
+		// TODO: disable in post-1.4 environments
+		/* boolean popupShown = */hidePopups();
+		// If focus is being lost to the parent SWT composite, then
+		// grab it back for AWT and return. Normally the parent SWT composite will
+		// do this for us, but it will not see a focus gained event when focus
+		// is transferred to it from its AWT frame child.
+		// This happens, for example, if an AWT control has focus and the
+		// tab of a containing (already active) view is clicked.
+		//
+		// However, don't grab back focus if a popup was hidden above. The popup
+		// area will not be properly redrawn (the popup, or part of it, will
+		// appear to be still there.
+		//if (!popupShown && swtHandler.hasFocus()) {
+		// System.out.println("**** Taking back focus: " + e);
+		// This seems to have side effects, so it's commented out for now.
+		// (Sometimes, it forces the workbench window to the foreground when another
+		// program's window is selected.)
+		// TODO: find an alternate approach to reassert focus
+		// gainFocus();
+		// return;
+		//}
+		// On a normal change of focus, Swing will turn off any selection
+		// in a text field to help indicate focus is lost. This won't happen
+		// automatically when transferring to SWT, so turn off the selection
+		// manually.
+		if (currentComponent instanceof JTextComponent) {
+			Caret caret = ((JTextComponent) currentComponent).getCaret();
+			if (caret != null) {
+				caret.setSelectionVisible(false);
+			}
+		}
+		awtHasFocus = false;
+	}
+
+	// Returns true if any popup has been hidden
+	private boolean hidePopups() {
+		boolean result = false;
+		List<JPopupMenu> popups = Lists.newArrayList();
+		assert EventQueue.isDispatchThread(); // On AWT event thread
+		// Look for popups inside the frame's component hierarchy.
+		// Lightweight popups will be found here.
+		findContainedPopups(frame, popups);
+		// Also look for popups in the frame's window hierarchy.
+		// Heavyweight popups will be found here.
+		findOwnedPopups(frame, popups);
+		// System.out.println("Hiding popups, count=" + popups.size());
+		for (JPopupMenu popup : popups) {
+			if (popup.isVisible()) {
+				result = true;
+				popup.setVisible(false);
+			}
+		}
+		return result;
+	}
+
+	private void findOwnedPopups(Window window, List<JPopupMenu> popups) {
+		assert window != null;
+		assert EventQueue.isDispatchThread(); // On AWT event thread
+		Window[] ownedWindows = window.getOwnedWindows();
+		for (Window ownedWindow : ownedWindows) {
+			findContainedPopups(ownedWindow, popups);
+			findOwnedPopups(ownedWindow, popups);
+		}
+	}
+
+	private void findContainedPopups(Container container, List<JPopupMenu> popups) {
+		assert container != null;
+		assert popups != null;
+		assert EventQueue.isDispatchThread(); // On AWT event thread
+		Component[] components = container.getComponents();
+		for (int i = 0; i < components.length; i++) {
+			Component c = components[i];
+			// JPopupMenu is a container, so check for it first
+			if (c instanceof JPopupMenu) {
+				popups.add((JPopupMenu) c);
+			} else if (c instanceof Container) {
+				findContainedPopups((Container) c, popups);
+			}
+		}
+	}
+
+	void postHidePopups() {
+		EventQueue.invokeLater(new Runnable() {
+			public void run() {
+				hidePopups();
+			}
+		});
+	}
 }
diff --git a/org.eclipse.wb.swing/src/swingintegration/example/CleanResizeListener.java b/org.eclipse.wb.swing/src/swingintegration/example/CleanResizeListener.java
index 254891fec..e40a0022f 100644
--- a/org.eclipse.wb.swing/src/swingintegration/example/CleanResizeListener.java
+++ b/org.eclipse.wb.swing/src/swingintegration/example/CleanResizeListener.java
@@ -15,31 +15,31 @@
 import org.eclipse.swt.widgets.Display;
 
 class CleanResizeListener extends ControlAdapter {
-  private Rectangle oldRect = null;
+	private Rectangle oldRect = null;
 
-  @Override
-  public void controlResized(ControlEvent e) {
-    assert e != null;
-    assert Display.getCurrent() != null; // On SWT event thread
-    // Prevent garbage from Swing lags during resize. Fill exposed areas
-    // with background color.
-    Composite composite = (Composite) e.widget;
-    //Rectangle newRect = composite.getBounds();
-    //newRect = composite.getDisplay().map(composite.getParent(), composite, newRect);
-    Rectangle newRect = composite.getClientArea();
-    if (oldRect != null) {
-      int heightDelta = newRect.height - oldRect.height;
-      int widthDelta = newRect.width - oldRect.width;
-      if (heightDelta > 0 || widthDelta > 0) {
-        GC gc = new GC(composite);
-        try {
-          gc.fillRectangle(newRect.x, oldRect.height, newRect.width, heightDelta);
-          gc.fillRectangle(oldRect.width, newRect.y, widthDelta, newRect.height);
-        } finally {
-          gc.dispose();
-        }
-      }
-    }
-    oldRect = newRect;
-  }
+	@Override
+	public void controlResized(ControlEvent e) {
+		assert e != null;
+		assert Display.getCurrent() != null; // On SWT event thread
+		// Prevent garbage from Swing lags during resize. Fill exposed areas
+		// with background color.
+		Composite composite = (Composite) e.widget;
+		//Rectangle newRect = composite.getBounds();
+		//newRect = composite.getDisplay().map(composite.getParent(), composite, newRect);
+		Rectangle newRect = composite.getClientArea();
+		if (oldRect != null) {
+			int heightDelta = newRect.height - oldRect.height;
+			int widthDelta = newRect.width - oldRect.width;
+			if (heightDelta > 0 || widthDelta > 0) {
+				GC gc = new GC(composite);
+				try {
+					gc.fillRectangle(newRect.x, oldRect.height, newRect.width, heightDelta);
+					gc.fillRectangle(oldRect.width, newRect.y, widthDelta, newRect.height);
+				} finally {
+					gc.dispose();
+				}
+			}
+		}
+		oldRect = newRect;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swing/src/swingintegration/example/EmbeddedChildFocusTraversalPolicy.java b/org.eclipse.wb.swing/src/swingintegration/example/EmbeddedChildFocusTraversalPolicy.java
index 626306a8d..e31b0e0d5 100644
--- a/org.eclipse.wb.swing/src/swingintegration/example/EmbeddedChildFocusTraversalPolicy.java
+++ b/org.eclipse.wb.swing/src/swingintegration/example/EmbeddedChildFocusTraversalPolicy.java
@@ -14,74 +14,74 @@
 import javax.swing.LayoutFocusTraversalPolicy;
 
 class EmbeddedChildFocusTraversalPolicy extends LayoutFocusTraversalPolicy {
-  private static final long serialVersionUID = 0L;
-  private final AwtFocusHandler awtHandler;
+	private static final long serialVersionUID = 0L;
+	private final AwtFocusHandler awtHandler;
 
-  EmbeddedChildFocusTraversalPolicy(AwtFocusHandler handler) {
-    assert handler != null;
-    awtHandler = handler;
-  }
+	EmbeddedChildFocusTraversalPolicy(AwtFocusHandler handler) {
+		assert handler != null;
+		awtHandler = handler;
+	}
 
-  @Override
-  public Component getComponentAfter(Container container, Component component) {
-    assert container != null;
-    assert component != null;
-    assert awtHandler != null;
-    assert EventQueue.isDispatchThread(); // On AWT event thread
-    if (component.equals(getLastComponent(container))) {
-      // Instead of cycling around to the first component, transfer to the next SWT component
-      awtHandler.transferFocusNext();
-      return null;
-    } else {
-      return super.getComponentAfter(container, component);
-    }
-  }
+	@Override
+	public Component getComponentAfter(Container container, Component component) {
+		assert container != null;
+		assert component != null;
+		assert awtHandler != null;
+		assert EventQueue.isDispatchThread(); // On AWT event thread
+		if (component.equals(getLastComponent(container))) {
+			// Instead of cycling around to the first component, transfer to the next SWT component
+			awtHandler.transferFocusNext();
+			return null;
+		} else {
+			return super.getComponentAfter(container, component);
+		}
+	}
 
-  @Override
-  public Component getComponentBefore(Container container, Component component) {
-    assert container != null;
-    assert component != null;
-    assert awtHandler != null;
-    assert EventQueue.isDispatchThread(); // On AWT event thread
-    if (component.equals(getFirstComponent(container))) {
-      // Instead of cycling around to the last component, transfer to the previous SWT component
-      awtHandler.transferFocusPrevious();
-      return null;
-    } else {
-      return super.getComponentBefore(container, component);
-    }
-  }
+	@Override
+	public Component getComponentBefore(Container container, Component component) {
+		assert container != null;
+		assert component != null;
+		assert awtHandler != null;
+		assert EventQueue.isDispatchThread(); // On AWT event thread
+		if (component.equals(getFirstComponent(container))) {
+			// Instead of cycling around to the last component, transfer to the previous SWT component
+			awtHandler.transferFocusPrevious();
+			return null;
+		} else {
+			return super.getComponentBefore(container, component);
+		}
+	}
 
-  @Override
-  public Component getDefaultComponent(Container container) {
-    assert container != null;
-    assert awtHandler != null;
-    assert EventQueue.isDispatchThread(); // On AWT event thread
-    // This is a hack which depends on knowledge of current JDK implementation to
-    // work. The implementation above of getComponentBefore/After
-    // properly returns null when transferring to SWT. However, the calling AWT container
-    // will then immediately try this method to find the next recipient of
-    // focus. But we don't want *any* AWT component to receive focus... it's just
-    // been transferred to SWT. So, this method must return null when AWT does
-    // not own the focus. When AWT *does* own the focus, behave normally.
-    if (awtHandler.awtHasFocus()) {
-      // System.out.println("getDefault: super");
-      return super.getDefaultComponent(container);
-    } else {
-      // System.out.println("getDefault: null");
-      return null;
-    }
-  }
+	@Override
+	public Component getDefaultComponent(Container container) {
+		assert container != null;
+		assert awtHandler != null;
+		assert EventQueue.isDispatchThread(); // On AWT event thread
+		// This is a hack which depends on knowledge of current JDK implementation to
+		// work. The implementation above of getComponentBefore/After
+		// properly returns null when transferring to SWT. However, the calling AWT container
+		// will then immediately try this method to find the next recipient of
+		// focus. But we don't want *any* AWT component to receive focus... it's just
+		// been transferred to SWT. So, this method must return null when AWT does
+		// not own the focus. When AWT *does* own the focus, behave normally.
+		if (awtHandler.awtHasFocus()) {
+			// System.out.println("getDefault: super");
+			return super.getDefaultComponent(container);
+		} else {
+			// System.out.println("getDefault: null");
+			return null;
+		}
+	}
 
-  public Component getCurrentComponent(Container container) {
-    assert container != null;
-    assert awtHandler != null;
-    assert EventQueue.isDispatchThread(); // On AWT event thread
-    Component currentAwtComponent = awtHandler.getCurrentComponent();
-    if (currentAwtComponent != null && container.isAncestorOf(currentAwtComponent)) {
-      return currentAwtComponent;
-    } else {
-      return getDefaultComponent(container);
-    }
-  }
+	public Component getCurrentComponent(Container container) {
+		assert container != null;
+		assert awtHandler != null;
+		assert EventQueue.isDispatchThread(); // On AWT event thread
+		Component currentAwtComponent = awtHandler.getCurrentComponent();
+		if (currentAwtComponent != null && container.isAncestorOf(currentAwtComponent)) {
+			return currentAwtComponent;
+		} else {
+			return getDefaultComponent(container);
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing/src/swingintegration/example/EmbeddedSwingComposite.java b/org.eclipse.wb.swing/src/swingintegration/example/EmbeddedSwingComposite.java
index 4e9c68bd3..aefe7c938 100644
--- a/org.eclipse.wb.swing/src/swingintegration/example/EmbeddedSwingComposite.java
+++ b/org.eclipse.wb.swing/src/swingintegration/example/EmbeddedSwingComposite.java
@@ -97,407 +97,407 @@
  * UI thread to a background thread. The Eclipse jobs API can be used for this purpose.
  */
 public abstract class EmbeddedSwingComposite extends Composite {
-  private static class AwtContext {
-    private final Frame frame;
-    private JComponent swingComponent;
+	private static class AwtContext {
+		private final Frame frame;
+		private JComponent swingComponent;
 
-    AwtContext(Frame frame) {
-      assert frame != null;
-      this.frame = frame;
-    }
+		AwtContext(Frame frame) {
+			assert frame != null;
+			this.frame = frame;
+		}
 
-    Frame getFrame() {
-      return frame;
-    }
+		Frame getFrame() {
+			return frame;
+		}
 
-    void setSwingComponent(JComponent swingComponent) {
-      this.swingComponent = swingComponent;
-    }
+		void setSwingComponent(JComponent swingComponent) {
+			this.swingComponent = swingComponent;
+		}
 
-    JComponent getSwingComponent() {
-      return swingComponent;
-    }
-  }
+		JComponent getSwingComponent() {
+			return swingComponent;
+		}
+	}
 
-  private Font currentSystemFont;
-  private AwtContext awtContext;
-  private AwtFocusHandler awtHandler;
-  private final Listener settingsListener = new Listener() {
-    public void handleEvent(Event event) {
-      handleSettingsChange();
-    }
-  };
-  // This listener helps ensure that Swing popup menus are properly dismissed when
-  // a menu item off the SWT main menu bar is shown.
-  private final Listener menuListener = new Listener() {
-    public void handleEvent(Event event) {
-      assert awtHandler != null;
-      awtHandler.postHidePopups();
-    }
-  };
+	private Font currentSystemFont;
+	private AwtContext awtContext;
+	private AwtFocusHandler awtHandler;
+	private final Listener settingsListener = new Listener() {
+		public void handleEvent(Event event) {
+			handleSettingsChange();
+		}
+	};
+	// This listener helps ensure that Swing popup menus are properly dismissed when
+	// a menu item off the SWT main menu bar is shown.
+	private final Listener menuListener = new Listener() {
+		public void handleEvent(Event event) {
+			assert awtHandler != null;
+			awtHandler.postHidePopups();
+		}
+	};
 
-  /**
-   * Constructs a new instance of this class given its parent and a style value describing its
-   * behavior and appearance.
-   * <p>
-   * This method must be called from the SWT event thread.
-   * <p>
-   * The style value is either one of the style constants defined in class <code>SWT</code> which is
-   * applicable to instances of this class, or must be built by <em>bitwise OR</em>'ing together
-   * (that is, using the <code>int</code> "|" operator) two or more of those <code>SWT</code> style
-   * constants. The class description lists the style constants that are applicable to the class.
-   * Style bits are also inherited from superclasses.
-   * </p>
-   * <p>
-   * The styles SWT.EMBEDDED and SWT.NO_BACKGROUND will be added to the specified style. Usually, no
-   * other style bits are needed.
-   *
-   * @param parent
-   *          a widget which will be the parent of the new instance (cannot be null)
-   * @param style
-   *          the style of widget to construct
-   *
-   * @exception IllegalArgumentException
-   *              <ul>
-   *              <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
-   *              </ul>
-   * @exception SWTException
-   *              <ul>
-   *              <li>ERROR_THREAD_INVALID_ACCESS - if not called from the SWT event thread
-   *              </ul>
-   *
-   * @see Widget#getStyle
-   */
-  public EmbeddedSwingComposite(Composite parent, int style) {
-    super(parent, style | SWT.EMBEDDED | SWT.NO_BACKGROUND);
-    setLayout(new FillLayout());
-    currentSystemFont = getFont();
-    // set listeners
-    getDisplay().addListener(SWT.Settings, settingsListener);
-    addListener(SWT.Dispose, new Listener() {
-      public void handleEvent(Event event) {
-        dispose_AWT();
-      }
-    });
-  }
+	/**
+	 * Constructs a new instance of this class given its parent and a style value describing its
+	 * behavior and appearance.
+	 * <p>
+	 * This method must be called from the SWT event thread.
+	 * <p>
+	 * The style value is either one of the style constants defined in class <code>SWT</code> which is
+	 * applicable to instances of this class, or must be built by <em>bitwise OR</em>'ing together
+	 * (that is, using the <code>int</code> "|" operator) two or more of those <code>SWT</code> style
+	 * constants. The class description lists the style constants that are applicable to the class.
+	 * Style bits are also inherited from superclasses.
+	 * </p>
+	 * <p>
+	 * The styles SWT.EMBEDDED and SWT.NO_BACKGROUND will be added to the specified style. Usually, no
+	 * other style bits are needed.
+	 *
+	 * @param parent
+	 *          a widget which will be the parent of the new instance (cannot be null)
+	 * @param style
+	 *          the style of widget to construct
+	 *
+	 * @exception IllegalArgumentException
+	 *              <ul>
+	 *              <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+	 *              </ul>
+	 * @exception SWTException
+	 *              <ul>
+	 *              <li>ERROR_THREAD_INVALID_ACCESS - if not called from the SWT event thread
+	 *              </ul>
+	 *
+	 * @see Widget#getStyle
+	 */
+	public EmbeddedSwingComposite(Composite parent, int style) {
+		super(parent, style | SWT.EMBEDDED | SWT.NO_BACKGROUND);
+		setLayout(new FillLayout());
+		currentSystemFont = getFont();
+		// set listeners
+		getDisplay().addListener(SWT.Settings, settingsListener);
+		addListener(SWT.Dispose, new Listener() {
+			public void handleEvent(Event event) {
+				dispose_AWT();
+			}
+		});
+	}
 
-  /**
-   * Populates the embedded composite with the Swing component.
-   * <p>
-   * This method must be called from the SWT event thread.
-   * <p>
-   * The Swing component will be created by calling {@link #createSwingComponent()}. The creation is
-   * scheduled asynchronously on the AWT event thread. This method does not wait for completion of
-   * this asynchronous task, so it may return before createSwingComponent() is complete.
-   * <p>
-   * The Swing component is created inside a standard Swing containment hierarchy, rooted in a
-   * {@link javax.swing.RootPaneContainer}. Clients can override
-   * {@link #addRootPaneContainer(Frame)} to provide their own root pane container implementation.
-   * <p>
-   * This method can be called multiple times for a single instance. If an embedded frame exists
-   * from a previous call, it is disposed.
-   *
-   * @exception SWTException
-   *              <ul>
-   *              <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li> <li>
-   *              ERROR_THREAD_INVALID_ACCESS - if not called from the SWT event thread
-   *              </ul>
-   */
-  public void populate() {
-    checkWidget();
-    createFrame();
-    scheduleComponentCreation();
-  }
+	/**
+	 * Populates the embedded composite with the Swing component.
+	 * <p>
+	 * This method must be called from the SWT event thread.
+	 * <p>
+	 * The Swing component will be created by calling {@link #createSwingComponent()}. The creation is
+	 * scheduled asynchronously on the AWT event thread. This method does not wait for completion of
+	 * this asynchronous task, so it may return before createSwingComponent() is complete.
+	 * <p>
+	 * The Swing component is created inside a standard Swing containment hierarchy, rooted in a
+	 * {@link javax.swing.RootPaneContainer}. Clients can override
+	 * {@link #addRootPaneContainer(Frame)} to provide their own root pane container implementation.
+	 * <p>
+	 * This method can be called multiple times for a single instance. If an embedded frame exists
+	 * from a previous call, it is disposed.
+	 *
+	 * @exception SWTException
+	 *              <ul>
+	 *              <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li> <li>
+	 *              ERROR_THREAD_INVALID_ACCESS - if not called from the SWT event thread
+	 *              </ul>
+	 */
+	public void populate() {
+		checkWidget();
+		createFrame();
+		scheduleComponentCreation();
+	}
 
-  @Override
-  public Point computeSize(int wHint, int hHint, boolean changed) {
-    // wait for Swing component creation
-    while (awtContext.swingComponent == null) {
-      getDisplay().readAndDispatch();
-    }
-    // return size of Swing component
-    try {
-      final java.awt.Dimension prefSize[] = new java.awt.Dimension[1];
-      SwingImageUtils.runInDispatchThread(new Runnable() {
-        public void run() {
-          prefSize[0] = awtContext.swingComponent.getPreferredSize();
-        }
-      });
-      return new Point(prefSize[0].width, prefSize[0].height);
-    } catch (Throwable e) {
-    }
-    // if exception, use (0, 0)
-    return new Point(0, 0);
-  }
+	@Override
+	public Point computeSize(int wHint, int hHint, boolean changed) {
+		// wait for Swing component creation
+		while (awtContext.swingComponent == null) {
+			getDisplay().readAndDispatch();
+		}
+		// return size of Swing component
+		try {
+			final java.awt.Dimension prefSize[] = new java.awt.Dimension[1];
+			SwingImageUtils.runInDispatchThread(new Runnable() {
+				public void run() {
+					prefSize[0] = awtContext.swingComponent.getPreferredSize();
+				}
+			});
+			return new Point(prefSize[0].width, prefSize[0].height);
+		} catch (Throwable e) {
+		}
+		// if exception, use (0, 0)
+		return new Point(0, 0);
+	}
 
-  /**
-   * Creates the embedded Swing component. This method is called from the AWT event thread.
-   * <p>
-   * Implement this method to provide the Swing component that will be shown inside this composite.
-   * The returned component will be added to the Swing content pane. At least one component must be
-   * created by this method; null is not a valid return value.
-   *
-   * @return a non-null Swing component
-   */
-  protected abstract JComponent createSwingComponent();
+	/**
+	 * Creates the embedded Swing component. This method is called from the AWT event thread.
+	 * <p>
+	 * Implement this method to provide the Swing component that will be shown inside this composite.
+	 * The returned component will be added to the Swing content pane. At least one component must be
+	 * created by this method; null is not a valid return value.
+	 *
+	 * @return a non-null Swing component
+	 */
+	protected abstract JComponent createSwingComponent();
 
-  /**
-   * Adds a root pane container to the embedded AWT frame. Override this to provide your own
-   * {@link javax.swing.RootPaneContainer} implementation. In most cases, it is not necessary to
-   * override this method.
-   * <p>
-   * This method is called from the AWT event thread.
-   * <p>
-   * If you are defining your own root pane container, make sure that there is at least one
-   * heavyweight (AWT) component in the frame's containment hierarchy; otherwise, event processing
-   * will not work correctly. See http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4982522 for
-   * more information.
-   *
-   * @param frame
-   *          the frame to which the root pane container is added
-   * @return a non-null Swing component
-   */
-  protected RootPaneContainer addRootPaneContainer(Frame frame) {
-    assert EventQueue.isDispatchThread(); // On AWT event thread
-    assert frame != null;
-    // It is important to set up the proper top level components in the frame:
-    // 1) For Swing to work properly, Sun documents that there must be an implementor of
-    // javax.swing.RootPaneContainer at the top of the component hierarchy.
-    // 2) For proper event handling there must be a heavyweight
-    // an AWT frame must contain a heavyweight component (see
-    // http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4982522)
-    // 3) The Swing implementation further narrows the options by expecting that the
-    // top of the hierarchy be a JFrame, JDialog, JWindow, or JApplet. See javax.swing.PopupFactory.
-    // All this drives the choice of JApplet for the top level Swing component. It is the
-    // only single component that satisfies all the above. This does not imply that
-    // we have a true applet; in particular, there is no notion of an applet lifecycle in this
-    // context.
-    JApplet applet = new JApplet();
-    // In JRE 1.4, the JApplet makes itself a focus cycle root. This
-    // interferes with the focus handling installed on the parent frame, so
-    // change it back to a non-root here.
-    // TODO: consider moving the focus policy from the Frame down to the JApplet
-    applet.setFocusCycleRoot(false);
-    frame.add(applet);
-    return applet;
-  }
+	/**
+	 * Adds a root pane container to the embedded AWT frame. Override this to provide your own
+	 * {@link javax.swing.RootPaneContainer} implementation. In most cases, it is not necessary to
+	 * override this method.
+	 * <p>
+	 * This method is called from the AWT event thread.
+	 * <p>
+	 * If you are defining your own root pane container, make sure that there is at least one
+	 * heavyweight (AWT) component in the frame's containment hierarchy; otherwise, event processing
+	 * will not work correctly. See http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4982522 for
+	 * more information.
+	 *
+	 * @param frame
+	 *          the frame to which the root pane container is added
+	 * @return a non-null Swing component
+	 */
+	protected RootPaneContainer addRootPaneContainer(Frame frame) {
+		assert EventQueue.isDispatchThread(); // On AWT event thread
+		assert frame != null;
+		// It is important to set up the proper top level components in the frame:
+		// 1) For Swing to work properly, Sun documents that there must be an implementor of
+		// javax.swing.RootPaneContainer at the top of the component hierarchy.
+		// 2) For proper event handling there must be a heavyweight
+		// an AWT frame must contain a heavyweight component (see
+		// http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4982522)
+		// 3) The Swing implementation further narrows the options by expecting that the
+		// top of the hierarchy be a JFrame, JDialog, JWindow, or JApplet. See javax.swing.PopupFactory.
+		// All this drives the choice of JApplet for the top level Swing component. It is the
+		// only single component that satisfies all the above. This does not imply that
+		// we have a true applet; in particular, there is no notion of an applet lifecycle in this
+		// context.
+		JApplet applet = new JApplet();
+		// In JRE 1.4, the JApplet makes itself a focus cycle root. This
+		// interferes with the focus handling installed on the parent frame, so
+		// change it back to a non-root here.
+		// TODO: consider moving the focus policy from the Frame down to the JApplet
+		applet.setFocusCycleRoot(false);
+		frame.add(applet);
+		return applet;
+	}
 
-  /**
-   * Performs custom updates to newly set fonts. This method is called whenever a change to the
-   * system font through the system settings (i.e. control panel) is detected.
-   * <p>
-   * This method is called from the AWT event thread.
-   * <p>
-   * In most cases it is not necessary to override this method. Normally, the implementation of this
-   * class will automatically propogate font changes to the embedded Swing components through
-   * Swing's Look and Feel support. However, if additional special processing is necessary, it can
-   * be done inside this method.
-   *
-   * @param newFont
-   *          New AWT font
-   */
-  protected void updateAwtFont(java.awt.Font newFont) {
-  }
+	/**
+	 * Performs custom updates to newly set fonts. This method is called whenever a change to the
+	 * system font through the system settings (i.e. control panel) is detected.
+	 * <p>
+	 * This method is called from the AWT event thread.
+	 * <p>
+	 * In most cases it is not necessary to override this method. Normally, the implementation of this
+	 * class will automatically propogate font changes to the embedded Swing components through
+	 * Swing's Look and Feel support. However, if additional special processing is necessary, it can
+	 * be done inside this method.
+	 *
+	 * @param newFont
+	 *          New AWT font
+	 */
+	protected void updateAwtFont(java.awt.Font newFont) {
+	}
 
-  /**
-   * Returns the embedded AWT frame. The returned frame is the root of the AWT containment hierarchy
-   * for the embedded Swing component. This method can be called from any thread.
-   *
-   * @return the embedded frame
-   */
-  public Frame getFrame() {
-    // Intentionally leaving out checkWidget() call. This may need to be called from within user's
-    // createSwingComponent() method. Accessing from a non-SWT thread is OK, but we still check
-    // for disposal
-    if (getDisplay() == null || isDisposed()) {
-      SWT.error(SWT.ERROR_WIDGET_DISPOSED);
-    }
-    return awtContext != null ? awtContext.getFrame() : null;
-  }
+	/**
+	 * Returns the embedded AWT frame. The returned frame is the root of the AWT containment hierarchy
+	 * for the embedded Swing component. This method can be called from any thread.
+	 *
+	 * @return the embedded frame
+	 */
+	public Frame getFrame() {
+		// Intentionally leaving out checkWidget() call. This may need to be called from within user's
+		// createSwingComponent() method. Accessing from a non-SWT thread is OK, but we still check
+		// for disposal
+		if (getDisplay() == null || isDisposed()) {
+			SWT.error(SWT.ERROR_WIDGET_DISPOSED);
+		}
+		return awtContext != null ? awtContext.getFrame() : null;
+	}
 
-  private void createFrame() {
-    assert Display.getCurrent() != null; // On SWT event thread
-    // Make sure Awt environment is initialized.
-    AwtEnvironment.getInstance(getDisplay());
-    if (awtContext != null) {
-      final Frame oldFrame = awtContext.getFrame();
-      // Schedule disposal of old frame on AWT thread so that there are no problems with
-      // already-scheduled operations that have not completed.
-      // Note: the implementation of Frame.dispose() would schedule the use of the AWT
-      // thread even if it was not done here, but it uses invokeAndWait() which is
-      // prone to deadlock (and not necessary for this case).
-      EventQueue.invokeLater(new Runnable() {
-        public void run() {
-          oldFrame.dispose();
-        }
-      });
-    }
-    Frame frame = SWT_AWT.new_Frame(this);
-    awtContext = new AwtContext(frame);
-    // Glue the two frameworks together. Do this before anything is added to the frame
-    // so that all necessary listeners are in place.
-    createFocusHandlers();
-    // This listener clears garbage during resizing, making it looker much cleaner
-    addControlListener(new CleanResizeListener());
-  }
+	private void createFrame() {
+		assert Display.getCurrent() != null; // On SWT event thread
+		// Make sure Awt environment is initialized.
+		AwtEnvironment.getInstance(getDisplay());
+		if (awtContext != null) {
+			final Frame oldFrame = awtContext.getFrame();
+			// Schedule disposal of old frame on AWT thread so that there are no problems with
+			// already-scheduled operations that have not completed.
+			// Note: the implementation of Frame.dispose() would schedule the use of the AWT
+			// thread even if it was not done here, but it uses invokeAndWait() which is
+			// prone to deadlock (and not necessary for this case).
+			EventQueue.invokeLater(new Runnable() {
+				public void run() {
+					oldFrame.dispose();
+				}
+			});
+		}
+		Frame frame = SWT_AWT.new_Frame(this);
+		awtContext = new AwtContext(frame);
+		// Glue the two frameworks together. Do this before anything is added to the frame
+		// so that all necessary listeners are in place.
+		createFocusHandlers();
+		// This listener clears garbage during resizing, making it looker much cleaner
+		addControlListener(new CleanResizeListener());
+	}
 
-  private void createFocusHandlers() {
-    assert awtContext != null;
-    assert Display.getCurrent() != null; // On SWT event thread
-    Frame frame = awtContext.getFrame();
-    awtHandler = new AwtFocusHandler(frame);
-    SwtFocusHandler swtHandler = new SwtFocusHandler(this);
-    awtHandler.setSwtHandler(swtHandler);
-    swtHandler.setAwtHandler(awtHandler);
-    // Ensure that AWT popups are dismissed whenever a SWT menu is shown
-    getDisplay().addFilter(SWT.Show, menuListener);
-    EmbeddedChildFocusTraversalPolicy policy = new EmbeddedChildFocusTraversalPolicy(awtHandler);
-    frame.setFocusTraversalPolicy(policy);
-  }
+	private void createFocusHandlers() {
+		assert awtContext != null;
+		assert Display.getCurrent() != null; // On SWT event thread
+		Frame frame = awtContext.getFrame();
+		awtHandler = new AwtFocusHandler(frame);
+		SwtFocusHandler swtHandler = new SwtFocusHandler(this);
+		awtHandler.setSwtHandler(swtHandler);
+		swtHandler.setAwtHandler(awtHandler);
+		// Ensure that AWT popups are dismissed whenever a SWT menu is shown
+		getDisplay().addFilter(SWT.Show, menuListener);
+		EmbeddedChildFocusTraversalPolicy policy = new EmbeddedChildFocusTraversalPolicy(awtHandler);
+		frame.setFocusTraversalPolicy(policy);
+	}
 
-  private void scheduleComponentCreation() {
-    assert awtContext != null;
-    // Create AWT/Swing components on the AWT thread. This is
-    // especially necessary to avoid an AWT leak bug (6411042).
-    final AwtContext currentContext = awtContext;
-    EventQueue.invokeLater(new Runnable() {
-      public void run() {
-        RootPaneContainer container = addRootPaneContainer(currentContext.getFrame());
-        JComponent swingComponent = createSwingComponent();
-        currentContext.setSwingComponent(swingComponent);
-        container.getRootPane().getContentPane().add(swingComponent);
-        setComponentFont();
-        // force re-layout on SWT level
-        /*getDisplay().syncExec(new Runnable() {
+	private void scheduleComponentCreation() {
+		assert awtContext != null;
+		// Create AWT/Swing components on the AWT thread. This is
+		// especially necessary to avoid an AWT leak bug (6411042).
+		final AwtContext currentContext = awtContext;
+		EventQueue.invokeLater(new Runnable() {
+			public void run() {
+				RootPaneContainer container = addRootPaneContainer(currentContext.getFrame());
+				JComponent swingComponent = createSwingComponent();
+				currentContext.setSwingComponent(swingComponent);
+				container.getRootPane().getContentPane().add(swingComponent);
+				setComponentFont();
+				// force re-layout on SWT level
+				/*getDisplay().syncExec(new Runnable() {
         	public void run() {
         		getParent().layout();
         	}
         });*/
-      }
-    });
-  }
+			}
+		});
+	}
 
-  private void setComponentFont() {
-    assert currentSystemFont != null;
-    assert EventQueue.isDispatchThread(); // On AWT event thread
-    JComponent swingComponent = awtContext != null ? awtContext.getSwingComponent() : null;
-    if (swingComponent != null && !currentSystemFont.getDevice().isDisposed()) {
-      FontData fontData = currentSystemFont.getFontData()[0];
-      // AWT font sizes assume a 72 dpi resolution, always. The true screen resolution must be
-      // used to convert the platform font size into an AWT point size that matches when displayed.
-      int resolution = Toolkit.getDefaultToolkit().getScreenResolution();
-      int awtFontSize = (int) Math.round((double) fontData.getHeight() * resolution / 72.0);
-      // The style constants for SWT and AWT map exactly, and since they are int constants, they should
-      // never change. So, the SWT style is passed through as the AWT style.
-      java.awt.Font awtFont =
-          new java.awt.Font(fontData.getName(), fontData.getStyle(), awtFontSize);
-      // Update the look and feel defaults to use new font.
-      updateLookAndFeel(awtFont);
-      // Allow subclasses to react to font change if necessary.
-      updateAwtFont(awtFont);
-      // Allow components to update their UI based on new font
-      // TODO: should the update method be called on the root pane instead?
-      Container contentPane = swingComponent.getRootPane().getContentPane();
-      SwingUtilities.updateComponentTreeUI(contentPane);
-    }
-  }
+	private void setComponentFont() {
+		assert currentSystemFont != null;
+		assert EventQueue.isDispatchThread(); // On AWT event thread
+		JComponent swingComponent = awtContext != null ? awtContext.getSwingComponent() : null;
+		if (swingComponent != null && !currentSystemFont.getDevice().isDisposed()) {
+			FontData fontData = currentSystemFont.getFontData()[0];
+			// AWT font sizes assume a 72 dpi resolution, always. The true screen resolution must be
+			// used to convert the platform font size into an AWT point size that matches when displayed.
+			int resolution = Toolkit.getDefaultToolkit().getScreenResolution();
+			int awtFontSize = (int) Math.round((double) fontData.getHeight() * resolution / 72.0);
+			// The style constants for SWT and AWT map exactly, and since they are int constants, they should
+			// never change. So, the SWT style is passed through as the AWT style.
+			java.awt.Font awtFont =
+					new java.awt.Font(fontData.getName(), fontData.getStyle(), awtFontSize);
+			// Update the look and feel defaults to use new font.
+			updateLookAndFeel(awtFont);
+			// Allow subclasses to react to font change if necessary.
+			updateAwtFont(awtFont);
+			// Allow components to update their UI based on new font
+			// TODO: should the update method be called on the root pane instead?
+			Container contentPane = swingComponent.getRootPane().getContentPane();
+			SwingUtilities.updateComponentTreeUI(contentPane);
+		}
+	}
 
-  private void updateLookAndFeel(java.awt.Font awtFont) {
-    assert awtFont != null;
-    assert EventQueue.isDispatchThread(); // On AWT event thread
-    // The FontUIResource class marks the font as replaceable by the look and feel
-    // implementation if font settings are later changed.
-    FontUIResource fontResource = new FontUIResource(awtFont);
-    // Assign the new font to the relevant L&F font properties. These are
-    // the properties that are initially assigned to the system font
-    // under the Windows look and feel.
-    // TODO: It's possible that other platforms will need other assignments.
-    // TODO: This does not handle fonts other than the "system" font.
-    // Other fonts may change, and the Swing L&F may not be adjusting.
-    UIManager.put("Button.font", fontResource); //$NON-NLS-1$
-    UIManager.put("CheckBox.font", fontResource); //$NON-NLS-1$
-    UIManager.put("ComboBox.font", fontResource); //$NON-NLS-1$
-    UIManager.put("EditorPane.font", fontResource); //$NON-NLS-1$
-    UIManager.put("Label.font", fontResource); //$NON-NLS-1$
-    UIManager.put("List.font", fontResource); //$NON-NLS-1$
-    UIManager.put("Panel.font", fontResource); //$NON-NLS-1$
-    UIManager.put("ProgressBar.font", fontResource); //$NON-NLS-1$
-    UIManager.put("RadioButton.font", fontResource); //$NON-NLS-1$
-    UIManager.put("ScrollPane.font", fontResource); //$NON-NLS-1$
-    UIManager.put("TabbedPane.font", fontResource); //$NON-NLS-1$
-    UIManager.put("Table.font", fontResource); //$NON-NLS-1$
-    UIManager.put("TableHeader.font", fontResource); //$NON-NLS-1$
-    UIManager.put("TextField.font", fontResource); //$NON-NLS-1$
-    UIManager.put("TextPane.font", fontResource); //$NON-NLS-1$
-    UIManager.put("TitledBorder.font", fontResource); //$NON-NLS-1$
-    UIManager.put("ToggleButton.font", fontResource); //$NON-NLS-1$
-    UIManager.put("TreeFont.font", fontResource); //$NON-NLS-1$
-    UIManager.put("ViewportFont.font", fontResource); //$NON-NLS-1$
-  }
+	private void updateLookAndFeel(java.awt.Font awtFont) {
+		assert awtFont != null;
+		assert EventQueue.isDispatchThread(); // On AWT event thread
+		// The FontUIResource class marks the font as replaceable by the look and feel
+		// implementation if font settings are later changed.
+		FontUIResource fontResource = new FontUIResource(awtFont);
+		// Assign the new font to the relevant L&F font properties. These are
+		// the properties that are initially assigned to the system font
+		// under the Windows look and feel.
+		// TODO: It's possible that other platforms will need other assignments.
+		// TODO: This does not handle fonts other than the "system" font.
+		// Other fonts may change, and the Swing L&F may not be adjusting.
+		UIManager.put("Button.font", fontResource); //$NON-NLS-1$
+		UIManager.put("CheckBox.font", fontResource); //$NON-NLS-1$
+		UIManager.put("ComboBox.font", fontResource); //$NON-NLS-1$
+		UIManager.put("EditorPane.font", fontResource); //$NON-NLS-1$
+		UIManager.put("Label.font", fontResource); //$NON-NLS-1$
+		UIManager.put("List.font", fontResource); //$NON-NLS-1$
+		UIManager.put("Panel.font", fontResource); //$NON-NLS-1$
+		UIManager.put("ProgressBar.font", fontResource); //$NON-NLS-1$
+		UIManager.put("RadioButton.font", fontResource); //$NON-NLS-1$
+		UIManager.put("ScrollPane.font", fontResource); //$NON-NLS-1$
+		UIManager.put("TabbedPane.font", fontResource); //$NON-NLS-1$
+		UIManager.put("Table.font", fontResource); //$NON-NLS-1$
+		UIManager.put("TableHeader.font", fontResource); //$NON-NLS-1$
+		UIManager.put("TextField.font", fontResource); //$NON-NLS-1$
+		UIManager.put("TextPane.font", fontResource); //$NON-NLS-1$
+		UIManager.put("TitledBorder.font", fontResource); //$NON-NLS-1$
+		UIManager.put("ToggleButton.font", fontResource); //$NON-NLS-1$
+		UIManager.put("TreeFont.font", fontResource); //$NON-NLS-1$
+		UIManager.put("ViewportFont.font", fontResource); //$NON-NLS-1$
+	}
 
-  private void handleSettingsChange() {
-    Font newFont = getDisplay().getSystemFont();
-    if (!newFont.equals(currentSystemFont)) {
-      currentSystemFont = newFont;
-      EventQueue.invokeLater(new Runnable() {
-        public void run() {
-          setComponentFont();
-        }
-      });
-    }
-  }
+	private void handleSettingsChange() {
+		Font newFont = getDisplay().getSystemFont();
+		if (!newFont.equals(currentSystemFont)) {
+			currentSystemFont = newFont;
+			EventQueue.invokeLater(new Runnable() {
+				public void run() {
+					setComponentFont();
+				}
+			});
+		}
+	}
 
-  private boolean isFocusable() {
-    if (awtContext == null) {
-      return false;
-    }
-    JComponent swingComponent = awtContext.getSwingComponent();
-    return swingComponent != null && swingComponent.isFocusable();
-  }
+	private boolean isFocusable() {
+		if (awtContext == null) {
+			return false;
+		}
+		JComponent swingComponent = awtContext.getSwingComponent();
+		return swingComponent != null && swingComponent.isFocusable();
+	}
 
-  /* (non-Javadoc)
-   * @see org.eclipse.swt.widgets.Control#setFocus()
-   */
-  @Override
-  public boolean setFocus() {
-    checkWidget();
-    if (!isFocusable()) {
-      return false;
-    }
-    return super.setFocus();
-  }
+	/* (non-Javadoc)
+	 * @see org.eclipse.swt.widgets.Control#setFocus()
+	 */
+	@Override
+	public boolean setFocus() {
+		checkWidget();
+		if (!isFocusable()) {
+			return false;
+		}
+		return super.setFocus();
+	}
 
-  /* (non-Javadoc)
-   * @see org.eclipse.swt.widgets.Control#forceFocus()
-   */
-  @Override
-  public boolean forceFocus() {
-    checkWidget();
-    if (!isFocusable()) {
-      return false;
-    }
-    return super.forceFocus();
-  }
+	/* (non-Javadoc)
+	 * @see org.eclipse.swt.widgets.Control#forceFocus()
+	 */
+	@Override
+	public boolean forceFocus() {
+		checkWidget();
+		if (!isFocusable()) {
+			return false;
+		}
+		return super.forceFocus();
+	}
 
-  /* (non-Javadoc)
-   * @see org.eclipse.swt.widgets.Widget#dispose()
-   */
-  @Override
-  public void dispose() {
-    if (!isDisposed()) {
-      dispose_AWT();
-      super.dispose();
-    }
-  }
+	/* (non-Javadoc)
+	 * @see org.eclipse.swt.widgets.Widget#dispose()
+	 */
+	@Override
+	public void dispose() {
+		if (!isDisposed()) {
+			dispose_AWT();
+			super.dispose();
+		}
+	}
 
-  private void dispose_AWT() {
-    // remove listeners
-    getDisplay().removeListener(SWT.Settings, settingsListener);
-    getDisplay().removeFilter(SWT.Show, menuListener);
-    // dispose frame to avoid lock down in EventQueue.invokeAndWait() later
-    if (awtContext != null) {
-      Frame oldFrame = awtContext.getFrame();
-      oldFrame.dispose();
-    }
-  }
+	private void dispose_AWT() {
+		// remove listeners
+		getDisplay().removeListener(SWT.Settings, settingsListener);
+		getDisplay().removeFilter(SWT.Show, menuListener);
+		// dispose frame to avoid lock down in EventQueue.invokeAndWait() later
+		if (awtContext != null) {
+			Frame oldFrame = awtContext.getFrame();
+			oldFrame.dispose();
+		}
+	}
 }
diff --git a/org.eclipse.wb.swing/src/swingintegration/example/EmbeddedSwingComposite2.java b/org.eclipse.wb.swing/src/swingintegration/example/EmbeddedSwingComposite2.java
index 0db4c519d..525e14f41 100644
--- a/org.eclipse.wb.swing/src/swingintegration/example/EmbeddedSwingComposite2.java
+++ b/org.eclipse.wb.swing/src/swingintegration/example/EmbeddedSwingComposite2.java
@@ -93,362 +93,362 @@
  * UI thread to a background thread. The Eclipse jobs API can be used for this purpose.
  */
 public abstract class EmbeddedSwingComposite2 extends Composite {
-  private static class AwtContext {
-    private final Frame frame;
-    private JComponent swingComponent;
+	private static class AwtContext {
+		private final Frame frame;
+		private JComponent swingComponent;
 
-    AwtContext(Frame frame) {
-      assert frame != null;
-      this.frame = frame;
-    }
+		AwtContext(Frame frame) {
+			assert frame != null;
+			this.frame = frame;
+		}
 
-    Frame getFrame() {
-      return frame;
-    }
+		Frame getFrame() {
+			return frame;
+		}
 
-    void setSwingComponent(JComponent swingComponent) {
-      this.swingComponent = swingComponent;
-    }
+		void setSwingComponent(JComponent swingComponent) {
+			this.swingComponent = swingComponent;
+		}
 
-    JComponent getSwingComponent() {
-      return swingComponent;
-    }
-  }
+		JComponent getSwingComponent() {
+			return swingComponent;
+		}
+	}
 
-  private AwtContext awtContext;
-  private AwtFocusHandler awtHandler;
-  // This listener helps ensure that Swing popup menus are properly dismissed when
-  // a menu item off the SWT main menu bar is shown.
-  private final Listener menuListener = new Listener() {
-    public void handleEvent(Event event) {
-      assert awtHandler != null;
-      awtHandler.postHidePopups();
-    }
-  };
+	private AwtContext awtContext;
+	private AwtFocusHandler awtHandler;
+	// This listener helps ensure that Swing popup menus are properly dismissed when
+	// a menu item off the SWT main menu bar is shown.
+	private final Listener menuListener = new Listener() {
+		public void handleEvent(Event event) {
+			assert awtHandler != null;
+			awtHandler.postHidePopups();
+		}
+	};
 
-  /**
-   * Constructs a new instance of this class given its parent and a style value describing its
-   * behavior and appearance.
-   * <p>
-   * This method must be called from the SWT event thread.
-   * <p>
-   * The style value is either one of the style constants defined in class <code>SWT</code> which is
-   * applicable to instances of this class, or must be built by <em>bitwise OR</em>'ing together
-   * (that is, using the <code>int</code> "|" operator) two or more of those <code>SWT</code> style
-   * constants. The class description lists the style constants that are applicable to the class.
-   * Style bits are also inherited from superclasses.
-   * </p>
-   * <p>
-   * The styles SWT.EMBEDDED and SWT.NO_BACKGROUND will be added to the specified style. Usually, no
-   * other style bits are needed.
-   *
-   * @param parent
-   *          a widget which will be the parent of the new instance (cannot be null)
-   * @param style
-   *          the style of widget to construct
-   *
-   * @exception IllegalArgumentException
-   *              <ul>
-   *              <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
-   *              </ul>
-   * @exception SWTException
-   *              <ul>
-   *              <li>ERROR_THREAD_INVALID_ACCESS - if not called from the SWT event thread
-   *              </ul>
-   *
-   * @see Widget#getStyle
-   */
-  public EmbeddedSwingComposite2(Composite parent, int style) {
-    super(parent, style | SWT.EMBEDDED | SWT.NO_BACKGROUND);
-    setLayout(new FillLayout());
-    // set listeners
-    addListener(SWT.Dispose, new Listener() {
-      public void handleEvent(Event event) {
-        dispose_AWT();
-      }
-    });
-  }
+	/**
+	 * Constructs a new instance of this class given its parent and a style value describing its
+	 * behavior and appearance.
+	 * <p>
+	 * This method must be called from the SWT event thread.
+	 * <p>
+	 * The style value is either one of the style constants defined in class <code>SWT</code> which is
+	 * applicable to instances of this class, or must be built by <em>bitwise OR</em>'ing together
+	 * (that is, using the <code>int</code> "|" operator) two or more of those <code>SWT</code> style
+	 * constants. The class description lists the style constants that are applicable to the class.
+	 * Style bits are also inherited from superclasses.
+	 * </p>
+	 * <p>
+	 * The styles SWT.EMBEDDED and SWT.NO_BACKGROUND will be added to the specified style. Usually, no
+	 * other style bits are needed.
+	 *
+	 * @param parent
+	 *          a widget which will be the parent of the new instance (cannot be null)
+	 * @param style
+	 *          the style of widget to construct
+	 *
+	 * @exception IllegalArgumentException
+	 *              <ul>
+	 *              <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+	 *              </ul>
+	 * @exception SWTException
+	 *              <ul>
+	 *              <li>ERROR_THREAD_INVALID_ACCESS - if not called from the SWT event thread
+	 *              </ul>
+	 *
+	 * @see Widget#getStyle
+	 */
+	public EmbeddedSwingComposite2(Composite parent, int style) {
+		super(parent, style | SWT.EMBEDDED | SWT.NO_BACKGROUND);
+		setLayout(new FillLayout());
+		// set listeners
+		addListener(SWT.Dispose, new Listener() {
+			public void handleEvent(Event event) {
+				dispose_AWT();
+			}
+		});
+	}
 
-  /**
-   * Populates the embedded composite with the Swing component.
-   * <p>
-   * This method must be called from the SWT event thread.
-   * <p>
-   * The Swing component will be created by calling {@link #createSwingComponent()}. The creation is
-   * scheduled asynchronously on the AWT event thread. This method does not wait for completion of
-   * this asynchronous task, so it may return before createSwingComponent() is complete.
-   * <p>
-   * The Swing component is created inside a standard Swing containment hierarchy, rooted in a
-   * {@link javax.swing.RootPaneContainer}. Clients can override
-   * {@link #addRootPaneContainer(Frame)} to provide their own root pane container implementation.
-   * <p>
-   * This method can be called multiple times for a single instance. If an embedded frame exists
-   * from a previous call, it is disposed.
-   *
-   * @exception SWTException
-   *              <ul>
-   *              <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
-   *              <li>ERROR_THREAD_INVALID_ACCESS - if not called from the SWT event thread
-   *              </ul>
-   */
-  public void populate() {
-    checkWidget();
-    createFrame();
-    scheduleComponentCreation();
-  }
+	/**
+	 * Populates the embedded composite with the Swing component.
+	 * <p>
+	 * This method must be called from the SWT event thread.
+	 * <p>
+	 * The Swing component will be created by calling {@link #createSwingComponent()}. The creation is
+	 * scheduled asynchronously on the AWT event thread. This method does not wait for completion of
+	 * this asynchronous task, so it may return before createSwingComponent() is complete.
+	 * <p>
+	 * The Swing component is created inside a standard Swing containment hierarchy, rooted in a
+	 * {@link javax.swing.RootPaneContainer}. Clients can override
+	 * {@link #addRootPaneContainer(Frame)} to provide their own root pane container implementation.
+	 * <p>
+	 * This method can be called multiple times for a single instance. If an embedded frame exists
+	 * from a previous call, it is disposed.
+	 *
+	 * @exception SWTException
+	 *              <ul>
+	 *              <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+	 *              <li>ERROR_THREAD_INVALID_ACCESS - if not called from the SWT event thread
+	 *              </ul>
+	 */
+	public void populate() {
+		checkWidget();
+		createFrame();
+		scheduleComponentCreation();
+	}
 
-  @Override
-  public Point computeSize(int wHint, int hHint, boolean changed) {
-    // wait for Swing component creation
-    while (awtContext.swingComponent == null) {
-      getDisplay().readAndDispatch();
-    }
-    // return size of Swing component
-    try {
-      final java.awt.Dimension prefSize[] = new java.awt.Dimension[1];
-      SwingImageUtils.runInDispatchThread(new Runnable() {
-        public void run() {
-          prefSize[0] = awtContext.swingComponent.getPreferredSize();
-        }
-      });
-      //
-      int width = wHint == SWT.DEFAULT ? prefSize[0].width : wHint;
-      int height = hHint == SWT.DEFAULT ? prefSize[0].height : hHint;
-      return new Point(width, height);
-    } catch (Throwable e) {
-    }
-    // if exception, use (0, 0)
-    return new Point(0, 0);
-  }
+	@Override
+	public Point computeSize(int wHint, int hHint, boolean changed) {
+		// wait for Swing component creation
+		while (awtContext.swingComponent == null) {
+			getDisplay().readAndDispatch();
+		}
+		// return size of Swing component
+		try {
+			final java.awt.Dimension prefSize[] = new java.awt.Dimension[1];
+			SwingImageUtils.runInDispatchThread(new Runnable() {
+				public void run() {
+					prefSize[0] = awtContext.swingComponent.getPreferredSize();
+				}
+			});
+			//
+			int width = wHint == SWT.DEFAULT ? prefSize[0].width : wHint;
+			int height = hHint == SWT.DEFAULT ? prefSize[0].height : hHint;
+			return new Point(width, height);
+		} catch (Throwable e) {
+		}
+		// if exception, use (0, 0)
+		return new Point(0, 0);
+	}
 
-  /**
-   * Creates the embedded Swing component. This method is called from the AWT event thread.
-   * <p>
-   * Implement this method to provide the Swing component that will be shown inside this composite.
-   * The returned component will be added to the Swing content pane. At least one component must be
-   * created by this method; null is not a valid return value.
-   *
-   * @return a non-null Swing component
-   */
-  protected abstract JComponent createSwingComponent();
+	/**
+	 * Creates the embedded Swing component. This method is called from the AWT event thread.
+	 * <p>
+	 * Implement this method to provide the Swing component that will be shown inside this composite.
+	 * The returned component will be added to the Swing content pane. At least one component must be
+	 * created by this method; null is not a valid return value.
+	 *
+	 * @return a non-null Swing component
+	 */
+	protected abstract JComponent createSwingComponent();
 
-  /**
-   * Adds a root pane container to the embedded AWT frame. Override this to provide your own
-   * {@link javax.swing.RootPaneContainer} implementation. In most cases, it is not necessary to
-   * override this method.
-   * <p>
-   * This method is called from the AWT event thread.
-   * <p>
-   * If you are defining your own root pane container, make sure that there is at least one
-   * heavyweight (AWT) component in the frame's containment hierarchy; otherwise, event processing
-   * will not work correctly. See http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4982522 for
-   * more information.
-   *
-   * @param frame
-   *          the frame to which the root pane container is added
-   * @return a non-null Swing component
-   */
-  protected RootPaneContainer addRootPaneContainer(Frame frame) {
-    assert EventQueue.isDispatchThread(); // On AWT event thread
-    assert frame != null;
-    // It is important to set up the proper top level components in the frame:
-    // 1) For Swing to work properly, Sun documents that there must be an implementor of
-    // javax.swing.RootPaneContainer at the top of the component hierarchy.
-    // 2) For proper event handling there must be a heavyweight
-    // an AWT frame must contain a heavyweight component (see
-    // http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4982522)
-    // 3) The Swing implementation further narrows the options by expecting that the
-    // top of the hierarchy be a JFrame, JDialog, JWindow, or JApplet. See javax.swing.PopupFactory.
-    // All this drives the choice of JApplet for the top level Swing component. It is the
-    // only single component that satisfies all the above. This does not imply that
-    // we have a true applet; in particular, there is no notion of an applet lifecycle in this
-    // context.
-    //
-    // We need to intercept call of "getInputContext" because it make native call
-    // and causes dead-lock in SWT.
-    // https://bugs.eclipse.org/bugs/show_bug.cgi?id=376561
-    // https://bugs.eclipse.org/bugs/show_bug.cgi?id=291326
-    JApplet applet = new JApplet() {
-      private static final long serialVersionUID = 1L;
+	/**
+	 * Adds a root pane container to the embedded AWT frame. Override this to provide your own
+	 * {@link javax.swing.RootPaneContainer} implementation. In most cases, it is not necessary to
+	 * override this method.
+	 * <p>
+	 * This method is called from the AWT event thread.
+	 * <p>
+	 * If you are defining your own root pane container, make sure that there is at least one
+	 * heavyweight (AWT) component in the frame's containment hierarchy; otherwise, event processing
+	 * will not work correctly. See http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4982522 for
+	 * more information.
+	 *
+	 * @param frame
+	 *          the frame to which the root pane container is added
+	 * @return a non-null Swing component
+	 */
+	protected RootPaneContainer addRootPaneContainer(Frame frame) {
+		assert EventQueue.isDispatchThread(); // On AWT event thread
+		assert frame != null;
+		// It is important to set up the proper top level components in the frame:
+		// 1) For Swing to work properly, Sun documents that there must be an implementor of
+		// javax.swing.RootPaneContainer at the top of the component hierarchy.
+		// 2) For proper event handling there must be a heavyweight
+		// an AWT frame must contain a heavyweight component (see
+		// http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4982522)
+		// 3) The Swing implementation further narrows the options by expecting that the
+		// top of the hierarchy be a JFrame, JDialog, JWindow, or JApplet. See javax.swing.PopupFactory.
+		// All this drives the choice of JApplet for the top level Swing component. It is the
+		// only single component that satisfies all the above. This does not imply that
+		// we have a true applet; in particular, there is no notion of an applet lifecycle in this
+		// context.
+		//
+		// We need to intercept call of "getInputContext" because it make native call
+		// and causes dead-lock in SWT.
+		// https://bugs.eclipse.org/bugs/show_bug.cgi?id=376561
+		// https://bugs.eclipse.org/bugs/show_bug.cgi?id=291326
+		JApplet applet = new JApplet() {
+			private static final long serialVersionUID = 1L;
 
-      @Override
-      public InputContext getInputContext() {
-        return null;
-      }
-    };
-    // In JRE 1.4, the JApplet makes itself a focus cycle root. This
-    // interferes with the focus handling installed on the parent frame, so
-    // change it back to a non-root here.
-    // TODO: consider moving the focus policy from the Frame down to the JApplet
-    applet.setFocusCycleRoot(false);
-    frame.add(applet);
-    return applet;
-  }
+			@Override
+			public InputContext getInputContext() {
+				return null;
+			}
+		};
+		// In JRE 1.4, the JApplet makes itself a focus cycle root. This
+		// interferes with the focus handling installed on the parent frame, so
+		// change it back to a non-root here.
+		// TODO: consider moving the focus policy from the Frame down to the JApplet
+		applet.setFocusCycleRoot(false);
+		frame.add(applet);
+		return applet;
+	}
 
-  /**
-   * Performs custom updates to newly set fonts. This method is called whenever a change to the
-   * system font through the system settings (i.e. control panel) is detected.
-   * <p>
-   * This method is called from the AWT event thread.
-   * <p>
-   * In most cases it is not necessary to override this method. Normally, the implementation of this
-   * class will automatically propogate font changes to the embedded Swing components through
-   * Swing's Look and Feel support. However, if additional special processing is necessary, it can
-   * be done inside this method.
-   *
-   * @param newFont
-   *          New AWT font
-   */
-  protected void updateAwtFont(java.awt.Font newFont) {
-  }
+	/**
+	 * Performs custom updates to newly set fonts. This method is called whenever a change to the
+	 * system font through the system settings (i.e. control panel) is detected.
+	 * <p>
+	 * This method is called from the AWT event thread.
+	 * <p>
+	 * In most cases it is not necessary to override this method. Normally, the implementation of this
+	 * class will automatically propogate font changes to the embedded Swing components through
+	 * Swing's Look and Feel support. However, if additional special processing is necessary, it can
+	 * be done inside this method.
+	 *
+	 * @param newFont
+	 *          New AWT font
+	 */
+	protected void updateAwtFont(java.awt.Font newFont) {
+	}
 
-  /**
-   * Returns the embedded AWT frame. The returned frame is the root of the AWT containment hierarchy
-   * for the embedded Swing component. This method can be called from any thread.
-   *
-   * @return the embedded frame
-   */
-  public Frame getFrame() {
-    // Intentionally leaving out checkWidget() call. This may need to be called from within user's
-    // createSwingComponent() method. Accessing from a non-SWT thread is OK, but we still check
-    // for disposal
-    if (getDisplay() == null || isDisposed()) {
-      SWT.error(SWT.ERROR_WIDGET_DISPOSED);
-    }
-    return awtContext != null ? awtContext.getFrame() : null;
-  }
+	/**
+	 * Returns the embedded AWT frame. The returned frame is the root of the AWT containment hierarchy
+	 * for the embedded Swing component. This method can be called from any thread.
+	 *
+	 * @return the embedded frame
+	 */
+	public Frame getFrame() {
+		// Intentionally leaving out checkWidget() call. This may need to be called from within user's
+		// createSwingComponent() method. Accessing from a non-SWT thread is OK, but we still check
+		// for disposal
+		if (getDisplay() == null || isDisposed()) {
+			SWT.error(SWT.ERROR_WIDGET_DISPOSED);
+		}
+		return awtContext != null ? awtContext.getFrame() : null;
+	}
 
-  private void createFrame() {
-    assert Display.getCurrent() != null; // On SWT event thread
-    // Make sure Awt environment is initialized.
-    //AwtEnvironment.getInstance(getDisplay());
-    if (awtContext != null) {
-      final Frame oldFrame = awtContext.getFrame();
-      // Schedule disposal of old frame on AWT thread so that there are no problems with
-      // already-scheduled operations that have not completed.
-      // Note: the implementation of Frame.dispose() would schedule the use of the AWT
-      // thread even if it was not done here, but it uses invokeAndWait() which is
-      // prone to deadlock (and not necessary for this case).
-      EventQueue.invokeLater(new Runnable() {
-        public void run() {
-          oldFrame.dispose();
-        }
-      });
-    }
-    Frame frame = SWT_AWT.new_Frame(this);
-    frame.getInputContext();
-    awtContext = new AwtContext(frame);
-    // Glue the two frameworks together. Do this before anything is added to the frame
-    // so that all necessary listeners are in place.
-    createFocusHandlers();
-    // This listener clears garbage during resizing, making it looker much cleaner
-    addControlListener(new CleanResizeListener());
-  }
+	private void createFrame() {
+		assert Display.getCurrent() != null; // On SWT event thread
+		// Make sure Awt environment is initialized.
+		//AwtEnvironment.getInstance(getDisplay());
+		if (awtContext != null) {
+			final Frame oldFrame = awtContext.getFrame();
+			// Schedule disposal of old frame on AWT thread so that there are no problems with
+			// already-scheduled operations that have not completed.
+			// Note: the implementation of Frame.dispose() would schedule the use of the AWT
+			// thread even if it was not done here, but it uses invokeAndWait() which is
+			// prone to deadlock (and not necessary for this case).
+			EventQueue.invokeLater(new Runnable() {
+				public void run() {
+					oldFrame.dispose();
+				}
+			});
+		}
+		Frame frame = SWT_AWT.new_Frame(this);
+		frame.getInputContext();
+		awtContext = new AwtContext(frame);
+		// Glue the two frameworks together. Do this before anything is added to the frame
+		// so that all necessary listeners are in place.
+		createFocusHandlers();
+		// This listener clears garbage during resizing, making it looker much cleaner
+		addControlListener(new CleanResizeListener());
+	}
 
-  private void createFocusHandlers() {
-    assert awtContext != null;
-    assert Display.getCurrent() != null; // On SWT event thread
-    Frame frame = awtContext.getFrame();
-    awtHandler = new AwtFocusHandler(frame);
-    SwtFocusHandler swtHandler = new SwtFocusHandler(this);
-    awtHandler.setSwtHandler(swtHandler);
-    swtHandler.setAwtHandler(awtHandler);
-    // Ensure that AWT popups are dismissed whenever a SWT menu is shown
-    getDisplay().addFilter(SWT.Show, menuListener);
-    EmbeddedChildFocusTraversalPolicy policy = new EmbeddedChildFocusTraversalPolicy(awtHandler);
-    frame.setFocusTraversalPolicy(policy);
-  }
+	private void createFocusHandlers() {
+		assert awtContext != null;
+		assert Display.getCurrent() != null; // On SWT event thread
+		Frame frame = awtContext.getFrame();
+		awtHandler = new AwtFocusHandler(frame);
+		SwtFocusHandler swtHandler = new SwtFocusHandler(this);
+		awtHandler.setSwtHandler(swtHandler);
+		swtHandler.setAwtHandler(awtHandler);
+		// Ensure that AWT popups are dismissed whenever a SWT menu is shown
+		getDisplay().addFilter(SWT.Show, menuListener);
+		EmbeddedChildFocusTraversalPolicy policy = new EmbeddedChildFocusTraversalPolicy(awtHandler);
+		frame.setFocusTraversalPolicy(policy);
+	}
 
-  private void scheduleComponentCreation() {
-    assert awtContext != null;
-    // Create AWT/Swing components on the AWT thread. This is
-    // especially necessary to avoid an AWT leak bug (6411042).
-    final AwtContext currentContext = awtContext;
-    EventQueue.invokeLater(new Runnable() {
-      public void run() {
-        RootPaneContainer container = addRootPaneContainer(currentContext.getFrame());
-        JComponent swingComponent = createSwingComponent();
-        currentContext.setSwingComponent(swingComponent);
-        container.getRootPane().getContentPane().add(swingComponent);
-      }
-    });
-  }
+	private void scheduleComponentCreation() {
+		assert awtContext != null;
+		// Create AWT/Swing components on the AWT thread. This is
+		// especially necessary to avoid an AWT leak bug (6411042).
+		final AwtContext currentContext = awtContext;
+		EventQueue.invokeLater(new Runnable() {
+			public void run() {
+				RootPaneContainer container = addRootPaneContainer(currentContext.getFrame());
+				JComponent swingComponent = createSwingComponent();
+				currentContext.setSwingComponent(swingComponent);
+				container.getRootPane().getContentPane().add(swingComponent);
+			}
+		});
+	}
 
-  private boolean isFocusable() {
-    if (awtContext == null) {
-      return false;
-    }
-    JComponent swingComponent = awtContext.getSwingComponent();
-    return swingComponent != null && swingComponent.isFocusable();
-  }
+	private boolean isFocusable() {
+		if (awtContext == null) {
+			return false;
+		}
+		JComponent swingComponent = awtContext.getSwingComponent();
+		return swingComponent != null && swingComponent.isFocusable();
+	}
 
-  /* (non-Javadoc)
-   * @see org.eclipse.swt.widgets.Control#setFocus()
-   */
-  @Override
-  public boolean setFocus() {
-    checkWidget();
-    if (!isFocusable()) {
-      return false;
-    }
-    return super.setFocus();
-  }
+	/* (non-Javadoc)
+	 * @see org.eclipse.swt.widgets.Control#setFocus()
+	 */
+	@Override
+	public boolean setFocus() {
+		checkWidget();
+		if (!isFocusable()) {
+			return false;
+		}
+		return super.setFocus();
+	}
 
-  /* (non-Javadoc)
-   * @see org.eclipse.swt.widgets.Control#forceFocus()
-   */
-  @Override
-  public boolean forceFocus() {
-    checkWidget();
-    if (!isFocusable()) {
-      return false;
-    }
-    return super.forceFocus();
-  }
+	/* (non-Javadoc)
+	 * @see org.eclipse.swt.widgets.Control#forceFocus()
+	 */
+	@Override
+	public boolean forceFocus() {
+		checkWidget();
+		if (!isFocusable()) {
+			return false;
+		}
+		return super.forceFocus();
+	}
 
-  /* (non-Javadoc)
-   * @see org.eclipse.swt.widgets.Widget#dispose()
-   */
-  @Override
-  public void dispose() {
-    if (!isDisposed()) {
-      dispose_AWT();
-      super.dispose();
-    }
-  }
+	/* (non-Javadoc)
+	 * @see org.eclipse.swt.widgets.Widget#dispose()
+	 */
+	@Override
+	public void dispose() {
+		if (!isDisposed()) {
+			dispose_AWT();
+			super.dispose();
+		}
+	}
 
-  private void dispose_AWT() {
-    // remove listeners
-    getDisplay().removeFilter(SWT.Show, menuListener);
-    // dispose frame to avoid lock down in EventQueue.invokeAndWait() later
-    if (awtContext != null) {
-      Frame oldFrame = awtContext.getFrame();
-      oldFrame.dispose();
-    }
-  }
+	private void dispose_AWT() {
+		// remove listeners
+		getDisplay().removeFilter(SWT.Show, menuListener);
+		// dispose frame to avoid lock down in EventQueue.invokeAndWait() later
+		if (awtContext != null) {
+			Frame oldFrame = awtContext.getFrame();
+			oldFrame.dispose();
+		}
+	}
 
-  /**
-   * There is problem with running SWT_AWT on OSX with Java 1.7
-   * <p>
-   * https://bugs.eclipse.org/bugs/show_bug.cgi?id=374199
-   * <p>
-   * It is marked "fixed", but still does not work.
-   */
-  public static boolean canUseAwt() {
-    if (EnvironmentUtils.IS_MAC) {
-      Shell shell = new Shell();
-      try {
-        try {
-          Frame frame = SWT_AWT.new_Frame(shell);
-          frame.dispose();
-          return true;
-        } catch (Throwable e) {
-          return false;
-        }
-      } finally {
-        shell.dispose();
-      }
-    }
-    return true;
-  }
+	/**
+	 * There is problem with running SWT_AWT on OSX with Java 1.7
+	 * <p>
+	 * https://bugs.eclipse.org/bugs/show_bug.cgi?id=374199
+	 * <p>
+	 * It is marked "fixed", but still does not work.
+	 */
+	public static boolean canUseAwt() {
+		if (EnvironmentUtils.IS_MAC) {
+			Shell shell = new Shell();
+			try {
+				try {
+					Frame frame = SWT_AWT.new_Frame(shell);
+					frame.dispose();
+					return true;
+				} catch (Throwable e) {
+					return false;
+				}
+			} finally {
+				shell.dispose();
+			}
+		}
+		return true;
+	}
 }
diff --git a/org.eclipse.wb.swing/src/swingintegration/example/Platform.java b/org.eclipse.wb.swing/src/swingintegration/example/Platform.java
index db584dac6..0ae2d7aed 100644
--- a/org.eclipse.wb.swing/src/swingintegration/example/Platform.java
+++ b/org.eclipse.wb.swing/src/swingintegration/example/Platform.java
@@ -10,17 +10,17 @@
 import org.eclipse.swt.SWT;
 
 class Platform {
-  private static String platformString = SWT.getPlatform();
+	private static String platformString = SWT.getPlatform();
 
-  // prevent instantiation
-  private Platform() {
-  }
+	// prevent instantiation
+	private Platform() {
+	}
 
-  public static boolean isWin32() {
-    return "win32".equals(platformString); //$NON-NLS-1$
-  }
+	public static boolean isWin32() {
+		return "win32".equals(platformString); //$NON-NLS-1$
+	}
 
-  public static boolean isGtk() {
-    return "gtk".equals(platformString); //$NON-NLS-1$
-  }
+	public static boolean isGtk() {
+		return "gtk".equals(platformString); //$NON-NLS-1$
+	}
 }
diff --git a/org.eclipse.wb.swing/src/swingintegration/example/RecursiveContainerListener.java b/org.eclipse.wb.swing/src/swingintegration/example/RecursiveContainerListener.java
index fd2e92a03..d638a68d8 100644
--- a/org.eclipse.wb.swing/src/swingintegration/example/RecursiveContainerListener.java
+++ b/org.eclipse.wb.swing/src/swingintegration/example/RecursiveContainerListener.java
@@ -14,76 +14,76 @@
 import java.awt.event.ContainerListener;
 
 class RecursiveContainerListener implements ContainerListener {
-  private final ContainerListener listener;
+	private final ContainerListener listener;
 
-  RecursiveContainerListener(ContainerListener listener) {
-    assert listener != null;
-    this.listener = listener;
-  }
+	RecursiveContainerListener(ContainerListener listener) {
+		assert listener != null;
+		this.listener = listener;
+	}
 
-  private void handleAdd(Container source, Component c) {
-    assert source != null;
-    assert c != null;
-    assert listener != null;
-    assert EventQueue.isDispatchThread(); // On AWT event thread
-    // System.out.println("Listening to: " + c);
-    listener.componentAdded(new ContainerEvent(source, ContainerEvent.COMPONENT_ADDED, c));
-    if (c instanceof Container) {
-      ((Container) c).addContainerListener(this);
-    }
-  }
+	private void handleAdd(Container source, Component c) {
+		assert source != null;
+		assert c != null;
+		assert listener != null;
+		assert EventQueue.isDispatchThread(); // On AWT event thread
+		// System.out.println("Listening to: " + c);
+		listener.componentAdded(new ContainerEvent(source, ContainerEvent.COMPONENT_ADDED, c));
+		if (c instanceof Container) {
+			((Container) c).addContainerListener(this);
+		}
+	}
 
-  private void handleRemove(Container source, Component c) {
-    assert source != null;
-    assert c != null;
-    assert listener != null;
-    assert EventQueue.isDispatchThread(); // On AWT event thread
-    // System.out.println("Stopped Listening to: " + c);
-    listener.componentRemoved(new ContainerEvent(source, ContainerEvent.COMPONENT_REMOVED, c));
-    if (c instanceof Container) {
-      ((Container) c).removeContainerListener(this);
-    }
-  }
+	private void handleRemove(Container source, Component c) {
+		assert source != null;
+		assert c != null;
+		assert listener != null;
+		assert EventQueue.isDispatchThread(); // On AWT event thread
+		// System.out.println("Stopped Listening to: " + c);
+		listener.componentRemoved(new ContainerEvent(source, ContainerEvent.COMPONENT_REMOVED, c));
+		if (c instanceof Container) {
+			((Container) c).removeContainerListener(this);
+		}
+	}
 
-  private void handleAllAdds(Container source, Component child) {
-    assert source != null;
-    assert child != null;
-    assert EventQueue.isDispatchThread(); // On AWT event thread
-    if (child instanceof Container) {
-      Container container = (Container) child;
-      Component[] children = container.getComponents();
-      for (int i = 0; i < children.length; i++) {
-        handleAllAdds(container, children[i]);
-      }
-    }
-    handleAdd(source, child);
-  }
+	private void handleAllAdds(Container source, Component child) {
+		assert source != null;
+		assert child != null;
+		assert EventQueue.isDispatchThread(); // On AWT event thread
+		if (child instanceof Container) {
+			Container container = (Container) child;
+			Component[] children = container.getComponents();
+			for (int i = 0; i < children.length; i++) {
+				handleAllAdds(container, children[i]);
+			}
+		}
+		handleAdd(source, child);
+	}
 
-  private void handleAllRemoves(Container source, Component child) {
-    assert source != null;
-    assert child != null;
-    assert EventQueue.isDispatchThread(); // On AWT event thread
-    if (child instanceof Container) {
-      Container container = (Container) child;
-      Component[] children = container.getComponents();
-      for (int i = 0; i < children.length; i++) {
-        handleAllRemoves(container, children[i]);
-      }
-    }
-    handleRemove(source, child);
-  }
+	private void handleAllRemoves(Container source, Component child) {
+		assert source != null;
+		assert child != null;
+		assert EventQueue.isDispatchThread(); // On AWT event thread
+		if (child instanceof Container) {
+			Container container = (Container) child;
+			Component[] children = container.getComponents();
+			for (int i = 0; i < children.length; i++) {
+				handleAllRemoves(container, children[i]);
+			}
+		}
+		handleRemove(source, child);
+	}
 
-  public void componentAdded(ContainerEvent e) {
-    assert e != null;
-    assert EventQueue.isDispatchThread(); // On AWT event thread
-    Container source = (Container) e.getSource();
-    handleAllAdds(source, e.getChild());
-  }
+	public void componentAdded(ContainerEvent e) {
+		assert e != null;
+		assert EventQueue.isDispatchThread(); // On AWT event thread
+		Container source = (Container) e.getSource();
+		handleAllAdds(source, e.getChild());
+	}
 
-  public void componentRemoved(ContainerEvent e) {
-    assert e != null;
-    assert EventQueue.isDispatchThread(); // On AWT event thread
-    Container source = (Container) e.getSource();
-    handleAllRemoves(source, e.getChild());
-  }
+	public void componentRemoved(ContainerEvent e) {
+		assert e != null;
+		assert EventQueue.isDispatchThread(); // On AWT event thread
+		Container source = (Container) e.getSource();
+		handleAllRemoves(source, e.getChild());
+	}
 }
diff --git a/org.eclipse.wb.swing/src/swingintegration/example/SwtFocusHandler.java b/org.eclipse.wb.swing/src/swingintegration/example/SwtFocusHandler.java
index 365ae595f..f3484b302 100644
--- a/org.eclipse.wb.swing/src/swingintegration/example/SwtFocusHandler.java
+++ b/org.eclipse.wb.swing/src/swingintegration/example/SwtFocusHandler.java
@@ -23,117 +23,117 @@
 import java.awt.EventQueue;
 
 class SwtFocusHandler implements FocusListener, KeyListener {
-  private final Composite composite;
-  private final Display display;
-  private AwtFocusHandler awtHandler;
+	private final Composite composite;
+	private final Display display;
+	private AwtFocusHandler awtHandler;
 
-  SwtFocusHandler(Composite composite) {
-    assert composite != null;
-    assert Display.getCurrent() != null; // On SWT event thread
-    this.composite = composite;
-    display = composite.getDisplay();
-    composite.addFocusListener(this);
-    composite.addKeyListener(this);
-  }
+	SwtFocusHandler(Composite composite) {
+		assert composite != null;
+		assert Display.getCurrent() != null; // On SWT event thread
+		this.composite = composite;
+		display = composite.getDisplay();
+		composite.addFocusListener(this);
+		composite.addKeyListener(this);
+	}
 
-  void setAwtHandler(AwtFocusHandler handler) {
-    assert handler != null;
-    assert awtHandler == null; // this method is meant to be called once
-    assert composite != null;
-    assert Display.getCurrent() != null; // On SWT event thread
-    awtHandler = handler;
-    // Dismiss Swing popups when the main window is moved. (It would be
-    // better to dismiss popups whenever the titlebar is clicked, but
-    // there does not seem to be a way.)
-    final ControlAdapter controlAdapter = new ControlAdapter() {
-      @Override
-      public void controlMoved(ControlEvent e) {
-        assert awtHandler != null;
-        awtHandler.postHidePopups();
-      }
-    };
-    final Shell shell = composite.getShell();
-    shell.addControlListener(controlAdapter);
-    // Cleanup listeners on dispose
-    composite.addDisposeListener(new DisposeListener() {
-      public void widgetDisposed(DisposeEvent e) {
-        shell.removeControlListener(controlAdapter);
-      }
-    });
-  }
+	void setAwtHandler(AwtFocusHandler handler) {
+		assert handler != null;
+		assert awtHandler == null; // this method is meant to be called once
+		assert composite != null;
+		assert Display.getCurrent() != null; // On SWT event thread
+		awtHandler = handler;
+		// Dismiss Swing popups when the main window is moved. (It would be
+		// better to dismiss popups whenever the titlebar is clicked, but
+		// there does not seem to be a way.)
+		final ControlAdapter controlAdapter = new ControlAdapter() {
+			@Override
+			public void controlMoved(ControlEvent e) {
+				assert awtHandler != null;
+				awtHandler.postHidePopups();
+			}
+		};
+		final Shell shell = composite.getShell();
+		shell.addControlListener(controlAdapter);
+		// Cleanup listeners on dispose
+		composite.addDisposeListener(new DisposeListener() {
+			public void widgetDisposed(DisposeEvent e) {
+				shell.removeControlListener(controlAdapter);
+			}
+		});
+	}
 
-  void gainFocusNext() {
-    traverse(SWT.TRAVERSE_TAB_NEXT);
-  }
+	void gainFocusNext() {
+		traverse(SWT.TRAVERSE_TAB_NEXT);
+	}
 
-  void gainFocusPrevious() {
-    traverse(SWT.TRAVERSE_TAB_PREVIOUS);
-  }
+	void gainFocusPrevious() {
+		traverse(SWT.TRAVERSE_TAB_PREVIOUS);
+	}
 
-  private void traverse(final int traversal) {
-    assert composite != null;
-    // Tab from the containing SWT component while
-    // running on the SWT thread
-    Runnable r = new Runnable() {
-      public void run() {
-        composite.traverse(traversal);
-      }
-    };
-    display.asyncExec(r);
-  }
+	private void traverse(final int traversal) {
+		assert composite != null;
+		// Tab from the containing SWT component while
+		// running on the SWT thread
+		Runnable r = new Runnable() {
+			public void run() {
+				composite.traverse(traversal);
+			}
+		};
+		display.asyncExec(r);
+	}
 
-  //    boolean hasFocus() {
-  //        assert composite != null;
-  //
-  //        // This will return true if the composite has focus, or if any
-  //        // foreign (e.g. AWT) child of the composite has focus.
-  //        if (display.isDisposed()) {
-  //            return false;
-  //        }
-  //        final boolean[] result = new boolean[1];
-  //        display.syncExec(new Runnable() {
-  //            public void run() {
-  //                result[0] = (!composite.isDisposed() &&
-  //                             (display.getFocusControl() == composite));
-  //            }
-  //        });
-  //        return result[0];
-  //    }
-  // ..................... Listener implementations
-  public void focusGained(FocusEvent e) {
-    assert awtHandler != null;
-    assert Display.getCurrent() != null; // On SWT event thread
-    // System.out.println("Gained: " + e.toString() + " (" + e.widget.getClass().getName() + ")");
-    EventQueue.invokeLater(new Runnable() {
-      public void run() {
-        awtHandler.gainFocus();
-      }
-    });
-  }
+	//    boolean hasFocus() {
+	//        assert composite != null;
+	//
+	//        // This will return true if the composite has focus, or if any
+	//        // foreign (e.g. AWT) child of the composite has focus.
+	//        if (display.isDisposed()) {
+	//            return false;
+	//        }
+	//        final boolean[] result = new boolean[1];
+	//        display.syncExec(new Runnable() {
+	//            public void run() {
+	//                result[0] = (!composite.isDisposed() &&
+	//                             (display.getFocusControl() == composite));
+	//            }
+	//        });
+	//        return result[0];
+	//    }
+	// ..................... Listener implementations
+	public void focusGained(FocusEvent e) {
+		assert awtHandler != null;
+		assert Display.getCurrent() != null; // On SWT event thread
+		// System.out.println("Gained: " + e.toString() + " (" + e.widget.getClass().getName() + ")");
+		EventQueue.invokeLater(new Runnable() {
+			public void run() {
+				awtHandler.gainFocus();
+			}
+		});
+	}
 
-  public void focusLost(FocusEvent e) {
-    // System.out.println("Lost: " + e.toString() + " (" + e.widget.getClass().getName() + ")");
-  }
+	public void focusLost(FocusEvent e) {
+		// System.out.println("Lost: " + e.toString() + " (" + e.widget.getClass().getName() + ")");
+	}
 
-  public void keyPressed(KeyEvent e) {
-    assert Display.getCurrent() != null; // On SWT event thread
-    // If the embedded swing root pane has no components to receive focus,
-    // then there will be cases where the parent SWT composite will keep
-    // focus. (For example, when tabbing into the root pane container).
-    // By default, in these cases, the focus is swallowed by the Composite
-    // and never escapes. This code allows tab and back-tab to do the
-    // proper traversal to other SWT components from the composite.
-    // TODO: other keys?
-    if (e.keyCode == SWT.TAB) {
-      // TODO: In some cases, this gobbles up all the tabs, even from AWT children. Find a more selective way.
-      /*if (e.stateMask == SWT.NONE) {
+	public void keyPressed(KeyEvent e) {
+		assert Display.getCurrent() != null; // On SWT event thread
+		// If the embedded swing root pane has no components to receive focus,
+		// then there will be cases where the parent SWT composite will keep
+		// focus. (For example, when tabbing into the root pane container).
+		// By default, in these cases, the focus is swallowed by the Composite
+		// and never escapes. This code allows tab and back-tab to do the
+		// proper traversal to other SWT components from the composite.
+		// TODO: other keys?
+		if (e.keyCode == SWT.TAB) {
+			// TODO: In some cases, this gobbles up all the tabs, even from AWT children. Find a more selective way.
+			/*if (e.stateMask == SWT.NONE) {
           traverse(SWT.TRAVERSE_TAB_NEXT);
       } else if (e.stateMask == SWT.SHIFT) {
           traverse(SWT.TRAVERSE_TAB_PREVIOUS);
       }*/
-    }
-  }
+		}
+	}
 
-  public void keyReleased(KeyEvent e) {
-  }
+	public void keyReleased(KeyEvent e) {
+	}
 }
diff --git a/org.eclipse.wb.swing/src/swingintegration/example/SwtInputBlocker.java b/org.eclipse.wb.swing/src/swingintegration/example/SwtInputBlocker.java
index 720f3ace6..dca654898 100644
--- a/org.eclipse.wb.swing/src/swingintegration/example/SwtInputBlocker.java
+++ b/org.eclipse.wb.swing/src/swingintegration/example/SwtInputBlocker.java
@@ -15,83 +15,83 @@
 import org.eclipse.swt.widgets.Shell;
 
 class SwtInputBlocker extends Dialog {
-  static private SwtInputBlocker instance = null;
-  static private int blockCount = 0;
-  private Shell shell;
+	static private SwtInputBlocker instance = null;
+	static private int blockCount = 0;
+	private Shell shell;
 
-  private SwtInputBlocker(Shell parent) {
-    super(parent, SWT.NONE);
-  }
+	private SwtInputBlocker(Shell parent) {
+		super(parent, SWT.NONE);
+	}
 
-  private Object open() {
-    assert Display.getCurrent() != null; // On SWT event thread
-    final Shell parent = getParent();
-    shell = new Shell(parent, SWT.APPLICATION_MODAL);
-    shell.setSize(0, 0);
-    shell.addFocusListener(new FocusAdapter() {
-      @Override
-      public void focusGained(FocusEvent e) {
-        // On some platforms (e.g. Linux/GTK), the 0x0 shell still appears as a dot
-        // on the screen, so make it invisible by moving it below other windows. This
-        // is unnecessary under Windows and causes a flash, so only make the call when necessary.
-        if (Platform.isGtk()) {
-          shell.moveBelow(null);
-        }
-        AwtEnvironment.getInstance(shell.getDisplay()).requestAwtDialogFocus();
-      }
-    });
-    shell.open();
-    Display display = parent.getDisplay();
-    while (!shell.isDisposed()) {
-      if (!display.readAndDispatch()) {
-        display.sleep();
-      }
-    }
-    return null;
-  }
+	private Object open() {
+		assert Display.getCurrent() != null; // On SWT event thread
+		final Shell parent = getParent();
+		shell = new Shell(parent, SWT.APPLICATION_MODAL);
+		shell.setSize(0, 0);
+		shell.addFocusListener(new FocusAdapter() {
+			@Override
+			public void focusGained(FocusEvent e) {
+				// On some platforms (e.g. Linux/GTK), the 0x0 shell still appears as a dot
+				// on the screen, so make it invisible by moving it below other windows. This
+				// is unnecessary under Windows and causes a flash, so only make the call when necessary.
+				if (Platform.isGtk()) {
+					shell.moveBelow(null);
+				}
+				AwtEnvironment.getInstance(shell.getDisplay()).requestAwtDialogFocus();
+			}
+		});
+		shell.open();
+		Display display = parent.getDisplay();
+		while (!shell.isDisposed()) {
+			if (!display.readAndDispatch()) {
+				display.sleep();
+			}
+		}
+		return null;
+	}
 
-  private void close() {
-    assert shell != null;
-    shell.dispose();
-  }
+	private void close() {
+		assert shell != null;
+		shell.dispose();
+	}
 
-  static synchronized void unblock() {
-    assert blockCount >= 0;
-    assert Display.getCurrent() != null; // On SWT event thread
-    // System.out.println("Deleting SWT blocker");
-    if (blockCount == 0) {
-      return;
-    }
-    if (blockCount == 1 && instance != null) {
-      instance.close();
-      instance = null;
-    }
-    blockCount--;
-  }
+	static synchronized void unblock() {
+		assert blockCount >= 0;
+		assert Display.getCurrent() != null; // On SWT event thread
+		// System.out.println("Deleting SWT blocker");
+		if (blockCount == 0) {
+			return;
+		}
+		if (blockCount == 1 && instance != null) {
+			instance.close();
+			instance = null;
+		}
+		blockCount--;
+	}
 
-  static synchronized void block() {
-    assert blockCount >= 0;
-    // System.out.println("Creating SWT blocker");
-    final Display display = Display.getCurrent();
-    assert display != null; // On SWT event thread
-    blockCount++;
-    if (blockCount == 1) {
-      assert instance == null; // should be no existing blocker
-      // get a shell to parent the blocking dialog
-      Shell shell = AwtEnvironment.getInstance(display).getShell();
-      // If there is a shell to block, block input now. If there are no shells,
-      // then there is no input to block. In the case of no shells, we are not
-      // protecting against a shell that might get created later. This is a rare
-      // enough case to skip, at least for now. In the future, a listener could be
-      // added to cover it.
-      // TODO: if (shell==null) add listener to block shells created later?
-      //
-      // Block is implemented with a hidden modal dialog. Using setEnabled(false) is another option, but
-      // on some platforms that will grey the disabled controls.
-      if (shell != null) {
-        instance = new SwtInputBlocker(shell);
-        instance.open();
-      }
-    }
-  }
+	static synchronized void block() {
+		assert blockCount >= 0;
+		// System.out.println("Creating SWT blocker");
+		final Display display = Display.getCurrent();
+		assert display != null; // On SWT event thread
+		blockCount++;
+		if (blockCount == 1) {
+			assert instance == null; // should be no existing blocker
+			// get a shell to parent the blocking dialog
+			Shell shell = AwtEnvironment.getInstance(display).getShell();
+			// If there is a shell to block, block input now. If there are no shells,
+			// then there is no input to block. In the case of no shells, we are not
+			// protecting against a shell that might get created later. This is a rare
+			// enough case to skip, at least for now. In the future, a listener could be
+			// added to cover it.
+			// TODO: if (shell==null) add listener to block shells created later?
+			//
+			// Block is implemented with a hidden modal dialog. Using setEnabled(false) is another option, but
+			// on some platforms that will grey the disabled controls.
+			if (shell != null) {
+				instance = new SwtInputBlocker(shell);
+				instance.open();
+			}
+		}
+	}
 }
diff --git a/org.eclipse.wb.swt.widgets.baseline/src/org/eclipse/wb/swt/widgets/baseline/Baseline.java b/org.eclipse.wb.swt.widgets.baseline/src/org/eclipse/wb/swt/widgets/baseline/Baseline.java
index 8f26444e3..450eff5f7 100644
--- a/org.eclipse.wb.swt.widgets.baseline/src/org/eclipse/wb/swt/widgets/baseline/Baseline.java
+++ b/org.eclipse.wb.swt.widgets.baseline/src/org/eclipse/wb/swt/widgets/baseline/Baseline.java
@@ -31,193 +31,193 @@
  * @author mitin_aa
  */
 public class Baseline {
-  // spinner class may not exist in early versions of SWT
-  protected static Class<?> spinnerClass = null;
-  protected static Class<?> datetimeClass = null;
-  static {
-    try {
-      spinnerClass = Class.forName("org.eclipse.swt.widgets.Spinner");
-    } catch (Throwable e) {
-      // ignore all
-    }
-    try {
-      datetimeClass = Class.forName("org.eclipse.swt.widgets.DateTime");
-    } catch (Throwable e) {
-      // ignore all
-    }
-  }
-  /**
-   * Constant used for widgets which have no baseline or their baseline can't be determined
-   */
-  public static final int NO_BASELINE = -1;
-  /**
-   * No resize behavior
-   */
-  public static final int BRB_NONE = 0;
-  /**
-   * Baseline resize behavior constant. Indicates as the size of the component changes the baseline
-   * remains a fixed distance from the top of the component.
-   */
-  public static final int BRB_CONSTANT_ASCENT = 1;
-  /**
-   * Baseline resize behavior constant. Indicates as the size of the component changes the baseline
-   * remains a fixed distance from the bottom of the component.
-   */
-  public static final int BRB_CONSTANT_DESCENT = 2;
-  /**
-   * Baseline resize behavior constant. Indicates as the size of the component changes the baseline
-   * remains a fixed distance from the center of the component.
-   */
-  public static final int BRB_CENTER_OFFSET = 3;
-  /**
-   * Baseline resize behavior constant. Indicates as the size of the component changes the baseline
-   * can not be determined using one of the other constants.
-   */
-  public static final int BRB_OTHER = 4;
-  // private instance of Baseline
-  private static Baseline m_instance;
+	// spinner class may not exist in early versions of SWT
+	protected static Class<?> spinnerClass = null;
+	protected static Class<?> datetimeClass = null;
+	static {
+		try {
+			spinnerClass = Class.forName("org.eclipse.swt.widgets.Spinner");
+		} catch (Throwable e) {
+			// ignore all
+		}
+		try {
+			datetimeClass = Class.forName("org.eclipse.swt.widgets.DateTime");
+		} catch (Throwable e) {
+			// ignore all
+		}
+	}
+	/**
+	 * Constant used for widgets which have no baseline or their baseline can't be determined
+	 */
+	public static final int NO_BASELINE = -1;
+	/**
+	 * No resize behavior
+	 */
+	public static final int BRB_NONE = 0;
+	/**
+	 * Baseline resize behavior constant. Indicates as the size of the component changes the baseline
+	 * remains a fixed distance from the top of the component.
+	 */
+	public static final int BRB_CONSTANT_ASCENT = 1;
+	/**
+	 * Baseline resize behavior constant. Indicates as the size of the component changes the baseline
+	 * remains a fixed distance from the bottom of the component.
+	 */
+	public static final int BRB_CONSTANT_DESCENT = 2;
+	/**
+	 * Baseline resize behavior constant. Indicates as the size of the component changes the baseline
+	 * remains a fixed distance from the center of the component.
+	 */
+	public static final int BRB_CENTER_OFFSET = 3;
+	/**
+	 * Baseline resize behavior constant. Indicates as the size of the component changes the baseline
+	 * can not be determined using one of the other constants.
+	 */
+	public static final int BRB_OTHER = 4;
+	// private instance of Baseline
+	private static Baseline m_instance;
 
-  // protected ctor
-  protected Baseline() {
-  }
+	// protected ctor
+	protected Baseline() {
+	}
 
-  /**
-   * return true for widget classes which text is top-aligned
-   */
-  protected boolean topAlignedText(Class<?> clazz, int style) {
-    return false;
-  }
+	/**
+	 * return true for widget classes which text is top-aligned
+	 */
+	protected boolean topAlignedText(Class<?> clazz, int style) {
+		return false;
+	}
 
-  /**
-   * return true for widget classes which text is center-aligned
-   */
-  protected boolean centerAlignedText(Class<?> clazz, int style) {
-    return true;
-  }
+	/**
+	 * return true for widget classes which text is center-aligned
+	 */
+	protected boolean centerAlignedText(Class<?> clazz, int style) {
+		return true;
+	}
 
-  /**
-   * Does some baseline adjustments for baselines found in empiric way
-   */
-  protected int adjustBaseline(Control control, int baseline) {
-    return baseline;
-  }
+	/**
+	 * Does some baseline adjustments for baselines found in empiric way
+	 */
+	protected int adjustBaseline(Control control, int baseline) {
+		return baseline;
+	}
 
-  //
-  private static Baseline getInstance() {
-    if (m_instance == null) {
-      String platform = SWT.getPlatform();
-      if ("win32".equalsIgnoreCase(platform)) {
-        m_instance = new WindowsBaseline();
-      } else if ("gtk".equalsIgnoreCase(platform)) {
-        m_instance = new GtkBaseline();
-      } else if ("carbon".equalsIgnoreCase(platform)) {
-        m_instance = new CarbonBaseline();
-      } else if ("cocoa".equalsIgnoreCase(platform)) {
-        m_instance = new CocoaBaseline();
-      } else {
-        m_instance = new DefaultBaseline();
-      }
-    }
-    return m_instance;
-  }
+	//
+	private static Baseline getInstance() {
+		if (m_instance == null) {
+			String platform = SWT.getPlatform();
+			if ("win32".equalsIgnoreCase(platform)) {
+				m_instance = new WindowsBaseline();
+			} else if ("gtk".equalsIgnoreCase(platform)) {
+				m_instance = new GtkBaseline();
+			} else if ("carbon".equalsIgnoreCase(platform)) {
+				m_instance = new CarbonBaseline();
+			} else if ("cocoa".equalsIgnoreCase(platform)) {
+				m_instance = new CocoaBaseline();
+			} else {
+				m_instance = new DefaultBaseline();
+			}
+		}
+		return m_instance;
+	}
 
-  public static int getBaseline(Control control) {
-    if (control == null || control.isDisposed()) {
-      return NO_BASELINE;
-    }
-    Rectangle controlBounds = control.getBounds();
-    return getBaseline(control, controlBounds.width, controlBounds.height);
-  }
+	public static int getBaseline(Control control) {
+		if (control == null || control.isDisposed()) {
+			return NO_BASELINE;
+		}
+		Rectangle controlBounds = control.getBounds();
+		return getBaseline(control, controlBounds.width, controlBounds.height);
+	}
 
-  public static int getBaseline(Control control, int width, int height) {
-    if (control == null || control.isDisposed()) {
-      return NO_BASELINE;
-    }
-    try {
-      try {
-        // first of all try to get and invoke 'getBaseline()' method of control (if any).
-        Method baselineMethod = control.getClass().getMethod("getBaseline", new Class[]{});
-        if (baselineMethod != null) {
-          int baseline = ((Integer) baselineMethod.invoke(control, new Object[]{})).intValue();
-          if (baseline != NO_BASELINE) {
-            return baseline;
-          }
-        }
-      } catch (Throwable e) {
-        // just ignore and try usual way
-      }
-      return getInstance().fetchBaseline(control, width, height);
-    } catch (Throwable e) {
-      Platform.getLog(Baseline.class).error(e.getMessage(), e);
-      return NO_BASELINE;
-    }
-  }
+	public static int getBaseline(Control control, int width, int height) {
+		if (control == null || control.isDisposed()) {
+			return NO_BASELINE;
+		}
+		try {
+			try {
+				// first of all try to get and invoke 'getBaseline()' method of control (if any).
+				Method baselineMethod = control.getClass().getMethod("getBaseline", new Class[]{});
+				if (baselineMethod != null) {
+					int baseline = ((Integer) baselineMethod.invoke(control, new Object[]{})).intValue();
+					if (baseline != NO_BASELINE) {
+						return baseline;
+					}
+				}
+			} catch (Throwable e) {
+				// just ignore and try usual way
+			}
+			return getInstance().fetchBaseline(control, width, height);
+		} catch (Throwable e) {
+			Platform.getLog(Baseline.class).error(e.getMessage(), e);
+			return NO_BASELINE;
+		}
+	}
 
-  /**
-   * Main baseline value fetch method. Basically it fetches baseline value from controls using
-   * control's font metrics and specific info (e.g. top or center alignments of text (I have never
-   * seen bottom alignment)) then does baseline adjustments. This is very approximate value of
-   * baseline we get in this method.
-   */
-  int fetchBaseline(Control control, int width, int height) {
-    int baseline = NO_BASELINE;
-    GC gc = new GC(control);
-    Font font = control.getFont();
-    gc.setFont(font);
-    FontMetrics fontMetrics = gc.getFontMetrics();
-    gc.dispose();
-    int fontAscent = fontMetrics.getAscent() + fontMetrics.getLeading();
-    int fontHeight = fontMetrics.getHeight();
-    if (topAlignedText(control.getClass(), control.getStyle())) {
-      baseline = fontAscent;
-    }
-    if (centerAlignedText(control.getClass(), control.getStyle())) {
-      baseline = height / 2 - fontHeight / 2 + fontAscent;
-    }
-    baseline = adjustBaseline(control, baseline);
-    return baseline;
-  }
+	/**
+	 * Main baseline value fetch method. Basically it fetches baseline value from controls using
+	 * control's font metrics and specific info (e.g. top or center alignments of text (I have never
+	 * seen bottom alignment)) then does baseline adjustments. This is very approximate value of
+	 * baseline we get in this method.
+	 */
+	int fetchBaseline(Control control, int width, int height) {
+		int baseline = NO_BASELINE;
+		GC gc = new GC(control);
+		Font font = control.getFont();
+		gc.setFont(font);
+		FontMetrics fontMetrics = gc.getFontMetrics();
+		gc.dispose();
+		int fontAscent = fontMetrics.getAscent() + fontMetrics.getLeading();
+		int fontHeight = fontMetrics.getHeight();
+		if (topAlignedText(control.getClass(), control.getStyle())) {
+			baseline = fontAscent;
+		}
+		if (centerAlignedText(control.getClass(), control.getStyle())) {
+			baseline = height / 2 - fontHeight / 2 + fontAscent;
+		}
+		baseline = adjustBaseline(control, baseline);
+		return baseline;
+	}
 
-  /**
-   * Returns a constant indicating how the baseline varies with the size of the component.
-   *
-   * @param c
-   *          the Control to get the baseline resize behavior for
-   * @return one of BRB_CONSTANT_ASCENT, BRB_CONSTANT_DESCENT, BRB_CENTER_OFFSET or BRB_OTHER
-   */
-  public static int getBaselineResizeBehavior(Control control) {
-    if (control instanceof Text && (control.getStyle() & SWT.V_SCROLL) != 0) {
-      return BRB_CONSTANT_ASCENT;
-    }
-    return BRB_OTHER;
-  }
+	/**
+	 * Returns a constant indicating how the baseline varies with the size of the component.
+	 *
+	 * @param c
+	 *          the Control to get the baseline resize behavior for
+	 * @return one of BRB_CONSTANT_ASCENT, BRB_CONSTANT_DESCENT, BRB_CENTER_OFFSET or BRB_OTHER
+	 */
+	public static int getBaselineResizeBehavior(Control control) {
+		if (control instanceof Text && (control.getStyle() & SWT.V_SCROLL) != 0) {
+			return BRB_CONSTANT_ASCENT;
+		}
+		return BRB_OTHER;
+	}
 
-  /**
-   * @param control
-   * @return Control's insets as an array of int, where index: 0 - left side, 1 - top side, 2 -
-   *         right side, 3 - bottom side
-   */
-  public static int[] getInsets(Control control) {
-    int[] is = new int[4];
-    if (control instanceof Scrollable) {
-      Scrollable scrollable = (Scrollable) control;
-      Rectangle bounds = scrollable.getBounds();
-      Rectangle clientArea = scrollable.getClientArea();
-      Point clientAreaInDisplay = scrollable.toDisplay(new Point(clientArea.x, clientArea.y));
-      Point boundsInDisplay;
-      Composite parent = scrollable.getParent();
-      if (parent == null) {
-        boundsInDisplay = new Point(bounds.x, bounds.y);
-      } else {
-        boundsInDisplay = parent.toDisplay(new Point(bounds.x, bounds.y));
-      }
-      clientArea.x = clientAreaInDisplay.x;
-      clientArea.y = clientAreaInDisplay.y;
-      is[0] = clientArea.x - boundsInDisplay.x; // left
-      is[1] = clientArea.y - boundsInDisplay.y; // top
-      is[2] = boundsInDisplay.x + bounds.width - clientArea.x - clientArea.width; // right
-      is[3] = boundsInDisplay.y + bounds.height - clientArea.y - clientArea.height; // bottom
-    }
-    return is;
-  }
+	/**
+	 * @param control
+	 * @return Control's insets as an array of int, where index: 0 - left side, 1 - top side, 2 -
+	 *         right side, 3 - bottom side
+	 */
+	public static int[] getInsets(Control control) {
+		int[] is = new int[4];
+		if (control instanceof Scrollable) {
+			Scrollable scrollable = (Scrollable) control;
+			Rectangle bounds = scrollable.getBounds();
+			Rectangle clientArea = scrollable.getClientArea();
+			Point clientAreaInDisplay = scrollable.toDisplay(new Point(clientArea.x, clientArea.y));
+			Point boundsInDisplay;
+			Composite parent = scrollable.getParent();
+			if (parent == null) {
+				boundsInDisplay = new Point(bounds.x, bounds.y);
+			} else {
+				boundsInDisplay = parent.toDisplay(new Point(bounds.x, bounds.y));
+			}
+			clientArea.x = clientAreaInDisplay.x;
+			clientArea.y = clientAreaInDisplay.y;
+			is[0] = clientArea.x - boundsInDisplay.x; // left
+			is[1] = clientArea.y - boundsInDisplay.y; // top
+			is[2] = boundsInDisplay.x + bounds.width - clientArea.x - clientArea.width; // right
+			is[3] = boundsInDisplay.y + bounds.height - clientArea.y - clientArea.height; // bottom
+		}
+		return is;
+	}
 }
diff --git a/org.eclipse.wb.swt.widgets.baseline/src/org/eclipse/wb/swt/widgets/baseline/BaselineActivator.java b/org.eclipse.wb.swt.widgets.baseline/src/org/eclipse/wb/swt/widgets/baseline/BaselineActivator.java
index 2e57f02cc..4fa491c48 100644
--- a/org.eclipse.wb.swt.widgets.baseline/src/org/eclipse/wb/swt/widgets/baseline/BaselineActivator.java
+++ b/org.eclipse.wb.swt.widgets.baseline/src/org/eclipse/wb/swt/widgets/baseline/BaselineActivator.java
@@ -13,39 +13,39 @@
 import org.eclipse.ui.plugin.AbstractUIPlugin;
 
 public class BaselineActivator extends AbstractUIPlugin {
-  private static BaselineActivator plugin;
+	private static BaselineActivator plugin;
 
-  /* $if eclipse.version < 3.0 $
+	/* $if eclipse.version < 3.0 $
   public BaselineActivator(org.eclipse.core.runtime.IPluginDescriptor descriptor) {
   	super(descriptor);
   }
   $endif $ */
-  /* $if eclipse.version >= 3.0 $ */
-  @Override
-  public void start(org.osgi.framework.BundleContext context) throws Exception {
-    super.start(context);
-    /* $else $
+	/* $if eclipse.version >= 3.0 $ */
+	@Override
+	public void start(org.osgi.framework.BundleContext context) throws Exception {
+		super.start(context);
+		/* $else $
     public void startup() throws org.eclipse.core.runtime.CoreException {
     	super.startup();
     $endif $ */
-    plugin = this;
-  }
+		plugin = this;
+	}
 
-  /* $if eclipse.version >= 3.0 $ */
-  @Override
-  public void stop(org.osgi.framework.BundleContext context) throws Exception {
-    /* $else $
+	/* $if eclipse.version >= 3.0 $ */
+	@Override
+	public void stop(org.osgi.framework.BundleContext context) throws Exception {
+		/* $else $
     public void shutdown() throws org.eclipse.core.runtime.CoreException {
     $endif $ *//* $if eclipse.version >= 3.0 $ */
-    plugin = null;
-    /* $if eclipse.version >= 3.0 $ */
-    super.stop(context);
-    /* $else $
+		plugin = null;
+		/* $if eclipse.version >= 3.0 $ */
+		super.stop(context);
+		/* $else $
     super.shutdown();
     $endif $ */
-  }
+	}
 
-  public static BaselineActivator getDefault() {
-    return plugin;
-  }
+	public static BaselineActivator getDefault() {
+		return plugin;
+	}
 }
diff --git a/org.eclipse.wb.swt.widgets.baseline/src/org/eclipse/wb/swt/widgets/baseline/BaselineMessages.java b/org.eclipse.wb.swt.widgets.baseline/src/org/eclipse/wb/swt/widgets/baseline/BaselineMessages.java
index a5e757333..4f4ab5da2 100644
--- a/org.eclipse.wb.swt.widgets.baseline/src/org/eclipse/wb/swt/widgets/baseline/BaselineMessages.java
+++ b/org.eclipse.wb.swt.widgets.baseline/src/org/eclipse/wb/swt/widgets/baseline/BaselineMessages.java
@@ -3,13 +3,13 @@
 import org.eclipse.osgi.util.NLS;
 
 public class BaselineMessages extends NLS {
-  private static final String BUNDLE_NAME = "org.eclipse.wb.swt.widgets.baseline.BaselineMessages"; //$NON-NLS-1$
-  public static String Library_canNotLoad;
-  static {
-    // initialize resource bundle
-    NLS.initializeMessages(BUNDLE_NAME, BaselineMessages.class);
-  }
+	private static final String BUNDLE_NAME = "org.eclipse.wb.swt.widgets.baseline.BaselineMessages"; //$NON-NLS-1$
+	public static String Library_canNotLoad;
+	static {
+		// initialize resource bundle
+		NLS.initializeMessages(BUNDLE_NAME, BaselineMessages.class);
+	}
 
-  private BaselineMessages() {
-  }
+	private BaselineMessages() {
+	}
 }
diff --git a/org.eclipse.wb.swt.widgets.baseline/src/org/eclipse/wb/swt/widgets/baseline/CarbonBaseline.java b/org.eclipse.wb.swt.widgets.baseline/src/org/eclipse/wb/swt/widgets/baseline/CarbonBaseline.java
index 0e07baf03..663744569 100644
--- a/org.eclipse.wb.swt.widgets.baseline/src/org/eclipse/wb/swt/widgets/baseline/CarbonBaseline.java
+++ b/org.eclipse.wb.swt.widgets.baseline/src/org/eclipse/wb/swt/widgets/baseline/CarbonBaseline.java
@@ -19,57 +19,57 @@
 import org.eclipse.swt.widgets.Text;
 
 public class CarbonBaseline extends Baseline {
-  @Override
-  protected boolean centerAlignedText(Class<?> clazz, int style) {
-    return Button.class.isAssignableFrom(clazz)
-        || datetimeClass != null
-        && datetimeClass.isAssignableFrom(clazz);
-  }
+	@Override
+	protected boolean centerAlignedText(Class<?> clazz, int style) {
+		return Button.class.isAssignableFrom(clazz)
+				|| datetimeClass != null
+				&& datetimeClass.isAssignableFrom(clazz);
+	}
 
-  @Override
-  protected boolean topAlignedText(Class<?> clazz, int style) {
-    return Label.class.isAssignableFrom(clazz)
-        || Combo.class.isAssignableFrom(clazz)
-        || Text.class.isAssignableFrom(clazz)
-        || List.class.isAssignableFrom(clazz)
-        || spinnerClass != null
-        && spinnerClass.isAssignableFrom(clazz);
-  }
+	@Override
+	protected boolean topAlignedText(Class<?> clazz, int style) {
+		return Label.class.isAssignableFrom(clazz)
+				|| Combo.class.isAssignableFrom(clazz)
+				|| Text.class.isAssignableFrom(clazz)
+				|| List.class.isAssignableFrom(clazz)
+				|| spinnerClass != null
+				&& spinnerClass.isAssignableFrom(clazz);
+	}
 
-  @Override
-  protected int adjustBaseline(Control control, int baseline) {
-    int style = control.getStyle();
-    boolean hasBorder = (style & SWT.BORDER) != 0;
-    int borderWidth = control.getBorderWidth();
-    Class<?> controlClass = control.getClass();
-    boolean isSpinner = spinnerClass != null && spinnerClass.isAssignableFrom(controlClass);
-    boolean isDateTime = datetimeClass != null && datetimeClass.isAssignableFrom(controlClass);
-    if (Button.class.isAssignableFrom(controlClass)) {
-      if ((style & SWT.CHECK) == 0 && (style & SWT.RADIO) == 0) {
-        baseline -= 1;
-      }
-    } else if (Combo.class.isAssignableFrom(controlClass)) {
-      if ((style & SWT.READ_ONLY) != 0) {
-        baseline += 6;
-      } else {
-        baseline += 7;
-      }
-    } else if (List.class.isAssignableFrom(controlClass) || isSpinner) {
-      baseline += 5;
-    } else if (isDateTime) {
-      if ((style & 1 << 10 /*SWT.CALENDAR*/) != 0) { // SWT.CALENDAR is Eclipse 3.3 and above
-        return NO_BASELINE;
-      }
-    } else if (Text.class.isAssignableFrom(controlClass)) {
-      if (hasBorder) {
-        baseline += borderWidth + 5;
-      } else {
-        baseline += 1;
-      }
-    }
-    return baseline;
-  }
-  /*int fetchBaseline2(Control control, int width, int height) {
+	@Override
+	protected int adjustBaseline(Control control, int baseline) {
+		int style = control.getStyle();
+		boolean hasBorder = (style & SWT.BORDER) != 0;
+		int borderWidth = control.getBorderWidth();
+		Class<?> controlClass = control.getClass();
+		boolean isSpinner = spinnerClass != null && spinnerClass.isAssignableFrom(controlClass);
+		boolean isDateTime = datetimeClass != null && datetimeClass.isAssignableFrom(controlClass);
+		if (Button.class.isAssignableFrom(controlClass)) {
+			if ((style & SWT.CHECK) == 0 && (style & SWT.RADIO) == 0) {
+				baseline -= 1;
+			}
+		} else if (Combo.class.isAssignableFrom(controlClass)) {
+			if ((style & SWT.READ_ONLY) != 0) {
+				baseline += 6;
+			} else {
+				baseline += 7;
+			}
+		} else if (List.class.isAssignableFrom(controlClass) || isSpinner) {
+			baseline += 5;
+		} else if (isDateTime) {
+			if ((style & 1 << 10 /*SWT.CALENDAR*/) != 0) { // SWT.CALENDAR is Eclipse 3.3 and above
+				return NO_BASELINE;
+			}
+		} else if (Text.class.isAssignableFrom(controlClass)) {
+			if (hasBorder) {
+				baseline += borderWidth + 5;
+			} else {
+				baseline += 1;
+			}
+		}
+		return baseline;
+	}
+	/*int fetchBaseline2(Control control, int width, int height) {
    try {
    Method method = Control.class.getDeclaredMethod("defaultThemeFont", new Class[]{});
    method.setAccessible(true);
diff --git a/org.eclipse.wb.swt.widgets.baseline/src/org/eclipse/wb/swt/widgets/baseline/CocoaBaseline.java b/org.eclipse.wb.swt.widgets.baseline/src/org/eclipse/wb/swt/widgets/baseline/CocoaBaseline.java
index 41eeca928..0253930ff 100644
--- a/org.eclipse.wb.swt.widgets.baseline/src/org/eclipse/wb/swt/widgets/baseline/CocoaBaseline.java
+++ b/org.eclipse.wb.swt.widgets.baseline/src/org/eclipse/wb/swt/widgets/baseline/CocoaBaseline.java
@@ -20,41 +20,41 @@
  * @author mitin_aa
  */
 public class CocoaBaseline extends Baseline {
-  static {
-    Library.loadLibrary("baseline-cocoa");
-  }
+	static {
+		Library.loadLibrary("baseline-cocoa");
+	}
 
-  @Override
-  int fetchBaseline(Control control, int width, int height) {
-    try {
-      int baseline = _fetchBaseline(getID(control, "view"));
-      if (baseline != -1) {
-        return baseline;
-      }
-    } catch (Throwable e) {
-      // ignore errors
-    }
-    return super.fetchBaseline(control, width, height);
-  }
+	@Override
+	int fetchBaseline(Control control, int width, int height) {
+		try {
+			int baseline = _fetchBaseline(getID(control, "view"));
+			if (baseline != -1) {
+				return baseline;
+			}
+		} catch (Throwable e) {
+			// ignore errors
+		}
+		return super.fetchBaseline(control, width, height);
+	}
 
-  /**
-   * @return the Cocoa id field.
-   * @throws Exception
-   */
-  private long getID(Control control, String name) throws Exception {
-    Field handleField = Control.class.getDeclaredField(name);
-    handleField.setAccessible(true);
-    Object handleValue = handleField.get(control);
-    Field idField = handleValue.getClass().getField("id");
-    idField.setAccessible(true);
-    Number idValue = (Number) idField.get(handleValue);
-    return idValue.longValue();
-  }
+	/**
+	 * @return the Cocoa id field.
+	 * @throws Exception
+	 */
+	private long getID(Control control, String name) throws Exception {
+		Field handleField = Control.class.getDeclaredField(name);
+		handleField.setAccessible(true);
+		Object handleValue = handleField.get(control);
+		Field idField = handleValue.getClass().getField("id");
+		idField.setAccessible(true);
+		Number idValue = (Number) idField.get(handleValue);
+		return idValue.longValue();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // native
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private native int _fetchBaseline(long widgetHandle);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// native
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private native int _fetchBaseline(long widgetHandle);
 }
diff --git a/org.eclipse.wb.swt.widgets.baseline/src/org/eclipse/wb/swt/widgets/baseline/GtkBaseline.java b/org.eclipse.wb.swt.widgets.baseline/src/org/eclipse/wb/swt/widgets/baseline/GtkBaseline.java
index a64dcf6f0..98d1ed8a5 100644
--- a/org.eclipse.wb.swt.widgets.baseline/src/org/eclipse/wb/swt/widgets/baseline/GtkBaseline.java
+++ b/org.eclipse.wb.swt.widgets.baseline/src/org/eclipse/wb/swt/widgets/baseline/GtkBaseline.java
@@ -23,63 +23,63 @@
  * @author mitin_aa
  */
 final class GtkBaseline extends Baseline {
-  static {
-    Library.loadLibrary("baseline");
-  }
+	static {
+		Library.loadLibrary("baseline");
+	}
 
-  private native static int fetchBaseline(long widgetHandle);
+	private native static int fetchBaseline(long widgetHandle);
 
-  private native static int fetchBaselineFromLayout(long layoutHandle);
+	private native static int fetchBaselineFromLayout(long layoutHandle);
 
-  @Override
-  int fetchBaseline(Control control, int width, int height) {
-    int baseline = NO_BASELINE;
-    try {
-      // we need to check if any text set for widget. If no text set we will set
-      // our own to fetch baseline value properly (actually I suppose that we should not do baseline
-      // fetch from widgets without "text" property).
-      Class<?> clazz = control.getClass();
-      Method setTextMethod = null;
-      try {
-        Method getTextMethod = clazz.getMethod("getText", new Class[]{});
-        if (getTextMethod != null) {
-          String oldText = (String) getTextMethod.invoke(control, new Object[]{});
-          if (oldText == null || oldText.length() == 0) {
-            setTextMethod = clazz.getMethod("setText", new Class[]{String.class});
-            setTextMethod.invoke(control, "a");
-            // wait for deferred Gtk events to complete
-            while (Display.getDefault().readAndDispatch()) {
-              ;
-            }
-          }
-        }
-      } catch (Throwable e) {
-        return NO_BASELINE;
-      }
-      // fetch baseline
-      if (control instanceof org.eclipse.swt.widgets.Link) {
-        org.eclipse.swt.widgets.Link linkControl = (org.eclipse.swt.widgets.Link) control;
-        Field layoutField = org.eclipse.swt.widgets.Link.class.getDeclaredField("layout");
-        layoutField.setAccessible(true);
-        org.eclipse.swt.graphics.TextLayout textLayout =
-            (org.eclipse.swt.graphics.TextLayout) layoutField.get(linkControl);
-        Field layoutHandleField =
-            org.eclipse.swt.graphics.TextLayout.class.getDeclaredField("layout");
-        layoutHandleField.setAccessible(true);
-        long layoutHandle = layoutHandleField.getLong(textLayout);
-        baseline = fetchBaselineFromLayout(layoutHandle);
-      } else {
-        Field controlHandleField = Widget.class.getDeclaredField("handle");
-        long controlHandle = controlHandleField.getLong(control);
-        baseline = fetchBaseline(controlHandle);
-      }
-      // bring back the empty string if needed
-      if (setTextMethod != null) {
-        setTextMethod.invoke(control, "");
-      }
-    } catch (Throwable e) {
-      e.printStackTrace();
-    }
-    return baseline;
-  }
+	@Override
+	int fetchBaseline(Control control, int width, int height) {
+		int baseline = NO_BASELINE;
+		try {
+			// we need to check if any text set for widget. If no text set we will set
+			// our own to fetch baseline value properly (actually I suppose that we should not do baseline
+			// fetch from widgets without "text" property).
+			Class<?> clazz = control.getClass();
+			Method setTextMethod = null;
+			try {
+				Method getTextMethod = clazz.getMethod("getText", new Class[]{});
+				if (getTextMethod != null) {
+					String oldText = (String) getTextMethod.invoke(control, new Object[]{});
+					if (oldText == null || oldText.length() == 0) {
+						setTextMethod = clazz.getMethod("setText", new Class[]{String.class});
+						setTextMethod.invoke(control, "a");
+						// wait for deferred Gtk events to complete
+						while (Display.getDefault().readAndDispatch()) {
+							;
+						}
+					}
+				}
+			} catch (Throwable e) {
+				return NO_BASELINE;
+			}
+			// fetch baseline
+			if (control instanceof org.eclipse.swt.widgets.Link) {
+				org.eclipse.swt.widgets.Link linkControl = (org.eclipse.swt.widgets.Link) control;
+				Field layoutField = org.eclipse.swt.widgets.Link.class.getDeclaredField("layout");
+				layoutField.setAccessible(true);
+				org.eclipse.swt.graphics.TextLayout textLayout =
+						(org.eclipse.swt.graphics.TextLayout) layoutField.get(linkControl);
+				Field layoutHandleField =
+						org.eclipse.swt.graphics.TextLayout.class.getDeclaredField("layout");
+				layoutHandleField.setAccessible(true);
+				long layoutHandle = layoutHandleField.getLong(textLayout);
+				baseline = fetchBaselineFromLayout(layoutHandle);
+			} else {
+				Field controlHandleField = Widget.class.getDeclaredField("handle");
+				long controlHandle = controlHandleField.getLong(control);
+				baseline = fetchBaseline(controlHandle);
+			}
+			// bring back the empty string if needed
+			if (setTextMethod != null) {
+				setTextMethod.invoke(control, "");
+			}
+		} catch (Throwable e) {
+			e.printStackTrace();
+		}
+		return baseline;
+	}
 }
diff --git a/org.eclipse.wb.swt.widgets.baseline/src/org/eclipse/wb/swt/widgets/baseline/Library.java b/org.eclipse.wb.swt.widgets.baseline/src/org/eclipse/wb/swt/widgets/baseline/Library.java
index e3c36efce..02c9d5618 100644
--- a/org.eclipse.wb.swt.widgets.baseline/src/org/eclipse/wb/swt/widgets/baseline/Library.java
+++ b/org.eclipse.wb.swt.widgets.baseline/src/org/eclipse/wb/swt/widgets/baseline/Library.java
@@ -20,123 +20,123 @@
  * Loader for native libs, based on SWT.Library class.
  */
 public class Library {
-  private static final String SEPARATOR = System.getProperty("file.separator");
-  private static final String OS_ARCH = System.getProperty("os.arch");
-  private static final String OS_NAME = System.getProperty("os.name");
-  private static final boolean IS_MAC = OS_NAME.startsWith("Mac");
-  private static final boolean IS_WINDOWS = OS_NAME.startsWith("Windows");
-  private static final boolean IS_64BIT_OS = OS_ARCH.indexOf("64") != -1;
+	private static final String SEPARATOR = System.getProperty("file.separator");
+	private static final String OS_ARCH = System.getProperty("os.arch");
+	private static final String OS_NAME = System.getProperty("os.name");
+	private static final boolean IS_MAC = OS_NAME.startsWith("Mac");
+	private static final boolean IS_WINDOWS = OS_NAME.startsWith("Windows");
+	private static final boolean IS_64BIT_OS = OS_ARCH.indexOf("64") != -1;
 
-  //
-  private static boolean extract(String fileName, String mappedName) {
-    FileOutputStream os = null;
-    InputStream is = null;
-    File file = new File(fileName);
-    file.deleteOnExit();
-    boolean extracted = false;
-    try {
-      if (!file.exists()) {
-        is = Library.class.getResourceAsStream(mappedName);
-        if (is != null) {
-          extracted = true;
-          int read;
-          byte[] buffer = new byte[4096];
-          os = new FileOutputStream(fileName);
-          while ((read = is.read(buffer)) != -1) {
-            os.write(buffer, 0, read);
-          }
-          os.close();
-          is.close();
-          if (!IS_WINDOWS) {
-            try {
-              Runtime.getRuntime().exec(new String[]{"chmod", "755", fileName}).waitFor();
-            } catch (Throwable e) {
-            }
-          }
-        }
-      }
-      if (load(fileName)) {
-        return true;
-      }
-    } catch (Throwable e) {
-      try {
-        if (os != null) {
-          os.close();
-        }
-      } catch (IOException e1) {
-      }
-      try {
-        if (is != null) {
-          is.close();
-        }
-      } catch (IOException e1) {
-      }
-      if (extracted && file.exists()) {
-        file.delete();
-      }
-    }
-    return false;
-  }
+	//
+	private static boolean extract(String fileName, String mappedName) {
+		FileOutputStream os = null;
+		InputStream is = null;
+		File file = new File(fileName);
+		file.deleteOnExit();
+		boolean extracted = false;
+		try {
+			if (!file.exists()) {
+				is = Library.class.getResourceAsStream(mappedName);
+				if (is != null) {
+					extracted = true;
+					int read;
+					byte[] buffer = new byte[4096];
+					os = new FileOutputStream(fileName);
+					while ((read = is.read(buffer)) != -1) {
+						os.write(buffer, 0, read);
+					}
+					os.close();
+					is.close();
+					if (!IS_WINDOWS) {
+						try {
+							Runtime.getRuntime().exec(new String[]{"chmod", "755", fileName}).waitFor();
+						} catch (Throwable e) {
+						}
+					}
+				}
+			}
+			if (load(fileName)) {
+				return true;
+			}
+		} catch (Throwable e) {
+			try {
+				if (os != null) {
+					os.close();
+				}
+			} catch (IOException e1) {
+			}
+			try {
+				if (is != null) {
+					is.close();
+				}
+			} catch (IOException e1) {
+			}
+			if (extracted && file.exists()) {
+				file.delete();
+			}
+		}
+		return false;
+	}
 
-  private static boolean load(String libName) {
-    try {
-      if (libName.indexOf(SEPARATOR) != -1) {
-        System.load(libName);
-      } else {
-        System.loadLibrary(libName);
-      }
-      return true;
-    } catch (UnsatisfiedLinkError e) {
-    }
-    return false;
-  }
+	private static boolean load(String libName) {
+		try {
+			if (libName.indexOf(SEPARATOR) != -1) {
+				System.load(libName);
+			} else {
+				System.loadLibrary(libName);
+			}
+			return true;
+		} catch (UnsatisfiedLinkError e) {
+		}
+		return false;
+	}
 
-  /**
-   * Loads the shared library that matches the version of the Java code which is currently running.
-   * SWT shared libraries follow an encoding scheme where the major, minor and revision numbers are
-   * embedded in the library name and this along with <code>name</code> is used to load the library.
-   * If this fails, <code>name</code> is used in another attempt to load the library, this time
-   * ignoring the SWT version encoding scheme.
-   *
-   * @param name
-   *          the name of the library to load
-   */
-  public static void loadLibrary(String name) {
-    if (IS_64BIT_OS && !IS_MAC) {
-      name += "64";
-    }
-    String fileName = mapLibraryName(name);
-    String path = System.getProperty("java.io.tmpdir");
-    File dir = new File(path, "wbp-baseline");
-    boolean make = false;
-    if (dir.exists() && dir.isDirectory() || (make = dir.mkdir())) {
-      path = dir.getAbsolutePath();
-      if (make && !IS_WINDOWS) {
-        try {
-          Runtime.getRuntime().exec(new String[]{"chmod", "777", path}).waitFor();
-        } catch (Throwable e) {
-        }
-      }
-    }
-    if (load(path + SEPARATOR + fileName)) {
-      return;
-    }
-    // Try extracting and loading library from jar
-    if (path != null) {
-      if (extract(path + SEPARATOR + fileName, fileName)) {
-        return;
-      }
-    }
-    throw new UnsatisfiedLinkError(MessageFormat.format(BaselineMessages.Library_canNotLoad, name));
-  }
+	/**
+	 * Loads the shared library that matches the version of the Java code which is currently running.
+	 * SWT shared libraries follow an encoding scheme where the major, minor and revision numbers are
+	 * embedded in the library name and this along with <code>name</code> is used to load the library.
+	 * If this fails, <code>name</code> is used in another attempt to load the library, this time
+	 * ignoring the SWT version encoding scheme.
+	 *
+	 * @param name
+	 *          the name of the library to load
+	 */
+	public static void loadLibrary(String name) {
+		if (IS_64BIT_OS && !IS_MAC) {
+			name += "64";
+		}
+		String fileName = mapLibraryName(name);
+		String path = System.getProperty("java.io.tmpdir");
+		File dir = new File(path, "wbp-baseline");
+		boolean make = false;
+		if (dir.exists() && dir.isDirectory() || (make = dir.mkdir())) {
+			path = dir.getAbsolutePath();
+			if (make && !IS_WINDOWS) {
+				try {
+					Runtime.getRuntime().exec(new String[]{"chmod", "777", path}).waitFor();
+				} catch (Throwable e) {
+				}
+			}
+		}
+		if (load(path + SEPARATOR + fileName)) {
+			return;
+		}
+		// Try extracting and loading library from jar
+		if (path != null) {
+			if (extract(path + SEPARATOR + fileName, fileName)) {
+				return;
+			}
+		}
+		throw new UnsatisfiedLinkError(MessageFormat.format(BaselineMessages.Library_canNotLoad, name));
+	}
 
-  private static String mapLibraryName(String libName) {
-    // SWT libraries in the Macintosh use the extension .jnilib but the some VMs map to .dylib.
-    libName = System.mapLibraryName(libName);
-    String ext = ".dylib";
-    if (libName.endsWith(ext)) {
-      libName = libName.substring(0, libName.length() - ext.length()) + ".jnilib";
-    }
-    return libName;
-  }
+	private static String mapLibraryName(String libName) {
+		// SWT libraries in the Macintosh use the extension .jnilib but the some VMs map to .dylib.
+		libName = System.mapLibraryName(libName);
+		String ext = ".dylib";
+		if (libName.endsWith(ext)) {
+			libName = libName.substring(0, libName.length() - ext.length()) + ".jnilib";
+		}
+		return libName;
+	}
 }
diff --git a/org.eclipse.wb.swt.widgets.baseline/src/org/eclipse/wb/swt/widgets/baseline/WindowsBaseline.java b/org.eclipse.wb.swt.widgets.baseline/src/org/eclipse/wb/swt/widgets/baseline/WindowsBaseline.java
index 4a9a0735e..894c49377 100644
--- a/org.eclipse.wb.swt.widgets.baseline/src/org/eclipse/wb/swt/widgets/baseline/WindowsBaseline.java
+++ b/org.eclipse.wb.swt.widgets.baseline/src/org/eclipse/wb/swt/widgets/baseline/WindowsBaseline.java
@@ -24,32 +24,32 @@
  * @author mitin_aa
  */
 final class WindowsBaseline extends Baseline {
-  /**
-   * Adjust baseline position for default Windows Theme
-   */
-  @Override
-  protected int adjustBaseline(Control control, int baseline) {
-    int style = control.getStyle();
-    int borderWidth = control.getBorderWidth();
-    Class<?> controlClass = control.getClass();
-    boolean isButton = Button.class.isAssignableFrom(controlClass);
-    boolean isText = Text.class.isAssignableFrom(controlClass);
-    boolean isSpinner = spinnerClass != null && spinnerClass.isAssignableFrom(controlClass);
-    if (Combo.class.isAssignableFrom(controlClass)) {
-      baseline -= 1;
-    } else if (List.class.isAssignableFrom(controlClass)) {
-      baseline += 2;
-    }
-    if ((style & SWT.BORDER) != 0 && !isButton) {
-      baseline += borderWidth;
-      if (isText || isSpinner) {
-        baseline += 1;
-      }
-    }
-    return baseline;
-  }
+	/**
+	 * Adjust baseline position for default Windows Theme
+	 */
+	@Override
+	protected int adjustBaseline(Control control, int baseline) {
+		int style = control.getStyle();
+		int borderWidth = control.getBorderWidth();
+		Class<?> controlClass = control.getClass();
+		boolean isButton = Button.class.isAssignableFrom(controlClass);
+		boolean isText = Text.class.isAssignableFrom(controlClass);
+		boolean isSpinner = spinnerClass != null && spinnerClass.isAssignableFrom(controlClass);
+		if (Combo.class.isAssignableFrom(controlClass)) {
+			baseline -= 1;
+		} else if (List.class.isAssignableFrom(controlClass)) {
+			baseline += 2;
+		}
+		if ((style & SWT.BORDER) != 0 && !isButton) {
+			baseline += borderWidth;
+			if (isText || isSpinner) {
+				baseline += 1;
+			}
+		}
+		return baseline;
+	}
 
-  /*private int adjustBaseline2(Control control, int baseline) {
+	/*private int adjustBaseline2(Control control, int baseline) {
   	int style = control.getStyle();
   	int borderWidth = control.getBorderWidth();
   	boolean isButton = control.getClass().isAssignableFrom(Button.class);
@@ -69,17 +69,17 @@ protected int adjustBaseline(Control control, int baseline) {
   	}
   	return baseline;
   }*/
-  @Override
-  protected boolean centerAlignedText(Class<?> clazz, int style) {
-    return Button.class.isAssignableFrom(clazz) || Combo.class.isAssignableFrom(clazz);
-  }
+	@Override
+	protected boolean centerAlignedText(Class<?> clazz, int style) {
+		return Button.class.isAssignableFrom(clazz) || Combo.class.isAssignableFrom(clazz);
+	}
 
-  @Override
-  protected boolean topAlignedText(Class<?> clazz, int style) {
-    return Label.class.isAssignableFrom(clazz)
-        || Text.class.isAssignableFrom(clazz)
-        || List.class.isAssignableFrom(clazz)
-        || spinnerClass != null
-        && spinnerClass.isAssignableFrom(clazz);
-  }
+	@Override
+	protected boolean topAlignedText(Class<?> clazz, int style) {
+		return Label.class.isAssignableFrom(clazz)
+				|| Text.class.isAssignableFrom(clazz)
+				|| List.class.isAssignableFrom(clazz)
+				|| spinnerClass != null
+				&& spinnerClass.isAssignableFrom(clazz);
+	}
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/Activator.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/Activator.java
index 24d2c5a3e..33bca45ee 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/Activator.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/Activator.java
@@ -27,60 +27,60 @@
  * @coverage swt
  */
 public class Activator extends AbstractUIPlugin {
-  public static final String PLUGIN_ID = "org.eclipse.wb.swt";
-  private static Activator m_plugin;
+	public static final String PLUGIN_ID = "org.eclipse.wb.swt";
+	private static Activator m_plugin;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Life cycle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void stop(BundleContext context) throws Exception {
-    m_plugin = null;
-    super.stop(context);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Life cycle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void stop(BundleContext context) throws Exception {
+		m_plugin = null;
+		super.stop(context);
+	}
 
-  @Override
-  public void start(BundleContext context) throws Exception {
-    // TODO Auto-generated method stub
-    super.start(context);
-    m_plugin = this;
-  }
+	@Override
+	public void start(BundleContext context) throws Exception {
+		// TODO Auto-generated method stub
+		super.start(context);
+		m_plugin = this;
+	}
 
-  /**
-   * Returns the shared instance.
-   */
-  public static Activator getDefault() {
-    return m_plugin;
-  }
+	/**
+	 * Returns the shared instance.
+	 */
+	public static Activator getDefault() {
+		return m_plugin;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Resources
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final BundleResourceProvider m_resourceProvider =
-      BundleResourceProvider.get(PLUGIN_ID);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Resources
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final BundleResourceProvider m_resourceProvider =
+			BundleResourceProvider.get(PLUGIN_ID);
 
-  /**
-   * @return the {@link InputStream} for file from plugin directory.
-   */
-  public static InputStream getFile(String path) {
-    return m_resourceProvider.getFile(path);
-  }
+	/**
+	 * @return the {@link InputStream} for file from plugin directory.
+	 */
+	public static InputStream getFile(String path) {
+		return m_resourceProvider.getFile(path);
+	}
 
-  /**
-   * @return the {@link Image} from "icons" directory, with caching.
-   */
-  public static Image getImage(String path) {
-    return m_resourceProvider.getImage("icons/" + path);
-  }
+	/**
+	 * @return the {@link Image} from "icons" directory, with caching.
+	 */
+	public static Image getImage(String path) {
+		return m_resourceProvider.getImage("icons/" + path);
+	}
 
-  /**
-   * @return the {@link ImageDescriptor} from "icons" directory.
-   */
-  public static ImageDescriptor getImageDescriptor(String path) {
-    return m_resourceProvider.getImageDescriptor("icons/" + path);
-  }
+	/**
+	 * @return the {@link ImageDescriptor} from "icons" directory.
+	 */
+	public static ImageDescriptor getImageDescriptor(String path) {
+		return m_resourceProvider.getImageDescriptor("icons/" + path);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/DescriptionProcessor.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/DescriptionProcessor.java
index 77987bbd0..9216bf9d1 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/DescriptionProcessor.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/DescriptionProcessor.java
@@ -54,280 +54,280 @@
  * @coverage swt
  */
 public final class DescriptionProcessor implements IDescriptionProcessor {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final IDescriptionProcessor INSTANCE = new DescriptionProcessor();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final IDescriptionProcessor INSTANCE = new DescriptionProcessor();
 
-  private DescriptionProcessor() {
-  }
+	private DescriptionProcessor() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IDescriptionProcessor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void process(final AstEditor editor, final ComponentDescription componentDescription) {
-    ExecutionUtils.runIgnore(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        new DescriptionProcessor_Single(editor, componentDescription);
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IDescriptionProcessor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void process(final AstEditor editor, final ComponentDescription componentDescription) {
+		ExecutionUtils.runIgnore(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				new DescriptionProcessor_Single(editor, componentDescription);
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Component processor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static class DescriptionProcessor_Single {
-    private final ComponentDescription componentDescription;
-    private final EditorState editorState;
-    private final ClassLoader classLoader;
-    private final Class<?> componentClass;
-    private final Class<?> compositeClass;
-    private final AstEditor editor;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Component processor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static class DescriptionProcessor_Single {
+		private final ComponentDescription componentDescription;
+		private final EditorState editorState;
+		private final ClassLoader classLoader;
+		private final Class<?> componentClass;
+		private final Class<?> compositeClass;
+		private final AstEditor editor;
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public DescriptionProcessor_Single(AstEditor editor, ComponentDescription componentDescription)
-        throws Exception {
-      this.editor = editor;
-      this.componentDescription = componentDescription;
-      componentClass = componentDescription.getComponentClass();
-      editorState = EditorState.get(editor);
-      classLoader = editorState.getEditorLoader();
-      compositeClass = classLoader.loadClass("org.eclipse.swt.widgets.Composite");
-      configureConstructors();
-      configureDefaultCreation();
-      markCreateMethodsAsExecutable();
-      ifHasNoLayout_then_setLayout_isNotAssociation();
-      configureIconFromBeanInfo();
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public DescriptionProcessor_Single(AstEditor editor, ComponentDescription componentDescription)
+				throws Exception {
+			this.editor = editor;
+			this.componentDescription = componentDescription;
+			componentClass = componentDescription.getComponentClass();
+			editorState = EditorState.get(editor);
+			classLoader = editorState.getEditorLoader();
+			compositeClass = classLoader.loadClass("org.eclipse.swt.widgets.Composite");
+			configureConstructors();
+			configureDefaultCreation();
+			markCreateMethodsAsExecutable();
+			ifHasNoLayout_then_setLayout_isNotAssociation();
+			configureIconFromBeanInfo();
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Configure constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    private void configureConstructors() throws Exception {
-      for (ConstructorDescription constructor : componentDescription.getConstructors()) {
-        List<ParameterDescription> parameters = constructor.getParameters();
-        // check for <init>(Composite[, *])
-        if (parameters.size() >= 1) {
-          ParameterDescription parameter_0 = parameters.get(0);
-          if (isComposite(parameter_0.getType())) {
-            markFirstParameterAsParent(parameter_0);
-            // check for <init>(Composite, int[, *])
-            if (parameters.size() >= 2) {
-              ParameterDescription parameter_1 = parameters.get(1);
-              if (parameter_1.getType() == int.class) {
-                ensureStylePropertyEditor(parameter_1);
-              }
-            }
-          }
-        }
-      }
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Configure constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		private void configureConstructors() throws Exception {
+			for (ConstructorDescription constructor : componentDescription.getConstructors()) {
+				List<ParameterDescription> parameters = constructor.getParameters();
+				// check for <init>(Composite[, *])
+				if (parameters.size() >= 1) {
+					ParameterDescription parameter_0 = parameters.get(0);
+					if (isComposite(parameter_0.getType())) {
+						markFirstParameterAsParent(parameter_0);
+						// check for <init>(Composite, int[, *])
+						if (parameters.size() >= 2) {
+							ParameterDescription parameter_1 = parameters.get(1);
+							if (parameter_1.getType() == int.class) {
+								ensureStylePropertyEditor(parameter_1);
+							}
+						}
+					}
+				}
+			}
+		}
 
-    /**
-     * Ensures that given integer {@link ParameterDescription} has {@link StylePropertyEditor}. If
-     * needed, uses {@link StylePropertyEditor} from superclass constructor.
-     */
-    private void ensureStylePropertyEditor(ParameterDescription parameter) throws Exception {
-      boolean hasSpecialPropertyEditor =
-          parameter.getEditor() instanceof StylePropertyEditor
-              || parameter.getEditor() instanceof DisplayExpressionPropertyEditor;
-      if (!hasSpecialPropertyEditor) {
-        hasSpecialPropertyEditor = configureStylePropertyEditor_fromBeanInfo(parameter);
-      }
-      if (!hasSpecialPropertyEditor) {
-        ComponentDescription superComponentDescription =
-            ComponentDescriptionHelper.getDescription(editor, componentClass.getSuperclass());
-        for (ConstructorDescription constructor : superComponentDescription.getConstructors()) {
-          List<ParameterDescription> parameters = constructor.getParameters();
-          if (parameters.size() >= 2) {
-            ParameterDescription parameter_0 = parameters.get(0);
-            ParameterDescription parameter_1 = parameters.get(1);
-            if (isComposite(parameter_0.getType())
-                && parameter_1.getType() == int.class
-                && parameter_1.getEditor() instanceof StylePropertyEditor) {
-              parameter.setEditor(parameter_1.getEditor());
-              parameter.setDefaultSource(parameter_1.getDefaultSource());
-              break;
-            }
-          }
-        }
-      }
-    }
+		/**
+		 * Ensures that given integer {@link ParameterDescription} has {@link StylePropertyEditor}. If
+		 * needed, uses {@link StylePropertyEditor} from superclass constructor.
+		 */
+		private void ensureStylePropertyEditor(ParameterDescription parameter) throws Exception {
+			boolean hasSpecialPropertyEditor =
+					parameter.getEditor() instanceof StylePropertyEditor
+					|| parameter.getEditor() instanceof DisplayExpressionPropertyEditor;
+			if (!hasSpecialPropertyEditor) {
+				hasSpecialPropertyEditor = configureStylePropertyEditor_fromBeanInfo(parameter);
+			}
+			if (!hasSpecialPropertyEditor) {
+				ComponentDescription superComponentDescription =
+						ComponentDescriptionHelper.getDescription(editor, componentClass.getSuperclass());
+				for (ConstructorDescription constructor : superComponentDescription.getConstructors()) {
+					List<ParameterDescription> parameters = constructor.getParameters();
+					if (parameters.size() >= 2) {
+						ParameterDescription parameter_0 = parameters.get(0);
+						ParameterDescription parameter_1 = parameters.get(1);
+						if (isComposite(parameter_0.getType())
+								&& parameter_1.getType() == int.class
+								&& parameter_1.getEditor() instanceof StylePropertyEditor) {
+							parameter.setEditor(parameter_1.getEditor());
+							parameter.setDefaultSource(parameter_1.getDefaultSource());
+							break;
+						}
+					}
+				}
+			}
+		}
 
-    private boolean configureStylePropertyEditor_fromBeanInfo(ParameterDescription parameter)
-        throws Exception {
-      Object styleObject =
-          componentDescription.getBeanDescriptor().getValue("org.eclipse.wb.swt.style");
-      if (styleObject instanceof String[][]) {
-        Map<String, Object> parameters = Maps.newTreeMap();
-        parameters.put("class", "org.eclipse.swt.SWT");
-        // fill parameters
-        int selectIndex = 0;
-        String[][] lines = (String[][]) styleObject;
-        for (String[] line : lines) {
-          // set
-          if (line.length >= 3 && line[0].equals("set") && line[1] == null) {
-            String setString = "";
-            for (int i = 2; i < line.length; i++) {
-              setString += " ";
-              setString += line[i].toUpperCase(Locale.ENGLISH);
-            }
-            parameters.put("set", setString.trim());
-          }
-          // select
-          if (line.length >= 5 && line[0].equals("select") && line[3] == null) {
-            String title = line[1];
-            String defaultField = line[2].toUpperCase(Locale.ENGLISH);
-            String selectString = title + " " + defaultField;
-            for (int i = 4; i < line.length; i++) {
-              selectString += " ";
-              selectString += line[i].toUpperCase(Locale.ENGLISH);
-            }
-            parameters.put("select" + selectIndex, selectString.trim());
-            selectIndex++;
-          }
-        }
-        // set StylePropertyEditor
-        StylePropertyEditor stylePropertyEditor = new StylePropertyEditor();
-        stylePropertyEditor.configure(editorState, parameters);
-        parameter.setEditor(stylePropertyEditor);
-        return true;
-      }
-      return false;
-    }
+		private boolean configureStylePropertyEditor_fromBeanInfo(ParameterDescription parameter)
+				throws Exception {
+			Object styleObject =
+					componentDescription.getBeanDescriptor().getValue("org.eclipse.wb.swt.style");
+			if (styleObject instanceof String[][]) {
+				Map<String, Object> parameters = Maps.newTreeMap();
+				parameters.put("class", "org.eclipse.swt.SWT");
+				// fill parameters
+				int selectIndex = 0;
+				String[][] lines = (String[][]) styleObject;
+				for (String[] line : lines) {
+					// set
+					if (line.length >= 3 && line[0].equals("set") && line[1] == null) {
+						String setString = "";
+						for (int i = 2; i < line.length; i++) {
+							setString += " ";
+							setString += line[i].toUpperCase(Locale.ENGLISH);
+						}
+						parameters.put("set", setString.trim());
+					}
+					// select
+					if (line.length >= 5 && line[0].equals("select") && line[3] == null) {
+						String title = line[1];
+						String defaultField = line[2].toUpperCase(Locale.ENGLISH);
+						String selectString = title + " " + defaultField;
+						for (int i = 4; i < line.length; i++) {
+							selectString += " ";
+							selectString += line[i].toUpperCase(Locale.ENGLISH);
+						}
+						parameters.put("select" + selectIndex, selectString.trim());
+						selectIndex++;
+					}
+				}
+				// set StylePropertyEditor
+				StylePropertyEditor stylePropertyEditor = new StylePropertyEditor();
+				stylePropertyEditor.configure(editorState, parameters);
+				parameter.setEditor(stylePropertyEditor);
+				return true;
+			}
+			return false;
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Configure default creation
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    private void configureDefaultCreation() {
-      Constructor<?> constructor = ReflectionUtils.getShortestConstructor(componentClass);
-      if (constructor != null) {
-        String source =
-            "new " + componentClass.getName() + "(" + getConstructorArguments(constructor) + ")";
-        CreationDescription creationDefault =
-            new CreationDescription(componentDescription, null, null);
-        creationDefault.setSource(source);
-        componentDescription.setCreationDefault(creationDefault);
-      }
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Configure default creation
+		//
+		////////////////////////////////////////////////////////////////////////////
+		private void configureDefaultCreation() {
+			Constructor<?> constructor = ReflectionUtils.getShortestConstructor(componentClass);
+			if (constructor != null) {
+				String source =
+						"new " + componentClass.getName() + "(" + getConstructorArguments(constructor) + ")";
+				CreationDescription creationDefault =
+						new CreationDescription(componentDescription, null, null);
+				creationDefault.setSource(source);
+				componentDescription.setCreationDefault(creationDefault);
+			}
+		}
 
-    private String getConstructorArguments(Constructor<?> constructor) {
-      String arguments = "";
-      Class<?>[] parameters = constructor.getParameterTypes();
-      boolean wasComposite = false;
-      for (int i = 0; i < parameters.length; i++) {
-        Class<?> parameter = parameters[i];
-        if (i == 0 && isComposite(parameter)) {
-          arguments += "%parent%";
-          wasComposite = true;
-        } else if (i == 1 && parameter == int.class && wasComposite) {
-          arguments += "org.eclipse.swt.SWT.NONE";
-        } else {
-          arguments += AstParser.getDefaultValue(parameter.getCanonicalName());
-        }
-        arguments += ", ";
-      }
-      arguments = StringUtils.removeEnd(arguments, ", ");
-      return arguments;
-    }
+		private String getConstructorArguments(Constructor<?> constructor) {
+			String arguments = "";
+			Class<?>[] parameters = constructor.getParameterTypes();
+			boolean wasComposite = false;
+			for (int i = 0; i < parameters.length; i++) {
+				Class<?> parameter = parameters[i];
+				if (i == 0 && isComposite(parameter)) {
+					arguments += "%parent%";
+					wasComposite = true;
+				} else if (i == 1 && parameter == int.class && wasComposite) {
+					arguments += "org.eclipse.swt.SWT.NONE";
+				} else {
+					arguments += AstParser.getDefaultValue(parameter.getCanonicalName());
+				}
+				arguments += ", ";
+			}
+			arguments = StringUtils.removeEnd(arguments, ", ");
+			return arguments;
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Mark createX(Composite[, *]) as executable
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    private void markCreateMethodsAsExecutable() throws Exception {
-      Collection<Method> methods = ReflectionUtils.getMethods(componentClass).values();
-      for (Method method : methods) {
-        if (ReflectionUtils.isPrivate(method)) {
-          continue;
-        }
-        if (method.getName().startsWith("create")) {
-          Class<?>[] parameterTypes = method.getParameterTypes();
-          if (parameterTypes.length != 0 && isComposite(parameterTypes[0])) {
-            componentDescription.addMethod(method);
-          }
-        }
-      }
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Mark createX(Composite[, *]) as executable
+		//
+		////////////////////////////////////////////////////////////////////////////
+		private void markCreateMethodsAsExecutable() throws Exception {
+			Collection<Method> methods = ReflectionUtils.getMethods(componentClass).values();
+			for (Method method : methods) {
+				if (ReflectionUtils.isPrivate(method)) {
+					continue;
+				}
+				if (method.getName().startsWith("create")) {
+					Class<?>[] parameterTypes = method.getParameterTypes();
+					if (parameterTypes.length != 0 && isComposite(parameterTypes[0])) {
+						componentDescription.addMethod(method);
+					}
+				}
+			}
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Other
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    /**
-     * If {@link Composite} marked as "no layout", then {@link Composite#setLayout(Layout)} should
-     * not be association and should not be executable.
-     */
-    private void ifHasNoLayout_then_setLayout_isNotAssociation() {
-      if (!isComposite(componentClass)) {
-        return;
-      }
-      if (!ObjectUtils.equals(componentDescription.getParameter("layout.has"), "false")) {
-        return;
-      }
-      // remove setLayout() method
-      List<MethodDescription> methods = componentDescription.getMethods();
-      for (MethodDescription methodDescription : methods) {
-        if (methodDescription.getSignature().equals("setLayout(org.eclipse.swt.widgets.Layout)")) {
-          methodDescription.getParameter(0).setChild(false);
-          break;
-        }
-      }
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Other
+		//
+		////////////////////////////////////////////////////////////////////////////
+		/**
+		 * If {@link Composite} marked as "no layout", then {@link Composite#setLayout(Layout)} should
+		 * not be association and should not be executable.
+		 */
+		private void ifHasNoLayout_then_setLayout_isNotAssociation() {
+			if (!isComposite(componentClass)) {
+				return;
+			}
+			if (!ObjectUtils.equals(componentDescription.getParameter("layout.has"), "false")) {
+				return;
+			}
+			// remove setLayout() method
+			List<MethodDescription> methods = componentDescription.getMethods();
+			for (MethodDescription methodDescription : methods) {
+				if (methodDescription.getSignature().equals("setLayout(org.eclipse.swt.widgets.Layout)")) {
+					methodDescription.getParameter(0).setChild(false);
+					break;
+				}
+			}
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Icon
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    private void configureIconFromBeanInfo() throws Exception {
-      BeanInfo beanInfo = componentDescription.getBeanInfo();
-      if (beanInfo != null) {
-        java.awt.Image awtIcon = beanInfo.getIcon(BeanInfo.ICON_COLOR_16x16);
-        if (awtIcon != null) {
-          Image icon = ImageUtils.convertToSWT(awtIcon);
-          componentDescription.setIcon(icon);
-        }
-      }
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Icon
+		//
+		////////////////////////////////////////////////////////////////////////////
+		private void configureIconFromBeanInfo() throws Exception {
+			BeanInfo beanInfo = componentDescription.getBeanInfo();
+			if (beanInfo != null) {
+				java.awt.Image awtIcon = beanInfo.getIcon(BeanInfo.ICON_COLOR_16x16);
+				if (awtIcon != null) {
+					Image icon = ImageUtils.convertToSWT(awtIcon);
+					componentDescription.setIcon(icon);
+				}
+			}
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Utils
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    private boolean isComposite(Class<?> type) {
-      return compositeClass.isAssignableFrom(type);
-    }
-  }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Utils
+		//
+		////////////////////////////////////////////////////////////////////////////
+		private boolean isComposite(Class<?> type) {
+			return compositeClass.isAssignableFrom(type);
+		}
+	}
 
-  /**
-   * If not disabled, marks given {@link ParameterDescription} as parent.
-   */
-  private static void markFirstParameterAsParent(ParameterDescription parameter) {
-    // check for disabling this default marking as parent
-    if ("false".equals(parameter.getTag("parent"))) {
-      return;
-    }
-    // OK, mark as parent
-    parameter.setParent(true);
-  }
+	/**
+	 * If not disabled, marks given {@link ParameterDescription} as parent.
+	 */
+	private static void markFirstParameterAsParent(ParameterDescription parameter) {
+		// check for disabling this default marking as parent
+		if ("false".equals(parameter.getTag("parent"))) {
+			return;
+		}
+		// OK, mark as parent
+		parameter.setParent(true);
+	}
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/IExceptionConstants.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/IExceptionConstants.java
index 3baa2e507..7fd9798da 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/IExceptionConstants.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/IExceptionConstants.java
@@ -19,9 +19,9 @@
  * @coverage swt
  */
 public interface IExceptionConstants {
-  int NO_LAYOUT_EXPECTED = 2001;
-  int NO_LAYOUT_DATA_EXPECTED = 2002;
-  int INCOMPATIBLE_LAYOUT_DATA = 2003;
-  int DOUBLE_SET_LAYOUT = 2004;
-  int NULL_PARENT = 2005;
+	int NO_LAYOUT_EXPECTED = 2001;
+	int NO_LAYOUT_DATA_EXPECTED = 2002;
+	int INCOMPATIBLE_LAYOUT_DATA = 2003;
+	int DOUBLE_SET_LAYOUT = 2004;
+	int NULL_PARENT = 2005;
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/VisualDataMockupProvider.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/VisualDataMockupProvider.java
index ecd54a804..2c49a4ecc 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/VisualDataMockupProvider.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/VisualDataMockupProvider.java
@@ -18,117 +18,117 @@
  *
  */
 public class VisualDataMockupProvider {
-  public static final int MENU_ITEM_SEPARATOR_HEIGHT = 11;
+	public static final int MENU_ITEM_SEPARATOR_HEIGHT = 11;
 
-  /**
-   * Emulates the screen shot of the popup menu in case this information is not
-   * available.
-   *
-   * Required for both 64-bit Cocoa on MacOS and GTK3 on Linux.
-   *
-   * @param menu   the {@link Menu} with style {@link SWT#BAR}.
-   * @param bounds the bounds of the given menu item.
-   * @return the {@link Image} of popup or drop-down menu and fills the menu items
-   *         bounds array.
-   */
-  public Image mockMenuPopupVisualData(Menu menu, int[] bounds) {
-    int menuHeight = 4; // 4px menu border
-    int menuWidth = 5;
-    // calc bounds first
-    GC gc = new GC(menu.getDisplay());
-    for (int i = 0; i < menu.getItemCount(); ++i) {
-      int itemWidth = 24; // initial width as indent + place for check box
-      int itemHeight;
-      MenuItem item = menu.getItem(i);
-      if ((item.getStyle() & SWT.SEPARATOR) != 0) {
-        itemHeight = MENU_ITEM_SEPARATOR_HEIGHT;
-      } else {
-        Image itemImage = item.getImage();
-        int imageHeight = 0;
-        int textHeight = 0;
-        if (itemImage != null) {
-          Rectangle itemImageBounds = itemImage.getBounds();
-          itemWidth += itemImageBounds.width + 5; // 5px is gap between image and text
-          imageHeight = itemImageBounds.height;
-        }
-        String text = item.getText();
-        if (text != null) {
-          Point textDimensions = gc.stringExtent(text);
-          itemWidth += textDimensions.x;
-          textHeight = textDimensions.y;
-        }
-        itemHeight = 3 + Math.max(imageHeight, textHeight) + 3; // 3px border
-      }
-      bounds[i * 4 + 0] = 0; // x is always zero
-      bounds[i * 4 + 1] = menuHeight; // current menu height
-      bounds[i * 4 + 3] = itemHeight;
-      menuHeight += itemHeight;
-      menuWidth = Math.max(itemWidth, menuWidth);
-    }
-    menuHeight += 4; // 4px menu border
-    menuWidth += 20; // space for 'cascade' image, always present
-    // update items' width
-    for (int i = 0; i < menu.getItemCount(); ++i) {
-      bounds[i * 4 + 2] = menuWidth;
-    }
-    gc.dispose();
-    // draw
-    Image image = new Image(menu.getDisplay(), menuWidth, menuHeight);
-    gc = new GC(image);
-    gc.setBackground(IColorConstants.buttonLightest);
-    gc.fillRectangle(image.getBounds());
-    for (int i = 0; i < menu.getItemCount(); ++i) {
-      MenuItem item = menu.getItem(i);
-      int x = bounds[i * 4 + 0];
-      int y = bounds[i * 4 + 1] + bounds[i * 4 + 3] / 2; // y-center of the item
-      if ((item.getStyle() & SWT.SEPARATOR) != 0) {
-        gc.setForeground(IColorConstants.lightGray);
-        gc.drawLine(x, y, x + menuWidth, y);
-      } else {
-        if (item.getEnabled()) {
-          gc.setForeground(IColorConstants.menuForeground);
-        } else {
-          gc.setForeground(IColorConstants.gray);
-        }
-        if (item.getSelection()) {
-          Image checkImage = loadImage("check.png");
-          int checkHalfHeight = checkImage.getBounds().height / 2;
-          gc.drawImage(checkImage, x + 3, y - checkHalfHeight);
-          checkImage.dispose();
-        }
-        x += 20; // space for the check image should be always added
-        Image itemImage = item.getImage();
-        if (itemImage != null) {
-          Rectangle itemImageBounds = itemImage.getBounds();
-          int imageHalfHeight = itemImageBounds.height / 2;
-          gc.drawImage(itemImage, x, y - imageHalfHeight);
-          x += itemImageBounds.width + 5;
-        }
-        String text = item.getText();
-        if (text != null) {
-          Point textDimensions = gc.stringExtent(text);
-          gc.drawString(text, x, y - textDimensions.y / 2 - 1, true);
-        }
-        // draw cascade image if any
-        if ((item.getStyle() & SWT.CASCADE) != 0) {
-          Image cascadeImage = loadImage("cascade.png");
-          Rectangle imageBounds = cascadeImage.getBounds();
-          int itemWidth = bounds[i * 4 + 2];
-          gc.drawImage(cascadeImage, itemWidth - imageBounds.width, y - imageBounds.height / 2);
-          cascadeImage.dispose();
-        }
-      }
-    }
-    gc.dispose();
-    return image;
-  }
+	/**
+	 * Emulates the screen shot of the popup menu in case this information is not
+	 * available.
+	 *
+	 * Required for both 64-bit Cocoa on MacOS and GTK3 on Linux.
+	 *
+	 * @param menu   the {@link Menu} with style {@link SWT#BAR}.
+	 * @param bounds the bounds of the given menu item.
+	 * @return the {@link Image} of popup or drop-down menu and fills the menu items
+	 *         bounds array.
+	 */
+	public Image mockMenuPopupVisualData(Menu menu, int[] bounds) {
+		int menuHeight = 4; // 4px menu border
+		int menuWidth = 5;
+		// calc bounds first
+		GC gc = new GC(menu.getDisplay());
+		for (int i = 0; i < menu.getItemCount(); ++i) {
+			int itemWidth = 24; // initial width as indent + place for check box
+			int itemHeight;
+			MenuItem item = menu.getItem(i);
+			if ((item.getStyle() & SWT.SEPARATOR) != 0) {
+				itemHeight = MENU_ITEM_SEPARATOR_HEIGHT;
+			} else {
+				Image itemImage = item.getImage();
+				int imageHeight = 0;
+				int textHeight = 0;
+				if (itemImage != null) {
+					Rectangle itemImageBounds = itemImage.getBounds();
+					itemWidth += itemImageBounds.width + 5; // 5px is gap between image and text
+					imageHeight = itemImageBounds.height;
+				}
+				String text = item.getText();
+				if (text != null) {
+					Point textDimensions = gc.stringExtent(text);
+					itemWidth += textDimensions.x;
+					textHeight = textDimensions.y;
+				}
+				itemHeight = 3 + Math.max(imageHeight, textHeight) + 3; // 3px border
+			}
+			bounds[i * 4 + 0] = 0; // x is always zero
+			bounds[i * 4 + 1] = menuHeight; // current menu height
+			bounds[i * 4 + 3] = itemHeight;
+			menuHeight += itemHeight;
+			menuWidth = Math.max(itemWidth, menuWidth);
+		}
+		menuHeight += 4; // 4px menu border
+		menuWidth += 20; // space for 'cascade' image, always present
+		// update items' width
+		for (int i = 0; i < menu.getItemCount(); ++i) {
+			bounds[i * 4 + 2] = menuWidth;
+		}
+		gc.dispose();
+		// draw
+		Image image = new Image(menu.getDisplay(), menuWidth, menuHeight);
+		gc = new GC(image);
+		gc.setBackground(IColorConstants.buttonLightest);
+		gc.fillRectangle(image.getBounds());
+		for (int i = 0; i < menu.getItemCount(); ++i) {
+			MenuItem item = menu.getItem(i);
+			int x = bounds[i * 4 + 0];
+			int y = bounds[i * 4 + 1] + bounds[i * 4 + 3] / 2; // y-center of the item
+			if ((item.getStyle() & SWT.SEPARATOR) != 0) {
+				gc.setForeground(IColorConstants.lightGray);
+				gc.drawLine(x, y, x + menuWidth, y);
+			} else {
+				if (item.getEnabled()) {
+					gc.setForeground(IColorConstants.menuForeground);
+				} else {
+					gc.setForeground(IColorConstants.gray);
+				}
+				if (item.getSelection()) {
+					Image checkImage = loadImage("check.png");
+					int checkHalfHeight = checkImage.getBounds().height / 2;
+					gc.drawImage(checkImage, x + 3, y - checkHalfHeight);
+					checkImage.dispose();
+				}
+				x += 20; // space for the check image should be always added
+				Image itemImage = item.getImage();
+				if (itemImage != null) {
+					Rectangle itemImageBounds = itemImage.getBounds();
+					int imageHalfHeight = itemImageBounds.height / 2;
+					gc.drawImage(itemImage, x, y - imageHalfHeight);
+					x += itemImageBounds.width + 5;
+				}
+				String text = item.getText();
+				if (text != null) {
+					Point textDimensions = gc.stringExtent(text);
+					gc.drawString(text, x, y - textDimensions.y / 2 - 1, true);
+				}
+				// draw cascade image if any
+				if ((item.getStyle() & SWT.CASCADE) != 0) {
+					Image cascadeImage = loadImage("cascade.png");
+					Rectangle imageBounds = cascadeImage.getBounds();
+					int itemWidth = bounds[i * 4 + 2];
+					gc.drawImage(cascadeImage, itemWidth - imageBounds.width, y - imageBounds.height / 2);
+					cascadeImage.dispose();
+				}
+			}
+		}
+		gc.dispose();
+		return image;
+	}
 
-    private Image loadImage(String image) {
-      try (InputStream imageStream = getClass().getResourceAsStream(image)) {
-        return new Image(null, imageStream);
-      } catch (Throwable e) {
-        // ignore
-        return new Image(null, 1, 1);
-      }
-    }
+	private Image loadImage(String image) {
+		try (InputStream imageStream = getClass().getResourceAsStream(image)) {
+			return new Image(null, imageStream);
+		} catch (Throwable e) {
+			// ignore
+			return new Image(null, 1, 1);
+		}
+	}
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/ControlsLayoutRequestValidator.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/ControlsLayoutRequestValidator.java
index 65a8ba175..ab292abe6 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/ControlsLayoutRequestValidator.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/ControlsLayoutRequestValidator.java
@@ -21,6 +21,6 @@
  * @coverage swt.gef
  */
 public final class ControlsLayoutRequestValidator {
-  public static final ILayoutRequestValidator INSTANCE =
-      LayoutRequestValidators.componentType("org.eclipse.swt.widgets.Control");
+	public static final ILayoutRequestValidator INSTANCE =
+			LayoutRequestValidators.componentType("org.eclipse.swt.widgets.Control");
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/EditPartFactory.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/EditPartFactory.java
index 0e695d55a..e76e36ae0 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/EditPartFactory.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/EditPartFactory.java
@@ -32,50 +32,50 @@
  * @coverage swt.gef
  */
 public final class EditPartFactory implements IEditPartFactory {
-  private final static IEditPartFactory MATCHING_FACTORY =
-      new MatchingEditPartFactory(ImmutableList.of(
-          "org.eclipse.wb.internal.swt.model.widgets",
-          "org.eclipse.wb.internal.swt.model.jface.viewer"), ImmutableList.of(
-          "org.eclipse.wb.internal.swt.gef.part",
-          "org.eclipse.wb.internal.swt.gef.part"));
+	private final static IEditPartFactory MATCHING_FACTORY =
+			new MatchingEditPartFactory(ImmutableList.of(
+					"org.eclipse.wb.internal.swt.model.widgets",
+					"org.eclipse.wb.internal.swt.model.jface.viewer"), ImmutableList.of(
+							"org.eclipse.wb.internal.swt.gef.part",
+							"org.eclipse.wb.internal.swt.gef.part"));
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IEditPartFactory
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public EditPart createEditPart(EditPart context, Object model) {
-    // menu
-    {
-      if (model instanceof MenuInfo) {
-        MenuInfo menu = (MenuInfo) model;
-        if (menu.isPopup()) {
-          IMenuPopupInfo popupObject = MenuObjectInfoUtils.getMenuPopupInfo(menu);
-          return MenuEditPartFactory.createPopupMenu(menu, popupObject);
-        } else {
-          IMenuInfo menuObject = MenuObjectInfoUtils.getMenuInfo(menu);
-          return createMenuEditPart(menu, menuObject);
-        }
-      }
-      if (model instanceof MenuItemInfo) {
-        MenuItemInfo item = (MenuItemInfo) model;
-        IMenuItemInfo itemObject = MenuObjectInfoUtils.getMenuItemInfo(item);
-        return MenuEditPartFactory.createMenuItem(item, itemObject);
-      }
-    }
-    // most EditPart's can be created using matching
-    return MATCHING_FACTORY.createEditPart(context, model);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IEditPartFactory
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public EditPart createEditPart(EditPart context, Object model) {
+		// menu
+		{
+			if (model instanceof MenuInfo) {
+				MenuInfo menu = (MenuInfo) model;
+				if (menu.isPopup()) {
+					IMenuPopupInfo popupObject = MenuObjectInfoUtils.getMenuPopupInfo(menu);
+					return MenuEditPartFactory.createPopupMenu(menu, popupObject);
+				} else {
+					IMenuInfo menuObject = MenuObjectInfoUtils.getMenuInfo(menu);
+					return createMenuEditPart(menu, menuObject);
+				}
+			}
+			if (model instanceof MenuItemInfo) {
+				MenuItemInfo item = (MenuItemInfo) model;
+				IMenuItemInfo itemObject = MenuObjectInfoUtils.getMenuItemInfo(item);
+				return MenuEditPartFactory.createMenuItem(item, itemObject);
+			}
+		}
+		// most EditPart's can be created using matching
+		return MATCHING_FACTORY.createEditPart(context, model);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private EditPart createMenuEditPart(Object model, IMenuInfo menuInfo) {
-    return EnvironmentUtils.IS_MAC
-        ? MenuEditPartFactory.createMenuMac(model, menuInfo)
-        : MenuEditPartFactory.createMenu(model, menuInfo);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private EditPart createMenuEditPart(Object model, IMenuInfo menuInfo) {
+		return EnvironmentUtils.IS_MAC
+				? MenuEditPartFactory.createMenuMac(model, menuInfo)
+						: MenuEditPartFactory.createMenu(model, menuInfo);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/GefMessages.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/GefMessages.java
index 74c46acbd..06748fc72 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/GefMessages.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/GefMessages.java
@@ -3,34 +3,34 @@
 import org.eclipse.osgi.util.NLS;
 
 public class GefMessages extends NLS {
-  private static final String BUNDLE_NAME = "org.eclipse.wb.internal.swt.gef.GefMessages"; //$NON-NLS-1$
-  public static String ColumnHeaderEditPart_center;
-  public static String ColumnHeaderEditPart_delete;
-  public static String ColumnHeaderEditPart_fill;
-  public static String ColumnHeaderEditPart_grabExcessSpace;
-  public static String ColumnHeaderEditPart_left;
-  public static String ColumnHeaderEditPart_right;
-  public static String ColumnsLayoutEditPolicy_feedbackTextPrefix;
-  public static String FormHeaderLayoutEditPolicy_addSnapPoint;
-  public static String FormHeaderLayoutEditPolicy_configureDefaults;
-  public static String FormHeaderLayoutEditPolicy_confirmDefaultsMessage;
-  public static String FormHeaderLayoutEditPolicy_confirmDefaultsTitle;
-  public static String FormHeaderLayoutEditPolicy_removePercent;
-  public static String FormHeaderLayoutEditPolicy_restoreDefaults;
-  public static String FormHeaderLayoutEditPolicy_useAsDefaults;
-  public static String MenuBarDropLayoutEditPolicy_dropMenuHint;
-  public static String RowHeaderEditPart_bottom;
-  public static String RowHeaderEditPart_center;
-  public static String RowHeaderEditPart_delete;
-  public static String RowHeaderEditPart_fill;
-  public static String RowHeaderEditPart_grabExcessSpace;
-  public static String RowHeaderEditPart_top;
-  public static String RowsLayoutEditPolicy_feedbackTextPrefix;
-  static {
-    // initialize resource bundle
-    NLS.initializeMessages(BUNDLE_NAME, GefMessages.class);
-  }
+	private static final String BUNDLE_NAME = "org.eclipse.wb.internal.swt.gef.GefMessages"; //$NON-NLS-1$
+	public static String ColumnHeaderEditPart_center;
+	public static String ColumnHeaderEditPart_delete;
+	public static String ColumnHeaderEditPart_fill;
+	public static String ColumnHeaderEditPart_grabExcessSpace;
+	public static String ColumnHeaderEditPart_left;
+	public static String ColumnHeaderEditPart_right;
+	public static String ColumnsLayoutEditPolicy_feedbackTextPrefix;
+	public static String FormHeaderLayoutEditPolicy_addSnapPoint;
+	public static String FormHeaderLayoutEditPolicy_configureDefaults;
+	public static String FormHeaderLayoutEditPolicy_confirmDefaultsMessage;
+	public static String FormHeaderLayoutEditPolicy_confirmDefaultsTitle;
+	public static String FormHeaderLayoutEditPolicy_removePercent;
+	public static String FormHeaderLayoutEditPolicy_restoreDefaults;
+	public static String FormHeaderLayoutEditPolicy_useAsDefaults;
+	public static String MenuBarDropLayoutEditPolicy_dropMenuHint;
+	public static String RowHeaderEditPart_bottom;
+	public static String RowHeaderEditPart_center;
+	public static String RowHeaderEditPart_delete;
+	public static String RowHeaderEditPart_fill;
+	public static String RowHeaderEditPart_grabExcessSpace;
+	public static String RowHeaderEditPart_top;
+	public static String RowsLayoutEditPolicy_feedbackTextPrefix;
+	static {
+		// initialize resource bundle
+		NLS.initializeMessages(BUNDLE_NAME, GefMessages.class);
+	}
 
-  private GefMessages() {
-  }
+	private GefMessages() {
+	}
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/LayoutEditPolicyFactory.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/LayoutEditPolicyFactory.java
index 9fef85af7..8af179015 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/LayoutEditPolicyFactory.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/LayoutEditPolicyFactory.java
@@ -32,27 +32,27 @@
  * @coverage swt.gef
  */
 public final class LayoutEditPolicyFactory implements ILayoutEditPolicyFactory {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ILayoutEditPolicyFactory
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public LayoutEditPolicy createLayoutEditPolicy(EditPart context, Object model) {
-    if (model instanceof AbsoluteLayoutInfo) {
-      return new AbsoluteLayoutEditPolicy<ControlInfo>((AbsoluteLayoutInfo) model);
-    }
-    if (model instanceof GridLayoutInfo) {
-      return new GridLayoutEditPolicy<ControlInfo>((GridLayoutInfo) model);
-    }
-    if (model instanceof FormLayoutInfo) {
-      FormLayoutInfo formLayoutInfo = (FormLayoutInfo) model;
-      if (formLayoutInfo.getImpl() instanceof FormLayoutInfoImplAutomatic) {
-        return new FormLayoutEditPolicy<ControlInfo>(formLayoutInfo);
-      } else {
-        return new FormLayoutEditPolicyClassic<ControlInfo>(formLayoutInfo);
-      }
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ILayoutEditPolicyFactory
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public LayoutEditPolicy createLayoutEditPolicy(EditPart context, Object model) {
+		if (model instanceof AbsoluteLayoutInfo) {
+			return new AbsoluteLayoutEditPolicy<ControlInfo>((AbsoluteLayoutInfo) model);
+		}
+		if (model instanceof GridLayoutInfo) {
+			return new GridLayoutEditPolicy<ControlInfo>((GridLayoutInfo) model);
+		}
+		if (model instanceof FormLayoutInfo) {
+			FormLayoutInfo formLayoutInfo = (FormLayoutInfo) model;
+			if (formLayoutInfo.getImpl() instanceof FormLayoutInfoImplAutomatic) {
+				return new FormLayoutEditPolicy<ControlInfo>(formLayoutInfo);
+			} else {
+				return new FormLayoutEditPolicyClassic<ControlInfo>(formLayoutInfo);
+			}
+		}
+		return null;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/part/CompositeEditPart.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/part/CompositeEditPart.java
index 3a9d6e9c7..7ef901a48 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/part/CompositeEditPart.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/part/CompositeEditPart.java
@@ -38,63 +38,63 @@
  * @coverage swt.gef.part
  */
 public class CompositeEditPart extends ControlEditPart {
-  private final CompositeInfo m_composite;
+	private final CompositeInfo m_composite;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CompositeEditPart(CompositeInfo composite) {
-    super(composite);
-    m_composite = composite;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CompositeEditPart(CompositeInfo composite) {
+		super(composite);
+		m_composite = composite;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Figure
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void drawCustomBorder(Figure figure, Graphics graphics) {
-    try {
-      if (m_composite.shouldDrawDotsBorder()) {
-        graphics.setForegroundColor(IColorConstants.gray);
-        graphics.setLineStyle(SWT.LINE_DOT);
-        Rectangle area = figure.getClientArea();
-        graphics.drawRectangle(0, 0, area.width - 1, area.height - 1);
-      }
-    } catch (Throwable e) {
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Figure
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void drawCustomBorder(Figure figure, Graphics graphics) {
+		try {
+			if (m_composite.shouldDrawDotsBorder()) {
+				graphics.setForegroundColor(IColorConstants.gray);
+				graphics.setLineStyle(SWT.LINE_DOT);
+				Rectangle area = figure.getClientArea();
+				graphics.drawRectangle(0, 0, area.width - 1, area.height - 1);
+			}
+		} catch (Throwable e) {
+		}
+	}
 
-  @Override
-  protected void addChildVisual(EditPart childPart, int index) {
-    super.addChildVisual(childPart, getFigure().getChildren().size() - index);
-  }
+	@Override
+	protected void addChildVisual(EditPart childPart, int index) {
+		super.addChildVisual(childPart, getFigure().getChildren().size() - index);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Policies
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private LayoutInfo m_currentLayout;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Policies
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private LayoutInfo m_currentLayout;
 
-  @Override
-  protected void createEditPolicies() {
-    super.createEditPolicies();
-    // support for dropping LayoutInfo's
-    if (m_composite.hasLayout()) {
-      installEditPolicy(new DropLayoutEditPolicy(m_composite));
-    }
-    // support tab ordering for children
-    installEditPolicy(
-        TabOrderContainerEditPolicy.TAB_CONTAINER_ROLE,
-        new TabOrderContainerEditPolicy());
-  }
+	@Override
+	protected void createEditPolicies() {
+		super.createEditPolicies();
+		// support for dropping LayoutInfo's
+		if (m_composite.hasLayout()) {
+			installEditPolicy(new DropLayoutEditPolicy(m_composite));
+		}
+		// support tab ordering for children
+		installEditPolicy(
+				TabOrderContainerEditPolicy.TAB_CONTAINER_ROLE,
+				new TabOrderContainerEditPolicy());
+	}
 
-  @Override
-  protected void refreshEditPolicies() {
+	@Override
+	protected void refreshEditPolicies() {
 		super.refreshEditPolicies();
 		// support for dropping components
 
@@ -102,17 +102,17 @@ protected void refreshEditPolicies() {
 			LayoutInfo layout = m_composite.getLayout();
 			if (layout != m_currentLayout) {
 				try {
-				m_currentLayout = layout;
-				if (layout.getDescription().getComponentClass() != null) {
-					if (!InstanceScope.INSTANCE.getNode(
-				              IEditorPreferenceConstants.P_AVAILABLE_LAYOUTS_NODE).getBoolean(
-				                  layout.getDescription().getComponentClass().getName(),
-				                  true)) {
-						// Gets the default layout if the layout was originally set with a layout
-						// that is no longer available due to preference settings
+					m_currentLayout = layout;
+					if (layout.getDescription().getComponentClass() != null) {
+						if (!InstanceScope.INSTANCE.getNode(
+								IEditorPreferenceConstants.P_AVAILABLE_LAYOUTS_NODE).getBoolean(
+										layout.getDescription().getComponentClass().getName(),
+										true)) {
+							// Gets the default layout if the layout was originally set with a layout
+							// that is no longer available due to preference settings
 							m_currentLayout = m_composite.getDefaultCompositeInfo();
 							m_composite.setLayout(m_currentLayout);
-					}
+						}
 					}
 					LayoutEditPolicy policy = LayoutPolicyUtils.createLayoutEditPolicy(this, m_currentLayout);
 					if (policy == null) {
@@ -122,8 +122,8 @@ protected void refreshEditPolicies() {
 
 				} catch (Exception e) {
 
-          e.printStackTrace();
-        }
+					e.printStackTrace();
+				}
 
 			} else {
 				EditPolicy policy = getEditPolicy(EditPolicy.LAYOUT_ROLE);
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/part/ControlEditPart.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/part/ControlEditPart.java
index 5c0a79eb7..ef7c6260f 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/part/ControlEditPart.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/part/ControlEditPart.java
@@ -29,105 +29,105 @@
  * @coverage swt.gef.part
  */
 public class ControlEditPart extends AbstractComponentEditPart {
-  private final IControlEditPartDelegate m_delegate;
+	private final IControlEditPartDelegate m_delegate;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ControlEditPart(ControlInfo control) {
-    super(control);
-    m_delegate = createDelegate();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ControlEditPart(ControlInfo control) {
+		super(control);
+		m_delegate = createDelegate();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Edit Policies
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public EditPart getTargetEditPart(Request request) {
-    if (TabOrderContainerEditPolicy.TAB_ORDER_REQUEST == request) {
-      return this;
-    }
-    return super.getTargetEditPart(request);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Edit Policies
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public EditPart getTargetEditPart(Request request) {
+		if (TabOrderContainerEditPolicy.TAB_ORDER_REQUEST == request) {
+			return this;
+		}
+		return super.getTargetEditPart(request);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Delegating
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Figure createFigure() {
-    if (m_delegate != null) {
-      return m_delegate.createFigure();
-    } else {
-      return super.createFigure();
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Delegating
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Figure createFigure() {
+		if (m_delegate != null) {
+			return m_delegate.createFigure();
+		} else {
+			return super.createFigure();
+		}
+	}
 
-  @Override
-  protected void refreshVisuals() {
-    if (m_delegate != null) {
-      m_delegate.refreshVisuals();
-    } else {
-      super.refreshVisuals();
-    }
-  }
+	@Override
+	protected void refreshVisuals() {
+		if (m_delegate != null) {
+			m_delegate.refreshVisuals();
+		} else {
+			super.refreshVisuals();
+		}
+	}
 
-  @Override
-  public void addNotify() {
-    if (m_delegate != null) {
-      m_delegate.addNotify();
-    }
-    super.addNotify();
-  }
+	@Override
+	public void addNotify() {
+		if (m_delegate != null) {
+			m_delegate.addNotify();
+		}
+		super.addNotify();
+	}
 
-  @Override
-  public void removeNotify() {
-    if (m_delegate != null) {
-      m_delegate.removeNotify();
-    }
-    super.removeNotify();
-  }
+	@Override
+	public void removeNotify() {
+		if (m_delegate != null) {
+			m_delegate.removeNotify();
+		}
+		super.removeNotify();
+	}
 
-  @Override
-  protected void refreshEditPolicies() {
-    super.refreshEditPolicies();
-    if (m_delegate != null) {
-      m_delegate.refreshEditPolicies();
-    }
-  }
+	@Override
+	protected void refreshEditPolicies() {
+		super.refreshEditPolicies();
+		if (m_delegate != null) {
+			m_delegate.refreshEditPolicies();
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Delegate
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the array of registered {@link IControlEditPartDelegateProvider}'s.
-   */
-  private static List<IControlEditPartDelegateProvider> getDelegateProviders() {
-    return ExternalFactoriesHelper.getElementsInstances(
-        IControlEditPartDelegateProvider.class,
-        "org.eclipse.wb.swt.controlEditPartDelegateProviders",
-        "provider");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Delegate
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the array of registered {@link IControlEditPartDelegateProvider}'s.
+	 */
+	private static List<IControlEditPartDelegateProvider> getDelegateProviders() {
+		return ExternalFactoriesHelper.getElementsInstances(
+				IControlEditPartDelegateProvider.class,
+				"org.eclipse.wb.swt.controlEditPartDelegateProviders",
+				"provider");
+	}
 
-  /**
-   * @return the {@link IControlEditPartDelegate} for this {@link ControlEditPart}, may return
-   *         <code>null</code> if no delegate found.
-   */
-  private IControlEditPartDelegate createDelegate() {
-    for (IControlEditPartDelegateProvider provider : getDelegateProviders()) {
-      IControlEditPartDelegate delegate = provider.getDelegate(this);
-      if (delegate != null) {
-        return delegate;
-      }
-    }
-    // no delegate
-    return null;
-  }
+	/**
+	 * @return the {@link IControlEditPartDelegate} for this {@link ControlEditPart}, may return
+	 *         <code>null</code> if no delegate found.
+	 */
+	private IControlEditPartDelegate createDelegate() {
+		for (IControlEditPartDelegateProvider provider : getDelegateProviders()) {
+			IControlEditPartDelegate delegate = provider.getDelegate(this);
+			if (delegate != null) {
+				return delegate;
+			}
+		}
+		// no delegate
+		return null;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/part/ItemEditPart.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/part/ItemEditPart.java
index 79edcc0b4..a79dafb32 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/part/ItemEditPart.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/part/ItemEditPart.java
@@ -21,12 +21,12 @@
  * @coverage swt.gef.part
  */
 public class ItemEditPart extends AbstractComponentEditPart {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ItemEditPart(ItemInfo item) {
-    super(item);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ItemEditPart(ItemInfo item) {
+		super(item);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/part/ShellEditPart.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/part/ShellEditPart.java
index 5863427dd..a8cbfbfbd 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/part/ShellEditPart.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/part/ShellEditPart.java
@@ -21,38 +21,38 @@
  * @coverage swt.gef.part
  */
 public class ShellEditPart extends CompositeEditPart {
-  private final ShellInfo m_shell;
+	private final ShellInfo m_shell;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ShellEditPart(ShellInfo shell) {
-    super(shell);
-    m_shell = shell;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ShellEditPart(ShellInfo shell) {
+		super(shell);
+		m_shell = shell;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Policies
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createEditPolicies() {
-    super.createEditPolicies();
-    // support for dropping menu bar when this EditPart is Shell
-    if (canAcceptMenuBar()) {
-      installEditPolicy(new MenuBarDropLayoutEditPolicy(m_shell));
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Policies
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createEditPolicies() {
+		super.createEditPolicies();
+		// support for dropping menu bar when this EditPart is Shell
+		if (canAcceptMenuBar()) {
+			installEditPolicy(new MenuBarDropLayoutEditPolicy(m_shell));
+		}
+	}
 
-  private boolean canAcceptMenuBar() {
-    // sometimes Shell is exposed as part of complex object, for example ApplicationWindow
-    if (!m_shell.isRoot()) {
-      return false;
-    }
-    // OK
-    return true;
-  }
+	private boolean canAcceptMenuBar() {
+		// sometimes Shell is exposed as part of complex object, for example ApplicationWindow
+		if (!m_shell.isRoot()) {
+			return false;
+		}
+		// OK
+		return true;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/part/TreeItemEditPart.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/part/TreeItemEditPart.java
index ae5c15c7a..04ddb9080 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/part/TreeItemEditPart.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/part/TreeItemEditPart.java
@@ -22,26 +22,26 @@
  * @coverage swt.gef.part
  */
 public final class TreeItemEditPart extends ItemEditPart {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public TreeItemEditPart(TreeItemInfo item) {
-    super(item);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public TreeItemEditPart(TreeItemInfo item) {
+		super(item);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Children
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Figure getContentPane() {
-    EditPart parent = this;
-    while (parent instanceof TreeItemEditPart) {
-      parent = parent.getParent();
-    }
-    return ((GraphicalEditPart) parent).getContentPane();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Children
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Figure getContentPane() {
+		EditPart parent = this;
+		while (parent instanceof TreeItemEditPart) {
+			parent = parent.getParent();
+		}
+		return ((GraphicalEditPart) parent).getContentPane();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/part/delegate/IControlEditPartDelegate.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/part/delegate/IControlEditPartDelegate.java
index dfc312faf..308fbb415 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/part/delegate/IControlEditPartDelegate.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/part/delegate/IControlEditPartDelegate.java
@@ -23,13 +23,13 @@
  * @coverage swt.gef.part
  */
 public interface IControlEditPartDelegate {
-  Figure createFigure();
+	Figure createFigure();
 
-  void refreshVisuals();
+	void refreshVisuals();
 
-  void addNotify();
+	void addNotify();
 
-  void removeNotify();
+	void removeNotify();
 
-  void refreshEditPolicies();
+	void refreshEditPolicies();
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/part/delegate/IControlEditPartDelegateProvider.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/part/delegate/IControlEditPartDelegateProvider.java
index bc4012b33..a1abede7e 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/part/delegate/IControlEditPartDelegateProvider.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/part/delegate/IControlEditPartDelegateProvider.java
@@ -19,13 +19,13 @@
  * @coverage swt.gef.part
  */
 public interface IControlEditPartDelegateProvider {
-  /**
-   * Returns the {@link IControlEditPartDelegate} for given {@link ControlEditPart}. eRCP and RCP
-   * provide different implementations of {@link IControlEditPartDelegate}.
-   *
-   * @param editPart
-   *          the {@link ControlEditPart} to get provider for.
-   * @return the {@link IControlEditPartDelegate} for given {@link ControlEditPart}.
-   */
-  IControlEditPartDelegate getDelegate(ControlEditPart editPart);
+	/**
+	 * Returns the {@link IControlEditPartDelegate} for given {@link ControlEditPart}. eRCP and RCP
+	 * provide different implementations of {@link IControlEditPartDelegate}.
+	 *
+	 * @param editPart
+	 *          the {@link ControlEditPart} to get provider for.
+	 * @return the {@link IControlEditPartDelegate} for given {@link ControlEditPart}.
+	 */
+	IControlEditPartDelegate getDelegate(ControlEditPart editPart);
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/TableTableColumnSelectionEditPolicy.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/TableTableColumnSelectionEditPolicy.java
index 0f4becf25..bb29181b0 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/TableTableColumnSelectionEditPolicy.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/TableTableColumnSelectionEditPolicy.java
@@ -42,128 +42,128 @@
  * @coverage swt.gef.policy
  */
 public final class TableTableColumnSelectionEditPolicy extends SelectionEditPolicy {
-  private static final String REQ_RESIZE = "resize";
-  private final ITableColumnInfo m_column;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public TableTableColumnSelectionEditPolicy(ITableColumnInfo column) {
-    m_column = column;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Handles
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected List<Handle> createSelectionHandles() {
-    List<Handle> handles = Lists.newArrayList();
-    // create move column handle
-    MoveHandle moveHandle = new MoveHandle(getHost());
-    moveHandle.setForeground(IColorConstants.red);
-    handles.add(moveHandle);
-    //
-    return handles;
-  }
-
-  @Override
-  protected List<Handle> createStaticHandles() {
-    List<Handle> handles = Lists.newArrayList();
-    // create resize column handle
-    SideResizeHandle resizeHandle =
-        new SideResizeHandle(getHost(), IPositionConstants.RIGHT, 10, true);
-    resizeHandle.setDragTrackerTool(new ResizeTracker(getHost(),
-        IPositionConstants.EAST,
-        REQ_RESIZE));
-    handles.add(resizeHandle);
-    //
-    return handles;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Routing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean understandsRequest(Request request) {
-    return super.understandsRequest(request) || request.getType() == REQ_RESIZE;
-  }
-
-  @Override
-  //@edu.umd.cs.findbugs.annotations.SuppressWarnings(value = "BC_UNCONFIRMED_CAST")
-  public Command getCommand(Request request) {
-    return getResizeCommand((ChangeBoundsRequest) request);
-  }
-
-  @Override
-  //@edu.umd.cs.findbugs.annotations.SuppressWarnings(value = "BC_UNCONFIRMED_CAST")
-  public void showSourceFeedback(Request request) {
-    showResizeFeedback((ChangeBoundsRequest) request);
-  }
-
-  @Override
-  //@edu.umd.cs.findbugs.annotations.SuppressWarnings(value = "BC_UNCONFIRMED_CAST")
-  public void eraseSourceFeedback(Request request) {
-    eraseResizeFeedback((ChangeBoundsRequest) request);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Resize
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Figure m_resizeFeedback;
-  private TextFeedback m_textFeedback;
-
-  private Command getResizeCommand(ChangeBoundsRequest request) {
-    final Rectangle newBounds = request.getTransformedRectangle(getHostFigure().getBounds());
-    return new EditCommand(m_column) {
-      @Override
-      protected void executeEdit() throws Exception {
-        m_column.setWidth(newBounds.width);
-      }
-    };
-  }
-
-  private void showResizeFeedback(ChangeBoundsRequest request) {
-    if (m_resizeFeedback == null) {
-      // create selection feedback
-      {
-        m_resizeFeedback = new RectangleFigure();
-        m_resizeFeedback.setForeground(IColorConstants.red);
-        addFeedback(m_resizeFeedback);
-      }
-      // create text feedback
-      {
-        m_textFeedback = new TextFeedback(getFeedbackLayer());
-        m_textFeedback.add();
-      }
-    }
-    // prepare bounds
-    Rectangle bounds;
-    {
-      Figure hostFigure = getHostFigure();
-      bounds = request.getTransformedRectangle(hostFigure.getBounds());
-      FigureUtils.translateFigureToAbsolute(hostFigure, bounds.shrink(-1, -1));
-    }
-    // update selection feedback
-    m_resizeFeedback.setBounds(bounds);
-    // update text feedback
-    m_textFeedback.setText(Integer.toString(bounds.width - 2));
-    m_textFeedback.setLocation(request.getLocation().getTranslated(10, 10));
-  }
-
-  private void eraseResizeFeedback(ChangeBoundsRequest request) {
-    // erase selection feedback
-    removeFeedback(m_resizeFeedback);
-    m_resizeFeedback = null;
-    // erase text feedback
-    m_textFeedback.remove();
-    m_textFeedback = null;
-  }
+	private static final String REQ_RESIZE = "resize";
+	private final ITableColumnInfo m_column;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public TableTableColumnSelectionEditPolicy(ITableColumnInfo column) {
+		m_column = column;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Handles
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected List<Handle> createSelectionHandles() {
+		List<Handle> handles = Lists.newArrayList();
+		// create move column handle
+		MoveHandle moveHandle = new MoveHandle(getHost());
+		moveHandle.setForeground(IColorConstants.red);
+		handles.add(moveHandle);
+		//
+		return handles;
+	}
+
+	@Override
+	protected List<Handle> createStaticHandles() {
+		List<Handle> handles = Lists.newArrayList();
+		// create resize column handle
+		SideResizeHandle resizeHandle =
+				new SideResizeHandle(getHost(), IPositionConstants.RIGHT, 10, true);
+		resizeHandle.setDragTrackerTool(new ResizeTracker(getHost(),
+				IPositionConstants.EAST,
+				REQ_RESIZE));
+		handles.add(resizeHandle);
+		//
+		return handles;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Routing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean understandsRequest(Request request) {
+		return super.understandsRequest(request) || request.getType() == REQ_RESIZE;
+	}
+
+	@Override
+	//@edu.umd.cs.findbugs.annotations.SuppressWarnings(value = "BC_UNCONFIRMED_CAST")
+	public Command getCommand(Request request) {
+		return getResizeCommand((ChangeBoundsRequest) request);
+	}
+
+	@Override
+	//@edu.umd.cs.findbugs.annotations.SuppressWarnings(value = "BC_UNCONFIRMED_CAST")
+	public void showSourceFeedback(Request request) {
+		showResizeFeedback((ChangeBoundsRequest) request);
+	}
+
+	@Override
+	//@edu.umd.cs.findbugs.annotations.SuppressWarnings(value = "BC_UNCONFIRMED_CAST")
+	public void eraseSourceFeedback(Request request) {
+		eraseResizeFeedback((ChangeBoundsRequest) request);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Resize
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Figure m_resizeFeedback;
+	private TextFeedback m_textFeedback;
+
+	private Command getResizeCommand(ChangeBoundsRequest request) {
+		final Rectangle newBounds = request.getTransformedRectangle(getHostFigure().getBounds());
+		return new EditCommand(m_column) {
+			@Override
+			protected void executeEdit() throws Exception {
+				m_column.setWidth(newBounds.width);
+			}
+		};
+	}
+
+	private void showResizeFeedback(ChangeBoundsRequest request) {
+		if (m_resizeFeedback == null) {
+			// create selection feedback
+			{
+				m_resizeFeedback = new RectangleFigure();
+				m_resizeFeedback.setForeground(IColorConstants.red);
+				addFeedback(m_resizeFeedback);
+			}
+			// create text feedback
+			{
+				m_textFeedback = new TextFeedback(getFeedbackLayer());
+				m_textFeedback.add();
+			}
+		}
+		// prepare bounds
+		Rectangle bounds;
+		{
+			Figure hostFigure = getHostFigure();
+			bounds = request.getTransformedRectangle(hostFigure.getBounds());
+			FigureUtils.translateFigureToAbsolute(hostFigure, bounds.shrink(-1, -1));
+		}
+		// update selection feedback
+		m_resizeFeedback.setBounds(bounds);
+		// update text feedback
+		m_textFeedback.setText(Integer.toString(bounds.width - 2));
+		m_textFeedback.setLocation(request.getLocation().getTranslated(10, 10));
+	}
+
+	private void eraseResizeFeedback(ChangeBoundsRequest request) {
+		// erase selection feedback
+		removeFeedback(m_resizeFeedback);
+		m_resizeFeedback = null;
+		// erase text feedback
+		m_textFeedback.remove();
+		m_textFeedback = null;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/AbsoluteBasedLayoutEditPolicySWT.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/AbsoluteBasedLayoutEditPolicySWT.java
index b9d5d3ef2..a55854c34 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/AbsoluteBasedLayoutEditPolicySWT.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/AbsoluteBasedLayoutEditPolicySWT.java
@@ -34,59 +34,59 @@
  * @coverage swt.gef.policy
  */
 public abstract class AbsoluteBasedLayoutEditPolicySWT<C extends IControlInfo>
-    extends
-      AbsoluteBasedLayoutEditPolicy<C> {
-  private final ILayoutInfo<C> m_layout;
+extends
+AbsoluteBasedLayoutEditPolicy<C> {
+	private final ILayoutInfo<C> m_layout;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbsoluteBasedLayoutEditPolicySWT(ILayoutInfo<C> layout) {
-    super(layout.getUnderlyingModel());
-    m_layout = layout;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbsoluteBasedLayoutEditPolicySWT(ILayoutInfo<C> layout) {
+		super(layout.getUnderlyingModel());
+		m_layout = layout;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Requests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected ILayoutRequestValidator getRequestValidator() {
-    return ControlsLayoutRequestValidator.INSTANCE;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Requests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected ILayoutRequestValidator getRequestValidator() {
+		return ControlsLayoutRequestValidator.INSTANCE;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IVisualDataProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public List<C> getAllComponents() {
-    List<C> components = Lists.newArrayList();
-    components.addAll(m_layout.getControls());
-    return components;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IVisualDataProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public List<C> getAllComponents() {
+		List<C> components = Lists.newArrayList();
+		components.addAll(m_layout.getControls());
+		return components;
+	}
 
-  @Override
-  public int getBaseline(IAbstractComponentInfo component) {
-    return BaselineSupportHelper.getBaseline(component.getObject());
-  }
+	@Override
+	public int getBaseline(IAbstractComponentInfo component) {
+		return BaselineSupportHelper.getBaseline(component.getObject());
+	}
 
-  @Override
-  public Dimension getComponentPreferredSize(IAbstractComponentInfo component) {
-    @SuppressWarnings("unchecked")
-    C componentInfo = (C) component;
-    return componentInfo.getPreferredSize();
-  }
+	@Override
+	public Dimension getComponentPreferredSize(IAbstractComponentInfo component) {
+		@SuppressWarnings("unchecked")
+		C componentInfo = (C) component;
+		return componentInfo.getPreferredSize();
+	}
 
-  @Override
-  public Dimension getContainerSize() {
-    IAbstractComponentInfo composite = m_layout.getComposite();
-    Rectangle compositeBounds = composite.getModelBounds().getCopy();
-    Insets clientAreaInsets = composite.getClientAreaInsets();
-    return compositeBounds.crop(clientAreaInsets).getSize();
-  }
+	@Override
+	public Dimension getContainerSize() {
+		IAbstractComponentInfo composite = m_layout.getComposite();
+		Rectangle compositeBounds = composite.getModelBounds().getCopy();
+		Insets clientAreaInsets = composite.getClientAreaInsets();
+		return compositeBounds.crop(clientAreaInsets).getSize();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/AbsoluteLayoutEditPolicy.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/AbsoluteLayoutEditPolicy.java
index 2fecfe3b8..75d786c89 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/AbsoluteLayoutEditPolicy.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/AbsoluteLayoutEditPolicy.java
@@ -41,145 +41,145 @@
  * @coverage swt.gef.policy
  */
 public final class AbsoluteLayoutEditPolicy<C extends IControlInfo>
-    extends
-      AbsoluteBasedLayoutEditPolicySWT<C> {
-  private final IAbsoluteLayoutInfo<C> m_layout;
+extends
+AbsoluteBasedLayoutEditPolicySWT<C> {
+	private final IAbsoluteLayoutInfo<C> m_layout;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbsoluteLayoutEditPolicy(IAbsoluteLayoutInfo<C> layout) {
-    super(layout);
-    m_layout = layout;
-    createPlacementsSupport(IAbsoluteLayoutCommands.EMPTY);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbsoluteLayoutEditPolicy(IAbsoluteLayoutInfo<C> layout) {
+		super(layout);
+		m_layout = layout;
+		createPlacementsSupport(IAbsoluteLayoutCommands.EMPTY);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Command getMoveCommand(ChangeBoundsRequest request) {
-    final List<EditPart> editParts = request.getEditParts();
-    return new EditCommand(m_layout) {
-      @SuppressWarnings("unchecked")
-      @Override
-      protected void executeEdit() throws Exception {
-        List<C> models = Lists.newArrayList();
-        for (EditPart editPart : editParts) {
-          models.add((C) editPart.getModel());
-        }
-        placementsSupport.commit();
-        for (C widget : models) {
-          Rectangle bounds = widget.getModelBounds();
-          m_layout.commandChangeBounds(widget, bounds.getLocation(), null);
-        }
-      }
-    };
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Command getMoveCommand(ChangeBoundsRequest request) {
+		final List<EditPart> editParts = request.getEditParts();
+		return new EditCommand(m_layout) {
+			@SuppressWarnings("unchecked")
+			@Override
+			protected void executeEdit() throws Exception {
+				List<C> models = Lists.newArrayList();
+				for (EditPart editPart : editParts) {
+					models.add((C) editPart.getModel());
+				}
+				placementsSupport.commit();
+				for (C widget : models) {
+					Rectangle bounds = widget.getModelBounds();
+					m_layout.commandChangeBounds(widget, bounds.getLocation(), null);
+				}
+			}
+		};
+	}
 
-  @Override
-  protected Command getAddCommand(ChangeBoundsRequest request) {
-    final List<EditPart> editParts = request.getEditParts();
-    //
-    return new EditCommand(m_layout) {
-      @SuppressWarnings("unchecked")
-      @Override
-      protected void executeEdit() throws Exception {
-        List<C> models = Lists.newArrayList();
-        for (EditPart editPart : editParts) {
-          models.add((C) editPart.getModel());
-        }
-        placementsSupport.commitAdd();
-        for (C widget : models) {
-          Rectangle bounds = widget.getModelBounds();
-          m_layout.commandMove(widget, null);
-          m_layout.commandChangeBounds(
-              widget,
-              bounds.getLocation(),
-              widget.getModelBounds().getSize());
-        }
-      }
-    };
-  }
+	@Override
+	protected Command getAddCommand(ChangeBoundsRequest request) {
+		final List<EditPart> editParts = request.getEditParts();
+		//
+		return new EditCommand(m_layout) {
+			@SuppressWarnings("unchecked")
+			@Override
+			protected void executeEdit() throws Exception {
+				List<C> models = Lists.newArrayList();
+				for (EditPart editPart : editParts) {
+					models.add((C) editPart.getModel());
+				}
+				placementsSupport.commitAdd();
+				for (C widget : models) {
+					Rectangle bounds = widget.getModelBounds();
+					m_layout.commandMove(widget, null);
+					m_layout.commandChangeBounds(
+							widget,
+							bounds.getLocation(),
+							widget.getModelBounds().getSize());
+				}
+			}
+		};
+	}
 
-  @SuppressWarnings("unchecked")
-  @Override
-  protected Command getCreateCommand(CreateRequest request) {
-    final C control = (C) request.getNewObject();
-    return new EditCommand(m_layout) {
-      @Override
-      protected void executeEdit() throws Exception {
-        placementsSupport.commitAdd();
-        Rectangle bounds = control.getModelBounds();
-        m_layout.commandCreate(control, null);
-        m_layout.commandChangeBounds(control, bounds.getLocation(), bounds.getSize());
-      }
-    };
-  }
+	@SuppressWarnings("unchecked")
+	@Override
+	protected Command getCreateCommand(CreateRequest request) {
+		final C control = (C) request.getNewObject();
+		return new EditCommand(m_layout) {
+			@Override
+			protected void executeEdit() throws Exception {
+				placementsSupport.commitAdd();
+				Rectangle bounds = control.getModelBounds();
+				m_layout.commandCreate(control, null);
+				m_layout.commandChangeBounds(control, bounds.getLocation(), bounds.getSize());
+			}
+		};
+	}
 
-  @SuppressWarnings("unchecked")
-  @Override
-  protected void doPasteComponent(Point pasteLocation, PastedComponentInfo pastedWidget)
-      throws Exception {
-    C control = (C) pastedWidget.getComponent();
-    // create
-    m_layout.commandCreate(control, null);
-    // set bounds
-    Point relativeLocation = pastedWidget.getBounds().getLocation();
-    m_layout.commandChangeBounds(
-        control,
-        pasteLocation.getTranslated(relativeLocation),
-        pastedWidget.getBounds().getSize());
-  }
+	@SuppressWarnings("unchecked")
+	@Override
+	protected void doPasteComponent(Point pasteLocation, PastedComponentInfo pastedWidget)
+			throws Exception {
+		C control = (C) pastedWidget.getComponent();
+		// create
+		m_layout.commandCreate(control, null);
+		// set bounds
+		Point relativeLocation = pastedWidget.getBounds().getLocation();
+		m_layout.commandChangeBounds(
+				control,
+				pasteLocation.getTranslated(relativeLocation),
+				pastedWidget.getBounds().getSize());
+	}
 
-  @Override
-  protected Command getResizeCommand(final ChangeBoundsRequest request) {
-    return new EditCommand(m_layout) {
-      @SuppressWarnings("unchecked")
-      @Override
-      protected void executeEdit() throws Exception {
-        for (EditPart editPart : request.getEditParts()) {
-          C widget = (C) editPart.getModel();
-          Rectangle bounds = widget.getModelBounds();
-          m_layout.commandChangeBounds(widget, bounds.getLocation(), bounds.getSize());
-        }
-      }
-    };
-  }
+	@Override
+	protected Command getResizeCommand(final ChangeBoundsRequest request) {
+		return new EditCommand(m_layout) {
+			@SuppressWarnings("unchecked")
+			@Override
+			protected void executeEdit() throws Exception {
+				for (EditPart editPart : request.getEditParts()) {
+					C widget = (C) editPart.getModel();
+					Rectangle bounds = widget.getModelBounds();
+					m_layout.commandChangeBounds(widget, bounds.getLocation(), bounds.getSize());
+				}
+			}
+		};
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Decorate Child
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void decorateChild(EditPart child) {
-    if (m_layout.getControls().contains(child.getModel())) {
-      child.installEditPolicy(EditPolicy.SELECTION_ROLE, new AbsoluteLayoutSelectionEditPolicy());
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Decorate Child
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void decorateChild(EditPart child) {
+		if (m_layout.getControls().contains(child.getModel())) {
+			child.installEditPolicy(EditPolicy.SELECTION_ROLE, new AbsoluteLayoutSelectionEditPolicy());
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Selection actions
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected AbstractAlignmentActionsSupport<C> getAlignmentActionsSupport() {
-    return new SelectionActionsSupport<C>(m_layout);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Selection actions
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected AbstractAlignmentActionsSupport<C> getAlignmentActionsSupport() {
+		return new SelectionActionsSupport<C>(m_layout);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Misc
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected ToolkitDescription getToolkit() {
-    return GlobalState.getToolkit();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Misc
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected ToolkitDescription getToolkit() {
+		return GlobalState.getToolkit();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/DefaultLayoutEditPolicy.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/DefaultLayoutEditPolicy.java
index 4b814d9a2..383b00001 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/DefaultLayoutEditPolicy.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/DefaultLayoutEditPolicy.java
@@ -25,15 +25,15 @@
  * @coverage swt.gef.policy
  */
 public final class DefaultLayoutEditPolicy extends LayoutEditPolicy {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Decoration
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void decorateChild(EditPart child) {
-    if (child.getModel() instanceof ControlInfo) {
-      child.installEditPolicy(EditPolicy.SELECTION_ROLE, new NonResizableSelectionEditPolicy());
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Decoration
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void decorateChild(EditPart child) {
+		if (child.getModel() instanceof ControlInfo) {
+			child.installEditPolicy(EditPolicy.SELECTION_ROLE, new NonResizableSelectionEditPolicy());
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/DropLayoutEditPolicy.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/DropLayoutEditPolicy.java
index 900de6d89..c89e99a71 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/DropLayoutEditPolicy.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/DropLayoutEditPolicy.java
@@ -29,57 +29,57 @@
  * @coverage swt.gef.policy
  */
 public final class DropLayoutEditPolicy extends LayoutEditPolicy {
-  private static final ILayoutRequestValidator VALIDATOR =
-      LayoutRequestValidators.modelType(LayoutInfo.class);
-  private final CompositeInfo m_composite;
+	private static final ILayoutRequestValidator VALIDATOR =
+			LayoutRequestValidators.modelType(LayoutInfo.class);
+	private final CompositeInfo m_composite;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DropLayoutEditPolicy(CompositeInfo composite) {
-    m_composite = composite;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DropLayoutEditPolicy(CompositeInfo composite) {
+		m_composite = composite;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Requests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected ILayoutRequestValidator getRequestValidator() {
-    return VALIDATOR;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Requests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected ILayoutRequestValidator getRequestValidator() {
+		return VALIDATOR;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Feedback
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void showLayoutTargetFeedback(Request request) {
-    PolicyUtils.showBorderTargetFeedback(this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Feedback
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void showLayoutTargetFeedback(Request request) {
+		PolicyUtils.showBorderTargetFeedback(this);
+	}
 
-  @Override
-  protected void eraseLayoutTargetFeedback(Request request) {
-    PolicyUtils.eraseBorderTargetFeedback(this);
-  }
+	@Override
+	protected void eraseLayoutTargetFeedback(Request request) {
+		PolicyUtils.eraseBorderTargetFeedback(this);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Command
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Command getCreateCommand(CreateRequest request) {
-    final LayoutInfo newLayout = (LayoutInfo) request.getNewObject();
-    return new EditCommand(m_composite) {
-      @Override
-      protected void executeEdit() throws Exception {
-        m_composite.setLayout(newLayout);
-      }
-    };
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Command
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Command getCreateCommand(CreateRequest request) {
+		final LayoutInfo newLayout = (LayoutInfo) request.getNewObject();
+		return new EditCommand(m_composite) {
+			@Override
+			protected void executeEdit() throws Exception {
+				m_composite.setLayout(newLayout);
+			}
+		};
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/RowLayoutSelectionEditPolicy.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/RowLayoutSelectionEditPolicy.java
index eb69ba1a1..19372476d 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/RowLayoutSelectionEditPolicy.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/RowLayoutSelectionEditPolicy.java
@@ -44,135 +44,135 @@
  * @coverage swt.gef.policy
  */
 public final class RowLayoutSelectionEditPolicy<C extends IControlInfo> extends SelectionEditPolicy {
-  private static final String REQ_RESIZE = "resize";
-  private final IRowLayoutInfo<C> m_layout;
-  private final C m_control;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public RowLayoutSelectionEditPolicy(IRowLayoutInfo<C> layout, C control) {
-    m_layout = layout;
-    m_control = control;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Handles
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected List<Handle> createSelectionHandles() {
-    List<Handle> handles = Lists.newArrayList();
-    handles.add(new MoveHandle(getHost()));
-    handles.add(createHandle(IPositionConstants.EAST));
-    handles.add(createHandle(IPositionConstants.SOUTH));
-    handles.add(createHandle(IPositionConstants.SOUTH_EAST));
-    return handles;
-  }
-
-  /**
-   * @return the {@link ResizeHandle} for given direction.
-   */
-  private Handle createHandle(int direction) {
-    ResizeHandle handle = new ResizeHandle(getHost(), direction);
-    handle.setDragTrackerTool(new ResizeTracker(direction, REQ_RESIZE));
-    return handle;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Routing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean understandsRequest(Request request) {
-    return super.understandsRequest(request) || request.getType() == REQ_RESIZE;
-  }
-
-  @Override
-  public Command getCommand(Request request) {
-    if (request instanceof ChangeBoundsRequest) {
-      return getResizeCommand((ChangeBoundsRequest) request);
-    }
-    return null;
-  }
-
-  @Override
-  public void showSourceFeedback(Request request) {
-    if (request instanceof ChangeBoundsRequest) {
-      showResizeFeedback((ChangeBoundsRequest) request);
-    }
-  }
-
-  @Override
-  public void eraseSourceFeedback(Request request) {
-    if (request instanceof ChangeBoundsRequest) {
-      eraseResizeFeedback((ChangeBoundsRequest) request);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Resize
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Figure m_resizeFeedback;
-  private TextFeedback m_textFeedback;
-
-  private Command getResizeCommand(ChangeBoundsRequest request) {
-    final int resizeDirection = request.getResizeDirection();
-    final Rectangle newBounds = request.getTransformedRectangle(getHost().getFigure().getBounds());
-    return new EditCommand(m_control) {
-      @Override
-      protected void executeEdit() throws Exception {
-        IRowDataInfo rowData = m_layout.getRowData2(m_control);
-        if (PolicyUtils.hasDirection(resizeDirection, IPositionConstants.EAST)) {
-          rowData.setWidth(newBounds.width);
-        }
-        if (PolicyUtils.hasDirection(resizeDirection, IPositionConstants.SOUTH)) {
-          rowData.setHeight(newBounds.height);
-        }
-      }
-    };
-  }
-
-  private void showResizeFeedback(ChangeBoundsRequest request) {
-    if (m_resizeFeedback == null) {
-      // create selection feedback
-      {
-        m_resizeFeedback = new RectangleFigure();
-        m_resizeFeedback.setForeground(IColorConstants.red);
-        addFeedback(m_resizeFeedback);
-      }
-      // create text feedback
-      {
-        m_textFeedback = new TextFeedback(getFeedbackLayer());
-        m_textFeedback.add();
-      }
-    }
-    // prepare bounds
-    Rectangle bounds;
-    {
-      Figure hostFigure = getHostFigure();
-      bounds = request.getTransformedRectangle(hostFigure.getBounds());
-      FigureUtils.translateFigureToAbsolute(hostFigure, bounds);
-    }
-    // update selection feedback
-    m_resizeFeedback.setBounds(bounds);
-    // update text feedback
-    m_textFeedback.setText(bounds.width + " x " + bounds.height);
-    m_textFeedback.setLocation(request.getLocation().getTranslated(10, 10));
-  }
-
-  private void eraseResizeFeedback(ChangeBoundsRequest request) {
-    // erase selection feedback
-    removeFeedback(m_resizeFeedback);
-    m_resizeFeedback = null;
-    // erase text feedback
-    m_textFeedback.remove();
-    m_textFeedback = null;
-  }
+	private static final String REQ_RESIZE = "resize";
+	private final IRowLayoutInfo<C> m_layout;
+	private final C m_control;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public RowLayoutSelectionEditPolicy(IRowLayoutInfo<C> layout, C control) {
+		m_layout = layout;
+		m_control = control;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Handles
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected List<Handle> createSelectionHandles() {
+		List<Handle> handles = Lists.newArrayList();
+		handles.add(new MoveHandle(getHost()));
+		handles.add(createHandle(IPositionConstants.EAST));
+		handles.add(createHandle(IPositionConstants.SOUTH));
+		handles.add(createHandle(IPositionConstants.SOUTH_EAST));
+		return handles;
+	}
+
+	/**
+	 * @return the {@link ResizeHandle} for given direction.
+	 */
+	private Handle createHandle(int direction) {
+		ResizeHandle handle = new ResizeHandle(getHost(), direction);
+		handle.setDragTrackerTool(new ResizeTracker(direction, REQ_RESIZE));
+		return handle;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Routing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean understandsRequest(Request request) {
+		return super.understandsRequest(request) || request.getType() == REQ_RESIZE;
+	}
+
+	@Override
+	public Command getCommand(Request request) {
+		if (request instanceof ChangeBoundsRequest) {
+			return getResizeCommand((ChangeBoundsRequest) request);
+		}
+		return null;
+	}
+
+	@Override
+	public void showSourceFeedback(Request request) {
+		if (request instanceof ChangeBoundsRequest) {
+			showResizeFeedback((ChangeBoundsRequest) request);
+		}
+	}
+
+	@Override
+	public void eraseSourceFeedback(Request request) {
+		if (request instanceof ChangeBoundsRequest) {
+			eraseResizeFeedback((ChangeBoundsRequest) request);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Resize
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Figure m_resizeFeedback;
+	private TextFeedback m_textFeedback;
+
+	private Command getResizeCommand(ChangeBoundsRequest request) {
+		final int resizeDirection = request.getResizeDirection();
+		final Rectangle newBounds = request.getTransformedRectangle(getHost().getFigure().getBounds());
+		return new EditCommand(m_control) {
+			@Override
+			protected void executeEdit() throws Exception {
+				IRowDataInfo rowData = m_layout.getRowData2(m_control);
+				if (PolicyUtils.hasDirection(resizeDirection, IPositionConstants.EAST)) {
+					rowData.setWidth(newBounds.width);
+				}
+				if (PolicyUtils.hasDirection(resizeDirection, IPositionConstants.SOUTH)) {
+					rowData.setHeight(newBounds.height);
+				}
+			}
+		};
+	}
+
+	private void showResizeFeedback(ChangeBoundsRequest request) {
+		if (m_resizeFeedback == null) {
+			// create selection feedback
+			{
+				m_resizeFeedback = new RectangleFigure();
+				m_resizeFeedback.setForeground(IColorConstants.red);
+				addFeedback(m_resizeFeedback);
+			}
+			// create text feedback
+			{
+				m_textFeedback = new TextFeedback(getFeedbackLayer());
+				m_textFeedback.add();
+			}
+		}
+		// prepare bounds
+		Rectangle bounds;
+		{
+			Figure hostFigure = getHostFigure();
+			bounds = request.getTransformedRectangle(hostFigure.getBounds());
+			FigureUtils.translateFigureToAbsolute(hostFigure, bounds);
+		}
+		// update selection feedback
+		m_resizeFeedback.setBounds(bounds);
+		// update text feedback
+		m_textFeedback.setText(bounds.width + " x " + bounds.height);
+		m_textFeedback.setLocation(request.getLocation().getTranslated(10, 10));
+	}
+
+	private void eraseResizeFeedback(ChangeBoundsRequest request) {
+		// erase selection feedback
+		removeFeedback(m_resizeFeedback);
+		m_resizeFeedback = null;
+		// erase text feedback
+		m_textFeedback.remove();
+		m_textFeedback = null;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/form/AnchorFiguresClassic.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/form/AnchorFiguresClassic.java
index 6db298f90..d0ff57a70 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/form/AnchorFiguresClassic.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/form/AnchorFiguresClassic.java
@@ -41,213 +41,213 @@
  * @author mitin_aa
  */
 public final class AnchorFiguresClassic<C extends IControlInfo> {
-  // fields
-  private List<Figure> m_alignmentFigures;
-  private final SelectionEditPolicy m_policy;
-  private final FormLayoutInfoImplClassic<C> m_layoutImpl;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AnchorFiguresClassic(SelectionEditPolicy policy, FormLayoutInfoImplClassic<C> impl) {
-    m_policy = policy;
-    m_layoutImpl = impl;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Shows alignment figures for host {@link EditPart} and its siblings.
-   */
-  public final void show() {
-    if (m_alignmentFigures == null) {
-      m_alignmentFigures = Lists.newArrayList();
-      // show alignment figures for all of the children of the host's parent
-      {
-        Collection<EditPart> editParts = m_policy.getHost().getParent().getChildren();
-        for (EditPart editPart : editParts) {
-          showAlignmentFigures(editPart);
-        }
-      }
-    }
-  }
-
-  /**
-   * Hides alignment figures for this host and its siblings.
-   */
-  public final void hide() {
-    if (m_alignmentFigures != null) {
-      for (Figure figure : m_alignmentFigures) {
-        figure.getParent().remove(figure);
-      }
-      m_alignmentFigures = null;
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Figures
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the alignment figure for given component and axis.
-   */
-  private Figure createAlignmentFigure(C widget, int side) {
-    IEditPartViewer viewer = m_policy.getHost().getViewer();
-    return PlacementUtils.isHorizontalSide(side)
-        ? new HorizontalPopupFigure(viewer, widget, side)
-        : new VerticalPopupFigure(viewer, widget, side);
-  }
-
-  /**
-   * Shows all possible alignment figures for given edit part.
-   */
-  @SuppressWarnings("unchecked")
-  private void showAlignmentFigures(EditPart editPart) {
-    // check model
-    C widget;
-    {
-      Object model = editPart.getModel();
-      if (!(model instanceof IControlInfo)) {
-        return;
-      }
-      widget = (C) model;
-    }
-    // check if we can show alignment figures for this control
-    {
-      String showFiguresString = null;
-      if (!LayoutPolicyUtils.shouldShowSideFigures(showFiguresString, editPart)) {
-        return;
-      }
-    }
-    // show alignment figures
-    {
-      {
-        Figure figure = createAlignmentFigure(widget, IPositionConstants.LEFT);
-        if (figure != null) {
-          addAlignmentFigure(widget, figure, true, true);
-        }
-      }
-      {
-        Figure figure = createAlignmentFigure(widget, IPositionConstants.RIGHT);
-        if (figure != null) {
-          addAlignmentFigure(widget, figure, false, true);
-        }
-      }
-      {
-        Figure figure = createAlignmentFigure(widget, IPositionConstants.TOP);
-        if (figure != null) {
-          addAlignmentFigure(widget, figure, true, false);
-        }
-      }
-      {
-        Figure figure = createAlignmentFigure(widget, IPositionConstants.BOTTOM);
-        if (figure != null) {
-          addAlignmentFigure(widget, figure, false, false);
-        }
-      }
-    }
-  }
-
-  /**
-   * Adds alignment figure at given offset from right side of component's cells.
-   */
-  private void addAlignmentFigure(C component,
-      Figure figure,
-      boolean isLeading,
-      boolean isHorisontal) {
-    Figure layer = m_policy.getHost().getViewer().getLayer(IEditPartViewer.CLICKABLE_LAYER);
-    // prepare rectangle for cells used by component (in layer coordinates)
-    Rectangle widgetRect;
-    {
-      widgetRect = component.getModelBounds().getCopy();
-      PolicyUtils.translateModelToFeedback(m_policy, widgetRect);
-    }
-    // prepare location and size
-    Point figureLocation;
-    {
-      Dimension figureSize = figure.getSize();
-      figureLocation = new Point();
-      if (isHorisontal) {
-        if (isLeading) {
-          figureLocation.x = widgetRect.x - figureSize.width - 3;
-          figureLocation.y = widgetRect.y + widgetRect.height / 2 - figureSize.height / 2;
-        } else {
-          figureLocation.x = widgetRect.right() + 3;
-          figureLocation.y = widgetRect.y + widgetRect.height / 2 - figureSize.height / 2;
-        }
-      } else {
-        if (isLeading) {
-          figureLocation.x = widgetRect.x + widgetRect.width / 2 - figureSize.width / 2;
-          figureLocation.y = widgetRect.y - figureSize.height - 3;
-        } else {
-          figureLocation.x = widgetRect.x + widgetRect.width / 2 - figureSize.width / 2;
-          figureLocation.y = widgetRect.bottom() + 3;
-        }
-      }
-      // don't draw if the widget is too small
-      if (widgetRect.width < figureSize.width + 6 || widgetRect.height < figureSize.height + 4) {
-        return;
-      }
-    }
-    // add alignment figure
-    layer.add(figure);
-    figure.setLocation(figureLocation);
-    m_alignmentFigures.add(figure);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Inner classes
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final class HorizontalPopupFigure extends AbstractPopupFigure {
-    private final C m_widget;
-    private final int m_side;
-
-    protected HorizontalPopupFigure(IEditPartViewer viewer, C widget, int side) {
-      super(viewer, 9, 5);
-      m_widget = widget;
-      m_side = side;
-    }
-
-    @Override
-    protected Image getImage() {
-      return m_layoutImpl.getAnchorActions().getImageHorizontal(m_widget, m_side);
-    }
-
-    @Override
-    protected void fillMenu(IMenuManager manager) {
-      m_layoutImpl.getAnchorActions().fillMenuHorizontal(m_widget, m_side, manager);
-    }
-  }
-  private final class VerticalPopupFigure extends AbstractPopupFigure {
-    private final C m_widget;
-    private final int m_side;
-
-    protected VerticalPopupFigure(IEditPartViewer viewer, C widget, int side) {
-      super(viewer, 5, 9);
-      m_widget = widget;
-      m_side = side;
-    }
-
-    @Override
-    protected Image getImage() {
-      try {
-        return m_layoutImpl.getAnchorActions().getImageVertical(m_widget, m_side);
-      } catch (Throwable e) {
-        throw new NestableError(e);
-      }
-    }
-
-    @Override
-    protected void fillMenu(IMenuManager manager) {
-      m_layoutImpl.getAnchorActions().fillMenuVertical(m_widget, m_side, manager);
-    }
-  }
+	// fields
+	private List<Figure> m_alignmentFigures;
+	private final SelectionEditPolicy m_policy;
+	private final FormLayoutInfoImplClassic<C> m_layoutImpl;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AnchorFiguresClassic(SelectionEditPolicy policy, FormLayoutInfoImplClassic<C> impl) {
+		m_policy = policy;
+		m_layoutImpl = impl;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Shows alignment figures for host {@link EditPart} and its siblings.
+	 */
+	public final void show() {
+		if (m_alignmentFigures == null) {
+			m_alignmentFigures = Lists.newArrayList();
+			// show alignment figures for all of the children of the host's parent
+			{
+				Collection<EditPart> editParts = m_policy.getHost().getParent().getChildren();
+				for (EditPart editPart : editParts) {
+					showAlignmentFigures(editPart);
+				}
+			}
+		}
+	}
+
+	/**
+	 * Hides alignment figures for this host and its siblings.
+	 */
+	public final void hide() {
+		if (m_alignmentFigures != null) {
+			for (Figure figure : m_alignmentFigures) {
+				figure.getParent().remove(figure);
+			}
+			m_alignmentFigures = null;
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Figures
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the alignment figure for given component and axis.
+	 */
+	private Figure createAlignmentFigure(C widget, int side) {
+		IEditPartViewer viewer = m_policy.getHost().getViewer();
+		return PlacementUtils.isHorizontalSide(side)
+				? new HorizontalPopupFigure(viewer, widget, side)
+						: new VerticalPopupFigure(viewer, widget, side);
+	}
+
+	/**
+	 * Shows all possible alignment figures for given edit part.
+	 */
+	@SuppressWarnings("unchecked")
+	private void showAlignmentFigures(EditPart editPart) {
+		// check model
+		C widget;
+		{
+			Object model = editPart.getModel();
+			if (!(model instanceof IControlInfo)) {
+				return;
+			}
+			widget = (C) model;
+		}
+		// check if we can show alignment figures for this control
+		{
+			String showFiguresString = null;
+			if (!LayoutPolicyUtils.shouldShowSideFigures(showFiguresString, editPart)) {
+				return;
+			}
+		}
+		// show alignment figures
+		{
+			{
+				Figure figure = createAlignmentFigure(widget, IPositionConstants.LEFT);
+				if (figure != null) {
+					addAlignmentFigure(widget, figure, true, true);
+				}
+			}
+			{
+				Figure figure = createAlignmentFigure(widget, IPositionConstants.RIGHT);
+				if (figure != null) {
+					addAlignmentFigure(widget, figure, false, true);
+				}
+			}
+			{
+				Figure figure = createAlignmentFigure(widget, IPositionConstants.TOP);
+				if (figure != null) {
+					addAlignmentFigure(widget, figure, true, false);
+				}
+			}
+			{
+				Figure figure = createAlignmentFigure(widget, IPositionConstants.BOTTOM);
+				if (figure != null) {
+					addAlignmentFigure(widget, figure, false, false);
+				}
+			}
+		}
+	}
+
+	/**
+	 * Adds alignment figure at given offset from right side of component's cells.
+	 */
+	private void addAlignmentFigure(C component,
+			Figure figure,
+			boolean isLeading,
+			boolean isHorisontal) {
+		Figure layer = m_policy.getHost().getViewer().getLayer(IEditPartViewer.CLICKABLE_LAYER);
+		// prepare rectangle for cells used by component (in layer coordinates)
+		Rectangle widgetRect;
+		{
+			widgetRect = component.getModelBounds().getCopy();
+			PolicyUtils.translateModelToFeedback(m_policy, widgetRect);
+		}
+		// prepare location and size
+		Point figureLocation;
+		{
+			Dimension figureSize = figure.getSize();
+			figureLocation = new Point();
+			if (isHorisontal) {
+				if (isLeading) {
+					figureLocation.x = widgetRect.x - figureSize.width - 3;
+					figureLocation.y = widgetRect.y + widgetRect.height / 2 - figureSize.height / 2;
+				} else {
+					figureLocation.x = widgetRect.right() + 3;
+					figureLocation.y = widgetRect.y + widgetRect.height / 2 - figureSize.height / 2;
+				}
+			} else {
+				if (isLeading) {
+					figureLocation.x = widgetRect.x + widgetRect.width / 2 - figureSize.width / 2;
+					figureLocation.y = widgetRect.y - figureSize.height - 3;
+				} else {
+					figureLocation.x = widgetRect.x + widgetRect.width / 2 - figureSize.width / 2;
+					figureLocation.y = widgetRect.bottom() + 3;
+				}
+			}
+			// don't draw if the widget is too small
+			if (widgetRect.width < figureSize.width + 6 || widgetRect.height < figureSize.height + 4) {
+				return;
+			}
+		}
+		// add alignment figure
+		layer.add(figure);
+		figure.setLocation(figureLocation);
+		m_alignmentFigures.add(figure);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Inner classes
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final class HorizontalPopupFigure extends AbstractPopupFigure {
+		private final C m_widget;
+		private final int m_side;
+
+		protected HorizontalPopupFigure(IEditPartViewer viewer, C widget, int side) {
+			super(viewer, 9, 5);
+			m_widget = widget;
+			m_side = side;
+		}
+
+		@Override
+		protected Image getImage() {
+			return m_layoutImpl.getAnchorActions().getImageHorizontal(m_widget, m_side);
+		}
+
+		@Override
+		protected void fillMenu(IMenuManager manager) {
+			m_layoutImpl.getAnchorActions().fillMenuHorizontal(m_widget, m_side, manager);
+		}
+	}
+	private final class VerticalPopupFigure extends AbstractPopupFigure {
+		private final C m_widget;
+		private final int m_side;
+
+		protected VerticalPopupFigure(IEditPartViewer viewer, C widget, int side) {
+			super(viewer, 5, 9);
+			m_widget = widget;
+			m_side = side;
+		}
+
+		@Override
+		protected Image getImage() {
+			try {
+				return m_layoutImpl.getAnchorActions().getImageVertical(m_widget, m_side);
+			} catch (Throwable e) {
+				throw new NestableError(e);
+			}
+		}
+
+		@Override
+		protected void fillMenu(IMenuManager manager) {
+			m_layoutImpl.getAnchorActions().fillMenuVertical(m_widget, m_side, manager);
+		}
+	}
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/form/FormHeaderEditPart.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/form/FormHeaderEditPart.java
index 7fd8a115b..06d1e63b2 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/form/FormHeaderEditPart.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/form/FormHeaderEditPart.java
@@ -34,110 +34,110 @@
  * @author mitin_aa
  */
 public class FormHeaderEditPart<C extends IControlInfo> extends GraphicalEditPart {
-  private final boolean isHorizontal;
-  private final IFormLayoutInfo<C> layout;
-  private final Transposer t;
-  private final Figure containerFigure;
+	private final boolean isHorizontal;
+	private final IFormLayoutInfo<C> layout;
+	private final Transposer t;
+	private final Figure containerFigure;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FormHeaderEditPart(IFormLayoutInfo<C> layout,
-      Object model,
-      boolean isHorizontal,
-      Figure containerFigure) {
-    super();
-    this.layout = layout;
-    this.isHorizontal = isHorizontal;
-    this.containerFigure = containerFigure;
-    this.t = new Transposer(!isHorizontal);
-    setModel(model);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FormHeaderEditPart(IFormLayoutInfo<C> layout,
+			Object model,
+			boolean isHorizontal,
+			Figure containerFigure) {
+		super();
+		this.layout = layout;
+		this.isHorizontal = isHorizontal;
+		this.containerFigure = containerFigure;
+		this.t = new Transposer(!isHorizontal);
+		setModel(model);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Figure
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Figure createFigure() {
-    return new PercentFigure(isHorizontal);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Figure
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Figure createFigure() {
+		return new PercentFigure(isHorizontal);
+	}
 
-  @Override
-  protected void refreshVisuals() {
-    int size = t.t(layout.getContainerSize()).width;
-    int percent = getPercent(getModel());
-    int marginOffset =
-        isHorizontal ? FormUtils.getLayoutMarginLeft(layout) : FormUtils.getLayoutMarginTop(layout);
-    int position = size * percent / 100 + marginOffset;
-    Figure figure = getFigure();
-    figure.setToolTipText(String.valueOf(percent) + "%");
-    int figureSize = t.t(figure.getParent().getSize()).height;
-    Rectangle bounds = t.t(new Rectangle(position - figureSize / 2, 0, figureSize, figureSize));
-    figure.setBounds(translateModelToFeedback(bounds));
-  }
+	@Override
+	protected void refreshVisuals() {
+		int size = t.t(layout.getContainerSize()).width;
+		int percent = getPercent(getModel());
+		int marginOffset =
+				isHorizontal ? FormUtils.getLayoutMarginLeft(layout) : FormUtils.getLayoutMarginTop(layout);
+		int position = size * percent / 100 + marginOffset;
+		Figure figure = getFigure();
+		figure.setToolTipText(String.valueOf(percent) + "%");
+		int figureSize = t.t(figure.getParent().getSize()).height;
+		Rectangle bounds = t.t(new Rectangle(position - figureSize / 2, 0, figureSize, figureSize));
+		figure.setBounds(translateModelToFeedback(bounds));
+	}
 
-  private int getPercent(Object model) {
-    return ((FormLayoutPreferences.PercentsInfo) model).value;
-  }
+	private int getPercent(Object model) {
+		return ((FormLayoutPreferences.PercentsInfo) model).value;
+	}
 
-  /**
-   * @return the offset of {@link Figure} with headers relative to the absolute layer.
-   */
-  private Point getOffset() {
-    return FormHeaderLayoutEditPolicy.getOffset(containerFigure, layout.getComposite());
-  }
+	/**
+	 * @return the offset of {@link Figure} with headers relative to the absolute layer.
+	 */
+	private Point getOffset() {
+		return FormHeaderLayoutEditPolicy.getOffset(containerFigure, layout.getComposite());
+	}
 
-  /**
-   * Converts "model" {@link Rectangle} into feedback coordinates.
-   */
-  private Rectangle translateModelToFeedback(Rectangle r) {
-    if (isHorizontal) {
-      PolicyUtils.modelToFeedback_rightToLeft(r, layout.getComposite());
-    }
-    r = t.t(r);
-    return t.t(r.getTranslated(t.t(getOffset()).x, 0));
-  }
+	/**
+	 * Converts "model" {@link Rectangle} into feedback coordinates.
+	 */
+	private Rectangle translateModelToFeedback(Rectangle r) {
+		if (isHorizontal) {
+			PolicyUtils.modelToFeedback_rightToLeft(r, layout.getComposite());
+		}
+		r = t.t(r);
+		return t.t(r.getTranslated(t.t(getOffset()).x, 0));
+	}
 
-  @Override
-  public final Tool getDragTrackerTool(Request request) {
-    return new ParentTargetDragEditPartTracker(this);
-  }
+	@Override
+	public final Tool getDragTrackerTool(Request request) {
+		return new ParentTargetDragEditPartTracker(this);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Figure Class
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  final static class PercentFigure extends Figure {
-    private final Transposer m_t;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Figure Class
+	//
+	////////////////////////////////////////////////////////////////////////////
+	final static class PercentFigure extends Figure {
+		private final Transposer m_t;
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public PercentFigure(boolean isHorizontal) {
-      m_t = new Transposer(!isHorizontal);
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public PercentFigure(boolean isHorizontal) {
+			m_t = new Transposer(!isHorizontal);
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Figure
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    protected void paintClientArea(Graphics graphics) {
-      Dimension size = m_t.t(getSize());
-      graphics.setBackgroundColor(IColorConstants.buttonDarker);
-      PointList points = new PointList();
-      points.addPoint(m_t.t(new Point(3, size.height / 2)));
-      points.addPoint(m_t.t(new Point(size.width / 2, size.height)));
-      points.addPoint(m_t.t(new Point(11, size.height / 2)));
-      graphics.fillPolygon(points);
-    }
-  }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Figure
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		protected void paintClientArea(Graphics graphics) {
+			Dimension size = m_t.t(getSize());
+			graphics.setBackgroundColor(IColorConstants.buttonDarker);
+			PointList points = new PointList();
+			points.addPoint(m_t.t(new Point(3, size.height / 2)));
+			points.addPoint(m_t.t(new Point(size.width / 2, size.height)));
+			points.addPoint(m_t.t(new Point(11, size.height / 2)));
+			graphics.fillPolygon(points);
+		}
+	}
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/form/FormHeaderLayoutEditPolicy.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/form/FormHeaderLayoutEditPolicy.java
index d78cdf0af..271a847a6 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/form/FormHeaderLayoutEditPolicy.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/form/FormHeaderLayoutEditPolicy.java
@@ -54,260 +54,260 @@
  * @author mitin_aa
  */
 final class FormHeaderLayoutEditPolicy<C extends IControlInfo>
-    extends
-      AbstractHeaderLayoutEditPolicy {
-  private final boolean isHorizontal;
-  private final IFormLayoutInfo<C> layout;
-  private final LayoutEditPolicy mainPolicy;
-  private final Transposer t;
+extends
+AbstractHeaderLayoutEditPolicy {
+	private final boolean isHorizontal;
+	private final IFormLayoutInfo<C> layout;
+	private final LayoutEditPolicy mainPolicy;
+	private final Transposer t;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  FormHeaderLayoutEditPolicy(IFormLayoutInfo<C> layout,
-      LayoutEditPolicy mainPolicy,
-      boolean isHorizontal) {
-    super(mainPolicy);
-    this.layout = layout;
-    this.mainPolicy = mainPolicy;
-    this.isHorizontal = isHorizontal;
-    this.t = new Transposer(!isHorizontal);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	FormHeaderLayoutEditPolicy(IFormLayoutInfo<C> layout,
+			LayoutEditPolicy mainPolicy,
+			boolean isHorizontal) {
+		super(mainPolicy);
+		this.layout = layout;
+		this.mainPolicy = mainPolicy;
+		this.isHorizontal = isHorizontal;
+		this.t = new Transposer(!isHorizontal);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Children
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void decorateChild(EditPart child) {
-    child.installEditPolicy(
-        EditPolicy.SELECTION_ROLE,
-        new FormHeaderSelectionEditPolicy(mainPolicy));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Children
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void decorateChild(EditPart child) {
+		child.installEditPolicy(
+				EditPolicy.SELECTION_ROLE,
+				new FormHeaderSelectionEditPolicy(mainPolicy));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Double-click
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void handleDoubleClick(SelectionRequest request) {
-    Point location = request.getLocation().getCopy();
-    int percent = calcPercent(location);
-    if (percent > 0) {
-      layout.getPreferences().addPercent(percent, isHorizontal);
-      getHost().refresh();
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Double-click
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void handleDoubleClick(SelectionRequest request) {
+		Point location = request.getLocation().getCopy();
+		int percent = calcPercent(location);
+		if (percent > 0) {
+			layout.getPreferences().addPercent(percent, isHorizontal);
+			getHost().refresh();
+		}
+	}
 
-  @Override
-  public void performRequest(Request request) {
-    if (Request.REQ_OPEN.equals(request.getType())) {
-      handleDoubleClick((SelectionRequest) request);
-      return;
-    }
-    super.performRequest(request);
-  }
+	@Override
+	public void performRequest(Request request) {
+		if (Request.REQ_OPEN.equals(request.getType())) {
+			handleDoubleClick((SelectionRequest) request);
+			return;
+		}
+		super.performRequest(request);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Moving
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private TextFeedback hintFeedback;
-  private Figure feedback;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Moving
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private TextFeedback hintFeedback;
+	private Figure feedback;
 
-  @Override
-  protected void showLayoutTargetFeedback(Request request) {
-    super.showLayoutTargetFeedback(request);
-    int percent = calcPercent((ChangeBoundsRequest) request);
-    if (percent > 0 && percent < 100) {
-      {
-        if (hintFeedback == null) {
-          Layer layer =
-              mainPolicy.getHost().getViewer().getLayer(IEditPartViewer.FEEDBACK_LAYER_ABV_1);
-          hintFeedback = new TextFeedback(layer, true);
-          hintFeedback.add();
-        }
-        hintFeedback.setText(percent + "%");
-        hintFeedback.setLocation(new Point(0, 0));
-      }
-      {
-        if (feedback == null) {
-          Layer layer = getHost().getViewer().getLayer(IEditPartViewer.FEEDBACK_LAYER_ABV_1);
-          feedback = new FormHeaderEditPart.PercentFigure(isHorizontal);
-          layer.add(feedback);
-        }
-        int figureSize = t.t(getHostFigure().getSize()).height;
-        Point location = t.t(((ChangeBoundsRequest) request).getLocation().getCopy());
-        Point position = t.t(new Point(location.x - figureSize / 2, 0));
-        feedback.setLocation(position);
-        feedback.setSize(figureSize, figureSize);
-      }
-    } else {
-      removeFeedbacks();
-    }
-  }
+	@Override
+	protected void showLayoutTargetFeedback(Request request) {
+		super.showLayoutTargetFeedback(request);
+		int percent = calcPercent((ChangeBoundsRequest) request);
+		if (percent > 0 && percent < 100) {
+			{
+				if (hintFeedback == null) {
+					Layer layer =
+							mainPolicy.getHost().getViewer().getLayer(IEditPartViewer.FEEDBACK_LAYER_ABV_1);
+					hintFeedback = new TextFeedback(layer, true);
+					hintFeedback.add();
+				}
+				hintFeedback.setText(percent + "%");
+				hintFeedback.setLocation(new Point(0, 0));
+			}
+			{
+				if (feedback == null) {
+					Layer layer = getHost().getViewer().getLayer(IEditPartViewer.FEEDBACK_LAYER_ABV_1);
+					feedback = new FormHeaderEditPart.PercentFigure(isHorizontal);
+					layer.add(feedback);
+				}
+				int figureSize = t.t(getHostFigure().getSize()).height;
+				Point location = t.t(((ChangeBoundsRequest) request).getLocation().getCopy());
+				Point position = t.t(new Point(location.x - figureSize / 2, 0));
+				feedback.setLocation(position);
+				feedback.setSize(figureSize, figureSize);
+			}
+		} else {
+			removeFeedbacks();
+		}
+	}
 
-  @Override
-  protected void eraseLayoutTargetFeedback(Request request) {
-    removeFeedbacks();
-    super.eraseLayoutTargetFeedback(request);
-  }
+	@Override
+	protected void eraseLayoutTargetFeedback(Request request) {
+		removeFeedbacks();
+		super.eraseLayoutTargetFeedback(request);
+	}
 
-  private void removeFeedbacks() {
-    if (hintFeedback != null) {
-      hintFeedback.remove();
-      hintFeedback = null;
-      FigureUtils.removeFigure(feedback);
-      feedback = null;
-    }
-  }
+	private void removeFeedbacks() {
+		if (hintFeedback != null) {
+			hintFeedback.remove();
+			hintFeedback = null;
+			FigureUtils.removeFigure(feedback);
+			feedback = null;
+		}
+	}
 
-  @Override
-  public boolean understandsRequest(Request request) {
-    return Request.REQ_MOVE.equals(request.getType());
-  }
+	@Override
+	public boolean understandsRequest(Request request) {
+		return Request.REQ_MOVE.equals(request.getType());
+	}
 
-  @Override
-  protected Command getMoveCommand(ChangeBoundsRequest request) {
-    final int percent = calcPercent(request);
-    if (percent > 0 && percent < 100) {
-      EditPart editPart = request.getEditParts().get(0);
-      final int oldPercent = ((PercentsInfo) editPart.getModel()).value;
-      return new Command() {
-        @Override
-        public void execute() throws Exception {
-          layout.getPreferences().removePercent(oldPercent, isHorizontal);
-          layout.getPreferences().addPercent(percent, isHorizontal);
-          getHost().refresh();
-        }
-      };
-    }
-    return null;
-  }
+	@Override
+	protected Command getMoveCommand(ChangeBoundsRequest request) {
+		final int percent = calcPercent(request);
+		if (percent > 0 && percent < 100) {
+			EditPart editPart = request.getEditParts().get(0);
+			final int oldPercent = ((PercentsInfo) editPart.getModel()).value;
+			return new Command() {
+				@Override
+				public void execute() throws Exception {
+					layout.getPreferences().removePercent(oldPercent, isHorizontal);
+					layout.getPreferences().addPercent(percent, isHorizontal);
+					getHost().refresh();
+				}
+			};
+		}
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Coordinates/Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private int calcPercent(ChangeBoundsRequest request) {
-    Point location = request.getLocation().getCopy();
-    return calcPercent(location);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Coordinates/Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private int calcPercent(ChangeBoundsRequest request) {
+		Point location = request.getLocation().getCopy();
+		return calcPercent(location);
+	}
 
-  private int calcPercent(Point location) {
-    translateToModel(location);
-    int marginOffset =
-        isHorizontal ? FormUtils.getLayoutMarginLeft(layout) : FormUtils.getLayoutMarginTop(layout);
-    int place = t.t(location).x - marginOffset;
-    int size = t.t(layout.getContainerSize()).width;
-    return place * 100 / size;
-  }
+	private int calcPercent(Point location) {
+		translateToModel(location);
+		int marginOffset =
+				isHorizontal ? FormUtils.getLayoutMarginLeft(layout) : FormUtils.getLayoutMarginTop(layout);
+		int place = t.t(location).x - marginOffset;
+		int size = t.t(layout.getContainerSize()).width;
+		return place * 100 / size;
+	}
 
-  private void translateToModel(Translatable t) {
-    t.performTranslate(getOffset(mainPolicy.getHost().getFigure(), layout.getComposite()).getNegated());
-  }
+	private void translateToModel(Translatable t) {
+		t.performTranslate(getOffset(mainPolicy.getHost().getFigure(), layout.getComposite()).getNegated());
+	}
 
-  /**
-   * @return the offset of {@link Figure} with headers relative to the absolute layer.
-   */
-  public static Point getOffset(Figure containerFigure, ICompositeInfo composite) {
-    Point offset = new Point(0, 0);
-    FigureUtils.translateFigureToAbsolute2(containerFigure, offset);
-    offset.performTranslate(composite.getClientAreaInsets());
-    return offset;
-  }
+	/**
+	 * @return the offset of {@link Figure} with headers relative to the absolute layer.
+	 */
+	public static Point getOffset(Figure containerFigure, ICompositeInfo composite) {
+		Point offset = new Point(0, 0);
+		FigureUtils.translateFigureToAbsolute2(containerFigure, offset);
+		offset.performTranslate(composite.getClientAreaInsets());
+		return offset;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Context menu
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void buildContextMenu(IMenuManager manager) {
-    IEditPartViewer viewer = getHost().getViewer();
-    Tool tool = viewer.getEditDomain().getActiveTool();
-    Point location = tool.getLocation().getCopy();
-    final int percent = calcPercent(location);
-    // add actions
-    if (percent > 0) {
-      IAction action =
-          new Action(MessageFormat.format(
-              GefMessages.FormHeaderLayoutEditPolicy_addSnapPoint,
-              percent)) {
-            @Override
-            public void run() {
-              layout.getPreferences().addPercent(percent, isHorizontal);
-              getHost().refresh();
-            }
-          };
-      manager.add(action);
-      manager.add(new Separator());
-    }
-    // add 'remove' actions
-    List<Integer> percents =
-        isHorizontal
-            ? layout.getPreferences().getHorizontalPercents()
-            : layout.getPreferences().getVerticalPercents();
-    for (final Integer integer : percents) {
-      IAction action =
-          new Action(MessageFormat.format(
-              GefMessages.FormHeaderLayoutEditPolicy_removePercent,
-              integer)) {
-            @Override
-            public void run() {
-              layout.getPreferences().removePercent(integer, isHorizontal);
-              getHost().refresh();
-            }
-          };
-      manager.add(action);
-    }
-    manager.add(new Separator());
-    {
-      // restore defaults
-      IAction action = new Action(GefMessages.FormHeaderLayoutEditPolicy_restoreDefaults) {
-        @Override
-        public void run() {
-          layout.getPreferences().defaultPercents(isHorizontal);
-          getHost().refresh();
-        }
-      };
-      manager.add(action);
-    }
-    {
-      // configure defaults
-      IAction action = new Action(GefMessages.FormHeaderLayoutEditPolicy_useAsDefaults) {
-        @Override
-        public void run() {
-          if (MessageDialog.openQuestion(
-              DesignerPlugin.getShell(),
-              GefMessages.FormHeaderLayoutEditPolicy_confirmDefaultsTitle,
-              GefMessages.FormHeaderLayoutEditPolicy_confirmDefaultsMessage)) {
-            layout.getPreferences().setAsDefaultPercents(isHorizontal);
-          }
-        }
-      };
-      manager.add(action);
-    }
-    {
-      // configure defaults
-      IAction action = new Action(GefMessages.FormHeaderLayoutEditPolicy_configureDefaults) {
-        @Override
-        public void run() {
-          ToolkitDescription toolkit = GlobalState.getToolkit();
-          String id = toolkit.getId() + ".preferences.layout.FormLayoutPreferencePage";
-          PreferencesUtil.createPreferenceDialogOn(
-              DesignerPlugin.getShell(),
-              id,
-              ArrayUtils.EMPTY_STRING_ARRAY,
-              null).open();
-          getHost().refresh();
-        }
-      };
-      manager.add(action);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Context menu
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void buildContextMenu(IMenuManager manager) {
+		IEditPartViewer viewer = getHost().getViewer();
+		Tool tool = viewer.getEditDomain().getActiveTool();
+		Point location = tool.getLocation().getCopy();
+		final int percent = calcPercent(location);
+		// add actions
+		if (percent > 0) {
+			IAction action =
+					new Action(MessageFormat.format(
+							GefMessages.FormHeaderLayoutEditPolicy_addSnapPoint,
+							percent)) {
+				@Override
+				public void run() {
+					layout.getPreferences().addPercent(percent, isHorizontal);
+					getHost().refresh();
+				}
+			};
+			manager.add(action);
+			manager.add(new Separator());
+		}
+		// add 'remove' actions
+		List<Integer> percents =
+				isHorizontal
+				? layout.getPreferences().getHorizontalPercents()
+						: layout.getPreferences().getVerticalPercents();
+		for (final Integer integer : percents) {
+			IAction action =
+					new Action(MessageFormat.format(
+							GefMessages.FormHeaderLayoutEditPolicy_removePercent,
+							integer)) {
+				@Override
+				public void run() {
+					layout.getPreferences().removePercent(integer, isHorizontal);
+					getHost().refresh();
+				}
+			};
+			manager.add(action);
+		}
+		manager.add(new Separator());
+		{
+			// restore defaults
+			IAction action = new Action(GefMessages.FormHeaderLayoutEditPolicy_restoreDefaults) {
+				@Override
+				public void run() {
+					layout.getPreferences().defaultPercents(isHorizontal);
+					getHost().refresh();
+				}
+			};
+			manager.add(action);
+		}
+		{
+			// configure defaults
+			IAction action = new Action(GefMessages.FormHeaderLayoutEditPolicy_useAsDefaults) {
+				@Override
+				public void run() {
+					if (MessageDialog.openQuestion(
+							DesignerPlugin.getShell(),
+							GefMessages.FormHeaderLayoutEditPolicy_confirmDefaultsTitle,
+							GefMessages.FormHeaderLayoutEditPolicy_confirmDefaultsMessage)) {
+						layout.getPreferences().setAsDefaultPercents(isHorizontal);
+					}
+				}
+			};
+			manager.add(action);
+		}
+		{
+			// configure defaults
+			IAction action = new Action(GefMessages.FormHeaderLayoutEditPolicy_configureDefaults) {
+				@Override
+				public void run() {
+					ToolkitDescription toolkit = GlobalState.getToolkit();
+					String id = toolkit.getId() + ".preferences.layout.FormLayoutPreferencePage";
+					PreferencesUtil.createPreferenceDialogOn(
+							DesignerPlugin.getShell(),
+							id,
+							ArrayUtils.EMPTY_STRING_ARRAY,
+							null).open();
+					getHost().refresh();
+				}
+			};
+			manager.add(action);
+		}
+	}
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/form/FormHeaderSelectionEditPolicy.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/form/FormHeaderSelectionEditPolicy.java
index 856b3459e..2e3171f1e 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/form/FormHeaderSelectionEditPolicy.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/form/FormHeaderSelectionEditPolicy.java
@@ -30,48 +30,48 @@
  * @author mitin_aa
  */
 final class FormHeaderSelectionEditPolicy extends AbstractHeaderSelectionEditPolicy {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FormHeaderSelectionEditPolicy(LayoutEditPolicy mainPolicy) {
-    super(mainPolicy);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FormHeaderSelectionEditPolicy(LayoutEditPolicy mainPolicy) {
+		super(mainPolicy);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Handles
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected List<Handle> createSelectionHandles() {
-    List<Handle> handles = Lists.newArrayList();
-    // move handle
-    {
-      MoveHandle moveHandle = new MoveHandle(getHost(), new HeaderMoveHandleLocator());
-      moveHandle.setBorder(null);
-      handles.add(moveHandle);
-    }
-    //
-    return handles;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Handles
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected List<Handle> createSelectionHandles() {
+		List<Handle> handles = Lists.newArrayList();
+		// move handle
+		{
+			MoveHandle moveHandle = new MoveHandle(getHost(), new HeaderMoveHandleLocator());
+			moveHandle.setBorder(null);
+			handles.add(moveHandle);
+		}
+		//
+		return handles;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Move location
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Implementation of {@link ILocator} to place handle directly on header.
-   */
-  private class HeaderMoveHandleLocator implements ILocator {
-    @Override
-    public void relocate(Figure target) {
-      Figure reference = getHostFigure();
-      Rectangle bounds = reference.getBounds().getCopy();
-      FigureUtils.translateFigureToFigure(reference, target, bounds);
-      target.setBounds(bounds);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Move location
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Implementation of {@link ILocator} to place handle directly on header.
+	 */
+	private class HeaderMoveHandleLocator implements ILocator {
+		@Override
+		public void relocate(Figure target) {
+			Figure reference = getHostFigure();
+			Rectangle bounds = reference.getBounds().getCopy();
+			FigureUtils.translateFigureToFigure(reference, target, bounds);
+			target.setBounds(bounds);
+		}
+	}
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/form/FormLayoutEditPolicy.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/form/FormLayoutEditPolicy.java
index e7002a954..8f536f8f0 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/form/FormLayoutEditPolicy.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/form/FormLayoutEditPolicy.java
@@ -49,218 +49,218 @@
  * @coverage swt.gef.policy.form
  */
 public final class FormLayoutEditPolicy<C extends IControlInfo>
-    extends
-      AbsoluteBasedLayoutEditPolicySWT<C> {
-  private final IFormLayoutInfo<C> layout;
+extends
+AbsoluteBasedLayoutEditPolicySWT<C> {
+	private final IFormLayoutInfo<C> layout;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FormLayoutEditPolicy(IFormLayoutInfo<C> layout_) {
-    super(layout_);
-    this.layout = layout_;
-    createPlacementsSupport((IAbsoluteLayoutCommands) layout.getImpl());
-    new BroadcastListenerHelper(layout.getUnderlyingModel(), this, new LayoutAssistantListener() {
-      @Override
-      public void createAssistantPages(List<ObjectInfo> objects,
-          TabFolder folder,
-          List<ILayoutAssistantPage> pages) throws Exception {
-        if (!objects.isEmpty()) {
-          for (ObjectInfo object : objects) {
-            if (object.getParent() != layout.getComposite()) {
-              return;
-            }
-          }
-          LayoutAssistantPage<C> page =
-              new LayoutAssistantPage<C>(layout, placementsSupport, folder, objects);
-          TabFactory.item(folder).text("FormLayout").control(page);
-          pages.add(page);
-        }
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FormLayoutEditPolicy(IFormLayoutInfo<C> layout_) {
+		super(layout_);
+		this.layout = layout_;
+		createPlacementsSupport((IAbsoluteLayoutCommands) layout.getImpl());
+		new BroadcastListenerHelper(layout.getUnderlyingModel(), this, new LayoutAssistantListener() {
+			@Override
+			public void createAssistantPages(List<ObjectInfo> objects,
+					TabFolder folder,
+					List<ILayoutAssistantPage> pages) throws Exception {
+				if (!objects.isEmpty()) {
+					for (ObjectInfo object : objects) {
+						if (object.getParent() != layout.getComposite()) {
+							return;
+						}
+					}
+					LayoutAssistantPage<C> page =
+							new LayoutAssistantPage<C>(layout, placementsSupport, folder, objects);
+					TabFactory.item(folder).text("FormLayout").control(page);
+					pages.add(page);
+				}
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Decorate Child
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void decorateChild(EditPart child) {
-    if (layout.getControls().contains(child.getModel())) {
-      child.installEditPolicy(EditPolicy.SELECTION_ROLE, new FormSelectionEditPolicy<C>(layout));
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Decorate Child
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void decorateChild(EditPart child) {
+		if (layout.getControls().contains(child.getModel())) {
+			child.installEditPolicy(EditPolicy.SELECTION_ROLE, new FormSelectionEditPolicy<C>(layout));
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Coordinates
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Dimension getContainerSize() {
-    return layout.getContainerSize();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Coordinates
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Dimension getContainerSize() {
+		return layout.getContainerSize();
+	}
 
-  @Override
-  public Point getClientAreaOffset() {
-    Point offset = layout.getComposite().getClientArea().getLocation();
-    return offset.getTranslated(
-        FormUtils.getLayoutMarginLeft(layout),
-        FormUtils.getLayoutMarginTop(layout));
-  }
+	@Override
+	public Point getClientAreaOffset() {
+		Point offset = layout.getComposite().getClientArea().getLocation();
+		return offset.getTranslated(
+				FormUtils.getLayoutMarginLeft(layout),
+				FormUtils.getLayoutMarginTop(layout));
+	}
 
-  @Override
-  protected void translateAbsoluteToModel(Translatable t) {
-    super.translateAbsoluteToModel(t);
-    t.performTranslate(getClientAreaOffset().getNegated());
-  }
+	@Override
+	protected void translateAbsoluteToModel(Translatable t) {
+		super.translateAbsoluteToModel(t);
+		t.performTranslate(getClientAreaOffset().getNegated());
+	}
 
-  @Override
-  protected void translateModelToFeedback(Translatable t) {
-    super.translateModelToFeedback(t);
-    t.performTranslate(getClientAreaOffset());
-  }
+	@Override
+	protected void translateModelToFeedback(Translatable t) {
+		super.translateModelToFeedback(t);
+		t.performTranslate(getClientAreaOffset());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Move
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void eraseSelectionFeedbacks() {
-    super.eraseSelectionFeedbacks();
-    for (EditPart child : getHost().getChildren()) {
-      if (layout.getControls().contains(child.getModel())) {
-        @SuppressWarnings("unchecked")
-        FormSelectionEditPolicy<C> editPolicy =
-            (FormSelectionEditPolicy<C>) child.getEditPolicy(EditPolicy.SELECTION_ROLE);
-        editPolicy.hideSelection();
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Move
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void eraseSelectionFeedbacks() {
+		super.eraseSelectionFeedbacks();
+		for (EditPart child : getHost().getChildren()) {
+			if (layout.getControls().contains(child.getModel())) {
+				@SuppressWarnings("unchecked")
+				FormSelectionEditPolicy<C> editPolicy =
+				(FormSelectionEditPolicy<C>) child.getEditPolicy(EditPolicy.SELECTION_ROLE);
+				editPolicy.hideSelection();
+			}
+		}
+	}
 
-  @Override
-  protected void showSelectionFeedbacks() {
-    super.showSelectionFeedbacks();
-    for (EditPart child : getHost().getChildren()) {
-      if (layout.getControls().contains(child.getModel())
-          && child.getSelected() != EditPart.SELECTED_NONE) {
-        @SuppressWarnings("unchecked")
-        FormSelectionEditPolicy<C> editPolicy =
-            (FormSelectionEditPolicy<C>) child.getEditPolicy(EditPolicy.SELECTION_ROLE);
-        editPolicy.showSelection();
-      }
-    }
-  }
+	@Override
+	protected void showSelectionFeedbacks() {
+		super.showSelectionFeedbacks();
+		for (EditPart child : getHost().getChildren()) {
+			if (layout.getControls().contains(child.getModel())
+					&& child.getSelected() != EditPart.SELECTED_NONE) {
+				@SuppressWarnings("unchecked")
+				FormSelectionEditPolicy<C> editPolicy =
+				(FormSelectionEditPolicy<C>) child.getEditPolicy(EditPolicy.SELECTION_ROLE);
+				editPolicy.showSelection();
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Create
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Command getCreateCommand(final CreateRequest request) {
-    return new EditCommand(layout) {
-      @SuppressWarnings("unchecked")
-      @Override
-      protected void executeEdit() throws Exception {
-        layout.commandCreate((C) request.getNewObject(), null);
-        placementsSupport.commitAdd();
-      }
-    };
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Create
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Command getCreateCommand(final CreateRequest request) {
+		return new EditCommand(layout) {
+			@SuppressWarnings("unchecked")
+			@Override
+			protected void executeEdit() throws Exception {
+				layout.commandCreate((C) request.getNewObject(), null);
+				placementsSupport.commitAdd();
+			}
+		};
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Move
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Command getMoveCommand(final ChangeBoundsRequest request) {
-    return new EditCommand(layout) {
-      @Override
-      protected void executeEdit() throws Exception {
-        placementsSupport.commit();
-      }
-    };
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Move
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Command getMoveCommand(final ChangeBoundsRequest request) {
+		return new EditCommand(layout) {
+			@Override
+			protected void executeEdit() throws Exception {
+				placementsSupport.commit();
+			}
+		};
+	}
 
-  @Override
-  protected Command getAddCommand(ChangeBoundsRequest request) {
-    final List<EditPart> editParts = request.getEditParts();
-    //
-    return new EditCommand(layout) {
-      @SuppressWarnings("unchecked")
-      @Override
-      protected void executeEdit() throws Exception {
-        for (EditPart editPart : editParts) {
-          layout.commandMove((C) editPart.getModel(), null);
-        }
-        placementsSupport.commitAdd();
-      }
-    };
-  }
+	@Override
+	protected Command getAddCommand(ChangeBoundsRequest request) {
+		final List<EditPart> editParts = request.getEditParts();
+		//
+		return new EditCommand(layout) {
+			@SuppressWarnings("unchecked")
+			@Override
+			protected void executeEdit() throws Exception {
+				for (EditPart editPart : editParts) {
+					layout.commandMove((C) editPart.getModel(), null);
+				}
+				placementsSupport.commitAdd();
+			}
+		};
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Paste
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void doPasteComponent(Point pasteLocation, PastedComponentInfo pastedWidget)
-      throws Exception {
-    @SuppressWarnings("unchecked")
-    C control = (C) pastedWidget.getComponent();
-    layout.commandCreate(control, null);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Paste
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void doPasteComponent(Point pasteLocation, PastedComponentInfo pastedWidget)
+			throws Exception {
+		@SuppressWarnings("unchecked")
+		C control = (C) pastedWidget.getComponent();
+		layout.commandCreate(control, null);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Selection Actions
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected AbstractAlignmentActionsSupport<C> getAlignmentActionsSupport() {
-    return new FormLayoutAlignmentActionsSupport<C>(layout, placementsSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Selection Actions
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected AbstractAlignmentActionsSupport<C> getAlignmentActionsSupport() {
+		return new FormLayoutAlignmentActionsSupport<C>(layout, placementsSupport);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Misc
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected ToolkitDescription getToolkit() {
-    return GlobalState.getToolkit();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Misc
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected ToolkitDescription getToolkit() {
+		return GlobalState.getToolkit();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Inner classes
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final class FormLayoutAlignmentActionsSupport<C extends IControlInfo>
-      extends
-        ComplexAlignmentActionsSupport<C> {
-    private final IFormLayoutInfo<C> m_layout;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Inner classes
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final class FormLayoutAlignmentActionsSupport<C extends IControlInfo>
+	extends
+	ComplexAlignmentActionsSupport<C> {
+		private final IFormLayoutInfo<C> m_layout;
 
-    public FormLayoutAlignmentActionsSupport(IFormLayoutInfo<C> layout,
-        PlacementsSupport placementsSupport) {
-      super(placementsSupport);
-      m_layout = layout;
-    }
+		public FormLayoutAlignmentActionsSupport(IFormLayoutInfo<C> layout,
+				PlacementsSupport placementsSupport) {
+			super(placementsSupport);
+			m_layout = layout;
+		}
 
-    @Override
-    protected boolean isComponentInfo(ObjectInfo object) {
-      return object instanceof IControlInfo && m_layout.isManagedObject(object);
-    }
+		@Override
+		protected boolean isComponentInfo(ObjectInfo object) {
+			return object instanceof IControlInfo && m_layout.isManagedObject(object);
+		}
 
-    @Override
-    protected IAbstractComponentInfo getLayoutContainer() {
-      return m_layout.getComposite();
-    }
-  }
+		@Override
+		protected IAbstractComponentInfo getLayoutContainer() {
+			return m_layout.getComposite();
+		}
+	}
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/form/FormLayoutEditPolicy2.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/form/FormLayoutEditPolicy2.java
index 4678f0712..fcd92655d 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/form/FormLayoutEditPolicy2.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/form/FormLayoutEditPolicy2.java
@@ -60,427 +60,427 @@
  * @author mitin_aa
  */
 public class FormLayoutEditPolicy2 extends KeyboardMovingLayoutEditPolicy
-    implements
-      IFeedbackProxy,
-      IHeadersProvider {
-  private final FormLayoutInfo m_layout;
-  private final FormLayoutVisualDataProvider m_visualDataProvider;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FormLayoutEditPolicy2(FormLayoutInfo layout) {
-    super();
-    m_layout = layout;
-    m_visualDataProvider = new FormLayoutVisualDataProvider(layout);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Decorate Child
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void decorateChild(EditPart child) {
-    if (m_layout.getControls().contains(child.getModel())) {
-      child.installEditPolicy(EditPolicy.SELECTION_ROLE, new FormSelectionEditPolicy2(m_layout));
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Requests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected ILayoutRequestValidator getRequestValidator() {
-    return ControlsLayoutRequestValidator.INSTANCE;
-  }
-
-  @Override
-  protected String getResizeRequestType() {
-    return AbsoluteBasedSelectionEditPolicy.REQ_RESIZE;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Feedbacks
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private int m_frozenYValue;
-  private Figure m_createFeedback;
-  private TextFeedback m_locationFeedback;
-  private TextFeedback m_sizeFeedback;
-  private SnapPoints m_snapPoints;
-
-  @Override
-  protected void showLayoutTargetFeedback(Request request) {
-    // prepare snapping
-    if (request instanceof ChangeBoundsRequest) {
-      getMoveSnapPoints();
-      showMoveFeedback((ChangeBoundsRequest) request);
-    } else if (request instanceof CreateRequest) {
-    } else if (request instanceof PasteRequest) {
-    }
-  }
-
-  @Override
-  protected void eraseLayoutTargetFeedback(Request request) {
-    if (m_snapPoints != null) {
-      m_snapPoints.removeFeedbacks();
-      m_snapPoints = null;
-    }
-    if (m_moveFeedback != null) {
-      removeFeedback(m_moveFeedback);
-      m_moveFeedback = null;
-    }
-    if (m_locationFeedback != null) {
-      m_locationFeedback.remove();
-      m_locationFeedback = null;
-    }
-    m_frozenYValue = 0;
-  }
-
-  private boolean isFreezeVerticalAxis(Request request) {
-    return request.isControlKeyPressed() && m_frozenYValue != 0;
-  }
-
-  private SnapPoints createSnapPoints(ISnapPointsListener listener) {
-    List<IAbstractComponentInfo> allComponents = getAllComponents();
-    FormLayoutSnapPointsProvider snapPointsProvider =
-        new FormLayoutSnapPointsProvider(m_layout, m_visualDataProvider, allComponents);
-    return new SnapPoints(m_visualDataProvider, this, snapPointsProvider, listener, allComponents);
-  }
-
-  /**
-   * @return special layer above feedback layer for to add text feedbacks
-   */
-  private Layer getTextFeedbackLayer() {
-    return getLayer(IEditPartViewer.FEEDBACK_LAYER_ABV_1);
-  }
-
-  /**
-   * Creates line figure, translates given model coordinates into feedback and adds created line
-   * into feedback layer
-   */
-  protected final Polyline createLineFeedback(int x1, int y1, int x2, int y2) {
-    // prepare points
-    Point begin = new Point(x1, y1);
-    Point end = new Point(x2, y2);
-    translateModelToFeedback(begin);
-    translateModelToFeedback(end);
-    // create feedback
-    Polyline line = new Polyline();
-    line.addPoint(begin);
-    line.addPoint(end);
-    line.setLineStyle(SWT.LINE_DOT);
-    addFeedback(line);
-    return line;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IFeedbackProxy
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Figure addHorizontalFeedbackLine(int y, int x, int width) {
-    Polyline line = createLineFeedback(x, y, x + width, y);
-    line.setForeground(AbsolutePolicyUtils.COLOR_FEEDBACK);
-    return line;
-  }
-
-  @Override
-  public Figure addHorizontalMiddleLineFeedback(int y, int x, int width) {
-    Polyline line = createLineFeedback(x, y, x + width, y);
-    line.setForeground(AbsolutePolicyUtils.COLOR_FEEDBACK);
-    line.setLineStyle(SWT.LINE_DASH);
-    return line;
-  }
-
-  @Override
-  public Figure addOutlineFeedback(Rectangle bounds) {
-    // prepare bounds
-    Rectangle feedbackBounds = bounds.getCopy();
-    translateModelToFeedback(feedbackBounds);
-    // create feedback
-    Figure outline = new Figure();
-    outline.setBorder(new LineBorder(AbsolutePolicyUtils.COLOR_OUTLINE));
-    outline.setBounds(feedbackBounds);
-    addFeedback(outline);
-    return outline;
-  }
-
-  @Override
-  public Figure addVerticalFeedbackLine(int x, int y, int height) {
-    Polyline line = createLineFeedback(x, y, x, y + height);
-    line.setForeground(AbsolutePolicyUtils.COLOR_FEEDBACK);
-    return line;
-  }
-
-  @Override
-  public Figure addVerticalMiddleLineFeedback(int x, int y, int height) {
-    Polyline line = createLineFeedback(x, y, x, y + height);
-    line.setForeground(AbsolutePolicyUtils.COLOR_FEEDBACK);
-    line.setLineStyle(SWT.LINE_DASH);
-    return line;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Move
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Figure m_moveFeedback;
-  private MoveListener m_moveListener;
-
-  private void getMoveSnapPoints() {
-    if (m_snapPoints == null) {
-      m_moveListener = new MoveListener();
-      m_snapPoints = createSnapPoints(m_moveListener);
-    }
-  }
-
-  private void showMoveFeedback(ChangeBoundsRequest request) {
-    // first of all remove an old feedback
-    if (m_moveFeedback != null) {
-      removeFeedback(m_moveFeedback);
-      m_moveFeedback = null;
-    }
-    // is this edit parts moved by using a keyboard
-    boolean isKeyboardMoving = isKeyboardMoving();
-    // some preparations
-    List<EditPart> editParts = request.getEditParts();
-    List<IAbstractComponentInfo> modelList = Lists.newArrayList();
-    Rectangle[] relativeBounds = new Rectangle[editParts.size()];
-    Rectangle widgetBounds;
-    // calculate model bounds and create move feedback
-    if (editParts.size() > 1) {
-      GraphicalEditPart firstEditPart = (GraphicalEditPart) editParts.get(0);
-      widgetBounds = new Rectangle(firstEditPart.getFigure().getBounds());
-      m_moveFeedback = new OutlineImageFigure(null);
-      //
-      for (EditPart editPart : editParts) {
-        IAbstractComponentInfo model = (IAbstractComponentInfo) editPart.getModel();
-        Rectangle bounds = ((GraphicalEditPart) editPart).getFigure().getBounds();
-        //
-        widgetBounds.union(bounds);
-        modelList.add(model);
-        //
-        m_moveFeedback.add(new OutlineImageFigure(model.getImage(),
-            AbsolutePolicyUtils.COLOR_OUTLINE), bounds);
-      }
-      //
-      List<Figure> moveFeedbackFigures = m_moveFeedback.getChildren();
-      for (int i = 0; i < moveFeedbackFigures.size(); ++i) {
-        Figure figure = moveFeedbackFigures.get(i);
-        figure.getBounds().performTranslate(-widgetBounds.x, -widgetBounds.y);
-        relativeBounds[i] = figure.getBounds().getCopy();
-      }
-    } else {
-      EditPart editPart = editParts.get(0);
-      IAbstractComponentInfo model = (IAbstractComponentInfo) editPart.getModel();
-      //
-      widgetBounds = ((GraphicalEditPart) editPart).getFigure().getBounds().getCopy();
-      relativeBounds[0] = new Rectangle(new Point(), widgetBounds.getSize());
-      modelList.add(model);
-      //
-      m_moveFeedback = new OutlineImageFigure(model.getImage(), AbsolutePolicyUtils.COLOR_OUTLINE);
-    }
-    // make figure bounds as absolute
-    FigureUtils.translateFigureToAbsolute2(
-        ((GraphicalEditPart) editParts.get(0)).getFigure().getParent(),
-        widgetBounds);
-    // translate feedback coordinates into model coordinates (ex., SWT shell control
-    // has caption and border area, so (0,0) point offset is border left and caption
-    // size, i.e. insets.
-    translateAbsoluteToModel(widgetBounds);
-    // see where the widget(s) moved
-    Point moveDelta = request.getMoveDelta();
-    widgetBounds.x = widgetBounds.x + moveDelta.x;
-    if (isFreezeVerticalAxis(request)) {
-      widgetBounds.y = m_frozenYValue;
-    } else {
-      widgetBounds.y = m_frozenYValue = widgetBounds.y + moveDelta.y;
-    }
-    addFeedback(m_moveFeedback);
-    // Case 42313
-    Point moveLocation = isKeyboardMoving() ? moveDelta : request.getLocation();
-    // do drag
-    m_snapPoints.processBounds(moveLocation, modelList, widgetBounds, 0);
-    // update move feedback: translate bounds back into feedback coordinates, apply bounds for feedback figure
-    Rectangle feedbackBounds = widgetBounds.getCopy();
-    translateModelToFeedback(feedbackBounds);
-    m_moveFeedback.setBounds(feedbackBounds);
-    // create text feedback
-    if (m_locationFeedback == null && isShowTextFeedback() && !isKeyboardMoving) {
-      m_locationFeedback = new TextFeedback(getTextFeedbackLayer());
-      m_locationFeedback.add();
-    }
-    // update text feedback
-    if (m_locationFeedback != null) {
-      EditPart firstEditPart = editParts.get(0);
-      m_locationFeedback.setText(getLocationHintText(firstEditPart, widgetBounds.x, widgetBounds.y));
-      Point locationFeedbackLocation = getLocationHintLocation(feedbackBounds);
-      m_locationFeedback.setLocation(locationFeedbackLocation);
-    }
-  }
-
-  private Point getLocationHintLocation(Rectangle widgetBounds) {
-    return widgetBounds.getLocation().getTranslated(-30, -25);
-  }
-
-  /**
-   * Return string that should be used in size hint for given size in pixels. Usually it returns
-   * just Integer.toString(), but some layouts, for example GWT AbsolutePanel support not only
-   * pixels, but also inches, centimeters, etc. We keep size units for such layouts, so want to show
-   * user size in current units, not in plain pixels.
-   *
-   * @param editPart
-   *          An {@link EditPart} which is currently resizing
-   * @param x
-   *          A current width of <code>editPart</code>
-   * @param y
-   *          A current height of <code>editPart</code>
-   * @return string representing current size of component
-   */
-  private String getSizeHintString(EditPart editPart, int width, int height) {
-    return MessageFormat.format("{0} x {1}", width, height);
-  }
-
-  /**
-   * Return string representing the current component location during moving
-   *
-   * @param editPart
-   *          An {@link EditPart} which is currently moving
-   * @param x
-   *          A current x location of <code>editPart</code>
-   * @param y
-   *          A current y location of <code>editPart</code>
-   * @return string representing the current component location during moving
-   */
-  private String getLocationHintText(EditPart editPart, int x, int y) {
-    return MessageFormat.format("{0} x {1}", x, y);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Move command
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Command getMoveCommand(ChangeBoundsRequest request) {
-    return m_moveListener.getCommand();
-  }
-
-  private class MoveListener implements ISnapPointsListener {
-    private CompoundEditCommand m_command;
-
-    public Command getCommand() {
-      return m_command;
-    }
-
-    @Override
-    public void boundsChanged(Rectangle bounds,
-        final List<? extends IAbstractComponentInfo> components,
-        SnapPoint[] snapPoints,
-        final int[] directions) {
-      m_command = new CompoundEditCommand(m_layout);
-      for (int i = 0; i < snapPoints.length; i++) {
-        SnapPoint snapPoint = snapPoints[i];
-        if (snapPoint != null) {
-          m_command.add(snapPoint.getCommand());
-        } else {
-          final int moveDirection = directions[i];
-          final boolean isHorizontal = i == 0;
-          EditCommand command =
-              new FormLayoutSnapPointsProvider.MoveFreelyCommand(m_layout,
-                  bounds,
-                  components,
-                  moveDirection,
-                  isHorizontal,
-                  m_visualDataProvider);
-          m_command.add(command);
-        }
-      }
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Helpers/Misc
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if move/resize hint feedback enabled for the layout
-   */
-  private boolean isShowTextFeedback() {
-    return true;
-  }
-
-  private List<IAbstractComponentInfo> getAllComponents() {
-    List<IAbstractComponentInfo> components = Lists.newArrayList();
-    components.addAll(m_layout.getComposite().getChildrenControls());
-    return components;
-  }
-
-  private void translateModelToFeedback(Translatable t) {
-    PolicyUtils.translateModelToFeedback(this, t);
-    t.performTranslate(m_visualDataProvider.getClientAreaOffset());
-  }
-
-  private void translateAbsoluteToModel(Translatable t) {
-    PolicyUtils.translateAbsoluteToModel(this, t);
-    t.performTranslate(m_visualDataProvider.getClientAreaOffset().getNegated());
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IHeadersProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private FormHeaderLayoutEditPolicy m_headersPolicyHorizontal;
-  private FormHeaderLayoutEditPolicy m_headersPolicyVertical;
-
-  @Override
-  public EditPart createHeaderEditPart(boolean isHorizontal, Object model) {
-    return new FormHeaderEditPart(m_layout, model, isHorizontal, getHostFigure());
-  }
-
-  @Override
-  public void buildContextMenu(IMenuManager manager, boolean isHorizontal) {
-    FormHeaderLayoutEditPolicy headersPolicy =
-        isHorizontal ? m_headersPolicyHorizontal : m_headersPolicyVertical;
-    headersPolicy.buildContextMenu(manager);
-  }
-
-  @Override
-  public LayoutEditPolicy getContainerLayoutPolicy(boolean isHorizontal) {
-    FormHeaderLayoutEditPolicy headersPolicy =
-        new FormHeaderLayoutEditPolicy(m_layout, this, isHorizontal);
-    if (isHorizontal) {
-      m_headersPolicyHorizontal = headersPolicy;
-    } else {
-      m_headersPolicyVertical = headersPolicy;
-    }
-    return headersPolicy;
-  }
-
-  @Override
-  public List<?> getHeaders(boolean isHorizontal) {
-    FormLayoutPreferences preferences = m_layout.getPreferences();
-    List<Integer> values =
-        isHorizontal ? preferences.getHorizontalPercents() : preferences.getVerticalPercents();
-    List<FormLayoutPreferences.PercentsInfo> results = Lists.newArrayList();
-    for (Integer percent : values) {
-      results.add(new FormLayoutPreferences.PercentsInfo(percent));
-    }
-    return results;
-  }
-
-  @Override
-  public void handleDoubleClick(boolean isHorizontal) {
-  }
+implements
+IFeedbackProxy,
+IHeadersProvider {
+	private final FormLayoutInfo m_layout;
+	private final FormLayoutVisualDataProvider m_visualDataProvider;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FormLayoutEditPolicy2(FormLayoutInfo layout) {
+		super();
+		m_layout = layout;
+		m_visualDataProvider = new FormLayoutVisualDataProvider(layout);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Decorate Child
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void decorateChild(EditPart child) {
+		if (m_layout.getControls().contains(child.getModel())) {
+			child.installEditPolicy(EditPolicy.SELECTION_ROLE, new FormSelectionEditPolicy2(m_layout));
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Requests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected ILayoutRequestValidator getRequestValidator() {
+		return ControlsLayoutRequestValidator.INSTANCE;
+	}
+
+	@Override
+	protected String getResizeRequestType() {
+		return AbsoluteBasedSelectionEditPolicy.REQ_RESIZE;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Feedbacks
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private int m_frozenYValue;
+	private Figure m_createFeedback;
+	private TextFeedback m_locationFeedback;
+	private TextFeedback m_sizeFeedback;
+	private SnapPoints m_snapPoints;
+
+	@Override
+	protected void showLayoutTargetFeedback(Request request) {
+		// prepare snapping
+		if (request instanceof ChangeBoundsRequest) {
+			getMoveSnapPoints();
+			showMoveFeedback((ChangeBoundsRequest) request);
+		} else if (request instanceof CreateRequest) {
+		} else if (request instanceof PasteRequest) {
+		}
+	}
+
+	@Override
+	protected void eraseLayoutTargetFeedback(Request request) {
+		if (m_snapPoints != null) {
+			m_snapPoints.removeFeedbacks();
+			m_snapPoints = null;
+		}
+		if (m_moveFeedback != null) {
+			removeFeedback(m_moveFeedback);
+			m_moveFeedback = null;
+		}
+		if (m_locationFeedback != null) {
+			m_locationFeedback.remove();
+			m_locationFeedback = null;
+		}
+		m_frozenYValue = 0;
+	}
+
+	private boolean isFreezeVerticalAxis(Request request) {
+		return request.isControlKeyPressed() && m_frozenYValue != 0;
+	}
+
+	private SnapPoints createSnapPoints(ISnapPointsListener listener) {
+		List<IAbstractComponentInfo> allComponents = getAllComponents();
+		FormLayoutSnapPointsProvider snapPointsProvider =
+				new FormLayoutSnapPointsProvider(m_layout, m_visualDataProvider, allComponents);
+		return new SnapPoints(m_visualDataProvider, this, snapPointsProvider, listener, allComponents);
+	}
+
+	/**
+	 * @return special layer above feedback layer for to add text feedbacks
+	 */
+	private Layer getTextFeedbackLayer() {
+		return getLayer(IEditPartViewer.FEEDBACK_LAYER_ABV_1);
+	}
+
+	/**
+	 * Creates line figure, translates given model coordinates into feedback and adds created line
+	 * into feedback layer
+	 */
+	protected final Polyline createLineFeedback(int x1, int y1, int x2, int y2) {
+		// prepare points
+		Point begin = new Point(x1, y1);
+		Point end = new Point(x2, y2);
+		translateModelToFeedback(begin);
+		translateModelToFeedback(end);
+		// create feedback
+		Polyline line = new Polyline();
+		line.addPoint(begin);
+		line.addPoint(end);
+		line.setLineStyle(SWT.LINE_DOT);
+		addFeedback(line);
+		return line;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IFeedbackProxy
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Figure addHorizontalFeedbackLine(int y, int x, int width) {
+		Polyline line = createLineFeedback(x, y, x + width, y);
+		line.setForeground(AbsolutePolicyUtils.COLOR_FEEDBACK);
+		return line;
+	}
+
+	@Override
+	public Figure addHorizontalMiddleLineFeedback(int y, int x, int width) {
+		Polyline line = createLineFeedback(x, y, x + width, y);
+		line.setForeground(AbsolutePolicyUtils.COLOR_FEEDBACK);
+		line.setLineStyle(SWT.LINE_DASH);
+		return line;
+	}
+
+	@Override
+	public Figure addOutlineFeedback(Rectangle bounds) {
+		// prepare bounds
+		Rectangle feedbackBounds = bounds.getCopy();
+		translateModelToFeedback(feedbackBounds);
+		// create feedback
+		Figure outline = new Figure();
+		outline.setBorder(new LineBorder(AbsolutePolicyUtils.COLOR_OUTLINE));
+		outline.setBounds(feedbackBounds);
+		addFeedback(outline);
+		return outline;
+	}
+
+	@Override
+	public Figure addVerticalFeedbackLine(int x, int y, int height) {
+		Polyline line = createLineFeedback(x, y, x, y + height);
+		line.setForeground(AbsolutePolicyUtils.COLOR_FEEDBACK);
+		return line;
+	}
+
+	@Override
+	public Figure addVerticalMiddleLineFeedback(int x, int y, int height) {
+		Polyline line = createLineFeedback(x, y, x, y + height);
+		line.setForeground(AbsolutePolicyUtils.COLOR_FEEDBACK);
+		line.setLineStyle(SWT.LINE_DASH);
+		return line;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Move
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Figure m_moveFeedback;
+	private MoveListener m_moveListener;
+
+	private void getMoveSnapPoints() {
+		if (m_snapPoints == null) {
+			m_moveListener = new MoveListener();
+			m_snapPoints = createSnapPoints(m_moveListener);
+		}
+	}
+
+	private void showMoveFeedback(ChangeBoundsRequest request) {
+		// first of all remove an old feedback
+		if (m_moveFeedback != null) {
+			removeFeedback(m_moveFeedback);
+			m_moveFeedback = null;
+		}
+		// is this edit parts moved by using a keyboard
+		boolean isKeyboardMoving = isKeyboardMoving();
+		// some preparations
+		List<EditPart> editParts = request.getEditParts();
+		List<IAbstractComponentInfo> modelList = Lists.newArrayList();
+		Rectangle[] relativeBounds = new Rectangle[editParts.size()];
+		Rectangle widgetBounds;
+		// calculate model bounds and create move feedback
+		if (editParts.size() > 1) {
+			GraphicalEditPart firstEditPart = (GraphicalEditPart) editParts.get(0);
+			widgetBounds = new Rectangle(firstEditPart.getFigure().getBounds());
+			m_moveFeedback = new OutlineImageFigure(null);
+			//
+			for (EditPart editPart : editParts) {
+				IAbstractComponentInfo model = (IAbstractComponentInfo) editPart.getModel();
+				Rectangle bounds = ((GraphicalEditPart) editPart).getFigure().getBounds();
+				//
+				widgetBounds.union(bounds);
+				modelList.add(model);
+				//
+				m_moveFeedback.add(new OutlineImageFigure(model.getImage(),
+						AbsolutePolicyUtils.COLOR_OUTLINE), bounds);
+			}
+			//
+			List<Figure> moveFeedbackFigures = m_moveFeedback.getChildren();
+			for (int i = 0; i < moveFeedbackFigures.size(); ++i) {
+				Figure figure = moveFeedbackFigures.get(i);
+				figure.getBounds().performTranslate(-widgetBounds.x, -widgetBounds.y);
+				relativeBounds[i] = figure.getBounds().getCopy();
+			}
+		} else {
+			EditPart editPart = editParts.get(0);
+			IAbstractComponentInfo model = (IAbstractComponentInfo) editPart.getModel();
+			//
+			widgetBounds = ((GraphicalEditPart) editPart).getFigure().getBounds().getCopy();
+			relativeBounds[0] = new Rectangle(new Point(), widgetBounds.getSize());
+			modelList.add(model);
+			//
+			m_moveFeedback = new OutlineImageFigure(model.getImage(), AbsolutePolicyUtils.COLOR_OUTLINE);
+		}
+		// make figure bounds as absolute
+		FigureUtils.translateFigureToAbsolute2(
+				((GraphicalEditPart) editParts.get(0)).getFigure().getParent(),
+				widgetBounds);
+		// translate feedback coordinates into model coordinates (ex., SWT shell control
+		// has caption and border area, so (0,0) point offset is border left and caption
+		// size, i.e. insets.
+		translateAbsoluteToModel(widgetBounds);
+		// see where the widget(s) moved
+		Point moveDelta = request.getMoveDelta();
+		widgetBounds.x = widgetBounds.x + moveDelta.x;
+		if (isFreezeVerticalAxis(request)) {
+			widgetBounds.y = m_frozenYValue;
+		} else {
+			widgetBounds.y = m_frozenYValue = widgetBounds.y + moveDelta.y;
+		}
+		addFeedback(m_moveFeedback);
+		// Case 42313
+		Point moveLocation = isKeyboardMoving() ? moveDelta : request.getLocation();
+		// do drag
+		m_snapPoints.processBounds(moveLocation, modelList, widgetBounds, 0);
+		// update move feedback: translate bounds back into feedback coordinates, apply bounds for feedback figure
+		Rectangle feedbackBounds = widgetBounds.getCopy();
+		translateModelToFeedback(feedbackBounds);
+		m_moveFeedback.setBounds(feedbackBounds);
+		// create text feedback
+		if (m_locationFeedback == null && isShowTextFeedback() && !isKeyboardMoving) {
+			m_locationFeedback = new TextFeedback(getTextFeedbackLayer());
+			m_locationFeedback.add();
+		}
+		// update text feedback
+		if (m_locationFeedback != null) {
+			EditPart firstEditPart = editParts.get(0);
+			m_locationFeedback.setText(getLocationHintText(firstEditPart, widgetBounds.x, widgetBounds.y));
+			Point locationFeedbackLocation = getLocationHintLocation(feedbackBounds);
+			m_locationFeedback.setLocation(locationFeedbackLocation);
+		}
+	}
+
+	private Point getLocationHintLocation(Rectangle widgetBounds) {
+		return widgetBounds.getLocation().getTranslated(-30, -25);
+	}
+
+	/**
+	 * Return string that should be used in size hint for given size in pixels. Usually it returns
+	 * just Integer.toString(), but some layouts, for example GWT AbsolutePanel support not only
+	 * pixels, but also inches, centimeters, etc. We keep size units for such layouts, so want to show
+	 * user size in current units, not in plain pixels.
+	 *
+	 * @param editPart
+	 *          An {@link EditPart} which is currently resizing
+	 * @param x
+	 *          A current width of <code>editPart</code>
+	 * @param y
+	 *          A current height of <code>editPart</code>
+	 * @return string representing current size of component
+	 */
+	private String getSizeHintString(EditPart editPart, int width, int height) {
+		return MessageFormat.format("{0} x {1}", width, height);
+	}
+
+	/**
+	 * Return string representing the current component location during moving
+	 *
+	 * @param editPart
+	 *          An {@link EditPart} which is currently moving
+	 * @param x
+	 *          A current x location of <code>editPart</code>
+	 * @param y
+	 *          A current y location of <code>editPart</code>
+	 * @return string representing the current component location during moving
+	 */
+	private String getLocationHintText(EditPart editPart, int x, int y) {
+		return MessageFormat.format("{0} x {1}", x, y);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Move command
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Command getMoveCommand(ChangeBoundsRequest request) {
+		return m_moveListener.getCommand();
+	}
+
+	private class MoveListener implements ISnapPointsListener {
+		private CompoundEditCommand m_command;
+
+		public Command getCommand() {
+			return m_command;
+		}
+
+		@Override
+		public void boundsChanged(Rectangle bounds,
+				final List<? extends IAbstractComponentInfo> components,
+				SnapPoint[] snapPoints,
+				final int[] directions) {
+			m_command = new CompoundEditCommand(m_layout);
+			for (int i = 0; i < snapPoints.length; i++) {
+				SnapPoint snapPoint = snapPoints[i];
+				if (snapPoint != null) {
+					m_command.add(snapPoint.getCommand());
+				} else {
+					final int moveDirection = directions[i];
+					final boolean isHorizontal = i == 0;
+					EditCommand command =
+							new FormLayoutSnapPointsProvider.MoveFreelyCommand(m_layout,
+									bounds,
+									components,
+									moveDirection,
+									isHorizontal,
+									m_visualDataProvider);
+					m_command.add(command);
+				}
+			}
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Helpers/Misc
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if move/resize hint feedback enabled for the layout
+	 */
+	private boolean isShowTextFeedback() {
+		return true;
+	}
+
+	private List<IAbstractComponentInfo> getAllComponents() {
+		List<IAbstractComponentInfo> components = Lists.newArrayList();
+		components.addAll(m_layout.getComposite().getChildrenControls());
+		return components;
+	}
+
+	private void translateModelToFeedback(Translatable t) {
+		PolicyUtils.translateModelToFeedback(this, t);
+		t.performTranslate(m_visualDataProvider.getClientAreaOffset());
+	}
+
+	private void translateAbsoluteToModel(Translatable t) {
+		PolicyUtils.translateAbsoluteToModel(this, t);
+		t.performTranslate(m_visualDataProvider.getClientAreaOffset().getNegated());
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IHeadersProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private FormHeaderLayoutEditPolicy m_headersPolicyHorizontal;
+	private FormHeaderLayoutEditPolicy m_headersPolicyVertical;
+
+	@Override
+	public EditPart createHeaderEditPart(boolean isHorizontal, Object model) {
+		return new FormHeaderEditPart(m_layout, model, isHorizontal, getHostFigure());
+	}
+
+	@Override
+	public void buildContextMenu(IMenuManager manager, boolean isHorizontal) {
+		FormHeaderLayoutEditPolicy headersPolicy =
+				isHorizontal ? m_headersPolicyHorizontal : m_headersPolicyVertical;
+		headersPolicy.buildContextMenu(manager);
+	}
+
+	@Override
+	public LayoutEditPolicy getContainerLayoutPolicy(boolean isHorizontal) {
+		FormHeaderLayoutEditPolicy headersPolicy =
+				new FormHeaderLayoutEditPolicy(m_layout, this, isHorizontal);
+		if (isHorizontal) {
+			m_headersPolicyHorizontal = headersPolicy;
+		} else {
+			m_headersPolicyVertical = headersPolicy;
+		}
+		return headersPolicy;
+	}
+
+	@Override
+	public List<?> getHeaders(boolean isHorizontal) {
+		FormLayoutPreferences preferences = m_layout.getPreferences();
+		List<Integer> values =
+				isHorizontal ? preferences.getHorizontalPercents() : preferences.getVerticalPercents();
+		List<FormLayoutPreferences.PercentsInfo> results = Lists.newArrayList();
+		for (Integer percent : values) {
+			results.add(new FormLayoutPreferences.PercentsInfo(percent));
+		}
+		return results;
+	}
+
+	@Override
+	public void handleDoubleClick(boolean isHorizontal) {
+	}
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/form/FormLayoutEditPolicyClassic.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/form/FormLayoutEditPolicyClassic.java
index 55a7b7978..0602d80d9 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/form/FormLayoutEditPolicyClassic.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/form/FormLayoutEditPolicyClassic.java
@@ -80,7 +80,7 @@
  * @author mitin_aa
  */
 public class FormLayoutEditPolicyClassic<C extends IControlInfo> extends KeyboardMovingLayoutEditPolicy
-		implements IHeadersProvider {
+implements IHeadersProvider {
 	private static final int EXTENSION = 8;
 	// model
 	private final IFormLayoutInfo<C> layout;
@@ -539,13 +539,13 @@ private void showPasteFeedback(PasteRequest request) throws Exception {
 		// prepare create command
 		createCommand = new CompoundEditCommand(layoutModel);
 		createCommand
-				.add(GlobalState.getPasteRequestProcessor().getPasteCommand(request, new IPasteComponentProcessor() {
-					@Override
-					@SuppressWarnings("unchecked")
-					public void process(Object component) throws Exception {
-						layout.commandCreate((C) component, null);
-					}
-				}));
+		.add(GlobalState.getPasteRequestProcessor().getPasteCommand(request, new IPasteComponentProcessor() {
+			@Override
+			@SuppressWarnings("unchecked")
+			public void process(Object component) throws Exception {
+				layout.commandCreate((C) component, null);
+			}
+		}));
 		for (int i = 0; i < pastingComponents.size(); ++i) {
 			final C pasted = getControlFromList(pastingComponents, i);
 			final Dimension size = new Dimension(relativeBounds[i].width, relativeBounds[i].height);
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/form/FormLayoutSnapPointsProvider.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/form/FormLayoutSnapPointsProvider.java
index ec11f3dd7..9b726ea98 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/form/FormLayoutSnapPointsProvider.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/form/FormLayoutSnapPointsProvider.java
@@ -39,247 +39,247 @@
  * @author mitin_aa
  */
 final class FormLayoutSnapPointsProvider<C extends IControlInfo>
-    extends
-      SnapPoints.DefaultSnapPoints {
-  private final FormLayoutVisualDataProvider<C> m_vdProvider;
-  private final List<? extends IAbstractComponentInfo> m_allWidgets;
-  private final IFormLayoutInfo<C> m_layout;
+extends
+SnapPoints.DefaultSnapPoints {
+	private final FormLayoutVisualDataProvider<C> m_vdProvider;
+	private final List<? extends IAbstractComponentInfo> m_allWidgets;
+	private final IFormLayoutInfo<C> m_layout;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FormLayoutSnapPointsProvider(IFormLayoutInfo<C> layout,
-      FormLayoutVisualDataProvider<C> visualDataProvider,
-      List<? extends IAbstractComponentInfo> allWidgets) {
-    super(visualDataProvider, allWidgets);
-    m_layout = layout;
-    m_vdProvider = visualDataProvider;
-    m_allWidgets = allWidgets;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FormLayoutSnapPointsProvider(IFormLayoutInfo<C> layout,
+			FormLayoutVisualDataProvider<C> visualDataProvider,
+			List<? extends IAbstractComponentInfo> allWidgets) {
+		super(visualDataProvider, allWidgets);
+		m_layout = layout;
+		m_vdProvider = visualDataProvider;
+		m_allWidgets = allWidgets;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ISnapPointsProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public List<SnapPoint> forComponent(IAbstractComponentInfo target, boolean isHorizontal) {
-    List<SnapPoint> pts = Lists.newArrayList();
-    int lSide = PlacementUtils.getSide(isHorizontal, true);
-    int tSide = PlacementUtils.getSide(isHorizontal, false);
-    if (isHorizontal) {
-      // snap to child on left side with indent
-      SnapPoint snapPoint = new IndentedComponentSnapPoint(m_vdProvider, target);
-      pts.add(snapPoint);
-    } else {
-      // baseline snap
-      SnapPoint snapPoint = new BaselineComponentSnapPoint(m_vdProvider, target);
-      pts.add(snapPoint);
-    }
-    // snap to child on leading side with gap
-    {
-      SnapPoint snapPoint =
-          new ComponentSnapPoint(m_vdProvider, target, lSide, PlacementInfo.TRAILING, true);
-      snapPoint.setCommand(new MoveToComponentCommand<C>(m_layout, snapPoint));
-      pts.add(snapPoint);
-    }
-    // snap to child on leading side
-    {
-      ComponentSnapPoint snapPoint =
-          new ComponentSnapPoint(m_vdProvider, target, lSide, PlacementInfo.LEADING);
-      snapPoint.setCommand(new MoveToComponentCommand<C>(m_layout, snapPoint));
-      pts.add(snapPoint);
-    }
-    // snap to child on trailing side with gap
-    {
-      SnapPoint snapPoint =
-          new ComponentSnapPoint(m_vdProvider, target, tSide, PlacementInfo.LEADING, true);
-      snapPoint.setCommand(new MoveToComponentCommand<C>(m_layout, snapPoint));
-      pts.add(snapPoint);
-    }
-    // snap to child on trailing side
-    {
-      SnapPoint snapPoint =
-          new ComponentSnapPoint(m_vdProvider, target, tSide, PlacementInfo.TRAILING);
-      snapPoint.setCommand(new MoveToComponentCommand<C>(m_layout, snapPoint));
-      pts.add(snapPoint);
-    }
-    return pts;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ISnapPointsProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public List<SnapPoint> forComponent(IAbstractComponentInfo target, boolean isHorizontal) {
+		List<SnapPoint> pts = Lists.newArrayList();
+		int lSide = PlacementUtils.getSide(isHorizontal, true);
+		int tSide = PlacementUtils.getSide(isHorizontal, false);
+		if (isHorizontal) {
+			// snap to child on left side with indent
+			SnapPoint snapPoint = new IndentedComponentSnapPoint(m_vdProvider, target);
+			pts.add(snapPoint);
+		} else {
+			// baseline snap
+			SnapPoint snapPoint = new BaselineComponentSnapPoint(m_vdProvider, target);
+			pts.add(snapPoint);
+		}
+		// snap to child on leading side with gap
+		{
+			SnapPoint snapPoint =
+					new ComponentSnapPoint(m_vdProvider, target, lSide, PlacementInfo.TRAILING, true);
+			snapPoint.setCommand(new MoveToComponentCommand<C>(m_layout, snapPoint));
+			pts.add(snapPoint);
+		}
+		// snap to child on leading side
+		{
+			ComponentSnapPoint snapPoint =
+					new ComponentSnapPoint(m_vdProvider, target, lSide, PlacementInfo.LEADING);
+			snapPoint.setCommand(new MoveToComponentCommand<C>(m_layout, snapPoint));
+			pts.add(snapPoint);
+		}
+		// snap to child on trailing side with gap
+		{
+			SnapPoint snapPoint =
+					new ComponentSnapPoint(m_vdProvider, target, tSide, PlacementInfo.LEADING, true);
+			snapPoint.setCommand(new MoveToComponentCommand<C>(m_layout, snapPoint));
+			pts.add(snapPoint);
+		}
+		// snap to child on trailing side
+		{
+			SnapPoint snapPoint =
+					new ComponentSnapPoint(m_vdProvider, target, tSide, PlacementInfo.TRAILING);
+			snapPoint.setCommand(new MoveToComponentCommand<C>(m_layout, snapPoint));
+			pts.add(snapPoint);
+		}
+		return pts;
+	}
 
-  @Override
-  public List<SnapPoint> forContainer(boolean isHorizontal) {
-    List<SnapPoint> pts = Lists.newArrayList();
-    int leadingSide = PlacementUtils.getSide(isHorizontal, true);
-    int trailingSide = PlacementUtils.getSide(isHorizontal, false);
-    // snap to parent at leading side with gap
-    {
-      SnapPoint snapPoint = new ContainerSnapPoint(m_vdProvider, leadingSide, true);
-      snapPoint.setCommand(new MoveToContainerCommand<C>(m_layout, snapPoint));
-      pts.add(snapPoint);
-    }
-    // snap to parent at leading side
-    {
-      SnapPoint snapPoint = new ContainerSnapPoint(m_vdProvider, leadingSide);
-      snapPoint.setCommand(new MoveToContainerCommand<C>(m_layout, snapPoint));
-      pts.add(snapPoint);
-    }
-    // snap to parent at trailing side with gap
-    {
-      SnapPoint snapPoint = new ContainerSnapPoint(m_vdProvider, trailingSide, true);
-      snapPoint.setCommand(new MoveToContainerCommand<C>(m_layout, snapPoint));
-      pts.add(snapPoint);
-    }
-    // snap to parent at trailing side
-    {
-      SnapPoint snapPoint = new ContainerSnapPoint(m_vdProvider, trailingSide);
-      snapPoint.setCommand(new MoveToContainerCommand<C>(m_layout, snapPoint));
-      pts.add(snapPoint);
-    }
-    // 'same size'
-    {
-      SnapPoint snapPoint = new SameSizeSnapPoint(m_vdProvider, m_allWidgets, leadingSide);
-      pts.add(snapPoint);
-    }
-    {
-      SnapPoint snapPoint = new SameSizeSnapPoint(m_vdProvider, m_allWidgets, trailingSide);
-      pts.add(snapPoint);
-    }
-    // percentage
-    for (Integer percent : m_vdProvider.getPercentsValues(isHorizontal)) {
-      {
-        SnapPoint snapPoint = new PercentageSnapPoint<C>(m_vdProvider, leadingSide, percent, true);
-        snapPoint.setCommand(new MoveToPercentCommand<C>(m_layout, snapPoint));
-        pts.add(snapPoint);
-      }
-      {
-        SnapPoint snapPoint = new PercentageSnapPoint<C>(m_vdProvider, leadingSide, percent);
-        snapPoint.setCommand(new MoveToPercentCommand<C>(m_layout, snapPoint));
-        pts.add(snapPoint);
-      }
-      {
-        SnapPoint snapPoint = new PercentageSnapPoint<C>(m_vdProvider, trailingSide, percent, true);
-        snapPoint.setCommand(new MoveToPercentCommand<C>(m_layout, snapPoint));
-        pts.add(snapPoint);
-      }
-      {
-        SnapPoint snapPoint = new PercentageSnapPoint<C>(m_vdProvider, trailingSide, percent);
-        snapPoint.setCommand(new MoveToPercentCommand<C>(m_layout, snapPoint));
-        pts.add(snapPoint);
-      }
-    }
-    return pts;
-  }
+	@Override
+	public List<SnapPoint> forContainer(boolean isHorizontal) {
+		List<SnapPoint> pts = Lists.newArrayList();
+		int leadingSide = PlacementUtils.getSide(isHorizontal, true);
+		int trailingSide = PlacementUtils.getSide(isHorizontal, false);
+		// snap to parent at leading side with gap
+		{
+			SnapPoint snapPoint = new ContainerSnapPoint(m_vdProvider, leadingSide, true);
+			snapPoint.setCommand(new MoveToContainerCommand<C>(m_layout, snapPoint));
+			pts.add(snapPoint);
+		}
+		// snap to parent at leading side
+		{
+			SnapPoint snapPoint = new ContainerSnapPoint(m_vdProvider, leadingSide);
+			snapPoint.setCommand(new MoveToContainerCommand<C>(m_layout, snapPoint));
+			pts.add(snapPoint);
+		}
+		// snap to parent at trailing side with gap
+		{
+			SnapPoint snapPoint = new ContainerSnapPoint(m_vdProvider, trailingSide, true);
+			snapPoint.setCommand(new MoveToContainerCommand<C>(m_layout, snapPoint));
+			pts.add(snapPoint);
+		}
+		// snap to parent at trailing side
+		{
+			SnapPoint snapPoint = new ContainerSnapPoint(m_vdProvider, trailingSide);
+			snapPoint.setCommand(new MoveToContainerCommand<C>(m_layout, snapPoint));
+			pts.add(snapPoint);
+		}
+		// 'same size'
+		{
+			SnapPoint snapPoint = new SameSizeSnapPoint(m_vdProvider, m_allWidgets, leadingSide);
+			pts.add(snapPoint);
+		}
+		{
+			SnapPoint snapPoint = new SameSizeSnapPoint(m_vdProvider, m_allWidgets, trailingSide);
+			pts.add(snapPoint);
+		}
+		// percentage
+		for (Integer percent : m_vdProvider.getPercentsValues(isHorizontal)) {
+			{
+				SnapPoint snapPoint = new PercentageSnapPoint<C>(m_vdProvider, leadingSide, percent, true);
+				snapPoint.setCommand(new MoveToPercentCommand<C>(m_layout, snapPoint));
+				pts.add(snapPoint);
+			}
+			{
+				SnapPoint snapPoint = new PercentageSnapPoint<C>(m_vdProvider, leadingSide, percent);
+				snapPoint.setCommand(new MoveToPercentCommand<C>(m_layout, snapPoint));
+				pts.add(snapPoint);
+			}
+			{
+				SnapPoint snapPoint = new PercentageSnapPoint<C>(m_vdProvider, trailingSide, percent, true);
+				snapPoint.setCommand(new MoveToPercentCommand<C>(m_layout, snapPoint));
+				pts.add(snapPoint);
+			}
+			{
+				SnapPoint snapPoint = new PercentageSnapPoint<C>(m_vdProvider, trailingSide, percent);
+				snapPoint.setCommand(new MoveToPercentCommand<C>(m_layout, snapPoint));
+				pts.add(snapPoint);
+			}
+		}
+		return pts;
+	}
 
-  private static final class MoveToContainerCommand<C extends IControlInfo>
-      extends
-        SnapPointCommand {
-    private final IFormLayoutInfo<C> m_layout;
+	private static final class MoveToContainerCommand<C extends IControlInfo>
+	extends
+	SnapPointCommand {
+		private final IFormLayoutInfo<C> m_layout;
 
-    public MoveToContainerCommand(IFormLayoutInfo<C> layoutInfo, SnapPoint snapPoint) {
-      super(layoutInfo.getUnderlyingModel(), snapPoint);
-      m_layout = layoutInfo;
-    }
+		public MoveToContainerCommand(IFormLayoutInfo<C> layoutInfo, SnapPoint snapPoint) {
+			super(layoutInfo.getUnderlyingModel(), snapPoint);
+			m_layout = layoutInfo;
+		}
 
-    @Override
-    protected void executeEdit() throws Exception {
-      SnapPoint snapPoint = getSnapPoint();
-      int value = snapPoint.getValue();
-      FormLayoutInfoImplAutomatic<C> impl = (FormLayoutInfoImplAutomatic<C>) m_layout.getImpl();
-      impl.command_moveToContainer(
-          snapPoint.getWorkingSet(),
-          snapPoint.getNearestBeingSnapped(),
-          snapPoint.getSide(),
-          value);
-    }
-  }
-  private static final class MoveToComponentCommand<C extends IControlInfo>
-      extends
-        SnapPointCommand {
-    private final IFormLayoutInfo<C> m_layout;
+		@Override
+		protected void executeEdit() throws Exception {
+			SnapPoint snapPoint = getSnapPoint();
+			int value = snapPoint.getValue();
+			FormLayoutInfoImplAutomatic<C> impl = (FormLayoutInfoImplAutomatic<C>) m_layout.getImpl();
+			impl.command_moveToContainer(
+					snapPoint.getWorkingSet(),
+					snapPoint.getNearestBeingSnapped(),
+					snapPoint.getSide(),
+					value);
+		}
+	}
+	private static final class MoveToComponentCommand<C extends IControlInfo>
+	extends
+	SnapPointCommand {
+		private final IFormLayoutInfo<C> m_layout;
 
-    public MoveToComponentCommand(IFormLayoutInfo<C> layoutInfo, SnapPoint snapPoint) {
-      super(layoutInfo.getUnderlyingModel(), snapPoint);
-      m_layout = layoutInfo;
-    }
+		public MoveToComponentCommand(IFormLayoutInfo<C> layoutInfo, SnapPoint snapPoint) {
+			super(layoutInfo.getUnderlyingModel(), snapPoint);
+			m_layout = layoutInfo;
+		}
 
-    @Override
-    protected void executeEdit() throws Exception {
-      ComponentSnapPoint snapPoint = (ComponentSnapPoint) getSnapPoint();
-      int targetSide = snapPoint.getSide();
-      int gap = snapPoint.getGap();
-      int sourceSide = gap > 0 ? PlacementUtils.getOppositeSide(targetSide) : targetSide;
-      FormLayoutInfoImplAutomatic<C> impl = (FormLayoutInfoImplAutomatic<C>) m_layout.getImpl();
-      impl.command_moveAsAttachedToComponent(
-          snapPoint.getWorkingSet(),
-          snapPoint.getNearestBeingSnapped(),
-          sourceSide,
-          snapPoint.getComponent(),
-          targetSide,
-          gap);
-    }
-  }
-  private static final class MoveToPercentCommand<C extends IControlInfo> extends SnapPointCommand {
-    private final IFormLayoutInfo<C> m_layout;
+		@Override
+		protected void executeEdit() throws Exception {
+			ComponentSnapPoint snapPoint = (ComponentSnapPoint) getSnapPoint();
+			int targetSide = snapPoint.getSide();
+			int gap = snapPoint.getGap();
+			int sourceSide = gap > 0 ? PlacementUtils.getOppositeSide(targetSide) : targetSide;
+			FormLayoutInfoImplAutomatic<C> impl = (FormLayoutInfoImplAutomatic<C>) m_layout.getImpl();
+			impl.command_moveAsAttachedToComponent(
+					snapPoint.getWorkingSet(),
+					snapPoint.getNearestBeingSnapped(),
+					sourceSide,
+					snapPoint.getComponent(),
+					targetSide,
+					gap);
+		}
+	}
+	private static final class MoveToPercentCommand<C extends IControlInfo> extends SnapPointCommand {
+		private final IFormLayoutInfo<C> m_layout;
 
-    public MoveToPercentCommand(IFormLayoutInfo<C> layoutInfo, SnapPoint snapPoint) {
-      super(layoutInfo.getUnderlyingModel(), snapPoint);
-      m_layout = layoutInfo;
-    }
+		public MoveToPercentCommand(IFormLayoutInfo<C> layoutInfo, SnapPoint snapPoint) {
+			super(layoutInfo.getUnderlyingModel(), snapPoint);
+			m_layout = layoutInfo;
+		}
 
-    @Override
-    protected void executeEdit() throws Exception {
-      @SuppressWarnings("unchecked")
-      PercentageSnapPoint<C> snapPoint = (PercentageSnapPoint<C>) getSnapPoint();
-      FormLayoutInfoImplAutomatic<C> impl = (FormLayoutInfoImplAutomatic<C>) m_layout.getImpl();
-      impl.command_moveToPercent(
-          snapPoint.getWorkingSet(),
-          snapPoint.getNearestBeingSnapped(),
-          snapPoint.getSide(),
-          snapPoint.getPercent(),
-          snapPoint.getGap());
-    }
-  }
-  static final class MoveFreelyCommand<C extends IControlInfo> extends EditCommand {
-    private final List<? extends IAbstractComponentInfo> m_components;
-    private final int m_moveDirection;
-    private final boolean m_isHorizontal;
-    private final IFormLayoutInfo<C> m_layout;
-    private final IVisualDataProvider m_visualDataProvider;
-    private final Rectangle m_bounds;
+		@Override
+		protected void executeEdit() throws Exception {
+			@SuppressWarnings("unchecked")
+			PercentageSnapPoint<C> snapPoint = (PercentageSnapPoint<C>) getSnapPoint();
+			FormLayoutInfoImplAutomatic<C> impl = (FormLayoutInfoImplAutomatic<C>) m_layout.getImpl();
+			impl.command_moveToPercent(
+					snapPoint.getWorkingSet(),
+					snapPoint.getNearestBeingSnapped(),
+					snapPoint.getSide(),
+					snapPoint.getPercent(),
+					snapPoint.getGap());
+		}
+	}
+	static final class MoveFreelyCommand<C extends IControlInfo> extends EditCommand {
+		private final List<? extends IAbstractComponentInfo> m_components;
+		private final int m_moveDirection;
+		private final boolean m_isHorizontal;
+		private final IFormLayoutInfo<C> m_layout;
+		private final IVisualDataProvider m_visualDataProvider;
+		private final Rectangle m_bounds;
 
-    MoveFreelyCommand(IFormLayoutInfo<C> layoutInfo,
-        Rectangle bounds,
-        List<? extends IAbstractComponentInfo> components,
-        int moveDirection,
-        boolean isHorizontal,
-        IVisualDataProvider provider) {
-      super(layoutInfo);
-      m_layout = layoutInfo;
-      m_bounds = bounds;
-      m_components = components;
-      m_moveDirection = moveDirection;
-      m_isHorizontal = isHorizontal;
-      m_visualDataProvider = provider;
-    }
+		MoveFreelyCommand(IFormLayoutInfo<C> layoutInfo,
+				Rectangle bounds,
+				List<? extends IAbstractComponentInfo> components,
+				int moveDirection,
+				boolean isHorizontal,
+				IVisualDataProvider provider) {
+			super(layoutInfo);
+			m_layout = layoutInfo;
+			m_bounds = bounds;
+			m_components = components;
+			m_moveDirection = moveDirection;
+			m_isHorizontal = isHorizontal;
+			m_visualDataProvider = provider;
+		}
 
-    @Override
-    protected void executeEdit() throws Exception {
-      FormLayoutInfoImplAutomatic<C> impl = (FormLayoutInfoImplAutomatic<C>) m_layout.getImpl();
-      IAbstractComponentInfo nearestComponentToSide =
-          SnapPoint.getNearestComponentToSide(
-              m_components,
-              m_moveDirection,
-              m_isHorizontal,
-              m_visualDataProvider);
-      impl.command_moveFreely(
-          m_bounds,
-          m_components,
-          nearestComponentToSide,
-          m_moveDirection,
-          m_isHorizontal);
-    }
-  }
+		@Override
+		protected void executeEdit() throws Exception {
+			FormLayoutInfoImplAutomatic<C> impl = (FormLayoutInfoImplAutomatic<C>) m_layout.getImpl();
+			IAbstractComponentInfo nearestComponentToSide =
+					SnapPoint.getNearestComponentToSide(
+							m_components,
+							m_moveDirection,
+							m_isHorizontal,
+							m_visualDataProvider);
+			impl.command_moveFreely(
+					m_bounds,
+					m_components,
+					nearestComponentToSide,
+					m_moveDirection,
+					m_isHorizontal);
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/form/FormLayoutVisualDataProvider.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/form/FormLayoutVisualDataProvider.java
index 11fcc3c21..617ee409e 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/form/FormLayoutVisualDataProvider.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/form/FormLayoutVisualDataProvider.java
@@ -29,94 +29,94 @@
  * @coverage swt.gef.policy.form
  */
 final class FormLayoutVisualDataProvider<C extends IControlInfo> implements IVisualDataProvider {
-  private final IFormLayoutInfo<C> m_layout;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FormLayoutVisualDataProvider(IFormLayoutInfo<C> layout) {
-    m_layout = layout;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IVisualDataProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public int getBaseline(IAbstractComponentInfo component) {
-    return BaselineSupportHelper.getBaseline(component.getObject());
-  }
-
-  @Override
-  @SuppressWarnings("unchecked")
-  public Dimension getComponentPreferredSize(IAbstractComponentInfo component) {
-    C componentInfo = (C) component;
-    return componentInfo.getPreferredSize();
-  }
-
-  @Override
-  public Dimension getContainerSize() {
-    return m_layout.getContainerSize();
-  }
-
-  @Override
-  public boolean useGridSnapping() {
-    return false;
-  }
-
-  @Override
-  public boolean useFreeSnapping() {
-    return true;
-  }
-
-  @Override
-  public boolean isSuppressingSnapping() {
-    return false;
-  }
-
-  @Override
-  public int getGridStepY() {
-    return m_layout.getPreferences().getSnapSensitivity();
-  }
-
-  @Override
-  public int getGridStepX() {
-    return m_layout.getPreferences().getSnapSensitivity();
-  }
-
-  @Override
-  public int getContainerGapValue(IAbstractComponentInfo component, int direction) {
-    if (PlacementUtils.isHorizontalSide(direction)) {
-      return m_layout.getPreferences().getHorizontalContainerGap();
-    } else {
-      return m_layout.getPreferences().getVerticalContainerGap();
-    }
-  }
-
-  @Override
-  public int getComponentGapValue(IAbstractComponentInfo component1,
-      IAbstractComponentInfo component2,
-      int direction) {
-    return 6;
-  }
-
-  @Override
-  public Point getClientAreaOffset() {
-    return m_layout.getComposite().getClientArea().getLocation();
-  }
-
-  public int getPercentsGap(boolean isHorizontal) {
-    return isHorizontal
-        ? m_layout.getPreferences().getHorizontalPercentsGap()
-        : m_layout.getPreferences().getVerticalPercentsGap();
-  }
-
-  public List<Integer> getPercentsValues(boolean isHorizontal) {
-    return isHorizontal
-        ? m_layout.getPreferences().getHorizontalPercents()
-        : m_layout.getPreferences().getVerticalPercents();
-  }
+	private final IFormLayoutInfo<C> m_layout;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FormLayoutVisualDataProvider(IFormLayoutInfo<C> layout) {
+		m_layout = layout;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IVisualDataProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public int getBaseline(IAbstractComponentInfo component) {
+		return BaselineSupportHelper.getBaseline(component.getObject());
+	}
+
+	@Override
+	@SuppressWarnings("unchecked")
+	public Dimension getComponentPreferredSize(IAbstractComponentInfo component) {
+		C componentInfo = (C) component;
+		return componentInfo.getPreferredSize();
+	}
+
+	@Override
+	public Dimension getContainerSize() {
+		return m_layout.getContainerSize();
+	}
+
+	@Override
+	public boolean useGridSnapping() {
+		return false;
+	}
+
+	@Override
+	public boolean useFreeSnapping() {
+		return true;
+	}
+
+	@Override
+	public boolean isSuppressingSnapping() {
+		return false;
+	}
+
+	@Override
+	public int getGridStepY() {
+		return m_layout.getPreferences().getSnapSensitivity();
+	}
+
+	@Override
+	public int getGridStepX() {
+		return m_layout.getPreferences().getSnapSensitivity();
+	}
+
+	@Override
+	public int getContainerGapValue(IAbstractComponentInfo component, int direction) {
+		if (PlacementUtils.isHorizontalSide(direction)) {
+			return m_layout.getPreferences().getHorizontalContainerGap();
+		} else {
+			return m_layout.getPreferences().getVerticalContainerGap();
+		}
+	}
+
+	@Override
+	public int getComponentGapValue(IAbstractComponentInfo component1,
+			IAbstractComponentInfo component2,
+			int direction) {
+		return 6;
+	}
+
+	@Override
+	public Point getClientAreaOffset() {
+		return m_layout.getComposite().getClientArea().getLocation();
+	}
+
+	public int getPercentsGap(boolean isHorizontal) {
+		return isHorizontal
+				? m_layout.getPreferences().getHorizontalPercentsGap()
+						: m_layout.getPreferences().getVerticalPercentsGap();
+	}
+
+	public List<Integer> getPercentsValues(boolean isHorizontal) {
+		return isHorizontal
+				? m_layout.getPreferences().getHorizontalPercents()
+						: m_layout.getPreferences().getVerticalPercents();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/form/FormSelectionEditPolicy.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/form/FormSelectionEditPolicy.java
index 55e8f8b40..bdc57a626 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/form/FormSelectionEditPolicy.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/form/FormSelectionEditPolicy.java
@@ -28,43 +28,43 @@
  * @coverage swt.gef.policy.form
  */
 public final class FormSelectionEditPolicy<C extends IControlInfo>
-    extends
-      AbsoluteComplexSelectionEditPolicy {
-  protected final FormLayoutInfoImplAutomatic<C> m_layout;
+extends
+AbsoluteComplexSelectionEditPolicy {
+	protected final FormLayoutInfoImplAutomatic<C> m_layout;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FormSelectionEditPolicy(IFormLayoutInfo<C> layout) {
-    super((IAbsoluteLayoutCommands) layout.getImpl());
-    m_layout = (FormLayoutInfoImplAutomatic<C>) layout.getImpl();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FormSelectionEditPolicy(IFormLayoutInfo<C> layout) {
+		super((IAbsoluteLayoutCommands) layout.getImpl());
+		m_layout = (FormLayoutInfoImplAutomatic<C>) layout.getImpl();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Overrides
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Image getActionImage(String imageName) {
-    return FormLayoutInfoImplAutomatic.getImage(imageName);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Overrides
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Image getActionImage(String imageName) {
+		return FormLayoutInfoImplAutomatic.getImage(imageName);
+	}
 
-  @Override
-  protected ComponentAttachmentInfo getComponentAttachmentInfo(IAbstractComponentInfo widget,
-      int side) throws Exception {
-    return m_layout.getComponentAttachmentInfo(widget, side);
-  }
+	@Override
+	protected ComponentAttachmentInfo getComponentAttachmentInfo(IAbstractComponentInfo widget,
+			int side) throws Exception {
+		return m_layout.getComponentAttachmentInfo(widget, side);
+	}
 
-  @Override
-  protected void hideSelection() {
-    super.hideSelection();
-  }
+	@Override
+	protected void hideSelection() {
+		super.hideSelection();
+	}
 
-  @Override
-  protected void showSelection() {
-    super.showSelection();
-  }
+	@Override
+	protected void showSelection() {
+		super.showSelection();
+	}
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/form/FormSelectionEditPolicy2.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/form/FormSelectionEditPolicy2.java
index d65971b06..d96ede135 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/form/FormSelectionEditPolicy2.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/form/FormSelectionEditPolicy2.java
@@ -37,55 +37,55 @@
  * @coverage swt.gef.policy.form
  */
 public final class FormSelectionEditPolicy2 extends SelectionEditPolicy {
-  protected final FormLayoutInfoImplAutomatic m_layout;
+	protected final FormLayoutInfoImplAutomatic m_layout;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FormSelectionEditPolicy2(FormLayoutInfo layout) {
-    super();
-    m_layout = (FormLayoutInfoImplAutomatic) layout.getImpl();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FormSelectionEditPolicy2(FormLayoutInfo layout) {
+		super();
+		m_layout = (FormLayoutInfoImplAutomatic) layout.getImpl();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Handles
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected List<Handle> createSelectionHandles() {
-    List<Handle> handles = Lists.newArrayList();
-    MoveHandle moveHandle = new MoveHandle(getHost());
-    moveHandle.setBorder(new LineBorder(IColorConstants.lightBlue));
-    handles.add(moveHandle);
-    handles.add(createResizeHandle(IPositionConstants.NORTH));
-    handles.add(createResizeHandle(IPositionConstants.SOUTH));
-    handles.add(createResizeHandle(IPositionConstants.WEST));
-    handles.add(createResizeHandle(IPositionConstants.EAST));
-    handles.add(createResizeHandle(IPositionConstants.SOUTH_EAST));
-    handles.add(createResizeHandle(IPositionConstants.SOUTH_WEST));
-    handles.add(createResizeHandle(IPositionConstants.NORTH_WEST));
-    handles.add(createResizeHandle(IPositionConstants.NORTH_EAST));
-    return handles;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Handles
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected List<Handle> createSelectionHandles() {
+		List<Handle> handles = Lists.newArrayList();
+		MoveHandle moveHandle = new MoveHandle(getHost());
+		moveHandle.setBorder(new LineBorder(IColorConstants.lightBlue));
+		handles.add(moveHandle);
+		handles.add(createResizeHandle(IPositionConstants.NORTH));
+		handles.add(createResizeHandle(IPositionConstants.SOUTH));
+		handles.add(createResizeHandle(IPositionConstants.WEST));
+		handles.add(createResizeHandle(IPositionConstants.EAST));
+		handles.add(createResizeHandle(IPositionConstants.SOUTH_EAST));
+		handles.add(createResizeHandle(IPositionConstants.SOUTH_WEST));
+		handles.add(createResizeHandle(IPositionConstants.NORTH_WEST));
+		handles.add(createResizeHandle(IPositionConstants.NORTH_EAST));
+		return handles;
+	}
 
-  private Handle createResizeHandle(int direction) {
-    GraphicalEditPart owner = getHost();
-    ResizeHandle handle = new ResizeHandle(owner, direction) {
-      @Override
-      protected Color getBorderColor() {
-        return isPrimary() ? IColorConstants.white : IColorConstants.lightBlue;
-      }
+	private Handle createResizeHandle(int direction) {
+		GraphicalEditPart owner = getHost();
+		ResizeHandle handle = new ResizeHandle(owner, direction) {
+			@Override
+			protected Color getBorderColor() {
+				return isPrimary() ? IColorConstants.white : IColorConstants.lightBlue;
+			}
 
-      @Override
-      protected Color getFillColor() {
-        return isPrimary() ? IColorConstants.lightBlue : IColorConstants.white;
-      }
-    };
-    handle.setDragTrackerTool(new ResizeTracker(direction,
-        AbsoluteBasedSelectionEditPolicy.REQ_RESIZE));
-    return handle;
-  }
+			@Override
+			protected Color getFillColor() {
+				return isPrimary() ? IColorConstants.lightBlue : IColorConstants.white;
+			}
+		};
+		handle.setDragTrackerTool(new ResizeTracker(direction,
+				AbsoluteBasedSelectionEditPolicy.REQ_RESIZE));
+		return handle;
+	}
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/form/FormSelectionEditPolicyClassic.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/form/FormSelectionEditPolicyClassic.java
index 60b6beb7d..9076e6f8c 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/form/FormSelectionEditPolicyClassic.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/form/FormSelectionEditPolicyClassic.java
@@ -75,1431 +75,1431 @@
  * @author mitin_aa
  */
 public final class FormSelectionEditPolicyClassic<C extends IControlInfo>
-    extends
-      SelectionEditPolicy {
-  private static final int EXTENSION = 8;
-  private final Color baseColor = IColorConstants.blue;
-  private final Color offsetColor = IColorConstants.lightBlue;
-  private final IFormLayoutInfo<C> layoutInfo;
-  private final FormLayoutInfoImplClassic<C> layoutImpl;
-  private final AnchorFiguresClassic<C> anchorFigures;
-  private final ObjectInfo layoutModel;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FormSelectionEditPolicyClassic(IFormLayoutInfo<C> info) {
-    this.layoutInfo = info;
-    this.layoutModel = info.getUnderlyingModel();
-    this.layoutImpl = (FormLayoutInfoImplClassic<C>) layoutInfo.getImpl();
-    this.anchorFigures = new AnchorFiguresClassic<C>(this, layoutImpl);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Activate/deactivate
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void activate() {
-    super.activate();
-    installQuadrantHandler();
-  }
-
-  @Override
-  public void deactivate() {
-    super.deactivate();
-    uninstallQuadrantHandler();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Resize handles
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final Map<String, Figure> resizeFeedbacks = Maps.newHashMap();
-
-  @Override
-  protected List<Handle> createSelectionHandles() {
-    List<Handle> handles = Lists.newArrayList();
-    MoveHandle moveHandle = new MoveHandle(getHost());
-    moveHandle.setBorder(new LineBorder(IColorConstants.lightBlue));
-    handles.add(moveHandle);
-    handles.add(createResizeHandle(IPositionConstants.NORTH));
-    handles.add(createResizeHandle(IPositionConstants.SOUTH));
-    handles.add(createResizeHandle(IPositionConstants.WEST));
-    handles.add(createResizeHandle(IPositionConstants.EAST));
-    handles.add(createResizeHandle(IPositionConstants.SOUTH_EAST));
-    handles.add(createResizeHandle(IPositionConstants.SOUTH_WEST));
-    handles.add(createResizeHandle(IPositionConstants.NORTH_WEST));
-    handles.add(createResizeHandle(IPositionConstants.NORTH_EAST));
-    return handles;
-  }
-
-  private Handle createResizeHandle(int direction) {
-    GraphicalEditPart owner = getHost();
-    ResizeHandle handle = new ResizeHandle(owner, direction) {
-      @Override
-      protected Color getBorderColor() {
-        return isPrimary() ? IColorConstants.white : IColorConstants.lightBlue;
-      }
-
-      @Override
-      protected Color getFillColor() {
-        return isPrimary() ? IColorConstants.lightBlue : IColorConstants.white;
-      }
-    };
-    handle.setDragTrackerTool(new ResizeTracker(direction,
-        AbsoluteBasedSelectionEditPolicy.REQ_RESIZE));
-    return handle;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Source feedback and commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Figure sourceFeedbackFigure;
-
-  @Override
-  public boolean understandsRequest(Request request) {
-    return super.understandsRequest(request)
-        || request.getType() == AbsoluteBasedSelectionEditPolicy.REQ_RESIZE;
-  }
-
-  @Override
-  public void showSourceFeedback(final Request request) {
-    if (AbsoluteBasedSelectionEditPolicy.REQ_RESIZE.equals(request.getType())) {
-      ExecutionUtils.runLog(new RunnableEx() {
-        @Override
-        public void run() throws Exception {
-          showResizeFeedback((ChangeBoundsRequest) request);
-        }
-      });
-    }
-  }
-
-  @Override
-  public void eraseSourceFeedback(Request request) {
-    super.eraseSourceFeedback(request);
-    if (sourceFeedbackFigure != null) {
-      removeFeedback(sourceFeedbackFigure);
-      sourceFeedbackFigure = null;
-    }
-    removeResizeFeedbacks();
-    hideSizeHints();
-  }
-
-  private void showResizeFeedback(ChangeBoundsRequest request) throws Exception {
-    FormLayoutEditPolicyClassic<C> layout = getLayoutEditPolicy();
-    if (sourceFeedbackFigure == null) {
-      sourceFeedbackFigure = new Figure();
-      sourceFeedbackFigure.setBorder(new LineBorder(AbsolutePolicyUtils.COLOR_OUTLINE));
-      addFeedback(sourceFeedbackFigure);
-    }
-    int layoutMarginLeft = FormUtils.getLayoutMarginLeft(layoutInfo);
-    int layoutMarginTop = FormUtils.getLayoutMarginTop(layoutInfo);
-    // prepare values from preferences
-    int hMargin = layoutInfo.getPreferences().getHorizontalContainerGap();
-    int phMargin = layoutInfo.getPreferences().getHorizontalPercentsGap();
-    int hwMargin = layoutInfo.getPreferences().getHorizontalComponentGap();
-    int sens = layoutInfo.getPreferences().getSnapSensitivity();
-    int vMargin = layoutInfo.getPreferences().getVerticalContainerGap();
-    int pvMargin = layoutInfo.getPreferences().getVerticalPercentsGap();
-    int vwMargin = layoutInfo.getPreferences().getVerticalComponentGap();
-    // hide any old resize feedbacks (it is more easy to add each time new feedback than track old ones and change their positions)
-    removeResizeFeedbacks();
-    @SuppressWarnings("unchecked")
-    C control = (C) getHost().getModel();
-    Rectangle bounds = getControlModelBounds(control);
-    bounds.performTranslate(request.getMoveDelta());
-    bounds.resize(request.getSizeDelta());
-    Point requestLocation = request.getLocation();
-    Point location =
-        requestLocation == null
-            ? getControlModelBounds(control).getLocation()
-            : requestLocation.getCopy();
-    // find attachable controls
-    List<C> hAttachables = FormUtils.getAttachableControls(layoutInfo, control, true);
-    List<C> vAttachables = FormUtils.getAttachableControls(layoutInfo, control, false);
-    int direction = request.getResizeDirection();
-    // get parent info
-    int parentWidth = layoutInfo.getContainerSize().width;
-    int parentHeight = layoutInfo.getContainerSize().height;
-    Rectangle clientArea = layoutInfo.getComposite().getClientArea();
-    int parentClientAreaWidth = clientArea.width;
-    int parentClientAreaHeight = clientArea.height;
-    // size hints feedback
-    String xText = "", yText = "";
-    // West
-    if (hasDirection(direction, IPositionConstants.WEST)) {
-      removeSelectionFeedbacks("W");
-      int x = bounds.x;
-      boolean componentFound = false;
-      if (useSnap()) {
-        if (hwMargin > -1) {
-          for (Iterator<C> I = sortControlsByAxisRange(hAttachables, false, location.y).iterator(); I.hasNext()
-              && !componentFound;) {
-            C child = I.next();
-            Rectangle childBounds = getControlModelBounds(child);
-            if (FormUtils.between(x - (childBounds.right() + hwMargin), 0, sens)) {
-              componentFound = true;
-              setX(bounds, childBounds.right() + hwMargin);
-              addVerticalResizeLine("12", child, childBounds.right(), IColorConstants.green);
-              addVerticalResizeLine("2", childBounds.right() + hwMargin, offsetColor);
-              xText =
-                  (FormUtils.getVariableName(child) == null
-                      ? String.valueOf(childBounds.right())
-                      : FormUtils.getVariableName(child)) + "+" + hwMargin;
-            } else if (FormUtils.between(x - childBounds.right(), -sens, hwMargin)) {
-              componentFound = true;
-              setX(bounds, childBounds.right());
-              addVerticalResizeLine("11", childBounds.right(), offsetColor);
-              addVerticalResizeLine("12", child, childBounds.right(), IColorConstants.green);
-              xText =
-                  FormUtils.getVariableName(child) == null
-                      ? String.valueOf(childBounds.right())
-                      : FormUtils.getVariableName(child);
-            } else if (FormUtils.between(x - childBounds.x, -sens, sens)) {
-              componentFound = true;
-              setX(bounds, childBounds.x);
-              addVerticalResizeLine("11", childBounds.x, offsetColor);
-              addVerticalResizeLine("12", child, childBounds.x, IColorConstants.green);
-              xText =
-                  FormUtils.getVariableName(child) == null
-                      ? String.valueOf(childBounds.right())
-                      : FormUtils.getVariableName(child);
-            }
-          }
-        }
-        if (!componentFound) {
-          boolean snappedToPercent = false;
-          List<Integer> formLayoutHPercents = layoutInfo.getPreferences().getHorizontalPercents();
-          for (Integer percent : formLayoutHPercents) {
-            int newX = (int) ((double) percent.intValue() / 100 * parentWidth) + layoutMarginLeft;
-            if (FormUtils.between(x - (newX + hwMargin), 0, sens) && phMargin > -1) {
-              setX(bounds, newX + phMargin);
-              addVerticalResizeLine("3", newX, baseColor);
-              addVerticalResizeLine("4", newX + phMargin, offsetColor);
-              xText = percent.toString() + "%+" + phMargin;
-              snappedToPercent = true;
-            } else if (FormUtils.between(x - newX, -sens, hwMargin)) {
-              setX(bounds, newX);
-              addVerticalResizeLine("3", newX, offsetColor);
-              xText = percent.toString() + "%";
-              snappedToPercent = true;
-            }
-            if (snappedToPercent) {
-              break;
-            }
-          }
-          if (!snappedToPercent) {
-            int leftPoint = hMargin + layoutMarginLeft;
-            if (hMargin > -1 && x < leftPoint) {
-              setX(bounds, leftPoint);
-              addVerticalResizeLine("2", leftPoint, offsetColor);
-            } else {
-              setX(bounds, FormUtils.snapGrid(x, sens));
-            }
-            xText = String.valueOf(bounds.width);
-          }
-        }
-      } else {
-        xText = String.valueOf(bounds.width);
-      }
-      addVerticalResizeLine("5", bounds.x, parentClientAreaHeight, IColorConstants.red);
-    }
-    // East
-    if (hasDirection(direction, IPositionConstants.EAST)) {
-      removeSelectionFeedbacks("E");
-      int x = bounds.right();
-      boolean componentFound = false;
-      if (useSnap()) {
-        if (hwMargin > -1) {
-          for (Iterator<C> I = sortControlsByAxisRange(hAttachables, false, location.y).iterator(); I.hasNext()
-              && !componentFound;) {
-            C child = I.next();
-            Rectangle childBounds = getControlModelBounds(child);
-            if (FormUtils.between(childBounds.x - hwMargin - x, 0, sens)) {
-              componentFound = true;
-              bounds.width = childBounds.x - hwMargin - bounds.x;
-              addVerticalResizeLine("12", child, childBounds.x, IColorConstants.green);
-              addVerticalResizeLine("2", childBounds.x - hwMargin, offsetColor);
-              xText =
-                  (FormUtils.getVariableName(child) == null
-                      ? String.valueOf(childBounds.x)
-                      : FormUtils.getVariableName(child)) + "-" + hwMargin;
-            } else if (FormUtils.between(childBounds.x - x, -sens, hwMargin)) {
-              componentFound = true;
-              bounds.width = childBounds.x - bounds.x;
-              addVerticalResizeLine("11", childBounds.x, offsetColor);
-              addVerticalResizeLine("12", child, childBounds.x, IColorConstants.green);
-              xText =
-                  FormUtils.getVariableName(child) == null
-                      ? String.valueOf(childBounds.x)
-                      : FormUtils.getVariableName(child);
-            } else if (FormUtils.between(childBounds.right() - x, -sens, sens)) {
-              componentFound = true;
-              bounds.width = childBounds.right() - bounds.x;
-              addVerticalResizeLine("11", childBounds.right(), offsetColor);
-              addVerticalResizeLine("12", child, childBounds.right(), IColorConstants.green);
-              xText =
-                  FormUtils.getVariableName(child) == null
-                      ? String.valueOf(childBounds.x)
-                      : FormUtils.getVariableName(child);
-            }
-          }
-        }
-        if (!componentFound) {
-          boolean snappedToPercent = false;
-          List<Integer> formLayoutHPercents = layoutInfo.getPreferences().getHorizontalPercents();
-          for (Integer percent : formLayoutHPercents) {
-            int newX = (int) ((double) percent.intValue() / 100 * parentWidth) + layoutMarginLeft;
-            if (FormUtils.between(newX - hwMargin - x, 0, sens) && phMargin > -1) {
-              bounds.width = newX - bounds.x - phMargin;
-              addVerticalResizeLine("3", newX, baseColor);
-              addVerticalResizeLine("4", newX - phMargin, offsetColor);
-              xText = percent.toString() + "%-" + phMargin;
-              snappedToPercent = true;
-            } else if (FormUtils.between(newX - x, -sens, hwMargin)) {
-              bounds.width = newX - bounds.x;
-              addVerticalResizeLine("3", newX, offsetColor);
-              xText = percent.toString() + "%";
-              snappedToPercent = true;
-            }
-            if (snappedToPercent) {
-              break;
-            }
-          }
-          if (!snappedToPercent) {
-            int rightPoint = parentWidth - hMargin + layoutMarginLeft;
-            if (hMargin > -1 && x > rightPoint) {
-              bounds.width = rightPoint - bounds.x;
-              addVerticalResizeLine("2", rightPoint, offsetColor);
-            } else {
-              bounds.width = FormUtils.snapGrid(x, sens) - bounds.x;
-            }
-            xText = String.valueOf(bounds.width);
-          }
-        }
-      } else {
-        xText = String.valueOf(bounds.width);
-      }
-      addVerticalResizeLine("5", bounds.right(), parentClientAreaHeight, IColorConstants.red);
-    }
-    // North
-    if (hasDirection(direction, IPositionConstants.NORTH)) {
-      removeSelectionFeedbacks("N");
-      int y = bounds.y;
-      boolean componentFound = false;
-      if (useSnap()) {
-        if (vwMargin > -1) {
-          for (Iterator<C> I = sortControlsByAxisRange(vAttachables, true, location.x).iterator(); I.hasNext()
-              && !componentFound;) {
-            C child = I.next();
-            Rectangle childBounds = getControlModelBounds(child);
-            if (FormUtils.between(y - (childBounds.bottom() + vwMargin), 0, sens)) {
-              componentFound = true;
-              setY(bounds, childBounds.bottom() + vwMargin);
-              addHorizontalResizeLine("12", child, childBounds.bottom(), IColorConstants.green);
-              addHorizontalResizeLine("2", childBounds.bottom() + vwMargin, offsetColor);
-              yText =
-                  (FormUtils.getVariableName(child) == null
-                      ? String.valueOf(childBounds.bottom())
-                      : FormUtils.getVariableName(child)) + "+" + vwMargin;
-            } else if (FormUtils.between(y - childBounds.bottom(), -sens, vwMargin)) {
-              componentFound = true;
-              setY(bounds, childBounds.bottom());
-              addHorizontalResizeLine("11", childBounds.bottom(), offsetColor);
-              addHorizontalResizeLine("12", child, childBounds.bottom(), IColorConstants.green);
-              yText =
-                  FormUtils.getVariableName(child) == null
-                      ? String.valueOf(childBounds.bottom())
-                      : FormUtils.getVariableName(child);
-            } else if (FormUtils.between(y - childBounds.y, -sens, sens)) {
-              componentFound = true;
-              setY(bounds, childBounds.y);
-              addHorizontalResizeLine("11", childBounds.y, offsetColor);
-              addHorizontalResizeLine("12", child, childBounds.y, IColorConstants.green);
-              yText =
-                  FormUtils.getVariableName(child) == null
-                      ? String.valueOf(childBounds.bottom())
-                      : FormUtils.getVariableName(child);
-            }
-          }
-        }
-        if (!componentFound) {
-          boolean snappedToPercent = false;
-          List<Integer> formLayoutVPercents = layoutInfo.getPreferences().getVerticalPercents();
-          for (Integer percent : formLayoutVPercents) {
-            int newY = (int) ((double) percent.intValue() / 100 * parentHeight) + layoutMarginTop;
-            if (FormUtils.between(y - (newY + vwMargin), 0, sens) && pvMargin > -1) {
-              setY(bounds, newY + pvMargin);
-              addHorizontalResizeLine("3", newY, baseColor);
-              addHorizontalResizeLine("4", newY + pvMargin, offsetColor);
-              yText = percent.toString() + "%+" + pvMargin;
-              snappedToPercent = true;
-            } else if (FormUtils.between(y - newY, -sens, vwMargin)) {
-              setY(bounds, newY);
-              addHorizontalResizeLine("3", newY, offsetColor);
-              yText = percent.toString() + "%";
-              snappedToPercent = true;
-            }
-            if (snappedToPercent) {
-              break;
-            }
-          }
-          if (!snappedToPercent) {
-            int topPoint = vMargin + layoutMarginTop;
-            if (vMargin > -1 && y < topPoint) {
-              setY(bounds, topPoint);
-              addHorizontalResizeLine("2", topPoint, offsetColor);
-            } else {
-              setY(bounds, FormUtils.snapGrid(y, sens));
-            }
-            yText = String.valueOf(bounds.height);
-          }
-        }
-      } else {
-        yText = String.valueOf(bounds.height);
-      }
-      addHorizontalResizeLine("5", bounds.y, parentClientAreaWidth, IColorConstants.red);
-    }
-    // South
-    if (hasDirection(direction, IPositionConstants.SOUTH)) {
-      removeSelectionFeedbacks("S");
-      int y = bounds.bottom();
-      boolean componentFound = false;
-      if (useSnap()) {
-        if (vwMargin > -1) {
-          for (Iterator<C> I = sortControlsByAxisRange(vAttachables, true, location.x).iterator(); I.hasNext()
-              && !componentFound;) {
-            C child = I.next();
-            Rectangle childBounds = getControlModelBounds(child);
-            if (FormUtils.between(childBounds.y - vwMargin - y, 0, sens)) {
-              componentFound = true;
-              bounds.height = childBounds.y - vwMargin - bounds.y;
-              addHorizontalResizeLine("12", child, childBounds.y, IColorConstants.green);
-              addHorizontalResizeLine("2", childBounds.y - vwMargin, offsetColor);
-              yText =
-                  (FormUtils.getVariableName(child) == null
-                      ? String.valueOf(childBounds.y)
-                      : FormUtils.getVariableName(child)) + "-" + vwMargin;
-            } else if (FormUtils.between(childBounds.y - y, -sens, vwMargin)) {
-              componentFound = true;
-              bounds.height = childBounds.y - bounds.y;
-              addHorizontalResizeLine("11", childBounds.y, offsetColor);
-              addHorizontalResizeLine("12", child, childBounds.y, IColorConstants.green);
-              yText =
-                  FormUtils.getVariableName(child) == null
-                      ? String.valueOf(childBounds.y)
-                      : FormUtils.getVariableName(child);
-            } else if (FormUtils.between(childBounds.bottom() - y, -sens, sens)) {
-              componentFound = true;
-              bounds.height = childBounds.bottom() - bounds.y;
-              addHorizontalResizeLine("11", childBounds.bottom(), offsetColor);
-              addHorizontalResizeLine("12", child, childBounds.bottom(), IColorConstants.green);
-              yText =
-                  FormUtils.getVariableName(child) == null
-                      ? String.valueOf(childBounds.y)
-                      : FormUtils.getVariableName(child);
-            }
-          }
-        }
-        if (!componentFound) {
-          boolean snappedToPercent = false;
-          List<Integer> formLayoutVPercents = layoutInfo.getPreferences().getVerticalPercents();
-          for (Integer percent : formLayoutVPercents) {
-            int newY = (int) ((double) percent.intValue() / 100 * parentHeight) + layoutMarginTop;
-            if (FormUtils.between(newY - vwMargin - y, 0, sens) && pvMargin > -1) {
-              bounds.height = newY - pvMargin - bounds.y;
-              addHorizontalResizeLine("3", newY, baseColor);
-              addHorizontalResizeLine("4", newY - pvMargin, offsetColor);
-              yText = percent.toString() + "%-" + pvMargin;
-              snappedToPercent = true;
-            } else if (FormUtils.between(newY - y, -sens, vwMargin)) {
-              bounds.height = newY - bounds.y;
-              addHorizontalResizeLine("3", newY, offsetColor);
-              yText = percent.toString() + "%";
-              snappedToPercent = true;
-            }
-            if (snappedToPercent) {
-              break;
-            }
-          }
-          if (!snappedToPercent) {
-            int bottomPoint = parentHeight - vMargin + layoutMarginTop;
-            if (vMargin > -1 && y > bottomPoint) {
-              bounds.height = bottomPoint - bounds.y;
-              addHorizontalResizeLine("2", bottomPoint, offsetColor);
-            } else {
-              bounds.height = FormUtils.snapGrid(y, sens) - bounds.y;
-            }
-            yText = String.valueOf(bounds.height);
-          }
-        }
-      } else {
-        yText = String.valueOf(bounds.height);
-      }
-      addHorizontalResizeLine("5", bounds.bottom(), parentClientAreaWidth, IColorConstants.red);
-    }
-    {
-      // move the source feedback figure
-      Rectangle feedbackBounds = bounds.getCopy();
-      translateModelToFeedback(feedbackBounds);
-      sourceFeedbackFigure.setBounds(feedbackBounds);
-      if (xText.length() != 0) {
-        if (xTextFeedback == null) {
-          xTextFeedback = layout.createTextFeedback(true);
-          xTextFeedback.add();
-        }
-        xTextFeedback.setText(xText);
-        Dimension textSize = xTextFeedback.getSize();
-        Rectangle textBounds = bounds.getCopy();
-        textBounds.y = parentClientAreaHeight + 1;
-        int x =
-            hasDirection(direction, IPositionConstants.EAST) ? textBounds.right() : textBounds.x;
-        x -= textSize.width / 2;
-        if (x < 0) {
-          x = 0;
-        } else if (x + textSize.width > parentClientAreaWidth) {
-          x = parentClientAreaWidth - textSize.width;
-        }
-        textBounds.x = x;
-        translateModelToFeedback(textBounds);
-        xTextFeedback.setLocation(textBounds.getLocation());
-      }
-      if (yText.length() != 0) {
-        if (yTextFeedback == null) {
-          yTextFeedback = layout.createTextFeedback(false);
-          yTextFeedback.add();
-        }
-        yTextFeedback.setText(yText);
-        Dimension textSize = yTextFeedback.getSize();
-        Rectangle textBounds = bounds.getCopy();
-        textBounds.x = parentClientAreaWidth + 1;
-        int y =
-            hasDirection(direction, IPositionConstants.SOUTH) ? textBounds.bottom() : textBounds.y;
-        y -= textSize.height / 2;
-        if (y < 0) {
-          y = 0;
-        } else if (y + textSize.height > parentClientAreaHeight) {
-          y = parentClientAreaHeight - textSize.height;
-        }
-        textBounds.y = y;
-        translateModelToFeedback(textBounds);
-        yTextFeedback.setLocation(textBounds.getLocation());
-      }
-    }
-  }
-
-  @Override
-  public Command getCommand(final Request request) {
-    if (AbsoluteBasedSelectionEditPolicy.REQ_RESIZE.equals(request.getType())) {
-      return ExecutionUtils.<Command>runObjectLog(new RunnableObjectEx<Command>() {
-        @Override
-        public Command runObject() throws Exception {
-          return getResizeCommand((ChangeBoundsRequest) request);
-        }
-      }, null);
-    }
-    return null;
-  }
-
-  protected Command getResizeCommand(ChangeBoundsRequest request) throws Exception {
-    int layoutMarginLeft = FormUtils.getLayoutMarginLeft(layoutInfo);
-    int layoutMarginTop = FormUtils.getLayoutMarginTop(layoutInfo);
-    // prepare values from preferences
-    int hMargin = layoutInfo.getPreferences().getHorizontalContainerGap();
-    int phMargin = layoutInfo.getPreferences().getHorizontalPercentsGap();
-    int hwMargin = layoutInfo.getPreferences().getHorizontalComponentGap();
-    int sens = layoutInfo.getPreferences().getSnapSensitivity();
-    int vMargin = layoutInfo.getPreferences().getVerticalContainerGap();
-    int pvMargin = layoutInfo.getPreferences().getVerticalPercentsGap();
-    int vwMargin = layoutInfo.getPreferences().getVerticalComponentGap();
-    @SuppressWarnings("unchecked")
-    C control = (C) getHost().getModel();
-    CompoundEditCommand compoundCommand = new CompoundEditCommand(layoutModel);
-    Rectangle bounds = getControlModelBounds(control);
-    bounds.performTranslate(request.getMoveDelta());
-    bounds.resize(request.getSizeDelta());
-    Point requestLocation = request.getLocation();
-    Point location =
-        requestLocation == null
-            ? getControlModelBounds(control).getLocation()
-            : requestLocation.getCopy();
-    //
-    List<C> hAttachables = FormUtils.getAttachableControls(layoutInfo, control, true);
-    List<C> vAttachables = FormUtils.getAttachableControls(layoutInfo, control, false);
-    final int direction = request.getResizeDirection();
-    //
-    int parentWidth = layoutInfo.getContainerSize().width;
-    int parentHeight = layoutInfo.getContainerSize().height;
-    @SuppressWarnings("unchecked")
-    IFormDataInfo<C> formDataInfo = (IFormDataInfo<C>) layoutInfo.getLayoutData2(control);
-    // West
-    if (hasDirection(direction, IPositionConstants.WEST)) {
-      int x = bounds.x;
-      Command cmd = null;
-      IFormAttachmentInfo<C> attachment = formDataInfo.getAttachment(IPositionConstants.LEFT);
-      if (useSnap()) {
-        if (hwMargin > -1) {
-          for (Iterator<C> I = sortControlsByAxisRange(hAttachables, false, location.y).iterator(); I.hasNext()
-              && cmd == null;) {
-            C child = I.next();
-            Rectangle componentBounds = getControlModelBounds(child);
-            if (FormUtils.between(x - (componentBounds.right() + hwMargin), 0, sens)) {
-              cmd =
-                  new ResizeToControlCommand(attachment, child, IPositionConstants.RIGHT, hwMargin);
-            } else if (FormUtils.between(x - componentBounds.right(), -sens, hwMargin)) {
-              cmd = new ResizeToControlCommand(attachment, child, IPositionConstants.RIGHT, 0);
-            } else if (FormUtils.between(x - componentBounds.x, -sens, sens)) {
-              cmd = new ResizeToControlCommand(attachment, child, IPositionConstants.LEFT, 0);
-            }
-          }
-        }
-        if (cmd == null) {
-          List<Integer> formLayoutHPercents = layoutInfo.getPreferences().getHorizontalPercents();
-          for (Integer percent : formLayoutHPercents) {
-            int newX = (int) ((double) percent.intValue() / 100 * parentWidth) + layoutMarginLeft;
-            if (FormUtils.between(x - (newX + hwMargin), 0, sens) && phMargin > -1) {
-              cmd = new ResizeToPercentOffsetCommand(attachment, percent.intValue(), phMargin);
-            } else if (FormUtils.between(x - newX, -sens, hwMargin)) {
-              cmd = new ResizeToPercentOffsetCommand(attachment, percent.intValue(), 0);
-            }
-            if (cmd != null) {
-              break;
-            }
-          }
-          if (cmd == null) {
-            if (hMargin > -1 && x < hMargin + layoutMarginLeft) {
-              cmd = new ResizeToMarginCommand(attachment, IPositionConstants.LEFT, hMargin);
-            } else {
-              cmd =
-                  new ResizeToOffsetCommand(attachment, parentWidth, FormUtils.snapGrid(x
-                      - layoutMarginLeft, sens));
-            }
-          }
-        }
-      } else {
-        cmd = new ResizeToOffsetCommand(attachment, parentWidth, x - layoutMarginLeft);
-      }
-      compoundCommand.add(cmd);
-    }
-    // East
-    if (hasDirection(direction, IPositionConstants.EAST)) {
-      int x = bounds.right();
-      Command cmd = null;
-      IFormAttachmentInfo<C> attachment = formDataInfo.getAttachment(IPositionConstants.RIGHT);
-      if (useSnap()) {
-        if (hwMargin > -1) {
-          for (Iterator<C> I = sortControlsByAxisRange(hAttachables, false, location.y).iterator(); I.hasNext()
-              && cmd == null;) {
-            C child = I.next();
-            Rectangle componentBounds = getControlModelBounds(child);
-            if (FormUtils.between(componentBounds.x - hwMargin - x, 0, sens)) {
-              cmd =
-                  new ResizeToControlCommand(attachment, child, IPositionConstants.LEFT, -hwMargin);
-            } else if (FormUtils.between(componentBounds.x - x, -sens, hwMargin)) {
-              cmd = new ResizeToControlCommand(attachment, child, IPositionConstants.LEFT, 0);
-            } else if (FormUtils.between(componentBounds.right() - x, -sens, sens)) {
-              cmd = new ResizeToControlCommand(attachment, child, IPositionConstants.RIGHT, 0);
-            }
-          }
-        }
-        if (cmd == null) {
-          List<Integer> formLayoutHPercents = layoutInfo.getPreferences().getHorizontalPercents();
-          for (Integer percent : formLayoutHPercents) {
-            int newX = (int) ((double) percent.intValue() / 100 * parentWidth) + layoutMarginLeft;
-            if (FormUtils.between(newX - hwMargin - x, 0, sens) && phMargin > -1) {
-              cmd = new ResizeToPercentOffsetCommand(attachment, percent.intValue(), -phMargin);
-            } else if (FormUtils.between(newX - x, -sens, hwMargin)) {
-              cmd = new ResizeToPercentOffsetCommand(attachment, percent.intValue(), 0);
-            }
-            if (cmd != null) {
-              break;
-            }
-          }
-          if (cmd == null) {
-            if (hMargin > -1 && x > parentWidth - hMargin + layoutMarginLeft) {
-              cmd = new ResizeToMarginCommand(attachment, IPositionConstants.RIGHT, hMargin);
-            } else {
-              cmd =
-                  new ResizeToOffsetCommand(attachment, parentWidth, FormUtils.snapGrid(x
-                      - layoutMarginLeft, sens));
-            }
-          }
-        }
-      } else {
-        cmd = new ResizeToOffsetCommand(attachment, parentWidth, x - layoutMarginLeft);
-      }
-      compoundCommand.add(cmd);
-    }
-    // North
-    if (hasDirection(direction, IPositionConstants.NORTH)) {
-      int y = bounds.y;
-      Command cmd = null;
-      IFormAttachmentInfo<C> attachment = formDataInfo.getAttachment(IPositionConstants.TOP);
-      if (useSnap()) {
-        if (vwMargin > -1) {
-          for (Iterator<C> I = sortControlsByAxisRange(vAttachables, true, location.x).iterator(); I.hasNext()
-              && cmd == null;) {
-            C child = I.next();
-            Rectangle componentBounds = getControlModelBounds(child);
-            if (FormUtils.between(y - (componentBounds.bottom() + vwMargin), 0, sens)) {
-              cmd =
-                  new ResizeToControlCommand(attachment, child, IPositionConstants.BOTTOM, vwMargin);
-            } else if (FormUtils.between(y - componentBounds.bottom(), -sens, vwMargin)) {
-              cmd = new ResizeToControlCommand(attachment, child, IPositionConstants.BOTTOM, 0);
-            } else if (FormUtils.between(y - componentBounds.y, -sens, sens)) {
-              cmd = new ResizeToControlCommand(attachment, child, IPositionConstants.TOP, 0);
-            }
-          }
-        }
-        if (cmd == null) {
-          List<Integer> formLayoutVPercents = layoutInfo.getPreferences().getVerticalPercents();
-          for (Integer percent : formLayoutVPercents) {
-            int newY = (int) ((double) percent.intValue() / 100 * parentHeight) + layoutMarginTop;
-            if (FormUtils.between(y - (newY + vwMargin), 0, sens) && pvMargin > -1) {
-              cmd = new ResizeToPercentOffsetCommand(attachment, percent.intValue(), pvMargin);
-            } else if (FormUtils.between(y - newY, -sens, vwMargin)) {
-              cmd = new ResizeToPercentOffsetCommand(attachment, percent.intValue(), 0);
-            }
-            if (cmd != null) {
-              break;
-            }
-          }
-          if (cmd == null) {
-            if (vMargin > -1 && y < vMargin + layoutMarginTop) {
-              cmd = new ResizeToMarginCommand(attachment, IPositionConstants.TOP, vMargin);
-            } else {
-              cmd =
-                  new ResizeToOffsetCommand(attachment, parentHeight, FormUtils.snapGrid(y
-                      - layoutMarginTop, sens));
-            }
-          }
-        }
-      } else {
-        cmd = new ResizeToOffsetCommand(attachment, parentHeight, y - layoutMarginTop);
-      }
-      compoundCommand.add(cmd);
-    }
-    // South
-    if (hasDirection(direction, IPositionConstants.SOUTH)) {
-      int y = bounds.bottom();
-      Command cmd = null;
-      IFormAttachmentInfo<C> attachment = formDataInfo.getAttachment(IPositionConstants.BOTTOM);
-      if (useSnap()) {
-        if (vwMargin > -1) {
-          for (Iterator<C> I = sortControlsByAxisRange(vAttachables, true, location.x).iterator(); I.hasNext()
-              && cmd == null;) {
-            C child = I.next();
-            Rectangle componentBounds = getControlModelBounds(child);
-            if (FormUtils.between(componentBounds.y - vwMargin - y, 0, sens)) {
-              cmd =
-                  new ResizeToControlCommand(attachment, child, IPositionConstants.TOP, -vwMargin);
-            } else if (FormUtils.between(componentBounds.y - y, -sens, vwMargin)) {
-              cmd = new ResizeToControlCommand(attachment, child, IPositionConstants.TOP, 0);
-            } else if (FormUtils.between(componentBounds.bottom() - y, -sens, sens)) {
-              cmd = new ResizeToControlCommand(attachment, child, IPositionConstants.BOTTOM, 0);
-            }
-          }
-        }
-        if (cmd == null) {
-          List<Integer> formLayoutVPercents = layoutInfo.getPreferences().getVerticalPercents();
-          for (Integer percent : formLayoutVPercents) {
-            int newY = (int) ((double) percent.intValue() / 100 * parentHeight) + layoutMarginTop;
-            if (FormUtils.between(newY - vwMargin - y, 0, sens)) {
-              cmd = new ResizeToPercentOffsetCommand(attachment, percent.intValue(), -pvMargin);
-            } else if (FormUtils.between(newY - y, -sens, vwMargin)) {
-              cmd = new ResizeToPercentOffsetCommand(attachment, percent.intValue(), 0);
-            }
-            if (cmd != null) {
-              break;
-            }
-          }
-          if (cmd == null) {
-            if (vMargin > -1 && y > parentHeight - vMargin + layoutMarginTop) {
-              cmd = new ResizeToMarginCommand(attachment, IPositionConstants.BOTTOM, vMargin);
-            } else {
-              cmd =
-                  new ResizeToOffsetCommand(attachment, parentHeight, FormUtils.snapGrid(y
-                      - layoutMarginTop, sens));
-            }
-          }
-        }
-      } else {
-        cmd = new ResizeToOffsetCommand(attachment, parentHeight, y - layoutMarginTop);
-      }
-      compoundCommand.add(cmd);
-    }
-    return compoundCommand;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Selection feedback
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Map<String, Figure> selectionFeedbacks;
-
-  @Override
-  protected void showSelection() {
-    // check that part is still selected: Case 9967 - we restore selection in FormLayoutEditPolicy.eraseMoveFeedback()
-    if (getHost().getSelected() == EditPart.SELECTED_NONE) {
-      return;
-    }
-    // show default selection (probably handles)
-    super.showSelection();
-    //
-    if (!(getHost().getModel() instanceof IControlInfo)) {
-      return;
-    }
-    //
-    if (selectionFeedbacks == null) {
-      try {
-        selectionFeedbacks = Maps.newHashMap();
-        addSideLinesFeedbacks();
-      } catch (Throwable e) {
-        DesignerPlugin.log(e);
-      }
-    }
-    anchorFigures.hide();
-    anchorFigures.show();
-  }
-
-  @Override
-  public void hideSelection() {
-    super.hideSelection();
-    hideSelectionFeedbacks();
-    anchorFigures.hide();
-  }
-
-  private void hideSelectionFeedbacks() {
-    if (selectionFeedbacks != null) {
-      for (Figure feedback : selectionFeedbacks.values()) {
-        FigureUtils.removeFigure(feedback);
-      }
-      selectionFeedbacks = null;
-    }
-  }
-
-  private boolean isVSnapPercent(int percent) {
-    List<Integer> formLayoutVPercents = layoutInfo.getPreferences().getVerticalPercents();
-    return formLayoutVPercents.indexOf(percent) != -1;
-  }
-
-  private boolean isHSnapPercent(int percent) {
-    List<Integer> formLayoutHPercents = layoutInfo.getPreferences().getHorizontalPercents();
-    return formLayoutHPercents.indexOf(percent) != -1;
-  }
-
-  /**
-   * Used for add vertical feedback lines for horizontal form attachments
-   */
-  private void addVerticalSideLinesFeedbacks(int parentWidth,
-      int parentHeight,
-      Rectangle bounds,
-      IFormAttachmentInfo<C> attachment) {
-    if (attachment == null) {
-      return;
-    }
-    boolean isLeft = layoutImpl.isLeft(attachment);
-    int sideMargin = layoutInfo.getPreferences().getHorizontalContainerGap();
-    if (layoutImpl.isParentAttachment(attachment)) {
-      int percent = attachment.getNumerator();
-      int offset = attachment.getOffset();
-      if (isLeft && percent == 0) {
-        if (offset == sideMargin) {
-          addVerticalFeedbackLine("W1", bounds.x, 0, parentHeight, offsetColor);
-        } else {
-          int thisY = bounds.getCenter().y;
-          addHorizontalFeedbackLine("W1", thisY, 0, bounds.x, offsetColor);
-          addLineEndFigure("W2", 0, thisY, IPositionConstants.LEFT, offsetColor);
-        }
-      } else if (!isLeft && percent == 100) {
-        if (offset == -sideMargin) {
-          addVerticalFeedbackLine("E1", bounds.right(), 0, parentHeight, offsetColor);
-        } else {
-          int thisY = bounds.getCenter().y;
-          addHorizontalFeedbackLine("E1", thisY, bounds.right(), parentWidth, offsetColor);
-          addLineEndFigure("E2", parentWidth, thisY, IPositionConstants.RIGHT, offsetColor);
-        }
-      } else if (isHSnapPercent(percent)) {
-        int percentX;
-        if (isLeft) {
-          percentX = bounds.x - offset;
-          if (offset == layoutInfo.getPreferences().getHorizontalPercentsGap()) {
-            addVerticalFeedbackLine("W2", percentX + offset, 0, parentHeight, offsetColor);
-          }
-        } else {
-          percentX = bounds.right() - offset;
-          if (offset == -layoutInfo.getPreferences().getHorizontalPercentsGap()) {
-            addVerticalFeedbackLine("E2", percentX + offset, 0, parentHeight, offsetColor);
-          }
-        }
-        addVerticalFeedbackLine(isLeft ? "W3" : "E3", percentX, 0, parentHeight, baseColor);
-      }
-    } else if (layoutImpl.isControlAttachment(attachment)
-        && layoutImpl.shouldShowConstraintLine(attachment)) {
-      addSideLinesForControlAttachment(bounds, attachment, false);
-    }
-  }
-
-  /**
-   * Used for add horizontal feedback lines for vertical form attachments
-   */
-  private void addHorizontalSideLinesFeedbacks(int parentWidth,
-      int parentHeight,
-      Rectangle bounds,
-      IFormAttachmentInfo<C> attachment) {
-    if (attachment == null) {
-      return;
-    }
-    boolean isTop = layoutImpl.isTop(attachment);
-    int sideMargin = layoutInfo.getPreferences().getVerticalContainerGap();
-    if (layoutImpl.isParentAttachment(attachment)) {
-      int percent = attachment.getNumerator();
-      int offset = attachment.getOffset();
-      if (isTop && percent == 0) {
-        if (offset == sideMargin) {
-          addHorizontalFeedbackLine("N1", bounds.y, 0, parentWidth, offsetColor);
-        } else {
-          int thisX = bounds.getCenter().x;
-          addVerticalFeedbackLine("N1", thisX, 0, bounds.y, offsetColor);
-          addLineEndFigure("N2", thisX, 0, IPositionConstants.TOP, offsetColor);
-        }
-      } else if (!isTop && percent == 100) {
-        if (offset == -sideMargin) {
-          addHorizontalFeedbackLine("S1", bounds.bottom(), 0, parentWidth, offsetColor);
-        } else {
-          int thisX = bounds.getCenter().x;
-          addVerticalFeedbackLine("S1", thisX, bounds.bottom(), parentHeight, offsetColor);
-          addLineEndFigure("S2", thisX, parentHeight, IPositionConstants.BOTTOM, offsetColor);
-        }
-      } else if (isVSnapPercent(percent)) {
-        int percentY;
-        if (isTop) {
-          percentY = bounds.y - offset;
-          if (offset == layoutInfo.getPreferences().getVerticalPercentsGap()) {
-            addHorizontalFeedbackLine("N2", percentY + offset, 0, parentWidth, offsetColor);
-          }
-        } else {
-          percentY = bounds.bottom() - offset;
-          if (offset == -layoutInfo.getPreferences().getVerticalPercentsGap()) {
-            addHorizontalFeedbackLine("S2", percentY + offset, 0, parentWidth, offsetColor);
-          }
-        }
-        addHorizontalFeedbackLine(isTop ? "N3" : "S3", percentY, 0, parentWidth, baseColor);
-      }
-    } else if (layoutImpl.isControlAttachment(attachment)
-        && layoutImpl.shouldShowConstraintLine(attachment)) {
-      addSideLinesForControlAttachment(bounds, attachment, true);
-    }
-  }
-
-  private void addSideLinesFeedbacks() throws Exception {
-    @SuppressWarnings("unchecked")
-    C control = (C) getHost().getModel();
-    ICompositeInfo composite = layoutInfo.getComposite();
-    int parentWidth = composite.getClientArea().width;
-    int parentHeight = composite.getClientArea().height;
-    Rectangle bounds = getControlModelBounds(control);
-    addVerticalSideLinesFeedbacks(
-        parentWidth,
-        parentHeight,
-        bounds,
-        layoutImpl.getAttachment(control, IPositionConstants.LEFT));
-    addVerticalSideLinesFeedbacks(
-        parentWidth,
-        parentHeight,
-        bounds,
-        layoutImpl.getAttachment(control, IPositionConstants.RIGHT));
-    addHorizontalSideLinesFeedbacks(
-        parentWidth,
-        parentHeight,
-        bounds,
-        layoutImpl.getAttachment(control, IPositionConstants.TOP));
-    addHorizontalSideLinesFeedbacks(
-        parentWidth,
-        parentHeight,
-        bounds,
-        layoutImpl.getAttachment(control, IPositionConstants.BOTTOM));
-  }
-
-  /**
-   * @param b
-   *          Control bounds in parent coordinates
-   * @param attachment
-   * @param vertical
-   */
-  private void addSideLinesForControlAttachment(Rectangle b,
-      IFormAttachmentInfo<C> attachment,
-      boolean vertical) {
-    C alignControl = attachment.getControl();
-    IEditPartViewer viewer = getHost().getViewer();
-    GraphicalEditPart bindPart = (GraphicalEditPart) viewer.getEditPartByModel(alignControl);
-    if (bindPart == null) {
-      return;
-    }
-    Rectangle bounds = b.getCopy();
-    Rectangle bindBounds = getControlModelBounds(alignControl);
-    // transpose bounds for vertical
-    if (vertical) {
-      bindBounds.transpose();
-      bounds.transpose();
-    }
-    int x;
-    int controlAlign = attachment.getAlignment();
-    if (controlAlign == SWT.LEFT || controlAlign == SWT.TOP) {
-      x = bindBounds.x;
-    } else {
-      x = bindBounds.right();
-    }
-    //
-    int y1 = Math.min(bindBounds.y, bounds.y);
-    int y2 = Math.max(bindBounds.bottom(), bounds.bottom());
-    int offset = attachment.getOffset();
-    y1 -= EXTENSION;
-    y2 += EXTENSION;
-    if (vertical) {
-      addHorizontalFeedbackLine(
-          layoutImpl.isTop(attachment) ? "N6" : "S6",
-          x + offset,
-          y1,
-          y2,
-          offsetColor);
-    } else {
-      addVerticalFeedbackLine(
-          layoutImpl.isLeft(attachment) ? "W6" : "E6",
-          x + offset,
-          y1,
-          y2,
-          offsetColor);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utilities for selection feedback
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void addVerticalFeedbackLine(String name, int x, int y1, int y2, Color color) {
-    selectionFeedbacks.put(name, addFeedbackLine(x, y1, x, y2, color));
-  }
-
-  private void addHorizontalFeedbackLine(String name, int y, int x1, int x2, Color color) {
-    selectionFeedbacks.put(name, addFeedbackLine(x1, y, x2, y, color));
-  }
-
-  private void addLineEndFigure(String name, int x, int y, int alignment, Color color) {
-    selectionFeedbacks.put(name, addLineEndFigure(x, y, alignment, color));
-  }
-
-  private void removeSelectionFeedbacks(String prefix) {
-    for (Iterator<String> I = selectionFeedbacks.keySet().iterator(); I.hasNext();) {
-      String key = I.next();
-      if (!key.startsWith(prefix)) {
-        continue;
-      }
-      Figure feedback = selectionFeedbacks.get(key);
-      feedback.getParent().remove(feedback);
-      I.remove();
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utilities for feedbacks
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Polyline addFeedbackLine(int x1, int y1, int x2, int y2, Color color) {
-    Polyline line = new Polyline();
-    Point p1 = new Point(x1, y1);
-    translateModelToFeedback(p1);
-    Point p2 = new Point(x2, y2);
-    translateModelToFeedback(p2);
-    line.addPoint(p1);
-    line.addPoint(p2);
-    line.setForeground(color);
-    line.setLineStyle(SWT.LINE_DOT);
-    // add feedback
-    addFeedback(line);
-    return line;
-  }
-
-  private LineEndFigure addLineEndFigure(int x, int y, int alignment, Color color) {
-    Point point = new Point(x, y);
-    translateModelToFeedback(point);
-    LineEndFigure lineEndFigure = new LineEndFigure(alignment, color);
-    Dimension size = lineEndFigure.getSize();
-    lineEndFigure.setLocation(new Point(point.x - size.width / 2, point.y - size.height / 2));
-    addFeedback(lineEndFigure);
-    return lineEndFigure;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Coordinates utilities
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Returns model bounds of the control in parent client area coordinates
-   *
-   * @param control
-   * @return
-   */
-  public static <C extends IControlInfo> Rectangle getControlModelBounds(C control) {
-    return control.getModelBounds().getCopy();
-  }
-
-  private void translateModelToFeedback(Translatable t) {
-    PolicyUtils.translateModelToFeedback(this, t);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Quadrant feedback
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private IMouseTrackListener mouseTrackListener;
-  private IMouseMoveListener mouseMoveListener;
-  private IFigureListener figureListener;
-  private Figure hoverFigure;
-  private int mouseQuadrant;
-
-  private void installQuadrantHandler() {
-    mouseQuadrant = -1;
-    final Figure figure = getHostFigure();
-    // add mouse listener
-    mouseTrackListener = new IMouseTrackListener() {
-      @Override
-      public void mouseHover(MouseEvent event) {
-      }
-
-      @Override
-      public void mouseExit(MouseEvent event) {
-        mouseQuadrant = -1;
-        figure.repaint();
-      }
-
-      @Override
-      public void mouseEnter(MouseEvent event) {
-      }
-    };
-    mouseMoveListener = new IMouseMoveListener() {
-      @Override
-      public void mouseMove(MouseEvent event) {
-        int oldQuadrant = mouseQuadrant;
-        Rectangle r = figure.getBounds().getCopy();
-        if (event.x < r.width / 2 && event.y < r.height / 2) {
-          mouseQuadrant = 0;
-        } else if (event.y < r.height / 2) {
-          mouseQuadrant = 1;
-        } else if (event.x < r.width / 2) {
-          mouseQuadrant = 2;
-        } else {
-          mouseQuadrant = 3;
-        }
-        if (mouseQuadrant != oldQuadrant) {
-          figure.repaint();
-        }
-      }
-    };
-    figureListener = new IFigureListener() {
-      @Override
-      public void figureReparent(Figure source, Figure oldParent, Figure newParent) {
-      }
-
-      @Override
-      public void figureMoved(Figure source) {
-        Rectangle bounds = figure.getBounds();
-        hoverFigure.setBounds(new Rectangle(0, 0, bounds.width, bounds.height));
-      }
-    };
-    hoverFigure = new Figure() {
-      @Override
-      protected void paintClientArea(Graphics graphics) {
-        if (mouseQuadrant == -1) {
-          return;
-        }
-        graphics.setBackgroundColor(IColorConstants.blue);
-        Rectangle bounds = figure.getBounds();
-        PointList points = new PointList();
-        switch (mouseQuadrant) {
-          case 0 :
-            points.addPoint(1, 1);
-            points.addPoint(7, 1);
-            points.addPoint(1, 7);
-            break;
-          case 1 :
-            points.addPoint(bounds.width - 1, 1);
-            points.addPoint(bounds.width - 7, 1);
-            points.addPoint(bounds.width - 1, 7);
-            break;
-          case 2 :
-            points.addPoint(1, bounds.height - 1);
-            points.addPoint(7, bounds.height - 1);
-            points.addPoint(1, bounds.height - 7);
-            break;
-          case 3 :
-            points.addPoint(bounds.width - 1, bounds.height - 1);
-            points.addPoint(bounds.width - 7, bounds.height - 1);
-            points.addPoint(bounds.width - 1, bounds.height - 7);
-            break;
-          default :
-            break;
-        }
-        graphics.fillPolygon(points);
-      }
-    };
-    hoverFigure.setOpaque(false);
-    Rectangle figureBounds = figure.getBounds();
-    hoverFigure.setBounds(new Rectangle(0, 0, figureBounds.width, figureBounds.height));
-    hoverFigure.addMouseTrackListener(mouseTrackListener);
-    hoverFigure.addMouseMoveListener(mouseMoveListener);
-    figure.add(hoverFigure, 0);
-    figure.addFigureListener(figureListener);
-  }
-
-  private void uninstallQuadrantHandler() {
-    getHostFigure().removeFigureListener(figureListener);
-    FigureUtils.removeFigure(hoverFigure);
-  }
-
-  private void removeResizeFeedbacks() {
-    removeResizeFeedback("H");
-    removeResizeFeedback("V");
-  }
-
-  private void removeResizeFeedback(String name) {
-    removeSingleResizeFeedback(name + "11");
-    removeSingleResizeFeedback(name + "12");
-    removeSingleResizeFeedback(name + "2");
-    removeSingleResizeFeedback(name + "3");
-    removeSingleResizeFeedback(name + "4");
-    removeSingleResizeFeedback(name + "5");
-  }
-
-  private void removeSingleResizeFeedback(String name) {
-    Figure feedback = resizeFeedbacks.get(name);
-    if (feedback != null) {
-      removeFeedback(feedback);
-      resizeFeedbacks.remove(name);
-    }
-  }
-
-  private void addVerticalResizeLine(String suffix, C component, int x, Color color)
-      throws Exception {
-    Rectangle bounds = getControlModelBounds(component);
-    Polyline line = addFeedbackLine(x, bounds.y, x, bounds.bottom(), color);
-    line.setLineWidth(2);
-    line.setLineStyle(SWT.LINE_SOLID);
-    resizeFeedbacks.put("H" + suffix, line);
-  }
-
-  private void addVerticalResizeLine(String suffix, int x, int parentHeight, Color color) {
-    Polyline line = addFeedbackLine(x, parentHeight - 5, x, parentHeight + 5, color);
-    line.setLineWidth(3);
-    line.setLineStyle(SWT.LINE_SOLID);
-    resizeFeedbacks.put("H" + suffix, line);
-  }
-
-  private void addVerticalResizeLine(String suffix, int x, Color color) {
-    ICompositeInfo composite = layoutInfo.getComposite();
-    int parentHeight = composite.getClientArea().height;
-    Polyline line = addFeedbackLine(x, 0, x, parentHeight, color);
-    resizeFeedbacks.put("H" + suffix, line);
-  }
-
-  private void addHorizontalResizeLine(String suffix, C component, int y, Color color)
-      throws Exception {
-    Rectangle bounds = getControlModelBounds(component);
-    Polyline line = addFeedbackLine(bounds.x, y, bounds.right(), y, color);
-    line.setLineWidth(2);
-    line.setLineStyle(SWT.LINE_SOLID);
-    resizeFeedbacks.put("V" + suffix, line);
-  }
-
-  private void addHorizontalResizeLine(String suffix, int y, int parentWidth, Color color) {
-    Polyline line = addFeedbackLine(parentWidth - 5, y, parentWidth + 5, y, color);
-    line.setLineWidth(3);
-    line.setLineStyle(SWT.LINE_SOLID);
-    resizeFeedbacks.put("V" + suffix, line);
-  }
-
-  private void addHorizontalResizeLine(String suffix, int y, Color color) {
-    ICompositeInfo composite = layoutInfo.getComposite();
-    int parentWidth = composite.getClientArea().width;
-    Polyline line = addFeedbackLine(0, y, parentWidth, y, color);
-    resizeFeedbacks.put("V" + suffix, line);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Misc
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @SuppressWarnings("unchecked")
-  private FormLayoutEditPolicyClassic<C> getLayoutEditPolicy() {
-    FormLayoutEditPolicyClassic<C> editPolicy =
-        (FormLayoutEditPolicyClassic<C>) getHost().getParent().getEditPolicy(EditPolicy.LAYOUT_ROLE);
-    return editPolicy;
-  }
-
-  private static boolean hasDirection(int direction, int mask) {
-    return (direction & mask) == mask;
-  }
-
-  private boolean useSnap() {
-    return getLayoutEditPolicy().useSnap();
-  }
-
-  /**
-   * Sort controls by nearest distance from specified coordinate.
-   */
-  static <C extends IControlInfo> List<C> sortControlsByAxisRange(List<C> components,
-      final boolean isX,
-      final int value) {
-    List<C> newControls = Lists.newLinkedList();
-    newControls.addAll(components);
-    // proceed with sorting
-    Collections.sort(newControls, new Comparator<C>() {
-      @Override
-      public int compare(C o1, C o2) {
-        C component1 = o1;
-        C component2 = o2;
-        Rectangle bounds1 = getControlModelBounds(component1);
-        Rectangle bounds2 = getControlModelBounds(component2);
-        if (isX) {
-          int min1 = min(value, bounds1.x, bounds1.right());
-          int min2 = min(value, bounds2.x, bounds2.right());
-          return min1 - min2;
-        }
-        int min1 = min(value, bounds1.y, bounds1.bottom());
-        int min2 = min(value, bounds2.y, bounds2.bottom());
-        return min1 - min2;
-      }
-
-      private int min(int x, int a, int b) {
-        return Math.min(Math.abs(x - a), Math.abs(x - b));
-      }
-    });
-    // return sorted
-    return newControls;
-  }
-
-  private static void setX(Rectangle r, int x) {
-    r.width += r.x - x;
-    r.x = x;
-  }
-
-  private static void setY(Rectangle r, int y) {
-    r.height += r.y - y;
-    r.y = y;
-  }
-
-  public int getMouseQuadrant() {
-    return mouseQuadrant;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Location and size hints
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  TextFeedback xTextFeedback;
-  TextFeedback yTextFeedback;
-
-  private void hideSizeHints() {
-    if (xTextFeedback != null) {
-      xTextFeedback.remove();
-      xTextFeedback = null;
-    }
-    if (yTextFeedback != null) {
-      yTextFeedback.remove();
-      yTextFeedback = null;
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Inner classes
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final class ResizeToPercentOffsetCommand extends EditCommand {
-    private final int offset;
-    private final IFormAttachmentInfo<C> attachment;
-    private final int percent;
-
-    private ResizeToPercentOffsetCommand(IFormAttachmentInfo<C> attachment, int percent, int offset) {
-      super(attachment);
-      this.attachment = attachment;
-      this.percent = percent;
-      this.offset = offset;
-    }
-
-    @Override
-    protected void executeEdit() throws Exception {
-      layoutImpl.resizeToPercentOffset(attachment, percent, offset);
-    }
-  }
-  private final class ResizeToOffsetCommand extends EditCommand {
-    private final int offset;
-    private final IFormAttachmentInfo<C> attachment;
-    private final int parentDimension;
-
-    private ResizeToOffsetCommand(IFormAttachmentInfo<C> attachment, int parentDimension, int offset) {
-      super(attachment);
-      this.attachment = attachment;
-      this.parentDimension = parentDimension;
-      this.offset = offset;
-    }
-
-    @Override
-    protected void executeEdit() throws Exception {
-      layoutImpl.resizeToOffset(attachment, parentDimension, offset);
-    }
-  }
-  private final class ResizeToMarginCommand extends EditCommand {
-    private final IFormAttachmentInfo<C> attachment;
-    private final int marginValue;
-    private final int direction;
-
-    private ResizeToMarginCommand(IFormAttachmentInfo<C> attachment, int direction, int marginValue) {
-      super(attachment);
-      this.attachment = attachment;
-      this.direction = direction;
-      this.marginValue = marginValue;
-    }
-
-    @Override
-    protected void executeEdit() throws Exception {
-      layoutImpl.resizeToMargin(attachment, direction, marginValue);
-    }
-  }
-  private final class ResizeToControlCommand extends EditCommand {
-    private final IFormAttachmentInfo<C> attachment;
-    private final C control;
-    private final int offset;
-    private final int position;
-
-    public ResizeToControlCommand(IFormAttachmentInfo<C> attachment,
-        C control,
-        int position,
-        int offset) {
-      super(attachment);
-      this.attachment = attachment;
-      this.control = control;
-      this.position = position;
-      this.offset = offset;
-    }
-
-    @Override
-    protected void executeEdit() throws Exception {
-      layoutImpl.resizeToControl(attachment, control, position, offset);
-    }
-  }
+extends
+SelectionEditPolicy {
+	private static final int EXTENSION = 8;
+	private final Color baseColor = IColorConstants.blue;
+	private final Color offsetColor = IColorConstants.lightBlue;
+	private final IFormLayoutInfo<C> layoutInfo;
+	private final FormLayoutInfoImplClassic<C> layoutImpl;
+	private final AnchorFiguresClassic<C> anchorFigures;
+	private final ObjectInfo layoutModel;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FormSelectionEditPolicyClassic(IFormLayoutInfo<C> info) {
+		this.layoutInfo = info;
+		this.layoutModel = info.getUnderlyingModel();
+		this.layoutImpl = (FormLayoutInfoImplClassic<C>) layoutInfo.getImpl();
+		this.anchorFigures = new AnchorFiguresClassic<C>(this, layoutImpl);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Activate/deactivate
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void activate() {
+		super.activate();
+		installQuadrantHandler();
+	}
+
+	@Override
+	public void deactivate() {
+		super.deactivate();
+		uninstallQuadrantHandler();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Resize handles
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final Map<String, Figure> resizeFeedbacks = Maps.newHashMap();
+
+	@Override
+	protected List<Handle> createSelectionHandles() {
+		List<Handle> handles = Lists.newArrayList();
+		MoveHandle moveHandle = new MoveHandle(getHost());
+		moveHandle.setBorder(new LineBorder(IColorConstants.lightBlue));
+		handles.add(moveHandle);
+		handles.add(createResizeHandle(IPositionConstants.NORTH));
+		handles.add(createResizeHandle(IPositionConstants.SOUTH));
+		handles.add(createResizeHandle(IPositionConstants.WEST));
+		handles.add(createResizeHandle(IPositionConstants.EAST));
+		handles.add(createResizeHandle(IPositionConstants.SOUTH_EAST));
+		handles.add(createResizeHandle(IPositionConstants.SOUTH_WEST));
+		handles.add(createResizeHandle(IPositionConstants.NORTH_WEST));
+		handles.add(createResizeHandle(IPositionConstants.NORTH_EAST));
+		return handles;
+	}
+
+	private Handle createResizeHandle(int direction) {
+		GraphicalEditPart owner = getHost();
+		ResizeHandle handle = new ResizeHandle(owner, direction) {
+			@Override
+			protected Color getBorderColor() {
+				return isPrimary() ? IColorConstants.white : IColorConstants.lightBlue;
+			}
+
+			@Override
+			protected Color getFillColor() {
+				return isPrimary() ? IColorConstants.lightBlue : IColorConstants.white;
+			}
+		};
+		handle.setDragTrackerTool(new ResizeTracker(direction,
+				AbsoluteBasedSelectionEditPolicy.REQ_RESIZE));
+		return handle;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Source feedback and commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Figure sourceFeedbackFigure;
+
+	@Override
+	public boolean understandsRequest(Request request) {
+		return super.understandsRequest(request)
+				|| request.getType() == AbsoluteBasedSelectionEditPolicy.REQ_RESIZE;
+	}
+
+	@Override
+	public void showSourceFeedback(final Request request) {
+		if (AbsoluteBasedSelectionEditPolicy.REQ_RESIZE.equals(request.getType())) {
+			ExecutionUtils.runLog(new RunnableEx() {
+				@Override
+				public void run() throws Exception {
+					showResizeFeedback((ChangeBoundsRequest) request);
+				}
+			});
+		}
+	}
+
+	@Override
+	public void eraseSourceFeedback(Request request) {
+		super.eraseSourceFeedback(request);
+		if (sourceFeedbackFigure != null) {
+			removeFeedback(sourceFeedbackFigure);
+			sourceFeedbackFigure = null;
+		}
+		removeResizeFeedbacks();
+		hideSizeHints();
+	}
+
+	private void showResizeFeedback(ChangeBoundsRequest request) throws Exception {
+		FormLayoutEditPolicyClassic<C> layout = getLayoutEditPolicy();
+		if (sourceFeedbackFigure == null) {
+			sourceFeedbackFigure = new Figure();
+			sourceFeedbackFigure.setBorder(new LineBorder(AbsolutePolicyUtils.COLOR_OUTLINE));
+			addFeedback(sourceFeedbackFigure);
+		}
+		int layoutMarginLeft = FormUtils.getLayoutMarginLeft(layoutInfo);
+		int layoutMarginTop = FormUtils.getLayoutMarginTop(layoutInfo);
+		// prepare values from preferences
+		int hMargin = layoutInfo.getPreferences().getHorizontalContainerGap();
+		int phMargin = layoutInfo.getPreferences().getHorizontalPercentsGap();
+		int hwMargin = layoutInfo.getPreferences().getHorizontalComponentGap();
+		int sens = layoutInfo.getPreferences().getSnapSensitivity();
+		int vMargin = layoutInfo.getPreferences().getVerticalContainerGap();
+		int pvMargin = layoutInfo.getPreferences().getVerticalPercentsGap();
+		int vwMargin = layoutInfo.getPreferences().getVerticalComponentGap();
+		// hide any old resize feedbacks (it is more easy to add each time new feedback than track old ones and change their positions)
+		removeResizeFeedbacks();
+		@SuppressWarnings("unchecked")
+		C control = (C) getHost().getModel();
+		Rectangle bounds = getControlModelBounds(control);
+		bounds.performTranslate(request.getMoveDelta());
+		bounds.resize(request.getSizeDelta());
+		Point requestLocation = request.getLocation();
+		Point location =
+				requestLocation == null
+				? getControlModelBounds(control).getLocation()
+						: requestLocation.getCopy();
+		// find attachable controls
+		List<C> hAttachables = FormUtils.getAttachableControls(layoutInfo, control, true);
+		List<C> vAttachables = FormUtils.getAttachableControls(layoutInfo, control, false);
+		int direction = request.getResizeDirection();
+		// get parent info
+		int parentWidth = layoutInfo.getContainerSize().width;
+		int parentHeight = layoutInfo.getContainerSize().height;
+		Rectangle clientArea = layoutInfo.getComposite().getClientArea();
+		int parentClientAreaWidth = clientArea.width;
+		int parentClientAreaHeight = clientArea.height;
+		// size hints feedback
+		String xText = "", yText = "";
+		// West
+		if (hasDirection(direction, IPositionConstants.WEST)) {
+			removeSelectionFeedbacks("W");
+			int x = bounds.x;
+			boolean componentFound = false;
+			if (useSnap()) {
+				if (hwMargin > -1) {
+					for (Iterator<C> I = sortControlsByAxisRange(hAttachables, false, location.y).iterator(); I.hasNext()
+							&& !componentFound;) {
+						C child = I.next();
+						Rectangle childBounds = getControlModelBounds(child);
+						if (FormUtils.between(x - (childBounds.right() + hwMargin), 0, sens)) {
+							componentFound = true;
+							setX(bounds, childBounds.right() + hwMargin);
+							addVerticalResizeLine("12", child, childBounds.right(), IColorConstants.green);
+							addVerticalResizeLine("2", childBounds.right() + hwMargin, offsetColor);
+							xText =
+									(FormUtils.getVariableName(child) == null
+									? String.valueOf(childBounds.right())
+											: FormUtils.getVariableName(child)) + "+" + hwMargin;
+						} else if (FormUtils.between(x - childBounds.right(), -sens, hwMargin)) {
+							componentFound = true;
+							setX(bounds, childBounds.right());
+							addVerticalResizeLine("11", childBounds.right(), offsetColor);
+							addVerticalResizeLine("12", child, childBounds.right(), IColorConstants.green);
+							xText =
+									FormUtils.getVariableName(child) == null
+									? String.valueOf(childBounds.right())
+											: FormUtils.getVariableName(child);
+						} else if (FormUtils.between(x - childBounds.x, -sens, sens)) {
+							componentFound = true;
+							setX(bounds, childBounds.x);
+							addVerticalResizeLine("11", childBounds.x, offsetColor);
+							addVerticalResizeLine("12", child, childBounds.x, IColorConstants.green);
+							xText =
+									FormUtils.getVariableName(child) == null
+									? String.valueOf(childBounds.right())
+											: FormUtils.getVariableName(child);
+						}
+					}
+				}
+				if (!componentFound) {
+					boolean snappedToPercent = false;
+					List<Integer> formLayoutHPercents = layoutInfo.getPreferences().getHorizontalPercents();
+					for (Integer percent : formLayoutHPercents) {
+						int newX = (int) ((double) percent.intValue() / 100 * parentWidth) + layoutMarginLeft;
+						if (FormUtils.between(x - (newX + hwMargin), 0, sens) && phMargin > -1) {
+							setX(bounds, newX + phMargin);
+							addVerticalResizeLine("3", newX, baseColor);
+							addVerticalResizeLine("4", newX + phMargin, offsetColor);
+							xText = percent.toString() + "%+" + phMargin;
+							snappedToPercent = true;
+						} else if (FormUtils.between(x - newX, -sens, hwMargin)) {
+							setX(bounds, newX);
+							addVerticalResizeLine("3", newX, offsetColor);
+							xText = percent.toString() + "%";
+							snappedToPercent = true;
+						}
+						if (snappedToPercent) {
+							break;
+						}
+					}
+					if (!snappedToPercent) {
+						int leftPoint = hMargin + layoutMarginLeft;
+						if (hMargin > -1 && x < leftPoint) {
+							setX(bounds, leftPoint);
+							addVerticalResizeLine("2", leftPoint, offsetColor);
+						} else {
+							setX(bounds, FormUtils.snapGrid(x, sens));
+						}
+						xText = String.valueOf(bounds.width);
+					}
+				}
+			} else {
+				xText = String.valueOf(bounds.width);
+			}
+			addVerticalResizeLine("5", bounds.x, parentClientAreaHeight, IColorConstants.red);
+		}
+		// East
+		if (hasDirection(direction, IPositionConstants.EAST)) {
+			removeSelectionFeedbacks("E");
+			int x = bounds.right();
+			boolean componentFound = false;
+			if (useSnap()) {
+				if (hwMargin > -1) {
+					for (Iterator<C> I = sortControlsByAxisRange(hAttachables, false, location.y).iterator(); I.hasNext()
+							&& !componentFound;) {
+						C child = I.next();
+						Rectangle childBounds = getControlModelBounds(child);
+						if (FormUtils.between(childBounds.x - hwMargin - x, 0, sens)) {
+							componentFound = true;
+							bounds.width = childBounds.x - hwMargin - bounds.x;
+							addVerticalResizeLine("12", child, childBounds.x, IColorConstants.green);
+							addVerticalResizeLine("2", childBounds.x - hwMargin, offsetColor);
+							xText =
+									(FormUtils.getVariableName(child) == null
+									? String.valueOf(childBounds.x)
+											: FormUtils.getVariableName(child)) + "-" + hwMargin;
+						} else if (FormUtils.between(childBounds.x - x, -sens, hwMargin)) {
+							componentFound = true;
+							bounds.width = childBounds.x - bounds.x;
+							addVerticalResizeLine("11", childBounds.x, offsetColor);
+							addVerticalResizeLine("12", child, childBounds.x, IColorConstants.green);
+							xText =
+									FormUtils.getVariableName(child) == null
+									? String.valueOf(childBounds.x)
+											: FormUtils.getVariableName(child);
+						} else if (FormUtils.between(childBounds.right() - x, -sens, sens)) {
+							componentFound = true;
+							bounds.width = childBounds.right() - bounds.x;
+							addVerticalResizeLine("11", childBounds.right(), offsetColor);
+							addVerticalResizeLine("12", child, childBounds.right(), IColorConstants.green);
+							xText =
+									FormUtils.getVariableName(child) == null
+									? String.valueOf(childBounds.x)
+											: FormUtils.getVariableName(child);
+						}
+					}
+				}
+				if (!componentFound) {
+					boolean snappedToPercent = false;
+					List<Integer> formLayoutHPercents = layoutInfo.getPreferences().getHorizontalPercents();
+					for (Integer percent : formLayoutHPercents) {
+						int newX = (int) ((double) percent.intValue() / 100 * parentWidth) + layoutMarginLeft;
+						if (FormUtils.between(newX - hwMargin - x, 0, sens) && phMargin > -1) {
+							bounds.width = newX - bounds.x - phMargin;
+							addVerticalResizeLine("3", newX, baseColor);
+							addVerticalResizeLine("4", newX - phMargin, offsetColor);
+							xText = percent.toString() + "%-" + phMargin;
+							snappedToPercent = true;
+						} else if (FormUtils.between(newX - x, -sens, hwMargin)) {
+							bounds.width = newX - bounds.x;
+							addVerticalResizeLine("3", newX, offsetColor);
+							xText = percent.toString() + "%";
+							snappedToPercent = true;
+						}
+						if (snappedToPercent) {
+							break;
+						}
+					}
+					if (!snappedToPercent) {
+						int rightPoint = parentWidth - hMargin + layoutMarginLeft;
+						if (hMargin > -1 && x > rightPoint) {
+							bounds.width = rightPoint - bounds.x;
+							addVerticalResizeLine("2", rightPoint, offsetColor);
+						} else {
+							bounds.width = FormUtils.snapGrid(x, sens) - bounds.x;
+						}
+						xText = String.valueOf(bounds.width);
+					}
+				}
+			} else {
+				xText = String.valueOf(bounds.width);
+			}
+			addVerticalResizeLine("5", bounds.right(), parentClientAreaHeight, IColorConstants.red);
+		}
+		// North
+		if (hasDirection(direction, IPositionConstants.NORTH)) {
+			removeSelectionFeedbacks("N");
+			int y = bounds.y;
+			boolean componentFound = false;
+			if (useSnap()) {
+				if (vwMargin > -1) {
+					for (Iterator<C> I = sortControlsByAxisRange(vAttachables, true, location.x).iterator(); I.hasNext()
+							&& !componentFound;) {
+						C child = I.next();
+						Rectangle childBounds = getControlModelBounds(child);
+						if (FormUtils.between(y - (childBounds.bottom() + vwMargin), 0, sens)) {
+							componentFound = true;
+							setY(bounds, childBounds.bottom() + vwMargin);
+							addHorizontalResizeLine("12", child, childBounds.bottom(), IColorConstants.green);
+							addHorizontalResizeLine("2", childBounds.bottom() + vwMargin, offsetColor);
+							yText =
+									(FormUtils.getVariableName(child) == null
+									? String.valueOf(childBounds.bottom())
+											: FormUtils.getVariableName(child)) + "+" + vwMargin;
+						} else if (FormUtils.between(y - childBounds.bottom(), -sens, vwMargin)) {
+							componentFound = true;
+							setY(bounds, childBounds.bottom());
+							addHorizontalResizeLine("11", childBounds.bottom(), offsetColor);
+							addHorizontalResizeLine("12", child, childBounds.bottom(), IColorConstants.green);
+							yText =
+									FormUtils.getVariableName(child) == null
+									? String.valueOf(childBounds.bottom())
+											: FormUtils.getVariableName(child);
+						} else if (FormUtils.between(y - childBounds.y, -sens, sens)) {
+							componentFound = true;
+							setY(bounds, childBounds.y);
+							addHorizontalResizeLine("11", childBounds.y, offsetColor);
+							addHorizontalResizeLine("12", child, childBounds.y, IColorConstants.green);
+							yText =
+									FormUtils.getVariableName(child) == null
+									? String.valueOf(childBounds.bottom())
+											: FormUtils.getVariableName(child);
+						}
+					}
+				}
+				if (!componentFound) {
+					boolean snappedToPercent = false;
+					List<Integer> formLayoutVPercents = layoutInfo.getPreferences().getVerticalPercents();
+					for (Integer percent : formLayoutVPercents) {
+						int newY = (int) ((double) percent.intValue() / 100 * parentHeight) + layoutMarginTop;
+						if (FormUtils.between(y - (newY + vwMargin), 0, sens) && pvMargin > -1) {
+							setY(bounds, newY + pvMargin);
+							addHorizontalResizeLine("3", newY, baseColor);
+							addHorizontalResizeLine("4", newY + pvMargin, offsetColor);
+							yText = percent.toString() + "%+" + pvMargin;
+							snappedToPercent = true;
+						} else if (FormUtils.between(y - newY, -sens, vwMargin)) {
+							setY(bounds, newY);
+							addHorizontalResizeLine("3", newY, offsetColor);
+							yText = percent.toString() + "%";
+							snappedToPercent = true;
+						}
+						if (snappedToPercent) {
+							break;
+						}
+					}
+					if (!snappedToPercent) {
+						int topPoint = vMargin + layoutMarginTop;
+						if (vMargin > -1 && y < topPoint) {
+							setY(bounds, topPoint);
+							addHorizontalResizeLine("2", topPoint, offsetColor);
+						} else {
+							setY(bounds, FormUtils.snapGrid(y, sens));
+						}
+						yText = String.valueOf(bounds.height);
+					}
+				}
+			} else {
+				yText = String.valueOf(bounds.height);
+			}
+			addHorizontalResizeLine("5", bounds.y, parentClientAreaWidth, IColorConstants.red);
+		}
+		// South
+		if (hasDirection(direction, IPositionConstants.SOUTH)) {
+			removeSelectionFeedbacks("S");
+			int y = bounds.bottom();
+			boolean componentFound = false;
+			if (useSnap()) {
+				if (vwMargin > -1) {
+					for (Iterator<C> I = sortControlsByAxisRange(vAttachables, true, location.x).iterator(); I.hasNext()
+							&& !componentFound;) {
+						C child = I.next();
+						Rectangle childBounds = getControlModelBounds(child);
+						if (FormUtils.between(childBounds.y - vwMargin - y, 0, sens)) {
+							componentFound = true;
+							bounds.height = childBounds.y - vwMargin - bounds.y;
+							addHorizontalResizeLine("12", child, childBounds.y, IColorConstants.green);
+							addHorizontalResizeLine("2", childBounds.y - vwMargin, offsetColor);
+							yText =
+									(FormUtils.getVariableName(child) == null
+									? String.valueOf(childBounds.y)
+											: FormUtils.getVariableName(child)) + "-" + vwMargin;
+						} else if (FormUtils.between(childBounds.y - y, -sens, vwMargin)) {
+							componentFound = true;
+							bounds.height = childBounds.y - bounds.y;
+							addHorizontalResizeLine("11", childBounds.y, offsetColor);
+							addHorizontalResizeLine("12", child, childBounds.y, IColorConstants.green);
+							yText =
+									FormUtils.getVariableName(child) == null
+									? String.valueOf(childBounds.y)
+											: FormUtils.getVariableName(child);
+						} else if (FormUtils.between(childBounds.bottom() - y, -sens, sens)) {
+							componentFound = true;
+							bounds.height = childBounds.bottom() - bounds.y;
+							addHorizontalResizeLine("11", childBounds.bottom(), offsetColor);
+							addHorizontalResizeLine("12", child, childBounds.bottom(), IColorConstants.green);
+							yText =
+									FormUtils.getVariableName(child) == null
+									? String.valueOf(childBounds.y)
+											: FormUtils.getVariableName(child);
+						}
+					}
+				}
+				if (!componentFound) {
+					boolean snappedToPercent = false;
+					List<Integer> formLayoutVPercents = layoutInfo.getPreferences().getVerticalPercents();
+					for (Integer percent : formLayoutVPercents) {
+						int newY = (int) ((double) percent.intValue() / 100 * parentHeight) + layoutMarginTop;
+						if (FormUtils.between(newY - vwMargin - y, 0, sens) && pvMargin > -1) {
+							bounds.height = newY - pvMargin - bounds.y;
+							addHorizontalResizeLine("3", newY, baseColor);
+							addHorizontalResizeLine("4", newY - pvMargin, offsetColor);
+							yText = percent.toString() + "%-" + pvMargin;
+							snappedToPercent = true;
+						} else if (FormUtils.between(newY - y, -sens, vwMargin)) {
+							bounds.height = newY - bounds.y;
+							addHorizontalResizeLine("3", newY, offsetColor);
+							yText = percent.toString() + "%";
+							snappedToPercent = true;
+						}
+						if (snappedToPercent) {
+							break;
+						}
+					}
+					if (!snappedToPercent) {
+						int bottomPoint = parentHeight - vMargin + layoutMarginTop;
+						if (vMargin > -1 && y > bottomPoint) {
+							bounds.height = bottomPoint - bounds.y;
+							addHorizontalResizeLine("2", bottomPoint, offsetColor);
+						} else {
+							bounds.height = FormUtils.snapGrid(y, sens) - bounds.y;
+						}
+						yText = String.valueOf(bounds.height);
+					}
+				}
+			} else {
+				yText = String.valueOf(bounds.height);
+			}
+			addHorizontalResizeLine("5", bounds.bottom(), parentClientAreaWidth, IColorConstants.red);
+		}
+		{
+			// move the source feedback figure
+			Rectangle feedbackBounds = bounds.getCopy();
+			translateModelToFeedback(feedbackBounds);
+			sourceFeedbackFigure.setBounds(feedbackBounds);
+			if (xText.length() != 0) {
+				if (xTextFeedback == null) {
+					xTextFeedback = layout.createTextFeedback(true);
+					xTextFeedback.add();
+				}
+				xTextFeedback.setText(xText);
+				Dimension textSize = xTextFeedback.getSize();
+				Rectangle textBounds = bounds.getCopy();
+				textBounds.y = parentClientAreaHeight + 1;
+				int x =
+						hasDirection(direction, IPositionConstants.EAST) ? textBounds.right() : textBounds.x;
+				x -= textSize.width / 2;
+				if (x < 0) {
+					x = 0;
+				} else if (x + textSize.width > parentClientAreaWidth) {
+					x = parentClientAreaWidth - textSize.width;
+				}
+				textBounds.x = x;
+				translateModelToFeedback(textBounds);
+				xTextFeedback.setLocation(textBounds.getLocation());
+			}
+			if (yText.length() != 0) {
+				if (yTextFeedback == null) {
+					yTextFeedback = layout.createTextFeedback(false);
+					yTextFeedback.add();
+				}
+				yTextFeedback.setText(yText);
+				Dimension textSize = yTextFeedback.getSize();
+				Rectangle textBounds = bounds.getCopy();
+				textBounds.x = parentClientAreaWidth + 1;
+				int y =
+						hasDirection(direction, IPositionConstants.SOUTH) ? textBounds.bottom() : textBounds.y;
+				y -= textSize.height / 2;
+				if (y < 0) {
+					y = 0;
+				} else if (y + textSize.height > parentClientAreaHeight) {
+					y = parentClientAreaHeight - textSize.height;
+				}
+				textBounds.y = y;
+				translateModelToFeedback(textBounds);
+				yTextFeedback.setLocation(textBounds.getLocation());
+			}
+		}
+	}
+
+	@Override
+	public Command getCommand(final Request request) {
+		if (AbsoluteBasedSelectionEditPolicy.REQ_RESIZE.equals(request.getType())) {
+			return ExecutionUtils.<Command>runObjectLog(new RunnableObjectEx<Command>() {
+				@Override
+				public Command runObject() throws Exception {
+					return getResizeCommand((ChangeBoundsRequest) request);
+				}
+			}, null);
+		}
+		return null;
+	}
+
+	protected Command getResizeCommand(ChangeBoundsRequest request) throws Exception {
+		int layoutMarginLeft = FormUtils.getLayoutMarginLeft(layoutInfo);
+		int layoutMarginTop = FormUtils.getLayoutMarginTop(layoutInfo);
+		// prepare values from preferences
+		int hMargin = layoutInfo.getPreferences().getHorizontalContainerGap();
+		int phMargin = layoutInfo.getPreferences().getHorizontalPercentsGap();
+		int hwMargin = layoutInfo.getPreferences().getHorizontalComponentGap();
+		int sens = layoutInfo.getPreferences().getSnapSensitivity();
+		int vMargin = layoutInfo.getPreferences().getVerticalContainerGap();
+		int pvMargin = layoutInfo.getPreferences().getVerticalPercentsGap();
+		int vwMargin = layoutInfo.getPreferences().getVerticalComponentGap();
+		@SuppressWarnings("unchecked")
+		C control = (C) getHost().getModel();
+		CompoundEditCommand compoundCommand = new CompoundEditCommand(layoutModel);
+		Rectangle bounds = getControlModelBounds(control);
+		bounds.performTranslate(request.getMoveDelta());
+		bounds.resize(request.getSizeDelta());
+		Point requestLocation = request.getLocation();
+		Point location =
+				requestLocation == null
+				? getControlModelBounds(control).getLocation()
+						: requestLocation.getCopy();
+		//
+		List<C> hAttachables = FormUtils.getAttachableControls(layoutInfo, control, true);
+		List<C> vAttachables = FormUtils.getAttachableControls(layoutInfo, control, false);
+		final int direction = request.getResizeDirection();
+		//
+		int parentWidth = layoutInfo.getContainerSize().width;
+		int parentHeight = layoutInfo.getContainerSize().height;
+		@SuppressWarnings("unchecked")
+		IFormDataInfo<C> formDataInfo = (IFormDataInfo<C>) layoutInfo.getLayoutData2(control);
+		// West
+		if (hasDirection(direction, IPositionConstants.WEST)) {
+			int x = bounds.x;
+			Command cmd = null;
+			IFormAttachmentInfo<C> attachment = formDataInfo.getAttachment(IPositionConstants.LEFT);
+			if (useSnap()) {
+				if (hwMargin > -1) {
+					for (Iterator<C> I = sortControlsByAxisRange(hAttachables, false, location.y).iterator(); I.hasNext()
+							&& cmd == null;) {
+						C child = I.next();
+						Rectangle componentBounds = getControlModelBounds(child);
+						if (FormUtils.between(x - (componentBounds.right() + hwMargin), 0, sens)) {
+							cmd =
+									new ResizeToControlCommand(attachment, child, IPositionConstants.RIGHT, hwMargin);
+						} else if (FormUtils.between(x - componentBounds.right(), -sens, hwMargin)) {
+							cmd = new ResizeToControlCommand(attachment, child, IPositionConstants.RIGHT, 0);
+						} else if (FormUtils.between(x - componentBounds.x, -sens, sens)) {
+							cmd = new ResizeToControlCommand(attachment, child, IPositionConstants.LEFT, 0);
+						}
+					}
+				}
+				if (cmd == null) {
+					List<Integer> formLayoutHPercents = layoutInfo.getPreferences().getHorizontalPercents();
+					for (Integer percent : formLayoutHPercents) {
+						int newX = (int) ((double) percent.intValue() / 100 * parentWidth) + layoutMarginLeft;
+						if (FormUtils.between(x - (newX + hwMargin), 0, sens) && phMargin > -1) {
+							cmd = new ResizeToPercentOffsetCommand(attachment, percent.intValue(), phMargin);
+						} else if (FormUtils.between(x - newX, -sens, hwMargin)) {
+							cmd = new ResizeToPercentOffsetCommand(attachment, percent.intValue(), 0);
+						}
+						if (cmd != null) {
+							break;
+						}
+					}
+					if (cmd == null) {
+						if (hMargin > -1 && x < hMargin + layoutMarginLeft) {
+							cmd = new ResizeToMarginCommand(attachment, IPositionConstants.LEFT, hMargin);
+						} else {
+							cmd =
+									new ResizeToOffsetCommand(attachment, parentWidth, FormUtils.snapGrid(x
+											- layoutMarginLeft, sens));
+						}
+					}
+				}
+			} else {
+				cmd = new ResizeToOffsetCommand(attachment, parentWidth, x - layoutMarginLeft);
+			}
+			compoundCommand.add(cmd);
+		}
+		// East
+		if (hasDirection(direction, IPositionConstants.EAST)) {
+			int x = bounds.right();
+			Command cmd = null;
+			IFormAttachmentInfo<C> attachment = formDataInfo.getAttachment(IPositionConstants.RIGHT);
+			if (useSnap()) {
+				if (hwMargin > -1) {
+					for (Iterator<C> I = sortControlsByAxisRange(hAttachables, false, location.y).iterator(); I.hasNext()
+							&& cmd == null;) {
+						C child = I.next();
+						Rectangle componentBounds = getControlModelBounds(child);
+						if (FormUtils.between(componentBounds.x - hwMargin - x, 0, sens)) {
+							cmd =
+									new ResizeToControlCommand(attachment, child, IPositionConstants.LEFT, -hwMargin);
+						} else if (FormUtils.between(componentBounds.x - x, -sens, hwMargin)) {
+							cmd = new ResizeToControlCommand(attachment, child, IPositionConstants.LEFT, 0);
+						} else if (FormUtils.between(componentBounds.right() - x, -sens, sens)) {
+							cmd = new ResizeToControlCommand(attachment, child, IPositionConstants.RIGHT, 0);
+						}
+					}
+				}
+				if (cmd == null) {
+					List<Integer> formLayoutHPercents = layoutInfo.getPreferences().getHorizontalPercents();
+					for (Integer percent : formLayoutHPercents) {
+						int newX = (int) ((double) percent.intValue() / 100 * parentWidth) + layoutMarginLeft;
+						if (FormUtils.between(newX - hwMargin - x, 0, sens) && phMargin > -1) {
+							cmd = new ResizeToPercentOffsetCommand(attachment, percent.intValue(), -phMargin);
+						} else if (FormUtils.between(newX - x, -sens, hwMargin)) {
+							cmd = new ResizeToPercentOffsetCommand(attachment, percent.intValue(), 0);
+						}
+						if (cmd != null) {
+							break;
+						}
+					}
+					if (cmd == null) {
+						if (hMargin > -1 && x > parentWidth - hMargin + layoutMarginLeft) {
+							cmd = new ResizeToMarginCommand(attachment, IPositionConstants.RIGHT, hMargin);
+						} else {
+							cmd =
+									new ResizeToOffsetCommand(attachment, parentWidth, FormUtils.snapGrid(x
+											- layoutMarginLeft, sens));
+						}
+					}
+				}
+			} else {
+				cmd = new ResizeToOffsetCommand(attachment, parentWidth, x - layoutMarginLeft);
+			}
+			compoundCommand.add(cmd);
+		}
+		// North
+		if (hasDirection(direction, IPositionConstants.NORTH)) {
+			int y = bounds.y;
+			Command cmd = null;
+			IFormAttachmentInfo<C> attachment = formDataInfo.getAttachment(IPositionConstants.TOP);
+			if (useSnap()) {
+				if (vwMargin > -1) {
+					for (Iterator<C> I = sortControlsByAxisRange(vAttachables, true, location.x).iterator(); I.hasNext()
+							&& cmd == null;) {
+						C child = I.next();
+						Rectangle componentBounds = getControlModelBounds(child);
+						if (FormUtils.between(y - (componentBounds.bottom() + vwMargin), 0, sens)) {
+							cmd =
+									new ResizeToControlCommand(attachment, child, IPositionConstants.BOTTOM, vwMargin);
+						} else if (FormUtils.between(y - componentBounds.bottom(), -sens, vwMargin)) {
+							cmd = new ResizeToControlCommand(attachment, child, IPositionConstants.BOTTOM, 0);
+						} else if (FormUtils.between(y - componentBounds.y, -sens, sens)) {
+							cmd = new ResizeToControlCommand(attachment, child, IPositionConstants.TOP, 0);
+						}
+					}
+				}
+				if (cmd == null) {
+					List<Integer> formLayoutVPercents = layoutInfo.getPreferences().getVerticalPercents();
+					for (Integer percent : formLayoutVPercents) {
+						int newY = (int) ((double) percent.intValue() / 100 * parentHeight) + layoutMarginTop;
+						if (FormUtils.between(y - (newY + vwMargin), 0, sens) && pvMargin > -1) {
+							cmd = new ResizeToPercentOffsetCommand(attachment, percent.intValue(), pvMargin);
+						} else if (FormUtils.between(y - newY, -sens, vwMargin)) {
+							cmd = new ResizeToPercentOffsetCommand(attachment, percent.intValue(), 0);
+						}
+						if (cmd != null) {
+							break;
+						}
+					}
+					if (cmd == null) {
+						if (vMargin > -1 && y < vMargin + layoutMarginTop) {
+							cmd = new ResizeToMarginCommand(attachment, IPositionConstants.TOP, vMargin);
+						} else {
+							cmd =
+									new ResizeToOffsetCommand(attachment, parentHeight, FormUtils.snapGrid(y
+											- layoutMarginTop, sens));
+						}
+					}
+				}
+			} else {
+				cmd = new ResizeToOffsetCommand(attachment, parentHeight, y - layoutMarginTop);
+			}
+			compoundCommand.add(cmd);
+		}
+		// South
+		if (hasDirection(direction, IPositionConstants.SOUTH)) {
+			int y = bounds.bottom();
+			Command cmd = null;
+			IFormAttachmentInfo<C> attachment = formDataInfo.getAttachment(IPositionConstants.BOTTOM);
+			if (useSnap()) {
+				if (vwMargin > -1) {
+					for (Iterator<C> I = sortControlsByAxisRange(vAttachables, true, location.x).iterator(); I.hasNext()
+							&& cmd == null;) {
+						C child = I.next();
+						Rectangle componentBounds = getControlModelBounds(child);
+						if (FormUtils.between(componentBounds.y - vwMargin - y, 0, sens)) {
+							cmd =
+									new ResizeToControlCommand(attachment, child, IPositionConstants.TOP, -vwMargin);
+						} else if (FormUtils.between(componentBounds.y - y, -sens, vwMargin)) {
+							cmd = new ResizeToControlCommand(attachment, child, IPositionConstants.TOP, 0);
+						} else if (FormUtils.between(componentBounds.bottom() - y, -sens, sens)) {
+							cmd = new ResizeToControlCommand(attachment, child, IPositionConstants.BOTTOM, 0);
+						}
+					}
+				}
+				if (cmd == null) {
+					List<Integer> formLayoutVPercents = layoutInfo.getPreferences().getVerticalPercents();
+					for (Integer percent : formLayoutVPercents) {
+						int newY = (int) ((double) percent.intValue() / 100 * parentHeight) + layoutMarginTop;
+						if (FormUtils.between(newY - vwMargin - y, 0, sens)) {
+							cmd = new ResizeToPercentOffsetCommand(attachment, percent.intValue(), -pvMargin);
+						} else if (FormUtils.between(newY - y, -sens, vwMargin)) {
+							cmd = new ResizeToPercentOffsetCommand(attachment, percent.intValue(), 0);
+						}
+						if (cmd != null) {
+							break;
+						}
+					}
+					if (cmd == null) {
+						if (vMargin > -1 && y > parentHeight - vMargin + layoutMarginTop) {
+							cmd = new ResizeToMarginCommand(attachment, IPositionConstants.BOTTOM, vMargin);
+						} else {
+							cmd =
+									new ResizeToOffsetCommand(attachment, parentHeight, FormUtils.snapGrid(y
+											- layoutMarginTop, sens));
+						}
+					}
+				}
+			} else {
+				cmd = new ResizeToOffsetCommand(attachment, parentHeight, y - layoutMarginTop);
+			}
+			compoundCommand.add(cmd);
+		}
+		return compoundCommand;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Selection feedback
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Map<String, Figure> selectionFeedbacks;
+
+	@Override
+	protected void showSelection() {
+		// check that part is still selected: Case 9967 - we restore selection in FormLayoutEditPolicy.eraseMoveFeedback()
+		if (getHost().getSelected() == EditPart.SELECTED_NONE) {
+			return;
+		}
+		// show default selection (probably handles)
+		super.showSelection();
+		//
+		if (!(getHost().getModel() instanceof IControlInfo)) {
+			return;
+		}
+		//
+		if (selectionFeedbacks == null) {
+			try {
+				selectionFeedbacks = Maps.newHashMap();
+				addSideLinesFeedbacks();
+			} catch (Throwable e) {
+				DesignerPlugin.log(e);
+			}
+		}
+		anchorFigures.hide();
+		anchorFigures.show();
+	}
+
+	@Override
+	public void hideSelection() {
+		super.hideSelection();
+		hideSelectionFeedbacks();
+		anchorFigures.hide();
+	}
+
+	private void hideSelectionFeedbacks() {
+		if (selectionFeedbacks != null) {
+			for (Figure feedback : selectionFeedbacks.values()) {
+				FigureUtils.removeFigure(feedback);
+			}
+			selectionFeedbacks = null;
+		}
+	}
+
+	private boolean isVSnapPercent(int percent) {
+		List<Integer> formLayoutVPercents = layoutInfo.getPreferences().getVerticalPercents();
+		return formLayoutVPercents.indexOf(percent) != -1;
+	}
+
+	private boolean isHSnapPercent(int percent) {
+		List<Integer> formLayoutHPercents = layoutInfo.getPreferences().getHorizontalPercents();
+		return formLayoutHPercents.indexOf(percent) != -1;
+	}
+
+	/**
+	 * Used for add vertical feedback lines for horizontal form attachments
+	 */
+	private void addVerticalSideLinesFeedbacks(int parentWidth,
+			int parentHeight,
+			Rectangle bounds,
+			IFormAttachmentInfo<C> attachment) {
+		if (attachment == null) {
+			return;
+		}
+		boolean isLeft = layoutImpl.isLeft(attachment);
+		int sideMargin = layoutInfo.getPreferences().getHorizontalContainerGap();
+		if (layoutImpl.isParentAttachment(attachment)) {
+			int percent = attachment.getNumerator();
+			int offset = attachment.getOffset();
+			if (isLeft && percent == 0) {
+				if (offset == sideMargin) {
+					addVerticalFeedbackLine("W1", bounds.x, 0, parentHeight, offsetColor);
+				} else {
+					int thisY = bounds.getCenter().y;
+					addHorizontalFeedbackLine("W1", thisY, 0, bounds.x, offsetColor);
+					addLineEndFigure("W2", 0, thisY, IPositionConstants.LEFT, offsetColor);
+				}
+			} else if (!isLeft && percent == 100) {
+				if (offset == -sideMargin) {
+					addVerticalFeedbackLine("E1", bounds.right(), 0, parentHeight, offsetColor);
+				} else {
+					int thisY = bounds.getCenter().y;
+					addHorizontalFeedbackLine("E1", thisY, bounds.right(), parentWidth, offsetColor);
+					addLineEndFigure("E2", parentWidth, thisY, IPositionConstants.RIGHT, offsetColor);
+				}
+			} else if (isHSnapPercent(percent)) {
+				int percentX;
+				if (isLeft) {
+					percentX = bounds.x - offset;
+					if (offset == layoutInfo.getPreferences().getHorizontalPercentsGap()) {
+						addVerticalFeedbackLine("W2", percentX + offset, 0, parentHeight, offsetColor);
+					}
+				} else {
+					percentX = bounds.right() - offset;
+					if (offset == -layoutInfo.getPreferences().getHorizontalPercentsGap()) {
+						addVerticalFeedbackLine("E2", percentX + offset, 0, parentHeight, offsetColor);
+					}
+				}
+				addVerticalFeedbackLine(isLeft ? "W3" : "E3", percentX, 0, parentHeight, baseColor);
+			}
+		} else if (layoutImpl.isControlAttachment(attachment)
+				&& layoutImpl.shouldShowConstraintLine(attachment)) {
+			addSideLinesForControlAttachment(bounds, attachment, false);
+		}
+	}
+
+	/**
+	 * Used for add horizontal feedback lines for vertical form attachments
+	 */
+	private void addHorizontalSideLinesFeedbacks(int parentWidth,
+			int parentHeight,
+			Rectangle bounds,
+			IFormAttachmentInfo<C> attachment) {
+		if (attachment == null) {
+			return;
+		}
+		boolean isTop = layoutImpl.isTop(attachment);
+		int sideMargin = layoutInfo.getPreferences().getVerticalContainerGap();
+		if (layoutImpl.isParentAttachment(attachment)) {
+			int percent = attachment.getNumerator();
+			int offset = attachment.getOffset();
+			if (isTop && percent == 0) {
+				if (offset == sideMargin) {
+					addHorizontalFeedbackLine("N1", bounds.y, 0, parentWidth, offsetColor);
+				} else {
+					int thisX = bounds.getCenter().x;
+					addVerticalFeedbackLine("N1", thisX, 0, bounds.y, offsetColor);
+					addLineEndFigure("N2", thisX, 0, IPositionConstants.TOP, offsetColor);
+				}
+			} else if (!isTop && percent == 100) {
+				if (offset == -sideMargin) {
+					addHorizontalFeedbackLine("S1", bounds.bottom(), 0, parentWidth, offsetColor);
+				} else {
+					int thisX = bounds.getCenter().x;
+					addVerticalFeedbackLine("S1", thisX, bounds.bottom(), parentHeight, offsetColor);
+					addLineEndFigure("S2", thisX, parentHeight, IPositionConstants.BOTTOM, offsetColor);
+				}
+			} else if (isVSnapPercent(percent)) {
+				int percentY;
+				if (isTop) {
+					percentY = bounds.y - offset;
+					if (offset == layoutInfo.getPreferences().getVerticalPercentsGap()) {
+						addHorizontalFeedbackLine("N2", percentY + offset, 0, parentWidth, offsetColor);
+					}
+				} else {
+					percentY = bounds.bottom() - offset;
+					if (offset == -layoutInfo.getPreferences().getVerticalPercentsGap()) {
+						addHorizontalFeedbackLine("S2", percentY + offset, 0, parentWidth, offsetColor);
+					}
+				}
+				addHorizontalFeedbackLine(isTop ? "N3" : "S3", percentY, 0, parentWidth, baseColor);
+			}
+		} else if (layoutImpl.isControlAttachment(attachment)
+				&& layoutImpl.shouldShowConstraintLine(attachment)) {
+			addSideLinesForControlAttachment(bounds, attachment, true);
+		}
+	}
+
+	private void addSideLinesFeedbacks() throws Exception {
+		@SuppressWarnings("unchecked")
+		C control = (C) getHost().getModel();
+		ICompositeInfo composite = layoutInfo.getComposite();
+		int parentWidth = composite.getClientArea().width;
+		int parentHeight = composite.getClientArea().height;
+		Rectangle bounds = getControlModelBounds(control);
+		addVerticalSideLinesFeedbacks(
+				parentWidth,
+				parentHeight,
+				bounds,
+				layoutImpl.getAttachment(control, IPositionConstants.LEFT));
+		addVerticalSideLinesFeedbacks(
+				parentWidth,
+				parentHeight,
+				bounds,
+				layoutImpl.getAttachment(control, IPositionConstants.RIGHT));
+		addHorizontalSideLinesFeedbacks(
+				parentWidth,
+				parentHeight,
+				bounds,
+				layoutImpl.getAttachment(control, IPositionConstants.TOP));
+		addHorizontalSideLinesFeedbacks(
+				parentWidth,
+				parentHeight,
+				bounds,
+				layoutImpl.getAttachment(control, IPositionConstants.BOTTOM));
+	}
+
+	/**
+	 * @param b
+	 *          Control bounds in parent coordinates
+	 * @param attachment
+	 * @param vertical
+	 */
+	private void addSideLinesForControlAttachment(Rectangle b,
+			IFormAttachmentInfo<C> attachment,
+			boolean vertical) {
+		C alignControl = attachment.getControl();
+		IEditPartViewer viewer = getHost().getViewer();
+		GraphicalEditPart bindPart = (GraphicalEditPart) viewer.getEditPartByModel(alignControl);
+		if (bindPart == null) {
+			return;
+		}
+		Rectangle bounds = b.getCopy();
+		Rectangle bindBounds = getControlModelBounds(alignControl);
+		// transpose bounds for vertical
+		if (vertical) {
+			bindBounds.transpose();
+			bounds.transpose();
+		}
+		int x;
+		int controlAlign = attachment.getAlignment();
+		if (controlAlign == SWT.LEFT || controlAlign == SWT.TOP) {
+			x = bindBounds.x;
+		} else {
+			x = bindBounds.right();
+		}
+		//
+		int y1 = Math.min(bindBounds.y, bounds.y);
+		int y2 = Math.max(bindBounds.bottom(), bounds.bottom());
+		int offset = attachment.getOffset();
+		y1 -= EXTENSION;
+		y2 += EXTENSION;
+		if (vertical) {
+			addHorizontalFeedbackLine(
+					layoutImpl.isTop(attachment) ? "N6" : "S6",
+							x + offset,
+							y1,
+							y2,
+							offsetColor);
+		} else {
+			addVerticalFeedbackLine(
+					layoutImpl.isLeft(attachment) ? "W6" : "E6",
+							x + offset,
+							y1,
+							y2,
+							offsetColor);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utilities for selection feedback
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void addVerticalFeedbackLine(String name, int x, int y1, int y2, Color color) {
+		selectionFeedbacks.put(name, addFeedbackLine(x, y1, x, y2, color));
+	}
+
+	private void addHorizontalFeedbackLine(String name, int y, int x1, int x2, Color color) {
+		selectionFeedbacks.put(name, addFeedbackLine(x1, y, x2, y, color));
+	}
+
+	private void addLineEndFigure(String name, int x, int y, int alignment, Color color) {
+		selectionFeedbacks.put(name, addLineEndFigure(x, y, alignment, color));
+	}
+
+	private void removeSelectionFeedbacks(String prefix) {
+		for (Iterator<String> I = selectionFeedbacks.keySet().iterator(); I.hasNext();) {
+			String key = I.next();
+			if (!key.startsWith(prefix)) {
+				continue;
+			}
+			Figure feedback = selectionFeedbacks.get(key);
+			feedback.getParent().remove(feedback);
+			I.remove();
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utilities for feedbacks
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Polyline addFeedbackLine(int x1, int y1, int x2, int y2, Color color) {
+		Polyline line = new Polyline();
+		Point p1 = new Point(x1, y1);
+		translateModelToFeedback(p1);
+		Point p2 = new Point(x2, y2);
+		translateModelToFeedback(p2);
+		line.addPoint(p1);
+		line.addPoint(p2);
+		line.setForeground(color);
+		line.setLineStyle(SWT.LINE_DOT);
+		// add feedback
+		addFeedback(line);
+		return line;
+	}
+
+	private LineEndFigure addLineEndFigure(int x, int y, int alignment, Color color) {
+		Point point = new Point(x, y);
+		translateModelToFeedback(point);
+		LineEndFigure lineEndFigure = new LineEndFigure(alignment, color);
+		Dimension size = lineEndFigure.getSize();
+		lineEndFigure.setLocation(new Point(point.x - size.width / 2, point.y - size.height / 2));
+		addFeedback(lineEndFigure);
+		return lineEndFigure;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Coordinates utilities
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Returns model bounds of the control in parent client area coordinates
+	 *
+	 * @param control
+	 * @return
+	 */
+	public static <C extends IControlInfo> Rectangle getControlModelBounds(C control) {
+		return control.getModelBounds().getCopy();
+	}
+
+	private void translateModelToFeedback(Translatable t) {
+		PolicyUtils.translateModelToFeedback(this, t);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Quadrant feedback
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private IMouseTrackListener mouseTrackListener;
+	private IMouseMoveListener mouseMoveListener;
+	private IFigureListener figureListener;
+	private Figure hoverFigure;
+	private int mouseQuadrant;
+
+	private void installQuadrantHandler() {
+		mouseQuadrant = -1;
+		final Figure figure = getHostFigure();
+		// add mouse listener
+		mouseTrackListener = new IMouseTrackListener() {
+			@Override
+			public void mouseHover(MouseEvent event) {
+			}
+
+			@Override
+			public void mouseExit(MouseEvent event) {
+				mouseQuadrant = -1;
+				figure.repaint();
+			}
+
+			@Override
+			public void mouseEnter(MouseEvent event) {
+			}
+		};
+		mouseMoveListener = new IMouseMoveListener() {
+			@Override
+			public void mouseMove(MouseEvent event) {
+				int oldQuadrant = mouseQuadrant;
+				Rectangle r = figure.getBounds().getCopy();
+				if (event.x < r.width / 2 && event.y < r.height / 2) {
+					mouseQuadrant = 0;
+				} else if (event.y < r.height / 2) {
+					mouseQuadrant = 1;
+				} else if (event.x < r.width / 2) {
+					mouseQuadrant = 2;
+				} else {
+					mouseQuadrant = 3;
+				}
+				if (mouseQuadrant != oldQuadrant) {
+					figure.repaint();
+				}
+			}
+		};
+		figureListener = new IFigureListener() {
+			@Override
+			public void figureReparent(Figure source, Figure oldParent, Figure newParent) {
+			}
+
+			@Override
+			public void figureMoved(Figure source) {
+				Rectangle bounds = figure.getBounds();
+				hoverFigure.setBounds(new Rectangle(0, 0, bounds.width, bounds.height));
+			}
+		};
+		hoverFigure = new Figure() {
+			@Override
+			protected void paintClientArea(Graphics graphics) {
+				if (mouseQuadrant == -1) {
+					return;
+				}
+				graphics.setBackgroundColor(IColorConstants.blue);
+				Rectangle bounds = figure.getBounds();
+				PointList points = new PointList();
+				switch (mouseQuadrant) {
+				case 0 :
+					points.addPoint(1, 1);
+					points.addPoint(7, 1);
+					points.addPoint(1, 7);
+					break;
+				case 1 :
+					points.addPoint(bounds.width - 1, 1);
+					points.addPoint(bounds.width - 7, 1);
+					points.addPoint(bounds.width - 1, 7);
+					break;
+				case 2 :
+					points.addPoint(1, bounds.height - 1);
+					points.addPoint(7, bounds.height - 1);
+					points.addPoint(1, bounds.height - 7);
+					break;
+				case 3 :
+					points.addPoint(bounds.width - 1, bounds.height - 1);
+					points.addPoint(bounds.width - 7, bounds.height - 1);
+					points.addPoint(bounds.width - 1, bounds.height - 7);
+					break;
+				default :
+					break;
+				}
+				graphics.fillPolygon(points);
+			}
+		};
+		hoverFigure.setOpaque(false);
+		Rectangle figureBounds = figure.getBounds();
+		hoverFigure.setBounds(new Rectangle(0, 0, figureBounds.width, figureBounds.height));
+		hoverFigure.addMouseTrackListener(mouseTrackListener);
+		hoverFigure.addMouseMoveListener(mouseMoveListener);
+		figure.add(hoverFigure, 0);
+		figure.addFigureListener(figureListener);
+	}
+
+	private void uninstallQuadrantHandler() {
+		getHostFigure().removeFigureListener(figureListener);
+		FigureUtils.removeFigure(hoverFigure);
+	}
+
+	private void removeResizeFeedbacks() {
+		removeResizeFeedback("H");
+		removeResizeFeedback("V");
+	}
+
+	private void removeResizeFeedback(String name) {
+		removeSingleResizeFeedback(name + "11");
+		removeSingleResizeFeedback(name + "12");
+		removeSingleResizeFeedback(name + "2");
+		removeSingleResizeFeedback(name + "3");
+		removeSingleResizeFeedback(name + "4");
+		removeSingleResizeFeedback(name + "5");
+	}
+
+	private void removeSingleResizeFeedback(String name) {
+		Figure feedback = resizeFeedbacks.get(name);
+		if (feedback != null) {
+			removeFeedback(feedback);
+			resizeFeedbacks.remove(name);
+		}
+	}
+
+	private void addVerticalResizeLine(String suffix, C component, int x, Color color)
+			throws Exception {
+		Rectangle bounds = getControlModelBounds(component);
+		Polyline line = addFeedbackLine(x, bounds.y, x, bounds.bottom(), color);
+		line.setLineWidth(2);
+		line.setLineStyle(SWT.LINE_SOLID);
+		resizeFeedbacks.put("H" + suffix, line);
+	}
+
+	private void addVerticalResizeLine(String suffix, int x, int parentHeight, Color color) {
+		Polyline line = addFeedbackLine(x, parentHeight - 5, x, parentHeight + 5, color);
+		line.setLineWidth(3);
+		line.setLineStyle(SWT.LINE_SOLID);
+		resizeFeedbacks.put("H" + suffix, line);
+	}
+
+	private void addVerticalResizeLine(String suffix, int x, Color color) {
+		ICompositeInfo composite = layoutInfo.getComposite();
+		int parentHeight = composite.getClientArea().height;
+		Polyline line = addFeedbackLine(x, 0, x, parentHeight, color);
+		resizeFeedbacks.put("H" + suffix, line);
+	}
+
+	private void addHorizontalResizeLine(String suffix, C component, int y, Color color)
+			throws Exception {
+		Rectangle bounds = getControlModelBounds(component);
+		Polyline line = addFeedbackLine(bounds.x, y, bounds.right(), y, color);
+		line.setLineWidth(2);
+		line.setLineStyle(SWT.LINE_SOLID);
+		resizeFeedbacks.put("V" + suffix, line);
+	}
+
+	private void addHorizontalResizeLine(String suffix, int y, int parentWidth, Color color) {
+		Polyline line = addFeedbackLine(parentWidth - 5, y, parentWidth + 5, y, color);
+		line.setLineWidth(3);
+		line.setLineStyle(SWT.LINE_SOLID);
+		resizeFeedbacks.put("V" + suffix, line);
+	}
+
+	private void addHorizontalResizeLine(String suffix, int y, Color color) {
+		ICompositeInfo composite = layoutInfo.getComposite();
+		int parentWidth = composite.getClientArea().width;
+		Polyline line = addFeedbackLine(0, y, parentWidth, y, color);
+		resizeFeedbacks.put("V" + suffix, line);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Misc
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@SuppressWarnings("unchecked")
+	private FormLayoutEditPolicyClassic<C> getLayoutEditPolicy() {
+		FormLayoutEditPolicyClassic<C> editPolicy =
+				(FormLayoutEditPolicyClassic<C>) getHost().getParent().getEditPolicy(EditPolicy.LAYOUT_ROLE);
+		return editPolicy;
+	}
+
+	private static boolean hasDirection(int direction, int mask) {
+		return (direction & mask) == mask;
+	}
+
+	private boolean useSnap() {
+		return getLayoutEditPolicy().useSnap();
+	}
+
+	/**
+	 * Sort controls by nearest distance from specified coordinate.
+	 */
+	static <C extends IControlInfo> List<C> sortControlsByAxisRange(List<C> components,
+			final boolean isX,
+			final int value) {
+		List<C> newControls = Lists.newLinkedList();
+		newControls.addAll(components);
+		// proceed with sorting
+		Collections.sort(newControls, new Comparator<C>() {
+			@Override
+			public int compare(C o1, C o2) {
+				C component1 = o1;
+				C component2 = o2;
+				Rectangle bounds1 = getControlModelBounds(component1);
+				Rectangle bounds2 = getControlModelBounds(component2);
+				if (isX) {
+					int min1 = min(value, bounds1.x, bounds1.right());
+					int min2 = min(value, bounds2.x, bounds2.right());
+					return min1 - min2;
+				}
+				int min1 = min(value, bounds1.y, bounds1.bottom());
+				int min2 = min(value, bounds2.y, bounds2.bottom());
+				return min1 - min2;
+			}
+
+			private int min(int x, int a, int b) {
+				return Math.min(Math.abs(x - a), Math.abs(x - b));
+			}
+		});
+		// return sorted
+		return newControls;
+	}
+
+	private static void setX(Rectangle r, int x) {
+		r.width += r.x - x;
+		r.x = x;
+	}
+
+	private static void setY(Rectangle r, int y) {
+		r.height += r.y - y;
+		r.y = y;
+	}
+
+	public int getMouseQuadrant() {
+		return mouseQuadrant;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Location and size hints
+	//
+	////////////////////////////////////////////////////////////////////////////
+	TextFeedback xTextFeedback;
+	TextFeedback yTextFeedback;
+
+	private void hideSizeHints() {
+		if (xTextFeedback != null) {
+			xTextFeedback.remove();
+			xTextFeedback = null;
+		}
+		if (yTextFeedback != null) {
+			yTextFeedback.remove();
+			yTextFeedback = null;
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Inner classes
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final class ResizeToPercentOffsetCommand extends EditCommand {
+		private final int offset;
+		private final IFormAttachmentInfo<C> attachment;
+		private final int percent;
+
+		private ResizeToPercentOffsetCommand(IFormAttachmentInfo<C> attachment, int percent, int offset) {
+			super(attachment);
+			this.attachment = attachment;
+			this.percent = percent;
+			this.offset = offset;
+		}
+
+		@Override
+		protected void executeEdit() throws Exception {
+			layoutImpl.resizeToPercentOffset(attachment, percent, offset);
+		}
+	}
+	private final class ResizeToOffsetCommand extends EditCommand {
+		private final int offset;
+		private final IFormAttachmentInfo<C> attachment;
+		private final int parentDimension;
+
+		private ResizeToOffsetCommand(IFormAttachmentInfo<C> attachment, int parentDimension, int offset) {
+			super(attachment);
+			this.attachment = attachment;
+			this.parentDimension = parentDimension;
+			this.offset = offset;
+		}
+
+		@Override
+		protected void executeEdit() throws Exception {
+			layoutImpl.resizeToOffset(attachment, parentDimension, offset);
+		}
+	}
+	private final class ResizeToMarginCommand extends EditCommand {
+		private final IFormAttachmentInfo<C> attachment;
+		private final int marginValue;
+		private final int direction;
+
+		private ResizeToMarginCommand(IFormAttachmentInfo<C> attachment, int direction, int marginValue) {
+			super(attachment);
+			this.attachment = attachment;
+			this.direction = direction;
+			this.marginValue = marginValue;
+		}
+
+		@Override
+		protected void executeEdit() throws Exception {
+			layoutImpl.resizeToMargin(attachment, direction, marginValue);
+		}
+	}
+	private final class ResizeToControlCommand extends EditCommand {
+		private final IFormAttachmentInfo<C> attachment;
+		private final C control;
+		private final int offset;
+		private final int position;
+
+		public ResizeToControlCommand(IFormAttachmentInfo<C> attachment,
+				C control,
+				int position,
+				int offset) {
+			super(attachment);
+			this.attachment = attachment;
+			this.control = control;
+			this.position = position;
+			this.offset = offset;
+		}
+
+		@Override
+		protected void executeEdit() throws Exception {
+			layoutImpl.resizeToControl(attachment, control, position, offset);
+		}
+	}
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/form/FormUtils.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/form/FormUtils.java
index 03fe252e5..6adf012bb 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/form/FormUtils.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/form/FormUtils.java
@@ -27,93 +27,93 @@
  * @author mitin_aa
  */
 public final class FormUtils {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Private constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private FormUtils() {
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static <C extends IControlInfo> List<C> getAttachableControls(IFormLayoutInfo<C> layout,
-      C firstControl,
-      boolean horizontal) throws Exception {
-    int side = horizontal ? IPositionConstants.LEFT : IPositionConstants.TOP;
-    FormLayoutInfoImplClassic<C> impl = (FormLayoutInfoImplClassic<C>) layout.getImpl();
-    return impl.getAlignControlInfos(firstControl, side);
-  }
-
-  public static <C extends IControlInfo> List<C> getAttachableControls(IFormLayoutInfo<C> layout) {
-    return layout.getControls();
-  }
-
-  public static <C extends IControlInfo> String getVariableName(final C child) {
-    return ExecutionUtils.runObjectIgnore(new RunnableObjectEx<String>() {
-      @Override
-      public String runObject() throws Exception {
-        return child.getPresentation().getText();
-      }
-    }, "<unknown>");
-  }
-
-  /**
-   * Check whether x is in interval [a, b]
-   */
-  public static boolean between(int x, int a, int b) {
-    return x >= a && x <= b;
-  }
-
-  public static int snapGrid(int value, int snap) {
-    return applyGrid(value, snap);
-  }
-
-  /**
-   * Simple math round to nearest integer, based on grid step.
-   */
-  private static int applyGrid(int value, int step) {
-    return value / step * step;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils returning the layout margin according to side
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static <C extends IControlInfo> int getLayoutMarginLeft(IFormLayoutInfo<C> layout) {
-    return getLayoutMargin(layout, "marginLeft") + getLayoutMargin(layout, "marginWidth");
-  }
-
-  public static <C extends IControlInfo> int getLayoutMarginRight(IFormLayoutInfo<C> layout) {
-    return getLayoutMargin(layout, "marginRight") + getLayoutMargin(layout, "marginWidth");
-  }
-
-  public static <C extends IControlInfo> int getLayoutMarginTop(IFormLayoutInfo<C> layout) {
-    return getLayoutMargin(layout, "marginTop") + getLayoutMargin(layout, "marginHeight");
-  }
-
-  public static <C extends IControlInfo> int getLayoutMarginBottom(IFormLayoutInfo<C> layout) {
-    return getLayoutMargin(layout, "marginBottom") + getLayoutMargin(layout, "marginHeight");
-  }
-
-  public static <C extends IControlInfo> Insets getLayoutMargins(IFormLayoutInfo<C> layout) {
-    return new Insets(getLayoutMarginTop(layout),
-        getLayoutMarginLeft(layout),
-        getLayoutMarginBottom(layout),
-        getLayoutMarginRight(layout));
-  }
-
-  private static <C extends IControlInfo> int getLayoutMargin(IFormLayoutInfo<C> layout,
-      String marginSide) {
-    try {
-      return (Integer) layout.getPropertyByTitle(marginSide).getValue();
-    } catch (Throwable e) {
-      ReflectionUtils.propagate(e);
-    }
-    return 0;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Private constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private FormUtils() {
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static <C extends IControlInfo> List<C> getAttachableControls(IFormLayoutInfo<C> layout,
+			C firstControl,
+			boolean horizontal) throws Exception {
+		int side = horizontal ? IPositionConstants.LEFT : IPositionConstants.TOP;
+		FormLayoutInfoImplClassic<C> impl = (FormLayoutInfoImplClassic<C>) layout.getImpl();
+		return impl.getAlignControlInfos(firstControl, side);
+	}
+
+	public static <C extends IControlInfo> List<C> getAttachableControls(IFormLayoutInfo<C> layout) {
+		return layout.getControls();
+	}
+
+	public static <C extends IControlInfo> String getVariableName(final C child) {
+		return ExecutionUtils.runObjectIgnore(new RunnableObjectEx<String>() {
+			@Override
+			public String runObject() throws Exception {
+				return child.getPresentation().getText();
+			}
+		}, "<unknown>");
+	}
+
+	/**
+	 * Check whether x is in interval [a, b]
+	 */
+	public static boolean between(int x, int a, int b) {
+		return x >= a && x <= b;
+	}
+
+	public static int snapGrid(int value, int snap) {
+		return applyGrid(value, snap);
+	}
+
+	/**
+	 * Simple math round to nearest integer, based on grid step.
+	 */
+	private static int applyGrid(int value, int step) {
+		return value / step * step;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils returning the layout margin according to side
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static <C extends IControlInfo> int getLayoutMarginLeft(IFormLayoutInfo<C> layout) {
+		return getLayoutMargin(layout, "marginLeft") + getLayoutMargin(layout, "marginWidth");
+	}
+
+	public static <C extends IControlInfo> int getLayoutMarginRight(IFormLayoutInfo<C> layout) {
+		return getLayoutMargin(layout, "marginRight") + getLayoutMargin(layout, "marginWidth");
+	}
+
+	public static <C extends IControlInfo> int getLayoutMarginTop(IFormLayoutInfo<C> layout) {
+		return getLayoutMargin(layout, "marginTop") + getLayoutMargin(layout, "marginHeight");
+	}
+
+	public static <C extends IControlInfo> int getLayoutMarginBottom(IFormLayoutInfo<C> layout) {
+		return getLayoutMargin(layout, "marginBottom") + getLayoutMargin(layout, "marginHeight");
+	}
+
+	public static <C extends IControlInfo> Insets getLayoutMargins(IFormLayoutInfo<C> layout) {
+		return new Insets(getLayoutMarginTop(layout),
+				getLayoutMarginLeft(layout),
+				getLayoutMarginBottom(layout),
+				getLayoutMarginRight(layout));
+	}
+
+	private static <C extends IControlInfo> int getLayoutMargin(IFormLayoutInfo<C> layout,
+			String marginSide) {
+		try {
+			return (Integer) layout.getPropertyByTitle(marginSide).getValue();
+		} catch (Throwable e) {
+			ReflectionUtils.propagate(e);
+		}
+		return 0;
+	}
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/form/PercentageSnapPoint.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/form/PercentageSnapPoint.java
index abc7b49b0..ba052f20e 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/form/PercentageSnapPoint.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/form/PercentageSnapPoint.java
@@ -31,88 +31,88 @@
  * @author mitin_aa
  */
 final class PercentageSnapPoint<C extends IControlInfo> extends SnapPoint {
-  private final int m_percent;
-  private Dimension m_containerSize;
-  private final boolean m_hasGap;
-  private final FormLayoutVisualDataProvider<C> m_visualDataProvider;
-  private int m_gap;
+	private final int m_percent;
+	private Dimension m_containerSize;
+	private final boolean m_hasGap;
+	private final FormLayoutVisualDataProvider<C> m_visualDataProvider;
+	private int m_gap;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public PercentageSnapPoint(FormLayoutVisualDataProvider<C> visualDataProvider,
-      int side,
-      int percent,
-      boolean hasGap) {
-    super(visualDataProvider, side, side == IPositionConstants.LEFT
-        || side == IPositionConstants.TOP ? PlacementInfo.LEADING : PlacementInfo.TRAILING);
-    m_visualDataProvider = visualDataProvider;
-    m_percent = percent;
-    m_hasGap = hasGap;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public PercentageSnapPoint(FormLayoutVisualDataProvider<C> visualDataProvider,
+			int side,
+			int percent,
+			boolean hasGap) {
+		super(visualDataProvider, side, side == IPositionConstants.LEFT
+				|| side == IPositionConstants.TOP ? PlacementInfo.LEADING : PlacementInfo.TRAILING);
+		m_visualDataProvider = visualDataProvider;
+		m_percent = percent;
+		m_hasGap = hasGap;
+	}
 
-  public PercentageSnapPoint(FormLayoutVisualDataProvider<C> visualDataProvider,
-      int side,
-      int percent) {
-    this(visualDataProvider, side, percent, false);
-  }
+	public PercentageSnapPoint(FormLayoutVisualDataProvider<C> visualDataProvider,
+			int side,
+			int percent) {
+		this(visualDataProvider, side, percent, false);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Snapping
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void calculateSnapPoint(List<? extends IAbstractComponentInfo> beingSnappedList) {
-    super.calculateSnapPoint(beingSnappedList);
-    m_containerSize = m_visualDataProvider.getContainerSize();
-    Transposer t = new Transposer(!isHorizontal());
-    m_gap = 0;
-    if (m_hasGap) {
-      m_gap = m_visualDataProvider.getPercentsGap(isHorizontal());
-    }
-    m_snapPoint = t.t(m_containerSize).width * m_percent / 100 - getSign() * m_gap;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Snapping
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void calculateSnapPoint(List<? extends IAbstractComponentInfo> beingSnappedList) {
+		super.calculateSnapPoint(beingSnappedList);
+		m_containerSize = m_visualDataProvider.getContainerSize();
+		Transposer t = new Transposer(!isHorizontal());
+		m_gap = 0;
+		if (m_hasGap) {
+			m_gap = m_visualDataProvider.getPercentsGap(isHorizontal());
+		}
+		m_snapPoint = t.t(m_containerSize).width * m_percent / 100 - getSign() * m_gap;
+	}
 
-  private int getSign() {
-    return PlacementUtils.isLeadingSide(m_side) ? -1 : 1;
-  }
+	private int getSign() {
+		return PlacementUtils.isLeadingSide(m_side) ? -1 : 1;
+	}
 
-  @Override
-  public void addFeedback(Rectangle snappedBounds,
-      IFeedbackProxy feedbackProxy,
-      List<Figure> feedbacks) {
-    if (isHorizontal()) {
-      if (m_hasGap) {
-        feedbacks.add(feedbackProxy.addVerticalFeedbackLine(
-            m_snapPoint + getSign() * m_gap,
-            0,
-            m_containerSize.height));
-      }
-      feedbacks.add(feedbackProxy.addVerticalFeedbackLine(m_snapPoint, 0, m_containerSize.height));
-    } else {
-      if (m_hasGap) {
-        feedbacks.add(feedbackProxy.addHorizontalFeedbackLine(
-            m_snapPoint + getSign() * m_gap,
-            0,
-            m_containerSize.width));
-      }
-      feedbacks.add(feedbackProxy.addHorizontalFeedbackLine(m_snapPoint, 0, m_containerSize.width));
-    }
-  }
+	@Override
+	public void addFeedback(Rectangle snappedBounds,
+			IFeedbackProxy feedbackProxy,
+			List<Figure> feedbacks) {
+		if (isHorizontal()) {
+			if (m_hasGap) {
+				feedbacks.add(feedbackProxy.addVerticalFeedbackLine(
+						m_snapPoint + getSign() * m_gap,
+						0,
+						m_containerSize.height));
+			}
+			feedbacks.add(feedbackProxy.addVerticalFeedbackLine(m_snapPoint, 0, m_containerSize.height));
+		} else {
+			if (m_hasGap) {
+				feedbacks.add(feedbackProxy.addHorizontalFeedbackLine(
+						m_snapPoint + getSign() * m_gap,
+						0,
+						m_containerSize.width));
+			}
+			feedbacks.add(feedbackProxy.addHorizontalFeedbackLine(m_snapPoint, 0, m_containerSize.width));
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  //	Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public int getPercent() {
-    return m_percent;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	//	Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public int getPercent() {
+		return m_percent;
+	}
 
-  public int getGap() {
-    return m_gap;
-  }
+	public int getGap() {
+		return m_gap;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/grid/GridHelper.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/grid/GridHelper.java
index 7e0d8100b..cd28f57af 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/grid/GridHelper.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/grid/GridHelper.java
@@ -22,22 +22,22 @@
  * @coverage swt.gef.GridLayout
  */
 public final class GridHelper extends AbstractGridHelper {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public GridHelper(GraphicalEditPolicy editPolicy, boolean forTarget) {
-    super(editPolicy, forTarget);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public GridHelper(GraphicalEditPolicy editPolicy, boolean forTarget) {
+		super(editPolicy, forTarget);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Feedback
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected IGridInfo getGridInfo() {
-    return ((IGridLayoutInfo<?>) getAbstractLayout()).getGridInfo();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Feedback
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected IGridInfo getGridInfo() {
+		return ((IGridLayoutInfo<?>) getAbstractLayout()).getGridInfo();
+	}
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/grid/GridLayoutEditPolicy.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/grid/GridLayoutEditPolicy.java
index 5d25448a7..2678b40b8 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/grid/GridLayoutEditPolicy.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/grid/GridLayoutEditPolicy.java
@@ -50,449 +50,449 @@
  * @coverage swt.gef.GridLayout
  */
 public final class GridLayoutEditPolicy<C extends IControlInfo>
-    extends
-      AbstractGridLayoutEditPolicy implements IRefreshableEditPolicy {
-  private final IGridLayoutInfo<C> m_layout;
+extends
+AbstractGridLayoutEditPolicy implements IRefreshableEditPolicy {
+	private final IGridLayoutInfo<C> m_layout;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public GridLayoutEditPolicy(IGridLayoutInfo<C> layout) {
-    super(layout.getUnderlyingModel());
-    m_layout = layout;
-    m_gridTargetHelper = new GridHelper(this, true);
-    m_gridSelectionHelper = new GridHelper(this, false);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public GridLayoutEditPolicy(IGridLayoutInfo<C> layout) {
+		super(layout.getUnderlyingModel());
+		m_layout = layout;
+		m_gridTargetHelper = new GridHelper(this, true);
+		m_gridSelectionHelper = new GridHelper(this, false);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Requests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected ILayoutRequestValidator getRequestValidator() {
-    return ControlsLayoutRequestValidator.INSTANCE;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Requests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected ILayoutRequestValidator getRequestValidator() {
+		return ControlsLayoutRequestValidator.INSTANCE;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected IGridInfo getGridInfo() {
-    return m_layout.getGridInfo();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected IGridInfo getGridInfo() {
+		return m_layout.getGridInfo();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if given object is {@link IControlInfo}.
-   */
-  private boolean isControl(Object model) {
-    return model instanceof IControlInfo;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if given object is {@link IControlInfo}.
+	 */
+	private boolean isControl(Object model) {
+		return model instanceof IControlInfo;
+	}
 
-  /**
-   * @return the casted model.
-   */
-  @SuppressWarnings("unchecked")
-  private C toControl(Object model) {
-    return (C) model;
-  }
+	/**
+	 * @return the casted model.
+	 */
+	@SuppressWarnings("unchecked")
+	private C toControl(Object model) {
+		return (C) model;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Selection
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void decorateChild(EditPart child) {
-    Object model = child.getModel();
-    if (m_layout.isManagedObject(model)) {
-      C control = toControl(model);
-      EditPolicy selectionPolicy = new GridSelectionEditPolicy<C>(m_layout, control);
-      child.installEditPolicy(EditPolicy.SELECTION_ROLE, selectionPolicy);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Selection
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void decorateChild(EditPart child) {
+		Object model = child.getModel();
+		if (m_layout.isManagedObject(model)) {
+			C control = toControl(model);
+			EditPolicy selectionPolicy = new GridSelectionEditPolicy<C>(m_layout, control);
+			child.installEditPolicy(EditPolicy.SELECTION_ROLE, selectionPolicy);
+		}
+	}
 
-  @Override
-  public void refreshEditPolicy() {
-    List<EditPart> children = getHost().getChildren();
-    for (EditPart child : children) {
-      Object model = child.getModel();
-      if (isControl(model)) {
-        // not managed: never was or excluded
-        if (!m_layout.isManagedObject(model)) {
-          child.installEditPolicy(EditPolicy.SELECTION_ROLE, new NonResizableSelectionEditPolicy());
-          continue;
-        }
-        // managed: may be was excluded
-        if (!(child.getEditPolicy(EditPolicy.SELECTION_ROLE) instanceof GridSelectionEditPolicy<?>)) {
-          decorateChild(child);
-        }
-      }
-    }
-  }
+	@Override
+	public void refreshEditPolicy() {
+		List<EditPart> children = getHost().getChildren();
+		for (EditPart child : children) {
+			Object model = child.getModel();
+			if (isControl(model)) {
+				// not managed: never was or excluded
+				if (!m_layout.isManagedObject(model)) {
+					child.installEditPolicy(EditPolicy.SELECTION_ROLE, new NonResizableSelectionEditPolicy());
+					continue;
+				}
+				// managed: may be was excluded
+				if (!(child.getEditPolicy(EditPolicy.SELECTION_ROLE) instanceof GridSelectionEditPolicy<?>)) {
+					decorateChild(child);
+				}
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if prepared "target" can be used.
-   */
-  private boolean isValidTarget() {
-    // may be invalid cell
-    if (!m_target.m_valid) {
-      return false;
-    }
-    // check for dimension operations limitations
-    if (!m_layout.canChangeDimensions()) {
-      // can not change columns
-      if (m_target.m_columnInsert || m_target.m_column >= m_layout.getColumns().size()) {
-        return false;
-      }
-      // can not insert new row before "implicit" row
-      if (m_target.m_rowInsert && !m_layout.isExplicitRow(m_target.m_row)) {
-        return false;
-      }
-    }
-    // OK
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if prepared "target" can be used.
+	 */
+	private boolean isValidTarget() {
+		// may be invalid cell
+		if (!m_target.m_valid) {
+			return false;
+		}
+		// check for dimension operations limitations
+		if (!m_layout.canChangeDimensions()) {
+			// can not change columns
+			if (m_target.m_columnInsert || m_target.m_column >= m_layout.getColumns().size()) {
+				return false;
+			}
+			// can not insert new row before "implicit" row
+			if (m_target.m_rowInsert && !m_layout.isExplicitRow(m_target.m_row)) {
+				return false;
+			}
+		}
+		// OK
+		return true;
+	}
 
-  @Override
-  protected Command getCreateCommand(CreateRequest request) {
-    if (isValidTarget()) {
-      Object newObject = request.getNewObject();
-      if (isControl(newObject)) {
-        final C control = toControl(newObject);
-        return new EditCommand(m_layout) {
-          @Override
-          protected void executeEdit() throws Exception {
-            m_layout.command_CREATE(
-                control,
-                m_target.m_column,
-                m_target.m_columnInsert,
-                m_target.m_row,
-                m_target.m_rowInsert);
-          }
-        };
-      }
-    }
-    return null;
-  }
+	@Override
+	protected Command getCreateCommand(CreateRequest request) {
+		if (isValidTarget()) {
+			Object newObject = request.getNewObject();
+			if (isControl(newObject)) {
+				final C control = toControl(newObject);
+				return new EditCommand(m_layout) {
+					@Override
+					protected void executeEdit() throws Exception {
+						m_layout.command_CREATE(
+								control,
+								m_target.m_column,
+								m_target.m_columnInsert,
+								m_target.m_row,
+								m_target.m_rowInsert);
+					}
+				};
+			}
+		}
+		return null;
+	}
 
-  @Override
-  @SuppressWarnings("unchecked")
-  protected Command getPasteCommand(PasteRequest request) {
-    List<JavaInfoMemento> mementos = (List<JavaInfoMemento>) request.getMemento();
-    if (isValidTarget() && mementos.size() == 1) {
-      return GlobalState.getPasteRequestProcessor().getPasteCommand(
-          request,
-          new IPasteComponentProcessor() {
-            @Override
-            public void process(Object component) throws Exception {
-              m_layout.command_CREATE(
-                  toControl(component),
-                  m_target.m_column,
-                  m_target.m_columnInsert,
-                  m_target.m_row,
-                  m_target.m_rowInsert);
-            }
-          });
-    }
-    return null;
-  }
+	@Override
+	@SuppressWarnings("unchecked")
+	protected Command getPasteCommand(PasteRequest request) {
+		List<JavaInfoMemento> mementos = (List<JavaInfoMemento>) request.getMemento();
+		if (isValidTarget() && mementos.size() == 1) {
+			return GlobalState.getPasteRequestProcessor().getPasteCommand(
+					request,
+					new IPasteComponentProcessor() {
+						@Override
+						public void process(Object component) throws Exception {
+							m_layout.command_CREATE(
+									toControl(component),
+									m_target.m_column,
+									m_target.m_columnInsert,
+									m_target.m_row,
+									m_target.m_rowInsert);
+						}
+					});
+		}
+		return null;
+	}
 
-  @Override
-  protected Command getMoveCommand(ChangeBoundsRequest request) {
-    if (isValidTarget() && request.getEditParts().size() == 1) {
-      EditPart moveEditPart = request.getEditParts().get(0);
-      Object model = moveEditPart.getModel();
-      if (isControl(model)) {
-        final C control = toControl(model);
-        return new EditCommand(m_layout) {
-          @Override
-          protected void executeEdit() throws Exception {
-            m_layout.command_MOVE(
-                control,
-                m_target.m_column,
-                m_target.m_columnInsert,
-                m_target.m_row,
-                m_target.m_rowInsert);
-          }
-        };
-      }
-    }
-    return null;
-  }
+	@Override
+	protected Command getMoveCommand(ChangeBoundsRequest request) {
+		if (isValidTarget() && request.getEditParts().size() == 1) {
+			EditPart moveEditPart = request.getEditParts().get(0);
+			Object model = moveEditPart.getModel();
+			if (isControl(model)) {
+				final C control = toControl(model);
+				return new EditCommand(m_layout) {
+					@Override
+					protected void executeEdit() throws Exception {
+						m_layout.command_MOVE(
+								control,
+								m_target.m_column,
+								m_target.m_columnInsert,
+								m_target.m_row,
+								m_target.m_rowInsert);
+					}
+				};
+			}
+		}
+		return null;
+	}
 
-  @Override
-  protected Command getAddCommand(ChangeBoundsRequest request) {
-    if (isValidTarget() && request.getEditParts().size() == 1) {
-      EditPart moveEditPart = request.getEditParts().get(0);
-      Object model = moveEditPart.getModel();
-      if (isControl(model)) {
-        final C control = toControl(model);
-        return new EditCommand(m_layout) {
-          @Override
-          protected void executeEdit() throws Exception {
-            m_layout.command_ADD(
-                control,
-                m_target.m_column,
-                m_target.m_columnInsert,
-                m_target.m_row,
-                m_target.m_rowInsert);
-          }
-        };
-      }
-    }
-    return null;
-  }
+	@Override
+	protected Command getAddCommand(ChangeBoundsRequest request) {
+		if (isValidTarget() && request.getEditParts().size() == 1) {
+			EditPart moveEditPart = request.getEditParts().get(0);
+			Object model = moveEditPart.getModel();
+			if (isControl(model)) {
+				final C control = toControl(model);
+				return new EditCommand(m_layout) {
+					@Override
+					protected void executeEdit() throws Exception {
+						m_layout.command_ADD(
+								control,
+								m_target.m_column,
+								m_target.m_columnInsert,
+								m_target.m_row,
+								m_target.m_rowInsert);
+					}
+				};
+			}
+		}
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Grid target
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Determines parameters of insert feedback.
-   *
-   * @return the array of: visual gap, begin/end of insert feedback, begin/end of target feedback.
-   */
-  public static int[] getInsertFeedbackParameters(Interval interval,
-      Interval nextInterval,
-      int minGap) {
-    int gap = nextInterval.begin() - interval.end();
-    int visualGap = Math.max(gap, minGap);
-    // determine x1/x2
-    int x1, x2;
-    {
-      int a = interval.end();
-      int b = nextInterval.begin();
-      int x1_2 = a + b - visualGap;
-      x1 = x1_2 % 2 == 0 ? x1_2 / 2 : x1_2 / 2 - 1;
-      x2 = a + b - x1;
-      // we don't want to have insert feedback be same as intervals
-      if (x1 == a - 1) {
-        x1--;
-        x2++;
-      }
-    }
-    //
-    return new int[]{visualGap, x1, x2, x1 - minGap, x2 + minGap};
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Grid target
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Determines parameters of insert feedback.
+	 *
+	 * @return the array of: visual gap, begin/end of insert feedback, begin/end of target feedback.
+	 */
+	public static int[] getInsertFeedbackParameters(Interval interval,
+			Interval nextInterval,
+			int minGap) {
+		int gap = nextInterval.begin() - interval.end();
+		int visualGap = Math.max(gap, minGap);
+		// determine x1/x2
+		int x1, x2;
+		{
+			int a = interval.end();
+			int b = nextInterval.begin();
+			int x1_2 = a + b - visualGap;
+			x1 = x1_2 % 2 == 0 ? x1_2 / 2 : x1_2 / 2 - 1;
+			x2 = a + b - x1;
+			// we don't want to have insert feedback be same as intervals
+			if (x1 == a - 1) {
+				x1--;
+				x2++;
+			}
+		}
+		//
+		return new int[]{visualGap, x1, x2, x1 - minGap, x2 + minGap};
+	}
 
-  @Override
-  protected void updateGridTarget(Point mouseLocation) throws Exception {
-    m_target = new GridTarget();
-    // prepare location in model
-    Point location = mouseLocation.getCopy();
-    PolicyUtils.translateAbsoluteToModel(this, location);
-    // prepare grid information
-    IGridInfo gridInfo = m_layout.getGridInfo();
-    Interval[] columnIntervals = gridInfo.getColumnIntervals();
-    Interval[] rowIntervals = gridInfo.getRowIntervals();
-    int lastX =
-        columnIntervals.length != 0
-            ? columnIntervals[columnIntervals.length - 1].end()
-            : gridInfo.getInsets().left;
-    int lastY =
-        rowIntervals.length != 0
-            ? rowIntervals[rowIntervals.length - 1].end()
-            : gridInfo.getInsets().top;
-    // prepare insert bounds
-    {
-      if (columnIntervals.length != 0) {
-        m_target.m_rowInsertBounds.x = columnIntervals[0].begin() - INSERT_MARGINS;
-        m_target.m_rowInsertBounds.setRight(lastX + INSERT_MARGINS);
-      } else {
-        m_target.m_rowInsertBounds.x = 0;
-        m_target.m_rowInsertBounds.setRight(getHostFigure().getSize().width);
-      }
-      if (rowIntervals.length != 0) {
-        m_target.m_columnInsertBounds.y = rowIntervals[0].begin() - INSERT_MARGINS;
-        m_target.m_columnInsertBounds.setBottom(lastY + INSERT_MARGINS);
-      } else {
-        m_target.m_columnInsertBounds.y = 0;
-        m_target.m_columnInsertBounds.setBottom(getHostFigure().getSize().height);
-      }
-    }
-    // find existing column
-    for (int columnIndex = 0; columnIndex < columnIntervals.length; columnIndex++) {
-      boolean isLast = columnIndex == columnIntervals.length - 1;
-      Interval interval = columnIntervals[columnIndex];
-      Interval nextInterval = !isLast ? columnIntervals[columnIndex + 1] : null;
-      // before first
-      if (location.x < columnIntervals[0].begin()) {
-        m_target.m_column = 0;
-        m_target.m_columnInsert = true;
-        // prepare parameters
-        int[] parameters =
-            getInsertFeedbackParameters(new Interval(0, 0), interval, INSERT_COLUMN_SIZE);
-        // feedback
-        m_target.m_feedbackBounds.x = parameters[3];
-        m_target.m_feedbackBounds.width = parameters[4] - parameters[3];
-        // insert
-        m_target.m_columnInsertBounds.x = parameters[1];
-        m_target.m_columnInsertBounds.width = parameters[2] - parameters[1];
-        // stop
-        break;
-      }
-      // gap or near to end of interval
-      if (!isLast) {
-        int gap = nextInterval.begin() - interval.end();
-        boolean directGap = interval.end() <= location.x && location.x < nextInterval.begin();
-        boolean narrowGap = gap < 2 * INSERT_COLUMN_SIZE;
-        boolean nearEnd = Math.abs(location.x - interval.end()) < INSERT_COLUMN_SIZE;
-        boolean nearBegin = Math.abs(location.x - nextInterval.begin()) < INSERT_COLUMN_SIZE;
-        if (directGap || narrowGap && (nearEnd || nearBegin)) {
-          m_target.m_column = columnIndex + 1;
-          m_target.m_columnInsert = true;
-          // prepare parameters
-          int[] parameters =
-              getInsertFeedbackParameters(interval, nextInterval, INSERT_COLUMN_SIZE);
-          // feedback
-          m_target.m_feedbackBounds.x = parameters[3];
-          m_target.m_feedbackBounds.width = parameters[4] - parameters[3];
-          // insert
-          m_target.m_columnInsertBounds.x = parameters[1];
-          m_target.m_columnInsertBounds.width = parameters[2] - parameters[1];
-          // stop
-          break;
-        }
-      }
-      // column
-      if (interval.contains(location.x)) {
-        m_target.m_column = columnIndex;
-        // feedback
-        m_target.m_feedbackBounds.x = interval.begin();
-        m_target.m_feedbackBounds.width = interval.length()+ 1;
-        // stop
-        break;
-      }
-    }
-    // find virtual column
-    if (m_target.m_column == -1) {
-      int columnGap = gridInfo.getVirtualColumnGap();
-      int columnSize = gridInfo.getVirtualColumnSize();
-      //
-      int newWidth = columnSize + columnGap;
-      int newDelta = (location.x - lastX - columnGap / 2) / newWidth;
-      //
-      m_target.m_column = columnIntervals.length + newDelta;
-      m_target.m_feedbackBounds.x = lastX + columnGap + newWidth * newDelta;
-      m_target.m_feedbackBounds.width = columnSize + 1;
-    }
-    // find existing row
-    for (int rowIndex = 0; rowIndex < rowIntervals.length; rowIndex++) {
-      boolean isLast = rowIndex == rowIntervals.length - 1;
-      Interval interval = rowIntervals[rowIndex];
-      Interval nextInterval = !isLast ? rowIntervals[rowIndex + 1] : null;
-      // before first
-      if (location.y < rowIntervals[0].begin()) {
-        m_target.m_row = 0;
-        m_target.m_rowInsert = true;
-        // prepare parameters
-        int[] parameters =
-            getInsertFeedbackParameters(new Interval(0, 0), interval, INSERT_ROW_SIZE);
-        // feedback
-        m_target.m_feedbackBounds.y = parameters[3];
-        m_target.m_feedbackBounds.height = parameters[4] - parameters[3];
-        // insert
-        m_target.m_rowInsertBounds.y = parameters[1];
-        m_target.m_rowInsertBounds.height = parameters[2] - parameters[1];
-        // stop
-        break;
-      }
-      // gap or near to end of interval
-      if (!isLast) {
-        int gap = nextInterval.begin() - interval.end();
-        boolean directGap = interval.end() <= location.y && location.y < nextInterval.begin();
-        boolean narrowGap = gap < 2 * INSERT_ROW_SIZE;
-        boolean nearEnd = Math.abs(location.y - interval.end()) < INSERT_ROW_SIZE;
-        boolean nearBegin = Math.abs(location.y - nextInterval.begin()) < INSERT_ROW_SIZE;
-        if (directGap || narrowGap && (nearEnd || nearBegin)) {
-          m_target.m_row = rowIndex + 1;
-          m_target.m_rowInsert = true;
-          // prepare parameters
-          int[] parameters = getInsertFeedbackParameters(interval, nextInterval, INSERT_ROW_SIZE);
-          // feedback
-          m_target.m_feedbackBounds.y = parameters[3];
-          m_target.m_feedbackBounds.height = parameters[4] - parameters[3];
-          // insert
-          m_target.m_rowInsertBounds.y = parameters[1];
-          m_target.m_rowInsertBounds.height = parameters[2] - parameters[1];
-          // stop
-          break;
-        }
-      }
-      // row
-      if (interval.contains(location.y)) {
-        m_target.m_row = rowIndex;
-        // feedback
-        m_target.m_feedbackBounds.y = interval.begin();
-        m_target.m_feedbackBounds.height = interval.length()+ 1;
-        // stop
-        break;
-      }
-    }
-    // find virtual row
-    if (m_target.m_row == -1) {
-      int rowGap = gridInfo.getVirtualRowGap();
-      int rowSize = gridInfo.getVirtualRowSize();
-      //
-      int newHeight = rowSize + rowGap;
-      int newDelta = (location.y - lastY - rowGap / 2) / newHeight;
-      //
-      m_target.m_row = rowIntervals.length + newDelta;
-      m_target.m_feedbackBounds.y = lastY + rowGap + newHeight * newDelta;
-      m_target.m_feedbackBounds.height = rowSize + 1;
-    }
-  }
+	@Override
+	protected void updateGridTarget(Point mouseLocation) throws Exception {
+		m_target = new GridTarget();
+		// prepare location in model
+		Point location = mouseLocation.getCopy();
+		PolicyUtils.translateAbsoluteToModel(this, location);
+		// prepare grid information
+		IGridInfo gridInfo = m_layout.getGridInfo();
+		Interval[] columnIntervals = gridInfo.getColumnIntervals();
+		Interval[] rowIntervals = gridInfo.getRowIntervals();
+		int lastX =
+				columnIntervals.length != 0
+				? columnIntervals[columnIntervals.length - 1].end()
+						: gridInfo.getInsets().left;
+		int lastY =
+				rowIntervals.length != 0
+				? rowIntervals[rowIntervals.length - 1].end()
+						: gridInfo.getInsets().top;
+		// prepare insert bounds
+		{
+			if (columnIntervals.length != 0) {
+				m_target.m_rowInsertBounds.x = columnIntervals[0].begin() - INSERT_MARGINS;
+				m_target.m_rowInsertBounds.setRight(lastX + INSERT_MARGINS);
+			} else {
+				m_target.m_rowInsertBounds.x = 0;
+				m_target.m_rowInsertBounds.setRight(getHostFigure().getSize().width);
+			}
+			if (rowIntervals.length != 0) {
+				m_target.m_columnInsertBounds.y = rowIntervals[0].begin() - INSERT_MARGINS;
+				m_target.m_columnInsertBounds.setBottom(lastY + INSERT_MARGINS);
+			} else {
+				m_target.m_columnInsertBounds.y = 0;
+				m_target.m_columnInsertBounds.setBottom(getHostFigure().getSize().height);
+			}
+		}
+		// find existing column
+		for (int columnIndex = 0; columnIndex < columnIntervals.length; columnIndex++) {
+			boolean isLast = columnIndex == columnIntervals.length - 1;
+			Interval interval = columnIntervals[columnIndex];
+			Interval nextInterval = !isLast ? columnIntervals[columnIndex + 1] : null;
+			// before first
+			if (location.x < columnIntervals[0].begin()) {
+				m_target.m_column = 0;
+				m_target.m_columnInsert = true;
+				// prepare parameters
+				int[] parameters =
+						getInsertFeedbackParameters(new Interval(0, 0), interval, INSERT_COLUMN_SIZE);
+				// feedback
+				m_target.m_feedbackBounds.x = parameters[3];
+				m_target.m_feedbackBounds.width = parameters[4] - parameters[3];
+				// insert
+				m_target.m_columnInsertBounds.x = parameters[1];
+				m_target.m_columnInsertBounds.width = parameters[2] - parameters[1];
+				// stop
+				break;
+			}
+			// gap or near to end of interval
+			if (!isLast) {
+				int gap = nextInterval.begin() - interval.end();
+				boolean directGap = interval.end() <= location.x && location.x < nextInterval.begin();
+				boolean narrowGap = gap < 2 * INSERT_COLUMN_SIZE;
+				boolean nearEnd = Math.abs(location.x - interval.end()) < INSERT_COLUMN_SIZE;
+				boolean nearBegin = Math.abs(location.x - nextInterval.begin()) < INSERT_COLUMN_SIZE;
+				if (directGap || narrowGap && (nearEnd || nearBegin)) {
+					m_target.m_column = columnIndex + 1;
+					m_target.m_columnInsert = true;
+					// prepare parameters
+					int[] parameters =
+							getInsertFeedbackParameters(interval, nextInterval, INSERT_COLUMN_SIZE);
+					// feedback
+					m_target.m_feedbackBounds.x = parameters[3];
+					m_target.m_feedbackBounds.width = parameters[4] - parameters[3];
+					// insert
+					m_target.m_columnInsertBounds.x = parameters[1];
+					m_target.m_columnInsertBounds.width = parameters[2] - parameters[1];
+					// stop
+					break;
+				}
+			}
+			// column
+			if (interval.contains(location.x)) {
+				m_target.m_column = columnIndex;
+				// feedback
+				m_target.m_feedbackBounds.x = interval.begin();
+				m_target.m_feedbackBounds.width = interval.length()+ 1;
+				// stop
+				break;
+			}
+		}
+		// find virtual column
+		if (m_target.m_column == -1) {
+			int columnGap = gridInfo.getVirtualColumnGap();
+			int columnSize = gridInfo.getVirtualColumnSize();
+			//
+			int newWidth = columnSize + columnGap;
+			int newDelta = (location.x - lastX - columnGap / 2) / newWidth;
+			//
+			m_target.m_column = columnIntervals.length + newDelta;
+			m_target.m_feedbackBounds.x = lastX + columnGap + newWidth * newDelta;
+			m_target.m_feedbackBounds.width = columnSize + 1;
+		}
+		// find existing row
+		for (int rowIndex = 0; rowIndex < rowIntervals.length; rowIndex++) {
+			boolean isLast = rowIndex == rowIntervals.length - 1;
+			Interval interval = rowIntervals[rowIndex];
+			Interval nextInterval = !isLast ? rowIntervals[rowIndex + 1] : null;
+			// before first
+			if (location.y < rowIntervals[0].begin()) {
+				m_target.m_row = 0;
+				m_target.m_rowInsert = true;
+				// prepare parameters
+				int[] parameters =
+						getInsertFeedbackParameters(new Interval(0, 0), interval, INSERT_ROW_SIZE);
+				// feedback
+				m_target.m_feedbackBounds.y = parameters[3];
+				m_target.m_feedbackBounds.height = parameters[4] - parameters[3];
+				// insert
+				m_target.m_rowInsertBounds.y = parameters[1];
+				m_target.m_rowInsertBounds.height = parameters[2] - parameters[1];
+				// stop
+				break;
+			}
+			// gap or near to end of interval
+			if (!isLast) {
+				int gap = nextInterval.begin() - interval.end();
+				boolean directGap = interval.end() <= location.y && location.y < nextInterval.begin();
+				boolean narrowGap = gap < 2 * INSERT_ROW_SIZE;
+				boolean nearEnd = Math.abs(location.y - interval.end()) < INSERT_ROW_SIZE;
+				boolean nearBegin = Math.abs(location.y - nextInterval.begin()) < INSERT_ROW_SIZE;
+				if (directGap || narrowGap && (nearEnd || nearBegin)) {
+					m_target.m_row = rowIndex + 1;
+					m_target.m_rowInsert = true;
+					// prepare parameters
+					int[] parameters = getInsertFeedbackParameters(interval, nextInterval, INSERT_ROW_SIZE);
+					// feedback
+					m_target.m_feedbackBounds.y = parameters[3];
+					m_target.m_feedbackBounds.height = parameters[4] - parameters[3];
+					// insert
+					m_target.m_rowInsertBounds.y = parameters[1];
+					m_target.m_rowInsertBounds.height = parameters[2] - parameters[1];
+					// stop
+					break;
+				}
+			}
+			// row
+			if (interval.contains(location.y)) {
+				m_target.m_row = rowIndex;
+				// feedback
+				m_target.m_feedbackBounds.y = interval.begin();
+				m_target.m_feedbackBounds.height = interval.length()+ 1;
+				// stop
+				break;
+			}
+		}
+		// find virtual row
+		if (m_target.m_row == -1) {
+			int rowGap = gridInfo.getVirtualRowGap();
+			int rowSize = gridInfo.getVirtualRowSize();
+			//
+			int newHeight = rowSize + rowGap;
+			int newDelta = (location.y - lastY - rowGap / 2) / newHeight;
+			//
+			m_target.m_row = rowIntervals.length + newDelta;
+			m_target.m_feedbackBounds.y = lastY + rowGap + newHeight * newDelta;
+			m_target.m_feedbackBounds.height = rowSize + 1;
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IHeadersProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public LayoutEditPolicy getContainerLayoutPolicy(boolean horizontal) {
-    if (horizontal) {
-      return new ColumnsLayoutEditPolicy<C>(this, m_layout);
-    } else {
-      return new RowsLayoutEditPolicy<C>(this, m_layout);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IHeadersProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public LayoutEditPolicy getContainerLayoutPolicy(boolean horizontal) {
+		if (horizontal) {
+			return new ColumnsLayoutEditPolicy<C>(this, m_layout);
+		} else {
+			return new RowsLayoutEditPolicy<C>(this, m_layout);
+		}
+	}
 
-  @Override
-  public List<?> getHeaders(boolean horizontal) {
-    return horizontal ? m_layout.getColumns() : m_layout.getRows();
-  }
+	@Override
+	public List<?> getHeaders(boolean horizontal) {
+		return horizontal ? m_layout.getColumns() : m_layout.getRows();
+	}
 
-  @Override
-  @SuppressWarnings("unchecked")
-  public EditPart createHeaderEditPart(boolean horizontal, Object model) {
-    if (horizontal) {
-      return new ColumnHeaderEditPart<C>(m_layout, (GridColumnInfo<C>) model, getHostFigure());
-    } else {
-      return new RowHeaderEditPart<C>(m_layout, (GridRowInfo<C>) model, getHostFigure());
-    }
-  }
+	@Override
+	@SuppressWarnings("unchecked")
+	public EditPart createHeaderEditPart(boolean horizontal, Object model) {
+		if (horizontal) {
+			return new ColumnHeaderEditPart<C>(m_layout, (GridColumnInfo<C>) model, getHostFigure());
+		} else {
+			return new RowHeaderEditPart<C>(m_layout, (GridRowInfo<C>) model, getHostFigure());
+		}
+	}
 
-  @Override
-  public void buildContextMenu(IMenuManager manager, boolean horizontal) {
-  }
+	@Override
+	public void buildContextMenu(IMenuManager manager, boolean horizontal) {
+	}
 
-  @Override
-  public void handleDoubleClick(boolean horizontal) {
-  }
+	@Override
+	public void handleDoubleClick(boolean horizontal) {
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/grid/GridSelectionEditPolicy.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/grid/GridSelectionEditPolicy.java
index 8bc0d883d..62d31a2bb 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/grid/GridSelectionEditPolicy.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/grid/GridSelectionEditPolicy.java
@@ -45,244 +45,244 @@
  * @coverage swt.gef.GridLayout
  */
 public final class GridSelectionEditPolicy<C extends IControlInfo>
-    extends
-      AbstractGridSelectionEditPolicy {
-  private final IGridLayoutInfo<C> m_layout;
-  private final C m_component;
-  private final GridHelper m_gridHelper = new GridHelper(this, false);
+extends
+AbstractGridSelectionEditPolicy {
+	private final IGridLayoutInfo<C> m_layout;
+	private final C m_component;
+	private final GridHelper m_gridHelper = new GridHelper(this, false);
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public GridSelectionEditPolicy(IGridLayoutInfo<C> layout, C component) {
-    super(component);
-    m_layout = layout;
-    m_component = component;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public GridSelectionEditPolicy(IGridLayoutInfo<C> layout, C component) {
+		super(component);
+		m_layout = layout;
+		m_component = component;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected boolean isActiveLayout() {
-    return m_layout.isActive();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected boolean isActiveLayout() {
+		return m_layout.isActive();
+	}
 
-  @Override
-  protected IGridInfo getGridInfo() {
-    return m_layout.getGridInfo();
-  }
+	@Override
+	protected IGridInfo getGridInfo() {
+		return m_layout.getGridInfo();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Selection
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected List<Handle> createSelectionHandles() {
-    List<Handle> handlesList = Lists.newArrayList();
-    // add move handle
-    handlesList.add(createMoveHandle());
-    // add resize handles
-    {
-      handlesList.add(createSizeHandle(IPositionConstants.EAST, 0.25));
-      handlesList.add(createSizeHandle(IPositionConstants.SOUTH, 0.25));
-    }
-    // add span handles
-    {
-      handlesList.add(createSpanHandle(IPositionConstants.NORTH, 0.25));
-      handlesList.add(createSpanHandle(IPositionConstants.WEST, 0.25));
-      handlesList.add(createSpanHandle(IPositionConstants.EAST, 0.75));
-      handlesList.add(createSpanHandle(IPositionConstants.SOUTH, 0.75));
-    }
-    //
-    return handlesList;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Selection
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected List<Handle> createSelectionHandles() {
+		List<Handle> handlesList = Lists.newArrayList();
+		// add move handle
+		handlesList.add(createMoveHandle());
+		// add resize handles
+		{
+			handlesList.add(createSizeHandle(IPositionConstants.EAST, 0.25));
+			handlesList.add(createSizeHandle(IPositionConstants.SOUTH, 0.25));
+		}
+		// add span handles
+		{
+			handlesList.add(createSpanHandle(IPositionConstants.NORTH, 0.25));
+			handlesList.add(createSpanHandle(IPositionConstants.WEST, 0.25));
+			handlesList.add(createSpanHandle(IPositionConstants.EAST, 0.75));
+			handlesList.add(createSpanHandle(IPositionConstants.SOUTH, 0.75));
+		}
+		//
+		return handlesList;
+	}
 
-  @Override
-  protected void showPrimarySelection() {
-    super.showPrimarySelection();
-    m_gridHelper.showGridFeedback();
-  }
+	@Override
+	protected void showPrimarySelection() {
+		super.showPrimarySelection();
+		m_gridHelper.showGridFeedback();
+	}
 
-  @Override
-  protected void hideSelection() {
-    m_gridHelper.eraseGridFeedback();
-    super.hideSelection();
-  }
+	@Override
+	protected void hideSelection() {
+		m_gridHelper.eraseGridFeedback();
+		super.hideSelection();
+	}
 
-  @Override
-  @SuppressWarnings("unchecked")
-  protected Figure createAlignmentFigure(IAbstractComponentInfo component, boolean horizontal) {
-    IEditPartViewer viewer = getHost().getViewer();
-    try {
-      final IGridDataInfo constraints = m_layout.getGridData2((C) component);
-      if (horizontal) {
-        return new AbstractPopupFigure(viewer, 9, 5) {
-          @Override
-          protected Image getImage() {
-            return constraints.getSmallAlignmentImage(true);
-          }
+	@Override
+	@SuppressWarnings("unchecked")
+	protected Figure createAlignmentFigure(IAbstractComponentInfo component, boolean horizontal) {
+		IEditPartViewer viewer = getHost().getViewer();
+		try {
+			final IGridDataInfo constraints = m_layout.getGridData2((C) component);
+			if (horizontal) {
+				return new AbstractPopupFigure(viewer, 9, 5) {
+					@Override
+					protected Image getImage() {
+						return constraints.getSmallAlignmentImage(true);
+					}
 
-          @Override
-          protected void fillMenu(IMenuManager manager) {
-            constraints.fillHorizontalAlignmentMenu(manager);
-          }
-        };
-      } else {
-        return new AbstractPopupFigure(viewer, 5, 9) {
-          @Override
-          protected Image getImage() {
-            return constraints.getSmallAlignmentImage(false);
-          }
+					@Override
+					protected void fillMenu(IMenuManager manager) {
+						constraints.fillHorizontalAlignmentMenu(manager);
+					}
+				};
+			} else {
+				return new AbstractPopupFigure(viewer, 5, 9) {
+					@Override
+					protected Image getImage() {
+						return constraints.getSmallAlignmentImage(false);
+					}
 
-          @Override
-          protected void fillMenu(IMenuManager manager) {
-            constraints.fillVerticalAlignmentMenu(manager);
-          }
-        };
-      }
-    } catch (Throwable e) {
-    }
-    return null;
-  }
+					@Override
+					protected void fillMenu(IMenuManager manager) {
+						constraints.fillVerticalAlignmentMenu(manager);
+					}
+				};
+			}
+		} catch (Throwable e) {
+		}
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Resize support
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Command createSizeCommand(final boolean horizontal, final Dimension size) {
-    return new EditCommand(m_object) {
-      @Override
-      protected void executeEdit() throws Exception {
-        m_layout.command_setSizeHint(m_component, horizontal, size);
-      }
-    };
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Resize support
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Command createSizeCommand(final boolean horizontal, final Dimension size) {
+		return new EditCommand(m_object) {
+			@Override
+			protected void executeEdit() throws Exception {
+				m_layout.command_setSizeHint(m_component, horizontal, size);
+			}
+		};
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Span
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Command createSpanCommand(final boolean horizontal, final Rectangle cells) {
-    return new EditCommand(m_object) {
-      @Override
-      protected void executeEdit() throws Exception {
-        m_layout.command_setCells(m_component, cells, true);
-      }
-    };
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Span
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Command createSpanCommand(final boolean horizontal, final Rectangle cells) {
+		return new EditCommand(m_object) {
+			@Override
+			protected void executeEdit() throws Exception {
+				m_layout.command_setCells(m_component, cells, true);
+			}
+		};
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Keyboard
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void performRequest(Request request) {
-    if (request instanceof KeyRequest) {
-      KeyRequest keyRequest = (KeyRequest) request;
-      if (keyRequest.isPressed()) {
-        char c = keyRequest.getCharacter();
-        // FILL_BOTH
-        if (c == 'o') {
-          setFillBoth();
-        }
-        // horizontal
-        if (c == 'h') {
-          flipGrab(true);
-        } else if (c == 'l') {
-          setAlignment(true, SWT.LEFT);
-        } else if (c == 'c') {
-          setAlignment(true, SWT.CENTER);
-        } else if (c == 'r') {
-          setAlignment(true, SWT.RIGHT);
-        } else if (c == 'f') {
-          setAlignment(true, SWT.FILL);
-        }
-        // vertical
-        if (c == 'v') {
-          flipGrab(false);
-        } else if (c == 't') {
-          setAlignment(false, SWT.TOP);
-        } else if (c == 'm') {
-          setAlignment(false, SWT.CENTER);
-        } else if (c == 'b') {
-          setAlignment(false, SWT.BOTTOM);
-        } else if (c == 'F') {
-          setAlignment(false, SWT.FILL);
-        }
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Keyboard
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void performRequest(Request request) {
+		if (request instanceof KeyRequest) {
+			KeyRequest keyRequest = (KeyRequest) request;
+			if (keyRequest.isPressed()) {
+				char c = keyRequest.getCharacter();
+				// FILL_BOTH
+				if (c == 'o') {
+					setFillBoth();
+				}
+				// horizontal
+				if (c == 'h') {
+					flipGrab(true);
+				} else if (c == 'l') {
+					setAlignment(true, SWT.LEFT);
+				} else if (c == 'c') {
+					setAlignment(true, SWT.CENTER);
+				} else if (c == 'r') {
+					setAlignment(true, SWT.RIGHT);
+				} else if (c == 'f') {
+					setAlignment(true, SWT.FILL);
+				}
+				// vertical
+				if (c == 'v') {
+					flipGrab(false);
+				} else if (c == 't') {
+					setAlignment(false, SWT.TOP);
+				} else if (c == 'm') {
+					setAlignment(false, SWT.CENTER);
+				} else if (c == 'b') {
+					setAlignment(false, SWT.BOTTOM);
+				} else if (c == 'F') {
+					setAlignment(false, SWT.FILL);
+				}
+			}
+		}
+	}
 
-  /**
-   * Sets the {@link SWT#FILL_BOTH} grab/alignment.
-   */
-  private void setFillBoth() {
-    execute(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        IGridDataInfo gridData = m_layout.getGridData2(m_component);
-        gridData.setHorizontalGrab(true);
-        gridData.setVerticalGrab(true);
-        gridData.setHorizontalAlignment(SWT.FILL);
-        gridData.setVerticalAlignment(SWT.FILL);
-      }
-    });
-  }
+	/**
+	 * Sets the {@link SWT#FILL_BOTH} grab/alignment.
+	 */
+	private void setFillBoth() {
+		execute(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				IGridDataInfo gridData = m_layout.getGridData2(m_component);
+				gridData.setHorizontalGrab(true);
+				gridData.setVerticalGrab(true);
+				gridData.setHorizontalAlignment(SWT.FILL);
+				gridData.setVerticalAlignment(SWT.FILL);
+			}
+		});
+	}
 
-  /**
-   * Flips the horizontal/vertical grab.
-   */
-  private void flipGrab(final boolean horizontal) {
-    execute(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        IGridDataInfo gridData = m_layout.getGridData2(m_component);
-        if (horizontal) {
-          gridData.setHorizontalGrab(!gridData.getHorizontalGrab());
-        } else {
-          gridData.setVerticalGrab(!gridData.getVerticalGrab());
-        }
-      }
-    });
-  }
+	/**
+	 * Flips the horizontal/vertical grab.
+	 */
+	private void flipGrab(final boolean horizontal) {
+		execute(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				IGridDataInfo gridData = m_layout.getGridData2(m_component);
+				if (horizontal) {
+					gridData.setHorizontalGrab(!gridData.getHorizontalGrab());
+				} else {
+					gridData.setVerticalGrab(!gridData.getVerticalGrab());
+				}
+			}
+		});
+	}
 
-  /**
-   * Sets the horizontal/vertical alignment.
-   */
-  private void setAlignment(final boolean horizontal, final int alignment) {
-    execute(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        IGridDataInfo gridData = m_layout.getGridData2(m_component);
-        if (horizontal) {
-          gridData.setHorizontalAlignment(alignment);
-        } else {
-          gridData.setVerticalAlignment(alignment);
-        }
-      }
-    });
-  }
+	/**
+	 * Sets the horizontal/vertical alignment.
+	 */
+	private void setAlignment(final boolean horizontal, final int alignment) {
+		execute(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				IGridDataInfo gridData = m_layout.getGridData2(m_component);
+				if (horizontal) {
+					gridData.setHorizontalAlignment(alignment);
+				} else {
+					gridData.setVerticalAlignment(alignment);
+				}
+			}
+		});
+	}
 
-  /**
-   * Executes given {@link RunnableEx} as edit operation.
-   */
-  private void execute(final RunnableEx runnable) {
-    getHost().getViewer().getEditDomain().executeCommand(new EditCommand(m_object) {
-      @Override
-      protected void executeEdit() throws Exception {
-        runnable.run();
-      }
-    });
-  }
+	/**
+	 * Executes given {@link RunnableEx} as edit operation.
+	 */
+	private void execute(final RunnableEx runnable) {
+		getHost().getViewer().getEditDomain().executeCommand(new EditCommand(m_object) {
+			@Override
+			protected void executeEdit() throws Exception {
+				runnable.run();
+			}
+		});
+	}
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/grid/header/actions/DimensionHeaderAction.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/grid/header/actions/DimensionHeaderAction.java
index da32b49bd..861a06b08 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/grid/header/actions/DimensionHeaderAction.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/grid/header/actions/DimensionHeaderAction.java
@@ -30,81 +30,81 @@
  * @coverage swt.gef.GridLayout
  */
 public abstract class DimensionHeaderAction<C extends IControlInfo> extends ObjectInfoAction {
-  private final IEditPartViewer m_viewer;
+	private final IEditPartViewer m_viewer;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DimensionHeaderAction(DimensionHeaderEditPart<C> editPart, String text) {
-    this(editPart, text, null);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DimensionHeaderAction(DimensionHeaderEditPart<C> editPart, String text) {
+		this(editPart, text, null);
+	}
 
-  public DimensionHeaderAction(DimensionHeaderEditPart<C> editPart,
-      String text,
-      ImageDescriptor imageDescriptor) {
-    this(editPart, text, imageDescriptor, AS_PUSH_BUTTON);
-  }
+	public DimensionHeaderAction(DimensionHeaderEditPart<C> editPart,
+			String text,
+			ImageDescriptor imageDescriptor) {
+		this(editPart, text, imageDescriptor, AS_PUSH_BUTTON);
+	}
 
-  public DimensionHeaderAction(DimensionHeaderEditPart<C> editPart,
-      String text,
-      ImageDescriptor imageDescriptor,
-      int style) {
-    super(editPart.getLayout().getUnderlyingModel(), text, style);
-    m_viewer = editPart.getViewer();
-    setImageDescriptor(imageDescriptor);
-  }
+	public DimensionHeaderAction(DimensionHeaderEditPart<C> editPart,
+			String text,
+			ImageDescriptor imageDescriptor,
+			int style) {
+		super(editPart.getLayout().getUnderlyingModel(), text, style);
+		m_viewer = editPart.getViewer();
+		setImageDescriptor(imageDescriptor);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final int hashCode() {
-    return 0;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final int hashCode() {
+		return 0;
+	}
 
-  @Override
-  public boolean equals(Object obj) {
-    return getClass() == obj.getClass();
-  }
+	@Override
+	public boolean equals(Object obj) {
+		return getClass() == obj.getClass();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Run
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  @SuppressWarnings("unchecked")
-  protected final void runEx() throws Exception {
-    // prepare selection
-    List<GridDimensionInfo<C>> dimensions = Lists.newArrayList();
-    {
-      for (EditPart editPart : m_viewer.getSelectedEditParts()) {
-        if (editPart instanceof DimensionHeaderEditPart<?>) {
-          DimensionHeaderEditPart<C> headerEditPart = (DimensionHeaderEditPart<C>) editPart;
-          dimensions.add(headerEditPart.getDimension());
-        }
-      }
-    }
-    // run over them
-    run(dimensions);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Run
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	@SuppressWarnings("unchecked")
+	protected final void runEx() throws Exception {
+		// prepare selection
+		List<GridDimensionInfo<C>> dimensions = Lists.newArrayList();
+		{
+			for (EditPart editPart : m_viewer.getSelectedEditParts()) {
+				if (editPart instanceof DimensionHeaderEditPart<?>) {
+					DimensionHeaderEditPart<C> headerEditPart = (DimensionHeaderEditPart<C>) editPart;
+					dimensions.add(headerEditPart.getDimension());
+				}
+			}
+		}
+		// run over them
+		run(dimensions);
+	}
 
-  /**
-   * Does some operation on {@link List} of selected {@link GridDimensionInfo}'s.
-   */
-  protected void run(List<GridDimensionInfo<C>> dimensions) throws Exception {
-    for (GridDimensionInfo<C> dimension : dimensions) {
-      run(dimension);
-    }
-  }
+	/**
+	 * Does some operation on {@link List} of selected {@link GridDimensionInfo}'s.
+	 */
+	protected void run(List<GridDimensionInfo<C>> dimensions) throws Exception {
+		for (GridDimensionInfo<C> dimension : dimensions) {
+			run(dimension);
+		}
+	}
 
-  /**
-   * Does some operation on selected {@link GridDimensionInfo}'s.
-   */
-  protected void run(GridDimensionInfo<C> dimension) throws Exception {
-  }
+	/**
+	 * Does some operation on selected {@link GridDimensionInfo}'s.
+	 */
+	protected void run(GridDimensionInfo<C> dimension) throws Exception {
+	}
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/grid/header/actions/SetAlignmentAction.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/grid/header/actions/SetAlignmentAction.java
index 2ab269fff..bc54e8bf4 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/grid/header/actions/SetAlignmentAction.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/grid/header/actions/SetAlignmentAction.java
@@ -26,29 +26,29 @@
  * @coverage swt.gef.GridLayout
  */
 public final class SetAlignmentAction<C extends IControlInfo> extends DimensionHeaderAction<C> {
-  private final int m_alignment;
+	private final int m_alignment;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SetAlignmentAction(DimensionHeaderEditPart<C> header,
-      String text,
-      ImageDescriptor imageDescriptor,
-      int alignment) {
-    super(header, text, imageDescriptor, AS_RADIO_BUTTON);
-    m_alignment = alignment;
-    setChecked(ObjectUtils.equals(header.getDimension().getAlignment(), m_alignment));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SetAlignmentAction(DimensionHeaderEditPart<C> header,
+			String text,
+			ImageDescriptor imageDescriptor,
+			int alignment) {
+		super(header, text, imageDescriptor, AS_RADIO_BUTTON);
+		m_alignment = alignment;
+		setChecked(ObjectUtils.equals(header.getDimension().getAlignment(), m_alignment));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Run
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void run(GridDimensionInfo<C> dimension) throws Exception {
-    dimension.setAlignment(m_alignment);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Run
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void run(GridDimensionInfo<C> dimension) throws Exception {
+		dimension.setAlignment(m_alignment);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/grid/header/actions/SetGrabAction.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/grid/header/actions/SetGrabAction.java
index e313b41e5..5b78a2374 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/grid/header/actions/SetGrabAction.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/grid/header/actions/SetGrabAction.java
@@ -24,25 +24,25 @@
  * @coverage swt.gef.GridLayout
  */
 public final class SetGrabAction<C extends IControlInfo> extends DimensionHeaderAction<C> {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SetGrabAction(DimensionHeaderEditPart<C> header,
-      String text,
-      ImageDescriptor imageDescriptor) {
-    super(header, text, imageDescriptor, AS_CHECK_BOX);
-    setChecked(header.getDimension().getGrab());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SetGrabAction(DimensionHeaderEditPart<C> header,
+			String text,
+			ImageDescriptor imageDescriptor) {
+		super(header, text, imageDescriptor, AS_CHECK_BOX);
+		setChecked(header.getDimension().getGrab());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Run
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void run(GridDimensionInfo<C> dimension) throws Exception {
-    dimension.setGrab(!dimension.getGrab());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Run
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void run(GridDimensionInfo<C> dimension) throws Exception {
+		dimension.setGrab(!dimension.getGrab());
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/grid/header/edit/ColumnHeaderEditPart.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/grid/header/edit/ColumnHeaderEditPart.java
index 9818a262e..a0c046e85 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/grid/header/edit/ColumnHeaderEditPart.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/grid/header/edit/ColumnHeaderEditPart.java
@@ -42,172 +42,172 @@
  * @coverage swt.gef.GridLayout
  */
 public final class ColumnHeaderEditPart<C extends IControlInfo> extends DimensionHeaderEditPart<C> {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ColumnHeaderEditPart(IGridLayoutInfo<C> layout,
-      GridColumnInfo<C> column,
-      Figure containerFigure) {
-    super(layout, column, containerFigure);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ColumnHeaderEditPart(IGridLayoutInfo<C> layout,
+			GridColumnInfo<C> column,
+			Figure containerFigure) {
+		super(layout, column, containerFigure);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Figure
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Figure createFigure() {
-    Figure newFigure = new Figure() {
-      @Override
-      protected void paintClientArea(Graphics graphics) {
-        Rectangle r = getClientArea();
-        // draw rectangle
-        graphics.setForegroundColor(IColorConstants.buttonDarker);
-        graphics.drawLine(r.x, r.y, r.x, r.bottom());
-        graphics.drawLine(r.right() - 1, r.y, r.right() - 1, r.bottom());
-        // draw column index
-        int titleLeft;
-        int titleRight;
-        {
-          String title = "" + (1 + m_dimension.getIndex());
-          Dimension textExtents = graphics.getTextExtent(title);
-          if (r.width < 3 + textExtents.width + 3) {
-            return;
-          }
-          // draw title
-          titleLeft = r.x + (r.width - textExtents.width) / 2;
-          titleRight = titleLeft + textExtents.width;
-          int y = r.y + (r.height - textExtents.height) / 2;
-          graphics.setForegroundColor(IColorConstants.black);
-          graphics.drawText(title, titleLeft, y);
-        }
-        //
-        try {
-          // draw alignment indicator
-          {
-            Integer alignmentValue = m_dimension.getAlignment();
-            if (alignmentValue != null && titleLeft - r.x > 3 + 7 + 3) {
-              int alignment = alignmentValue.intValue();
-              Image image;
-              if (alignment == SWT.LEFT) {
-                image = getImage("left.gif");
-              } else if (alignment == SWT.CENTER) {
-                image = getImage("center.gif");
-              } else if (alignment == SWT.RIGHT) {
-                image = getImage("right.gif");
-              } else {
-                image = getImage("fill.gif");
-              }
-              //
-              int x = r.x + 2;
-              drawCentered(graphics, image, x);
-            }
-          }
-          // draw grow indicator
-          if (m_dimension.getGrab()) {
-            if (titleRight + 3 + 7 + 3 < r.right()) {
-              Image image = getImage("grow.gif");
-              drawCentered(graphics, image, r.right() - 3 - image.getBounds().width);
-            }
-          }
-        } catch (Throwable e) {
-          e.printStackTrace();
-        }
-      }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Figure
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Figure createFigure() {
+		Figure newFigure = new Figure() {
+			@Override
+			protected void paintClientArea(Graphics graphics) {
+				Rectangle r = getClientArea();
+				// draw rectangle
+				graphics.setForegroundColor(IColorConstants.buttonDarker);
+				graphics.drawLine(r.x, r.y, r.x, r.bottom());
+				graphics.drawLine(r.right() - 1, r.y, r.right() - 1, r.bottom());
+				// draw column index
+				int titleLeft;
+				int titleRight;
+				{
+					String title = "" + (1 + m_dimension.getIndex());
+					Dimension textExtents = graphics.getTextExtent(title);
+					if (r.width < 3 + textExtents.width + 3) {
+						return;
+					}
+					// draw title
+					titleLeft = r.x + (r.width - textExtents.width) / 2;
+					titleRight = titleLeft + textExtents.width;
+					int y = r.y + (r.height - textExtents.height) / 2;
+					graphics.setForegroundColor(IColorConstants.black);
+					graphics.drawText(title, titleLeft, y);
+				}
+				//
+				try {
+					// draw alignment indicator
+					{
+						Integer alignmentValue = m_dimension.getAlignment();
+						if (alignmentValue != null && titleLeft - r.x > 3 + 7 + 3) {
+							int alignment = alignmentValue.intValue();
+							Image image;
+							if (alignment == SWT.LEFT) {
+								image = getImage("left.gif");
+							} else if (alignment == SWT.CENTER) {
+								image = getImage("center.gif");
+							} else if (alignment == SWT.RIGHT) {
+								image = getImage("right.gif");
+							} else {
+								image = getImage("fill.gif");
+							}
+							//
+							int x = r.x + 2;
+							drawCentered(graphics, image, x);
+						}
+					}
+					// draw grow indicator
+					if (m_dimension.getGrab()) {
+						if (titleRight + 3 + 7 + 3 < r.right()) {
+							Image image = getImage("grow.gif");
+							drawCentered(graphics, image, r.right() - 3 - image.getBounds().width);
+						}
+					}
+				} catch (Throwable e) {
+					e.printStackTrace();
+				}
+			}
 
-      private Image getImage(String name) {
-        return GridImages.getImage("h/" + name);
-      }
+			private Image getImage(String name) {
+				return GridImages.getImage("h/" + name);
+			}
 
-      private void drawCentered(Graphics graphics, Image image, int x) {
-        int y = (getBounds().height - image.getBounds().height) / 2;
-        graphics.drawImage(image, x, y);
-      }
-    };
-    //
-    newFigure.setFont(DEFAULT_FONT);
-    newFigure.setOpaque(true);
-    return newFigure;
-  }
+			private void drawCentered(Graphics graphics, Image image, int x) {
+				int y = (getBounds().height - image.getBounds().height) / 2;
+				graphics.drawImage(image, x, y);
+			}
+		};
+		//
+		newFigure.setFont(DEFAULT_FONT);
+		newFigure.setOpaque(true);
+		return newFigure;
+	}
 
-  @Override
-  protected void refreshVisuals() {
-    super.refreshVisuals();
-    // prepare column interval
-    Interval interval;
-    {
-      int index = m_dimension.getIndex();
-      IGridInfo gridInfo = m_layout.getGridInfo();
-      interval = gridInfo.getColumnIntervals()[index];
-    }
-    // prepare bounds
-    Rectangle bounds;
-    {
-      bounds =
-          new Rectangle(interval.begin(),
-              0,
-              interval.length()+ 1,
-              ((GraphicalEditPart) getParent()).getFigure().getSize().height);
-      translateModelToFeedback(bounds);
-    }
-    // set bounds
-    getFigure().setBounds(bounds);
-  }
+	@Override
+	protected void refreshVisuals() {
+		super.refreshVisuals();
+		// prepare column interval
+		Interval interval;
+		{
+			int index = m_dimension.getIndex();
+			IGridInfo gridInfo = m_layout.getGridInfo();
+			interval = gridInfo.getColumnIntervals()[index];
+		}
+		// prepare bounds
+		Rectangle bounds;
+		{
+			bounds =
+					new Rectangle(interval.begin(),
+							0,
+							interval.length()+ 1,
+							((GraphicalEditPart) getParent()).getFigure().getSize().height);
+			translateModelToFeedback(bounds);
+		}
+		// set bounds
+		getFigure().setBounds(bounds);
+	}
 
-  /**
-   * Converts "model" {@link Rectangle} into feedback coordinates.
-   */
-  public void translateModelToFeedback(Rectangle r) {
-    PolicyUtils.modelToFeedback_rightToLeft(r, m_layout.getComposite());
-    r.performTranslate(getOffset().x, 0);
-  }
+	/**
+	 * Converts "model" {@link Rectangle} into feedback coordinates.
+	 */
+	public void translateModelToFeedback(Rectangle r) {
+		PolicyUtils.modelToFeedback_rightToLeft(r, m_layout.getComposite());
+		r.performTranslate(getOffset().x, 0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IHeaderMenuProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void buildContextMenu(IMenuManager manager) {
-    // grab
-    {
-      manager.add(new SetGrabAction<C>(this,
-          GefMessages.ColumnHeaderEditPart_grabExcessSpace,
-          GridImages.getImageDescriptor("h/menu/grow.gif")));
-    }
-    // alignment
-    {
-      manager.add(new Separator());
-      manager.add(new SetAlignmentAction<C>(this,
-          GefMessages.ColumnHeaderEditPart_left,
-          GridImages.getImageDescriptor("h/menu/left.gif"),
-          SWT.LEFT));
-      manager.add(new SetAlignmentAction<C>(this,
-          GefMessages.ColumnHeaderEditPart_center,
-          GridImages.getImageDescriptor("h/menu/center.gif"),
-          SWT.CENTER));
-      manager.add(new SetAlignmentAction<C>(this,
-          GefMessages.ColumnHeaderEditPart_right,
-          GridImages.getImageDescriptor("h/menu/right.gif"),
-          SWT.RIGHT));
-      manager.add(new SetAlignmentAction<C>(this,
-          GefMessages.ColumnHeaderEditPart_fill,
-          GridImages.getImageDescriptor("h/menu/fill.gif"),
-          SWT.FILL));
-    }
-    // operations
-    {
-      manager.add(new Separator());
-      manager.add(new DimensionHeaderAction<C>(this, GefMessages.ColumnHeaderEditPart_delete,
-          GridImages.getImageDescriptor("h/menu/delete.gif")) {
-        @Override
-        protected void run(GridDimensionInfo<C> dimension) throws Exception {
-          m_layout.command_deleteColumn(dimension.getIndex(), true);
-        }
-      });
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IHeaderMenuProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void buildContextMenu(IMenuManager manager) {
+		// grab
+		{
+			manager.add(new SetGrabAction<C>(this,
+					GefMessages.ColumnHeaderEditPart_grabExcessSpace,
+					GridImages.getImageDescriptor("h/menu/grow.gif")));
+		}
+		// alignment
+		{
+			manager.add(new Separator());
+			manager.add(new SetAlignmentAction<C>(this,
+					GefMessages.ColumnHeaderEditPart_left,
+					GridImages.getImageDescriptor("h/menu/left.gif"),
+					SWT.LEFT));
+			manager.add(new SetAlignmentAction<C>(this,
+					GefMessages.ColumnHeaderEditPart_center,
+					GridImages.getImageDescriptor("h/menu/center.gif"),
+					SWT.CENTER));
+			manager.add(new SetAlignmentAction<C>(this,
+					GefMessages.ColumnHeaderEditPart_right,
+					GridImages.getImageDescriptor("h/menu/right.gif"),
+					SWT.RIGHT));
+			manager.add(new SetAlignmentAction<C>(this,
+					GefMessages.ColumnHeaderEditPart_fill,
+					GridImages.getImageDescriptor("h/menu/fill.gif"),
+					SWT.FILL));
+		}
+		// operations
+		{
+			manager.add(new Separator());
+			manager.add(new DimensionHeaderAction<C>(this, GefMessages.ColumnHeaderEditPart_delete,
+					GridImages.getImageDescriptor("h/menu/delete.gif")) {
+				@Override
+				protected void run(GridDimensionInfo<C> dimension) throws Exception {
+					m_layout.command_deleteColumn(dimension.getIndex(), true);
+				}
+			});
+		}
+	}
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/grid/header/edit/DimensionHeaderEditPart.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/grid/header/edit/DimensionHeaderEditPart.java
index 9b463d7d4..96b09d536 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/grid/header/edit/DimensionHeaderEditPart.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/grid/header/edit/DimensionHeaderEditPart.java
@@ -37,103 +37,103 @@
  * @coverage swt.gef.GridLayout
  */
 public abstract class DimensionHeaderEditPart<C extends IControlInfo> extends GraphicalEditPart
-    implements
-      IHeaderMenuProvider {
-  protected static final Color COLOR_NORMAL = Headers.COLOR_HEADER;
-  protected static final Font DEFAULT_FONT = new Font(null, "Arial", 7, SWT.NONE);
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance fields
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected final IGridLayoutInfo<C> m_layout;
-  protected final GridDimensionInfo<C> m_dimension;
-  private final Figure m_containerFigure;
+implements
+IHeaderMenuProvider {
+	protected static final Color COLOR_NORMAL = Headers.COLOR_HEADER;
+	protected static final Font DEFAULT_FONT = new Font(null, "Arial", 7, SWT.NONE);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance fields
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected final IGridLayoutInfo<C> m_layout;
+	protected final GridDimensionInfo<C> m_dimension;
+	private final Figure m_containerFigure;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DimensionHeaderEditPart(IGridLayoutInfo<C> layout,
-      GridDimensionInfo<C> dimension,
-      Figure containerFigure) {
-    m_layout = layout;
-    m_dimension = dimension;
-    m_containerFigure = containerFigure;
-    setModel(dimension);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DimensionHeaderEditPart(IGridLayoutInfo<C> layout,
+			GridDimensionInfo<C> dimension,
+			Figure containerFigure) {
+		m_layout = layout;
+		m_dimension = dimension;
+		m_containerFigure = containerFigure;
+		setModel(dimension);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the host {@link IGridLayoutInfo}.
-   */
-  public final IGridLayoutInfo<C> getLayout() {
-    return m_layout;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the host {@link IGridLayoutInfo}.
+	 */
+	public final IGridLayoutInfo<C> getLayout() {
+		return m_layout;
+	}
 
-  /**
-   * @return the {@link GridDimensionInfo} model.
-   */
-  public final GridDimensionInfo<C> getDimension() {
-    return m_dimension;
-  }
+	/**
+	 * @return the {@link GridDimensionInfo} model.
+	 */
+	public final GridDimensionInfo<C> getDimension() {
+		return m_dimension;
+	}
 
-  /**
-   * @return the offset of {@link Figure} with headers relative to the absolute layer.
-   */
-  public final Point getOffset() {
-    Point offset = new Point(0, 0);
-    FigureUtils.translateFigureToAbsolute2(m_containerFigure, offset);
-    offset.performTranslate(m_layout.getComposite().getClientAreaInsets());
-    return offset;
-  }
+	/**
+	 * @return the offset of {@link Figure} with headers relative to the absolute layer.
+	 */
+	public final Point getOffset() {
+		Point offset = new Point(0, 0);
+		FigureUtils.translateFigureToAbsolute2(m_containerFigure, offset);
+		offset.performTranslate(m_layout.getComposite().getClientAreaInsets());
+		return offset;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Dragging
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final Tool getDragTrackerTool(Request request) {
-    return new ParentTargetDragEditPartTracker(this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Dragging
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final Tool getDragTrackerTool(Request request) {
+		return new ParentTargetDragEditPartTracker(this);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Figure support
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void refreshVisuals() {
-    ExecutionUtils.runLog(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        getFigure().setToolTipText(m_dimension.getTitle());
-        getFigure().setBackground(COLOR_NORMAL);
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Figure support
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void refreshVisuals() {
+		ExecutionUtils.runLog(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				getFigure().setToolTipText(m_dimension.getTitle());
+				getFigure().setBackground(COLOR_NORMAL);
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Edit
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void performRequest(Request request) {
-    super.performRequest(request);
-    if (request.getType() == Request.REQ_OPEN) {
-      ExecutionUtils.run(m_layout.getUnderlyingModel(), new RunnableEx() {
-        @Override
-        public void run() throws Exception {
-          m_dimension.flipGrab();
-        }
-      });
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Edit
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void performRequest(Request request) {
+		super.performRequest(request);
+		if (request.getType() == Request.REQ_OPEN) {
+			ExecutionUtils.run(m_layout.getUnderlyingModel(), new RunnableEx() {
+				@Override
+				public void run() throws Exception {
+					m_dimension.flipGrab();
+				}
+			});
+		}
+	}
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/grid/header/edit/RowHeaderEditPart.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/grid/header/edit/RowHeaderEditPart.java
index fed04db36..e68cbce88 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/grid/header/edit/RowHeaderEditPart.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/grid/header/edit/RowHeaderEditPart.java
@@ -41,162 +41,162 @@
  * @coverage swt.gef.GridLayout
  */
 public final class RowHeaderEditPart<C extends IControlInfo> extends DimensionHeaderEditPart<C> {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public RowHeaderEditPart(IGridLayoutInfo<C> layout, GridRowInfo<C> row, Figure containerFigure) {
-    super(layout, row, containerFigure);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public RowHeaderEditPart(IGridLayoutInfo<C> layout, GridRowInfo<C> row, Figure containerFigure) {
+		super(layout, row, containerFigure);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Figure
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Figure createFigure() {
-    Figure newFigure = new Figure() {
-      @Override
-      protected void paintClientArea(Graphics graphics) {
-        Rectangle r = getClientArea();
-        // draw rectangle
-        graphics.setForegroundColor(IColorConstants.buttonDarker);
-        graphics.drawLine(r.x, r.y, r.right(), r.y);
-        graphics.drawLine(r.x, r.bottom() - 1, r.right(), r.bottom() - 1);
-        // draw row index
-        int titleTop;
-        int titleBottom;
-        {
-          String title = "" + (1 + m_dimension.getIndex());
-          Dimension textExtents = graphics.getTextExtent(title);
-          if (r.height < 3 + textExtents.height + 3) {
-            return;
-          }
-          // draw title
-          titleTop = r.y + (r.height - textExtents.height) / 2;
-          titleBottom = titleTop + textExtents.height;
-          int x = r.x + (r.width - textExtents.width) / 2;
-          graphics.setForegroundColor(IColorConstants.black);
-          graphics.drawText(title, x, titleTop);
-        }
-        //
-        try {
-          // draw alignment indicator
-          {
-            Integer alignmentValue = m_dimension.getAlignment();
-            if (alignmentValue != null && titleTop - r.y > 3 + 7 + 3) {
-              int alignment = alignmentValue.intValue();
-              Image image;
-              if (alignment == SWT.TOP) {
-                image = getImage("top.gif");
-              } else if (alignment == SWT.CENTER) {
-                image = getImage("center.gif");
-              } else if (alignment == SWT.BOTTOM) {
-                image = getImage("bottom.gif");
-              } else {
-                image = getImage("fill.gif");
-              }
-              //
-              int y = r.y + 2;
-              drawCentered(graphics, image, y);
-            }
-          }
-          // draw grow indicator
-          if (m_dimension.getGrab()) {
-            if (titleBottom + 3 + 7 + 3 < r.bottom()) {
-              Image image = getImage("grow.gif");
-              drawCentered(graphics, image, r.bottom() - 3 - image.getBounds().height);
-            }
-          }
-        } catch (Throwable e) {
-          e.printStackTrace();
-        }
-      }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Figure
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Figure createFigure() {
+		Figure newFigure = new Figure() {
+			@Override
+			protected void paintClientArea(Graphics graphics) {
+				Rectangle r = getClientArea();
+				// draw rectangle
+				graphics.setForegroundColor(IColorConstants.buttonDarker);
+				graphics.drawLine(r.x, r.y, r.right(), r.y);
+				graphics.drawLine(r.x, r.bottom() - 1, r.right(), r.bottom() - 1);
+				// draw row index
+				int titleTop;
+				int titleBottom;
+				{
+					String title = "" + (1 + m_dimension.getIndex());
+					Dimension textExtents = graphics.getTextExtent(title);
+					if (r.height < 3 + textExtents.height + 3) {
+						return;
+					}
+					// draw title
+					titleTop = r.y + (r.height - textExtents.height) / 2;
+					titleBottom = titleTop + textExtents.height;
+					int x = r.x + (r.width - textExtents.width) / 2;
+					graphics.setForegroundColor(IColorConstants.black);
+					graphics.drawText(title, x, titleTop);
+				}
+				//
+				try {
+					// draw alignment indicator
+					{
+						Integer alignmentValue = m_dimension.getAlignment();
+						if (alignmentValue != null && titleTop - r.y > 3 + 7 + 3) {
+							int alignment = alignmentValue.intValue();
+							Image image;
+							if (alignment == SWT.TOP) {
+								image = getImage("top.gif");
+							} else if (alignment == SWT.CENTER) {
+								image = getImage("center.gif");
+							} else if (alignment == SWT.BOTTOM) {
+								image = getImage("bottom.gif");
+							} else {
+								image = getImage("fill.gif");
+							}
+							//
+							int y = r.y + 2;
+							drawCentered(graphics, image, y);
+						}
+					}
+					// draw grow indicator
+					if (m_dimension.getGrab()) {
+						if (titleBottom + 3 + 7 + 3 < r.bottom()) {
+							Image image = getImage("grow.gif");
+							drawCentered(graphics, image, r.bottom() - 3 - image.getBounds().height);
+						}
+					}
+				} catch (Throwable e) {
+					e.printStackTrace();
+				}
+			}
 
-      private Image getImage(String name) {
-        return GridImages.getImage("v/" + name);
-      }
+			private Image getImage(String name) {
+				return GridImages.getImage("v/" + name);
+			}
 
-      private void drawCentered(Graphics graphics, Image image, int y) {
-        int x = (getBounds().width - image.getBounds().width) / 2;
-        graphics.drawImage(image, x, y);
-      }
-    };
-    //
-    newFigure.setFont(DEFAULT_FONT);
-    newFigure.setOpaque(true);
-    return newFigure;
-  }
+			private void drawCentered(Graphics graphics, Image image, int y) {
+				int x = (getBounds().width - image.getBounds().width) / 2;
+				graphics.drawImage(image, x, y);
+			}
+		};
+		//
+		newFigure.setFont(DEFAULT_FONT);
+		newFigure.setOpaque(true);
+		return newFigure;
+	}
 
-  @Override
-  protected void refreshVisuals() {
-    super.refreshVisuals();
-    // prepare column interval
-    Interval interval;
-    {
-      int index = m_dimension.getIndex();
-      IGridInfo gridInfo = m_layout.getGridInfo();
-      interval = gridInfo.getRowIntervals()[index];
-    }
-    // prepare bounds
-    Rectangle bounds;
-    {
-      bounds =
-          new Rectangle(0,
-              interval.begin(),
-              ((GraphicalEditPart) getParent()).getFigure().getSize().width,
-              interval.length()+ 1);
-      bounds.performTranslate(0, getOffset().y);
-    }
-    // set bounds
-    getFigure().setBounds(bounds);
-  }
+	@Override
+	protected void refreshVisuals() {
+		super.refreshVisuals();
+		// prepare column interval
+		Interval interval;
+		{
+			int index = m_dimension.getIndex();
+			IGridInfo gridInfo = m_layout.getGridInfo();
+			interval = gridInfo.getRowIntervals()[index];
+		}
+		// prepare bounds
+		Rectangle bounds;
+		{
+			bounds =
+					new Rectangle(0,
+							interval.begin(),
+							((GraphicalEditPart) getParent()).getFigure().getSize().width,
+							interval.length()+ 1);
+			bounds.performTranslate(0, getOffset().y);
+		}
+		// set bounds
+		getFigure().setBounds(bounds);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IHeaderMenuProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void buildContextMenu(IMenuManager manager) {
-    // grab
-    {
-      manager.add(new SetGrabAction<C>(this,
-          GefMessages.RowHeaderEditPart_grabExcessSpace,
-          GridImages.getImageDescriptor("v/menu/grow.gif")));
-    }
-    // alignment
-    {
-      manager.add(new Separator());
-      manager.add(new SetAlignmentAction<C>(this,
-          GefMessages.RowHeaderEditPart_top,
-          GridImages.getImageDescriptor("v/menu/top.gif"),
-          SWT.TOP));
-      manager.add(new SetAlignmentAction<C>(this,
-          GefMessages.RowHeaderEditPart_center,
-          GridImages.getImageDescriptor("v/menu/center.gif"),
-          SWT.CENTER));
-      manager.add(new SetAlignmentAction<C>(this,
-          GefMessages.RowHeaderEditPart_bottom,
-          GridImages.getImageDescriptor("v/menu/bottom.gif"),
-          SWT.BOTTOM));
-      manager.add(new SetAlignmentAction<C>(this,
-          GefMessages.RowHeaderEditPart_fill,
-          GridImages.getImageDescriptor("h/menu/fill.gif"),
-          SWT.FILL));
-    }
-    // operations
-    {
-      manager.add(new Separator());
-      manager.add(new DimensionHeaderAction<C>(this, GefMessages.RowHeaderEditPart_delete,
-          GridImages.getImageDescriptor("v/menu/delete.gif")) {
-        @Override
-        protected void run(GridDimensionInfo<C> dimension) throws Exception {
-          m_layout.command_deleteRow(dimension.getIndex(), true);
-        }
-      });
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IHeaderMenuProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void buildContextMenu(IMenuManager manager) {
+		// grab
+		{
+			manager.add(new SetGrabAction<C>(this,
+					GefMessages.RowHeaderEditPart_grabExcessSpace,
+					GridImages.getImageDescriptor("v/menu/grow.gif")));
+		}
+		// alignment
+		{
+			manager.add(new Separator());
+			manager.add(new SetAlignmentAction<C>(this,
+					GefMessages.RowHeaderEditPart_top,
+					GridImages.getImageDescriptor("v/menu/top.gif"),
+					SWT.TOP));
+			manager.add(new SetAlignmentAction<C>(this,
+					GefMessages.RowHeaderEditPart_center,
+					GridImages.getImageDescriptor("v/menu/center.gif"),
+					SWT.CENTER));
+			manager.add(new SetAlignmentAction<C>(this,
+					GefMessages.RowHeaderEditPart_bottom,
+					GridImages.getImageDescriptor("v/menu/bottom.gif"),
+					SWT.BOTTOM));
+			manager.add(new SetAlignmentAction<C>(this,
+					GefMessages.RowHeaderEditPart_fill,
+					GridImages.getImageDescriptor("h/menu/fill.gif"),
+					SWT.FILL));
+		}
+		// operations
+		{
+			manager.add(new Separator());
+			manager.add(new DimensionHeaderAction<C>(this, GefMessages.RowHeaderEditPart_delete,
+					GridImages.getImageDescriptor("v/menu/delete.gif")) {
+				@Override
+				protected void run(GridDimensionInfo<C> dimension) throws Exception {
+					m_layout.command_deleteRow(dimension.getIndex(), true);
+				}
+			});
+		}
+	}
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/grid/header/layout/ColumnsLayoutEditPolicy.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/grid/header/layout/ColumnsLayoutEditPolicy.java
index 6b4b5ce25..acb818474 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/grid/header/layout/ColumnsLayoutEditPolicy.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/grid/header/layout/ColumnsLayoutEditPolicy.java
@@ -48,176 +48,176 @@
  * @coverage swt.gef.GridLayout
  */
 public final class ColumnsLayoutEditPolicy<C extends IControlInfo>
-    extends
-      AbstractHeaderLayoutEditPolicy {
-  private final GridLayoutEditPolicy<C> m_mainPolicy;
-  private final IGridLayoutInfo<C> m_layout;
+extends
+AbstractHeaderLayoutEditPolicy {
+	private final GridLayoutEditPolicy<C> m_mainPolicy;
+	private final IGridLayoutInfo<C> m_layout;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ColumnsLayoutEditPolicy(GridLayoutEditPolicy<C> mainPolicy, IGridLayoutInfo<C> layout) {
-    super(mainPolicy);
-    m_mainPolicy = mainPolicy;
-    m_layout = layout;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ColumnsLayoutEditPolicy(GridLayoutEditPolicy<C> mainPolicy, IGridLayoutInfo<C> layout) {
+		super(mainPolicy);
+		m_mainPolicy = mainPolicy;
+		m_layout = layout;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Children
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void decorateChild(EditPart child) {
-    child.installEditPolicy(
-        EditPolicy.SELECTION_ROLE,
-        new ColumnSelectionEditPolicy<C>(m_mainPolicy));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Children
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void decorateChild(EditPart child) {
+		child.installEditPolicy(
+				EditPolicy.SELECTION_ROLE,
+				new ColumnSelectionEditPolicy<C>(m_mainPolicy));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Move
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final Figure m_insertFeedback = AbstractGridLayoutEditPolicy.createInsertFigure();
-  private TextFeedback m_feedback;
-  private Command m_moveCommand;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Move
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final Figure m_insertFeedback = AbstractGridLayoutEditPolicy.createInsertFigure();
+	private TextFeedback m_feedback;
+	private Command m_moveCommand;
 
-  @Override
-  protected Command getMoveCommand(ChangeBoundsRequest request) {
-    if (!m_layout.canChangeDimensions()) {
-      return null;
-    }
-    return m_moveCommand;
-  }
+	@Override
+	protected Command getMoveCommand(ChangeBoundsRequest request) {
+		if (!m_layout.canChangeDimensions()) {
+			return null;
+		}
+		return m_moveCommand;
+	}
 
-  @Override
-  @SuppressWarnings("unchecked")
-  protected void showLayoutTargetFeedback(Request request) {
-    // prepare header
-    ColumnHeaderEditPart<C> headerEditPart;
-    {
-      ChangeBoundsRequest changeBoundsRequest = (ChangeBoundsRequest) request;
-      headerEditPart = (ColumnHeaderEditPart<C>) changeBoundsRequest.getEditParts().get(0);
-    }
-    // prepare location
-    Point location;
-    {
-      IDropRequest dropRequest = (IDropRequest) request;
-      location = dropRequest.getLocation().getCopy();
-    }
-    // prepare grid information
-    IGridInfo gridInfo = m_layout.getGridInfo();
-    Interval[] columnIntervals = gridInfo.getColumnIntervals();
-    Interval[] rowIntervals = gridInfo.getRowIntervals();
-    int y1 = rowIntervals[0].begin() - 5;
-    int y2 = rowIntervals[rowIntervals.length - 1].end() + 5;
-    // prepare target header
-    DimensionHeaderEditPart<C> target = null;
-    {
-      List<EditPart> children = getHost().getChildren();
-      for (EditPart child : children) {
-        DimensionHeaderEditPart<C> columnEditPart = (DimensionHeaderEditPart<C>) child;
-        Rectangle bounds = columnEditPart.getFigure().getBounds();
-        if (gridInfo.isRTL()) {
-          if (location.x > bounds.getCenter().x) {
-            target = columnEditPart;
-            break;
-          }
-        } else {
-          if (location.x < bounds.getCenter().x) {
-            target = columnEditPart;
-            break;
-          }
-        }
-      }
-    }
-    // prepare index of target column and position for insert feedbacks
-    final int index;
-    int x;
-    int size;
-    if (target != null) {
-      index = target.getDimension().getIndex();
-      // prepare previous interval
-      Interval prevInterval;
-      if (index == 0) {
-        prevInterval = new Interval(0, 0);
-      } else {
-        prevInterval = columnIntervals[index - 1];
-      }
-      // prepare parameters
-      int[] parameters =
-          GridLayoutEditPolicy.getInsertFeedbackParameters(
-              prevInterval,
-              columnIntervals[index],
-              AbstractGridLayoutEditPolicy.INSERT_COLUMN_SIZE);
-      x = parameters[1];
-      size = parameters[2] - parameters[1];
-    } else {
-      index = m_layout.getColumns().size();
-      m_mainPolicy.showInsertFeedbacks(null, null);
-      // prepare parameters
-      x = columnIntervals[columnIntervals.length - 1].end() + 1;
-      size = AbstractGridLayoutEditPolicy.INSERT_COLUMN_SIZE;
-    }
-    // show insert feedbacks
-    {
-      // ...on main viewer
-      m_mainPolicy.showInsertFeedbacks(new Rectangle(x, y1, size, y2 - y1), null);
-      // ...on header viewer
-      {
-        if (m_insertFeedback.getParent() == null) {
-          addFeedback(m_insertFeedback);
-        }
-        //
-        Rectangle bounds = new Rectangle(x, 0, size, getHostFigure().getSize().height);
-        headerEditPart.translateModelToFeedback(bounds);
-        m_insertFeedback.setBounds(bounds);
-      }
-    }
-    // show text feedback
-    {
-      Layer feedbackLayer = getMainLayer(IEditPartViewer.FEEDBACK_LAYER);
-      // add feedback
-      if (m_feedback == null) {
-        m_feedback = new TextFeedback(feedbackLayer);
-        m_feedback.add();
-      }
-      // set feedback bounds
-      {
-        Point feedbackLocation = new Point(location.x + 30, 10);
-        FigureUtils.translateAbsoluteToFigure(feedbackLayer, feedbackLocation);
-        m_feedback.setLocation(feedbackLocation);
-      }
-      // set text
-      m_feedback.setText(GefMessages.ColumnsLayoutEditPolicy_feedbackTextPrefix + index);
-    }
-    // prepare command
-    {
-      GridColumnInfo<C> column = (GridColumnInfo<C>) headerEditPart.getDimension();
-      final int sourceIndex = column.getIndex();
-      if (index == sourceIndex || index == sourceIndex + 1) {
-        m_moveCommand = Command.EMPTY;
-      } else {
-        m_moveCommand = new EditCommand(m_layout) {
-          @Override
-          protected void executeEdit() throws Exception {
-            m_layout.command_MOVE_COLUMN(sourceIndex, index);
-          }
-        };
-      }
-    }
-  }
+	@Override
+	@SuppressWarnings("unchecked")
+	protected void showLayoutTargetFeedback(Request request) {
+		// prepare header
+		ColumnHeaderEditPart<C> headerEditPart;
+		{
+			ChangeBoundsRequest changeBoundsRequest = (ChangeBoundsRequest) request;
+			headerEditPart = (ColumnHeaderEditPart<C>) changeBoundsRequest.getEditParts().get(0);
+		}
+		// prepare location
+		Point location;
+		{
+			IDropRequest dropRequest = (IDropRequest) request;
+			location = dropRequest.getLocation().getCopy();
+		}
+		// prepare grid information
+		IGridInfo gridInfo = m_layout.getGridInfo();
+		Interval[] columnIntervals = gridInfo.getColumnIntervals();
+		Interval[] rowIntervals = gridInfo.getRowIntervals();
+		int y1 = rowIntervals[0].begin() - 5;
+		int y2 = rowIntervals[rowIntervals.length - 1].end() + 5;
+		// prepare target header
+		DimensionHeaderEditPart<C> target = null;
+		{
+			List<EditPart> children = getHost().getChildren();
+			for (EditPart child : children) {
+				DimensionHeaderEditPart<C> columnEditPart = (DimensionHeaderEditPart<C>) child;
+				Rectangle bounds = columnEditPart.getFigure().getBounds();
+				if (gridInfo.isRTL()) {
+					if (location.x > bounds.getCenter().x) {
+						target = columnEditPart;
+						break;
+					}
+				} else {
+					if (location.x < bounds.getCenter().x) {
+						target = columnEditPart;
+						break;
+					}
+				}
+			}
+		}
+		// prepare index of target column and position for insert feedbacks
+		final int index;
+		int x;
+		int size;
+		if (target != null) {
+			index = target.getDimension().getIndex();
+			// prepare previous interval
+			Interval prevInterval;
+			if (index == 0) {
+				prevInterval = new Interval(0, 0);
+			} else {
+				prevInterval = columnIntervals[index - 1];
+			}
+			// prepare parameters
+			int[] parameters =
+					GridLayoutEditPolicy.getInsertFeedbackParameters(
+							prevInterval,
+							columnIntervals[index],
+							AbstractGridLayoutEditPolicy.INSERT_COLUMN_SIZE);
+			x = parameters[1];
+			size = parameters[2] - parameters[1];
+		} else {
+			index = m_layout.getColumns().size();
+			m_mainPolicy.showInsertFeedbacks(null, null);
+			// prepare parameters
+			x = columnIntervals[columnIntervals.length - 1].end() + 1;
+			size = AbstractGridLayoutEditPolicy.INSERT_COLUMN_SIZE;
+		}
+		// show insert feedbacks
+		{
+			// ...on main viewer
+			m_mainPolicy.showInsertFeedbacks(new Rectangle(x, y1, size, y2 - y1), null);
+			// ...on header viewer
+			{
+				if (m_insertFeedback.getParent() == null) {
+					addFeedback(m_insertFeedback);
+				}
+				//
+				Rectangle bounds = new Rectangle(x, 0, size, getHostFigure().getSize().height);
+				headerEditPart.translateModelToFeedback(bounds);
+				m_insertFeedback.setBounds(bounds);
+			}
+		}
+		// show text feedback
+		{
+			Layer feedbackLayer = getMainLayer(IEditPartViewer.FEEDBACK_LAYER);
+			// add feedback
+			if (m_feedback == null) {
+				m_feedback = new TextFeedback(feedbackLayer);
+				m_feedback.add();
+			}
+			// set feedback bounds
+			{
+				Point feedbackLocation = new Point(location.x + 30, 10);
+				FigureUtils.translateAbsoluteToFigure(feedbackLayer, feedbackLocation);
+				m_feedback.setLocation(feedbackLocation);
+			}
+			// set text
+			m_feedback.setText(GefMessages.ColumnsLayoutEditPolicy_feedbackTextPrefix + index);
+		}
+		// prepare command
+		{
+			GridColumnInfo<C> column = (GridColumnInfo<C>) headerEditPart.getDimension();
+			final int sourceIndex = column.getIndex();
+			if (index == sourceIndex || index == sourceIndex + 1) {
+				m_moveCommand = Command.EMPTY;
+			} else {
+				m_moveCommand = new EditCommand(m_layout) {
+					@Override
+					protected void executeEdit() throws Exception {
+						m_layout.command_MOVE_COLUMN(sourceIndex, index);
+					}
+				};
+			}
+		}
+	}
 
-  @Override
-  protected void eraseLayoutTargetFeedback(Request request) {
-    m_mainPolicy.eraseInsertFeedbacks();
-    FigureUtils.removeFigure(m_insertFeedback);
-    if (m_feedback != null) {
-      m_feedback.remove();
-      m_feedback = null;
-    }
-  }
+	@Override
+	protected void eraseLayoutTargetFeedback(Request request) {
+		m_mainPolicy.eraseInsertFeedbacks();
+		FigureUtils.removeFigure(m_insertFeedback);
+		if (m_feedback != null) {
+			m_feedback.remove();
+			m_feedback = null;
+		}
+	}
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/grid/header/layout/RowsLayoutEditPolicy.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/grid/header/layout/RowsLayoutEditPolicy.java
index 03be03ca1..ac84bbcc9 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/grid/header/layout/RowsLayoutEditPolicy.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/grid/header/layout/RowsLayoutEditPolicy.java
@@ -48,173 +48,173 @@
  * @coverage swt.gef.GridLayout
  */
 public final class RowsLayoutEditPolicy<C extends IControlInfo>
-    extends
-      AbstractHeaderLayoutEditPolicy {
-  private final GridLayoutEditPolicy<C> m_mainPolicy;
-  private final IGridLayoutInfo<C> m_layout;
+extends
+AbstractHeaderLayoutEditPolicy {
+	private final GridLayoutEditPolicy<C> m_mainPolicy;
+	private final IGridLayoutInfo<C> m_layout;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public RowsLayoutEditPolicy(GridLayoutEditPolicy<C> mainPolicy, IGridLayoutInfo<C> layout) {
-    super(mainPolicy);
-    m_mainPolicy = mainPolicy;
-    m_layout = layout;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public RowsLayoutEditPolicy(GridLayoutEditPolicy<C> mainPolicy, IGridLayoutInfo<C> layout) {
+		super(mainPolicy);
+		m_mainPolicy = mainPolicy;
+		m_layout = layout;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Children
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void decorateChild(EditPart child) {
-    child.installEditPolicy(EditPolicy.SELECTION_ROLE, new RowSelectionEditPolicy<C>(m_mainPolicy));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Children
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void decorateChild(EditPart child) {
+		child.installEditPolicy(EditPolicy.SELECTION_ROLE, new RowSelectionEditPolicy<C>(m_mainPolicy));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Move
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final Figure m_insertFeedback = AbstractGridLayoutEditPolicy.createInsertFigure();
-  private TextFeedback m_feedback;
-  private int m_sourceIndex;
-  private int m_targetIndex;
-  private Command m_moveCommand;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Move
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final Figure m_insertFeedback = AbstractGridLayoutEditPolicy.createInsertFigure();
+	private TextFeedback m_feedback;
+	private int m_sourceIndex;
+	private int m_targetIndex;
+	private Command m_moveCommand;
 
-  @Override
-  protected Command getMoveCommand(ChangeBoundsRequest request) {
-    if (!m_layout.canChangeDimensions()) {
-      if (!m_layout.isExplicitRow(m_sourceIndex)) {
-        return null;
-      }
-      if (!m_layout.isExplicitRow(m_targetIndex)) {
-        return null;
-      }
-    }
-    return m_moveCommand;
-  }
+	@Override
+	protected Command getMoveCommand(ChangeBoundsRequest request) {
+		if (!m_layout.canChangeDimensions()) {
+			if (!m_layout.isExplicitRow(m_sourceIndex)) {
+				return null;
+			}
+			if (!m_layout.isExplicitRow(m_targetIndex)) {
+				return null;
+			}
+		}
+		return m_moveCommand;
+	}
 
-  @Override
-  @SuppressWarnings("unchecked")
-  protected void showLayoutTargetFeedback(Request request) {
-    // prepare header
-    DimensionHeaderEditPart<C> headerEditPart;
-    {
-      ChangeBoundsRequest changeBoundsRequest = (ChangeBoundsRequest) request;
-      headerEditPart = (DimensionHeaderEditPart<C>) changeBoundsRequest.getEditParts().get(0);
-    }
-    // prepare location
-    Point location;
-    {
-      IDropRequest dropRequest = (IDropRequest) request;
-      location = dropRequest.getLocation().getCopy();
-    }
-    // prepare target header
-    DimensionHeaderEditPart<C> target = null;
-    {
-      List<EditPart> children = getHost().getChildren();
-      for (EditPart child : children) {
-        DimensionHeaderEditPart<C> rowEditPart = (DimensionHeaderEditPart<C>) child;
-        Rectangle bounds = rowEditPart.getFigure().getBounds();
-        if (location.y < bounds.getCenter().y) {
-          target = rowEditPart;
-          break;
-        }
-      }
-    }
-    // prepare grid information
-    IGridInfo gridInfo = m_layout.getGridInfo();
-    Interval[] columnIntervals = gridInfo.getColumnIntervals();
-    Interval[] rowIntervals = gridInfo.getRowIntervals();
-    int x1 = columnIntervals[0].begin() - 5;
-    int x2 = columnIntervals[columnIntervals.length - 1].end() + 5;
-    // prepare index of target row and position for insert feedbacks
-    int y;
-    int size;
-    if (target != null) {
-      m_targetIndex = target.getDimension().getIndex();
-      // prepare previous interval
-      Interval prevInterval;
-      if (m_targetIndex == 0) {
-        prevInterval = new Interval(0, 0);
-      } else {
-        prevInterval = rowIntervals[m_targetIndex - 1];
-      }
-      // prepare parameters
-      int[] parameters =
-          GridLayoutEditPolicy.getInsertFeedbackParameters(
-              prevInterval,
-              rowIntervals[m_targetIndex],
-              AbstractGridLayoutEditPolicy.INSERT_ROW_SIZE);
-      y = parameters[1];
-      size = parameters[2] - parameters[1];
-    } else {
-      m_targetIndex = m_layout.getRows().size();
-      m_mainPolicy.showInsertFeedbacks(null, null);
-      // prepare parameters
-      y = rowIntervals[rowIntervals.length - 1].end() + 1;
-      size = AbstractGridLayoutEditPolicy.INSERT_ROW_SIZE;
-    }
-    // show insert feedbacks
-    {
-      // ...on main viewer
-      m_mainPolicy.showInsertFeedbacks(null, new Rectangle(x1, y, x2 - x1, size));
-      // ...on header viewer
-      {
-        if (m_insertFeedback.getParent() == null) {
-          addFeedback(m_insertFeedback);
-        }
-        //
-        Point offset = headerEditPart.getOffset();
-        Rectangle bounds = new Rectangle(0, y + offset.y, getHostFigure().getSize().width, size);
-        m_insertFeedback.setBounds(bounds);
-      }
-    }
-    // show text feedback
-    {
-      Layer feedbackLayer = getMainLayer(IEditPartViewer.FEEDBACK_LAYER);
-      // add feedback
-      if (m_feedback == null) {
-        m_feedback = new TextFeedback(feedbackLayer);
-        m_feedback.add();
-      }
-      // set feedback bounds
-      {
-        Point feedbackLocation = new Point(30, location.y + 10);
-        FigureUtils.translateAbsoluteToFigure(feedbackLayer, feedbackLocation);
-        m_feedback.setLocation(feedbackLocation);
-      }
-      // set text
-      m_feedback.setText(GefMessages.RowsLayoutEditPolicy_feedbackTextPrefix + m_targetIndex);
-    }
-    // prepare command
-    {
-      GridRowInfo<C> row = (GridRowInfo<C>) headerEditPart.getDimension();
-      m_sourceIndex = row.getIndex();
-      if (m_targetIndex == m_sourceIndex || m_targetIndex == m_sourceIndex + 1) {
-        m_moveCommand = Command.EMPTY;
-      } else {
-        m_moveCommand = new EditCommand(m_layout) {
-          @Override
-          protected void executeEdit() throws Exception {
-            m_layout.command_MOVE_ROW(m_sourceIndex, m_targetIndex);
-          }
-        };
-      }
-    }
-  }
+	@Override
+	@SuppressWarnings("unchecked")
+	protected void showLayoutTargetFeedback(Request request) {
+		// prepare header
+		DimensionHeaderEditPart<C> headerEditPart;
+		{
+			ChangeBoundsRequest changeBoundsRequest = (ChangeBoundsRequest) request;
+			headerEditPart = (DimensionHeaderEditPart<C>) changeBoundsRequest.getEditParts().get(0);
+		}
+		// prepare location
+		Point location;
+		{
+			IDropRequest dropRequest = (IDropRequest) request;
+			location = dropRequest.getLocation().getCopy();
+		}
+		// prepare target header
+		DimensionHeaderEditPart<C> target = null;
+		{
+			List<EditPart> children = getHost().getChildren();
+			for (EditPart child : children) {
+				DimensionHeaderEditPart<C> rowEditPart = (DimensionHeaderEditPart<C>) child;
+				Rectangle bounds = rowEditPart.getFigure().getBounds();
+				if (location.y < bounds.getCenter().y) {
+					target = rowEditPart;
+					break;
+				}
+			}
+		}
+		// prepare grid information
+		IGridInfo gridInfo = m_layout.getGridInfo();
+		Interval[] columnIntervals = gridInfo.getColumnIntervals();
+		Interval[] rowIntervals = gridInfo.getRowIntervals();
+		int x1 = columnIntervals[0].begin() - 5;
+		int x2 = columnIntervals[columnIntervals.length - 1].end() + 5;
+		// prepare index of target row and position for insert feedbacks
+		int y;
+		int size;
+		if (target != null) {
+			m_targetIndex = target.getDimension().getIndex();
+			// prepare previous interval
+			Interval prevInterval;
+			if (m_targetIndex == 0) {
+				prevInterval = new Interval(0, 0);
+			} else {
+				prevInterval = rowIntervals[m_targetIndex - 1];
+			}
+			// prepare parameters
+			int[] parameters =
+					GridLayoutEditPolicy.getInsertFeedbackParameters(
+							prevInterval,
+							rowIntervals[m_targetIndex],
+							AbstractGridLayoutEditPolicy.INSERT_ROW_SIZE);
+			y = parameters[1];
+			size = parameters[2] - parameters[1];
+		} else {
+			m_targetIndex = m_layout.getRows().size();
+			m_mainPolicy.showInsertFeedbacks(null, null);
+			// prepare parameters
+			y = rowIntervals[rowIntervals.length - 1].end() + 1;
+			size = AbstractGridLayoutEditPolicy.INSERT_ROW_SIZE;
+		}
+		// show insert feedbacks
+		{
+			// ...on main viewer
+			m_mainPolicy.showInsertFeedbacks(null, new Rectangle(x1, y, x2 - x1, size));
+			// ...on header viewer
+			{
+				if (m_insertFeedback.getParent() == null) {
+					addFeedback(m_insertFeedback);
+				}
+				//
+				Point offset = headerEditPart.getOffset();
+				Rectangle bounds = new Rectangle(0, y + offset.y, getHostFigure().getSize().width, size);
+				m_insertFeedback.setBounds(bounds);
+			}
+		}
+		// show text feedback
+		{
+			Layer feedbackLayer = getMainLayer(IEditPartViewer.FEEDBACK_LAYER);
+			// add feedback
+			if (m_feedback == null) {
+				m_feedback = new TextFeedback(feedbackLayer);
+				m_feedback.add();
+			}
+			// set feedback bounds
+			{
+				Point feedbackLocation = new Point(30, location.y + 10);
+				FigureUtils.translateAbsoluteToFigure(feedbackLayer, feedbackLocation);
+				m_feedback.setLocation(feedbackLocation);
+			}
+			// set text
+			m_feedback.setText(GefMessages.RowsLayoutEditPolicy_feedbackTextPrefix + m_targetIndex);
+		}
+		// prepare command
+		{
+			GridRowInfo<C> row = (GridRowInfo<C>) headerEditPart.getDimension();
+			m_sourceIndex = row.getIndex();
+			if (m_targetIndex == m_sourceIndex || m_targetIndex == m_sourceIndex + 1) {
+				m_moveCommand = Command.EMPTY;
+			} else {
+				m_moveCommand = new EditCommand(m_layout) {
+					@Override
+					protected void executeEdit() throws Exception {
+						m_layout.command_MOVE_ROW(m_sourceIndex, m_targetIndex);
+					}
+				};
+			}
+		}
+	}
 
-  @Override
-  protected void eraseLayoutTargetFeedback(Request request) {
-    m_mainPolicy.eraseInsertFeedbacks();
-    FigureUtils.removeFigure(m_insertFeedback);
-    if (m_feedback != null) {
-      m_feedback.remove();
-      m_feedback = null;
-    }
-  }
+	@Override
+	protected void eraseLayoutTargetFeedback(Request request) {
+		m_mainPolicy.eraseInsertFeedbacks();
+		FigureUtils.removeFigure(m_insertFeedback);
+		if (m_feedback != null) {
+			m_feedback.remove();
+			m_feedback = null;
+		}
+	}
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/grid/header/selection/ColumnSelectionEditPolicy.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/grid/header/selection/ColumnSelectionEditPolicy.java
index ceb2eae06..0f8a448d3 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/grid/header/selection/ColumnSelectionEditPolicy.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/grid/header/selection/ColumnSelectionEditPolicy.java
@@ -22,14 +22,14 @@
  * @coverage swt.gef.GridLayout
  */
 public final class ColumnSelectionEditPolicy<C extends IControlInfo>
-    extends
-      DimensionSelectionEditPolicy<C> {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ColumnSelectionEditPolicy(LayoutEditPolicy mainPolicy) {
-    super(mainPolicy);
-  }
+extends
+DimensionSelectionEditPolicy<C> {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ColumnSelectionEditPolicy(LayoutEditPolicy mainPolicy) {
+		super(mainPolicy);
+	}
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/grid/header/selection/DimensionSelectionEditPolicy.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/grid/header/selection/DimensionSelectionEditPolicy.java
index 9aa9fc119..138f9d5e2 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/grid/header/selection/DimensionSelectionEditPolicy.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/grid/header/selection/DimensionSelectionEditPolicy.java
@@ -36,63 +36,63 @@
  * @coverage swt.gef.GridLayout
  */
 abstract class DimensionSelectionEditPolicy<C extends IControlInfo>
-    extends
-      AbstractHeaderSelectionEditPolicy {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DimensionSelectionEditPolicy(LayoutEditPolicy mainPolicy) {
-    super(mainPolicy);
-  }
+extends
+AbstractHeaderSelectionEditPolicy {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DimensionSelectionEditPolicy(LayoutEditPolicy mainPolicy) {
+		super(mainPolicy);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Handles
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected List<Handle> createSelectionHandles() {
-    List<Handle> handles = Lists.newArrayList();
-    // move handle
-    {
-      MoveHandle moveHandle = new MoveHandle(getHost(), new HeaderMoveHandleLocator());
-      moveHandle.setForeground(IColorConstants.red);
-      handles.add(moveHandle);
-    }
-    //
-    return handles;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Handles
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected List<Handle> createSelectionHandles() {
+		List<Handle> handles = Lists.newArrayList();
+		// move handle
+		{
+			MoveHandle moveHandle = new MoveHandle(getHost(), new HeaderMoveHandleLocator());
+			moveHandle.setForeground(IColorConstants.red);
+			handles.add(moveHandle);
+		}
+		//
+		return handles;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the host {@link FormDimensionInfo}.
-   */
-  @SuppressWarnings("unchecked")
-  protected final GridDimensionInfo<C> getDimension() {
-    return ((DimensionHeaderEditPart<C>) getHost()).getDimension();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the host {@link FormDimensionInfo}.
+	 */
+	@SuppressWarnings("unchecked")
+	protected final GridDimensionInfo<C> getDimension() {
+		return ((DimensionHeaderEditPart<C>) getHost()).getDimension();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Move location
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Implementation of {@link ILocator} to place handle directly on header.
-   */
-  private class HeaderMoveHandleLocator implements ILocator {
-    @Override
-    public void relocate(Figure target) {
-      Figure reference = getHostFigure();
-      Rectangle bounds = reference.getBounds().getCopy();
-      FigureUtils.translateFigureToFigure(reference, target, bounds);
-      target.setBounds(bounds);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Move location
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Implementation of {@link ILocator} to place handle directly on header.
+	 */
+	private class HeaderMoveHandleLocator implements ILocator {
+		@Override
+		public void relocate(Figure target) {
+			Figure reference = getHostFigure();
+			Rectangle bounds = reference.getBounds().getCopy();
+			FigureUtils.translateFigureToFigure(reference, target, bounds);
+			target.setBounds(bounds);
+		}
+	}
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/grid/header/selection/RowSelectionEditPolicy.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/grid/header/selection/RowSelectionEditPolicy.java
index 6873ded68..1e1691724 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/grid/header/selection/RowSelectionEditPolicy.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/grid/header/selection/RowSelectionEditPolicy.java
@@ -22,14 +22,14 @@
  * @coverage swt.gef.GridLayout
  */
 public final class RowSelectionEditPolicy<C extends IControlInfo>
-    extends
-      DimensionSelectionEditPolicy<C> {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public RowSelectionEditPolicy(LayoutEditPolicy mainPolicy) {
-    super(mainPolicy);
-  }
+extends
+DimensionSelectionEditPolicy<C> {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public RowSelectionEditPolicy(LayoutEditPolicy mainPolicy) {
+		super(mainPolicy);
+	}
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/menu/MenuBarDropLayoutEditPolicy.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/menu/MenuBarDropLayoutEditPolicy.java
index 30be6f6de..d09b21cd9 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/menu/MenuBarDropLayoutEditPolicy.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/menu/MenuBarDropLayoutEditPolicy.java
@@ -44,126 +44,126 @@
  * @coverage swt.gef.policy.menu
  */
 public class MenuBarDropLayoutEditPolicy extends LayoutEditPolicy {
-  private final CompositeInfo m_shell;
+	private final CompositeInfo m_shell;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public MenuBarDropLayoutEditPolicy(CompositeInfo shell) {
-    m_shell = shell;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public MenuBarDropLayoutEditPolicy(CompositeInfo shell) {
+		m_shell = shell;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Validator
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected ILayoutRequestValidator getRequestValidator() {
-    return VALIDATOR;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Validator
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected ILayoutRequestValidator getRequestValidator() {
+		return VALIDATOR;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Feedback
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Figure m_fillFeedback;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Feedback
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Figure m_fillFeedback;
 
-  @Override
-  protected void showLayoutTargetFeedback(Request request) {
-    if (m_fillFeedback == null) {
-      // create figure
-      m_fillFeedback = new Figure() {
-        @Override
-        protected void paintClientArea(Graphics graphics) {
-          // draw placeholder text
-          Rectangle bounds = getBounds();
-          graphics.setForegroundColor(IColorConstants.darkGreen);
-          String menuBarText = GefMessages.MenuBarDropLayoutEditPolicy_dropMenuHint;
-          Dimension textExtent = graphics.getTextExtent(menuBarText);
-          FontMetrics fontMetrics = graphics.getFontMetrics();
-          {
-            int fontHeight = fontMetrics.getAscent() - fontMetrics.getDescent();
-            int x = (bounds.width - textExtent.width) / 2;
-            int y = (bounds.height - textExtent.height - fontHeight) / 2;
-            graphics.drawString(menuBarText, x, y);
-          }
-        }
-      };
-      m_fillFeedback.setOpaque(true);
-      m_fillFeedback.setBackground(IColorConstants.menuBackground);
-      // set figure bounds
-      Insets clientAreaInsets = m_shell.getClientAreaInsets();
-      final Rectangle bounds = getHostFigure().getBounds().getCopy();
-      bounds.width -= clientAreaInsets.getWidth();
-      if (EnvironmentUtils.IS_MAC) {
-        bounds.x = AbstractComponentEditPart.TOP_LOCATION.x;
-        bounds.y = MenuEditPartFactory.MENU_Y_LOCATION;
-      } else {
-        bounds.x += clientAreaInsets.left;
-        bounds.y += clientAreaInsets.top;
-      }
-      ExecutionUtils.runIgnore(new RunnableEx() {
-        @Override
-        public void run() throws Exception {
-          bounds.height = ToolkitSupport.getDefaultMenuBarHeight();
-        }
-      });
-      m_fillFeedback.setBounds(bounds);
-      // add some border
-      m_fillFeedback.setBorder(new LineBorder(IColorConstants.menuBackgroundSelected, 1));
-      addFeedback(m_fillFeedback);
-    }
-  }
+	@Override
+	protected void showLayoutTargetFeedback(Request request) {
+		if (m_fillFeedback == null) {
+			// create figure
+			m_fillFeedback = new Figure() {
+				@Override
+				protected void paintClientArea(Graphics graphics) {
+					// draw placeholder text
+					Rectangle bounds = getBounds();
+					graphics.setForegroundColor(IColorConstants.darkGreen);
+					String menuBarText = GefMessages.MenuBarDropLayoutEditPolicy_dropMenuHint;
+					Dimension textExtent = graphics.getTextExtent(menuBarText);
+					FontMetrics fontMetrics = graphics.getFontMetrics();
+					{
+						int fontHeight = fontMetrics.getAscent() - fontMetrics.getDescent();
+						int x = (bounds.width - textExtent.width) / 2;
+						int y = (bounds.height - textExtent.height - fontHeight) / 2;
+						graphics.drawString(menuBarText, x, y);
+					}
+				}
+			};
+			m_fillFeedback.setOpaque(true);
+			m_fillFeedback.setBackground(IColorConstants.menuBackground);
+			// set figure bounds
+			Insets clientAreaInsets = m_shell.getClientAreaInsets();
+			final Rectangle bounds = getHostFigure().getBounds().getCopy();
+			bounds.width -= clientAreaInsets.getWidth();
+			if (EnvironmentUtils.IS_MAC) {
+				bounds.x = AbstractComponentEditPart.TOP_LOCATION.x;
+				bounds.y = MenuEditPartFactory.MENU_Y_LOCATION;
+			} else {
+				bounds.x += clientAreaInsets.left;
+				bounds.y += clientAreaInsets.top;
+			}
+			ExecutionUtils.runIgnore(new RunnableEx() {
+				@Override
+				public void run() throws Exception {
+					bounds.height = ToolkitSupport.getDefaultMenuBarHeight();
+				}
+			});
+			m_fillFeedback.setBounds(bounds);
+			// add some border
+			m_fillFeedback.setBorder(new LineBorder(IColorConstants.menuBackgroundSelected, 1));
+			addFeedback(m_fillFeedback);
+		}
+	}
 
-  @Override
-  protected void eraseLayoutTargetFeedback(Request request) {
-    if (m_fillFeedback != null) {
-      removeFeedback(m_fillFeedback);
-      m_fillFeedback = null;
-    }
-  }
+	@Override
+	protected void eraseLayoutTargetFeedback(Request request) {
+		if (m_fillFeedback != null) {
+			removeFeedback(m_fillFeedback);
+			m_fillFeedback = null;
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Command
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Command getCreateCommand(CreateRequest request) {
-    final MenuInfo menu = (MenuInfo) request.getNewObject();
-    return new EditCommand(m_shell) {
-      @Override
-      protected void executeEdit() throws Exception {
-        menu.command_CREATE(m_shell);
-      }
-    };
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Command
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Command getCreateCommand(CreateRequest request) {
+		final MenuInfo menu = (MenuInfo) request.getNewObject();
+		return new EditCommand(m_shell) {
+			@Override
+			protected void executeEdit() throws Exception {
+				menu.command_CREATE(m_shell);
+			}
+		};
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Validator instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final ILayoutRequestValidator VALIDATOR = new LayoutRequestValidatorStubFalse() {
-    @Override
-    public boolean validateCreateRequest(EditPart host, CreateRequest request) {
-      // only one "bar"
-      for (MenuInfo menuInfo : m_shell.getChildren(MenuInfo.class)) {
-        if (menuInfo.isBar()) {
-          return false;
-        }
-      }
-      // check object
-      Object newObject = request.getNewObject();
-      if (newObject instanceof MenuInfo) {
-        return ((MenuInfo) newObject).isBar();
-      }
-      // unknown object
-      return false;
-    }
-  };
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Validator instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final ILayoutRequestValidator VALIDATOR = new LayoutRequestValidatorStubFalse() {
+		@Override
+		public boolean validateCreateRequest(EditPart host, CreateRequest request) {
+			// only one "bar"
+			for (MenuInfo menuInfo : m_shell.getChildren(MenuInfo.class)) {
+				if (menuInfo.isBar()) {
+					return false;
+				}
+			}
+			// check object
+			Object newObject = request.getNewObject();
+			if (newObject instanceof MenuInfo) {
+				return ((MenuInfo) newObject).isBar();
+			}
+			// unknown object
+			return false;
+		}
+	};
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gefTree/EditPartFactory.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gefTree/EditPartFactory.java
index f13b4974e..dbb0879fb 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gefTree/EditPartFactory.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gefTree/EditPartFactory.java
@@ -23,18 +23,18 @@
  * @coverage swt.gefTree
  */
 public final class EditPartFactory implements IEditPartFactory {
-  private final static IEditPartFactory MATCHING_FACTORY =
-      new MatchingEditPartFactory(ImmutableList.of("org.eclipse.wb.internal.swt.model.widgets"),
-          ImmutableList.of("org.eclipse.wb.internal.swt.gefTree.part"));
+	private final static IEditPartFactory MATCHING_FACTORY =
+			new MatchingEditPartFactory(ImmutableList.of("org.eclipse.wb.internal.swt.model.widgets"),
+					ImmutableList.of("org.eclipse.wb.internal.swt.gefTree.part"));
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IEditPartFactory
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public EditPart createEditPart(EditPart context, Object model) {
-    // most EditPart's can be created using matching
-    return MATCHING_FACTORY.createEditPart(context, model);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IEditPartFactory
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public EditPart createEditPart(EditPart context, Object model) {
+		// most EditPart's can be created using matching
+		return MATCHING_FACTORY.createEditPart(context, model);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gefTree/LayoutEditPolicyFactory.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gefTree/LayoutEditPolicyFactory.java
index 5ec5450eb..4a3921784 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gefTree/LayoutEditPolicyFactory.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gefTree/LayoutEditPolicyFactory.java
@@ -28,24 +28,24 @@
  * @coverage swt.gefTree
  */
 public final class LayoutEditPolicyFactory implements ILayoutEditPolicyFactory {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ILayoutEditPolicyFactory
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public LayoutEditPolicy createLayoutEditPolicy(EditPart context, Object model) {
-    if (model instanceof AbsoluteLayoutInfo) {
-      return new AbsoluteLayoutEditPolicy<ControlInfo>((AbsoluteLayoutInfo) model);
-    }
-    if (model instanceof FormLayoutInfo) {
-      FormLayoutInfo formLayoutInfo = (FormLayoutInfo) model;
-      if (formLayoutInfo.getImpl() instanceof FormLayoutInfoImplAutomatic) {
-        return new FormLayoutEditPolicy(formLayoutInfo);
-      } else {
-        // TODO:
-      }
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ILayoutEditPolicyFactory
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public LayoutEditPolicy createLayoutEditPolicy(EditPart context, Object model) {
+		if (model instanceof AbsoluteLayoutInfo) {
+			return new AbsoluteLayoutEditPolicy<ControlInfo>((AbsoluteLayoutInfo) model);
+		}
+		if (model instanceof FormLayoutInfo) {
+			FormLayoutInfo formLayoutInfo = (FormLayoutInfo) model;
+			if (formLayoutInfo.getImpl() instanceof FormLayoutInfoImplAutomatic) {
+				return new FormLayoutEditPolicy(formLayoutInfo);
+			} else {
+				// TODO:
+			}
+		}
+		return null;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gefTree/part/CompositeEditPart.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gefTree/part/CompositeEditPart.java
index e23e9736c..d2bd53ed6 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gefTree/part/CompositeEditPart.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gefTree/part/CompositeEditPart.java
@@ -26,47 +26,47 @@
  * @coverage swt.gefTree.part
  */
 public class CompositeEditPart extends ControlEditPart {
-  private final CompositeInfo m_composite;
+	private final CompositeInfo m_composite;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CompositeEditPart(CompositeInfo composite) {
-    super(composite);
-    m_composite = composite;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CompositeEditPart(CompositeInfo composite) {
+		super(composite);
+		m_composite = composite;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Policies
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private LayoutInfo m_currentLayout;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Policies
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private LayoutInfo m_currentLayout;
 
-  @Override
-  protected void createEditPolicies() {
-    super.createEditPolicies();
-    // support for dropping LayoutInfo's
-    if (m_composite.hasLayout()) {
-      installEditPolicy(new DropLayoutEditPolicy(m_composite));
-    }
-  }
+	@Override
+	protected void createEditPolicies() {
+		super.createEditPolicies();
+		// support for dropping LayoutInfo's
+		if (m_composite.hasLayout()) {
+			installEditPolicy(new DropLayoutEditPolicy(m_composite));
+		}
+	}
 
-  @Override
-  protected void refreshEditPolicies() {
-    super.refreshEditPolicies();
-    // support for dropping components
-    if (m_composite.hasLayout()) {
-      LayoutInfo layout = m_composite.getLayout();
-      if (layout != m_currentLayout) {
-        LayoutEditPolicy policy = LayoutPolicyUtils.createLayoutEditPolicy(this, layout);
-        if (policy != null) {
-          m_currentLayout = layout;
-          installEditPolicy(EditPolicy.LAYOUT_ROLE, policy);
-        }
-      }
-    }
-  }
+	@Override
+	protected void refreshEditPolicies() {
+		super.refreshEditPolicies();
+		// support for dropping components
+		if (m_composite.hasLayout()) {
+			LayoutInfo layout = m_composite.getLayout();
+			if (layout != m_currentLayout) {
+				LayoutEditPolicy policy = LayoutPolicyUtils.createLayoutEditPolicy(this, layout);
+				if (policy != null) {
+					m_currentLayout = layout;
+					installEditPolicy(EditPolicy.LAYOUT_ROLE, policy);
+				}
+			}
+		}
+	}
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gefTree/part/ControlEditPart.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gefTree/part/ControlEditPart.java
index bfc0459c0..6abd2fa49 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gefTree/part/ControlEditPart.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gefTree/part/ControlEditPart.java
@@ -21,12 +21,12 @@
  * @coverage swt.gefTree.part
  */
 public class ControlEditPart extends JavaEditPart {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ControlEditPart(ControlInfo control) {
-    super(control);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ControlEditPart(ControlInfo control) {
+		super(control);
+	}
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gefTree/part/ItemEditPart.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gefTree/part/ItemEditPart.java
index 27777347c..6581930ef 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gefTree/part/ItemEditPart.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gefTree/part/ItemEditPart.java
@@ -21,12 +21,12 @@
  * @coverage swt.gefTree.part
  */
 public class ItemEditPart extends JavaEditPart {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ItemEditPart(ItemInfo item) {
-    super(item);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ItemEditPart(ItemInfo item) {
+		super(item);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gefTree/part/ShellEditPart.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gefTree/part/ShellEditPart.java
index e0dd8930e..38760a475 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gefTree/part/ShellEditPart.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gefTree/part/ShellEditPart.java
@@ -21,38 +21,38 @@
  * @coverage swt.gef.part
  */
 public class ShellEditPart extends CompositeEditPart {
-  private final ShellInfo m_shell;
+	private final ShellInfo m_shell;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ShellEditPart(ShellInfo shell) {
-    super(shell);
-    m_shell = shell;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ShellEditPart(ShellInfo shell) {
+		super(shell);
+		m_shell = shell;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Policies
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void createEditPolicies() {
-    super.createEditPolicies();
-    // support for dropping menu bar when this EditPart is Shell
-    if (canAcceptMenuBar()) {
-      installEditPolicy(new MenuBarDropLayoutEditPolicy(m_shell));
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Policies
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void createEditPolicies() {
+		super.createEditPolicies();
+		// support for dropping menu bar when this EditPart is Shell
+		if (canAcceptMenuBar()) {
+			installEditPolicy(new MenuBarDropLayoutEditPolicy(m_shell));
+		}
+	}
 
-  private boolean canAcceptMenuBar() {
-    // sometimes Shell is exposed as part of complex object, for example ApplicationWindow
-    if (!m_shell.isRoot()) {
-      return false;
-    }
-    // OK
-    return true;
-  }
+	private boolean canAcceptMenuBar() {
+		// sometimes Shell is exposed as part of complex object, for example ApplicationWindow
+		if (!m_shell.isRoot()) {
+			return false;
+		}
+		// OK
+		return true;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gefTree/policy/AbsoluteLayoutEditPolicy.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gefTree/policy/AbsoluteLayoutEditPolicy.java
index 0638fd0dc..1502e68c6 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gefTree/policy/AbsoluteLayoutEditPolicy.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gefTree/policy/AbsoluteLayoutEditPolicy.java
@@ -29,63 +29,63 @@
  * @coverage swt.gefTree.policy
  */
 public final class AbsoluteLayoutEditPolicy<C extends IControlInfo>
-    extends
-      ObjectLayoutEditPolicy<C> {
-  private final IAbsoluteLayoutInfo<C> m_layout;
+extends
+ObjectLayoutEditPolicy<C> {
+	private final IAbsoluteLayoutInfo<C> m_layout;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbsoluteLayoutEditPolicy(IAbsoluteLayoutInfo<C> layout) {
-    super(layout.getUnderlyingModel());
-    m_layout = layout;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbsoluteLayoutEditPolicy(IAbsoluteLayoutInfo<C> layout) {
+		super(layout.getUnderlyingModel());
+		m_layout = layout;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Requests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected boolean isGoodReferenceChild(Request request, EditPart editPart) {
-    Object model = editPart.getModel();
-    return isControl(model);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Requests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected boolean isGoodReferenceChild(Request request, EditPart editPart) {
+		Object model = editPart.getModel();
+		return isControl(model);
+	}
 
-  @Override
-  protected ILayoutRequestValidator getRequestValidator() {
-    return ControlsLayoutRequestValidator.INSTANCE;
-  }
+	@Override
+	protected ILayoutRequestValidator getRequestValidator() {
+		return ControlsLayoutRequestValidator.INSTANCE;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void command_CREATE(C control, C reference) throws Exception {
-    Dimension preferredSize = control.getPreferredSize();
-    m_layout.commandCreate(control, reference);
-    m_layout.commandChangeBounds(control, new Point(0, 0), preferredSize);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void command_CREATE(C control, C reference) throws Exception {
+		Dimension preferredSize = control.getPreferredSize();
+		m_layout.commandCreate(control, reference);
+		m_layout.commandChangeBounds(control, new Point(0, 0), preferredSize);
+	}
 
-  @Override
-  protected void command_MOVE(C control, C reference) throws Exception {
-    m_layout.commandMove(control, reference);
-    m_layout.commandChangeBounds(control, null, control.getModelBounds().getSize());
-  }
+	@Override
+	protected void command_MOVE(C control, C reference) throws Exception {
+		m_layout.commandMove(control, reference);
+		m_layout.commandChangeBounds(control, null, control.getModelBounds().getSize());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if given object is {@link IControlInfo}.
-   */
-  private boolean isControl(Object model) {
-    return model instanceof IControlInfo;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if given object is {@link IControlInfo}.
+	 */
+	private boolean isControl(Object model) {
+		return model instanceof IControlInfo;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gefTree/policy/DropLayoutEditPolicy.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gefTree/policy/DropLayoutEditPolicy.java
index 47085383b..0066043e6 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gefTree/policy/DropLayoutEditPolicy.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gefTree/policy/DropLayoutEditPolicy.java
@@ -27,50 +27,50 @@
  * @coverage swt.gefTree.policy
  */
 public final class DropLayoutEditPolicy extends LayoutEditPolicy {
-  private final CompositeInfo m_composite;
+	private final CompositeInfo m_composite;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public DropLayoutEditPolicy(CompositeInfo composite) {
-    m_composite = composite;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public DropLayoutEditPolicy(CompositeInfo composite) {
+		m_composite = composite;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Routing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected boolean isRequestCondition(Request request) {
-    // we understand only LayoutInfo drop
-    if (request.getType() == Request.REQ_CREATE) {
-      CreateRequest createRequest = (CreateRequest) request;
-      return createRequest.getNewObject() instanceof LayoutInfo;
-    }
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Routing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected boolean isRequestCondition(Request request) {
+		// we understand only LayoutInfo drop
+		if (request.getType() == Request.REQ_CREATE) {
+			CreateRequest createRequest = (CreateRequest) request;
+			return createRequest.getNewObject() instanceof LayoutInfo;
+		}
+		return false;
+	}
 
-  @Override
-  protected boolean isGoodReferenceChild(Request request, EditPart editPart) {
-    return false;
-  }
+	@Override
+	protected boolean isGoodReferenceChild(Request request, EditPart editPart) {
+		return false;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Command
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Command getCreateCommand(Object newObject, Object referenceObject) {
-    final LayoutInfo newLayout = (LayoutInfo) newObject;
-    return new EditCommand(m_composite) {
-      @Override
-      protected void executeEdit() throws Exception {
-        m_composite.setLayout(newLayout);
-      }
-    };
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Command
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Command getCreateCommand(Object newObject, Object referenceObject) {
+		final LayoutInfo newLayout = (LayoutInfo) newObject;
+		return new EditCommand(m_composite) {
+			@Override
+			protected void executeEdit() throws Exception {
+				m_composite.setLayout(newLayout);
+			}
+		};
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gefTree/policy/FormLayoutEditPolicy.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gefTree/policy/FormLayoutEditPolicy.java
index f4eebe398..d3e10ea95 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gefTree/policy/FormLayoutEditPolicy.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gefTree/policy/FormLayoutEditPolicy.java
@@ -28,46 +28,46 @@
  * @coverage swt.gefTree.policy
  */
 public final class FormLayoutEditPolicy<C extends IControlInfo> extends ObjectLayoutEditPolicy<C> {
-  private final IFormLayoutInfo<C> m_layout;
+	private final IFormLayoutInfo<C> m_layout;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FormLayoutEditPolicy(IFormLayoutInfo<C> layout) {
-    super(layout.getUnderlyingModel());
-    m_layout = layout;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FormLayoutEditPolicy(IFormLayoutInfo<C> layout) {
+		super(layout.getUnderlyingModel());
+		m_layout = layout;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Requests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected ILayoutRequestValidator getRequestValidator() {
-    return ControlsLayoutRequestValidator.INSTANCE;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Requests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected ILayoutRequestValidator getRequestValidator() {
+		return ControlsLayoutRequestValidator.INSTANCE;
+	}
 
-  @Override
-  protected boolean isGoodReferenceChild(Request request, EditPart editPart) {
-    Object model = editPart.getModel();
-    return model instanceof IControlInfo;
-  }
+	@Override
+	protected boolean isGoodReferenceChild(Request request, EditPart editPart) {
+		Object model = editPart.getModel();
+		return model instanceof IControlInfo;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void command_CREATE(C control, C reference) throws Exception {
-    m_layout.commandCreate(control, reference);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void command_CREATE(C control, C reference) throws Exception {
+		m_layout.commandCreate(control, reference);
+	}
 
-  @Override
-  protected void command_MOVE(C control, C reference) throws Exception {
-    m_layout.commandMove(control, reference);
-  }
+	@Override
+	protected void command_MOVE(C control, C reference) throws Exception {
+		m_layout.commandMove(control, reference);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gefTree/policy/menu/MenuBarDropLayoutEditPolicy.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gefTree/policy/menu/MenuBarDropLayoutEditPolicy.java
index 26f0c0ee5..21d07d233 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gefTree/policy/menu/MenuBarDropLayoutEditPolicy.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gefTree/policy/menu/MenuBarDropLayoutEditPolicy.java
@@ -28,69 +28,69 @@
  * @coverage swt.gefTree.policy.menu
  */
 public class MenuBarDropLayoutEditPolicy extends LayoutEditPolicy {
-  private final CompositeInfo m_shell;
+	private final CompositeInfo m_shell;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public MenuBarDropLayoutEditPolicy(CompositeInfo shell) {
-    m_shell = shell;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public MenuBarDropLayoutEditPolicy(CompositeInfo shell) {
+		m_shell = shell;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Policy/Validator
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected ILayoutRequestValidator getRequestValidator() {
-    return VALIDATOR;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Policy/Validator
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected ILayoutRequestValidator getRequestValidator() {
+		return VALIDATOR;
+	}
 
-  @Override
-  protected boolean isGoodReferenceChild(Request request, EditPart editPart) {
-    return false;
-  }
+	@Override
+	protected boolean isGoodReferenceChild(Request request, EditPart editPart) {
+		return false;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Command
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Command getCreateCommand(final Object newObject, Object referenceObject) {
-    final MenuInfo menu = (MenuInfo) newObject;
-    return new EditCommand(m_shell) {
-      @Override
-      protected void executeEdit() throws Exception {
-        menu.command_CREATE(m_shell);
-      }
-    };
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Command
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Command getCreateCommand(final Object newObject, Object referenceObject) {
+		final MenuInfo menu = (MenuInfo) newObject;
+		return new EditCommand(m_shell) {
+			@Override
+			protected void executeEdit() throws Exception {
+				menu.command_CREATE(m_shell);
+			}
+		};
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Validator instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final ILayoutRequestValidator VALIDATOR = new LayoutRequestValidatorStubFalse() {
-    @Override
-    public boolean validateCreateRequest(EditPart host, CreateRequest request) {
-      // only one "bar"
-      for (MenuInfo menuInfo : m_shell.getChildren(MenuInfo.class)) {
-        if (menuInfo.isBar()) {
-          return false;
-        }
-      }
-      // check object
-      Object newObject = request.getNewObject();
-      if (newObject instanceof MenuInfo) {
-        return ((MenuInfo) newObject).isBar();
-      }
-      // unknown object
-      return false;
-    }
-  };
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Validator instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final ILayoutRequestValidator VALIDATOR = new LayoutRequestValidatorStubFalse() {
+		@Override
+		public boolean validateCreateRequest(EditPart host, CreateRequest request) {
+			// only one "bar"
+			for (MenuInfo menuInfo : m_shell.getChildren(MenuInfo.class)) {
+				if (menuInfo.isBar()) {
+					return false;
+				}
+			}
+			// check object
+			Object newObject = request.getNewObject();
+			if (newObject instanceof MenuInfo) {
+				return ((MenuInfo) newObject).isBar();
+			}
+			// unknown object
+			return false;
+		}
+	};
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/ModelMessages.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/ModelMessages.java
index d14b8f60b..e9b6b974a 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/ModelMessages.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/ModelMessages.java
@@ -3,202 +3,202 @@
 import org.eclipse.osgi.util.NLS;
 
 public class ModelMessages extends NLS {
-  private static final String BUNDLE_NAME = "org.eclipse.wb.internal.swt.model.ModelMessages"; //$NON-NLS-1$
-  public static String AbsoluteLayoutEntryInfo_description;
-  public static String AbsoluteLayoutEntryInfo_name;
-  public static String AbsoluteLayoutInfo_autoSize;
-  public static String AbsoluteLayoutInfo_layoutConfirmButtonNo;
-  public static String AbsoluteLayoutInfo_layoutConfirmButtonYes;
-  public static String AbsoluteLayoutInfo_layoutConfirmMessage1;
-  public static String AbsoluteLayoutInfo_layoutConfirmMessage2;
-  public static String AbsoluteLayoutInfo_layoutConfirmMessage3;
-  public static String AbsoluteLayoutInfo_layoutConfirmMessage4;
-  public static String AbsoluteLayoutInfo_layoutConfirmMessage5;
-  public static String AbsoluteLayoutInfo_layoutConfirmTitle;
-  public static String AbsoluteLayoutInfo_notNullLocationSize;
-  public static String AcceleratorPropertyEditor_combinationLabel;
-  public static String AcceleratorPropertyEditor_keyCode;
-  public static String AcceleratorPropertyEditor_keyStrokeLabel;
-  public static String AcceleratorPropertyEditor_modifiers;
-  public static String AnchorActionsClassic_attachToBottomAsOffset;
-  public static String AnchorActionsClassic_attachToBottomOfControl;
-  public static String AnchorActionsClassic_attachToLeftAsOffset;
-  public static String AnchorActionsClassic_attachToLeftAsPercent;
-  public static String AnchorActionsClassic_attachToLeftOfControl;
-  public static String AnchorActionsClassic_attachToRightAsOffset;
-  public static String AnchorActionsClassic_attachToRightOfControl;
-  public static String AnchorActionsClassic_attachToTopAsOffset;
-  public static String AnchorActionsClassic_attachToTopAsPercent;
-  public static String AnchorActionsClassic_attachToTopOfControl;
-  public static String AnchorActionsClassic_deleteAttachment;
-  public static String CompositeInfo_setLayoutAbsolute;
-  public static String CompositeInfo_setLayoutManager;
-  public static String CompositeInfo_setMinimalSize;
-  public static String CompositeInfo_shouldAlwaysHaveLayout;
-  public static String CompositeTopBoundsSupport_wrapperShellText;
-  public static String ConstructionFontPage_family;
-  public static String ConstructionFontPage_size;
-  public static String ConstructionFontPage_style;
-  public static String ControlInfo_exposeText;
-  public static String FillLayoutAssistantPage_marginHeight;
-  public static String FillLayoutAssistantPage_marginWidth;
-  public static String FillLayoutAssistantPage_orientationGroup;
-  public static String FillLayoutAssistantPage_orientationHorizontal;
-  public static String FillLayoutAssistantPage_orientationVertical;
-  public static String FillLayoutAssistantPage_spacingGroup;
-  public static String FillLayoutAssistantPage_spacingValue;
-  public static String FontDialog_constructorPage;
-  public static String FontDialog_dialogTitle;
-  public static String FontDialog_previewGroup;
-  public static String FormLayoutInfo_autoSize;
-  public static String FormLayoutInfo_quickConstraints;
-  public static String FormLayoutInfoImplClassic_widgetSelect_dialogTitle;
-  public static String FormLayoutInfoImplClassic_widgetSelect_listTitle;
-  public static String FormLayoutInfoImplClassic_widgetSelect_name;
-  public static String FormLayoutUtils_invalidAlignment;
-  public static String FormLayoutUtils_invalidSide;
-  public static String FormSide_unknownSize;
-  public static String GridDataInfo_clearHint;
-  public static String GridDataInfo_grabExcessSpace;
-  public static String GridDataInfo_horCenter;
-  public static String GridDataInfo_horFill;
-  public static String GridDataInfo_horizontalAlignment;
-  public static String GridDataInfo_horLeft;
-  public static String GridDataInfo_horRight;
-  public static String GridDataInfo_verBottom;
-  public static String GridDataInfo_verCenter;
-  public static String GridDataInfo_verFill;
-  public static String GridDataInfo_verticalAlignment;
-  public static String GridDataInfo_verTop;
-  public static String GridLayoutAssistantPage_makeColumnsEqual;
-  public static String GridLayoutAssistantPage_marginBottom;
-  public static String GridLayoutAssistantPage_marginHeight;
-  public static String GridLayoutAssistantPage_marginLeft;
-  public static String GridLayoutAssistantPage_marginRight;
-  public static String GridLayoutAssistantPage_marginsGroup;
-  public static String GridLayoutAssistantPage_marginTop;
-  public static String GridLayoutAssistantPage_marginWidth;
-  public static String GridLayoutAssistantPage_numColumns;
-  public static String GridLayoutAssistantPage_sideMarginsGroup;
-  public static String GridLayoutAssistantPage_spacingGroup;
-  public static String GridLayoutAssistantPage_spacingHorizontal;
-  public static String GridLayoutAssistantPage_spacingVertical;
-  public static String GridLayoutDataAssistantPage_alignmentGroup;
-  public static String GridLayoutDataAssistantPage_columnSpan;
-  public static String GridLayoutDataAssistantPage_excludeFlag;
-  public static String GridLayoutDataAssistantPage_grab;
-  public static String GridLayoutDataAssistantPage_heightHint;
-  public static String GridLayoutDataAssistantPage_hintsGroup;
-  public static String GridLayoutDataAssistantPage_horCenter;
-  public static String GridLayoutDataAssistantPage_horFill;
-  public static String GridLayoutDataAssistantPage_horIndent;
-  public static String GridLayoutDataAssistantPage_horizontalGroup;
-  public static String GridLayoutDataAssistantPage_horLeft;
-  public static String GridLayoutDataAssistantPage_horRight;
-  public static String GridLayoutDataAssistantPage_indentsGroup;
-  public static String GridLayoutDataAssistantPage_minHeight;
-  public static String GridLayoutDataAssistantPage_minimumGroup;
-  public static String GridLayoutDataAssistantPage_minWidth;
-  public static String GridLayoutDataAssistantPage_rowSpan;
-  public static String GridLayoutDataAssistantPage_spanningGroup;
-  public static String GridLayoutDataAssistantPage_verBottom;
-  public static String GridLayoutDataAssistantPage_verCenter;
-  public static String GridLayoutDataAssistantPage_verFill;
-  public static String GridLayoutDataAssistantPage_verIndent;
-  public static String GridLayoutDataAssistantPage_verticalGroup;
-  public static String GridLayoutDataAssistantPage_verTop;
-  public static String GridLayoutDataAssistantPage_widthHint;
-  public static String JFaceFontPage_nameColumn;
-  public static String JFaceFontPage_selectFont;
-  public static String JFaceFontPage_valueColumn;
-  public static String LayoutAssistantPage_alignmentAll;
-  public static String LayoutAssistantPage_alignmentBottomLeft;
-  public static String LayoutAssistantPage_alignmentBottomRight;
-  public static String LayoutAssistantPage_alignmentGroup;
-  public static String LayoutAssistantPage_alignmentLeftRightBottom;
-  public static String LayoutAssistantPage_alignmentLeftRightTop;
-  public static String LayoutAssistantPage_alignmentTopBottomLeft;
-  public static String LayoutAssistantPage_alignmentTopLBottomRight;
-  public static String LayoutAssistantPage_alignmentTopLeft;
-  public static String LayoutAssistantPage_alignmentTopRight;
-  public static String LayoutAssistantPage_anchorsGroup;
-  public static String LayoutAssistantPageClassic_alignmentGroup;
-  public static String LayoutAssistantPageClassic_anchorsGroup;
-  public static String LayoutAssistantSupport_layoutDataPage;
-  public static String PluginFileImagePage_clearButton;
-  public static String PluginFileImagePage_emptyFilterText;
-  public static String PluginFileImagePage_showAllPluginsButton;
-  public static String PluginFileImagePage_showRequiredPluginsButton;
-  public static String PluginFileImagePage_showUiPluginsButton;
-  public static String PluginFileImagePage_showWorkspacePluginsButton;
-  public static String PluginFileImagePage_title;
-  public static String PointPropertyEditor_xLabel;
-  public static String PointPropertyEditor_yLabel;
-  public static String PredefinedAnchorsActions_bottomLeft;
-  public static String PredefinedAnchorsActions_bottomLeftRelative;
-  public static String PredefinedAnchorsActions_bottomLeftRightRelative;
-  public static String PredefinedAnchorsActions_bottomRight;
-  public static String PredefinedAnchorsActions_bottomRightRelative;
-  public static String PredefinedAnchorsActions_leftRightBottom;
-  public static String PredefinedAnchorsActions_leftRightTop;
-  public static String PredefinedAnchorsActions_topBottomLeft;
-  public static String PredefinedAnchorsActions_topBottomLeftRelative;
-  public static String PredefinedAnchorsActions_TopBottomLeftRight;
-  public static String PredefinedAnchorsActions_topBottomRight;
-  public static String PredefinedAnchorsActions_topBottomRightRelative;
-  public static String PredefinedAnchorsActions_topLeft;
-  public static String PredefinedAnchorsActions_topLeftRelative;
-  public static String PredefinedAnchorsActions_topLeftRightRelative;
-  public static String PredefinedAnchorsActions_topRight;
-  public static String PredefinedAnchorsActions_topRightRelative;
-  public static String RectanglePropertyEditor_heightLabel;
-  public static String RectanglePropertyEditor_widthLabel;
-  public static String RectanglePropertyEditor_xLabel;
-  public static String RectanglePropertyEditor_yLabel;
-  public static String RegistryContainerInfo_jfaceRegistries;
-  public static String RegistryContainerInfo_unknownRegistry;
-  public static String RegistryFontPage_key;
-  public static String RegistryFontPage_method;
-  public static String RegistryFontPage_registry;
-  public static String RegistryFontPage_selectRegistry;
-  public static String RowLayoutAssistantPage_marginBottom;
-  public static String RowLayoutAssistantPage_marginGroup;
-  public static String RowLayoutAssistantPage_marginHeight;
-  public static String RowLayoutAssistantPage_marginLeft;
-  public static String RowLayoutAssistantPage_marginRight;
-  public static String RowLayoutAssistantPage_marginTop;
-  public static String RowLayoutAssistantPage_marginWidth;
-  public static String RowLayoutAssistantPage_optionsGroup;
-  public static String RowLayoutAssistantPage_orientationGroup;
-  public static String RowLayoutAssistantPage_orientationHorizontal;
-  public static String RowLayoutAssistantPage_orientationVertical;
-  public static String RowLayoutAssistantPage_sideMarginsGroup;
-  public static String RowLayoutAssistantPage_spacingValue;
-  public static String RowLayoutDataAssistantPage_excludeFlag;
-  public static String RowLayoutDataAssistantPage_sizeGroup;
-  public static String RowLayoutDataAssistantPage_sizeHeight;
-  public static String RowLayoutDataAssistantPage_sizeWidth;
-  public static String SelectionActionsSupport_horCenter;
-  public static String SelectionActionsSupport_horFill;
-  public static String SelectionActionsSupport_horGrab;
-  public static String SelectionActionsSupport_horLeft;
-  public static String SelectionActionsSupport_horRight;
-  public static String SelectionActionsSupport_verBottom;
-  public static String SelectionActionsSupport_verCenter;
-  public static String SelectionActionsSupport_verFill;
-  public static String SelectionActionsSupport_verGrab;
-  public static String SelectionActionsSupport_verTop;
-  public static String ShellInfo_removeSetSize;
-  public static String SinglePluginFileImagePage_title;
-  public static String StylePresentation_canNotFindImage;
-  public static String SwtInvocationEvaluatorInterceptor_placeholderText;
-  public static String TabOrderProperty_tooltip;
-  public static String WrapperInfo_exposeViewer;
-  static {
-    // initialize resource bundle
-    NLS.initializeMessages(BUNDLE_NAME, ModelMessages.class);
-  }
+	private static final String BUNDLE_NAME = "org.eclipse.wb.internal.swt.model.ModelMessages"; //$NON-NLS-1$
+	public static String AbsoluteLayoutEntryInfo_description;
+	public static String AbsoluteLayoutEntryInfo_name;
+	public static String AbsoluteLayoutInfo_autoSize;
+	public static String AbsoluteLayoutInfo_layoutConfirmButtonNo;
+	public static String AbsoluteLayoutInfo_layoutConfirmButtonYes;
+	public static String AbsoluteLayoutInfo_layoutConfirmMessage1;
+	public static String AbsoluteLayoutInfo_layoutConfirmMessage2;
+	public static String AbsoluteLayoutInfo_layoutConfirmMessage3;
+	public static String AbsoluteLayoutInfo_layoutConfirmMessage4;
+	public static String AbsoluteLayoutInfo_layoutConfirmMessage5;
+	public static String AbsoluteLayoutInfo_layoutConfirmTitle;
+	public static String AbsoluteLayoutInfo_notNullLocationSize;
+	public static String AcceleratorPropertyEditor_combinationLabel;
+	public static String AcceleratorPropertyEditor_keyCode;
+	public static String AcceleratorPropertyEditor_keyStrokeLabel;
+	public static String AcceleratorPropertyEditor_modifiers;
+	public static String AnchorActionsClassic_attachToBottomAsOffset;
+	public static String AnchorActionsClassic_attachToBottomOfControl;
+	public static String AnchorActionsClassic_attachToLeftAsOffset;
+	public static String AnchorActionsClassic_attachToLeftAsPercent;
+	public static String AnchorActionsClassic_attachToLeftOfControl;
+	public static String AnchorActionsClassic_attachToRightAsOffset;
+	public static String AnchorActionsClassic_attachToRightOfControl;
+	public static String AnchorActionsClassic_attachToTopAsOffset;
+	public static String AnchorActionsClassic_attachToTopAsPercent;
+	public static String AnchorActionsClassic_attachToTopOfControl;
+	public static String AnchorActionsClassic_deleteAttachment;
+	public static String CompositeInfo_setLayoutAbsolute;
+	public static String CompositeInfo_setLayoutManager;
+	public static String CompositeInfo_setMinimalSize;
+	public static String CompositeInfo_shouldAlwaysHaveLayout;
+	public static String CompositeTopBoundsSupport_wrapperShellText;
+	public static String ConstructionFontPage_family;
+	public static String ConstructionFontPage_size;
+	public static String ConstructionFontPage_style;
+	public static String ControlInfo_exposeText;
+	public static String FillLayoutAssistantPage_marginHeight;
+	public static String FillLayoutAssistantPage_marginWidth;
+	public static String FillLayoutAssistantPage_orientationGroup;
+	public static String FillLayoutAssistantPage_orientationHorizontal;
+	public static String FillLayoutAssistantPage_orientationVertical;
+	public static String FillLayoutAssistantPage_spacingGroup;
+	public static String FillLayoutAssistantPage_spacingValue;
+	public static String FontDialog_constructorPage;
+	public static String FontDialog_dialogTitle;
+	public static String FontDialog_previewGroup;
+	public static String FormLayoutInfo_autoSize;
+	public static String FormLayoutInfo_quickConstraints;
+	public static String FormLayoutInfoImplClassic_widgetSelect_dialogTitle;
+	public static String FormLayoutInfoImplClassic_widgetSelect_listTitle;
+	public static String FormLayoutInfoImplClassic_widgetSelect_name;
+	public static String FormLayoutUtils_invalidAlignment;
+	public static String FormLayoutUtils_invalidSide;
+	public static String FormSide_unknownSize;
+	public static String GridDataInfo_clearHint;
+	public static String GridDataInfo_grabExcessSpace;
+	public static String GridDataInfo_horCenter;
+	public static String GridDataInfo_horFill;
+	public static String GridDataInfo_horizontalAlignment;
+	public static String GridDataInfo_horLeft;
+	public static String GridDataInfo_horRight;
+	public static String GridDataInfo_verBottom;
+	public static String GridDataInfo_verCenter;
+	public static String GridDataInfo_verFill;
+	public static String GridDataInfo_verticalAlignment;
+	public static String GridDataInfo_verTop;
+	public static String GridLayoutAssistantPage_makeColumnsEqual;
+	public static String GridLayoutAssistantPage_marginBottom;
+	public static String GridLayoutAssistantPage_marginHeight;
+	public static String GridLayoutAssistantPage_marginLeft;
+	public static String GridLayoutAssistantPage_marginRight;
+	public static String GridLayoutAssistantPage_marginsGroup;
+	public static String GridLayoutAssistantPage_marginTop;
+	public static String GridLayoutAssistantPage_marginWidth;
+	public static String GridLayoutAssistantPage_numColumns;
+	public static String GridLayoutAssistantPage_sideMarginsGroup;
+	public static String GridLayoutAssistantPage_spacingGroup;
+	public static String GridLayoutAssistantPage_spacingHorizontal;
+	public static String GridLayoutAssistantPage_spacingVertical;
+	public static String GridLayoutDataAssistantPage_alignmentGroup;
+	public static String GridLayoutDataAssistantPage_columnSpan;
+	public static String GridLayoutDataAssistantPage_excludeFlag;
+	public static String GridLayoutDataAssistantPage_grab;
+	public static String GridLayoutDataAssistantPage_heightHint;
+	public static String GridLayoutDataAssistantPage_hintsGroup;
+	public static String GridLayoutDataAssistantPage_horCenter;
+	public static String GridLayoutDataAssistantPage_horFill;
+	public static String GridLayoutDataAssistantPage_horIndent;
+	public static String GridLayoutDataAssistantPage_horizontalGroup;
+	public static String GridLayoutDataAssistantPage_horLeft;
+	public static String GridLayoutDataAssistantPage_horRight;
+	public static String GridLayoutDataAssistantPage_indentsGroup;
+	public static String GridLayoutDataAssistantPage_minHeight;
+	public static String GridLayoutDataAssistantPage_minimumGroup;
+	public static String GridLayoutDataAssistantPage_minWidth;
+	public static String GridLayoutDataAssistantPage_rowSpan;
+	public static String GridLayoutDataAssistantPage_spanningGroup;
+	public static String GridLayoutDataAssistantPage_verBottom;
+	public static String GridLayoutDataAssistantPage_verCenter;
+	public static String GridLayoutDataAssistantPage_verFill;
+	public static String GridLayoutDataAssistantPage_verIndent;
+	public static String GridLayoutDataAssistantPage_verticalGroup;
+	public static String GridLayoutDataAssistantPage_verTop;
+	public static String GridLayoutDataAssistantPage_widthHint;
+	public static String JFaceFontPage_nameColumn;
+	public static String JFaceFontPage_selectFont;
+	public static String JFaceFontPage_valueColumn;
+	public static String LayoutAssistantPage_alignmentAll;
+	public static String LayoutAssistantPage_alignmentBottomLeft;
+	public static String LayoutAssistantPage_alignmentBottomRight;
+	public static String LayoutAssistantPage_alignmentGroup;
+	public static String LayoutAssistantPage_alignmentLeftRightBottom;
+	public static String LayoutAssistantPage_alignmentLeftRightTop;
+	public static String LayoutAssistantPage_alignmentTopBottomLeft;
+	public static String LayoutAssistantPage_alignmentTopLBottomRight;
+	public static String LayoutAssistantPage_alignmentTopLeft;
+	public static String LayoutAssistantPage_alignmentTopRight;
+	public static String LayoutAssistantPage_anchorsGroup;
+	public static String LayoutAssistantPageClassic_alignmentGroup;
+	public static String LayoutAssistantPageClassic_anchorsGroup;
+	public static String LayoutAssistantSupport_layoutDataPage;
+	public static String PluginFileImagePage_clearButton;
+	public static String PluginFileImagePage_emptyFilterText;
+	public static String PluginFileImagePage_showAllPluginsButton;
+	public static String PluginFileImagePage_showRequiredPluginsButton;
+	public static String PluginFileImagePage_showUiPluginsButton;
+	public static String PluginFileImagePage_showWorkspacePluginsButton;
+	public static String PluginFileImagePage_title;
+	public static String PointPropertyEditor_xLabel;
+	public static String PointPropertyEditor_yLabel;
+	public static String PredefinedAnchorsActions_bottomLeft;
+	public static String PredefinedAnchorsActions_bottomLeftRelative;
+	public static String PredefinedAnchorsActions_bottomLeftRightRelative;
+	public static String PredefinedAnchorsActions_bottomRight;
+	public static String PredefinedAnchorsActions_bottomRightRelative;
+	public static String PredefinedAnchorsActions_leftRightBottom;
+	public static String PredefinedAnchorsActions_leftRightTop;
+	public static String PredefinedAnchorsActions_topBottomLeft;
+	public static String PredefinedAnchorsActions_topBottomLeftRelative;
+	public static String PredefinedAnchorsActions_TopBottomLeftRight;
+	public static String PredefinedAnchorsActions_topBottomRight;
+	public static String PredefinedAnchorsActions_topBottomRightRelative;
+	public static String PredefinedAnchorsActions_topLeft;
+	public static String PredefinedAnchorsActions_topLeftRelative;
+	public static String PredefinedAnchorsActions_topLeftRightRelative;
+	public static String PredefinedAnchorsActions_topRight;
+	public static String PredefinedAnchorsActions_topRightRelative;
+	public static String RectanglePropertyEditor_heightLabel;
+	public static String RectanglePropertyEditor_widthLabel;
+	public static String RectanglePropertyEditor_xLabel;
+	public static String RectanglePropertyEditor_yLabel;
+	public static String RegistryContainerInfo_jfaceRegistries;
+	public static String RegistryContainerInfo_unknownRegistry;
+	public static String RegistryFontPage_key;
+	public static String RegistryFontPage_method;
+	public static String RegistryFontPage_registry;
+	public static String RegistryFontPage_selectRegistry;
+	public static String RowLayoutAssistantPage_marginBottom;
+	public static String RowLayoutAssistantPage_marginGroup;
+	public static String RowLayoutAssistantPage_marginHeight;
+	public static String RowLayoutAssistantPage_marginLeft;
+	public static String RowLayoutAssistantPage_marginRight;
+	public static String RowLayoutAssistantPage_marginTop;
+	public static String RowLayoutAssistantPage_marginWidth;
+	public static String RowLayoutAssistantPage_optionsGroup;
+	public static String RowLayoutAssistantPage_orientationGroup;
+	public static String RowLayoutAssistantPage_orientationHorizontal;
+	public static String RowLayoutAssistantPage_orientationVertical;
+	public static String RowLayoutAssistantPage_sideMarginsGroup;
+	public static String RowLayoutAssistantPage_spacingValue;
+	public static String RowLayoutDataAssistantPage_excludeFlag;
+	public static String RowLayoutDataAssistantPage_sizeGroup;
+	public static String RowLayoutDataAssistantPage_sizeHeight;
+	public static String RowLayoutDataAssistantPage_sizeWidth;
+	public static String SelectionActionsSupport_horCenter;
+	public static String SelectionActionsSupport_horFill;
+	public static String SelectionActionsSupport_horGrab;
+	public static String SelectionActionsSupport_horLeft;
+	public static String SelectionActionsSupport_horRight;
+	public static String SelectionActionsSupport_verBottom;
+	public static String SelectionActionsSupport_verCenter;
+	public static String SelectionActionsSupport_verFill;
+	public static String SelectionActionsSupport_verGrab;
+	public static String SelectionActionsSupport_verTop;
+	public static String ShellInfo_removeSetSize;
+	public static String SinglePluginFileImagePage_title;
+	public static String StylePresentation_canNotFindImage;
+	public static String SwtInvocationEvaluatorInterceptor_placeholderText;
+	public static String TabOrderProperty_tooltip;
+	public static String WrapperInfo_exposeViewer;
+	static {
+		// initialize resource bundle
+		NLS.initializeMessages(BUNDLE_NAME, ModelMessages.class);
+	}
 
-  private ModelMessages() {
-  }
+	private ModelMessages() {
+	}
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/generation/preview/GenerationPreviewFieldUniqueBlock.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/generation/preview/GenerationPreviewFieldUniqueBlock.java
index 860196355..7133c36ac 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/generation/preview/GenerationPreviewFieldUniqueBlock.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/generation/preview/GenerationPreviewFieldUniqueBlock.java
@@ -24,62 +24,62 @@
  * @coverage core.model.generation.ui
  */
 public final class GenerationPreviewFieldUniqueBlock extends GenerationPreview {
-  public static final GenerationPreview INSTANCE = new GenerationPreviewFieldUniqueBlock();
+	public static final GenerationPreview INSTANCE = new GenerationPreviewFieldUniqueBlock();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private GenerationPreviewFieldUniqueBlock() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private GenerationPreviewFieldUniqueBlock() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GenerationPreview
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getPreview(GenerationPropertiesComposite variableComposite,
-      GenerationPropertiesComposite statementComposite) {
-    boolean v_useThis = variableComposite.getBoolean(FieldUniqueVariableSupport.P_PREFIX_THIS);
-    int v_modifierIndex = variableComposite.getInteger(FieldUniqueVariableSupport.P_FIELD_MODIFIER);
-    String v_modifierSource = FieldVariableSupport.V_MODIFIER_CODE[v_modifierIndex];
-    //
-    String source = "";
-    String contentsRef = v_useThis ? "this.contents" : "contents";
-    String buttonRef = v_useThis ? "this.button" : "button";
-    // declare fields
-    source += "\t" + v_modifierSource + "Composite contents;\n";
-    source += "\t" + v_modifierSource + "Button button;\n";
-    // begin
-    source += "\t...\n";
-    // parent
-    {
-      // open block
-      source += "\t{\n";
-      // assign field
-      source += "\t\t" + contentsRef + " = new Composite(parent, SWT.NONE);\n";
-      // properties
-      source += "\t\t" + contentsRef + ".setLayout(new GridLayout(1, false));\n";
-      // child
-      {
-        // open block
-        source += "\t\t{\n";
-        // assign field
-        source += "\t\t\t" + buttonRef + " = new Button(" + contentsRef + ", SWT.NONE);\n";
-        // properties
-        source += "\t\t\t" + buttonRef + ".setText(\"New button\");\n";
-        // close block
-        source += "\t\t}\n";
-        source += "\t\t...\n";
-      }
-      // close block
-      source += "\t}\n";
-    }
-    // end
-    source += "\t...\n";
-    // final result
-    return source;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GenerationPreview
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getPreview(GenerationPropertiesComposite variableComposite,
+			GenerationPropertiesComposite statementComposite) {
+		boolean v_useThis = variableComposite.getBoolean(FieldUniqueVariableSupport.P_PREFIX_THIS);
+		int v_modifierIndex = variableComposite.getInteger(FieldUniqueVariableSupport.P_FIELD_MODIFIER);
+		String v_modifierSource = FieldVariableSupport.V_MODIFIER_CODE[v_modifierIndex];
+		//
+		String source = "";
+		String contentsRef = v_useThis ? "this.contents" : "contents";
+		String buttonRef = v_useThis ? "this.button" : "button";
+		// declare fields
+		source += "\t" + v_modifierSource + "Composite contents;\n";
+		source += "\t" + v_modifierSource + "Button button;\n";
+		// begin
+		source += "\t...\n";
+		// parent
+		{
+			// open block
+			source += "\t{\n";
+			// assign field
+			source += "\t\t" + contentsRef + " = new Composite(parent, SWT.NONE);\n";
+			// properties
+			source += "\t\t" + contentsRef + ".setLayout(new GridLayout(1, false));\n";
+			// child
+			{
+				// open block
+				source += "\t\t{\n";
+				// assign field
+				source += "\t\t\t" + buttonRef + " = new Button(" + contentsRef + ", SWT.NONE);\n";
+				// properties
+				source += "\t\t\t" + buttonRef + ".setText(\"New button\");\n";
+				// close block
+				source += "\t\t}\n";
+				source += "\t\t...\n";
+			}
+			// close block
+			source += "\t}\n";
+		}
+		// end
+		source += "\t...\n";
+		// final result
+		return source;
+	}
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/generation/preview/GenerationPreviewFieldUniqueFlat.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/generation/preview/GenerationPreviewFieldUniqueFlat.java
index 920d3ae0d..5d7d6b176 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/generation/preview/GenerationPreviewFieldUniqueFlat.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/generation/preview/GenerationPreviewFieldUniqueFlat.java
@@ -24,59 +24,59 @@
  * @coverage core.model.generation.ui
  */
 public final class GenerationPreviewFieldUniqueFlat extends GenerationPreview {
-  public static final GenerationPreview INSTANCE = new GenerationPreviewFieldUniqueFlat();
+	public static final GenerationPreview INSTANCE = new GenerationPreviewFieldUniqueFlat();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private GenerationPreviewFieldUniqueFlat() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private GenerationPreviewFieldUniqueFlat() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GenerationPreview
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getPreview(GenerationPropertiesComposite variableComposite,
-      GenerationPropertiesComposite statementComposite) {
-    boolean v_useThis = variableComposite.getBoolean(FieldUniqueVariableSupport.P_PREFIX_THIS);
-    int v_modifierIndex = variableComposite.getInteger(FieldUniqueVariableSupport.P_FIELD_MODIFIER);
-    String v_modifierSource = FieldVariableSupport.V_MODIFIER_CODE[v_modifierIndex];
-    boolean s_usePrefix = statementComposite.getBoolean(FlatStatementGenerator.P_USE_PREFIX);
-    String s_thePrefix = statementComposite.getString(FlatStatementGenerator.P_PREFIX_TEXT);
-    //
-    String source = "";
-    String contentsRef = v_useThis ? "this.content" : "contents";
-    String buttonRef = v_useThis ? "this.button" : "button";
-    // declare fields
-    source += "\t" + v_modifierSource + "Composite contents;\n";
-    source += "\t" + v_modifierSource + "Button button;\n";
-    // begin
-    source += "\t...\n";
-    // parent
-    {
-      // assign field
-      source += "\t" + contentsRef + " = new Composite(parent, SWT.NONE);\n";
-      // properties
-      source += "\t" + contentsRef + ".setLayout(new GridLayout(1, false));\n";
-    }
-    // child
-    {
-      // optional prefix
-      if (s_usePrefix) {
-        source += "\t" + s_thePrefix + "\n";
-      }
-      // assign field
-      source += "\t" + buttonRef + " = new Button(" + contentsRef + ", SWT.NONE);\n";
-      // properties
-      source += "\t" + buttonRef + ".setText(\"New button\");\n";
-    }
-    // end
-    source += "\t...\n";
-    // final result
-    return source;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GenerationPreview
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getPreview(GenerationPropertiesComposite variableComposite,
+			GenerationPropertiesComposite statementComposite) {
+		boolean v_useThis = variableComposite.getBoolean(FieldUniqueVariableSupport.P_PREFIX_THIS);
+		int v_modifierIndex = variableComposite.getInteger(FieldUniqueVariableSupport.P_FIELD_MODIFIER);
+		String v_modifierSource = FieldVariableSupport.V_MODIFIER_CODE[v_modifierIndex];
+		boolean s_usePrefix = statementComposite.getBoolean(FlatStatementGenerator.P_USE_PREFIX);
+		String s_thePrefix = statementComposite.getString(FlatStatementGenerator.P_PREFIX_TEXT);
+		//
+		String source = "";
+		String contentsRef = v_useThis ? "this.content" : "contents";
+		String buttonRef = v_useThis ? "this.button" : "button";
+		// declare fields
+		source += "\t" + v_modifierSource + "Composite contents;\n";
+		source += "\t" + v_modifierSource + "Button button;\n";
+		// begin
+		source += "\t...\n";
+		// parent
+		{
+			// assign field
+			source += "\t" + contentsRef + " = new Composite(parent, SWT.NONE);\n";
+			// properties
+			source += "\t" + contentsRef + ".setLayout(new GridLayout(1, false));\n";
+		}
+		// child
+		{
+			// optional prefix
+			if (s_usePrefix) {
+				source += "\t" + s_thePrefix + "\n";
+			}
+			// assign field
+			source += "\t" + buttonRef + " = new Button(" + contentsRef + ", SWT.NONE);\n";
+			// properties
+			source += "\t" + buttonRef + ".setText(\"New button\");\n";
+		}
+		// end
+		source += "\t...\n";
+		// final result
+		return source;
+	}
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/generation/preview/GenerationPreviewLocalUniqueBlock.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/generation/preview/GenerationPreviewLocalUniqueBlock.java
index 62aa1deda..6ad045f5a 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/generation/preview/GenerationPreviewLocalUniqueBlock.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/generation/preview/GenerationPreviewLocalUniqueBlock.java
@@ -23,62 +23,62 @@
  * @coverage core.model.generation.ui
  */
 public final class GenerationPreviewLocalUniqueBlock extends GenerationPreview {
-  public static final GenerationPreview INSTANCE = new GenerationPreviewLocalUniqueBlock();
+	public static final GenerationPreview INSTANCE = new GenerationPreviewLocalUniqueBlock();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private GenerationPreviewLocalUniqueBlock() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private GenerationPreviewLocalUniqueBlock() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GenerationPreview
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getPreview(GenerationPropertiesComposite variableComposite,
-      GenerationPropertiesComposite statementComposite) {
-    boolean v_useFinal = variableComposite.getBoolean(LocalUniqueVariableSupport.P_DECLARE_FINAL);
-    String source = "";
-    // begin
-    source += "\t...\n";
-    // parent
-    {
-      // open block
-      source += "\t{\n";
-      // declare parent
-      source += "\t\t";
-      if (v_useFinal) {
-        source += "final ";
-      }
-      source += "Composite contents = new Composite(parent, SWT.NONE);\n";
-      // properties
-      source += "\t\tcontents.setLayout(new GridLayout(1, false));\n";
-      // child
-      {
-        // open block
-        source += "\t\t{\n";
-        // variable
-        source += "\t\t\t";
-        if (v_useFinal) {
-          source += "final ";
-        }
-        source += "Button button = new Button(contents, SWT.NONE);\n";
-        // properties
-        source += "\t\t\tbutton.setText(\"New button\");\n";
-        // close block
-        source += "\t\t}\n";
-        source += "\t\t...\n";
-      }
-      // close block
-      source += "\t}\n";
-    }
-    // end
-    source += "\t...\n";
-    // final result
-    return source;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GenerationPreview
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getPreview(GenerationPropertiesComposite variableComposite,
+			GenerationPropertiesComposite statementComposite) {
+		boolean v_useFinal = variableComposite.getBoolean(LocalUniqueVariableSupport.P_DECLARE_FINAL);
+		String source = "";
+		// begin
+		source += "\t...\n";
+		// parent
+		{
+			// open block
+			source += "\t{\n";
+			// declare parent
+			source += "\t\t";
+			if (v_useFinal) {
+				source += "final ";
+			}
+			source += "Composite contents = new Composite(parent, SWT.NONE);\n";
+			// properties
+			source += "\t\tcontents.setLayout(new GridLayout(1, false));\n";
+			// child
+			{
+				// open block
+				source += "\t\t{\n";
+				// variable
+				source += "\t\t\t";
+				if (v_useFinal) {
+					source += "final ";
+				}
+				source += "Button button = new Button(contents, SWT.NONE);\n";
+				// properties
+				source += "\t\t\tbutton.setText(\"New button\");\n";
+				// close block
+				source += "\t\t}\n";
+				source += "\t\t...\n";
+			}
+			// close block
+			source += "\t}\n";
+		}
+		// end
+		source += "\t...\n";
+		// final result
+		return source;
+	}
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/generation/preview/GenerationPreviewLocalUniqueFlat.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/generation/preview/GenerationPreviewLocalUniqueFlat.java
index 14b228c52..c94d0b0e3 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/generation/preview/GenerationPreviewLocalUniqueFlat.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/generation/preview/GenerationPreviewLocalUniqueFlat.java
@@ -23,58 +23,58 @@
  * @coverage core.model.generation.ui
  */
 public final class GenerationPreviewLocalUniqueFlat extends GenerationPreview {
-  public static final GenerationPreview INSTANCE = new GenerationPreviewLocalUniqueFlat();
+	public static final GenerationPreview INSTANCE = new GenerationPreviewLocalUniqueFlat();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private GenerationPreviewLocalUniqueFlat() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private GenerationPreviewLocalUniqueFlat() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GenerationPreview
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getPreview(GenerationPropertiesComposite variableComposite,
-      GenerationPropertiesComposite statementComposite) {
-    boolean v_useFinal = variableComposite.getBoolean(LocalUniqueVariableSupport.P_DECLARE_FINAL);
-    boolean s_usePrefix = statementComposite.getBoolean(FlatStatementGenerator.P_USE_PREFIX);
-    String s_thePrefix = statementComposite.getString(FlatStatementGenerator.P_PREFIX_TEXT);
-    String source = "";
-    // begin
-    source += "\t...\n";
-    // parent
-    {
-      source += "\t";
-      if (v_useFinal) {
-        source += "final ";
-      }
-      source += "Composite contents = new Composite(parent, SWT.NONE);\n";
-      // properties
-      source += "\tcontents.setLayout(new GridLayout(1, false));\n";
-    }
-    // child
-    {
-      // optional prefix
-      if (s_usePrefix) {
-        source += "\t" + s_thePrefix + "\n";
-      }
-      // variable
-      source += "\t";
-      if (v_useFinal) {
-        source += "final ";
-      }
-      source += "Button button = new Button(contents, SWT.NONE);\n";
-      // properties
-      source += "\tbutton.setText(\"New button\");\n";
-    }
-    // end
-    source += "\t...\n";
-    // final result
-    return source;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GenerationPreview
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getPreview(GenerationPropertiesComposite variableComposite,
+			GenerationPropertiesComposite statementComposite) {
+		boolean v_useFinal = variableComposite.getBoolean(LocalUniqueVariableSupport.P_DECLARE_FINAL);
+		boolean s_usePrefix = statementComposite.getBoolean(FlatStatementGenerator.P_USE_PREFIX);
+		String s_thePrefix = statementComposite.getString(FlatStatementGenerator.P_PREFIX_TEXT);
+		String source = "";
+		// begin
+		source += "\t...\n";
+		// parent
+		{
+			source += "\t";
+			if (v_useFinal) {
+				source += "final ";
+			}
+			source += "Composite contents = new Composite(parent, SWT.NONE);\n";
+			// properties
+			source += "\tcontents.setLayout(new GridLayout(1, false));\n";
+		}
+		// child
+		{
+			// optional prefix
+			if (s_usePrefix) {
+				source += "\t" + s_thePrefix + "\n";
+			}
+			// variable
+			source += "\t";
+			if (v_useFinal) {
+				source += "final ";
+			}
+			source += "Button button = new Button(contents, SWT.NONE);\n";
+			// properties
+			source += "\tbutton.setText(\"New button\");\n";
+		}
+		// end
+		source += "\t...\n";
+		// final result
+		return source;
+	}
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/jface/WrapperInfo.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/jface/WrapperInfo.java
index ff434ee6d..1d47c67ff 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/jface/WrapperInfo.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/jface/WrapperInfo.java
@@ -34,50 +34,50 @@
  * @coverage swt.model.jface
  */
 public class WrapperInfo extends WrapperMethodInfo {
-  private final WrapperInfo m_this = this;
+	private final WrapperInfo m_this = this;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public WrapperInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public WrapperInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Initialize
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void initialize() throws Exception {
-    super.initialize();
-    addBroadcastListener(new ObjectEventListener() {
-      @Override
-      public void addContextMenu(List<? extends ObjectInfo> objects,
-          ObjectInfo object,
-          IMenuManager manager) throws Exception {
-        if (object == m_this) {
-          ExposeComponentSupport.contribute(m_this, manager, ModelMessages.WrapperInfo_exposeViewer);
-          RenameConvertSupport.contribute(objects, manager);
-        }
-      }
-    });
-    StylePropertyEditor.configureContributeActions(this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Initialize
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void initialize() throws Exception {
+		super.initialize();
+		addBroadcastListener(new ObjectEventListener() {
+			@Override
+			public void addContextMenu(List<? extends ObjectInfo> objects,
+					ObjectInfo object,
+					IMenuManager manager) throws Exception {
+				if (object == m_this) {
+					ExposeComponentSupport.contribute(m_this, manager, ModelMessages.WrapperInfo_exposeViewer);
+					RenameConvertSupport.contribute(objects, manager);
+				}
+			}
+		});
+		StylePropertyEditor.configureContributeActions(this);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Properties
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected List<Property> getPropertyList() throws Exception {
-    List<Property> properties = super.getPropertyList();
-    StylePropertyEditor.addStyleProperties(properties);
-    return properties;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Properties
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected List<Property> getPropertyList() throws Exception {
+		List<Property> properties = super.getPropertyList();
+		StylePropertyEditor.addStyleProperties(properties);
+		return properties;
+	}
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/jface/resource/ColorRegistryInfo.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/jface/resource/ColorRegistryInfo.java
index 8da730de3..f96ec6dbb 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/jface/resource/ColorRegistryInfo.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/jface/resource/ColorRegistryInfo.java
@@ -21,14 +21,14 @@
  * @coverage swt.model.jface
  */
 public final class ColorRegistryInfo extends ResourceRegistryInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ColorRegistryInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ColorRegistryInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/jface/resource/FontRegistryInfo.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/jface/resource/FontRegistryInfo.java
index 2da0cbfa0..e75f4076e 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/jface/resource/FontRegistryInfo.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/jface/resource/FontRegistryInfo.java
@@ -21,14 +21,14 @@
  * @coverage swt.model.jface
  */
 public final class FontRegistryInfo extends ResourceRegistryInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FontRegistryInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FontRegistryInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/jface/resource/KeyFieldInfo.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/jface/resource/KeyFieldInfo.java
index 03326d654..15f071989 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/jface/resource/KeyFieldInfo.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/jface/resource/KeyFieldInfo.java
@@ -17,50 +17,50 @@
  * @coverage swt.model.jface
  */
 public final class KeyFieldInfo {
-  /**
-   * Key field name.
-   */
-  public final String keyName;
-  /**
-   * Key source code: <code>qualifiedClassName.fieldName</code>.
-   */
-  public final String keySource;
-  /**
-   * Key field value.
-   */
-  public final String keyValue;
-  /**
-   * Registry value for current key. Maybe is <code>null</code>.
-   */
-  public Object value;
+	/**
+	 * Key field name.
+	 */
+	public final String keyName;
+	/**
+	 * Key source code: <code>qualifiedClassName.fieldName</code>.
+	 */
+	public final String keySource;
+	/**
+	 * Key field value.
+	 */
+	public final String keyValue;
+	/**
+	 * Registry value for current key. Maybe is <code>null</code>.
+	 */
+	public Object value;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public KeyFieldInfo(Class<?> declaringClass, String keyName, String keyValue) {
-    this.keyName = keyName;
-    keySource = declaringClass.getName() + "." + keyName;
-    this.keyValue = keyValue;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public KeyFieldInfo(Class<?> declaringClass, String keyName, String keyValue) {
+		this.keyName = keyName;
+		keySource = declaringClass.getName() + "." + keyName;
+		this.keyValue = keyValue;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public int hashCode() {
-    return keyName.hashCode();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public int hashCode() {
+		return keyName.hashCode();
+	}
 
-  @Override
-  public boolean equals(Object object) {
-    if (object instanceof KeyFieldInfo) {
-      KeyFieldInfo info = (KeyFieldInfo) object;
-      return keyName.equals(info.keyName);
-    }
-    return false;
-  }
+	@Override
+	public boolean equals(Object object) {
+		if (object instanceof KeyFieldInfo) {
+			KeyFieldInfo info = (KeyFieldInfo) object;
+			return keyName.equals(info.keyName);
+		}
+		return false;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/jface/resource/RegistryContainerInfo.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/jface/resource/RegistryContainerInfo.java
index c3473338a..573527996 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/jface/resource/RegistryContainerInfo.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/jface/resource/RegistryContainerInfo.java
@@ -32,108 +32,108 @@
  * @coverage swt.model.jface
  */
 public final class RegistryContainerInfo extends ObjectInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the existing or new {@link RegistryContainerInfo} for given root.
-   */
-  public static RegistryContainerInfo get(JavaInfo root) throws Exception {
-    // try to find existing container
-    RegistryContainerInfo container = findContainer(root);
-    if (container != null) {
-      return container;
-    }
-    // add new container
-    container = new RegistryContainerInfo();
-    root.addChild(container);
-    return container;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the existing or new {@link RegistryContainerInfo} for given root.
+	 */
+	public static RegistryContainerInfo get(JavaInfo root) throws Exception {
+		// try to find existing container
+		RegistryContainerInfo container = findContainer(root);
+		if (container != null) {
+			return container;
+		}
+		// add new container
+		container = new RegistryContainerInfo();
+		root.addChild(container);
+		return container;
+	}
 
-  /**
-   * @return all registries for given root assignable from given {@link Class}.
-   */
-  public static <T extends ResourceRegistryInfo> List<T> getRegistries(JavaInfo root,
-      Class<T> componentClass) throws Exception {
-    RegistryContainerInfo container = findContainer(root);
-    if (container != null) {
-      return container.getChildren(componentClass);
-    }
-    return Collections.emptyList();
-  }
+	/**
+	 * @return all registries for given root assignable from given {@link Class}.
+	 */
+	public static <T extends ResourceRegistryInfo> List<T> getRegistries(JavaInfo root,
+			Class<T> componentClass) throws Exception {
+		RegistryContainerInfo container = findContainer(root);
+		if (container != null) {
+			return container.getChildren(componentClass);
+		}
+		return Collections.emptyList();
+	}
 
-  /**
-   * @return {@link ResourceRegistryInfo} defined into given root represented given {@link ASTNode}.
-   */
-  public static ResourceRegistryInfo getRegistry(JavaInfo root, ASTNode node) throws Exception {
-    RegistryContainerInfo container = findContainer(root);
-    Assert.isNotNull(container);
-    //
-    for (ResourceRegistryInfo registry : container.getRegistryChildren()) {
-      if (registry.isRepresentedBy(node)) {
-        return registry;
-      }
-    }
-    //
-    Assert.fail(MessageFormat.format(
-        ModelMessages.RegistryContainerInfo_unknownRegistry,
-        root,
-        node));
-    return null;
-  }
+	/**
+	 * @return {@link ResourceRegistryInfo} defined into given root represented given {@link ASTNode}.
+	 */
+	public static ResourceRegistryInfo getRegistry(JavaInfo root, ASTNode node) throws Exception {
+		RegistryContainerInfo container = findContainer(root);
+		Assert.isNotNull(container);
+		//
+		for (ResourceRegistryInfo registry : container.getRegistryChildren()) {
+			if (registry.isRepresentedBy(node)) {
+				return registry;
+			}
+		}
+		//
+		Assert.fail(MessageFormat.format(
+				ModelMessages.RegistryContainerInfo_unknownRegistry,
+				root,
+				node));
+		return null;
+	}
 
-  /**
-   * @return find the existing {@link RegistryContainerInfo} for given root.
-   */
-  private static RegistryContainerInfo findContainer(JavaInfo root) {
-    for (ObjectInfo child : root.getChildren()) {
-      if (child instanceof RegistryContainerInfo) {
-        return (RegistryContainerInfo) child;
-      }
-    }
-    return null;
-  }
+	/**
+	 * @return find the existing {@link RegistryContainerInfo} for given root.
+	 */
+	private static RegistryContainerInfo findContainer(JavaInfo root) {
+		for (ObjectInfo child : root.getChildren()) {
+			if (child instanceof RegistryContainerInfo) {
+				return (RegistryContainerInfo) child;
+			}
+		}
+		return null;
+	}
 
-  /**
-   * @return the list of {@link ResourceRegistryInfo} children.
-   */
-  public List<ResourceRegistryInfo> getRegistryChildren() {
-    return getChildren(ResourceRegistryInfo.class);
-  }
+	/**
+	 * @return the list of {@link ResourceRegistryInfo} children.
+	 */
+	public List<ResourceRegistryInfo> getRegistryChildren() {
+		return getChildren(ResourceRegistryInfo.class);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public IObjectPresentation getPresentation() {
-    return new DefaultObjectPresentation(this) {
-      @Override
-      public String getText() throws Exception {
-        return ModelMessages.RegistryContainerInfo_jfaceRegistries;
-      }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public IObjectPresentation getPresentation() {
+		return new DefaultObjectPresentation(this) {
+			@Override
+			public String getText() throws Exception {
+				return ModelMessages.RegistryContainerInfo_jfaceRegistries;
+			}
 
-      @Override
-      public Image getIcon() throws Exception {
-        return Activator.getImage("components/registry_container.gif");
-      }
-    };
-  }
+			@Override
+			public Image getIcon() throws Exception {
+				return Activator.getImage("components/registry_container.gif");
+			}
+		};
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Delete
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean canDelete() {
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Delete
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean canDelete() {
+		return false;
+	}
 
-  @Override
-  public void delete() throws Exception {
-  }
+	@Override
+	public void delete() throws Exception {
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/jface/resource/ResourceRegistryInfo.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/jface/resource/ResourceRegistryInfo.java
index 531a6d631..1ec5571d6 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/jface/resource/ResourceRegistryInfo.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/jface/resource/ResourceRegistryInfo.java
@@ -32,59 +32,59 @@
  * @coverage swt.model.jface
  */
 public class ResourceRegistryInfo extends JavaInfo {
-  private final List<KeyFieldInfo> m_fields;
+	private final List<KeyFieldInfo> m_fields;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ResourceRegistryInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-    // Color/FontRegistry need initialized display
-    {
-      Class<?> displayClass =
-          EditorState.get(editor).getEditorLoader().loadClass("org.eclipse.swt.widgets.Display");
-      ReflectionUtils.invokeMethod(displayClass, "getDefault()");
-    }
-    // prepare key's information
-    m_fields = getKeyFields(getDescription().getComponentClass());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ResourceRegistryInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+		// Color/FontRegistry need initialized display
+		{
+			Class<?> displayClass =
+					EditorState.get(editor).getEditorLoader().loadClass("org.eclipse.swt.widgets.Display");
+			ReflectionUtils.invokeMethod(displayClass, "getDefault()");
+		}
+		// prepare key's information
+		m_fields = getKeyFields(getDescription().getComponentClass());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public final List<KeyFieldInfo> getKeyFields() {
-    return m_fields;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public final List<KeyFieldInfo> getKeyFields() {
+		return m_fields;
+	}
 
-  /**
-   * Extract all <code>public static</code> field's with type {@link String} for given {@link Class}
-   * .
-   */
-  private static List<KeyFieldInfo> getKeyFields(Class<?> registryClass) throws Exception {
-    List<KeyFieldInfo> fields = Lists.newArrayList();
-    // extract all fields
-    for (Field field : registryClass.getFields()) {
-      if (Modifier.isStatic(field.getModifiers()) && field.getType() == String.class) {
-        Class<?> declaringClass = field.getDeclaringClass();
-        String keyName = field.getName();
-        String keyValue = (String) field.get(null);
-        fields.add(new KeyFieldInfo(declaringClass, keyName, keyValue));
-      }
-    }
-    // sort all fields
-    Collections.sort(fields, new Comparator<KeyFieldInfo>() {
-      @Override
-      public int compare(KeyFieldInfo info1, KeyFieldInfo info2) {
-        return info1.keyName.compareTo(info2.keyName);
-      }
-    });
-    //
-    return fields;
-  }
+	/**
+	 * Extract all <code>public static</code> field's with type {@link String} for given {@link Class}
+	 * .
+	 */
+	private static List<KeyFieldInfo> getKeyFields(Class<?> registryClass) throws Exception {
+		List<KeyFieldInfo> fields = Lists.newArrayList();
+		// extract all fields
+		for (Field field : registryClass.getFields()) {
+			if (Modifier.isStatic(field.getModifiers()) && field.getType() == String.class) {
+				Class<?> declaringClass = field.getDeclaringClass();
+				String keyName = field.getName();
+				String keyValue = (String) field.get(null);
+				fields.add(new KeyFieldInfo(declaringClass, keyName, keyValue));
+			}
+		}
+		// sort all fields
+		Collections.sort(fields, new Comparator<KeyFieldInfo>() {
+			@Override
+			public int compare(KeyFieldInfo info1, KeyFieldInfo info2) {
+				return info1.keyName.compareTo(info2.keyName);
+			}
+		});
+		//
+		return fields;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/jface/resource/ResourceRegistryRootProcessor.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/jface/resource/ResourceRegistryRootProcessor.java
index 612f6ec78..032ffbd0c 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/jface/resource/ResourceRegistryRootProcessor.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/jface/resource/ResourceRegistryRootProcessor.java
@@ -44,88 +44,88 @@
  * @coverage swt.model.jface
  */
 public final class ResourceRegistryRootProcessor implements IRootProcessor {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IRootProcessor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void process(JavaInfo root, List<JavaInfo> components) throws Exception {
-    processRoot(root);
-    processComponents(root, components);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IRootProcessor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void process(JavaInfo root, List<JavaInfo> components) throws Exception {
+		processRoot(root);
+		processComponents(root, components);
+	}
 
-  private void processRoot(final JavaInfo root) {
-    root.addBroadcastListener(new ObjectEventListener() {
-      @Override
-      public void refreshDispose() throws Exception {
-        disposeResourceRegistries(root);
-      }
+	private void processRoot(final JavaInfo root) {
+		root.addBroadcastListener(new ObjectEventListener() {
+			@Override
+			public void refreshDispose() throws Exception {
+				disposeResourceRegistries(root);
+			}
 
-      @Override
-      public void dispose() throws Exception {
-        disposeResourceRegistries(root);
-      }
-    });
-  }
+			@Override
+			public void dispose() throws Exception {
+				disposeResourceRegistries(root);
+			}
+		});
+	}
 
-  private void processComponents(final JavaInfo root, final List<JavaInfo> components)
-      throws Exception {
-    // bind {@link ResourceRegistryInfo}'s into hierarchy.
-    for (JavaInfo javaInfo : components) {
-      if (javaInfo instanceof ResourceRegistryInfo) {
-        ResourceRegistryInfo resourceRegistryInfo = (ResourceRegistryInfo) javaInfo;
-        RegistryContainerInfo.get(root).addChild(resourceRegistryInfo);
-      }
-    }
-  }
+	private void processComponents(final JavaInfo root, final List<JavaInfo> components)
+			throws Exception {
+		// bind {@link ResourceRegistryInfo}'s into hierarchy.
+		for (JavaInfo javaInfo : components) {
+			if (javaInfo instanceof ResourceRegistryInfo) {
+				ResourceRegistryInfo resourceRegistryInfo = (ResourceRegistryInfo) javaInfo;
+				RegistryContainerInfo.get(root).addChild(resourceRegistryInfo);
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Implementation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Disposes all {@link ResourceRegistry}'s, loaded for given hierarchy.
-   *
-   * @param javaInfo
-   *          the root {@link JavaInfo} of hierarchy.
-   */
-  private static void disposeResourceRegistries(JavaInfo javaInfo) throws Exception {
-    EditorState editorState = EditorState.get(javaInfo.getEditor());
-    // SWT utilities require "activeJavaInfo"
-    ObjectInfo activeObject = GlobalState.getActiveObject();
-    if (!(activeObject instanceof JavaInfo)) {
-      return;
-    }
-    JavaInfo activeJavaInfo = (JavaInfo) activeObject;
-    try {
-      GlobalStateJava.activate(javaInfo);
-      if (AbstractSupport.is_SWT()) {
-        Object display = DisplaySupport.getDefault();
-        Object disposeList = ReflectionUtils.getFieldObject(display, "disposeList");
-        if (disposeList != null) {
-          int length = Array.getLength(disposeList);
-          for (int i = 0; i < length; i++) {
-            Object runnable = Array.get(disposeList, i);
-            if (runnable != null) {
-              try {
-                Object registry = ReflectionUtils.getFieldObject(runnable, "this$0");
-                Class<?> registryClass = registry.getClass();
-                if (editorState.isLoadedFrom(registryClass)) {
-                  // remove listener
-                  Array.set(disposeList, i, null);
-                  // clear resources
-                  ReflectionUtils.invokeMethod(runnable, "run()");
-                }
-              } catch (Throwable e) {
-              }
-            }
-          }
-        }
-      }
-    } finally {
-      GlobalStateJava.activate(activeJavaInfo);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Implementation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Disposes all {@link ResourceRegistry}'s, loaded for given hierarchy.
+	 *
+	 * @param javaInfo
+	 *          the root {@link JavaInfo} of hierarchy.
+	 */
+	private static void disposeResourceRegistries(JavaInfo javaInfo) throws Exception {
+		EditorState editorState = EditorState.get(javaInfo.getEditor());
+		// SWT utilities require "activeJavaInfo"
+		ObjectInfo activeObject = GlobalState.getActiveObject();
+		if (!(activeObject instanceof JavaInfo)) {
+			return;
+		}
+		JavaInfo activeJavaInfo = (JavaInfo) activeObject;
+		try {
+			GlobalStateJava.activate(javaInfo);
+			if (AbstractSupport.is_SWT()) {
+				Object display = DisplaySupport.getDefault();
+				Object disposeList = ReflectionUtils.getFieldObject(display, "disposeList");
+				if (disposeList != null) {
+					int length = Array.getLength(disposeList);
+					for (int i = 0; i < length; i++) {
+						Object runnable = Array.get(disposeList, i);
+						if (runnable != null) {
+							try {
+								Object registry = ReflectionUtils.getFieldObject(runnable, "this$0");
+								Class<?> registryClass = registry.getClass();
+								if (editorState.isLoadedFrom(registryClass)) {
+									// remove listener
+									Array.set(disposeList, i, null);
+									// clear resources
+									ReflectionUtils.invokeMethod(runnable, "run()");
+								}
+							} catch (Throwable e) {
+							}
+						}
+					}
+				}
+			}
+		} finally {
+			GlobalStateJava.activate(activeJavaInfo);
+		}
+	}
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/jface/viewer/ViewerInfo.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/jface/viewer/ViewerInfo.java
index 4a636c141..c7cc78e3e 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/jface/viewer/ViewerInfo.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/jface/viewer/ViewerInfo.java
@@ -29,34 +29,34 @@
  * @coverage swt.model.jface
  */
 public class ViewerInfo extends WrapperInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ViewerInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ViewerInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IWrapperInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected WrapperByMethod createWrapper() {
-    return new WrapperByMethod(this, JavaInfoUtils.getParameter(this, "viewer.control.method")) {
-      @Override
-      protected void configureParameter(ParameterDescription parameter, JavaInfo parameterJavaInfo)
-          throws Exception {
-        if (parameter.isParent()
-            && parameter.getType() == ContainerSupport.getCompositeClass()
-            && parameterJavaInfo instanceof CompositeInfo) {
-          configureHierarchy(parameterJavaInfo);
-        }
-      }
-    };
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IWrapperInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected WrapperByMethod createWrapper() {
+		return new WrapperByMethod(this, JavaInfoUtils.getParameter(this, "viewer.control.method")) {
+			@Override
+			protected void configureParameter(ParameterDescription parameter, JavaInfo parameterJavaInfo)
+					throws Exception {
+				if (parameter.isParent()
+						&& parameter.getType() == ContainerSupport.getCompositeClass()
+						&& parameterJavaInfo instanceof CompositeInfo) {
+					configureHierarchy(parameterJavaInfo);
+				}
+			}
+		};
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/FillLayoutAssistant.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/FillLayoutAssistant.java
index 933ce0fe6..f2ba11f73 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/FillLayoutAssistant.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/FillLayoutAssistant.java
@@ -22,22 +22,22 @@
  * @coverage swt.model.layout
  */
 public final class FillLayoutAssistant extends LayoutAssistantSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FillLayoutAssistant(ILayoutInfo<?> layout) {
-    super(layout);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FillLayoutAssistant(ILayoutInfo<?> layout) {
+		super(layout);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Pages
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected AbstractAssistantPage createLayoutPage(Composite parent) {
-    return new FillLayoutAssistantPage(parent, m_layout);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Pages
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected AbstractAssistantPage createLayoutPage(Composite parent) {
+		return new FillLayoutAssistantPage(parent, m_layout);
+	}
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/FillLayoutAssistantPage.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/FillLayoutAssistantPage.java
index 41ea79ced..0d5cc672d 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/FillLayoutAssistantPage.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/FillLayoutAssistantPage.java
@@ -26,41 +26,41 @@
  * @coverage swt.assistant
  */
 public final class FillLayoutAssistantPage extends AbstractAssistantPage {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FillLayoutAssistantPage(Composite parent, Object selection) {
-    super(parent, selection);
-    GridLayoutFactory.create(this).columns(2);
-    // orientation
-    {
-      Group orientationGroup =
-          addChoiceProperty(
-              this,
-              "type",
-              ModelMessages.FillLayoutAssistantPage_orientationGroup,
-              new Object[][]{
-                  new Object[]{
-                      ModelMessages.FillLayoutAssistantPage_orientationHorizontal,
-                      SWT.HORIZONTAL},
-                  new Object[]{
-                      ModelMessages.FillLayoutAssistantPage_orientationVertical,
-                      SWT.VERTICAL}});
-      GridDataFactory.create(orientationGroup).fillV();
-    }
-    // spacing
-    {
-      Group spacingGroup =
-          addIntegerProperties(
-              this,
-              ModelMessages.FillLayoutAssistantPage_spacingGroup,
-              new String[][]{
-                  new String[]{"marginWidth", ModelMessages.FillLayoutAssistantPage_marginWidth},
-                  new String[]{"marginHeight", ModelMessages.FillLayoutAssistantPage_marginHeight},
-                  new String[]{"spacing", ModelMessages.FillLayoutAssistantPage_spacingValue}});
-      GridDataFactory.create(spacingGroup).fillV();
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FillLayoutAssistantPage(Composite parent, Object selection) {
+		super(parent, selection);
+		GridLayoutFactory.create(this).columns(2);
+		// orientation
+		{
+			Group orientationGroup =
+					addChoiceProperty(
+							this,
+							"type",
+							ModelMessages.FillLayoutAssistantPage_orientationGroup,
+							new Object[][]{
+								new Object[]{
+										ModelMessages.FillLayoutAssistantPage_orientationHorizontal,
+										SWT.HORIZONTAL},
+								new Object[]{
+										ModelMessages.FillLayoutAssistantPage_orientationVertical,
+										SWT.VERTICAL}});
+			GridDataFactory.create(orientationGroup).fillV();
+		}
+		// spacing
+		{
+			Group spacingGroup =
+					addIntegerProperties(
+							this,
+							ModelMessages.FillLayoutAssistantPage_spacingGroup,
+							new String[][]{
+								new String[]{"marginWidth", ModelMessages.FillLayoutAssistantPage_marginWidth},
+								new String[]{"marginHeight", ModelMessages.FillLayoutAssistantPage_marginHeight},
+								new String[]{"spacing", ModelMessages.FillLayoutAssistantPage_spacingValue}});
+			GridDataFactory.create(spacingGroup).fillV();
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/FillLayoutInfo.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/FillLayoutInfo.java
index 07a80a06a..6c2c598d3 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/FillLayoutInfo.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/FillLayoutInfo.java
@@ -28,42 +28,42 @@
  * @coverage swt.model.layout
  */
 public final class FillLayoutInfo extends GenericFlowLayoutInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FillLayoutInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-    new FillLayoutAssistant(this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FillLayoutInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+		new FillLayoutAssistant(this);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Styles
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public boolean isHorizontal() {
-    return FillLayoutSupport.isHorizontal(getObject());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Styles
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public boolean isHorizontal() {
+		return FillLayoutSupport.isHorizontal(getObject());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Clipboard
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void clipboardCopy_addControlCommands(ControlInfo control,
-      List<ClipboardCommand> commands) throws Exception {
-    commands.add(new LayoutClipboardCommand<FillLayoutInfo>(control) {
-      private static final long serialVersionUID = 0L;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Clipboard
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void clipboardCopy_addControlCommands(ControlInfo control,
+			List<ClipboardCommand> commands) throws Exception {
+		commands.add(new LayoutClipboardCommand<FillLayoutInfo>(control) {
+			private static final long serialVersionUID = 0L;
 
-      @Override
-      protected void add(FillLayoutInfo layout, ControlInfo control) throws Exception {
-        layout.command_CREATE(control, null);
-      }
-    });
-  }
+			@Override
+			protected void add(FillLayoutInfo layout, ControlInfo control) throws Exception {
+				layout.command_CREATE(control, null);
+			}
+		});
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/GenericFlowLayoutInfo.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/GenericFlowLayoutInfo.java
index 2fac601d3..a7f1a6581 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/GenericFlowLayoutInfo.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/GenericFlowLayoutInfo.java
@@ -25,14 +25,14 @@
  * @coverage swt.model.layout
  */
 public abstract class GenericFlowLayoutInfo extends LayoutInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public GenericFlowLayoutInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public GenericFlowLayoutInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/GenericFlowLayoutSurroundSupport.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/GenericFlowLayoutSurroundSupport.java
index aec18ac79..05b76355a 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/GenericFlowLayoutSurroundSupport.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/GenericFlowLayoutSurroundSupport.java
@@ -25,39 +25,39 @@
  * @coverage swt.model.layout
  */
 public final class GenericFlowLayoutSurroundSupport extends LayoutSurroundSupport {
-  private final GenericFlowLayoutInfo m_layout;
+	private final GenericFlowLayoutInfo m_layout;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public GenericFlowLayoutSurroundSupport(GenericFlowLayoutInfo layout) {
-    super(layout);
-    m_layout = layout;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public GenericFlowLayoutSurroundSupport(GenericFlowLayoutInfo layout) {
+		super(layout);
+		m_layout = layout;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Operation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected boolean validateComponents(List<ControlInfo> components) throws Exception {
-    // check that components are adjacent
-    {
-      List<ControlInfo> allComponents = m_layout.getComposite().getChildrenControls();
-      if (!GenericsUtils.areAdjacent(allComponents, components)) {
-        return false;
-      }
-    }
-    // continue
-    return super.validateComponents(components);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Operation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected boolean validateComponents(List<ControlInfo> components) throws Exception {
+		// check that components are adjacent
+		{
+			List<ControlInfo> allComponents = m_layout.getComposite().getChildrenControls();
+			if (!GenericsUtils.areAdjacent(allComponents, components)) {
+				return false;
+			}
+		}
+		// continue
+		return super.validateComponents(components);
+	}
 
-  @Override
-  protected void addContainer(CompositeInfo container, List<ControlInfo> components)
-      throws Exception {
-    m_layout.command_CREATE(container, components.get(0));
-  }
+	@Override
+	protected void addContainer(CompositeInfo container, List<ControlInfo> components)
+			throws Exception {
+		m_layout.command_CREATE(container, components.get(0));
+	}
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/ILayoutInfo.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/ILayoutInfo.java
index ee2621f06..70f30b067 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/ILayoutInfo.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/ILayoutInfo.java
@@ -25,35 +25,35 @@
  * @coverage swt.model.layout
  */
 public interface ILayoutInfo<C extends IControlInfo> extends IObjectInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link ICompositeInfo} that contains this {@link ILayoutInfo}.
-   */
-  ICompositeInfo getComposite();
-
-  /**
-   * @return <code>true</code> if this {@link ILayoutInfo} is active. For example implicit
-   *         {@link ILayoutInfo}'s replaced by "real" {@link ILayoutInfo} is inactive.
-   */
-  boolean isActive();
-
-  /**
-   * @return <code>true</code> if given {@link Object} is managed by this {@link ILayoutInfo}.
-   */
-  boolean isManagedObject(Object o);
-
-  /**
-   * @return the {@link IControlInfo} that are managed by this {@link ILayoutInfo}. This excludes
-   *         for example indirectly exposed {@link IControlInfo}'s.
-   */
-  List<C> getControls();
-
-  /**
-   * @return {@link ILayoutDataInfo} associated with given {@link IControlInfo}.
-   */
-  ILayoutDataInfo getLayoutData2(IControlInfo control);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link ICompositeInfo} that contains this {@link ILayoutInfo}.
+	 */
+	ICompositeInfo getComposite();
+
+	/**
+	 * @return <code>true</code> if this {@link ILayoutInfo} is active. For example implicit
+	 *         {@link ILayoutInfo}'s replaced by "real" {@link ILayoutInfo} is inactive.
+	 */
+	boolean isActive();
+
+	/**
+	 * @return <code>true</code> if given {@link Object} is managed by this {@link ILayoutInfo}.
+	 */
+	boolean isManagedObject(Object o);
+
+	/**
+	 * @return the {@link IControlInfo} that are managed by this {@link ILayoutInfo}. This excludes
+	 *         for example indirectly exposed {@link IControlInfo}'s.
+	 */
+	List<C> getControls();
+
+	/**
+	 * @return {@link ILayoutDataInfo} associated with given {@link IControlInfo}.
+	 */
+	ILayoutDataInfo getLayoutData2(IControlInfo control);
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/IRowDataInfo.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/IRowDataInfo.java
index 5026b0627..f7a10a58f 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/IRowDataInfo.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/IRowDataInfo.java
@@ -19,13 +19,13 @@
  * @coverage swt.model.layout
  */
 public interface IRowDataInfo extends ILayoutDataInfo {
-  /**
-   * Sets width.
-   */
-  public void setWidth(int width) throws Exception;
+	/**
+	 * Sets width.
+	 */
+	public void setWidth(int width) throws Exception;
 
-  /**
-   * Sets height.
-   */
-  public void setHeight(int height) throws Exception;
+	/**
+	 * Sets height.
+	 */
+	public void setHeight(int height) throws Exception;
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/IRowLayoutInfo.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/IRowLayoutInfo.java
index ae14d9977..965b0a212 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/IRowLayoutInfo.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/IRowLayoutInfo.java
@@ -21,8 +21,8 @@
  * @coverage swt.model.layout
  */
 public interface IRowLayoutInfo<C extends IControlInfo> extends ILayoutInfo<C> {
-  /**
-   * @return {@link IRowDataInfo} association with given {@link IControlInfo}.
-   */
-  IRowDataInfo getRowData2(C control);
+	/**
+	 * @return {@link IRowDataInfo} association with given {@link IControlInfo}.
+	 */
+	IRowDataInfo getRowData2(C control);
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/ImplicitLayoutCreationSupport.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/ImplicitLayoutCreationSupport.java
index b3035447e..588561af7 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/ImplicitLayoutCreationSupport.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/ImplicitLayoutCreationSupport.java
@@ -37,174 +37,174 @@
  * @coverage swt.model.layout
  */
 public final class ImplicitLayoutCreationSupport extends CreationSupport
-    implements
-      IImplicitCreationSupport {
-  private final CompositeInfo m_composite;
-  private final ObjectInfoChildAddBefore m_objectListener1 = new ObjectInfoChildAddBefore() {
-    @Override
-    public void invoke(ObjectInfo parent, ObjectInfo child, ObjectInfo[] nextChild)
-        throws Exception {
-      if (isAddLayout(parent, child) && parent.getChildren().contains(m_javaInfo)) {
-        if (nextChild[0] == m_javaInfo) {
-          nextChild[0] = GenericsUtils.getNextOrNull(parent.getChildren(), m_javaInfo);
-        }
-        parent.removeChild(m_javaInfo);
-      }
-    }
-
-    /**
-     * @return <code>true</code> if given combination of parent/child is adding new
-     *         {@link LayoutInfo} on our {@link CompositeInfo}.
-     */
-    private boolean isAddLayout(ObjectInfo parent, ObjectInfo child) {
-      return parent == m_composite && child instanceof LayoutInfo && child != m_javaInfo;
-    }
-  };
-  private final ObjectEventListener m_objectListener2 = new ObjectEventListener() {
-    @Override
-    public void childRemoveAfter(ObjectInfo parent, ObjectInfo child) throws Exception {
-      if (useImplicitLayout() && isAddLayout(parent, child)) {
-        parent.addChild(m_javaInfo);
-      }
-    }
-
-    /**
-     * @return <code>true</code> if implicit layout should be added/removed.
-     */
-    private boolean useImplicitLayout() {
-      return m_composite.getArbitraryValue(CompositeInfo.KEY_DONT_SET_IMPLICIT_LAYOUT) != Boolean.TRUE;
-    }
-
-    /**
-     * @return <code>true</code> if given combination of parent/child is adding new
-     *         {@link LayoutInfo} on our {@link CompositeInfo}.
-     */
-    private boolean isAddLayout(ObjectInfo parent, ObjectInfo child) {
-      return parent == m_composite && child instanceof LayoutInfo && child != m_javaInfo;
-    }
-  };
-  private final Object m_javaListener = new JavaInfoSetObjectAfter() {
-    @Override
-    public void invoke(JavaInfo target, Object object) throws Exception {
-      if (target == m_composite) {
-        Object layout = ContainerSupport.getLayout(object);
-        Class<?> layoutClass = m_javaInfo.getDescription().getComponentClass();
-        if (layoutClass == null) {
-          m_javaInfo.setObject(layout);
-        } else if (layout != null && ReflectionUtils.isAssignableFrom(layoutClass, layout)) {
-          m_javaInfo.setObject(layout);
-        }
-      }
-    }
-  };
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ImplicitLayoutCreationSupport(CompositeInfo composite) {
-    m_composite = composite;
-    m_composite.addBroadcastListener(m_objectListener1);
-    m_composite.addBroadcastListener(m_objectListener2);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    Class<?> layoutClass = getComponentClass();
-    // check for absolute layout
-    if (layoutClass == null) {
-      return "implicit-layout: absolute";
-    }
-    // "real" layout
-    return "implicit-layout: " + layoutClass.getName();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void setJavaInfo(JavaInfo javaInfo) throws Exception {
-    super.setJavaInfo(javaInfo);
-    m_composite.addBroadcastListener(m_javaListener);
-  }
-
-  @Override
-  public boolean isJavaInfo(ASTNode node) {
-    if (node instanceof MethodInvocation) {
-      MethodInvocation invocation = (MethodInvocation) node;
-      return invocation.arguments().isEmpty()
-          && invocation.getName().getIdentifier().equals("getLayout")
-          && m_composite.isRepresentedBy(invocation.getExpression());
-    }
-    return false;
-  }
-
-  @Override
-  public ASTNode getNode() {
-    return m_composite.getCreationSupport().getNode();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Special access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void removeForever() throws Exception {
-    m_composite.removeBroadcastListener(m_objectListener1);
-    m_composite.removeBroadcastListener(m_objectListener2);
-    m_composite.removeBroadcastListener(m_javaListener);
-    m_composite.removeChild(m_javaInfo);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Add
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String add_getSource(NodeTarget target) throws Exception {
-    String layoutClassName = m_javaInfo.getDescription().getComponentClass().getName();
-    return TemplateUtils.format("({0}) {1}.getLayout()", layoutClassName, m_composite);
-  }
-
-  @Override
-  public void add_setSourceExpression(Expression expression) throws Exception {
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Delete
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean canDelete() {
-    return true;
-  }
-
-  @Override
-  public void delete() throws Exception {
-    JavaInfoUtils.deleteJavaInfo(m_javaInfo, false);
-    // if implicit layout was materialized, so has real variable, restore implicit variable
-    if (!(m_javaInfo.getVariableSupport() instanceof ImplicitLayoutVariableSupport)) {
-      m_javaInfo.setVariableSupport(new ImplicitLayoutVariableSupport(m_javaInfo));
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IClipboardImplicitCreationSupport
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public IClipboardImplicitCreationSupport getImplicitClipboard() {
-    return null;
-  }
+implements
+IImplicitCreationSupport {
+	private final CompositeInfo m_composite;
+	private final ObjectInfoChildAddBefore m_objectListener1 = new ObjectInfoChildAddBefore() {
+		@Override
+		public void invoke(ObjectInfo parent, ObjectInfo child, ObjectInfo[] nextChild)
+				throws Exception {
+			if (isAddLayout(parent, child) && parent.getChildren().contains(m_javaInfo)) {
+				if (nextChild[0] == m_javaInfo) {
+					nextChild[0] = GenericsUtils.getNextOrNull(parent.getChildren(), m_javaInfo);
+				}
+				parent.removeChild(m_javaInfo);
+			}
+		}
+
+		/**
+		 * @return <code>true</code> if given combination of parent/child is adding new
+		 *         {@link LayoutInfo} on our {@link CompositeInfo}.
+		 */
+		private boolean isAddLayout(ObjectInfo parent, ObjectInfo child) {
+			return parent == m_composite && child instanceof LayoutInfo && child != m_javaInfo;
+		}
+	};
+	private final ObjectEventListener m_objectListener2 = new ObjectEventListener() {
+		@Override
+		public void childRemoveAfter(ObjectInfo parent, ObjectInfo child) throws Exception {
+			if (useImplicitLayout() && isAddLayout(parent, child)) {
+				parent.addChild(m_javaInfo);
+			}
+		}
+
+		/**
+		 * @return <code>true</code> if implicit layout should be added/removed.
+		 */
+		private boolean useImplicitLayout() {
+			return m_composite.getArbitraryValue(CompositeInfo.KEY_DONT_SET_IMPLICIT_LAYOUT) != Boolean.TRUE;
+		}
+
+		/**
+		 * @return <code>true</code> if given combination of parent/child is adding new
+		 *         {@link LayoutInfo} on our {@link CompositeInfo}.
+		 */
+		private boolean isAddLayout(ObjectInfo parent, ObjectInfo child) {
+			return parent == m_composite && child instanceof LayoutInfo && child != m_javaInfo;
+		}
+	};
+	private final Object m_javaListener = new JavaInfoSetObjectAfter() {
+		@Override
+		public void invoke(JavaInfo target, Object object) throws Exception {
+			if (target == m_composite) {
+				Object layout = ContainerSupport.getLayout(object);
+				Class<?> layoutClass = m_javaInfo.getDescription().getComponentClass();
+				if (layoutClass == null) {
+					m_javaInfo.setObject(layout);
+				} else if (layout != null && ReflectionUtils.isAssignableFrom(layoutClass, layout)) {
+					m_javaInfo.setObject(layout);
+				}
+			}
+		}
+	};
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ImplicitLayoutCreationSupport(CompositeInfo composite) {
+		m_composite = composite;
+		m_composite.addBroadcastListener(m_objectListener1);
+		m_composite.addBroadcastListener(m_objectListener2);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		Class<?> layoutClass = getComponentClass();
+		// check for absolute layout
+		if (layoutClass == null) {
+			return "implicit-layout: absolute";
+		}
+		// "real" layout
+		return "implicit-layout: " + layoutClass.getName();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void setJavaInfo(JavaInfo javaInfo) throws Exception {
+		super.setJavaInfo(javaInfo);
+		m_composite.addBroadcastListener(m_javaListener);
+	}
+
+	@Override
+	public boolean isJavaInfo(ASTNode node) {
+		if (node instanceof MethodInvocation) {
+			MethodInvocation invocation = (MethodInvocation) node;
+			return invocation.arguments().isEmpty()
+					&& invocation.getName().getIdentifier().equals("getLayout")
+					&& m_composite.isRepresentedBy(invocation.getExpression());
+		}
+		return false;
+	}
+
+	@Override
+	public ASTNode getNode() {
+		return m_composite.getCreationSupport().getNode();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Special access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void removeForever() throws Exception {
+		m_composite.removeBroadcastListener(m_objectListener1);
+		m_composite.removeBroadcastListener(m_objectListener2);
+		m_composite.removeBroadcastListener(m_javaListener);
+		m_composite.removeChild(m_javaInfo);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Add
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String add_getSource(NodeTarget target) throws Exception {
+		String layoutClassName = m_javaInfo.getDescription().getComponentClass().getName();
+		return TemplateUtils.format("({0}) {1}.getLayout()", layoutClassName, m_composite);
+	}
+
+	@Override
+	public void add_setSourceExpression(Expression expression) throws Exception {
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Delete
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean canDelete() {
+		return true;
+	}
+
+	@Override
+	public void delete() throws Exception {
+		JavaInfoUtils.deleteJavaInfo(m_javaInfo, false);
+		// if implicit layout was materialized, so has real variable, restore implicit variable
+		if (!(m_javaInfo.getVariableSupport() instanceof ImplicitLayoutVariableSupport)) {
+			m_javaInfo.setVariableSupport(new ImplicitLayoutVariableSupport(m_javaInfo));
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IClipboardImplicitCreationSupport
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public IClipboardImplicitCreationSupport getImplicitClipboard() {
+		return null;
+	}
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/ImplicitLayoutDataCreationSupport.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/ImplicitLayoutDataCreationSupport.java
index e36a28a14..c6ed8b70f 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/ImplicitLayoutDataCreationSupport.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/ImplicitLayoutDataCreationSupport.java
@@ -32,100 +32,100 @@
  * @coverage swt.model.layout
  */
 public final class ImplicitLayoutDataCreationSupport extends CreationSupport
-    implements
-      IImplicitCreationSupport {
-  private final ControlInfo m_controlInfo;
+implements
+IImplicitCreationSupport {
+	private final ControlInfo m_controlInfo;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ImplicitLayoutDataCreationSupport(ControlInfo controlInfo) {
-    m_controlInfo = controlInfo;
-    m_controlInfo.addBroadcastListener(new JavaInfoSetObjectAfter() {
-      @Override
-      public void invoke(JavaInfo target, Object object) throws Exception {
-        if (target == m_controlInfo) {
-          m_javaInfo.setObject(ControlSupport.getLayoutData(object));
-        }
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ImplicitLayoutDataCreationSupport(ControlInfo controlInfo) {
+		m_controlInfo = controlInfo;
+		m_controlInfo.addBroadcastListener(new JavaInfoSetObjectAfter() {
+			@Override
+			public void invoke(JavaInfo target, Object object) throws Exception {
+				if (target == m_controlInfo) {
+					m_javaInfo.setObject(ControlSupport.getLayoutData(object));
+				}
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    Class<?> layoutClass = getComponentClass();
-    return "implicit-layout-data: " + layoutClass.getName();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		Class<?> layoutClass = getComponentClass();
+		return "implicit-layout-data: " + layoutClass.getName();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean isJavaInfo(ASTNode node) {
-    if (node instanceof MethodInvocation) {
-      MethodInvocation invocation = (MethodInvocation) node;
-      return invocation.arguments().isEmpty()
-          && invocation.getName().getIdentifier().equals("getLayoutData")
-          && m_controlInfo.isRepresentedBy(invocation.getExpression());
-    }
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean isJavaInfo(ASTNode node) {
+		if (node instanceof MethodInvocation) {
+			MethodInvocation invocation = (MethodInvocation) node;
+			return invocation.arguments().isEmpty()
+					&& invocation.getName().getIdentifier().equals("getLayoutData")
+					&& m_controlInfo.isRepresentedBy(invocation.getExpression());
+		}
+		return false;
+	}
 
-  @Override
-  public ASTNode getNode() {
-    return m_controlInfo.getCreationSupport().getNode();
-  }
+	@Override
+	public ASTNode getNode() {
+		return m_controlInfo.getCreationSupport().getNode();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Add
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String add_getSource(NodeTarget target) throws Exception {
-    String layoutClassName = m_javaInfo.getDescription().getComponentClass().getName();
-    return TemplateUtils.format("({0}) {1}.getLayoutData()", layoutClassName, m_controlInfo);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Add
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String add_getSource(NodeTarget target) throws Exception {
+		String layoutClassName = m_javaInfo.getDescription().getComponentClass().getName();
+		return TemplateUtils.format("({0}) {1}.getLayoutData()", layoutClassName, m_controlInfo);
+	}
 
-  @Override
-  public void add_setSourceExpression(Expression expression) throws Exception {
-  }
+	@Override
+	public void add_setSourceExpression(Expression expression) throws Exception {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Delete
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean canDelete() {
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Delete
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean canDelete() {
+		return true;
+	}
 
-  @Override
-  public void delete() throws Exception {
-    JavaInfoUtils.deleteJavaInfo(m_javaInfo, false);
-    // if implicit layout data was materialized, so has real variable, restore implicit variable
-    if (!(m_javaInfo.getVariableSupport() instanceof ImplicitLayoutDataVariableSupport)) {
-      m_javaInfo.setVariableSupport(new ImplicitLayoutDataVariableSupport(m_javaInfo));
-    }
-  }
+	@Override
+	public void delete() throws Exception {
+		JavaInfoUtils.deleteJavaInfo(m_javaInfo, false);
+		// if implicit layout data was materialized, so has real variable, restore implicit variable
+		if (!(m_javaInfo.getVariableSupport() instanceof ImplicitLayoutDataVariableSupport)) {
+			m_javaInfo.setVariableSupport(new ImplicitLayoutDataVariableSupport(m_javaInfo));
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IClipboardImplicitCreationSupport
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public IClipboardImplicitCreationSupport getImplicitClipboard() {
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IClipboardImplicitCreationSupport
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public IClipboardImplicitCreationSupport getImplicitClipboard() {
+		return null;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/ImplicitLayoutDataVariableSupport.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/ImplicitLayoutDataVariableSupport.java
index 224321bad..c59a6446f 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/ImplicitLayoutDataVariableSupport.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/ImplicitLayoutDataVariableSupport.java
@@ -30,47 +30,47 @@
  * @coverage swt.model.layout
  */
 public final class ImplicitLayoutDataVariableSupport extends AbstractImplicitVariableSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ImplicitLayoutDataVariableSupport(JavaInfo javaInfo) {
-    super(javaInfo);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ImplicitLayoutDataVariableSupport(JavaInfo javaInfo) {
+		super(javaInfo);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    return "implicit-layout-data";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		return "implicit-layout-data";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean isDefault() {
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean isDefault() {
+		return true;
+	}
 
-  @Override
-  public String getTitle() throws Exception {
-    return "(implicit layout data)";
-  }
+	@Override
+	public String getTitle() throws Exception {
+		return "(implicit layout data)";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Materializing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected JavaInfo getParent() {
-    return m_javaInfo.getParentJava();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Materializing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected JavaInfo getParent() {
+		return m_javaInfo.getParentJava();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/ImplicitLayoutVariableSupport.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/ImplicitLayoutVariableSupport.java
index 283c1ab3e..3d4811912 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/ImplicitLayoutVariableSupport.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/ImplicitLayoutVariableSupport.java
@@ -21,47 +21,47 @@
  * @coverage swt.model.layout
  */
 public final class ImplicitLayoutVariableSupport extends AbstractImplicitVariableSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ImplicitLayoutVariableSupport(JavaInfo javaInfo) {
-    super(javaInfo);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ImplicitLayoutVariableSupport(JavaInfo javaInfo) {
+		super(javaInfo);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    return "implicit-layout";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		return "implicit-layout";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean isDefault() {
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean isDefault() {
+		return true;
+	}
 
-  @Override
-  public String getTitle() throws Exception {
-    return "(implicit layout)";
-  }
+	@Override
+	public String getTitle() throws Exception {
+		return "(implicit layout)";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Materializing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected JavaInfo getParent() {
-    return m_javaInfo.getParentJava();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Materializing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected JavaInfo getParent() {
+		return m_javaInfo.getParentJava();
+	}
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/LayoutAssistantSupport.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/LayoutAssistantSupport.java
index 1cccefe04..70797677d 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/LayoutAssistantSupport.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/LayoutAssistantSupport.java
@@ -26,51 +26,51 @@
  * @coverage swt.assistant
  */
 public abstract class LayoutAssistantSupport
-    extends
-      org.eclipse.wb.core.editor.actions.assistant.LayoutAssistantSupport {
-  protected final ILayoutInfo<?> m_layout;
+extends
+org.eclipse.wb.core.editor.actions.assistant.LayoutAssistantSupport {
+	protected final ILayoutInfo<?> m_layout;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public LayoutAssistantSupport(ILayoutInfo<?> layout) {
-    super(layout.getUnderlyingModel());
-    m_layout = layout;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public LayoutAssistantSupport(ILayoutInfo<?> layout) {
+		super(layout.getUnderlyingModel());
+		m_layout = layout;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // LayoutAssistantSupport
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected final String getConstraintsPageTitle() {
-    return ModelMessages.LayoutAssistantSupport_layoutDataPage;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// LayoutAssistantSupport
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected final String getConstraintsPageTitle() {
+		return ModelMessages.LayoutAssistantSupport_layoutDataPage;
+	}
 
-  @Override
-  protected final ObjectInfo getContainer() {
-    return m_layout.getComposite().getUnderlyingModel();
-  }
+	@Override
+	protected final ObjectInfo getContainer() {
+		return m_layout.getComposite().getUnderlyingModel();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Converts {@link IControlInfo}s into their {@link ILayoutDataInfo}s.
-   */
-  protected final List<ILayoutDataInfo> getDataList(List<ObjectInfo> objects) {
-    List<ILayoutDataInfo> dataList =
-        Lists.transform(objects, new Function<ObjectInfo, ILayoutDataInfo>() {
-          @Override
-          public ILayoutDataInfo apply(ObjectInfo from) {
-            return m_layout.getLayoutData2((IControlInfo) from);
-          }
-        });
-    return dataList;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Converts {@link IControlInfo}s into their {@link ILayoutDataInfo}s.
+	 */
+	protected final List<ILayoutDataInfo> getDataList(List<ObjectInfo> objects) {
+		List<ILayoutDataInfo> dataList =
+				Lists.transform(objects, new Function<ObjectInfo, ILayoutDataInfo>() {
+					@Override
+					public ILayoutDataInfo apply(ObjectInfo from) {
+						return m_layout.getLayoutData2((IControlInfo) from);
+					}
+				});
+		return dataList;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/LayoutClipboardCommand.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/LayoutClipboardCommand.java
index c4ba77fb8..a11511120 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/LayoutClipboardCommand.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/LayoutClipboardCommand.java
@@ -22,36 +22,36 @@
  * @coverage swt.model.layout
  */
 public abstract class LayoutClipboardCommand<L extends LayoutInfo>
-    extends
-      ComponentClipboardCommand<CompositeInfo> {
-  private static final long serialVersionUID = 0L;
-  private final JavaInfoMemento m_controlMemento;
+extends
+ComponentClipboardCommand<CompositeInfo> {
+	private static final long serialVersionUID = 0L;
+	private final JavaInfoMemento m_controlMemento;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public LayoutClipboardCommand(ControlInfo control) throws Exception {
-    m_controlMemento = JavaInfoMemento.createMemento(control);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public LayoutClipboardCommand(ControlInfo control) throws Exception {
+		m_controlMemento = JavaInfoMemento.createMemento(control);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Execute
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  @SuppressWarnings("unchecked")
-  public final void execute(CompositeInfo composite) throws Exception {
-    ControlInfo control = (ControlInfo) m_controlMemento.create(composite);
-    L layout = (L) composite.getLayout();
-    add(layout, control);
-    m_controlMemento.apply();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Execute
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	@SuppressWarnings("unchecked")
+	public final void execute(CompositeInfo composite) throws Exception {
+		ControlInfo control = (ControlInfo) m_controlMemento.create(composite);
+		L layout = (L) composite.getLayout();
+		add(layout, control);
+		m_controlMemento.apply();
+	}
 
-  /**
-   * Adds given {@link ControlInfo} to {@link CompositeInfo} using layout specific way.
-   */
-  protected abstract void add(L layout, ControlInfo control) throws Exception;
+	/**
+	 * Adds given {@link ControlInfo} to {@link CompositeInfo} using layout specific way.
+	 */
+	protected abstract void add(L layout, ControlInfo control) throws Exception;
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/LayoutDataClipboardCommand.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/LayoutDataClipboardCommand.java
index ce78a4346..dfc56adee 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/LayoutDataClipboardCommand.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/LayoutDataClipboardCommand.java
@@ -24,38 +24,38 @@
  * @coverage swt.model.layout
  */
 public final class LayoutDataClipboardCommand extends ComponentClipboardCommand<CompositeInfo> {
-  private static final long serialVersionUID = 0L;
-  private final int m_index;
-  private final PropertiesClipboardCommand m_propertiesCommand;
+	private static final long serialVersionUID = 0L;
+	private final int m_index;
+	private final PropertiesClipboardCommand m_propertiesCommand;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public LayoutDataClipboardCommand(LayoutInfo layout, ControlInfo control) throws Exception {
-    LayoutDataInfo layoutData = LayoutInfo.getLayoutData(control);
-    if (layoutData.getCreationSupport() instanceof IImplicitCreationSupport) {
-      m_index = -1;
-      m_propertiesCommand = null;
-    } else {
-      m_index = layout.getControls().indexOf(control);
-      m_propertiesCommand = new PropertiesClipboardCommand(layoutData);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public LayoutDataClipboardCommand(LayoutInfo layout, ControlInfo control) throws Exception {
+		LayoutDataInfo layoutData = LayoutInfo.getLayoutData(control);
+		if (layoutData.getCreationSupport() instanceof IImplicitCreationSupport) {
+			m_index = -1;
+			m_propertiesCommand = null;
+		} else {
+			m_index = layout.getControls().indexOf(control);
+			m_propertiesCommand = new PropertiesClipboardCommand(layoutData);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Execute
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void execute(CompositeInfo composite) throws Exception {
-    if (m_index >= 0) {
-      ControlInfo control = composite.getLayout().getControls().get(m_index);
-      // apply properties
-      LayoutDataInfo rowData = LayoutInfo.getLayoutData(control);
-      m_propertiesCommand.execute(rowData);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Execute
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void execute(CompositeInfo composite) throws Exception {
+		if (m_index >= 0) {
+			ControlInfo control = composite.getLayout().getControls().get(m_index);
+			// apply properties
+			LayoutDataInfo rowData = LayoutInfo.getLayoutData(control);
+			m_propertiesCommand.execute(rowData);
+		}
+	}
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/LayoutDataInfo.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/LayoutDataInfo.java
index 76a67597c..33b5aeb48 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/LayoutDataInfo.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/LayoutDataInfo.java
@@ -67,331 +67,331 @@
  * @coverage swt.model.layout
  */
 public abstract class LayoutDataInfo extends JavaInfo implements ILayoutDataInfo {
-  final LayoutDataInfo m_this = this;
+	final LayoutDataInfo m_this = this;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public LayoutDataInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-    removeIfCompositeHasNoLayout();
-    contributeLayoutDataProperties_toControl();
-    addMaterializeSupport();
-    turnIntoBlock_whenEnsureVariable();
-    new LayoutDataNameSupport(this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public LayoutDataInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+		removeIfCompositeHasNoLayout();
+		contributeLayoutDataProperties_toControl();
+		addMaterializeSupport();
+		turnIntoBlock_whenEnsureVariable();
+		new LayoutDataNameSupport(this);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Broadcast events
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void removeIfCompositeHasNoLayout() {
-    addBroadcastListener(new ObjectInfoTreeComplete() {
-      @Override
-      public void invoke() throws Exception {
-        removeBroadcastListener(this);
-        // if dangling LayoutData, ignore it
-        if (getParent() == null) {
-          return;
-        }
-        if (!getParent().getChildren().contains(m_this)) {
-          return;
-        }
-        // if no parent with Layout, remove this LayoutData
-        if (!hasCompositeLayout()) {
-          getParent().removeChild(m_this);
-        }
-      }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Broadcast events
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void removeIfCompositeHasNoLayout() {
+		addBroadcastListener(new ObjectInfoTreeComplete() {
+			@Override
+			public void invoke() throws Exception {
+				removeBroadcastListener(this);
+				// if dangling LayoutData, ignore it
+				if (getParent() == null) {
+					return;
+				}
+				if (!getParent().getChildren().contains(m_this)) {
+					return;
+				}
+				// if no parent with Layout, remove this LayoutData
+				if (!hasCompositeLayout()) {
+					getParent().removeChild(m_this);
+				}
+			}
 
-      private boolean hasCompositeLayout() {
-        ObjectInfo composite = getParent().getParent();
-        if (composite != null && wantsLayoutData_forChildChild(composite.getParent())) {
-          return true;
-        }
-        if (composite instanceof CompositeInfo) {
-          List<LayoutInfo> layouts = composite.getChildren(LayoutInfo.class);
-          if (layouts.isEmpty()) {
-            return false;
-          }
-          return isCompatibleWithLayout(layouts.get(0));
-        }
-        return false;
-      }
+			private boolean hasCompositeLayout() {
+				ObjectInfo composite = getParent().getParent();
+				if (composite != null && wantsLayoutData_forChildChild(composite.getParent())) {
+					return true;
+				}
+				if (composite instanceof CompositeInfo) {
+					List<LayoutInfo> layouts = composite.getChildren(LayoutInfo.class);
+					if (layouts.isEmpty()) {
+						return false;
+					}
+					return isCompatibleWithLayout(layouts.get(0));
+				}
+				return false;
+			}
 
-      private boolean wantsLayoutData_forChildChild(ObjectInfo object) {
-        if (object != null) {
-          List<JavaInfo> children = object.getChildren(JavaInfo.class);
-          for (JavaInfo child : children) {
-            if (JavaInfoUtils.hasTrueParameter(child, "layout.managesChildChild")) {
-              return true;
-            }
-          }
-        }
-        return false;
-      }
-    });
-  }
+			private boolean wantsLayoutData_forChildChild(ObjectInfo object) {
+				if (object != null) {
+					List<JavaInfo> children = object.getChildren(JavaInfo.class);
+					for (JavaInfo child : children) {
+						if (JavaInfoUtils.hasTrueParameter(child, "layout.managesChildChild")) {
+							return true;
+						}
+					}
+				}
+				return false;
+			}
+		});
+	}
 
-  /**
-   * @return <code>true</code> if this {@link LayoutDataInfo} with given {@link LayoutInfo}.
-   */
-  protected boolean isCompatibleWithLayout(LayoutInfo layout) {
-    {
-      String compatibleLayout = JavaInfoUtils.getParameter(this, "layoutData.compatibleLayout");
-      if (compatibleLayout != null) {
-        return ReflectionUtils.isSuccessorOf(
-            layout.getDescription().getComponentClass(),
-            compatibleLayout);
-      }
-    }
-    return true;
-  }
+	/**
+	 * @return <code>true</code> if this {@link LayoutDataInfo} with given {@link LayoutInfo}.
+	 */
+	protected boolean isCompatibleWithLayout(LayoutInfo layout) {
+		{
+			String compatibleLayout = JavaInfoUtils.getParameter(this, "layoutData.compatibleLayout");
+			if (compatibleLayout != null) {
+				return ReflectionUtils.isSuccessorOf(
+						layout.getDescription().getComponentClass(),
+						compatibleLayout);
+			}
+		}
+		return true;
+	}
 
-  /**
-   * Contribute "LayoutData" complex property to our {@link ControlInfo}.
-   */
-  private void contributeLayoutDataProperties_toControl() {
-    addBroadcastListener(new JavaInfoAddProperties() {
-      @Override
-      public void invoke(JavaInfo javaInfo, List<Property> properties) throws Exception {
-        if (isActiveForControl(javaInfo)) {
-          addLayoutDataProperties(properties);
-        }
-      }
+	/**
+	 * Contribute "LayoutData" complex property to our {@link ControlInfo}.
+	 */
+	private void contributeLayoutDataProperties_toControl() {
+		addBroadcastListener(new JavaInfoAddProperties() {
+			@Override
+			public void invoke(JavaInfo javaInfo, List<Property> properties) throws Exception {
+				if (isActiveForControl(javaInfo)) {
+					addLayoutDataProperties(properties);
+				}
+			}
 
-      private boolean isActiveForControl(JavaInfo control) {
-        return control.getChildren().contains(m_this);
-      }
-    });
-  }
+			private boolean isActiveForControl(JavaInfo control) {
+				return control.getChildren().contains(m_this);
+			}
+		});
+	}
 
-  /**
-   * When we set value of property for virtual {@link LayoutDataInfo}, often we want to set this
-   * value in constructor. But constructor does not exists yet, because our {@link LayoutDataInfo}
-   * is virtual. So virtual {@link CreationSupport} adds no any new {@link ExpressionAccessor}. This
-   * method adds the listener which forces the {@link LayoutDataInfo} materialization, so
-   * {@link VariableSupport} has a chance to replace the {@link CreationSupport} instance for
-   * underlying {@link JavaInfo}.
-   */
-  private void addMaterializeSupport() {
-    addBroadcastListener(new JavaEventListener() {
-      @Override
-      public void setPropertyExpression(GenericPropertyImpl property,
-          String[] source,
-          Object[] value,
-          boolean[] shouldSet) throws Exception {
-        if (property.getJavaInfo() == m_this) {
-          materialize();
-        }
-      }
-    });
-  }
+	/**
+	 * When we set value of property for virtual {@link LayoutDataInfo}, often we want to set this
+	 * value in constructor. But constructor does not exists yet, because our {@link LayoutDataInfo}
+	 * is virtual. So virtual {@link CreationSupport} adds no any new {@link ExpressionAccessor}. This
+	 * method adds the listener which forces the {@link LayoutDataInfo} materialization, so
+	 * {@link VariableSupport} has a chance to replace the {@link CreationSupport} instance for
+	 * underlying {@link JavaInfo}.
+	 */
+	private void addMaterializeSupport() {
+		addBroadcastListener(new JavaEventListener() {
+			@Override
+			public void setPropertyExpression(GenericPropertyImpl property,
+					String[] source,
+					Object[] value,
+					boolean[] shouldSet) throws Exception {
+				if (property.getJavaInfo() == m_this) {
+					materialize();
+				}
+			}
+		});
+	}
 
-  protected final void materialize() throws Exception {
-    if (isVirtual()) {
-      ((VirtualLayoutDataVariableSupport) getVariableSupport()).materialize();
-    }
-  }
+	protected final void materialize() throws Exception {
+		if (isVirtual()) {
+			((VirtualLayoutDataVariableSupport) getVariableSupport()).materialize();
+		}
+	}
 
-  /**
-   * @return <code>true</code> if this {@link LayoutDataInfo} is virtual.
-   */
-  private boolean isVirtual() {
-    return getVariableSupport() instanceof VirtualLayoutDataVariableSupport;
-  }
+	/**
+	 * @return <code>true</code> if this {@link LayoutDataInfo} is virtual.
+	 */
+	private boolean isVirtual() {
+		return getVariableSupport() instanceof VirtualLayoutDataVariableSupport;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Performs following optimizations:
-   * <ul>
-   * <li>When <code>LayoutData</code> gets converted from simple
-   * <code>setLayoutData(new SomeData())</code> into real variable, wrap its {@link Statement}s with
-   * {@link Block}.</li>
-   * <li>When <code>LayoutData</code> has {@link LocalUniqueVariableSupport}, but it is used just to
-   * call <code>setLayoutData()</code>, then variable may be inlined, and enclosing {@link Block}
-   * probably too.</li>
-   * <li>When <code>LayoutData</code> has all default values, then we can delete it at all.</li>
-   * </ul>
-   */
-  private void turnIntoBlock_whenEnsureVariable() {
-    // empty -> Block
-    addBroadcastListener(new JavaEventListener() {
-      @Override
-      public void variable_emptyMaterializeBefore(EmptyVariableSupport variableSupport)
-          throws Exception {
-        if (variableSupport.getJavaInfo() == m_this && isBlockMode()) {
-          ASTNode creationNode = variableSupport.getInitializer();
-          Statement creationStatement = AstNodeUtils.getEnclosingStatement(creationNode);
-          getEditor().encloseInBlock(creationStatement);
-        }
-      }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Performs following optimizations:
+	 * <ul>
+	 * <li>When <code>LayoutData</code> gets converted from simple
+	 * <code>setLayoutData(new SomeData())</code> into real variable, wrap its {@link Statement}s with
+	 * {@link Block}.</li>
+	 * <li>When <code>LayoutData</code> has {@link LocalUniqueVariableSupport}, but it is used just to
+	 * call <code>setLayoutData()</code>, then variable may be inlined, and enclosing {@link Block}
+	 * probably too.</li>
+	 * <li>When <code>LayoutData</code> has all default values, then we can delete it at all.</li>
+	 * </ul>
+	 */
+	private void turnIntoBlock_whenEnsureVariable() {
+		// empty -> Block
+		addBroadcastListener(new JavaEventListener() {
+			@Override
+			public void variable_emptyMaterializeBefore(EmptyVariableSupport variableSupport)
+					throws Exception {
+				if (variableSupport.getJavaInfo() == m_this && isBlockMode()) {
+					ASTNode creationNode = variableSupport.getInitializer();
+					Statement creationStatement = AstNodeUtils.getEnclosingStatement(creationNode);
+					getEditor().encloseInBlock(creationStatement);
+				}
+			}
 
-      private boolean isBlockMode() {
-        GenerationSettings settings = getDescription().getToolkit().getGenerationSettings();
-        return settings.getStatement() == BlockStatementGeneratorDescription.INSTANCE;
-      }
-    });
-    // no invocations/fields -> inline Block
-    addBroadcastListener(new ObjectEventListener() {
-      @Override
-      public void endEdit_aboutToRefresh() throws Exception {
-        if (getVariableSupport() instanceof LocalUniqueVariableSupport) {
-          LocalUniqueVariableSupport variableSupport =
-              (LocalUniqueVariableSupport) getVariableSupport();
-          if (variableSupport.canInline()) {
-            variableSupport.inline();
-            inlineBlockIfSingleStatement();
-          }
-        }
-      }
+			private boolean isBlockMode() {
+				GenerationSettings settings = getDescription().getToolkit().getGenerationSettings();
+				return settings.getStatement() == BlockStatementGeneratorDescription.INSTANCE;
+			}
+		});
+		// no invocations/fields -> inline Block
+		addBroadcastListener(new ObjectEventListener() {
+			@Override
+			public void endEdit_aboutToRefresh() throws Exception {
+				if (getVariableSupport() instanceof LocalUniqueVariableSupport) {
+					LocalUniqueVariableSupport variableSupport =
+							(LocalUniqueVariableSupport) getVariableSupport();
+					if (variableSupport.canInline()) {
+						variableSupport.inline();
+						inlineBlockIfSingleStatement();
+					}
+				}
+			}
 
-      private void inlineBlockIfSingleStatement() throws Exception {
-        ASTNode node = ((EmptyVariableSupport) getVariableSupport()).getInitializer();
-        Statement statement = AstNodeUtils.getEnclosingStatement(node);
-        if (statement != null) {
-          Block block = (Block) statement.getParent();
-          if (block.statements().size() == 1) {
-            getEditor().inlineBlock(block);
-          }
-        }
-      }
-    });
-    // is default -> delete
-    addBroadcastListener(new ObjectEventListener() {
-      @Override
-      public void endEdit_aboutToRefresh() throws Exception {
-        if (!isDeleted()
-            && getCreationSupport() instanceof ConstructorCreationSupport
-            && getMethodInvocations().isEmpty()
-            && getFieldAssignments().isEmpty()) {
-          ConstructorCreationSupport creationSupport =
-              (ConstructorCreationSupport) getCreationSupport();
-          ClassInstanceCreation creation = creationSupport.getCreation();
-          String signature = creationSupport.getDescription().getSignature();
-          // prepare arguments
-          List<Expression> arguments = DomGenerics.arguments(creation);
-          if (!AstNodeUtils.areLiterals(arguments)) {
-            return;
-          }
-          // evaluate arguments
-          List<Object> argumentValues;
-          {
-            EditorState state = JavaInfoUtils.getState(m_this);
-            EvaluationContext context =
-                new EvaluationContext(state.getEditorLoader(), state.getFlowDescription());
-            argumentValues = Lists.newArrayList();
-            for (Expression argument : arguments) {
-              Object value = AstEvaluationEngine.evaluate(context, argument);
-              JavaInfoEvaluationHelper.setValue(argument, value);
-              argumentValues.add(value);
-            }
-          }
-          // delete, if default constructor arguments
-          if (isDefault(signature, argumentValues)) {
-            delete();
-          }
-        }
-      }
+			private void inlineBlockIfSingleStatement() throws Exception {
+				ASTNode node = ((EmptyVariableSupport) getVariableSupport()).getInitializer();
+				Statement statement = AstNodeUtils.getEnclosingStatement(node);
+				if (statement != null) {
+					Block block = (Block) statement.getParent();
+					if (block.statements().size() == 1) {
+						getEditor().inlineBlock(block);
+					}
+				}
+			}
+		});
+		// is default -> delete
+		addBroadcastListener(new ObjectEventListener() {
+			@Override
+			public void endEdit_aboutToRefresh() throws Exception {
+				if (!isDeleted()
+						&& getCreationSupport() instanceof ConstructorCreationSupport
+						&& getMethodInvocations().isEmpty()
+						&& getFieldAssignments().isEmpty()) {
+					ConstructorCreationSupport creationSupport =
+							(ConstructorCreationSupport) getCreationSupport();
+					ClassInstanceCreation creation = creationSupport.getCreation();
+					String signature = creationSupport.getDescription().getSignature();
+					// prepare arguments
+					List<Expression> arguments = DomGenerics.arguments(creation);
+					if (!AstNodeUtils.areLiterals(arguments)) {
+						return;
+					}
+					// evaluate arguments
+					List<Object> argumentValues;
+					{
+						EditorState state = JavaInfoUtils.getState(m_this);
+						EvaluationContext context =
+								new EvaluationContext(state.getEditorLoader(), state.getFlowDescription());
+						argumentValues = Lists.newArrayList();
+						for (Expression argument : arguments) {
+							Object value = AstEvaluationEngine.evaluate(context, argument);
+							JavaInfoEvaluationHelper.setValue(argument, value);
+							argumentValues.add(value);
+						}
+					}
+					// delete, if default constructor arguments
+					if (isDefault(signature, argumentValues)) {
+						delete();
+					}
+				}
+			}
 
-      /**
-       * @return <code>true</code> if existing <code>isDefault</code> script says that object of
-       *         this {@link LayoutDataInfo} is in default state.
-       */
-      private boolean isDefault(String signature, List<Object> args) throws Exception {
-        String script = JavaInfoUtils.getParameter(m_this, "isDefault");
-        if (script != null) {
-          Map<String, Object> variables = ImmutableMap.of("signature", signature, "args", args);
-          return (Boolean) ScriptUtils.evaluate(
-              JavaInfoUtils.getClassLoader(m_this),
-              script,
-              variables);
-        }
-        return false;
-      }
-    });
-  }
+			/**
+			 * @return <code>true</code> if existing <code>isDefault</code> script says that object of
+			 *         this {@link LayoutDataInfo} is in default state.
+			 */
+			private boolean isDefault(String signature, List<Object> args) throws Exception {
+				String script = JavaInfoUtils.getParameter(m_this, "isDefault");
+				if (script != null) {
+					Map<String, Object> variables = ImmutableMap.of("signature", signature, "args", args);
+					return (Boolean) ScriptUtils.evaluate(
+							JavaInfoUtils.getClassLoader(m_this),
+							script,
+							variables);
+				}
+				return false;
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // "LayoutData" property
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private ComplexProperty m_complexProperty;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// "LayoutData" property
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private ComplexProperty m_complexProperty;
 
-  /**
-   * Adds properties of this {@link LayoutDataInfo} to the properties of its {@link ControlInfo}.
-   */
-  private void addLayoutDataProperties(List<Property> properties) throws Exception {
-    // prepare complex property
-    if (m_complexProperty == null) {
-      String text;
-      {
-        Class<?> componentClass = getDescription().getComponentClass();
-        text = "(" + componentClass.getName() + ")";
-      }
-      // prepare ComplexProperty
-      m_complexProperty = new ComplexProperty("LayoutData", text) {
-        @Override
-        public boolean isModified() throws Exception {
-          return true;
-        }
+	/**
+	 * Adds properties of this {@link LayoutDataInfo} to the properties of its {@link ControlInfo}.
+	 */
+	private void addLayoutDataProperties(List<Property> properties) throws Exception {
+		// prepare complex property
+		if (m_complexProperty == null) {
+			String text;
+			{
+				Class<?> componentClass = getDescription().getComponentClass();
+				text = "(" + componentClass.getName() + ")";
+			}
+			// prepare ComplexProperty
+			m_complexProperty = new ComplexProperty("LayoutData", text) {
+				@Override
+				public boolean isModified() throws Exception {
+					return true;
+				}
 
-        @Override
-        public void setValue(Object value) throws Exception {
-          if (value == UNKNOWN_VALUE) {
-            delete();
-          }
-        }
-      };
-      m_complexProperty.setCategory(PropertyCategory.system(5));
-      // set sub-properties
-      m_complexProperty.setProperties(getFilteredProperties());
-    }
-    // add property
-    properties.add(m_complexProperty);
-  }
+				@Override
+				public void setValue(Object value) throws Exception {
+					if (value == UNKNOWN_VALUE) {
+						delete();
+					}
+				}
+			};
+			m_complexProperty.setCategory(PropertyCategory.system(5));
+			// set sub-properties
+			m_complexProperty.setProperties(getFilteredProperties());
+		}
+		// add property
+		properties.add(m_complexProperty);
+	}
 
-  /**
-   * @return the {@link Property}'s to show in complex property of {@link LayoutDataInfo} parent.
-   */
-  private Property[] getFilteredProperties() throws Exception {
-    Property[] properties = getProperties();
-    // For some layout data it needs to exclude some properties, such as "Class" or "Constructor".
-    // This can be done using "layoutData.exclude-properties" parameter of class description.
-    String propertiesExcludeString =
-        JavaInfoUtils.getParameter(this, "layoutData.exclude-properties");
-    if (propertiesExcludeString != null) {
-      List<Property> filteredProperties = Lists.newArrayList();
-      String[] propertiesExclude = StringUtils.split(propertiesExcludeString);
-      props : for (Property property : properties) {
-        for (String propertyExclude : propertiesExclude) {
-          if (property.getTitle().equals(propertyExclude)) {
-            continue props;
-          }
-        }
-        filteredProperties.add(property);
-      }
-      properties = filteredProperties.toArray(new Property[filteredProperties.size()]);
-    }
-    return properties;
-  }
+	/**
+	 * @return the {@link Property}'s to show in complex property of {@link LayoutDataInfo} parent.
+	 */
+	private Property[] getFilteredProperties() throws Exception {
+		Property[] properties = getProperties();
+		// For some layout data it needs to exclude some properties, such as "Class" or "Constructor".
+		// This can be done using "layoutData.exclude-properties" parameter of class description.
+		String propertiesExcludeString =
+				JavaInfoUtils.getParameter(this, "layoutData.exclude-properties");
+		if (propertiesExcludeString != null) {
+			List<Property> filteredProperties = Lists.newArrayList();
+			String[] propertiesExclude = StringUtils.split(propertiesExcludeString);
+			props : for (Property property : properties) {
+				for (String propertyExclude : propertiesExclude) {
+					if (property.getTitle().equals(propertyExclude)) {
+						continue props;
+					}
+				}
+				filteredProperties.add(property);
+			}
+			properties = filteredProperties.toArray(new Property[filteredProperties.size()]);
+		}
+		return properties;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final IObjectPresentation getPresentation() {
-    return new LayoutDataPresentation(this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final IObjectPresentation getPresentation() {
+		return new LayoutDataPresentation(this);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/LayoutDataNameSupport.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/LayoutDataNameSupport.java
index c024fb88b..1743016db 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/LayoutDataNameSupport.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/LayoutDataNameSupport.java
@@ -27,43 +27,43 @@
  * @coverage swt.model.layout
  */
 public final class LayoutDataNameSupport
-    extends
-      org.eclipse.wb.internal.core.model.layout.LayoutDataNameSupport<LayoutDataInfo> {
-  public final static String[] TEMPLATES = new String[]{
-      "${dataAcronym}_${controlName}",
-      "${dataAcronym}${controlName-cap}",
-      "${controlName}${dataClassName}",
-      "${defaultName}"};
+extends
+org.eclipse.wb.internal.core.model.layout.LayoutDataNameSupport<LayoutDataInfo> {
+	public final static String[] TEMPLATES = new String[]{
+			"${dataAcronym}_${controlName}",
+			"${dataAcronym}${controlName-cap}",
+			"${controlName}${dataClassName}",
+	"${defaultName}"};
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public LayoutDataNameSupport(LayoutDataInfo layoutData) {
-    super(layoutData);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public LayoutDataNameSupport(LayoutDataInfo layoutData) {
+		super(layoutData);
+	}
 
-  @Override
-  protected String getTemplate() {
-    IPreferenceStore preferences = m_childInfo.getDescription().getToolkit().getPreferences();
-    String template = preferences.getString(IPreferenceConstants.P_LAYOUT_DATA_NAME_TEMPLATE);
-    if (!isValidTemplate(TEMPLATES, template)) {
-      template = getTemplateForDefault();
-    }
-    return template;
-  }
+	@Override
+	protected String getTemplate() {
+		IPreferenceStore preferences = m_childInfo.getDescription().getToolkit().getPreferences();
+		String template = preferences.getString(IPreferenceConstants.P_LAYOUT_DATA_NAME_TEMPLATE);
+		if (!isValidTemplate(TEMPLATES, template)) {
+			template = getTemplateForDefault();
+		}
+		return template;
+	}
 
-  @Override
-  protected Map<String, String> getValueMap() {
-    // prepare variables
-    Map<String, String> valueMap = Maps.newTreeMap();
-    {
-      valueMap.put("dataAcronym", getAcronym());
-      valueMap.put("dataClassName", getClassName());
-      valueMap.put("controlName", getParentName());
-      valueMap.put("controlName-cap", getParentNameCap());
-    }
-    return valueMap;
-  }
+	@Override
+	protected Map<String, String> getValueMap() {
+		// prepare variables
+		Map<String, String> valueMap = Maps.newTreeMap();
+		{
+			valueMap.put("dataAcronym", getAcronym());
+			valueMap.put("dataClassName", getClassName());
+			valueMap.put("controlName", getParentName());
+			valueMap.put("controlName-cap", getParentNameCap());
+		}
+		return valueMap;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/LayoutDataPresentation.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/LayoutDataPresentation.java
index 5ca011cb3..868df215f 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/LayoutDataPresentation.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/LayoutDataPresentation.java
@@ -20,22 +20,22 @@
  * @coverage swt.model.presentation
  */
 public final class LayoutDataPresentation extends DefaultJavaInfoPresentation {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public LayoutDataPresentation(LayoutDataInfo layoutData) {
-    super(layoutData);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public LayoutDataPresentation(LayoutDataInfo layoutData) {
+		super(layoutData);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IObjectPresentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean isVisible() throws Exception {
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IObjectPresentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean isVisible() throws Exception {
+		return false;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/LayoutInfo.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/LayoutInfo.java
index a4745474d..dfc8a696e 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/LayoutInfo.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/LayoutInfo.java
@@ -66,627 +66,627 @@
  * @coverage swt.model.layout
  */
 public class LayoutInfo extends JavaInfo implements ILayoutInfo<ControlInfo> {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public LayoutInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-    addBroadcastListeners();
-    new LayoutNameSupport(this);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Broadcast events
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds listeners to the {@link BroadcastSupport}.
-   */
-  private void addBroadcastListeners() {
-    addBroadcastListener(new ObjectInfoTreeComplete() {
-      @Override
-      public void invoke() throws Exception {
-        CompositeInfo composite = getComposite();
-        // validate LayoutData
-        if (isActiveOnComposite(composite)) {
-          validateCorrespondence_Layout_LayoutData();
-        }
-        // create virtual layout data
-        if (isActiveOnComposite(composite)) {
-          for (ControlInfo control : composite.getChildrenControls()) {
-            ensureLayoutData(control);
-          }
-        }
-      }
-    });
-    addBroadcastListener(new ObjectInfoChildAddBefore() {
-      @Override
-      public void invoke(ObjectInfo parent, ObjectInfo child, ObjectInfo[] nextChild)
-          throws Exception {
-        // add new LayoutData - remove existing one
-        if (parent instanceof ControlInfo
-            && child instanceof LayoutDataInfo
-            && isActiveOnComposite(parent.getParent())) {
-          ControlInfo control = (ControlInfo) parent;
-          LayoutDataInfo existingLayoutData = getLayoutData(control);
-          if (existingLayoutData != null) {
-            control.removeChild(existingLayoutData);
-          }
-        }
-      }
-    });
-    addBroadcastListener(new ObjectInfoChildAddAfter() {
-      @Override
-      public void invoke(ObjectInfo parent, ObjectInfo child) throws Exception {
-        CompositeInfo composite = getComposite();
-        // add this layout
-        if (child == LayoutInfo.this) {
-          // implicit layouts are bound to its parent
-          if (getCreationSupport() instanceof IImplicitCreationSupport) {
-            targetBroadcastListener(parent);
-          }
-          // create virtual LayoutData's
-          for (ControlInfo control : composite.getChildrenControls()) {
-            ensureLayoutData(control);
-          }
-        }
-      }
-    });
-    addBroadcastListener(new ObjectInfoDelete() {
-      @Override
-      public void before(ObjectInfo parent, ObjectInfo child) throws Exception {
-        // delete this layout
-        if (child == LayoutInfo.this) {
-          onDelete();
-        }
-        // delete ControlInfo from this composite
-        if (isActiveOnComposite(parent) && child instanceof ControlInfo) {
-          onControlRemoveBefore((ControlInfo) child);
-        }
-      }
-
-      @Override
-      public void after(ObjectInfo parent, ObjectInfo child) throws Exception {
-        // delete layout data - create virtual
-        if (parent instanceof ControlInfo
-            && child instanceof LayoutDataInfo
-            && shouldCreateLayoutData((ControlInfo) parent)
-            && isActiveOnComposite(parent.getParent())) {
-          ControlInfo control = (ControlInfo) parent;
-          ensureLayoutData(control);
-        }
-        // delete ControlInfo from this composite
-        if (isActiveOnComposite(parent) && child instanceof ControlInfo) {
-          ControlInfo control = (ControlInfo) child;
-          if (control.isDeleted()) {
-            onControlRemoveAfter(control);
-          }
-        }
-      }
-    });
-    addBroadcastListener(new JavaEventListener() {
-      @Override
-      public void addAfter(JavaInfo parent, JavaInfo child) throws Exception {
-        // new ControlInfo added, ensure LayoutDataInfo
-        if (isActiveOnComposite(parent) && child instanceof ControlInfo) {
-          ensureLayoutData((ControlInfo) child);
-        }
-      }
-
-      @Override
-      public void moveBefore(JavaInfo child, ObjectInfo oldParent, JavaInfo newParent)
-          throws Exception {
-        // move ControlInfo FROM this composite
-        if (isActiveOnComposite(oldParent)
-            && child instanceof ControlInfo
-            && newParent != oldParent) {
-          ControlInfo control = (ControlInfo) child;
-          onControlRemoveBefore(control);
-          deleteLayoutData(control);
-        }
-      }
-
-      @Override
-      public void moveAfter(JavaInfo child, ObjectInfo oldParent, JavaInfo newParent)
-          throws Exception {
-        // move ControlInfo FROM this composite
-        if (isActiveOnComposite(oldParent)
-            && child instanceof ControlInfo
-            && newParent != oldParent) {
-          onControlRemoveAfter((ControlInfo) child);
-        }
-        // move ControlInfo TO this composite
-        if (isActiveOnComposite(newParent)
-            && child instanceof ControlInfo
-            && newParent != oldParent) {
-          ensureLayoutData((ControlInfo) child);
-        }
-      }
-
-      @Override
-      public void clipboardCopy(JavaInfo javaInfo, List<ClipboardCommand> commands)
-          throws Exception {
-        if (isActiveOnComposite(javaInfo)) {
-          clipboardCopy_addCompositeCommands(commands);
-        }
-      }
-    });
-    addBroadcastListener(new JavaInfoAddProperties() {
-      @Override
-      public void invoke(JavaInfo javaInfo, List<Property> properties) throws Exception {
-        // add layout properties to composite properties
-        if (isActiveOnComposite(javaInfo)) {
-          addLayoutProperties(properties);
-        }
-      }
-    });
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // LayoutData compatibility validation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Ensures that {@link Control}'s have <code>LayoutData</code> that corresponds to {@link Layout}.
-   */
-  private void validateCorrespondence_Layout_LayoutData() throws Exception {
-    CompositeInfo composite = getComposite();
-    Object[] controls = ContainerSupport.getChildren(composite.getObject());
-    if (hasLayoutData()) {
-      Class<?> expectedLayoutDataClass = getLayoutDataClass();
-      for (Object control : controls) {
-        Object layoutData = ControlSupport.getLayoutData(control);
-        if (!ReflectionUtils.isAssignableFrom(expectedLayoutDataClass, layoutData)) {
-          throw new DesignerException(IExceptionConstants.INCOMPATIBLE_LAYOUT_DATA,
-              getShortClassName(layoutData),
-              getShortComponentName(composite.getChildByObject(control)),
-              getShortComponentName(composite),
-              getShortClassName(getDescription().getComponentClass()),
-              getShortClassName(expectedLayoutDataClass));
-        }
-      }
-    }
-  }
-
-  private static String getShortClassName(Object o) {
-    Class<?> clazz = o.getClass();
-    return getShortClassName(clazz);
-  }
-
-  private static String getShortClassName(Class<?> clazz) {
-    if (clazz == null) {
-      return "<null>";
-    }
-    return CodeUtils.getShortClass(clazz.getName());
-  }
-
-  private static String getShortComponentName(JavaInfo javaInfo) {
-    if (javaInfo == null) {
-      return "<null>";
-    }
-    return javaInfo.getVariableSupport().getComponentName();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final IObjectPresentation getPresentation() {
-    return new LayoutPresentation(this);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link CompositeInfo} that contains this {@link LayoutInfo}.
-   */
-  @Override
-  public final CompositeInfo getComposite() {
-    return (CompositeInfo) getParent();
-  }
-
-  @Override
-  public final boolean isActive() {
-    CompositeInfo composite = getComposite();
-    return isActiveOnComposite(composite);
-  }
-
-  /**
-   * @return <code>true</code> if this {@link LayoutInfo} is active on its {@link CompositeInfo}.
-   */
-  protected final boolean isActiveOnComposite(ObjectInfo composite) {
-    return composite != null && composite.getChildren().contains(this);
-  }
-
-  @Override
-  public final List<ControlInfo> getControls() {
-    List<ControlInfo> controls = Lists.newArrayList();
-    CompositeInfo composite = getComposite();
-    if (isActiveOnComposite(composite)) {
-      for (ControlInfo control : composite.getChildrenControls()) {
-        if (isManagedObject(control)) {
-          controls.add(control);
-        }
-      }
-    }
-    return controls;
-  }
-
-  @Override
-  public boolean isManagedObject(Object object) {
-    if (object instanceof ControlInfo
-        && isActive()
-        && getComposite().getChildren().contains(object)) {
-      ControlInfo control = (ControlInfo) object;
-      if (JavaInfoUtils.isIndirectlyExposed(control)) {
-        return false;
-      }
-      return true;
-    }
-    return false;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // "Layout" property
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private ComplexProperty m_layoutComplexProperty;
-
-  /**
-   * Adds properties of this {@link LayoutInfo} to the properties of its {@link CompositeInfo}.
-   */
-  private void addLayoutProperties(List<Property> properties) throws Exception {
-    // prepare layout complex property
-    {
-      Property[] layoutProperties = getProperties();
-      if (m_layoutComplexProperty == null) {
-        String text;
-        {
-          Class<?> componentClass = getDescription().getComponentClass();
-          if (componentClass != null) {
-            text = "(" + componentClass.getName() + ")";
-          } else {
-            text = "(absolute)";
-          }
-        }
-        //
-        m_layoutComplexProperty = new ComplexProperty("Layout", text) {
-          @Override
-          public boolean isModified() throws Exception {
-            return true;
-          }
-
-          @Override
-          public void setValue(Object value) throws Exception {
-            if (value == UNKNOWN_VALUE) {
-              delete();
-            }
-          }
-        };
-        m_layoutComplexProperty.setCategory(PropertyCategory.system(5));
-        m_layoutComplexProperty.setEditorPresentation(new ButtonPropertyEditorPresentation() {
-          @Override
-          protected Image getImage() {
-            return DesignerPlugin.getImage("properties/down.png");
-          }
-
-          @Override
-          protected void onClick(PropertyTable propertyTable, Property property) throws Exception {
-            MenuManager manager = new MenuManager();
-            getComposite().fillLayoutsManager(manager);
-            Menu menu = manager.createContextMenu(propertyTable);
-            UiUtils.showAndDisposeOnHide(menu);
-          }
-        });
-      }
-      m_layoutComplexProperty.setProperties(layoutProperties);
-    }
-    // add property
-    properties.add(m_layoutComplexProperty);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Layout notifications
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * This method is invoked when this {@link LayoutInfo} is set on its {@link CompositeInfo}.
-   */
-  public void onSet() throws Exception {
-  }
-
-  /**
-   * This method is invoked when this {@link LayoutInfo} is deleted from its {@link CompositeInfo}.
-   */
-  protected void onDelete() throws Exception {
-    for (ControlInfo control : getComposite().getChildrenControls()) {
-      deleteLayoutData(control);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Control notifications
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Notification that given {@link ControlInfo} will be removed from composite.
-   */
-  protected void onControlRemoveBefore(ControlInfo control) throws Exception {
-  }
-
-  /**
-   * Notification that given {@link ControlInfo} was removed from composite.
-   */
-  protected void onControlRemoveAfter(ControlInfo control) throws Exception {
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // LayoutData management
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static String KEY_EXPOSED_HAS_DATA = "exposed control: already has LayoutData";
-  private static String KEY_EXPOSED_DATA = "exposed control: its LayoutData";
-  private static String KEY_DONT_CREATE_VIRTUAL_DATA =
-      "don't create virtual LayoutData for this ControlInfo";
-
-  /**
-   * We may be {@link ControlInfo} that virtual {@link LayoutDataInfo} should not be created for it,
-   * when we intentionally delete {@link LayoutDataInfo}, for example during process of moving this
-   * {@link ControlInfo} from this {@link LayoutInfo} or deleting this {@link LayoutInfo}.
-   *
-   * @return <code>true</code> if for given {@link ControlInfo} we should create
-   *         {@link LayoutDataInfo}.
-   */
-  private boolean shouldCreateLayoutData(ControlInfo control) {
-    return control.getArbitraryValue(KEY_DONT_CREATE_VIRTUAL_DATA) == null;
-  }
-
-  /**
-   * Delete {@link LayoutDataInfo} associated with given {@link ControlInfo}.
-   * <p>
-   * Note that this is different than {@link LayoutDataInfo#delete()} because we don't remove
-   * implicit/virtual {@link LayoutDataInfo} from list of children in
-   * {@link CreationSupport#delete()}. {@link CreationSupport#delete()} has to remove only
-   * {@link ASTNode}'s related with {@link LayoutDataInfo}. So, we need separate operation to remove
-   * {@link LayoutDataInfo} from list of children.
-   */
-  protected void deleteLayoutData(ControlInfo control) throws Exception {
-    control.putArbitraryValue(KEY_DONT_CREATE_VIRTUAL_DATA, Boolean.TRUE);
-    try {
-      LayoutDataInfo layoutData = getLayoutData(control);
-      if (layoutData != null) {
-        storeLayoutData(control, layoutData);
-        layoutData.delete();
-        // if implicit/virtual, so still alive, force remove from children
-        if (!layoutData.isDeleted()) {
-          control.removeChild(layoutData);
-        }
-      }
-    } finally {
-      control.removeArbitraryValue(KEY_DONT_CREATE_VIRTUAL_DATA);
-    }
-  }
-
-  /**
-   * @return {@link LayoutDataInfo} associated with given {@link ControlInfo}, or <code>null</code>
-   *         if no {@link LayoutDataInfo} expected for parent {@link LayoutInfo}.
-   */
-  public static LayoutDataInfo getLayoutData(ControlInfo control) {
-    // select only layout data
-    List<LayoutDataInfo> objects = Lists.newArrayList();
-    for (ObjectInfo object : control.getChildren()) {
-      if (object instanceof LayoutDataInfo) {
-        objects.add((LayoutDataInfo) object);
-      }
-    }
-    // check for no layout data
-    if (objects.isEmpty()) {
-      return null;
-    }
-    // only one layout data can be set
-    Assert.isTrue(objects.size() == 1);
-    return objects.get(0);
-  }
-
-  @Override
-  public ILayoutDataInfo getLayoutData2(IControlInfo control) {
-    return getLayoutData((ControlInfo) control);
-  }
-
-  /**
-   * Ensure that if {@link LayoutDataInfo} should exist for given component, there is "real"
-   * {@link LayoutDataInfo}, or create "virtual"/"implicit" {@link LayoutDataInfo}.
-   */
-  private void ensureLayoutData(ControlInfo control) throws Exception {
-    if (JavaInfoUtils.isIndirectlyExposed(control)) {
-      return;
-    }
-    if (hasLayoutData()) {
-      LayoutDataInfo layoutData = getLayoutData(control);
-      if (layoutData != null) {
-        return;
-      }
-      // create layout data
-      if (control.getCreationSupport() instanceof IImplicitCreationSupport) {
-        // prepare layout data, ask only first time, during initialize()
-        Object layoutDataObject;
-        if (control.getArbitraryValue(KEY_EXPOSED_HAS_DATA) != null) {
-          layoutDataObject = control.getArbitraryValue(KEY_EXPOSED_DATA);
-        } else {
-          layoutDataObject = ControlSupport.getLayoutData(control.getObject());
-          control.putArbitraryValue(KEY_EXPOSED_HAS_DATA, Boolean.TRUE);
-          control.putArbitraryValue(KEY_EXPOSED_DATA, layoutDataObject);
-        }
-        // if no layout data, then virtual
-        if (layoutDataObject == null) {
-          createVirtualLayoutData(control);
-        } else {
-          createImplicitLayoutData(control);
-        }
-      } else {
-        createVirtualLayoutData(control);
-      }
-    }
-  }
-
-  /**
-   * Creates implicit {@link LayoutDataInfo} for given {@link ControlInfo}.
-   * <p>
-   * "Implicit" {@link LayoutDataInfo} is wrapper for "layout data" object that exists for
-   * "implicit" {@link ControlInfo}, for example when exposed {@link Control} has already
-   * "layout data" set during creation of exposing container.
-   */
-  private void createImplicitLayoutData(ControlInfo control) throws Exception {
-    // create model
-    JavaInfo layoutData;
-    {
-      CreationSupport creationSupport = new ImplicitLayoutDataCreationSupport(control);
-      layoutData = JavaInfoUtils.createJavaInfo(getEditor(), getLayoutDataClass(), creationSupport);
-    }
-    // configure
-    layoutData.setVariableSupport(new ImplicitLayoutDataVariableSupport(layoutData));
-    layoutData.setAssociation(new ImplicitObjectAssociation(control));
-    // add to control
-    control.addChild(layoutData);
-  }
-
-  /**
-   * Creates virtual {@link LayoutDataInfo} for given {@link ControlInfo}.
-   * <p>
-   * "Virtual" {@link LayoutDataInfo} is placeholder for "layout data" when "layout data" should
-   * exist, but does not exist yet in source code. Most layout managers in this case use
-   * "layout data" with some default values. So, we show these values in properties and allow to
-   * change them, at this moment we "materialize" {@link LayoutDataInfo} in source code.
-   */
-  private void createVirtualLayoutData(ControlInfo control) throws Exception {
-    Object dataObject = getDefaultVirtualDataObject();
-    // create model
-    JavaInfo layoutData;
-    {
-      CreationSupport creationSupport = new VirtualLayoutDataCreationSupport(control, dataObject);
-      layoutData = JavaInfoUtils.createJavaInfo(getEditor(), getLayoutDataClass(), creationSupport);
-    }
-    // configure
-    layoutData.setVariableSupport(new VirtualLayoutDataVariableSupport(layoutData));
-    layoutData.setAssociation(new EmptyAssociation());
-    // add to control
-    control.addChild(layoutData);
-  }
-
-  /**
-   * @return default object used for "virtual" {@link LayoutDataInfo}.
-   */
-  protected Object getDefaultVirtualDataObject() throws Exception {
-    throw new NotImplementedException(getClass());
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Virtual Layout Data Support
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final String KEY_LAYOUT_DATA_HAS = "layout-data.has";
-  private static final String KEY_LAYOUT_DATA_CLASS = "layout-data.class";
-  private Class<?> m_layoutDataClass;
-
-  /**
-   * @return <code>true</code> if this layout has layout data, for user.
-   */
-  private boolean hasLayoutData() {
-    return JavaInfoUtils.hasTrueParameter(this, KEY_LAYOUT_DATA_HAS);
-  }
-
-  /**
-   * @return {@link Class} of layout data objects.
-   */
-  private Class<?> getLayoutDataClass() throws Exception {
-    if (m_layoutDataClass == null) {
-      // extract class name
-      String layoutDataClassName = JavaInfoUtils.getParameter(this, KEY_LAYOUT_DATA_CLASS);
-      Assert.isNotNull(layoutDataClassName);
-      Assert.isTrue(layoutDataClassName.length() != 0);
-      // load class
-      m_layoutDataClass = JavaInfoUtils.getClassLoader(this).loadClass(layoutDataClassName);
-    }
-    return m_layoutDataClass;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Add {@link ControlInfo} to host {@link CompositeInfo}.
-   */
-  public final void command_CREATE(ControlInfo control, ControlInfo nextControl) throws Exception {
-    startEdit();
-    try {
-      JavaInfoUtils.add(control, null, getComposite(), nextControl);
-    } finally {
-      endEdit();
-    }
-  }
-
-  /**
-   * Moves {@link ControlInfo} to host {@link CompositeInfo}.
-   */
-  public final void command_MOVE(ControlInfo control, ControlInfo nextControl) throws Exception {
-    startEdit();
-    try {
-      JavaInfoUtils.move(control, null, getComposite(), nextControl);
-    } finally {
-      endEdit();
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Clipboard
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds commands for coping parent {@link CompositeInfo}.
-   */
-  protected void clipboardCopy_addCompositeCommands(List<ClipboardCommand> commands)
-      throws Exception {
-    for (ControlInfo control : getComposite().getChildrenControls()) {
-      if (!JavaInfoUtils.isImplicitlyCreated(control)) {
-        clipboardCopy_addControlCommands(control, commands);
-      }
-    }
-  }
-
-  /**
-   * Adds commands for coping {@link ControlInfo} on parent {@link CompositeInfo}.
-   */
-  protected void clipboardCopy_addControlCommands(ControlInfo control,
-      List<ClipboardCommand> commands) throws Exception {
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Manage general layout data.
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Store general layout data properties for {@link ControlInfo}.
-   */
-  protected void storeLayoutData(ControlInfo control, LayoutDataInfo layoutData) throws Exception {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public LayoutInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+		addBroadcastListeners();
+		new LayoutNameSupport(this);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Broadcast events
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds listeners to the {@link BroadcastSupport}.
+	 */
+	private void addBroadcastListeners() {
+		addBroadcastListener(new ObjectInfoTreeComplete() {
+			@Override
+			public void invoke() throws Exception {
+				CompositeInfo composite = getComposite();
+				// validate LayoutData
+				if (isActiveOnComposite(composite)) {
+					validateCorrespondence_Layout_LayoutData();
+				}
+				// create virtual layout data
+				if (isActiveOnComposite(composite)) {
+					for (ControlInfo control : composite.getChildrenControls()) {
+						ensureLayoutData(control);
+					}
+				}
+			}
+		});
+		addBroadcastListener(new ObjectInfoChildAddBefore() {
+			@Override
+			public void invoke(ObjectInfo parent, ObjectInfo child, ObjectInfo[] nextChild)
+					throws Exception {
+				// add new LayoutData - remove existing one
+				if (parent instanceof ControlInfo
+						&& child instanceof LayoutDataInfo
+						&& isActiveOnComposite(parent.getParent())) {
+					ControlInfo control = (ControlInfo) parent;
+					LayoutDataInfo existingLayoutData = getLayoutData(control);
+					if (existingLayoutData != null) {
+						control.removeChild(existingLayoutData);
+					}
+				}
+			}
+		});
+		addBroadcastListener(new ObjectInfoChildAddAfter() {
+			@Override
+			public void invoke(ObjectInfo parent, ObjectInfo child) throws Exception {
+				CompositeInfo composite = getComposite();
+				// add this layout
+				if (child == LayoutInfo.this) {
+					// implicit layouts are bound to its parent
+					if (getCreationSupport() instanceof IImplicitCreationSupport) {
+						targetBroadcastListener(parent);
+					}
+					// create virtual LayoutData's
+					for (ControlInfo control : composite.getChildrenControls()) {
+						ensureLayoutData(control);
+					}
+				}
+			}
+		});
+		addBroadcastListener(new ObjectInfoDelete() {
+			@Override
+			public void before(ObjectInfo parent, ObjectInfo child) throws Exception {
+				// delete this layout
+				if (child == LayoutInfo.this) {
+					onDelete();
+				}
+				// delete ControlInfo from this composite
+				if (isActiveOnComposite(parent) && child instanceof ControlInfo) {
+					onControlRemoveBefore((ControlInfo) child);
+				}
+			}
+
+			@Override
+			public void after(ObjectInfo parent, ObjectInfo child) throws Exception {
+				// delete layout data - create virtual
+				if (parent instanceof ControlInfo
+						&& child instanceof LayoutDataInfo
+						&& shouldCreateLayoutData((ControlInfo) parent)
+						&& isActiveOnComposite(parent.getParent())) {
+					ControlInfo control = (ControlInfo) parent;
+					ensureLayoutData(control);
+				}
+				// delete ControlInfo from this composite
+				if (isActiveOnComposite(parent) && child instanceof ControlInfo) {
+					ControlInfo control = (ControlInfo) child;
+					if (control.isDeleted()) {
+						onControlRemoveAfter(control);
+					}
+				}
+			}
+		});
+		addBroadcastListener(new JavaEventListener() {
+			@Override
+			public void addAfter(JavaInfo parent, JavaInfo child) throws Exception {
+				// new ControlInfo added, ensure LayoutDataInfo
+				if (isActiveOnComposite(parent) && child instanceof ControlInfo) {
+					ensureLayoutData((ControlInfo) child);
+				}
+			}
+
+			@Override
+			public void moveBefore(JavaInfo child, ObjectInfo oldParent, JavaInfo newParent)
+					throws Exception {
+				// move ControlInfo FROM this composite
+				if (isActiveOnComposite(oldParent)
+						&& child instanceof ControlInfo
+						&& newParent != oldParent) {
+					ControlInfo control = (ControlInfo) child;
+					onControlRemoveBefore(control);
+					deleteLayoutData(control);
+				}
+			}
+
+			@Override
+			public void moveAfter(JavaInfo child, ObjectInfo oldParent, JavaInfo newParent)
+					throws Exception {
+				// move ControlInfo FROM this composite
+				if (isActiveOnComposite(oldParent)
+						&& child instanceof ControlInfo
+						&& newParent != oldParent) {
+					onControlRemoveAfter((ControlInfo) child);
+				}
+				// move ControlInfo TO this composite
+				if (isActiveOnComposite(newParent)
+						&& child instanceof ControlInfo
+						&& newParent != oldParent) {
+					ensureLayoutData((ControlInfo) child);
+				}
+			}
+
+			@Override
+			public void clipboardCopy(JavaInfo javaInfo, List<ClipboardCommand> commands)
+					throws Exception {
+				if (isActiveOnComposite(javaInfo)) {
+					clipboardCopy_addCompositeCommands(commands);
+				}
+			}
+		});
+		addBroadcastListener(new JavaInfoAddProperties() {
+			@Override
+			public void invoke(JavaInfo javaInfo, List<Property> properties) throws Exception {
+				// add layout properties to composite properties
+				if (isActiveOnComposite(javaInfo)) {
+					addLayoutProperties(properties);
+				}
+			}
+		});
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// LayoutData compatibility validation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Ensures that {@link Control}'s have <code>LayoutData</code> that corresponds to {@link Layout}.
+	 */
+	private void validateCorrespondence_Layout_LayoutData() throws Exception {
+		CompositeInfo composite = getComposite();
+		Object[] controls = ContainerSupport.getChildren(composite.getObject());
+		if (hasLayoutData()) {
+			Class<?> expectedLayoutDataClass = getLayoutDataClass();
+			for (Object control : controls) {
+				Object layoutData = ControlSupport.getLayoutData(control);
+				if (!ReflectionUtils.isAssignableFrom(expectedLayoutDataClass, layoutData)) {
+					throw new DesignerException(IExceptionConstants.INCOMPATIBLE_LAYOUT_DATA,
+							getShortClassName(layoutData),
+							getShortComponentName(composite.getChildByObject(control)),
+							getShortComponentName(composite),
+							getShortClassName(getDescription().getComponentClass()),
+							getShortClassName(expectedLayoutDataClass));
+				}
+			}
+		}
+	}
+
+	private static String getShortClassName(Object o) {
+		Class<?> clazz = o.getClass();
+		return getShortClassName(clazz);
+	}
+
+	private static String getShortClassName(Class<?> clazz) {
+		if (clazz == null) {
+			return "<null>";
+		}
+		return CodeUtils.getShortClass(clazz.getName());
+	}
+
+	private static String getShortComponentName(JavaInfo javaInfo) {
+		if (javaInfo == null) {
+			return "<null>";
+		}
+		return javaInfo.getVariableSupport().getComponentName();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final IObjectPresentation getPresentation() {
+		return new LayoutPresentation(this);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link CompositeInfo} that contains this {@link LayoutInfo}.
+	 */
+	@Override
+	public final CompositeInfo getComposite() {
+		return (CompositeInfo) getParent();
+	}
+
+	@Override
+	public final boolean isActive() {
+		CompositeInfo composite = getComposite();
+		return isActiveOnComposite(composite);
+	}
+
+	/**
+	 * @return <code>true</code> if this {@link LayoutInfo} is active on its {@link CompositeInfo}.
+	 */
+	protected final boolean isActiveOnComposite(ObjectInfo composite) {
+		return composite != null && composite.getChildren().contains(this);
+	}
+
+	@Override
+	public final List<ControlInfo> getControls() {
+		List<ControlInfo> controls = Lists.newArrayList();
+		CompositeInfo composite = getComposite();
+		if (isActiveOnComposite(composite)) {
+			for (ControlInfo control : composite.getChildrenControls()) {
+				if (isManagedObject(control)) {
+					controls.add(control);
+				}
+			}
+		}
+		return controls;
+	}
+
+	@Override
+	public boolean isManagedObject(Object object) {
+		if (object instanceof ControlInfo
+				&& isActive()
+				&& getComposite().getChildren().contains(object)) {
+			ControlInfo control = (ControlInfo) object;
+			if (JavaInfoUtils.isIndirectlyExposed(control)) {
+				return false;
+			}
+			return true;
+		}
+		return false;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// "Layout" property
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private ComplexProperty m_layoutComplexProperty;
+
+	/**
+	 * Adds properties of this {@link LayoutInfo} to the properties of its {@link CompositeInfo}.
+	 */
+	private void addLayoutProperties(List<Property> properties) throws Exception {
+		// prepare layout complex property
+		{
+			Property[] layoutProperties = getProperties();
+			if (m_layoutComplexProperty == null) {
+				String text;
+				{
+					Class<?> componentClass = getDescription().getComponentClass();
+					if (componentClass != null) {
+						text = "(" + componentClass.getName() + ")";
+					} else {
+						text = "(absolute)";
+					}
+				}
+				//
+				m_layoutComplexProperty = new ComplexProperty("Layout", text) {
+					@Override
+					public boolean isModified() throws Exception {
+						return true;
+					}
+
+					@Override
+					public void setValue(Object value) throws Exception {
+						if (value == UNKNOWN_VALUE) {
+							delete();
+						}
+					}
+				};
+				m_layoutComplexProperty.setCategory(PropertyCategory.system(5));
+				m_layoutComplexProperty.setEditorPresentation(new ButtonPropertyEditorPresentation() {
+					@Override
+					protected Image getImage() {
+						return DesignerPlugin.getImage("properties/down.png");
+					}
+
+					@Override
+					protected void onClick(PropertyTable propertyTable, Property property) throws Exception {
+						MenuManager manager = new MenuManager();
+						getComposite().fillLayoutsManager(manager);
+						Menu menu = manager.createContextMenu(propertyTable);
+						UiUtils.showAndDisposeOnHide(menu);
+					}
+				});
+			}
+			m_layoutComplexProperty.setProperties(layoutProperties);
+		}
+		// add property
+		properties.add(m_layoutComplexProperty);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Layout notifications
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * This method is invoked when this {@link LayoutInfo} is set on its {@link CompositeInfo}.
+	 */
+	public void onSet() throws Exception {
+	}
+
+	/**
+	 * This method is invoked when this {@link LayoutInfo} is deleted from its {@link CompositeInfo}.
+	 */
+	protected void onDelete() throws Exception {
+		for (ControlInfo control : getComposite().getChildrenControls()) {
+			deleteLayoutData(control);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Control notifications
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Notification that given {@link ControlInfo} will be removed from composite.
+	 */
+	protected void onControlRemoveBefore(ControlInfo control) throws Exception {
+	}
+
+	/**
+	 * Notification that given {@link ControlInfo} was removed from composite.
+	 */
+	protected void onControlRemoveAfter(ControlInfo control) throws Exception {
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// LayoutData management
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static String KEY_EXPOSED_HAS_DATA = "exposed control: already has LayoutData";
+	private static String KEY_EXPOSED_DATA = "exposed control: its LayoutData";
+	private static String KEY_DONT_CREATE_VIRTUAL_DATA =
+			"don't create virtual LayoutData for this ControlInfo";
+
+	/**
+	 * We may be {@link ControlInfo} that virtual {@link LayoutDataInfo} should not be created for it,
+	 * when we intentionally delete {@link LayoutDataInfo}, for example during process of moving this
+	 * {@link ControlInfo} from this {@link LayoutInfo} or deleting this {@link LayoutInfo}.
+	 *
+	 * @return <code>true</code> if for given {@link ControlInfo} we should create
+	 *         {@link LayoutDataInfo}.
+	 */
+	private boolean shouldCreateLayoutData(ControlInfo control) {
+		return control.getArbitraryValue(KEY_DONT_CREATE_VIRTUAL_DATA) == null;
+	}
+
+	/**
+	 * Delete {@link LayoutDataInfo} associated with given {@link ControlInfo}.
+	 * <p>
+	 * Note that this is different than {@link LayoutDataInfo#delete()} because we don't remove
+	 * implicit/virtual {@link LayoutDataInfo} from list of children in
+	 * {@link CreationSupport#delete()}. {@link CreationSupport#delete()} has to remove only
+	 * {@link ASTNode}'s related with {@link LayoutDataInfo}. So, we need separate operation to remove
+	 * {@link LayoutDataInfo} from list of children.
+	 */
+	protected void deleteLayoutData(ControlInfo control) throws Exception {
+		control.putArbitraryValue(KEY_DONT_CREATE_VIRTUAL_DATA, Boolean.TRUE);
+		try {
+			LayoutDataInfo layoutData = getLayoutData(control);
+			if (layoutData != null) {
+				storeLayoutData(control, layoutData);
+				layoutData.delete();
+				// if implicit/virtual, so still alive, force remove from children
+				if (!layoutData.isDeleted()) {
+					control.removeChild(layoutData);
+				}
+			}
+		} finally {
+			control.removeArbitraryValue(KEY_DONT_CREATE_VIRTUAL_DATA);
+		}
+	}
+
+	/**
+	 * @return {@link LayoutDataInfo} associated with given {@link ControlInfo}, or <code>null</code>
+	 *         if no {@link LayoutDataInfo} expected for parent {@link LayoutInfo}.
+	 */
+	public static LayoutDataInfo getLayoutData(ControlInfo control) {
+		// select only layout data
+		List<LayoutDataInfo> objects = Lists.newArrayList();
+		for (ObjectInfo object : control.getChildren()) {
+			if (object instanceof LayoutDataInfo) {
+				objects.add((LayoutDataInfo) object);
+			}
+		}
+		// check for no layout data
+		if (objects.isEmpty()) {
+			return null;
+		}
+		// only one layout data can be set
+		Assert.isTrue(objects.size() == 1);
+		return objects.get(0);
+	}
+
+	@Override
+	public ILayoutDataInfo getLayoutData2(IControlInfo control) {
+		return getLayoutData((ControlInfo) control);
+	}
+
+	/**
+	 * Ensure that if {@link LayoutDataInfo} should exist for given component, there is "real"
+	 * {@link LayoutDataInfo}, or create "virtual"/"implicit" {@link LayoutDataInfo}.
+	 */
+	private void ensureLayoutData(ControlInfo control) throws Exception {
+		if (JavaInfoUtils.isIndirectlyExposed(control)) {
+			return;
+		}
+		if (hasLayoutData()) {
+			LayoutDataInfo layoutData = getLayoutData(control);
+			if (layoutData != null) {
+				return;
+			}
+			// create layout data
+			if (control.getCreationSupport() instanceof IImplicitCreationSupport) {
+				// prepare layout data, ask only first time, during initialize()
+				Object layoutDataObject;
+				if (control.getArbitraryValue(KEY_EXPOSED_HAS_DATA) != null) {
+					layoutDataObject = control.getArbitraryValue(KEY_EXPOSED_DATA);
+				} else {
+					layoutDataObject = ControlSupport.getLayoutData(control.getObject());
+					control.putArbitraryValue(KEY_EXPOSED_HAS_DATA, Boolean.TRUE);
+					control.putArbitraryValue(KEY_EXPOSED_DATA, layoutDataObject);
+				}
+				// if no layout data, then virtual
+				if (layoutDataObject == null) {
+					createVirtualLayoutData(control);
+				} else {
+					createImplicitLayoutData(control);
+				}
+			} else {
+				createVirtualLayoutData(control);
+			}
+		}
+	}
+
+	/**
+	 * Creates implicit {@link LayoutDataInfo} for given {@link ControlInfo}.
+	 * <p>
+	 * "Implicit" {@link LayoutDataInfo} is wrapper for "layout data" object that exists for
+	 * "implicit" {@link ControlInfo}, for example when exposed {@link Control} has already
+	 * "layout data" set during creation of exposing container.
+	 */
+	private void createImplicitLayoutData(ControlInfo control) throws Exception {
+		// create model
+		JavaInfo layoutData;
+		{
+			CreationSupport creationSupport = new ImplicitLayoutDataCreationSupport(control);
+			layoutData = JavaInfoUtils.createJavaInfo(getEditor(), getLayoutDataClass(), creationSupport);
+		}
+		// configure
+		layoutData.setVariableSupport(new ImplicitLayoutDataVariableSupport(layoutData));
+		layoutData.setAssociation(new ImplicitObjectAssociation(control));
+		// add to control
+		control.addChild(layoutData);
+	}
+
+	/**
+	 * Creates virtual {@link LayoutDataInfo} for given {@link ControlInfo}.
+	 * <p>
+	 * "Virtual" {@link LayoutDataInfo} is placeholder for "layout data" when "layout data" should
+	 * exist, but does not exist yet in source code. Most layout managers in this case use
+	 * "layout data" with some default values. So, we show these values in properties and allow to
+	 * change them, at this moment we "materialize" {@link LayoutDataInfo} in source code.
+	 */
+	private void createVirtualLayoutData(ControlInfo control) throws Exception {
+		Object dataObject = getDefaultVirtualDataObject();
+		// create model
+		JavaInfo layoutData;
+		{
+			CreationSupport creationSupport = new VirtualLayoutDataCreationSupport(control, dataObject);
+			layoutData = JavaInfoUtils.createJavaInfo(getEditor(), getLayoutDataClass(), creationSupport);
+		}
+		// configure
+		layoutData.setVariableSupport(new VirtualLayoutDataVariableSupport(layoutData));
+		layoutData.setAssociation(new EmptyAssociation());
+		// add to control
+		control.addChild(layoutData);
+	}
+
+	/**
+	 * @return default object used for "virtual" {@link LayoutDataInfo}.
+	 */
+	protected Object getDefaultVirtualDataObject() throws Exception {
+		throw new NotImplementedException(getClass());
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Virtual Layout Data Support
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final String KEY_LAYOUT_DATA_HAS = "layout-data.has";
+	private static final String KEY_LAYOUT_DATA_CLASS = "layout-data.class";
+	private Class<?> m_layoutDataClass;
+
+	/**
+	 * @return <code>true</code> if this layout has layout data, for user.
+	 */
+	private boolean hasLayoutData() {
+		return JavaInfoUtils.hasTrueParameter(this, KEY_LAYOUT_DATA_HAS);
+	}
+
+	/**
+	 * @return {@link Class} of layout data objects.
+	 */
+	private Class<?> getLayoutDataClass() throws Exception {
+		if (m_layoutDataClass == null) {
+			// extract class name
+			String layoutDataClassName = JavaInfoUtils.getParameter(this, KEY_LAYOUT_DATA_CLASS);
+			Assert.isNotNull(layoutDataClassName);
+			Assert.isTrue(layoutDataClassName.length() != 0);
+			// load class
+			m_layoutDataClass = JavaInfoUtils.getClassLoader(this).loadClass(layoutDataClassName);
+		}
+		return m_layoutDataClass;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Add {@link ControlInfo} to host {@link CompositeInfo}.
+	 */
+	public final void command_CREATE(ControlInfo control, ControlInfo nextControl) throws Exception {
+		startEdit();
+		try {
+			JavaInfoUtils.add(control, null, getComposite(), nextControl);
+		} finally {
+			endEdit();
+		}
+	}
+
+	/**
+	 * Moves {@link ControlInfo} to host {@link CompositeInfo}.
+	 */
+	public final void command_MOVE(ControlInfo control, ControlInfo nextControl) throws Exception {
+		startEdit();
+		try {
+			JavaInfoUtils.move(control, null, getComposite(), nextControl);
+		} finally {
+			endEdit();
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Clipboard
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds commands for coping parent {@link CompositeInfo}.
+	 */
+	protected void clipboardCopy_addCompositeCommands(List<ClipboardCommand> commands)
+			throws Exception {
+		for (ControlInfo control : getComposite().getChildrenControls()) {
+			if (!JavaInfoUtils.isImplicitlyCreated(control)) {
+				clipboardCopy_addControlCommands(control, commands);
+			}
+		}
+	}
+
+	/**
+	 * Adds commands for coping {@link ControlInfo} on parent {@link CompositeInfo}.
+	 */
+	protected void clipboardCopy_addControlCommands(ControlInfo control,
+			List<ClipboardCommand> commands) throws Exception {
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Manage general layout data.
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Store general layout data properties for {@link ControlInfo}.
+	 */
+	protected void storeLayoutData(ControlInfo control, LayoutDataInfo layoutData) throws Exception {
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/LayoutJavaInfoParticipator.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/LayoutJavaInfoParticipator.java
index d0eec5721..877102bff 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/LayoutJavaInfoParticipator.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/LayoutJavaInfoParticipator.java
@@ -32,114 +32,114 @@
  * @coverage swt.model.layout
  */
 public class LayoutJavaInfoParticipator implements IJavaInfoInitializationParticipator {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final Object INSTANCE = new LayoutJavaInfoParticipator();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final Object INSTANCE = new LayoutJavaInfoParticipator();
 
-  private LayoutJavaInfoParticipator() {
-  }
+	private LayoutJavaInfoParticipator() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IJavaInfoInitializationParticipator
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void process(final JavaInfo javaInfo) throws Exception {
-    if (javaInfo instanceof LayoutInfo) {
-      final LayoutInfo layout = (LayoutInfo) javaInfo;
-      // perform bindings...
-      if (layout.getParent() != null) {
-        // ...right now, if Layout already bound to its container
-        performBindings(layout);
-      } else {
-        // ...or later, when Layout will be bound to its container
-        layout.addBroadcastListener(new ObjectInfoChildAddAfter() {
-          @Override
-          public void invoke(ObjectInfo parent, ObjectInfo child) throws Exception {
-            if (child == layout) {
-              layout.removeBroadcastListener(this);
-              performBindings(layout);
-            }
-          }
-        });
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IJavaInfoInitializationParticipator
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void process(final JavaInfo javaInfo) throws Exception {
+		if (javaInfo instanceof LayoutInfo) {
+			final LayoutInfo layout = (LayoutInfo) javaInfo;
+			// perform bindings...
+			if (layout.getParent() != null) {
+				// ...right now, if Layout already bound to its container
+				performBindings(layout);
+			} else {
+				// ...or later, when Layout will be bound to its container
+				layout.addBroadcastListener(new ObjectInfoChildAddAfter() {
+					@Override
+					public void invoke(ObjectInfo parent, ObjectInfo child) throws Exception {
+						if (child == layout) {
+							layout.removeBroadcastListener(this);
+							performBindings(layout);
+						}
+					}
+				});
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Bindings
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Performs artifacts bindings after building components tree.
-   */
-  private void performBindings(LayoutInfo layout) throws Exception {
-    // bind SurroundSupport
-    run(layout, new IBindingProcessor() {
-      @Override
-      public boolean run(LayoutInfo layout,
-          ClassLoader classLoader,
-          Class<?> layoutClass,
-          String layoutName) throws Exception {
-        String surroundClassName = layoutName + "SurroundSupport";
-        Class<?> surroundClass = classLoader.loadClass(surroundClassName);
-        ReflectionUtils.getConstructor(surroundClass, layoutClass).newInstance(layout);
-        return true;
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Bindings
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Performs artifacts bindings after building components tree.
+	 */
+	private void performBindings(LayoutInfo layout) throws Exception {
+		// bind SurroundSupport
+		run(layout, new IBindingProcessor() {
+			@Override
+			public boolean run(LayoutInfo layout,
+					ClassLoader classLoader,
+					Class<?> layoutClass,
+					String layoutName) throws Exception {
+				String surroundClassName = layoutName + "SurroundSupport";
+				Class<?> surroundClass = classLoader.loadClass(surroundClassName);
+				ReflectionUtils.getConstructor(surroundClass, layoutClass).newInstance(layout);
+				return true;
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * The processor to use with {@link LayoutJavaInfoParticipator#run(LayoutInfo, IBindingProcessor)}
-   * .
-   */
-  private interface IBindingProcessor {
-    boolean run(LayoutInfo layout, ClassLoader classLoader, Class<?> layoutClass, String layoutName)
-        throws Exception;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * The processor to use with {@link LayoutJavaInfoParticipator#run(LayoutInfo, IBindingProcessor)}
+	 * .
+	 */
+	private interface IBindingProcessor {
+		boolean run(LayoutInfo layout, ClassLoader classLoader, Class<?> layoutClass, String layoutName)
+				throws Exception;
+	}
 
-  /**
-   * Uses {@link IBindingProcessor} to attempt to perform binding by class of {@link LayoutInfo} and
-   * any of its super classes. Trick is that sometimes artifact is bound not to the exact class of
-   * {@link LayoutInfo}, but to some of its super classes, so we should check them too.
-   */
-  private static void run(final LayoutInfo layout, final IBindingProcessor processor) {
-    Class<?> layoutClass = layout.getClass();
-    for (; layoutClass != null; layoutClass = layoutClass.getSuperclass()) {
-      final Class<?> finalLayoutClass = layoutClass;
-      boolean success = ExecutionUtils.runObjectIgnore(new RunnableObjectEx<Boolean>() {
-        @Override
-        public Boolean runObject() throws Exception {
-          run(layout, processor, finalLayoutClass);
-          return true;
-        }
-      }, false);
-      if (success) {
-        return;
-      }
-    }
-  }
+	/**
+	 * Uses {@link IBindingProcessor} to attempt to perform binding by class of {@link LayoutInfo} and
+	 * any of its super classes. Trick is that sometimes artifact is bound not to the exact class of
+	 * {@link LayoutInfo}, but to some of its super classes, so we should check them too.
+	 */
+	private static void run(final LayoutInfo layout, final IBindingProcessor processor) {
+		Class<?> layoutClass = layout.getClass();
+		for (; layoutClass != null; layoutClass = layoutClass.getSuperclass()) {
+			final Class<?> finalLayoutClass = layoutClass;
+			boolean success = ExecutionUtils.runObjectIgnore(new RunnableObjectEx<Boolean>() {
+				@Override
+				public Boolean runObject() throws Exception {
+					run(layout, processor, finalLayoutClass);
+					return true;
+				}
+			}, false);
+			if (success) {
+				return;
+			}
+		}
+	}
 
-  private static void run(LayoutInfo layout, IBindingProcessor processor, Class<?> layoutClass)
-      throws Exception {
-    // prepare name of Layout without "Info" suffix
-    final String layoutName;
-    {
-      String layoutClassName = layoutClass.getName();
-      layoutName = StringUtils.removeEnd(layoutClassName, "Info");
-    }
-    // try to bind
-    ClassLoader classLoader = ReflectionUtils.getClassLoader(layoutClass);
-    processor.run(layout, classLoader, layoutClass, layoutName);
-  }
+	private static void run(LayoutInfo layout, IBindingProcessor processor, Class<?> layoutClass)
+			throws Exception {
+		// prepare name of Layout without "Info" suffix
+		final String layoutName;
+		{
+			String layoutClassName = layoutClass.getName();
+			layoutName = StringUtils.removeEnd(layoutClassName, "Info");
+		}
+		// try to bind
+		ClassLoader classLoader = ReflectionUtils.getClassLoader(layoutClass);
+		processor.run(layout, classLoader, layoutClass, layoutName);
+	}
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/LayoutNameSupport.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/LayoutNameSupport.java
index f59030bb4..099423c29 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/LayoutNameSupport.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/LayoutNameSupport.java
@@ -27,48 +27,48 @@
  * @coverage swt.model.layout
  */
 public final class LayoutNameSupport
-    extends
-      org.eclipse.wb.internal.core.model.layout.LayoutNameSupport<LayoutInfo> {
-  public final static String[] TEMPLATES = new String[]{
-      "${layoutAcronym}_${compositeName}",
-      "${layoutAcronym}${compositeName-cap}",
-      "${compositeName}${layoutClassName}",
-      "${defaultName}"};
+extends
+org.eclipse.wb.internal.core.model.layout.LayoutNameSupport<LayoutInfo> {
+	public final static String[] TEMPLATES = new String[]{
+			"${layoutAcronym}_${compositeName}",
+			"${layoutAcronym}${compositeName-cap}",
+			"${compositeName}${layoutClassName}",
+	"${defaultName}"};
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public LayoutNameSupport(LayoutInfo layout) {
-    super(layout);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public LayoutNameSupport(LayoutInfo layout) {
+		super(layout);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utilities
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getTemplate() {
-    IPreferenceStore preferences = m_childInfo.getDescription().getToolkit().getPreferences();
-    String template = preferences.getString(IPreferenceConstants.P_LAYOUT_NAME_TEMPLATE);
-    if (!isValidTemplate(TEMPLATES, template)) {
-      template = getTemplateForDefault();
-    }
-    return template;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utilities
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getTemplate() {
+		IPreferenceStore preferences = m_childInfo.getDescription().getToolkit().getPreferences();
+		String template = preferences.getString(IPreferenceConstants.P_LAYOUT_NAME_TEMPLATE);
+		if (!isValidTemplate(TEMPLATES, template)) {
+			template = getTemplateForDefault();
+		}
+		return template;
+	}
 
-  @Override
-  protected Map<String, String> getValueMap() {
-    // prepare variables
-    Map<String, String> valueMap = Maps.newTreeMap();
-    {
-      valueMap.put("layoutAcronym", getAcronym());
-      valueMap.put("layoutClassName", getClassName());
-      valueMap.put("compositeName", getParentName());
-      valueMap.put("compositeName-cap", getParentNameCap());
-    }
-    return valueMap;
-  }
+	@Override
+	protected Map<String, String> getValueMap() {
+		// prepare variables
+		Map<String, String> valueMap = Maps.newTreeMap();
+		{
+			valueMap.put("layoutAcronym", getAcronym());
+			valueMap.put("layoutClassName", getClassName());
+			valueMap.put("compositeName", getParentName());
+			valueMap.put("compositeName-cap", getParentNameCap());
+		}
+		return valueMap;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/LayoutPresentation.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/LayoutPresentation.java
index 6c7b21f3f..53dbba3d2 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/LayoutPresentation.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/LayoutPresentation.java
@@ -20,22 +20,22 @@
  * @coverage swt.model.presentation
  */
 public final class LayoutPresentation extends DefaultJavaInfoPresentation {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public LayoutPresentation(LayoutInfo layout) {
-    super(layout);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public LayoutPresentation(LayoutInfo layout) {
+		super(layout);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IObjectPresentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean isVisible() throws Exception {
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IObjectPresentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean isVisible() throws Exception {
+		return false;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/RowDataInfo.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/RowDataInfo.java
index b0054427b..e26f3ebc7 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/RowDataInfo.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/RowDataInfo.java
@@ -23,29 +23,29 @@
  * @coverage swt.model.layout
  */
 public final class RowDataInfo extends LayoutDataInfo implements IRowDataInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public RowDataInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public RowDataInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void setWidth(int width) throws Exception {
-    getPropertyByTitle("width").setValue(width);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void setWidth(int width) throws Exception {
+		getPropertyByTitle("width").setValue(width);
+	}
 
-  @Override
-  public void setHeight(int height) throws Exception {
-    getPropertyByTitle("height").setValue(height);
-  }
+	@Override
+	public void setHeight(int height) throws Exception {
+		getPropertyByTitle("height").setValue(height);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/RowLayoutAssistant.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/RowLayoutAssistant.java
index 855fbe7a1..39867c72c 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/RowLayoutAssistant.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/RowLayoutAssistant.java
@@ -25,28 +25,28 @@
  * @coverage swt.model.layout
  */
 public final class RowLayoutAssistant extends LayoutAssistantSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public RowLayoutAssistant(ILayoutInfo<?> layout) {
-    super(layout);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public RowLayoutAssistant(ILayoutInfo<?> layout) {
+		super(layout);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Pages
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected AbstractAssistantPage createLayoutPage(Composite parent) {
-    return new RowLayoutAssistantPage(parent, m_layout);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Pages
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected AbstractAssistantPage createLayoutPage(Composite parent) {
+		return new RowLayoutAssistantPage(parent, m_layout);
+	}
 
-  @Override
-  protected AbstractAssistantPage createConstraintsPage(Composite parent, List<ObjectInfo> objects) {
-    List<ILayoutDataInfo> dataList = getDataList(objects);
-    return new RowLayoutDataAssistantPage(parent, dataList);
-  }
+	@Override
+	protected AbstractAssistantPage createConstraintsPage(Composite parent, List<ObjectInfo> objects) {
+		List<ILayoutDataInfo> dataList = getDataList(objects);
+		return new RowLayoutDataAssistantPage(parent, dataList);
+	}
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/RowLayoutAssistantPage.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/RowLayoutAssistantPage.java
index 129602c3c..74b82a053 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/RowLayoutAssistantPage.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/RowLayoutAssistantPage.java
@@ -26,67 +26,67 @@
  * @coverage swt.assistant
  */
 public final class RowLayoutAssistantPage extends AbstractAssistantPage {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public RowLayoutAssistantPage(Composite parent, Object selection) {
-    super(parent, selection);
-    GridLayoutFactory.create(this).columns(2);
-    // orientation
-    {
-      Group orientationGroup =
-          addChoiceProperty(
-              this,
-              "type",
-              ModelMessages.RowLayoutAssistantPage_orientationGroup,
-              new Object[][]{
-                  new Object[]{
-                      ModelMessages.RowLayoutAssistantPage_orientationHorizontal,
-                      SWT.HORIZONTAL},
-                  new Object[]{
-                      ModelMessages.RowLayoutAssistantPage_orientationVertical,
-                      SWT.VERTICAL}});
-      GridDataFactory.create(orientationGroup).fillV();
-    }
-    // margins
-    {
-      Group spacingGroup =
-          addIntegerProperties(
-              this,
-              ModelMessages.RowLayoutAssistantPage_marginGroup,
-              new String[][]{
-                  new String[]{"marginWidth", ModelMessages.RowLayoutAssistantPage_marginWidth},
-                  new String[]{"marginHeight", ModelMessages.RowLayoutAssistantPage_marginHeight},
-                  new String[]{"spacing", ModelMessages.RowLayoutAssistantPage_spacingValue}});
-      GridDataFactory.create(spacingGroup).fillV();
-    }
-    // options
-    {
-      Group optionsGroup =
-          addBooleanProperties(
-              this,
-              ModelMessages.RowLayoutAssistantPage_optionsGroup,
-              new String[][]{
-                  new String[]{"wrap", "wrap"},
-                  new String[]{"pack", "pack"},
-                  new String[]{"fill", "fill"},
-                  new String[]{"justify", "justify"}});
-      GridDataFactory.create(optionsGroup).fill();
-    }
-    // margins for sides
-    {
-      Group spacingGroup =
-          addIntegerProperties(
-              this,
-              ModelMessages.RowLayoutAssistantPage_sideMarginsGroup,
-              new String[][]{
-                  new String[]{"marginLeft", ModelMessages.RowLayoutAssistantPage_marginLeft},
-                  new String[]{"marginRight", ModelMessages.RowLayoutAssistantPage_marginRight},
-                  new String[]{"marginTop", ModelMessages.RowLayoutAssistantPage_marginTop},
-                  new String[]{"marginBottom", ModelMessages.RowLayoutAssistantPage_marginBottom}});
-      GridDataFactory.create(spacingGroup).fillV();
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public RowLayoutAssistantPage(Composite parent, Object selection) {
+		super(parent, selection);
+		GridLayoutFactory.create(this).columns(2);
+		// orientation
+		{
+			Group orientationGroup =
+					addChoiceProperty(
+							this,
+							"type",
+							ModelMessages.RowLayoutAssistantPage_orientationGroup,
+							new Object[][]{
+								new Object[]{
+										ModelMessages.RowLayoutAssistantPage_orientationHorizontal,
+										SWT.HORIZONTAL},
+								new Object[]{
+										ModelMessages.RowLayoutAssistantPage_orientationVertical,
+										SWT.VERTICAL}});
+			GridDataFactory.create(orientationGroup).fillV();
+		}
+		// margins
+		{
+			Group spacingGroup =
+					addIntegerProperties(
+							this,
+							ModelMessages.RowLayoutAssistantPage_marginGroup,
+							new String[][]{
+								new String[]{"marginWidth", ModelMessages.RowLayoutAssistantPage_marginWidth},
+								new String[]{"marginHeight", ModelMessages.RowLayoutAssistantPage_marginHeight},
+								new String[]{"spacing", ModelMessages.RowLayoutAssistantPage_spacingValue}});
+			GridDataFactory.create(spacingGroup).fillV();
+		}
+		// options
+		{
+			Group optionsGroup =
+					addBooleanProperties(
+							this,
+							ModelMessages.RowLayoutAssistantPage_optionsGroup,
+							new String[][]{
+								new String[]{"wrap", "wrap"},
+								new String[]{"pack", "pack"},
+								new String[]{"fill", "fill"},
+								new String[]{"justify", "justify"}});
+			GridDataFactory.create(optionsGroup).fill();
+		}
+		// margins for sides
+		{
+			Group spacingGroup =
+					addIntegerProperties(
+							this,
+							ModelMessages.RowLayoutAssistantPage_sideMarginsGroup,
+							new String[][]{
+								new String[]{"marginLeft", ModelMessages.RowLayoutAssistantPage_marginLeft},
+								new String[]{"marginRight", ModelMessages.RowLayoutAssistantPage_marginRight},
+								new String[]{"marginTop", ModelMessages.RowLayoutAssistantPage_marginTop},
+								new String[]{"marginBottom", ModelMessages.RowLayoutAssistantPage_marginBottom}});
+			GridDataFactory.create(spacingGroup).fillV();
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/RowLayoutDataAssistantPage.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/RowLayoutDataAssistantPage.java
index f7f8dc0ba..b6e91d5b8 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/RowLayoutDataAssistantPage.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/RowLayoutDataAssistantPage.java
@@ -26,29 +26,29 @@
  * @coverage swt.assistant
  */
 public final class RowLayoutDataAssistantPage extends AbstractAssistantPage {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public RowLayoutDataAssistantPage(Composite parent, Object selection) {
-    super(parent, selection);
-    GridLayoutFactory.create(this).columns(2);
-    // Width & Height
-    {
-      Group group =
-          addIntegerProperties(
-              this,
-              ModelMessages.RowLayoutDataAssistantPage_sizeGroup,
-              new String[][]{
-                  {"width", ModelMessages.RowLayoutDataAssistantPage_sizeWidth},
-                  {"height", ModelMessages.RowLayoutDataAssistantPage_sizeHeight}},
-              new int[]{SWT.DEFAULT, SWT.DEFAULT});
-      GridDataFactory.create(group).fillV();
-    }
-    // Exclude
-    {
-      addBooleanProperty(this, "exclude", ModelMessages.RowLayoutDataAssistantPage_excludeFlag);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public RowLayoutDataAssistantPage(Composite parent, Object selection) {
+		super(parent, selection);
+		GridLayoutFactory.create(this).columns(2);
+		// Width & Height
+		{
+			Group group =
+					addIntegerProperties(
+							this,
+							ModelMessages.RowLayoutDataAssistantPage_sizeGroup,
+							new String[][]{
+								{"width", ModelMessages.RowLayoutDataAssistantPage_sizeWidth},
+								{"height", ModelMessages.RowLayoutDataAssistantPage_sizeHeight}},
+							new int[]{SWT.DEFAULT, SWT.DEFAULT});
+			GridDataFactory.create(group).fillV();
+		}
+		// Exclude
+		{
+			addBooleanProperty(this, "exclude", ModelMessages.RowLayoutDataAssistantPage_excludeFlag);
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/RowLayoutInfo.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/RowLayoutInfo.java
index 44426f7ab..1df2484e9 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/RowLayoutInfo.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/RowLayoutInfo.java
@@ -28,69 +28,69 @@
  * @coverage swt.model.layout
  */
 public final class RowLayoutInfo extends GenericFlowLayoutInfo
-    implements
-      IRowLayoutInfo<ControlInfo> {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public RowLayoutInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-    new RowLayoutAssistant(this);
-  }
+implements
+IRowLayoutInfo<ControlInfo> {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public RowLayoutInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+		new RowLayoutAssistant(this);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Styles
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public boolean isHorizontal() {
-    return RowLayoutSupport.isHorizontal(getObject());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Styles
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public boolean isHorizontal() {
+		return RowLayoutSupport.isHorizontal(getObject());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Components/constraints
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Object getDefaultVirtualDataObject() throws Exception {
-    return RowLayoutSupport.createRowData();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Components/constraints
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Object getDefaultVirtualDataObject() throws Exception {
+		return RowLayoutSupport.createRowData();
+	}
 
-  /**
-   * @return {@link RowDataInfo} association with given {@link ControlInfo}.
-   */
-  public static RowDataInfo getRowData(ControlInfo control) {
-    return (RowDataInfo) getLayoutData(control);
-  }
+	/**
+	 * @return {@link RowDataInfo} association with given {@link ControlInfo}.
+	 */
+	public static RowDataInfo getRowData(ControlInfo control) {
+		return (RowDataInfo) getLayoutData(control);
+	}
 
-  @Override
-  public IRowDataInfo getRowData2(ControlInfo control) {
-    return getRowData(control);
-  }
+	@Override
+	public IRowDataInfo getRowData2(ControlInfo control) {
+		return getRowData(control);
+	}
 
-  //////////////////////////////////////////////////////////////////////////
-  //
-  // Clipboard
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void clipboardCopy_addControlCommands(ControlInfo control,
-      List<ClipboardCommand> commands) throws Exception {
-    // command for Control
-    commands.add(new LayoutClipboardCommand<RowLayoutInfo>(control) {
-      private static final long serialVersionUID = 0L;
+	//////////////////////////////////////////////////////////////////////////
+	//
+	// Clipboard
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void clipboardCopy_addControlCommands(ControlInfo control,
+			List<ClipboardCommand> commands) throws Exception {
+		// command for Control
+		commands.add(new LayoutClipboardCommand<RowLayoutInfo>(control) {
+			private static final long serialVersionUID = 0L;
 
-      @Override
-      protected void add(RowLayoutInfo layout, ControlInfo control) throws Exception {
-        layout.command_CREATE(control, null);
-      }
-    });
-    // command for RowData
-    commands.add(new LayoutDataClipboardCommand(this, control));
-  }
+			@Override
+			protected void add(RowLayoutInfo layout, ControlInfo control) throws Exception {
+				layout.command_CREATE(control, null);
+			}
+		});
+		// command for RowData
+		commands.add(new LayoutDataClipboardCommand(this, control));
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/VirtualLayoutDataCreationSupport.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/VirtualLayoutDataCreationSupport.java
index 0e2d966a4..7f0bb701a 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/VirtualLayoutDataCreationSupport.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/VirtualLayoutDataCreationSupport.java
@@ -27,89 +27,89 @@
  * @coverage swt.model.layout
  */
 public final class VirtualLayoutDataCreationSupport extends CreationSupport
-    implements
-      IImplicitCreationSupport {
-  private final ControlInfo m_control;
-  private final Object m_dataObject;
+implements
+IImplicitCreationSupport {
+	private final ControlInfo m_control;
+	private final Object m_dataObject;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public VirtualLayoutDataCreationSupport(ControlInfo control, Object dataObject) {
-    m_control = control;
-    m_dataObject = dataObject;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public VirtualLayoutDataCreationSupport(ControlInfo control, Object dataObject) {
+		m_control = control;
+		m_dataObject = dataObject;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void setJavaInfo(JavaInfo javaInfo) throws Exception {
-    super.setJavaInfo(javaInfo);
-    m_javaInfo.setObject(m_dataObject);
-    m_control.addBroadcastListener(new JavaInfoSetObjectAfter() {
-      @Override
-      public void invoke(JavaInfo target, Object object) throws Exception {
-        // check, may be this creation support is not active
-        if (m_javaInfo.getCreationSupport() != VirtualLayoutDataCreationSupport.this) {
-          m_control.removeBroadcastListener(this);
-          return;
-        }
-        // OK, check for control
-        if (target == m_control) {
-          m_javaInfo.setObject(m_dataObject);
-        }
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void setJavaInfo(JavaInfo javaInfo) throws Exception {
+		super.setJavaInfo(javaInfo);
+		m_javaInfo.setObject(m_dataObject);
+		m_control.addBroadcastListener(new JavaInfoSetObjectAfter() {
+			@Override
+			public void invoke(JavaInfo target, Object object) throws Exception {
+				// check, may be this creation support is not active
+				if (m_javaInfo.getCreationSupport() != VirtualLayoutDataCreationSupport.this) {
+					m_control.removeBroadcastListener(this);
+					return;
+				}
+				// OK, check for control
+				if (target == m_control) {
+					m_javaInfo.setObject(m_dataObject);
+				}
+			}
+		});
+	}
 
-  @Override
-  public boolean isJavaInfo(ASTNode node) {
-    return false;
-  }
+	@Override
+	public boolean isJavaInfo(ASTNode node) {
+		return false;
+	}
 
-  @Override
-  public ASTNode getNode() {
-    return null;
-  }
+	@Override
+	public ASTNode getNode() {
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Delete
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean canDelete() {
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Delete
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean canDelete() {
+		return true;
+	}
 
-  @Override
-  public void delete() throws Exception {
-    JavaInfoUtils.deleteJavaInfo(m_javaInfo, false);
-  }
+	@Override
+	public void delete() throws Exception {
+		JavaInfoUtils.deleteJavaInfo(m_javaInfo, false);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    Class<?> layoutDataClass = getComponentClass();
-    return "virtual-layout_data: " + layoutDataClass.getName();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		Class<?> layoutDataClass = getComponentClass();
+		return "virtual-layout_data: " + layoutDataClass.getName();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IClipboardImplicitCreationSupport
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public IClipboardImplicitCreationSupport getImplicitClipboard() {
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IClipboardImplicitCreationSupport
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public IClipboardImplicitCreationSupport getImplicitClipboard() {
+		return null;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/VirtualLayoutDataStatementGenerator.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/VirtualLayoutDataStatementGenerator.java
index ad8c63b51..45d609f77 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/VirtualLayoutDataStatementGenerator.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/VirtualLayoutDataStatementGenerator.java
@@ -27,19 +27,19 @@
  * @coverage swt.model.layout
  */
 public final class VirtualLayoutDataStatementGenerator extends AbstractInsideStatementGenerator {
-  public static final StatementGenerator INSTANCE = new VirtualLayoutDataStatementGenerator();
+	public static final StatementGenerator INSTANCE = new VirtualLayoutDataStatementGenerator();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // StatementGenerator
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void add(JavaInfo child, StatementTarget target, Association association) throws Exception {
-    // prepare block
-    Block block = (Block) child.getEditor().addStatement(ImmutableList.of("{", "}"), target);
-    // add statements in block
-    target = new StatementTarget(block, true);
-    add(child, target, null, association);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// StatementGenerator
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void add(JavaInfo child, StatementTarget target, Association association) throws Exception {
+		// prepare block
+		Block block = (Block) child.getEditor().addStatement(ImmutableList.of("{", "}"), target);
+		// add statements in block
+		target = new StatementTarget(block, true);
+		add(child, target, null, association);
+	}
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/VirtualLayoutDataVariableSupport.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/VirtualLayoutDataVariableSupport.java
index 056c1bdad..6818b14ba 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/VirtualLayoutDataVariableSupport.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/VirtualLayoutDataVariableSupport.java
@@ -41,89 +41,89 @@
  * @coverage swt.model.layout
  */
 public final class VirtualLayoutDataVariableSupport extends AbstractNoNameVariableSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public VirtualLayoutDataVariableSupport(JavaInfo javaInfo) {
-    super(javaInfo);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public VirtualLayoutDataVariableSupport(JavaInfo javaInfo) {
+		super(javaInfo);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean isDefault() {
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean isDefault() {
+		return true;
+	}
 
-  @Override
-  public String getTitle() throws Exception {
-    return "(virtual layout data)";
-  }
+	@Override
+	public String getTitle() throws Exception {
+		return "(virtual layout data)";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Expressions
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getReferenceExpression(NodeTarget target) throws Exception {
-    return materialize().getReferenceExpression(target);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Expressions
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getReferenceExpression(NodeTarget target) throws Exception {
+		return materialize().getReferenceExpression(target);
+	}
 
-  @Override
-  public String getAccessExpression(NodeTarget target) throws Exception {
-    return getReferenceExpression(target) + ".";
-  }
+	@Override
+	public String getAccessExpression(NodeTarget target) throws Exception {
+		return getReferenceExpression(target) + ".";
+	}
 
-  /**
-   * Ensures that this {@link LayoutDataInfo} has {@link LocalUniqueVariableSupport}.
-   */
-  VariableSupport materialize() throws Exception {
-    ControlInfo control = (ControlInfo) m_javaInfo.getParent();
-    //
-    MethodInvocation invocation;
-    Expression expression;
-    {
-      String source = m_javaInfo.getDescription().getCreation(null).getSource();
-      invocation = control.addMethodInvocation("setLayoutData(java.lang.Object)", source);
-      expression = DomGenerics.arguments(invocation).get(0);
-    }
-    // set CreationSupport
-    {
-      m_javaInfo.setCreationSupport(new ConstructorCreationSupport((ClassInstanceCreation) expression));
-      m_javaInfo.bindToExpression(expression);
-      m_javaInfo.addRelatedNode(expression);
-    }
-    // set Association
-    m_javaInfo.setAssociation(new InvocationChildAssociation(invocation));
-    // set VariableSupport
-    VariableSupport variableSupport = new EmptyVariableSupport(m_javaInfo, expression);
-    m_javaInfo.setVariableSupport(variableSupport);
-    return variableSupport;
-  }
+	/**
+	 * Ensures that this {@link LayoutDataInfo} has {@link LocalUniqueVariableSupport}.
+	 */
+	VariableSupport materialize() throws Exception {
+		ControlInfo control = (ControlInfo) m_javaInfo.getParent();
+		//
+		MethodInvocation invocation;
+		Expression expression;
+		{
+			String source = m_javaInfo.getDescription().getCreation(null).getSource();
+			invocation = control.addMethodInvocation("setLayoutData(java.lang.Object)", source);
+			expression = DomGenerics.arguments(invocation).get(0);
+		}
+		// set CreationSupport
+		{
+			m_javaInfo.setCreationSupport(new ConstructorCreationSupport((ClassInstanceCreation) expression));
+			m_javaInfo.bindToExpression(expression);
+			m_javaInfo.addRelatedNode(expression);
+		}
+		// set Association
+		m_javaInfo.setAssociation(new InvocationChildAssociation(invocation));
+		// set VariableSupport
+		VariableSupport variableSupport = new EmptyVariableSupport(m_javaInfo, expression);
+		m_javaInfo.setVariableSupport(variableSupport);
+		return variableSupport;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Target
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public StatementTarget getStatementTarget() throws Exception {
-    throw new IllegalStateException();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Target
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public StatementTarget getStatementTarget() throws Exception {
+		throw new IllegalStateException();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    return "virtual-layout-data";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		return "virtual-layout-data";
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/absolute/AbsoluteLayoutCreationSupport.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/absolute/AbsoluteLayoutCreationSupport.java
index 56171a7bf..111a3f2db 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/absolute/AbsoluteLayoutCreationSupport.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/absolute/AbsoluteLayoutCreationSupport.java
@@ -28,88 +28,88 @@
  * @coverage swt.model.layout
  */
 public final class AbsoluteLayoutCreationSupport extends CreationSupport {
-  private Expression m_expression;
+	private Expression m_expression;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbsoluteLayoutCreationSupport() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbsoluteLayoutCreationSupport() {
+	}
 
-  public AbsoluteLayoutCreationSupport(Expression expression) {
-    Assert.isNotNull(expression);
-    m_expression = expression;
-  }
+	public AbsoluteLayoutCreationSupport(Expression expression) {
+		Assert.isNotNull(expression);
+		m_expression = expression;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    return m_javaInfo.getEditor().getSource(m_expression);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		return m_javaInfo.getEditor().getSource(m_expression);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void setJavaInfo(JavaInfo javaInfo) throws Exception {
-    super.setJavaInfo(javaInfo);
-    m_javaInfo.addBroadcastListener(new JavaInfoSetObjectAfter() {
-      @Override
-      public void invoke(JavaInfo target, Object object) throws Exception {
-        if (target == m_javaInfo.getParentJava()) {
-          m_javaInfo.setObject(null);
-        }
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void setJavaInfo(JavaInfo javaInfo) throws Exception {
+		super.setJavaInfo(javaInfo);
+		m_javaInfo.addBroadcastListener(new JavaInfoSetObjectAfter() {
+			@Override
+			public void invoke(JavaInfo target, Object object) throws Exception {
+				if (target == m_javaInfo.getParentJava()) {
+					m_javaInfo.setObject(null);
+				}
+			}
+		});
+	}
 
-  @Override
-  public boolean isJavaInfo(ASTNode node) {
-    return m_expression == node;
-  }
+	@Override
+	public boolean isJavaInfo(ASTNode node) {
+		return m_expression == node;
+	}
 
-  @Override
-  public ASTNode getNode() {
-    return m_expression;
-  }
+	@Override
+	public ASTNode getNode() {
+		return m_expression;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Adding
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String add_getSource(NodeTarget target) throws Exception {
-    return "null";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Adding
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String add_getSource(NodeTarget target) throws Exception {
+		return "null";
+	}
 
-  @Override
-  public void add_setSourceExpression(Expression expression) throws Exception {
-    Assert.instanceOf(NullLiteral.class, expression);
-    m_expression = expression;
-  }
+	@Override
+	public void add_setSourceExpression(Expression expression) throws Exception {
+		Assert.instanceOf(NullLiteral.class, expression);
+		m_expression = expression;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Delete
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean canDelete() {
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Delete
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean canDelete() {
+		return true;
+	}
 
-  @Override
-  public void delete() throws Exception {
-    JavaInfo parent = m_javaInfo.getParentJava();
-    parent.removeChild(m_javaInfo);
-  }
+	@Override
+	public void delete() throws Exception {
+		JavaInfo parent = m_javaInfo.getParentJava();
+		parent.removeChild(m_javaInfo);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/absolute/AbsoluteLayoutInfo.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/absolute/AbsoluteLayoutInfo.java
index c98ffda23..7539678b1 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/absolute/AbsoluteLayoutInfo.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/absolute/AbsoluteLayoutInfo.java
@@ -70,492 +70,492 @@
  * @coverage swt.model.layout
  */
 public final class AbsoluteLayoutInfo extends LayoutInfo
-    implements
-      IAbsoluteLayoutInfo<ControlInfo> {
-  // method names
-  private static final String SET_SIZE_POINT = "setSize(org.eclipse.swt.graphics.Point)";
-  private static final String SET_SIZE_INT_INT = "setSize(int,int)";
-  private static final String SET_LOCATION_POINT = "setLocation(org.eclipse.swt.graphics.Point)";
-  private static final String SET_LOCATION_INT_INT = "setLocation(int,int)";
+implements
+IAbsoluteLayoutInfo<ControlInfo> {
+	// method names
+	private static final String SET_SIZE_POINT = "setSize(org.eclipse.swt.graphics.Point)";
+	private static final String SET_SIZE_INT_INT = "setSize(int,int)";
+	private static final String SET_LOCATION_POINT = "setLocation(org.eclipse.swt.graphics.Point)";
+	private static final String SET_LOCATION_INT_INT = "setLocation(int,int)";
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbsoluteLayoutInfo(AstEditor editor,
-      ToolkitDescription toolkit,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, new ComponentDescription(null), creationSupport);
-    ObjectInfoUtils.setNewId(this);
-    getDescription().setToolkit(toolkit);
-    getDescription().setOrder("first");
-    getDescription().setIcon(Activator.getImage("info/layout/absolute/layout.gif"));
-    setVariableSupport(new AbsoluteLayoutVariableSupport(this));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbsoluteLayoutInfo(AstEditor editor,
+			ToolkitDescription toolkit,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, new ComponentDescription(null), creationSupport);
+		ObjectInfoUtils.setNewId(this);
+		getDescription().setToolkit(toolkit);
+		getDescription().setOrder("first");
+		getDescription().setIcon(Activator.getImage("info/layout/absolute/layout.gif"));
+		setVariableSupport(new AbsoluteLayoutVariableSupport(this));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Initialization
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void initialize() throws Exception {
-    super.initialize();
-    whenSetComplexLayout_forChildComposite();
-    // auto size
-    addBroadcastListener(new JavaEventListener() {
-      @Override
-      public void setPropertyExpression(GenericPropertyImpl property,
-          String[] source,
-          Object[] value,
-          boolean[] shouldSet) throws Exception {
-        checkForAutoSize(property);
-      }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Initialization
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void initialize() throws Exception {
+		super.initialize();
+		whenSetComplexLayout_forChildComposite();
+		// auto size
+		addBroadcastListener(new JavaEventListener() {
+			@Override
+			public void setPropertyExpression(GenericPropertyImpl property,
+					String[] source,
+					Object[] value,
+					boolean[] shouldSet) throws Exception {
+				checkForAutoSize(property);
+			}
 
-      private void checkForAutoSize(GenericPropertyImpl property) throws Exception {
-        IPreferenceStore preferences = getDescription().getToolkit().getPreferences();
-        if (preferences.getBoolean(IPreferenceConstants.P_AUTOSIZE_ON_PROPERTY_CHANGE)
-            && isManagedObject(property.getJavaInfo())) {
-          GenericPropertyDescription propertyDescription = property.getDescription();
-          if (propertyDescription != null) {
-            boolean isTextProperty = propertyDescription.hasTrueTag("isText");
-            boolean isImageProperty = propertyDescription.hasTrueTag("isImage");
-            if (isTextProperty || isImageProperty) {
-              // schedule auto-size
-              final ControlInfo control = (ControlInfo) property.getJavaInfo();
-              ExecutionUtils.runLater(control, new RunnableEx() {
-                @Override
-                public void run() throws Exception {
-                  commandChangeBounds(control, null, control.getPreferredSize());
-                }
-              });
-            }
-          }
-        }
-      }
-    });
-    // Bounds property
-    addBroadcastListener(new JavaInfoAddProperties() {
-      @Override
-      public void invoke(JavaInfo javaInfo, List<Property> properties) throws Exception {
-        if (isManagedObject(javaInfo)) {
-          ControlInfo control = (ControlInfo) javaInfo;
-          properties.add(getBoundsProperty(control));
-        }
-      }
-    });
-    addBroadcastListener(new JavaEventListener() {
-      @Override
-      public void canMove(JavaInfo javaInfo, boolean[] forceMoveEnable, boolean[] forceMoveDisable)
-          throws Exception {
-        if (isManagedObject(javaInfo)) {
-          forceMoveEnable[0] = true;
-        }
-      }
-    });
-    // context menu
-    addBroadcastListener(new ObjectEventListener() {
-      @Override
-      public void addContextMenu(List<? extends ObjectInfo> objects,
-          ObjectInfo object,
-          IMenuManager manager) throws Exception {
-        if (isManagedObject(object)) {
-          ControlInfo control = (ControlInfo) object;
-          contributeControlContextMenu(manager, control);
-        }
-      }
-    });
-  }
+			private void checkForAutoSize(GenericPropertyImpl property) throws Exception {
+				IPreferenceStore preferences = getDescription().getToolkit().getPreferences();
+				if (preferences.getBoolean(IPreferenceConstants.P_AUTOSIZE_ON_PROPERTY_CHANGE)
+						&& isManagedObject(property.getJavaInfo())) {
+					GenericPropertyDescription propertyDescription = property.getDescription();
+					if (propertyDescription != null) {
+						boolean isTextProperty = propertyDescription.hasTrueTag("isText");
+						boolean isImageProperty = propertyDescription.hasTrueTag("isImage");
+						if (isTextProperty || isImageProperty) {
+							// schedule auto-size
+							final ControlInfo control = (ControlInfo) property.getJavaInfo();
+							ExecutionUtils.runLater(control, new RunnableEx() {
+								@Override
+								public void run() throws Exception {
+									commandChangeBounds(control, null, control.getPreferredSize());
+								}
+							});
+						}
+					}
+				}
+			}
+		});
+		// Bounds property
+		addBroadcastListener(new JavaInfoAddProperties() {
+			@Override
+			public void invoke(JavaInfo javaInfo, List<Property> properties) throws Exception {
+				if (isManagedObject(javaInfo)) {
+					ControlInfo control = (ControlInfo) javaInfo;
+					properties.add(getBoundsProperty(control));
+				}
+			}
+		});
+		addBroadcastListener(new JavaEventListener() {
+			@Override
+			public void canMove(JavaInfo javaInfo, boolean[] forceMoveEnable, boolean[] forceMoveDisable)
+					throws Exception {
+				if (isManagedObject(javaInfo)) {
+					forceMoveEnable[0] = true;
+				}
+			}
+		});
+		// context menu
+		addBroadcastListener(new ObjectEventListener() {
+			@Override
+			public void addContextMenu(List<? extends ObjectInfo> objects,
+					ObjectInfo object,
+					IMenuManager manager) throws Exception {
+				if (isManagedObject(object)) {
+					ControlInfo control = (ControlInfo) object;
+					contributeControlContextMenu(manager, control);
+				}
+			}
+		});
+	}
 
-  /**
-   * Absolute layout is place when layout stops. So, even while at design time we show correct GUI,
-   * at run time complex layout of child will not work without special tricks. So, we ask user to
-   * use {@link FormLayout} instead on "absolute".
-   */
-  private void whenSetComplexLayout_forChildComposite() {
-    addBroadcastListener(new JavaEventListener() {
-      @Override
-      public void addAfter(JavaInfo parent, JavaInfo child) throws Exception {
-        if (child instanceof LayoutInfo
-            && !(child instanceof AbsoluteLayoutInfo)
-            && parent instanceof CompositeInfo
-            && parent.getParent() == getComposite()) {
-          int result = openQuestion();
-          if (result == 0) {
-            LayoutInfo formLayout =
-                (LayoutInfo) JavaInfoUtils.createJavaInfo(
-                    getEditor(),
-                    "org.eclipse.swt.layout.FormLayout",
-                    new ConstructorCreationSupport());
-            getComposite().setLayout(formLayout);
-          }
-        }
-      }
+	/**
+	 * Absolute layout is place when layout stops. So, even while at design time we show correct GUI,
+	 * at run time complex layout of child will not work without special tricks. So, we ask user to
+	 * use {@link FormLayout} instead on "absolute".
+	 */
+	private void whenSetComplexLayout_forChildComposite() {
+		addBroadcastListener(new JavaEventListener() {
+			@Override
+			public void addAfter(JavaInfo parent, JavaInfo child) throws Exception {
+				if (child instanceof LayoutInfo
+						&& !(child instanceof AbsoluteLayoutInfo)
+						&& parent instanceof CompositeInfo
+						&& parent.getParent() == getComposite()) {
+					int result = openQuestion();
+					if (result == 0) {
+						LayoutInfo formLayout =
+								(LayoutInfo) JavaInfoUtils.createJavaInfo(
+										getEditor(),
+										"org.eclipse.swt.layout.FormLayout",
+										new ConstructorCreationSupport());
+						getComposite().setLayout(formLayout);
+					}
+				}
+			}
 
-      private int openQuestion() {
-        MessageDialog dialog =
-            new MessageDialog(DesignerPlugin.getShell(),
-                ModelMessages.AbsoluteLayoutInfo_layoutConfirmTitle,
-                null,
-                ModelMessages.AbsoluteLayoutInfo_layoutConfirmMessage1
-                    + ModelMessages.AbsoluteLayoutInfo_layoutConfirmMessage2
-                    + ModelMessages.AbsoluteLayoutInfo_layoutConfirmMessage3
-                    + ModelMessages.AbsoluteLayoutInfo_layoutConfirmMessage4
-                    + ModelMessages.AbsoluteLayoutInfo_layoutConfirmMessage5,
-                MessageDialog.WARNING,
-                new String[]{
-                    ModelMessages.AbsoluteLayoutInfo_layoutConfirmButtonYes,
-                    ModelMessages.AbsoluteLayoutInfo_layoutConfirmButtonNo},
-                0);
-        return dialog.open();
-      }
-    });
-  }
+			private int openQuestion() {
+				MessageDialog dialog =
+						new MessageDialog(DesignerPlugin.getShell(),
+								ModelMessages.AbsoluteLayoutInfo_layoutConfirmTitle,
+								null,
+								ModelMessages.AbsoluteLayoutInfo_layoutConfirmMessage1
+								+ ModelMessages.AbsoluteLayoutInfo_layoutConfirmMessage2
+								+ ModelMessages.AbsoluteLayoutInfo_layoutConfirmMessage3
+								+ ModelMessages.AbsoluteLayoutInfo_layoutConfirmMessage4
+								+ ModelMessages.AbsoluteLayoutInfo_layoutConfirmMessage5,
+								MessageDialog.WARNING,
+								new String[]{
+										ModelMessages.AbsoluteLayoutInfo_layoutConfirmButtonYes,
+										ModelMessages.AbsoluteLayoutInfo_layoutConfirmButtonNo},
+								0);
+				return dialog.open();
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Context menu
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Contributes {@link Action}'s into {@link ControlInfo} context menu.
-   */
-  private void contributeControlContextMenu(IMenuManager manager, final ControlInfo control) {
-    // order
-    {
-      List<ControlInfo> controls = getComposite().getChildrenControls();
-      new OrderingSupport(controls, control).contributeActions(manager);
-    }
-    // auto-size
-    {
-      IAction action =
-          new ObjectInfoAction(control, ModelMessages.AbsoluteLayoutInfo_autoSize,
-              DesignerPlugin.getImageDescriptor("info/layout/absolute/fit_to_size.png")) {
-            @Override
-            protected void runEx() throws Exception {
-              commandChangeBounds(control, null, control.getPreferredSize());
-            }
-          };
-      manager.appendToGroup(IContextMenuConstants.GROUP_CONSTRAINTS, action);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Context menu
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Contributes {@link Action}'s into {@link ControlInfo} context menu.
+	 */
+	private void contributeControlContextMenu(IMenuManager manager, final ControlInfo control) {
+		// order
+		{
+			List<ControlInfo> controls = getComposite().getChildrenControls();
+			new OrderingSupport(controls, control).contributeActions(manager);
+		}
+		// auto-size
+		{
+			IAction action =
+					new ObjectInfoAction(control, ModelMessages.AbsoluteLayoutInfo_autoSize,
+							DesignerPlugin.getImageDescriptor("info/layout/absolute/fit_to_size.png")) {
+				@Override
+				protected void runEx() throws Exception {
+					commandChangeBounds(control, null, control.getPreferredSize());
+				}
+			};
+			manager.appendToGroup(IContextMenuConstants.GROUP_CONSTRAINTS, action);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Conversion
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void onSet() throws Exception {
-    for (ControlInfo control : getComposite().getChildrenControls()) {
-      Rectangle bounds = control.getModelBounds();
-      control.addMethodInvocation("setBounds(int,int,int,int)", bounds.x
-          + ", "
-          + bounds.y
-          + ", "
-          + bounds.width
-          + ", "
-          + bounds.height);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Conversion
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void onSet() throws Exception {
+		for (ControlInfo control : getComposite().getChildrenControls()) {
+			Rectangle bounds = control.getModelBounds();
+			control.addMethodInvocation("setBounds(int,int,int,int)", bounds.x
+					+ ", "
+					+ bounds.y
+					+ ", "
+					+ bounds.width
+					+ ", "
+					+ bounds.height);
+		}
+	}
 
-  @Override
-  protected void deleteLayoutData(ControlInfo control) throws Exception {
-    super.deleteLayoutData(control);
-    control.removeMethodInvocations(SET_LOCATION_INT_INT);
-    control.removeMethodInvocations(SET_LOCATION_POINT);
-    control.removeMethodInvocations(SET_SIZE_INT_INT);
-    control.removeMethodInvocations(SET_SIZE_POINT);
-    control.removeMethodInvocations("setBounds(int,int,int,int)");
-    control.removeMethodInvocations("setBounds(org.eclipse.swt.graphics.Rectangle)");
-  }
+	@Override
+	protected void deleteLayoutData(ControlInfo control) throws Exception {
+		super.deleteLayoutData(control);
+		control.removeMethodInvocations(SET_LOCATION_INT_INT);
+		control.removeMethodInvocations(SET_LOCATION_POINT);
+		control.removeMethodInvocations(SET_SIZE_INT_INT);
+		control.removeMethodInvocations(SET_SIZE_POINT);
+		control.removeMethodInvocations("setBounds(int,int,int,int)");
+		control.removeMethodInvocations("setBounds(org.eclipse.swt.graphics.Rectangle)");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Properties
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected List<Property> getPropertyList() throws Exception {
-    return Collections.emptyList();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Properties
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected List<Property> getPropertyList() throws Exception {
+		return Collections.emptyList();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Bounds Property
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Property getBoundsProperty(ControlInfo control) {
-    ComplexProperty boundsProperty = (ComplexProperty) control.getArbitraryValue(this);
-    if (boundsProperty == null) {
-      boundsProperty = new ComplexProperty("Bounds", null);
-      boundsProperty.setCategory(PropertyCategory.system(5));
-      boundsProperty.setModified(true);
-      control.putArbitraryValue(this, boundsProperty);
-      // x
-      BoundsProperty<?> xProperty = new BoundsProperty<ControlInfo>(control, "x") {
-        @Override
-        public void setValue2(int value, Rectangle modelBounds) throws Exception {
-          commandChangeBounds(m_component, new Point(value, modelBounds.y), null);
-        }
-      };
-      // y
-      BoundsProperty<?> yProperty = new BoundsProperty<ControlInfo>(control, "y") {
-        @Override
-        public void setValue2(int value, Rectangle modelBounds) throws Exception {
-          commandChangeBounds(m_component, new Point(modelBounds.x, value), null);
-        }
-      };
-      // width
-      BoundsProperty<?> widthProperty = new BoundsProperty<ControlInfo>(control, "width") {
-        @Override
-        public void setValue2(int value, Rectangle modelBounds) throws Exception {
-          commandChangeBounds(m_component, null, new Dimension(value, modelBounds.height));
-        }
-      };
-      // height
-      BoundsProperty<?> heightProperty = new BoundsProperty<ControlInfo>(control, "height") {
-        @Override
-        public void setValue2(int value, Rectangle modelBounds) throws Exception {
-          commandChangeBounds(m_component, null, new Dimension(modelBounds.width, value));
-        }
-      };
-      boundsProperty.setProperties(new Property[]{
-          xProperty,
-          yProperty,
-          widthProperty,
-          heightProperty});
-    }
-    Rectangle modelBounds = control.getModelBounds();
-    if (modelBounds != null) {
-      boundsProperty.setText("("
-          + modelBounds.x
-          + ", "
-          + modelBounds.y
-          + ", "
-          + modelBounds.width
-          + ", "
-          + modelBounds.height
-          + ")");
-    }
-    return boundsProperty;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Bounds Property
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Property getBoundsProperty(ControlInfo control) {
+		ComplexProperty boundsProperty = (ComplexProperty) control.getArbitraryValue(this);
+		if (boundsProperty == null) {
+			boundsProperty = new ComplexProperty("Bounds", null);
+			boundsProperty.setCategory(PropertyCategory.system(5));
+			boundsProperty.setModified(true);
+			control.putArbitraryValue(this, boundsProperty);
+			// x
+			BoundsProperty<?> xProperty = new BoundsProperty<ControlInfo>(control, "x") {
+				@Override
+				public void setValue2(int value, Rectangle modelBounds) throws Exception {
+					commandChangeBounds(m_component, new Point(value, modelBounds.y), null);
+				}
+			};
+			// y
+			BoundsProperty<?> yProperty = new BoundsProperty<ControlInfo>(control, "y") {
+				@Override
+				public void setValue2(int value, Rectangle modelBounds) throws Exception {
+					commandChangeBounds(m_component, new Point(modelBounds.x, value), null);
+				}
+			};
+			// width
+			BoundsProperty<?> widthProperty = new BoundsProperty<ControlInfo>(control, "width") {
+				@Override
+				public void setValue2(int value, Rectangle modelBounds) throws Exception {
+					commandChangeBounds(m_component, null, new Dimension(value, modelBounds.height));
+				}
+			};
+			// height
+			BoundsProperty<?> heightProperty = new BoundsProperty<ControlInfo>(control, "height") {
+				@Override
+				public void setValue2(int value, Rectangle modelBounds) throws Exception {
+					commandChangeBounds(m_component, null, new Dimension(modelBounds.width, value));
+				}
+			};
+			boundsProperty.setProperties(new Property[]{
+					xProperty,
+					yProperty,
+					widthProperty,
+					heightProperty});
+		}
+		Rectangle modelBounds = control.getModelBounds();
+		if (modelBounds != null) {
+			boundsProperty.setText("("
+					+ modelBounds.x
+					+ ", "
+					+ modelBounds.y
+					+ ", "
+					+ modelBounds.width
+					+ ", "
+					+ modelBounds.height
+					+ ")");
+		}
+		return boundsProperty;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void commandCreate(ControlInfo control, ControlInfo nextControl) throws Exception {
-    command_CREATE(control, nextControl);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void commandCreate(ControlInfo control, ControlInfo nextControl) throws Exception {
+		command_CREATE(control, nextControl);
+	}
 
-  @Override
-  public void commandMove(ControlInfo control, ControlInfo nextControl) throws Exception {
-    command_MOVE(control, nextControl);
-  }
+	@Override
+	public void commandMove(ControlInfo control, ControlInfo nextControl) throws Exception {
+		command_MOVE(control, nextControl);
+	}
 
-  @Override
-  public void commandChangeBounds(ControlInfo widget, Point location, Dimension size)
-      throws Exception {
-    commandChangeBounds0(widget, location, size);
-    // apply creation flow
-    if (location != null && useCreationFlow()) {
-      AbsoluteLayoutCreationFlowSupport.apply(getComposite(), getControls(), widget, location, size);
-    }
-  }
+	@Override
+	public void commandChangeBounds(ControlInfo widget, Point location, Dimension size)
+			throws Exception {
+		commandChangeBounds0(widget, location, size);
+		// apply creation flow
+		if (location != null && useCreationFlow()) {
+			AbsoluteLayoutCreationFlowSupport.apply(getComposite(), getControls(), widget, location, size);
+		}
+	}
 
-  private void commandChangeBounds0(ControlInfo widget, Point location, Dimension size)
-      throws Exception {
-    Assert.isLegal(
-        location != null || size != null,
-        ModelMessages.AbsoluteLayoutInfo_notNullLocationSize);
-    AstEditor editor = widget.getEditor();
-    // setBounds(int,int,int,int)
-    {
-      MethodInvocation mi = widget.getMethodInvocation("setBounds(int,int,int,int)");
-      if (mi != null) {
-        if (location != null) {
-          setExpression(mi, 0, location.x);
-          setExpression(mi, 1, location.y);
-        }
-        if (size != null) {
-          setExpression(mi, 2, size.width);
-          setExpression(mi, 3, size.height);
-        }
-        removeUnusedMethodsAfterSetBounds(widget);
-        return;
-      }
-    }
-    // setBounds(org.eclipse.swt.graphics.Rectangle)
-    {
-      MethodInvocation mi =
-          widget.getMethodInvocation("setBounds(org.eclipse.swt.graphics.Rectangle)");
-      if (mi != null) {
-        Rectangle widgetBounds = widget.getModelBounds();
-        Expression exp = (Expression) mi.arguments().get(0);
-        String newCode = "new org.eclipse.swt.graphics.Rectangle(";
-        if (location != null) {
-          newCode += location.x + ", " + location.y;
-        } else {
-          newCode += widgetBounds.x + ", " + widgetBounds.y;
-        }
-        newCode += ", ";
-        if (size != null) {
-          newCode += size.width + ", " + size.height;
-        } else {
-          newCode += widgetBounds.width + ", " + widgetBounds.height;
-        }
-        newCode += ")";
-        editor.replaceExpression(exp, newCode);
-        removeUnusedMethodsAfterSetBounds(widget);
-        return;
-      }
-    }
-    boolean setLocationFound = false;
-    boolean setSizeFound = false;
-    if (location != null) {
-      // setLocation(int,int)
-      {
-        MethodInvocation mi = widget.getMethodInvocation(SET_LOCATION_INT_INT);
-        if (mi != null) {
-          setLocationFound = true;
-          setExpression(mi, 0, location.x);
-          setExpression(mi, 1, location.y);
-        }
-      }
-      // setLocation(new org.eclipse.swt.graphics.Point)
-      {
-        MethodInvocation mi = widget.getMethodInvocation(SET_LOCATION_POINT);
-        if (mi != null) {
-          setLocationFound = true;
-          Expression exp = (Expression) mi.arguments().get(0);
-          String newCode = "new org.eclipse.swt.graphics.Point(";
-          newCode += location.x + ", " + location.y + ")";
-          editor.replaceExpression(exp, newCode);
-        }
-      }
-    }
-    if (size != null) {
-      // setSize(int,int)
-      {
-        MethodInvocation mi = widget.getMethodInvocation(SET_SIZE_INT_INT);
-        if (mi != null) {
-          setSizeFound = true;
-          setExpression(mi, 0, size.width);
-          setExpression(mi, 1, size.height);
-        }
-      }
-      // setSize(new org.eclipse.swt.graphics.Point)
-      {
-        MethodInvocation mi = widget.getMethodInvocation(SET_SIZE_POINT);
-        if (mi != null) {
-          setSizeFound = true;
-          Expression exp = (Expression) mi.arguments().get(0);
-          String newCode = "new org.eclipse.swt.graphics.Point(";
-          newCode += size.width + ", " + size.height + ")";
-          editor.replaceExpression(exp, newCode);
-        }
-      }
-    }
-    // nothing found, add setBounds(int, int, int, int)
-    if (location != null && !setLocationFound && size != null && !setSizeFound) {
-      widget.addMethodInvocation("setBounds(int,int,int,int)", location.x
-          + ", "
-          + location.y
-          + ", "
-          + size.width
-          + ", "
-          + size.height);
-      return;
-    }
-    // something found, add as needed
-    if (location != null && !setLocationFound) {
-      widget.addMethodInvocation(SET_LOCATION_INT_INT, location.x + ", " + location.y);
-    }
-    if (size != null && !setSizeFound) {
-      widget.addMethodInvocation(SET_SIZE_INT_INT, size.width + ", " + size.height);
-    }
-  }
+	private void commandChangeBounds0(ControlInfo widget, Point location, Dimension size)
+			throws Exception {
+		Assert.isLegal(
+				location != null || size != null,
+				ModelMessages.AbsoluteLayoutInfo_notNullLocationSize);
+		AstEditor editor = widget.getEditor();
+		// setBounds(int,int,int,int)
+		{
+			MethodInvocation mi = widget.getMethodInvocation("setBounds(int,int,int,int)");
+			if (mi != null) {
+				if (location != null) {
+					setExpression(mi, 0, location.x);
+					setExpression(mi, 1, location.y);
+				}
+				if (size != null) {
+					setExpression(mi, 2, size.width);
+					setExpression(mi, 3, size.height);
+				}
+				removeUnusedMethodsAfterSetBounds(widget);
+				return;
+			}
+		}
+		// setBounds(org.eclipse.swt.graphics.Rectangle)
+		{
+			MethodInvocation mi =
+					widget.getMethodInvocation("setBounds(org.eclipse.swt.graphics.Rectangle)");
+			if (mi != null) {
+				Rectangle widgetBounds = widget.getModelBounds();
+				Expression exp = (Expression) mi.arguments().get(0);
+				String newCode = "new org.eclipse.swt.graphics.Rectangle(";
+				if (location != null) {
+					newCode += location.x + ", " + location.y;
+				} else {
+					newCode += widgetBounds.x + ", " + widgetBounds.y;
+				}
+				newCode += ", ";
+				if (size != null) {
+					newCode += size.width + ", " + size.height;
+				} else {
+					newCode += widgetBounds.width + ", " + widgetBounds.height;
+				}
+				newCode += ")";
+				editor.replaceExpression(exp, newCode);
+				removeUnusedMethodsAfterSetBounds(widget);
+				return;
+			}
+		}
+		boolean setLocationFound = false;
+		boolean setSizeFound = false;
+		if (location != null) {
+			// setLocation(int,int)
+			{
+				MethodInvocation mi = widget.getMethodInvocation(SET_LOCATION_INT_INT);
+				if (mi != null) {
+					setLocationFound = true;
+					setExpression(mi, 0, location.x);
+					setExpression(mi, 1, location.y);
+				}
+			}
+			// setLocation(new org.eclipse.swt.graphics.Point)
+			{
+				MethodInvocation mi = widget.getMethodInvocation(SET_LOCATION_POINT);
+				if (mi != null) {
+					setLocationFound = true;
+					Expression exp = (Expression) mi.arguments().get(0);
+					String newCode = "new org.eclipse.swt.graphics.Point(";
+					newCode += location.x + ", " + location.y + ")";
+					editor.replaceExpression(exp, newCode);
+				}
+			}
+		}
+		if (size != null) {
+			// setSize(int,int)
+			{
+				MethodInvocation mi = widget.getMethodInvocation(SET_SIZE_INT_INT);
+				if (mi != null) {
+					setSizeFound = true;
+					setExpression(mi, 0, size.width);
+					setExpression(mi, 1, size.height);
+				}
+			}
+			// setSize(new org.eclipse.swt.graphics.Point)
+			{
+				MethodInvocation mi = widget.getMethodInvocation(SET_SIZE_POINT);
+				if (mi != null) {
+					setSizeFound = true;
+					Expression exp = (Expression) mi.arguments().get(0);
+					String newCode = "new org.eclipse.swt.graphics.Point(";
+					newCode += size.width + ", " + size.height + ")";
+					editor.replaceExpression(exp, newCode);
+				}
+			}
+		}
+		// nothing found, add setBounds(int, int, int, int)
+		if (location != null && !setLocationFound && size != null && !setSizeFound) {
+			widget.addMethodInvocation("setBounds(int,int,int,int)", location.x
+					+ ", "
+					+ location.y
+					+ ", "
+					+ size.width
+					+ ", "
+					+ size.height);
+			return;
+		}
+		// something found, add as needed
+		if (location != null && !setLocationFound) {
+			widget.addMethodInvocation(SET_LOCATION_INT_INT, location.x + ", " + location.y);
+		}
+		if (size != null && !setSizeFound) {
+			widget.addMethodInvocation(SET_SIZE_INT_INT, size.width + ", " + size.height);
+		}
+	}
 
-  private boolean useCreationFlow() {
-    return getToolkit().getPreferences().getBoolean(IPreferenceConstants.P_CREATION_FLOW);
-  }
+	private boolean useCreationFlow() {
+		return getToolkit().getPreferences().getBoolean(IPreferenceConstants.P_CREATION_FLOW);
+	}
 
-  private ToolkitDescription getToolkit() {
-    return getDescription().getToolkit();
-  }
+	private ToolkitDescription getToolkit() {
+		return getDescription().getToolkit();
+	}
 
-  /**
-   * set the expression as integer value to avoid cast expressions in Designer code.
-   */
-  private void setExpression(MethodInvocation mi, int index, int arg) throws Exception {
-    getEditor().replaceExpression(
-        (Expression) mi.arguments().get(index),
-        IntegerConverter.INSTANCE.toJavaSource(this, Integer.valueOf(arg)));
-  }
+	/**
+	 * set the expression as integer value to avoid cast expressions in Designer code.
+	 */
+	private void setExpression(MethodInvocation mi, int index, int arg) throws Exception {
+		getEditor().replaceExpression(
+				(Expression) mi.arguments().get(index),
+				IntegerConverter.INSTANCE.toJavaSource(this, Integer.valueOf(arg)));
+	}
 
-  private void removeUnusedMethodsAfterSetBounds(ControlInfo widget) throws Exception {
-    {
-      MethodInvocation mi = widget.getMethodInvocation(SET_LOCATION_INT_INT);
-      if (mi != null) {
-        widget.removeMethodInvocations(SET_LOCATION_INT_INT);
-      }
-    }
-    {
-      MethodInvocation mi = widget.getMethodInvocation(SET_LOCATION_POINT);
-      if (mi != null) {
-        widget.removeMethodInvocations(SET_LOCATION_POINT);
-      }
-    }
-    {
-      MethodInvocation mi = widget.getMethodInvocation(SET_SIZE_INT_INT);
-      if (mi != null) {
-        widget.removeMethodInvocations(SET_SIZE_INT_INT);
-      }
-    }
-    {
-      MethodInvocation mi = widget.getMethodInvocation(SET_SIZE_POINT);
-      if (mi != null) {
-        widget.removeMethodInvocations(SET_SIZE_POINT);
-      }
-    }
-  }
+	private void removeUnusedMethodsAfterSetBounds(ControlInfo widget) throws Exception {
+		{
+			MethodInvocation mi = widget.getMethodInvocation(SET_LOCATION_INT_INT);
+			if (mi != null) {
+				widget.removeMethodInvocations(SET_LOCATION_INT_INT);
+			}
+		}
+		{
+			MethodInvocation mi = widget.getMethodInvocation(SET_LOCATION_POINT);
+			if (mi != null) {
+				widget.removeMethodInvocations(SET_LOCATION_POINT);
+			}
+		}
+		{
+			MethodInvocation mi = widget.getMethodInvocation(SET_SIZE_INT_INT);
+			if (mi != null) {
+				widget.removeMethodInvocations(SET_SIZE_INT_INT);
+			}
+		}
+		{
+			MethodInvocation mi = widget.getMethodInvocation(SET_SIZE_POINT);
+			if (mi != null) {
+				widget.removeMethodInvocations(SET_SIZE_POINT);
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Clipboard
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void clipboardCopy_addControlCommands(ControlInfo control,
-      List<ClipboardCommand> commands) throws Exception {
-    final Rectangle bounds = control.getModelBounds();
-    commands.add(new LayoutClipboardCommand<AbsoluteLayoutInfo>(control) {
-      private static final long serialVersionUID = 0L;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Clipboard
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void clipboardCopy_addControlCommands(ControlInfo control,
+			List<ClipboardCommand> commands) throws Exception {
+		final Rectangle bounds = control.getModelBounds();
+		commands.add(new LayoutClipboardCommand<AbsoluteLayoutInfo>(control) {
+			private static final long serialVersionUID = 0L;
 
-      @Override
-      protected void add(AbsoluteLayoutInfo layout, ControlInfo control) throws Exception {
-        layout.command_CREATE(control, null);
-        layout.commandChangeBounds(control, bounds.getLocation(), bounds.getSize());
-      }
-    });
-  }
+			@Override
+			protected void add(AbsoluteLayoutInfo layout, ControlInfo control) throws Exception {
+				layout.command_CREATE(control, null);
+				layout.commandChangeBounds(control, bounds.getLocation(), bounds.getSize());
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link AbsoluteLayoutInfo} that generate code <code>setLayout(null)</code>.
-   */
-  public static AbsoluteLayoutInfo createExplicit(CompositeInfo parent) throws Exception {
-    AstEditor editor = parent.getEditor();
-    ToolkitDescription toolkit = parent.getDescription().getToolkit();
-    AbsoluteLayoutCreationSupport creationSupport = new AbsoluteLayoutCreationSupport();
-    return new AbsoluteLayoutInfo(editor, toolkit, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link AbsoluteLayoutInfo} that generate code <code>setLayout(null)</code>.
+	 */
+	public static AbsoluteLayoutInfo createExplicit(CompositeInfo parent) throws Exception {
+		AstEditor editor = parent.getEditor();
+		ToolkitDescription toolkit = parent.getDescription().getToolkit();
+		AbsoluteLayoutCreationSupport creationSupport = new AbsoluteLayoutCreationSupport();
+		return new AbsoluteLayoutInfo(editor, toolkit, creationSupport);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/absolute/AbsoluteLayoutSurroundProcessor.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/absolute/AbsoluteLayoutSurroundProcessor.java
index d47a71ae3..a7a269a72 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/absolute/AbsoluteLayoutSurroundProcessor.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/absolute/AbsoluteLayoutSurroundProcessor.java
@@ -29,60 +29,60 @@
  * @coverage swt.model.layout
  */
 public final class AbsoluteLayoutSurroundProcessor
-    implements
-      ISurroundProcessor<CompositeInfo, ControlInfo> {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final Object INSTANCE = new AbsoluteLayoutSurroundProcessor();
+implements
+ISurroundProcessor<CompositeInfo, ControlInfo> {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final Object INSTANCE = new AbsoluteLayoutSurroundProcessor();
 
-  private AbsoluteLayoutSurroundProcessor() {
-  }
+	private AbsoluteLayoutSurroundProcessor() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ISurroundProcessor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean filter(CompositeInfo sourceContainer, CompositeInfo targetContainer)
-      throws Exception {
-    String targetClassName = targetContainer.getDescription().getComponentClass().getName();
-    boolean isComposite = targetClassName.equals("org.eclipse.swt.widgets.Composite");
-    boolean isGroup = targetClassName.equals("org.eclipse.swt.widgets.Group");
-    return sourceContainer.hasLayout()
-        && sourceContainer.getLayout() instanceof AbsoluteLayoutInfo
-        && (isComposite || isGroup);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ISurroundProcessor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean filter(CompositeInfo sourceContainer, CompositeInfo targetContainer)
+			throws Exception {
+		String targetClassName = targetContainer.getDescription().getComponentClass().getName();
+		boolean isComposite = targetClassName.equals("org.eclipse.swt.widgets.Composite");
+		boolean isGroup = targetClassName.equals("org.eclipse.swt.widgets.Group");
+		return sourceContainer.hasLayout()
+				&& sourceContainer.getLayout() instanceof AbsoluteLayoutInfo
+				&& (isComposite || isGroup);
+	}
 
-  @Override
-  public void move(CompositeInfo sourceContainer,
-      CompositeInfo targetContainer,
-      List<ControlInfo> components) throws Exception {
-    // prepare absolute layout for target
-    AbsoluteLayoutInfo targetLayout = (AbsoluteLayoutInfo) targetContainer.getLayout();
-    // prepare expanded bounds for "targetContainer"
-    Point locationOffset;
-    {
-      Rectangle targetBounds =
-          (Rectangle) targetContainer.getArbitraryValue(AbsoluteLayoutSurroundSupport.BOUNDS_KEY);
-      targetBounds.expand(targetContainer.getClientAreaInsets2());
-      // prepare offset for components
-      locationOffset = targetBounds.getLocation().getNegated();
-      // set for "targetContainer" expanded bounds
-      AbsoluteLayoutInfo sourceLayout = (AbsoluteLayoutInfo) sourceContainer.getLayout();
-      sourceLayout.commandChangeBounds(
-          targetContainer,
-          targetBounds.getLocation(),
-          targetBounds.getSize());
-    }
-    // move components
-    for (ControlInfo component : components) {
-      Rectangle bounds = component.getModelBounds().getTranslated(locationOffset);
-      targetLayout.command_MOVE(component, null);
-      targetLayout.commandChangeBounds(component, bounds.getLocation(), bounds.getSize());
-    }
-  }
+	@Override
+	public void move(CompositeInfo sourceContainer,
+			CompositeInfo targetContainer,
+			List<ControlInfo> components) throws Exception {
+		// prepare absolute layout for target
+		AbsoluteLayoutInfo targetLayout = (AbsoluteLayoutInfo) targetContainer.getLayout();
+		// prepare expanded bounds for "targetContainer"
+		Point locationOffset;
+		{
+			Rectangle targetBounds =
+					(Rectangle) targetContainer.getArbitraryValue(AbsoluteLayoutSurroundSupport.BOUNDS_KEY);
+			targetBounds.expand(targetContainer.getClientAreaInsets2());
+			// prepare offset for components
+			locationOffset = targetBounds.getLocation().getNegated();
+			// set for "targetContainer" expanded bounds
+			AbsoluteLayoutInfo sourceLayout = (AbsoluteLayoutInfo) sourceContainer.getLayout();
+			sourceLayout.commandChangeBounds(
+					targetContainer,
+					targetBounds.getLocation(),
+					targetBounds.getSize());
+		}
+		// move components
+		for (ControlInfo component : components) {
+			Rectangle bounds = component.getModelBounds().getTranslated(locationOffset);
+			targetLayout.command_MOVE(component, null);
+			targetLayout.commandChangeBounds(component, bounds.getLocation(), bounds.getSize());
+		}
+	}
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/absolute/AbsoluteLayoutSurroundSupport.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/absolute/AbsoluteLayoutSurroundSupport.java
index 81f926866..ccd85769b 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/absolute/AbsoluteLayoutSurroundSupport.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/absolute/AbsoluteLayoutSurroundSupport.java
@@ -25,41 +25,41 @@
  * @coverage swt.model.layout
  */
 public final class AbsoluteLayoutSurroundSupport extends LayoutSurroundSupport {
-  static final String BOUNDS_KEY = "SurroundSupport_BOUNDS";
-  private final AbsoluteLayoutInfo m_layout;
+	static final String BOUNDS_KEY = "SurroundSupport_BOUNDS";
+	private final AbsoluteLayoutInfo m_layout;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbsoluteLayoutSurroundSupport(AbsoluteLayoutInfo layout) {
-    super(layout);
-    m_layout = layout;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbsoluteLayoutSurroundSupport(AbsoluteLayoutInfo layout) {
+		super(layout);
+		m_layout = layout;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Operation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void addContainer(CompositeInfo container, List<ControlInfo> components)
-      throws Exception {
-    m_layout.command_CREATE(container, components.get(0));
-    // prepare enclosing bounds
-    Rectangle enclosingRectangle;
-    {
-      enclosingRectangle = components.get(0).getModelBounds().getCopy();
-      for (ControlInfo component : components) {
-        enclosingRectangle.union(component.getModelBounds());
-      }
-    }
-    // set bounds
-    m_layout.commandChangeBounds(
-        container,
-        enclosingRectangle.getLocation(),
-        enclosingRectangle.getSize());
-    container.putArbitraryValue(BOUNDS_KEY, enclosingRectangle);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Operation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void addContainer(CompositeInfo container, List<ControlInfo> components)
+			throws Exception {
+		m_layout.command_CREATE(container, components.get(0));
+		// prepare enclosing bounds
+		Rectangle enclosingRectangle;
+		{
+			enclosingRectangle = components.get(0).getModelBounds().getCopy();
+			for (ControlInfo component : components) {
+				enclosingRectangle.union(component.getModelBounds());
+			}
+		}
+		// set bounds
+		m_layout.commandChangeBounds(
+				container,
+				enclosingRectangle.getLocation(),
+				enclosingRectangle.getSize());
+		container.putArbitraryValue(BOUNDS_KEY, enclosingRectangle);
+	}
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/absolute/AbsoluteLayoutVariableSupport.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/absolute/AbsoluteLayoutVariableSupport.java
index 1273bd8f3..84bf2644c 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/absolute/AbsoluteLayoutVariableSupport.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/absolute/AbsoluteLayoutVariableSupport.java
@@ -25,97 +25,97 @@
  * @coverage swt.model.layout
  */
 public final class AbsoluteLayoutVariableSupport extends VariableSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbsoluteLayoutVariableSupport(JavaInfo javaInfo) {
-    super(javaInfo);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbsoluteLayoutVariableSupport(JavaInfo javaInfo) {
+		super(javaInfo);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    return "absolute";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		return "absolute";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Name
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean hasName() {
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Name
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean hasName() {
+		return false;
+	}
 
-  @Override
-  public String getName() {
-    throw new IllegalStateException();
-  }
+	@Override
+	public String getName() {
+		throw new IllegalStateException();
+	}
 
-  @Override
-  public void setName(String newName) throws Exception {
-    throw new IllegalStateException();
-  }
+	@Override
+	public void setName(String newName) throws Exception {
+		throw new IllegalStateException();
+	}
 
-  @Override
-  public String getTitle() throws Exception {
-    throw new IllegalStateException();
-  }
+	@Override
+	public String getTitle() throws Exception {
+		throw new IllegalStateException();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Expressions
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getReferenceExpression(NodeTarget target) throws Exception {
-    throw new IllegalStateException();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Expressions
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getReferenceExpression(NodeTarget target) throws Exception {
+		throw new IllegalStateException();
+	}
 
-  @Override
-  public String getAccessExpression(NodeTarget target) throws Exception {
-    throw new IllegalStateException();
-  }
+	@Override
+	public String getAccessExpression(NodeTarget target) throws Exception {
+		throw new IllegalStateException();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Conversion
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean canConvertLocalToField() {
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Conversion
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean canConvertLocalToField() {
+		return false;
+	}
 
-  @Override
-  public void convertLocalToField() throws Exception {
-    throw new IllegalStateException();
-  }
+	@Override
+	public void convertLocalToField() throws Exception {
+		throw new IllegalStateException();
+	}
 
-  @Override
-  public boolean canConvertFieldToLocal() {
-    return false;
-  }
+	@Override
+	public boolean canConvertFieldToLocal() {
+		return false;
+	}
 
-  @Override
-  public void convertFieldToLocal() throws Exception {
-    throw new IllegalStateException();
-  }
+	@Override
+	public void convertFieldToLocal() throws Exception {
+		throw new IllegalStateException();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Target
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public StatementTarget getStatementTarget() throws Exception {
-    throw new IllegalStateException();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Target
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public StatementTarget getStatementTarget() throws Exception {
+		throw new IllegalStateException();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/absolute/IAbsoluteLayoutInfo.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/absolute/IAbsoluteLayoutInfo.java
index 2a28071df..3b9b0da22 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/absolute/IAbsoluteLayoutInfo.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/absolute/IAbsoluteLayoutInfo.java
@@ -23,26 +23,26 @@
  * @coverage swt.model.layout
  */
 public interface IAbsoluteLayoutInfo<C extends IControlInfo> extends ILayoutInfo<C> {
-  /**
-   * Adds a Control into host composite.
-   */
-  void commandCreate(C control, C nextControl) throws Exception;
+	/**
+	 * Adds a Control into host composite.
+	 */
+	void commandCreate(C control, C nextControl) throws Exception;
 
-  /**
-   * Moves a Control into host composite.
-   */
-  void commandMove(C control, C nextControl) throws Exception;
+	/**
+	 * Moves a Control into host composite.
+	 */
+	void commandMove(C control, C nextControl) throws Exception;
 
-  /**
-   * Perform "move" or "resize" operation. Modifies location/size values by modifying appropriate
-   * "setLocation", "setSize", "setBounds" arguments.
-   *
-   * @param widget
-   *          a Control which modifications applies to
-   * @param location
-   *          a {@link Point} of new location of component. May be null.
-   * @param size
-   *          a {@link Dimension} of new size of component. May be null.
-   */
-  void commandChangeBounds(C widget, Point location, Dimension size) throws Exception;
+	/**
+	 * Perform "move" or "resize" operation. Modifies location/size values by modifying appropriate
+	 * "setLocation", "setSize", "setBounds" arguments.
+	 *
+	 * @param widget
+	 *          a Control which modifications applies to
+	 * @param location
+	 *          a {@link Point} of new location of component. May be null.
+	 * @param size
+	 *          a {@link Dimension} of new size of component. May be null.
+	 */
+	void commandChangeBounds(C widget, Point location, Dimension size) throws Exception;
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/absolute/SelectionActionsSupport.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/absolute/SelectionActionsSupport.java
index 2d0a6a6a3..e060454c9 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/absolute/SelectionActionsSupport.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/absolute/SelectionActionsSupport.java
@@ -26,43 +26,43 @@
  * @coverage swt.model.layout
  */
 public final class SelectionActionsSupport<C extends IControlInfo>
-    extends
-      org.eclipse.wb.internal.core.gef.policy.layout.absolute.actions.SimpleAlignmentActionsSupport<C> {
-  private final IAbsoluteLayoutInfo<C> m_layout;
+extends
+org.eclipse.wb.internal.core.gef.policy.layout.absolute.actions.SimpleAlignmentActionsSupport<C> {
+	private final IAbsoluteLayoutInfo<C> m_layout;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SelectionActionsSupport(IAbsoluteLayoutInfo<C> layout) {
-    super();
-    m_layout = layout;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SelectionActionsSupport(IAbsoluteLayoutInfo<C> layout) {
+		super();
+		m_layout = layout;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // SelectionActionsSupport
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected boolean isComponentInfo(ObjectInfo object) {
-    return object instanceof IControlInfo;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// SelectionActionsSupport
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected boolean isComponentInfo(ObjectInfo object) {
+		return object instanceof IControlInfo;
+	}
 
-  @Override
-  protected boolean isValidObjectOnRootPath(IAbstractComponentInfo parent) {
-    CompositeInfo composite = (CompositeInfo) parent;
-    return composite.hasLayout() && composite.getLayout() instanceof IAbsoluteLayoutInfo<?>;
-  }
+	@Override
+	protected boolean isValidObjectOnRootPath(IAbstractComponentInfo parent) {
+		CompositeInfo composite = (CompositeInfo) parent;
+		return composite.hasLayout() && composite.getLayout() instanceof IAbsoluteLayoutInfo<?>;
+	}
 
-  @Override
-  protected IAbstractComponentInfo getLayoutContainer() {
-    return m_layout.getComposite();
-  }
+	@Override
+	protected IAbstractComponentInfo getLayoutContainer() {
+		return m_layout.getComposite();
+	}
 
-  @Override
-  protected void commandChangeBounds(C control, Point location, Dimension size) throws Exception {
-    m_layout.commandChangeBounds(control, location, size);
-  }
+	@Override
+	protected void commandChangeBounds(C control, Point location, Dimension size) throws Exception {
+		m_layout.commandChangeBounds(control, location, size);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/form/AttachmentDef.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/form/AttachmentDef.java
index b4842c0d9..3d1c7a16f 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/form/AttachmentDef.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/form/AttachmentDef.java
@@ -19,8 +19,8 @@
  * @coverage swt.model.layout.form
  */
 public class AttachmentDef {
-  public IAbstractComponentInfo source;
-  public IAbstractComponentInfo target;
-  public int sourceSide;
-  public int targetSide;
+	public IAbstractComponentInfo source;
+	public IAbstractComponentInfo target;
+	public int sourceSide;
+	public int targetSide;
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/form/ControlSelectionPropertyEditor.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/form/ControlSelectionPropertyEditor.java
index b86c24c49..d7f640dd4 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/form/ControlSelectionPropertyEditor.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/form/ControlSelectionPropertyEditor.java
@@ -31,55 +31,55 @@
  * @coverage swt.property.editor
  */
 public final class ControlSelectionPropertyEditor extends AbstractComboPropertyEditor {
-  private final List<ControlInfo> m_controls = Lists.newArrayList();
+	private final List<ControlInfo> m_controls = Lists.newArrayList();
 
-  @Override
-  protected void addItems(Property property, CCombo3 combo) throws Exception {
-    FormAttachmentInfo formAttachment = getAttachment(property);
-    ControlInfo thisControl = (ControlInfo) formAttachment.getParent().getParent();
-    CompositeInfo compositeInfo = (CompositeInfo) thisControl.getParent();
-    List<ControlInfo> childrenControls = compositeInfo.getChildrenControls();
-    for (ControlInfo controlInfo : childrenControls) {
-      if (controlInfo != thisControl) {
-        combo.add(controlInfo.getPresentation().getText());
-        m_controls.add(controlInfo);
-      }
-    }
-  }
+	@Override
+	protected void addItems(Property property, CCombo3 combo) throws Exception {
+		FormAttachmentInfo formAttachment = getAttachment(property);
+		ControlInfo thisControl = (ControlInfo) formAttachment.getParent().getParent();
+		CompositeInfo compositeInfo = (CompositeInfo) thisControl.getParent();
+		List<ControlInfo> childrenControls = compositeInfo.getChildrenControls();
+		for (ControlInfo controlInfo : childrenControls) {
+			if (controlInfo != thisControl) {
+				combo.add(controlInfo.getPresentation().getText());
+				m_controls.add(controlInfo);
+			}
+		}
+	}
 
-  @Override
-  protected void selectItem(Property property, CCombo3 combo) throws Exception {
-    combo.setText(getText(property));
-  }
+	@Override
+	protected void selectItem(Property property, CCombo3 combo) throws Exception {
+		combo.setText(getText(property));
+	}
 
-  @Override
-  protected void toPropertyEx(Property property, CCombo3 combo, int index) throws Exception {
-    ControlInfo controlInfo = m_controls.get(index);
-    // set expression would further be caught in FormAttachment
-    ((GenericPropertyImpl) property).setExpression("", controlInfo);
-  }
+	@Override
+	protected void toPropertyEx(Property property, CCombo3 combo, int index) throws Exception {
+		ControlInfo controlInfo = m_controls.get(index);
+		// set expression would further be caught in FormAttachment
+		((GenericPropertyImpl) property).setExpression("", controlInfo);
+	}
 
-  @Override
-  protected String getText(Property property) throws Exception {
-    Object control = property.getValue();
-    if (control != null) {
-      FormAttachmentInfo attachment = getAttachment(property);
-      JavaInfo controlInfo = attachment.getRootJava().getChildByObject(control);
-      if (controlInfo != null) {
-        return controlInfo.getPresentation().getText();
-      }
-    }
-    return null;
-  }
+	@Override
+	protected String getText(Property property) throws Exception {
+		Object control = property.getValue();
+		if (control != null) {
+			FormAttachmentInfo attachment = getAttachment(property);
+			JavaInfo controlInfo = attachment.getRootJava().getChildByObject(control);
+			if (controlInfo != null) {
+				return controlInfo.getPresentation().getText();
+			}
+		}
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Misc/Helpers
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private FormAttachmentInfo getAttachment(Property property) {
-    GenericProperty genericProperty = (GenericProperty) property;
-    FormAttachmentInfo formAttachment = (FormAttachmentInfo) genericProperty.getJavaInfo();
-    return formAttachment;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Misc/Helpers
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private FormAttachmentInfo getAttachment(Property property) {
+		GenericProperty genericProperty = (GenericProperty) property;
+		FormAttachmentInfo formAttachment = (FormAttachmentInfo) genericProperty.getJavaInfo();
+		return formAttachment;
+	}
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/form/FormAttachmentInfo.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/form/FormAttachmentInfo.java
index e00d5b260..f391bd1e5 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/form/FormAttachmentInfo.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/form/FormAttachmentInfo.java
@@ -46,429 +46,429 @@
  * @coverage swt.model.layout.form
  */
 public final class FormAttachmentInfo extends JavaInfo implements IFormAttachmentInfo<ControlInfo> {
-  // constants
-  private static final String PROPERTY_TITLE_ALIGNMENT = "alignment";
-  private static final String PROPERTY_TITLE_CONTROL = "control";
-  private static final String PROPERTY_TITLE_OFFSET = "offset";
-  private static final String PROPERTY_TITLE_DENOMINATOR = "denominator";
-  private static final String PROPERTY_TITLE_NUMERATOR = "numerator";
-  // fields
-  private final FormAttachmentInfo m_this = this;
-  private FormSide m_side;
-  private int m_numerator;
-  private int m_denominator = 100;
-  private int m_offset;
-  private ControlInfo m_control;
-  private int m_alignment = SWT.DEFAULT;
-  private boolean m_deleting;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FormAttachmentInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Initialize
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void initialize() throws Exception {
-    super.initialize();
-    addBroadcastListener(new JavaEventListener() {
-      @Override
-      public void setPropertyExpression(GenericPropertyImpl property,
-          String[] source,
-          Object[] value,
-          boolean[] shouldSet) throws Exception {
-        if (property.getJavaInfo() == m_this) {
-          materialize();
-          FormAttachmentInfo.this.setPropertyExpression(property, source, value);
-          shouldSet[0] = false;
-        }
-      }
-    });
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Side
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public FormSide getSide() {
-    return m_side;
-  }
-
-  public void setSide(FormSide side) {
-    m_side = side;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Properties
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void setPropertyExpression(GenericPropertyImpl property,
-      @SuppressWarnings("unused") String[] source,
-      Object[] value) throws Exception {
-    String title = property.getTitle();
-    if (PROPERTY_TITLE_NUMERATOR.equals(title)) {
-      setNumerator((Integer) value[0]);
-      setControl(null);
-    }
-    if (PROPERTY_TITLE_OFFSET.equals(title)) {
-      setOffset((Integer) value[0]);
-    }
-    if (PROPERTY_TITLE_DENOMINATOR.equals(title)) {
-      setDenominator((Integer) value[0]);
-      setControl(null);
-    }
-    if (PROPERTY_TITLE_ALIGNMENT.equals(title)) {
-      if (getControl() != null) {
-        int alignment = (Integer) value[0];
-        setAlignment(alignment);
-      } else {
-        return;
-      }
-    }
-    // control
-    if (PROPERTY_TITLE_CONTROL.equals(title)) {
-      if (value[0] == Property.UNKNOWN_VALUE) {
-        setControl(null);
-      } else {
-        // ControlInfo should be passed as value
-        setControl((ControlInfo) value[0]);
-        setAlignment(getSide().getOppositeSide().getFormSide());
-        setOffset(0);
-      }
-    }
-    write();
-    if (!m_deleting) {
-      ExecutionUtils.refresh(this);
-    }
-  }
-
-  /**
-   * Reads and stores the properties values in fields.
-   */
-  public void readPropertiesValue() throws Exception {
-    m_numerator = (Integer) getPropertyByTitle(PROPERTY_TITLE_NUMERATOR).getValue();
-    m_denominator = (Integer) getPropertyByTitle(PROPERTY_TITLE_DENOMINATOR).getValue();
-    m_offset = (Integer) getPropertyByTitle(PROPERTY_TITLE_OFFSET).getValue();
-    // control value returned as Object value, not ObjectInfo
-    Object control = getPropertyByTitle(PROPERTY_TITLE_CONTROL).getValue();
-    m_control = (ControlInfo) getRootJava().getChildByObject(control);
-    // alignment
-    m_alignment = (Integer) getPropertyByTitle(PROPERTY_TITLE_ALIGNMENT).getValue();
-    if (m_alignment == 0 || m_alignment == SWT.DEFAULT) {
-      m_alignment = m_side.getOppositeSide().getFormSide();
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void delete() throws Exception {
-    try {
-      // isDeleting() is not yet set, so use own
-      m_deleting = true;
-      if (!isVirtual()) {
-        setDefaults();
-      }
-      super.delete();
-    } finally {
-      m_deleting = false;
-    }
-  }
-
-  private void setDefaults() throws Exception {
-    getPropertyByTitle(PROPERTY_TITLE_NUMERATOR).setValue(0);
-    getPropertyByTitle(PROPERTY_TITLE_DENOMINATOR).setValue(100);
-    getPropertyByTitle(PROPERTY_TITLE_OFFSET).setValue(0);
-    getPropertyByTitle(PROPERTY_TITLE_ALIGNMENT).setValue(SWT.DEFAULT);
-    getPropertyByTitle(PROPERTY_TITLE_CONTROL).setValue(Property.UNKNOWN_VALUE);
-  }
-
-  @Override
-  public final void setNumerator(int numerator) {
-    m_numerator = numerator;
-  }
-
-  @Override
-  public final int getNumerator() {
-    return m_numerator;
-  }
-
-  @Override
-  public final void setDenominator(int denominator) {
-    m_denominator = denominator;
-  }
-
-  @Override
-  public final int getDenominator() {
-    return m_denominator;
-  }
-
-  @Override
-  public final void setOffset(int offset) {
-    m_offset = offset;
-  }
-
-  @Override
-  public final int getOffset() {
-    return m_offset;
-  }
-
-  @Override
-  public final void setControl(ControlInfo control) {
-    m_control = control;
-  }
-
-  @Override
-  public final ControlInfo getControl() {
-    return m_control;
-  }
-
-  @Override
-  public final void setAlignment(int alignment) {
-    if (alignment == 0 || alignment == SWT.DEFAULT) {
-      alignment = m_side.getOppositeSide().getFormSide();
-    }
-    if (!isValidAlignment(alignment)) {
-      return;
-    }
-    m_alignment = alignment;
-  }
-
-  @Override
-  public final int getAlignment() {
-    return m_alignment;
-  }
-
-  @Override
-  public boolean isVirtual() {
-    return getVariableSupport() instanceof VirtualFormAttachmentVariableSupport;
-  }
-
-  @Override
-  public boolean isParentTrailing() {
-    return !isVirtual() && getControl() == null && getDenominator() == getNumerator();
-  }
-
-  @Override
-  public boolean isParentLeading() {
-    return !isVirtual() && getControl() == null && getNumerator() == 0 && getDenominator() == 100;
-  }
-
-  @Override
-  public boolean isPercentaged() {
-    return getNumerator() > 0 && getNumerator() < 100;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Code generation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void write() throws Exception {
-    materialize();
-    ControlInfo control = getControl();
-    String source = "";
-    if (control == null) {
-      if (getDenominator() == 100) {
-        if (getOffset() == 0) {
-          // FormAttachment (int numerator)
-          source += getNumerator();
-        } else {
-          // FormAttachment (int numerator, int offset)
-          source += getNumerator() + ", " + getOffset();
-        }
-      } else {
-        // FormAttachment (int numerator, int denominator, int offset)
-        source += getNumerator() + ", " + getDenominator() + ", " + getOffset();
-      }
-    } else {
-      String referenceExpression = getReferenceExpression_ensureFormDataVisible(control);
-      if (getAlignment() == m_side.getOppositeSide().getFormSide()) {
-        if (getOffset() == 0) {
-          // FormAttachment (Control control)
-          source += referenceExpression;
-        } else {
-          // FormAttachment (Control control, int offset)
-          source += referenceExpression + ", " + getOffset();
-        }
-      } else {
-        // FormAttachment (Control control, int offset, int alignment)
-        source +=
-            referenceExpression
-                + ", "
-                + getOffset()
-                + ", "
-                + FormLayoutUtils.getAlignmentSource(getAlignment());
-      }
-    }
-    setConstructorArguments(source, control);
-  }
-
-  private String getReferenceExpression_ensureFormDataVisible(ControlInfo control) throws Exception {
-    FormDataInfo layoutData = (FormDataInfo) getParent();
-    StatementTarget statementTarget =
-        JavaInfoUtils.getStatementTarget_whenAllCreated(ImmutableList.of(layoutData, control));
-    String referenceExpression =
-        control.getVariableSupport().getReferenceExpression(new NodeTarget(statementTarget));
-    moveStatement(this, statementTarget);
-    return referenceExpression;
-  }
-
-  private void moveStatement(JavaInfo javaInfo, StatementTarget statementTarget) throws Exception {
-    ConstructorCreationSupport creationSupport =
-        (ConstructorCreationSupport) javaInfo.getCreationSupport();
-    ClassInstanceCreation cic = creationSupport.getCreation();
-    getEditor().moveStatement(AstNodeUtils.getEnclosingStatement(cic), statementTarget);
-  }
-
-  private void setConstructorArguments(final String source, ControlInfo control) throws Exception {
-    ConstructorCreationSupport creationSupport = (ConstructorCreationSupport) getCreationSupport();
-    ClassInstanceCreation cic = creationSupport.getCreation();
-    getEditor().replaceCreationArguments(cic, ImmutableList.of(source));
-    if (control != null) {
-      replaceFormDataQualifier(cic, control);
-    }
-    setCreationSupport(new ConstructorCreationSupport(cic));
-  }
-
-  private void replaceFormDataQualifier(ClassInstanceCreation cic, ControlInfo control)
-      throws Exception {
-    Assignment formDataAssignment = (Assignment) cic.getParent();
-    QualifiedName formDataAssignmentLeft = (QualifiedName) formDataAssignment.getLeftHandSide();
-    FormDataInfo layoutData = (FormDataInfo) getParent();
-    StatementTarget statementTarget =
-        JavaInfoUtils.getStatementTarget_whenAllCreated(ImmutableList.of(layoutData, control));
-    String referenceExpression =
-        layoutData.getVariableSupport().getReferenceExpression(new NodeTarget(statementTarget));
-    getEditor().replaceExpression(formDataAssignmentLeft.getQualifier(), referenceExpression);
-  }
-
-  /**
-   * Does materializing if needed.
-   */
-  private void materialize() throws Exception {
-    if (isVirtual()) {
-      ((VirtualFormAttachmentVariableSupport) getVariableSupport()).materialize();
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Misc
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    final String result[] = new String[]{""};
-    if (isVirtual()) {
-      return result[0] += "(none)";
-    }
-    ExecutionUtils.runIgnore(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        ControlInfo control = getControl();
-        int offset = getOffset();
-        if (control == null) {
-          result[0] += "(" + getNumerator();
-          int denominator = getDenominator();
-          if (denominator != 100) {
-            result[0] += ", " + denominator;
-          }
-          if (offset != 0 || denominator != 100) {
-            result[0] += ", " + offset;
-          }
-          result[0] += ")";
-        } else {
-          result[0] += "(" + control.getVariableSupport().getTitle() + ", " + offset + ")";
-        }
-      }
-    });
-    return result[0];
-  }
-
-  /**
-   * @return <code>true</code> if given alignment is suitable for this attachment.
-   */
-  private boolean isValidAlignment(int alignment) {
-    if (alignment != SWT.CENTER) {
-      boolean b1 = PlacementUtils.isHorizontalSide(getSide().getEngineSide());
-      boolean b2 = PlacementUtils.isHorizontalSide(FormLayoutUtils.convertSwtAlignment(alignment));
-      return b1 == b2;
-    }
-    return true;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Move in tree
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void adjustAfterComponentMove() throws Exception {
-    write();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Clipboard support
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FormAttachmentClipboardInfo getClipboardInfo() {
-    if (isVirtual()) {
-      return null;
-    }
-    FormAttachmentClipboardInfo info = new FormAttachmentClipboardInfo();
-    info.numerator = getNumerator();
-    info.denominator = getDenominator();
-    info.offset = getOffset();
-    ControlInfo targetControl = getControl();
-    if (targetControl != null) {
-      CompositeInfo parent = (CompositeInfo) targetControl.getParent();
-      info.controlID = parent.getChildrenControls().indexOf(targetControl);
-    }
-    info.alignment = getAlignment();
-    return info;
-  }
-
-  public void applyClipboardInfo(ControlInfo thisControl, FormAttachmentClipboardInfo info)
-      throws Exception {
-    if (info == null) {
-      return;
-    }
-    setNumerator(info.numerator);
-    setDenominator(info.denominator);
-    setOffset(info.offset);
-    setAlignment(info.alignment);
-    if (info.controlID != -1) {
-      CompositeInfo parent = (CompositeInfo) thisControl.getParent();
-      ControlInfo targetControl = parent.getChildrenControls().get(info.controlID);
-      setControl(targetControl);
-    }
-    write();
-  }
-
-  static class FormAttachmentClipboardInfo implements Serializable {
-    private static final long serialVersionUID = 0L;
-    int numerator;
-    int denominator;
-    int offset;
-    int controlID = -1;
-    int alignment;
-  }
+	// constants
+	private static final String PROPERTY_TITLE_ALIGNMENT = "alignment";
+	private static final String PROPERTY_TITLE_CONTROL = "control";
+	private static final String PROPERTY_TITLE_OFFSET = "offset";
+	private static final String PROPERTY_TITLE_DENOMINATOR = "denominator";
+	private static final String PROPERTY_TITLE_NUMERATOR = "numerator";
+	// fields
+	private final FormAttachmentInfo m_this = this;
+	private FormSide m_side;
+	private int m_numerator;
+	private int m_denominator = 100;
+	private int m_offset;
+	private ControlInfo m_control;
+	private int m_alignment = SWT.DEFAULT;
+	private boolean m_deleting;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FormAttachmentInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Initialize
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void initialize() throws Exception {
+		super.initialize();
+		addBroadcastListener(new JavaEventListener() {
+			@Override
+			public void setPropertyExpression(GenericPropertyImpl property,
+					String[] source,
+					Object[] value,
+					boolean[] shouldSet) throws Exception {
+				if (property.getJavaInfo() == m_this) {
+					materialize();
+					FormAttachmentInfo.this.setPropertyExpression(property, source, value);
+					shouldSet[0] = false;
+				}
+			}
+		});
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Side
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public FormSide getSide() {
+		return m_side;
+	}
+
+	public void setSide(FormSide side) {
+		m_side = side;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Properties
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void setPropertyExpression(GenericPropertyImpl property,
+			@SuppressWarnings("unused") String[] source,
+			Object[] value) throws Exception {
+		String title = property.getTitle();
+		if (PROPERTY_TITLE_NUMERATOR.equals(title)) {
+			setNumerator((Integer) value[0]);
+			setControl(null);
+		}
+		if (PROPERTY_TITLE_OFFSET.equals(title)) {
+			setOffset((Integer) value[0]);
+		}
+		if (PROPERTY_TITLE_DENOMINATOR.equals(title)) {
+			setDenominator((Integer) value[0]);
+			setControl(null);
+		}
+		if (PROPERTY_TITLE_ALIGNMENT.equals(title)) {
+			if (getControl() != null) {
+				int alignment = (Integer) value[0];
+				setAlignment(alignment);
+			} else {
+				return;
+			}
+		}
+		// control
+		if (PROPERTY_TITLE_CONTROL.equals(title)) {
+			if (value[0] == Property.UNKNOWN_VALUE) {
+				setControl(null);
+			} else {
+				// ControlInfo should be passed as value
+				setControl((ControlInfo) value[0]);
+				setAlignment(getSide().getOppositeSide().getFormSide());
+				setOffset(0);
+			}
+		}
+		write();
+		if (!m_deleting) {
+			ExecutionUtils.refresh(this);
+		}
+	}
+
+	/**
+	 * Reads and stores the properties values in fields.
+	 */
+	public void readPropertiesValue() throws Exception {
+		m_numerator = (Integer) getPropertyByTitle(PROPERTY_TITLE_NUMERATOR).getValue();
+		m_denominator = (Integer) getPropertyByTitle(PROPERTY_TITLE_DENOMINATOR).getValue();
+		m_offset = (Integer) getPropertyByTitle(PROPERTY_TITLE_OFFSET).getValue();
+		// control value returned as Object value, not ObjectInfo
+		Object control = getPropertyByTitle(PROPERTY_TITLE_CONTROL).getValue();
+		m_control = (ControlInfo) getRootJava().getChildByObject(control);
+		// alignment
+		m_alignment = (Integer) getPropertyByTitle(PROPERTY_TITLE_ALIGNMENT).getValue();
+		if (m_alignment == 0 || m_alignment == SWT.DEFAULT) {
+			m_alignment = m_side.getOppositeSide().getFormSide();
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void delete() throws Exception {
+		try {
+			// isDeleting() is not yet set, so use own
+			m_deleting = true;
+			if (!isVirtual()) {
+				setDefaults();
+			}
+			super.delete();
+		} finally {
+			m_deleting = false;
+		}
+	}
+
+	private void setDefaults() throws Exception {
+		getPropertyByTitle(PROPERTY_TITLE_NUMERATOR).setValue(0);
+		getPropertyByTitle(PROPERTY_TITLE_DENOMINATOR).setValue(100);
+		getPropertyByTitle(PROPERTY_TITLE_OFFSET).setValue(0);
+		getPropertyByTitle(PROPERTY_TITLE_ALIGNMENT).setValue(SWT.DEFAULT);
+		getPropertyByTitle(PROPERTY_TITLE_CONTROL).setValue(Property.UNKNOWN_VALUE);
+	}
+
+	@Override
+	public final void setNumerator(int numerator) {
+		m_numerator = numerator;
+	}
+
+	@Override
+	public final int getNumerator() {
+		return m_numerator;
+	}
+
+	@Override
+	public final void setDenominator(int denominator) {
+		m_denominator = denominator;
+	}
+
+	@Override
+	public final int getDenominator() {
+		return m_denominator;
+	}
+
+	@Override
+	public final void setOffset(int offset) {
+		m_offset = offset;
+	}
+
+	@Override
+	public final int getOffset() {
+		return m_offset;
+	}
+
+	@Override
+	public final void setControl(ControlInfo control) {
+		m_control = control;
+	}
+
+	@Override
+	public final ControlInfo getControl() {
+		return m_control;
+	}
+
+	@Override
+	public final void setAlignment(int alignment) {
+		if (alignment == 0 || alignment == SWT.DEFAULT) {
+			alignment = m_side.getOppositeSide().getFormSide();
+		}
+		if (!isValidAlignment(alignment)) {
+			return;
+		}
+		m_alignment = alignment;
+	}
+
+	@Override
+	public final int getAlignment() {
+		return m_alignment;
+	}
+
+	@Override
+	public boolean isVirtual() {
+		return getVariableSupport() instanceof VirtualFormAttachmentVariableSupport;
+	}
+
+	@Override
+	public boolean isParentTrailing() {
+		return !isVirtual() && getControl() == null && getDenominator() == getNumerator();
+	}
+
+	@Override
+	public boolean isParentLeading() {
+		return !isVirtual() && getControl() == null && getNumerator() == 0 && getDenominator() == 100;
+	}
+
+	@Override
+	public boolean isPercentaged() {
+		return getNumerator() > 0 && getNumerator() < 100;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Code generation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void write() throws Exception {
+		materialize();
+		ControlInfo control = getControl();
+		String source = "";
+		if (control == null) {
+			if (getDenominator() == 100) {
+				if (getOffset() == 0) {
+					// FormAttachment (int numerator)
+					source += getNumerator();
+				} else {
+					// FormAttachment (int numerator, int offset)
+					source += getNumerator() + ", " + getOffset();
+				}
+			} else {
+				// FormAttachment (int numerator, int denominator, int offset)
+				source += getNumerator() + ", " + getDenominator() + ", " + getOffset();
+			}
+		} else {
+			String referenceExpression = getReferenceExpression_ensureFormDataVisible(control);
+			if (getAlignment() == m_side.getOppositeSide().getFormSide()) {
+				if (getOffset() == 0) {
+					// FormAttachment (Control control)
+					source += referenceExpression;
+				} else {
+					// FormAttachment (Control control, int offset)
+					source += referenceExpression + ", " + getOffset();
+				}
+			} else {
+				// FormAttachment (Control control, int offset, int alignment)
+				source +=
+						referenceExpression
+						+ ", "
+						+ getOffset()
+						+ ", "
+						+ FormLayoutUtils.getAlignmentSource(getAlignment());
+			}
+		}
+		setConstructorArguments(source, control);
+	}
+
+	private String getReferenceExpression_ensureFormDataVisible(ControlInfo control) throws Exception {
+		FormDataInfo layoutData = (FormDataInfo) getParent();
+		StatementTarget statementTarget =
+				JavaInfoUtils.getStatementTarget_whenAllCreated(ImmutableList.of(layoutData, control));
+		String referenceExpression =
+				control.getVariableSupport().getReferenceExpression(new NodeTarget(statementTarget));
+		moveStatement(this, statementTarget);
+		return referenceExpression;
+	}
+
+	private void moveStatement(JavaInfo javaInfo, StatementTarget statementTarget) throws Exception {
+		ConstructorCreationSupport creationSupport =
+				(ConstructorCreationSupport) javaInfo.getCreationSupport();
+		ClassInstanceCreation cic = creationSupport.getCreation();
+		getEditor().moveStatement(AstNodeUtils.getEnclosingStatement(cic), statementTarget);
+	}
+
+	private void setConstructorArguments(final String source, ControlInfo control) throws Exception {
+		ConstructorCreationSupport creationSupport = (ConstructorCreationSupport) getCreationSupport();
+		ClassInstanceCreation cic = creationSupport.getCreation();
+		getEditor().replaceCreationArguments(cic, ImmutableList.of(source));
+		if (control != null) {
+			replaceFormDataQualifier(cic, control);
+		}
+		setCreationSupport(new ConstructorCreationSupport(cic));
+	}
+
+	private void replaceFormDataQualifier(ClassInstanceCreation cic, ControlInfo control)
+			throws Exception {
+		Assignment formDataAssignment = (Assignment) cic.getParent();
+		QualifiedName formDataAssignmentLeft = (QualifiedName) formDataAssignment.getLeftHandSide();
+		FormDataInfo layoutData = (FormDataInfo) getParent();
+		StatementTarget statementTarget =
+				JavaInfoUtils.getStatementTarget_whenAllCreated(ImmutableList.of(layoutData, control));
+		String referenceExpression =
+				layoutData.getVariableSupport().getReferenceExpression(new NodeTarget(statementTarget));
+		getEditor().replaceExpression(formDataAssignmentLeft.getQualifier(), referenceExpression);
+	}
+
+	/**
+	 * Does materializing if needed.
+	 */
+	private void materialize() throws Exception {
+		if (isVirtual()) {
+			((VirtualFormAttachmentVariableSupport) getVariableSupport()).materialize();
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Misc
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		final String result[] = new String[]{""};
+		if (isVirtual()) {
+			return result[0] += "(none)";
+		}
+		ExecutionUtils.runIgnore(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				ControlInfo control = getControl();
+				int offset = getOffset();
+				if (control == null) {
+					result[0] += "(" + getNumerator();
+					int denominator = getDenominator();
+					if (denominator != 100) {
+						result[0] += ", " + denominator;
+					}
+					if (offset != 0 || denominator != 100) {
+						result[0] += ", " + offset;
+					}
+					result[0] += ")";
+				} else {
+					result[0] += "(" + control.getVariableSupport().getTitle() + ", " + offset + ")";
+				}
+			}
+		});
+		return result[0];
+	}
+
+	/**
+	 * @return <code>true</code> if given alignment is suitable for this attachment.
+	 */
+	private boolean isValidAlignment(int alignment) {
+		if (alignment != SWT.CENTER) {
+			boolean b1 = PlacementUtils.isHorizontalSide(getSide().getEngineSide());
+			boolean b2 = PlacementUtils.isHorizontalSide(FormLayoutUtils.convertSwtAlignment(alignment));
+			return b1 == b2;
+		}
+		return true;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Move in tree
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void adjustAfterComponentMove() throws Exception {
+		write();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Clipboard support
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FormAttachmentClipboardInfo getClipboardInfo() {
+		if (isVirtual()) {
+			return null;
+		}
+		FormAttachmentClipboardInfo info = new FormAttachmentClipboardInfo();
+		info.numerator = getNumerator();
+		info.denominator = getDenominator();
+		info.offset = getOffset();
+		ControlInfo targetControl = getControl();
+		if (targetControl != null) {
+			CompositeInfo parent = (CompositeInfo) targetControl.getParent();
+			info.controlID = parent.getChildrenControls().indexOf(targetControl);
+		}
+		info.alignment = getAlignment();
+		return info;
+	}
+
+	public void applyClipboardInfo(ControlInfo thisControl, FormAttachmentClipboardInfo info)
+			throws Exception {
+		if (info == null) {
+			return;
+		}
+		setNumerator(info.numerator);
+		setDenominator(info.denominator);
+		setOffset(info.offset);
+		setAlignment(info.alignment);
+		if (info.controlID != -1) {
+			CompositeInfo parent = (CompositeInfo) thisControl.getParent();
+			ControlInfo targetControl = parent.getChildrenControls().get(info.controlID);
+			setControl(targetControl);
+		}
+		write();
+	}
+
+	static class FormAttachmentClipboardInfo implements Serializable {
+		private static final long serialVersionUID = 0L;
+		int numerator;
+		int denominator;
+		int offset;
+		int controlID = -1;
+		int alignment;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/form/FormDataInfo.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/form/FormDataInfo.java
index eaac678cf..12c268f79 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/form/FormDataInfo.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/form/FormDataInfo.java
@@ -234,12 +234,12 @@ public void setValue(Object value) throws Exception {
 		};
 		Collection<?> selectedProperties = CollectionUtils.select(Arrays.asList(attachment.getProperties()),
 				new Predicate() {
-					@Override
-					public boolean evaluate(Object object) {
-						Property property = (Property) object;
-						return !property.getTitle().equals("Class") && !property.getTitle().equals("Constructor");
-					}
-				});
+			@Override
+			public boolean evaluate(Object object) {
+				Property property = (Property) object;
+				return !property.getTitle().equals("Class") && !property.getTitle().equals("Constructor");
+			}
+		});
 		attachmentProperty.setProperties(selectedProperties.toArray(new Property[selectedProperties.size()]));
 		return attachmentProperty;
 	}
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/form/FormLayoutInfo.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/form/FormLayoutInfo.java
index 5876ca56b..156ec5225 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/form/FormLayoutInfo.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/form/FormLayoutInfo.java
@@ -56,383 +56,383 @@
  * @coverage swt.model.layout.form
  */
 public final class FormLayoutInfo extends LayoutInfo implements IFormLayoutInfo<ControlInfo> {
-  private final FormLayoutInfoImpl<ControlInfo> impl;
-  private final FormLayoutPreferences<ControlInfo> preferences;
+	private final FormLayoutInfoImpl<ControlInfo> impl;
+	private final FormLayoutPreferences<ControlInfo> preferences;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FormLayoutInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-    preferences = new FormLayoutPreferences<ControlInfo>(this, description.getToolkit());
-    addBroadcastListeners();
-    impl =
-        getPreferences().useClassic()
-            ? new FormLayoutInfoImplClassic<ControlInfo>(this)
-            : new FormLayoutInfoImplAutomatic<ControlInfo>(this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FormLayoutInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+		preferences = new FormLayoutPreferences<ControlInfo>(this, description.getToolkit());
+		addBroadcastListeners();
+		impl =
+				getPreferences().useClassic()
+				? new FormLayoutInfoImplClassic<ControlInfo>(this)
+						: new FormLayoutInfoImplAutomatic<ControlInfo>(this);
+	}
 
-  private void addBroadcastListeners() {
-    addBroadcastListener(new ObjectEventListener() {
-      @Override
-      public void addContextMenu(List<? extends ObjectInfo> objects,
-          ObjectInfo object,
-          IMenuManager manager) throws Exception {
-        if (isManagedObject(object)) {
-          ControlInfo control = (ControlInfo) object;
-          contributeControlContextMenu(manager, control);
-        }
-      }
-    });
-  }
+	private void addBroadcastListeners() {
+		addBroadcastListener(new ObjectEventListener() {
+			@Override
+			public void addContextMenu(List<? extends ObjectInfo> objects,
+					ObjectInfo object,
+					IMenuManager manager) throws Exception {
+				if (isManagedObject(object)) {
+					ControlInfo control = (ControlInfo) object;
+					contributeControlContextMenu(manager, control);
+				}
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // LayoutInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link FormDataInfo} associated with given {@link ControlInfo}.
-   */
-  public static FormDataInfo getFormData(ControlInfo control) {
-    return (FormDataInfo) getLayoutData(control);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// LayoutInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link FormDataInfo} associated with given {@link ControlInfo}.
+	 */
+	public static FormDataInfo getFormData(ControlInfo control) {
+		return (FormDataInfo) getLayoutData(control);
+	}
 
-  @Override
-  protected Object getDefaultVirtualDataObject() throws Exception {
-    return FormLayoutSupport.createFormData();
-  }
+	@Override
+	protected Object getDefaultVirtualDataObject() throws Exception {
+		return FormLayoutSupport.createFormData();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Context menu
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void contributeControlContextMenu(IMenuManager manager, final ControlInfo control) {
-    // order
-    {
-      List<ControlInfo> controls = getComposite().getChildrenControls();
-      new OrderingSupport(controls, control).contributeActions(manager);
-    }
-    // auto-size
-    {
-      IAction action =
-          new ObjectInfoAction(control, ModelMessages.FormLayoutInfo_autoSize,
-              Activator.getImage("info/layout/FormLayout/fit_to_size.png")) {
-            @Override
-            protected void runEx() throws Exception {
-              doAutoSize(control);
-            }
-          };
-      manager.appendToGroup(IContextMenuConstants.GROUP_CONSTRAINTS, action);
-    }
-    // pre-defined anchors
-    {
-      IMenuManager predefinedMenuManager =
-          new MenuManager(ModelMessages.FormLayoutInfo_quickConstraints);
-      manager.appendToGroup(IContextMenuConstants.GROUP_CONSTRAINTS, predefinedMenuManager);
-      new PredefinedAnchorsActions<ControlInfo>(this).contributeActions(
-          control,
-          predefinedMenuManager);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Context menu
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void contributeControlContextMenu(IMenuManager manager, final ControlInfo control) {
+		// order
+		{
+			List<ControlInfo> controls = getComposite().getChildrenControls();
+			new OrderingSupport(controls, control).contributeActions(manager);
+		}
+		// auto-size
+		{
+			IAction action =
+					new ObjectInfoAction(control, ModelMessages.FormLayoutInfo_autoSize,
+							Activator.getImage("info/layout/FormLayout/fit_to_size.png")) {
+				@Override
+				protected void runEx() throws Exception {
+					doAutoSize(control);
+				}
+			};
+			manager.appendToGroup(IContextMenuConstants.GROUP_CONSTRAINTS, action);
+		}
+		// pre-defined anchors
+		{
+			IMenuManager predefinedMenuManager =
+					new MenuManager(ModelMessages.FormLayoutInfo_quickConstraints);
+			manager.appendToGroup(IContextMenuConstants.GROUP_CONSTRAINTS, predefinedMenuManager);
+			new PredefinedAnchorsActions<ControlInfo>(this).contributeActions(
+					control,
+					predefinedMenuManager);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Autosize
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void doAutoSize(ControlInfo control) throws Exception {
-    // horizontal dimension
-    doAutoSize(
-        getAttachment(control, IPositionConstants.LEFT),
-        getAttachment(control, IPositionConstants.RIGHT));
-    // vertical dimension
-    doAutoSize(
-        getAttachment(control, IPositionConstants.TOP),
-        getAttachment(control, IPositionConstants.BOTTOM));
-    // clear FormData properties
-    FormDataInfo formData = getFormData(control);
-    formData.getPropertyByTitle("width").setValue(Property.UNKNOWN_VALUE);
-    formData.getPropertyByTitle("height").setValue(Property.UNKNOWN_VALUE);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Autosize
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void doAutoSize(ControlInfo control) throws Exception {
+		// horizontal dimension
+		doAutoSize(
+				getAttachment(control, IPositionConstants.LEFT),
+				getAttachment(control, IPositionConstants.RIGHT));
+		// vertical dimension
+		doAutoSize(
+				getAttachment(control, IPositionConstants.TOP),
+				getAttachment(control, IPositionConstants.BOTTOM));
+		// clear FormData properties
+		FormDataInfo formData = getFormData(control);
+		formData.getPropertyByTitle("width").setValue(Property.UNKNOWN_VALUE);
+		formData.getPropertyByTitle("height").setValue(Property.UNKNOWN_VALUE);
+	}
 
-  private void doAutoSize(FormAttachmentInfo leading, FormAttachmentInfo trailing) throws Exception {
-    // if either leading or trailing side is not attached, don't need to do anything
-    if (!(leading.isVirtual() || trailing.isVirtual())) {
-      // if attached to trailing, clear leading attachment
-      if (leading.isParentTrailing() || trailing.getControl() != null && trailing.getOffset() <= 0) {
-        leading.delete();
-      } else {
-        trailing.delete();
-      }
-    }
-  }
+	private void doAutoSize(FormAttachmentInfo leading, FormAttachmentInfo trailing) throws Exception {
+		// if either leading or trailing side is not attached, don't need to do anything
+		if (!(leading.isVirtual() || trailing.isVirtual())) {
+			// if attached to trailing, clear leading attachment
+			if (leading.isParentTrailing() || trailing.getControl() != null && trailing.getOffset() <= 0) {
+				leading.delete();
+			} else {
+				trailing.delete();
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void commandMove(ControlInfo control, ControlInfo nextControl) throws Exception {
-    command_MOVE(control, nextControl);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void commandMove(ControlInfo control, ControlInfo nextControl) throws Exception {
+		command_MOVE(control, nextControl);
+	}
 
-  @Override
-  public void commandCreate(ControlInfo control, ControlInfo nextControl) throws Exception {
-    command_CREATE(control, nextControl);
-  }
+	@Override
+	public void commandCreate(ControlInfo control, ControlInfo nextControl) throws Exception {
+		command_CREATE(control, nextControl);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Copy/Paste
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void clipboardCopy_addCompositeCommands(List<ClipboardCommand> commands)
-      throws Exception {
-    // first of all, add all control commands
-    for (ControlInfo control : getComposite().getChildrenControls()) {
-      if (!JavaInfoUtils.isImplicitlyCreated(control)) {
-        commands.add(new LayoutClipboardCommand<FormLayoutInfo>(control) {
-          private static final long serialVersionUID = 0L;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Copy/Paste
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void clipboardCopy_addCompositeCommands(List<ClipboardCommand> commands)
+			throws Exception {
+		// first of all, add all control commands
+		for (ControlInfo control : getComposite().getChildrenControls()) {
+			if (!JavaInfoUtils.isImplicitlyCreated(control)) {
+				commands.add(new LayoutClipboardCommand<FormLayoutInfo>(control) {
+					private static final long serialVersionUID = 0L;
 
-          @Override
-          protected void add(FormLayoutInfo layout, ControlInfo control) throws Exception {
-            layout.command_CREATE(control, null);
-          }
-        });
-      }
-    }
-    // add apply attachments info commands
-    List<ControlInfo> childrenControls = getComposite().getChildrenControls();
-    for (int i = 0; i < childrenControls.size(); i++) {
-      ControlInfo control = childrenControls.get(i);
-      if (!JavaInfoUtils.isImplicitlyCreated(control)) {
-        FormDataInfo formData = (FormDataInfo) getLayoutData(control);
-        final FormAttachmentClipboardInfo left =
-            formData.getAttachment(IPositionConstants.LEFT).getClipboardInfo();
-        final FormAttachmentClipboardInfo right =
-            formData.getAttachment(IPositionConstants.RIGHT).getClipboardInfo();
-        final FormAttachmentClipboardInfo top =
-            formData.getAttachment(IPositionConstants.TOP).getClipboardInfo();
-        final FormAttachmentClipboardInfo bottom =
-            formData.getAttachment(IPositionConstants.BOTTOM).getClipboardInfo();
-        final int index = i;
-        commands.add(new ComponentClipboardCommand<CompositeInfo>() {
-          private static final long serialVersionUID = 0L;
+					@Override
+					protected void add(FormLayoutInfo layout, ControlInfo control) throws Exception {
+						layout.command_CREATE(control, null);
+					}
+				});
+			}
+		}
+		// add apply attachments info commands
+		List<ControlInfo> childrenControls = getComposite().getChildrenControls();
+		for (int i = 0; i < childrenControls.size(); i++) {
+			ControlInfo control = childrenControls.get(i);
+			if (!JavaInfoUtils.isImplicitlyCreated(control)) {
+				FormDataInfo formData = (FormDataInfo) getLayoutData(control);
+				final FormAttachmentClipboardInfo left =
+						formData.getAttachment(IPositionConstants.LEFT).getClipboardInfo();
+				final FormAttachmentClipboardInfo right =
+						formData.getAttachment(IPositionConstants.RIGHT).getClipboardInfo();
+				final FormAttachmentClipboardInfo top =
+						formData.getAttachment(IPositionConstants.TOP).getClipboardInfo();
+				final FormAttachmentClipboardInfo bottom =
+						formData.getAttachment(IPositionConstants.BOTTOM).getClipboardInfo();
+				final int index = i;
+				commands.add(new ComponentClipboardCommand<CompositeInfo>() {
+					private static final long serialVersionUID = 0L;
 
-          @Override
-          public void execute(CompositeInfo _thisComposite) throws Exception {
-            ControlInfo control = _thisComposite.getChildrenControls().get(index);
-            FormDataInfo _thisFormData = (FormDataInfo) getLayoutData(control);
-            _thisFormData.getAttachment(IPositionConstants.LEFT).applyClipboardInfo(control, left);
-            _thisFormData.getAttachment(IPositionConstants.RIGHT).applyClipboardInfo(control, right);
-            _thisFormData.getAttachment(IPositionConstants.TOP).applyClipboardInfo(control, top);
-            _thisFormData.getAttachment(IPositionConstants.BOTTOM).applyClipboardInfo(
-                control,
-                bottom);
-          }
-        });
-      }
-    }
-  }
+					@Override
+					public void execute(CompositeInfo _thisComposite) throws Exception {
+						ControlInfo control = _thisComposite.getChildrenControls().get(index);
+						FormDataInfo _thisFormData = (FormDataInfo) getLayoutData(control);
+						_thisFormData.getAttachment(IPositionConstants.LEFT).applyClipboardInfo(control, left);
+						_thisFormData.getAttachment(IPositionConstants.RIGHT).applyClipboardInfo(control, right);
+						_thisFormData.getAttachment(IPositionConstants.TOP).applyClipboardInfo(control, top);
+						_thisFormData.getAttachment(IPositionConstants.BOTTOM).applyClipboardInfo(
+								control,
+								bottom);
+					}
+				});
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Setting new layout
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void onSet() throws Exception {
-    List<ControlInfo> controls = getControls();
-    Rectangle parentArea = getComposite().getClientArea();
-    for (ControlInfo control : controls) {
-      Rectangle controlBounds = control.getModelBounds();
-      Dimension preferredSize = control.getPreferredSize();
-      int x = controlBounds.x - parentArea.x;
-      int y = controlBounds.y - parentArea.y;
-      int width = controlBounds.width;
-      int height = controlBounds.height;
-      setAttachmentOffset(control, IPositionConstants.LEFT, x);
-      setAttachmentOffset(control, IPositionConstants.TOP, y);
-      if (width != preferredSize.width) {
-        setAttachmentOffset(control, IPositionConstants.RIGHT, x + width);
-      }
-      if (height != preferredSize.height) {
-        setAttachmentOffset(control, IPositionConstants.BOTTOM, y + height);
-      }
-    }
-    // install preference change listener to be able to re-parse on layout mode change (classic or auto)
-    preferences.addPropertyChangeListener();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Setting new layout
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void onSet() throws Exception {
+		List<ControlInfo> controls = getControls();
+		Rectangle parentArea = getComposite().getClientArea();
+		for (ControlInfo control : controls) {
+			Rectangle controlBounds = control.getModelBounds();
+			Dimension preferredSize = control.getPreferredSize();
+			int x = controlBounds.x - parentArea.x;
+			int y = controlBounds.y - parentArea.y;
+			int width = controlBounds.width;
+			int height = controlBounds.height;
+			setAttachmentOffset(control, IPositionConstants.LEFT, x);
+			setAttachmentOffset(control, IPositionConstants.TOP, y);
+			if (width != preferredSize.width) {
+				setAttachmentOffset(control, IPositionConstants.RIGHT, x + width);
+			}
+			if (height != preferredSize.height) {
+				setAttachmentOffset(control, IPositionConstants.BOTTOM, y + height);
+			}
+		}
+		// install preference change listener to be able to re-parse on layout mode change (classic or auto)
+		preferences.addPropertyChangeListener();
+	}
 
-  @Override
-  public void setAttachmentOffset(ControlInfo control, int side, int offset) throws Exception {
-    FormDataInfo dataInfo = (FormDataInfo) getLayoutData(control);
-    FormAttachmentInfo attachment = dataInfo.getAttachment(side);
-    attachment.setNumerator(0);
-    attachment.setDenominator(100);
-    attachment.setOffset(offset);
-    attachment.write();
-  }
+	@Override
+	public void setAttachmentOffset(ControlInfo control, int side, int offset) throws Exception {
+		FormDataInfo dataInfo = (FormDataInfo) getLayoutData(control);
+		FormAttachmentInfo attachment = dataInfo.getAttachment(side);
+		attachment.setNumerator(0);
+		attachment.setDenominator(100);
+		attachment.setOffset(offset);
+		attachment.write();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public FormLayoutInfoImpl<ControlInfo> getImpl() {
-    return impl;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public FormLayoutInfoImpl<ControlInfo> getImpl() {
+		return impl;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Misc/Helpers
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link FormAttachment} instance for given <code>side</code> of widget.
-   */
-  private FormAttachmentInfo getAttachment(ControlInfo widget, int side) throws Exception {
-    FormDataInfo layoutData = getFormData(widget);
-    return layoutData.getAttachment(side);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Misc/Helpers
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link FormAttachment} instance for given <code>side</code> of widget.
+	 */
+	private FormAttachmentInfo getAttachment(ControlInfo widget, int side) throws Exception {
+		FormDataInfo layoutData = getFormData(widget);
+		return layoutData.getAttachment(side);
+	}
 
-  /**
-   * @return the size of the container excluding and client area insets.
-   */
-  @Override
-  public final Dimension getContainerSize() {
-    AbstractComponentInfo composite = getComposite();
-    Rectangle compositeBounds = composite.getModelBounds().getCopy();
-    Insets clientAreaInsets = composite.getClientAreaInsets();
-    compositeBounds.crop(clientAreaInsets);
-    Insets marginInsets = FormUtils.getLayoutMargins(this);
-    return compositeBounds.crop(marginInsets).getSize();
-  }
+	/**
+	 * @return the size of the container excluding and client area insets.
+	 */
+	@Override
+	public final Dimension getContainerSize() {
+		AbstractComponentInfo composite = getComposite();
+		Rectangle compositeBounds = composite.getModelBounds().getCopy();
+		Insets clientAreaInsets = composite.getClientAreaInsets();
+		compositeBounds.crop(clientAreaInsets);
+		Insets marginInsets = FormUtils.getLayoutMargins(this);
+		return compositeBounds.crop(marginInsets).getSize();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Quick Anchors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Anchors control at current place to parent with given sides. If side omitted and if relative,
-   * then anchors the missing side to percent, otherwise deletes attachment.
-   */
-  @Override
-  public void setQuickAnchors(ControlInfo widget, int sides, boolean relative) throws Exception {
-    setQuickAnchor(
-        widget,
-        IPositionConstants.LEFT,
-        relative,
-        (sides & IPositionConstants.LEFT) != 0);
-    setQuickAnchor(
-        widget,
-        IPositionConstants.RIGHT,
-        relative,
-        (sides & IPositionConstants.RIGHT) != 0);
-    setQuickAnchor(widget, IPositionConstants.TOP, relative, (sides & IPositionConstants.TOP) != 0);
-    setQuickAnchor(
-        widget,
-        IPositionConstants.BOTTOM,
-        relative,
-        (sides & IPositionConstants.BOTTOM) != 0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Quick Anchors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Anchors control at current place to parent with given sides. If side omitted and if relative,
+	 * then anchors the missing side to percent, otherwise deletes attachment.
+	 */
+	@Override
+	public void setQuickAnchors(ControlInfo widget, int sides, boolean relative) throws Exception {
+		setQuickAnchor(
+				widget,
+				IPositionConstants.LEFT,
+				relative,
+				(sides & IPositionConstants.LEFT) != 0);
+		setQuickAnchor(
+				widget,
+				IPositionConstants.RIGHT,
+				relative,
+				(sides & IPositionConstants.RIGHT) != 0);
+		setQuickAnchor(widget, IPositionConstants.TOP, relative, (sides & IPositionConstants.TOP) != 0);
+		setQuickAnchor(
+				widget,
+				IPositionConstants.BOTTOM,
+				relative,
+				(sides & IPositionConstants.BOTTOM) != 0);
+	}
 
-  private void setQuickAnchor(ControlInfo widget, int side, boolean relative, boolean hasSide)
-      throws Exception {
-    if (hasSide) {
-      anchorToParent(widget, side, side);
-    } else {
-      if (relative) {
-        anchorToParentAsPercent(widget, side);
-      } else {
-        FormAttachmentInfo attachment = getAttachment(widget, side);
-        if (!attachment.isVirtual()) {
-          attachment.delete();
-        }
-      }
-    }
-  }
+	private void setQuickAnchor(ControlInfo widget, int side, boolean relative, boolean hasSide)
+			throws Exception {
+		if (hasSide) {
+			anchorToParent(widget, side, side);
+		} else {
+			if (relative) {
+				anchorToParentAsPercent(widget, side);
+			} else {
+				FormAttachmentInfo attachment = getAttachment(widget, side);
+				if (!attachment.isVirtual()) {
+					attachment.delete();
+				}
+			}
+		}
+	}
 
-  @Override
-  public void anchorToParent(ControlInfo control, int controlSide, int parentSide) throws Exception {
-    FormAttachmentInfo attachment = getAttachment(control, controlSide);
-    attachment.setControl(null);
-    attachment.setDenominator(100);
-    boolean isHorizontal = PlacementUtils.isHorizontalSide(controlSide);
-    Transposer t = new Transposer(!isHorizontal);
-    int margin =
-        isHorizontal ? FormUtils.getLayoutMarginLeft(this) : FormUtils.getLayoutMarginTop(this);
-    org.eclipse.draw2d.geometry.Rectangle controlBounds = t.t(control.getModelBounds());
-    Dimension containerSize = t.t(getContainerSize());
-    int offset = 0;
-    if (!PlacementUtils.isTrailingSide(controlSide)) {
-      if (PlacementUtils.isTrailingSide(parentSide)) {
-        attachment.setNumerator(100);
-        offset = -(containerSize.width - controlBounds.x) - margin;
-      } else {
-        attachment.setNumerator(0);
-        offset = controlBounds.x - margin;
-      }
-    } else {
-      if (PlacementUtils.isTrailingSide(parentSide)) {
-        attachment.setNumerator(100);
-        offset = -(containerSize.width - controlBounds.right()) - margin;
-      } else {
-        attachment.setNumerator(0);
-        offset = controlBounds.right() - margin;
-      }
-    }
-    attachment.setOffset(offset);
-    attachment.write();
-  }
+	@Override
+	public void anchorToParent(ControlInfo control, int controlSide, int parentSide) throws Exception {
+		FormAttachmentInfo attachment = getAttachment(control, controlSide);
+		attachment.setControl(null);
+		attachment.setDenominator(100);
+		boolean isHorizontal = PlacementUtils.isHorizontalSide(controlSide);
+		Transposer t = new Transposer(!isHorizontal);
+		int margin =
+				isHorizontal ? FormUtils.getLayoutMarginLeft(this) : FormUtils.getLayoutMarginTop(this);
+		org.eclipse.draw2d.geometry.Rectangle controlBounds = t.t(control.getModelBounds());
+		Dimension containerSize = t.t(getContainerSize());
+		int offset = 0;
+		if (!PlacementUtils.isTrailingSide(controlSide)) {
+			if (PlacementUtils.isTrailingSide(parentSide)) {
+				attachment.setNumerator(100);
+				offset = -(containerSize.width - controlBounds.x) - margin;
+			} else {
+				attachment.setNumerator(0);
+				offset = controlBounds.x - margin;
+			}
+		} else {
+			if (PlacementUtils.isTrailingSide(parentSide)) {
+				attachment.setNumerator(100);
+				offset = -(containerSize.width - controlBounds.right()) - margin;
+			} else {
+				attachment.setNumerator(0);
+				offset = controlBounds.right() - margin;
+			}
+		}
+		attachment.setOffset(offset);
+		attachment.write();
+	}
 
-  @Override
-  public void anchorToParentAsPercent(ControlInfo control, int controlSide) throws Exception {
-    FormAttachmentInfo attachment = getAttachment(control, controlSide);
-    attachment.setControl(null);
-    attachment.setDenominator(100);
-    attachment.setOffset(0);
-    boolean isHorizontal = PlacementUtils.isHorizontalSide(controlSide);
-    Transposer t = new Transposer(!isHorizontal);
-    int margin =
-        isHorizontal ? FormUtils.getLayoutMarginLeft(this) : FormUtils.getLayoutMarginTop(this);
-    org.eclipse.draw2d.geometry.Rectangle controlBounds = t.t(control.getModelBounds());
-    Dimension containerSize = t.t(getContainerSize());
-    if (!PlacementUtils.isTrailingSide(controlSide)) {
-      attachment.setNumerator((int) (100.0 * (controlBounds.x - margin) / containerSize.width));
-    } else {
-      attachment.setNumerator((int) (100.0 * (controlBounds.right() - margin) / containerSize.width));
-    }
-    attachment.write();
-  }
+	@Override
+	public void anchorToParentAsPercent(ControlInfo control, int controlSide) throws Exception {
+		FormAttachmentInfo attachment = getAttachment(control, controlSide);
+		attachment.setControl(null);
+		attachment.setDenominator(100);
+		attachment.setOffset(0);
+		boolean isHorizontal = PlacementUtils.isHorizontalSide(controlSide);
+		Transposer t = new Transposer(!isHorizontal);
+		int margin =
+				isHorizontal ? FormUtils.getLayoutMarginLeft(this) : FormUtils.getLayoutMarginTop(this);
+		org.eclipse.draw2d.geometry.Rectangle controlBounds = t.t(control.getModelBounds());
+		Dimension containerSize = t.t(getContainerSize());
+		if (!PlacementUtils.isTrailingSide(controlSide)) {
+			attachment.setNumerator((int) (100.0 * (controlBounds.x - margin) / containerSize.width));
+		} else {
+			attachment.setNumerator((int) (100.0 * (controlBounds.right() - margin) / containerSize.width));
+		}
+		attachment.write();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Preferences
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public FormLayoutPreferences<ControlInfo> getPreferences() {
-    return preferences;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Preferences
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public FormLayoutPreferences<ControlInfo> getPreferences() {
+		return preferences;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Misc
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public IResource getUnderlyingResource() throws Exception {
-    return getEditor().getModelUnit().getUnderlyingResource();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Misc
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public IResource getUnderlyingResource() throws Exception {
+		return getEditor().getModelUnit().getUnderlyingResource();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/form/FormLayoutInfoImplAutomatic.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/form/FormLayoutInfoImplAutomatic.java
index 18c0a7c39..78813b199 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/form/FormLayoutInfoImplAutomatic.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/form/FormLayoutInfoImplAutomatic.java
@@ -38,594 +38,594 @@
  * @coverage swt.model.layout.form
  */
 public final class FormLayoutInfoImplAutomatic<C extends IControlInfo>
-    extends
-      FormLayoutInfoImpl<C> implements IAbsoluteLayoutCommands {
-  private final IFormLayoutInfo<C> m_layout;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FormLayoutInfoImplAutomatic(IFormLayoutInfo<C> formLayoutInfo) {
-    m_layout = formLayoutInfo;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Move operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void command_moveToContainer(List<? extends IAbstractComponentInfo> sourceSet,
-      IAbstractComponentInfo nearestBeingSnapped,
-      int side,
-      int distance) throws Exception {
-  }
-
-  public void command_moveAsAttachedToComponent(List<? extends IAbstractComponentInfo> sourceSet,
-      IAbstractComponentInfo nearestBeingSnapped,
-      int sourceSide,
-      IAbstractComponentInfo target,
-      int targetSide,
-      int gap) {
-    String a = FormLayoutUtils.getAlignmentSource(FormLayoutUtils.convertGefSide(sourceSide));
-    String b = FormLayoutUtils.getAlignmentSource(FormLayoutUtils.convertGefSide(targetSide));
-  }
-
-  public void command_moveToPercent(List<? extends IAbstractComponentInfo> workingSet,
-      IAbstractComponentInfo nearestBeingSnapped,
-      int sourceSide,
-      int percent,
-      int gap) {
-    String a = FormLayoutUtils.getAlignmentSource(FormLayoutUtils.convertGefSide(sourceSide));
-  }
-
-  /**
-   * @param bounds
-   *          the new (union) bounds of the widgets.
-   * @param sourceSet
-   *          the set of widgets which the user is dragging.
-   * @param singleSource
-   *          the widget which is nearest to the edge by dragging direction.
-   * @param moveDirection
-   *          LEADING or TRAILING dragging direction.
-   * @param isHorizontal
-   */
-  public void command_moveFreely(Rectangle bounds,
-      List<? extends IAbstractComponentInfo> sourceSet,
-      IAbstractComponentInfo singleSource,
-      int moveDirection,
-      boolean isHorizontal) throws Exception {
-    NeighborInfo leadingNeighbor =
-        findNeighbor(bounds, sourceSet, PlacementInfo.LEADING, isHorizontal);
-    NeighborInfo trailingNeighbor =
-        findNeighbor(bounds, sourceSet, PlacementInfo.TRAILING, isHorizontal);
-    int newAlignmentHint =
-        leadingNeighbor.distance < trailingNeighbor.distance
-            ? PlacementInfo.LEADING
-            : PlacementInfo.TRAILING;
-    // single
-    AlignmentInfo currentAlignment = getAlignment(singleSource, isHorizontal);
-    // non-resizable
-    if (!currentAlignment.resizable) {
-      // TODO: pay attention to moving direction
-      // TODO: pay attention on existing alignment
-      attachNonResizableFreely(
-          singleSource,
-          bounds,
-          leadingNeighbor,
-          trailingNeighbor,
-          newAlignmentHint,
-          isHorizontal);
-    } else {
-      attachResizableFreely(singleSource, bounds, leadingNeighbor, trailingNeighbor, isHorizontal);
-    }
-    keepWidgetsPositions(sourceSet, isHorizontal);
-    optimizeLayout();
-  }
-
-  private void optimizeLayout() {
-    // TODO:
-  }
-
-  private void keepWidgetsPositions(List<? extends IAbstractComponentInfo> sourceSet,
-      boolean isHorizontal) throws Exception {
-    List<AttachmentDef> affected = findAttachedToSource(sourceSet, isHorizontal);
-    for (AttachmentDef attachmentDef : affected) {
-    }
-  }
-
-  private List<AttachmentDef> findAttachedToSource(List<? extends IAbstractComponentInfo> sourceSet,
-      boolean isHorizontal) throws Exception {
-    List<AttachmentDef> affected = Lists.newArrayList();
-    int leadingSide = PlacementUtils.getSide(isHorizontal, true);
-    int trailingSide = PlacementUtils.getSide(isHorizontal, false);
-    List<IAbstractComponentInfo> remainingComponents = getRemainingComponents(sourceSet);
-    for (IAbstractComponentInfo source : remainingComponents) {
-      for (IAbstractComponentInfo target : sourceSet) {
-        checkAttachedToComponent(source, target, leadingSide, affected);
-        checkAttachedToComponent(source, target, trailingSide, affected);
-      }
-    }
-    return affected;
-  }
-
-  private void checkAttachedToComponent(IAbstractComponentInfo source,
-      IAbstractComponentInfo possibleTarget,
-      int checkingSide,
-      List<AttachmentDef> resultList) throws Exception {
-    if (isAttached(source, checkingSide)) {
-      IFormAttachmentInfo<C> attachment = getAttachment(source, checkingSide);
-      if (attachment.getControl() == possibleTarget) {
-        AttachmentDef def = new AttachmentDef();
-        def.source = source;
-        def.target = possibleTarget;
-        def.sourceSide = checkingSide;
-        def.targetSide = FormLayoutUtils.convertSwtAlignment(attachment.getAlignment());
-        resultList.add(def);
-      }
-    }
-  }
-
-  private void attachResizableFreely(IAbstractComponentInfo source,
-      Rectangle bounds,
-      NeighborInfo leadingNeighbor,
-      NeighborInfo trailingNeighbor,
-      boolean isHorizontal) throws Exception {
-    int leadingSide = PlacementUtils.getSide(isHorizontal, true);
-    int trailingSide = PlacementUtils.getSide(isHorizontal, false);
-    if (leadingNeighbor.neighbor == null) {
-      attachResizableToContainer(source, bounds, leadingSide);
-    } else {
-      IAbstractComponentInfo target = leadingNeighbor.neighbor;
-      int offset = leadingNeighbor.distance;
-      attachSideToComponent(source, target, offset, leadingSide, trailingSide);
-    }
-    if (trailingNeighbor.neighbor == null) {
-      attachResizableToContainer(source, bounds, PlacementUtils.getSide(isHorizontal, false));
-    } else {
-      IAbstractComponentInfo target = trailingNeighbor.neighbor;
-      int offset = -trailingNeighbor.distance;
-      attachSideToComponent(source, target, offset, trailingSide, leadingSide);
-    }
-  }
-
-  private void attachResizableToContainer(IAbstractComponentInfo source,
-      Rectangle bounds,
-      int checkingSide) throws Exception {
-    boolean isHorizontal = PlacementUtils.isHorizontalSide(checkingSide);
-    int targetSide = getTargetContainerSide(source, checkingSide);
-    boolean isLeadingSide = PlacementUtils.isLeadingSide(checkingSide);
-    int containerSize = PlacementUtils.getSideSize(m_layout.getContainerSize(), targetSide);
-    int offset;
-    if (checkingSide == targetSide) {
-      if (isLeadingSide) {
-        offset = isHorizontal ? bounds.x : bounds.y;
-      } else {
-        offset = -(containerSize - (isHorizontal ? bounds.right() : bounds.bottom()));
-      }
-    } else {
-      if (isLeadingSide) {
-        offset = -(containerSize - (isHorizontal ? bounds.x : bounds.y));
-      } else {
-        offset = isHorizontal ? bounds.right() : bounds.bottom();
-      }
-    }
-    attachSideToContainer(source, offset, checkingSide, targetSide);
-  }
-
-  private int getTargetContainerSide(IAbstractComponentInfo source, int side) throws Exception {
-    Assert.isLegal(isAttached(source, side));
-    IFormAttachmentInfo<C> attachment = getAttachment(source, side);
-    Assert.isLegal(attachment.getControl() == null);
-    int numerator = attachment.getNumerator();
-    boolean isTrailing = numerator == 100;
-    boolean isHorizontal = PlacementUtils.isHorizontalSide(side);
-    return PlacementUtils.getSide(isHorizontal, !isTrailing);
-  }
-
-  private void attachNonResizableFreely(IAbstractComponentInfo source,
-      Rectangle bounds,
-      NeighborInfo leadingNeighbor,
-      NeighborInfo trailingNeighbor,
-      int alignment,
-      boolean isHorizontal) throws Exception {
-    int leadingSide = PlacementUtils.getSide(isHorizontal, true);
-    int trailingSide = PlacementUtils.getSide(isHorizontal, false);
-    boolean isLeadingAlignment = alignment == PlacementInfo.LEADING;
-    int targetContainerSide = PlacementUtils.getSide(isHorizontal, isLeadingAlignment);
-    boolean leadingAttached = isAttached(source, leadingSide);
-    boolean trailingAttached = isAttached(source, trailingSide);
-    if (leadingAttached ^ trailingAttached || !leadingAttached && !trailingAttached) {
-      // attached by single side or none
-      if (isLeadingAlignment) {
-        if (leadingNeighbor.neighbor == null) {
-          attachSideToContainer(source, leadingNeighbor.distance, leadingSide, targetContainerSide);
-        } else {
-          attachSideToComponent(
-              source,
-              leadingNeighbor.neighbor,
-              leadingNeighbor.distance,
-              leadingSide,
-              PlacementUtils.getOppositeSide(leadingSide));
-        }
-        deleteAttachment(source, trailingSide);
-      } else {
-        if (trailingNeighbor.neighbor == null) {
-          attachSideToContainer(
-              source,
-              -trailingNeighbor.distance,
-              trailingSide,
-              targetContainerSide);
-        } else {
-          attachSideToComponent(
-              source,
-              trailingNeighbor.neighbor,
-              -trailingNeighbor.distance,
-              trailingSide,
-              PlacementUtils.getOppositeSide(trailingSide));
-        }
-        deleteAttachment(source, leadingSide);
-      }
-    } else {
-      // both sides
-      int offset = isLeadingAlignment ? leadingNeighbor.distance : -trailingNeighbor.distance;
-      int width = PlacementUtils.getSideSize(source.getModelBounds().getSize(), leadingSide);
-      NeighborInfo targetNeighbor = isLeadingAlignment ? leadingNeighbor : trailingNeighbor;
-      if (targetNeighbor.neighbor == null) {
-        {
-          int widthDelta = isLeadingAlignment ? 0 : -width;
-          attachSideToContainer(source, offset + widthDelta, leadingSide, targetContainerSide);
-        }
-        {
-          int widthDelta = isLeadingAlignment ? width : 0;
-          attachSideToContainer(source, offset + widthDelta, trailingSide, targetContainerSide);
-        }
-      } else {
-        {
-          int widthDelta = isLeadingAlignment ? 0 : -width;
-          attachSideToComponent(
-              source,
-              targetNeighbor.neighbor,
-              offset + widthDelta,
-              leadingSide,
-              isLeadingAlignment ? PlacementUtils.getOppositeSide(leadingSide) : leadingSide);
-        }
-        {
-          int widthDelta = isLeadingAlignment ? width : 0;
-          attachSideToComponent(
-              source,
-              targetNeighbor.neighbor,
-              offset + widthDelta,
-              trailingSide,
-              isLeadingAlignment ? trailingSide : PlacementUtils.getOppositeSide(trailingSide));
-        }
-      }
-    }
-  }
-
-  private NeighborInfo findNeighbor(Rectangle bounds,
-      List<? extends IAbstractComponentInfo> sourceSet,
-      int direction,
-      boolean isHorizontal) {
-    NeighborInfo neighbor = new NeighborInfo(direction);
-    Transposer t = new Transposer(!isHorizontal);
-    Rectangle widgetsBounds = t.t(bounds.getCopy());
-    Interval widgetsWidth = new Interval(widgetsBounds.x, widgetsBounds.width);
-    Interval widgetsHeight = new Interval(widgetsBounds.y, widgetsBounds.height);
-    List<IAbstractComponentInfo> remainingWidgets = getRemainingComponents(sourceSet);
-    for (IAbstractComponentInfo widget : remainingWidgets) {
-      // test where is the neighbor component located: leading or trailing
-      Rectangle possibleNeighborBounds = t.t(getTranslatedBounds(widget));
-      // neighbor should intersect in opposite dimension.
-      Interval possibleNeighborHeight =
-          new Interval(possibleNeighborBounds.y, possibleNeighborBounds.height);
-      if (widgetsHeight.intersects(possibleNeighborHeight)) {
-        // this is possible neighbor, get the most nearest depending on side: leading or trailing
-        Interval possibleNeighborWidth =
-            new Interval(possibleNeighborBounds.x, possibleNeighborBounds.width);
-        if (!possibleNeighborWidth.intersects(widgetsWidth)) {
-          // no overlapping, check the distances
-          if (direction == PlacementInfo.LEADING && possibleNeighborWidth.isLeadingOf(widgetsWidth)) {
-            // leading
-            int distance = widgetsWidth.distance(possibleNeighborWidth.end());
-            if (neighbor.distance > distance) {
-              neighbor.distance = distance;
-              neighbor.neighbor = widget;
-              continue;
-            }
-          } else if (direction == PlacementInfo.TRAILING
-              && possibleNeighborWidth.isTrailingOf(widgetsWidth)) {
-            // trailing
-            int distance = widgetsWidth.distance(possibleNeighborWidth.begin());
-            if (neighbor.distance > distance) {
-              neighbor.distance = distance;
-              neighbor.neighbor = widget;
-              continue;
-            }
-          }
-        }
-      }
-    }
-    if (neighbor.neighbor == null) {
-      // if no one wants to be our neighbor ;-) so get the distance to the container's boundary
-      Dimension containerSize = t.t(m_layout.getContainerSize());
-      neighbor.distance =
-          direction == PlacementInfo.LEADING ? widgetsWidth.begin() : containerSize.width
-              - widgetsWidth.end();
-    }
-    return neighbor;
-  }
-
-  public AlignmentInfo getAlignment(IAbstractComponentInfo widget, boolean isHorizontal)
-      throws Exception {
-    int leadingSide = PlacementUtils.getSide(isHorizontal, true);
-    int trailingSide = PlacementUtils.getSide(isHorizontal, false);
-    boolean attachedLeading = isAttached(widget, leadingSide);
-    boolean attachedTrailing = isAttached(widget, trailingSide);
-    if (!attachedLeading && !attachedTrailing) {
-      // no constraints
-      return new AlignmentInfo(PlacementInfo.LEADING);
-    } else if (attachedLeading && attachedTrailing) {
-      int lEffectiveAlignment = getEffectiveAlignmentForSide(widget, leadingSide);
-      int tEffectiveAlignment = getEffectiveAlignmentForSide(widget, trailingSide);
-      if (lEffectiveAlignment != tEffectiveAlignment) {
-        return new AlignmentInfo(PlacementInfo.LEADING, true);
-      } else {
-        // can be resizable if both edges attached to different percents
-        IFormAttachmentInfo<C> lAttachment = getAttachment(widget, leadingSide);
-        IFormAttachmentInfo<C> tAttachment = getAttachment(widget, trailingSide);
-        if (lAttachment.getNumerator() != tAttachment.getNumerator()) {
-          return new AlignmentInfo(PlacementInfo.LEADING, true);
-        }
-        // indirectly non-resizable
-        return new AlignmentInfo(lEffectiveAlignment);
-      }
-    } else {
-      // attached single side only
-      return new AlignmentInfo(getEffectiveAlignmentForSide(widget, attachedLeading
-          ? leadingSide
-          : trailingSide));
-    }
-  }
-
-  private int getEffectiveAlignmentForSide(IAbstractComponentInfo widget, int side)
-      throws Exception {
-    // go by given side until parent or not attached.
-    IAbstractComponentInfo testedWidget = widget;
-    int testedSide = side;
-    while (true) {
-      if (isAttached(testedWidget, testedSide)) {
-        IFormAttachmentInfo<C> attachment = getAttachment(testedWidget, testedSide);
-        C anchorComponent = attachment.getControl();
-        if (anchorComponent != null) {
-          // another component
-          testedWidget = anchorComponent;
-          testedSide = attachment.getSide().getEngineSide();
-          continue;
-        } else {
-          // container
-          return attachment.getNumerator() > 0 ? PlacementInfo.TRAILING : PlacementInfo.LEADING;
-        }
-      } else {
-        return PlacementUtils.getSidePosition(PlacementUtils.getOppositeSide(testedSide));
-      }
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Misc/Helpers
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private List<IAbstractComponentInfo> getRemainingComponents(List<? extends IAbstractComponentInfo> sourceSet) {
-    List<IAbstractComponentInfo> components = Lists.newArrayList();
-    List<C> allControls = m_layout.getControls();
-    for (C control : allControls) {
-      if (!sourceSet.contains(control)) {
-        components.add(control);
-      }
-    }
-    return components;
-  }
-
-  private Rectangle getUnionRectangle(List<? extends IAbstractComponentInfo> sourceSet) {
-    Rectangle unionRectangle = new Rectangle();
-    for (IAbstractComponentInfo component : sourceSet) {
-      unionRectangle.union(component.getModelBounds());
-    }
-    return unionRectangle;
-  }
-
-  private Rectangle getTranslatedBounds(IAbstractComponentInfo widget) {
-    return PlacementUtils.getTranslatedBounds(
-        m_layout.getComposite().getClientArea().getLocation(),
-        widget);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // "Low-level" attachment manipulations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void attachSideToContainer(IAbstractComponentInfo source,
-      int offset,
-      int sourceSide,
-      int containerSide) throws Exception {
-    int numerator = PlacementUtils.isLeadingSide(containerSide) ? 0 : 100;
-    IFormAttachmentInfo<C> attachment = getAttachment(source, sourceSide);
-    attachment.setControl(null);
-    attachment.setNumerator(numerator);
-    attachment.setDenominator(100);
-    attachment.setOffset(offset);
-    attachment.write();
-  }
-
-  private void attachSideToComponent(IAbstractComponentInfo source,
-      IAbstractComponentInfo target,
-      int offset,
-      int sourceSide,
-      int targetSide) throws Exception {
-    IFormAttachmentInfo<C> attachment = getAttachment(source, sourceSide);
-    attachment.setControl((C) target);
-    attachment.setAlignment(FormLayoutUtils.convertGefSide(targetSide));
-    attachment.setNumerator(0);
-    attachment.setDenominator(100);
-    attachment.setOffset(offset);
-    attachment.write();
-  }
-
-  private void deleteAttachment(IAbstractComponentInfo source, int sourceSide) throws Exception {
-    if (isAttached(source, sourceSide)) {
-      IFormAttachmentInfo<C> attachment = getAttachment(source, sourceSide);
-      attachment.delete();
-    }
-  }
-
-  /**
-   * @return the {@link IFormAttachment} instance for given <code>side</code> of widget.
-   */
-  private final IFormAttachmentInfo<C> getAttachment(IAbstractComponentInfo widget, int side)
-      throws Exception {
-    IFormDataInfo<C> layoutData = (IFormDataInfo<C>) m_layout.getLayoutData2((C) widget);
-    return layoutData.getAttachment(side);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  //	Helper classes
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final class NeighborInfo {
-    final int direction;
-    int distance = PlacementInfo.UNDEFINED_DISTANCE;
-    IAbstractComponentInfo neighbor;
-
-    NeighborInfo(int direction) {
-      this.direction = direction;
-    }
-  }
-  public static final class AlignmentInfo {
-    public final int alignment;
-    public final boolean resizable;
-
-    public AlignmentInfo(int alignment) {
-      this(alignment, false);
-    }
-
-    public AlignmentInfo(int alignment, boolean resizable) {
-      this.alignment = alignment;
-      this.resizable = resizable;
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Obsolete code, is subject to remove
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Layout manipulation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void detach(IAbstractComponentInfo widget, int side) throws Exception {
-    IFormAttachmentInfo<C> attachment = getAttachment(widget, side);
-    // do nothing if it is not exist
-    if (attachment.isVirtual()) {
-      return;
-    }
-    // proceed with detach
-    attachment.delete();
-  }
-
-  // XXX
-  @Override
-  public void attachAbsolute(IAbstractComponentInfo widget, int side, int distance)
-      throws Exception {
-    IFormAttachmentInfo<C> attachment = getAttachment(widget, side);
-    attachment.setControl(null);
-    if (PlacementUtils.isTrailingSide(side)) {
-      attachment.setOffset(-distance);
-      attachment.setNumerator(100);
-    } else {
-      attachment.setOffset(distance);
-      attachment.setNumerator(0);
-    }
-    attachment.write();
-  }
-
-  @Override
-  public void adjustAttachmentOffset(IAbstractComponentInfo widget, int side, int delta)
-      throws Exception {
-    IFormAttachmentInfo<C> attachment = getAttachment(widget, side);
-    int oldOffset = attachment.getOffset();
-    int newOffset = oldOffset + delta;
-    attachment.setOffset(newOffset);
-    attachment.write();
-  }
-
-  public void attachContainer(IAbstractComponentInfo widget, int side, int distance)
-      throws Exception {
-    attachAbsolute(widget, side, distance);
-  }
-
-  @Override
-  public void attachWidgetSequientially(IAbstractComponentInfo widget,
-      IAbstractComponentInfo attachToWidget,
-      int side,
-      int distance) throws Exception {
-    IFormAttachmentInfo<C> attachment = getAttachment(widget, side);
-    attachment.setControl((C) attachToWidget);
-    attachment.setOffset(PlacementUtils.isTrailingSide(side) ? -distance : distance);
-    {
-      int oppositeSide = PlacementUtils.getOppositeSide(side);
-      int oppositeSideGef = FormLayoutUtils.convertGefSide(oppositeSide);
-      attachment.setAlignment(oppositeSideGef);
-    }
-    attachment.write();
-  }
-
-  @Override
-  public void attachWidgetParallelly(IAbstractComponentInfo widget,
-      IAbstractComponentInfo attachToWidget,
-      int side,
-      int distance) throws Exception {
-    IFormAttachmentInfo<C> attachment = getAttachment(widget, side);
-    attachment.setControl((C) attachToWidget);
-    attachment.setOffset(PlacementUtils.isTrailingSide(side) ? -distance : distance);
-    attachment.setAlignment(FormLayoutUtils.convertGefSide(side));
-    attachment.write();
-  }
-
-  @Override
-  public void attachWidgetBaseline(IAbstractComponentInfo widget,
-      IAbstractComponentInfo attachToWidget) throws Exception {
-    IFormAttachmentInfo<C> attachment = getAttachment(widget, PlacementUtils.getSide(false, true));
-    attachment.setControl((C) attachToWidget);
-    int offset = 0;
-    int baseline = widget.getBaseline();
-    int targetBaseline = attachToWidget.getBaseline();
-    if (baseline == -1 || targetBaseline == -1) {
-      // move to center
-      Rectangle sourceBounds = widget.getModelBounds();
-      Rectangle targetBounds = attachToWidget.getModelBounds();
-      offset = targetBounds.bottom() / 2 - sourceBounds.height / 2;
-    } else {
-      offset = targetBaseline - baseline;
-    }
-    attachment.setOffset(offset);
-    attachment.setAlignment(SWT.TOP);
-    attachment.write();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Resize
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /*public void setExplicitSize(IAbstractComponentInfo widget, int side, int draggingSide, int resizeDelta)
+extends
+FormLayoutInfoImpl<C> implements IAbsoluteLayoutCommands {
+	private final IFormLayoutInfo<C> m_layout;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FormLayoutInfoImplAutomatic(IFormLayoutInfo<C> formLayoutInfo) {
+		m_layout = formLayoutInfo;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Move operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void command_moveToContainer(List<? extends IAbstractComponentInfo> sourceSet,
+			IAbstractComponentInfo nearestBeingSnapped,
+			int side,
+			int distance) throws Exception {
+	}
+
+	public void command_moveAsAttachedToComponent(List<? extends IAbstractComponentInfo> sourceSet,
+			IAbstractComponentInfo nearestBeingSnapped,
+			int sourceSide,
+			IAbstractComponentInfo target,
+			int targetSide,
+			int gap) {
+		String a = FormLayoutUtils.getAlignmentSource(FormLayoutUtils.convertGefSide(sourceSide));
+		String b = FormLayoutUtils.getAlignmentSource(FormLayoutUtils.convertGefSide(targetSide));
+	}
+
+	public void command_moveToPercent(List<? extends IAbstractComponentInfo> workingSet,
+			IAbstractComponentInfo nearestBeingSnapped,
+			int sourceSide,
+			int percent,
+			int gap) {
+		String a = FormLayoutUtils.getAlignmentSource(FormLayoutUtils.convertGefSide(sourceSide));
+	}
+
+	/**
+	 * @param bounds
+	 *          the new (union) bounds of the widgets.
+	 * @param sourceSet
+	 *          the set of widgets which the user is dragging.
+	 * @param singleSource
+	 *          the widget which is nearest to the edge by dragging direction.
+	 * @param moveDirection
+	 *          LEADING or TRAILING dragging direction.
+	 * @param isHorizontal
+	 */
+	public void command_moveFreely(Rectangle bounds,
+			List<? extends IAbstractComponentInfo> sourceSet,
+			IAbstractComponentInfo singleSource,
+			int moveDirection,
+			boolean isHorizontal) throws Exception {
+		NeighborInfo leadingNeighbor =
+				findNeighbor(bounds, sourceSet, PlacementInfo.LEADING, isHorizontal);
+		NeighborInfo trailingNeighbor =
+				findNeighbor(bounds, sourceSet, PlacementInfo.TRAILING, isHorizontal);
+		int newAlignmentHint =
+				leadingNeighbor.distance < trailingNeighbor.distance
+				? PlacementInfo.LEADING
+						: PlacementInfo.TRAILING;
+		// single
+		AlignmentInfo currentAlignment = getAlignment(singleSource, isHorizontal);
+		// non-resizable
+		if (!currentAlignment.resizable) {
+			// TODO: pay attention to moving direction
+			// TODO: pay attention on existing alignment
+			attachNonResizableFreely(
+					singleSource,
+					bounds,
+					leadingNeighbor,
+					trailingNeighbor,
+					newAlignmentHint,
+					isHorizontal);
+		} else {
+			attachResizableFreely(singleSource, bounds, leadingNeighbor, trailingNeighbor, isHorizontal);
+		}
+		keepWidgetsPositions(sourceSet, isHorizontal);
+		optimizeLayout();
+	}
+
+	private void optimizeLayout() {
+		// TODO:
+	}
+
+	private void keepWidgetsPositions(List<? extends IAbstractComponentInfo> sourceSet,
+			boolean isHorizontal) throws Exception {
+		List<AttachmentDef> affected = findAttachedToSource(sourceSet, isHorizontal);
+		for (AttachmentDef attachmentDef : affected) {
+		}
+	}
+
+	private List<AttachmentDef> findAttachedToSource(List<? extends IAbstractComponentInfo> sourceSet,
+			boolean isHorizontal) throws Exception {
+		List<AttachmentDef> affected = Lists.newArrayList();
+		int leadingSide = PlacementUtils.getSide(isHorizontal, true);
+		int trailingSide = PlacementUtils.getSide(isHorizontal, false);
+		List<IAbstractComponentInfo> remainingComponents = getRemainingComponents(sourceSet);
+		for (IAbstractComponentInfo source : remainingComponents) {
+			for (IAbstractComponentInfo target : sourceSet) {
+				checkAttachedToComponent(source, target, leadingSide, affected);
+				checkAttachedToComponent(source, target, trailingSide, affected);
+			}
+		}
+		return affected;
+	}
+
+	private void checkAttachedToComponent(IAbstractComponentInfo source,
+			IAbstractComponentInfo possibleTarget,
+			int checkingSide,
+			List<AttachmentDef> resultList) throws Exception {
+		if (isAttached(source, checkingSide)) {
+			IFormAttachmentInfo<C> attachment = getAttachment(source, checkingSide);
+			if (attachment.getControl() == possibleTarget) {
+				AttachmentDef def = new AttachmentDef();
+				def.source = source;
+				def.target = possibleTarget;
+				def.sourceSide = checkingSide;
+				def.targetSide = FormLayoutUtils.convertSwtAlignment(attachment.getAlignment());
+				resultList.add(def);
+			}
+		}
+	}
+
+	private void attachResizableFreely(IAbstractComponentInfo source,
+			Rectangle bounds,
+			NeighborInfo leadingNeighbor,
+			NeighborInfo trailingNeighbor,
+			boolean isHorizontal) throws Exception {
+		int leadingSide = PlacementUtils.getSide(isHorizontal, true);
+		int trailingSide = PlacementUtils.getSide(isHorizontal, false);
+		if (leadingNeighbor.neighbor == null) {
+			attachResizableToContainer(source, bounds, leadingSide);
+		} else {
+			IAbstractComponentInfo target = leadingNeighbor.neighbor;
+			int offset = leadingNeighbor.distance;
+			attachSideToComponent(source, target, offset, leadingSide, trailingSide);
+		}
+		if (trailingNeighbor.neighbor == null) {
+			attachResizableToContainer(source, bounds, PlacementUtils.getSide(isHorizontal, false));
+		} else {
+			IAbstractComponentInfo target = trailingNeighbor.neighbor;
+			int offset = -trailingNeighbor.distance;
+			attachSideToComponent(source, target, offset, trailingSide, leadingSide);
+		}
+	}
+
+	private void attachResizableToContainer(IAbstractComponentInfo source,
+			Rectangle bounds,
+			int checkingSide) throws Exception {
+		boolean isHorizontal = PlacementUtils.isHorizontalSide(checkingSide);
+		int targetSide = getTargetContainerSide(source, checkingSide);
+		boolean isLeadingSide = PlacementUtils.isLeadingSide(checkingSide);
+		int containerSize = PlacementUtils.getSideSize(m_layout.getContainerSize(), targetSide);
+		int offset;
+		if (checkingSide == targetSide) {
+			if (isLeadingSide) {
+				offset = isHorizontal ? bounds.x : bounds.y;
+			} else {
+				offset = -(containerSize - (isHorizontal ? bounds.right() : bounds.bottom()));
+			}
+		} else {
+			if (isLeadingSide) {
+				offset = -(containerSize - (isHorizontal ? bounds.x : bounds.y));
+			} else {
+				offset = isHorizontal ? bounds.right() : bounds.bottom();
+			}
+		}
+		attachSideToContainer(source, offset, checkingSide, targetSide);
+	}
+
+	private int getTargetContainerSide(IAbstractComponentInfo source, int side) throws Exception {
+		Assert.isLegal(isAttached(source, side));
+		IFormAttachmentInfo<C> attachment = getAttachment(source, side);
+		Assert.isLegal(attachment.getControl() == null);
+		int numerator = attachment.getNumerator();
+		boolean isTrailing = numerator == 100;
+		boolean isHorizontal = PlacementUtils.isHorizontalSide(side);
+		return PlacementUtils.getSide(isHorizontal, !isTrailing);
+	}
+
+	private void attachNonResizableFreely(IAbstractComponentInfo source,
+			Rectangle bounds,
+			NeighborInfo leadingNeighbor,
+			NeighborInfo trailingNeighbor,
+			int alignment,
+			boolean isHorizontal) throws Exception {
+		int leadingSide = PlacementUtils.getSide(isHorizontal, true);
+		int trailingSide = PlacementUtils.getSide(isHorizontal, false);
+		boolean isLeadingAlignment = alignment == PlacementInfo.LEADING;
+		int targetContainerSide = PlacementUtils.getSide(isHorizontal, isLeadingAlignment);
+		boolean leadingAttached = isAttached(source, leadingSide);
+		boolean trailingAttached = isAttached(source, trailingSide);
+		if (leadingAttached ^ trailingAttached || !leadingAttached && !trailingAttached) {
+			// attached by single side or none
+			if (isLeadingAlignment) {
+				if (leadingNeighbor.neighbor == null) {
+					attachSideToContainer(source, leadingNeighbor.distance, leadingSide, targetContainerSide);
+				} else {
+					attachSideToComponent(
+							source,
+							leadingNeighbor.neighbor,
+							leadingNeighbor.distance,
+							leadingSide,
+							PlacementUtils.getOppositeSide(leadingSide));
+				}
+				deleteAttachment(source, trailingSide);
+			} else {
+				if (trailingNeighbor.neighbor == null) {
+					attachSideToContainer(
+							source,
+							-trailingNeighbor.distance,
+							trailingSide,
+							targetContainerSide);
+				} else {
+					attachSideToComponent(
+							source,
+							trailingNeighbor.neighbor,
+							-trailingNeighbor.distance,
+							trailingSide,
+							PlacementUtils.getOppositeSide(trailingSide));
+				}
+				deleteAttachment(source, leadingSide);
+			}
+		} else {
+			// both sides
+			int offset = isLeadingAlignment ? leadingNeighbor.distance : -trailingNeighbor.distance;
+			int width = PlacementUtils.getSideSize(source.getModelBounds().getSize(), leadingSide);
+			NeighborInfo targetNeighbor = isLeadingAlignment ? leadingNeighbor : trailingNeighbor;
+			if (targetNeighbor.neighbor == null) {
+				{
+					int widthDelta = isLeadingAlignment ? 0 : -width;
+					attachSideToContainer(source, offset + widthDelta, leadingSide, targetContainerSide);
+				}
+				{
+					int widthDelta = isLeadingAlignment ? width : 0;
+					attachSideToContainer(source, offset + widthDelta, trailingSide, targetContainerSide);
+				}
+			} else {
+				{
+					int widthDelta = isLeadingAlignment ? 0 : -width;
+					attachSideToComponent(
+							source,
+							targetNeighbor.neighbor,
+							offset + widthDelta,
+							leadingSide,
+							isLeadingAlignment ? PlacementUtils.getOppositeSide(leadingSide) : leadingSide);
+				}
+				{
+					int widthDelta = isLeadingAlignment ? width : 0;
+					attachSideToComponent(
+							source,
+							targetNeighbor.neighbor,
+							offset + widthDelta,
+							trailingSide,
+							isLeadingAlignment ? trailingSide : PlacementUtils.getOppositeSide(trailingSide));
+				}
+			}
+		}
+	}
+
+	private NeighborInfo findNeighbor(Rectangle bounds,
+			List<? extends IAbstractComponentInfo> sourceSet,
+			int direction,
+			boolean isHorizontal) {
+		NeighborInfo neighbor = new NeighborInfo(direction);
+		Transposer t = new Transposer(!isHorizontal);
+		Rectangle widgetsBounds = t.t(bounds.getCopy());
+		Interval widgetsWidth = new Interval(widgetsBounds.x, widgetsBounds.width);
+		Interval widgetsHeight = new Interval(widgetsBounds.y, widgetsBounds.height);
+		List<IAbstractComponentInfo> remainingWidgets = getRemainingComponents(sourceSet);
+		for (IAbstractComponentInfo widget : remainingWidgets) {
+			// test where is the neighbor component located: leading or trailing
+			Rectangle possibleNeighborBounds = t.t(getTranslatedBounds(widget));
+			// neighbor should intersect in opposite dimension.
+			Interval possibleNeighborHeight =
+					new Interval(possibleNeighborBounds.y, possibleNeighborBounds.height);
+			if (widgetsHeight.intersects(possibleNeighborHeight)) {
+				// this is possible neighbor, get the most nearest depending on side: leading or trailing
+				Interval possibleNeighborWidth =
+						new Interval(possibleNeighborBounds.x, possibleNeighborBounds.width);
+				if (!possibleNeighborWidth.intersects(widgetsWidth)) {
+					// no overlapping, check the distances
+					if (direction == PlacementInfo.LEADING && possibleNeighborWidth.isLeadingOf(widgetsWidth)) {
+						// leading
+						int distance = widgetsWidth.distance(possibleNeighborWidth.end());
+						if (neighbor.distance > distance) {
+							neighbor.distance = distance;
+							neighbor.neighbor = widget;
+							continue;
+						}
+					} else if (direction == PlacementInfo.TRAILING
+							&& possibleNeighborWidth.isTrailingOf(widgetsWidth)) {
+						// trailing
+						int distance = widgetsWidth.distance(possibleNeighborWidth.begin());
+						if (neighbor.distance > distance) {
+							neighbor.distance = distance;
+							neighbor.neighbor = widget;
+							continue;
+						}
+					}
+				}
+			}
+		}
+		if (neighbor.neighbor == null) {
+			// if no one wants to be our neighbor ;-) so get the distance to the container's boundary
+			Dimension containerSize = t.t(m_layout.getContainerSize());
+			neighbor.distance =
+					direction == PlacementInfo.LEADING ? widgetsWidth.begin() : containerSize.width
+							- widgetsWidth.end();
+		}
+		return neighbor;
+	}
+
+	public AlignmentInfo getAlignment(IAbstractComponentInfo widget, boolean isHorizontal)
+			throws Exception {
+		int leadingSide = PlacementUtils.getSide(isHorizontal, true);
+		int trailingSide = PlacementUtils.getSide(isHorizontal, false);
+		boolean attachedLeading = isAttached(widget, leadingSide);
+		boolean attachedTrailing = isAttached(widget, trailingSide);
+		if (!attachedLeading && !attachedTrailing) {
+			// no constraints
+			return new AlignmentInfo(PlacementInfo.LEADING);
+		} else if (attachedLeading && attachedTrailing) {
+			int lEffectiveAlignment = getEffectiveAlignmentForSide(widget, leadingSide);
+			int tEffectiveAlignment = getEffectiveAlignmentForSide(widget, trailingSide);
+			if (lEffectiveAlignment != tEffectiveAlignment) {
+				return new AlignmentInfo(PlacementInfo.LEADING, true);
+			} else {
+				// can be resizable if both edges attached to different percents
+				IFormAttachmentInfo<C> lAttachment = getAttachment(widget, leadingSide);
+				IFormAttachmentInfo<C> tAttachment = getAttachment(widget, trailingSide);
+				if (lAttachment.getNumerator() != tAttachment.getNumerator()) {
+					return new AlignmentInfo(PlacementInfo.LEADING, true);
+				}
+				// indirectly non-resizable
+				return new AlignmentInfo(lEffectiveAlignment);
+			}
+		} else {
+			// attached single side only
+			return new AlignmentInfo(getEffectiveAlignmentForSide(widget, attachedLeading
+					? leadingSide
+							: trailingSide));
+		}
+	}
+
+	private int getEffectiveAlignmentForSide(IAbstractComponentInfo widget, int side)
+			throws Exception {
+		// go by given side until parent or not attached.
+		IAbstractComponentInfo testedWidget = widget;
+		int testedSide = side;
+		while (true) {
+			if (isAttached(testedWidget, testedSide)) {
+				IFormAttachmentInfo<C> attachment = getAttachment(testedWidget, testedSide);
+				C anchorComponent = attachment.getControl();
+				if (anchorComponent != null) {
+					// another component
+					testedWidget = anchorComponent;
+					testedSide = attachment.getSide().getEngineSide();
+					continue;
+				} else {
+					// container
+					return attachment.getNumerator() > 0 ? PlacementInfo.TRAILING : PlacementInfo.LEADING;
+				}
+			} else {
+				return PlacementUtils.getSidePosition(PlacementUtils.getOppositeSide(testedSide));
+			}
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Misc/Helpers
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private List<IAbstractComponentInfo> getRemainingComponents(List<? extends IAbstractComponentInfo> sourceSet) {
+		List<IAbstractComponentInfo> components = Lists.newArrayList();
+		List<C> allControls = m_layout.getControls();
+		for (C control : allControls) {
+			if (!sourceSet.contains(control)) {
+				components.add(control);
+			}
+		}
+		return components;
+	}
+
+	private Rectangle getUnionRectangle(List<? extends IAbstractComponentInfo> sourceSet) {
+		Rectangle unionRectangle = new Rectangle();
+		for (IAbstractComponentInfo component : sourceSet) {
+			unionRectangle.union(component.getModelBounds());
+		}
+		return unionRectangle;
+	}
+
+	private Rectangle getTranslatedBounds(IAbstractComponentInfo widget) {
+		return PlacementUtils.getTranslatedBounds(
+				m_layout.getComposite().getClientArea().getLocation(),
+				widget);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// "Low-level" attachment manipulations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void attachSideToContainer(IAbstractComponentInfo source,
+			int offset,
+			int sourceSide,
+			int containerSide) throws Exception {
+		int numerator = PlacementUtils.isLeadingSide(containerSide) ? 0 : 100;
+		IFormAttachmentInfo<C> attachment = getAttachment(source, sourceSide);
+		attachment.setControl(null);
+		attachment.setNumerator(numerator);
+		attachment.setDenominator(100);
+		attachment.setOffset(offset);
+		attachment.write();
+	}
+
+	private void attachSideToComponent(IAbstractComponentInfo source,
+			IAbstractComponentInfo target,
+			int offset,
+			int sourceSide,
+			int targetSide) throws Exception {
+		IFormAttachmentInfo<C> attachment = getAttachment(source, sourceSide);
+		attachment.setControl((C) target);
+		attachment.setAlignment(FormLayoutUtils.convertGefSide(targetSide));
+		attachment.setNumerator(0);
+		attachment.setDenominator(100);
+		attachment.setOffset(offset);
+		attachment.write();
+	}
+
+	private void deleteAttachment(IAbstractComponentInfo source, int sourceSide) throws Exception {
+		if (isAttached(source, sourceSide)) {
+			IFormAttachmentInfo<C> attachment = getAttachment(source, sourceSide);
+			attachment.delete();
+		}
+	}
+
+	/**
+	 * @return the {@link IFormAttachment} instance for given <code>side</code> of widget.
+	 */
+	private final IFormAttachmentInfo<C> getAttachment(IAbstractComponentInfo widget, int side)
+			throws Exception {
+		IFormDataInfo<C> layoutData = (IFormDataInfo<C>) m_layout.getLayoutData2((C) widget);
+		return layoutData.getAttachment(side);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	//	Helper classes
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final class NeighborInfo {
+		final int direction;
+		int distance = PlacementInfo.UNDEFINED_DISTANCE;
+		IAbstractComponentInfo neighbor;
+
+		NeighborInfo(int direction) {
+			this.direction = direction;
+		}
+	}
+	public static final class AlignmentInfo {
+		public final int alignment;
+		public final boolean resizable;
+
+		public AlignmentInfo(int alignment) {
+			this(alignment, false);
+		}
+
+		public AlignmentInfo(int alignment, boolean resizable) {
+			this.alignment = alignment;
+			this.resizable = resizable;
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Obsolete code, is subject to remove
+	//
+	////////////////////////////////////////////////////////////////////////////
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Layout manipulation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void detach(IAbstractComponentInfo widget, int side) throws Exception {
+		IFormAttachmentInfo<C> attachment = getAttachment(widget, side);
+		// do nothing if it is not exist
+		if (attachment.isVirtual()) {
+			return;
+		}
+		// proceed with detach
+		attachment.delete();
+	}
+
+	// XXX
+	@Override
+	public void attachAbsolute(IAbstractComponentInfo widget, int side, int distance)
+			throws Exception {
+		IFormAttachmentInfo<C> attachment = getAttachment(widget, side);
+		attachment.setControl(null);
+		if (PlacementUtils.isTrailingSide(side)) {
+			attachment.setOffset(-distance);
+			attachment.setNumerator(100);
+		} else {
+			attachment.setOffset(distance);
+			attachment.setNumerator(0);
+		}
+		attachment.write();
+	}
+
+	@Override
+	public void adjustAttachmentOffset(IAbstractComponentInfo widget, int side, int delta)
+			throws Exception {
+		IFormAttachmentInfo<C> attachment = getAttachment(widget, side);
+		int oldOffset = attachment.getOffset();
+		int newOffset = oldOffset + delta;
+		attachment.setOffset(newOffset);
+		attachment.write();
+	}
+
+	public void attachContainer(IAbstractComponentInfo widget, int side, int distance)
+			throws Exception {
+		attachAbsolute(widget, side, distance);
+	}
+
+	@Override
+	public void attachWidgetSequientially(IAbstractComponentInfo widget,
+			IAbstractComponentInfo attachToWidget,
+			int side,
+			int distance) throws Exception {
+		IFormAttachmentInfo<C> attachment = getAttachment(widget, side);
+		attachment.setControl((C) attachToWidget);
+		attachment.setOffset(PlacementUtils.isTrailingSide(side) ? -distance : distance);
+		{
+			int oppositeSide = PlacementUtils.getOppositeSide(side);
+			int oppositeSideGef = FormLayoutUtils.convertGefSide(oppositeSide);
+			attachment.setAlignment(oppositeSideGef);
+		}
+		attachment.write();
+	}
+
+	@Override
+	public void attachWidgetParallelly(IAbstractComponentInfo widget,
+			IAbstractComponentInfo attachToWidget,
+			int side,
+			int distance) throws Exception {
+		IFormAttachmentInfo<C> attachment = getAttachment(widget, side);
+		attachment.setControl((C) attachToWidget);
+		attachment.setOffset(PlacementUtils.isTrailingSide(side) ? -distance : distance);
+		attachment.setAlignment(FormLayoutUtils.convertGefSide(side));
+		attachment.write();
+	}
+
+	@Override
+	public void attachWidgetBaseline(IAbstractComponentInfo widget,
+			IAbstractComponentInfo attachToWidget) throws Exception {
+		IFormAttachmentInfo<C> attachment = getAttachment(widget, PlacementUtils.getSide(false, true));
+		attachment.setControl((C) attachToWidget);
+		int offset = 0;
+		int baseline = widget.getBaseline();
+		int targetBaseline = attachToWidget.getBaseline();
+		if (baseline == -1 || targetBaseline == -1) {
+			// move to center
+			Rectangle sourceBounds = widget.getModelBounds();
+			Rectangle targetBounds = attachToWidget.getModelBounds();
+			offset = targetBounds.bottom() / 2 - sourceBounds.height / 2;
+		} else {
+			offset = targetBaseline - baseline;
+		}
+		attachment.setOffset(offset);
+		attachment.setAlignment(SWT.TOP);
+		attachment.write();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Resize
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/*public void setExplicitSize(IAbstractComponentInfo widget, int side, int draggingSide, int resizeDelta)
   		throws Exception {
   	// set the size explicitly in layout data, if the resulting size is preferred size, remove the size set in layout data
   	Rectangle modelBounds = widget.getModelBounds();
@@ -640,166 +640,166 @@ public void attachWidgetBaseline(IAbstractComponentInfo widget,
   		layoutData.setHeight(preferredSize.height != newHeight ? newHeight : SWT.DEFAULT);
   	}
   }*/
-  @Override
-  public void setExplicitSize(IAbstractComponentInfo widget,
-      int attachedSide,
-      int draggingSide,
-      int resizeDelta) throws Exception {
-    Rectangle modelBounds = widget.getModelBounds();
-    Dimension oldSize = modelBounds != null ? modelBounds.getSize() : widget.getPreferredSize();
-    //
-    int oldLinearSize = PlacementUtils.getSideSize(oldSize, draggingSide);
-    setExplicitSize(widget, attachedSide, draggingSide, resizeDelta, oldLinearSize);
-    IFormDataInfo<C> layoutData = (IFormDataInfo<C>) m_layout.getLayoutData2((C) widget);
-    if (PlacementUtils.isHorizontalSide(attachedSide)) {
-      layoutData.setWidth(SWT.DEFAULT);
-    } else {
-      layoutData.setHeight(SWT.DEFAULT);
-    }
-  }
-
-  private void setExplicitSize(IAbstractComponentInfo widget,
-      int attachedSide,
-      int draggingSide,
-      int resizeDelta,
-      int oldSize) throws Exception {
-    IFormAttachmentInfo<C> attached = getAttachment(widget, attachedSide);
-    IFormAttachmentInfo<C> dragging = getAttachment(widget, draggingSide);
-    if (attachedSide == draggingSide) {
-      // lock "free" side
-      {
-        IFormAttachmentInfo<C> lock =
-            getAttachment(widget, PlacementUtils.getOppositeSide(attachedSide));
-        setNewSize(attached, attachedSide, lock, oldSize);
-      }
-    } else {
-      int newWidth = oldSize + resizeDelta;
-      setNewSize(attached, attachedSide, dragging, newWidth);
-    }
-  }
-
-  // XXX
-  private static <C extends IControlInfo> void setNewSize(IFormAttachmentInfo<C> attached,
-      int attachedSide,
-      IFormAttachmentInfo<C> dragging,
-      int newSize) throws Exception {
-    C attachedControl = attached.getControl();
-    dragging.setControl(attachedControl);
-    if (attachedControl != null) {
-      dragging.setAlignment(attached.getAlignment());
-    } else {
-      dragging.setDenominator(attached.getDenominator());
-      dragging.setNumerator(attached.getNumerator());
-    }
-    // set offset
-    int offset;
-    if (PlacementUtils.isLeadingSide(attachedSide)) {
-      offset = attached.getOffset() + newSize;
-    } else {
-      offset = attached.getOffset() - newSize;
-    }
-    dragging.setOffset(offset);
-    // write
-    dragging.write();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ComponentAttachmentInfo getComponentAttachmentInfo(IAbstractComponentInfo widget, int side)
-      throws Exception {
-    if (m_layout.isManagedObject(widget) && isAttached(widget, side)) {
-      IFormAttachmentInfo<C> attachment = getAttachment(widget, side);
-      C control = attachment.getControl();
-      if (control != null) {
-        int alignment = attachment.getAlignment();
-        if (alignment == SWT.DEFAULT) {
-          alignment = PlacementUtils.getOppositeSide(side);
-        } else {
-          alignment = FormLayoutUtils.convertSwtAlignment(alignment);
-        }
-        return new ComponentAttachmentInfo(widget, control, alignment);
-      }
-    }
-    return null;
-  }
-
-  public static Image getImage(String imageName) {
-    return Activator.getImage("info/layout/FormLayout/" + imageName);
-  }
-
-  @Override
-  public IAbstractComponentInfo getAttachedToWidget(IAbstractComponentInfo widget, int side)
-      throws Exception {
-    if (!isAttached(widget, side)) {
-      return null;
-    }
-    IFormAttachmentInfo<C> attachment = getAttachment(widget, side);
-    return attachment.getControl();
-  }
-
-  @Override
-  public boolean isAttached(IAbstractComponentInfo widget, int side) throws Exception {
-    return m_layout.isManagedObject(widget) && !getAttachment(widget, side).isVirtual();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Layout-defined actions
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void performAction(int actionId) {
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Move in tree
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void command_CREATE2(C component, C nextComponent) throws Exception {
-    m_layout.commandCreate(component, nextComponent);
-  }
-
-  public void command_MOVE2(C component, C nextComponent) throws Exception {
-    m_layout.commandMove(component, nextComponent);
-    adjustMovedComponentSides(component);
-    adjustAnchoredToMovedComponent(component);
-  }
-
-  private void adjustMovedComponentSides(C component) throws Exception {
-    adjustMovedComponentSide(component, IPositionConstants.TOP);
-    adjustMovedComponentSide(component, IPositionConstants.LEFT);
-    adjustMovedComponentSide(component, IPositionConstants.BOTTOM);
-    adjustMovedComponentSide(component, IPositionConstants.RIGHT);
-  }
-
-  private void adjustMovedComponentSide(C component, int side) throws Exception {
-    IFormAttachmentInfo<C> attachment = getAttachment(component, side);
-    if (!attachment.isVirtual()) {
-      attachment.write();
-    }
-  }
-
-  private void adjustAnchoredToMovedComponent(C component) throws Exception {
-    for (C sibling : m_layout.getControls()) {
-      adjustAnchoredToMovedComponentSides(sibling, component);
-    }
-  }
-
-  private void adjustAnchoredToMovedComponentSides(C component, C target) throws Exception {
-    adjustAnchoredToMovedComponentSide(component, target, IPositionConstants.TOP);
-    adjustAnchoredToMovedComponentSide(component, target, IPositionConstants.LEFT);
-    adjustAnchoredToMovedComponentSide(component, target, IPositionConstants.BOTTOM);
-    adjustAnchoredToMovedComponentSide(component, target, IPositionConstants.RIGHT);
-  }
-
-  private void adjustAnchoredToMovedComponentSide(C component, C anchor, int side) throws Exception {
-    IFormAttachmentInfo<C> attachment = getAttachment(component, side);
-    if (attachment.getControl() == anchor) {
-      attachment.write();
-    }
-  }
+	@Override
+	public void setExplicitSize(IAbstractComponentInfo widget,
+			int attachedSide,
+			int draggingSide,
+			int resizeDelta) throws Exception {
+		Rectangle modelBounds = widget.getModelBounds();
+		Dimension oldSize = modelBounds != null ? modelBounds.getSize() : widget.getPreferredSize();
+		//
+		int oldLinearSize = PlacementUtils.getSideSize(oldSize, draggingSide);
+		setExplicitSize(widget, attachedSide, draggingSide, resizeDelta, oldLinearSize);
+		IFormDataInfo<C> layoutData = (IFormDataInfo<C>) m_layout.getLayoutData2((C) widget);
+		if (PlacementUtils.isHorizontalSide(attachedSide)) {
+			layoutData.setWidth(SWT.DEFAULT);
+		} else {
+			layoutData.setHeight(SWT.DEFAULT);
+		}
+	}
+
+	private void setExplicitSize(IAbstractComponentInfo widget,
+			int attachedSide,
+			int draggingSide,
+			int resizeDelta,
+			int oldSize) throws Exception {
+		IFormAttachmentInfo<C> attached = getAttachment(widget, attachedSide);
+		IFormAttachmentInfo<C> dragging = getAttachment(widget, draggingSide);
+		if (attachedSide == draggingSide) {
+			// lock "free" side
+			{
+				IFormAttachmentInfo<C> lock =
+						getAttachment(widget, PlacementUtils.getOppositeSide(attachedSide));
+				setNewSize(attached, attachedSide, lock, oldSize);
+			}
+		} else {
+			int newWidth = oldSize + resizeDelta;
+			setNewSize(attached, attachedSide, dragging, newWidth);
+		}
+	}
+
+	// XXX
+	private static <C extends IControlInfo> void setNewSize(IFormAttachmentInfo<C> attached,
+			int attachedSide,
+			IFormAttachmentInfo<C> dragging,
+			int newSize) throws Exception {
+		C attachedControl = attached.getControl();
+		dragging.setControl(attachedControl);
+		if (attachedControl != null) {
+			dragging.setAlignment(attached.getAlignment());
+		} else {
+			dragging.setDenominator(attached.getDenominator());
+			dragging.setNumerator(attached.getNumerator());
+		}
+		// set offset
+		int offset;
+		if (PlacementUtils.isLeadingSide(attachedSide)) {
+			offset = attached.getOffset() + newSize;
+		} else {
+			offset = attached.getOffset() - newSize;
+		}
+		dragging.setOffset(offset);
+		// write
+		dragging.write();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ComponentAttachmentInfo getComponentAttachmentInfo(IAbstractComponentInfo widget, int side)
+			throws Exception {
+		if (m_layout.isManagedObject(widget) && isAttached(widget, side)) {
+			IFormAttachmentInfo<C> attachment = getAttachment(widget, side);
+			C control = attachment.getControl();
+			if (control != null) {
+				int alignment = attachment.getAlignment();
+				if (alignment == SWT.DEFAULT) {
+					alignment = PlacementUtils.getOppositeSide(side);
+				} else {
+					alignment = FormLayoutUtils.convertSwtAlignment(alignment);
+				}
+				return new ComponentAttachmentInfo(widget, control, alignment);
+			}
+		}
+		return null;
+	}
+
+	public static Image getImage(String imageName) {
+		return Activator.getImage("info/layout/FormLayout/" + imageName);
+	}
+
+	@Override
+	public IAbstractComponentInfo getAttachedToWidget(IAbstractComponentInfo widget, int side)
+			throws Exception {
+		if (!isAttached(widget, side)) {
+			return null;
+		}
+		IFormAttachmentInfo<C> attachment = getAttachment(widget, side);
+		return attachment.getControl();
+	}
+
+	@Override
+	public boolean isAttached(IAbstractComponentInfo widget, int side) throws Exception {
+		return m_layout.isManagedObject(widget) && !getAttachment(widget, side).isVirtual();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Layout-defined actions
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void performAction(int actionId) {
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Move in tree
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void command_CREATE2(C component, C nextComponent) throws Exception {
+		m_layout.commandCreate(component, nextComponent);
+	}
+
+	public void command_MOVE2(C component, C nextComponent) throws Exception {
+		m_layout.commandMove(component, nextComponent);
+		adjustMovedComponentSides(component);
+		adjustAnchoredToMovedComponent(component);
+	}
+
+	private void adjustMovedComponentSides(C component) throws Exception {
+		adjustMovedComponentSide(component, IPositionConstants.TOP);
+		adjustMovedComponentSide(component, IPositionConstants.LEFT);
+		adjustMovedComponentSide(component, IPositionConstants.BOTTOM);
+		adjustMovedComponentSide(component, IPositionConstants.RIGHT);
+	}
+
+	private void adjustMovedComponentSide(C component, int side) throws Exception {
+		IFormAttachmentInfo<C> attachment = getAttachment(component, side);
+		if (!attachment.isVirtual()) {
+			attachment.write();
+		}
+	}
+
+	private void adjustAnchoredToMovedComponent(C component) throws Exception {
+		for (C sibling : m_layout.getControls()) {
+			adjustAnchoredToMovedComponentSides(sibling, component);
+		}
+	}
+
+	private void adjustAnchoredToMovedComponentSides(C component, C target) throws Exception {
+		adjustAnchoredToMovedComponentSide(component, target, IPositionConstants.TOP);
+		adjustAnchoredToMovedComponentSide(component, target, IPositionConstants.LEFT);
+		adjustAnchoredToMovedComponentSide(component, target, IPositionConstants.BOTTOM);
+		adjustAnchoredToMovedComponentSide(component, target, IPositionConstants.RIGHT);
+	}
+
+	private void adjustAnchoredToMovedComponentSide(C component, C anchor, int side) throws Exception {
+		IFormAttachmentInfo<C> attachment = getAttachment(component, side);
+		if (attachment.getControl() == anchor) {
+			attachment.write();
+		}
+	}
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/form/FormLayoutInfoImplClassic.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/form/FormLayoutInfoImplClassic.java
index 350f0af61..9c1f5d864 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/form/FormLayoutInfoImplClassic.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/form/FormLayoutInfoImplClassic.java
@@ -48,770 +48,770 @@
  * @author mitin_aa
  */
 public class FormLayoutInfoImplClassic<C extends IControlInfo> extends FormLayoutInfoImpl<C> {
-  private final IFormLayoutInfo<C> layout;
-  private final AnchorActionsClassic<C> anchorActions;
-  private final AbstractAlignmentActionsSupport<C> alignmentActions;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FormLayoutInfoImplClassic(IFormLayoutInfo<C> layout_) {
-    this.layout = layout_;
-    this.anchorActions = new AnchorActionsClassic<C>(this);
-    this.alignmentActions = new AlignmentsSupport();
-    this.layout.addBroadcastListener(new ObjectEventListener() {
-      @Override
-      public void addSelectionActions(List<ObjectInfo> objects, List<Object> actions)
-          throws Exception {
-        alignmentActions.addAlignmentActions(objects, actions);
-      }
-    });
-    this.layout.addBroadcastListener(new LayoutAssistantListener() {
-      @Override
-      public void createAssistantPages(List<ObjectInfo> objects,
-          TabFolder folder,
-          List<ILayoutAssistantPage> pages) throws Exception {
-        if (!objects.isEmpty()) {
-          for (ObjectInfo object : objects) {
-            if (object.getParent() != layout.getComposite()) {
-              return;
-            }
-          }
-          ArrayList<Object> actions = Lists.newArrayList();
-          alignmentActions.addAlignmentActions(objects, actions);
-          LayoutAssistantPageClassic<C> page =
-              new LayoutAssistantPageClassic<C>(layout, folder, objects, actions);
-          TabFactory.item(folder).text("FormLayout").control(page);
-          pages.add(page);
-        }
-      }
-    });
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Returns the appropriate form attachment instance or <code>null</code> if it is virtual.
-   */
-  public IFormAttachmentInfo<C> getAttachment(C control, int side) throws Exception {
-    if (layout.isManagedObject(control)) {
-      IFormAttachmentInfo<C> attachment = getAttachment0(control, side);
-      return attachment.isVirtual() ? null : attachment;
-    }
-    return null;
-  }
-
-  @SuppressWarnings("unchecked")
-  private IFormAttachmentInfo<C> getAttachment0(C child, int side) throws Exception {
-    IFormDataInfo<C> formData = (IFormDataInfo<C>) layout.getLayoutData2(child);
-    return formData.getAttachment(side);
-  }
-
-  public boolean isLeft(IFormAttachmentInfo<C> attachment) {
-    return attachment.getSide().getEngineSide() == IPositionConstants.LEFT;
-  }
-
-  public boolean isRight(IFormAttachmentInfo<C> attachment) {
-    return attachment.getSide().getEngineSide() == IPositionConstants.RIGHT;
-  }
-
-  public boolean isTop(IFormAttachmentInfo<C> attachment) {
-    return attachment.getSide().getEngineSide() == IPositionConstants.TOP;
-  }
-
-  public boolean isBottom(IFormAttachmentInfo<C> attachment) {
-    return attachment.getSide().getEngineSide() == IPositionConstants.BOTTOM;
-  }
-
-  public boolean isParentAttachment(IFormAttachmentInfo<C> attachment) {
-    return attachment.getControl() == null;
-  }
-
-  public boolean isControlAttachment(IFormAttachmentInfo<C> attachment) {
-    return !attachment.isVirtual() && attachment.getControl() != null;
-  }
-
-  public boolean shouldShowConstraintLine(IFormAttachmentInfo<C> attachment) {
-    IFormAttachmentInfo<C> opposite;
-    try {
-      opposite = getOpposite(attachment);
-    } catch (Throwable e) {
-      throw ReflectionUtils.propagate(e);
-    }
-    if (opposite.isVirtual()) {
-      return true;
-    }
-    int align = attachment.getAlignment();
-    int oppositeSideAlign = opposite.getAlignment();
-    if (align != oppositeSideAlign) {
-      return true;
-    }
-    int offset = attachment.getOffset();
-    int oppositeOffset = opposite.getOffset();
-    return Math.abs(offset) < Math.abs(oppositeOffset);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Move
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void moveToPercentOffset(C child, int side, int percent, int offset) throws Exception {
-    IFormAttachmentInfo<C> attachment = getAttachment0(child, side);
-    attachment.setControl(null);
-    attachment.setNumerator(percent);
-    attachment.setDenominator(100);
-    attachment.setOffset(offset);
-    attachment.write();
-    rebindOpposite(attachment);
-  }
-
-  public void moveToOffset(C child, int side, int parentSize, int offset) throws Exception {
-    IFormAttachmentInfo<C> attachment = getAttachment0(child, side);
-    moveToOffset(attachment, parentSize, offset);
-  }
-
-  private void moveToOffset(IFormAttachmentInfo<C> attachment, int parentSize, int offset)
-      throws Exception {
-    bindToParent(attachment, parentSize, offset);
-    rebindOpposite(attachment);
-  }
-
-  public void moveToMargin(C child, int side, int direction, int marginValue) throws Exception {
-    IFormAttachmentInfo<C> attachment = getAttachment0(child, side);
-    attachment.setControl(null);
-    attachment.setDenominator(100);
-    if (!PlacementUtils.isTrailingSide(direction)) {
-      attachment.setNumerator(0);
-      attachment.setOffset(marginValue);
-    } else {
-      attachment.setNumerator(100);
-      attachment.setOffset(-marginValue);
-    }
-    attachment.write();
-    rebindOpposite(attachment);
-  }
-
-  public void moveToControl(C child, int side, C target, int alignment, int offset)
-      throws Exception {
-    IFormAttachmentInfo<C> attachment = getAttachment0(child, side);
-    attachment.setControl(target);
-    attachment.setOffset(offset);
-    attachment.setAlignment(FormLayoutUtils.convertGefSide(alignment));
-    attachment.write();
-    //
-    int thisSide = attachment.getSide().getEngineSide();
-    IFormAttachmentInfo<C> opposite = getOpposite(attachment);
-    if (!opposite.isVirtual()) {
-      opposite.setControl(target);
-      opposite.setAlignment(FormLayoutUtils.convertGefSide(alignment));
-      org.eclipse.draw2d.geometry.Rectangle controlBounds = child.getModelBounds();
-      int oppositeOffset = attachment.getOffset();
-      if (controlBounds != null) {
-        int k = PlacementUtils.isTrailingSide(thisSide) ? -1 : 1;
-        if (PlacementUtils.isHorizontalSide(opposite.getSide().getEngineSide())) {
-          oppositeOffset += k * controlBounds.width;
-        } else {
-          oppositeOffset += k * controlBounds.height;
-        }
-      }
-      opposite.setOffset(oppositeOffset);
-      opposite.write();
-    }
-  }
-
-  /**
-   * Binds an attachment to parent.
-   */
-  private void bindToParent(IFormAttachmentInfo<C> attachment, int parentSize, int offset)
-      throws Exception {
-    int numerator = 0;
-    int denominator = 100;
-    int oldNumerator = attachment.getNumerator();
-    if (oldNumerator == 100) {
-      numerator = 100;
-      offset = parentSize - offset;
-      offset = -offset;
-    }
-    attachment.setControl(null);
-    attachment.setNumerator(numerator);
-    attachment.setDenominator(denominator);
-    attachment.setOffset(offset);
-    attachment.write();
-  }
-
-  /**
-   * If the opposite side has an attachment, it would be rebound to parent
-   */
-  private void rebindOpposite(IFormAttachmentInfo<C> attachment) throws Exception {
-    int thisSide = attachment.getSide().getEngineSide();
-    IFormAttachmentInfo<C> opposite = getOpposite(attachment);
-    if (!opposite.isVirtual()) {
-      opposite.setControl(null);
-      org.eclipse.draw2d.geometry.Rectangle controlBounds =
-          getThisControl(attachment).getModelBounds();
-      opposite.setNumerator(attachment.getNumerator());
-      opposite.setDenominator(attachment.getDenominator());
-      if (controlBounds != null) {
-        int sign = PlacementUtils.isTrailingSide(thisSide) ? -1 : 1;
-        if (PlacementUtils.isHorizontalSide(opposite.getSide().getEngineSide())) {
-          opposite.setOffset(attachment.getOffset() + sign * controlBounds.width);
-        } else {
-          opposite.setOffset(attachment.getOffset() + sign * controlBounds.height);
-        }
-      }
-      opposite.write();
-    }
-  }
-
-  @SuppressWarnings("unchecked")
-  private C getThisControl(IFormAttachmentInfo<C> attachment) {
-    return (C) attachment.getParent().getParent();
-  }
-
-  @SuppressWarnings("unchecked")
-  private IFormAttachmentInfo<C> getOpposite(IFormAttachmentInfo<C> attachment) throws Exception {
-    IFormDataInfo<C> formData = (IFormDataInfo<C>) attachment.getParent();
-    int oppositeSide = attachment.getSide().getOppositeSide().getEngineSide();
-    return formData.getAttachment(oppositeSide);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Possible controls to attach to
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public List<C> getAlignControlInfos(C sourceControl, int sourceSide) throws Exception {
-    List<C> list = Lists.newArrayList();
-    for (C info : layout.getControls()) {
-      if (isRelative(info, sourceControl, sourceSide)) {
-        continue;
-      }
-      list.add(info);
-    }
-    return list;
-  }
-
-  /**
-   * Return <code>true</code>, if <code>control</code> is located relative to
-   * <code>refControl</code>.
-   */
-  private boolean isRelative(C checkingControl, C refControl, int side) throws Exception {
-    Set<C> referenced = Sets.newHashSet();
-    collectReferencedControls(checkingControl, side, referenced);
-    return referenced.contains(refControl);
-  }
-
-  /**
-   * Collect all children relative to which <code>control</code> is located.
-   */
-  private void collectReferencedControls(C control, int side, Set<C> referenced) throws Exception {
-    if (referenced.contains(control)) {
-      return;
-    }
-    referenced.add(control);
-    if (PlacementUtils.isHorizontalSide(side)) {
-      collectReferencedControls0(control, IPositionConstants.LEFT, referenced);
-      collectReferencedControls0(control, IPositionConstants.RIGHT, referenced);
-    } else {
-      collectReferencedControls0(control, IPositionConstants.TOP, referenced);
-      collectReferencedControls0(control, IPositionConstants.BOTTOM, referenced);
-    }
-  }
-
-  private void collectReferencedControls0(C control, int side, Set<C> referenced) throws Exception {
-    IFormAttachmentInfo<C> attachment = getAttachment0(control, side);
-    if (isControlAttachment(attachment)) {
-      collectReferencedControls(attachment.getControl(), side, referenced);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Create
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void createToOffset(C child, int side, int parentSize, int offset) throws Exception {
-    IFormAttachmentInfo<C> attachment = getAttachment0(child, side);
-    if (PlacementUtils.isTrailingSide(side)) {
-      resizeToOffset(attachment, parentSize, offset);
-    } else {
-      moveToOffset(attachment, parentSize, offset);
-    }
-  }
-
-  public void createToControl(C child, int side, C targetControl, int targetSide, int offset)
-      throws Exception {
-    IFormAttachmentInfo<C> attachment = getAttachment0(child, side);
-    if (PlacementUtils.isTrailingSide(side)) {
-      resizeToControl(attachment, targetControl, targetSide, offset);
-    } else {
-      moveToControl(child, side, targetControl, targetSide, offset);
-    }
-  }
-
-  public void createToPercentOffset(C child, int side, int percent, int offset) throws Exception {
-    IFormAttachmentInfo<C> attachment = getAttachment0(child, side);
-    if (PlacementUtils.isTrailingSide(side)) {
-      resizeToPercentOffset(attachment, percent, offset);
-    } else {
-      moveToPercentOffset(child, side, percent, offset);
-    }
-  }
-
-  public void createToMargin(C child, int side, int direction, int marginValue) throws Exception {
-    IFormAttachmentInfo<C> attachment = getAttachment0(child, side);
-    if (PlacementUtils.isTrailingSide(side)) {
-      resizeToMargin(attachment, direction, marginValue);
-    } else {
-      moveToMargin(child, side, direction, marginValue);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Resize
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void resizeToOffset(IFormAttachmentInfo<C> attachment, int parentDimension, int offset)
-      throws Exception {
-    bindOppositeToParent(attachment);
-    bindToParent(attachment, parentDimension, offset);
-  }
-
-  private void bindOppositeToParent(IFormAttachmentInfo<C> attachment) throws Exception {
-    IFormAttachmentInfo<C> opposite = getOpposite(attachment);
-    if (opposite.isVirtual()) {
-      Rectangle parentBounds = getThisControl(attachment).getModelBounds();
-      opposite.setDenominator(100);
-      if (isLeft(attachment)) {
-        opposite.setOffset(parentBounds.x
-            + parentBounds.width
-            - FormUtils.getLayoutMarginLeft(layout));
-      } else if (isTop(attachment)) {
-        opposite.setOffset(parentBounds.y
-            + parentBounds.height
-            - FormUtils.getLayoutMarginTop(layout));
-      } else if (isRight(attachment)) {
-        opposite.setOffset(parentBounds.x - FormUtils.getLayoutMarginLeft(layout));
-      } else if (isBottom(attachment)) {
-        opposite.setOffset(parentBounds.y - FormUtils.getLayoutMarginTop(layout));
-      }
-      opposite.write();
-    }
-  }
-
-  public void resizeToPercentOffset(IFormAttachmentInfo<C> attachment, int percent, int offset)
-      throws Exception {
-    bindOppositeToParent(attachment);
-    attachment.setDenominator(100);
-    attachment.setControl(null);
-    attachment.setNumerator(percent);
-    attachment.setOffset(offset);
-    attachment.write();
-  }
-
-  public void resizeToMargin(IFormAttachmentInfo<C> attachment, int direction, int marginValue)
-      throws Exception {
-    bindOppositeToParent(attachment);
-    attachment.setDenominator(100);
-    attachment.setControl(null);
-    if (direction == IPositionConstants.LEFT || direction == IPositionConstants.TOP) {
-      attachment.setNumerator(0);
-      attachment.setOffset(marginValue);
-    } else {
-      attachment.setNumerator(100);
-      attachment.setDenominator(100);
-      attachment.setOffset(-marginValue);
-    }
-    attachment.write();
-  }
-
-  public void resizeToControl(IFormAttachmentInfo<C> attachment,
-      C targetControl,
-      int targetSide,
-      int offset) throws Exception {
-    bindOppositeToParent(attachment);
-    attachment.setControl(targetControl);
-    attachment.setOffset(offset);
-    attachment.setAlignment(FormLayoutUtils.convertGefSide(targetSide));
-    attachment.write();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Anchor changing actions
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AnchorActionsClassic<C> getAnchorActions() {
-    return anchorActions;
-  }
-
-  public void anchor_delete(C control, int controlSide) throws Exception {
-    IFormAttachmentInfo<C> attachment = getAttachment0(control, controlSide);
-    attachment.delete();
-  }
-
-  public void anchor_bindToParent(C control, int controlSide, int parentSide) throws Exception {
-    layout.anchorToParent(control, controlSide, parentSide);
-  }
-
-  public void anchor_bindToParentAsPercent(C control, int controlSide) throws Exception {
-    layout.anchorToParentAsPercent(control, controlSide);
-  }
-
-  public void anchor_bindToControl(C control, int controlSide, int targetSide) throws Exception {
-    IFormAttachmentInfo<C> attachment = getAttachment0(control, controlSide);
-    WidgetSelectDialog<C> dialog =
-        new WidgetSelectDialog<C>(DesignerPlugin.getShell(),
-            getAlignControlInfos(control, controlSide),
-            ModelMessages.FormLayoutInfoImplClassic_widgetSelect_dialogTitle,
-            ModelMessages.FormLayoutInfoImplClassic_widgetSelect_listTitle,
-            ModelMessages.FormLayoutInfoImplClassic_widgetSelect_name);
-    if (dialog.open() != Window.OK) {
-      return;
-    }
-    C targetControl = dialog.getSelectedWidget();
-    Transposer t = new Transposer(!PlacementUtils.isHorizontalSide(controlSide));
-    org.eclipse.draw2d.geometry.Rectangle controlBounds = t.t(control.getModelBounds());
-    org.eclipse.draw2d.geometry.Rectangle targetBounds = t.t(targetControl.getModelBounds());
-    int offset = 0;
-    if (!PlacementUtils.isTrailingSide(controlSide)) {
-      if (PlacementUtils.isTrailingSide(targetSide)) {
-        offset = -(targetBounds.right() - controlBounds.x);
-      } else {
-        offset = targetBounds.x;
-      }
-    } else {
-      if (PlacementUtils.isTrailingSide(targetSide)) {
-        offset = -(targetBounds.right() - controlBounds.right());
-      } else {
-        offset = controlBounds.right();
-      }
-    }
-    attachment.setOffset(offset);
-    attachment.setControl(targetControl);
-    attachment.setAlignment(FormLayoutUtils.convertGefSide(targetSide));
-    attachment.write();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Settings
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private IPreferenceStore getPreferenceStore() {
-    return GlobalState.getToolkit().getPreferences();
-  }
-
-  private boolean shouldKeepAttachmentsStyle() {
-    return getPreferenceStore().getBoolean(IPreferenceConstants.PREF_KEEP_ATTACHMENTS_STYLE);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Alignment actions
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final class AlignmentsSupport extends AbstractAlignmentActionsSupport<C> {
-    @Override
-    protected boolean isComponentInfo(ObjectInfo object) {
-      return layout.isManagedObject(object);
-    }
-
-    @Override
-    protected IAbstractComponentInfo getLayoutContainer() {
-      return layout.getComposite();
-    }
-
-    @Override
-    protected void commandAlignLeft() throws Exception {
-      C target = m_components.get(0);
-      int x = target.getModelBounds().x - FormUtils.getLayoutMarginLeft(layout);
-      int clientWidth = layout.getContainerSize().width;
-      for (C control : m_components) {
-        if (target != control) {
-          int width = control.getModelBounds().width;
-          copyAttachmentPosition(clientWidth, getAttachment0(control, IPositionConstants.LEFT), x
-              + width, getAttachment0(target, IPositionConstants.LEFT), x);
-        }
-      }
-    }
-
-    @Override
-    protected void commandAlignRight() throws Exception {
-      C target = m_components.get(0);
-      int r = target.getModelBounds().right() - FormUtils.getLayoutMarginLeft(layout);
-      int clientWidth = layout.getContainerSize().width;
-      for (C control : m_components) {
-        if (target != control) {
-          int width = control.getModelBounds().width;
-          copyAttachmentPosition(clientWidth, getAttachment0(control, IPositionConstants.RIGHT), r
-              - width, getAttachment0(target, IPositionConstants.RIGHT), r);
-        }
-      }
-    }
-
-    @Override
-    protected void commandAlignTop() throws Exception {
-      C target = m_components.get(0);
-      int y = target.getModelBounds().y - FormUtils.getLayoutMarginTop(layout);
-      int clientHeight = layout.getContainerSize().height;
-      for (C control : m_components) {
-        if (target != control) {
-          int height = control.getModelBounds().height;
-          copyAttachmentPosition(clientHeight, getAttachment0(control, IPositionConstants.TOP), y
-              + height, getAttachment0(target, IPositionConstants.TOP), y);
-        }
-      }
-    }
-
-    @Override
-    protected void commandAlignBottom() throws Exception {
-      C target = m_components.get(0);
-      int b = target.getModelBounds().bottom() - FormUtils.getLayoutMarginTop(layout);
-      int clientHeight = layout.getContainerSize().height;
-      for (C control : m_components) {
-        if (target != control) {
-          int height = control.getModelBounds().height;
-          copyAttachmentPosition(
-              clientHeight,
-              getAttachment0(control, IPositionConstants.BOTTOM),
-              b - height,
-              getAttachment0(target, IPositionConstants.BOTTOM),
-              b);
-        }
-      }
-    }
-
-    @Override
-    protected void commandAlignCenterVertically() throws Exception {
-      C target = m_components.get(0);
-      Rectangle bounds = target.getModelBounds();
-      int y = bounds.y - FormUtils.getLayoutMarginTop(layout);
-      int c = y + bounds.height / 2;
-      int clientHeight = layout.getContainerSize().height;
-      for (C control : m_components) {
-        if (target != control) {
-          int height = control.getModelBounds().height;
-          setAttachmentPosition(getAttachment0(control, IPositionConstants.TOP), clientHeight, c
-              - height
-              / 2);
-          setAttachmentPosition(getAttachment0(control, IPositionConstants.BOTTOM), clientHeight, c
-              + height
-              / 2);
-        }
-      }
-    }
-
-    @Override
-    protected void commandAlignCenterHorizontally() throws Exception {
-      C target = m_components.get(0);
-      Rectangle bounds = target.getModelBounds();
-      int x = bounds.x - FormUtils.getLayoutMarginLeft(layout);
-      int c = x + bounds.width / 2;
-      int clientWidth = layout.getContainerSize().width;
-      for (C control : m_components) {
-        if (target != control) {
-          int width = control.getModelBounds().width;
-          setAttachmentPosition(getAttachment0(control, IPositionConstants.LEFT), clientWidth, c
-              - width
-              / 2);
-          setAttachmentPosition(getAttachment0(control, IPositionConstants.RIGHT), clientWidth, c
-              + width
-              / 2);
-        }
-      }
-    }
-
-    @Override
-    protected void commandCenterVertically() throws Exception {
-      int clientHeight = layout.getContainerSize().height;
-      for (C control : m_components) {
-        int height = control.getModelBounds().height;
-        int leftPosition = clientHeight / 2 - height / 2;
-        int rightPosition = clientHeight / 2 + height / 2;
-        setAttachmentPosition(
-            getAttachment0(control, IPositionConstants.TOP),
-            clientHeight,
-            leftPosition);
-        setAttachmentPosition(
-            getAttachment0(control, IPositionConstants.BOTTOM),
-            clientHeight,
-            rightPosition);
-      }
-    }
-
-    @Override
-    protected void commandCenterHorizontally() throws Exception {
-      int clientWidth = layout.getContainerSize().width;
-      for (C control : m_components) {
-        int width = control.getModelBounds().width;
-        int leftPosition = clientWidth / 2 - width / 2;
-        int rightPosition = clientWidth / 2 + width / 2;
-        setAttachmentPosition(
-            getAttachment0(control, IPositionConstants.LEFT),
-            clientWidth,
-            leftPosition);
-        setAttachmentPosition(
-            getAttachment0(control, IPositionConstants.RIGHT),
-            clientWidth,
-            rightPosition);
-      }
-    }
-
-    @Override
-    protected void commandReplicateWidth() throws Exception {
-      C target = m_components.get(0);
-      int width = target.getModelBounds().width;
-      int clientWidth = layout.getContainerSize().width;
-      for (C control : m_components) {
-        if (target != control) {
-          int x = control.getModelBounds().x - FormUtils.getLayoutMarginLeft(layout);
-          setAttachmentPosition(getAttachment0(control, IPositionConstants.LEFT), clientWidth, x);
-          setAttachmentPosition(getAttachment0(control, IPositionConstants.RIGHT), clientWidth, x
-              + width);
-        }
-      }
-    }
-
-    @Override
-    protected void commandReplicateHeight() throws Exception {
-      C target = m_components.get(0);
-      int height = target.getModelBounds().height;
-      int clientHeight = layout.getContainerSize().height;
-      for (C control : m_components) {
-        if (target != control) {
-          int y = control.getModelBounds().y - FormUtils.getLayoutMarginTop(layout);
-          setAttachmentPosition(getAttachment0(control, IPositionConstants.TOP), clientHeight, y);
-          setAttachmentPosition(getAttachment0(control, IPositionConstants.BOTTOM), clientHeight, y
-              + height);
-        }
-      }
-    }
-
-    @Override
-    protected void commandDistributeSpaceVertically() throws Exception {
-      distributeSpace(false);
-    }
-
-    @Override
-    protected void commandDistributeSpaceHorizontally() throws Exception {
-      distributeSpace(true);
-    }
-
-    private void distributeSpace(boolean isHorizontal) throws Exception {
-      int leadingSide = isHorizontal ? IPositionConstants.LEFT : IPositionConstants.TOP;
-      int trailingSide = isHorizontal ? IPositionConstants.RIGHT : IPositionConstants.BOTTOM;
-      final Transposer t = new Transposer(!isHorizontal);
-      int margin =
-          isHorizontal
-              ? FormUtils.getLayoutMarginLeft(layout)
-              : FormUtils.getLayoutMarginTop(layout);
-      List<C> controlList = Lists.newArrayList(m_components);
-      int clientSize = t.t(layout.getContainerSize()).width;
-      boolean alternative = DesignerPlugin.isCtrlPressed() && m_components.size() > 2;
-      // calculate sum size of the controls
-      int controlsSize = 0;
-      for (IAbstractComponentInfo control : m_components) {
-        controlsSize += t.t(control.getModelBounds()).width;
-      }
-      // sort controls by their leading positions
-      Collections.sort(controlList, new Comparator<IAbstractComponentInfo>() {
-        @Override
-        public int compare(IAbstractComponentInfo o1, IAbstractComponentInfo o2) {
-          return t.t(o1.getModelBounds()).x - t.t(o2.getModelBounds()).x;
-        }
-      });
-      // distribute controls between leading-most and trailing-most controls (if Ctrl pressed),
-      // or in parents client area
-      int space;
-      int x;
-      if (alternative) {
-        // calculate space and start location (x)
-        C leadingControl = controlList.get(0);
-        C trailingControl = controlList.get(controlList.size() - 1);
-        Rectangle leadingBounds = t.t(leadingControl.getModelBounds());
-        Rectangle trailingBounds = t.t(trailingControl.getModelBounds());
-        int totalSize = trailingBounds.right() - leadingBounds.x;
-        space = (totalSize - controlsSize) / (controlList.size() - 1);
-        x = leadingBounds.x + margin;
-      } else {
-        // calculate space and start location (x)
-        space = (clientSize - controlsSize) / (controlList.size() + 1);
-        x = space;
-      }
-      // change positions for controls from leading to trailing
-      for (int i = 0; i < controlList.size(); i++) {
-        C control = controlList.get(i);
-        int width = t.t(control.getModelBounds()).width;
-        if (!(alternative && (i == 0 || i == controlList.size() - 1))) {
-          setAttachmentPosition(getAttachment0(control, leadingSide), clientSize, x);
-          setAttachmentPosition(getAttachment0(control, trailingSide), clientSize, x + width);
-        }
-        x += width;
-        x += space;
-      }
-    }
-
-    private void copyAttachmentPosition(int parentSize,
-        IFormAttachmentInfo<C> target,
-        int oppositeTargetValue,
-        IFormAttachmentInfo<C> source,
-        int sourceValue) throws Exception {
-      IFormAttachmentInfo<C> targetOpposite = getOpposite(target);
-      if (shouldKeepAttachmentsStyle() || source.isVirtual()) {
-        setAttachmentPosition(target, parentSize, sourceValue);
-        setAttachmentPosition(targetOpposite, parentSize, oppositeTargetValue);
-        return;
-      } else {
-        boolean virtualTarget = target.isVirtual();
-        copy(source, target);
-        if (virtualTarget) {
-          targetOpposite.delete();
-        } else {
-          if (!targetOpposite.isVirtual()) {
-            setAttachmentPosition(targetOpposite, parentSize, oppositeTargetValue);
-          }
-        }
-      }
-      target.write();
-    }
-
-    private void copy(IFormAttachmentInfo<C> source, IFormAttachmentInfo<C> target) {
-      if (source.isVirtual()) {
-        // do nothing
-      } else if (isControlAttachment(source)) {
-        target.setControl(source.getControl());
-        target.setAlignment(source.getAlignment());
-        target.setOffset(source.getOffset());
-      } else {
-        target.setNumerator(source.getNumerator());
-        target.setDenominator(source.getDenominator());
-        target.setOffset(source.getOffset());
-      }
-    }
-
-    private void setAttachmentPosition(IFormAttachmentInfo<C> attachment, int parentSize, int value)
-        throws Exception {
-      if (attachment.isParentLeading()) {
-        attachment.setOffset(value);
-      } else if (attachment.isParentTrailing()) {
-        attachment.setOffset(value - parentSize);
-      } else if (attachment.isPercentaged()) {
-        int percent = (int) ((double) value * 100 / parentSize);
-        attachment.setNumerator(percent);
-      } else {
-        attachment.setControl(null);
-        attachment.setNumerator(0);
-        attachment.setOffset(value);
-      }
-      attachment.write();
-    }
-  }
+	private final IFormLayoutInfo<C> layout;
+	private final AnchorActionsClassic<C> anchorActions;
+	private final AbstractAlignmentActionsSupport<C> alignmentActions;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FormLayoutInfoImplClassic(IFormLayoutInfo<C> layout_) {
+		this.layout = layout_;
+		this.anchorActions = new AnchorActionsClassic<C>(this);
+		this.alignmentActions = new AlignmentsSupport();
+		this.layout.addBroadcastListener(new ObjectEventListener() {
+			@Override
+			public void addSelectionActions(List<ObjectInfo> objects, List<Object> actions)
+					throws Exception {
+				alignmentActions.addAlignmentActions(objects, actions);
+			}
+		});
+		this.layout.addBroadcastListener(new LayoutAssistantListener() {
+			@Override
+			public void createAssistantPages(List<ObjectInfo> objects,
+					TabFolder folder,
+					List<ILayoutAssistantPage> pages) throws Exception {
+				if (!objects.isEmpty()) {
+					for (ObjectInfo object : objects) {
+						if (object.getParent() != layout.getComposite()) {
+							return;
+						}
+					}
+					ArrayList<Object> actions = Lists.newArrayList();
+					alignmentActions.addAlignmentActions(objects, actions);
+					LayoutAssistantPageClassic<C> page =
+							new LayoutAssistantPageClassic<C>(layout, folder, objects, actions);
+					TabFactory.item(folder).text("FormLayout").control(page);
+					pages.add(page);
+				}
+			}
+		});
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Returns the appropriate form attachment instance or <code>null</code> if it is virtual.
+	 */
+	public IFormAttachmentInfo<C> getAttachment(C control, int side) throws Exception {
+		if (layout.isManagedObject(control)) {
+			IFormAttachmentInfo<C> attachment = getAttachment0(control, side);
+			return attachment.isVirtual() ? null : attachment;
+		}
+		return null;
+	}
+
+	@SuppressWarnings("unchecked")
+	private IFormAttachmentInfo<C> getAttachment0(C child, int side) throws Exception {
+		IFormDataInfo<C> formData = (IFormDataInfo<C>) layout.getLayoutData2(child);
+		return formData.getAttachment(side);
+	}
+
+	public boolean isLeft(IFormAttachmentInfo<C> attachment) {
+		return attachment.getSide().getEngineSide() == IPositionConstants.LEFT;
+	}
+
+	public boolean isRight(IFormAttachmentInfo<C> attachment) {
+		return attachment.getSide().getEngineSide() == IPositionConstants.RIGHT;
+	}
+
+	public boolean isTop(IFormAttachmentInfo<C> attachment) {
+		return attachment.getSide().getEngineSide() == IPositionConstants.TOP;
+	}
+
+	public boolean isBottom(IFormAttachmentInfo<C> attachment) {
+		return attachment.getSide().getEngineSide() == IPositionConstants.BOTTOM;
+	}
+
+	public boolean isParentAttachment(IFormAttachmentInfo<C> attachment) {
+		return attachment.getControl() == null;
+	}
+
+	public boolean isControlAttachment(IFormAttachmentInfo<C> attachment) {
+		return !attachment.isVirtual() && attachment.getControl() != null;
+	}
+
+	public boolean shouldShowConstraintLine(IFormAttachmentInfo<C> attachment) {
+		IFormAttachmentInfo<C> opposite;
+		try {
+			opposite = getOpposite(attachment);
+		} catch (Throwable e) {
+			throw ReflectionUtils.propagate(e);
+		}
+		if (opposite.isVirtual()) {
+			return true;
+		}
+		int align = attachment.getAlignment();
+		int oppositeSideAlign = opposite.getAlignment();
+		if (align != oppositeSideAlign) {
+			return true;
+		}
+		int offset = attachment.getOffset();
+		int oppositeOffset = opposite.getOffset();
+		return Math.abs(offset) < Math.abs(oppositeOffset);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Move
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void moveToPercentOffset(C child, int side, int percent, int offset) throws Exception {
+		IFormAttachmentInfo<C> attachment = getAttachment0(child, side);
+		attachment.setControl(null);
+		attachment.setNumerator(percent);
+		attachment.setDenominator(100);
+		attachment.setOffset(offset);
+		attachment.write();
+		rebindOpposite(attachment);
+	}
+
+	public void moveToOffset(C child, int side, int parentSize, int offset) throws Exception {
+		IFormAttachmentInfo<C> attachment = getAttachment0(child, side);
+		moveToOffset(attachment, parentSize, offset);
+	}
+
+	private void moveToOffset(IFormAttachmentInfo<C> attachment, int parentSize, int offset)
+			throws Exception {
+		bindToParent(attachment, parentSize, offset);
+		rebindOpposite(attachment);
+	}
+
+	public void moveToMargin(C child, int side, int direction, int marginValue) throws Exception {
+		IFormAttachmentInfo<C> attachment = getAttachment0(child, side);
+		attachment.setControl(null);
+		attachment.setDenominator(100);
+		if (!PlacementUtils.isTrailingSide(direction)) {
+			attachment.setNumerator(0);
+			attachment.setOffset(marginValue);
+		} else {
+			attachment.setNumerator(100);
+			attachment.setOffset(-marginValue);
+		}
+		attachment.write();
+		rebindOpposite(attachment);
+	}
+
+	public void moveToControl(C child, int side, C target, int alignment, int offset)
+			throws Exception {
+		IFormAttachmentInfo<C> attachment = getAttachment0(child, side);
+		attachment.setControl(target);
+		attachment.setOffset(offset);
+		attachment.setAlignment(FormLayoutUtils.convertGefSide(alignment));
+		attachment.write();
+		//
+		int thisSide = attachment.getSide().getEngineSide();
+		IFormAttachmentInfo<C> opposite = getOpposite(attachment);
+		if (!opposite.isVirtual()) {
+			opposite.setControl(target);
+			opposite.setAlignment(FormLayoutUtils.convertGefSide(alignment));
+			org.eclipse.draw2d.geometry.Rectangle controlBounds = child.getModelBounds();
+			int oppositeOffset = attachment.getOffset();
+			if (controlBounds != null) {
+				int k = PlacementUtils.isTrailingSide(thisSide) ? -1 : 1;
+				if (PlacementUtils.isHorizontalSide(opposite.getSide().getEngineSide())) {
+					oppositeOffset += k * controlBounds.width;
+				} else {
+					oppositeOffset += k * controlBounds.height;
+				}
+			}
+			opposite.setOffset(oppositeOffset);
+			opposite.write();
+		}
+	}
+
+	/**
+	 * Binds an attachment to parent.
+	 */
+	private void bindToParent(IFormAttachmentInfo<C> attachment, int parentSize, int offset)
+			throws Exception {
+		int numerator = 0;
+		int denominator = 100;
+		int oldNumerator = attachment.getNumerator();
+		if (oldNumerator == 100) {
+			numerator = 100;
+			offset = parentSize - offset;
+			offset = -offset;
+		}
+		attachment.setControl(null);
+		attachment.setNumerator(numerator);
+		attachment.setDenominator(denominator);
+		attachment.setOffset(offset);
+		attachment.write();
+	}
+
+	/**
+	 * If the opposite side has an attachment, it would be rebound to parent
+	 */
+	private void rebindOpposite(IFormAttachmentInfo<C> attachment) throws Exception {
+		int thisSide = attachment.getSide().getEngineSide();
+		IFormAttachmentInfo<C> opposite = getOpposite(attachment);
+		if (!opposite.isVirtual()) {
+			opposite.setControl(null);
+			org.eclipse.draw2d.geometry.Rectangle controlBounds =
+					getThisControl(attachment).getModelBounds();
+			opposite.setNumerator(attachment.getNumerator());
+			opposite.setDenominator(attachment.getDenominator());
+			if (controlBounds != null) {
+				int sign = PlacementUtils.isTrailingSide(thisSide) ? -1 : 1;
+				if (PlacementUtils.isHorizontalSide(opposite.getSide().getEngineSide())) {
+					opposite.setOffset(attachment.getOffset() + sign * controlBounds.width);
+				} else {
+					opposite.setOffset(attachment.getOffset() + sign * controlBounds.height);
+				}
+			}
+			opposite.write();
+		}
+	}
+
+	@SuppressWarnings("unchecked")
+	private C getThisControl(IFormAttachmentInfo<C> attachment) {
+		return (C) attachment.getParent().getParent();
+	}
+
+	@SuppressWarnings("unchecked")
+	private IFormAttachmentInfo<C> getOpposite(IFormAttachmentInfo<C> attachment) throws Exception {
+		IFormDataInfo<C> formData = (IFormDataInfo<C>) attachment.getParent();
+		int oppositeSide = attachment.getSide().getOppositeSide().getEngineSide();
+		return formData.getAttachment(oppositeSide);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Possible controls to attach to
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public List<C> getAlignControlInfos(C sourceControl, int sourceSide) throws Exception {
+		List<C> list = Lists.newArrayList();
+		for (C info : layout.getControls()) {
+			if (isRelative(info, sourceControl, sourceSide)) {
+				continue;
+			}
+			list.add(info);
+		}
+		return list;
+	}
+
+	/**
+	 * Return <code>true</code>, if <code>control</code> is located relative to
+	 * <code>refControl</code>.
+	 */
+	private boolean isRelative(C checkingControl, C refControl, int side) throws Exception {
+		Set<C> referenced = Sets.newHashSet();
+		collectReferencedControls(checkingControl, side, referenced);
+		return referenced.contains(refControl);
+	}
+
+	/**
+	 * Collect all children relative to which <code>control</code> is located.
+	 */
+	private void collectReferencedControls(C control, int side, Set<C> referenced) throws Exception {
+		if (referenced.contains(control)) {
+			return;
+		}
+		referenced.add(control);
+		if (PlacementUtils.isHorizontalSide(side)) {
+			collectReferencedControls0(control, IPositionConstants.LEFT, referenced);
+			collectReferencedControls0(control, IPositionConstants.RIGHT, referenced);
+		} else {
+			collectReferencedControls0(control, IPositionConstants.TOP, referenced);
+			collectReferencedControls0(control, IPositionConstants.BOTTOM, referenced);
+		}
+	}
+
+	private void collectReferencedControls0(C control, int side, Set<C> referenced) throws Exception {
+		IFormAttachmentInfo<C> attachment = getAttachment0(control, side);
+		if (isControlAttachment(attachment)) {
+			collectReferencedControls(attachment.getControl(), side, referenced);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Create
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void createToOffset(C child, int side, int parentSize, int offset) throws Exception {
+		IFormAttachmentInfo<C> attachment = getAttachment0(child, side);
+		if (PlacementUtils.isTrailingSide(side)) {
+			resizeToOffset(attachment, parentSize, offset);
+		} else {
+			moveToOffset(attachment, parentSize, offset);
+		}
+	}
+
+	public void createToControl(C child, int side, C targetControl, int targetSide, int offset)
+			throws Exception {
+		IFormAttachmentInfo<C> attachment = getAttachment0(child, side);
+		if (PlacementUtils.isTrailingSide(side)) {
+			resizeToControl(attachment, targetControl, targetSide, offset);
+		} else {
+			moveToControl(child, side, targetControl, targetSide, offset);
+		}
+	}
+
+	public void createToPercentOffset(C child, int side, int percent, int offset) throws Exception {
+		IFormAttachmentInfo<C> attachment = getAttachment0(child, side);
+		if (PlacementUtils.isTrailingSide(side)) {
+			resizeToPercentOffset(attachment, percent, offset);
+		} else {
+			moveToPercentOffset(child, side, percent, offset);
+		}
+	}
+
+	public void createToMargin(C child, int side, int direction, int marginValue) throws Exception {
+		IFormAttachmentInfo<C> attachment = getAttachment0(child, side);
+		if (PlacementUtils.isTrailingSide(side)) {
+			resizeToMargin(attachment, direction, marginValue);
+		} else {
+			moveToMargin(child, side, direction, marginValue);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Resize
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void resizeToOffset(IFormAttachmentInfo<C> attachment, int parentDimension, int offset)
+			throws Exception {
+		bindOppositeToParent(attachment);
+		bindToParent(attachment, parentDimension, offset);
+	}
+
+	private void bindOppositeToParent(IFormAttachmentInfo<C> attachment) throws Exception {
+		IFormAttachmentInfo<C> opposite = getOpposite(attachment);
+		if (opposite.isVirtual()) {
+			Rectangle parentBounds = getThisControl(attachment).getModelBounds();
+			opposite.setDenominator(100);
+			if (isLeft(attachment)) {
+				opposite.setOffset(parentBounds.x
+						+ parentBounds.width
+						- FormUtils.getLayoutMarginLeft(layout));
+			} else if (isTop(attachment)) {
+				opposite.setOffset(parentBounds.y
+						+ parentBounds.height
+						- FormUtils.getLayoutMarginTop(layout));
+			} else if (isRight(attachment)) {
+				opposite.setOffset(parentBounds.x - FormUtils.getLayoutMarginLeft(layout));
+			} else if (isBottom(attachment)) {
+				opposite.setOffset(parentBounds.y - FormUtils.getLayoutMarginTop(layout));
+			}
+			opposite.write();
+		}
+	}
+
+	public void resizeToPercentOffset(IFormAttachmentInfo<C> attachment, int percent, int offset)
+			throws Exception {
+		bindOppositeToParent(attachment);
+		attachment.setDenominator(100);
+		attachment.setControl(null);
+		attachment.setNumerator(percent);
+		attachment.setOffset(offset);
+		attachment.write();
+	}
+
+	public void resizeToMargin(IFormAttachmentInfo<C> attachment, int direction, int marginValue)
+			throws Exception {
+		bindOppositeToParent(attachment);
+		attachment.setDenominator(100);
+		attachment.setControl(null);
+		if (direction == IPositionConstants.LEFT || direction == IPositionConstants.TOP) {
+			attachment.setNumerator(0);
+			attachment.setOffset(marginValue);
+		} else {
+			attachment.setNumerator(100);
+			attachment.setDenominator(100);
+			attachment.setOffset(-marginValue);
+		}
+		attachment.write();
+	}
+
+	public void resizeToControl(IFormAttachmentInfo<C> attachment,
+			C targetControl,
+			int targetSide,
+			int offset) throws Exception {
+		bindOppositeToParent(attachment);
+		attachment.setControl(targetControl);
+		attachment.setOffset(offset);
+		attachment.setAlignment(FormLayoutUtils.convertGefSide(targetSide));
+		attachment.write();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Anchor changing actions
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AnchorActionsClassic<C> getAnchorActions() {
+		return anchorActions;
+	}
+
+	public void anchor_delete(C control, int controlSide) throws Exception {
+		IFormAttachmentInfo<C> attachment = getAttachment0(control, controlSide);
+		attachment.delete();
+	}
+
+	public void anchor_bindToParent(C control, int controlSide, int parentSide) throws Exception {
+		layout.anchorToParent(control, controlSide, parentSide);
+	}
+
+	public void anchor_bindToParentAsPercent(C control, int controlSide) throws Exception {
+		layout.anchorToParentAsPercent(control, controlSide);
+	}
+
+	public void anchor_bindToControl(C control, int controlSide, int targetSide) throws Exception {
+		IFormAttachmentInfo<C> attachment = getAttachment0(control, controlSide);
+		WidgetSelectDialog<C> dialog =
+				new WidgetSelectDialog<C>(DesignerPlugin.getShell(),
+						getAlignControlInfos(control, controlSide),
+						ModelMessages.FormLayoutInfoImplClassic_widgetSelect_dialogTitle,
+						ModelMessages.FormLayoutInfoImplClassic_widgetSelect_listTitle,
+						ModelMessages.FormLayoutInfoImplClassic_widgetSelect_name);
+		if (dialog.open() != Window.OK) {
+			return;
+		}
+		C targetControl = dialog.getSelectedWidget();
+		Transposer t = new Transposer(!PlacementUtils.isHorizontalSide(controlSide));
+		org.eclipse.draw2d.geometry.Rectangle controlBounds = t.t(control.getModelBounds());
+		org.eclipse.draw2d.geometry.Rectangle targetBounds = t.t(targetControl.getModelBounds());
+		int offset = 0;
+		if (!PlacementUtils.isTrailingSide(controlSide)) {
+			if (PlacementUtils.isTrailingSide(targetSide)) {
+				offset = -(targetBounds.right() - controlBounds.x);
+			} else {
+				offset = targetBounds.x;
+			}
+		} else {
+			if (PlacementUtils.isTrailingSide(targetSide)) {
+				offset = -(targetBounds.right() - controlBounds.right());
+			} else {
+				offset = controlBounds.right();
+			}
+		}
+		attachment.setOffset(offset);
+		attachment.setControl(targetControl);
+		attachment.setAlignment(FormLayoutUtils.convertGefSide(targetSide));
+		attachment.write();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Settings
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private IPreferenceStore getPreferenceStore() {
+		return GlobalState.getToolkit().getPreferences();
+	}
+
+	private boolean shouldKeepAttachmentsStyle() {
+		return getPreferenceStore().getBoolean(IPreferenceConstants.PREF_KEEP_ATTACHMENTS_STYLE);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Alignment actions
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final class AlignmentsSupport extends AbstractAlignmentActionsSupport<C> {
+		@Override
+		protected boolean isComponentInfo(ObjectInfo object) {
+			return layout.isManagedObject(object);
+		}
+
+		@Override
+		protected IAbstractComponentInfo getLayoutContainer() {
+			return layout.getComposite();
+		}
+
+		@Override
+		protected void commandAlignLeft() throws Exception {
+			C target = m_components.get(0);
+			int x = target.getModelBounds().x - FormUtils.getLayoutMarginLeft(layout);
+			int clientWidth = layout.getContainerSize().width;
+			for (C control : m_components) {
+				if (target != control) {
+					int width = control.getModelBounds().width;
+					copyAttachmentPosition(clientWidth, getAttachment0(control, IPositionConstants.LEFT), x
+							+ width, getAttachment0(target, IPositionConstants.LEFT), x);
+				}
+			}
+		}
+
+		@Override
+		protected void commandAlignRight() throws Exception {
+			C target = m_components.get(0);
+			int r = target.getModelBounds().right() - FormUtils.getLayoutMarginLeft(layout);
+			int clientWidth = layout.getContainerSize().width;
+			for (C control : m_components) {
+				if (target != control) {
+					int width = control.getModelBounds().width;
+					copyAttachmentPosition(clientWidth, getAttachment0(control, IPositionConstants.RIGHT), r
+							- width, getAttachment0(target, IPositionConstants.RIGHT), r);
+				}
+			}
+		}
+
+		@Override
+		protected void commandAlignTop() throws Exception {
+			C target = m_components.get(0);
+			int y = target.getModelBounds().y - FormUtils.getLayoutMarginTop(layout);
+			int clientHeight = layout.getContainerSize().height;
+			for (C control : m_components) {
+				if (target != control) {
+					int height = control.getModelBounds().height;
+					copyAttachmentPosition(clientHeight, getAttachment0(control, IPositionConstants.TOP), y
+							+ height, getAttachment0(target, IPositionConstants.TOP), y);
+				}
+			}
+		}
+
+		@Override
+		protected void commandAlignBottom() throws Exception {
+			C target = m_components.get(0);
+			int b = target.getModelBounds().bottom() - FormUtils.getLayoutMarginTop(layout);
+			int clientHeight = layout.getContainerSize().height;
+			for (C control : m_components) {
+				if (target != control) {
+					int height = control.getModelBounds().height;
+					copyAttachmentPosition(
+							clientHeight,
+							getAttachment0(control, IPositionConstants.BOTTOM),
+							b - height,
+							getAttachment0(target, IPositionConstants.BOTTOM),
+							b);
+				}
+			}
+		}
+
+		@Override
+		protected void commandAlignCenterVertically() throws Exception {
+			C target = m_components.get(0);
+			Rectangle bounds = target.getModelBounds();
+			int y = bounds.y - FormUtils.getLayoutMarginTop(layout);
+			int c = y + bounds.height / 2;
+			int clientHeight = layout.getContainerSize().height;
+			for (C control : m_components) {
+				if (target != control) {
+					int height = control.getModelBounds().height;
+					setAttachmentPosition(getAttachment0(control, IPositionConstants.TOP), clientHeight, c
+							- height
+							/ 2);
+					setAttachmentPosition(getAttachment0(control, IPositionConstants.BOTTOM), clientHeight, c
+							+ height
+							/ 2);
+				}
+			}
+		}
+
+		@Override
+		protected void commandAlignCenterHorizontally() throws Exception {
+			C target = m_components.get(0);
+			Rectangle bounds = target.getModelBounds();
+			int x = bounds.x - FormUtils.getLayoutMarginLeft(layout);
+			int c = x + bounds.width / 2;
+			int clientWidth = layout.getContainerSize().width;
+			for (C control : m_components) {
+				if (target != control) {
+					int width = control.getModelBounds().width;
+					setAttachmentPosition(getAttachment0(control, IPositionConstants.LEFT), clientWidth, c
+							- width
+							/ 2);
+					setAttachmentPosition(getAttachment0(control, IPositionConstants.RIGHT), clientWidth, c
+							+ width
+							/ 2);
+				}
+			}
+		}
+
+		@Override
+		protected void commandCenterVertically() throws Exception {
+			int clientHeight = layout.getContainerSize().height;
+			for (C control : m_components) {
+				int height = control.getModelBounds().height;
+				int leftPosition = clientHeight / 2 - height / 2;
+				int rightPosition = clientHeight / 2 + height / 2;
+				setAttachmentPosition(
+						getAttachment0(control, IPositionConstants.TOP),
+						clientHeight,
+						leftPosition);
+				setAttachmentPosition(
+						getAttachment0(control, IPositionConstants.BOTTOM),
+						clientHeight,
+						rightPosition);
+			}
+		}
+
+		@Override
+		protected void commandCenterHorizontally() throws Exception {
+			int clientWidth = layout.getContainerSize().width;
+			for (C control : m_components) {
+				int width = control.getModelBounds().width;
+				int leftPosition = clientWidth / 2 - width / 2;
+				int rightPosition = clientWidth / 2 + width / 2;
+				setAttachmentPosition(
+						getAttachment0(control, IPositionConstants.LEFT),
+						clientWidth,
+						leftPosition);
+				setAttachmentPosition(
+						getAttachment0(control, IPositionConstants.RIGHT),
+						clientWidth,
+						rightPosition);
+			}
+		}
+
+		@Override
+		protected void commandReplicateWidth() throws Exception {
+			C target = m_components.get(0);
+			int width = target.getModelBounds().width;
+			int clientWidth = layout.getContainerSize().width;
+			for (C control : m_components) {
+				if (target != control) {
+					int x = control.getModelBounds().x - FormUtils.getLayoutMarginLeft(layout);
+					setAttachmentPosition(getAttachment0(control, IPositionConstants.LEFT), clientWidth, x);
+					setAttachmentPosition(getAttachment0(control, IPositionConstants.RIGHT), clientWidth, x
+							+ width);
+				}
+			}
+		}
+
+		@Override
+		protected void commandReplicateHeight() throws Exception {
+			C target = m_components.get(0);
+			int height = target.getModelBounds().height;
+			int clientHeight = layout.getContainerSize().height;
+			for (C control : m_components) {
+				if (target != control) {
+					int y = control.getModelBounds().y - FormUtils.getLayoutMarginTop(layout);
+					setAttachmentPosition(getAttachment0(control, IPositionConstants.TOP), clientHeight, y);
+					setAttachmentPosition(getAttachment0(control, IPositionConstants.BOTTOM), clientHeight, y
+							+ height);
+				}
+			}
+		}
+
+		@Override
+		protected void commandDistributeSpaceVertically() throws Exception {
+			distributeSpace(false);
+		}
+
+		@Override
+		protected void commandDistributeSpaceHorizontally() throws Exception {
+			distributeSpace(true);
+		}
+
+		private void distributeSpace(boolean isHorizontal) throws Exception {
+			int leadingSide = isHorizontal ? IPositionConstants.LEFT : IPositionConstants.TOP;
+			int trailingSide = isHorizontal ? IPositionConstants.RIGHT : IPositionConstants.BOTTOM;
+			final Transposer t = new Transposer(!isHorizontal);
+			int margin =
+					isHorizontal
+					? FormUtils.getLayoutMarginLeft(layout)
+							: FormUtils.getLayoutMarginTop(layout);
+			List<C> controlList = Lists.newArrayList(m_components);
+			int clientSize = t.t(layout.getContainerSize()).width;
+			boolean alternative = DesignerPlugin.isCtrlPressed() && m_components.size() > 2;
+			// calculate sum size of the controls
+			int controlsSize = 0;
+			for (IAbstractComponentInfo control : m_components) {
+				controlsSize += t.t(control.getModelBounds()).width;
+			}
+			// sort controls by their leading positions
+			Collections.sort(controlList, new Comparator<IAbstractComponentInfo>() {
+				@Override
+				public int compare(IAbstractComponentInfo o1, IAbstractComponentInfo o2) {
+					return t.t(o1.getModelBounds()).x - t.t(o2.getModelBounds()).x;
+				}
+			});
+			// distribute controls between leading-most and trailing-most controls (if Ctrl pressed),
+			// or in parents client area
+			int space;
+			int x;
+			if (alternative) {
+				// calculate space and start location (x)
+				C leadingControl = controlList.get(0);
+				C trailingControl = controlList.get(controlList.size() - 1);
+				Rectangle leadingBounds = t.t(leadingControl.getModelBounds());
+				Rectangle trailingBounds = t.t(trailingControl.getModelBounds());
+				int totalSize = trailingBounds.right() - leadingBounds.x;
+				space = (totalSize - controlsSize) / (controlList.size() - 1);
+				x = leadingBounds.x + margin;
+			} else {
+				// calculate space and start location (x)
+				space = (clientSize - controlsSize) / (controlList.size() + 1);
+				x = space;
+			}
+			// change positions for controls from leading to trailing
+			for (int i = 0; i < controlList.size(); i++) {
+				C control = controlList.get(i);
+				int width = t.t(control.getModelBounds()).width;
+				if (!(alternative && (i == 0 || i == controlList.size() - 1))) {
+					setAttachmentPosition(getAttachment0(control, leadingSide), clientSize, x);
+					setAttachmentPosition(getAttachment0(control, trailingSide), clientSize, x + width);
+				}
+				x += width;
+				x += space;
+			}
+		}
+
+		private void copyAttachmentPosition(int parentSize,
+				IFormAttachmentInfo<C> target,
+				int oppositeTargetValue,
+				IFormAttachmentInfo<C> source,
+				int sourceValue) throws Exception {
+			IFormAttachmentInfo<C> targetOpposite = getOpposite(target);
+			if (shouldKeepAttachmentsStyle() || source.isVirtual()) {
+				setAttachmentPosition(target, parentSize, sourceValue);
+				setAttachmentPosition(targetOpposite, parentSize, oppositeTargetValue);
+				return;
+			} else {
+				boolean virtualTarget = target.isVirtual();
+				copy(source, target);
+				if (virtualTarget) {
+					targetOpposite.delete();
+				} else {
+					if (!targetOpposite.isVirtual()) {
+						setAttachmentPosition(targetOpposite, parentSize, oppositeTargetValue);
+					}
+				}
+			}
+			target.write();
+		}
+
+		private void copy(IFormAttachmentInfo<C> source, IFormAttachmentInfo<C> target) {
+			if (source.isVirtual()) {
+				// do nothing
+			} else if (isControlAttachment(source)) {
+				target.setControl(source.getControl());
+				target.setAlignment(source.getAlignment());
+				target.setOffset(source.getOffset());
+			} else {
+				target.setNumerator(source.getNumerator());
+				target.setDenominator(source.getDenominator());
+				target.setOffset(source.getOffset());
+			}
+		}
+
+		private void setAttachmentPosition(IFormAttachmentInfo<C> attachment, int parentSize, int value)
+				throws Exception {
+			if (attachment.isParentLeading()) {
+				attachment.setOffset(value);
+			} else if (attachment.isParentTrailing()) {
+				attachment.setOffset(value - parentSize);
+			} else if (attachment.isPercentaged()) {
+				int percent = (int) ((double) value * 100 / parentSize);
+				attachment.setNumerator(percent);
+			} else {
+				attachment.setControl(null);
+				attachment.setNumerator(0);
+				attachment.setOffset(value);
+			}
+			attachment.write();
+		}
+	}
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/form/FormLayoutPreferences.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/form/FormLayoutPreferences.java
index 744c478bf..90598a9c5 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/form/FormLayoutPreferences.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/form/FormLayoutPreferences.java
@@ -42,270 +42,270 @@
  * @coverage swt.model.layout.form
  */
 public final class FormLayoutPreferences<C extends IControlInfo> {
-  private static final String PREFERENCE_CHANGE_LISTENER_KEY =
-      "FormLayout.preferenceChangeListener";
-  private final IFormLayoutInfo<C> m_layout;
-  private final ObjectInfo m_layoutModel;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FormLayoutPreferences(IFormLayoutInfo<C> layout, ToolkitDescription toolkit) {
-    m_layout = layout;
-    m_preferences = toolkit.getPreferences();
-    m_layoutModel = layout.getUnderlyingModel();
-    m_layoutModel.addBroadcastListener(new ObjectInfoTreeComplete() {
-      @Override
-      public void invoke() throws Exception {
-        addPropertyChangeListener();
-      }
-    });
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IPropertyChangeListener management
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds {@link IPropertyChangeListener}, only one time and using root {@link ObjectInfo}.
-   */
-  public void addPropertyChangeListener() {
-    ObjectInfo rooObject = m_layoutModel.getRoot();
-    if (rooObject.getArbitraryValue(PREFERENCE_CHANGE_LISTENER_KEY) == null) {
-      final IPropertyChangeListener listener = new PreferenceChangeListener();
-      // add listener
-      getPreferenceStore().addPropertyChangeListener(listener);
-      rooObject.putArbitraryValue(PREFERENCE_CHANGE_LISTENER_KEY, listener);
-      // schedule removing listener on dispose()
-      rooObject.addBroadcastListener(new ObjectEventListener() {
-        @Override
-        public void dispose() throws Exception {
-          getPreferenceStore().removePropertyChangeListener(listener);
-          m_layoutModel.getRoot().putArbitraryValue(PREFERENCE_CHANGE_LISTENER_KEY, null);
-        }
-      });
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Settings
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public IPreferenceStore getPreferenceStore() {
-    return m_preferences;
-  }
-
-  public List<Integer> getVerticalPercents() {
-    return Lists.newArrayList(loadPercents(KEY_V_PERCENTS));
-  }
-
-  public List<Integer> getHorizontalPercents() {
-    return Lists.newArrayList(loadPercents(KEY_H_PERCENTS));
-  }
-
-  public int getSnapSensitivity() {
-    return getPreferenceStore().getInt(IPreferenceConstants.PREF_SNAP_SENS);
-  }
-
-  public int getHorizontalContainerGap() {
-    return getPreferenceStore().getInt(IPreferenceConstants.PREF_H_WINDOW_MARGIN);
-  }
-
-  public int getVerticalContainerGap() {
-    return getPreferenceStore().getInt(IPreferenceConstants.PREF_V_WINDOW_MARGIN);
-  }
-
-  public int getHorizontalPercentsGap() {
-    return getPreferenceStore().getInt(IPreferenceConstants.PREF_H_PERCENT_OFFSET);
-  }
-
-  public int getVerticalPercentsGap() {
-    return getPreferenceStore().getInt(IPreferenceConstants.PREF_V_PERCENT_OFFSET);
-  }
-
-  public int getHorizontalComponentGap() {
-    return getPreferenceStore().getInt(IPreferenceConstants.PREF_H_WIDGET_OFFSET);
-  }
-
-  public int getVerticalComponentGap() {
-    return getPreferenceStore().getInt(IPreferenceConstants.PREF_V_WIDGET_OFFSET);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Manage current layout percent offsets
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final QualifiedName KEY_H_PERCENTS = new QualifiedName(Activator.PLUGIN_ID,
-      IPreferenceConstants.PREF_H_PERCENTS);
-  private static final QualifiedName KEY_V_PERCENTS = new QualifiedName(Activator.PLUGIN_ID,
-      IPreferenceConstants.PREF_V_PERCENTS);
-  private final IPreferenceStore m_preferences;
-
-  /**
-   * Stores given percent value into underlying resource.
-   */
-  public void addPercent(int percent, boolean isHorizontal) {
-    QualifiedName keyPercents = isHorizontal ? KEY_H_PERCENTS : KEY_V_PERCENTS;
-    Set<Integer> percents = loadPercents(keyPercents);
-    percents.add(percent);
-    savePercents(keyPercents, percents);
-  }
-
-  /**
-   * Removes given percent value from underlying resource.
-   */
-  public void removePercent(int percent, boolean isHorizontal) {
-    QualifiedName keyPercents = isHorizontal ? KEY_H_PERCENTS : KEY_V_PERCENTS;
-    Set<Integer> percents = loadPercents(keyPercents);
-    percents.remove(percent);
-    savePercents(keyPercents, percents);
-  }
-
-  /**
-   * Restores default percent values from settings.
-   */
-  public void defaultPercents(boolean isHorizontal) {
-    QualifiedName keyPercents = isHorizontal ? KEY_H_PERCENTS : KEY_V_PERCENTS;
-    setPersistentProperty(keyPercents, "");
-  }
-
-  /**
-   * Use currently defined percents as default percents in preferences.
-   */
-  public void setAsDefaultPercents(boolean isHorizontal) {
-    QualifiedName keyPercents = isHorizontal ? KEY_H_PERCENTS : KEY_V_PERCENTS;
-    Set<Integer> percents = loadPercents(keyPercents);
-    setPersistentProperty(keyPercents, "");
-    getPreferenceStore().setValue(keyPercents.getLocalName(), getPercentsString(percents));
-  }
-
-  /**
-   * Does save into persistence.
-   */
-  private void savePercents(final QualifiedName keyPercents, Set<Integer> percents) {
-    setPersistentProperty(keyPercents, getPercentsString(percents));
-  }
-
-  /**
-   * Returns space-separated string of percent values to be stored.
-   */
-  private String getPercentsString(Collection<Integer> percents) {
-    final StringBuffer buffer = new StringBuffer();
-    for (Integer percent : percents) {
-      buffer.append(percent);
-      buffer.append(" ");
-    }
-    buffer.delete(buffer.length() - 1, buffer.length());
-    return buffer.toString();
-  }
-
-  /**
-   * Loads the percent values into TreeSet of integers, these integers are sorted automatically in
-   * TreeSet. First, tries to load percents from CU persistence then, if none found, loads from
-   * preference store.
-   */
-  private Set<Integer> loadPercents(final QualifiedName keyPercents) {
-    final Set<Integer> values = Sets.<Integer>newTreeSet();
-    // load persistence
-    ExecutionUtils.runLog(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        fillPercents(getPersistentProperty(keyPercents), values);
-      }
-    });
-    // if no per-file defined values found, load preferences
-    if (values.isEmpty()) {
-      fillPercents(getPreferenceStore().getString(keyPercents.getLocalName()), values);
-    }
-    return values;
-  }
-
-  /**
-   * Stores the percent values into underlying resource of this CU.
-   */
-  private void setPersistentProperty(final QualifiedName key, final String value) {
-    ExecutionUtils.runLog(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        IResource resource = m_layout.getUnderlyingResource();
-        resource.setPersistentProperty(key, value);
-      }
-    });
-  }
-
-  /**
-   * Load the percent values from underlying resource of this CU.
-   */
-  private String getPersistentProperty(QualifiedName key) throws Exception {
-    IResource resource = m_layout.getUnderlyingResource();
-    return resource.getPersistentProperty(key);
-  }
-
-  /**
-   * Parses the whitespace-separated integers string and fills the input collection of integer.
-   * Returns the filled collection. Doesn't do anything if input string is empty.
-   */
-  public static Collection<Integer> fillPercents(String percents,
-      Collection<Integer> percentsCollection) {
-    if (!StringUtils.isEmpty(percents)) {
-      String[] splitted = StringUtils.split(percents);
-      for (String percentString : splitted) {
-        try {
-          int percent = Integer.parseInt(percentString);
-          percentsCollection.add(percent);
-        } catch (Throwable e) {
-          // ignore
-        }
-      }
-    }
-    return percentsCollection;
-  }
-
-  public boolean useClassic() {
-    IPreferenceStore preferences = getPreferenceStore();
-    String value = preferences.getString(IPreferenceConstants.PREF_FORMLAYOUT_MODE);
-    return IPreferenceConstants.VAL_FORMLAYOUT_MODE_CLASSIC.equals(value);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Inner classes
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final class PreferenceChangeListener implements IPropertyChangeListener {
-    @Override
-    public void propertyChange(final PropertyChangeEvent event) {
-      if (IPreferenceConstants.PREF_FORMLAYOUT_MODE.equals(event.getProperty())) {
-        ExecutionUtils.runAsync(new RunnableEx() {
-          @Override
-          public void run() throws Exception {
-            IDesignPageSite.Helper.getSite(m_layoutModel).reparse();
-          }
-        });
-      }
-    }
-  }
-  /**
-   * Model for percents header edit part. Just Integer can't be used because equals int values are
-   * equals Integer values.
-   *
-   * @author mitin_aa
-   */
-  public static final class PercentsInfo {
-    public final int value;
-
-    public PercentsInfo(Integer percent) {
-      value = percent;
-    }
-
-    @Override
-    public String toString() {
-      return String.valueOf(value);
-    }
-  }
+	private static final String PREFERENCE_CHANGE_LISTENER_KEY =
+			"FormLayout.preferenceChangeListener";
+	private final IFormLayoutInfo<C> m_layout;
+	private final ObjectInfo m_layoutModel;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FormLayoutPreferences(IFormLayoutInfo<C> layout, ToolkitDescription toolkit) {
+		m_layout = layout;
+		m_preferences = toolkit.getPreferences();
+		m_layoutModel = layout.getUnderlyingModel();
+		m_layoutModel.addBroadcastListener(new ObjectInfoTreeComplete() {
+			@Override
+			public void invoke() throws Exception {
+				addPropertyChangeListener();
+			}
+		});
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IPropertyChangeListener management
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds {@link IPropertyChangeListener}, only one time and using root {@link ObjectInfo}.
+	 */
+	public void addPropertyChangeListener() {
+		ObjectInfo rooObject = m_layoutModel.getRoot();
+		if (rooObject.getArbitraryValue(PREFERENCE_CHANGE_LISTENER_KEY) == null) {
+			final IPropertyChangeListener listener = new PreferenceChangeListener();
+			// add listener
+			getPreferenceStore().addPropertyChangeListener(listener);
+			rooObject.putArbitraryValue(PREFERENCE_CHANGE_LISTENER_KEY, listener);
+			// schedule removing listener on dispose()
+			rooObject.addBroadcastListener(new ObjectEventListener() {
+				@Override
+				public void dispose() throws Exception {
+					getPreferenceStore().removePropertyChangeListener(listener);
+					m_layoutModel.getRoot().putArbitraryValue(PREFERENCE_CHANGE_LISTENER_KEY, null);
+				}
+			});
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Settings
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public IPreferenceStore getPreferenceStore() {
+		return m_preferences;
+	}
+
+	public List<Integer> getVerticalPercents() {
+		return Lists.newArrayList(loadPercents(KEY_V_PERCENTS));
+	}
+
+	public List<Integer> getHorizontalPercents() {
+		return Lists.newArrayList(loadPercents(KEY_H_PERCENTS));
+	}
+
+	public int getSnapSensitivity() {
+		return getPreferenceStore().getInt(IPreferenceConstants.PREF_SNAP_SENS);
+	}
+
+	public int getHorizontalContainerGap() {
+		return getPreferenceStore().getInt(IPreferenceConstants.PREF_H_WINDOW_MARGIN);
+	}
+
+	public int getVerticalContainerGap() {
+		return getPreferenceStore().getInt(IPreferenceConstants.PREF_V_WINDOW_MARGIN);
+	}
+
+	public int getHorizontalPercentsGap() {
+		return getPreferenceStore().getInt(IPreferenceConstants.PREF_H_PERCENT_OFFSET);
+	}
+
+	public int getVerticalPercentsGap() {
+		return getPreferenceStore().getInt(IPreferenceConstants.PREF_V_PERCENT_OFFSET);
+	}
+
+	public int getHorizontalComponentGap() {
+		return getPreferenceStore().getInt(IPreferenceConstants.PREF_H_WIDGET_OFFSET);
+	}
+
+	public int getVerticalComponentGap() {
+		return getPreferenceStore().getInt(IPreferenceConstants.PREF_V_WIDGET_OFFSET);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Manage current layout percent offsets
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final QualifiedName KEY_H_PERCENTS = new QualifiedName(Activator.PLUGIN_ID,
+			IPreferenceConstants.PREF_H_PERCENTS);
+	private static final QualifiedName KEY_V_PERCENTS = new QualifiedName(Activator.PLUGIN_ID,
+			IPreferenceConstants.PREF_V_PERCENTS);
+	private final IPreferenceStore m_preferences;
+
+	/**
+	 * Stores given percent value into underlying resource.
+	 */
+	public void addPercent(int percent, boolean isHorizontal) {
+		QualifiedName keyPercents = isHorizontal ? KEY_H_PERCENTS : KEY_V_PERCENTS;
+		Set<Integer> percents = loadPercents(keyPercents);
+		percents.add(percent);
+		savePercents(keyPercents, percents);
+	}
+
+	/**
+	 * Removes given percent value from underlying resource.
+	 */
+	public void removePercent(int percent, boolean isHorizontal) {
+		QualifiedName keyPercents = isHorizontal ? KEY_H_PERCENTS : KEY_V_PERCENTS;
+		Set<Integer> percents = loadPercents(keyPercents);
+		percents.remove(percent);
+		savePercents(keyPercents, percents);
+	}
+
+	/**
+	 * Restores default percent values from settings.
+	 */
+	public void defaultPercents(boolean isHorizontal) {
+		QualifiedName keyPercents = isHorizontal ? KEY_H_PERCENTS : KEY_V_PERCENTS;
+		setPersistentProperty(keyPercents, "");
+	}
+
+	/**
+	 * Use currently defined percents as default percents in preferences.
+	 */
+	public void setAsDefaultPercents(boolean isHorizontal) {
+		QualifiedName keyPercents = isHorizontal ? KEY_H_PERCENTS : KEY_V_PERCENTS;
+		Set<Integer> percents = loadPercents(keyPercents);
+		setPersistentProperty(keyPercents, "");
+		getPreferenceStore().setValue(keyPercents.getLocalName(), getPercentsString(percents));
+	}
+
+	/**
+	 * Does save into persistence.
+	 */
+	private void savePercents(final QualifiedName keyPercents, Set<Integer> percents) {
+		setPersistentProperty(keyPercents, getPercentsString(percents));
+	}
+
+	/**
+	 * Returns space-separated string of percent values to be stored.
+	 */
+	private String getPercentsString(Collection<Integer> percents) {
+		final StringBuffer buffer = new StringBuffer();
+		for (Integer percent : percents) {
+			buffer.append(percent);
+			buffer.append(" ");
+		}
+		buffer.delete(buffer.length() - 1, buffer.length());
+		return buffer.toString();
+	}
+
+	/**
+	 * Loads the percent values into TreeSet of integers, these integers are sorted automatically in
+	 * TreeSet. First, tries to load percents from CU persistence then, if none found, loads from
+	 * preference store.
+	 */
+	private Set<Integer> loadPercents(final QualifiedName keyPercents) {
+		final Set<Integer> values = Sets.<Integer>newTreeSet();
+		// load persistence
+		ExecutionUtils.runLog(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				fillPercents(getPersistentProperty(keyPercents), values);
+			}
+		});
+		// if no per-file defined values found, load preferences
+		if (values.isEmpty()) {
+			fillPercents(getPreferenceStore().getString(keyPercents.getLocalName()), values);
+		}
+		return values;
+	}
+
+	/**
+	 * Stores the percent values into underlying resource of this CU.
+	 */
+	private void setPersistentProperty(final QualifiedName key, final String value) {
+		ExecutionUtils.runLog(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				IResource resource = m_layout.getUnderlyingResource();
+				resource.setPersistentProperty(key, value);
+			}
+		});
+	}
+
+	/**
+	 * Load the percent values from underlying resource of this CU.
+	 */
+	private String getPersistentProperty(QualifiedName key) throws Exception {
+		IResource resource = m_layout.getUnderlyingResource();
+		return resource.getPersistentProperty(key);
+	}
+
+	/**
+	 * Parses the whitespace-separated integers string and fills the input collection of integer.
+	 * Returns the filled collection. Doesn't do anything if input string is empty.
+	 */
+	public static Collection<Integer> fillPercents(String percents,
+			Collection<Integer> percentsCollection) {
+		if (!StringUtils.isEmpty(percents)) {
+			String[] splitted = StringUtils.split(percents);
+			for (String percentString : splitted) {
+				try {
+					int percent = Integer.parseInt(percentString);
+					percentsCollection.add(percent);
+				} catch (Throwable e) {
+					// ignore
+				}
+			}
+		}
+		return percentsCollection;
+	}
+
+	public boolean useClassic() {
+		IPreferenceStore preferences = getPreferenceStore();
+		String value = preferences.getString(IPreferenceConstants.PREF_FORMLAYOUT_MODE);
+		return IPreferenceConstants.VAL_FORMLAYOUT_MODE_CLASSIC.equals(value);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Inner classes
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final class PreferenceChangeListener implements IPropertyChangeListener {
+		@Override
+		public void propertyChange(final PropertyChangeEvent event) {
+			if (IPreferenceConstants.PREF_FORMLAYOUT_MODE.equals(event.getProperty())) {
+				ExecutionUtils.runAsync(new RunnableEx() {
+					@Override
+					public void run() throws Exception {
+						IDesignPageSite.Helper.getSite(m_layoutModel).reparse();
+					}
+				});
+			}
+		}
+	}
+	/**
+	 * Model for percents header edit part. Just Integer can't be used because equals int values are
+	 * equals Integer values.
+	 *
+	 * @author mitin_aa
+	 */
+	public static final class PercentsInfo {
+		public final int value;
+
+		public PercentsInfo(Integer percent) {
+			value = percent;
+		}
+
+		@Override
+		public String toString() {
+			return String.valueOf(value);
+		}
+	}
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/form/FormLayoutUtils.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/form/FormLayoutUtils.java
index e6ccb8ed7..1eca68486 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/form/FormLayoutUtils.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/form/FormLayoutUtils.java
@@ -24,86 +24,86 @@
  * @coverage swt.model.layout.form
  */
 public final class FormLayoutUtils {
-  /**
-   * @return the constant which represents 'opposite' side in one dimension, i.e. for LEFT it
-   *         returns RIGHT.
-   */
-  public static int getOppositeSide(int side) {
-    switch (side) {
-      case SWT.LEFT :
-        return SWT.RIGHT;
-      case SWT.RIGHT :
-        return SWT.LEFT;
-      case SWT.TOP :
-        return SWT.BOTTOM;
-      case SWT.BOTTOM :
-        return SWT.TOP;
-      default :
-        throw new IllegalArgumentException(MessageFormat.format(
-            ModelMessages.FormLayoutUtils_invalidSide,
-            side));
-    }
-  }
+	/**
+	 * @return the constant which represents 'opposite' side in one dimension, i.e. for LEFT it
+	 *         returns RIGHT.
+	 */
+	public static int getOppositeSide(int side) {
+		switch (side) {
+		case SWT.LEFT :
+			return SWT.RIGHT;
+		case SWT.RIGHT :
+			return SWT.LEFT;
+		case SWT.TOP :
+			return SWT.BOTTOM;
+		case SWT.BOTTOM :
+			return SWT.TOP;
+		default :
+			throw new IllegalArgumentException(MessageFormat.format(
+					ModelMessages.FormLayoutUtils_invalidSide,
+					side));
+		}
+	}
 
-  /**
-   * @return converted SWT constant (LEFT, RIGHT, TOP, BOTTOM) into appropriate constants from
-   *         IPositionConstants.
-   */
-  public static int convertSwtAlignment(int alignment) {
-    switch (alignment) {
-      case SWT.LEFT :
-        return IPositionConstants.LEFT;
-      case SWT.RIGHT :
-        return IPositionConstants.RIGHT;
-      case SWT.TOP :
-        return IPositionConstants.TOP;
-      case SWT.BOTTOM :
-        return IPositionConstants.BOTTOM;
-      case SWT.CENTER :
-        return IPositionConstants.CENTER;
-      default :
-        throw new IllegalArgumentException(MessageFormat.format(
-            ModelMessages.FormLayoutUtils_invalidAlignment,
-            alignment));
-    }
-  }
+	/**
+	 * @return converted SWT constant (LEFT, RIGHT, TOP, BOTTOM) into appropriate constants from
+	 *         IPositionConstants.
+	 */
+	public static int convertSwtAlignment(int alignment) {
+		switch (alignment) {
+		case SWT.LEFT :
+			return IPositionConstants.LEFT;
+		case SWT.RIGHT :
+			return IPositionConstants.RIGHT;
+		case SWT.TOP :
+			return IPositionConstants.TOP;
+		case SWT.BOTTOM :
+			return IPositionConstants.BOTTOM;
+		case SWT.CENTER :
+			return IPositionConstants.CENTER;
+		default :
+			throw new IllegalArgumentException(MessageFormat.format(
+					ModelMessages.FormLayoutUtils_invalidAlignment,
+					alignment));
+		}
+	}
 
-  /**
-   * @return converted IPositionConstants constant (LEFT, RIGHT, TOP, BOTTOM) into appropriate
-   *         constants from SWT.
-   */
-  public static int convertGefSide(int side) {
-    switch (side) {
-      case IPositionConstants.LEFT :
-        return SWT.LEFT;
-      case IPositionConstants.RIGHT :
-        return SWT.RIGHT;
-      case IPositionConstants.TOP :
-        return SWT.TOP;
-      case IPositionConstants.BOTTOM :
-        return SWT.BOTTOM;
-      default :
-        throw new IllegalArgumentException(MessageFormat.format(
-            ModelMessages.FormLayoutUtils_invalidSide,
-            side));
-    }
-  }
+	/**
+	 * @return converted IPositionConstants constant (LEFT, RIGHT, TOP, BOTTOM) into appropriate
+	 *         constants from SWT.
+	 */
+	public static int convertGefSide(int side) {
+		switch (side) {
+		case IPositionConstants.LEFT :
+			return SWT.LEFT;
+		case IPositionConstants.RIGHT :
+			return SWT.RIGHT;
+		case IPositionConstants.TOP :
+			return SWT.TOP;
+		case IPositionConstants.BOTTOM :
+			return SWT.BOTTOM;
+		default :
+			throw new IllegalArgumentException(MessageFormat.format(
+					ModelMessages.FormLayoutUtils_invalidSide,
+					side));
+		}
+	}
 
-  /**
-   * @return the source string for SWT.LEFT, RIGHT, TOP, BOTTOM.
-   */
-  public static String getAlignmentSource(int alignment) {
-    switch (alignment) {
-      case SWT.LEFT :
-        return "org.eclipse.swt.SWT.LEFT";
-      case SWT.RIGHT :
-        return "org.eclipse.swt.SWT.RIGHT";
-      case SWT.TOP :
-        return "org.eclipse.swt.SWT.TOP";
-      case SWT.BOTTOM :
-        return "org.eclipse.swt.SWT.BOTTOM";
-      default :
-        return "org.eclipse.swt.SWT.DEFAULT";
-    }
-  }
+	/**
+	 * @return the source string for SWT.LEFT, RIGHT, TOP, BOTTOM.
+	 */
+	public static String getAlignmentSource(int alignment) {
+		switch (alignment) {
+		case SWT.LEFT :
+			return "org.eclipse.swt.SWT.LEFT";
+		case SWT.RIGHT :
+			return "org.eclipse.swt.SWT.RIGHT";
+		case SWT.TOP :
+			return "org.eclipse.swt.SWT.TOP";
+		case SWT.BOTTOM :
+			return "org.eclipse.swt.SWT.BOTTOM";
+		default :
+			return "org.eclipse.swt.SWT.DEFAULT";
+		}
+	}
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/form/FormSide.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/form/FormSide.java
index 838d29819..3d780afe2 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/form/FormSide.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/form/FormSide.java
@@ -25,133 +25,133 @@
  * @coverage swt.model.layout.form
  */
 public enum FormSide {
-  LEFT {
-    @Override
-    public String getField() {
-      return "left";
-    }
-
-    @Override
-    public int getFormSide() {
-      return SWT.LEFT;
-    }
-
-    @Override
-    public int getEngineSide() {
-      return IPositionConstants.LEFT;
-    }
-
-    @Override
-    public FormSide getOppositeSide() {
-      return RIGHT;
-    }
-  },
-  RIGHT {
-    @Override
-    public String getField() {
-      return "right";
-    }
-
-    @Override
-    public int getFormSide() {
-      return SWT.RIGHT;
-    }
-
-    @Override
-    public int getEngineSide() {
-      return IPositionConstants.RIGHT;
-    }
-
-    @Override
-    public FormSide getOppositeSide() {
-      return LEFT;
-    }
-  },
-  TOP {
-    @Override
-    public String getField() {
-      return "top";
-    }
-
-    @Override
-    public int getFormSide() {
-      return SWT.TOP;
-    }
-
-    @Override
-    public int getEngineSide() {
-      return IPositionConstants.TOP;
-    }
-
-    @Override
-    public FormSide getOppositeSide() {
-      return BOTTOM;
-    }
-  },
-  BOTTOM {
-    @Override
-    public String getField() {
-      return "bottom";
-    }
-
-    @Override
-    public int getFormSide() {
-      return SWT.BOTTOM;
-    }
-
-    @Override
-    public int getEngineSide() {
-      return IPositionConstants.BOTTOM;
-    }
-
-    @Override
-    public FormSide getOppositeSide() {
-      return TOP;
-    }
-  };
-  /**
-   * @return the name of field.
-   */
-  public abstract String getField();
-
-  /**
-   * @return the side, can be either of SWT.LEFT, SWT.RIGHT, SWT.TOP, SWT.BOTTOM.
-   */
-  public abstract int getFormSide();
-
-  /**
-   * @return the side, can be either of IPositionConstants.LEFT, IPositionConstants.RIGHT,
-   *         IPositionConstants.TOP, IPositionConstants.BOTTOM.
-   */
-  public abstract int getEngineSide();
-
-  /**
-   * @return the FormSide as opposite to this side.
-   */
-  public abstract FormSide getOppositeSide();
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Static
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link FormSide} by integer side: IPositionConstants.LEFT,
-   *         IPositionConstants.RIGHT, IPositionConstants.TOP, IPositionConstants.BOTTOM.
-   */
-  public static FormSide get(int side) {
-    if (side == IPositionConstants.LEFT) {
-      return LEFT;
-    }
-    if (side == IPositionConstants.RIGHT) {
-      return RIGHT;
-    }
-    if (side == IPositionConstants.TOP) {
-      return TOP;
-    }
-    if (side == IPositionConstants.BOTTOM) {
-      return BOTTOM;
-    }
-    throw new Error(MessageFormat.format(ModelMessages.FormSide_unknownSize, side));
-  }
+	LEFT {
+		@Override
+		public String getField() {
+			return "left";
+		}
+
+		@Override
+		public int getFormSide() {
+			return SWT.LEFT;
+		}
+
+		@Override
+		public int getEngineSide() {
+			return IPositionConstants.LEFT;
+		}
+
+		@Override
+		public FormSide getOppositeSide() {
+			return RIGHT;
+		}
+	},
+	RIGHT {
+		@Override
+		public String getField() {
+			return "right";
+		}
+
+		@Override
+		public int getFormSide() {
+			return SWT.RIGHT;
+		}
+
+		@Override
+		public int getEngineSide() {
+			return IPositionConstants.RIGHT;
+		}
+
+		@Override
+		public FormSide getOppositeSide() {
+			return LEFT;
+		}
+	},
+	TOP {
+		@Override
+		public String getField() {
+			return "top";
+		}
+
+		@Override
+		public int getFormSide() {
+			return SWT.TOP;
+		}
+
+		@Override
+		public int getEngineSide() {
+			return IPositionConstants.TOP;
+		}
+
+		@Override
+		public FormSide getOppositeSide() {
+			return BOTTOM;
+		}
+	},
+	BOTTOM {
+		@Override
+		public String getField() {
+			return "bottom";
+		}
+
+		@Override
+		public int getFormSide() {
+			return SWT.BOTTOM;
+		}
+
+		@Override
+		public int getEngineSide() {
+			return IPositionConstants.BOTTOM;
+		}
+
+		@Override
+		public FormSide getOppositeSide() {
+			return TOP;
+		}
+	};
+	/**
+	 * @return the name of field.
+	 */
+	public abstract String getField();
+
+	/**
+	 * @return the side, can be either of SWT.LEFT, SWT.RIGHT, SWT.TOP, SWT.BOTTOM.
+	 */
+	public abstract int getFormSide();
+
+	/**
+	 * @return the side, can be either of IPositionConstants.LEFT, IPositionConstants.RIGHT,
+	 *         IPositionConstants.TOP, IPositionConstants.BOTTOM.
+	 */
+	public abstract int getEngineSide();
+
+	/**
+	 * @return the FormSide as opposite to this side.
+	 */
+	public abstract FormSide getOppositeSide();
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Static
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link FormSide} by integer side: IPositionConstants.LEFT,
+	 *         IPositionConstants.RIGHT, IPositionConstants.TOP, IPositionConstants.BOTTOM.
+	 */
+	public static FormSide get(int side) {
+		if (side == IPositionConstants.LEFT) {
+			return LEFT;
+		}
+		if (side == IPositionConstants.RIGHT) {
+			return RIGHT;
+		}
+		if (side == IPositionConstants.TOP) {
+			return TOP;
+		}
+		if (side == IPositionConstants.BOTTOM) {
+			return BOTTOM;
+		}
+		throw new Error(MessageFormat.format(ModelMessages.FormSide_unknownSize, side));
+	}
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/form/IFormAttachmentInfo.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/form/IFormAttachmentInfo.java
index 0c19a4d9b..050254097 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/form/IFormAttachmentInfo.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/form/IFormAttachmentInfo.java
@@ -23,71 +23,71 @@
  * @coverage swt.model.layout.form
  */
 public interface IFormAttachmentInfo<C extends IControlInfo> extends IObjectInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  //	Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  int getAlignment();
-
-  int getNumerator();
-
-  int getDenominator();
-
-  int getOffset();
-
-  C getControl();
-
-  void setControl(C object);
-
-  void setNumerator(int percent);
-
-  void setDenominator(int value);
-
-  void setOffset(int offset);
-
-  void setAlignment(int value);
-
-  /**
-   * @return the FormSide reflecting which side this attachment belongs to.
-   */
-  FormSide getSide();
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  //	Operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Does code changes according to FormAttachment's properties set.
-   */
-  void write() throws Exception;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  //	Misc
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if this attachment doesn't yet exist in code.
-   */
-  boolean isVirtual();
-
-  /**
-   * @return <code>true</code> if this attachment bound to parent in leading direction (control ==
-   *         null && denominator == 100 && numerator == 0);
-   */
-  boolean isParentLeading();
-
-  /**
-   * @return <code>true</code> if this attachment bound to parent in trailing direction (control ==
-   *         null && denominator == numerator);
-   */
-  boolean isParentTrailing();
-
-  /**
-   * @return <code>true</code> if this attachment bound to parent by some percentage value (control
-   *         == null && 0 < numerator < 100);
-   */
-  boolean isPercentaged();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	//	Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	int getAlignment();
+
+	int getNumerator();
+
+	int getDenominator();
+
+	int getOffset();
+
+	C getControl();
+
+	void setControl(C object);
+
+	void setNumerator(int percent);
+
+	void setDenominator(int value);
+
+	void setOffset(int offset);
+
+	void setAlignment(int value);
+
+	/**
+	 * @return the FormSide reflecting which side this attachment belongs to.
+	 */
+	FormSide getSide();
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	//	Operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Does code changes according to FormAttachment's properties set.
+	 */
+	void write() throws Exception;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	//	Misc
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if this attachment doesn't yet exist in code.
+	 */
+	boolean isVirtual();
+
+	/**
+	 * @return <code>true</code> if this attachment bound to parent in leading direction (control ==
+	 *         null && denominator == 100 && numerator == 0);
+	 */
+	boolean isParentLeading();
+
+	/**
+	 * @return <code>true</code> if this attachment bound to parent in trailing direction (control ==
+	 *         null && denominator == numerator);
+	 */
+	boolean isParentTrailing();
+
+	/**
+	 * @return <code>true</code> if this attachment bound to parent by some percentage value (control
+	 *         == null && 0 < numerator < 100);
+	 */
+	boolean isPercentaged();
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/form/IFormDataInfo.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/form/IFormDataInfo.java
index f5fb46320..80db17cad 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/form/IFormDataInfo.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/form/IFormDataInfo.java
@@ -23,20 +23,20 @@
  * @coverage swt.model.layout.form
  */
 public interface IFormDataInfo<C extends IControlInfo> extends ILayoutDataInfo {
-  /**
-   * @return the IFormAttachmentInfo instance according given <code>side</code> parameter. May not
-   *         return <code>null</code>, in case of non-existent attachment the returned
-   *         IFormAttachmentInfo instance is virtual.
-   */
-  IFormAttachmentInfo<C> getAttachment(int side) throws Exception;
+	/**
+	 * @return the IFormAttachmentInfo instance according given <code>side</code> parameter. May not
+	 *         return <code>null</code>, in case of non-existent attachment the returned
+	 *         IFormAttachmentInfo instance is virtual.
+	 */
+	IFormAttachmentInfo<C> getAttachment(int side) throws Exception;
 
-  /**
-   * Reflects 'width' property of the FormData.
-   */
-  void setWidth(int value) throws Exception;
+	/**
+	 * Reflects 'width' property of the FormData.
+	 */
+	void setWidth(int value) throws Exception;
 
-  /**
-   * Reflects 'height' property of the FormData.
-   */
-  void setHeight(int value) throws Exception;
+	/**
+	 * Reflects 'height' property of the FormData.
+	 */
+	void setHeight(int value) throws Exception;
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/form/IFormLayoutInfo.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/form/IFormLayoutInfo.java
index 40a9052d6..2a90639fa 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/form/IFormLayoutInfo.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/form/IFormLayoutInfo.java
@@ -23,67 +23,67 @@
  * @coverage swt.model.layout.form
  */
 public interface IFormLayoutInfo<C extends IControlInfo> extends ILayoutInfo<C> {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Model
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the implementation of the FormLayout support.
-   */
-  FormLayoutInfoImpl<C> getImpl();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Model
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the implementation of the FormLayout support.
+	 */
+	FormLayoutInfoImpl<C> getImpl();
 
-  /**
-   * @return the size of the host container.
-   */
-  Dimension getContainerSize();
+	/**
+	 * @return the size of the host container.
+	 */
+	Dimension getContainerSize();
 
-  /**
-   * Moves a Control into a host Composite.
-   */
-  void commandMove(C control, C nextControl) throws Exception;
+	/**
+	 * Moves a Control into a host Composite.
+	 */
+	void commandMove(C control, C nextControl) throws Exception;
 
-  /**
-   * Adds a Control into a host Composite.
-   */
-  void commandCreate(C control, C nextControl) throws Exception;
+	/**
+	 * Adds a Control into a host Composite.
+	 */
+	void commandCreate(C control, C nextControl) throws Exception;
 
-  /**
-   * Binds Control's <code>side</code> to the <b>left</b> side of the container with given
-   * <code>offset</code>.
-   */
-  void setAttachmentOffset(C control, int side, int offset) throws Exception;
+	/**
+	 * Binds Control's <code>side</code> to the <b>left</b> side of the container with given
+	 * <code>offset</code>.
+	 */
+	void setAttachmentOffset(C control, int side, int offset) throws Exception;
 
-  /**
-   * Anchors the control at current place to the parent with given sides. If side omitted and if
-   * relative, then anchors the missing side to percent, otherwise deletes attachment.
-   */
-  void setQuickAnchors(C control, int sides, boolean relative) throws Exception;
+	/**
+	 * Anchors the control at current place to the parent with given sides. If side omitted and if
+	 * relative, then anchors the missing side to percent, otherwise deletes attachment.
+	 */
+	void setQuickAnchors(C control, int sides, boolean relative) throws Exception;
 
-  /**
-   * Anchors the control at current place to the parent with given control's side and container's
-   * side.
-   */
-  void anchorToParent(C control, int controlSide, int parentSide) throws Exception;
+	/**
+	 * Anchors the control at current place to the parent with given control's side and container's
+	 * side.
+	 */
+	void anchorToParent(C control, int controlSide, int parentSide) throws Exception;
 
-  /**
-   * Anchors the control at current place by the given side to the percentage value.
-   */
-  void anchorToParentAsPercent(C control, int controlSide) throws Exception;
+	/**
+	 * Anchors the control at current place by the given side to the percentage value.
+	 */
+	void anchorToParentAsPercent(C control, int controlSide) throws Exception;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Misc
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the instance of class maintaining FormLayout preferences. May not return
-   *         <code>null</code>.
-   */
-  FormLayoutPreferences<C> getPreferences();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Misc
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the instance of class maintaining FormLayout preferences. May not return
+	 *         <code>null</code>.
+	 */
+	FormLayoutPreferences<C> getPreferences();
 
-  /**
-   * @return underlying resource for the editing class.
-   */
-  IResource getUnderlyingResource() throws Exception;
+	/**
+	 * @return underlying resource for the editing class.
+	 */
+	IResource getUnderlyingResource() throws Exception;
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/form/IPreferenceConstants.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/form/IPreferenceConstants.java
index 725920262..bd5ac6e31 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/form/IPreferenceConstants.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/form/IPreferenceConstants.java
@@ -18,19 +18,19 @@
  * @author mitin_aa
  */
 public interface IPreferenceConstants {
-  // which FromLayout support to use.
-  String PREF_FORMLAYOUT_MODE = "formLayout.mode";
-  String VAL_FORMLAYOUT_MODE_AUTO = "auto";
-  String VAL_FORMLAYOUT_MODE_CLASSIC = "classic";
-  // preferences for classic mode
-  String PREF_SNAP_SENS = "formLayout.snap.sensitivity";
-  String PREF_V_WINDOW_MARGIN = "formLayout.snap.windowMargin.vertical";
-  String PREF_V_PERCENT_OFFSET = "formLayout.snap.percentOffset.vertical";
-  String PREF_V_WIDGET_OFFSET = "formLayout.snap.widgetOffset.vertical";
-  String PREF_V_PERCENTS = "formLayout.snap.percents.vertical";
-  String PREF_H_WINDOW_MARGIN = "formLayout.snap.windowMargin.horizontal";
-  String PREF_H_PERCENT_OFFSET = "formLayout.snap.percentOffset.horizontal";
-  String PREF_H_WIDGET_OFFSET = "formLayout.snap.widgetOffset.horizontal";
-  String PREF_H_PERCENTS = "formLayout.snap.percents.horizontal";
-  String PREF_KEEP_ATTACHMENTS_STYLE = "formLayout.keepAttachmentsStyle";
+	// which FromLayout support to use.
+	String PREF_FORMLAYOUT_MODE = "formLayout.mode";
+	String VAL_FORMLAYOUT_MODE_AUTO = "auto";
+	String VAL_FORMLAYOUT_MODE_CLASSIC = "classic";
+	// preferences for classic mode
+	String PREF_SNAP_SENS = "formLayout.snap.sensitivity";
+	String PREF_V_WINDOW_MARGIN = "formLayout.snap.windowMargin.vertical";
+	String PREF_V_PERCENT_OFFSET = "formLayout.snap.percentOffset.vertical";
+	String PREF_V_WIDGET_OFFSET = "formLayout.snap.widgetOffset.vertical";
+	String PREF_V_PERCENTS = "formLayout.snap.percents.vertical";
+	String PREF_H_WINDOW_MARGIN = "formLayout.snap.windowMargin.horizontal";
+	String PREF_H_PERCENT_OFFSET = "formLayout.snap.percentOffset.horizontal";
+	String PREF_H_WIDGET_OFFSET = "formLayout.snap.widgetOffset.horizontal";
+	String PREF_H_PERCENTS = "formLayout.snap.percents.horizontal";
+	String PREF_KEEP_ATTACHMENTS_STYLE = "formLayout.keepAttachmentsStyle";
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/form/LayoutAssistantPage.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/form/LayoutAssistantPage.java
index ef66a2f4b..eeadbb6eb 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/form/LayoutAssistantPage.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/form/LayoutAssistantPage.java
@@ -46,196 +46,196 @@
  * @author mitin_aa
  */
 public final class LayoutAssistantPage<C extends IControlInfo> extends Composite
-    implements
-      ILayoutAssistantPage {
-  private final List<C> m_selection;
-  private final IFormLayoutInfo<C> m_layout;
-  private final PlacementsSupport m_placementsSupport;
-  private final IActionImageProvider m_imageProvider = new IActionImageProvider() {
-    @Override
-    public Image getActionImage(String imagePath) {
-      return FormLayoutInfoImplAutomatic.getImage(imagePath);
-    }
-  };
+implements
+ILayoutAssistantPage {
+	private final List<C> m_selection;
+	private final IFormLayoutInfo<C> m_layout;
+	private final PlacementsSupport m_placementsSupport;
+	private final IActionImageProvider m_imageProvider = new IActionImageProvider() {
+		@Override
+		public Image getActionImage(String imagePath) {
+			return FormLayoutInfoImplAutomatic.getImage(imagePath);
+		}
+	};
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @SuppressWarnings("unchecked")
-  public LayoutAssistantPage(IFormLayoutInfo<C> layout,
-      PlacementsSupport placementsSupport,
-      Composite parent,
-      Object selection) {
-    super(parent, SWT.NONE);
-    m_layout = layout;
-    m_placementsSupport = placementsSupport;
-    if (selection instanceof List<?>) {
-      m_selection = (List<C>) selection;
-    } else {
-      m_selection = Collections.singletonList((C) selection);
-    }
-    // create UI
-    GridLayoutFactory.create(this);
-    {
-      Group group = new Group(this, SWT.NONE);
-      GridDataFactory.create(group).fill().grab();
-      group.setText(ModelMessages.LayoutAssistantPage_anchorsGroup);
-      GridLayoutFactory.create(group);
-      {
-        ToolBarManager manager = new ToolBarManager();
-        GridDataFactory.create(manager.createControl(group)).fill().grab();
-        fillAnchorsActions(manager);
-        manager.update(true);
-      }
-      {
-        ToolBarManager manager = new ToolBarManager();
-        GridDataFactory.create(manager.createControl(group)).fill().grab();
-        fillComplexAnchorsActions(manager);
-        manager.update(true);
-      }
-    }
-    {
-      Group group = new Group(this, SWT.NONE);
-      GridDataFactory.create(group).fill().grab();
-      group.setText(ModelMessages.LayoutAssistantPage_alignmentGroup);
-      GridLayoutFactory.create(group);
-      ToolBarManager manager = new ToolBarManager();
-      GridDataFactory.create(manager.createControl(group)).fill().grab();
-      fillAlignmentActions(manager);
-      manager.update(true);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@SuppressWarnings("unchecked")
+	public LayoutAssistantPage(IFormLayoutInfo<C> layout,
+			PlacementsSupport placementsSupport,
+			Composite parent,
+			Object selection) {
+		super(parent, SWT.NONE);
+		m_layout = layout;
+		m_placementsSupport = placementsSupport;
+		if (selection instanceof List<?>) {
+			m_selection = (List<C>) selection;
+		} else {
+			m_selection = Collections.singletonList((C) selection);
+		}
+		// create UI
+		GridLayoutFactory.create(this);
+		{
+			Group group = new Group(this, SWT.NONE);
+			GridDataFactory.create(group).fill().grab();
+			group.setText(ModelMessages.LayoutAssistantPage_anchorsGroup);
+			GridLayoutFactory.create(group);
+			{
+				ToolBarManager manager = new ToolBarManager();
+				GridDataFactory.create(manager.createControl(group)).fill().grab();
+				fillAnchorsActions(manager);
+				manager.update(true);
+			}
+			{
+				ToolBarManager manager = new ToolBarManager();
+				GridDataFactory.create(manager.createControl(group)).fill().grab();
+				fillComplexAnchorsActions(manager);
+				manager.update(true);
+			}
+		}
+		{
+			Group group = new Group(this, SWT.NONE);
+			GridDataFactory.create(group).fill().grab();
+			group.setText(ModelMessages.LayoutAssistantPage_alignmentGroup);
+			GridLayoutFactory.create(group);
+			ToolBarManager manager = new ToolBarManager();
+			GridDataFactory.create(manager.createControl(group)).fill().grab();
+			fillAlignmentActions(manager);
+			manager.update(true);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ILayoutAssistantPage
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean isPageValid() {
-    for (C object : m_selection) {
-      ObjectInfo parent = object.getParent();
-      if (!parent.getChildren().contains(object)) {
-        return false;
-      }
-    }
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ILayoutAssistantPage
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean isPageValid() {
+		for (C object : m_selection) {
+			ObjectInfo parent = object.getParent();
+			if (!parent.getChildren().contains(object)) {
+				return false;
+			}
+		}
+		return true;
+	}
 
-  @Override
-  public void updatePage() {
-  }
+	@Override
+	public void updatePage() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Actions
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void fillAnchorsActions(IContributionManager manager) {
-    C widget = m_selection.size() == 1 ? (C) m_selection.get(0) : null;
-    new AnchorsActionsSupport(m_placementsSupport, m_imageProvider).fillAnchorsActions(
-        manager,
-        widget,
-        false);
-    new AnchorsActionsSupport(m_placementsSupport, m_imageProvider).fillAnchorsActions(
-        manager,
-        widget,
-        true);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Actions
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void fillAnchorsActions(IContributionManager manager) {
+		C widget = m_selection.size() == 1 ? (C) m_selection.get(0) : null;
+		new AnchorsActionsSupport(m_placementsSupport, m_imageProvider).fillAnchorsActions(
+				manager,
+				widget,
+				false);
+		new AnchorsActionsSupport(m_placementsSupport, m_imageProvider).fillAnchorsActions(
+				manager,
+				widget,
+				true);
+	}
 
-  private void fillAlignmentActions(final IContributionManager manager) {
-    ArrayList<Object> actions = Lists.newArrayList();
-    new FormLayoutEditPolicy.FormLayoutAlignmentActionsSupport<C>(m_layout, m_placementsSupport).addAlignmentActions(
-        GenericsUtils.<ObjectInfo>cast(m_selection),
-        actions);
-    for (Object action : actions) {
-      if (action instanceof IContributionItem) {
-        manager.add((IContributionItem) action);
-      } else if (action instanceof IAction) {
-        manager.add((IAction) action);
-      }
-    }
-  }
+	private void fillAlignmentActions(final IContributionManager manager) {
+		ArrayList<Object> actions = Lists.newArrayList();
+		new FormLayoutEditPolicy.FormLayoutAlignmentActionsSupport<C>(m_layout, m_placementsSupport).addAlignmentActions(
+				GenericsUtils.<ObjectInfo>cast(m_selection),
+				actions);
+		for (Object action : actions) {
+			if (action instanceof IContributionItem) {
+				manager.add((IContributionItem) action);
+			} else if (action instanceof IAction) {
+				manager.add((IAction) action);
+			}
+		}
+	}
 
-  private void fillComplexAnchorsActions(IContributionManager manager) {
-    manager.add(new SetCornerAnchorsAction(m_selection,
-        ModelMessages.LayoutAssistantPage_alignmentTopLeft,
-        "assistant/top_left.gif",
-        IPositionConstants.LEFT | IPositionConstants.TOP));
-    manager.add(new SetCornerAnchorsAction(m_selection,
-        ModelMessages.LayoutAssistantPage_alignmentTopRight,
-        "assistant/top_right.gif",
-        IPositionConstants.TOP | IPositionConstants.RIGHT));
-    manager.add(new SetCornerAnchorsAction(m_selection,
-        ModelMessages.LayoutAssistantPage_alignmentBottomLeft,
-        "assistant/bottom_left.gif",
-        IPositionConstants.LEFT | IPositionConstants.BOTTOM));
-    manager.add(new SetCornerAnchorsAction(m_selection,
-        ModelMessages.LayoutAssistantPage_alignmentBottomRight,
-        "assistant/bottom_right.gif",
-        IPositionConstants.BOTTOM | IPositionConstants.RIGHT));
-    manager.add(new Separator());
-    manager.add(new SetCornerAnchorsAction(m_selection,
-        ModelMessages.LayoutAssistantPage_alignmentLeftRightTop,
-        "assistant/top_left_right.gif",
-        IPositionConstants.LEFT | IPositionConstants.TOP | IPositionConstants.RIGHT));
-    manager.add(new SetCornerAnchorsAction(m_selection,
-        ModelMessages.LayoutAssistantPage_alignmentLeftRightBottom,
-        "assistant/bottom_left_right.gif",
-        IPositionConstants.LEFT | IPositionConstants.BOTTOM | IPositionConstants.RIGHT));
-    manager.add(new SetCornerAnchorsAction(m_selection,
-        ModelMessages.LayoutAssistantPage_alignmentTopBottomLeft,
-        "assistant/top_bottom_left.gif",
-        IPositionConstants.TOP | IPositionConstants.LEFT | IPositionConstants.BOTTOM));
-    manager.add(new SetCornerAnchorsAction(m_selection,
-        ModelMessages.LayoutAssistantPage_alignmentTopLBottomRight,
-        "assistant/top_bottom_right.gif",
-        IPositionConstants.BOTTOM | IPositionConstants.RIGHT | IPositionConstants.TOP));
-    manager.add(new SetCornerAnchorsAction(m_selection,
-        ModelMessages.LayoutAssistantPage_alignmentAll,
-        "assistant/top_bottom_left_right.gif",
-        IPositionConstants.BOTTOM
-            | IPositionConstants.RIGHT
-            | IPositionConstants.TOP
-            | IPositionConstants.LEFT));
-  }
+	private void fillComplexAnchorsActions(IContributionManager manager) {
+		manager.add(new SetCornerAnchorsAction(m_selection,
+				ModelMessages.LayoutAssistantPage_alignmentTopLeft,
+				"assistant/top_left.gif",
+				IPositionConstants.LEFT | IPositionConstants.TOP));
+		manager.add(new SetCornerAnchorsAction(m_selection,
+				ModelMessages.LayoutAssistantPage_alignmentTopRight,
+				"assistant/top_right.gif",
+				IPositionConstants.TOP | IPositionConstants.RIGHT));
+		manager.add(new SetCornerAnchorsAction(m_selection,
+				ModelMessages.LayoutAssistantPage_alignmentBottomLeft,
+				"assistant/bottom_left.gif",
+				IPositionConstants.LEFT | IPositionConstants.BOTTOM));
+		manager.add(new SetCornerAnchorsAction(m_selection,
+				ModelMessages.LayoutAssistantPage_alignmentBottomRight,
+				"assistant/bottom_right.gif",
+				IPositionConstants.BOTTOM | IPositionConstants.RIGHT));
+		manager.add(new Separator());
+		manager.add(new SetCornerAnchorsAction(m_selection,
+				ModelMessages.LayoutAssistantPage_alignmentLeftRightTop,
+				"assistant/top_left_right.gif",
+				IPositionConstants.LEFT | IPositionConstants.TOP | IPositionConstants.RIGHT));
+		manager.add(new SetCornerAnchorsAction(m_selection,
+				ModelMessages.LayoutAssistantPage_alignmentLeftRightBottom,
+				"assistant/bottom_left_right.gif",
+				IPositionConstants.LEFT | IPositionConstants.BOTTOM | IPositionConstants.RIGHT));
+		manager.add(new SetCornerAnchorsAction(m_selection,
+				ModelMessages.LayoutAssistantPage_alignmentTopBottomLeft,
+				"assistant/top_bottom_left.gif",
+				IPositionConstants.TOP | IPositionConstants.LEFT | IPositionConstants.BOTTOM));
+		manager.add(new SetCornerAnchorsAction(m_selection,
+				ModelMessages.LayoutAssistantPage_alignmentTopLBottomRight,
+				"assistant/top_bottom_right.gif",
+				IPositionConstants.BOTTOM | IPositionConstants.RIGHT | IPositionConstants.TOP));
+		manager.add(new SetCornerAnchorsAction(m_selection,
+				ModelMessages.LayoutAssistantPage_alignmentAll,
+				"assistant/top_bottom_left_right.gif",
+				IPositionConstants.BOTTOM
+				| IPositionConstants.RIGHT
+				| IPositionConstants.TOP
+				| IPositionConstants.LEFT));
+	}
 
-  private final class SetCornerAnchorsAction extends ObjectInfoAction {
-    private final int m_alignment;
-    private final List<C> m_widgets;
+	private final class SetCornerAnchorsAction extends ObjectInfoAction {
+		private final int m_alignment;
+		private final List<C> m_widgets;
 
-    private SetCornerAnchorsAction(List<C> selection, String text, String imageName, int alignment) {
-      super(m_layout.getUnderlyingModel(), text, m_imageProvider.getActionImage(imageName));
-      m_widgets = selection;
-      m_alignment = alignment;
-    }
+		private SetCornerAnchorsAction(List<C> selection, String text, String imageName, int alignment) {
+			super(m_layout.getUnderlyingModel(), text, m_imageProvider.getActionImage(imageName));
+			m_widgets = selection;
+			m_alignment = alignment;
+		}
 
-    @Override
-    protected void runEx() throws Exception {
-      for (C widget : m_widgets) {
-        if ((m_alignment & IPositionConstants.LEFT) != 0
-            && (m_alignment & IPositionConstants.RIGHT) != 0) {
-          m_placementsSupport.setResizeable(widget, true);
-        } else {
-          checkAlignment(widget, IPositionConstants.LEFT);
-          checkAlignment(widget, IPositionConstants.RIGHT);
-        }
-        if ((m_alignment & IPositionConstants.TOP) != 0
-            && (m_alignment & IPositionConstants.BOTTOM) != 0) {
-          m_placementsSupport.setResizeable(widget, false);
-        } else {
-          checkAlignment(widget, IPositionConstants.TOP);
-          checkAlignment(widget, IPositionConstants.BOTTOM);
-        }
-      }
-    }
+		@Override
+		protected void runEx() throws Exception {
+			for (C widget : m_widgets) {
+				if ((m_alignment & IPositionConstants.LEFT) != 0
+						&& (m_alignment & IPositionConstants.RIGHT) != 0) {
+					m_placementsSupport.setResizeable(widget, true);
+				} else {
+					checkAlignment(widget, IPositionConstants.LEFT);
+					checkAlignment(widget, IPositionConstants.RIGHT);
+				}
+				if ((m_alignment & IPositionConstants.TOP) != 0
+						&& (m_alignment & IPositionConstants.BOTTOM) != 0) {
+					m_placementsSupport.setResizeable(widget, false);
+				} else {
+					checkAlignment(widget, IPositionConstants.TOP);
+					checkAlignment(widget, IPositionConstants.BOTTOM);
+				}
+			}
+		}
 
-    private void checkAlignment(C widget, int alignment) throws Exception {
-      if ((m_alignment & alignment) != 0) {
-        m_placementsSupport.setAlignment(widget, alignment);
-      }
-    }
-  }
+		private void checkAlignment(C widget, int alignment) throws Exception {
+			if ((m_alignment & alignment) != 0) {
+				m_placementsSupport.setAlignment(widget, alignment);
+			}
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/form/LayoutAssistantPageClassic.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/form/LayoutAssistantPageClassic.java
index fb349ba77..69f0de84c 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/form/LayoutAssistantPageClassic.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/form/LayoutAssistantPageClassic.java
@@ -36,81 +36,81 @@
  * @author mitin_aa
  */
 public final class LayoutAssistantPageClassic<C extends IControlInfo> extends Composite
-    implements
-      ILayoutAssistantPage {
-  private final List<C> m_selection;
-  private final IFormLayoutInfo<C> m_layout;
+implements
+ILayoutAssistantPage {
+	private final List<C> m_selection;
+	private final IFormLayoutInfo<C> m_layout;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @SuppressWarnings("unchecked")
-  public LayoutAssistantPageClassic(IFormLayoutInfo<C> layout,
-      Composite parent,
-      Object selection,
-      ArrayList<Object> actions) {
-    super(parent, SWT.NONE);
-    m_layout = layout;
-    if (selection instanceof List<?>) {
-      m_selection = (List<C>) selection;
-    } else {
-      m_selection = Collections.singletonList((C) selection);
-    }
-    // create UI
-    GridLayoutFactory.create(this);
-    {
-      Group group = new Group(this, SWT.NONE);
-      GridDataFactory.create(group).fill().grab();
-      group.setText(ModelMessages.LayoutAssistantPageClassic_anchorsGroup);
-      GridLayoutFactory.create(group);
-      {
-        ToolBarManager manager = new ToolBarManager();
-        GridDataFactory.create(manager.createControl(group)).fill().grab();
-        new PredefinedAnchorsActions<C>(m_layout).contributeActions(m_selection, manager);
-        manager.update(true);
-      }
-    }
-    {
-      Group group = new Group(this, SWT.NONE);
-      GridDataFactory.create(group).fill().grab();
-      group.setText(ModelMessages.LayoutAssistantPageClassic_alignmentGroup);
-      GridLayoutFactory.create(group);
-      ToolBarManager manager = new ToolBarManager();
-      GridDataFactory.create(manager.createControl(group)).fill().grab();
-      fillAlignmentActions(actions, manager);
-      manager.update(true);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@SuppressWarnings("unchecked")
+	public LayoutAssistantPageClassic(IFormLayoutInfo<C> layout,
+			Composite parent,
+			Object selection,
+			ArrayList<Object> actions) {
+		super(parent, SWT.NONE);
+		m_layout = layout;
+		if (selection instanceof List<?>) {
+			m_selection = (List<C>) selection;
+		} else {
+			m_selection = Collections.singletonList((C) selection);
+		}
+		// create UI
+		GridLayoutFactory.create(this);
+		{
+			Group group = new Group(this, SWT.NONE);
+			GridDataFactory.create(group).fill().grab();
+			group.setText(ModelMessages.LayoutAssistantPageClassic_anchorsGroup);
+			GridLayoutFactory.create(group);
+			{
+				ToolBarManager manager = new ToolBarManager();
+				GridDataFactory.create(manager.createControl(group)).fill().grab();
+				new PredefinedAnchorsActions<C>(m_layout).contributeActions(m_selection, manager);
+				manager.update(true);
+			}
+		}
+		{
+			Group group = new Group(this, SWT.NONE);
+			GridDataFactory.create(group).fill().grab();
+			group.setText(ModelMessages.LayoutAssistantPageClassic_alignmentGroup);
+			GridLayoutFactory.create(group);
+			ToolBarManager manager = new ToolBarManager();
+			GridDataFactory.create(manager.createControl(group)).fill().grab();
+			fillAlignmentActions(actions, manager);
+			manager.update(true);
+		}
+	}
 
-  private void fillAlignmentActions(ArrayList<Object> actions, IContributionManager manager) {
-    for (Object action : actions) {
-      if (action instanceof IContributionItem) {
-        manager.add((IContributionItem) action);
-      } else if (action instanceof IAction) {
-        manager.add((IAction) action);
-      }
-    }
-  }
+	private void fillAlignmentActions(ArrayList<Object> actions, IContributionManager manager) {
+		for (Object action : actions) {
+			if (action instanceof IContributionItem) {
+				manager.add((IContributionItem) action);
+			} else if (action instanceof IAction) {
+				manager.add((IAction) action);
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ILayoutAssistantPage
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean isPageValid() {
-    for (C object : m_selection) {
-      ObjectInfo parent = object.getParent();
-      if (!parent.getChildren().contains(object)) {
-        return false;
-      }
-    }
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ILayoutAssistantPage
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean isPageValid() {
+		for (C object : m_selection) {
+			ObjectInfo parent = object.getParent();
+			if (!parent.getChildren().contains(object)) {
+				return false;
+			}
+		}
+		return true;
+	}
 
-  @Override
-  public void updatePage() {
-  }
+	@Override
+	public void updatePage() {
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/form/VirtualFormAttachmentCreationSupport.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/form/VirtualFormAttachmentCreationSupport.java
index 17215072a..0c50cd59e 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/form/VirtualFormAttachmentCreationSupport.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/form/VirtualFormAttachmentCreationSupport.java
@@ -25,65 +25,65 @@
  * @coverage swt.model.layout.form
  */
 public final class VirtualFormAttachmentCreationSupport extends CreationSupport {
-  private final FormDataInfo m_formDataInfo;
-  private final Object m_attachmentObject;
+	private final FormDataInfo m_formDataInfo;
+	private final Object m_attachmentObject;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public VirtualFormAttachmentCreationSupport(FormDataInfo formDataInfo, Object attachmentObject) {
-    m_formDataInfo = formDataInfo;
-    m_attachmentObject = attachmentObject;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public VirtualFormAttachmentCreationSupport(FormDataInfo formDataInfo, Object attachmentObject) {
+		m_formDataInfo = formDataInfo;
+		m_attachmentObject = attachmentObject;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public ASTNode getNode() {
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public ASTNode getNode() {
+		return null;
+	}
 
-  @Override
-  public boolean isJavaInfo(ASTNode node) {
-    return false;
-  }
+	@Override
+	public boolean isJavaInfo(ASTNode node) {
+		return false;
+	}
 
-  @Override
-  public void setJavaInfo(JavaInfo javaInfo) throws Exception {
-    super.setJavaInfo(javaInfo);
-    m_javaInfo.setObject(m_attachmentObject);
-    m_formDataInfo.addBroadcastListener(new JavaInfoSetObjectAfter() {
-      @Override
-      public void invoke(JavaInfo target, Object object) throws Exception {
-        // check if this CreationSupport no more needed
-        if (m_javaInfo.getCreationSupport() != VirtualFormAttachmentCreationSupport.this) {
-          m_formDataInfo.removeBroadcastListener(this);
-          return;
-        }
-        if (target == m_formDataInfo) {
-          m_javaInfo.setObject(m_attachmentObject);
-        }
-      }
-    });
-  }
+	@Override
+	public void setJavaInfo(JavaInfo javaInfo) throws Exception {
+		super.setJavaInfo(javaInfo);
+		m_javaInfo.setObject(m_attachmentObject);
+		m_formDataInfo.addBroadcastListener(new JavaInfoSetObjectAfter() {
+			@Override
+			public void invoke(JavaInfo target, Object object) throws Exception {
+				// check if this CreationSupport no more needed
+				if (m_javaInfo.getCreationSupport() != VirtualFormAttachmentCreationSupport.this) {
+					m_formDataInfo.removeBroadcastListener(this);
+					return;
+				}
+				if (target == m_formDataInfo) {
+					m_javaInfo.setObject(m_attachmentObject);
+				}
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Delete
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean canDelete() {
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Delete
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean canDelete() {
+		return true;
+	}
 
-  @Override
-  public void delete() throws Exception {
-    JavaInfoUtils.deleteJavaInfo(m_javaInfo, false);
-  }
+	@Override
+	public void delete() throws Exception {
+		JavaInfoUtils.deleteJavaInfo(m_javaInfo, false);
+	}
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/form/VirtualFormAttachmentVariableSupport.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/form/VirtualFormAttachmentVariableSupport.java
index d47efe82d..7fb4efbca 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/form/VirtualFormAttachmentVariableSupport.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/form/VirtualFormAttachmentVariableSupport.java
@@ -30,79 +30,79 @@
  * @coverage swt.model.layout.form
  */
 public final class VirtualFormAttachmentVariableSupport extends AbstractNoNameVariableSupport {
-  private final FormSide m_side;
+	private final FormSide m_side;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public VirtualFormAttachmentVariableSupport(JavaInfo javaInfo, FormSide side) {
-    super(javaInfo);
-    m_side = side;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public VirtualFormAttachmentVariableSupport(JavaInfo javaInfo, FormSide side) {
+		super(javaInfo);
+		m_side = side;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // VariableSupport
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean isDefault() {
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// VariableSupport
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean isDefault() {
+		return true;
+	}
 
-  @Override
-  public String getTitle() throws Exception {
-    return "(no attachment)";
-  }
+	@Override
+	public String getTitle() throws Exception {
+		return "(no attachment)";
+	}
 
-  @Override
-  public String getReferenceExpression(NodeTarget target) throws Exception {
-    throw new IllegalStateException();
-  }
+	@Override
+	public String getReferenceExpression(NodeTarget target) throws Exception {
+		throw new IllegalStateException();
+	}
 
-  /**
-   * Makes the attachment 'real': changes the variable support and creation support.
-   */
-  public void materialize() throws Exception {
-    // create expression statement and variable support
-    JavaInfo formData = (JavaInfo) m_javaInfo.getParent();
-    Expression expressionStatement =
-        formData.addExpressionStatement(TemplateUtils.format(
-            "{0}.{1} = new org.eclipse.swt.layout.FormAttachment(0, 0)",
-            formData,
-            m_side.getField()));
-    VariableSupport variableSupport = new EmptyVariableSupport(m_javaInfo, expressionStatement);
-    m_javaInfo.setVariableSupport(variableSupport);
-    // creation support
-    {
-      Assignment assignment = (Assignment) expressionStatement;
-      ClassInstanceCreation creation = (ClassInstanceCreation) assignment.getRightHandSide();
-      m_javaInfo.setCreationSupport(new ConstructorCreationSupport(creation));
-      m_javaInfo.bindToExpression(creation);
-    }
-    m_javaInfo.addRelatedNodes(expressionStatement);
-    formData.addRelatedNodes(expressionStatement);
-  }
+	/**
+	 * Makes the attachment 'real': changes the variable support and creation support.
+	 */
+	public void materialize() throws Exception {
+		// create expression statement and variable support
+		JavaInfo formData = (JavaInfo) m_javaInfo.getParent();
+		Expression expressionStatement =
+				formData.addExpressionStatement(TemplateUtils.format(
+						"{0}.{1} = new org.eclipse.swt.layout.FormAttachment(0, 0)",
+						formData,
+						m_side.getField()));
+		VariableSupport variableSupport = new EmptyVariableSupport(m_javaInfo, expressionStatement);
+		m_javaInfo.setVariableSupport(variableSupport);
+		// creation support
+		{
+			Assignment assignment = (Assignment) expressionStatement;
+			ClassInstanceCreation creation = (ClassInstanceCreation) assignment.getRightHandSide();
+			m_javaInfo.setCreationSupport(new ConstructorCreationSupport(creation));
+			m_javaInfo.bindToExpression(creation);
+		}
+		m_javaInfo.addRelatedNodes(expressionStatement);
+		formData.addRelatedNodes(expressionStatement);
+	}
 
-  @Override
-  public String getAccessExpression(NodeTarget target) throws Exception {
-    throw new IllegalStateException();
-  }
+	@Override
+	public String getAccessExpression(NodeTarget target) throws Exception {
+		throw new IllegalStateException();
+	}
 
-  @Override
-  public StatementTarget getStatementTarget() throws Exception {
-    throw new IllegalStateException();
-  }
+	@Override
+	public StatementTarget getStatementTarget() throws Exception {
+		throw new IllegalStateException();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toString() {
-    return "form-attachment";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toString() {
+		return "form-attachment";
+	}
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/form/WidgetSelectDialog.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/form/WidgetSelectDialog.java
index 2523c6826..0dfaa8a16 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/form/WidgetSelectDialog.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/form/WidgetSelectDialog.java
@@ -47,173 +47,173 @@
  * @author mitin_aa
  */
 public class WidgetSelectDialog<C extends IAbstractComponentInfo> extends ResizableDialog {
-  private final List<C> m_widgets;
-  private final String m_dialogTitle;
-  private final String m_listTitle;
-  private final String m_columnTitle;
-  private TableViewer m_viewer;
-  private C m_defaultSelectedWidget;
-  private C m_selectedWidget;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public WidgetSelectDialog(Shell parentShell,
-      List<C> widgets,
-      String dialogTitle,
-      String listTitle,
-      String columnTitle) {
-    super(parentShell, Activator.getDefault());
-    m_widgets = widgets;
-    m_dialogTitle = dialogTitle;
-    m_listTitle = listTitle;
-    m_columnTitle = columnTitle;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected Control createDialogArea(Composite parent) {
-    getShell().forceFocus();
-    Composite area = (Composite) super.createDialogArea(parent);
-    GridLayoutFactory.create(area).spacingV(2);
-    {
-      Label titleLabel = new Label(area, SWT.NONE);
-      titleLabel.setText(m_listTitle);
-      GridDataFactory.create(titleLabel).grabH().fillH();
-    }
-    {
-      m_viewer = new TableViewer(area, SWT.BORDER | SWT.FULL_SELECTION);
-      m_viewer.setContentProvider(new ControlContentProvider());
-      m_viewer.setLabelProvider(new ControlLabelProvider());
-      final Table table = m_viewer.getTable();
-      table.setLinesVisible(true);
-      table.setHeaderVisible(true);
-      GridDataFactory.create(table).grab().fill();
-      {
-        final TableColumn tableColumn = new TableColumn(table, SWT.NONE);
-        tableColumn.setWidth(400);
-        tableColumn.setText(m_columnTitle);
-      }
-      m_viewer.setInput(new Object());
-      m_viewer.addSelectionChangedListener(new ISelectionChangedListener() {
-        @Override
-        public void selectionChanged(SelectionChangedEvent event) {
-          updateButtons();
-        }
-      });
-      m_viewer.addDoubleClickListener(new IDoubleClickListener() {
-        @Override
-        public void doubleClick(DoubleClickEvent event) {
-          okPressed();
-        }
-      });
-      table.setFocus();
-      table.select(0);
-    }
-    return area;
-  }
-
-  @Override
-  protected Control createContents(Composite parent) {
-    Control dialogContents = super.createContents(parent);
-    // set selection here, because only here "Ok" button is created
-    if (m_defaultSelectedWidget != null) {
-      m_viewer.setSelection(new StructuredSelection(m_defaultSelectedWidget));
-    }
-    //
-    return dialogContents;
-  }
-
-  @Override
-  protected void configureShell(Shell newShell) {
-    super.configureShell(newShell);
-    newShell.setText(m_dialogTitle);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Events handling
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @SuppressWarnings("unchecked")
-  @Override
-  protected void okPressed() {
-    m_selectedWidget = (C) getViewerSelection().getFirstElement();
-    super.okPressed();
-  }
-
-  private void updateButtons() {
-    getButton(IDialogConstants.OK_ID).setEnabled(!getViewerSelection().isEmpty());
-  }
-
-  private IStructuredSelection getViewerSelection() {
-    return (IStructuredSelection) m_viewer.getSelection();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void setDefaultSelectedWidget(C defaultSelectedWidget) {
-    m_defaultSelectedWidget = defaultSelectedWidget;
-  }
-
-  public C getSelectedWidget() {
-    return m_selectedWidget;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Content provider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private class ControlContentProvider implements IStructuredContentProvider {
-    @Override
-    public Object[] getElements(Object inputElement) {
-      return m_widgets.toArray();
-    }
-
-    @Override
-    public void dispose() {
-    }
-
-    @Override
-    public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
-    }
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Label provider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private class ControlLabelProvider extends LabelProvider implements ITableLabelProvider {
-    @Override
-    @SuppressWarnings("unchecked")
-    public String getColumnText(Object element, int columnIndex) {
-      C info = (C) element;
-      try {
-        return info.getPresentation().getText();
-      } catch (Throwable e) {
-        throw ReflectionUtils.propagate(e);
-      }
-    }
-
-    @Override
-    @SuppressWarnings("unchecked")
-    public Image getColumnImage(Object element, int columnIndex) {
-      C info = (C) element;
-      try {
-        return info.getPresentation().getIcon();
-      } catch (Throwable e) {
-        throw ReflectionUtils.propagate(e);
-      }
-    }
-  }
+	private final List<C> m_widgets;
+	private final String m_dialogTitle;
+	private final String m_listTitle;
+	private final String m_columnTitle;
+	private TableViewer m_viewer;
+	private C m_defaultSelectedWidget;
+	private C m_selectedWidget;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public WidgetSelectDialog(Shell parentShell,
+			List<C> widgets,
+			String dialogTitle,
+			String listTitle,
+			String columnTitle) {
+		super(parentShell, Activator.getDefault());
+		m_widgets = widgets;
+		m_dialogTitle = dialogTitle;
+		m_listTitle = listTitle;
+		m_columnTitle = columnTitle;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected Control createDialogArea(Composite parent) {
+		getShell().forceFocus();
+		Composite area = (Composite) super.createDialogArea(parent);
+		GridLayoutFactory.create(area).spacingV(2);
+		{
+			Label titleLabel = new Label(area, SWT.NONE);
+			titleLabel.setText(m_listTitle);
+			GridDataFactory.create(titleLabel).grabH().fillH();
+		}
+		{
+			m_viewer = new TableViewer(area, SWT.BORDER | SWT.FULL_SELECTION);
+			m_viewer.setContentProvider(new ControlContentProvider());
+			m_viewer.setLabelProvider(new ControlLabelProvider());
+			final Table table = m_viewer.getTable();
+			table.setLinesVisible(true);
+			table.setHeaderVisible(true);
+			GridDataFactory.create(table).grab().fill();
+			{
+				final TableColumn tableColumn = new TableColumn(table, SWT.NONE);
+				tableColumn.setWidth(400);
+				tableColumn.setText(m_columnTitle);
+			}
+			m_viewer.setInput(new Object());
+			m_viewer.addSelectionChangedListener(new ISelectionChangedListener() {
+				@Override
+				public void selectionChanged(SelectionChangedEvent event) {
+					updateButtons();
+				}
+			});
+			m_viewer.addDoubleClickListener(new IDoubleClickListener() {
+				@Override
+				public void doubleClick(DoubleClickEvent event) {
+					okPressed();
+				}
+			});
+			table.setFocus();
+			table.select(0);
+		}
+		return area;
+	}
+
+	@Override
+	protected Control createContents(Composite parent) {
+		Control dialogContents = super.createContents(parent);
+		// set selection here, because only here "Ok" button is created
+		if (m_defaultSelectedWidget != null) {
+			m_viewer.setSelection(new StructuredSelection(m_defaultSelectedWidget));
+		}
+		//
+		return dialogContents;
+	}
+
+	@Override
+	protected void configureShell(Shell newShell) {
+		super.configureShell(newShell);
+		newShell.setText(m_dialogTitle);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Events handling
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@SuppressWarnings("unchecked")
+	@Override
+	protected void okPressed() {
+		m_selectedWidget = (C) getViewerSelection().getFirstElement();
+		super.okPressed();
+	}
+
+	private void updateButtons() {
+		getButton(IDialogConstants.OK_ID).setEnabled(!getViewerSelection().isEmpty());
+	}
+
+	private IStructuredSelection getViewerSelection() {
+		return (IStructuredSelection) m_viewer.getSelection();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void setDefaultSelectedWidget(C defaultSelectedWidget) {
+		m_defaultSelectedWidget = defaultSelectedWidget;
+	}
+
+	public C getSelectedWidget() {
+		return m_selectedWidget;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Content provider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private class ControlContentProvider implements IStructuredContentProvider {
+		@Override
+		public Object[] getElements(Object inputElement) {
+			return m_widgets.toArray();
+		}
+
+		@Override
+		public void dispose() {
+		}
+
+		@Override
+		public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+		}
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Label provider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private class ControlLabelProvider extends LabelProvider implements ITableLabelProvider {
+		@Override
+		@SuppressWarnings("unchecked")
+		public String getColumnText(Object element, int columnIndex) {
+			C info = (C) element;
+			try {
+				return info.getPresentation().getText();
+			} catch (Throwable e) {
+				throw ReflectionUtils.propagate(e);
+			}
+		}
+
+		@Override
+		@SuppressWarnings("unchecked")
+		public Image getColumnImage(Object element, int columnIndex) {
+			C info = (C) element;
+			try {
+				return info.getPresentation().getIcon();
+			} catch (Throwable e) {
+				throw ReflectionUtils.propagate(e);
+			}
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/form/actions/AnchorActionsClassic.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/form/actions/AnchorActionsClassic.java
index 968eab6e0..27844838e 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/form/actions/AnchorActionsClassic.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/form/actions/AnchorActionsClassic.java
@@ -32,254 +32,254 @@
  * @coverage swt.model.layout.form
  */
 public class AnchorActionsClassic<C extends IControlInfo> {
-  private static final String IMAGE_PREFIX = "info/layout/FormLayoutClassic/";
-  private final FormLayoutInfoImplClassic<C> m_layoutImpl;
+	private static final String IMAGE_PREFIX = "info/layout/FormLayoutClassic/";
+	private final FormLayoutInfoImplClassic<C> m_layoutImpl;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AnchorActionsClassic(FormLayoutInfoImplClassic<C> impl) {
-    m_layoutImpl = impl;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AnchorActionsClassic(FormLayoutInfoImplClassic<C> impl) {
+		m_layoutImpl = impl;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Menu
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void fillMenuHorizontal(final C widget, final int side, IMenuManager manager) {
-    ObjectInfo widgetModel = widget.getUnderlyingModel();
-    if (side == IPositionConstants.LEFT) {
-      manager.add(new ObjectInfoAction(widgetModel,
-          ModelMessages.AnchorActionsClassic_attachToLeftAsOffset, Activator.getImage(IMAGE_PREFIX
-              + "h/menu/left_parent.png")) {
-        @Override
-        protected void runEx() throws Exception {
-          m_layoutImpl.anchor_bindToParent(widget, side, IPositionConstants.LEFT);
-        }
-      });
-      manager.add(new ObjectInfoAction(widgetModel,
-          ModelMessages.AnchorActionsClassic_attachToRightAsOffset, Activator.getImage(IMAGE_PREFIX
-              + "h/menu/right_parent.png")) {
-        @Override
-        protected void runEx() throws Exception {
-          m_layoutImpl.anchor_bindToParent(widget, side, IPositionConstants.RIGHT);
-        }
-      });
-      manager.add(new ObjectInfoAction(widgetModel,
-          ModelMessages.AnchorActionsClassic_attachToLeftAsPercent, Activator.getImage(IMAGE_PREFIX
-              + "h/menu/left_percent.png")) {
-        @Override
-        protected void runEx() throws Exception {
-          m_layoutImpl.anchor_bindToParentAsPercent(widget, side);
-        }
-      });
-      manager.add(new ObjectInfoAction(widgetModel,
-          ModelMessages.AnchorActionsClassic_attachToRightOfControl,
-          Activator.getImage(IMAGE_PREFIX + "h/menu/left_control.png")) {
-        @Override
-        protected void runEx() throws Exception {
-          m_layoutImpl.anchor_bindToControl(widget, side, IPositionConstants.RIGHT);
-        }
-      });
-      manager.add(new ObjectInfoAction(widgetModel,
-          ModelMessages.AnchorActionsClassic_deleteAttachment, Activator.getImage(IMAGE_PREFIX
-              + "h/menu/left_free.png")) {
-        @Override
-        protected void runEx() throws Exception {
-          m_layoutImpl.anchor_delete(widget, side);
-        }
-      });
-    } else if (side == IPositionConstants.RIGHT) {
-      manager.add(new ObjectInfoAction(widgetModel,
-          ModelMessages.AnchorActionsClassic_attachToRightAsOffset, Activator.getImage(IMAGE_PREFIX
-              + "h/menu/right_parent.png")) {
-        @Override
-        protected void runEx() throws Exception {
-          m_layoutImpl.anchor_bindToParent(widget, side, IPositionConstants.RIGHT);
-        }
-      });
-      manager.add(new ObjectInfoAction(widgetModel,
-          ModelMessages.AnchorActionsClassic_attachToLeftAsOffset, Activator.getImage(IMAGE_PREFIX
-              + "h/menu/left_parent.png")) {
-        @Override
-        protected void runEx() throws Exception {
-          m_layoutImpl.anchor_bindToParent(widget, side, IPositionConstants.LEFT);
-        }
-      });
-      manager.add(new ObjectInfoAction(widgetModel,
-          ModelMessages.AnchorActionsClassic_attachToLeftAsPercent, Activator.getImage(IMAGE_PREFIX
-              + "h/menu/left_percent.png")) {
-        @Override
-        protected void runEx() throws Exception {
-          m_layoutImpl.anchor_bindToParentAsPercent(widget, side);
-        }
-      });
-      manager.add(new ObjectInfoAction(widgetModel,
-          ModelMessages.AnchorActionsClassic_attachToLeftOfControl, Activator.getImage(IMAGE_PREFIX
-              + "h/menu/right_control.png")) {
-        @Override
-        protected void runEx() throws Exception {
-          m_layoutImpl.anchor_bindToControl(widget, side, IPositionConstants.LEFT);
-        }
-      });
-      manager.add(new ObjectInfoAction(widgetModel,
-          ModelMessages.AnchorActionsClassic_deleteAttachment, Activator.getImage(IMAGE_PREFIX
-              + "h/menu/right_free.png")) {
-        @Override
-        protected void runEx() throws Exception {
-          m_layoutImpl.anchor_delete(widget, side);
-        }
-      });
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Menu
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void fillMenuHorizontal(final C widget, final int side, IMenuManager manager) {
+		ObjectInfo widgetModel = widget.getUnderlyingModel();
+		if (side == IPositionConstants.LEFT) {
+			manager.add(new ObjectInfoAction(widgetModel,
+					ModelMessages.AnchorActionsClassic_attachToLeftAsOffset, Activator.getImage(IMAGE_PREFIX
+							+ "h/menu/left_parent.png")) {
+				@Override
+				protected void runEx() throws Exception {
+					m_layoutImpl.anchor_bindToParent(widget, side, IPositionConstants.LEFT);
+				}
+			});
+			manager.add(new ObjectInfoAction(widgetModel,
+					ModelMessages.AnchorActionsClassic_attachToRightAsOffset, Activator.getImage(IMAGE_PREFIX
+							+ "h/menu/right_parent.png")) {
+				@Override
+				protected void runEx() throws Exception {
+					m_layoutImpl.anchor_bindToParent(widget, side, IPositionConstants.RIGHT);
+				}
+			});
+			manager.add(new ObjectInfoAction(widgetModel,
+					ModelMessages.AnchorActionsClassic_attachToLeftAsPercent, Activator.getImage(IMAGE_PREFIX
+							+ "h/menu/left_percent.png")) {
+				@Override
+				protected void runEx() throws Exception {
+					m_layoutImpl.anchor_bindToParentAsPercent(widget, side);
+				}
+			});
+			manager.add(new ObjectInfoAction(widgetModel,
+					ModelMessages.AnchorActionsClassic_attachToRightOfControl,
+					Activator.getImage(IMAGE_PREFIX + "h/menu/left_control.png")) {
+				@Override
+				protected void runEx() throws Exception {
+					m_layoutImpl.anchor_bindToControl(widget, side, IPositionConstants.RIGHT);
+				}
+			});
+			manager.add(new ObjectInfoAction(widgetModel,
+					ModelMessages.AnchorActionsClassic_deleteAttachment, Activator.getImage(IMAGE_PREFIX
+							+ "h/menu/left_free.png")) {
+				@Override
+				protected void runEx() throws Exception {
+					m_layoutImpl.anchor_delete(widget, side);
+				}
+			});
+		} else if (side == IPositionConstants.RIGHT) {
+			manager.add(new ObjectInfoAction(widgetModel,
+					ModelMessages.AnchorActionsClassic_attachToRightAsOffset, Activator.getImage(IMAGE_PREFIX
+							+ "h/menu/right_parent.png")) {
+				@Override
+				protected void runEx() throws Exception {
+					m_layoutImpl.anchor_bindToParent(widget, side, IPositionConstants.RIGHT);
+				}
+			});
+			manager.add(new ObjectInfoAction(widgetModel,
+					ModelMessages.AnchorActionsClassic_attachToLeftAsOffset, Activator.getImage(IMAGE_PREFIX
+							+ "h/menu/left_parent.png")) {
+				@Override
+				protected void runEx() throws Exception {
+					m_layoutImpl.anchor_bindToParent(widget, side, IPositionConstants.LEFT);
+				}
+			});
+			manager.add(new ObjectInfoAction(widgetModel,
+					ModelMessages.AnchorActionsClassic_attachToLeftAsPercent, Activator.getImage(IMAGE_PREFIX
+							+ "h/menu/left_percent.png")) {
+				@Override
+				protected void runEx() throws Exception {
+					m_layoutImpl.anchor_bindToParentAsPercent(widget, side);
+				}
+			});
+			manager.add(new ObjectInfoAction(widgetModel,
+					ModelMessages.AnchorActionsClassic_attachToLeftOfControl, Activator.getImage(IMAGE_PREFIX
+							+ "h/menu/right_control.png")) {
+				@Override
+				protected void runEx() throws Exception {
+					m_layoutImpl.anchor_bindToControl(widget, side, IPositionConstants.LEFT);
+				}
+			});
+			manager.add(new ObjectInfoAction(widgetModel,
+					ModelMessages.AnchorActionsClassic_deleteAttachment, Activator.getImage(IMAGE_PREFIX
+							+ "h/menu/right_free.png")) {
+				@Override
+				protected void runEx() throws Exception {
+					m_layoutImpl.anchor_delete(widget, side);
+				}
+			});
+		}
+	}
 
-  public void fillMenuVertical(final C widget, final int side, IMenuManager manager) {
-    ObjectInfo widgetModel = widget.getUnderlyingModel();
-    if (side == IPositionConstants.TOP) {
-      manager.add(new ObjectInfoAction(widgetModel,
-          ModelMessages.AnchorActionsClassic_attachToTopAsOffset, Activator.getImage(IMAGE_PREFIX
-              + "v/menu/top_parent.png")) {
-        @Override
-        protected void runEx() throws Exception {
-          m_layoutImpl.anchor_bindToParent(widget, side, IPositionConstants.TOP);
-        }
-      });
-      manager.add(new ObjectInfoAction(widgetModel,
-          ModelMessages.AnchorActionsClassic_attachToBottomAsOffset,
-          Activator.getImage(IMAGE_PREFIX + "v/menu/bottom_parent.png")) {
-        @Override
-        protected void runEx() throws Exception {
-          m_layoutImpl.anchor_bindToParent(widget, side, IPositionConstants.BOTTOM);
-        }
-      });
-      manager.add(new ObjectInfoAction(widgetModel,
-          ModelMessages.AnchorActionsClassic_attachToTopAsPercent, Activator.getImage(IMAGE_PREFIX
-              + "v/menu/top_percent.png")) {
-        @Override
-        protected void runEx() throws Exception {
-          m_layoutImpl.anchor_bindToParentAsPercent(widget, side);
-        }
-      });
-      manager.add(new ObjectInfoAction(widgetModel,
-          ModelMessages.AnchorActionsClassic_attachToBottomOfControl,
-          Activator.getImage(IMAGE_PREFIX + "v/menu/top_control.png")) {
-        @Override
-        protected void runEx() throws Exception {
-          m_layoutImpl.anchor_bindToControl(widget, side, IPositionConstants.BOTTOM);
-        }
-      });
-      manager.add(new ObjectInfoAction(widgetModel,
-          ModelMessages.AnchorActionsClassic_deleteAttachment, Activator.getImage(IMAGE_PREFIX
-              + "v/menu/top_free.png")) {
-        @Override
-        protected void runEx() throws Exception {
-          m_layoutImpl.anchor_delete(widget, side);
-        }
-      });
-    } else if (side == IPositionConstants.BOTTOM) {
-      manager.add(new ObjectInfoAction(widgetModel,
-          ModelMessages.AnchorActionsClassic_attachToBottomAsOffset,
-          Activator.getImage(IMAGE_PREFIX + "v/menu/bottom_parent.png")) {
-        @Override
-        protected void runEx() throws Exception {
-          m_layoutImpl.anchor_bindToParent(widget, side, IPositionConstants.BOTTOM);
-        }
-      });
-      manager.add(new ObjectInfoAction(widgetModel,
-          ModelMessages.AnchorActionsClassic_attachToTopAsOffset, Activator.getImage(IMAGE_PREFIX
-              + "v/menu/top_parent.png")) {
-        @Override
-        protected void runEx() throws Exception {
-          m_layoutImpl.anchor_bindToParent(widget, side, IPositionConstants.TOP);
-        }
-      });
-      manager.add(new ObjectInfoAction(widgetModel,
-          ModelMessages.AnchorActionsClassic_attachToTopAsPercent, Activator.getImage(IMAGE_PREFIX
-              + "v/menu/top_percent.png")) {
-        @Override
-        protected void runEx() throws Exception {
-          m_layoutImpl.anchor_bindToParentAsPercent(widget, side);
-        }
-      });
-      manager.add(new ObjectInfoAction(widgetModel,
-          ModelMessages.AnchorActionsClassic_attachToTopOfControl, Activator.getImage(IMAGE_PREFIX
-              + "v/menu/bottom_control.png")) {
-        @Override
-        protected void runEx() throws Exception {
-          m_layoutImpl.anchor_bindToControl(widget, side, IPositionConstants.TOP);
-        }
-      });
-      manager.add(new ObjectInfoAction(widgetModel,
-          ModelMessages.AnchorActionsClassic_deleteAttachment, Activator.getImage(IMAGE_PREFIX
-              + "v/menu/bottom_free.png")) {
-        @Override
-        protected void runEx() throws Exception {
-          m_layoutImpl.anchor_delete(widget, side);
-        }
-      });
-    }
-  }
+	public void fillMenuVertical(final C widget, final int side, IMenuManager manager) {
+		ObjectInfo widgetModel = widget.getUnderlyingModel();
+		if (side == IPositionConstants.TOP) {
+			manager.add(new ObjectInfoAction(widgetModel,
+					ModelMessages.AnchorActionsClassic_attachToTopAsOffset, Activator.getImage(IMAGE_PREFIX
+							+ "v/menu/top_parent.png")) {
+				@Override
+				protected void runEx() throws Exception {
+					m_layoutImpl.anchor_bindToParent(widget, side, IPositionConstants.TOP);
+				}
+			});
+			manager.add(new ObjectInfoAction(widgetModel,
+					ModelMessages.AnchorActionsClassic_attachToBottomAsOffset,
+					Activator.getImage(IMAGE_PREFIX + "v/menu/bottom_parent.png")) {
+				@Override
+				protected void runEx() throws Exception {
+					m_layoutImpl.anchor_bindToParent(widget, side, IPositionConstants.BOTTOM);
+				}
+			});
+			manager.add(new ObjectInfoAction(widgetModel,
+					ModelMessages.AnchorActionsClassic_attachToTopAsPercent, Activator.getImage(IMAGE_PREFIX
+							+ "v/menu/top_percent.png")) {
+				@Override
+				protected void runEx() throws Exception {
+					m_layoutImpl.anchor_bindToParentAsPercent(widget, side);
+				}
+			});
+			manager.add(new ObjectInfoAction(widgetModel,
+					ModelMessages.AnchorActionsClassic_attachToBottomOfControl,
+					Activator.getImage(IMAGE_PREFIX + "v/menu/top_control.png")) {
+				@Override
+				protected void runEx() throws Exception {
+					m_layoutImpl.anchor_bindToControl(widget, side, IPositionConstants.BOTTOM);
+				}
+			});
+			manager.add(new ObjectInfoAction(widgetModel,
+					ModelMessages.AnchorActionsClassic_deleteAttachment, Activator.getImage(IMAGE_PREFIX
+							+ "v/menu/top_free.png")) {
+				@Override
+				protected void runEx() throws Exception {
+					m_layoutImpl.anchor_delete(widget, side);
+				}
+			});
+		} else if (side == IPositionConstants.BOTTOM) {
+			manager.add(new ObjectInfoAction(widgetModel,
+					ModelMessages.AnchorActionsClassic_attachToBottomAsOffset,
+					Activator.getImage(IMAGE_PREFIX + "v/menu/bottom_parent.png")) {
+				@Override
+				protected void runEx() throws Exception {
+					m_layoutImpl.anchor_bindToParent(widget, side, IPositionConstants.BOTTOM);
+				}
+			});
+			manager.add(new ObjectInfoAction(widgetModel,
+					ModelMessages.AnchorActionsClassic_attachToTopAsOffset, Activator.getImage(IMAGE_PREFIX
+							+ "v/menu/top_parent.png")) {
+				@Override
+				protected void runEx() throws Exception {
+					m_layoutImpl.anchor_bindToParent(widget, side, IPositionConstants.TOP);
+				}
+			});
+			manager.add(new ObjectInfoAction(widgetModel,
+					ModelMessages.AnchorActionsClassic_attachToTopAsPercent, Activator.getImage(IMAGE_PREFIX
+							+ "v/menu/top_percent.png")) {
+				@Override
+				protected void runEx() throws Exception {
+					m_layoutImpl.anchor_bindToParentAsPercent(widget, side);
+				}
+			});
+			manager.add(new ObjectInfoAction(widgetModel,
+					ModelMessages.AnchorActionsClassic_attachToTopOfControl, Activator.getImage(IMAGE_PREFIX
+							+ "v/menu/bottom_control.png")) {
+				@Override
+				protected void runEx() throws Exception {
+					m_layoutImpl.anchor_bindToControl(widget, side, IPositionConstants.TOP);
+				}
+			});
+			manager.add(new ObjectInfoAction(widgetModel,
+					ModelMessages.AnchorActionsClassic_deleteAttachment, Activator.getImage(IMAGE_PREFIX
+							+ "v/menu/bottom_free.png")) {
+				@Override
+				protected void runEx() throws Exception {
+					m_layoutImpl.anchor_delete(widget, side);
+				}
+			});
+		}
+	}
 
-  public Image getImageHorizontal(final C control, final int side) {
-    return ExecutionUtils.runObjectLog(new RunnableObjectEx<Image>() {
-      @Override
-      public Image runObject() throws Exception {
-        return getImageHorizontal0(control, side);
-      }
-    }, null);
-  }
+	public Image getImageHorizontal(final C control, final int side) {
+		return ExecutionUtils.runObjectLog(new RunnableObjectEx<Image>() {
+			@Override
+			public Image runObject() throws Exception {
+				return getImageHorizontal0(control, side);
+			}
+		}, null);
+	}
 
-  private Image getImageHorizontal0(C control, int side) throws Exception {
-    IFormAttachmentInfo<C> attachment = m_layoutImpl.getAttachment(control, side);
-    String imageName = side == IPositionConstants.LEFT ? "left_" : "right_";
-    if (attachment == null) {
-      imageName += "free";
-    } else if (m_layoutImpl.isControlAttachment(attachment)) {
-      imageName += "control";
-      int targetSide = FormLayoutUtils.convertSwtAlignment(attachment.getAlignment());
-      if (targetSide == side) {
-        imageName += targetSide == IPositionConstants.LEFT ? "_left" : "_right";
-      }
-    } else if (attachment.getNumerator() == 100) {
-      imageName = "right_parent";
-    } else if (attachment.getNumerator() == 0) {
-      imageName = "left_parent";
-    } else {
-      imageName = "left_percent";
-    }
-    return Activator.getImage(IMAGE_PREFIX + "/h/" + imageName + ".png");
-  }
+	private Image getImageHorizontal0(C control, int side) throws Exception {
+		IFormAttachmentInfo<C> attachment = m_layoutImpl.getAttachment(control, side);
+		String imageName = side == IPositionConstants.LEFT ? "left_" : "right_";
+		if (attachment == null) {
+			imageName += "free";
+		} else if (m_layoutImpl.isControlAttachment(attachment)) {
+			imageName += "control";
+			int targetSide = FormLayoutUtils.convertSwtAlignment(attachment.getAlignment());
+			if (targetSide == side) {
+				imageName += targetSide == IPositionConstants.LEFT ? "_left" : "_right";
+			}
+		} else if (attachment.getNumerator() == 100) {
+			imageName = "right_parent";
+		} else if (attachment.getNumerator() == 0) {
+			imageName = "left_parent";
+		} else {
+			imageName = "left_percent";
+		}
+		return Activator.getImage(IMAGE_PREFIX + "/h/" + imageName + ".png");
+	}
 
-  public Image getImageVertical(final C control, final int side) {
-    return ExecutionUtils.runObjectLog(new RunnableObjectEx<Image>() {
-      @Override
-      public Image runObject() throws Exception {
-        return getImageVertical0(control, side);
-      }
-    }, null);
-  }
+	public Image getImageVertical(final C control, final int side) {
+		return ExecutionUtils.runObjectLog(new RunnableObjectEx<Image>() {
+			@Override
+			public Image runObject() throws Exception {
+				return getImageVertical0(control, side);
+			}
+		}, null);
+	}
 
-  private Image getImageVertical0(C control, int side) throws Exception {
-    IFormAttachmentInfo<C> attachment = m_layoutImpl.getAttachment(control, side);
-    String imageName = side == IPositionConstants.TOP ? "top_" : "bottom_";
-    if (attachment == null) {
-      imageName += "free";
-    } else if (m_layoutImpl.isControlAttachment(attachment)) {
-      imageName += "control";
-      int targetSide = FormLayoutUtils.convertSwtAlignment(attachment.getAlignment());
-      if (targetSide == side) {
-        imageName += targetSide == IPositionConstants.TOP ? "_top" : "_bottom";
-      }
-    } else if (attachment.getNumerator() == 100) {
-      imageName = "bottom_parent";
-    } else if (attachment.getNumerator() == 0) {
-      imageName = "top_parent";
-    } else {
-      imageName = "top_percent";
-    }
-    return Activator.getImage(IMAGE_PREFIX + "/v/" + imageName + ".png");
-  }
+	private Image getImageVertical0(C control, int side) throws Exception {
+		IFormAttachmentInfo<C> attachment = m_layoutImpl.getAttachment(control, side);
+		String imageName = side == IPositionConstants.TOP ? "top_" : "bottom_";
+		if (attachment == null) {
+			imageName += "free";
+		} else if (m_layoutImpl.isControlAttachment(attachment)) {
+			imageName += "control";
+			int targetSide = FormLayoutUtils.convertSwtAlignment(attachment.getAlignment());
+			if (targetSide == side) {
+				imageName += targetSide == IPositionConstants.TOP ? "_top" : "_bottom";
+			}
+		} else if (attachment.getNumerator() == 100) {
+			imageName = "bottom_parent";
+		} else if (attachment.getNumerator() == 0) {
+			imageName = "top_parent";
+		} else {
+			imageName = "top_percent";
+		}
+		return Activator.getImage(IMAGE_PREFIX + "/v/" + imageName + ".png");
+	}
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/form/actions/PredefinedAnchorsActions.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/form/actions/PredefinedAnchorsActions.java
index e91589f07..ae20eafe1 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/form/actions/PredefinedAnchorsActions.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/form/actions/PredefinedAnchorsActions.java
@@ -31,140 +31,140 @@
  * @coverage swt.model.layout.form
  */
 public class PredefinedAnchorsActions<C extends IControlInfo> {
-  private static final String IMAGE_PREFIX = "info/layout/FormLayout/assistant/";
-  private final IFormLayoutInfo<C> m_layout;
+	private static final String IMAGE_PREFIX = "info/layout/FormLayout/assistant/";
+	private final IFormLayoutInfo<C> m_layout;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public PredefinedAnchorsActions(IFormLayoutInfo<C> layout) {
-    m_layout = layout;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public PredefinedAnchorsActions(IFormLayoutInfo<C> layout) {
+		m_layout = layout;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Fill
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void contributeActions(C widget, IContributionManager manager) {
-    @SuppressWarnings("unchecked")
-    List<C> selection = Lists.newArrayList(widget);
-    contributeActions(selection, manager);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Fill
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void contributeActions(C widget, IContributionManager manager) {
+		@SuppressWarnings("unchecked")
+		List<C> selection = Lists.newArrayList(widget);
+		contributeActions(selection, manager);
+	}
 
-  public void contributeActions(List<C> selection, IContributionManager manager) {
-    manager.add(new SetCornerAnchorsAction<C>(selection,
-        ModelMessages.PredefinedAnchorsActions_topLeft,
-        "top_left.gif",
-        IPositionConstants.LEFT | IPositionConstants.TOP));
-    manager.add(new SetCornerAnchorsAction<C>(selection,
-        ModelMessages.PredefinedAnchorsActions_topRight,
-        "top_right.gif",
-        IPositionConstants.TOP | IPositionConstants.RIGHT));
-    manager.add(new SetCornerAnchorsAction<C>(selection,
-        ModelMessages.PredefinedAnchorsActions_bottomLeft,
-        "bottom_left.gif",
-        IPositionConstants.LEFT | IPositionConstants.BOTTOM));
-    manager.add(new SetCornerAnchorsAction<C>(selection,
-        ModelMessages.PredefinedAnchorsActions_bottomRight,
-        "bottom_right.gif",
-        IPositionConstants.BOTTOM | IPositionConstants.RIGHT));
-    manager.add(new Separator());
-    manager.add(new SetCornerAnchorsAction<C>(selection,
-        ModelMessages.PredefinedAnchorsActions_leftRightTop,
-        "top_left_right.gif",
-        IPositionConstants.LEFT | IPositionConstants.TOP | IPositionConstants.RIGHT));
-    manager.add(new SetCornerAnchorsAction<C>(selection,
-        ModelMessages.PredefinedAnchorsActions_leftRightBottom,
-        "bottom_left_right.gif",
-        IPositionConstants.LEFT | IPositionConstants.BOTTOM | IPositionConstants.RIGHT));
-    manager.add(new SetCornerAnchorsAction<C>(selection,
-        ModelMessages.PredefinedAnchorsActions_topBottomLeft,
-        "top_bottom_left.gif",
-        IPositionConstants.TOP | IPositionConstants.LEFT | IPositionConstants.BOTTOM));
-    manager.add(new SetCornerAnchorsAction<C>(selection,
-        ModelMessages.PredefinedAnchorsActions_topBottomRight,
-        "top_bottom_right.gif",
-        IPositionConstants.BOTTOM | IPositionConstants.RIGHT | IPositionConstants.TOP));
-    manager.add(new Separator());
-    manager.add(new SetCornerAnchorsAction<C>(selection,
-        ModelMessages.PredefinedAnchorsActions_TopBottomLeftRight,
-        "top_bottom_left_right.gif",
-        IPositionConstants.BOTTOM
-            | IPositionConstants.RIGHT
-            | IPositionConstants.TOP
-            | IPositionConstants.LEFT));
-    manager.add(new Separator());
-    manager.add(new SetCornerAnchorsAction<C>(selection,
-        ModelMessages.PredefinedAnchorsActions_topLeftRelative,
-        "top_left_relative.gif",
-        IPositionConstants.TOP | IPositionConstants.LEFT,
-        true));
-    manager.add(new SetCornerAnchorsAction<C>(selection,
-        ModelMessages.PredefinedAnchorsActions_topRightRelative,
-        "top_right_relative.gif",
-        IPositionConstants.TOP | IPositionConstants.RIGHT,
-        true));
-    manager.add(new SetCornerAnchorsAction<C>(selection,
-        ModelMessages.PredefinedAnchorsActions_bottomLeftRelative,
-        "bottom_left_relative.gif",
-        IPositionConstants.LEFT | IPositionConstants.BOTTOM,
-        true));
-    manager.add(new SetCornerAnchorsAction<C>(selection,
-        ModelMessages.PredefinedAnchorsActions_bottomRightRelative,
-        "bottom_right_relative.gif",
-        IPositionConstants.BOTTOM | IPositionConstants.RIGHT,
-        true));
-    manager.add(new Separator());
-    manager.add(new SetCornerAnchorsAction<C>(selection,
-        ModelMessages.PredefinedAnchorsActions_topLeftRightRelative,
-        "top_left_right_relative.gif",
-        IPositionConstants.TOP | IPositionConstants.LEFT | IPositionConstants.RIGHT,
-        true));
-    manager.add(new SetCornerAnchorsAction<C>(selection,
-        ModelMessages.PredefinedAnchorsActions_bottomLeftRightRelative,
-        "bottom_left_right_relative.gif",
-        IPositionConstants.BOTTOM | IPositionConstants.LEFT | IPositionConstants.RIGHT,
-        true));
-    manager.add(new SetCornerAnchorsAction<C>(selection,
-        ModelMessages.PredefinedAnchorsActions_topBottomRightRelative,
-        "top_bottom_right_relative.gif",
-        IPositionConstants.BOTTOM | IPositionConstants.TOP | IPositionConstants.RIGHT,
-        true));
-    manager.add(new SetCornerAnchorsAction<C>(selection,
-        ModelMessages.PredefinedAnchorsActions_topBottomLeftRelative,
-        "top_bottom_left_relative.gif",
-        IPositionConstants.BOTTOM | IPositionConstants.TOP | IPositionConstants.LEFT,
-        true));
-  }
+	public void contributeActions(List<C> selection, IContributionManager manager) {
+		manager.add(new SetCornerAnchorsAction<C>(selection,
+				ModelMessages.PredefinedAnchorsActions_topLeft,
+				"top_left.gif",
+				IPositionConstants.LEFT | IPositionConstants.TOP));
+		manager.add(new SetCornerAnchorsAction<C>(selection,
+				ModelMessages.PredefinedAnchorsActions_topRight,
+				"top_right.gif",
+				IPositionConstants.TOP | IPositionConstants.RIGHT));
+		manager.add(new SetCornerAnchorsAction<C>(selection,
+				ModelMessages.PredefinedAnchorsActions_bottomLeft,
+				"bottom_left.gif",
+				IPositionConstants.LEFT | IPositionConstants.BOTTOM));
+		manager.add(new SetCornerAnchorsAction<C>(selection,
+				ModelMessages.PredefinedAnchorsActions_bottomRight,
+				"bottom_right.gif",
+				IPositionConstants.BOTTOM | IPositionConstants.RIGHT));
+		manager.add(new Separator());
+		manager.add(new SetCornerAnchorsAction<C>(selection,
+				ModelMessages.PredefinedAnchorsActions_leftRightTop,
+				"top_left_right.gif",
+				IPositionConstants.LEFT | IPositionConstants.TOP | IPositionConstants.RIGHT));
+		manager.add(new SetCornerAnchorsAction<C>(selection,
+				ModelMessages.PredefinedAnchorsActions_leftRightBottom,
+				"bottom_left_right.gif",
+				IPositionConstants.LEFT | IPositionConstants.BOTTOM | IPositionConstants.RIGHT));
+		manager.add(new SetCornerAnchorsAction<C>(selection,
+				ModelMessages.PredefinedAnchorsActions_topBottomLeft,
+				"top_bottom_left.gif",
+				IPositionConstants.TOP | IPositionConstants.LEFT | IPositionConstants.BOTTOM));
+		manager.add(new SetCornerAnchorsAction<C>(selection,
+				ModelMessages.PredefinedAnchorsActions_topBottomRight,
+				"top_bottom_right.gif",
+				IPositionConstants.BOTTOM | IPositionConstants.RIGHT | IPositionConstants.TOP));
+		manager.add(new Separator());
+		manager.add(new SetCornerAnchorsAction<C>(selection,
+				ModelMessages.PredefinedAnchorsActions_TopBottomLeftRight,
+				"top_bottom_left_right.gif",
+				IPositionConstants.BOTTOM
+				| IPositionConstants.RIGHT
+				| IPositionConstants.TOP
+				| IPositionConstants.LEFT));
+		manager.add(new Separator());
+		manager.add(new SetCornerAnchorsAction<C>(selection,
+				ModelMessages.PredefinedAnchorsActions_topLeftRelative,
+				"top_left_relative.gif",
+				IPositionConstants.TOP | IPositionConstants.LEFT,
+				true));
+		manager.add(new SetCornerAnchorsAction<C>(selection,
+				ModelMessages.PredefinedAnchorsActions_topRightRelative,
+				"top_right_relative.gif",
+				IPositionConstants.TOP | IPositionConstants.RIGHT,
+				true));
+		manager.add(new SetCornerAnchorsAction<C>(selection,
+				ModelMessages.PredefinedAnchorsActions_bottomLeftRelative,
+				"bottom_left_relative.gif",
+				IPositionConstants.LEFT | IPositionConstants.BOTTOM,
+				true));
+		manager.add(new SetCornerAnchorsAction<C>(selection,
+				ModelMessages.PredefinedAnchorsActions_bottomRightRelative,
+				"bottom_right_relative.gif",
+				IPositionConstants.BOTTOM | IPositionConstants.RIGHT,
+				true));
+		manager.add(new Separator());
+		manager.add(new SetCornerAnchorsAction<C>(selection,
+				ModelMessages.PredefinedAnchorsActions_topLeftRightRelative,
+				"top_left_right_relative.gif",
+				IPositionConstants.TOP | IPositionConstants.LEFT | IPositionConstants.RIGHT,
+				true));
+		manager.add(new SetCornerAnchorsAction<C>(selection,
+				ModelMessages.PredefinedAnchorsActions_bottomLeftRightRelative,
+				"bottom_left_right_relative.gif",
+				IPositionConstants.BOTTOM | IPositionConstants.LEFT | IPositionConstants.RIGHT,
+				true));
+		manager.add(new SetCornerAnchorsAction<C>(selection,
+				ModelMessages.PredefinedAnchorsActions_topBottomRightRelative,
+				"top_bottom_right_relative.gif",
+				IPositionConstants.BOTTOM | IPositionConstants.TOP | IPositionConstants.RIGHT,
+				true));
+		manager.add(new SetCornerAnchorsAction<C>(selection,
+				ModelMessages.PredefinedAnchorsActions_topBottomLeftRelative,
+				"top_bottom_left_relative.gif",
+				IPositionConstants.BOTTOM | IPositionConstants.TOP | IPositionConstants.LEFT,
+				true));
+	}
 
-  private final class SetCornerAnchorsAction<C1 extends IControlInfo> extends ObjectInfoAction {
-    private final int m_alignment;
-    private final List<C> m_widgets;
-    private final boolean m_relative;
+	private final class SetCornerAnchorsAction<C1 extends IControlInfo> extends ObjectInfoAction {
+		private final int m_alignment;
+		private final List<C> m_widgets;
+		private final boolean m_relative;
 
-    private SetCornerAnchorsAction(List<C> selection, String text, String imageName, int alignment) {
-      this(selection, text, imageName, alignment, false);
-    }
+		private SetCornerAnchorsAction(List<C> selection, String text, String imageName, int alignment) {
+			this(selection, text, imageName, alignment, false);
+		}
 
-    private SetCornerAnchorsAction(List<C> selection,
-        String text,
-        String imageName,
-        int alignment,
-        boolean relative) {
-      super(m_layout.getUnderlyingModel(), text, Activator.getImage(IMAGE_PREFIX + imageName));
-      m_widgets = selection;
-      m_alignment = alignment;
-      m_relative = relative;
-    }
+		private SetCornerAnchorsAction(List<C> selection,
+				String text,
+				String imageName,
+				int alignment,
+				boolean relative) {
+			super(m_layout.getUnderlyingModel(), text, Activator.getImage(IMAGE_PREFIX + imageName));
+			m_widgets = selection;
+			m_alignment = alignment;
+			m_relative = relative;
+		}
 
-    @Override
-    protected void runEx() throws Exception {
-      for (C widget : m_widgets) {
-        m_layout.setQuickAnchors(widget, m_alignment, m_relative);
-      }
-    }
-  }
+		@Override
+		protected void runEx() throws Exception {
+			for (C widget : m_widgets) {
+				m_layout.setQuickAnchors(widget, m_alignment, m_relative);
+			}
+		}
+	}
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/grid/GridColumnInfo.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/grid/GridColumnInfo.java
index 9c3355e6f..f02b843cc 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/grid/GridColumnInfo.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/grid/GridColumnInfo.java
@@ -21,75 +21,75 @@
  * @coverage swt.model.layout
  */
 public final class GridColumnInfo<C extends IControlInfo> extends GridDimensionInfo<C> {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public GridColumnInfo(IGridLayoutInfo<C> layout) {
-    super(layout);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public GridColumnInfo(IGridLayoutInfo<C> layout) {
+		super(layout);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Grab
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected boolean getGrab(IGridDataInfo gridData) {
-    return gridData.getHorizontalGrab();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Grab
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected boolean getGrab(IGridDataInfo gridData) {
+		return gridData.getHorizontalGrab();
+	}
 
-  @Override
-  protected void setGrab(IGridDataInfo gridData, boolean grab) throws Exception {
-    gridData.setHorizontalGrab(grab);
-  }
+	@Override
+	protected void setGrab(IGridDataInfo gridData, boolean grab) throws Exception {
+		gridData.setHorizontalGrab(grab);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Alignment
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getAlignmentTitle(int alignment) {
-    if (alignment == SWT.LEFT) {
-      return "left";
-    } else if (alignment == SWT.CENTER) {
-      return "center";
-    } else if (alignment == SWT.RIGHT) {
-      return "right";
-    } else {
-      return "fill";
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Alignment
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getAlignmentTitle(int alignment) {
+		if (alignment == SWT.LEFT) {
+			return "left";
+		} else if (alignment == SWT.CENTER) {
+			return "center";
+		} else if (alignment == SWT.RIGHT) {
+			return "right";
+		} else {
+			return "fill";
+		}
+	}
 
-  @Override
-  protected int getAlignment(IGridDataInfo gridData) {
-    return gridData.getHorizontalAlignment();
-  }
+	@Override
+	protected int getAlignment(IGridDataInfo gridData) {
+		return gridData.getHorizontalAlignment();
+	}
 
-  @Override
-  protected void setAlignment(IGridDataInfo gridData, int alignment) throws Exception {
-    gridData.setHorizontalAlignment(alignment);
-  }
+	@Override
+	protected void setAlignment(IGridDataInfo gridData, int alignment) throws Exception {
+		gridData.setHorizontalAlignment(alignment);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Delete
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void delete() throws Exception {
-    m_layout.command_deleteColumn(m_index, true);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Delete
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void delete() throws Exception {
+		m_layout.command_deleteColumn(m_index, true);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Processing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected boolean shouldProcessThisControl(IGridDataInfo gridData) {
-    return gridData.getX() == m_index;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Processing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected boolean shouldProcessThisControl(IGridDataInfo gridData) {
+		return gridData.getX() == m_index;
+	}
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/grid/GridDataInfo.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/grid/GridDataInfo.java
index 053e53a83..8b31478e1 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/grid/GridDataInfo.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/grid/GridDataInfo.java
@@ -50,552 +50,552 @@
  * @coverage swt.model.layout
  */
 public final class GridDataInfo extends LayoutDataInfo implements IGridDataInfo {
-  private boolean m_internalLocationChange = false;
-  int x = -1;
-  int y = -1;
-  int width = 1;
-  int height = 1;
-  boolean horizontalGrab;
-  boolean verticalGrab;
-  int horizontalAlignment;
-  int verticalAlignment;
-  int widthHint;
-  int heightHint;
-  boolean exclude;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public GridDataInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-    useAccessorsForPropertyValues();
-    contributeContextMenu();
-    validateSpanPropertyValues();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Broadcasts
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Alignment fields may have "old" values, from {@link GridDataInfo}, instead of "modern" - from
-   * {@link SWT}, but our property editors want only "modern". So, we intercept value request and
-   * return "modern" values.
-   */
-  private void useAccessorsForPropertyValues() {
-    addBroadcastListener(new GenericPropertyGetValue() {
-      @Override
-      public void invoke(GenericPropertyImpl property, Object[] value) throws Exception {
-        if (property.getJavaInfo() == GridDataInfo.this) {
-          String title = property.getTitle();
-          if (title.equals("horizontalAlignment")) {
-            value[0] = getHorizontalAlignment();
-          }
-          if (title.equals("verticalAlignment")) {
-            value[0] = getVerticalAlignment();
-          }
-        }
-      }
-    });
-  }
-
-  /**
-   * Don't crash if user tries to use invalid span values.
-   */
-  private void validateSpanPropertyValues() {
-    addBroadcastListener(new GenericPropertySetValue() {
-      @Override
-      public void invoke(GenericPropertyImpl property, Object[] value, boolean[] shouldSetValue)
-          throws Exception {
-        if (m_internalLocationChange) {
-          return;
-        }
-        if (property.getJavaInfo() == GridDataInfo.this && value[0] instanceof Integer) {
-          String title = property.getTitle();
-          if (title.equals("horizontalSpan")) {
-            int span = (Integer) value[0];
-            if (!isValidHorizontalSpan(span)) {
-              shouldSetValue[0] = false;
-              return;
-            }
-          }
-          if (title.equals("verticalSpan")) {
-            int span = (Integer) value[0];
-            if (!isValidVerticalSpan(span)) {
-              shouldSetValue[0] = false;
-              return;
-            }
-          }
-        }
-      }
-
-      private boolean isValidHorizontalSpan(int span) throws Exception {
-        if (span <= 0) {
-          return false;
-        }
-        IGridInfo grid = getLayout().getGridInfo();
-        Rectangle cells = grid.getComponentCells(getControl());
-        if (cells.x + span > grid.getColumnCount()) {
-          return false;
-        }
-        return true;
-      }
-
-      private boolean isValidVerticalSpan(int span) throws Exception {
-        if (span <= 0) {
-          return false;
-        }
-        IGridInfo grid = getLayout().getGridInfo();
-        Rectangle cells = grid.getComponentCells(getControl());
-        if (cells.y + span > grid.getRowCount()) {
-          return false;
-        }
-        return true;
-      }
-    });
-  }
-
-  private void contributeContextMenu() {
-    addBroadcastListener(new ObjectEventListener() {
-      @Override
-      public void addContextMenu(List<? extends ObjectInfo> objects,
-          ObjectInfo object,
-          IMenuManager manager) throws Exception {
-        if (getParent() == object) {
-          GridDataInfo.this.addContextMenu(manager);
-        }
-      }
-    });
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void refresh_fetch() throws Exception {
-    super.refresh_fetch();
-    getCurrentObjectFields();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if this {@link GridData} has "exclude" flag.
-   */
-  public boolean getExclude() {
-    return exclude;
-  }
-
-  /**
-   * Gets values from {@link GridData} object to this {@link GridDataInfo} fields.
-   */
-  private void getCurrentObjectFields() throws Exception {
-    Object object = getObject();
-    // prepare GridLayout
-    GridLayoutInfo layout = getLayout();
-    if (layout == null) {
-      return;
-    }
-    // location
-    {
-      Object layoutObject = layout.getObject();
-      Object controlObject = getControl().getObject();
-      Point xyPoint = GridLayoutSupport.getXY(layoutObject, controlObject);
-      if (xyPoint != null) {
-        x = xyPoint.x;
-        y = xyPoint.y;
-      }
-    }
-    // span
-    width = ReflectionUtils.getFieldInt(object, "horizontalSpan");
-    height = ReflectionUtils.getFieldInt(object, "verticalSpan");
-    // grab
-    horizontalGrab = ReflectionUtils.getFieldBoolean(object, "grabExcessHorizontalSpace");
-    verticalGrab = ReflectionUtils.getFieldBoolean(object, "grabExcessVerticalSpace");
-    // alignment
-    {
-      horizontalAlignment = ReflectionUtils.getFieldInt(object, "horizontalAlignment");
-      horizontalAlignment = getModernHorizontalAlignment(horizontalAlignment);
-    }
-    {
-      verticalAlignment = ReflectionUtils.getFieldInt(object, "verticalAlignment");
-      verticalAlignment = getModernVerticalAlignment(verticalAlignment);
-    }
-    // hint
-    {
-      widthHint = ReflectionUtils.getFieldInt(object, "widthHint");;
-      heightHint = ReflectionUtils.getFieldInt(object, "heightHint");;
-    }
-    // fix "width", if GridData uses invalid value
-    {
-      int numColumns = layout.getNumColumns();
-      width = Math.max(1, Math.min(width, numColumns));
-    }
-    // exclude
-    exclude = ReflectionUtils.getFieldBoolean(object, "exclude");
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Internal access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private ControlInfo getControl() {
-    return (ControlInfo) getParent();
-  }
-
-  private GridLayoutInfo getLayout() {
-    CompositeInfo composite = (CompositeInfo) getControl().getParent();
-    if (composite == null) {
-      return null;
-    }
-    return (GridLayoutInfo) composite.getLayout();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Location
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public int getX() {
-    return x;
-  }
-
-  @Override
-  public void setX(int x) {
-    this.x = x;
-  }
-
-  @Override
-  public int getY() {
-    return y;
-  }
-
-  @Override
-  public void setY(int y) {
-    this.y = y;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Span
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void setHorizontalSpan(int width) throws Exception {
-    if (this.width != width) {
-      this.width = width;
-      m_internalLocationChange = true;
-      try {
-        getPropertyByTitle("horizontalSpan").setValue(width);
-      } finally {
-        m_internalLocationChange = false;
-      }
-    }
-  }
-
-  @Override
-  public void setVerticalSpan(int height) throws Exception {
-    if (this.height != height) {
-      this.height = height;
-      m_internalLocationChange = true;
-      try {
-        getPropertyByTitle("verticalSpan").setValue(height);
-      } finally {
-        m_internalLocationChange = false;
-      }
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Grab
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean getHorizontalGrab() {
-    return horizontalGrab;
-  }
-
-  @Override
-  public void setHorizontalGrab(boolean grab) throws Exception {
-    horizontalGrab = grab;
-    getPropertyByTitle("grabExcessHorizontalSpace").setValue(grab ? Boolean.TRUE : Boolean.FALSE);
-  }
-
-  @Override
-  public boolean getVerticalGrab() {
-    return verticalGrab;
-  }
-
-  @Override
-  public void setVerticalGrab(boolean grab) throws Exception {
-    verticalGrab = grab;
-    getPropertyByTitle("grabExcessVerticalSpace").setValue(grab ? Boolean.TRUE : Boolean.FALSE);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Alignment
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public int getHorizontalAlignment() {
-    return horizontalAlignment;
-  }
-
-  @Override
-  public void setHorizontalAlignment(int alignment) throws Exception {
-    alignment = getModernHorizontalAlignment(alignment);
-    if (horizontalAlignment != alignment) {
-      horizontalAlignment = alignment;
-      setEnumProperty("horizontalAlignment", horizontalAlignment);
-    }
-  }
-
-  @Override
-  public int getVerticalAlignment() {
-    return verticalAlignment;
-  }
-
-  @Override
-  public void setVerticalAlignment(int alignment) throws Exception {
-    alignment = getModernVerticalAlignment(alignment);
-    if (verticalAlignment != alignment) {
-      verticalAlignment = alignment;
-      setEnumProperty("verticalAlignment", verticalAlignment);
-    }
-  }
-
-  /**
-   * @return the {@link GridData} horizontal alignment constant from SWT.
-   */
-  private int getModernHorizontalAlignment(int alignment) {
-    switch (alignment) {
-      case GridData.BEGINNING :
-        return SWT.LEFT;
-      case GridData.CENTER :
-        return SWT.CENTER;
-      case GridData.END :
-      case SWT.END :
-        return SWT.RIGHT;
-      case GridData.FILL :
-        return SWT.FILL;
-    }
-    // as is, and hope that it is correct
-    return alignment;
-  }
-
-  /**
-   * @return the {@link GridData} vertical alignment constant from SWT.
-   */
-  private int getModernVerticalAlignment(int alignment) {
-    switch (alignment) {
-      case GridData.BEGINNING :
-        return SWT.TOP;
-      case GridData.CENTER :
-        return SWT.CENTER;
-      case GridData.END :
-      case SWT.END :
-        return SWT.BOTTOM;
-      case GridData.FILL :
-        return SWT.FILL;
-    }
-    // as is, and hope that it is correct
-    return alignment;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Hint
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return value of <code>widthHint</code> property.
-   */
-  public int getWidthHint() {
-    return widthHint;
-  }
-
-  /**
-   * @return value of <code>heightHint</code> property.
-   */
-  public int getHeightHint() {
-    return heightHint;
-  }
-
-  @Override
-  public void setWidthHint(int widthHint) throws Exception {
-    if (this.widthHint != widthHint) {
-      this.widthHint = widthHint;
-      getPropertyByTitle("widthHint").setValue(widthHint);
-    }
-  }
-
-  @Override
-  public void setHeightHint(int heightHint) throws Exception {
-    if (this.heightHint != heightHint) {
-      this.heightHint = heightHint;
-      getPropertyByTitle("heightHint").setValue(heightHint);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets value for {@link Property} with {@link StaticFieldPropertyEditor}.
-   */
-  private void setEnumProperty(String propertyTitle, int value) throws Exception {
-    Property property = getPropertyByTitle(propertyTitle);
-    setEnumProperty(property, value);
-  }
-
-  /**
-   * Sets value for {@link Property} with {@link StaticFieldPropertyEditor}.
-   */
-  private static void setEnumProperty(Property property, int value) throws Exception {
-    StaticFieldPropertyEditor propertyEditor = (StaticFieldPropertyEditor) property.getEditor();
-    propertyEditor.setValue(property, value);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Images
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Image getSmallAlignmentImage(boolean horizontal) {
-    if (horizontal) {
-      switch (horizontalAlignment) {
-        case SWT.LEFT :
-          return GridImages.getImage("h/left.gif");
-        case SWT.CENTER :
-          return GridImages.getImage("h/center.gif");
-        case SWT.RIGHT :
-          return GridImages.getImage("h/right.gif");
-        case SWT.FILL :
-          return GridImages.getImage("h/fill.gif");
-        default :
-          return null;
-      }
-    } else {
-      switch (verticalAlignment) {
-        case SWT.TOP :
-          return GridImages.getImage("v/top.gif");
-        case SWT.CENTER :
-          return GridImages.getImage("v/center.gif");
-        case SWT.BOTTOM :
-          return GridImages.getImage("v/bottom.gif");
-        case SWT.FILL :
-          return GridImages.getImage("v/fill.gif");
-        default :
-          return null;
-      }
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Context menu
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds items to the context {@link IMenuManager}.
-   */
-  public void addContextMenu(IMenuManager manager) {
-    // horizontal
-    {
-      IMenuManager manager2 = new MenuManager(ModelMessages.GridDataInfo_horizontalAlignment);
-      manager.appendToGroup(IContextMenuConstants.GROUP_TOP, manager2);
-      //
-      manager2.add(new SetGrabAction(this,
-          ModelMessages.GridDataInfo_grabExcessSpace,
-          "grow.gif",
-          true));
-      if (getWidthHint() != SWT.DEFAULT) {
-        manager2.add(new ClearHintAction(this, ModelMessages.GridDataInfo_clearHint, true));
-      }
-      manager2.add(new Separator());
-      //
-      fillHorizontalAlignmentMenu(manager2);
-    }
-    // vertical
-    {
-      IMenuManager manager2 = new MenuManager(ModelMessages.GridDataInfo_verticalAlignment);
-      manager.appendToGroup(IContextMenuConstants.GROUP_TOP, manager2);
-      //
-      manager2.add(new SetGrabAction(this,
-          ModelMessages.GridDataInfo_grabExcessSpace,
-          "grow.gif",
-          false));
-      if (getHeightHint() != SWT.DEFAULT) {
-        manager2.add(new ClearHintAction(this, ModelMessages.GridDataInfo_clearHint, false));
-      }
-      manager2.add(new Separator());
-      //
-      fillVerticalAlignmentMenu(manager2);
-    }
-  }
-
-  @Override
-  public void fillHorizontalAlignmentMenu(IMenuManager manager) {
-    manager.add(new SetAlignmentAction(this,
-        ModelMessages.GridDataInfo_horLeft,
-        "left.gif",
-        true,
-        SWT.LEFT));
-    manager.add(new SetAlignmentAction(this,
-        ModelMessages.GridDataInfo_horCenter,
-        "center.gif",
-        true,
-        SWT.CENTER));
-    manager.add(new SetAlignmentAction(this,
-        ModelMessages.GridDataInfo_horRight,
-        "right.gif",
-        true,
-        SWT.RIGHT));
-    manager.add(new SetAlignmentAction(this,
-        ModelMessages.GridDataInfo_horFill,
-        "fill.gif",
-        true,
-        SWT.FILL));
-  }
-
-  @Override
-  public void fillVerticalAlignmentMenu(IMenuManager manager) {
-    manager.add(new SetAlignmentAction(this,
-        ModelMessages.GridDataInfo_verTop,
-        "top.gif",
-        false,
-        SWT.TOP));
-    manager.add(new SetAlignmentAction(this,
-        ModelMessages.GridDataInfo_verCenter,
-        "center.gif",
-        false,
-        SWT.CENTER));
-    manager.add(new SetAlignmentAction(this,
-        ModelMessages.GridDataInfo_verBottom,
-        "bottom.gif",
-        false,
-        SWT.BOTTOM));
-    manager.add(new SetAlignmentAction(this,
-        ModelMessages.GridDataInfo_verFill,
-        "fill.gif",
-        false,
-        SWT.FILL));
-  }
+	private boolean m_internalLocationChange = false;
+	int x = -1;
+	int y = -1;
+	int width = 1;
+	int height = 1;
+	boolean horizontalGrab;
+	boolean verticalGrab;
+	int horizontalAlignment;
+	int verticalAlignment;
+	int widthHint;
+	int heightHint;
+	boolean exclude;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public GridDataInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+		useAccessorsForPropertyValues();
+		contributeContextMenu();
+		validateSpanPropertyValues();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Broadcasts
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Alignment fields may have "old" values, from {@link GridDataInfo}, instead of "modern" - from
+	 * {@link SWT}, but our property editors want only "modern". So, we intercept value request and
+	 * return "modern" values.
+	 */
+	private void useAccessorsForPropertyValues() {
+		addBroadcastListener(new GenericPropertyGetValue() {
+			@Override
+			public void invoke(GenericPropertyImpl property, Object[] value) throws Exception {
+				if (property.getJavaInfo() == GridDataInfo.this) {
+					String title = property.getTitle();
+					if (title.equals("horizontalAlignment")) {
+						value[0] = getHorizontalAlignment();
+					}
+					if (title.equals("verticalAlignment")) {
+						value[0] = getVerticalAlignment();
+					}
+				}
+			}
+		});
+	}
+
+	/**
+	 * Don't crash if user tries to use invalid span values.
+	 */
+	private void validateSpanPropertyValues() {
+		addBroadcastListener(new GenericPropertySetValue() {
+			@Override
+			public void invoke(GenericPropertyImpl property, Object[] value, boolean[] shouldSetValue)
+					throws Exception {
+				if (m_internalLocationChange) {
+					return;
+				}
+				if (property.getJavaInfo() == GridDataInfo.this && value[0] instanceof Integer) {
+					String title = property.getTitle();
+					if (title.equals("horizontalSpan")) {
+						int span = (Integer) value[0];
+						if (!isValidHorizontalSpan(span)) {
+							shouldSetValue[0] = false;
+							return;
+						}
+					}
+					if (title.equals("verticalSpan")) {
+						int span = (Integer) value[0];
+						if (!isValidVerticalSpan(span)) {
+							shouldSetValue[0] = false;
+							return;
+						}
+					}
+				}
+			}
+
+			private boolean isValidHorizontalSpan(int span) throws Exception {
+				if (span <= 0) {
+					return false;
+				}
+				IGridInfo grid = getLayout().getGridInfo();
+				Rectangle cells = grid.getComponentCells(getControl());
+				if (cells.x + span > grid.getColumnCount()) {
+					return false;
+				}
+				return true;
+			}
+
+			private boolean isValidVerticalSpan(int span) throws Exception {
+				if (span <= 0) {
+					return false;
+				}
+				IGridInfo grid = getLayout().getGridInfo();
+				Rectangle cells = grid.getComponentCells(getControl());
+				if (cells.y + span > grid.getRowCount()) {
+					return false;
+				}
+				return true;
+			}
+		});
+	}
+
+	private void contributeContextMenu() {
+		addBroadcastListener(new ObjectEventListener() {
+			@Override
+			public void addContextMenu(List<? extends ObjectInfo> objects,
+					ObjectInfo object,
+					IMenuManager manager) throws Exception {
+				if (getParent() == object) {
+					GridDataInfo.this.addContextMenu(manager);
+				}
+			}
+		});
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void refresh_fetch() throws Exception {
+		super.refresh_fetch();
+		getCurrentObjectFields();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if this {@link GridData} has "exclude" flag.
+	 */
+	public boolean getExclude() {
+		return exclude;
+	}
+
+	/**
+	 * Gets values from {@link GridData} object to this {@link GridDataInfo} fields.
+	 */
+	private void getCurrentObjectFields() throws Exception {
+		Object object = getObject();
+		// prepare GridLayout
+		GridLayoutInfo layout = getLayout();
+		if (layout == null) {
+			return;
+		}
+		// location
+		{
+			Object layoutObject = layout.getObject();
+			Object controlObject = getControl().getObject();
+			Point xyPoint = GridLayoutSupport.getXY(layoutObject, controlObject);
+			if (xyPoint != null) {
+				x = xyPoint.x;
+				y = xyPoint.y;
+			}
+		}
+		// span
+		width = ReflectionUtils.getFieldInt(object, "horizontalSpan");
+		height = ReflectionUtils.getFieldInt(object, "verticalSpan");
+		// grab
+		horizontalGrab = ReflectionUtils.getFieldBoolean(object, "grabExcessHorizontalSpace");
+		verticalGrab = ReflectionUtils.getFieldBoolean(object, "grabExcessVerticalSpace");
+		// alignment
+		{
+			horizontalAlignment = ReflectionUtils.getFieldInt(object, "horizontalAlignment");
+			horizontalAlignment = getModernHorizontalAlignment(horizontalAlignment);
+		}
+		{
+			verticalAlignment = ReflectionUtils.getFieldInt(object, "verticalAlignment");
+			verticalAlignment = getModernVerticalAlignment(verticalAlignment);
+		}
+		// hint
+		{
+			widthHint = ReflectionUtils.getFieldInt(object, "widthHint");;
+			heightHint = ReflectionUtils.getFieldInt(object, "heightHint");;
+		}
+		// fix "width", if GridData uses invalid value
+		{
+			int numColumns = layout.getNumColumns();
+			width = Math.max(1, Math.min(width, numColumns));
+		}
+		// exclude
+		exclude = ReflectionUtils.getFieldBoolean(object, "exclude");
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Internal access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private ControlInfo getControl() {
+		return (ControlInfo) getParent();
+	}
+
+	private GridLayoutInfo getLayout() {
+		CompositeInfo composite = (CompositeInfo) getControl().getParent();
+		if (composite == null) {
+			return null;
+		}
+		return (GridLayoutInfo) composite.getLayout();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Location
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public int getX() {
+		return x;
+	}
+
+	@Override
+	public void setX(int x) {
+		this.x = x;
+	}
+
+	@Override
+	public int getY() {
+		return y;
+	}
+
+	@Override
+	public void setY(int y) {
+		this.y = y;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Span
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void setHorizontalSpan(int width) throws Exception {
+		if (this.width != width) {
+			this.width = width;
+			m_internalLocationChange = true;
+			try {
+				getPropertyByTitle("horizontalSpan").setValue(width);
+			} finally {
+				m_internalLocationChange = false;
+			}
+		}
+	}
+
+	@Override
+	public void setVerticalSpan(int height) throws Exception {
+		if (this.height != height) {
+			this.height = height;
+			m_internalLocationChange = true;
+			try {
+				getPropertyByTitle("verticalSpan").setValue(height);
+			} finally {
+				m_internalLocationChange = false;
+			}
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Grab
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean getHorizontalGrab() {
+		return horizontalGrab;
+	}
+
+	@Override
+	public void setHorizontalGrab(boolean grab) throws Exception {
+		horizontalGrab = grab;
+		getPropertyByTitle("grabExcessHorizontalSpace").setValue(grab ? Boolean.TRUE : Boolean.FALSE);
+	}
+
+	@Override
+	public boolean getVerticalGrab() {
+		return verticalGrab;
+	}
+
+	@Override
+	public void setVerticalGrab(boolean grab) throws Exception {
+		verticalGrab = grab;
+		getPropertyByTitle("grabExcessVerticalSpace").setValue(grab ? Boolean.TRUE : Boolean.FALSE);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Alignment
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public int getHorizontalAlignment() {
+		return horizontalAlignment;
+	}
+
+	@Override
+	public void setHorizontalAlignment(int alignment) throws Exception {
+		alignment = getModernHorizontalAlignment(alignment);
+		if (horizontalAlignment != alignment) {
+			horizontalAlignment = alignment;
+			setEnumProperty("horizontalAlignment", horizontalAlignment);
+		}
+	}
+
+	@Override
+	public int getVerticalAlignment() {
+		return verticalAlignment;
+	}
+
+	@Override
+	public void setVerticalAlignment(int alignment) throws Exception {
+		alignment = getModernVerticalAlignment(alignment);
+		if (verticalAlignment != alignment) {
+			verticalAlignment = alignment;
+			setEnumProperty("verticalAlignment", verticalAlignment);
+		}
+	}
+
+	/**
+	 * @return the {@link GridData} horizontal alignment constant from SWT.
+	 */
+	private int getModernHorizontalAlignment(int alignment) {
+		switch (alignment) {
+		case GridData.BEGINNING :
+			return SWT.LEFT;
+		case GridData.CENTER :
+			return SWT.CENTER;
+		case GridData.END :
+		case SWT.END :
+			return SWT.RIGHT;
+		case GridData.FILL :
+			return SWT.FILL;
+		}
+		// as is, and hope that it is correct
+		return alignment;
+	}
+
+	/**
+	 * @return the {@link GridData} vertical alignment constant from SWT.
+	 */
+	private int getModernVerticalAlignment(int alignment) {
+		switch (alignment) {
+		case GridData.BEGINNING :
+			return SWT.TOP;
+		case GridData.CENTER :
+			return SWT.CENTER;
+		case GridData.END :
+		case SWT.END :
+			return SWT.BOTTOM;
+		case GridData.FILL :
+			return SWT.FILL;
+		}
+		// as is, and hope that it is correct
+		return alignment;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Hint
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return value of <code>widthHint</code> property.
+	 */
+	public int getWidthHint() {
+		return widthHint;
+	}
+
+	/**
+	 * @return value of <code>heightHint</code> property.
+	 */
+	public int getHeightHint() {
+		return heightHint;
+	}
+
+	@Override
+	public void setWidthHint(int widthHint) throws Exception {
+		if (this.widthHint != widthHint) {
+			this.widthHint = widthHint;
+			getPropertyByTitle("widthHint").setValue(widthHint);
+		}
+	}
+
+	@Override
+	public void setHeightHint(int heightHint) throws Exception {
+		if (this.heightHint != heightHint) {
+			this.heightHint = heightHint;
+			getPropertyByTitle("heightHint").setValue(heightHint);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets value for {@link Property} with {@link StaticFieldPropertyEditor}.
+	 */
+	private void setEnumProperty(String propertyTitle, int value) throws Exception {
+		Property property = getPropertyByTitle(propertyTitle);
+		setEnumProperty(property, value);
+	}
+
+	/**
+	 * Sets value for {@link Property} with {@link StaticFieldPropertyEditor}.
+	 */
+	private static void setEnumProperty(Property property, int value) throws Exception {
+		StaticFieldPropertyEditor propertyEditor = (StaticFieldPropertyEditor) property.getEditor();
+		propertyEditor.setValue(property, value);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Images
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Image getSmallAlignmentImage(boolean horizontal) {
+		if (horizontal) {
+			switch (horizontalAlignment) {
+			case SWT.LEFT :
+				return GridImages.getImage("h/left.gif");
+			case SWT.CENTER :
+				return GridImages.getImage("h/center.gif");
+			case SWT.RIGHT :
+				return GridImages.getImage("h/right.gif");
+			case SWT.FILL :
+				return GridImages.getImage("h/fill.gif");
+			default :
+				return null;
+			}
+		} else {
+			switch (verticalAlignment) {
+			case SWT.TOP :
+				return GridImages.getImage("v/top.gif");
+			case SWT.CENTER :
+				return GridImages.getImage("v/center.gif");
+			case SWT.BOTTOM :
+				return GridImages.getImage("v/bottom.gif");
+			case SWT.FILL :
+				return GridImages.getImage("v/fill.gif");
+			default :
+				return null;
+			}
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Context menu
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds items to the context {@link IMenuManager}.
+	 */
+	public void addContextMenu(IMenuManager manager) {
+		// horizontal
+		{
+			IMenuManager manager2 = new MenuManager(ModelMessages.GridDataInfo_horizontalAlignment);
+			manager.appendToGroup(IContextMenuConstants.GROUP_TOP, manager2);
+			//
+			manager2.add(new SetGrabAction(this,
+					ModelMessages.GridDataInfo_grabExcessSpace,
+					"grow.gif",
+					true));
+			if (getWidthHint() != SWT.DEFAULT) {
+				manager2.add(new ClearHintAction(this, ModelMessages.GridDataInfo_clearHint, true));
+			}
+			manager2.add(new Separator());
+			//
+			fillHorizontalAlignmentMenu(manager2);
+		}
+		// vertical
+		{
+			IMenuManager manager2 = new MenuManager(ModelMessages.GridDataInfo_verticalAlignment);
+			manager.appendToGroup(IContextMenuConstants.GROUP_TOP, manager2);
+			//
+			manager2.add(new SetGrabAction(this,
+					ModelMessages.GridDataInfo_grabExcessSpace,
+					"grow.gif",
+					false));
+			if (getHeightHint() != SWT.DEFAULT) {
+				manager2.add(new ClearHintAction(this, ModelMessages.GridDataInfo_clearHint, false));
+			}
+			manager2.add(new Separator());
+			//
+			fillVerticalAlignmentMenu(manager2);
+		}
+	}
+
+	@Override
+	public void fillHorizontalAlignmentMenu(IMenuManager manager) {
+		manager.add(new SetAlignmentAction(this,
+				ModelMessages.GridDataInfo_horLeft,
+				"left.gif",
+				true,
+				SWT.LEFT));
+		manager.add(new SetAlignmentAction(this,
+				ModelMessages.GridDataInfo_horCenter,
+				"center.gif",
+				true,
+				SWT.CENTER));
+		manager.add(new SetAlignmentAction(this,
+				ModelMessages.GridDataInfo_horRight,
+				"right.gif",
+				true,
+				SWT.RIGHT));
+		manager.add(new SetAlignmentAction(this,
+				ModelMessages.GridDataInfo_horFill,
+				"fill.gif",
+				true,
+				SWT.FILL));
+	}
+
+	@Override
+	public void fillVerticalAlignmentMenu(IMenuManager manager) {
+		manager.add(new SetAlignmentAction(this,
+				ModelMessages.GridDataInfo_verTop,
+				"top.gif",
+				false,
+				SWT.TOP));
+		manager.add(new SetAlignmentAction(this,
+				ModelMessages.GridDataInfo_verCenter,
+				"center.gif",
+				false,
+				SWT.CENTER));
+		manager.add(new SetAlignmentAction(this,
+				ModelMessages.GridDataInfo_verBottom,
+				"bottom.gif",
+				false,
+				SWT.BOTTOM));
+		manager.add(new SetAlignmentAction(this,
+				ModelMessages.GridDataInfo_verFill,
+				"fill.gif",
+				false,
+				SWT.FILL));
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/grid/GridDimensionInfo.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/grid/GridDimensionInfo.java
index c480a4f54..a37bea1bf 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/grid/GridDimensionInfo.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/grid/GridDimensionInfo.java
@@ -27,218 +27,218 @@
  * @coverage swt.model.layout
  */
 public abstract class GridDimensionInfo<C extends IControlInfo> {
-  protected final IGridLayoutInfo<C> m_layout;
-  protected int m_index;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public GridDimensionInfo(IGridLayoutInfo<C> layout) {
-    m_layout = layout;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the index of this {@link GridDimensionInfo}.
-   */
-  public final int getIndex() {
-    return m_index;
-  }
-
-  /**
-   * Sets the index of this {@link GridDimensionInfo}, cached for speed.
-   */
-  public final void setIndex(int index) {
-    m_index = index;
-  }
-
-  /**
-   * @return the string to display.
-   */
-  public final String getTitle() throws Exception {
-    String tooltip = "";
-    Integer alignmentValue = getAlignment();
-    if (alignmentValue != null) {
-      tooltip = getAlignmentTitle(alignmentValue.intValue());
-    }
-    if (getGrab()) {
-      if (tooltip.length() != 0) {
-        tooltip += ", ";
-      }
-      tooltip += "grab";
-    }
-    return tooltip;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Grab
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the <code>grab</code> state for given {@link IGridDataInfo}.
-   */
-  protected abstract boolean getGrab(IGridDataInfo gridData);
-
-  /**
-   * Sets the <code>grab</code> state for given {@link IGridDataInfo}.
-   */
-  protected abstract void setGrab(IGridDataInfo gridData, boolean grab) throws Exception;
-
-  /**
-   * @return <code>true</code>, if at least one control has grab.
-   */
-  public final boolean getGrab() {
-    final boolean result[] = new boolean[]{false};
-    processControls(new IGridDataProcessor<C>() {
-      @Override
-      public void process(C control, IGridDataInfo gridData) throws Exception {
-        result[0] |= getGrab(gridData);
-      }
-    });
-    return result[0];
-  }
-
-  /**
-   * Sets the <code>grab</code> state for all controls that start in this dimension.
-   */
-  public final void setGrab(final boolean grab) {
-    processControls(new IGridDataProcessor<C>() {
-      @Override
-      public void process(C control, IGridDataInfo gridData) throws Exception {
-        setGrab(gridData, grab);
-      }
-    });
-  }
-
-  /**
-   * Flips the <code>grab</code> state.
-   */
-  public final void flipGrab() {
-    setGrab(!getGrab());
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Alignment
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the title of given alignment from {@link GridData}.
-   */
-  protected abstract String getAlignmentTitle(int alignment);
-
-  /**
-   * @return the <code>alignment</code> for given {@link IGridDataInfo}.
-   */
-  protected abstract int getAlignment(IGridDataInfo gridData);
-
-  /**
-   * Sets the <code>alignment</code> for given {@link IGridDataInfo}.
-   */
-  protected abstract void setAlignment(IGridDataInfo gridData, int alignment) throws Exception;
-
-  /**
-   * @return common alignment, if it is same for all controls, or <code>null</code>.
-   */
-  public final Integer getAlignment() {
-    final boolean first[] = new boolean[]{true};
-    final Integer result[] = new Integer[]{null};
-    processControls(new IGridDataProcessor<C>() {
-      @Override
-      public void process(C control, IGridDataInfo gridData) throws Exception {
-        int alignment = getAlignment(gridData);
-        if (first[0]) {
-          result[0] = alignment;
-        } else if (result[0] != null) {
-          if (result[0].intValue() != alignment) {
-            result[0] = null;
-          }
-        }
-        first[0] = false;
-      }
-    });
-    return result[0];
-  }
-
-  /**
-   * Sets alignment for all controls that start in this dimension.
-   */
-  public final void setAlignment(final int alignment) {
-    processControls(new IGridDataProcessor<C>() {
-      @Override
-      public void process(C control, IGridDataInfo gridData) throws Exception {
-        setAlignment(gridData, alignment);
-      }
-    });
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Delete
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Deletes this dimension.
-   */
-  public abstract void delete() throws Exception;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Processor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Processor for processing {@link IGridDataInfo} for each {@link IControlInfo}.
-   */
-  protected interface IGridDataProcessor<C extends IControlInfo> {
-    void process(C control, IGridDataInfo gridData) throws Exception;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Processing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Processes {@link IGridDataInfo} for each {@link IControlInfo} using given
-   * {@link IGridDataProcessor}.
-   */
-  private void processControls(final IGridDataProcessor<C> processor) {
-    ExecutionUtils.runRethrow(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        List<C> toProcess = getControlsToProcess();
-        for (C control : toProcess) {
-          IGridDataInfo gridData = m_layout.getGridData2(control);
-          processor.process(control, gridData);
-        }
-      }
-
-      private List<C> getControlsToProcess() {
-        List<C> toProcess = Lists.newArrayList();
-        for (C control : m_layout.getControls()) {
-          if (!m_layout.isFiller(control)) {
-            IGridDataInfo gridData = m_layout.getGridData2(control);
-            if (shouldProcessThisControl(gridData)) {
-              toProcess.add(control);
-            }
-          }
-        }
-        return toProcess;
-      }
-    });
-  }
-
-  /**
-   * @return <code>true</code> if {@link IControlInfo} with given {@link IGridDataInfo} should be
-   *         processed using {@link #processControls(GridDimensionInfo.IGridDataProcessor)}.
-   */
-  protected abstract boolean shouldProcessThisControl(IGridDataInfo gridData);
+	protected final IGridLayoutInfo<C> m_layout;
+	protected int m_index;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public GridDimensionInfo(IGridLayoutInfo<C> layout) {
+		m_layout = layout;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the index of this {@link GridDimensionInfo}.
+	 */
+	public final int getIndex() {
+		return m_index;
+	}
+
+	/**
+	 * Sets the index of this {@link GridDimensionInfo}, cached for speed.
+	 */
+	public final void setIndex(int index) {
+		m_index = index;
+	}
+
+	/**
+	 * @return the string to display.
+	 */
+	public final String getTitle() throws Exception {
+		String tooltip = "";
+		Integer alignmentValue = getAlignment();
+		if (alignmentValue != null) {
+			tooltip = getAlignmentTitle(alignmentValue.intValue());
+		}
+		if (getGrab()) {
+			if (tooltip.length() != 0) {
+				tooltip += ", ";
+			}
+			tooltip += "grab";
+		}
+		return tooltip;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Grab
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the <code>grab</code> state for given {@link IGridDataInfo}.
+	 */
+	protected abstract boolean getGrab(IGridDataInfo gridData);
+
+	/**
+	 * Sets the <code>grab</code> state for given {@link IGridDataInfo}.
+	 */
+	protected abstract void setGrab(IGridDataInfo gridData, boolean grab) throws Exception;
+
+	/**
+	 * @return <code>true</code>, if at least one control has grab.
+	 */
+	public final boolean getGrab() {
+		final boolean result[] = new boolean[]{false};
+		processControls(new IGridDataProcessor<C>() {
+			@Override
+			public void process(C control, IGridDataInfo gridData) throws Exception {
+				result[0] |= getGrab(gridData);
+			}
+		});
+		return result[0];
+	}
+
+	/**
+	 * Sets the <code>grab</code> state for all controls that start in this dimension.
+	 */
+	public final void setGrab(final boolean grab) {
+		processControls(new IGridDataProcessor<C>() {
+			@Override
+			public void process(C control, IGridDataInfo gridData) throws Exception {
+				setGrab(gridData, grab);
+			}
+		});
+	}
+
+	/**
+	 * Flips the <code>grab</code> state.
+	 */
+	public final void flipGrab() {
+		setGrab(!getGrab());
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Alignment
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the title of given alignment from {@link GridData}.
+	 */
+	protected abstract String getAlignmentTitle(int alignment);
+
+	/**
+	 * @return the <code>alignment</code> for given {@link IGridDataInfo}.
+	 */
+	protected abstract int getAlignment(IGridDataInfo gridData);
+
+	/**
+	 * Sets the <code>alignment</code> for given {@link IGridDataInfo}.
+	 */
+	protected abstract void setAlignment(IGridDataInfo gridData, int alignment) throws Exception;
+
+	/**
+	 * @return common alignment, if it is same for all controls, or <code>null</code>.
+	 */
+	public final Integer getAlignment() {
+		final boolean first[] = new boolean[]{true};
+		final Integer result[] = new Integer[]{null};
+		processControls(new IGridDataProcessor<C>() {
+			@Override
+			public void process(C control, IGridDataInfo gridData) throws Exception {
+				int alignment = getAlignment(gridData);
+				if (first[0]) {
+					result[0] = alignment;
+				} else if (result[0] != null) {
+					if (result[0].intValue() != alignment) {
+						result[0] = null;
+					}
+				}
+				first[0] = false;
+			}
+		});
+		return result[0];
+	}
+
+	/**
+	 * Sets alignment for all controls that start in this dimension.
+	 */
+	public final void setAlignment(final int alignment) {
+		processControls(new IGridDataProcessor<C>() {
+			@Override
+			public void process(C control, IGridDataInfo gridData) throws Exception {
+				setAlignment(gridData, alignment);
+			}
+		});
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Delete
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Deletes this dimension.
+	 */
+	public abstract void delete() throws Exception;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Processor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Processor for processing {@link IGridDataInfo} for each {@link IControlInfo}.
+	 */
+	protected interface IGridDataProcessor<C extends IControlInfo> {
+		void process(C control, IGridDataInfo gridData) throws Exception;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Processing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Processes {@link IGridDataInfo} for each {@link IControlInfo} using given
+	 * {@link IGridDataProcessor}.
+	 */
+	private void processControls(final IGridDataProcessor<C> processor) {
+		ExecutionUtils.runRethrow(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				List<C> toProcess = getControlsToProcess();
+				for (C control : toProcess) {
+					IGridDataInfo gridData = m_layout.getGridData2(control);
+					processor.process(control, gridData);
+				}
+			}
+
+			private List<C> getControlsToProcess() {
+				List<C> toProcess = Lists.newArrayList();
+				for (C control : m_layout.getControls()) {
+					if (!m_layout.isFiller(control)) {
+						IGridDataInfo gridData = m_layout.getGridData2(control);
+						if (shouldProcessThisControl(gridData)) {
+							toProcess.add(control);
+						}
+					}
+				}
+				return toProcess;
+			}
+		});
+	}
+
+	/**
+	 * @return <code>true</code> if {@link IControlInfo} with given {@link IGridDataInfo} should be
+	 *         processed using {@link #processControls(GridDimensionInfo.IGridDataProcessor)}.
+	 */
+	protected abstract boolean shouldProcessThisControl(IGridDataInfo gridData);
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/grid/GridImages.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/grid/GridImages.java
index 5229e264d..faf04d0f1 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/grid/GridImages.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/grid/GridImages.java
@@ -23,17 +23,17 @@
  * @coverage swt.model.layout
  */
 public final class GridImages {
-  /**
-   * @return the {@link Image} for {@link GridLayout}.
-   */
-  public static Image getImage(String path) {
-    return Activator.getImage("info/layout/GridLayout/" + path);
-  }
+	/**
+	 * @return the {@link Image} for {@link GridLayout}.
+	 */
+	public static Image getImage(String path) {
+		return Activator.getImage("info/layout/GridLayout/" + path);
+	}
 
-  /**
-   * @return the {@link ImageDescriptor} for {@link GridLayout}.
-   */
-  public static ImageDescriptor getImageDescriptor(String path) {
-    return Activator.getImageDescriptor("info/layout/GridLayout/" + path);
-  }
+	/**
+	 * @return the {@link ImageDescriptor} for {@link GridLayout}.
+	 */
+	public static ImageDescriptor getImageDescriptor(String path) {
+		return Activator.getImageDescriptor("info/layout/GridLayout/" + path);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/grid/GridLayoutAssistant.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/grid/GridLayoutAssistant.java
index 2becee544..26a43c0cb 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/grid/GridLayoutAssistant.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/grid/GridLayoutAssistant.java
@@ -28,28 +28,28 @@
  * @coverage swt.model.layout
  */
 public final class GridLayoutAssistant extends LayoutAssistantSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public GridLayoutAssistant(ILayoutInfo<?> layout) {
-    super(layout);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public GridLayoutAssistant(ILayoutInfo<?> layout) {
+		super(layout);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Pages
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected AbstractAssistantPage createLayoutPage(Composite parent) {
-    return new GridLayoutAssistantPage(parent, m_layout);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Pages
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected AbstractAssistantPage createLayoutPage(Composite parent) {
+		return new GridLayoutAssistantPage(parent, m_layout);
+	}
 
-  @Override
-  protected AbstractAssistantPage createConstraintsPage(Composite parent, List<ObjectInfo> objects) {
-    List<ILayoutDataInfo> dataList = getDataList(objects);
-    return new GridLayoutDataAssistantPage(parent, dataList);
-  }
+	@Override
+	protected AbstractAssistantPage createConstraintsPage(Composite parent, List<ObjectInfo> objects) {
+		List<ILayoutDataInfo> dataList = getDataList(objects);
+		return new GridLayoutDataAssistantPage(parent, dataList);
+	}
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/grid/GridLayoutAssistantPage.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/grid/GridLayoutAssistantPage.java
index 4aa65659b..3913f42cf 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/grid/GridLayoutAssistantPage.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/grid/GridLayoutAssistantPage.java
@@ -27,75 +27,75 @@
  * @coverage swt.assistant
  */
 public final class GridLayoutAssistantPage extends AbstractAssistantPage {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public GridLayoutAssistantPage(Composite parent, Object selection) {
-    super(parent, selection);
-    GridLayoutFactory.create(this).spacingV(1).noMargins();
-    {
-      Composite topComposite = new Composite(this, SWT.NONE);
-      GridLayoutFactory.create(topComposite).columns(4);
-      GridDataFactory.create(topComposite).fillH().grabH();
-      // columns properties
-      {
-        addIntegerProperty(
-            topComposite,
-            "numColumns",
-            ModelMessages.GridLayoutAssistantPage_numColumns,
-            1);
-        new Label(topComposite, SWT.NONE).setText(" ");
-        addBooleanProperty(
-            topComposite,
-            "makeColumnsEqualWidth",
-            ModelMessages.GridLayoutAssistantPage_makeColumnsEqual);
-      }
-    }
-    {
-      Composite groupComposite = new Composite(this, SWT.NONE);
-      GridLayoutFactory.create(groupComposite).columns(2);
-      GridDataFactory.create(groupComposite).fill().grab();
-      // margin for sides
-      {
-        Group group =
-            addIntegerProperties(
-                groupComposite,
-                ModelMessages.GridLayoutAssistantPage_sideMarginsGroup,
-                new String[][]{
-                    new String[]{"marginLeft", ModelMessages.GridLayoutAssistantPage_marginLeft},
-                    new String[]{"marginTop", ModelMessages.GridLayoutAssistantPage_marginTop},
-                    new String[]{"marginRight", ModelMessages.GridLayoutAssistantPage_marginRight},
-                    new String[]{"marginBottom", ModelMessages.GridLayoutAssistantPage_marginBottom}});
-        GridDataFactory.create(group).fillV().spanV(2);
-      }
-      // margins
-      {
-        Group group =
-            addIntegerProperties(
-                groupComposite,
-                ModelMessages.GridLayoutAssistantPage_marginsGroup,
-                new String[][]{
-                    new String[]{"marginWidth", ModelMessages.GridLayoutAssistantPage_marginWidth},
-                    new String[]{"marginHeight", ModelMessages.GridLayoutAssistantPage_marginHeight}});
-        GridDataFactory.create(group).fillH().grabH();
-      }
-      // spacing
-      {
-        Group group =
-            addIntegerProperties(
-                groupComposite,
-                ModelMessages.GridLayoutAssistantPage_spacingGroup,
-                new String[][]{
-                    new String[]{
-                        "horizontalSpacing",
-                        ModelMessages.GridLayoutAssistantPage_spacingHorizontal},
-                    new String[]{
-                        "verticalSpacing",
-                        ModelMessages.GridLayoutAssistantPage_spacingVertical}});
-        GridDataFactory.create(group).fillH().grabH();
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public GridLayoutAssistantPage(Composite parent, Object selection) {
+		super(parent, selection);
+		GridLayoutFactory.create(this).spacingV(1).noMargins();
+		{
+			Composite topComposite = new Composite(this, SWT.NONE);
+			GridLayoutFactory.create(topComposite).columns(4);
+			GridDataFactory.create(topComposite).fillH().grabH();
+			// columns properties
+			{
+				addIntegerProperty(
+						topComposite,
+						"numColumns",
+						ModelMessages.GridLayoutAssistantPage_numColumns,
+						1);
+				new Label(topComposite, SWT.NONE).setText(" ");
+				addBooleanProperty(
+						topComposite,
+						"makeColumnsEqualWidth",
+						ModelMessages.GridLayoutAssistantPage_makeColumnsEqual);
+			}
+		}
+		{
+			Composite groupComposite = new Composite(this, SWT.NONE);
+			GridLayoutFactory.create(groupComposite).columns(2);
+			GridDataFactory.create(groupComposite).fill().grab();
+			// margin for sides
+			{
+				Group group =
+						addIntegerProperties(
+								groupComposite,
+								ModelMessages.GridLayoutAssistantPage_sideMarginsGroup,
+								new String[][]{
+									new String[]{"marginLeft", ModelMessages.GridLayoutAssistantPage_marginLeft},
+									new String[]{"marginTop", ModelMessages.GridLayoutAssistantPage_marginTop},
+									new String[]{"marginRight", ModelMessages.GridLayoutAssistantPage_marginRight},
+									new String[]{"marginBottom", ModelMessages.GridLayoutAssistantPage_marginBottom}});
+				GridDataFactory.create(group).fillV().spanV(2);
+			}
+			// margins
+			{
+				Group group =
+						addIntegerProperties(
+								groupComposite,
+								ModelMessages.GridLayoutAssistantPage_marginsGroup,
+								new String[][]{
+									new String[]{"marginWidth", ModelMessages.GridLayoutAssistantPage_marginWidth},
+									new String[]{"marginHeight", ModelMessages.GridLayoutAssistantPage_marginHeight}});
+				GridDataFactory.create(group).fillH().grabH();
+			}
+			// spacing
+			{
+				Group group =
+						addIntegerProperties(
+								groupComposite,
+								ModelMessages.GridLayoutAssistantPage_spacingGroup,
+								new String[][]{
+									new String[]{
+											"horizontalSpacing",
+											ModelMessages.GridLayoutAssistantPage_spacingHorizontal},
+									new String[]{
+											"verticalSpacing",
+											ModelMessages.GridLayoutAssistantPage_spacingVertical}});
+				GridDataFactory.create(group).fillH().grabH();
+			}
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/grid/GridLayoutConverter.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/grid/GridLayoutConverter.java
index 1f458d1ce..1e6570dba 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/grid/GridLayoutConverter.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/grid/GridLayoutConverter.java
@@ -33,166 +33,166 @@
  * @coverage swt.model.layout
  */
 public final class GridLayoutConverter {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private GridLayoutConverter() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private GridLayoutConverter() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Conversion
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @SuppressWarnings("unchecked")
-  public static <T extends IControlInfo> void convert(ICompositeInfo parent,
-      IGridLayoutInfo<T> layout) throws Exception {
-    // prepare columns and rows and distribute controls in them
-    List<ComponentGroup> columns =
-        GridConvertionHelper.buildGroups(parent.getChildrenControls(), true);
-    List<ComponentGroup> rows =
-        GridConvertionHelper.buildGroups(parent.getChildrenControls(), false);
-    // sort components in columns and rows
-    GridConvertionHelper.sortGroupsByTranspose(columns, rows);
-    GridConvertionHelper.sortGroupsByTranspose(rows, columns);
-    // ensure that columns and rows are sorted by start coordinates
-    GridConvertionHelper.sortGroups(columns);
-    GridConvertionHelper.sortGroups(rows);
-    // calculate begin/end for each column/row
-    GridConvertionHelper.updateBoundsGaps(columns, false);
-    GridConvertionHelper.updateBoundsGaps(rows, false);
-    // reorder controls
-    reorderControls(parent, rows);
-    // set cell for controls
-    int numColumns = columns.size();
-    List<IControlInfo> appliedControls = Lists.newArrayList();
-    for (ComponentGroup column : columns) {
-      for (ComponentInGroup component : column.getComponents()) {
-        T control = (T) component.getComponent();
-        if (appliedControls.contains(control)) {
-          continue;
-        }
-        // layout data
-        GeneralLayoutData generalLayoutData =
-            GeneralLayoutData.getFromInfoEx(control.getUnderlyingModel());
-        IGridDataInfo gridData = layout.getGridData2(control);
-        // set cell
-        Rectangle cells = getCells(component, generalLayoutData, columns, rows);
-        gridData.setX(cells.x);
-        gridData.setY(cells.y);
-        gridData.setHorizontalSpan(cells.width);
-        gridData.setVerticalSpan(cells.height);
-        // apply general
-        applyGeneralLayoutData(gridData, generalLayoutData);
-        // update
-        appliedControls.add(control);
-        numColumns = Math.max(numColumns, cells.x + cells.width);
-      }
-    }
-    // set "numColumns"
-    if (numColumns > 0) {
-      layout.getPropertyByTitle("numColumns").setValue(numColumns);
-    }
-    // add fillers
-    layout.fixGrid();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Conversion
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@SuppressWarnings("unchecked")
+	public static <T extends IControlInfo> void convert(ICompositeInfo parent,
+			IGridLayoutInfo<T> layout) throws Exception {
+		// prepare columns and rows and distribute controls in them
+		List<ComponentGroup> columns =
+				GridConvertionHelper.buildGroups(parent.getChildrenControls(), true);
+		List<ComponentGroup> rows =
+				GridConvertionHelper.buildGroups(parent.getChildrenControls(), false);
+		// sort components in columns and rows
+		GridConvertionHelper.sortGroupsByTranspose(columns, rows);
+		GridConvertionHelper.sortGroupsByTranspose(rows, columns);
+		// ensure that columns and rows are sorted by start coordinates
+		GridConvertionHelper.sortGroups(columns);
+		GridConvertionHelper.sortGroups(rows);
+		// calculate begin/end for each column/row
+		GridConvertionHelper.updateBoundsGaps(columns, false);
+		GridConvertionHelper.updateBoundsGaps(rows, false);
+		// reorder controls
+		reorderControls(parent, rows);
+		// set cell for controls
+		int numColumns = columns.size();
+		List<IControlInfo> appliedControls = Lists.newArrayList();
+		for (ComponentGroup column : columns) {
+			for (ComponentInGroup component : column.getComponents()) {
+				T control = (T) component.getComponent();
+				if (appliedControls.contains(control)) {
+					continue;
+				}
+				// layout data
+				GeneralLayoutData generalLayoutData =
+						GeneralLayoutData.getFromInfoEx(control.getUnderlyingModel());
+				IGridDataInfo gridData = layout.getGridData2(control);
+				// set cell
+				Rectangle cells = getCells(component, generalLayoutData, columns, rows);
+				gridData.setX(cells.x);
+				gridData.setY(cells.y);
+				gridData.setHorizontalSpan(cells.width);
+				gridData.setVerticalSpan(cells.height);
+				// apply general
+				applyGeneralLayoutData(gridData, generalLayoutData);
+				// update
+				appliedControls.add(control);
+				numColumns = Math.max(numColumns, cells.x + cells.width);
+			}
+		}
+		// set "numColumns"
+		if (numColumns > 0) {
+			layout.getPropertyByTitle("numColumns").setValue(numColumns);
+		}
+		// add fillers
+		layout.fixGrid();
+	}
 
-  private static Rectangle getCells(ComponentInGroup component,
-      GeneralLayoutData generalLayoutData,
-      List<ComponentGroup> columns,
-      List<ComponentGroup> rows) {
-    int x = -1;
-    int y = -1;
-    int w = 1;
-    int h = 1;
-    // prepare begin/end column/row
-    ComponentGroup beginColumn = GridConvertionHelper.getBeginForComponent(columns, component);
-    ComponentGroup endColumn = GridConvertionHelper.getEndForComponent(columns, component);
-    ComponentGroup beginRow = GridConvertionHelper.getBeginForComponent(rows, component);
-    ComponentGroup endRow = GridConvertionHelper.getEndForComponent(rows, component);
-    // prepare cell
-    x = columns.indexOf(beginColumn);
-    y = rows.indexOf(beginRow);
-    w = 1 + columns.indexOf(endColumn) - x;
-    h = 1 + rows.indexOf(endRow) - y;
-    // use remembered values
-    {
-      if (generalLayoutData.gridX != null) {
-        x = generalLayoutData.gridX;
-        w = 1;
-      }
-      if (generalLayoutData.gridY != null) {
-        y = generalLayoutData.gridY;
-        h = 1;
-      }
-      if (generalLayoutData.spanX != null) {
-        w = generalLayoutData.spanX;
-      }
-      if (generalLayoutData.spanY != null) {
-        h = generalLayoutData.spanY;
-      }
-    }
-    //
-    return new Rectangle(x, y, w, h);
-  }
+	private static Rectangle getCells(ComponentInGroup component,
+			GeneralLayoutData generalLayoutData,
+			List<ComponentGroup> columns,
+			List<ComponentGroup> rows) {
+		int x = -1;
+		int y = -1;
+		int w = 1;
+		int h = 1;
+		// prepare begin/end column/row
+		ComponentGroup beginColumn = GridConvertionHelper.getBeginForComponent(columns, component);
+		ComponentGroup endColumn = GridConvertionHelper.getEndForComponent(columns, component);
+		ComponentGroup beginRow = GridConvertionHelper.getBeginForComponent(rows, component);
+		ComponentGroup endRow = GridConvertionHelper.getEndForComponent(rows, component);
+		// prepare cell
+		x = columns.indexOf(beginColumn);
+		y = rows.indexOf(beginRow);
+		w = 1 + columns.indexOf(endColumn) - x;
+		h = 1 + rows.indexOf(endRow) - y;
+		// use remembered values
+		{
+			if (generalLayoutData.gridX != null) {
+				x = generalLayoutData.gridX;
+				w = 1;
+			}
+			if (generalLayoutData.gridY != null) {
+				y = generalLayoutData.gridY;
+				h = 1;
+			}
+			if (generalLayoutData.spanX != null) {
+				w = generalLayoutData.spanX;
+			}
+			if (generalLayoutData.spanY != null) {
+				h = generalLayoutData.spanY;
+			}
+		}
+		//
+		return new Rectangle(x, y, w, h);
+	}
 
-  private static void applyGeneralLayoutData(IGridDataInfo gridData,
-      GeneralLayoutData generalLayoutData) throws Exception {
-    // set grab
-    if (generalLayoutData.horizontalGrab != null) {
-      gridData.setHorizontalGrab(generalLayoutData.horizontalGrab);
-    }
-    if (generalLayoutData.verticalGrab != null) {
-      gridData.setVerticalGrab(generalLayoutData.verticalGrab);
-    }
-    // set alignments
-    Integer horizontalAlignmentValue =
-        GeneralLayoutData.getRealValue(
-            GridLayoutInfo.m_horizontalAlignmentMap,
-            generalLayoutData.horizontalAlignment);
-    if (horizontalAlignmentValue != null) {
-      gridData.setHorizontalAlignment(horizontalAlignmentValue);
-    }
-    Integer verticalAlignmentValue =
-        GeneralLayoutData.getRealValue(
-            GridLayoutInfo.m_verticalAlignmentMap,
-            generalLayoutData.verticalAlignment);
-    if (verticalAlignmentValue != null) {
-      gridData.setVerticalAlignment(verticalAlignmentValue);
-    }
-  }
+	private static void applyGeneralLayoutData(IGridDataInfo gridData,
+			GeneralLayoutData generalLayoutData) throws Exception {
+		// set grab
+		if (generalLayoutData.horizontalGrab != null) {
+			gridData.setHorizontalGrab(generalLayoutData.horizontalGrab);
+		}
+		if (generalLayoutData.verticalGrab != null) {
+			gridData.setVerticalGrab(generalLayoutData.verticalGrab);
+		}
+		// set alignments
+		Integer horizontalAlignmentValue =
+				GeneralLayoutData.getRealValue(
+						GridLayoutInfo.m_horizontalAlignmentMap,
+						generalLayoutData.horizontalAlignment);
+		if (horizontalAlignmentValue != null) {
+			gridData.setHorizontalAlignment(horizontalAlignmentValue);
+		}
+		Integer verticalAlignmentValue =
+				GeneralLayoutData.getRealValue(
+						GridLayoutInfo.m_verticalAlignmentMap,
+						generalLayoutData.verticalAlignment);
+		if (verticalAlignmentValue != null) {
+			gridData.setVerticalAlignment(verticalAlignmentValue);
+		}
+	}
 
-  private static void reorderControls(ICompositeInfo parent, List<ComponentGroup> rows)
-      throws Exception {
-    // prepare list of controls in reversed order
-    List<IControlInfo> reversedControls = Lists.newArrayList();
-    for (ComponentGroup row : rows) {
-      for (ComponentInGroup componentInGroup : row.getComponents()) {
-        IControlInfo control = (IControlInfo) componentInGroup.getComponent();
-        reversedControls.add(0, control);
-      }
-    }
-    // do reorder
-    IControlInfo nextControl = null;
-    for (IControlInfo control : reversedControls) {
-      if (nextControl != null) {
-        if (!isAlreadyRightOrder(control, nextControl)) {
-          GlobalState.getOrderProcessor().move(control, nextControl);
-        }
-      }
-      nextControl = control;
-    }
-  }
+	private static void reorderControls(ICompositeInfo parent, List<ComponentGroup> rows)
+			throws Exception {
+		// prepare list of controls in reversed order
+		List<IControlInfo> reversedControls = Lists.newArrayList();
+		for (ComponentGroup row : rows) {
+			for (ComponentInGroup componentInGroup : row.getComponents()) {
+				IControlInfo control = (IControlInfo) componentInGroup.getComponent();
+				reversedControls.add(0, control);
+			}
+		}
+		// do reorder
+		IControlInfo nextControl = null;
+		for (IControlInfo control : reversedControls) {
+			if (nextControl != null) {
+				if (!isAlreadyRightOrder(control, nextControl)) {
+					GlobalState.getOrderProcessor().move(control, nextControl);
+				}
+			}
+			nextControl = control;
+		}
+	}
 
-  /**
-   * @return <code>true</code> if "control" is directly before "nextControl", so no need to move
-   *         "control".
-   */
-  private static boolean isAlreadyRightOrder(IControlInfo control, IControlInfo nextControl) {
-    ICompositeInfo composite = (ICompositeInfo) control.getParent();
-    List<? extends IControlInfo> controls = composite.getChildrenControls();
-    return GenericsUtils.getNextOrNull(controls, control) == nextControl;
-  }
+	/**
+	 * @return <code>true</code> if "control" is directly before "nextControl", so no need to move
+	 *         "control".
+	 */
+	private static boolean isAlreadyRightOrder(IControlInfo control, IControlInfo nextControl) {
+		ICompositeInfo composite = (ICompositeInfo) control.getParent();
+		List<? extends IControlInfo> controls = composite.getChildrenControls();
+		return GenericsUtils.getNextOrNull(controls, control) == nextControl;
+	}
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/grid/GridLayoutDataAssistantPage.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/grid/GridLayoutDataAssistantPage.java
index 2b56d2869..5aa44397f 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/grid/GridLayoutDataAssistantPage.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/grid/GridLayoutDataAssistantPage.java
@@ -26,105 +26,105 @@
  * @coverage swt.assistant
  */
 public final class GridLayoutDataAssistantPage extends AbstractAssistantPage {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public GridLayoutDataAssistantPage(Composite parent, Object selection) {
-    super(parent, selection);
-    GridLayoutFactory.create(this).columns(3);
-    {
-      Group composite = new Group(this, SWT.NONE);
-      composite.setText(ModelMessages.GridLayoutDataAssistantPage_alignmentGroup);
-      GridLayoutFactory.create(composite).columns(2);
-      GridDataFactory.create(composite).fill().grab().spanH(2).spanV(2);
-      // Horizontal alignment & grab
-      {
-        Group horizontalOrientationGroup =
-            addChoiceProperty(
-                composite,
-                "horizontalAlignment",
-                ModelMessages.GridLayoutDataAssistantPage_horizontalGroup,
-                new Object[][]{
-                    new Object[]{ModelMessages.GridLayoutDataAssistantPage_horLeft, SWT.LEFT},
-                    new Object[]{ModelMessages.GridLayoutDataAssistantPage_horCenter, SWT.CENTER},
-                    new Object[]{ModelMessages.GridLayoutDataAssistantPage_horRight, SWT.RIGHT},
-                    new Object[]{ModelMessages.GridLayoutDataAssistantPage_horFill, SWT.FILL}});
-        //
-        addBooleanProperty(
-            horizontalOrientationGroup,
-            "grabExcessHorizontalSpace",
-            ModelMessages.GridLayoutDataAssistantPage_grab);
-        GridDataFactory.create(horizontalOrientationGroup).alignHC().fillV().grab();
-      }
-      // Vertical alignment & grab
-      {
-        Group verticalOrientationGroup =
-            addChoiceProperty(
-                composite,
-                "verticalAlignment",
-                ModelMessages.GridLayoutDataAssistantPage_verticalGroup,
-                new Object[][]{
-                    new Object[]{ModelMessages.GridLayoutDataAssistantPage_verTop, SWT.TOP},
-                    new Object[]{ModelMessages.GridLayoutDataAssistantPage_verCenter, SWT.CENTER},
-                    new Object[]{ModelMessages.GridLayoutDataAssistantPage_verBottom, SWT.BOTTOM},
-                    new Object[]{ModelMessages.GridLayoutDataAssistantPage_verFill, SWT.FILL}});
-        //
-        addBooleanProperty(
-            verticalOrientationGroup,
-            "grabExcessVerticalSpace",
-            ModelMessages.GridLayoutDataAssistantPage_grab);
-        GridDataFactory.create(verticalOrientationGroup).alignHC().fillV().grab();
-      }
-    }
-    // Hints
-    {
-      Group group =
-          addIntegerProperties(
-              this,
-              ModelMessages.GridLayoutDataAssistantPage_hintsGroup,
-              new String[][]{
-                  {"widthHint", ModelMessages.GridLayoutDataAssistantPage_widthHint},
-                  {"heightHint", ModelMessages.GridLayoutDataAssistantPage_heightHint}},
-              new int[]{SWT.DEFAULT, SWT.DEFAULT});
-      GridDataFactory.create(group).fillH().fillV();
-    }
-    // Spanning
-    {
-      Group group =
-          addIntegerProperties(
-              this,
-              ModelMessages.GridLayoutDataAssistantPage_spanningGroup,
-              new String[][]{
-                  {"horizontalSpan", ModelMessages.GridLayoutDataAssistantPage_columnSpan},
-                  {"verticalSpan", ModelMessages.GridLayoutDataAssistantPage_rowSpan}},
-              new int[]{1, 1});
-      GridDataFactory.create(group).fillH().fillV();
-    }
-    // Minimum
-    {
-      addIntegerProperties(
-          this,
-          ModelMessages.GridLayoutDataAssistantPage_minimumGroup,
-          new String[][]{
-              {"minimumWidth", ModelMessages.GridLayoutDataAssistantPage_minWidth},
-              {"minimumHeight", ModelMessages.GridLayoutDataAssistantPage_minHeight}});
-    }
-    // Exclude
-    {
-      addBooleanProperty(this, "exclude", ModelMessages.GridLayoutDataAssistantPage_excludeFlag);
-    }
-    // Indents
-    {
-      Group group =
-          addIntegerProperties(
-              this,
-              ModelMessages.GridLayoutDataAssistantPage_indentsGroup,
-              new String[][]{
-                  {"horizontalIndent", ModelMessages.GridLayoutDataAssistantPage_horIndent},
-                  {"verticalIndent", ModelMessages.GridLayoutDataAssistantPage_verIndent}});
-      GridDataFactory.create(group).fillH().fillV();
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public GridLayoutDataAssistantPage(Composite parent, Object selection) {
+		super(parent, selection);
+		GridLayoutFactory.create(this).columns(3);
+		{
+			Group composite = new Group(this, SWT.NONE);
+			composite.setText(ModelMessages.GridLayoutDataAssistantPage_alignmentGroup);
+			GridLayoutFactory.create(composite).columns(2);
+			GridDataFactory.create(composite).fill().grab().spanH(2).spanV(2);
+			// Horizontal alignment & grab
+			{
+				Group horizontalOrientationGroup =
+						addChoiceProperty(
+								composite,
+								"horizontalAlignment",
+								ModelMessages.GridLayoutDataAssistantPage_horizontalGroup,
+								new Object[][]{
+									new Object[]{ModelMessages.GridLayoutDataAssistantPage_horLeft, SWT.LEFT},
+									new Object[]{ModelMessages.GridLayoutDataAssistantPage_horCenter, SWT.CENTER},
+									new Object[]{ModelMessages.GridLayoutDataAssistantPage_horRight, SWT.RIGHT},
+									new Object[]{ModelMessages.GridLayoutDataAssistantPage_horFill, SWT.FILL}});
+				//
+				addBooleanProperty(
+						horizontalOrientationGroup,
+						"grabExcessHorizontalSpace",
+						ModelMessages.GridLayoutDataAssistantPage_grab);
+				GridDataFactory.create(horizontalOrientationGroup).alignHC().fillV().grab();
+			}
+			// Vertical alignment & grab
+			{
+				Group verticalOrientationGroup =
+						addChoiceProperty(
+								composite,
+								"verticalAlignment",
+								ModelMessages.GridLayoutDataAssistantPage_verticalGroup,
+								new Object[][]{
+									new Object[]{ModelMessages.GridLayoutDataAssistantPage_verTop, SWT.TOP},
+									new Object[]{ModelMessages.GridLayoutDataAssistantPage_verCenter, SWT.CENTER},
+									new Object[]{ModelMessages.GridLayoutDataAssistantPage_verBottom, SWT.BOTTOM},
+									new Object[]{ModelMessages.GridLayoutDataAssistantPage_verFill, SWT.FILL}});
+				//
+				addBooleanProperty(
+						verticalOrientationGroup,
+						"grabExcessVerticalSpace",
+						ModelMessages.GridLayoutDataAssistantPage_grab);
+				GridDataFactory.create(verticalOrientationGroup).alignHC().fillV().grab();
+			}
+		}
+		// Hints
+		{
+			Group group =
+					addIntegerProperties(
+							this,
+							ModelMessages.GridLayoutDataAssistantPage_hintsGroup,
+							new String[][]{
+								{"widthHint", ModelMessages.GridLayoutDataAssistantPage_widthHint},
+								{"heightHint", ModelMessages.GridLayoutDataAssistantPage_heightHint}},
+							new int[]{SWT.DEFAULT, SWT.DEFAULT});
+			GridDataFactory.create(group).fillH().fillV();
+		}
+		// Spanning
+		{
+			Group group =
+					addIntegerProperties(
+							this,
+							ModelMessages.GridLayoutDataAssistantPage_spanningGroup,
+							new String[][]{
+								{"horizontalSpan", ModelMessages.GridLayoutDataAssistantPage_columnSpan},
+								{"verticalSpan", ModelMessages.GridLayoutDataAssistantPage_rowSpan}},
+							new int[]{1, 1});
+			GridDataFactory.create(group).fillH().fillV();
+		}
+		// Minimum
+		{
+			addIntegerProperties(
+					this,
+					ModelMessages.GridLayoutDataAssistantPage_minimumGroup,
+					new String[][]{
+						{"minimumWidth", ModelMessages.GridLayoutDataAssistantPage_minWidth},
+						{"minimumHeight", ModelMessages.GridLayoutDataAssistantPage_minHeight}});
+		}
+		// Exclude
+		{
+			addBooleanProperty(this, "exclude", ModelMessages.GridLayoutDataAssistantPage_excludeFlag);
+		}
+		// Indents
+		{
+			Group group =
+					addIntegerProperties(
+							this,
+							ModelMessages.GridLayoutDataAssistantPage_indentsGroup,
+							new String[][]{
+								{"horizontalIndent", ModelMessages.GridLayoutDataAssistantPage_horIndent},
+								{"verticalIndent", ModelMessages.GridLayoutDataAssistantPage_verIndent}});
+			GridDataFactory.create(group).fillH().fillV();
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/grid/GridLayoutInfo.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/grid/GridLayoutInfo.java
index 2736f0a8f..bea26cbb1 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/grid/GridLayoutInfo.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/grid/GridLayoutInfo.java
@@ -69,1305 +69,1305 @@
  * @coverage swt.model.layout
  */
 public class GridLayoutInfo extends LayoutInfo
-    implements
-      IPreferenceConstants,
-      IGridLayoutInfo<ControlInfo> {
-  private boolean m_useObjectColumnCount;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public GridLayoutInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-    new GridLayoutAssistant(this);
-    new SelectionActionsSupport<ControlInfo>(this);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Events
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void onSet() throws Exception {
-    super.onSet();
-    GridLayoutConverter.convert(getComposite(), this);
-  }
-
-  @Override
-  protected void onDelete() throws Exception {
-    // delete filler's
-    for (ControlInfo control : getControls()) {
-      if (isFiller(control)) {
-        control.delete();
-      }
-    }
-    // delete other
-    super.onDelete();
-  }
-
-  @Override
-  protected void initialize() throws Exception {
-    super.initialize();
-    // add listeners
-    addBroadcastListener(new ObjectInfoChildTree() {
-      @Override
-      public void invoke(ObjectInfo object, boolean[] visible) throws Exception {
-        if (object instanceof ControlInfo) {
-          visible[0] &= !isFiller((ControlInfo) object);
-        }
-      }
-    });
-    addBroadcastListener(new ObjectInfoChildGraphical() {
-      @Override
-      public void invoke(ObjectInfo object, boolean[] visible) throws Exception {
-        if (object instanceof ControlInfo) {
-          visible[0] &= !isFiller((ControlInfo) object);
-        }
-      }
-    });
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean isManagedObject(Object object) {
-    if (!super.isManagedObject(object)) {
-      return false;
-    }
-    if (object instanceof ControlInfo) {
-      ControlInfo control = (ControlInfo) object;
-      if (getGridData(control).getExclude()) {
-        return false;
-      }
-    }
-    return true;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final Set<Object> m_controlsImplicit = Sets.newHashSet();
-
-  @Override
-  public void refresh_dispose() throws Exception {
-    m_gridInfo = null;
-    super.refresh_dispose();
-  }
-
-  @Override
-  protected void refresh_afterCreate() throws Exception {
-    super.refresh_afterCreate();
-    prepareImplicitControls();
-    fixEmptyColumns();
-  }
-
-  /**
-   * Prepares {@link #m_controlsImplicit} - {@link Set} of {@link Control} which exist on
-   * {@link Composite}, but we don't have models for them. Usually these controls are implicit ones,
-   * created in super constructor.
-   */
-  private void prepareImplicitControls() {
-    m_controlsImplicit.clear();
-    // with model
-    Set<Object> controlsWithModel = Sets.newHashSet();
-    for (ControlInfo control : getControls()) {
-      controlsWithModel.add(control.getObject());
-    }
-    // process all and remember Control-s without model
-    Object compositeObject = getComposite().getObject();
-    Object[] controlsAll = ContainerSupport.getChildren(compositeObject);
-    for (Object control : controlsAll) {
-      if (!controlsWithModel.contains(control)) {
-        m_controlsImplicit.add(control);
-      }
-    }
-  }
-
-  /**
-   * Ensures that empty columns (only with fillers) have reasonable width.
-   */
-  private void fixEmptyColumns() throws Exception {
-    fetchGridDataValues();
-    ControlInfo[][] grid = getControlsGrid();
-    int columnCount = grid.length != 0 ? grid[0].length : 0;
-    m_columnWidths = GridLayoutSupport.getColumnWidths(getObject());
-    // set empty text for fillers in empty column
-    for (int column = 0; column < columnCount; column++) {
-      int width = m_columnWidths[column];
-      if (width == 0) {
-        for (int row = 0; row < grid.length; row++) {
-          ControlInfo control = grid[row][column];
-          if (control != null && isFiller(control)) {
-            LabelSupport.setText(control.getObject(), "      ");
-          }
-        }
-      }
-    }
-  }
-
-  /**
-   * When {@link GridLayout} was already created and rendered, we can fetch its location/span
-   * information. We need this, because we need actual grid information when check for empty
-   * columns.
-   */
-  private void fetchGridDataValues() throws Exception {
-    for (ControlInfo control : getControls()) {
-      GridDataInfo gridData = getGridData(control);
-      gridData.refresh_fetch();
-    }
-  }
-
-  @Override
-  protected void refresh_fetch() throws Exception {
-    super.refresh_fetch();
-    Object layoutObject = getObject();
-    // prepare dimensions information
-    m_columnOrigins = GridLayoutSupport.getColumnOrigins(layoutObject);
-    m_rowOrigins = GridLayoutSupport.getRowOrigins(layoutObject);
-    m_columnWidths = GridLayoutSupport.getColumnWidths(layoutObject);
-    m_rowHeights = GridLayoutSupport.getRowHeights(layoutObject);
-  }
-
-  @Override
-  protected void refresh_finish() throws Exception {
-    super.refresh_finish();
-    // fix grid
-    try {
-      m_useObjectColumnCount = true;
-      fixGrid();
-    } finally {
-      m_useObjectColumnCount = false;
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Components/constraints
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private boolean m_replaceWithFillers = true;
-  private boolean m_removeEmptyColumnsRows = true;
-  private GridDataInfo m_removingGridData;
-
-  /**
-   * Specifies if empty columns/rows should be removed when {@link ControlInfo} is removed (deleted
-   * or moved). We need to disable this for example when we want to surround controls with some
-   * container, so that it is placed in same cells.
-   */
-  void setRemoveEmptyColumnsRows(boolean removeEmptyColumnsRows) {
-    m_removeEmptyColumnsRows = removeEmptyColumnsRows;
-  }
-
-  @Override
-  protected Object getDefaultVirtualDataObject() throws Exception {
-    return GridLayoutSupport.createGridData();
-  }
-
-  @Override
-  protected void onControlRemoveBefore(ControlInfo control) throws Exception {
-    // remember GridDataInfo for using later in "remove after"
-    m_removingGridData = getGridData(control);
-    // continue
-    super.onControlRemoveBefore(control);
-  }
-
-  @Override
-  protected void onControlRemoveAfter(ControlInfo control) throws Exception {
-    // replace control with fillers
-    if (m_replaceWithFillers && !isFiller(control)) {
-      // replace with fillers
-      {
-        GridDataInfo gridData = m_removingGridData;
-        for (int x = gridData.x; x < gridData.x + gridData.width; x++) {
-          for (int y = gridData.y; y < gridData.y + gridData.height; y++) {
-            addFiller(x, y);
-          }
-        }
-      }
-      // delete empty columns/rows
-      if (m_removeEmptyColumnsRows) {
-        deleteEmptyColumnsRows(m_removingGridData);
-      }
-      m_removingGridData = null;
-    }
-    // continue
-    super.onControlRemoveAfter(control);
-  }
-
-  @Override
-  public IGridDataInfo getGridData2(ControlInfo control) {
-    return getGridData(control);
-  }
-
-  /**
-   * Static version of {@link #getGridData2(IControlInfo)}.
-   */
-  public static GridDataInfo getGridData(ControlInfo control) {
-    return (GridDataInfo) getLayoutData(control);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Dimensions operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Removes empty (only with fillers) columns/rows.
-   */
-  void deleteEmptyColumnsRows(GridDataInfo removingData) throws Exception {
-    deleteEmptyColumns(removingData);
-    deleteEmptyRows(removingData);
-  }
-
-  /**
-   * Deletes empty (only with fillers) columns.
-   */
-  private void deleteEmptyColumns(GridDataInfo removingData) throws Exception {
-    ControlInfo[][] grid = getControlsGrid();
-    // check columns
-    boolean deleteOnlyIfIsRemovingColumn = false;
-    for (int column = grid[0].length - 1; column >= 0; column--) {
-      boolean isRemovingColumn = removingData != null
-          && removingData.x <= column
-          && column < removingData.x + removingData.width;
-      // check if empty
-      boolean isEmpty = true;
-      for (int row = 0; row < grid.length; row++) {
-        ControlInfo control = grid[row][column];
-        isEmpty &= isFiller(control);
-      }
-      // delete if empty
-      if (isEmpty && (!deleteOnlyIfIsRemovingColumn || isRemovingColumn)) {
-        command_deleteColumn(column, false);
-      } else {
-        deleteOnlyIfIsRemovingColumn = true;
-      }
-    }
-  }
-
-  /**
-   * Deletes empty (only with fillers) rows.
-   */
-  private void deleteEmptyRows(GridDataInfo removingData) throws Exception {
-    ControlInfo[][] grid = getControlsGrid();
-    boolean deleteOnlyIfIsRemovingRow = false;
-    for (int row = grid.length - 1; row >= 0; row--) {
-      boolean isRemovingRow = removingData != null
-          && removingData.y <= row
-          && row < removingData.y + removingData.height;
-      // check if empty
-      boolean isEmpty = true;
-      for (int column = 0; column < grid[row].length; column++) {
-        ControlInfo control = grid[row][column];
-        isEmpty &= isFiller(control);
-      }
-      // delete if empty
-      if (isEmpty && (!deleteOnlyIfIsRemovingRow || isRemovingRow)) {
-        command_deleteRow(row, false);
-      } else {
-        deleteOnlyIfIsRemovingRow = true;
-      }
-    }
-  }
-
-  @Override
-  public void command_deleteColumn(int column, boolean deleteEmptyDims) throws Exception {
-    int columnCount = getControlsGridSize().width;
-    // update GridData, delete controls
-    m_replaceWithFillers = false;
-    try {
-      for (ControlInfo control : getControls()) {
-        GridDataInfo gridData = getGridData(control);
-        //
-        if (gridData.x == column) {
-          control.delete();
-        } else if (gridData.x > column) {
-          gridData.x--;
-        } else if (gridData.x + gridData.width > column) {
-          gridData.setHorizontalSpan(gridData.width - 1);
-        }
-      }
-    } finally {
-      m_replaceWithFillers = true;
-    }
-    // update count
-    if (columnCount >= 2) {
-      getPropertyByTitle("numColumns").setValue(columnCount - 1);
-    }
-    // it is possible, that we have now empty rows, so delete them too
-    if (deleteEmptyDims) {
-      deleteEmptyColumnsRows(null);
-    }
-  }
-
-  @Override
-  public void command_deleteRow(int row, boolean deleteEmptyDims) throws Exception {
-    // update GridData, delete controls
-    m_replaceWithFillers = false;
-    try {
-      for (ControlInfo control : getControls()) {
-        GridDataInfo gridData = getGridData(control);
-        //
-        if (gridData.y == row) {
-          control.delete();
-        } else if (gridData.y > row) {
-          gridData.y--;
-        } else if (gridData.y + gridData.height > row) {
-          gridData.setVerticalSpan(gridData.height - 1);
-        }
-      }
-    } finally {
-      m_replaceWithFillers = true;
-    }
-    // it is possible, that we have now empty columns, so delete them too
-    if (deleteEmptyDims) {
-      deleteEmptyColumnsRows(null);
-    }
-  }
-
-  @Override
-  public void command_MOVE_COLUMN(int fromIndex, int toIndex) throws Exception {
-    // move column in columns list
-    {
-      getColumns(); // kick to initialize columns
-      GridColumnInfo<ControlInfo> column = m_columns.remove(fromIndex);
-      if (fromIndex < toIndex) {
-        m_columns.add(toIndex - 1, column);
-      } else {
-        m_columns.add(toIndex, column);
-      }
-      // update "index"
-      for (int i = 0; i < m_columns.size(); i++) {
-        m_columns.get(i).setIndex(i);
-      }
-    }
-    // prepare new column
-    prepareCell(toIndex, true, -1, false);
-    if (toIndex < fromIndex) {
-      fromIndex++;
-    }
-    // move children
-    for (ControlInfo control : getControls()) {
-      if (!isFiller(control)) {
-        GridDataInfo gridData = getGridData(control);
-        if (gridData.x == fromIndex) {
-          command_setCells(control, new Rectangle(toIndex, gridData.y, 1, gridData.height), true);
-        }
-      }
-    }
-    // delete old column
-    command_deleteColumn(fromIndex, false);
-    deleteEmptyColumnsRows(null);
-  }
-
-  @Override
-  public void command_MOVE_ROW(int fromIndex, int toIndex) throws Exception {
-    // move row in rows list
-    {
-      getRows(); // kick to initialize rows
-      GridRowInfo<ControlInfo> row = m_rows.remove(fromIndex);
-      if (fromIndex < toIndex) {
-        m_rows.add(toIndex - 1, row);
-      } else {
-        m_rows.add(toIndex, row);
-      }
-      // update "index"
-      for (int i = 0; i < m_rows.size(); i++) {
-        m_rows.get(i).setIndex(i);
-      }
-    }
-    // prepare new row
-    prepareCell(-1, false, toIndex, true);
-    if (toIndex < fromIndex) {
-      fromIndex++;
-    }
-    // move children
-    for (ControlInfo control : getControls()) {
-      if (!isFiller(control)) {
-        GridDataInfo gridData = getGridData(control);
-        if (gridData.y == fromIndex) {
-          command_setCells(control, new Rectangle(gridData.x, toIndex, gridData.width, 1), true);
-        }
-      }
-    }
-    // delete old row
-    command_deleteRow(fromIndex, false);
-    deleteEmptyColumnsRows(null);
-  }
-
-  @Override
-  public void command_normalizeSpanning() throws Exception {
-    ExecutionUtils.run(this, new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        command_normalizeSpanning0();
-      }
-    });
-  }
-
-  private void command_normalizeSpanning0() throws Exception {
-    Dimension gridSize = getControlsGridSize();
-    boolean[] filledColumns = new boolean[gridSize.width];
-    boolean[] filledRows = new boolean[gridSize.height];
-    for (ControlInfo control : getControls()) {
-      if (!isFiller(control)) {
-        GridDataInfo gridData = getGridData(control);
-        filledColumns[gridData.x] = true;
-        filledRows[gridData.y] = true;
-      }
-    }
-    // remove empty columns
-    for (int column = filledColumns.length - 1; column >= 0; column--) {
-      if (!filledColumns[column]) {
-        command_deleteColumn(column, false);
-      }
-    }
-    // remove empty rows
-    for (int row = filledRows.length - 1; row >= 0; row--) {
-      if (!filledRows[row]) {
-        command_deleteRow(row, false);
-      }
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Dimensions access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final List<GridColumnInfo<ControlInfo>> m_columns = Lists.newArrayList();
-  private final List<GridRowInfo<ControlInfo>> m_rows = Lists.newArrayList();
-
-  /**
-   * @return the "numColumns" property value.
-   */
-  int getNumColumns() {
-    if (getObject() == null) {
-      return 1;
-    } else {
-      return GridLayoutSupport.getNumColumns(getObject());
-    }
-  }
-
-  @Override
-  public List<GridColumnInfo<ControlInfo>> getColumns() {
-    Dimension size = getControlsGridSize();
-    if (m_columns.size() != size.width) {
-      m_columns.clear();
-      for (int i = 0; i < size.width; i++) {
-        GridColumnInfo<ControlInfo> column = new GridColumnInfo<ControlInfo>(this);
-        column.setIndex(i);
-        m_columns.add(column);
-      }
-    }
-    return m_columns;
-  }
-
-  @Override
-  public List<GridRowInfo<ControlInfo>> getRows() {
-    Dimension size = getControlsGridSize();
-    if (m_rows.size() != size.height) {
-      m_rows.clear();
-      for (int i = 0; i < size.height; i++) {
-        GridRowInfo<ControlInfo> row = new GridRowInfo<ControlInfo>(this);
-        row.setIndex(i);
-        m_rows.add(row);
-      }
-    }
-    return m_rows;
-  }
-
-  @Override
-  public boolean canChangeDimensions() {
-    if (getCreationSupport() instanceof ConstructorCreationSupport) {
-      return true;
-    }
-    if (m_controlsImplicit.isEmpty()) {
-      return true;
-    }
-    return false;
-  }
-
-  @Override
-  public boolean isExplicitRow(int row) {
-    return row >= getImplicitGridSize().height;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void command_CREATE(ControlInfo newControl,
-      int column,
-      boolean insertColumn,
-      int row,
-      boolean insertRow) throws Exception {
-    startEdit();
-    try {
-      command_CREATE(newControl, null);
-      // move to required cell
-      prepareCell(column, insertColumn, row, insertRow);
-      command_setCells(newControl, new Rectangle(column, row, 1, 1), false);
-      // perform automatic alignment
-      doAutomaticAlignment(newControl);
-    } finally {
-      endEdit();
-    }
-  }
-
-  @Override
-  public void command_MOVE(ControlInfo control,
-      int column,
-      boolean insertColumn,
-      int row,
-      boolean insertRow) throws Exception {
-    startEdit();
-    try {
-      prepareCell(column, insertColumn, row, insertRow);
-      command_setCells(control, new Rectangle(column, row, 1, 1), true);
-      deleteEmptyColumnsRows(null);
-    } finally {
-      endEdit();
-    }
-  }
-
-  @Override
-  public void command_ADD(ControlInfo control,
-      int column,
-      boolean insertColumn,
-      int row,
-      boolean insertRow) throws Exception {
-    startEdit();
-    try {
-      command_MOVE(control, null);
-      // move to required cell
-      prepareCell(column, insertColumn, row, insertRow);
-      command_setCells(control, new Rectangle(column, row, 1, 1), false);
-    } finally {
-      endEdit();
-    }
-  }
-
-  /**
-   * Prepares cell with given column/row - inserts/appends columns/rows if necessary.
-   */
-  void prepareCell(int column, boolean insertColumn, int row, boolean insertRow) throws Exception {
-    // prepare count of columns/rows
-    int columnCount;
-    int rowCount;
-    {
-      Dimension gridSize = getControlsGridSize();
-      columnCount = gridSize.width;
-      rowCount = gridSize.height;
-    }
-    // append
-    {
-      int newColumnCount = Math.max(columnCount, 1 + column);
-      int newRowCount = Math.max(rowCount, 1 + row);
-      // append rows
-      for (int newRow = rowCount; newRow <= row; newRow++) {
-        for (int columnIndex = 0; columnIndex < newColumnCount; columnIndex++) {
-          addFiller(columnIndex, newRow);
-        }
-      }
-      // append columns
-      getPropertyByTitle("numColumns").setValue(newColumnCount);
-      for (int newColumn = columnCount; newColumn <= column; newColumn++) {
-        for (int rowIndex = 0; rowIndex < rowCount; rowIndex++) {
-          addFiller(newColumn, rowIndex);
-        }
-      }
-      // set new count of columns/rows
-      columnCount = newColumnCount;
-      rowCount = newRowCount;
-    }
-    // insert row
-    if (insertRow) {
-      rowCount++;
-      // update GridData for all controls
-      boolean[] columnsToIgnore = new boolean[columnCount];
-      for (ControlInfo control : getControls()) {
-        GridDataInfo gridData = getGridData(control);
-        //
-        if (gridData.y >= row) {
-          gridData.y++;
-        } else if (gridData.y + gridData.height > row) {
-          gridData.setVerticalSpan(gridData.height + 1);
-          for (int i = gridData.x; i < gridData.x + gridData.width; i++) {
-            columnsToIgnore[i] = true;
-          }
-        }
-      }
-      // add fillers for new row
-      for (int i = 0; i < columnCount; i++) {
-        if (!columnsToIgnore[i]) {
-          addFiller(i, row);
-        }
-      }
-    }
-    // insert column
-    if (insertColumn) {
-      // update GridData for all controls
-      boolean[] rowsToIgnore = new boolean[rowCount];
-      for (ControlInfo control : getControls()) {
-        GridDataInfo gridData = getGridData(control);
-        //
-        if (gridData.x >= column) {
-          gridData.x++;
-        } else if (gridData.x + gridData.width > column) {
-          gridData.setHorizontalSpan(gridData.width + 1);
-          for (int i = gridData.y; i < gridData.y + gridData.height; i++) {
-            rowsToIgnore[i] = true;
-          }
-        }
-      }
-      // insert fillers for new column
-      getPropertyByTitle("numColumns").setValue(columnCount + 1);
-      for (int i = 0; i < rowCount; i++) {
-        if (!rowsToIgnore[i]) {
-          addFiller(column, i);
-        }
-      }
-    }
-  }
-
-  @Override
-  public void command_setCells(ControlInfo control, Rectangle cells, boolean forMove)
-      throws Exception {
-    GridDataInfo gridData = getGridData(control);
-    // prepare grid
-    ControlInfo[][] grid = getControlsGrid();
-    Set<Point> cellsToAddFillers = Sets.newHashSet();
-    Set<Point> cellsToRemoveFillers = Sets.newHashSet();
-    // replace control with fillers
-    if (forMove) {
-      for (int x = gridData.x; x < gridData.x + gridData.width; x++) {
-        for (int y = gridData.y; y < gridData.y + gridData.height; y++) {
-          Point cell = new Point(x, y);
-          cellsToAddFillers.add(cell);
-        }
-      }
-    }
-    // remove fillers from occupied cells
-    for (int x = cells.x; x < cells.right(); x++) {
-      for (int y = cells.y; y < cells.bottom(); y++) {
-        Point cell = new Point(x, y);
-        cellsToAddFillers.remove(cell);
-        if (isFiller(grid[y][x])) {
-          cellsToRemoveFillers.add(cell);
-        }
-      }
-    }
-    // do edit operations
-    startEdit();
-    try {
-      // move
-      if (gridData.x != cells.x || gridData.y != cells.y) {
-        // update GridData
-        {
-          gridData.x = cells.x;
-          gridData.y = cells.y;
-        }
-        // move model
-        {
-          ControlInfo reference = getReferenceControl(cells.y, cells.x, control);
-          command_MOVE(control, reference);
-        }
-      }
-      // set span
-      {
-        gridData.setHorizontalSpan(cells.width);
-        gridData.setVerticalSpan(cells.height);
-      }
-      // remove fillers
-      for (Point cell : cellsToRemoveFillers) {
-        ControlInfo filler = grid[cell.y][cell.x];
-        filler.delete();
-      }
-      // add fillers
-      for (Point cell : cellsToAddFillers) {
-        addFiller(cell.x, cell.y);
-      }
-    } finally {
-      endEdit();
-    }
-  }
-
-  @Override
-  public void command_setSizeHint(ControlInfo control, boolean horizontal, Dimension size)
-      throws Exception {
-    startEdit();
-    try {
-      GridDataInfo gridData = getGridData(control);
-      if (horizontal) {
-        gridData.setWidthHint(size.width);
-      } else {
-        gridData.setHeightHint(size.height);
-      }
-    } finally {
-      endEdit();
-    }
-  }
-
-  /**
-   * @return the {@link Point} with size of controls grid.
-   */
-  private Dimension getControlsGridSize() {
-    int columnCount = 0;
-    int rowCount = 0;
-    // when we just refreshed, we can use "numColumns" from GridLayout object
-    if (m_useObjectColumnCount) {
-      columnCount = getNumColumns();
-    }
-    // use implicit controls
-    {
-      Dimension implicitGridSize = getImplicitGridSize();
-      columnCount = Math.max(columnCount, implicitGridSize.width);
-      rowCount = implicitGridSize.height;
-    }
-    // use explicit controls
-    for (ControlInfo control : getControls()) {
-      GridDataInfo gridData = getGridData(control);
-      columnCount = Math.max(columnCount, gridData.x + gridData.width);
-      rowCount = Math.max(rowCount, gridData.y + gridData.height);
-    }
-    // OK, we have grid
-    return new Dimension(columnCount, rowCount);
-  }
-
-  /**
-   * @return the size of {@link #m_controlsImplicit} grid.
-   */
-  private Dimension getImplicitGridSize() {
-    int columnCount = 0;
-    int rowCount = 0;
-    for (Object control : m_controlsImplicit) {
-      Rectangle cells = getImplicitControlCells(control);
-      columnCount = Math.max(columnCount, cells.right());
-      rowCount = Math.max(rowCount, cells.bottom());
-    }
-    return new Dimension(columnCount, rowCount);
-  }
-
-  /**
-   * @return the cells of given {@link Control}.
-   */
-  private Rectangle getImplicitControlCells(Object control) {
-    Object layout = getObject();
-    Point xy = GridLayoutSupport.getXY(layout, control);
-    // may be excluded
-    if (xy == null) {
-      return new Rectangle();
-    }
-    // continue
-    Dimension wh = GridLayoutSupport.getWH(layout, control);
-    return new Rectangle(xy.x, xy.y, wh.width, wh.height);
-  }
-
-  /**
-   * @return the double array of {@link ControlInfo} where each element contains {@link ControlInfo}
-   *         that occupies this cell.
-   */
-  private ControlInfo[][] getControlsGrid() throws Exception {
-    Dimension gridSize = getControlsGridSize();
-    // prepare empty grid
-    ControlInfo[][] grid;
-    {
-      grid = new ControlInfo[gridSize.height][];
-      for (int rowIndex = 0; rowIndex < grid.length; rowIndex++) {
-        grid[rowIndex] = new ControlInfo[gridSize.width];
-      }
-    }
-    // fill grid
-    for (ControlInfo control : getControls()) {
-      // prepare cells
-      Rectangle cells;
-      {
-        GridDataInfo gridData = getGridData(control);
-        cells = new Rectangle(gridData.x, gridData.y, gridData.width, gridData.height);
-      }
-      // fill grid cells
-      for (int x = cells.x; x < cells.right(); x++) {
-        for (int y = cells.y; y < cells.bottom(); y++) {
-          // ignore newly added controls without real cell
-          if (x != -1 && y != -1) {
-            grid[y][x] = control;
-          }
-        }
-      }
-    }
-    // OK, we have grid
-    return grid;
-  }
-
-  /**
-   * "Fixes" grid, i.e. ensures that all cells are filled (at least with fillers), even if this is
-   * not strongly required by layout itself for final cells. We do this to avoid checks for
-   * <code>null</code> in many places.
-   */
-  @Override
-  public void fixGrid() throws Exception {
-    if (JavaInfoUtils.isImplicitlyCreated(this)) {
-      return;
-    }
-    ControlInfo[][] grid = getControlsGrid();
-    for (int row = 0; row < grid.length; row++) {
-      for (int column = 0; column < grid[row].length; column++) {
-        if (isEmptyCell(grid, row, column)) {
-          addFiller(column, row);
-        }
-      }
-    }
-  }
-
-  private boolean isEmptyCell(ControlInfo[][] grid, int row, int column) {
-    {
-      Object layoutObject = getObject();
-      for (Object control : m_controlsImplicit) {
-        Point point = GridLayoutSupport.getXY(layoutObject, control);
-        if (point != null && point.x == column && point.y == row) {
-          return false;
-        }
-      }
-    }
-    return grid[row][column] == null;
-  }
-
-  /**
-   * @return the {@link ControlInfo} that should be used as reference of adding into specified cell.
-   *
-   * @param exclude
-   *          the {@link ControlInfo} that should not be checked, for example because we move it now
-   */
-  private ControlInfo getReferenceControl(int row, int column, ControlInfo exclude)
-      throws Exception {
-    for (ControlInfo control : getControls()) {
-      if (control != exclude) {
-        GridDataInfo gridData = getGridData(control);
-        if (gridData.y > row || gridData.y == row && gridData.x >= column) {
-          return control;
-        }
-      }
-    }
-    // no reference
-    return null;
-  }
-
-  /**
-   * Adds filler {@link ControlInfo} into given cell.
-   */
-  private void addFiller(int column, int row) throws Exception {
-    // prepare creation support
-    ConstructorCreationSupport creationSupport = new ConstructorCreationSupport(null, false);
-    // prepare filler
-    ControlInfo filler = (ControlInfo) JavaInfoUtils.createJavaInfo(
-        getEditor(),
-        LabelSupport.getLabelClass(),
-        creationSupport);
-    // add filler
-    ControlInfo reference = getReferenceControl(row, column, null);
-    JavaInfoUtils.add(
-        filler,
-        new EmptyPureVariableSupport(filler),
-        PureFlatStatementGenerator.INSTANCE,
-        null,
-        getComposite(),
-        reference);
-    // set x/y for new filler
-    GridDataInfo gridData = getGridData(filler);
-    gridData.x = column;
-    gridData.y = row;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Automatic alignment
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Performs automatic alignment, such as grab/fill for Text/Table/etc, right alignment for Label.
-   */
-  private void doAutomaticAlignment(ControlInfo control) throws Exception {
-    final IPreferenceStore preferences = getDescription().getToolkit().getPreferences();
-    GridAlignmentHelper.doAutomaticAlignment(control, new IAlignmentProcessor<ControlInfo>() {
-      @Override
-      public boolean grabEnabled() {
-        return preferences.getBoolean(P_ENABLE_GRAB);
-      }
-
-      @Override
-      public boolean rightEnabled() {
-        return preferences.getBoolean(P_ENABLE_RIGHT_ALIGNMENT);
-      }
-
-      @Override
-      public ControlInfo getComponentAtLeft(ControlInfo component) {
-        GridDataInfo gridData = getGridData(component);
-        return getControlAt(gridData.x - 1, gridData.y);
-      }
-
-      @Override
-      public ControlInfo getComponentAtRight(ControlInfo component) {
-        GridDataInfo gridData = getGridData(component);
-        return getControlAt(gridData.x + 1, gridData.y);
-      }
-
-      @Override
-      public void setGrabFill(ControlInfo component, boolean horizontal) throws Exception {
-        GridDataInfo gridData = getGridData(component);
-        if (horizontal) {
-          gridData.setHorizontalGrab(true);
-          gridData.setHorizontalAlignment(SWT.FILL);
-        } else {
-          gridData.setVerticalGrab(true);
-          gridData.setVerticalAlignment(SWT.FILL);
-        }
-      }
-
-      @Override
-      public void setRightAlignment(ControlInfo component) throws Exception {
-        GridDataInfo gridData = getGridData(component);
-        gridData.setHorizontalAlignment(SWT.RIGHT);
-      }
-    });
-  }
-
-  /**
-   * @return the {@link ControlInfo} with given top-left cell, may be <code>null</code>.
-   */
-  private ControlInfo getControlAt(int x, int y) {
-    for (ControlInfo control : getControls()) {
-      if (!isFiller(control)) {
-        GridDataInfo gridData = getGridData(control);
-        if (gridData.x == x && gridData.y == y) {
-          return control;
-        }
-      }
-    }
-    return null;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IGridInfo support
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final int VIRTUAL_SIZE = 25;
-  public static final int VIRTUAL_GAP = 5;
-  private IGridInfo m_gridInfo;
-  private int[] m_columnOrigins;
-  private int[] m_rowOrigins;
-  private int[] m_columnWidths;
-  private int[] m_rowHeights;
-
-  @Override
-  public IGridInfo getGridInfo() {
-    if (m_gridInfo == null) {
-      ExecutionUtils.runRethrow(new RunnableEx() {
-        @Override
-        public void run() throws Exception {
-          createGridInfo();
-        }
-      });
-    }
-    return m_gridInfo;
-  }
-
-  /**
-   * @return the origins of the columns.
-   */
-  public int[] getColumnOrigins() {
-    return m_columnOrigins;
-  }
-
-  /**
-   * @return the origins of the rows.
-   */
-  public int[] getRowOrigins() {
-    return m_rowOrigins;
-  }
-
-  /**
-   * Initializes {@link #m_gridInfo}.
-   */
-  private void createGridInfo() throws Exception {
-    // prepare intervals
-    final Interval[] columnIntervals = getIntervals(m_columnOrigins, m_columnWidths);
-    final Interval[] rowIntervals = getIntervals(m_rowOrigins, m_rowHeights);
-    // prepare cells
-    final Map<ControlInfo, Rectangle> componentToCells = Maps.newHashMap();
-    final Map<Point, ControlInfo> occupiedCells = Maps.newHashMap();
-    {
-      for (ControlInfo control : getControls()) {
-        // ignore filler
-        if (isFiller(control)) {
-          continue;
-        }
-        // prepare cells
-        Rectangle cells;
-        {
-          GridDataInfo gridData = getGridData(control);
-          cells = new Rectangle(gridData.x, gridData.y, gridData.width, gridData.height);
-        }
-        // fill map: ControlInfo -> cells Rectangle
-        componentToCells.put(control, cells);
-        // fill occupied cells map: cell -> ControlInfo
-        fillOccupiedCells(occupiedCells, control, cells);
-      }
-      for (Object control : m_controlsImplicit) {
-        Rectangle cells = getImplicitControlCells(control);
-        fillOccupiedCells(occupiedCells, getComposite(), cells);
-      }
-    }
-    // create IGridInfo instance
-    m_gridInfo = new IGridInfo() {
-      ////////////////////////////////////////////////////////////////////////////
-      //
-      // Dimensions
-      //
-      ////////////////////////////////////////////////////////////////////////////
-      @Override
-      public int getColumnCount() {
-        return columnIntervals.length;
-      }
-
-      @Override
-      public int getRowCount() {
-        return rowIntervals.length;
-      }
-
-      ////////////////////////////////////////////////////////////////////////////
-      //
-      // Intervals
-      //
-      ////////////////////////////////////////////////////////////////////////////
-      @Override
-      public Interval[] getColumnIntervals() {
-        return columnIntervals;
-      }
-
-      @Override
-      public Interval[] getRowIntervals() {
-        return rowIntervals;
-      }
-
-      ////////////////////////////////////////////////////////////////////////////
-      //
-      // Cells
-      //
-      ////////////////////////////////////////////////////////////////////////////
-      @Override
-      public Rectangle getComponentCells(IAbstractComponentInfo component) {
-        Assert.instanceOf(ControlInfo.class, component);
-        return componentToCells.get(component);
-      }
-
-      @Override
-      public Rectangle getCellsRectangle(Rectangle cells) {
-        int x = columnIntervals[cells.x].begin();
-        int y = rowIntervals[cells.y].begin();
-        int w = columnIntervals[cells.right() - 1].end() - x;
-        int h = rowIntervals[cells.bottom() - 1].end() - y;
-        return new Rectangle(x, y, w, h);
-      }
-
-      ////////////////////////////////////////////////////////////////////////////
-      //
-      // Feedback
-      //
-      ////////////////////////////////////////////////////////////////////////////
-      @Override
-      public boolean isRTL() {
-        return getComposite().isRTL();
-      }
-
-      @Override
-      public Insets getInsets() {
-        return getComposite().getClientAreaInsets2();
-      }
-
-      ////////////////////////////////////////////////////////////////////////////
-      //
-      // Virtual columns
-      //
-      ////////////////////////////////////////////////////////////////////////////
-      @Override
-      public boolean hasVirtualColumns() {
-        return true;
-      }
-
-      @Override
-      public int getVirtualColumnSize() {
-        return VIRTUAL_SIZE;
-      }
-
-      @Override
-      public int getVirtualColumnGap() {
-        return VIRTUAL_GAP;
-      }
-
-      ////////////////////////////////////////////////////////////////////////////
-      //
-      // Virtual columns
-      //
-      ////////////////////////////////////////////////////////////////////////////
-      @Override
-      public boolean hasVirtualRows() {
-        return true;
-      }
-
-      @Override
-      public int getVirtualRowSize() {
-        return VIRTUAL_SIZE;
-      }
-
-      @Override
-      public int getVirtualRowGap() {
-        return VIRTUAL_GAP;
-      }
-
-      ////////////////////////////////////////////////////////////////////////////
-      //
-      // Checks
-      //
-      ////////////////////////////////////////////////////////////////////////////
-      @Override
-      public IAbstractComponentInfo getOccupied(int column, int row) {
-        return occupiedCells.get(new Point(column, row));
-      }
-    };
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the array of {@link Interval}'s for given arrays of origins/sizes.
-   */
-  private static Interval[] getIntervals(int[] origins, int[] sizes) {
-    if (origins == null) {
-      return new Interval[]{};
-    }
-    Interval[] intervals = new Interval[origins.length];
-    for (int i = 0; i < intervals.length; i++) {
-      intervals[i] = new Interval(origins[i], sizes[i]);
-    }
-    return intervals;
-  }
-
-  private void fillOccupiedCells(Map<Point, ControlInfo> occupiedCells,
-      ControlInfo control,
-      Rectangle cells) {
-    for (int x = cells.x; x < cells.right(); x++) {
-      for (int y = cells.y; y < cells.bottom(); y++) {
-        occupiedCells.put(new Point(x, y), control);
-      }
-    }
-  }
-
-  @Override
-  public boolean isFiller(ControlInfo control) {
-    return control != null
-        && isLabel(control)
-        && control.getCreationSupport() instanceof ConstructorCreationSupport
-        && control.getVariableSupport() instanceof EmptyVariableSupport
-        && control.getMethodInvocations().isEmpty();
-  }
-
-  private static boolean isLabel(ControlInfo control) {
-    Class<?> componentClass = control.getDescription().getComponentClass();
-    return componentClass.getName().equals("org.eclipse.swt.widgets.Label");
-  }
-
-  //////////////////////////////////////////////////////////////////////////
-  //
-  // Clipboard
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void clipboardCopy_addControlCommands(ControlInfo control,
-      List<ClipboardCommand> commands) throws Exception {
-    if (!isFiller(control)) {
-      GridDataInfo gridData = getGridData(control);
-      final int column = gridData.x;
-      final int row = gridData.y;
-      // command for adding Control
-      commands.add(new LayoutClipboardCommand<GridLayoutInfo>(control) {
-        private static final long serialVersionUID = 0L;
-
-        @Override
-        protected void add(GridLayoutInfo layout, ControlInfo control) throws Exception {
-          layout.command_CREATE(control, column, false, row, false);
-        }
-      });
-      // command for GridData
-      commands.add(new LayoutDataClipboardCommand(this, control));
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Manage general layout data
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  static final BiMap<GeneralLayoutData.HorizontalAlignment, Integer> m_horizontalAlignmentMap =
-      ImmutableBiMap.of(
-          GeneralLayoutData.HorizontalAlignment.LEFT,
-          SWT.LEFT,
-          GeneralLayoutData.HorizontalAlignment.CENTER,
-          SWT.CENTER,
-          GeneralLayoutData.HorizontalAlignment.RIGHT,
-          SWT.RIGHT,
-          GeneralLayoutData.HorizontalAlignment.FILL,
-          SWT.FILL);
-  static final BiMap<GeneralLayoutData.VerticalAlignment, Integer> m_verticalAlignmentMap =
-      ImmutableBiMap.of(
-          GeneralLayoutData.VerticalAlignment.TOP,
-          SWT.TOP,
-          GeneralLayoutData.VerticalAlignment.CENTER,
-          SWT.CENTER,
-          GeneralLayoutData.VerticalAlignment.BOTTOM,
-          SWT.BOTTOM,
-          GeneralLayoutData.VerticalAlignment.FILL,
-          SWT.FILL);
-
-  @Override
-  protected void storeLayoutData(ControlInfo control, LayoutDataInfo layoutData) throws Exception {
-    GridDataInfo gridLayoutData = (GridDataInfo) layoutData;
-    GeneralLayoutData generalLayoutData = new GeneralLayoutData();
-    generalLayoutData.gridX = gridLayoutData.x;
-    generalLayoutData.gridY = gridLayoutData.y;
-    generalLayoutData.spanX =
-        (Integer) GeneralLayoutData.getLayoutPropertyValue(gridLayoutData, "horizontalSpan");
-    generalLayoutData.spanY =
-        (Integer) GeneralLayoutData.getLayoutPropertyValue(gridLayoutData, "verticalSpan");
-    generalLayoutData.horizontalGrab = (Boolean) GeneralLayoutData.getLayoutPropertyValue(
-        gridLayoutData,
-        "grabExcessHorizontalSpace");
-    generalLayoutData.verticalGrab = (Boolean) GeneralLayoutData.getLayoutPropertyValue(
-        gridLayoutData,
-        "grabExcessVerticalSpace");
-    // alignments
-    generalLayoutData.horizontalAlignment = GeneralLayoutData.getGeneralValue(
-        m_horizontalAlignmentMap,
-        (Integer) GeneralLayoutData.getLayoutPropertyValue(gridLayoutData, "horizontalAlignment"));
-    generalLayoutData.verticalAlignment = GeneralLayoutData.getGeneralValue(
-        m_verticalAlignmentMap,
-        (Integer) GeneralLayoutData.getLayoutPropertyValue(gridLayoutData, "verticalAlignment"));
-    generalLayoutData.putToInfo(control);
-  }
+implements
+IPreferenceConstants,
+IGridLayoutInfo<ControlInfo> {
+	private boolean m_useObjectColumnCount;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public GridLayoutInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+		new GridLayoutAssistant(this);
+		new SelectionActionsSupport<ControlInfo>(this);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Events
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void onSet() throws Exception {
+		super.onSet();
+		GridLayoutConverter.convert(getComposite(), this);
+	}
+
+	@Override
+	protected void onDelete() throws Exception {
+		// delete filler's
+		for (ControlInfo control : getControls()) {
+			if (isFiller(control)) {
+				control.delete();
+			}
+		}
+		// delete other
+		super.onDelete();
+	}
+
+	@Override
+	protected void initialize() throws Exception {
+		super.initialize();
+		// add listeners
+		addBroadcastListener(new ObjectInfoChildTree() {
+			@Override
+			public void invoke(ObjectInfo object, boolean[] visible) throws Exception {
+				if (object instanceof ControlInfo) {
+					visible[0] &= !isFiller((ControlInfo) object);
+				}
+			}
+		});
+		addBroadcastListener(new ObjectInfoChildGraphical() {
+			@Override
+			public void invoke(ObjectInfo object, boolean[] visible) throws Exception {
+				if (object instanceof ControlInfo) {
+					visible[0] &= !isFiller((ControlInfo) object);
+				}
+			}
+		});
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean isManagedObject(Object object) {
+		if (!super.isManagedObject(object)) {
+			return false;
+		}
+		if (object instanceof ControlInfo) {
+			ControlInfo control = (ControlInfo) object;
+			if (getGridData(control).getExclude()) {
+				return false;
+			}
+		}
+		return true;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final Set<Object> m_controlsImplicit = Sets.newHashSet();
+
+	@Override
+	public void refresh_dispose() throws Exception {
+		m_gridInfo = null;
+		super.refresh_dispose();
+	}
+
+	@Override
+	protected void refresh_afterCreate() throws Exception {
+		super.refresh_afterCreate();
+		prepareImplicitControls();
+		fixEmptyColumns();
+	}
+
+	/**
+	 * Prepares {@link #m_controlsImplicit} - {@link Set} of {@link Control} which exist on
+	 * {@link Composite}, but we don't have models for them. Usually these controls are implicit ones,
+	 * created in super constructor.
+	 */
+	private void prepareImplicitControls() {
+		m_controlsImplicit.clear();
+		// with model
+		Set<Object> controlsWithModel = Sets.newHashSet();
+		for (ControlInfo control : getControls()) {
+			controlsWithModel.add(control.getObject());
+		}
+		// process all and remember Control-s without model
+		Object compositeObject = getComposite().getObject();
+		Object[] controlsAll = ContainerSupport.getChildren(compositeObject);
+		for (Object control : controlsAll) {
+			if (!controlsWithModel.contains(control)) {
+				m_controlsImplicit.add(control);
+			}
+		}
+	}
+
+	/**
+	 * Ensures that empty columns (only with fillers) have reasonable width.
+	 */
+	private void fixEmptyColumns() throws Exception {
+		fetchGridDataValues();
+		ControlInfo[][] grid = getControlsGrid();
+		int columnCount = grid.length != 0 ? grid[0].length : 0;
+		m_columnWidths = GridLayoutSupport.getColumnWidths(getObject());
+		// set empty text for fillers in empty column
+		for (int column = 0; column < columnCount; column++) {
+			int width = m_columnWidths[column];
+			if (width == 0) {
+				for (int row = 0; row < grid.length; row++) {
+					ControlInfo control = grid[row][column];
+					if (control != null && isFiller(control)) {
+						LabelSupport.setText(control.getObject(), "      ");
+					}
+				}
+			}
+		}
+	}
+
+	/**
+	 * When {@link GridLayout} was already created and rendered, we can fetch its location/span
+	 * information. We need this, because we need actual grid information when check for empty
+	 * columns.
+	 */
+	private void fetchGridDataValues() throws Exception {
+		for (ControlInfo control : getControls()) {
+			GridDataInfo gridData = getGridData(control);
+			gridData.refresh_fetch();
+		}
+	}
+
+	@Override
+	protected void refresh_fetch() throws Exception {
+		super.refresh_fetch();
+		Object layoutObject = getObject();
+		// prepare dimensions information
+		m_columnOrigins = GridLayoutSupport.getColumnOrigins(layoutObject);
+		m_rowOrigins = GridLayoutSupport.getRowOrigins(layoutObject);
+		m_columnWidths = GridLayoutSupport.getColumnWidths(layoutObject);
+		m_rowHeights = GridLayoutSupport.getRowHeights(layoutObject);
+	}
+
+	@Override
+	protected void refresh_finish() throws Exception {
+		super.refresh_finish();
+		// fix grid
+		try {
+			m_useObjectColumnCount = true;
+			fixGrid();
+		} finally {
+			m_useObjectColumnCount = false;
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Components/constraints
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private boolean m_replaceWithFillers = true;
+	private boolean m_removeEmptyColumnsRows = true;
+	private GridDataInfo m_removingGridData;
+
+	/**
+	 * Specifies if empty columns/rows should be removed when {@link ControlInfo} is removed (deleted
+	 * or moved). We need to disable this for example when we want to surround controls with some
+	 * container, so that it is placed in same cells.
+	 */
+	void setRemoveEmptyColumnsRows(boolean removeEmptyColumnsRows) {
+		m_removeEmptyColumnsRows = removeEmptyColumnsRows;
+	}
+
+	@Override
+	protected Object getDefaultVirtualDataObject() throws Exception {
+		return GridLayoutSupport.createGridData();
+	}
+
+	@Override
+	protected void onControlRemoveBefore(ControlInfo control) throws Exception {
+		// remember GridDataInfo for using later in "remove after"
+		m_removingGridData = getGridData(control);
+		// continue
+		super.onControlRemoveBefore(control);
+	}
+
+	@Override
+	protected void onControlRemoveAfter(ControlInfo control) throws Exception {
+		// replace control with fillers
+		if (m_replaceWithFillers && !isFiller(control)) {
+			// replace with fillers
+			{
+				GridDataInfo gridData = m_removingGridData;
+				for (int x = gridData.x; x < gridData.x + gridData.width; x++) {
+					for (int y = gridData.y; y < gridData.y + gridData.height; y++) {
+						addFiller(x, y);
+					}
+				}
+			}
+			// delete empty columns/rows
+			if (m_removeEmptyColumnsRows) {
+				deleteEmptyColumnsRows(m_removingGridData);
+			}
+			m_removingGridData = null;
+		}
+		// continue
+		super.onControlRemoveAfter(control);
+	}
+
+	@Override
+	public IGridDataInfo getGridData2(ControlInfo control) {
+		return getGridData(control);
+	}
+
+	/**
+	 * Static version of {@link #getGridData2(IControlInfo)}.
+	 */
+	public static GridDataInfo getGridData(ControlInfo control) {
+		return (GridDataInfo) getLayoutData(control);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Dimensions operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Removes empty (only with fillers) columns/rows.
+	 */
+	void deleteEmptyColumnsRows(GridDataInfo removingData) throws Exception {
+		deleteEmptyColumns(removingData);
+		deleteEmptyRows(removingData);
+	}
+
+	/**
+	 * Deletes empty (only with fillers) columns.
+	 */
+	private void deleteEmptyColumns(GridDataInfo removingData) throws Exception {
+		ControlInfo[][] grid = getControlsGrid();
+		// check columns
+		boolean deleteOnlyIfIsRemovingColumn = false;
+		for (int column = grid[0].length - 1; column >= 0; column--) {
+			boolean isRemovingColumn = removingData != null
+					&& removingData.x <= column
+					&& column < removingData.x + removingData.width;
+			// check if empty
+			boolean isEmpty = true;
+			for (int row = 0; row < grid.length; row++) {
+				ControlInfo control = grid[row][column];
+				isEmpty &= isFiller(control);
+			}
+			// delete if empty
+			if (isEmpty && (!deleteOnlyIfIsRemovingColumn || isRemovingColumn)) {
+				command_deleteColumn(column, false);
+			} else {
+				deleteOnlyIfIsRemovingColumn = true;
+			}
+		}
+	}
+
+	/**
+	 * Deletes empty (only with fillers) rows.
+	 */
+	private void deleteEmptyRows(GridDataInfo removingData) throws Exception {
+		ControlInfo[][] grid = getControlsGrid();
+		boolean deleteOnlyIfIsRemovingRow = false;
+		for (int row = grid.length - 1; row >= 0; row--) {
+			boolean isRemovingRow = removingData != null
+					&& removingData.y <= row
+					&& row < removingData.y + removingData.height;
+			// check if empty
+			boolean isEmpty = true;
+			for (int column = 0; column < grid[row].length; column++) {
+				ControlInfo control = grid[row][column];
+				isEmpty &= isFiller(control);
+			}
+			// delete if empty
+			if (isEmpty && (!deleteOnlyIfIsRemovingRow || isRemovingRow)) {
+				command_deleteRow(row, false);
+			} else {
+				deleteOnlyIfIsRemovingRow = true;
+			}
+		}
+	}
+
+	@Override
+	public void command_deleteColumn(int column, boolean deleteEmptyDims) throws Exception {
+		int columnCount = getControlsGridSize().width;
+		// update GridData, delete controls
+		m_replaceWithFillers = false;
+		try {
+			for (ControlInfo control : getControls()) {
+				GridDataInfo gridData = getGridData(control);
+				//
+				if (gridData.x == column) {
+					control.delete();
+				} else if (gridData.x > column) {
+					gridData.x--;
+				} else if (gridData.x + gridData.width > column) {
+					gridData.setHorizontalSpan(gridData.width - 1);
+				}
+			}
+		} finally {
+			m_replaceWithFillers = true;
+		}
+		// update count
+		if (columnCount >= 2) {
+			getPropertyByTitle("numColumns").setValue(columnCount - 1);
+		}
+		// it is possible, that we have now empty rows, so delete them too
+		if (deleteEmptyDims) {
+			deleteEmptyColumnsRows(null);
+		}
+	}
+
+	@Override
+	public void command_deleteRow(int row, boolean deleteEmptyDims) throws Exception {
+		// update GridData, delete controls
+		m_replaceWithFillers = false;
+		try {
+			for (ControlInfo control : getControls()) {
+				GridDataInfo gridData = getGridData(control);
+				//
+				if (gridData.y == row) {
+					control.delete();
+				} else if (gridData.y > row) {
+					gridData.y--;
+				} else if (gridData.y + gridData.height > row) {
+					gridData.setVerticalSpan(gridData.height - 1);
+				}
+			}
+		} finally {
+			m_replaceWithFillers = true;
+		}
+		// it is possible, that we have now empty columns, so delete them too
+		if (deleteEmptyDims) {
+			deleteEmptyColumnsRows(null);
+		}
+	}
+
+	@Override
+	public void command_MOVE_COLUMN(int fromIndex, int toIndex) throws Exception {
+		// move column in columns list
+		{
+			getColumns(); // kick to initialize columns
+			GridColumnInfo<ControlInfo> column = m_columns.remove(fromIndex);
+			if (fromIndex < toIndex) {
+				m_columns.add(toIndex - 1, column);
+			} else {
+				m_columns.add(toIndex, column);
+			}
+			// update "index"
+			for (int i = 0; i < m_columns.size(); i++) {
+				m_columns.get(i).setIndex(i);
+			}
+		}
+		// prepare new column
+		prepareCell(toIndex, true, -1, false);
+		if (toIndex < fromIndex) {
+			fromIndex++;
+		}
+		// move children
+		for (ControlInfo control : getControls()) {
+			if (!isFiller(control)) {
+				GridDataInfo gridData = getGridData(control);
+				if (gridData.x == fromIndex) {
+					command_setCells(control, new Rectangle(toIndex, gridData.y, 1, gridData.height), true);
+				}
+			}
+		}
+		// delete old column
+		command_deleteColumn(fromIndex, false);
+		deleteEmptyColumnsRows(null);
+	}
+
+	@Override
+	public void command_MOVE_ROW(int fromIndex, int toIndex) throws Exception {
+		// move row in rows list
+		{
+			getRows(); // kick to initialize rows
+			GridRowInfo<ControlInfo> row = m_rows.remove(fromIndex);
+			if (fromIndex < toIndex) {
+				m_rows.add(toIndex - 1, row);
+			} else {
+				m_rows.add(toIndex, row);
+			}
+			// update "index"
+			for (int i = 0; i < m_rows.size(); i++) {
+				m_rows.get(i).setIndex(i);
+			}
+		}
+		// prepare new row
+		prepareCell(-1, false, toIndex, true);
+		if (toIndex < fromIndex) {
+			fromIndex++;
+		}
+		// move children
+		for (ControlInfo control : getControls()) {
+			if (!isFiller(control)) {
+				GridDataInfo gridData = getGridData(control);
+				if (gridData.y == fromIndex) {
+					command_setCells(control, new Rectangle(gridData.x, toIndex, gridData.width, 1), true);
+				}
+			}
+		}
+		// delete old row
+		command_deleteRow(fromIndex, false);
+		deleteEmptyColumnsRows(null);
+	}
+
+	@Override
+	public void command_normalizeSpanning() throws Exception {
+		ExecutionUtils.run(this, new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				command_normalizeSpanning0();
+			}
+		});
+	}
+
+	private void command_normalizeSpanning0() throws Exception {
+		Dimension gridSize = getControlsGridSize();
+		boolean[] filledColumns = new boolean[gridSize.width];
+		boolean[] filledRows = new boolean[gridSize.height];
+		for (ControlInfo control : getControls()) {
+			if (!isFiller(control)) {
+				GridDataInfo gridData = getGridData(control);
+				filledColumns[gridData.x] = true;
+				filledRows[gridData.y] = true;
+			}
+		}
+		// remove empty columns
+		for (int column = filledColumns.length - 1; column >= 0; column--) {
+			if (!filledColumns[column]) {
+				command_deleteColumn(column, false);
+			}
+		}
+		// remove empty rows
+		for (int row = filledRows.length - 1; row >= 0; row--) {
+			if (!filledRows[row]) {
+				command_deleteRow(row, false);
+			}
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Dimensions access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final List<GridColumnInfo<ControlInfo>> m_columns = Lists.newArrayList();
+	private final List<GridRowInfo<ControlInfo>> m_rows = Lists.newArrayList();
+
+	/**
+	 * @return the "numColumns" property value.
+	 */
+	int getNumColumns() {
+		if (getObject() == null) {
+			return 1;
+		} else {
+			return GridLayoutSupport.getNumColumns(getObject());
+		}
+	}
+
+	@Override
+	public List<GridColumnInfo<ControlInfo>> getColumns() {
+		Dimension size = getControlsGridSize();
+		if (m_columns.size() != size.width) {
+			m_columns.clear();
+			for (int i = 0; i < size.width; i++) {
+				GridColumnInfo<ControlInfo> column = new GridColumnInfo<ControlInfo>(this);
+				column.setIndex(i);
+				m_columns.add(column);
+			}
+		}
+		return m_columns;
+	}
+
+	@Override
+	public List<GridRowInfo<ControlInfo>> getRows() {
+		Dimension size = getControlsGridSize();
+		if (m_rows.size() != size.height) {
+			m_rows.clear();
+			for (int i = 0; i < size.height; i++) {
+				GridRowInfo<ControlInfo> row = new GridRowInfo<ControlInfo>(this);
+				row.setIndex(i);
+				m_rows.add(row);
+			}
+		}
+		return m_rows;
+	}
+
+	@Override
+	public boolean canChangeDimensions() {
+		if (getCreationSupport() instanceof ConstructorCreationSupport) {
+			return true;
+		}
+		if (m_controlsImplicit.isEmpty()) {
+			return true;
+		}
+		return false;
+	}
+
+	@Override
+	public boolean isExplicitRow(int row) {
+		return row >= getImplicitGridSize().height;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void command_CREATE(ControlInfo newControl,
+			int column,
+			boolean insertColumn,
+			int row,
+			boolean insertRow) throws Exception {
+		startEdit();
+		try {
+			command_CREATE(newControl, null);
+			// move to required cell
+			prepareCell(column, insertColumn, row, insertRow);
+			command_setCells(newControl, new Rectangle(column, row, 1, 1), false);
+			// perform automatic alignment
+			doAutomaticAlignment(newControl);
+		} finally {
+			endEdit();
+		}
+	}
+
+	@Override
+	public void command_MOVE(ControlInfo control,
+			int column,
+			boolean insertColumn,
+			int row,
+			boolean insertRow) throws Exception {
+		startEdit();
+		try {
+			prepareCell(column, insertColumn, row, insertRow);
+			command_setCells(control, new Rectangle(column, row, 1, 1), true);
+			deleteEmptyColumnsRows(null);
+		} finally {
+			endEdit();
+		}
+	}
+
+	@Override
+	public void command_ADD(ControlInfo control,
+			int column,
+			boolean insertColumn,
+			int row,
+			boolean insertRow) throws Exception {
+		startEdit();
+		try {
+			command_MOVE(control, null);
+			// move to required cell
+			prepareCell(column, insertColumn, row, insertRow);
+			command_setCells(control, new Rectangle(column, row, 1, 1), false);
+		} finally {
+			endEdit();
+		}
+	}
+
+	/**
+	 * Prepares cell with given column/row - inserts/appends columns/rows if necessary.
+	 */
+	void prepareCell(int column, boolean insertColumn, int row, boolean insertRow) throws Exception {
+		// prepare count of columns/rows
+		int columnCount;
+		int rowCount;
+		{
+			Dimension gridSize = getControlsGridSize();
+			columnCount = gridSize.width;
+			rowCount = gridSize.height;
+		}
+		// append
+		{
+			int newColumnCount = Math.max(columnCount, 1 + column);
+			int newRowCount = Math.max(rowCount, 1 + row);
+			// append rows
+			for (int newRow = rowCount; newRow <= row; newRow++) {
+				for (int columnIndex = 0; columnIndex < newColumnCount; columnIndex++) {
+					addFiller(columnIndex, newRow);
+				}
+			}
+			// append columns
+			getPropertyByTitle("numColumns").setValue(newColumnCount);
+			for (int newColumn = columnCount; newColumn <= column; newColumn++) {
+				for (int rowIndex = 0; rowIndex < rowCount; rowIndex++) {
+					addFiller(newColumn, rowIndex);
+				}
+			}
+			// set new count of columns/rows
+			columnCount = newColumnCount;
+			rowCount = newRowCount;
+		}
+		// insert row
+		if (insertRow) {
+			rowCount++;
+			// update GridData for all controls
+			boolean[] columnsToIgnore = new boolean[columnCount];
+			for (ControlInfo control : getControls()) {
+				GridDataInfo gridData = getGridData(control);
+				//
+				if (gridData.y >= row) {
+					gridData.y++;
+				} else if (gridData.y + gridData.height > row) {
+					gridData.setVerticalSpan(gridData.height + 1);
+					for (int i = gridData.x; i < gridData.x + gridData.width; i++) {
+						columnsToIgnore[i] = true;
+					}
+				}
+			}
+			// add fillers for new row
+			for (int i = 0; i < columnCount; i++) {
+				if (!columnsToIgnore[i]) {
+					addFiller(i, row);
+				}
+			}
+		}
+		// insert column
+		if (insertColumn) {
+			// update GridData for all controls
+			boolean[] rowsToIgnore = new boolean[rowCount];
+			for (ControlInfo control : getControls()) {
+				GridDataInfo gridData = getGridData(control);
+				//
+				if (gridData.x >= column) {
+					gridData.x++;
+				} else if (gridData.x + gridData.width > column) {
+					gridData.setHorizontalSpan(gridData.width + 1);
+					for (int i = gridData.y; i < gridData.y + gridData.height; i++) {
+						rowsToIgnore[i] = true;
+					}
+				}
+			}
+			// insert fillers for new column
+			getPropertyByTitle("numColumns").setValue(columnCount + 1);
+			for (int i = 0; i < rowCount; i++) {
+				if (!rowsToIgnore[i]) {
+					addFiller(column, i);
+				}
+			}
+		}
+	}
+
+	@Override
+	public void command_setCells(ControlInfo control, Rectangle cells, boolean forMove)
+			throws Exception {
+		GridDataInfo gridData = getGridData(control);
+		// prepare grid
+		ControlInfo[][] grid = getControlsGrid();
+		Set<Point> cellsToAddFillers = Sets.newHashSet();
+		Set<Point> cellsToRemoveFillers = Sets.newHashSet();
+		// replace control with fillers
+		if (forMove) {
+			for (int x = gridData.x; x < gridData.x + gridData.width; x++) {
+				for (int y = gridData.y; y < gridData.y + gridData.height; y++) {
+					Point cell = new Point(x, y);
+					cellsToAddFillers.add(cell);
+				}
+			}
+		}
+		// remove fillers from occupied cells
+		for (int x = cells.x; x < cells.right(); x++) {
+			for (int y = cells.y; y < cells.bottom(); y++) {
+				Point cell = new Point(x, y);
+				cellsToAddFillers.remove(cell);
+				if (isFiller(grid[y][x])) {
+					cellsToRemoveFillers.add(cell);
+				}
+			}
+		}
+		// do edit operations
+		startEdit();
+		try {
+			// move
+			if (gridData.x != cells.x || gridData.y != cells.y) {
+				// update GridData
+				{
+					gridData.x = cells.x;
+					gridData.y = cells.y;
+				}
+				// move model
+				{
+					ControlInfo reference = getReferenceControl(cells.y, cells.x, control);
+					command_MOVE(control, reference);
+				}
+			}
+			// set span
+			{
+				gridData.setHorizontalSpan(cells.width);
+				gridData.setVerticalSpan(cells.height);
+			}
+			// remove fillers
+			for (Point cell : cellsToRemoveFillers) {
+				ControlInfo filler = grid[cell.y][cell.x];
+				filler.delete();
+			}
+			// add fillers
+			for (Point cell : cellsToAddFillers) {
+				addFiller(cell.x, cell.y);
+			}
+		} finally {
+			endEdit();
+		}
+	}
+
+	@Override
+	public void command_setSizeHint(ControlInfo control, boolean horizontal, Dimension size)
+			throws Exception {
+		startEdit();
+		try {
+			GridDataInfo gridData = getGridData(control);
+			if (horizontal) {
+				gridData.setWidthHint(size.width);
+			} else {
+				gridData.setHeightHint(size.height);
+			}
+		} finally {
+			endEdit();
+		}
+	}
+
+	/**
+	 * @return the {@link Point} with size of controls grid.
+	 */
+	private Dimension getControlsGridSize() {
+		int columnCount = 0;
+		int rowCount = 0;
+		// when we just refreshed, we can use "numColumns" from GridLayout object
+		if (m_useObjectColumnCount) {
+			columnCount = getNumColumns();
+		}
+		// use implicit controls
+		{
+			Dimension implicitGridSize = getImplicitGridSize();
+			columnCount = Math.max(columnCount, implicitGridSize.width);
+			rowCount = implicitGridSize.height;
+		}
+		// use explicit controls
+		for (ControlInfo control : getControls()) {
+			GridDataInfo gridData = getGridData(control);
+			columnCount = Math.max(columnCount, gridData.x + gridData.width);
+			rowCount = Math.max(rowCount, gridData.y + gridData.height);
+		}
+		// OK, we have grid
+		return new Dimension(columnCount, rowCount);
+	}
+
+	/**
+	 * @return the size of {@link #m_controlsImplicit} grid.
+	 */
+	private Dimension getImplicitGridSize() {
+		int columnCount = 0;
+		int rowCount = 0;
+		for (Object control : m_controlsImplicit) {
+			Rectangle cells = getImplicitControlCells(control);
+			columnCount = Math.max(columnCount, cells.right());
+			rowCount = Math.max(rowCount, cells.bottom());
+		}
+		return new Dimension(columnCount, rowCount);
+	}
+
+	/**
+	 * @return the cells of given {@link Control}.
+	 */
+	private Rectangle getImplicitControlCells(Object control) {
+		Object layout = getObject();
+		Point xy = GridLayoutSupport.getXY(layout, control);
+		// may be excluded
+		if (xy == null) {
+			return new Rectangle();
+		}
+		// continue
+		Dimension wh = GridLayoutSupport.getWH(layout, control);
+		return new Rectangle(xy.x, xy.y, wh.width, wh.height);
+	}
+
+	/**
+	 * @return the double array of {@link ControlInfo} where each element contains {@link ControlInfo}
+	 *         that occupies this cell.
+	 */
+	private ControlInfo[][] getControlsGrid() throws Exception {
+		Dimension gridSize = getControlsGridSize();
+		// prepare empty grid
+		ControlInfo[][] grid;
+		{
+			grid = new ControlInfo[gridSize.height][];
+			for (int rowIndex = 0; rowIndex < grid.length; rowIndex++) {
+				grid[rowIndex] = new ControlInfo[gridSize.width];
+			}
+		}
+		// fill grid
+		for (ControlInfo control : getControls()) {
+			// prepare cells
+			Rectangle cells;
+			{
+				GridDataInfo gridData = getGridData(control);
+				cells = new Rectangle(gridData.x, gridData.y, gridData.width, gridData.height);
+			}
+			// fill grid cells
+			for (int x = cells.x; x < cells.right(); x++) {
+				for (int y = cells.y; y < cells.bottom(); y++) {
+					// ignore newly added controls without real cell
+					if (x != -1 && y != -1) {
+						grid[y][x] = control;
+					}
+				}
+			}
+		}
+		// OK, we have grid
+		return grid;
+	}
+
+	/**
+	 * "Fixes" grid, i.e. ensures that all cells are filled (at least with fillers), even if this is
+	 * not strongly required by layout itself for final cells. We do this to avoid checks for
+	 * <code>null</code> in many places.
+	 */
+	@Override
+	public void fixGrid() throws Exception {
+		if (JavaInfoUtils.isImplicitlyCreated(this)) {
+			return;
+		}
+		ControlInfo[][] grid = getControlsGrid();
+		for (int row = 0; row < grid.length; row++) {
+			for (int column = 0; column < grid[row].length; column++) {
+				if (isEmptyCell(grid, row, column)) {
+					addFiller(column, row);
+				}
+			}
+		}
+	}
+
+	private boolean isEmptyCell(ControlInfo[][] grid, int row, int column) {
+		{
+			Object layoutObject = getObject();
+			for (Object control : m_controlsImplicit) {
+				Point point = GridLayoutSupport.getXY(layoutObject, control);
+				if (point != null && point.x == column && point.y == row) {
+					return false;
+				}
+			}
+		}
+		return grid[row][column] == null;
+	}
+
+	/**
+	 * @return the {@link ControlInfo} that should be used as reference of adding into specified cell.
+	 *
+	 * @param exclude
+	 *          the {@link ControlInfo} that should not be checked, for example because we move it now
+	 */
+	private ControlInfo getReferenceControl(int row, int column, ControlInfo exclude)
+			throws Exception {
+		for (ControlInfo control : getControls()) {
+			if (control != exclude) {
+				GridDataInfo gridData = getGridData(control);
+				if (gridData.y > row || gridData.y == row && gridData.x >= column) {
+					return control;
+				}
+			}
+		}
+		// no reference
+		return null;
+	}
+
+	/**
+	 * Adds filler {@link ControlInfo} into given cell.
+	 */
+	private void addFiller(int column, int row) throws Exception {
+		// prepare creation support
+		ConstructorCreationSupport creationSupport = new ConstructorCreationSupport(null, false);
+		// prepare filler
+		ControlInfo filler = (ControlInfo) JavaInfoUtils.createJavaInfo(
+				getEditor(),
+				LabelSupport.getLabelClass(),
+				creationSupport);
+		// add filler
+		ControlInfo reference = getReferenceControl(row, column, null);
+		JavaInfoUtils.add(
+				filler,
+				new EmptyPureVariableSupport(filler),
+				PureFlatStatementGenerator.INSTANCE,
+				null,
+				getComposite(),
+				reference);
+		// set x/y for new filler
+		GridDataInfo gridData = getGridData(filler);
+		gridData.x = column;
+		gridData.y = row;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Automatic alignment
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Performs automatic alignment, such as grab/fill for Text/Table/etc, right alignment for Label.
+	 */
+	private void doAutomaticAlignment(ControlInfo control) throws Exception {
+		final IPreferenceStore preferences = getDescription().getToolkit().getPreferences();
+		GridAlignmentHelper.doAutomaticAlignment(control, new IAlignmentProcessor<ControlInfo>() {
+			@Override
+			public boolean grabEnabled() {
+				return preferences.getBoolean(P_ENABLE_GRAB);
+			}
+
+			@Override
+			public boolean rightEnabled() {
+				return preferences.getBoolean(P_ENABLE_RIGHT_ALIGNMENT);
+			}
+
+			@Override
+			public ControlInfo getComponentAtLeft(ControlInfo component) {
+				GridDataInfo gridData = getGridData(component);
+				return getControlAt(gridData.x - 1, gridData.y);
+			}
+
+			@Override
+			public ControlInfo getComponentAtRight(ControlInfo component) {
+				GridDataInfo gridData = getGridData(component);
+				return getControlAt(gridData.x + 1, gridData.y);
+			}
+
+			@Override
+			public void setGrabFill(ControlInfo component, boolean horizontal) throws Exception {
+				GridDataInfo gridData = getGridData(component);
+				if (horizontal) {
+					gridData.setHorizontalGrab(true);
+					gridData.setHorizontalAlignment(SWT.FILL);
+				} else {
+					gridData.setVerticalGrab(true);
+					gridData.setVerticalAlignment(SWT.FILL);
+				}
+			}
+
+			@Override
+			public void setRightAlignment(ControlInfo component) throws Exception {
+				GridDataInfo gridData = getGridData(component);
+				gridData.setHorizontalAlignment(SWT.RIGHT);
+			}
+		});
+	}
+
+	/**
+	 * @return the {@link ControlInfo} with given top-left cell, may be <code>null</code>.
+	 */
+	private ControlInfo getControlAt(int x, int y) {
+		for (ControlInfo control : getControls()) {
+			if (!isFiller(control)) {
+				GridDataInfo gridData = getGridData(control);
+				if (gridData.x == x && gridData.y == y) {
+					return control;
+				}
+			}
+		}
+		return null;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IGridInfo support
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final int VIRTUAL_SIZE = 25;
+	public static final int VIRTUAL_GAP = 5;
+	private IGridInfo m_gridInfo;
+	private int[] m_columnOrigins;
+	private int[] m_rowOrigins;
+	private int[] m_columnWidths;
+	private int[] m_rowHeights;
+
+	@Override
+	public IGridInfo getGridInfo() {
+		if (m_gridInfo == null) {
+			ExecutionUtils.runRethrow(new RunnableEx() {
+				@Override
+				public void run() throws Exception {
+					createGridInfo();
+				}
+			});
+		}
+		return m_gridInfo;
+	}
+
+	/**
+	 * @return the origins of the columns.
+	 */
+	public int[] getColumnOrigins() {
+		return m_columnOrigins;
+	}
+
+	/**
+	 * @return the origins of the rows.
+	 */
+	public int[] getRowOrigins() {
+		return m_rowOrigins;
+	}
+
+	/**
+	 * Initializes {@link #m_gridInfo}.
+	 */
+	private void createGridInfo() throws Exception {
+		// prepare intervals
+		final Interval[] columnIntervals = getIntervals(m_columnOrigins, m_columnWidths);
+		final Interval[] rowIntervals = getIntervals(m_rowOrigins, m_rowHeights);
+		// prepare cells
+		final Map<ControlInfo, Rectangle> componentToCells = Maps.newHashMap();
+		final Map<Point, ControlInfo> occupiedCells = Maps.newHashMap();
+		{
+			for (ControlInfo control : getControls()) {
+				// ignore filler
+				if (isFiller(control)) {
+					continue;
+				}
+				// prepare cells
+				Rectangle cells;
+				{
+					GridDataInfo gridData = getGridData(control);
+					cells = new Rectangle(gridData.x, gridData.y, gridData.width, gridData.height);
+				}
+				// fill map: ControlInfo -> cells Rectangle
+				componentToCells.put(control, cells);
+				// fill occupied cells map: cell -> ControlInfo
+				fillOccupiedCells(occupiedCells, control, cells);
+			}
+			for (Object control : m_controlsImplicit) {
+				Rectangle cells = getImplicitControlCells(control);
+				fillOccupiedCells(occupiedCells, getComposite(), cells);
+			}
+		}
+		// create IGridInfo instance
+		m_gridInfo = new IGridInfo() {
+			////////////////////////////////////////////////////////////////////////////
+			//
+			// Dimensions
+			//
+			////////////////////////////////////////////////////////////////////////////
+			@Override
+			public int getColumnCount() {
+				return columnIntervals.length;
+			}
+
+			@Override
+			public int getRowCount() {
+				return rowIntervals.length;
+			}
+
+			////////////////////////////////////////////////////////////////////////////
+			//
+			// Intervals
+			//
+			////////////////////////////////////////////////////////////////////////////
+			@Override
+			public Interval[] getColumnIntervals() {
+				return columnIntervals;
+			}
+
+			@Override
+			public Interval[] getRowIntervals() {
+				return rowIntervals;
+			}
+
+			////////////////////////////////////////////////////////////////////////////
+			//
+			// Cells
+			//
+			////////////////////////////////////////////////////////////////////////////
+			@Override
+			public Rectangle getComponentCells(IAbstractComponentInfo component) {
+				Assert.instanceOf(ControlInfo.class, component);
+				return componentToCells.get(component);
+			}
+
+			@Override
+			public Rectangle getCellsRectangle(Rectangle cells) {
+				int x = columnIntervals[cells.x].begin();
+				int y = rowIntervals[cells.y].begin();
+				int w = columnIntervals[cells.right() - 1].end() - x;
+				int h = rowIntervals[cells.bottom() - 1].end() - y;
+				return new Rectangle(x, y, w, h);
+			}
+
+			////////////////////////////////////////////////////////////////////////////
+			//
+			// Feedback
+			//
+			////////////////////////////////////////////////////////////////////////////
+			@Override
+			public boolean isRTL() {
+				return getComposite().isRTL();
+			}
+
+			@Override
+			public Insets getInsets() {
+				return getComposite().getClientAreaInsets2();
+			}
+
+			////////////////////////////////////////////////////////////////////////////
+			//
+			// Virtual columns
+			//
+			////////////////////////////////////////////////////////////////////////////
+			@Override
+			public boolean hasVirtualColumns() {
+				return true;
+			}
+
+			@Override
+			public int getVirtualColumnSize() {
+				return VIRTUAL_SIZE;
+			}
+
+			@Override
+			public int getVirtualColumnGap() {
+				return VIRTUAL_GAP;
+			}
+
+			////////////////////////////////////////////////////////////////////////////
+			//
+			// Virtual columns
+			//
+			////////////////////////////////////////////////////////////////////////////
+			@Override
+			public boolean hasVirtualRows() {
+				return true;
+			}
+
+			@Override
+			public int getVirtualRowSize() {
+				return VIRTUAL_SIZE;
+			}
+
+			@Override
+			public int getVirtualRowGap() {
+				return VIRTUAL_GAP;
+			}
+
+			////////////////////////////////////////////////////////////////////////////
+			//
+			// Checks
+			//
+			////////////////////////////////////////////////////////////////////////////
+			@Override
+			public IAbstractComponentInfo getOccupied(int column, int row) {
+				return occupiedCells.get(new Point(column, row));
+			}
+		};
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the array of {@link Interval}'s for given arrays of origins/sizes.
+	 */
+	private static Interval[] getIntervals(int[] origins, int[] sizes) {
+		if (origins == null) {
+			return new Interval[]{};
+		}
+		Interval[] intervals = new Interval[origins.length];
+		for (int i = 0; i < intervals.length; i++) {
+			intervals[i] = new Interval(origins[i], sizes[i]);
+		}
+		return intervals;
+	}
+
+	private void fillOccupiedCells(Map<Point, ControlInfo> occupiedCells,
+			ControlInfo control,
+			Rectangle cells) {
+		for (int x = cells.x; x < cells.right(); x++) {
+			for (int y = cells.y; y < cells.bottom(); y++) {
+				occupiedCells.put(new Point(x, y), control);
+			}
+		}
+	}
+
+	@Override
+	public boolean isFiller(ControlInfo control) {
+		return control != null
+				&& isLabel(control)
+				&& control.getCreationSupport() instanceof ConstructorCreationSupport
+				&& control.getVariableSupport() instanceof EmptyVariableSupport
+				&& control.getMethodInvocations().isEmpty();
+	}
+
+	private static boolean isLabel(ControlInfo control) {
+		Class<?> componentClass = control.getDescription().getComponentClass();
+		return componentClass.getName().equals("org.eclipse.swt.widgets.Label");
+	}
+
+	//////////////////////////////////////////////////////////////////////////
+	//
+	// Clipboard
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void clipboardCopy_addControlCommands(ControlInfo control,
+			List<ClipboardCommand> commands) throws Exception {
+		if (!isFiller(control)) {
+			GridDataInfo gridData = getGridData(control);
+			final int column = gridData.x;
+			final int row = gridData.y;
+			// command for adding Control
+			commands.add(new LayoutClipboardCommand<GridLayoutInfo>(control) {
+				private static final long serialVersionUID = 0L;
+
+				@Override
+				protected void add(GridLayoutInfo layout, ControlInfo control) throws Exception {
+					layout.command_CREATE(control, column, false, row, false);
+				}
+			});
+			// command for GridData
+			commands.add(new LayoutDataClipboardCommand(this, control));
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Manage general layout data
+	//
+	////////////////////////////////////////////////////////////////////////////
+	static final BiMap<GeneralLayoutData.HorizontalAlignment, Integer> m_horizontalAlignmentMap =
+			ImmutableBiMap.of(
+					GeneralLayoutData.HorizontalAlignment.LEFT,
+					SWT.LEFT,
+					GeneralLayoutData.HorizontalAlignment.CENTER,
+					SWT.CENTER,
+					GeneralLayoutData.HorizontalAlignment.RIGHT,
+					SWT.RIGHT,
+					GeneralLayoutData.HorizontalAlignment.FILL,
+					SWT.FILL);
+	static final BiMap<GeneralLayoutData.VerticalAlignment, Integer> m_verticalAlignmentMap =
+			ImmutableBiMap.of(
+					GeneralLayoutData.VerticalAlignment.TOP,
+					SWT.TOP,
+					GeneralLayoutData.VerticalAlignment.CENTER,
+					SWT.CENTER,
+					GeneralLayoutData.VerticalAlignment.BOTTOM,
+					SWT.BOTTOM,
+					GeneralLayoutData.VerticalAlignment.FILL,
+					SWT.FILL);
+
+	@Override
+	protected void storeLayoutData(ControlInfo control, LayoutDataInfo layoutData) throws Exception {
+		GridDataInfo gridLayoutData = (GridDataInfo) layoutData;
+		GeneralLayoutData generalLayoutData = new GeneralLayoutData();
+		generalLayoutData.gridX = gridLayoutData.x;
+		generalLayoutData.gridY = gridLayoutData.y;
+		generalLayoutData.spanX =
+				(Integer) GeneralLayoutData.getLayoutPropertyValue(gridLayoutData, "horizontalSpan");
+		generalLayoutData.spanY =
+				(Integer) GeneralLayoutData.getLayoutPropertyValue(gridLayoutData, "verticalSpan");
+		generalLayoutData.horizontalGrab = (Boolean) GeneralLayoutData.getLayoutPropertyValue(
+				gridLayoutData,
+				"grabExcessHorizontalSpace");
+		generalLayoutData.verticalGrab = (Boolean) GeneralLayoutData.getLayoutPropertyValue(
+				gridLayoutData,
+				"grabExcessVerticalSpace");
+		// alignments
+		generalLayoutData.horizontalAlignment = GeneralLayoutData.getGeneralValue(
+				m_horizontalAlignmentMap,
+				(Integer) GeneralLayoutData.getLayoutPropertyValue(gridLayoutData, "horizontalAlignment"));
+		generalLayoutData.verticalAlignment = GeneralLayoutData.getGeneralValue(
+				m_verticalAlignmentMap,
+				(Integer) GeneralLayoutData.getLayoutPropertyValue(gridLayoutData, "verticalAlignment"));
+		generalLayoutData.putToInfo(control);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/grid/GridLayoutSurroundProcessor.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/grid/GridLayoutSurroundProcessor.java
index 5960e5600..4f47da3ec 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/grid/GridLayoutSurroundProcessor.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/grid/GridLayoutSurroundProcessor.java
@@ -30,80 +30,80 @@
  * @coverage swt.model.layout
  */
 public final class GridLayoutSurroundProcessor
-    implements
-      ISurroundProcessor<CompositeInfo, ControlInfo> {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final Object INSTANCE = new GridLayoutSurroundProcessor();
+implements
+ISurroundProcessor<CompositeInfo, ControlInfo> {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final Object INSTANCE = new GridLayoutSurroundProcessor();
 
-  private GridLayoutSurroundProcessor() {
-  }
+	private GridLayoutSurroundProcessor() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ISurroundProcessor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean filter(CompositeInfo sourceContainer, CompositeInfo targetContainer)
-      throws Exception {
-    String targetClassName = targetContainer.getDescription().getComponentClass().getName();
-    boolean isComposite = targetClassName.equals("org.eclipse.swt.widgets.Composite");
-    boolean isGroup = targetClassName.equals("org.eclipse.swt.widgets.Group");
-    return sourceContainer.hasLayout()
-        && sourceContainer.getLayout() instanceof GridLayoutInfo
-        && (isComposite || isGroup);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ISurroundProcessor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean filter(CompositeInfo sourceContainer, CompositeInfo targetContainer)
+			throws Exception {
+		String targetClassName = targetContainer.getDescription().getComponentClass().getName();
+		boolean isComposite = targetClassName.equals("org.eclipse.swt.widgets.Composite");
+		boolean isGroup = targetClassName.equals("org.eclipse.swt.widgets.Group");
+		return sourceContainer.hasLayout()
+				&& sourceContainer.getLayout() instanceof GridLayoutInfo
+				&& (isComposite || isGroup);
+	}
 
-  @Override
-  public void move(CompositeInfo sourceContainer,
-      CompositeInfo targetContainer,
-      List<ControlInfo> components) throws Exception {
-    // set GridLayout for target
-    GridLayoutInfo targetLayout;
-    {
-      targetLayout =
-          (GridLayoutInfo) JavaInfoUtils.createJavaInfo(
-              targetContainer.getEditor(),
-              "org.eclipse.swt.layout.GridLayout",
-              new ConstructorCreationSupport());
-      targetContainer.setLayout(targetLayout);
-    }
-    // prepare cells of "targetContainer"
-    Point locationOffset;
-    {
-      Rectangle targetBounds =
-          (Rectangle) targetContainer.getArbitraryValue(GridLayoutSurroundSupport.CELLS_KEY);
-      locationOffset = targetBounds.getLocation().getNegated();
-      //
-      targetLayout.prepareCell(targetBounds.width - 1, false, targetBounds.height - 1, false);
-    }
-    // move components
-    for (ControlInfo component : components) {
-      // remember old alignments
-      int horizontalAlignment;
-      int verticalAlignment;
-      {
-        GridDataInfo gridData = GridLayoutInfo.getGridData(component);
-        horizontalAlignment = gridData.getHorizontalAlignment();
-        verticalAlignment = gridData.getVerticalAlignment();
-      }
-      // move component
-      {
-        Rectangle cells = GridLayoutSurroundSupport.getCells(component);
-        cells = cells.getTranslated(locationOffset);
-        targetLayout.command_ADD(component, cells.x, false, cells.y, false);
-        targetLayout.command_setCells(component, cells, false);
-      }
-      // set old alignments
-      {
-        GridDataInfo gridData = GridLayoutInfo.getGridData(component);
-        gridData.setHorizontalAlignment(horizontalAlignment);
-        gridData.setVerticalAlignment(verticalAlignment);
-      }
-    }
-  }
+	@Override
+	public void move(CompositeInfo sourceContainer,
+			CompositeInfo targetContainer,
+			List<ControlInfo> components) throws Exception {
+		// set GridLayout for target
+		GridLayoutInfo targetLayout;
+		{
+			targetLayout =
+					(GridLayoutInfo) JavaInfoUtils.createJavaInfo(
+							targetContainer.getEditor(),
+							"org.eclipse.swt.layout.GridLayout",
+							new ConstructorCreationSupport());
+			targetContainer.setLayout(targetLayout);
+		}
+		// prepare cells of "targetContainer"
+		Point locationOffset;
+		{
+			Rectangle targetBounds =
+					(Rectangle) targetContainer.getArbitraryValue(GridLayoutSurroundSupport.CELLS_KEY);
+			locationOffset = targetBounds.getLocation().getNegated();
+			//
+			targetLayout.prepareCell(targetBounds.width - 1, false, targetBounds.height - 1, false);
+		}
+		// move components
+		for (ControlInfo component : components) {
+			// remember old alignments
+			int horizontalAlignment;
+			int verticalAlignment;
+			{
+				GridDataInfo gridData = GridLayoutInfo.getGridData(component);
+				horizontalAlignment = gridData.getHorizontalAlignment();
+				verticalAlignment = gridData.getVerticalAlignment();
+			}
+			// move component
+			{
+				Rectangle cells = GridLayoutSurroundSupport.getCells(component);
+				cells = cells.getTranslated(locationOffset);
+				targetLayout.command_ADD(component, cells.x, false, cells.y, false);
+				targetLayout.command_setCells(component, cells, false);
+			}
+			// set old alignments
+			{
+				GridDataInfo gridData = GridLayoutInfo.getGridData(component);
+				gridData.setHorizontalAlignment(horizontalAlignment);
+				gridData.setVerticalAlignment(verticalAlignment);
+			}
+		}
+	}
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/grid/GridLayoutSurroundSupport.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/grid/GridLayoutSurroundSupport.java
index c2c0f9d8d..789720f95 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/grid/GridLayoutSurroundSupport.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/grid/GridLayoutSurroundSupport.java
@@ -26,85 +26,85 @@
  * @coverage swt.model.layout
  */
 public final class GridLayoutSurroundSupport extends LayoutSurroundSupport {
-  static final String CELLS_KEY = "SurroundSupport_CELLS";
-  private final GridLayoutInfo m_layout;
+	static final String CELLS_KEY = "SurroundSupport_CELLS";
+	private final GridLayoutInfo m_layout;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public GridLayoutSurroundSupport(GridLayoutInfo layout) {
-    super(layout);
-    m_layout = layout;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public GridLayoutSurroundSupport(GridLayoutInfo layout) {
+		super(layout);
+		m_layout = layout;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Operation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Rectangle m_enclosingCells;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Operation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Rectangle m_enclosingCells;
 
-  @Override
-  protected boolean validateComponents(List<ControlInfo> components) throws Exception {
-    if (!super.validateComponents(components)) {
-      return false;
-    }
-    // prepare enclosing bounds
-    {
-      m_enclosingCells = getCells(components.get(0));
-      for (ControlInfo component : components) {
-        m_enclosingCells.union(getCells(component));
-      }
-    }
-    // check that there are no other controls in enclosing bounds
-    for (ControlInfo control : m_layout.getControls()) {
-      if (!components.contains(control)
-          && !m_layout.isFiller(control)
-          && m_enclosingCells.intersects(getCells(control))) {
-        return false;
-      }
-    }
-    // OK
-    return true;
-  }
+	@Override
+	protected boolean validateComponents(List<ControlInfo> components) throws Exception {
+		if (!super.validateComponents(components)) {
+			return false;
+		}
+		// prepare enclosing bounds
+		{
+			m_enclosingCells = getCells(components.get(0));
+			for (ControlInfo component : components) {
+				m_enclosingCells.union(getCells(component));
+			}
+		}
+		// check that there are no other controls in enclosing bounds
+		for (ControlInfo control : m_layout.getControls()) {
+			if (!components.contains(control)
+					&& !m_layout.isFiller(control)
+					&& m_enclosingCells.intersects(getCells(control))) {
+				return false;
+			}
+		}
+		// OK
+		return true;
+	}
 
-  @Override
-  protected void addContainer(CompositeInfo container, List<ControlInfo> components)
-      throws Exception {
-    container.putArbitraryValue(CELLS_KEY, m_enclosingCells);
-    // add container
-    int targetRow = m_layout.getRows().size();
-    m_layout.command_CREATE(container, 0, false, targetRow, false);
-    m_layout.setRemoveEmptyColumnsRows(false);
-  }
+	@Override
+	protected void addContainer(CompositeInfo container, List<ControlInfo> components)
+			throws Exception {
+		container.putArbitraryValue(CELLS_KEY, m_enclosingCells);
+		// add container
+		int targetRow = m_layout.getRows().size();
+		m_layout.command_CREATE(container, 0, false, targetRow, false);
+		m_layout.setRemoveEmptyColumnsRows(false);
+	}
 
-  @Override
-  protected void moveDone(CompositeInfo container, List<ControlInfo> components) throws Exception {
-    super.moveDone(container, components);
-    m_layout.setRemoveEmptyColumnsRows(true);
-    // move "container"
-    m_layout.command_setCells(container, m_enclosingCells, true);
-    {
-      GridDataInfo gridData = GridLayoutInfo.getGridData(container);
-      gridData.setHorizontalAlignment(SWT.FILL);
-      gridData.setVerticalAlignment(SWT.FILL);
-    }
-    // "container" may be only component in some columns/rows, so no need for spanning
-    m_layout.command_normalizeSpanning();
-  }
+	@Override
+	protected void moveDone(CompositeInfo container, List<ControlInfo> components) throws Exception {
+		super.moveDone(container, components);
+		m_layout.setRemoveEmptyColumnsRows(true);
+		// move "container"
+		m_layout.command_setCells(container, m_enclosingCells, true);
+		{
+			GridDataInfo gridData = GridLayoutInfo.getGridData(container);
+			gridData.setHorizontalAlignment(SWT.FILL);
+			gridData.setVerticalAlignment(SWT.FILL);
+		}
+		// "container" may be only component in some columns/rows, so no need for spanning
+		m_layout.command_normalizeSpanning();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link Rectangle} with grid bounds, i.e. column/row plus width/height span.
-   */
-  static Rectangle getCells(ControlInfo control) throws Exception {
-    GridDataInfo gridData = GridLayoutInfo.getGridData(control);
-    return new Rectangle(gridData.x, gridData.y, gridData.width, gridData.height);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link Rectangle} with grid bounds, i.e. column/row plus width/height span.
+	 */
+	static Rectangle getCells(ControlInfo control) throws Exception {
+		GridDataInfo gridData = GridLayoutInfo.getGridData(control);
+		return new Rectangle(gridData.x, gridData.y, gridData.width, gridData.height);
+	}
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/grid/GridRowInfo.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/grid/GridRowInfo.java
index c0b24a870..2cce44015 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/grid/GridRowInfo.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/grid/GridRowInfo.java
@@ -21,75 +21,75 @@
  * @coverage swt.model.layout
  */
 public final class GridRowInfo<C extends IControlInfo> extends GridDimensionInfo<C> {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public GridRowInfo(IGridLayoutInfo<C> layout) {
-    super(layout);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public GridRowInfo(IGridLayoutInfo<C> layout) {
+		super(layout);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Grab
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected boolean getGrab(IGridDataInfo gridData) {
-    return gridData.getVerticalGrab();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Grab
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected boolean getGrab(IGridDataInfo gridData) {
+		return gridData.getVerticalGrab();
+	}
 
-  @Override
-  protected void setGrab(IGridDataInfo gridData, boolean grab) throws Exception {
-    gridData.setVerticalGrab(grab);
-  }
+	@Override
+	protected void setGrab(IGridDataInfo gridData, boolean grab) throws Exception {
+		gridData.setVerticalGrab(grab);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Alignment
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getAlignmentTitle(int alignment) {
-    if (alignment == SWT.TOP) {
-      return "top";
-    } else if (alignment == SWT.CENTER) {
-      return "center";
-    } else if (alignment == SWT.BOTTOM) {
-      return "bottom";
-    } else {
-      return "fill";
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Alignment
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getAlignmentTitle(int alignment) {
+		if (alignment == SWT.TOP) {
+			return "top";
+		} else if (alignment == SWT.CENTER) {
+			return "center";
+		} else if (alignment == SWT.BOTTOM) {
+			return "bottom";
+		} else {
+			return "fill";
+		}
+	}
 
-  @Override
-  protected int getAlignment(IGridDataInfo gridData) {
-    return gridData.getVerticalAlignment();
-  }
+	@Override
+	protected int getAlignment(IGridDataInfo gridData) {
+		return gridData.getVerticalAlignment();
+	}
 
-  @Override
-  protected void setAlignment(IGridDataInfo gridData, int alignment) throws Exception {
-    gridData.setVerticalAlignment(alignment);
-  }
+	@Override
+	protected void setAlignment(IGridDataInfo gridData, int alignment) throws Exception {
+		gridData.setVerticalAlignment(alignment);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Delete
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void delete() throws Exception {
-    m_layout.command_deleteRow(m_index, true);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Delete
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void delete() throws Exception {
+		m_layout.command_deleteRow(m_index, true);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Processing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected boolean shouldProcessThisControl(IGridDataInfo gridData) {
-    return gridData.getY() == getIndex();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Processing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected boolean shouldProcessThisControl(IGridDataInfo gridData) {
+		return gridData.getY() == getIndex();
+	}
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/grid/IGridDataInfo.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/grid/IGridDataInfo.java
index 421dd3697..5882b239f 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/grid/IGridDataInfo.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/grid/IGridDataInfo.java
@@ -24,128 +24,128 @@
  * @coverage swt.model.layout
  */
 public interface IGridDataInfo extends IObjectInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Location
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return x/column.
-   */
-  int getX();
-
-  /**
-   * Sets x/column.
-   */
-  void setX(int x);
-
-  /**
-   * @return y/row.
-   */
-  int getY();
-
-  /**
-   * Sets y/row.
-   */
-  void setY(int y);
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Span
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets the horizontal span.
-   */
-  void setHorizontalSpan(int width) throws Exception;
-
-  /**
-   * Sets the vertical span.
-   */
-  void setVerticalSpan(int height) throws Exception;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Grab
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return value of <code>grabExcessHorizontalSpace</code> property.
-   */
-  boolean getHorizontalGrab();
-
-  /**
-   * Sets the value of <code>grabExcessHorizontalSpace</code> property.
-   */
-  void setHorizontalGrab(boolean grab) throws Exception;
-
-  /**
-   * @return value of <code>grabExcessVerticalSpace</code> property.
-   */
-  boolean getVerticalGrab();
-
-  /**
-   * Sets the value of <code>grabExcessVerticalSpace</code> property.
-   */
-  void setVerticalGrab(boolean grab) throws Exception;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Alignment
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return value of <code>horizontalAlignment</code> property.
-   */
-  int getHorizontalAlignment();
-
-  /**
-   * Sets value of <code>horizontalAlignment</code> property.
-   */
-  void setHorizontalAlignment(int alignment) throws Exception;
-
-  /**
-   * @return value of <code>verticalAlignment</code> property.
-   */
-  int getVerticalAlignment();
-
-  /**
-   * Sets of <code>verticalAlignment</code> property.
-   */
-  void setVerticalAlignment(int alignment) throws Exception;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Hint
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets the value of <code>widthHint</code> property.
-   */
-  void setWidthHint(int widthHint) throws Exception;
-
-  /**
-   * Sets the value of <code>heightHint</code> property.
-   */
-  void setHeightHint(int heightHint) throws Exception;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Context menu
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the small {@link Image} that represents horizontal/vertical alignment.
-   */
-  Image getSmallAlignmentImage(boolean horizontal);
-
-  /**
-   * Adds the horizontal alignment {@link Action}'s.
-   */
-  void fillHorizontalAlignmentMenu(IMenuManager manager);
-
-  /**
-   * Adds the vertical alignment {@link Action}'s.
-   */
-  void fillVerticalAlignmentMenu(IMenuManager manager);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Location
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return x/column.
+	 */
+	int getX();
+
+	/**
+	 * Sets x/column.
+	 */
+	void setX(int x);
+
+	/**
+	 * @return y/row.
+	 */
+	int getY();
+
+	/**
+	 * Sets y/row.
+	 */
+	void setY(int y);
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Span
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets the horizontal span.
+	 */
+	void setHorizontalSpan(int width) throws Exception;
+
+	/**
+	 * Sets the vertical span.
+	 */
+	void setVerticalSpan(int height) throws Exception;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Grab
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return value of <code>grabExcessHorizontalSpace</code> property.
+	 */
+	boolean getHorizontalGrab();
+
+	/**
+	 * Sets the value of <code>grabExcessHorizontalSpace</code> property.
+	 */
+	void setHorizontalGrab(boolean grab) throws Exception;
+
+	/**
+	 * @return value of <code>grabExcessVerticalSpace</code> property.
+	 */
+	boolean getVerticalGrab();
+
+	/**
+	 * Sets the value of <code>grabExcessVerticalSpace</code> property.
+	 */
+	void setVerticalGrab(boolean grab) throws Exception;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Alignment
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return value of <code>horizontalAlignment</code> property.
+	 */
+	int getHorizontalAlignment();
+
+	/**
+	 * Sets value of <code>horizontalAlignment</code> property.
+	 */
+	void setHorizontalAlignment(int alignment) throws Exception;
+
+	/**
+	 * @return value of <code>verticalAlignment</code> property.
+	 */
+	int getVerticalAlignment();
+
+	/**
+	 * Sets of <code>verticalAlignment</code> property.
+	 */
+	void setVerticalAlignment(int alignment) throws Exception;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Hint
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets the value of <code>widthHint</code> property.
+	 */
+	void setWidthHint(int widthHint) throws Exception;
+
+	/**
+	 * Sets the value of <code>heightHint</code> property.
+	 */
+	void setHeightHint(int heightHint) throws Exception;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Context menu
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the small {@link Image} that represents horizontal/vertical alignment.
+	 */
+	Image getSmallAlignmentImage(boolean horizontal);
+
+	/**
+	 * Adds the horizontal alignment {@link Action}'s.
+	 */
+	void fillHorizontalAlignmentMenu(IMenuManager manager);
+
+	/**
+	 * Adds the vertical alignment {@link Action}'s.
+	 */
+	void fillVerticalAlignmentMenu(IMenuManager manager);
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/grid/IGridLayoutInfo.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/grid/IGridLayoutInfo.java
index 70ce0ba0a..d5ebdcce9 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/grid/IGridLayoutInfo.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/grid/IGridLayoutInfo.java
@@ -27,142 +27,142 @@
  * @coverage swt.model.layout
  */
 public interface IGridLayoutInfo<C extends IControlInfo> extends ILayoutInfo<C> {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if given {@link IControlInfo} is filler.
-   */
-  boolean isFiller(C control);
-
-  /**
-   * "Fixes" grid, i.e. ensures that all cells are filled (at least with fillers), even if this is
-   * not strongly required by layout itself for final cells. We do this to avoid checks for
-   * <code>null</code> in many places.
-   */
-  void fixGrid() throws Exception;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Dimensions access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link List} of {@link GridColumnInfo}.
-   */
-  List<GridColumnInfo<C>> getColumns();
-
-  /**
-   * @return the {@link List} of {@link GridRowInfo}.
-   */
-  List<GridRowInfo<C>> getRows();
-
-  /**
-   * @return <code>true</code> if dimensions of this layout can be changed. We can change them only
-   *         if we created layout using constructor.
-   */
-  boolean canChangeDimensions();
-
-  /**
-   * @return <code>true</code> if row with given index consists of explicit {@link IControlInfo}s,
-   *         so can be moved and used as insert target.
-   */
-  boolean isExplicitRow(int row);
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Dimensions operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Deletes column with given index and all controls that located in this column.
-   */
-  void command_deleteColumn(int column, boolean deleteEmptyRows) throws Exception;
-
-  /**
-   * Deletes row with given index and all controls that located in this row.
-   */
-  void command_deleteRow(int row, boolean deleteEmptyColumn) throws Exception;
-
-  /**
-   * Moves column from/to given index.
-   */
-  void command_MOVE_COLUMN(int fromIndex, int toIndex) throws Exception;
-
-  /**
-   * Moves row from/to given index.
-   */
-  void command_MOVE_ROW(int fromIndex, int toIndex) throws Exception;
-
-  /**
-   * If there are components that span multiple columns/rows, and no other "real" components in
-   * these columns/rows, then removes these excess columns/rows.
-   */
-  void command_normalizeSpanning() throws Exception;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Creates new {@link IControlInfo} in given cell.
-   *
-   * @param newControl
-   *          the new {@link IControlInfo} to create.
-   * @param column
-   *          the column (0 based).
-   * @param row
-   *          the row (0 based).
-   */
-  void command_CREATE(C newControl, int column, boolean insertColumn, int row, boolean insertRow)
-      throws Exception;
-
-  /**
-   * Moves existing {@link IControlInfo} into new cell.
-   */
-  void command_MOVE(C control, int column, boolean insertColumn, int row, boolean insertRow)
-      throws Exception;
-
-  /**
-   * Adds {@link IControlInfo} from other parent into cell.
-   */
-  void command_ADD(C control, int column, boolean insertColumn, int row, boolean insertRow)
-      throws Exception;
-
-  /**
-   * Sets the cells occupied by given {@link IControlInfo}.
-   *
-   * @param forMove
-   *          is <code>true</code> if we move control and <code>false</code> if we set cells for
-   *          newly added control.
-   */
-  void command_setCells(C control, Rectangle cells, boolean forMove) throws Exception;
-
-  /**
-   * Sets the size hint for given {@link IControlInfo}.
-   */
-  void command_setSizeHint(C control, boolean horizontal, Dimension size) throws Exception;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IGridInfo support
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link IGridInfo} that describes this layout.
-   */
-  IGridInfo getGridInfo();
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Layout data
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return {@link IGridDataInfo} associated with given {@link IControlInfo}.
-   */
-  IGridDataInfo getGridData2(C control);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if given {@link IControlInfo} is filler.
+	 */
+	boolean isFiller(C control);
+
+	/**
+	 * "Fixes" grid, i.e. ensures that all cells are filled (at least with fillers), even if this is
+	 * not strongly required by layout itself for final cells. We do this to avoid checks for
+	 * <code>null</code> in many places.
+	 */
+	void fixGrid() throws Exception;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Dimensions access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link List} of {@link GridColumnInfo}.
+	 */
+	List<GridColumnInfo<C>> getColumns();
+
+	/**
+	 * @return the {@link List} of {@link GridRowInfo}.
+	 */
+	List<GridRowInfo<C>> getRows();
+
+	/**
+	 * @return <code>true</code> if dimensions of this layout can be changed. We can change them only
+	 *         if we created layout using constructor.
+	 */
+	boolean canChangeDimensions();
+
+	/**
+	 * @return <code>true</code> if row with given index consists of explicit {@link IControlInfo}s,
+	 *         so can be moved and used as insert target.
+	 */
+	boolean isExplicitRow(int row);
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Dimensions operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Deletes column with given index and all controls that located in this column.
+	 */
+	void command_deleteColumn(int column, boolean deleteEmptyRows) throws Exception;
+
+	/**
+	 * Deletes row with given index and all controls that located in this row.
+	 */
+	void command_deleteRow(int row, boolean deleteEmptyColumn) throws Exception;
+
+	/**
+	 * Moves column from/to given index.
+	 */
+	void command_MOVE_COLUMN(int fromIndex, int toIndex) throws Exception;
+
+	/**
+	 * Moves row from/to given index.
+	 */
+	void command_MOVE_ROW(int fromIndex, int toIndex) throws Exception;
+
+	/**
+	 * If there are components that span multiple columns/rows, and no other "real" components in
+	 * these columns/rows, then removes these excess columns/rows.
+	 */
+	void command_normalizeSpanning() throws Exception;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Creates new {@link IControlInfo} in given cell.
+	 *
+	 * @param newControl
+	 *          the new {@link IControlInfo} to create.
+	 * @param column
+	 *          the column (0 based).
+	 * @param row
+	 *          the row (0 based).
+	 */
+	void command_CREATE(C newControl, int column, boolean insertColumn, int row, boolean insertRow)
+			throws Exception;
+
+	/**
+	 * Moves existing {@link IControlInfo} into new cell.
+	 */
+	void command_MOVE(C control, int column, boolean insertColumn, int row, boolean insertRow)
+			throws Exception;
+
+	/**
+	 * Adds {@link IControlInfo} from other parent into cell.
+	 */
+	void command_ADD(C control, int column, boolean insertColumn, int row, boolean insertRow)
+			throws Exception;
+
+	/**
+	 * Sets the cells occupied by given {@link IControlInfo}.
+	 *
+	 * @param forMove
+	 *          is <code>true</code> if we move control and <code>false</code> if we set cells for
+	 *          newly added control.
+	 */
+	void command_setCells(C control, Rectangle cells, boolean forMove) throws Exception;
+
+	/**
+	 * Sets the size hint for given {@link IControlInfo}.
+	 */
+	void command_setSizeHint(C control, boolean horizontal, Dimension size) throws Exception;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IGridInfo support
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link IGridInfo} that describes this layout.
+	 */
+	IGridInfo getGridInfo();
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Layout data
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return {@link IGridDataInfo} associated with given {@link IControlInfo}.
+	 */
+	IGridDataInfo getGridData2(C control);
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/grid/IPreferenceConstants.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/grid/IPreferenceConstants.java
index 0e297d3da..6919d0871 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/grid/IPreferenceConstants.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/grid/IPreferenceConstants.java
@@ -19,14 +19,14 @@
  * @coverage swt.model.layout
  */
 public interface IPreferenceConstants {
-  /**
-   * When <code>true</code>, {@link GridLayoutInfo} can use
-   * {@link GridAlignmentHelper#V_GRAB_HORIZONTAL} and {@link GridAlignmentHelper#V_GRAB_VERTICAL}.
-   */
-  String P_ENABLE_GRAB = "GridLayout.enableGrab";
-  /**
-   * When <code>true</code>, {@link GridLayoutInfo} can use
-   * {@link GridAlignmentHelper#V_RIGHT_LABEL} and {@link GridAlignmentHelper#V_RIGHT_TARGET}.
-   */
-  String P_ENABLE_RIGHT_ALIGNMENT = "GridLayout.enableRightAlignment";
+	/**
+	 * When <code>true</code>, {@link GridLayoutInfo} can use
+	 * {@link GridAlignmentHelper#V_GRAB_HORIZONTAL} and {@link GridAlignmentHelper#V_GRAB_VERTICAL}.
+	 */
+	String P_ENABLE_GRAB = "GridLayout.enableGrab";
+	/**
+	 * When <code>true</code>, {@link GridLayoutInfo} can use
+	 * {@link GridAlignmentHelper#V_RIGHT_LABEL} and {@link GridAlignmentHelper#V_RIGHT_TARGET}.
+	 */
+	String P_ENABLE_RIGHT_ALIGNMENT = "GridLayout.enableRightAlignment";
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/grid/actions/AbstractAction.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/grid/actions/AbstractAction.java
index 5d90d9080..eb41bff17 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/grid/actions/AbstractAction.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/grid/actions/AbstractAction.java
@@ -23,26 +23,26 @@
  * @coverage swt.model.layout
  */
 abstract class AbstractAction extends ObjectInfoAction {
-  protected final IGridDataInfo m_gridData;
-  protected final boolean m_horizontal;
+	protected final IGridDataInfo m_gridData;
+	protected final boolean m_horizontal;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractAction(IGridDataInfo gridData,
-      String text,
-      int style,
-      String iconPath,
-      boolean horizontal) {
-    super(gridData.getUnderlyingModel(), text, style);
-    m_gridData = gridData;
-    m_horizontal = horizontal;
-    // set image
-    if (iconPath != null) {
-      String path = "info/layout/GridLayout/" + (horizontal ? "h" : "v") + "/menu/" + iconPath;
-      setImageDescriptor(Activator.getImageDescriptor(path));
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractAction(IGridDataInfo gridData,
+			String text,
+			int style,
+			String iconPath,
+			boolean horizontal) {
+		super(gridData.getUnderlyingModel(), text, style);
+		m_gridData = gridData;
+		m_horizontal = horizontal;
+		// set image
+		if (iconPath != null) {
+			String path = "info/layout/GridLayout/" + (horizontal ? "h" : "v") + "/menu/" + iconPath;
+			setImageDescriptor(Activator.getImageDescriptor(path));
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/grid/actions/ClearHintAction.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/grid/actions/ClearHintAction.java
index c9da87ba8..82ebd149c 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/grid/actions/ClearHintAction.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/grid/actions/ClearHintAction.java
@@ -22,26 +22,26 @@
  * @coverage swt.model.layout
  */
 public final class ClearHintAction extends AbstractAction {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ClearHintAction(IGridDataInfo gridData, String text, boolean horizontal) {
-    super(gridData, text, AS_PUSH_BUTTON, null, horizontal);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ClearHintAction(IGridDataInfo gridData, String text, boolean horizontal) {
+		super(gridData, text, AS_PUSH_BUTTON, null, horizontal);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Run
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void runEx() throws Exception {
-    if (m_horizontal) {
-      m_gridData.setWidthHint(SWT.DEFAULT);
-    } else {
-      m_gridData.setHeightHint(SWT.DEFAULT);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Run
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void runEx() throws Exception {
+		if (m_horizontal) {
+			m_gridData.setWidthHint(SWT.DEFAULT);
+		} else {
+			m_gridData.setHeightHint(SWT.DEFAULT);
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/grid/actions/SelectionActionsSupport.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/grid/actions/SelectionActionsSupport.java
index 09510e556..a944790e9 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/grid/actions/SelectionActionsSupport.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/grid/actions/SelectionActionsSupport.java
@@ -33,285 +33,285 @@
  * @coverage swt.model.layout
  */
 public final class SelectionActionsSupport<C extends IControlInfo> extends ObjectEventListener {
-  private final IGridLayoutInfo<C> m_layout;
+	private final IGridLayoutInfo<C> m_layout;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SelectionActionsSupport(IGridLayoutInfo<C> layout) {
-    m_layout = layout;
-    m_layout.addBroadcastListener(this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SelectionActionsSupport(IGridLayoutInfo<C> layout) {
+		m_layout = layout;
+		m_layout.addBroadcastListener(this);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ObjectEventListener
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void addSelectionActions(List<ObjectInfo> objects, List<Object> actions) throws Exception {
-    if (objects.isEmpty()) {
-      return;
-    }
-    // prepare layout data info's
-    List<IGridDataInfo> dataInfos = Lists.newArrayList();
-    {
-      List<C> controls = m_layout.getControls();
-      for (ObjectInfo object : objects) {
-        // check object
-        if (!controls.contains(object)) {
-          return;
-        }
-        // add data info
-        @SuppressWarnings("unchecked")
-        C control = (C) object;
-        dataInfos.add(m_layout.getGridData2(control));
-      }
-    }
-    // create horizontal actions
-    actions.add(new Separator());
-    addAlignmentAction(
-        actions,
-        dataInfos,
-        true,
-        "left.gif",
-        ModelMessages.SelectionActionsSupport_horLeft,
-        SWT.LEFT);
-    addAlignmentAction(
-        actions,
-        dataInfos,
-        true,
-        "center.gif",
-        ModelMessages.SelectionActionsSupport_horCenter,
-        SWT.CENTER);
-    addAlignmentAction(
-        actions,
-        dataInfos,
-        true,
-        "right.gif",
-        ModelMessages.SelectionActionsSupport_horRight,
-        SWT.RIGHT);
-    addAlignmentAction(
-        actions,
-        dataInfos,
-        true,
-        "fill.gif",
-        ModelMessages.SelectionActionsSupport_horFill,
-        SWT.FILL);
-    // create vertical actions
-    actions.add(new Separator());
-    addAlignmentAction(
-        actions,
-        dataInfos,
-        false,
-        "top.gif",
-        ModelMessages.SelectionActionsSupport_verTop,
-        SWT.TOP);
-    addAlignmentAction(
-        actions,
-        dataInfos,
-        false,
-        "center.gif",
-        ModelMessages.SelectionActionsSupport_verCenter,
-        SWT.CENTER);
-    addAlignmentAction(
-        actions,
-        dataInfos,
-        false,
-        "bottom.gif",
-        ModelMessages.SelectionActionsSupport_verBottom,
-        SWT.BOTTOM);
-    addAlignmentAction(
-        actions,
-        dataInfos,
-        false,
-        "fill.gif",
-        ModelMessages.SelectionActionsSupport_verFill,
-        SWT.FILL);
-    // create grab actions
-    actions.add(new Separator());
-    addGrabAction(
-        actions,
-        dataInfos,
-        true,
-        "grow.gif",
-        ModelMessages.SelectionActionsSupport_horGrab);
-    addGrabAction(
-        actions,
-        dataInfos,
-        false,
-        "grow.gif",
-        ModelMessages.SelectionActionsSupport_verGrab);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ObjectEventListener
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void addSelectionActions(List<ObjectInfo> objects, List<Object> actions) throws Exception {
+		if (objects.isEmpty()) {
+			return;
+		}
+		// prepare layout data info's
+		List<IGridDataInfo> dataInfos = Lists.newArrayList();
+		{
+			List<C> controls = m_layout.getControls();
+			for (ObjectInfo object : objects) {
+				// check object
+				if (!controls.contains(object)) {
+					return;
+				}
+				// add data info
+				@SuppressWarnings("unchecked")
+				C control = (C) object;
+				dataInfos.add(m_layout.getGridData2(control));
+			}
+		}
+		// create horizontal actions
+		actions.add(new Separator());
+		addAlignmentAction(
+				actions,
+				dataInfos,
+				true,
+				"left.gif",
+				ModelMessages.SelectionActionsSupport_horLeft,
+				SWT.LEFT);
+		addAlignmentAction(
+				actions,
+				dataInfos,
+				true,
+				"center.gif",
+				ModelMessages.SelectionActionsSupport_horCenter,
+				SWT.CENTER);
+		addAlignmentAction(
+				actions,
+				dataInfos,
+				true,
+				"right.gif",
+				ModelMessages.SelectionActionsSupport_horRight,
+				SWT.RIGHT);
+		addAlignmentAction(
+				actions,
+				dataInfos,
+				true,
+				"fill.gif",
+				ModelMessages.SelectionActionsSupport_horFill,
+				SWT.FILL);
+		// create vertical actions
+		actions.add(new Separator());
+		addAlignmentAction(
+				actions,
+				dataInfos,
+				false,
+				"top.gif",
+				ModelMessages.SelectionActionsSupport_verTop,
+				SWT.TOP);
+		addAlignmentAction(
+				actions,
+				dataInfos,
+				false,
+				"center.gif",
+				ModelMessages.SelectionActionsSupport_verCenter,
+				SWT.CENTER);
+		addAlignmentAction(
+				actions,
+				dataInfos,
+				false,
+				"bottom.gif",
+				ModelMessages.SelectionActionsSupport_verBottom,
+				SWT.BOTTOM);
+		addAlignmentAction(
+				actions,
+				dataInfos,
+				false,
+				"fill.gif",
+				ModelMessages.SelectionActionsSupport_verFill,
+				SWT.FILL);
+		// create grab actions
+		actions.add(new Separator());
+		addGrabAction(
+				actions,
+				dataInfos,
+				true,
+				"grow.gif",
+				ModelMessages.SelectionActionsSupport_horGrab);
+		addGrabAction(
+				actions,
+				dataInfos,
+				false,
+				"grow.gif",
+				ModelMessages.SelectionActionsSupport_verGrab);
+	}
 
-  private void addAlignmentAction(List<Object> actions,
-      List<IGridDataInfo> dataInfos,
-      boolean horizontal,
-      String iconPath,
-      String tooltip,
-      int alignment) {
-    boolean isChecked = true;
-    // prepare select current value
-    for (IGridDataInfo gridData : dataInfos) {
-      if (horizontal) {
-        if (gridData.getHorizontalAlignment() != alignment) {
-          isChecked = false;
-          break;
-        }
-      } else {
-        if (gridData.getVerticalAlignment() != alignment) {
-          isChecked = false;
-          break;
-        }
-      }
-    }
-    // create action
-    AlignmentAction action =
-        new AlignmentAction(dataInfos, horizontal, iconPath, tooltip, isChecked, alignment);
-    actions.add(action);
-  }
+	private void addAlignmentAction(List<Object> actions,
+			List<IGridDataInfo> dataInfos,
+			boolean horizontal,
+			String iconPath,
+			String tooltip,
+			int alignment) {
+		boolean isChecked = true;
+		// prepare select current value
+		for (IGridDataInfo gridData : dataInfos) {
+			if (horizontal) {
+				if (gridData.getHorizontalAlignment() != alignment) {
+					isChecked = false;
+					break;
+				}
+			} else {
+				if (gridData.getVerticalAlignment() != alignment) {
+					isChecked = false;
+					break;
+				}
+			}
+		}
+		// create action
+		AlignmentAction action =
+				new AlignmentAction(dataInfos, horizontal, iconPath, tooltip, isChecked, alignment);
+		actions.add(action);
+	}
 
-  private void addGrabAction(List<Object> actions,
-      List<IGridDataInfo> dataInfos,
-      boolean horizontal,
-      String iconPath,
-      String tooltip) {
-    boolean isChecked = true;
-    // prepare select current value
-    for (IGridDataInfo gridData : dataInfos) {
-      if (horizontal) {
-        if (!gridData.getHorizontalGrab()) {
-          isChecked = false;
-          break;
-        }
-      } else {
-        if (!gridData.getVerticalGrab()) {
-          isChecked = false;
-          break;
-        }
-      }
-    }
-    // create action
-    GrabAction action =
-        new GrabAction(dataInfos, horizontal, iconPath, tooltip, isChecked, !isChecked);
-    actions.add(action);
-  }
+	private void addGrabAction(List<Object> actions,
+			List<IGridDataInfo> dataInfos,
+			boolean horizontal,
+			String iconPath,
+			String tooltip) {
+		boolean isChecked = true;
+		// prepare select current value
+		for (IGridDataInfo gridData : dataInfos) {
+			if (horizontal) {
+				if (!gridData.getHorizontalGrab()) {
+					isChecked = false;
+					break;
+				}
+			} else {
+				if (!gridData.getVerticalGrab()) {
+					isChecked = false;
+					break;
+				}
+			}
+		}
+		// create action
+		GrabAction action =
+				new GrabAction(dataInfos, horizontal, iconPath, tooltip, isChecked, !isChecked);
+		actions.add(action);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Actions
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private abstract class AbstractAction extends ObjectInfoAction {
-    private final List<IGridDataInfo> m_dataInfos;
-    private final boolean m_horizontal;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Actions
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private abstract class AbstractAction extends ObjectInfoAction {
+		private final List<IGridDataInfo> m_dataInfos;
+		private final boolean m_horizontal;
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public AbstractAction(int style,
-        List<IGridDataInfo> dataInfos,
-        boolean horizontal,
-        String iconPath,
-        String tooltip,
-        boolean checked) {
-      super(m_layout.getUnderlyingModel(), "", style);
-      m_dataInfos = dataInfos;
-      m_horizontal = horizontal;
-      String path = "info/layout/GridLayout/" + (m_horizontal ? "h" : "v") + "/menu/" + iconPath;
-      setImageDescriptor(Activator.getImageDescriptor(path));
-      setToolTipText(tooltip);
-      setChecked(checked);
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public AbstractAction(int style,
+				List<IGridDataInfo> dataInfos,
+				boolean horizontal,
+				String iconPath,
+				String tooltip,
+				boolean checked) {
+			super(m_layout.getUnderlyingModel(), "", style);
+			m_dataInfos = dataInfos;
+			m_horizontal = horizontal;
+			String path = "info/layout/GridLayout/" + (m_horizontal ? "h" : "v") + "/menu/" + iconPath;
+			setImageDescriptor(Activator.getImageDescriptor(path));
+			setToolTipText(tooltip);
+			setChecked(checked);
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Run
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    protected void runEx() throws Exception {
-      for (IGridDataInfo gridData : m_dataInfos) {
-        if (m_horizontal) {
-          handleHorizontal(gridData);
-        } else {
-          handleVertical(gridData);
-        }
-      }
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Run
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		protected void runEx() throws Exception {
+			for (IGridDataInfo gridData : m_dataInfos) {
+				if (m_horizontal) {
+					handleHorizontal(gridData);
+				} else {
+					handleVertical(gridData);
+				}
+			}
+		}
 
-    protected abstract void handleHorizontal(IGridDataInfo gridData) throws Exception;
+		protected abstract void handleHorizontal(IGridDataInfo gridData) throws Exception;
 
-    protected abstract void handleVertical(IGridDataInfo gridData) throws Exception;
-  }
-  private class AlignmentAction extends AbstractAction {
-    private final int m_alignment;
+		protected abstract void handleVertical(IGridDataInfo gridData) throws Exception;
+	}
+	private class AlignmentAction extends AbstractAction {
+		private final int m_alignment;
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public AlignmentAction(List<IGridDataInfo> dataInfos,
-        boolean horizontal,
-        String iconPath,
-        String tooltip,
-        boolean checked,
-        int alignment) {
-      super(AS_RADIO_BUTTON, dataInfos, horizontal, iconPath, tooltip, checked);
-      m_alignment = alignment;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public AlignmentAction(List<IGridDataInfo> dataInfos,
+				boolean horizontal,
+				String iconPath,
+				String tooltip,
+				boolean checked,
+				int alignment) {
+			super(AS_RADIO_BUTTON, dataInfos, horizontal, iconPath, tooltip, checked);
+			m_alignment = alignment;
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // AbstractAction
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    protected void handleHorizontal(IGridDataInfo gridData) throws Exception {
-      gridData.setHorizontalAlignment(m_alignment);
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// AbstractAction
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		protected void handleHorizontal(IGridDataInfo gridData) throws Exception {
+			gridData.setHorizontalAlignment(m_alignment);
+		}
 
-    @Override
-    protected void handleVertical(IGridDataInfo gridData) throws Exception {
-      gridData.setVerticalAlignment(m_alignment);
-    }
-  }
-  private class GrabAction extends AbstractAction {
-    private final boolean m_grab;
+		@Override
+		protected void handleVertical(IGridDataInfo gridData) throws Exception {
+			gridData.setVerticalAlignment(m_alignment);
+		}
+	}
+	private class GrabAction extends AbstractAction {
+		private final boolean m_grab;
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public GrabAction(List<IGridDataInfo> dataInfos,
-        boolean horizontal,
-        String iconPath,
-        String tooltip,
-        boolean checked,
-        boolean grab) {
-      super(AS_CHECK_BOX, dataInfos, horizontal, iconPath, tooltip, checked);
-      m_grab = grab;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public GrabAction(List<IGridDataInfo> dataInfos,
+				boolean horizontal,
+				String iconPath,
+				String tooltip,
+				boolean checked,
+				boolean grab) {
+			super(AS_CHECK_BOX, dataInfos, horizontal, iconPath, tooltip, checked);
+			m_grab = grab;
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // AbstractAction
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    protected void handleHorizontal(IGridDataInfo gridData) throws Exception {
-      gridData.setHorizontalGrab(m_grab);
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// AbstractAction
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		protected void handleHorizontal(IGridDataInfo gridData) throws Exception {
+			gridData.setHorizontalGrab(m_grab);
+		}
 
-    @Override
-    protected void handleVertical(IGridDataInfo gridData) throws Exception {
-      gridData.setVerticalGrab(m_grab);
-    }
-  }
+		@Override
+		protected void handleVertical(IGridDataInfo gridData) throws Exception {
+			gridData.setVerticalGrab(m_grab);
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/grid/actions/SetAlignmentAction.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/grid/actions/SetAlignmentAction.java
index 51f46c29b..eb2d84b9a 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/grid/actions/SetAlignmentAction.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/grid/actions/SetAlignmentAction.java
@@ -21,37 +21,37 @@
  * @coverage swt.model.layout
  */
 public final class SetAlignmentAction extends AbstractAction {
-  private final int m_alignment;
+	private final int m_alignment;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SetAlignmentAction(IGridDataInfo gridData,
-      String text,
-      String iconPath,
-      boolean horizontal,
-      int alignment) {
-    super(gridData, text, AS_RADIO_BUTTON, iconPath, horizontal);
-    m_alignment = alignment;
-    // set check for current alignment
-    int currentAlignment =
-        horizontal ? gridData.getHorizontalAlignment() : gridData.getVerticalAlignment();
-    setChecked(currentAlignment == alignment);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SetAlignmentAction(IGridDataInfo gridData,
+			String text,
+			String iconPath,
+			boolean horizontal,
+			int alignment) {
+		super(gridData, text, AS_RADIO_BUTTON, iconPath, horizontal);
+		m_alignment = alignment;
+		// set check for current alignment
+		int currentAlignment =
+				horizontal ? gridData.getHorizontalAlignment() : gridData.getVerticalAlignment();
+		setChecked(currentAlignment == alignment);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Run
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void runEx() throws Exception {
-    if (m_horizontal) {
-      m_gridData.setHorizontalAlignment(m_alignment);
-    } else {
-      m_gridData.setVerticalAlignment(m_alignment);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Run
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void runEx() throws Exception {
+		if (m_horizontal) {
+			m_gridData.setHorizontalAlignment(m_alignment);
+		} else {
+			m_gridData.setVerticalAlignment(m_alignment);
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/grid/actions/SetGrabAction.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/grid/actions/SetGrabAction.java
index b53bc1e08..b86217034 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/grid/actions/SetGrabAction.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/layout/grid/actions/SetGrabAction.java
@@ -21,27 +21,27 @@
  * @coverage swt.model.layout
  */
 public final class SetGrabAction extends AbstractAction {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SetGrabAction(IGridDataInfo gridData, String text, String iconPath, boolean horizontal) {
-    super(gridData, text, AS_CHECK_BOX, iconPath, horizontal);
-    setChecked(horizontal ? gridData.getHorizontalGrab() : gridData.getVerticalGrab());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SetGrabAction(IGridDataInfo gridData, String text, String iconPath, boolean horizontal) {
+		super(gridData, text, AS_CHECK_BOX, iconPath, horizontal);
+		setChecked(horizontal ? gridData.getHorizontalGrab() : gridData.getVerticalGrab());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Run
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void runEx() throws Exception {
-    if (m_horizontal) {
-      m_gridData.setHorizontalGrab(!m_gridData.getHorizontalGrab());
-    } else {
-      m_gridData.setVerticalGrab(!m_gridData.getVerticalGrab());
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Run
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void runEx() throws Exception {
+		if (m_horizontal) {
+			m_gridData.setHorizontalGrab(!m_gridData.getHorizontalGrab());
+		} else {
+			m_gridData.setVerticalGrab(!m_gridData.getVerticalGrab());
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/TabOrderProperty.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/TabOrderProperty.java
index e51662b03..a6f95a86f 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/TabOrderProperty.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/TabOrderProperty.java
@@ -33,94 +33,94 @@
  * @coverage swt.property.order
  */
 public class TabOrderProperty
-    extends
-      org.eclipse.wb.internal.core.model.property.order.TabOrderProperty {
-  private static final String TAB_METHOD_SIGNATURE =
-      "setTabList(org.eclipse.swt.widgets.Control[])";
-  private static final String TITLE_TOOLTIP = ModelMessages.TabOrderProperty_tooltip;
+extends
+org.eclipse.wb.internal.core.model.property.order.TabOrderProperty {
+	private static final String TAB_METHOD_SIGNATURE =
+			"setTabList(org.eclipse.swt.widgets.Control[])";
+	private static final String TITLE_TOOLTIP = ModelMessages.TabOrderProperty_tooltip;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public TabOrderProperty(CompositeInfo composite) {
-    super(composite);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public TabOrderProperty(CompositeInfo composite) {
+		super(composite);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Value
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected ArrayInitializer getOrderedArray() throws Exception {
-    MethodInvocation invocation = getTabListMethod();
-    if (invocation != null) {
-      Object expression = invocation.arguments().get(0);
-      if (expression instanceof ArrayCreation) {
-        ArrayCreation creation = (ArrayCreation) expression;
-        return creation.getInitializer();
-      }
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Value
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected ArrayInitializer getOrderedArray() throws Exception {
+		MethodInvocation invocation = getTabListMethod();
+		if (invocation != null) {
+			Object expression = invocation.arguments().get(0);
+			if (expression instanceof ArrayCreation) {
+				ArrayCreation creation = (ArrayCreation) expression;
+				return creation.getInitializer();
+			}
+		}
+		return null;
+	}
 
-  @Override
-  protected void removePropertyAssociation() throws Exception {
-    m_container.removeMethodInvocations(TAB_METHOD_SIGNATURE);
-  }
+	@Override
+	protected void removePropertyAssociation() throws Exception {
+		m_container.removeMethodInvocations(TAB_METHOD_SIGNATURE);
+	}
 
-  @Override
-  protected void setOrderedArraySource(String source) throws Exception {
-    String newSource = "new org.eclipse.swt.widgets.Control[]" + source;
-    MethodInvocation invocation = getTabListMethod();
-    if (invocation == null) {
-      m_container.addMethodInvocation(TAB_METHOD_SIGNATURE, newSource);
-    } else {
-      Expression argument = DomGenerics.arguments(invocation).get(0);
-      m_container.replaceExpression(argument, newSource);
-    }
-  }
+	@Override
+	protected void setOrderedArraySource(String source) throws Exception {
+		String newSource = "new org.eclipse.swt.widgets.Control[]" + source;
+		MethodInvocation invocation = getTabListMethod();
+		if (invocation == null) {
+			m_container.addMethodInvocation(TAB_METHOD_SIGNATURE, newSource);
+		} else {
+			Expression argument = DomGenerics.arguments(invocation).get(0);
+			m_container.replaceExpression(argument, newSource);
+		}
+	}
 
-  private MethodInvocation getTabListMethod() {
-    return m_container.getMethodInvocation(TAB_METHOD_SIGNATURE);
-  }
+	private MethodInvocation getTabListMethod() {
+		return m_container.getMethodInvocation(TAB_METHOD_SIGNATURE);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Children
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected List<? extends AbstractComponentInfo> getTabPossibleChildren() throws Exception {
-    CompositeInfo composite = (CompositeInfo) m_container;
-    List<AbstractComponentInfo> children = Lists.newArrayList();
-    for (AbstractComponentInfo child : composite.getChildrenControls()) {
-      // ask listeners if child should be displayed
-      boolean[] visible = new boolean[]{true};
-      visible[0] &= child.getPresentation().isVisible();
-      m_container.getBroadcast(ObjectInfoChildTree.class).invoke(child, visible);
-      // check if we can add this child
-      if (visible[0]) {
-        children.add(child);
-      }
-    }
-    return children;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Children
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected List<? extends AbstractComponentInfo> getTabPossibleChildren() throws Exception {
+		CompositeInfo composite = (CompositeInfo) m_container;
+		List<AbstractComponentInfo> children = Lists.newArrayList();
+		for (AbstractComponentInfo child : composite.getChildrenControls()) {
+			// ask listeners if child should be displayed
+			boolean[] visible = new boolean[]{true};
+			visible[0] &= child.getPresentation().isVisible();
+			m_container.getBroadcast(ObjectInfoChildTree.class).invoke(child, visible);
+			// check if we can add this child
+			if (visible[0]) {
+				children.add(child);
+			}
+		}
+		return children;
+	}
 
-  @Override
-  protected boolean isDefaultOrdered(AbstractComponentInfo component) throws Exception {
-    return !JavaInfoUtils.hasTrueParameter(component, "tabOrder.isNotOrdered");
-  }
+	@Override
+	protected boolean isDefaultOrdered(AbstractComponentInfo component) throws Exception {
+		return !JavaInfoUtils.hasTrueParameter(component, "tabOrder.isNotOrdered");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tooltip
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getPropertyTooltipText() {
-    return TITLE_TOOLTIP;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tooltip
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getPropertyTooltipText() {
+		return TITLE_TOOLTIP;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/converter/PointConverter.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/converter/PointConverter.java
index acb070ab6..b1f4e580e 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/converter/PointConverter.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/converter/PointConverter.java
@@ -23,28 +23,28 @@
  * @coverage swt.property.converter
  */
 public final class PointConverter extends ExpressionConverter {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final ExpressionConverter INSTANCE = new PointConverter();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final ExpressionConverter INSTANCE = new PointConverter();
 
-  private PointConverter() {
-  }
+	private PointConverter() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ExpressionConverter
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toJavaSource(JavaInfo javaInfo, Object value) throws Exception {
-    if (value == null) {
-      return "(org.eclipse.swt.graphics.Point) null";
-    } else {
-      Point point = PointSupport.getPoint(value);
-      return "new org.eclipse.swt.graphics.Point(" + point.x + ", " + point.y + ")";
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ExpressionConverter
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toJavaSource(JavaInfo javaInfo, Object value) throws Exception {
+		if (value == null) {
+			return "(org.eclipse.swt.graphics.Point) null";
+		} else {
+			Point point = PointSupport.getPoint(value);
+			return "new org.eclipse.swt.graphics.Point(" + point.x + ", " + point.y + ")";
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/converter/RectangleConverter.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/converter/RectangleConverter.java
index a85c89473..6a01c2cf5 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/converter/RectangleConverter.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/converter/RectangleConverter.java
@@ -23,36 +23,36 @@
  * @coverage swt.property.converter
  */
 public final class RectangleConverter extends ExpressionConverter {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final ExpressionConverter INSTANCE = new RectangleConverter();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final ExpressionConverter INSTANCE = new RectangleConverter();
 
-  private RectangleConverter() {
-  }
+	private RectangleConverter() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ExpressionConverter
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String toJavaSource(JavaInfo javaInfo, Object value) throws Exception {
-    if (value == null) {
-      return "(org.eclipse.swt.graphics.Rectangle) null";
-    } else {
-      Rectangle rectangle = RectangleSupport.getRectangle(value);
-      return "new org.eclipse.swt.graphics.Rectangle("
-          + rectangle.x
-          + ", "
-          + rectangle.y
-          + ", "
-          + rectangle.width
-          + ", "
-          + rectangle.height
-          + ")";
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ExpressionConverter
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String toJavaSource(JavaInfo javaInfo, Object value) throws Exception {
+		if (value == null) {
+			return "(org.eclipse.swt.graphics.Rectangle) null";
+		} else {
+			Rectangle rectangle = RectangleSupport.getRectangle(value);
+			return "new org.eclipse.swt.graphics.Rectangle("
+			+ rectangle.x
+			+ ", "
+			+ rectangle.y
+			+ ", "
+			+ rectangle.width
+			+ ", "
+			+ rectangle.height
+			+ ")";
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/AcceleratorPropertyEditor.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/AcceleratorPropertyEditor.java
index eb3c709a9..d11b16c45 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/AcceleratorPropertyEditor.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/AcceleratorPropertyEditor.java
@@ -53,341 +53,341 @@
  * @coverage swt.property.editor
  */
 public final class AcceleratorPropertyEditor extends TextDialogPropertyEditor {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final PropertyEditor INSTANCE = new AcceleratorPropertyEditor();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final PropertyEditor INSTANCE = new AcceleratorPropertyEditor();
 
-  private AcceleratorPropertyEditor() {
-  }
+	private AcceleratorPropertyEditor() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getText(Property property) throws Exception {
-    Object value = property.getValue();
-    if (value instanceof Integer) {
-      return getText((Integer) value);
-    }
-    // unknown value
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getText(Property property) throws Exception {
+		Object value = property.getValue();
+		if (value instanceof Integer) {
+			return getText((Integer) value);
+		}
+		// unknown value
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void openDialog(Property property) throws Exception {
-    KeyStrokeDialog dialog = new KeyStrokeDialog(property.getTitle());
-    // set initial accelerator
-    {
-      Object value = property.getValue();
-      if (value instanceof Integer) {
-        int keyStroke = (Integer) value;
-        dialog.setKeyStroke(keyStroke);
-      }
-    }
-    // open dialog
-    if (dialog.open() == Window.OK) {
-      GenericProperty genericProperty = (GenericProperty) property;
-      int accelerator = dialog.getAccelerator();
-      // set source
-      String source = getSource(accelerator);
-      genericProperty.setExpression(source, Property.UNKNOWN_VALUE);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void openDialog(Property property) throws Exception {
+		KeyStrokeDialog dialog = new KeyStrokeDialog(property.getTitle());
+		// set initial accelerator
+		{
+			Object value = property.getValue();
+			if (value instanceof Integer) {
+				int keyStroke = (Integer) value;
+				dialog.setKeyStroke(keyStroke);
+			}
+		}
+		// open dialog
+		if (dialog.open() == Window.OK) {
+			GenericProperty genericProperty = (GenericProperty) property;
+			int accelerator = dialog.getAccelerator();
+			// set source
+			String source = getSource(accelerator);
+			genericProperty.setExpression(source, Property.UNKNOWN_VALUE);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // KeyStrokeDialog
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final class KeyStrokeDialog extends ResizableDialog {
-    private final String m_title;
-    private int m_accelerator;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// KeyStrokeDialog
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final class KeyStrokeDialog extends ResizableDialog {
+		private final String m_title;
+		private int m_accelerator;
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public KeyStrokeDialog(String title) {
-      super(DesignerPlugin.getShell(), Activator.getDefault());
-      m_title = title;
-      setShellStyle(SWT.APPLICATION_MODAL | SWT.DIALOG_TRIM | SWT.RESIZE);
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public KeyStrokeDialog(String title) {
+			super(DesignerPlugin.getShell(), Activator.getDefault());
+			m_title = title;
+			setShellStyle(SWT.APPLICATION_MODAL | SWT.DIALOG_TRIM | SWT.RESIZE);
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Access
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    /**
-     * Sets the accelerator to edit.
-     */
-    public void setKeyStroke(int keyStroke) {
-      m_accelerator = keyStroke;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Access
+		//
+		////////////////////////////////////////////////////////////////////////////
+		/**
+		 * Sets the accelerator to edit.
+		 */
+		public void setKeyStroke(int keyStroke) {
+			m_accelerator = keyStroke;
+		}
 
-    /**
-     * @return the result accelerator.
-     */
-    public int getAccelerator() {
-      return m_accelerator;
-    }
+		/**
+		 * @return the result accelerator.
+		 */
+		public int getAccelerator() {
+			return m_accelerator;
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // GUI
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    private Text m_keyStrokeText;
-    private List m_keyCodeList;
-    private final Map<Integer, Button> m_modifierToButton = Maps.newHashMap();
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// GUI
+		//
+		////////////////////////////////////////////////////////////////////////////
+		private Text m_keyStrokeText;
+		private List m_keyCodeList;
+		private final Map<Integer, Button> m_modifierToButton = Maps.newHashMap();
 
-    @Override
-    protected Control createDialogArea(Composite parent) {
-      Composite area = new Composite(parent, SWT.NONE);
-      GridDataFactory.create(area).grab().fill();
-      GridLayoutFactory.create(area);
-      // combination
-      {
-        {
-          Label label = new Label(area, SWT.NONE);
-          label.setText(ModelMessages.AcceleratorPropertyEditor_combinationLabel);
-        }
-        {
-          m_keyStrokeText = new Text(area, SWT.BORDER | SWT.READ_ONLY);
-          GridDataFactory.create(m_keyStrokeText).grabH().fillH();
-          m_keyStrokeText.addListener(SWT.KeyDown, new Listener() {
-            @Override
-            public void handleEvent(Event event) {
-              m_accelerator = SWTKeySupport.convertEventToUnmodifiedAccelerator(event);
-              displayAccelerator();
-            }
-          });
-        }
-      }
-      // properties
-      {
-        Group propertiesGroup = new Group(area, SWT.NONE);
-        GridDataFactory.create(propertiesGroup).grab().fill();
-        GridLayoutFactory.create(propertiesGroup);
-        propertiesGroup.setText(ModelMessages.AcceleratorPropertyEditor_keyStrokeLabel);
-        // modifiers
-        {
-          Group modifiersGroup = new Group(propertiesGroup, SWT.NONE);
-          GridDataFactory.create(modifiersGroup).grabH().fillH();
-          GridLayoutFactory.create(modifiersGroup).columns(5);
-          modifiersGroup.setText(ModelMessages.AcceleratorPropertyEditor_modifiers);
-          addModifierButton(modifiersGroup, SWT.ALT, "&Alt");
-          addModifierButton(modifiersGroup, SWT.CTRL, "&Ctrl");
-          addModifierButton(modifiersGroup, SWT.SHIFT, "&Shift");
-          addModifierButton(modifiersGroup, SWT.COMMAND, "&Command");
-        }
-        // key code
-        {
-          Group keyGroup = new Group(propertiesGroup, SWT.NONE);
-          GridDataFactory.create(keyGroup).grab().fill();
-          GridLayoutFactory.create(keyGroup);
-          keyGroup.setText(ModelMessages.AcceleratorPropertyEditor_keyCode);
-          //
-          m_keyCodeList = new List(keyGroup, SWT.BORDER | SWT.V_SCROLL);
-          GridDataFactory.create(m_keyCodeList).hintC(50, 15).grab().fill();
-          // add items
-          prepareKeyMaps();
-          for (String name : m_keyFields) {
-            m_keyCodeList.add(name);
-          }
-          // add listener
-          m_keyCodeList.addListener(SWT.Selection, new Listener() {
-            @Override
-            public void handleEvent(Event event) {
-              // prepare keyCode
-              int keyCode;
-              {
-                String name = m_keyCodeList.getSelection()[0];
-                keyCode = getKeyCode(name);
-              }
-              // update accelerator
-              int modifiers = m_accelerator & SWT.MODIFIER_MASK;
-              m_accelerator = modifiers | keyCode;
-              displayAccelerator();
-            }
-          });
-        }
-      }
-      //
-      displayAccelerator();
-      return area;
-    }
+		@Override
+		protected Control createDialogArea(Composite parent) {
+			Composite area = new Composite(parent, SWT.NONE);
+			GridDataFactory.create(area).grab().fill();
+			GridLayoutFactory.create(area);
+			// combination
+			{
+				{
+					Label label = new Label(area, SWT.NONE);
+					label.setText(ModelMessages.AcceleratorPropertyEditor_combinationLabel);
+				}
+				{
+					m_keyStrokeText = new Text(area, SWT.BORDER | SWT.READ_ONLY);
+					GridDataFactory.create(m_keyStrokeText).grabH().fillH();
+					m_keyStrokeText.addListener(SWT.KeyDown, new Listener() {
+						@Override
+						public void handleEvent(Event event) {
+							m_accelerator = SWTKeySupport.convertEventToUnmodifiedAccelerator(event);
+							displayAccelerator();
+						}
+					});
+				}
+			}
+			// properties
+			{
+				Group propertiesGroup = new Group(area, SWT.NONE);
+				GridDataFactory.create(propertiesGroup).grab().fill();
+				GridLayoutFactory.create(propertiesGroup);
+				propertiesGroup.setText(ModelMessages.AcceleratorPropertyEditor_keyStrokeLabel);
+				// modifiers
+				{
+					Group modifiersGroup = new Group(propertiesGroup, SWT.NONE);
+					GridDataFactory.create(modifiersGroup).grabH().fillH();
+					GridLayoutFactory.create(modifiersGroup).columns(5);
+					modifiersGroup.setText(ModelMessages.AcceleratorPropertyEditor_modifiers);
+					addModifierButton(modifiersGroup, SWT.ALT, "&Alt");
+					addModifierButton(modifiersGroup, SWT.CTRL, "&Ctrl");
+					addModifierButton(modifiersGroup, SWT.SHIFT, "&Shift");
+					addModifierButton(modifiersGroup, SWT.COMMAND, "&Command");
+				}
+				// key code
+				{
+					Group keyGroup = new Group(propertiesGroup, SWT.NONE);
+					GridDataFactory.create(keyGroup).grab().fill();
+					GridLayoutFactory.create(keyGroup);
+					keyGroup.setText(ModelMessages.AcceleratorPropertyEditor_keyCode);
+					//
+					m_keyCodeList = new List(keyGroup, SWT.BORDER | SWT.V_SCROLL);
+					GridDataFactory.create(m_keyCodeList).hintC(50, 15).grab().fill();
+					// add items
+					prepareKeyMaps();
+					for (String name : m_keyFields) {
+						m_keyCodeList.add(name);
+					}
+					// add listener
+					m_keyCodeList.addListener(SWT.Selection, new Listener() {
+						@Override
+						public void handleEvent(Event event) {
+							// prepare keyCode
+							int keyCode;
+							{
+								String name = m_keyCodeList.getSelection()[0];
+								keyCode = getKeyCode(name);
+							}
+							// update accelerator
+							int modifiers = m_accelerator & SWT.MODIFIER_MASK;
+							m_accelerator = modifiers | keyCode;
+							displayAccelerator();
+						}
+					});
+				}
+			}
+			//
+			displayAccelerator();
+			return area;
+		}
 
-    /**
-     * Creates check {@link Button} for given modifier.
-     */
-    private void addModifierButton(Composite parent, final int modifier, String title) {
-      final Button button = new Button(parent, SWT.CHECK);
-      button.setText(title);
-      m_modifierToButton.put(modifier, button);
-      // add listener
-      button.addListener(SWT.Selection, new Listener() {
-        @Override
-        public void handleEvent(Event event) {
-          // update modifiers
-          if (button.getSelection()) {
-            m_accelerator |= modifier;
-          } else {
-            m_accelerator &= ~modifier;
-          }
-          // show accelerator
-          displayAccelerator();
-        }
-      });
-    }
+		/**
+		 * Creates check {@link Button} for given modifier.
+		 */
+		private void addModifierButton(Composite parent, final int modifier, String title) {
+			final Button button = new Button(parent, SWT.CHECK);
+			button.setText(title);
+			m_modifierToButton.put(modifier, button);
+			// add listener
+			button.addListener(SWT.Selection, new Listener() {
+				@Override
+				public void handleEvent(Event event) {
+					// update modifiers
+					if (button.getSelection()) {
+						m_accelerator |= modifier;
+					} else {
+						m_accelerator &= ~modifier;
+					}
+					// show accelerator
+					displayAccelerator();
+				}
+			});
+		}
 
-    @Override
-    protected void configureShell(Shell newShell) {
-      super.configureShell(newShell);
-      newShell.setText(m_title);
-    }
+		@Override
+		protected void configureShell(Shell newShell) {
+			super.configureShell(newShell);
+			newShell.setText(m_title);
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Internal
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    private void displayAccelerator() {
-      m_keyStrokeText.setText(AcceleratorPropertyEditor.getText(m_accelerator));
-      // update modifiers buttons
-      for (Map.Entry<Integer, Button> entry : m_modifierToButton.entrySet()) {
-        int modifier = entry.getKey();
-        Button button = entry.getValue();
-        if ((m_accelerator & modifier) != 0) {
-          button.setSelection(true);
-        } else {
-          button.setSelection(false);
-        }
-      }
-      // update key code list
-      m_keyCodeList.setSelection(new String[]{getKeyName(m_accelerator)});
-    }
-  }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Internal
+		//
+		////////////////////////////////////////////////////////////////////////////
+		private void displayAccelerator() {
+			m_keyStrokeText.setText(AcceleratorPropertyEditor.getText(m_accelerator));
+			// update modifiers buttons
+			for (Map.Entry<Integer, Button> entry : m_modifierToButton.entrySet()) {
+				int modifier = entry.getKey();
+				Button button = entry.getValue();
+				if ((m_accelerator & modifier) != 0) {
+					button.setSelection(true);
+				} else {
+					button.setSelection(false);
+				}
+			}
+			// update key code list
+			m_keyCodeList.setSelection(new String[]{getKeyName(m_accelerator)});
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // KeyStroke utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the textual presentation of given accelerator.
-   */
-  private static String getText(int accelerator) {
-    KeyStroke keyStroke = SWTKeySupport.convertAcceleratorToKeyStroke(accelerator);
-    return keyStroke.toString();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// KeyStroke utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the textual presentation of given accelerator.
+	 */
+	private static String getText(int accelerator) {
+		KeyStroke keyStroke = SWTKeySupport.convertAcceleratorToKeyStroke(accelerator);
+		return keyStroke.toString();
+	}
 
-  /**
-   * @return the source for given accelerator.
-   */
-  private static String getSource(int accelerator) {
-    String source = getText(accelerator);
-    source = StringUtils.replace(source, "ALT+", "org.eclipse.swt.SWT.ALT | ");
-    source = StringUtils.replace(source, "CTRL+", "org.eclipse.swt.SWT.CTRL | ");
-    source = StringUtils.replace(source, "SHIFT+", "org.eclipse.swt.SWT.SHIFT | ");
-    // check for character/keyCode
-    int length = source.length();
-    int index = StringUtils.lastIndexOf(source, ' ');
-    if (index == length - 2) {
-      source = source.substring(0, index) + " '" + source.substring(index + 1) + "'";
-    } else if (index > 0) {
-      source = source.substring(0, index) + " org.eclipse.swt.SWT." + source.substring(index + 1);
-    } else {
-      source = "org.eclipse.swt.SWT." + source;
-    }
-    // final resource
-    return source;
-  }
+	/**
+	 * @return the source for given accelerator.
+	 */
+	private static String getSource(int accelerator) {
+		String source = getText(accelerator);
+		source = StringUtils.replace(source, "ALT+", "org.eclipse.swt.SWT.ALT | ");
+		source = StringUtils.replace(source, "CTRL+", "org.eclipse.swt.SWT.CTRL | ");
+		source = StringUtils.replace(source, "SHIFT+", "org.eclipse.swt.SWT.SHIFT | ");
+		// check for character/keyCode
+		int length = source.length();
+		int index = StringUtils.lastIndexOf(source, ' ');
+		if (index == length - 2) {
+			source = source.substring(0, index) + " '" + source.substring(index + 1) + "'";
+		} else if (index > 0) {
+			source = source.substring(0, index) + " org.eclipse.swt.SWT." + source.substring(index + 1);
+		} else {
+			source = "org.eclipse.swt.SWT." + source;
+		}
+		// final resource
+		return source;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Key codes
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static java.util.List<String> m_keyFields;
-  private static Map<Integer, String> m_keyCodeToName;
-  private static Map<String, Integer> m_keyNameToCode;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Key codes
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static java.util.List<String> m_keyFields;
+	private static Map<Integer, String> m_keyCodeToName;
+	private static Map<String, Integer> m_keyNameToCode;
 
-  /**
-   * @return the name of key with given code.
-   */
-  private static String getKeyName(int accelerator) {
-    prepareKeyMaps();
-    int keyCode = SWTKeySupport.convertAcceleratorToKeyStroke(accelerator).getNaturalKey();
-    return m_keyCodeToName.get(keyCode);
-  }
+	/**
+	 * @return the name of key with given code.
+	 */
+	private static String getKeyName(int accelerator) {
+		prepareKeyMaps();
+		int keyCode = SWTKeySupport.convertAcceleratorToKeyStroke(accelerator).getNaturalKey();
+		return m_keyCodeToName.get(keyCode);
+	}
 
-  /**
-   * @return the code of key with given name.
-   */
-  private static int getKeyCode(String keyName) {
-    prepareKeyMaps();
-    return m_keyNameToCode.get(keyName);
-  }
+	/**
+	 * @return the code of key with given name.
+	 */
+	private static int getKeyCode(String keyName) {
+		prepareKeyMaps();
+		return m_keyNameToCode.get(keyName);
+	}
 
-  /**
-   * Prepares {@link Map}'s for key code/name conversion.
-   */
-  private static void prepareKeyMaps() {
-    if (m_keyCodeToName == null) {
-      m_keyFields = Lists.newArrayList();
-      m_keyCodeToName = Maps.newTreeMap();
-      m_keyNameToCode = Maps.newTreeMap();
-      // add fields
-      ExecutionUtils.runLog(new RunnableEx() {
-        @Override
-        public void run() throws Exception {
-          // add key codes from SWT
-          for (Field field : SWT.class.getFields()) {
-            String fieldName = field.getName();
-            int fieldValue = field.getInt(null);
-            if (hasBits(fieldValue, SWT.KEYCODE_BIT)) {
-              m_keyFields.add(fieldName);
-              m_keyCodeToName.put(fieldValue, fieldName);
-              m_keyNameToCode.put(fieldName, fieldValue);
-            }
-          }
-          // add numbers
-          for (char c = '0'; c < '9'; c++) {
-            String charName = Character.toString(c);
-            int charValue = c;
-            m_keyFields.add(charName);
-            m_keyCodeToName.put(charValue, charName);
-            m_keyNameToCode.put(charName, charValue);
-          }
-          // add characters
-          for (char c = 'A'; c < 'Z'; c++) {
-            String charName = Character.toString(c);
-            int charValue = c;
-            m_keyFields.add(charName);
-            m_keyCodeToName.put(charValue, charName);
-            m_keyNameToCode.put(charName, charValue);
-          }
-        }
-      });
-    }
-  }
+	/**
+	 * Prepares {@link Map}'s for key code/name conversion.
+	 */
+	private static void prepareKeyMaps() {
+		if (m_keyCodeToName == null) {
+			m_keyFields = Lists.newArrayList();
+			m_keyCodeToName = Maps.newTreeMap();
+			m_keyNameToCode = Maps.newTreeMap();
+			// add fields
+			ExecutionUtils.runLog(new RunnableEx() {
+				@Override
+				public void run() throws Exception {
+					// add key codes from SWT
+					for (Field field : SWT.class.getFields()) {
+						String fieldName = field.getName();
+						int fieldValue = field.getInt(null);
+						if (hasBits(fieldValue, SWT.KEYCODE_BIT)) {
+							m_keyFields.add(fieldName);
+							m_keyCodeToName.put(fieldValue, fieldName);
+							m_keyNameToCode.put(fieldName, fieldValue);
+						}
+					}
+					// add numbers
+					for (char c = '0'; c < '9'; c++) {
+						String charName = Character.toString(c);
+						int charValue = c;
+						m_keyFields.add(charName);
+						m_keyCodeToName.put(charValue, charName);
+						m_keyNameToCode.put(charName, charValue);
+					}
+					// add characters
+					for (char c = 'A'; c < 'Z'; c++) {
+						String charName = Character.toString(c);
+						int charValue = c;
+						m_keyFields.add(charName);
+						m_keyCodeToName.put(charValue, charName);
+						m_keyNameToCode.put(charName, charValue);
+					}
+				}
+			});
+		}
+	}
 
-  /**
-   * @return <code>true</code> if given value has given bits set.
-   */
-  private static boolean hasBits(int value, int bits) {
-    return (value & bits) == bits;
-  }
+	/**
+	 * @return <code>true</code> if given value has given bits set.
+	 */
+	private static boolean hasBits(int value, int bits) {
+		return (value & bits) == bits;
+	}
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/color/ColorPropertyEditor.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/color/ColorPropertyEditor.java
index 4d19d43a2..5fc26d492 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/color/ColorPropertyEditor.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/color/ColorPropertyEditor.java
@@ -72,424 +72,424 @@
  */
 public final class ColorPropertyEditor extends PropertyEditor implements IClipboardSourceProvider {
 	private static final String preferencePrefix = "SWT";
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final PropertyEditor INSTANCE = new ColorPropertyEditor();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final PropertyEditor INSTANCE = new ColorPropertyEditor();
 	static Preferences preferences = InstanceScope.INSTANCE.getNode(IColorChooserPreferenceConstants.PREFERENCE_NODE);
 
-  private ColorPropertyEditor() {
-  }
+	private ColorPropertyEditor() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final int SAMPLE_SIZE = 10;
-  private static final int SAMPLE_MARGIN = 3;
-  private final PropertyEditorPresentation m_presentation = new ButtonPropertyEditorPresentation() {
-    @Override
-    protected void onClick(PropertyTable propertyTable, Property property) throws Exception {
-      openDialog(property);
-    }
-  };
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final int SAMPLE_SIZE = 10;
+	private static final int SAMPLE_MARGIN = 3;
+	private final PropertyEditorPresentation m_presentation = new ButtonPropertyEditorPresentation() {
+		@Override
+		protected void onClick(PropertyTable propertyTable, Property property) throws Exception {
+			openDialog(property);
+		}
+	};
 
-  @Override
-  public PropertyEditorPresentation getPresentation() {
-    return m_presentation;
-  }
+	@Override
+	public PropertyEditorPresentation getPresentation() {
+		return m_presentation;
+	}
 
-  @Override
-  public void paint(Property property, GC gc, int x, int y, int width, int height)
-      throws Exception {
-    Object value = property.getValue();
-    if (value != Property.UNKNOWN_VALUE && value != null) {
-      Color color = ColorSupport.getColor(value);
-      // draw color sample
-      {
-        Color oldBackground = gc.getBackground();
-        Color oldForeground = gc.getForeground();
-        try {
-          int width_c = SAMPLE_SIZE;
-          int height_c = SAMPLE_SIZE;
-          int x_c = x;
-          int y_c = y + (height - height_c) / 2;
-          // update rest bounds
-          {
-            int delta = SAMPLE_SIZE + SAMPLE_MARGIN;
-            x += delta;
-            width -= delta;
-          }
-          // fill
-          {
-            gc.setBackground(color);
-            gc.fillRectangle(x_c, y_c, width_c, height_c);
-          }
-          // draw line
-          gc.setForeground(IColorConstants.gray);
-          gc.drawRectangle(x_c, y_c, width_c, height_c);
-        } finally {
-          gc.setBackground(oldBackground);
-          gc.setForeground(oldForeground);
-          color.dispose();
-        }
-      }
-      // draw color text
-      {
-        String text = getText(property);
-        DrawUtils.drawStringCV(gc, text, x, y, width, height);
-      }
-    }
-  }
+	@Override
+	public void paint(Property property, GC gc, int x, int y, int width, int height)
+			throws Exception {
+		Object value = property.getValue();
+		if (value != Property.UNKNOWN_VALUE && value != null) {
+			Color color = ColorSupport.getColor(value);
+			// draw color sample
+			{
+				Color oldBackground = gc.getBackground();
+				Color oldForeground = gc.getForeground();
+				try {
+					int width_c = SAMPLE_SIZE;
+					int height_c = SAMPLE_SIZE;
+					int x_c = x;
+					int y_c = y + (height - height_c) / 2;
+					// update rest bounds
+					{
+						int delta = SAMPLE_SIZE + SAMPLE_MARGIN;
+						x += delta;
+						width -= delta;
+					}
+					// fill
+					{
+						gc.setBackground(color);
+						gc.fillRectangle(x_c, y_c, width_c, height_c);
+					}
+					// draw line
+					gc.setForeground(IColorConstants.gray);
+					gc.drawRectangle(x_c, y_c, width_c, height_c);
+				} finally {
+					gc.setBackground(oldBackground);
+					gc.setForeground(oldForeground);
+					color.dispose();
+				}
+			}
+			// draw color text
+			{
+				String text = getText(property);
+				DrawUtils.drawStringCV(gc, text, x, y, width, height);
+			}
+		}
+	}
 
-  /**
-   * @return the text for current color value.
-   */
-  private String getText(Property property) throws Exception {
-    Object value = property.getValue();
-    if (value != Property.UNKNOWN_VALUE) {
-      Expression expression = ((GenericProperty) property).getExpression();
-      // Display.getSystemColor(int key)
-      if (AstNodeUtils.isMethodInvocation(
-          expression,
-          "org.eclipse.swt.widgets.Display",
-          "getSystemColor(int)")) {
-        MethodInvocation invocation = (MethodInvocation) expression;
-        Expression idExpression = DomGenerics.arguments(invocation).get(0);
-        String fieldName = getColorFieldName(idExpression);
-        if (fieldName != null) {
-          return fieldName;
-        }
-      }
-      // SWTResourceManager.getColor(String key)
-      if (AstNodeUtils.isMethodInvocation(
-          expression,
-          "org.eclipse.wb.swt.SWTResourceManager",
-          "getColor(int)")) {
-        MethodInvocation invocation = (MethodInvocation) expression;
-        Expression idExpression = DomGenerics.arguments(invocation).get(0);
-        return getColorFieldName(idExpression);
-      }
-      // ColorRegistry.get(String key)
-      if (expression instanceof MethodInvocation) {
-        MethodInvocation invocation = (MethodInvocation) expression;
-        if (AstNodeUtils.getMethodSignature(invocation).equals("get(java.lang.String)")
-            && AstNodeUtils.isSuccessorOf(
-                AstNodeUtils.getTypeBinding(invocation.getExpression()),
-                "org.eclipse.jface.resource.ColorRegistry")) {
-          Object keyArgument = invocation.arguments().get(0);
-          if (keyArgument instanceof QualifiedName) {
-            GenericProperty genericProperty = (GenericProperty) property;
-            ResourceRegistryInfo registry = RegistryContainerInfo.getRegistry(
-                genericProperty.getJavaInfo().getRootJava(),
-                invocation.getExpression());
-            //
-            QualifiedName keyQualifiedName = (QualifiedName) keyArgument;
-            //
-            return registry.getVariableSupport().getTitle()
-                + " - "
-                + keyQualifiedName.getName().getIdentifier();
-          }
-          return null;
-        }
-      }
-      // use RGB
-      return ColorSupport.toString(value);
-    }
-    return null;
-  }
+	/**
+	 * @return the text for current color value.
+	 */
+	private String getText(Property property) throws Exception {
+		Object value = property.getValue();
+		if (value != Property.UNKNOWN_VALUE) {
+			Expression expression = ((GenericProperty) property).getExpression();
+			// Display.getSystemColor(int key)
+			if (AstNodeUtils.isMethodInvocation(
+					expression,
+					"org.eclipse.swt.widgets.Display",
+					"getSystemColor(int)")) {
+				MethodInvocation invocation = (MethodInvocation) expression;
+				Expression idExpression = DomGenerics.arguments(invocation).get(0);
+				String fieldName = getColorFieldName(idExpression);
+				if (fieldName != null) {
+					return fieldName;
+				}
+			}
+			// SWTResourceManager.getColor(String key)
+			if (AstNodeUtils.isMethodInvocation(
+					expression,
+					"org.eclipse.wb.swt.SWTResourceManager",
+					"getColor(int)")) {
+				MethodInvocation invocation = (MethodInvocation) expression;
+				Expression idExpression = DomGenerics.arguments(invocation).get(0);
+				return getColorFieldName(idExpression);
+			}
+			// ColorRegistry.get(String key)
+			if (expression instanceof MethodInvocation) {
+				MethodInvocation invocation = (MethodInvocation) expression;
+				if (AstNodeUtils.getMethodSignature(invocation).equals("get(java.lang.String)")
+						&& AstNodeUtils.isSuccessorOf(
+								AstNodeUtils.getTypeBinding(invocation.getExpression()),
+								"org.eclipse.jface.resource.ColorRegistry")) {
+					Object keyArgument = invocation.arguments().get(0);
+					if (keyArgument instanceof QualifiedName) {
+						GenericProperty genericProperty = (GenericProperty) property;
+						ResourceRegistryInfo registry = RegistryContainerInfo.getRegistry(
+								genericProperty.getJavaInfo().getRootJava(),
+								invocation.getExpression());
+						//
+						QualifiedName keyQualifiedName = (QualifiedName) keyArgument;
+						//
+						return registry.getVariableSupport().getTitle()
+								+ " - "
+								+ keyQualifiedName.getName().getIdentifier();
+					}
+					return null;
+				}
+			}
+			// use RGB
+			return ColorSupport.toString(value);
+		}
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // System colors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @param idExpression
-   *          the {@link Expression} with "id" of system color.
-   *
-   * @return the name of "COLOR_XXX" field from <code>SWT</code>.
-   */
-  private static String getColorFieldName(Expression idExpression) throws Exception {
-    int id = (Integer) JavaInfoEvaluationHelper.getValue(idExpression);
-    // find SWT.COLOR_XXX field
-    for (Field field : SwtSupport.getSwtClass().getFields()) {
-      String fieldName = field.getName();
-      if (fieldName.startsWith("COLOR_") && field.getInt(null) == id) {
-        return fieldName;
-      }
-    }
-    // no field, unexpected
-    throw new IllegalArgumentException(
-			MessageFormat.format(org.eclipse.wb.internal.core.model.ModelMessages.ColorPropertyEditor_wrongSwtColor,
-					idExpression, id));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// System colors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @param idExpression
+	 *          the {@link Expression} with "id" of system color.
+	 *
+	 * @return the name of "COLOR_XXX" field from <code>SWT</code>.
+	 */
+	private static String getColorFieldName(Expression idExpression) throws Exception {
+		int id = (Integer) JavaInfoEvaluationHelper.getValue(idExpression);
+		// find SWT.COLOR_XXX field
+		for (Field field : SwtSupport.getSwtClass().getFields()) {
+			String fieldName = field.getName();
+			if (fieldName.startsWith("COLOR_") && field.getInt(null) == id) {
+				return fieldName;
+			}
+		}
+		// no field, unexpected
+		throw new IllegalArgumentException(
+				MessageFormat.format(org.eclipse.wb.internal.core.model.ModelMessages.ColorPropertyEditor_wrongSwtColor,
+						idExpression, id));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IClipboardSourceProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getClipboardSource(GenericProperty property) throws Exception {
-    // prepare RGB based ColorInfo
-    ColorInfo colorInfo;
-    {
-      Object value = property.getValue();
-      if (value == Property.UNKNOWN_VALUE) {
-        return null;
-      }
-      colorInfo = ColorSupport.createInfo(value);
-    }
-    // special cases
-    {
-      Expression expression = property.getExpression();
-      // Display.getSystemColor(int key)
-      if (AstNodeUtils.isMethodInvocation(
-          expression,
-          "org.eclipse.swt.widgets.Display",
-          "getSystemColor(int)")) {
-        MethodInvocation invocation = (MethodInvocation) expression;
-        Expression idExpression = DomGenerics.arguments(invocation).get(0);
-        colorInfo.setData("org.eclipse.swt.SWT." + getColorFieldName(idExpression));
-      }
-      // SWTResourceManager.getColor(String key)
-      if (AstNodeUtils.isMethodInvocation(
-          expression,
-          "org.eclipse.wb.swt.SWTResourceManager",
-          "getColor(int)")) {
-        MethodInvocation invocation = (MethodInvocation) expression;
-        Expression idExpression = DomGenerics.arguments(invocation).get(0);
-        colorInfo.setData("org.eclipse.swt.SWT." + getColorFieldName(idExpression));
-      }
-    }
-    // convert ColorInfo into source
-    return getSource(property, colorInfo);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IClipboardSourceProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getClipboardSource(GenericProperty property) throws Exception {
+		// prepare RGB based ColorInfo
+		ColorInfo colorInfo;
+		{
+			Object value = property.getValue();
+			if (value == Property.UNKNOWN_VALUE) {
+				return null;
+			}
+			colorInfo = ColorSupport.createInfo(value);
+		}
+		// special cases
+		{
+			Expression expression = property.getExpression();
+			// Display.getSystemColor(int key)
+			if (AstNodeUtils.isMethodInvocation(
+					expression,
+					"org.eclipse.swt.widgets.Display",
+					"getSystemColor(int)")) {
+				MethodInvocation invocation = (MethodInvocation) expression;
+				Expression idExpression = DomGenerics.arguments(invocation).get(0);
+				colorInfo.setData("org.eclipse.swt.SWT." + getColorFieldName(idExpression));
+			}
+			// SWTResourceManager.getColor(String key)
+			if (AstNodeUtils.isMethodInvocation(
+					expression,
+					"org.eclipse.wb.swt.SWTResourceManager",
+					"getColor(int)")) {
+				MethodInvocation invocation = (MethodInvocation) expression;
+				Expression idExpression = DomGenerics.arguments(invocation).get(0);
+				colorInfo.setData("org.eclipse.swt.SWT." + getColorFieldName(idExpression));
+			}
+		}
+		// convert ColorInfo into source
+		return getSource(property, colorInfo);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
 	private static ColorDialog m_colorDialog = new ColorDialog();
 
 	public static void reloadColorDialog() {
 		m_colorDialog = new ColorDialog();
 	}
-  @Override
-  public boolean activate(PropertyTable propertyTable, Property property, Point location)
-      throws Exception {
-    // activate using keyboard
-    if (location == null) {
-      openDialog(property);
-    }
-    // don't activate
-    return false;
-  }
+	@Override
+	public boolean activate(PropertyTable propertyTable, Property property, Point location)
+			throws Exception {
+		// activate using keyboard
+		if (location == null) {
+			openDialog(property);
+		}
+		// don't activate
+		return false;
+	}
 
-  /**
-   * Opens editing dialog.
-   */
-  private void openDialog(Property property) throws Exception {
-    GenericProperty genericProperty = (GenericProperty) property;
-    ColorDialog colorDialog = new ColorDialog(genericProperty.getJavaInfo());
-    // set initial color
-    {
-      Object value = property.getValue();
-      if (value != Property.UNKNOWN_VALUE && value != null) {
-        colorDialog.setColorInfo(ColorSupport.createInfo(value));
-      }
-    }
-    // open dialog
-    if (colorDialog.open() == Window.OK) {
-      ColorInfo colorInfo = colorDialog.getColorInfo();
-      // prepare source
-      String source = getSource(genericProperty, colorInfo);
-      // set expression
-      genericProperty.setExpression(source, Property.UNKNOWN_VALUE);
-    }
-  }
+	/**
+	 * Opens editing dialog.
+	 */
+	private void openDialog(Property property) throws Exception {
+		GenericProperty genericProperty = (GenericProperty) property;
+		ColorDialog colorDialog = new ColorDialog(genericProperty.getJavaInfo());
+		// set initial color
+		{
+			Object value = property.getValue();
+			if (value != Property.UNKNOWN_VALUE && value != null) {
+				colorDialog.setColorInfo(ColorSupport.createInfo(value));
+			}
+		}
+		// open dialog
+		if (colorDialog.open() == Window.OK) {
+			ColorInfo colorInfo = colorDialog.getColorInfo();
+			// prepare source
+			String source = getSource(genericProperty, colorInfo);
+			// set expression
+			genericProperty.setExpression(source, Property.UNKNOWN_VALUE);
+		}
+	}
 
-  /**
-   * @return the Java source for given {@link ColorInfo}.
-   */
-  private static String getSource(GenericProperty property, ColorInfo colorInfo) throws Exception {
-    if (colorInfo.getData() instanceof Object[]) {
-      Object[] data = (Object[]) colorInfo.getData();
-      ColorRegistryInfo registryInfo = (ColorRegistryInfo) data[0];
-      KeyFieldInfo keyInfo = (KeyFieldInfo) data[1];
-      return TemplateUtils.format("{0}.get({1})", registryInfo, keyInfo.keySource);
-    }
-    IPreferenceStore preferences =
-        property.getJavaInfo().getDescription().getToolkit().getPreferences();
+	/**
+	 * @return the Java source for given {@link ColorInfo}.
+	 */
+	private static String getSource(GenericProperty property, ColorInfo colorInfo) throws Exception {
+		if (colorInfo.getData() instanceof Object[]) {
+			Object[] data = (Object[]) colorInfo.getData();
+			ColorRegistryInfo registryInfo = (ColorRegistryInfo) data[0];
+			KeyFieldInfo keyInfo = (KeyFieldInfo) data[1];
+			return TemplateUtils.format("{0}.get({1})", registryInfo, keyInfo.keySource);
+		}
+		IPreferenceStore preferences =
+				property.getJavaInfo().getDescription().getToolkit().getPreferences();
 
-    if (preferences.getBoolean(IPreferenceConstants.P_USE_RESOURCE_MANAGER)) {
-      ManagerUtils.ensure_SWTResourceManager(property.getJavaInfo());
-      if (colorInfo.getData() != null) {
-        return "org.eclipse.wb.swt.SWTResourceManager.getColor(" + colorInfo.getData() + ")";
-      }
-      return "org.eclipse.wb.swt.SWTResourceManager.getColor(" + colorInfo.getCommaRGB() + ")";
-    } else {
-      if (colorInfo.getData() != null) {
-        return "org.eclipse.swt.widgets.Display.getCurrent().getSystemColor("
-            + colorInfo.getData()
-            + ")";
-      } else {
-        return "new org.eclipse.swt.graphics.Color(null, " + colorInfo.getCommaRGB() + ")";
-      }
-    }
-  }
+		if (preferences.getBoolean(IPreferenceConstants.P_USE_RESOURCE_MANAGER)) {
+			ManagerUtils.ensure_SWTResourceManager(property.getJavaInfo());
+			if (colorInfo.getData() != null) {
+				return "org.eclipse.wb.swt.SWTResourceManager.getColor(" + colorInfo.getData() + ")";
+			}
+			return "org.eclipse.wb.swt.SWTResourceManager.getColor(" + colorInfo.getCommaRGB() + ")";
+		} else {
+			if (colorInfo.getData() != null) {
+				return "org.eclipse.swt.widgets.Display.getCurrent().getSystemColor("
+						+ colorInfo.getData()
+						+ ")";
+			} else {
+				return "new org.eclipse.swt.graphics.Color(null, " + colorInfo.getCommaRGB() + ")";
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ColorDialog
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final class ColorDialog extends AbstractColorDialog {
-    private static String m_lastPageTitle;
-    private final JavaInfo m_javaInfo;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ColorDialog
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final class ColorDialog extends AbstractColorDialog {
+		private static String m_lastPageTitle;
+		private final JavaInfo m_javaInfo;
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-	public ColorDialog() {
-		super(DesignerPlugin.getShell());
-		m_javaInfo = null;
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public ColorDialog() {
+			super(DesignerPlugin.getShell());
+			m_javaInfo = null;
 
-	}
+		}
 
-    public ColorDialog(JavaInfo javaInfo) {
-      super(DesignerPlugin.getShell());
-      m_javaInfo = javaInfo;
-    }
+		public ColorDialog(JavaInfo javaInfo) {
+			super(DesignerPlugin.getShell());
+			m_javaInfo = javaInfo;
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Pages
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    protected void addPages(Composite parent) {
-    	Preferences prefs = preferences.node(IColorChooserPreferenceConstants.PREFERENCE_NODE_1);
-		if (prefs.getBoolean(preferencePrefix + IColorChooserPreferenceConstants.P_CUSTOM_COLORS, true)) {
-			addPage(
-    		org.eclipse.wb.internal.core.model.ModelMessages.ColorPropertyEditor_pageCustomColors,
-            new CustomColorPickerComposite(parent, SWT.NONE, this));
-    	}
-		if (prefs.getBoolean(preferencePrefix + IColorChooserPreferenceConstants.P_SYSTEM_COLORS, true)) {
-      addPage(
-    		  org.eclipse.wb.internal.core.model.ModelMessages.ColorPropertyEditor_systemColorsPage,
-          new SystemColorsPage(parent, SWT.NONE, this, m_javaInfo));
-    	}
-		if (prefs.getBoolean(preferencePrefix + IColorChooserPreferenceConstants.P_NAMED_COLORS, true)) {
-      addPage(
-    		  org.eclipse.wb.internal.core.model.ModelMessages.ColorPropertyEditor_namedColorsPage,
-          new NamedColorsComposite(parent, SWT.NONE, this));
-    	}
-		if (prefs.getBoolean(preferencePrefix + IColorChooserPreferenceConstants.P_WEB_SAFE_COLORS, true)) {
-      addPage(
-    		  org.eclipse.wb.internal.core.model.ModelMessages.ColorPropertyEditor_webSafePage,
-          new WebSafeColorsComposite(parent, SWT.NONE, this));
-    	}
-      try {
-        List<ColorRegistryInfo> registries =
-            RegistryContainerInfo.getRegistries(m_javaInfo.getRootJava(), ColorRegistryInfo.class);
-        if (!registries.isEmpty()) {
-          addPage("ColorRegistry", new RegistryColorsPage(parent, SWT.NONE, this, registries));
-        }
-      } catch (Throwable e) {
-        DesignerPlugin.log(e);
-      }
-      selectPageByTitle(m_lastPageTitle);
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Pages
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		protected void addPages(Composite parent) {
+			Preferences prefs = preferences.node(IColorChooserPreferenceConstants.PREFERENCE_NODE_1);
+			if (prefs.getBoolean(preferencePrefix + IColorChooserPreferenceConstants.P_CUSTOM_COLORS, true)) {
+				addPage(
+						org.eclipse.wb.internal.core.model.ModelMessages.ColorPropertyEditor_pageCustomColors,
+						new CustomColorPickerComposite(parent, SWT.NONE, this));
+			}
+			if (prefs.getBoolean(preferencePrefix + IColorChooserPreferenceConstants.P_SYSTEM_COLORS, true)) {
+				addPage(
+						org.eclipse.wb.internal.core.model.ModelMessages.ColorPropertyEditor_systemColorsPage,
+						new SystemColorsPage(parent, SWT.NONE, this, m_javaInfo));
+			}
+			if (prefs.getBoolean(preferencePrefix + IColorChooserPreferenceConstants.P_NAMED_COLORS, true)) {
+				addPage(
+						org.eclipse.wb.internal.core.model.ModelMessages.ColorPropertyEditor_namedColorsPage,
+						new NamedColorsComposite(parent, SWT.NONE, this));
+			}
+			if (prefs.getBoolean(preferencePrefix + IColorChooserPreferenceConstants.P_WEB_SAFE_COLORS, true)) {
+				addPage(
+						org.eclipse.wb.internal.core.model.ModelMessages.ColorPropertyEditor_webSafePage,
+						new WebSafeColorsComposite(parent, SWT.NONE, this));
+			}
+			try {
+				List<ColorRegistryInfo> registries =
+						RegistryContainerInfo.getRegistries(m_javaInfo.getRootJava(), ColorRegistryInfo.class);
+				if (!registries.isEmpty()) {
+					addPage("ColorRegistry", new RegistryColorsPage(parent, SWT.NONE, this, registries));
+				}
+			} catch (Throwable e) {
+				DesignerPlugin.log(e);
+			}
+			selectPageByTitle(m_lastPageTitle);
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Dialog
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    protected void buttonPressed(int buttonId) {
-      // save page selection
-      if (buttonId == IDialogConstants.OK_ID) {
-        m_lastPageTitle = getSelectedPageTitle();
-      }
-      // super handle
-      super.buttonPressed(buttonId);
-    }
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // System Colors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final class SystemColorsPage extends AbstractColorsGridComposite {
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public SystemColorsPage(Composite parent,
-        int style,
-        AbstractColorDialog colorDialog,
-        JavaInfo javaInfo) {
-      super(parent, style, colorDialog);
-      {
-        ColorsGridComposite colorsGrid =
-            createColorsGroup(this, null, SwtColors.getSystemColors(javaInfo));
-        colorsGrid.showNames(50);
-        colorsGrid.setCellHeight(25);
-        colorsGrid.setColumns(2);
-      }
-    }
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // JFace Registry Colors
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final class RegistryColorsPage extends AbstractColorsGridComposite {
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public RegistryColorsPage(Composite parent,
-        int style,
-        AbstractColorDialog colorDialog,
-        List<ColorRegistryInfo> registries) throws Exception {
-      super(parent, style, colorDialog);
-      //
-      for (ColorRegistryInfo registryInfo : registries) {
-        // prepare color info's
-        Object registry = registryInfo.getObject();
-        List<ColorInfo> infos = Lists.newArrayList();
-        for (KeyFieldInfo keyInfo : registryInfo.getKeyFields()) {
-          if (keyInfo.value == null) {
-            keyInfo.value =
-                ReflectionUtils.invokeMethod(registry, "get(java.lang.String)", keyInfo.keyValue);
-          }
-          if (keyInfo.value != null) {
-            ColorInfo colorInfo = ColorSupport.createInfo(keyInfo.keyName, keyInfo.value);
-            colorInfo.setData(new Object[]{registryInfo, keyInfo});
-            infos.add(colorInfo);
-          }
-        }
-        // create grid composite
-        ColorsGridComposite colorsGrid = createColorsGroup(
-            this,
-            registryInfo.getVariableSupport().getTitle(),
-            infos.toArray(new ColorInfo[infos.size()]));
-        colorsGrid.showNames(50);
-        colorsGrid.setCellHeight(25);
-        colorsGrid.setColumns(2);
-      }
-    }
-  }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Dialog
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		protected void buttonPressed(int buttonId) {
+			// save page selection
+			if (buttonId == IDialogConstants.OK_ID) {
+				m_lastPageTitle = getSelectedPageTitle();
+			}
+			// super handle
+			super.buttonPressed(buttonId);
+		}
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// System Colors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final class SystemColorsPage extends AbstractColorsGridComposite {
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public SystemColorsPage(Composite parent,
+				int style,
+				AbstractColorDialog colorDialog,
+				JavaInfo javaInfo) {
+			super(parent, style, colorDialog);
+			{
+				ColorsGridComposite colorsGrid =
+						createColorsGroup(this, null, SwtColors.getSystemColors(javaInfo));
+				colorsGrid.showNames(50);
+				colorsGrid.setCellHeight(25);
+				colorsGrid.setColumns(2);
+			}
+		}
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// JFace Registry Colors
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final class RegistryColorsPage extends AbstractColorsGridComposite {
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public RegistryColorsPage(Composite parent,
+				int style,
+				AbstractColorDialog colorDialog,
+				List<ColorRegistryInfo> registries) throws Exception {
+			super(parent, style, colorDialog);
+			//
+			for (ColorRegistryInfo registryInfo : registries) {
+				// prepare color info's
+				Object registry = registryInfo.getObject();
+				List<ColorInfo> infos = Lists.newArrayList();
+				for (KeyFieldInfo keyInfo : registryInfo.getKeyFields()) {
+					if (keyInfo.value == null) {
+						keyInfo.value =
+								ReflectionUtils.invokeMethod(registry, "get(java.lang.String)", keyInfo.keyValue);
+					}
+					if (keyInfo.value != null) {
+						ColorInfo colorInfo = ColorSupport.createInfo(keyInfo.keyName, keyInfo.value);
+						colorInfo.setData(new Object[]{registryInfo, keyInfo});
+						infos.add(colorInfo);
+					}
+				}
+				// create grid composite
+				ColorsGridComposite colorsGrid = createColorsGroup(
+						this,
+						registryInfo.getVariableSupport().getTitle(),
+						infos.toArray(new ColorInfo[infos.size()]));
+				colorsGrid.showNames(50);
+				colorsGrid.setCellHeight(25);
+				colorsGrid.setColumns(2);
+			}
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/color/SwtColors.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/color/SwtColors.java
index df343635d..02670a12f 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/color/SwtColors.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/color/SwtColors.java
@@ -28,33 +28,33 @@
  * @coverage swt.property.editor
  */
 public final class SwtColors {
-  private static ColorInfo[] m_systemColors;
+	private static ColorInfo[] m_systemColors;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // System
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return {@link ColorInfo}'s for colors from {@link SWT.COLOR_XXX}.
-   */
-  public static ColorInfo[] getSystemColors(JavaInfo javaInfo) {
-    if (m_systemColors == null) {
-      List<ColorInfo> colors = Lists.newArrayList();
-      try {
-        Field[] fields = SwtSupport.getSwtClass().getFields();
-        for (int i = 0; i < fields.length; i++) {
-          Field field = fields[i];
-          String name = field.getName();
-          if (name.startsWith("COLOR_")) {
-            colors.add(ColorSupport.createInfo(field));
-          }
-        }
-      } catch (Throwable e) {
-        throw ReflectionUtils.propagate(e);
-      }
-      m_systemColors = colors.toArray(new ColorInfo[colors.size()]);
-    }
-    return m_systemColors;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// System
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return {@link ColorInfo}'s for colors from {@link SWT.COLOR_XXX}.
+	 */
+	public static ColorInfo[] getSystemColors(JavaInfo javaInfo) {
+		if (m_systemColors == null) {
+			List<ColorInfo> colors = Lists.newArrayList();
+			try {
+				Field[] fields = SwtSupport.getSwtClass().getFields();
+				for (int i = 0; i < fields.length; i++) {
+					Field field = fields[i];
+					String name = field.getName();
+					if (name.startsWith("COLOR_")) {
+						colors.add(ColorSupport.createInfo(field));
+					}
+				}
+			} catch (Throwable e) {
+				throw ReflectionUtils.propagate(e);
+			}
+			m_systemColors = colors.toArray(new ColorInfo[colors.size()]);
+		}
+		return m_systemColors;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/font/AbstractFontPage.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/font/AbstractFontPage.java
index 7977490fa..bdecdb8bc 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/font/AbstractFontPage.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/font/AbstractFontPage.java
@@ -19,25 +19,25 @@
  * @coverage swt.property.editor
  */
 public abstract class AbstractFontPage extends Composite {
-  protected final FontDialog m_fontDialog;
+	protected final FontDialog m_fontDialog;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractFontPage(Composite parent, int style, FontDialog fontDialog) {
-    super(parent, style);
-    m_fontDialog = fontDialog;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractFontPage(Composite parent, int style, FontDialog fontDialog) {
+		super(parent, style);
+		m_fontDialog = fontDialog;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets the {@link FontInfo} selected in {@link FontDialog}.
-   */
-  public abstract void setFont(FontInfo fontInfo);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets the {@link FontInfo} selected in {@link FontDialog}.
+	 */
+	public abstract void setFont(FontInfo fontInfo);
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/font/ConstructionFontPage.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/font/ConstructionFontPage.java
index fd821f4fa..3976d98e4 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/font/ConstructionFontPage.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/font/ConstructionFontPage.java
@@ -39,184 +39,184 @@
  * @coverage swt.property.editor
  */
 public final class ConstructionFontPage extends AbstractFontPage {
-  private static final String[] m_styleTitles = {"NORMAL", "BOLD", "ITALIC", "BOLD | ITALIC"};
-  private static final int[] m_styleValues = {
-      SwtSupport.NORMAL,
-      SwtSupport.BOLD,
-      SwtSupport.ITALIC,
-      SwtSupport.BOLD_ITALIC};
-  //
-  private final String[] m_families;
-  //
-  private final Text m_familyText;
-  private final List m_familyList;
-  //
-  private final Text m_styleText;
-  private final List m_styleList;
-  //
-  private final Text m_sizeText;
-  private final List m_sizeList;
+	private static final String[] m_styleTitles = {"NORMAL", "BOLD", "ITALIC", "BOLD | ITALIC"};
+	private static final int[] m_styleValues = {
+			SwtSupport.NORMAL,
+			SwtSupport.BOLD,
+			SwtSupport.ITALIC,
+			SwtSupport.BOLD_ITALIC};
+	//
+	private final String[] m_families;
+	//
+	private final Text m_familyText;
+	private final List m_familyList;
+	//
+	private final Text m_styleText;
+	private final List m_styleList;
+	//
+	private final Text m_sizeText;
+	private final List m_sizeList;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ConstructionFontPage(JavaInfo javaInfo, Composite parent, int style, FontDialog fontDialog) {
-    super(parent, style, fontDialog);
-    GridLayoutFactory.create(this).columns(3);
-    // labels
-    {
-      new Label(this, SWT.NONE).setText(ModelMessages.ConstructionFontPage_family);
-      new Label(this, SWT.NONE).setText(ModelMessages.ConstructionFontPage_style);
-      new Label(this, SWT.NONE).setText(ModelMessages.ConstructionFontPage_size);
-    }
-    // text's
-    {
-      {
-        m_familyText = new Text(this, SWT.BORDER | SWT.READ_ONLY);
-        GridDataFactory.create(m_familyText).fill();
-      }
-      {
-        m_styleText = new Text(this, SWT.BORDER | SWT.READ_ONLY);
-        GridDataFactory.create(m_styleText).fill();
-      }
-      {
-        m_sizeText = new Text(this, SWT.BORDER | SWT.READ_ONLY);
-        GridDataFactory.create(m_sizeText).fill();
-      }
-    }
-    // list's
-    {
-      {
-        m_familyList = new List(this, SWT.BORDER | SWT.V_SCROLL);
-        GridDataFactory.create(m_familyList).hintVC(12).grab().fill();
-        // add items
-        String[] families;
-        try {
-          families = FontSupport.getFontFamilies();
-        } catch (Throwable e) {
-          DesignerPlugin.log(e);
-          families = ArrayUtils.EMPTY_STRING_ARRAY;
-        }
-        m_families = families;
-        m_familyList.setItems(m_families);
-        // add listener
-        m_familyList.addListener(SWT.Selection, new Listener() {
-          @Override
-          public void handleEvent(Event event) {
-            int index = m_familyList.getSelectionIndex();
-            String family = m_families[index];
-            m_familyText.setText(family);
-            updateFont();
-          }
-        });
-      }
-      {
-        m_styleList = new List(this, SWT.BORDER);
-        GridDataFactory.create(m_styleList).hintHC(20).fill();
-        // add items
-        for (int i = 0; i < m_styleTitles.length; i++) {
-          String styleTitle = m_styleTitles[i];
-          m_styleList.add(styleTitle);
-        }
-        // add listener
-        m_styleList.addListener(SWT.Selection, new Listener() {
-          @Override
-          public void handleEvent(Event event) {
-            int index = m_styleList.getSelectionIndex();
-            String fontStyle = m_styleTitles[index];
-            m_styleText.setText(fontStyle);
-            updateFont();
-          }
-        });
-      }
-      {
-        m_sizeList = new List(this, SWT.BORDER | SWT.V_SCROLL);
-        GridDataFactory.create(m_sizeList).hintC(10, 12).fill();
-        // add items
-        for (int i = 5; i < 100; i++) {
-          m_sizeList.add(Integer.toString(i));
-        }
-        // add listener
-        m_sizeList.addListener(SWT.Selection, new Listener() {
-          @Override
-          public void handleEvent(Event event) {
-            String size = m_sizeList.getSelection()[0];
-            m_sizeText.setText(size);
-            updateFont();
-          }
-        });
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ConstructionFontPage(JavaInfo javaInfo, Composite parent, int style, FontDialog fontDialog) {
+		super(parent, style, fontDialog);
+		GridLayoutFactory.create(this).columns(3);
+		// labels
+		{
+			new Label(this, SWT.NONE).setText(ModelMessages.ConstructionFontPage_family);
+			new Label(this, SWT.NONE).setText(ModelMessages.ConstructionFontPage_style);
+			new Label(this, SWT.NONE).setText(ModelMessages.ConstructionFontPage_size);
+		}
+		// text's
+		{
+			{
+				m_familyText = new Text(this, SWT.BORDER | SWT.READ_ONLY);
+				GridDataFactory.create(m_familyText).fill();
+			}
+			{
+				m_styleText = new Text(this, SWT.BORDER | SWT.READ_ONLY);
+				GridDataFactory.create(m_styleText).fill();
+			}
+			{
+				m_sizeText = new Text(this, SWT.BORDER | SWT.READ_ONLY);
+				GridDataFactory.create(m_sizeText).fill();
+			}
+		}
+		// list's
+		{
+			{
+				m_familyList = new List(this, SWT.BORDER | SWT.V_SCROLL);
+				GridDataFactory.create(m_familyList).hintVC(12).grab().fill();
+				// add items
+				String[] families;
+				try {
+					families = FontSupport.getFontFamilies();
+				} catch (Throwable e) {
+					DesignerPlugin.log(e);
+					families = ArrayUtils.EMPTY_STRING_ARRAY;
+				}
+				m_families = families;
+				m_familyList.setItems(m_families);
+				// add listener
+				m_familyList.addListener(SWT.Selection, new Listener() {
+					@Override
+					public void handleEvent(Event event) {
+						int index = m_familyList.getSelectionIndex();
+						String family = m_families[index];
+						m_familyText.setText(family);
+						updateFont();
+					}
+				});
+			}
+			{
+				m_styleList = new List(this, SWT.BORDER);
+				GridDataFactory.create(m_styleList).hintHC(20).fill();
+				// add items
+				for (int i = 0; i < m_styleTitles.length; i++) {
+					String styleTitle = m_styleTitles[i];
+					m_styleList.add(styleTitle);
+				}
+				// add listener
+				m_styleList.addListener(SWT.Selection, new Listener() {
+					@Override
+					public void handleEvent(Event event) {
+						int index = m_styleList.getSelectionIndex();
+						String fontStyle = m_styleTitles[index];
+						m_styleText.setText(fontStyle);
+						updateFont();
+					}
+				});
+			}
+			{
+				m_sizeList = new List(this, SWT.BORDER | SWT.V_SCROLL);
+				GridDataFactory.create(m_sizeList).hintC(10, 12).fill();
+				// add items
+				for (int i = 5; i < 100; i++) {
+					m_sizeList.add(Integer.toString(i));
+				}
+				// add listener
+				m_sizeList.addListener(SWT.Selection, new Listener() {
+					@Override
+					public void handleEvent(Event event) {
+						String size = m_sizeList.getSelection()[0];
+						m_sizeText.setText(size);
+						updateFont();
+					}
+				});
+			}
+		}
+	}
 
-  /**
-   * Updates current font in {@link FontDialog} based on selection in controls.
-   */
-  private void updateFont() {
-    String family = m_familyText.getText();
-    // prepare style
-    Object style = m_styleValues[0];
-    {
-      int index = m_styleList.getSelectionIndex();
-      if (index != -1) {
-        style = m_styleValues[index];
-      }
-    }
-    // prepare size
-    int size;
-    try {
-      size = Integer.parseInt(m_sizeText.getText());
-    } catch (Throwable e) {
-      size = 12;
-    }
-    //
-    try {
-      Object font = FontSupport.createFont(family, size, style);
-      m_fontDialog.setFontInfo(new FontInfo(null, font, null, true));
-    } catch (Throwable e) {
-      DesignerPlugin.log(e);
-    }
-  }
+	/**
+	 * Updates current font in {@link FontDialog} based on selection in controls.
+	 */
+	private void updateFont() {
+		String family = m_familyText.getText();
+		// prepare style
+		Object style = m_styleValues[0];
+		{
+			int index = m_styleList.getSelectionIndex();
+			if (index != -1) {
+				style = m_styleValues[index];
+			}
+		}
+		// prepare size
+		int size;
+		try {
+			size = Integer.parseInt(m_sizeText.getText());
+		} catch (Throwable e) {
+			size = 12;
+		}
+		//
+		try {
+			Object font = FontSupport.createFont(family, size, style);
+			m_fontDialog.setFontInfo(new FontInfo(null, font, null, true));
+		} catch (Throwable e) {
+			DesignerPlugin.log(e);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void setFont(final FontInfo fontInfo) {
-    if (fontInfo != null) {
-      ExecutionUtils.runLog(new RunnableEx() {
-        @Override
-        public void run() throws Exception {
-          Object font = fontInfo.getFont();
-          Object fontData = FontSupport.getFontData(font);
-          // family
-          {
-            String family = FontSupport.getFontName(fontData);
-            m_familyList.setSelection(new String[]{family});
-            m_familyText.setText(family);
-          }
-          // style
-          {
-            int style = FontSupport.getFontStyle(fontData);
-            for (int i = 0; i < m_styleValues.length; i++) {
-              if (style == m_styleValues[i]) {
-                m_styleList.select(i);
-                m_styleText.setText(m_styleTitles[i]);
-              }
-            }
-          }
-          // size
-          {
-            String text = "" + FontSupport.getFontSize(fontData);
-            m_sizeList.setSelection(new String[]{text});
-            m_sizeText.setText(text);
-          }
-        }
-      });
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void setFont(final FontInfo fontInfo) {
+		if (fontInfo != null) {
+			ExecutionUtils.runLog(new RunnableEx() {
+				@Override
+				public void run() throws Exception {
+					Object font = fontInfo.getFont();
+					Object fontData = FontSupport.getFontData(font);
+					// family
+					{
+						String family = FontSupport.getFontName(fontData);
+						m_familyList.setSelection(new String[]{family});
+						m_familyText.setText(family);
+					}
+					// style
+					{
+						int style = FontSupport.getFontStyle(fontData);
+						for (int i = 0; i < m_styleValues.length; i++) {
+							if (style == m_styleValues[i]) {
+								m_styleList.select(i);
+								m_styleText.setText(m_styleTitles[i]);
+							}
+						}
+					}
+					// size
+					{
+						String text = "" + FontSupport.getFontSize(fontData);
+						m_sizeList.setSelection(new String[]{text});
+						m_sizeText.setText(text);
+					}
+				}
+			});
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/font/FontDialog.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/font/FontDialog.java
index 814fd0791..677d49ec0 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/font/FontDialog.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/font/FontDialog.java
@@ -41,177 +41,177 @@
  * @coverage swt.property.editor
  */
 public final class FontDialog extends ReusableDialog {
-  private final JavaInfo m_javaInfo;
-  private FontInfo m_fontInfo;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FontDialog(Shell parentShell, JavaInfo javaInfo) {
-    super(parentShell);
-    m_javaInfo = javaInfo;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void disposeFont() {
-    if (m_fontInfo != null) {
-      m_fontInfo.dispose();
-      m_fontInfo = null;
-    }
-  }
-
-  /**
-   * @return the selected {@link FontInfo}.
-   */
-  public FontInfo getFontInfo() {
-    return m_fontInfo;
-  }
-
-  /**
-   * Sets the selected {@link FontInfo}.
-   */
-  public void setFontInfo(FontInfo fontInfo) {
-    disposeFont();
-    m_fontInfo = fontInfo;
-    updateGUI();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private FontPreviewCanvas m_previewCanvas;
-  private TabFolder m_tabFolder;
-  private final List<AbstractFontPage> m_pages = Lists.newArrayList();
-
-  //
-  @Override
-  protected Control createDialogArea(Composite parent) {
-    Composite area = (Composite) super.createDialogArea(parent);
-    // create preview
-    {
-      Group previewGroup = new Group(area, SWT.NONE);
-      GridDataFactory.create(previewGroup).grabH().fillH();
-      GridLayoutFactory.create(previewGroup);
-      previewGroup.setText(ModelMessages.FontDialog_previewGroup);
-      //
-      m_previewCanvas = new FontPreviewCanvas(previewGroup, SWT.NONE);
-      GridDataFactory.create(m_previewCanvas).grab().fill();
-    }
-    // create folder for pages
-    {
-      m_tabFolder = new TabFolder(area, SWT.NONE);
-      GridDataFactory.create(m_tabFolder).grab().fill();
-      addPages(m_tabFolder);
-      setPageSelection();
-    }
-    //
-    return area;
-  }
-
-  @Override
-  protected void onBeforeOpen() {
-    updateGUI();
-  }
-
-  @Override
-  protected void configureShell(Shell newShell) {
-    super.configureShell(newShell);
-    newShell.setText(ModelMessages.FontDialog_dialogTitle);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Internal
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Updates GUI using current {@link FontInfo}.
-   */
-  private void updateGUI() {
-    if (getShell() != null) {
-      // update preview
-      m_previewCanvas.setFontInfo(m_javaInfo, m_fontInfo);
-      // notify pages
-      for (AbstractFontPage page : m_pages) {
-        page.setFont(m_fontInfo);
-      }
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Pages
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds new page with given title and {@link AbstractFontPage}.
-   */
-  protected final void addPage(String title, AbstractFontPage page) {
-    m_pages.add(page);
-    TabItem tabItem = new TabItem(m_tabFolder, SWT.NONE);
-    tabItem.setText(title);
-    tabItem.setControl(page);
-  }
-
-  /**
-   * Adds pages with {@link AbstractFontPage}'s.
-   */
-  protected void addPages(Composite parent) {
-    addPage(ModelMessages.FontDialog_constructorPage, new ConstructionFontPage(m_javaInfo,
-        parent,
-        SWT.NONE,
-        this));
-    if (JFaceSupport.isAvialable()) {
-      // FIXME removed to avoid JVM crash in eswt-converged.dll
-      // https://bugs.eclipse.org/bugs/show_bug.cgi?id=201442
-      //addPage(JFaceFontPage.NAME, new JFaceFontPage(parent, SWT.NONE, this, m_javaInfo));
-      //
-      try {
-        List<FontRegistryInfo> registries =
-            RegistryContainerInfo.getRegistries(m_javaInfo.getRootJava(), FontRegistryInfo.class);
-        if (!registries.isEmpty()) {
-          addPage(RegistryFontPage.NAME, new RegistryFontPage(parent, SWT.NONE, this, registries));
-        }
-      } catch (Throwable e) {
-        DesignerPlugin.log(e);
-      }
-    }
-  }
-
-  /**
-   * Sets tab-folder selection association with current font value.
-   */
-  private void setPageSelection() {
-    String pageId = m_fontInfo.getPageId();
-    if (pageId != null) {
-      int size = m_tabFolder.getItemCount();
-      for (int i = 0; i < size; i++) {
-        TabItem item = m_tabFolder.getItem(i);
-        if (pageId.equals(item.getText())) {
-          m_tabFolder.setSelection(new TabItem[]{item});
-          break;
-        }
-      }
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Internal access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Closes dialog with "OK" result.
-   */
-  public final void closeOk() {
-    buttonPressed(IDialogConstants.OK_ID);
-  }
+	private final JavaInfo m_javaInfo;
+	private FontInfo m_fontInfo;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FontDialog(Shell parentShell, JavaInfo javaInfo) {
+		super(parentShell);
+		m_javaInfo = javaInfo;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void disposeFont() {
+		if (m_fontInfo != null) {
+			m_fontInfo.dispose();
+			m_fontInfo = null;
+		}
+	}
+
+	/**
+	 * @return the selected {@link FontInfo}.
+	 */
+	public FontInfo getFontInfo() {
+		return m_fontInfo;
+	}
+
+	/**
+	 * Sets the selected {@link FontInfo}.
+	 */
+	public void setFontInfo(FontInfo fontInfo) {
+		disposeFont();
+		m_fontInfo = fontInfo;
+		updateGUI();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private FontPreviewCanvas m_previewCanvas;
+	private TabFolder m_tabFolder;
+	private final List<AbstractFontPage> m_pages = Lists.newArrayList();
+
+	//
+	@Override
+	protected Control createDialogArea(Composite parent) {
+		Composite area = (Composite) super.createDialogArea(parent);
+		// create preview
+		{
+			Group previewGroup = new Group(area, SWT.NONE);
+			GridDataFactory.create(previewGroup).grabH().fillH();
+			GridLayoutFactory.create(previewGroup);
+			previewGroup.setText(ModelMessages.FontDialog_previewGroup);
+			//
+			m_previewCanvas = new FontPreviewCanvas(previewGroup, SWT.NONE);
+			GridDataFactory.create(m_previewCanvas).grab().fill();
+		}
+		// create folder for pages
+		{
+			m_tabFolder = new TabFolder(area, SWT.NONE);
+			GridDataFactory.create(m_tabFolder).grab().fill();
+			addPages(m_tabFolder);
+			setPageSelection();
+		}
+		//
+		return area;
+	}
+
+	@Override
+	protected void onBeforeOpen() {
+		updateGUI();
+	}
+
+	@Override
+	protected void configureShell(Shell newShell) {
+		super.configureShell(newShell);
+		newShell.setText(ModelMessages.FontDialog_dialogTitle);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Internal
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Updates GUI using current {@link FontInfo}.
+	 */
+	private void updateGUI() {
+		if (getShell() != null) {
+			// update preview
+			m_previewCanvas.setFontInfo(m_javaInfo, m_fontInfo);
+			// notify pages
+			for (AbstractFontPage page : m_pages) {
+				page.setFont(m_fontInfo);
+			}
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Pages
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds new page with given title and {@link AbstractFontPage}.
+	 */
+	protected final void addPage(String title, AbstractFontPage page) {
+		m_pages.add(page);
+		TabItem tabItem = new TabItem(m_tabFolder, SWT.NONE);
+		tabItem.setText(title);
+		tabItem.setControl(page);
+	}
+
+	/**
+	 * Adds pages with {@link AbstractFontPage}'s.
+	 */
+	protected void addPages(Composite parent) {
+		addPage(ModelMessages.FontDialog_constructorPage, new ConstructionFontPage(m_javaInfo,
+				parent,
+				SWT.NONE,
+				this));
+		if (JFaceSupport.isAvialable()) {
+			// FIXME removed to avoid JVM crash in eswt-converged.dll
+			// https://bugs.eclipse.org/bugs/show_bug.cgi?id=201442
+			//addPage(JFaceFontPage.NAME, new JFaceFontPage(parent, SWT.NONE, this, m_javaInfo));
+			//
+			try {
+				List<FontRegistryInfo> registries =
+						RegistryContainerInfo.getRegistries(m_javaInfo.getRootJava(), FontRegistryInfo.class);
+				if (!registries.isEmpty()) {
+					addPage(RegistryFontPage.NAME, new RegistryFontPage(parent, SWT.NONE, this, registries));
+				}
+			} catch (Throwable e) {
+				DesignerPlugin.log(e);
+			}
+		}
+	}
+
+	/**
+	 * Sets tab-folder selection association with current font value.
+	 */
+	private void setPageSelection() {
+		String pageId = m_fontInfo.getPageId();
+		if (pageId != null) {
+			int size = m_tabFolder.getItemCount();
+			for (int i = 0; i < size; i++) {
+				TabItem item = m_tabFolder.getItem(i);
+				if (pageId.equals(item.getText())) {
+					m_tabFolder.setSelection(new TabItem[]{item});
+					break;
+				}
+			}
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Internal access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Closes dialog with "OK" result.
+	 */
+	public final void closeOk() {
+		buttonPressed(IDialogConstants.OK_ID);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/font/FontInfo.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/font/FontInfo.java
index c3db15d3f..50258e4e5 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/font/FontInfo.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/font/FontInfo.java
@@ -23,92 +23,92 @@
  * @coverage swt.property.editor
  */
 public final class FontInfo {
-  private final String m_name;
-  private final Object m_font;
-  private final String m_sourceCode;
-  private final boolean m_doDispose;
-  private Object m_data;
-  private String m_pageId;
+	private final String m_name;
+	private final Object m_font;
+	private final String m_sourceCode;
+	private final boolean m_doDispose;
+	private Object m_data;
+	private String m_pageId;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FontInfo(String name, Object font, String sourceCode, boolean doDispose) {
-    m_name = name;
-    m_font = font;
-    m_sourceCode = sourceCode;
-    m_doDispose = doDispose;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FontInfo(String name, Object font, String sourceCode, boolean doDispose) {
+		m_name = name;
+		m_font = font;
+		m_sourceCode = sourceCode;
+		m_doDispose = doDispose;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Dispose
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void dispose() {
-    ExecutionUtils.runLog(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        if (m_doDispose) {
-          ReflectionUtils.invokeMethod(m_font, "dispose()");
-        }
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Dispose
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void dispose() {
+		ExecutionUtils.runLog(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				if (m_doDispose) {
+					ReflectionUtils.invokeMethod(m_font, "dispose()");
+				}
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the name of font.
-   */
-  public String getName() {
-    return m_name;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the name of font.
+	 */
+	public String getName() {
+		return m_name;
+	}
 
-  /**
-   * @return the inner {@link Font}.
-   */
-  public Object getFont() {
-    return m_font;
-  }
+	/**
+	 * @return the inner {@link Font}.
+	 */
+	public Object getFont() {
+		return m_font;
+	}
 
-  /**
-   * @return source code association with this font info.
-   */
-  public String getSourceCode() {
-    return m_sourceCode;
-  }
+	/**
+	 * @return source code association with this font info.
+	 */
+	public String getSourceCode() {
+		return m_sourceCode;
+	}
 
-  /**
-   * @return the data associated with this {@link FontInfo}.
-   */
-  public Object getData() {
-    return m_data;
-  }
+	/**
+	 * @return the data associated with this {@link FontInfo}.
+	 */
+	public Object getData() {
+		return m_data;
+	}
 
-  /**
-   * Sets the data associated with this {@link FontInfo}.
-   */
-  public void setData(Object data) {
-    m_data = data;
-  }
+	/**
+	 * Sets the data associated with this {@link FontInfo}.
+	 */
+	public void setData(Object data) {
+		m_data = data;
+	}
 
-  /**
-   * @return owner page id for this value.
-   */
-  public String getPageId() {
-    return m_pageId;
-  }
+	/**
+	 * @return owner page id for this value.
+	 */
+	public String getPageId() {
+		return m_pageId;
+	}
 
-  /**
-   * Sets owner page id for this value.
-   */
-  public void setPageId(String pageId) {
-    m_pageId = pageId;
-  }
+	/**
+	 * Sets owner page id for this value.
+	 */
+	public void setPageId(String pageId) {
+		m_pageId = pageId;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/font/FontPreviewCanvas.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/font/FontPreviewCanvas.java
index e6dca01a5..cbff4f82a 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/font/FontPreviewCanvas.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/font/FontPreviewCanvas.java
@@ -34,87 +34,87 @@
  * @coverage swt.property.editor
  */
 public final class FontPreviewCanvas extends Canvas {
-  private Image m_image;
+	private Image m_image;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FontPreviewCanvas(Composite parent, int style) {
-    super(parent, style);
-    addListener(SWT.Paint, new Listener() {
-      @Override
-      public void handleEvent(Event event) {
-        onPaint(event.gc);
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FontPreviewCanvas(Composite parent, int style) {
+		super(parent, style);
+		addListener(SWT.Paint, new Listener() {
+			@Override
+			public void handleEvent(Event event) {
+				onPaint(event.gc);
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Widget
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void dispose() {
-    if (m_image != null) {
-      m_image.dispose();
-      m_image = null;
-    }
-    super.dispose();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Widget
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void dispose() {
+		if (m_image != null) {
+			m_image.dispose();
+			m_image = null;
+		}
+		super.dispose();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Painting
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Point computeSize(int wHint, int hHint, boolean changed) {
-    int width = 450;
-    int height = 50;
-    return new Point(width, height);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Painting
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Point computeSize(int wHint, int hHint, boolean changed) {
+		int width = 450;
+		int height = 50;
+		return new Point(width, height);
+	}
 
-  /**
-   * Handler for {@link SWT#Paint}.
-   */
-  protected final void onPaint(GC gc) {
-    if (m_image != null) {
-      // draw image
-      Rectangle clientArea = getClientArea();
-      DrawUtils.drawImageCHCV(
-          gc,
-          m_image,
-          clientArea.x,
-          clientArea.y,
-          clientArea.width,
-          clientArea.height);
-    }
-  }
+	/**
+	 * Handler for {@link SWT#Paint}.
+	 */
+	protected final void onPaint(GC gc) {
+		if (m_image != null) {
+			// draw image
+			Rectangle clientArea = getClientArea();
+			DrawUtils.drawImageCHCV(
+					gc,
+					m_image,
+					clientArea.x,
+					clientArea.y,
+					clientArea.width,
+					clientArea.height);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets the {@link Font} to display.
-   */
-  public void setFontInfo(JavaInfo javaInfo, final FontInfo fontInfo) {
-    if (m_image != null) {
-      m_image.dispose();
-      m_image = null;
-    }
-    if (fontInfo != null) {
-      ExecutionUtils.runLog(new RunnableEx() {
-        @Override
-        public void run() throws Exception {
-          m_image = ToolkitSupport.getFontPreview(fontInfo.getFont());
-        }
-      });
-    }
-    redraw();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets the {@link Font} to display.
+	 */
+	public void setFontInfo(JavaInfo javaInfo, final FontInfo fontInfo) {
+		if (m_image != null) {
+			m_image.dispose();
+			m_image = null;
+		}
+		if (fontInfo != null) {
+			ExecutionUtils.runLog(new RunnableEx() {
+				@Override
+				public void run() throws Exception {
+					m_image = ToolkitSupport.getFontPreview(fontInfo.getFont());
+				}
+			});
+		}
+		redraw();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/font/FontPropertyEditor.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/font/FontPropertyEditor.java
index 5f0c2a0bb..f9ca8327d 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/font/FontPropertyEditor.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/font/FontPropertyEditor.java
@@ -41,312 +41,312 @@
  * @coverage swt.property.editor
  */
 public final class FontPropertyEditor extends TextDialogPropertyEditor
-    implements
-      IClipboardSourceProvider {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final PropertyEditor INSTANCE = new FontPropertyEditor();
+implements
+IClipboardSourceProvider {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final PropertyEditor INSTANCE = new FontPropertyEditor();
 
-  private FontPropertyEditor() {
-  }
+	private FontPropertyEditor() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getText(Property property) throws Exception {
-    Object value = property.getValue();
-    if (value != Property.UNKNOWN_VALUE) {
-      Expression expression = ((GenericProperty) property).getExpression();
-      if (expression instanceof MethodInvocation) {
-        MethodInvocation invocation = (MethodInvocation) expression;
-        // JFaceResource.getXXXFont()
-        if (isJFaceValue(invocation)) {
-          return invocation.getName().getIdentifier() + "()";
-        }
-        // FontRegistry.get(String key)
-        if (isFontRegistryInvocation(invocation)) {
-          return getTextForRegistry(property, invocation);
-        }
-      }
-      // default font
-      if (value == null) {
-        value = DisplaySupport.getSystemFont();
-      }
-      // use font.toString()
-      return getText(value);
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getText(Property property) throws Exception {
+		Object value = property.getValue();
+		if (value != Property.UNKNOWN_VALUE) {
+			Expression expression = ((GenericProperty) property).getExpression();
+			if (expression instanceof MethodInvocation) {
+				MethodInvocation invocation = (MethodInvocation) expression;
+				// JFaceResource.getXXXFont()
+				if (isJFaceValue(invocation)) {
+					return invocation.getName().getIdentifier() + "()";
+				}
+				// FontRegistry.get(String key)
+				if (isFontRegistryInvocation(invocation)) {
+					return getTextForRegistry(property, invocation);
+				}
+			}
+			// default font
+			if (value == null) {
+				value = DisplaySupport.getSystemFont();
+			}
+			// use font.toString()
+			return getText(value);
+		}
+		return null;
+	}
 
-  private static String getText(Object font) throws Exception {
-    Object fontData = FontSupport.getFontData(font);
-    StringBuilder buffer = new StringBuilder();
-    buffer.append(FontSupport.getFontName(fontData));
-    buffer.append(" ");
-    buffer.append(FontSupport.getFontSize(fontData));
-    {
-      String styleText = FontSupport.getFontStyleText(fontData);
-      if (styleText.length() != 0) {
-        buffer.append(" ");
-        buffer.append(styleText);
-      }
-    }
-    return buffer.toString();
-  }
+	private static String getText(Object font) throws Exception {
+		Object fontData = FontSupport.getFontData(font);
+		StringBuilder buffer = new StringBuilder();
+		buffer.append(FontSupport.getFontName(fontData));
+		buffer.append(" ");
+		buffer.append(FontSupport.getFontSize(fontData));
+		{
+			String styleText = FontSupport.getFontStyleText(fontData);
+			if (styleText.length() != 0) {
+				buffer.append(" ");
+				buffer.append(styleText);
+			}
+		}
+		return buffer.toString();
+	}
 
-  /**
-   * @return <code>true</code> if given {@link MethodInvocation} represented method
-   *         <code>JFaceResources.getXXXFont()</code>.
-   */
-  private static boolean isJFaceValue(MethodInvocation invocation) {
-    String identifier = invocation.getName().getIdentifier();
-    return identifier.startsWith("get")
-        && identifier.endsWith("Font")
-        && AstNodeUtils.isSuccessorOf(
-            invocation.getExpression(),
-            "org.eclipse.jface.resource.JFaceResources") && invocation.arguments().isEmpty();
-  }
+	/**
+	 * @return <code>true</code> if given {@link MethodInvocation} represented method
+	 *         <code>JFaceResources.getXXXFont()</code>.
+	 */
+	private static boolean isJFaceValue(MethodInvocation invocation) {
+		String identifier = invocation.getName().getIdentifier();
+		return identifier.startsWith("get")
+				&& identifier.endsWith("Font")
+				&& AstNodeUtils.isSuccessorOf(
+						invocation.getExpression(),
+						"org.eclipse.jface.resource.JFaceResources") && invocation.arguments().isEmpty();
+	}
 
-  /**
-   * @return <code>true</code> if given {@link Expression} represented method
-   *         <code>JFaceResources.getXXXFont()</code>.
-   */
-  private static boolean isJFaceValue(Expression expression) {
-    if (expression instanceof MethodInvocation) {
-      return isJFaceValue((MethodInvocation) expression);
-    }
-    return false;
-  }
+	/**
+	 * @return <code>true</code> if given {@link Expression} represented method
+	 *         <code>JFaceResources.getXXXFont()</code>.
+	 */
+	private static boolean isJFaceValue(Expression expression) {
+		if (expression instanceof MethodInvocation) {
+			return isJFaceValue((MethodInvocation) expression);
+		}
+		return false;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IClipboardSourceProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getClipboardSource(GenericProperty property) throws Exception {
-    // FondData based FontInfo
-    FontInfo fontInfo;
-    {
-      Object value = property.getValue();
-      if (value == Property.UNKNOWN_VALUE) {
-        return null;
-      }
-      fontInfo = new FontInfo(null, value, null, false);
-    }
-    // JFaceResource.getXXXFont()
-    {
-      Expression expression = property.getExpression();
-      // JFaceResource.getXXXFont()
-      if (expression instanceof MethodInvocation) {
-        MethodInvocation invocation = (MethodInvocation) expression;
-        String identifier = invocation.getName().getIdentifier();
-        if (identifier.startsWith("get")
-            && identifier.endsWith("Font")
-            && AstNodeUtils.getFullyQualifiedName(invocation.getExpression(), false).equals(
-                "org.eclipse.jface.resource.JFaceResources")
-            && invocation.arguments().isEmpty()) {
-          fontInfo =
-              new FontInfo(null, null, "org.eclipse.jface.resource.JFaceResources."
-                  + identifier
-                  + "()", false);
-        }
-      }
-    }
-    // convert FontInfo into source
-    return getSource(property, fontInfo);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IClipboardSourceProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getClipboardSource(GenericProperty property) throws Exception {
+		// FondData based FontInfo
+		FontInfo fontInfo;
+		{
+			Object value = property.getValue();
+			if (value == Property.UNKNOWN_VALUE) {
+				return null;
+			}
+			fontInfo = new FontInfo(null, value, null, false);
+		}
+		// JFaceResource.getXXXFont()
+		{
+			Expression expression = property.getExpression();
+			// JFaceResource.getXXXFont()
+			if (expression instanceof MethodInvocation) {
+				MethodInvocation invocation = (MethodInvocation) expression;
+				String identifier = invocation.getName().getIdentifier();
+				if (identifier.startsWith("get")
+						&& identifier.endsWith("Font")
+						&& AstNodeUtils.getFullyQualifiedName(invocation.getExpression(), false).equals(
+								"org.eclipse.jface.resource.JFaceResources")
+						&& invocation.arguments().isEmpty()) {
+					fontInfo =
+							new FontInfo(null, null, "org.eclipse.jface.resource.JFaceResources."
+									+ identifier
+									+ "()", false);
+				}
+			}
+		}
+		// convert FontInfo into source
+		return getSource(property, fontInfo);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void openDialog(Property property) throws Exception {
-    GenericProperty genericProperty = (GenericProperty) property;
-    FontDialog fontDialog =
-        new FontDialog(DesignerPlugin.getShell(), genericProperty.getJavaInfo());
-    // set initial value
-    {
-      Object value = property.getValue();
-      if (value == null || value == Property.UNKNOWN_VALUE) {
-        value = DisplaySupport.getSystemFont();
-      }
-      // prepare font value
-      Object[] registryValue = getRegistryValue(property);
-      FontInfo fontInfo;
-      if (registryValue == null) {
-        fontInfo = new FontInfo(null, value, null, false);
-        if (isJFaceValue(genericProperty.getExpression())) {
-          fontInfo.setPageId(JFaceFontPage.NAME);
-        }
-      } else {
-        fontInfo = new FontInfo(null, value, (String) registryValue[3], false);
-        fontInfo.setData(registryValue);
-        fontInfo.setPageId(RegistryFontPage.NAME);
-      }
-      // set value
-      fontDialog.setFontInfo(fontInfo);
-    }
-    // open dialog
-    if (fontDialog.open() == Window.OK) {
-      FontInfo fontInfo = fontDialog.getFontInfo();
-      // prepare source
-      String source = getSource(genericProperty, fontInfo);
-      // set expression
-      genericProperty.setExpression(source, Property.UNKNOWN_VALUE);
-    }
-    fontDialog.disposeFont();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void openDialog(Property property) throws Exception {
+		GenericProperty genericProperty = (GenericProperty) property;
+		FontDialog fontDialog =
+				new FontDialog(DesignerPlugin.getShell(), genericProperty.getJavaInfo());
+		// set initial value
+		{
+			Object value = property.getValue();
+			if (value == null || value == Property.UNKNOWN_VALUE) {
+				value = DisplaySupport.getSystemFont();
+			}
+			// prepare font value
+			Object[] registryValue = getRegistryValue(property);
+			FontInfo fontInfo;
+			if (registryValue == null) {
+				fontInfo = new FontInfo(null, value, null, false);
+				if (isJFaceValue(genericProperty.getExpression())) {
+					fontInfo.setPageId(JFaceFontPage.NAME);
+				}
+			} else {
+				fontInfo = new FontInfo(null, value, (String) registryValue[3], false);
+				fontInfo.setData(registryValue);
+				fontInfo.setPageId(RegistryFontPage.NAME);
+			}
+			// set value
+			fontDialog.setFontInfo(fontInfo);
+		}
+		// open dialog
+		if (fontDialog.open() == Window.OK) {
+			FontInfo fontInfo = fontDialog.getFontInfo();
+			// prepare source
+			String source = getSource(genericProperty, fontInfo);
+			// set expression
+			genericProperty.setExpression(source, Property.UNKNOWN_VALUE);
+		}
+		fontDialog.disposeFont();
+	}
 
-  /**
-   * @return the source for given {@link FontInfo}.
-   */
-  private static String getSource(GenericProperty property, FontInfo fontInfo) throws Exception {
-    String source;
-    if (fontInfo.getSourceCode() != null) {
-      source = fontInfo.getSourceCode();
-    } else {
-      Object fontData = FontSupport.getFontData(fontInfo.getFont());
-      // prepare prefix
-      String prefix;
-      {
-        IPreferenceStore preferences =
-            property.getJavaInfo().getDescription().getToolkit().getPreferences();
-        if (preferences.getBoolean(IPreferenceConstants.P_USE_RESOURCE_MANAGER)) {
-          ManagerUtils.ensure_SWTResourceManager(property.getJavaInfo());
-          prefix = "org.eclipse.wb.swt.SWTResourceManager.getFont(";
-        } else {
-          prefix = "new org.eclipse.swt.graphics.Font(null, ";
-        }
-      }
-      // prepare source
-      source =
-          prefix
-              + "\""
-              + FontSupport.getFontName(fontData)
-              + "\", "
-              + FontSupport.getFontSize(fontData)
-              + ", "
-              + FontSupport.getFontStyleSource(fontData)
-              + ")";
-    }
-    return source;
-  }
+	/**
+	 * @return the source for given {@link FontInfo}.
+	 */
+	private static String getSource(GenericProperty property, FontInfo fontInfo) throws Exception {
+		String source;
+		if (fontInfo.getSourceCode() != null) {
+			source = fontInfo.getSourceCode();
+		} else {
+			Object fontData = FontSupport.getFontData(fontInfo.getFont());
+			// prepare prefix
+			String prefix;
+			{
+				IPreferenceStore preferences =
+						property.getJavaInfo().getDescription().getToolkit().getPreferences();
+				if (preferences.getBoolean(IPreferenceConstants.P_USE_RESOURCE_MANAGER)) {
+					ManagerUtils.ensure_SWTResourceManager(property.getJavaInfo());
+					prefix = "org.eclipse.wb.swt.SWTResourceManager.getFont(";
+				} else {
+					prefix = "new org.eclipse.swt.graphics.Font(null, ";
+				}
+			}
+			// prepare source
+			source =
+					prefix
+					+ "\""
+					+ FontSupport.getFontName(fontData)
+					+ "\", "
+					+ FontSupport.getFontSize(fontData)
+					+ ", "
+					+ FontSupport.getFontStyleSource(fontData)
+					+ ")";
+		}
+		return source;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // FontRegistry
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static boolean isFontRegistryInvocation(MethodInvocation invocation) {
-    return AstNodeUtils.isMethodInvocation(
-        invocation,
-        "org.eclipse.jface.resource.FontRegistry",
-        new String[]{
-            "get(java.lang.String)",
-            "getBold(java.lang.String)",
-            "getItalic(java.lang.String)"});
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// FontRegistry
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static boolean isFontRegistryInvocation(MethodInvocation invocation) {
+		return AstNodeUtils.isMethodInvocation(
+				invocation,
+				"org.eclipse.jface.resource.FontRegistry",
+				new String[]{
+						"get(java.lang.String)",
+						"getBold(java.lang.String)",
+				"getItalic(java.lang.String)"});
+	}
 
-  private static String getTextForRegistry(Property property, MethodInvocation invocation)
-      throws Exception {
-    Object keyArgument = invocation.arguments().get(0);
-    if (keyArgument instanceof QualifiedName) {
-      // prepare title for registry
-      String registryTitle;
-      {
-        GenericProperty genericProperty = (GenericProperty) property;
-        ResourceRegistryInfo registry =
-            RegistryContainerInfo.getRegistry(
-                genericProperty.getJavaInfo().getRootJava(),
-                invocation.getExpression());
-        registryTitle = registry.getVariableSupport().getTitle();
-      }
-      // prepare key
-      String key;
-      {
-        QualifiedName keyQualifiedName = (QualifiedName) keyArgument;
-        key = keyQualifiedName.getName().getIdentifier();
-      }
-      // prepare style prefix
-      String prefix = "";
-      {
-        String signature = AstNodeUtils.getMethodSignature(invocation);
-        if (signature.startsWith("getBold")) {
-          prefix = "(b)";
-        } else if (signature.startsWith("getItalic")) {
-          prefix = "(i)";
-        }
-      }
-      //
-      return registryTitle + " - " + key + prefix;
-    }
-    return null;
-  }
+	private static String getTextForRegistry(Property property, MethodInvocation invocation)
+			throws Exception {
+		Object keyArgument = invocation.arguments().get(0);
+		if (keyArgument instanceof QualifiedName) {
+			// prepare title for registry
+			String registryTitle;
+			{
+				GenericProperty genericProperty = (GenericProperty) property;
+				ResourceRegistryInfo registry =
+						RegistryContainerInfo.getRegistry(
+								genericProperty.getJavaInfo().getRootJava(),
+								invocation.getExpression());
+				registryTitle = registry.getVariableSupport().getTitle();
+			}
+			// prepare key
+			String key;
+			{
+				QualifiedName keyQualifiedName = (QualifiedName) keyArgument;
+				key = keyQualifiedName.getName().getIdentifier();
+			}
+			// prepare style prefix
+			String prefix = "";
+			{
+				String signature = AstNodeUtils.getMethodSignature(invocation);
+				if (signature.startsWith("getBold")) {
+					prefix = "(b)";
+				} else if (signature.startsWith("getItalic")) {
+					prefix = "(i)";
+				}
+			}
+			//
+			return registryTitle + " - " + key + prefix;
+		}
+		return null;
+	}
 
-  /**
-   * @return <code>[{@link ResourceRegistryInfo}, {@link KeyFieldInfo}, {none, bold, italic}, source]</code>
-   *         if property value sets as "JFace Font Registry" otherwise <code>null</code>.
-   */
-  private static Object[] getRegistryValue(Property property) throws Exception {
-    GenericProperty genericProperty = (GenericProperty) property;
-    Expression expression = genericProperty.getExpression();
-    //
-    if (expression instanceof MethodInvocation) {
-      MethodInvocation invocation = (MethodInvocation) expression;
-      String signature = AstNodeUtils.getMethodSignature(invocation);
-      if (isFontRegistryInvocation(invocation)) {
-        Object keyArgument = invocation.arguments().get(0);
-        if (keyArgument instanceof QualifiedName) {
-          ResourceRegistryInfo registryInfo =
-              RegistryContainerInfo.getRegistry(
-                  genericProperty.getJavaInfo().getRootJava(),
-                  invocation.getExpression());
-          // prepare key
-          QualifiedName keyQualifiedName = (QualifiedName) keyArgument;
-          String keyName = keyQualifiedName.getName().getIdentifier();
-          KeyFieldInfo keyFieldInfo = null;
-          List<KeyFieldInfo> keyFields = registryInfo.getKeyFields();
-          for (KeyFieldInfo info : keyFields) {
-            if (keyName.equals(info.keyName)) {
-              keyFieldInfo = info;
-              break;
-            }
-          }
-          if (keyFieldInfo == null) {
-            return null;
-          }
-          // prepare method type
-          int selectionIndex = RegistryFontPage.FONT_STYLE_NONE;
-          String methodName = "get";
-          if (signature.startsWith("getBold")) {
-            selectionIndex = RegistryFontPage.FONT_STYLE_BOLD;
-            methodName += "Bold";
-          } else if (signature.startsWith("getItalic")) {
-            selectionIndex = RegistryFontPage.FONT_STYLE_ITALIC;
-            methodName += "Italic";
-          }
-          // prepare source
-          String source =
-              TemplateUtils.format(
-                  "{0}.{1}({2}.{3})",
-                  registryInfo,
-                  methodName,
-                  registryInfo.getDescription().getComponentClass().getName(),
-                  keyQualifiedName.getName().getIdentifier());
-          //
-          return new Object[]{registryInfo, keyFieldInfo, selectionIndex, source};
-        }
-      }
-    }
-    return null;
-  }
+	/**
+	 * @return <code>[{@link ResourceRegistryInfo}, {@link KeyFieldInfo}, {none, bold, italic}, source]</code>
+	 *         if property value sets as "JFace Font Registry" otherwise <code>null</code>.
+	 */
+	private static Object[] getRegistryValue(Property property) throws Exception {
+		GenericProperty genericProperty = (GenericProperty) property;
+		Expression expression = genericProperty.getExpression();
+		//
+		if (expression instanceof MethodInvocation) {
+			MethodInvocation invocation = (MethodInvocation) expression;
+			String signature = AstNodeUtils.getMethodSignature(invocation);
+			if (isFontRegistryInvocation(invocation)) {
+				Object keyArgument = invocation.arguments().get(0);
+				if (keyArgument instanceof QualifiedName) {
+					ResourceRegistryInfo registryInfo =
+							RegistryContainerInfo.getRegistry(
+									genericProperty.getJavaInfo().getRootJava(),
+									invocation.getExpression());
+					// prepare key
+					QualifiedName keyQualifiedName = (QualifiedName) keyArgument;
+					String keyName = keyQualifiedName.getName().getIdentifier();
+					KeyFieldInfo keyFieldInfo = null;
+					List<KeyFieldInfo> keyFields = registryInfo.getKeyFields();
+					for (KeyFieldInfo info : keyFields) {
+						if (keyName.equals(info.keyName)) {
+							keyFieldInfo = info;
+							break;
+						}
+					}
+					if (keyFieldInfo == null) {
+						return null;
+					}
+					// prepare method type
+					int selectionIndex = RegistryFontPage.FONT_STYLE_NONE;
+					String methodName = "get";
+					if (signature.startsWith("getBold")) {
+						selectionIndex = RegistryFontPage.FONT_STYLE_BOLD;
+						methodName += "Bold";
+					} else if (signature.startsWith("getItalic")) {
+						selectionIndex = RegistryFontPage.FONT_STYLE_ITALIC;
+						methodName += "Italic";
+					}
+					// prepare source
+					String source =
+							TemplateUtils.format(
+									"{0}.{1}({2}.{3})",
+									registryInfo,
+									methodName,
+									registryInfo.getDescription().getComponentClass().getName(),
+									keyQualifiedName.getName().getIdentifier());
+					//
+					return new Object[]{registryInfo, keyFieldInfo, selectionIndex, source};
+				}
+			}
+		}
+		return null;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/font/JFaceFontPage.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/font/JFaceFontPage.java
index 354886884..b6ec339bb 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/font/JFaceFontPage.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/font/JFaceFontPage.java
@@ -38,82 +38,82 @@
  * @coverage swt.property.editor
  */
 public final class JFaceFontPage extends AbstractFontPage {
-  public static final String NAME = "JFace";
-  //
-  private final Table m_fontTable;
-  private final List<FontInfo> m_fonts;
+	public static final String NAME = "JFace";
+	//
+	private final Table m_fontTable;
+	private final List<FontInfo> m_fonts;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public JFaceFontPage(Composite parent, int style, FontDialog fontDialog, JavaInfo javaInfo) {
-    super(parent, style, fontDialog);
-    GridLayoutFactory.create(this);
-    //
-    {
-      new Label(this, SWT.NONE).setText(ModelMessages.JFaceFontPage_selectFont);
-    }
-    {
-      m_fontTable = new Table(this, SWT.BORDER | SWT.FULL_SELECTION);
-      GridDataFactory.create(m_fontTable).hintVC(15).grab().fill();
-      m_fontTable.setHeaderVisible(true);
-      m_fontTable.setLinesVisible(true);
-      // create columns
-      {
-        new TableColumn(m_fontTable, SWT.NONE).setText(ModelMessages.JFaceFontPage_nameColumn);
-        new TableColumn(m_fontTable, SWT.NONE).setText(ModelMessages.JFaceFontPage_valueColumn);
-      }
-      // add items
-      List<FontInfo> fonts;
-      try {
-        fonts = JFaceSupport.getJFaceFonts();
-      } catch (Throwable e) {
-        DesignerPlugin.log(e);
-        fonts = Collections.emptyList();
-      }
-      m_fonts = fonts;
-      //
-      for (FontInfo fontInfo : m_fonts) {
-        TableItem tableItem = new TableItem(m_fontTable, SWT.NONE);
-        tableItem.setText(0, fontInfo.getName());
-        try {
-          Object fontData = FontSupport.getFontData(fontInfo.getFont());
-          tableItem.setText(
-              1,
-              "" + FontSupport.getFontName(fontData) + " " + FontSupport.getFontSize(fontData));
-        } catch (Throwable e) {
-          tableItem.setText(1, "???");
-        }
-      }
-      // pack columns
-      for (int i = 0; i < m_fontTable.getColumnCount(); i++) {
-        m_fontTable.getColumn(i).pack();
-      }
-      // add listeners
-      m_fontTable.addListener(SWT.Selection, new Listener() {
-        @Override
-        public void handleEvent(Event event) {
-          FontInfo fontInfo = m_fonts.get(m_fontTable.getSelectionIndex());
-          m_fontDialog.setFontInfo(fontInfo);
-        }
-      });
-      m_fontTable.addListener(SWT.MouseDoubleClick, new Listener() {
-        @Override
-        public void handleEvent(Event event) {
-          m_fontDialog.closeOk();
-        }
-      });
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public JFaceFontPage(Composite parent, int style, FontDialog fontDialog, JavaInfo javaInfo) {
+		super(parent, style, fontDialog);
+		GridLayoutFactory.create(this);
+		//
+		{
+			new Label(this, SWT.NONE).setText(ModelMessages.JFaceFontPage_selectFont);
+		}
+		{
+			m_fontTable = new Table(this, SWT.BORDER | SWT.FULL_SELECTION);
+			GridDataFactory.create(m_fontTable).hintVC(15).grab().fill();
+			m_fontTable.setHeaderVisible(true);
+			m_fontTable.setLinesVisible(true);
+			// create columns
+			{
+				new TableColumn(m_fontTable, SWT.NONE).setText(ModelMessages.JFaceFontPage_nameColumn);
+				new TableColumn(m_fontTable, SWT.NONE).setText(ModelMessages.JFaceFontPage_valueColumn);
+			}
+			// add items
+			List<FontInfo> fonts;
+			try {
+				fonts = JFaceSupport.getJFaceFonts();
+			} catch (Throwable e) {
+				DesignerPlugin.log(e);
+				fonts = Collections.emptyList();
+			}
+			m_fonts = fonts;
+			//
+			for (FontInfo fontInfo : m_fonts) {
+				TableItem tableItem = new TableItem(m_fontTable, SWT.NONE);
+				tableItem.setText(0, fontInfo.getName());
+				try {
+					Object fontData = FontSupport.getFontData(fontInfo.getFont());
+					tableItem.setText(
+							1,
+							"" + FontSupport.getFontName(fontData) + " " + FontSupport.getFontSize(fontData));
+				} catch (Throwable e) {
+					tableItem.setText(1, "???");
+				}
+			}
+			// pack columns
+			for (int i = 0; i < m_fontTable.getColumnCount(); i++) {
+				m_fontTable.getColumn(i).pack();
+			}
+			// add listeners
+			m_fontTable.addListener(SWT.Selection, new Listener() {
+				@Override
+				public void handleEvent(Event event) {
+					FontInfo fontInfo = m_fonts.get(m_fontTable.getSelectionIndex());
+					m_fontDialog.setFontInfo(fontInfo);
+				}
+			});
+			m_fontTable.addListener(SWT.MouseDoubleClick, new Listener() {
+				@Override
+				public void handleEvent(Event event) {
+					m_fontDialog.closeOk();
+				}
+			});
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  //
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void setFont(FontInfo fontInfo) {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	//
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void setFont(FontInfo fontInfo) {
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/font/RegistryFontPage.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/font/RegistryFontPage.java
index 37aee70e0..0d178b5e4 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/font/RegistryFontPage.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/font/RegistryFontPage.java
@@ -46,235 +46,235 @@
  * @coverage swt.property.editor
  */
 public final class RegistryFontPage extends AbstractFontPage {
-  public static final String NAME = "FontRegistry";
-  //
-  public static final int FONT_STYLE_NONE = 0;
-  public static final int FONT_STYLE_BOLD = 1;
-  public static final int FONT_STYLE_ITALIC = 2;
-  //
-  private static final RegistryLabelProvider REGISTRY_LABEL_PROVIDER = new RegistryLabelProvider();
-  private static final KeyLabelProvider KEY_LABEL_PROVIDER = new KeyLabelProvider();
-  private static final KeyFieldInfo NO_VALUE_KEY = new KeyFieldInfo(Object.class,
-      ModelMessages.RegistryFontPage_selectRegistry,
-      null);
-  private static final KeyFieldInfo[] NO_VALUE_KEY_INPUT = {NO_VALUE_KEY};
-  //
-  private final Text m_registryText;
-  private final ListViewer m_registryList;
-  //
-  private final Text m_keyText;
-  private final ListViewer m_keyList;
-  //
-  private final Text m_styleText;
-  private final org.eclipse.swt.widgets.List m_methodList;
+	public static final String NAME = "FontRegistry";
+	//
+	public static final int FONT_STYLE_NONE = 0;
+	public static final int FONT_STYLE_BOLD = 1;
+	public static final int FONT_STYLE_ITALIC = 2;
+	//
+	private static final RegistryLabelProvider REGISTRY_LABEL_PROVIDER = new RegistryLabelProvider();
+	private static final KeyLabelProvider KEY_LABEL_PROVIDER = new KeyLabelProvider();
+	private static final KeyFieldInfo NO_VALUE_KEY = new KeyFieldInfo(Object.class,
+			ModelMessages.RegistryFontPage_selectRegistry,
+			null);
+	private static final KeyFieldInfo[] NO_VALUE_KEY_INPUT = {NO_VALUE_KEY};
+	//
+	private final Text m_registryText;
+	private final ListViewer m_registryList;
+	//
+	private final Text m_keyText;
+	private final ListViewer m_keyList;
+	//
+	private final Text m_styleText;
+	private final org.eclipse.swt.widgets.List m_methodList;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public RegistryFontPage(Composite parent,
-      int style,
-      FontDialog fontDialog,
-      List<FontRegistryInfo> registries) {
-    super(parent, style, fontDialog);
-    GridLayoutFactory.create(this).columns(3);
-    // labels
-    {
-      new Label(this, SWT.NONE).setText(ModelMessages.RegistryFontPage_registry);
-      new Label(this, SWT.NONE).setText(ModelMessages.RegistryFontPage_key);
-      new Label(this, SWT.NONE).setText(ModelMessages.RegistryFontPage_method);
-    }
-    // text's
-    {
-      {
-        m_registryText = new Text(this, SWT.BORDER | SWT.READ_ONLY);
-        GridDataFactory.create(m_registryText).fill();
-      }
-      {
-        m_keyText = new Text(this, SWT.BORDER | SWT.READ_ONLY);
-        GridDataFactory.create(m_keyText).fill();
-      }
-      {
-        m_styleText = new Text(this, SWT.BORDER | SWT.READ_ONLY);
-        GridDataFactory.create(m_styleText).fill();
-      }
-    }
-    // list's
-    {
-      {
-        m_registryList = new ListViewer(this, SWT.BORDER | SWT.V_SCROLL);
-        GridDataFactory.create(m_registryList.getControl()).hintVC(12).grab().fill();
-        // add items
-        m_registryList.setContentProvider(new ArrayContentProvider());
-        m_registryList.setLabelProvider(REGISTRY_LABEL_PROVIDER);
-        m_registryList.setInput(registries);
-        // add listener
-        m_registryList.addPostSelectionChangedListener(new ISelectionChangedListener() {
-          FontRegistryInfo m_registryInfo;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public RegistryFontPage(Composite parent,
+			int style,
+			FontDialog fontDialog,
+			List<FontRegistryInfo> registries) {
+		super(parent, style, fontDialog);
+		GridLayoutFactory.create(this).columns(3);
+		// labels
+		{
+			new Label(this, SWT.NONE).setText(ModelMessages.RegistryFontPage_registry);
+			new Label(this, SWT.NONE).setText(ModelMessages.RegistryFontPage_key);
+			new Label(this, SWT.NONE).setText(ModelMessages.RegistryFontPage_method);
+		}
+		// text's
+		{
+			{
+				m_registryText = new Text(this, SWT.BORDER | SWT.READ_ONLY);
+				GridDataFactory.create(m_registryText).fill();
+			}
+			{
+				m_keyText = new Text(this, SWT.BORDER | SWT.READ_ONLY);
+				GridDataFactory.create(m_keyText).fill();
+			}
+			{
+				m_styleText = new Text(this, SWT.BORDER | SWT.READ_ONLY);
+				GridDataFactory.create(m_styleText).fill();
+			}
+		}
+		// list's
+		{
+			{
+				m_registryList = new ListViewer(this, SWT.BORDER | SWT.V_SCROLL);
+				GridDataFactory.create(m_registryList.getControl()).hintVC(12).grab().fill();
+				// add items
+				m_registryList.setContentProvider(new ArrayContentProvider());
+				m_registryList.setLabelProvider(REGISTRY_LABEL_PROVIDER);
+				m_registryList.setInput(registries);
+				// add listener
+				m_registryList.addPostSelectionChangedListener(new ISelectionChangedListener() {
+					FontRegistryInfo m_registryInfo;
 
-          @Override
-          public void selectionChanged(SelectionChangedEvent event) {
-            FontRegistryInfo registryInfo = getSelectionRegistry();
-            if (registryInfo != null && m_registryInfo != registryInfo) {
-              m_registryInfo = registryInfo;
-              m_registryText.setText(REGISTRY_LABEL_PROVIDER.getText(registryInfo));
-              List<KeyFieldInfo> keyFields = registryInfo.getKeyFields();
-              m_keyList.setInput(keyFields);
-              if (!keyFields.isEmpty()) {
-                m_keyList.setSelection(new StructuredSelection(keyFields.get(0)));
-              }
-            }
-          }
-        });
-      }
-      {
-        m_keyList = new ListViewer(this, SWT.BORDER);
-        GridDataFactory.create(m_keyList.getControl()).hintHC(30).fill().grab();
-        // add items
-        m_keyList.setContentProvider(new ArrayContentProvider());
-        m_keyList.setLabelProvider(KEY_LABEL_PROVIDER);
-        m_keyList.setInput(NO_VALUE_KEY_INPUT);
-        // add listener
-        m_keyList.addPostSelectionChangedListener(new ISelectionChangedListener() {
-          KeyFieldInfo m_keyFieldInfo;
+					@Override
+					public void selectionChanged(SelectionChangedEvent event) {
+						FontRegistryInfo registryInfo = getSelectionRegistry();
+						if (registryInfo != null && m_registryInfo != registryInfo) {
+							m_registryInfo = registryInfo;
+							m_registryText.setText(REGISTRY_LABEL_PROVIDER.getText(registryInfo));
+							List<KeyFieldInfo> keyFields = registryInfo.getKeyFields();
+							m_keyList.setInput(keyFields);
+							if (!keyFields.isEmpty()) {
+								m_keyList.setSelection(new StructuredSelection(keyFields.get(0)));
+							}
+						}
+					}
+				});
+			}
+			{
+				m_keyList = new ListViewer(this, SWT.BORDER);
+				GridDataFactory.create(m_keyList.getControl()).hintHC(30).fill().grab();
+				// add items
+				m_keyList.setContentProvider(new ArrayContentProvider());
+				m_keyList.setLabelProvider(KEY_LABEL_PROVIDER);
+				m_keyList.setInput(NO_VALUE_KEY_INPUT);
+				// add listener
+				m_keyList.addPostSelectionChangedListener(new ISelectionChangedListener() {
+					KeyFieldInfo m_keyFieldInfo;
 
-          @Override
-          public void selectionChanged(SelectionChangedEvent event) {
-            KeyFieldInfo keyFieldInfo = getKeyInfo();
-            if (keyFieldInfo != null
-                && keyFieldInfo != NO_VALUE_KEY
-                && m_keyFieldInfo != keyFieldInfo) {
-              m_keyFieldInfo = keyFieldInfo;
-              m_keyText.setText(keyFieldInfo.keyName);
-              if (m_methodList.getSelectionIndex() == -1) {
-                m_methodList.setSelection(0);
-              }
-              updateFont();
-            }
-          }
-        });
-      }
-      {
-        m_methodList = new org.eclipse.swt.widgets.List(this, SWT.BORDER | SWT.V_SCROLL);
-        GridDataFactory.create(m_methodList).hintC(10, 12).fill();
-        // add items
-        m_methodList.add("get()");
-        m_methodList.add("getBold()");
-        m_methodList.add("getItalic()");
-        // add listener
-        m_methodList.addListener(SWT.Selection, new Listener() {
-          @Override
-          public void handleEvent(Event event) {
-            int selectionIndex = m_methodList.getSelectionIndex();
-            if (selectionIndex != -1) {
-              m_styleText.setText(m_methodList.getItem(selectionIndex));
-              updateFont();
-            }
-          }
-        });
-      }
-    }
-  }
+					@Override
+					public void selectionChanged(SelectionChangedEvent event) {
+						KeyFieldInfo keyFieldInfo = getKeyInfo();
+						if (keyFieldInfo != null
+								&& keyFieldInfo != NO_VALUE_KEY
+								&& m_keyFieldInfo != keyFieldInfo) {
+							m_keyFieldInfo = keyFieldInfo;
+							m_keyText.setText(keyFieldInfo.keyName);
+							if (m_methodList.getSelectionIndex() == -1) {
+								m_methodList.setSelection(0);
+							}
+							updateFont();
+						}
+					}
+				});
+			}
+			{
+				m_methodList = new org.eclipse.swt.widgets.List(this, SWT.BORDER | SWT.V_SCROLL);
+				GridDataFactory.create(m_methodList).hintC(10, 12).fill();
+				// add items
+				m_methodList.add("get()");
+				m_methodList.add("getBold()");
+				m_methodList.add("getItalic()");
+				// add listener
+				m_methodList.addListener(SWT.Selection, new Listener() {
+					@Override
+					public void handleEvent(Event event) {
+						int selectionIndex = m_methodList.getSelectionIndex();
+						if (selectionIndex != -1) {
+							m_styleText.setText(m_methodList.getItem(selectionIndex));
+							updateFont();
+						}
+					}
+				});
+			}
+		}
+	}
 
-  protected final FontRegistryInfo getSelectionRegistry() {
-    IStructuredSelection selection = (IStructuredSelection) m_registryList.getSelection();
-    if (selection != null) {
-      return (FontRegistryInfo) selection.getFirstElement();
-    }
-    return null;
-  }
+	protected final FontRegistryInfo getSelectionRegistry() {
+		IStructuredSelection selection = (IStructuredSelection) m_registryList.getSelection();
+		if (selection != null) {
+			return (FontRegistryInfo) selection.getFirstElement();
+		}
+		return null;
+	}
 
-  protected final KeyFieldInfo getKeyInfo() {
-    IStructuredSelection selection = (IStructuredSelection) m_keyList.getSelection();
-    if (selection != null) {
-      return (KeyFieldInfo) selection.getFirstElement();
-    }
-    return null;
-  }
+	protected final KeyFieldInfo getKeyInfo() {
+		IStructuredSelection selection = (IStructuredSelection) m_keyList.getSelection();
+		if (selection != null) {
+			return (KeyFieldInfo) selection.getFirstElement();
+		}
+		return null;
+	}
 
-  /**
-   * Updates current font in {@link FontDialog} based on selection in controls.
-   */
-  protected final void updateFont() {
-    try {
-      FontRegistryInfo registryInfo = getSelectionRegistry();
-      KeyFieldInfo keyFieldInfo = getKeyInfo();
-      int selectionIndex = m_methodList.getSelectionIndex();
-      if (registryInfo == null || keyFieldInfo == null || selectionIndex == -1) {
-        return;
-      }
-      //
-      String methodSignature = "get";
-      if (selectionIndex == FONT_STYLE_BOLD) {
-        methodSignature += "Bold";
-      } else if (selectionIndex == FONT_STYLE_ITALIC) {
-        methodSignature += "Italic";
-      }
-      //
-      String source =
-          TemplateUtils.format(
-              "{0}.{1}({2})",
-              registryInfo,
-              methodSignature,
-              keyFieldInfo.keySource);
-      methodSignature += "(java.lang.String)";
-      //
-      Object fontValue =
-          ReflectionUtils.invokeMethod(
-              registryInfo.getObject(),
-              methodSignature,
-              keyFieldInfo.keyValue);
-      m_fontDialog.setFontInfo(new FontInfo(null, fontValue, source, false));
-    } catch (Throwable e) {
-      DesignerPlugin.log(e);
-    }
-  }
+	/**
+	 * Updates current font in {@link FontDialog} based on selection in controls.
+	 */
+	protected final void updateFont() {
+		try {
+			FontRegistryInfo registryInfo = getSelectionRegistry();
+			KeyFieldInfo keyFieldInfo = getKeyInfo();
+			int selectionIndex = m_methodList.getSelectionIndex();
+			if (registryInfo == null || keyFieldInfo == null || selectionIndex == -1) {
+				return;
+			}
+			//
+			String methodSignature = "get";
+			if (selectionIndex == FONT_STYLE_BOLD) {
+				methodSignature += "Bold";
+			} else if (selectionIndex == FONT_STYLE_ITALIC) {
+				methodSignature += "Italic";
+			}
+			//
+			String source =
+					TemplateUtils.format(
+							"{0}.{1}({2})",
+							registryInfo,
+							methodSignature,
+							keyFieldInfo.keySource);
+			methodSignature += "(java.lang.String)";
+			//
+			Object fontValue =
+					ReflectionUtils.invokeMethod(
+							registryInfo.getObject(),
+							methodSignature,
+							keyFieldInfo.keyValue);
+			m_fontDialog.setFontInfo(new FontInfo(null, fontValue, source, false));
+		} catch (Throwable e) {
+			DesignerPlugin.log(e);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void setFont(final FontInfo fontInfo) {
-    if (fontInfo != null) {
-      ExecutionUtils.runLog(new RunnableEx() {
-        @Override
-        public void run() throws Exception {
-          if (fontInfo.getData() instanceof Object[]) {
-            Object[] data = (Object[]) fontInfo.getData();
-            m_registryList.setSelection(new StructuredSelection(data[0]));
-            m_keyList.setSelection(new StructuredSelection(data[1]));
-            m_methodList.setSelection((Integer) data[2]);
-          }
-        }
-      });
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void setFont(final FontInfo fontInfo) {
+		if (fontInfo != null) {
+			ExecutionUtils.runLog(new RunnableEx() {
+				@Override
+				public void run() throws Exception {
+					if (fontInfo.getData() instanceof Object[]) {
+						Object[] data = (Object[]) fontInfo.getData();
+						m_registryList.setSelection(new StructuredSelection(data[0]));
+						m_keyList.setSelection(new StructuredSelection(data[1]));
+						m_methodList.setSelection((Integer) data[2]);
+					}
+				}
+			});
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Label Provider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static class RegistryLabelProvider extends LabelProvider {
-    @Override
-    public String getText(Object element) {
-      try {
-        FontRegistryInfo registryInfo = (FontRegistryInfo) element;
-        return registryInfo.getVariableSupport().getTitle();
-      } catch (Throwable e) {
-        DesignerPlugin.log(e);
-        return "???";
-      }
-    }
-  }
-  private static class KeyLabelProvider extends LabelProvider {
-    @Override
-    public String getText(Object element) {
-      KeyFieldInfo keyFieldInfo = (KeyFieldInfo) element;
-      return keyFieldInfo.keyName;
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Label Provider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static class RegistryLabelProvider extends LabelProvider {
+		@Override
+		public String getText(Object element) {
+			try {
+				FontRegistryInfo registryInfo = (FontRegistryInfo) element;
+				return registryInfo.getVariableSupport().getTitle();
+			} catch (Throwable e) {
+				DesignerPlugin.log(e);
+				return "???";
+			}
+		}
+	}
+	private static class KeyLabelProvider extends LabelProvider {
+		@Override
+		public String getText(Object element) {
+			KeyFieldInfo keyFieldInfo = (KeyFieldInfo) element;
+			return keyFieldInfo.keyName;
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/geometry/PointPropertyEditor.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/geometry/PointPropertyEditor.java
index b23299bdc..f8d0e509a 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/geometry/PointPropertyEditor.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/geometry/PointPropertyEditor.java
@@ -26,84 +26,84 @@
  * @coverage swt.property.editor
  */
 public final class PointPropertyEditor extends TextDialogPropertyEditor {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final PropertyEditor INSTANCE = new PointPropertyEditor();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final PropertyEditor INSTANCE = new PointPropertyEditor();
 
-  private PointPropertyEditor() {
-  }
+	private PointPropertyEditor() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getText(Property property) throws Exception {
-    Object value = property.getValue();
-    if (value == Property.UNKNOWN_VALUE) {
-      // unknown value
-      return null;
-    }
-    //
-    return PointSupport.toString(value);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getText(Property property) throws Exception {
+		Object value = property.getValue();
+		if (value == Property.UNKNOWN_VALUE) {
+			// unknown value
+			return null;
+		}
+		//
+		return PointSupport.toString(value);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void openDialog(Property property) throws Exception {
-    // prepare Point to edit
-    Object point;
-    {
-      Object value = property.getValue();
-      if (value == Property.UNKNOWN_VALUE) {
-        point = PointSupport.newPoint(0, 0);
-      } else {
-        point = PointSupport.getPointCopy(value);
-      }
-    }
-    // prepare dialog
-    PointDialog pointDialog = new PointDialog(property.getTitle(), point);
-    // open dialog
-    int result = pointDialog.open();
-    if (result == IDialogConstants.IGNORE_ID) {
-      property.setValue(Property.UNKNOWN_VALUE);
-    } else if (result == IDialogConstants.OK_ID) {
-      property.setValue(point);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void openDialog(Property property) throws Exception {
+		// prepare Point to edit
+		Object point;
+		{
+			Object value = property.getValue();
+			if (value == Property.UNKNOWN_VALUE) {
+				point = PointSupport.newPoint(0, 0);
+			} else {
+				point = PointSupport.getPointCopy(value);
+			}
+		}
+		// prepare dialog
+		PointDialog pointDialog = new PointDialog(property.getTitle(), point);
+		// open dialog
+		int result = pointDialog.open();
+		if (result == IDialogConstants.IGNORE_ID) {
+			property.setValue(Property.UNKNOWN_VALUE);
+		} else if (result == IDialogConstants.OK_ID) {
+			property.setValue(point);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // PointDialog
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final class PointDialog extends AbstractGeometryDialog {
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public PointDialog(String title, Object point) {
-      super(title, point);
-    }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// PointDialog
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final class PointDialog extends AbstractGeometryDialog {
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public PointDialog(String title, Object point) {
+			super(title, point);
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // GUI
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    protected void createEditors() {
-      createEditor(ModelMessages.PointPropertyEditor_xLabel, "x");
-      createEditor(ModelMessages.PointPropertyEditor_yLabel, "y");
-    }
-  }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// GUI
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		protected void createEditors() {
+			createEditor(ModelMessages.PointPropertyEditor_xLabel, "x");
+			createEditor(ModelMessages.PointPropertyEditor_yLabel, "y");
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/geometry/RectanglePropertyEditor.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/geometry/RectanglePropertyEditor.java
index ffab824f6..d8575e7a7 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/geometry/RectanglePropertyEditor.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/geometry/RectanglePropertyEditor.java
@@ -26,85 +26,85 @@
  * @coverage swing.property.editor
  */
 public final class RectanglePropertyEditor extends TextDialogPropertyEditor {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final PropertyEditor INSTANCE = new RectanglePropertyEditor();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final PropertyEditor INSTANCE = new RectanglePropertyEditor();
 
-  private RectanglePropertyEditor() {
-  }
+	private RectanglePropertyEditor() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getText(Property property) throws Exception {
-    Object value = property.getValue();
-    if (value == Property.UNKNOWN_VALUE) {
-      // unknown value
-      return null;
-    }
-    return RectangleSupport.toString(value);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getText(Property property) throws Exception {
+		Object value = property.getValue();
+		if (value == Property.UNKNOWN_VALUE) {
+			// unknown value
+			return null;
+		}
+		return RectangleSupport.toString(value);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void openDialog(Property property) throws Exception {
-    // prepare Rectangle to edit
-    Object rectangle;
-    {
-      Object value = property.getValue();
-      if (value == Property.UNKNOWN_VALUE) {
-        rectangle = RectangleSupport.newRectangle(0, 0, 0, 0);
-      } else {
-        rectangle = value;
-      }
-    }
-    // prepare dialog
-    RectangleDialog rectangleDialog = new RectangleDialog(property.getTitle(), rectangle);
-    // open dialog
-    int result = rectangleDialog.open();
-    if (result == IDialogConstants.IGNORE_ID) {
-      property.setValue(Property.UNKNOWN_VALUE);
-    } else if (result == IDialogConstants.OK_ID) {
-      property.setValue(rectangle);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void openDialog(Property property) throws Exception {
+		// prepare Rectangle to edit
+		Object rectangle;
+		{
+			Object value = property.getValue();
+			if (value == Property.UNKNOWN_VALUE) {
+				rectangle = RectangleSupport.newRectangle(0, 0, 0, 0);
+			} else {
+				rectangle = value;
+			}
+		}
+		// prepare dialog
+		RectangleDialog rectangleDialog = new RectangleDialog(property.getTitle(), rectangle);
+		// open dialog
+		int result = rectangleDialog.open();
+		if (result == IDialogConstants.IGNORE_ID) {
+			property.setValue(Property.UNKNOWN_VALUE);
+		} else if (result == IDialogConstants.OK_ID) {
+			property.setValue(rectangle);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // RectangleDialog
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final class RectangleDialog extends AbstractGeometryDialog {
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public RectangleDialog(String title, Object rectangle) {
-      super(title, rectangle);
-    }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// RectangleDialog
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final class RectangleDialog extends AbstractGeometryDialog {
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public RectangleDialog(String title, Object rectangle) {
+			super(title, rectangle);
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // GUI
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    protected void createEditors() {
-      createEditor(ModelMessages.RectanglePropertyEditor_xLabel, "x");
-      createEditor(ModelMessages.RectanglePropertyEditor_yLabel, "y");
-      createEditor(ModelMessages.RectanglePropertyEditor_widthLabel, "width");
-      createEditor(ModelMessages.RectanglePropertyEditor_heightLabel, "height");
-    }
-  }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// GUI
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		protected void createEditors() {
+			createEditor(ModelMessages.RectanglePropertyEditor_xLabel, "x");
+			createEditor(ModelMessages.RectanglePropertyEditor_yLabel, "y");
+			createEditor(ModelMessages.RectanglePropertyEditor_widthLabel, "width");
+			createEditor(ModelMessages.RectanglePropertyEditor_heightLabel, "height");
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/image/ImageDescriptorPropertyEditor.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/image/ImageDescriptorPropertyEditor.java
index ea758ef76..b3107e2a8 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/image/ImageDescriptorPropertyEditor.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/image/ImageDescriptorPropertyEditor.java
@@ -50,262 +50,262 @@
  * @coverage swt.property.editor
  */
 public final class ImageDescriptorPropertyEditor extends TextDialogPropertyEditor
-    implements
-      IClipboardSourceProvider {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final PropertyEditor INSTANCE = new ImageDescriptorPropertyEditor();
+implements
+IClipboardSourceProvider {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final PropertyEditor INSTANCE = new ImageDescriptorPropertyEditor();
 
-  private ImageDescriptorPropertyEditor() {
-  }
+	private ImageDescriptorPropertyEditor() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getText(Property property) throws Exception {
-    if (property.getValue() != Property.UNKNOWN_VALUE) {
-      Expression expression = ((GenericProperty) property).getExpression();
-      // check for "null" expression
-      if (expression instanceof NullLiteral) {
-        return "(null)";
-      }
-      // ResourceManager.getImageDescriptor(String path)
-      if (AstNodeUtils.isMethodInvocation(
-          expression,
-          "org.eclipse.jface.resource.ImageDescriptor",
-          "createFromFile(java.lang.Class,java.lang.String)")) {
-        MethodInvocation invocation = (MethodInvocation) expression;
-        Expression locationExpression = DomGenerics.arguments(invocation).get(0);
-        Expression pathExpression = DomGenerics.arguments(invocation).get(1);
-        Object path = JavaInfoEvaluationHelper.getValue(pathExpression);
-        if (locationExpression instanceof NullLiteral) {
-          return "File: " + path;
-        } else {
-          return "Classpath: " + path;
-        }
-      }
-      // ResourceManager.getImageDescriptor(String path)
-      if (AstNodeUtils.isMethodInvocation(
-          expression,
-          "org.eclipse.wb.swt.ResourceManager",
-          "getImageDescriptor(java.lang.String)")) {
-        MethodInvocation invocation = (MethodInvocation) expression;
-        Expression stringExpression = DomGenerics.arguments(invocation).get(0);
-        return "File: " + JavaInfoEvaluationHelper.getValue(stringExpression);
-      }
-      // ResourceManager.getImageDescriptor(Class class, String path)
-      if (AstNodeUtils.isMethodInvocation(
-          expression,
-          "org.eclipse.wb.swt.ResourceManager",
-          "getImageDescriptor(java.lang.Class,java.lang.String)")) {
-        MethodInvocation invocation = (MethodInvocation) expression;
-        Expression stringExpression = DomGenerics.arguments(invocation).get(1);
-        return "Classpath: " + JavaInfoEvaluationHelper.getValue(stringExpression);
-      }
-      // ResourceManager.getPluginImageDescriptorXXX
-      String[] imageValue = ImageEvaluator.getPluginImageValue(property);
-      if (imageValue != null) {
-        return "Plugin: " + imageValue[0] + " " + imageValue[1];
-      }
-    }
-    // unknown value
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getText(Property property) throws Exception {
+		if (property.getValue() != Property.UNKNOWN_VALUE) {
+			Expression expression = ((GenericProperty) property).getExpression();
+			// check for "null" expression
+			if (expression instanceof NullLiteral) {
+				return "(null)";
+			}
+			// ResourceManager.getImageDescriptor(String path)
+			if (AstNodeUtils.isMethodInvocation(
+					expression,
+					"org.eclipse.jface.resource.ImageDescriptor",
+					"createFromFile(java.lang.Class,java.lang.String)")) {
+				MethodInvocation invocation = (MethodInvocation) expression;
+				Expression locationExpression = DomGenerics.arguments(invocation).get(0);
+				Expression pathExpression = DomGenerics.arguments(invocation).get(1);
+				Object path = JavaInfoEvaluationHelper.getValue(pathExpression);
+				if (locationExpression instanceof NullLiteral) {
+					return "File: " + path;
+				} else {
+					return "Classpath: " + path;
+				}
+			}
+			// ResourceManager.getImageDescriptor(String path)
+			if (AstNodeUtils.isMethodInvocation(
+					expression,
+					"org.eclipse.wb.swt.ResourceManager",
+					"getImageDescriptor(java.lang.String)")) {
+				MethodInvocation invocation = (MethodInvocation) expression;
+				Expression stringExpression = DomGenerics.arguments(invocation).get(0);
+				return "File: " + JavaInfoEvaluationHelper.getValue(stringExpression);
+			}
+			// ResourceManager.getImageDescriptor(Class class, String path)
+			if (AstNodeUtils.isMethodInvocation(
+					expression,
+					"org.eclipse.wb.swt.ResourceManager",
+					"getImageDescriptor(java.lang.Class,java.lang.String)")) {
+				MethodInvocation invocation = (MethodInvocation) expression;
+				Expression stringExpression = DomGenerics.arguments(invocation).get(1);
+				return "Classpath: " + JavaInfoEvaluationHelper.getValue(stringExpression);
+			}
+			// ResourceManager.getPluginImageDescriptorXXX
+			String[] imageValue = ImageEvaluator.getPluginImageValue(property);
+			if (imageValue != null) {
+				return "Plugin: " + imageValue[0] + " " + imageValue[1];
+			}
+		}
+		// unknown value
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IClipboardSourceProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getClipboardSource(GenericProperty property) throws Exception {
-    if (property.getValue() != Property.UNKNOWN_VALUE) {
-      Expression expression = property.getExpression();
-      // check for "null" expression
-      if (expression instanceof NullLiteral) {
-        return "null";
-      }
-      // check for new image from file/classpath
-      {
-        JavaInfo javaInfo = property.getJavaInfo();
-        String[] imageValue = ImageEvaluator.getPluginImageValue(property);
-        if (imageValue == null) {
-          IPreferenceStore preferences = javaInfo.getDescription().getToolkit().getPreferences();
-          boolean useResourceManager =
-              preferences.getBoolean(IPreferenceConstants.P_USE_RESOURCE_MANAGER);
-          String text = getText(property);
-          if (text.startsWith("File: ")) {
-            String path = text.substring("File: ".length());
-            String pathSource = StringConverter.INSTANCE.toJavaSource(javaInfo, path);
-            if (useResourceManager) {
-              return "org.eclipse.wb.swt.ResourceManager.getImageDescriptor(" + pathSource + ")";
-            }
-            return "org.eclipse.jface.resource.ImageDescriptor.createFromFile(null, "
-                + pathSource
-                + ")";
-          }
-          if (text.startsWith("Classpath: ")) {
-            String path = text.substring("Classpath: ".length());
-            String pathSource = StringConverter.INSTANCE.toJavaSource(javaInfo, path);
-            if (useResourceManager) {
-              return "org.eclipse.wb.swt.ResourceManager.getImageDescriptor({wbp_classTop}, "
-                  + pathSource
-                  + ")";
-            }
-            return "org.eclipse.jface.resource.ImageDescriptor.createFromFile({wbp_classTop}, "
-                + pathSource
-                + ")";
-          }
-        } else {
-          String symbolicName = StringConverter.INSTANCE.toJavaSource(javaInfo, imageValue[0]);
-          String pathSource = StringConverter.INSTANCE.toJavaSource(javaInfo, imageValue[1]);
-          //
-          return "org.eclipse.wb.swt.ResourceManager.getPluginImageDescriptor("
-              + symbolicName
-              + ", "
-              + pathSource
-              + ")";
-        }
-      }
-    }
-    // unknown image pattern
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IClipboardSourceProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getClipboardSource(GenericProperty property) throws Exception {
+		if (property.getValue() != Property.UNKNOWN_VALUE) {
+			Expression expression = property.getExpression();
+			// check for "null" expression
+			if (expression instanceof NullLiteral) {
+				return "null";
+			}
+			// check for new image from file/classpath
+			{
+				JavaInfo javaInfo = property.getJavaInfo();
+				String[] imageValue = ImageEvaluator.getPluginImageValue(property);
+				if (imageValue == null) {
+					IPreferenceStore preferences = javaInfo.getDescription().getToolkit().getPreferences();
+					boolean useResourceManager =
+							preferences.getBoolean(IPreferenceConstants.P_USE_RESOURCE_MANAGER);
+					String text = getText(property);
+					if (text.startsWith("File: ")) {
+						String path = text.substring("File: ".length());
+						String pathSource = StringConverter.INSTANCE.toJavaSource(javaInfo, path);
+						if (useResourceManager) {
+							return "org.eclipse.wb.swt.ResourceManager.getImageDescriptor(" + pathSource + ")";
+						}
+						return "org.eclipse.jface.resource.ImageDescriptor.createFromFile(null, "
+						+ pathSource
+						+ ")";
+					}
+					if (text.startsWith("Classpath: ")) {
+						String path = text.substring("Classpath: ".length());
+						String pathSource = StringConverter.INSTANCE.toJavaSource(javaInfo, path);
+						if (useResourceManager) {
+							return "org.eclipse.wb.swt.ResourceManager.getImageDescriptor({wbp_classTop}, "
+									+ pathSource
+									+ ")";
+						}
+						return "org.eclipse.jface.resource.ImageDescriptor.createFromFile({wbp_classTop}, "
+						+ pathSource
+						+ ")";
+					}
+				} else {
+					String symbolicName = StringConverter.INSTANCE.toJavaSource(javaInfo, imageValue[0]);
+					String pathSource = StringConverter.INSTANCE.toJavaSource(javaInfo, imageValue[1]);
+					//
+					return "org.eclipse.wb.swt.ResourceManager.getPluginImageDescriptor("
+					+ symbolicName
+					+ ", "
+					+ pathSource
+					+ ")";
+				}
+			}
+		}
+		// unknown image pattern
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void openDialog(Property property) throws Exception {
-    GenericProperty genericProperty = (GenericProperty) property;
-    JavaInfo javaInfo = genericProperty.getJavaInfo();
-    IJavaProject javaProject = javaInfo.getEditor().getJavaProject();
-    // create dialog
-    ImageDialog imageDialog = new ImageDialog(javaProject);
-    // set input for dialog
-    {
-      String[] imageValue = ImageEvaluator.getPluginImageValue(property);
-      if (imageValue == null) {
-        String text = getText(property);
-        if (text == null) {
-          imageDialog.setInput(DefaultImagePage.ID, null);
-        } else if (text.equals("(null)")) {
-          imageDialog.setInput(NullImagePage.ID, null);
-        } else if (text.startsWith("File: ")) {
-          String path = text.substring("File: ".length());
-          imageDialog.setInput(FileImagePage.ID, path);
-        } else if (text.startsWith("Classpath: ")) {
-          String path = text.substring("Classpath: ".length());
-          imageDialog.setInput(ClasspathImagePage.ID, path);
-        }
-      } else {
-        imageDialog.setInput(PluginFileImagePage.ID, imageValue);
-      }
-    }
-    // open dialog
-    if (imageDialog.open() == Window.OK) {
-      ImageInfo imageInfo = imageDialog.getImageInfo();
-      // prepare source
-      String source = null;
-      {
-        String pageId = imageInfo.getPageId();
-        if (pageId == DefaultImagePage.ID) {
-        } else if (pageId == NullImagePage.ID) {
-          source = "null";
-        } else {
-          IPreferenceStore preferences = javaInfo.getDescription().getToolkit().getPreferences();
-          boolean useResourceManager =
-              preferences.getBoolean(IPreferenceConstants.P_USE_RESOURCE_MANAGER);
-          if (useResourceManager) {
-            ManagerUtils.ensure_ResourceManager(javaInfo);
-          }
-          //
-          if (pageId == FileImagePage.ID) {
-            String path = (String) imageInfo.getData();
-            String pathSource = StringConverter.INSTANCE.toJavaSource(javaInfo, path);
-            if (useResourceManager) {
-              source = "org.eclipse.wb.swt.ResourceManager.getImageDescriptor(" + pathSource + ")";
-            } else {
-              source =
-                  "org.eclipse.jface.resource.ImageDescriptor.createFromFile(null, "
-                      + pathSource
-                      + ")";
-            }
-          } else if (pageId == ClasspathImagePage.ID) {
-            String path = "/" + imageInfo.getData();
-            String pathSource = StringConverter.INSTANCE.toJavaSource(javaInfo, path);
-            if (useResourceManager) {
-              source =
-                  "org.eclipse.wb.swt.ResourceManager.getImageDescriptor({wbp_classTop}, "
-                      + pathSource
-                      + ")";
-            } else {
-              source =
-                  "org.eclipse.jface.resource.ImageDescriptor.createFromFile(null, "
-                      + pathSource
-                      + ")";
-            }
-          } else if (pageId == PluginFileImagePage.ID) {
-            ManagerUtils.ensure_ResourceManager(javaInfo);
-            //
-            String[] data = (String[]) imageInfo.getData();
-            String symbolicName = StringConverter.INSTANCE.toJavaSource(javaInfo, data[0]);
-            String pathSource = StringConverter.INSTANCE.toJavaSource(javaInfo, data[1]);
-            //
-            source =
-                "org.eclipse.wb.swt.ResourceManager.getPluginImageDescriptor("
-                    + symbolicName
-                    + ", "
-                    + pathSource
-                    + ")";
-          }
-        }
-      }
-      // set expression
-      genericProperty.setExpression(source, Property.UNKNOWN_VALUE);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void openDialog(Property property) throws Exception {
+		GenericProperty genericProperty = (GenericProperty) property;
+		JavaInfo javaInfo = genericProperty.getJavaInfo();
+		IJavaProject javaProject = javaInfo.getEditor().getJavaProject();
+		// create dialog
+		ImageDialog imageDialog = new ImageDialog(javaProject);
+		// set input for dialog
+		{
+			String[] imageValue = ImageEvaluator.getPluginImageValue(property);
+			if (imageValue == null) {
+				String text = getText(property);
+				if (text == null) {
+					imageDialog.setInput(DefaultImagePage.ID, null);
+				} else if (text.equals("(null)")) {
+					imageDialog.setInput(NullImagePage.ID, null);
+				} else if (text.startsWith("File: ")) {
+					String path = text.substring("File: ".length());
+					imageDialog.setInput(FileImagePage.ID, path);
+				} else if (text.startsWith("Classpath: ")) {
+					String path = text.substring("Classpath: ".length());
+					imageDialog.setInput(ClasspathImagePage.ID, path);
+				}
+			} else {
+				imageDialog.setInput(PluginFileImagePage.ID, imageValue);
+			}
+		}
+		// open dialog
+		if (imageDialog.open() == Window.OK) {
+			ImageInfo imageInfo = imageDialog.getImageInfo();
+			// prepare source
+			String source = null;
+			{
+				String pageId = imageInfo.getPageId();
+				if (pageId == DefaultImagePage.ID) {
+				} else if (pageId == NullImagePage.ID) {
+					source = "null";
+				} else {
+					IPreferenceStore preferences = javaInfo.getDescription().getToolkit().getPreferences();
+					boolean useResourceManager =
+							preferences.getBoolean(IPreferenceConstants.P_USE_RESOURCE_MANAGER);
+					if (useResourceManager) {
+						ManagerUtils.ensure_ResourceManager(javaInfo);
+					}
+					//
+					if (pageId == FileImagePage.ID) {
+						String path = (String) imageInfo.getData();
+						String pathSource = StringConverter.INSTANCE.toJavaSource(javaInfo, path);
+						if (useResourceManager) {
+							source = "org.eclipse.wb.swt.ResourceManager.getImageDescriptor(" + pathSource + ")";
+						} else {
+							source =
+									"org.eclipse.jface.resource.ImageDescriptor.createFromFile(null, "
+											+ pathSource
+											+ ")";
+						}
+					} else if (pageId == ClasspathImagePage.ID) {
+						String path = "/" + imageInfo.getData();
+						String pathSource = StringConverter.INSTANCE.toJavaSource(javaInfo, path);
+						if (useResourceManager) {
+							source =
+									"org.eclipse.wb.swt.ResourceManager.getImageDescriptor({wbp_classTop}, "
+											+ pathSource
+											+ ")";
+						} else {
+							source =
+									"org.eclipse.jface.resource.ImageDescriptor.createFromFile(null, "
+											+ pathSource
+											+ ")";
+						}
+					} else if (pageId == PluginFileImagePage.ID) {
+						ManagerUtils.ensure_ResourceManager(javaInfo);
+						//
+						String[] data = (String[]) imageInfo.getData();
+						String symbolicName = StringConverter.INSTANCE.toJavaSource(javaInfo, data[0]);
+						String pathSource = StringConverter.INSTANCE.toJavaSource(javaInfo, data[1]);
+						//
+						source =
+								"org.eclipse.wb.swt.ResourceManager.getPluginImageDescriptor("
+										+ symbolicName
+										+ ", "
+										+ pathSource
+										+ ")";
+					}
+				}
+			}
+			// set expression
+			genericProperty.setExpression(source, Property.UNKNOWN_VALUE);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ImageDialog
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final class ImageDialog extends AbstractImageDialog {
-    private final IJavaProject m_javaProject;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ImageDialog
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final class ImageDialog extends AbstractImageDialog {
+		private final IJavaProject m_javaProject;
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    protected ImageDialog(IJavaProject javaProject) {
-      super(DesignerPlugin.getShell(), Activator.getDefault());
-      m_javaProject = javaProject;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		protected ImageDialog(IJavaProject javaProject) {
+			super(DesignerPlugin.getShell(), Activator.getDefault());
+			m_javaProject = javaProject;
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Pages
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    protected void addPages(Composite parent) {
-      addPage(new ClasspathImagePage(parent, SWT.NONE, this, m_javaProject));
-      addPage(new FileImagePage(parent, SWT.NONE, this));
-      addPage(new NullImagePage(parent, SWT.NONE, this));
-      addPage(new DefaultImagePage(parent, SWT.NONE, this));
-      if (PluginImagesRoot.testPluginProject(m_javaProject.getProject())) {
-        addPage(PluginFileImagePage.createPage(parent, SWT.NONE, this, m_javaProject.getProject()));
-      }
-    }
-  }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Pages
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		protected void addPages(Composite parent) {
+			addPage(new ClasspathImagePage(parent, SWT.NONE, this, m_javaProject));
+			addPage(new FileImagePage(parent, SWT.NONE, this));
+			addPage(new NullImagePage(parent, SWT.NONE, this));
+			addPage(new DefaultImagePage(parent, SWT.NONE, this));
+			if (PluginImagesRoot.testPluginProject(m_javaProject.getProject())) {
+				addPage(PluginFileImagePage.createPage(parent, SWT.NONE, this, m_javaProject.getProject()));
+			}
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/image/ImageEvaluator.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/image/ImageEvaluator.java
index aba87ed6a..20fe262b9 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/image/ImageEvaluator.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/image/ImageEvaluator.java
@@ -40,155 +40,155 @@
  * @coverage swt.property.editor
  */
 public class ImageEvaluator implements IExpressionEvaluator {
-  private static final String[] IMAGE_SIGNATURES_OLD = {
-      "getPluginImage(java.lang.Object,java.lang.String)",
-      "getPluginImageDescriptor(java.lang.Object,java.lang.String)"};
-  private static final String[] IMAGE_SIGNATURES_NEW = {
-      "getPluginImage(java.lang.String,java.lang.String)",
-      "getPluginImageDescriptor(java.lang.String,java.lang.String)"};
+	private static final String[] IMAGE_SIGNATURES_OLD = {
+			"getPluginImage(java.lang.Object,java.lang.String)",
+	"getPluginImageDescriptor(java.lang.Object,java.lang.String)"};
+	private static final String[] IMAGE_SIGNATURES_NEW = {
+			"getPluginImage(java.lang.String,java.lang.String)",
+	"getPluginImageDescriptor(java.lang.String,java.lang.String)"};
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IExpressionEvaluator
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Object evaluate(EvaluationContext context,
-      Expression expression,
-      ITypeBinding typeBinding,
-      String typeQualifiedName) throws Exception {
-    // check for old version ResourceManager
-    if (AstNodeUtils.isMethodInvocation(
-        expression,
-        "org.eclipse.wb.swt.ResourceManager",
-        IMAGE_SIGNATURES_OLD)) {
-      MethodInvocation invocation = (MethodInvocation) expression;
-      List<Expression> arguments = DomGenerics.arguments(invocation);
-      IProject project = getProjectOverActivator(arguments.get(0));
-      return getPluginImage(invocation, arguments, context, project);
-    }
-    // we don't understand given expression
-    return AstEvaluationEngine.UNKNOWN;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IExpressionEvaluator
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Object evaluate(EvaluationContext context,
+			Expression expression,
+			ITypeBinding typeBinding,
+			String typeQualifiedName) throws Exception {
+		// check for old version ResourceManager
+		if (AstNodeUtils.isMethodInvocation(
+				expression,
+				"org.eclipse.wb.swt.ResourceManager",
+				IMAGE_SIGNATURES_OLD)) {
+			MethodInvocation invocation = (MethodInvocation) expression;
+			List<Expression> arguments = DomGenerics.arguments(invocation);
+			IProject project = getProjectOverActivator(arguments.get(0));
+			return getPluginImage(invocation, arguments, context, project);
+		}
+		// we don't understand given expression
+		return AstEvaluationEngine.UNKNOWN;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Image utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static Object getPluginImage(MethodInvocation invocation,
-      List<Expression> arguments,
-      EvaluationContext context,
-      final IProject project) throws Exception {
-    if (project != null) {
-      return getPluginImage(invocation, arguments, context, new InputStreamProvider() {
-        @Override
-        public InputStream getInputStream(String imagePath) throws Exception {
-          IFile file = project.getFile(imagePath);
-          return file.exists() ? file.getContents(true) : null;
-        }
-      });
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Image utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static Object getPluginImage(MethodInvocation invocation,
+			List<Expression> arguments,
+			EvaluationContext context,
+			final IProject project) throws Exception {
+		if (project != null) {
+			return getPluginImage(invocation, arguments, context, new InputStreamProvider() {
+				@Override
+				public InputStream getInputStream(String imagePath) throws Exception {
+					IFile file = project.getFile(imagePath);
+					return file.exists() ? file.getContents(true) : null;
+				}
+			});
+		}
+		return null;
+	}
 
-  private static Object getPluginImage(MethodInvocation invocation,
-      List<Expression> arguments,
-      EvaluationContext context,
-      InputStreamProvider provider) throws Exception {
-    // prepare image path
-    String imagePath = (String) AstEvaluationEngine.evaluate(context, arguments.get(1));
-    // load image
-    Object image;
-    try {
-      InputStream stream = provider.getInputStream(imagePath);
-      if (stream == null) {
-        return null;
-      }
-      try {
-        image = ImageSupport.createImage(stream);
-      } finally {
-        stream.close();
-      }
-    } catch (Throwable e) {
-      return null;
-    }
-    // handle for ResourceManager.getPluginImage()
-    if ("getPluginImage".equals(invocation.getName().getIdentifier())) {
-      return image;
-    }
-    // handle for ResourceManager.getPluginImageDescriptor()
-    Class<?> imageDescriptorClass =
-        context.getClassLoader().loadClass("org.eclipse.jface.resource.ImageDescriptor");
-    return ReflectionUtils.invokeMethod(
-        imageDescriptorClass,
-        "createFromImage(org.eclipse.swt.graphics.Image)",
-        image);
-  }
+	private static Object getPluginImage(MethodInvocation invocation,
+			List<Expression> arguments,
+			EvaluationContext context,
+			InputStreamProvider provider) throws Exception {
+		// prepare image path
+		String imagePath = (String) AstEvaluationEngine.evaluate(context, arguments.get(1));
+		// load image
+		Object image;
+		try {
+			InputStream stream = provider.getInputStream(imagePath);
+			if (stream == null) {
+				return null;
+			}
+			try {
+				image = ImageSupport.createImage(stream);
+			} finally {
+				stream.close();
+			}
+		} catch (Throwable e) {
+			return null;
+		}
+		// handle for ResourceManager.getPluginImage()
+		if ("getPluginImage".equals(invocation.getName().getIdentifier())) {
+			return image;
+		}
+		// handle for ResourceManager.getPluginImageDescriptor()
+		Class<?> imageDescriptorClass =
+				context.getClassLoader().loadClass("org.eclipse.jface.resource.ImageDescriptor");
+		return ReflectionUtils.invokeMethod(
+				imageDescriptorClass,
+				"createFromImage(org.eclipse.swt.graphics.Image)",
+				image);
+	}
 
-  private static interface InputStreamProvider {
-    InputStream getInputStream(String imagePath) throws Exception;
-  }
+	private static interface InputStreamProvider {
+		InputStream getInputStream(String imagePath) throws Exception;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>[symbolic name, image path]</code> for image property if is't set as
-   *         <code>ResourceManager.getPluginImageXXX()</code> or <code>null</code> otherwise.
-   */
-  public static String[] getPluginImageValue(Property property) throws Exception {
-    Expression expression = ((GenericProperty) property).getExpression();
-    // check for new version ResourceManager
-    if (AstNodeUtils.isMethodInvocation(
-        expression,
-        "org.eclipse.wb.swt.ResourceManager",
-        IMAGE_SIGNATURES_NEW)) {
-      MethodInvocation invocation = (MethodInvocation) expression;
-      List<Expression> arguments = DomGenerics.arguments(invocation);
-      String symbolicName = (String) JavaInfoEvaluationHelper.getValue(arguments.get(0));
-      String imagePath = (String) JavaInfoEvaluationHelper.getValue(arguments.get(1));
-      return new String[]{symbolicName, imagePath};
-    }
-    // check for old version ResourceManager
-    if (AstNodeUtils.isMethodInvocation(
-        expression,
-        "org.eclipse.wb.swt.ResourceManager",
-        IMAGE_SIGNATURES_OLD)) {
-      MethodInvocation invocation = (MethodInvocation) expression;
-      List<Expression> arguments = DomGenerics.arguments(invocation);
-      IProject project = getProjectOverActivator(arguments.get(0));
-      // handle only workspace resources
-      if (project != null) {
-        String symbolicName = WorkspacePluginInfo.getBundleSymbolicName(project);
-        if (symbolicName != null) {
-          String imagePath = (String) JavaInfoEvaluationHelper.getValue(arguments.get(1));
-          return new String[]{symbolicName, imagePath};
-        }
-      }
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>[symbolic name, image path]</code> for image property if is't set as
+	 *         <code>ResourceManager.getPluginImageXXX()</code> or <code>null</code> otherwise.
+	 */
+	public static String[] getPluginImageValue(Property property) throws Exception {
+		Expression expression = ((GenericProperty) property).getExpression();
+		// check for new version ResourceManager
+		if (AstNodeUtils.isMethodInvocation(
+				expression,
+				"org.eclipse.wb.swt.ResourceManager",
+				IMAGE_SIGNATURES_NEW)) {
+			MethodInvocation invocation = (MethodInvocation) expression;
+			List<Expression> arguments = DomGenerics.arguments(invocation);
+			String symbolicName = (String) JavaInfoEvaluationHelper.getValue(arguments.get(0));
+			String imagePath = (String) JavaInfoEvaluationHelper.getValue(arguments.get(1));
+			return new String[]{symbolicName, imagePath};
+		}
+		// check for old version ResourceManager
+		if (AstNodeUtils.isMethodInvocation(
+				expression,
+				"org.eclipse.wb.swt.ResourceManager",
+				IMAGE_SIGNATURES_OLD)) {
+			MethodInvocation invocation = (MethodInvocation) expression;
+			List<Expression> arguments = DomGenerics.arguments(invocation);
+			IProject project = getProjectOverActivator(arguments.get(0));
+			// handle only workspace resources
+			if (project != null) {
+				String symbolicName = WorkspacePluginInfo.getBundleSymbolicName(project);
+				if (symbolicName != null) {
+					String imagePath = (String) JavaInfoEvaluationHelper.getValue(arguments.get(1));
+					return new String[]{symbolicName, imagePath};
+				}
+			}
+		}
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Workspace utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static IProject getProjectOverActivator(Expression activatorAccessNode) throws Exception {
-    if (activatorAccessNode instanceof MethodInvocation) {
-      MethodInvocation pluginAccessInvocation = (MethodInvocation) activatorAccessNode;
-      String activatorClass =
-          AstNodeUtils.getFullyQualifiedName(pluginAccessInvocation.getExpression(), false);
-      IProject[] projects = ResourcesPlugin.getWorkspace().getRoot().getProjects();
-      for (IProject project : projects) {
-        if (activatorClass.equals(WorkspacePluginInfo.getBundleActivator(project))) {
-          return project;
-        }
-      }
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Workspace utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static IProject getProjectOverActivator(Expression activatorAccessNode) throws Exception {
+		if (activatorAccessNode instanceof MethodInvocation) {
+			MethodInvocation pluginAccessInvocation = (MethodInvocation) activatorAccessNode;
+			String activatorClass =
+					AstNodeUtils.getFullyQualifiedName(pluginAccessInvocation.getExpression(), false);
+			IProject[] projects = ResourcesPlugin.getWorkspace().getRoot().getProjects();
+			for (IProject project : projects) {
+				if (activatorClass.equals(WorkspacePluginInfo.getBundleActivator(project))) {
+					return project;
+				}
+			}
+		}
+		return null;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/image/ImagePropertyEditor.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/image/ImagePropertyEditor.java
index 6aab3dfdf..037ea4841 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/image/ImagePropertyEditor.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/image/ImagePropertyEditor.java
@@ -51,268 +51,268 @@
  * @coverage swt.property.editor
  */
 public final class ImagePropertyEditor extends TextDialogPropertyEditor
-    implements
-      IClipboardSourceProvider {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final PropertyEditor INSTANCE = new ImagePropertyEditor();
+implements
+IClipboardSourceProvider {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final PropertyEditor INSTANCE = new ImagePropertyEditor();
 
-  private ImagePropertyEditor() {
-  }
+	private ImagePropertyEditor() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getText(Property property) throws Exception {
-    if (property.getValue() != Property.UNKNOWN_VALUE) {
-      Expression expression = ((GenericProperty) property).getExpression();
-      // check for "null" expression
-      if (expression instanceof NullLiteral) {
-        return "(null)";
-      }
-      // new Image(...)
-      if (expression instanceof ClassInstanceCreation) {
-        ClassInstanceCreation creation = (ClassInstanceCreation) expression;
-        ITypeBinding creationBinding = AstNodeUtils.getTypeBinding(creation);
-        if (AstNodeUtils.getFullyQualifiedName(creationBinding, false).equals(
-            "org.eclipse.swt.graphics.Image")) {
-          String constructorSignature = AstNodeUtils.getCreationSignature(creation);
-          // absolute path
-          if ("<init>(org.eclipse.swt.graphics.Device,java.lang.String)".equals(constructorSignature)) {
-            Expression stringExpression = DomGenerics.arguments(creation).get(1);
-            return "File: " + JavaInfoEvaluationHelper.getValue(stringExpression);
-          }
-          // input stream
-          if ("<init>(org.eclipse.swt.graphics.Device,java.io.InputStream)".equals(constructorSignature)) {
-            Expression streamExpression = DomGenerics.arguments(creation).get(1);
-            if (AstNodeUtils.isMethodInvocation(
-                streamExpression,
-                "java.lang.Class",
-                "getResourceAsStream(java.lang.String)")) {
-              MethodInvocation streamCreateInvocation = (MethodInvocation) streamExpression;
-              Expression stringExpression = DomGenerics.arguments(streamCreateInvocation).get(0);
-              return "Classpath: " + JavaInfoEvaluationHelper.getValue(stringExpression);
-            }
-          }
-        }
-      }
-      // SWTResourceManager.getImage(String path)
-      if (AstNodeUtils.isMethodInvocation(
-          expression,
-          "org.eclipse.wb.swt.SWTResourceManager",
-          "getImage(java.lang.String)")) {
-        MethodInvocation invocation = (MethodInvocation) expression;
-        Expression stringExpression = DomGenerics.arguments(invocation).get(0);
-        return "File: " + JavaInfoEvaluationHelper.getValue(stringExpression);
-      }
-      // SWTResourceManager.getImage(Class class, String path)
-      if (AstNodeUtils.isMethodInvocation(
-          expression,
-          "org.eclipse.wb.swt.SWTResourceManager",
-          "getImage(java.lang.Class,java.lang.String)")) {
-        MethodInvocation invocation = (MethodInvocation) expression;
-        Expression stringExpression = DomGenerics.arguments(invocation).get(1);
-        return "Classpath: " + JavaInfoEvaluationHelper.getValue(stringExpression);
-      }
-      // ResourceManager.getPluginImageXXX
-      String[] imageValue = ImageEvaluator.getPluginImageValue(property);
-      if (imageValue != null) {
-        return "Plugin: " + imageValue[0] + " " + imageValue[1];
-      }
-    }
-    // unknown value
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getText(Property property) throws Exception {
+		if (property.getValue() != Property.UNKNOWN_VALUE) {
+			Expression expression = ((GenericProperty) property).getExpression();
+			// check for "null" expression
+			if (expression instanceof NullLiteral) {
+				return "(null)";
+			}
+			// new Image(...)
+			if (expression instanceof ClassInstanceCreation) {
+				ClassInstanceCreation creation = (ClassInstanceCreation) expression;
+				ITypeBinding creationBinding = AstNodeUtils.getTypeBinding(creation);
+				if (AstNodeUtils.getFullyQualifiedName(creationBinding, false).equals(
+						"org.eclipse.swt.graphics.Image")) {
+					String constructorSignature = AstNodeUtils.getCreationSignature(creation);
+					// absolute path
+					if ("<init>(org.eclipse.swt.graphics.Device,java.lang.String)".equals(constructorSignature)) {
+						Expression stringExpression = DomGenerics.arguments(creation).get(1);
+						return "File: " + JavaInfoEvaluationHelper.getValue(stringExpression);
+					}
+					// input stream
+					if ("<init>(org.eclipse.swt.graphics.Device,java.io.InputStream)".equals(constructorSignature)) {
+						Expression streamExpression = DomGenerics.arguments(creation).get(1);
+						if (AstNodeUtils.isMethodInvocation(
+								streamExpression,
+								"java.lang.Class",
+								"getResourceAsStream(java.lang.String)")) {
+							MethodInvocation streamCreateInvocation = (MethodInvocation) streamExpression;
+							Expression stringExpression = DomGenerics.arguments(streamCreateInvocation).get(0);
+							return "Classpath: " + JavaInfoEvaluationHelper.getValue(stringExpression);
+						}
+					}
+				}
+			}
+			// SWTResourceManager.getImage(String path)
+			if (AstNodeUtils.isMethodInvocation(
+					expression,
+					"org.eclipse.wb.swt.SWTResourceManager",
+					"getImage(java.lang.String)")) {
+				MethodInvocation invocation = (MethodInvocation) expression;
+				Expression stringExpression = DomGenerics.arguments(invocation).get(0);
+				return "File: " + JavaInfoEvaluationHelper.getValue(stringExpression);
+			}
+			// SWTResourceManager.getImage(Class class, String path)
+			if (AstNodeUtils.isMethodInvocation(
+					expression,
+					"org.eclipse.wb.swt.SWTResourceManager",
+					"getImage(java.lang.Class,java.lang.String)")) {
+				MethodInvocation invocation = (MethodInvocation) expression;
+				Expression stringExpression = DomGenerics.arguments(invocation).get(1);
+				return "Classpath: " + JavaInfoEvaluationHelper.getValue(stringExpression);
+			}
+			// ResourceManager.getPluginImageXXX
+			String[] imageValue = ImageEvaluator.getPluginImageValue(property);
+			if (imageValue != null) {
+				return "Plugin: " + imageValue[0] + " " + imageValue[1];
+			}
+		}
+		// unknown value
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IClipboardSourceProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getClipboardSource(GenericProperty property) throws Exception {
-    if (property.getValue() != Property.UNKNOWN_VALUE) {
-      Expression expression = property.getExpression();
-      // check for "null" expression
-      if (expression instanceof NullLiteral) {
-        return "null";
-      }
-      // check for new image from file/classpath
-      {
-        JavaInfo javaInfo = property.getJavaInfo();
-        String[] imageValue = ImageEvaluator.getPluginImageValue(property);
-        if (imageValue == null) {
-          IPreferenceStore preferences = javaInfo.getDescription().getToolkit().getPreferences();
-          boolean useResourceManager =
-              preferences.getBoolean(IPreferenceConstants.P_USE_RESOURCE_MANAGER);
-          String text = getText(property);
-          if (text.startsWith("File: ")) {
-            String path = text.substring("File: ".length());
-            String pathSource = StringConverter.INSTANCE.toJavaSource(javaInfo, path);
-            if (useResourceManager) {
-              return "org.eclipse.wb.swt.SWTResourceManager.getImage(" + pathSource + ")";
-            }
-            return "new org.eclipse.swt.graphics.Image(null, " + pathSource + ")";
-          }
-          if (text.startsWith("Classpath: ")) {
-            String path = text.substring("Classpath: ".length());
-            String pathSource = StringConverter.INSTANCE.toJavaSource(javaInfo, path);
-            if (useResourceManager) {
-              return "org.eclipse.wb.swt.SWTResourceManager.getImage({wbp_classTop}, "
-                  + pathSource
-                  + ")";
-            }
-            return "new org.eclipse.swt.graphics.Image(null, {wbp_classTop}.getResourceAsStream("
-                + pathSource
-                + "))";
-          }
-        } else {
-          String symbolicName = StringConverter.INSTANCE.toJavaSource(javaInfo, imageValue[0]);
-          String pathSource = StringConverter.INSTANCE.toJavaSource(javaInfo, imageValue[1]);
-          //
-          return "org.eclipse.wb.swt.ResourceManager.getPluginImage("
-              + symbolicName
-              + ", "
-              + pathSource
-              + ")";
-        }
-      }
-    }
-    // unknown image pattern
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IClipboardSourceProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getClipboardSource(GenericProperty property) throws Exception {
+		if (property.getValue() != Property.UNKNOWN_VALUE) {
+			Expression expression = property.getExpression();
+			// check for "null" expression
+			if (expression instanceof NullLiteral) {
+				return "null";
+			}
+			// check for new image from file/classpath
+			{
+				JavaInfo javaInfo = property.getJavaInfo();
+				String[] imageValue = ImageEvaluator.getPluginImageValue(property);
+				if (imageValue == null) {
+					IPreferenceStore preferences = javaInfo.getDescription().getToolkit().getPreferences();
+					boolean useResourceManager =
+							preferences.getBoolean(IPreferenceConstants.P_USE_RESOURCE_MANAGER);
+					String text = getText(property);
+					if (text.startsWith("File: ")) {
+						String path = text.substring("File: ".length());
+						String pathSource = StringConverter.INSTANCE.toJavaSource(javaInfo, path);
+						if (useResourceManager) {
+							return "org.eclipse.wb.swt.SWTResourceManager.getImage(" + pathSource + ")";
+						}
+						return "new org.eclipse.swt.graphics.Image(null, " + pathSource + ")";
+					}
+					if (text.startsWith("Classpath: ")) {
+						String path = text.substring("Classpath: ".length());
+						String pathSource = StringConverter.INSTANCE.toJavaSource(javaInfo, path);
+						if (useResourceManager) {
+							return "org.eclipse.wb.swt.SWTResourceManager.getImage({wbp_classTop}, "
+									+ pathSource
+									+ ")";
+						}
+						return "new org.eclipse.swt.graphics.Image(null, {wbp_classTop}.getResourceAsStream("
+						+ pathSource
+						+ "))";
+					}
+				} else {
+					String symbolicName = StringConverter.INSTANCE.toJavaSource(javaInfo, imageValue[0]);
+					String pathSource = StringConverter.INSTANCE.toJavaSource(javaInfo, imageValue[1]);
+					//
+					return "org.eclipse.wb.swt.ResourceManager.getPluginImage("
+					+ symbolicName
+					+ ", "
+					+ pathSource
+					+ ")";
+				}
+			}
+		}
+		// unknown image pattern
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void openDialog(Property property) throws Exception {
-    GenericProperty genericProperty = (GenericProperty) property;
-    JavaInfo javaInfo = genericProperty.getJavaInfo();
-    IJavaProject javaProject = javaInfo.getEditor().getJavaProject();
-    // create dialog
-    ImageDialog imageDialog = new ImageDialog(javaProject);
-    // set input for dialog
-    {
-      String[] imageValue = ImageEvaluator.getPluginImageValue(property);
-      if (imageValue == null) {
-        String text = getText(property);
-        if (text == null) {
-          imageDialog.setInput(DefaultImagePage.ID, null);
-        } else if (text.equals("(null)")) {
-          imageDialog.setInput(NullImagePage.ID, null);
-        } else if (text.startsWith("File: ")) {
-          String path = text.substring("File: ".length());
-          imageDialog.setInput(FileImagePage.ID, path);
-        } else if (text.startsWith("Classpath: ")) {
-          String path = text.substring("Classpath: ".length());
-          imageDialog.setInput(ClasspathImagePage.ID, path);
-        }
-      } else {
-        imageDialog.setInput(PluginFileImagePage.ID, imageValue);
-      }
-    }
-    // open dialog
-    if (imageDialog.open() == Window.OK) {
-      ImageInfo imageInfo = imageDialog.getImageInfo();
-      // prepare source
-      String source = null;
-      {
-        String pageId = imageInfo.getPageId();
-        if (pageId == DefaultImagePage.ID) {
-        } else if (pageId == NullImagePage.ID) {
-          source = "null";
-        } else {
-          IPreferenceStore preferences = javaInfo.getDescription().getToolkit().getPreferences();
-          boolean useResourceManager =
-              preferences.getBoolean(IPreferenceConstants.P_USE_RESOURCE_MANAGER);
-          if (useResourceManager) {
-            ManagerUtils.ensure_SWTResourceManager(javaInfo);
-          }
-          //
-          if (pageId == FileImagePage.ID) {
-            String path = (String) imageInfo.getData();
-            String pathSource = StringConverter.INSTANCE.toJavaSource(javaInfo, path);
-            if (useResourceManager) {
-              source = "org.eclipse.wb.swt.SWTResourceManager.getImage(" + pathSource + ")";
-            } else {
-              source = "new org.eclipse.swt.graphics.Image(null, " + pathSource + ")";
-            }
-          } else if (pageId == ClasspathImagePage.ID) {
-            String path = "/" + imageInfo.getData();
-            String pathSource = StringConverter.INSTANCE.toJavaSource(javaInfo, path);
-            if (useResourceManager) {
-              source =
-                  "org.eclipse.wb.swt.SWTResourceManager.getImage({wbp_classTop}, "
-                      + pathSource
-                      + ")";
-            } else {
-              source =
-                  "new org.eclipse.swt.graphics.Image(null, {wbp_classTop}.getResourceAsStream("
-                      + pathSource
-                      + "))";
-            }
-          } else if (pageId == PluginFileImagePage.ID) {
-            ManagerUtils.ensure_ResourceManager(javaInfo);
-            //
-            String[] data = (String[]) imageInfo.getData();
-            String symbolicName = StringConverter.INSTANCE.toJavaSource(javaInfo, data[0]);
-            String pathSource = StringConverter.INSTANCE.toJavaSource(javaInfo, data[1]);
-            //
-            source =
-                "org.eclipse.wb.swt.ResourceManager.getPluginImage("
-                    + symbolicName
-                    + ", "
-                    + pathSource
-                    + ")";
-          }
-        }
-      }
-      // set expression
-      genericProperty.setExpression(source, Property.UNKNOWN_VALUE);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void openDialog(Property property) throws Exception {
+		GenericProperty genericProperty = (GenericProperty) property;
+		JavaInfo javaInfo = genericProperty.getJavaInfo();
+		IJavaProject javaProject = javaInfo.getEditor().getJavaProject();
+		// create dialog
+		ImageDialog imageDialog = new ImageDialog(javaProject);
+		// set input for dialog
+		{
+			String[] imageValue = ImageEvaluator.getPluginImageValue(property);
+			if (imageValue == null) {
+				String text = getText(property);
+				if (text == null) {
+					imageDialog.setInput(DefaultImagePage.ID, null);
+				} else if (text.equals("(null)")) {
+					imageDialog.setInput(NullImagePage.ID, null);
+				} else if (text.startsWith("File: ")) {
+					String path = text.substring("File: ".length());
+					imageDialog.setInput(FileImagePage.ID, path);
+				} else if (text.startsWith("Classpath: ")) {
+					String path = text.substring("Classpath: ".length());
+					imageDialog.setInput(ClasspathImagePage.ID, path);
+				}
+			} else {
+				imageDialog.setInput(PluginFileImagePage.ID, imageValue);
+			}
+		}
+		// open dialog
+		if (imageDialog.open() == Window.OK) {
+			ImageInfo imageInfo = imageDialog.getImageInfo();
+			// prepare source
+			String source = null;
+			{
+				String pageId = imageInfo.getPageId();
+				if (pageId == DefaultImagePage.ID) {
+				} else if (pageId == NullImagePage.ID) {
+					source = "null";
+				} else {
+					IPreferenceStore preferences = javaInfo.getDescription().getToolkit().getPreferences();
+					boolean useResourceManager =
+							preferences.getBoolean(IPreferenceConstants.P_USE_RESOURCE_MANAGER);
+					if (useResourceManager) {
+						ManagerUtils.ensure_SWTResourceManager(javaInfo);
+					}
+					//
+					if (pageId == FileImagePage.ID) {
+						String path = (String) imageInfo.getData();
+						String pathSource = StringConverter.INSTANCE.toJavaSource(javaInfo, path);
+						if (useResourceManager) {
+							source = "org.eclipse.wb.swt.SWTResourceManager.getImage(" + pathSource + ")";
+						} else {
+							source = "new org.eclipse.swt.graphics.Image(null, " + pathSource + ")";
+						}
+					} else if (pageId == ClasspathImagePage.ID) {
+						String path = "/" + imageInfo.getData();
+						String pathSource = StringConverter.INSTANCE.toJavaSource(javaInfo, path);
+						if (useResourceManager) {
+							source =
+									"org.eclipse.wb.swt.SWTResourceManager.getImage({wbp_classTop}, "
+											+ pathSource
+											+ ")";
+						} else {
+							source =
+									"new org.eclipse.swt.graphics.Image(null, {wbp_classTop}.getResourceAsStream("
+											+ pathSource
+											+ "))";
+						}
+					} else if (pageId == PluginFileImagePage.ID) {
+						ManagerUtils.ensure_ResourceManager(javaInfo);
+						//
+						String[] data = (String[]) imageInfo.getData();
+						String symbolicName = StringConverter.INSTANCE.toJavaSource(javaInfo, data[0]);
+						String pathSource = StringConverter.INSTANCE.toJavaSource(javaInfo, data[1]);
+						//
+						source =
+								"org.eclipse.wb.swt.ResourceManager.getPluginImage("
+										+ symbolicName
+										+ ", "
+										+ pathSource
+										+ ")";
+					}
+				}
+			}
+			// set expression
+			genericProperty.setExpression(source, Property.UNKNOWN_VALUE);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ImageDialog
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final class ImageDialog extends AbstractImageDialog {
-    private final IJavaProject m_javaProject;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ImageDialog
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final class ImageDialog extends AbstractImageDialog {
+		private final IJavaProject m_javaProject;
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    protected ImageDialog(IJavaProject javaProject) {
-      super(DesignerPlugin.getShell(), Activator.getDefault());
-      m_javaProject = javaProject;
-    }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		protected ImageDialog(IJavaProject javaProject) {
+			super(DesignerPlugin.getShell(), Activator.getDefault());
+			m_javaProject = javaProject;
+		}
 
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Pages
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    protected void addPages(Composite parent) {
-      addPage(new ClasspathImagePage(parent, SWT.NONE, this, m_javaProject));
-      addPage(new FileImagePage(parent, SWT.NONE, this));
-      addPage(new NullImagePage(parent, SWT.NONE, this));
-      addPage(new DefaultImagePage(parent, SWT.NONE, this));
-      if (PluginImagesRoot.testPluginProject(m_javaProject.getProject())) {
-        addPage(PluginFileImagePage.createPage(parent, SWT.NONE, this, m_javaProject.getProject()));
-      }
-    }
-  }
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Pages
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		protected void addPages(Composite parent) {
+			addPage(new ClasspathImagePage(parent, SWT.NONE, this, m_javaProject));
+			addPage(new FileImagePage(parent, SWT.NONE, this));
+			addPage(new NullImagePage(parent, SWT.NONE, this));
+			addPage(new DefaultImagePage(parent, SWT.NONE, this));
+			if (PluginImagesRoot.testPluginProject(m_javaProject.getProject())) {
+				addPage(PluginFileImagePage.createPage(parent, SWT.NONE, this, m_javaProject.getProject()));
+			}
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/image/plugin/BundleImageContainer.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/image/plugin/BundleImageContainer.java
index 4f75cc7e5..d34beec85 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/image/plugin/BundleImageContainer.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/image/plugin/BundleImageContainer.java
@@ -32,170 +32,170 @@
  * @coverage swt.property.editor.plugin
  */
 public class BundleImageContainer extends ImageContainer implements IHasChildren {
-  private static final String[] PATTERNS = {".gif", ".png", ".jpg", ".jpeg", ".bmp", ".ico"};
-  private final String m_name;
-  private final Bundle m_bundle;
-  private final String m_symbolicName;
-  private final String m_path;
-  private IImageElement[] m_resources;
-  private boolean m_calculateHasChildren = true;
-  private boolean m_hasChildren;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public BundleImageContainer(String name, Bundle bundle, String symbolicName, String path) {
-    m_name = name;
-    m_bundle = bundle;
-    m_symbolicName = symbolicName;
-    m_path = path;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Elements
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Lazy loading resources for this container.
-   */
-  private void ensureResources() {
-    if (m_resources == null) {
-      Enumeration<?> entryPaths = m_bundle.getEntryPaths(m_path);
-      List<IImageElement> resources = Lists.newArrayList();
-      while (entryPaths.hasMoreElements()) {
-        String entry = (String) entryPaths.nextElement();
-        if (entry.endsWith("/")) {
-          // add not empty container
-          if (isContainsResources(m_bundle, entry)) {
-            String entryName = entry.substring(0, entry.length() - 1);
-            int lastSlashIndex = entryName.lastIndexOf('/');
-            if (lastSlashIndex != -1) {
-              entryName = entryName.substring(lastSlashIndex + 1);
-            }
-            resources.add(new BundleImageContainer(entryName, m_bundle, m_symbolicName, entry));
-          }
-        } else {
-          // add image resource
-          for (int i = 0; i < PATTERNS.length; i++) {
-            if (entry.endsWith(PATTERNS[i])) {
-              resources.add(new BundleImageResource(m_bundle.getEntry(entry), m_symbolicName));
-              break;
-            }
-          }
-        }
-      }
-      m_resources = resources.toArray(new IImageElement[resources.size()]);
-    }
-  }
-
-  /**
-   * @return <code>true</code> if given container contains image resources and <code>false</code>
-   *         otherwise.
-   */
-  private static boolean isContainsResources(Bundle bundle, String path) {
-    Enumeration<?> entryPaths = bundle.getEntryPaths(path);
-    List<String> folders = new ArrayList<String>();
-    // handle only file resources
-    while (entryPaths.hasMoreElements()) {
-      String entry = (String) entryPaths.nextElement();
-      if (entry.endsWith("/")) {
-        folders.add(entry);
-      } else {
-        for (int i = 0; i < PATTERNS.length; i++) {
-          if (entry.endsWith(PATTERNS[i])) {
-            return true;
-          }
-        }
-      }
-    }
-    // handle child containers
-    for (String entry : folders) {
-      if (isContainsResources(bundle, entry)) {
-        return true;
-      }
-    }
-    return false;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IHasChildren
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean hasChildren() {
-    try {
-      if (m_calculateHasChildren) {
-        m_calculateHasChildren = false;
-        m_hasChildren = isContainsResources(m_bundle, m_path);
-      }
-      return m_hasChildren;
-    } catch (Throwable e) {
-    }
-    return false;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IImageContainer
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public IImageElement[] elements() {
-    ensureResources();
-    return m_resources;
-  }
-
-  @Override
-  protected IImageElement[] directElements() {
-    return m_resources;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IImageElement
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Image getImage() {
-    return DesignerPlugin.getImage("folder_open.gif");
-  }
-
-  @Override
-  public String getName() {
-    return m_name;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Internal
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected final boolean findResource(List<Object> paths, String imagePath) {
-    paths.add(this);
-    for (IImageElement element : elements()) {
-      if (element instanceof BundleImageContainer) {
-        BundleImageContainer container = (BundleImageContainer) element;
-        if (container.findResource(paths, imagePath)) {
-          return true;
-        }
-      } else if (element instanceof BundleImageResource) {
-        BundleImageResource resource = (BundleImageResource) element;
-        if (resource.getPath().equals(imagePath)) {
-          paths.add(resource);
-          return true;
-        }
-      }
-    }
-    paths.remove(this);
-    return false;
-  }
-
-  @Override
-  public Object[] findResource(String symbolicName, String imagePath) {
-    return null;
-  }
+	private static final String[] PATTERNS = {".gif", ".png", ".jpg", ".jpeg", ".bmp", ".ico"};
+	private final String m_name;
+	private final Bundle m_bundle;
+	private final String m_symbolicName;
+	private final String m_path;
+	private IImageElement[] m_resources;
+	private boolean m_calculateHasChildren = true;
+	private boolean m_hasChildren;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public BundleImageContainer(String name, Bundle bundle, String symbolicName, String path) {
+		m_name = name;
+		m_bundle = bundle;
+		m_symbolicName = symbolicName;
+		m_path = path;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Elements
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Lazy loading resources for this container.
+	 */
+	private void ensureResources() {
+		if (m_resources == null) {
+			Enumeration<?> entryPaths = m_bundle.getEntryPaths(m_path);
+			List<IImageElement> resources = Lists.newArrayList();
+			while (entryPaths.hasMoreElements()) {
+				String entry = (String) entryPaths.nextElement();
+				if (entry.endsWith("/")) {
+					// add not empty container
+					if (isContainsResources(m_bundle, entry)) {
+						String entryName = entry.substring(0, entry.length() - 1);
+						int lastSlashIndex = entryName.lastIndexOf('/');
+						if (lastSlashIndex != -1) {
+							entryName = entryName.substring(lastSlashIndex + 1);
+						}
+						resources.add(new BundleImageContainer(entryName, m_bundle, m_symbolicName, entry));
+					}
+				} else {
+					// add image resource
+					for (int i = 0; i < PATTERNS.length; i++) {
+						if (entry.endsWith(PATTERNS[i])) {
+							resources.add(new BundleImageResource(m_bundle.getEntry(entry), m_symbolicName));
+							break;
+						}
+					}
+				}
+			}
+			m_resources = resources.toArray(new IImageElement[resources.size()]);
+		}
+	}
+
+	/**
+	 * @return <code>true</code> if given container contains image resources and <code>false</code>
+	 *         otherwise.
+	 */
+	private static boolean isContainsResources(Bundle bundle, String path) {
+		Enumeration<?> entryPaths = bundle.getEntryPaths(path);
+		List<String> folders = new ArrayList<String>();
+		// handle only file resources
+		while (entryPaths.hasMoreElements()) {
+			String entry = (String) entryPaths.nextElement();
+			if (entry.endsWith("/")) {
+				folders.add(entry);
+			} else {
+				for (int i = 0; i < PATTERNS.length; i++) {
+					if (entry.endsWith(PATTERNS[i])) {
+						return true;
+					}
+				}
+			}
+		}
+		// handle child containers
+		for (String entry : folders) {
+			if (isContainsResources(bundle, entry)) {
+				return true;
+			}
+		}
+		return false;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IHasChildren
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean hasChildren() {
+		try {
+			if (m_calculateHasChildren) {
+				m_calculateHasChildren = false;
+				m_hasChildren = isContainsResources(m_bundle, m_path);
+			}
+			return m_hasChildren;
+		} catch (Throwable e) {
+		}
+		return false;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IImageContainer
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public IImageElement[] elements() {
+		ensureResources();
+		return m_resources;
+	}
+
+	@Override
+	protected IImageElement[] directElements() {
+		return m_resources;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IImageElement
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Image getImage() {
+		return DesignerPlugin.getImage("folder_open.gif");
+	}
+
+	@Override
+	public String getName() {
+		return m_name;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Internal
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected final boolean findResource(List<Object> paths, String imagePath) {
+		paths.add(this);
+		for (IImageElement element : elements()) {
+			if (element instanceof BundleImageContainer) {
+				BundleImageContainer container = (BundleImageContainer) element;
+				if (container.findResource(paths, imagePath)) {
+					return true;
+				}
+			} else if (element instanceof BundleImageResource) {
+				BundleImageResource resource = (BundleImageResource) element;
+				if (resource.getPath().equals(imagePath)) {
+					paths.add(resource);
+					return true;
+				}
+			}
+		}
+		paths.remove(this);
+		return false;
+	}
+
+	@Override
+	public Object[] findResource(String symbolicName, String imagePath) {
+		return null;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/image/plugin/BundleImageResource.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/image/plugin/BundleImageResource.java
index 6dcb69b17..5e46f85b6 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/image/plugin/BundleImageResource.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/image/plugin/BundleImageResource.java
@@ -29,83 +29,83 @@
  * @coverage swt.property.editor.plugin
  */
 public final class BundleImageResource extends ImageResource {
-  private final URL m_url;
-  private final String m_symbolicName;
-  private final String m_imagePath;
-  private final String m_name;
-  private ImageInfo m_imageInfo;
+	private final URL m_url;
+	private final String m_symbolicName;
+	private final String m_imagePath;
+	private final String m_name;
+	private ImageInfo m_imageInfo;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public BundleImageResource(URL url, String symbolicName) {
-    m_url = url;
-    m_symbolicName = symbolicName;
-    m_imagePath = m_url.getFile();
-    m_name = StringUtils.substringAfterLast(m_imagePath, "/");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public BundleImageResource(URL url, String symbolicName) {
+		m_url = url;
+		m_symbolicName = symbolicName;
+		m_imagePath = m_url.getFile();
+		m_name = StringUtils.substringAfterLast(m_imagePath, "/");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IImageResource
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public ImageInfo getImageInfo() {
-    if (m_imageInfo == null) {
-      // load image
-      Image image;
-      try {
-        InputStream stream = m_url.openStream();
-        try {
-          image = new Image(Display.getCurrent(), stream);
-        } finally {
-          stream.close();
-        }
-      } catch (Throwable e) {
-        return null;
-      }
-      // add to cache
-      m_imageInfo =
-          new ImageInfo(PluginFileImagePage.ID,
-              new String[]{m_symbolicName, m_imagePath},
-              image,
-              -1);
-    }
-    return m_imageInfo;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IImageResource
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public ImageInfo getImageInfo() {
+		if (m_imageInfo == null) {
+			// load image
+			Image image;
+			try {
+				InputStream stream = m_url.openStream();
+				try {
+					image = new Image(Display.getCurrent(), stream);
+				} finally {
+					stream.close();
+				}
+			} catch (Throwable e) {
+				return null;
+			}
+			// add to cache
+			m_imageInfo =
+					new ImageInfo(PluginFileImagePage.ID,
+							new String[]{m_symbolicName, m_imagePath},
+							image,
+							-1);
+		}
+		return m_imageInfo;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IImageElement
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getName() {
-    return m_name;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IImageElement
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getName() {
+		return m_name;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Internal
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return resource image path.
-   */
-  public String getPath() {
-    return m_imagePath;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Internal
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return resource image path.
+	 */
+	public String getPath() {
+		return m_imagePath;
+	}
 
-  /**
-   * Disposes {@link Image} in {@link ImageInfo}.
-   */
-  @Override
-  public void dispose() {
-    if (m_imageInfo != null) {
-      m_imageInfo.getImage().dispose();
-    }
-  }
+	/**
+	 * Disposes {@link Image} in {@link ImageInfo}.
+	 */
+	@Override
+	public void dispose() {
+		if (m_imageInfo != null) {
+			m_imageInfo.getImage().dispose();
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/image/plugin/FileImageContainer.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/image/plugin/FileImageContainer.java
index 72a180e19..3e57969fc 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/image/plugin/FileImageContainer.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/image/plugin/FileImageContainer.java
@@ -33,157 +33,157 @@
  * @coverage swt.property.editor.plugin
  */
 public class FileImageContainer extends ImageContainer implements IHasChildren {
-  private final IContainer m_container;
-  private final String m_symbolicName;
-  private IImageElement[] m_resources;
-  private boolean m_calculateHasChildren = true;
-  private boolean m_hasChildren;
+	private final IContainer m_container;
+	private final String m_symbolicName;
+	private IImageElement[] m_resources;
+	private boolean m_calculateHasChildren = true;
+	private boolean m_hasChildren;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FileImageContainer(IContainer container, String symbolicName) {
-    m_container = container;
-    m_symbolicName = symbolicName;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FileImageContainer(IContainer container, String symbolicName) {
+		m_container = container;
+		m_symbolicName = symbolicName;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Elements
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Lazy loading resources for this container.
-   */
-  private void ensureResources() {
-    if (m_resources == null) {
-      List<IImageElement> resources = Lists.newArrayList();
-      try {
-        for (IResource resource : m_container.members()) {
-          if (resource instanceof IContainer) {
-            IContainer container = (IContainer) resource;
-            // add not empty container
-            if (isContainsResources(container)) {
-              resources.add(new FileImageContainer(container, m_symbolicName));
-            }
-          } else if (resource instanceof IFile) {
-            String extension = resource.getLocation().getFileExtension();
-            // add image resource
-            if (AbstractBrowseImagePage.isImageExtension(extension)) {
-              resources.add(new FileImageResource((IFile) resource, m_symbolicName));
-            }
-          }
-        }
-      } catch (Throwable e) {
-      }
-      m_resources = resources.toArray(new IImageElement[resources.size()]);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Elements
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Lazy loading resources for this container.
+	 */
+	private void ensureResources() {
+		if (m_resources == null) {
+			List<IImageElement> resources = Lists.newArrayList();
+			try {
+				for (IResource resource : m_container.members()) {
+					if (resource instanceof IContainer) {
+						IContainer container = (IContainer) resource;
+						// add not empty container
+						if (isContainsResources(container)) {
+							resources.add(new FileImageContainer(container, m_symbolicName));
+						}
+					} else if (resource instanceof IFile) {
+						String extension = resource.getLocation().getFileExtension();
+						// add image resource
+						if (AbstractBrowseImagePage.isImageExtension(extension)) {
+							resources.add(new FileImageResource((IFile) resource, m_symbolicName));
+						}
+					}
+				}
+			} catch (Throwable e) {
+			}
+			m_resources = resources.toArray(new IImageElement[resources.size()]);
+		}
+	}
 
-  /**
-   * @return <code>true</code> if given {@link IContainer} contains image resources and
-   *         <code>false</code> otherwise.
-   */
-  private static boolean isContainsResources(IContainer container) throws Exception {
-    List<IContainer> subContainers = new ArrayList<IContainer>();
-    // handle only file resources
-    for (IResource resource : container.members()) {
-      if (resource instanceof IContainer) {
-        subContainers.add((IContainer) resource);
-      } else if (resource instanceof IFile) {
-        String extension = resource.getLocation().getFileExtension();
-        if (AbstractBrowseImagePage.isImageExtension(extension)) {
-          return true;
-        }
-      }
-    }
-    // handle child containers
-    for (IContainer subContainer : subContainers) {
-      if (isContainsResources(subContainer)) {
-        return true;
-      }
-    }
-    return false;
-  }
+	/**
+	 * @return <code>true</code> if given {@link IContainer} contains image resources and
+	 *         <code>false</code> otherwise.
+	 */
+	private static boolean isContainsResources(IContainer container) throws Exception {
+		List<IContainer> subContainers = new ArrayList<IContainer>();
+		// handle only file resources
+		for (IResource resource : container.members()) {
+			if (resource instanceof IContainer) {
+				subContainers.add((IContainer) resource);
+			} else if (resource instanceof IFile) {
+				String extension = resource.getLocation().getFileExtension();
+				if (AbstractBrowseImagePage.isImageExtension(extension)) {
+					return true;
+				}
+			}
+		}
+		// handle child containers
+		for (IContainer subContainer : subContainers) {
+			if (isContainsResources(subContainer)) {
+				return true;
+			}
+		}
+		return false;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IHasChildren
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean hasChildren() {
-    try {
-      if (m_calculateHasChildren) {
-        m_calculateHasChildren = false;
-        m_hasChildren = isContainsResources(m_container);
-      }
-      return m_hasChildren;
-    } catch (Throwable e) {
-    }
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IHasChildren
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean hasChildren() {
+		try {
+			if (m_calculateHasChildren) {
+				m_calculateHasChildren = false;
+				m_hasChildren = isContainsResources(m_container);
+			}
+			return m_hasChildren;
+		} catch (Throwable e) {
+		}
+		return false;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IImageContainer
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final IImageElement[] elements() {
-    ensureResources();
-    return m_resources;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IImageContainer
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final IImageElement[] elements() {
+		ensureResources();
+		return m_resources;
+	}
 
-  @Override
-  protected IImageElement[] directElements() {
-    return m_resources;
-  }
+	@Override
+	protected IImageElement[] directElements() {
+		return m_resources;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IImageElement
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Image getImage() {
-    return DesignerPlugin.getImage("folder_open.gif");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IImageElement
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Image getImage() {
+		return DesignerPlugin.getImage("folder_open.gif");
+	}
 
-  @Override
-  public final String getName() {
-    return m_container.getName();
-  }
+	@Override
+	public final String getName() {
+		return m_container.getName();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Internal
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected final boolean findResource(List<Object> paths, String imagePath) {
-    paths.add(this);
-    for (IImageElement element : elements()) {
-      if (element instanceof FileImageContainer) {
-        FileImageContainer container = (FileImageContainer) element;
-        if (container.findResource(paths, imagePath)) {
-          return true;
-        }
-      } else {
-        FileImageResource resource = (FileImageResource) element;
-        if (resource.getPath().equals(imagePath)) {
-          paths.add(resource);
-          return true;
-        }
-      }
-    }
-    paths.remove(this);
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Internal
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected final boolean findResource(List<Object> paths, String imagePath) {
+		paths.add(this);
+		for (IImageElement element : elements()) {
+			if (element instanceof FileImageContainer) {
+				FileImageContainer container = (FileImageContainer) element;
+				if (container.findResource(paths, imagePath)) {
+					return true;
+				}
+			} else {
+				FileImageResource resource = (FileImageResource) element;
+				if (resource.getPath().equals(imagePath)) {
+					paths.add(resource);
+					return true;
+				}
+			}
+		}
+		paths.remove(this);
+		return false;
+	}
 
-  @Override
-  public Object[] findResource(String symbolicName, String imagePath) {
-    return null;
-  }
+	@Override
+	public Object[] findResource(String symbolicName, String imagePath) {
+		return null;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/image/plugin/FileImageResource.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/image/plugin/FileImageResource.java
index 40fca20be..eeb7da4b8 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/image/plugin/FileImageResource.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/image/plugin/FileImageResource.java
@@ -26,85 +26,85 @@
  * @coverage swt.property.editor.plugin
  */
 public final class FileImageResource extends ImageResource {
-  private final IFile m_resource;
-  private final String m_symbolicName;
-  private final String m_imagePath;
-  private ImageInfo m_imageInfo;
+	private final IFile m_resource;
+	private final String m_symbolicName;
+	private final String m_imagePath;
+	private ImageInfo m_imageInfo;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FileImageResource(IFile resource, String symbolicName) {
-    m_resource = resource;
-    m_symbolicName = symbolicName;
-    m_imagePath = m_resource.getProjectRelativePath().toOSString().replace('\\', '/');
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FileImageResource(IFile resource, String symbolicName) {
+		m_resource = resource;
+		m_symbolicName = symbolicName;
+		m_imagePath = m_resource.getProjectRelativePath().toOSString().replace('\\', '/');
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IImageResource
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public ImageInfo getImageInfo() {
-    if (m_imageInfo == null) {
-      try {
-        // load image
-        Image image;
-        try {
-          InputStream inputStream = m_resource.getContents(true);
-          try {
-            image = new Image(Display.getCurrent(), inputStream);
-          } finally {
-            inputStream.close();
-          }
-        } catch (Throwable e) {
-          return null;
-        }
-        // add to cache
-        m_imageInfo =
-            new ImageInfo(PluginFileImagePage.ID,
-                new String[]{m_symbolicName, m_imagePath},
-                image,
-                -1);
-      } catch (Throwable e) {
-        m_imageInfo = null;
-      }
-    }
-    return m_imageInfo;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IImageResource
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public ImageInfo getImageInfo() {
+		if (m_imageInfo == null) {
+			try {
+				// load image
+				Image image;
+				try {
+					InputStream inputStream = m_resource.getContents(true);
+					try {
+						image = new Image(Display.getCurrent(), inputStream);
+					} finally {
+						inputStream.close();
+					}
+				} catch (Throwable e) {
+					return null;
+				}
+				// add to cache
+				m_imageInfo =
+						new ImageInfo(PluginFileImagePage.ID,
+								new String[]{m_symbolicName, m_imagePath},
+								image,
+								-1);
+			} catch (Throwable e) {
+				m_imageInfo = null;
+			}
+		}
+		return m_imageInfo;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IImageElement
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getName() {
-    return m_resource.getName();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IImageElement
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getName() {
+		return m_resource.getName();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Internal
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return resource image path.
-   */
-  public String getPath() {
-    return m_imagePath;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Internal
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return resource image path.
+	 */
+	public String getPath() {
+		return m_imagePath;
+	}
 
-  /**
-   * Disposes {@link Image} in {@link ImageInfo}.
-   */
-  @Override
-  public void dispose() {
-    if (m_imageInfo != null) {
-      m_imageInfo.getImage().dispose();
-    }
-  }
+	/**
+	 * Disposes {@link Image} in {@link ImageInfo}.
+	 */
+	@Override
+	public void dispose() {
+		if (m_imageInfo != null) {
+			m_imageInfo.getImage().dispose();
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/image/plugin/FilterConfigurer.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/image/plugin/FilterConfigurer.java
index e4333691a..641e7b05c 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/image/plugin/FilterConfigurer.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/image/plugin/FilterConfigurer.java
@@ -17,78 +17,78 @@
  * @coverage swt.property.editor.plugin
  */
 public final class FilterConfigurer {
-  private boolean m_dirty = true;
-  private boolean m_showWorkspacePlugins;
-  private boolean m_showRequiredPlugins;
-  private boolean m_showUIPlugins;
-  private boolean m_showAllPlugins;
+	private boolean m_dirty = true;
+	private boolean m_showWorkspacePlugins;
+	private boolean m_showRequiredPlugins;
+	private boolean m_showUIPlugins;
+	private boolean m_showAllPlugins;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public FilterConfigurer(boolean showWorkspacePlugins,
-      boolean showRequiredPlugins,
-      boolean showUIPlugins,
-      boolean showAllPlugins) {
-    m_showWorkspacePlugins = showWorkspacePlugins;
-    m_showRequiredPlugins = showRequiredPlugins;
-    m_showUIPlugins = showUIPlugins;
-    m_showAllPlugins = showAllPlugins;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public FilterConfigurer(boolean showWorkspacePlugins,
+			boolean showRequiredPlugins,
+			boolean showUIPlugins,
+			boolean showAllPlugins) {
+		m_showWorkspacePlugins = showWorkspacePlugins;
+		m_showRequiredPlugins = showRequiredPlugins;
+		m_showUIPlugins = showUIPlugins;
+		m_showAllPlugins = showAllPlugins;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Filters
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public boolean showWorkspacePlugins() {
-    return m_showWorkspacePlugins;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Filters
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public boolean showWorkspacePlugins() {
+		return m_showWorkspacePlugins;
+	}
 
-  public void showWorkspacePlugins(boolean value) {
-    m_dirty = m_showWorkspacePlugins != value;
-    m_showWorkspacePlugins = value;
-  }
+	public void showWorkspacePlugins(boolean value) {
+		m_dirty = m_showWorkspacePlugins != value;
+		m_showWorkspacePlugins = value;
+	}
 
-  public boolean showRequiredPlugins() {
-    return m_showRequiredPlugins;
-  }
+	public boolean showRequiredPlugins() {
+		return m_showRequiredPlugins;
+	}
 
-  public void showRequiredPlugins(boolean value) {
-    m_dirty = m_showRequiredPlugins != value;
-    m_showRequiredPlugins = value;
-  }
+	public void showRequiredPlugins(boolean value) {
+		m_dirty = m_showRequiredPlugins != value;
+		m_showRequiredPlugins = value;
+	}
 
-  public boolean showUIPlugins() {
-    return m_showUIPlugins;
-  }
+	public boolean showUIPlugins() {
+		return m_showUIPlugins;
+	}
 
-  public void showUIPlugins(boolean value) {
-    m_dirty = m_showUIPlugins != value;
-    m_showUIPlugins = value;
-  }
+	public void showUIPlugins(boolean value) {
+		m_dirty = m_showUIPlugins != value;
+		m_showUIPlugins = value;
+	}
 
-  public boolean showAllPlugins() {
-    return m_showAllPlugins;
-  }
+	public boolean showAllPlugins() {
+		return m_showAllPlugins;
+	}
 
-  public void showAllPlugins(boolean value) {
-    m_dirty = m_showAllPlugins != value;
-    m_showAllPlugins = value;
-  }
+	public void showAllPlugins(boolean value) {
+		m_dirty = m_showAllPlugins != value;
+		m_showAllPlugins = value;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // State
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public boolean isDirty() {
-    return m_dirty;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// State
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public boolean isDirty() {
+		return m_dirty;
+	}
 
-  public void resetState() {
-    m_dirty = false;
-  }
+	public void resetState() {
+		m_dirty = false;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/image/plugin/ImageContainer.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/image/plugin/ImageContainer.java
index 40baaf1a2..b58e6dedd 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/image/plugin/ImageContainer.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/image/plugin/ImageContainer.java
@@ -21,33 +21,33 @@
  * @coverage swt.property.editor.plugin
  */
 public abstract class ImageContainer implements IImageContainer, IDisposable {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Internal
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final void dispose() {
-    IImageElement[] elements = directElements();
-    if (elements != null) {
-      for (int i = 0; i < elements.length; i++) {
-        IImageElement element = elements[i];
-        if (element instanceof IDisposable) {
-          IDisposable disposable = (IDisposable) element;
-          disposable.dispose();
-        }
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Internal
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final void dispose() {
+		IImageElement[] elements = directElements();
+		if (elements != null) {
+			for (int i = 0; i < elements.length; i++) {
+				IImageElement element = elements[i];
+				if (element instanceof IDisposable) {
+					IDisposable disposable = (IDisposable) element;
+					disposable.dispose();
+				}
+			}
+		}
+	}
 
-  /**
-   * @return the children {@link IImageElement}'s without preparing.
-   */
-  protected abstract IImageElement[] directElements();
+	/**
+	 * @return the children {@link IImageElement}'s without preparing.
+	 */
+	protected abstract IImageElement[] directElements();
 
-  /**
-   * @return array with path to <code>imagePath</code> relative to given plugin if resource exist
-   *         otherwise <code>null</code>.
-   */
-  public abstract Object[] findResource(String symbolicName, String imagePath);
+	/**
+	 * @return array with path to <code>imagePath</code> relative to given plugin if resource exist
+	 *         otherwise <code>null</code>.
+	 */
+	public abstract Object[] findResource(String symbolicName, String imagePath);
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/image/plugin/ImageResource.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/image/plugin/ImageResource.java
index 86656617f..ebe61a1a0 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/image/plugin/ImageResource.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/image/plugin/ImageResource.java
@@ -23,14 +23,14 @@
  * @coverage swt.property.editor.plugin
  */
 public abstract class ImageResource implements IImageResource, IDisposable {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IImageElement
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final Image getImage() {
-    ImageInfo imageInfo = getImageInfo();
-    return imageInfo != null ? imageInfo.getImage() : null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IImageElement
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final Image getImage() {
+		ImageInfo imageInfo = getImageInfo();
+		return imageInfo != null ? imageInfo.getImage() : null;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/image/plugin/PluginBundleContainer.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/image/plugin/PluginBundleContainer.java
index 59fc427ae..290518f72 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/image/plugin/PluginBundleContainer.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/image/plugin/PluginBundleContainer.java
@@ -28,41 +28,41 @@
  * @coverage swt.property.editor.plugin
  */
 public final class PluginBundleContainer extends BundleImageContainer {
-  private final String m_symbolicName;
+	private final String m_symbolicName;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public PluginBundleContainer(String name, Bundle bundle, String symbolicName) {
-    super(name, bundle, symbolicName, "/");
-    m_symbolicName = symbolicName;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public PluginBundleContainer(String name, Bundle bundle, String symbolicName) {
+		super(name, bundle, symbolicName, "/");
+		m_symbolicName = symbolicName;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IImageElement
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Image getImage() {
-    return DesignerPlugin.getImage("project_open.gif");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IImageElement
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Image getImage() {
+		return DesignerPlugin.getImage("project_open.gif");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Internal
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Object[] findResource(String symbolicName, String imagePath) {
-    if (m_symbolicName.equals(symbolicName)) {
-      List<Object> paths = Lists.newArrayList();
-      if (findResource(paths, imagePath)) {
-        return paths.toArray();
-      }
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Internal
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Object[] findResource(String symbolicName, String imagePath) {
+		if (m_symbolicName.equals(symbolicName)) {
+			List<Object> paths = Lists.newArrayList();
+			if (findResource(paths, imagePath)) {
+				return paths.toArray();
+			}
+		}
+		return null;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/image/plugin/PluginFileImagePage.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/image/plugin/PluginFileImagePage.java
index 03071173b..0a7ec00f4 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/image/plugin/PluginFileImagePage.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/image/plugin/PluginFileImagePage.java
@@ -53,298 +53,298 @@
  * @coverage swt.property.editor.plugin
  */
 public class PluginFileImagePage extends AbstractBrowseImagePage {
-  public static final String ID = "PLUGIN";
-  private final FilterConfigurer m_filterConfigurer;
-  private final PaletteTreeFilter m_filter = new PaletteTreeFilter();
-  private boolean m_enabledFilter;
-  private final Text m_filterText;
-  private final ToolItem m_clearButton;
-  private final ToolItem m_wButton;
-  private final ToolItem m_rButton;
-  private final ToolItem m_uiButton;
-  private final ToolItem m_allButton;
-  private final PluginImagesRoot m_root;
-  protected Timer m_uiFilterTimer;
+	public static final String ID = "PLUGIN";
+	private final FilterConfigurer m_filterConfigurer;
+	private final PaletteTreeFilter m_filter = new PaletteTreeFilter();
+	private boolean m_enabledFilter;
+	private final Text m_filterText;
+	private final ToolItem m_clearButton;
+	private final ToolItem m_wButton;
+	private final ToolItem m_rButton;
+	private final ToolItem m_uiButton;
+	private final ToolItem m_allButton;
+	private final PluginImagesRoot m_root;
+	protected Timer m_uiFilterTimer;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Creation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static AbstractBrowseImagePage createPage(Composite parent,
-      int style,
-      AbstractImageDialog imageDialog,
-      IProject project) {
-    Composite pageComposite = new Composite(parent, style);
-    GridLayoutFactory.create(pageComposite);
-    // create filter bar
-    Composite filterBarComposite = new Composite(pageComposite, SWT.NONE);
-    GridDataFactory.create(filterBarComposite).fillH().grabH();
-    // create page
-    FilterConfigurer filterConfigurer = new FilterConfigurer(true, true, true, false);
-    return new PluginFileImagePage(pageComposite,
-        SWT.NONE,
-        imageDialog,
-        project,
-        filterBarComposite,
-        filterConfigurer,
-        new PluginImagesRoot(project, filterConfigurer));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Creation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static AbstractBrowseImagePage createPage(Composite parent,
+			int style,
+			AbstractImageDialog imageDialog,
+			IProject project) {
+		Composite pageComposite = new Composite(parent, style);
+		GridLayoutFactory.create(pageComposite);
+		// create filter bar
+		Composite filterBarComposite = new Composite(pageComposite, SWT.NONE);
+		GridDataFactory.create(filterBarComposite).fillH().grabH();
+		// create page
+		FilterConfigurer filterConfigurer = new FilterConfigurer(true, true, true, false);
+		return new PluginFileImagePage(pageComposite,
+				SWT.NONE,
+				imageDialog,
+				project,
+				filterBarComposite,
+				filterConfigurer,
+				new PluginImagesRoot(project, filterConfigurer));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private PluginFileImagePage(Composite parent,
-      int style,
-      AbstractImageDialog imageDialog,
-      IProject project,
-      Composite filterBarComposite,
-      FilterConfigurer filterConfigurer,
-      PluginImagesRoot root) {
-    super(parent, style, imageDialog, root);
-    m_root = root;
-    GridLayoutFactory.modify(this).noMargins();
-    GridDataFactory.create(this).fill().grab();
-    m_filterConfigurer = filterConfigurer;
-    addDisposeListener(new DisposeListener() {
-      @Override
-      public void widgetDisposed(DisposeEvent e) {
-        stopUIFilterTimer();
-      }
-    });
-    //
-    GridLayoutFactory.create(filterBarComposite).columns(3).noMargins();
-    // filter text
-    m_filterText = new Text(filterBarComposite, SWT.SINGLE | SWT.BORDER | SWT.SEARCH);
-    GridDataFactory.create(m_filterText).fillH().grabH();
-    m_filterText.setText(ModelMessages.PluginFileImagePage_emptyFilterText);
-    m_filterText.addFocusListener(new FocusAdapter() {
-      @Override
-      public void focusGained(FocusEvent e) {
-        m_filterText.selectAll();
-      }
-    });
-    m_filterText.addModifyListener(new ModifyListener() {
-      @Override
-      public void modifyText(ModifyEvent e) {
-        stopUIFilterTimer();
-        m_uiFilterTimer = new Timer();
-        m_uiFilterTimer.schedule(new TimerTask() {
-          @Override
-          public void run() {
-            Display.getDefault().syncExec(new Runnable() {
-              @Override
-              public void run() {
-                handleModifyFilter();
-              }
-            });
-            m_uiFilterTimer = null;
-          }
-        }, 600);
-      }
-    });
-    // filter text toolbar
-    ToolBar filterTextToolBar = new ToolBar(filterBarComposite, SWT.RIGHT | SWT.FLAT);
-    // clear button
-    m_clearButton = new ToolItem(filterTextToolBar, SWT.PUSH);
-    m_clearButton.setImage(Activator.getImage("clear_new.gif"));
-    m_clearButton.setToolTipText(ModelMessages.PluginFileImagePage_clearButton);
-    m_clearButton.setEnabled(false);
-    m_clearButton.addSelectionListener(new SelectionAdapter() {
-      @Override
-      public void widgetSelected(SelectionEvent e) {
-        m_filterText.setText("");
-      }
-    });
-    // filter toolbar
-    ToolBar filterToolBar = new ToolBar(filterBarComposite, SWT.RIGHT | SWT.FLAT);
-    GridDataFactory.create(filterToolBar).alignHR();
-    // workspace button
-    m_wButton = new ToolItem(filterToolBar, SWT.CHECK);
-    m_wButton.setImage(Activator.getImage("workspace_projects.png"));
-    m_wButton.setToolTipText(ModelMessages.PluginFileImagePage_showWorkspacePluginsButton);
-    m_wButton.setSelection(true);
-    m_wButton.addSelectionListener(new SelectionAdapter() {
-      @Override
-      public void widgetSelected(SelectionEvent e) {
-        m_filterConfigurer.showWorkspacePlugins(m_wButton.getSelection());
-        if (m_filterConfigurer.isDirty()) {
-          refresh();
-        }
-      }
-    });
-    // required button
-    m_rButton = new ToolItem(filterToolBar, SWT.CHECK);
-    m_rButton.setImage(Activator.getImage("required_projects.png"));
-    m_rButton.setToolTipText(ModelMessages.PluginFileImagePage_showRequiredPluginsButton);
-    m_rButton.setSelection(true);
-    m_rButton.addSelectionListener(new SelectionAdapter() {
-      @Override
-      public void widgetSelected(SelectionEvent e) {
-        m_filterConfigurer.showRequiredPlugins(m_rButton.getSelection());
-        if (m_filterConfigurer.isDirty()) {
-          refresh();
-        }
-      }
-    });
-    // separator
-    new ToolItem(filterToolBar, SWT.SEPARATOR);
-    // UI button
-    m_uiButton = new ToolItem(filterToolBar, SWT.RADIO);
-    m_uiButton.setImage(Activator.getImage("ui_projects.png"));
-    m_uiButton.setToolTipText(ModelMessages.PluginFileImagePage_showUiPluginsButton);
-    m_uiButton.setSelection(true);
-    m_uiButton.addSelectionListener(new SelectionAdapter() {
-      @Override
-      public void widgetSelected(SelectionEvent e) {
-        m_filterConfigurer.showUIPlugins(m_uiButton.getSelection());
-        if (m_filterConfigurer.isDirty()) {
-          refresh();
-        }
-      }
-    });
-    // "all" button
-    m_allButton = new ToolItem(filterToolBar, SWT.RADIO);
-    m_allButton.setImage(Activator.getImage("all_projects.png"));
-    m_allButton.setToolTipText(ModelMessages.PluginFileImagePage_showAllPluginsButton);
-    m_allButton.addSelectionListener(new SelectionAdapter() {
-      @Override
-      public void widgetSelected(SelectionEvent e) {
-        m_filterConfigurer.showAllPlugins(m_allButton.getSelection());
-        if (m_filterConfigurer.isDirty()) {
-          refresh();
-        }
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private PluginFileImagePage(Composite parent,
+			int style,
+			AbstractImageDialog imageDialog,
+			IProject project,
+			Composite filterBarComposite,
+			FilterConfigurer filterConfigurer,
+			PluginImagesRoot root) {
+		super(parent, style, imageDialog, root);
+		m_root = root;
+		GridLayoutFactory.modify(this).noMargins();
+		GridDataFactory.create(this).fill().grab();
+		m_filterConfigurer = filterConfigurer;
+		addDisposeListener(new DisposeListener() {
+			@Override
+			public void widgetDisposed(DisposeEvent e) {
+				stopUIFilterTimer();
+			}
+		});
+		//
+		GridLayoutFactory.create(filterBarComposite).columns(3).noMargins();
+		// filter text
+		m_filterText = new Text(filterBarComposite, SWT.SINGLE | SWT.BORDER | SWT.SEARCH);
+		GridDataFactory.create(m_filterText).fillH().grabH();
+		m_filterText.setText(ModelMessages.PluginFileImagePage_emptyFilterText);
+		m_filterText.addFocusListener(new FocusAdapter() {
+			@Override
+			public void focusGained(FocusEvent e) {
+				m_filterText.selectAll();
+			}
+		});
+		m_filterText.addModifyListener(new ModifyListener() {
+			@Override
+			public void modifyText(ModifyEvent e) {
+				stopUIFilterTimer();
+				m_uiFilterTimer = new Timer();
+				m_uiFilterTimer.schedule(new TimerTask() {
+					@Override
+					public void run() {
+						Display.getDefault().syncExec(new Runnable() {
+							@Override
+							public void run() {
+								handleModifyFilter();
+							}
+						});
+						m_uiFilterTimer = null;
+					}
+				}, 600);
+			}
+		});
+		// filter text toolbar
+		ToolBar filterTextToolBar = new ToolBar(filterBarComposite, SWT.RIGHT | SWT.FLAT);
+		// clear button
+		m_clearButton = new ToolItem(filterTextToolBar, SWT.PUSH);
+		m_clearButton.setImage(Activator.getImage("clear_new.gif"));
+		m_clearButton.setToolTipText(ModelMessages.PluginFileImagePage_clearButton);
+		m_clearButton.setEnabled(false);
+		m_clearButton.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				m_filterText.setText("");
+			}
+		});
+		// filter toolbar
+		ToolBar filterToolBar = new ToolBar(filterBarComposite, SWT.RIGHT | SWT.FLAT);
+		GridDataFactory.create(filterToolBar).alignHR();
+		// workspace button
+		m_wButton = new ToolItem(filterToolBar, SWT.CHECK);
+		m_wButton.setImage(Activator.getImage("workspace_projects.png"));
+		m_wButton.setToolTipText(ModelMessages.PluginFileImagePage_showWorkspacePluginsButton);
+		m_wButton.setSelection(true);
+		m_wButton.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				m_filterConfigurer.showWorkspacePlugins(m_wButton.getSelection());
+				if (m_filterConfigurer.isDirty()) {
+					refresh();
+				}
+			}
+		});
+		// required button
+		m_rButton = new ToolItem(filterToolBar, SWT.CHECK);
+		m_rButton.setImage(Activator.getImage("required_projects.png"));
+		m_rButton.setToolTipText(ModelMessages.PluginFileImagePage_showRequiredPluginsButton);
+		m_rButton.setSelection(true);
+		m_rButton.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				m_filterConfigurer.showRequiredPlugins(m_rButton.getSelection());
+				if (m_filterConfigurer.isDirty()) {
+					refresh();
+				}
+			}
+		});
+		// separator
+		new ToolItem(filterToolBar, SWT.SEPARATOR);
+		// UI button
+		m_uiButton = new ToolItem(filterToolBar, SWT.RADIO);
+		m_uiButton.setImage(Activator.getImage("ui_projects.png"));
+		m_uiButton.setToolTipText(ModelMessages.PluginFileImagePage_showUiPluginsButton);
+		m_uiButton.setSelection(true);
+		m_uiButton.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				m_filterConfigurer.showUIPlugins(m_uiButton.getSelection());
+				if (m_filterConfigurer.isDirty()) {
+					refresh();
+				}
+			}
+		});
+		// "all" button
+		m_allButton = new ToolItem(filterToolBar, SWT.RADIO);
+		m_allButton.setImage(Activator.getImage("all_projects.png"));
+		m_allButton.setToolTipText(ModelMessages.PluginFileImagePage_showAllPluginsButton);
+		m_allButton.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				m_filterConfigurer.showAllPlugins(m_allButton.getSelection());
+				if (m_filterConfigurer.isDirty()) {
+					refresh();
+				}
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected final void handleModifyFilter() {
-    String filterText = m_filterText.getText();
-    boolean canEmptyFilterText = filterText.length() == 0;
-    m_clearButton.setEnabled(!canEmptyFilterText);
-    //
-    if (m_enabledFilter) {
-      if (canEmptyFilterText) {
-        m_enabledFilter = false;
-        resetFilter();
-      } else {
-        refreshFilter(filterText, false);
-      }
-    } else if (!canEmptyFilterText) {
-      m_enabledFilter = true;
-      refreshFilter(filterText, true);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected final void handleModifyFilter() {
+		String filterText = m_filterText.getText();
+		boolean canEmptyFilterText = filterText.length() == 0;
+		m_clearButton.setEnabled(!canEmptyFilterText);
+		//
+		if (m_enabledFilter) {
+			if (canEmptyFilterText) {
+				m_enabledFilter = false;
+				resetFilter();
+			} else {
+				refreshFilter(filterText, false);
+			}
+		} else if (!canEmptyFilterText) {
+			m_enabledFilter = true;
+			refreshFilter(filterText, true);
+		}
+	}
 
-  private void resetFilter() {
-    TreeViewer viewer = getViewer();
-    try {
-      viewer.getControl().setRedraw(false);
-      viewer.resetFilters();
-      viewer.collapseAll();
-    } finally {
-      viewer.getControl().setRedraw(true);
-    }
-  }
+	private void resetFilter() {
+		TreeViewer viewer = getViewer();
+		try {
+			viewer.getControl().setRedraw(false);
+			viewer.resetFilters();
+			viewer.collapseAll();
+		} finally {
+			viewer.getControl().setRedraw(true);
+		}
+	}
 
-  private void refreshFilter(String filterText, boolean canAddFilter) {
-    TreeViewer viewer = getViewer();
-    try {
-      viewer.getControl().setRedraw(false);
-      m_filter.setPattern(filterText);
-      if (canAddFilter) {
-        viewer.addFilter(m_filter);
-      } else {
-        viewer.refresh();
-      }
-      viewer.expandAll();
-    } finally {
-      viewer.getControl().setRedraw(true);
-    }
-  }
+	private void refreshFilter(String filterText, boolean canAddFilter) {
+		TreeViewer viewer = getViewer();
+		try {
+			viewer.getControl().setRedraw(false);
+			m_filter.setPattern(filterText);
+			if (canAddFilter) {
+				viewer.addFilter(m_filter);
+			} else {
+				viewer.refresh();
+			}
+			viewer.expandAll();
+		} finally {
+			viewer.getControl().setRedraw(true);
+		}
+	}
 
-  protected final void stopUIFilterTimer() {
-    if (m_uiFilterTimer != null) {
-      m_uiFilterTimer.cancel();
-      m_uiFilterTimer = null;
-    }
-  }
+	protected final void stopUIFilterTimer() {
+		if (m_uiFilterTimer != null) {
+			m_uiFilterTimer.cancel();
+			m_uiFilterTimer = null;
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AbstractImagePage
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getId() {
-    return ID;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AbstractImagePage
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getId() {
+		return ID;
+	}
 
-  @Override
-  public String getTitle() {
-    return ModelMessages.PluginFileImagePage_title;
-  }
+	@Override
+	public String getTitle() {
+		return ModelMessages.PluginFileImagePage_title;
+	}
 
-  @Override
-  protected Control getPageControl() {
-    return getParent();
-  }
+	@Override
+	protected Control getPageControl() {
+		return getParent();
+	}
 
-  @Override
-  public void init(Object data) {
-    m_root.init(data);
-  }
+	@Override
+	public void init(Object data) {
+		m_root.init(data);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Filter
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static class PaletteTreeFilter extends ViewerFilter {
-    private SearchPattern m_pattern;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Filter
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static class PaletteTreeFilter extends ViewerFilter {
+		private SearchPattern m_pattern;
 
-    public void setPattern(String pattern) {
-      if (pattern.indexOf('*') == -1) {
-        pattern += '*';
-      }
-      m_pattern = new SearchPattern();
-      m_pattern.setPattern(pattern);
-    }
+		public void setPattern(String pattern) {
+			if (pattern.indexOf('*') == -1) {
+				pattern += '*';
+			}
+			m_pattern = new SearchPattern();
+			m_pattern.setPattern(pattern);
+		}
 
-    @Override
-    public boolean select(Viewer viewer, Object parent, Object element) {
-      IImageElement imageElement = (IImageElement) element;
-      if (m_pattern.matches(imageElement.getName())) {
-        return true;
-      }
-      if (element instanceof IImageContainer) {
-        IImageContainer container = (IImageContainer) element;
-        IImageElement[] elements = container.elements();
-        List<IImageContainer> containers = new ArrayList<IImageContainer>();
-        // check only children
-        for (IImageElement subElement : elements) {
-          if (m_pattern.matches(subElement.getName())) {
-            return true;
-          }
-          if (subElement instanceof IImageContainer) {
-            containers.add((IImageContainer) subElement);
-          }
-        }
-        // check sub children
-        for (IImageContainer subContainer : containers) {
-          if (select(viewer, element, subContainer)) {
-            return true;
-          }
-        }
-      }
-      return false;
-    }
-  }
+		@Override
+		public boolean select(Viewer viewer, Object parent, Object element) {
+			IImageElement imageElement = (IImageElement) element;
+			if (m_pattern.matches(imageElement.getName())) {
+				return true;
+			}
+			if (element instanceof IImageContainer) {
+				IImageContainer container = (IImageContainer) element;
+				IImageElement[] elements = container.elements();
+				List<IImageContainer> containers = new ArrayList<IImageContainer>();
+				// check only children
+				for (IImageElement subElement : elements) {
+					if (m_pattern.matches(subElement.getName())) {
+						return true;
+					}
+					if (subElement instanceof IImageContainer) {
+						containers.add((IImageContainer) subElement);
+					}
+				}
+				// check sub children
+				for (IImageContainer subContainer : containers) {
+					if (select(viewer, element, subContainer)) {
+						return true;
+					}
+				}
+			}
+			return false;
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/image/plugin/PluginImagesRoot.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/image/plugin/PluginImagesRoot.java
index 930acf5f5..17f8abb2f 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/image/plugin/PluginImagesRoot.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/image/plugin/PluginImagesRoot.java
@@ -41,244 +41,244 @@
  * @coverage swt.property.editor.plugin
  */
 public class PluginImagesRoot implements IImageRoot {
-  private final IProject m_project;
-  private final FilterConfigurer m_filterConfigurer;
-  private final IPluginModelBase m_pluginModel;
-  private String m_currentValueBundle;
-  private ImageContainer[] m_containers;
+	private final IProject m_project;
+	private final FilterConfigurer m_filterConfigurer;
+	private final IPluginModelBase m_pluginModel;
+	private String m_currentValueBundle;
+	private ImageContainer[] m_containers;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public PluginImagesRoot(IProject project, FilterConfigurer filterConfigurer) {
-    m_project = project;
-    m_filterConfigurer = filterConfigurer;
-    m_pluginModel = PluginRegistry.findModel(project);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public PluginImagesRoot(IProject project, FilterConfigurer filterConfigurer) {
+		m_project = project;
+		m_filterConfigurer = filterConfigurer;
+		m_pluginModel = PluginRegistry.findModel(project);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IImageRoot
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public IImageElement[] elements() {
-    if (m_filterConfigurer.isDirty()) {
-      try {
-        dispose();
-        //
-        Set<IPluginModelBase> includeModels = new HashSet<IPluginModelBase>();
-        Map<IPluginModelBase, IProject> workspaceModelToProject =
-            new HashMap<IPluginModelBase, IProject>();
-        //
-        List<ImageContainer> containers = new ArrayList<ImageContainer>();
-        //
-        String thisPluginId = getPluginId(m_pluginModel);
-        if (thisPluginId != null) {
-          addToContainer(containers, new ProjectImageContainer(m_project, thisPluginId));
-        }
-        //
-        boolean findCurrentValueBundle = m_currentValueBundle != null;
-        IPluginModelBase currentValuePluginModel = null;
-        if (findCurrentValueBundle) {
-          currentValuePluginModel = PluginRegistry.findModel(m_currentValueBundle);
-          if (currentValuePluginModel == null || currentValuePluginModel == m_pluginModel) {
-            findCurrentValueBundle = false;
-            currentValuePluginModel = null;
-          }
-        }
-        //
-        IProject[] projects = ResourcesPlugin.getWorkspace().getRoot().getProjects();
-        if (m_filterConfigurer.showWorkspacePlugins()) {
-          for (IProject project : projects) {
-            if (m_project != project && isPluginProject(project)) {
-              IPluginModelBase pluginModel = PluginRegistry.findModel(project);
-              if (pluginModel != null) {
-                String pluginId = getPluginId(pluginModel);
-                if (pluginId != null) {
-                  includeModels.add(pluginModel);
-                  addToContainer(containers, new ProjectImageContainer(project, pluginId));
-                }
-              }
-            }
-          }
-        } else {
-          for (IProject project : projects) {
-            if (m_project != project && isPluginProject(project)) {
-              IPluginModelBase pluginModel = PluginRegistry.findModel(project);
-              if (pluginModel != null) {
-                workspaceModelToProject.put(pluginModel, project);
-              }
-            }
-          }
-        }
-        if (m_filterConfigurer.showRequiredPlugins()) {
-          List<String> requiredPlugins = WorkspacePluginInfo.getRequiredPlugins(m_project);
-          for (String symbolicName : requiredPlugins) {
-            ModelEntry pluginEntry = PluginRegistry.findEntry(symbolicName);
-            if (pluginEntry != null) {
-              IPluginModelBase pluginModel = pluginEntry.getModel();
-              if (pluginEntry.hasWorkspaceModels()) {
-                if (!m_filterConfigurer.showWorkspacePlugins()) {
-                  IProject project = workspaceModelToProject.get(pluginModel);
-                  if (project != null) {
-                    String pluginId = getPluginId(pluginModel);
-                    if (pluginId != null) {
-                      includeModels.add(pluginModel);
-                      addToContainer(containers, new ProjectImageContainer(project, pluginId));
-                    }
-                  }
-                }
-              } else {
-                includeModels.add(pluginModel);
-                Bundle bundle = Platform.getBundle(symbolicName);
-                addToContainer(containers, new PluginBundleContainer(symbolicName,
-                    bundle,
-                    symbolicName));
-              }
-            }
-          }
-        }
-        if (findCurrentValueBundle) {
-          if (!includeModels.contains(currentValuePluginModel)) {
-            ModelEntry pluginEntry = PluginRegistry.findEntry(m_currentValueBundle);
-            if (pluginEntry != null) {
-              if (pluginEntry.hasWorkspaceModels()) {
-                if (!m_filterConfigurer.showWorkspacePlugins()) {
-                  IProject project = workspaceModelToProject.get(currentValuePluginModel);
-                  if (project != null) {
-                    includeModels.add(currentValuePluginModel);
-                    addToContainer(containers, new ProjectImageContainer(project,
-                        m_currentValueBundle));
-                  }
-                }
-              } else {
-                includeModels.add(currentValuePluginModel);
-                Bundle bundle = Platform.getBundle(m_currentValueBundle);
-                containers.add(0, new PluginBundleContainer(m_currentValueBundle,
-                    bundle,
-                    m_currentValueBundle));
-              }
-            }
-          }
-          findCurrentValueBundle = false;
-          currentValuePluginModel = null;
-        }
-        IPluginModelBase[] allModels = PluginRegistry.getAllModels();
-        if (m_filterConfigurer.showUIPlugins()) {
-          for (IPluginModelBase pluginModel : allModels) {
-            String pluginId = getPluginId(pluginModel);
-            if (pluginId != null
-                && pluginId.endsWith(".ui")
-                && !includeModels.contains(pluginModel)) {
-              Bundle bundle = Platform.getBundle(pluginId);
-              addToContainer(containers, new PluginBundleContainer(pluginId, bundle, pluginId));
-            }
-          }
-        } else if (m_filterConfigurer.showAllPlugins()) {
-          for (IPluginModelBase pluginModel : allModels) {
-            if (!includeModels.contains(pluginModel)) {
-              String pluginId = getPluginId(pluginModel);
-              if (pluginId != null) {
-                Bundle bundle = Platform.getBundle(pluginId);
-                addToContainer(containers, new PluginBundleContainer(pluginId, bundle, pluginId));
-              }
-            }
-          }
-        }
-        //
-        Collections.sort(containers, new Comparator<ImageContainer>() {
-          @Override
-          public int compare(ImageContainer container1, ImageContainer container2) {
-            return container1.getName().compareTo(container2.getName());
-          }
-        });
-        m_containers = containers.toArray(new ImageContainer[containers.size()]);
-        //
-        m_filterConfigurer.resetState();
-      } catch (Throwable e) {
-        DesignerPlugin.log(e);
-      }
-    }
-    return m_containers;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IImageRoot
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public IImageElement[] elements() {
+		if (m_filterConfigurer.isDirty()) {
+			try {
+				dispose();
+				//
+				Set<IPluginModelBase> includeModels = new HashSet<IPluginModelBase>();
+				Map<IPluginModelBase, IProject> workspaceModelToProject =
+						new HashMap<IPluginModelBase, IProject>();
+				//
+				List<ImageContainer> containers = new ArrayList<ImageContainer>();
+				//
+				String thisPluginId = getPluginId(m_pluginModel);
+				if (thisPluginId != null) {
+					addToContainer(containers, new ProjectImageContainer(m_project, thisPluginId));
+				}
+				//
+				boolean findCurrentValueBundle = m_currentValueBundle != null;
+				IPluginModelBase currentValuePluginModel = null;
+				if (findCurrentValueBundle) {
+					currentValuePluginModel = PluginRegistry.findModel(m_currentValueBundle);
+					if (currentValuePluginModel == null || currentValuePluginModel == m_pluginModel) {
+						findCurrentValueBundle = false;
+						currentValuePluginModel = null;
+					}
+				}
+				//
+				IProject[] projects = ResourcesPlugin.getWorkspace().getRoot().getProjects();
+				if (m_filterConfigurer.showWorkspacePlugins()) {
+					for (IProject project : projects) {
+						if (m_project != project && isPluginProject(project)) {
+							IPluginModelBase pluginModel = PluginRegistry.findModel(project);
+							if (pluginModel != null) {
+								String pluginId = getPluginId(pluginModel);
+								if (pluginId != null) {
+									includeModels.add(pluginModel);
+									addToContainer(containers, new ProjectImageContainer(project, pluginId));
+								}
+							}
+						}
+					}
+				} else {
+					for (IProject project : projects) {
+						if (m_project != project && isPluginProject(project)) {
+							IPluginModelBase pluginModel = PluginRegistry.findModel(project);
+							if (pluginModel != null) {
+								workspaceModelToProject.put(pluginModel, project);
+							}
+						}
+					}
+				}
+				if (m_filterConfigurer.showRequiredPlugins()) {
+					List<String> requiredPlugins = WorkspacePluginInfo.getRequiredPlugins(m_project);
+					for (String symbolicName : requiredPlugins) {
+						ModelEntry pluginEntry = PluginRegistry.findEntry(symbolicName);
+						if (pluginEntry != null) {
+							IPluginModelBase pluginModel = pluginEntry.getModel();
+							if (pluginEntry.hasWorkspaceModels()) {
+								if (!m_filterConfigurer.showWorkspacePlugins()) {
+									IProject project = workspaceModelToProject.get(pluginModel);
+									if (project != null) {
+										String pluginId = getPluginId(pluginModel);
+										if (pluginId != null) {
+											includeModels.add(pluginModel);
+											addToContainer(containers, new ProjectImageContainer(project, pluginId));
+										}
+									}
+								}
+							} else {
+								includeModels.add(pluginModel);
+								Bundle bundle = Platform.getBundle(symbolicName);
+								addToContainer(containers, new PluginBundleContainer(symbolicName,
+										bundle,
+										symbolicName));
+							}
+						}
+					}
+				}
+				if (findCurrentValueBundle) {
+					if (!includeModels.contains(currentValuePluginModel)) {
+						ModelEntry pluginEntry = PluginRegistry.findEntry(m_currentValueBundle);
+						if (pluginEntry != null) {
+							if (pluginEntry.hasWorkspaceModels()) {
+								if (!m_filterConfigurer.showWorkspacePlugins()) {
+									IProject project = workspaceModelToProject.get(currentValuePluginModel);
+									if (project != null) {
+										includeModels.add(currentValuePluginModel);
+										addToContainer(containers, new ProjectImageContainer(project,
+												m_currentValueBundle));
+									}
+								}
+							} else {
+								includeModels.add(currentValuePluginModel);
+								Bundle bundle = Platform.getBundle(m_currentValueBundle);
+								containers.add(0, new PluginBundleContainer(m_currentValueBundle,
+										bundle,
+										m_currentValueBundle));
+							}
+						}
+					}
+					findCurrentValueBundle = false;
+					currentValuePluginModel = null;
+				}
+				IPluginModelBase[] allModels = PluginRegistry.getAllModels();
+				if (m_filterConfigurer.showUIPlugins()) {
+					for (IPluginModelBase pluginModel : allModels) {
+						String pluginId = getPluginId(pluginModel);
+						if (pluginId != null
+								&& pluginId.endsWith(".ui")
+								&& !includeModels.contains(pluginModel)) {
+							Bundle bundle = Platform.getBundle(pluginId);
+							addToContainer(containers, new PluginBundleContainer(pluginId, bundle, pluginId));
+						}
+					}
+				} else if (m_filterConfigurer.showAllPlugins()) {
+					for (IPluginModelBase pluginModel : allModels) {
+						if (!includeModels.contains(pluginModel)) {
+							String pluginId = getPluginId(pluginModel);
+							if (pluginId != null) {
+								Bundle bundle = Platform.getBundle(pluginId);
+								addToContainer(containers, new PluginBundleContainer(pluginId, bundle, pluginId));
+							}
+						}
+					}
+				}
+				//
+				Collections.sort(containers, new Comparator<ImageContainer>() {
+					@Override
+					public int compare(ImageContainer container1, ImageContainer container2) {
+						return container1.getName().compareTo(container2.getName());
+					}
+				});
+				m_containers = containers.toArray(new ImageContainer[containers.size()]);
+				//
+				m_filterConfigurer.resetState();
+			} catch (Throwable e) {
+				DesignerPlugin.log(e);
+			}
+		}
+		return m_containers;
+	}
 
-  private static void addToContainer(List<ImageContainer> containers, ImageContainer container) {
-    IHasChildren tester = (IHasChildren) container;
-    if (tester.hasChildren()) {
-      containers.add(container);
-    }
-  }
+	private static void addToContainer(List<ImageContainer> containers, ImageContainer container) {
+		IHasChildren tester = (IHasChildren) container;
+		if (tester.hasChildren()) {
+			containers.add(container);
+		}
+	}
 
-  public void init(Object data) {
-    if (data != null) {
-      String[] parts = (String[]) data;
-      m_currentValueBundle = parts[0];
-    }
-  }
+	public void init(Object data) {
+		if (data != null) {
+			String[] parts = (String[]) data;
+			m_currentValueBundle = parts[0];
+		}
+	}
 
-  @Override
-  public void dispose() {
-    if (m_containers != null) {
-      for (ImageContainer container : m_containers) {
-        container.dispose();
-      }
-      m_containers = null;
-    }
-  }
+	@Override
+	public void dispose() {
+		if (m_containers != null) {
+			for (ImageContainer container : m_containers) {
+				container.dispose();
+			}
+			m_containers = null;
+		}
+	}
 
-  @Override
-  public Object[] getSelectionPath(Object data) {
-    String[] parts = (String[]) data;
-    String symbolicName = parts[0];
-    String imagePath = parts[1];
-    //
-    elements();
-    for (ImageContainer container : m_containers) {
-      Object[] resource = container.findResource(symbolicName, imagePath);
-      if (resource != null) {
-        return resource;
-      }
-    }
-    return null;
-  }
+	@Override
+	public Object[] getSelectionPath(Object data) {
+		String[] parts = (String[]) data;
+		String symbolicName = parts[0];
+		String imagePath = parts[1];
+		//
+		elements();
+		for (ImageContainer container : m_containers) {
+			Object[] resource = container.findResource(symbolicName, imagePath);
+			if (resource != null) {
+				return resource;
+			}
+		}
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the ID of plugin, may be <code>null</code>.
-   */
-  private static String getPluginId(IPluginModelBase pluginModel) {
-    BundleDescription bundleDescription = pluginModel.getBundleDescription();
-    return bundleDescription == null ? null : bundleDescription.getSymbolicName();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the ID of plugin, may be <code>null</code>.
+	 */
+	private static String getPluginId(IPluginModelBase pluginModel) {
+		BundleDescription bundleDescription = pluginModel.getBundleDescription();
+		return bundleDescription == null ? null : bundleDescription.getSymbolicName();
+	}
 
-  /**
-   * @return <code>true</code> if given {@link IProject} is plugin project and <code>false</code>
-   *         otherwise.
-   */
-  private static boolean isPluginProject(IProject project) throws Exception {
-    return project.exists()
-        && project.isOpen()
-        && project.hasNature("org.eclipse.pde.PluginNature")
-        && (project.getFile(WorkspacePluginInfo.MANIFEST_PATH).exists() || project.getFile(
-            WorkspacePluginInfo.PLUGIN_PATH).exists());
-  }
+	/**
+	 * @return <code>true</code> if given {@link IProject} is plugin project and <code>false</code>
+	 *         otherwise.
+	 */
+	private static boolean isPluginProject(IProject project) throws Exception {
+		return project.exists()
+				&& project.isOpen()
+				&& project.hasNature("org.eclipse.pde.PluginNature")
+				&& (project.getFile(WorkspacePluginInfo.MANIFEST_PATH).exists() || project.getFile(
+						WorkspacePluginInfo.PLUGIN_PATH).exists());
+	}
 
-  /**
-   * @return <code>true</code> if given {@link IProject} is plugin project and <code>false</code>
-   *         otherwise.
-   */
-  public static boolean testPluginProject(IProject project) {
-    try {
-      return isPluginProject(project);
-    } catch (Throwable e) {
-      return false;
-    }
-  }
+	/**
+	 * @return <code>true</code> if given {@link IProject} is plugin project and <code>false</code>
+	 *         otherwise.
+	 */
+	public static boolean testPluginProject(IProject project) {
+		try {
+			return isPluginProject(project);
+		} catch (Throwable e) {
+			return false;
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/image/plugin/ProjectImageContainer.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/image/plugin/ProjectImageContainer.java
index 3a9cae6d2..edf0e3233 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/image/plugin/ProjectImageContainer.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/image/plugin/ProjectImageContainer.java
@@ -26,41 +26,41 @@
  * @coverage swt.property.editor.plugin
  */
 public final class ProjectImageContainer extends FileImageContainer {
-  private final String m_symbolicName;
+	private final String m_symbolicName;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ProjectImageContainer(IProject project, String symbolicName) {
-    super(project, symbolicName);
-    m_symbolicName = symbolicName;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ProjectImageContainer(IProject project, String symbolicName) {
+		super(project, symbolicName);
+		m_symbolicName = symbolicName;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IImageElement
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public final Image getImage() {
-    return DesignerPlugin.getImage("project_open.gif");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IImageElement
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public final Image getImage() {
+		return DesignerPlugin.getImage("project_open.gif");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Internal
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Object[] findResource(String symbolicName, String imagePath) {
-    if (m_symbolicName.equals(symbolicName)) {
-      List<Object> paths = Lists.newArrayList();
-      if (findResource(paths, imagePath)) {
-        return paths.toArray();
-      }
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Internal
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Object[] findResource(String symbolicName, String imagePath) {
+		if (m_symbolicName.equals(symbolicName)) {
+			List<Object> paths = Lists.newArrayList();
+			if (findResource(paths, imagePath)) {
+				return paths.toArray();
+			}
+		}
+		return null;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/image/plugin/SinglePluginFileImagePage.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/image/plugin/SinglePluginFileImagePage.java
index b74aa81c6..03d05b318 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/image/plugin/SinglePluginFileImagePage.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/image/plugin/SinglePluginFileImagePage.java
@@ -25,32 +25,32 @@
  * @coverage swt.property.editor.plugin
  */
 public class SinglePluginFileImagePage extends AbstractBrowseImagePage {
-  public static final String ID = "PLUGIN";
+	public static final String ID = "PLUGIN";
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SinglePluginFileImagePage(Composite parent,
-      int style,
-      AbstractImageDialog imageDialog,
-      IProject project) {
-    super(parent, style, imageDialog, new SinglePluginImagesRoot(project));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SinglePluginFileImagePage(Composite parent,
+			int style,
+			AbstractImageDialog imageDialog,
+			IProject project) {
+		super(parent, style, imageDialog, new SinglePluginImagesRoot(project));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AbstractImagePage
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getId() {
-    return ID;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AbstractImagePage
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getId() {
+		return ID;
+	}
 
-  @Override
-  public String getTitle() {
-    return ModelMessages.SinglePluginFileImagePage_title;
-  }
+	@Override
+	public String getTitle() {
+		return ModelMessages.SinglePluginFileImagePage_title;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/image/plugin/SinglePluginImagesRoot.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/image/plugin/SinglePluginImagesRoot.java
index a5c49dca7..6d316de56 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/image/plugin/SinglePluginImagesRoot.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/image/plugin/SinglePluginImagesRoot.java
@@ -24,46 +24,46 @@
  * @coverage swt.property.editor.plugin
  */
 public class SinglePluginImagesRoot implements IImageRoot {
-  private final String m_symbolicName;
-  private final ImageContainer[] m_containers = new ImageContainer[1];
+	private final String m_symbolicName;
+	private final ImageContainer[] m_containers = new ImageContainer[1];
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SinglePluginImagesRoot(IProject project) {
-    IPluginModelBase pluginModel = PluginRegistry.findModel(project);
-    m_symbolicName = pluginModel.getBundleDescription().getSymbolicName();
-    m_containers[0] = new ProjectImageContainer(project, m_symbolicName);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SinglePluginImagesRoot(IProject project) {
+		IPluginModelBase pluginModel = PluginRegistry.findModel(project);
+		m_symbolicName = pluginModel.getBundleDescription().getSymbolicName();
+		m_containers[0] = new ProjectImageContainer(project, m_symbolicName);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IImageRoot
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public IImageElement[] elements() {
-    return m_containers;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IImageRoot
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public IImageElement[] elements() {
+		return m_containers;
+	}
 
-  @Override
-  public void dispose() {
-    ImageContainer container = m_containers[0];
-    if (container != null) {
-      container.dispose();
-      m_containers[0] = null;
-    }
-  }
+	@Override
+	public void dispose() {
+		ImageContainer container = m_containers[0];
+		if (container != null) {
+			container.dispose();
+			m_containers[0] = null;
+		}
+	}
 
-  @Override
-  public Object[] getSelectionPath(Object data) {
-    String imagePath = (String) data;
-    Object[] resource = m_containers[0].findResource(m_symbolicName, imagePath);
-    if (resource != null) {
-      return resource;
-    }
-    return null;
-  }
+	@Override
+	public Object[] getSelectionPath(Object data) {
+		String imagePath = (String) data;
+		Object[] resource = m_containers[0].findResource(m_symbolicName, imagePath);
+		if (resource != null) {
+			return resource;
+		}
+		return null;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/image/plugin/WorkspacePluginInfo.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/image/plugin/WorkspacePluginInfo.java
index bf71ce7b7..e3a78e5a4 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/image/plugin/WorkspacePluginInfo.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/property/editor/image/plugin/WorkspacePluginInfo.java
@@ -40,203 +40,203 @@
  * @coverage swt.property.editor.plugin
  */
 public final class WorkspacePluginInfo {
-  public static final IPath MANIFEST_PATH = new Path("META-INF/MANIFEST.MF");
-  public static final IPath PLUGIN_PATH = new Path("plugin.xml");
+	public static final IPath MANIFEST_PATH = new Path("META-INF/MANIFEST.MF");
+	public static final IPath PLUGIN_PATH = new Path("plugin.xml");
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <i>bundle symbolic name</i> for given project or <code>null</code> if project is't
-   *         plugin.
-   */
-  public static String getBundleSymbolicName(IProject project) {
-    // handle META-INF/MANIFEST.MF
-    try {
-      IFile manifestFile = project.getFile(MANIFEST_PATH);
-      if (manifestFile.exists()) {
-        Map<String, String> manifest = parseBundleManifest(manifestFile);
-        String bundleSymbolicName = manifest.get("Bundle-SymbolicName");
-        if (!StringUtils.isEmpty(bundleSymbolicName)) {
-          bundleSymbolicName = StringUtils.substringBefore(bundleSymbolicName, ";").trim();
-          if (!StringUtils.isEmpty(bundleSymbolicName)) {
-            return bundleSymbolicName;
-          }
-        }
-      }
-    } catch (Exception e) {
-    }
-    // handle plugin.xml
-    try {
-      IFile pluginFile = project.getFile(MANIFEST_PATH);
-      if (pluginFile.exists()) {
-        DocumentElement pluginNode = parsePluginXml(pluginFile);
-        if ("plugin".equalsIgnoreCase(pluginNode.getTag())) {
-          String bundleSymbolicName = pluginNode.getAttribute("id");
-          if (!StringUtils.isEmpty(bundleSymbolicName)) {
-            return bundleSymbolicName;
-          }
-        }
-      }
-    } catch (Exception e) {
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <i>bundle symbolic name</i> for given project or <code>null</code> if project is't
+	 *         plugin.
+	 */
+	public static String getBundleSymbolicName(IProject project) {
+		// handle META-INF/MANIFEST.MF
+		try {
+			IFile manifestFile = project.getFile(MANIFEST_PATH);
+			if (manifestFile.exists()) {
+				Map<String, String> manifest = parseBundleManifest(manifestFile);
+				String bundleSymbolicName = manifest.get("Bundle-SymbolicName");
+				if (!StringUtils.isEmpty(bundleSymbolicName)) {
+					bundleSymbolicName = StringUtils.substringBefore(bundleSymbolicName, ";").trim();
+					if (!StringUtils.isEmpty(bundleSymbolicName)) {
+						return bundleSymbolicName;
+					}
+				}
+			}
+		} catch (Exception e) {
+		}
+		// handle plugin.xml
+		try {
+			IFile pluginFile = project.getFile(MANIFEST_PATH);
+			if (pluginFile.exists()) {
+				DocumentElement pluginNode = parsePluginXml(pluginFile);
+				if ("plugin".equalsIgnoreCase(pluginNode.getTag())) {
+					String bundleSymbolicName = pluginNode.getAttribute("id");
+					if (!StringUtils.isEmpty(bundleSymbolicName)) {
+						return bundleSymbolicName;
+					}
+				}
+			}
+		} catch (Exception e) {
+		}
+		return null;
+	}
 
-  public static String getBundleActivator(IProject project) {
-    // handle META-INF/MANIFEST.MF
-    try {
-      IFile manifestFile = project.getFile(MANIFEST_PATH);
-      if (manifestFile.exists()) {
-        Map<String, String> manifest = parseBundleManifest(manifestFile);
-        String bundleActivator = manifest.get("Bundle-Activator");
-        if (!StringUtils.isEmpty(bundleActivator)) {
-          return bundleActivator;
-        }
-      }
-    } catch (Exception e) {
-    }
-    // handle plugin.xml
-    try {
-      IFile pluginFile = project.getFile(MANIFEST_PATH);
-      if (pluginFile.exists()) {
-        DocumentElement pluginNode = parsePluginXml(pluginFile);
-        if ("plugin".equalsIgnoreCase(pluginNode.getTag())) {
-          String bundleActivator = pluginNode.getAttribute("class");
-          if (!StringUtils.isEmpty(bundleActivator)) {
-            return bundleActivator;
-          }
-        }
-      }
-    } catch (Exception e) {
-    }
-    return null;
-  }
+	public static String getBundleActivator(IProject project) {
+		// handle META-INF/MANIFEST.MF
+		try {
+			IFile manifestFile = project.getFile(MANIFEST_PATH);
+			if (manifestFile.exists()) {
+				Map<String, String> manifest = parseBundleManifest(manifestFile);
+				String bundleActivator = manifest.get("Bundle-Activator");
+				if (!StringUtils.isEmpty(bundleActivator)) {
+					return bundleActivator;
+				}
+			}
+		} catch (Exception e) {
+		}
+		// handle plugin.xml
+		try {
+			IFile pluginFile = project.getFile(MANIFEST_PATH);
+			if (pluginFile.exists()) {
+				DocumentElement pluginNode = parsePluginXml(pluginFile);
+				if ("plugin".equalsIgnoreCase(pluginNode.getTag())) {
+					String bundleActivator = pluginNode.getAttribute("class");
+					if (!StringUtils.isEmpty(bundleActivator)) {
+						return bundleActivator;
+					}
+				}
+			}
+		} catch (Exception e) {
+		}
+		return null;
+	}
 
-  /**
-   * @return {@link List} collection with plugin requirements for give project.
-   */
-  public static List<String> getRequiredPlugins(IProject project) {
-    // handle META-INF/MANIFEST.MF
-    try {
-      IFile manifestFile = project.getFile(MANIFEST_PATH);
-      if (manifestFile.exists()) {
-        Map<String, String> manifest = parseBundleManifest(manifestFile);
-        String requireBundle = manifest.get("Require-Bundle");
-        if (!StringUtils.isEmpty(requireBundle)) {
-          String[] requireBundles = StringUtils.split(requireBundle.trim(), ",");
-          List<String> result = new ArrayList<String>();
-          for (String bundle : requireBundles) {
-            if (!StringUtils.isEmpty(bundle)) {
-              result.add(bundle);
-            }
-          }
-          return result;
-        }
-      }
-    } catch (Exception e) {
-    }
-    // handle plugin.xml
-    try {
-      IFile pluginFile = project.getFile(MANIFEST_PATH);
-      if (pluginFile.exists()) {
-        DocumentElement pluginNode = parsePluginXml(pluginFile);
-        if ("plugin".equalsIgnoreCase(pluginNode.getTag())) {
-          for (DocumentElement child : pluginNode.getChildren()) {
-            if ("requires".equalsIgnoreCase(child.getTag())) {
-              List<String> result = new ArrayList<String>();
-              for (DocumentElement importNode : child.getChildren()) {
-                if ("import".equalsIgnoreCase(importNode.getTag())) {
-                  String bundle = importNode.getAttribute("plugin");
-                  if (!StringUtils.isEmpty(bundle)) {
-                    result.add(bundle);
-                  }
-                }
-                return result;
-              }
-            }
-          }
-        }
-      }
-    } catch (Exception e) {
-    }
-    return Collections.emptyList();
-  }
+	/**
+	 * @return {@link List} collection with plugin requirements for give project.
+	 */
+	public static List<String> getRequiredPlugins(IProject project) {
+		// handle META-INF/MANIFEST.MF
+		try {
+			IFile manifestFile = project.getFile(MANIFEST_PATH);
+			if (manifestFile.exists()) {
+				Map<String, String> manifest = parseBundleManifest(manifestFile);
+				String requireBundle = manifest.get("Require-Bundle");
+				if (!StringUtils.isEmpty(requireBundle)) {
+					String[] requireBundles = StringUtils.split(requireBundle.trim(), ",");
+					List<String> result = new ArrayList<String>();
+					for (String bundle : requireBundles) {
+						if (!StringUtils.isEmpty(bundle)) {
+							result.add(bundle);
+						}
+					}
+					return result;
+				}
+			}
+		} catch (Exception e) {
+		}
+		// handle plugin.xml
+		try {
+			IFile pluginFile = project.getFile(MANIFEST_PATH);
+			if (pluginFile.exists()) {
+				DocumentElement pluginNode = parsePluginXml(pluginFile);
+				if ("plugin".equalsIgnoreCase(pluginNode.getTag())) {
+					for (DocumentElement child : pluginNode.getChildren()) {
+						if ("requires".equalsIgnoreCase(child.getTag())) {
+							List<String> result = new ArrayList<String>();
+							for (DocumentElement importNode : child.getChildren()) {
+								if ("import".equalsIgnoreCase(importNode.getTag())) {
+									String bundle = importNode.getAttribute("plugin");
+									if (!StringUtils.isEmpty(bundle)) {
+										result.add(bundle);
+									}
+								}
+								return result;
+							}
+						}
+					}
+				}
+			}
+		} catch (Exception e) {
+		}
+		return Collections.emptyList();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Manifest
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static Map<String, String> parseBundleManifest(IFile manifestFile) throws Exception {
-    Map<String, String> headers = Maps.newHashMap();
-    BufferedReader reader;
-    try {
-      reader = new BufferedReader(new InputStreamReader(manifestFile.getContents(true), "UTF8"));
-    } catch (UnsupportedEncodingException e) {
-      reader = new BufferedReader(new InputStreamReader(manifestFile.getContents(true)));
-    }
-    try {
-      String header = null;
-      StringBuffer value = new StringBuffer(256);
-      boolean firstLine = true;
-      while (true) {
-        String line = reader.readLine();
-        if (line == null || line.length() == 0) {
-          if (!firstLine) {
-            headers.put(header, value.toString().trim());
-          }
-          break;
-        }
-        if (line.charAt(0) == ' ') {
-          if (firstLine) {
-            throw new Exception();
-          }
-          value.append(line.substring(1));
-          continue;
-        }
-        if (!firstLine) {
-          headers.put(header, value.toString().trim());
-          value.setLength(0);
-        }
-        int colon = line.indexOf(':');
-        if (colon == -1) {
-          throw new Exception();
-        }
-        header = line.substring(0, colon).trim();
-        value.append(line.substring(colon + 1));
-        firstLine = false;
-      }
-    } finally {
-      IOUtils.closeQuietly(reader);
-    }
-    return headers;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Manifest
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static Map<String, String> parseBundleManifest(IFile manifestFile) throws Exception {
+		Map<String, String> headers = Maps.newHashMap();
+		BufferedReader reader;
+		try {
+			reader = new BufferedReader(new InputStreamReader(manifestFile.getContents(true), "UTF8"));
+		} catch (UnsupportedEncodingException e) {
+			reader = new BufferedReader(new InputStreamReader(manifestFile.getContents(true)));
+		}
+		try {
+			String header = null;
+			StringBuffer value = new StringBuffer(256);
+			boolean firstLine = true;
+			while (true) {
+				String line = reader.readLine();
+				if (line == null || line.length() == 0) {
+					if (!firstLine) {
+						headers.put(header, value.toString().trim());
+					}
+					break;
+				}
+				if (line.charAt(0) == ' ') {
+					if (firstLine) {
+						throw new Exception();
+					}
+					value.append(line.substring(1));
+					continue;
+				}
+				if (!firstLine) {
+					headers.put(header, value.toString().trim());
+					value.setLength(0);
+				}
+				int colon = line.indexOf(':');
+				if (colon == -1) {
+					throw new Exception();
+				}
+				header = line.substring(0, colon).trim();
+				value.append(line.substring(colon + 1));
+				firstLine = false;
+			}
+		} finally {
+			IOUtils.closeQuietly(reader);
+		}
+		return headers;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // XML
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static DocumentElement parsePluginXml(IFile pluginFile) throws Exception {
-    FileDocumentEditContext context = new FileDocumentEditContext(pluginFile) {
-      @Override
-      protected AbstractDocumentHandler createDocumentHandler() {
-        return new AbstractDocumentHandler() {
-          @Override
-          protected DocumentElement getDocumentNode(String name, DocumentElement parent) {
-            DocumentElement documentNode = new DocumentElement();
-            if (parent == null) {
-              documentNode.setModel(new Model());
-            }
-            return documentNode;
-          }
-        };
-      }
-    };
-    context.disconnect();
-    return context.getRoot();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// XML
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static DocumentElement parsePluginXml(IFile pluginFile) throws Exception {
+		FileDocumentEditContext context = new FileDocumentEditContext(pluginFile) {
+			@Override
+			protected AbstractDocumentHandler createDocumentHandler() {
+				return new AbstractDocumentHandler() {
+					@Override
+					protected DocumentElement getDocumentNode(String name, DocumentElement parent) {
+						DocumentElement documentNode = new DocumentElement();
+						if (parent == null) {
+							documentNode.setModel(new Model());
+						}
+						return documentNode;
+					}
+				};
+			}
+		};
+		context.disconnect();
+		return context.getRoot();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/util/surround/AbstractCompositeSurroundTarget.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/util/surround/AbstractCompositeSurroundTarget.java
index f89fe53b6..669238dda 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/util/surround/AbstractCompositeSurroundTarget.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/util/surround/AbstractCompositeSurroundTarget.java
@@ -32,72 +32,72 @@
  * @coverage swt.model.util
  */
 public abstract class AbstractCompositeSurroundTarget
-    extends
-      ISurroundTarget<CompositeInfo, ControlInfo> {
-  private final String m_className;
+extends
+ISurroundTarget<CompositeInfo, ControlInfo> {
+	private final String m_className;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbstractCompositeSurroundTarget(String className) {
-    m_className = className;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbstractCompositeSurroundTarget(String className) {
+		m_className = className;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Image getIcon(AstEditor editor) throws Exception {
-    return ComponentDescriptionHelper.getDescription(editor, m_className).getIcon();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Image getIcon(AstEditor editor) throws Exception {
+		return ComponentDescriptionHelper.getDescription(editor, m_className).getIcon();
+	}
 
-  @Override
-  public String getText(AstEditor editor) throws Exception {
-    return m_className;
-  }
+	@Override
+	public String getText(AstEditor editor) throws Exception {
+		return m_className;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Operation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public CompositeInfo createContainer(AstEditor editor) throws Exception {
-    return (CompositeInfo) JavaInfoUtils.createJavaInfo(
-        editor,
-        m_className,
-        new ConstructorCreationSupport());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Operation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public CompositeInfo createContainer(AstEditor editor) throws Exception {
+		return (CompositeInfo) JavaInfoUtils.createJavaInfo(
+				editor,
+				m_className,
+				new ConstructorCreationSupport());
+	}
 
-  @Override
-  public void beforeComponentsMove(CompositeInfo container, List<ControlInfo> components)
-      throws Exception {
-    LayoutInfo layout = createLayout(container.getEditor(), "org.eclipse.swt.layout.RowLayout");
-    container.setLayout(layout);
-  }
+	@Override
+	public void beforeComponentsMove(CompositeInfo container, List<ControlInfo> components)
+			throws Exception {
+		LayoutInfo layout = createLayout(container.getEditor(), "org.eclipse.swt.layout.RowLayout");
+		container.setLayout(layout);
+	}
 
-  @Override
-  public void move(CompositeInfo container, ControlInfo component) throws Exception {
-    RowLayoutInfo layout = (RowLayoutInfo) container.getLayout();
-    layout.command_MOVE(component, null);
-  }
+	@Override
+	public void move(CompositeInfo container, ControlInfo component) throws Exception {
+		RowLayoutInfo layout = (RowLayoutInfo) container.getLayout();
+		layout.command_MOVE(component, null);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the instance of {@link LayoutInfo} by its class name.
-   */
-  private static LayoutInfo createLayout(AstEditor editor, String layoutClassName) throws Exception {
-    return (LayoutInfo) JavaInfoUtils.createJavaInfo(
-        editor,
-        layoutClassName,
-        new ConstructorCreationSupport());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the instance of {@link LayoutInfo} by its class name.
+	 */
+	private static LayoutInfo createLayout(AstEditor editor, String layoutClassName) throws Exception {
+		return (LayoutInfo) JavaInfoUtils.createJavaInfo(
+				editor,
+				layoutClassName,
+				new ConstructorCreationSupport());
+	}
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/util/surround/CompositeSurroundTarget.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/util/surround/CompositeSurroundTarget.java
index 446487b84..d682d9cdf 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/util/surround/CompositeSurroundTarget.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/util/surround/CompositeSurroundTarget.java
@@ -21,14 +21,14 @@
  * @coverage swt.model.util
  */
 public final class CompositeSurroundTarget extends AbstractCompositeSurroundTarget {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final CompositeSurroundTarget INSTANCE = new CompositeSurroundTarget();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final CompositeSurroundTarget INSTANCE = new CompositeSurroundTarget();
 
-  private CompositeSurroundTarget() {
-    super("org.eclipse.swt.widgets.Composite");
-  }
+	private CompositeSurroundTarget() {
+		super("org.eclipse.swt.widgets.Composite");
+	}
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/util/surround/GroupSurroundTarget.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/util/surround/GroupSurroundTarget.java
index 30831dc1a..7ec01863d 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/util/surround/GroupSurroundTarget.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/util/surround/GroupSurroundTarget.java
@@ -21,14 +21,14 @@
  * @coverage swt.model.util
  */
 public final class GroupSurroundTarget extends AbstractCompositeSurroundTarget {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final Object INSTANCE = new GroupSurroundTarget();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final Object INSTANCE = new GroupSurroundTarget();
 
-  private GroupSurroundTarget() {
-    super("org.eclipse.swt.widgets.Group");
-  }
+	private GroupSurroundTarget() {
+		super("org.eclipse.swt.widgets.Group");
+	}
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/util/surround/LayoutSurroundSupport.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/util/surround/LayoutSurroundSupport.java
index db367584f..b3514231d 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/util/surround/LayoutSurroundSupport.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/util/surround/LayoutSurroundSupport.java
@@ -24,44 +24,44 @@
  * @coverage swt.model.util
  */
 public abstract class LayoutSurroundSupport extends SwtSurroundSupport {
-  private final LayoutInfo m_layout;
+	private final LayoutInfo m_layout;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public LayoutSurroundSupport(LayoutInfo layout) {
-    super(layout.getComposite());
-    m_layout = layout;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public LayoutSurroundSupport(LayoutInfo layout) {
+		super(layout.getComposite());
+		m_layout = layout;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Validate
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected boolean isActive() {
-    return m_layout.isActive();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Validate
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected boolean isActive() {
+		return m_layout.isActive();
+	}
 
-  @Override
-  protected boolean validateComponents(List<ControlInfo> components) throws Exception {
-    if (!super.validateComponents(components)) {
-      return false;
-    }
-    // perform "surround" only for "active" layout
-    if (!m_layout.isActive()) {
-      return false;
-    }
-    // don't handle implicit
-    for (ControlInfo component : components) {
-      if (component.getCreationSupport() instanceof IImplicitCreationSupport) {
-        return false;
-      }
-    }
-    // OK
-    return true;
-  }
+	@Override
+	protected boolean validateComponents(List<ControlInfo> components) throws Exception {
+		if (!super.validateComponents(components)) {
+			return false;
+		}
+		// perform "surround" only for "active" layout
+		if (!m_layout.isActive()) {
+			return false;
+		}
+		// don't handle implicit
+		for (ControlInfo component : components) {
+			if (component.getCreationSupport() instanceof IImplicitCreationSupport) {
+				return false;
+			}
+		}
+		// OK
+		return true;
+	}
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/util/surround/SwtSurroundSupport.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/util/surround/SwtSurroundSupport.java
index 80fefc696..c8fb647d5 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/util/surround/SwtSurroundSupport.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/util/surround/SwtSurroundSupport.java
@@ -21,12 +21,12 @@
  * @coverage swt.model.util
  */
 public abstract class SwtSurroundSupport extends SurroundSupport<CompositeInfo, ControlInfo> {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SwtSurroundSupport(CompositeInfo sourceContainer) {
-    super(sourceContainer, ControlInfo.class);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SwtSurroundSupport(CompositeInfo sourceContainer) {
+		super(sourceContainer, ControlInfo.class);
+	}
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/ButtonInfo.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/ButtonInfo.java
index 36f0dd79c..c3babc898 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/ButtonInfo.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/ButtonInfo.java
@@ -22,26 +22,26 @@
  * @coverage swt.model.widgets
  */
 public final class ButtonInfo extends ControlInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ButtonInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ButtonInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final IObjectPresentation m_presentation = new ButtonStylePresentation(this);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final IObjectPresentation m_presentation = new ButtonStylePresentation(this);
 
-  @Override
-  public IObjectPresentation getPresentation() {
-    return m_presentation;
-  }
+	@Override
+	public IObjectPresentation getPresentation() {
+		return m_presentation;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/ButtonStylePresentation.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/ButtonStylePresentation.java
index a33245ef3..cbd8e343b 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/ButtonStylePresentation.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/ButtonStylePresentation.java
@@ -20,23 +20,23 @@
  * @coverage swt.model.presentation
  */
 public final class ButtonStylePresentation extends StylePresentation {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ButtonStylePresentation(ButtonInfo button) {
-    super(button);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ButtonStylePresentation(ButtonInfo button) {
+		super(button);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // StylePresentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void initImages() throws Exception {
-    addImage(SwtSupport.CHECK, "wbp-meta/org/eclipse/swt/widgets/Button_check.gif");
-    addImage(SwtSupport.RADIO, "wbp-meta/org/eclipse/swt/widgets/Button_radio.gif");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// StylePresentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void initImages() throws Exception {
+		addImage(SwtSupport.CHECK, "wbp-meta/org/eclipse/swt/widgets/Button_check.gif");
+		addImage(SwtSupport.RADIO, "wbp-meta/org/eclipse/swt/widgets/Button_radio.gif");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/CompositeInfo.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/CompositeInfo.java
index 12173268c..7696e4b75 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/CompositeInfo.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/CompositeInfo.java
@@ -101,704 +101,704 @@
  * @coverage swt.model.widgets
  */
 public class CompositeInfo extends ScrollableInfo
-    implements
-      ICompositeInfo,
-      IThisMethodParameterEvaluator {
-  private final CompositeInfo m_this = this;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CompositeInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-    addBroacastListeners();
-    m_tabOrderProperty = new TabOrderProperty(this);
-    dontAllowDouble_setLayout();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Initialize
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void addBroacastListeners() throws Exception {
-    addBroadcastListener(new ObjectInfoTreeComplete() {
-      @Override
-      public void invoke() throws Exception {
-        initialize_createAbsoluteLayout();
-      }
-    });
-    addBroadcastListener(new ObjectEventListener() {
-      @Override
-      public void addContextMenu(List<? extends ObjectInfo> objects,
-          ObjectInfo object,
-          IMenuManager manager) throws Exception {
-        if (object == m_this) {
-          fillContextMenu(manager);
-        }
-      }
-    });
-    addBroadcastListener(new JavaEventListener() {
-      @Override
-      public void clipboardCopy(JavaInfo javaInfo, List<ClipboardCommand> commands)
-          throws Exception {
-        if (javaInfo == m_this) {
-          clipboardCopy_addCommands(commands);
-        }
-      }
-    });
-  }
-
-  @Override
-  public void createExposedChildren() throws Exception {
-    super.createExposedChildren();
-    initialize_createImplicitLayout();
-  }
-
-  /**
-   * We should not allow to execute {@link Composite#setLayout(Layout)} more than one time, this
-   * causes problems with implicit layouts and may also cause problems with {@link LayoutDataInfo}.
-   */
-  private void dontAllowDouble_setLayout() {
-    addBroadcastListener(new ObjectInfoTreeComplete() {
-      @Override
-      public void invoke() throws Exception {
-        removeBroadcastListener(this);
-      }
-    });
-    addBroadcastListener(new ObjectInfoChildAddBefore() {
-      @Override
-      public void invoke(ObjectInfo parent, ObjectInfo child, ObjectInfo[] nextChild)
-          throws Exception {
-        if (parent == m_this && child instanceof LayoutInfo) {
-          List<LayoutInfo> layouts = getChildren(LayoutInfo.class);
-          if (!layouts.isEmpty()) {
-            LayoutInfo existingLayout = layouts.get(0);
-            if (!(existingLayout.getCreationSupport() instanceof ImplicitLayoutCreationSupport)) {
-              throw new DesignerException(IExceptionConstants.DOUBLE_SET_LAYOUT,
-                  m_this.toString(),
-                  existingLayout.toString(),
-                  child.toString());
-            }
-          }
-        }
-      }
-    });
-  }
-
-  /**
-   * Fill context menu {@link IMenuManager}.
-   */
-  protected void fillContextMenu(IMenuManager manager) throws Exception {
-    contextMenu_setLayout(manager);
-    contextMenu_setMinimalSize(manager);
-  }
-
-  /**
-   * Adds "Set Layout" sub-menu for setting new {@link LayoutInfo} on this {@link CompositeInfo}.
-   */
-  private void contextMenu_setLayout(IMenuManager manager) throws Exception {
-    // check if we have layout at all
-    if (!hasLayout()) {
-      return;
-    }
-    // OK, add "Set layout"
-    IMenuManager layoutsManager = new MenuManager(ModelMessages.CompositeInfo_setLayoutManager);
-    manager.appendToGroup(IContextMenuConstants.GROUP_LAYOUT, layoutsManager);
-    fillLayoutsManager(layoutsManager);
-  }
-
-  /**
-   * Fills given {@link IMenuManager} with {@link IAction}s for setting new {@link LayoutInfo} on
-   * this {@link CompositeInfo}.
-   */
-  public void fillLayoutsManager(IMenuManager layoutsManager) throws Exception {
-    // add "absolute"
-    {
-      ObjectInfoAction action = new ObjectInfoAction(this) {
-        @Override
-        protected void runEx() throws Exception {
-          AbsoluteLayoutInfo layout = AbsoluteLayoutInfo.createExplicit(m_this);
-          setLayout(layout);
-        }
-      };
-      action.setText(ModelMessages.CompositeInfo_setLayoutAbsolute);
-      action.setImageDescriptor(Activator.getImageDescriptor("info/layout/absolute/layout.gif"));
-      layoutsManager.add(action);
-    }
-    // add layout items
-    final AstEditor editor = getEditor();
-    ClassLoader editorLoader = EditorState.get(editor).getEditorLoader();
-    List<LayoutDescription> descriptions =
-        LayoutDescriptionHelper.get(getDescription().getToolkit());
-    for (final LayoutDescription description : descriptions) {
-      if (InstanceScope.INSTANCE.getNode(
-          IEditorPreferenceConstants.P_AVAILABLE_LAYOUTS_NODE).getBoolean(
-              description.getLayoutClassName(),
-              true)) {
-        final Class<?> layoutClass = editorLoader.loadClass(description.getLayoutClassName());
-        final String creationId = description.getCreationId();
-        ComponentDescription layoutComponentDescription =
-            ComponentDescriptionHelper.getDescription(editor, layoutClass);
-        ObjectInfoAction action = new ObjectInfoAction(this) {
-          @Override
-          protected void runEx() throws Exception {
-            description.ensureLibraries(editor.getJavaProject());
-            LayoutInfo layout = (LayoutInfo) JavaInfoUtils.createJavaInfo(
-                getEditor(),
-                layoutClass,
-                new ConstructorCreationSupport(creationId, true));
-            setLayout(layout);
-          }
-        };
-        action.setText(description.getName());
-        action.setImageDescriptor(new ImageImageDescriptor(layoutComponentDescription.getIcon()));
-        layoutsManager.add(action);
-      }
-    }
-  }
-
-  /**
-   * Adds "Set minimal size" item.
-   */
-  private void contextMenu_setMinimalSize(IMenuManager manager) throws Exception {
-    if (isRoot() || JavaInfoUtils.hasTrueParameter(this, "SWT.isRoot")) {
-      ObjectInfoAction action = new ObjectInfoAction(this) {
-        @Override
-        protected void runEx() throws Exception {
-          Dimension preferredSize = getPreferredSize();
-          getTopBoundsSupport().setSize(preferredSize.width, preferredSize.height);
-        }
-      };
-      action.setText(ModelMessages.CompositeInfo_setMinimalSize);
-      manager.appendToGroup(IContextMenuConstants.GROUP_LAYOUT, action);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IThisMethodParameterEvaluator
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Object evaluateParameter(EvaluationContext context,
-      MethodDeclaration methodDeclaration,
-      String methodSignature,
-      SingleVariableDeclaration parameter,
-      int index) throws Exception {
-    if (ObjectUtils.equals(parameter.getName().getIdentifier(), "style")) {
-      return SWT.NONE;
-    }
-    return AstEvaluationEngine.UNKNOWN;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void refresh_dispose() throws Exception {
-    // inherit parent layout, if it is valid at all and valid time
-    processInitialLayout();
-    // call "super"
-    super.refresh_dispose();
-  }
-
-  @Override
-  protected void refresh_fetch() throws Exception {
-    m_clientAreaInsets2 = CoordinateUtils.getClientAreaInsets2(getObject());
-    super.refresh_fetch();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Properties
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final TabOrderProperty m_tabOrderProperty;
-
-  @Override
-  protected List<Property> getPropertyList() throws Exception {
-    List<Property> properties = super.getPropertyList();
-    if (hasLayout()) {
-      properties.add(m_tabOrderProperty);
-    }
-    return properties;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // TopBoundsSupport
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected TopBoundsSupport createTopBoundsSupport() {
-    // return implementation from eRCP or RCP bundles
-    return ExecutionUtils.runObject(new RunnableObjectEx<TopBoundsSupport>() {
-      @Override
-      public TopBoundsSupport runObject() throws Exception {
-        // prepare "impl" class
-        Class<?> implClass;
-        {
-          Bundle bundle = getDescription().getToolkit().getBundle();
-          String implClassName =
-              bundle.getSymbolicName() + ".model.widgets.CompositeTopBoundsSupport";
-          implClassName = StringUtils.replace(implClassName, ".wb.", ".wb.internal.");
-          implClass = bundle.loadClass(implClassName);
-        }
-        // create instance
-        Constructor<?> constructor = implClass.getConstructor(CompositeInfo.class);
-        return (TopBoundsSupport) constructor.newInstance(m_this);
-      }
-    });
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Layout
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final String KEY_LAYOUT_HAS = "layout.has";
-  private static final String KEY_LAYOUT_ALREADY_PROCESSED =
-      "default/parent layout already processed";
-  public static final String KEY_DONT_INHERIT_LAYOUT = "default/disable parent layout inheritance";
-  /**
-   * We set this key during {@link #setLayout(LayoutInfo)} to prevent implicit {@link LayoutInfo}
-   * activation during layout replacement.
-   */
-  public static final String KEY_DONT_SET_IMPLICIT_LAYOUT = "KEY_DONT_SET_IMPLICIT_LAYOUT";
-
-  /**
-   * Forcibly specifies that this <b>instance</b> of {@link CompositeInfo} has no {@link LayoutInfo}
-   * .
-   */
-  public final void markNoLayout() throws Exception {
-    putArbitraryValue(KEY_LAYOUT_HAS, Boolean.FALSE);
-    // remove possible LayoutInfo, it can be only implicit
-    for (LayoutInfo layout : getChildren(LayoutInfo.class)) {
-      Assert.instanceOf(ImplicitLayoutCreationSupport.class, layout.getCreationSupport());
-      removeChild(layout);
-    }
-  }
-
-  /**
-   * @return <code>true</code> if this {@link CompositeInfo} can have {@link LayoutInfo}.
-   */
-  public final boolean hasLayout() {
-    if (isPlaceholder()) {
-      return false;
-    }
-    // check, may be we have instance-level flag
-    {
-      Boolean hasLayout = (Boolean) getArbitraryValue(KEY_LAYOUT_HAS);
-      if (hasLayout != null) {
-        return hasLayout;
-      }
-    }
-    // OK, look into descriptions
-    return JavaInfoUtils.hasTrueParameter(this, KEY_LAYOUT_HAS);
-  }
-
-  private void initialize_createImplicitLayout() throws Exception {
-    if (hasLayout()) {
-      if (initialize_hasExplicitLayout()) {
-        return;
-      }
-      // prepare for creation
-		AstEditor editor = getEditor();
-      Object layout = ContainerSupport.getLayout(getObject());
-		// check if same implicit already exists
-		if (initialize_removeImplicitLayout(layout)) {
+implements
+ICompositeInfo,
+IThisMethodParameterEvaluator {
+	private final CompositeInfo m_this = this;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CompositeInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+		addBroacastListeners();
+		m_tabOrderProperty = new TabOrderProperty(this);
+		dontAllowDouble_setLayout();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Initialize
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void addBroacastListeners() throws Exception {
+		addBroadcastListener(new ObjectInfoTreeComplete() {
+			@Override
+			public void invoke() throws Exception {
+				initialize_createAbsoluteLayout();
+			}
+		});
+		addBroadcastListener(new ObjectEventListener() {
+			@Override
+			public void addContextMenu(List<? extends ObjectInfo> objects,
+					ObjectInfo object,
+					IMenuManager manager) throws Exception {
+				if (object == m_this) {
+					fillContextMenu(manager);
+				}
+			}
+		});
+		addBroadcastListener(new JavaEventListener() {
+			@Override
+			public void clipboardCopy(JavaInfo javaInfo, List<ClipboardCommand> commands)
+					throws Exception {
+				if (javaInfo == m_this) {
+					clipboardCopy_addCommands(commands);
+				}
+			}
+		});
+	}
+
+	@Override
+	public void createExposedChildren() throws Exception {
+		super.createExposedChildren();
+		initialize_createImplicitLayout();
+	}
+
+	/**
+	 * We should not allow to execute {@link Composite#setLayout(Layout)} more than one time, this
+	 * causes problems with implicit layouts and may also cause problems with {@link LayoutDataInfo}.
+	 */
+	private void dontAllowDouble_setLayout() {
+		addBroadcastListener(new ObjectInfoTreeComplete() {
+			@Override
+			public void invoke() throws Exception {
+				removeBroadcastListener(this);
+			}
+		});
+		addBroadcastListener(new ObjectInfoChildAddBefore() {
+			@Override
+			public void invoke(ObjectInfo parent, ObjectInfo child, ObjectInfo[] nextChild)
+					throws Exception {
+				if (parent == m_this && child instanceof LayoutInfo) {
+					List<LayoutInfo> layouts = getChildren(LayoutInfo.class);
+					if (!layouts.isEmpty()) {
+						LayoutInfo existingLayout = layouts.get(0);
+						if (!(existingLayout.getCreationSupport() instanceof ImplicitLayoutCreationSupport)) {
+							throw new DesignerException(IExceptionConstants.DOUBLE_SET_LAYOUT,
+									m_this.toString(),
+									existingLayout.toString(),
+									child.toString());
+						}
+					}
+				}
+			}
+		});
+	}
+
+	/**
+	 * Fill context menu {@link IMenuManager}.
+	 */
+	protected void fillContextMenu(IMenuManager manager) throws Exception {
+		contextMenu_setLayout(manager);
+		contextMenu_setMinimalSize(manager);
+	}
+
+	/**
+	 * Adds "Set Layout" sub-menu for setting new {@link LayoutInfo} on this {@link CompositeInfo}.
+	 */
+	private void contextMenu_setLayout(IMenuManager manager) throws Exception {
+		// check if we have layout at all
+		if (!hasLayout()) {
 			return;
 		}
-      // create layout model
-		LayoutInfo implicitLayout;
-		CreationSupport creationSupport = new ImplicitLayoutCreationSupport(this);
-		if (layout == null) {
-			ToolkitDescription toolkit = getDescription().getToolkit();
-			implicitLayout = new AbsoluteLayoutInfo(editor, toolkit, creationSupport);
-		} else {
-			Class<?> layoutClass = layout.getClass();
-			implicitLayout = checkLayoutPreferences(layoutClass, editor, creationSupport);
+		// OK, add "Set layout"
+		IMenuManager layoutsManager = new MenuManager(ModelMessages.CompositeInfo_setLayoutManager);
+		manager.appendToGroup(IContextMenuConstants.GROUP_LAYOUT, layoutsManager);
+		fillLayoutsManager(layoutsManager);
+	}
+
+	/**
+	 * Fills given {@link IMenuManager} with {@link IAction}s for setting new {@link LayoutInfo} on
+	 * this {@link CompositeInfo}.
+	 */
+	public void fillLayoutsManager(IMenuManager layoutsManager) throws Exception {
+		// add "absolute"
+		{
+			ObjectInfoAction action = new ObjectInfoAction(this) {
+				@Override
+				protected void runEx() throws Exception {
+					AbsoluteLayoutInfo layout = AbsoluteLayoutInfo.createExplicit(m_this);
+					setLayout(layout);
+				}
+			};
+			action.setText(ModelMessages.CompositeInfo_setLayoutAbsolute);
+			action.setImageDescriptor(Activator.getImageDescriptor("info/layout/absolute/layout.gif"));
+			layoutsManager.add(action);
+		}
+		// add layout items
+		final AstEditor editor = getEditor();
+		ClassLoader editorLoader = EditorState.get(editor).getEditorLoader();
+		List<LayoutDescription> descriptions =
+				LayoutDescriptionHelper.get(getDescription().getToolkit());
+		for (final LayoutDescription description : descriptions) {
+			if (InstanceScope.INSTANCE.getNode(
+					IEditorPreferenceConstants.P_AVAILABLE_LAYOUTS_NODE).getBoolean(
+							description.getLayoutClassName(),
+							true)) {
+				final Class<?> layoutClass = editorLoader.loadClass(description.getLayoutClassName());
+				final String creationId = description.getCreationId();
+				ComponentDescription layoutComponentDescription =
+						ComponentDescriptionHelper.getDescription(editor, layoutClass);
+				ObjectInfoAction action = new ObjectInfoAction(this) {
+					@Override
+					protected void runEx() throws Exception {
+						description.ensureLibraries(editor.getJavaProject());
+						LayoutInfo layout = (LayoutInfo) JavaInfoUtils.createJavaInfo(
+								getEditor(),
+								layoutClass,
+								new ConstructorCreationSupport(creationId, true));
+						setLayout(layout);
+					}
+				};
+				action.setText(description.getName());
+				action.setImageDescriptor(new ImageImageDescriptor(layoutComponentDescription.getIcon()));
+				layoutsManager.add(action);
+			}
+		}
+	}
+
+	/**
+	 * Adds "Set minimal size" item.
+	 */
+	private void contextMenu_setMinimalSize(IMenuManager manager) throws Exception {
+		if (isRoot() || JavaInfoUtils.hasTrueParameter(this, "SWT.isRoot")) {
+			ObjectInfoAction action = new ObjectInfoAction(this) {
+				@Override
+				protected void runEx() throws Exception {
+					Dimension preferredSize = getPreferredSize();
+					getTopBoundsSupport().setSize(preferredSize.width, preferredSize.height);
+				}
+			};
+			action.setText(ModelMessages.CompositeInfo_setMinimalSize);
+			manager.appendToGroup(IContextMenuConstants.GROUP_LAYOUT, action);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IThisMethodParameterEvaluator
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Object evaluateParameter(EvaluationContext context,
+			MethodDeclaration methodDeclaration,
+			String methodSignature,
+			SingleVariableDeclaration parameter,
+			int index) throws Exception {
+		if (ObjectUtils.equals(parameter.getName().getIdentifier(), "style")) {
+			return SWT.NONE;
+		}
+		return AstEvaluationEngine.UNKNOWN;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void refresh_dispose() throws Exception {
+		// inherit parent layout, if it is valid at all and valid time
+		processInitialLayout();
+		// call "super"
+		super.refresh_dispose();
+	}
+
+	@Override
+	protected void refresh_fetch() throws Exception {
+		m_clientAreaInsets2 = CoordinateUtils.getClientAreaInsets2(getObject());
+		super.refresh_fetch();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Properties
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final TabOrderProperty m_tabOrderProperty;
+
+	@Override
+	protected List<Property> getPropertyList() throws Exception {
+		List<Property> properties = super.getPropertyList();
+		if (hasLayout()) {
+			properties.add(m_tabOrderProperty);
+		}
+		return properties;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// TopBoundsSupport
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected TopBoundsSupport createTopBoundsSupport() {
+		// return implementation from eRCP or RCP bundles
+		return ExecutionUtils.runObject(new RunnableObjectEx<TopBoundsSupport>() {
+			@Override
+			public TopBoundsSupport runObject() throws Exception {
+				// prepare "impl" class
+				Class<?> implClass;
+				{
+					Bundle bundle = getDescription().getToolkit().getBundle();
+					String implClassName =
+							bundle.getSymbolicName() + ".model.widgets.CompositeTopBoundsSupport";
+					implClassName = StringUtils.replace(implClassName, ".wb.", ".wb.internal.");
+					implClass = bundle.loadClass(implClassName);
+				}
+				// create instance
+				Constructor<?> constructor = implClass.getConstructor(CompositeInfo.class);
+				return (TopBoundsSupport) constructor.newInstance(m_this);
+			}
+		});
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Layout
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final String KEY_LAYOUT_HAS = "layout.has";
+	private static final String KEY_LAYOUT_ALREADY_PROCESSED =
+			"default/parent layout already processed";
+	public static final String KEY_DONT_INHERIT_LAYOUT = "default/disable parent layout inheritance";
+	/**
+	 * We set this key during {@link #setLayout(LayoutInfo)} to prevent implicit {@link LayoutInfo}
+	 * activation during layout replacement.
+	 */
+	public static final String KEY_DONT_SET_IMPLICIT_LAYOUT = "KEY_DONT_SET_IMPLICIT_LAYOUT";
+
+	/**
+	 * Forcibly specifies that this <b>instance</b> of {@link CompositeInfo} has no {@link LayoutInfo}
+	 * .
+	 */
+	public final void markNoLayout() throws Exception {
+		putArbitraryValue(KEY_LAYOUT_HAS, Boolean.FALSE);
+		// remove possible LayoutInfo, it can be only implicit
+		for (LayoutInfo layout : getChildren(LayoutInfo.class)) {
+			Assert.instanceOf(ImplicitLayoutCreationSupport.class, layout.getCreationSupport());
+			removeChild(layout);
+		}
+	}
 
+	/**
+	 * @return <code>true</code> if this {@link CompositeInfo} can have {@link LayoutInfo}.
+	 */
+	public final boolean hasLayout() {
+		if (isPlaceholder()) {
+			return false;
+		}
+		// check, may be we have instance-level flag
+		{
+			Boolean hasLayout = (Boolean) getArbitraryValue(KEY_LAYOUT_HAS);
+			if (hasLayout != null) {
+				return hasLayout;
+			}
 		}
+		// OK, look into descriptions
+		return JavaInfoUtils.hasTrueParameter(this, KEY_LAYOUT_HAS);
+	}
+
+	private void initialize_createImplicitLayout() throws Exception {
+		if (hasLayout()) {
+			if (initialize_hasExplicitLayout()) {
+				return;
+			}
+			// prepare for creation
+			AstEditor editor = getEditor();
+			Object layout = ContainerSupport.getLayout(getObject());
+			// check if same implicit already exists
+			if (initialize_removeImplicitLayout(layout)) {
+				return;
+			}
+			// create layout model
+			LayoutInfo implicitLayout;
+			CreationSupport creationSupport = new ImplicitLayoutCreationSupport(this);
+			if (layout == null) {
+				ToolkitDescription toolkit = getDescription().getToolkit();
+				implicitLayout = new AbsoluteLayoutInfo(editor, toolkit, creationSupport);
+			} else {
+				Class<?> layoutClass = layout.getClass();
+				implicitLayout = checkLayoutPreferences(layoutClass, editor, creationSupport);
+
+			}
 
-      // set variable support
-      VariableSupport variableSupport = new ImplicitLayoutVariableSupport(implicitLayout);
-      implicitLayout.setVariableSupport(variableSupport);
-      // set association
-      implicitLayout.setAssociation(new ImplicitObjectAssociation(this));
-      // add as child
-      addChildFirst(implicitLayout);
-    }
-  }
-
-  /**
-   * @return <code>true</code> if explicit layout was already set, so we should not try to find
-   *         implicit layout anymore.
-   */
-  private boolean initialize_hasExplicitLayout() {
-    List<LayoutInfo> layouts = getChildren(LayoutInfo.class);
-    return !layouts.isEmpty()
-        && !(layouts.get(0).getCreationSupport() instanceof ImplicitLayoutCreationSupport);
-  }
-
-  /**
-   * We may call {@link #initialize_createImplicitLayout()} many times, may be after each
-   * {@link Statement}, so before adding new implicit layout we should remove existing one.
-   *
-   * @return <code>true</code> if {@link LayoutInfo} with same object already exists, so it was not
-   *         removed and no need for creating new implicit {@link LayoutInfo}.
-   */
-  private boolean initialize_removeImplicitLayout(Object layoutObject) throws Exception {
-    for (JavaInfo child : getChildrenJava()) {
-      if (child.getCreationSupport() instanceof ImplicitLayoutCreationSupport) {
-        if (child.getObject() != layoutObject) {
-          return true;
-        }
-        ImplicitLayoutCreationSupport creationSupport =
-            (ImplicitLayoutCreationSupport) child.getCreationSupport();
-        creationSupport.removeForever();
-        break;
-      }
-    }
-    return false;
-  }
-
-  /**
-   * Attempts to set absolute layout.
-   */
-  private void initialize_createAbsoluteLayout() throws Exception {
-    if (hasLayout()) {
-      MethodInvocation setLayoutInvocation =
-          getMethodInvocation("setLayout(org.eclipse.swt.widgets.Layout)");
-      if (setLayoutInvocation != null
-          && setLayoutInvocation.arguments().get(0) instanceof NullLiteral) {
-        AstEditor editor = getEditor();
-        ToolkitDescription toolkit = getDescription().getToolkit();
-        // creation support
-        CreationSupport creationSupport;
-        {
-          NullLiteral nullLiteral = (NullLiteral) setLayoutInvocation.arguments().get(0);
-          creationSupport = new AbsoluteLayoutCreationSupport(nullLiteral);
-        }
-        // create model
-        LayoutInfo absoluteLayout = new AbsoluteLayoutInfo(editor, toolkit, creationSupport);
-        absoluteLayout.setAssociation(new InvocationChildAssociation(setLayoutInvocation));
-        absoluteLayout.setObject(null);
-        addChild(absoluteLayout);
-      }
-    }
-  }
-
-  /**
-   * @return the current {@link LayoutInfo} for this composite. Can not return <code>null</code>.
-   *
-   * @throws IllegalStateException
-   *           if no {@link LayoutInfo} found.
-   */
-  public final LayoutInfo getLayout() {
-    Assert.isTrueException(hasLayout(), IExceptionConstants.NO_LAYOUT_EXPECTED, this);
-    // try to find layout
-    for (ObjectInfo child : getChildren()) {
-      if (child instanceof LayoutInfo) {
-        return (LayoutInfo) child;
-      }
-    }
-    // composite that has layout, should always have some layout model
-    throw new IllegalStateException(ModelMessages.CompositeInfo_shouldAlwaysHaveLayout);
-  }
-
-  /**
-   * Sets new {@link LayoutInfo}.
-   */
-  public final void setLayout(LayoutInfo newLayout) throws Exception {
-    putArbitraryValue(KEY_DONT_SET_IMPLICIT_LAYOUT, Boolean.TRUE);
-    startEdit();
-    try {
-      // remove old layout
-      {
-        LayoutInfo oldLayout = getLayout();
-        oldLayout.delete();
-      }
-      // prepare StatementGenerator
-      StatementGenerator statementGenerator;
-      if (JavaInfoUtils.hasTrueParameter(newLayout, "layout.setInBlock")) {
-        statementGenerator = BlockStatementGenerator.INSTANCE;
-      } else {
-        statementGenerator = PureFlatStatementGenerator.INSTANCE;
-      }
-      // set new layout
-      VariableSupport variableSupport =
-          new EmptyInvocationVariableSupport(newLayout, "%parent%.setLayout(%child%)", 0);
-      JavaInfoUtils.add(
-          newLayout,
-          variableSupport,
-          statementGenerator,
-          AssociationObjects.invocationChildNull(),
-          this,
-          null);
-      newLayout.onSet();
-    } finally {
-      endEdit();
-      putArbitraryValue(KEY_DONT_SET_IMPLICIT_LAYOUT, Boolean.FALSE);
-    }
-  }
-
-  /**
-   * Sets default {@link LayoutInfo} or inherits {@link LayoutInfo} of parent {@link CompositeInfo}.
-   */
-  private void processInitialLayout() throws Exception {
-    IPreferenceStore preferences = getDescription().getToolkit().getPreferences();
-    // check if processing required
-    {
-      boolean shouldBeProcessed = hasLayout()
-          && getArbitraryValue(JavaInfo.FLAG_MANUAL_COMPONENT) == Boolean.TRUE
-          && getArbitraryValue(KEY_LAYOUT_ALREADY_PROCESSED) == null
-          && getArbitraryValue(KEY_DONT_INHERIT_LAYOUT) == null;
-      if (!shouldBeProcessed) {
-        return;
-      }
-      // this is first, and last time when we should do processing
-      putArbitraryValue(KEY_LAYOUT_ALREADY_PROCESSED, Boolean.TRUE);
-    }
-    // check for inheritance from parent
-    if (preferences.getBoolean(IPreferenceConstants.P_LAYOUT_OF_PARENT)
-        && getParent() instanceof CompositeInfo) {
-      CompositeInfo parentComposite = (CompositeInfo) getParent();
-      // may be no layout
-      if (!parentComposite.hasLayout()) {
-        return;
-      }
-      // may be implicit
-      LayoutInfo parentLayout = parentComposite.getLayout();
-      if (parentLayout.getCreationSupport() instanceof IImplicitCreationSupport) {
-        return;
-      }
-      // prepare Layout copy
-      final LayoutInfo thisLayout;
-      {
-        Class<?> layoutClass = parentLayout.getDescription().getComponentClass();
-        if (layoutClass == null) {
-          thisLayout = AbsoluteLayoutInfo.createExplicit(this);
-        } else {
-          thisLayout = (LayoutInfo) JavaInfoUtils.createJavaInfo(
-              getEditor(),
-              layoutClass,
-              new ConstructorCreationSupport());
-        }
-      }
-      // we are in process of refresh(), set inherited layout later
-      ExecutionUtils.runLater(this, new RunnableEx() {
-        @Override
-        public void run() throws Exception {
-          setLayout(thisLayout);
-        }
-      });
-      // OK, stop here
-      return;
-    }
-    // check for default layout
-    {
-      String layoutId = preferences.getString(IPreferenceConstants.P_LAYOUT_DEFAULT);
-      LayoutDescription layoutDescription =
-          LayoutDescriptionHelper.get(getDescription().getToolkit(), layoutId);
-      if (layoutDescription != null) {
-        Class<?> layoutClass;
-        {
-          String layoutClassName = layoutDescription.getLayoutClassName();
-          ClassLoader editorLoader = EditorState.get(getEditor()).getEditorLoader();
-          layoutClass = editorLoader.loadClass(layoutClassName);
-        }
-        //
-        final LayoutInfo thisLayout = (LayoutInfo) JavaInfoUtils.createJavaInfo(
-            getEditor(),
-            layoutClass,
-            new ConstructorCreationSupport());
-        // we are in process of refresh(), set inherited layout later
-        ExecutionUtils.runLater(this, new RunnableEx() {
-          @Override
-          public void run() throws Exception {
-            setLayout(thisLayout);
-          }
-        });
-      }
-    }
-  }
-
-  /**
-   * @return <code>true</code> if need draw dots border for this composite.
-   */
-  public boolean shouldDrawDotsBorder() throws Exception {
-    // if has native border, no need to custom one
-    {
-      if (ControlSupport.isStyle(getObject(), SWT.BORDER)) {
-        return false;
-      }
-    }
-    // use script
-    String script = JavaInfoUtils.getParameter(this, "shouldDrawBorder");
-    if (StringUtils.isEmpty(script)) {
-      return false;
-    }
-    return (Boolean) JavaInfoUtils.executeScript(this, script);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Hierarchy
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean canBeRoot() {
-    return true;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Insets m_clientAreaInsets2;
-
-  @Override
-  public final List<ControlInfo> getChildrenControls() {
-    return getChildren(ControlInfo.class);
-  }
-
-  @Override
-  public final Insets getClientAreaInsets2() {
-    return m_clientAreaInsets2;
-  }
-
-  /**
-   * @return <code>true</code> if this {@link Composite} has {@link SWT#RIGHT_TO_LEFT} style.
-   */
-  @Override
-  public final boolean isRTL() {
-    return ContainerSupport.isRTL(getObject());
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Clipboard
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds commands for coping this {@link CompositeInfo}.
-   */
-  protected void clipboardCopy_addCommands(List<ClipboardCommand> commands) throws Exception {
-    if (hasLayout()) {
-      LayoutInfo layout = getLayout();
-      if (layout.getCreationSupport() instanceof IImplicitCreationSupport) {
-        // no need to set implicit layout
-      } else if (layout instanceof AbsoluteLayoutInfo) {
-        commands.add(new ComponentClipboardCommand<CompositeInfo>() {
-          private static final long serialVersionUID = 0L;
-
-          @Override
-          public void execute(CompositeInfo composite) throws Exception {
-            composite.addMethodInvocation("setLayout(org.eclipse.swt.widgets.Layout)", "null");
-          }
-        });
-      } else {
-        final JavaInfoMemento layoutMemento = JavaInfoMemento.createMemento(layout);
-        commands.add(new ComponentClipboardCommand<CompositeInfo>() {
-          private static final long serialVersionUID = 0L;
-
-          @Override
-          public void execute(CompositeInfo composite) throws Exception {
-            LayoutInfo newLayout = (LayoutInfo) layoutMemento.create(composite);
-            composite.setLayout(newLayout);
-            layoutMemento.apply();
-          }
-        });
-      }
-    }
-  }
-
-  /**
-   * Check that implicit layout is the same as the default layout, default layout should always take
-   * precedence over implicit layout. If the default layout AND the implicit layout is not allowed
-   * (via preference settings) then the absolute layout is used.
-   *
-   * @return Default/Implicit or Absolute Layout
-   * @throws Exception
-   */
-  public LayoutInfo getDefaultCompositeInfo() throws Exception {
-    LayoutInfo layoutInfo = null;
-    Class<?> preferenceDefaultlayoutClass = null;
-    IPreferenceStore preferences = getDescription().getToolkit().getPreferences();
-    String layoutId = preferences.getString(IPreferenceConstants.P_LAYOUT_DEFAULT);
-    CreationSupport creationSupport = new ImplicitLayoutCreationSupport(this);
-	if (layoutId != "") {
-		// handle the case that "Implicit" is specified in the preferences
-      //handle the case that another layout has been specified as default
-      LayoutDescription ldescription =
-          LayoutDescriptionHelper.get(getDescription().getToolkit(), layoutId);
-      if (ldescription != null) {
-        String layoutClassName = ldescription.getLayoutClassName();
-        ClassLoader editorLoader = EditorState.get(getEditor()).getEditorLoader();
-        preferenceDefaultlayoutClass = editorLoader.loadClass(layoutClassName);
-		if (layoutClassName != null && !InstanceScope.INSTANCE
-				.getNode(IEditorPreferenceConstants.P_AVAILABLE_LAYOUTS_NODE).getBoolean(layoutClassName, true)) {
-			return layoutInfo = AbsoluteLayoutInfo.createExplicit(this);
+			// set variable support
+			VariableSupport variableSupport = new ImplicitLayoutVariableSupport(implicitLayout);
+			implicitLayout.setVariableSupport(variableSupport);
+			// set association
+			implicitLayout.setAssociation(new ImplicitObjectAssociation(this));
+			// add as child
+			addChildFirst(implicitLayout);
+		}
+	}
+
+	/**
+	 * @return <code>true</code> if explicit layout was already set, so we should not try to find
+	 *         implicit layout anymore.
+	 */
+	private boolean initialize_hasExplicitLayout() {
+		List<LayoutInfo> layouts = getChildren(LayoutInfo.class);
+		return !layouts.isEmpty()
+				&& !(layouts.get(0).getCreationSupport() instanceof ImplicitLayoutCreationSupport);
+	}
+
+	/**
+	 * We may call {@link #initialize_createImplicitLayout()} many times, may be after each
+	 * {@link Statement}, so before adding new implicit layout we should remove existing one.
+	 *
+	 * @return <code>true</code> if {@link LayoutInfo} with same object already exists, so it was not
+	 *         removed and no need for creating new implicit {@link LayoutInfo}.
+	 */
+	private boolean initialize_removeImplicitLayout(Object layoutObject) throws Exception {
+		for (JavaInfo child : getChildrenJava()) {
+			if (child.getCreationSupport() instanceof ImplicitLayoutCreationSupport) {
+				if (child.getObject() != layoutObject) {
+					return true;
+				}
+				ImplicitLayoutCreationSupport creationSupport =
+						(ImplicitLayoutCreationSupport) child.getCreationSupport();
+				creationSupport.removeForever();
+				break;
+			}
+		}
+		return false;
+	}
+
+	/**
+	 * Attempts to set absolute layout.
+	 */
+	private void initialize_createAbsoluteLayout() throws Exception {
+		if (hasLayout()) {
+			MethodInvocation setLayoutInvocation =
+					getMethodInvocation("setLayout(org.eclipse.swt.widgets.Layout)");
+			if (setLayoutInvocation != null
+					&& setLayoutInvocation.arguments().get(0) instanceof NullLiteral) {
+				AstEditor editor = getEditor();
+				ToolkitDescription toolkit = getDescription().getToolkit();
+				// creation support
+				CreationSupport creationSupport;
+				{
+					NullLiteral nullLiteral = (NullLiteral) setLayoutInvocation.arguments().get(0);
+					creationSupport = new AbsoluteLayoutCreationSupport(nullLiteral);
+				}
+				// create model
+				LayoutInfo absoluteLayout = new AbsoluteLayoutInfo(editor, toolkit, creationSupport);
+				absoluteLayout.setAssociation(new InvocationChildAssociation(setLayoutInvocation));
+				absoluteLayout.setObject(null);
+				addChild(absoluteLayout);
+			}
+		}
+	}
+
+	/**
+	 * @return the current {@link LayoutInfo} for this composite. Can not return <code>null</code>.
+	 *
+	 * @throws IllegalStateException
+	 *           if no {@link LayoutInfo} found.
+	 */
+	public final LayoutInfo getLayout() {
+		Assert.isTrueException(hasLayout(), IExceptionConstants.NO_LAYOUT_EXPECTED, this);
+		// try to find layout
+		for (ObjectInfo child : getChildren()) {
+			if (child instanceof LayoutInfo) {
+				return (LayoutInfo) child;
+			}
 		}
+		// composite that has layout, should always have some layout model
+		throw new IllegalStateException(ModelMessages.CompositeInfo_shouldAlwaysHaveLayout);
+	}
+
+	/**
+	 * Sets new {@link LayoutInfo}.
+	 */
+	public final void setLayout(LayoutInfo newLayout) throws Exception {
+		putArbitraryValue(KEY_DONT_SET_IMPLICIT_LAYOUT, Boolean.TRUE);
+		startEdit();
+		try {
+			// remove old layout
+			{
+				LayoutInfo oldLayout = getLayout();
+				oldLayout.delete();
+			}
+			// prepare StatementGenerator
+			StatementGenerator statementGenerator;
+			if (JavaInfoUtils.hasTrueParameter(newLayout, "layout.setInBlock")) {
+				statementGenerator = BlockStatementGenerator.INSTANCE;
+			} else {
+				statementGenerator = PureFlatStatementGenerator.INSTANCE;
+			}
+			// set new layout
+			VariableSupport variableSupport =
+					new EmptyInvocationVariableSupport(newLayout, "%parent%.setLayout(%child%)", 0);
+			JavaInfoUtils.add(
+					newLayout,
+					variableSupport,
+					statementGenerator,
+					AssociationObjects.invocationChildNull(),
+					this,
+					null);
+			newLayout.onSet();
+		} finally {
+			endEdit();
+			putArbitraryValue(KEY_DONT_SET_IMPLICIT_LAYOUT, Boolean.FALSE);
+		}
+	}
+
+	/**
+	 * Sets default {@link LayoutInfo} or inherits {@link LayoutInfo} of parent {@link CompositeInfo}.
+	 */
+	private void processInitialLayout() throws Exception {
+		IPreferenceStore preferences = getDescription().getToolkit().getPreferences();
+		// check if processing required
+		{
+			boolean shouldBeProcessed = hasLayout()
+					&& getArbitraryValue(JavaInfo.FLAG_MANUAL_COMPONENT) == Boolean.TRUE
+					&& getArbitraryValue(KEY_LAYOUT_ALREADY_PROCESSED) == null
+					&& getArbitraryValue(KEY_DONT_INHERIT_LAYOUT) == null;
+			if (!shouldBeProcessed) {
+				return;
+			}
+			// this is first, and last time when we should do processing
+			putArbitraryValue(KEY_LAYOUT_ALREADY_PROCESSED, Boolean.TRUE);
+		}
+		// check for inheritance from parent
+		if (preferences.getBoolean(IPreferenceConstants.P_LAYOUT_OF_PARENT)
+				&& getParent() instanceof CompositeInfo) {
+			CompositeInfo parentComposite = (CompositeInfo) getParent();
+			// may be no layout
+			if (!parentComposite.hasLayout()) {
+				return;
+			}
+			// may be implicit
+			LayoutInfo parentLayout = parentComposite.getLayout();
+			if (parentLayout.getCreationSupport() instanceof IImplicitCreationSupport) {
+				return;
+			}
+			// prepare Layout copy
+			final LayoutInfo thisLayout;
+			{
+				Class<?> layoutClass = parentLayout.getDescription().getComponentClass();
+				if (layoutClass == null) {
+					thisLayout = AbsoluteLayoutInfo.createExplicit(this);
+				} else {
+					thisLayout = (LayoutInfo) JavaInfoUtils.createJavaInfo(
+							getEditor(),
+							layoutClass,
+							new ConstructorCreationSupport());
+				}
+			}
+			// we are in process of refresh(), set inherited layout later
+			ExecutionUtils.runLater(this, new RunnableEx() {
+				@Override
+				public void run() throws Exception {
+					setLayout(thisLayout);
+				}
+			});
+			// OK, stop here
+			return;
+		}
+		// check for default layout
+		{
+			String layoutId = preferences.getString(IPreferenceConstants.P_LAYOUT_DEFAULT);
+			LayoutDescription layoutDescription =
+					LayoutDescriptionHelper.get(getDescription().getToolkit(), layoutId);
+			if (layoutDescription != null) {
+				Class<?> layoutClass;
+				{
+					String layoutClassName = layoutDescription.getLayoutClassName();
+					ClassLoader editorLoader = EditorState.get(getEditor()).getEditorLoader();
+					layoutClass = editorLoader.loadClass(layoutClassName);
+				}
+				//
+				final LayoutInfo thisLayout = (LayoutInfo) JavaInfoUtils.createJavaInfo(
+						getEditor(),
+						layoutClass,
+						new ConstructorCreationSupport());
+				// we are in process of refresh(), set inherited layout later
+				ExecutionUtils.runLater(this, new RunnableEx() {
+					@Override
+					public void run() throws Exception {
+						setLayout(thisLayout);
+					}
+				});
+			}
+		}
+	}
+
+	/**
+	 * @return <code>true</code> if need draw dots border for this composite.
+	 */
+	public boolean shouldDrawDotsBorder() throws Exception {
+		// if has native border, no need to custom one
+		{
+			if (ControlSupport.isStyle(getObject(), SWT.BORDER)) {
+				return false;
+			}
+		}
+		// use script
+		String script = JavaInfoUtils.getParameter(this, "shouldDrawBorder");
+		if (StringUtils.isEmpty(script)) {
+			return false;
+		}
+		return (Boolean) JavaInfoUtils.executeScript(this, script);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Hierarchy
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean canBeRoot() {
+		return true;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Insets m_clientAreaInsets2;
+
+	@Override
+	public final List<ControlInfo> getChildrenControls() {
+		return getChildren(ControlInfo.class);
+	}
+
+	@Override
+	public final Insets getClientAreaInsets2() {
+		return m_clientAreaInsets2;
+	}
+
+	/**
+	 * @return <code>true</code> if this {@link Composite} has {@link SWT#RIGHT_TO_LEFT} style.
+	 */
+	@Override
+	public final boolean isRTL() {
+		return ContainerSupport.isRTL(getObject());
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Clipboard
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds commands for coping this {@link CompositeInfo}.
+	 */
+	protected void clipboardCopy_addCommands(List<ClipboardCommand> commands) throws Exception {
+		if (hasLayout()) {
+			LayoutInfo layout = getLayout();
+			if (layout.getCreationSupport() instanceof IImplicitCreationSupport) {
+				// no need to set implicit layout
+			} else if (layout instanceof AbsoluteLayoutInfo) {
+				commands.add(new ComponentClipboardCommand<CompositeInfo>() {
+					private static final long serialVersionUID = 0L;
+
+					@Override
+					public void execute(CompositeInfo composite) throws Exception {
+						composite.addMethodInvocation("setLayout(org.eclipse.swt.widgets.Layout)", "null");
+					}
+				});
+			} else {
+				final JavaInfoMemento layoutMemento = JavaInfoMemento.createMemento(layout);
+				commands.add(new ComponentClipboardCommand<CompositeInfo>() {
+					private static final long serialVersionUID = 0L;
+
+					@Override
+					public void execute(CompositeInfo composite) throws Exception {
+						LayoutInfo newLayout = (LayoutInfo) layoutMemento.create(composite);
+						composite.setLayout(newLayout);
+						layoutMemento.apply();
+					}
+				});
+			}
+		}
+	}
+
+	/**
+	 * Check that implicit layout is the same as the default layout, default layout should always take
+	 * precedence over implicit layout. If the default layout AND the implicit layout is not allowed
+	 * (via preference settings) then the absolute layout is used.
+	 *
+	 * @return Default/Implicit or Absolute Layout
+	 * @throws Exception
+	 */
+	public LayoutInfo getDefaultCompositeInfo() throws Exception {
+		LayoutInfo layoutInfo = null;
+		Class<?> preferenceDefaultlayoutClass = null;
+		IPreferenceStore preferences = getDescription().getToolkit().getPreferences();
+		String layoutId = preferences.getString(IPreferenceConstants.P_LAYOUT_DEFAULT);
+		CreationSupport creationSupport = new ImplicitLayoutCreationSupport(this);
+		if (layoutId != "") {
+			// handle the case that "Implicit" is specified in the preferences
+			//handle the case that another layout has been specified as default
+			LayoutDescription ldescription =
+					LayoutDescriptionHelper.get(getDescription().getToolkit(), layoutId);
+			if (ldescription != null) {
+				String layoutClassName = ldescription.getLayoutClassName();
+				ClassLoader editorLoader = EditorState.get(getEditor()).getEditorLoader();
+				preferenceDefaultlayoutClass = editorLoader.loadClass(layoutClassName);
+				if (layoutClassName != null && !InstanceScope.INSTANCE
+						.getNode(IEditorPreferenceConstants.P_AVAILABLE_LAYOUTS_NODE).getBoolean(layoutClassName, true)) {
+					return layoutInfo = AbsoluteLayoutInfo.createExplicit(this);
+				}
 
-        layoutInfo = (LayoutInfo) JavaInfoUtils.createJavaInfo(
-            getEditor(),
-            preferenceDefaultlayoutClass,
-				creationSupport);
-      }
-    }
-	if (layoutId == "") {
-      //Last resort is to load the Absolute layout
-		layoutInfo = AbsoluteLayoutInfo.createExplicit(this);
+				layoutInfo = (LayoutInfo) JavaInfoUtils.createJavaInfo(
+						getEditor(),
+						preferenceDefaultlayoutClass,
+						creationSupport);
+			}
+		}
+		if (layoutId == "") {
+			//Last resort is to load the Absolute layout
+			layoutInfo = AbsoluteLayoutInfo.createExplicit(this);
 
-    }
+		}
 
-    return layoutInfo;
-  }
+		return layoutInfo;
+	}
 
 	public LayoutInfo checkLayoutPreferences(Class<?> layoutInf, AstEditor editor,
 			CreationSupport creationSupport) {
 
 		if (layoutInf != null) {
 			if (isLayout(layoutInf)) {
-			if (!InstanceScope.INSTANCE.getNode(IEditorPreferenceConstants.P_AVAILABLE_LAYOUTS_NODE)
-					.getBoolean(layoutInf.getCanonicalName(), true)) {
-				try {
-					return AbsoluteLayoutInfo.createExplicit(this);
-				} catch (Exception e) {
-
-					e.printStackTrace();
+				if (!InstanceScope.INSTANCE.getNode(IEditorPreferenceConstants.P_AVAILABLE_LAYOUTS_NODE)
+						.getBoolean(layoutInf.getCanonicalName(), true)) {
+					try {
+						return AbsoluteLayoutInfo.createExplicit(this);
+					} catch (Exception e) {
+
+						e.printStackTrace();
+					}
 				}
 			}
 		}
-		}
 		try {
 			return (LayoutInfo) JavaInfoUtils.createJavaInfo(editor, layoutInf, creationSupport);
 		} catch (Exception e) {
 
 			e.printStackTrace();
-			}
-			return null;
 		}
-
-		private boolean isLayout(Class<?> layoutClass) {
-			List<LayoutDescription> descriptions = LayoutDescriptionHelper.get(getDescription().getToolkit());
-			for (LayoutDescription description : descriptions) {
-				if (description.getLayoutClassName().equals(layoutClass.getCanonicalName())) {
-					return true;
-				}
+		return null;
+	}
+
+	private boolean isLayout(Class<?> layoutClass) {
+		List<LayoutDescription> descriptions = LayoutDescriptionHelper.get(getDescription().getToolkit());
+		for (LayoutDescription description : descriptions) {
+			if (description.getLayoutClassName().equals(layoutClass.getCanonicalName())) {
+				return true;
 			}
-
-			return false;
 		}
 
+		return false;
+	}
+
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/CompositeTopBoundsSupport.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/CompositeTopBoundsSupport.java
index 2ece689eb..6f4b90aca 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/CompositeTopBoundsSupport.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/CompositeTopBoundsSupport.java
@@ -41,204 +41,204 @@
  * @coverage swt.model.widgets
  */
 public abstract class CompositeTopBoundsSupport extends TopBoundsSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public CompositeTopBoundsSupport(CompositeInfo composite) {
-    super(composite);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public CompositeTopBoundsSupport(CompositeInfo composite) {
+		super(composite);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // TopBoundsSupport
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void apply() throws Exception {
-    // if one these methods is present, we already set size during AST evaluation
-    if (hasMethodInvocations(new String[]{
-        "setSize(int,int)",
-        "setSize(org.eclipse.swt.graphics.Point)",
-        "pack()"})) {
-      ContainerSupport.layout(m_component.getObject());
-      return;
-    }
-    // set size from resource properties (or default)
-    {
-      Dimension size = getResourceSize();
-      ControlSupport.setSize(m_component.getObject(), size.width, size.height);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// TopBoundsSupport
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void apply() throws Exception {
+		// if one these methods is present, we already set size during AST evaluation
+		if (hasMethodInvocations(new String[]{
+				"setSize(int,int)",
+				"setSize(org.eclipse.swt.graphics.Point)",
+		"pack()"})) {
+			ContainerSupport.layout(m_component.getObject());
+			return;
+		}
+		// set size from resource properties (or default)
+		{
+			Dimension size = getResourceSize();
+			ControlSupport.setSize(m_component.getObject(), size.width, size.height);
+		}
+	}
 
-  @Override
-  public void setSize(int width, int height) throws Exception {
-    // remember size in resource properties
-    setResourceSize(width, height);
-    // check for: setSize(org.eclipse.swt.graphics.Point)
-    if (setSizePoint("setSize", width, height)) {
-      return;
-    }
-    // prepare source elements
-    String widthSource = IntegerConverter.INSTANCE.toJavaSource(m_component, width);
-    String heightSource = IntegerConverter.INSTANCE.toJavaSource(m_component, height);
-    // check for: setSize(int,int)
-    {
-      MethodInvocation invocation = m_component.getMethodInvocation("setSize(int,int)");
-      if (invocation != null) {
-        AstEditor editor = m_component.getEditor();
-        List<Expression> arguments = DomGenerics.arguments(invocation);
-        editor.replaceExpression(arguments.get(0), widthSource);
-        editor.replaceExpression(arguments.get(1), heightSource);
-        return;
-      }
-    }
-    // always set size for Shell
-    if (m_component instanceof ShellInfo) {
-      m_component.addMethodInvocation("setSize(int,int)", widthSource + ", " + heightSource);
-    }
-  }
+	@Override
+	public void setSize(int width, int height) throws Exception {
+		// remember size in resource properties
+		setResourceSize(width, height);
+		// check for: setSize(org.eclipse.swt.graphics.Point)
+		if (setSizePoint("setSize", width, height)) {
+			return;
+		}
+		// prepare source elements
+		String widthSource = IntegerConverter.INSTANCE.toJavaSource(m_component, width);
+		String heightSource = IntegerConverter.INSTANCE.toJavaSource(m_component, height);
+		// check for: setSize(int,int)
+		{
+			MethodInvocation invocation = m_component.getMethodInvocation("setSize(int,int)");
+			if (invocation != null) {
+				AstEditor editor = m_component.getEditor();
+				List<Expression> arguments = DomGenerics.arguments(invocation);
+				editor.replaceExpression(arguments.get(0), widthSource);
+				editor.replaceExpression(arguments.get(1), heightSource);
+				return;
+			}
+		}
+		// always set size for Shell
+		if (m_component instanceof ShellInfo) {
+			m_component.addMethodInvocation("setSize(int,int)", widthSource + ", " + heightSource);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Show
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public boolean show() throws Exception {
-    Object control = m_component.getObject();
-    show(m_component, control);
-    return true;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Show
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public boolean show() throws Exception {
+		Object control = m_component.getObject();
+		show(m_component, control);
+		return true;
+	}
 
-  /**
-   * Shows given control for testing/preview.
-   */
-  public static void show(AbstractComponentInfo component, Object control) throws Exception {
-    showBefore();
-    try {
-      show0(control);
-    } finally {
-      showAfter();
-    }
-  }
+	/**
+	 * Shows given control for testing/preview.
+	 */
+	public static void show(AbstractComponentInfo component, Object control) throws Exception {
+		showBefore();
+		try {
+			show0(control);
+		} finally {
+			showAfter();
+		}
+	}
 
-  /**
-   * Prepares environment for showing control.
-   */
-  private static void showBefore() throws Exception {
-    Shell eclipseShell = DesignerPlugin.getShell();
-    // disable redraw to prevent outstanding paints after preview window closed and disposed
-    if (EnvironmentUtils.IS_MAC) {
-      eclipseShell.redraw();
-      eclipseShell.update();
-      eclipseShell.setRedraw(false);
-    }
-    // disable Shell to prevent its activation before closing preview
-    eclipseShell.setEnabled(false);
-  }
+	/**
+	 * Prepares environment for showing control.
+	 */
+	private static void showBefore() throws Exception {
+		Shell eclipseShell = DesignerPlugin.getShell();
+		// disable redraw to prevent outstanding paints after preview window closed and disposed
+		if (EnvironmentUtils.IS_MAC) {
+			eclipseShell.redraw();
+			eclipseShell.update();
+			eclipseShell.setRedraw(false);
+		}
+		// disable Shell to prevent its activation before closing preview
+		eclipseShell.setEnabled(false);
+	}
 
-  /**
-   * Updates environment after showing control.
-   */
-  private static void showAfter() throws Exception {
-    Shell eclipseShell = DesignerPlugin.getShell();
-    if (EnvironmentUtils.IS_MAC) {
-      eclipseShell.setRedraw(true);
-    }
-    eclipseShell.setEnabled(true);
-    eclipseShell.forceActive();
-  }
+	/**
+	 * Updates environment after showing control.
+	 */
+	private static void showAfter() throws Exception {
+		Shell eclipseShell = DesignerPlugin.getShell();
+		if (EnvironmentUtils.IS_MAC) {
+			eclipseShell.setRedraw(true);
+		}
+		eclipseShell.setEnabled(true);
+		eclipseShell.forceActive();
+	}
 
-  /**
-   * Shows given control for testing/preview, raw.
-   */
-  private static void show0(Object control) throws Exception {
-    final Object shell = ControlSupport.getShell(control);
-    // handle wrapper
-    if (control != shell) {
-      ContainerSupport.setShellText(shell, ModelMessages.CompositeTopBoundsSupport_wrapperShellText);
-      ContainerSupport.setFillLayout(shell);
-      org.eclipse.draw2d.geometry.Rectangle controlBounds = ControlSupport.getBounds(control);
-      org.eclipse.draw2d.geometry.Rectangle shellBounds =
-          ContainerSupport.computeTrim(shell, 0, 0, controlBounds.width, controlBounds.height);
-      ControlSupport.setSize(shell, shellBounds.width, shellBounds.height);
-      ContainerSupport.layout(shell);
-    }
-    // close preview by pressing ESC key
-    Runnable clearESC = closeOnESC(shell);
-    // set location
-    {
-      Rectangle monitorClientArea = DesignerPlugin.getShell().getMonitor().getClientArea();
-      // center on primary Monitor
-      int x;
-      int y;
-      {
-        org.eclipse.draw2d.geometry.Rectangle shellBounds = ControlSupport.getBounds(shell);
-        x = monitorClientArea.x + (monitorClientArea.width - shellBounds.width) / 2;
-        y = monitorClientArea.y + (monitorClientArea.height - shellBounds.height) / 2;
-      }
-      // ensure that top-left corner is visible
-      x = Math.max(x, monitorClientArea.x + 10);
-      y = Math.max(y, monitorClientArea.y + 10);
-      // do set location
-      ControlSupport.setLocation(shell, x, y);
-    }
-    // show Shell in modal state
-    ContainerSupport.showShell(shell);
-    clearESC.run();
-  }
+	/**
+	 * Shows given control for testing/preview, raw.
+	 */
+	private static void show0(Object control) throws Exception {
+		final Object shell = ControlSupport.getShell(control);
+		// handle wrapper
+		if (control != shell) {
+			ContainerSupport.setShellText(shell, ModelMessages.CompositeTopBoundsSupport_wrapperShellText);
+			ContainerSupport.setFillLayout(shell);
+			org.eclipse.draw2d.geometry.Rectangle controlBounds = ControlSupport.getBounds(control);
+			org.eclipse.draw2d.geometry.Rectangle shellBounds =
+					ContainerSupport.computeTrim(shell, 0, 0, controlBounds.width, controlBounds.height);
+			ControlSupport.setSize(shell, shellBounds.width, shellBounds.height);
+			ContainerSupport.layout(shell);
+		}
+		// close preview by pressing ESC key
+		Runnable clearESC = closeOnESC(shell);
+		// set location
+		{
+			Rectangle monitorClientArea = DesignerPlugin.getShell().getMonitor().getClientArea();
+			// center on primary Monitor
+			int x;
+			int y;
+			{
+				org.eclipse.draw2d.geometry.Rectangle shellBounds = ControlSupport.getBounds(shell);
+				x = monitorClientArea.x + (monitorClientArea.width - shellBounds.width) / 2;
+				y = monitorClientArea.y + (monitorClientArea.height - shellBounds.height) / 2;
+			}
+			// ensure that top-left corner is visible
+			x = Math.max(x, monitorClientArea.x + 10);
+			y = Math.max(y, monitorClientArea.y + 10);
+			// do set location
+			ControlSupport.setLocation(shell, x, y);
+		}
+		// show Shell in modal state
+		ContainerSupport.showShell(shell);
+		clearESC.run();
+	}
 
-  /**
-   * Add the display filter which closes preview by pressing ESC key.
-   */
-  private static Runnable closeOnESC(final Object shell) {
-    final Display display = DesignerPlugin.getStandardDisplay();
-    final Listener listener = new Listener() {
-      @Override
-      public void handleEvent(Event event) {
-        if (event.keyCode == SWT.ESC) {
-          ContainerSupport.closeShell(shell);
-          event.doit = false;
-        }
-      }
-    };
-    // add filter
-    display.addFilter(SWT.KeyDown, listener);
-    // continuation
-    return new Runnable() {
-      @Override
-      public void run() {
-        display.removeFilter(SWT.KeyDown, listener);
-      }
-    };
-  }
+	/**
+	 * Add the display filter which closes preview by pressing ESC key.
+	 */
+	private static Runnable closeOnESC(final Object shell) {
+		final Display display = DesignerPlugin.getStandardDisplay();
+		final Listener listener = new Listener() {
+			@Override
+			public void handleEvent(Event event) {
+				if (event.keyCode == SWT.ESC) {
+					ContainerSupport.closeShell(shell);
+					event.doit = false;
+				}
+			}
+		};
+		// add filter
+		display.addFilter(SWT.KeyDown, listener);
+		// continuation
+		return new Runnable() {
+			@Override
+			public void run() {
+				display.removeFilter(SWT.KeyDown, listener);
+			}
+		};
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Changes {@link org.eclipse.swt.graphics.Point} argument of given method.
-   *
-   * @return <code>true</code> if method was found and change done.
-   */
-  protected final boolean setSizePoint(String methodName, int width, int height) throws Exception {
-    MethodInvocation invocation =
-        m_component.getMethodInvocation(methodName + "(org.eclipse.swt.graphics.Point)");
-    if (invocation != null) {
-      AstEditor editor = m_component.getEditor();
-      Expression dimensionExpression = (Expression) invocation.arguments().get(0);
-      editor.replaceExpression(dimensionExpression, "new org.eclipse.swt.graphics.Point("
-          + width
-          + ", "
-          + height
-          + ")");
-      return true;
-    }
-    // not found
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Changes {@link org.eclipse.swt.graphics.Point} argument of given method.
+	 *
+	 * @return <code>true</code> if method was found and change done.
+	 */
+	protected final boolean setSizePoint(String methodName, int width, int height) throws Exception {
+		MethodInvocation invocation =
+				m_component.getMethodInvocation(methodName + "(org.eclipse.swt.graphics.Point)");
+		if (invocation != null) {
+			AstEditor editor = m_component.getEditor();
+			Expression dimensionExpression = (Expression) invocation.arguments().get(0);
+			editor.replaceExpression(dimensionExpression, "new org.eclipse.swt.graphics.Point("
+					+ width
+					+ ", "
+					+ height
+					+ ")");
+			return true;
+		}
+		// not found
+		return false;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/ControlInfo.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/ControlInfo.java
index 0847980c0..dd6b6690a 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/ControlInfo.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/ControlInfo.java
@@ -47,252 +47,252 @@
  * @coverage swt.model.widgets
  */
 public class ControlInfo extends WidgetInfo implements IControlInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ControlInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ControlInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Initializing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void initialize() throws Exception {
-    super.initialize();
-    addBroadcastListener(new ObjectEventListener() {
-      @Override
-      public void addContextMenu(List<? extends ObjectInfo> objects,
-          ObjectInfo object,
-          IMenuManager manager) throws Exception {
-        if (object == ControlInfo.this) {
-          ExposeComponentSupport.contribute(
-              ControlInfo.this,
-              manager,
-              ModelMessages.ControlInfo_exposeText);
-          MorphingSupport.contribute("org.eclipse.swt.widgets.Control", ControlInfo.this, manager);
-          FactoryActionsSupport.contribute(ControlInfo.this, manager);
-          RenameConvertSupport.contribute(objects, manager);
-        }
-      }
-    });
-    StylePropertyEditor.configureContributeActions(this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Initializing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void initialize() throws Exception {
+		super.initialize();
+		addBroadcastListener(new ObjectEventListener() {
+			@Override
+			public void addContextMenu(List<? extends ObjectInfo> objects,
+					ObjectInfo object,
+					IMenuManager manager) throws Exception {
+				if (object == ControlInfo.this) {
+					ExposeComponentSupport.contribute(
+							ControlInfo.this,
+							manager,
+							ModelMessages.ControlInfo_exposeText);
+					MorphingSupport.contribute("org.eclipse.swt.widgets.Control", ControlInfo.this, manager);
+					FactoryActionsSupport.contribute(ControlInfo.this, manager);
+					RenameConvertSupport.contribute(objects, manager);
+				}
+			}
+		});
+		StylePropertyEditor.configureContributeActions(this);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Hierarchy
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the result of {@link #getParent()} casted to the {@link AbstractComponentInfo}.
-   */
-  protected final AbstractComponentInfo getParentComponent() {
-    return (AbstractComponentInfo) getParent();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Hierarchy
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the result of {@link #getParent()} casted to the {@link AbstractComponentInfo}.
+	 */
+	protected final AbstractComponentInfo getParentComponent() {
+		return (AbstractComponentInfo) getParent();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void refresh_dispose() throws Exception {
-    if (isRoot()) {
-      ControlSupport.dispose(getObject());
-    }
-    // call "super"
-    super.refresh_dispose();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void refresh_dispose() throws Exception {
+		if (isRoot()) {
+			ControlSupport.dispose(getObject());
+		}
+		// call "super"
+		super.refresh_dispose();
+	}
 
-  @Override
-  protected void refresh_afterCreate() throws Exception {
-    // preferred size, should be here, because "super" applies "top bounds"
-    setPreferredSize(ControlSupport.getPreferredSize(getObject()));
-    // call "super"
-    super.refresh_afterCreate();
-  }
+	@Override
+	protected void refresh_afterCreate() throws Exception {
+		// preferred size, should be here, because "super" applies "top bounds"
+		setPreferredSize(ControlSupport.getPreferredSize(getObject()));
+		// call "super"
+		super.refresh_afterCreate();
+	}
 
-  @Override
-  protected void refresh_fetch() throws Exception {
-    refresh_fetch(this, new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        ControlInfo.super.refresh_fetch();
-      }
-    });
-  }
+	@Override
+	protected void refresh_fetch() throws Exception {
+		refresh_fetch(this, new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				ControlInfo.super.refresh_fetch();
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // "Live" support
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected final Image getLiveImage() {
-    return getLiveComponentsManager().getImage();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// "Live" support
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected final Image getLiveImage() {
+		return getLiveComponentsManager().getImage();
+	}
 
-  @Override
-  protected final int getLiveBaseline() {
-    return getLiveComponentsManager().getBaseline();
-  }
+	@Override
+	protected final int getLiveBaseline() {
+		return getLiveComponentsManager().getBaseline();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @see #refresh_fetch(AbstractComponentInfo, Object, RunnableEx).
-   */
-  public static void refresh_fetch(AbstractComponentInfo component, RunnableEx superRefreshFetch)
-      throws Exception {
-    Object control = component.getComponentObject();
-    refresh_fetch(component, control, superRefreshFetch);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @see #refresh_fetch(AbstractComponentInfo, Object, RunnableEx).
+	 */
+	public static void refresh_fetch(AbstractComponentInfo component, RunnableEx superRefreshFetch)
+			throws Exception {
+		Object control = component.getComponentObject();
+		refresh_fetch(component, control, superRefreshFetch);
+	}
 
-  /**
-   * Performs {@link ControlInfo#refresh_fetch()} operation, but separated from {@link ControlInfo}
-   * class.<br>
-   * We need such separate method because there {@link AbstractComponentInfo}'s that <em>have</em>
-   * <code>Control</code> , but are not <code>Control</code> themselves. For example - Dialog,
-   * PreferncePage, ViewPart, etc.
-   *
-   * @param component
-   *          the {@link AbstractComponentInfo} that has <code>Control</code> as object.
-   * @param control
-   *          the component {@link Object} of given {@link AbstractComponentInfo}.
-   * @param superRefreshFetch
-   *          the {@link RunnableEx} to invoke "super" of refresh_fetch(), so process children.
-   */
-  public static void refresh_fetch(AbstractComponentInfo component,
-      Object control,
-      RunnableEx superRefreshFetch) throws Exception {
-    // create shot's for all controls
-    boolean wasOSSupportError = false;
-    try {
-      if (component.isRoot()) {
-        ToolkitSupport.beginShot(control);
-        createShotImages(component, control);
-      }
-      // prepare model bounds
-      Rectangle modelBounds;
-      {
-        modelBounds = ControlSupport.getBounds(control);
-        component.setModelBounds(modelBounds);
-      }
-      // prepare shot bounds
-      {
-        Rectangle bounds = modelBounds.getCopy();
-        // convert into "shot"
-        if (component.getParent() instanceof AbstractComponentInfo) {
-          AbstractComponentInfo parent = (AbstractComponentInfo) component.getParent();
-          Object parentControl = parent.getComponentObject();
-          if (control != parentControl) {
-            Point controlLocation = CoordinateUtils.getDisplayLocation(control);
-            Point parentLocation = CoordinateUtils.getDisplayLocation(parentControl);
-            bounds.x = controlLocation.x - parentLocation.x;
-            bounds.y = controlLocation.y - parentLocation.y;
-            // tweak for RIGHT_TO_LEFT
-            if (ContainerSupport.isComposite(parentControl)
-                && ContainerSupport.isRTL(parentControl)) {
-              if (ContainerSupport.isRTL(ControlSupport.getParent(parentControl))) {
-                bounds.x += ControlSupport.getBounds(parentControl).width;
-              }
-              bounds.x -= bounds.width;
-            }
-          } else {
-            bounds.x = 0;
-            bounds.y = 0;
-          }
-        }
-        // remember
-        component.setBounds(bounds);
-      }
-      // prepare insets
-      if (ContainerSupport.isComposite(control)) {
-        component.setClientAreaInsets(CoordinateUtils.getClientAreaInsets(control));
-      }
-      // continue, process children
-      if (superRefreshFetch != null) {
-        superRefreshFetch.run();
-      }
-    } catch (OSSupportError e) {
-      // prevent further invoking of 'endShot()'.
-      wasOSSupportError = true;
-      throw e;
-    } finally {
-      // finalize screen shot process
-      if (component.isRoot() && !wasOSSupportError) {
-        ToolkitSupport.endShot(control);
-      }
-    }
-  }
+	/**
+	 * Performs {@link ControlInfo#refresh_fetch()} operation, but separated from {@link ControlInfo}
+	 * class.<br>
+	 * We need such separate method because there {@link AbstractComponentInfo}'s that <em>have</em>
+	 * <code>Control</code> , but are not <code>Control</code> themselves. For example - Dialog,
+	 * PreferncePage, ViewPart, etc.
+	 *
+	 * @param component
+	 *          the {@link AbstractComponentInfo} that has <code>Control</code> as object.
+	 * @param control
+	 *          the component {@link Object} of given {@link AbstractComponentInfo}.
+	 * @param superRefreshFetch
+	 *          the {@link RunnableEx} to invoke "super" of refresh_fetch(), so process children.
+	 */
+	public static void refresh_fetch(AbstractComponentInfo component,
+			Object control,
+			RunnableEx superRefreshFetch) throws Exception {
+		// create shot's for all controls
+		boolean wasOSSupportError = false;
+		try {
+			if (component.isRoot()) {
+				ToolkitSupport.beginShot(control);
+				createShotImages(component, control);
+			}
+			// prepare model bounds
+			Rectangle modelBounds;
+			{
+				modelBounds = ControlSupport.getBounds(control);
+				component.setModelBounds(modelBounds);
+			}
+			// prepare shot bounds
+			{
+				Rectangle bounds = modelBounds.getCopy();
+				// convert into "shot"
+				if (component.getParent() instanceof AbstractComponentInfo) {
+					AbstractComponentInfo parent = (AbstractComponentInfo) component.getParent();
+					Object parentControl = parent.getComponentObject();
+					if (control != parentControl) {
+						Point controlLocation = CoordinateUtils.getDisplayLocation(control);
+						Point parentLocation = CoordinateUtils.getDisplayLocation(parentControl);
+						bounds.x = controlLocation.x - parentLocation.x;
+						bounds.y = controlLocation.y - parentLocation.y;
+						// tweak for RIGHT_TO_LEFT
+						if (ContainerSupport.isComposite(parentControl)
+								&& ContainerSupport.isRTL(parentControl)) {
+							if (ContainerSupport.isRTL(ControlSupport.getParent(parentControl))) {
+								bounds.x += ControlSupport.getBounds(parentControl).width;
+							}
+							bounds.x -= bounds.width;
+						}
+					} else {
+						bounds.x = 0;
+						bounds.y = 0;
+					}
+				}
+				// remember
+				component.setBounds(bounds);
+			}
+			// prepare insets
+			if (ContainerSupport.isComposite(control)) {
+				component.setClientAreaInsets(CoordinateUtils.getClientAreaInsets(control));
+			}
+			// continue, process children
+			if (superRefreshFetch != null) {
+				superRefreshFetch.run();
+			}
+		} catch (OSSupportError e) {
+			// prevent further invoking of 'endShot()'.
+			wasOSSupportError = true;
+			throw e;
+		} finally {
+			// finalize screen shot process
+			if (component.isRoot() && !wasOSSupportError) {
+				ToolkitSupport.endShot(control);
+			}
+		}
+	}
 
-  /**
-   * Creates shot {@link Image}'s for all {@link org.eclipse.swt.widgets.Control}'s.
-   */
-  private static void createShotImages(AbstractComponentInfo root, Object control) throws Exception {
-    // mark Control's with models as needed images
-    root.accept(new ObjectInfoVisitor() {
-      @Override
-      public void endVisit(ObjectInfo objectInfo) throws Exception {
-        if (objectInfo instanceof AbstractComponentInfo) {
-          AbstractComponentInfo componentInfo = (AbstractComponentInfo) objectInfo;
-          Object componentObject = componentInfo.getComponentObject();
-          if (ControlSupport.isControl(componentObject)) {
-            ToolkitSupport.markAsNeededImage(componentObject);
-          }
-        }
-      }
-    });
-    // prepare images
-    ToolkitSupport.makeShots(control);
-    // get images
-    root.accept(new ObjectInfoVisitor() {
-      @Override
-      public void endVisit(ObjectInfo objectInfo) throws Exception {
-        if (objectInfo instanceof AbstractComponentInfo) {
-          AbstractComponentInfo componentInfo = (AbstractComponentInfo) objectInfo;
-          Object componentObject = componentInfo.getComponentObject();
-          if (ControlSupport.isControl(componentObject)) {
-            Image image = ToolkitSupport.getShotImage(componentObject);
-            componentInfo.setImage(image);
-          }
-        }
-      }
-    });
-  }
+	/**
+	 * Creates shot {@link Image}'s for all {@link org.eclipse.swt.widgets.Control}'s.
+	 */
+	private static void createShotImages(AbstractComponentInfo root, Object control) throws Exception {
+		// mark Control's with models as needed images
+		root.accept(new ObjectInfoVisitor() {
+			@Override
+			public void endVisit(ObjectInfo objectInfo) throws Exception {
+				if (objectInfo instanceof AbstractComponentInfo) {
+					AbstractComponentInfo componentInfo = (AbstractComponentInfo) objectInfo;
+					Object componentObject = componentInfo.getComponentObject();
+					if (ControlSupport.isControl(componentObject)) {
+						ToolkitSupport.markAsNeededImage(componentObject);
+					}
+				}
+			}
+		});
+		// prepare images
+		ToolkitSupport.makeShots(control);
+		// get images
+		root.accept(new ObjectInfoVisitor() {
+			@Override
+			public void endVisit(ObjectInfo objectInfo) throws Exception {
+				if (objectInfo instanceof AbstractComponentInfo) {
+					AbstractComponentInfo componentInfo = (AbstractComponentInfo) objectInfo;
+					Object componentObject = componentInfo.getComponentObject();
+					if (ControlSupport.isControl(componentObject)) {
+						Image image = ToolkitSupport.getShotImage(componentObject);
+						componentInfo.setImage(image);
+					}
+				}
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Properties
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected List<Property> getPropertyList() throws Exception {
-    List<Property> properties = super.getPropertyList();
-    StylePropertyEditor.addStyleProperties(properties);
-    return properties;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Properties
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected List<Property> getPropertyList() throws Exception {
+		List<Property> properties = super.getPropertyList();
+		StylePropertyEditor.addStyleProperties(properties);
+		return properties;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Menu
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void command_CREATE(MenuInfo menu) throws Exception {
-    menu.command_CREATE(this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Menu
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void command_CREATE(MenuInfo menu) throws Exception {
+		menu.command_CREATE(this);
+	}
 
-  public void command_ADD(MenuInfo menu) throws Exception {
-    menu.command_ADD(this);
-  }
+	public void command_ADD(MenuInfo menu) throws Exception {
+		menu.command_ADD(this);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/ICompositeInfo.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/ICompositeInfo.java
index e9a4f6ea9..19ef15903 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/ICompositeInfo.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/ICompositeInfo.java
@@ -24,29 +24,29 @@
  * @coverage swt.model.widgets
  */
 public interface ICompositeInfo extends IScrollableInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the collection of {@link IControlInfo} children.
-   */
-  List<? extends IControlInfo> getChildrenControls();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the collection of {@link IControlInfo} children.
+	 */
+	List<? extends IControlInfo> getChildrenControls();
 
-  /**
-   * Returns the {@link Insets} that can be used to crop bounds of this {@link Composite} to produce
-   * a rectangle which describes the area of this {@link Composite} which is capable of displaying
-   * data (that is, not covered by the "trimmings").
-   * <p>
-   * Note, that this method is different from {@link #getClientAreaInsets()}. For example in
-   * {@link Group} point <code>(0,0)</code> is point on group border, but
-   * {@link Group#getClientArea()} returns size of border on sides. But still, if we <b>want</b> to
-   * place child {@link Control} exactly in top-left point of {@link Group}, we should use
-   * <code>(0,0)</code>. However if we want to place {@link Control} in <b>top-left of preferred
-   * location</b>, then {@link #getClientAreaInsets2()} should be used.
-   *
-   * @return the {@link Insets} for "displaying data" part of this {@link Composite}.
-   */
-  Insets getClientAreaInsets2();
+	/**
+	 * Returns the {@link Insets} that can be used to crop bounds of this {@link Composite} to produce
+	 * a rectangle which describes the area of this {@link Composite} which is capable of displaying
+	 * data (that is, not covered by the "trimmings").
+	 * <p>
+	 * Note, that this method is different from {@link #getClientAreaInsets()}. For example in
+	 * {@link Group} point <code>(0,0)</code> is point on group border, but
+	 * {@link Group#getClientArea()} returns size of border on sides. But still, if we <b>want</b> to
+	 * place child {@link Control} exactly in top-left point of {@link Group}, we should use
+	 * <code>(0,0)</code>. However if we want to place {@link Control} in <b>top-left of preferred
+	 * location</b>, then {@link #getClientAreaInsets2()} should be used.
+	 *
+	 * @return the {@link Insets} for "displaying data" part of this {@link Composite}.
+	 */
+	Insets getClientAreaInsets2();
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/IScrollableInfo.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/IScrollableInfo.java
index c155c1cce..92cb6b878 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/IScrollableInfo.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/IScrollableInfo.java
@@ -20,8 +20,8 @@
  * @coverage swt.model.widgets
  */
 public interface IScrollableInfo extends IControlInfo {
-  /**
-   * @return the {@link Rectangle}, same as {@link Scrollable#getClientArea()}.
-   */
-  Rectangle getClientArea();
+	/**
+	 * @return the {@link Rectangle}, same as {@link Scrollable#getClientArea()}.
+	 */
+	Rectangle getClientArea();
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/ITableColumnInfo.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/ITableColumnInfo.java
index 909986476..b374ab926 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/ITableColumnInfo.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/ITableColumnInfo.java
@@ -19,8 +19,8 @@
  * @coverage swt.model.widgets
  */
 public interface ITableColumnInfo extends IItemInfo {
-  /**
-   * Sets width in pixels.
-   */
-  public void setWidth(int width) throws Exception;
+	/**
+	 * Sets width in pixels.
+	 */
+	public void setWidth(int width) throws Exception;
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/ItemInfo.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/ItemInfo.java
index 6ffed1bd1..ad7183d2b 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/ItemInfo.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/ItemInfo.java
@@ -31,47 +31,47 @@
  * @coverage swt.model.widgets
  */
 public class ItemInfo extends WidgetInfo implements IItemInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ItemInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ItemInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Initializing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void initialize() throws Exception {
-    super.initialize();
-    addBroadcastListener(new ObjectEventListener() {
-      @Override
-      public void addContextMenu(List<? extends ObjectInfo> objects,
-          ObjectInfo object,
-          IMenuManager manager) throws Exception {
-        if (object == ItemInfo.this) {
-          MorphingSupport.contribute("org.eclipse.swt.widgets.Item", ItemInfo.this, manager);
-        }
-      }
-    });
-    StylePropertyEditor.configureContributeActions(this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Initializing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void initialize() throws Exception {
+		super.initialize();
+		addBroadcastListener(new ObjectEventListener() {
+			@Override
+			public void addContextMenu(List<? extends ObjectInfo> objects,
+					ObjectInfo object,
+					IMenuManager manager) throws Exception {
+				if (object == ItemInfo.this) {
+					MorphingSupport.contribute("org.eclipse.swt.widgets.Item", ItemInfo.this, manager);
+				}
+			}
+		});
+		StylePropertyEditor.configureContributeActions(this);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Properties
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected List<Property> getPropertyList() throws Exception {
-    List<Property> properties = super.getPropertyList();
-    StylePropertyEditor.addStyleProperties(properties);
-    return properties;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Properties
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected List<Property> getPropertyList() throws Exception {
+		List<Property> properties = super.getPropertyList();
+		StylePropertyEditor.addStyleProperties(properties);
+		return properties;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/LabelInfo.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/LabelInfo.java
index 7f69a0bf8..96c2dbef0 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/LabelInfo.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/LabelInfo.java
@@ -22,26 +22,26 @@
  * @coverage swt.model.widgets
  */
 public final class LabelInfo extends ControlInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public LabelInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public LabelInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final IObjectPresentation m_presentation = new LabelStylePresentation(this);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final IObjectPresentation m_presentation = new LabelStylePresentation(this);
 
-  @Override
-  public IObjectPresentation getPresentation() {
-    return m_presentation;
-  }
+	@Override
+	public IObjectPresentation getPresentation() {
+		return m_presentation;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/LabelStylePresentation.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/LabelStylePresentation.java
index 9f1a8b03f..3af926e8b 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/LabelStylePresentation.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/LabelStylePresentation.java
@@ -20,27 +20,27 @@
  * @coverage swt.model.presentation
  */
 public final class LabelStylePresentation extends StylePresentation {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public LabelStylePresentation(LabelInfo label) {
-    super(label);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public LabelStylePresentation(LabelInfo label) {
+		super(label);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // StylePresentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void initImages() throws Exception {
-    addImage(
-        SWT.SEPARATOR | SWT.HORIZONTAL,
-        "wbp-meta/org/eclipse/swt/widgets/Label_separatorHorizontal.gif");
-    addImage(
-        SWT.SEPARATOR | SWT.VERTICAL,
-        "wbp-meta/org/eclipse/swt/widgets/Label_separatorVertical.gif");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// StylePresentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void initImages() throws Exception {
+		addImage(
+				SWT.SEPARATOR | SWT.HORIZONTAL,
+				"wbp-meta/org/eclipse/swt/widgets/Label_separatorHorizontal.gif");
+		addImage(
+				SWT.SEPARATOR | SWT.VERTICAL,
+				"wbp-meta/org/eclipse/swt/widgets/Label_separatorVertical.gif");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/MultiPageDialogInfo.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/MultiPageDialogInfo.java
index 9309b5f35..abd46d2de 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/MultiPageDialogInfo.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/MultiPageDialogInfo.java
@@ -21,14 +21,14 @@
  * @coverage swt.model.widgets
  */
 public final class MultiPageDialogInfo extends CompositeInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public MultiPageDialogInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public MultiPageDialogInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/ScrollableInfo.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/ScrollableInfo.java
index 81f1db2c1..47a968557 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/ScrollableInfo.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/ScrollableInfo.java
@@ -26,40 +26,40 @@
  * @coverage swt.model.widgets
  */
 public class ScrollableInfo extends ControlInfo implements IScrollableInfo {
-  private Rectangle m_clientArea;
+	private Rectangle m_clientArea;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ScrollableInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ScrollableInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void refresh_fetch() throws Exception {
-    super.refresh_fetch();
-    m_clientArea = ContainerSupport.getClientArea(getObject());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void refresh_fetch() throws Exception {
+		super.refresh_fetch();
+		m_clientArea = ContainerSupport.getClientArea(getObject());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link Rectangle}, same as {@link Scrollable#getClientArea()}.
-   */
-  @Override
-  public Rectangle getClientArea() {
-    return m_clientArea;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link Rectangle}, same as {@link Scrollable#getClientArea()}.
+	 */
+	@Override
+	public Rectangle getClientArea() {
+		return m_clientArea;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/ShellInfo.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/ShellInfo.java
index 7f21a8003..0b4fdd32a 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/ShellInfo.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/ShellInfo.java
@@ -34,74 +34,74 @@
  * @coverage swt.model.widgets
  */
 public final class ShellInfo extends CompositeInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ShellInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ShellInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Object
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void setObject(Object object) throws Exception {
-    super.setObject(object);
-    // In RCP the Section performs setRedraw(false/true) for all parents, including Shell.
-    // So, even through we don't open Shell, setRedraw(true) causes repaint for area under Shell.
-    // So, we have to move Shell outside the view area ASAP.
-    if (object != null) {
-      ReflectionUtils.invokeMethod(object, "setLocation(int,int)", 10000, 10000);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Object
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void setObject(Object object) throws Exception {
+		super.setObject(object);
+		// In RCP the Section performs setRedraw(false/true) for all parents, including Shell.
+		// So, even through we don't open Shell, setRedraw(true) causes repaint for area under Shell.
+		// So, we have to move Shell outside the view area ASAP.
+		if (object != null) {
+			ReflectionUtils.invokeMethod(object, "setLocation(int,int)", 10000, 10000);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IThisMethodParameterEvaluator
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Object evaluateParameter(EvaluationContext context,
-      MethodDeclaration methodDeclaration,
-      String methodSignature,
-      SingleVariableDeclaration parameter,
-      int index) throws Exception {
-    if (index == 1) {
-      return SWT.SHELL_TRIM;
-    }
-    return AstEvaluationEngine.UNKNOWN;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IThisMethodParameterEvaluator
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Object evaluateParameter(EvaluationContext context,
+			MethodDeclaration methodDeclaration,
+			String methodSignature,
+			SingleVariableDeclaration parameter,
+			int index) throws Exception {
+		if (index == 1) {
+			return SWT.SHELL_TRIM;
+		}
+		return AstEvaluationEngine.UNKNOWN;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Context menu
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void fillContextMenu(IMenuManager manager) throws Exception {
-    super.fillContextMenu(manager);
-    contextMenu_removeSize(manager);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Context menu
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void fillContextMenu(IMenuManager manager) throws Exception {
+		super.fillContextMenu(manager);
+		contextMenu_removeSize(manager);
+	}
 
-  /**
-   * Adds "Remove setSize()" item.
-   */
-  private void contextMenu_removeSize(IMenuManager manager) throws Exception {
-    if (isRoot() || JavaInfoUtils.hasTrueParameter(this, "SWT.isRoot")) {
-      ObjectInfoAction action = new ObjectInfoAction(this) {
-        @Override
-        protected void runEx() throws Exception {
-          removeMethodInvocations("setSize(int,int)");
-        }
-      };
-      action.setText(ModelMessages.ShellInfo_removeSetSize);
-      manager.appendToGroup(IContextMenuConstants.GROUP_LAYOUT, action);
-    }
-  }
+	/**
+	 * Adds "Remove setSize()" item.
+	 */
+	private void contextMenu_removeSize(IMenuManager manager) throws Exception {
+		if (isRoot() || JavaInfoUtils.hasTrueParameter(this, "SWT.isRoot")) {
+			ObjectInfoAction action = new ObjectInfoAction(this) {
+				@Override
+				protected void runEx() throws Exception {
+					removeMethodInvocations("setSize(int,int)");
+				}
+			};
+			action.setText(ModelMessages.ShellInfo_removeSetSize);
+			manager.appendToGroup(IContextMenuConstants.GROUP_LAYOUT, action);
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/StylePresentation.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/StylePresentation.java
index d5af0c504..c1201f080 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/StylePresentation.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/StylePresentation.java
@@ -36,84 +36,84 @@
  * @coverage swt.model.widgets.presentation
  */
 public abstract class StylePresentation extends DefaultJavaInfoPresentation {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public StylePresentation(WidgetInfo widget) {
-    super(widget);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public StylePresentation(WidgetInfo widget) {
+		super(widget);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Icon
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Image getIcon() throws Exception {
-    // try to get by style
-    int style = ControlSupport.getStyle(m_javaInfo.getObject());
-    for (Map.Entry<Integer, Image> entry : getImages().entrySet()) {
-      int keyStyle = entry.getKey();
-      if ((style & keyStyle) == keyStyle) {
-        return entry.getValue();
-      }
-    }
-    // use default
-    return super.getIcon();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Icon
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Image getIcon() throws Exception {
+		// try to get by style
+		int style = ControlSupport.getStyle(m_javaInfo.getObject());
+		for (Map.Entry<Integer, Image> entry : getImages().entrySet()) {
+			int keyStyle = entry.getKey();
+			if ((style & keyStyle) == keyStyle) {
+				return entry.getValue();
+			}
+		}
+		// use default
+		return super.getIcon();
+	}
 
-  /**
-   * Fills static map of images using {@link #addImage(int, String)}.
-   */
-  protected abstract void initImages() throws Exception;
+	/**
+	 * Fills static map of images using {@link #addImage(int, String)}.
+	 */
+	protected abstract void initImages() throws Exception;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final ClassMap<Map<Integer, Image>> m_images = ClassMap.create();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final ClassMap<Map<Integer, Image>> m_images = ClassMap.create();
 
-  /**
-   * @return the "style to image" map corresponding to this {@link StylePresentation}.
-   */
-  private Map<Integer, Image> getImages() throws Exception {
-    Map<Integer, Image> images = m_images.get(getClass());
-    if (images == null) {
-      images = Maps.newHashMap();
-      m_images.put(getClass(), images);
-      initImages();
-    }
-    return images;
-  }
+	/**
+	 * @return the "style to image" map corresponding to this {@link StylePresentation}.
+	 */
+	private Map<Integer, Image> getImages() throws Exception {
+		Map<Integer, Image> images = m_images.get(getClass());
+		if (images == null) {
+			images = Maps.newHashMap();
+			m_images.put(getClass(), images);
+			initImages();
+		}
+		return images;
+	}
 
-  /**
-   * Add an image into image map representing given <code>style</code> by given
-   * <code>imagePath</code>. See {@link StylePresentation#addImage(int, String)}.
-   *
-   * @param style
-   *          the SWT style value.
-   * @param imagePath
-   *          the path relative to current toolkit support bundle.
-   */
-  protected final void addImage(int style, String imagePath) throws Exception {
-    // load image
-    Image image;
-    {
-      Bundle bundle = m_javaInfo.getDescription().getToolkit().getBundle();
-      URL imageURL = bundle.getEntry(imagePath);
-      Assert.isNotNull(
-          imageURL,
-          MessageFormat.format(
-              ModelMessages.StylePresentation_canNotFindImage,
-              imagePath,
-              bundle.getSymbolicName()));
-      image = new Image(Display.getDefault(), imageURL.openStream());
-    }
-    // remember image
-    getImages().put(style, image);
-    ImageDisposer.add(getClass(), imagePath, image);
-  }
+	/**
+	 * Add an image into image map representing given <code>style</code> by given
+	 * <code>imagePath</code>. See {@link StylePresentation#addImage(int, String)}.
+	 *
+	 * @param style
+	 *          the SWT style value.
+	 * @param imagePath
+	 *          the path relative to current toolkit support bundle.
+	 */
+	protected final void addImage(int style, String imagePath) throws Exception {
+		// load image
+		Image image;
+		{
+			Bundle bundle = m_javaInfo.getDescription().getToolkit().getBundle();
+			URL imageURL = bundle.getEntry(imagePath);
+			Assert.isNotNull(
+					imageURL,
+					MessageFormat.format(
+							ModelMessages.StylePresentation_canNotFindImage,
+							imagePath,
+							bundle.getSymbolicName()));
+			image = new Image(Display.getDefault(), imageURL.openStream());
+		}
+		// remember image
+		getImages().put(style, image);
+		ImageDisposer.add(getClass(), imagePath, image);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/SwtInvocationEvaluatorInterceptor.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/SwtInvocationEvaluatorInterceptor.java
index e854b2418..b2bd00f07 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/SwtInvocationEvaluatorInterceptor.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/SwtInvocationEvaluatorInterceptor.java
@@ -43,182 +43,182 @@
  * @coverage swt.model
  */
 public final class SwtInvocationEvaluatorInterceptor extends InvocationEvaluatorInterceptor {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // InvocationEvaluatorInterceptor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Object evaluate(EvaluationContext context,
-      ClassInstanceCreation expression,
-      ITypeBinding typeBinding,
-      Class<?> clazz,
-      Constructor<?> actualConstructor,
-      Object[] arguments) throws Exception {
-    // standard SWT control
-    if (isControl(actualConstructor)) {
-      return evaluateSWT(context, expression, clazz, actualConstructor, arguments);
-    }
-    // ComboBoxCellEditor with setItems() argument
-    if (ReflectionUtils.isSuccessorOf(clazz, "org.eclipse.jface.viewers.ComboBoxCellEditor")
-        && actualConstructor.getParameterTypes().length >= 2) {
-      if (arguments[1] == null) {
-        // replace null items array with empty array
-        arguments[1] = new String[0];
-      }
-    }
-    return AstEvaluationEngine.UNKNOWN;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// InvocationEvaluatorInterceptor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Object evaluate(EvaluationContext context,
+			ClassInstanceCreation expression,
+			ITypeBinding typeBinding,
+			Class<?> clazz,
+			Constructor<?> actualConstructor,
+			Object[] arguments) throws Exception {
+		// standard SWT control
+		if (isControl(actualConstructor)) {
+			return evaluateSWT(context, expression, clazz, actualConstructor, arguments);
+		}
+		// ComboBoxCellEditor with setItems() argument
+		if (ReflectionUtils.isSuccessorOf(clazz, "org.eclipse.jface.viewers.ComboBoxCellEditor")
+				&& actualConstructor.getParameterTypes().length >= 2) {
+			if (arguments[1] == null) {
+				// replace null items array with empty array
+				arguments[1] = new String[0];
+			}
+		}
+		return AstEvaluationEngine.UNKNOWN;
+	}
 
-  private Object evaluateSWT(EvaluationContext context,
-      ClassInstanceCreation expression,
-      Class<?> clazz,
-      Constructor<?> actualConstructor,
-      Object[] arguments) throws Exception {
-    PlaceholderUtils.clear(expression);
-    Object parent = arguments[0];
-    int style = (Integer) arguments[1];
-    // try actual constructor
-    try {
-      return tryToCreate(actualConstructor, arguments);
-    } catch (Throwable e) {
-      context.addException(expression, e);
-      PlaceholderUtils.addException(expression, e);
-    }
-    // may be it failed because of "null" parent
-    if (parent == null) {
-      throw new DesignerException(IExceptionConstants.NULL_PARENT);
-    }
-    // some exception happened, try default constructor (if actual was not default)
-    {
-      Class<?> parentType = actualConstructor.getParameterTypes()[0];
-      Constructor<?> defaultConstructor =
-          ReflectionUtils.getConstructor(clazz, parentType, int.class);
-      if (defaultConstructor != null
-          && !ReflectionUtils.equals(actualConstructor, defaultConstructor)) {
-        try {
-          return tryToCreate(defaultConstructor, parent, style);
-        } catch (Throwable e) {
-          context.addException(expression, e);
-          PlaceholderUtils.addException(expression, e);
-        }
-      }
-    }
-    // still no success, use placeholder
-    PlaceholderUtils.markPlaceholder(expression);
-    return createPlaceholder(clazz, parent, style);
-  }
+	private Object evaluateSWT(EvaluationContext context,
+			ClassInstanceCreation expression,
+			Class<?> clazz,
+			Constructor<?> actualConstructor,
+			Object[] arguments) throws Exception {
+		PlaceholderUtils.clear(expression);
+		Object parent = arguments[0];
+		int style = (Integer) arguments[1];
+		// try actual constructor
+		try {
+			return tryToCreate(actualConstructor, arguments);
+		} catch (Throwable e) {
+			context.addException(expression, e);
+			PlaceholderUtils.addException(expression, e);
+		}
+		// may be it failed because of "null" parent
+		if (parent == null) {
+			throw new DesignerException(IExceptionConstants.NULL_PARENT);
+		}
+		// some exception happened, try default constructor (if actual was not default)
+		{
+			Class<?> parentType = actualConstructor.getParameterTypes()[0];
+			Constructor<?> defaultConstructor =
+					ReflectionUtils.getConstructor(clazz, parentType, int.class);
+			if (defaultConstructor != null
+					&& !ReflectionUtils.equals(actualConstructor, defaultConstructor)) {
+				try {
+					return tryToCreate(defaultConstructor, parent, style);
+				} catch (Throwable e) {
+					context.addException(expression, e);
+					PlaceholderUtils.addException(expression, e);
+				}
+			}
+		}
+		// still no success, use placeholder
+		PlaceholderUtils.markPlaceholder(expression);
+		return createPlaceholder(clazz, parent, style);
+	}
 
-  /**
-   * Tries to create {@link Control} using given constructor and arguments. If fails, disposes
-   * partially created {@link Control}-s.
-   */
-  private static Object tryToCreate(Constructor<?> actualConstructor, Object... arguments)
-      throws Exception {
-    Object parent = arguments[0];
-    // special case: no parent (probably only for Shell)
-    if (parent == null) {
-      return actualConstructor.newInstance(arguments);
-    }
-    // when has parent
-    int oldChildrenCount = ContainerSupport.getChildren(parent).length;
-    try {
-      return actualConstructor.newInstance(arguments);
-    } catch (Throwable e) {
-      // dispose new Control(s)
-      Object[] newChildren = ContainerSupport.getChildren(parent);
-      for (int i = oldChildrenCount; i < newChildren.length; i++) {
-        Object newChild = newChildren[i];
-        ControlSupport.dispose(newChild);
-      }
-      // re-throw
-      throw ReflectionUtils.getExceptionToThrow(e);
-    }
-  }
+	/**
+	 * Tries to create {@link Control} using given constructor and arguments. If fails, disposes
+	 * partially created {@link Control}-s.
+	 */
+	private static Object tryToCreate(Constructor<?> actualConstructor, Object... arguments)
+			throws Exception {
+		Object parent = arguments[0];
+		// special case: no parent (probably only for Shell)
+		if (parent == null) {
+			return actualConstructor.newInstance(arguments);
+		}
+		// when has parent
+		int oldChildrenCount = ContainerSupport.getChildren(parent).length;
+		try {
+			return actualConstructor.newInstance(arguments);
+		} catch (Throwable e) {
+			// dispose new Control(s)
+			Object[] newChildren = ContainerSupport.getChildren(parent);
+			for (int i = oldChildrenCount; i < newChildren.length; i++) {
+				Object newChild = newChildren[i];
+				ControlSupport.dispose(newChild);
+			}
+			// re-throw
+			throw ReflectionUtils.getExceptionToThrow(e);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Implementation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static boolean isControl(Constructor<?> constructor) {
-    Class<?>[] parameters = constructor.getParameterTypes();
-    Class<?> clazz = constructor.getDeclaringClass();
-    return ReflectionUtils.isSuccessorOf(clazz, "org.eclipse.swt.widgets.Control")
-        && parameters.length >= 2
-        && ReflectionUtils.isSuccessorOf(parameters[0], "org.eclipse.swt.widgets.Composite")
-        && parameters[1] == int.class;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Implementation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static boolean isControl(Constructor<?> constructor) {
+		Class<?>[] parameters = constructor.getParameterTypes();
+		Class<?> clazz = constructor.getDeclaringClass();
+		return ReflectionUtils.isSuccessorOf(clazz, "org.eclipse.swt.widgets.Control")
+				&& parameters.length >= 2
+				&& ReflectionUtils.isSuccessorOf(parameters[0], "org.eclipse.swt.widgets.Composite")
+				&& parameters[1] == int.class;
+	}
 
-  /**
-   * @return the {@link Control} to use as placeholder instead of real component that can not be
-   *         created because of some exception.
-   */
-  private static Object createPlaceholder(Class<?> clazz, Object parent, int style)
-      throws Exception {
-    String message =
-        MessageFormat.format(
-            ModelMessages.SwtInvocationEvaluatorInterceptor_placeholderText,
-            CodeUtils.getShortClass(clazz.getName()));
-    ClassLoader classLoader = parent.getClass().getClassLoader();
-    String script =
-        CodeUtils.getSource(
-            "import org.eclipse.swt.SWT;",
-            "import org.eclipse.swt.graphics.Color;",
-            "import org.eclipse.swt.widgets.*;",
-            "import org.eclipse.swt.layout.FillLayout;",
-            "",
-            "composite = new Composite(parent, SWT.NONE);",
-            "composite.setLayout(new FillLayout());",
-            "",
-            "label = new Label(composite, SWT.WRAP | SWT.CENTER);",
-            "label.setText(message);",
-            "label.setBackground(new Color(null, 0xFF, 0xCC, 0xCC));",
-            "",
-            "return composite;");
-    Map<String, Object> variables = Maps.newTreeMap();
-    variables.put("parent", parent);
-    variables.put("message", message);
-    return ScriptUtils.evaluate(classLoader, script, variables);
-  }
+	/**
+	 * @return the {@link Control} to use as placeholder instead of real component that can not be
+	 *         created because of some exception.
+	 */
+	private static Object createPlaceholder(Class<?> clazz, Object parent, int style)
+			throws Exception {
+		String message =
+				MessageFormat.format(
+						ModelMessages.SwtInvocationEvaluatorInterceptor_placeholderText,
+						CodeUtils.getShortClass(clazz.getName()));
+		ClassLoader classLoader = parent.getClass().getClassLoader();
+		String script =
+				CodeUtils.getSource(
+						"import org.eclipse.swt.SWT;",
+						"import org.eclipse.swt.graphics.Color;",
+						"import org.eclipse.swt.widgets.*;",
+						"import org.eclipse.swt.layout.FillLayout;",
+						"",
+						"composite = new Composite(parent, SWT.NONE);",
+						"composite.setLayout(new FillLayout());",
+						"",
+						"label = new Label(composite, SWT.WRAP | SWT.CENTER);",
+						"label.setText(message);",
+						"label.setBackground(new Color(null, 0xFF, 0xCC, 0xCC));",
+						"",
+						"return composite;");
+		Map<String, Object> variables = Maps.newTreeMap();
+		variables.put("parent", parent);
+		variables.put("message", message);
+		return ScriptUtils.evaluate(classLoader, script, variables);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Anonymous
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Object evaluateAnonymous(EvaluationContext context,
-      ClassInstanceCreation expression,
-      ITypeBinding typeBinding,
-      ITypeBinding typeBindingConcrete,
-      IMethodBinding methodBinding,
-      Object[] arguments) throws Exception {
-    if (isViewerCreation_withControl(typeBindingConcrete, arguments)
-        || isControlCreation_withParentStyle(typeBindingConcrete, arguments)) {
-      String stubClassName = AstNodeUtils.getFullyQualifiedName(typeBindingConcrete, true);
-      Class<?> stubClass = context.getClassLoader().loadClass(stubClassName);
-      Constructor<?> constructor = ReflectionUtils.getConstructorForArguments(stubClass, arguments);
-      if (constructor != null) {
-        return constructor.newInstance(arguments);
-      }
-    }
-    return AstEvaluationEngine.UNKNOWN;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Anonymous
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Object evaluateAnonymous(EvaluationContext context,
+			ClassInstanceCreation expression,
+			ITypeBinding typeBinding,
+			ITypeBinding typeBindingConcrete,
+			IMethodBinding methodBinding,
+			Object[] arguments) throws Exception {
+		if (isViewerCreation_withControl(typeBindingConcrete, arguments)
+				|| isControlCreation_withParentStyle(typeBindingConcrete, arguments)) {
+			String stubClassName = AstNodeUtils.getFullyQualifiedName(typeBindingConcrete, true);
+			Class<?> stubClass = context.getClassLoader().loadClass(stubClassName);
+			Constructor<?> constructor = ReflectionUtils.getConstructorForArguments(stubClass, arguments);
+			if (constructor != null) {
+				return constructor.newInstance(arguments);
+			}
+		}
+		return AstEvaluationEngine.UNKNOWN;
+	}
 
-  private static boolean isViewerCreation_withControl(ITypeBinding typeBinding, Object[] arguments) {
-    return AstNodeUtils.isSuccessorOf(typeBinding, "org.eclipse.jface.viewers.Viewer")
-        && arguments.length == 1
-        && ReflectionUtils.isSuccessorOf(arguments[0], "org.eclipse.swt.widgets.Control");
-  }
+	private static boolean isViewerCreation_withControl(ITypeBinding typeBinding, Object[] arguments) {
+		return AstNodeUtils.isSuccessorOf(typeBinding, "org.eclipse.jface.viewers.Viewer")
+				&& arguments.length == 1
+				&& ReflectionUtils.isSuccessorOf(arguments[0], "org.eclipse.swt.widgets.Control");
+	}
 
-  private static boolean isControlCreation_withParentStyle(ITypeBinding typeBinding,
-      Object[] arguments) {
-    boolean isControl = AstNodeUtils.isSuccessorOf(typeBinding, "org.eclipse.swt.widgets.Control");
-    boolean isViewer = AstNodeUtils.isSuccessorOf(typeBinding, "org.eclipse.jface.viewers.Viewer");
-    return (isControl || isViewer)
-        && arguments.length >= 2
-        && ReflectionUtils.isSuccessorOf(arguments[0], "org.eclipse.swt.widgets.Composite")
-        && ReflectionUtils.isSuccessorOf(arguments[1], "int");
-  }
+	private static boolean isControlCreation_withParentStyle(ITypeBinding typeBinding,
+			Object[] arguments) {
+		boolean isControl = AstNodeUtils.isSuccessorOf(typeBinding, "org.eclipse.swt.widgets.Control");
+		boolean isViewer = AstNodeUtils.isSuccessorOf(typeBinding, "org.eclipse.jface.viewers.Viewer");
+		return (isControl || isViewer)
+				&& arguments.length >= 2
+				&& ReflectionUtils.isSuccessorOf(arguments[0], "org.eclipse.swt.widgets.Composite")
+				&& ReflectionUtils.isSuccessorOf(arguments[1], "int");
+	}
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/SwtMethodParameterEvaluator.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/SwtMethodParameterEvaluator.java
index e7f50da07..4c7e6bf3d 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/SwtMethodParameterEvaluator.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/SwtMethodParameterEvaluator.java
@@ -30,57 +30,57 @@
  * @coverage swt.model.widgets
  */
 public final class SwtMethodParameterEvaluator implements IMethodParameterEvaluator {
-  public static final IMethodParameterEvaluator INSTANCE = new SwtMethodParameterEvaluator();
+	public static final IMethodParameterEvaluator INSTANCE = new SwtMethodParameterEvaluator();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IMethodParameterEvaluator
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Object evaluateParameter(EvaluationContext context,
-      MethodDeclaration methodDeclaration,
-      String methodSignature,
-      SingleVariableDeclaration parameter,
-      int index) throws Exception {
-    ClassLoader classLoader = context.getClassLoader();
-    String parameterName = parameter.getName().getIdentifier();
-    ITypeBinding typeBinding = AstNodeUtils.getTypeBinding(parameter);
-    // parent
-    if (AstNodeUtils.isSuccessorOf(typeBinding, "org.eclipse.swt.widgets.Composite")) {
-      if (index == 0 || parameterName.equals("parent")) {
-        return getDefaultShell(parameter, classLoader);
-      }
-    }
-    // Display
-    if (index == 0) {
-      if (AstNodeUtils.isSuccessorOf(typeBinding, "org.eclipse.swt.widgets.Display")) {
-        Class<?> c_Display = classLoader.loadClass("org.eclipse.swt.widgets.Display");
-        return ReflectionUtils.invokeMethod(c_Display, "getDefault()");
-      }
-    }
-    // unknown parameter
-    return AstEvaluationEngine.UNKNOWN;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IMethodParameterEvaluator
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Object evaluateParameter(EvaluationContext context,
+			MethodDeclaration methodDeclaration,
+			String methodSignature,
+			SingleVariableDeclaration parameter,
+			int index) throws Exception {
+		ClassLoader classLoader = context.getClassLoader();
+		String parameterName = parameter.getName().getIdentifier();
+		ITypeBinding typeBinding = AstNodeUtils.getTypeBinding(parameter);
+		// parent
+		if (AstNodeUtils.isSuccessorOf(typeBinding, "org.eclipse.swt.widgets.Composite")) {
+			if (index == 0 || parameterName.equals("parent")) {
+				return getDefaultShell(parameter, classLoader);
+			}
+		}
+		// Display
+		if (index == 0) {
+			if (AstNodeUtils.isSuccessorOf(typeBinding, "org.eclipse.swt.widgets.Display")) {
+				Class<?> c_Display = classLoader.loadClass("org.eclipse.swt.widgets.Display");
+				return ReflectionUtils.invokeMethod(c_Display, "getDefault()");
+			}
+		}
+		// unknown parameter
+		return AstEvaluationEngine.UNKNOWN;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Implementation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  static final String SHELL_KEY =
-      "org.eclipse.wb.internal.swt.model.widgets.SWT_MethodParameterEvaluator Shell";
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Implementation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	static final String SHELL_KEY =
+			"org.eclipse.wb.internal.swt.model.widgets.SWT_MethodParameterEvaluator Shell";
 
-  /**
-   * @return the {@link Shell} instance for given {@link ASTNode}, existing or new.
-   */
-  public static Object getDefaultShell(ASTNode node, ClassLoader classLoader) throws Exception {
-    Object shell = node.getProperty(SHELL_KEY);
-    if (shell == null || ControlSupport.isDisposed(shell)) {
-      Class<?> c_Shell = classLoader.loadClass("org.eclipse.swt.widgets.Shell");
-      shell = c_Shell.newInstance();
-      node.setProperty(SHELL_KEY, shell);
-    }
-    return shell;
-  }
+	/**
+	 * @return the {@link Shell} instance for given {@link ASTNode}, existing or new.
+	 */
+	public static Object getDefaultShell(ASTNode node, ClassLoader classLoader) throws Exception {
+		Object shell = node.getProperty(SHELL_KEY);
+		if (shell == null || ControlSupport.isDisposed(shell)) {
+			Class<?> c_Shell = classLoader.loadClass("org.eclipse.swt.widgets.Shell");
+			shell = c_Shell.newInstance();
+			node.setProperty(SHELL_KEY, shell);
+		}
+		return shell;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/SwtShellParameterDisposer.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/SwtShellParameterDisposer.java
index 65838e155..6fa4aa375 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/SwtShellParameterDisposer.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/SwtShellParameterDisposer.java
@@ -32,50 +32,50 @@
  * @coverage swt.model.widgets
  */
 public final class SwtShellParameterDisposer implements IRootProcessor {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final IRootProcessor INSTANCE = new SwtShellParameterDisposer();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final IRootProcessor INSTANCE = new SwtShellParameterDisposer();
 
-  private SwtShellParameterDisposer() {
-  }
+	private SwtShellParameterDisposer() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IRootProcessor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void process(final JavaInfo root, List<JavaInfo> components) throws Exception {
-    root.addBroadcastListener(new ObjectEventListener() {
-      @Override
-      public void dispose() throws Exception {
-        CompilationUnit unit = root.getEditor().getAstUnit();
-        disposeShellParameters(unit);
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IRootProcessor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void process(final JavaInfo root, List<JavaInfo> components) throws Exception {
+		root.addBroadcastListener(new ObjectEventListener() {
+			@Override
+			public void dispose() throws Exception {
+				CompilationUnit unit = root.getEditor().getAstUnit();
+				disposeShellParameters(unit);
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Implementation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static void disposeShellParameters(CompilationUnit unit) throws Exception {
-    unit.accept(new ASTVisitor() {
-      @Override
-      public void postVisit(ASTNode node) {
-        String key = SwtMethodParameterEvaluator.SHELL_KEY;
-        Object shell = node.getProperty(key);
-        if (shell != null
-            && ReflectionUtils.isSuccessorOf(shell, "org.eclipse.swt.widgets.Shell")
-            && !ControlSupport.isDisposed(shell)) {
-          ControlSupport.dispose(shell);
-          node.setProperty(key, null);
-        }
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Implementation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static void disposeShellParameters(CompilationUnit unit) throws Exception {
+		unit.accept(new ASTVisitor() {
+			@Override
+			public void postVisit(ASTNode node) {
+				String key = SwtMethodParameterEvaluator.SHELL_KEY;
+				Object shell = node.getProperty(key);
+				if (shell != null
+						&& ReflectionUtils.isSuccessorOf(shell, "org.eclipse.swt.widgets.Shell")
+						&& !ControlSupport.isDisposed(shell)) {
+					ControlSupport.dispose(shell);
+					node.setProperty(key, null);
+				}
+			}
+		});
+	}
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/TableColumnInfo.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/TableColumnInfo.java
index 1c55fcdde..34003b674 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/TableColumnInfo.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/TableColumnInfo.java
@@ -21,24 +21,24 @@
  * @coverage swt.model.widgets
  */
 public final class TableColumnInfo extends ItemInfo implements ITableColumnInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public TableColumnInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public TableColumnInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Edit
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void setWidth(int width) throws Exception {
-    getPropertyByTitle("width").setValue(width);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Edit
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void setWidth(int width) throws Exception {
+		getPropertyByTitle("width").setValue(width);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/TableInfo.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/TableInfo.java
index d8f21be52..c050a8315 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/TableInfo.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/TableInfo.java
@@ -32,104 +32,104 @@
  * @coverage swt.model.widgets
  */
 public class TableInfo extends CompositeInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public TableInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public TableInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Initialize
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void initialize() throws Exception {
-    super.initialize();
-    addBroadcastListener(new JavaEventListener() {
-      @Override
-      public void clipboardCopy(JavaInfo javaInfo, List<ClipboardCommand> commands)
-          throws Exception {
-        // copy TableColumn's
-        if (javaInfo == TableInfo.this) {
-          for (TableColumnInfo column : getColumns()) {
-            final JavaInfoMemento columnMemento = JavaInfoMemento.createMemento(column);
-            commands.add(new ClipboardCommand() {
-              private static final long serialVersionUID = 0L;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Initialize
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void initialize() throws Exception {
+		super.initialize();
+		addBroadcastListener(new JavaEventListener() {
+			@Override
+			public void clipboardCopy(JavaInfo javaInfo, List<ClipboardCommand> commands)
+					throws Exception {
+				// copy TableColumn's
+				if (javaInfo == TableInfo.this) {
+					for (TableColumnInfo column : getColumns()) {
+						final JavaInfoMemento columnMemento = JavaInfoMemento.createMemento(column);
+						commands.add(new ClipboardCommand() {
+							private static final long serialVersionUID = 0L;
 
-              @Override
-              public void execute(JavaInfo javaInfo) throws Exception {
-                JavaInfo column = columnMemento.create(javaInfo);
-                JavaInfoUtils.add(column, null, javaInfo, null);
-                columnMemento.apply();
-              }
-            });
-          }
-        }
-      }
-    });
-  }
+							@Override
+							public void execute(JavaInfo javaInfo) throws Exception {
+								JavaInfo column = columnMemento.create(javaInfo);
+								JavaInfoUtils.add(column, null, javaInfo, null);
+								columnMemento.apply();
+							}
+						});
+					}
+				}
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void refresh_fetch() throws Exception {
-    super.refresh_fetch();
-    // prepare metrics
-    Object table = getObject();
-    int headerHeight = TableSupport.getHeaderHeight(table);
-    int itemHeight = TableSupport.getItemHeight(table);
-    // prepare columns bounds
-    int x = 0;
-    {
-      for (TableColumnInfo column : getColumns()) {
-        int columnWidth = TableSupport.getColumnWidth(column.getObject());
-        int y = 0;
-        if (!EnvironmentUtils.IS_WINDOWS) {
-          // SWT Cocoa && Linux GTK excludes column headers from client area, so insets.top is header height.
-          // workaround is to adjust y to header height.
-          y -= headerHeight;
-        }
-        column.setModelBounds(new Rectangle(x, y, columnWidth, headerHeight));
-        x += columnWidth;
-      }
-    }
-    // prepare items bounds
-    {
-      // see comment above in column headers bounds section.
-      int y = EnvironmentUtils.IS_WINDOWS ? headerHeight : 0;
-      int width = getClientArea().width;
-      for (TableItemInfo item : getItems()) {
-        item.setModelBounds(new Rectangle(0, y, width, itemHeight));
-        y += itemHeight;
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void refresh_fetch() throws Exception {
+		super.refresh_fetch();
+		// prepare metrics
+		Object table = getObject();
+		int headerHeight = TableSupport.getHeaderHeight(table);
+		int itemHeight = TableSupport.getItemHeight(table);
+		// prepare columns bounds
+		int x = 0;
+		{
+			for (TableColumnInfo column : getColumns()) {
+				int columnWidth = TableSupport.getColumnWidth(column.getObject());
+				int y = 0;
+				if (!EnvironmentUtils.IS_WINDOWS) {
+					// SWT Cocoa && Linux GTK excludes column headers from client area, so insets.top is header height.
+					// workaround is to adjust y to header height.
+					y -= headerHeight;
+				}
+				column.setModelBounds(new Rectangle(x, y, columnWidth, headerHeight));
+				x += columnWidth;
+			}
+		}
+		// prepare items bounds
+		{
+			// see comment above in column headers bounds section.
+			int y = EnvironmentUtils.IS_WINDOWS ? headerHeight : 0;
+			int width = getClientArea().width;
+			for (TableItemInfo item : getItems()) {
+				item.setModelBounds(new Rectangle(0, y, width, itemHeight));
+				y += itemHeight;
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Children
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link TableColumnInfo} children.
-   */
-  public List<TableColumnInfo> getColumns() {
-    return getChildren(TableColumnInfo.class);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Children
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link TableColumnInfo} children.
+	 */
+	public List<TableColumnInfo> getColumns() {
+		return getChildren(TableColumnInfo.class);
+	}
 
-  /**
-   * @return the {@link TableItemInfo} children.
-   */
-  public List<TableItemInfo> getItems() {
-    return getChildren(TableItemInfo.class);
-  }
+	/**
+	 * @return the {@link TableItemInfo} children.
+	 */
+	public List<TableItemInfo> getItems() {
+		return getChildren(TableItemInfo.class);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/TableItemInfo.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/TableItemInfo.java
index d989daf7e..8cd41992e 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/TableItemInfo.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/TableItemInfo.java
@@ -21,14 +21,14 @@
  * @coverage swt.model.widgets
  */
 public final class TableItemInfo extends ItemInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public TableItemInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public TableItemInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/TreeInfo.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/TreeInfo.java
index f1a439949..13e11dba5 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/TreeInfo.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/TreeInfo.java
@@ -23,26 +23,26 @@
  * @coverage swt.model.widgets
  */
 public class TreeInfo extends CompositeInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public TreeInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public TreeInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Children
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link TreeItemInfo} children.
-   */
-  public final List<TreeItemInfo> getItems() {
-    return getChildren(TreeItemInfo.class);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Children
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link TreeItemInfo} children.
+	 */
+	public final List<TreeItemInfo> getItems() {
+		return getChildren(TreeItemInfo.class);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/TreeItemInfo.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/TreeItemInfo.java
index 0bdfabfa1..e49718986 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/TreeItemInfo.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/TreeItemInfo.java
@@ -27,70 +27,70 @@
  * @coverage swt.model.widgets
  */
 public final class TreeItemInfo extends ItemInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public TreeItemInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public TreeItemInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the parent {@link TreeInfo}.
-   */
-  public TreeInfo getTree() {
-    if (getParent() instanceof TreeItemInfo) {
-      TreeItemInfo parentItem = (TreeItemInfo) getParent();
-      return parentItem.getTree();
-    }
-    return (TreeInfo) getParent();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the parent {@link TreeInfo}.
+	 */
+	public TreeInfo getTree() {
+		if (getParent() instanceof TreeItemInfo) {
+			TreeItemInfo parentItem = (TreeItemInfo) getParent();
+			return parentItem.getTree();
+		}
+		return (TreeInfo) getParent();
+	}
 
-  /**
-   * @return the {@link TreeItemInfo} children.
-   */
-  public List<TreeItemInfo> getItems() {
-    return getChildren(TreeItemInfo.class);
-  }
+	/**
+	 * @return the {@link TreeItemInfo} children.
+	 */
+	public List<TreeItemInfo> getItems() {
+		return getChildren(TreeItemInfo.class);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void refresh_fetch() throws Exception {
-    {
-      Rectangle bounds = TreeSupport.getBounds(getObject());
-      setModelBounds(bounds);
-      // apply Tree client area insets
-      if (getParent() instanceof TreeItemInfo) {
-        Insets insets = getTree().getClientAreaInsets();
-        bounds.performTranslate(insets);
-        setBounds(bounds);
-      }
-    }
-    // continue in super()
-    super.refresh_fetch();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void refresh_fetch() throws Exception {
+		{
+			Rectangle bounds = TreeSupport.getBounds(getObject());
+			setModelBounds(bounds);
+			// apply Tree client area insets
+			if (getParent() instanceof TreeItemInfo) {
+				Insets insets = getTree().getClientAreaInsets();
+				bounds.performTranslate(insets);
+				setBounds(bounds);
+			}
+		}
+		// continue in super()
+		super.refresh_fetch();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Editing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * After any using this {@link TreeItemInfo} as container.
-   */
-  public void command_TARGET_after(TreeItemInfo item, TreeItemInfo nextItem) throws Exception {
-    getPropertyByTitle("expanded").setValue(true);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Editing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * After any using this {@link TreeItemInfo} as container.
+	 */
+	public void command_TARGET_after(TreeItemInfo item, TreeItemInfo nextItem) throws Exception {
+		getPropertyByTitle("expanded").setValue(true);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/WidgetInfo.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/WidgetInfo.java
index cdf87bb01..c47ae97a9 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/WidgetInfo.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/WidgetInfo.java
@@ -42,131 +42,131 @@
  * @coverage swt.model.widgets
  */
 public abstract class WidgetInfo extends AbstractComponentInfo {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public WidgetInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-    rememberVariableNameAsNameData();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public WidgetInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+		rememberVariableNameAsNameData();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Initializing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void rememberVariableNameAsNameData() {
-    addBroadcastListener(new JavaEventListener() {
-      @Override
-      public void variable_setName(AbstractNamedVariableSupport variableSupport,
-          String oldName,
-          String newName) throws Exception {
-        if (variableSupport.getJavaInfo() == WidgetInfo.this) {
-          setVariableNameAsNameData(newName);
-        }
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Initializing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void rememberVariableNameAsNameData() {
+		addBroadcastListener(new JavaEventListener() {
+			@Override
+			public void variable_setName(AbstractNamedVariableSupport variableSupport,
+					String oldName,
+					String newName) throws Exception {
+				if (variableSupport.getJavaInfo() == WidgetInfo.this) {
+					setVariableNameAsNameData(newName);
+				}
+			}
+		});
+	}
 
-  @Override
-  public void createExposedChildren() throws Exception {
-    super.createExposedChildren();
-    createExposedChildren(this);
-  }
+	@Override
+	public void createExposedChildren() throws Exception {
+		super.createExposedChildren();
+		createExposedChildren(this);
+	}
 
-  /**
-   * Creates exposed children for given SWT {@link JavaInfo}.
-   */
-  public static void createExposedChildren(JavaInfo host) throws Exception {
-    final List<Class<?>> classList = Lists.newArrayList();
-    final ClassLoader classLoader = JavaInfoUtils.getClassLoader(host);
-    ExecutionUtils.runIgnore(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        Class<?> clazz = classLoader.loadClass("org.eclipse.swt.widgets.Widget");
-        classList.add(clazz);
-      }
-    });
-    ExecutionUtils.runIgnore(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        Class<?> clazz = classLoader.loadClass("org.eclipse.jface.viewers.Viewer");
-        classList.add(clazz);
-      }
-    });
-    Class<?>[] classes = classList.toArray(new Class[classList.size()]);
-    JavaInfoUtils.addExposedChildren(host, classes);
-  }
+	/**
+	 * Creates exposed children for given SWT {@link JavaInfo}.
+	 */
+	public static void createExposedChildren(JavaInfo host) throws Exception {
+		final List<Class<?>> classList = Lists.newArrayList();
+		final ClassLoader classLoader = JavaInfoUtils.getClassLoader(host);
+		ExecutionUtils.runIgnore(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				Class<?> clazz = classLoader.loadClass("org.eclipse.swt.widgets.Widget");
+				classList.add(clazz);
+			}
+		});
+		ExecutionUtils.runIgnore(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				Class<?> clazz = classLoader.loadClass("org.eclipse.jface.viewers.Viewer");
+				classList.add(clazz);
+			}
+		});
+		Class<?>[] classes = classList.toArray(new Class[classList.size()]);
+		JavaInfoUtils.addExposedChildren(host, classes);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Rename
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds/modifies {@link Widget#setData(String, Object)} with key "name" and value - new variable
-   * name.
-   *
-   * @param newName
-   *          the new variable name
-   */
-  private void setVariableNameAsNameData(String newName) throws Exception {
-    if (getDescription().getToolkit().getPreferences().getBoolean(
-        IPreferenceConstants.P_VARIABLE_IN_COMPONENT)) {
-      String valueSource = StringConverter.INSTANCE.toJavaSource(this, newName);
-      // try to find existing setData("name", value);
-      {
-        List<MethodInvocation> invocations =
-            getMethodInvocations("setData(java.lang.String,java.lang.Object)");
-        for (MethodInvocation invocation : invocations) {
-          Expression keyExpression = (Expression) invocation.arguments().get(0);
-          Expression valueExpression = (Expression) invocation.arguments().get(1);
-          //
-          String key = (String) JavaInfoEvaluationHelper.getValue(keyExpression);
-          if ("name".equals(key)) {
-            getEditor().replaceExpression(valueExpression, valueSource);
-            return;
-          }
-        }
-      }
-      // add new setData("name", value);
-      {
-        String nameSource = StringConverter.INSTANCE.toJavaSource(this, "name");
-        String arguments = nameSource + ", " + valueSource;
-        addMethodInvocation("setData(java.lang.String,java.lang.Object)", arguments);
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Rename
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds/modifies {@link Widget#setData(String, Object)} with key "name" and value - new variable
+	 * name.
+	 *
+	 * @param newName
+	 *          the new variable name
+	 */
+	private void setVariableNameAsNameData(String newName) throws Exception {
+		if (getDescription().getToolkit().getPreferences().getBoolean(
+				IPreferenceConstants.P_VARIABLE_IN_COMPONENT)) {
+			String valueSource = StringConverter.INSTANCE.toJavaSource(this, newName);
+			// try to find existing setData("name", value);
+			{
+				List<MethodInvocation> invocations =
+						getMethodInvocations("setData(java.lang.String,java.lang.Object)");
+				for (MethodInvocation invocation : invocations) {
+					Expression keyExpression = (Expression) invocation.arguments().get(0);
+					Expression valueExpression = (Expression) invocation.arguments().get(1);
+					//
+					String key = (String) JavaInfoEvaluationHelper.getValue(keyExpression);
+					if ("name".equals(key)) {
+						getEditor().replaceExpression(valueExpression, valueSource);
+						return;
+					}
+				}
+			}
+			// add new setData("name", value);
+			{
+				String nameSource = StringConverter.INSTANCE.toJavaSource(this, "name");
+				String arguments = nameSource + ", " + valueSource;
+				addMethodInvocation("setData(java.lang.String,java.lang.Object)", arguments);
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // "Live" support
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the instance of {@link SwtLiveManager} to fetch "live" data.
-   */
-  protected SwtLiveManager getLiveComponentsManager() {
-    return new SwtLiveManager(this);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// "Live" support
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the instance of {@link SwtLiveManager} to fetch "live" data.
+	 */
+	protected SwtLiveManager getLiveComponentsManager() {
+		return new SwtLiveManager(this);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Style
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the style of this {@link WidgetInfo}, for existing {@link Object} or "live".
-   */
-  public final int getStyle() {
-    if (getObject() != null) {
-      return ControlSupport.getStyle(getObject());
-    } else {
-      return getLiveComponentsManager().getStyle();
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Style
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the style of this {@link WidgetInfo}, for existing {@link Object} or "live".
+	 */
+	public final int getStyle() {
+		if (getObject() != null) {
+			return ControlSupport.getStyle(getObject());
+		} else {
+			return getLiveComponentsManager().getStyle();
+		}
+	}
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/exposed/ControlsHierarchyProvider.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/exposed/ControlsHierarchyProvider.java
index 1ea8d95c0..ea3471277 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/exposed/ControlsHierarchyProvider.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/exposed/ControlsHierarchyProvider.java
@@ -24,19 +24,19 @@
  * @coverage swt.model.widgets
  */
 public final class ControlsHierarchyProvider extends HierarchyProvider {
-  @Override
-  public Object getParentObject(Object object) throws Exception {
-    if (ControlSupport.isControl(object) || MenuSupport.isMenu(object)) {
-      return ControlSupport.getParent(object);
-    }
-    return null;
-  }
+	@Override
+	public Object getParentObject(Object object) throws Exception {
+		if (ControlSupport.isControl(object) || MenuSupport.isMenu(object)) {
+			return ControlSupport.getParent(object);
+		}
+		return null;
+	}
 
-  @Override
-  public Object[] getChildrenObjects(Object object) throws Exception {
-    if (ContainerSupport.isComposite(object)) {
-      return ContainerSupport.getChildren(object);
-    }
-    return ArrayUtils.EMPTY_OBJECT_ARRAY;
-  }
+	@Override
+	public Object[] getChildrenObjects(Object object) throws Exception {
+		if (ContainerSupport.isComposite(object)) {
+			return ContainerSupport.getChildren(object);
+		}
+		return ArrayUtils.EMPTY_OBJECT_ARRAY;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/exposed/ItemsHierarchyProvider.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/exposed/ItemsHierarchyProvider.java
index a9c817f9e..637ee1eef 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/exposed/ItemsHierarchyProvider.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/exposed/ItemsHierarchyProvider.java
@@ -29,65 +29,65 @@
  * @coverage swt.model.widgets
  */
 public final class ItemsHierarchyProvider extends HierarchyProvider {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // HierarchyProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Object getParentObject(Object object) throws Exception {
-    if (isSuccessorOf(object, "org.eclipse.swt.widgets.TableItem")
-        || isSuccessorOf(object, "org.eclipse.swt.widgets.TableColumn")
-        || isSuccessorOf(object, "org.eclipse.swt.widgets.TreeItem")
-        || isSuccessorOf(object, "org.eclipse.swt.widgets.Menu")) {
-      return ReflectionUtils.invokeMethod(object, "getParent()");
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// HierarchyProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Object getParentObject(Object object) throws Exception {
+		if (isSuccessorOf(object, "org.eclipse.swt.widgets.TableItem")
+				|| isSuccessorOf(object, "org.eclipse.swt.widgets.TableColumn")
+				|| isSuccessorOf(object, "org.eclipse.swt.widgets.TreeItem")
+				|| isSuccessorOf(object, "org.eclipse.swt.widgets.Menu")) {
+			return ReflectionUtils.invokeMethod(object, "getParent()");
+		}
+		return null;
+	}
 
-  @Override
-  public Object[] getChildrenObjects(Object object) throws Exception {
-    if (isSuccessorOf(object, "org.eclipse.swt.widgets.Table")) {
-      List<Object> childrenObjects = Lists.newArrayList();
-      Collections.addAll(childrenObjects, getItems(object, "getColumns"));
-      Collections.addAll(childrenObjects, getItems(object, "getItems"));
-      return childrenObjects.toArray(new Object[childrenObjects.size()]);
-    }
-    if (isSuccessorOf(object, "org.eclipse.swt.widgets.Tree")) {
-      List<Object> childrenObjects = Lists.newArrayList();
-      Collections.addAll(childrenObjects, getItems(object, "getItems"));
-      return childrenObjects.toArray(new Object[childrenObjects.size()]);
-    }
-    if (isSuccessorOf(object, "org.eclipse.swt.widgets.Menu")) {
-      return getItems(object, "getItems");
-    }
-    // menu item may have a child menu
-    if (isSuccessorOf(object, "org.eclipse.swt.widgets.MenuItem")) {
-      Object menu = ReflectionUtils.invokeMethod(object, "getMenu()");
-      if (menu != null) {
-        return new Object[]{menu};
-      }
-    }
-    // no children
-    return ArrayUtils.EMPTY_OBJECT_ARRAY;
-  }
+	@Override
+	public Object[] getChildrenObjects(Object object) throws Exception {
+		if (isSuccessorOf(object, "org.eclipse.swt.widgets.Table")) {
+			List<Object> childrenObjects = Lists.newArrayList();
+			Collections.addAll(childrenObjects, getItems(object, "getColumns"));
+			Collections.addAll(childrenObjects, getItems(object, "getItems"));
+			return childrenObjects.toArray(new Object[childrenObjects.size()]);
+		}
+		if (isSuccessorOf(object, "org.eclipse.swt.widgets.Tree")) {
+			List<Object> childrenObjects = Lists.newArrayList();
+			Collections.addAll(childrenObjects, getItems(object, "getItems"));
+			return childrenObjects.toArray(new Object[childrenObjects.size()]);
+		}
+		if (isSuccessorOf(object, "org.eclipse.swt.widgets.Menu")) {
+			return getItems(object, "getItems");
+		}
+		// menu item may have a child menu
+		if (isSuccessorOf(object, "org.eclipse.swt.widgets.MenuItem")) {
+			Object menu = ReflectionUtils.invokeMethod(object, "getMenu()");
+			if (menu != null) {
+				return new Object[]{menu};
+			}
+		}
+		// no children
+		return ArrayUtils.EMPTY_OBJECT_ARRAY;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if given {@link Object} has compatible type.
-   */
-  private static boolean isSuccessorOf(Object object, String requiredClass) throws Exception {
-    return ReflectionUtils.isSuccessorOf(object.getClass(), requiredClass);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if given {@link Object} has compatible type.
+	 */
+	private static boolean isSuccessorOf(Object object, String requiredClass) throws Exception {
+		return ReflectionUtils.isSuccessorOf(object.getClass(), requiredClass);
+	}
 
-  /**
-   * @return the result of "get array" method, such as {@link Table#getItems()}.
-   */
-  private static Object[] getItems(Object object, String methodName) throws Exception {
-    return (Object[]) ReflectionUtils.invokeMethod2(object, methodName);
-  }
+	/**
+	 * @return the result of "get array" method, such as {@link Table#getItems()}.
+	 */
+	private static Object[] getItems(Object object, String methodName) throws Exception {
+		return (Object[]) ReflectionUtils.invokeMethod2(object, methodName);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/exposed/ViewersHierarchyProvider.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/exposed/ViewersHierarchyProvider.java
index b57cf93e8..cd5dea71b 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/exposed/ViewersHierarchyProvider.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/exposed/ViewersHierarchyProvider.java
@@ -23,19 +23,19 @@
  * @coverage swt.model.widgets
  */
 public final class ViewersHierarchyProvider extends HierarchyProvider {
-  @Override
-  public Object getParentObject(Object object) throws Exception {
-    if (ReflectionUtils.isSuccessorOf(object.getClass(), "org.eclipse.jface.viewers.Viewer")) {
-      Object control = ReflectionUtils.invokeMethod(object, "getControl()");
-      return ReflectionUtils.invokeMethod(control, "getParent()");
-    }
-    return null;
-  }
+	@Override
+	public Object getParentObject(Object object) throws Exception {
+		if (ReflectionUtils.isSuccessorOf(object.getClass(), "org.eclipse.jface.viewers.Viewer")) {
+			Object control = ReflectionUtils.invokeMethod(object, "getControl()");
+			return ReflectionUtils.invokeMethod(control, "getParent()");
+		}
+		return null;
+	}
 
-  @Override
-  public void add(JavaInfo host, JavaInfo exposed) throws Exception {
-    if (exposed instanceof ViewerInfo && host instanceof CompositeInfo) {
-      ((ViewerInfo) exposed).getWrapper().configureHierarchy(host);
-    }
-  }
+	@Override
+	public void add(JavaInfo host, JavaInfo exposed) throws Exception {
+		if (exposed instanceof ViewerInfo && host instanceof CompositeInfo) {
+			((ViewerInfo) exposed).getWrapper().configureHierarchy(host);
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/live/SwtLiveCacheEntry.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/live/SwtLiveCacheEntry.java
index 4b123d295..bfd82f159 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/live/SwtLiveCacheEntry.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/live/SwtLiveCacheEntry.java
@@ -21,71 +21,71 @@
  * @coverage swt.model.widgets.live
  */
 public final class SwtLiveCacheEntry implements ILiveCacheEntry {
-  private Image m_image;
-  private int m_style;
-  private int m_baseline;
+	private Image m_image;
+	private int m_style;
+	private int m_baseline;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IDisposable
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void dispose() {
-    if (m_image != null && !m_image.isDisposed()) {
-      m_image.dispose();
-      m_image = null;
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IDisposable
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void dispose() {
+		if (m_image != null && !m_image.isDisposed()) {
+			m_image.dispose();
+			m_image = null;
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Image
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets the image to be cached.
-   */
-  public void setImage(Image image) {
-    m_image = image;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Image
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets the image to be cached.
+	 */
+	public void setImage(Image image) {
+		m_image = image;
+	}
 
-  /**
-   * @return the cached image.
-   */
-  public Image getImage() {
-    return m_image;
-  }
+	/**
+	 * @return the cached image.
+	 */
+	public Image getImage() {
+		return m_image;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Style
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets the style value to be cached.
-   */
-  public void setStyle(int style) {
-    m_style = style;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Style
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets the style value to be cached.
+	 */
+	public void setStyle(int style) {
+		m_style = style;
+	}
 
-  /**
-   * @return the cached style value.
-   */
-  public int getStyle() {
-    return m_style;
-  }
+	/**
+	 * @return the cached style value.
+	 */
+	public int getStyle() {
+		return m_style;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Baseline
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void setBaseline(int baseline) {
-    m_baseline = baseline;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Baseline
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void setBaseline(int baseline) {
+		m_baseline = baseline;
+	}
 
-  public int getBaseline() {
-    return m_baseline;
-  }
+	public int getBaseline() {
+		return m_baseline;
+	}
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/live/SwtLiveManager.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/live/SwtLiveManager.java
index e552f5b6a..fa41981e3 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/live/SwtLiveManager.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/live/SwtLiveManager.java
@@ -32,118 +32,118 @@
  * @coverage swt.model.widgets.live
  */
 public class SwtLiveManager extends AbstractLiveManager {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public SwtLiveManager(AbstractComponentInfo component) {
-    super(component);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public SwtLiveManager(AbstractComponentInfo component) {
+		super(component);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AbstractLiveComponentsManager
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected AbstractComponentInfo createLiveComponent() throws Exception {
-    // prepare empty Shell
-    CompositeInfo shell;
-    {
-      String[] sourceLines =
-          new String[]{
-              "  org.eclipse.swt.widgets.Shell __wbp_shell = "
-                  + "new org.eclipse.swt.widgets.Shell(org.eclipse.swt.SWT.NONE);",
-              "  __wbp_shell.setLayout(new org.eclipse.swt.layout.RowLayout());"};
-      shell = (CompositeInfo) parse(sourceLines);
-    }
-    // prepare component
-    WidgetInfo widget = createClone();
-    widget.setVariableSupport(new EmptyPureVariableSupport(m_component));
-    // add component
-    addWidget(shell, widget);
-    // apply forced size
-    {
-      String forcedWidthString =
-          JavaInfoUtils.getParameter(m_component, "liveComponent.forcedSize.width");
-      String forcedHeightString =
-          JavaInfoUtils.getParameter(m_component, "liveComponent.forcedSize.height");
-      if (forcedWidthString != null && forcedHeightString != null) {
-        RowDataInfo rowData = RowLayoutInfo.getRowData((ControlInfo) widget);
-        rowData.setWidth(Integer.parseInt(forcedWidthString));
-        rowData.setHeight(Integer.parseInt(forcedHeightString));
-      }
-    }
-    // OK, process this widget
-    return widget;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AbstractLiveComponentsManager
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected AbstractComponentInfo createLiveComponent() throws Exception {
+		// prepare empty Shell
+		CompositeInfo shell;
+		{
+			String[] sourceLines =
+					new String[]{
+							"  org.eclipse.swt.widgets.Shell __wbp_shell = "
+									+ "new org.eclipse.swt.widgets.Shell(org.eclipse.swt.SWT.NONE);",
+			"  __wbp_shell.setLayout(new org.eclipse.swt.layout.RowLayout());"};
+			shell = (CompositeInfo) parse(sourceLines);
+		}
+		// prepare component
+		WidgetInfo widget = createClone();
+		widget.setVariableSupport(new EmptyPureVariableSupport(m_component));
+		// add component
+		addWidget(shell, widget);
+		// apply forced size
+		{
+			String forcedWidthString =
+					JavaInfoUtils.getParameter(m_component, "liveComponent.forcedSize.width");
+			String forcedHeightString =
+					JavaInfoUtils.getParameter(m_component, "liveComponent.forcedSize.height");
+			if (forcedWidthString != null && forcedHeightString != null) {
+				RowDataInfo rowData = RowLayoutInfo.getRowData((ControlInfo) widget);
+				rowData.setWidth(Integer.parseInt(forcedWidthString));
+				rowData.setHeight(Integer.parseInt(forcedHeightString));
+			}
+		}
+		// OK, process this widget
+		return widget;
+	}
 
-  /**
-   * Adds widget onto parent.
-   */
-  protected void addWidget(CompositeInfo shell, WidgetInfo widget) throws Exception {
-    RowLayoutInfo rowLayoutInfo = (RowLayoutInfo) shell.getLayout();
-    rowLayoutInfo.command_CREATE((ControlInfo) widget, null);
-  }
+	/**
+	 * Adds widget onto parent.
+	 */
+	protected void addWidget(CompositeInfo shell, WidgetInfo widget) throws Exception {
+		RowLayoutInfo rowLayoutInfo = (RowLayoutInfo) shell.getLayout();
+		rowLayoutInfo.command_CREATE((ControlInfo) widget, null);
+	}
 
-  @Override
-  protected ILiveCacheEntry createComponentCacheEntry(AbstractComponentInfo liveComponentInfo) {
-    SwtLiveCacheEntry cacheEntry = new SwtLiveCacheEntry();
-    // image
-    cacheEntry.setImage(liveComponentInfo.getImage());
-    liveComponentInfo.setImage(null);
-    // style
-    cacheEntry.setStyle(((WidgetInfo) liveComponentInfo).getStyle());
-    // baseline
-    cacheEntry.setBaseline(liveComponentInfo.getBaseline());
-    // OK, we have filled cache entry
-    return cacheEntry;
-  }
+	@Override
+	protected ILiveCacheEntry createComponentCacheEntry(AbstractComponentInfo liveComponentInfo) {
+		SwtLiveCacheEntry cacheEntry = new SwtLiveCacheEntry();
+		// image
+		cacheEntry.setImage(liveComponentInfo.getImage());
+		liveComponentInfo.setImage(null);
+		// style
+		cacheEntry.setStyle(((WidgetInfo) liveComponentInfo).getStyle());
+		// baseline
+		cacheEntry.setBaseline(liveComponentInfo.getBaseline());
+		// OK, we have filled cache entry
+		return cacheEntry;
+	}
 
-  @Override
-  protected ILiveCacheEntry createComponentCacheEntryEx(Throwable e) {
-    SwtLiveCacheEntry cacheEntry = new SwtLiveCacheEntry();
-    // set image
-    {
-      Image image = createImageForException(e);
-      cacheEntry.setImage(image);
-    }
-    // done
-    return cacheEntry;
-  }
+	@Override
+	protected ILiveCacheEntry createComponentCacheEntryEx(Throwable e) {
+		SwtLiveCacheEntry cacheEntry = new SwtLiveCacheEntry();
+		// set image
+		{
+			Image image = createImageForException(e);
+			cacheEntry.setImage(image);
+		}
+		// done
+		return cacheEntry;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link Image} of this component.
-   */
-  public Image getImage() {
-    // get image from memento during paste
-    {
-      Image image = ComponentInfoMemento.getImage(m_component);
-      if (image != null) {
-        return image;
-      }
-    }
-    // get from cache
-    return ((SwtLiveCacheEntry) getCachedEntry()).getImage();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link Image} of this component.
+	 */
+	public Image getImage() {
+		// get image from memento during paste
+		{
+			Image image = ComponentInfoMemento.getImage(m_component);
+			if (image != null) {
+				return image;
+			}
+		}
+		// get from cache
+		return ((SwtLiveCacheEntry) getCachedEntry()).getImage();
+	}
 
-  /**
-   * @return the style of this component.
-   */
-  public int getStyle() {
-    return ((SwtLiveCacheEntry) getCachedEntry()).getStyle();
-  }
+	/**
+	 * @return the style of this component.
+	 */
+	public int getStyle() {
+		return ((SwtLiveCacheEntry) getCachedEntry()).getStyle();
+	}
 
-  /**
-   * @return the baseline of this component.
-   */
-  public int getBaseline() {
-    return ((SwtLiveCacheEntry) getCachedEntry()).getBaseline();
-  }
+	/**
+	 * @return the baseline of this component.
+	 */
+	public int getBaseline() {
+		return ((SwtLiveCacheEntry) getCachedEntry()).getBaseline();
+	}
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/live/menu/MenuItemLiveManager.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/live/menu/MenuItemLiveManager.java
index b4dddb0bd..c8164c31c 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/live/menu/MenuItemLiveManager.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/live/menu/MenuItemLiveManager.java
@@ -29,36 +29,36 @@
  * @coverage swt.model.widgets.live
  */
 public class MenuItemLiveManager extends SwtLiveManager {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public MenuItemLiveManager(AbstractComponentInfo component) {
-    super(component);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public MenuItemLiveManager(AbstractComponentInfo component) {
+		super(component);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // LiveComponentsManager
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void addWidget(CompositeInfo shell, WidgetInfo widget) throws Exception {
-    AstEditor editor = shell.getEditor();
-    // add menu
-    MenuInfo menu;
-    {
-      menu =
-          (MenuInfo) JavaInfoUtils.createJavaInfo(
-              editor,
-              "org.eclipse.swt.widgets.Menu",
-              new ConstructorCreationSupport("bar", false));
-      AssociationObject association =
-          AssociationObjects.invocationChild("%parent%.setMenuBar(%child%)", true);
-      JavaInfoUtils.add(menu, association, shell, null);
-    }
-    // add item
-    JavaInfoUtils.add(widget, null, menu, null);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// LiveComponentsManager
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void addWidget(CompositeInfo shell, WidgetInfo widget) throws Exception {
+		AstEditor editor = shell.getEditor();
+		// add menu
+		MenuInfo menu;
+		{
+			menu =
+					(MenuInfo) JavaInfoUtils.createJavaInfo(
+							editor,
+							"org.eclipse.swt.widgets.Menu",
+							new ConstructorCreationSupport("bar", false));
+			AssociationObject association =
+					AssociationObjects.invocationChild("%parent%.setMenuBar(%child%)", true);
+			JavaInfoUtils.add(menu, association, shell, null);
+		}
+		// add item
+		JavaInfoUtils.add(widget, null, menu, null);
+	}
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/live/menu/MenuLiveManager.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/live/menu/MenuLiveManager.java
index 95a95ff7a..ffc880d59 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/live/menu/MenuLiveManager.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/live/menu/MenuLiveManager.java
@@ -28,30 +28,30 @@
  * @coverage swt.model.widgets.live
  */
 public class MenuLiveManager extends SwtLiveManager {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public MenuLiveManager(AbstractComponentInfo component) {
-    super(component);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public MenuLiveManager(AbstractComponentInfo component) {
+		super(component);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // LiveComponentsManager
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void addWidget(CompositeInfo shell, WidgetInfo widget) throws Exception {
-    JavaInfoUtils.add(widget, getAssociation_(widget), shell, null);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// LiveComponentsManager
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void addWidget(CompositeInfo shell, WidgetInfo widget) throws Exception {
+		JavaInfoUtils.add(widget, getAssociation_(widget), shell, null);
+	}
 
-  private static AssociationObject getAssociation_(WidgetInfo widget) throws Exception {
-    InvocationChildAssociation asBar =
-        new InvocationChildAssociation("%parent%.setMenuBar(%child%)");
-    InvocationChildAssociation asSub = new InvocationChildAssociation("%parent%.setMenu(%child%)");
-    Association association = new CompoundAssociation(asBar, asSub);
-    return new AssociationObject(association, true);
-  }
+	private static AssociationObject getAssociation_(WidgetInfo widget) throws Exception {
+		InvocationChildAssociation asBar =
+				new InvocationChildAssociation("%parent%.setMenuBar(%child%)");
+		InvocationChildAssociation asSub = new InvocationChildAssociation("%parent%.setMenu(%child%)");
+		Association association = new CompoundAssociation(asBar, asSub);
+		return new AssociationObject(association, true);
+	}
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/menu/MenuInfo.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/menu/MenuInfo.java
index f8f0aef7c..76cce2dd6 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/menu/MenuInfo.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/menu/MenuInfo.java
@@ -70,451 +70,451 @@
  * @coverage swt.model.widgets.menu
  */
 public final class MenuInfo extends WidgetInfo implements IAdaptable {
-  private final MenuInfo m_this = this;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public MenuInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-    putPopupAboveOtherChildren();
-    addClipboardSupport();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Broadcasts
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void putPopupAboveOtherChildren() {
-    addBroadcastListener(new ObjectInfoChildrenGraphical() {
-      @Override
-      public void invoke(List<ObjectInfo> children) throws Exception {
-        if (children.remove(m_this)) {
-          children.add(0, m_this);
-        }
-      }
-    });
-  }
-
-  private void addClipboardSupport() {
-    addBroadcastListener(new JavaEventListener() {
-      @Override
-      public void clipboardCopy_Argument(JavaInfo javaInfo,
-          ParameterDescription parameter,
-          Expression argument,
-          String[] source) throws Exception {
-        if (javaInfo == m_this && parameter.getIndex() == 0) {
-          source[0] = "%parent%";
-        }
-      }
-
-      @Override
-      public void clipboardCopy(JavaInfo javaInfo, List<ClipboardCommand> commands)
-          throws Exception {
-        // copy items
-        if (javaInfo == m_this) {
-          for (MenuItemInfo item : getChildrenItems()) {
-            final JavaInfoMemento itemMemento = JavaInfoMemento.createMemento(item);
-            commands.add(new ClipboardCommand() {
-              private static final long serialVersionUID = 0L;
-
-              @Override
-              public void execute(JavaInfo javaInfo) throws Exception {
-                MenuItemInfo item = (MenuItemInfo) itemMemento.create(javaInfo);
-                IMenuPolicy policy = MenuObjectInfoUtils.getMenuInfo(javaInfo).getPolicy();
-                policy.commandCreate(item, null);
-                itemMemento.apply();
-              }
-            });
-          }
-        }
-      }
-    });
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void refresh_afterCreate() throws Exception {
-    // add a placeholder
-    Object[] items = MenuSupport.getItems(getObject());
-    if (items.length == 0) {
-      MenuSupport.addPlaceholder(getObject());
-    }
-    super.refresh_afterCreate();
-  }
-
-  @Override
-  protected void refresh_fetch() throws Exception {
-    // fetch menu visual data
-    DisplayEventListener displayListener = getBroadcast(DisplayEventListener.class);
-    MenuVisualData visualData = null;
-    try {
-      displayListener.beforeMessagesLoop();
-      // On windows, when one creates a new entry the image for the menu is not displayed correctly
-      Display.getDefault().readAndDispatch();
-      visualData = ToolkitSupport.fetchMenuVisualData(getObject());//
-    } finally {
-      displayListener.afterMessagesLoop();
-    }
-    setModelBounds(visualData.m_menuBounds);
-    setBounds(visualData.m_menuBounds);
-    setImage(visualData.m_menuImage);
-    // set child items bounds
-    List<MenuItemInfo> items = getChildrenItems();
-    for (int i = 0; i < items.size(); ++i) {
-      MenuItemInfo itemInfo = items.get(i);
-      itemInfo.setModelBounds(visualData.m_itemBounds.get(i));
-    }
-    super.refresh_fetch();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Live support
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected SwtLiveManager getLiveComponentsManager() {
-    return new MenuLiveManager(this);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link MenuItemInfo} children.
-   */
-  public List<MenuItemInfo> getChildrenItems() {
-    return getChildren(MenuItemInfo.class);
-  }
-
-  /**
-   * @return <code>true</code> if this {@link MenuInfo} is bar menu.
-   */
-  public boolean isBar() {
-    return (getStyle() & SwtSupport.BAR) != 0;
-  }
-
-  /**
-   * @return <code>true</code> if this {@link MenuInfo} is popup menu.
-   */
-  public boolean isPopup() {
-    return (getStyle() & SwtSupport.POP_UP) != 0;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final IObjectPresentation m_presentation = new MenuStylePresentation(this);
-
-  @Override
-  public IObjectPresentation getPresentation() {
-    return m_presentation;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds this new {@link MenuInfo} on given {@link WidgetInfo}.
-   */
-  public void command_CREATE(WidgetInfo parent) throws Exception {
-    JavaInfoUtils.add(this, command_getAssociation(), parent, null);
-  }
-
-  /**
-   * Moves this existing {@link MenuInfo} on given {@link WidgetInfo}.
-   */
-  public void command_ADD(WidgetInfo parent) throws Exception {
-    JavaInfoUtils.move(this, command_getAssociation(), parent, null);
-    replaceParentReferenceInCreation(parent);
-  }
-
-  /**
-   * We can not mark constructor argument as parent, because this is just no true - "physical"
-   * parent for {@link Menu} is {@link Decorations}, and "logical" (which we need) association is
-   * established using using {@link Control#setMenu(Menu)} or {@link MenuItem#setMenu(Menu)}.
-   * <p>
-   * However, we still want replace argument of constructor, at least to be consistent with other
-   * SWT widgets. So, we need separate action to do this.
-   */
-  private void replaceParentReferenceInCreation(WidgetInfo parent) throws Exception {
-    if (getCreationSupport() instanceof ConstructorCreationSupport) {
-      ConstructorCreationSupport creationSupport =
-          (ConstructorCreationSupport) getCreationSupport();
-      ClassInstanceCreation creation = creationSupport.getCreation();
-      NodeTarget target = JavaInfoUtils.getNodeTarget_afterCreation(this);
-      String parentReference = parent.getVariableSupport().getReferenceExpression(target);
-      getEditor().replaceCreationArguments(creation, Lists.newArrayList(parentReference));
-    }
-  }
-
-  /**
-   * @return the {@link AssociationObjec} of this {@link MenuInfo} with its parent.
-   */
-  private AssociationObject command_getAssociation() throws Exception {
-    if (isBar()) {
-      return AssociationObjects.invocationChild("%parent%.setMenuBar(%child%)", true);
-    } else {
-      return AssociationObjects.invocationChild("%parent%.setMenu(%child%)", true);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IAdaptable
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final IMenuPopupInfo m_popupImpl = new MenuPopupImpl();
-  private final IMenuInfo m_menuImpl = new MenuImpl();
-
-  @Override
-  public <T> T getAdapter(Class<T> adapter) {
-    if (adapter.isAssignableFrom(IMenuInfo.class)) {
-      return adapter.cast(m_menuImpl);
-    }
-    if (adapter.isAssignableFrom(IMenuPopupInfo.class)) {
-      return adapter.cast(m_popupImpl);
-    }
-    return null;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AbstractMenuImpl
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Abstract superclass for {@link IMenuObjectInfo} implementations.
-   *
-   * @author scheglov_ke
-   */
-  private abstract class MenuAbstractImpl extends JavaMenuMenuObject {
-    public MenuAbstractImpl() {
-      super(m_this);
-    }
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IMenuPopupInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Implementation of {@link IMenuPopupInfo}.
-   *
-   * @author scheglov_ke
-   */
-  private final class MenuPopupImpl extends MenuAbstractImpl implements IMenuPopupInfo {
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Model
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public Object getModel() {
-      return m_this;
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Presentation
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public Image getImage() {
-      return ExecutionUtils.runObjectLog(new RunnableObjectEx<Image>() {
-        @Override
-        public Image runObject() throws Exception {
-          return getPresentation().getIcon();
-        }
-      }, getDescription().getIcon());
-    }
-
-    @Override
-    public Rectangle getBounds() {
-      Image image = getImage();
-      return new Rectangle(0, 0, image.getBounds().width, image.getBounds().height);
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // IMenuPopupInfo
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public IMenuInfo getMenu() {
-      return m_menuImpl;
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Policy
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public IMenuPolicy getPolicy() {
-      return IMenuPolicy.NOOP;
-    }
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IMenuInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Implementation of {@link IMenuInfo}.
-   *
-   * @author scheglov_ke
-   */
-  private final class MenuImpl extends MenuAbstractImpl implements IMenuInfo, IMenuPolicy {
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Model
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public Object getModel() {
-      return isPopup() ? this : m_this;
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Presentation
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public Image getImage() {
-      return m_this.getImage();
-    }
-
-    @Override
-    public Rectangle getBounds() {
-      return m_this.getBounds();
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Access
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public boolean isHorizontal() {
-      return isBar();
-    }
-
-    @Override
-    public List<IMenuItemInfo> getItems() {
-      List<IMenuItemInfo> items = Lists.newArrayList();
-      for (MenuItemInfo item : getChildrenItems()) {
-        items.add(MenuObjectInfoUtils.getMenuItemInfo(item));
-      }
-      return items;
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Policy
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public IMenuPolicy getPolicy() {
-      return this;
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Validation
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public boolean validateCreate(Object newObject) {
-      return newObject instanceof MenuItemInfo;
-    }
-
-    @Override
-    @SuppressWarnings("unchecked")
-    public boolean validatePaste(final Object mementoObject) {
-      return ExecutionUtils.runObjectLog(new RunnableObjectEx<Boolean>() {
-        @Override
-        public Boolean runObject() throws Exception {
-          List<JavaInfoMemento> mementos = (List<JavaInfoMemento>) mementoObject;
-          for (JavaInfoMemento memento : mementos) {
-            JavaInfo component = memento.create(m_this);
-            if (!(component instanceof MenuItemInfo)) {
-              return false;
-            }
-          }
-          return true;
-        }
-      }, false);
-    }
-
-    @Override
-    public boolean validateMove(Object object) {
-      if (object instanceof MenuItemInfo) {
-        MenuItemInfo item = (MenuItemInfo) object;
-        // don't move item on its child menu
-        return !item.isParentOf(m_this);
-      }
-      return false;
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Operations
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public void commandCreate(Object newObject, Object nextObject) throws Exception {
-      MenuItemInfo newItem = (MenuItemInfo) newObject;
-      MenuItemInfo nextItem = (MenuItemInfo) nextObject;
-      if ((newItem.getStyle() & SwtSupport.SEPARATOR) != 0) {
-        VariableSupport variableSupport = new EmptyPureVariableSupport(newItem);
-        StatementGenerator statementGenerator = GenerationUtils.getStatementGenerator(newItem);
-        JavaInfoUtils.add(newItem, variableSupport, statementGenerator, null, m_this, nextItem);
-      } else {
-        JavaInfoUtils.add(newItem, null, m_this, nextItem);
-      }
-      // schedule selection
-      MenuObjectInfoUtils.setSelectingObject(newItem);
-    }
-
-    @Override
-    @SuppressWarnings("unchecked")
-    public List<?> commandPaste(Object mementoObject, Object nextObject) throws Exception {
-      List<MenuItemInfo> pastedObjects = Lists.newArrayList();
-      List<JavaInfoMemento> mementos = (List<JavaInfoMemento>) mementoObject;
-      for (JavaInfoMemento memento : mementos) {
-        MenuItemInfo item = (MenuItemInfo) memento.create(m_this);
-        commandCreate(item, nextObject);
-        memento.apply();
-        pastedObjects.add(item);
-      }
-      return pastedObjects;
-    }
-
-    @Override
-    public void commandMove(Object object, Object nextObject) throws Exception {
-      MenuItemInfo item = (MenuItemInfo) object;
-      MenuItemInfo nextItem = (MenuItemInfo) nextObject;
-      JavaInfoUtils.move(item, null, m_this, nextItem);
-      // schedule selection
-      MenuObjectInfoUtils.setSelectingObject(item);
-    }
-  }
+	private final MenuInfo m_this = this;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public MenuInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+		putPopupAboveOtherChildren();
+		addClipboardSupport();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Broadcasts
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void putPopupAboveOtherChildren() {
+		addBroadcastListener(new ObjectInfoChildrenGraphical() {
+			@Override
+			public void invoke(List<ObjectInfo> children) throws Exception {
+				if (children.remove(m_this)) {
+					children.add(0, m_this);
+				}
+			}
+		});
+	}
+
+	private void addClipboardSupport() {
+		addBroadcastListener(new JavaEventListener() {
+			@Override
+			public void clipboardCopy_Argument(JavaInfo javaInfo,
+					ParameterDescription parameter,
+					Expression argument,
+					String[] source) throws Exception {
+				if (javaInfo == m_this && parameter.getIndex() == 0) {
+					source[0] = "%parent%";
+				}
+			}
+
+			@Override
+			public void clipboardCopy(JavaInfo javaInfo, List<ClipboardCommand> commands)
+					throws Exception {
+				// copy items
+				if (javaInfo == m_this) {
+					for (MenuItemInfo item : getChildrenItems()) {
+						final JavaInfoMemento itemMemento = JavaInfoMemento.createMemento(item);
+						commands.add(new ClipboardCommand() {
+							private static final long serialVersionUID = 0L;
+
+							@Override
+							public void execute(JavaInfo javaInfo) throws Exception {
+								MenuItemInfo item = (MenuItemInfo) itemMemento.create(javaInfo);
+								IMenuPolicy policy = MenuObjectInfoUtils.getMenuInfo(javaInfo).getPolicy();
+								policy.commandCreate(item, null);
+								itemMemento.apply();
+							}
+						});
+					}
+				}
+			}
+		});
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void refresh_afterCreate() throws Exception {
+		// add a placeholder
+		Object[] items = MenuSupport.getItems(getObject());
+		if (items.length == 0) {
+			MenuSupport.addPlaceholder(getObject());
+		}
+		super.refresh_afterCreate();
+	}
+
+	@Override
+	protected void refresh_fetch() throws Exception {
+		// fetch menu visual data
+		DisplayEventListener displayListener = getBroadcast(DisplayEventListener.class);
+		MenuVisualData visualData = null;
+		try {
+			displayListener.beforeMessagesLoop();
+			// On windows, when one creates a new entry the image for the menu is not displayed correctly
+			Display.getDefault().readAndDispatch();
+			visualData = ToolkitSupport.fetchMenuVisualData(getObject());//
+		} finally {
+			displayListener.afterMessagesLoop();
+		}
+		setModelBounds(visualData.m_menuBounds);
+		setBounds(visualData.m_menuBounds);
+		setImage(visualData.m_menuImage);
+		// set child items bounds
+		List<MenuItemInfo> items = getChildrenItems();
+		for (int i = 0; i < items.size(); ++i) {
+			MenuItemInfo itemInfo = items.get(i);
+			itemInfo.setModelBounds(visualData.m_itemBounds.get(i));
+		}
+		super.refresh_fetch();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Live support
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected SwtLiveManager getLiveComponentsManager() {
+		return new MenuLiveManager(this);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link MenuItemInfo} children.
+	 */
+	public List<MenuItemInfo> getChildrenItems() {
+		return getChildren(MenuItemInfo.class);
+	}
+
+	/**
+	 * @return <code>true</code> if this {@link MenuInfo} is bar menu.
+	 */
+	public boolean isBar() {
+		return (getStyle() & SwtSupport.BAR) != 0;
+	}
+
+	/**
+	 * @return <code>true</code> if this {@link MenuInfo} is popup menu.
+	 */
+	public boolean isPopup() {
+		return (getStyle() & SwtSupport.POP_UP) != 0;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final IObjectPresentation m_presentation = new MenuStylePresentation(this);
+
+	@Override
+	public IObjectPresentation getPresentation() {
+		return m_presentation;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds this new {@link MenuInfo} on given {@link WidgetInfo}.
+	 */
+	public void command_CREATE(WidgetInfo parent) throws Exception {
+		JavaInfoUtils.add(this, command_getAssociation(), parent, null);
+	}
+
+	/**
+	 * Moves this existing {@link MenuInfo} on given {@link WidgetInfo}.
+	 */
+	public void command_ADD(WidgetInfo parent) throws Exception {
+		JavaInfoUtils.move(this, command_getAssociation(), parent, null);
+		replaceParentReferenceInCreation(parent);
+	}
+
+	/**
+	 * We can not mark constructor argument as parent, because this is just no true - "physical"
+	 * parent for {@link Menu} is {@link Decorations}, and "logical" (which we need) association is
+	 * established using using {@link Control#setMenu(Menu)} or {@link MenuItem#setMenu(Menu)}.
+	 * <p>
+	 * However, we still want replace argument of constructor, at least to be consistent with other
+	 * SWT widgets. So, we need separate action to do this.
+	 */
+	private void replaceParentReferenceInCreation(WidgetInfo parent) throws Exception {
+		if (getCreationSupport() instanceof ConstructorCreationSupport) {
+			ConstructorCreationSupport creationSupport =
+					(ConstructorCreationSupport) getCreationSupport();
+			ClassInstanceCreation creation = creationSupport.getCreation();
+			NodeTarget target = JavaInfoUtils.getNodeTarget_afterCreation(this);
+			String parentReference = parent.getVariableSupport().getReferenceExpression(target);
+			getEditor().replaceCreationArguments(creation, Lists.newArrayList(parentReference));
+		}
+	}
+
+	/**
+	 * @return the {@link AssociationObjec} of this {@link MenuInfo} with its parent.
+	 */
+	private AssociationObject command_getAssociation() throws Exception {
+		if (isBar()) {
+			return AssociationObjects.invocationChild("%parent%.setMenuBar(%child%)", true);
+		} else {
+			return AssociationObjects.invocationChild("%parent%.setMenu(%child%)", true);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IAdaptable
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final IMenuPopupInfo m_popupImpl = new MenuPopupImpl();
+	private final IMenuInfo m_menuImpl = new MenuImpl();
+
+	@Override
+	public <T> T getAdapter(Class<T> adapter) {
+		if (adapter.isAssignableFrom(IMenuInfo.class)) {
+			return adapter.cast(m_menuImpl);
+		}
+		if (adapter.isAssignableFrom(IMenuPopupInfo.class)) {
+			return adapter.cast(m_popupImpl);
+		}
+		return null;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AbstractMenuImpl
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Abstract superclass for {@link IMenuObjectInfo} implementations.
+	 *
+	 * @author scheglov_ke
+	 */
+	private abstract class MenuAbstractImpl extends JavaMenuMenuObject {
+		public MenuAbstractImpl() {
+			super(m_this);
+		}
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IMenuPopupInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Implementation of {@link IMenuPopupInfo}.
+	 *
+	 * @author scheglov_ke
+	 */
+	private final class MenuPopupImpl extends MenuAbstractImpl implements IMenuPopupInfo {
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Model
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public Object getModel() {
+			return m_this;
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Presentation
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public Image getImage() {
+			return ExecutionUtils.runObjectLog(new RunnableObjectEx<Image>() {
+				@Override
+				public Image runObject() throws Exception {
+					return getPresentation().getIcon();
+				}
+			}, getDescription().getIcon());
+		}
+
+		@Override
+		public Rectangle getBounds() {
+			Image image = getImage();
+			return new Rectangle(0, 0, image.getBounds().width, image.getBounds().height);
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// IMenuPopupInfo
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public IMenuInfo getMenu() {
+			return m_menuImpl;
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Policy
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public IMenuPolicy getPolicy() {
+			return IMenuPolicy.NOOP;
+		}
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IMenuInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Implementation of {@link IMenuInfo}.
+	 *
+	 * @author scheglov_ke
+	 */
+	private final class MenuImpl extends MenuAbstractImpl implements IMenuInfo, IMenuPolicy {
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Model
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public Object getModel() {
+			return isPopup() ? this : m_this;
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Presentation
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public Image getImage() {
+			return m_this.getImage();
+		}
+
+		@Override
+		public Rectangle getBounds() {
+			return m_this.getBounds();
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Access
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public boolean isHorizontal() {
+			return isBar();
+		}
+
+		@Override
+		public List<IMenuItemInfo> getItems() {
+			List<IMenuItemInfo> items = Lists.newArrayList();
+			for (MenuItemInfo item : getChildrenItems()) {
+				items.add(MenuObjectInfoUtils.getMenuItemInfo(item));
+			}
+			return items;
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Policy
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public IMenuPolicy getPolicy() {
+			return this;
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Validation
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public boolean validateCreate(Object newObject) {
+			return newObject instanceof MenuItemInfo;
+		}
+
+		@Override
+		@SuppressWarnings("unchecked")
+		public boolean validatePaste(final Object mementoObject) {
+			return ExecutionUtils.runObjectLog(new RunnableObjectEx<Boolean>() {
+				@Override
+				public Boolean runObject() throws Exception {
+					List<JavaInfoMemento> mementos = (List<JavaInfoMemento>) mementoObject;
+					for (JavaInfoMemento memento : mementos) {
+						JavaInfo component = memento.create(m_this);
+						if (!(component instanceof MenuItemInfo)) {
+							return false;
+						}
+					}
+					return true;
+				}
+			}, false);
+		}
+
+		@Override
+		public boolean validateMove(Object object) {
+			if (object instanceof MenuItemInfo) {
+				MenuItemInfo item = (MenuItemInfo) object;
+				// don't move item on its child menu
+				return !item.isParentOf(m_this);
+			}
+			return false;
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Operations
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public void commandCreate(Object newObject, Object nextObject) throws Exception {
+			MenuItemInfo newItem = (MenuItemInfo) newObject;
+			MenuItemInfo nextItem = (MenuItemInfo) nextObject;
+			if ((newItem.getStyle() & SwtSupport.SEPARATOR) != 0) {
+				VariableSupport variableSupport = new EmptyPureVariableSupport(newItem);
+				StatementGenerator statementGenerator = GenerationUtils.getStatementGenerator(newItem);
+				JavaInfoUtils.add(newItem, variableSupport, statementGenerator, null, m_this, nextItem);
+			} else {
+				JavaInfoUtils.add(newItem, null, m_this, nextItem);
+			}
+			// schedule selection
+			MenuObjectInfoUtils.setSelectingObject(newItem);
+		}
+
+		@Override
+		@SuppressWarnings("unchecked")
+		public List<?> commandPaste(Object mementoObject, Object nextObject) throws Exception {
+			List<MenuItemInfo> pastedObjects = Lists.newArrayList();
+			List<JavaInfoMemento> mementos = (List<JavaInfoMemento>) mementoObject;
+			for (JavaInfoMemento memento : mementos) {
+				MenuItemInfo item = (MenuItemInfo) memento.create(m_this);
+				commandCreate(item, nextObject);
+				memento.apply();
+				pastedObjects.add(item);
+			}
+			return pastedObjects;
+		}
+
+		@Override
+		public void commandMove(Object object, Object nextObject) throws Exception {
+			MenuItemInfo item = (MenuItemInfo) object;
+			MenuItemInfo nextItem = (MenuItemInfo) nextObject;
+			JavaInfoUtils.move(item, null, m_this, nextItem);
+			// schedule selection
+			MenuObjectInfoUtils.setSelectingObject(item);
+		}
+	}
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/menu/MenuItemInfo.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/menu/MenuItemInfo.java
index 8c6bd2a5c..f5a50c1c7 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/menu/MenuItemInfo.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/menu/MenuItemInfo.java
@@ -54,341 +54,341 @@
  * @coverage swt.model.widgets.menu
  */
 public final class MenuItemInfo extends ItemInfo
-    implements
-      org.eclipse.wb.internal.core.utils.IAdaptable {
-  private final MenuItemInfo m_this = this;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public MenuItemInfo(AstEditor editor,
-      ComponentDescription description,
-      CreationSupport creationSupport) throws Exception {
-    super(editor, description, creationSupport);
-    addBroadcastListeners();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Broadcast
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void addBroadcastListeners() {
-    addBroadcastListener(m_stylePropertyListener);
-    addBroadcastListener(new JavaEventListener() {
-      @Override
-      public void addAfter(JavaInfo parent, JavaInfo child) throws Exception {
-        // add child menu for item creation with SWT.CASCADE style
-        if (child == m_this) {
-          if (JavaInfoUtils.hasTrueParameter(m_this, "MenuItem.createCascadeMenu")) {
-            addSubMenu();
-          }
-          removeBroadcastListener(this);
-        }
-      }
-    });
-    addBroadcastListener(new JavaEventListener() {
-      @Override
-      public void clipboardCopy(JavaInfo javaInfo, List<ClipboardCommand> commands)
-          throws Exception {
-        // copy sub-menu
-        if (javaInfo == m_this) {
-          if (hasSubMenu()) {
-            MenuInfo menuInfo = getChildren(MenuInfo.class).get(0);
-            final JavaInfoMemento menuMemento = JavaInfoMemento.createMemento(menuInfo);
-            commands.add(new ClipboardCommand() {
-              private static final long serialVersionUID = 0L;
-
-              @Override
-              public void execute(JavaInfo javaInfo) throws Exception {
-                MenuInfo menu = (MenuInfo) menuMemento.create(javaInfo);
-                menu.command_CREATE((MenuItemInfo) javaInfo);
-                menuMemento.apply();
-              }
-            });
-          }
-        }
-      }
-    });
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Sub menu related
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the sub-menu associated with this {@link MenuItemInfo}, or <code>null</code> is it has
-   *         no sub-menu.
-   */
-  public MenuInfo getSubMenu() {
-    List<MenuInfo> subMenus = getChildren(MenuInfo.class);
-    Assert.isLegal(subMenus.size() <= 1);
-    return !subMenus.isEmpty() ? subMenus.get(0) : null;
-  }
-
-  /**
-   * @return <code>true</code> if this menu item contains sub menu.
-   */
-  private boolean hasSubMenu() {
-    return !getChildren(MenuInfo.class).isEmpty();
-  }
-
-  /**
-   * Adds a sub-menu to this item child. This required to items with SWT.CASCADE style set.
-   */
-  private void addSubMenu() throws Exception {
-    if (!hasSubMenu()) {
-      JavaInfo menu =
-          JavaInfoUtils.createJavaInfo(
-              getEditor(),
-              MenuSupport.getMenuClass(),
-              new ConstructorCreationSupport());
-      AssociationObject association =
-          AssociationObjects.invocationChild("%parent%.setMenu(%child%)", true);
-      JavaInfoUtils.add(menu, association, this, null);
-    }
-  }
-
-  /**
-   * Removes sub-menu of this item, if any.
-   */
-  private void deleteSubMenu() throws Exception {
-    if (hasSubMenu()) {
-      getChildren(MenuInfo.class).get(0).delete();
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final IObjectPresentation m_presentation = new MenuItemStylePresentation(this);
-
-  @Override
-  public IObjectPresentation getPresentation() {
-    return m_presentation;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Style change listener
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final JavaEventListener m_stylePropertyListener = new JavaEventListener() {
-    @Override
-    public void setPropertyExpression(final GenericPropertyImpl property,
-        final String[] source,
-        Object[] value,
-        final boolean[] shouldSet) throws Exception {
-      if (property.getJavaInfo() == m_this && "Style".equals(property.getTitle())) {
-        final boolean wasCascade = ((Integer) property.getValue() & SwtSupport.CASCADE) != 0;
-        final boolean wasSeparator = ((Integer) property.getValue() & SwtSupport.SEPARATOR) != 0;
-        String src = source[0];
-        final boolean becomesCascade = src != null && src.indexOf("SWT.CASCADE") != -1;
-        final boolean becomesSeparator = src != null && src.indexOf("SWT.SEPARATOR") != -1;
-        // do nothing if SWT.CASCADE/SEPARATOR neither set nor reset
-        if (wasCascade == becomesCascade && wasSeparator == becomesSeparator) {
-          return;
-        }
-        // OK, we have something to change
-        ExecutionUtils.run(m_this, new RunnableEx() {
-          @Override
-          public void run() throws Exception {
-            // add/remove subMenu
-            if (becomesCascade) {
-              addSubMenu();
-            } else {
-              deleteSubMenu();
-            }
-            // remove "setText" when setting SWT.SEPARATOR
-            if (becomesSeparator) {
-              getPropertyByTitle("text").setValue(Property.UNKNOWN_VALUE);
-            }
-          }
-        });
-      }
-    }
-
-    @Override
-    public void addBefore(JavaInfo parent, JavaInfo child) throws Exception {
-      // MenuInfo set for this MenuItemInfo, make it CASCADE
-      if (parent == m_this && child instanceof MenuInfo) {
-        setStyleSource("org.eclipse.swt.SWT.CASCADE");
-      }
-    }
-
-    @Override
-    public void moveBefore(JavaInfo child, ObjectInfo oldParent, JavaInfo newParent)
-        throws Exception {
-      // MenuInfo moved from this MenuItemInfo, remove CASCADE
-      if (oldParent == m_this && child instanceof MenuInfo) {
-        setStyleSource("org.eclipse.swt.SWT.NONE");
-      }
-      // MenuInfo moved to this MenuItemInfo, remove CASCADE
-      if (newParent == m_this && child instanceof MenuInfo) {
-        setStyleSource("org.eclipse.swt.SWT.CASCADE");
-      }
-    }
-
-    /**
-     * Sets new value of "style" property.
-     */
-    private void setStyleSource(String source) throws Exception {
-      removeBroadcastListener(this);
-      try {
-        GenericProperty styleProperty = (GenericProperty) getPropertyByTitle("Style");
-        styleProperty.setExpression(source, Property.UNKNOWN_VALUE);
-      } finally {
-        addBroadcastListener(this);
-      }
-    }
-  };
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IAdaptable
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final IMenuItemInfo m_itemImpl = new MenuItemImpl();
-
-  @Override
-  public <T> T getAdapter(Class<T> adapter) {
-    if (adapter.isAssignableFrom(IMenuItemInfo.class)) {
-      return adapter.cast(m_itemImpl);
-    }
-    return null;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IMenuItemInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Implementation of {@link IMenuItemInfo}.
-   *
-   * @author scheglov_ke
-   */
-  private final class MenuItemImpl extends AbstractMenuObject implements IMenuItemInfo, IMenuPolicy {
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Constructor
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    public MenuItemImpl() {
-      super(m_this);
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Model
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public Object getModel() {
-      return m_this;
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Presentation
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public Image getImage() {
-      return m_this.getImage();
-    }
-
-    @Override
-    public Rectangle getBounds() {
-      return m_this.getBounds();
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // IMenuItemInfo
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public IMenuInfo getMenu() {
-      MenuInfo subMenu = getSubMenu();
-      return MenuObjectInfoUtils.getMenuInfo(subMenu);
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Policy
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public IMenuPolicy getPolicy() {
-      return this;
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Validation
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public boolean validateCreate(Object object) {
-      // nothing can be dropped on MenuItem
-      return false;
-    }
-
-    @Override
-    public boolean validatePaste(Object mementoObject) {
-      // nothing can be dropped on MenuItem
-      return false;
-    }
-
-    @Override
-    public boolean validateMove(Object object) {
-      if (object instanceof MenuInfo) {
-        MenuInfo menuInfo = (MenuInfo) object;
-        // don't move Menu on its child Item
-        if (menuInfo.isParentOf(m_this)) {
-          return false;
-        }
-        return true;
-      }
-      // not a MenuInfo
-      return false;
-    }
-
-    ////////////////////////////////////////////////////////////////////////////
-    //
-    // Operations
-    //
-    ////////////////////////////////////////////////////////////////////////////
-    @Override
-    public void commandCreate(Object object, Object nextObject) throws Exception {
-    }
-
-    @Override
-    public List<?> commandPaste(Object mementoObject, Object nextObject) throws Exception {
-      return ImmutableList.of();
-    }
-
-    @Override
-    public void commandMove(Object object, Object nextObject) throws Exception {
-      MenuInfo menuInfo = (MenuInfo) object;
-      menuInfo.command_ADD(m_this);
-      // schedule selection
-      MenuObjectInfoUtils.setSelectingObject(menuInfo);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Live support
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected SwtLiveManager getLiveComponentsManager() {
-    return new MenuItemLiveManager(this);
-  }
+implements
+org.eclipse.wb.internal.core.utils.IAdaptable {
+	private final MenuItemInfo m_this = this;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public MenuItemInfo(AstEditor editor,
+			ComponentDescription description,
+			CreationSupport creationSupport) throws Exception {
+		super(editor, description, creationSupport);
+		addBroadcastListeners();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Broadcast
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void addBroadcastListeners() {
+		addBroadcastListener(m_stylePropertyListener);
+		addBroadcastListener(new JavaEventListener() {
+			@Override
+			public void addAfter(JavaInfo parent, JavaInfo child) throws Exception {
+				// add child menu for item creation with SWT.CASCADE style
+				if (child == m_this) {
+					if (JavaInfoUtils.hasTrueParameter(m_this, "MenuItem.createCascadeMenu")) {
+						addSubMenu();
+					}
+					removeBroadcastListener(this);
+				}
+			}
+		});
+		addBroadcastListener(new JavaEventListener() {
+			@Override
+			public void clipboardCopy(JavaInfo javaInfo, List<ClipboardCommand> commands)
+					throws Exception {
+				// copy sub-menu
+				if (javaInfo == m_this) {
+					if (hasSubMenu()) {
+						MenuInfo menuInfo = getChildren(MenuInfo.class).get(0);
+						final JavaInfoMemento menuMemento = JavaInfoMemento.createMemento(menuInfo);
+						commands.add(new ClipboardCommand() {
+							private static final long serialVersionUID = 0L;
+
+							@Override
+							public void execute(JavaInfo javaInfo) throws Exception {
+								MenuInfo menu = (MenuInfo) menuMemento.create(javaInfo);
+								menu.command_CREATE((MenuItemInfo) javaInfo);
+								menuMemento.apply();
+							}
+						});
+					}
+				}
+			}
+		});
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Sub menu related
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the sub-menu associated with this {@link MenuItemInfo}, or <code>null</code> is it has
+	 *         no sub-menu.
+	 */
+	public MenuInfo getSubMenu() {
+		List<MenuInfo> subMenus = getChildren(MenuInfo.class);
+		Assert.isLegal(subMenus.size() <= 1);
+		return !subMenus.isEmpty() ? subMenus.get(0) : null;
+	}
+
+	/**
+	 * @return <code>true</code> if this menu item contains sub menu.
+	 */
+	private boolean hasSubMenu() {
+		return !getChildren(MenuInfo.class).isEmpty();
+	}
+
+	/**
+	 * Adds a sub-menu to this item child. This required to items with SWT.CASCADE style set.
+	 */
+	private void addSubMenu() throws Exception {
+		if (!hasSubMenu()) {
+			JavaInfo menu =
+					JavaInfoUtils.createJavaInfo(
+							getEditor(),
+							MenuSupport.getMenuClass(),
+							new ConstructorCreationSupport());
+			AssociationObject association =
+					AssociationObjects.invocationChild("%parent%.setMenu(%child%)", true);
+			JavaInfoUtils.add(menu, association, this, null);
+		}
+	}
+
+	/**
+	 * Removes sub-menu of this item, if any.
+	 */
+	private void deleteSubMenu() throws Exception {
+		if (hasSubMenu()) {
+			getChildren(MenuInfo.class).get(0).delete();
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final IObjectPresentation m_presentation = new MenuItemStylePresentation(this);
+
+	@Override
+	public IObjectPresentation getPresentation() {
+		return m_presentation;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Style change listener
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final JavaEventListener m_stylePropertyListener = new JavaEventListener() {
+		@Override
+		public void setPropertyExpression(final GenericPropertyImpl property,
+				final String[] source,
+				Object[] value,
+				final boolean[] shouldSet) throws Exception {
+			if (property.getJavaInfo() == m_this && "Style".equals(property.getTitle())) {
+				final boolean wasCascade = ((Integer) property.getValue() & SwtSupport.CASCADE) != 0;
+				final boolean wasSeparator = ((Integer) property.getValue() & SwtSupport.SEPARATOR) != 0;
+				String src = source[0];
+				final boolean becomesCascade = src != null && src.indexOf("SWT.CASCADE") != -1;
+				final boolean becomesSeparator = src != null && src.indexOf("SWT.SEPARATOR") != -1;
+				// do nothing if SWT.CASCADE/SEPARATOR neither set nor reset
+				if (wasCascade == becomesCascade && wasSeparator == becomesSeparator) {
+					return;
+				}
+				// OK, we have something to change
+				ExecutionUtils.run(m_this, new RunnableEx() {
+					@Override
+					public void run() throws Exception {
+						// add/remove subMenu
+						if (becomesCascade) {
+							addSubMenu();
+						} else {
+							deleteSubMenu();
+						}
+						// remove "setText" when setting SWT.SEPARATOR
+						if (becomesSeparator) {
+							getPropertyByTitle("text").setValue(Property.UNKNOWN_VALUE);
+						}
+					}
+				});
+			}
+		}
+
+		@Override
+		public void addBefore(JavaInfo parent, JavaInfo child) throws Exception {
+			// MenuInfo set for this MenuItemInfo, make it CASCADE
+			if (parent == m_this && child instanceof MenuInfo) {
+				setStyleSource("org.eclipse.swt.SWT.CASCADE");
+			}
+		}
+
+		@Override
+		public void moveBefore(JavaInfo child, ObjectInfo oldParent, JavaInfo newParent)
+				throws Exception {
+			// MenuInfo moved from this MenuItemInfo, remove CASCADE
+			if (oldParent == m_this && child instanceof MenuInfo) {
+				setStyleSource("org.eclipse.swt.SWT.NONE");
+			}
+			// MenuInfo moved to this MenuItemInfo, remove CASCADE
+			if (newParent == m_this && child instanceof MenuInfo) {
+				setStyleSource("org.eclipse.swt.SWT.CASCADE");
+			}
+		}
+
+		/**
+		 * Sets new value of "style" property.
+		 */
+		private void setStyleSource(String source) throws Exception {
+			removeBroadcastListener(this);
+			try {
+				GenericProperty styleProperty = (GenericProperty) getPropertyByTitle("Style");
+				styleProperty.setExpression(source, Property.UNKNOWN_VALUE);
+			} finally {
+				addBroadcastListener(this);
+			}
+		}
+	};
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IAdaptable
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final IMenuItemInfo m_itemImpl = new MenuItemImpl();
+
+	@Override
+	public <T> T getAdapter(Class<T> adapter) {
+		if (adapter.isAssignableFrom(IMenuItemInfo.class)) {
+			return adapter.cast(m_itemImpl);
+		}
+		return null;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IMenuItemInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Implementation of {@link IMenuItemInfo}.
+	 *
+	 * @author scheglov_ke
+	 */
+	private final class MenuItemImpl extends AbstractMenuObject implements IMenuItemInfo, IMenuPolicy {
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Constructor
+		//
+		////////////////////////////////////////////////////////////////////////////
+		public MenuItemImpl() {
+			super(m_this);
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Model
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public Object getModel() {
+			return m_this;
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Presentation
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public Image getImage() {
+			return m_this.getImage();
+		}
+
+		@Override
+		public Rectangle getBounds() {
+			return m_this.getBounds();
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// IMenuItemInfo
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public IMenuInfo getMenu() {
+			MenuInfo subMenu = getSubMenu();
+			return MenuObjectInfoUtils.getMenuInfo(subMenu);
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Policy
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public IMenuPolicy getPolicy() {
+			return this;
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Validation
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public boolean validateCreate(Object object) {
+			// nothing can be dropped on MenuItem
+			return false;
+		}
+
+		@Override
+		public boolean validatePaste(Object mementoObject) {
+			// nothing can be dropped on MenuItem
+			return false;
+		}
+
+		@Override
+		public boolean validateMove(Object object) {
+			if (object instanceof MenuInfo) {
+				MenuInfo menuInfo = (MenuInfo) object;
+				// don't move Menu on its child Item
+				if (menuInfo.isParentOf(m_this)) {
+					return false;
+				}
+				return true;
+			}
+			// not a MenuInfo
+			return false;
+		}
+
+		////////////////////////////////////////////////////////////////////////////
+		//
+		// Operations
+		//
+		////////////////////////////////////////////////////////////////////////////
+		@Override
+		public void commandCreate(Object object, Object nextObject) throws Exception {
+		}
+
+		@Override
+		public List<?> commandPaste(Object mementoObject, Object nextObject) throws Exception {
+			return ImmutableList.of();
+		}
+
+		@Override
+		public void commandMove(Object object, Object nextObject) throws Exception {
+			MenuInfo menuInfo = (MenuInfo) object;
+			menuInfo.command_ADD(m_this);
+			// schedule selection
+			MenuObjectInfoUtils.setSelectingObject(menuInfo);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Live support
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected SwtLiveManager getLiveComponentsManager() {
+		return new MenuItemLiveManager(this);
+	}
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/menu/MenuItemStylePresentation.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/menu/MenuItemStylePresentation.java
index 11bae2c36..e0e78f691 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/menu/MenuItemStylePresentation.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/menu/MenuItemStylePresentation.java
@@ -22,37 +22,37 @@
  * @coverage swt.model.widgets.menu.presentation
  */
 public final class MenuItemStylePresentation extends StylePresentation {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public MenuItemStylePresentation(MenuItemInfo item) {
-    super(item);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public MenuItemStylePresentation(MenuItemInfo item) {
+		super(item);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Custom text for separator
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public String getText() throws Exception {
-    if (ControlSupport.isStyle(m_javaInfo.getObject(), SwtSupport.SEPARATOR)) {
-      return "<separator>";
-    }
-    return super.getText();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Custom text for separator
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public String getText() throws Exception {
+		if (ControlSupport.isStyle(m_javaInfo.getObject(), SwtSupport.SEPARATOR)) {
+			return "<separator>";
+		}
+		return super.getText();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // StylePresentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void initImages() throws Exception {
-    addImage(SwtSupport.CHECK, "wbp-meta/org/eclipse/swt/widgets/MenuItem_check.gif");
-    addImage(SwtSupport.RADIO, "wbp-meta/org/eclipse/swt/widgets/MenuItem_radio.gif");
-    addImage(SwtSupport.SEPARATOR, "wbp-meta/org/eclipse/swt/widgets/MenuItem_separator.gif");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// StylePresentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void initImages() throws Exception {
+		addImage(SwtSupport.CHECK, "wbp-meta/org/eclipse/swt/widgets/MenuItem_check.gif");
+		addImage(SwtSupport.RADIO, "wbp-meta/org/eclipse/swt/widgets/MenuItem_radio.gif");
+		addImage(SwtSupport.SEPARATOR, "wbp-meta/org/eclipse/swt/widgets/MenuItem_separator.gif");
+	}
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/menu/MenuStylePresentation.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/menu/MenuStylePresentation.java
index 0c096ad6d..e43d70786 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/menu/MenuStylePresentation.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/model/widgets/menu/MenuStylePresentation.java
@@ -22,24 +22,24 @@
  * @coverage swt.model.widgets.menu
  */
 public final class MenuStylePresentation extends StylePresentation {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public MenuStylePresentation(MenuInfo menu) {
-    super(menu);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public MenuStylePresentation(MenuInfo menu) {
+		super(menu);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // StylePresentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void initImages() throws Exception {
-    addImage(SwtSupport.BAR, "wbp-meta/org/eclipse/swt/widgets/Menu_bar.gif");
-    addImage(SwtSupport.POP_UP, "wbp-meta/org/eclipse/swt/widgets/Menu.gif");
-    addImage(SwtSupport.DROP_DOWN, "wbp-meta/org/eclipse/swt/widgets/Menu_dropdown.gif");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// StylePresentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void initImages() throws Exception {
+		addImage(SwtSupport.BAR, "wbp-meta/org/eclipse/swt/widgets/Menu_bar.gif");
+		addImage(SwtSupport.POP_UP, "wbp-meta/org/eclipse/swt/widgets/Menu.gif");
+		addImage(SwtSupport.DROP_DOWN, "wbp-meta/org/eclipse/swt/widgets/Menu_dropdown.gif");
+	}
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/palette/AbsoluteLayoutEntryInfo.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/palette/AbsoluteLayoutEntryInfo.java
index cea161349..49fd318e1 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/palette/AbsoluteLayoutEntryInfo.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/palette/AbsoluteLayoutEntryInfo.java
@@ -29,53 +29,53 @@
  * @coverage swt.editor.palette
  */
 public final class AbsoluteLayoutEntryInfo extends ToolEntryInfo {
-  private static final Image ICON = Activator.getImage("info/layout/absolute/layout.gif");
+	private static final Image ICON = Activator.getImage("info/layout/absolute/layout.gif");
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public AbsoluteLayoutEntryInfo() {
-    setName(ModelMessages.AbsoluteLayoutEntryInfo_name);
-    setDescription(ModelMessages.AbsoluteLayoutEntryInfo_description);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public AbsoluteLayoutEntryInfo() {
+		setName(ModelMessages.AbsoluteLayoutEntryInfo_name);
+		setDescription(ModelMessages.AbsoluteLayoutEntryInfo_description);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // EntryInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Image getIcon() {
-    return ICON;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// EntryInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Image getIcon() {
+		return ICON;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ToolEntryInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Tool createTool() throws Exception {
-    // prepare factory
-    ICreationFactory factory = new ICreationFactory() {
-      private AbsoluteLayoutInfo m_layout;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ToolEntryInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Tool createTool() throws Exception {
+		// prepare factory
+		ICreationFactory factory = new ICreationFactory() {
+			private AbsoluteLayoutInfo m_layout;
 
-      @Override
-      public void activate() throws Exception {
-        ToolkitDescription toolkit = m_rootJavaInfo.getDescription().getToolkit();
-        AbsoluteLayoutCreationSupport creationSupport = new AbsoluteLayoutCreationSupport();
-        m_layout = new AbsoluteLayoutInfo(m_editor, toolkit, creationSupport);
-        m_layout.setObject(null); // force initialize
-      }
+			@Override
+			public void activate() throws Exception {
+				ToolkitDescription toolkit = m_rootJavaInfo.getDescription().getToolkit();
+				AbsoluteLayoutCreationSupport creationSupport = new AbsoluteLayoutCreationSupport();
+				m_layout = new AbsoluteLayoutInfo(m_editor, toolkit, creationSupport);
+				m_layout.setObject(null); // force initialize
+			}
 
-      @Override
-      public Object getNewObject() {
-        return m_layout;
-      }
-    };
-    // return tool
-    return new CreationTool(factory);
-  }
+			@Override
+			public Object getNewObject() {
+				return m_layout;
+			}
+		};
+		// return tool
+		return new CreationTool(factory);
+	}
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/parser/ParseFactory.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/parser/ParseFactory.java
index 74b252f7a..1b56c28d6 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/parser/ParseFactory.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/parser/ParseFactory.java
@@ -20,7 +20,7 @@
  * @coverage swt.parser
  */
 public abstract class ParseFactory extends AbstractParseFactory {
-  /*@Override
+	/*@Override
   public JavaInfo create(ASTEditor editor,
   		ClassInstanceCreation creation,
   		IMethodBinding methodBinding,
@@ -42,7 +42,7 @@ public JavaInfo create(ASTEditor editor,
   	// unknown class
   	return super.create(editor, creation, methodBinding, typeBinding, arguments, argumentInfos);
   }*/
-  /*@Override
+	/*@Override
   protected void createStaticFactory_Association(JavaInfo javaInfo,
   		MethodInvocation invocation,
   		JavaInfo[] argumentInfos,
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/preferences/IPreferenceConstants.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/preferences/IPreferenceConstants.java
index cd926840b..857472f11 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/preferences/IPreferenceConstants.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/preferences/IPreferenceConstants.java
@@ -21,22 +21,22 @@
  * @coverage swt.preferences
  */
 public interface IPreferenceConstants {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Preferences
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * When <code>true</code>, we automatically add <code>SWTResourceManager</code> and use it for
-   * color/font/image access. This allows use resources sharing.
-   */
-  String P_USE_RESOURCE_MANAGER = "useResourceManager";
-  /**
-   * The template for {@link LayoutInfo} name.
-   */
-  String P_LAYOUT_NAME_TEMPLATE = "templateLayoutName";
-  /**
-   * The template for {@link LayoutDataInfo} name.
-   */
-  String P_LAYOUT_DATA_NAME_TEMPLATE = "templateLayoutDataName";
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Preferences
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * When <code>true</code>, we automatically add <code>SWTResourceManager</code> and use it for
+	 * color/font/image access. This allows use resources sharing.
+	 */
+	String P_USE_RESOURCE_MANAGER = "useResourceManager";
+	/**
+	 * The template for {@link LayoutInfo} name.
+	 */
+	String P_LAYOUT_NAME_TEMPLATE = "templateLayoutName";
+	/**
+	 * The template for {@link LayoutDataInfo} name.
+	 */
+	String P_LAYOUT_DATA_NAME_TEMPLATE = "templateLayoutDataName";
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/preferences/PreferencesMessages.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/preferences/PreferencesMessages.java
index 340c96214..3f6645532 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/preferences/PreferencesMessages.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/preferences/PreferencesMessages.java
@@ -3,15 +3,15 @@
 import org.eclipse.osgi.util.NLS;
 
 public class PreferencesMessages extends NLS {
-  private static final String BUNDLE_NAME =
-      "org.eclipse.wb.internal.swt.preferences.PreferencesMessages"; //$NON-NLS-1$
-  public static String GridLayoutPreferencePage_doAlignRight;
-  public static String GridLayoutPreferencePage_useGrab;
-  static {
-    // initialize resource bundle
-    NLS.initializeMessages(BUNDLE_NAME, PreferencesMessages.class);
-  }
+	private static final String BUNDLE_NAME =
+			"org.eclipse.wb.internal.swt.preferences.PreferencesMessages"; //$NON-NLS-1$
+	public static String GridLayoutPreferencePage_doAlignRight;
+	public static String GridLayoutPreferencePage_useGrab;
+	static {
+		// initialize resource bundle
+		NLS.initializeMessages(BUNDLE_NAME, PreferencesMessages.class);
+	}
 
-  private PreferencesMessages() {
-  }
+	private PreferencesMessages() {
+	}
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/preferences/layout/GridLayoutPreferencePage.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/preferences/layout/GridLayoutPreferencePage.java
index fe215a6d6..836ae863f 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/preferences/layout/GridLayoutPreferencePage.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/preferences/layout/GridLayoutPreferencePage.java
@@ -30,47 +30,47 @@
  * @coverage swt.preferences.ui
  */
 public abstract class GridLayoutPreferencePage extends AbstractBindingPreferencesPage {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public GridLayoutPreferencePage(ToolkitDescription toolkit) {
-    super(toolkit);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public GridLayoutPreferencePage(ToolkitDescription toolkit) {
+		super(toolkit);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GUI
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected AbstractBindingComposite createBindingComposite(Composite parent) {
-    return new ContentsComposite(parent, m_bindManager, m_preferences);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GUI
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected AbstractBindingComposite createBindingComposite(Composite parent) {
+		return new ContentsComposite(parent, m_bindManager, m_preferences);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Contents
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private class ContentsComposite extends AbstractBindingComposite {
-    public ContentsComposite(Composite parent,
-        DataBindManager bindManager,
-        IPreferenceStore preferences) {
-      super(parent, bindManager, preferences);
-      GridLayoutFactory.create(this).noMargins().columns(2);
-      // boolean preferences
-      checkButton(
-          this,
-          2,
-          PreferencesMessages.GridLayoutPreferencePage_useGrab,
-          IPreferenceConstants.P_ENABLE_GRAB);
-      checkButton(
-          this,
-          2,
-          PreferencesMessages.GridLayoutPreferencePage_doAlignRight,
-          IPreferenceConstants.P_ENABLE_RIGHT_ALIGNMENT);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Contents
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private class ContentsComposite extends AbstractBindingComposite {
+		public ContentsComposite(Composite parent,
+				DataBindManager bindManager,
+				IPreferenceStore preferences) {
+			super(parent, bindManager, preferences);
+			GridLayoutFactory.create(this).noMargins().columns(2);
+			// boolean preferences
+			checkButton(
+					this,
+					2,
+					PreferencesMessages.GridLayoutPreferencePage_useGrab,
+					IPreferenceConstants.P_ENABLE_GRAB);
+			checkButton(
+					this,
+					2,
+					PreferencesMessages.GridLayoutPreferencePage_doAlignRight,
+					IPreferenceConstants.P_ENABLE_RIGHT_ALIGNMENT);
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/AbstractSupport.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/AbstractSupport.java
index f8c08476d..ed3804212 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/AbstractSupport.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/AbstractSupport.java
@@ -22,33 +22,33 @@
  * @coverage swt.support
  */
 public class AbstractSupport {
-  /**
-   * @return <code>this</code> if active editor contains SWT (eRCP or RCP) GUI.
-   */
-  public static boolean is_SWT() {
-    String toolkitId = EditorState.getActiveJavaInfo().getDescription().getToolkit().getId();
-    return toolkitId.equals("org.eclipse.wb.ercp") || toolkitId.equals("org.eclipse.wb.rcp");
-  }
+	/**
+	 * @return <code>this</code> if active editor contains SWT (eRCP or RCP) GUI.
+	 */
+	public static boolean is_SWT() {
+		String toolkitId = EditorState.getActiveJavaInfo().getDescription().getToolkit().getId();
+		return toolkitId.equals("org.eclipse.wb.ercp") || toolkitId.equals("org.eclipse.wb.rcp");
+	}
 
-  /**
-   * @return <code>this</code> if active editor contains RCP GUI and <code>false</code> if eRCP.
-   */
-  public static boolean is_RCP() {
-    String toolkitId = GlobalState.getToolkit().getId();
-    return toolkitId.equals("org.eclipse.wb.rcp");
-  }
+	/**
+	 * @return <code>this</code> if active editor contains RCP GUI and <code>false</code> if eRCP.
+	 */
+	public static boolean is_RCP() {
+		String toolkitId = GlobalState.getToolkit().getId();
+		return toolkitId.equals("org.eclipse.wb.rcp");
+	}
 
-  /**
-   * Loads the {@link Class} that should always be successful, so it re-throws any exception.
-   *
-   * @return the {@link Class} with given name loaded from active editor {@link ClassLoader}.
-   */
-  protected static Class<?> loadClass(final String name) {
-    return ExecutionUtils.runObject(new RunnableObjectEx<Class<?>>() {
-      @Override
-      public Class<?> runObject() throws Exception {
-        return GlobalState.getClassLoader().loadClass(name);
-      }
-    });
-  }
+	/**
+	 * Loads the {@link Class} that should always be successful, so it re-throws any exception.
+	 *
+	 * @return the {@link Class} with given name loaded from active editor {@link ClassLoader}.
+	 */
+	protected static Class<?> loadClass(final String name) {
+		return ExecutionUtils.runObject(new RunnableObjectEx<Class<?>>() {
+			@Override
+			public Class<?> runObject() throws Exception {
+				return GlobalState.getClassLoader().loadClass(name);
+			}
+		});
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/ColorSupport.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/ColorSupport.java
index d907077d5..226a799a9 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/ColorSupport.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/ColorSupport.java
@@ -25,105 +25,105 @@
  * @coverage swt.support
  */
 public class ColorSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return red component of SWT {@link Color} object.
-   */
-  private static int getRed(Object color) throws Exception {
-    return (Integer) ReflectionUtils.invokeMethod(color, "getRed()");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return red component of SWT {@link Color} object.
+	 */
+	private static int getRed(Object color) throws Exception {
+		return (Integer) ReflectionUtils.invokeMethod(color, "getRed()");
+	}
 
-  /**
-   * @return green component of SWT {@link Color} object.
-   */
-  private static int getGreen(Object color) throws Exception {
-    return (Integer) ReflectionUtils.invokeMethod(color, "getGreen()");
-  }
+	/**
+	 * @return green component of SWT {@link Color} object.
+	 */
+	private static int getGreen(Object color) throws Exception {
+		return (Integer) ReflectionUtils.invokeMethod(color, "getGreen()");
+	}
 
-  /**
-   * @return blue component of SWT {@link Color} object.
-   */
-  private static int getBlue(Object color) throws Exception {
-    return (Integer) ReflectionUtils.invokeMethod(color, "getBlue()");
-  }
+	/**
+	 * @return blue component of SWT {@link Color} object.
+	 */
+	private static int getBlue(Object color) throws Exception {
+		return (Integer) ReflectionUtils.invokeMethod(color, "getBlue()");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the copy of SWT {@link Color}.
-   */
-  public static Object getCopy(Object color) throws Exception {
-    Constructor<?> constructor =
-        ReflectionUtils.getConstructorBySignature(
-            color.getClass(),
-            "<init>(org.eclipse.swt.graphics.Device,int,int,int)");
-    return constructor.newInstance(null, getRed(color), getGreen(color), getBlue(color));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the copy of SWT {@link Color}.
+	 */
+	public static Object getCopy(Object color) throws Exception {
+		Constructor<?> constructor =
+				ReflectionUtils.getConstructorBySignature(
+						color.getClass(),
+						"<init>(org.eclipse.swt.graphics.Device,int,int,int)");
+		return constructor.newInstance(null, getRed(color), getGreen(color), getBlue(color));
+	}
 
-  /**
-   * Convert SWT {@link Color} to SWT {@link Color}.
-   */
-  public static Color getColor(Object color) throws Exception {
-    return new Color(null, getRed(color), getGreen(color), getBlue(color));
-  }
+	/**
+	 * Convert SWT {@link Color} to SWT {@link Color}.
+	 */
+	public static Color getColor(Object color) throws Exception {
+		return new Color(null, getRed(color), getGreen(color), getBlue(color));
+	}
 
-  /**
-   * Create string presentation of {@link Color}.
-   */
-  public static String toString(Object color) throws Exception {
-    return getRed(color) + "," + getGreen(color) + "," + getBlue(color);
-  }
+	/**
+	 * Create string presentation of {@link Color}.
+	 */
+	public static String toString(Object color) throws Exception {
+		return getRed(color) + "," + getGreen(color) + "," + getBlue(color);
+	}
 
-  /**
-   * @return <code>true</code> if given {@link Color} is disposed.
-   */
-  public static boolean isDisposed(Object color) throws Exception {
-    return (Boolean) ReflectionUtils.invokeMethod(color, "isDisposed()");
-  }
+	/**
+	 * @return <code>true</code> if given {@link Color} is disposed.
+	 */
+	public static boolean isDisposed(Object color) throws Exception {
+		return (Boolean) ReflectionUtils.invokeMethod(color, "isDisposed()");
+	}
 
-  /**
-   * Invoke method <code>Color.dispose()</code> for color if it not disposed.
-   */
-  public static void dispose(Object color) throws Exception {
-    if (!isDisposed(color)) {
-      ReflectionUtils.invokeMethod(color, "dispose()");
-    }
-  }
+	/**
+	 * Invoke method <code>Color.dispose()</code> for color if it not disposed.
+	 */
+	public static void dispose(Object color) throws Exception {
+		if (!isDisposed(color)) {
+			ReflectionUtils.invokeMethod(color, "dispose()");
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ColorInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return new {@link ColorInfo} using color RGB.
-   */
-  public static ColorInfo createInfo(Object color) throws Exception {
-    return new ColorInfo(getRed(color), getGreen(color), getBlue(color));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ColorInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return new {@link ColorInfo} using color RGB.
+	 */
+	public static ColorInfo createInfo(Object color) throws Exception {
+		return new ColorInfo(getRed(color), getGreen(color), getBlue(color));
+	}
 
-  /**
-   * @return new {@link ColorInfo} using color RGB.
-   */
-  public static ColorInfo createInfo(String name, Object color) throws Exception {
-    return new ColorInfo(name, getRed(color), getGreen(color), getBlue(color));
-  }
+	/**
+	 * @return new {@link ColorInfo} using color RGB.
+	 */
+	public static ColorInfo createInfo(String name, Object color) throws Exception {
+		return new ColorInfo(name, getRed(color), getGreen(color), getBlue(color));
+	}
 
-  /**
-   * @return new {@link ColorInfo} using <code>Display.getSystemColor()</code> key.
-   */
-  public static ColorInfo createInfo(Field field) throws Exception {
-    String name = field.getName();
-    Object color = DisplaySupport.getSystemColor(field.get(null));
-    ColorInfo colorInfo = createInfo(name, color);
-    colorInfo.setData("org.eclipse.swt.SWT." + name);
-    return colorInfo;
-  }
+	/**
+	 * @return new {@link ColorInfo} using <code>Display.getSystemColor()</code> key.
+	 */
+	public static ColorInfo createInfo(Field field) throws Exception {
+		String name = field.getName();
+		Object color = DisplaySupport.getSystemColor(field.get(null));
+		ColorInfo colorInfo = createInfo(name, color);
+		colorInfo.setData("org.eclipse.swt.SWT." + name);
+		return colorInfo;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/ContainerSupport.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/ContainerSupport.java
index 9f8da67a7..e6f49c953 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/ContainerSupport.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/ContainerSupport.java
@@ -34,210 +34,210 @@
  * @coverage swt.support
  */
 public class ContainerSupport extends AbstractSupport {
-  private static final Map<Image, Object> SWT_TO_TOOLKIT_IMAGES = Maps.newHashMap();
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Style
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if given {@link Composite} has {@link SWT#RIGHT_TO_LEFT} style.
-   */
-  public static boolean isRTL(Object composite) {
-    if (composite == null) {
-      return false;
-    }
-    return ControlSupport.isStyle(composite, SWT.RIGHT_TO_LEFT);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Shell
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return {@link org.eclipse.swt.widgets.Shell} {@link Class} loaded from active editor
-   *         {@link ClassLoader}.
-   */
-  public static Class<?> getShellClass() {
-    return loadClass("org.eclipse.swt.widgets.Shell");
-  }
-
-  /**
-   * @return <code>true</code> if given object is {@link org.eclipse.swt.widgets.Shell}.
-   */
-  public static boolean isShell(Object o) {
-    return getShellClass().isAssignableFrom(o.getClass());
-  }
-
-  /**
-   * @return <code>true</code> if given {@link Class} is {@link org.eclipse.swt.widgets.Shell}.
-   */
-  public static boolean isShell(Class<?> clazz) {
-    return getShellClass().isAssignableFrom(clazz);
-  }
-
-  /**
-   * Create new instance of SWT {@link org.eclipse.swt.widgets.Shell}: <code>new Shell()</code>.
-   */
-  public static Object createShell() throws Exception {
-    return getShellClass().newInstance();
-  }
-
-  /**
-   * Invoke method <code>shell.setText()</code> for given shell.
-   */
-  public static void setShellText(Object shell, String text) throws Exception {
-    ReflectionUtils.invokeMethod(shell, "setText(java.lang.String)", text);
-  }
-
-  /**
-   * Sets the new FillLayout instance to the given composite.
-   */
-  public static void setFillLayout(Object composite) throws Exception {
-    Class<?> layoutClass = loadClass("org.eclipse.swt.layout.FillLayout");
-    Object layout = layoutClass.newInstance();
-    ReflectionUtils.invokeMethod(composite, "setLayout(org.eclipse.swt.widgets.Layout)", layout);
-  }
-
-  /**
-   * Invoke method <code>shell.setImage()</code> for given shell.
-   */
-  public static void setShellImage(Object shell, Image swtImage) throws Exception {
-    Object image = SWT_TO_TOOLKIT_IMAGES.get(swtImage);
-    if (image == null) {
-      image = ToolkitSupport.createToolkitImage(swtImage);
-      SWT_TO_TOOLKIT_IMAGES.put(swtImage, image);
-    }
-    ReflectionUtils.invokeMethod(shell, "setImage(org.eclipse.swt.graphics.Image)", image);
-  }
-
-  /**
-   * Show shell and hide it during closing (don't disposed).
-   */
-  public static void showShell(Object shell) throws Exception {
-    ToolkitSupport.showShell(shell);
-  }
-
-  /**
-   * Invokes Shell.close() method using reflection.
-   */
-  public static void closeShell(Object shell) {
-    ReflectionUtils.invokeMethodEx(shell, "close()");
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Composite
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return {@link org.eclipse.swt.widgets.Composite} {@link Class} loaded from active editor
-   *         {@link ClassLoader}.
-   */
-  public static Class<?> getCompositeClass() {
-    return loadClass("org.eclipse.swt.widgets.Composite");
-  }
-
-  /**
-   * @return <code>true</code> if given {@link Class} is successor of
-   *         {@link org.eclipse.swt.widgets.Composite}.
-   */
-  public static boolean isCompositeClass(Class<?> clazz) {
-    return ReflectionUtils.isSuccessorOf(clazz, "org.eclipse.swt.widgets.Composite");
-  }
-
-  /**
-   * @return <code>true</code> if given object is {@link org.eclipse.swt.widgets.Composite}.
-   */
-  public static boolean isComposite(Object o) {
-    return isCompositeClass(o.getClass());
-  }
-
-  /**
-   * Creates new instance of SWT {@link org.eclipse.swt.widgets.Composite}.
-   */
-  public static Object createComposite(Object parent, int style) throws Exception {
-    Constructor<?> constructor =
-        ReflectionUtils.getConstructorBySignature(
-            getCompositeClass(),
-            "<init>(org.eclipse.swt.widgets.Composite,int)");
-    return constructor.newInstance(parent, style);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Children
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Invoke method <code>Composite.getChildren()</code> for given composite.
-   */
-  public static Object[] getChildren(Object composite) {
-    Object[] children = (Object[]) ReflectionUtils.invokeMethodEx(composite, "getChildren()");
-    return children != null ? children : ArrayUtils.EMPTY_OBJECT_ARRAY;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Layout
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return {@link org.eclipse.swt.widgets.Layout} {@link Class} loaded from active editor
-   *         {@link ClassLoader}.
-   */
-  public static Class<?> getLayoutClass() {
-    return loadClass("org.eclipse.swt.widgets.Layout");
-  }
-
-  /**
-   * Invoke method <code>Composite.getLayout()</code> for given composite.
-   */
-  public static Object getLayout(Object composite) throws Exception {
-    return ReflectionUtils.invokeMethodEx(composite, "getLayout()");
-  }
-
-  /**
-   * Invoke method <code>Composite.setLayout(layout)</code> for given composite.
-   */
-  public static void setLayout(Object composite, Object layout) throws Exception {
-    ReflectionUtils.invokeMethod(composite, "setLayout(org.eclipse.swt.widgets.Layout)", layout);
-  }
-
-  /**
-   * Invoke method <code>Composite.layout()</code> for given composite.
-   */
-  public static void layout(Object composite) throws Exception {
-    ReflectionUtils.invokeMethod(composite, "layout()");
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Client area
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Invoke method <code>Composite.computeTrim()</code> for given composite.
-   */
-  public static Rectangle computeTrim(Object composite, int x, int y, int width, int height)
-      throws Exception {
-    Object rectangle =
-        ReflectionUtils.invokeMethod(composite, "computeTrim(int,int,int,int)", x, y, width, height);
-    return RectangleSupport.getRectangle(rectangle);
-  }
-
-  /**
-   * Invoke method <code>Composite.getClientArea()</code> for given composite.
-   */
-  public static Rectangle getClientArea(final Object composite) {
-    return ExecutionUtils.runObject(new RunnableObjectEx<Rectangle>() {
-      @Override
-      public Rectangle runObject() throws Exception {
-        Object rectangle = ReflectionUtils.invokeMethod(composite, "getClientArea()");
-        return RectangleSupport.getRectangle(rectangle);
-      }
-    });
-  }
+	private static final Map<Image, Object> SWT_TO_TOOLKIT_IMAGES = Maps.newHashMap();
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Style
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if given {@link Composite} has {@link SWT#RIGHT_TO_LEFT} style.
+	 */
+	public static boolean isRTL(Object composite) {
+		if (composite == null) {
+			return false;
+		}
+		return ControlSupport.isStyle(composite, SWT.RIGHT_TO_LEFT);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Shell
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return {@link org.eclipse.swt.widgets.Shell} {@link Class} loaded from active editor
+	 *         {@link ClassLoader}.
+	 */
+	public static Class<?> getShellClass() {
+		return loadClass("org.eclipse.swt.widgets.Shell");
+	}
+
+	/**
+	 * @return <code>true</code> if given object is {@link org.eclipse.swt.widgets.Shell}.
+	 */
+	public static boolean isShell(Object o) {
+		return getShellClass().isAssignableFrom(o.getClass());
+	}
+
+	/**
+	 * @return <code>true</code> if given {@link Class} is {@link org.eclipse.swt.widgets.Shell}.
+	 */
+	public static boolean isShell(Class<?> clazz) {
+		return getShellClass().isAssignableFrom(clazz);
+	}
+
+	/**
+	 * Create new instance of SWT {@link org.eclipse.swt.widgets.Shell}: <code>new Shell()</code>.
+	 */
+	public static Object createShell() throws Exception {
+		return getShellClass().newInstance();
+	}
+
+	/**
+	 * Invoke method <code>shell.setText()</code> for given shell.
+	 */
+	public static void setShellText(Object shell, String text) throws Exception {
+		ReflectionUtils.invokeMethod(shell, "setText(java.lang.String)", text);
+	}
+
+	/**
+	 * Sets the new FillLayout instance to the given composite.
+	 */
+	public static void setFillLayout(Object composite) throws Exception {
+		Class<?> layoutClass = loadClass("org.eclipse.swt.layout.FillLayout");
+		Object layout = layoutClass.newInstance();
+		ReflectionUtils.invokeMethod(composite, "setLayout(org.eclipse.swt.widgets.Layout)", layout);
+	}
+
+	/**
+	 * Invoke method <code>shell.setImage()</code> for given shell.
+	 */
+	public static void setShellImage(Object shell, Image swtImage) throws Exception {
+		Object image = SWT_TO_TOOLKIT_IMAGES.get(swtImage);
+		if (image == null) {
+			image = ToolkitSupport.createToolkitImage(swtImage);
+			SWT_TO_TOOLKIT_IMAGES.put(swtImage, image);
+		}
+		ReflectionUtils.invokeMethod(shell, "setImage(org.eclipse.swt.graphics.Image)", image);
+	}
+
+	/**
+	 * Show shell and hide it during closing (don't disposed).
+	 */
+	public static void showShell(Object shell) throws Exception {
+		ToolkitSupport.showShell(shell);
+	}
+
+	/**
+	 * Invokes Shell.close() method using reflection.
+	 */
+	public static void closeShell(Object shell) {
+		ReflectionUtils.invokeMethodEx(shell, "close()");
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Composite
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return {@link org.eclipse.swt.widgets.Composite} {@link Class} loaded from active editor
+	 *         {@link ClassLoader}.
+	 */
+	public static Class<?> getCompositeClass() {
+		return loadClass("org.eclipse.swt.widgets.Composite");
+	}
+
+	/**
+	 * @return <code>true</code> if given {@link Class} is successor of
+	 *         {@link org.eclipse.swt.widgets.Composite}.
+	 */
+	public static boolean isCompositeClass(Class<?> clazz) {
+		return ReflectionUtils.isSuccessorOf(clazz, "org.eclipse.swt.widgets.Composite");
+	}
+
+	/**
+	 * @return <code>true</code> if given object is {@link org.eclipse.swt.widgets.Composite}.
+	 */
+	public static boolean isComposite(Object o) {
+		return isCompositeClass(o.getClass());
+	}
+
+	/**
+	 * Creates new instance of SWT {@link org.eclipse.swt.widgets.Composite}.
+	 */
+	public static Object createComposite(Object parent, int style) throws Exception {
+		Constructor<?> constructor =
+				ReflectionUtils.getConstructorBySignature(
+						getCompositeClass(),
+						"<init>(org.eclipse.swt.widgets.Composite,int)");
+		return constructor.newInstance(parent, style);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Children
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Invoke method <code>Composite.getChildren()</code> for given composite.
+	 */
+	public static Object[] getChildren(Object composite) {
+		Object[] children = (Object[]) ReflectionUtils.invokeMethodEx(composite, "getChildren()");
+		return children != null ? children : ArrayUtils.EMPTY_OBJECT_ARRAY;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Layout
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return {@link org.eclipse.swt.widgets.Layout} {@link Class} loaded from active editor
+	 *         {@link ClassLoader}.
+	 */
+	public static Class<?> getLayoutClass() {
+		return loadClass("org.eclipse.swt.widgets.Layout");
+	}
+
+	/**
+	 * Invoke method <code>Composite.getLayout()</code> for given composite.
+	 */
+	public static Object getLayout(Object composite) throws Exception {
+		return ReflectionUtils.invokeMethodEx(composite, "getLayout()");
+	}
+
+	/**
+	 * Invoke method <code>Composite.setLayout(layout)</code> for given composite.
+	 */
+	public static void setLayout(Object composite, Object layout) throws Exception {
+		ReflectionUtils.invokeMethod(composite, "setLayout(org.eclipse.swt.widgets.Layout)", layout);
+	}
+
+	/**
+	 * Invoke method <code>Composite.layout()</code> for given composite.
+	 */
+	public static void layout(Object composite) throws Exception {
+		ReflectionUtils.invokeMethod(composite, "layout()");
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Client area
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Invoke method <code>Composite.computeTrim()</code> for given composite.
+	 */
+	public static Rectangle computeTrim(Object composite, int x, int y, int width, int height)
+			throws Exception {
+		Object rectangle =
+				ReflectionUtils.invokeMethod(composite, "computeTrim(int,int,int,int)", x, y, width, height);
+		return RectangleSupport.getRectangle(rectangle);
+	}
+
+	/**
+	 * Invoke method <code>Composite.getClientArea()</code> for given composite.
+	 */
+	public static Rectangle getClientArea(final Object composite) {
+		return ExecutionUtils.runObject(new RunnableObjectEx<Rectangle>() {
+			@Override
+			public Rectangle runObject() throws Exception {
+				Object rectangle = ReflectionUtils.invokeMethod(composite, "getClientArea()");
+				return RectangleSupport.getRectangle(rectangle);
+			}
+		});
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/ControlSupport.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/ControlSupport.java
index e51aa474b..0e4bb9bec 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/ControlSupport.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/ControlSupport.java
@@ -23,217 +23,217 @@
  * @coverage swt.support
  */
 public class ControlSupport extends AbstractSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Classes
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return {@link org.eclipse.swt.widgets.Widget} {@link Class} loaded from active editor
-   *         {@link ClassLoader}.
-   */
-  public static Class<?> getWidgetClass() {
-    return loadClass("org.eclipse.swt.widgets.Widget");
-  }
-
-  /**
-   * @return {@link org.eclipse.swt.widgets.Control} {@link Class} loaded from active editor
-   *         {@link ClassLoader}.
-   */
-  public static Class<?> getControlClass() {
-    return loadClass("org.eclipse.swt.widgets.Control");
-  }
-
-  /**
-   * @return <code>true</code> if given {@link Class} is successor of
-   *         {@link org.eclipse.swt.widgets.Control}.
-   */
-  public static boolean isControlClass(Class<?> clazz) {
-    return ReflectionUtils.isSuccessorOf(clazz, "org.eclipse.swt.widgets.Control");
-  }
-
-  /**
-   * @return <code>true</code> if given {@link Object} is {@link org.eclipse.swt.widgets.Control}.
-   */
-  public static boolean isControl(Object o) {
-    if (o != null) {
-      return isControlClass(o.getClass());
-    } else {
-      return false;
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Style
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Invoke method <code>int Widget.getStyle()</code> for widget.
-   */
-  public static int getStyle(final Object widget) {
-    return (Integer) ReflectionUtils.invokeMethodEx(widget, "getStyle()");
-  }
-
-  /**
-   * @return <code>true</code> if given widget contains given style.
-   */
-  public static boolean isStyle(Object widget, int style) {
-    return (getStyle(widget) & style) != 0;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Bounds
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Invoke method <code>Rectangle Control.getBounds()</code> for control.
-   */
-  public static Rectangle getBounds(Object control) throws Exception {
-    Object bounds = ReflectionUtils.invokeMethod(control, "getBounds()");
-    return RectangleSupport.getRectangle(bounds);
-  }
-
-  /**
-   * Invoke method <code>Point Control.toDisplay(int, int)</code> for control.
-   */
-  public static Point toDisplay(Object control, int x, int y) throws Exception {
-    Object location = ReflectionUtils.invokeMethod(control, "toDisplay(int,int)", x, y);
-    return PointSupport.getPoint(location);
-  }
-
-  /**
-   * Invoke method <code>Control.setSize(int, int)</code> for control.
-   */
-  public static void setSize(Object control, int width, int height) throws Exception {
-    ReflectionUtils.invokeMethod(control, "setSize(int,int)", width, height);
-  }
-
-  /**
-   * Invoke method <code>Control.setLocation(int, int)</code> for control.
-   */
-  public static void setLocation(Object control, int x, int y) throws Exception {
-    ReflectionUtils.invokeMethod(control, "setLocation(int,int)", x, y);
-  }
-
-  /**
-   * Invoke method <code>Control.computeSize(SWT.DEFAULT, SWT.DEFAULT)</code> for control.
-   */
-  public static Object computeSize_DEFAULT(Object control) throws Exception {
-    return ReflectionUtils.invokeMethod(
-        control,
-        "computeSize(int,int)",
-        SwtSupport.DEFAULT,
-        SwtSupport.DEFAULT);
-  }
-
-  /**
-   * Invoke method <code>Control.computeSize(SWT.DEFAULT, SWT.DEFAULT)</code> for control.
-   */
-  public static Dimension getPreferredSize(Object control) throws Exception {
-    Object size =
-        ReflectionUtils.invokeMethod(
-            control,
-            "computeSize(int,int)",
-            SwtSupport.DEFAULT,
-            SwtSupport.DEFAULT);
-    Point pointSize = PointSupport.getPoint(size);
-    return new Dimension(pointSize.x, pointSize.y);
-  }
-
-  /**
-   * Invoke method <code>Control.getBorderWidth()</code> for given control.
-   */
-  public static int getBorderWidth(Object control) {
-    return (Integer) ReflectionUtils.invokeMethodEx(control, "getBorderWidth()");
-  }
-
-  /**
-   * Invoke method <code>Control.pack()</code> for control.
-   */
-  public static void pack(Object control) throws Exception {
-    ReflectionUtils.invokeMethod(control, "pack()");
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // LayoutData
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Invoke method <code>Control.getLayoutData()</code> for control.
-   */
-  public static Object getLayoutData(Object control) {
-    return ReflectionUtils.invokeMethodEx(control, "getLayoutData()");
-  }
-
-  /**
-   * Invoke method <code>Control.setLayoutData()</code> for control.
-   */
-  public static void setLayoutData(Object control, Object layoutData) {
-    ReflectionUtils.invokeMethodEx(control, "setLayoutData(java.lang.Object)", layoutData);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Data
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Invoke method <code>Control.getData(String)</code> for control.
-   */
-  public static Object getData(Object control, String key) throws Exception {
-    return ReflectionUtils.invokeMethod(control, "getData(java.lang.String)", key);
-  }
-
-  /**
-   * Invoke method <code>Control.setData(String, Object)</code> for control.
-   */
-  public static void setData(Object control, String key, Object value) throws Exception {
-    ReflectionUtils.invokeMethod(control, "setData(java.lang.String,java.lang.Object)", key, value);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parent
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Invoke method <code>Control Control.getParent()</code> for control.
-   */
-  public static Object getParent(Object control) {
-    return ReflectionUtils.invokeMethodEx(control, "getParent()");
-  }
-
-  /**
-   * Invoke method <code>Control Control.getShell()</code> for control.
-   */
-  public static Object getShell(Object control) {
-    return ReflectionUtils.invokeMethodEx(control, "getShell()");
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Dispose
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Invoke method <code>Widget.dispose()</code> for widget if it not disposed.
-   */
-  public static void dispose(Object widget) {
-    if (widget == null) {
-      return;
-    }
-    if (!isDisposed(widget)) {
-      ReflectionUtils.invokeMethodEx(widget, "dispose()");
-    }
-  }
-
-  /**
-   * @return <code>true</code> if given <code>Widget</code> is disposed.
-   */
-  public static boolean isDisposed(Object widget) {
-    return (Boolean) ReflectionUtils.invokeMethodEx(widget, "isDisposed()");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Classes
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return {@link org.eclipse.swt.widgets.Widget} {@link Class} loaded from active editor
+	 *         {@link ClassLoader}.
+	 */
+	public static Class<?> getWidgetClass() {
+		return loadClass("org.eclipse.swt.widgets.Widget");
+	}
+
+	/**
+	 * @return {@link org.eclipse.swt.widgets.Control} {@link Class} loaded from active editor
+	 *         {@link ClassLoader}.
+	 */
+	public static Class<?> getControlClass() {
+		return loadClass("org.eclipse.swt.widgets.Control");
+	}
+
+	/**
+	 * @return <code>true</code> if given {@link Class} is successor of
+	 *         {@link org.eclipse.swt.widgets.Control}.
+	 */
+	public static boolean isControlClass(Class<?> clazz) {
+		return ReflectionUtils.isSuccessorOf(clazz, "org.eclipse.swt.widgets.Control");
+	}
+
+	/**
+	 * @return <code>true</code> if given {@link Object} is {@link org.eclipse.swt.widgets.Control}.
+	 */
+	public static boolean isControl(Object o) {
+		if (o != null) {
+			return isControlClass(o.getClass());
+		} else {
+			return false;
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Style
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Invoke method <code>int Widget.getStyle()</code> for widget.
+	 */
+	public static int getStyle(final Object widget) {
+		return (Integer) ReflectionUtils.invokeMethodEx(widget, "getStyle()");
+	}
+
+	/**
+	 * @return <code>true</code> if given widget contains given style.
+	 */
+	public static boolean isStyle(Object widget, int style) {
+		return (getStyle(widget) & style) != 0;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Bounds
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Invoke method <code>Rectangle Control.getBounds()</code> for control.
+	 */
+	public static Rectangle getBounds(Object control) throws Exception {
+		Object bounds = ReflectionUtils.invokeMethod(control, "getBounds()");
+		return RectangleSupport.getRectangle(bounds);
+	}
+
+	/**
+	 * Invoke method <code>Point Control.toDisplay(int, int)</code> for control.
+	 */
+	public static Point toDisplay(Object control, int x, int y) throws Exception {
+		Object location = ReflectionUtils.invokeMethod(control, "toDisplay(int,int)", x, y);
+		return PointSupport.getPoint(location);
+	}
+
+	/**
+	 * Invoke method <code>Control.setSize(int, int)</code> for control.
+	 */
+	public static void setSize(Object control, int width, int height) throws Exception {
+		ReflectionUtils.invokeMethod(control, "setSize(int,int)", width, height);
+	}
+
+	/**
+	 * Invoke method <code>Control.setLocation(int, int)</code> for control.
+	 */
+	public static void setLocation(Object control, int x, int y) throws Exception {
+		ReflectionUtils.invokeMethod(control, "setLocation(int,int)", x, y);
+	}
+
+	/**
+	 * Invoke method <code>Control.computeSize(SWT.DEFAULT, SWT.DEFAULT)</code> for control.
+	 */
+	public static Object computeSize_DEFAULT(Object control) throws Exception {
+		return ReflectionUtils.invokeMethod(
+				control,
+				"computeSize(int,int)",
+				SwtSupport.DEFAULT,
+				SwtSupport.DEFAULT);
+	}
+
+	/**
+	 * Invoke method <code>Control.computeSize(SWT.DEFAULT, SWT.DEFAULT)</code> for control.
+	 */
+	public static Dimension getPreferredSize(Object control) throws Exception {
+		Object size =
+				ReflectionUtils.invokeMethod(
+						control,
+						"computeSize(int,int)",
+						SwtSupport.DEFAULT,
+						SwtSupport.DEFAULT);
+		Point pointSize = PointSupport.getPoint(size);
+		return new Dimension(pointSize.x, pointSize.y);
+	}
+
+	/**
+	 * Invoke method <code>Control.getBorderWidth()</code> for given control.
+	 */
+	public static int getBorderWidth(Object control) {
+		return (Integer) ReflectionUtils.invokeMethodEx(control, "getBorderWidth()");
+	}
+
+	/**
+	 * Invoke method <code>Control.pack()</code> for control.
+	 */
+	public static void pack(Object control) throws Exception {
+		ReflectionUtils.invokeMethod(control, "pack()");
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// LayoutData
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Invoke method <code>Control.getLayoutData()</code> for control.
+	 */
+	public static Object getLayoutData(Object control) {
+		return ReflectionUtils.invokeMethodEx(control, "getLayoutData()");
+	}
+
+	/**
+	 * Invoke method <code>Control.setLayoutData()</code> for control.
+	 */
+	public static void setLayoutData(Object control, Object layoutData) {
+		ReflectionUtils.invokeMethodEx(control, "setLayoutData(java.lang.Object)", layoutData);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Data
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Invoke method <code>Control.getData(String)</code> for control.
+	 */
+	public static Object getData(Object control, String key) throws Exception {
+		return ReflectionUtils.invokeMethod(control, "getData(java.lang.String)", key);
+	}
+
+	/**
+	 * Invoke method <code>Control.setData(String, Object)</code> for control.
+	 */
+	public static void setData(Object control, String key, Object value) throws Exception {
+		ReflectionUtils.invokeMethod(control, "setData(java.lang.String,java.lang.Object)", key, value);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parent
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Invoke method <code>Control Control.getParent()</code> for control.
+	 */
+	public static Object getParent(Object control) {
+		return ReflectionUtils.invokeMethodEx(control, "getParent()");
+	}
+
+	/**
+	 * Invoke method <code>Control Control.getShell()</code> for control.
+	 */
+	public static Object getShell(Object control) {
+		return ReflectionUtils.invokeMethodEx(control, "getShell()");
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Dispose
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Invoke method <code>Widget.dispose()</code> for widget if it not disposed.
+	 */
+	public static void dispose(Object widget) {
+		if (widget == null) {
+			return;
+		}
+		if (!isDisposed(widget)) {
+			ReflectionUtils.invokeMethodEx(widget, "dispose()");
+		}
+	}
+
+	/**
+	 * @return <code>true</code> if given <code>Widget</code> is disposed.
+	 */
+	public static boolean isDisposed(Object widget) {
+		return (Boolean) ReflectionUtils.invokeMethodEx(widget, "isDisposed()");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/CoordinateUtils.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/CoordinateUtils.java
index fade19ab9..5eb1b6b04 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/CoordinateUtils.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/CoordinateUtils.java
@@ -25,123 +25,123 @@
  * @coverage swt.support
  */
 public final class CoordinateUtils {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private CoordinateUtils() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private CoordinateUtils() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Bounds
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the location of given control in display coordinates.
-   */
-  public static Point getDisplayLocation(Object composite) throws Exception {
-    Rectangle bounds = ControlSupport.getBounds(composite);
-    int x = bounds.x;
-    int y = bounds.y;
-    return getDisplayLocation(composite, x, y);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Bounds
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the location of given control in display coordinates.
+	 */
+	public static Point getDisplayLocation(Object composite) throws Exception {
+		Rectangle bounds = ControlSupport.getBounds(composite);
+		int x = bounds.x;
+		int y = bounds.y;
+		return getDisplayLocation(composite, x, y);
+	}
 
-  /**
-   * @return the given location (in parent of given <code>composite</code>) in display coordinates.
-   */
-  public static Point getDisplayLocation(Object composite, int x, int y) throws Exception {
-    if (!ContainerSupport.isShell(composite)) {
-      Object parent = ControlSupport.getParent(composite);
-      if (parent != null) {
-        Point location = ControlSupport.toDisplay(parent, x, y);
-        x = location.x;
-        y = location.y;
-      }
-    }
-    return new Point(x, y);
-  }
+	/**
+	 * @return the given location (in parent of given <code>composite</code>) in display coordinates.
+	 */
+	public static Point getDisplayLocation(Object composite, int x, int y) throws Exception {
+		if (!ContainerSupport.isShell(composite)) {
+			Object parent = ControlSupport.getParent(composite);
+			if (parent != null) {
+				Point location = ControlSupport.toDisplay(parent, x, y);
+				x = location.x;
+				y = location.y;
+			}
+		}
+		return new Point(x, y);
+	}
 
-  /**
-   * @return the bounds of <code>child</code> relative to <code>parent</code>.
-   */
-  public static Rectangle getBounds(Object parent, Object child) throws Exception {
-    Rectangle bounds = ControlSupport.getBounds(child);
-    Point childLocation = CoordinateUtils.getDisplayLocation(child);
-    Point parentLocation = CoordinateUtils.getDisplayLocation(parent);
-    bounds.x = childLocation.x - parentLocation.x;
-    bounds.y = childLocation.y - parentLocation.y;
-    return bounds;
-  }
+	/**
+	 * @return the bounds of <code>child</code> relative to <code>parent</code>.
+	 */
+	public static Rectangle getBounds(Object parent, Object child) throws Exception {
+		Rectangle bounds = ControlSupport.getBounds(child);
+		Point childLocation = CoordinateUtils.getDisplayLocation(child);
+		Point parentLocation = CoordinateUtils.getDisplayLocation(parent);
+		bounds.x = childLocation.x - parentLocation.x;
+		bounds.y = childLocation.y - parentLocation.y;
+		return bounds;
+	}
 
-  /**
-   * @return {@link Insets} for given composite. Practically we need here only shift of
-   *         <code>(0,0)</code> point of client area relative to the top-left corner of bounds.
-   */
-  public static Insets getClientAreaInsets(Object composite) throws Exception {
-    // prepare top/left
-    int top;
-    int left;
-    {
-      Point displayLocation = getDisplayLocation(composite);
-      Point clientAreaLocation = ControlSupport.toDisplay(composite, 0, 0);
-      // tweak for right-to-left
-      {
-        boolean isRTL = ContainerSupport.isRTL(composite);
-        boolean isParentRTL = ContainerSupport.isRTL(ControlSupport.getParent(composite));
-        if (isRTL && !isParentRTL) {
-          Rectangle clientArea = ContainerSupport.getClientArea(composite);
-          clientAreaLocation.x -= clientArea.width;
-        }
-      }
-      //
-      top = Math.abs(clientAreaLocation.y - displayLocation.y);
-      left = Math.abs(clientAreaLocation.x - displayLocation.x);
-    }
-    // if client area (0,0) is not shifted from top-left corner of bounds, then no insets at all
-    if (top == 0 && left == 0) {
-      return IFigure.NO_INSETS;
-    }
-    // prepare bottom/right
-    Rectangle bounds = ControlSupport.getBounds(composite);
-    Rectangle clientArea = ContainerSupport.getClientArea(composite);
-    int bottom = bounds.height - top - clientArea.height;
-    int right = bounds.width - left - clientArea.width;
-    // final insets
-    return new Insets(top, left, bottom, right);
-  }
+	/**
+	 * @return {@link Insets} for given composite. Practically we need here only shift of
+	 *         <code>(0,0)</code> point of client area relative to the top-left corner of bounds.
+	 */
+	public static Insets getClientAreaInsets(Object composite) throws Exception {
+		// prepare top/left
+		int top;
+		int left;
+		{
+			Point displayLocation = getDisplayLocation(composite);
+			Point clientAreaLocation = ControlSupport.toDisplay(composite, 0, 0);
+			// tweak for right-to-left
+			{
+				boolean isRTL = ContainerSupport.isRTL(composite);
+				boolean isParentRTL = ContainerSupport.isRTL(ControlSupport.getParent(composite));
+				if (isRTL && !isParentRTL) {
+					Rectangle clientArea = ContainerSupport.getClientArea(composite);
+					clientAreaLocation.x -= clientArea.width;
+				}
+			}
+			//
+			top = Math.abs(clientAreaLocation.y - displayLocation.y);
+			left = Math.abs(clientAreaLocation.x - displayLocation.x);
+		}
+		// if client area (0,0) is not shifted from top-left corner of bounds, then no insets at all
+		if (top == 0 && left == 0) {
+			return IFigure.NO_INSETS;
+		}
+		// prepare bottom/right
+		Rectangle bounds = ControlSupport.getBounds(composite);
+		Rectangle clientArea = ContainerSupport.getClientArea(composite);
+		int bottom = bounds.height - top - clientArea.height;
+		int right = bounds.width - left - clientArea.width;
+		// final insets
+		return new Insets(top, left, bottom, right);
+	}
 
-  /**
-   * Returns the {@link Insets} that can be used to crop bounds of this {@link Composite} to produce
-   * a rectangle which describes the area of this {@link Composite} which is capable of displaying
-   * data (that is, not covered by the "trimmings").
-   * <p>
-   * Note, that this method is different from {@link #getClientAreaInsets()}. For example in
-   * {@link Group} point <code>(0,0)</code> is point on group border, but
-   * {@link Group#getClientArea()} returns size of border on sides. But still, if we <b>want</b> to
-   * place child {@link Control} exactly in top-left point of {@link Group}, we should use
-   * <code>(0,0)</code>. However if we want to place {@link Control} in <b>top-left of preferred
-   * location</b>, then {@link #getClientAreaInsets2()} should be used.
-   *
-   * @return the {@link Insets} for "displaying data" part of given {@link Composite}.
-   */
-  public static Insets getClientAreaInsets2(Object composite) throws Exception {
-    // if client area (0,0) is shifted from top-left corner of bounds, then no need it additional insets
-    {
-      Insets trimInsets = getClientAreaInsets(composite);
-      if (trimInsets.top != 0 || trimInsets.left != 0) {
-        return IFigure.NO_INSETS;
-      }
-    }
-    // prepare bounds/clientArea
-    Rectangle bounds = ControlSupport.getBounds(composite);
-    Rectangle clientArea = ContainerSupport.getClientArea(composite);
-    // prepare insets
-    int top = clientArea.y;
-    int left = clientArea.x;
-    int bottom = bounds.height - top - clientArea.height;
-    int right = bounds.width - left - clientArea.width;
-    return new Insets(top, left, bottom, right);
-  }
+	/**
+	 * Returns the {@link Insets} that can be used to crop bounds of this {@link Composite} to produce
+	 * a rectangle which describes the area of this {@link Composite} which is capable of displaying
+	 * data (that is, not covered by the "trimmings").
+	 * <p>
+	 * Note, that this method is different from {@link #getClientAreaInsets()}. For example in
+	 * {@link Group} point <code>(0,0)</code> is point on group border, but
+	 * {@link Group#getClientArea()} returns size of border on sides. But still, if we <b>want</b> to
+	 * place child {@link Control} exactly in top-left point of {@link Group}, we should use
+	 * <code>(0,0)</code>. However if we want to place {@link Control} in <b>top-left of preferred
+	 * location</b>, then {@link #getClientAreaInsets2()} should be used.
+	 *
+	 * @return the {@link Insets} for "displaying data" part of given {@link Composite}.
+	 */
+	public static Insets getClientAreaInsets2(Object composite) throws Exception {
+		// if client area (0,0) is shifted from top-left corner of bounds, then no need it additional insets
+		{
+			Insets trimInsets = getClientAreaInsets(composite);
+			if (trimInsets.top != 0 || trimInsets.left != 0) {
+				return IFigure.NO_INSETS;
+			}
+		}
+		// prepare bounds/clientArea
+		Rectangle bounds = ControlSupport.getBounds(composite);
+		Rectangle clientArea = ContainerSupport.getClientArea(composite);
+		// prepare insets
+		int top = clientArea.y;
+		int left = clientArea.x;
+		int bottom = bounds.height - top - clientArea.height;
+		int right = bounds.width - left - clientArea.width;
+		return new Insets(top, left, bottom, right);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/DisplayEvaluator.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/DisplayEvaluator.java
index f524e5d59..2e82c9c62 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/DisplayEvaluator.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/DisplayEvaluator.java
@@ -29,22 +29,22 @@
  * @coverage swt.support
  */
 public class DisplayEvaluator implements IExpressionEvaluator {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IExpressionEvaluator
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public Object evaluate(EvaluationContext context,
-      Expression expression,
-      ITypeBinding typeBinding,
-      String typeQualifiedName) throws Exception {
-    if (expression instanceof ClassInstanceCreation
-        && AstNodeUtils.getFullyQualifiedName(typeBinding, false).equals(
-            "org.eclipse.swt.widgets.Display")) {
-      return DisplaySupport.getCurrent();
-    }
-    // we don't understand given expression
-    return AstEvaluationEngine.UNKNOWN;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IExpressionEvaluator
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public Object evaluate(EvaluationContext context,
+			Expression expression,
+			ITypeBinding typeBinding,
+			String typeQualifiedName) throws Exception {
+		if (expression instanceof ClassInstanceCreation
+				&& AstNodeUtils.getFullyQualifiedName(typeBinding, false).equals(
+						"org.eclipse.swt.widgets.Display")) {
+			return DisplaySupport.getCurrent();
+		}
+		// we don't understand given expression
+		return AstEvaluationEngine.UNKNOWN;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/DisplaySupport.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/DisplaySupport.java
index f82541f6d..196968700 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/DisplaySupport.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/DisplaySupport.java
@@ -21,44 +21,44 @@
  * @coverage swt.support
  */
 public class DisplaySupport extends AbstractSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Display
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return {@link org.eclipse.swt.widgets.Display} {@link Class} loaded from active editor
-   *         {@link ClassLoader}.
-   */
-  public static Class<?> getDisplayClass() {
-    return loadClass("org.eclipse.swt.widgets.Display");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Display
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return {@link org.eclipse.swt.widgets.Display} {@link Class} loaded from active editor
+	 *         {@link ClassLoader}.
+	 */
+	public static Class<?> getDisplayClass() {
+		return loadClass("org.eclipse.swt.widgets.Display");
+	}
 
-  /**
-   * Invoke method <code>Display.getDefault()</code>.
-   */
-  public static Object getDefault() throws Exception {
-    return ReflectionUtils.invokeMethod(getDisplayClass(), "getDefault()");
-  }
+	/**
+	 * Invoke method <code>Display.getDefault()</code>.
+	 */
+	public static Object getDefault() throws Exception {
+		return ReflectionUtils.invokeMethod(getDisplayClass(), "getDefault()");
+	}
 
-  /**
-   * Invoke method <code>Display.getCurrent()</code>.
-   */
-  public static Object getCurrent() throws Exception {
-    return ReflectionUtils.invokeMethod(getDisplayClass(), "getCurrent()");
-  }
+	/**
+	 * Invoke method <code>Display.getCurrent()</code>.
+	 */
+	public static Object getCurrent() throws Exception {
+		return ReflectionUtils.invokeMethod(getDisplayClass(), "getCurrent()");
+	}
 
-  /**
-   * Invoke method <code>Display.getSystemColor()</code> for given color.
-   */
-  public static Object getSystemColor(Object id) throws Exception {
-    return ReflectionUtils.invokeMethod(getCurrent(), "getSystemColor(int)", id);
-  }
+	/**
+	 * Invoke method <code>Display.getSystemColor()</code> for given color.
+	 */
+	public static Object getSystemColor(Object id) throws Exception {
+		return ReflectionUtils.invokeMethod(getCurrent(), "getSystemColor(int)", id);
+	}
 
-  /**
-   * Invoke method <code>Display.getSystemFont()</code> for default display.
-   */
-  public static Object getSystemFont() throws Exception {
-    return ReflectionUtils.invokeMethod(getDefault(), "getSystemFont()");
-  }
+	/**
+	 * Invoke method <code>Display.getSystemFont()</code> for default display.
+	 */
+	public static Object getSystemFont() throws Exception {
+		return ReflectionUtils.invokeMethod(getDefault(), "getSystemFont()");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/FillLayoutSupport.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/FillLayoutSupport.java
index 02d598c58..8b3997800 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/FillLayoutSupport.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/FillLayoutSupport.java
@@ -22,34 +22,34 @@
  * @coverage swt.support
  */
 public class FillLayoutSupport extends AbstractSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // FillLayout
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return value of field <code>type</code>.
-   */
-  public static int getType(final Object layout) {
-    return ExecutionUtils.runObjectLog(new RunnableObjectEx<Integer>() {
-      @Override
-      public Integer runObject() throws Exception {
-        return ReflectionUtils.getFieldInt(layout, "type");
-      }
-    }, SwtSupport.HORIZONTAL);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// FillLayout
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return value of field <code>type</code>.
+	 */
+	public static int getType(final Object layout) {
+		return ExecutionUtils.runObjectLog(new RunnableObjectEx<Integer>() {
+			@Override
+			public Integer runObject() throws Exception {
+				return ReflectionUtils.getFieldInt(layout, "type");
+			}
+		}, SwtSupport.HORIZONTAL);
+	}
 
-  /**
-   * @return <code>true</code> if this layout is horizontal (type == SWT.HORIZONTAL).
-   */
-  public static boolean isHorizontal(Object layout) {
-    return getType(layout) == SwtSupport.HORIZONTAL;
-  }
+	/**
+	 * @return <code>true</code> if this layout is horizontal (type == SWT.HORIZONTAL).
+	 */
+	public static boolean isHorizontal(Object layout) {
+		return getType(layout) == SwtSupport.HORIZONTAL;
+	}
 
-  /**
-   * Create new {@link org.eclipse.swt.layout.FillLayout}.
-   */
-  public static Object newInstance() throws Exception {
-    return loadClass("org.eclipse.swt.layout.FillLayout").newInstance();
-  }
+	/**
+	 * Create new {@link org.eclipse.swt.layout.FillLayout}.
+	 */
+	public static Object newInstance() throws Exception {
+		return loadClass("org.eclipse.swt.layout.FillLayout").newInstance();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/FontSupport.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/FontSupport.java
index e617220c3..f0df9dc09 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/FontSupport.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/FontSupport.java
@@ -29,142 +29,142 @@
  * @coverage swt.support
  */
 public class FontSupport extends AbstractSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Font
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link Class} of {@link Font}.
-   */
-  public static Class<?> getFontClass() {
-    return loadClass("org.eclipse.swt.graphics.Font");
-  }
-
-  /**
-   * Create new font <code>new Font(null, name, size, style)</code>.
-   */
-  public static Object createFont(String name, int size, Object style) throws Exception {
-    Constructor<?> constructor =
-        ReflectionUtils.getConstructorBySignature(
-            getFontClass(),
-            "<init>(org.eclipse.swt.graphics.Device,java.lang.String,int,int)");
-    return constructor.newInstance(null, name, size, style);
-  }
-
-  /**
-   * @return the copy of given {@link Font}.
-   */
-  public static Object getCopy(Object font) throws Exception {
-    Object fontDataArray = ReflectionUtils.invokeMethod2(font, "getFontData");
-    return ReflectionUtils.getConstructorBySignature(
-        getFontClass(),
-        "<init>(org.eclipse.swt.graphics.Device,org.eclipse.swt.graphics.FontData[])").newInstance(
-        DisplaySupport.getCurrent(),
-        fontDataArray);
-  }
-
-  /**
-   * @return <code>true</code> if given {@link Font} is disposed.
-   */
-  public static boolean isDisposed(Object font) throws Exception {
-    return (Boolean) ReflectionUtils.invokeMethod(font, "isDisposed()");
-  }
-
-  /**
-   * Invoke method <code>Font.dispose()</code> for font if it not disposed.
-   */
-  public static void dispose(Object font) throws Exception {
-    if (!isDisposed(font)) {
-      ReflectionUtils.invokeMethod(font, "dispose()");
-    }
-  }
-
-  /**
-   * @return names of all fonts into system.
-   */
-  public static String[] getFontFamilies() throws Exception {
-    Set<String> families = Sets.newTreeSet();
-    // add all font families
-    Collections.addAll(families, ToolkitSupport.getFontFamilies(false));
-    Collections.addAll(families, ToolkitSupport.getFontFamilies(true));
-    // add default font
-    families.add(getFontName(getFontData(DisplaySupport.getSystemFont())));
-    // sort names
-    String[] sortFamilies = families.toArray(new String[families.size()]);
-    Arrays.sort(sortFamilies);
-    return sortFamilies;
-  }
-
-  /**
-   * Invoke method <code>Font.getFontData()</code> for given font.
-   */
-  public static Object getFontData(Object font) throws Exception {
-    Object/*<FontData[]>*/fontData = ReflectionUtils.invokeMethod(font, "getFontData()");
-    return Array.get(fontData, 0);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // FontData
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Invoke method <code>FontData.getName()</code> for given font data.
-   */
-  public static String getFontName(Object fontData) throws Exception {
-    return (String) ReflectionUtils.invokeMethod(fontData, "getName()");
-  }
-
-  /**
-   * Invoke method <code>FontData.getHeight()</code> for given font data.
-   */
-  public static int getFontSize(Object fontData) throws Exception {
-    return (Integer) ReflectionUtils.invokeMethod(fontData, "getHeight()");
-  }
-
-  /**
-   * Invoke method <code>FontData.getStyle()</code> for given font data.
-   */
-  public static int getFontStyle(Object fontData) throws Exception {
-    return (Integer) ReflectionUtils.invokeMethod(fontData, "getStyle()");
-  }
-
-  /**
-   * @return source code of style: e.x., <code>SWT.BOLD</code>.
-   */
-  public static String getFontStyleSource(Object fontData) throws Exception {
-    int style = getFontStyle(fontData);
-    boolean bold = (style & SwtSupport.BOLD) != 0;
-    boolean italic = (style & SwtSupport.ITALIC) != 0;
-    if (bold && italic) {
-      return "org.eclipse.swt.SWT.BOLD | org.eclipse.swt.SWT.ITALIC";
-    }
-    if (bold) {
-      return "org.eclipse.swt.SWT.BOLD";
-    }
-    if (italic) {
-      return "org.eclipse.swt.SWT.ITALIC";
-    }
-    return "org.eclipse.swt.SWT.NORMAL";
-  }
-
-  /**
-   * @return text for style: e.x., <code>BOLD</code>.
-   */
-  public static String getFontStyleText(Object fontData) throws Exception {
-    int style = getFontStyle(fontData);
-    boolean bold = (style & SwtSupport.BOLD) != 0;
-    boolean italic = (style & SwtSupport.ITALIC) != 0;
-    if (bold && italic) {
-      return "BOLD ITALIC";
-    }
-    if (bold) {
-      return "BOLD";
-    }
-    if (italic) {
-      return "ITALIC";
-    }
-    return "";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Font
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link Class} of {@link Font}.
+	 */
+	public static Class<?> getFontClass() {
+		return loadClass("org.eclipse.swt.graphics.Font");
+	}
+
+	/**
+	 * Create new font <code>new Font(null, name, size, style)</code>.
+	 */
+	public static Object createFont(String name, int size, Object style) throws Exception {
+		Constructor<?> constructor =
+				ReflectionUtils.getConstructorBySignature(
+						getFontClass(),
+						"<init>(org.eclipse.swt.graphics.Device,java.lang.String,int,int)");
+		return constructor.newInstance(null, name, size, style);
+	}
+
+	/**
+	 * @return the copy of given {@link Font}.
+	 */
+	public static Object getCopy(Object font) throws Exception {
+		Object fontDataArray = ReflectionUtils.invokeMethod2(font, "getFontData");
+		return ReflectionUtils.getConstructorBySignature(
+				getFontClass(),
+				"<init>(org.eclipse.swt.graphics.Device,org.eclipse.swt.graphics.FontData[])").newInstance(
+						DisplaySupport.getCurrent(),
+						fontDataArray);
+	}
+
+	/**
+	 * @return <code>true</code> if given {@link Font} is disposed.
+	 */
+	public static boolean isDisposed(Object font) throws Exception {
+		return (Boolean) ReflectionUtils.invokeMethod(font, "isDisposed()");
+	}
+
+	/**
+	 * Invoke method <code>Font.dispose()</code> for font if it not disposed.
+	 */
+	public static void dispose(Object font) throws Exception {
+		if (!isDisposed(font)) {
+			ReflectionUtils.invokeMethod(font, "dispose()");
+		}
+	}
+
+	/**
+	 * @return names of all fonts into system.
+	 */
+	public static String[] getFontFamilies() throws Exception {
+		Set<String> families = Sets.newTreeSet();
+		// add all font families
+		Collections.addAll(families, ToolkitSupport.getFontFamilies(false));
+		Collections.addAll(families, ToolkitSupport.getFontFamilies(true));
+		// add default font
+		families.add(getFontName(getFontData(DisplaySupport.getSystemFont())));
+		// sort names
+		String[] sortFamilies = families.toArray(new String[families.size()]);
+		Arrays.sort(sortFamilies);
+		return sortFamilies;
+	}
+
+	/**
+	 * Invoke method <code>Font.getFontData()</code> for given font.
+	 */
+	public static Object getFontData(Object font) throws Exception {
+		Object/*<FontData[]>*/fontData = ReflectionUtils.invokeMethod(font, "getFontData()");
+		return Array.get(fontData, 0);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// FontData
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Invoke method <code>FontData.getName()</code> for given font data.
+	 */
+	public static String getFontName(Object fontData) throws Exception {
+		return (String) ReflectionUtils.invokeMethod(fontData, "getName()");
+	}
+
+	/**
+	 * Invoke method <code>FontData.getHeight()</code> for given font data.
+	 */
+	public static int getFontSize(Object fontData) throws Exception {
+		return (Integer) ReflectionUtils.invokeMethod(fontData, "getHeight()");
+	}
+
+	/**
+	 * Invoke method <code>FontData.getStyle()</code> for given font data.
+	 */
+	public static int getFontStyle(Object fontData) throws Exception {
+		return (Integer) ReflectionUtils.invokeMethod(fontData, "getStyle()");
+	}
+
+	/**
+	 * @return source code of style: e.x., <code>SWT.BOLD</code>.
+	 */
+	public static String getFontStyleSource(Object fontData) throws Exception {
+		int style = getFontStyle(fontData);
+		boolean bold = (style & SwtSupport.BOLD) != 0;
+		boolean italic = (style & SwtSupport.ITALIC) != 0;
+		if (bold && italic) {
+			return "org.eclipse.swt.SWT.BOLD | org.eclipse.swt.SWT.ITALIC";
+		}
+		if (bold) {
+			return "org.eclipse.swt.SWT.BOLD";
+		}
+		if (italic) {
+			return "org.eclipse.swt.SWT.ITALIC";
+		}
+		return "org.eclipse.swt.SWT.NORMAL";
+	}
+
+	/**
+	 * @return text for style: e.x., <code>BOLD</code>.
+	 */
+	public static String getFontStyleText(Object fontData) throws Exception {
+		int style = getFontStyle(fontData);
+		boolean bold = (style & SwtSupport.BOLD) != 0;
+		boolean italic = (style & SwtSupport.ITALIC) != 0;
+		if (bold && italic) {
+			return "BOLD ITALIC";
+		}
+		if (bold) {
+			return "BOLD";
+		}
+		if (italic) {
+			return "ITALIC";
+		}
+		return "";
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/FormLayoutSupport.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/FormLayoutSupport.java
index 869e2519c..3bd3627c9 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/FormLayoutSupport.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/FormLayoutSupport.java
@@ -22,32 +22,32 @@
  * @coverage swt.support
  */
 public class FormLayoutSupport extends AbstractSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // FormLayout
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Create new {@link org.eclipse.swt.layout.FormData}.
-   */
-  public static Object createFormData() throws Exception {
-    return loadClass("org.eclipse.swt.layout.FormData").newInstance();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// FormLayout
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Create new {@link org.eclipse.swt.layout.FormData}.
+	 */
+	public static Object createFormData() throws Exception {
+		return loadClass("org.eclipse.swt.layout.FormData").newInstance();
+	}
 
-  /**
-   * Create new {@link org.eclipse.swt.layout.FormAttachment}.
-   */
-  public static Object createFormAttachment() throws Exception {
-    Class<?> clazz = getFormAttachmentClass();
-    // use ctor with two parameters
-    Constructor<?> twoParamsConstructor = clazz.getConstructor(int.class, int.class);
-    return twoParamsConstructor.newInstance(0, 0);
-  }
+	/**
+	 * Create new {@link org.eclipse.swt.layout.FormAttachment}.
+	 */
+	public static Object createFormAttachment() throws Exception {
+		Class<?> clazz = getFormAttachmentClass();
+		// use ctor with two parameters
+		Constructor<?> twoParamsConstructor = clazz.getConstructor(int.class, int.class);
+		return twoParamsConstructor.newInstance(0, 0);
+	}
 
-  /**
-   * @return a {@link Class} of {@link FormAttachment}.
-   */
-  public static Class<?> getFormAttachmentClass() throws Exception {
-    return loadClass("org.eclipse.swt.layout.FormAttachment");
-  }
+	/**
+	 * @return a {@link Class} of {@link FormAttachment}.
+	 */
+	public static Class<?> getFormAttachmentClass() throws Exception {
+		return loadClass("org.eclipse.swt.layout.FormAttachment");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/GridLayoutSupport.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/GridLayoutSupport.java
index cf8e4a28e..ff0cef53b 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/GridLayoutSupport.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/GridLayoutSupport.java
@@ -26,81 +26,81 @@
  * @coverage swt.support
  */
 public class GridLayoutSupport extends AbstractSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GridLayout
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link GridLayout#numColumns} value.
-   */
-  public static int getNumColumns(Object layout) {
-    return ReflectionUtils.getFieldInt(layout, "numColumns");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GridLayout
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link GridLayout#numColumns} value.
+	 */
+	public static int getNumColumns(Object layout) {
+		return ReflectionUtils.getFieldInt(layout, "numColumns");
+	}
 
-  /**
-   * @return the {@link Point} with column/row for given {@link org.eclipse.swt.widgets.Control} and
-   *         {@link org.eclipse.swt.layout.GridLayout} objects.
-   */
-  @SuppressWarnings({"unchecked", "rawtypes"})
-  public static Point getXY(Object layout, Object control) {
-    Map<Object, Object> map = (Map) ReflectionUtils.getFieldObject(layout, "m_controlToXY");
-    Object point = map.get(control);
-    return point != null ? PointSupport.getPoint(point) : null;
-  }
+	/**
+	 * @return the {@link Point} with column/row for given {@link org.eclipse.swt.widgets.Control} and
+	 *         {@link org.eclipse.swt.layout.GridLayout} objects.
+	 */
+	@SuppressWarnings({"unchecked", "rawtypes"})
+	public static Point getXY(Object layout, Object control) {
+		Map<Object, Object> map = (Map) ReflectionUtils.getFieldObject(layout, "m_controlToXY");
+		Object point = map.get(control);
+		return point != null ? PointSupport.getPoint(point) : null;
+	}
 
-  /**
-   * @return the {@link Point} with column/row for given {@link org.eclipse.swt.widgets.Control} and
-   *         {@link org.eclipse.swt.layout.GridLayout} objects.
-   */
-  public static Dimension getWH(Object layout, Object control) {
-    Object gridData2 =
-        ReflectionUtils.invokeMethodEx(
-            layout,
-            "getLayoutData2(org.eclipse.swt.widgets.Control)",
-            control);
-    int width = ReflectionUtils.getFieldInt(gridData2, "horizontalSpan");
-    int height = ReflectionUtils.getFieldInt(gridData2, "verticalSpan");
-    return new Dimension(width, height);
-  }
+	/**
+	 * @return the {@link Point} with column/row for given {@link org.eclipse.swt.widgets.Control} and
+	 *         {@link org.eclipse.swt.layout.GridLayout} objects.
+	 */
+	public static Dimension getWH(Object layout, Object control) {
+		Object gridData2 =
+				ReflectionUtils.invokeMethodEx(
+						layout,
+						"getLayoutData2(org.eclipse.swt.widgets.Control)",
+						control);
+		int width = ReflectionUtils.getFieldInt(gridData2, "horizontalSpan");
+		int height = ReflectionUtils.getFieldInt(gridData2, "verticalSpan");
+		return new Dimension(width, height);
+	}
 
-  /**
-   * @return the column origins for given {@link org.eclipse.swt.layout.GridLayout} object.
-   */
-  public static int[] getColumnOrigins(Object layout) {
-    return (int[]) ReflectionUtils.getFieldObject(layout, "m_columnOrigins");
-  }
+	/**
+	 * @return the column origins for given {@link org.eclipse.swt.layout.GridLayout} object.
+	 */
+	public static int[] getColumnOrigins(Object layout) {
+		return (int[]) ReflectionUtils.getFieldObject(layout, "m_columnOrigins");
+	}
 
-  /**
-   * @return the column widths for given {@link org.eclipse.swt.layout.GridLayout} object.
-   */
-  public static int[] getColumnWidths(Object layout) {
-    return (int[]) ReflectionUtils.getFieldObject(layout, "m_columnWidths");
-  }
+	/**
+	 * @return the column widths for given {@link org.eclipse.swt.layout.GridLayout} object.
+	 */
+	public static int[] getColumnWidths(Object layout) {
+		return (int[]) ReflectionUtils.getFieldObject(layout, "m_columnWidths");
+	}
 
-  /**
-   * @return the row origins for given {@link org.eclipse.swt.layout.GridLayout} object.
-   */
-  public static int[] getRowOrigins(Object layout) {
-    return (int[]) ReflectionUtils.getFieldObject(layout, "m_rowOrigins");
-  }
+	/**
+	 * @return the row origins for given {@link org.eclipse.swt.layout.GridLayout} object.
+	 */
+	public static int[] getRowOrigins(Object layout) {
+		return (int[]) ReflectionUtils.getFieldObject(layout, "m_rowOrigins");
+	}
 
-  /**
-   * @return the row heights for given {@link org.eclipse.swt.layout.GridLayout} object.
-   */
-  public static int[] getRowHeights(Object layout) {
-    return (int[]) ReflectionUtils.getFieldObject(layout, "m_rowHeights");
-  }
+	/**
+	 * @return the row heights for given {@link org.eclipse.swt.layout.GridLayout} object.
+	 */
+	public static int[] getRowHeights(Object layout) {
+		return (int[]) ReflectionUtils.getFieldObject(layout, "m_rowHeights");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GridData
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Create new {@link org.eclipse.swt.layout.GridData}.
-   */
-  public static Object createGridData() throws Exception {
-    return loadClass("org.eclipse.swt.layout.GridData").newInstance();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GridData
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Create new {@link org.eclipse.swt.layout.GridData}.
+	 */
+	public static Object createGridData() throws Exception {
+		return loadClass("org.eclipse.swt.layout.GridData").newInstance();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/IToolkitSupport.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/IToolkitSupport.java
index 30198e0dd..0402e13fb 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/IToolkitSupport.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/IToolkitSupport.java
@@ -27,79 +27,79 @@
  * @coverage swt.support
  */
 public interface IToolkitSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Screen shot
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Prepares shots for all {@link Control}'s in hierarchy that have flag {@link #WBP_NEED_IMAGE}.
-   * Created image can be requested using {@link #getShotImage(Object)}.
-   */
-  void makeShots(Object control) throws Exception;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Screen shot
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Prepares shots for all {@link Control}'s in hierarchy that have flag {@link #WBP_NEED_IMAGE}.
+	 * Created image can be requested using {@link #getShotImage(Object)}.
+	 */
+	void makeShots(Object control) throws Exception;
 
-  /**
-   * @return the SWT shot {@link Image} created by {@link #makeShots(Object)}.
-   */
-  Image getShotImage(Object control) throws Exception;
+	/**
+	 * @return the SWT shot {@link Image} created by {@link #makeShots(Object)}.
+	 */
+	Image getShotImage(Object control) throws Exception;
 
-  /**
-   * Prepares the process of taking screen shot.
-   */
-  void beginShot(Object control);
+	/**
+	 * Prepares the process of taking screen shot.
+	 */
+	void beginShot(Object control);
 
-  /**
-   * Finalizes the process of taking screen shot.
-   */
-  void endShot(Object control);
+	/**
+	 * Finalizes the process of taking screen shot.
+	 */
+	void endShot(Object control);
 
-  /**
-   * @return the menu visual data (image, bounds, item bounds) for given menu object.
-   */
-  MenuVisualData fetchMenuVisualData(Object menu) throws Exception;
+	/**
+	 * @return the menu visual data (image, bounds, item bounds) for given menu object.
+	 */
+	MenuVisualData fetchMenuVisualData(Object menu) throws Exception;
 
-  /**
-   * @return the default height of single-line menu bar according to system metrics (if available).
-   */
-  int getDefaultMenuBarHeight() throws Exception;
+	/**
+	 * @return the default height of single-line menu bar according to system metrics (if available).
+	 */
+	int getDefaultMenuBarHeight() throws Exception;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Images
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the new toolkit {@link Image} for given SWT {@link Image}.
-   */
-  Object createToolkitImage(Image image) throws Exception;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Images
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the new toolkit {@link Image} for given SWT {@link Image}.
+	 */
+	Object createToolkitImage(Image image) throws Exception;
 
-  /**
-   * @return the new SWT {@link Image} for given toolkit {@link Image}.
-   */
-  Image createSWTImage(Object image) throws Exception;
+	/**
+	 * @return the new SWT {@link Image} for given toolkit {@link Image}.
+	 */
+	Image createSWTImage(Object image) throws Exception;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Shell
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Shows given {@link Shell} object to user. On close {@link Shell} will be hidden, not disposed.
-   */
-  void showShell(Object shell) throws Exception;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Shell
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Shows given {@link Shell} object to user. On close {@link Shell} will be hidden, not disposed.
+	 */
+	void showShell(Object shell) throws Exception;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Font
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the array of font families registered in system.
-   */
-  String[] getFontFamilies(boolean scalable) throws Exception;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Font
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the array of font families registered in system.
+	 */
+	String[] getFontFamilies(boolean scalable) throws Exception;
 
-  /**
-   * @return {@link Image} with preview for given {@link Font}.
-   */
-  Image getFontPreview(Object font) throws Exception;
+	/**
+	 * @return {@link Image} with preview for given {@link Font}.
+	 */
+	Image getFontPreview(Object font) throws Exception;
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/ImageSupport.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/ImageSupport.java
index da0f87c0e..1e7958584 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/ImageSupport.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/ImageSupport.java
@@ -22,31 +22,31 @@
  * @coverage swt.support
  */
 public class ImageSupport extends AbstractSupport {
-  /**
-   * Disposes given {@link org.eclipse.swt.graphics.Image}.
-   */
-  public static void dispose(Object image) {
-    if (image != null) {
-      ReflectionUtils.invokeMethodEx(image, "dispose()");
-    }
-  }
+	/**
+	 * Disposes given {@link org.eclipse.swt.graphics.Image}.
+	 */
+	public static void dispose(Object image) {
+		if (image != null) {
+			ReflectionUtils.invokeMethodEx(image, "dispose()");
+		}
+	}
 
-  /**
-   * Create new {@link org.eclipse.swt.graphics.Image}.
-   */
-  public static Object createImage(InputStream stream) throws Exception {
-    Constructor<?> constructor =
-        ReflectionUtils.getConstructorBySignature(
-            getImageClass(),
-            "<init>(org.eclipse.swt.graphics.Device,java.io.InputStream)");
-    return constructor.newInstance(null, stream);
-  }
+	/**
+	 * Create new {@link org.eclipse.swt.graphics.Image}.
+	 */
+	public static Object createImage(InputStream stream) throws Exception {
+		Constructor<?> constructor =
+				ReflectionUtils.getConstructorBySignature(
+						getImageClass(),
+						"<init>(org.eclipse.swt.graphics.Device,java.io.InputStream)");
+		return constructor.newInstance(null, stream);
+	}
 
-  /**
-   * @return {@link org.eclipse.swt.graphics.Image} {@link Class} loaded from active editor
-   *         {@link ClassLoader}.
-   */
-  public static Class<?> getImageClass() {
-    return loadClass("org.eclipse.swt.graphics.Image");
-  }
+	/**
+	 * @return {@link org.eclipse.swt.graphics.Image} {@link Class} loaded from active editor
+	 *         {@link ClassLoader}.
+	 */
+	public static Class<?> getImageClass() {
+		return loadClass("org.eclipse.swt.graphics.Image");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/JFaceSupport.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/JFaceSupport.java
index 4d1d484a0..739b024e7 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/JFaceSupport.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/JFaceSupport.java
@@ -27,71 +27,71 @@
  * @coverage swt.support
  */
 public class JFaceSupport extends AbstractSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if JFace is avialable.
-   */
-  public static boolean isAvialable() {
-    try {
-      getJFaceResourceClass();
-      return true;
-    } catch (Throwable e) {
-      return false;
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if JFace is avialable.
+	 */
+	public static boolean isAvialable() {
+		try {
+			getJFaceResourceClass();
+			return true;
+		} catch (Throwable e) {
+			return false;
+		}
+	}
 
-  /**
-   * @return the {@link ResourceRegistry} class.
-   */
-  public static Class<?> getResourceRegistryClass() throws Exception {
-    return loadClass("org.eclipse.jface.resource.ResourceRegistry");
-  }
+	/**
+	 * @return the {@link ResourceRegistry} class.
+	 */
+	public static Class<?> getResourceRegistryClass() throws Exception {
+		return loadClass("org.eclipse.jface.resource.ResourceRegistry");
+	}
 
-  private static Class<?> getJFaceResourceClass() throws Exception {
-    return loadClass("org.eclipse.jface.resource.JFaceResources");
-  }
+	private static Class<?> getJFaceResourceClass() throws Exception {
+		return loadClass("org.eclipse.jface.resource.JFaceResources");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // JFace
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return all JFace fonts.
-   */
-  public static List<FontInfo> getJFaceFonts() throws Exception {
-    List<FontInfo> jfaceFonts = Lists.newArrayList();
-    Method[] methods = getJFaceResourceClass().getMethods();
-    for (int i = 0; i < methods.length; i++) {
-      Method method = methods[i];
-      int modifiers = method.getModifiers();
-      // check public static
-      if (!Modifier.isPublic(modifiers) || !Modifier.isStatic(modifiers)) {
-        continue;
-      }
-      // check getXXXFont name
-      String name = method.getName();
-      if (!name.startsWith("get") || !name.endsWith("Font")) {
-        continue;
-      }
-      // check empty parameters method
-      if (method.getParameterTypes().length != 0) {
-        continue;
-      }
-      // check return type
-      if (!method.getReturnType().getName().equals("org.eclipse.swt.graphics.Font")) {
-        continue;
-      }
-      // create font info
-      Object font = method.invoke(null);
-      jfaceFonts.add(new FontInfo(name + "()", font, "org.eclipse.jface.resource.JFaceResources."
-          + name
-          + "()", false));
-    }
-    return jfaceFonts;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// JFace
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return all JFace fonts.
+	 */
+	public static List<FontInfo> getJFaceFonts() throws Exception {
+		List<FontInfo> jfaceFonts = Lists.newArrayList();
+		Method[] methods = getJFaceResourceClass().getMethods();
+		for (int i = 0; i < methods.length; i++) {
+			Method method = methods[i];
+			int modifiers = method.getModifiers();
+			// check public static
+			if (!Modifier.isPublic(modifiers) || !Modifier.isStatic(modifiers)) {
+				continue;
+			}
+			// check getXXXFont name
+			String name = method.getName();
+			if (!name.startsWith("get") || !name.endsWith("Font")) {
+				continue;
+			}
+			// check empty parameters method
+			if (method.getParameterTypes().length != 0) {
+				continue;
+			}
+			// check return type
+			if (!method.getReturnType().getName().equals("org.eclipse.swt.graphics.Font")) {
+				continue;
+			}
+			// create font info
+			Object font = method.invoke(null);
+			jfaceFonts.add(new FontInfo(name + "()", font, "org.eclipse.jface.resource.JFaceResources."
+					+ name
+					+ "()", false));
+		}
+		return jfaceFonts;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/LabelSupport.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/LabelSupport.java
index 4e4777f46..7bbd4d27f 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/LabelSupport.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/LabelSupport.java
@@ -23,47 +23,47 @@
  * @coverage swt.support
  */
 public class LabelSupport extends AbstractSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Creation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return new instance of {@link Label}.
-   */
-  public static Object newInstance(Object parent) throws Exception {
-    Constructor<?> labelConstructor =
-        ReflectionUtils.getConstructor(
-            getLabelClass(),
-            ContainerSupport.getCompositeClass(),
-            int.class);
-    return labelConstructor.newInstance(parent, SwtSupport.NONE);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Creation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return new instance of {@link Label}.
+	 */
+	public static Object newInstance(Object parent) throws Exception {
+		Constructor<?> labelConstructor =
+				ReflectionUtils.getConstructor(
+						getLabelClass(),
+						ContainerSupport.getCompositeClass(),
+						int.class);
+		return labelConstructor.newInstance(parent, SwtSupport.NONE);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Invoke method <code>Label.getText()</code> for given label.
-   */
-  public static String getText(Object label) throws Exception {
-    return (String) ReflectionUtils.invokeMethod(label, "getText()");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Invoke method <code>Label.getText()</code> for given label.
+	 */
+	public static String getText(Object label) throws Exception {
+		return (String) ReflectionUtils.invokeMethod(label, "getText()");
+	}
 
-  /**
-   * Invoke method <code>Label.getText()</code> for given label.
-   */
-  public static void setText(Object label, String text) throws Exception {
-    ReflectionUtils.invokeMethod(label, "setText(java.lang.String)", text);
-  }
+	/**
+	 * Invoke method <code>Label.getText()</code> for given label.
+	 */
+	public static void setText(Object label, String text) throws Exception {
+		ReflectionUtils.invokeMethod(label, "setText(java.lang.String)", text);
+	}
 
-  /**
-   * @return {@link org.eclipse.swt.widgets.Label} {@link Class} loaded from active editor
-   *         {@link ClassLoader}.
-   */
-  public static Class<?> getLabelClass() {
-    return loadClass("org.eclipse.swt.widgets.Label");
-  }
+	/**
+	 * @return {@link org.eclipse.swt.widgets.Label} {@link Class} loaded from active editor
+	 *         {@link ClassLoader}.
+	 */
+	public static Class<?> getLabelClass() {
+		return loadClass("org.eclipse.swt.widgets.Label");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/MenuSupport.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/MenuSupport.java
index 8b7a68513..8543df9fe 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/MenuSupport.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/MenuSupport.java
@@ -22,88 +22,88 @@
  * @coverage swt.support
  */
 public class MenuSupport extends AbstractSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Classes
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return {@link org.eclipse.swt.widgets.Menu} {@link Class} loaded from active editor
-   *         {@link ClassLoader}.
-   */
-  public static Class<?> getMenuClass() {
-    return loadClass("org.eclipse.swt.widgets.Menu");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Classes
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return {@link org.eclipse.swt.widgets.Menu} {@link Class} loaded from active editor
+	 *         {@link ClassLoader}.
+	 */
+	public static Class<?> getMenuClass() {
+		return loadClass("org.eclipse.swt.widgets.Menu");
+	}
 
-  /**
-   * @return <code>true</code> if given {@link Class} is successor of
-   *         {@link org.eclipse.swt.widgets.Menu}.
-   */
-  public static boolean isMenuClass(Class<?> clazz) {
-    return ReflectionUtils.isSuccessorOf(clazz, "org.eclipse.swt.widgets.Menu");
-  }
+	/**
+	 * @return <code>true</code> if given {@link Class} is successor of
+	 *         {@link org.eclipse.swt.widgets.Menu}.
+	 */
+	public static boolean isMenuClass(Class<?> clazz) {
+		return ReflectionUtils.isSuccessorOf(clazz, "org.eclipse.swt.widgets.Menu");
+	}
 
-  /**
-   * @return {@link org.eclipse.swt.widgets.MenuItem} {@link Class} loaded from active editor
-   *         {@link ClassLoader}.
-   */
-  public static Class<?> getMenuItemClass() {
-    return loadClass("org.eclipse.swt.widgets.MenuItem");
-  }
+	/**
+	 * @return {@link org.eclipse.swt.widgets.MenuItem} {@link Class} loaded from active editor
+	 *         {@link ClassLoader}.
+	 */
+	public static Class<?> getMenuItemClass() {
+		return loadClass("org.eclipse.swt.widgets.MenuItem");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Menu
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>true</code> if given object is successor of {@link org.eclipse.swt.widgets.Menu}.
-   */
-  public static boolean isMenu(Object o) {
-    return isMenuClass(o.getClass());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Menu
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>true</code> if given object is successor of {@link org.eclipse.swt.widgets.Menu}.
+	 */
+	public static boolean isMenu(Object o) {
+		return isMenuClass(o.getClass());
+	}
 
-  /**
-   * @param object
-   *          A menu item instance passed as object instance.
-   * @return {@link org.eclipse.swt.widgets.Menu} instance for given menu item with SWT.CASCADE
-   *         style set. It may return null if menu item is not cascaded or has no menu associated
-   *         with it.
-   */
-  public static Object getMenu(Object object) throws Exception {
-    return ReflectionUtils.invokeMethod(object, "getMenu()");
-  }
+	/**
+	 * @param object
+	 *          A menu item instance passed as object instance.
+	 * @return {@link org.eclipse.swt.widgets.Menu} instance for given menu item with SWT.CASCADE
+	 *         style set. It may return null if menu item is not cascaded or has no menu associated
+	 *         with it.
+	 */
+	public static Object getMenu(Object object) throws Exception {
+		return ReflectionUtils.invokeMethod(object, "getMenu()");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Items
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @param object
-   *          A menu instance passed as object instance.
-   * @return child items of given {@link org.eclipse.swt.widgets.Menu} instance.
-   */
-  public static Object[] getItems(Object object) throws Exception {
-    return (Object[]) ReflectionUtils.invokeMethod(object, "getItems()");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Items
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @param object
+	 *          A menu instance passed as object instance.
+	 * @return child items of given {@link org.eclipse.swt.widgets.Menu} instance.
+	 */
+	public static Object[] getItems(Object object) throws Exception {
+		return (Object[]) ReflectionUtils.invokeMethod(object, "getItems()");
+	}
 
-  /**
-   *
-   * Adds a placeholder item with string "(add items here)" into empty menu.
-   *
-   * @param menuObject
-   *          A menu object in which placeholder should be placed.
-   */
-  public static void addPlaceholder(Object menuObject) throws Exception {
-    Constructor<?> menuItemCtor =
-        ReflectionUtils.getConstructorBySignature(
-            getMenuItemClass(),
-            "<init>(org.eclipse.swt.widgets.Menu,int)");
-    Object placeholderItem = menuItemCtor.newInstance(menuObject, 0);
-    ReflectionUtils.invokeMethod(
-        placeholderItem,
-        "setText(java.lang.String)",
-        IMenuInfo.NO_ITEMS_TEXT);
-  }
+	/**
+	 *
+	 * Adds a placeholder item with string "(add items here)" into empty menu.
+	 *
+	 * @param menuObject
+	 *          A menu object in which placeholder should be placed.
+	 */
+	public static void addPlaceholder(Object menuObject) throws Exception {
+		Constructor<?> menuItemCtor =
+				ReflectionUtils.getConstructorBySignature(
+						getMenuItemClass(),
+						"<init>(org.eclipse.swt.widgets.Menu,int)");
+		Object placeholderItem = menuItemCtor.newInstance(menuObject, 0);
+		ReflectionUtils.invokeMethod(
+				placeholderItem,
+				"setText(java.lang.String)",
+				IMenuInfo.NO_ITEMS_TEXT);
+	}
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/PointSupport.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/PointSupport.java
index 0ae9ccb9a..51c41d27f 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/PointSupport.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/PointSupport.java
@@ -23,65 +23,65 @@
  * @coverage swt.support
  */
 public class PointSupport extends AbstractSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Point
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link org.eclipse.swt.graphics.Point} class loaded from active editor
-   *         {@link ClassLoader}.
-   */
-  public static Class<?> getPointClass() {
-    return loadClass("org.eclipse.swt.graphics.Point");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Point
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link org.eclipse.swt.graphics.Point} class loaded from active editor
+	 *         {@link ClassLoader}.
+	 */
+	public static Class<?> getPointClass() {
+		return loadClass("org.eclipse.swt.graphics.Point");
+	}
 
-  /**
-   * Create object, invoke <code>new Point(x, y)</code>.
-   */
-  public static Object newPoint(int x, int y) throws Exception {
-    Constructor<?> constructor =
-        ReflectionUtils.getConstructorBySignature(getPointClass(), "<init>(int,int)");
-    return constructor.newInstance(x, y);
-  }
+	/**
+	 * Create object, invoke <code>new Point(x, y)</code>.
+	 */
+	public static Object newPoint(int x, int y) throws Exception {
+		Constructor<?> constructor =
+				ReflectionUtils.getConstructorBySignature(getPointClass(), "<init>(int,int)");
+		return constructor.newInstance(x, y);
+	}
 
-  /**
-   * Converts toolkit <code>Point</code> into draw2d {@link Point}.
-   */
-  public static Point getPoint(Object point) {
-    return new Point(getX(point), getY(point));
-  }
+	/**
+	 * Converts toolkit <code>Point</code> into draw2d {@link Point}.
+	 */
+	public static Point getPoint(Object point) {
+		return new Point(getX(point), getY(point));
+	}
 
-  /**
-   * @return the copy of toolkit <code>Point</code>.
-   */
-  public static Object getPointCopy(Object point) throws Exception {
-    return newPoint(getX(point), getY(point));
-  }
+	/**
+	 * @return the copy of toolkit <code>Point</code>.
+	 */
+	public static Object getPointCopy(Object point) throws Exception {
+		return newPoint(getX(point), getY(point));
+	}
 
-  /**
-   * Create string presentation of point: <code>(x, y)</code>.
-   */
-  public static String toString(Object point) throws Exception {
-    return "(" + getX(point) + ", " + getY(point) + ")";
-  }
+	/**
+	 * Create string presentation of point: <code>(x, y)</code>.
+	 */
+	public static String toString(Object point) throws Exception {
+		return "(" + getX(point) + ", " + getY(point) + ")";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>x</code> field for SWT {@link org.eclipse.swt.graphics.Point} object.
-   */
-  private static int getX(Object point) {
-    return ReflectionUtils.getFieldInt(point, "x");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>x</code> field for SWT {@link org.eclipse.swt.graphics.Point} object.
+	 */
+	private static int getX(Object point) {
+		return ReflectionUtils.getFieldInt(point, "x");
+	}
 
-  /**
-   * @return <code>y</code> field for SWT {@link org.eclipse.swt.graphics.Point} object.
-   */
-  private static int getY(Object point) {
-    return ReflectionUtils.getFieldInt(point, "y");
-  }
+	/**
+	 * @return <code>y</code> field for SWT {@link org.eclipse.swt.graphics.Point} object.
+	 */
+	private static int getY(Object point) {
+		return ReflectionUtils.getFieldInt(point, "y");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/RectangleSupport.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/RectangleSupport.java
index 44bb9406d..1d6342e9f 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/RectangleSupport.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/RectangleSupport.java
@@ -24,77 +24,77 @@
  * @coverage swt.support
  */
 public class RectangleSupport extends AbstractSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Rectangle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Create new rectangle, invoke <code>new Rectangle(x, y, width, height)</code>
-   */
-  public static Object newRectangle(int x, int y, int width, int height) throws Exception {
-    Constructor<?> constructor =
-        ReflectionUtils.getConstructorBySignature(
-            loadClass("org.eclipse.swt.graphics.Rectangle"),
-            "<init>(int,int,int,int)");
-    return constructor.newInstance(x, y, width, height);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Rectangle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Create new rectangle, invoke <code>new Rectangle(x, y, width, height)</code>
+	 */
+	public static Object newRectangle(int x, int y, int width, int height) throws Exception {
+		Constructor<?> constructor =
+				ReflectionUtils.getConstructorBySignature(
+						loadClass("org.eclipse.swt.graphics.Rectangle"),
+						"<init>(int,int,int,int)");
+		return constructor.newInstance(x, y, width, height);
+	}
 
-  /**
-   * Convert rectangle.
-   */
-  public static Rectangle getRectangle(Object rectangle) throws Exception {
-    return new Rectangle(getX(rectangle),
-        getY(rectangle),
-        getWidth(rectangle),
-        getHeight(rectangle));
-  }
+	/**
+	 * Convert rectangle.
+	 */
+	public static Rectangle getRectangle(Object rectangle) throws Exception {
+		return new Rectangle(getX(rectangle),
+				getY(rectangle),
+				getWidth(rectangle),
+				getHeight(rectangle));
+	}
 
-  /**
-   * Create string presentation of rectangle: <code>(x, y, width, height)</code>.
-   */
-  public static String toString(Object rectangle) throws Exception {
-    return "("
-        + getX(rectangle)
-        + ", "
-        + getY(rectangle)
-        + ", "
-        + getWidth(rectangle)
-        + ", "
-        + getHeight(rectangle)
-        + ")";
-  }
+	/**
+	 * Create string presentation of rectangle: <code>(x, y, width, height)</code>.
+	 */
+	public static String toString(Object rectangle) throws Exception {
+		return "("
+				+ getX(rectangle)
+				+ ", "
+				+ getY(rectangle)
+				+ ", "
+				+ getWidth(rectangle)
+				+ ", "
+				+ getHeight(rectangle)
+				+ ")";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return <code>x</code> field for SWT {@link org.eclipse.swt.graphics.Rectangle} object.
-   */
-  private static int getX(Object rectangle) throws Exception {
-    return ReflectionUtils.getFieldInt(rectangle, "x");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return <code>x</code> field for SWT {@link org.eclipse.swt.graphics.Rectangle} object.
+	 */
+	private static int getX(Object rectangle) throws Exception {
+		return ReflectionUtils.getFieldInt(rectangle, "x");
+	}
 
-  /**
-   * @return <code>y</code> field for SWT {@link org.eclipse.swt.graphics.Rectangle} object.
-   */
-  private static int getY(Object rectangle) throws Exception {
-    return ReflectionUtils.getFieldInt(rectangle, "y");
-  }
+	/**
+	 * @return <code>y</code> field for SWT {@link org.eclipse.swt.graphics.Rectangle} object.
+	 */
+	private static int getY(Object rectangle) throws Exception {
+		return ReflectionUtils.getFieldInt(rectangle, "y");
+	}
 
-  /**
-   * @return <code>width</code> field for SWT {@link org.eclipse.swt.graphics.Rectangle} object.
-   */
-  private static int getWidth(Object rectangle) throws Exception {
-    return ReflectionUtils.getFieldInt(rectangle, "width");
-  }
+	/**
+	 * @return <code>width</code> field for SWT {@link org.eclipse.swt.graphics.Rectangle} object.
+	 */
+	private static int getWidth(Object rectangle) throws Exception {
+		return ReflectionUtils.getFieldInt(rectangle, "width");
+	}
 
-  /**
-   * @return <code>height</code> field for SWT {@link org.eclipse.swt.graphics.Rectangle} object.
-   */
-  private static int getHeight(Object rectangle) throws Exception {
-    return ReflectionUtils.getFieldInt(rectangle, "height");
-  }
+	/**
+	 * @return <code>height</code> field for SWT {@link org.eclipse.swt.graphics.Rectangle} object.
+	 */
+	private static int getHeight(Object rectangle) throws Exception {
+		return ReflectionUtils.getFieldInt(rectangle, "height");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/RowLayoutSupport.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/RowLayoutSupport.java
index 5aa23b52d..55408034b 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/RowLayoutSupport.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/RowLayoutSupport.java
@@ -22,34 +22,34 @@
  * @coverage swt.support
  */
 public class RowLayoutSupport extends AbstractSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // RowLayout
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Create new {@link org.eclipse.swt.layout.RowData}.
-   */
-  public static Object createRowData() throws Exception {
-    return loadClass("org.eclipse.swt.layout.RowData").newInstance();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// RowLayout
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Create new {@link org.eclipse.swt.layout.RowData}.
+	 */
+	public static Object createRowData() throws Exception {
+		return loadClass("org.eclipse.swt.layout.RowData").newInstance();
+	}
 
-  /**
-   * @return value of field <code>type</code>.
-   */
-  public static int getType(final Object layout) {
-    return ExecutionUtils.runObjectLog(new RunnableObjectEx<Integer>() {
-      @Override
-      public Integer runObject() throws Exception {
-        return ReflectionUtils.getFieldInt(layout, "type");
-      }
-    }, SwtSupport.HORIZONTAL);
-  }
+	/**
+	 * @return value of field <code>type</code>.
+	 */
+	public static int getType(final Object layout) {
+		return ExecutionUtils.runObjectLog(new RunnableObjectEx<Integer>() {
+			@Override
+			public Integer runObject() throws Exception {
+				return ReflectionUtils.getFieldInt(layout, "type");
+			}
+		}, SwtSupport.HORIZONTAL);
+	}
 
-  /**
-   * @return <code>true</code> if this layout is horizontal (type == SWT.HORIZONTAL).
-   */
-  public static boolean isHorizontal(Object layout) {
-    return getType(layout) == SwtSupport.HORIZONTAL;
-  }
+	/**
+	 * @return <code>true</code> if this layout is horizontal (type == SWT.HORIZONTAL).
+	 */
+	public static boolean isHorizontal(Object layout) {
+		return getType(layout) == SwtSupport.HORIZONTAL;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/SwtSupport.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/SwtSupport.java
index 52273234d..456d1b694 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/SwtSupport.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/SwtSupport.java
@@ -20,48 +20,48 @@
  * @coverage swt.support
  */
 public class SwtSupport extends AbstractSupport {
-  public static final int DEFAULT = SWT.DEFAULT;
-  public static final int NONE = SWT.NONE;
-  public static final int HORIZONTAL = SWT.HORIZONTAL;
-  public static final int VERTICAL = SWT.VERTICAL;
-  public static final int BORDER = SWT.BORDER;
-  public static final int RIGHT_TO_LEFT = SWT.RIGHT_TO_LEFT;
-  public static final int CHECK = SWT.CHECK;
-  public static final int RADIO = SWT.RADIO;
-  public static final int NORMAL = SWT.NORMAL;
-  public static final int BOLD = SWT.BOLD;
-  public static final int ITALIC = SWT.ITALIC;
-  public static final int BOLD_ITALIC = SWT.BOLD | SWT.ITALIC;
-  public static final int BAR = SWT.BAR;
-  public static final int POP_UP = SWT.POP_UP;
-  public static final int DROP_DOWN = SWT.DROP_DOWN;
-  public static final int CASCADE = SWT.CASCADE;
-  public static final int SEPARATOR = SWT.SEPARATOR;
+	public static final int DEFAULT = SWT.DEFAULT;
+	public static final int NONE = SWT.NONE;
+	public static final int HORIZONTAL = SWT.HORIZONTAL;
+	public static final int VERTICAL = SWT.VERTICAL;
+	public static final int BORDER = SWT.BORDER;
+	public static final int RIGHT_TO_LEFT = SWT.RIGHT_TO_LEFT;
+	public static final int CHECK = SWT.CHECK;
+	public static final int RADIO = SWT.RADIO;
+	public static final int NORMAL = SWT.NORMAL;
+	public static final int BOLD = SWT.BOLD;
+	public static final int ITALIC = SWT.ITALIC;
+	public static final int BOLD_ITALIC = SWT.BOLD | SWT.ITALIC;
+	public static final int BAR = SWT.BAR;
+	public static final int POP_UP = SWT.POP_UP;
+	public static final int DROP_DOWN = SWT.DROP_DOWN;
+	public static final int CASCADE = SWT.CASCADE;
+	public static final int SEPARATOR = SWT.SEPARATOR;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the SWT flag as <code>int</code>.
-   */
-  public static int getIntFlag(String name) throws Exception {
-    return ((Integer) getFlag(name)).intValue();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the SWT flag as <code>int</code>.
+	 */
+	public static int getIntFlag(String name) throws Exception {
+		return ((Integer) getFlag(name)).intValue();
+	}
 
-  /**
-   * @return the SWT flag as {@link Object}.
-   */
-  public static Object getFlag(String name) throws Exception {
-    return getSwtClass().getField(name).get(null);
-  }
+	/**
+	 * @return the SWT flag as {@link Object}.
+	 */
+	public static Object getFlag(String name) throws Exception {
+		return getSwtClass().getField(name).get(null);
+	}
 
-  /**
-   * @return {@link org.eclipse.swt.SWT} {@link Class} loaded from active editor {@link ClassLoader}
-   *         .
-   */
-  public static Class<?> getSwtClass() {
-    return loadClass("org.eclipse.swt.SWT");
-  }
+	/**
+	 * @return {@link org.eclipse.swt.SWT} {@link Class} loaded from active editor {@link ClassLoader}
+	 *         .
+	 */
+	public static Class<?> getSwtClass() {
+		return loadClass("org.eclipse.swt.SWT");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/TableSupport.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/TableSupport.java
index ba94262ee..1d94e706e 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/TableSupport.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/TableSupport.java
@@ -22,77 +22,77 @@
  * @coverage swt.support
  */
 public class TableSupport extends AbstractSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Class
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return {@link org.eclipse.swt.widgets.Table} {@link Class} loaded from active editor
-   *         {@link ClassLoader}.
-   */
-  public static Class<?> getTableClass() {
-    return loadClass("org.eclipse.swt.widgets.Table");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Class
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return {@link org.eclipse.swt.widgets.Table} {@link Class} loaded from active editor
+	 *         {@link ClassLoader}.
+	 */
+	public static Class<?> getTableClass() {
+		return loadClass("org.eclipse.swt.widgets.Table");
+	}
 
-  /**
-   * @return {@link org.eclipse.swt.widgets.TableColumn} {@link Class} loaded from active editor
-   *         {@link ClassLoader}.
-   */
-  public static Class<?> getTableColumnClass() {
-    return loadClass("org.eclipse.swt.widgets.TableColumn");
-  }
+	/**
+	 * @return {@link org.eclipse.swt.widgets.TableColumn} {@link Class} loaded from active editor
+	 *         {@link ClassLoader}.
+	 */
+	public static Class<?> getTableColumnClass() {
+		return loadClass("org.eclipse.swt.widgets.TableColumn");
+	}
 
-  /**
-   * @return {@link org.eclipse.swt.widgets.TableItem} {@link Class} loaded from active editor
-   *         {@link ClassLoader}.
-   */
-  public static Class<?> getTableItemClass() {
-    return loadClass("org.eclipse.swt.widgets.TableItem");
-  }
+	/**
+	 * @return {@link org.eclipse.swt.widgets.TableItem} {@link Class} loaded from active editor
+	 *         {@link ClassLoader}.
+	 */
+	public static Class<?> getTableItemClass() {
+		return loadClass("org.eclipse.swt.widgets.TableItem");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Table
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Invoke method <code>Table.getHeaderHeight()</code> for given table.
-   */
-  public static int getHeaderHeight(Object table) throws Exception {
-    return (Integer) ReflectionUtils.invokeMethod(table, "getHeaderHeight()");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Table
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Invoke method <code>Table.getHeaderHeight()</code> for given table.
+	 */
+	public static int getHeaderHeight(Object table) throws Exception {
+		return (Integer) ReflectionUtils.invokeMethod(table, "getHeaderHeight()");
+	}
 
-  /**
-   * Invoke method <code>Table.getItemHeight()</code> for given table.
-   */
-  public static int getItemHeight(Object table) throws Exception {
-    return (Integer) ReflectionUtils.invokeMethod(table, "getItemHeight()");
-  }
+	/**
+	 * Invoke method <code>Table.getItemHeight()</code> for given table.
+	 */
+	public static int getItemHeight(Object table) throws Exception {
+		return (Integer) ReflectionUtils.invokeMethod(table, "getItemHeight()");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // TableColumn
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Invoke method <code>TableColumn.getWidth()</code> for given table column.
-   */
-  public static int getColumnWidth(Object column) throws Exception {
-    return (Integer) ReflectionUtils.invokeMethod(column, "getWidth()");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// TableColumn
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Invoke method <code>TableColumn.getWidth()</code> for given table column.
+	 */
+	public static int getColumnWidth(Object column) throws Exception {
+		return (Integer) ReflectionUtils.invokeMethod(column, "getWidth()");
+	}
 
-  /**
-   * @return child columns of given {@link Table} instance.
-   */
-  public static Object[] getColumns(Object object) throws Exception {
-    return (Object[]) ReflectionUtils.invokeMethod(object, "getColumns()");
-  }
+	/**
+	 * @return child columns of given {@link Table} instance.
+	 */
+	public static Object[] getColumns(Object object) throws Exception {
+		return (Object[]) ReflectionUtils.invokeMethod(object, "getColumns()");
+	}
 
-  /**
-   * @return child items of given {@link Table} instance.
-   */
-  public static Object[] getItems(Object object) throws Exception {
-    return (Object[]) ReflectionUtils.invokeMethod(object, "getItems()");
-  }
+	/**
+	 * @return child items of given {@link Table} instance.
+	 */
+	public static Object[] getItems(Object object) throws Exception {
+		return (Object[]) ReflectionUtils.invokeMethod(object, "getItems()");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/ToolkitSupport.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/ToolkitSupport.java
index d29bc08d2..59e5cea1d 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/ToolkitSupport.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/ToolkitSupport.java
@@ -31,171 +31,171 @@
  * @coverage swt.support
  */
 public class ToolkitSupport extends AbstractSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ScreenShot
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Marks given {@link Control} instance as needed screen shot {@link Image}.
-   */
-  public static void markAsNeededImage(Object control) throws Exception {
-    ControlSupport.setData(control, OSSupport.WBP_NEED_IMAGE, Boolean.TRUE);
-  }
-
-  /**
-   * @return the screen shot {@link Image} from given {@link Control}.
-   */
-  public static Image getShotImage(Object control) throws Exception {
-    return (Image) ControlSupport.getData(control, OSSupport.WBP_IMAGE);
-  }
-
-  /**
-   * Creates screen shots for all {@link Control}'s in hierarchy marked with
-   * <code>WBP_NEED_IMAGE</code>. Created {@link Image}'s are located in <code>WBP_IMAGE</code>
-   * data.
-   */
-  public static void makeShots(Object control) throws Exception {
-    getImpl().makeShots(control);
-    makeShotsHierarchy(control);
-  }
-
-  /**
-   * Creates screen shots for all {@link Control}'s in hierarchy marked with
-   * <code>WBP_NEED_IMAGE</code>. Created {@link Image}'s are located in <code>WBP_IMAGE</code>
-   * data.
-   */
-  private static void makeShotsHierarchy(Object control) throws Exception {
-    if (ControlSupport.getData(control, OSSupport.WBP_NEED_IMAGE) != null) {
-      ControlSupport.setData(control, OSSupport.WBP_IMAGE, getImpl().getShotImage(control));
-      // set images for children
-      if (ContainerSupport.getCompositeClass().isAssignableFrom(control.getClass())) {
-        Object[] children = ContainerSupport.getChildren(control);
-        for (Object child : children) {
-          makeShotsHierarchy(child);
-        }
-      }
-    }
-  }
-
-  /**
-   * Prepares the process of taking screen shot.
-   */
-  public static void beginShot(Object control) throws Exception {
-    getImpl().beginShot(control);
-  }
-
-  /**
-   * Finalizes the process of taking screen shot.
-   */
-  public static void endShot(Object control) throws Exception {
-    getImpl().endShot(control);
-  }
-
-  /**
-   * @return {@link MenuVisualData} for given menu.
-   */
-  public static MenuVisualData fetchMenuVisualData(Object menu) throws Exception {
-    return getImpl().fetchMenuVisualData(menu);
-  }
-
-  /**
-   * @return the default height of single-line menu bar according to system metrics (if available).
-   */
-  public static int getDefaultMenuBarHeight() throws Exception {
-    return getImpl().getDefaultMenuBarHeight();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Images
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the new toolkit {@link Image} for given SWT {@link Image}.
-   */
-  public static Object createToolkitImage(Image image) throws Exception {
-    return getImpl().createToolkitImage(image);
-  }
-
-  /**
-   * @return the new SWT {@link Image} for given toolkit {@link Image}.
-   */
-  public static Image createSWTImage(Object image) throws Exception {
-    return getImpl().createSWTImage(image);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Shell
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Shows given {@link Shell} object to user. On close {@link Shell} will be hidden, not disposed.
-   */
-  public static void showShell(Object shell) throws Exception {
-    getImpl().showShell(shell);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Font
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the array of font families registered in system.
-   */
-  public static String[] getFontFamilies(boolean scalable) throws Exception {
-    return getImpl().getFontFamilies(scalable);
-  }
-
-  /**
-   * @return {@link Image} with preview for given {@link Font}.
-   */
-  public static Image getFontPreview(Object font) throws Exception {
-    return getImpl().getFontPreview(font);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Implementation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static IToolkitSupport m_impl_RCP;
-  private static IToolkitSupport m_impl_eRCP;
-
-  /**
-   * @return the toolkit dependent implementation of {@link IToolkitSupport}.
-   */
-  private static IToolkitSupport getImpl() throws Exception {
-    if (is_RCP()) {
-      if (m_impl_RCP == null) {
-        m_impl_RCP = createImpl();
-      }
-      return m_impl_RCP;
-    } else {
-      if (m_impl_eRCP == null) {
-        m_impl_eRCP = createImpl();
-      }
-      return m_impl_eRCP;
-    }
-  }
-
-  /**
-   * @return the new instance of toolkit dependent implementation of {@link IToolkitSupport}.
-   */
-  private static IToolkitSupport createImpl() throws Exception {
-    // prepare "impl" class
-    Class<?> implClass;
-    {
-      Bundle bundle = GlobalState.getToolkit().getBundle();
-      String implClassName = bundle.getSymbolicName() + ".support.ToolkitSupportImpl";
-      implClassName = StringUtils.replace(implClassName, ".wb.", ".wb.internal.");
-      implClass = bundle.loadClass(implClassName);
-    }
-    // create instance
-    ClassLoader editorLoader = GlobalState.getClassLoader();
-    Constructor<?> constructor = implClass.getConstructor(ClassLoader.class);
-    return (IToolkitSupport) constructor.newInstance(editorLoader);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ScreenShot
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Marks given {@link Control} instance as needed screen shot {@link Image}.
+	 */
+	public static void markAsNeededImage(Object control) throws Exception {
+		ControlSupport.setData(control, OSSupport.WBP_NEED_IMAGE, Boolean.TRUE);
+	}
+
+	/**
+	 * @return the screen shot {@link Image} from given {@link Control}.
+	 */
+	public static Image getShotImage(Object control) throws Exception {
+		return (Image) ControlSupport.getData(control, OSSupport.WBP_IMAGE);
+	}
+
+	/**
+	 * Creates screen shots for all {@link Control}'s in hierarchy marked with
+	 * <code>WBP_NEED_IMAGE</code>. Created {@link Image}'s are located in <code>WBP_IMAGE</code>
+	 * data.
+	 */
+	public static void makeShots(Object control) throws Exception {
+		getImpl().makeShots(control);
+		makeShotsHierarchy(control);
+	}
+
+	/**
+	 * Creates screen shots for all {@link Control}'s in hierarchy marked with
+	 * <code>WBP_NEED_IMAGE</code>. Created {@link Image}'s are located in <code>WBP_IMAGE</code>
+	 * data.
+	 */
+	private static void makeShotsHierarchy(Object control) throws Exception {
+		if (ControlSupport.getData(control, OSSupport.WBP_NEED_IMAGE) != null) {
+			ControlSupport.setData(control, OSSupport.WBP_IMAGE, getImpl().getShotImage(control));
+			// set images for children
+			if (ContainerSupport.getCompositeClass().isAssignableFrom(control.getClass())) {
+				Object[] children = ContainerSupport.getChildren(control);
+				for (Object child : children) {
+					makeShotsHierarchy(child);
+				}
+			}
+		}
+	}
+
+	/**
+	 * Prepares the process of taking screen shot.
+	 */
+	public static void beginShot(Object control) throws Exception {
+		getImpl().beginShot(control);
+	}
+
+	/**
+	 * Finalizes the process of taking screen shot.
+	 */
+	public static void endShot(Object control) throws Exception {
+		getImpl().endShot(control);
+	}
+
+	/**
+	 * @return {@link MenuVisualData} for given menu.
+	 */
+	public static MenuVisualData fetchMenuVisualData(Object menu) throws Exception {
+		return getImpl().fetchMenuVisualData(menu);
+	}
+
+	/**
+	 * @return the default height of single-line menu bar according to system metrics (if available).
+	 */
+	public static int getDefaultMenuBarHeight() throws Exception {
+		return getImpl().getDefaultMenuBarHeight();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Images
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the new toolkit {@link Image} for given SWT {@link Image}.
+	 */
+	public static Object createToolkitImage(Image image) throws Exception {
+		return getImpl().createToolkitImage(image);
+	}
+
+	/**
+	 * @return the new SWT {@link Image} for given toolkit {@link Image}.
+	 */
+	public static Image createSWTImage(Object image) throws Exception {
+		return getImpl().createSWTImage(image);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Shell
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Shows given {@link Shell} object to user. On close {@link Shell} will be hidden, not disposed.
+	 */
+	public static void showShell(Object shell) throws Exception {
+		getImpl().showShell(shell);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Font
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the array of font families registered in system.
+	 */
+	public static String[] getFontFamilies(boolean scalable) throws Exception {
+		return getImpl().getFontFamilies(scalable);
+	}
+
+	/**
+	 * @return {@link Image} with preview for given {@link Font}.
+	 */
+	public static Image getFontPreview(Object font) throws Exception {
+		return getImpl().getFontPreview(font);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Implementation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static IToolkitSupport m_impl_RCP;
+	private static IToolkitSupport m_impl_eRCP;
+
+	/**
+	 * @return the toolkit dependent implementation of {@link IToolkitSupport}.
+	 */
+	private static IToolkitSupport getImpl() throws Exception {
+		if (is_RCP()) {
+			if (m_impl_RCP == null) {
+				m_impl_RCP = createImpl();
+			}
+			return m_impl_RCP;
+		} else {
+			if (m_impl_eRCP == null) {
+				m_impl_eRCP = createImpl();
+			}
+			return m_impl_eRCP;
+		}
+	}
+
+	/**
+	 * @return the new instance of toolkit dependent implementation of {@link IToolkitSupport}.
+	 */
+	private static IToolkitSupport createImpl() throws Exception {
+		// prepare "impl" class
+		Class<?> implClass;
+		{
+			Bundle bundle = GlobalState.getToolkit().getBundle();
+			String implClassName = bundle.getSymbolicName() + ".support.ToolkitSupportImpl";
+			implClassName = StringUtils.replace(implClassName, ".wb.", ".wb.internal.");
+			implClass = bundle.loadClass(implClassName);
+		}
+		// create instance
+		ClassLoader editorLoader = GlobalState.getClassLoader();
+		Constructor<?> constructor = implClass.getConstructor(ClassLoader.class);
+		return (IToolkitSupport) constructor.newInstance(editorLoader);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/TreeSupport.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/TreeSupport.java
index 0ea519faa..b570a451c 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/TreeSupport.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/support/TreeSupport.java
@@ -21,16 +21,16 @@
  * @coverage swt.support
  */
 public class TreeSupport {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // TreeItem
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Invoke method <code>TreeItem.getBounds()</code> for given tree item.
-   */
-  public static Rectangle getBounds(Object treeItem) throws Exception {
-    Object rectangle = ReflectionUtils.invokeMethod(treeItem, "getBounds()");
-    return RectangleSupport.getRectangle(rectangle);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// TreeItem
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Invoke method <code>TreeItem.getBounds()</code> for given tree item.
+	 */
+	public static Rectangle getBounds(Object treeItem) throws Exception {
+		Object rectangle = ReflectionUtils.invokeMethod(treeItem, "getBounds()");
+		return RectangleSupport.getRectangle(rectangle);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/utils/AsyncMessagesSupport.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/utils/AsyncMessagesSupport.java
index f0f2ae107..7da9cafd6 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/utils/AsyncMessagesSupport.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/utils/AsyncMessagesSupport.java
@@ -28,67 +28,67 @@
  * @coverage swt.utils
  */
 public final class AsyncMessagesSupport implements IRootProcessor {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final IRootProcessor INSTANCE = new AsyncMessagesSupport();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final IRootProcessor INSTANCE = new AsyncMessagesSupport();
 
-  private AsyncMessagesSupport() {
-  }
+	private AsyncMessagesSupport() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IRootProcessor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void process(JavaInfo root, List<JavaInfo> components) throws Exception {
-    processRoot(root);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IRootProcessor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void process(JavaInfo root, List<JavaInfo> components) throws Exception {
+		processRoot(root);
+	}
 
-  private void processRoot(final JavaInfo rootJavaInfo) {
-    rootJavaInfo.addBroadcastListener(new ObjectEventListener() {
-      @Override
-      public void refreshAfterCreate() throws Exception {
-        runAsyncMessagesIfNeeded(rootJavaInfo);
-      }
-    });
-  }
+	private void processRoot(final JavaInfo rootJavaInfo) {
+		rootJavaInfo.addBroadcastListener(new ObjectEventListener() {
+			@Override
+			public void refreshAfterCreate() throws Exception {
+				runAsyncMessagesIfNeeded(rootJavaInfo);
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Async messages
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void runAsyncMessagesIfNeeded(JavaInfo rootJavaInfo) throws Exception {
-    if (requiresAsyncMessages(rootJavaInfo)) {
-      EditorState editorState = JavaInfoUtils.getState(rootJavaInfo);
-      editorState.getBroadcast().getListener(DisplayEventListener.class).beforeMessagesLoop();
-      try {
-        runAllAsyncMessages(editorState);
-      } finally {
-        editorState.getBroadcast().getListener(DisplayEventListener.class).afterMessagesLoop();
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Async messages
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void runAsyncMessagesIfNeeded(JavaInfo rootJavaInfo) throws Exception {
+		if (requiresAsyncMessages(rootJavaInfo)) {
+			EditorState editorState = JavaInfoUtils.getState(rootJavaInfo);
+			editorState.getBroadcast().getListener(DisplayEventListener.class).beforeMessagesLoop();
+			try {
+				runAllAsyncMessages(editorState);
+			} finally {
+				editorState.getBroadcast().getListener(DisplayEventListener.class).afterMessagesLoop();
+			}
+		}
+	}
 
-  private void runAllAsyncMessages(EditorState editorState) throws ClassNotFoundException,
-      Exception {
-    ClassLoader classLoader = editorState.getEditorLoader();
-    Class<?> displayClass = classLoader.loadClass("org.eclipse.swt.widgets.Display");
-    Object display = ReflectionUtils.invokeMethod(displayClass, "getDefault()");
-    Object synchronizer = ReflectionUtils.getFieldObject(display, "synchronizer");
-    ReflectionUtils.invokeMethod(synchronizer, "runAsyncMessages(boolean)", true);
-  }
+	private void runAllAsyncMessages(EditorState editorState) throws ClassNotFoundException,
+	Exception {
+		ClassLoader classLoader = editorState.getEditorLoader();
+		Class<?> displayClass = classLoader.loadClass("org.eclipse.swt.widgets.Display");
+		Object display = ReflectionUtils.invokeMethod(displayClass, "getDefault()");
+		Object synchronizer = ReflectionUtils.getFieldObject(display, "synchronizer");
+		ReflectionUtils.invokeMethod(synchronizer, "runAsyncMessages(boolean)", true);
+	}
 
-  private static boolean requiresAsyncMessages(JavaInfo javaInfo) {
-    for (JavaInfo child : javaInfo.getChildrenJava()) {
-      if (requiresAsyncMessages(child)) {
-        return true;
-      }
-    }
-    return JavaInfoUtils.hasTrueParameter(javaInfo, "SWT.runAsyncMessages");
-  }
+	private static boolean requiresAsyncMessages(JavaInfo javaInfo) {
+		for (JavaInfo child : javaInfo.getChildrenJava()) {
+			if (requiresAsyncMessages(child)) {
+				return true;
+			}
+		}
+		return JavaInfoUtils.hasTrueParameter(javaInfo, "SWT.runAsyncMessages");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/utils/ManagerUtils.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/utils/ManagerUtils.java
index ed6154318..666c9ae2a 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/utils/ManagerUtils.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/utils/ManagerUtils.java
@@ -23,63 +23,63 @@
  * @coverage swt.utils
  */
 public class ManagerUtils {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private ManagerUtils() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private ManagerUtils() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Ensures that {@link IJavaProject} has type <code>org.eclipse.wb.swt.SWTResourceManager</code>.
-   *
-   * @param component
-   *          the component to access {@link IJavaProject}.
-   */
-  public static void ensure_SWTResourceManager(JavaInfo component) throws Exception {
-    IJavaProject javaProject = component.getEditor().getJavaProject();
-    ToolkitDescription toolkit = component.getDescription().getToolkit();
-    ensure_SWTResourceManager(javaProject, toolkit);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Ensures that {@link IJavaProject} has type <code>org.eclipse.wb.swt.SWTResourceManager</code>.
+	 *
+	 * @param component
+	 *          the component to access {@link IJavaProject}.
+	 */
+	public static void ensure_SWTResourceManager(JavaInfo component) throws Exception {
+		IJavaProject javaProject = component.getEditor().getJavaProject();
+		ToolkitDescription toolkit = component.getDescription().getToolkit();
+		ensure_SWTResourceManager(javaProject, toolkit);
+	}
 
-  /**
-   * Ensures that {@link IJavaProject} has type <code>org.eclipse.wb.swt.SWTResourceManager</code>.
-   */
-  public static void ensure_SWTResourceManager(IJavaProject javaProject, ToolkitDescription toolkit)
-      throws Exception {
-    ProjectUtils.ensureResourceType(
-        javaProject,
-        toolkit.getBundle(),
-        "org.eclipse.wb.swt.SWTResourceManager");
-  }
+	/**
+	 * Ensures that {@link IJavaProject} has type <code>org.eclipse.wb.swt.SWTResourceManager</code>.
+	 */
+	public static void ensure_SWTResourceManager(IJavaProject javaProject, ToolkitDescription toolkit)
+			throws Exception {
+		ProjectUtils.ensureResourceType(
+				javaProject,
+				toolkit.getBundle(),
+				"org.eclipse.wb.swt.SWTResourceManager");
+	}
 
-  /**
-   * Ensures that {@link IJavaProject} has type <code>org.eclipse.wb.swt.ResourceManager</code>.
-   *
-   * @param component
-   *          the component to access {@link IJavaProject}.
-   */
-  public static void ensure_ResourceManager(JavaInfo component) throws Exception {
-    IJavaProject javaProject = component.getEditor().getJavaProject();
-    ToolkitDescription toolkit = component.getDescription().getToolkit();
-    ensure_ResourceManager(javaProject, toolkit);
-  }
+	/**
+	 * Ensures that {@link IJavaProject} has type <code>org.eclipse.wb.swt.ResourceManager</code>.
+	 *
+	 * @param component
+	 *          the component to access {@link IJavaProject}.
+	 */
+	public static void ensure_ResourceManager(JavaInfo component) throws Exception {
+		IJavaProject javaProject = component.getEditor().getJavaProject();
+		ToolkitDescription toolkit = component.getDescription().getToolkit();
+		ensure_ResourceManager(javaProject, toolkit);
+	}
 
-  /**
-   * Ensures that {@link IJavaProject} has type <code>org.eclipse.wb.swt.ResourceManager</code>.
-   */
-  public static void ensure_ResourceManager(IJavaProject javaProject, ToolkitDescription toolkit)
-      throws Exception {
-    ensure_SWTResourceManager(javaProject, toolkit);
-    ProjectUtils.ensureResourceType(
-        javaProject,
-        toolkit.getBundle(),
-        "org.eclipse.wb.swt.ResourceManager");
-  }
+	/**
+	 * Ensures that {@link IJavaProject} has type <code>org.eclipse.wb.swt.ResourceManager</code>.
+	 */
+	public static void ensure_ResourceManager(IJavaProject javaProject, ToolkitDescription toolkit)
+			throws Exception {
+		ensure_SWTResourceManager(javaProject, toolkit);
+		ProjectUtils.ensureResourceType(
+				javaProject,
+				toolkit.getBundle(),
+				"org.eclipse.wb.swt.ResourceManager");
+	}
 }
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/utils/ResourceManagerClassLoaderInitializer.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/utils/ResourceManagerClassLoaderInitializer.java
index 3dff66aed..28ff4c1a2 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/utils/ResourceManagerClassLoaderInitializer.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/utils/ResourceManagerClassLoaderInitializer.java
@@ -43,110 +43,110 @@
  * @coverage swt.utils
  */
 public final class ResourceManagerClassLoaderInitializer implements IClassLoaderInitializer {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final IClassLoaderInitializer INSTANCE =
-      new ResourceManagerClassLoaderInitializer();
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final IClassLoaderInitializer INSTANCE =
+			new ResourceManagerClassLoaderInitializer();
 
-  private ResourceManagerClassLoaderInitializer() {
-  }
+	private ResourceManagerClassLoaderInitializer() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IClassLoaderInitializer
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void initialize(final ClassLoader classLoader) {
-    ExecutionUtils.runIgnore(new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        Class<?> managerClass = classLoader.loadClass("org.eclipse.wb.swt.ResourceManager");
-        Class<?> providerClass =
-            classLoader.loadClass("org.eclipse.wb.swt.ResourceManager$PluginResourceProvider");
-        initialize_ResourceManager(classLoader, managerClass, providerClass);
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IClassLoaderInitializer
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void initialize(final ClassLoader classLoader) {
+		ExecutionUtils.runIgnore(new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				Class<?> managerClass = classLoader.loadClass("org.eclipse.wb.swt.ResourceManager");
+				Class<?> providerClass =
+						classLoader.loadClass("org.eclipse.wb.swt.ResourceManager$PluginResourceProvider");
+				initialize_ResourceManager(classLoader, managerClass, providerClass);
+			}
+		});
+	}
 
-  @Override
-  public void deinitialize(ClassLoader classLoader) {
-  }
+	@Override
+	public void deinitialize(ClassLoader classLoader) {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Implementation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Initializes already loaded <code>ResourceManager</code> class.
-   */
-  private void initialize_ResourceManager(ClassLoader classLoader,
-      Class<?> managerClass,
-      Class<?> providerClass) throws Exception {
-    Object provider = createProvider(classLoader, providerClass);
-    ReflectionUtils.setField(managerClass, "m_designTimePluginResourceProvider", provider);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Implementation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Initializes already loaded <code>ResourceManager</code> class.
+	 */
+	private void initialize_ResourceManager(ClassLoader classLoader,
+			Class<?> managerClass,
+			Class<?> providerClass) throws Exception {
+		Object provider = createProvider(classLoader, providerClass);
+		ReflectionUtils.setField(managerClass, "m_designTimePluginResourceProvider", provider);
+	}
 
-  /**
-   * @return the implementation of <code>PluginResourceProvider</code>.
-   */
-  private Object createProvider(ClassLoader classLoader, Class<?> providerClass) {
-    try {
-      return new ByteBuddy() //
-          .subclass(providerClass) //
-          .method(ElementMatchers.named("getEntry")) //
-          .intercept(InvocationHandlerAdapter.of((Object proxy, Method method, Object[] args) -> {
-            String symbolicName = (String) args[0];
-            String fullPath = (String) args[1];
-            return getEntry(symbolicName, fullPath);
-          })) //
-          .make() //
-          .load(classLoader) //
-          .getLoaded() //
-          .getConstructor() //
-          .newInstance();
-    } catch (ReflectiveOperationException e) {
-      throw new DesignerException(ICoreExceptionConstants.EVAL_BYTEBUDDY, e);
-    }
-  }
+	/**
+	 * @return the implementation of <code>PluginResourceProvider</code>.
+	 */
+	private Object createProvider(ClassLoader classLoader, Class<?> providerClass) {
+		try {
+			return new ByteBuddy() //
+					.subclass(providerClass) //
+					.method(ElementMatchers.named("getEntry")) //
+					.intercept(InvocationHandlerAdapter.of((Object proxy, Method method, Object[] args) -> {
+						String symbolicName = (String) args[0];
+						String fullPath = (String) args[1];
+						return getEntry(symbolicName, fullPath);
+					})) //
+					.make() //
+					.load(classLoader) //
+					.getLoaded() //
+					.getConstructor() //
+					.newInstance();
+		} catch (ReflectiveOperationException e) {
+			throw new DesignerException(ICoreExceptionConstants.EVAL_BYTEBUDDY, e);
+		}
+	}
 
-  /**
-   * @return the {@link URL} for resource in plugin.
-   */
-  private URL getEntry(String symbolicName, String fullPath) throws Exception {
-    // try target platform
-    {
-      IPluginModelBase modelBase = PluginRegistry.findModel(symbolicName);
-      String installLocation = modelBase.getInstallLocation();
-      if (!StringUtils.isEmpty(installLocation) && installLocation.toLowerCase().endsWith(".jar")) {
-        String urlPath = "jar:file:/" + installLocation + "!/" + fullPath;
-        urlPath = FilenameUtils.normalize(urlPath, true);
-        return new URL(urlPath);
-      }
-    }
-    // try workspace plugin
-    {
-      IPluginModelBase pluginModel = PluginRegistry.findModel(symbolicName);
-      if (pluginModel != null) {
-        IResource underlyingResource = pluginModel.getUnderlyingResource();
-        if (underlyingResource != null) {
-          IProject project = underlyingResource.getProject();
-          return project.getFile(new Path(fullPath)).getLocationURI().toURL();
-        }
-      }
-    }
-    // try runtime plugin
-    {
-      Bundle bundle = Platform.getBundle(symbolicName);
-      if (bundle != null) {
-        return bundle.getEntry(fullPath);
-      }
-    }
-    // not found
-    return null;
-  }
+	/**
+	 * @return the {@link URL} for resource in plugin.
+	 */
+	private URL getEntry(String symbolicName, String fullPath) throws Exception {
+		// try target platform
+		{
+			IPluginModelBase modelBase = PluginRegistry.findModel(symbolicName);
+			String installLocation = modelBase.getInstallLocation();
+			if (!StringUtils.isEmpty(installLocation) && installLocation.toLowerCase().endsWith(".jar")) {
+				String urlPath = "jar:file:/" + installLocation + "!/" + fullPath;
+				urlPath = FilenameUtils.normalize(urlPath, true);
+				return new URL(urlPath);
+			}
+		}
+		// try workspace plugin
+		{
+			IPluginModelBase pluginModel = PluginRegistry.findModel(symbolicName);
+			if (pluginModel != null) {
+				IResource underlyingResource = pluginModel.getUnderlyingResource();
+				if (underlyingResource != null) {
+					IProject project = underlyingResource.getProject();
+					return project.getFile(new Path(fullPath)).getLocationURI().toURL();
+				}
+			}
+		}
+		// try runtime plugin
+		{
+			Bundle bundle = Platform.getBundle(symbolicName);
+			if (bundle != null) {
+				return bundle.getEntry(fullPath);
+			}
+		}
+		// not found
+		return null;
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/Expectations.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/Expectations.java
index 698a344be..6f851dc1e 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/Expectations.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/Expectations.java
@@ -35,217 +35,217 @@
  * @author scheglov_ke
  */
 public final class Expectations {
-  private static String m_hostName;
-  private static String m_OSName;
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Initialization
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  static {
-    try {
-      m_hostName = EnvironmentUtils.HOST_NAME;
-      m_OSName = SystemUtils.OS_NAME;
-    } catch (Throwable e) {
-      throw new RuntimeException(e);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static <V> V get(V default_value, Map<String, V> values) {
-    List<String> keys = getKeys();
-    for (String key : keys) {
-      V value = values.get(key);
-      if (value != null) {
-        return value;
-      }
-    }
-    if (default_value != null) {
-      return default_value;
-    } else {
-      throw new IllegalArgumentException(MessageFormat.format(
-          "Unable to find value in {0}, using keys {1}",
-          values,
-          keys));
-    }
-  }
-
-  public static <V> V get(Map<String, V> values) {
-    return get((V) null, values);
-  }
-
-  public static <V> V get(String key_1, V value_1, String key_2, V value_2) {
-    Map<String, V> map = ImmutableMap.of(key_1, value_1, key_2, value_2);
-    return get(map);
-  }
-
-  public static <V> V get(String key_1, V value_1, String key_2, V value_2, String key_3, V value_3) {
-    Map<String, V> map = ImmutableMap.of(key_1, value_1, key_2, value_2, key_3, value_3);
-    return get(map);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // int
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static int get(String key_1, int value_1, String key_2, int value_2) {
-    Map<String, Integer> map = ImmutableMap.of(key_1, value_1, key_2, value_2);
-    return get(map);
-  }
-
-  public static int get(String key_1,
-      int value_1,
-      String key_2,
-      int value_2,
-      String key_3,
-      int value_3) {
-    Map<String, Integer> map = ImmutableMap.of(key_1, value_1, key_2, value_2, key_3, value_3);
-    return get(map);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // double
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static double get(String key_1, double value_1, String key_2, double value_2) {
-    Map<String, Double> map = ImmutableMap.of(key_1, value_1, key_2, value_2);
-    return get(map);
-  }
-
-  public static double get(String key_1,
-      double value_1,
-      String key_2,
-      double value_2,
-      String key_3,
-      double value_3) {
-    Map<String, Double> map = ImmutableMap.of(key_1, value_1, key_2, value_2, key_3, value_3);
-    return get(map);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Internal access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static List<String> getKeys() {
-    String keyHostOS = m_hostName + " " + m_OSName;
-    String keyHost = m_hostName;
-    String keyOS = m_OSName;
-    String timeZone = Calendar.getInstance().getTimeZone().getID();
-    return ImmutableList.of(
-        keyHostOS,
-        keyHost,
-        keyHost.toLowerCase(Locale.ENGLISH),
-        keyHost.toUpperCase(Locale.ENGLISH),
-        keyOS,
-        timeZone);
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // via Arrays
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static class KeyValue<V> {
-    public String key;
-    public V value;
-
-    public KeyValue(String _key, V _value) {
-      key = _key;
-      value = _value;
-    }
-  }
-
-  public static <V> V get(V default_value, KeyValue<V>... values) {
-    Map<String, V> map = Maps.newHashMap();
-    for (KeyValue<V> value : values) {
-      map.put(value.key, value.value);
-    }
-    return get(default_value, map);
-  }
-
-  public static <V> V get(KeyValue<V> values[]) {
-    return get((V) null, values);
-  }
-  public static class IntValue extends KeyValue<Integer> {
-    public IntValue(String _key, Integer _value) {
-      super(_key, _value);
-    }
-  }
-  public static class DblValue extends KeyValue<Double> {
-    public DblValue(String _key, Double _value) {
-      super(_key, _value);
-    }
-  }
-  public static class BoolValue extends KeyValue<Boolean> {
-    public BoolValue(String _key, Boolean _value) {
-      super(_key, _value);
-    }
-  }
-  public static class InsValue extends KeyValue<Insets> {
-    public InsValue(String _key, Insets _value) {
-      super(_key, _value);
-    }
-  }
-  public static class DimValue extends KeyValue<Dimension> {
-    public DimValue(String _key, Dimension _value) {
-      super(_key, _value);
-    }
-  }
-  public static class RectValue extends KeyValue<Rectangle> {
-    public RectValue(String _key, Rectangle _value) {
-      super(_key, _value);
-    }
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // String
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static class StrValue extends KeyValue<String> {
-    public StrValue(String _key, String _value) {
-      super(_key, _value);
-    }
-  }
-
-  public static String get(String default_value, StrValue... values) {
-    Map<String, String> map = Maps.newHashMap();
-    for (StrValue value : values) {
-      map.put(value.key, value.value);
-    }
-    return get(default_value, map);
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Fluent interface
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static class State<V> {
-    private final V def;
-    private final Map<String, V> map;
-
-    public State(V def, Map<String, V> map) {
-      this.def = def;
-      this.map = map;
-    }
-
-    public State<V> or(String key, V value) {
-      map.put(key, value);
-      return this;
-    }
-
-    public V get() {
-      return Expectations.get(def, map);
-    }
-  }
-
-  public static <V> State<V> get(V def) {
-    Map<String, V> map = Maps.newHashMap();
-    return new State<V>(def, map);
-  }
+	private static String m_hostName;
+	private static String m_OSName;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Initialization
+	//
+	////////////////////////////////////////////////////////////////////////////
+	static {
+		try {
+			m_hostName = EnvironmentUtils.HOST_NAME;
+			m_OSName = SystemUtils.OS_NAME;
+		} catch (Throwable e) {
+			throw new RuntimeException(e);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static <V> V get(V default_value, Map<String, V> values) {
+		List<String> keys = getKeys();
+		for (String key : keys) {
+			V value = values.get(key);
+			if (value != null) {
+				return value;
+			}
+		}
+		if (default_value != null) {
+			return default_value;
+		} else {
+			throw new IllegalArgumentException(MessageFormat.format(
+					"Unable to find value in {0}, using keys {1}",
+					values,
+					keys));
+		}
+	}
+
+	public static <V> V get(Map<String, V> values) {
+		return get((V) null, values);
+	}
+
+	public static <V> V get(String key_1, V value_1, String key_2, V value_2) {
+		Map<String, V> map = ImmutableMap.of(key_1, value_1, key_2, value_2);
+		return get(map);
+	}
+
+	public static <V> V get(String key_1, V value_1, String key_2, V value_2, String key_3, V value_3) {
+		Map<String, V> map = ImmutableMap.of(key_1, value_1, key_2, value_2, key_3, value_3);
+		return get(map);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// int
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static int get(String key_1, int value_1, String key_2, int value_2) {
+		Map<String, Integer> map = ImmutableMap.of(key_1, value_1, key_2, value_2);
+		return get(map);
+	}
+
+	public static int get(String key_1,
+			int value_1,
+			String key_2,
+			int value_2,
+			String key_3,
+			int value_3) {
+		Map<String, Integer> map = ImmutableMap.of(key_1, value_1, key_2, value_2, key_3, value_3);
+		return get(map);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// double
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static double get(String key_1, double value_1, String key_2, double value_2) {
+		Map<String, Double> map = ImmutableMap.of(key_1, value_1, key_2, value_2);
+		return get(map);
+	}
+
+	public static double get(String key_1,
+			double value_1,
+			String key_2,
+			double value_2,
+			String key_3,
+			double value_3) {
+		Map<String, Double> map = ImmutableMap.of(key_1, value_1, key_2, value_2, key_3, value_3);
+		return get(map);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Internal access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static List<String> getKeys() {
+		String keyHostOS = m_hostName + " " + m_OSName;
+		String keyHost = m_hostName;
+		String keyOS = m_OSName;
+		String timeZone = Calendar.getInstance().getTimeZone().getID();
+		return ImmutableList.of(
+				keyHostOS,
+				keyHost,
+				keyHost.toLowerCase(Locale.ENGLISH),
+				keyHost.toUpperCase(Locale.ENGLISH),
+				keyOS,
+				timeZone);
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// via Arrays
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static class KeyValue<V> {
+		public String key;
+		public V value;
+
+		public KeyValue(String _key, V _value) {
+			key = _key;
+			value = _value;
+		}
+	}
+
+	public static <V> V get(V default_value, KeyValue<V>... values) {
+		Map<String, V> map = Maps.newHashMap();
+		for (KeyValue<V> value : values) {
+			map.put(value.key, value.value);
+		}
+		return get(default_value, map);
+	}
+
+	public static <V> V get(KeyValue<V> values[]) {
+		return get((V) null, values);
+	}
+	public static class IntValue extends KeyValue<Integer> {
+		public IntValue(String _key, Integer _value) {
+			super(_key, _value);
+		}
+	}
+	public static class DblValue extends KeyValue<Double> {
+		public DblValue(String _key, Double _value) {
+			super(_key, _value);
+		}
+	}
+	public static class BoolValue extends KeyValue<Boolean> {
+		public BoolValue(String _key, Boolean _value) {
+			super(_key, _value);
+		}
+	}
+	public static class InsValue extends KeyValue<Insets> {
+		public InsValue(String _key, Insets _value) {
+			super(_key, _value);
+		}
+	}
+	public static class DimValue extends KeyValue<Dimension> {
+		public DimValue(String _key, Dimension _value) {
+			super(_key, _value);
+		}
+	}
+	public static class RectValue extends KeyValue<Rectangle> {
+		public RectValue(String _key, Rectangle _value) {
+			super(_key, _value);
+		}
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// String
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static class StrValue extends KeyValue<String> {
+		public StrValue(String _key, String _value) {
+			super(_key, _value);
+		}
+	}
+
+	public static String get(String default_value, StrValue... values) {
+		Map<String, String> map = Maps.newHashMap();
+		for (StrValue value : values) {
+			map.put(value.key, value.value);
+		}
+		return get(default_value, map);
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Fluent interface
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static class State<V> {
+		private final V def;
+		private final Map<String, V> map;
+
+		public State(V def, Map<String, V> map) {
+			this.def = def;
+			this.map = map;
+		}
+
+		public State<V> or(String key, V value) {
+			map.put(key, value);
+			return this;
+		}
+
+		public V get() {
+			return Expectations.get(def, map);
+		}
+	}
+
+	public static <V> State<V> get(V def) {
+		Map<String, V> map = Maps.newHashMap();
+		return new State<V>(def, map);
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/ResourceUtils.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/ResourceUtils.java
index bbb8800a5..5caea8555 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/ResourceUtils.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/ResourceUtils.java
@@ -36,61 +36,61 @@
  * @author sablin_aa
  */
 public class ResourceUtils {
-  private static Bundle m_testBundle = Platform.getBundle("org.eclipse.wb.tests");
+	private static Bundle m_testBundle = Platform.getBundle("org.eclipse.wb.tests");
 
-  /**
-   * @return {@link URL} on resource entry.
-   */
-  public static URL getEntry(String name) {
-    return m_testBundle.getEntry(name);
-  }
+	/**
+	 * @return {@link URL} on resource entry.
+	 */
+	public static URL getEntry(String name) {
+		return m_testBundle.getEntry(name);
+	}
 
-  public static URL getEntry(String path, String name) {
-    return getEntry(path + "/" + name);
-  }
+	public static URL getEntry(String path, String name) {
+		return getEntry(path + "/" + name);
+	}
 
-  /**
-   * Copy test resources from specified subpath to test project.
-   */
-  public static void resources2project(TestProject project, String path, String[] skipEntries)
-      throws IOException, CoreException, JavaModelException, Exception {
-    Enumeration<URL> pathEntries = m_testBundle.findEntries(path, "*", true);
-    assertThat(pathEntries).isNotNull();
-    while (pathEntries.hasMoreElements()) {
-      URL entryURL = pathEntries.nextElement();
-      String entryPathBase = entryURL.getPath();
-      String entryPath = entryPathBase.replaceFirst(path, StringUtils.EMPTY);
-      try {
-        // file
-        InputStream entryStream = entryURL.openStream();
-        IFile file = project.getProject().getFile(entryPath);
-        if (entryPathBase.endsWith("/CVS/" + file.getName())) {
-          // CVS-file
-          continue;
-        }
-        if (!ArrayUtils.contains(skipEntries, file.getName())) {
-          if (file.exists()) {
-            file.setContents(entryStream, true, false, null);
-          } else {
-            file.create(entryStream, true, null);
-          }
-        }
-      } catch (FileNotFoundException e) {
-        // folder
-        IFolder folder = project.getProject().getFolder(entryPath);
-        if (folder.getName().equals("CVS")) {
-          // CVS-directory
-          continue;
-        }
-        if (!folder.exists()) {
-          folder.create(true, true, null);
-        }
-      }
-    }
-  }
+	/**
+	 * Copy test resources from specified subpath to test project.
+	 */
+	public static void resources2project(TestProject project, String path, String[] skipEntries)
+			throws IOException, CoreException, JavaModelException, Exception {
+		Enumeration<URL> pathEntries = m_testBundle.findEntries(path, "*", true);
+		assertThat(pathEntries).isNotNull();
+		while (pathEntries.hasMoreElements()) {
+			URL entryURL = pathEntries.nextElement();
+			String entryPathBase = entryURL.getPath();
+			String entryPath = entryPathBase.replaceFirst(path, StringUtils.EMPTY);
+			try {
+				// file
+				InputStream entryStream = entryURL.openStream();
+				IFile file = project.getProject().getFile(entryPath);
+				if (entryPathBase.endsWith("/CVS/" + file.getName())) {
+					// CVS-file
+					continue;
+				}
+				if (!ArrayUtils.contains(skipEntries, file.getName())) {
+					if (file.exists()) {
+						file.setContents(entryStream, true, false, null);
+					} else {
+						file.create(entryStream, true, null);
+					}
+				}
+			} catch (FileNotFoundException e) {
+				// folder
+				IFolder folder = project.getProject().getFolder(entryPath);
+				if (folder.getName().equals("CVS")) {
+					// CVS-directory
+					continue;
+				}
+				if (!folder.exists()) {
+					folder.create(true, true, null);
+				}
+			}
+		}
+	}
 
-  public static void resources2project(TestProject project, String path)
-      throws IOException, CoreException, JavaModelException, Exception {
-    resources2project(project, path, new String[]{});
-  }
+	public static void resources2project(TestProject project, String path)
+			throws IOException, CoreException, JavaModelException, Exception {
+		resources2project(project, path, new String[]{});
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/TestUtils.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/TestUtils.java
index 779b5588d..a521e26b4 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/TestUtils.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/TestUtils.java
@@ -71,380 +71,380 @@
  * @author scheglov_ke
  */
 public final class TestUtils {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private TestUtils() {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private TestUtils() {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Creates file with empty PNG image of given size.
-   *
-   * @param testProject
-   *          the {@link TestProject} to access {@link IProject} where to create image.
-   * @param path
-   *          the path relative to {@link IProject}, for example <code>"src/test/MyImage.png"</code>
-   *          .
-   * @param width
-   *          the width of image.
-   * @param height
-   *          the height of image.
-   */
-  public static IFile createImagePNG(TestProject testProject, String path, int width, int height)
-      throws Exception {
-    byte[] bytes = createImagePNG(width, height);
-    IFile file = testProject.getProject().getFile(new Path(path));
-    IOUtils2.setFileContents(file, new ByteArrayInputStream(bytes));
-    return file;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Creates file with empty PNG image of given size.
+	 *
+	 * @param testProject
+	 *          the {@link TestProject} to access {@link IProject} where to create image.
+	 * @param path
+	 *          the path relative to {@link IProject}, for example <code>"src/test/MyImage.png"</code>
+	 *          .
+	 * @param width
+	 *          the width of image.
+	 * @param height
+	 *          the height of image.
+	 */
+	public static IFile createImagePNG(TestProject testProject, String path, int width, int height)
+			throws Exception {
+		byte[] bytes = createImagePNG(width, height);
+		IFile file = testProject.getProject().getFile(new Path(path));
+		IOUtils2.setFileContents(file, new ByteArrayInputStream(bytes));
+		return file;
+	}
 
-  /**
-   * @return the bytes of PNG image with given size.
-   */
-  public static byte[] createImagePNG(int width, int height) {
-    Image image = new Image(null, width, height);
-    ImageLoader imageLoader = new ImageLoader();
-    imageLoader.data = new ImageData[]{image.getImageData()};
-    ByteArrayOutputStream baos = new ByteArrayOutputStream();
-    imageLoader.save(baos, SWT.IMAGE_PNG);
-	image.dispose();
-    return baos.toByteArray();
-  }
+	/**
+	 * @return the bytes of PNG image with given size.
+	 */
+	public static byte[] createImagePNG(int width, int height) {
+		Image image = new Image(null, width, height);
+		ImageLoader imageLoader = new ImageLoader();
+		imageLoader.data = new ImageData[]{image.getImageData()};
+		ByteArrayOutputStream baos = new ByteArrayOutputStream();
+		imageLoader.save(baos, SWT.IMAGE_PNG);
+		image.dispose();
+		return baos.toByteArray();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Workbench
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Closes all {@link IViewPart}s.
-   */
-  public static void closeAllViews() {
-    // run event loop to allow any async's be executed
-    while (Display.getCurrent().readAndDispatch()) {
-      // do nothing
-    }
-    // do close
-    IWorkbenchPage activePage = DesignerPlugin.getActivePage();
-    IViewReference[] viewReferences = activePage.getViewReferences();
-    if (viewReferences.length != 0) {
-      for (IViewReference viewReference : viewReferences) {
-        activePage.hideView(viewReference);
-      }
-      waitEventLoop(100);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Workbench
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Closes all {@link IViewPart}s.
+	 */
+	public static void closeAllViews() {
+		// run event loop to allow any async's be executed
+		while (Display.getCurrent().readAndDispatch()) {
+			// do nothing
+		}
+		// do close
+		IWorkbenchPage activePage = DesignerPlugin.getActivePage();
+		IViewReference[] viewReferences = activePage.getViewReferences();
+		if (viewReferences.length != 0) {
+			for (IViewReference viewReference : viewReferences) {
+				activePage.hideView(viewReference);
+			}
+			waitEventLoop(100);
+		}
+	}
 
-  /**
-   * Closes all editors.
-   */
-  public static void closeAllEditors() {
-    // run event loop to allow any async's be executed
-    while (Display.getCurrent().readAndDispatch()) {
-      // do nothing
-    }
-    // close all editors
-    {
-      IWorkbenchPage activePage = DesignerPlugin.getActivePage();
-      activePage.closeAllEditors(false);
-    }
-  }
+	/**
+	 * Closes all editors.
+	 */
+	public static void closeAllEditors() {
+		// run event loop to allow any async's be executed
+		while (Display.getCurrent().readAndDispatch()) {
+			// do nothing
+		}
+		// close all editors
+		{
+			IWorkbenchPage activePage = DesignerPlugin.getActivePage();
+			activePage.closeAllEditors(false);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Dynamic extensions
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final String EXTENSION_ID = "testExtension";
-  private static Bundle m_contributionBundle;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Dynamic extensions
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final String EXTENSION_ID = "testExtension";
+	private static Bundle m_contributionBundle;
 
-  /**
-   * @return the {@link Bundle} from which contribution is performed, not <code>null</code>.
-   */
-  private static Bundle getContributorBundle() {
-    if (m_contributionBundle != null) {
-      return m_contributionBundle;
-    }
-    return Activator.getDefault().getBundle();
-  }
+	/**
+	 * @return the {@link Bundle} from which contribution is performed, not <code>null</code>.
+	 */
+	private static Bundle getContributorBundle() {
+		if (m_contributionBundle != null) {
+			return m_contributionBundle;
+		}
+		return Activator.getDefault().getBundle();
+	}
 
-  /**
-   * Sets the {@link Bundle} from which contribution is performed, may be <code>null</code> to reset
-   * to the WindowBuilder bundle.
-   */
-  public static void setContributionBundle(Bundle contributionBundle) {
-    m_contributionBundle = contributionBundle;
-  }
+	/**
+	 * Sets the {@link Bundle} from which contribution is performed, may be <code>null</code> to reset
+	 * to the WindowBuilder bundle.
+	 */
+	public static void setContributionBundle(Bundle contributionBundle) {
+		m_contributionBundle = contributionBundle;
+	}
 
-  /**
-   * @return the qualified exception id, i.e. contributor bundle plus simpel ID.
-   */
-  private static String getQualifiedExtensionId(String simpleId) {
-    return getContributorBundle().getSymbolicName() + "." + simpleId;
-  }
+	/**
+	 * @return the qualified exception id, i.e. contributor bundle plus simpel ID.
+	 */
+	private static String getQualifiedExtensionId(String simpleId) {
+		return getContributorBundle().getSymbolicName() + "." + simpleId;
+	}
 
-  /**
-   * Adds dynamic extension.
-   *
-   * @param pointId
-   *          the qualified extension point id, e.g. <code>"org.eclipse.wb.core.toolkits"</code>.
-   * @param contribution
-   *          the {@link String} with contribution, without <code>"plugin"</code> and
-   *          <code>"extension"</code> tags.
-   */
-  public static void addDynamicExtension(String pointId, String contribution) {
-    addDynamicExtension(pointId, EXTENSION_ID, contribution);
-  }
+	/**
+	 * Adds dynamic extension.
+	 *
+	 * @param pointId
+	 *          the qualified extension point id, e.g. <code>"org.eclipse.wb.core.toolkits"</code>.
+	 * @param contribution
+	 *          the {@link String} with contribution, without <code>"plugin"</code> and
+	 *          <code>"extension"</code> tags.
+	 */
+	public static void addDynamicExtension(String pointId, String contribution) {
+		addDynamicExtension(pointId, EXTENSION_ID, contribution);
+	}
 
-  /**
-   * Adds dynamic extension.
-   *
-   * @param pointId
-   *          the qualified extension point id, e.g. <code>"org.eclipse.wb.core.toolkits"</code>.
-   * @param extensionId
-   *          the (simple) id of added extension, for example <code>"myNature"</code>.
-   * @param contribution
-   *          the {@link String} with contribution, without <code>"plugin"</code> and
-   *          <code>"extension"</code> tags.
-   */
-  public static void addDynamicExtension(String pointId, String extensionId, String contribution) {
-    contribution =
-        "<extension point='%pointId%' id='%extensionId%'>\n" + contribution + "\n</extension>";
-    addDynamicExtension2(pointId, extensionId, contribution);
-  }
+	/**
+	 * Adds dynamic extension.
+	 *
+	 * @param pointId
+	 *          the qualified extension point id, e.g. <code>"org.eclipse.wb.core.toolkits"</code>.
+	 * @param extensionId
+	 *          the (simple) id of added extension, for example <code>"myNature"</code>.
+	 * @param contribution
+	 *          the {@link String} with contribution, without <code>"plugin"</code> and
+	 *          <code>"extension"</code> tags.
+	 */
+	public static void addDynamicExtension(String pointId, String extensionId, String contribution) {
+		contribution =
+				"<extension point='%pointId%' id='%extensionId%'>\n" + contribution + "\n</extension>";
+		addDynamicExtension2(pointId, extensionId, contribution);
+	}
 
-  /**
-   * Adds dynamic extension.<br>
-   * In contrast to {@link #addDynamicExtension(String, String)}, this method accepts full
-   * contribution, that should have <code>"point", "id"</code> and other attributes.
-   *
-   * @param pointId
-   *          the qualified extension point id, e.g. <code>"org.eclipse.wb.core.toolkits"</code>.
-   * @param extensionId
-   *          the (simple) id of added extension, for example <code>"myNature"</code>.
-   * @param contribution
-   *          the {@link String} with full contribution, without <code>"plugin"</code> tag, but with
-   *          <code>"extension"</code> tag. It may use <code>"%pointId%"</code> and
-   *          <code>"%extensionId%"</code> template variables.
-   */
-  public static void addDynamicExtension2(String pointId, String extensionId, String contribution) {
-    // update contribution
-    contribution = "<plugin>\n" + contribution + "\n</plugin>";
-    contribution = StringUtils.replace(contribution, "%pointId%", pointId);
-    contribution = StringUtils.replace(contribution, "%extensionId%", extensionId);
-    // add extension into registry
-    {
-      Bundle bundle = getContributorBundle();
-      IContributor contributor = ContributorFactoryOSGi.createContributor(bundle);
-      IExtensionRegistry registry = Platform.getExtensionRegistry();
-      Object userToken = ((ExtensionRegistry) registry).getTemporaryUserToken();
-      // do add
-      registry.addContribution(
-          new ByteArrayInputStream(contribution.getBytes()),
-          contributor,
-          false,
-          null,
-          null,
-          userToken);
-    }
-    // wait for added extension
-    {
-      String qualifiedExtensionId = getQualifiedExtensionId(extensionId);
-      while (ExternalFactoriesHelper.getExtension(pointId, qualifiedExtensionId) == null) {
-        waitEventLoop(1);
-      }
-    }
-  }
+	/**
+	 * Adds dynamic extension.<br>
+	 * In contrast to {@link #addDynamicExtension(String, String)}, this method accepts full
+	 * contribution, that should have <code>"point", "id"</code> and other attributes.
+	 *
+	 * @param pointId
+	 *          the qualified extension point id, e.g. <code>"org.eclipse.wb.core.toolkits"</code>.
+	 * @param extensionId
+	 *          the (simple) id of added extension, for example <code>"myNature"</code>.
+	 * @param contribution
+	 *          the {@link String} with full contribution, without <code>"plugin"</code> tag, but with
+	 *          <code>"extension"</code> tag. It may use <code>"%pointId%"</code> and
+	 *          <code>"%extensionId%"</code> template variables.
+	 */
+	public static void addDynamicExtension2(String pointId, String extensionId, String contribution) {
+		// update contribution
+		contribution = "<plugin>\n" + contribution + "\n</plugin>";
+		contribution = StringUtils.replace(contribution, "%pointId%", pointId);
+		contribution = StringUtils.replace(contribution, "%extensionId%", extensionId);
+		// add extension into registry
+		{
+			Bundle bundle = getContributorBundle();
+			IContributor contributor = ContributorFactoryOSGi.createContributor(bundle);
+			IExtensionRegistry registry = Platform.getExtensionRegistry();
+			Object userToken = ((ExtensionRegistry) registry).getTemporaryUserToken();
+			// do add
+			registry.addContribution(
+					new ByteArrayInputStream(contribution.getBytes()),
+					contributor,
+					false,
+					null,
+					null,
+					userToken);
+		}
+		// wait for added extension
+		{
+			String qualifiedExtensionId = getQualifiedExtensionId(extensionId);
+			while (ExternalFactoriesHelper.getExtension(pointId, qualifiedExtensionId) == null) {
+				waitEventLoop(1);
+			}
+		}
+	}
 
-  /**
-   * Removes the test dynamic extension, added previously by
-   * {@link #addDynamicExtension(String, String)}.
-   *
-   * @param pointId
-   *          the qualified extension point id, e.g. <code>"org.eclipse.wb.core.toolkits"</code>.
-   */
-  public static void removeDynamicExtension(String pointId) {
-    removeDynamicExtension(pointId, EXTENSION_ID);
-  }
+	/**
+	 * Removes the test dynamic extension, added previously by
+	 * {@link #addDynamicExtension(String, String)}.
+	 *
+	 * @param pointId
+	 *          the qualified extension point id, e.g. <code>"org.eclipse.wb.core.toolkits"</code>.
+	 */
+	public static void removeDynamicExtension(String pointId) {
+		removeDynamicExtension(pointId, EXTENSION_ID);
+	}
 
-  /**
-   * Removes the test dynamic extension, added previously by
-   * {@link #addDynamicExtension(String, String)}. This methods <em>does not</em> wait for
-   * processing asynchronous event by {@link ExternalFactoriesHelper}.
-   */
-  public static void removeDynamicExtension_noWait(String pointId) {
-    doRemoveDynamicExtension(pointId, EXTENSION_ID);
-  }
+	/**
+	 * Removes the test dynamic extension, added previously by
+	 * {@link #addDynamicExtension(String, String)}. This methods <em>does not</em> wait for
+	 * processing asynchronous event by {@link ExternalFactoriesHelper}.
+	 */
+	public static void removeDynamicExtension_noWait(String pointId) {
+		doRemoveDynamicExtension(pointId, EXTENSION_ID);
+	}
 
-  /**
-   * Removes dynamic extension from registry and waits until it will be removed also from
-   * {@link ExternalFactoriesHelper}.
-   *
-   * @param pointId
-   *          the qualified extension point id, e.g. <code>"org.eclipse.wb.core.toolkits"</code>.
-   * @param extensionId
-   *          the (simple) id of extension to remove, for example <code>"myNature"</code>.
-   */
-  public static void removeDynamicExtension(String pointId, String extensionId) {
-    String qualifiedExtensionId = getQualifiedExtensionId(extensionId);
-    while (ExternalFactoriesHelper.getExtension(pointId, qualifiedExtensionId) != null) {
-      doRemoveDynamicExtension(pointId, extensionId);
-      waitEventLoop(1);
-    }
-  }
+	/**
+	 * Removes dynamic extension from registry and waits until it will be removed also from
+	 * {@link ExternalFactoriesHelper}.
+	 *
+	 * @param pointId
+	 *          the qualified extension point id, e.g. <code>"org.eclipse.wb.core.toolkits"</code>.
+	 * @param extensionId
+	 *          the (simple) id of extension to remove, for example <code>"myNature"</code>.
+	 */
+	public static void removeDynamicExtension(String pointId, String extensionId) {
+		String qualifiedExtensionId = getQualifiedExtensionId(extensionId);
+		while (ExternalFactoriesHelper.getExtension(pointId, qualifiedExtensionId) != null) {
+			doRemoveDynamicExtension(pointId, extensionId);
+			waitEventLoop(1);
+		}
+	}
 
-  /**
-   * Removes dynamic extension from {@link IExtensionRegistry}.
-   */
-  private static void doRemoveDynamicExtension(String pointId, String extensionId) {
-    IExtensionRegistry registry = Platform.getExtensionRegistry();
-    IExtension extension = registry.getExtension(pointId, getQualifiedExtensionId(extensionId));
-    // do remove
-    Object userToken = ((ExtensionRegistry) registry).getTemporaryUserToken();
-    registry.removeExtension(extension, userToken);
-  }
+	/**
+	 * Removes dynamic extension from {@link IExtensionRegistry}.
+	 */
+	private static void doRemoveDynamicExtension(String pointId, String extensionId) {
+		IExtensionRegistry registry = Platform.getExtensionRegistry();
+		IExtension extension = registry.getExtension(pointId, getQualifiedExtensionId(extensionId));
+		// do remove
+		Object userToken = ((ExtensionRegistry) registry).getTemporaryUserToken();
+		registry.removeExtension(extension, userToken);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // UI utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Waits given number of milliseconds and runs events loop every 1 millisecond.<br>
-   * At least one events loop will be executed.
-   */
-  public static void waitEventLoop(int time) {
-    long start = System.currentTimeMillis();
-    do {
-      try {
-        Thread.sleep(0);
-      } catch (Throwable e) {
-      }
-      while (Display.getCurrent().readAndDispatch()) {
-        // do nothing
-      }
-    } while (System.currentTimeMillis() - start < time);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// UI utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Waits given number of milliseconds and runs events loop every 1 millisecond.<br>
+	 * At least one events loop will be executed.
+	 */
+	public static void waitEventLoop(int time) {
+		long start = System.currentTimeMillis();
+		do {
+			try {
+				Thread.sleep(0);
+			} catch (Throwable e) {
+			}
+			while (Display.getCurrent().readAndDispatch()) {
+				// do nothing
+			}
+		} while (System.currentTimeMillis() - start < time);
+	}
 
-  public static void runWizard(final IWizard wizard, IStructuredSelection selection) {
-    IWorkbenchWindow workbenchWindow = DesignerPlugin.getActiveWorkbenchWindow();
-    // initialize IWorkbenchWizard
-    if (wizard instanceof IWorkbenchWizard) {
-      ((IWorkbenchWizard) wizard).init(workbenchWindow.getWorkbench(), selection);
-    }
-    // open Wizard UI
-    WizardDialog dialog = new WizardDialog(workbenchWindow.getShell(), wizard);
-    dialog.create();
-    String title = wizard.getWindowTitle();
-    if (title != null) {
-      dialog.getShell().setText(title);
-    }
-    dialog.open();
-  }
+	public static void runWizard(final IWizard wizard, IStructuredSelection selection) {
+		IWorkbenchWindow workbenchWindow = DesignerPlugin.getActiveWorkbenchWindow();
+		// initialize IWorkbenchWizard
+		if (wizard instanceof IWorkbenchWizard) {
+			((IWorkbenchWizard) wizard).init(workbenchWindow.getWorkbench(), selection);
+		}
+		// open Wizard UI
+		WizardDialog dialog = new WizardDialog(workbenchWindow.getShell(), wizard);
+		dialog.create();
+		String title = wizard.getWindowTitle();
+		if (title != null) {
+			dialog.getShell().setText(title);
+		}
+		dialog.open();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Resources
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the path to the temporary "jar" file with single entry.
-   *
-   * @param entryName
-   *          the name of entry, for example <code>"myFolder/subFolder/file.txt"</code>.
-   * @param content
-   *          the {@link String} content of entry.
-   */
-  public static String createTemporaryJar(String entryName, String content) throws Exception {
-    File tempFile = File.createTempFile("wbpTests", ".jar");
-    tempFile.deleteOnExit();
-    // create "jar" with single entry
-    {
-      JarOutputStream jarOutputStream = new JarOutputStream(new FileOutputStream(tempFile));
-      jarOutputStream.putNextEntry(new ZipEntry(entryName));
-      jarOutputStream.write(content.getBytes());
-      jarOutputStream.closeEntry();
-      jarOutputStream.close();
-    }
-    // return path to "jar"
-    return tempFile.getAbsolutePath();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Resources
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the path to the temporary "jar" file with single entry.
+	 *
+	 * @param entryName
+	 *          the name of entry, for example <code>"myFolder/subFolder/file.txt"</code>.
+	 * @param content
+	 *          the {@link String} content of entry.
+	 */
+	public static String createTemporaryJar(String entryName, String content) throws Exception {
+		File tempFile = File.createTempFile("wbpTests", ".jar");
+		tempFile.deleteOnExit();
+		// create "jar" with single entry
+		{
+			JarOutputStream jarOutputStream = new JarOutputStream(new FileOutputStream(tempFile));
+			jarOutputStream.putNextEntry(new ZipEntry(entryName));
+			jarOutputStream.write(content.getBytes());
+			jarOutputStream.closeEntry();
+			jarOutputStream.close();
+		}
+		// return path to "jar"
+		return tempFile.getAbsolutePath();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // TestSuite
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sorts test methods in the given {@link TestSuite} to same order as they are declared in source
-   * of test class.
-   */
-  public static void sortTestSuiteMethods(Class<?> clazz, TestSuite suite) {
-    try {
-      final List<String> sourceMethodNames = getSourceMethodNames(clazz);
-      Vector<TestCase> tests = getTestsVector(suite);
-      Collections.sort(tests, new Comparator<TestCase>() {
-        @Override
-        public int compare(TestCase o1, TestCase o2) {
-          String method_1 = o1.getName();
-          String method_2 = o2.getName();
-          if ("test_setUp".equals(method_1)) {
-            return -1;
-          }
-          if ("test_setUp".equals(method_2)) {
-            return 1;
-          }
-          if ("test_tearDown".equals(method_1)) {
-            return 1;
-          }
-          if ("test_tearDown".equals(method_2)) {
-            return -1;
-          }
-          return sourceMethodNames.indexOf(method_1) - sourceMethodNames.indexOf(method_2);
-        }
-      });
-    } catch (Throwable e) {
-      ReflectionUtils.propagate(e);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// TestSuite
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sorts test methods in the given {@link TestSuite} to same order as they are declared in source
+	 * of test class.
+	 */
+	public static void sortTestSuiteMethods(Class<?> clazz, TestSuite suite) {
+		try {
+			final List<String> sourceMethodNames = getSourceMethodNames(clazz);
+			Vector<TestCase> tests = getTestsVector(suite);
+			Collections.sort(tests, new Comparator<TestCase>() {
+				@Override
+				public int compare(TestCase o1, TestCase o2) {
+					String method_1 = o1.getName();
+					String method_2 = o2.getName();
+					if ("test_setUp".equals(method_1)) {
+						return -1;
+					}
+					if ("test_setUp".equals(method_2)) {
+						return 1;
+					}
+					if ("test_tearDown".equals(method_1)) {
+						return 1;
+					}
+					if ("test_tearDown".equals(method_2)) {
+						return -1;
+					}
+					return sourceMethodNames.indexOf(method_1) - sourceMethodNames.indexOf(method_2);
+				}
+			});
+		} catch (Throwable e) {
+			ReflectionUtils.propagate(e);
+		}
+	}
 
-  /**
-   * @return the names of methods declared in the given {@link Class}, in same order as in source.
-   */
-  private static List<String> getSourceMethodNames(Class<?> testClass) throws Exception {
-    final List<String> sourceMethodNames = Lists.newArrayList();
-    String classPath = testClass.getName().replace('.', '/') + ".class";
-    InputStream classStream = testClass.getClassLoader().getResourceAsStream(classPath);
-    ClassReader classReader = new ClassReader(classStream);
-    classReader.accept(new ClassVisitor(Opcodes.ASM9) {
-      @Override
-      public MethodVisitor visitMethod(int access,
-          String name,
-          String desc,
-          String signature,
-          String[] exceptions) {
-        sourceMethodNames.add(name);
-        return new MethodVisitor(Opcodes.ASM9) {};
-      }
-    }, 0);
-    return sourceMethodNames;
-  }
+	/**
+	 * @return the names of methods declared in the given {@link Class}, in same order as in source.
+	 */
+	private static List<String> getSourceMethodNames(Class<?> testClass) throws Exception {
+		final List<String> sourceMethodNames = Lists.newArrayList();
+		String classPath = testClass.getName().replace('.', '/') + ".class";
+		InputStream classStream = testClass.getClassLoader().getResourceAsStream(classPath);
+		ClassReader classReader = new ClassReader(classStream);
+		classReader.accept(new ClassVisitor(Opcodes.ASM9) {
+			@Override
+			public MethodVisitor visitMethod(int access,
+					String name,
+					String desc,
+					String signature,
+					String[] exceptions) {
+				sourceMethodNames.add(name);
+				return new MethodVisitor(Opcodes.ASM9) {};
+			}
+		}, 0);
+		return sourceMethodNames;
+	}
 
-  /**
-   * @return the live {@link Vector} of tests in the given {@link TestSuite}.
-   */
-  private static Vector<TestCase> getTestsVector(TestSuite suite) throws Exception {
-    Field testsField = TestSuite.class.getDeclaredField("fTests");
-    testsField.setAccessible(true);
-    @SuppressWarnings("unchecked")
-    Vector<TestCase> tests = (Vector<TestCase>) testsField.get(suite);
-    return tests;
-  }
+	/**
+	 * @return the live {@link Vector} of tests in the given {@link TestSuite}.
+	 */
+	private static Vector<TestCase> getTestsVector(TestSuite suite) throws Exception {
+		Field testsField = TestSuite.class.getDeclaredField("fTests");
+		testsField.setAccessible(true);
+		@SuppressWarnings("unchecked")
+		Vector<TestCase> tests = (Vector<TestCase>) testsField.get(suite);
+		return tests;
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/WaitForMemoryProfilerTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/WaitForMemoryProfilerTest.java
index a9e3e34d1..b5339a9bf 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/WaitForMemoryProfilerTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/WaitForMemoryProfilerTest.java
@@ -22,11 +22,11 @@
  * @author scheglov_ke
  */
 public class WaitForMemoryProfilerTest extends DesignerTestCase {
-  public void test_waitForProfiler() throws InterruptedException {
-    EditorState.setActiveJavaInfo(null);
-    GlobalState.setActiveObject(null);
-    // wait long time...
-    System.out.println("**** Profiler ****, take snapshot!");
-    waitEventLoop(1000 * 1000 * 1000, 100);
-  }
+	public void test_waitForProfiler() throws InterruptedException {
+		EditorState.setActiveJavaInfo(null);
+		GlobalState.setActiveObject(null);
+		// wait long time...
+		System.out.println("**** Profiler ****, take snapshot!");
+		waitEventLoop(1000 * 1000 * 1000, 100);
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/WindowBuilderTests.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/WindowBuilderTests.java
index 3c8ca6e87..0ebefdef0 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/WindowBuilderTests.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/WindowBuilderTests.java
@@ -34,14 +34,14 @@
 	Draw2dTests.class, //
 	GefTests.class, //
 	SwtTests.class,
-    CommonTests.class,
-    CoreTests.class,
-    EditorTests.class,
-    SwingTests.class,
-    RcpTests.class
-// not yet ready to run, need work to run successfully
-// XmlTests.class,
-// XwtTests.class
+	CommonTests.class,
+	CoreTests.class,
+	EditorTests.class,
+	SwingTests.class,
+	RcpTests.class
+	// not yet ready to run, need work to run successfully
+	// XmlTests.class,
+	// XwtTests.class
 
 })
 
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/AbstractXmlObjectTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/AbstractXmlObjectTest.java
index f167a4995..d701ad518 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/AbstractXmlObjectTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/AbstractXmlObjectTest.java
@@ -56,571 +56,571 @@
  * @author scheglov_ke
  */
 public abstract class AbstractXmlObjectTest extends AbstractJavaProjectTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Life cycle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void setUp() throws Exception {
-    super.setUp();
-    if (m_testProject == null) {
-      do_projectCreate();
-      configureNewProject();
-    }
-  }
-
-  /**
-   * Configures created project.
-   */
-  protected abstract void configureNewProject() throws Exception;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Java source
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the Java source.
-   */
-  protected final String getJavaSource(String... lines) {
-    lines = getDoubleQuotes(lines);
-    lines = getJavaSource_decorate(lines);
-    return getSource(lines);
-  }
-
-  /**
-   * Asserts that Java source has expected content.
-   */
-  protected final void assertJava(String... lines) {
-    String source = getJavaSource(lines);
-    assertEquals(source, getJavaSourceToAssert());
-  }
-
-  /**
-   * @return the Java source related to current XML.
-   */
-  protected final void printJavaLinesSource() {
-    String[] lines = StringUtils.split(getJavaSourceToAssert(), "\r\n");
-    System.out.println(getLinesForSourceDQ(lines));
-  }
-
-  /**
-   * @return the Java source related to current XML.
-   */
-  protected abstract String getJavaSourceToAssert();
-
-  /**
-   * "Decorates" given lines of source, usually adds required imports.
-   */
-  protected abstract String[] getJavaSource_decorate(String... lines);
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // XML source
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected XmlObjectInfo m_lastObject;
-  protected EditorContext m_lastContext;
-  protected ClassLoader m_lastLoader;
-
-  /**
-   * Asserts that XML document has expected content.
-   */
-  protected final void assertXML(String... lines) {
-    String source = getTestSource(lines);
-    assertEquals(source, m_lastContext.getContent());
-  }
-
-  /**
-   * @return the XML source for parsing and checking in {@link #assertXML(String...)}.
-   */
-  protected final String getTestSource(String... lines) {
-    lines = removeFillerLines(lines);
-    lines = expandSourceLinesShortcuts(lines);
-    lines = getDoubleQuotes(lines);
-    lines = getTestSource_decorate(lines);
-    return getSource(lines);
-  }
-
-  /**
-   * Removes lines which start with "// filler".
-   */
-  protected static String[] removeFillerLines(String... lines) {
-    while (lines.length != 0 && lines[0].startsWith("// filler")) {
-      lines = (String[]) ArrayUtils.remove(lines, 0);
-    }
-    return lines;
-  }
-
-  /**
-   * Allows subclasses perform toolkit specific shortcuts expansions.
-   */
-  protected String[] expandSourceLinesShortcuts(String... lines) {
-    return lines;
-  }
-
-  /**
-   * "Decorates" given lines of XML. By default adds required namespace declarations, see
-   * {@link #getTestSource_namespaces()}.
-   */
-  protected final String[] getTestSource_decorate(String... lines) {
-    // try to find line where name spaces should be inserted
-    for (int i = 0; i < lines.length; i++) {
-      String line = lines[i];
-      if (line.startsWith("<?xml")) {
-        continue;
-      }
-      // prepare position for namespaces
-      int index = StringUtils.indexOfAny(line, " />");
-      if (index > 0) {
-        if (line.charAt(index - 1) == '-') {
-          continue;
-        }
-      }
-      // insert namespaces into line
-      line = getXMLSource_insertNameSpaces_intoGivenLine(line, index);
-      // modify copy
-      lines = lines.clone();
-      lines[i] = line;
-      // done
-      break;
-    }
-    return lines;
-  }
-
-  private String getXMLSource_insertNameSpaces_intoGivenLine(String line, int index) {
-    String ns = getSourceDQ(getTestSource_namespaces());
-    String before = line.substring(0, index);
-    String after = line.substring(index);
-    // if NS end with white space, then remove whitespace in "after" part
-    if (!ns.isEmpty()) {
-      int nsLength = ns.length();
-      char nsLastChar = ns.charAt(nsLength - 1);
-      if (Character.isWhitespace(nsLastChar)) {
-        after = after.trim();
-      }
-    }
-    // done
-    return before + ns + after;
-  }
-
-  /**
-   * @return the namespace declarations to add into test source (using single quotes).
-   */
-  protected abstract String getTestSource_namespaces();
-
-  /**
-   * Prints XML in {@link #m_lastContext}, ready to paste {@link #assertXML(String...)} invocation.
-   */
-  protected void printEditorLinesSource() {
-    StringBuffer buffer = new StringBuffer();
-    // lines
-    String[] lines = StringUtils.split(m_lastContext.getContent(), "\r\n");
-    for (String line : lines) {
-      buffer.append('"');
-      line = StringUtils.replace(line, "\t", "  ");
-      {
-        line = line.replace('"', '\'');
-        buffer.append(StringUtilities.escapeForJavaSource(line));
-      }
-      buffer.append('"');
-      buffer.append(",\n");
-    }
-    // end
-    String result = buffer.toString();
-    result = StringUtils.removeEnd(result, ",\n");
-    {
-      // remove name spaces
-      result = result.replaceAll("\\s*xmlns:*\\w*=\\s*'[^']*'", "");
-      // remove empty lines in root object (after name space in separate lines)
-      {
-        result = result.replaceAll("\"\",\n", "");
-        result = result.replaceAll("\",\n\">\",\n", ">\",\n");
-      }
-      // add filler
-      {
-        String filler = "\"// filler filler filler filler filler\",\n";
-        result = filler + result;
-        result = filler + result;
-      }
-    }
-    System.out.println(result);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Hierarchy
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Prints hierarchy of {@link #m_lastObject}, ready to paste as arguments for
-   * {@link #assertHierarchy(String...)}.
-   */
-  public void printHierarchySource() {
-    printHierarchySource(m_lastObject);
-  }
-
-  /**
-   * Asserts that {@link #m_lastObject} has expected hierarchy.
-   */
-  public void assertHierarchy(String... lines) {
-    String expected = getSourceDQ(lines);
-    // remove "filler"
-    while (expected.startsWith("// filler")) {
-      expected = StringUtils.substringAfter(expected, "\n");
-    }
-    // assert
-    String actual = printHierarchy(m_lastObject);
-    assertEquals(expected, actual);
-  }
-
-  /**
-   * Creates string for hierarchy of {@link ObjectInfo}'s starting from given root.
-   */
-  protected static String printHierarchy(ObjectInfo root) {
-    final StringBuffer buffer = new StringBuffer();
-    root.accept(new ObjectInfoVisitor() {
-      private int m_level;
-
-      @Override
-      public boolean visit(ObjectInfo objectInfo) throws Exception {
-        buffer.append(StringUtils.repeat("\t", m_level));
-        buffer.append(objectInfo.toString());
-        buffer.append("\n");
-        m_level++;
-        return true;
-      }
-
-      @Override
-      public void endVisit(ObjectInfo objectInfo) throws Exception {
-        m_level--;
-      }
-    });
-    return buffer.toString();
-  }
-
-  /**
-   * Creates source for {@link String}'s array for hierarchy of {@link ObjectInfo}'s starting from
-   * given root.
-   */
-  private static void printHierarchySource(ObjectInfo root) {
-    final StringBuffer buffer = new StringBuffer();
-    root.accept(new ObjectInfoVisitor() {
-      private int m_level;
-
-      @Override
-      public boolean visit(ObjectInfo objectInfo) throws Exception {
-        buffer.append('"');
-        buffer.append(StringUtils.repeat("  ", m_level));
-        {
-          String line = objectInfo.toString();
-          line = line.replace('"', '\'');
-          buffer.append(StringUtilities.escapeJava(line));
-        }
-        buffer.append('"');
-        buffer.append(",\n");
-        m_level++;
-        return true;
-      }
-
-      @Override
-      public void endVisit(ObjectInfo objectInfo) throws Exception {
-        m_level--;
-      }
-    });
-    String result = buffer.toString();
-    result = StringUtils.removeEnd(result, ",\n");
-    {
-      String filler = "\"// filler filler filler filler filler\",\n";
-      result = filler + result;
-      result = filler + result;
-    }
-    System.out.println(result);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Refreshes last hierarchy.
-   */
-  protected final void refresh() throws Exception {
-    m_lastObject.refresh();
-  }
-
-  /**
-   * @return {@link XmlObjectInfo} with given value in <code>wbp:name</code> attribute.
-   */
-  @SuppressWarnings("unchecked")
-  protected final <T extends XmlObjectInfo> T getObjectByName(final String name) {
-    final XmlObjectInfo[] result = new XmlObjectInfo[1];
-    m_lastObject.accept(new ObjectInfoVisitor() {
-      @Override
-      public void endVisit(ObjectInfo object) throws Exception {
-        if (object instanceof XmlObjectInfo) {
-          XmlObjectInfo xmlObject = (XmlObjectInfo) object;
-          CreationSupport creationSupport = xmlObject.getCreationSupport();
-          if (!XmlObjectUtils.isImplicit(xmlObject)) {
-            DocumentElement element = creationSupport.getElement();
-            if (name.equals(element.getAttribute("wbp:name"))) {
-              result[0] = xmlObject;
-            }
-          }
-        }
-      }
-    });
-    return (T) result[0];
-  }
-
-  /**
-   * Asserts that {@link #m_lastContext} has no any parse/refresh error or warnings.
-   */
-  protected void assertNoErrors() {
-    // warnings
-    List<EditorWarning> warnings = m_lastContext.getWarnings();
-    if (!warnings.isEmpty()) {
-      for (EditorWarning warning : warnings) {
-        System.out.println("------------------ warning ------------------");
-        System.out.println(warning.getMessage());
-        if (warning.getException() != null) {
-          warning.getException().printStackTrace();
-        }
-      }
-      fail("No warnings expected.");
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Properties
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return sub {@link Property}'s of given Property with {@link IComplexPropertyEditor}.
-   */
-  protected static Property[] getSubProperties(Property property) throws Exception {
-    return ((IComplexPropertyEditor) property.getEditor()).getProperties(property);
-  }
-
-  /**
-   * @return the text from {@link TextDisplayPropertyEditor} for given {@link Property}.
-   */
-  protected static String getPropertyText(Property property) throws Exception {
-    return (String) ReflectionUtils.invokeMethod2(
-        property.getEditor(),
-        "getText",
-        Property.class,
-        property);
-  }
-
-  /**
-   * Set value of {@link ITextValuePropertyEditor} using text.
-   */
-  protected static void setPropertyText(Property property, String text) throws Exception {
-    ReflectionUtils.invokeMethod2(
-        property.getEditor(),
-        "setText",
-        Property.class,
-        String.class,
-        property,
-        text);
-  }
-
-  /**
-   * @return the {@link IClipboardSourceProvider} source from {@link PropertyEditor}.
-   */
-  protected static String getPropertyClipboardSource(Property property) throws Exception {
-    GenericProperty genericProperty = (GenericProperty) property;
-    PropertyEditor propertyEditor = property.getEditor();
-    IClipboardSourceProvider sourceProvider = (IClipboardSourceProvider) propertyEditor;
-    return sourceProvider.getClipboardSource(genericProperty);
-  }
-
-  /**
-   * @return the text of {@link PropertyTooltipTextProvider} that should implement given
-   *         {@link IAdaptable}.
-   */
-  protected static String getPropertyTooltipText(Property property) throws Exception {
-    PropertyTooltipProvider provider = property.getAdapter(PropertyTooltipProvider.class);
-    assertInstanceOf(PropertyTooltipTextProvider.class, provider);
-    PropertyTooltipTextProvider textProvider = (PropertyTooltipTextProvider) provider;
-    return (String) ReflectionUtils.invokeMethod(
-        textProvider,
-        "getText(org.eclipse.wb.internal.core.model.property.Property)",
-        property);
-  }
-
-  /**
-   * @return the text for {@link AbstractTextPropertyEditor}.
-   */
-  public static String getTextEditorText(Property property) throws Exception {
-    PropertyEditor editor = property.getEditor();
-    return (String) ReflectionUtils.invokeMethod(
-        editor,
-        "getEditorText(org.eclipse.wb.internal.core.model.property.Property)",
-        property);
-  }
-
-  /**
-   * Updates {@link Property} by setting text for {@link AbstractTextPropertyEditor}.
-   */
-  public static void setTextEditorText(Property property, String text) throws Exception {
-    PropertyEditor editor = property.getEditor();
-    ReflectionUtils.invokeMethod(
-        editor,
-        "setEditorText(org.eclipse.wb.internal.core.model.property.Property,java.lang.String)",
-        property,
-        text);
-  }
-
-  /**
-   * Activates {@link PropertyEditor}.
-   */
-  protected static void activateProperty(Property property, org.eclipse.swt.graphics.Point location)
-      throws Exception {
-    PropertyEditor propertyEditor = property.getEditor();
-    propertyEditor.activate(null, property, location);
-  }
-
-  /**
-   * Opens dialog of {@link TextDialogPropertyEditor}.
-   */
-  protected static void openPropertyDialog(Property property) throws Exception {
-    ReflectionUtils.invokeMethod(
-        property.getEditor(),
-        "openDialog(org.eclipse.wb.internal.core.model.property.Property)",
-        property);
-  }
-
-  /**
-   * Calls {@link PropertyEditor#doubleClick(Property, org.eclipse.swt.graphics.Point)}.
-   */
-  protected static void doPropertyDoubleClick(Property property, Point location) throws Exception {
-    property.getEditor().doubleClick(property, location != null ? location.getSWTPoint() : null);
-  }
-
-  /**
-   * Asks "null" type from {@link ExpressionAccessor}, to have coverage.
-   */
-  protected static void callExpressionAccessor_getAdapter_withWrongType(Property property) {
-    assertSame(
-        null,
-        ((GenericPropertyImpl) property).getDescription().getAccessor().getAdapter(null));
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Combo property editor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final Shell TEST_COMBO_SHELL = new Shell();
-  private static final CCombo3 TEST_COMBO = new CCombo3(TEST_COMBO_SHELL, SWT.NONE);
-
-  /**
-   * Fill combo with items.
-   */
-  protected static void addComboPropertyItems(Property property) {
-    PropertyEditor propertyEditor = property.getEditor();
-    String signature =
-        "addItems("
-            + "org.eclipse.wb.internal.core.model.property.Property,"
-            + "org.eclipse.wb.core.controls.CCombo3)";
-    TEST_COMBO.removeAll();
-    ReflectionUtils.invokeMethodEx(propertyEditor, signature, property, TEST_COMBO);
-  }
-
-  /**
-   * @return items from combo.
-   */
-  protected static List<String> getComboPropertyItems() {
-    List<String> items = Lists.newArrayList();
-    int itemCount = TEST_COMBO.getItemCount();
-    for (int i = 0; i < itemCount; i++) {
-      items.add(TEST_COMBO.getItem(i));
-    }
-    return items;
-  }
-
-  /**
-   * @return the selection index in combo.
-   */
-  protected static int getComboPropertySelection() {
-    return TEST_COMBO.getSelectionIndex();
-  }
-
-  /**
-   * Sets the selection index in combo, usually to use then
-   * {@link #setComboPropertySelection(Property)} and validate result using
-   * {@link #getComboPropertySelection()}.
-   */
-  protected static void setComboPropertySelection(int index) {
-    TEST_COMBO.select(index);
-  }
-
-  /**
-   * Sets selection which corresponds to the value of {@link Property}.
-   */
-  protected static void setComboPropertySelection(Property property) {
-    PropertyEditor propertyEditor = property.getEditor();
-    String signature =
-        "selectItem("
-            + "org.eclipse.wb.internal.core.model.property.Property,"
-            + "org.eclipse.wb.core.controls.CCombo3)";
-    ReflectionUtils.invokeMethodEx(propertyEditor, signature, property, TEST_COMBO);
-  }
-
-  /**
-   * Simulates user selection of item with given index, updates {@link Property}.
-   */
-  protected static void setComboPropertyValue(Property property, int index) {
-    PropertyEditor propertyEditor = property.getEditor();
-    String signature =
-        "toPropertyEx("
-            + "org.eclipse.wb.internal.core.model.property.Property,"
-            + "org.eclipse.wb.core.controls.CCombo3,"
-            + "int)";
-    ReflectionUtils.invokeMethodEx(propertyEditor, signature, property, TEST_COMBO, index);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Context
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the context menu for {@link ObjectInfo} selection.
-   */
-  public static IMenuManager getContextMenu(ObjectInfo... objectsArray) throws Exception {
-    IMenuManager manager = getDesignerMenuManager();
-    List<ObjectInfo> objects = ImmutableList.copyOf(objectsArray);
-    ObjectInfo object = objectsArray[0];
-    object.getBroadcastObject().addContextMenu(objects, object, manager);
-    return manager;
-  }
-
-  /**
-   * @return the selection actions for empty selection.
-   */
-  public static List<Object> getSelectionActions_noSelection(ObjectInfo root) throws Exception {
-    List<Object> actions = Lists.newArrayList();
-    ImmutableList<ObjectInfo> objects = ImmutableList.<ObjectInfo>of();
-    root.getBroadcastObject().addSelectionActions(objects, actions);
-    return actions;
-  }
-
-  /**
-   * @return the selection actions, displayed on editor toolbar.
-   */
-  public static List<Object> getSelectionActions(ObjectInfo... objectsArray) throws Exception {
-    List<Object> actions = Lists.newArrayList();
-    if (objectsArray.length != 0) {
-      ObjectInfo object = objectsArray[0];
-      List<ObjectInfo> objects = ImmutableList.copyOf(objectsArray);
-      object.getBroadcastObject().addSelectionActions(objects, actions);
-    }
-    return actions;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Life cycle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void setUp() throws Exception {
+		super.setUp();
+		if (m_testProject == null) {
+			do_projectCreate();
+			configureNewProject();
+		}
+	}
+
+	/**
+	 * Configures created project.
+	 */
+	protected abstract void configureNewProject() throws Exception;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Java source
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the Java source.
+	 */
+	protected final String getJavaSource(String... lines) {
+		lines = getDoubleQuotes(lines);
+		lines = getJavaSource_decorate(lines);
+		return getSource(lines);
+	}
+
+	/**
+	 * Asserts that Java source has expected content.
+	 */
+	protected final void assertJava(String... lines) {
+		String source = getJavaSource(lines);
+		assertEquals(source, getJavaSourceToAssert());
+	}
+
+	/**
+	 * @return the Java source related to current XML.
+	 */
+	protected final void printJavaLinesSource() {
+		String[] lines = StringUtils.split(getJavaSourceToAssert(), "\r\n");
+		System.out.println(getLinesForSourceDQ(lines));
+	}
+
+	/**
+	 * @return the Java source related to current XML.
+	 */
+	protected abstract String getJavaSourceToAssert();
+
+	/**
+	 * "Decorates" given lines of source, usually adds required imports.
+	 */
+	protected abstract String[] getJavaSource_decorate(String... lines);
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// XML source
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected XmlObjectInfo m_lastObject;
+	protected EditorContext m_lastContext;
+	protected ClassLoader m_lastLoader;
+
+	/**
+	 * Asserts that XML document has expected content.
+	 */
+	protected final void assertXML(String... lines) {
+		String source = getTestSource(lines);
+		assertEquals(source, m_lastContext.getContent());
+	}
+
+	/**
+	 * @return the XML source for parsing and checking in {@link #assertXML(String...)}.
+	 */
+	protected final String getTestSource(String... lines) {
+		lines = removeFillerLines(lines);
+		lines = expandSourceLinesShortcuts(lines);
+		lines = getDoubleQuotes(lines);
+		lines = getTestSource_decorate(lines);
+		return getSource(lines);
+	}
+
+	/**
+	 * Removes lines which start with "// filler".
+	 */
+	protected static String[] removeFillerLines(String... lines) {
+		while (lines.length != 0 && lines[0].startsWith("// filler")) {
+			lines = (String[]) ArrayUtils.remove(lines, 0);
+		}
+		return lines;
+	}
+
+	/**
+	 * Allows subclasses perform toolkit specific shortcuts expansions.
+	 */
+	protected String[] expandSourceLinesShortcuts(String... lines) {
+		return lines;
+	}
+
+	/**
+	 * "Decorates" given lines of XML. By default adds required namespace declarations, see
+	 * {@link #getTestSource_namespaces()}.
+	 */
+	protected final String[] getTestSource_decorate(String... lines) {
+		// try to find line where name spaces should be inserted
+		for (int i = 0; i < lines.length; i++) {
+			String line = lines[i];
+			if (line.startsWith("<?xml")) {
+				continue;
+			}
+			// prepare position for namespaces
+			int index = StringUtils.indexOfAny(line, " />");
+			if (index > 0) {
+				if (line.charAt(index - 1) == '-') {
+					continue;
+				}
+			}
+			// insert namespaces into line
+			line = getXMLSource_insertNameSpaces_intoGivenLine(line, index);
+			// modify copy
+			lines = lines.clone();
+			lines[i] = line;
+			// done
+			break;
+		}
+		return lines;
+	}
+
+	private String getXMLSource_insertNameSpaces_intoGivenLine(String line, int index) {
+		String ns = getSourceDQ(getTestSource_namespaces());
+		String before = line.substring(0, index);
+		String after = line.substring(index);
+		// if NS end with white space, then remove whitespace in "after" part
+		if (!ns.isEmpty()) {
+			int nsLength = ns.length();
+			char nsLastChar = ns.charAt(nsLength - 1);
+			if (Character.isWhitespace(nsLastChar)) {
+				after = after.trim();
+			}
+		}
+		// done
+		return before + ns + after;
+	}
+
+	/**
+	 * @return the namespace declarations to add into test source (using single quotes).
+	 */
+	protected abstract String getTestSource_namespaces();
+
+	/**
+	 * Prints XML in {@link #m_lastContext}, ready to paste {@link #assertXML(String...)} invocation.
+	 */
+	protected void printEditorLinesSource() {
+		StringBuffer buffer = new StringBuffer();
+		// lines
+		String[] lines = StringUtils.split(m_lastContext.getContent(), "\r\n");
+		for (String line : lines) {
+			buffer.append('"');
+			line = StringUtils.replace(line, "\t", "  ");
+			{
+				line = line.replace('"', '\'');
+				buffer.append(StringUtilities.escapeForJavaSource(line));
+			}
+			buffer.append('"');
+			buffer.append(",\n");
+		}
+		// end
+		String result = buffer.toString();
+		result = StringUtils.removeEnd(result, ",\n");
+		{
+			// remove name spaces
+			result = result.replaceAll("\\s*xmlns:*\\w*=\\s*'[^']*'", "");
+			// remove empty lines in root object (after name space in separate lines)
+			{
+				result = result.replaceAll("\"\",\n", "");
+				result = result.replaceAll("\",\n\">\",\n", ">\",\n");
+			}
+			// add filler
+			{
+				String filler = "\"// filler filler filler filler filler\",\n";
+				result = filler + result;
+				result = filler + result;
+			}
+		}
+		System.out.println(result);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Hierarchy
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Prints hierarchy of {@link #m_lastObject}, ready to paste as arguments for
+	 * {@link #assertHierarchy(String...)}.
+	 */
+	public void printHierarchySource() {
+		printHierarchySource(m_lastObject);
+	}
+
+	/**
+	 * Asserts that {@link #m_lastObject} has expected hierarchy.
+	 */
+	public void assertHierarchy(String... lines) {
+		String expected = getSourceDQ(lines);
+		// remove "filler"
+		while (expected.startsWith("// filler")) {
+			expected = StringUtils.substringAfter(expected, "\n");
+		}
+		// assert
+		String actual = printHierarchy(m_lastObject);
+		assertEquals(expected, actual);
+	}
+
+	/**
+	 * Creates string for hierarchy of {@link ObjectInfo}'s starting from given root.
+	 */
+	protected static String printHierarchy(ObjectInfo root) {
+		final StringBuffer buffer = new StringBuffer();
+		root.accept(new ObjectInfoVisitor() {
+			private int m_level;
+
+			@Override
+			public boolean visit(ObjectInfo objectInfo) throws Exception {
+				buffer.append(StringUtils.repeat("\t", m_level));
+				buffer.append(objectInfo.toString());
+				buffer.append("\n");
+				m_level++;
+				return true;
+			}
+
+			@Override
+			public void endVisit(ObjectInfo objectInfo) throws Exception {
+				m_level--;
+			}
+		});
+		return buffer.toString();
+	}
+
+	/**
+	 * Creates source for {@link String}'s array for hierarchy of {@link ObjectInfo}'s starting from
+	 * given root.
+	 */
+	private static void printHierarchySource(ObjectInfo root) {
+		final StringBuffer buffer = new StringBuffer();
+		root.accept(new ObjectInfoVisitor() {
+			private int m_level;
+
+			@Override
+			public boolean visit(ObjectInfo objectInfo) throws Exception {
+				buffer.append('"');
+				buffer.append(StringUtils.repeat("  ", m_level));
+				{
+					String line = objectInfo.toString();
+					line = line.replace('"', '\'');
+					buffer.append(StringUtilities.escapeJava(line));
+				}
+				buffer.append('"');
+				buffer.append(",\n");
+				m_level++;
+				return true;
+			}
+
+			@Override
+			public void endVisit(ObjectInfo objectInfo) throws Exception {
+				m_level--;
+			}
+		});
+		String result = buffer.toString();
+		result = StringUtils.removeEnd(result, ",\n");
+		{
+			String filler = "\"// filler filler filler filler filler\",\n";
+			result = filler + result;
+			result = filler + result;
+		}
+		System.out.println(result);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Refreshes last hierarchy.
+	 */
+	protected final void refresh() throws Exception {
+		m_lastObject.refresh();
+	}
+
+	/**
+	 * @return {@link XmlObjectInfo} with given value in <code>wbp:name</code> attribute.
+	 */
+	@SuppressWarnings("unchecked")
+	protected final <T extends XmlObjectInfo> T getObjectByName(final String name) {
+		final XmlObjectInfo[] result = new XmlObjectInfo[1];
+		m_lastObject.accept(new ObjectInfoVisitor() {
+			@Override
+			public void endVisit(ObjectInfo object) throws Exception {
+				if (object instanceof XmlObjectInfo) {
+					XmlObjectInfo xmlObject = (XmlObjectInfo) object;
+					CreationSupport creationSupport = xmlObject.getCreationSupport();
+					if (!XmlObjectUtils.isImplicit(xmlObject)) {
+						DocumentElement element = creationSupport.getElement();
+						if (name.equals(element.getAttribute("wbp:name"))) {
+							result[0] = xmlObject;
+						}
+					}
+				}
+			}
+		});
+		return (T) result[0];
+	}
+
+	/**
+	 * Asserts that {@link #m_lastContext} has no any parse/refresh error or warnings.
+	 */
+	protected void assertNoErrors() {
+		// warnings
+		List<EditorWarning> warnings = m_lastContext.getWarnings();
+		if (!warnings.isEmpty()) {
+			for (EditorWarning warning : warnings) {
+				System.out.println("------------------ warning ------------------");
+				System.out.println(warning.getMessage());
+				if (warning.getException() != null) {
+					warning.getException().printStackTrace();
+				}
+			}
+			fail("No warnings expected.");
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Properties
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return sub {@link Property}'s of given Property with {@link IComplexPropertyEditor}.
+	 */
+	protected static Property[] getSubProperties(Property property) throws Exception {
+		return ((IComplexPropertyEditor) property.getEditor()).getProperties(property);
+	}
+
+	/**
+	 * @return the text from {@link TextDisplayPropertyEditor} for given {@link Property}.
+	 */
+	protected static String getPropertyText(Property property) throws Exception {
+		return (String) ReflectionUtils.invokeMethod2(
+				property.getEditor(),
+				"getText",
+				Property.class,
+				property);
+	}
+
+	/**
+	 * Set value of {@link ITextValuePropertyEditor} using text.
+	 */
+	protected static void setPropertyText(Property property, String text) throws Exception {
+		ReflectionUtils.invokeMethod2(
+				property.getEditor(),
+				"setText",
+				Property.class,
+				String.class,
+				property,
+				text);
+	}
+
+	/**
+	 * @return the {@link IClipboardSourceProvider} source from {@link PropertyEditor}.
+	 */
+	protected static String getPropertyClipboardSource(Property property) throws Exception {
+		GenericProperty genericProperty = (GenericProperty) property;
+		PropertyEditor propertyEditor = property.getEditor();
+		IClipboardSourceProvider sourceProvider = (IClipboardSourceProvider) propertyEditor;
+		return sourceProvider.getClipboardSource(genericProperty);
+	}
+
+	/**
+	 * @return the text of {@link PropertyTooltipTextProvider} that should implement given
+	 *         {@link IAdaptable}.
+	 */
+	protected static String getPropertyTooltipText(Property property) throws Exception {
+		PropertyTooltipProvider provider = property.getAdapter(PropertyTooltipProvider.class);
+		assertInstanceOf(PropertyTooltipTextProvider.class, provider);
+		PropertyTooltipTextProvider textProvider = (PropertyTooltipTextProvider) provider;
+		return (String) ReflectionUtils.invokeMethod(
+				textProvider,
+				"getText(org.eclipse.wb.internal.core.model.property.Property)",
+				property);
+	}
+
+	/**
+	 * @return the text for {@link AbstractTextPropertyEditor}.
+	 */
+	public static String getTextEditorText(Property property) throws Exception {
+		PropertyEditor editor = property.getEditor();
+		return (String) ReflectionUtils.invokeMethod(
+				editor,
+				"getEditorText(org.eclipse.wb.internal.core.model.property.Property)",
+				property);
+	}
+
+	/**
+	 * Updates {@link Property} by setting text for {@link AbstractTextPropertyEditor}.
+	 */
+	public static void setTextEditorText(Property property, String text) throws Exception {
+		PropertyEditor editor = property.getEditor();
+		ReflectionUtils.invokeMethod(
+				editor,
+				"setEditorText(org.eclipse.wb.internal.core.model.property.Property,java.lang.String)",
+				property,
+				text);
+	}
+
+	/**
+	 * Activates {@link PropertyEditor}.
+	 */
+	protected static void activateProperty(Property property, org.eclipse.swt.graphics.Point location)
+			throws Exception {
+		PropertyEditor propertyEditor = property.getEditor();
+		propertyEditor.activate(null, property, location);
+	}
+
+	/**
+	 * Opens dialog of {@link TextDialogPropertyEditor}.
+	 */
+	protected static void openPropertyDialog(Property property) throws Exception {
+		ReflectionUtils.invokeMethod(
+				property.getEditor(),
+				"openDialog(org.eclipse.wb.internal.core.model.property.Property)",
+				property);
+	}
+
+	/**
+	 * Calls {@link PropertyEditor#doubleClick(Property, org.eclipse.swt.graphics.Point)}.
+	 */
+	protected static void doPropertyDoubleClick(Property property, Point location) throws Exception {
+		property.getEditor().doubleClick(property, location != null ? location.getSWTPoint() : null);
+	}
+
+	/**
+	 * Asks "null" type from {@link ExpressionAccessor}, to have coverage.
+	 */
+	protected static void callExpressionAccessor_getAdapter_withWrongType(Property property) {
+		assertSame(
+				null,
+				((GenericPropertyImpl) property).getDescription().getAccessor().getAdapter(null));
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Combo property editor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final Shell TEST_COMBO_SHELL = new Shell();
+	private static final CCombo3 TEST_COMBO = new CCombo3(TEST_COMBO_SHELL, SWT.NONE);
+
+	/**
+	 * Fill combo with items.
+	 */
+	protected static void addComboPropertyItems(Property property) {
+		PropertyEditor propertyEditor = property.getEditor();
+		String signature =
+				"addItems("
+						+ "org.eclipse.wb.internal.core.model.property.Property,"
+						+ "org.eclipse.wb.core.controls.CCombo3)";
+		TEST_COMBO.removeAll();
+		ReflectionUtils.invokeMethodEx(propertyEditor, signature, property, TEST_COMBO);
+	}
+
+	/**
+	 * @return items from combo.
+	 */
+	protected static List<String> getComboPropertyItems() {
+		List<String> items = Lists.newArrayList();
+		int itemCount = TEST_COMBO.getItemCount();
+		for (int i = 0; i < itemCount; i++) {
+			items.add(TEST_COMBO.getItem(i));
+		}
+		return items;
+	}
+
+	/**
+	 * @return the selection index in combo.
+	 */
+	protected static int getComboPropertySelection() {
+		return TEST_COMBO.getSelectionIndex();
+	}
+
+	/**
+	 * Sets the selection index in combo, usually to use then
+	 * {@link #setComboPropertySelection(Property)} and validate result using
+	 * {@link #getComboPropertySelection()}.
+	 */
+	protected static void setComboPropertySelection(int index) {
+		TEST_COMBO.select(index);
+	}
+
+	/**
+	 * Sets selection which corresponds to the value of {@link Property}.
+	 */
+	protected static void setComboPropertySelection(Property property) {
+		PropertyEditor propertyEditor = property.getEditor();
+		String signature =
+				"selectItem("
+						+ "org.eclipse.wb.internal.core.model.property.Property,"
+						+ "org.eclipse.wb.core.controls.CCombo3)";
+		ReflectionUtils.invokeMethodEx(propertyEditor, signature, property, TEST_COMBO);
+	}
+
+	/**
+	 * Simulates user selection of item with given index, updates {@link Property}.
+	 */
+	protected static void setComboPropertyValue(Property property, int index) {
+		PropertyEditor propertyEditor = property.getEditor();
+		String signature =
+				"toPropertyEx("
+						+ "org.eclipse.wb.internal.core.model.property.Property,"
+						+ "org.eclipse.wb.core.controls.CCombo3,"
+						+ "int)";
+		ReflectionUtils.invokeMethodEx(propertyEditor, signature, property, TEST_COMBO, index);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Context
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the context menu for {@link ObjectInfo} selection.
+	 */
+	public static IMenuManager getContextMenu(ObjectInfo... objectsArray) throws Exception {
+		IMenuManager manager = getDesignerMenuManager();
+		List<ObjectInfo> objects = ImmutableList.copyOf(objectsArray);
+		ObjectInfo object = objectsArray[0];
+		object.getBroadcastObject().addContextMenu(objects, object, manager);
+		return manager;
+	}
+
+	/**
+	 * @return the selection actions for empty selection.
+	 */
+	public static List<Object> getSelectionActions_noSelection(ObjectInfo root) throws Exception {
+		List<Object> actions = Lists.newArrayList();
+		ImmutableList<ObjectInfo> objects = ImmutableList.<ObjectInfo>of();
+		root.getBroadcastObject().addSelectionActions(objects, actions);
+		return actions;
+	}
+
+	/**
+	 * @return the selection actions, displayed on editor toolbar.
+	 */
+	public static List<Object> getSelectionActions(ObjectInfo... objectsArray) throws Exception {
+		List<Object> actions = Lists.newArrayList();
+		if (objectsArray.length != 0) {
+			ObjectInfo object = objectsArray[0];
+			List<ObjectInfo> objects = ImmutableList.copyOf(objectsArray);
+			object.getBroadcastObject().addSelectionActions(objects, actions);
+		}
+		return actions;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/ActivatorTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/ActivatorTest.java
index 1ef9fcb69..785cf6aaf 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/ActivatorTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/ActivatorTest.java
@@ -30,117 +30,117 @@
  * @author scheglov_ke
  */
 public class ActivatorTest extends DesignerTestCase {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link Activator#getDefault()}.
-   */
-  public void test_getDefault() throws Exception {
-    assertNotNull(Activator.getDefault());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link Activator#getDefault()}.
+	 */
+	public void test_getDefault() throws Exception {
+		assertNotNull(Activator.getDefault());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // getFile()
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link Activator#getFile(String)}.
-   */
-  public void test_getFile() throws Exception {
-    InputStream file = Activator.getFile("plugin.xml");
-    assertNotNull(file);
-    try {
-      String s = IOUtils2.readString(file);
-      assertThat(s.length()).isGreaterThan(1024);
-    } finally {
-      IOUtils.closeQuietly(file);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// getFile()
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link Activator#getFile(String)}.
+	 */
+	public void test_getFile() throws Exception {
+		InputStream file = Activator.getFile("plugin.xml");
+		assertNotNull(file);
+		try {
+			String s = IOUtils2.readString(file);
+			assertThat(s.length()).isGreaterThan(1024);
+		} finally {
+			IOUtils.closeQuietly(file);
+		}
+	}
 
-  /**
-   * Test for {@link Activator#getFile(String)}.
-   */
-  public void test_getFile_bad() throws Exception {
-    try {
-      Activator.getFile("noSuch.file");
-    } catch (Throwable e) {
-      String msg = e.getMessage();
-      assertThat(msg).contains("noSuch.file").contains("org.eclipse.wb.core.xml");
-    }
-  }
+	/**
+	 * Test for {@link Activator#getFile(String)}.
+	 */
+	public void test_getFile_bad() throws Exception {
+		try {
+			Activator.getFile("noSuch.file");
+		} catch (Throwable e) {
+			String msg = e.getMessage();
+			assertThat(msg).contains("noSuch.file").contains("org.eclipse.wb.core.xml");
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // getImage()
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link Activator#getImage(String)}.
-   */
-  public void test_getImage_good() throws Exception {
-    Image image = Activator.getImage("editor_page_xml.png");
-    assertNotNull(image);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// getImage()
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link Activator#getImage(String)}.
+	 */
+	public void test_getImage_good() throws Exception {
+		Image image = Activator.getImage("editor_page_xml.png");
+		assertNotNull(image);
+	}
 
-  /**
-   * Test for {@link Activator#getImage(String)}.
-   */
-  public void test_getImage_bad() throws Exception {
-    try {
-      Activator.getImage("noSuch.png");
-    } catch (Throwable e) {
-      String msg = e.getMessage();
-      assertThat(msg).contains("noSuch.png").contains("org.eclipse.wb.core.xml");
-    }
-  }
+	/**
+	 * Test for {@link Activator#getImage(String)}.
+	 */
+	public void test_getImage_bad() throws Exception {
+		try {
+			Activator.getImage("noSuch.png");
+		} catch (Throwable e) {
+			String msg = e.getMessage();
+			assertThat(msg).contains("noSuch.png").contains("org.eclipse.wb.core.xml");
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // getImageDescriptor()
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link Activator#getImageDescriptor(String)}.
-   */
-  public void test_getImageDescription_good() throws Exception {
-    ImageDescriptor imageDescriptor = Activator.getImageDescriptor("editor_page_xml.png");
-    assertNotNull(imageDescriptor);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// getImageDescriptor()
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link Activator#getImageDescriptor(String)}.
+	 */
+	public void test_getImageDescription_good() throws Exception {
+		ImageDescriptor imageDescriptor = Activator.getImageDescriptor("editor_page_xml.png");
+		assertNotNull(imageDescriptor);
+	}
 
-  /**
-   * Test for {@link Activator#getImageDescriptor(String)}.
-   */
-  public void test_getImageDescription_bad() throws Exception {
-    try {
-      Activator.getImageDescriptor("noSuch.png");
-    } catch (Throwable e) {
-      String msg = e.getMessage();
-      assertThat(msg).contains("noSuch.png").contains("org.eclipse.wb.core.xml");
-    }
-  }
+	/**
+	 * Test for {@link Activator#getImageDescriptor(String)}.
+	 */
+	public void test_getImageDescription_bad() throws Exception {
+		try {
+			Activator.getImageDescriptor("noSuch.png");
+		} catch (Throwable e) {
+			String msg = e.getMessage();
+			assertThat(msg).contains("noSuch.png").contains("org.eclipse.wb.core.xml");
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IExceptionConstants
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Just kick {@link IExceptionConstants} to force its coverage.
-   */
-  public void test_IExceptionConstants() throws Exception {
-    assertThat(IExceptionConstants.__FORCE_EXECUTION).isZero();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IExceptionConstants
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Just kick {@link IExceptionConstants} to force its coverage.
+	 */
+	public void test_IExceptionConstants() throws Exception {
+		assertThat(IExceptionConstants.__FORCE_EXECUTION).isZero();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/AllXmlTests.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/AllXmlTests.java
index 1cf0623e2..08025922a 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/AllXmlTests.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/AllXmlTests.java
@@ -22,10 +22,10 @@
  * @author scheglov_ke
  */
 public class AllXmlTests extends DesignerSuiteTests {
-  public static Test suite() {
-    TestSuite suite = new TestSuite("All XML");
-    suite.addTest(XmlTests.suite());
-    suite.addTest(XwtTests.suite());
-    return suite;
-  }
+	public static Test suite() {
+		TestSuite suite = new TestSuite("All XML");
+		suite.addTest(XmlTests.suite());
+		suite.addTest(XwtTests.suite());
+		return suite;
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/ClassLoadingTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/ClassLoadingTest.java
index 3a8a4fb30..282b7750b 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/ClassLoadingTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/ClassLoadingTest.java
@@ -32,219 +32,219 @@
  * @author scheglov_ke
  */
 public class ClassLoadingTest extends XwtModelTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_installNewBundleWithContributions() throws Exception {
-    TestBundle testBundle = new TestBundle();
-    try {
-      String className = ClassForBundle.class.getName();
-      testBundle.addClass(ClassForBundle.class);
-      testBundle.addExtension(
-          "org.eclipse.wb.core.toolkits",
-          "<toolkit id='org.eclipse.wb.rcp' myAttr='0'/>");
-      testBundle.install();
-      {
-        // classes can be loaded from this "test" Bundle
-        testBundle.getBundle().loadClass(className);
-        // extensions are applied
-        assertTrue(hasToolkitElementWith("myAttr"));
-      }
-    } finally {
-      testBundle.dispose();
-    }
-    assertFalse(hasToolkitElementWith("myAttr"));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_installNewBundleWithContributions() throws Exception {
+		TestBundle testBundle = new TestBundle();
+		try {
+			String className = ClassForBundle.class.getName();
+			testBundle.addClass(ClassForBundle.class);
+			testBundle.addExtension(
+					"org.eclipse.wb.core.toolkits",
+					"<toolkit id='org.eclipse.wb.rcp' myAttr='0'/>");
+			testBundle.install();
+			{
+				// classes can be loaded from this "test" Bundle
+				testBundle.getBundle().loadClass(className);
+				// extensions are applied
+				assertTrue(hasToolkitElementWith("myAttr"));
+			}
+		} finally {
+			testBundle.dispose();
+		}
+		assertFalse(hasToolkitElementWith("myAttr"));
+	}
 
-  /**
-   * Test for using <code>classLoader-bundle</code> to contribute Bundle into toolkit
-   * {@link ClassLoader}.
-   */
-  public void test_useClasspathBundle() throws Exception {
-    TestBundle testBundle = new TestBundle("org.eclipse.wb.tests.testBundle-0");
-    try {
-      String className = ClassForBundle.class.getName();
-      testBundle.addClass(ClassForBundle.class);
-      testBundle.addExtension("org.eclipse.wb.core.toolkits", new String[]{
-          "<toolkit id='org.eclipse.wb.rcp'>",
-          "  <classLoader-bundle bundle='" + testBundle.getId() + "'/>",
-          "</toolkit>"});
-      testBundle.install();
-      {
-        parse("<Shell/>");
-        // ClassForBundle is visible in RCP ClassLoader
-        m_lastLoader.loadClass(className);
-      }
-    } finally {
-      testBundle.dispose();
-    }
-  }
+	/**
+	 * Test for using <code>classLoader-bundle</code> to contribute Bundle into toolkit
+	 * {@link ClassLoader}.
+	 */
+	public void test_useClasspathBundle() throws Exception {
+		TestBundle testBundle = new TestBundle("org.eclipse.wb.tests.testBundle-0");
+		try {
+			String className = ClassForBundle.class.getName();
+			testBundle.addClass(ClassForBundle.class);
+			testBundle.addExtension("org.eclipse.wb.core.toolkits", new String[]{
+					"<toolkit id='org.eclipse.wb.rcp'>",
+					"  <classLoader-bundle bundle='" + testBundle.getId() + "'/>",
+			"</toolkit>"});
+			testBundle.install();
+			{
+				parse("<Shell/>");
+				// ClassForBundle is visible in RCP ClassLoader
+				m_lastLoader.loadClass(className);
+			}
+		} finally {
+			testBundle.dispose();
+		}
+	}
 
-  /**
-   * Test for using <code>classLoader-bundle</code> to contribute Bundle into toolkit
-   * {@link ClassLoader}.
-   * <p>
-   * Namespaces are set so that class is not visible.
-   */
-  public void test_useClasspathBundle_namespaces() throws Exception {
-    TestBundle testBundle = new TestBundle("org.eclipse.wb.tests.testBundle-0");
-    try {
-      String className = ClassForBundle.class.getName();
-      testBundle.addClass(ClassForBundle.class);
-      testBundle.addExtension("org.eclipse.wb.core.toolkits", new String[]{
-          "<toolkit id='org.eclipse.wb.rcp'>",
-          "  <classLoader-bundle bundle='" + testBundle.getId() + "' namespaces='no.such'/>",
-          "</toolkit>"});
-      testBundle.install();
-      {
-        parse("<Shell/>");
-        // ClassForBundle is visible in RCP ClassLoader
-        try {
-          m_lastLoader.loadClass(className);
-          fail();
-        } catch (ClassNotFoundException e) {
-        }
-      }
-    } finally {
-      testBundle.dispose();
-    }
-  }
+	/**
+	 * Test for using <code>classLoader-bundle</code> to contribute Bundle into toolkit
+	 * {@link ClassLoader}.
+	 * <p>
+	 * Namespaces are set so that class is not visible.
+	 */
+	public void test_useClasspathBundle_namespaces() throws Exception {
+		TestBundle testBundle = new TestBundle("org.eclipse.wb.tests.testBundle-0");
+		try {
+			String className = ClassForBundle.class.getName();
+			testBundle.addClass(ClassForBundle.class);
+			testBundle.addExtension("org.eclipse.wb.core.toolkits", new String[]{
+					"<toolkit id='org.eclipse.wb.rcp'>",
+					"  <classLoader-bundle bundle='" + testBundle.getId() + "' namespaces='no.such'/>",
+			"</toolkit>"});
+			testBundle.install();
+			{
+				parse("<Shell/>");
+				// ClassForBundle is visible in RCP ClassLoader
+				try {
+					m_lastLoader.loadClass(className);
+					fail();
+				} catch (ClassNotFoundException e) {
+				}
+			}
+		} finally {
+			testBundle.dispose();
+		}
+	}
 
-  /**
-   * Test for using <code>classLoader-library</code> to contribute JAR into toolkit
-   * {@link ClassLoader}.
-   */
-  public void test_useClasspathLibrary_singleJar() throws Exception {
-    TestBundle testBundle = new TestBundle();
-    try {
-      String className = ClassForBundle.class.getName();
-      testBundle.addJar("myClasses.jar").addClass(ClassForBundle.class).close();
-      testBundle.addExtension("org.eclipse.wb.core.toolkits", new String[]{
-          "<toolkit id='org.eclipse.wb.rcp'>",
-          "  <classLoader-library bundle='" + testBundle.getId() + "' jar='myClasses.jar'/>",
-          "</toolkit>"});
-      testBundle.install();
-      {
-        parse("<Shell/>");
-        // ClassForBundle is visible in RCP ClassLoader
-        m_lastLoader.loadClass(className);
-      }
-    } finally {
-      testBundle.dispose();
-    }
-  }
+	/**
+	 * Test for using <code>classLoader-library</code> to contribute JAR into toolkit
+	 * {@link ClassLoader}.
+	 */
+	public void test_useClasspathLibrary_singleJar() throws Exception {
+		TestBundle testBundle = new TestBundle();
+		try {
+			String className = ClassForBundle.class.getName();
+			testBundle.addJar("myClasses.jar").addClass(ClassForBundle.class).close();
+			testBundle.addExtension("org.eclipse.wb.core.toolkits", new String[]{
+					"<toolkit id='org.eclipse.wb.rcp'>",
+					"  <classLoader-library bundle='" + testBundle.getId() + "' jar='myClasses.jar'/>",
+			"</toolkit>"});
+			testBundle.install();
+			{
+				parse("<Shell/>");
+				// ClassForBundle is visible in RCP ClassLoader
+				m_lastLoader.loadClass(className);
+			}
+		} finally {
+			testBundle.dispose();
+		}
+	}
 
-  /**
-   * Test for using <code>classLoader-library</code> to contribute two JAR's into toolkit
-   * {@link ClassLoader}, where {@link Class} from one JAR references {@link Class} in other JAR.
-   */
-  public void test_useClassLoaderLibrary_toDependentJars() throws Exception {
-    TestBundle testBundle = new TestBundle("org.eclipse.wb.tests.testBundle-1");
-    try {
-      String className = ClassForBundle.class.getName();
-      String className2 = ClassForBundle2.class.getName();
-      testBundle.addJar("myClasses.jar").addClass(ClassForBundle.class).close();
-      testBundle.addJar("myClasses2.jar").addClass(ClassForBundle2.class).close();
-      testBundle.addExtension("org.eclipse.wb.core.toolkits", new String[]{
-          "<toolkit id='org.eclipse.wb.rcp'>",
-          "  <classLoader-library bundle='" + testBundle.getId() + "' jar='myClasses.jar'/>",
-          "  <classLoader-library bundle='" + testBundle.getId() + "' jar='myClasses2.jar'/>",
-          "</toolkit>"});
-      testBundle.install();
-      {
-        parse("<Shell/>");
-        // ClassForBundle & ClassForBundle2 are visible in RCP ClassLoader
-        m_lastLoader.loadClass(className);
-        m_lastLoader.loadClass(className2);
-      }
-    } finally {
-      testBundle.dispose();
-    }
-  }
+	/**
+	 * Test for using <code>classLoader-library</code> to contribute two JAR's into toolkit
+	 * {@link ClassLoader}, where {@link Class} from one JAR references {@link Class} in other JAR.
+	 */
+	public void test_useClassLoaderLibrary_toDependentJars() throws Exception {
+		TestBundle testBundle = new TestBundle("org.eclipse.wb.tests.testBundle-1");
+		try {
+			String className = ClassForBundle.class.getName();
+			String className2 = ClassForBundle2.class.getName();
+			testBundle.addJar("myClasses.jar").addClass(ClassForBundle.class).close();
+			testBundle.addJar("myClasses2.jar").addClass(ClassForBundle2.class).close();
+			testBundle.addExtension("org.eclipse.wb.core.toolkits", new String[]{
+					"<toolkit id='org.eclipse.wb.rcp'>",
+					"  <classLoader-library bundle='" + testBundle.getId() + "' jar='myClasses.jar'/>",
+					"  <classLoader-library bundle='" + testBundle.getId() + "' jar='myClasses2.jar'/>",
+			"</toolkit>"});
+			testBundle.install();
+			{
+				parse("<Shell/>");
+				// ClassForBundle & ClassForBundle2 are visible in RCP ClassLoader
+				m_lastLoader.loadClass(className);
+				m_lastLoader.loadClass(className2);
+			}
+		} finally {
+			testBundle.dispose();
+		}
+	}
 
-  /**
-   * Test for using <code>classLoader-library</code> to contribute two JAR's wrapped in jar-bundle.
-   */
-  public void test_useClassLoaderLibrary_twoDependentJars_packedBundle() throws Exception {
-    TestBundle testBundle = new TestBundle();
-    try {
-      String className = ClassForBundle.class.getName();
-      String className2 = ClassForBundle2.class.getName();
-      testBundle.addJar("myClasses.jar").addClass(ClassForBundle.class).close();
-      testBundle.addJar("myClasses2.jar").addClass(ClassForBundle2.class).close();
-      testBundle.addExtension("org.eclipse.wb.core.toolkits", new String[]{
-          "<toolkit id='org.eclipse.wb.rcp'>",
-          "  <classLoader-library bundle='" + testBundle.getId() + "' jar='myClasses.jar'/>",
-          "  <classLoader-library bundle='" + testBundle.getId() + "' jar='myClasses2.jar'/>",
-          "</toolkit>"});
-      testBundle.install(true);
-      {
-        parse("<Shell/>");
-        // ClassForBundle & ClassForBundle2 are visible in RCP ClassLoader
-        m_lastLoader.loadClass(className);
-        m_lastLoader.loadClass(className2);
-      }
-    } finally {
-      testBundle.dispose();
-    }
-  }
+	/**
+	 * Test for using <code>classLoader-library</code> to contribute two JAR's wrapped in jar-bundle.
+	 */
+	public void test_useClassLoaderLibrary_twoDependentJars_packedBundle() throws Exception {
+		TestBundle testBundle = new TestBundle();
+		try {
+			String className = ClassForBundle.class.getName();
+			String className2 = ClassForBundle2.class.getName();
+			testBundle.addJar("myClasses.jar").addClass(ClassForBundle.class).close();
+			testBundle.addJar("myClasses2.jar").addClass(ClassForBundle2.class).close();
+			testBundle.addExtension("org.eclipse.wb.core.toolkits", new String[]{
+					"<toolkit id='org.eclipse.wb.rcp'>",
+					"  <classLoader-library bundle='" + testBundle.getId() + "' jar='myClasses.jar'/>",
+					"  <classLoader-library bundle='" + testBundle.getId() + "' jar='myClasses2.jar'/>",
+			"</toolkit>"});
+			testBundle.install(true);
+			{
+				parse("<Shell/>");
+				// ClassForBundle & ClassForBundle2 are visible in RCP ClassLoader
+				m_lastLoader.loadClass(className);
+				m_lastLoader.loadClass(className2);
+			}
+		} finally {
+			testBundle.dispose();
+		}
+	}
 
-  /**
-   * There was problem: because of using project {@link ClassLoader} as parent several times, we
-   * returned same resource from {@link IJavaProject} also several times. So, some tweak required
-   * here.
-   */
-  public void test_getResources() throws Exception {
-    setFileContentSrc("test/myFile.txt", "");
-    waitForAutoBuild();
-    //
-    parse("<Shell/>");
-    // only one resource
-    Enumeration<URL> resEnumeration = m_lastLoader.getResources("test/myFile.txt");
-    Iterator<URL> resIterator = Iterators.forEnumeration(resEnumeration);
-    assertEquals(1, Iterators.size(resIterator));
-  }
+	/**
+	 * There was problem: because of using project {@link ClassLoader} as parent several times, we
+	 * returned same resource from {@link IJavaProject} also several times. So, some tweak required
+	 * here.
+	 */
+	public void test_getResources() throws Exception {
+		setFileContentSrc("test/myFile.txt", "");
+		waitForAutoBuild();
+		//
+		parse("<Shell/>");
+		// only one resource
+		Enumeration<URL> resEnumeration = m_lastLoader.getResources("test/myFile.txt");
+		Iterator<URL> resIterator = Iterators.forEnumeration(resEnumeration);
+		assertEquals(1, Iterators.size(resIterator));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static boolean hasToolkitElementWith(String attribute) {
-    List<IConfigurationElement> toolkitElements =
-        DescriptionHelper.getToolkitElements("org.eclipse.wb.rcp");
-    for (IConfigurationElement toolkitElement : toolkitElements) {
-      if (toolkitElement.getAttribute(attribute) != null) {
-        return true;
-      }
-    }
-    return false;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static boolean hasToolkitElementWith(String attribute) {
+		List<IConfigurationElement> toolkitElements =
+				DescriptionHelper.getToolkitElements("org.eclipse.wb.rcp");
+		for (IConfigurationElement toolkitElement : toolkitElements) {
+			if (toolkitElement.getAttribute(attribute) != null) {
+				return true;
+			}
+		}
+		return false;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ClassForBundle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * We use this class to put it into new {@link Bundle}.
-   */
-  public static class ClassForBundle {
-  }
-  /**
-   * We use this class to check referencing other classes, from separate JAR's.
-   */
-  public static class ClassForBundle2 extends ClassForBundle {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ClassForBundle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * We use this class to put it into new {@link Bundle}.
+	 */
+	public static class ClassForBundle {
+	}
+	/**
+	 * We use this class to check referencing other classes, from separate JAR's.
+	 */
+	public static class ClassForBundle2 extends ClassForBundle {
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/NoopConfigurablePropertyEditor.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/NoopConfigurablePropertyEditor.java
index 377675f2b..c756e4fe6 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/NoopConfigurablePropertyEditor.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/NoopConfigurablePropertyEditor.java
@@ -23,24 +23,24 @@
  * @author mitin_aa
  */
 public class NoopConfigurablePropertyEditor extends TextDisplayPropertyEditor
-    implements
-      IConfigurablePropertyObject {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getText(Property property) throws Exception {
-    return null;
-  }
+implements
+IConfigurablePropertyObject {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getText(Property property) throws Exception {
+		return null;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IConfigurablePropertyObject
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void configure(EditorContext context, Map<String, Object> parameters) throws Exception {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IConfigurablePropertyObject
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void configure(EditorContext context, Map<String, Object> parameters) throws Exception {
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/XmlTests.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/XmlTests.java
index 7c4674189..1b83de3ad 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/XmlTests.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/XmlTests.java
@@ -25,15 +25,15 @@
  * @author scheglov_ke
  */
 public class XmlTests extends DesignerSuiteTests {
-  public static Test suite() {
-    TestSuite suite = new TestSuite("org.eclipse.wb.xml");
-    suite.addTest(org.eclipse.wb.tests.designer.core.util.xml.XmlTests.suite());
-    suite.addTest(createSingleSuite(ActivatorTest.class));
-    suite.addTest(createSingleSuite(ClassLoadingTest.class));
-    suite.addTest(ModelTests.suite());
-    suite.addTest(XmlEditorTests.suite());
-    suite.addTest(GefTests.suite());
-    suite.addTest(PaletteTests.suite());
-    return suite;
-  }
+	public static Test suite() {
+		TestSuite suite = new TestSuite("org.eclipse.wb.xml");
+		suite.addTest(org.eclipse.wb.tests.designer.core.util.xml.XmlTests.suite());
+		suite.addTest(createSingleSuite(ActivatorTest.class));
+		suite.addTest(createSingleSuite(ClassLoadingTest.class));
+		suite.addTest(ModelTests.suite());
+		suite.addTest(XmlEditorTests.suite());
+		suite.addTest(GefTests.suite());
+		suite.addTest(PaletteTests.suite());
+		return suite;
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/editor/AbstractXmlEditorTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/editor/AbstractXmlEditorTest.java
index 222a8f7fb..887e14795 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/editor/AbstractXmlEditorTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/editor/AbstractXmlEditorTest.java
@@ -27,50 +27,50 @@
  * @author scheglov_ke
  */
 public class AbstractXmlEditorTest extends XwtGefTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_getAdapter_StructuredTextEditor() throws Exception {
-    openEditor("<Shell/>");
-    // we can access it
-    Object adapter = m_designerEditor.getAdapter(StructuredTextEditor.class);
-    assertSame(m_sourcePage.getXmlEditor(), adapter);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_getAdapter_StructuredTextEditor() throws Exception {
+		openEditor("<Shell/>");
+		// we can access it
+		Object adapter = m_designerEditor.getAdapter(StructuredTextEditor.class);
+		assertSame(m_sourcePage.getXmlEditor(), adapter);
+	}
 
-  public void test_doSaveAs() throws Exception {
-    openEditor("<Shell/>");
-    // disabled
-    assertEquals(false, m_designerEditor.isSaveAsAllowed());
-    // ignored
-    m_designerEditor.doSaveAs();
-  }
+	public void test_doSaveAs() throws Exception {
+		openEditor("<Shell/>");
+		// disabled
+		assertEquals(false, m_designerEditor.isSaveAsAllowed());
+		// ignored
+		m_designerEditor.doSaveAs();
+	}
 
-  /**
-   * Our editor accepts only {@link IFileEditorInput}.
-   */
-  public void test_init_notFile() throws Exception {
-    AbstractXmlEditor editor = new AbstractXmlEditor() {
-      @Override
-      protected XmlDesignPage createDesignPage() {
-        return null;
-      }
-    };
-    try {
-      editor.init(null, new NullEditorInput());
-      fail();
-    } catch (PartInitException e) {
-      assertThat(e.getMessage()).contains("IFileEditorInput");
-    }
-  }
+	/**
+	 * Our editor accepts only {@link IFileEditorInput}.
+	 */
+	public void test_init_notFile() throws Exception {
+		AbstractXmlEditor editor = new AbstractXmlEditor() {
+			@Override
+			protected XmlDesignPage createDesignPage() {
+				return null;
+			}
+		};
+		try {
+			editor.init(null, new NullEditorInput());
+			fail();
+		} catch (PartInitException e) {
+			assertThat(e.getMessage()).contains("IFileEditorInput");
+		}
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/editor/AbstractXmlGefTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/editor/AbstractXmlGefTest.java
index 683901fa4..f482f810f 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/editor/AbstractXmlGefTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/editor/AbstractXmlGefTest.java
@@ -51,302 +51,302 @@
  * @author scheglov_ke
  */
 public abstract class AbstractXmlGefTest extends AbstractXmlObjectTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Life cycle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void setUp() throws Exception {
-    super.setUp();
-    waitEventLoop(1);
-    System.setProperty(DesignerPalette.FLAG_NO_PALETTE, "true");
-    addExceptionsListener();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Life cycle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void setUp() throws Exception {
+		super.setUp();
+		waitEventLoop(1);
+		System.setProperty(DesignerPalette.FLAG_NO_PALETTE, "true");
+		addExceptionsListener();
+	}
 
-  @Override
-  protected void tearDown() throws Exception {
-    System.clearProperty(DesignerPalette.FLAG_NO_PALETTE);
-    waitEventLoop(0);
-    TestUtils.closeAllEditors();
-    waitEventLoop(0);
-    // check for exceptions
-    {
-      removeExceptionsListener();
-      assertNoLoggedExceptions();
-    }
-    // continue
-    waitEventLoop(0);
-    super.tearDown();
-  }
+	@Override
+	protected void tearDown() throws Exception {
+		System.clearProperty(DesignerPalette.FLAG_NO_PALETTE);
+		waitEventLoop(0);
+		TestUtils.closeAllEditors();
+		waitEventLoop(0);
+		// check for exceptions
+		{
+			removeExceptionsListener();
+			assertNoLoggedExceptions();
+		}
+		// continue
+		waitEventLoop(0);
+		super.tearDown();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Open "Design" and fetch
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected AbstractXmlEditor m_designerEditor;
-  protected SourcePage m_sourcePage;
-  protected XmlDesignPage m_designPage;
-  protected DesignPageActions m_designPageActions;
-  protected DesignerPalette m_designerPalette;
-  protected PaletteComposite m_paletteComposite;
-  protected IComponentsTree m_componentsTree;
-  protected PropertyTable m_propertyTable;
-  protected PaletteManager m_paletteManager;
-  // GEF
-  protected XmlObjectInfo m_contentObject;
-  protected GraphicalEditPart m_contentEditPart;
-  // canvas event sender
-  protected GraphicalViewer m_viewerCanvas;
-  protected GraphicalRobot canvas;
-  // tree event sender
-  protected TreeViewer m_viewerTree;
-  protected TreeRobot tree;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Open "Design" and fetch
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected AbstractXmlEditor m_designerEditor;
+	protected SourcePage m_sourcePage;
+	protected XmlDesignPage m_designPage;
+	protected DesignPageActions m_designPageActions;
+	protected DesignerPalette m_designerPalette;
+	protected PaletteComposite m_paletteComposite;
+	protected IComponentsTree m_componentsTree;
+	protected PropertyTable m_propertyTable;
+	protected PaletteManager m_paletteManager;
+	// GEF
+	protected XmlObjectInfo m_contentObject;
+	protected GraphicalEditPart m_contentEditPart;
+	// canvas event sender
+	protected GraphicalViewer m_viewerCanvas;
+	protected GraphicalRobot canvas;
+	// tree event sender
+	protected TreeViewer m_viewerTree;
+	protected TreeRobot tree;
 
-  /**
-   * Opens given {@link IFile} in new editor and shows "Design" page.
-   */
-  protected final void openDesign(IFile file) throws Exception {
-    openEditor(file);
-    openDesignPage();
-    fetchContentFields();
-  }
+	/**
+	 * Opens given {@link IFile} in new editor and shows "Design" page.
+	 */
+	protected final void openDesign(IFile file) throws Exception {
+		openEditor(file);
+		openDesignPage();
+		fetchContentFields();
+	}
 
-  /**
-   * Opens {@link AbstractXmlEditor} with given {@link IFile}.
-   */
-  protected final void openEditor(IFile file) throws Exception {
-    // prepare MultiPageEditor
-    IWorkbenchPage activePage = DesignerPlugin.getActiveWorkbenchWindow().getActivePage();
-    m_designerEditor = (AbstractXmlEditor) IDE.openEditor(activePage, file, getEditorID());
-    assertNotNull(m_designerEditor);
-    // maximize editor
-    activePage.toggleZoom(activePage.getActivePartReference());
-    waitEventLoop(0);
-    // fetch DesignPage parts
-    fetchDesignViewers();
-  }
+	/**
+	 * Opens {@link AbstractXmlEditor} with given {@link IFile}.
+	 */
+	protected final void openEditor(IFile file) throws Exception {
+		// prepare MultiPageEditor
+		IWorkbenchPage activePage = DesignerPlugin.getActiveWorkbenchWindow().getActivePage();
+		m_designerEditor = (AbstractXmlEditor) IDE.openEditor(activePage, file, getEditorID());
+		assertNotNull(m_designerEditor);
+		// maximize editor
+		activePage.toggleZoom(activePage.getActivePartReference());
+		waitEventLoop(0);
+		// fetch DesignPage parts
+		fetchDesignViewers();
+	}
 
-  /**
-   * @return the ID of {@link AbstractXmlEditor} to open.
-   */
-  protected abstract String getEditorID();
+	/**
+	 * @return the ID of {@link AbstractXmlEditor} to open.
+	 */
+	protected abstract String getEditorID();
 
-  /**
-   * Opens "Source" page of current {@link AbstractXmlEditor}.
-   */
-  protected final void openSourcePage() throws Exception {
-    m_designerEditor.showSource();
-    waitEventLoop(0);
-  }
+	/**
+	 * Opens "Source" page of current {@link AbstractXmlEditor}.
+	 */
+	protected final void openSourcePage() throws Exception {
+		m_designerEditor.showSource();
+		waitEventLoop(0);
+	}
 
-  /**
-   * Opens "Design" page of current {@link AbstractXmlEditor}.
-   */
-  protected final void openDesignPage() throws Exception {
-    m_designerEditor.showDesign();
-    waitEventLoop(0);
-  }
+	/**
+	 * Opens "Design" page of current {@link AbstractXmlEditor}.
+	 */
+	protected final void openDesignPage() throws Exception {
+		m_designerEditor.showDesign();
+		waitEventLoop(0);
+	}
 
-  /**
-   * Fills design field - edit part viewers, etc. Creating robots.<br>
-   * We should do this after opening "Design" page.
-   */
-  private void fetchDesignViewers() {
-    m_sourcePage = m_designerEditor.getSourcePage();
-    // prepare DesignPage and DesignComposite
-    m_designPage = m_designerEditor.getDesignPage();
-    Object designComposite = ReflectionUtils.getFieldObject(m_designPage, "m_designComposite");
-    // DesignComposite parts
-    m_designPageActions =
-        (DesignPageActions) ReflectionUtils.getFieldObject(designComposite, "m_pageActions");
-    m_designerPalette =
-        (DesignerPalette) ReflectionUtils.getFieldObject(designComposite, "m_designerPalette");
-    m_paletteComposite = (PaletteComposite) m_designerPalette.getControl();
-    // prepare GraphicalViewer
-    {
-      m_viewerCanvas =
-          (GraphicalViewer) ReflectionUtils.getFieldObject(designComposite, "m_viewer");
-      assertNotNull(m_viewerCanvas);
-      // prepare robot
-      canvas = new GraphicalRobot(m_viewerCanvas);
-    }
-    // prepare TreeViewer
-    {
-      Object componentsComposite =
-          ReflectionUtils.getFieldObject(designComposite, "m_componentsComposite");
-      Object treePage = ReflectionUtils.getFieldObject(componentsComposite, "m_treePage");
-      m_viewerTree = (TreeViewer) ReflectionUtils.getFieldObject(treePage, "m_viewer");
-      assertNotNull(m_viewerTree);
-      // prepare robot
-      tree = new TreeRobot(m_viewerTree);
-    }
-  }
+	/**
+	 * Fills design field - edit part viewers, etc. Creating robots.<br>
+	 * We should do this after opening "Design" page.
+	 */
+	private void fetchDesignViewers() {
+		m_sourcePage = m_designerEditor.getSourcePage();
+		// prepare DesignPage and DesignComposite
+		m_designPage = m_designerEditor.getDesignPage();
+		Object designComposite = ReflectionUtils.getFieldObject(m_designPage, "m_designComposite");
+		// DesignComposite parts
+		m_designPageActions =
+				(DesignPageActions) ReflectionUtils.getFieldObject(designComposite, "m_pageActions");
+		m_designerPalette =
+				(DesignerPalette) ReflectionUtils.getFieldObject(designComposite, "m_designerPalette");
+		m_paletteComposite = (PaletteComposite) m_designerPalette.getControl();
+		// prepare GraphicalViewer
+		{
+			m_viewerCanvas =
+					(GraphicalViewer) ReflectionUtils.getFieldObject(designComposite, "m_viewer");
+			assertNotNull(m_viewerCanvas);
+			// prepare robot
+			canvas = new GraphicalRobot(m_viewerCanvas);
+		}
+		// prepare TreeViewer
+		{
+			Object componentsComposite =
+					ReflectionUtils.getFieldObject(designComposite, "m_componentsComposite");
+			Object treePage = ReflectionUtils.getFieldObject(componentsComposite, "m_treePage");
+			m_viewerTree = (TreeViewer) ReflectionUtils.getFieldObject(treePage, "m_viewer");
+			assertNotNull(m_viewerTree);
+			// prepare robot
+			tree = new TreeRobot(m_viewerTree);
+		}
+	}
 
-  /**
-   * Fills content field - {@link #m_contentEditPart}, etc.
-   * <p>
-   * We should do this after opening "Design" page and after undo/redo.
-   */
-  protected void fetchContentFields() {
-    m_contentEditPart = (GraphicalEditPart) m_viewerCanvas.getRootContainer().getContent();
-    if (m_contentEditPart == null) {
-      return;
-    }
-    m_contentObject = (XmlObjectInfo) m_contentEditPart.getModel();
-    m_lastObject = m_contentObject;
-    m_lastContext = m_lastObject.getContext();
-    m_lastLoader = m_lastContext.getClassLoader();
-    {
-      UiContext uiContext = new UiContext();
-      uiContext.useShell(DesignerPlugin.getShell().getText());
-      m_propertyTable = uiContext.findFirstWidget(PropertyTable.class);
-    }
-    // DesignPageSite
-    {
-      DesignPageSite designPageSite = DesignPageSite.Helper.getSite(m_contentObject);
-      m_componentsTree = designPageSite.getComponentTree();
-    }
-    // PaletteManager
-    m_paletteManager =
-        (PaletteManager) ReflectionUtils.getFieldObject(m_designerPalette, "m_manager");
-  }
+	/**
+	 * Fills content field - {@link #m_contentEditPart}, etc.
+	 * <p>
+	 * We should do this after opening "Design" page and after undo/redo.
+	 */
+	protected void fetchContentFields() {
+		m_contentEditPart = (GraphicalEditPart) m_viewerCanvas.getRootContainer().getContent();
+		if (m_contentEditPart == null) {
+			return;
+		}
+		m_contentObject = (XmlObjectInfo) m_contentEditPart.getModel();
+		m_lastObject = m_contentObject;
+		m_lastContext = m_lastObject.getContext();
+		m_lastLoader = m_lastContext.getClassLoader();
+		{
+			UiContext uiContext = new UiContext();
+			uiContext.useShell(DesignerPlugin.getShell().getText());
+			m_propertyTable = uiContext.findFirstWidget(PropertyTable.class);
+		}
+		// DesignPageSite
+		{
+			DesignPageSite designPageSite = DesignPageSite.Helper.getSite(m_contentObject);
+			m_componentsTree = designPageSite.getComponentTree();
+		}
+		// PaletteManager
+		m_paletteManager =
+				(PaletteManager) ReflectionUtils.getFieldObject(m_designerPalette, "m_manager");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Actions access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the "undo" action.
-   */
-  protected final IAction getUndoAction() {
-    IActionBars actionBars = m_designerEditor.getEditorSite().getActionBars();
-    return actionBars.getGlobalActionHandler(ActionFactory.UNDO.getId());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Actions access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the "undo" action.
+	 */
+	protected final IAction getUndoAction() {
+		IActionBars actionBars = m_designerEditor.getEditorSite().getActionBars();
+		return actionBars.getGlobalActionHandler(ActionFactory.UNDO.getId());
+	}
 
-  /**
-   * @return the "redo" action.
-   */
-  protected final IAction getRedoAction() {
-    IActionBars actionBars = m_designerEditor.getEditorSite().getActionBars();
-    return actionBars.getGlobalActionHandler(ActionFactory.REDO.getId());
-  }
+	/**
+	 * @return the "redo" action.
+	 */
+	protected final IAction getRedoAction() {
+		IActionBars actionBars = m_designerEditor.getEditorSite().getActionBars();
+		return actionBars.getGlobalActionHandler(ActionFactory.REDO.getId());
+	}
 
-  /**
-   * @return the "delete" action.
-   */
-  protected final IAction getDeleteAction() {
-    IActionBars actionBars = m_designerEditor.getEditorSite().getActionBars();
-    return actionBars.getGlobalActionHandler(ActionFactory.DELETE.getId());
-  }
+	/**
+	 * @return the "delete" action.
+	 */
+	protected final IAction getDeleteAction() {
+		IActionBars actionBars = m_designerEditor.getEditorSite().getActionBars();
+		return actionBars.getGlobalActionHandler(ActionFactory.DELETE.getId());
+	}
 
-  /**
-   * @return the "cut" action.
-   */
-  protected final IAction getCutAction() {
-    IActionBars actionBars = m_designerEditor.getEditorSite().getActionBars();
-    return actionBars.getGlobalActionHandler(ActionFactory.CUT.getId());
-  }
+	/**
+	 * @return the "cut" action.
+	 */
+	protected final IAction getCutAction() {
+		IActionBars actionBars = m_designerEditor.getEditorSite().getActionBars();
+		return actionBars.getGlobalActionHandler(ActionFactory.CUT.getId());
+	}
 
-  /**
-   * @return the "copy" action.
-   */
-  protected final IAction getCopyAction() {
-    IActionBars actionBars = m_designerEditor.getEditorSite().getActionBars();
-    return actionBars.getGlobalActionHandler(ActionFactory.COPY.getId());
-  }
+	/**
+	 * @return the "copy" action.
+	 */
+	protected final IAction getCopyAction() {
+		IActionBars actionBars = m_designerEditor.getEditorSite().getActionBars();
+		return actionBars.getGlobalActionHandler(ActionFactory.COPY.getId());
+	}
 
-  /**
-   * @return the "paste" action.
-   */
-  protected final IAction getPasteAction() {
-    IActionBars actionBars = m_designerEditor.getEditorSite().getActionBars();
-    return actionBars.getGlobalActionHandler(ActionFactory.PASTE.getId());
-  }
+	/**
+	 * @return the "paste" action.
+	 */
+	protected final IAction getPasteAction() {
+		IActionBars actionBars = m_designerEditor.getEditorSite().getActionBars();
+		return actionBars.getGlobalActionHandler(ActionFactory.PASTE.getId());
+	}
 
-  /**
-   * Selects single object and then uses Copy/Paste actions.
-   */
-  protected final void doCopyPaste(Object object) {
-    // copy
-    {
-      // select "javaInfo"
-      canvas.select(object);
-      // do copy
-      IAction copyAction = getCopyAction();
-      assertTrue(copyAction.isEnabled());
-      copyAction.run();
-    }
-    // paste
-    {
-      IAction pasteAction = getPasteAction();
-      assertTrue(pasteAction.isEnabled());
-      pasteAction.run();
-    }
-  }
+	/**
+	 * Selects single object and then uses Copy/Paste actions.
+	 */
+	protected final void doCopyPaste(Object object) {
+		// copy
+		{
+			// select "javaInfo"
+			canvas.select(object);
+			// do copy
+			IAction copyAction = getCopyAction();
+			assertTrue(copyAction.isEnabled());
+			copyAction.run();
+		}
+		// paste
+		{
+			IAction pasteAction = getPasteAction();
+			assertTrue(pasteAction.isEnabled());
+			pasteAction.run();
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Asserts selection range in "XML" editor.
-   */
-  protected final void assertXMLSelection(int expectedOffset, int expectedLength) {
-    ISelectionProvider selectionProvider = m_sourcePage.getXmlEditor().getSelectionProvider();
-    ITextSelection selection = (ITextSelection) selectionProvider.getSelection();
-    assertEquals(expectedOffset, selection.getOffset());
-    assertEquals(expectedLength, selection.getLength());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Asserts selection range in "XML" editor.
+	 */
+	protected final void assertXMLSelection(int expectedOffset, int expectedLength) {
+		ISelectionProvider selectionProvider = m_sourcePage.getXmlEditor().getSelectionProvider();
+		ITextSelection selection = (ITextSelection) selectionProvider.getSelection();
+		assertEquals(expectedOffset, selection.getOffset());
+		assertEquals(expectedLength, selection.getLength());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GEF Tools
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Loads {@link CreationTool} for creating component with given class name.
-   */
-  protected final <T extends XmlObjectInfo> T loadCreationTool(String componentClassName)
-      throws Exception {
-    return loadCreationTool(componentClassName, null);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GEF Tools
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Loads {@link CreationTool} for creating component with given class name.
+	 */
+	protected final <T extends XmlObjectInfo> T loadCreationTool(String componentClassName)
+			throws Exception {
+		return loadCreationTool(componentClassName, null);
+	}
 
-  /**
-   * Loads {@link CreationTool} for creating component with given class name.
-   */
-  @SuppressWarnings("unchecked")
-  protected final <T extends XmlObjectInfo> T loadCreationTool(String componentClassName,
-      String creationId) throws Exception {
-    // prepare new component
-    XmlObjectInfo newComponent;
-    {
-      newComponent =
-          XmlObjectUtils.createObject(
-              m_lastContext,
-              componentClassName,
-              new ElementCreationSupport(creationId));
-      newComponent = XmlObjectUtils.getWrapped(newComponent);
-      newComponent.putArbitraryValue(XmlObjectInfo.FLAG_MANUAL_COMPONENT, Boolean.TRUE);
-    }
-    // load CreationTool
-    final XmlObjectInfo finalNewComponent = newComponent;
-    ICreationFactory factory = new ICreationFactory() {
-      @Override
-      public void activate() {
-      }
+	/**
+	 * Loads {@link CreationTool} for creating component with given class name.
+	 */
+	@SuppressWarnings("unchecked")
+	protected final <T extends XmlObjectInfo> T loadCreationTool(String componentClassName,
+			String creationId) throws Exception {
+		// prepare new component
+		XmlObjectInfo newComponent;
+		{
+			newComponent =
+					XmlObjectUtils.createObject(
+							m_lastContext,
+							componentClassName,
+							new ElementCreationSupport(creationId));
+			newComponent = XmlObjectUtils.getWrapped(newComponent);
+			newComponent.putArbitraryValue(XmlObjectInfo.FLAG_MANUAL_COMPONENT, Boolean.TRUE);
+		}
+		// load CreationTool
+		final XmlObjectInfo finalNewComponent = newComponent;
+		ICreationFactory factory = new ICreationFactory() {
+			@Override
+			public void activate() {
+			}
 
-      @Override
-      public Object getNewObject() {
-        return finalNewComponent;
-      }
-    };
-    CreationTool creationTool = new CreationTool(factory);
-    m_viewerCanvas.getEditDomain().setActiveTool(creationTool);
-    // return component that will be added
-    return (T) newComponent;
-  }
+			@Override
+			public Object getNewObject() {
+				return finalNewComponent;
+			}
+		};
+		CreationTool creationTool = new CreationTool(factory);
+		m_viewerCanvas.getEditDomain().setActiveTool(creationTool);
+		// return component that will be added
+		return (T) newComponent;
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/editor/CopyActionTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/editor/CopyActionTest.java
index 05e7ce137..e72592489 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/editor/CopyActionTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/editor/CopyActionTest.java
@@ -28,174 +28,174 @@
  * @author scheglov_ke
  */
 public class CopyActionTest extends XwtGefTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * "Copy" action is disabled if no selection.
-   */
-  public void test_noSelection() throws Exception {
-    openEditor("<Shell/>");
-    // prepare "Copy" action
-    IAction copyAction = getCopyAction();
-    // no selection - disabled action
-    canvas.select();
-    assertFalse(copyAction.isEnabled());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * "Copy" action is disabled if no selection.
+	 */
+	public void test_noSelection() throws Exception {
+		openEditor("<Shell/>");
+		// prepare "Copy" action
+		IAction copyAction = getCopyAction();
+		// no selection - disabled action
+		canvas.select();
+		assertFalse(copyAction.isEnabled());
+	}
 
-  /**
-   * "Copy" action is disabled if no selection.
-   */
-  public void test_notXMLObject_EditPart() throws Exception {
-    XmlObjectInfo shell = openEditor("<Shell/>");
-    // add artificial EditPart
-    EditPart myEditPart;
-    {
-      ObjectInfo myObject = new TestObjectInfo();
-      shell.addChild(myObject);
-      myEditPart = new TreeEditPart() {
-      };
-      myEditPart.setModel(myObject);
-      ReflectionUtils.invokeMethod(
-          tree.getEditPart(shell),
-          "addChild(org.eclipse.wb.gef.core.EditPart,int)",
-          myEditPart,
-          0);
-    }
-    // prepare "Copy" action
-    IAction copyAction = getCopyAction();
-    // no selection - disabled action
-    tree.select(myEditPart);
-    assertFalse(copyAction.isEnabled());
-  }
+	/**
+	 * "Copy" action is disabled if no selection.
+	 */
+	public void test_notXMLObject_EditPart() throws Exception {
+		XmlObjectInfo shell = openEditor("<Shell/>");
+		// add artificial EditPart
+		EditPart myEditPart;
+		{
+			ObjectInfo myObject = new TestObjectInfo();
+			shell.addChild(myObject);
+			myEditPart = new TreeEditPart() {
+			};
+			myEditPart.setModel(myObject);
+			ReflectionUtils.invokeMethod(
+					tree.getEditPart(shell),
+					"addChild(org.eclipse.wb.gef.core.EditPart,int)",
+					myEditPart,
+					0);
+		}
+		// prepare "Copy" action
+		IAction copyAction = getCopyAction();
+		// no selection - disabled action
+		tree.select(myEditPart);
+		assertFalse(copyAction.isEnabled());
+	}
 
-  /**
-   * "This" component can not be copied.
-   */
-  public void test_thisSelection() throws Exception {
-    XmlObjectInfo shell = openEditor("<Shell/>");
-    // prepare "Copy" action
-    IAction copyAction = getCopyAction();
-    // "this" selected - disabled action
-    canvas.select(shell);
-    assertFalse(copyAction.isEnabled());
-  }
+	/**
+	 * "This" component can not be copied.
+	 */
+	public void test_thisSelection() throws Exception {
+		XmlObjectInfo shell = openEditor("<Shell/>");
+		// prepare "Copy" action
+		IAction copyAction = getCopyAction();
+		// "this" selected - disabled action
+		canvas.select(shell);
+		assertFalse(copyAction.isEnabled());
+	}
 
-  /**
-   * Test for copy/paste single component.
-   */
-  public void test_copySingle() throws Exception {
-    openEditor(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <RowLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button' text='Button'/>",
-        "</Shell>");
-    XmlObjectInfo button = getObjectByName("button");
-    // select "button"
-    canvas.select(button);
-    // copy "button"
-    {
-      IAction copyAction = getCopyAction();
-      assertTrue(copyAction.isEnabled());
-      copyAction.run();
-    }
-    // paste
-    {
-      IAction pasteAction = getPasteAction();
-      assertTrue(pasteAction.isEnabled());
-      pasteAction.run();
-      // do paste
-      {
-        canvas.target(button).outX(10).inY(10).move();
-        canvas.click();
-      }
-      assertXML(
-          "// filler filler filler filler filler",
-          "// filler filler filler filler filler",
-          "<Shell>",
-          "  <Shell.layout>",
-          "    <RowLayout/>",
-          "  </Shell.layout>",
-          "  <Button wbp:name='button' text='Button'/>",
-          "  <Button text='Button'/>",
-          "</Shell>");
-    }
-  }
+	/**
+	 * Test for copy/paste single component.
+	 */
+	public void test_copySingle() throws Exception {
+		openEditor(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <RowLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button' text='Button'/>",
+				"</Shell>");
+		XmlObjectInfo button = getObjectByName("button");
+		// select "button"
+		canvas.select(button);
+		// copy "button"
+		{
+			IAction copyAction = getCopyAction();
+			assertTrue(copyAction.isEnabled());
+			copyAction.run();
+		}
+		// paste
+		{
+			IAction pasteAction = getPasteAction();
+			assertTrue(pasteAction.isEnabled());
+			pasteAction.run();
+			// do paste
+			{
+				canvas.target(button).outX(10).inY(10).move();
+				canvas.click();
+			}
+			assertXML(
+					"// filler filler filler filler filler",
+					"// filler filler filler filler filler",
+					"<Shell>",
+					"  <Shell.layout>",
+					"    <RowLayout/>",
+					"  </Shell.layout>",
+					"  <Button wbp:name='button' text='Button'/>",
+					"  <Button text='Button'/>",
+					"</Shell>");
+		}
+	}
 
-  /**
-   * If container and its child are selected, then only container should be copied, it will copy
-   * child automatically.
-   */
-  public void test_copyParentAndItsChild() throws Exception {
-    openEditor(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <RowLayout/>",
-        "  </Shell.layout>",
-        "  <Composite wbp:name='composite'>",
-        "    <Composite.layout>",
-        "      <FillLayout/>",
-        "    </Composite.layout>",
-        "    <Button wbp:name='button'/>",
-        "  </Composite>",
-        "</Shell>");
-    XmlObjectInfo composite = getObjectByName("composite");
-    XmlObjectInfo button = getObjectByName("button");
-    // copy "composite" and "button"
-    {
-      canvas.select(composite, button);
-      // do copy
-      IAction copyAction = getCopyAction();
-      assertTrue(copyAction.isEnabled());
-      copyAction.run();
-    }
-    // paste
-    {
-      IAction pasteAction = getPasteAction();
-      assertTrue(pasteAction.isEnabled());
-      pasteAction.run();
-      // do paste
-      {
-        canvas.target(composite).outX(10).inY(10).move();
-        canvas.click();
-      }
-      assertXML(
-          "// filler filler filler filler filler",
-          "// filler filler filler filler filler",
-          "<Shell>",
-          "  <Shell.layout>",
-          "    <RowLayout/>",
-          "  </Shell.layout>",
-          "  <Composite wbp:name='composite'>",
-          "    <Composite.layout>",
-          "      <FillLayout/>",
-          "    </Composite.layout>",
-          "    <Button wbp:name='button'/>",
-          "  </Composite>",
-          "  <Composite>",
-          "    <Composite.layout>",
-          "      <FillLayout/>",
-          "    </Composite.layout>",
-          "    <Button/>",
-          "  </Composite>",
-          "</Shell>");
-    }
-  }
+	/**
+	 * If container and its child are selected, then only container should be copied, it will copy
+	 * child automatically.
+	 */
+	public void test_copyParentAndItsChild() throws Exception {
+		openEditor(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <RowLayout/>",
+				"  </Shell.layout>",
+				"  <Composite wbp:name='composite'>",
+				"    <Composite.layout>",
+				"      <FillLayout/>",
+				"    </Composite.layout>",
+				"    <Button wbp:name='button'/>",
+				"  </Composite>",
+				"</Shell>");
+		XmlObjectInfo composite = getObjectByName("composite");
+		XmlObjectInfo button = getObjectByName("button");
+		// copy "composite" and "button"
+		{
+			canvas.select(composite, button);
+			// do copy
+			IAction copyAction = getCopyAction();
+			assertTrue(copyAction.isEnabled());
+			copyAction.run();
+		}
+		// paste
+		{
+			IAction pasteAction = getPasteAction();
+			assertTrue(pasteAction.isEnabled());
+			pasteAction.run();
+			// do paste
+			{
+				canvas.target(composite).outX(10).inY(10).move();
+				canvas.click();
+			}
+			assertXML(
+					"// filler filler filler filler filler",
+					"// filler filler filler filler filler",
+					"<Shell>",
+					"  <Shell.layout>",
+					"    <RowLayout/>",
+					"  </Shell.layout>",
+					"  <Composite wbp:name='composite'>",
+					"    <Composite.layout>",
+					"      <FillLayout/>",
+					"    </Composite.layout>",
+					"    <Button wbp:name='button'/>",
+					"  </Composite>",
+					"  <Composite>",
+					"    <Composite.layout>",
+					"      <FillLayout/>",
+					"    </Composite.layout>",
+					"    <Button/>",
+					"  </Composite>",
+					"</Shell>");
+		}
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/editor/CutActionTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/editor/CutActionTest.java
index 075433273..bd5d44add 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/editor/CutActionTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/editor/CutActionTest.java
@@ -22,83 +22,83 @@
  * @author scheglov_ke
  */
 public class CutActionTest extends XwtGefTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * "Cut" action is disabled if no selection.
-   */
-  public void test_noSelection() throws Exception {
-    openEditor("<Shell/>");
-    // prepare "Cut" action
-    IAction cutAction = getCutAction();
-    // no selection - disabled action
-    canvas.select();
-    assertFalse(cutAction.isEnabled());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * "Cut" action is disabled if no selection.
+	 */
+	public void test_noSelection() throws Exception {
+		openEditor("<Shell/>");
+		// prepare "Cut" action
+		IAction cutAction = getCutAction();
+		// no selection - disabled action
+		canvas.select();
+		assertFalse(cutAction.isEnabled());
+	}
 
-  /**
-   * "This" component can not be copied or deleted.
-   */
-  public void test_thisSelection() throws Exception {
-    XmlObjectInfo shell = openEditor("<Shell/>");
-    // prepare "Cut" action
-    IAction cutAction = getCutAction();
-    // "this" selected - disabled action
-    canvas.select(shell);
-    assertFalse(cutAction.isEnabled());
-  }
+	/**
+	 * "This" component can not be copied or deleted.
+	 */
+	public void test_thisSelection() throws Exception {
+		XmlObjectInfo shell = openEditor("<Shell/>");
+		// prepare "Cut" action
+		IAction cutAction = getCutAction();
+		// "this" selected - disabled action
+		canvas.select(shell);
+		assertFalse(cutAction.isEnabled());
+	}
 
-  /**
-   * Test for cut/paste single component.
-   */
-  public void test_cutSingle() throws Exception {
-    XmlObjectInfo shell =
-        openEditor(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <RowLayout/>",
-            "  </Shell.layout>",
-            "  <Button wbp:name='button' text='Button'/>",
-            "</Shell>");
-    XmlObjectInfo button = getObjectByName("button");
-    // select "button"
-    canvas.select(button);
-    // cut
-    {
-      IAction cutAction = getCutAction();
-      assertTrue(cutAction.isEnabled());
-      cutAction.run();
-      assertXML(
-          "// filler filler filler filler filler",
-          "// filler filler filler filler filler",
-          "<Shell>",
-          "  <Shell.layout>",
-          "    <RowLayout/>",
-          "  </Shell.layout>",
-          "</Shell>");
-    }
-    // paste
-    {
-      IAction pasteAction = getPasteAction();
-      assertTrue(pasteAction.isEnabled());
-      pasteAction.run();
-      // do paste
-      canvas.moveTo(shell, 10, 10);
-      canvas.click();
-      assertXML(
-          "// filler filler filler filler filler",
-          "// filler filler filler filler filler",
-          "<Shell>",
-          "  <Shell.layout>",
-          "    <RowLayout/>",
-          "  </Shell.layout>",
-          "  <Button text='Button'/>",
-          "</Shell>");
-    }
-  }
+	/**
+	 * Test for cut/paste single component.
+	 */
+	public void test_cutSingle() throws Exception {
+		XmlObjectInfo shell =
+				openEditor(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <RowLayout/>",
+						"  </Shell.layout>",
+						"  <Button wbp:name='button' text='Button'/>",
+						"</Shell>");
+		XmlObjectInfo button = getObjectByName("button");
+		// select "button"
+		canvas.select(button);
+		// cut
+		{
+			IAction cutAction = getCutAction();
+			assertTrue(cutAction.isEnabled());
+			cutAction.run();
+			assertXML(
+					"// filler filler filler filler filler",
+					"// filler filler filler filler filler",
+					"<Shell>",
+					"  <Shell.layout>",
+					"    <RowLayout/>",
+					"  </Shell.layout>",
+					"</Shell>");
+		}
+		// paste
+		{
+			IAction pasteAction = getPasteAction();
+			assertTrue(pasteAction.isEnabled());
+			pasteAction.run();
+			// do paste
+			canvas.moveTo(shell, 10, 10);
+			canvas.click();
+			assertXML(
+					"// filler filler filler filler filler",
+					"// filler filler filler filler filler",
+					"<Shell>",
+					"  <Shell.layout>",
+					"    <RowLayout/>",
+					"  </Shell.layout>",
+					"  <Button text='Button'/>",
+					"</Shell>");
+		}
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/editor/DeleteActionTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/editor/DeleteActionTest.java
index 2f9a26916..89d69fdd5 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/editor/DeleteActionTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/editor/DeleteActionTest.java
@@ -22,83 +22,83 @@
  * @author scheglov_ke
  */
 public class DeleteActionTest extends XwtGefTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * We can delete even "root" component, but this works as clearing it.
-   */
-  public void test_canRootComponent() throws Exception {
-    XmlObjectInfo shell =
-        openEditor(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<Shell text='My text'>",
-            "  <Button wbp:name='button'/>",
-            "</Shell>");
-    // select "shell"
-    canvas.select(shell);
-    // delete "shell"
-    IAction deleteAction = getDeleteAction();
-    assertTrue(deleteAction.isEnabled());
-    deleteAction.run();
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell text='My text'/>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * We can delete even "root" component, but this works as clearing it.
+	 */
+	public void test_canRootComponent() throws Exception {
+		XmlObjectInfo shell =
+				openEditor(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<Shell text='My text'>",
+						"  <Button wbp:name='button'/>",
+						"</Shell>");
+		// select "shell"
+		canvas.select(shell);
+		// delete "shell"
+		IAction deleteAction = getDeleteAction();
+		assertTrue(deleteAction.isEnabled());
+		deleteAction.run();
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell text='My text'/>");
+	}
 
-  public void test_deleteSingleComponent() throws Exception {
-    openEditor(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    // select "button"
-    XmlObjectInfo button = getObjectByName("button");
-    canvas.select(button);
-    // delete "button"
-    IAction deleteAction = getDeleteAction();
-    assertTrue(deleteAction.isEnabled());
-    deleteAction.run();
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell/>");
-  }
+	public void test_deleteSingleComponent() throws Exception {
+		openEditor(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		// select "button"
+		XmlObjectInfo button = getObjectByName("button");
+		canvas.select(button);
+		// delete "button"
+		IAction deleteAction = getDeleteAction();
+		assertTrue(deleteAction.isEnabled());
+		deleteAction.run();
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell/>");
+	}
 
-  public void test_deleteComponent_andItsParent() throws Exception {
-    openEditor(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Composite wbp:name='composite'>",
-        "    <Button wbp:name='button'/>",
-        "  </Composite>",
-        "</Shell>");
-    // select "composite" and "button"
-    XmlObjectInfo composite = getObjectByName("composite");
-    XmlObjectInfo button = getObjectByName("button");
-    canvas.select(composite, button);
-    // delete "button"
-    IAction deleteAction = getDeleteAction();
-    assertTrue(deleteAction.isEnabled());
-    deleteAction.run();
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell/>");
-  }
+	public void test_deleteComponent_andItsParent() throws Exception {
+		openEditor(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Composite wbp:name='composite'>",
+				"    <Button wbp:name='button'/>",
+				"  </Composite>",
+				"</Shell>");
+		// select "composite" and "button"
+		XmlObjectInfo composite = getObjectByName("composite");
+		XmlObjectInfo button = getObjectByName("button");
+		canvas.select(composite, button);
+		// delete "button"
+		IAction deleteAction = getDeleteAction();
+		assertTrue(deleteAction.isEnabled());
+		deleteAction.run();
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell/>");
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/editor/DesignContextMenuProviderTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/editor/DesignContextMenuProviderTest.java
index 16e31e08a..1a46192e0 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/editor/DesignContextMenuProviderTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/editor/DesignContextMenuProviderTest.java
@@ -27,146 +27,146 @@
  * @author scheglov_ke
  */
 public class DesignContextMenuProviderTest extends XwtGefTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test that context menu exists for "tree" and "canvas".
-   */
-  public void test_hasMenu() throws Exception {
-    openEditor(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell/>");
-    assertHasContextMenu(m_viewerTree);
-    assertHasContextMenu(m_viewerCanvas);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test that context menu exists for "tree" and "canvas".
+	 */
+	public void test_hasMenu() throws Exception {
+		openEditor(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell/>");
+		assertHasContextMenu(m_viewerTree);
+		assertHasContextMenu(m_viewerCanvas);
+	}
 
-  public void test_noSelection() throws Exception {
-    openEditor(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell/>");
-    // no selection, so not actions
-    IAction action = getContextMenuAction("Refresh");
-    assertNull(action);
-  }
+	public void test_noSelection() throws Exception {
+		openEditor(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell/>");
+		// no selection, so not actions
+		IAction action = getContextMenuAction("Refresh");
+		assertNull(action);
+	}
 
-  public void test_refreshAction() throws Exception {
-    XmlObjectInfo shell =
-        openEditor(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<Shell/>");
-    canvas.select(shell);
-    // run "Refresh" action
-    IAction action = getContextMenuAction("Refresh");
-    assertNotNull(action);
-    action.run();
-    // assert that refresh was performed
-    fetchContentFields();
-    assertNotSame(shell, m_lastObject);
-  }
+	public void test_refreshAction() throws Exception {
+		XmlObjectInfo shell =
+				openEditor(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<Shell/>");
+		canvas.select(shell);
+		// run "Refresh" action
+		IAction action = getContextMenuAction("Refresh");
+		assertNotNull(action);
+		action.run();
+		// assert that refresh was performed
+		fetchContentFields();
+		assertNotSame(shell, m_lastObject);
+	}
 
-  public void test_testAction() throws Exception {
-    XmlObjectInfo shell =
-        openEditor(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<Shell/>");
-    canvas.select(shell);
-    // run "Test" action
-    IAction action = getContextMenuAction("Test/Preview...");
-    assertNotNull(action);
-  }
+	public void test_testAction() throws Exception {
+		XmlObjectInfo shell =
+				openEditor(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<Shell/>");
+		canvas.select(shell);
+		// run "Test" action
+		IAction action = getContextMenuAction("Test/Preview...");
+		assertNotNull(action);
+	}
 
-  public void test_deleteAction() throws Exception {
-    openEditor(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <RowLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    // select "button"
-    XmlObjectInfo button = getObjectByName("button");
-    canvas.select(button);
-    // run "Delete" action
-    IAction action = getContextMenuAction("Delete");
-    assertNotNull(action);
-    action.run();
-    // assert that "button" was deleted
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <RowLayout/>",
-        "  </Shell.layout>",
-        "</Shell>");
-  }
+	public void test_deleteAction() throws Exception {
+		openEditor(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <RowLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		// select "button"
+		XmlObjectInfo button = getObjectByName("button");
+		canvas.select(button);
+		// run "Delete" action
+		IAction action = getContextMenuAction("Delete");
+		assertNotNull(action);
+		action.run();
+		// assert that "button" was deleted
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <RowLayout/>",
+				"  </Shell.layout>",
+				"</Shell>");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tree
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_contentMenuInTree() throws Exception {
-    XmlObjectInfo shell =
-        openEditor(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<Shell/>");
-    canvas.select(shell);
-    // run "Refresh" action
-    IAction action = getContextMenuAction(m_viewerTree, "Refresh");
-    assertNotNull(action);
-    action.run();
-    // assert that refresh was performed
-    fetchContentFields();
-    assertNotSame(shell, m_lastObject);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tree
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_contentMenuInTree() throws Exception {
+		XmlObjectInfo shell =
+				openEditor(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<Shell/>");
+		canvas.select(shell);
+		// run "Refresh" action
+		IAction action = getContextMenuAction(m_viewerTree, "Refresh");
+		assertNotNull(action);
+		action.run();
+		// assert that refresh was performed
+		fetchContentFields();
+		assertNotSame(shell, m_lastObject);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static void assertHasContextMenu(AbstractEditPartViewer viewer) {
-    Menu menu = viewer.getControl().getMenu();
-    assertNotNull(menu);
-    assertFalse(menu.isDisposed());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static void assertHasContextMenu(AbstractEditPartViewer viewer) {
+		Menu menu = viewer.getControl().getMenu();
+		assertNotNull(menu);
+		assertFalse(menu.isDisposed());
+	}
 
-  /**
-   * @return the {@link IAction} from context menu of canvas.
-   */
-  private IAction getContextMenuAction(String text) throws Exception {
-    return getContextMenuAction(m_viewerCanvas, text);
-  }
+	/**
+	 * @return the {@link IAction} from context menu of canvas.
+	 */
+	private IAction getContextMenuAction(String text) throws Exception {
+		return getContextMenuAction(m_viewerCanvas, text);
+	}
 
-  /**
-   * @return the {@link IAction} from context menu of {@link IEditPartViewer}.
-   */
-  private IAction getContextMenuAction(IEditPartViewer viewer, String text) throws Exception {
-    MenuManager contextMenu = (MenuManager) ReflectionUtils.getFieldObject(viewer, "m_contextMenu");
-    ReflectionUtils.invokeMethod(
-        contextMenu,
-        "fireAboutToShow(org.eclipse.jface.action.IMenuManager)",
-        contextMenu);
-    return findChildAction(contextMenu, text);
-  }
+	/**
+	 * @return the {@link IAction} from context menu of {@link IEditPartViewer}.
+	 */
+	private IAction getContextMenuAction(IEditPartViewer viewer, String text) throws Exception {
+		MenuManager contextMenu = (MenuManager) ReflectionUtils.getFieldObject(viewer, "m_contextMenu");
+		ReflectionUtils.invokeMethod(
+				contextMenu,
+				"fireAboutToShow(org.eclipse.jface.action.IMenuManager)",
+				contextMenu);
+		return findChildAction(contextMenu, text);
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/editor/DirectTextPropertyEditPolicyTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/editor/DirectTextPropertyEditPolicyTest.java
index 23b3d0fc7..8f7cb0d2e 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/editor/DirectTextPropertyEditPolicyTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/editor/DirectTextPropertyEditPolicyTest.java
@@ -25,103 +25,103 @@
  * @author scheglov_ke
  */
 public class DirectTextPropertyEditPolicyTest extends XwtGefTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_activateManually() throws Exception {
-    CompositeInfo shell = openEditor("<Shell/>");
-    // do edit
-    canvas.performDirectEdit(shell, "New text");
-    assertXML("<Shell text='New text'/>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_activateManually() throws Exception {
+		CompositeInfo shell = openEditor("<Shell/>");
+		// do edit
+		canvas.performDirectEdit(shell, "New text");
+		assertXML("<Shell text='New text'/>");
+	}
 
-  /**
-   * When we perform UNDO, or dispose hierarchy using any other way, we should cancel direct edit.
-   * <p>
-   * https://bugs.eclipse.org/bugs/show_bug.cgi?id=351282
-   */
-  public void test_activateAndUndo() throws Exception {
-    CompositeInfo shell = openEditor("<Shell/>");
-    // drop new Button
-    XmlObjectInfo newButton = loadButton();
-    canvas.moveTo(shell, 0.5, 0.5).click();
-    // begin direct edit
-    canvas.assertSelection(newButton);
-    canvas.beginDirectEdit();
-    // perform UNDO
-    getUndoAction().run();
-  }
+	/**
+	 * When we perform UNDO, or dispose hierarchy using any other way, we should cancel direct edit.
+	 * <p>
+	 * https://bugs.eclipse.org/bugs/show_bug.cgi?id=351282
+	 */
+	public void test_activateAndUndo() throws Exception {
+		CompositeInfo shell = openEditor("<Shell/>");
+		// drop new Button
+		XmlObjectInfo newButton = loadButton();
+		canvas.moveTo(shell, 0.5, 0.5).click();
+		// begin direct edit
+		canvas.assertSelection(newButton);
+		canvas.beginDirectEdit();
+		// perform UNDO
+		getUndoAction().run();
+	}
 
-  public void test_activateForNew() throws Exception {
-    CompositeInfo shell =
-        openEditor(
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <RowLayout/>",
-            "  </Shell.layout>",
-            "</Shell>");
-    //
-    IPreferenceStore preferences = shell.getDescription().getToolkit().getPreferences();
-    preferences.setValue(IPreferenceConstants.P_GENERAL_DIRECT_EDIT_AFTER_ADD, true);
-    try {
-      // drop new Button
-      loadCreationTool("org.eclipse.swt.widgets.Button");
-      canvas.moveTo(shell, 100, 100).click();
-      // set new text
-      canvas.animateDirectEdit("New text");
-      assertXML(
-          "// filler filler filler filler filler",
-          "<Shell>",
-          "  <Shell.layout>",
-          "    <RowLayout/>",
-          "  </Shell.layout>",
-          "  <Button text='New text'/>",
-          "</Shell>");
-    } finally {
-      preferences.setValue(IPreferenceConstants.P_GENERAL_DIRECT_EDIT_AFTER_ADD, false);
-    }
-  }
+	public void test_activateForNew() throws Exception {
+		CompositeInfo shell =
+				openEditor(
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <RowLayout/>",
+						"  </Shell.layout>",
+						"</Shell>");
+		//
+		IPreferenceStore preferences = shell.getDescription().getToolkit().getPreferences();
+		preferences.setValue(IPreferenceConstants.P_GENERAL_DIRECT_EDIT_AFTER_ADD, true);
+		try {
+			// drop new Button
+			loadCreationTool("org.eclipse.swt.widgets.Button");
+			canvas.moveTo(shell, 100, 100).click();
+			// set new text
+			canvas.animateDirectEdit("New text");
+			assertXML(
+					"// filler filler filler filler filler",
+					"<Shell>",
+					"  <Shell.layout>",
+					"    <RowLayout/>",
+					"  </Shell.layout>",
+					"  <Button text='New text'/>",
+					"</Shell>");
+		} finally {
+			preferences.setValue(IPreferenceConstants.P_GENERAL_DIRECT_EDIT_AFTER_ADD, false);
+		}
+	}
 
-  public void test_usePropertyPath() throws Exception {
-    prepareMyComponent(new String[]{
-        "// filler filler filler filler filler",
-        "public void setTitle(String title) {",
-        "}"}, new String[]{
-        "<parameters>",
-        "  <parameter name='directEdit.x-property'>title</parameter>",
-        "</parameters>"});
-    //
-    openEditor(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <t:MyComponent wbp:name='control'/>",
-        "</Shell>");
-    ControlInfo control = getObjectByName("control");
-    // do edit
-    canvas.performDirectEdit(control, "New title");
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <t:MyComponent wbp:name='control' title='New title'/>",
-        "</Shell>");
-  }
+	public void test_usePropertyPath() throws Exception {
+		prepareMyComponent(new String[]{
+				"// filler filler filler filler filler",
+				"public void setTitle(String title) {",
+		"}"}, new String[]{
+				"<parameters>",
+				"  <parameter name='directEdit.x-property'>title</parameter>",
+		"</parameters>"});
+		//
+		openEditor(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <t:MyComponent wbp:name='control'/>",
+				"</Shell>");
+		ControlInfo control = getObjectByName("control");
+		// do edit
+		canvas.performDirectEdit(control, "New title");
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <t:MyComponent wbp:name='control' title='New title'/>",
+				"</Shell>");
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/editor/EditorLayoutTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/editor/EditorLayoutTest.java
index 6dc06c984..9aad151de 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/editor/EditorLayoutTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/editor/EditorLayoutTest.java
@@ -47,454 +47,454 @@
  * @author scheglov_ke
  */
 public class EditorLayoutTest extends XwtGefTest {
-  private static final int SYNC_DELAY = 250;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Life cycle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void tearDown() throws Exception {
-    super.tearDown();
-    {
-      IPreferenceStore preferences = DesignerPlugin.getPreferences();
-      preferences.setToDefault(IPreferenceConstants.P_EDITOR_LAYOUT);
-      preferences.setToDefault(IPreferenceConstants.P_EDITOR_LAYOUT_SYNC_DELAY);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Pages mode, "Source" first.
-   */
-  public void test_pagesSource() throws Exception {
-    setEditorLayout(IPreferenceConstants.V_EDITOR_LAYOUT_PAGES_SOURCE);
-    openEditor0("<Shell/>");
-    // "Source" ... "Design" order
-    assertSourceDesignOrder(true);
-    // "Source" is active, not parsed
-    {
-      fetchContentFields();
-      assertNull(m_contentObject);
-    }
-    // open "Design", parsing happens
-    {
-      openDesignPage();
-      assertParsed();
-    }
-  }
-
-  /**
-   * Pages mode, "Design" first.
-   */
-  public void test_pagesDesign() throws Exception {
-    setEditorLayout(IPreferenceConstants.V_EDITOR_LAYOUT_PAGES_DESIGN);
-    openEditor0("<Shell/>");
-    // "Design" ... "Source" order
-    assertSourceDesignOrder(false);
-    // "Design" page is active, parsing already done
-    assertParsed();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Split mode
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Split mode, horizontal, "Source" first.
-   */
-  public void test_splitHorizontalSource() throws Exception {
-    setEditorLayout(IPreferenceConstants.V_EDITOR_LAYOUT_SPLIT_HORIZONTAL_SOURCE);
-    openEditor0("<Shell/>");
-    // ask pages
-    {
-      assertEquals(2, getMultiPageCount());
-      // "Source" is active
-      assertEquals(0, m_designerEditor.getActivePage());
-      // ask controls
-      assertSame(m_sourcePage.getControl(), getMultiControl(0));
-      assertSame(m_designPage.getControl(), getMultiControl(1));
-      // ask editors
-      assertSame(m_sourcePage.getXmlEditor(), getMultiEditor(0));
-      assertSame(null, getMultiEditor(1));
-    }
-    // "Source" control is before "Design" control
-    assertSourceDesignOrder(true);
-    assertSplitOrientation(true);
-    // always parsed in "split"
-    assertParsed();
-    // ask "active page" for "Design"
-    {
-      // click "Design"
-      {
-        EventSender eventSender = new EventSender(m_viewerCanvas.getControl());
-        eventSender.moveTo(100, 100);
-        eventSender.click();
-      }
-      // it is "0" index tab, but we emulate "1" as if there is still "Source" page
-      assertEquals(1, m_designerEditor.getActivePage());
-    }
-  }
-
-  /**
-   * Split mode, horizontal, "Design" first.
-   */
-  public void test_splitHorizontalDesign() throws Exception {
-    setEditorLayout(IPreferenceConstants.V_EDITOR_LAYOUT_SPLIT_HORIZONTAL_DESIGN);
-    openEditor0("<Shell/>");
-    // ask pages
-    {
-      assertEquals(2, getMultiPageCount());
-      // "Source" is active
-      assertEquals(1, m_designerEditor.getActivePage());
-      // ask controls
-      assertSame(m_designPage.getControl(), getMultiControl(0));
-      assertSame(m_sourcePage.getControl(), getMultiControl(1));
-      // ask editors
-      assertSame(null, getMultiEditor(0));
-      assertSame(m_sourcePage.getXmlEditor(), getMultiEditor(1));
-    }
-    // "Design" control is before "Source" control
-    assertSourceDesignOrder(false);
-    assertSplitOrientation(true);
-    // always parsed in "split"
-    assertParsed();
-  }
-
-  /**
-   * Split mode, vertical, "Source" first.
-   */
-  public void test_splitVerticalSource() throws Exception {
-    setEditorLayout(IPreferenceConstants.V_EDITOR_LAYOUT_SPLIT_VERTICAL_SOURCE);
-    openEditor0("<Shell/>");
-    // "Source" control is before "Design" control
-    assertSourceDesignOrder(true);
-    assertSplitOrientation(false);
-    // always parsed in "split"
-    assertParsed();
-  }
-
-  /**
-   * Split mode, vertical, "Design" first.
-   */
-  public void test_splitVerticalDesign() throws Exception {
-    setEditorLayout(IPreferenceConstants.V_EDITOR_LAYOUT_SPLIT_VERTICAL_DESIGN);
-    openEditor0("<Shell/>");
-    // "Design" control is before "Source" control
-    assertSourceDesignOrder(false);
-    assertSplitOrientation(false);
-    // always parsed in "split"
-    assertParsed();
-  }
-
-  /**
-   * Split mode, vertical, "Source" first. Try to show different pages.
-   */
-  public void test_splitVerticalSource_showPages() throws Exception {
-    setEditorLayout(IPreferenceConstants.V_EDITOR_LAYOUT_SPLIT_VERTICAL_SOURCE);
-    openEditor0("<Shell/>");
-    // initially "Source" is active
-    assertEquals(0, m_designerEditor.getActivePage());
-    // show pages
-    {
-      // show "Design"
-      m_designerEditor.showDesign();
-      assertEquals(1, m_designerEditor.getActivePage());
-      // show "Source"
-      m_designerEditor.showSource();
-      assertEquals(0, m_designerEditor.getActivePage());
-    }
-    // switch pages
-    {
-      // switch "Source" -> "Design"
-      m_designerEditor.switchSourceDesign();
-      assertEquals(1, m_designerEditor.getActivePage());
-      // switch "Design" -> "Source"
-      m_designerEditor.switchSourceDesign();
-      assertEquals(0, m_designerEditor.getActivePage());
-    }
-  }
-
-  /**
-   * Asserts that split is done horizontally or vertically.
-   */
-  private void assertSplitOrientation(boolean horizontal) {
-    Control sourceControl = m_sourcePage.getControl();
-    SashForm sashForm = (SashForm) sourceControl.getParent().getParent();
-    int sashStyle = sashForm.getStyle();
-    int expected = horizontal ? SWT.HORIZONTAL : SWT.VERTICAL;
-    assertEquals(expected, sashStyle & expected);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Custom pages
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static class MyXmlEditorPageFactory implements IXmlEditorPageFactory {
-    @Override
-    public void createPages(AbstractXmlEditor editor, List<IXmlEditorPage> pages) {
-      pages.add(new MyXmlEditorPage());
-    }
-  }
-  public static class MyXmlEditorPage extends XmlEditorPage {
-    private Button m_button;
-
-    @Override
-    public Control createControl(Composite parent) {
-      m_button = new Button(parent, SWT.NONE);
-      return m_button;
-    }
-
-    @Override
-    public Control getControl() {
-      return m_button;
-    }
-
-    @Override
-    public String getName() {
-      return "Custom";
-    }
-
-    @Override
-    public Image getImage() {
-      return null;
-    }
-  }
-
-  /**
-   * Split mode, vertical, "Source" first.
-   */
-  public void test_splitVerticalSource_customPage() throws Exception {
-    setEditorLayout(IPreferenceConstants.V_EDITOR_LAYOUT_SPLIT_VERTICAL_SOURCE);
-    // create editor with custom page
-    TestBundle testBundle = new TestBundle();
-    try {
-      Class<?> factoryClass = MyXmlEditorPageFactory.class;
-      Class<?> pageClass = MyXmlEditorPage.class;
-      testBundle.addClass(factoryClass);
-      testBundle.addClass(pageClass);
-      {
-        String line = "<factory class='" + factoryClass.getName() + "'/>";
-        testBundle.addExtension("org.eclipse.wb.core.xml.XMLEditorPageFactories", line);
-      }
-      testBundle.install();
-      {
-        openEditor0("<Shell/>");
-        // ask pages
-        {
-          assertEquals(3, getMultiPageCount());
-          // "Source" is active
-          assertEquals(0, m_designerEditor.getActivePage());
-          // ask controls
-          assertSame(m_sourcePage.getControl(), getMultiControl(0));
-          assertSame(m_designPage.getControl(), getMultiControl(1));
-          // ask editors
-          assertSame(m_sourcePage.getXmlEditor(), getMultiEditor(0));
-          assertSame(null, getMultiEditor(1));
-        }
-        // click "Design"
-        {
-          EventSender eventSender = new EventSender(m_viewerCanvas.getControl());
-          eventSender.moveTo(100, 100);
-          eventSender.click();
-        }
-        assertEquals(1, m_designerEditor.getActivePage());
-        // click "Source"
-        {
-          Control control = UiContext.findFirstWidget(m_sourcePage.getControl(), StyledText.class);
-          EventSender eventSender = new EventSender(control);
-          eventSender.moveTo(100, 100);
-          eventSender.click();
-        }
-        assertEquals(0, m_designerEditor.getActivePage());
-        // click "Custom"
-        {
-          Control editorControl = m_designerEditor.getPartControl();
-          CTabFolder tabFolder = UiContext.findFirstWidget(editorControl, CTabFolder.class);
-          CTabItem customItem = tabFolder.getItem(1);
-          assertEquals("Custom", customItem.getText());
-          Rectangle customBounds = customItem.getBounds();
-          {
-            EventSender eventSender = new EventSender(tabFolder);
-            eventSender.moveTo(customBounds.x, customBounds.y);
-            eventSender.click();
-          }
-        }
-        assertEquals(2, m_designerEditor.getActivePage());
-      }
-    } finally {
-      testBundle.dispose();
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Split refresh
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * When "split" mode and "Design" is active, then changes cause immediate refresh.
-   */
-  public void test_splitRefresh_whenDesignActive() throws Exception {
-    setSyncDelay(SYNC_DELAY);
-    setEditorLayout(IPreferenceConstants.V_EDITOR_LAYOUT_SPLIT_VERTICAL_DESIGN);
-    openEditor0("<Shell/>");
-    // initial state
-    fetchContentFields();
-    XmlObjectInfo lastObject = m_lastObject;
-    // click "Design"
-    {
-      EventSender eventSender = new EventSender(m_viewerCanvas.getControl());
-      eventSender.moveTo(100, 100);
-      eventSender.click();
-    }
-    // change source...
-    m_lastContext.getDocument().replace(0, "<Shell".length(), "<Shell text='abc'");
-    // ...applied immediately
-    fetchContentFields();
-    assertNotSame(lastObject, m_lastObject);
-  }
-
-  /**
-   * When "split" mode and "Source" is active, then changes cause refresh after some delay.
-   */
-  public void test_splitRefresh_whenSourceActive() throws Exception {
-    setSyncDelay(SYNC_DELAY);
-    setEditorLayout(IPreferenceConstants.V_EDITOR_LAYOUT_SPLIT_VERTICAL_DESIGN);
-    openEditor0("<Shell/>");
-    // initial state
-    fetchContentFields();
-    XmlObjectInfo lastObject = m_lastObject;
-    // click "Source"
-    {
-      Control control = UiContext.findFirstWidget(m_sourcePage.getControl(), StyledText.class);
-      EventSender eventSender = new EventSender(control);
-      eventSender.moveTo(100, 100);
-      eventSender.click();
-    }
-    // change source...
-    m_lastContext.getDocument().replace(0, "<Shell".length(), "<Shell text='abc'");
-    // ...no refresh yet
-    fetchContentFields();
-    assertSame(lastObject, m_lastObject);
-    // wait sync delay
-    waitEventLoop(SYNC_DELAY + 50);
-    // ...refreshed now
-    fetchContentFields();
-    assertNotSame(lastObject, m_lastObject);
-  }
-
-  /**
-   * When "split" and "refresh on save" options.
-   */
-  public void test_splitRefresh_onSave() throws Exception {
-    setSyncDelay(0);
-    setEditorLayout(IPreferenceConstants.V_EDITOR_LAYOUT_SPLIT_VERTICAL_DESIGN);
-    openEditor0("<Shell/>");
-    // initial state
-    fetchContentFields();
-    XmlObjectInfo lastObject = m_lastObject;
-    // click "Source"
-    {
-      Control control = UiContext.findFirstWidget(m_sourcePage.getControl(), StyledText.class);
-      EventSender eventSender = new EventSender(control);
-      eventSender.moveTo(100, 100);
-      eventSender.click();
-    }
-    // change source...
-    m_lastContext.getDocument().replace(0, "<Shell".length(), "<Shell text='abc'");
-    // ...no refresh yet
-    fetchContentFields();
-    assertSame(lastObject, m_lastObject);
-    // wait sync delay, still no refresh
-    waitEventLoop(SYNC_DELAY + 50);
-    fetchContentFields();
-    assertSame(lastObject, m_lastObject);
-    // do save, refreshed now
-    m_designerEditor.doSave(null);
-    fetchContentFields();
-    assertNotSame(lastObject, m_lastObject);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static void setEditorLayout(int value) {
-    IPreferenceStore preferences = DesignerPlugin.getPreferences();
-    preferences.setValue(IPreferenceConstants.P_EDITOR_LAYOUT, value);
-  }
-
-  /**
-   * Sets sync/refresh delay.
-   */
-  private static void setSyncDelay(int delay) {
-    IPreferenceStore preferences = DesignerPlugin.getPreferences();
-    preferences.setValue(IPreferenceConstants.P_EDITOR_LAYOUT_SYNC_DELAY, delay);
-  }
-
-  /**
-   * Opens {@link AbstractXmlEditor} with given XML source. Does not activates "Design".
-   */
-  protected void openEditor0(String... lines) throws Exception {
-    IFile file = setFileContentSrc("test/Test.xwt", getTestSource(lines));
-    openEditor(file);
-  }
-
-  /**
-   * Asserts that editor is in "parsed" state.
-   */
-  private void assertParsed() {
-    fetchContentFields();
-    assertNotNull(m_contentObject);
-  }
-
-  /**
-   * Assert that "Source" page is before "Design" (or vice versa).
-   */
-  private void assertSourceDesignOrder(boolean sourceFirst) {
-    Control container = m_designerEditor.getPartControl();
-    new UiContext();
-    List<Control> controls = UiContext.findWidgets(container, Control.class);
-    Control sourceControl = m_sourcePage.getControl();
-    Control designControl = m_designPage.getControl();
-    int sourceIndex = controls.indexOf(sourceControl);
-    int designIndex = controls.indexOf(designControl);
-    assertThat(sourceIndex).isPositive();
-    assertThat(designIndex).isPositive();
-    if (sourceFirst) {
-      assertThat(sourceIndex).isLessThan(designIndex);
-    } else {
-      assertThat(designIndex).isLessThan(sourceIndex);
-    }
-  }
-
-  private Object getMultiPageCount() throws Exception {
-    return ReflectionUtils.invokeMethod(m_designerEditor, "getPageCount()");
-  }
-
-  private Control getMultiControl(int pageIndex) throws Exception {
-    return (Control) ReflectionUtils.invokeMethod(m_designerEditor, "getControl(int)", pageIndex);
-  }
-
-  private IEditorPart getMultiEditor(int pageIndex) throws Exception {
-    return (IEditorPart) ReflectionUtils.invokeMethod(m_designerEditor, "getEditor(int)", pageIndex);
-  }
+	private static final int SYNC_DELAY = 250;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Life cycle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void tearDown() throws Exception {
+		super.tearDown();
+		{
+			IPreferenceStore preferences = DesignerPlugin.getPreferences();
+			preferences.setToDefault(IPreferenceConstants.P_EDITOR_LAYOUT);
+			preferences.setToDefault(IPreferenceConstants.P_EDITOR_LAYOUT_SYNC_DELAY);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Pages mode, "Source" first.
+	 */
+	public void test_pagesSource() throws Exception {
+		setEditorLayout(IPreferenceConstants.V_EDITOR_LAYOUT_PAGES_SOURCE);
+		openEditor0("<Shell/>");
+		// "Source" ... "Design" order
+		assertSourceDesignOrder(true);
+		// "Source" is active, not parsed
+		{
+			fetchContentFields();
+			assertNull(m_contentObject);
+		}
+		// open "Design", parsing happens
+		{
+			openDesignPage();
+			assertParsed();
+		}
+	}
+
+	/**
+	 * Pages mode, "Design" first.
+	 */
+	public void test_pagesDesign() throws Exception {
+		setEditorLayout(IPreferenceConstants.V_EDITOR_LAYOUT_PAGES_DESIGN);
+		openEditor0("<Shell/>");
+		// "Design" ... "Source" order
+		assertSourceDesignOrder(false);
+		// "Design" page is active, parsing already done
+		assertParsed();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Split mode
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Split mode, horizontal, "Source" first.
+	 */
+	public void test_splitHorizontalSource() throws Exception {
+		setEditorLayout(IPreferenceConstants.V_EDITOR_LAYOUT_SPLIT_HORIZONTAL_SOURCE);
+		openEditor0("<Shell/>");
+		// ask pages
+		{
+			assertEquals(2, getMultiPageCount());
+			// "Source" is active
+			assertEquals(0, m_designerEditor.getActivePage());
+			// ask controls
+			assertSame(m_sourcePage.getControl(), getMultiControl(0));
+			assertSame(m_designPage.getControl(), getMultiControl(1));
+			// ask editors
+			assertSame(m_sourcePage.getXmlEditor(), getMultiEditor(0));
+			assertSame(null, getMultiEditor(1));
+		}
+		// "Source" control is before "Design" control
+		assertSourceDesignOrder(true);
+		assertSplitOrientation(true);
+		// always parsed in "split"
+		assertParsed();
+		// ask "active page" for "Design"
+		{
+			// click "Design"
+			{
+				EventSender eventSender = new EventSender(m_viewerCanvas.getControl());
+				eventSender.moveTo(100, 100);
+				eventSender.click();
+			}
+			// it is "0" index tab, but we emulate "1" as if there is still "Source" page
+			assertEquals(1, m_designerEditor.getActivePage());
+		}
+	}
+
+	/**
+	 * Split mode, horizontal, "Design" first.
+	 */
+	public void test_splitHorizontalDesign() throws Exception {
+		setEditorLayout(IPreferenceConstants.V_EDITOR_LAYOUT_SPLIT_HORIZONTAL_DESIGN);
+		openEditor0("<Shell/>");
+		// ask pages
+		{
+			assertEquals(2, getMultiPageCount());
+			// "Source" is active
+			assertEquals(1, m_designerEditor.getActivePage());
+			// ask controls
+			assertSame(m_designPage.getControl(), getMultiControl(0));
+			assertSame(m_sourcePage.getControl(), getMultiControl(1));
+			// ask editors
+			assertSame(null, getMultiEditor(0));
+			assertSame(m_sourcePage.getXmlEditor(), getMultiEditor(1));
+		}
+		// "Design" control is before "Source" control
+		assertSourceDesignOrder(false);
+		assertSplitOrientation(true);
+		// always parsed in "split"
+		assertParsed();
+	}
+
+	/**
+	 * Split mode, vertical, "Source" first.
+	 */
+	public void test_splitVerticalSource() throws Exception {
+		setEditorLayout(IPreferenceConstants.V_EDITOR_LAYOUT_SPLIT_VERTICAL_SOURCE);
+		openEditor0("<Shell/>");
+		// "Source" control is before "Design" control
+		assertSourceDesignOrder(true);
+		assertSplitOrientation(false);
+		// always parsed in "split"
+		assertParsed();
+	}
+
+	/**
+	 * Split mode, vertical, "Design" first.
+	 */
+	public void test_splitVerticalDesign() throws Exception {
+		setEditorLayout(IPreferenceConstants.V_EDITOR_LAYOUT_SPLIT_VERTICAL_DESIGN);
+		openEditor0("<Shell/>");
+		// "Design" control is before "Source" control
+		assertSourceDesignOrder(false);
+		assertSplitOrientation(false);
+		// always parsed in "split"
+		assertParsed();
+	}
+
+	/**
+	 * Split mode, vertical, "Source" first. Try to show different pages.
+	 */
+	public void test_splitVerticalSource_showPages() throws Exception {
+		setEditorLayout(IPreferenceConstants.V_EDITOR_LAYOUT_SPLIT_VERTICAL_SOURCE);
+		openEditor0("<Shell/>");
+		// initially "Source" is active
+		assertEquals(0, m_designerEditor.getActivePage());
+		// show pages
+		{
+			// show "Design"
+			m_designerEditor.showDesign();
+			assertEquals(1, m_designerEditor.getActivePage());
+			// show "Source"
+			m_designerEditor.showSource();
+			assertEquals(0, m_designerEditor.getActivePage());
+		}
+		// switch pages
+		{
+			// switch "Source" -> "Design"
+			m_designerEditor.switchSourceDesign();
+			assertEquals(1, m_designerEditor.getActivePage());
+			// switch "Design" -> "Source"
+			m_designerEditor.switchSourceDesign();
+			assertEquals(0, m_designerEditor.getActivePage());
+		}
+	}
+
+	/**
+	 * Asserts that split is done horizontally or vertically.
+	 */
+	private void assertSplitOrientation(boolean horizontal) {
+		Control sourceControl = m_sourcePage.getControl();
+		SashForm sashForm = (SashForm) sourceControl.getParent().getParent();
+		int sashStyle = sashForm.getStyle();
+		int expected = horizontal ? SWT.HORIZONTAL : SWT.VERTICAL;
+		assertEquals(expected, sashStyle & expected);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Custom pages
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static class MyXmlEditorPageFactory implements IXmlEditorPageFactory {
+		@Override
+		public void createPages(AbstractXmlEditor editor, List<IXmlEditorPage> pages) {
+			pages.add(new MyXmlEditorPage());
+		}
+	}
+	public static class MyXmlEditorPage extends XmlEditorPage {
+		private Button m_button;
+
+		@Override
+		public Control createControl(Composite parent) {
+			m_button = new Button(parent, SWT.NONE);
+			return m_button;
+		}
+
+		@Override
+		public Control getControl() {
+			return m_button;
+		}
+
+		@Override
+		public String getName() {
+			return "Custom";
+		}
+
+		@Override
+		public Image getImage() {
+			return null;
+		}
+	}
+
+	/**
+	 * Split mode, vertical, "Source" first.
+	 */
+	public void test_splitVerticalSource_customPage() throws Exception {
+		setEditorLayout(IPreferenceConstants.V_EDITOR_LAYOUT_SPLIT_VERTICAL_SOURCE);
+		// create editor with custom page
+		TestBundle testBundle = new TestBundle();
+		try {
+			Class<?> factoryClass = MyXmlEditorPageFactory.class;
+			Class<?> pageClass = MyXmlEditorPage.class;
+			testBundle.addClass(factoryClass);
+			testBundle.addClass(pageClass);
+			{
+				String line = "<factory class='" + factoryClass.getName() + "'/>";
+				testBundle.addExtension("org.eclipse.wb.core.xml.XMLEditorPageFactories", line);
+			}
+			testBundle.install();
+			{
+				openEditor0("<Shell/>");
+				// ask pages
+				{
+					assertEquals(3, getMultiPageCount());
+					// "Source" is active
+					assertEquals(0, m_designerEditor.getActivePage());
+					// ask controls
+					assertSame(m_sourcePage.getControl(), getMultiControl(0));
+					assertSame(m_designPage.getControl(), getMultiControl(1));
+					// ask editors
+					assertSame(m_sourcePage.getXmlEditor(), getMultiEditor(0));
+					assertSame(null, getMultiEditor(1));
+				}
+				// click "Design"
+				{
+					EventSender eventSender = new EventSender(m_viewerCanvas.getControl());
+					eventSender.moveTo(100, 100);
+					eventSender.click();
+				}
+				assertEquals(1, m_designerEditor.getActivePage());
+				// click "Source"
+				{
+					Control control = UiContext.findFirstWidget(m_sourcePage.getControl(), StyledText.class);
+					EventSender eventSender = new EventSender(control);
+					eventSender.moveTo(100, 100);
+					eventSender.click();
+				}
+				assertEquals(0, m_designerEditor.getActivePage());
+				// click "Custom"
+				{
+					Control editorControl = m_designerEditor.getPartControl();
+					CTabFolder tabFolder = UiContext.findFirstWidget(editorControl, CTabFolder.class);
+					CTabItem customItem = tabFolder.getItem(1);
+					assertEquals("Custom", customItem.getText());
+					Rectangle customBounds = customItem.getBounds();
+					{
+						EventSender eventSender = new EventSender(tabFolder);
+						eventSender.moveTo(customBounds.x, customBounds.y);
+						eventSender.click();
+					}
+				}
+				assertEquals(2, m_designerEditor.getActivePage());
+			}
+		} finally {
+			testBundle.dispose();
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Split refresh
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * When "split" mode and "Design" is active, then changes cause immediate refresh.
+	 */
+	public void test_splitRefresh_whenDesignActive() throws Exception {
+		setSyncDelay(SYNC_DELAY);
+		setEditorLayout(IPreferenceConstants.V_EDITOR_LAYOUT_SPLIT_VERTICAL_DESIGN);
+		openEditor0("<Shell/>");
+		// initial state
+		fetchContentFields();
+		XmlObjectInfo lastObject = m_lastObject;
+		// click "Design"
+		{
+			EventSender eventSender = new EventSender(m_viewerCanvas.getControl());
+			eventSender.moveTo(100, 100);
+			eventSender.click();
+		}
+		// change source...
+		m_lastContext.getDocument().replace(0, "<Shell".length(), "<Shell text='abc'");
+		// ...applied immediately
+		fetchContentFields();
+		assertNotSame(lastObject, m_lastObject);
+	}
+
+	/**
+	 * When "split" mode and "Source" is active, then changes cause refresh after some delay.
+	 */
+	public void test_splitRefresh_whenSourceActive() throws Exception {
+		setSyncDelay(SYNC_DELAY);
+		setEditorLayout(IPreferenceConstants.V_EDITOR_LAYOUT_SPLIT_VERTICAL_DESIGN);
+		openEditor0("<Shell/>");
+		// initial state
+		fetchContentFields();
+		XmlObjectInfo lastObject = m_lastObject;
+		// click "Source"
+		{
+			Control control = UiContext.findFirstWidget(m_sourcePage.getControl(), StyledText.class);
+			EventSender eventSender = new EventSender(control);
+			eventSender.moveTo(100, 100);
+			eventSender.click();
+		}
+		// change source...
+		m_lastContext.getDocument().replace(0, "<Shell".length(), "<Shell text='abc'");
+		// ...no refresh yet
+		fetchContentFields();
+		assertSame(lastObject, m_lastObject);
+		// wait sync delay
+		waitEventLoop(SYNC_DELAY + 50);
+		// ...refreshed now
+		fetchContentFields();
+		assertNotSame(lastObject, m_lastObject);
+	}
+
+	/**
+	 * When "split" and "refresh on save" options.
+	 */
+	public void test_splitRefresh_onSave() throws Exception {
+		setSyncDelay(0);
+		setEditorLayout(IPreferenceConstants.V_EDITOR_LAYOUT_SPLIT_VERTICAL_DESIGN);
+		openEditor0("<Shell/>");
+		// initial state
+		fetchContentFields();
+		XmlObjectInfo lastObject = m_lastObject;
+		// click "Source"
+		{
+			Control control = UiContext.findFirstWidget(m_sourcePage.getControl(), StyledText.class);
+			EventSender eventSender = new EventSender(control);
+			eventSender.moveTo(100, 100);
+			eventSender.click();
+		}
+		// change source...
+		m_lastContext.getDocument().replace(0, "<Shell".length(), "<Shell text='abc'");
+		// ...no refresh yet
+		fetchContentFields();
+		assertSame(lastObject, m_lastObject);
+		// wait sync delay, still no refresh
+		waitEventLoop(SYNC_DELAY + 50);
+		fetchContentFields();
+		assertSame(lastObject, m_lastObject);
+		// do save, refreshed now
+		m_designerEditor.doSave(null);
+		fetchContentFields();
+		assertNotSame(lastObject, m_lastObject);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static void setEditorLayout(int value) {
+		IPreferenceStore preferences = DesignerPlugin.getPreferences();
+		preferences.setValue(IPreferenceConstants.P_EDITOR_LAYOUT, value);
+	}
+
+	/**
+	 * Sets sync/refresh delay.
+	 */
+	private static void setSyncDelay(int delay) {
+		IPreferenceStore preferences = DesignerPlugin.getPreferences();
+		preferences.setValue(IPreferenceConstants.P_EDITOR_LAYOUT_SYNC_DELAY, delay);
+	}
+
+	/**
+	 * Opens {@link AbstractXmlEditor} with given XML source. Does not activates "Design".
+	 */
+	protected void openEditor0(String... lines) throws Exception {
+		IFile file = setFileContentSrc("test/Test.xwt", getTestSource(lines));
+		openEditor(file);
+	}
+
+	/**
+	 * Asserts that editor is in "parsed" state.
+	 */
+	private void assertParsed() {
+		fetchContentFields();
+		assertNotNull(m_contentObject);
+	}
+
+	/**
+	 * Assert that "Source" page is before "Design" (or vice versa).
+	 */
+	private void assertSourceDesignOrder(boolean sourceFirst) {
+		Control container = m_designerEditor.getPartControl();
+		new UiContext();
+		List<Control> controls = UiContext.findWidgets(container, Control.class);
+		Control sourceControl = m_sourcePage.getControl();
+		Control designControl = m_designPage.getControl();
+		int sourceIndex = controls.indexOf(sourceControl);
+		int designIndex = controls.indexOf(designControl);
+		assertThat(sourceIndex).isPositive();
+		assertThat(designIndex).isPositive();
+		if (sourceFirst) {
+			assertThat(sourceIndex).isLessThan(designIndex);
+		} else {
+			assertThat(designIndex).isLessThan(sourceIndex);
+		}
+	}
+
+	private Object getMultiPageCount() throws Exception {
+		return ReflectionUtils.invokeMethod(m_designerEditor, "getPageCount()");
+	}
+
+	private Control getMultiControl(int pageIndex) throws Exception {
+		return (Control) ReflectionUtils.invokeMethod(m_designerEditor, "getControl(int)", pageIndex);
+	}
+
+	private IEditorPart getMultiEditor(int pageIndex) throws Exception {
+		return (IEditorPart) ReflectionUtils.invokeMethod(m_designerEditor, "getEditor(int)", pageIndex);
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/editor/EditorRelatedActionTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/editor/EditorRelatedActionTest.java
index eac048060..534b4e1c6 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/editor/EditorRelatedActionTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/editor/EditorRelatedActionTest.java
@@ -19,16 +19,16 @@
  * @author scheglov_ke
  */
 public class EditorRelatedActionTest extends XwtGefTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_run() throws Exception {
-    // no editor
-    assertSame(null, EditorRelatedAction.getActiveEditor());
-    // now we have AbstractXMLEditor
-    openEditor("<Shell/>");
-    assertSame(m_designerEditor, EditorRelatedAction.getActiveEditor());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_run() throws Exception {
+		// no editor
+		assertSame(null, EditorRelatedAction.getActiveEditor());
+		// now we have AbstractXMLEditor
+		openEditor("<Shell/>");
+		assertSame(m_designerEditor, EditorRelatedAction.getActiveEditor());
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/editor/RefreshActionTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/editor/RefreshActionTest.java
index 875ff9d5d..881b027ba 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/editor/RefreshActionTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/editor/RefreshActionTest.java
@@ -19,17 +19,17 @@
  * @author scheglov_ke
  */
 public class RefreshActionTest extends XwtGefTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_run() throws Exception {
-    openEditor("<Shell/>");
-    Object oldObject = m_lastObject;
-    //
-    m_designPageActions.getRefreshAction().run();
-    fetchContentFields();
-    assertNotSame(oldObject, m_lastObject);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_run() throws Exception {
+		openEditor("<Shell/>");
+		Object oldObject = m_lastObject;
+		//
+		m_designPageActions.getRefreshAction().run();
+		fetchContentFields();
+		assertNotSame(oldObject, m_lastObject);
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/editor/SelectSupportTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/editor/SelectSupportTest.java
index c1f8972c1..44300c587 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/editor/SelectSupportTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/editor/SelectSupportTest.java
@@ -26,101 +26,101 @@
  * @author scheglov_ke
  */
 public class SelectSupportTest extends XwtGefTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_all() throws Exception {
-    XmlObjectInfo shell =
-        openEditor(
-            "<!-- filler filler filler filler filler -->",
-            "<!-- filler filler filler filler filler -->",
-            "<Shell text='Hello!'>",
-            "  <Shell.layout>",
-            "    <RowLayout/>",
-            "  </Shell.layout>",
-            "  <Button wbp:name='button_1' text='Button 1'/>",
-            "  <Button wbp:name='button_2' text='Button 2'/>",
-            "  <Text wbp:name='text_1' text='Text 1'/>",
-            "  <Composite wbp:name='composite_1'>",
-            "    <Button wbp:name='button_3' text='Button 3'/>",
-            "  </Composite>",
-            "</Shell>");
-    XmlObjectInfo button_1 = getObjectByName("button_1");
-    XmlObjectInfo button_2 = getObjectByName("button_2");
-    XmlObjectInfo button_3 = getObjectByName("button_3");
-    XmlObjectInfo text_1 = getObjectByName("text_1");
-    XmlObjectInfo composite_1 = getObjectByName("composite_1");
-    // use hot keys
-    {
-      // all
-      canvas.deselectAll();
-      {
-        sendSelectKey(SWT.CTRL);
-        canvas.assertSelection(shell, button_1, button_2, text_1, composite_1, button_3);
-      }
-      // same type
-      canvas.deselectAll();
-      {
-        canvas.select(button_1);
-        sendSelectKey(SWT.CTRL | SWT.SHIFT);
-        canvas.assertSelection(button_1, button_2, button_3);
-      }
-      // same parent
-      canvas.deselectAll();
-      {
-        canvas.select(text_1);
-        sendSelectKey(SWT.CTRL | SWT.ALT);
-        canvas.assertSelection(button_1, button_2, text_1, composite_1);
-      }
-    }
-    // use context menu
-    {
-      IMenuManager contextMenu = getContextMenu(shell);
-      IMenuManager selectMenu = findChildMenuManager(contextMenu, "Select");
-      // all
-      canvas.deselectAll();
-      {
-        findChildAction(selectMenu, "All").run();
-        canvas.assertSelection(shell, button_1, button_2, text_1, composite_1, button_3);
-      }
-      // same type
-      canvas.deselectAll();
-      {
-        canvas.select(button_1);
-        findChildAction(selectMenu, "All of Same Type").run();
-        canvas.assertSelection(button_1, button_2, button_3);
-      }
-      // same parent
-      canvas.deselectAll();
-      {
-        canvas.select(text_1);
-        findChildAction(selectMenu, "All on Same Parent").run();
-        canvas.assertSelection(button_1, button_2, text_1, composite_1);
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_all() throws Exception {
+		XmlObjectInfo shell =
+				openEditor(
+						"<!-- filler filler filler filler filler -->",
+						"<!-- filler filler filler filler filler -->",
+						"<Shell text='Hello!'>",
+						"  <Shell.layout>",
+						"    <RowLayout/>",
+						"  </Shell.layout>",
+						"  <Button wbp:name='button_1' text='Button 1'/>",
+						"  <Button wbp:name='button_2' text='Button 2'/>",
+						"  <Text wbp:name='text_1' text='Text 1'/>",
+						"  <Composite wbp:name='composite_1'>",
+						"    <Button wbp:name='button_3' text='Button 3'/>",
+						"  </Composite>",
+						"</Shell>");
+		XmlObjectInfo button_1 = getObjectByName("button_1");
+		XmlObjectInfo button_2 = getObjectByName("button_2");
+		XmlObjectInfo button_3 = getObjectByName("button_3");
+		XmlObjectInfo text_1 = getObjectByName("text_1");
+		XmlObjectInfo composite_1 = getObjectByName("composite_1");
+		// use hot keys
+		{
+			// all
+			canvas.deselectAll();
+			{
+				sendSelectKey(SWT.CTRL);
+				canvas.assertSelection(shell, button_1, button_2, text_1, composite_1, button_3);
+			}
+			// same type
+			canvas.deselectAll();
+			{
+				canvas.select(button_1);
+				sendSelectKey(SWT.CTRL | SWT.SHIFT);
+				canvas.assertSelection(button_1, button_2, button_3);
+			}
+			// same parent
+			canvas.deselectAll();
+			{
+				canvas.select(text_1);
+				sendSelectKey(SWT.CTRL | SWT.ALT);
+				canvas.assertSelection(button_1, button_2, text_1, composite_1);
+			}
+		}
+		// use context menu
+		{
+			IMenuManager contextMenu = getContextMenu(shell);
+			IMenuManager selectMenu = findChildMenuManager(contextMenu, "Select");
+			// all
+			canvas.deselectAll();
+			{
+				findChildAction(selectMenu, "All").run();
+				canvas.assertSelection(shell, button_1, button_2, text_1, composite_1, button_3);
+			}
+			// same type
+			canvas.deselectAll();
+			{
+				canvas.select(button_1);
+				findChildAction(selectMenu, "All of Same Type").run();
+				canvas.assertSelection(button_1, button_2, button_3);
+			}
+			// same parent
+			canvas.deselectAll();
+			{
+				canvas.select(text_1);
+				findChildAction(selectMenu, "All on Same Parent").run();
+				canvas.assertSelection(button_1, button_2, text_1, composite_1);
+			}
+		}
+	}
 
-  public void test_disposeHierarchy() throws Exception {
-    openEditor("<Shell/>");
-    // reparse
-    {
-      IDesignPageSite.Helper.getSite(m_contentObject).reparse();
-      fetchContentFields();
-    }
-    // selection hot keys still work
-    canvas.deselectAll();
-    {
-      sendSelectKey(SWT.CTRL);
-      canvas.assertSelection(m_contentObject);
-    }
-  }
+	public void test_disposeHierarchy() throws Exception {
+		openEditor("<Shell/>");
+		// reparse
+		{
+			IDesignPageSite.Helper.getSite(m_contentObject).reparse();
+			fetchContentFields();
+		}
+		// selection hot keys still work
+		canvas.deselectAll();
+		{
+			sendSelectKey(SWT.CTRL);
+			canvas.assertSelection(m_contentObject);
+		}
+	}
 
-  private void sendSelectKey(int stateMask) {
-    Control control = m_viewerCanvas.getControl();
-    EventSender eventSender = new EventSender(control);
-    eventSender.setStateMask(stateMask);
-    eventSender.keyDown('a');
-  }
+	private void sendSelectKey(int stateMask) {
+		Control control = m_viewerCanvas.getControl();
+		EventSender eventSender = new EventSender(control);
+		eventSender.setStateMask(stateMask);
+		eventSender.keyDown('a');
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/editor/SwitchActionTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/editor/SwitchActionTest.java
index 84f26358b..ef4ab2450 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/editor/SwitchActionTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/editor/SwitchActionTest.java
@@ -19,59 +19,59 @@
  * @author scheglov_ke
  */
 public class SwitchActionTest extends XwtGefTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for switching to "Source" and back to "Design".
-   */
-  public void test_run() throws Exception {
-    openEditor("<Shell/>");
-    // prepare action
-    SwitchAction switchAction;
-    {
-      switchAction = new SwitchAction();
-      switchAction.setActiveEditor(null, m_designerEditor);
-    }
-    // after "openDesign" the "Design" page is active
-    assertEquals(1, m_designerEditor.getActivePage());
-    waitEventLoop(0);
-    // switch to "Source" using action
-    switchAction.run(null);
-    waitEventLoop(0);
-    assertEquals(0, m_designerEditor.getActivePage());
-    // switch to "Design" using action
-    switchAction.run(null);
-    waitEventLoop(0);
-    assertEquals(1, m_designerEditor.getActivePage());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for switching to "Source" and back to "Design".
+	 */
+	public void test_run() throws Exception {
+		openEditor("<Shell/>");
+		// prepare action
+		SwitchAction switchAction;
+		{
+			switchAction = new SwitchAction();
+			switchAction.setActiveEditor(null, m_designerEditor);
+		}
+		// after "openDesign" the "Design" page is active
+		assertEquals(1, m_designerEditor.getActivePage());
+		waitEventLoop(0);
+		// switch to "Source" using action
+		switchAction.run(null);
+		waitEventLoop(0);
+		assertEquals(0, m_designerEditor.getActivePage());
+		// switch to "Design" using action
+		switchAction.run(null);
+		waitEventLoop(0);
+		assertEquals(1, m_designerEditor.getActivePage());
+	}
 
-  /**
-   * Test for {@link SwitchAction#showSource()}.
-   */
-  public void test_showSource() throws Exception {
-    openEditor("<Shell/>");
-    // "Design" is active
-    assertEquals(1, m_designerEditor.getActivePage());
-    // switch to "Source"
-    SwitchAction.showSource();
-    assertEquals(0, m_designerEditor.getActivePage());
-    assertXMLSelection(0, 0);
-  }
+	/**
+	 * Test for {@link SwitchAction#showSource()}.
+	 */
+	public void test_showSource() throws Exception {
+		openEditor("<Shell/>");
+		// "Design" is active
+		assertEquals(1, m_designerEditor.getActivePage());
+		// switch to "Source"
+		SwitchAction.showSource();
+		assertEquals(0, m_designerEditor.getActivePage());
+		assertXMLSelection(0, 0);
+	}
 
-  /**
-   * Test for {@link SwitchAction#showSource(int)}.
-   */
-  public void test_showSource_withOffset() throws Exception {
-    openEditor("<Shell/>");
-    // "Design" is active
-    assertEquals(1, m_designerEditor.getActivePage());
-    // switch to "Source"
-    SwitchAction.showSource(5);
-    waitEventLoop(0);
-    assertEquals(0, m_designerEditor.getActivePage());
-    assertXMLSelection(5, 0);
-  }
+	/**
+	 * Test for {@link SwitchAction#showSource(int)}.
+	 */
+	public void test_showSource_withOffset() throws Exception {
+		openEditor("<Shell/>");
+		// "Design" is active
+		assertEquals(1, m_designerEditor.getActivePage());
+		// switch to "Source"
+		SwitchAction.showSource(5);
+		waitEventLoop(0);
+		assertEquals(0, m_designerEditor.getActivePage());
+		assertXMLSelection(5, 0);
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/editor/SwitchPairEditorActionTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/editor/SwitchPairEditorActionTest.java
index e1c605b33..19d0bfb08 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/editor/SwitchPairEditorActionTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/editor/SwitchPairEditorActionTest.java
@@ -25,42 +25,42 @@
  * @author scheglov_ke
  */
 public class SwitchPairEditorActionTest extends XwtGefTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for switching to "Source" and back to "Design".
-   */
-  public void test_run() throws Exception {
-    setFileContentSrc(
-        "test/Test.java",
-        getJavaSource(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "public class Test {",
-            "}"));
-    openEditor("<Shell x:Class='test.Test'/>");
-    // prepare action
-    SwitchPairEditorAction switchAction;
-    {
-      switchAction = new SwitchPairEditorAction();
-      switchAction.setActiveEditor(null, m_designerEditor);
-    }
-    // initially XML editor is active
-    assertSame(m_designerEditor, DesignerPlugin.getActiveEditor());
-    // switch to Java using action
-    switchAction.run(null);
-    waitEventLoop(0);
-    {
-      IEditorPart activeEditor = DesignerPlugin.getActiveEditor();
-      assertThat(activeEditor).isInstanceOf(CompilationUnitEditor.class);
-      switchAction.setActiveEditor(null, activeEditor);
-    }
-    // switch to XML using action
-    switchAction.run(null);
-    waitEventLoop(0);
-    assertSame(m_designerEditor, DesignerPlugin.getActiveEditor());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for switching to "Source" and back to "Design".
+	 */
+	public void test_run() throws Exception {
+		setFileContentSrc(
+				"test/Test.java",
+				getJavaSource(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"public class Test {",
+						"}"));
+		openEditor("<Shell x:Class='test.Test'/>");
+		// prepare action
+		SwitchPairEditorAction switchAction;
+		{
+			switchAction = new SwitchPairEditorAction();
+			switchAction.setActiveEditor(null, m_designerEditor);
+		}
+		// initially XML editor is active
+		assertSame(m_designerEditor, DesignerPlugin.getActiveEditor());
+		// switch to Java using action
+		switchAction.run(null);
+		waitEventLoop(0);
+		{
+			IEditorPart activeEditor = DesignerPlugin.getActiveEditor();
+			assertThat(activeEditor).isInstanceOf(CompilationUnitEditor.class);
+			switchAction.setActiveEditor(null, activeEditor);
+		}
+		// switch to XML using action
+		switchAction.run(null);
+		waitEventLoop(0);
+		assertSame(m_designerEditor, DesignerPlugin.getActiveEditor());
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/editor/TestActionTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/editor/TestActionTest.java
index 5fee2420c..e0a7f425a 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/editor/TestActionTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/editor/TestActionTest.java
@@ -25,32 +25,32 @@
  * @author scheglov_ke
  */
 public class TestActionTest extends XwtGefTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test that {@link TestAction} shows {@link Shell} with valid bounds.
-   */
-  public void test_run() throws Exception {
-    openEditor("<Shell text='My Shell'/>");
-    //
-    new UiContext().executeAndCheck(new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        m_designPageActions.getTestAction().run();
-      }
-    }, new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        Shell shell = context.useShell("My Shell");
-        {
-          assertEquals(450, shell.getSize().x);
-          assertEquals(300, shell.getSize().y);
-        }
-        new EventSender(shell).keyDown(SWT.ESC);
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test that {@link TestAction} shows {@link Shell} with valid bounds.
+	 */
+	public void test_run() throws Exception {
+		openEditor("<Shell text='My Shell'/>");
+		//
+		new UiContext().executeAndCheck(new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				m_designPageActions.getTestAction().run();
+			}
+		}, new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				Shell shell = context.useShell("My Shell");
+				{
+					assertEquals(450, shell.getSize().x);
+					assertEquals(300, shell.getSize().y);
+				}
+				new EventSender(shell).keyDown(SWT.ESC);
+			}
+		});
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/editor/TopSelectionEditPolicyTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/editor/TopSelectionEditPolicyTest.java
index ba339885f..1e886cd99 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/editor/TopSelectionEditPolicyTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/editor/TopSelectionEditPolicyTest.java
@@ -25,75 +25,75 @@
  * @author scheglov_ke
  */
 public class TopSelectionEditPolicyTest extends XwtGefTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_resizeBoth() throws Exception {
-    CompositeInfo shell = openEditor("<Shell/>");
-    // initial size
-    {
-      Rectangle bounds = shell.getBounds();
-      assertEquals(450, bounds.width);
-      assertEquals(300, bounds.height);
-    }
-    // select end resize
-    canvas.beginResize(shell, IPositionConstants.SOUTH_EAST);
-    canvas.dragOn(50, 30).endDrag();
-    {
-      Rectangle bounds = shell.getBounds();
-      assertEquals(500, bounds.width);
-      assertEquals(330, bounds.height);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_resizeBoth() throws Exception {
+		CompositeInfo shell = openEditor("<Shell/>");
+		// initial size
+		{
+			Rectangle bounds = shell.getBounds();
+			assertEquals(450, bounds.width);
+			assertEquals(300, bounds.height);
+		}
+		// select end resize
+		canvas.beginResize(shell, IPositionConstants.SOUTH_EAST);
+		canvas.dragOn(50, 30).endDrag();
+		{
+			Rectangle bounds = shell.getBounds();
+			assertEquals(500, bounds.width);
+			assertEquals(330, bounds.height);
+		}
+	}
 
-  public void test_resizeEast_toNegative() throws Exception {
-    CompositeInfo shell = openEditor("<Shell/>");
-    // initial size
-    {
-      Rectangle bounds = shell.getBounds();
-      assertEquals(450, bounds.width);
-      assertEquals(300, bounds.height);
-    }
-    // drag so that size is negative, but no exception
-    canvas.beginResize(shell, IPositionConstants.EAST);
-    canvas.dragOn(-455, 0);
-    canvas.endDrag();
-    // size is reasonable
-    {
-      Rectangle bounds = shell.getBounds();
-      assertThat(bounds.width).isGreaterThan(10);
-      assertThat(bounds.height).isEqualTo(300);
-    }
-  }
+	public void test_resizeEast_toNegative() throws Exception {
+		CompositeInfo shell = openEditor("<Shell/>");
+		// initial size
+		{
+			Rectangle bounds = shell.getBounds();
+			assertEquals(450, bounds.width);
+			assertEquals(300, bounds.height);
+		}
+		// drag so that size is negative, but no exception
+		canvas.beginResize(shell, IPositionConstants.EAST);
+		canvas.dragOn(-455, 0);
+		canvas.endDrag();
+		// size is reasonable
+		{
+			Rectangle bounds = shell.getBounds();
+			assertThat(bounds.width).isGreaterThan(10);
+			assertThat(bounds.height).isEqualTo(300);
+		}
+	}
 
-  public void test_resizeSouth_toNegative() throws Exception {
-    CompositeInfo shell = openEditor("<Shell/>");
-    // initial size
-    {
-      Rectangle bounds = shell.getBounds();
-      assertEquals(450, bounds.width);
-      assertEquals(300, bounds.height);
-    }
-    // drag so that size is negative, but no exception
-    canvas.beginResize(shell, IPositionConstants.SOUTH);
-    canvas.dragOn(0, -305);
-    canvas.endDrag();
-    // size is reasonable
-    {
-      Rectangle bounds = shell.getBounds();
-      assertThat(bounds.width).isEqualTo(450);
-      assertThat(bounds.height).isGreaterThan(10);
-    }
-  }
+	public void test_resizeSouth_toNegative() throws Exception {
+		CompositeInfo shell = openEditor("<Shell/>");
+		// initial size
+		{
+			Rectangle bounds = shell.getBounds();
+			assertEquals(450, bounds.width);
+			assertEquals(300, bounds.height);
+		}
+		// drag so that size is negative, but no exception
+		canvas.beginResize(shell, IPositionConstants.SOUTH);
+		canvas.dragOn(0, -305);
+		canvas.endDrag();
+		// size is reasonable
+		{
+			Rectangle bounds = shell.getBounds();
+			assertThat(bounds.width).isEqualTo(450);
+			assertThat(bounds.height).isGreaterThan(10);
+		}
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/editor/UndoManagerTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/editor/UndoManagerTest.java
index a17fe4228..69ab3011a 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/editor/UndoManagerTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/editor/UndoManagerTest.java
@@ -29,373 +29,373 @@
  * @author scheglov_ke
  */
 public class UndoManagerTest extends XwtGefTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_emptyShell() throws Exception {
-    openEditor(
-        "<!-- filler filler filler filler filler -->",
-        "<!-- filler filler filler filler filler -->",
-        "<Shell text='My Shell'/>");
-    // check that fields fetched correctly
-    assertNotNull(m_lastObject);
-    assertSame(m_lastObject, m_contentObject);
-    assertNotNull(canvas);
-    assertNotNull(tree);
-    assertSame(m_contentEditPart, canvas.getEditPart(m_contentObject));
-    // initial size
-    {
-      Rectangle contentEditPartBounds = m_contentEditPart.getFigure().getBounds();
-      assertEquals(450, contentEditPartBounds.width);
-      assertEquals(300, contentEditPartBounds.height);
-    }
-    // no selection initially
-    canvas.assertSelectedEmpty();
-    tree.assertSelectedEmpty();
-    // click Shell on canvas
-    canvas.moveTo(m_lastObject, 100, 100).click();
-    canvas.assertPrimarySelected(m_lastObject);
-    tree.assertPrimarySelected(m_lastObject);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_emptyShell() throws Exception {
+		openEditor(
+				"<!-- filler filler filler filler filler -->",
+				"<!-- filler filler filler filler filler -->",
+				"<Shell text='My Shell'/>");
+		// check that fields fetched correctly
+		assertNotNull(m_lastObject);
+		assertSame(m_lastObject, m_contentObject);
+		assertNotNull(canvas);
+		assertNotNull(tree);
+		assertSame(m_contentEditPart, canvas.getEditPart(m_contentObject));
+		// initial size
+		{
+			Rectangle contentEditPartBounds = m_contentEditPart.getFigure().getBounds();
+			assertEquals(450, contentEditPartBounds.width);
+			assertEquals(300, contentEditPartBounds.height);
+		}
+		// no selection initially
+		canvas.assertSelectedEmpty();
+		tree.assertSelectedEmpty();
+		// click Shell on canvas
+		canvas.moveTo(m_lastObject, 100, 100).click();
+		canvas.assertPrimarySelected(m_lastObject);
+		tree.assertPrimarySelected(m_lastObject);
+	}
 
-  public void test_reparseOnDocumentChange() throws Exception {
-    openEditor(
-        "<!-- filler filler filler filler filler -->",
-        "<!-- filler filler filler filler filler -->",
-        "<Shell text='My Shell'/>");
-    XmlObjectInfo initialObject = m_lastObject;
-    // initially "text" value
-    {
-      Property property = m_lastObject.getPropertyByTitle("text");
-      assertEquals("My Shell", property.getValue());
-    }
-    // change IDocument, so reparse should be done
-    {
-      IDocument document = m_lastContext.getDocument();
-      int offset = document.get().indexOf("My ");
-      document.replace(offset, "My".length(), "Some");
-    }
-    // fetch to get new object
-    fetchContentFields();
-    // new object and new "text"
-    assertNotSame(initialObject, m_lastObject);
-    {
-      Property property = m_lastObject.getPropertyByTitle("text");
-      assertEquals("Some Shell", property.getValue());
-    }
-  }
+	public void test_reparseOnDocumentChange() throws Exception {
+		openEditor(
+				"<!-- filler filler filler filler filler -->",
+				"<!-- filler filler filler filler filler -->",
+				"<Shell text='My Shell'/>");
+		XmlObjectInfo initialObject = m_lastObject;
+		// initially "text" value
+		{
+			Property property = m_lastObject.getPropertyByTitle("text");
+			assertEquals("My Shell", property.getValue());
+		}
+		// change IDocument, so reparse should be done
+		{
+			IDocument document = m_lastContext.getDocument();
+			int offset = document.get().indexOf("My ");
+			document.replace(offset, "My".length(), "Some");
+		}
+		// fetch to get new object
+		fetchContentFields();
+		// new object and new "text"
+		assertNotSame(initialObject, m_lastObject);
+		{
+			Property property = m_lastObject.getPropertyByTitle("text");
+			assertEquals("Some Shell", property.getValue());
+		}
+	}
 
-  public void test_reparse_onUndo_onRedo() throws Exception {
-    openEditor("<Shell text='foo'/>");
-    // initial "text"
-    assertEquals("foo", m_lastObject.getPropertyByTitle("text").getValue());
-    // set new "text"
-    m_lastObject.getPropertyByTitle("text").setValue("bar");
-    assertEquals("bar", m_lastObject.getPropertyByTitle("text").getValue());
-    // do "undo"
-    {
-      getUndoAction().run();
-      fetchContentFields();
-      // still old/initial "text"
-      assertEquals("foo", m_lastObject.getPropertyByTitle("text").getValue());
-    }
-    // do "redo"
-    {
-      getRedoAction().run();
-      fetchContentFields();
-      // again new "text"
-      assertEquals("bar", m_lastObject.getPropertyByTitle("text").getValue());
-    }
-  }
+	public void test_reparse_onUndo_onRedo() throws Exception {
+		openEditor("<Shell text='foo'/>");
+		// initial "text"
+		assertEquals("foo", m_lastObject.getPropertyByTitle("text").getValue());
+		// set new "text"
+		m_lastObject.getPropertyByTitle("text").setValue("bar");
+		assertEquals("bar", m_lastObject.getPropertyByTitle("text").getValue());
+		// do "undo"
+		{
+			getUndoAction().run();
+			fetchContentFields();
+			// still old/initial "text"
+			assertEquals("foo", m_lastObject.getPropertyByTitle("text").getValue());
+		}
+		// do "redo"
+		{
+			getRedoAction().run();
+			fetchContentFields();
+			// again new "text"
+			assertEquals("bar", m_lastObject.getPropertyByTitle("text").getValue());
+		}
+	}
 
-  public void test_noReparse_afterChangeOnDesign() throws Exception {
-    openEditor("<Shell text='foo'/>");
-    // set new "text"
-    XmlObjectInfo object = m_lastObject;
-    object.getPropertyByTitle("text").setValue("bar");
-    // switch to Source and back to Design
-    m_designerEditor.showSource();
-    m_designerEditor.showDesign();
-    // reparse should not happen
-    fetchContentFields();
-    assertSame(object, m_lastObject);
-  }
+	public void test_noReparse_afterChangeOnDesign() throws Exception {
+		openEditor("<Shell text='foo'/>");
+		// set new "text"
+		XmlObjectInfo object = m_lastObject;
+		object.getPropertyByTitle("text").setValue("bar");
+		// switch to Source and back to Design
+		m_designerEditor.showSource();
+		m_designerEditor.showDesign();
+		// reparse should not happen
+		fetchContentFields();
+		assertSame(object, m_lastObject);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Restore selection
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test that we restore selection after reparse.
-   */
-  public void test_restoreSelection() throws Exception {
-    openEditor(
-        "<!-- filler filler filler filler filler -->",
-        "<!-- filler filler filler filler filler -->",
-        "<Shell text='Hello!'>",
-        "  <Shell.layout>",
-        "    <RowLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_1' text='Button 1'/>",
-        "  <Button wbp:name='button_2' text='Button 2'/>",
-        "</Shell>");
-    // select "button_2"
-    {
-      XmlObjectInfo button_2 = getObjectByName("button_2");
-      tree.select(button_2);
-      tree.assertPrimarySelected(button_2);
-    }
-    // reparse
-    {
-      XmlObjectInfo oldObject = m_lastObject;
-      IDesignPageSite.Helper.getSite(m_lastObject).reparse();
-      fetchContentFields();
-      assertNotSame(oldObject, m_lastObject);
-    }
-    // assert that selection of "button_2" was restored
-    {
-      XmlObjectInfo button_2 = getObjectByName("button_2");
-      tree.assertPrimarySelected(button_2);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Restore selection
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test that we restore selection after reparse.
+	 */
+	public void test_restoreSelection() throws Exception {
+		openEditor(
+				"<!-- filler filler filler filler filler -->",
+				"<!-- filler filler filler filler filler -->",
+				"<Shell text='Hello!'>",
+				"  <Shell.layout>",
+				"    <RowLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_1' text='Button 1'/>",
+				"  <Button wbp:name='button_2' text='Button 2'/>",
+				"</Shell>");
+		// select "button_2"
+		{
+			XmlObjectInfo button_2 = getObjectByName("button_2");
+			tree.select(button_2);
+			tree.assertPrimarySelected(button_2);
+		}
+		// reparse
+		{
+			XmlObjectInfo oldObject = m_lastObject;
+			IDesignPageSite.Helper.getSite(m_lastObject).reparse();
+			fetchContentFields();
+			assertNotSame(oldObject, m_lastObject);
+		}
+		// assert that selection of "button_2" was restored
+		{
+			XmlObjectInfo button_2 = getObjectByName("button_2");
+			tree.assertPrimarySelected(button_2);
+		}
+	}
 
-  /**
-   * Following scenario should work:
-   * <ol>
-   * <li>Select "button";</li>
-   * <li>Delete "button", it disappears;</li>
-   * <li>Undo;</li>
-   * <li>"button" should be visible and selected.</li>
-   * </ol>
-   */
-  public void test_restoreSelection_afterDelete_thenUndo() throws Exception {
-    openEditor(
-        "<!-- filler filler filler filler filler -->",
-        "<!-- filler filler filler filler filler -->",
-        "<Shell text='Hello!'>",
-        "  <Shell.layout>",
-        "    <RowLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    // select "button" and delete
-    {
-      XmlObjectInfo button = getObjectByName("button");
-      tree.select(button);
-      tree.assertPrimarySelected(button);
-      button.delete();
-    }
-    // undo
-    getUndoAction().run();
-    // "button" exists and selected
-    fetchContentFields();
-    XmlObjectInfo button = getObjectByName("button");
-    tree.assertPrimarySelected(button);
-    canvas.assertPrimarySelected(button);
-  }
+	/**
+	 * Following scenario should work:
+	 * <ol>
+	 * <li>Select "button";</li>
+	 * <li>Delete "button", it disappears;</li>
+	 * <li>Undo;</li>
+	 * <li>"button" should be visible and selected.</li>
+	 * </ol>
+	 */
+	public void test_restoreSelection_afterDelete_thenUndo() throws Exception {
+		openEditor(
+				"<!-- filler filler filler filler filler -->",
+				"<!-- filler filler filler filler filler -->",
+				"<Shell text='Hello!'>",
+				"  <Shell.layout>",
+				"    <RowLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		// select "button" and delete
+		{
+			XmlObjectInfo button = getObjectByName("button");
+			tree.select(button);
+			tree.assertPrimarySelected(button);
+			button.delete();
+		}
+		// undo
+		getUndoAction().run();
+		// "button" exists and selected
+		fetchContentFields();
+		XmlObjectInfo button = getObjectByName("button");
+		tree.assertPrimarySelected(button);
+		canvas.assertPrimarySelected(button);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Expanded
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test that when we select component, its parent become expanded.
-   */
-  public void test_expandOnSelection() throws Exception {
-    XmlObjectInfo shell =
-        openEditor(
-            "<!-- filler filler filler filler filler -->",
-            "<!-- filler filler filler filler filler -->",
-            "<Shell text='Hello!'>",
-            "  <Shell.layout>",
-            "    <RowLayout/>",
-            "  </Shell.layout>",
-            "  <Button wbp:name='button' text='Button'/>",
-            "</Shell>");
-    XmlObjectInfo button = getObjectByName("button");
-    // collapse all
-    {
-      tree.collapseAll();
-      tree.assertNotExpandedObjects(shell);
-    }
-    // select "button", "shell" should be expanded
-    {
-      canvas.select(button);
-      tree.assertExpandedObjects(shell);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Expanded
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test that when we select component, its parent become expanded.
+	 */
+	public void test_expandOnSelection() throws Exception {
+		XmlObjectInfo shell =
+				openEditor(
+						"<!-- filler filler filler filler filler -->",
+						"<!-- filler filler filler filler filler -->",
+						"<Shell text='Hello!'>",
+						"  <Shell.layout>",
+						"    <RowLayout/>",
+						"  </Shell.layout>",
+						"  <Button wbp:name='button' text='Button'/>",
+						"</Shell>");
+		XmlObjectInfo button = getObjectByName("button");
+		// collapse all
+		{
+			tree.collapseAll();
+			tree.assertNotExpandedObjects(shell);
+		}
+		// select "button", "shell" should be expanded
+		{
+			canvas.select(button);
+			tree.assertExpandedObjects(shell);
+		}
+	}
 
-  /**
-   * When we open editor, it automatically expands components from root, if "parent" has only one
-   * "child".
-   * <p>
-   * Here we have {@link Shell} with single {@link Button}, so {@link Shell} should be expanded.
-   */
-  public void test_expandOnOpen_1() throws Exception {
-    XmlObjectInfo shell =
-        openEditor(
-            "<!-- filler filler filler filler filler -->",
-            "<!-- filler filler filler filler filler -->",
-            "<Shell text='Hello!'>",
-            "  <Shell.layout>",
-            "    <FillLayout/>",
-            "  </Shell.layout>",
-            "  <Button wbp:name='button' text='Button'/>",
-            "</Shell>");
-    // "shell" should be expanded
-    tree.assertExpandedObjects(shell);
-  }
+	/**
+	 * When we open editor, it automatically expands components from root, if "parent" has only one
+	 * "child".
+	 * <p>
+	 * Here we have {@link Shell} with single {@link Button}, so {@link Shell} should be expanded.
+	 */
+	public void test_expandOnOpen_1() throws Exception {
+		XmlObjectInfo shell =
+				openEditor(
+						"<!-- filler filler filler filler filler -->",
+						"<!-- filler filler filler filler filler -->",
+						"<Shell text='Hello!'>",
+						"  <Shell.layout>",
+						"    <FillLayout/>",
+						"  </Shell.layout>",
+						"  <Button wbp:name='button' text='Button'/>",
+						"</Shell>");
+		// "shell" should be expanded
+		tree.assertExpandedObjects(shell);
+	}
 
-  /**
-   * When we open editor, it automatically expands components from root, if "parent" has only one
-   * "child".
-   * <p>
-   * Here we have {@link Shell} with {@link Composite}, with single {@link Button}, so {@link Shell}
-   * and {@link Composite} should be expanded.
-   */
-  public void test_expandOnOpen_2() throws Exception {
-    XmlObjectInfo shell =
-        openEditor(
-            "<Shell text='Hello!'>",
-            "  <Shell.layout>",
-            "    <FillLayout/>",
-            "  </Shell.layout>",
-            "  <Composite wbp:name='composite'>",
-            "    <Shell.layout>",
-            "      <RowLayout/>",
-            "    </Shell.layout>",
-            "    <Button text='Button'/>",
-            "  </Composite>",
-            "</Shell>");
-    XmlObjectInfo composite = getObjectByName("composite");
-    // "shell" and "composite" should be expanded
-    tree.assertExpandedObjects(shell, composite);
-  }
+	/**
+	 * When we open editor, it automatically expands components from root, if "parent" has only one
+	 * "child".
+	 * <p>
+	 * Here we have {@link Shell} with {@link Composite}, with single {@link Button}, so {@link Shell}
+	 * and {@link Composite} should be expanded.
+	 */
+	public void test_expandOnOpen_2() throws Exception {
+		XmlObjectInfo shell =
+				openEditor(
+						"<Shell text='Hello!'>",
+						"  <Shell.layout>",
+						"    <FillLayout/>",
+						"  </Shell.layout>",
+						"  <Composite wbp:name='composite'>",
+						"    <Shell.layout>",
+						"      <RowLayout/>",
+						"    </Shell.layout>",
+						"    <Button text='Button'/>",
+						"  </Composite>",
+						"</Shell>");
+		XmlObjectInfo composite = getObjectByName("composite");
+		// "shell" and "composite" should be expanded
+		tree.assertExpandedObjects(shell, composite);
+	}
 
-  /**
-   * When we open editor, it automatically expands components from root, if "parent" has only one
-   * "child".
-   * <p>
-   * Here we have {@link Shell} with two {@link Composite}s, so only {@link Shell} should be
-   * expanded.
-   */
-  public void test_expandOnOpen_3() throws Exception {
-    XmlObjectInfo shell =
-        openEditor(
-            "<Shell text='Hello!'>",
-            "  <Shell.layout>",
-            "    <FillLayout/>",
-            "  </Shell.layout>",
-            "  <Composite wbp:name='composite_1'>",
-            "    <Shell.layout>",
-            "      <RowLayout/>",
-            "    </Shell.layout>",
-            "    <Button text='Button'/>",
-            "  </Composite>",
-            "  <Composite wbp:name='composite_2'>",
-            "    <Shell.layout>",
-            "      <RowLayout/>",
-            "    </Shell.layout>",
-            "    <Button text='Button'/>",
-            "  </Composite>",
-            "</Shell>");
-    // only "shell" should be expanded
-    tree.assertExpandedObjects(shell);
-  }
+	/**
+	 * When we open editor, it automatically expands components from root, if "parent" has only one
+	 * "child".
+	 * <p>
+	 * Here we have {@link Shell} with two {@link Composite}s, so only {@link Shell} should be
+	 * expanded.
+	 */
+	public void test_expandOnOpen_3() throws Exception {
+		XmlObjectInfo shell =
+				openEditor(
+						"<Shell text='Hello!'>",
+						"  <Shell.layout>",
+						"    <FillLayout/>",
+						"  </Shell.layout>",
+						"  <Composite wbp:name='composite_1'>",
+						"    <Shell.layout>",
+						"      <RowLayout/>",
+						"    </Shell.layout>",
+						"    <Button text='Button'/>",
+						"  </Composite>",
+						"  <Composite wbp:name='composite_2'>",
+						"    <Shell.layout>",
+						"      <RowLayout/>",
+						"    </Shell.layout>",
+						"    <Button text='Button'/>",
+						"  </Composite>",
+						"</Shell>");
+		// only "shell" should be expanded
+		tree.assertExpandedObjects(shell);
+	}
 
-  /**
-   * Test that after reparse expanded state it restored.
-   */
-  public void test_restoreExpanded() throws Exception {
-    openEditor(
-        "<Shell text='Hello!'>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <Composite wbp:name='composite_1'>",
-        "    <Shell.layout>",
-        "      <RowLayout/>",
-        "    </Shell.layout>",
-        "    <Button text='Button' wbp:name='button_1'/>",
-        "  </Composite>",
-        "  <Composite wbp:name='composite_2'>",
-        "    <Shell.layout>",
-        "      <RowLayout/>",
-        "    </Shell.layout>",
-        "    <Button text='Button'/>",
-        "  </Composite>",
-        "</Shell>");
-    {
-      XmlObjectInfo shell = m_lastObject;
-      XmlObjectInfo composite_1 = getObjectByName("composite_1");
-      XmlObjectInfo composite_2 = getObjectByName("composite_2");
-      XmlObjectInfo button_1 = getObjectByName("button_1");
-      // initially only "shell" is expanded
-      tree.assertExpandedObjects(shell);
-      // expand all
-      tree.select(button_1);
-      waitEventLoop(0);
-      tree.assertExpandedObjects(shell, composite_1);
-      tree.assertNotExpandedObjects(composite_2);
-    }
-    // reparse
-    IDesignPageSite.Helper.getSite(m_lastObject).reparse();
-    fetchContentFields();
-    {
-      XmlObjectInfo shell = m_lastObject;
-      XmlObjectInfo composite_1 = getObjectByName("composite_1");
-      XmlObjectInfo composite_2 = getObjectByName("composite_2");
-      // expanded state restored
-      tree.assertExpandedObjects(shell, composite_1);
-      tree.assertNotExpandedObjects(composite_2);
-    }
-  }
+	/**
+	 * Test that after reparse expanded state it restored.
+	 */
+	public void test_restoreExpanded() throws Exception {
+		openEditor(
+				"<Shell text='Hello!'>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <Composite wbp:name='composite_1'>",
+				"    <Shell.layout>",
+				"      <RowLayout/>",
+				"    </Shell.layout>",
+				"    <Button text='Button' wbp:name='button_1'/>",
+				"  </Composite>",
+				"  <Composite wbp:name='composite_2'>",
+				"    <Shell.layout>",
+				"      <RowLayout/>",
+				"    </Shell.layout>",
+				"    <Button text='Button'/>",
+				"  </Composite>",
+				"</Shell>");
+		{
+			XmlObjectInfo shell = m_lastObject;
+			XmlObjectInfo composite_1 = getObjectByName("composite_1");
+			XmlObjectInfo composite_2 = getObjectByName("composite_2");
+			XmlObjectInfo button_1 = getObjectByName("button_1");
+			// initially only "shell" is expanded
+			tree.assertExpandedObjects(shell);
+			// expand all
+			tree.select(button_1);
+			waitEventLoop(0);
+			tree.assertExpandedObjects(shell, composite_1);
+			tree.assertNotExpandedObjects(composite_2);
+		}
+		// reparse
+		IDesignPageSite.Helper.getSite(m_lastObject).reparse();
+		fetchContentFields();
+		{
+			XmlObjectInfo shell = m_lastObject;
+			XmlObjectInfo composite_1 = getObjectByName("composite_1");
+			XmlObjectInfo composite_2 = getObjectByName("composite_2");
+			// expanded state restored
+			tree.assertExpandedObjects(shell, composite_1);
+			tree.assertNotExpandedObjects(composite_2);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // isDirty()
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for "dirty" flag management.
-   */
-  public void test_isDirty_undo() throws Exception {
-    openEditor("<Shell text='foo'/>");
-    // initially not dirty
-    assertFalse(m_designerEditor.isDirty());
-    // set new "text"
-    m_lastObject.getPropertyByTitle("text").setValue("bar");
-    assertTrue(m_designerEditor.isDirty());
-    // do "undo", again not dirty
-    getUndoAction().run();
-    assertFalse(m_designerEditor.isDirty());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// isDirty()
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for "dirty" flag management.
+	 */
+	public void test_isDirty_undo() throws Exception {
+		openEditor("<Shell text='foo'/>");
+		// initially not dirty
+		assertFalse(m_designerEditor.isDirty());
+		// set new "text"
+		m_lastObject.getPropertyByTitle("text").setValue("bar");
+		assertTrue(m_designerEditor.isDirty());
+		// do "undo", again not dirty
+		getUndoAction().run();
+		assertFalse(m_designerEditor.isDirty());
+	}
 
-  /**
-   * Test for "dirty" flag management.
-   */
-  public void test_isDirty_save() throws Exception {
-    openEditor("<Shell text='foo'/>");
-    // initially not dirty
-    assertFalse(m_designerEditor.isDirty());
-    // set new "text"
-    m_lastObject.getPropertyByTitle("text").setValue("bar");
-    assertTrue(m_designerEditor.isDirty());
-    // do save
-    m_designerEditor.doSave(new NullProgressMonitor());
-    assertFalse(m_designerEditor.isDirty());
-  }
+	/**
+	 * Test for "dirty" flag management.
+	 */
+	public void test_isDirty_save() throws Exception {
+		openEditor("<Shell text='foo'/>");
+		// initially not dirty
+		assertFalse(m_designerEditor.isDirty());
+		// set new "text"
+		m_lastObject.getPropertyByTitle("text").setValue("bar");
+		assertTrue(m_designerEditor.isDirty());
+		// do save
+		m_designerEditor.doSave(new NullProgressMonitor());
+		assertFalse(m_designerEditor.isDirty());
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/editor/XmlDesignPageTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/editor/XmlDesignPageTest.java
index 4fb2e0047..3b93e76ac 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/editor/XmlDesignPageTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/editor/XmlDesignPageTest.java
@@ -47,453 +47,453 @@
  * @author scheglov_ke
  */
 public class XmlDesignPageTest extends XwtGefTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Life cycle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void tearDown() throws Exception {
-    DesignerExceptionUtils.flushErrorEntriesCache();
-    DesignerPlugin.setDisplayExceptionOnConsole(true);
-    EnvironmentUtils.setTestingTime(true);
-    super.tearDown();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Life cycle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void tearDown() throws Exception {
+		DesignerExceptionUtils.flushErrorEntriesCache();
+		DesignerPlugin.setDisplayExceptionOnConsole(true);
+		EnvironmentUtils.setTestingTime(true);
+		super.tearDown();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_getUndoManager() throws Exception {
-    openEditor("<Shell/>");
-    // we can access it
-    assertNotNull(m_designPage.getUndoManager());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_getUndoManager() throws Exception {
+		openEditor("<Shell/>");
+		// we can access it
+		assertNotNull(m_designPage.getUndoManager());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Palette
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test that palette can be extracted into separate view.
-   */
-  public void test_extractPalette() throws Exception {
-    openEditor("<Shell/>");
-    // make editor not maximized, or palette will not be extracted
-    IWorkbenchPage activePage = DesignerPlugin.getActivePage();
-    activePage.toggleZoom(activePage.getActivePartReference());
-    waitEventLoop(0);
-    // prepare UIContext
-    UiContext context = new UiContext();
-    Control palette = findPalette(context);
-    // palette is on "Design" page
-    assertTrue(UiUtils.isChildOf(m_designPage.getControl(), palette));
-    // show "Palette" view
-    activePage.showView(PaletteView.ID);
-    waitEventLoop(0);
-    try {
-      // palette is NOT on "Design" page
-      assertFalse(UiUtils.isChildOf(m_designPage.getControl(), palette));
-    } finally {
-      TestUtils.closeAllViews();
-    }
-    // "Palette" view was closed, so palette is again on "Design" page
-    assertTrue(UiUtils.isChildOf(m_designPage.getControl(), palette));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Palette
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test that palette can be extracted into separate view.
+	 */
+	public void test_extractPalette() throws Exception {
+		openEditor("<Shell/>");
+		// make editor not maximized, or palette will not be extracted
+		IWorkbenchPage activePage = DesignerPlugin.getActivePage();
+		activePage.toggleZoom(activePage.getActivePartReference());
+		waitEventLoop(0);
+		// prepare UIContext
+		UiContext context = new UiContext();
+		Control palette = findPalette(context);
+		// palette is on "Design" page
+		assertTrue(UiUtils.isChildOf(m_designPage.getControl(), palette));
+		// show "Palette" view
+		activePage.showView(PaletteView.ID);
+		waitEventLoop(0);
+		try {
+			// palette is NOT on "Design" page
+			assertFalse(UiUtils.isChildOf(m_designPage.getControl(), palette));
+		} finally {
+			TestUtils.closeAllViews();
+		}
+		// "Palette" view was closed, so palette is again on "Design" page
+		assertTrue(UiUtils.isChildOf(m_designPage.getControl(), palette));
+	}
 
-  /**
-   * @return the palette {@link Control}.
-   */
-  private Control findPalette(UiContext context) {
-    return context.findWidgets(PaletteComposite.class).get(0);
-  }
+	/**
+	 * @return the palette {@link Control}.
+	 */
+	private Control findPalette(UiContext context) {
+		return context.findWidgets(PaletteComposite.class).get(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // DesignerState
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final String PROCESSORS_POINT_ID = "org.eclipse.wb.core.xml.rootProcessors";
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// DesignerState
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final String PROCESSORS_POINT_ID = "org.eclipse.wb.core.xml.rootProcessors";
 
-  /**
-   * Test for correctness of {@link DesignerState} changing.
-   */
-  public void test_DesignerState() throws Exception {
-    {
-      IFile file =
-          setFileContentSrc(
-              "test/Test.xwt",
-              getTestSource(
-                  "// filler filler filler filler filler",
-                  "// filler filler filler filler filler",
-                  "<Shell/>"));
-      openEditor(file);
-    }
-    // "Design" page is not opened yet
-    assertSame(DesignerState.Undefined, m_designPage.getDesignerState());
-    // install "root processor" to get "parsing" state
-    {
-      MyDesignerStateProcessor.designPage = m_designPage;
-      String contribution =
-          "  <processor class='" + MyDesignerStateProcessor.class.getName() + "'/>";
-      TestUtils.addDynamicExtension(PROCESSORS_POINT_ID, contribution);
-    }
-    // open "Design"
-    try {
-      openDesignPage();
-    } finally {
-      MyDesignerStateProcessor.designPage = null;
-      TestUtils.removeDynamicExtension(PROCESSORS_POINT_ID);
-    }
-    // during parsing we see "Parsing" state
-    assertSame(DesignerState.Parsing, MyDesignerStateProcessor.state);
-    // successful parsing
-    assertSame(DesignerState.Successful, m_designPage.getDesignerState());
-  }
+	/**
+	 * Test for correctness of {@link DesignerState} changing.
+	 */
+	public void test_DesignerState() throws Exception {
+		{
+			IFile file =
+					setFileContentSrc(
+							"test/Test.xwt",
+							getTestSource(
+									"// filler filler filler filler filler",
+									"// filler filler filler filler filler",
+									"<Shell/>"));
+			openEditor(file);
+		}
+		// "Design" page is not opened yet
+		assertSame(DesignerState.Undefined, m_designPage.getDesignerState());
+		// install "root processor" to get "parsing" state
+		{
+			MyDesignerStateProcessor.designPage = m_designPage;
+			String contribution =
+					"  <processor class='" + MyDesignerStateProcessor.class.getName() + "'/>";
+			TestUtils.addDynamicExtension(PROCESSORS_POINT_ID, contribution);
+		}
+		// open "Design"
+		try {
+			openDesignPage();
+		} finally {
+			MyDesignerStateProcessor.designPage = null;
+			TestUtils.removeDynamicExtension(PROCESSORS_POINT_ID);
+		}
+		// during parsing we see "Parsing" state
+		assertSame(DesignerState.Parsing, MyDesignerStateProcessor.state);
+		// successful parsing
+		assertSame(DesignerState.Successful, m_designPage.getDesignerState());
+	}
 
-  public static final class MyDesignerStateProcessor implements IRootProcessor {
-    private static XmlDesignPage designPage;
-    private static DesignerState state;
+	public static final class MyDesignerStateProcessor implements IRootProcessor {
+		private static XmlDesignPage designPage;
+		private static DesignerState state;
 
-    @Override
-    public void process(XmlObjectInfo root) throws Exception {
-      state = designPage.getDesignerState();
-    }
-  }
+		@Override
+		public void process(XmlObjectInfo root) throws Exception {
+			state = designPage.getDesignerState();
+		}
+	}
 
-  /**
-   * Test for {@link DesignerState#Error} state.
-   */
-  public void test_DesignerState_Error() throws Exception {
-    removeExceptionsListener();
-    DesignerPlugin.setDisplayExceptionOnConsole(false);
-    // open, exception will happen
-    openEditor("<Shell>");
-    // so, "Error" state
-    assertSame(DesignerState.Error, m_designPage.getDesignerState());
-  }
+	/**
+	 * Test for {@link DesignerState#Error} state.
+	 */
+	public void test_DesignerState_Error() throws Exception {
+		removeExceptionsListener();
+		DesignerPlugin.setDisplayExceptionOnConsole(false);
+		// open, exception will happen
+		openEditor("<Shell>");
+		// so, "Error" state
+		assertSame(DesignerState.Error, m_designPage.getDesignerState());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // DesignPageSite
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test that {@link IDesignPageSite} is installed by {@link XmlDesignPage} and works.
-   */
-  public void test_DesignPageSite() throws Exception {
-    openEditor("<Shell/>");
-    IDesignPageSite site = IDesignPageSite.Helper.getSite(m_lastObject);
-    assertNotNull(site);
-    // go to position in XML source
-    {
-      site.showSourcePosition(1);
-      waitEventLoop(0);
-      assertXMLSelection(1, 0);
-      assertEquals(1, m_designerEditor.getActivePage());
-    }
-    // open position in XML source
-    {
-      site.openSourcePosition(2);
-      waitEventLoop(0);
-      assertXMLSelection(2, 0);
-      assertEquals(0, m_designerEditor.getActivePage());
-    }
-    // reparse()
-    {
-      XmlObjectInfo oldObject = m_lastObject;
-      site.reparse();
-      fetchContentFields();
-      assertNotSame(oldObject, m_lastObject);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// DesignPageSite
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test that {@link IDesignPageSite} is installed by {@link XmlDesignPage} and works.
+	 */
+	public void test_DesignPageSite() throws Exception {
+		openEditor("<Shell/>");
+		IDesignPageSite site = IDesignPageSite.Helper.getSite(m_lastObject);
+		assertNotNull(site);
+		// go to position in XML source
+		{
+			site.showSourcePosition(1);
+			waitEventLoop(0);
+			assertXMLSelection(1, 0);
+			assertEquals(1, m_designerEditor.getActivePage());
+		}
+		// open position in XML source
+		{
+			site.openSourcePosition(2);
+			waitEventLoop(0);
+			assertXMLSelection(2, 0);
+			assertEquals(0, m_designerEditor.getActivePage());
+		}
+		// reparse()
+		{
+			XmlObjectInfo oldObject = m_lastObject;
+			site.reparse();
+			fetchContentFields();
+			assertNotSame(oldObject, m_lastObject);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ExceptionCompositeXML
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private XmlExceptionComposite getVisibleExceptionCompositeXML(UiContext context) {
-    XmlExceptionComposite exceptionCompositeXML =
-        context.findFirstWidget(XmlExceptionComposite.class);
-    assertNotNull(exceptionCompositeXML);
-    assertTrue(exceptionCompositeXML.isVisible());
-    assertEquals(1, m_designerEditor.getActivePage());
-    return exceptionCompositeXML;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ExceptionCompositeXML
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private XmlExceptionComposite getVisibleExceptionCompositeXML(UiContext context) {
+		XmlExceptionComposite exceptionCompositeXML =
+				context.findFirstWidget(XmlExceptionComposite.class);
+		assertNotNull(exceptionCompositeXML);
+		assertTrue(exceptionCompositeXML.isVisible());
+		assertEquals(1, m_designerEditor.getActivePage());
+		return exceptionCompositeXML;
+	}
 
-  /**
-   * Test for {@link XmlExceptionComposite}.
-   * <p>
-   * Use "Switch to code" button.
-   */
-  public void test_ExceptionCompositeXML_switchToCode() throws Exception {
-    removeExceptionsListener();
-    DesignerPlugin.setDisplayExceptionOnConsole(false);
-    // open, exception will happen
-    openEditor("<Shell>");
-    // prepare context
-    UiContext context = new UiContext();
-    XmlExceptionComposite exceptionCompositeXML = getVisibleExceptionCompositeXML(context);
-    // switch to "XML" page
-    context.clickButton("Switch to code");
-    assertEquals(0, m_designerEditor.getActivePage());
-    // ExceptionCompositeXML is not visible
-    assertFalse(exceptionCompositeXML.isVisible());
-  }
+	/**
+	 * Test for {@link XmlExceptionComposite}.
+	 * <p>
+	 * Use "Switch to code" button.
+	 */
+	public void test_ExceptionCompositeXML_switchToCode() throws Exception {
+		removeExceptionsListener();
+		DesignerPlugin.setDisplayExceptionOnConsole(false);
+		// open, exception will happen
+		openEditor("<Shell>");
+		// prepare context
+		UiContext context = new UiContext();
+		XmlExceptionComposite exceptionCompositeXML = getVisibleExceptionCompositeXML(context);
+		// switch to "XML" page
+		context.clickButton("Switch to code");
+		assertEquals(0, m_designerEditor.getActivePage());
+		// ExceptionCompositeXML is not visible
+		assertFalse(exceptionCompositeXML.isVisible());
+	}
 
-  /**
-   * Test for {@link XmlExceptionComposite}.
-   * <p>
-   * Use "Reparse" button.
-   */
-  public void test_ExceptionCompositeXML_reparse() throws Exception {
-    removeExceptionsListener();
-    DesignerPlugin.setDisplayExceptionOnConsole(false);
-    // open, exception will happen
-    openEditor("<Shell>");
-    // prepare context
-    UiContext context = new UiContext();
-    XmlExceptionComposite exceptionCompositeXML = getVisibleExceptionCompositeXML(context);
-    // no "last Object"
-    assertNull(m_lastObject);
-    // replace with valid XML
-    setFileContentSrc("test/Test.xwt", "<Shell/>");
-    // use "Reparse"
-    context.clickButton("Reparse");
-    // "Design" is active and no "error"
-    assertEquals(1, m_designerEditor.getActivePage());
-    assertFalse(exceptionCompositeXML.isVisible());
-    // has "last Object"
-    fetchContentFields();
-    assertNotNull(m_lastObject);
-  }
+	/**
+	 * Test for {@link XmlExceptionComposite}.
+	 * <p>
+	 * Use "Reparse" button.
+	 */
+	public void test_ExceptionCompositeXML_reparse() throws Exception {
+		removeExceptionsListener();
+		DesignerPlugin.setDisplayExceptionOnConsole(false);
+		// open, exception will happen
+		openEditor("<Shell>");
+		// prepare context
+		UiContext context = new UiContext();
+		XmlExceptionComposite exceptionCompositeXML = getVisibleExceptionCompositeXML(context);
+		// no "last Object"
+		assertNull(m_lastObject);
+		// replace with valid XML
+		setFileContentSrc("test/Test.xwt", "<Shell/>");
+		// use "Reparse"
+		context.clickButton("Reparse");
+		// "Design" is active and no "error"
+		assertEquals(1, m_designerEditor.getActivePage());
+		assertFalse(exceptionCompositeXML.isVisible());
+		// has "last Object"
+		fetchContentFields();
+		assertNotNull(m_lastObject);
+	}
 
-  /**
-   * Test for {@link XmlExceptionComposite}.
-   * <p>
-   * Use "Contact Support..." button.
-   */
-  public void test_ExceptionCompositeXML_contactSupport() throws Exception {
-    removeExceptionsListener();
-    DesignerPlugin.setDisplayExceptionOnConsole(false);
-    // open, exception will happen
-    openEditor("<Shell>");
-    // ExceptionCompositeXML is visible
-    {
-      UiContext context = new UiContext();
-      getVisibleExceptionCompositeXML(context);
-    }
-    // open "Create Report" dialog
-    new UiContext().executeAndCheck(new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        context.clickButton("Create Report...");
-      }
-    }, new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        context.useShell("Create Report");
-        context.clickButton("Cancel");
-      }
-    });
-  }
+	/**
+	 * Test for {@link XmlExceptionComposite}.
+	 * <p>
+	 * Use "Contact Support..." button.
+	 */
+	public void test_ExceptionCompositeXML_contactSupport() throws Exception {
+		removeExceptionsListener();
+		DesignerPlugin.setDisplayExceptionOnConsole(false);
+		// open, exception will happen
+		openEditor("<Shell>");
+		// ExceptionCompositeXML is visible
+		{
+			UiContext context = new UiContext();
+			getVisibleExceptionCompositeXML(context);
+		}
+		// open "Create Report" dialog
+		new UiContext().executeAndCheck(new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				context.clickButton("Create Report...");
+			}
+		}, new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				context.useShell("Create Report");
+				context.clickButton("Cancel");
+			}
+		});
+	}
 
-  /**
-   * Test for {@link XmlExceptionComposite}.
-   * <p>
-   * Cause exception during editing operation, so {@link XmlExceptionComposite} should be displayed,
-   * with "post-mortem" screenshot.
-   */
-  public void test_ExceptionCompositeXML_withScreenshot() throws Exception {
-    removeExceptionsListener();
-    DesignerPlugin.setDisplayExceptionOnConsole(false);
-    // open
-    openEditor("<Shell/>");
-    // prepare UIContext
-    UiContext context = new UiContext();
-    // no ExceptionCompositeXML yet
-    assertSame(null, context.findFirstWidget(XmlExceptionComposite.class));
-    // run "edit operation" which causes exception
-    EnvironmentUtils.setTestingTime(false);
-    ExecutionUtils.run(m_lastObject, new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        throw new Error();
-      }
-    });
-    // ExceptionCompositeXML is visible
-    XmlExceptionComposite exceptionCompositeXML = getVisibleExceptionCompositeXML(context);
-    // ...and has screenshot
-    Image screenshot =
-        (Image) ReflectionUtils.getFieldObject(exceptionCompositeXML, "m_screenshotImage");
-    assertNotNull(screenshot);
-    assertFalse(screenshot.isDisposed());
-    // close all editors, so dispose ExceptionCompositeXML, so screenshot
-    TestUtils.closeAllEditors();
-    assertTrue(screenshot.isDisposed());
-  }
+	/**
+	 * Test for {@link XmlExceptionComposite}.
+	 * <p>
+	 * Cause exception during editing operation, so {@link XmlExceptionComposite} should be displayed,
+	 * with "post-mortem" screenshot.
+	 */
+	public void test_ExceptionCompositeXML_withScreenshot() throws Exception {
+		removeExceptionsListener();
+		DesignerPlugin.setDisplayExceptionOnConsole(false);
+		// open
+		openEditor("<Shell/>");
+		// prepare UIContext
+		UiContext context = new UiContext();
+		// no ExceptionCompositeXML yet
+		assertSame(null, context.findFirstWidget(XmlExceptionComposite.class));
+		// run "edit operation" which causes exception
+		EnvironmentUtils.setTestingTime(false);
+		ExecutionUtils.run(m_lastObject, new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				throw new Error();
+			}
+		});
+		// ExceptionCompositeXML is visible
+		XmlExceptionComposite exceptionCompositeXML = getVisibleExceptionCompositeXML(context);
+		// ...and has screenshot
+		Image screenshot =
+				(Image) ReflectionUtils.getFieldObject(exceptionCompositeXML, "m_screenshotImage");
+		assertNotNull(screenshot);
+		assertFalse(screenshot.isDisposed());
+		// close all editors, so dispose ExceptionCompositeXML, so screenshot
+		TestUtils.closeAllEditors();
+		assertTrue(screenshot.isDisposed());
+	}
 
-  /**
-   * Test for {@link XmlExceptionComposite}.
-   * <p>
-   * Cause exception with position during editing operation, so {@link XmlExceptionComposite} should
-   * be displayed, with "Go to problem" button.
-   */
-  public void test_ExceptionCompositeXML_withPosition() throws Exception {
-    removeExceptionsListener();
-    DesignerPlugin.setDisplayExceptionOnConsole(false);
-    // open
-    openEditor("<Shell/>");
-    // run "edit operation" which causes exception
-    EnvironmentUtils.setTestingTime(false);
-    ExecutionUtils.run(m_lastObject, new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        Throwable e = new Error();
-        DesignerExceptionUtils.setSourcePosition(e, 5);
-        ReflectionUtils.propagate(e);
-      }
-    });
-    // prepare UIContext
-    UiContext context = new UiContext();
-    // ExceptionCompositeXML is visible
-    getVisibleExceptionCompositeXML(context);
-    // use "Go to problem" button
-    context.clickButton("Go to problem");
-    waitEventLoop(0);
-    assertEquals(0, m_designerEditor.getActivePage());
-    assertXMLSelection(5, 0);
-  }
+	/**
+	 * Test for {@link XmlExceptionComposite}.
+	 * <p>
+	 * Cause exception with position during editing operation, so {@link XmlExceptionComposite} should
+	 * be displayed, with "Go to problem" button.
+	 */
+	public void test_ExceptionCompositeXML_withPosition() throws Exception {
+		removeExceptionsListener();
+		DesignerPlugin.setDisplayExceptionOnConsole(false);
+		// open
+		openEditor("<Shell/>");
+		// run "edit operation" which causes exception
+		EnvironmentUtils.setTestingTime(false);
+		ExecutionUtils.run(m_lastObject, new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				Throwable e = new Error();
+				DesignerExceptionUtils.setSourcePosition(e, 5);
+				ReflectionUtils.propagate(e);
+			}
+		});
+		// prepare UIContext
+		UiContext context = new UiContext();
+		// ExceptionCompositeXML is visible
+		getVisibleExceptionCompositeXML(context);
+		// use "Go to problem" button
+		context.clickButton("Go to problem");
+		waitEventLoop(0);
+		assertEquals(0, m_designerEditor.getActivePage());
+		assertXMLSelection(5, 0);
+	}
 
-  /**
-   * Test for {@link XmlExceptionComposite}.
-   * <p>
-   * Cause exception in GEF {@link Command}, so {@link XmlExceptionComposite} should be displayed.
-   */
-  public void test_ExceptionCompositeXML_exceptionInCommand() throws Exception {
-    removeExceptionsListener();
-    DesignerPlugin.setDisplayExceptionOnConsole(false);
-    // open
-    openEditor("<Shell/>");
-    // run "Command" which causes exception
-    EnvironmentUtils.setTestingTime(false);
-    try {
-      m_viewerCanvas.getEditDomain().executeCommand(new Command() {
-        @Override
-        public void execute() throws Exception {
-          throw new Error();
-        }
-      });
-      fail();
-    } catch (CancelOperationError e) {
-    }
-    // prepare UIContext
-    UiContext context = new UiContext();
-    // ExceptionCompositeXML is visible
-    getVisibleExceptionCompositeXML(context);
-  }
+	/**
+	 * Test for {@link XmlExceptionComposite}.
+	 * <p>
+	 * Cause exception in GEF {@link Command}, so {@link XmlExceptionComposite} should be displayed.
+	 */
+	public void test_ExceptionCompositeXML_exceptionInCommand() throws Exception {
+		removeExceptionsListener();
+		DesignerPlugin.setDisplayExceptionOnConsole(false);
+		// open
+		openEditor("<Shell/>");
+		// run "Command" which causes exception
+		EnvironmentUtils.setTestingTime(false);
+		try {
+			m_viewerCanvas.getEditDomain().executeCommand(new Command() {
+				@Override
+				public void execute() throws Exception {
+					throw new Error();
+				}
+			});
+			fail();
+		} catch (CancelOperationError e) {
+		}
+		// prepare UIContext
+		UiContext context = new UiContext();
+		// ExceptionCompositeXML is visible
+		getVisibleExceptionCompositeXML(context);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // WarningCompositeXML
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link XmlWarningComposite}.
-   * <p>
-   * Use "Switch to code" button.
-   */
-  public void test_WarningCompositeXML_switchToCode() throws Exception {
-    // ensure WarningCompositeXML opened
-    generateWarning();
-    // prepare context
-    UiContext context = new UiContext();
-    XmlWarningComposite warningCompositeXML = getVisibleWarningCompositeXML(context);
-    // switch to "XML" page
-    context.clickButton("Switch to code");
-    // "Source" is active and no "warning"
-    assertEquals(0, m_designerEditor.getActivePage());
-    assertFalse(warningCompositeXML.isVisible());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// WarningCompositeXML
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link XmlWarningComposite}.
+	 * <p>
+	 * Use "Switch to code" button.
+	 */
+	public void test_WarningCompositeXML_switchToCode() throws Exception {
+		// ensure WarningCompositeXML opened
+		generateWarning();
+		// prepare context
+		UiContext context = new UiContext();
+		XmlWarningComposite warningCompositeXML = getVisibleWarningCompositeXML(context);
+		// switch to "XML" page
+		context.clickButton("Switch to code");
+		// "Source" is active and no "warning"
+		assertEquals(0, m_designerEditor.getActivePage());
+		assertFalse(warningCompositeXML.isVisible());
+	}
 
-  /**
-   * Test for {@link XmlWarningComposite}.
-   * <p>
-   * Use "Reparse" button.
-   */
-  public void test_WarningCompositeXML_reparse() throws Exception {
-    // ensure WarningCompositeXML opened
-    generateWarning();
-    XmlObjectInfo oldObject = m_lastObject;
-    assertNotNull(oldObject);
-    // prepare context
-    UiContext context = new UiContext();
-    XmlWarningComposite warningCompositeXML = getVisibleWarningCompositeXML(context);
-    // use "Reparse"
-    context.clickButton("Reparse");
-    // "Design" is active and no "warning"
-    assertEquals(1, m_designerEditor.getActivePage());
-    assertFalse(warningCompositeXML.isVisible());
-    // has "last Object"
-    fetchContentFields();
-    assertNotNull(m_lastObject);
-    assertNotSame(oldObject, m_lastObject);
-  }
+	/**
+	 * Test for {@link XmlWarningComposite}.
+	 * <p>
+	 * Use "Reparse" button.
+	 */
+	public void test_WarningCompositeXML_reparse() throws Exception {
+		// ensure WarningCompositeXML opened
+		generateWarning();
+		XmlObjectInfo oldObject = m_lastObject;
+		assertNotNull(oldObject);
+		// prepare context
+		UiContext context = new UiContext();
+		XmlWarningComposite warningCompositeXML = getVisibleWarningCompositeXML(context);
+		// use "Reparse"
+		context.clickButton("Reparse");
+		// "Design" is active and no "warning"
+		assertEquals(1, m_designerEditor.getActivePage());
+		assertFalse(warningCompositeXML.isVisible());
+		// has "last Object"
+		fetchContentFields();
+		assertNotNull(m_lastObject);
+		assertNotSame(oldObject, m_lastObject);
+	}
 
-  private void generateWarning() throws Exception {
-    // open, OK
-    openEditor("<Shell/>");
-    // disable logging
-    removeExceptionsListener();
-    DesignerPlugin.setDisplayExceptionOnConsole(false);
-    // work with "warning"
-    TestBundle testBundle = new TestBundle();
-    try {
-      testBundle.setFile(
-          "resources/exceptions.xml",
-          getSource(
-              "<exceptions>",
-              "  <exception id='-1000' title='My title' warning='true'></exception>",
-              "</exceptions>"));
-      testBundle.addExtension(
-          "org.eclipse.wb.core.exceptions",
-          "<file path='resources/exceptions.xml'/>");
-      testBundle.install();
-      // generate "warning"
-      final DesignerException designerException = new DesignerException(-1000);
-      try {
-        EnvironmentUtils.setTestingTime(false);
-        ExecutionUtils.run(m_lastObject, new RunnableEx() {
-          @Override
-          public void run() throws Exception {
-            throw designerException;
-          }
-        });
-      } catch (Throwable e) {
-        assertSame(designerException, e);
-      }
-    } finally {
-      testBundle.dispose();
-    }
-  }
+	private void generateWarning() throws Exception {
+		// open, OK
+		openEditor("<Shell/>");
+		// disable logging
+		removeExceptionsListener();
+		DesignerPlugin.setDisplayExceptionOnConsole(false);
+		// work with "warning"
+		TestBundle testBundle = new TestBundle();
+		try {
+			testBundle.setFile(
+					"resources/exceptions.xml",
+					getSource(
+							"<exceptions>",
+							"  <exception id='-1000' title='My title' warning='true'></exception>",
+							"</exceptions>"));
+			testBundle.addExtension(
+					"org.eclipse.wb.core.exceptions",
+					"<file path='resources/exceptions.xml'/>");
+			testBundle.install();
+			// generate "warning"
+			final DesignerException designerException = new DesignerException(-1000);
+			try {
+				EnvironmentUtils.setTestingTime(false);
+				ExecutionUtils.run(m_lastObject, new RunnableEx() {
+					@Override
+					public void run() throws Exception {
+						throw designerException;
+					}
+				});
+			} catch (Throwable e) {
+				assertSame(designerException, e);
+			}
+		} finally {
+			testBundle.dispose();
+		}
+	}
 
-  private XmlWarningComposite getVisibleWarningCompositeXML(UiContext context) {
-    XmlWarningComposite warningCompositeXML = context.findFirstWidget(XmlWarningComposite.class);
-    assertNotNull(warningCompositeXML);
-    assertTrue(warningCompositeXML.isVisible());
-    assertEquals(1, m_designerEditor.getActivePage());
-    return warningCompositeXML;
-  }
+	private XmlWarningComposite getVisibleWarningCompositeXML(UiContext context) {
+		XmlWarningComposite warningCompositeXML = context.findFirstWidget(XmlWarningComposite.class);
+		assertNotNull(warningCompositeXML);
+		assertTrue(warningCompositeXML.isVisible());
+		assertEquals(1, m_designerEditor.getActivePage());
+		return warningCompositeXML;
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/editor/XmlEditorTests.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/editor/XmlEditorTests.java
index 5fec08bd2..e82f23dc5 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/editor/XmlEditorTests.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/editor/XmlEditorTests.java
@@ -22,28 +22,28 @@
  * @author scheglov_ke
  */
 public class XmlEditorTests extends DesignerSuiteTests {
-  public static Test suite() {
-    TestSuite suite = new TestSuite("org.eclipse.wb.xml.editor");
-    // editor
-    suite.addTest(createSingleSuite(AbstractXmlEditorTest.class));
-    suite.addTest(createSingleSuite(EditorLayoutTest.class));
-    suite.addTest(createSingleSuite(UndoManagerTest.class));
-    suite.addTest(createSingleSuite(XmlDesignPageTest.class));
-    suite.addTest(createSingleSuite(DesignContextMenuProviderTest.class));
-    suite.addTest(createSingleSuite(XmlPropertiesToolBarContributorTest.class));
-    suite.addTest(createSingleSuite(SelectSupportTest.class));
-    // actions
-    suite.addTest(createSingleSuite(EditorRelatedActionTest.class));
-    suite.addTest(createSingleSuite(SwitchActionTest.class));
-    suite.addTest(createSingleSuite(SwitchPairEditorActionTest.class));
-    suite.addTest(createSingleSuite(RefreshActionTest.class));
-    suite.addTest(createSingleSuite(TestActionTest.class));
-    suite.addTest(createSingleSuite(DeleteActionTest.class));
-    suite.addTest(createSingleSuite(CopyActionTest.class));
-    suite.addTest(createSingleSuite(CutActionTest.class));
-    // policies
-    suite.addTest(createSingleSuite(TopSelectionEditPolicyTest.class));
-    suite.addTest(createSingleSuite(DirectTextPropertyEditPolicyTest.class));
-    return suite;
-  }
+	public static Test suite() {
+		TestSuite suite = new TestSuite("org.eclipse.wb.xml.editor");
+		// editor
+		suite.addTest(createSingleSuite(AbstractXmlEditorTest.class));
+		suite.addTest(createSingleSuite(EditorLayoutTest.class));
+		suite.addTest(createSingleSuite(UndoManagerTest.class));
+		suite.addTest(createSingleSuite(XmlDesignPageTest.class));
+		suite.addTest(createSingleSuite(DesignContextMenuProviderTest.class));
+		suite.addTest(createSingleSuite(XmlPropertiesToolBarContributorTest.class));
+		suite.addTest(createSingleSuite(SelectSupportTest.class));
+		// actions
+		suite.addTest(createSingleSuite(EditorRelatedActionTest.class));
+		suite.addTest(createSingleSuite(SwitchActionTest.class));
+		suite.addTest(createSingleSuite(SwitchPairEditorActionTest.class));
+		suite.addTest(createSingleSuite(RefreshActionTest.class));
+		suite.addTest(createSingleSuite(TestActionTest.class));
+		suite.addTest(createSingleSuite(DeleteActionTest.class));
+		suite.addTest(createSingleSuite(CopyActionTest.class));
+		suite.addTest(createSingleSuite(CutActionTest.class));
+		// policies
+		suite.addTest(createSingleSuite(TopSelectionEditPolicyTest.class));
+		suite.addTest(createSingleSuite(DirectTextPropertyEditPolicyTest.class));
+		return suite;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/editor/XmlPropertiesToolBarContributorTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/editor/XmlPropertiesToolBarContributorTest.java
index 4e3953347..4bed0d36a 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/editor/XmlPropertiesToolBarContributorTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/editor/XmlPropertiesToolBarContributorTest.java
@@ -27,68 +27,68 @@
  * @author scheglov_ke
  */
 public class XmlPropertiesToolBarContributorTest extends XwtGefTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Life cycle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void tearDown() throws Exception {
-    DesignerExceptionUtils.flushErrorEntriesCache();
-    DesignerPlugin.setDisplayExceptionOnConsole(true);
-    EnvironmentUtils.setTestingTime(true);
-    super.tearDown();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Life cycle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void tearDown() throws Exception {
+		DesignerExceptionUtils.flushErrorEntriesCache();
+		DesignerPlugin.setDisplayExceptionOnConsole(true);
+		EnvironmentUtils.setTestingTime(true);
+		super.tearDown();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Test
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for "Goto definition" action.
-   */
-  public void test_gotoDefinition() throws Exception {
-    openEditor(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <RowLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    XmlObjectInfo button = getObjectByName("button");
-    // prepare UiContext
-    UiContext context = new UiContext();
-    // no selection initially, so no action
-    {
-      ToolItem toolItem = context.getToolItem("Goto definition");
-      assertNull(toolItem);
-    }
-    // select "button", show actions
-    canvas.select(button);
-    // use action
-    {
-      ToolItem toolItem = context.getToolItem("Goto definition");
-      assertNotNull(toolItem);
-      context.click(toolItem, SWT.NONE);
-      waitEventLoop(0);
-    }
-    // assert that position in XML source was opened
-    {
-      int expectedPosition = button.getElement().getOffset();
-      assertXMLSelection(expectedPosition, 0);
-      assertEquals(0, m_designerEditor.getActivePage());
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Test
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for "Goto definition" action.
+	 */
+	public void test_gotoDefinition() throws Exception {
+		openEditor(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <RowLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		XmlObjectInfo button = getObjectByName("button");
+		// prepare UiContext
+		UiContext context = new UiContext();
+		// no selection initially, so no action
+		{
+			ToolItem toolItem = context.getToolItem("Goto definition");
+			assertNull(toolItem);
+		}
+		// select "button", show actions
+		canvas.select(button);
+		// use action
+		{
+			ToolItem toolItem = context.getToolItem("Goto definition");
+			assertNotNull(toolItem);
+			context.click(toolItem, SWT.NONE);
+			waitEventLoop(0);
+		}
+		// assert that position in XML source was opened
+		{
+			int expectedPosition = button.getElement().getOffset();
+			assertXMLSelection(expectedPosition, 0);
+			assertEquals(0, m_designerEditor.getActivePage());
+		}
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/gef/GefTests.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/gef/GefTests.java
index 867b2aec6..1e9795d7e 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/gef/GefTests.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/gef/GefTests.java
@@ -21,9 +21,9 @@
  * @author scheglov_ke
  */
 public class GefTests extends DesignerSuiteTests {
-  public static Test suite() {
-    TestSuite suite = new TestSuite("org.eclipse.wb.xml.gef");
-    suite.addTest(createSingleSuite(OpenListenerEditPolicyTest.class));
-    return suite;
-  }
+	public static Test suite() {
+		TestSuite suite = new TestSuite("org.eclipse.wb.xml.gef");
+		suite.addTest(createSingleSuite(OpenListenerEditPolicyTest.class));
+		return suite;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/gef/OpenListenerEditPolicyTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/gef/OpenListenerEditPolicyTest.java
index a8fc2d351..ef8a0949c 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/gef/OpenListenerEditPolicyTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/gef/OpenListenerEditPolicyTest.java
@@ -26,54 +26,54 @@
  * @author scheglov_ke
  */
 public class OpenListenerEditPolicyTest extends XwtGefTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_0() throws Exception {
-    setFileContentSrc(
-        "test/Test.java",
-        getJavaSource(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "public class Test {",
-            "}"));
-    waitForAutoBuild();
-    // parse
-    openEditor(
-        "// filler filler filler filler filler",
-        "<Shell x:Class='test.Test'>",
-        "  <Shell.layout>",
-        "    <RowLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    XmlObjectInfo button = getObjectByName("button");
-    // double click on "button"
-    canvas.doubleClick(button);
-    // "Java" editor is opened
-    {
-      IEditorPart activeEditor = DesignerPlugin.getActiveEditor();
-      assertThat(activeEditor).isInstanceOf(CompilationUnitEditor.class);
-    }
-    // files updated
-    assertEquals(
-        getJavaSource(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "public class Test {",
-            "  public void onSelection(Event event) {",
-            "  }",
-            "}"),
-        getFileContentSrc("test/Test.java"));
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell x:Class='test.Test'>",
-        "  <Shell.layout>",
-        "    <RowLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button' SelectionEvent='onSelection'/>",
-        "</Shell>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_0() throws Exception {
+		setFileContentSrc(
+				"test/Test.java",
+				getJavaSource(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"public class Test {",
+						"}"));
+		waitForAutoBuild();
+		// parse
+		openEditor(
+				"// filler filler filler filler filler",
+				"<Shell x:Class='test.Test'>",
+				"  <Shell.layout>",
+				"    <RowLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		XmlObjectInfo button = getObjectByName("button");
+		// double click on "button"
+		canvas.doubleClick(button);
+		// "Java" editor is opened
+		{
+			IEditorPart activeEditor = DesignerPlugin.getActiveEditor();
+			assertThat(activeEditor).isInstanceOf(CompilationUnitEditor.class);
+		}
+		// files updated
+		assertEquals(
+				getJavaSource(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"public class Test {",
+						"  public void onSelection(Event event) {",
+						"  }",
+						"}"),
+				getFileContentSrc("test/Test.java"));
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell x:Class='test.Test'>",
+				"  <Shell.layout>",
+				"    <RowLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button' SelectionEvent='onSelection'/>",
+				"</Shell>");
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/AbstractComponentTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/AbstractComponentTest.java
index 20aabc30c..823c0f0a2 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/AbstractComponentTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/AbstractComponentTest.java
@@ -21,42 +21,42 @@
  * @author scheglov_ke
  */
 public class AbstractComponentTest extends AbstractCoreTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * When we deleted {@link AbstractComponentInfo}, then it will not participate in next "refresh",
-   * so will not able to dispose its {@link Image}. We need some solution to clean up
-   * {@link AbstractComponentInfo} during delete.
-   */
-  public void test_disposeImage_whenDeleteModel() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    refresh();
-    AbstractComponentInfo button = getObjectByName("button");
-    // remember image
-    Image image = button.getImage();
-    assertFalse(image.isDisposed());
-    // do delete
-    button.delete();
-    assertTrue(image.isDisposed());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * When we deleted {@link AbstractComponentInfo}, then it will not participate in next "refresh",
+	 * so will not able to dispose its {@link Image}. We need some solution to clean up
+	 * {@link AbstractComponentInfo} during delete.
+	 */
+	public void test_disposeImage_whenDeleteModel() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		refresh();
+		AbstractComponentInfo button = getObjectByName("button");
+		// remember image
+		Image image = button.getImage();
+		assertFalse(image.isDisposed());
+		// do delete
+		button.delete();
+		assertTrue(image.isDisposed());
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/AbstractXmlModelTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/AbstractXmlModelTest.java
index 273f768e9..f440237cc 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/AbstractXmlModelTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/AbstractXmlModelTest.java
@@ -38,211 +38,211 @@
  * @author scheglov_ke
  */
 public abstract class AbstractXmlModelTest extends AbstractXmlObjectTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Life cycle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void tearDown() throws Exception {
-    disposeLastModel();
-    super.tearDown();
-  }
-
-  /**
-   * Disposes last parsed {@link XmlObjectInfo}.
-   */
-  protected void disposeLastModel() throws Exception {
-    if (m_lastObject != null) {
-      m_lastObject.refresh_dispose();
-      m_lastObject.getBroadcastObject().dispose();
-      m_lastObject = null;
-    }
-    if (m_lastContext != null) {
-      GlobalStateXml.deactivate();
-      m_lastContext = null;
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // XML source
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link XmlObjectInfo} for parsed XML source.
-   */
-  protected abstract <T extends XmlObjectInfo> T parse(String... lines) throws Exception;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation children
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Asserts that given {@link ObjectInfo} is visible in both tree children of parent.
-   */
-  public static void assertVisibleInTree(final ObjectInfo child, boolean expected) throws Exception {
-    List<ObjectInfo> children = child.getParent().getPresentation().getChildrenTree();
-    if (expected) {
-      assertThat(children).as(new Description() {
-        @Override
-        public String value() {
-          return "Should be visible it tree: " + child;
-        }
-      }).contains(child);
-    } else {
-      assertThat(children).as(new Description() {
-        @Override
-        public String value() {
-          return "Should not be visible it tree: " + child;
-        }
-      }).doesNotContain(child);
-    }
-  }
-
-  /**
-   * Asserts that given {@link ObjectInfo} is visible in both graphical children of parent.
-   */
-  public static void assertVisibleInGraphical(final ObjectInfo child, boolean expected)
-      throws Exception {
-    List<ObjectInfo> children = child.getParent().getPresentation().getChildrenGraphical();
-    if (expected) {
-      assertThat(children).as(new Description() {
-        @Override
-        public String value() {
-          return "Should be visible on canvas: " + child;
-        }
-      }).contains(child);
-    } else {
-      assertThat(children).as(new Description() {
-        @Override
-        public String value() {
-          return "Should not be visible on canvas: " + child;
-        }
-      }).doesNotContain(child);
-    }
-  }
-
-  /**
-   * Asserts that given {@link ObjectInfo} is visible in both tree and graphical children of parent.
-   */
-  public static void assertVisible(ObjectInfo child, boolean expected) throws Exception {
-    assertVisibleInGraphical(child, expected);
-    assertVisibleInTree(child, expected);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Creates new {@link XmlObjectInfo} with given component class, using
-   * {@link ElementCreationSupport}.
-   */
-  protected static <T extends XmlObjectInfo> T createObject(String componentClassName)
-      throws Exception {
-    return createObject(componentClassName, null);
-  }
-
-  /**
-   * Creates new {@link XmlObjectInfo} with given component class, using
-   * {@link ElementCreationSupport}.
-   */
-  @SuppressWarnings("unchecked")
-  protected static <T extends XmlObjectInfo> T createObject(String componentClassName,
-      String creationId) throws Exception {
-    EditorContext context = ((XmlObjectInfo) GlobalState.getActiveObject()).getContext();
-    XmlObjectInfo object =
-        XmlObjectUtils.createObject(
-            context,
-            componentClassName,
-            new ElementCreationSupport(creationId));
-    object.putArbitraryValue(XmlObjectInfo.FLAG_MANUAL_COMPONENT, Boolean.TRUE);
-    return (T) object;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // FlowContainer
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Uses first {@link FlowContainer} to perform CREATE.
-   */
-  public static void flowContainer_CREATE(final XmlObjectInfo container,
-      final Object object,
-      final Object reference) throws Exception {
-    ExecutionUtils.run(container, new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        FlowContainer flowContainer = new FlowContainerFactory(container, false).get().get(0);
-        flowContainer.command_CREATE(object, reference);
-      }
-    });
-  }
-
-  /**
-   * Uses first {@link FlowContainer} to perform MOVE.
-   */
-  public static void flowContainer_MOVE(final XmlObjectInfo container,
-      final Object object,
-      final Object reference) throws Exception {
-    ExecutionUtils.run(container, new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        FlowContainer flowContainer = new FlowContainerFactory(container, false).get().get(0);
-        flowContainer.command_MOVE(object, reference);
-      }
-    });
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // SimpleContainer
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Uses first {@link SimpleContainer} to perform CREATE.
-   */
-  public static void simpleContainer_CREATE(XmlObjectInfo container, Object object)
-      throws Exception {
-    SimpleContainer simpleContainer = new SimpleContainerFactory(container, false).get().get(0);
-    simpleContainer.command_CREATE(object);
-  }
-
-  /**
-   * Uses first {@link SimpleContainer} to perform ADD.
-   */
-  public static void simpleContainer_ADD(XmlObjectInfo container, Object object) throws Exception {
-    SimpleContainer simpleContainer = new SimpleContainerFactory(container, false).get().get(0);
-    simpleContainer.command_ADD(object);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Clipboard
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Performs copy/paste of given {@link XmlObjectInfo}.
-   */
-  public static <T extends XmlObjectInfo> void doCopyPaste(final T source,
-      final PasteProcedure<T> pasteProcedure) throws Exception {
-    final XmlObjectMemento memento = XmlObjectMemento.createMemento(source);
-    ExecutionUtils.run(source, new RunnableEx() {
-      @Override
-      @SuppressWarnings("unchecked")
-      public void run() throws Exception {
-        T copy = (T) memento.create(source);
-        pasteProcedure.run(copy);
-        memento.apply();
-      }
-    });
-  }
-
-  public interface PasteProcedure<T> {
-    void run(T copy) throws Exception;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Life cycle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void tearDown() throws Exception {
+		disposeLastModel();
+		super.tearDown();
+	}
+
+	/**
+	 * Disposes last parsed {@link XmlObjectInfo}.
+	 */
+	protected void disposeLastModel() throws Exception {
+		if (m_lastObject != null) {
+			m_lastObject.refresh_dispose();
+			m_lastObject.getBroadcastObject().dispose();
+			m_lastObject = null;
+		}
+		if (m_lastContext != null) {
+			GlobalStateXml.deactivate();
+			m_lastContext = null;
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// XML source
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link XmlObjectInfo} for parsed XML source.
+	 */
+	protected abstract <T extends XmlObjectInfo> T parse(String... lines) throws Exception;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation children
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Asserts that given {@link ObjectInfo} is visible in both tree children of parent.
+	 */
+	public static void assertVisibleInTree(final ObjectInfo child, boolean expected) throws Exception {
+		List<ObjectInfo> children = child.getParent().getPresentation().getChildrenTree();
+		if (expected) {
+			assertThat(children).as(new Description() {
+				@Override
+				public String value() {
+					return "Should be visible it tree: " + child;
+				}
+			}).contains(child);
+		} else {
+			assertThat(children).as(new Description() {
+				@Override
+				public String value() {
+					return "Should not be visible it tree: " + child;
+				}
+			}).doesNotContain(child);
+		}
+	}
+
+	/**
+	 * Asserts that given {@link ObjectInfo} is visible in both graphical children of parent.
+	 */
+	public static void assertVisibleInGraphical(final ObjectInfo child, boolean expected)
+			throws Exception {
+		List<ObjectInfo> children = child.getParent().getPresentation().getChildrenGraphical();
+		if (expected) {
+			assertThat(children).as(new Description() {
+				@Override
+				public String value() {
+					return "Should be visible on canvas: " + child;
+				}
+			}).contains(child);
+		} else {
+			assertThat(children).as(new Description() {
+				@Override
+				public String value() {
+					return "Should not be visible on canvas: " + child;
+				}
+			}).doesNotContain(child);
+		}
+	}
+
+	/**
+	 * Asserts that given {@link ObjectInfo} is visible in both tree and graphical children of parent.
+	 */
+	public static void assertVisible(ObjectInfo child, boolean expected) throws Exception {
+		assertVisibleInGraphical(child, expected);
+		assertVisibleInTree(child, expected);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Creates new {@link XmlObjectInfo} with given component class, using
+	 * {@link ElementCreationSupport}.
+	 */
+	protected static <T extends XmlObjectInfo> T createObject(String componentClassName)
+			throws Exception {
+		return createObject(componentClassName, null);
+	}
+
+	/**
+	 * Creates new {@link XmlObjectInfo} with given component class, using
+	 * {@link ElementCreationSupport}.
+	 */
+	@SuppressWarnings("unchecked")
+	protected static <T extends XmlObjectInfo> T createObject(String componentClassName,
+			String creationId) throws Exception {
+		EditorContext context = ((XmlObjectInfo) GlobalState.getActiveObject()).getContext();
+		XmlObjectInfo object =
+				XmlObjectUtils.createObject(
+						context,
+						componentClassName,
+						new ElementCreationSupport(creationId));
+		object.putArbitraryValue(XmlObjectInfo.FLAG_MANUAL_COMPONENT, Boolean.TRUE);
+		return (T) object;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// FlowContainer
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Uses first {@link FlowContainer} to perform CREATE.
+	 */
+	public static void flowContainer_CREATE(final XmlObjectInfo container,
+			final Object object,
+			final Object reference) throws Exception {
+		ExecutionUtils.run(container, new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				FlowContainer flowContainer = new FlowContainerFactory(container, false).get().get(0);
+				flowContainer.command_CREATE(object, reference);
+			}
+		});
+	}
+
+	/**
+	 * Uses first {@link FlowContainer} to perform MOVE.
+	 */
+	public static void flowContainer_MOVE(final XmlObjectInfo container,
+			final Object object,
+			final Object reference) throws Exception {
+		ExecutionUtils.run(container, new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				FlowContainer flowContainer = new FlowContainerFactory(container, false).get().get(0);
+				flowContainer.command_MOVE(object, reference);
+			}
+		});
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// SimpleContainer
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Uses first {@link SimpleContainer} to perform CREATE.
+	 */
+	public static void simpleContainer_CREATE(XmlObjectInfo container, Object object)
+			throws Exception {
+		SimpleContainer simpleContainer = new SimpleContainerFactory(container, false).get().get(0);
+		simpleContainer.command_CREATE(object);
+	}
+
+	/**
+	 * Uses first {@link SimpleContainer} to perform ADD.
+	 */
+	public static void simpleContainer_ADD(XmlObjectInfo container, Object object) throws Exception {
+		SimpleContainer simpleContainer = new SimpleContainerFactory(container, false).get().get(0);
+		simpleContainer.command_ADD(object);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Clipboard
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Performs copy/paste of given {@link XmlObjectInfo}.
+	 */
+	public static <T extends XmlObjectInfo> void doCopyPaste(final T source,
+			final PasteProcedure<T> pasteProcedure) throws Exception {
+		final XmlObjectMemento memento = XmlObjectMemento.createMemento(source);
+		ExecutionUtils.run(source, new RunnableEx() {
+			@Override
+			@SuppressWarnings("unchecked")
+			public void run() throws Exception {
+				T copy = (T) memento.create(source);
+				pasteProcedure.run(copy);
+				memento.apply();
+			}
+		});
+	}
+
+	public interface PasteProcedure<T> {
+		void run(T copy) throws Exception;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/ClipboardTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/ClipboardTest.java
index 420e62c6d..510c7b6c8 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/ClipboardTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/ClipboardTest.java
@@ -42,402 +42,402 @@
  * @author scheglov_ke
  */
 public class ClipboardTest extends AbstractCoreTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link XmlObjectMemento#hasMemento(XmlObjectInfo)}.
-   */
-  public void test_hasMemento() throws Exception {
-    CompositeInfo shell =
-        parse(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Button wbp:name='button'/>",
-            "</Shell>");
-    ControlInfo button = getObjectByName("button");
-    //
-    assertFalse(XmlObjectMemento.hasMemento(shell));
-    assertTrue(XmlObjectMemento.hasMemento(button));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link XmlObjectMemento#hasMemento(XmlObjectInfo)}.
+	 */
+	public void test_hasMemento() throws Exception {
+		CompositeInfo shell =
+				parse(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Button wbp:name='button'/>",
+						"</Shell>");
+		ControlInfo button = getObjectByName("button");
+		//
+		assertFalse(XmlObjectMemento.hasMemento(shell));
+		assertTrue(XmlObjectMemento.hasMemento(button));
+	}
 
-  public void test_forControl() throws Exception {
-    CompositeInfo shell =
-        parse(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <RowLayout/>",
-            "  </Shell.layout>",
-            "  <Button wbp:name='button' text='My button'/>",
-            "</Shell>");
-    refresh();
-    ControlInfo button = getObjectByName("button");
-    // prepare memento
-    ComponentInfoMemento memento = (ComponentInfoMemento) XmlObjectMemento.createMemento(button);
-    assertEquals("org.eclipse.swt.widgets.Button", memento.getComponentClassName());
-    // has image
-    Image mementoImage;
-    {
-      mementoImage = memento.getImage();
-      assertNotNull(mementoImage);
-      assertFalse(mementoImage.isDisposed());
-      assertEquals(button.getBounds().width, mementoImage.getBounds().width);
-      assertEquals(button.getBounds().height, mementoImage.getBounds().height);
-    }
-    // create new Button
-    ControlInfo newButton = (ControlInfo) memento.create(shell);
-    assertSame(mementoImage, ComponentInfoMemento.getImage(newButton));
-    // do create
-    shell.getLayout().command_CREATE(newButton, null);
-    memento.apply();
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <RowLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button' text='My button'/>",
-        "  <Button text='My button'/>",
-        "</Shell>");
-    // after apply() image is disposed
-    assertTrue(mementoImage.isDisposed());
-    assertSame(null, ComponentInfoMemento.getImage(newButton));
-  }
+	public void test_forControl() throws Exception {
+		CompositeInfo shell =
+				parse(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <RowLayout/>",
+						"  </Shell.layout>",
+						"  <Button wbp:name='button' text='My button'/>",
+						"</Shell>");
+		refresh();
+		ControlInfo button = getObjectByName("button");
+		// prepare memento
+		ComponentInfoMemento memento = (ComponentInfoMemento) XmlObjectMemento.createMemento(button);
+		assertEquals("org.eclipse.swt.widgets.Button", memento.getComponentClassName());
+		// has image
+		Image mementoImage;
+		{
+			mementoImage = memento.getImage();
+			assertNotNull(mementoImage);
+			assertFalse(mementoImage.isDisposed());
+			assertEquals(button.getBounds().width, mementoImage.getBounds().width);
+			assertEquals(button.getBounds().height, mementoImage.getBounds().height);
+		}
+		// create new Button
+		ControlInfo newButton = (ControlInfo) memento.create(shell);
+		assertSame(mementoImage, ComponentInfoMemento.getImage(newButton));
+		// do create
+		shell.getLayout().command_CREATE(newButton, null);
+		memento.apply();
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <RowLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button' text='My button'/>",
+				"  <Button text='My button'/>",
+				"</Shell>");
+		// after apply() image is disposed
+		assertTrue(mementoImage.isDisposed());
+		assertSame(null, ComponentInfoMemento.getImage(newButton));
+	}
 
-  public void test_forControl_hasBounds() throws Exception {
-    CompositeInfo composite =
-        parse(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<Composite>",
-            "  <Button wbp:name='button' text='My button' bounds='10, 20, 100, 50'/>",
-            "</Composite>");
-    refresh();
-    ControlInfo button = getObjectByName("button");
-    // prepare memento
-    ComponentInfoMemento memento = (ComponentInfoMemento) XmlObjectMemento.createMemento(button);
-    assertEquals("org.eclipse.swt.widgets.Button", memento.getComponentClassName());
-    // create new Button
-    ControlInfo newButton = (ControlInfo) memento.create(composite);
-    // has bounds
-    assertEquals(new Rectangle(10, 20, 100, 50), newButton.getBounds());
-    assertEquals(new Rectangle(10, 20, 100, 50), newButton.getModelBounds());
-  }
+	public void test_forControl_hasBounds() throws Exception {
+		CompositeInfo composite =
+				parse(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<Composite>",
+						"  <Button wbp:name='button' text='My button' bounds='10, 20, 100, 50'/>",
+						"</Composite>");
+		refresh();
+		ControlInfo button = getObjectByName("button");
+		// prepare memento
+		ComponentInfoMemento memento = (ComponentInfoMemento) XmlObjectMemento.createMemento(button);
+		assertEquals("org.eclipse.swt.widgets.Button", memento.getComponentClassName());
+		// create new Button
+		ControlInfo newButton = (ControlInfo) memento.create(composite);
+		// has bounds
+		assertEquals(new Rectangle(10, 20, 100, 50), newButton.getBounds());
+		assertEquals(new Rectangle(10, 20, 100, 50), newButton.getModelBounds());
+	}
 
-  public void test_forControl_includeStyle() throws Exception {
-    final CompositeInfo shell =
-        parse(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <RowLayout/>",
-            "  </Shell.layout>",
-            "  <Button wbp:name='button' text='My button' x:Style='CHECK'/>",
-            "</Shell>");
-    refresh();
-    // do copy/paste
-    {
-      ControlInfo button = getObjectByName("button");
-      doCopyPaste(button, new PasteProcedure<ControlInfo>() {
-        @Override
-        public void run(ControlInfo copy) throws Exception {
-          shell.getLayout().command_CREATE(copy, null);
-        }
-      });
-    }
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <RowLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button' text='My button' x:Style='CHECK'/>",
-        "  <Button text='My button' x:Style='CHECK'/>",
-        "</Shell>");
-  }
+	public void test_forControl_includeStyle() throws Exception {
+		final CompositeInfo shell =
+				parse(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <RowLayout/>",
+						"  </Shell.layout>",
+						"  <Button wbp:name='button' text='My button' x:Style='CHECK'/>",
+						"</Shell>");
+		refresh();
+		// do copy/paste
+		{
+			ControlInfo button = getObjectByName("button");
+			doCopyPaste(button, new PasteProcedure<ControlInfo>() {
+				@Override
+				public void run(ControlInfo copy) throws Exception {
+					shell.getLayout().command_CREATE(copy, null);
+				}
+			});
+		}
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <RowLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button' text='My button' x:Style='CHECK'/>",
+				"  <Button text='My button' x:Style='CHECK'/>",
+				"</Shell>");
+	}
 
-  /**
-   * {@link Button} on "null" layout, so no image.
-   */
-  public void test_noImage() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Button wbp:name='button' text='My button'/>",
-        "</Shell>");
-    refresh();
-    ControlInfo button = getObjectByName("button");
-    // no image in "button"
-    assertNull(button.getImage());
-    // ...so, no image in memento
-    ComponentInfoMemento memento = (ComponentInfoMemento) XmlObjectMemento.createMemento(button);
-    assertNull(memento.getImage());
-  }
+	/**
+	 * {@link Button} on "null" layout, so no image.
+	 */
+	public void test_noImage() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Button wbp:name='button' text='My button'/>",
+				"</Shell>");
+		refresh();
+		ControlInfo button = getObjectByName("button");
+		// no image in "button"
+		assertNull(button.getImage());
+		// ...so, no image in memento
+		ComponentInfoMemento memento = (ComponentInfoMemento) XmlObjectMemento.createMemento(button);
+		assertNull(memento.getImage());
+	}
 
-  /**
-   * Test for using {@link XmlObjectMemento#apply(XmlObjectInfo)}.
-   */
-  public void test_useStaticApply() throws Exception {
-    CompositeInfo shell =
-        parse(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <RowLayout/>",
-            "  </Shell.layout>",
-            "  <Button wbp:name='button' text='My button'/>",
-            "</Shell>");
-    refresh();
-    ControlInfo button = getObjectByName("button");
-    // create new Button
-    ControlInfo newButton;
-    {
-      XmlObjectMemento memento = XmlObjectMemento.createMemento(button);
-      newButton = (ControlInfo) memento.create(shell);
-    }
-    // add new Button
-    shell.getLayout().command_CREATE(newButton, null);
-    XmlObjectMemento.apply(newButton);
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <RowLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button' text='My button'/>",
-        "  <Button text='My button'/>",
-        "</Shell>");
-  }
+	/**
+	 * Test for using {@link XmlObjectMemento#apply(XmlObjectInfo)}.
+	 */
+	public void test_useStaticApply() throws Exception {
+		CompositeInfo shell =
+				parse(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <RowLayout/>",
+						"  </Shell.layout>",
+						"  <Button wbp:name='button' text='My button'/>",
+						"</Shell>");
+		refresh();
+		ControlInfo button = getObjectByName("button");
+		// create new Button
+		ControlInfo newButton;
+		{
+			XmlObjectMemento memento = XmlObjectMemento.createMemento(button);
+			newButton = (ControlInfo) memento.create(shell);
+		}
+		// add new Button
+		shell.getLayout().command_CREATE(newButton, null);
+		XmlObjectMemento.apply(newButton);
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <RowLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button' text='My button'/>",
+				"  <Button text='My button'/>",
+				"</Shell>");
+	}
 
-  /**
-   * Test for using {@link XmlObjectMemento#isApplying(XmlObjectInfo)}.
-   */
-  public void test_isApplying() throws Exception {
-    CompositeInfo shell =
-        parse(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <RowLayout/>",
-            "  </Shell.layout>",
-            "  <Button wbp:name='button' text='My button'/>",
-            "</Shell>");
-    refresh();
-    ControlInfo button = getObjectByName("button");
-    // no
-    assertFalse(XmlObjectMemento.isApplying(button));
-    // create new Button
-    ControlInfo newButton;
-    {
-      XmlObjectMemento memento = XmlObjectMemento.createMemento(button);
-      newButton = (ControlInfo) memento.create(shell);
-    }
-    // yes
-    assertTrue(XmlObjectMemento.isApplying(newButton));
-  }
+	/**
+	 * Test for using {@link XmlObjectMemento#isApplying(XmlObjectInfo)}.
+	 */
+	public void test_isApplying() throws Exception {
+		CompositeInfo shell =
+				parse(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <RowLayout/>",
+						"  </Shell.layout>",
+						"  <Button wbp:name='button' text='My button'/>",
+						"</Shell>");
+		refresh();
+		ControlInfo button = getObjectByName("button");
+		// no
+		assertFalse(XmlObjectMemento.isApplying(button));
+		// create new Button
+		ControlInfo newButton;
+		{
+			XmlObjectMemento memento = XmlObjectMemento.createMemento(button);
+			newButton = (ControlInfo) memento.create(shell);
+		}
+		// yes
+		assertTrue(XmlObjectMemento.isApplying(newButton));
+	}
 
-  public void test_forLayout() throws Exception {
-    CompositeInfo shell =
-        parse(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <FillLayout/>",
-            "  </Shell.layout>",
-            "  <Composite wbp:name='composite_1'>",
-            "    <Composite.layout>",
-            "      <RowLayout fill='true'/>",
-            "    </Composite.layout>",
-            "  </Composite>",
-            "  <Composite wbp:name='composite_2'/>",
-            "</Shell>");
-    refresh();
-    CompositeInfo composite_1 = getObjectByName("composite_1");
-    CompositeInfo composite_2 = getObjectByName("composite_2");
-    // copy layout
-    LayoutInfo newLayout;
-    {
-      XmlObjectMemento memento = XmlObjectMemento.createMemento(composite_1.getLayout());
-      newLayout = (LayoutInfo) memento.create(shell);
-    }
-    // set new layout
-    composite_2.setLayout(newLayout);
-    XmlObjectMemento.apply(newLayout);
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <Composite wbp:name='composite_1'>",
-        "    <Composite.layout>",
-        "      <RowLayout fill='true'/>",
-        "    </Composite.layout>",
-        "  </Composite>",
-        "  <Composite wbp:name='composite_2'>",
-        "    <Composite.layout>",
-        "      <RowLayout fill='true'/>",
-        "    </Composite.layout>",
-        "  </Composite>",
-        "</Shell>");
-  }
+	public void test_forLayout() throws Exception {
+		CompositeInfo shell =
+				parse(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <FillLayout/>",
+						"  </Shell.layout>",
+						"  <Composite wbp:name='composite_1'>",
+						"    <Composite.layout>",
+						"      <RowLayout fill='true'/>",
+						"    </Composite.layout>",
+						"  </Composite>",
+						"  <Composite wbp:name='composite_2'/>",
+						"</Shell>");
+		refresh();
+		CompositeInfo composite_1 = getObjectByName("composite_1");
+		CompositeInfo composite_2 = getObjectByName("composite_2");
+		// copy layout
+		LayoutInfo newLayout;
+		{
+			XmlObjectMemento memento = XmlObjectMemento.createMemento(composite_1.getLayout());
+			newLayout = (LayoutInfo) memento.create(shell);
+		}
+		// set new layout
+		composite_2.setLayout(newLayout);
+		XmlObjectMemento.apply(newLayout);
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <Composite wbp:name='composite_1'>",
+				"    <Composite.layout>",
+				"      <RowLayout fill='true'/>",
+				"    </Composite.layout>",
+				"  </Composite>",
+				"  <Composite wbp:name='composite_2'>",
+				"    <Composite.layout>",
+				"      <RowLayout fill='true'/>",
+				"    </Composite.layout>",
+				"  </Composite>",
+				"</Shell>");
+	}
 
-  /**
-   * Test for {@link IClipboardObjectProperty}.
-   */
-  public void test_IClipboardObjectProperty() throws Exception {
-    final CompositeInfo shell =
-        parse(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <RowLayout/>",
-            "  </Shell.layout>",
-            "  <Button wbp:name='button'/>",
-            "</Shell>");
-    refresh();
-    ControlInfo button = getObjectByName("button");
-    // contribute "foo" property
-    class FooProperty extends XmlProperty implements IClipboardObjectProperty {
-      public FooProperty(XmlObjectInfo object) {
-        super(object, "foo", BooleanPropertyEditor.INSTANCE);
-      }
+	/**
+	 * Test for {@link IClipboardObjectProperty}.
+	 */
+	public void test_IClipboardObjectProperty() throws Exception {
+		final CompositeInfo shell =
+				parse(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <RowLayout/>",
+						"  </Shell.layout>",
+						"  <Button wbp:name='button'/>",
+						"</Shell>");
+		refresh();
+		ControlInfo button = getObjectByName("button");
+		// contribute "foo" property
+		class FooProperty extends XmlProperty implements IClipboardObjectProperty {
+			public FooProperty(XmlObjectInfo object) {
+				super(object, "foo", BooleanPropertyEditor.INSTANCE);
+			}
 
-      @Override
-      public boolean isModified() throws Exception {
-        return true;
-      }
+			@Override
+			public boolean isModified() throws Exception {
+				return true;
+			}
 
-      @Override
-      public Object getValue() throws Exception {
-        return false;
-      }
+			@Override
+			public Object getValue() throws Exception {
+				return false;
+			}
 
-      @Override
-      public void setValue(Object value) throws Exception {
-      }
+			@Override
+			public void setValue(Object value) throws Exception {
+			}
 
-      @Override
-      public Object getClipboardObject() throws Exception {
-        return Boolean.FALSE;
-      }
+			@Override
+			public Object getClipboardObject() throws Exception {
+				return Boolean.FALSE;
+			}
 
-      @Override
-      public void setClipboardObject(Object value) throws Exception {
-        m_object.getPropertyByTitle("enabled").setValue(value);
-      }
-    }
-    shell.addBroadcastListener(new XmlObjectAddProperties() {
-      @Override
-      public void invoke(XmlObjectInfo object, List<Property> properties) throws Exception {
-        if (object.getDescription().getComponentClass() == Button.class) {
-          properties.add(new FooProperty(object));
-        }
-      }
-    });
-    // do copy/paste
-    doCopyPaste(button, new PasteProcedure<ControlInfo>() {
-      @Override
-      public void run(ControlInfo copy) throws Exception {
-        shell.getLayout().command_CREATE(copy, null);
-      }
-    });
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <RowLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'/>",
-        "  <Button enabled='false'/>",
-        "</Shell>");
-  }
+			@Override
+			public void setClipboardObject(Object value) throws Exception {
+				m_object.getPropertyByTitle("enabled").setValue(value);
+			}
+		}
+		shell.addBroadcastListener(new XmlObjectAddProperties() {
+			@Override
+			public void invoke(XmlObjectInfo object, List<Property> properties) throws Exception {
+				if (object.getDescription().getComponentClass() == Button.class) {
+					properties.add(new FooProperty(object));
+				}
+			}
+		});
+		// do copy/paste
+		doCopyPaste(button, new PasteProcedure<ControlInfo>() {
+			@Override
+			public void run(ControlInfo copy) throws Exception {
+				shell.getLayout().command_CREATE(copy, null);
+			}
+		});
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <RowLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'/>",
+				"  <Button enabled='false'/>",
+				"</Shell>");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // XMLObjectMementoTransfer
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_transfer() throws Exception {
-    CompositeInfo shell =
-        parse(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Button wbp:name='button' text='My button'/>",
-            "</Shell>");
-    refresh();
-    ControlInfo button = getObjectByName("button");
-    // invoke just to cover
-    {
-      assertNotNull(ReflectionUtils.invokeMethod(
-          XmlObjectMementoTransfer.getInstance(),
-          "getTypeNames()"));
-    }
-    // copy to Clipboard
-    {
-      XmlObjectMemento memento = XmlObjectMemento.createMemento(button);
-      Clipboard clipboard = new Clipboard(Display.getCurrent());
-      try {
-        clipboard.setContents(
-            new Object[]{new XmlObjectMemento[]{memento}},
-            new Transfer[]{XmlObjectMementoTransfer.getInstance()});
-      } finally {
-        clipboard.dispose();
-      }
-    }
-    // get from Clipboard
-    {
-      XmlObjectMemento[] mementos;
-      {
-        Clipboard clipboard = new Clipboard(Display.getCurrent());
-        try {
-          mementos =
-              (XmlObjectMemento[]) clipboard.getContents(XmlObjectMementoTransfer.getInstance());
-        } finally {
-          clipboard.dispose();
-        }
-      }
-      // use to create new XMLObject_Info
-      assertEquals(1, mementos.length);
-      XmlObjectInfo newObject = mementos[0].create(shell);
-      assertInstanceOf(ControlInfo.class, newObject);
-    }
-    // set text and try to ask XMLObjectMementoTransfer
-    {
-      Clipboard clipboard = new Clipboard(Display.getCurrent());
-      try {
-        clipboard.setContents(new Object[]{"some text"}, new Transfer[]{TextTransfer.getInstance()});
-        assertNull(clipboard.getContents(XmlObjectMementoTransfer.getInstance()));
-        // cover unsupported type
-        assertNull(XmlObjectMementoTransfer.getInstance().nativeToJava(null));
-      } finally {
-        clipboard.dispose();
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// XMLObjectMementoTransfer
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_transfer() throws Exception {
+		CompositeInfo shell =
+				parse(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Button wbp:name='button' text='My button'/>",
+						"</Shell>");
+		refresh();
+		ControlInfo button = getObjectByName("button");
+		// invoke just to cover
+		{
+			assertNotNull(ReflectionUtils.invokeMethod(
+					XmlObjectMementoTransfer.getInstance(),
+					"getTypeNames()"));
+		}
+		// copy to Clipboard
+		{
+			XmlObjectMemento memento = XmlObjectMemento.createMemento(button);
+			Clipboard clipboard = new Clipboard(Display.getCurrent());
+			try {
+				clipboard.setContents(
+						new Object[]{new XmlObjectMemento[]{memento}},
+						new Transfer[]{XmlObjectMementoTransfer.getInstance()});
+			} finally {
+				clipboard.dispose();
+			}
+		}
+		// get from Clipboard
+		{
+			XmlObjectMemento[] mementos;
+			{
+				Clipboard clipboard = new Clipboard(Display.getCurrent());
+				try {
+					mementos =
+							(XmlObjectMemento[]) clipboard.getContents(XmlObjectMementoTransfer.getInstance());
+				} finally {
+					clipboard.dispose();
+				}
+			}
+			// use to create new XMLObject_Info
+			assertEquals(1, mementos.length);
+			XmlObjectInfo newObject = mementos[0].create(shell);
+			assertInstanceOf(ControlInfo.class, newObject);
+		}
+		// set text and try to ask XMLObjectMementoTransfer
+		{
+			Clipboard clipboard = new Clipboard(Display.getCurrent());
+			try {
+				clipboard.setContents(new Object[]{"some text"}, new Transfer[]{TextTransfer.getInstance()});
+				assertNull(clipboard.getContents(XmlObjectMementoTransfer.getInstance()));
+				// cover unsupported type
+				assertNull(XmlObjectMementoTransfer.getInstance().nativeToJava(null));
+			} finally {
+				clipboard.dispose();
+			}
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/EditorWarningTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/EditorWarningTest.java
index 01b6ae223..6fef5ea96 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/EditorWarningTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/EditorWarningTest.java
@@ -19,32 +19,32 @@
  * @author scheglov_ke
  */
 public class EditorWarningTest extends AbstractCoreTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_onlyMessage() throws Exception {
-    String message = "my message";
-    EditorWarning warning = new EditorWarning(message);
-    assertSame(message, warning.getMessage());
-    assertSame(null, warning.getException());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_onlyMessage() throws Exception {
+		String message = "my message";
+		EditorWarning warning = new EditorWarning(message);
+		assertSame(message, warning.getMessage());
+		assertSame(null, warning.getException());
+	}
 
-  public void test_messageAndException() throws Exception {
-    String message = "my message";
-    Throwable exception = new Exception();
-    EditorWarning warning = new EditorWarning(message, exception);
-    assertSame(message, warning.getMessage());
-    assertSame(exception, warning.getException());
-  }
+	public void test_messageAndException() throws Exception {
+		String message = "my message";
+		Throwable exception = new Exception();
+		EditorWarning warning = new EditorWarning(message, exception);
+		assertSame(message, warning.getMessage());
+		assertSame(exception, warning.getException());
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/ElementCreationSupportTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/ElementCreationSupportTest.java
index 8d7f8b6a4..abc6ff66e 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/ElementCreationSupportTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/ElementCreationSupportTest.java
@@ -32,377 +32,377 @@
  * @author scheglov_ke
  */
 public class ElementCreationSupportTest extends AbstractCoreTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // CreationSupport
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for abstract {@link CreationSupport}.
-   */
-  public void test_CreationSupport() throws Exception {
-    CreationSupport creationSupport = mock(CreationSupport.class);
-    // no getTitle()
-    try {
-      creationSupport.getTitle();
-      fail();
-    } catch (NotImplementedException e) {
-    }
-    // no getElement()
-    try {
-      creationSupport.getElement();
-      fail();
-    } catch (NotImplementedException e) {
-    }
-    // no getElementMove()
-    try {
-      creationSupport.getElementMove();
-      fail();
-    } catch (NotImplementedException e) {
-    }
-    // no addElement()
-    try {
-      creationSupport.addElement(null, 0);
-      fail();
-    } catch (NotImplementedException e) {
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// CreationSupport
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for abstract {@link CreationSupport}.
+	 */
+	public void test_CreationSupport() throws Exception {
+		CreationSupport creationSupport = mock(CreationSupport.class);
+		// no getTitle()
+		try {
+			creationSupport.getTitle();
+			fail();
+		} catch (NotImplementedException e) {
+		}
+		// no getElement()
+		try {
+			creationSupport.getElement();
+			fail();
+		} catch (NotImplementedException e) {
+		}
+		// no getElementMove()
+		try {
+			creationSupport.getElementMove();
+			fail();
+		} catch (NotImplementedException e) {
+		}
+		// no addElement()
+		try {
+			creationSupport.addElement(null, 0);
+			fail();
+		} catch (NotImplementedException e) {
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for applying {@link CreationDescription} parameters into {@link XmlObjectInfo}.
-   */
-  public void test_CreationDescription_withParameters() throws Exception {
-    prepareMyComponent(ArrayUtils.EMPTY_STRING_ARRAY, new String[]{
-        "  <creation id='withParameters'>",
-        "    <source>NA</source>",
-        "    <parameter name='name_1'>value_1</parameter>",
-        "    <parameter name='name_2'>value_2</parameter>",
-        "  </creation>",});
-    waitForAutoBuild();
-    // parse for context
-    parse("<Shell/>");
-    // check
-    XmlObjectInfo object = createObject("test.MyComponent", "withParameters");
-    assertEquals("value_1", XmlObjectUtils.getParameter(object, "name_1"));
-    assertEquals("value_2", XmlObjectUtils.getParameter(object, "name_2"));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for applying {@link CreationDescription} parameters into {@link XmlObjectInfo}.
+	 */
+	public void test_CreationDescription_withParameters() throws Exception {
+		prepareMyComponent(ArrayUtils.EMPTY_STRING_ARRAY, new String[]{
+				"  <creation id='withParameters'>",
+				"    <source>NA</source>",
+				"    <parameter name='name_1'>value_1</parameter>",
+				"    <parameter name='name_2'>value_2</parameter>",
+				"  </creation>",});
+		waitForAutoBuild();
+		// parse for context
+		parse("<Shell/>");
+		// check
+		XmlObjectInfo object = createObject("test.MyComponent", "withParameters");
+		assertEquals("value_1", XmlObjectUtils.getParameter(object, "name_1"));
+		assertEquals("value_2", XmlObjectUtils.getParameter(object, "name_2"));
+	}
 
-  /**
-   * Test for {@link ILiveCreationSupport} implementation.
-   */
-  public void test_ILiveCreationSupport() throws Exception {
-    parse("<Shell/>");
-    // create CreationSupport
-    ILiveCreationSupport creationSupport = new ElementCreationSupport("check", true);
-    assertEquals("check true", creationSupport.toString());
-    // create "live" CreationSupport
-    CreationSupport liveCreationSupport = creationSupport.getLiveComponentCreation();
-    assertEquals("check", ReflectionUtils.getFieldString(liveCreationSupport, "m_creationId"));
-    assertEquals(true, ReflectionUtils.getFieldBoolean(liveCreationSupport, "m_addAttributes"));
-  }
+	/**
+	 * Test for {@link ILiveCreationSupport} implementation.
+	 */
+	public void test_ILiveCreationSupport() throws Exception {
+		parse("<Shell/>");
+		// create CreationSupport
+		ILiveCreationSupport creationSupport = new ElementCreationSupport("check", true);
+		assertEquals("check true", creationSupport.toString());
+		// create "live" CreationSupport
+		CreationSupport liveCreationSupport = creationSupport.getLiveComponentCreation();
+		assertEquals("check", ReflectionUtils.getFieldString(liveCreationSupport, "m_creationId"));
+		assertEquals(true, ReflectionUtils.getFieldBoolean(liveCreationSupport, "m_addAttributes"));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_toString() throws Exception {
-    XmlObjectInfo shell =
-        parse(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<Shell text='My text'>",
-            "  <Button/>",
-            "</Shell>");
-    assertEquals(getSourceDQ("<Shell text='My text'>"), shell.getCreationSupport().toString());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_toString() throws Exception {
+		XmlObjectInfo shell =
+				parse(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<Shell text='My text'>",
+						"  <Button/>",
+						"</Shell>");
+		assertEquals(getSourceDQ("<Shell text='My text'>"), shell.getCreationSupport().toString());
+	}
 
-  public void test_getTitle() throws Exception {
-    XmlObjectInfo shell =
-        parse(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Button wbp:name='button'/>",
-            "</Shell>");
-    XmlObjectInfo button = getObjectByName("button");
-    assertEquals("Shell", shell.getCreationSupport().getTitle());
-    assertEquals("Button", button.getCreationSupport().getTitle());
-  }
+	public void test_getTitle() throws Exception {
+		XmlObjectInfo shell =
+				parse(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Button wbp:name='button'/>",
+						"</Shell>");
+		XmlObjectInfo button = getObjectByName("button");
+		assertEquals("Shell", shell.getCreationSupport().getTitle());
+		assertEquals("Button", button.getCreationSupport().getTitle());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Delete
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link ElementCreationSupport#delete()}.
-   */
-  public void test_delete() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    XmlObjectInfo button = getObjectByName("button");
-    //
-    assertTrue(button.canDelete());
-    button.delete();
-    assertXML("<Shell/>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Delete
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link ElementCreationSupport#delete()}.
+	 */
+	public void test_delete() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		XmlObjectInfo button = getObjectByName("button");
+		//
+		assertTrue(button.canDelete());
+		button.delete();
+		assertXML("<Shell/>");
+	}
 
-  /**
-   * Test for {@link ElementCreationSupport#delete()}.
-   */
-  public void test_delete_withIntermadiateElements() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "</Shell>");
-    XmlObjectInfo layout = getObjectByName("layout");
-    //
-    assertTrue(layout.canDelete());
-    layout.delete();
-    assertXML("<Shell/>");
-  }
+	/**
+	 * Test for {@link ElementCreationSupport#delete()}.
+	 */
+	public void test_delete_withIntermadiateElements() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"</Shell>");
+		XmlObjectInfo layout = getObjectByName("layout");
+		//
+		assertTrue(layout.canDelete());
+		layout.delete();
+		assertXML("<Shell/>");
+	}
 
-  /**
-   * Test for {@link ElementCreationSupport#delete()}.
-   */
-  public void test_delete_withIntermadiateChildren() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Composite wbp:name='composite'>",
-        "    <Button/>",
-        "  </Composite>",
-        "  <Button text='Other'/>",
-        "</Shell>");
-    XmlObjectInfo composite = getObjectByName("composite");
-    //
-    assertTrue(composite.canDelete());
-    composite.delete();
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Button text='Other'/>",
-        "</Shell>");
-  }
+	/**
+	 * Test for {@link ElementCreationSupport#delete()}.
+	 */
+	public void test_delete_withIntermadiateChildren() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Composite wbp:name='composite'>",
+				"    <Button/>",
+				"  </Composite>",
+				"  <Button text='Other'/>",
+				"</Shell>");
+		XmlObjectInfo composite = getObjectByName("composite");
+		//
+		assertTrue(composite.canDelete());
+		composite.delete();
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Button text='Other'/>",
+				"</Shell>");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // addElement() tag
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link ElementCreationSupport#addElement(DocumentElement, int)}.
-   */
-  public void test_addElement_standardSWT() throws Exception {
-    XmlObjectInfo container = parse("<Shell/>");
-    DocumentElement containerElement = container.getCreationSupport().getElement();
-    // add
-    XmlObjectInfo newObject = createObject("org.eclipse.swt.widgets.Button", "empty");
-    newObject.getCreationSupport().addElement(containerElement, 0);
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Button/>",
-        "</Shell>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// addElement() tag
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link ElementCreationSupport#addElement(DocumentElement, int)}.
+	 */
+	public void test_addElement_standardSWT() throws Exception {
+		XmlObjectInfo container = parse("<Shell/>");
+		DocumentElement containerElement = container.getCreationSupport().getElement();
+		// add
+		XmlObjectInfo newObject = createObject("org.eclipse.swt.widgets.Button", "empty");
+		newObject.getCreationSupport().addElement(containerElement, 0);
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Button/>",
+				"</Shell>");
+	}
 
-  /**
-   * Test for {@link ElementCreationSupport#addElement(DocumentElement, int)}.
-   * <p>
-   * Using {@link ElementCreationSupport#ElementCreationSupport()} constructor.
-   */
-  public void test_addElement_constructorWithoutId() throws Exception {
-    XmlObjectInfo container = parse("<Shell/>");
-    // add
-    DocumentElement containerElement = container.getCreationSupport().getElement();
-    XmlObjectInfo newObject =
-        XmlObjectUtils.createObject(
-            m_lastContext,
-            "org.eclipse.swt.widgets.Button",
-            new ElementCreationSupport());
-    newObject.getCreationSupport().addElement(containerElement, 0);
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Button text='New Button'/>",
-        "</Shell>");
-  }
+	/**
+	 * Test for {@link ElementCreationSupport#addElement(DocumentElement, int)}.
+	 * <p>
+	 * Using {@link ElementCreationSupport#ElementCreationSupport()} constructor.
+	 */
+	public void test_addElement_constructorWithoutId() throws Exception {
+		XmlObjectInfo container = parse("<Shell/>");
+		// add
+		DocumentElement containerElement = container.getCreationSupport().getElement();
+		XmlObjectInfo newObject =
+				XmlObjectUtils.createObject(
+						m_lastContext,
+						"org.eclipse.swt.widgets.Button",
+						new ElementCreationSupport());
+		newObject.getCreationSupport().addElement(containerElement, 0);
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Button text='New Button'/>",
+				"</Shell>");
+	}
 
-  /**
-   * Test for {@link ElementCreationSupport#addElement(DocumentElement, int)}.
-   */
-  public void test_addElement_noSuchCreationID() throws Exception {
-    XmlObjectInfo container = parse("<Shell/>");
-    DocumentElement containerElement = container.getCreationSupport().getElement();
-    // add
-    try {
-      XmlObjectInfo newObject = createObject("org.eclipse.swt.widgets.Button", "noSuchID");
-      newObject.getCreationSupport().addElement(containerElement, 0);
-      fail();
-    } catch (AssertionFailedException e) {
-    }
-  }
+	/**
+	 * Test for {@link ElementCreationSupport#addElement(DocumentElement, int)}.
+	 */
+	public void test_addElement_noSuchCreationID() throws Exception {
+		XmlObjectInfo container = parse("<Shell/>");
+		DocumentElement containerElement = container.getCreationSupport().getElement();
+		// add
+		try {
+			XmlObjectInfo newObject = createObject("org.eclipse.swt.widgets.Button", "noSuchID");
+			newObject.getCreationSupport().addElement(containerElement, 0);
+			fail();
+		} catch (AssertionFailedException e) {
+		}
+	}
 
-  /**
-   * Test for {@link ElementCreationSupport#addElement(DocumentElement, int)}.
-   * <p>
-   * Package has no namespace yet.
-   */
-  public void test_addElement_inCustomPackage() throws Exception {
-    m_getSource_includeStandardNamespaces = false;
-    prepareMyComponent(ArrayUtils.EMPTY_STRING_ARRAY);
-    XmlObjectInfo container = parse("<Shell/>");
-    DocumentElement containerElement = container.getCreationSupport().getElement();
-    // add
-    XmlObjectInfo newObject = createObject("test.MyComponent");
-    newObject.getCreationSupport().addElement(containerElement, 0);
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell xmlns:p1='clr-namespace:test'>",
-        "  <p1:MyComponent/>",
-        "</Shell>");
-  }
+	/**
+	 * Test for {@link ElementCreationSupport#addElement(DocumentElement, int)}.
+	 * <p>
+	 * Package has no namespace yet.
+	 */
+	public void test_addElement_inCustomPackage() throws Exception {
+		m_getSource_includeStandardNamespaces = false;
+		prepareMyComponent(ArrayUtils.EMPTY_STRING_ARRAY);
+		XmlObjectInfo container = parse("<Shell/>");
+		DocumentElement containerElement = container.getCreationSupport().getElement();
+		// add
+		XmlObjectInfo newObject = createObject("test.MyComponent");
+		newObject.getCreationSupport().addElement(containerElement, 0);
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell xmlns:p1='clr-namespace:test'>",
+				"  <p1:MyComponent/>",
+				"</Shell>");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // addElement() attributes
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link ElementCreationSupport#addElement(DocumentElement, int)}.
-   * <p>
-   * Attribute without namespace, just add as is.
-   */
-  public void test_addElement_attributes_noNamespace() throws Exception {
-    prepareMyComponent(new String[]{
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "public void setText(String v) {",
-        "}"}, new String[]{
-        "<creation>",
-        "  <source/>",
-        "  <x-attribute name='text' value='My text'/>",
-        "</creation>"});
-    XmlObjectInfo container = parse("<Shell/>");
-    DocumentElement containerElement = container.getCreationSupport().getElement();
-    // add
-    XmlObjectInfo newObject = createObject("test.MyComponent");
-    newObject.getCreationSupport().addElement(containerElement, 0);
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <t:MyComponent text='My text'/>",
-        "</Shell>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// addElement() attributes
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link ElementCreationSupport#addElement(DocumentElement, int)}.
+	 * <p>
+	 * Attribute without namespace, just add as is.
+	 */
+	public void test_addElement_attributes_noNamespace() throws Exception {
+		prepareMyComponent(new String[]{
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"public void setText(String v) {",
+		"}"}, new String[]{
+				"<creation>",
+				"  <source/>",
+				"  <x-attribute name='text' value='My text'/>",
+		"</creation>"});
+		XmlObjectInfo container = parse("<Shell/>");
+		DocumentElement containerElement = container.getCreationSupport().getElement();
+		// add
+		XmlObjectInfo newObject = createObject("test.MyComponent");
+		newObject.getCreationSupport().addElement(containerElement, 0);
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <t:MyComponent text='My text'/>",
+				"</Shell>");
+	}
 
-  /**
-   * Test for {@link ElementCreationSupport#addElement(DocumentElement, int)}.
-   * <p>
-   * Attribute with namespace, declare and use it.
-   */
-  public void test_addElement_attributes_newNamespace() throws Exception {
-    prepareMyComponent(new String[]{
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "public void setText(String v) {",
-        "}"}, new String[]{
-        "<creation>",
-        "  <source/>",
-        "  <x-attribute ns='http://my.namespace.com' name='text' value='My text'/>",
-        "</creation>"});
-    XmlObjectInfo container = parse("<Shell/>");
-    DocumentElement containerElement = container.getCreationSupport().getElement();
-    // add
-    XmlObjectInfo newObject = createObject("test.MyComponent");
-    newObject.getCreationSupport().addElement(containerElement, 0);
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell xmlns:a1='http://my.namespace.com'>",
-        "  <t:MyComponent a1:text='My text'/>",
-        "</Shell>");
-  }
+	/**
+	 * Test for {@link ElementCreationSupport#addElement(DocumentElement, int)}.
+	 * <p>
+	 * Attribute with namespace, declare and use it.
+	 */
+	public void test_addElement_attributes_newNamespace() throws Exception {
+		prepareMyComponent(new String[]{
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"public void setText(String v) {",
+		"}"}, new String[]{
+				"<creation>",
+				"  <source/>",
+				"  <x-attribute ns='http://my.namespace.com' name='text' value='My text'/>",
+		"</creation>"});
+		XmlObjectInfo container = parse("<Shell/>");
+		DocumentElement containerElement = container.getCreationSupport().getElement();
+		// add
+		XmlObjectInfo newObject = createObject("test.MyComponent");
+		newObject.getCreationSupport().addElement(containerElement, 0);
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell xmlns:a1='http://my.namespace.com'>",
+				"  <t:MyComponent a1:text='My text'/>",
+				"</Shell>");
+	}
 
-  /**
-   * Test for {@link ElementCreationSupport#addElement(DocumentElement, int)}.
-   * <p>
-   * Attribute with namespace, which is already declared, so just use it.
-   */
-  public void test_addElement_attributes_existingNamespace() throws Exception {
-    prepareMyComponent(new String[]{
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "public void setText(String v) {",
-        "}"}, new String[]{
-        "<creation>",
-        "  <source/>",
-        "  <x-attribute ns='http://my.namespace.com' name='text' value='My text'/>",
-        "</creation>"});
-    XmlObjectInfo container = parse("<Shell xmlns:myNS='http://my.namespace.com'/>");
-    DocumentElement containerElement = container.getCreationSupport().getElement();
-    // add
-    XmlObjectInfo newObject = createObject("test.MyComponent");
-    newObject.getCreationSupport().addElement(containerElement, 0);
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell xmlns:myNS='http://my.namespace.com'>",
-        "  <t:MyComponent myNS:text='My text'/>",
-        "</Shell>");
-  }
+	/**
+	 * Test for {@link ElementCreationSupport#addElement(DocumentElement, int)}.
+	 * <p>
+	 * Attribute with namespace, which is already declared, so just use it.
+	 */
+	public void test_addElement_attributes_existingNamespace() throws Exception {
+		prepareMyComponent(new String[]{
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"public void setText(String v) {",
+		"}"}, new String[]{
+				"<creation>",
+				"  <source/>",
+				"  <x-attribute ns='http://my.namespace.com' name='text' value='My text'/>",
+		"</creation>"});
+		XmlObjectInfo container = parse("<Shell xmlns:myNS='http://my.namespace.com'/>");
+		DocumentElement containerElement = container.getCreationSupport().getElement();
+		// add
+		XmlObjectInfo newObject = createObject("test.MyComponent");
+		newObject.getCreationSupport().addElement(containerElement, 0);
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell xmlns:myNS='http://my.namespace.com'>",
+				"  <t:MyComponent myNS:text='My text'/>",
+				"</Shell>");
+	}
 
-  /**
-   * Test for {@link ElementCreationSupport#addElement(DocumentElement, int)}.
-   * <p>
-   * Using "x-content" element.
-   */
-  public void test_addElement_content() throws Exception {
-    prepareMyComponent(new String[]{
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "public void setText(String v) {",
-        "}"}, new String[]{
-        "<creation>",
-        "  <source/>",
-        "  <x-content>My content</x-content>",
-        "</creation>"});
-    XmlObjectInfo container = parse("<Shell/>");
-    DocumentElement containerElement = container.getCreationSupport().getElement();
-    // add
-    XmlObjectInfo newObject = createObject("test.MyComponent");
-    newObject.getCreationSupport().addElement(containerElement, 0);
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <t:MyComponent>My content</t:MyComponent>",
-        "</Shell>");
-  }
+	/**
+	 * Test for {@link ElementCreationSupport#addElement(DocumentElement, int)}.
+	 * <p>
+	 * Using "x-content" element.
+	 */
+	public void test_addElement_content() throws Exception {
+		prepareMyComponent(new String[]{
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"public void setText(String v) {",
+		"}"}, new String[]{
+				"<creation>",
+				"  <source/>",
+				"  <x-content>My content</x-content>",
+		"</creation>"});
+		XmlObjectInfo container = parse("<Shell/>");
+		DocumentElement containerElement = container.getCreationSupport().getElement();
+		// add
+		XmlObjectInfo newObject = createObject("test.MyComponent");
+		newObject.getCreationSupport().addElement(containerElement, 0);
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <t:MyComponent>My content</t:MyComponent>",
+				"</Shell>");
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/ModelTests.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/ModelTests.java
index ea274610b..da2e3eb87 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/ModelTests.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/ModelTests.java
@@ -25,23 +25,23 @@
  * @author scheglov_ke
  */
 public class ModelTests extends DesignerSuiteTests {
-  public static Test suite() {
-    TestSuite suite = new TestSuite("org.eclipse.wb.xml.model");
-    suite.addTest(DescriptionTests.suite());
-    suite.addTest(createSingleSuite(EditorWarningTest.class));
-    suite.addTest(createSingleSuite(XmlObjectTest.class));
-    suite.addTest(createSingleSuite(NamespacesHelperTest.class));
-    suite.addTest(createSingleSuite(XmlObjectUtilsTest.class));
-    suite.addTest(createSingleSuite(ElementCreationSupportTest.class));
-    suite.addTest(createSingleSuite(TagCreationSupportTest.class));
-    suite.addTest(AssociationTests.suite());
-    suite.addTest(PropertyTests.suite());
-    suite.addTest(createSingleSuite(XmlObjectRootProcessorTest.class));
-    suite.addTest(createSingleSuite(TopBoundsSupportTest.class));
-    suite.addTest(createSingleSuite(ClipboardTest.class));
-    suite.addTest(createSingleSuite(AbstractComponentTest.class));
-    suite.addTest(GenericTests.suite());
-    suite.addTest(createSingleSuite(MorphingSupportTest.class));
-    return suite;
-  }
+	public static Test suite() {
+		TestSuite suite = new TestSuite("org.eclipse.wb.xml.model");
+		suite.addTest(DescriptionTests.suite());
+		suite.addTest(createSingleSuite(EditorWarningTest.class));
+		suite.addTest(createSingleSuite(XmlObjectTest.class));
+		suite.addTest(createSingleSuite(NamespacesHelperTest.class));
+		suite.addTest(createSingleSuite(XmlObjectUtilsTest.class));
+		suite.addTest(createSingleSuite(ElementCreationSupportTest.class));
+		suite.addTest(createSingleSuite(TagCreationSupportTest.class));
+		suite.addTest(AssociationTests.suite());
+		suite.addTest(PropertyTests.suite());
+		suite.addTest(createSingleSuite(XmlObjectRootProcessorTest.class));
+		suite.addTest(createSingleSuite(TopBoundsSupportTest.class));
+		suite.addTest(createSingleSuite(ClipboardTest.class));
+		suite.addTest(createSingleSuite(AbstractComponentTest.class));
+		suite.addTest(GenericTests.suite());
+		suite.addTest(createSingleSuite(MorphingSupportTest.class));
+		return suite;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/MorphingSupportTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/MorphingSupportTest.java
index d4426c81e..0b2440027 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/MorphingSupportTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/MorphingSupportTest.java
@@ -26,228 +26,228 @@
  * @author sablin_aa
  */
 public class MorphingSupportTest extends AbstractCoreTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Validate
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_validate() throws Exception {
-    setFileContentSrc(
-        "test/MyComposite.java",
-        getSourceDQ(
-            "package test;",
-            "import org.eclipse.swt.SWT;",
-            "import org.eclipse.swt.widgets.*;",
-            "public class MyComposite extends Composite {",
-            "  public MyComposite(Composite parent, int style) {",
-            "    super(parent, style);",
-            "  }",
-            "}"));
-    setFileContentSrc(
-        "test/MyComposite.wbp-component.xml",
-        getSourceDQ(
-            "<?xml version='1.0' encoding='UTF-8'?>",
-            "<component xmlns='http://www.eclipse.org/wb/WBPComponent'>",
-            "  <morphTargets>",
-            "    <morphTarget class='org.eclipse.swt.widgets.Label'/>",
-            "  </morphTargets>",
-            "</component>"));
-    waitForAutoBuild();
-    // parse
-    ShellInfo shell =
-        parse(
-            "// filler filler filler filler filler filler",
-            "<Shell>",
-            "  <t:MyComposite/>",
-            "</Shell>");
-    XmlObjectInfo myComposite;
-    {
-      List<ControlInfo> children = shell.getChildrenControls();
-      assertEquals(1, children.size());
-      myComposite = children.get(0);
-    }
-    // validate
-    MorphingTargetDescription morphingTarget;
-    {
-      List<MorphingTargetDescription> morphingTargets =
-          myComposite.getDescription().getMorphingTargets();
-      assertEquals(1, morphingTargets.size());
-      morphingTarget = morphingTargets.get(0);
-      assertEquals("org.eclipse.swt.widgets.Label", morphingTarget.getComponentClass().getName());
-    }
-    String message = validate(myComposite, morphingTarget);
-    assertNull(message);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Validate
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_validate() throws Exception {
+		setFileContentSrc(
+				"test/MyComposite.java",
+				getSourceDQ(
+						"package test;",
+						"import org.eclipse.swt.SWT;",
+						"import org.eclipse.swt.widgets.*;",
+						"public class MyComposite extends Composite {",
+						"  public MyComposite(Composite parent, int style) {",
+						"    super(parent, style);",
+						"  }",
+						"}"));
+		setFileContentSrc(
+				"test/MyComposite.wbp-component.xml",
+				getSourceDQ(
+						"<?xml version='1.0' encoding='UTF-8'?>",
+						"<component xmlns='http://www.eclipse.org/wb/WBPComponent'>",
+						"  <morphTargets>",
+						"    <morphTarget class='org.eclipse.swt.widgets.Label'/>",
+						"  </morphTargets>",
+						"</component>"));
+		waitForAutoBuild();
+		// parse
+		ShellInfo shell =
+				parse(
+						"// filler filler filler filler filler filler",
+						"<Shell>",
+						"  <t:MyComposite/>",
+						"</Shell>");
+		XmlObjectInfo myComposite;
+		{
+			List<ControlInfo> children = shell.getChildrenControls();
+			assertEquals(1, children.size());
+			myComposite = children.get(0);
+		}
+		// validate
+		MorphingTargetDescription morphingTarget;
+		{
+			List<MorphingTargetDescription> morphingTargets =
+					myComposite.getDescription().getMorphingTargets();
+			assertEquals(1, morphingTargets.size());
+			morphingTarget = morphingTargets.get(0);
+			assertEquals("org.eclipse.swt.widgets.Label", morphingTarget.getComponentClass().getName());
+		}
+		String message = validate(myComposite, morphingTarget);
+		assertNull(message);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Morphing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_morph_removeProperties() throws Exception {
-    prepareMyComponent(new String[]{
-        "// filler filler filler filler filler",
-        "  private String value;",
-        "  public String getTest() {",
-        "    return value;",
-        "  }",
-        "  public void setTest(String value) {",
-        "    this.value = value;",
-        "  }"}, new String[]{
-        "  <morphTargets>",
-        "    <morphTarget class='org.eclipse.swt.widgets.Label'/>",
-        "  </morphTargets>"});
-    // parse
-    ShellInfo shell =
-        parse(
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <t:MyComponent wbp:name='component' test='123'/>",
-            "</Shell>");
-    shell.refresh();
-    XmlObjectInfo myComponent;
-    {
-      List<ControlInfo> children = shell.getChildrenControls();
-      assertEquals(1, children.size());
-      myComponent = children.get(0);
-      Property property = myComponent.getPropertyByTitle("test");
-      assertNotNull(property);
-      assertEquals("123", property.getValue());
-    }
-    // morphing
-    MorphingTargetDescription morphingTarget;
-    {
-      List<MorphingTargetDescription> morphingTargets =
-          myComponent.getDescription().getMorphingTargets();
-      assertEquals(1, morphingTargets.size());
-      morphingTarget = morphingTargets.get(0);
-      assertEquals("org.eclipse.swt.widgets.Label", morphingTarget.getComponentClass().getName());
-    }
-    morph(myComponent, morphingTarget);
-    // check
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Label wbp:name='component'/>",
-        "</Shell>");
-    {
-      List<ControlInfo> children = shell.getChildrenControls();
-      myComponent = children.get(0);
-      assertEquals(
-          "org.eclipse.swt.widgets.Label",
-          myComponent.getDescription().getComponentClass().getName());
-      Property property = myComponent.getPropertyByTitle("test");
-      assertNull(property);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Morphing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_morph_removeProperties() throws Exception {
+		prepareMyComponent(new String[]{
+				"// filler filler filler filler filler",
+				"  private String value;",
+				"  public String getTest() {",
+				"    return value;",
+				"  }",
+				"  public void setTest(String value) {",
+				"    this.value = value;",
+		"  }"}, new String[]{
+				"  <morphTargets>",
+				"    <morphTarget class='org.eclipse.swt.widgets.Label'/>",
+		"  </morphTargets>"});
+		// parse
+		ShellInfo shell =
+				parse(
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <t:MyComponent wbp:name='component' test='123'/>",
+						"</Shell>");
+		shell.refresh();
+		XmlObjectInfo myComponent;
+		{
+			List<ControlInfo> children = shell.getChildrenControls();
+			assertEquals(1, children.size());
+			myComponent = children.get(0);
+			Property property = myComponent.getPropertyByTitle("test");
+			assertNotNull(property);
+			assertEquals("123", property.getValue());
+		}
+		// morphing
+		MorphingTargetDescription morphingTarget;
+		{
+			List<MorphingTargetDescription> morphingTargets =
+					myComponent.getDescription().getMorphingTargets();
+			assertEquals(1, morphingTargets.size());
+			morphingTarget = morphingTargets.get(0);
+			assertEquals("org.eclipse.swt.widgets.Label", morphingTarget.getComponentClass().getName());
+		}
+		morph(myComponent, morphingTarget);
+		// check
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Label wbp:name='component'/>",
+				"</Shell>");
+		{
+			List<ControlInfo> children = shell.getChildrenControls();
+			myComponent = children.get(0);
+			assertEquals(
+					"org.eclipse.swt.widgets.Label",
+					myComponent.getDescription().getComponentClass().getName());
+			Property property = myComponent.getPropertyByTitle("test");
+			assertNull(property);
+		}
+	}
 
-  /**
-   * During morphing we move children from source to parent.
-   */
-  public void test_morph_keepChildren() throws Exception {
-    prepareMyComponent(new String[]{}, new String[]{
-        "  <morphTargets>",
-        "    <morphTarget class='org.eclipse.swt.custom.ScrolledComposite'/>",
-        "  </morphTargets>"});
-    // parse
-    ShellInfo shell =
-        parse(
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <t:MyComponent wbp:name='component'>",
-            "    <Button text='button'/>",
-            "  </t:MyComponent>",
-            "</Shell>");
-    shell.refresh();
-    XmlObjectInfo myComponent;
-    {
-      List<ControlInfo> children = shell.getChildrenControls();
-      assertEquals(1, children.size());
-      myComponent = children.get(0);
-      {
-        List<ControlInfo> componentChildren = myComponent.getChildren(ControlInfo.class);
-        assertEquals(1, componentChildren.size());
-        assertEquals("button", componentChildren.get(0).getPropertyByTitle("text").getValue());
-      }
-    }
-    // morphing
-    MorphingTargetDescription morphingTarget;
-    {
-      List<MorphingTargetDescription> morphingTargets =
-          myComponent.getDescription().getMorphingTargets();
-      assertEquals(1, morphingTargets.size());
-      morphingTarget = morphingTargets.get(0);
-      assertEquals(
-          "org.eclipse.swt.custom.ScrolledComposite",
-          morphingTarget.getComponentClass().getName());
-    }
-    morph(myComponent, morphingTarget);
-    // check
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <ScrolledComposite wbp:name='component'>",
-        "    <Button text='button'/>",
-        "  </ScrolledComposite>",
-        "</Shell>");
-    {
-      List<ControlInfo> children = shell.getChildrenControls();
-      assertEquals(1, children.size());
-      myComponent = children.get(0);
-      assertEquals(
-          "org.eclipse.swt.custom.ScrolledComposite",
-          myComponent.getDescription().getComponentClass().getName());
-      {
-        List<ControlInfo> componentChildren = myComponent.getChildren(ControlInfo.class);
-        assertEquals(1, componentChildren.size());
-        assertEquals("button", componentChildren.get(0).getPropertyByTitle("text").getValue());
-      }
-    }
-  }
+	/**
+	 * During morphing we move children from source to parent.
+	 */
+	public void test_morph_keepChildren() throws Exception {
+		prepareMyComponent(new String[]{}, new String[]{
+				"  <morphTargets>",
+				"    <morphTarget class='org.eclipse.swt.custom.ScrolledComposite'/>",
+		"  </morphTargets>"});
+		// parse
+		ShellInfo shell =
+				parse(
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <t:MyComponent wbp:name='component'>",
+						"    <Button text='button'/>",
+						"  </t:MyComponent>",
+						"</Shell>");
+		shell.refresh();
+		XmlObjectInfo myComponent;
+		{
+			List<ControlInfo> children = shell.getChildrenControls();
+			assertEquals(1, children.size());
+			myComponent = children.get(0);
+			{
+				List<ControlInfo> componentChildren = myComponent.getChildren(ControlInfo.class);
+				assertEquals(1, componentChildren.size());
+				assertEquals("button", componentChildren.get(0).getPropertyByTitle("text").getValue());
+			}
+		}
+		// morphing
+		MorphingTargetDescription morphingTarget;
+		{
+			List<MorphingTargetDescription> morphingTargets =
+					myComponent.getDescription().getMorphingTargets();
+			assertEquals(1, morphingTargets.size());
+			morphingTarget = morphingTargets.get(0);
+			assertEquals(
+					"org.eclipse.swt.custom.ScrolledComposite",
+					morphingTarget.getComponentClass().getName());
+		}
+		morph(myComponent, morphingTarget);
+		// check
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <ScrolledComposite wbp:name='component'>",
+				"    <Button text='button'/>",
+				"  </ScrolledComposite>",
+				"</Shell>");
+		{
+			List<ControlInfo> children = shell.getChildrenControls();
+			assertEquals(1, children.size());
+			myComponent = children.get(0);
+			assertEquals(
+					"org.eclipse.swt.custom.ScrolledComposite",
+					myComponent.getDescription().getComponentClass().getName());
+			{
+				List<ControlInfo> componentChildren = myComponent.getChildren(ControlInfo.class);
+				assertEquals(1, componentChildren.size());
+				assertEquals("button", componentChildren.get(0).getPropertyByTitle("text").getValue());
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Performs morphing of {@link XmlObjectInfo} into given target.
-   */
-  public static String validate(XmlObjectInfo objectInfo, MorphingTargetDescription target)
-      throws Exception {
-    return MorphingSupport.validate("org.eclipse.swt.widgets.Control", objectInfo, target);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Performs morphing of {@link XmlObjectInfo} into given target.
+	 */
+	public static String validate(XmlObjectInfo objectInfo, MorphingTargetDescription target)
+			throws Exception {
+		return MorphingSupport.validate("org.eclipse.swt.widgets.Control", objectInfo, target);
+	}
 
-  /**
-   * Performs morphing of {@link XmlObjectInfo} into given target.
-   */
-  public static void morph(XmlObjectInfo objectInfo, MorphingTargetDescription target)
-      throws Exception {
-    assertNull(validate(objectInfo, target));
-    MorphingSupport.morph("org.eclipse.swt.widgets.Control", objectInfo, target);
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Actions
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test that "Morph" sub-menu is contributed during broadcast.
-   */
-  /* TODO public void test_actions() throws Exception {
+	/**
+	 * Performs morphing of {@link XmlObjectInfo} into given target.
+	 */
+	public static void morph(XmlObjectInfo objectInfo, MorphingTargetDescription target)
+			throws Exception {
+		assertNull(validate(objectInfo, target));
+		MorphingSupport.morph("org.eclipse.swt.widgets.Control", objectInfo, target);
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Actions
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test that "Morph" sub-menu is contributed during broadcast.
+	 */
+	/* TODO public void test_actions() throws Exception {
   }*/
-  /**
-   * Thoroughly test one action from "Morph" sub-menu.
-   */
-  /* TODO public void test_actions_run() throws Exception {
+	/**
+	 * Thoroughly test one action from "Morph" sub-menu.
+	 */
+	/* TODO public void test_actions_run() throws Exception {
   }*/
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/NamespacesHelperTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/NamespacesHelperTest.java
index a589c6442..8212474b0 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/NamespacesHelperTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/NamespacesHelperTest.java
@@ -21,107 +21,107 @@
  * @author scheglov_ke
  */
 public class NamespacesHelperTest extends AbstractCoreTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // getURI()
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link NamespacesHelper#getURI(String)}.
-   */
-  public void test_getURI_no() throws Exception {
-    XmlObjectInfo shell = parse("<Shell/>");
-    DocumentElement element = shell.getElement();
-    //
-    String uri = NamespacesHelper.getURI(element, "noSuchName");
-    assertEquals(null, uri);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// getURI()
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link NamespacesHelper#getURI(String)}.
+	 */
+	public void test_getURI_no() throws Exception {
+		XmlObjectInfo shell = parse("<Shell/>");
+		DocumentElement element = shell.getElement();
+		//
+		String uri = NamespacesHelper.getURI(element, "noSuchName");
+		assertEquals(null, uri);
+	}
 
-  /**
-   * Test for {@link NamespacesHelper#getURI(String)}.
-   */
-  public void test_getURI_has() throws Exception {
-    XmlObjectInfo shell = parse("<Shell xmlns:p='someURI'/>");
-    DocumentElement element = shell.getElement();
-    //
-    String uri = NamespacesHelper.getURI(element, "p");
-    assertEquals("someURI", uri);
-  }
+	/**
+	 * Test for {@link NamespacesHelper#getURI(String)}.
+	 */
+	public void test_getURI_has() throws Exception {
+		XmlObjectInfo shell = parse("<Shell xmlns:p='someURI'/>");
+		DocumentElement element = shell.getElement();
+		//
+		String uri = NamespacesHelper.getURI(element, "p");
+		assertEquals("someURI", uri);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // getName()
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link NamespacesHelper#getName(String)}.
-   */
-  public void test_getName_no() throws Exception {
-    XmlObjectInfo shell = parse("<Shell/>");
-    DocumentElement element = shell.getElement();
-    //
-    String name = NamespacesHelper.getName(element, "noSuchURI");
-    assertEquals(null, name);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// getName()
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link NamespacesHelper#getName(String)}.
+	 */
+	public void test_getName_no() throws Exception {
+		XmlObjectInfo shell = parse("<Shell/>");
+		DocumentElement element = shell.getElement();
+		//
+		String name = NamespacesHelper.getName(element, "noSuchURI");
+		assertEquals(null, name);
+	}
 
-  /**
-   * Test for {@link NamespacesHelper#getName(String)}.
-   */
-  public void test_getName_has() throws Exception {
-    XmlObjectInfo shell = parse("<Shell xmlns:myName='someURI'/>");
-    DocumentElement element = shell.getElement();
-    //
-    String name = NamespacesHelper.getName(element, "someURI");
-    assertEquals("myName", name);
-  }
+	/**
+	 * Test for {@link NamespacesHelper#getName(String)}.
+	 */
+	public void test_getName_has() throws Exception {
+		XmlObjectInfo shell = parse("<Shell xmlns:myName='someURI'/>");
+		DocumentElement element = shell.getElement();
+		//
+		String name = NamespacesHelper.getName(element, "someURI");
+		assertEquals("myName", name);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ensureName()
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link NamespacesHelper#ensureName(String, String)}.
-   */
-  public void test_ensureName_existing() throws Exception {
-    XmlObjectInfo shell = parse("<Shell xmlns:nm='someURI'/>");
-    DocumentElement element = shell.getElement();
-    //
-    String name = NamespacesHelper.ensureName(element, "someURI", "nm");
-    assertEquals("nm", name);
-    assertXML("<Shell xmlns:nm='someURI'/>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ensureName()
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link NamespacesHelper#ensureName(String, String)}.
+	 */
+	public void test_ensureName_existing() throws Exception {
+		XmlObjectInfo shell = parse("<Shell xmlns:nm='someURI'/>");
+		DocumentElement element = shell.getElement();
+		//
+		String name = NamespacesHelper.ensureName(element, "someURI", "nm");
+		assertEquals("nm", name);
+		assertXML("<Shell xmlns:nm='someURI'/>");
+	}
 
-  /**
-   * Test for {@link NamespacesHelper#ensureName(String, String)}.
-   */
-  public void test_ensureName_new() throws Exception {
-    XmlObjectInfo shell = parse("<Shell/>");
-    DocumentElement element = shell.getElement();
-    //
-    String name = NamespacesHelper.ensureName(element, "someURI", "nm");
-    assertEquals("nm1", name);
-    assertXML("<Shell xmlns:nm1='someURI'/>");
-  }
+	/**
+	 * Test for {@link NamespacesHelper#ensureName(String, String)}.
+	 */
+	public void test_ensureName_new() throws Exception {
+		XmlObjectInfo shell = parse("<Shell/>");
+		DocumentElement element = shell.getElement();
+		//
+		String name = NamespacesHelper.ensureName(element, "someURI", "nm");
+		assertEquals("nm1", name);
+		assertXML("<Shell xmlns:nm1='someURI'/>");
+	}
 
-  /**
-   * Test for {@link NamespacesHelper#ensureName(String, String)}.
-   */
-  public void test_ensureName_newConflict() throws Exception {
-    XmlObjectInfo shell = parse("<Shell xmlns:nm1='existingURI'/>");
-    DocumentElement element = shell.getElement();
-    //
-    String name = NamespacesHelper.ensureName(element, "someURI", "nm");
-    assertEquals("nm2", name);
-    assertXML("<Shell xmlns:nm1='existingURI' xmlns:nm2='someURI'/>");
-  }
+	/**
+	 * Test for {@link NamespacesHelper#ensureName(String, String)}.
+	 */
+	public void test_ensureName_newConflict() throws Exception {
+		XmlObjectInfo shell = parse("<Shell xmlns:nm1='existingURI'/>");
+		DocumentElement element = shell.getElement();
+		//
+		String name = NamespacesHelper.ensureName(element, "someURI", "nm");
+		assertEquals("nm2", name);
+		assertXML("<Shell xmlns:nm1='existingURI' xmlns:nm2='someURI'/>");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/TagCreationSupportTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/TagCreationSupportTest.java
index 88a744e40..f4ab34579 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/TagCreationSupportTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/TagCreationSupportTest.java
@@ -22,146 +22,146 @@
  * @author scheglov_ke
  */
 public class TagCreationSupportTest extends AbstractCoreTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_toString_hasElement() throws Exception {
-    XmlObjectInfo shell =
-        parse(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<Shell text='My text'>",
-            "  <Button/>",
-            "</Shell>");
-    DocumentElement element = shell.getElement();
-    CreationSupport creationSupport = new TagCreationSupport(element);
-    assertSame(element, creationSupport.getElement());
-    assertEquals(getSourceDQ("<Shell text='My text'>"), creationSupport.toString());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_toString_hasElement() throws Exception {
+		XmlObjectInfo shell =
+				parse(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<Shell text='My text'>",
+						"  <Button/>",
+						"</Shell>");
+		DocumentElement element = shell.getElement();
+		CreationSupport creationSupport = new TagCreationSupport(element);
+		assertSame(element, creationSupport.getElement());
+		assertEquals(getSourceDQ("<Shell text='My text'>"), creationSupport.toString());
+	}
 
-  public void test_toString_hasTag() throws Exception {
-    CreationSupport creationSupport = new TagCreationSupport("myTag");
-    assertEquals("myTag", creationSupport.toString());
-  }
+	public void test_toString_hasTag() throws Exception {
+		CreationSupport creationSupport = new TagCreationSupport("myTag");
+		assertEquals("myTag", creationSupport.toString());
+	}
 
-  public void test_getTitle() throws Exception {
-    XmlObjectInfo shell =
-        parse(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Button wbp:name='button'/>",
-            "</Shell>");
-    XmlObjectInfo button = getObjectByName("button");
-    {
-      DocumentElement element = shell.getElement();
-      CreationSupport creationSupport = new TagCreationSupport(element);
-      assertEquals("Shell", creationSupport.getTitle());
-    }
-    {
-      DocumentElement element = button.getElement();
-      CreationSupport creationSupport = new TagCreationSupport(element);
-      assertEquals("Button", creationSupport.getTitle());
-    }
-  }
+	public void test_getTitle() throws Exception {
+		XmlObjectInfo shell =
+				parse(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Button wbp:name='button'/>",
+						"</Shell>");
+		XmlObjectInfo button = getObjectByName("button");
+		{
+			DocumentElement element = shell.getElement();
+			CreationSupport creationSupport = new TagCreationSupport(element);
+			assertEquals("Shell", creationSupport.getTitle());
+		}
+		{
+			DocumentElement element = button.getElement();
+			CreationSupport creationSupport = new TagCreationSupport(element);
+			assertEquals("Button", creationSupport.getTitle());
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Delete
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link TagCreationSupport#delete()}.
-   */
-  public void test_delete() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    XmlObjectInfo button = getObjectByName("button");
-    //
-    CreationSupport creationSupport = new TagCreationSupport(button.getElement());
-    creationSupport.setObject(button);
-    creationSupport.delete();
-    assertXML("<Shell/>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Delete
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link TagCreationSupport#delete()}.
+	 */
+	public void test_delete() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		XmlObjectInfo button = getObjectByName("button");
+		//
+		CreationSupport creationSupport = new TagCreationSupport(button.getElement());
+		creationSupport.setObject(button);
+		creationSupport.delete();
+		assertXML("<Shell/>");
+	}
 
-  /**
-   * Test for {@link TagCreationSupport#delete()}.
-   */
-  public void test_delete_withIntermadiateElements() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "</Shell>");
-    XmlObjectInfo layout = getObjectByName("layout");
-    //
-    CreationSupport creationSupport = new TagCreationSupport(layout.getElement());
-    creationSupport.setObject(layout);
-    creationSupport.delete();
-    assertXML("<Shell/>");
-  }
+	/**
+	 * Test for {@link TagCreationSupport#delete()}.
+	 */
+	public void test_delete_withIntermadiateElements() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"</Shell>");
+		XmlObjectInfo layout = getObjectByName("layout");
+		//
+		CreationSupport creationSupport = new TagCreationSupport(layout.getElement());
+		creationSupport.setObject(layout);
+		creationSupport.delete();
+		assertXML("<Shell/>");
+	}
 
-  /**
-   * Test for {@link TagCreationSupport#delete()}.
-   */
-  public void test_delete_withIntermadiateChildren() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Composite wbp:name='composite'>",
-        "    <Button/>",
-        "  </Composite>",
-        "  <Button text='Other'/>",
-        "</Shell>");
-    XmlObjectInfo composite = getObjectByName("composite");
-    //
-    CreationSupport creationSupport = new TagCreationSupport(composite.getElement());
-    creationSupport.setObject(composite);
-    creationSupport.delete();
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Button text='Other'/>",
-        "</Shell>");
-  }
+	/**
+	 * Test for {@link TagCreationSupport#delete()}.
+	 */
+	public void test_delete_withIntermadiateChildren() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Composite wbp:name='composite'>",
+				"    <Button/>",
+				"  </Composite>",
+				"  <Button text='Other'/>",
+				"</Shell>");
+		XmlObjectInfo composite = getObjectByName("composite");
+		//
+		CreationSupport creationSupport = new TagCreationSupport(composite.getElement());
+		creationSupport.setObject(composite);
+		creationSupport.delete();
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Button text='Other'/>",
+				"</Shell>");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // addElement() tag
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link TagCreationSupport#addElement(DocumentElement, int)}.
-   */
-  public void test_addElement() throws Exception {
-    XmlObjectInfo shell = parse("<Shell/>");
-    DocumentElement shellElement = shell.getCreationSupport().getElement();
-    // add
-    CreationSupport creationSupport = new TagCreationSupport("myTag");
-    creationSupport.addElement(shellElement, 0);
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <myTag/>",
-        "</Shell>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// addElement() tag
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link TagCreationSupport#addElement(DocumentElement, int)}.
+	 */
+	public void test_addElement() throws Exception {
+		XmlObjectInfo shell = parse("<Shell/>");
+		DocumentElement shellElement = shell.getCreationSupport().getElement();
+		// add
+		CreationSupport creationSupport = new TagCreationSupport("myTag");
+		creationSupport.addElement(shellElement, 0);
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <myTag/>",
+				"</Shell>");
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/TopBoundsSupportTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/TopBoundsSupportTest.java
index 40abd0ab6..ccd8a2d1c 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/TopBoundsSupportTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/TopBoundsSupportTest.java
@@ -22,37 +22,37 @@
  * @author scheglov_ke
  */
 public class TopBoundsSupportTest extends AbstractCoreTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_0() throws Exception {
-    AbstractComponentInfo shell = parse("<Shell/>");
-    shell.refresh();
-    // initial size
-    {
-      Rectangle bounds = shell.getBounds();
-      assertEquals(450, bounds.width);
-      assertEquals(300, bounds.height);
-    }
-    // set new size
-    TopBoundsSupport topBoundsSupport = shell.getTopBoundsSupport();
-    topBoundsSupport.setSize(500, 400);
-    shell.refresh();
-    {
-      Rectangle bounds = shell.getBounds();
-      assertEquals(500, bounds.width);
-      assertEquals(400, bounds.height);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_0() throws Exception {
+		AbstractComponentInfo shell = parse("<Shell/>");
+		shell.refresh();
+		// initial size
+		{
+			Rectangle bounds = shell.getBounds();
+			assertEquals(450, bounds.width);
+			assertEquals(300, bounds.height);
+		}
+		// set new size
+		TopBoundsSupport topBoundsSupport = shell.getTopBoundsSupport();
+		topBoundsSupport.setSize(500, 400);
+		shell.refresh();
+		{
+			Rectangle bounds = shell.getBounds();
+			assertEquals(500, bounds.width);
+			assertEquals(400, bounds.height);
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/XmlObjectRootProcessorTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/XmlObjectRootProcessorTest.java
index db721d2c1..c863a2dc5 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/XmlObjectRootProcessorTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/XmlObjectRootProcessorTest.java
@@ -23,105 +23,105 @@
  * @author scheglov_ke
  */
 public class XmlObjectRootProcessorTest extends AbstractCoreTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Visibility
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_visibility_separateTrue() throws Exception {
-    prepareMyComponent(ArrayUtils.EMPTY_STRING_ARRAY, new String[]{
-        "  <parameters>",
-        "    <parameter name='visible.inTree'>true</parameter>",
-        "    <parameter name='visible.inGraphical'>true</parameter>",
-        "  </parameters>"});
-    XmlObjectInfo object = prepareVisibilityObject();
-    assertVisibleInGraphical(object, true);
-    assertVisibleInTree(object, true);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Visibility
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_visibility_separateTrue() throws Exception {
+		prepareMyComponent(ArrayUtils.EMPTY_STRING_ARRAY, new String[]{
+				"  <parameters>",
+				"    <parameter name='visible.inTree'>true</parameter>",
+				"    <parameter name='visible.inGraphical'>true</parameter>",
+		"  </parameters>"});
+		XmlObjectInfo object = prepareVisibilityObject();
+		assertVisibleInGraphical(object, true);
+		assertVisibleInTree(object, true);
+	}
 
-  public void test_visibility_separateFalse() throws Exception {
-    prepareMyComponent(ArrayUtils.EMPTY_STRING_ARRAY, new String[]{
-        "  <parameters>",
-        "    <parameter name='visible.inTree'>false</parameter>",
-        "    <parameter name='visible.inGraphical'>false</parameter>",
-        "  </parameters>"});
-    XmlObjectInfo object = prepareVisibilityObject();
-    assertVisibleInGraphical(object, false);
-    assertVisibleInTree(object, false);
-  }
+	public void test_visibility_separateFalse() throws Exception {
+		prepareMyComponent(ArrayUtils.EMPTY_STRING_ARRAY, new String[]{
+				"  <parameters>",
+				"    <parameter name='visible.inTree'>false</parameter>",
+				"    <parameter name='visible.inGraphical'>false</parameter>",
+		"  </parameters>"});
+		XmlObjectInfo object = prepareVisibilityObject();
+		assertVisibleInGraphical(object, false);
+		assertVisibleInTree(object, false);
+	}
 
-  public void test_visibility_different() throws Exception {
-    prepareMyComponent(ArrayUtils.EMPTY_STRING_ARRAY, new String[]{
-        "  <parameters>",
-        "    <parameter name='visible.inTree'>true</parameter>",
-        "    <parameter name='visible.inGraphical'>false</parameter>",
-        "  </parameters>"});
-    XmlObjectInfo object = prepareVisibilityObject();
-    assertVisibleInGraphical(object, false);
-    assertVisibleInTree(object, true);
-  }
+	public void test_visibility_different() throws Exception {
+		prepareMyComponent(ArrayUtils.EMPTY_STRING_ARRAY, new String[]{
+				"  <parameters>",
+				"    <parameter name='visible.inTree'>true</parameter>",
+				"    <parameter name='visible.inGraphical'>false</parameter>",
+		"  </parameters>"});
+		XmlObjectInfo object = prepareVisibilityObject();
+		assertVisibleInGraphical(object, false);
+		assertVisibleInTree(object, true);
+	}
 
-  public void test_visibility_bothFalse() throws Exception {
-    prepareMyComponent(ArrayUtils.EMPTY_STRING_ARRAY, new String[]{
-        "  <parameters>",
-        "    <parameter name='visible'>false</parameter>",
-        "  </parameters>"});
-    XmlObjectInfo object = prepareVisibilityObject();
-    assertVisibleInGraphical(object, false);
-    assertVisibleInTree(object, false);
-  }
+	public void test_visibility_bothFalse() throws Exception {
+		prepareMyComponent(ArrayUtils.EMPTY_STRING_ARRAY, new String[]{
+				"  <parameters>",
+				"    <parameter name='visible'>false</parameter>",
+		"  </parameters>"});
+		XmlObjectInfo object = prepareVisibilityObject();
+		assertVisibleInGraphical(object, false);
+		assertVisibleInTree(object, false);
+	}
 
-  private XmlObjectInfo prepareVisibilityObject() throws Exception {
-    parse(
-        "<!-- filler filler filler filler filler -->",
-        "<!-- filler filler filler filler filler -->",
-        "<Shell>",
-        "  <t:MyComponent wbp:name='object'/>",
-        "</Shell>");
-    return getObjectByName("object");
-  }
+	private XmlObjectInfo prepareVisibilityObject() throws Exception {
+		parse(
+				"<!-- filler filler filler filler filler -->",
+				"<!-- filler filler filler filler filler -->",
+				"<Shell>",
+				"  <t:MyComponent wbp:name='object'/>",
+				"</Shell>");
+		return getObjectByName("object");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Decoration with "text"
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test that "label" of {@link XmlObjectInfo} uses text from its "text" property.
-   */
-  public void test_decorateWithText_hasText() throws Exception {
-    XmlObjectInfo shell =
-        parse(
-            "<!-- filler filler filler filler filler -->",
-            "<!-- filler filler filler filler filler -->",
-            "<Shell text='Hello!'/>");
-    shell.refresh();
-    //
-    String text = ObjectsLabelProvider.INSTANCE.getText(shell);
-    assertEquals("Shell - \"Hello!\"", text);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Decoration with "text"
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test that "label" of {@link XmlObjectInfo} uses text from its "text" property.
+	 */
+	public void test_decorateWithText_hasText() throws Exception {
+		XmlObjectInfo shell =
+				parse(
+						"<!-- filler filler filler filler filler -->",
+						"<!-- filler filler filler filler filler -->",
+						"<Shell text='Hello!'/>");
+		shell.refresh();
+		//
+		String text = ObjectsLabelProvider.INSTANCE.getText(shell);
+		assertEquals("Shell - \"Hello!\"", text);
+	}
 
-  /**
-   * Test that "label" of {@link XmlObjectInfo} uses text from its "text" property.
-   */
-  public void test_decorateWithText_noText() throws Exception {
-    XmlObjectInfo shell =
-        parse(
-            "<!-- filler filler filler filler filler -->",
-            "<!-- filler filler filler filler filler -->",
-            "<Shell/>");
-    shell.refresh();
-    //
-    String text = ObjectsLabelProvider.INSTANCE.getText(shell);
-    assertEquals("Shell", text);
-  }
+	/**
+	 * Test that "label" of {@link XmlObjectInfo} uses text from its "text" property.
+	 */
+	public void test_decorateWithText_noText() throws Exception {
+		XmlObjectInfo shell =
+				parse(
+						"<!-- filler filler filler filler filler -->",
+						"<!-- filler filler filler filler filler -->",
+						"<Shell/>");
+		shell.refresh();
+		//
+		String text = ObjectsLabelProvider.INSTANCE.getText(shell);
+		assertEquals("Shell", text);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/XmlObjectTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/XmlObjectTest.java
index d6c21edf8..eac30f315 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/XmlObjectTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/XmlObjectTest.java
@@ -38,483 +38,483 @@
  * @author scheglov_ke
  */
 public class XmlObjectTest extends AbstractCoreTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_getX() throws Exception {
-    XmlObjectInfo shell = parse("<Shell/>");
-    // no XML parent
-    {
-      assertSame(null, shell.getParent());
-      assertSame(null, shell.getParentXML());
-    }
-    // has EditorContext
-    {
-      EditorContext context = shell.getContext();
-      assertNotNull(context);
-      {
-        String filePath = context.getFile().getFullPath().toPortableString();
-        assertEquals("/TestProject/src/test/Test.xwt", filePath);
-      }
-    }
-    // has ComponentDescription
-    {
-      ComponentDescription description = shell.getDescription();
-      assertNotNull(description);
-      assertSame(Shell.class, description.getComponentClass());
-    }
-    // has CreationSupport
-    {
-      CreationSupport creationSupport = shell.getCreationSupport();
-      assertNotNull(creationSupport);
-      {
-        DocumentElement element = creationSupport.getElement();
-        assertNotNull(element);
-        assertEquals("Shell", element.getTag());
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_getX() throws Exception {
+		XmlObjectInfo shell = parse("<Shell/>");
+		// no XML parent
+		{
+			assertSame(null, shell.getParent());
+			assertSame(null, shell.getParentXML());
+		}
+		// has EditorContext
+		{
+			EditorContext context = shell.getContext();
+			assertNotNull(context);
+			{
+				String filePath = context.getFile().getFullPath().toPortableString();
+				assertEquals("/TestProject/src/test/Test.xwt", filePath);
+			}
+		}
+		// has ComponentDescription
+		{
+			ComponentDescription description = shell.getDescription();
+			assertNotNull(description);
+			assertSame(Shell.class, description.getComponentClass());
+		}
+		// has CreationSupport
+		{
+			CreationSupport creationSupport = shell.getCreationSupport();
+			assertNotNull(creationSupport);
+			{
+				DocumentElement element = creationSupport.getElement();
+				assertNotNull(element);
+				assertEquals("Shell", element.getTag());
+			}
+		}
+	}
 
-  /**
-   * Test for {@link XmlObjectInfo#setCreationSupport(CreationSupport)}
-   */
-  public void test_getCreationSupport() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    XmlObjectInfo button = getObjectByName("button");
-    //
-    CreationSupport oldCreationSupport = button.getCreationSupport();
-    CreationSupport newCreationSupport =
-        new ElementCreationSupport(oldCreationSupport.getElement());
-    button.setCreationSupport(newCreationSupport);
-    assertSame(newCreationSupport, button.getCreationSupport());
-  }
+	/**
+	 * Test for {@link XmlObjectInfo#setCreationSupport(CreationSupport)}
+	 */
+	public void test_getCreationSupport() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		XmlObjectInfo button = getObjectByName("button");
+		//
+		CreationSupport oldCreationSupport = button.getCreationSupport();
+		CreationSupport newCreationSupport =
+				new ElementCreationSupport(oldCreationSupport.getElement());
+		button.setCreationSupport(newCreationSupport);
+		assertSame(newCreationSupport, button.getCreationSupport());
+	}
 
-  /**
-   * Test for {@link XmlObjectInfo#getChildByObject(Object)}
-   */
-  public void test_getChildByObject() throws Exception {
-    XmlObjectInfo shell =
-        parse(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Button wbp:name='button'/>",
-            "</Shell>");
-    refresh();
-    XmlObjectInfo button = getObjectByName("button");
-    //
-    assertSame(shell, shell.getChildByObject(shell.getObject()));
-    assertSame(button, shell.getChildByObject(button.getObject()));
-    assertSame(null, shell.getChildByObject(this));
-    // we don't need to search "null" objects
-    assertSame(null, shell.getChildByObject(null));
-  }
+	/**
+	 * Test for {@link XmlObjectInfo#getChildByObject(Object)}
+	 */
+	public void test_getChildByObject() throws Exception {
+		XmlObjectInfo shell =
+				parse(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Button wbp:name='button'/>",
+						"</Shell>");
+		refresh();
+		XmlObjectInfo button = getObjectByName("button");
+		//
+		assertSame(shell, shell.getChildByObject(shell.getObject()));
+		assertSame(button, shell.getChildByObject(button.getObject()));
+		assertSame(null, shell.getChildByObject(this));
+		// we don't need to search "null" objects
+		assertSame(null, shell.getChildByObject(null));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Attributes raw
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link XmlObjectInfo#getElement()}.
-   */
-  public void test_getElement() throws Exception {
-    XmlObjectInfo shell = parse("<Shell/>");
-    assertSame(shell.getCreationSupport().getElement(), shell.getElement());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Attributes raw
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link XmlObjectInfo#getElement()}.
+	 */
+	public void test_getElement() throws Exception {
+		XmlObjectInfo shell = parse("<Shell/>");
+		assertSame(shell.getCreationSupport().getElement(), shell.getElement());
+	}
 
-  /**
-   * Test for {@link XmlObjectInfo#getAttribute(String)}.
-   */
-  public void test_getAttribute() throws Exception {
-    XmlObjectInfo shell = parse("<Shell foo='bar'/>");
-    assertEquals("bar", shell.getAttribute("foo"));
-    assertEquals(null, shell.getAttribute("no-such-attribute"));
-  }
+	/**
+	 * Test for {@link XmlObjectInfo#getAttribute(String)}.
+	 */
+	public void test_getAttribute() throws Exception {
+		XmlObjectInfo shell = parse("<Shell foo='bar'/>");
+		assertEquals("bar", shell.getAttribute("foo"));
+		assertEquals(null, shell.getAttribute("no-such-attribute"));
+	}
 
-  /**
-   * Test for {@link XmlObjectInfo#setAttribute(String, String)}.
-   */
-  public void test_setAttribute() throws Exception {
-    XmlObjectInfo shell = parse("<Shell/>");
-    shell.setAttribute("foo", "bar");
-    assertXML("<Shell foo='bar'/>");
-  }
+	/**
+	 * Test for {@link XmlObjectInfo#setAttribute(String, String)}.
+	 */
+	public void test_setAttribute() throws Exception {
+		XmlObjectInfo shell = parse("<Shell/>");
+		shell.setAttribute("foo", "bar");
+		assertXML("<Shell foo='bar'/>");
+	}
 
-  /**
-   * Test for {@link XmlObjectInfo#removeAttribute(String)}.
-   */
-  public void test_removeAttribute() throws Exception {
-    XmlObjectInfo shell = parse("<Shell foo='bar'/>");
-    shell.removeAttribute("foo");
-    assertXML("<Shell/>");
-  }
+	/**
+	 * Test for {@link XmlObjectInfo#removeAttribute(String)}.
+	 */
+	public void test_removeAttribute() throws Exception {
+		XmlObjectInfo shell = parse("<Shell foo='bar'/>");
+		shell.removeAttribute("foo");
+		assertXML("<Shell/>");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Hierarchy
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link XmlObjectInfo#getParentXML()}
-   */
-  public void test_getParentXML() throws Exception {
-    XmlObjectInfo shell =
-        parse(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Composite wbp:name='composite'>",
-            "    <Button wbp:name='button'/>",
-            "  </Composite>",
-            "</Shell>");
-    XmlObjectInfo composite = getObjectByName("composite");
-    XmlObjectInfo button = getObjectByName("button");
-    //
-    assertSame(null, shell.getParentXML());
-    assertSame(shell, composite.getParentXML());
-    assertSame(composite, button.getParentXML());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Hierarchy
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link XmlObjectInfo#getParentXML()}
+	 */
+	public void test_getParentXML() throws Exception {
+		XmlObjectInfo shell =
+				parse(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Composite wbp:name='composite'>",
+						"    <Button wbp:name='button'/>",
+						"  </Composite>",
+						"</Shell>");
+		XmlObjectInfo composite = getObjectByName("composite");
+		XmlObjectInfo button = getObjectByName("button");
+		//
+		assertSame(null, shell.getParentXML());
+		assertSame(shell, composite.getParentXML());
+		assertSame(composite, button.getParentXML());
+	}
 
-  /**
-   * Test for {@link XmlObjectInfo#getRootXML()}
-   */
-  public void test_getRootXML() throws Exception {
-    XmlObjectInfo shell =
-        parse(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Composite wbp:name='composite'>",
-            "    <Button wbp:name='button'/>",
-            "  </Composite>",
-            "</Shell>");
-    XmlObjectInfo composite = getObjectByName("composite");
-    XmlObjectInfo button = getObjectByName("button");
-    //
-    assertSame(shell, shell.getRootXML());
-    assertSame(shell, composite.getRootXML());
-    assertSame(shell, button.getRootXML());
-  }
+	/**
+	 * Test for {@link XmlObjectInfo#getRootXML()}
+	 */
+	public void test_getRootXML() throws Exception {
+		XmlObjectInfo shell =
+				parse(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Composite wbp:name='composite'>",
+						"    <Button wbp:name='button'/>",
+						"  </Composite>",
+						"</Shell>");
+		XmlObjectInfo composite = getObjectByName("composite");
+		XmlObjectInfo button = getObjectByName("button");
+		//
+		assertSame(shell, shell.getRootXML());
+		assertSame(shell, composite.getRootXML());
+		assertSame(shell, button.getRootXML());
+	}
 
-  /**
-   * Test for {@link XmlObjectInfo#getChildrenXML()}
-   */
-  public void test_getChildrenXML() throws Exception {
-    XmlObjectInfo shell =
-        parse(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Composite wbp:name='composite'>",
-            "    <Button wbp:name='button_1'/>",
-            "    <Button wbp:name='button_2'/>",
-            "  </Composite>",
-            "</Shell>");
-    XmlObjectInfo composite = getObjectByName("composite");
-    XmlObjectInfo button_2 = getObjectByName("button_1");
-    XmlObjectInfo button_1 = getObjectByName("button_2");
-    // implicit layout + "composite"
-    {
-      List<XmlObjectInfo> children = shell.getChildrenXML();
-      assertThat(children).hasSize(1 + 1).contains(composite);
-    }
-    // implicit layout + "button_1" + "button_2"
-    {
-      List<XmlObjectInfo> children = composite.getChildrenXML();
-      assertThat(children).hasSize(1 + 2).contains(button_1, button_2);
-    }
-    // no children for "button_1"
-    {
-      List<XmlObjectInfo> children = button_1.getChildrenXML();
-      assertThat(children).isEmpty();
-    }
-  }
+	/**
+	 * Test for {@link XmlObjectInfo#getChildrenXML()}
+	 */
+	public void test_getChildrenXML() throws Exception {
+		XmlObjectInfo shell =
+				parse(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Composite wbp:name='composite'>",
+						"    <Button wbp:name='button_1'/>",
+						"    <Button wbp:name='button_2'/>",
+						"  </Composite>",
+						"</Shell>");
+		XmlObjectInfo composite = getObjectByName("composite");
+		XmlObjectInfo button_2 = getObjectByName("button_1");
+		XmlObjectInfo button_1 = getObjectByName("button_2");
+		// implicit layout + "composite"
+		{
+			List<XmlObjectInfo> children = shell.getChildrenXML();
+			assertThat(children).hasSize(1 + 1).contains(composite);
+		}
+		// implicit layout + "button_1" + "button_2"
+		{
+			List<XmlObjectInfo> children = composite.getChildrenXML();
+			assertThat(children).hasSize(1 + 2).contains(button_1, button_2);
+		}
+		// no children for "button_1"
+		{
+			List<XmlObjectInfo> children = button_1.getChildrenXML();
+			assertThat(children).isEmpty();
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Properties
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link XmlObjectInfo#getProperties()}.
-   */
-  public void test_getProperties() throws Exception {
-    XmlObjectInfo shell = parse("<Shell/>");
-    Property[] properties = shell.getProperties();
-    String[] titles = PropertyUtils.getTitles(properties);
-    assertThat(titles).contains("text", "enabled");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Properties
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link XmlObjectInfo#getProperties()}.
+	 */
+	public void test_getProperties() throws Exception {
+		XmlObjectInfo shell = parse("<Shell/>");
+		Property[] properties = shell.getProperties();
+		String[] titles = PropertyUtils.getTitles(properties);
+		assertThat(titles).contains("text", "enabled");
+	}
 
-  /**
-   * Test for {@link XmlObjectInfo#getPropertyByTitle(String)}.
-   */
-  public void test_getPropertyByTitle() throws Exception {
-    XmlObjectInfo shell = parse("<Shell/>");
-    // "text"
-    {
-      Property property = shell.getPropertyByTitle("text");
-      assertNotNull(property);
-      assertEquals("text", property.getTitle());
-    }
-    // no such property
-    {
-      Property property = shell.getPropertyByTitle("noSuchProperty");
-      assertNull(property);
-    }
-  }
+	/**
+	 * Test for {@link XmlObjectInfo#getPropertyByTitle(String)}.
+	 */
+	public void test_getPropertyByTitle() throws Exception {
+		XmlObjectInfo shell = parse("<Shell/>");
+		// "text"
+		{
+			Property property = shell.getPropertyByTitle("text");
+			assertNotNull(property);
+			assertEquals("text", property.getTitle());
+		}
+		// no such property
+		{
+			Property property = shell.getPropertyByTitle("noSuchProperty");
+			assertNull(property);
+		}
+	}
 
-  /**
-   * Test that value of property is applied into XML.
-   */
-  public void test_setPropertyValue() throws Exception {
-    XmlObjectInfo shell = parse("<Shell text='first'/>");
-    shell.refresh();
-    Property property = shell.getPropertyByTitle("text");
-    // initial value
-    assertEquals("first", property.getValue());
-    assertEquals("first", shell.getAttributeValue("text"));
-    // set new value
-    property.setValue("second");
-    assertEquals("second", property.getValue());
-    assertEquals("second", shell.getAttributeValue("text"));
-    assertXML("<Shell text='second'/>");
-  }
+	/**
+	 * Test that value of property is applied into XML.
+	 */
+	public void test_setPropertyValue() throws Exception {
+		XmlObjectInfo shell = parse("<Shell text='first'/>");
+		shell.refresh();
+		Property property = shell.getPropertyByTitle("text");
+		// initial value
+		assertEquals("first", property.getValue());
+		assertEquals("first", shell.getAttributeValue("text"));
+		// set new value
+		property.setValue("second");
+		assertEquals("second", property.getValue());
+		assertEquals("second", shell.getAttributeValue("text"));
+		assertXML("<Shell text='second'/>");
+	}
 
-  /**
-   * Test that attribute value applied into {@link XmlObjectInfo} and can be accessed using
-   * {@link XmlObjectInfo#getAttributeValue(String)}.
-   */
-  public void test_getAttributeValue() throws Exception {
-    XmlObjectInfo shell =
-        parse(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<Shell text='foo'/>");
-    shell.refresh();
-    //
-    assertEquals("foo", shell.getAttributeValue("text"));
-    assertSame(Property.UNKNOWN_VALUE, shell.getAttributeValue("noSuchAttribute"));
-  }
+	/**
+	 * Test that attribute value applied into {@link XmlObjectInfo} and can be accessed using
+	 * {@link XmlObjectInfo#getAttributeValue(String)}.
+	 */
+	public void test_getAttributeValue() throws Exception {
+		XmlObjectInfo shell =
+				parse(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<Shell text='foo'/>");
+		shell.refresh();
+		//
+		assertEquals("foo", shell.getAttributeValue("text"));
+		assertSame(Property.UNKNOWN_VALUE, shell.getAttributeValue("noSuchAttribute"));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link XmlObjectInfo#toString()}.
-   */
-  public void test_toString() throws Exception {
-    XmlObjectInfo shell =
-        parse(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<Shell text='foo'>",
-            "  <Button text='foo' wbp:name='button'/>",
-            "</Shell>");
-    // "shell"
-    assertEquals(getSourceDQ("<Shell text='foo'>"), shell.toString());
-    // "button"
-    {
-      XmlObjectInfo button = getObjectByName("button");
-      assertEquals(getSourceDQ("<Button text='foo' wbp:name='button'>"), button.toString());
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link XmlObjectInfo#toString()}.
+	 */
+	public void test_toString() throws Exception {
+		XmlObjectInfo shell =
+				parse(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<Shell text='foo'>",
+						"  <Button text='foo' wbp:name='button'/>",
+						"</Shell>");
+		// "shell"
+		assertEquals(getSourceDQ("<Shell text='foo'>"), shell.toString());
+		// "button"
+		{
+			XmlObjectInfo button = getObjectByName("button");
+			assertEquals(getSourceDQ("<Button text='foo' wbp:name='button'>"), button.toString());
+		}
+	}
 
-  /**
-   * Test for {@link XmlObjectInfo#getPresentation()}.
-   */
-  public void test_presentation() throws Exception {
-    XmlObjectInfo shell = parse("<Shell text='My Shell'/>");
-    shell.refresh();
-    //
-    IObjectPresentation presentation = shell.getPresentation();
-    {
-      assertNotNull(presentation.getIcon());
-      assertSame(shell.getDescription().getIcon(), presentation.getIcon());
-    }
-    assertEquals("Shell", presentation.getText());
-    assertThat(presentation.getChildrenTree()).isEmpty();
-    assertThat(presentation.getChildrenGraphical()).isEmpty();
-  }
+	/**
+	 * Test for {@link XmlObjectInfo#getPresentation()}.
+	 */
+	public void test_presentation() throws Exception {
+		XmlObjectInfo shell = parse("<Shell text='My Shell'/>");
+		shell.refresh();
+		//
+		IObjectPresentation presentation = shell.getPresentation();
+		{
+			assertNotNull(presentation.getIcon());
+			assertSame(shell.getDescription().getIcon(), presentation.getIcon());
+		}
+		assertEquals("Shell", presentation.getText());
+		assertThat(presentation.getChildrenTree()).isEmpty();
+		assertThat(presentation.getChildrenGraphical()).isEmpty();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Delete
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link XmlObjectInfo#delete()}.
-   * <p>
-   * Delete single {@link XmlObjectInfo}.
-   */
-  public void test_delete_normalComponent() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  implicit-layout: absolute",
-        "  <Button wbp:name='button'>");
-    // delete "button"
-    XmlObjectInfo button = getObjectByName("button");
-    assertTrue(button.canDelete());
-    button.delete();
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell/>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  implicit-layout: absolute");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Delete
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link XmlObjectInfo#delete()}.
+	 * <p>
+	 * Delete single {@link XmlObjectInfo}.
+	 */
+	public void test_delete_normalComponent() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  implicit-layout: absolute",
+				"  <Button wbp:name='button'>");
+		// delete "button"
+		XmlObjectInfo button = getObjectByName("button");
+		assertTrue(button.canDelete());
+		button.delete();
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell/>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  implicit-layout: absolute");
+	}
 
-  /**
-   * Test for {@link XmlObjectInfo#delete()}.
-   * <p>
-   * Delete root {@link XmlObjectInfo}, clear it instead.
-   */
-  public void test_delete_rootComponent() throws Exception {
-    XmlObjectInfo shell =
-        parse(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<Shell text='My text'>",
-            "  <Button wbp:name='button'/>",
-            "</Shell>");
-    // delete "shell"
-    assertTrue(shell.canDelete());
-    shell.delete();
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell text='My text'/>");
-  }
+	/**
+	 * Test for {@link XmlObjectInfo#delete()}.
+	 * <p>
+	 * Delete root {@link XmlObjectInfo}, clear it instead.
+	 */
+	public void test_delete_rootComponent() throws Exception {
+		XmlObjectInfo shell =
+				parse(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<Shell text='My text'>",
+						"  <Button wbp:name='button'/>",
+						"</Shell>");
+		// delete "shell"
+		assertTrue(shell.canDelete());
+		shell.delete();
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell text='My text'/>");
+	}
 
-  /**
-   * Test for {@link XmlObjectInfo#delete()}.
-   * <p>
-   * Delete {@link XmlObjectInfo} and its children.
-   */
-  public void test_delete_withChildren() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Composite wbp:name='composite'>",
-        "    <Button/>",
-        "  </Composite>",
-        "</Shell>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  implicit-layout: absolute",
-        "  <Composite wbp:name='composite'>",
-        "    implicit-layout: absolute",
-        "    <Button>");
-    // delete "composite"
-    XmlObjectInfo composite = getObjectByName("composite");
-    assertTrue(composite.canDelete());
-    composite.delete();
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell/>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  implicit-layout: absolute");
-  }
+	/**
+	 * Test for {@link XmlObjectInfo#delete()}.
+	 * <p>
+	 * Delete {@link XmlObjectInfo} and its children.
+	 */
+	public void test_delete_withChildren() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Composite wbp:name='composite'>",
+				"    <Button/>",
+				"  </Composite>",
+				"</Shell>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  implicit-layout: absolute",
+				"  <Composite wbp:name='composite'>",
+				"    implicit-layout: absolute",
+				"    <Button>");
+		// delete "composite"
+		XmlObjectInfo composite = getObjectByName("composite");
+		assertTrue(composite.canDelete());
+		composite.delete();
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell/>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  implicit-layout: absolute");
+	}
 
-  /**
-   * Test for {@link XmlObjectInfo#delete()}.
-   * <p>
-   * Test for {@link XMLObject_delete} broadcast.
-   */
-  public void test_delete_withBroadcast() throws Exception {
-    final XmlObjectInfo shell =
-        parse(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Button wbp:name='button'/>",
-            "</Shell>");
-    final XmlObjectInfo button = getObjectByName("button");
-    // delete "button"
-    final StringBuilder log = new StringBuilder();
-    m_lastObject.addBroadcastListener(new ObjectInfoDelete() {
-      @Override
-      public void before(ObjectInfo parent, ObjectInfo child) throws Exception {
-        super.before(parent, child);
-        assertSame(shell, parent);
-        assertSame(button, child);
-        assertTrue(child.isDeleting());
-        assertFalse(child.isDeleted());
-        log.append("deleteBefore\n");
-      }
+	/**
+	 * Test for {@link XmlObjectInfo#delete()}.
+	 * <p>
+	 * Test for {@link XMLObject_delete} broadcast.
+	 */
+	public void test_delete_withBroadcast() throws Exception {
+		final XmlObjectInfo shell =
+				parse(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Button wbp:name='button'/>",
+						"</Shell>");
+		final XmlObjectInfo button = getObjectByName("button");
+		// delete "button"
+		final StringBuilder log = new StringBuilder();
+		m_lastObject.addBroadcastListener(new ObjectInfoDelete() {
+			@Override
+			public void before(ObjectInfo parent, ObjectInfo child) throws Exception {
+				super.before(parent, child);
+				assertSame(shell, parent);
+				assertSame(button, child);
+				assertTrue(child.isDeleting());
+				assertFalse(child.isDeleted());
+				log.append("deleteBefore\n");
+			}
 
-      @Override
-      public void after(ObjectInfo parent, ObjectInfo child) throws Exception {
-        super.after(parent, child);
-        assertSame(shell, parent);
-        assertSame(button, child);
-        assertTrue(child.isDeleting());
-        assertTrue(child.isDeleted());
-        log.append("deleteAfter\n");
-      }
-    });
-    button.delete();
-    assertEquals("deleteBefore\n" + "deleteAfter\n", log.toString());
-  }
+			@Override
+			public void after(ObjectInfo parent, ObjectInfo child) throws Exception {
+				super.after(parent, child);
+				assertSame(shell, parent);
+				assertSame(button, child);
+				assertTrue(child.isDeleting());
+				assertTrue(child.isDeleted());
+				log.append("deleteAfter\n");
+			}
+		});
+		button.delete();
+		assertEquals("deleteBefore\n" + "deleteAfter\n", log.toString());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // "refresh_afterCreate" script
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test that during "refresh" the script "refresh_afterCreate" is executed.
-   */
-  public void test_refresh_afterCreate_script() throws Exception {
-    prepareMyComponent(ArrayUtils.EMPTY_STRING_ARRAY, new String[]{
-        "  <parameters>",
-        "    <parameter name='refresh_afterCreate'>object.setEnabled(false)</parameter>",
-        "  </parameters>",});
-    // parse
-    parse(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <t:MyComponent wbp:name='myComponent'/>",
-        "</Shell>");
-    refresh();
-    //
-    ControlInfo myComponent = getObjectByName("myComponent");
-    assertFalse(myComponent.getControl().isEnabled());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// "refresh_afterCreate" script
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test that during "refresh" the script "refresh_afterCreate" is executed.
+	 */
+	public void test_refresh_afterCreate_script() throws Exception {
+		prepareMyComponent(ArrayUtils.EMPTY_STRING_ARRAY, new String[]{
+				"  <parameters>",
+				"    <parameter name='refresh_afterCreate'>object.setEnabled(false)</parameter>",
+				"  </parameters>",});
+		// parse
+		parse(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <t:MyComponent wbp:name='myComponent'/>",
+				"</Shell>");
+		refresh();
+		//
+		ControlInfo myComponent = getObjectByName("myComponent");
+		assertFalse(myComponent.getControl().isEnabled());
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/XmlObjectUtilsTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/XmlObjectUtilsTest.java
index 13e061b81..c0a14223a 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/XmlObjectUtilsTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/XmlObjectUtilsTest.java
@@ -34,442 +34,442 @@
  * @author scheglov_ke
  */
 public class XmlObjectUtilsTest extends AbstractCoreTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Test
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link XmlObjectUtils#getParameter(XmlObjectInfo, String)} and
-   * {@link XmlObjectUtils#setParameter(XmlObjectInfo, String, String)}.
-   */
-  public void test_getSetParameter() throws Exception {
-    XmlObjectInfo shell = parse("<Shell/>");
-    String name = "testParameter";
-    // initially no such parameter
-    assertSame(null, XmlObjectUtils.getParameter(shell, name));
-    // set parameter
-    String value = "foo";
-    XmlObjectUtils.setParameter(shell, name, value);
-    // has value now
-    assertSame(value, XmlObjectUtils.getParameter(shell, name));
-    // remove value
-    XmlObjectUtils.setParameter(shell, name, null);
-    assertSame(null, XmlObjectUtils.getParameter(shell, name));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Test
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link XmlObjectUtils#getParameter(XmlObjectInfo, String)} and
+	 * {@link XmlObjectUtils#setParameter(XmlObjectInfo, String, String)}.
+	 */
+	public void test_getSetParameter() throws Exception {
+		XmlObjectInfo shell = parse("<Shell/>");
+		String name = "testParameter";
+		// initially no such parameter
+		assertSame(null, XmlObjectUtils.getParameter(shell, name));
+		// set parameter
+		String value = "foo";
+		XmlObjectUtils.setParameter(shell, name, value);
+		// has value now
+		assertSame(value, XmlObjectUtils.getParameter(shell, name));
+		// remove value
+		XmlObjectUtils.setParameter(shell, name, null);
+		assertSame(null, XmlObjectUtils.getParameter(shell, name));
+	}
 
-  /**
-   * Test for {@link XmlObjectUtils#hasTrueParameter(XmlObjectInfo, String)}.
-   */
-  public void test_hasTrueParameter() throws Exception {
-    XmlObjectInfo shell = parse("<Shell/>");
-    String name = "testParameter";
-    // no such parameter
-    assertFalse(XmlObjectUtils.hasTrueParameter(shell, name));
-    // "false"
-    XmlObjectUtils.setParameter(shell, name, "false");
-    assertFalse(XmlObjectUtils.hasTrueParameter(shell, name));
-    // not "true"
-    XmlObjectUtils.setParameter(shell, name, "someString");
-    assertFalse(XmlObjectUtils.hasTrueParameter(shell, name));
-    // "true"
-    XmlObjectUtils.setParameter(shell, name, "true");
-    assertTrue(XmlObjectUtils.hasTrueParameter(shell, name));
-  }
+	/**
+	 * Test for {@link XmlObjectUtils#hasTrueParameter(XmlObjectInfo, String)}.
+	 */
+	public void test_hasTrueParameter() throws Exception {
+		XmlObjectInfo shell = parse("<Shell/>");
+		String name = "testParameter";
+		// no such parameter
+		assertFalse(XmlObjectUtils.hasTrueParameter(shell, name));
+		// "false"
+		XmlObjectUtils.setParameter(shell, name, "false");
+		assertFalse(XmlObjectUtils.hasTrueParameter(shell, name));
+		// not "true"
+		XmlObjectUtils.setParameter(shell, name, "someString");
+		assertFalse(XmlObjectUtils.hasTrueParameter(shell, name));
+		// "true"
+		XmlObjectUtils.setParameter(shell, name, "true");
+		assertTrue(XmlObjectUtils.hasTrueParameter(shell, name));
+	}
 
-  public void test_getParameters() throws Exception {
-    prepareMyComponent(ArrayUtils.EMPTY_STRING_ARRAY, new String[]{
-        "  <parameters>",
-        "    <parameter name='test.parameter.1'>value_1</parameter>",
-        "    <parameter name='test.parameter.2'>1000</parameter>",
-        "  </parameters>"});
-    // parse
-    XmlObjectInfo panel = parse("<t:MyComponent/>");
-    // check single parameters
-    {
-      assertThat(XmlObjectUtils.getParameter(panel, "test.parameter.1")).isEqualTo("value_1");
-      assertThat(XmlObjectUtils.getParameter(panel, "test.parameter.2")).isEqualTo("1000");
-      assertThat(XmlObjectUtils.getParameter(panel, "test.parameter.3")).isNull();
-    }
-    // check parameters map
-    {
-      Map<String, String> parameters = XmlObjectUtils.getParameters(panel);
-      assertThat(parameters.get("test.parameter.1")).isEqualTo("value_1");
-      assertThat(parameters.get("test.parameter.2")).isEqualTo("1000");
-      assertThat(parameters.get("test.parameter.3")).isNull();
-    }
-    // set new parameter
-    XmlObjectUtils.setParameter(panel, "test.parameter.3", "true");
-    // check parameters map
-    {
-      // check mapped values
-      Map<String, String> parameters = XmlObjectUtils.getParameters(panel);
-      assertThat(parameters.get("test.parameter.1")).isEqualTo("value_1");
-      assertThat(parameters.get("test.parameter.2")).isEqualTo("1000");
-      assertThat(parameters.get("test.parameter.3")).isEqualTo("true");
-    }
-  }
+	public void test_getParameters() throws Exception {
+		prepareMyComponent(ArrayUtils.EMPTY_STRING_ARRAY, new String[]{
+				"  <parameters>",
+				"    <parameter name='test.parameter.1'>value_1</parameter>",
+				"    <parameter name='test.parameter.2'>1000</parameter>",
+		"  </parameters>"});
+		// parse
+		XmlObjectInfo panel = parse("<t:MyComponent/>");
+		// check single parameters
+		{
+			assertThat(XmlObjectUtils.getParameter(panel, "test.parameter.1")).isEqualTo("value_1");
+			assertThat(XmlObjectUtils.getParameter(panel, "test.parameter.2")).isEqualTo("1000");
+			assertThat(XmlObjectUtils.getParameter(panel, "test.parameter.3")).isNull();
+		}
+		// check parameters map
+		{
+			Map<String, String> parameters = XmlObjectUtils.getParameters(panel);
+			assertThat(parameters.get("test.parameter.1")).isEqualTo("value_1");
+			assertThat(parameters.get("test.parameter.2")).isEqualTo("1000");
+			assertThat(parameters.get("test.parameter.3")).isNull();
+		}
+		// set new parameter
+		XmlObjectUtils.setParameter(panel, "test.parameter.3", "true");
+		// check parameters map
+		{
+			// check mapped values
+			Map<String, String> parameters = XmlObjectUtils.getParameters(panel);
+			assertThat(parameters.get("test.parameter.1")).isEqualTo("value_1");
+			assertThat(parameters.get("test.parameter.2")).isEqualTo("1000");
+			assertThat(parameters.get("test.parameter.3")).isEqualTo("true");
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Script
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link XmlObjectUtils#executeScriptParameter(XmlObjectInfo, String)}.
-   */
-  public void test_executeScriptParameter() throws Exception {
-    prepareMyComponent(new String[]{}, new String[]{
-        "// filler filler filler filler filler",
-        "<parameters>",
-        "  <parameter name='myScript'>return 5;</parameter>",
-        "</parameters>"});
-    parse(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <t:MyComponent wbp:name='myComponent'/>",
-        "</Shell>");
-    CompositeInfo myComponent = getObjectByName("myComponent");
-    // existing script
-    assertEquals(5, XmlObjectUtils.executeScriptParameter(myComponent, "myScript"));
-    // no script
-    assertEquals(null, XmlObjectUtils.executeScriptParameter(myComponent, "moSuchScript"));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Script
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link XmlObjectUtils#executeScriptParameter(XmlObjectInfo, String)}.
+	 */
+	public void test_executeScriptParameter() throws Exception {
+		prepareMyComponent(new String[]{}, new String[]{
+				"// filler filler filler filler filler",
+				"<parameters>",
+				"  <parameter name='myScript'>return 5;</parameter>",
+		"</parameters>"});
+		parse(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <t:MyComponent wbp:name='myComponent'/>",
+				"</Shell>");
+		CompositeInfo myComponent = getObjectByName("myComponent");
+		// existing script
+		assertEquals(5, XmlObjectUtils.executeScriptParameter(myComponent, "myScript"));
+		// no script
+		assertEquals(null, XmlObjectUtils.executeScriptParameter(myComponent, "moSuchScript"));
+	}
 
-  /**
-   * Test for {@link XmlObjectUtils#executeScript(XmlObjectInfo, String)}.
-   */
-  public void test_executeScript() throws Exception {
-    prepareMyComponent(new String[]{
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "public String myField = '_myField';"}, new String[]{});
-    parse(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <t:MyComponent wbp:name='myComponent' enabled='false'/>",
-        "</Shell>");
-    refresh();
-    CompositeInfo myComponent = getObjectByName("myComponent");
-    // existing script
-    assertEquals("false_myField", XmlObjectUtils.executeScript(
-        myComponent,
-        "return model.getAttributeValue('enabled') + object.myField"));
-  }
+	/**
+	 * Test for {@link XmlObjectUtils#executeScript(XmlObjectInfo, String)}.
+	 */
+	public void test_executeScript() throws Exception {
+		prepareMyComponent(new String[]{
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+		"public String myField = '_myField';"}, new String[]{});
+		parse(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <t:MyComponent wbp:name='myComponent' enabled='false'/>",
+				"</Shell>");
+		refresh();
+		CompositeInfo myComponent = getObjectByName("myComponent");
+		// existing script
+		assertEquals("false_myField", XmlObjectUtils.executeScript(
+				myComponent,
+				"return model.getAttributeValue('enabled') + object.myField"));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // createObject()
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link XmlObjectUtils#createObject(EditorContext, String, CreationSupport)}.
-   */
-  public void test_createObject_stringClass() throws Exception {
-    parse("<Shell/>");
-    // create SWT Button
-    XmlObjectInfo newObject =
-        XmlObjectUtils.createObject(
-            m_lastContext,
-            "org.eclipse.swt.widgets.Button",
-            new ElementCreationSupport());
-    assertSame(m_lastContext, newObject.getContext());
-    {
-      ComponentDescription description = newObject.getDescription();
-      assertEquals("org.eclipse.swt.widgets.Button", description.getComponentClass().getName());
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// createObject()
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link XmlObjectUtils#createObject(EditorContext, String, CreationSupport)}.
+	 */
+	public void test_createObject_stringClass() throws Exception {
+		parse("<Shell/>");
+		// create SWT Button
+		XmlObjectInfo newObject =
+				XmlObjectUtils.createObject(
+						m_lastContext,
+						"org.eclipse.swt.widgets.Button",
+						new ElementCreationSupport());
+		assertSame(m_lastContext, newObject.getContext());
+		{
+			ComponentDescription description = newObject.getDescription();
+			assertEquals("org.eclipse.swt.widgets.Button", description.getComponentClass().getName());
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // add()
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link XmlObjectUtils#add(XmlObjectInfo, Association, XmlObjectInfo, XmlObjectInfo)}.
-   */
-  public void test_add_noNext() throws Exception {
-    XmlObjectInfo container = parse("<Shell/>");
-    // add
-    XmlObjectInfo newObject = createButtonWithText();
-    XmlObjectUtils.add(newObject, Associations.direct(), container, null);
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Button text='New Button'/>",
-        "</Shell>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  implicit-layout: absolute",
-        "  <Button text='New Button'>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// add()
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link XmlObjectUtils#add(XmlObjectInfo, Association, XmlObjectInfo, XmlObjectInfo)}.
+	 */
+	public void test_add_noNext() throws Exception {
+		XmlObjectInfo container = parse("<Shell/>");
+		// add
+		XmlObjectInfo newObject = createButtonWithText();
+		XmlObjectUtils.add(newObject, Associations.direct(), container, null);
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Button text='New Button'/>",
+				"</Shell>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  implicit-layout: absolute",
+				"  <Button text='New Button'>");
+	}
 
-  /**
-   * Test for {@link XmlObjectUtils#add(XmlObjectInfo, Association, XmlObjectInfo, XmlObjectInfo)}.
-   */
-  public void test_add_hasNext() throws Exception {
-    XmlObjectInfo container =
-        parse(
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Button wbp:name='reference'/>",
-            "</Shell>");
-    XmlObjectInfo reference = getObjectByName("reference");
-    // add
-    XmlObjectInfo newObject = createButtonWithText();
-    XmlObjectUtils.add(newObject, Associations.direct(), container, reference);
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Button text='New Button'/>",
-        "  <Button wbp:name='reference'/>",
-        "</Shell>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  implicit-layout: absolute",
-        "  <Button text='New Button'>",
-        "  <Button wbp:name='reference'>");
-  }
+	/**
+	 * Test for {@link XmlObjectUtils#add(XmlObjectInfo, Association, XmlObjectInfo, XmlObjectInfo)}.
+	 */
+	public void test_add_hasNext() throws Exception {
+		XmlObjectInfo container =
+				parse(
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Button wbp:name='reference'/>",
+						"</Shell>");
+		XmlObjectInfo reference = getObjectByName("reference");
+		// add
+		XmlObjectInfo newObject = createButtonWithText();
+		XmlObjectUtils.add(newObject, Associations.direct(), container, reference);
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Button text='New Button'/>",
+				"  <Button wbp:name='reference'/>",
+				"</Shell>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  implicit-layout: absolute",
+				"  <Button text='New Button'>",
+				"  <Button wbp:name='reference'>");
+	}
 
-  /**
-   * Test for {@link XmlObjectUtils#addFirst(XmlObjectInfo, Association, XmlObjectInfo)}.
-   */
-  public void test_addFirst() throws Exception {
-    XmlObjectInfo container =
-        parse(
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Button wbp:name='reference'/>",
-            "</Shell>");
-    // add
-    XmlObjectInfo newObject = createButtonWithText();
-    XmlObjectUtils.addFirst(newObject, Associations.direct(), container);
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Button text='New Button'/>",
-        "  <Button wbp:name='reference'/>",
-        "</Shell>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Button text='New Button'>",
-        "  implicit-layout: absolute",
-        "  <Button wbp:name='reference'>");
-  }
+	/**
+	 * Test for {@link XmlObjectUtils#addFirst(XmlObjectInfo, Association, XmlObjectInfo)}.
+	 */
+	public void test_addFirst() throws Exception {
+		XmlObjectInfo container =
+				parse(
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Button wbp:name='reference'/>",
+						"</Shell>");
+		// add
+		XmlObjectInfo newObject = createButtonWithText();
+		XmlObjectUtils.addFirst(newObject, Associations.direct(), container);
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Button text='New Button'/>",
+				"  <Button wbp:name='reference'/>",
+				"</Shell>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Button text='New Button'>",
+				"  implicit-layout: absolute",
+				"  <Button wbp:name='reference'>");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // move()
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link XmlObjectUtils#move(XmlObjectInfo, Association, XmlObjectInfo, XmlObjectInfo)}.
-   */
-  public void test_move_noNext() throws Exception {
-    XmlObjectInfo container =
-        parse(
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Button wbp:name='buttonA'/>",
-            "  <Button wbp:name='button'/>",
-            "  <Button wbp:name='buttonB'/>",
-            "</Shell>");
-    XmlObjectInfo button = getObjectByName("button");
-    // move
-    XmlObjectUtils.move(button, Associations.direct(), container, null);
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Button wbp:name='buttonA'/>",
-        "  <Button wbp:name='buttonB'/>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  implicit-layout: absolute",
-        "  <Button wbp:name='buttonA'>",
-        "  <Button wbp:name='buttonB'>",
-        "  <Button wbp:name='button'>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// move()
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link XmlObjectUtils#move(XmlObjectInfo, Association, XmlObjectInfo, XmlObjectInfo)}.
+	 */
+	public void test_move_noNext() throws Exception {
+		XmlObjectInfo container =
+				parse(
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Button wbp:name='buttonA'/>",
+						"  <Button wbp:name='button'/>",
+						"  <Button wbp:name='buttonB'/>",
+						"</Shell>");
+		XmlObjectInfo button = getObjectByName("button");
+		// move
+		XmlObjectUtils.move(button, Associations.direct(), container, null);
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Button wbp:name='buttonA'/>",
+				"  <Button wbp:name='buttonB'/>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  implicit-layout: absolute",
+				"  <Button wbp:name='buttonA'>",
+				"  <Button wbp:name='buttonB'>",
+				"  <Button wbp:name='button'>");
+	}
 
-  /**
-   * Test for {@link XmlObjectUtils#move(XmlObjectInfo, Association, XmlObjectInfo, XmlObjectInfo)}.
-   */
-  public void test_move_hasNext() throws Exception {
-    XmlObjectInfo container =
-        parse(
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Button wbp:name='buttonA'/>",
-            "  <Button wbp:name='button'/>",
-            "  <Button wbp:name='buttonB'/>",
-            "</Shell>");
-    XmlObjectInfo button = getObjectByName("button");
-    XmlObjectInfo nextComponent = getObjectByName("buttonA");
-    // move
-    XmlObjectUtils.move(button, Associations.direct(), container, nextComponent);
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Button wbp:name='button'/>",
-        "  <Button wbp:name='buttonA'/>",
-        "  <Button wbp:name='buttonB'/>",
-        "</Shell>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  implicit-layout: absolute",
-        "  <Button wbp:name='button'>",
-        "  <Button wbp:name='buttonA'>",
-        "  <Button wbp:name='buttonB'>");
-  }
+	/**
+	 * Test for {@link XmlObjectUtils#move(XmlObjectInfo, Association, XmlObjectInfo, XmlObjectInfo)}.
+	 */
+	public void test_move_hasNext() throws Exception {
+		XmlObjectInfo container =
+				parse(
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Button wbp:name='buttonA'/>",
+						"  <Button wbp:name='button'/>",
+						"  <Button wbp:name='buttonB'/>",
+						"</Shell>");
+		XmlObjectInfo button = getObjectByName("button");
+		XmlObjectInfo nextComponent = getObjectByName("buttonA");
+		// move
+		XmlObjectUtils.move(button, Associations.direct(), container, nextComponent);
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Button wbp:name='button'/>",
+				"  <Button wbp:name='buttonA'/>",
+				"  <Button wbp:name='buttonB'/>",
+				"</Shell>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  implicit-layout: absolute",
+				"  <Button wbp:name='button'>",
+				"  <Button wbp:name='buttonA'>",
+				"  <Button wbp:name='buttonB'>");
+	}
 
-  /**
-   * Test for {@link XmlObjectUtils#move(XmlObjectInfo, Association, XmlObjectInfo, XmlObjectInfo)}.
-   * <p>
-   * Test for using without {@link Association}, allowed during reorder.
-   */
-  public void test_move_noAssociation() throws Exception {
-    XmlObjectInfo container =
-        parse(
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Button wbp:name='buttonA'/>",
-            "  <Button wbp:name='button'/>",
-            "  <Button wbp:name='buttonB'/>",
-            "</Shell>");
-    XmlObjectInfo component = getObjectByName("button");
-    XmlObjectInfo nextComponent = getObjectByName("buttonA");
-    // move
-    XmlObjectUtils.move(component, null, container, nextComponent);
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Button wbp:name='button'/>",
-        "  <Button wbp:name='buttonA'/>",
-        "  <Button wbp:name='buttonB'/>",
-        "</Shell>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  implicit-layout: absolute",
-        "  <Button wbp:name='button'>",
-        "  <Button wbp:name='buttonA'>",
-        "  <Button wbp:name='buttonB'>");
-  }
+	/**
+	 * Test for {@link XmlObjectUtils#move(XmlObjectInfo, Association, XmlObjectInfo, XmlObjectInfo)}.
+	 * <p>
+	 * Test for using without {@link Association}, allowed during reorder.
+	 */
+	public void test_move_noAssociation() throws Exception {
+		XmlObjectInfo container =
+				parse(
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Button wbp:name='buttonA'/>",
+						"  <Button wbp:name='button'/>",
+						"  <Button wbp:name='buttonB'/>",
+						"</Shell>");
+		XmlObjectInfo component = getObjectByName("button");
+		XmlObjectInfo nextComponent = getObjectByName("buttonA");
+		// move
+		XmlObjectUtils.move(component, null, container, nextComponent);
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Button wbp:name='button'/>",
+				"  <Button wbp:name='buttonA'/>",
+				"  <Button wbp:name='buttonB'/>",
+				"</Shell>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  implicit-layout: absolute",
+				"  <Button wbp:name='button'>",
+				"  <Button wbp:name='buttonA'>",
+				"  <Button wbp:name='buttonB'>");
+	}
 
-  /**
-   * Test for {@link XmlObjectUtils#move(XmlObjectInfo, Association, XmlObjectInfo, XmlObjectInfo)}.
-   */
-  public void test_move_reparent() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Composite wbp:name='composite'/>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    XmlObjectInfo composite = getObjectByName("composite");
-    XmlObjectInfo button = getObjectByName("button");
-    // move
-    XmlObjectUtils.move(button, Associations.direct(), composite, null);
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Composite wbp:name='composite'>",
-        "    <Button wbp:name='button'/>",
-        "  </Composite>",
-        "</Shell>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  implicit-layout: absolute",
-        "  <Composite wbp:name='composite'>",
-        "    implicit-layout: absolute",
-        "    <Button wbp:name='button'>");
-  }
+	/**
+	 * Test for {@link XmlObjectUtils#move(XmlObjectInfo, Association, XmlObjectInfo, XmlObjectInfo)}.
+	 */
+	public void test_move_reparent() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Composite wbp:name='composite'/>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		XmlObjectInfo composite = getObjectByName("composite");
+		XmlObjectInfo button = getObjectByName("button");
+		// move
+		XmlObjectUtils.move(button, Associations.direct(), composite, null);
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Composite wbp:name='composite'>",
+				"    <Button wbp:name='button'/>",
+				"  </Composite>",
+				"</Shell>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  implicit-layout: absolute",
+				"  <Composite wbp:name='composite'>",
+				"    implicit-layout: absolute",
+				"    <Button wbp:name='button'>");
+	}
 
-  /**
-   * Test for {@link XmlObjectUtils#move(XmlObjectInfo, Association, XmlObjectInfo, XmlObjectInfo)}.
-   * <p>
-   * When we move out some {@link DocumentElement} we should remove intermediate elements between
-   * moved {@link DocumentElement} and parent {@link DocumentElement}.
-   */
-  public void test_move_whenInSubElement_ofOldParent_() throws Exception {
-    XmlObjectInfo shell =
-        parse(
-            "<Shell>",
-            "  <TabFolder>",
-            "    <TabItem>",
-            "      <TabItem.control>",
-            "        <Button wbp:name='button'/>",
-            "      </TabItem.control>",
-            "    </TabItem>",
-            "  </TabFolder>",
-            "</Shell>");
-    XmlObjectInfo button = getObjectByName("button");
-    // move
-    XmlObjectUtils.move(button, Associations.direct(), shell, null);
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <TabFolder>",
-        "    <TabItem/>",
-        "  </TabFolder>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  implicit-layout: absolute",
-        "  <TabFolder>",
-        "    <TabItem>",
-        "  <Button wbp:name='button'>");
-  }
+	/**
+	 * Test for {@link XmlObjectUtils#move(XmlObjectInfo, Association, XmlObjectInfo, XmlObjectInfo)}.
+	 * <p>
+	 * When we move out some {@link DocumentElement} we should remove intermediate elements between
+	 * moved {@link DocumentElement} and parent {@link DocumentElement}.
+	 */
+	public void test_move_whenInSubElement_ofOldParent_() throws Exception {
+		XmlObjectInfo shell =
+				parse(
+						"<Shell>",
+						"  <TabFolder>",
+						"    <TabItem>",
+						"      <TabItem.control>",
+						"        <Button wbp:name='button'/>",
+						"      </TabItem.control>",
+						"    </TabItem>",
+						"  </TabFolder>",
+						"</Shell>");
+		XmlObjectInfo button = getObjectByName("button");
+		// move
+		XmlObjectUtils.move(button, Associations.direct(), shell, null);
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <TabFolder>",
+				"    <TabItem/>",
+				"  </TabFolder>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  implicit-layout: absolute",
+				"  <TabFolder>",
+				"    <TabItem>",
+				"  <Button wbp:name='button'>");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // getTagForClass()
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link XmlObjectUtils#getTagForClass(XmlObjectInfo, Class)}.
-   */
-  public void test_getTagForClass() throws Exception {
-    XmlObjectInfo shell = parse("<Shell/>");
-    // no namespace
-    {
-      assertEquals(
-          "Button",
-          XmlObjectUtils.getTagForClass(
-              shell,
-              m_lastLoader.loadClass("org.eclipse.swt.widgets.Button")));
-      assertXML("<Shell/>");
-    }
-    // has namespace
-    {
-      assertEquals(
-          "p1:String",
-          XmlObjectUtils.getTagForClass(shell, m_lastLoader.loadClass("java.lang.String")));
-      assertXML("<Shell xmlns:p1='clr-namespace:java.lang'/>");
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// getTagForClass()
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link XmlObjectUtils#getTagForClass(XmlObjectInfo, Class)}.
+	 */
+	public void test_getTagForClass() throws Exception {
+		XmlObjectInfo shell = parse("<Shell/>");
+		// no namespace
+		{
+			assertEquals(
+					"Button",
+					XmlObjectUtils.getTagForClass(
+							shell,
+							m_lastLoader.loadClass("org.eclipse.swt.widgets.Button")));
+			assertXML("<Shell/>");
+		}
+		// has namespace
+		{
+			assertEquals(
+					"p1:String",
+					XmlObjectUtils.getTagForClass(shell, m_lastLoader.loadClass("java.lang.String")));
+			assertXML("<Shell xmlns:p1='clr-namespace:java.lang'/>");
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/association/AssociationTests.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/association/AssociationTests.java
index 4961087ca..32ef2123a 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/association/AssociationTests.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/association/AssociationTests.java
@@ -22,12 +22,12 @@
  * @author scheglov_ke
  */
 public class AssociationTests extends DesignerSuiteTests {
-  public static Test suite() {
-    TestSuite suite = new TestSuite("org.eclipse.wb.xml.model.association");
-    suite.addTest(createSingleSuite(DirectAssociationTest.class));
-    suite.addTest(createSingleSuite(OrderAssociationTest.class));
-    suite.addTest(createSingleSuite(PropertyAssociationTest.class));
-    suite.addTest(createSingleSuite(IntermediateAssociationTest.class));
-    return suite;
-  }
+	public static Test suite() {
+		TestSuite suite = new TestSuite("org.eclipse.wb.xml.model.association");
+		suite.addTest(createSingleSuite(DirectAssociationTest.class));
+		suite.addTest(createSingleSuite(OrderAssociationTest.class));
+		suite.addTest(createSingleSuite(PropertyAssociationTest.class));
+		suite.addTest(createSingleSuite(IntermediateAssociationTest.class));
+		return suite;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/association/DirectAssociationTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/association/DirectAssociationTest.java
index e26e84134..0a00e4f58 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/association/DirectAssociationTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/association/DirectAssociationTest.java
@@ -24,185 +24,185 @@
  * @author scheglov_ke
  */
 public class DirectAssociationTest extends AbstractCoreTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_toString() throws Exception {
-    Association association = Associations.direct();
-    assertEquals("direct", association.toString());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_toString() throws Exception {
+		Association association = Associations.direct();
+		assertEquals("direct", association.toString());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // add()
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link Association#add(XmlObjectInfo, ElementTarget)}.
-   */
-  public void test_add_noNext() throws Exception {
-    XmlObjectInfo container = parse("<Shell/>");
-    // add
-    XmlObjectInfo newObject = createButton();
-    Association association = Associations.direct();
-    XmlObjectUtils.add(newObject, association, container, null);
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Button/>",
-        "</Shell>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  implicit-layout: absolute",
-        "  <Button>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// add()
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link Association#add(XmlObjectInfo, ElementTarget)}.
+	 */
+	public void test_add_noNext() throws Exception {
+		XmlObjectInfo container = parse("<Shell/>");
+		// add
+		XmlObjectInfo newObject = createButton();
+		Association association = Associations.direct();
+		XmlObjectUtils.add(newObject, association, container, null);
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Button/>",
+				"</Shell>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  implicit-layout: absolute",
+				"  <Button>");
+	}
 
-  /**
-   * Test for {@link Association#add(XmlObjectInfo, ElementTarget)}.
-   */
-  public void test_add_hasNext() throws Exception {
-    XmlObjectInfo container =
-        parse(
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Button wbp:name='other'/>",
-            "  <Button wbp:name='reference'/>",
-            "</Shell>");
-    XmlObjectInfo reference = getObjectByName("reference");
-    // add
-    XmlObjectInfo newObject = createButton();
-    Association association = Associations.direct();
-    XmlObjectUtils.add(newObject, association, container, reference);
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Button wbp:name='other'/>",
-        "  <Button/>",
-        "  <Button wbp:name='reference'/>",
-        "</Shell>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  implicit-layout: absolute",
-        "  <Button wbp:name='other'>",
-        "  <Button>",
-        "  <Button wbp:name='reference'>");
-  }
+	/**
+	 * Test for {@link Association#add(XmlObjectInfo, ElementTarget)}.
+	 */
+	public void test_add_hasNext() throws Exception {
+		XmlObjectInfo container =
+				parse(
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Button wbp:name='other'/>",
+						"  <Button wbp:name='reference'/>",
+						"</Shell>");
+		XmlObjectInfo reference = getObjectByName("reference");
+		// add
+		XmlObjectInfo newObject = createButton();
+		Association association = Associations.direct();
+		XmlObjectUtils.add(newObject, association, container, reference);
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Button wbp:name='other'/>",
+				"  <Button/>",
+				"  <Button wbp:name='reference'/>",
+				"</Shell>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  implicit-layout: absolute",
+				"  <Button wbp:name='other'>",
+				"  <Button>",
+				"  <Button wbp:name='reference'>");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // move()
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link Association#move(XmlObjectInfo, ElementTarget, XmlObjectInfo, XmlObjectInfo)}.
-   */
-  public void test_move_noNext() throws Exception {
-    XmlObjectInfo container =
-        parse(
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Button wbp:name='buttonA'/>",
-            "  <Button wbp:name='button'/>",
-            "  <Button wbp:name='buttonB'/>",
-            "</Shell>");
-    XmlObjectInfo button = getObjectByName("button");
-    // move
-    Association association = Associations.direct();
-    XmlObjectUtils.move(button, association, container, null);
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Button wbp:name='buttonA'/>",
-        "  <Button wbp:name='buttonB'/>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  implicit-layout: absolute",
-        "  <Button wbp:name='buttonA'>",
-        "  <Button wbp:name='buttonB'>",
-        "  <Button wbp:name='button'>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// move()
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link Association#move(XmlObjectInfo, ElementTarget, XmlObjectInfo, XmlObjectInfo)}.
+	 */
+	public void test_move_noNext() throws Exception {
+		XmlObjectInfo container =
+				parse(
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Button wbp:name='buttonA'/>",
+						"  <Button wbp:name='button'/>",
+						"  <Button wbp:name='buttonB'/>",
+						"</Shell>");
+		XmlObjectInfo button = getObjectByName("button");
+		// move
+		Association association = Associations.direct();
+		XmlObjectUtils.move(button, association, container, null);
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Button wbp:name='buttonA'/>",
+				"  <Button wbp:name='buttonB'/>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  implicit-layout: absolute",
+				"  <Button wbp:name='buttonA'>",
+				"  <Button wbp:name='buttonB'>",
+				"  <Button wbp:name='button'>");
+	}
 
-  /**
-   * Test for {@link Association#move(XmlObjectInfo, ElementTarget, XmlObjectInfo, XmlObjectInfo)}.
-   */
-  public void test_move_hasNext() throws Exception {
-    XmlObjectInfo container =
-        parse(
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Button wbp:name='buttonA'/>",
-            "  <Button wbp:name='button'/>",
-            "  <Button wbp:name='buttonB'/>",
-            "</Shell>");
-    XmlObjectInfo button = getObjectByName("button");
-    XmlObjectInfo nextComponent = getObjectByName("buttonA");
-    // move
-    Association association = Associations.direct();
-    XmlObjectUtils.move(button, association, container, nextComponent);
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Button wbp:name='button'/>",
-        "  <Button wbp:name='buttonA'/>",
-        "  <Button wbp:name='buttonB'/>",
-        "</Shell>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  implicit-layout: absolute",
-        "  <Button wbp:name='button'>",
-        "  <Button wbp:name='buttonA'>",
-        "  <Button wbp:name='buttonB'>");
-  }
+	/**
+	 * Test for {@link Association#move(XmlObjectInfo, ElementTarget, XmlObjectInfo, XmlObjectInfo)}.
+	 */
+	public void test_move_hasNext() throws Exception {
+		XmlObjectInfo container =
+				parse(
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Button wbp:name='buttonA'/>",
+						"  <Button wbp:name='button'/>",
+						"  <Button wbp:name='buttonB'/>",
+						"</Shell>");
+		XmlObjectInfo button = getObjectByName("button");
+		XmlObjectInfo nextComponent = getObjectByName("buttonA");
+		// move
+		Association association = Associations.direct();
+		XmlObjectUtils.move(button, association, container, nextComponent);
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Button wbp:name='button'/>",
+				"  <Button wbp:name='buttonA'/>",
+				"  <Button wbp:name='buttonB'/>",
+				"</Shell>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  implicit-layout: absolute",
+				"  <Button wbp:name='button'>",
+				"  <Button wbp:name='buttonA'>",
+				"  <Button wbp:name='buttonB'>");
+	}
 
-  /**
-   * Test for {@link Association#move(XmlObjectInfo, ElementTarget, XmlObjectInfo, XmlObjectInfo)}.
-   */
-  public void test_move_reparent() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Composite wbp:name='composite'/>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    XmlObjectInfo composite = getObjectByName("composite");
-    XmlObjectInfo button = getObjectByName("button");
-    // move
-    Association association = Associations.direct();
-    XmlObjectUtils.move(button, association, composite, null);
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Composite wbp:name='composite'>",
-        "    <Button wbp:name='button'/>",
-        "  </Composite>",
-        "</Shell>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  implicit-layout: absolute",
-        "  <Composite wbp:name='composite'>",
-        "    implicit-layout: absolute",
-        "    <Button wbp:name='button'>");
-  }
+	/**
+	 * Test for {@link Association#move(XmlObjectInfo, ElementTarget, XmlObjectInfo, XmlObjectInfo)}.
+	 */
+	public void test_move_reparent() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Composite wbp:name='composite'/>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		XmlObjectInfo composite = getObjectByName("composite");
+		XmlObjectInfo button = getObjectByName("button");
+		// move
+		Association association = Associations.direct();
+		XmlObjectUtils.move(button, association, composite, null);
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Composite wbp:name='composite'>",
+				"    <Button wbp:name='button'/>",
+				"  </Composite>",
+				"</Shell>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  implicit-layout: absolute",
+				"  <Composite wbp:name='composite'>",
+				"    implicit-layout: absolute",
+				"    <Button wbp:name='button'>");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/association/IntermediateAssociationTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/association/IntermediateAssociationTest.java
index c638c89cf..eec57fd18 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/association/IntermediateAssociationTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/association/IntermediateAssociationTest.java
@@ -26,195 +26,195 @@
  * @author scheglov_ke
  */
 public class IntermediateAssociationTest extends AbstractCoreTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_toString() throws Exception {
-    Association association = Associations.name("foo");
-    assertEquals("inter foo", association.toString());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_toString() throws Exception {
+		Association association = Associations.name("foo");
+		assertEquals("inter foo", association.toString());
+	}
 
-  public void test_toString_withAttributes() throws Exception {
-    Association association =
-        Associations.intermediate("foo", ImmutableMap.of("attrA", "a", "attrB", "b"));
-    assertEquals("inter foo {attrA=a, attrB=b}", association.toString());
-  }
+	public void test_toString_withAttributes() throws Exception {
+		Association association =
+				Associations.intermediate("foo", ImmutableMap.of("attrA", "a", "attrB", "b"));
+		assertEquals("inter foo {attrA=a, attrB=b}", association.toString());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // add()
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link Association#add(XmlObjectInfo, ElementTarget)}.
-   */
-  public void test_add() throws Exception {
-    XmlObjectInfo container = parse("<Shell/>");
-    // add
-    XmlObjectInfo newObject = createButton();
-    Association association = Associations.name("foo");
-    XmlObjectUtils.add(newObject, association, container, null);
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <foo>",
-        "    <Button/>",
-        "  </foo>",
-        "</Shell>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  implicit-layout: absolute",
-        "  <Button>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// add()
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link Association#add(XmlObjectInfo, ElementTarget)}.
+	 */
+	public void test_add() throws Exception {
+		XmlObjectInfo container = parse("<Shell/>");
+		// add
+		XmlObjectInfo newObject = createButton();
+		Association association = Associations.name("foo");
+		XmlObjectUtils.add(newObject, association, container, null);
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <foo>",
+				"    <Button/>",
+				"  </foo>",
+				"</Shell>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  implicit-layout: absolute",
+				"  <Button>");
+	}
 
-  /**
-   * Test for {@link Association#add(XmlObjectInfo, ElementTarget)}.
-   * <p>
-   * Support for "{parentNS}" in name of tag.
-   */
-  public void test_add_parentNS() throws Exception {
-    XmlObjectInfo container = parse("<z:Shell xmlns:z='http://www.eclipse.org/xwt/presentation'/>");
-    // add
-    XmlObjectInfo newObject = createButton();
-    Association association = Associations.name("{parentNS}foo");
-    XmlObjectUtils.add(newObject, association, container, null);
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<z:Shell xmlns:z='http://www.eclipse.org/xwt/presentation'>",
-        "  <z:foo>",
-        "    <z:Button/>",
-        "  </z:foo>",
-        "</z:Shell>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<z:Shell>",
-        "  implicit-layout: absolute",
-        "  <z:Button>");
-  }
+	/**
+	 * Test for {@link Association#add(XmlObjectInfo, ElementTarget)}.
+	 * <p>
+	 * Support for "{parentNS}" in name of tag.
+	 */
+	public void test_add_parentNS() throws Exception {
+		XmlObjectInfo container = parse("<z:Shell xmlns:z='http://www.eclipse.org/xwt/presentation'/>");
+		// add
+		XmlObjectInfo newObject = createButton();
+		Association association = Associations.name("{parentNS}foo");
+		XmlObjectUtils.add(newObject, association, container, null);
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<z:Shell xmlns:z='http://www.eclipse.org/xwt/presentation'>",
+				"  <z:foo>",
+				"    <z:Button/>",
+				"  </z:foo>",
+				"</z:Shell>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<z:Shell>",
+				"  implicit-layout: absolute",
+				"  <z:Button>");
+	}
 
-  /**
-   * Test for {@link Association#add(XmlObjectInfo, ElementTarget)}.
-   */
-  public void test_add_attributes() throws Exception {
-    XmlObjectInfo container = parse("<Shell/>");
-    // add
-    XmlObjectInfo newObject = createButton();
-    Association association =
-        Associations.intermediate("foo", ImmutableMap.of("attrA", "a", "attrB", "b"));
-    XmlObjectUtils.add(newObject, association, container, null);
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <foo attrA='a' attrB='b'>",
-        "    <Button/>",
-        "  </foo>",
-        "</Shell>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  implicit-layout: absolute",
-        "  <Button>");
-  }
+	/**
+	 * Test for {@link Association#add(XmlObjectInfo, ElementTarget)}.
+	 */
+	public void test_add_attributes() throws Exception {
+		XmlObjectInfo container = parse("<Shell/>");
+		// add
+		XmlObjectInfo newObject = createButton();
+		Association association =
+				Associations.intermediate("foo", ImmutableMap.of("attrA", "a", "attrB", "b"));
+		XmlObjectUtils.add(newObject, association, container, null);
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <foo attrA='a' attrB='b'>",
+				"    <Button/>",
+				"  </foo>",
+				"</Shell>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  implicit-layout: absolute",
+				"  <Button>");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // move()
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link Association#move(XmlObjectInfo, ElementTarget, XmlObjectInfo, XmlObjectInfo)}.
-   * <p>
-   * Inner move in same container, child is already in "name" element, so we move it as is.
-   */
-  public void test_move_inner_alreadyInName() throws Exception {
-    XmlObjectInfo container =
-        parse(
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Button wbp:name='buttonA'/>",
-            "  <Shell.layout >",
-            "    <FillLayout wbp:name='layout'/>",
-            "  </Shell.layout>",
-            "  <Button wbp:name='buttonB'/>",
-            "</Shell>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <FillLayout wbp:name='layout'>",
-        "  <Button wbp:name='buttonA'>",
-        "  <Button wbp:name='buttonB'>");
-    XmlObjectInfo layout = getObjectByName("layout");
-    // move
-    Association association = Associations.name("Shell.foo");
-    XmlObjectUtils.move(layout, association, container, null);
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Button wbp:name='buttonA'/>",
-        "  <Button wbp:name='buttonB'/>",
-        "  <Shell.layout >",
-        "    <FillLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "</Shell>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Button wbp:name='buttonA'>",
-        "  <Button wbp:name='buttonB'>",
-        "  <FillLayout wbp:name='layout'>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// move()
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link Association#move(XmlObjectInfo, ElementTarget, XmlObjectInfo, XmlObjectInfo)}.
+	 * <p>
+	 * Inner move in same container, child is already in "name" element, so we move it as is.
+	 */
+	public void test_move_inner_alreadyInName() throws Exception {
+		XmlObjectInfo container =
+				parse(
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Button wbp:name='buttonA'/>",
+						"  <Shell.layout >",
+						"    <FillLayout wbp:name='layout'/>",
+						"  </Shell.layout>",
+						"  <Button wbp:name='buttonB'/>",
+						"</Shell>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <FillLayout wbp:name='layout'>",
+				"  <Button wbp:name='buttonA'>",
+				"  <Button wbp:name='buttonB'>");
+		XmlObjectInfo layout = getObjectByName("layout");
+		// move
+		Association association = Associations.name("Shell.foo");
+		XmlObjectUtils.move(layout, association, container, null);
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Button wbp:name='buttonA'/>",
+				"  <Button wbp:name='buttonB'/>",
+				"  <Shell.layout >",
+				"    <FillLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"</Shell>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Button wbp:name='buttonA'>",
+				"  <Button wbp:name='buttonB'>",
+				"  <FillLayout wbp:name='layout'>");
+	}
 
-  /**
-   * Test for {@link Association#move(XmlObjectInfo, ElementTarget, XmlObjectInfo, XmlObjectInfo)}.
-   */
-  public void test_move_reparent() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Composite wbp:name='composite'/>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    XmlObjectInfo composite = getObjectByName("composite");
-    XmlObjectInfo button = getObjectByName("button");
-    // move
-    Association association = Associations.name("foo");
-    XmlObjectUtils.move(button, association, composite, null);
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Composite wbp:name='composite'>",
-        "    <foo>",
-        "      <Button wbp:name='button'/>",
-        "    </foo>",
-        "  </Composite>",
-        "</Shell>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  implicit-layout: absolute",
-        "  <Composite wbp:name='composite'>",
-        "    implicit-layout: absolute",
-        "    <Button wbp:name='button'>");
-  }
+	/**
+	 * Test for {@link Association#move(XmlObjectInfo, ElementTarget, XmlObjectInfo, XmlObjectInfo)}.
+	 */
+	public void test_move_reparent() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Composite wbp:name='composite'/>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		XmlObjectInfo composite = getObjectByName("composite");
+		XmlObjectInfo button = getObjectByName("button");
+		// move
+		Association association = Associations.name("foo");
+		XmlObjectUtils.move(button, association, composite, null);
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Composite wbp:name='composite'>",
+				"    <foo>",
+				"      <Button wbp:name='button'/>",
+				"    </foo>",
+				"  </Composite>",
+				"</Shell>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  implicit-layout: absolute",
+				"  <Composite wbp:name='composite'>",
+				"    implicit-layout: absolute",
+				"    <Button wbp:name='button'>");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/association/OrderAssociationTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/association/OrderAssociationTest.java
index aa5fdac33..9ccf7fdd2 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/association/OrderAssociationTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/association/OrderAssociationTest.java
@@ -26,92 +26,92 @@
  * @author scheglov_ke
  */
 public class OrderAssociationTest extends AbstractCoreTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_toString() throws Exception {
-    Association association = OrderAssociation.INSTANCE;
-    assertEquals("order", association.toString());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_toString() throws Exception {
+		Association association = OrderAssociation.INSTANCE;
+		assertEquals("order", association.toString());
+	}
 
-  /**
-   * Test for {@link Association#add(XmlObjectInfo, ElementTarget)}.
-   */
-  public void test_add_notImplemented() throws Exception {
-    XmlObjectInfo container = parse("<Shell/>");
-    // add
-    XmlObjectInfo newObject = createButton();
-    Association association = OrderAssociation.INSTANCE;
-    try {
-      XmlObjectUtils.add(newObject, association, container, null);
-      fail();
-    } catch (NotImplementedException e) {
-    }
-  }
+	/**
+	 * Test for {@link Association#add(XmlObjectInfo, ElementTarget)}.
+	 */
+	public void test_add_notImplemented() throws Exception {
+		XmlObjectInfo container = parse("<Shell/>");
+		// add
+		XmlObjectInfo newObject = createButton();
+		Association association = OrderAssociation.INSTANCE;
+		try {
+			XmlObjectUtils.add(newObject, association, container, null);
+			fail();
+		} catch (NotImplementedException e) {
+		}
+	}
 
-  /**
-   * Test for {@link Association#move(XmlObjectInfo, ElementTarget, XmlObjectInfo, XmlObjectInfo)}.
-   */
-  public void test_reorder() throws Exception {
-    XmlObjectInfo container =
-        parse(
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Button wbp:name='buttonA'/>",
-            "  <Button wbp:name='button'/>",
-            "  <Button wbp:name='buttonB'/>",
-            "</Shell>");
-    XmlObjectInfo button = getObjectByName("button");
-    // move
-    Association association = OrderAssociation.INSTANCE;
-    XmlObjectUtils.move(button, association, container, null);
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Button wbp:name='buttonA'/>",
-        "  <Button wbp:name='buttonB'/>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  implicit-layout: absolute",
-        "  <Button wbp:name='buttonA'>",
-        "  <Button wbp:name='buttonB'>",
-        "  <Button wbp:name='button'>");
-  }
+	/**
+	 * Test for {@link Association#move(XmlObjectInfo, ElementTarget, XmlObjectInfo, XmlObjectInfo)}.
+	 */
+	public void test_reorder() throws Exception {
+		XmlObjectInfo container =
+				parse(
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Button wbp:name='buttonA'/>",
+						"  <Button wbp:name='button'/>",
+						"  <Button wbp:name='buttonB'/>",
+						"</Shell>");
+		XmlObjectInfo button = getObjectByName("button");
+		// move
+		Association association = OrderAssociation.INSTANCE;
+		XmlObjectUtils.move(button, association, container, null);
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Button wbp:name='buttonA'/>",
+				"  <Button wbp:name='buttonB'/>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  implicit-layout: absolute",
+				"  <Button wbp:name='buttonA'>",
+				"  <Button wbp:name='buttonB'>",
+				"  <Button wbp:name='button'>");
+	}
 
-  /**
-   * Test for {@link Association#move(XmlObjectInfo, ElementTarget, XmlObjectInfo, XmlObjectInfo)}.
-   */
-  public void test_reparent_notImplemented() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Composite wbp:name='composite'/>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    XmlObjectInfo composite = getObjectByName("composite");
-    XmlObjectInfo button = getObjectByName("button");
-    // move
-    Association association = OrderAssociation.INSTANCE;
-    try {
-      XmlObjectUtils.move(button, association, composite, null);
-      fail();
-    } catch (AssertionFailedException e) {
-    }
-  }
+	/**
+	 * Test for {@link Association#move(XmlObjectInfo, ElementTarget, XmlObjectInfo, XmlObjectInfo)}.
+	 */
+	public void test_reparent_notImplemented() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Composite wbp:name='composite'/>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		XmlObjectInfo composite = getObjectByName("composite");
+		XmlObjectInfo button = getObjectByName("button");
+		// move
+		Association association = OrderAssociation.INSTANCE;
+		try {
+			XmlObjectUtils.move(button, association, composite, null);
+			fail();
+		} catch (AssertionFailedException e) {
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/association/PropertyAssociationTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/association/PropertyAssociationTest.java
index b4170b31f..d63393e11 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/association/PropertyAssociationTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/association/PropertyAssociationTest.java
@@ -24,195 +24,195 @@
  * @author scheglov_ke
  */
 public class PropertyAssociationTest extends AbstractCoreTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_toString() throws Exception {
-    Association association = Associations.property("foo");
-    assertEquals("property foo", association.toString());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_toString() throws Exception {
+		Association association = Associations.property("foo");
+		assertEquals("property foo", association.toString());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // add()
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link Association#add(XmlObjectInfo, ElementTarget)}.
-   */
-  public void test_add_noNext() throws Exception {
-    XmlObjectInfo container = parse("<Shell/>");
-    // add
-    XmlObjectInfo newObject = createButton();
-    Association association = Associations.property("foo");
-    XmlObjectUtils.add(newObject, association, container, null);
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.foo>",
-        "    <Button/>",
-        "  </Shell.foo>",
-        "</Shell>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  implicit-layout: absolute",
-        "  <Button>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// add()
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link Association#add(XmlObjectInfo, ElementTarget)}.
+	 */
+	public void test_add_noNext() throws Exception {
+		XmlObjectInfo container = parse("<Shell/>");
+		// add
+		XmlObjectInfo newObject = createButton();
+		Association association = Associations.property("foo");
+		XmlObjectUtils.add(newObject, association, container, null);
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.foo>",
+				"    <Button/>",
+				"  </Shell.foo>",
+				"</Shell>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  implicit-layout: absolute",
+				"  <Button>");
+	}
 
-  /**
-   * Test for {@link Association#add(XmlObjectInfo, ElementTarget)}.
-   */
-  public void test_add_hasNext() throws Exception {
-    XmlObjectInfo container =
-        parse(
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Button wbp:name='other'/>",
-            "  <Button wbp:name='reference'/>",
-            "</Shell>");
-    XmlObjectInfo reference = getObjectByName("reference");
-    // add
-    XmlObjectInfo newObject = createButton();
-    Association association = Associations.property("foo");
-    XmlObjectUtils.add(newObject, association, container, reference);
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Button wbp:name='other'/>",
-        "  <Shell.foo>",
-        "    <Button/>",
-        "  </Shell.foo>",
-        "  <Button wbp:name='reference'/>",
-        "</Shell>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  implicit-layout: absolute",
-        "  <Button wbp:name='other'>",
-        "  <Button>",
-        "  <Button wbp:name='reference'>");
-  }
+	/**
+	 * Test for {@link Association#add(XmlObjectInfo, ElementTarget)}.
+	 */
+	public void test_add_hasNext() throws Exception {
+		XmlObjectInfo container =
+				parse(
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Button wbp:name='other'/>",
+						"  <Button wbp:name='reference'/>",
+						"</Shell>");
+		XmlObjectInfo reference = getObjectByName("reference");
+		// add
+		XmlObjectInfo newObject = createButton();
+		Association association = Associations.property("foo");
+		XmlObjectUtils.add(newObject, association, container, reference);
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Button wbp:name='other'/>",
+				"  <Shell.foo>",
+				"    <Button/>",
+				"  </Shell.foo>",
+				"  <Button wbp:name='reference'/>",
+				"</Shell>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  implicit-layout: absolute",
+				"  <Button wbp:name='other'>",
+				"  <Button>",
+				"  <Button wbp:name='reference'>");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // move()
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link Association#move(XmlObjectInfo, ElementTarget, XmlObjectInfo, XmlObjectInfo)}.
-   */
-  public void test_move_noNext() throws Exception {
-    XmlObjectInfo container =
-        parse(
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Button wbp:name='buttonA'/>",
-            "  <Button wbp:name='button'/>",
-            "  <Button wbp:name='buttonB'/>",
-            "</Shell>");
-    XmlObjectInfo button = getObjectByName("button");
-    // move
-    Association association = Associations.property("foo");
-    XmlObjectUtils.move(button, association, container, null);
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Button wbp:name='buttonA'/>",
-        "  <Button wbp:name='buttonB'/>",
-        "  <Shell.foo>",
-        "    <Button wbp:name='button'/>",
-        "  </Shell.foo>",
-        "</Shell>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  implicit-layout: absolute",
-        "  <Button wbp:name='buttonA'>",
-        "  <Button wbp:name='buttonB'>",
-        "  <Button wbp:name='button'>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// move()
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link Association#move(XmlObjectInfo, ElementTarget, XmlObjectInfo, XmlObjectInfo)}.
+	 */
+	public void test_move_noNext() throws Exception {
+		XmlObjectInfo container =
+				parse(
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Button wbp:name='buttonA'/>",
+						"  <Button wbp:name='button'/>",
+						"  <Button wbp:name='buttonB'/>",
+						"</Shell>");
+		XmlObjectInfo button = getObjectByName("button");
+		// move
+		Association association = Associations.property("foo");
+		XmlObjectUtils.move(button, association, container, null);
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Button wbp:name='buttonA'/>",
+				"  <Button wbp:name='buttonB'/>",
+				"  <Shell.foo>",
+				"    <Button wbp:name='button'/>",
+				"  </Shell.foo>",
+				"</Shell>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  implicit-layout: absolute",
+				"  <Button wbp:name='buttonA'>",
+				"  <Button wbp:name='buttonB'>",
+				"  <Button wbp:name='button'>");
+	}
 
-  /**
-   * Test for {@link Association#move(XmlObjectInfo, ElementTarget, XmlObjectInfo, XmlObjectInfo)}.
-   */
-  public void test_move_hasNext() throws Exception {
-    XmlObjectInfo container =
-        parse(
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Button wbp:name='buttonA'/>",
-            "  <Button wbp:name='button'/>",
-            "  <Button wbp:name='buttonB'/>",
-            "</Shell>");
-    XmlObjectInfo button = getObjectByName("button");
-    XmlObjectInfo nextComponent = getObjectByName("buttonA");
-    // move
-    Association association = Associations.property("foo");
-    XmlObjectUtils.move(button, association, container, nextComponent);
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.foo>",
-        "    <Button wbp:name='button'/>",
-        "  </Shell.foo>",
-        "  <Button wbp:name='buttonA'/>",
-        "  <Button wbp:name='buttonB'/>",
-        "</Shell>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  implicit-layout: absolute",
-        "  <Button wbp:name='button'>",
-        "  <Button wbp:name='buttonA'>",
-        "  <Button wbp:name='buttonB'>");
-  }
+	/**
+	 * Test for {@link Association#move(XmlObjectInfo, ElementTarget, XmlObjectInfo, XmlObjectInfo)}.
+	 */
+	public void test_move_hasNext() throws Exception {
+		XmlObjectInfo container =
+				parse(
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Button wbp:name='buttonA'/>",
+						"  <Button wbp:name='button'/>",
+						"  <Button wbp:name='buttonB'/>",
+						"</Shell>");
+		XmlObjectInfo button = getObjectByName("button");
+		XmlObjectInfo nextComponent = getObjectByName("buttonA");
+		// move
+		Association association = Associations.property("foo");
+		XmlObjectUtils.move(button, association, container, nextComponent);
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.foo>",
+				"    <Button wbp:name='button'/>",
+				"  </Shell.foo>",
+				"  <Button wbp:name='buttonA'/>",
+				"  <Button wbp:name='buttonB'/>",
+				"</Shell>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  implicit-layout: absolute",
+				"  <Button wbp:name='button'>",
+				"  <Button wbp:name='buttonA'>",
+				"  <Button wbp:name='buttonB'>");
+	}
 
-  /**
-   * Test for {@link Association#move(XmlObjectInfo, ElementTarget, XmlObjectInfo, XmlObjectInfo)}.
-   */
-  public void test_move_reparent() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Composite wbp:name='composite'/>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    XmlObjectInfo composite = getObjectByName("composite");
-    XmlObjectInfo button = getObjectByName("button");
-    // move
-    Association association = Associations.property("foo");
-    XmlObjectUtils.move(button, association, composite, null);
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Composite wbp:name='composite'>",
-        "    <Composite.foo>",
-        "      <Button wbp:name='button'/>",
-        "    </Composite.foo>",
-        "  </Composite>",
-        "</Shell>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  implicit-layout: absolute",
-        "  <Composite wbp:name='composite'>",
-        "    implicit-layout: absolute",
-        "    <Button wbp:name='button'>");
-  }
+	/**
+	 * Test for {@link Association#move(XmlObjectInfo, ElementTarget, XmlObjectInfo, XmlObjectInfo)}.
+	 */
+	public void test_move_reparent() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Composite wbp:name='composite'/>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		XmlObjectInfo composite = getObjectByName("composite");
+		XmlObjectInfo button = getObjectByName("button");
+		// move
+		Association association = Associations.property("foo");
+		XmlObjectUtils.move(button, association, composite, null);
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Composite wbp:name='composite'>",
+				"    <Composite.foo>",
+				"      <Button wbp:name='button'/>",
+				"    </Composite.foo>",
+				"  </Composite>",
+				"</Shell>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  implicit-layout: absolute",
+				"  <Composite wbp:name='composite'>",
+				"    implicit-layout: absolute",
+				"    <Button wbp:name='button'>");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/description/ComponentDescriptionHelperTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/description/ComponentDescriptionHelperTest.java
index f95653337..7109d0ea3 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/description/ComponentDescriptionHelperTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/description/ComponentDescriptionHelperTest.java
@@ -48,476 +48,476 @@
  * @author scheglov_ke
  */
 public class ComponentDescriptionHelperTest extends AbstractCoreTest {
-  private static final String[] ESA = ArrayUtils.EMPTY_STRING_ARRAY;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Basic
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link ComponentDescription} which can not be parsed.
-   */
-  public void test_bad() throws Exception {
-    prepareMyComponent(ESA, new String[]{"bad xml"});
-    try {
-      getMyDescription();
-    } catch (Throwable e) {
-      DesignerException de = DesignerExceptionUtils.getDesignerException(e);
-      assertEquals(IExceptionConstants.DESCRIPTION_LOADING, de.getCode());
-    }
-  }
-
-  /**
-   * Test for basic {@link ComponentDescription} parsing features.
-   */
-  public void test_basic() throws Exception {
-    ComponentDescription description = getDescription("org.eclipse.swt.widgets.Composite");
-    assertNotNull(description);
-    // class
-    assertEquals("org.eclipse.swt.widgets.Composite", description.getComponentClass().getName());
-    assertNotNull(description.getModelClass());
-    // toolkit
-    assertSame(RcpToolkitDescription.INSTANCE, description.getToolkit());
-    // presentation
-    assertThat(description.getDescription()).isNotEmpty();
-    {
-      Image icon = description.getIcon();
-      assertNotNull(icon);
-      assertEquals(16, icon.getBounds().width);
-      assertEquals(16, icon.getBounds().height);
-    }
-  }
-
-  /**
-   * Test for {@link UseModelIfNotAlready} annotation.
-   */
-  public void test_UseModelIfNotAlready() throws Exception {
-    setFileContentSrc(
-        "test/MyInterface.java",
-        getSourceDQ(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "package test;",
-            "public interface MyInterface {",
-            "}"));
-    setFileContentSrc(
-        "test/MyInterface.wbp-component.xml",
-        getSourceDQ(
-            "<?xml version='1.0' encoding='UTF-8'?>",
-            "<component xmlns='http://www.eclipse.org/wb/WBPComponent'>",
-            "  <x-model class='" + UseModelIfNotAlreadyInfo.class.getName() + "'/>",
-            "</component>"));
-    setFileContentSrc(
-        "test/BaseComponent.java",
-        getSourceDQ(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "package test;",
-            "public class BaseComponent {",
-            "}"));
-    setFileContentSrc(
-        "test/BaseComponent.wbp-component.xml",
-        getSourceDQ(
-            "<?xml version='1.0' encoding='UTF-8'?>",
-            "<component xmlns='http://www.eclipse.org/wb/WBPComponent'>",
-            "  <x-model class='" + CompositeInfo.class.getName() + "'/>",
-            "</component>"));
-    setFileContentSrc(
-        "test/ComponentA.java",
-        getSourceDQ(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "package test;",
-            "public class ComponentA extends BaseComponent implements MyInterface {",
-            "}"));
-    setFileContentSrc(
-        "test/ComponentB.java",
-        getSourceDQ(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "package test;",
-            "public class ComponentB implements MyInterface {",
-            "}"));
-    waitForAutoBuild();
-    // use with TestBundle to provide MyInterfaceInfo model
-    TestBundle testBundle = new TestBundle();
-    try {
-      testBundle.addClass(UseModelIfNotAlreadyInfo.class);
-      testBundle.addExtension(
-          "org.eclipse.wb.core.toolkits",
-          new String[]{"<toolkit id='org.eclipse.wb.rcp'/>"});
-      testBundle.install();
-      // ComponentA has base class
-      {
-        ComponentDescription description = getDescription("test.ComponentA");
-        assertSame(CompositeInfo.class, description.getModelClass());
-      }
-      // ComponentB is interface only
-      {
-        ComponentDescription description = getDescription("test.ComponentB");
-        assertSame(UseModelIfNotAlreadyInfo.class, description.getModelClass());
-      }
-    } finally {
-      testBundle.dispose();
-    }
-  }
-
-  @UseModelIfNotAlready(WidgetInfo.class)
-  private class UseModelIfNotAlreadyInfo {
-  }
-
-  /**
-   * Test that we can parse HTML description text, specific for custom component.
-   */
-  public void test_specificDescription() throws Exception {
-    prepareMyComponent(ESA, new String[]{
-        "// filler filler filler filler filler",
-        "<description>My <p/> description</description>"});
-    ComponentDescription description = getMyDescription();
-    // description
-    assertEquals("My <p/> description", description.getDescription());
-  }
-
-  public void test_useIconOfSuperclass() throws Exception {
-    prepareMyComponent();
-    ComponentDescription description = getMyDescription();
-    assertNotNull(description);
-    // use class name as description
-    assertEquals("test.MyComponent", description.getDescription());
-    // icon is same as for Composite
-    {
-      Image myIcon = description.getIcon();
-      Image iconOfComposite = getDescription("org.eclipse.swt.widgets.Composite").getIcon();
-      assertTrue(UiUtils.equals(myIcon, iconOfComposite));
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Arbitrary
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link AbstractDescription#getArbitraryValue(Object)} and
-   * {@link AbstractDescription#putArbitraryValue(Object, Object)}.
-   */
-  public void test_arbitraries() throws Exception {
-    String key = "test.key";
-    ComponentDescription description = getDescription("org.eclipse.swt.widgets.Composite");
-    assertSame(null, description.getArbitraryValue(key));
-    description.putArbitraryValue(key, this);
-    assertSame(this, description.getArbitraryValue(key));
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IDescriptionProcessor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final String PROCESSORS_POINT_ID = "org.eclipse.wb.core.xml.descriptionProcessors";
-
-  /**
-   * Test that {@link IDescriptionProcessor}s are used.
-   */
-  public void test_IDescriptionProcessor() throws Exception {
-    // add dynamic processor and re-load
-    addProcessorExtension(MyDescriptionProcessor.class.getName());
-    try {
-      // no class yet
-      assertEquals(null, MyDescriptionProcessor.componentClassName);
-      // do process
-      {
-        parse("<Shell/>");
-        prepareMyComponent();
-        getMyDescription();
-      }
-      // we just loaded MyComponent
-      assertEquals("test.MyComponent", MyDescriptionProcessor.componentClassName);
-    } finally {
-      removeProcessorExtension();
-    }
-  }
-
-  private static void addProcessorExtension(String className) throws Exception {
-    String contribution = "  <processor class='" + className + "'/>";
-    TestUtils.addDynamicExtension(PROCESSORS_POINT_ID, contribution);
-  }
-
-  protected static void removeProcessorExtension() throws Exception {
-    TestUtils.removeDynamicExtension(PROCESSORS_POINT_ID);
-  }
-
-  public static final class MyDescriptionProcessor implements IDescriptionProcessor {
-    private static String componentClassName;
-
-    @Override
-    public void process(EditorContext context, ComponentDescription componentDescription)
-        throws Exception {
-      componentClassName = componentDescription.getComponentClass().getName();
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IDescriptionRulesProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final String PROVIDERS_POINT_ID =
-      "org.eclipse.wb.core.xml.descriptionRulesProviders";
-
-  /**
-   * Test that {@link IDescriptionRulesProvider}s are used.
-   */
-  public void test_IDescriptionRulesProvider() throws Exception {
-    addRulesProviderExtension(MyDescriptionRulesProvider.class.getName());
-    try {
-      parse("<Shell/>");
-      prepareMyComponent();
-      ComponentDescription componentDescription = getMyDescription();
-      // our rule puts tag
-      assertEquals("myRule", componentDescription.getTag("test.key"));
-    } finally {
-      removeRulesProviderExtension();
-    }
-  }
-
-  private static void addRulesProviderExtension(String className) throws Exception {
-    String contribution = "  <provider class='" + className + "'/>";
-    TestUtils.addDynamicExtension(PROVIDERS_POINT_ID, contribution);
-  }
-
-  protected static void removeRulesProviderExtension() throws Exception {
-    TestUtils.removeDynamicExtension(PROVIDERS_POINT_ID);
-  }
-
-  public static final class MyDescriptionRulesProvider implements IDescriptionRulesProvider {
-    @Override
-    public void addRules(Digester digester, EditorContext context, Class<?> componentClass) {
-      digester.addRule("component", new Rule() {
-        @Override
-        public void end(String namespace, String name) throws Exception {
-          ComponentDescription componentDescription = (ComponentDescription) digester.peek();
-          componentDescription.putTag("test.key", "myRule");
-        }
-      });
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parameters
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link ComponentDescription#getParameters()}.
-   */
-  public void test_parameters() throws Exception {
-    prepareMyComponent(ESA, new String[]{
-        "  <parameters>",
-        "    <parameter name='parameter_1'>AAA</parameter>",
-        "    <parameter name='parameter_2'>BBB</parameter>",
-        "    <parameter name='parameter_3'/>",
-        "  </parameters>"});
-    ComponentDescription description = getMyDescription();
-    // single parameters
-    {
-      assertEquals("AAA", description.getParameter("parameter_1"));
-      assertEquals("BBB", description.getParameter("parameter_2"));
-      assertEquals("", description.getParameter("parameter_3"));
-      assertNull(description.getParameter("parameter_No"));
-    }
-    // parameters as Map
-    {
-      Map<String, String> parameters = description.getParameters();
-      assertThat(parameters).contains(
-          entry("parameter_1", "AAA"),
-          entry("parameter_2", "BBB"),
-          entry("parameter_3", ""));
-    }
-  }
-
-  /**
-   * Test for {@link ComponentDescription#hasTrueParameter(String)}.
-   */
-  public void test_hasTrueParameter() throws Exception {
-    prepareMyComponent(ESA, new String[]{
-        "  <parameters>",
-        "    <parameter name='parameter_1'>true</parameter>",
-        "    <parameter name='parameter_2'>false</parameter>",
-        "    <parameter name='parameter_3'/>",
-        "  </parameters>"});
-    ComponentDescription description = getMyDescription();
-    assertTrue(description.hasTrueParameter("parameter_1"));
-    assertFalse(description.hasTrueParameter("parameter_2"));
-    assertFalse(description.hasTrueParameter("parameter_3"));
-    assertFalse(description.hasTrueParameter("parameter_No"));
-  }
-
-  /**
-   * Test that {@link IProject} "wbp-meta" folder it used to get description.
-   */
-  public void test_descriptionFromProject_meta() throws Exception {
-    setFileContentSrc(
-        "test/MyComponent.java",
-        getSourceDQ(
-            "package test;",
-            "import org.eclipse.swt.widgets.*;",
-            "public class MyComponent extends Composite {",
-            "  public MyComponent(Composite parent, int style) {",
-            "    super(parent, style);",
-            "  }",
-            "}"));
-    setFileContent(
-        "wbp-meta/test/MyComponent.wbp-component.xml",
-        getSourceDQ(
-            "<?xml version='1.0' encoding='UTF-8'?>",
-            "<component xmlns='http://www.eclipse.org/wb/WBPComponent'>",
-            "  <parameters>",
-            "    <parameter name='testParameter'>true</parameter>",
-            "  </parameters>",
-            "</component>"));
-    waitForAutoBuild();
-    //
-    ComponentDescription description = getMyDescription();
-    assertTrue(description.hasTrueParameter("testParameter"));
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // CreationDescription
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_CreationDescription_noID() throws Exception {
-    prepareMyComponent(ESA, new String[]{
-        "// filler filler filler filler filler",
-        "<creation>",
-        "  <source/>",
-        "  <description>My description</description>",
-        "  <x-attribute ns='ns1' name='attr1' value='value 1'/>",
-        "  <x-attribute name='attr2' value='value 2'/>",
-        "</creation>"});
-    ComponentDescription description = getMyDescription();
-    // creations
-    List<CreationDescription> creations = description.getCreations();
-    assertThat(creations).hasSize(1);
-    // single CreationDescription
-    {
-      CreationDescription creation = creations.get(0);
-      assertSame(creation, description.getCreation(null));
-      assertSame(null, creation.getId());
-      assertSame(description.getIcon(), creation.getIcon());
-      assertEquals("MyComponent", creation.getName());
-      assertEquals("My description", creation.getDescription());
-      // attributes
-      {
-        List<CreationAttributeDescription> attributes = creation.getAttributes();
-        assertThat(attributes).hasSize(2);
-        {
-          CreationAttributeDescription attribute = attributes.get(0);
-          assertEquals("ns1", attribute.getNamespace());
-          assertEquals("attr1", attribute.getName());
-          assertEquals("value 1", attribute.getValue());
-        }
-        {
-          CreationAttributeDescription attribute = attributes.get(1);
-          assertEquals(null, attribute.getNamespace());
-          assertEquals("attr2", attribute.getName());
-          assertEquals("value 2", attribute.getValue());
-        }
-      }
-    }
-  }
-
-  public void test_CreationDescription_withID() throws Exception {
-    TestUtils.createImagePNG(m_testProject, "src/test/MyComponent_my.png", 5, 10);
-    prepareMyComponent(ESA, new String[]{
-        "// filler filler filler filler filler",
-        "<creation id='my' name='My name'>",
-        "  <source/>",
-        "  <description>My description</description>",
-        "</creation>"});
-    ComponentDescription description = getMyDescription();
-    // creations
-    List<CreationDescription> creations = description.getCreations();
-    assertThat(creations).hasSize(1);
-    // "my" CreationDescription
-    {
-      CreationDescription creation = description.getCreation("my");
-      assertEquals("my", creation.getId());
-      {
-        Image icon = creation.getIcon();
-        assertEquals(5, icon.getBounds().width);
-        assertEquals(10, icon.getBounds().height);
-      }
-      assertEquals("My name", creation.getName());
-      assertEquals("My description", creation.getDescription());
-      // attributes
-      {
-        List<CreationAttributeDescription> attributes = creation.getAttributes();
-        assertThat(attributes).hasSize(0);
-      }
-    }
-    // no such creation
-    assertSame(null, description.getCreation("noSuchCreation"));
-  }
-
-  /**
-   * No "creation" element, so use default {@link CreationDescription}.
-   */
-  public void test_CreationDescription_default() throws Exception {
-    prepareMyComponent(ESA, new String[]{"  <description>Some description</description>"});
-    waitForAutoBuild();
-    ComponentDescription description = getMyDescription();
-    // check
-    CreationDescription creation = description.getCreation(null);
-    assertNotNull(creation);
-    assertEquals("Some description", creation.getDescription());
-    // it should be in all creations
-    assertThat(description.getCreations()).containsExactly(creation);
-  }
-
-  /**
-   * Load {@link CreationDescription} with specified <code>parameter</code> elements.
-   */
-  public void test_CreationDescription_withParameters() throws Exception {
-    prepareMyComponent(ESA, new String[]{
-        "  <creation id='withParameters'>",
-        "    <source>NA</source>",
-        "    <parameter name='name_1'>value_1</parameter>",
-        "    <parameter name='name_2'>value_2</parameter>",
-        "  </creation>",});
-    waitForAutoBuild();
-    ComponentDescription description = getMyDescription();
-    // check
-    CreationDescription creation = description.getCreation("withParameters");
-    assertThat(creation.getParameters()).contains(
-        entry("name_1", "value_1"),
-        entry("name_2", "value_2"));
-  }
-
-  /**
-   * Load {@link CreationDescription} with specified <code>x-content</code> element.
-   */
-  public void test_CreationDescription_withContent() throws Exception {
-    prepareMyComponent(ESA, new String[]{
-        "  <creation>",
-        "    <source>NA</source>",
-        "    <x-content>My content</x-content>",
-        "  </creation>",});
-    waitForAutoBuild();
-    ComponentDescription description = getMyDescription();
-    // check
-    CreationDescription creation = description.getCreation(null);
-    assertEquals("My content", creation.getContent());
-  }
+	private static final String[] ESA = ArrayUtils.EMPTY_STRING_ARRAY;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Basic
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link ComponentDescription} which can not be parsed.
+	 */
+	public void test_bad() throws Exception {
+		prepareMyComponent(ESA, new String[]{"bad xml"});
+		try {
+			getMyDescription();
+		} catch (Throwable e) {
+			DesignerException de = DesignerExceptionUtils.getDesignerException(e);
+			assertEquals(IExceptionConstants.DESCRIPTION_LOADING, de.getCode());
+		}
+	}
+
+	/**
+	 * Test for basic {@link ComponentDescription} parsing features.
+	 */
+	public void test_basic() throws Exception {
+		ComponentDescription description = getDescription("org.eclipse.swt.widgets.Composite");
+		assertNotNull(description);
+		// class
+		assertEquals("org.eclipse.swt.widgets.Composite", description.getComponentClass().getName());
+		assertNotNull(description.getModelClass());
+		// toolkit
+		assertSame(RcpToolkitDescription.INSTANCE, description.getToolkit());
+		// presentation
+		assertThat(description.getDescription()).isNotEmpty();
+		{
+			Image icon = description.getIcon();
+			assertNotNull(icon);
+			assertEquals(16, icon.getBounds().width);
+			assertEquals(16, icon.getBounds().height);
+		}
+	}
+
+	/**
+	 * Test for {@link UseModelIfNotAlready} annotation.
+	 */
+	public void test_UseModelIfNotAlready() throws Exception {
+		setFileContentSrc(
+				"test/MyInterface.java",
+				getSourceDQ(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"package test;",
+						"public interface MyInterface {",
+						"}"));
+		setFileContentSrc(
+				"test/MyInterface.wbp-component.xml",
+				getSourceDQ(
+						"<?xml version='1.0' encoding='UTF-8'?>",
+						"<component xmlns='http://www.eclipse.org/wb/WBPComponent'>",
+						"  <x-model class='" + UseModelIfNotAlreadyInfo.class.getName() + "'/>",
+						"</component>"));
+		setFileContentSrc(
+				"test/BaseComponent.java",
+				getSourceDQ(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"package test;",
+						"public class BaseComponent {",
+						"}"));
+		setFileContentSrc(
+				"test/BaseComponent.wbp-component.xml",
+				getSourceDQ(
+						"<?xml version='1.0' encoding='UTF-8'?>",
+						"<component xmlns='http://www.eclipse.org/wb/WBPComponent'>",
+						"  <x-model class='" + CompositeInfo.class.getName() + "'/>",
+						"</component>"));
+		setFileContentSrc(
+				"test/ComponentA.java",
+				getSourceDQ(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"package test;",
+						"public class ComponentA extends BaseComponent implements MyInterface {",
+						"}"));
+		setFileContentSrc(
+				"test/ComponentB.java",
+				getSourceDQ(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"package test;",
+						"public class ComponentB implements MyInterface {",
+						"}"));
+		waitForAutoBuild();
+		// use with TestBundle to provide MyInterfaceInfo model
+		TestBundle testBundle = new TestBundle();
+		try {
+			testBundle.addClass(UseModelIfNotAlreadyInfo.class);
+			testBundle.addExtension(
+					"org.eclipse.wb.core.toolkits",
+					new String[]{"<toolkit id='org.eclipse.wb.rcp'/>"});
+			testBundle.install();
+			// ComponentA has base class
+			{
+				ComponentDescription description = getDescription("test.ComponentA");
+				assertSame(CompositeInfo.class, description.getModelClass());
+			}
+			// ComponentB is interface only
+			{
+				ComponentDescription description = getDescription("test.ComponentB");
+				assertSame(UseModelIfNotAlreadyInfo.class, description.getModelClass());
+			}
+		} finally {
+			testBundle.dispose();
+		}
+	}
+
+	@UseModelIfNotAlready(WidgetInfo.class)
+	private class UseModelIfNotAlreadyInfo {
+	}
+
+	/**
+	 * Test that we can parse HTML description text, specific for custom component.
+	 */
+	public void test_specificDescription() throws Exception {
+		prepareMyComponent(ESA, new String[]{
+				"// filler filler filler filler filler",
+		"<description>My <p/> description</description>"});
+		ComponentDescription description = getMyDescription();
+		// description
+		assertEquals("My <p/> description", description.getDescription());
+	}
+
+	public void test_useIconOfSuperclass() throws Exception {
+		prepareMyComponent();
+		ComponentDescription description = getMyDescription();
+		assertNotNull(description);
+		// use class name as description
+		assertEquals("test.MyComponent", description.getDescription());
+		// icon is same as for Composite
+		{
+			Image myIcon = description.getIcon();
+			Image iconOfComposite = getDescription("org.eclipse.swt.widgets.Composite").getIcon();
+			assertTrue(UiUtils.equals(myIcon, iconOfComposite));
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Arbitrary
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link AbstractDescription#getArbitraryValue(Object)} and
+	 * {@link AbstractDescription#putArbitraryValue(Object, Object)}.
+	 */
+	public void test_arbitraries() throws Exception {
+		String key = "test.key";
+		ComponentDescription description = getDescription("org.eclipse.swt.widgets.Composite");
+		assertSame(null, description.getArbitraryValue(key));
+		description.putArbitraryValue(key, this);
+		assertSame(this, description.getArbitraryValue(key));
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IDescriptionProcessor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final String PROCESSORS_POINT_ID = "org.eclipse.wb.core.xml.descriptionProcessors";
+
+	/**
+	 * Test that {@link IDescriptionProcessor}s are used.
+	 */
+	public void test_IDescriptionProcessor() throws Exception {
+		// add dynamic processor and re-load
+		addProcessorExtension(MyDescriptionProcessor.class.getName());
+		try {
+			// no class yet
+			assertEquals(null, MyDescriptionProcessor.componentClassName);
+			// do process
+			{
+				parse("<Shell/>");
+				prepareMyComponent();
+				getMyDescription();
+			}
+			// we just loaded MyComponent
+			assertEquals("test.MyComponent", MyDescriptionProcessor.componentClassName);
+		} finally {
+			removeProcessorExtension();
+		}
+	}
+
+	private static void addProcessorExtension(String className) throws Exception {
+		String contribution = "  <processor class='" + className + "'/>";
+		TestUtils.addDynamicExtension(PROCESSORS_POINT_ID, contribution);
+	}
+
+	protected static void removeProcessorExtension() throws Exception {
+		TestUtils.removeDynamicExtension(PROCESSORS_POINT_ID);
+	}
+
+	public static final class MyDescriptionProcessor implements IDescriptionProcessor {
+		private static String componentClassName;
+
+		@Override
+		public void process(EditorContext context, ComponentDescription componentDescription)
+				throws Exception {
+			componentClassName = componentDescription.getComponentClass().getName();
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IDescriptionRulesProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final String PROVIDERS_POINT_ID =
+			"org.eclipse.wb.core.xml.descriptionRulesProviders";
+
+	/**
+	 * Test that {@link IDescriptionRulesProvider}s are used.
+	 */
+	public void test_IDescriptionRulesProvider() throws Exception {
+		addRulesProviderExtension(MyDescriptionRulesProvider.class.getName());
+		try {
+			parse("<Shell/>");
+			prepareMyComponent();
+			ComponentDescription componentDescription = getMyDescription();
+			// our rule puts tag
+			assertEquals("myRule", componentDescription.getTag("test.key"));
+		} finally {
+			removeRulesProviderExtension();
+		}
+	}
+
+	private static void addRulesProviderExtension(String className) throws Exception {
+		String contribution = "  <provider class='" + className + "'/>";
+		TestUtils.addDynamicExtension(PROVIDERS_POINT_ID, contribution);
+	}
+
+	protected static void removeRulesProviderExtension() throws Exception {
+		TestUtils.removeDynamicExtension(PROVIDERS_POINT_ID);
+	}
+
+	public static final class MyDescriptionRulesProvider implements IDescriptionRulesProvider {
+		@Override
+		public void addRules(Digester digester, EditorContext context, Class<?> componentClass) {
+			digester.addRule("component", new Rule() {
+				@Override
+				public void end(String namespace, String name) throws Exception {
+					ComponentDescription componentDescription = (ComponentDescription) digester.peek();
+					componentDescription.putTag("test.key", "myRule");
+				}
+			});
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parameters
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link ComponentDescription#getParameters()}.
+	 */
+	public void test_parameters() throws Exception {
+		prepareMyComponent(ESA, new String[]{
+				"  <parameters>",
+				"    <parameter name='parameter_1'>AAA</parameter>",
+				"    <parameter name='parameter_2'>BBB</parameter>",
+				"    <parameter name='parameter_3'/>",
+		"  </parameters>"});
+		ComponentDescription description = getMyDescription();
+		// single parameters
+		{
+			assertEquals("AAA", description.getParameter("parameter_1"));
+			assertEquals("BBB", description.getParameter("parameter_2"));
+			assertEquals("", description.getParameter("parameter_3"));
+			assertNull(description.getParameter("parameter_No"));
+		}
+		// parameters as Map
+		{
+			Map<String, String> parameters = description.getParameters();
+			assertThat(parameters).contains(
+					entry("parameter_1", "AAA"),
+					entry("parameter_2", "BBB"),
+					entry("parameter_3", ""));
+		}
+	}
+
+	/**
+	 * Test for {@link ComponentDescription#hasTrueParameter(String)}.
+	 */
+	public void test_hasTrueParameter() throws Exception {
+		prepareMyComponent(ESA, new String[]{
+				"  <parameters>",
+				"    <parameter name='parameter_1'>true</parameter>",
+				"    <parameter name='parameter_2'>false</parameter>",
+				"    <parameter name='parameter_3'/>",
+		"  </parameters>"});
+		ComponentDescription description = getMyDescription();
+		assertTrue(description.hasTrueParameter("parameter_1"));
+		assertFalse(description.hasTrueParameter("parameter_2"));
+		assertFalse(description.hasTrueParameter("parameter_3"));
+		assertFalse(description.hasTrueParameter("parameter_No"));
+	}
+
+	/**
+	 * Test that {@link IProject} "wbp-meta" folder it used to get description.
+	 */
+	public void test_descriptionFromProject_meta() throws Exception {
+		setFileContentSrc(
+				"test/MyComponent.java",
+				getSourceDQ(
+						"package test;",
+						"import org.eclipse.swt.widgets.*;",
+						"public class MyComponent extends Composite {",
+						"  public MyComponent(Composite parent, int style) {",
+						"    super(parent, style);",
+						"  }",
+						"}"));
+		setFileContent(
+				"wbp-meta/test/MyComponent.wbp-component.xml",
+				getSourceDQ(
+						"<?xml version='1.0' encoding='UTF-8'?>",
+						"<component xmlns='http://www.eclipse.org/wb/WBPComponent'>",
+						"  <parameters>",
+						"    <parameter name='testParameter'>true</parameter>",
+						"  </parameters>",
+						"</component>"));
+		waitForAutoBuild();
+		//
+		ComponentDescription description = getMyDescription();
+		assertTrue(description.hasTrueParameter("testParameter"));
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// CreationDescription
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_CreationDescription_noID() throws Exception {
+		prepareMyComponent(ESA, new String[]{
+				"// filler filler filler filler filler",
+				"<creation>",
+				"  <source/>",
+				"  <description>My description</description>",
+				"  <x-attribute ns='ns1' name='attr1' value='value 1'/>",
+				"  <x-attribute name='attr2' value='value 2'/>",
+		"</creation>"});
+		ComponentDescription description = getMyDescription();
+		// creations
+		List<CreationDescription> creations = description.getCreations();
+		assertThat(creations).hasSize(1);
+		// single CreationDescription
+		{
+			CreationDescription creation = creations.get(0);
+			assertSame(creation, description.getCreation(null));
+			assertSame(null, creation.getId());
+			assertSame(description.getIcon(), creation.getIcon());
+			assertEquals("MyComponent", creation.getName());
+			assertEquals("My description", creation.getDescription());
+			// attributes
+			{
+				List<CreationAttributeDescription> attributes = creation.getAttributes();
+				assertThat(attributes).hasSize(2);
+				{
+					CreationAttributeDescription attribute = attributes.get(0);
+					assertEquals("ns1", attribute.getNamespace());
+					assertEquals("attr1", attribute.getName());
+					assertEquals("value 1", attribute.getValue());
+				}
+				{
+					CreationAttributeDescription attribute = attributes.get(1);
+					assertEquals(null, attribute.getNamespace());
+					assertEquals("attr2", attribute.getName());
+					assertEquals("value 2", attribute.getValue());
+				}
+			}
+		}
+	}
+
+	public void test_CreationDescription_withID() throws Exception {
+		TestUtils.createImagePNG(m_testProject, "src/test/MyComponent_my.png", 5, 10);
+		prepareMyComponent(ESA, new String[]{
+				"// filler filler filler filler filler",
+				"<creation id='my' name='My name'>",
+				"  <source/>",
+				"  <description>My description</description>",
+		"</creation>"});
+		ComponentDescription description = getMyDescription();
+		// creations
+		List<CreationDescription> creations = description.getCreations();
+		assertThat(creations).hasSize(1);
+		// "my" CreationDescription
+		{
+			CreationDescription creation = description.getCreation("my");
+			assertEquals("my", creation.getId());
+			{
+				Image icon = creation.getIcon();
+				assertEquals(5, icon.getBounds().width);
+				assertEquals(10, icon.getBounds().height);
+			}
+			assertEquals("My name", creation.getName());
+			assertEquals("My description", creation.getDescription());
+			// attributes
+			{
+				List<CreationAttributeDescription> attributes = creation.getAttributes();
+				assertThat(attributes).hasSize(0);
+			}
+		}
+		// no such creation
+		assertSame(null, description.getCreation("noSuchCreation"));
+	}
+
+	/**
+	 * No "creation" element, so use default {@link CreationDescription}.
+	 */
+	public void test_CreationDescription_default() throws Exception {
+		prepareMyComponent(ESA, new String[]{"  <description>Some description</description>"});
+		waitForAutoBuild();
+		ComponentDescription description = getMyDescription();
+		// check
+		CreationDescription creation = description.getCreation(null);
+		assertNotNull(creation);
+		assertEquals("Some description", creation.getDescription());
+		// it should be in all creations
+		assertThat(description.getCreations()).containsExactly(creation);
+	}
+
+	/**
+	 * Load {@link CreationDescription} with specified <code>parameter</code> elements.
+	 */
+	public void test_CreationDescription_withParameters() throws Exception {
+		prepareMyComponent(ESA, new String[]{
+				"  <creation id='withParameters'>",
+				"    <source>NA</source>",
+				"    <parameter name='name_1'>value_1</parameter>",
+				"    <parameter name='name_2'>value_2</parameter>",
+				"  </creation>",});
+		waitForAutoBuild();
+		ComponentDescription description = getMyDescription();
+		// check
+		CreationDescription creation = description.getCreation("withParameters");
+		assertThat(creation.getParameters()).contains(
+				entry("name_1", "value_1"),
+				entry("name_2", "value_2"));
+	}
+
+	/**
+	 * Load {@link CreationDescription} with specified <code>x-content</code> element.
+	 */
+	public void test_CreationDescription_withContent() throws Exception {
+		prepareMyComponent(ESA, new String[]{
+				"  <creation>",
+				"    <source>NA</source>",
+				"    <x-content>My content</x-content>",
+				"  </creation>",});
+		waitForAutoBuild();
+		ComponentDescription description = getMyDescription();
+		// check
+		CreationDescription creation = description.getCreation(null);
+		assertEquals("My content", creation.getContent());
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/description/DescriptionTests.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/description/DescriptionTests.java
index 70b664627..8f1127a49 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/description/DescriptionTests.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/description/DescriptionTests.java
@@ -21,15 +21,15 @@
  * @author scheglov_ke
  */
 public class DescriptionTests extends DesignerSuiteTests {
-  public static Test suite() {
-    TestSuite suite = new TestSuite("org.eclipse.wb.xml.model.description");
-    suite.addTest(createSingleSuite(ExpressionConverterTest.class));
-    suite.addTest(createSingleSuite(EmptyExpressionAccessorTest.class));
-    suite.addTest(createSingleSuite(MethodExpressionAccessorTest.class));
-    suite.addTest(createSingleSuite(FieldExpressionAccessorTest.class));
-    suite.addTest(createSingleSuite(ComponentDescriptionHelperTest.class));
-    suite.addTest(createSingleSuite(GenericPropertyDescriptionTest.class));
-    suite.addTest(createSingleSuite(MorphingTargetDescriptionTest.class));
-    return suite;
-  }
+	public static Test suite() {
+		TestSuite suite = new TestSuite("org.eclipse.wb.xml.model.description");
+		suite.addTest(createSingleSuite(ExpressionConverterTest.class));
+		suite.addTest(createSingleSuite(EmptyExpressionAccessorTest.class));
+		suite.addTest(createSingleSuite(MethodExpressionAccessorTest.class));
+		suite.addTest(createSingleSuite(FieldExpressionAccessorTest.class));
+		suite.addTest(createSingleSuite(ComponentDescriptionHelperTest.class));
+		suite.addTest(createSingleSuite(GenericPropertyDescriptionTest.class));
+		suite.addTest(createSingleSuite(MorphingTargetDescriptionTest.class));
+		return suite;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/description/EmptyExpressionAccessorTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/description/EmptyExpressionAccessorTest.java
index 9c197e34a..d0863374b 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/description/EmptyExpressionAccessorTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/description/EmptyExpressionAccessorTest.java
@@ -20,23 +20,23 @@
  * @author scheglov_ke
  */
 public class EmptyExpressionAccessorTest extends AbstractCoreTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Types
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_0() throws Exception {
-    ExpressionAccessor accessor = EmptyExpressionAccessor.INSTANCE;
-    assertSame(Property.UNKNOWN_VALUE, accessor.getValue(null));
-    assertSame(Property.UNKNOWN_VALUE, accessor.getDefaultValue(null));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Types
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_0() throws Exception {
+		ExpressionAccessor accessor = EmptyExpressionAccessor.INSTANCE;
+		assertSame(Property.UNKNOWN_VALUE, accessor.getValue(null));
+		assertSame(Property.UNKNOWN_VALUE, accessor.getDefaultValue(null));
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/description/ExpressionConverterTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/description/ExpressionConverterTest.java
index 8a4757014..4d3ba17bf 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/description/ExpressionConverterTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/description/ExpressionConverterTest.java
@@ -26,112 +26,112 @@
  * @author scheglov_ke
  */
 public class ExpressionConverterTest extends AbstractCoreTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_boolean() throws Exception {
-    assertConverterEditor(boolean.class);
-    //
-    XmlObjectInfo object = parse("<Shell/>");
-    ExpressionConverter converter = BooleanConverter.INSTANCE;
-    assertEquals(null, converter.toSource(object, null));
-    assertEquals("true", converter.toSource(object, true));
-    assertEquals("false", converter.toSource(object, false));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_boolean() throws Exception {
+		assertConverterEditor(boolean.class);
+		//
+		XmlObjectInfo object = parse("<Shell/>");
+		ExpressionConverter converter = BooleanConverter.INSTANCE;
+		assertEquals(null, converter.toSource(object, null));
+		assertEquals("true", converter.toSource(object, true));
+		assertEquals("false", converter.toSource(object, false));
+	}
 
-  public void test_Boolean() throws Exception {
-    assertConverterEditor(Boolean.class);
-    //
-    XmlObjectInfo object = parse("<Shell/>");
-    ExpressionConverter converter = BooleanConverter.INSTANCE;
-    assertEquals(null, converter.toSource(object, null));
-    assertEquals("true", converter.toSource(object, true));
-    assertEquals("false", converter.toSource(object, false));
-  }
+	public void test_Boolean() throws Exception {
+		assertConverterEditor(Boolean.class);
+		//
+		XmlObjectInfo object = parse("<Shell/>");
+		ExpressionConverter converter = BooleanConverter.INSTANCE;
+		assertEquals(null, converter.toSource(object, null));
+		assertEquals("true", converter.toSource(object, true));
+		assertEquals("false", converter.toSource(object, false));
+	}
 
-  public void test_int() throws Exception {
-    assertConverterEditor(int.class);
-    //
-    XmlObjectInfo object = parse("<Shell/>");
-    ExpressionConverter converter = IntegerConverter.INSTANCE;
-    assertEquals(null, converter.toSource(object, null));
-    assertEquals("12", converter.toSource(object, 12));
-    assertEquals("-12", converter.toSource(object, -12));
-    assertEquals("0", converter.toSource(object, 0));
-  }
+	public void test_int() throws Exception {
+		assertConverterEditor(int.class);
+		//
+		XmlObjectInfo object = parse("<Shell/>");
+		ExpressionConverter converter = IntegerConverter.INSTANCE;
+		assertEquals(null, converter.toSource(object, null));
+		assertEquals("12", converter.toSource(object, 12));
+		assertEquals("-12", converter.toSource(object, -12));
+		assertEquals("0", converter.toSource(object, 0));
+	}
 
-  public void test_Integer() throws Exception {
-    assertConverterEditor(Integer.class);
-    //
-    XmlObjectInfo object = parse("<Shell/>");
-    ExpressionConverter converter = IntegerConverter.INSTANCE;
-    assertEquals(null, converter.toSource(object, null));
-    assertEquals("12", converter.toSource(object, 12));
-    assertEquals("-12", converter.toSource(object, -12));
-    assertEquals("0", converter.toSource(object, 0));
-  }
+	public void test_Integer() throws Exception {
+		assertConverterEditor(Integer.class);
+		//
+		XmlObjectInfo object = parse("<Shell/>");
+		ExpressionConverter converter = IntegerConverter.INSTANCE;
+		assertEquals(null, converter.toSource(object, null));
+		assertEquals("12", converter.toSource(object, 12));
+		assertEquals("-12", converter.toSource(object, -12));
+		assertEquals("0", converter.toSource(object, 0));
+	}
 
-  public void test_double() throws Exception {
-    assertConverterEditor(double.class);
-    //
-    XmlObjectInfo object = parse("<Shell/>");
-    ExpressionConverter converter = DoubleConverter.INSTANCE;
-    assertEquals(null, converter.toSource(object, null));
-    assertEquals("12.5", converter.toSource(object, 12.5));
-    assertEquals("-12.7", converter.toSource(object, -12.7));
-    assertEquals("10", converter.toSource(object, 10.0));
-    assertEquals("0", converter.toSource(object, 0.0));
-  }
+	public void test_double() throws Exception {
+		assertConverterEditor(double.class);
+		//
+		XmlObjectInfo object = parse("<Shell/>");
+		ExpressionConverter converter = DoubleConverter.INSTANCE;
+		assertEquals(null, converter.toSource(object, null));
+		assertEquals("12.5", converter.toSource(object, 12.5));
+		assertEquals("-12.7", converter.toSource(object, -12.7));
+		assertEquals("10", converter.toSource(object, 10.0));
+		assertEquals("0", converter.toSource(object, 0.0));
+	}
 
-  public void test_String() throws Exception {
-    assertConverterEditor(String.class);
-    //
-    XmlObjectInfo object = parse("<Shell/>");
-    ExpressionConverter converter = StringConverter.INSTANCE;
-    // simple variants
-    assertEquals(null, converter.toSource(object, null));
-    assertEquals("text", converter.toSource(object, "text"));
-    // no encoding here, because XML model itself does it
-    assertEquals("a & b", converter.toSource(object, "a & b"));
-  }
+	public void test_String() throws Exception {
+		assertConverterEditor(String.class);
+		//
+		XmlObjectInfo object = parse("<Shell/>");
+		ExpressionConverter converter = StringConverter.INSTANCE;
+		// simple variants
+		assertEquals(null, converter.toSource(object, null));
+		assertEquals("text", converter.toSource(object, "text"));
+		// no encoding here, because XML model itself does it
+		assertEquals("a & b", converter.toSource(object, "a & b"));
+	}
 
-  private static enum MyEnum {
-    A, B, C
-  }
+	private static enum MyEnum {
+		A, B, C
+	}
 
-  public void test_Enum() throws Exception {
-    assertConverterEditor(MyEnum.class);
-    //
-    XmlObjectInfo object = parse("<Shell/>");
-    ExpressionConverter converter = EnumConverter.INSTANCE;
-    assertEquals(null, converter.toSource(object, null));
-    assertEquals("A", converter.toSource(object, MyEnum.A));
-    assertEquals("B", converter.toSource(object, MyEnum.B));
-    assertEquals("C", converter.toSource(object, MyEnum.C));
-  }
+	public void test_Enum() throws Exception {
+		assertConverterEditor(MyEnum.class);
+		//
+		XmlObjectInfo object = parse("<Shell/>");
+		ExpressionConverter converter = EnumConverter.INSTANCE;
+		assertEquals(null, converter.toSource(object, null));
+		assertEquals("A", converter.toSource(object, MyEnum.A));
+		assertEquals("B", converter.toSource(object, MyEnum.B));
+		assertEquals("C", converter.toSource(object, MyEnum.C));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Asserts that there are {@link ExpressionConverter} and {@link PropertyEditor} registered for
-   * given type, usually in plugin.xml.
-   */
-  private static void assertConverterEditor(Class<?> type) throws Exception {
-    assertNotNull(DescriptionPropertiesHelper.getConverterForType(type));
-    assertNotNull(DescriptionPropertiesHelper.getEditorForType(type));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Asserts that there are {@link ExpressionConverter} and {@link PropertyEditor} registered for
+	 * given type, usually in plugin.xml.
+	 */
+	private static void assertConverterEditor(Class<?> type) throws Exception {
+		assertNotNull(DescriptionPropertiesHelper.getConverterForType(type));
+		assertNotNull(DescriptionPropertiesHelper.getEditorForType(type));
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/description/FieldExpressionAccessorTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/description/FieldExpressionAccessorTest.java
index 0c98eb7c0..5e2cc5862 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/description/FieldExpressionAccessorTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/description/FieldExpressionAccessorTest.java
@@ -26,140 +26,140 @@
  * @author scheglov_ke
  */
 public class FieldExpressionAccessorTest extends AbstractCoreTest {
-  private XmlObjectInfo myComponent;
-  private GenericPropertyImpl property;
-  private ExpressionAccessor accessor;
+	private XmlObjectInfo myComponent;
+	private GenericPropertyImpl property;
+	private ExpressionAccessor accessor;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_getAdapter() throws Exception {
-    prepareMyComponent(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "/**",
-        "* My JavaDoc text.",
-        "*/",
-        "public int test;");
-    prepareProperty();
-    // ignore arbitrary adapter
-    assertNull(accessor.getAdapter(null));
-    // get provider
-    PropertyTooltipProvider tooltipProvider = accessor.getAdapter(PropertyTooltipProvider.class);
-    assertNotNull(tooltipProvider);
-    String tooltip =
-        (String) ReflectionUtils.invokeMethod(
-            tooltipProvider,
-            "getText(org.eclipse.wb.internal.core.model.property.Property)",
-            property);
-    assertThat(tooltip).isEqualTo("My JavaDoc text.");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_getAdapter() throws Exception {
+		prepareMyComponent(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"/**",
+				"* My JavaDoc text.",
+				"*/",
+				"public int test;");
+		prepareProperty();
+		// ignore arbitrary adapter
+		assertNull(accessor.getAdapter(null));
+		// get provider
+		PropertyTooltipProvider tooltipProvider = accessor.getAdapter(PropertyTooltipProvider.class);
+		assertNotNull(tooltipProvider);
+		String tooltip =
+				(String) ReflectionUtils.invokeMethod(
+						tooltipProvider,
+						"getText(org.eclipse.wb.internal.core.model.property.Property)",
+						property);
+		assertThat(tooltip).isEqualTo("My JavaDoc text.");
+	}
 
-  public void test_getX_noValue() throws Exception {
-    prepareMyComponent(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "public int test;");
-    prepareProperty();
-    // not modified
-    assertFalse(accessor.isModified(myComponent));
-    assertEquals(null, accessor.getExpression(myComponent));
-    // no default value
-    assertEquals(0, accessor.getDefaultValue(myComponent));
-    assertEquals(Property.UNKNOWN_VALUE, accessor.getValue(myComponent));
-  }
+	public void test_getX_noValue() throws Exception {
+		prepareMyComponent(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"public int test;");
+		prepareProperty();
+		// not modified
+		assertFalse(accessor.isModified(myComponent));
+		assertEquals(null, accessor.getExpression(myComponent));
+		// no default value
+		assertEquals(0, accessor.getDefaultValue(myComponent));
+		assertEquals(Property.UNKNOWN_VALUE, accessor.getValue(myComponent));
+	}
 
-  public void test_getX_hasValue() throws Exception {
-    prepareMyComponent(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "public int test;");
-    prepareProperty(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <t:MyComponent wbp:name='myComponent' test='5'/>",
-        "</Shell>");
-    // modified
-    assertTrue(accessor.isModified(myComponent));
-    assertEquals("5", accessor.getExpression(myComponent));
-    // no default value
-    assertEquals(0, accessor.getDefaultValue(myComponent));
-    assertEquals(5, accessor.getValue(myComponent));
-  }
+	public void test_getX_hasValue() throws Exception {
+		prepareMyComponent(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"public int test;");
+		prepareProperty(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <t:MyComponent wbp:name='myComponent' test='5'/>",
+				"</Shell>");
+		// modified
+		assertTrue(accessor.isModified(myComponent));
+		assertEquals("5", accessor.getExpression(myComponent));
+		// no default value
+		assertEquals(0, accessor.getDefaultValue(myComponent));
+		assertEquals(5, accessor.getValue(myComponent));
+	}
 
-  public void test_getX_hasDefaultValue_noValue() throws Exception {
-    prepareMyComponent(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "public int test = 123;");
-    prepareProperty();
-    // not modified
-    assertFalse(accessor.isModified(myComponent));
-    assertEquals(null, accessor.getExpression(myComponent));
-    // no default value
-    assertEquals(123, accessor.getDefaultValue(myComponent));
-    assertEquals(Property.UNKNOWN_VALUE, accessor.getValue(myComponent));
-  }
+	public void test_getX_hasDefaultValue_noValue() throws Exception {
+		prepareMyComponent(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"public int test = 123;");
+		prepareProperty();
+		// not modified
+		assertFalse(accessor.isModified(myComponent));
+		assertEquals(null, accessor.getExpression(myComponent));
+		// no default value
+		assertEquals(123, accessor.getDefaultValue(myComponent));
+		assertEquals(Property.UNKNOWN_VALUE, accessor.getValue(myComponent));
+	}
 
-  /**
-   * Test for {@link FieldExpressionAccessor#setExpression(XmlObjectInfo, String)}.
-   */
-  public void test_setExpression() throws Exception {
-    prepareMyComponent(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "public int test;");
-    prepareProperty();
-    // not modified
-    assertFalse(accessor.isModified(myComponent));
-    assertEquals(null, accessor.getExpression(myComponent));
-    // set expression
-    accessor.setExpression(myComponent, "123");
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <t:MyComponent wbp:name='myComponent' test='123'/>",
-        "</Shell>");
-    // modified
-    assertTrue(accessor.isModified(myComponent));
-    assertEquals("123", accessor.getExpression(myComponent));
-    assertEquals(123, accessor.getValue(myComponent));
-  }
+	/**
+	 * Test for {@link FieldExpressionAccessor#setExpression(XmlObjectInfo, String)}.
+	 */
+	public void test_setExpression() throws Exception {
+		prepareMyComponent(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"public int test;");
+		prepareProperty();
+		// not modified
+		assertFalse(accessor.isModified(myComponent));
+		assertEquals(null, accessor.getExpression(myComponent));
+		// set expression
+		accessor.setExpression(myComponent, "123");
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <t:MyComponent wbp:name='myComponent' test='123'/>",
+				"</Shell>");
+		// modified
+		assertTrue(accessor.isModified(myComponent));
+		assertEquals("123", accessor.getExpression(myComponent));
+		assertEquals(123, accessor.getValue(myComponent));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void prepareProperty() throws Exception {
-    prepareProperty(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <t:MyComponent wbp:name='myComponent'/>",
-        "</Shell>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void prepareProperty() throws Exception {
+		prepareProperty(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <t:MyComponent wbp:name='myComponent'/>",
+				"</Shell>");
+	}
 
-  private void prepareProperty(String... lines) throws Exception {
-    parse(lines);
-    refresh();
-    // prepare
-    myComponent = getObjectByName("myComponent");
-    property = (GenericPropertyImpl) myComponent.getPropertyByTitle("test");
-    assertNotNull(property);
-    accessor = property.getDescription().getAccessor();
-  }
+	private void prepareProperty(String... lines) throws Exception {
+		parse(lines);
+		refresh();
+		// prepare
+		myComponent = getObjectByName("myComponent");
+		property = (GenericPropertyImpl) myComponent.getPropertyByTitle("test");
+		assertNotNull(property);
+		accessor = property.getDescription().getAccessor();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/description/GenericPropertyDescriptionTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/description/GenericPropertyDescriptionTest.java
index a1c25a1a5..37ddecb2d 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/description/GenericPropertyDescriptionTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/description/GenericPropertyDescriptionTest.java
@@ -37,673 +37,673 @@
  * @author scheglov_ke
  */
 public class GenericPropertyDescriptionTest extends AbstractCoreTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * We should ignore case when description tries to reference not existing property.
-   */
-  public void test_ignoreNoSuchProperty() throws Exception {
-    prepareMyComponent(new String[]{}, new String[]{
-        "<property id='setNoSuchProperty(boolean)'>",
-        "  <defaultValue value='false'/>",
-        "</property>"});
-    ComponentDescription description = getMyDescription();
-    String id = "setNoSuchProperty(boolean)";
-    // no such property, but description loaded
-    GenericPropertyDescription property = description.getProperty(id);
-    assertNull(property);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Types
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_boolean() throws Exception {
-    prepareMyComponent(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "public void setTest(boolean value) {",
-        "}");
-    ComponentDescription description = getMyDescription();
-    // "test" property
-    {
-      String id = "setTest(boolean)";
-      GenericPropertyDescription property = description.getProperty(id);
-      assertNotNull(property);
-      assertEquals(id, property.getId());
-      assertEquals("test", property.getName());
-      assertEquals("test", property.getTitle());
-      assertSame(boolean.class, property.getType());
-      assertSame(BooleanPropertyEditor.INSTANCE, property.getEditor());
-      assertSame(BooleanConverter.INSTANCE, property.getConverter());
-      assertInstanceOf(MethodExpressionAccessor.class, property.getAccessor());
-      assertSame(PropertyCategory.NORMAL, property.getCategory());
-      assertSame(Property.UNKNOWN_VALUE, property.getDefaultValue());
-    }
-  }
-
-  public void test_int() throws Exception {
-    prepareMyComponent(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "public void setTest(int value) {",
-        "}");
-    ComponentDescription description = getMyDescription();
-    // "test" property
-    {
-      String id = "setTest(int)";
-      GenericPropertyDescription property = description.getProperty(id);
-      assertNotNull(property);
-      assertEquals(id, property.getId());
-      assertEquals("test", property.getName());
-      assertEquals("test", property.getTitle());
-      assertSame(int.class, property.getType());
-      assertSame(IntegerPropertyEditor.INSTANCE, property.getEditor());
-      assertSame(IntegerConverter.INSTANCE, property.getConverter());
-      assertInstanceOf(MethodExpressionAccessor.class, property.getAccessor());
-      assertSame(PropertyCategory.NORMAL, property.getCategory());
-      assertSame(Property.UNKNOWN_VALUE, property.getDefaultValue());
-    }
-  }
-
-  public void test_String() throws Exception {
-    prepareMyComponent(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "public void setTest(String value) {",
-        "}");
-    ComponentDescription description = getMyDescription();
-    // "test" property
-    {
-      String id = "setTest(java.lang.String)";
-      GenericPropertyDescription property = description.getProperty(id);
-      assertNotNull(property);
-      assertEquals(id, property.getId());
-      assertEquals("test", property.getName());
-      assertEquals("test", property.getTitle());
-      assertSame(String.class, property.getType());
-      assertSame(StringPropertyEditor.INSTANCE, property.getEditor());
-      assertSame(StringConverter.INSTANCE, property.getConverter());
-      assertInstanceOf(MethodExpressionAccessor.class, property.getAccessor());
-      assertSame(PropertyCategory.NORMAL, property.getCategory());
-      assertSame(Property.UNKNOWN_VALUE, property.getDefaultValue());
-    }
-  }
-
-  public void test_Enum() throws Exception {
-    setFileContentSrc(
-        "test/MyEnum.java",
-        getJavaSource(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "public enum MyEnum {",
-            "  A, B, C",
-            "}"));
-    prepareMyComponent(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "public void setTest(MyEnum value) {",
-        "}");
-    ComponentDescription description = getMyDescription();
-    // "test" property
-    {
-      String id = "setTest(test.MyEnum)";
-      GenericPropertyDescription property = description.getProperty(id);
-      assertNotNull(property);
-      assertEquals(id, property.getId());
-      assertEquals("test", property.getName());
-      assertEquals("test", property.getTitle());
-      assertEquals("test.MyEnum", property.getType().getName());
-      assertSame(EnumPropertyEditor.INSTANCE, property.getEditor());
-      assertSame(EnumConverter.INSTANCE, property.getConverter());
-      assertInstanceOf(MethodExpressionAccessor.class, property.getAccessor());
-      assertSame(PropertyCategory.NORMAL, property.getCategory());
-      assertSame(Property.UNKNOWN_VALUE, property.getDefaultValue());
-    }
-  }
-
-  /**
-   * If "setter" has capitalized name, then first letter should be "uncapitalized".
-   */
-  public void test_attribute_setHTML() throws Exception {
-    prepareMyComponent(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "public void setHTML(boolean value) {",
-        "}");
-    ComponentDescription description = getMyDescription();
-    // "test" property
-    {
-      String id = "setHTML(boolean)";
-      GenericPropertyDescription property = description.getProperty(id);
-      assertEquals("HTML", property.getTitle());
-      assertEquals("hTML", property.getAccessor().getAttribute());
-    }
-  }
-
-  /**
-   * In XML we see only public methods.
-   */
-  public void test_method_protected() throws Exception {
-    prepareMyComponent(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "protected void setTest(boolean value) {",
-        "}");
-    ComponentDescription description = getMyDescription();
-    // no "test" property
-    {
-      String id = "setTest(boolean)";
-      GenericPropertyDescription property = description.getProperty(id);
-      assertNull(property);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Field
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_field() throws Exception {
-    prepareMyComponent(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "public boolean test;");
-    ComponentDescription description = getMyDescription();
-    // "test" property
-    {
-      String id = "test";
-      GenericPropertyDescription property = description.getProperty(id);
-      assertNotNull(property);
-      assertEquals(id, property.getId());
-      assertEquals("test", property.getName());
-      assertEquals("test", property.getTitle());
-      assertSame(boolean.class, property.getType());
-      assertSame(BooleanPropertyEditor.INSTANCE, property.getEditor());
-      assertSame(BooleanConverter.INSTANCE, property.getConverter());
-      assertInstanceOf(FieldExpressionAccessor.class, property.getAccessor());
-      assertSame(PropertyCategory.NORMAL, property.getCategory());
-      assertSame(Property.UNKNOWN_VALUE, property.getDefaultValue());
-    }
-  }
-
-  /**
-   * No editor for type {@link Object} and no configurable property editor set. So, no property.
-   */
-  public void test_field_no_editor() throws Exception {
-    prepareMyComponent(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "public Object test;");
-    ComponentDescription description = getMyDescription();
-    // "test" property
-    {
-      String id = "test";
-      GenericPropertyDescription property = description.getProperty(id);
-      assertNull(property);
-    }
-  }
-
-  /**
-   * Configurable property editor set. The property should exist.
-   */
-  public void test_field_has_configurableEditor() throws Exception {
-    prepareMyComponent(new String[]{
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "public Object test;"}, new String[]{
-        "<property id='test'>",
-        "<editor id='testEditor'/>",
-        "</property>"});
-    ComponentDescription description = getMyDescription();
-    // "test" property
-    {
-      String id = "test";
-      GenericPropertyDescription property = description.getProperty(id);
-      assertNotNull(property);
-      assertEquals(id, property.getId());
-      assertEquals("test", property.getName());
-      assertEquals("test", property.getTitle());
-      assertSame(Object.class, property.getType());
-      assertSame(NoopConfigurablePropertyEditor.class, property.getEditor().getClass());
-    }
-  }
-
-  /**
-   * In XML we see only public fields.
-   */
-  public void test_field_protected() throws Exception {
-    prepareMyComponent(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "protected boolean test;");
-    ComponentDescription description = getMyDescription();
-    // no "test" property
-    {
-      String id = "test";
-      GenericPropertyDescription property = description.getProperty(id);
-      assertNull(property);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Setter
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * No editor for type {@link Object} and no configurable property editor set. So, no property.
-   */
-  public void test_setter_no_editor() throws Exception {
-    prepareMyComponent(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "public void setTest(Object value) {",
-        "}");
-    ComponentDescription description = getMyDescription();
-    // "test" property
-    {
-      String id = "setTest(java.lang.Object)";
-      GenericPropertyDescription property = description.getProperty(id);
-      assertNull(property);
-    }
-  }
-
-  /**
-   * Configurable property editor set. The property should exist.
-   */
-  public void test_setter_has_configurableEditor() throws Exception {
-    prepareMyComponent(new String[]{
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "public void setTest(Object value) {",
-        "}"}, new String[]{
-        "<property id='setTest(java.lang.Object)'>",
-        "<editor id='testEditor'/>",
-        "</property>"});
-    ComponentDescription description = getMyDescription();
-    // "test" property
-    {
-      String id = "setTest(java.lang.Object)";
-      GenericPropertyDescription property = description.getProperty(id);
-      assertNotNull(property);
-      assertEquals(id, property.getId());
-      assertEquals("test", property.getName());
-      assertEquals("test", property.getTitle());
-      assertSame(Object.class, property.getType());
-      assertSame(NoopConfigurablePropertyEditor.class, property.getEditor().getClass());
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Category
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_category_usingNames_preferred() throws Exception {
-    prepareMyComponent(new String[]{
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "public void setTest(boolean value) {",
-        "}"}, new String[]{"<properties-preferred names='test'/>"});
-    ComponentDescription description = getMyDescription();
-    // "test" property
-    {
-      String id = "setTest(boolean)";
-      GenericPropertyDescription property = description.getProperty(id);
-      assertSame(PropertyCategory.PREFERRED, property.getCategory());
-    }
-  }
-
-  public void test_category_usingNames_normal() throws Exception {
-    prepareMyComponent(new String[]{
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "public void setTest(boolean value) {",
-        "}"}, new String[]{
-        "<properties-preferred names='test'/>",
-        "<properties-normal names='test'/>"});
-    ComponentDescription description = getMyDescription();
-    // "test" property
-    {
-      String id = "setTest(boolean)";
-      GenericPropertyDescription property = description.getProperty(id);
-      assertSame(PropertyCategory.NORMAL, property.getCategory());
-    }
-  }
-
-  public void test_category_usingNames_advanced() throws Exception {
-    prepareMyComponent(new String[]{
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "public void setTest(boolean value) {",
-        "}"}, new String[]{"<properties-advanced names='test'/>"});
-    ComponentDescription description = getMyDescription();
-    // "test" property
-    {
-      String id = "setTest(boolean)";
-      GenericPropertyDescription property = description.getProperty(id);
-      assertSame(PropertyCategory.ADVANCED, property.getCategory());
-    }
-  }
-
-  public void test_category_usingNames_hidden() throws Exception {
-    prepareMyComponent(new String[]{
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "public void setTest(boolean value) {",
-        "}"}, new String[]{"<properties-hidden names='test'/>"});
-    ComponentDescription description = getMyDescription();
-    // "test" property
-    {
-      String id = "setTest(boolean)";
-      GenericPropertyDescription property = description.getProperty(id);
-      assertSame(PropertyCategory.HIDDEN, property.getCategory());
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Selection by ID
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_selectionByID_useMethodSignature() throws Exception {
-    prepareMyComponent(new String[]{
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "public boolean test;",
-        "public void setTest(boolean value) {",
-        "}"}, new String[]{"<properties-preferred names='setTest(boolean)'/>"});
-    ComponentDescription description = getMyDescription();
-    // "test" field
-    {
-      String id = "test";
-      GenericPropertyDescription property = description.getProperty(id);
-      assertSame(PropertyCategory.NORMAL, property.getCategory());
-    }
-    // "setTest()" method
-    {
-      String id = "setTest(boolean)";
-      GenericPropertyDescription property = description.getProperty(id);
-      assertSame(PropertyCategory.PREFERRED, property.getCategory());
-    }
-  }
-
-  public void test_selectionByID_useFieldName() throws Exception {
-    prepareMyComponent(new String[]{
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "public boolean test;"}, new String[]{"<properties-preferred names='test'/>"});
-    ComponentDescription description = getMyDescription();
-    // "test" field
-    {
-      String id = "test";
-      GenericPropertyDescription property = description.getProperty(id);
-      assertSame(PropertyCategory.PREFERRED, property.getCategory());
-    }
-  }
-
-  public void test_selectionByID_forceMethod() throws Exception {
-    prepareMyComponent(new String[]{
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "public boolean test;",
-        "public void setTest(boolean value) {",
-        "}"}, new String[]{"<properties-preferred names='m:test'/>"});
-    ComponentDescription description = getMyDescription();
-    // "test" field
-    {
-      String id = "test";
-      GenericPropertyDescription property = description.getProperty(id);
-      assertSame(PropertyCategory.NORMAL, property.getCategory());
-    }
-    // "setTest()" method
-    {
-      String id = "setTest(boolean)";
-      GenericPropertyDescription property = description.getProperty(id);
-      assertSame(PropertyCategory.PREFERRED, property.getCategory());
-    }
-  }
-
-  public void test_selectionByID_forceField() throws Exception {
-    prepareMyComponent(new String[]{
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "public boolean test;",
-        "public void setTest(boolean value) {",
-        "}"}, new String[]{"<properties-preferred names='f:test'/>"});
-    ComponentDescription description = getMyDescription();
-    // "test" field
-    {
-      String id = "test";
-      GenericPropertyDescription property = description.getProperty(id);
-      assertSame(PropertyCategory.PREFERRED, property.getCategory());
-    }
-    // "setTest()" method
-    {
-      String id = "setTest(boolean)";
-      GenericPropertyDescription property = description.getProperty(id);
-      assertSame(PropertyCategory.NORMAL, property.getCategory());
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Flags
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_tag() throws Exception {
-    prepareMyComponent(new String[]{
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "public void setTest(boolean value) {",
-        "}"}, new String[]{
-        "<property-tag name='test' tag='tag_1' value='value_1'/>",
-        "<property-tag name='test' tag='tag_2' value='true'/>"});
-    ComponentDescription description = getMyDescription();
-    // "test" property
-    {
-      String id = "setTest(boolean)";
-      GenericPropertyDescription property = description.getProperty(id);
-      assertEquals(null, property.getTag("tag_noSuch"));
-      assertEquals("value_1", property.getTag("tag_1"));
-      assertEquals("true", property.getTag("tag_2"));
-      assertTrue(property.hasTrueTag("tag_2"));
-    }
-  }
-
-  /**
-   * Test for {@link GenericPropertyDescription#getTitle()} and "title" property tag.
-   */
-  public void test_tag_title() throws Exception {
-    prepareMyComponent(new String[]{
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "public void setA(boolean value) {",
-        "}",
-        "public void setB(boolean value) {",
-        "}",}, new String[]{"<property-tag name='setA(boolean)' tag='title' value='myTitle'/>"});
-    ComponentDescription description = getMyDescription();
-    // "A" property
-    {
-      String id = "setA(boolean)";
-      GenericPropertyDescription property = description.getProperty(id);
-      assertEquals("myTitle", property.getTitle());
-      assertEquals("a", property.getAccessor().getAttribute());
-    }
-    // "B" property
-    {
-      String id = "setB(boolean)";
-      GenericPropertyDescription property = description.getProperty(id);
-      assertEquals("b", property.getTitle());
-      assertEquals("b", property.getAccessor().getAttribute());
-    }
-  }
-
-  public void test_tag_noDefaultValue_noTag() throws Exception {
-    prepareMyComponent(new String[]{
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "public void setTest(boolean value) {",
-        "}"}, new String[]{});
-    ComponentDescription description = getMyDescription();
-    // "test" property
-    {
-      String id = "setTest(boolean)";
-      GenericPropertyDescription property = description.getProperty(id);
-      assertFalse(property.hasTrueTag(ExpressionAccessor.NO_DEFAULT_VALUE_TAG));
-    }
-  }
-
-  public void test_tag_noDefaultValue_hasTag() throws Exception {
-    prepareMyComponent(new String[]{
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "public void setTest(boolean value) {",
-        "}"}, new String[]{"<properties-noDefaultValue names='test'/>"});
-    ComponentDescription description = getMyDescription();
-    // "test" property
-    {
-      String id = "setTest(boolean)";
-      GenericPropertyDescription property = description.getProperty(id);
-      assertTrue(property.hasTrueTag(ExpressionAccessor.NO_DEFAULT_VALUE_TAG));
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Configure property
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_configureProperty_category() throws Exception {
-    prepareMyComponent(new String[]{
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "public void setTest(boolean value) {",
-        "}"}, new String[]{
-        "<!-- ===================== -->",
-        "<property id='setTest(boolean)'>",
-        "  <category value='preferred'/>",
-        "</property>"});
-    ComponentDescription description = getMyDescription();
-    // "test" property
-    {
-      String id = "setTest(boolean)";
-      GenericPropertyDescription property = description.getProperty(id);
-      assertSame(PropertyCategory.PREFERRED, property.getCategory());
-    }
-  }
-
-  public void test_configureProperty_defaultValue() throws Exception {
-    prepareMyComponent(new String[]{
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "public void setTest(int value) {",
-        "}"}, new String[]{
-        "<!-- ===================== -->",
-        "<property id='setTest(int)'>",
-        "  <defaultValue value='123'/>",
-        "</property>"});
-    ComponentDescription description = getMyDescription();
-    // "test" property
-    {
-      String id = "setTest(int)";
-      GenericPropertyDescription property = description.getProperty(id);
-      assertEquals(123, property.getDefaultValue());
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Configurable editor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Attempt to reference ID for which no configurable editor, causes loading failure.
-   */
-  public void test_configureProperty_editorWithID_noSuchID() throws Exception {
-    prepareMyComponent(new String[]{
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "public void setTest(int value) {",
-        "}"}, new String[]{
-        "<!-- ===================== -->",
-        "<property id='setTest(int)'>",
-        "  <editor id='noEditorWithSuchID'/>",
-        "</property>"});
-    ComponentDescription description = getMyDescription();
-    // no editor, so no property
-    String id = "setTest(int)";
-    GenericPropertyDescription property = description.getProperty(id);
-    assertNull(property);
-  }
-
-  /**
-   * Test for configurable editor, use "parameter" tag.
-   */
-  public void test_configureProperty_editorWithID_parameter() throws Exception {
-    prepareMyComponent(new String[]{
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "public void setTest(int value) {",
-        "}"}, new String[]{
-        "<!-- ===================== -->",
-        "<property id='setTest(int)'>",
-        "  <editor id='staticField'>",
-        "    <parameter name='class'>org.eclipse.swt.SWT</parameter>",
-        "    <parameter name='fields'>LEFT CENTER RIGHT</parameter>",
-        "  </editor>",
-        "</property>"});
-    ComponentDescription description = getMyDescription();
-    // "test" property
-    String id = "setTest(int)";
-    GenericPropertyDescription property = description.getProperty(id);
-    StaticFieldPropertyEditor editor = (StaticFieldPropertyEditor) property.getEditor();
-    assertStaticFieldEditor_fields(editor, "LEFT", "CENTER", "RIGHT");
-  }
-
-  /**
-   * Test for configurable editor, use "parameter-list" tag.
-   */
-  public void test_configureProperty_editorWithID_parameterList() throws Exception {
-    prepareMyComponent(new String[]{
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "public void setTest(int value) {",
-        "}"}, new String[]{
-        "<!-- ===================== -->",
-        "<property id='setTest(int)'>",
-        "  <editor id='staticField'>",
-        "    <parameter name='class'>org.eclipse.swt.SWT</parameter>",
-        "    <parameter-list name='fields'>LEFT</parameter-list>",
-        "    <parameter-list name='fields'>CENTER</parameter-list>",
-        "    <parameter-list name='fields'>RIGHT</parameter-list>",
-        "  </editor>",
-        "</property>"});
-    ComponentDescription description = getMyDescription();
-    // "test" property
-    String id = "setTest(int)";
-    GenericPropertyDescription property = description.getProperty(id);
-    StaticFieldPropertyEditor editor = (StaticFieldPropertyEditor) property.getEditor();
-    assertStaticFieldEditor_fields(editor, "LEFT", "CENTER", "RIGHT");
-  }
-
-  private static void assertStaticFieldEditor_fields(StaticFieldPropertyEditor editor,
-      String... expected) {
-    String[] actual = (String[]) ReflectionUtils.getFieldObject(editor, "m_names");
-    assertThat(actual).isEqualTo(expected);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * We should ignore case when description tries to reference not existing property.
+	 */
+	public void test_ignoreNoSuchProperty() throws Exception {
+		prepareMyComponent(new String[]{}, new String[]{
+				"<property id='setNoSuchProperty(boolean)'>",
+				"  <defaultValue value='false'/>",
+		"</property>"});
+		ComponentDescription description = getMyDescription();
+		String id = "setNoSuchProperty(boolean)";
+		// no such property, but description loaded
+		GenericPropertyDescription property = description.getProperty(id);
+		assertNull(property);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Types
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_boolean() throws Exception {
+		prepareMyComponent(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"public void setTest(boolean value) {",
+				"}");
+		ComponentDescription description = getMyDescription();
+		// "test" property
+		{
+			String id = "setTest(boolean)";
+			GenericPropertyDescription property = description.getProperty(id);
+			assertNotNull(property);
+			assertEquals(id, property.getId());
+			assertEquals("test", property.getName());
+			assertEquals("test", property.getTitle());
+			assertSame(boolean.class, property.getType());
+			assertSame(BooleanPropertyEditor.INSTANCE, property.getEditor());
+			assertSame(BooleanConverter.INSTANCE, property.getConverter());
+			assertInstanceOf(MethodExpressionAccessor.class, property.getAccessor());
+			assertSame(PropertyCategory.NORMAL, property.getCategory());
+			assertSame(Property.UNKNOWN_VALUE, property.getDefaultValue());
+		}
+	}
+
+	public void test_int() throws Exception {
+		prepareMyComponent(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"public void setTest(int value) {",
+				"}");
+		ComponentDescription description = getMyDescription();
+		// "test" property
+		{
+			String id = "setTest(int)";
+			GenericPropertyDescription property = description.getProperty(id);
+			assertNotNull(property);
+			assertEquals(id, property.getId());
+			assertEquals("test", property.getName());
+			assertEquals("test", property.getTitle());
+			assertSame(int.class, property.getType());
+			assertSame(IntegerPropertyEditor.INSTANCE, property.getEditor());
+			assertSame(IntegerConverter.INSTANCE, property.getConverter());
+			assertInstanceOf(MethodExpressionAccessor.class, property.getAccessor());
+			assertSame(PropertyCategory.NORMAL, property.getCategory());
+			assertSame(Property.UNKNOWN_VALUE, property.getDefaultValue());
+		}
+	}
+
+	public void test_String() throws Exception {
+		prepareMyComponent(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"public void setTest(String value) {",
+				"}");
+		ComponentDescription description = getMyDescription();
+		// "test" property
+		{
+			String id = "setTest(java.lang.String)";
+			GenericPropertyDescription property = description.getProperty(id);
+			assertNotNull(property);
+			assertEquals(id, property.getId());
+			assertEquals("test", property.getName());
+			assertEquals("test", property.getTitle());
+			assertSame(String.class, property.getType());
+			assertSame(StringPropertyEditor.INSTANCE, property.getEditor());
+			assertSame(StringConverter.INSTANCE, property.getConverter());
+			assertInstanceOf(MethodExpressionAccessor.class, property.getAccessor());
+			assertSame(PropertyCategory.NORMAL, property.getCategory());
+			assertSame(Property.UNKNOWN_VALUE, property.getDefaultValue());
+		}
+	}
+
+	public void test_Enum() throws Exception {
+		setFileContentSrc(
+				"test/MyEnum.java",
+				getJavaSource(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"public enum MyEnum {",
+						"  A, B, C",
+						"}"));
+		prepareMyComponent(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"public void setTest(MyEnum value) {",
+				"}");
+		ComponentDescription description = getMyDescription();
+		// "test" property
+		{
+			String id = "setTest(test.MyEnum)";
+			GenericPropertyDescription property = description.getProperty(id);
+			assertNotNull(property);
+			assertEquals(id, property.getId());
+			assertEquals("test", property.getName());
+			assertEquals("test", property.getTitle());
+			assertEquals("test.MyEnum", property.getType().getName());
+			assertSame(EnumPropertyEditor.INSTANCE, property.getEditor());
+			assertSame(EnumConverter.INSTANCE, property.getConverter());
+			assertInstanceOf(MethodExpressionAccessor.class, property.getAccessor());
+			assertSame(PropertyCategory.NORMAL, property.getCategory());
+			assertSame(Property.UNKNOWN_VALUE, property.getDefaultValue());
+		}
+	}
+
+	/**
+	 * If "setter" has capitalized name, then first letter should be "uncapitalized".
+	 */
+	public void test_attribute_setHTML() throws Exception {
+		prepareMyComponent(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"public void setHTML(boolean value) {",
+				"}");
+		ComponentDescription description = getMyDescription();
+		// "test" property
+		{
+			String id = "setHTML(boolean)";
+			GenericPropertyDescription property = description.getProperty(id);
+			assertEquals("HTML", property.getTitle());
+			assertEquals("hTML", property.getAccessor().getAttribute());
+		}
+	}
+
+	/**
+	 * In XML we see only public methods.
+	 */
+	public void test_method_protected() throws Exception {
+		prepareMyComponent(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"protected void setTest(boolean value) {",
+				"}");
+		ComponentDescription description = getMyDescription();
+		// no "test" property
+		{
+			String id = "setTest(boolean)";
+			GenericPropertyDescription property = description.getProperty(id);
+			assertNull(property);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Field
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_field() throws Exception {
+		prepareMyComponent(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"public boolean test;");
+		ComponentDescription description = getMyDescription();
+		// "test" property
+		{
+			String id = "test";
+			GenericPropertyDescription property = description.getProperty(id);
+			assertNotNull(property);
+			assertEquals(id, property.getId());
+			assertEquals("test", property.getName());
+			assertEquals("test", property.getTitle());
+			assertSame(boolean.class, property.getType());
+			assertSame(BooleanPropertyEditor.INSTANCE, property.getEditor());
+			assertSame(BooleanConverter.INSTANCE, property.getConverter());
+			assertInstanceOf(FieldExpressionAccessor.class, property.getAccessor());
+			assertSame(PropertyCategory.NORMAL, property.getCategory());
+			assertSame(Property.UNKNOWN_VALUE, property.getDefaultValue());
+		}
+	}
+
+	/**
+	 * No editor for type {@link Object} and no configurable property editor set. So, no property.
+	 */
+	public void test_field_no_editor() throws Exception {
+		prepareMyComponent(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"public Object test;");
+		ComponentDescription description = getMyDescription();
+		// "test" property
+		{
+			String id = "test";
+			GenericPropertyDescription property = description.getProperty(id);
+			assertNull(property);
+		}
+	}
+
+	/**
+	 * Configurable property editor set. The property should exist.
+	 */
+	public void test_field_has_configurableEditor() throws Exception {
+		prepareMyComponent(new String[]{
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+		"public Object test;"}, new String[]{
+				"<property id='test'>",
+				"<editor id='testEditor'/>",
+		"</property>"});
+		ComponentDescription description = getMyDescription();
+		// "test" property
+		{
+			String id = "test";
+			GenericPropertyDescription property = description.getProperty(id);
+			assertNotNull(property);
+			assertEquals(id, property.getId());
+			assertEquals("test", property.getName());
+			assertEquals("test", property.getTitle());
+			assertSame(Object.class, property.getType());
+			assertSame(NoopConfigurablePropertyEditor.class, property.getEditor().getClass());
+		}
+	}
+
+	/**
+	 * In XML we see only public fields.
+	 */
+	public void test_field_protected() throws Exception {
+		prepareMyComponent(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"protected boolean test;");
+		ComponentDescription description = getMyDescription();
+		// no "test" property
+		{
+			String id = "test";
+			GenericPropertyDescription property = description.getProperty(id);
+			assertNull(property);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Setter
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * No editor for type {@link Object} and no configurable property editor set. So, no property.
+	 */
+	public void test_setter_no_editor() throws Exception {
+		prepareMyComponent(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"public void setTest(Object value) {",
+				"}");
+		ComponentDescription description = getMyDescription();
+		// "test" property
+		{
+			String id = "setTest(java.lang.Object)";
+			GenericPropertyDescription property = description.getProperty(id);
+			assertNull(property);
+		}
+	}
+
+	/**
+	 * Configurable property editor set. The property should exist.
+	 */
+	public void test_setter_has_configurableEditor() throws Exception {
+		prepareMyComponent(new String[]{
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"public void setTest(Object value) {",
+		"}"}, new String[]{
+				"<property id='setTest(java.lang.Object)'>",
+				"<editor id='testEditor'/>",
+		"</property>"});
+		ComponentDescription description = getMyDescription();
+		// "test" property
+		{
+			String id = "setTest(java.lang.Object)";
+			GenericPropertyDescription property = description.getProperty(id);
+			assertNotNull(property);
+			assertEquals(id, property.getId());
+			assertEquals("test", property.getName());
+			assertEquals("test", property.getTitle());
+			assertSame(Object.class, property.getType());
+			assertSame(NoopConfigurablePropertyEditor.class, property.getEditor().getClass());
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Category
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_category_usingNames_preferred() throws Exception {
+		prepareMyComponent(new String[]{
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"public void setTest(boolean value) {",
+		"}"}, new String[]{"<properties-preferred names='test'/>"});
+		ComponentDescription description = getMyDescription();
+		// "test" property
+		{
+			String id = "setTest(boolean)";
+			GenericPropertyDescription property = description.getProperty(id);
+			assertSame(PropertyCategory.PREFERRED, property.getCategory());
+		}
+	}
+
+	public void test_category_usingNames_normal() throws Exception {
+		prepareMyComponent(new String[]{
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"public void setTest(boolean value) {",
+		"}"}, new String[]{
+				"<properties-preferred names='test'/>",
+		"<properties-normal names='test'/>"});
+		ComponentDescription description = getMyDescription();
+		// "test" property
+		{
+			String id = "setTest(boolean)";
+			GenericPropertyDescription property = description.getProperty(id);
+			assertSame(PropertyCategory.NORMAL, property.getCategory());
+		}
+	}
+
+	public void test_category_usingNames_advanced() throws Exception {
+		prepareMyComponent(new String[]{
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"public void setTest(boolean value) {",
+		"}"}, new String[]{"<properties-advanced names='test'/>"});
+		ComponentDescription description = getMyDescription();
+		// "test" property
+		{
+			String id = "setTest(boolean)";
+			GenericPropertyDescription property = description.getProperty(id);
+			assertSame(PropertyCategory.ADVANCED, property.getCategory());
+		}
+	}
+
+	public void test_category_usingNames_hidden() throws Exception {
+		prepareMyComponent(new String[]{
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"public void setTest(boolean value) {",
+		"}"}, new String[]{"<properties-hidden names='test'/>"});
+		ComponentDescription description = getMyDescription();
+		// "test" property
+		{
+			String id = "setTest(boolean)";
+			GenericPropertyDescription property = description.getProperty(id);
+			assertSame(PropertyCategory.HIDDEN, property.getCategory());
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Selection by ID
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_selectionByID_useMethodSignature() throws Exception {
+		prepareMyComponent(new String[]{
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"public boolean test;",
+				"public void setTest(boolean value) {",
+		"}"}, new String[]{"<properties-preferred names='setTest(boolean)'/>"});
+		ComponentDescription description = getMyDescription();
+		// "test" field
+		{
+			String id = "test";
+			GenericPropertyDescription property = description.getProperty(id);
+			assertSame(PropertyCategory.NORMAL, property.getCategory());
+		}
+		// "setTest()" method
+		{
+			String id = "setTest(boolean)";
+			GenericPropertyDescription property = description.getProperty(id);
+			assertSame(PropertyCategory.PREFERRED, property.getCategory());
+		}
+	}
+
+	public void test_selectionByID_useFieldName() throws Exception {
+		prepareMyComponent(new String[]{
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+		"public boolean test;"}, new String[]{"<properties-preferred names='test'/>"});
+		ComponentDescription description = getMyDescription();
+		// "test" field
+		{
+			String id = "test";
+			GenericPropertyDescription property = description.getProperty(id);
+			assertSame(PropertyCategory.PREFERRED, property.getCategory());
+		}
+	}
+
+	public void test_selectionByID_forceMethod() throws Exception {
+		prepareMyComponent(new String[]{
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"public boolean test;",
+				"public void setTest(boolean value) {",
+		"}"}, new String[]{"<properties-preferred names='m:test'/>"});
+		ComponentDescription description = getMyDescription();
+		// "test" field
+		{
+			String id = "test";
+			GenericPropertyDescription property = description.getProperty(id);
+			assertSame(PropertyCategory.NORMAL, property.getCategory());
+		}
+		// "setTest()" method
+		{
+			String id = "setTest(boolean)";
+			GenericPropertyDescription property = description.getProperty(id);
+			assertSame(PropertyCategory.PREFERRED, property.getCategory());
+		}
+	}
+
+	public void test_selectionByID_forceField() throws Exception {
+		prepareMyComponent(new String[]{
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"public boolean test;",
+				"public void setTest(boolean value) {",
+		"}"}, new String[]{"<properties-preferred names='f:test'/>"});
+		ComponentDescription description = getMyDescription();
+		// "test" field
+		{
+			String id = "test";
+			GenericPropertyDescription property = description.getProperty(id);
+			assertSame(PropertyCategory.PREFERRED, property.getCategory());
+		}
+		// "setTest()" method
+		{
+			String id = "setTest(boolean)";
+			GenericPropertyDescription property = description.getProperty(id);
+			assertSame(PropertyCategory.NORMAL, property.getCategory());
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Flags
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_tag() throws Exception {
+		prepareMyComponent(new String[]{
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"public void setTest(boolean value) {",
+		"}"}, new String[]{
+				"<property-tag name='test' tag='tag_1' value='value_1'/>",
+		"<property-tag name='test' tag='tag_2' value='true'/>"});
+		ComponentDescription description = getMyDescription();
+		// "test" property
+		{
+			String id = "setTest(boolean)";
+			GenericPropertyDescription property = description.getProperty(id);
+			assertEquals(null, property.getTag("tag_noSuch"));
+			assertEquals("value_1", property.getTag("tag_1"));
+			assertEquals("true", property.getTag("tag_2"));
+			assertTrue(property.hasTrueTag("tag_2"));
+		}
+	}
+
+	/**
+	 * Test for {@link GenericPropertyDescription#getTitle()} and "title" property tag.
+	 */
+	public void test_tag_title() throws Exception {
+		prepareMyComponent(new String[]{
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"public void setA(boolean value) {",
+				"}",
+				"public void setB(boolean value) {",
+				"}",}, new String[]{"<property-tag name='setA(boolean)' tag='title' value='myTitle'/>"});
+		ComponentDescription description = getMyDescription();
+		// "A" property
+		{
+			String id = "setA(boolean)";
+			GenericPropertyDescription property = description.getProperty(id);
+			assertEquals("myTitle", property.getTitle());
+			assertEquals("a", property.getAccessor().getAttribute());
+		}
+		// "B" property
+		{
+			String id = "setB(boolean)";
+			GenericPropertyDescription property = description.getProperty(id);
+			assertEquals("b", property.getTitle());
+			assertEquals("b", property.getAccessor().getAttribute());
+		}
+	}
+
+	public void test_tag_noDefaultValue_noTag() throws Exception {
+		prepareMyComponent(new String[]{
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"public void setTest(boolean value) {",
+		"}"}, new String[]{});
+		ComponentDescription description = getMyDescription();
+		// "test" property
+		{
+			String id = "setTest(boolean)";
+			GenericPropertyDescription property = description.getProperty(id);
+			assertFalse(property.hasTrueTag(ExpressionAccessor.NO_DEFAULT_VALUE_TAG));
+		}
+	}
+
+	public void test_tag_noDefaultValue_hasTag() throws Exception {
+		prepareMyComponent(new String[]{
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"public void setTest(boolean value) {",
+		"}"}, new String[]{"<properties-noDefaultValue names='test'/>"});
+		ComponentDescription description = getMyDescription();
+		// "test" property
+		{
+			String id = "setTest(boolean)";
+			GenericPropertyDescription property = description.getProperty(id);
+			assertTrue(property.hasTrueTag(ExpressionAccessor.NO_DEFAULT_VALUE_TAG));
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Configure property
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_configureProperty_category() throws Exception {
+		prepareMyComponent(new String[]{
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"public void setTest(boolean value) {",
+		"}"}, new String[]{
+				"<!-- ===================== -->",
+				"<property id='setTest(boolean)'>",
+				"  <category value='preferred'/>",
+		"</property>"});
+		ComponentDescription description = getMyDescription();
+		// "test" property
+		{
+			String id = "setTest(boolean)";
+			GenericPropertyDescription property = description.getProperty(id);
+			assertSame(PropertyCategory.PREFERRED, property.getCategory());
+		}
+	}
+
+	public void test_configureProperty_defaultValue() throws Exception {
+		prepareMyComponent(new String[]{
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"public void setTest(int value) {",
+		"}"}, new String[]{
+				"<!-- ===================== -->",
+				"<property id='setTest(int)'>",
+				"  <defaultValue value='123'/>",
+		"</property>"});
+		ComponentDescription description = getMyDescription();
+		// "test" property
+		{
+			String id = "setTest(int)";
+			GenericPropertyDescription property = description.getProperty(id);
+			assertEquals(123, property.getDefaultValue());
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Configurable editor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Attempt to reference ID for which no configurable editor, causes loading failure.
+	 */
+	public void test_configureProperty_editorWithID_noSuchID() throws Exception {
+		prepareMyComponent(new String[]{
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"public void setTest(int value) {",
+		"}"}, new String[]{
+				"<!-- ===================== -->",
+				"<property id='setTest(int)'>",
+				"  <editor id='noEditorWithSuchID'/>",
+		"</property>"});
+		ComponentDescription description = getMyDescription();
+		// no editor, so no property
+		String id = "setTest(int)";
+		GenericPropertyDescription property = description.getProperty(id);
+		assertNull(property);
+	}
+
+	/**
+	 * Test for configurable editor, use "parameter" tag.
+	 */
+	public void test_configureProperty_editorWithID_parameter() throws Exception {
+		prepareMyComponent(new String[]{
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"public void setTest(int value) {",
+		"}"}, new String[]{
+				"<!-- ===================== -->",
+				"<property id='setTest(int)'>",
+				"  <editor id='staticField'>",
+				"    <parameter name='class'>org.eclipse.swt.SWT</parameter>",
+				"    <parameter name='fields'>LEFT CENTER RIGHT</parameter>",
+				"  </editor>",
+		"</property>"});
+		ComponentDescription description = getMyDescription();
+		// "test" property
+		String id = "setTest(int)";
+		GenericPropertyDescription property = description.getProperty(id);
+		StaticFieldPropertyEditor editor = (StaticFieldPropertyEditor) property.getEditor();
+		assertStaticFieldEditor_fields(editor, "LEFT", "CENTER", "RIGHT");
+	}
+
+	/**
+	 * Test for configurable editor, use "parameter-list" tag.
+	 */
+	public void test_configureProperty_editorWithID_parameterList() throws Exception {
+		prepareMyComponent(new String[]{
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"public void setTest(int value) {",
+		"}"}, new String[]{
+				"<!-- ===================== -->",
+				"<property id='setTest(int)'>",
+				"  <editor id='staticField'>",
+				"    <parameter name='class'>org.eclipse.swt.SWT</parameter>",
+				"    <parameter-list name='fields'>LEFT</parameter-list>",
+				"    <parameter-list name='fields'>CENTER</parameter-list>",
+				"    <parameter-list name='fields'>RIGHT</parameter-list>",
+				"  </editor>",
+		"</property>"});
+		ComponentDescription description = getMyDescription();
+		// "test" property
+		String id = "setTest(int)";
+		GenericPropertyDescription property = description.getProperty(id);
+		StaticFieldPropertyEditor editor = (StaticFieldPropertyEditor) property.getEditor();
+		assertStaticFieldEditor_fields(editor, "LEFT", "CENTER", "RIGHT");
+	}
+
+	private static void assertStaticFieldEditor_fields(StaticFieldPropertyEditor editor,
+			String... expected) {
+		String[] actual = (String[]) ReflectionUtils.getFieldObject(editor, "m_names");
+		assertThat(actual).isEqualTo(expected);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/description/MethodExpressionAccessorTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/description/MethodExpressionAccessorTest.java
index 0509bd23a..0c092214e 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/description/MethodExpressionAccessorTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/description/MethodExpressionAccessorTest.java
@@ -27,197 +27,197 @@
  * @author scheglov_ke
  */
 public class MethodExpressionAccessorTest extends AbstractCoreTest {
-  private XmlObjectInfo myComponent;
-  private GenericPropertyImpl property;
-  private MethodExpressionAccessor accessor;
+	private XmlObjectInfo myComponent;
+	private GenericPropertyImpl property;
+	private MethodExpressionAccessor accessor;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_getAdapter() throws Exception {
-    prepareMyComponent(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "/**",
-        "* My JavaDoc text.",
-        "*/",
-        "public void setTest(int value) {",
-        "}");
-    prepareProperty();
-    // ignore arbitrary adapter
-    assertNull(accessor.getAdapter(null));
-    // get provider
-    PropertyTooltipProvider tooltipProvider = accessor.getAdapter(PropertyTooltipProvider.class);
-    assertNotNull(tooltipProvider);
-    String tooltip =
-        (String) ReflectionUtils.invokeMethod(
-            tooltipProvider,
-            "getText(org.eclipse.wb.internal.core.model.property.Property)",
-            property);
-    assertThat(tooltip).isEqualTo("My JavaDoc text.");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_getAdapter() throws Exception {
+		prepareMyComponent(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"/**",
+				"* My JavaDoc text.",
+				"*/",
+				"public void setTest(int value) {",
+				"}");
+		prepareProperty();
+		// ignore arbitrary adapter
+		assertNull(accessor.getAdapter(null));
+		// get provider
+		PropertyTooltipProvider tooltipProvider = accessor.getAdapter(PropertyTooltipProvider.class);
+		assertNotNull(tooltipProvider);
+		String tooltip =
+				(String) ReflectionUtils.invokeMethod(
+						tooltipProvider,
+						"getText(org.eclipse.wb.internal.core.model.property.Property)",
+						property);
+		assertThat(tooltip).isEqualTo("My JavaDoc text.");
+	}
 
-  public void test_getX_noValue() throws Exception {
-    prepareMyComponent(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "public void setTest(int value) {",
-        "}");
-    prepareProperty();
-    // not modified
-    assertFalse(accessor.isModified(myComponent));
-    assertEquals(null, accessor.getExpression(myComponent));
-    // no default value
-    assertSame(Property.UNKNOWN_VALUE, accessor.getDefaultValue(myComponent));
-    assertSame(Property.UNKNOWN_VALUE, accessor.getValue(myComponent));
-  }
+	public void test_getX_noValue() throws Exception {
+		prepareMyComponent(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"public void setTest(int value) {",
+				"}");
+		prepareProperty();
+		// not modified
+		assertFalse(accessor.isModified(myComponent));
+		assertEquals(null, accessor.getExpression(myComponent));
+		// no default value
+		assertSame(Property.UNKNOWN_VALUE, accessor.getDefaultValue(myComponent));
+		assertSame(Property.UNKNOWN_VALUE, accessor.getValue(myComponent));
+	}
 
-  public void test_getX_hasValue() throws Exception {
-    prepareMyComponent(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "public void setTest(int value) {",
-        "}");
-    prepareProperty(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <t:MyComponent wbp:name='myComponent' test='5'/>",
-        "</Shell>");
-    // modified
-    assertTrue(accessor.isModified(myComponent));
-    assertEquals("5", accessor.getExpression(myComponent));
-    // no default value
-    assertSame(Property.UNKNOWN_VALUE, accessor.getDefaultValue(myComponent));
-    assertEquals(5, accessor.getValue(myComponent));
-  }
+	public void test_getX_hasValue() throws Exception {
+		prepareMyComponent(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"public void setTest(int value) {",
+				"}");
+		prepareProperty(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <t:MyComponent wbp:name='myComponent' test='5'/>",
+				"</Shell>");
+		// modified
+		assertTrue(accessor.isModified(myComponent));
+		assertEquals("5", accessor.getExpression(myComponent));
+		// no default value
+		assertSame(Property.UNKNOWN_VALUE, accessor.getDefaultValue(myComponent));
+		assertEquals(5, accessor.getValue(myComponent));
+	}
 
-  public void test_getX_hasDefaultValue_noValue() throws Exception {
-    prepareMyComponent(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "public int getTest() {",
-        "  return 123;",
-        "}",
-        "public void setTest(int value) {",
-        "}");
-    prepareProperty();
-    // not modified
-    assertFalse(accessor.isModified(myComponent));
-    assertEquals(null, accessor.getExpression(myComponent));
-    // no default value
-    assertEquals(123, accessor.getDefaultValue(myComponent));
-    assertEquals(Property.UNKNOWN_VALUE, accessor.getValue(myComponent));
-  }
+	public void test_getX_hasDefaultValue_noValue() throws Exception {
+		prepareMyComponent(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"public int getTest() {",
+				"  return 123;",
+				"}",
+				"public void setTest(int value) {",
+				"}");
+		prepareProperty();
+		// not modified
+		assertFalse(accessor.isModified(myComponent));
+		assertEquals(null, accessor.getExpression(myComponent));
+		// no default value
+		assertEquals(123, accessor.getDefaultValue(myComponent));
+		assertEquals(Property.UNKNOWN_VALUE, accessor.getValue(myComponent));
+	}
 
-  public void test_getX_propertyElement() throws Exception {
-    prepareMyComponent(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "private String[] m_items;",
-        "public void setTest(String[] items) {",
-        "  m_items = items;",
-        "}");
-    prepareProperty(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell xmlns:p1='clr-namespace:java.lang'>",
-        "  <t:MyComponent wbp:name='myComponent'>",
-        "    <t:MyComponent.test>",
-        "      <p1:String>some</p1:String>",
-        "      <p1:String>items</p1:String>",
-        "    </t:MyComponent.test>",
-        "  </t:MyComponent>",
-        "</Shell>");
-    // modified - has element
-    assertTrue(accessor.isModified(myComponent));
-    // ...but no String expression
-    assertEquals(null, accessor.getExpression(myComponent));
-  }
+	public void test_getX_propertyElement() throws Exception {
+		prepareMyComponent(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"private String[] m_items;",
+				"public void setTest(String[] items) {",
+				"  m_items = items;",
+				"}");
+		prepareProperty(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell xmlns:p1='clr-namespace:java.lang'>",
+				"  <t:MyComponent wbp:name='myComponent'>",
+				"    <t:MyComponent.test>",
+				"      <p1:String>some</p1:String>",
+				"      <p1:String>items</p1:String>",
+				"    </t:MyComponent.test>",
+				"  </t:MyComponent>",
+				"</Shell>");
+		// modified - has element
+		assertTrue(accessor.isModified(myComponent));
+		// ...but no String expression
+		assertEquals(null, accessor.getExpression(myComponent));
+	}
 
-  /**
-   * Test for {@link MethodExpressionAccessor#setExpression(XmlObjectInfo, String)}.
-   */
-  public void test_setExpression() throws Exception {
-    prepareMyComponent(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "public void setTest(int value) {",
-        "}");
-    prepareProperty();
-    // not modified
-    assertFalse(accessor.isModified(myComponent));
-    assertEquals(null, accessor.getExpression(myComponent));
-    // set expression
-    accessor.setExpression(myComponent, "123");
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <t:MyComponent wbp:name='myComponent' test='123'/>",
-        "</Shell>");
-    // modified
-    assertTrue(accessor.isModified(myComponent));
-    assertEquals("123", accessor.getExpression(myComponent));
-    assertEquals(123, accessor.getValue(myComponent));
-  }
+	/**
+	 * Test for {@link MethodExpressionAccessor#setExpression(XmlObjectInfo, String)}.
+	 */
+	public void test_setExpression() throws Exception {
+		prepareMyComponent(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"public void setTest(int value) {",
+				"}");
+		prepareProperty();
+		// not modified
+		assertFalse(accessor.isModified(myComponent));
+		assertEquals(null, accessor.getExpression(myComponent));
+		// set expression
+		accessor.setExpression(myComponent, "123");
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <t:MyComponent wbp:name='myComponent' test='123'/>",
+				"</Shell>");
+		// modified
+		assertTrue(accessor.isModified(myComponent));
+		assertEquals("123", accessor.getExpression(myComponent));
+		assertEquals(123, accessor.getValue(myComponent));
+	}
 
-  public void test_getSetter_getGetter() throws Exception {
-    prepareMyComponent(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "public int getTest() {",
-        "  return 123;",
-        "}",
-        "public void setTest(int value) {",
-        "}");
-    prepareProperty();
-    // has setter
-    {
-      Method setter = accessor.getSetter();
-      assertNotNull(setter);
-      assertEquals("setTest", setter.getName());
-    }
-    // has getter
-    {
-      Method getter = accessor.getGetter();
-      assertNotNull(getter);
-      assertEquals("getTest", getter.getName());
-    }
-  }
+	public void test_getSetter_getGetter() throws Exception {
+		prepareMyComponent(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"public int getTest() {",
+				"  return 123;",
+				"}",
+				"public void setTest(int value) {",
+				"}");
+		prepareProperty();
+		// has setter
+		{
+			Method setter = accessor.getSetter();
+			assertNotNull(setter);
+			assertEquals("setTest", setter.getName());
+		}
+		// has getter
+		{
+			Method getter = accessor.getGetter();
+			assertNotNull(getter);
+			assertEquals("getTest", getter.getName());
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void prepareProperty() throws Exception {
-    prepareProperty(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <t:MyComponent wbp:name='myComponent'/>",
-        "</Shell>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void prepareProperty() throws Exception {
+		prepareProperty(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <t:MyComponent wbp:name='myComponent'/>",
+				"</Shell>");
+	}
 
-  private void prepareProperty(String... lines) throws Exception {
-    parse(lines);
-    refresh();
-    // prepare
-    myComponent = getObjectByName("myComponent");
-    property = (GenericPropertyImpl) myComponent.getPropertyByTitle("test");
-    assertNotNull(property);
-    accessor = (MethodExpressionAccessor) property.getDescription().getAccessor();
-  }
+	private void prepareProperty(String... lines) throws Exception {
+		parse(lines);
+		refresh();
+		// prepare
+		myComponent = getObjectByName("myComponent");
+		property = (GenericPropertyImpl) myComponent.getPropertyByTitle("test");
+		assertNotNull(property);
+		accessor = (MethodExpressionAccessor) property.getDescription().getAccessor();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/description/MorphingTargetDescriptionTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/description/MorphingTargetDescriptionTest.java
index e3b748dde..b3d21aa0f 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/description/MorphingTargetDescriptionTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/description/MorphingTargetDescriptionTest.java
@@ -25,163 +25,163 @@
  * @author sablin_aa
  */
 public class MorphingTargetDescriptionTest extends AbstractCoreTest {
-  private static final String[] ESA = ArrayUtils.EMPTY_STRING_ARRAY;
+	private static final String[] ESA = ArrayUtils.EMPTY_STRING_ARRAY;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for loading {@link MorphingTargetDescription}'s from "*.wbp-component.xml" files.
-   */
-  public void test_loadFromDescriptions() throws Exception {
-    prepareMyComponent(ESA, new String[]{
-        "  <morphTargets>",
-        "    <morphTarget class='org.eclipse.swt.widgets.Label'/>",
-        "    <morphTarget class='org.eclipse.swt.widgets.Button' creationId='someId'/>",
-        "  </morphTargets>"});
-    ComponentDescription description = getMyDescription();
-    List<MorphingTargetDescription> morphingTargets = description.getMorphingTargets();
-    // check targets
-    assertEquals(2, morphingTargets.size());
-    {
-      MorphingTargetDescription morphingTarget = morphingTargets.get(0);
-      assertEquals("org.eclipse.swt.widgets.Label", morphingTarget.getComponentClass().getName());
-      assertNull(morphingTarget.getCreationId());
-    }
-    {
-      MorphingTargetDescription morphingTarget = morphingTargets.get(1);
-      assertEquals("org.eclipse.swt.widgets.Button", morphingTarget.getComponentClass().getName());
-      assertEquals("someId", morphingTarget.getCreationId());
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for loading {@link MorphingTargetDescription}'s from "*.wbp-component.xml" files.
+	 */
+	public void test_loadFromDescriptions() throws Exception {
+		prepareMyComponent(ESA, new String[]{
+				"  <morphTargets>",
+				"    <morphTarget class='org.eclipse.swt.widgets.Label'/>",
+				"    <morphTarget class='org.eclipse.swt.widgets.Button' creationId='someId'/>",
+		"  </morphTargets>"});
+		ComponentDescription description = getMyDescription();
+		List<MorphingTargetDescription> morphingTargets = description.getMorphingTargets();
+		// check targets
+		assertEquals(2, morphingTargets.size());
+		{
+			MorphingTargetDescription morphingTarget = morphingTargets.get(0);
+			assertEquals("org.eclipse.swt.widgets.Label", morphingTarget.getComponentClass().getName());
+			assertNull(morphingTarget.getCreationId());
+		}
+		{
+			MorphingTargetDescription morphingTarget = morphingTargets.get(1);
+			assertEquals("org.eclipse.swt.widgets.Button", morphingTarget.getComponentClass().getName());
+			assertEquals("someId", morphingTarget.getCreationId());
+		}
+	}
 
-  /**
-   * We should ignore invalid target classes.
-   */
-  public void test_noTargetClass() throws Exception {
-    prepareMyComponent(ESA, new String[]{
-        "  <morphTargets>",
-        "    <morphTarget class='no.such.Class'/>",
-        "    <morphTarget class='org.eclipse.swt.widgets.Label'/>",
-        "  </morphTargets>"});
-    ComponentDescription description = getMyDescription();
-    List<MorphingTargetDescription> morphingTargets = description.getMorphingTargets();
-    // check targets
-    assertThat(morphingTargets).hasSize(1);
-    {
-      MorphingTargetDescription morphingTarget = morphingTargets.get(0);
-      assertEquals("org.eclipse.swt.widgets.Label", morphingTarget.getComponentClass().getName());
-      assertNull(morphingTarget.getCreationId());
-    }
-  }
+	/**
+	 * We should ignore invalid target classes.
+	 */
+	public void test_noTargetClass() throws Exception {
+		prepareMyComponent(ESA, new String[]{
+				"  <morphTargets>",
+				"    <morphTarget class='no.such.Class'/>",
+				"    <morphTarget class='org.eclipse.swt.widgets.Label'/>",
+		"  </morphTargets>"});
+		ComponentDescription description = getMyDescription();
+		List<MorphingTargetDescription> morphingTargets = description.getMorphingTargets();
+		// check targets
+		assertThat(morphingTargets).hasSize(1);
+		{
+			MorphingTargetDescription morphingTarget = morphingTargets.get(0);
+			assertEquals("org.eclipse.swt.widgets.Label", morphingTarget.getComponentClass().getName());
+			assertNull(morphingTarget.getCreationId());
+		}
+	}
 
-  /**
-   * We should clear targets on "noInhetit=true"
-   *
-   * @throws Exception
-   */
-  public void test_noInherit() throws Exception {
-    // MyBaseButton
-    {
-      setFileContentSrc(
-          "test/MyBaseComposite.java",
-          getSourceDQ(
-              "package test;",
-              "import org.eclipse.swt.SWT;",
-              "import org.eclipse.swt.widgets.*;",
-              "public class MyBaseComposite extends Composite {",
-              "  public MyBaseComposite(Composite parent, int style) {",
-              "    super(parent, style);",
-              "  }",
-              "}"));
-      setFileContentSrc(
-          "test/MyBaseComposite.wbp-component.xml",
-          getSourceDQ(
-              "<?xml version='1.0' encoding='UTF-8'?>",
-              "<component xmlns='http://www.eclipse.org/wb/WBPComponent'>",
-              "  <morphTargets>",
-              "    <morphTarget class='org.eclipse.swt.widgets.Label'/>",
-              "  </morphTargets>",
-              "</component>"));
-    }
-    // MyButton1
-    {
-      setFileContentSrc(
-          "test/MyComposite1.java",
-          getSourceDQ(
-              "package test;",
-              "import org.eclipse.swt.SWT;",
-              "import org.eclipse.swt.widgets.*;",
-              "public class MyComposite1 extends MyBaseComposite {",
-              "  public MyComposite1(Composite parent, int style) {",
-              "    super(parent, style);",
-              "  }",
-              "}"));
-      setFileContentSrc(
-          "test/MyComposite1.wbp-component.xml",
-          getSourceDQ(
-              "<?xml version='1.0' encoding='UTF-8'?>",
-              "<component xmlns='http://www.eclipse.org/wb/WBPComponent'>",
-              "  <morphTargets>",
-              "    <morphTarget class='org.eclipse.swt.widgets.Button'/>",
-              "  </morphTargets>",
-              "</component>"));
-    }
-    // MyButton2
-    {
-      setFileContentSrc(
-          "test/MyComposite2.java",
-          getSourceDQ(
-              "package test;",
-              "import org.eclipse.swt.SWT;",
-              "import org.eclipse.swt.widgets.*;",
-              "public class MyComposite2 extends MyBaseComposite {",
-              "  public MyComposite2(Composite parent, int style) {",
-              "    super(parent, style);",
-              "  }",
-              "}"));
-      setFileContentSrc(
-          "test/MyComposite2.wbp-component.xml",
-          getSourceDQ(
-              "<?xml version='1.0' encoding='UTF-8'?>",
-              "<component xmlns='http://www.eclipse.org/wb/WBPComponent'>",
-              "  <morphTargets>",
-              "    <noInherit/>",
-              "    <morphTarget class='org.eclipse.swt.widgets.Text'/>",
-              "  </morphTargets>",
-              "</component>"));
-    }
-    waitForAutoBuild();
-    // check description for MyButton1
-    {
-      ComponentDescription description = getDescription("test.MyComposite1");
-      List<MorphingTargetDescription> morphingTargets = description.getMorphingTargets();
-      assertThat(morphingTargets).hasSize(2);
-      // check targets
-      {
-        MorphingTargetDescription morphingTarget = morphingTargets.get(0);
-        assertEquals("org.eclipse.swt.widgets.Label", morphingTarget.getComponentClass().getName());
-        assertNull(morphingTarget.getCreationId());
-      }
-      {
-        MorphingTargetDescription morphingTarget = morphingTargets.get(1);
-        assertEquals("org.eclipse.swt.widgets.Button", morphingTarget.getComponentClass().getName());
-        assertNull(morphingTarget.getCreationId());
-      }
-    }
-    // check description for MyButton2
-    {
-      ComponentDescription description = getDescription("test.MyComposite2");
-      List<MorphingTargetDescription> morphingTargets = description.getMorphingTargets();
-      // check targets
-      assertThat(morphingTargets).hasSize(1); // no target JButton
-      {
-        MorphingTargetDescription morphingTarget = morphingTargets.get(0);
-        assertEquals("org.eclipse.swt.widgets.Text", morphingTarget.getComponentClass().getName());
-        assertNull(morphingTarget.getCreationId());
-      }
-    }
-  }
+	/**
+	 * We should clear targets on "noInhetit=true"
+	 *
+	 * @throws Exception
+	 */
+	public void test_noInherit() throws Exception {
+		// MyBaseButton
+		{
+			setFileContentSrc(
+					"test/MyBaseComposite.java",
+					getSourceDQ(
+							"package test;",
+							"import org.eclipse.swt.SWT;",
+							"import org.eclipse.swt.widgets.*;",
+							"public class MyBaseComposite extends Composite {",
+							"  public MyBaseComposite(Composite parent, int style) {",
+							"    super(parent, style);",
+							"  }",
+							"}"));
+			setFileContentSrc(
+					"test/MyBaseComposite.wbp-component.xml",
+					getSourceDQ(
+							"<?xml version='1.0' encoding='UTF-8'?>",
+							"<component xmlns='http://www.eclipse.org/wb/WBPComponent'>",
+							"  <morphTargets>",
+							"    <morphTarget class='org.eclipse.swt.widgets.Label'/>",
+							"  </morphTargets>",
+							"</component>"));
+		}
+		// MyButton1
+		{
+			setFileContentSrc(
+					"test/MyComposite1.java",
+					getSourceDQ(
+							"package test;",
+							"import org.eclipse.swt.SWT;",
+							"import org.eclipse.swt.widgets.*;",
+							"public class MyComposite1 extends MyBaseComposite {",
+							"  public MyComposite1(Composite parent, int style) {",
+							"    super(parent, style);",
+							"  }",
+							"}"));
+			setFileContentSrc(
+					"test/MyComposite1.wbp-component.xml",
+					getSourceDQ(
+							"<?xml version='1.0' encoding='UTF-8'?>",
+							"<component xmlns='http://www.eclipse.org/wb/WBPComponent'>",
+							"  <morphTargets>",
+							"    <morphTarget class='org.eclipse.swt.widgets.Button'/>",
+							"  </morphTargets>",
+							"</component>"));
+		}
+		// MyButton2
+		{
+			setFileContentSrc(
+					"test/MyComposite2.java",
+					getSourceDQ(
+							"package test;",
+							"import org.eclipse.swt.SWT;",
+							"import org.eclipse.swt.widgets.*;",
+							"public class MyComposite2 extends MyBaseComposite {",
+							"  public MyComposite2(Composite parent, int style) {",
+							"    super(parent, style);",
+							"  }",
+							"}"));
+			setFileContentSrc(
+					"test/MyComposite2.wbp-component.xml",
+					getSourceDQ(
+							"<?xml version='1.0' encoding='UTF-8'?>",
+							"<component xmlns='http://www.eclipse.org/wb/WBPComponent'>",
+							"  <morphTargets>",
+							"    <noInherit/>",
+							"    <morphTarget class='org.eclipse.swt.widgets.Text'/>",
+							"  </morphTargets>",
+							"</component>"));
+		}
+		waitForAutoBuild();
+		// check description for MyButton1
+		{
+			ComponentDescription description = getDescription("test.MyComposite1");
+			List<MorphingTargetDescription> morphingTargets = description.getMorphingTargets();
+			assertThat(morphingTargets).hasSize(2);
+			// check targets
+			{
+				MorphingTargetDescription morphingTarget = morphingTargets.get(0);
+				assertEquals("org.eclipse.swt.widgets.Label", morphingTarget.getComponentClass().getName());
+				assertNull(morphingTarget.getCreationId());
+			}
+			{
+				MorphingTargetDescription morphingTarget = morphingTargets.get(1);
+				assertEquals("org.eclipse.swt.widgets.Button", morphingTarget.getComponentClass().getName());
+				assertNull(morphingTarget.getCreationId());
+			}
+		}
+		// check description for MyButton2
+		{
+			ComponentDescription description = getDescription("test.MyComposite2");
+			List<MorphingTargetDescription> morphingTargets = description.getMorphingTargets();
+			// check targets
+			assertThat(morphingTargets).hasSize(1); // no target JButton
+			{
+				MorphingTargetDescription morphingTarget = morphingTargets.get(0);
+				assertEquals("org.eclipse.swt.widgets.Text", morphingTarget.getComponentClass().getName());
+				assertNull(morphingTarget.getCreationId());
+			}
+		}
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/generic/ContainerObjectValidatorsTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/generic/ContainerObjectValidatorsTest.java
index 5c07c82fd..b72552749 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/generic/ContainerObjectValidatorsTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/generic/ContainerObjectValidatorsTest.java
@@ -26,282 +26,282 @@
  * @author scheglov_ke
  */
 public class ContainerObjectValidatorsTest extends AbstractCoreTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link ContainerObjectValidators#alwaysTrue()}.
-   */
-  public void test_alwaysTrue() throws Exception {
-    ContainerObjectValidator validator = ContainerObjectValidators.alwaysTrue();
-    assertEquals("alwaysTrue", validator.toString());
-    assertTrue(validator.validate(null, null));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link ContainerObjectValidators#alwaysTrue()}.
+	 */
+	public void test_alwaysTrue() throws Exception {
+		ContainerObjectValidator validator = ContainerObjectValidators.alwaysTrue();
+		assertEquals("alwaysTrue", validator.toString());
+		assertTrue(validator.validate(null, null));
+	}
 
-  /**
-   * Test for {@link ContainerObjectValidators#forList(String[])}.
-   */
-  public void test_forList() throws Exception {
-    ContainerObjectValidator validator;
-    {
-      String typesString = "org.eclipse.swt.widgets.Button org.eclipse.swt.widgets.Text";
-      String[] types = StringUtils.split(typesString);
-      validator = ContainerObjectValidators.forList(types);
-      assertEquals(typesString, validator.toString());
-    }
-    // parse
-    parse(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Button wbp:name='button'/>",
-        "  <Text wbp:name='text'/>",
-        "  <Label wbp:name='label'/>",
-        "</Shell>");
-    XmlObjectInfo buttonModel = getObjectByName("button");
-    XmlObjectInfo textModel = getObjectByName("text");
-    XmlObjectInfo labelModel = getObjectByName("label");
-    // validate
-    assertFalse(validator.validate(null, null));
-    assertFalse(validator.validate(null, new Object()));
-    assertTrue(validator.validate(null, buttonModel));
-    assertTrue(validator.validate(null, textModel));
-    assertFalse(validator.validate(null, labelModel));
-  }
+	/**
+	 * Test for {@link ContainerObjectValidators#forList(String[])}.
+	 */
+	public void test_forList() throws Exception {
+		ContainerObjectValidator validator;
+		{
+			String typesString = "org.eclipse.swt.widgets.Button org.eclipse.swt.widgets.Text";
+			String[] types = StringUtils.split(typesString);
+			validator = ContainerObjectValidators.forList(types);
+			assertEquals(typesString, validator.toString());
+		}
+		// parse
+		parse(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Button wbp:name='button'/>",
+				"  <Text wbp:name='text'/>",
+				"  <Label wbp:name='label'/>",
+				"</Shell>");
+		XmlObjectInfo buttonModel = getObjectByName("button");
+		XmlObjectInfo textModel = getObjectByName("text");
+		XmlObjectInfo labelModel = getObjectByName("label");
+		// validate
+		assertFalse(validator.validate(null, null));
+		assertFalse(validator.validate(null, new Object()));
+		assertTrue(validator.validate(null, buttonModel));
+		assertTrue(validator.validate(null, textModel));
+		assertFalse(validator.validate(null, labelModel));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // forContainerExpression
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link ContainerObjectValidators#forContainerExpression(String)}.
-   */
-  public void test_forContainerExpression() throws Exception {
-    XmlObjectInfo shell =
-        parse(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Button wbp:name='button'/>",
-            "  <Text wbp:name='text'/>",
-            "  <Label wbp:name='label'/>",
-            "</Shell>");
-    XmlObjectInfo button = getObjectByName("button");
-    // not XMObject_Info
-    assertContainerValidatorFalse("no matter", this);
-    // literals
-    assertContainerValidatorTrue("true", shell);
-    assertContainerValidatorFalse("false", shell);
-    // simple expression
-    assertContainerValidatorTrue("1 == 1", shell);
-    assertContainerValidatorFalse("1 == 2", shell);
-    // type
-    assertContainerValidatorTrue("isContainerType('org.eclipse.swt.widgets.Shell')", shell);
-    assertContainerValidatorTrue("isContainerType('org.eclipse.swt.widgets.Control')", shell);
-    assertContainerValidatorFalse("isContainerType('org.eclipse.swt.widgets.Button')", shell);
-    assertContainerValidatorTrue("isContainerType('org.eclipse.swt.widgets.Button')", button);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// forContainerExpression
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link ContainerObjectValidators#forContainerExpression(String)}.
+	 */
+	public void test_forContainerExpression() throws Exception {
+		XmlObjectInfo shell =
+				parse(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Button wbp:name='button'/>",
+						"  <Text wbp:name='text'/>",
+						"  <Label wbp:name='label'/>",
+						"</Shell>");
+		XmlObjectInfo button = getObjectByName("button");
+		// not XMObject_Info
+		assertContainerValidatorFalse("no matter", this);
+		// literals
+		assertContainerValidatorTrue("true", shell);
+		assertContainerValidatorFalse("false", shell);
+		// simple expression
+		assertContainerValidatorTrue("1 == 1", shell);
+		assertContainerValidatorFalse("1 == 2", shell);
+		// type
+		assertContainerValidatorTrue("isContainerType('org.eclipse.swt.widgets.Shell')", shell);
+		assertContainerValidatorTrue("isContainerType('org.eclipse.swt.widgets.Control')", shell);
+		assertContainerValidatorFalse("isContainerType('org.eclipse.swt.widgets.Button')", shell);
+		assertContainerValidatorTrue("isContainerType('org.eclipse.swt.widgets.Button')", button);
+	}
 
-  private static void assertContainerValidatorFalse(String expression, Object container) {
-    assertContainerValidator(false, expression, container);
-  }
+	private static void assertContainerValidatorFalse(String expression, Object container) {
+		assertContainerValidator(false, expression, container);
+	}
 
-  private static void assertContainerValidatorTrue(String expression, Object container) {
-    assertContainerValidator(true, expression, container);
-  }
+	private static void assertContainerValidatorTrue(String expression, Object container) {
+		assertContainerValidator(true, expression, container);
+	}
 
-  private static void assertContainerValidator(boolean expected, String expression, Object container) {
-    Predicate<Object> validator = ContainerObjectValidators.forContainerExpression(expression);
-    assertEquals(expression, validator.toString());
-    assertEquals(expected, validator.apply(container));
-    if (container instanceof JavaInfo) {
-      assertEquals(expected, ContainerObjectValidators.validateContainer(container, expression));
-    }
-  }
+	private static void assertContainerValidator(boolean expected, String expression, Object container) {
+		Predicate<Object> validator = ContainerObjectValidators.forContainerExpression(expression);
+		assertEquals(expression, validator.toString());
+		assertEquals(expected, validator.apply(container));
+		if (container instanceof JavaInfo) {
+			assertEquals(expected, ContainerObjectValidators.validateContainer(container, expression));
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // forComponentExpression
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link ContainerObjectValidators#forComponentExpression(String)}.
-   */
-  public void test_forComponentExpression() throws Exception {
-    XmlObjectInfo shell =
-        parse(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Button wbp:name='button'/>",
-            "  <Text wbp:name='text'/>",
-            "</Shell>");
-    XmlObjectInfo buttonModel = getObjectByName("button");
-    XmlObjectInfo textModel = getObjectByName("text");
-    // "container" is not not model
-    assertComponentValidatorFalse("true", null, buttonModel);
-    // "component" is not not model
-    assertComponentValidatorFalse("true", shell, null);
-    // "false" literal
-    assertComponentValidatorFalse("false", shell, buttonModel);
-    // "true" literal
-    assertComponentValidatorTrue("true", shell, buttonModel);
-    // use "isComponentType" function
-    assertComponentValidatorTrue(
-        "isComponentType(org.eclipse.swt.widgets.Control)",
-        shell,
-        buttonModel);
-    assertComponentValidatorTrue(
-        "isComponentType(org.eclipse.swt.widgets.Control)",
-        shell,
-        textModel);
-    assertComponentValidatorTrue(
-        "isComponentType(org.eclipse.swt.widgets.Button)",
-        shell,
-        buttonModel);
-    assertComponentValidatorFalse(
-        "isComponentType(org.eclipse.swt.widgets.Button)",
-        shell,
-        textModel);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// forComponentExpression
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link ContainerObjectValidators#forComponentExpression(String)}.
+	 */
+	public void test_forComponentExpression() throws Exception {
+		XmlObjectInfo shell =
+				parse(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Button wbp:name='button'/>",
+						"  <Text wbp:name='text'/>",
+						"</Shell>");
+		XmlObjectInfo buttonModel = getObjectByName("button");
+		XmlObjectInfo textModel = getObjectByName("text");
+		// "container" is not not model
+		assertComponentValidatorFalse("true", null, buttonModel);
+		// "component" is not not model
+		assertComponentValidatorFalse("true", shell, null);
+		// "false" literal
+		assertComponentValidatorFalse("false", shell, buttonModel);
+		// "true" literal
+		assertComponentValidatorTrue("true", shell, buttonModel);
+		// use "isComponentType" function
+		assertComponentValidatorTrue(
+				"isComponentType(org.eclipse.swt.widgets.Control)",
+				shell,
+				buttonModel);
+		assertComponentValidatorTrue(
+				"isComponentType(org.eclipse.swt.widgets.Control)",
+				shell,
+				textModel);
+		assertComponentValidatorTrue(
+				"isComponentType(org.eclipse.swt.widgets.Button)",
+				shell,
+				buttonModel);
+		assertComponentValidatorFalse(
+				"isComponentType(org.eclipse.swt.widgets.Button)",
+				shell,
+				textModel);
+	}
 
-  /**
-   * Test for {@link ContainerObjectValidators#forComponentExpression(String)}.
-   * <p>
-   * Use <code>isComponentType</code> for some type that is not in standard {@link ClassLoader}.
-   */
-  public void test_forComponentExpression_externalType() throws Exception {
-    prepareMyComponent();
-    // parse
-    XmlObjectInfo shell =
-        parse(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <t:MyComponent wbp:name='myComponent'/>",
-            "</Shell>");
-    XmlObjectInfo myComponent = getObjectByName("myComponent");
-    // use "isComponentType" function
-    assertComponentValidatorTrue(
-        "isComponentType(org.eclipse.swt.widgets.Control)",
-        shell,
-        myComponent);
-    assertComponentValidatorTrue("isComponentType('test.MyComponent')", shell, myComponent);
-  }
+	/**
+	 * Test for {@link ContainerObjectValidators#forComponentExpression(String)}.
+	 * <p>
+	 * Use <code>isComponentType</code> for some type that is not in standard {@link ClassLoader}.
+	 */
+	public void test_forComponentExpression_externalType() throws Exception {
+		prepareMyComponent();
+		// parse
+		XmlObjectInfo shell =
+				parse(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <t:MyComponent wbp:name='myComponent'/>",
+						"</Shell>");
+		XmlObjectInfo myComponent = getObjectByName("myComponent");
+		// use "isComponentType" function
+		assertComponentValidatorTrue(
+				"isComponentType(org.eclipse.swt.widgets.Control)",
+				shell,
+				myComponent);
+		assertComponentValidatorTrue("isComponentType('test.MyComponent')", shell, myComponent);
+	}
 
-  /**
-   * Test for {@link ContainerObjectValidators#forComponentExpression(String)}.
-   * <p>
-   * Call method of "container" that is not in standard {@link ClassLoader}.
-   */
-  public void test_forComponentExpression_externalType2() throws Exception {
-    XmlObjectInfo shell =
-        parse(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Button wbp:name='button'/>",
-            "</Shell>");
-    XmlObjectInfo button = getObjectByName("button");
-    // Call "container" method.
-    // We do this 100 times to force optimizer activator.
-    ContainerObjectValidator validator =
-        ContainerObjectValidators.forComponentExpression("container.hasLayout()");
-    for (int i = 0; i < 100; i++) {
-      assertTrue(validator.validate(shell, button));
-    }
-  }
+	/**
+	 * Test for {@link ContainerObjectValidators#forComponentExpression(String)}.
+	 * <p>
+	 * Call method of "container" that is not in standard {@link ClassLoader}.
+	 */
+	public void test_forComponentExpression_externalType2() throws Exception {
+		XmlObjectInfo shell =
+				parse(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Button wbp:name='button'/>",
+						"</Shell>");
+		XmlObjectInfo button = getObjectByName("button");
+		// Call "container" method.
+		// We do this 100 times to force optimizer activator.
+		ContainerObjectValidator validator =
+				ContainerObjectValidators.forComponentExpression("container.hasLayout()");
+		for (int i = 0; i < 100; i++) {
+			assertTrue(validator.validate(shell, button));
+		}
+	}
 
-  private static void assertComponentValidatorFalse(String expression,
-      Object container,
-      Object component) {
-    assertComponentValidator(false, expression, container, component);
-  }
+	private static void assertComponentValidatorFalse(String expression,
+			Object container,
+			Object component) {
+		assertComponentValidator(false, expression, container, component);
+	}
 
-  private static void assertComponentValidatorTrue(String expression,
-      Object container,
-      Object component) {
-    assertComponentValidator(true, expression, container, component);
-  }
+	private static void assertComponentValidatorTrue(String expression,
+			Object container,
+			Object component) {
+		assertComponentValidator(true, expression, container, component);
+	}
 
-  private static void assertComponentValidator(boolean expected,
-      String expression,
-      Object container,
-      Object component) {
-    ContainerObjectValidator validator =
-        ContainerObjectValidators.forComponentExpression(expression);
-    assertEquals(expression, validator.toString());
-    assertEquals(expected, validator.validate(container, component));
-  }
+	private static void assertComponentValidator(boolean expected,
+			String expression,
+			Object container,
+			Object component) {
+		ContainerObjectValidator validator =
+				ContainerObjectValidators.forComponentExpression(expression);
+		assertEquals(expression, validator.toString());
+		assertEquals(expected, validator.validate(container, component));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // forReferenceExpression
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link ContainerObjectValidators#forReferenceExpression(String)}.
-   */
-  public void test_forReferenceExpression() throws Exception {
-    XmlObjectInfo shell =
-        parse(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Button wbp:name='button'/>",
-            "  <Text wbp:name='text'/>",
-            "</Shell>");
-    XmlObjectInfo buttonModel = getObjectByName("button");
-    XmlObjectInfo textModel = getObjectByName("text");
-    // "container" is not not model
-    assertReferenceValidatorFalse("true", null, buttonModel);
-    // "reference" is not not model
-    assertReferenceValidatorFalse("true", shell, null);
-    // "false" literal
-    assertReferenceValidatorFalse("false", shell, buttonModel);
-    // "true" literal
-    assertReferenceValidatorTrue("true", shell, buttonModel);
-    // use "isReferenceType" function
-    assertReferenceValidatorTrue(
-        "isReferenceType(org.eclipse.swt.widgets.Control)",
-        shell,
-        buttonModel);
-    assertReferenceValidatorTrue(
-        "isReferenceType(org.eclipse.swt.widgets.Control)",
-        shell,
-        textModel);
-    assertReferenceValidatorTrue(
-        "isReferenceType(org.eclipse.swt.widgets.Button)",
-        shell,
-        buttonModel);
-    assertReferenceValidatorFalse(
-        "isReferenceType(org.eclipse.swt.widgets.Button)",
-        shell,
-        textModel);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// forReferenceExpression
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link ContainerObjectValidators#forReferenceExpression(String)}.
+	 */
+	public void test_forReferenceExpression() throws Exception {
+		XmlObjectInfo shell =
+				parse(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Button wbp:name='button'/>",
+						"  <Text wbp:name='text'/>",
+						"</Shell>");
+		XmlObjectInfo buttonModel = getObjectByName("button");
+		XmlObjectInfo textModel = getObjectByName("text");
+		// "container" is not not model
+		assertReferenceValidatorFalse("true", null, buttonModel);
+		// "reference" is not not model
+		assertReferenceValidatorFalse("true", shell, null);
+		// "false" literal
+		assertReferenceValidatorFalse("false", shell, buttonModel);
+		// "true" literal
+		assertReferenceValidatorTrue("true", shell, buttonModel);
+		// use "isReferenceType" function
+		assertReferenceValidatorTrue(
+				"isReferenceType(org.eclipse.swt.widgets.Control)",
+				shell,
+				buttonModel);
+		assertReferenceValidatorTrue(
+				"isReferenceType(org.eclipse.swt.widgets.Control)",
+				shell,
+				textModel);
+		assertReferenceValidatorTrue(
+				"isReferenceType(org.eclipse.swt.widgets.Button)",
+				shell,
+				buttonModel);
+		assertReferenceValidatorFalse(
+				"isReferenceType(org.eclipse.swt.widgets.Button)",
+				shell,
+				textModel);
+	}
 
-  private static void assertReferenceValidatorFalse(String expression,
-      Object container,
-      Object reference) {
-    assertReferenceValidator(false, expression, container, reference);
-  }
+	private static void assertReferenceValidatorFalse(String expression,
+			Object container,
+			Object reference) {
+		assertReferenceValidator(false, expression, container, reference);
+	}
 
-  private static void assertReferenceValidatorTrue(String expression,
-      Object container,
-      Object reference) {
-    assertReferenceValidator(true, expression, container, reference);
-  }
+	private static void assertReferenceValidatorTrue(String expression,
+			Object container,
+			Object reference) {
+		assertReferenceValidator(true, expression, container, reference);
+	}
 
-  private static void assertReferenceValidator(boolean expected,
-      String expression,
-      Object container,
-      Object reference) {
-    ContainerObjectValidator validator =
-        ContainerObjectValidators.forReferenceExpression(expression);
-    assertEquals(expression, validator.toString());
-    assertEquals(expected, validator.validate(container, reference));
-  }
+	private static void assertReferenceValidator(boolean expected,
+			String expression,
+			Object container,
+			Object reference) {
+		ContainerObjectValidator validator =
+				ContainerObjectValidators.forReferenceExpression(expression);
+		assertEquals(expression, validator.toString());
+		assertEquals(expected, validator.validate(container, reference));
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/generic/CopyPropertyTopTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/generic/CopyPropertyTopTest.java
index 141d7c102..865b2f9a6 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/generic/CopyPropertyTopTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/generic/CopyPropertyTopTest.java
@@ -14,62 +14,62 @@
  * @author scheglov_ke
  */
 public class CopyPropertyTopTest extends AbstractCoreTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_copyExisting() throws Exception {
-    prepareMyComponent(ArrayUtils.EMPTY_STRING_ARRAY, new String[]{
-        "  <parameters>",
-        "    <parameter name='x-copyPropertyTop from=enabled to=MyEnabled category=preferred'/>",
-        "  </parameters>"});
-    parse(
-        "// filler filler filler filler filler filler",
-        "<Shell>",
-        "  <t:MyComponent wbp:name='component'/>",
-        "</Shell>");
-    refresh();
-    CompositeInfo component = getObjectByName("component");
-    // test property
-    Property property = component.getPropertyByTitle("MyEnabled");
-    assertNotNull(property);
-    assertSame(PropertyCategory.PREFERRED, property.getCategory());
-    assertEquals(Boolean.TRUE, property.getValue());
-    // next time same Property should be returned
-    assertSame(property, component.getPropertyByTitle("MyEnabled"));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_copyExisting() throws Exception {
+		prepareMyComponent(ArrayUtils.EMPTY_STRING_ARRAY, new String[]{
+				"  <parameters>",
+				"    <parameter name='x-copyPropertyTop from=enabled to=MyEnabled category=preferred'/>",
+		"  </parameters>"});
+		parse(
+				"// filler filler filler filler filler filler",
+				"<Shell>",
+				"  <t:MyComponent wbp:name='component'/>",
+				"</Shell>");
+		refresh();
+		CompositeInfo component = getObjectByName("component");
+		// test property
+		Property property = component.getPropertyByTitle("MyEnabled");
+		assertNotNull(property);
+		assertSame(PropertyCategory.PREFERRED, property.getCategory());
+		assertEquals(Boolean.TRUE, property.getValue());
+		// next time same Property should be returned
+		assertSame(property, component.getPropertyByTitle("MyEnabled"));
+	}
 
-  public void test_ignoreNoParameters() throws Exception {
-    prepareMyComponent(ArrayUtils.EMPTY_STRING_ARRAY, new String[]{
-        "  <parameters>",
-        "    <parameter name='x-copyPropertyTop '/>",
-        "  </parameters>"});
-    CompositeInfo component = parse("<t:MyComponent/>");
-    refresh();
-    // test property
-    Property property = component.getPropertyByTitle("no-matter");
-    assertNull(property);
-  }
+	public void test_ignoreNoParameters() throws Exception {
+		prepareMyComponent(ArrayUtils.EMPTY_STRING_ARRAY, new String[]{
+				"  <parameters>",
+				"    <parameter name='x-copyPropertyTop '/>",
+		"  </parameters>"});
+		CompositeInfo component = parse("<t:MyComponent/>");
+		refresh();
+		// test property
+		Property property = component.getPropertyByTitle("no-matter");
+		assertNull(property);
+	}
 
-  public void test_ignoreNotExisting() throws Exception {
-    prepareMyComponent(ArrayUtils.EMPTY_STRING_ARRAY, new String[]{
-        "  <parameters>",
-        "    <parameter name='x-copyPropertyTop from=noSuchProperty to=MyEnabled'/>",
-        "  </parameters>"});
-    CompositeInfo component = parse("<t:MyComponent/>");
-    refresh();
-    // test property
-    Property property = component.getPropertyByTitle("MyEnabled");
-    assertNull(property);
-  }
+	public void test_ignoreNotExisting() throws Exception {
+		prepareMyComponent(ArrayUtils.EMPTY_STRING_ARRAY, new String[]{
+				"  <parameters>",
+				"    <parameter name='x-copyPropertyTop from=noSuchProperty to=MyEnabled'/>",
+		"  </parameters>"});
+		CompositeInfo component = parse("<t:MyComponent/>");
+		refresh();
+		// test property
+		Property property = component.getPropertyByTitle("MyEnabled");
+		assertNull(property);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/generic/FlipBooleanPropertyGefTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/generic/FlipBooleanPropertyGefTest.java
index 187522005..641904d05 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/generic/FlipBooleanPropertyGefTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/generic/FlipBooleanPropertyGefTest.java
@@ -19,97 +19,97 @@
  * @author scheglov_ke
  */
 public class FlipBooleanPropertyGefTest extends XwtGefTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_doFlip() throws Exception {
-    prepareMyPanel(
-        "  <parameters>",
-        "    <parameter name='double-click.flipBooleanProperty'>myExpanded</parameter>",
-        "  </parameters>");
-    waitForAutoBuild();
-    // open editor
-    XmlObjectInfo panel = openMyPanel();
-    // flip: false -> true
-    canvas.doubleClick(panel);
-    assertXML("<t:MyComponent myExpanded='true'/>");
-    // flip: true -> false
-    canvas.doubleClick(panel);
-    assertXML("<t:MyComponent/>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_doFlip() throws Exception {
+		prepareMyPanel(
+				"  <parameters>",
+				"    <parameter name='double-click.flipBooleanProperty'>myExpanded</parameter>",
+				"  </parameters>");
+		waitForAutoBuild();
+		// open editor
+		XmlObjectInfo panel = openMyPanel();
+		// flip: false -> true
+		canvas.doubleClick(panel);
+		assertXML("<t:MyComponent myExpanded='true'/>");
+		// flip: true -> false
+		canvas.doubleClick(panel);
+		assertXML("<t:MyComponent/>");
+	}
 
-  /**
-   * If no specified property, then ignore.
-   */
-  public void test_noSuchProperty() throws Exception {
-    prepareMyPanel(
-        "  <parameters>",
-        "    <parameter name='double-click.flipBooleanProperty'>noSuchProperty</parameter>",
-        "  </parameters>");
-    // open editor
-    XmlObjectInfo panel = openMyPanel();
-    // do double click, but property to flip does not exist, so ignore
-    canvas.doubleClick(panel);
-    assertXML("<t:MyComponent/>");
-  }
+	/**
+	 * If no specified property, then ignore.
+	 */
+	public void test_noSuchProperty() throws Exception {
+		prepareMyPanel(
+				"  <parameters>",
+				"    <parameter name='double-click.flipBooleanProperty'>noSuchProperty</parameter>",
+				"  </parameters>");
+		// open editor
+		XmlObjectInfo panel = openMyPanel();
+		// do double click, but property to flip does not exist, so ignore
+		canvas.doubleClick(panel);
+		assertXML("<t:MyComponent/>");
+	}
 
-  /**
-   * If specified property is not boolean, then ignore.
-   */
-  public void test_notBooleanProperty() throws Exception {
-    prepareMyPanel(
-        "  <parameters>",
-        "    <parameter name='double-click.flipBooleanProperty'>background</parameter>",
-        "  </parameters>");
-    // open editor
-    XmlObjectInfo panel = openMyPanel();
-    // do double click, but property to flip does not exist, so ignore
-    canvas.doubleClick(panel);
-    assertXML("<t:MyComponent/>");
-  }
+	/**
+	 * If specified property is not boolean, then ignore.
+	 */
+	public void test_notBooleanProperty() throws Exception {
+		prepareMyPanel(
+				"  <parameters>",
+				"    <parameter name='double-click.flipBooleanProperty'>background</parameter>",
+				"  </parameters>");
+		// open editor
+		XmlObjectInfo panel = openMyPanel();
+		// do double click, but property to flip does not exist, so ignore
+		canvas.doubleClick(panel);
+		assertXML("<t:MyComponent/>");
+	}
 
-  public void test_noFlipParameter() throws Exception {
-    prepareMyPanel(
-        "  <parameters>",
-        "    <parameter name='noFlipParameter'>nothing</parameter>",
-        "  </parameters>");
-    // open editor
-    XmlObjectInfo panel = openMyPanel();
-    // do double click, but property to flip does not exist, so ignore
-    canvas.doubleClick(panel);
-    assertXML("<t:MyComponent/>");
-  }
+	public void test_noFlipParameter() throws Exception {
+		prepareMyPanel(
+				"  <parameters>",
+				"    <parameter name='noFlipParameter'>nothing</parameter>",
+				"  </parameters>");
+		// open editor
+		XmlObjectInfo panel = openMyPanel();
+		// do double click, but property to flip does not exist, so ignore
+		canvas.doubleClick(panel);
+		assertXML("<t:MyComponent/>");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final String[] m_expandedLines = new String[]{
-      "  private boolean m_expanded;",
-      "  public boolean getMyExpanded() {",
-      "    return m_expanded;",
-      "  }",
-      "  public void setMyExpanded(boolean expanded) {",
-      "    m_expanded = expanded;",
-      "  }"};
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final String[] m_expandedLines = new String[]{
+			"  private boolean m_expanded;",
+			"  public boolean getMyExpanded() {",
+			"    return m_expanded;",
+			"  }",
+			"  public void setMyExpanded(boolean expanded) {",
+			"    m_expanded = expanded;",
+	"  }"};
 
-  private void prepareMyPanel(String... descriptionLines) throws Exception {
-    prepareMyComponent(m_expandedLines, descriptionLines);
-  }
+	private void prepareMyPanel(String... descriptionLines) throws Exception {
+		prepareMyComponent(m_expandedLines, descriptionLines);
+	}
 
-  private XmlObjectInfo openMyPanel() throws Exception {
-    return openEditor("<t:MyComponent/>");
-  }
+	private XmlObjectInfo openMyPanel() throws Exception {
+		return openEditor("<t:MyComponent/>");
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/generic/FlowContainerAbstractGefTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/generic/FlowContainerAbstractGefTest.java
index b15499ae2..21b73ccd8 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/generic/FlowContainerAbstractGefTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/generic/FlowContainerAbstractGefTest.java
@@ -21,383 +21,383 @@
  * @author scheglov_ke
  */
 public abstract class FlowContainerAbstractGefTest extends XwtGefTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Canvas
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_canvas_CREATE_empty() throws Exception {
-    prepareFlowPanel();
-    openEditor(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <t:FlowPanel wbp:name='panel'/>",
-        "</Shell>");
-    XmlObjectInfo panel = getObjectByName("panel");
-    // begin creating Button
-    XmlObjectInfo newButton = loadButton();
-    // move on "panel": feedback appears, command not null
-    canvas.moveTo(panel, 100, 100);
-    canvas.assertEmptyFlowContainerFeedback(panel, true);
-    canvas.assertCommandNotNull();
-    // click, so finish creation
-    canvas.click();
-    canvas.assertNoFeedbacks();
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <t:FlowPanel wbp:name='panel'>",
-        "    <Button/>",
-        "  </t:FlowPanel>",
-        "</Shell>");
-    canvas.assertPrimarySelected(newButton);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Canvas
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_canvas_CREATE_empty() throws Exception {
+		prepareFlowPanel();
+		openEditor(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <t:FlowPanel wbp:name='panel'/>",
+				"</Shell>");
+		XmlObjectInfo panel = getObjectByName("panel");
+		// begin creating Button
+		XmlObjectInfo newButton = loadButton();
+		// move on "panel": feedback appears, command not null
+		canvas.moveTo(panel, 100, 100);
+		canvas.assertEmptyFlowContainerFeedback(panel, true);
+		canvas.assertCommandNotNull();
+		// click, so finish creation
+		canvas.click();
+		canvas.assertNoFeedbacks();
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <t:FlowPanel wbp:name='panel'>",
+				"    <Button/>",
+				"  </t:FlowPanel>",
+				"</Shell>");
+		canvas.assertPrimarySelected(newButton);
+	}
 
-  public void test_canvas_CREATE() throws Exception {
-    prepareFlowPanel();
-    openEditor(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <t:FlowPanel wbp:name='panel'>",
-        "    <Button wbp:name='existingButton' text='existing'/>",
-        "  </t:FlowPanel>",
-        "</Shell>");
-    XmlObjectInfo existingButton = getObjectByName("existingButton");
-    // begin creating Button
-    XmlObjectInfo newButton = loadButton();
-    // move on "panel": feedback appears, command not null
-    canvas.moveTo(existingButton, 0, 0);
-    canvas.assertFeedbacks(canvas.getLinePredicate(existingButton, IPositionConstants.LEFT));
-    canvas.assertCommandNotNull();
-    // click, so finish creation
-    canvas.click();
-    canvas.assertNoFeedbacks();
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <t:FlowPanel wbp:name='panel'>",
-        "    <Button/>",
-        "    <Button wbp:name='existingButton' text='existing'/>",
-        "  </t:FlowPanel>",
-        "</Shell>");
-    canvas.assertPrimarySelected(newButton);
-  }
+	public void test_canvas_CREATE() throws Exception {
+		prepareFlowPanel();
+		openEditor(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <t:FlowPanel wbp:name='panel'>",
+				"    <Button wbp:name='existingButton' text='existing'/>",
+				"  </t:FlowPanel>",
+				"</Shell>");
+		XmlObjectInfo existingButton = getObjectByName("existingButton");
+		// begin creating Button
+		XmlObjectInfo newButton = loadButton();
+		// move on "panel": feedback appears, command not null
+		canvas.moveTo(existingButton, 0, 0);
+		canvas.assertFeedbacks(canvas.getLinePredicate(existingButton, IPositionConstants.LEFT));
+		canvas.assertCommandNotNull();
+		// click, so finish creation
+		canvas.click();
+		canvas.assertNoFeedbacks();
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <t:FlowPanel wbp:name='panel'>",
+				"    <Button/>",
+				"    <Button wbp:name='existingButton' text='existing'/>",
+				"  </t:FlowPanel>",
+				"</Shell>");
+		canvas.assertPrimarySelected(newButton);
+	}
 
-  public void test_canvas_PASTE() throws Exception {
-    prepareFlowPanel();
-    openEditor(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <t:FlowPanel wbp:name='panel'>",
-        "    <Button wbp:name='existingButton' text='existing'/>",
-        "  </t:FlowPanel>",
-        "  <Button wbp:name='rootButton' text='root'/>",
-        "</Shell>");
-    XmlObjectInfo existingButton = getObjectByName("existingButton");
-    XmlObjectInfo rootButton = getObjectByName("rootButton");
-    // copy "rootButton"
-    doCopyPaste(rootButton);
-    // move on "panel": feedback appears, command not null
-    canvas.moveTo(existingButton, 0, 0);
-    canvas.assertFeedbacks(canvas.getLinePredicate(existingButton, IPositionConstants.LEFT));
-    canvas.assertCommandNotNull();
-    // click, so finish creation
-    canvas.click();
-    canvas.assertNoFeedbacks();
-    assertXML(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <t:FlowPanel wbp:name='panel'>",
-        "    <Button text='root'/>",
-        "    <Button wbp:name='existingButton' text='existing'/>",
-        "  </t:FlowPanel>",
-        "  <Button wbp:name='rootButton' text='root'/>",
-        "</Shell>");
-    // EditPart for "newButton" exists and selected
-    {
-      XmlObjectInfo panel = getObjectByName("panel");
-      XmlObjectInfo newButton = GenericsUtils.getPrevOrNull(panel.getChildrenXML(), existingButton);
-      canvas.assertPrimarySelected(newButton);
-    }
-  }
+	public void test_canvas_PASTE() throws Exception {
+		prepareFlowPanel();
+		openEditor(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <t:FlowPanel wbp:name='panel'>",
+				"    <Button wbp:name='existingButton' text='existing'/>",
+				"  </t:FlowPanel>",
+				"  <Button wbp:name='rootButton' text='root'/>",
+				"</Shell>");
+		XmlObjectInfo existingButton = getObjectByName("existingButton");
+		XmlObjectInfo rootButton = getObjectByName("rootButton");
+		// copy "rootButton"
+		doCopyPaste(rootButton);
+		// move on "panel": feedback appears, command not null
+		canvas.moveTo(existingButton, 0, 0);
+		canvas.assertFeedbacks(canvas.getLinePredicate(existingButton, IPositionConstants.LEFT));
+		canvas.assertCommandNotNull();
+		// click, so finish creation
+		canvas.click();
+		canvas.assertNoFeedbacks();
+		assertXML(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <t:FlowPanel wbp:name='panel'>",
+				"    <Button text='root'/>",
+				"    <Button wbp:name='existingButton' text='existing'/>",
+				"  </t:FlowPanel>",
+				"  <Button wbp:name='rootButton' text='root'/>",
+				"</Shell>");
+		// EditPart for "newButton" exists and selected
+		{
+			XmlObjectInfo panel = getObjectByName("panel");
+			XmlObjectInfo newButton = GenericsUtils.getPrevOrNull(panel.getChildrenXML(), existingButton);
+			canvas.assertPrimarySelected(newButton);
+		}
+	}
 
-  public void test_canvas_MOVE() throws Exception {
-    prepareFlowPanel();
-    openEditor(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <t:FlowPanel wbp:name='panel'>",
-        "    <Button wbp:name='buttonA' text='A'/>",
-        "    <Button wbp:name='buttonB' text='B'/>",
-        "  </t:FlowPanel>",
-        "</Shell>");
-    XmlObjectInfo buttonA = getObjectByName("buttonA");
-    XmlObjectInfo buttonB = getObjectByName("buttonB");
-    // drag "buttonB"
-    canvas.beginDrag(buttonB, 10, 10).dragTo(buttonA);
-    canvas.assertFeedbacks(canvas.getLinePredicate(buttonA, IPositionConstants.LEFT));
-    canvas.assertCommandNotNull();
-    // done drag, so finish MOVE
-    canvas.endDrag();
-    canvas.assertNoFeedbacks();
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <t:FlowPanel wbp:name='panel'>",
-        "    <Button wbp:name='buttonB' text='B'/>",
-        "    <Button wbp:name='buttonA' text='A'/>",
-        "  </t:FlowPanel>",
-        "</Shell>");
-  }
+	public void test_canvas_MOVE() throws Exception {
+		prepareFlowPanel();
+		openEditor(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <t:FlowPanel wbp:name='panel'>",
+				"    <Button wbp:name='buttonA' text='A'/>",
+				"    <Button wbp:name='buttonB' text='B'/>",
+				"  </t:FlowPanel>",
+				"</Shell>");
+		XmlObjectInfo buttonA = getObjectByName("buttonA");
+		XmlObjectInfo buttonB = getObjectByName("buttonB");
+		// drag "buttonB"
+		canvas.beginDrag(buttonB, 10, 10).dragTo(buttonA);
+		canvas.assertFeedbacks(canvas.getLinePredicate(buttonA, IPositionConstants.LEFT));
+		canvas.assertCommandNotNull();
+		// done drag, so finish MOVE
+		canvas.endDrag();
+		canvas.assertNoFeedbacks();
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <t:FlowPanel wbp:name='panel'>",
+				"    <Button wbp:name='buttonB' text='B'/>",
+				"    <Button wbp:name='buttonA' text='A'/>",
+				"  </t:FlowPanel>",
+				"</Shell>");
+	}
 
-  public void test_canvas_ADD() throws Exception {
-    prepareFlowPanel();
-    openEditor(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <t:FlowPanel wbp:name='panel'>",
-        "    <Button wbp:name='existingButton' text='existing'/>",
-        "  </t:FlowPanel>",
-        "  <Button wbp:name='rootButton' text='root'/>",
-        "</Shell>");
-    XmlObjectInfo existingButton = getObjectByName("existingButton");
-    XmlObjectInfo rootButton = getObjectByName("rootButton");
-    // drag "rootButton"
-    canvas.beginDrag(rootButton).dragTo(existingButton);
-    canvas.assertFeedbacks(canvas.getLinePredicate(existingButton, IPositionConstants.LEFT));
-    canvas.assertCommandNotNull();
-    // done drag, so finish ADD
-    canvas.endDrag();
-    canvas.assertNoFeedbacks();
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <t:FlowPanel wbp:name='panel'>",
-        "    <Button wbp:name='rootButton' text='root'/>",
-        "    <Button wbp:name='existingButton' text='existing'/>",
-        "  </t:FlowPanel>",
-        "</Shell>");
-    canvas.assertPrimarySelected(rootButton);
-  }
+	public void test_canvas_ADD() throws Exception {
+		prepareFlowPanel();
+		openEditor(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <t:FlowPanel wbp:name='panel'>",
+				"    <Button wbp:name='existingButton' text='existing'/>",
+				"  </t:FlowPanel>",
+				"  <Button wbp:name='rootButton' text='root'/>",
+				"</Shell>");
+		XmlObjectInfo existingButton = getObjectByName("existingButton");
+		XmlObjectInfo rootButton = getObjectByName("rootButton");
+		// drag "rootButton"
+		canvas.beginDrag(rootButton).dragTo(existingButton);
+		canvas.assertFeedbacks(canvas.getLinePredicate(existingButton, IPositionConstants.LEFT));
+		canvas.assertCommandNotNull();
+		// done drag, so finish ADD
+		canvas.endDrag();
+		canvas.assertNoFeedbacks();
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <t:FlowPanel wbp:name='panel'>",
+				"    <Button wbp:name='rootButton' text='root'/>",
+				"    <Button wbp:name='existingButton' text='existing'/>",
+				"  </t:FlowPanel>",
+				"</Shell>");
+		canvas.assertPrimarySelected(rootButton);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tree
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_tree_CREATE() throws Exception {
-    prepareFlowPanel();
-    openEditor(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <t:FlowPanel wbp:name='panel'>",
-        "    <Button wbp:name='existingButton' text='existing'/>",
-        "  </t:FlowPanel>",
-        "</Shell>");
-    XmlObjectInfo existingButton = getObjectByName("existingButton");
-    // begin creating Button
-    XmlObjectInfo newButton = loadButton();
-    // move before "existingButton": feedback appears, command not null
-    tree.moveBefore(existingButton);
-    tree.assertFeedback_before(existingButton);
-    tree.assertCommandNotNull();
-    // click, so finish creation
-    tree.click();
-    tree.assertFeedback_empty();
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <t:FlowPanel wbp:name='panel'>",
-        "    <Button/>",
-        "    <Button wbp:name='existingButton' text='existing'/>",
-        "  </t:FlowPanel>",
-        "</Shell>");
-    tree.assertPrimarySelected(newButton);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tree
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_tree_CREATE() throws Exception {
+		prepareFlowPanel();
+		openEditor(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <t:FlowPanel wbp:name='panel'>",
+				"    <Button wbp:name='existingButton' text='existing'/>",
+				"  </t:FlowPanel>",
+				"</Shell>");
+		XmlObjectInfo existingButton = getObjectByName("existingButton");
+		// begin creating Button
+		XmlObjectInfo newButton = loadButton();
+		// move before "existingButton": feedback appears, command not null
+		tree.moveBefore(existingButton);
+		tree.assertFeedback_before(existingButton);
+		tree.assertCommandNotNull();
+		// click, so finish creation
+		tree.click();
+		tree.assertFeedback_empty();
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <t:FlowPanel wbp:name='panel'>",
+				"    <Button/>",
+				"    <Button wbp:name='existingButton' text='existing'/>",
+				"  </t:FlowPanel>",
+				"</Shell>");
+		tree.assertPrimarySelected(newButton);
+	}
 
-  public void test_tree_PASTE() throws Exception {
-    prepareFlowPanel();
-    openEditor(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <t:FlowPanel wbp:name='panel'>",
-        "    <Button wbp:name='existingButton' text='existing'/>",
-        "  </t:FlowPanel>",
-        "  <Button wbp:name='rootButton' text='root'/>",
-        "</Shell>");
-    XmlObjectInfo panel = getObjectByName("panel");
-    XmlObjectInfo existingButton = getObjectByName("existingButton");
-    XmlObjectInfo rootButton = getObjectByName("rootButton");
-    // copy "rootButton"
-    doCopyPaste(rootButton);
-    // move before "existingButton": feedback appears, command not null
-    tree.moveOn(panel);
-    tree.moveBefore(existingButton);
-    tree.assertFeedback_before(existingButton);
-    tree.assertCommandNotNull();
-    // click, so finish creation
-    tree.click();
-    tree.assertFeedback_empty();
-    assertXML(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <t:FlowPanel wbp:name='panel'>",
-        "    <Button text='root'/>",
-        "    <Button wbp:name='existingButton' text='existing'/>",
-        "  </t:FlowPanel>",
-        "  <Button wbp:name='rootButton' text='root'/>",
-        "</Shell>");
-    // EditPart for "newButton" exists and selected
-    {
-      XmlObjectInfo newButton = GenericsUtils.getPrevOrNull(panel.getChildrenXML(), existingButton);
-      tree.assertPrimarySelected(newButton);
-    }
-  }
+	public void test_tree_PASTE() throws Exception {
+		prepareFlowPanel();
+		openEditor(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <t:FlowPanel wbp:name='panel'>",
+				"    <Button wbp:name='existingButton' text='existing'/>",
+				"  </t:FlowPanel>",
+				"  <Button wbp:name='rootButton' text='root'/>",
+				"</Shell>");
+		XmlObjectInfo panel = getObjectByName("panel");
+		XmlObjectInfo existingButton = getObjectByName("existingButton");
+		XmlObjectInfo rootButton = getObjectByName("rootButton");
+		// copy "rootButton"
+		doCopyPaste(rootButton);
+		// move before "existingButton": feedback appears, command not null
+		tree.moveOn(panel);
+		tree.moveBefore(existingButton);
+		tree.assertFeedback_before(existingButton);
+		tree.assertCommandNotNull();
+		// click, so finish creation
+		tree.click();
+		tree.assertFeedback_empty();
+		assertXML(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <t:FlowPanel wbp:name='panel'>",
+				"    <Button text='root'/>",
+				"    <Button wbp:name='existingButton' text='existing'/>",
+				"  </t:FlowPanel>",
+				"  <Button wbp:name='rootButton' text='root'/>",
+				"</Shell>");
+		// EditPart for "newButton" exists and selected
+		{
+			XmlObjectInfo newButton = GenericsUtils.getPrevOrNull(panel.getChildrenXML(), existingButton);
+			tree.assertPrimarySelected(newButton);
+		}
+	}
 
-  public void test_tree_MOVE() throws Exception {
-    prepareFlowPanel();
-    openEditor(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <t:FlowPanel wbp:name='panel'>",
-        "    <Button wbp:name='buttonA' text='A'/>",
-        "    <Button wbp:name='buttonB' text='B'/>",
-        "  </t:FlowPanel>",
-        "</Shell>");
-    XmlObjectInfo buttonA = getObjectByName("buttonA");
-    XmlObjectInfo buttonB = getObjectByName("buttonB");
-    // select "buttonB", so ensure that it has EditPart
-    canvas.select(buttonB);
-    // drag "buttonB"
-    tree.startDrag(buttonB);
-    tree.dragBefore(buttonA);
-    tree.assertFeedback_before(buttonA);
-    tree.assertCommandNotNull();
-    // done drag, so finish MOVE
-    tree.endDrag();
-    tree.assertFeedback_empty();
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <t:FlowPanel wbp:name='panel'>",
-        "    <Button wbp:name='buttonB' text='B'/>",
-        "    <Button wbp:name='buttonA' text='A'/>",
-        "  </t:FlowPanel>",
-        "</Shell>");
-  }
+	public void test_tree_MOVE() throws Exception {
+		prepareFlowPanel();
+		openEditor(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <t:FlowPanel wbp:name='panel'>",
+				"    <Button wbp:name='buttonA' text='A'/>",
+				"    <Button wbp:name='buttonB' text='B'/>",
+				"  </t:FlowPanel>",
+				"</Shell>");
+		XmlObjectInfo buttonA = getObjectByName("buttonA");
+		XmlObjectInfo buttonB = getObjectByName("buttonB");
+		// select "buttonB", so ensure that it has EditPart
+		canvas.select(buttonB);
+		// drag "buttonB"
+		tree.startDrag(buttonB);
+		tree.dragBefore(buttonA);
+		tree.assertFeedback_before(buttonA);
+		tree.assertCommandNotNull();
+		// done drag, so finish MOVE
+		tree.endDrag();
+		tree.assertFeedback_empty();
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <t:FlowPanel wbp:name='panel'>",
+				"    <Button wbp:name='buttonB' text='B'/>",
+				"    <Button wbp:name='buttonA' text='A'/>",
+				"  </t:FlowPanel>",
+				"</Shell>");
+	}
 
-  public void test_tree_ADD() throws Exception {
-    prepareFlowPanel();
-    openEditor(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <t:FlowPanel wbp:name='panel'>",
-        "    <Button wbp:name='existingButton' text='existing'/>",
-        "  </t:FlowPanel>",
-        "  <Button wbp:name='rootButton' text='root'/>",
-        "</Shell>");
-    XmlObjectInfo existingButton = getObjectByName("existingButton");
-    XmlObjectInfo rootButton = getObjectByName("rootButton");
-    // drag "rootButton"
-    tree.startDrag(rootButton);
-    tree.dragBefore(existingButton);
-    tree.endDrag();
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <t:FlowPanel wbp:name='panel'>",
-        "    <Button wbp:name='rootButton' text='root'/>",
-        "    <Button wbp:name='existingButton' text='existing'/>",
-        "  </t:FlowPanel>",
-        "</Shell>");
-    tree.assertPrimarySelected(rootButton);
-  }
+	public void test_tree_ADD() throws Exception {
+		prepareFlowPanel();
+		openEditor(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <t:FlowPanel wbp:name='panel'>",
+				"    <Button wbp:name='existingButton' text='existing'/>",
+				"  </t:FlowPanel>",
+				"  <Button wbp:name='rootButton' text='root'/>",
+				"</Shell>");
+		XmlObjectInfo existingButton = getObjectByName("existingButton");
+		XmlObjectInfo rootButton = getObjectByName("rootButton");
+		// drag "rootButton"
+		tree.startDrag(rootButton);
+		tree.dragBefore(existingButton);
+		tree.endDrag();
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <t:FlowPanel wbp:name='panel'>",
+				"    <Button wbp:name='rootButton' text='root'/>",
+				"    <Button wbp:name='existingButton' text='existing'/>",
+				"  </t:FlowPanel>",
+				"</Shell>");
+		tree.assertPrimarySelected(rootButton);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Creates <code>FlowPanel</code> component with <code>MyLayout</code> layout manager. One of them
-   * should be configured to have "flow container" description.
-   */
-  protected abstract void prepareFlowPanel() throws Exception;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Creates <code>FlowPanel</code> component with <code>MyLayout</code> layout manager. One of them
+	 * should be configured to have "flow container" description.
+	 */
+	protected abstract void prepareFlowPanel() throws Exception;
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/generic/FlowContainerGefTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/generic/FlowContainerGefTest.java
index 97b9e1d9b..0fc6edad0 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/generic/FlowContainerGefTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/generic/FlowContainerGefTest.java
@@ -18,13 +18,13 @@
  * @author scheglov_ke
  */
 public class FlowContainerGefTest extends FlowContainerAbstractGefTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void prepareFlowPanel() throws Exception {
-    FlowContainerModelTest.prepareFlowPanel();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void prepareFlowPanel() throws Exception {
+		FlowContainerModelTest.prepareFlowPanel();
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/generic/FlowContainerLayoutGefTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/generic/FlowContainerLayoutGefTest.java
index 818e138c6..8dea44f97 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/generic/FlowContainerLayoutGefTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/generic/FlowContainerLayoutGefTest.java
@@ -26,51 +26,51 @@
  * @author scheglov_ke
  */
 public class FlowContainerLayoutGefTest extends FlowContainerAbstractGefTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final class MyLayout_Info extends LayoutInfo {
-    public MyLayout_Info(EditorContext context,
-        ComponentDescription description,
-        CreationSupport creationSupport) throws Exception {
-      super(context, description, creationSupport);
-    }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final class MyLayout_Info extends LayoutInfo {
+		public MyLayout_Info(EditorContext context,
+				ComponentDescription description,
+				CreationSupport creationSupport) throws Exception {
+			super(context, description, creationSupport);
+		}
 
-    public void command_CREATE(Object component, Object nextComponent) throws Exception {
-      XmlObjectUtils.add(
-          (XmlObjectInfo) component,
-          Associations.direct(),
-          getComposite(),
-          (XmlObjectInfo) nextComponent);
-    }
+		public void command_CREATE(Object component, Object nextComponent) throws Exception {
+			XmlObjectUtils.add(
+					(XmlObjectInfo) component,
+					Associations.direct(),
+					getComposite(),
+					(XmlObjectInfo) nextComponent);
+		}
 
-    public void command_MOVE(Object component, Object nextComponent) throws Exception {
-      XmlObjectUtils.move(
-          (XmlObjectInfo) component,
-          Associations.direct(),
-          getComposite(),
-          (XmlObjectInfo) nextComponent);
-    }
-  }
+		public void command_MOVE(Object component, Object nextComponent) throws Exception {
+			XmlObjectUtils.move(
+					(XmlObjectInfo) component,
+					Associations.direct(),
+					getComposite(),
+					(XmlObjectInfo) nextComponent);
+		}
+	}
 
-  @Override
-  protected void prepareFlowPanel() throws Exception {
-    FlowContainerModelTest.prepareFlowPanel_classes();
-    setFileContentSrc(
-        "test/MyLayout.wbp-component.xml",
-        getSourceDQ(
-            "<?xml version='1.0' encoding='UTF-8'?>",
-            "<component xmlns='http://www.eclipse.org/wb/WBPComponent'>",
-            "  <model class='" + MyLayout_Info.class.getName() + "'/>",
-            "  <parameters>",
-            "    <parameter name='flowContainer'>true</parameter>",
-            "    <parameter name='flowContainer.horizontal'>true</parameter>",
-            "    <parameter name='flowContainer.component'>org.eclipse.swt.widgets.Control</parameter>",
-            "    <parameter name='flowContainer.reference'>org.eclipse.swt.widgets.Control</parameter>",
-            "  </parameters>",
-            "</component>"));
-    waitForAutoBuild();
-  }
+	@Override
+	protected void prepareFlowPanel() throws Exception {
+		FlowContainerModelTest.prepareFlowPanel_classes();
+		setFileContentSrc(
+				"test/MyLayout.wbp-component.xml",
+				getSourceDQ(
+						"<?xml version='1.0' encoding='UTF-8'?>",
+						"<component xmlns='http://www.eclipse.org/wb/WBPComponent'>",
+						"  <model class='" + MyLayout_Info.class.getName() + "'/>",
+						"  <parameters>",
+						"    <parameter name='flowContainer'>true</parameter>",
+						"    <parameter name='flowContainer.horizontal'>true</parameter>",
+						"    <parameter name='flowContainer.component'>org.eclipse.swt.widgets.Control</parameter>",
+						"    <parameter name='flowContainer.reference'>org.eclipse.swt.widgets.Control</parameter>",
+						"  </parameters>",
+						"</component>"));
+		waitForAutoBuild();
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/generic/FlowContainerModelTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/generic/FlowContainerModelTest.java
index e5393c32b..ef7fc2f60 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/generic/FlowContainerModelTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/generic/FlowContainerModelTest.java
@@ -46,808 +46,808 @@
  * @author scheglov_ke
  */
 public class FlowContainerModelTest extends AbstractCoreTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // FlowContainer_Factory: horizontal
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_getConfigurations_horizontal_trueByDefault() throws Exception {
-    List<FlowContainerConfiguration> configurations =
-        getConfigurations(true, new String[][]{
-            {"flowContainer", "true"},
-            {"flowContainer.component", "java.awt.Component"},
-            {"flowContainer.reference", "java.awt.Component"},});
-    assertThat(configurations).hasSize(1);
-    assertConfiguration(configurations.get(0), "alwaysTrue", "direct");
-  }
-
-  public void test_getConfigurations_horizontal_complexExpression() throws Exception {
-    List<FlowContainerConfiguration> configurations =
-        getConfigurations(true, new String[][]{
-            {"flowContainer", "true"},
-            {"flowContainer.horizontal", "isHorizontal()"},
-            {"flowContainer.component", "java.awt.Component"},
-            {"flowContainer.reference", "java.awt.Component"},});
-    assertThat(configurations).hasSize(1);
-    assertConfiguration(configurations.get(0), "isHorizontal()", "direct");
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // FlowContainer_Factory: association
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * No special container association, so "direct" is used.
-   */
-  public void test_getConfigurations_association_implicitDirect() throws Exception {
-    List<FlowContainerConfiguration> configurations =
-        getConfigurations(true, new String[][]{
-            {"flowContainer", "true"},
-            {"flowContainer.horizontal", "true"},
-            {"flowContainer.component", "java.awt.Component"},
-            {"flowContainer.reference", "java.awt.Component"},});
-    assertThat(configurations).hasSize(1);
-    assertConfiguration(configurations.get(0), "true", "direct");
-  }
-
-  /**
-   * The "property" association.
-   */
-  public void test_getConfigurations_association_property() throws Exception {
-    List<FlowContainerConfiguration> configurations =
-        getConfigurations(true, new String[][]{
-            {"flowContainer", "true"},
-            {"flowContainer.horizontal", "true"},
-            {"flowContainer.x-association", "property myProperty"},
-            {"flowContainer.component", "java.awt.Component"},
-            {"flowContainer.reference", "java.awt.Component"},});
-    assertThat(configurations).hasSize(1);
-    assertConfiguration(configurations.get(0), "true", "property myProperty");
-  }
-
-  /**
-   * The "inter" association.
-   */
-  public void test_getConfigurations_association_inter() throws Exception {
-    List<FlowContainerConfiguration> configurations =
-        getConfigurations(true, new String[][]{
-            {"flowContainer", "true"},
-            {"flowContainer.horizontal", "true"},
-            {"flowContainer.x-association", "inter myName attrA='a a' attrB='b'"},
-            {"flowContainer.component", "java.awt.Component"},
-            {"flowContainer.reference", "java.awt.Component"},});
-    assertThat(configurations).hasSize(1);
-    assertConfiguration(configurations.get(0), "true", "inter myName {attrA=a a, attrB=b}");
-  }
-
-  public void test_getConfigurations_association_bad() throws Exception {
-    try {
-      getConfigurations(true, new String[][]{
-          {"flowContainer", "true"},
-          {"flowContainer.horizontal", "true"},
-          {"flowContainer.x-association", "bad association text"},
-          {"flowContainer.component", "java.awt.Component"},
-          {"flowContainer.reference", "java.awt.Component"},});
-      fail();
-    } catch (Throwable e) {
-      Throwable rootCause = DesignerExceptionUtils.getRootCause(e);
-      assertThat(rootCause).isExactlyInstanceOf(AssertionFailedException.class);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // FlowContainer_Factory: component
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Exception when no "component" validator.
-   */
-  public void test_getConfigurations_noComponentValidator() throws Exception {
-    try {
-      getConfigurations(true, new String[][]{
-          {"flowContainer", "true"},
-          {"flowContainer.horizontal", "true"},});
-      fail();
-    } catch (Throwable e) {
-    }
-  }
-
-  public void test_getConfigurations_explicitComponentTypes() throws Exception {
-    List<FlowContainerConfiguration> configurations =
-        getConfigurations(true, new String[][]{
-            {"flowContainer", "true"},
-            {"flowContainer.horizontal", "true"},
-            {"flowContainer.component", "javax.swing.JButton javax.swing.JTextField"},
-            {"flowContainer.reference", "java.awt.Component"},});
-    assertThat(configurations).hasSize(1);
-    assertConfiguration(
-        configurations.get(0),
-        "true",
-        "direct",
-        "javax.swing.JButton javax.swing.JTextField",
-        "java.awt.Component");
-  }
-
-  /**
-   * Use default component validator.
-   */
-  public void test_getConfigurations_defaultComponent() throws Exception {
-    List<FlowContainerConfiguration> configurations =
-        getConfigurations(true, new String[][]{
-            {"flowContainer.defaultComponent", "java.awt.Component"},
-            {"flowContainer.defaultReference", "java.awt.Component"},
-            {"flowContainer", "true"},
-            {"flowContainer.horizontal", "true"},});
-    assertThat(configurations).hasSize(1);
-    assertConfiguration(
-        configurations.get(0),
-        "true",
-        "direct",
-        "java.awt.Component",
-        "java.awt.Component");
-  }
-
-  public void test_getConfigurations_componentValidatorExpression() throws Exception {
-    List<FlowContainerConfiguration> configurations =
-        getConfigurations(true, new String[][]{
-            {"flowContainer", "true"},
-            {"flowContainer.horizontal", "true"},
-            {"flowContainer.component-validator", "isComponentType(java.awt.Component)"},
-            {"flowContainer.reference", "java.awt.Component"},});
-    assertThat(configurations).hasSize(1);
-    assertConfiguration(
-        configurations.get(0),
-        "true",
-        "direct",
-        "isComponentType(java.awt.Component)",
-        "java.awt.Component");
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // FlowContainer_Factory: reference
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * No reference expression or string. So, error.
-   */
-  public void test_getConfigurations_noReference() throws Exception {
-    try {
-      getConfigurations(true, new String[][]{
-          {"flowContainer.defaultComponent", "java.awt.Component"},
-          {"flowContainer", "true"},
-          {"flowContainer.horizontal", "true"},});
-      fail();
-    } catch (Throwable e) {
-    }
-  }
-
-  public void test_getConfigurations_explicitReferenceTypes() throws Exception {
-    List<FlowContainerConfiguration> configurations =
-        getConfigurations(true, new String[][]{
-            {"flowContainer", "true"},
-            {"flowContainer.horizontal", "true"},
-            {"flowContainer.component", "java.awt.Component"},
-            {"flowContainer.reference", "javax.swing.JButton javax.swing.JTextField"},});
-    assertThat(configurations).hasSize(1);
-    assertConfiguration(
-        configurations.get(0),
-        "true",
-        "direct",
-        "java.awt.Component",
-        "javax.swing.JButton javax.swing.JTextField");
-  }
-
-  public void test_getConfigurations_referenceValidatorExpression() throws Exception {
-    List<FlowContainerConfiguration> configurations =
-        getConfigurations(true, new String[][]{
-            {"flowContainer", "true"},
-            {"flowContainer.horizontal", "true"},
-            {"flowContainer.component", "java.awt.Component"},
-            {"flowContainer.reference-validator", "isReferenceType(java.awt.Component)"},});
-    assertThat(configurations).hasSize(1);
-    assertConfiguration(
-        configurations.get(0),
-        "true",
-        "direct",
-        "java.awt.Component",
-        "isReferenceType(java.awt.Component)");
-  }
-
-  /**
-   * When no "reference" specified, same predicate as for "component" should be used.
-   */
-  public void test_getConfigurations_referencesAsComponents() throws Exception {
-    List<FlowContainerConfiguration> configurations =
-        getConfigurations(true, new String[][]{
-            {"flowContainer", "true"},
-            {"flowContainer.horizontal", "true"},
-            {"flowContainer.component", "java.awt.Component"},});
-    assertThat(configurations).hasSize(1);
-    assertConfiguration(
-        configurations.get(0),
-        "true",
-        "direct",
-        "java.awt.Component",
-        "java.awt.Component");
-  }
-
-  /**
-   * Use default reference validator.
-   */
-  public void test_getConfigurations_defaultReference() throws Exception {
-    List<FlowContainerConfiguration> configurations =
-        getConfigurations(true, new String[][]{
-            {"flowContainer.defaultComponent", "java.awt.Component"},
-            {"flowContainer.defaultReference", "java.awt.Component"},
-            {"flowContainer", "true"},
-            {"flowContainer.horizontal", "true"},});
-    assertThat(configurations).hasSize(1);
-    assertConfiguration(
-        configurations.get(0),
-        "true",
-        "direct",
-        "java.awt.Component",
-        "java.awt.Component");
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // FlowContainer_Factory: canvas/tree parsing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Ask "forCanvas", return common configuration for both - canvas/tree.
-   */
-  public void test_getConfigurations_forCanvas_common() throws Exception {
-    List<FlowContainerConfiguration> configurations =
-        getConfigurations(true, new String[][]{
-            {"flowContainer", "true"},
-            {"flowContainer.horizontal", "true"},
-            {"flowContainer.component", "java.awt.Component"},
-            {"flowContainer.reference", "java.awt.Component"},});
-    assertThat(configurations).hasSize(1);
-    assertConfiguration(
-        configurations.get(0),
-        "true",
-        "direct",
-        "java.awt.Component",
-        "java.awt.Component");
-  }
-
-  /**
-   * Ask "forCanvas", return explicit "forCanvas".
-   */
-  public void test_getConfigurations_forCanvas_explicit() throws Exception {
-    List<FlowContainerConfiguration> configurations =
-        getConfigurations(true, new String[][]{
-            {"flowContainer.canvas", "true"},
-            {"flowContainer.canvas.horizontal", "true"},
-            {"flowContainer.canvas.component", "java.awt.Component"},
-            {"flowContainer.canvas.reference", "java.awt.Component"},});
-    assertThat(configurations).hasSize(1);
-    assertConfiguration(
-        configurations.get(0),
-        "true",
-        "direct",
-        "java.awt.Component",
-        "java.awt.Component");
-  }
-
-  /**
-   * Ask "forCanvas", but only "forTree" exist.
-   */
-  public void test_getConfigurations_forCanvas_onlyForTree() throws Exception {
-    List<FlowContainerConfiguration> configurations =
-        getConfigurations(true, new String[][]{
-            {"flowContainer.tree", "true"},
-            {"flowContainer.tree.horizontal", "true"},
-            {"flowContainer.tree.component", "java.awt.Component"},
-            {"flowContainer.tree.reference", "java.awt.Component"},});
-    assertThat(configurations).isEmpty();
-  }
-
-  /**
-   * Ask "forTree", return common configuration for both - canvas/tree.
-   */
-  public void test_getConfigurations_forTree_common() throws Exception {
-    List<FlowContainerConfiguration> configurations =
-        getConfigurations(false, new String[][]{
-            {"flowContainer", "true"},
-            {"flowContainer.horizontal", "true"},
-            {"flowContainer.component", "java.awt.Component"},
-            {"flowContainer.reference", "java.awt.Component"},});
-    assertThat(configurations).hasSize(1);
-  }
-
-  /**
-   * Ask "forTree", return explicit "forTree".
-   */
-  public void test_getConfigurations_forTree_explicit() throws Exception {
-    List<FlowContainerConfiguration> configurations =
-        getConfigurations(false, new String[][]{
-            {"flowContainer.tree", "true"},
-            {"flowContainer.tree.horizontal", "true"},
-            {"flowContainer.tree.component", "java.awt.Component"},
-            {"flowContainer.tree.reference", "java.awt.Component"},});
-    assertThat(configurations).hasSize(1);
-  }
-
-  /**
-   * Several different configurations.
-   */
-  public void test_getConfigurations_3_count() throws Exception {
-    List<FlowContainerConfiguration> configurations =
-        getConfigurations(true, new String[][]{
-            {"flowContainer", "true"},
-            {"flowContainer.horizontal", "true"},
-            {"flowContainer.component", "java.awt.Component"},
-            {"flowContainer.reference", "java.awt.Component"},
-            {"flowContainer.1", "true"},
-            {"flowContainer.1.horizontal", "false"},
-            {"flowContainer.1.component", "javax.swing.JButton"},
-            {"flowContainer.1.reference", "java.awt.Component"},
-            {"flowContainer.5", "true"},
-            {"flowContainer.5.horizontal", "true"},
-            {"flowContainer.5.component", "javax.swing.JTextField"},
-            {"flowContainer.5.reference", "javax.swing.JTextField"},});
-    assertThat(configurations).hasSize(3);
-    assertConfiguration(
-        configurations.get(0),
-        "true",
-        "direct",
-        "java.awt.Component",
-        "java.awt.Component");
-    assertConfiguration(
-        configurations.get(1),
-        "false",
-        "direct",
-        "javax.swing.JButton",
-        "java.awt.Component");
-    assertConfiguration(
-        configurations.get(2),
-        "true",
-        "direct",
-        "javax.swing.JTextField",
-        "javax.swing.JTextField");
-  }
-
-  /**
-   * Ignore if <code>flowContainer</code> value is not <code>true</code>.
-   */
-  public void test_getConfigurations_ignoreFalse() throws Exception {
-    List<FlowContainerConfiguration> configurations =
-        getConfigurations(true, new String[][]{
-            {"flowContainer", "false"},
-            {"flowContainer.horizontal", "true"},
-            {"flowContainer.component", "java.awt.Component"},
-            {"flowContainer.reference", "java.awt.Component"},});
-    assertThat(configurations).hasSize(0);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // FlowContainer_Factory: assertions
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static void assertConfiguration(FlowContainerConfiguration configuration,
-      String horizontal,
-      String association) throws Exception {
-    assertConfiguration(configuration, horizontal, association, null, null);
-  }
-
-  private static void assertConfiguration(FlowContainerConfiguration configuration,
-      String horizontal,
-      String association,
-      String expectedComponentValidator,
-      String expectedReferenceValidator) throws Exception {
-    assertEquals(horizontal, getHorizontalPredicateString(configuration));
-    assertEquals(association, getAssociationString(configuration));
-    if (expectedComponentValidator != null) {
-      assertEquals(
-          expectedComponentValidator,
-          getValidatorString(configuration.getComponentValidator()));
-    }
-    if (expectedReferenceValidator != null) {
-      assertEquals(
-          expectedReferenceValidator,
-          getValidatorString(configuration.getReferenceValidator()));
-    }
-  }
-
-  private static String getValidatorString(Object validator) {
-    return validator.toString();
-  }
-
-  private static String getHorizontalPredicateString(FlowContainerConfiguration configuration) {
-    Predicate<Object> predicate = configuration.getHorizontalPredicate();
-    if (predicate == Predicates.alwaysTrue()) {
-      return "alwaysTrue";
-    }
-    return predicate.toString();
-  }
-
-  private static String getAssociationString(FlowContainerConfiguration configuration)
-      throws Exception {
-    return configuration.getAssociation().toString();
-  }
-
-  private List<FlowContainerConfiguration> getConfigurations(boolean forCanvas,
-      String[][] parameters) throws Exception {
-    String[] parameterLines = new String[parameters.length];
-    for (int i = 0; i < parameters.length; i++) {
-      String[] parameterPair = parameters[i];
-      assertEquals(2, parameterPair.length);
-      parameterLines[i] =
-          MessageFormat.format(
-              "    <parameter name=''{0}''>{1}</parameter>",
-              parameterPair[0],
-              parameterPair[1]);
-    }
-    // prepare description
-    prepareMyComponent();
-    setFileContentSrc(
-        "test/MyComponent.wbp-component.xml",
-        getSource3(new String[]{
-            "<?xml version='1.0' encoding='UTF-8'?>",
-            "<component xmlns='http://www.eclipse.org/wb/WBPComponent'>",
-            "  <parameters>"}, parameterLines, new String[]{"  </parameters>", "</component>"}));
-    waitForAutoBuild();
-    // parse
-    XmlObjectInfo panel = parse("<t:MyComponent/>");
-    // get configurations
-    return new FlowContainerFactory(panel, forCanvas).getConfigurations();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Duck typing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static class MyFlowContainer extends XmlObjectInfo {
-    public MyFlowContainer(EditorContext context,
-        ComponentDescription description,
-        CreationSupport creationSupport) throws Exception {
-      super(context, description, creationSupport);
-    }
-
-    public void command_CREATE(Object component, Object nextComponent) {
-    }
-
-    public void command_CREATE_after(Object component, Object nextComponent) {
-    }
-
-    public void command_MOVE(Object component, Object nextComponent) {
-    }
-
-    public void command_MOVE_after(Object component, Object nextComponent) {
-    }
-
-    public void command_APPEND_after(Object component, Object nextComponent) {
-    }
-  }
-  public static class MyFlowContainerForAdd extends XmlObjectInfo {
-    public MyFlowContainerForAdd(EditorContext context,
-        ComponentDescription description,
-        CreationSupport creationSupport) throws Exception {
-      super(context, description, creationSupport);
-    }
-
-    public void command_MOVE_after(Object component, Object nextComponent) {
-    }
-
-    public void command_ADD_after(Object component, Object nextComponent) {
-    }
-
-    public void command_APPEND_after(Object component, Object nextComponent) {
-    }
-  }
-  public static class MyFlowContainer_useMostSpecific extends XmlObjectInfo {
-    public MyFlowContainer_useMostSpecific(EditorContext context,
-        ComponentDescription description,
-        CreationSupport creationSupport) throws Exception {
-      super(context, description, creationSupport);
-    }
-
-    @SuppressWarnings("unused")
-    public void command_CREATE(Object component, Object nextComponent) {
-    }
-
-    public void command_CREATE(XmlObjectInfo component, Object nextComponent) {
-    }
-  }
-
-  /**
-   * Create/Move operations of {@link FlowContainerConfigurable} should try to find corresponding
-   * CREATE/MOVE methods in container {@link JavaInfo} and use them instead of generic
-   * implementation.
-   */
-  public void test_duckTyping() throws Exception {
-    final XmlObjectInfo component = mock(XmlObjectInfo.class);
-    final XmlObjectInfo nextComponent = mock(XmlObjectInfo.class);
-    final MyFlowContainer container = mock(MyFlowContainer.class);
-    final InOrder inOrder = inOrder(component, nextComponent, container);
-    final FlowContainer flowContainer =
-        new FlowContainerConfigurable(container,
-            new FlowContainerConfiguration(Predicates.alwaysTrue(),
-                Predicates.alwaysFalse(),
-                Associations.direct(),
-                ContainerObjectValidators.alwaysTrue(),
-                ContainerObjectValidators.alwaysTrue()));
-    // CREATE
-    flowContainer.command_CREATE(component, nextComponent);
-    //
-    inOrder.verify(container).command_CREATE(component, nextComponent);
-    inOrder.verify(container).command_CREATE_after(component, nextComponent);
-    inOrder.verify(container).command_APPEND_after(component, nextComponent);
-    inOrder.verifyNoMoreInteractions();
-    // MOVE
-    clearInvocations(container);
-    //
-    flowContainer.command_MOVE(component, nextComponent);
-    //
-    inOrder.verify(container).command_MOVE(component, nextComponent);
-    inOrder.verify(container).command_MOVE_after(component, nextComponent);
-    inOrder.verifyNoMoreInteractions();
-  }
-
-  /**
-   * After ADD operation method "command_ADD_after" should be called.
-   */
-  public void test_duckTyping_ADD() throws Exception {
-    final XmlObjectInfo component = mock(XmlObjectInfo.class);
-    final XmlObjectInfo oldContainer = mock(XmlObjectInfo.class);
-    final XmlObjectInfo nextComponent = mock(XmlObjectInfo.class);
-    final MyFlowContainerForAdd container = mock(MyFlowContainerForAdd.class);
-    final InOrder inOrder = inOrder(component, oldContainer, nextComponent, container);
-    final FlowContainer flowContainer =
-        new FlowContainerConfigurable(container,
-            new FlowContainerConfiguration(Predicates.alwaysTrue(),
-                Predicates.alwaysFalse(),
-                Associations.direct(),
-                ContainerObjectValidators.alwaysTrue(),
-                ContainerObjectValidators.alwaysTrue()));
-    // MOVE (as ADD)
-    ReflectionUtils.setField(component, "m_parent", oldContainer);
-    System.setProperty("flowContainer.simulateMove", "true");
-    try {
-      flowContainer.command_MOVE(component, nextComponent);
-    } finally {
-      System.clearProperty("flowContainer.simulateMove");
-    }
-    //
-    inOrder.verify(container).command_ADD_after(component, nextComponent);
-    inOrder.verify(container).command_APPEND_after(component, nextComponent);
-    inOrder.verify(container).command_MOVE_after(component, nextComponent);
-    inOrder.verifyNoMoreInteractions();
-  }
-
-  /**
-   * Test that most specific version "command_CREATE" method is used.
-   */
-  public void test_duckTyping_useMostSpecific() throws Exception {
-    final XmlObjectInfo component = mock(XmlObjectInfo.class);
-    final XmlObjectInfo nextComponent = mock(XmlObjectInfo.class);
-    final MyFlowContainer_useMostSpecific container = mock(MyFlowContainer_useMostSpecific.class);
-    final InOrder inOrder = inOrder(component, nextComponent, container);
-    final FlowContainer flowContainer =
-        new FlowContainerConfigurable(container,
-            new FlowContainerConfiguration(Predicates.alwaysTrue(),
-                Predicates.alwaysFalse(),
-                Associations.direct(),
-                ContainerObjectValidators.alwaysTrue(),
-                ContainerObjectValidators.alwaysTrue()));
-    // CREATE
-    flowContainer.command_CREATE(component, nextComponent);
-    //
-    inOrder.verify(container).command_CREATE(component, nextComponent);
-    inOrder.verifyNoMoreInteractions();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Validation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_validateMethods() throws Exception {
-    XmlObjectInfo container = mock(XmlObjectInfo.class);
-    final XmlObjectInfo component = mock(XmlObjectInfo.class);
-    final XmlObjectInfo reference = mock(XmlObjectInfo.class);
-    final FlowContainerConfiguration configuration = mock(FlowContainerConfiguration.class);
-    final InOrder inOrder = inOrder(container, component, reference, configuration);
-    final FlowContainer flowContainer = new FlowContainerConfigurable(container, configuration);
-    // isHorizontal()
-    when(configuration.getHorizontalPredicate()).thenReturn(Predicates.alwaysTrue());
-    //
-    assertTrue(flowContainer.isHorizontal());
-    //
-    inOrder.verify(configuration).getHorizontalPredicate();
-    inOrder.verifyNoMoreInteractions();
-    // validateComponent() = true
-    clearInvocations(configuration);
-    //
-    when(configuration.getComponentValidator()).thenReturn(ContainerObjectValidators.alwaysTrue());
-    //
-    assertTrue(flowContainer.validateComponent(component));
-    //
-    inOrder.verify(configuration).getComponentValidator();
-    inOrder.verifyNoMoreInteractions();
-    // validateReference() = false
-    clearInvocations(configuration);
-    //
-    when(configuration.getReferenceValidator()).thenReturn(ContainerObjectValidators.alwaysTrue());
-    //
-    assertTrue(flowContainer.validateReference(reference));
-    //
-    inOrder.verify(configuration).getReferenceValidator();
-    inOrder.verifyNoMoreInteractions();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Models
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link FlowContainerConfigurable#command_CREATE(Object, Object)}.
-   */
-  public void test_CREATE() throws Exception {
-    prepareFlowPanel();
-    XmlObjectInfo panel =
-        parse(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<t:FlowPanel>",
-            "  <Button wbp:name='button'/>",
-            "</t:FlowPanel>");
-    XmlObjectInfo button = getObjectByName("button");
-    // prepare FlowContainer
-    FlowContainer flowContainer = new FlowContainerFactory(panel, true).get().get(0);
-    // do CREATE
-    XmlObjectInfo newButton = createButton();
-    {
-      assertTrue(flowContainer.isHorizontal());
-      assertTrue(flowContainer.validateComponent(newButton));
-      assertTrue(flowContainer.validateReference(button));
-    }
-    flowContainer.command_CREATE(newButton, button);
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<t:FlowPanel>",
-        "  <Button/>",
-        "  <Button wbp:name='button'/>",
-        "</t:FlowPanel>");
-  }
-
-  /**
-   * Ensure that we can: create, delete and create new component again.
-   */
-  public void test_CREATE_twoTimes() throws Exception {
-    prepareFlowPanel();
-    XmlObjectInfo panel =
-        parse(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<t:FlowPanel/>");
-    // prepare FlowContainer
-    FlowContainer flowContainer = new FlowContainerFactory(panel, true).get().get(0);
-    // create/delete
-    {
-      XmlObjectInfo newButton = createButton();
-      flowContainer.command_CREATE(newButton, null);
-      newButton.delete();
-    }
-    // create again
-    {
-      XmlObjectInfo newButton = createButton();
-      flowContainer.command_CREATE(newButton, null);
-    }
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<t:FlowPanel>",
-        "  <Button/>",
-        "</t:FlowPanel>");
-  }
-
-  /**
-   * Test for {@link FlowContainerConfigurable#command_MOVE(Object, Object)}.
-   */
-  public void test_MOVE() throws Exception {
-    prepareFlowPanel();
-    XmlObjectInfo panel =
-        parse(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<t:FlowPanel>",
-            "  <Button wbp:name='button_1'/>",
-            "  <Button wbp:name='button_2'/>",
-            "</t:FlowPanel>");
-    XmlObjectInfo button_1 = getObjectByName("button_1");
-    XmlObjectInfo button_2 = getObjectByName("button_2");
-    // prepare FlowContainer
-    FlowContainer flowContainer =
-        new FlowContainerConfigurable(panel,
-            new FlowContainerConfiguration(Predicates.alwaysTrue(),
-                Predicates.alwaysFalse(),
-                Associations.direct(),
-                ContainerObjectValidators.alwaysTrue(),
-                ContainerObjectValidators.alwaysTrue()));
-    // do MOVE
-    flowContainer.command_MOVE(button_2, button_1);
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<t:FlowPanel>",
-        "  <Button wbp:name='button_2'/>",
-        "  <Button wbp:name='button_1'/>",
-        "</t:FlowPanel>");
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  static void prepareFlowPanel() throws Exception {
-    prepareFlowPanel_classes();
-    setFileContentSrc(
-        "test/FlowPanel.wbp-component.xml",
-        getSourceDQ(
-            "<?xml version='1.0' encoding='UTF-8'?>",
-            "<component xmlns='http://www.eclipse.org/wb/WBPComponent'>",
-            "  <parameters>",
-            "    <parameter name='flowContainer'>true</parameter>",
-            "    <parameter name='flowContainer.horizontal'>true</parameter>",
-            "    <parameter name='flowContainer.component'>org.eclipse.swt.widgets.Control</parameter>",
-            "    <parameter name='flowContainer.reference'>org.eclipse.swt.widgets.Control</parameter>",
-            "  </parameters>",
-            "</component>"));
-    waitForAutoBuild();
-  }
-
-  static void prepareFlowPanel_classes() throws Exception {
-    setFileContentSrc(
-        "test/MyLayout.java",
-        getSource(
-            "package test;",
-            "import org.eclipse.swt.graphics.Point;",
-            "import org.eclipse.swt.widgets.*;",
-            "public class MyLayout extends Layout {",
-            "  protected Point computeSize(Composite composite, int wHint, int hHint, boolean flushCache) {",
-            "    int count = composite.getChildren().length;",
-            "    return new Point(15 + 95 * count + 5 * (count - 1) + 15, 10 + 50 + 10);",
-            "  }",
-            "  protected void layout(Composite composite, boolean flushCache) {",
-            "    Control[] children = composite.getChildren();",
-            "    for (int i = 0; i < children.length; i++) {",
-            "      Control child = children[i];",
-            "      child.setBounds(15 + 100 * i, 10, 95, 50);",
-            "    }",
-            "  }",
-            "}"));
-    setFileContentSrc(
-        "test/FlowPanel.java",
-        getSource(
-            "package test;",
-            "import org.eclipse.swt.widgets.*;",
-            "public class FlowPanel extends Composite {",
-            "  public FlowPanel(Composite parent, int style) {",
-            "    super(parent, style);",
-            "    setLayout(new MyLayout());",
-            "  }",
-            "}"));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// FlowContainer_Factory: horizontal
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_getConfigurations_horizontal_trueByDefault() throws Exception {
+		List<FlowContainerConfiguration> configurations =
+				getConfigurations(true, new String[][]{
+					{"flowContainer", "true"},
+					{"flowContainer.component", "java.awt.Component"},
+					{"flowContainer.reference", "java.awt.Component"},});
+		assertThat(configurations).hasSize(1);
+		assertConfiguration(configurations.get(0), "alwaysTrue", "direct");
+	}
+
+	public void test_getConfigurations_horizontal_complexExpression() throws Exception {
+		List<FlowContainerConfiguration> configurations =
+				getConfigurations(true, new String[][]{
+					{"flowContainer", "true"},
+					{"flowContainer.horizontal", "isHorizontal()"},
+					{"flowContainer.component", "java.awt.Component"},
+					{"flowContainer.reference", "java.awt.Component"},});
+		assertThat(configurations).hasSize(1);
+		assertConfiguration(configurations.get(0), "isHorizontal()", "direct");
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// FlowContainer_Factory: association
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * No special container association, so "direct" is used.
+	 */
+	public void test_getConfigurations_association_implicitDirect() throws Exception {
+		List<FlowContainerConfiguration> configurations =
+				getConfigurations(true, new String[][]{
+					{"flowContainer", "true"},
+					{"flowContainer.horizontal", "true"},
+					{"flowContainer.component", "java.awt.Component"},
+					{"flowContainer.reference", "java.awt.Component"},});
+		assertThat(configurations).hasSize(1);
+		assertConfiguration(configurations.get(0), "true", "direct");
+	}
+
+	/**
+	 * The "property" association.
+	 */
+	public void test_getConfigurations_association_property() throws Exception {
+		List<FlowContainerConfiguration> configurations =
+				getConfigurations(true, new String[][]{
+					{"flowContainer", "true"},
+					{"flowContainer.horizontal", "true"},
+					{"flowContainer.x-association", "property myProperty"},
+					{"flowContainer.component", "java.awt.Component"},
+					{"flowContainer.reference", "java.awt.Component"},});
+		assertThat(configurations).hasSize(1);
+		assertConfiguration(configurations.get(0), "true", "property myProperty");
+	}
+
+	/**
+	 * The "inter" association.
+	 */
+	public void test_getConfigurations_association_inter() throws Exception {
+		List<FlowContainerConfiguration> configurations =
+				getConfigurations(true, new String[][]{
+					{"flowContainer", "true"},
+					{"flowContainer.horizontal", "true"},
+					{"flowContainer.x-association", "inter myName attrA='a a' attrB='b'"},
+					{"flowContainer.component", "java.awt.Component"},
+					{"flowContainer.reference", "java.awt.Component"},});
+		assertThat(configurations).hasSize(1);
+		assertConfiguration(configurations.get(0), "true", "inter myName {attrA=a a, attrB=b}");
+	}
+
+	public void test_getConfigurations_association_bad() throws Exception {
+		try {
+			getConfigurations(true, new String[][]{
+				{"flowContainer", "true"},
+				{"flowContainer.horizontal", "true"},
+				{"flowContainer.x-association", "bad association text"},
+				{"flowContainer.component", "java.awt.Component"},
+				{"flowContainer.reference", "java.awt.Component"},});
+			fail();
+		} catch (Throwable e) {
+			Throwable rootCause = DesignerExceptionUtils.getRootCause(e);
+			assertThat(rootCause).isExactlyInstanceOf(AssertionFailedException.class);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// FlowContainer_Factory: component
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Exception when no "component" validator.
+	 */
+	public void test_getConfigurations_noComponentValidator() throws Exception {
+		try {
+			getConfigurations(true, new String[][]{
+				{"flowContainer", "true"},
+				{"flowContainer.horizontal", "true"},});
+			fail();
+		} catch (Throwable e) {
+		}
+	}
+
+	public void test_getConfigurations_explicitComponentTypes() throws Exception {
+		List<FlowContainerConfiguration> configurations =
+				getConfigurations(true, new String[][]{
+					{"flowContainer", "true"},
+					{"flowContainer.horizontal", "true"},
+					{"flowContainer.component", "javax.swing.JButton javax.swing.JTextField"},
+					{"flowContainer.reference", "java.awt.Component"},});
+		assertThat(configurations).hasSize(1);
+		assertConfiguration(
+				configurations.get(0),
+				"true",
+				"direct",
+				"javax.swing.JButton javax.swing.JTextField",
+				"java.awt.Component");
+	}
+
+	/**
+	 * Use default component validator.
+	 */
+	public void test_getConfigurations_defaultComponent() throws Exception {
+		List<FlowContainerConfiguration> configurations =
+				getConfigurations(true, new String[][]{
+					{"flowContainer.defaultComponent", "java.awt.Component"},
+					{"flowContainer.defaultReference", "java.awt.Component"},
+					{"flowContainer", "true"},
+					{"flowContainer.horizontal", "true"},});
+		assertThat(configurations).hasSize(1);
+		assertConfiguration(
+				configurations.get(0),
+				"true",
+				"direct",
+				"java.awt.Component",
+				"java.awt.Component");
+	}
+
+	public void test_getConfigurations_componentValidatorExpression() throws Exception {
+		List<FlowContainerConfiguration> configurations =
+				getConfigurations(true, new String[][]{
+					{"flowContainer", "true"},
+					{"flowContainer.horizontal", "true"},
+					{"flowContainer.component-validator", "isComponentType(java.awt.Component)"},
+					{"flowContainer.reference", "java.awt.Component"},});
+		assertThat(configurations).hasSize(1);
+		assertConfiguration(
+				configurations.get(0),
+				"true",
+				"direct",
+				"isComponentType(java.awt.Component)",
+				"java.awt.Component");
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// FlowContainer_Factory: reference
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * No reference expression or string. So, error.
+	 */
+	public void test_getConfigurations_noReference() throws Exception {
+		try {
+			getConfigurations(true, new String[][]{
+				{"flowContainer.defaultComponent", "java.awt.Component"},
+				{"flowContainer", "true"},
+				{"flowContainer.horizontal", "true"},});
+			fail();
+		} catch (Throwable e) {
+		}
+	}
+
+	public void test_getConfigurations_explicitReferenceTypes() throws Exception {
+		List<FlowContainerConfiguration> configurations =
+				getConfigurations(true, new String[][]{
+					{"flowContainer", "true"},
+					{"flowContainer.horizontal", "true"},
+					{"flowContainer.component", "java.awt.Component"},
+					{"flowContainer.reference", "javax.swing.JButton javax.swing.JTextField"},});
+		assertThat(configurations).hasSize(1);
+		assertConfiguration(
+				configurations.get(0),
+				"true",
+				"direct",
+				"java.awt.Component",
+				"javax.swing.JButton javax.swing.JTextField");
+	}
+
+	public void test_getConfigurations_referenceValidatorExpression() throws Exception {
+		List<FlowContainerConfiguration> configurations =
+				getConfigurations(true, new String[][]{
+					{"flowContainer", "true"},
+					{"flowContainer.horizontal", "true"},
+					{"flowContainer.component", "java.awt.Component"},
+					{"flowContainer.reference-validator", "isReferenceType(java.awt.Component)"},});
+		assertThat(configurations).hasSize(1);
+		assertConfiguration(
+				configurations.get(0),
+				"true",
+				"direct",
+				"java.awt.Component",
+				"isReferenceType(java.awt.Component)");
+	}
+
+	/**
+	 * When no "reference" specified, same predicate as for "component" should be used.
+	 */
+	public void test_getConfigurations_referencesAsComponents() throws Exception {
+		List<FlowContainerConfiguration> configurations =
+				getConfigurations(true, new String[][]{
+					{"flowContainer", "true"},
+					{"flowContainer.horizontal", "true"},
+					{"flowContainer.component", "java.awt.Component"},});
+		assertThat(configurations).hasSize(1);
+		assertConfiguration(
+				configurations.get(0),
+				"true",
+				"direct",
+				"java.awt.Component",
+				"java.awt.Component");
+	}
+
+	/**
+	 * Use default reference validator.
+	 */
+	public void test_getConfigurations_defaultReference() throws Exception {
+		List<FlowContainerConfiguration> configurations =
+				getConfigurations(true, new String[][]{
+					{"flowContainer.defaultComponent", "java.awt.Component"},
+					{"flowContainer.defaultReference", "java.awt.Component"},
+					{"flowContainer", "true"},
+					{"flowContainer.horizontal", "true"},});
+		assertThat(configurations).hasSize(1);
+		assertConfiguration(
+				configurations.get(0),
+				"true",
+				"direct",
+				"java.awt.Component",
+				"java.awt.Component");
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// FlowContainer_Factory: canvas/tree parsing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Ask "forCanvas", return common configuration for both - canvas/tree.
+	 */
+	public void test_getConfigurations_forCanvas_common() throws Exception {
+		List<FlowContainerConfiguration> configurations =
+				getConfigurations(true, new String[][]{
+					{"flowContainer", "true"},
+					{"flowContainer.horizontal", "true"},
+					{"flowContainer.component", "java.awt.Component"},
+					{"flowContainer.reference", "java.awt.Component"},});
+		assertThat(configurations).hasSize(1);
+		assertConfiguration(
+				configurations.get(0),
+				"true",
+				"direct",
+				"java.awt.Component",
+				"java.awt.Component");
+	}
+
+	/**
+	 * Ask "forCanvas", return explicit "forCanvas".
+	 */
+	public void test_getConfigurations_forCanvas_explicit() throws Exception {
+		List<FlowContainerConfiguration> configurations =
+				getConfigurations(true, new String[][]{
+					{"flowContainer.canvas", "true"},
+					{"flowContainer.canvas.horizontal", "true"},
+					{"flowContainer.canvas.component", "java.awt.Component"},
+					{"flowContainer.canvas.reference", "java.awt.Component"},});
+		assertThat(configurations).hasSize(1);
+		assertConfiguration(
+				configurations.get(0),
+				"true",
+				"direct",
+				"java.awt.Component",
+				"java.awt.Component");
+	}
+
+	/**
+	 * Ask "forCanvas", but only "forTree" exist.
+	 */
+	public void test_getConfigurations_forCanvas_onlyForTree() throws Exception {
+		List<FlowContainerConfiguration> configurations =
+				getConfigurations(true, new String[][]{
+					{"flowContainer.tree", "true"},
+					{"flowContainer.tree.horizontal", "true"},
+					{"flowContainer.tree.component", "java.awt.Component"},
+					{"flowContainer.tree.reference", "java.awt.Component"},});
+		assertThat(configurations).isEmpty();
+	}
+
+	/**
+	 * Ask "forTree", return common configuration for both - canvas/tree.
+	 */
+	public void test_getConfigurations_forTree_common() throws Exception {
+		List<FlowContainerConfiguration> configurations =
+				getConfigurations(false, new String[][]{
+					{"flowContainer", "true"},
+					{"flowContainer.horizontal", "true"},
+					{"flowContainer.component", "java.awt.Component"},
+					{"flowContainer.reference", "java.awt.Component"},});
+		assertThat(configurations).hasSize(1);
+	}
+
+	/**
+	 * Ask "forTree", return explicit "forTree".
+	 */
+	public void test_getConfigurations_forTree_explicit() throws Exception {
+		List<FlowContainerConfiguration> configurations =
+				getConfigurations(false, new String[][]{
+					{"flowContainer.tree", "true"},
+					{"flowContainer.tree.horizontal", "true"},
+					{"flowContainer.tree.component", "java.awt.Component"},
+					{"flowContainer.tree.reference", "java.awt.Component"},});
+		assertThat(configurations).hasSize(1);
+	}
+
+	/**
+	 * Several different configurations.
+	 */
+	public void test_getConfigurations_3_count() throws Exception {
+		List<FlowContainerConfiguration> configurations =
+				getConfigurations(true, new String[][]{
+					{"flowContainer", "true"},
+					{"flowContainer.horizontal", "true"},
+					{"flowContainer.component", "java.awt.Component"},
+					{"flowContainer.reference", "java.awt.Component"},
+					{"flowContainer.1", "true"},
+					{"flowContainer.1.horizontal", "false"},
+					{"flowContainer.1.component", "javax.swing.JButton"},
+					{"flowContainer.1.reference", "java.awt.Component"},
+					{"flowContainer.5", "true"},
+					{"flowContainer.5.horizontal", "true"},
+					{"flowContainer.5.component", "javax.swing.JTextField"},
+					{"flowContainer.5.reference", "javax.swing.JTextField"},});
+		assertThat(configurations).hasSize(3);
+		assertConfiguration(
+				configurations.get(0),
+				"true",
+				"direct",
+				"java.awt.Component",
+				"java.awt.Component");
+		assertConfiguration(
+				configurations.get(1),
+				"false",
+				"direct",
+				"javax.swing.JButton",
+				"java.awt.Component");
+		assertConfiguration(
+				configurations.get(2),
+				"true",
+				"direct",
+				"javax.swing.JTextField",
+				"javax.swing.JTextField");
+	}
+
+	/**
+	 * Ignore if <code>flowContainer</code> value is not <code>true</code>.
+	 */
+	public void test_getConfigurations_ignoreFalse() throws Exception {
+		List<FlowContainerConfiguration> configurations =
+				getConfigurations(true, new String[][]{
+					{"flowContainer", "false"},
+					{"flowContainer.horizontal", "true"},
+					{"flowContainer.component", "java.awt.Component"},
+					{"flowContainer.reference", "java.awt.Component"},});
+		assertThat(configurations).hasSize(0);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// FlowContainer_Factory: assertions
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static void assertConfiguration(FlowContainerConfiguration configuration,
+			String horizontal,
+			String association) throws Exception {
+		assertConfiguration(configuration, horizontal, association, null, null);
+	}
+
+	private static void assertConfiguration(FlowContainerConfiguration configuration,
+			String horizontal,
+			String association,
+			String expectedComponentValidator,
+			String expectedReferenceValidator) throws Exception {
+		assertEquals(horizontal, getHorizontalPredicateString(configuration));
+		assertEquals(association, getAssociationString(configuration));
+		if (expectedComponentValidator != null) {
+			assertEquals(
+					expectedComponentValidator,
+					getValidatorString(configuration.getComponentValidator()));
+		}
+		if (expectedReferenceValidator != null) {
+			assertEquals(
+					expectedReferenceValidator,
+					getValidatorString(configuration.getReferenceValidator()));
+		}
+	}
+
+	private static String getValidatorString(Object validator) {
+		return validator.toString();
+	}
+
+	private static String getHorizontalPredicateString(FlowContainerConfiguration configuration) {
+		Predicate<Object> predicate = configuration.getHorizontalPredicate();
+		if (predicate == Predicates.alwaysTrue()) {
+			return "alwaysTrue";
+		}
+		return predicate.toString();
+	}
+
+	private static String getAssociationString(FlowContainerConfiguration configuration)
+			throws Exception {
+		return configuration.getAssociation().toString();
+	}
+
+	private List<FlowContainerConfiguration> getConfigurations(boolean forCanvas,
+			String[][] parameters) throws Exception {
+		String[] parameterLines = new String[parameters.length];
+		for (int i = 0; i < parameters.length; i++) {
+			String[] parameterPair = parameters[i];
+			assertEquals(2, parameterPair.length);
+			parameterLines[i] =
+					MessageFormat.format(
+							"    <parameter name=''{0}''>{1}</parameter>",
+							parameterPair[0],
+							parameterPair[1]);
+		}
+		// prepare description
+		prepareMyComponent();
+		setFileContentSrc(
+				"test/MyComponent.wbp-component.xml",
+				getSource3(new String[]{
+						"<?xml version='1.0' encoding='UTF-8'?>",
+						"<component xmlns='http://www.eclipse.org/wb/WBPComponent'>",
+				"  <parameters>"}, parameterLines, new String[]{"  </parameters>", "</component>"}));
+		waitForAutoBuild();
+		// parse
+		XmlObjectInfo panel = parse("<t:MyComponent/>");
+		// get configurations
+		return new FlowContainerFactory(panel, forCanvas).getConfigurations();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Duck typing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static class MyFlowContainer extends XmlObjectInfo {
+		public MyFlowContainer(EditorContext context,
+				ComponentDescription description,
+				CreationSupport creationSupport) throws Exception {
+			super(context, description, creationSupport);
+		}
+
+		public void command_CREATE(Object component, Object nextComponent) {
+		}
+
+		public void command_CREATE_after(Object component, Object nextComponent) {
+		}
+
+		public void command_MOVE(Object component, Object nextComponent) {
+		}
+
+		public void command_MOVE_after(Object component, Object nextComponent) {
+		}
+
+		public void command_APPEND_after(Object component, Object nextComponent) {
+		}
+	}
+	public static class MyFlowContainerForAdd extends XmlObjectInfo {
+		public MyFlowContainerForAdd(EditorContext context,
+				ComponentDescription description,
+				CreationSupport creationSupport) throws Exception {
+			super(context, description, creationSupport);
+		}
+
+		public void command_MOVE_after(Object component, Object nextComponent) {
+		}
+
+		public void command_ADD_after(Object component, Object nextComponent) {
+		}
+
+		public void command_APPEND_after(Object component, Object nextComponent) {
+		}
+	}
+	public static class MyFlowContainer_useMostSpecific extends XmlObjectInfo {
+		public MyFlowContainer_useMostSpecific(EditorContext context,
+				ComponentDescription description,
+				CreationSupport creationSupport) throws Exception {
+			super(context, description, creationSupport);
+		}
+
+		@SuppressWarnings("unused")
+		public void command_CREATE(Object component, Object nextComponent) {
+		}
+
+		public void command_CREATE(XmlObjectInfo component, Object nextComponent) {
+		}
+	}
+
+	/**
+	 * Create/Move operations of {@link FlowContainerConfigurable} should try to find corresponding
+	 * CREATE/MOVE methods in container {@link JavaInfo} and use them instead of generic
+	 * implementation.
+	 */
+	public void test_duckTyping() throws Exception {
+		final XmlObjectInfo component = mock(XmlObjectInfo.class);
+		final XmlObjectInfo nextComponent = mock(XmlObjectInfo.class);
+		final MyFlowContainer container = mock(MyFlowContainer.class);
+		final InOrder inOrder = inOrder(component, nextComponent, container);
+		final FlowContainer flowContainer =
+				new FlowContainerConfigurable(container,
+						new FlowContainerConfiguration(Predicates.alwaysTrue(),
+								Predicates.alwaysFalse(),
+								Associations.direct(),
+								ContainerObjectValidators.alwaysTrue(),
+								ContainerObjectValidators.alwaysTrue()));
+		// CREATE
+		flowContainer.command_CREATE(component, nextComponent);
+		//
+		inOrder.verify(container).command_CREATE(component, nextComponent);
+		inOrder.verify(container).command_CREATE_after(component, nextComponent);
+		inOrder.verify(container).command_APPEND_after(component, nextComponent);
+		inOrder.verifyNoMoreInteractions();
+		// MOVE
+		clearInvocations(container);
+		//
+		flowContainer.command_MOVE(component, nextComponent);
+		//
+		inOrder.verify(container).command_MOVE(component, nextComponent);
+		inOrder.verify(container).command_MOVE_after(component, nextComponent);
+		inOrder.verifyNoMoreInteractions();
+	}
+
+	/**
+	 * After ADD operation method "command_ADD_after" should be called.
+	 */
+	public void test_duckTyping_ADD() throws Exception {
+		final XmlObjectInfo component = mock(XmlObjectInfo.class);
+		final XmlObjectInfo oldContainer = mock(XmlObjectInfo.class);
+		final XmlObjectInfo nextComponent = mock(XmlObjectInfo.class);
+		final MyFlowContainerForAdd container = mock(MyFlowContainerForAdd.class);
+		final InOrder inOrder = inOrder(component, oldContainer, nextComponent, container);
+		final FlowContainer flowContainer =
+				new FlowContainerConfigurable(container,
+						new FlowContainerConfiguration(Predicates.alwaysTrue(),
+								Predicates.alwaysFalse(),
+								Associations.direct(),
+								ContainerObjectValidators.alwaysTrue(),
+								ContainerObjectValidators.alwaysTrue()));
+		// MOVE (as ADD)
+		ReflectionUtils.setField(component, "m_parent", oldContainer);
+		System.setProperty("flowContainer.simulateMove", "true");
+		try {
+			flowContainer.command_MOVE(component, nextComponent);
+		} finally {
+			System.clearProperty("flowContainer.simulateMove");
+		}
+		//
+		inOrder.verify(container).command_ADD_after(component, nextComponent);
+		inOrder.verify(container).command_APPEND_after(component, nextComponent);
+		inOrder.verify(container).command_MOVE_after(component, nextComponent);
+		inOrder.verifyNoMoreInteractions();
+	}
+
+	/**
+	 * Test that most specific version "command_CREATE" method is used.
+	 */
+	public void test_duckTyping_useMostSpecific() throws Exception {
+		final XmlObjectInfo component = mock(XmlObjectInfo.class);
+		final XmlObjectInfo nextComponent = mock(XmlObjectInfo.class);
+		final MyFlowContainer_useMostSpecific container = mock(MyFlowContainer_useMostSpecific.class);
+		final InOrder inOrder = inOrder(component, nextComponent, container);
+		final FlowContainer flowContainer =
+				new FlowContainerConfigurable(container,
+						new FlowContainerConfiguration(Predicates.alwaysTrue(),
+								Predicates.alwaysFalse(),
+								Associations.direct(),
+								ContainerObjectValidators.alwaysTrue(),
+								ContainerObjectValidators.alwaysTrue()));
+		// CREATE
+		flowContainer.command_CREATE(component, nextComponent);
+		//
+		inOrder.verify(container).command_CREATE(component, nextComponent);
+		inOrder.verifyNoMoreInteractions();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Validation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_validateMethods() throws Exception {
+		XmlObjectInfo container = mock(XmlObjectInfo.class);
+		final XmlObjectInfo component = mock(XmlObjectInfo.class);
+		final XmlObjectInfo reference = mock(XmlObjectInfo.class);
+		final FlowContainerConfiguration configuration = mock(FlowContainerConfiguration.class);
+		final InOrder inOrder = inOrder(container, component, reference, configuration);
+		final FlowContainer flowContainer = new FlowContainerConfigurable(container, configuration);
+		// isHorizontal()
+		when(configuration.getHorizontalPredicate()).thenReturn(Predicates.alwaysTrue());
+		//
+		assertTrue(flowContainer.isHorizontal());
+		//
+		inOrder.verify(configuration).getHorizontalPredicate();
+		inOrder.verifyNoMoreInteractions();
+		// validateComponent() = true
+		clearInvocations(configuration);
+		//
+		when(configuration.getComponentValidator()).thenReturn(ContainerObjectValidators.alwaysTrue());
+		//
+		assertTrue(flowContainer.validateComponent(component));
+		//
+		inOrder.verify(configuration).getComponentValidator();
+		inOrder.verifyNoMoreInteractions();
+		// validateReference() = false
+		clearInvocations(configuration);
+		//
+		when(configuration.getReferenceValidator()).thenReturn(ContainerObjectValidators.alwaysTrue());
+		//
+		assertTrue(flowContainer.validateReference(reference));
+		//
+		inOrder.verify(configuration).getReferenceValidator();
+		inOrder.verifyNoMoreInteractions();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Models
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link FlowContainerConfigurable#command_CREATE(Object, Object)}.
+	 */
+	public void test_CREATE() throws Exception {
+		prepareFlowPanel();
+		XmlObjectInfo panel =
+				parse(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<t:FlowPanel>",
+						"  <Button wbp:name='button'/>",
+						"</t:FlowPanel>");
+		XmlObjectInfo button = getObjectByName("button");
+		// prepare FlowContainer
+		FlowContainer flowContainer = new FlowContainerFactory(panel, true).get().get(0);
+		// do CREATE
+		XmlObjectInfo newButton = createButton();
+		{
+			assertTrue(flowContainer.isHorizontal());
+			assertTrue(flowContainer.validateComponent(newButton));
+			assertTrue(flowContainer.validateReference(button));
+		}
+		flowContainer.command_CREATE(newButton, button);
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<t:FlowPanel>",
+				"  <Button/>",
+				"  <Button wbp:name='button'/>",
+				"</t:FlowPanel>");
+	}
+
+	/**
+	 * Ensure that we can: create, delete and create new component again.
+	 */
+	public void test_CREATE_twoTimes() throws Exception {
+		prepareFlowPanel();
+		XmlObjectInfo panel =
+				parse(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<t:FlowPanel/>");
+		// prepare FlowContainer
+		FlowContainer flowContainer = new FlowContainerFactory(panel, true).get().get(0);
+		// create/delete
+		{
+			XmlObjectInfo newButton = createButton();
+			flowContainer.command_CREATE(newButton, null);
+			newButton.delete();
+		}
+		// create again
+		{
+			XmlObjectInfo newButton = createButton();
+			flowContainer.command_CREATE(newButton, null);
+		}
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<t:FlowPanel>",
+				"  <Button/>",
+				"</t:FlowPanel>");
+	}
+
+	/**
+	 * Test for {@link FlowContainerConfigurable#command_MOVE(Object, Object)}.
+	 */
+	public void test_MOVE() throws Exception {
+		prepareFlowPanel();
+		XmlObjectInfo panel =
+				parse(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<t:FlowPanel>",
+						"  <Button wbp:name='button_1'/>",
+						"  <Button wbp:name='button_2'/>",
+						"</t:FlowPanel>");
+		XmlObjectInfo button_1 = getObjectByName("button_1");
+		XmlObjectInfo button_2 = getObjectByName("button_2");
+		// prepare FlowContainer
+		FlowContainer flowContainer =
+				new FlowContainerConfigurable(panel,
+						new FlowContainerConfiguration(Predicates.alwaysTrue(),
+								Predicates.alwaysFalse(),
+								Associations.direct(),
+								ContainerObjectValidators.alwaysTrue(),
+								ContainerObjectValidators.alwaysTrue()));
+		// do MOVE
+		flowContainer.command_MOVE(button_2, button_1);
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<t:FlowPanel>",
+				"  <Button wbp:name='button_2'/>",
+				"  <Button wbp:name='button_1'/>",
+				"</t:FlowPanel>");
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	static void prepareFlowPanel() throws Exception {
+		prepareFlowPanel_classes();
+		setFileContentSrc(
+				"test/FlowPanel.wbp-component.xml",
+				getSourceDQ(
+						"<?xml version='1.0' encoding='UTF-8'?>",
+						"<component xmlns='http://www.eclipse.org/wb/WBPComponent'>",
+						"  <parameters>",
+						"    <parameter name='flowContainer'>true</parameter>",
+						"    <parameter name='flowContainer.horizontal'>true</parameter>",
+						"    <parameter name='flowContainer.component'>org.eclipse.swt.widgets.Control</parameter>",
+						"    <parameter name='flowContainer.reference'>org.eclipse.swt.widgets.Control</parameter>",
+						"  </parameters>",
+						"</component>"));
+		waitForAutoBuild();
+	}
+
+	static void prepareFlowPanel_classes() throws Exception {
+		setFileContentSrc(
+				"test/MyLayout.java",
+				getSource(
+						"package test;",
+						"import org.eclipse.swt.graphics.Point;",
+						"import org.eclipse.swt.widgets.*;",
+						"public class MyLayout extends Layout {",
+						"  protected Point computeSize(Composite composite, int wHint, int hHint, boolean flushCache) {",
+						"    int count = composite.getChildren().length;",
+						"    return new Point(15 + 95 * count + 5 * (count - 1) + 15, 10 + 50 + 10);",
+						"  }",
+						"  protected void layout(Composite composite, boolean flushCache) {",
+						"    Control[] children = composite.getChildren();",
+						"    for (int i = 0; i < children.length; i++) {",
+						"      Control child = children[i];",
+						"      child.setBounds(15 + 100 * i, 10, 95, 50);",
+						"    }",
+						"  }",
+						"}"));
+		setFileContentSrc(
+				"test/FlowPanel.java",
+				getSource(
+						"package test;",
+						"import org.eclipse.swt.widgets.*;",
+						"public class FlowPanel extends Composite {",
+						"  public FlowPanel(Composite parent, int style) {",
+						"    super(parent, style);",
+						"    setLayout(new MyLayout());",
+						"  }",
+						"}"));
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/generic/GenericTests.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/generic/GenericTests.java
index 724287ed4..76a3ae40a 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/generic/GenericTests.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/generic/GenericTests.java
@@ -21,23 +21,23 @@
  * @author scheglov_ke
  */
 public class GenericTests extends DesignerSuiteTests {
-  public static Test suite() {
-    TestSuite suite = new TestSuite("org.eclipse.wb.xml.model.generic");
-    suite.addTest(createSingleSuite(FlipBooleanPropertyGefTest.class));
-    suite.addTest(createSingleSuite(ContainerObjectValidatorsTest.class));
-    // flow container
-    suite.addTest(createSingleSuite(FlowContainerModelTest.class));
-    suite.addTest(createSingleSuite(FlowContainerGefTest.class));
-    suite.addTest(createSingleSuite(FlowContainerLayoutGefTest.class));
-    // simple container
-    suite.addTest(createSingleSuite(SimpleContainerModelTest.class));
-    suite.addTest(createSingleSuite(SimpleContainerGefTest.class));
-    suite.addTest(createSingleSuite(SimpleContainerLayoutGefTest.class));
-    // properties
-    suite.addTest(createSingleSuite(CopyPropertyTopTest.class));
-    suite.addTest(createSingleSuite(ModelMethodPropertyTest.class));
-    suite.addTest(createSingleSuite(ModelMethodPropertyChildTest.class));
-    // done
-    return suite;
-  }
+	public static Test suite() {
+		TestSuite suite = new TestSuite("org.eclipse.wb.xml.model.generic");
+		suite.addTest(createSingleSuite(FlipBooleanPropertyGefTest.class));
+		suite.addTest(createSingleSuite(ContainerObjectValidatorsTest.class));
+		// flow container
+		suite.addTest(createSingleSuite(FlowContainerModelTest.class));
+		suite.addTest(createSingleSuite(FlowContainerGefTest.class));
+		suite.addTest(createSingleSuite(FlowContainerLayoutGefTest.class));
+		// simple container
+		suite.addTest(createSingleSuite(SimpleContainerModelTest.class));
+		suite.addTest(createSingleSuite(SimpleContainerGefTest.class));
+		suite.addTest(createSingleSuite(SimpleContainerLayoutGefTest.class));
+		// properties
+		suite.addTest(createSingleSuite(CopyPropertyTopTest.class));
+		suite.addTest(createSingleSuite(ModelMethodPropertyTest.class));
+		suite.addTest(createSingleSuite(ModelMethodPropertyChildTest.class));
+		// done
+		return suite;
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/generic/ModelMethodPropertyChildTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/generic/ModelMethodPropertyChildTest.java
index 5010ad504..c8f5103ff 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/generic/ModelMethodPropertyChildTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/generic/ModelMethodPropertyChildTest.java
@@ -37,123 +37,123 @@
  * @author scheglov_ke
  */
 public class ModelMethodPropertyChildTest extends AbstractCoreTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static class MyModel extends CompositeInfo {
-    public MyModel(EditorContext context,
-        ComponentDescription description,
-        CreationSupport creationSupport) throws Exception {
-      super(context, description, creationSupport);
-    }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static class MyModel extends CompositeInfo {
+		public MyModel(EditorContext context,
+				ComponentDescription description,
+				CreationSupport creationSupport) throws Exception {
+			super(context, description, creationSupport);
+		}
 
-    private final Map<Object, String> m_values = Maps.newHashMap();
+		private final Map<Object, String> m_values = Maps.newHashMap();
 
-    public Object getValue(ControlInfo component) {
-      String value = m_values.get(component);
-      return value != null ? value : Property.UNKNOWN_VALUE;
-    }
+		public Object getValue(ControlInfo component) {
+			String value = m_values.get(component);
+			return value != null ? value : Property.UNKNOWN_VALUE;
+		}
 
-    public void setValue(ControlInfo component, Object value) {
-      m_values.put(component, (String) value);
-    }
-  }
+		public void setValue(ControlInfo component, Object value) {
+			m_values.put(component, (String) value);
+		}
+	}
 
-  private void prepareMyPanel(String parameters) throws Exception {
-    prepareMyComponent(ArrayUtils.EMPTY_STRING_ARRAY, new String[]{
-        "  <x-model class='" + MyModel.class.getName() + "'/>",
-        "  <parameters>",
-        "    <parameter name='x-modelMethodChildProperty " + parameters + "'/>",
-        "  </parameters>"});
-  }
+	private void prepareMyPanel(String parameters) throws Exception {
+		prepareMyComponent(ArrayUtils.EMPTY_STRING_ARRAY, new String[]{
+				"  <x-model class='" + MyModel.class.getName() + "'/>",
+				"  <parameters>",
+				"    <parameter name='x-modelMethodChildProperty " + parameters + "'/>",
+		"  </parameters>"});
+	}
 
-  public void test_valueProperty() throws Exception {
-    prepareMyPanel("getter=getValue setter=setValue title=value category=normal type=java.lang.String"
-        + " child="
-        + ControlInfo.class.getName());
-    CompositeInfo panel =
-        parse(
-            "// filler filler filler filler filler",
-            "<t:MyComponent>",
-            "  <Button wbp:name='button'/>",
-            "  <Text wbp:name='text'/>",
-            "</t:MyComponent>");
-    refresh();
-    ControlInfo button = getObjectByName("button");
-    ControlInfo text = getObjectByName("text");
-    // "value" property for "button"
-    {
-      Property property = button.getPropertyByTitle("value");
-      assertNotNull(property);
-      assertSame(PropertyCategory.NORMAL, property.getCategory());
-      assertSame(StringPropertyEditor.INSTANCE, property.getEditor());
-      // no initial value
-      assertFalse(property.isModified());
-      assertSame(Property.UNKNOWN_VALUE, property.getValue());
-      // new value
-      property.setValue("123");
-      assertEquals("123", property.getValue());
-      // same property always
-      assertSame(property, button.getPropertyByTitle("value"));
-    }
-    // "value" property for "text"
-    {
-      Property property = text.getPropertyByTitle("value");
-      assertNotNull(property);
-      assertSame(PropertyCategory.NORMAL, property.getCategory());
-      // no initial value
-      assertFalse(property.isModified());
-      assertSame(Property.UNKNOWN_VALUE, property.getValue());
-      // new value
-      property.setValue("123");
-      assertEquals("123", property.getValue());
-      // same property always
-      assertSame(property, text.getPropertyByTitle("value"));
-      assertNotSame(property, button.getPropertyByTitle("value"));
-    }
-    // no "value" property for "layout"
-    {
-      Property property = panel.getLayout().getPropertyByTitle("value");
-      assertNull(property);
-    }
-  }
+	public void test_valueProperty() throws Exception {
+		prepareMyPanel("getter=getValue setter=setValue title=value category=normal type=java.lang.String"
+				+ " child="
+				+ ControlInfo.class.getName());
+		CompositeInfo panel =
+				parse(
+						"// filler filler filler filler filler",
+						"<t:MyComponent>",
+						"  <Button wbp:name='button'/>",
+						"  <Text wbp:name='text'/>",
+						"</t:MyComponent>");
+		refresh();
+		ControlInfo button = getObjectByName("button");
+		ControlInfo text = getObjectByName("text");
+		// "value" property for "button"
+		{
+			Property property = button.getPropertyByTitle("value");
+			assertNotNull(property);
+			assertSame(PropertyCategory.NORMAL, property.getCategory());
+			assertSame(StringPropertyEditor.INSTANCE, property.getEditor());
+			// no initial value
+			assertFalse(property.isModified());
+			assertSame(Property.UNKNOWN_VALUE, property.getValue());
+			// new value
+			property.setValue("123");
+			assertEquals("123", property.getValue());
+			// same property always
+			assertSame(property, button.getPropertyByTitle("value"));
+		}
+		// "value" property for "text"
+		{
+			Property property = text.getPropertyByTitle("value");
+			assertNotNull(property);
+			assertSame(PropertyCategory.NORMAL, property.getCategory());
+			// no initial value
+			assertFalse(property.isModified());
+			assertSame(Property.UNKNOWN_VALUE, property.getValue());
+			// new value
+			property.setValue("123");
+			assertEquals("123", property.getValue());
+			// same property always
+			assertSame(property, text.getPropertyByTitle("value"));
+			assertNotSame(property, button.getPropertyByTitle("value"));
+		}
+		// no "value" property for "layout"
+		{
+			Property property = panel.getLayout().getPropertyByTitle("value");
+			assertNull(property);
+		}
+	}
 
-  public void test_noRequiredParameters() throws Exception {
-    prepareMyPanel("");
-    parse("<t:MyComponent/>");
-    // check warnings
-    List<EditorWarning> warnings = m_lastContext.getWarnings();
-    assertThat(warnings).hasSize(1);
-    assertThat(warnings.get(0).getMessage()).contains("'getter'").contains("'setter'").contains(
-        "'title'");
-  }
+	public void test_noRequiredParameters() throws Exception {
+		prepareMyPanel("");
+		parse("<t:MyComponent/>");
+		// check warnings
+		List<EditorWarning> warnings = m_lastContext.getWarnings();
+		assertThat(warnings).hasSize(1);
+		assertThat(warnings.get(0).getMessage()).contains("'getter'").contains("'setter'").contains(
+				"'title'");
+	}
 
-  public void test_noParameter_getter() throws Exception {
-    prepareMyPanel("getter=noSuchMethod setter=foo title=bar type=java.lang.String");
-    parse("<t:MyComponent/>");
-    // check warnings
-    List<EditorWarning> warnings = m_lastContext.getWarnings();
-    assertThat(warnings).hasSize(1);
-    assertThat(warnings.get(0).getMessage()).contains("Invalid").contains("getter");
-  }
+	public void test_noParameter_getter() throws Exception {
+		prepareMyPanel("getter=noSuchMethod setter=foo title=bar type=java.lang.String");
+		parse("<t:MyComponent/>");
+		// check warnings
+		List<EditorWarning> warnings = m_lastContext.getWarnings();
+		assertThat(warnings).hasSize(1);
+		assertThat(warnings.get(0).getMessage()).contains("Invalid").contains("getter");
+	}
 
-  public void test_noParameter_setter() throws Exception {
-    prepareMyPanel("getter=getValue setter=noSuchMethod title=bar type=java.lang.String");
-    parse("<t:MyComponent/>");
-    // check warnings
-    List<EditorWarning> warnings = m_lastContext.getWarnings();
-    assertThat(warnings).hasSize(1);
-    assertThat(warnings.get(0).getMessage()).contains("Invalid").contains("setter");
-  }
+	public void test_noParameter_setter() throws Exception {
+		prepareMyPanel("getter=getValue setter=noSuchMethod title=bar type=java.lang.String");
+		parse("<t:MyComponent/>");
+		// check warnings
+		List<EditorWarning> warnings = m_lastContext.getWarnings();
+		assertThat(warnings).hasSize(1);
+		assertThat(warnings.get(0).getMessage()).contains("Invalid").contains("setter");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/generic/ModelMethodPropertyTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/generic/ModelMethodPropertyTest.java
index d798c6715..738106615 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/generic/ModelMethodPropertyTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/generic/ModelMethodPropertyTest.java
@@ -37,151 +37,151 @@
  * @author scheglov_ke
  */
 public class ModelMethodPropertyTest extends AbstractCoreTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static class MyModel extends CompositeInfo {
-    public MyModel(EditorContext context,
-        ComponentDescription description,
-        CreationSupport creationSupport) throws Exception {
-      super(context, description, creationSupport);
-    }
-
-    private String m_value = "abc";
-
-    public Object getValue() {
-      return m_value;
-    }
-
-    public void setValue(Object value) {
-      m_value = (String) value;
-    }
-  }
-
-  private void prepareMyPanel(String parameters) throws Exception {
-    prepareMyPanel0(parameters + " type=java.lang.String");
-  }
-
-  private void prepareMyPanel0(String parameters) throws Exception {
-    prepareMyComponent(ArrayUtils.EMPTY_STRING_ARRAY, new String[]{
-        "  <x-model class='" + MyModel.class.getName() + "'/>",
-        "  <parameters>",
-        "    <parameter name='x-modelMethodProperty " + parameters + "'/>",
-        "  </parameters>"});
-  }
-
-  public void test_valueProperty() throws Exception {
-    prepareMyPanel("getter=getValue setter=setValue title=value category=normal");
-    CompositeInfo panel = parse("<t:MyComponent/>");
-    refresh();
-    assertNoErrors();
-    // test "value" property
-    Property property = panel.getPropertyByTitle("value");
-    assertNotNull(property);
-    assertSame(PropertyCategory.NORMAL, property.getCategory());
-    assertSame(String.class, ((ITypedProperty) property).getType());
-    // current value
-    assertTrue(property.isModified());
-    assertEquals("abc", property.getValue());
-    // set new value
-    property.setValue("123");
-    assertEquals("123", property.getValue());
-    // next time same Property should be returned
-    assertSame(property, panel.getPropertyByTitle("value"));
-  }
-
-  public void test_primitiveType() throws Exception {
-    prepareMyPanel0("getter=getValue setter=setValue title=value type=int");
-    CompositeInfo panel = parse("<t:MyComponent/>");
-    refresh();
-    assertNoErrors();
-    // test "value" property
-    Property property = panel.getPropertyByTitle("value");
-    assertNotNull(property);
-    assertSame(IntegerPropertyEditor.INSTANCE, property.getEditor());
-    assertSame(int.class, ((ITypedProperty) property).getType());
-  }
-
-  public void test_propertyEditor_StringList() throws Exception {
-    prepareMyPanel("getter=getValue setter=setValue title=value editor=strings(A,B,C)");
-    CompositeInfo panel = parse("<t:MyComponent/>");
-    refresh();
-    assertNoErrors();
-    // test "value" property
-    Property property = panel.getPropertyByTitle("value");
-    assertNotNull(property);
-    // test its editor
-    {
-      PropertyEditor propertyEditor = property.getEditor();
-      assertInstanceOf(StringListPropertyEditor.class, propertyEditor);
-      String[] strings = (String[]) ReflectionUtils.getFieldObject(propertyEditor, "m_strings");
-      assertThat(strings).isEqualTo(new String[]{"A", "B", "C"});
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // No required parameter
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_noRequiredParameters_getter() throws Exception {
-    prepareMyPanel("_getter=getValue setter=setValue title=value");
-    parse("<t:MyComponent/>");
-    // check warnings
-    List<EditorWarning> warnings = m_lastContext.getWarnings();
-    assertThat(warnings).hasSize(1);
-    assertThat(warnings.get(0).getMessage()).contains("'getter'");
-  }
-
-  public void test_noRequiredParameters_setter() throws Exception {
-    prepareMyPanel("getter=getValue _setter=setValue title=value");
-    parse("<t:MyComponent/>");
-    // check warnings
-    List<EditorWarning> warnings = m_lastContext.getWarnings();
-    assertThat(warnings).hasSize(1);
-    assertThat(warnings.get(0).getMessage()).contains("'setter'");
-  }
-
-  public void test_noRequiredParameters_title() throws Exception {
-    prepareMyPanel("getter=getValue setter=setValue _title=value");
-    parse("<t:MyComponent/>");
-    // check warnings
-    List<EditorWarning> warnings = m_lastContext.getWarnings();
-    assertThat(warnings).hasSize(1);
-    assertThat(warnings.get(0).getMessage()).contains("'title'");
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Invalid value for parameter
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_invalidParameter_getter() throws Exception {
-    prepareMyPanel("getter=noSuchMethod setter=foo title=bar");
-    parse("<t:MyComponent/>");
-    // check warnings
-    List<EditorWarning> warnings = m_lastContext.getWarnings();
-    assertThat(warnings).hasSize(1);
-    assertThat(warnings.get(0).getMessage()).contains("Invalid").contains("getter");
-  }
-
-  public void test_invalidParameter_setter() throws Exception {
-    prepareMyPanel("getter=getValue setter=noSuchMethod title=bar");
-    parse("<t:MyComponent/>");
-    // check warnings
-    List<EditorWarning> warnings = m_lastContext.getWarnings();
-    assertThat(warnings).hasSize(1);
-    assertThat(warnings.get(0).getMessage()).contains("Invalid").contains("setter");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static class MyModel extends CompositeInfo {
+		public MyModel(EditorContext context,
+				ComponentDescription description,
+				CreationSupport creationSupport) throws Exception {
+			super(context, description, creationSupport);
+		}
+
+		private String m_value = "abc";
+
+		public Object getValue() {
+			return m_value;
+		}
+
+		public void setValue(Object value) {
+			m_value = (String) value;
+		}
+	}
+
+	private void prepareMyPanel(String parameters) throws Exception {
+		prepareMyPanel0(parameters + " type=java.lang.String");
+	}
+
+	private void prepareMyPanel0(String parameters) throws Exception {
+		prepareMyComponent(ArrayUtils.EMPTY_STRING_ARRAY, new String[]{
+				"  <x-model class='" + MyModel.class.getName() + "'/>",
+				"  <parameters>",
+				"    <parameter name='x-modelMethodProperty " + parameters + "'/>",
+		"  </parameters>"});
+	}
+
+	public void test_valueProperty() throws Exception {
+		prepareMyPanel("getter=getValue setter=setValue title=value category=normal");
+		CompositeInfo panel = parse("<t:MyComponent/>");
+		refresh();
+		assertNoErrors();
+		// test "value" property
+		Property property = panel.getPropertyByTitle("value");
+		assertNotNull(property);
+		assertSame(PropertyCategory.NORMAL, property.getCategory());
+		assertSame(String.class, ((ITypedProperty) property).getType());
+		// current value
+		assertTrue(property.isModified());
+		assertEquals("abc", property.getValue());
+		// set new value
+		property.setValue("123");
+		assertEquals("123", property.getValue());
+		// next time same Property should be returned
+		assertSame(property, panel.getPropertyByTitle("value"));
+	}
+
+	public void test_primitiveType() throws Exception {
+		prepareMyPanel0("getter=getValue setter=setValue title=value type=int");
+		CompositeInfo panel = parse("<t:MyComponent/>");
+		refresh();
+		assertNoErrors();
+		// test "value" property
+		Property property = panel.getPropertyByTitle("value");
+		assertNotNull(property);
+		assertSame(IntegerPropertyEditor.INSTANCE, property.getEditor());
+		assertSame(int.class, ((ITypedProperty) property).getType());
+	}
+
+	public void test_propertyEditor_StringList() throws Exception {
+		prepareMyPanel("getter=getValue setter=setValue title=value editor=strings(A,B,C)");
+		CompositeInfo panel = parse("<t:MyComponent/>");
+		refresh();
+		assertNoErrors();
+		// test "value" property
+		Property property = panel.getPropertyByTitle("value");
+		assertNotNull(property);
+		// test its editor
+		{
+			PropertyEditor propertyEditor = property.getEditor();
+			assertInstanceOf(StringListPropertyEditor.class, propertyEditor);
+			String[] strings = (String[]) ReflectionUtils.getFieldObject(propertyEditor, "m_strings");
+			assertThat(strings).isEqualTo(new String[]{"A", "B", "C"});
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// No required parameter
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_noRequiredParameters_getter() throws Exception {
+		prepareMyPanel("_getter=getValue setter=setValue title=value");
+		parse("<t:MyComponent/>");
+		// check warnings
+		List<EditorWarning> warnings = m_lastContext.getWarnings();
+		assertThat(warnings).hasSize(1);
+		assertThat(warnings.get(0).getMessage()).contains("'getter'");
+	}
+
+	public void test_noRequiredParameters_setter() throws Exception {
+		prepareMyPanel("getter=getValue _setter=setValue title=value");
+		parse("<t:MyComponent/>");
+		// check warnings
+		List<EditorWarning> warnings = m_lastContext.getWarnings();
+		assertThat(warnings).hasSize(1);
+		assertThat(warnings.get(0).getMessage()).contains("'setter'");
+	}
+
+	public void test_noRequiredParameters_title() throws Exception {
+		prepareMyPanel("getter=getValue setter=setValue _title=value");
+		parse("<t:MyComponent/>");
+		// check warnings
+		List<EditorWarning> warnings = m_lastContext.getWarnings();
+		assertThat(warnings).hasSize(1);
+		assertThat(warnings.get(0).getMessage()).contains("'title'");
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Invalid value for parameter
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_invalidParameter_getter() throws Exception {
+		prepareMyPanel("getter=noSuchMethod setter=foo title=bar");
+		parse("<t:MyComponent/>");
+		// check warnings
+		List<EditorWarning> warnings = m_lastContext.getWarnings();
+		assertThat(warnings).hasSize(1);
+		assertThat(warnings.get(0).getMessage()).contains("Invalid").contains("getter");
+	}
+
+	public void test_invalidParameter_setter() throws Exception {
+		prepareMyPanel("getter=getValue setter=noSuchMethod title=bar");
+		parse("<t:MyComponent/>");
+		// check warnings
+		List<EditorWarning> warnings = m_lastContext.getWarnings();
+		assertThat(warnings).hasSize(1);
+		assertThat(warnings.get(0).getMessage()).contains("Invalid").contains("setter");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/generic/SimpleContainerAbstractGefTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/generic/SimpleContainerAbstractGefTest.java
index 03d04998e..c7857c79c 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/generic/SimpleContainerAbstractGefTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/generic/SimpleContainerAbstractGefTest.java
@@ -21,365 +21,365 @@
  * @author scheglov_ke
  */
 public abstract class SimpleContainerAbstractGefTest extends XwtGefTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Canvas
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_canvas_CREATE_filled() throws Exception {
-    prepareSimplePanel();
-    openEditor(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <t:SimplePanel wbp:name='panel'>",
-        "    <Button/>",
-        "  </t:SimplePanel>",
-        "</Shell>");
-    XmlObjectInfo panel = getObjectByName("panel");
-    // begin creating Button
-    loadButton();
-    // move on "panel": feedback appears, no command
-    canvas.moveTo(panel, 0, 0);
-    canvas.assertFeedbacks(canvas.getTargetPredicate(panel));
-    canvas.assertCommandNull();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Canvas
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_canvas_CREATE_filled() throws Exception {
+		prepareSimplePanel();
+		openEditor(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <t:SimplePanel wbp:name='panel'>",
+				"    <Button/>",
+				"  </t:SimplePanel>",
+				"</Shell>");
+		XmlObjectInfo panel = getObjectByName("panel");
+		// begin creating Button
+		loadButton();
+		// move on "panel": feedback appears, no command
+		canvas.moveTo(panel, 0, 0);
+		canvas.assertFeedbacks(canvas.getTargetPredicate(panel));
+		canvas.assertCommandNull();
+	}
 
-  public void test_canvas_CREATE_empty() throws Exception {
-    prepareSimplePanel();
-    openEditor(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <t:SimplePanel wbp:name='panel'/>",
-        "</Shell>");
-    XmlObjectInfo panel = getObjectByName("panel");
-    // begin creating Button
-    XmlObjectInfo newButton = loadButton();
-    // move on "panel": feedback appears, command not null
-    canvas.moveTo(panel, 0, 0);
-    canvas.assertFeedbacks(canvas.getTargetPredicate(panel));
-    canvas.assertCommandNotNull();
-    // click, so finish creation
-    canvas.click();
-    canvas.assertNoFeedbacks();
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <t:SimplePanel wbp:name='panel'>",
-        "    <Button/>",
-        "  </t:SimplePanel>",
-        "</Shell>");
-    canvas.assertPrimarySelected(newButton);
-  }
+	public void test_canvas_CREATE_empty() throws Exception {
+		prepareSimplePanel();
+		openEditor(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <t:SimplePanel wbp:name='panel'/>",
+				"</Shell>");
+		XmlObjectInfo panel = getObjectByName("panel");
+		// begin creating Button
+		XmlObjectInfo newButton = loadButton();
+		// move on "panel": feedback appears, command not null
+		canvas.moveTo(panel, 0, 0);
+		canvas.assertFeedbacks(canvas.getTargetPredicate(panel));
+		canvas.assertCommandNotNull();
+		// click, so finish creation
+		canvas.click();
+		canvas.assertNoFeedbacks();
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <t:SimplePanel wbp:name='panel'>",
+				"    <Button/>",
+				"  </t:SimplePanel>",
+				"</Shell>");
+		canvas.assertPrimarySelected(newButton);
+	}
 
-  public void test_canvas_PASTE() throws Exception {
-    prepareSimplePanel();
-    openEditor(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <t:SimplePanel wbp:name='panel'/>",
-        "  <Button wbp:name='rootButton'/>",
-        "</Shell>");
-    XmlObjectInfo panel = getObjectByName("panel");
-    XmlObjectInfo rootButton = getObjectByName("rootButton");
-    // copy/paste "rootButton"
-    doCopyPaste(rootButton);
-    // move on "panel": feedback appears, command not null
-    canvas.moveTo(panel, 0, 0);
-    canvas.assertFeedbacks(canvas.getTargetPredicate(panel));
-    canvas.assertCommandNotNull();
-    // click, so finish creation
-    canvas.click();
-    canvas.assertNoFeedbacks();
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <t:SimplePanel wbp:name='panel'>",
-        "    <Button/>",
-        "  </t:SimplePanel>",
-        "  <Button wbp:name='rootButton'/>",
-        "</Shell>");
-    // EditPart for "newButton" exists and selected
-    {
-      XmlObjectInfo newButton = GenericsUtils.getLast(panel.getChildrenXML());
-      canvas.assertPrimarySelected(newButton);
-    }
-  }
+	public void test_canvas_PASTE() throws Exception {
+		prepareSimplePanel();
+		openEditor(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <t:SimplePanel wbp:name='panel'/>",
+				"  <Button wbp:name='rootButton'/>",
+				"</Shell>");
+		XmlObjectInfo panel = getObjectByName("panel");
+		XmlObjectInfo rootButton = getObjectByName("rootButton");
+		// copy/paste "rootButton"
+		doCopyPaste(rootButton);
+		// move on "panel": feedback appears, command not null
+		canvas.moveTo(panel, 0, 0);
+		canvas.assertFeedbacks(canvas.getTargetPredicate(panel));
+		canvas.assertCommandNotNull();
+		// click, so finish creation
+		canvas.click();
+		canvas.assertNoFeedbacks();
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <t:SimplePanel wbp:name='panel'>",
+				"    <Button/>",
+				"  </t:SimplePanel>",
+				"  <Button wbp:name='rootButton'/>",
+				"</Shell>");
+		// EditPart for "newButton" exists and selected
+		{
+			XmlObjectInfo newButton = GenericsUtils.getLast(panel.getChildrenXML());
+			canvas.assertPrimarySelected(newButton);
+		}
+	}
 
-  public void test_canvas_ADD_1() throws Exception {
-    prepareSimplePanel();
-    openEditor(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <t:SimplePanel wbp:name='panel'/>",
-        "  <Button wbp:name='rootButton'/>",
-        "</Shell>");
-    XmlObjectInfo panel = getObjectByName("panel");
-    XmlObjectInfo rootButton = getObjectByName("rootButton");
-    // drag "rootButton"
-    canvas.beginDrag(rootButton).dragTo(panel);
-    canvas.assertFeedbacks(canvas.getTargetPredicate(panel));
-    canvas.assertCommandNotNull();
-    // done drag, so finish ADD
-    canvas.endDrag();
-    canvas.assertNoFeedbacks();
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <t:SimplePanel wbp:name='panel'>",
-        "    <Button wbp:name='rootButton'/>",
-        "  </t:SimplePanel>",
-        "</Shell>");
-    canvas.assertPrimarySelected(rootButton);
-  }
+	public void test_canvas_ADD_1() throws Exception {
+		prepareSimplePanel();
+		openEditor(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <t:SimplePanel wbp:name='panel'/>",
+				"  <Button wbp:name='rootButton'/>",
+				"</Shell>");
+		XmlObjectInfo panel = getObjectByName("panel");
+		XmlObjectInfo rootButton = getObjectByName("rootButton");
+		// drag "rootButton"
+		canvas.beginDrag(rootButton).dragTo(panel);
+		canvas.assertFeedbacks(canvas.getTargetPredicate(panel));
+		canvas.assertCommandNotNull();
+		// done drag, so finish ADD
+		canvas.endDrag();
+		canvas.assertNoFeedbacks();
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <t:SimplePanel wbp:name='panel'>",
+				"    <Button wbp:name='rootButton'/>",
+				"  </t:SimplePanel>",
+				"</Shell>");
+		canvas.assertPrimarySelected(rootButton);
+	}
 
-  public void test_canvas_ADD_2() throws Exception {
-    prepareSimplePanel();
-    openEditor(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <t:SimplePanel wbp:name='panel'/>",
-        "  <Button wbp:name='button_1'/>",
-        "  <Button wbp:name='button_2'/>",
-        "</Shell>");
-    XmlObjectInfo panel = getObjectByName("panel");
-    XmlObjectInfo button_1 = getObjectByName("button_1");
-    XmlObjectInfo button_2 = getObjectByName("button_2");
-    // drag "button_1" and "button_2"
-    canvas.select(button_2, button_1);
-    canvas.beginDrag(button_1, 100, 5).dragTo(panel, 10, 10);
-    canvas.assertFeedbacks(canvas.getTargetPredicate(panel));
-    canvas.assertCommandNull();
-  }
+	public void test_canvas_ADD_2() throws Exception {
+		prepareSimplePanel();
+		openEditor(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <t:SimplePanel wbp:name='panel'/>",
+				"  <Button wbp:name='button_1'/>",
+				"  <Button wbp:name='button_2'/>",
+				"</Shell>");
+		XmlObjectInfo panel = getObjectByName("panel");
+		XmlObjectInfo button_1 = getObjectByName("button_1");
+		XmlObjectInfo button_2 = getObjectByName("button_2");
+		// drag "button_1" and "button_2"
+		canvas.select(button_2, button_1);
+		canvas.beginDrag(button_1, 100, 5).dragTo(panel, 10, 10);
+		canvas.assertFeedbacks(canvas.getTargetPredicate(panel));
+		canvas.assertCommandNull();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tree
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_tree_CREATE_filled_1() throws Exception {
-    prepareSimplePanel();
-    openEditor(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <t:SimplePanel wbp:name='panel'>",
-        "    <Button wbp:name='existingButton'/>",
-        "  </t:SimplePanel>",
-        "</Shell>");
-    XmlObjectInfo existingButton = getObjectByName("existingButton");
-    // begin creating Button
-    loadButton();
-    // move before "existingButton": feedback appears, command null
-    tree.moveBefore(existingButton);
-    tree.assertFeedback_before(existingButton);
-    tree.assertCommandNull();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tree
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_tree_CREATE_filled_1() throws Exception {
+		prepareSimplePanel();
+		openEditor(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <t:SimplePanel wbp:name='panel'>",
+				"    <Button wbp:name='existingButton'/>",
+				"  </t:SimplePanel>",
+				"</Shell>");
+		XmlObjectInfo existingButton = getObjectByName("existingButton");
+		// begin creating Button
+		loadButton();
+		// move before "existingButton": feedback appears, command null
+		tree.moveBefore(existingButton);
+		tree.assertFeedback_before(existingButton);
+		tree.assertCommandNull();
+	}
 
-  public void test_tree_CREATE_filled_2() throws Exception {
-    prepareSimplePanel();
-    openEditor(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <t:SimplePanel wbp:name='panel'>",
-        "    <Button wbp:name='existingButton'/>",
-        "  </t:SimplePanel>",
-        "</Shell>");
-    XmlObjectInfo panel = getObjectByName("panel");
-    // begin creating Button
-    loadButton();
-    // move on "panel": feedback appears, command null
-    tree.moveOn(panel);
-    tree.assertFeedback_on(panel);
-    tree.assertCommandNull();
-  }
+	public void test_tree_CREATE_filled_2() throws Exception {
+		prepareSimplePanel();
+		openEditor(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <t:SimplePanel wbp:name='panel'>",
+				"    <Button wbp:name='existingButton'/>",
+				"  </t:SimplePanel>",
+				"</Shell>");
+		XmlObjectInfo panel = getObjectByName("panel");
+		// begin creating Button
+		loadButton();
+		// move on "panel": feedback appears, command null
+		tree.moveOn(panel);
+		tree.assertFeedback_on(panel);
+		tree.assertCommandNull();
+	}
 
-  public void test_tree_CREATE_empty() throws Exception {
-    prepareSimplePanel();
-    openEditor(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <t:SimplePanel wbp:name='panel'/>",
-        "</Shell>");
-    XmlObjectInfo panel = getObjectByName("panel");
-    // begin creating Button
-    XmlObjectInfo newButton = loadButton();
-    // move on "panel": feedback appears, command not null
-    tree.moveOn(panel);
-    tree.assertFeedback_on(panel);
-    tree.assertCommandNotNull();
-    // click, so finish creation
-    tree.click();
-    tree.assertFeedback_empty();
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <t:SimplePanel wbp:name='panel'>",
-        "    <Button/>",
-        "  </t:SimplePanel>",
-        "</Shell>");
-    tree.assertPrimarySelected(newButton);
-  }
+	public void test_tree_CREATE_empty() throws Exception {
+		prepareSimplePanel();
+		openEditor(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <t:SimplePanel wbp:name='panel'/>",
+				"</Shell>");
+		XmlObjectInfo panel = getObjectByName("panel");
+		// begin creating Button
+		XmlObjectInfo newButton = loadButton();
+		// move on "panel": feedback appears, command not null
+		tree.moveOn(panel);
+		tree.assertFeedback_on(panel);
+		tree.assertCommandNotNull();
+		// click, so finish creation
+		tree.click();
+		tree.assertFeedback_empty();
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <t:SimplePanel wbp:name='panel'>",
+				"    <Button/>",
+				"  </t:SimplePanel>",
+				"</Shell>");
+		tree.assertPrimarySelected(newButton);
+	}
 
-  public void test_tree_PASTE() throws Exception {
-    prepareSimplePanel();
-    openEditor(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <t:SimplePanel wbp:name='panel'/>",
-        "  <Button wbp:name='rootButton'/>",
-        "</Shell>");
-    XmlObjectInfo panel = getObjectByName("panel");
-    XmlObjectInfo rootButton = getObjectByName("rootButton");
-    // copy/paste "rootButton"
-    doCopyPaste(rootButton);
-    // move on "panel": feedback appears, command not null
-    tree.moveOn(panel);
-    tree.assertFeedback_on(panel);
-    tree.assertCommandNotNull();
-    // click, so finish creation
-    tree.click();
-    tree.assertFeedback_empty();
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <t:SimplePanel wbp:name='panel'>",
-        "    <Button/>",
-        "  </t:SimplePanel>",
-        "  <Button wbp:name='rootButton'/>",
-        "</Shell>");
-    // EditPart for "newButton" exists and selected
-    {
-      XmlObjectInfo newButton = GenericsUtils.getLast(panel.getChildrenXML());
-      tree.assertPrimarySelected(newButton);
-    }
-  }
+	public void test_tree_PASTE() throws Exception {
+		prepareSimplePanel();
+		openEditor(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <t:SimplePanel wbp:name='panel'/>",
+				"  <Button wbp:name='rootButton'/>",
+				"</Shell>");
+		XmlObjectInfo panel = getObjectByName("panel");
+		XmlObjectInfo rootButton = getObjectByName("rootButton");
+		// copy/paste "rootButton"
+		doCopyPaste(rootButton);
+		// move on "panel": feedback appears, command not null
+		tree.moveOn(panel);
+		tree.assertFeedback_on(panel);
+		tree.assertCommandNotNull();
+		// click, so finish creation
+		tree.click();
+		tree.assertFeedback_empty();
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <t:SimplePanel wbp:name='panel'>",
+				"    <Button/>",
+				"  </t:SimplePanel>",
+				"  <Button wbp:name='rootButton'/>",
+				"</Shell>");
+		// EditPart for "newButton" exists and selected
+		{
+			XmlObjectInfo newButton = GenericsUtils.getLast(panel.getChildrenXML());
+			tree.assertPrimarySelected(newButton);
+		}
+	}
 
-  public void test_tree_MOVE() throws Exception {
-    prepareSimplePanel();
-    openEditor(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <t:SimplePanel wbp:name='panel'>",
-        "    <Button wbp:name='button'/>",
-        "  </t:SimplePanel>",
-        "</Shell>");
-    XmlObjectInfo panel = getObjectByName("panel");
-    XmlObjectInfo button = getObjectByName("button");
-    // drag "button"
-    tree.startDrag(button);
-    tree.dragOn(panel);
-    tree.assertFeedback_on(panel);
-    tree.assertCommandNull();
-  }
+	public void test_tree_MOVE() throws Exception {
+		prepareSimplePanel();
+		openEditor(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <t:SimplePanel wbp:name='panel'>",
+				"    <Button wbp:name='button'/>",
+				"  </t:SimplePanel>",
+				"</Shell>");
+		XmlObjectInfo panel = getObjectByName("panel");
+		XmlObjectInfo button = getObjectByName("button");
+		// drag "button"
+		tree.startDrag(button);
+		tree.dragOn(panel);
+		tree.assertFeedback_on(panel);
+		tree.assertCommandNull();
+	}
 
-  public void test_tree_ADD() throws Exception {
-    prepareSimplePanel();
-    openEditor(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <t:SimplePanel wbp:name='panel'/>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    XmlObjectInfo panel = getObjectByName("panel");
-    XmlObjectInfo button = getObjectByName("button");
-    // drag "button"
-    tree.startDrag(button);
-    tree.dragOn(panel);
-    tree.assertFeedback_on(panel);
-    tree.assertCommandNotNull();
-    // done drag, so finish ADD
-    tree.endDrag();
-    tree.assertFeedback_empty();
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <t:SimplePanel wbp:name='panel'>",
-        "    <Button wbp:name='button'/>",
-        "  </t:SimplePanel>",
-        "</Shell>");
-    tree.assertPrimarySelected(button);
-  }
+	public void test_tree_ADD() throws Exception {
+		prepareSimplePanel();
+		openEditor(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <t:SimplePanel wbp:name='panel'/>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		XmlObjectInfo panel = getObjectByName("panel");
+		XmlObjectInfo button = getObjectByName("button");
+		// drag "button"
+		tree.startDrag(button);
+		tree.dragOn(panel);
+		tree.assertFeedback_on(panel);
+		tree.assertCommandNotNull();
+		// done drag, so finish ADD
+		tree.endDrag();
+		tree.assertFeedback_empty();
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <t:SimplePanel wbp:name='panel'>",
+				"    <Button wbp:name='button'/>",
+				"  </t:SimplePanel>",
+				"</Shell>");
+		tree.assertPrimarySelected(button);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected abstract void prepareSimplePanel() throws Exception;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected abstract void prepareSimplePanel() throws Exception;
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/generic/SimpleContainerGefTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/generic/SimpleContainerGefTest.java
index f2990be60..0de7b99b2 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/generic/SimpleContainerGefTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/generic/SimpleContainerGefTest.java
@@ -18,13 +18,13 @@
  * @author scheglov_ke
  */
 public class SimpleContainerGefTest extends SimpleContainerAbstractGefTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void prepareSimplePanel() throws Exception {
-    SimpleContainerModelTest.prepareSimplePanel();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void prepareSimplePanel() throws Exception {
+		SimpleContainerModelTest.prepareSimplePanel();
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/generic/SimpleContainerLayoutGefTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/generic/SimpleContainerLayoutGefTest.java
index 14d9e8c02..bc32e06e2 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/generic/SimpleContainerLayoutGefTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/generic/SimpleContainerLayoutGefTest.java
@@ -28,45 +28,45 @@
  * @author scheglov_ke
  */
 public class SimpleContainerLayoutGefTest extends SimpleContainerAbstractGefTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static final class MyLayout_Info extends LayoutInfo {
-    public MyLayout_Info(EditorContext context,
-        ComponentDescription description,
-        CreationSupport creationSupport) throws Exception {
-      super(context, description, creationSupport);
-    }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static final class MyLayout_Info extends LayoutInfo {
+		public MyLayout_Info(EditorContext context,
+				ComponentDescription description,
+				CreationSupport creationSupport) throws Exception {
+			super(context, description, creationSupport);
+		}
 
-    public List<ObjectInfo> getSimpleContainerChildren() {
-      return getComposite().getChildren();
-    }
+		public List<ObjectInfo> getSimpleContainerChildren() {
+			return getComposite().getChildren();
+		}
 
-    public void command_CREATE(Object component) throws Exception {
-      XmlObjectUtils.add((XmlObjectInfo) component, Associations.direct(), getComposite(), null);
-    }
+		public void command_CREATE(Object component) throws Exception {
+			XmlObjectUtils.add((XmlObjectInfo) component, Associations.direct(), getComposite(), null);
+		}
 
-    public void command_ADD(Object component) throws Exception {
-      XmlObjectUtils.move((XmlObjectInfo) component, Associations.direct(), getComposite(), null);
-    }
-  }
+		public void command_ADD(Object component) throws Exception {
+			XmlObjectUtils.move((XmlObjectInfo) component, Associations.direct(), getComposite(), null);
+		}
+	}
 
-  @Override
-  protected void prepareSimplePanel() throws Exception {
-    SimpleContainerModelTest.prepareSimplePanel_classes();
-    setFileContentSrc(
-        "test/MyLayout.wbp-component.xml",
-        getSourceDQ(
-            "<?xml version='1.0' encoding='UTF-8'?>",
-            "<component xmlns='http://www.eclipse.org/wb/WBPComponent'>",
-            "  <x-model class='" + MyLayout_Info.class.getName() + "'/>",
-            "  <parameters>",
-            "    <parameter name='simpleContainer'>true</parameter>",
-            "    <parameter name='simpleContainer.component'>org.eclipse.swt.widgets.Control</parameter>",
-            "  </parameters>",
-            "</component>"));
-    waitForAutoBuild();
-  }
+	@Override
+	protected void prepareSimplePanel() throws Exception {
+		SimpleContainerModelTest.prepareSimplePanel_classes();
+		setFileContentSrc(
+				"test/MyLayout.wbp-component.xml",
+				getSourceDQ(
+						"<?xml version='1.0' encoding='UTF-8'?>",
+						"<component xmlns='http://www.eclipse.org/wb/WBPComponent'>",
+						"  <x-model class='" + MyLayout_Info.class.getName() + "'/>",
+						"  <parameters>",
+						"    <parameter name='simpleContainer'>true</parameter>",
+						"    <parameter name='simpleContainer.component'>org.eclipse.swt.widgets.Control</parameter>",
+						"  </parameters>",
+						"</component>"));
+		waitForAutoBuild();
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/generic/SimpleContainerModelTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/generic/SimpleContainerModelTest.java
index 8cc347883..463223906 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/generic/SimpleContainerModelTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/generic/SimpleContainerModelTest.java
@@ -51,568 +51,568 @@
  * @author scheglov_ke
  */
 public class SimpleContainerModelTest extends AbstractCoreTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Association
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * No special container association, so "direct" is used.
-   */
-  public void test_getConfigurations_association_implicitDirect() throws Exception {
-    List<SimpleContainerConfiguration> configurations =
-        getConfigurations(true, new String[][]{
-            {"simpleContainer", "true"},
-            {"simpleContainer.component", "org.eclipse.swt.widgets.Control"},});
-    assertThat(configurations).hasSize(1);
-    assertConfiguration(configurations.get(0), "org.eclipse.swt.widgets.Control", "direct");
-  }
-
-  /**
-   * The "property" association
-   */
-  public void test_getConfigurations_association_property() throws Exception {
-    List<SimpleContainerConfiguration> configurations =
-        getConfigurations(true, new String[][]{
-            {"simpleContainer", "true"},
-            {"simpleContainer.x-association", "property myProperty"},
-            {"simpleContainer.component", "org.eclipse.swt.widgets.Control"},});
-    assertThat(configurations).hasSize(1);
-    assertConfiguration(
-        configurations.get(0),
-        "org.eclipse.swt.widgets.Control",
-        "property myProperty");
-  }
-
-  /**
-   * The "inter" association.
-   */
-  public void test_getConfigurations_association_inter() throws Exception {
-    List<SimpleContainerConfiguration> configurations =
-        getConfigurations(true, new String[][]{
-            {"simpleContainer", "true"},
-            {"simpleContainer.x-association", "inter myName attrA='a a' attrB='b'"},
-            {"simpleContainer.component", "java.awt.Component"},});
-    assertThat(configurations).hasSize(1);
-    assertConfiguration(
-        configurations.get(0),
-        "java.awt.Component",
-        "inter myName {attrA=a a, attrB=b}");
-  }
-
-  public void test_getConfigurations_association_bad() throws Exception {
-    try {
-      getConfigurations(true, new String[][]{
-          {"simpleContainer", "true"},
-          {"simpleContainer.x-association", "bad association text"},
-          {"simpleContainer.component", "org.eclipse.swt.widgets.Control"},});
-      fail();
-    } catch (Throwable e) {
-      Throwable rootCause = DesignerExceptionUtils.getRootCause(e);
-      assertThat(rootCause).isExactlyInstanceOf(AssertionFailedException.class);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // SimpleContainer_Factory
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Ask "forCanvas", return common configuration for both - canvas/tree.
-   */
-  public void test_getConfigurations_forCanvas_common() throws Exception {
-    List<SimpleContainerConfiguration> configurations =
-        getConfigurations(true, new String[][]{
-            {"simpleContainer", "true"},
-            {"simpleContainer.component", "org.eclipse.swt.widgets.Control"},});
-    assertThat(configurations).hasSize(1);
-    assertConfiguration(configurations.get(0), "org.eclipse.swt.widgets.Control", "direct");
-  }
-
-  /**
-   * Ask "forCanvas", return explicit "forCanvas".
-   */
-  public void test_getConfigurations_forCanvas_explicit() throws Exception {
-    List<SimpleContainerConfiguration> configurations =
-        getConfigurations(true, new String[][]{
-            {"simpleContainer.canvas", "true"},
-            {"simpleContainer.canvas.component", "org.eclipse.swt.widgets.Control"},});
-    assertThat(configurations).hasSize(1);
-    assertConfiguration(configurations.get(0), "org.eclipse.swt.widgets.Control", "direct");
-  }
-
-  /**
-   * Ask "forCanvas", but only "forTree" exist.
-   */
-  public void test_getConfigurations_forCanvas_onlyForTree() throws Exception {
-    List<SimpleContainerConfiguration> configurations =
-        getConfigurations(true, new String[][]{
-            {"simpleContainer.tree", "true"},
-            {"simpleContainer.tree.component", "org.eclipse.swt.widgets.Control"},});
-    assertThat(configurations).isEmpty();
-  }
-
-  /**
-   * Ask "forTree", return common configuration for both - canvas/tree.
-   */
-  public void test_getConfigurations_forTree_common() throws Exception {
-    List<SimpleContainerConfiguration> configurations =
-        getConfigurations(false, new String[][]{
-            {"simpleContainer", "true"},
-            {"simpleContainer.component", "org.eclipse.swt.widgets.Control"},});
-    assertThat(configurations).hasSize(1);
-  }
-
-  /**
-   * Ask "forTree", return explicit "forTree".
-   */
-  public void test_getConfigurations_forTree_explicit() throws Exception {
-    List<SimpleContainerConfiguration> configurations =
-        getConfigurations(false, new String[][]{
-            {"simpleContainer.tree", "true"},
-            {"simpleContainer.tree.component", "org.eclipse.swt.widgets.Control"},});
-    assertThat(configurations).hasSize(1);
-  }
-
-  /**
-   * Several different configurations.
-   */
-  public void test_getConfigurations_3_count() throws Exception {
-    List<SimpleContainerConfiguration> configurations =
-        getConfigurations(true, new String[][]{
-            {"simpleContainer", "true"},
-            {"simpleContainer.component", "org.eclipse.swt.widgets.Control"},
-            {"simpleContainer.1", "true"},
-            {"simpleContainer.1.component", "org.eclipse.swt.widgets.Button"},
-            {"simpleContainer.5", "true"},
-            {"simpleContainer.5.component", "org.eclipse.swt.widgets.Text"},});
-    assertThat(configurations).hasSize(3);
-    assertConfiguration(configurations.get(0), "org.eclipse.swt.widgets.Control", "direct");
-    assertConfiguration(configurations.get(1), "org.eclipse.swt.widgets.Button", "direct");
-    assertConfiguration(configurations.get(2), "org.eclipse.swt.widgets.Text", "direct");
-  }
-
-  /**
-   * Ignore if <code>simpleContainer</code> value is not <code>true</code>.
-   */
-  public void test_getConfigurations_ignoreFalse() throws Exception {
-    List<SimpleContainerConfiguration> configurations =
-        getConfigurations(true, new String[][]{
-            {"simpleContainer", "false"},
-            {"simpleContainer.component", "org.eclipse.swt.widgets.Control"},});
-    assertThat(configurations).hasSize(0);
-  }
-
-  /**
-   * Use default component/reference validator.
-   */
-  public void test_getConfigurations_defaultValidators() throws Exception {
-    List<SimpleContainerConfiguration> configurations =
-        getConfigurations(true, new String[][]{
-            {"simpleContainer", "true"},
-            {"simpleContainer.defaultComponent", "org.eclipse.swt.widgets.Control"},});
-    assertThat(configurations).hasSize(1);
-    assertConfiguration(configurations.get(0), "org.eclipse.swt.widgets.Control", "direct");
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Container validation MVEL scripts
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_getConfigurations_validateContainer_isContainerType() throws Exception {
-    List<SimpleContainerConfiguration> configurations =
-        getConfigurations(true, new String[][]{
-            {"simpleContainer.canvas", "isContainerType('org.eclipse.swt.widgets.Control')"},
-            {"simpleContainer.canvas.component", "org.eclipse.swt.widgets.Control"},});
-    assertThat(configurations).hasSize(1);
-    assertConfiguration(configurations.get(0), "org.eclipse.swt.widgets.Control", "direct");
-  }
-
-  public void test_getConfigurations_validateContainer_scriptToFalse() throws Exception {
-    List<SimpleContainerConfiguration> configurations =
-        getConfigurations(true, new String[][]{
-            {"simpleContainer.canvas", "1 == 2"},
-            {"simpleContainer.canvas.component", "org.eclipse.swt.widgets.Control"},});
-    assertThat(configurations).isEmpty();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Configurations access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static void assertConfiguration(SimpleContainerConfiguration configuration,
-      String expectedComponentValidator,
-      String expectedAssociation) {
-    if (expectedComponentValidator != null) {
-      assertEquals(
-          expectedComponentValidator,
-          getValidatorString(configuration.getComponentValidator()));
-      assertEquals(expectedAssociation, getAssociationString(configuration));
-    }
-  }
-
-  private static String getValidatorString(Object validator) {
-    return validator.toString();
-  }
-
-  private static String getAssociationString(SimpleContainerConfiguration configuration) {
-    return configuration.getAssociation().toString();
-  }
-
-  private List<SimpleContainerConfiguration> getConfigurations(boolean forCanvas,
-      String[][] parameters) throws Exception {
-    String[] parameterLines = new String[parameters.length];
-    for (int i = 0; i < parameters.length; i++) {
-      String[] parameterPair = parameters[i];
-      assertEquals(2, parameterPair.length);
-      parameterLines[i] =
-          MessageFormat.format(
-              "    <parameter name=''{0}''>{1}</parameter>",
-              parameterPair[0],
-              parameterPair[1]);
-    }
-    // prepare description
-    prepareMyComponent();
-    setFileContentSrc(
-        "test/MyComponent.wbp-component.xml",
-        getSource3(new String[]{
-            "<?xml version='1.0' encoding='UTF-8'?>",
-            "<component xmlns='http://www.eclipse.org/wb/WBPComponent'>",
-            "  <parameters>"}, parameterLines, new String[]{"  </parameters>", "</component>"}));
-    waitForAutoBuild();
-    // parse
-    XmlObjectInfo panel = parse("<t:MyComponent/>");
-    // get configurations
-    List<SimpleContainerConfiguration> configurations =
-        new SimpleContainerFactory(panel, forCanvas).getConfigurations();
-    for (Iterator<SimpleContainerConfiguration> I = configurations.iterator(); I.hasNext();) {
-      SimpleContainerConfiguration configuration = I.next();
-      String validatorString = getValidatorString(configuration.getComponentValidator());
-      if (validatorString.endsWith(".DragSource")
-          || validatorString.endsWith(".DropTarget")
-          || validatorString.contains("isPopup()")) {
-        I.remove();
-      }
-    }
-    return configurations;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Duck typing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static class MySimpleContainer extends XmlObjectInfo {
-    public MySimpleContainer(EditorContext context,
-        ComponentDescription description,
-        CreationSupport creationSupport) throws Exception {
-      super(context, description, creationSupport);
-    }
-
-    public List<ObjectInfo> getSimpleContainerChildren() {
-      return ImmutableList.of();
-    }
-
-    public void command_CREATE(Object component) {
-    }
-
-    public void command_ADD(Object component) {
-    }
-  }
-
-  /**
-   * Create/Move operations of {@link SimpleContainerConfigurable} should try to find corresponding
-   * CREATE/MOVE methods in container {@link XmlObjectInfo} and use them instead of generic
-   * implementation.
-   */
-  public void test_duckTyping() throws Exception {
-    final XmlObjectInfo component = mock(XmlObjectInfo.class);
-    final MySimpleContainer container = mock(MySimpleContainer.class);
-    final InOrder inOrder = inOrder(component, container);
-    final SimpleContainer simpleContainer;
-    {
-      ContainerObjectValidator validator = ContainerObjectValidators.alwaysTrue();
-      Association association = Associations.direct();
-      SimpleContainerConfiguration configuration =
-          new SimpleContainerConfiguration(validator, association);
-      simpleContainer = new SimpleContainerConfigurable(container, configuration);
-    }
-    // isEmpty() == true, because no existing children
-    when(container.getSimpleContainerChildren()).thenReturn(ImmutableList.<ObjectInfo>of());
-    //
-    assertTrue(simpleContainer.isEmpty());
-    //
-    inOrder.verify(container).getSimpleContainerChildren();
-    inOrder.verifyNoMoreInteractions();
-    // isEmpty() == false, because return existing child
-    clearInvocations(container);
-    //
-    TestObjectInfo existingChild = new TestObjectInfo();
-    when(container.getSimpleContainerChildren()).thenReturn(ImmutableList.<ObjectInfo>of(existingChild));
-    //
-    assertFalse(simpleContainer.isEmpty());
-    //
-    inOrder.verify(container).getSimpleContainerChildren();
-    inOrder.verifyNoMoreInteractions();
-    // getChild() == null, because no existing children
-    clearInvocations(container);
-    //
-    when(container.getSimpleContainerChildren()).thenReturn(ImmutableList.<ObjectInfo>of());
-    //
-    assertSame(null, simpleContainer.getChild());
-    //
-    inOrder.verify(container).getSimpleContainerChildren();
-    inOrder.verifyNoMoreInteractions();
-    // getChild() != null, because return existing child
-    clearInvocations(container);
-    //
-    when(container.getSimpleContainerChildren()).thenReturn(ImmutableList.<ObjectInfo>of(existingChild));
-    //
-    assertSame(existingChild, simpleContainer.getChild());
-    //
-    inOrder.verify(container).getSimpleContainerChildren();
-    inOrder.verifyNoMoreInteractions();
-    // CREATE
-    clearInvocations(container);
-    //
-    simpleContainer.command_CREATE(component);
-    //
-    inOrder.verify(container).command_CREATE(component);
-    inOrder.verifyNoMoreInteractions();
-    // MOVE
-    clearInvocations(container);
-    //
-    simpleContainer.command_ADD(component);
-    //
-    inOrder.verify(container).command_ADD(component);
-    inOrder.verifyNoMoreInteractions();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Validation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_validateMethods() throws Exception {
-    final XmlObjectInfo container = mock(XmlObjectInfo.class);
-    final XmlObjectInfo component = mock(XmlObjectInfo.class);
-    final SimpleContainerConfiguration configuration = mock(SimpleContainerConfiguration.class);
-    final InOrder inOrder = inOrder(container, component, configuration);
-    final SimpleContainer simpleContainer =
-        new SimpleContainerConfigurable(container, configuration);
-    // validateComponent() = true
-    when(configuration.getComponentValidator()).thenReturn(ContainerObjectValidators.alwaysTrue());
-    //
-    assertTrue(simpleContainer.validateComponent(component));
-    //
-    inOrder.verify(configuration).getComponentValidator();
-    inOrder.verifyNoMoreInteractions();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Models
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link SimpleContainerConfigurable#command_CREATE(Object, Object)}.
-   */
-  public void test_CREATE() throws Exception {
-    prepareSimplePanel();
-    XmlObjectInfo panel =
-        parse(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<t:SimplePanel/>");
-    // prepare SimpleContainer
-    SimpleContainer simpleContainer = new SimpleContainerFactory(panel, true).get().get(0);
-    assertTrue(simpleContainer.isEmpty());
-    // do CREATE
-    XmlObjectInfo newButton = createButton();
-    {
-      assertTrue(simpleContainer.validateComponent(newButton));
-    }
-    simpleContainer.command_CREATE(newButton);
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<t:SimplePanel>",
-        "  <Button/>",
-        "</t:SimplePanel>");
-    assertFalse(simpleContainer.isEmpty());
-  }
-
-  /**
-   * Ensure that we can: create, delete and create new component again.
-   */
-  public void test_CREATE_twoTimes() throws Exception {
-    prepareSimplePanel();
-    XmlObjectInfo panel =
-        parse(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<t:SimplePanel/>");
-    // prepare SimpleContainer
-    SimpleContainer simpleContainer = new SimpleContainerFactory(panel, true).get().get(0);
-    assertTrue(simpleContainer.isEmpty());
-    // create/delete
-    {
-      XmlObjectInfo newButton = createButton();
-      simpleContainer.command_CREATE(newButton);
-      newButton.delete();
-    }
-    // create again
-    {
-      XmlObjectInfo newButton = createButton();
-      simpleContainer.command_CREATE(newButton);
-    }
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<t:SimplePanel>",
-        "  <Button/>",
-        "</t:SimplePanel>");
-  }
-
-  /**
-   * Test for {@link SimpleContainerConfigurable#command_absolute_MOVE(Object, Object)}.
-   */
-  public void test_MOVE() throws Exception {
-    prepareSimplePanel();
-    parse(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <t:SimplePanel wbp:name='simplePanel'/>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    XmlObjectInfo simplePanel = getObjectByName("simplePanel");
-    XmlObjectInfo button = getObjectByName("button");
-    // prepare SimpleContainer
-    SimpleContainer simpleContainer = new SimpleContainerFactory(simplePanel, true).get().get(0);
-    // do MOVE
-    simpleContainer.command_ADD(button);
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <t:SimplePanel wbp:name='simplePanel'>",
-        "    <Button wbp:name='button'/>",
-        "  </t:SimplePanel>",
-        "</Shell>");
-  }
-
-  /**
-   * {@link SimpleContainer} should automatically copy its child into clipboard.
-   */
-  public void test_clipboard() throws Exception {
-    prepareSimplePanel();
-    CompositeInfo shell =
-        parse(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <FillLayout/>",
-            "  </Shell.layout>",
-            "  <t:SimplePanel wbp:name='panel'>",
-            "    <Button text='my Button'/>",
-            "  </t:SimplePanel>",
-            "</Shell>");
-    refresh();
-    // prepare memento
-    XmlObjectMemento memento;
-    {
-      XmlObjectInfo panel = getObjectByName("panel");
-      memento = XmlObjectMemento.createMemento(panel);
-    }
-    // do paste
-    ControlInfo newPanel = (ControlInfo) memento.create(shell);
-    shell.getLayout().command_CREATE(newPanel, null);
-    memento.apply();
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <t:SimplePanel wbp:name='panel'>",
-        "    <Button text='my Button'/>",
-        "  </t:SimplePanel>",
-        "  <t:SimplePanel>",
-        "    <Button text='my Button'/>",
-        "  </t:SimplePanel>",
-        "</Shell>");
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  static void prepareSimplePanel() throws Exception {
-    prepareSimplePanel_classes();
-    setFileContentSrc(
-        "test/SimplePanel.wbp-component.xml",
-        getSourceDQ(
-            "<?xml version='1.0' encoding='UTF-8'?>",
-            "<component xmlns='http://www.eclipse.org/wb/WBPComponent'>",
-            "  <parameters>",
-            "    <parameter name='simpleContainer'>true</parameter>",
-            "    <parameter name='simpleContainer.component'>org.eclipse.swt.widgets.Control</parameter>",
-            "  </parameters>",
-            "</component>"));
-    waitForAutoBuild();
-  }
-
-  static void prepareSimplePanel_classes() throws Exception {
-    setFileContentSrc(
-        "test/MyLayout.java",
-        getSource(
-            "package test;",
-            "import org.eclipse.swt.graphics.Point;",
-            "import org.eclipse.swt.widgets.*;",
-            "public class MyLayout extends Layout {",
-            "  protected Point computeSize(Composite composite, int wHint, int hHint, boolean flushCache) {",
-            "    return new Point(200, 100);",
-            "  }",
-            "  protected void layout(Composite parent, boolean flushCache) {",
-            "    Control[] children = parent.getChildren();",
-            "    for (int i = 0; i < children.length; i++) {",
-            "      Control child = children[i];",
-            "      child.setBounds(10, 10, parent.getSize().x - 20, parent.getSize().y - 20);",
-            "    }",
-            "  }",
-            "}"));
-    setFileContentSrc(
-        "test/SimplePanel.java",
-        getSourceDQ(
-            "package test;",
-            "import org.eclipse.swt.widgets.*;",
-            "public class SimplePanel extends Composite {",
-            "  public SimplePanel(Composite parent, int style) {",
-            "    super(parent, style);",
-            "    setLayout(new MyLayout());",
-            "  }",
-            "}"));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Association
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * No special container association, so "direct" is used.
+	 */
+	public void test_getConfigurations_association_implicitDirect() throws Exception {
+		List<SimpleContainerConfiguration> configurations =
+				getConfigurations(true, new String[][]{
+					{"simpleContainer", "true"},
+					{"simpleContainer.component", "org.eclipse.swt.widgets.Control"},});
+		assertThat(configurations).hasSize(1);
+		assertConfiguration(configurations.get(0), "org.eclipse.swt.widgets.Control", "direct");
+	}
+
+	/**
+	 * The "property" association
+	 */
+	public void test_getConfigurations_association_property() throws Exception {
+		List<SimpleContainerConfiguration> configurations =
+				getConfigurations(true, new String[][]{
+					{"simpleContainer", "true"},
+					{"simpleContainer.x-association", "property myProperty"},
+					{"simpleContainer.component", "org.eclipse.swt.widgets.Control"},});
+		assertThat(configurations).hasSize(1);
+		assertConfiguration(
+				configurations.get(0),
+				"org.eclipse.swt.widgets.Control",
+				"property myProperty");
+	}
+
+	/**
+	 * The "inter" association.
+	 */
+	public void test_getConfigurations_association_inter() throws Exception {
+		List<SimpleContainerConfiguration> configurations =
+				getConfigurations(true, new String[][]{
+					{"simpleContainer", "true"},
+					{"simpleContainer.x-association", "inter myName attrA='a a' attrB='b'"},
+					{"simpleContainer.component", "java.awt.Component"},});
+		assertThat(configurations).hasSize(1);
+		assertConfiguration(
+				configurations.get(0),
+				"java.awt.Component",
+				"inter myName {attrA=a a, attrB=b}");
+	}
+
+	public void test_getConfigurations_association_bad() throws Exception {
+		try {
+			getConfigurations(true, new String[][]{
+				{"simpleContainer", "true"},
+				{"simpleContainer.x-association", "bad association text"},
+				{"simpleContainer.component", "org.eclipse.swt.widgets.Control"},});
+			fail();
+		} catch (Throwable e) {
+			Throwable rootCause = DesignerExceptionUtils.getRootCause(e);
+			assertThat(rootCause).isExactlyInstanceOf(AssertionFailedException.class);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// SimpleContainer_Factory
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Ask "forCanvas", return common configuration for both - canvas/tree.
+	 */
+	public void test_getConfigurations_forCanvas_common() throws Exception {
+		List<SimpleContainerConfiguration> configurations =
+				getConfigurations(true, new String[][]{
+					{"simpleContainer", "true"},
+					{"simpleContainer.component", "org.eclipse.swt.widgets.Control"},});
+		assertThat(configurations).hasSize(1);
+		assertConfiguration(configurations.get(0), "org.eclipse.swt.widgets.Control", "direct");
+	}
+
+	/**
+	 * Ask "forCanvas", return explicit "forCanvas".
+	 */
+	public void test_getConfigurations_forCanvas_explicit() throws Exception {
+		List<SimpleContainerConfiguration> configurations =
+				getConfigurations(true, new String[][]{
+					{"simpleContainer.canvas", "true"},
+					{"simpleContainer.canvas.component", "org.eclipse.swt.widgets.Control"},});
+		assertThat(configurations).hasSize(1);
+		assertConfiguration(configurations.get(0), "org.eclipse.swt.widgets.Control", "direct");
+	}
+
+	/**
+	 * Ask "forCanvas", but only "forTree" exist.
+	 */
+	public void test_getConfigurations_forCanvas_onlyForTree() throws Exception {
+		List<SimpleContainerConfiguration> configurations =
+				getConfigurations(true, new String[][]{
+					{"simpleContainer.tree", "true"},
+					{"simpleContainer.tree.component", "org.eclipse.swt.widgets.Control"},});
+		assertThat(configurations).isEmpty();
+	}
+
+	/**
+	 * Ask "forTree", return common configuration for both - canvas/tree.
+	 */
+	public void test_getConfigurations_forTree_common() throws Exception {
+		List<SimpleContainerConfiguration> configurations =
+				getConfigurations(false, new String[][]{
+					{"simpleContainer", "true"},
+					{"simpleContainer.component", "org.eclipse.swt.widgets.Control"},});
+		assertThat(configurations).hasSize(1);
+	}
+
+	/**
+	 * Ask "forTree", return explicit "forTree".
+	 */
+	public void test_getConfigurations_forTree_explicit() throws Exception {
+		List<SimpleContainerConfiguration> configurations =
+				getConfigurations(false, new String[][]{
+					{"simpleContainer.tree", "true"},
+					{"simpleContainer.tree.component", "org.eclipse.swt.widgets.Control"},});
+		assertThat(configurations).hasSize(1);
+	}
+
+	/**
+	 * Several different configurations.
+	 */
+	public void test_getConfigurations_3_count() throws Exception {
+		List<SimpleContainerConfiguration> configurations =
+				getConfigurations(true, new String[][]{
+					{"simpleContainer", "true"},
+					{"simpleContainer.component", "org.eclipse.swt.widgets.Control"},
+					{"simpleContainer.1", "true"},
+					{"simpleContainer.1.component", "org.eclipse.swt.widgets.Button"},
+					{"simpleContainer.5", "true"},
+					{"simpleContainer.5.component", "org.eclipse.swt.widgets.Text"},});
+		assertThat(configurations).hasSize(3);
+		assertConfiguration(configurations.get(0), "org.eclipse.swt.widgets.Control", "direct");
+		assertConfiguration(configurations.get(1), "org.eclipse.swt.widgets.Button", "direct");
+		assertConfiguration(configurations.get(2), "org.eclipse.swt.widgets.Text", "direct");
+	}
+
+	/**
+	 * Ignore if <code>simpleContainer</code> value is not <code>true</code>.
+	 */
+	public void test_getConfigurations_ignoreFalse() throws Exception {
+		List<SimpleContainerConfiguration> configurations =
+				getConfigurations(true, new String[][]{
+					{"simpleContainer", "false"},
+					{"simpleContainer.component", "org.eclipse.swt.widgets.Control"},});
+		assertThat(configurations).hasSize(0);
+	}
+
+	/**
+	 * Use default component/reference validator.
+	 */
+	public void test_getConfigurations_defaultValidators() throws Exception {
+		List<SimpleContainerConfiguration> configurations =
+				getConfigurations(true, new String[][]{
+					{"simpleContainer", "true"},
+					{"simpleContainer.defaultComponent", "org.eclipse.swt.widgets.Control"},});
+		assertThat(configurations).hasSize(1);
+		assertConfiguration(configurations.get(0), "org.eclipse.swt.widgets.Control", "direct");
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Container validation MVEL scripts
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_getConfigurations_validateContainer_isContainerType() throws Exception {
+		List<SimpleContainerConfiguration> configurations =
+				getConfigurations(true, new String[][]{
+					{"simpleContainer.canvas", "isContainerType('org.eclipse.swt.widgets.Control')"},
+					{"simpleContainer.canvas.component", "org.eclipse.swt.widgets.Control"},});
+		assertThat(configurations).hasSize(1);
+		assertConfiguration(configurations.get(0), "org.eclipse.swt.widgets.Control", "direct");
+	}
+
+	public void test_getConfigurations_validateContainer_scriptToFalse() throws Exception {
+		List<SimpleContainerConfiguration> configurations =
+				getConfigurations(true, new String[][]{
+					{"simpleContainer.canvas", "1 == 2"},
+					{"simpleContainer.canvas.component", "org.eclipse.swt.widgets.Control"},});
+		assertThat(configurations).isEmpty();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Configurations access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static void assertConfiguration(SimpleContainerConfiguration configuration,
+			String expectedComponentValidator,
+			String expectedAssociation) {
+		if (expectedComponentValidator != null) {
+			assertEquals(
+					expectedComponentValidator,
+					getValidatorString(configuration.getComponentValidator()));
+			assertEquals(expectedAssociation, getAssociationString(configuration));
+		}
+	}
+
+	private static String getValidatorString(Object validator) {
+		return validator.toString();
+	}
+
+	private static String getAssociationString(SimpleContainerConfiguration configuration) {
+		return configuration.getAssociation().toString();
+	}
+
+	private List<SimpleContainerConfiguration> getConfigurations(boolean forCanvas,
+			String[][] parameters) throws Exception {
+		String[] parameterLines = new String[parameters.length];
+		for (int i = 0; i < parameters.length; i++) {
+			String[] parameterPair = parameters[i];
+			assertEquals(2, parameterPair.length);
+			parameterLines[i] =
+					MessageFormat.format(
+							"    <parameter name=''{0}''>{1}</parameter>",
+							parameterPair[0],
+							parameterPair[1]);
+		}
+		// prepare description
+		prepareMyComponent();
+		setFileContentSrc(
+				"test/MyComponent.wbp-component.xml",
+				getSource3(new String[]{
+						"<?xml version='1.0' encoding='UTF-8'?>",
+						"<component xmlns='http://www.eclipse.org/wb/WBPComponent'>",
+				"  <parameters>"}, parameterLines, new String[]{"  </parameters>", "</component>"}));
+		waitForAutoBuild();
+		// parse
+		XmlObjectInfo panel = parse("<t:MyComponent/>");
+		// get configurations
+		List<SimpleContainerConfiguration> configurations =
+				new SimpleContainerFactory(panel, forCanvas).getConfigurations();
+		for (Iterator<SimpleContainerConfiguration> I = configurations.iterator(); I.hasNext();) {
+			SimpleContainerConfiguration configuration = I.next();
+			String validatorString = getValidatorString(configuration.getComponentValidator());
+			if (validatorString.endsWith(".DragSource")
+					|| validatorString.endsWith(".DropTarget")
+					|| validatorString.contains("isPopup()")) {
+				I.remove();
+			}
+		}
+		return configurations;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Duck typing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static class MySimpleContainer extends XmlObjectInfo {
+		public MySimpleContainer(EditorContext context,
+				ComponentDescription description,
+				CreationSupport creationSupport) throws Exception {
+			super(context, description, creationSupport);
+		}
+
+		public List<ObjectInfo> getSimpleContainerChildren() {
+			return ImmutableList.of();
+		}
+
+		public void command_CREATE(Object component) {
+		}
+
+		public void command_ADD(Object component) {
+		}
+	}
+
+	/**
+	 * Create/Move operations of {@link SimpleContainerConfigurable} should try to find corresponding
+	 * CREATE/MOVE methods in container {@link XmlObjectInfo} and use them instead of generic
+	 * implementation.
+	 */
+	public void test_duckTyping() throws Exception {
+		final XmlObjectInfo component = mock(XmlObjectInfo.class);
+		final MySimpleContainer container = mock(MySimpleContainer.class);
+		final InOrder inOrder = inOrder(component, container);
+		final SimpleContainer simpleContainer;
+		{
+			ContainerObjectValidator validator = ContainerObjectValidators.alwaysTrue();
+			Association association = Associations.direct();
+			SimpleContainerConfiguration configuration =
+					new SimpleContainerConfiguration(validator, association);
+			simpleContainer = new SimpleContainerConfigurable(container, configuration);
+		}
+		// isEmpty() == true, because no existing children
+		when(container.getSimpleContainerChildren()).thenReturn(ImmutableList.<ObjectInfo>of());
+		//
+		assertTrue(simpleContainer.isEmpty());
+		//
+		inOrder.verify(container).getSimpleContainerChildren();
+		inOrder.verifyNoMoreInteractions();
+		// isEmpty() == false, because return existing child
+		clearInvocations(container);
+		//
+		TestObjectInfo existingChild = new TestObjectInfo();
+		when(container.getSimpleContainerChildren()).thenReturn(ImmutableList.<ObjectInfo>of(existingChild));
+		//
+		assertFalse(simpleContainer.isEmpty());
+		//
+		inOrder.verify(container).getSimpleContainerChildren();
+		inOrder.verifyNoMoreInteractions();
+		// getChild() == null, because no existing children
+		clearInvocations(container);
+		//
+		when(container.getSimpleContainerChildren()).thenReturn(ImmutableList.<ObjectInfo>of());
+		//
+		assertSame(null, simpleContainer.getChild());
+		//
+		inOrder.verify(container).getSimpleContainerChildren();
+		inOrder.verifyNoMoreInteractions();
+		// getChild() != null, because return existing child
+		clearInvocations(container);
+		//
+		when(container.getSimpleContainerChildren()).thenReturn(ImmutableList.<ObjectInfo>of(existingChild));
+		//
+		assertSame(existingChild, simpleContainer.getChild());
+		//
+		inOrder.verify(container).getSimpleContainerChildren();
+		inOrder.verifyNoMoreInteractions();
+		// CREATE
+		clearInvocations(container);
+		//
+		simpleContainer.command_CREATE(component);
+		//
+		inOrder.verify(container).command_CREATE(component);
+		inOrder.verifyNoMoreInteractions();
+		// MOVE
+		clearInvocations(container);
+		//
+		simpleContainer.command_ADD(component);
+		//
+		inOrder.verify(container).command_ADD(component);
+		inOrder.verifyNoMoreInteractions();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Validation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_validateMethods() throws Exception {
+		final XmlObjectInfo container = mock(XmlObjectInfo.class);
+		final XmlObjectInfo component = mock(XmlObjectInfo.class);
+		final SimpleContainerConfiguration configuration = mock(SimpleContainerConfiguration.class);
+		final InOrder inOrder = inOrder(container, component, configuration);
+		final SimpleContainer simpleContainer =
+				new SimpleContainerConfigurable(container, configuration);
+		// validateComponent() = true
+		when(configuration.getComponentValidator()).thenReturn(ContainerObjectValidators.alwaysTrue());
+		//
+		assertTrue(simpleContainer.validateComponent(component));
+		//
+		inOrder.verify(configuration).getComponentValidator();
+		inOrder.verifyNoMoreInteractions();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Models
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link SimpleContainerConfigurable#command_CREATE(Object, Object)}.
+	 */
+	public void test_CREATE() throws Exception {
+		prepareSimplePanel();
+		XmlObjectInfo panel =
+				parse(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<t:SimplePanel/>");
+		// prepare SimpleContainer
+		SimpleContainer simpleContainer = new SimpleContainerFactory(panel, true).get().get(0);
+		assertTrue(simpleContainer.isEmpty());
+		// do CREATE
+		XmlObjectInfo newButton = createButton();
+		{
+			assertTrue(simpleContainer.validateComponent(newButton));
+		}
+		simpleContainer.command_CREATE(newButton);
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<t:SimplePanel>",
+				"  <Button/>",
+				"</t:SimplePanel>");
+		assertFalse(simpleContainer.isEmpty());
+	}
+
+	/**
+	 * Ensure that we can: create, delete and create new component again.
+	 */
+	public void test_CREATE_twoTimes() throws Exception {
+		prepareSimplePanel();
+		XmlObjectInfo panel =
+				parse(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<t:SimplePanel/>");
+		// prepare SimpleContainer
+		SimpleContainer simpleContainer = new SimpleContainerFactory(panel, true).get().get(0);
+		assertTrue(simpleContainer.isEmpty());
+		// create/delete
+		{
+			XmlObjectInfo newButton = createButton();
+			simpleContainer.command_CREATE(newButton);
+			newButton.delete();
+		}
+		// create again
+		{
+			XmlObjectInfo newButton = createButton();
+			simpleContainer.command_CREATE(newButton);
+		}
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<t:SimplePanel>",
+				"  <Button/>",
+				"</t:SimplePanel>");
+	}
+
+	/**
+	 * Test for {@link SimpleContainerConfigurable#command_absolute_MOVE(Object, Object)}.
+	 */
+	public void test_MOVE() throws Exception {
+		prepareSimplePanel();
+		parse(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <t:SimplePanel wbp:name='simplePanel'/>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		XmlObjectInfo simplePanel = getObjectByName("simplePanel");
+		XmlObjectInfo button = getObjectByName("button");
+		// prepare SimpleContainer
+		SimpleContainer simpleContainer = new SimpleContainerFactory(simplePanel, true).get().get(0);
+		// do MOVE
+		simpleContainer.command_ADD(button);
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <t:SimplePanel wbp:name='simplePanel'>",
+				"    <Button wbp:name='button'/>",
+				"  </t:SimplePanel>",
+				"</Shell>");
+	}
+
+	/**
+	 * {@link SimpleContainer} should automatically copy its child into clipboard.
+	 */
+	public void test_clipboard() throws Exception {
+		prepareSimplePanel();
+		CompositeInfo shell =
+				parse(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <FillLayout/>",
+						"  </Shell.layout>",
+						"  <t:SimplePanel wbp:name='panel'>",
+						"    <Button text='my Button'/>",
+						"  </t:SimplePanel>",
+						"</Shell>");
+		refresh();
+		// prepare memento
+		XmlObjectMemento memento;
+		{
+			XmlObjectInfo panel = getObjectByName("panel");
+			memento = XmlObjectMemento.createMemento(panel);
+		}
+		// do paste
+		ControlInfo newPanel = (ControlInfo) memento.create(shell);
+		shell.getLayout().command_CREATE(newPanel, null);
+		memento.apply();
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <t:SimplePanel wbp:name='panel'>",
+				"    <Button text='my Button'/>",
+				"  </t:SimplePanel>",
+				"  <t:SimplePanel>",
+				"    <Button text='my Button'/>",
+				"  </t:SimplePanel>",
+				"</Shell>");
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	static void prepareSimplePanel() throws Exception {
+		prepareSimplePanel_classes();
+		setFileContentSrc(
+				"test/SimplePanel.wbp-component.xml",
+				getSourceDQ(
+						"<?xml version='1.0' encoding='UTF-8'?>",
+						"<component xmlns='http://www.eclipse.org/wb/WBPComponent'>",
+						"  <parameters>",
+						"    <parameter name='simpleContainer'>true</parameter>",
+						"    <parameter name='simpleContainer.component'>org.eclipse.swt.widgets.Control</parameter>",
+						"  </parameters>",
+						"</component>"));
+		waitForAutoBuild();
+	}
+
+	static void prepareSimplePanel_classes() throws Exception {
+		setFileContentSrc(
+				"test/MyLayout.java",
+				getSource(
+						"package test;",
+						"import org.eclipse.swt.graphics.Point;",
+						"import org.eclipse.swt.widgets.*;",
+						"public class MyLayout extends Layout {",
+						"  protected Point computeSize(Composite composite, int wHint, int hHint, boolean flushCache) {",
+						"    return new Point(200, 100);",
+						"  }",
+						"  protected void layout(Composite parent, boolean flushCache) {",
+						"    Control[] children = parent.getChildren();",
+						"    for (int i = 0; i < children.length; i++) {",
+						"      Control child = children[i];",
+						"      child.setBounds(10, 10, parent.getSize().x - 20, parent.getSize().y - 20);",
+						"    }",
+						"  }",
+						"}"));
+		setFileContentSrc(
+				"test/SimplePanel.java",
+				getSourceDQ(
+						"package test;",
+						"import org.eclipse.swt.widgets.*;",
+						"public class SimplePanel extends Composite {",
+						"  public SimplePanel(Composite parent, int style) {",
+						"    super(parent, style);",
+						"    setLayout(new MyLayout());",
+						"  }",
+						"}"));
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/property/EmptyXmlPropertyTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/property/EmptyXmlPropertyTest.java
index 82130515f..661c27ce9 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/property/EmptyXmlPropertyTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/property/EmptyXmlPropertyTest.java
@@ -20,25 +20,25 @@
  * @author scheglov_ke
  */
 public class EmptyXmlPropertyTest extends AbstractCoreTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_0() throws Exception {
-    XmlObjectInfo object = parse("<Shell/>");
-    EmptyXmlProperty property = new EmptyXmlProperty(object);
-    assertFalse(property.isModified());
-    assertSame(null, property.getValue());
-    property.setValue(null);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_0() throws Exception {
+		XmlObjectInfo object = parse("<Shell/>");
+		EmptyXmlProperty property = new EmptyXmlProperty(object);
+		assertFalse(property.isModified());
+		assertSame(null, property.getValue());
+		property.setValue(null);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/property/EnumPropertyEditorTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/property/EnumPropertyEditorTest.java
index ce696f7fd..55cffb6bc 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/property/EnumPropertyEditorTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/property/EnumPropertyEditorTest.java
@@ -32,174 +32,174 @@
  * @author scheglov_ke
  */
 public class EnumPropertyEditorTest extends AbstractCoreTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test using {@link EnumPropertyEditor}.
-   */
-  public void test_externalEnum() throws Exception {
-    prepare_Foo_MyComponent();
-    ObjectInfo panel = parse("<t:MyComponent foo='B'/>");
-    refresh();
-    // prepare property
-    GenericProperty property = (GenericProperty) panel.getPropertyByTitle("foo");
-    EnumPropertyEditor editor = (EnumPropertyEditor) property.getEditor();
-    // text
-    assertEquals("B", getPropertyText(property));
-    // IValueSourcePropertyEditor
-    {
-      Class<?> classFoo = m_lastLoader.loadClass("test.Foo");
-      assertEquals("B", editor.getValueExpression(property, classFoo.getEnumConstants()[1]));
-      assertNull(editor.getValueExpression(property, this));
-    }
-    // IClipboardSourceProvider
-    assertEquals("B", getPropertyClipboardSource(property));
-    // elements
-    {
-      Enum<?>[] enums =
-          (Enum<?>[]) ReflectionUtils.invokeMethod(
-              editor,
-              "getElements(org.eclipse.wb.internal.core.model.property.Property)",
-              property);
-      String[] enumStrings = GenericsUtils.getEnumStrings(enums);
-      assertThat(enumStrings).isEqualTo(new String[]{"A", "B", "C"});
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test using {@link EnumPropertyEditor}.
+	 */
+	public void test_externalEnum() throws Exception {
+		prepare_Foo_MyComponent();
+		ObjectInfo panel = parse("<t:MyComponent foo='B'/>");
+		refresh();
+		// prepare property
+		GenericProperty property = (GenericProperty) panel.getPropertyByTitle("foo");
+		EnumPropertyEditor editor = (EnumPropertyEditor) property.getEditor();
+		// text
+		assertEquals("B", getPropertyText(property));
+		// IValueSourcePropertyEditor
+		{
+			Class<?> classFoo = m_lastLoader.loadClass("test.Foo");
+			assertEquals("B", editor.getValueExpression(property, classFoo.getEnumConstants()[1]));
+			assertNull(editor.getValueExpression(property, this));
+		}
+		// IClipboardSourceProvider
+		assertEquals("B", getPropertyClipboardSource(property));
+		// elements
+		{
+			Enum<?>[] enums =
+					(Enum<?>[]) ReflectionUtils.invokeMethod(
+							editor,
+							"getElements(org.eclipse.wb.internal.core.model.property.Property)",
+							property);
+			String[] enumStrings = GenericsUtils.getEnumStrings(enums);
+			assertThat(enumStrings).isEqualTo(new String[]{"A", "B", "C"});
+		}
+	}
 
-  public void test_getText_noValue() throws Exception {
-    Property property = new PropertyNoValue(EnumPropertyEditor.INSTANCE);
-    assertEquals(null, getPropertyText(property));
-  }
+	public void test_getText_noValue() throws Exception {
+		Property property = new PropertyNoValue(EnumPropertyEditor.INSTANCE);
+		assertEquals(null, getPropertyText(property));
+	}
 
-  /**
-   * Test for {@link ITextValuePropertyEditor}.
-   */
-  public void test_setText() throws Exception {
-    prepare_Foo_MyComponent();
-    ObjectInfo panel = parse("<t:MyComponent foo='B'/>");
-    refresh();
-    // prepare property
-    Property property = panel.getPropertyByTitle("foo");
-    // set value
-    setPropertyText(property, "C");
-    assertXML("<t:MyComponent foo='C'/>");
-  }
+	/**
+	 * Test for {@link ITextValuePropertyEditor}.
+	 */
+	public void test_setText() throws Exception {
+		prepare_Foo_MyComponent();
+		ObjectInfo panel = parse("<t:MyComponent foo='B'/>");
+		refresh();
+		// prepare property
+		Property property = panel.getPropertyByTitle("foo");
+		// set value
+		setPropertyText(property, "C");
+		assertXML("<t:MyComponent foo='C'/>");
+	}
 
-  public void test_comboMethods() throws Exception {
-    prepare_Foo_MyComponent();
-    ObjectInfo panel = parse("<t:MyComponent foo='C'/>");
-    refresh();
-    // prepare property
-    Property property = panel.getPropertyByTitle("foo");
-    // add items
-    addComboPropertyItems(property);
-    // check items
-    {
-      List<String> items = getComboPropertyItems();
-      assertThat(items).containsExactly("A", "B", "C");
-    }
-    // select current item
-    {
-      setComboPropertySelection(1);
-      setComboPropertySelection(property);
-      assertEquals(2, getComboPropertySelection());
-    }
-    // set non-default value
-    {
-      setComboPropertyValue(property, 1);
-      assertXML("<t:MyComponent foo='B'/>");
-    }
-    // set default value
-    {
-      setComboPropertyValue(property, 0);
-      assertXML("<t:MyComponent/>");
-    }
-  }
+	public void test_comboMethods() throws Exception {
+		prepare_Foo_MyComponent();
+		ObjectInfo panel = parse("<t:MyComponent foo='C'/>");
+		refresh();
+		// prepare property
+		Property property = panel.getPropertyByTitle("foo");
+		// add items
+		addComboPropertyItems(property);
+		// check items
+		{
+			List<String> items = getComboPropertyItems();
+			assertThat(items).containsExactly("A", "B", "C");
+		}
+		// select current item
+		{
+			setComboPropertySelection(1);
+			setComboPropertySelection(property);
+			assertEquals(2, getComboPropertySelection());
+		}
+		// set non-default value
+		{
+			setComboPropertyValue(property, 1);
+			assertXML("<t:MyComponent foo='B'/>");
+		}
+		// set default value
+		{
+			setComboPropertyValue(property, 0);
+			assertXML("<t:MyComponent/>");
+		}
+	}
 
-  /**
-   * Test for using simple {@link Property}, not {@link GenericProperty}.
-   */
-  public void test_simpleProperty() throws Exception {
-    prepare_Foo_MyComponent();
-    parse("<t:MyComponent foo='C'/>");
-    refresh();
-    // prepare property
-    final AtomicReference<Object> newValue = new AtomicReference<Object>();
-    class MyProperty extends PropertyNoValue implements ITypedProperty {
-      public MyProperty() {
-        super(EnumPropertyEditor.INSTANCE);
-      }
+	/**
+	 * Test for using simple {@link Property}, not {@link GenericProperty}.
+	 */
+	public void test_simpleProperty() throws Exception {
+		prepare_Foo_MyComponent();
+		parse("<t:MyComponent foo='C'/>");
+		refresh();
+		// prepare property
+		final AtomicReference<Object> newValue = new AtomicReference<Object>();
+		class MyProperty extends PropertyNoValue implements ITypedProperty {
+			public MyProperty() {
+				super(EnumPropertyEditor.INSTANCE);
+			}
 
-      @Override
-      public Class<?> getType() {
-        try {
-          return m_lastLoader.loadClass("test.Foo");
-        } catch (Throwable e) {
-          throw ReflectionUtils.propagate(e);
-        }
-      }
+			@Override
+			public Class<?> getType() {
+				try {
+					return m_lastLoader.loadClass("test.Foo");
+				} catch (Throwable e) {
+					throw ReflectionUtils.propagate(e);
+				}
+			}
 
-      @Override
-      public void setValue(Object value) throws Exception {
-        newValue.set(value);
-      }
-    }
-    Property property = new MyProperty();
-    // add items
-    addComboPropertyItems(property);
-    // check items
-    {
-      List<String> items = getComboPropertyItems();
-      assertThat(items).containsExactly("A", "B", "C");
-    }
-    // set non-default value
-    {
-      setComboPropertyValue(property, 1);
-      assertEquals("B", newValue.get().toString());
-    }
-  }
+			@Override
+			public void setValue(Object value) throws Exception {
+				newValue.set(value);
+			}
+		}
+		Property property = new MyProperty();
+		// add items
+		addComboPropertyItems(property);
+		// check items
+		{
+			List<String> items = getComboPropertyItems();
+			assertThat(items).containsExactly("A", "B", "C");
+		}
+		// set non-default value
+		{
+			setComboPropertyValue(property, 1);
+			assertEquals("B", newValue.get().toString());
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Configures project for standalone <code>test.Foo</code> enum.
-   */
-  private void prepare_Foo_MyComponent() throws Exception {
-    prepare_Foo();
-    prepareMyComponent(new String[]{
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "public Foo foo = Foo.A;"});
-    waitForAutoBuild();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Configures project for standalone <code>test.Foo</code> enum.
+	 */
+	private void prepare_Foo_MyComponent() throws Exception {
+		prepare_Foo();
+		prepareMyComponent(new String[]{
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+		"public Foo foo = Foo.A;"});
+		waitForAutoBuild();
+	}
 
-  /**
-   * Prepares "Foo" enum.
-   */
-  private void prepare_Foo() throws Exception {
-    setFileContentSrc(
-        "test/Foo.java",
-        getSourceDQ(
-            "package test;",
-            "// filler filler filler",
-            "// filler filler filler",
-            "public enum Foo {",
-            "  A, B, C",
-            "}"));
-  }
+	/**
+	 * Prepares "Foo" enum.
+	 */
+	private void prepare_Foo() throws Exception {
+		setFileContentSrc(
+				"test/Foo.java",
+				getSourceDQ(
+						"package test;",
+						"// filler filler filler",
+						"// filler filler filler",
+						"public enum Foo {",
+						"  A, B, C",
+						"}"));
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/property/EventsPropertyTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/property/EventsPropertyTest.java
index ff941de9d..788d70ec3 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/property/EventsPropertyTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/property/EventsPropertyTest.java
@@ -41,406 +41,406 @@
  * @author scheglov_ke
  */
 public class EventsPropertyTest extends XwtModelTest {
-  private static final ToolkitDescription TOOLKIT = RcpToolkitDescription.INSTANCE;
+	private static final ToolkitDescription TOOLKIT = RcpToolkitDescription.INSTANCE;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Life cycle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void setUp() throws Exception {
-    super.setUp();
-    setPreferencesDefaults();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Life cycle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void setUp() throws Exception {
+		super.setUp();
+		setPreferencesDefaults();
+	}
 
-  @Override
-  protected void tearDown() throws Exception {
-    DesignerPlugin.getActivePage().closeAllEditors(false);
-    super.tearDown();
-  }
+	@Override
+	protected void tearDown() throws Exception {
+		DesignerPlugin.getActivePage().closeAllEditors(false);
+		super.tearDown();
+	}
 
-  private void setPreferencesDefaults() {
-    IPreferenceStore preferences = TOOLKIT.getPreferences();
-    preferences.setToDefault(IPreferenceConstants.P_DECORATE_ICON);
-  }
+	private void setPreferencesDefaults() {
+		IPreferenceStore preferences = TOOLKIT.getPreferences();
+		preferences.setToDefault(IPreferenceConstants.P_DECORATE_ICON);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_hasKeyDown() throws Exception {
-    createTestClass(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "public class Test {",
-        "  public void onKeyDown(Event event) {",
-        "  }",
-        "}");
-    XmlObjectInfo shell = parse("<Shell KeyDownEvent='onKeyDown' x:Class='test.Test'/>");
-    // has "Events" property
-    {
-      Property property = PropertyUtils.getByPath(shell, "Events");
-      assertNotNull(property);
-      // no "value"
-      assertSame(Property.UNKNOWN_VALUE, property.getValue());
-      property.setValue(null);
-      assertXML("<Shell KeyDownEvent='onKeyDown' x:Class='test.Test'/>");
-    }
-    // has "KeyDown" event
-    {
-      Property property = PropertyUtils.getByPath(shell, "Events/KeyDown");
-      assertNotNull(property);
-      assertEquals("onKeyDown", getPropertyText(property));
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_hasKeyDown() throws Exception {
+		createTestClass(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"public class Test {",
+				"  public void onKeyDown(Event event) {",
+				"  }",
+				"}");
+		XmlObjectInfo shell = parse("<Shell KeyDownEvent='onKeyDown' x:Class='test.Test'/>");
+		// has "Events" property
+		{
+			Property property = PropertyUtils.getByPath(shell, "Events");
+			assertNotNull(property);
+			// no "value"
+			assertSame(Property.UNKNOWN_VALUE, property.getValue());
+			property.setValue(null);
+			assertXML("<Shell KeyDownEvent='onKeyDown' x:Class='test.Test'/>");
+		}
+		// has "KeyDown" event
+		{
+			Property property = PropertyUtils.getByPath(shell, "Events/KeyDown");
+			assertNotNull(property);
+			assertEquals("onKeyDown", getPropertyText(property));
+		}
+	}
 
-  public void test_decorateIcon() throws Exception {
-    createTestClass(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "public class Test {",
-        "  public void onKeyDown(Event event) {",
-        "  }",
-        "}");
-    parse(
-        "<Shell x:Class='test.Test'>",
-        "  <Button wbp:name='button_1' KeyDownEvent='onKeyDown'/>",
-        "  <Button wbp:name='button_2'/>",
-        "</Shell>");
-    XmlObjectInfo button_1 = getObjectByName("button_1");
-    XmlObjectInfo button_2 = getObjectByName("button_2");
-    // be default decoration enabled
-    assertNotSame(
-        button_1.getPresentation().getIcon(),
-        ObjectsLabelProvider.INSTANCE.getImage(button_1));
-    assertSame(
-        button_2.getPresentation().getIcon(),
-        ObjectsLabelProvider.INSTANCE.getImage(button_2));
-    // disable decoration, no decoration expected
-    TOOLKIT.getPreferences().setValue(IPreferenceConstants.P_DECORATE_ICON, false);
-    assertSame(
-        button_1.getPresentation().getIcon(),
-        ObjectsLabelProvider.INSTANCE.getImage(button_1));
-    assertSame(
-        button_2.getPresentation().getIcon(),
-        ObjectsLabelProvider.INSTANCE.getImage(button_2));
-  }
+	public void test_decorateIcon() throws Exception {
+		createTestClass(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"public class Test {",
+				"  public void onKeyDown(Event event) {",
+				"  }",
+				"}");
+		parse(
+				"<Shell x:Class='test.Test'>",
+				"  <Button wbp:name='button_1' KeyDownEvent='onKeyDown'/>",
+				"  <Button wbp:name='button_2'/>",
+				"</Shell>");
+		XmlObjectInfo button_1 = getObjectByName("button_1");
+		XmlObjectInfo button_2 = getObjectByName("button_2");
+		// be default decoration enabled
+		assertNotSame(
+				button_1.getPresentation().getIcon(),
+				ObjectsLabelProvider.INSTANCE.getImage(button_1));
+		assertSame(
+				button_2.getPresentation().getIcon(),
+				ObjectsLabelProvider.INSTANCE.getImage(button_2));
+		// disable decoration, no decoration expected
+		TOOLKIT.getPreferences().setValue(IPreferenceConstants.P_DECORATE_ICON, false);
+		assertSame(
+				button_1.getPresentation().getIcon(),
+				ObjectsLabelProvider.INSTANCE.getImage(button_1));
+		assertSame(
+				button_2.getPresentation().getIcon(),
+				ObjectsLabelProvider.INSTANCE.getImage(button_2));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // openListener()
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * No corresponding Java file, i.e. no "x:Class" attribute, so do thing.
-   */
-  public void test_openListener_noJava() throws Exception {
-    XmlObjectInfo shell = parse("<Shell/>");
-    Property property = PropertyUtils.getByPath(shell, "Events/KeyDown");
-    //
-    openListener(property);
-    IEditorPart activeEditor = DesignerPlugin.getActiveEditor();
-    assertSame(null, activeEditor);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// openListener()
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * No corresponding Java file, i.e. no "x:Class" attribute, so do thing.
+	 */
+	public void test_openListener_noJava() throws Exception {
+		XmlObjectInfo shell = parse("<Shell/>");
+		Property property = PropertyUtils.getByPath(shell, "Events/KeyDown");
+		//
+		openListener(property);
+		IEditorPart activeEditor = DesignerPlugin.getActiveEditor();
+		assertSame(null, activeEditor);
+	}
 
-  /**
-   * Open existing method for existing event.
-   */
-  public void test_openListener_existingMethod() throws Exception {
-    createTestClass(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "public class Test {",
-        "  public void onKeyDown(Event event) {",
-        "  }",
-        "}");
-    XmlObjectInfo shell = parse("<Shell KeyDownEvent='onKeyDown' x:Class='test.Test'/>");
-    Property property = PropertyUtils.getByPath(shell, "Events/KeyDown");
-    //
-    openListener(property);
-    IEditorPart activeEditor = DesignerPlugin.getActiveEditor();
-    assertThat(activeEditor).isInstanceOf(CompilationUnitEditor.class);
-    // not changes in Java
-    assertEquals(
-        getJavaSource(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "public class Test {",
-            "  public void onKeyDown(Event event) {",
-            "  }",
-            "}"),
-        getJavaFile());
-    // method is under cursor
-    String source = getJavaSource_afterCursor(activeEditor);
-    assertThat(source).startsWith("public void onKeyDown(Event event) {");
-  }
+	/**
+	 * Open existing method for existing event.
+	 */
+	public void test_openListener_existingMethod() throws Exception {
+		createTestClass(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"public class Test {",
+				"  public void onKeyDown(Event event) {",
+				"  }",
+				"}");
+		XmlObjectInfo shell = parse("<Shell KeyDownEvent='onKeyDown' x:Class='test.Test'/>");
+		Property property = PropertyUtils.getByPath(shell, "Events/KeyDown");
+		//
+		openListener(property);
+		IEditorPart activeEditor = DesignerPlugin.getActiveEditor();
+		assertThat(activeEditor).isInstanceOf(CompilationUnitEditor.class);
+		// not changes in Java
+		assertEquals(
+				getJavaSource(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"public class Test {",
+						"  public void onKeyDown(Event event) {",
+						"  }",
+						"}"),
+				getJavaFile());
+		// method is under cursor
+		String source = getJavaSource_afterCursor(activeEditor);
+		assertThat(source).startsWith("public void onKeyDown(Event event) {");
+	}
 
-  /**
-   * Open new event and generate new method.
-   */
-  public void test_openListener_newMethod() throws Exception {
-    createTestClass(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "public class Test {",
-        "}");
-    XmlObjectInfo shell = parse("<Shell x:Class='test.Test'/>");
-    Property property = PropertyUtils.getByPath(shell, "Events/KeyDown");
-    //
-    openListener(property);
-    IEditorPart activeEditor = DesignerPlugin.getActiveEditor();
-    assertThat(activeEditor).isInstanceOf(CompilationUnitEditor.class);
-    // "onKeyDown()" method was added
-    assertEquals(
-        getJavaSource(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "public class Test {",
-            "  public void onKeyDown(Event event) {",
-            "  }",
-            "}"),
-        getJavaFile());
-    assertXML("<Shell x:Class='test.Test' KeyDownEvent='onKeyDown'/>");
-    // method is under cursor
-    String source = getJavaSource_afterCursor(activeEditor);
-    assertThat(source).startsWith("public void onKeyDown(Event event) {");
-  }
+	/**
+	 * Open new event and generate new method.
+	 */
+	public void test_openListener_newMethod() throws Exception {
+		createTestClass(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"public class Test {",
+				"}");
+		XmlObjectInfo shell = parse("<Shell x:Class='test.Test'/>");
+		Property property = PropertyUtils.getByPath(shell, "Events/KeyDown");
+		//
+		openListener(property);
+		IEditorPart activeEditor = DesignerPlugin.getActiveEditor();
+		assertThat(activeEditor).isInstanceOf(CompilationUnitEditor.class);
+		// "onKeyDown()" method was added
+		assertEquals(
+				getJavaSource(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"public class Test {",
+						"  public void onKeyDown(Event event) {",
+						"  }",
+						"}"),
+				getJavaFile());
+		assertXML("<Shell x:Class='test.Test' KeyDownEvent='onKeyDown'/>");
+		// method is under cursor
+		String source = getJavaSource_afterCursor(activeEditor);
+		assertThat(source).startsWith("public void onKeyDown(Event event) {");
+	}
 
-  public void test_openListener_usingPath() throws Exception {
-    createTestClass(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "public class Test {",
-        "}");
-    XmlObjectInfo shell = parse("<Shell x:Class='test.Test'/>");
-    // open listener
-    {
-      EventsProperty eventsProperty = (EventsProperty) shell.getPropertyByTitle("Events");
-      eventsProperty.openListener("KeyDown");
-    }
-    assertEquals(
-        getJavaSource(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "public class Test {",
-            "  public void onKeyDown(Event event) {",
-            "  }",
-            "}"),
-        getJavaFile());
-    assertXML("<Shell x:Class='test.Test' KeyDownEvent='onKeyDown'/>");
-    // method is under cursor
-    IEditorPart activeEditor = DesignerPlugin.getActiveEditor();
-    assertThat(activeEditor).isInstanceOf(CompilationUnitEditor.class);
-    String source = getJavaSource_afterCursor(activeEditor);
-    assertThat(source).startsWith("public void onKeyDown(Event event) {");
-  }
+	public void test_openListener_usingPath() throws Exception {
+		createTestClass(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"public class Test {",
+				"}");
+		XmlObjectInfo shell = parse("<Shell x:Class='test.Test'/>");
+		// open listener
+		{
+			EventsProperty eventsProperty = (EventsProperty) shell.getPropertyByTitle("Events");
+			eventsProperty.openListener("KeyDown");
+		}
+		assertEquals(
+				getJavaSource(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"public class Test {",
+						"  public void onKeyDown(Event event) {",
+						"  }",
+						"}"),
+				getJavaFile());
+		assertXML("<Shell x:Class='test.Test' KeyDownEvent='onKeyDown'/>");
+		// method is under cursor
+		IEditorPart activeEditor = DesignerPlugin.getActiveEditor();
+		assertThat(activeEditor).isInstanceOf(CompilationUnitEditor.class);
+		String source = getJavaSource_afterCursor(activeEditor);
+		assertThat(source).startsWith("public void onKeyDown(Event event) {");
+	}
 
-  public void test_openListener_usingDoubleClick() throws Exception {
-    createTestClass(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "public class Test {",
-        "}");
-    XmlObjectInfo shell = parse("<Shell x:Class='test.Test'/>");
-    Property property = PropertyUtils.getByPath(shell, "Events/KeyDown");
-    // open listener
-    doPropertyDoubleClick(property, null);
-    assertEquals(
-        getJavaSource(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "public class Test {",
-            "  public void onKeyDown(Event event) {",
-            "  }",
-            "}"),
-        getJavaFile());
-    assertXML("<Shell x:Class='test.Test' KeyDownEvent='onKeyDown'/>");
-    // method is under cursor
-    IEditorPart activeEditor = DesignerPlugin.getActiveEditor();
-    assertThat(activeEditor).isInstanceOf(CompilationUnitEditor.class);
-    String source = getJavaSource_afterCursor(activeEditor);
-    assertThat(source).startsWith("public void onKeyDown(Event event) {");
-  }
+	public void test_openListener_usingDoubleClick() throws Exception {
+		createTestClass(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"public class Test {",
+				"}");
+		XmlObjectInfo shell = parse("<Shell x:Class='test.Test'/>");
+		Property property = PropertyUtils.getByPath(shell, "Events/KeyDown");
+		// open listener
+		doPropertyDoubleClick(property, null);
+		assertEquals(
+				getJavaSource(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"public class Test {",
+						"  public void onKeyDown(Event event) {",
+						"  }",
+						"}"),
+				getJavaFile());
+		assertXML("<Shell x:Class='test.Test' KeyDownEvent='onKeyDown'/>");
+		// method is under cursor
+		IEditorPart activeEditor = DesignerPlugin.getActiveEditor();
+		assertThat(activeEditor).isInstanceOf(CompilationUnitEditor.class);
+		String source = getJavaSource_afterCursor(activeEditor);
+		assertThat(source).startsWith("public void onKeyDown(Event event) {");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Context menu
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_contextMenu() throws Exception {
-    createTestClass(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "public class Test {",
-        "  public void onKeyDown(Event event) {",
-        "  }",
-        "}");
-    XmlObjectInfo shell = parse("<Shell x:Class='test.Test' KeyDownEvent='onKeyDown'/>");
-    //
-    IMenuManager contextMenu = getContextMenu(shell);
-    // check action for existing "KeyDown" event
-    {
-      IAction action = findChildAction(contextMenu, "KeyDown -> onKeyDown");
-      assertNotNull(action);
-      assertSame(EventsPropertyUtils.LISTENER_METHOD_IMAGE_DESCRIPTOR, action.getImageDescriptor());
-      // run, no change expected
-      String expectedSource = m_lastContext.getContent();
-      action.run();
-      assertEquals(expectedSource, m_lastContext.getContent());
-    }
-    // add new method using action
-    {
-      IMenuManager manager2 = findChildMenuManager(contextMenu, "Add event handler");
-      IAction action = findChildAction(manager2, "KeyUp");
-      assertNotNull(action);
-      // run, new method should be added
-      action.run();
-      DesignerPlugin.getActiveEditor().doSave(null);
-      assertEquals(
-          getJavaSource(
-              "// filler filler filler filler filler",
-              "// filler filler filler filler filler",
-              "public class Test {",
-              "  public void onKeyDown(Event event) {",
-              "  }",
-              "  public void onKeyUp(Event event) {",
-              "  }",
-              "}"),
-          getJavaFile());
-      assertXML("<Shell x:Class='test.Test' KeyDownEvent='onKeyDown' KeyUpEvent='onKeyUp'/>");
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Context menu
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_contextMenu() throws Exception {
+		createTestClass(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"public class Test {",
+				"  public void onKeyDown(Event event) {",
+				"  }",
+				"}");
+		XmlObjectInfo shell = parse("<Shell x:Class='test.Test' KeyDownEvent='onKeyDown'/>");
+		//
+		IMenuManager contextMenu = getContextMenu(shell);
+		// check action for existing "KeyDown" event
+		{
+			IAction action = findChildAction(contextMenu, "KeyDown -> onKeyDown");
+			assertNotNull(action);
+			assertSame(EventsPropertyUtils.LISTENER_METHOD_IMAGE_DESCRIPTOR, action.getImageDescriptor());
+			// run, no change expected
+			String expectedSource = m_lastContext.getContent();
+			action.run();
+			assertEquals(expectedSource, m_lastContext.getContent());
+		}
+		// add new method using action
+		{
+			IMenuManager manager2 = findChildMenuManager(contextMenu, "Add event handler");
+			IAction action = findChildAction(manager2, "KeyUp");
+			assertNotNull(action);
+			// run, new method should be added
+			action.run();
+			DesignerPlugin.getActiveEditor().doSave(null);
+			assertEquals(
+					getJavaSource(
+							"// filler filler filler filler filler",
+							"// filler filler filler filler filler",
+							"public class Test {",
+							"  public void onKeyDown(Event event) {",
+							"  }",
+							"  public void onKeyUp(Event event) {",
+							"  }",
+							"}"),
+					getJavaFile());
+			assertXML("<Shell x:Class='test.Test' KeyDownEvent='onKeyDown' KeyUpEvent='onKeyUp'/>");
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Delete
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_deleteEvent_noJava() throws Exception {
-    XmlObjectInfo shell = parse("<Shell KeyDownEvent='onKeyDown'/>");
-    Property property = PropertyUtils.getByPath(shell, "Events/KeyDown");
-    // do delete
-    deleteEventPropertyWithGUI(property);
-    assertXML("<Shell/>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Delete
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_deleteEvent_noJava() throws Exception {
+		XmlObjectInfo shell = parse("<Shell KeyDownEvent='onKeyDown'/>");
+		Property property = PropertyUtils.getByPath(shell, "Events/KeyDown");
+		// do delete
+		deleteEventPropertyWithGUI(property);
+		assertXML("<Shell/>");
+	}
 
-  public void test_deleteEvent_existingMethod() throws Exception {
-    createTestClass(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "public class Test {",
-        "  public void onKeyDown(Event event) {",
-        "  }",
-        "}");
-    XmlObjectInfo shell = parse("<Shell x:Class='test.Test' KeyDownEvent='onKeyDown'/>");
-    Property property = PropertyUtils.getByPath(shell, "Events/KeyDown");
-    // do delete
-    deleteEventPropertyWithGUI(property);
-    assertEquals(
-        getJavaSource(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "public class Test {",
-            "}"),
-        getJavaFile());
-    assertXML("<Shell x:Class='test.Test'/>");
-  }
+	public void test_deleteEvent_existingMethod() throws Exception {
+		createTestClass(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"public class Test {",
+				"  public void onKeyDown(Event event) {",
+				"  }",
+				"}");
+		XmlObjectInfo shell = parse("<Shell x:Class='test.Test' KeyDownEvent='onKeyDown'/>");
+		Property property = PropertyUtils.getByPath(shell, "Events/KeyDown");
+		// do delete
+		deleteEventPropertyWithGUI(property);
+		assertEquals(
+				getJavaSource(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"public class Test {",
+						"}"),
+				getJavaFile());
+		assertXML("<Shell x:Class='test.Test'/>");
+	}
 
-  public void test_deleteEvent_noMethod() throws Exception {
-    createTestClass(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "public class Test {",
-        "}");
-    XmlObjectInfo shell = parse("<Shell x:Class='test.Test'/>");
-    Property property = PropertyUtils.getByPath(shell, "Events/KeyDown");
-    // do delete
-    deleteEventPropertyWithGUI(property);
-    assertEquals(
-        getJavaSource(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "public class Test {",
-            "}"),
-        getJavaFile());
-    assertXML("<Shell x:Class='test.Test'/>");
-  }
+	public void test_deleteEvent_noMethod() throws Exception {
+		createTestClass(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"public class Test {",
+				"}");
+		XmlObjectInfo shell = parse("<Shell x:Class='test.Test'/>");
+		Property property = PropertyUtils.getByPath(shell, "Events/KeyDown");
+		// do delete
+		deleteEventPropertyWithGUI(property);
+		assertEquals(
+				getJavaSource(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"public class Test {",
+						"}"),
+				getJavaFile());
+		assertXML("<Shell x:Class='test.Test'/>");
+	}
 
-  public void test_deleteComponent() throws Exception {
-    createTestClass(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "public class Test {",
-        "  public void onKeyDown(Event event) {",
-        "  }",
-        "}");
-    parse(
-        "<Shell x:Class='test.Test'>",
-        "  <Button wbp:name='button' KeyDownEvent='onKeyDown'/>",
-        "</Shell>");
-    XmlObjectInfo button = getObjectByName("button");
-    // do delete
-    button.delete();
-    assertEquals(
-        getJavaSource(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "public class Test {",
-            "}"),
-        getJavaFile());
-    assertXML("<Shell x:Class='test.Test'/>");
-  }
+	public void test_deleteComponent() throws Exception {
+		createTestClass(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"public class Test {",
+				"  public void onKeyDown(Event event) {",
+				"  }",
+				"}");
+		parse(
+				"<Shell x:Class='test.Test'>",
+				"  <Button wbp:name='button' KeyDownEvent='onKeyDown'/>",
+				"</Shell>");
+		XmlObjectInfo button = getObjectByName("button");
+		// do delete
+		button.delete();
+		assertEquals(
+				getJavaSource(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"public class Test {",
+						"}"),
+				getJavaFile());
+		assertXML("<Shell x:Class='test.Test'/>");
+	}
 
-  /**
-   * Deletes value of given {@link Property} and clicks "OK" in confirmation dialog.
-   */
-  private static void deleteEventPropertyWithGUI(final Property property) throws Exception {
-    new UiContext().executeAndCheck(new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        property.setValue(Property.UNKNOWN_VALUE);
-      }
-    }, new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        context.useShell("Confirm");
-        context.clickButton("OK");
-      }
-    });
-  }
+	/**
+	 * Deletes value of given {@link Property} and clicks "OK" in confirmation dialog.
+	 */
+	private static void deleteEventPropertyWithGUI(final Property property) throws Exception {
+		new UiContext().executeAndCheck(new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				property.setValue(Property.UNKNOWN_VALUE);
+			}
+		}, new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				context.useShell("Confirm");
+				context.clickButton("OK");
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void createTestClass(String... lines) throws Exception {
-    setFileContentSrc("test/Test.java", getJavaSource(lines));
-    waitForAutoBuild();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void createTestClass(String... lines) throws Exception {
+		setFileContentSrc("test/Test.java", getJavaSource(lines));
+		waitForAutoBuild();
+	}
 
-  private static void openListener(Property property) throws Exception {
-    ReflectionUtils.invokeMethod(property, "openListener()");
-  }
+	private static void openListener(Property property) throws Exception {
+		ReflectionUtils.invokeMethod(property, "openListener()");
+	}
 
-  private static String getJavaFile() throws Exception {
-    return getFileContentSrc("test/Test.java");
-  }
+	private static String getJavaFile() throws Exception {
+		return getFileContentSrc("test/Test.java");
+	}
 
-  private String getJavaSource_afterCursor(IEditorPart activeEditor) throws Exception {
-    ITextEditor textEditor = (ITextEditor) activeEditor;
-    ITextSelection selection = (ITextSelection) textEditor.getSelectionProvider().getSelection();
-    return getJavaFile().substring(selection.getOffset());
-  }
+	private String getJavaSource_afterCursor(IEditorPart activeEditor) throws Exception {
+		ITextEditor textEditor = (ITextEditor) activeEditor;
+		ITextSelection selection = (ITextSelection) textEditor.getSelectionProvider().getSelection();
+		return getJavaFile().substring(selection.getOffset());
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/property/PropertyTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/property/PropertyTest.java
index 3f8ef22ed..101c84900 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/property/PropertyTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/property/PropertyTest.java
@@ -41,1028 +41,1028 @@
  * @author scheglov_ke
  */
 public class PropertyTest extends AbstractCoreTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link GenericPropertyImpl#getDescription()}.
-   */
-  public void test_getDescription() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    refresh();
-    XmlObjectInfo button = getObjectByName("button");
-    //
-    GenericPropertyImpl textProperty = (GenericPropertyImpl) button.getPropertyByTitle("text");
-    assertNotNull(textProperty.getDescription());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link GenericPropertyImpl#getDescription()}.
+	 */
+	public void test_getDescription() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		refresh();
+		XmlObjectInfo button = getObjectByName("button");
+		//
+		GenericPropertyImpl textProperty = (GenericPropertyImpl) button.getPropertyByTitle("text");
+		assertNotNull(textProperty.getDescription());
+	}
 
-  public void test_makeCopy() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    refresh();
-    XmlObjectInfo button = getObjectByName("button");
-    //
-    GenericPropertyImpl property = (GenericPropertyImpl) button.getPropertyByTitle("text");
-    GenericPropertyImpl copy = new GenericPropertyImpl(property, "otherName");
-    assertEquals("text", property.getTitle());
-    assertEquals("otherName", copy.getTitle());
-  }
+	public void test_makeCopy() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		refresh();
+		XmlObjectInfo button = getObjectByName("button");
+		//
+		GenericPropertyImpl property = (GenericPropertyImpl) button.getPropertyByTitle("text");
+		GenericPropertyImpl copy = new GenericPropertyImpl(property, "otherName");
+		assertEquals("text", property.getTitle());
+		assertEquals("otherName", copy.getTitle());
+	}
 
-  /**
-   * Test for {@link GenericPropertyImpl#getType()}.
-   */
-  public void test_getType() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    refresh();
-    XmlObjectInfo button = getObjectByName("button");
-    //
-    GenericProperty textProperty = (GenericProperty) button.getPropertyByTitle("text");
-    assertSame(String.class, textProperty.getType());
-  }
+	/**
+	 * Test for {@link GenericPropertyImpl#getType()}.
+	 */
+	public void test_getType() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		refresh();
+		XmlObjectInfo button = getObjectByName("button");
+		//
+		GenericProperty textProperty = (GenericProperty) button.getPropertyByTitle("text");
+		assertSame(String.class, textProperty.getType());
+	}
 
-  /**
-   * Property for type which is {@link TypeVariable}.
-   */
-  public void test_typeVariableProperty() throws Exception {
-    setFileContentSrc(
-        "test/MySuper.java",
-        getSourceDQ(
-            "package test;",
-            "import org.eclipse.swt.SWT;",
-            "import org.eclipse.swt.widgets.*;",
-            "public class MySuper<T> extends Composite {",
-            "  public MySuper(Composite parent, int style) {",
-            "    super(parent, style);",
-            "  }",
-            "  public void setTest(T value) {",
-            "  }",
-            "}"));
-    setFileContentSrc(
-        "test/MyComponent.java",
-        getSourceDQ(
-            "package test;",
-            "import org.eclipse.swt.SWT;",
-            "import org.eclipse.swt.widgets.*;",
-            "public class MyComponent extends MySuper<Boolean> {",
-            "  public MyComponent(Composite parent, int style) {",
-            "    super(parent, style);",
-            "  }",
-            "}"));
-    waitForAutoBuild();
-    // parse
-    parse(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <t:MyComponent wbp:name='component'/>",
-        "</Shell>");
-    refresh();
-    XmlObjectInfo component = getObjectByName("component");
-    //
-    Property property = component.getPropertyByTitle("test");
-    assertNotNull(property);
-    GenericProperty genericProperty = (GenericProperty) property;
-    assertSame(Boolean.class, genericProperty.getType());
-  }
+	/**
+	 * Property for type which is {@link TypeVariable}.
+	 */
+	public void test_typeVariableProperty() throws Exception {
+		setFileContentSrc(
+				"test/MySuper.java",
+				getSourceDQ(
+						"package test;",
+						"import org.eclipse.swt.SWT;",
+						"import org.eclipse.swt.widgets.*;",
+						"public class MySuper<T> extends Composite {",
+						"  public MySuper(Composite parent, int style) {",
+						"    super(parent, style);",
+						"  }",
+						"  public void setTest(T value) {",
+						"  }",
+						"}"));
+		setFileContentSrc(
+				"test/MyComponent.java",
+				getSourceDQ(
+						"package test;",
+						"import org.eclipse.swt.SWT;",
+						"import org.eclipse.swt.widgets.*;",
+						"public class MyComponent extends MySuper<Boolean> {",
+						"  public MyComponent(Composite parent, int style) {",
+						"    super(parent, style);",
+						"  }",
+						"}"));
+		waitForAutoBuild();
+		// parse
+		parse(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <t:MyComponent wbp:name='component'/>",
+				"</Shell>");
+		refresh();
+		XmlObjectInfo component = getObjectByName("component");
+		//
+		Property property = component.getPropertyByTitle("test");
+		assertNotNull(property);
+		GenericProperty genericProperty = (GenericProperty) property;
+		assertSame(Boolean.class, genericProperty.getType());
+	}
 
-  /**
-   * Test for {@link GenericProperty#hasTrueTag(String)}.
-   */
-  public void test_hasTrueTag() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    refresh();
-    XmlObjectInfo button = getObjectByName("button");
-    //
-    GenericPropertyImpl textProperty = (GenericPropertyImpl) button.getPropertyByTitle("text");
-    assertTrue(textProperty.hasTrueTag("isText"));
-    assertFalse(textProperty.hasTrueTag("noSuchTag"));
-  }
+	/**
+	 * Test for {@link GenericProperty#hasTrueTag(String)}.
+	 */
+	public void test_hasTrueTag() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		refresh();
+		XmlObjectInfo button = getObjectByName("button");
+		//
+		GenericPropertyImpl textProperty = (GenericPropertyImpl) button.getPropertyByTitle("text");
+		assertTrue(textProperty.hasTrueTag("isText"));
+		assertFalse(textProperty.hasTrueTag("noSuchTag"));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // PropertyTooltipProvider
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link PropertyTooltipProvider} implementation.
-   */
-  public void test_getAdapter_PropertyTooltipProvider() throws Exception {
-    XmlObjectInfo shell =
-        parse(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Button wbp:name='button'/>",
-            "</Shell>");
-    GenericPropertyImpl property = (GenericPropertyImpl) shell.getPropertyByTitle("enabled");
-    // property has tooltip provider
-    PropertyTooltipProvider tooltipProvider = property.getAdapter(PropertyTooltipProvider.class);
-    String tooltip =
-        (String) ReflectionUtils.invokeMethod(
-            tooltipProvider,
-            "getText(org.eclipse.wb.internal.core.model.property.Property)",
-            property);
-    assertThat(tooltip).contains("Enables the receiver if the argument").contains(
-        "and disables it otherwise.");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// PropertyTooltipProvider
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link PropertyTooltipProvider} implementation.
+	 */
+	public void test_getAdapter_PropertyTooltipProvider() throws Exception {
+		XmlObjectInfo shell =
+				parse(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Button wbp:name='button'/>",
+						"</Shell>");
+		GenericPropertyImpl property = (GenericPropertyImpl) shell.getPropertyByTitle("enabled");
+		// property has tooltip provider
+		PropertyTooltipProvider tooltipProvider = property.getAdapter(PropertyTooltipProvider.class);
+		String tooltip =
+				(String) ReflectionUtils.invokeMethod(
+						tooltipProvider,
+						"getText(org.eclipse.wb.internal.core.model.property.Property)",
+						property);
+		assertThat(tooltip).contains("Enables the receiver if the argument").contains(
+				"and disables it otherwise.");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Value
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_getValue_modified() throws Exception {
-    prepareMyComponent(new String[]{
-        "// filler filler filler filler filler",
-        "public void setTest(int value) {",
-        "}"});
-    ControlInfo shell =
-        parse(
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <t:MyComponent wbp:name='component' test='123'/>",
-            "</Shell>");
-    shell.refresh();
-    XmlObjectInfo component = getObjectByName("component");
-    GenericProperty property = (GenericProperty) component.getPropertyByTitle("test");
-    // has value
-    assertTrue(property.isModified());
-    assertEquals(123, property.getValue());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Value
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_getValue_modified() throws Exception {
+		prepareMyComponent(new String[]{
+				"// filler filler filler filler filler",
+				"public void setTest(int value) {",
+		"}"});
+		ControlInfo shell =
+				parse(
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <t:MyComponent wbp:name='component' test='123'/>",
+						"</Shell>");
+		shell.refresh();
+		XmlObjectInfo component = getObjectByName("component");
+		GenericProperty property = (GenericProperty) component.getPropertyByTitle("test");
+		// has value
+		assertTrue(property.isModified());
+		assertEquals(123, property.getValue());
+	}
 
-  /**
-   * Test for using tag "x-rawValue".
-   */
-  public void test_getValue_rawValue_modified() throws Exception {
-    prepareMyComponent(new String[]{
-        "// filler filler filler filler filler",
-        "public void setTest(int value) {",
-        "}"}, new String[]{
-        "<property id='setTest(int)'>",
-        "  <tag name='x-rawValue' value='true'/>",
-        "</property>"});
-    ControlInfo shell =
-        parse(
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <t:MyComponent wbp:name='component' test='SWT.PUSH'/>",
-            "</Shell>");
-    shell.refresh();
-    XmlObjectInfo component = getObjectByName("component");
-    GenericProperty property = (GenericProperty) component.getPropertyByTitle("test");
-    // has value
-    assertTrue(property.isModified());
-    assertEquals("SWT.PUSH", property.getValue());
-  }
+	/**
+	 * Test for using tag "x-rawValue".
+	 */
+	public void test_getValue_rawValue_modified() throws Exception {
+		prepareMyComponent(new String[]{
+				"// filler filler filler filler filler",
+				"public void setTest(int value) {",
+		"}"}, new String[]{
+				"<property id='setTest(int)'>",
+				"  <tag name='x-rawValue' value='true'/>",
+		"</property>"});
+		ControlInfo shell =
+				parse(
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <t:MyComponent wbp:name='component' test='SWT.PUSH'/>",
+						"</Shell>");
+		shell.refresh();
+		XmlObjectInfo component = getObjectByName("component");
+		GenericProperty property = (GenericProperty) component.getPropertyByTitle("test");
+		// has value
+		assertTrue(property.isModified());
+		assertEquals("SWT.PUSH", property.getValue());
+	}
 
-  /**
-   * Test for using tag "x-rawValue".
-   */
-  public void test_getValue_rawValue_default() throws Exception {
-    prepareMyComponent(new String[]{
-        "// filler filler filler filler filler",
-        "private String m_test = '555';",
-        "public String getTest() {",
-        "  return m_test;",
-        "}",
-        "public void setTest(String value) {",
-        "}"}, new String[]{
-        "<property id='setTest(java.lang.String)'>",
-        "  <tag name='x-rawValue' value='true'/>",
-        "</property>"});
-    ControlInfo shell =
-        parse(
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <t:MyComponent wbp:name='component'/>",
-            "</Shell>");
-    shell.refresh();
-    XmlObjectInfo component = getObjectByName("component");
-    GenericProperty property = (GenericProperty) component.getPropertyByTitle("test");
-    // has value
-    assertFalse(property.isModified());
-    assertEquals("555", property.getValue());
-  }
+	/**
+	 * Test for using tag "x-rawValue".
+	 */
+	public void test_getValue_rawValue_default() throws Exception {
+		prepareMyComponent(new String[]{
+				"// filler filler filler filler filler",
+				"private String m_test = '555';",
+				"public String getTest() {",
+				"  return m_test;",
+				"}",
+				"public void setTest(String value) {",
+		"}"}, new String[]{
+				"<property id='setTest(java.lang.String)'>",
+				"  <tag name='x-rawValue' value='true'/>",
+		"</property>"});
+		ControlInfo shell =
+				parse(
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <t:MyComponent wbp:name='component'/>",
+						"</Shell>");
+		shell.refresh();
+		XmlObjectInfo component = getObjectByName("component");
+		GenericProperty property = (GenericProperty) component.getPropertyByTitle("test");
+		// has value
+		assertFalse(property.isModified());
+		assertEquals("555", property.getValue());
+	}
 
-  public void test_getValue_notModified_defaultInDescription() throws Exception {
-    prepareMyComponent(new String[]{
-        "// filler filler filler filler filler",
-        "public void setTest(int value) {",
-        "}"}, new String[]{
-        "<property id='setTest(int)'>",
-        "  <defaultValue value='555'/>",
-        "</property>"});
-    ControlInfo shell =
-        parse(
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <RowLayout/>",
-            "  </Shell.layout>",
-            "  <t:MyComponent wbp:name='component'/>",
-            "</Shell>");
-    shell.refresh();
-    XmlObjectInfo component = getObjectByName("component");
-    GenericProperty property = (GenericProperty) component.getPropertyByTitle("test");
-    // not modified, but has value
-    assertFalse(property.isModified());
-    assertEquals(555, property.getValue());
-  }
+	public void test_getValue_notModified_defaultInDescription() throws Exception {
+		prepareMyComponent(new String[]{
+				"// filler filler filler filler filler",
+				"public void setTest(int value) {",
+		"}"}, new String[]{
+				"<property id='setTest(int)'>",
+				"  <defaultValue value='555'/>",
+		"</property>"});
+		ControlInfo shell =
+				parse(
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <RowLayout/>",
+						"  </Shell.layout>",
+						"  <t:MyComponent wbp:name='component'/>",
+						"</Shell>");
+		shell.refresh();
+		XmlObjectInfo component = getObjectByName("component");
+		GenericProperty property = (GenericProperty) component.getPropertyByTitle("test");
+		// not modified, but has value
+		assertFalse(property.isModified());
+		assertEquals(555, property.getValue());
+	}
 
-  public void test_getValue_notModified_defaultFromGetter() throws Exception {
-    prepareMyComponent(new String[]{
-        "// filler filler filler filler filler",
-        "private int m_test = 555;",
-        "public int getTest() {",
-        "  return m_test;",
-        "}",
-        "public void setTest(int value) {",
-        "  m_test = value;",
-        "}"});
-    ControlInfo shell =
-        parse(
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <RowLayout/>",
-            "  </Shell.layout>",
-            "  <t:MyComponent wbp:name='component'/>",
-            "</Shell>");
-    shell.refresh();
-    XmlObjectInfo component = getObjectByName("component");
-    GenericProperty property = (GenericProperty) component.getPropertyByTitle("test");
-    // not modified, but has value
-    assertFalse(property.isModified());
-    assertEquals(555, property.getValue());
-  }
+	public void test_getValue_notModified_defaultFromGetter() throws Exception {
+		prepareMyComponent(new String[]{
+				"// filler filler filler filler filler",
+				"private int m_test = 555;",
+				"public int getTest() {",
+				"  return m_test;",
+				"}",
+				"public void setTest(int value) {",
+				"  m_test = value;",
+		"}"});
+		ControlInfo shell =
+				parse(
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <RowLayout/>",
+						"  </Shell.layout>",
+						"  <t:MyComponent wbp:name='component'/>",
+						"</Shell>");
+		shell.refresh();
+		XmlObjectInfo component = getObjectByName("component");
+		GenericProperty property = (GenericProperty) component.getPropertyByTitle("test");
+		// not modified, but has value
+		assertFalse(property.isModified());
+		assertEquals(555, property.getValue());
+	}
 
-  public void test_getValue_notModified_defaultFromField() throws Exception {
-    prepareMyComponent(new String[]{
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "public int test = 555;"});
-    ControlInfo shell =
-        parse(
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <RowLayout/>",
-            "  </Shell.layout>",
-            "  <t:MyComponent wbp:name='component'/>",
-            "</Shell>");
-    shell.refresh();
-    XmlObjectInfo component = getObjectByName("component");
-    GenericProperty property = (GenericProperty) component.getPropertyByTitle("test");
-    // not modified, but has value
-    assertFalse(property.isModified());
-    assertEquals(555, property.getValue());
-  }
+	public void test_getValue_notModified_defaultFromField() throws Exception {
+		prepareMyComponent(new String[]{
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+		"public int test = 555;"});
+		ControlInfo shell =
+				parse(
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <RowLayout/>",
+						"  </Shell.layout>",
+						"  <t:MyComponent wbp:name='component'/>",
+						"</Shell>");
+		shell.refresh();
+		XmlObjectInfo component = getObjectByName("component");
+		GenericProperty property = (GenericProperty) component.getPropertyByTitle("test");
+		// not modified, but has value
+		assertFalse(property.isModified());
+		assertEquals(555, property.getValue());
+	}
 
-  /**
-   * Test for using {@link MethodExpressionAccessor} in {@link GenericProperty#setValue(Object)}.
-   */
-  public void test_setValue_method_noGetter() throws Exception {
-    prepareMyComponent(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "private int m_test;",
-        "public void setTest(int value) {",
-        "  m_test = value;",
-        "}");
-    ControlInfo shell =
-        parse(
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <RowLayout/>",
-            "  </Shell.layout>",
-            "  <t:MyComponent wbp:name='component'/>",
-            "</Shell>");
-    shell.refresh();
-    XmlObjectInfo component = getObjectByName("component");
-    GenericProperty property = (GenericProperty) component.getPropertyByTitle("test");
-    // it has object reference
-    assertSame(component, property.getObject());
-    // initially no value
-    assertFalse(property.isModified());
-    assertSame(Property.UNKNOWN_VALUE, property.getValue());
-    // set value
-    {
-      property.setValue(123);
-      assertXML(
-          "<Shell>",
-          "  <Shell.layout>",
-          "    <RowLayout/>",
-          "  </Shell.layout>",
-          "  <t:MyComponent wbp:name='component' test='123'/>",
-          "</Shell>");
-      // value is in object
-      assertEquals(123, ReflectionUtils.getFieldInt(component.getObject(), "m_test"));
-      // value is in property
-      assertTrue(property.isModified());
-      assertEquals(123, property.getValue());
-    }
-    // reset to default
-    {
-      property.setValue(Property.UNKNOWN_VALUE);
-      assertXML(
-          "<Shell>",
-          "  <Shell.layout>",
-          "    <RowLayout/>",
-          "  </Shell.layout>",
-          "  <t:MyComponent wbp:name='component'/>",
-          "</Shell>");
-      // no value in property
-      assertFalse(property.isModified());
-      assertSame(Property.UNKNOWN_VALUE, property.getValue());
-    }
-  }
+	/**
+	 * Test for using {@link MethodExpressionAccessor} in {@link GenericProperty#setValue(Object)}.
+	 */
+	public void test_setValue_method_noGetter() throws Exception {
+		prepareMyComponent(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"private int m_test;",
+				"public void setTest(int value) {",
+				"  m_test = value;",
+				"}");
+		ControlInfo shell =
+				parse(
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <RowLayout/>",
+						"  </Shell.layout>",
+						"  <t:MyComponent wbp:name='component'/>",
+						"</Shell>");
+		shell.refresh();
+		XmlObjectInfo component = getObjectByName("component");
+		GenericProperty property = (GenericProperty) component.getPropertyByTitle("test");
+		// it has object reference
+		assertSame(component, property.getObject());
+		// initially no value
+		assertFalse(property.isModified());
+		assertSame(Property.UNKNOWN_VALUE, property.getValue());
+		// set value
+		{
+			property.setValue(123);
+			assertXML(
+					"<Shell>",
+					"  <Shell.layout>",
+					"    <RowLayout/>",
+					"  </Shell.layout>",
+					"  <t:MyComponent wbp:name='component' test='123'/>",
+					"</Shell>");
+			// value is in object
+			assertEquals(123, ReflectionUtils.getFieldInt(component.getObject(), "m_test"));
+			// value is in property
+			assertTrue(property.isModified());
+			assertEquals(123, property.getValue());
+		}
+		// reset to default
+		{
+			property.setValue(Property.UNKNOWN_VALUE);
+			assertXML(
+					"<Shell>",
+					"  <Shell.layout>",
+					"    <RowLayout/>",
+					"  </Shell.layout>",
+					"  <t:MyComponent wbp:name='component'/>",
+					"</Shell>");
+			// no value in property
+			assertFalse(property.isModified());
+			assertSame(Property.UNKNOWN_VALUE, property.getValue());
+		}
+	}
 
-  /**
-   * Test for using {@link MethodExpressionAccessor} in {@link GenericProperty#setValue(Object)}.
-   */
-  public void test_setValue_method_hasGetter() throws Exception {
-    prepareMyComponent(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "private int m_test = 555;",
-        "public int getTest() {",
-        "  return m_test;",
-        "}",
-        "public void setTest(int value) {",
-        "  m_test = value;",
-        "}");
-    ControlInfo shell =
-        parse(
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <RowLayout/>",
-            "  </Shell.layout>",
-            "  <t:MyComponent wbp:name='component'/>",
-            "</Shell>");
-    shell.refresh();
-    XmlObjectInfo component = getObjectByName("component");
-    GenericProperty property = (GenericProperty) component.getPropertyByTitle("test");
-    // has default value
-    assertFalse(property.isModified());
-    assertEquals(555, property.getValue());
-    // set value
-    {
-      property.setValue(123);
-      assertXML(
-          "<Shell>",
-          "  <Shell.layout>",
-          "    <RowLayout/>",
-          "  </Shell.layout>",
-          "  <t:MyComponent wbp:name='component' test='123'/>",
-          "</Shell>");
-      // value is in object
-      assertEquals(123, ReflectionUtils.getFieldInt(component.getObject(), "m_test"));
-      // value is in property
-      assertTrue(property.isModified());
-      assertEquals(123, property.getValue());
-    }
-    // set default, so remove
-    {
-      property.setValue(555);
-      assertXML(
-          "<Shell>",
-          "  <Shell.layout>",
-          "    <RowLayout/>",
-          "  </Shell.layout>",
-          "  <t:MyComponent wbp:name='component'/>",
-          "</Shell>");
-      // not modified, but has default value
-      assertFalse(property.isModified());
-      assertEquals(555, property.getValue());
-    }
-  }
+	/**
+	 * Test for using {@link MethodExpressionAccessor} in {@link GenericProperty#setValue(Object)}.
+	 */
+	public void test_setValue_method_hasGetter() throws Exception {
+		prepareMyComponent(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"private int m_test = 555;",
+				"public int getTest() {",
+				"  return m_test;",
+				"}",
+				"public void setTest(int value) {",
+				"  m_test = value;",
+				"}");
+		ControlInfo shell =
+				parse(
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <RowLayout/>",
+						"  </Shell.layout>",
+						"  <t:MyComponent wbp:name='component'/>",
+						"</Shell>");
+		shell.refresh();
+		XmlObjectInfo component = getObjectByName("component");
+		GenericProperty property = (GenericProperty) component.getPropertyByTitle("test");
+		// has default value
+		assertFalse(property.isModified());
+		assertEquals(555, property.getValue());
+		// set value
+		{
+			property.setValue(123);
+			assertXML(
+					"<Shell>",
+					"  <Shell.layout>",
+					"    <RowLayout/>",
+					"  </Shell.layout>",
+					"  <t:MyComponent wbp:name='component' test='123'/>",
+					"</Shell>");
+			// value is in object
+			assertEquals(123, ReflectionUtils.getFieldInt(component.getObject(), "m_test"));
+			// value is in property
+			assertTrue(property.isModified());
+			assertEquals(123, property.getValue());
+		}
+		// set default, so remove
+		{
+			property.setValue(555);
+			assertXML(
+					"<Shell>",
+					"  <Shell.layout>",
+					"    <RowLayout/>",
+					"  </Shell.layout>",
+					"  <t:MyComponent wbp:name='component'/>",
+					"</Shell>");
+			// not modified, but has default value
+			assertFalse(property.isModified());
+			assertEquals(555, property.getValue());
+		}
+	}
 
-  /**
-   * Test for using {@link FieldExpressionAccessor} in {@link GenericProperty#setValue(Object)}.
-   */
-  public void test_setValue_field() throws Exception {
-    prepareMyComponent(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "public int test = 555;");
-    ControlInfo shell =
-        parse(
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <RowLayout/>",
-            "  </Shell.layout>",
-            "  <t:MyComponent wbp:name='component'/>",
-            "</Shell>");
-    shell.refresh();
-    XmlObjectInfo component = getObjectByName("component");
-    GenericProperty property = (GenericProperty) component.getPropertyByTitle("test");
-    // has default value
-    assertFalse(property.isModified());
-    assertEquals(555, property.getValue());
-    // set value
-    {
-      property.setValue(123);
-      assertXML(
-          "<Shell>",
-          "  <Shell.layout>",
-          "    <RowLayout/>",
-          "  </Shell.layout>",
-          "  <t:MyComponent wbp:name='component' test='123'/>",
-          "</Shell>");
-      // value is in object
-      assertEquals(123, ReflectionUtils.getFieldInt(component.getObject(), "test"));
-      // value is in property
-      assertTrue(property.isModified());
-      assertEquals(123, property.getValue());
-    }
-    // set default, so remove
-    {
-      property.setValue(555);
-      assertXML(
-          "<Shell>",
-          "  <Shell.layout>",
-          "    <RowLayout/>",
-          "  </Shell.layout>",
-          "  <t:MyComponent wbp:name='component'/>",
-          "</Shell>");
-      // not modified, but has default value
-      assertFalse(property.isModified());
-      assertEquals(555, property.getValue());
-    }
-  }
+	/**
+	 * Test for using {@link FieldExpressionAccessor} in {@link GenericProperty#setValue(Object)}.
+	 */
+	public void test_setValue_field() throws Exception {
+		prepareMyComponent(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"public int test = 555;");
+		ControlInfo shell =
+				parse(
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <RowLayout/>",
+						"  </Shell.layout>",
+						"  <t:MyComponent wbp:name='component'/>",
+						"</Shell>");
+		shell.refresh();
+		XmlObjectInfo component = getObjectByName("component");
+		GenericProperty property = (GenericProperty) component.getPropertyByTitle("test");
+		// has default value
+		assertFalse(property.isModified());
+		assertEquals(555, property.getValue());
+		// set value
+		{
+			property.setValue(123);
+			assertXML(
+					"<Shell>",
+					"  <Shell.layout>",
+					"    <RowLayout/>",
+					"  </Shell.layout>",
+					"  <t:MyComponent wbp:name='component' test='123'/>",
+					"</Shell>");
+			// value is in object
+			assertEquals(123, ReflectionUtils.getFieldInt(component.getObject(), "test"));
+			// value is in property
+			assertTrue(property.isModified());
+			assertEquals(123, property.getValue());
+		}
+		// set default, so remove
+		{
+			property.setValue(555);
+			assertXML(
+					"<Shell>",
+					"  <Shell.layout>",
+					"    <RowLayout/>",
+					"  </Shell.layout>",
+					"  <t:MyComponent wbp:name='component'/>",
+					"</Shell>");
+			// not modified, but has default value
+			assertFalse(property.isModified());
+			assertEquals(555, property.getValue());
+		}
+	}
 
-  public void test_setValue_keepDefault_setDefault() throws Exception {
-    prepareMyComponent(new String[]{
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "public int test = 555;"}, new String[]{
-        "<property id='test'>",
-        "  <tag name='x-keepDefault' value='true'/>",
-        "</property>"});
-    ControlInfo shell =
-        parse(
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <RowLayout/>",
-            "  </Shell.layout>",
-            "  <t:MyComponent wbp:name='component' test='123'/>",
-            "</Shell>");
-    shell.refresh();
-    XmlObjectInfo component = getObjectByName("component");
-    GenericProperty property = (GenericProperty) component.getPropertyByTitle("test");
-    // has value
-    assertTrue(property.isModified());
-    assertEquals(123, property.getValue());
-    // set default, but keep it
-    {
-      property.setValue(555);
-      assertXML(
-          "<Shell>",
-          "  <Shell.layout>",
-          "    <RowLayout/>",
-          "  </Shell.layout>",
-          "  <t:MyComponent wbp:name='component' test='555'/>",
-          "</Shell>");
-      // always modified, has default value
-      assertTrue(property.isModified());
-      assertEquals(555, property.getValue());
-    }
-  }
+	public void test_setValue_keepDefault_setDefault() throws Exception {
+		prepareMyComponent(new String[]{
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+		"public int test = 555;"}, new String[]{
+				"<property id='test'>",
+				"  <tag name='x-keepDefault' value='true'/>",
+		"</property>"});
+		ControlInfo shell =
+				parse(
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <RowLayout/>",
+						"  </Shell.layout>",
+						"  <t:MyComponent wbp:name='component' test='123'/>",
+						"</Shell>");
+		shell.refresh();
+		XmlObjectInfo component = getObjectByName("component");
+		GenericProperty property = (GenericProperty) component.getPropertyByTitle("test");
+		// has value
+		assertTrue(property.isModified());
+		assertEquals(123, property.getValue());
+		// set default, but keep it
+		{
+			property.setValue(555);
+			assertXML(
+					"<Shell>",
+					"  <Shell.layout>",
+					"    <RowLayout/>",
+					"  </Shell.layout>",
+					"  <t:MyComponent wbp:name='component' test='555'/>",
+					"</Shell>");
+			// always modified, has default value
+			assertTrue(property.isModified());
+			assertEquals(555, property.getValue());
+		}
+	}
 
-  public void test_setValue_keepDefault_askRemove() throws Exception {
-    prepareMyComponent(new String[]{
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "public int test = 555;"}, new String[]{
-        "<property id='test'>",
-        "  <tag name='x-keepDefault' value='true'/>",
-        "</property>"});
-    ControlInfo shell =
-        parse(
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <RowLayout/>",
-            "  </Shell.layout>",
-            "  <t:MyComponent wbp:name='component' test='123'/>",
-            "</Shell>");
-    shell.refresh();
-    XmlObjectInfo component = getObjectByName("component");
-    GenericProperty property = (GenericProperty) component.getPropertyByTitle("test");
-    // has value
-    assertTrue(property.isModified());
-    assertEquals(123, property.getValue());
-    // ask to remove, but keep it
-    {
-      property.setValue(Property.UNKNOWN_VALUE);
-      assertXML(
-          "<Shell>",
-          "  <Shell.layout>",
-          "    <RowLayout/>",
-          "  </Shell.layout>",
-          "  <t:MyComponent wbp:name='component' test='555'/>",
-          "</Shell>");
-      // always modified, has default value
-      assertTrue(property.isModified());
-      assertEquals(555, property.getValue());
-    }
-  }
+	public void test_setValue_keepDefault_askRemove() throws Exception {
+		prepareMyComponent(new String[]{
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+		"public int test = 555;"}, new String[]{
+				"<property id='test'>",
+				"  <tag name='x-keepDefault' value='true'/>",
+		"</property>"});
+		ControlInfo shell =
+				parse(
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <RowLayout/>",
+						"  </Shell.layout>",
+						"  <t:MyComponent wbp:name='component' test='123'/>",
+						"</Shell>");
+		shell.refresh();
+		XmlObjectInfo component = getObjectByName("component");
+		GenericProperty property = (GenericProperty) component.getPropertyByTitle("test");
+		// has value
+		assertTrue(property.isModified());
+		assertEquals(123, property.getValue());
+		// ask to remove, but keep it
+		{
+			property.setValue(Property.UNKNOWN_VALUE);
+			assertXML(
+					"<Shell>",
+					"  <Shell.layout>",
+					"    <RowLayout/>",
+					"  </Shell.layout>",
+					"  <t:MyComponent wbp:name='component' test='555'/>",
+					"</Shell>");
+			// always modified, has default value
+			assertTrue(property.isModified());
+			assertEquals(555, property.getValue());
+		}
+	}
 
-  /**
-   * Test for using {@link IExpressionPropertyEditor}.
-   */
-  public void test_setValue_forStaticField() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    refresh();
-    XmlObjectInfo button = getObjectByName("button");
-    //
-    Property property = button.getPropertyByTitle("alignment");
-    property.setValue(SWT.LEFT);
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Button wbp:name='button' alignment='LEFT'/>",
-        "</Shell>");
-  }
+	/**
+	 * Test for using {@link IExpressionPropertyEditor}.
+	 */
+	public void test_setValue_forStaticField() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		refresh();
+		XmlObjectInfo button = getObjectByName("button");
+		//
+		Property property = button.getPropertyByTitle("alignment");
+		property.setValue(SWT.LEFT);
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Button wbp:name='button' alignment='LEFT'/>",
+				"</Shell>");
+	}
 
-  /**
-   * Test for using {@link ContentExpressionAccessor}.
-   */
-  public void test_isContent() throws Exception {
-    prepareMyComponent(
-        new String[]{
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "public int test = 555;"},
-        new String[]{"<property-tag name='test' tag='isContent' value='true'/>"});
-    ControlInfo shell =
-        parse(
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <RowLayout/>",
-            "  </Shell.layout>",
-            "  <t:MyComponent wbp:name='component'/>",
-            "</Shell>");
-    shell.refresh();
-    XmlObjectInfo component = getObjectByName("component");
-    GenericProperty property = (GenericProperty) component.getPropertyByTitle("test");
-    // has default value
-    assertFalse(property.isModified());
-    assertEquals(555, property.getValue());
-    assertEquals(null, property.getExpression());
-    // set value
-    {
-      property.setValue(123);
-      assertXML(
-          "<Shell>",
-          "  <Shell.layout>",
-          "    <RowLayout/>",
-          "  </Shell.layout>",
-          "  <t:MyComponent wbp:name='component'>123</t:MyComponent>",
-          "</Shell>");
-      // value is in property
-      assertTrue(property.isModified());
-      assertEquals("123", property.getExpression());
-    }
-    // set default, so remove
-    {
-      property.setValue(555);
-      assertXML(
-          "<Shell>",
-          "  <Shell.layout>",
-          "    <RowLayout/>",
-          "  </Shell.layout>",
-          "  <t:MyComponent wbp:name='component'/>",
-          "</Shell>");
-      // not modified, but has default value
-      assertFalse(property.isModified());
-      assertEquals(555, property.getValue());
-      assertEquals(null, property.getExpression());
-    }
-  }
+	/**
+	 * Test for using {@link ContentExpressionAccessor}.
+	 */
+	public void test_isContent() throws Exception {
+		prepareMyComponent(
+				new String[]{
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+				"public int test = 555;"},
+				new String[]{"<property-tag name='test' tag='isContent' value='true'/>"});
+		ControlInfo shell =
+				parse(
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <RowLayout/>",
+						"  </Shell.layout>",
+						"  <t:MyComponent wbp:name='component'/>",
+						"</Shell>");
+		shell.refresh();
+		XmlObjectInfo component = getObjectByName("component");
+		GenericProperty property = (GenericProperty) component.getPropertyByTitle("test");
+		// has default value
+		assertFalse(property.isModified());
+		assertEquals(555, property.getValue());
+		assertEquals(null, property.getExpression());
+		// set value
+		{
+			property.setValue(123);
+			assertXML(
+					"<Shell>",
+					"  <Shell.layout>",
+					"    <RowLayout/>",
+					"  </Shell.layout>",
+					"  <t:MyComponent wbp:name='component'>123</t:MyComponent>",
+					"</Shell>");
+			// value is in property
+			assertTrue(property.isModified());
+			assertEquals("123", property.getExpression());
+		}
+		// set default, so remove
+		{
+			property.setValue(555);
+			assertXML(
+					"<Shell>",
+					"  <Shell.layout>",
+					"    <RowLayout/>",
+					"  </Shell.layout>",
+					"  <t:MyComponent wbp:name='component'/>",
+					"</Shell>");
+			// not modified, but has default value
+			assertFalse(property.isModified());
+			assertEquals(555, property.getValue());
+			assertEquals(null, property.getExpression());
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Expression
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link GenericProperty#getExpression()}.
-   */
-  public void test_getExpression() throws Exception {
-    prepareMyComponent(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "public int test;");
-    ControlInfo shell =
-        parse(
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <t:MyComponent wbp:name='component' test='123'/>",
-            "</Shell>");
-    shell.refresh();
-    XmlObjectInfo component = getObjectByName("component");
-    GenericProperty property = (GenericProperty) component.getPropertyByTitle("test");
-    //
-    assertEquals("123", property.getExpression());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Expression
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link GenericProperty#getExpression()}.
+	 */
+	public void test_getExpression() throws Exception {
+		prepareMyComponent(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"public int test;");
+		ControlInfo shell =
+				parse(
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <t:MyComponent wbp:name='component' test='123'/>",
+						"</Shell>");
+		shell.refresh();
+		XmlObjectInfo component = getObjectByName("component");
+		GenericProperty property = (GenericProperty) component.getPropertyByTitle("test");
+		//
+		assertEquals("123", property.getExpression());
+	}
 
-  /**
-   * Test for {@link GenericProperty#setExpression(String)}.
-   */
-  public void test_setExpression() throws Exception {
-    prepareMyComponent(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "public int test = 5;");
-    ControlInfo shell =
-        parse(
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <t:MyComponent wbp:name='component'/>",
-            "</Shell>");
-    shell.refresh();
-    XmlObjectInfo component = getObjectByName("component");
-    GenericProperty property = (GenericProperty) component.getPropertyByTitle("test");
-    // no value
-    property.setExpression("1", Property.UNKNOWN_VALUE);
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <t:MyComponent wbp:name='component' test='1'/>",
-        "</Shell>");
-    // non-default value
-    property.setExpression("2", Integer.valueOf(2));
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <t:MyComponent wbp:name='component' test='2'/>",
-        "</Shell>");
-    // default value
-    property.setExpression("5", Integer.valueOf(5));
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <t:MyComponent wbp:name='component'/>",
-        "</Shell>");
-  }
+	/**
+	 * Test for {@link GenericProperty#setExpression(String)}.
+	 */
+	public void test_setExpression() throws Exception {
+		prepareMyComponent(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"public int test = 5;");
+		ControlInfo shell =
+				parse(
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <t:MyComponent wbp:name='component'/>",
+						"</Shell>");
+		shell.refresh();
+		XmlObjectInfo component = getObjectByName("component");
+		GenericProperty property = (GenericProperty) component.getPropertyByTitle("test");
+		// no value
+		property.setExpression("1", Property.UNKNOWN_VALUE);
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <t:MyComponent wbp:name='component' test='1'/>",
+				"</Shell>");
+		// non-default value
+		property.setExpression("2", Integer.valueOf(2));
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <t:MyComponent wbp:name='component' test='2'/>",
+				"</Shell>");
+		// default value
+		property.setExpression("5", Integer.valueOf(5));
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <t:MyComponent wbp:name='component'/>",
+				"</Shell>");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Validation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for using {@link GenericPropertySetValue} for validation.
-   */
-  public void test_GenericProperty_valueValidation_1() throws Exception {
-    XmlObjectInfo panel = parse("<Shell/>");
-    Property enabledProperty = panel.getPropertyByTitle("enabled");
-    // add listener that prevents "enabled" modification
-    panel.addBroadcastListener(new GenericPropertySetValue() {
-      @Override
-      public void invoke(GenericPropertyImpl property, Object[] value, boolean[] shouldSetValue)
-          throws Exception {
-        if ("enabled".equals(property.getTitle())) {
-          shouldSetValue[0] = false;
-        }
-      }
-    });
-    // try to set value
-    enabledProperty.setValue(false);
-    assertXML("<Shell/>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Validation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for using {@link GenericPropertySetValue} for validation.
+	 */
+	public void test_GenericProperty_valueValidation_1() throws Exception {
+		XmlObjectInfo panel = parse("<Shell/>");
+		Property enabledProperty = panel.getPropertyByTitle("enabled");
+		// add listener that prevents "enabled" modification
+		panel.addBroadcastListener(new GenericPropertySetValue() {
+			@Override
+			public void invoke(GenericPropertyImpl property, Object[] value, boolean[] shouldSetValue)
+					throws Exception {
+				if ("enabled".equals(property.getTitle())) {
+					shouldSetValue[0] = false;
+				}
+			}
+		});
+		// try to set value
+		enabledProperty.setValue(false);
+		assertXML("<Shell/>");
+	}
 
-  /**
-   * Test for using {@link GenericPropertySetValue} for validation.
-   */
-  public void test_GenericProperty_valueValidation_2() throws Exception {
-    XmlObjectInfo panel = parse("<Shell/>");
-    Property enabledProperty = panel.getPropertyByTitle("enabled");
-    // add listener that on "enabled" modification modifies also "visible"
-    panel.addBroadcastListener(new GenericPropertySetValue() {
-      @Override
-      public void invoke(GenericPropertyImpl property, Object[] value, boolean[] shouldSetValue)
-          throws Exception {
-        if ("enabled".equals(property.getTitle())) {
-          property.getObject().getPropertyByTitle("modified").setValue(true);
-        }
-      }
-    });
-    // try to set value
-    enabledProperty.setValue(false);
-    assertXML("<Shell modified='true' enabled='false'/>");
-  }
+	/**
+	 * Test for using {@link GenericPropertySetValue} for validation.
+	 */
+	public void test_GenericProperty_valueValidation_2() throws Exception {
+		XmlObjectInfo panel = parse("<Shell/>");
+		Property enabledProperty = panel.getPropertyByTitle("enabled");
+		// add listener that on "enabled" modification modifies also "visible"
+		panel.addBroadcastListener(new GenericPropertySetValue() {
+			@Override
+			public void invoke(GenericPropertyImpl property, Object[] value, boolean[] shouldSetValue)
+					throws Exception {
+				if ("enabled".equals(property.getTitle())) {
+					property.getObject().getPropertyByTitle("modified").setValue(true);
+				}
+			}
+		});
+		// try to set value
+		enabledProperty.setValue(false);
+		assertXML("<Shell modified='true' enabled='false'/>");
+	}
 
-  /**
-   * Test for using {@link GenericPropertySetExpression} for validation.
-   */
-  public void test_GenericProperty_expressionValidation_1() throws Exception {
-    XmlObjectInfo panel = parse("<Shell/>");
-    GenericProperty enabledProperty = (GenericProperty) panel.getPropertyByTitle("enabled");
-    // add listener that prevents "enabled" modification
-    panel.addBroadcastListener(new GenericPropertySetExpression() {
-      @Override
-      public void invoke(GenericPropertyImpl property,
-          String[] epxression,
-          Object[] value,
-          boolean[] shouldSet) throws Exception {
-        if ("enabled".equals(property.getTitle())) {
-          shouldSet[0] = false;
-        }
-      }
-    });
-    // try to set value
-    enabledProperty.setExpression("false", false);
-    assertXML("<Shell/>");
-  }
+	/**
+	 * Test for using {@link GenericPropertySetExpression} for validation.
+	 */
+	public void test_GenericProperty_expressionValidation_1() throws Exception {
+		XmlObjectInfo panel = parse("<Shell/>");
+		GenericProperty enabledProperty = (GenericProperty) panel.getPropertyByTitle("enabled");
+		// add listener that prevents "enabled" modification
+		panel.addBroadcastListener(new GenericPropertySetExpression() {
+			@Override
+			public void invoke(GenericPropertyImpl property,
+					String[] epxression,
+					Object[] value,
+					boolean[] shouldSet) throws Exception {
+				if ("enabled".equals(property.getTitle())) {
+					shouldSet[0] = false;
+				}
+			}
+		});
+		// try to set value
+		enabledProperty.setExpression("false", false);
+		assertXML("<Shell/>");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GenericProperty_getPropertyValue
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for using {@link GenericPropertyGetValue}.
-   * <p>
-   * Return {@link String} instead of <code>boolean</code>.
-   */
-  public void test_GenericProperty_getPropertyValue_String() throws Exception {
-    XmlObjectInfo panel = parse("<Shell/>");
-    final GenericProperty enabledProperty = (GenericProperty) panel.getPropertyByTitle("enabled");
-    // initially normal, boolean value
-    assertEquals(Boolean.TRUE, enabledProperty.getValue());
-    // add listener that forces "enabled" value
-    panel.addBroadcastListener(new GenericPropertyGetValue() {
-      @Override
-      public void invoke(GenericPropertyImpl property, Object[] value) throws Exception {
-        if (property == enabledProperty) {
-          assertSame(Property.UNKNOWN_VALUE, value[0]);
-          value[0] = "String, not boolean";
-        }
-      }
-    });
-    // ask for value
-    assertEquals("String, not boolean", enabledProperty.getValue());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GenericProperty_getPropertyValue
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for using {@link GenericPropertyGetValue}.
+	 * <p>
+	 * Return {@link String} instead of <code>boolean</code>.
+	 */
+	public void test_GenericProperty_getPropertyValue_String() throws Exception {
+		XmlObjectInfo panel = parse("<Shell/>");
+		final GenericProperty enabledProperty = (GenericProperty) panel.getPropertyByTitle("enabled");
+		// initially normal, boolean value
+		assertEquals(Boolean.TRUE, enabledProperty.getValue());
+		// add listener that forces "enabled" value
+		panel.addBroadcastListener(new GenericPropertyGetValue() {
+			@Override
+			public void invoke(GenericPropertyImpl property, Object[] value) throws Exception {
+				if (property == enabledProperty) {
+					assertSame(Property.UNKNOWN_VALUE, value[0]);
+					value[0] = "String, not boolean";
+				}
+			}
+		});
+		// ask for value
+		assertEquals("String, not boolean", enabledProperty.getValue());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // getClipboardSource()
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link GenericPropertyImpl#getClipboardSource()}.
-   */
-  public void test_getClipboardSource_notModified() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    refresh();
-    XmlObjectInfo button = getObjectByName("button");
-    //
-    GenericPropertyImpl textProperty = (GenericPropertyImpl) button.getPropertyByTitle("text");
-    assertFalse(textProperty.isModified());
-    assertSame(null, textProperty.getClipboardSource());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// getClipboardSource()
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link GenericPropertyImpl#getClipboardSource()}.
+	 */
+	public void test_getClipboardSource_notModified() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		refresh();
+		XmlObjectInfo button = getObjectByName("button");
+		//
+		GenericPropertyImpl textProperty = (GenericPropertyImpl) button.getPropertyByTitle("text");
+		assertFalse(textProperty.isModified());
+		assertSame(null, textProperty.getClipboardSource());
+	}
 
-  /**
-   * Test for {@link GenericPropertyImpl#getClipboardSource()}.
-   */
-  public void test_getClipboardSource_noConverter() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Button wbp:name='button' text='abc'/>",
-        "</Shell>");
-    refresh();
-    XmlObjectInfo button = getObjectByName("button");
-    //
-    GenericPropertyDescription description =
-        new GenericPropertyDescription("id", "name", null, new EmptyExpressionAccessor() {
-          @Override
-          public boolean isModified(XmlObjectInfo object) throws Exception {
-            return true;
-          }
-        });
-    GenericPropertyImpl property = new GenericPropertyImpl(button, description);
-    assertEquals(null, property.getClipboardSource());
-  }
+	/**
+	 * Test for {@link GenericPropertyImpl#getClipboardSource()}.
+	 */
+	public void test_getClipboardSource_noConverter() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Button wbp:name='button' text='abc'/>",
+				"</Shell>");
+		refresh();
+		XmlObjectInfo button = getObjectByName("button");
+		//
+		GenericPropertyDescription description =
+				new GenericPropertyDescription("id", "name", null, new EmptyExpressionAccessor() {
+					@Override
+					public boolean isModified(XmlObjectInfo object) throws Exception {
+						return true;
+					}
+				});
+		GenericPropertyImpl property = new GenericPropertyImpl(button, description);
+		assertEquals(null, property.getClipboardSource());
+	}
 
-  /**
-   * Test for {@link GenericPropertyImpl#getClipboardSource()}.
-   */
-  public void test_getClipboardSource_useConverter() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Button wbp:name='button' text='abc'/>",
-        "</Shell>");
-    refresh();
-    XmlObjectInfo button = getObjectByName("button");
-    //
-    GenericPropertyImpl textProperty = (GenericPropertyImpl) button.getPropertyByTitle("text");
-    assertTrue(textProperty.isModified());
-    assertEquals("abc", textProperty.getClipboardSource());
-  }
+	/**
+	 * Test for {@link GenericPropertyImpl#getClipboardSource()}.
+	 */
+	public void test_getClipboardSource_useConverter() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Button wbp:name='button' text='abc'/>",
+				"</Shell>");
+		refresh();
+		XmlObjectInfo button = getObjectByName("button");
+		//
+		GenericPropertyImpl textProperty = (GenericPropertyImpl) button.getPropertyByTitle("text");
+		assertTrue(textProperty.isModified());
+		assertEquals("abc", textProperty.getClipboardSource());
+	}
 
-  /**
-   * Test for {@link GenericPropertyImpl#getClipboardSource()}.
-   */
-  public void test_getClipboardSource_useEditor() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Button wbp:name='button' alignment='CENTER'/>",
-        "</Shell>");
-    refresh();
-    XmlObjectInfo button = getObjectByName("button");
-    //
-    GenericPropertyImpl alignmentProperty =
-        (GenericPropertyImpl) button.getPropertyByTitle("alignment");
-    assertTrue(alignmentProperty.isModified());
-    assertEquals("CENTER", alignmentProperty.getClipboardSource());
-  }
+	/**
+	 * Test for {@link GenericPropertyImpl#getClipboardSource()}.
+	 */
+	public void test_getClipboardSource_useEditor() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Button wbp:name='button' alignment='CENTER'/>",
+				"</Shell>");
+		refresh();
+		XmlObjectInfo button = getObjectByName("button");
+		//
+		GenericPropertyImpl alignmentProperty =
+				(GenericPropertyImpl) button.getPropertyByTitle("alignment");
+		assertTrue(alignmentProperty.isModified());
+		assertEquals("CENTER", alignmentProperty.getClipboardSource());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // GenericPropertyComposite
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for implementation of {@link Property#getComposite(Property[])}.
-   */
-  public void test_GenericPropertyComposite() throws Exception {
-    XmlObjectInfo shell =
-        parse(
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Button wbp:name='button_1' text='111'/>",
-            "  <Button wbp:name='button_2' text='222'/>",
-            "</Shell>");
-    refresh();
-    XmlObjectInfo button_1 = getObjectByName("button_1");
-    XmlObjectInfo button_2 = getObjectByName("button_2");
-    // "enabled" property
-    {
-      GenericProperty enabledProperty_1 = (GenericProperty) button_1.getPropertyByTitle("enabled");
-      GenericProperty enabledProperty_2 = (GenericProperty) button_2.getPropertyByTitle("enabled");
-      assertFalse(enabledProperty_1.isModified());
-      assertFalse(enabledProperty_2.isModified());
-      assertEquals(true, enabledProperty_1.getValue());
-      assertEquals(true, enabledProperty_2.getValue());
-      // create complex property
-      Property[] properties = new Property[]{enabledProperty_1, enabledProperty_2};
-      GenericProperty compositeProperty =
-          (GenericProperty) enabledProperty_1.getComposite(properties);
-      // check complex property
-      assertEquals("enabled", compositeProperty.getTitle());
-      assertFalse(compositeProperty.isModified());
-      assertEquals(true, compositeProperty.getValue());
-      assertEquals(null, compositeProperty.getExpression());
-    }
-    // "text" property
-    {
-      GenericProperty textProperty_1 = (GenericProperty) button_1.getPropertyByTitle("text");
-      GenericProperty textProperty_2 = (GenericProperty) button_2.getPropertyByTitle("text");
-      assertTrue(textProperty_1.isModified());
-      assertTrue(textProperty_2.isModified());
-      assertEquals("111", textProperty_1.getValue());
-      assertEquals("222", textProperty_2.getValue());
-      // create complex property
-      Property[] properties = new Property[]{textProperty_1, textProperty_2};
-      GenericProperty compositeProperty = (GenericProperty) textProperty_1.getComposite(properties);
-      // check complex property
-      assertEquals("text", compositeProperty.getTitle());
-      assertTrue(compositeProperty.isModified());
-      assertEquals(textProperty_1.getCategory(), compositeProperty.getCategory());
-      assertEquals(textProperty_2.getCategory(), compositeProperty.getCategory());
-      // hasTag()
-      assertTrue(compositeProperty.hasTrueTag("isText"));
-      assertFalse(compositeProperty.hasTrueTag("noSuchTag"));
-      // hashCode()
-      assertEquals(2, compositeProperty.hashCode());
-      // equals()
-      {
-        assertTrue(compositeProperty.equals(compositeProperty));
-        assertFalse(compositeProperty.equals(this));
-        //
-        Property composite2 = textProperty_2.getComposite(properties);
-        assertTrue(compositeProperty.equals(composite2));
-      }
-      // check different values
-      assertSame(Property.UNKNOWN_VALUE, compositeProperty.getValue());
-      assertEquals(null, compositeProperty.getExpression());
-      // setValue()
-      {
-        compositeProperty.setValue("333");
-        assertEquals("333", compositeProperty.getValue());
-        assertEquals("333", compositeProperty.getExpression());
-        assertXML(
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Button wbp:name='button_1' text='333'/>",
-            "  <Button wbp:name='button_2' text='333'/>",
-            "</Shell>");
-      }
-      // setExpression()
-      {
-        String value = "444";
-        compositeProperty.setExpression(StringConverter.INSTANCE.toSource(shell, value), value);
-        assertEquals("444", compositeProperty.getValue());
-        assertEquals("444", compositeProperty.getExpression());
-        assertXML(
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Button wbp:name='button_1' text='444'/>",
-            "  <Button wbp:name='button_2' text='444'/>",
-            "</Shell>");
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// GenericPropertyComposite
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for implementation of {@link Property#getComposite(Property[])}.
+	 */
+	public void test_GenericPropertyComposite() throws Exception {
+		XmlObjectInfo shell =
+				parse(
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Button wbp:name='button_1' text='111'/>",
+						"  <Button wbp:name='button_2' text='222'/>",
+						"</Shell>");
+		refresh();
+		XmlObjectInfo button_1 = getObjectByName("button_1");
+		XmlObjectInfo button_2 = getObjectByName("button_2");
+		// "enabled" property
+		{
+			GenericProperty enabledProperty_1 = (GenericProperty) button_1.getPropertyByTitle("enabled");
+			GenericProperty enabledProperty_2 = (GenericProperty) button_2.getPropertyByTitle("enabled");
+			assertFalse(enabledProperty_1.isModified());
+			assertFalse(enabledProperty_2.isModified());
+			assertEquals(true, enabledProperty_1.getValue());
+			assertEquals(true, enabledProperty_2.getValue());
+			// create complex property
+			Property[] properties = new Property[]{enabledProperty_1, enabledProperty_2};
+			GenericProperty compositeProperty =
+					(GenericProperty) enabledProperty_1.getComposite(properties);
+			// check complex property
+			assertEquals("enabled", compositeProperty.getTitle());
+			assertFalse(compositeProperty.isModified());
+			assertEquals(true, compositeProperty.getValue());
+			assertEquals(null, compositeProperty.getExpression());
+		}
+		// "text" property
+		{
+			GenericProperty textProperty_1 = (GenericProperty) button_1.getPropertyByTitle("text");
+			GenericProperty textProperty_2 = (GenericProperty) button_2.getPropertyByTitle("text");
+			assertTrue(textProperty_1.isModified());
+			assertTrue(textProperty_2.isModified());
+			assertEquals("111", textProperty_1.getValue());
+			assertEquals("222", textProperty_2.getValue());
+			// create complex property
+			Property[] properties = new Property[]{textProperty_1, textProperty_2};
+			GenericProperty compositeProperty = (GenericProperty) textProperty_1.getComposite(properties);
+			// check complex property
+			assertEquals("text", compositeProperty.getTitle());
+			assertTrue(compositeProperty.isModified());
+			assertEquals(textProperty_1.getCategory(), compositeProperty.getCategory());
+			assertEquals(textProperty_2.getCategory(), compositeProperty.getCategory());
+			// hasTag()
+			assertTrue(compositeProperty.hasTrueTag("isText"));
+			assertFalse(compositeProperty.hasTrueTag("noSuchTag"));
+			// hashCode()
+			assertEquals(2, compositeProperty.hashCode());
+			// equals()
+			{
+				assertTrue(compositeProperty.equals(compositeProperty));
+				assertFalse(compositeProperty.equals(this));
+				//
+				Property composite2 = textProperty_2.getComposite(properties);
+				assertTrue(compositeProperty.equals(composite2));
+			}
+			// check different values
+			assertSame(Property.UNKNOWN_VALUE, compositeProperty.getValue());
+			assertEquals(null, compositeProperty.getExpression());
+			// setValue()
+			{
+				compositeProperty.setValue("333");
+				assertEquals("333", compositeProperty.getValue());
+				assertEquals("333", compositeProperty.getExpression());
+				assertXML(
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Button wbp:name='button_1' text='333'/>",
+						"  <Button wbp:name='button_2' text='333'/>",
+						"</Shell>");
+			}
+			// setExpression()
+			{
+				String value = "444";
+				compositeProperty.setExpression(StringConverter.INSTANCE.toSource(shell, value), value);
+				assertEquals("444", compositeProperty.getValue());
+				assertEquals("444", compositeProperty.getExpression());
+				assertXML(
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Button wbp:name='button_1' text='444'/>",
+						"  <Button wbp:name='button_2' text='444'/>",
+						"</Shell>");
+			}
+		}
+	}
 
-  /**
-   * Test for implementation of {@link Property#getComposite(Property[])}.
-   */
-  public void test_GenericPropertyComposite_getType_sameType() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Button wbp:name='button_1' text='111'/>",
-        "  <Button wbp:name='button_2' text='222'/>",
-        "</Shell>");
-    refresh();
-    XmlObjectInfo button_1 = getObjectByName("button_1");
-    XmlObjectInfo button_2 = getObjectByName("button_2");
-    // "enabled" property
-    {
-      GenericProperty enabledProperty_1 = (GenericProperty) button_1.getPropertyByTitle("enabled");
-      GenericProperty enabledProperty_2 = (GenericProperty) button_2.getPropertyByTitle("enabled");
-      // create complex property
-      Property[] properties = new Property[]{enabledProperty_1, enabledProperty_2};
-      GenericProperty compositeProperty =
-          (GenericProperty) enabledProperty_1.getComposite(properties);
-      // check
-      assertSame(boolean.class, compositeProperty.getType());
-    }
-  }
+	/**
+	 * Test for implementation of {@link Property#getComposite(Property[])}.
+	 */
+	public void test_GenericPropertyComposite_getType_sameType() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Button wbp:name='button_1' text='111'/>",
+				"  <Button wbp:name='button_2' text='222'/>",
+				"</Shell>");
+		refresh();
+		XmlObjectInfo button_1 = getObjectByName("button_1");
+		XmlObjectInfo button_2 = getObjectByName("button_2");
+		// "enabled" property
+		{
+			GenericProperty enabledProperty_1 = (GenericProperty) button_1.getPropertyByTitle("enabled");
+			GenericProperty enabledProperty_2 = (GenericProperty) button_2.getPropertyByTitle("enabled");
+			// create complex property
+			Property[] properties = new Property[]{enabledProperty_1, enabledProperty_2};
+			GenericProperty compositeProperty =
+					(GenericProperty) enabledProperty_1.getComposite(properties);
+			// check
+			assertSame(boolean.class, compositeProperty.getType());
+		}
+	}
 
-  /**
-   * Test for implementation of {@link Property#getComposite(Property[])}.
-   */
-  public void test_GenericPropertyComposite_getType_differentType() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Button wbp:name='button' text='111'/>",
-        "</Shell>");
-    refresh();
-    XmlObjectInfo button = getObjectByName("button");
-    //
-    GenericProperty property_1 = (GenericProperty) button.getPropertyByTitle("enabled");
-    GenericProperty property_2 = (GenericProperty) button.getPropertyByTitle("text");
-    // create complex property
-    Property[] properties = new Property[]{property_1, property_2};
-    GenericProperty compositeProperty = (GenericProperty) property_1.getComposite(properties);
-    // check
-    assertSame(null, compositeProperty.getType());
-  }
+	/**
+	 * Test for implementation of {@link Property#getComposite(Property[])}.
+	 */
+	public void test_GenericPropertyComposite_getType_differentType() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Button wbp:name='button' text='111'/>",
+				"</Shell>");
+		refresh();
+		XmlObjectInfo button = getObjectByName("button");
+		//
+		GenericProperty property_1 = (GenericProperty) button.getPropertyByTitle("enabled");
+		GenericProperty property_2 = (GenericProperty) button.getPropertyByTitle("text");
+		// create complex property
+		Property[] properties = new Property[]{property_1, property_2};
+		GenericProperty compositeProperty = (GenericProperty) property_1.getComposite(properties);
+		// check
+		assertSame(null, compositeProperty.getType());
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/property/PropertyTests.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/property/PropertyTests.java
index d2e554e3a..69dbf4445 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/property/PropertyTests.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/property/PropertyTests.java
@@ -22,16 +22,16 @@
  * @author scheglov_ke
  */
 public class PropertyTests extends DesignerSuiteTests {
-  public static Test suite() {
-    TestSuite suite = new TestSuite("org.eclipse.wb.xml.model.property");
-    suite.addTest(createSingleSuite(XmlPropertyTest.class));
-    suite.addTest(createSingleSuite(EmptyXmlPropertyTest.class));
-    suite.addTest(createSingleSuite(XmlAttributePropertyTest.class));
-    suite.addTest(createSingleSuite(PropertyTest.class));
-    suite.addTest(createSingleSuite(StaticFieldPropertyEditorTest.class));
-    suite.addTest(createSingleSuite(EnumPropertyEditorTest.class));
-    suite.addTest(createSingleSuite(StringArrayPropertyEditorTest.class));
-    suite.addTest(createSingleSuite(EventsPropertyTest.class));
-    return suite;
-  }
+	public static Test suite() {
+		TestSuite suite = new TestSuite("org.eclipse.wb.xml.model.property");
+		suite.addTest(createSingleSuite(XmlPropertyTest.class));
+		suite.addTest(createSingleSuite(EmptyXmlPropertyTest.class));
+		suite.addTest(createSingleSuite(XmlAttributePropertyTest.class));
+		suite.addTest(createSingleSuite(PropertyTest.class));
+		suite.addTest(createSingleSuite(StaticFieldPropertyEditorTest.class));
+		suite.addTest(createSingleSuite(EnumPropertyEditorTest.class));
+		suite.addTest(createSingleSuite(StringArrayPropertyEditorTest.class));
+		suite.addTest(createSingleSuite(EventsPropertyTest.class));
+		return suite;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/property/StaticFieldPropertyEditorTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/property/StaticFieldPropertyEditorTest.java
index d79a66d32..7e8e8cf95 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/property/StaticFieldPropertyEditorTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/property/StaticFieldPropertyEditorTest.java
@@ -38,433 +38,433 @@
  * @author scheglov_ke
  */
 public class StaticFieldPropertyEditorTest extends AbstractCoreTest {
-  private Shell m_shell;
+	private Shell m_shell;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Life cycle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void setUp() throws Exception {
-    super.setUp();
-    // prepare test Shell
-    m_shell = new Shell();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Life cycle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void setUp() throws Exception {
+		super.setUp();
+		// prepare test Shell
+		m_shell = new Shell();
+	}
 
-  @Override
-  protected void tearDown() throws Exception {
-    super.tearDown();
-    if (m_shell != null) {
-      m_shell.dispose();
-      m_shell = null;
-    }
-  }
+	@Override
+	protected void tearDown() throws Exception {
+		super.tearDown();
+		if (m_shell != null) {
+			m_shell.dispose();
+			m_shell = null;
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Configure
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_configure_noClass() throws Exception {
-    prepareMyComponent(new String[]{
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "public void setTest(int value) {",
-        "}"}, new String[]{
-        "<!-- ===================== -->",
-        "<property id='setTest(int)'>",
-        "  <editor id='staticField'>",
-        "  </editor>",
-        "</property>"});
-    //
-    try {
-      getMyDescription();
-    } catch (Throwable e) {
-      DesignerException de = (DesignerException) DesignerExceptionUtils.getRootCause(e);
-      assertEquals(IExceptionConstants.DESCRIPTION_EDITOR_STATIC_FIELD, de.getCode());
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Configure
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_configure_noClass() throws Exception {
+		prepareMyComponent(new String[]{
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"public void setTest(int value) {",
+		"}"}, new String[]{
+				"<!-- ===================== -->",
+				"<property id='setTest(int)'>",
+				"  <editor id='staticField'>",
+				"  </editor>",
+		"</property>"});
+		//
+		try {
+			getMyDescription();
+		} catch (Throwable e) {
+			DesignerException de = (DesignerException) DesignerExceptionUtils.getRootCause(e);
+			assertEquals(IExceptionConstants.DESCRIPTION_EDITOR_STATIC_FIELD, de.getCode());
+		}
+	}
 
-  public void test_configure_noFields() throws Exception {
-    prepareMyComponent(new String[]{
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "public void setTest(int value) {",
-        "}"}, new String[]{
-        "<!-- ===================== -->",
-        "<property id='setTest(int)'>",
-        "  <editor id='staticField'>",
-        "    <parameter name='class'>org.eclipse.swt.SWT</parameter>",
-        "  </editor>",
-        "</property>"});
-    //
-    try {
-      getMyDescription();
-    } catch (Throwable e) {
-      DesignerException de = (DesignerException) DesignerExceptionUtils.getRootCause(e);
-      assertEquals(IExceptionConstants.DESCRIPTION_EDITOR_STATIC_FIELD, de.getCode());
-    }
-  }
+	public void test_configure_noFields() throws Exception {
+		prepareMyComponent(new String[]{
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"public void setTest(int value) {",
+		"}"}, new String[]{
+				"<!-- ===================== -->",
+				"<property id='setTest(int)'>",
+				"  <editor id='staticField'>",
+				"    <parameter name='class'>org.eclipse.swt.SWT</parameter>",
+				"  </editor>",
+		"</property>"});
+		//
+		try {
+			getMyDescription();
+		} catch (Throwable e) {
+			DesignerException de = (DesignerException) DesignerExceptionUtils.getRootCause(e);
+			assertEquals(IExceptionConstants.DESCRIPTION_EDITOR_STATIC_FIELD, de.getCode());
+		}
+	}
 
-  /**
-   * Use single "parameter" with name "fields".
-   */
-  public void test_configure_singleFieldsParameter() throws Exception {
-    prepareComponent_withField();
-    ComponentDescription description = getMyDescription();
-    // "test" property
-    GenericPropertyDescription property = description.getProperty("test");
-    StaticFieldPropertyEditor editor = (StaticFieldPropertyEditor) property.getEditor();
-    assertConfiguration(
-        editor,
-        "org.eclipse.swt.SWT",
-        new String[]{"LEFT", "CENTER", "RIGHT"},
-        new String[]{"LEFT", "CENTER", "RIGHT"},
-        new Object[]{SWT.LEFT, SWT.CENTER, SWT.RIGHT});
-  }
+	/**
+	 * Use single "parameter" with name "fields".
+	 */
+	public void test_configure_singleFieldsParameter() throws Exception {
+		prepareComponent_withField();
+		ComponentDescription description = getMyDescription();
+		// "test" property
+		GenericPropertyDescription property = description.getProperty("test");
+		StaticFieldPropertyEditor editor = (StaticFieldPropertyEditor) property.getEditor();
+		assertConfiguration(
+				editor,
+				"org.eclipse.swt.SWT",
+				new String[]{"LEFT", "CENTER", "RIGHT"},
+				new String[]{"LEFT", "CENTER", "RIGHT"},
+				new Object[]{SWT.LEFT, SWT.CENTER, SWT.RIGHT});
+	}
 
-  /**
-   * Use single "parameter-list" with name "fields".
-   */
-  public void test_configure_parameterList() throws Exception {
-    prepareComponent_withoutDefaultValue();
-    ComponentDescription description = getMyDescription();
-    // "test" property
-    GenericPropertyDescription property = description.getProperty("test");
-    StaticFieldPropertyEditor editor = (StaticFieldPropertyEditor) property.getEditor();
-    assertConfiguration(
-        editor,
-        "org.eclipse.swt.SWT",
-        new String[]{"LEFT", "CENTER", "RIGHT"},
-        new String[]{"LEFT", "CENTER", "RIGHT"},
-        new Object[]{SWT.LEFT, SWT.CENTER, SWT.RIGHT});
-  }
+	/**
+	 * Use single "parameter-list" with name "fields".
+	 */
+	public void test_configure_parameterList() throws Exception {
+		prepareComponent_withoutDefaultValue();
+		ComponentDescription description = getMyDescription();
+		// "test" property
+		GenericPropertyDescription property = description.getProperty("test");
+		StaticFieldPropertyEditor editor = (StaticFieldPropertyEditor) property.getEditor();
+		assertConfiguration(
+				editor,
+				"org.eclipse.swt.SWT",
+				new String[]{"LEFT", "CENTER", "RIGHT"},
+				new String[]{"LEFT", "CENTER", "RIGHT"},
+				new Object[]{SWT.LEFT, SWT.CENTER, SWT.RIGHT});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Configure
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Top level class, all fields are valid.
-   */
-  public void test_configure_1() throws Exception {
-    StaticFieldPropertyEditor editor = new StaticFieldPropertyEditor();
-    editor.configure(SwingConstants.class, new String[]{"LEFT", "RIGHT"});
-    //
-    String e_classSourceName = "javax.swing.SwingConstants";
-    String[] e_names = new String[]{"LEFT", "RIGHT"};
-    String[] e_titles = new String[]{"LEFT", "RIGHT"};
-    Object[] e_values = new Object[]{SwingConstants.LEFT, SwingConstants.RIGHT};
-    assertConfiguration(editor, e_classSourceName, e_names, e_titles, e_values);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Configure
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Top level class, all fields are valid.
+	 */
+	public void test_configure_1() throws Exception {
+		StaticFieldPropertyEditor editor = new StaticFieldPropertyEditor();
+		editor.configure(SwingConstants.class, new String[]{"LEFT", "RIGHT"});
+		//
+		String e_classSourceName = "javax.swing.SwingConstants";
+		String[] e_names = new String[]{"LEFT", "RIGHT"};
+		String[] e_titles = new String[]{"LEFT", "RIGHT"};
+		Object[] e_values = new Object[]{SwingConstants.LEFT, SwingConstants.RIGHT};
+		assertConfiguration(editor, e_classSourceName, e_names, e_titles, e_values);
+	}
 
-  /**
-   * Top level class, one field does not exist, should be skipped.
-   */
-  public void test_configure_2() throws Exception {
-    StaticFieldPropertyEditor editor = new StaticFieldPropertyEditor();
-    editor.configure(SwingConstants.class, new String[]{"LEFT", "noSuchField", "RIGHT"});
-    //
-    String e_classSourceName = "javax.swing.SwingConstants";
-    String[] e_names = new String[]{"LEFT", "RIGHT"};
-    String[] e_titles = new String[]{"LEFT", "RIGHT"};
-    Object[] e_values = new Object[]{SwingConstants.LEFT, SwingConstants.RIGHT};
-    assertConfiguration(editor, e_classSourceName, e_names, e_titles, e_values);
-  }
+	/**
+	 * Top level class, one field does not exist, should be skipped.
+	 */
+	public void test_configure_2() throws Exception {
+		StaticFieldPropertyEditor editor = new StaticFieldPropertyEditor();
+		editor.configure(SwingConstants.class, new String[]{"LEFT", "noSuchField", "RIGHT"});
+		//
+		String e_classSourceName = "javax.swing.SwingConstants";
+		String[] e_names = new String[]{"LEFT", "RIGHT"};
+		String[] e_titles = new String[]{"LEFT", "RIGHT"};
+		Object[] e_values = new Object[]{SwingConstants.LEFT, SwingConstants.RIGHT};
+		assertConfiguration(editor, e_classSourceName, e_names, e_titles, e_values);
+	}
 
-  /**
-   * Top level class, all fields are valid. Specify title in field description.
-   */
-  public void test_configure_3() throws Exception {
-    StaticFieldPropertyEditor editor = new StaticFieldPropertyEditor();
-    editor.configure(SwingConstants.class, new String[]{"LEFT:asLeft", "RIGHT:asRight"});
-    //
-    String e_classSourceName = "javax.swing.SwingConstants";
-    String[] e_names = new String[]{"LEFT", "RIGHT"};
-    String[] e_titles = new String[]{"asLeft", "asRight"};
-    Object[] e_values = new Object[]{SwingConstants.LEFT, SwingConstants.RIGHT};
-    assertConfiguration(editor, e_classSourceName, e_names, e_titles, e_values);
-  }
+	/**
+	 * Top level class, all fields are valid. Specify title in field description.
+	 */
+	public void test_configure_3() throws Exception {
+		StaticFieldPropertyEditor editor = new StaticFieldPropertyEditor();
+		editor.configure(SwingConstants.class, new String[]{"LEFT:asLeft", "RIGHT:asRight"});
+		//
+		String e_classSourceName = "javax.swing.SwingConstants";
+		String[] e_names = new String[]{"LEFT", "RIGHT"};
+		String[] e_titles = new String[]{"asLeft", "asRight"};
+		Object[] e_values = new Object[]{SwingConstants.LEFT, SwingConstants.RIGHT};
+		assertConfiguration(editor, e_classSourceName, e_names, e_titles, e_values);
+	}
 
-  /**
-   * Special <code>*remove</code> field.
-   */
-  public void test_configure_4() throws Exception {
-    StaticFieldPropertyEditor editor = new StaticFieldPropertyEditor();
-    editor.configure(SwingConstants.class, new String[]{"LEFT", "*remove", "RIGHT"});
-    //
-    String e_classSourceName = "javax.swing.SwingConstants";
-    String[] e_names = new String[]{"LEFT", null, "RIGHT"};
-    String[] e_titles = new String[]{"LEFT", "", "RIGHT"};
-    Object[] e_values = new Object[]{SwingConstants.LEFT, null, SwingConstants.RIGHT};
-    assertConfiguration(editor, e_classSourceName, e_names, e_titles, e_values);
-  }
+	/**
+	 * Special <code>*remove</code> field.
+	 */
+	public void test_configure_4() throws Exception {
+		StaticFieldPropertyEditor editor = new StaticFieldPropertyEditor();
+		editor.configure(SwingConstants.class, new String[]{"LEFT", "*remove", "RIGHT"});
+		//
+		String e_classSourceName = "javax.swing.SwingConstants";
+		String[] e_names = new String[]{"LEFT", null, "RIGHT"};
+		String[] e_titles = new String[]{"LEFT", "", "RIGHT"};
+		Object[] e_values = new Object[]{SwingConstants.LEFT, null, SwingConstants.RIGHT};
+		assertConfiguration(editor, e_classSourceName, e_names, e_titles, e_values);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Configuration assertions
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Asserts that given {@link StaticFieldPropertyEditor} has expected configuration.
-   */
-  private static void assertConfiguration(StaticFieldPropertyEditor editor,
-      String e_className,
-      String[] e_names,
-      String[] e_titles,
-      Object[] e_values) throws Exception {
-    {
-      Class<?> actialClass = (Class<?>) ReflectionUtils.getFieldObject(editor, "m_class");
-      assertEquals(e_className, actialClass.getName());
-    }
-    assertArrayField_equals(editor, "m_names", e_names);
-    assertArrayField_equals(editor, "m_titles", e_titles);
-    assertArrayField_equals(editor, "m_values", e_values);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Configuration assertions
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Asserts that given {@link StaticFieldPropertyEditor} has expected configuration.
+	 */
+	private static void assertConfiguration(StaticFieldPropertyEditor editor,
+			String e_className,
+			String[] e_names,
+			String[] e_titles,
+			Object[] e_values) throws Exception {
+		{
+			Class<?> actialClass = (Class<?>) ReflectionUtils.getFieldObject(editor, "m_class");
+			assertEquals(e_className, actialClass.getName());
+		}
+		assertArrayField_equals(editor, "m_names", e_names);
+		assertArrayField_equals(editor, "m_titles", e_titles);
+		assertArrayField_equals(editor, "m_values", e_values);
+	}
 
-  private static void assertArrayField_equals(Object editor, String fieldName, Object[] expected) {
-    Object[] actual = (Object[]) ReflectionUtils.getFieldObject(editor, fieldName);
-    assertThat(actual).isEqualTo(expected);
-  }
+	private static void assertArrayField_equals(Object editor, String fieldName, Object[] expected) {
+		Object[] actual = (Object[]) ReflectionUtils.getFieldObject(editor, fieldName);
+		assertThat(actual).isEqualTo(expected);
+	}
 
-  private void prepareComponent_withField() throws Exception {
-    prepareMyComponent(new String[]{
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "public int test = SWT.LEFT;"}, new String[]{
-        "<!-- ===================== -->",
-        "<property id='test'>",
-        "  <editor id='staticField'>",
-        "    <parameter name='class'>org.eclipse.swt.SWT</parameter>",
-        "    <parameter name='fields'>LEFT CENTER RIGHT</parameter>",
-        "  </editor>",
-        "</property>"});
-  }
+	private void prepareComponent_withField() throws Exception {
+		prepareMyComponent(new String[]{
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+		"public int test = SWT.LEFT;"}, new String[]{
+				"<!-- ===================== -->",
+				"<property id='test'>",
+				"  <editor id='staticField'>",
+				"    <parameter name='class'>org.eclipse.swt.SWT</parameter>",
+				"    <parameter name='fields'>LEFT CENTER RIGHT</parameter>",
+				"  </editor>",
+		"</property>"});
+	}
 
-  private void prepareComponent_withoutDefaultValue() throws Exception {
-    prepareMyComponent(new String[]{
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "public int test;"}, new String[]{
-        "<!-- ===================== -->",
-        "<property id='test'>",
-        "  <editor id='staticField'>",
-        "    <parameter name='class'>org.eclipse.swt.SWT</parameter>",
-        "    <parameter-list name='fields'>LEFT</parameter-list>",
-        "    <parameter-list name='fields'>CENTER</parameter-list>",
-        "    <parameter-list name='fields'>RIGHT</parameter-list>",
-        "  </editor>",
-        "</property>"});
-  }
+	private void prepareComponent_withoutDefaultValue() throws Exception {
+		prepareMyComponent(new String[]{
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+		"public int test;"}, new String[]{
+				"<!-- ===================== -->",
+				"<property id='test'>",
+				"  <editor id='staticField'>",
+				"    <parameter name='class'>org.eclipse.swt.SWT</parameter>",
+				"    <parameter-list name='fields'>LEFT</parameter-list>",
+				"    <parameter-list name='fields'>CENTER</parameter-list>",
+				"    <parameter-list name='fields'>RIGHT</parameter-list>",
+				"  </editor>",
+		"</property>"});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // getClipboardSource()
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_getClipboardSource_noValue() throws Exception {
-    prepareComponent_withoutDefaultValue();
-    parse(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <t:MyComponent wbp:name='component'/>",
-        "</Shell>");
-    refresh();
-    XmlObjectInfo component = getObjectByName("component");
-    GenericProperty property = (GenericProperty) component.getPropertyByTitle("test");
-    StaticFieldPropertyEditor propertyEditor = (StaticFieldPropertyEditor) property.getEditor();
-    // no value
-    assertEquals(null, propertyEditor.getClipboardSource(property));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// getClipboardSource()
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_getClipboardSource_noValue() throws Exception {
+		prepareComponent_withoutDefaultValue();
+		parse(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <t:MyComponent wbp:name='component'/>",
+				"</Shell>");
+		refresh();
+		XmlObjectInfo component = getObjectByName("component");
+		GenericProperty property = (GenericProperty) component.getPropertyByTitle("test");
+		StaticFieldPropertyEditor propertyEditor = (StaticFieldPropertyEditor) property.getEditor();
+		// no value
+		assertEquals(null, propertyEditor.getClipboardSource(property));
+	}
 
-  public void test_getClipboardSource_hasValue() throws Exception {
-    prepareComponent_withField();
-    ControlInfo shell =
-        parse(
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <t:MyComponent wbp:name='component' test='LEFT'/>",
-            "</Shell>");
-    shell.refresh();
-    XmlObjectInfo component = getObjectByName("component");
-    GenericProperty property = (GenericProperty) component.getPropertyByTitle("test");
-    StaticFieldPropertyEditor propertyEditor = (StaticFieldPropertyEditor) property.getEditor();
-    // has text
-    assertEquals("LEFT", propertyEditor.getClipboardSource(property));
-  }
+	public void test_getClipboardSource_hasValue() throws Exception {
+		prepareComponent_withField();
+		ControlInfo shell =
+				parse(
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <t:MyComponent wbp:name='component' test='LEFT'/>",
+						"</Shell>");
+		shell.refresh();
+		XmlObjectInfo component = getObjectByName("component");
+		GenericProperty property = (GenericProperty) component.getPropertyByTitle("test");
+		StaticFieldPropertyEditor propertyEditor = (StaticFieldPropertyEditor) property.getEditor();
+		// has text
+		assertEquals("LEFT", propertyEditor.getClipboardSource(property));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IExpressionPropertyEditor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link StaticFieldPropertyEditor#setValue(Property, Object)}.
-   */
-  public void test_setValue_GenericProperty() throws Exception {
-    prepareComponent_withField();
-    ControlInfo shell =
-        parse(
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <t:MyComponent wbp:name='component' test='LEFT'/>",
-            "</Shell>");
-    shell.refresh();
-    XmlObjectInfo component = getObjectByName("component");
-    GenericProperty property = (GenericProperty) component.getPropertyByTitle("test");
-    //
-    property.setValue(SWT.CENTER);
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <t:MyComponent wbp:name='component' test='CENTER'/>",
-        "</Shell>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IExpressionPropertyEditor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link StaticFieldPropertyEditor#setValue(Property, Object)}.
+	 */
+	public void test_setValue_GenericProperty() throws Exception {
+		prepareComponent_withField();
+		ControlInfo shell =
+				parse(
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <t:MyComponent wbp:name='component' test='LEFT'/>",
+						"</Shell>");
+		shell.refresh();
+		XmlObjectInfo component = getObjectByName("component");
+		GenericProperty property = (GenericProperty) component.getPropertyByTitle("test");
+		//
+		property.setValue(SWT.CENTER);
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <t:MyComponent wbp:name='component' test='CENTER'/>",
+				"</Shell>");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // getText()
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_getText_noValue() throws Exception {
-    prepareMyComponent(new String[]{
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "public void setTest(int value) {",
-        "}"}, new String[]{
-        "<!-- ===================== -->",
-        "<property id='setTest(int)'>",
-        "  <editor id='staticField'>",
-        "    <parameter name='class'>org.eclipse.swt.SWT</parameter>",
-        "    <parameter name='fields'>LEFT CENTER RIGHT</parameter>",
-        "  </editor>",
-        "</property>"});
-    ControlInfo shell =
-        parse(
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <t:MyComponent wbp:name='component'/>",
-            "</Shell>");
-    shell.refresh();
-    XmlObjectInfo component = getObjectByName("component");
-    GenericProperty property = (GenericProperty) component.getPropertyByTitle("test");
-    // no value
-    assertEquals(null, getPropertyText(property));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// getText()
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_getText_noValue() throws Exception {
+		prepareMyComponent(new String[]{
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"public void setTest(int value) {",
+		"}"}, new String[]{
+				"<!-- ===================== -->",
+				"<property id='setTest(int)'>",
+				"  <editor id='staticField'>",
+				"    <parameter name='class'>org.eclipse.swt.SWT</parameter>",
+				"    <parameter name='fields'>LEFT CENTER RIGHT</parameter>",
+				"  </editor>",
+		"</property>"});
+		ControlInfo shell =
+				parse(
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <t:MyComponent wbp:name='component'/>",
+						"</Shell>");
+		shell.refresh();
+		XmlObjectInfo component = getObjectByName("component");
+		GenericProperty property = (GenericProperty) component.getPropertyByTitle("test");
+		// no value
+		assertEquals(null, getPropertyText(property));
+	}
 
-  public void test_getText_hasValue() throws Exception {
-    prepareComponent_withField();
-    ControlInfo shell =
-        parse(
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <t:MyComponent wbp:name='component' test='LEFT'/>",
-            "</Shell>");
-    shell.refresh();
-    XmlObjectInfo component = getObjectByName("component");
-    GenericProperty property = (GenericProperty) component.getPropertyByTitle("test");
-    // has text
-    assertEquals("LEFT", getPropertyText(property));
-  }
+	public void test_getText_hasValue() throws Exception {
+		prepareComponent_withField();
+		ControlInfo shell =
+				parse(
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <t:MyComponent wbp:name='component' test='LEFT'/>",
+						"</Shell>");
+		shell.refresh();
+		XmlObjectInfo component = getObjectByName("component");
+		GenericProperty property = (GenericProperty) component.getPropertyByTitle("test");
+		// has text
+		assertEquals("LEFT", getPropertyText(property));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Combo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_comboMethods() throws Exception {
-    prepareComponent_withField();
-    ControlInfo shell =
-        parse(
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <t:MyComponent wbp:name='component' test='LEFT'/>",
-            "</Shell>");
-    shell.refresh();
-    XmlObjectInfo component = getObjectByName("component");
-    GenericProperty property = (GenericProperty) component.getPropertyByTitle("test");
-    // add items
-    addComboPropertyItems(property);
-    // check items
-    {
-      List<String> items = getComboPropertyItems();
-      assertThat(items).containsExactly("LEFT", "CENTER", "RIGHT");
-    }
-    // select current item
-    {
-      setComboPropertySelection(1);
-      setComboPropertySelection(property);
-      assertEquals(0, getComboPropertySelection());
-    }
-    // set non-default value
-    {
-      setComboPropertyValue(property, 1);
-      assertXML(
-          "// filler filler filler filler filler",
-          "<Shell>",
-          "  <t:MyComponent wbp:name='component' test='CENTER'/>",
-          "</Shell>");
-    }
-    // set default value
-    {
-      setComboPropertyValue(property, 0);
-      assertXML(
-          "// filler filler filler filler filler",
-          "<Shell>",
-          "  <t:MyComponent wbp:name='component'/>",
-          "</Shell>");
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Combo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_comboMethods() throws Exception {
+		prepareComponent_withField();
+		ControlInfo shell =
+				parse(
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <t:MyComponent wbp:name='component' test='LEFT'/>",
+						"</Shell>");
+		shell.refresh();
+		XmlObjectInfo component = getObjectByName("component");
+		GenericProperty property = (GenericProperty) component.getPropertyByTitle("test");
+		// add items
+		addComboPropertyItems(property);
+		// check items
+		{
+			List<String> items = getComboPropertyItems();
+			assertThat(items).containsExactly("LEFT", "CENTER", "RIGHT");
+		}
+		// select current item
+		{
+			setComboPropertySelection(1);
+			setComboPropertySelection(property);
+			assertEquals(0, getComboPropertySelection());
+		}
+		// set non-default value
+		{
+			setComboPropertyValue(property, 1);
+			assertXML(
+					"// filler filler filler filler filler",
+					"<Shell>",
+					"  <t:MyComponent wbp:name='component' test='CENTER'/>",
+					"</Shell>");
+		}
+		// set default value
+		{
+			setComboPropertyValue(property, 0);
+			assertXML(
+					"// filler filler filler filler filler",
+					"<Shell>",
+					"  <t:MyComponent wbp:name='component'/>",
+					"</Shell>");
+		}
+	}
 
-  public void test_comboMethods_removeValue() throws Exception {
-    prepareMyComponent(new String[]{
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "public int test = SWT.LEFT;"}, new String[]{
-        "<!-- ===================== -->",
-        "<property id='test'>",
-        "  <editor id='staticField'>",
-        "    <parameter name='class'>org.eclipse.swt.SWT</parameter>",
-        "    <parameter name='fields'>*remove LEFT RIGHT</parameter>",
-        "  </editor>",
-        "</property>"});
-    ControlInfo shell =
-        parse(
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <t:MyComponent wbp:name='component' test='LEFT'/>",
-            "</Shell>");
-    shell.refresh();
-    XmlObjectInfo component = getObjectByName("component");
-    GenericProperty property = (GenericProperty) component.getPropertyByTitle("test");
-    // add items
-    addComboPropertyItems(property);
-    // check items
-    {
-      List<String> items = getComboPropertyItems();
-      assertThat(items).containsExactly("", "LEFT", "RIGHT");
-    }
-    // set "*remove"
-    {
-      setComboPropertyValue(property, 0);
-      assertXML(
-          "// filler filler filler filler filler",
-          "<Shell>",
-          "  <t:MyComponent wbp:name='component'/>",
-          "</Shell>");
-    }
-  }
+	public void test_comboMethods_removeValue() throws Exception {
+		prepareMyComponent(new String[]{
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+		"public int test = SWT.LEFT;"}, new String[]{
+				"<!-- ===================== -->",
+				"<property id='test'>",
+				"  <editor id='staticField'>",
+				"    <parameter name='class'>org.eclipse.swt.SWT</parameter>",
+				"    <parameter name='fields'>*remove LEFT RIGHT</parameter>",
+				"  </editor>",
+		"</property>"});
+		ControlInfo shell =
+				parse(
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <t:MyComponent wbp:name='component' test='LEFT'/>",
+						"</Shell>");
+		shell.refresh();
+		XmlObjectInfo component = getObjectByName("component");
+		GenericProperty property = (GenericProperty) component.getPropertyByTitle("test");
+		// add items
+		addComboPropertyItems(property);
+		// check items
+		{
+			List<String> items = getComboPropertyItems();
+			assertThat(items).containsExactly("", "LEFT", "RIGHT");
+		}
+		// set "*remove"
+		{
+			setComboPropertyValue(property, 0);
+			assertXML(
+					"// filler filler filler filler filler",
+					"<Shell>",
+					"  <t:MyComponent wbp:name='component'/>",
+					"</Shell>");
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/property/StringArrayPropertyEditorTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/property/StringArrayPropertyEditorTest.java
index e919b2dd2..3453b4917 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/property/StringArrayPropertyEditorTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/property/StringArrayPropertyEditorTest.java
@@ -26,90 +26,90 @@
  * @author scheglov_ke
  */
 public class StringArrayPropertyEditorTest extends XwtModelTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // getText()
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_getText_notValue() throws Exception {
-    Property property = new EmptyProperty(StringArrayPropertyEditor.INSTANCE);
-    // check state
-    assertFalse(property.isModified());
-    assertEquals("[]", getPropertyText(property));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// getText()
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_getText_notValue() throws Exception {
+		Property property = new EmptyProperty(StringArrayPropertyEditor.INSTANCE);
+		// check state
+		assertFalse(property.isModified());
+		assertEquals("[]", getPropertyText(property));
+	}
 
-  public void test_getText_withItems() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell xmlns:p1='clr-namespace:java.lang'>",
-        "  <List wbp:name='widget'>",
-        "    <List.items>",
-        "      <p1:String>aaa</p1:String>",
-        "      <p1:String>bbb</p1:String>",
-        "      <p1:String>ccc</p1:String>",
-        "    </List.items>",
-        "  </List>",
-        "</Shell>");
-    refresh();
-    XmlObjectInfo widget = getObjectByName("widget");
-    Property property = widget.getPropertyByTitle("items");
-    // check state
-    assertEquals("[aaa, bbb, ccc]", getPropertyText(property));
-  }
+	public void test_getText_withItems() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell xmlns:p1='clr-namespace:java.lang'>",
+				"  <List wbp:name='widget'>",
+				"    <List.items>",
+				"      <p1:String>aaa</p1:String>",
+				"      <p1:String>bbb</p1:String>",
+				"      <p1:String>ccc</p1:String>",
+				"    </List.items>",
+				"  </List>",
+				"</Shell>");
+		refresh();
+		XmlObjectInfo widget = getObjectByName("widget");
+		Property property = widget.getPropertyByTitle("items");
+		// check state
+		assertEquals("[aaa, bbb, ccc]", getPropertyText(property));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Dialog
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_dialog() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell xmlns:p1='clr-namespace:java.lang'>",
-        "  <List wbp:name='widget'/>",
-        "</Shell>");
-    refresh();
-    XmlObjectInfo widget = getObjectByName("widget");
-    // prepare property
-    final Property property = widget.getPropertyByTitle("items");
-    new UiContext().executeAndCheck(new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        openPropertyDialog(property);
-      }
-    }, new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        context.useShell("items");
-        {
-          Text text = context.getTextByLabel("&Elements:");
-          text.setText("aaa\nbbb\nccc");
-        }
-        context.clickButton("OK");
-      }
-    });
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell xmlns:p1='clr-namespace:java.lang'>",
-        "  <List wbp:name='widget'>",
-        "    <List.items>",
-        "      <p1:String>aaa</p1:String>",
-        "      <p1:String>bbb</p1:String>",
-        "      <p1:String>ccc</p1:String>",
-        "    </List.items>",
-        "  </List>",
-        "</Shell>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Dialog
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_dialog() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell xmlns:p1='clr-namespace:java.lang'>",
+				"  <List wbp:name='widget'/>",
+				"</Shell>");
+		refresh();
+		XmlObjectInfo widget = getObjectByName("widget");
+		// prepare property
+		final Property property = widget.getPropertyByTitle("items");
+		new UiContext().executeAndCheck(new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				openPropertyDialog(property);
+			}
+		}, new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				context.useShell("items");
+				{
+					Text text = context.getTextByLabel("&Elements:");
+					text.setText("aaa\nbbb\nccc");
+				}
+				context.clickButton("OK");
+			}
+		});
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell xmlns:p1='clr-namespace:java.lang'>",
+				"  <List wbp:name='widget'>",
+				"    <List.items>",
+				"      <p1:String>aaa</p1:String>",
+				"      <p1:String>bbb</p1:String>",
+				"      <p1:String>ccc</p1:String>",
+				"    </List.items>",
+				"  </List>",
+				"</Shell>");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/property/XmlAttributePropertyTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/property/XmlAttributePropertyTest.java
index ffd402ab4..14987f7fd 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/property/XmlAttributePropertyTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/property/XmlAttributePropertyTest.java
@@ -24,42 +24,42 @@
  * @author scheglov_ke
  */
 public class XmlAttributePropertyTest extends AbstractCoreTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_0() throws Exception {
-    XmlObjectInfo shell = parse("<Shell/>");
-    // create XMLProperty
-    XmlProperty property =
-        new XmlAttributeProperty(shell, "title", StringPropertyEditor.INSTANCE, "attr");
-    assertEquals("title", property.getTitle());
-    assertSame(PropertyCategory.NORMAL, property.getCategory());
-    // object
-    assertSame(shell, property.getObjectInfo());
-    assertSame(shell, property.getObject());
-    // no value initially
-    assertEquals(null, property.getValue());
-    assertFalse(property.isModified());
-    // set value
-    property.setValue("abc");
-    assertXML("<Shell attr='abc'/>");
-    assertEquals("abc", property.getValue());
-    assertTrue(property.isModified());
-    // remove value
-    property.setValue(Property.UNKNOWN_VALUE);
-    assertXML("<Shell/>");
-    assertEquals(null, property.getValue());
-    assertFalse(property.isModified());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_0() throws Exception {
+		XmlObjectInfo shell = parse("<Shell/>");
+		// create XMLProperty
+		XmlProperty property =
+				new XmlAttributeProperty(shell, "title", StringPropertyEditor.INSTANCE, "attr");
+		assertEquals("title", property.getTitle());
+		assertSame(PropertyCategory.NORMAL, property.getCategory());
+		// object
+		assertSame(shell, property.getObjectInfo());
+		assertSame(shell, property.getObject());
+		// no value initially
+		assertEquals(null, property.getValue());
+		assertFalse(property.isModified());
+		// set value
+		property.setValue("abc");
+		assertXML("<Shell attr='abc'/>");
+		assertEquals("abc", property.getValue());
+		assertTrue(property.isModified());
+		// remove value
+		property.setValue(Property.UNKNOWN_VALUE);
+		assertXML("<Shell/>");
+		assertEquals(null, property.getValue());
+		assertFalse(property.isModified());
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/property/XmlPropertyTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/property/XmlPropertyTest.java
index 575a6990b..aab5a74bb 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/property/XmlPropertyTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/model/property/XmlPropertyTest.java
@@ -25,42 +25,42 @@
  * @author scheglov_ke
  */
 public class XmlPropertyTest extends AbstractCoreTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_access() throws Exception {
-    XmlObjectInfo shell = parse("<Shell/>");
-    // create XMLProperty
-    XmlProperty property = new EmptyXmlProperty(shell);
-    assertSame(null, property.getTitle());
-    assertSame(PropertyCategory.NORMAL, property.getCategory());
-    // object
-    assertSame(shell, property.getObjectInfo());
-    assertSame(shell, property.getObject());
-    assertSame(shell, property.getAdapter(ObjectInfo.class));
-    // adapter
-    assertEquals(null, property.getAdapter(null));
-    assertEquals(m_javaProject, property.getAdapter(IJavaProject.class));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_access() throws Exception {
+		XmlObjectInfo shell = parse("<Shell/>");
+		// create XMLProperty
+		XmlProperty property = new EmptyXmlProperty(shell);
+		assertSame(null, property.getTitle());
+		assertSame(PropertyCategory.NORMAL, property.getCategory());
+		// object
+		assertSame(shell, property.getObjectInfo());
+		assertSame(shell, property.getObject());
+		assertSame(shell, property.getAdapter(ObjectInfo.class));
+		// adapter
+		assertEquals(null, property.getAdapter(null));
+		assertEquals(m_javaProject, property.getAdapter(IJavaProject.class));
+	}
 
-  /**
-   * Test for constructor with {@link PropertyCategory}.
-   */
-  public void test_constructorWithCategory() throws Exception {
-    XmlObjectInfo shell = parse("<Shell/>");
-    // create XMLProperty
-    XmlProperty property = new EmptyXmlProperty(shell, PropertyCategory.system(6));
-    assertTrue(property.getCategory().isSystem());
-  }
+	/**
+	 * Test for constructor with {@link PropertyCategory}.
+	 */
+	public void test_constructorWithCategory() throws Exception {
+		XmlObjectInfo shell = parse("<Shell/>");
+		// create XMLProperty
+		XmlProperty property = new EmptyXmlProperty(shell, PropertyCategory.system(6));
+		assertTrue(property.getCategory().isSystem());
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/AbstractElementInfoTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/AbstractElementInfoTest.java
index c4aac60f1..97da3db58 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/AbstractElementInfoTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/AbstractElementInfoTest.java
@@ -21,87 +21,87 @@
  * @author scheglov_ke
  */
 public class AbstractElementInfoTest extends DesignerTestCase {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for hashCode/equals.
-   */
-  public void test_AbstractElementInfo_hash_equals() throws Exception {
-    String id = "some id";
-    // prepare component_1
-    ComponentEntryInfo component_1 = new ComponentEntryInfo();
-    component_1.setId(id);
-    // prepare component_2
-    ComponentEntryInfo component_2 = new ComponentEntryInfo();
-    component_2.setId(id);
-    // check hashCode()
-    assertEquals(id.hashCode(), component_1.hashCode());
-    assertEquals(id.hashCode(), component_2.hashCode());
-    // check equals()
-    assertTrue(component_1.equals(component_1));
-    assertTrue(component_1.equals(component_2));
-    assertFalse(component_1.equals(this));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for hashCode/equals.
+	 */
+	public void test_AbstractElementInfo_hash_equals() throws Exception {
+		String id = "some id";
+		// prepare component_1
+		ComponentEntryInfo component_1 = new ComponentEntryInfo();
+		component_1.setId(id);
+		// prepare component_2
+		ComponentEntryInfo component_2 = new ComponentEntryInfo();
+		component_2.setId(id);
+		// check hashCode()
+		assertEquals(id.hashCode(), component_1.hashCode());
+		assertEquals(id.hashCode(), component_2.hashCode());
+		// check equals()
+		assertTrue(component_1.equals(component_1));
+		assertTrue(component_1.equals(component_2));
+		assertFalse(component_1.equals(this));
+	}
 
-  /**
-   * Test for "id" property.
-   */
-  public void test_AbstractElementInfo_id() throws Exception {
-    ComponentEntryInfo component = new ComponentEntryInfo();
-    // try to set "null" - failed
-    try {
-      component.setId(null);
-      fail();
-    } catch (AssertionFailedException e) {
-    }
-    // set first name, success
-    String id = "some id";
-    component.setId(id);
-    assertSame(id, component.getId());
-    // try to set second time - failed
-    try {
-      component.setId("new id");
-      fail();
-    } catch (AssertionFailedException e) {
-    }
-  }
+	/**
+	 * Test for "id" property.
+	 */
+	public void test_AbstractElementInfo_id() throws Exception {
+		ComponentEntryInfo component = new ComponentEntryInfo();
+		// try to set "null" - failed
+		try {
+			component.setId(null);
+			fail();
+		} catch (AssertionFailedException e) {
+		}
+		// set first name, success
+		String id = "some id";
+		component.setId(id);
+		assertSame(id, component.getId());
+		// try to set second time - failed
+		try {
+			component.setId("new id");
+			fail();
+		} catch (AssertionFailedException e) {
+		}
+	}
 
-  /**
-   * Test for "visible" property.
-   */
-  public void test_AbstractElementInfo_visible() throws Exception {
-    ComponentEntryInfo component = new ComponentEntryInfo();
-    // visible initially
-    assertTrue(component.isVisible());
-    // make not visible
-    component.setVisible(false);
-    assertFalse(component.isVisible());
-  }
+	/**
+	 * Test for "visible" property.
+	 */
+	public void test_AbstractElementInfo_visible() throws Exception {
+		ComponentEntryInfo component = new ComponentEntryInfo();
+		// visible initially
+		assertTrue(component.isVisible());
+		// make not visible
+		component.setVisible(false);
+		assertFalse(component.isVisible());
+	}
 
-  /**
-   * Test for "name" property.
-   */
-  public void test_AbstractElementInfo_name() throws Exception {
-    ComponentEntryInfo component = new ComponentEntryInfo();
-    // no name initially
-    assertNull(component.getName());
-    // set name
-    component.setName("my name");
-    assertEquals("my name", component.getName());
-  }
+	/**
+	 * Test for "name" property.
+	 */
+	public void test_AbstractElementInfo_name() throws Exception {
+		ComponentEntryInfo component = new ComponentEntryInfo();
+		// no name initially
+		assertNull(component.getName());
+		// set name
+		component.setName("my name");
+		assertEquals("my name", component.getName());
+	}
 
-  /**
-   * Test for "description" property.
-   */
-  public void test_AbstractElementInfo_description() throws Exception {
-    ComponentEntryInfo component = new ComponentEntryInfo();
-    // no description initially
-    assertNull(component.getDescription());
-    // set description
-    component.setDescription("my description");
-    assertEquals("my description", component.getDescription());
-  }
+	/**
+	 * Test for "description" property.
+	 */
+	public void test_AbstractElementInfo_description() throws Exception {
+		ComponentEntryInfo component = new ComponentEntryInfo();
+		// no description initially
+		assertNull(component.getDescription());
+		// set description
+		component.setDescription("my description");
+		assertEquals("my description", component.getDescription());
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/AbstractPaletteTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/AbstractPaletteTest.java
index 6db5accdf..3772ba868 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/AbstractPaletteTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/AbstractPaletteTest.java
@@ -31,151 +31,151 @@
  * @author scheglov_ke
  */
 public class AbstractPaletteTest extends AbstractCoreTest {
-  private static final String POINT_ID = "org.eclipse.wb.core.toolkits";
-  protected static final String PALETTE_EXTENSION_ID = "testPaletteId";
-  protected static final String TOOLKIT_ID = "test.toolkit";
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Life cycle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void tearDown() throws Exception {
-    removeToolkitExtension();
-    if (m_lastManager != null) {
-      m_lastManager.commands_clear();
-      m_lastManager.commands_write();
-      m_lastManager = null;
-    }
-    super.tearDown();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Toolkit/palette extension operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds dynamic "palette" extension.
-   */
-  protected static void addPaletteExtension(String... paletteLines) {
-    addPaletteExtension(PALETTE_EXTENSION_ID, paletteLines);
-  }
-
-  /**
-   * Adds dynamic "palette" extension.
-   */
-  protected static void addPaletteExtension(String extensionId, String[] paletteLines) {
-    String[] toolkitLines = new String[1 + paletteLines.length + 1];
-    toolkitLines[0] = "    <palette>";
-    System.arraycopy(paletteLines, 0, toolkitLines, 1, paletteLines.length);
-    toolkitLines[toolkitLines.length - 1] = "    </palette>";
-    addToolkitExtension(extensionId, toolkitLines);
-  }
-
-  /**
-   * Adds dynamic "toolkit" extension (including "palette" extension).
-   */
-  protected static void addToolkitExtension(String extensionId, String[] lines) {
-    String contribution =
-        getSource3(
-            new String[]{"  <toolkit id='" + TOOLKIT_ID + "'>"},
-            lines,
-            new String[]{"  </toolkit>"});
-    TestUtils.addDynamicExtension(POINT_ID, extensionId, contribution);
-  }
-
-  /**
-   * Removes dynamic "toolkit" extension.
-   */
-  protected static void removeToolkitExtension() {
-    removeToolkitExtension(PALETTE_EXTENSION_ID);
-  }
-
-  /**
-   * Removes dynamic "toolkit" extension.
-   */
-  protected static void removeToolkitExtension(String extensionId) {
-    TestUtils.removeDynamicExtension(POINT_ID, extensionId);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private PaletteManager m_lastManager;
-
-  /**
-   * Parses empty {@link Shell}.
-   */
-  protected final XmlObjectInfo parseEmptyPanel() throws Exception {
-    return parse("<Shell/>");
-  }
-
-  /**
-   * @return the {@link PaletteInfo} loaded for empty {@link Shell}.
-   */
-  protected final PaletteInfo loadPalette() throws Exception {
-    XmlObjectInfo panel = parseEmptyPanel();
-    return loadPalette(panel);
-  }
-
-  /**
-   * @return the {@link PaletteManager} loaded for empty {@link Shell}.
-   */
-  protected final PaletteManager loadManager() throws Exception {
-    XmlObjectInfo panel = parseEmptyPanel();
-    m_lastManager = new PaletteManager(panel, TOOLKIT_ID);
-    m_lastManager.reloadPalette();
-    return m_lastManager;
-  }
-
-  /**
-   * @return the {@link PaletteInfo} loaded for given {@link XmlObjectInfo}.
-   */
-  protected final PaletteInfo loadPalette(XmlObjectInfo javaInfo) {
-    m_lastManager = new PaletteManager((XmlObjectInfo) javaInfo.getRoot(), TOOLKIT_ID);
-    m_lastManager.reloadPalette();
-    return m_lastManager.getPalette();
-  }
-
-  /**
-   * @return the {@link ComponentEntryInfo} with given id.
-   */
-  protected final ComponentEntryInfo loadSingleComponent(String id) throws Exception {
-    {
-      EntryInfo entry = loadSingleEntry(id);
-      if (entry instanceof ComponentEntryInfo) {
-        return (ComponentEntryInfo) entry;
-      }
-    }
-    throw new IllegalArgumentException("No component: " + id);
-  }
-
-  /**
-   * @return the {@link EntryInfo} with given id.
-   */
-  protected final EntryInfo loadSingleEntry(String id) throws Exception {
-    PaletteInfo palette = loadPalette();
-    for (CategoryInfo category : palette.getCategories()) {
-      for (EntryInfo entry : category.getEntries()) {
-        if (StringUtils.equals(entry.getId(), id)) {
-          return entry;
-        }
-      }
-    }
-    throw new IllegalArgumentException("No entry: " + id);
-  }
-
-  /**
-   * @return the {@link DocumentElement} which will be added by {@link CreationSupport} of given
-   *         {@link XmlObjectInfo}.
-   */
-  protected static DocumentElement getNewCreationElement(XmlObjectInfo object) throws Exception {
-    DocumentElement parentElement = new DocumentElement();
-    object.getCreationSupport().addElement(parentElement, 0);
-    return parentElement.getChildAt(0);
-  }
+	private static final String POINT_ID = "org.eclipse.wb.core.toolkits";
+	protected static final String PALETTE_EXTENSION_ID = "testPaletteId";
+	protected static final String TOOLKIT_ID = "test.toolkit";
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Life cycle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void tearDown() throws Exception {
+		removeToolkitExtension();
+		if (m_lastManager != null) {
+			m_lastManager.commands_clear();
+			m_lastManager.commands_write();
+			m_lastManager = null;
+		}
+		super.tearDown();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Toolkit/palette extension operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds dynamic "palette" extension.
+	 */
+	protected static void addPaletteExtension(String... paletteLines) {
+		addPaletteExtension(PALETTE_EXTENSION_ID, paletteLines);
+	}
+
+	/**
+	 * Adds dynamic "palette" extension.
+	 */
+	protected static void addPaletteExtension(String extensionId, String[] paletteLines) {
+		String[] toolkitLines = new String[1 + paletteLines.length + 1];
+		toolkitLines[0] = "    <palette>";
+		System.arraycopy(paletteLines, 0, toolkitLines, 1, paletteLines.length);
+		toolkitLines[toolkitLines.length - 1] = "    </palette>";
+		addToolkitExtension(extensionId, toolkitLines);
+	}
+
+	/**
+	 * Adds dynamic "toolkit" extension (including "palette" extension).
+	 */
+	protected static void addToolkitExtension(String extensionId, String[] lines) {
+		String contribution =
+				getSource3(
+						new String[]{"  <toolkit id='" + TOOLKIT_ID + "'>"},
+						lines,
+						new String[]{"  </toolkit>"});
+		TestUtils.addDynamicExtension(POINT_ID, extensionId, contribution);
+	}
+
+	/**
+	 * Removes dynamic "toolkit" extension.
+	 */
+	protected static void removeToolkitExtension() {
+		removeToolkitExtension(PALETTE_EXTENSION_ID);
+	}
+
+	/**
+	 * Removes dynamic "toolkit" extension.
+	 */
+	protected static void removeToolkitExtension(String extensionId) {
+		TestUtils.removeDynamicExtension(POINT_ID, extensionId);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private PaletteManager m_lastManager;
+
+	/**
+	 * Parses empty {@link Shell}.
+	 */
+	protected final XmlObjectInfo parseEmptyPanel() throws Exception {
+		return parse("<Shell/>");
+	}
+
+	/**
+	 * @return the {@link PaletteInfo} loaded for empty {@link Shell}.
+	 */
+	protected final PaletteInfo loadPalette() throws Exception {
+		XmlObjectInfo panel = parseEmptyPanel();
+		return loadPalette(panel);
+	}
+
+	/**
+	 * @return the {@link PaletteManager} loaded for empty {@link Shell}.
+	 */
+	protected final PaletteManager loadManager() throws Exception {
+		XmlObjectInfo panel = parseEmptyPanel();
+		m_lastManager = new PaletteManager(panel, TOOLKIT_ID);
+		m_lastManager.reloadPalette();
+		return m_lastManager;
+	}
+
+	/**
+	 * @return the {@link PaletteInfo} loaded for given {@link XmlObjectInfo}.
+	 */
+	protected final PaletteInfo loadPalette(XmlObjectInfo javaInfo) {
+		m_lastManager = new PaletteManager((XmlObjectInfo) javaInfo.getRoot(), TOOLKIT_ID);
+		m_lastManager.reloadPalette();
+		return m_lastManager.getPalette();
+	}
+
+	/**
+	 * @return the {@link ComponentEntryInfo} with given id.
+	 */
+	protected final ComponentEntryInfo loadSingleComponent(String id) throws Exception {
+		{
+			EntryInfo entry = loadSingleEntry(id);
+			if (entry instanceof ComponentEntryInfo) {
+				return (ComponentEntryInfo) entry;
+			}
+		}
+		throw new IllegalArgumentException("No component: " + id);
+	}
+
+	/**
+	 * @return the {@link EntryInfo} with given id.
+	 */
+	protected final EntryInfo loadSingleEntry(String id) throws Exception {
+		PaletteInfo palette = loadPalette();
+		for (CategoryInfo category : palette.getCategories()) {
+			for (EntryInfo entry : category.getEntries()) {
+				if (StringUtils.equals(entry.getId(), id)) {
+					return entry;
+				}
+			}
+		}
+		throw new IllegalArgumentException("No entry: " + id);
+	}
+
+	/**
+	 * @return the {@link DocumentElement} which will be added by {@link CreationSupport} of given
+	 *         {@link XmlObjectInfo}.
+	 */
+	protected static DocumentElement getNewCreationElement(XmlObjectInfo object) throws Exception {
+		DocumentElement parentElement = new DocumentElement();
+		object.getCreationSupport().addElement(parentElement, 0);
+		return parentElement.getChildAt(0);
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/AttributesProvidersTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/AttributesProvidersTest.java
index 663a03be6..6b90354a1 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/AttributesProvidersTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/AttributesProvidersTest.java
@@ -39,64 +39,64 @@
  * @author scheglov_ke
  */
 public class AttributesProvidersTest extends AbstractPaletteTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // PaletteManager
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link AttributesProviders#get(IConfigurationElement)}.
-   */
-  public void test_getIConfigurationElement() throws Exception {
-    String POINT_ID = "org.eclipse.wb.tests.testPoint";
-    try {
-      // add dynamic extension
-      {
-        String contribution = "<testObject attr='someValue'/>";
-        TestUtils.addDynamicExtension(POINT_ID, contribution);
-      }
-      // prepare IConfigurationElement
-      IConfigurationElement configurationElement;
-      {
-        List<IConfigurationElement> elements =
-            ExternalFactoriesHelper.getElements(POINT_ID, "testObject");
-        assertThat(elements).hasSize(1);
-        configurationElement = elements.get(0);
-      }
-      // test AttributesProvider
-      AttributesProvider provider = AttributesProviders.get(configurationElement);
-      assertEquals("someValue", provider.getAttribute("attr"));
-      assertNull(provider.getAttribute("noSuchAttribute"));
-    } finally {
-      TestUtils.removeDynamicExtension(POINT_ID);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// PaletteManager
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link AttributesProviders#get(IConfigurationElement)}.
+	 */
+	public void test_getIConfigurationElement() throws Exception {
+		String POINT_ID = "org.eclipse.wb.tests.testPoint";
+		try {
+			// add dynamic extension
+			{
+				String contribution = "<testObject attr='someValue'/>";
+				TestUtils.addDynamicExtension(POINT_ID, contribution);
+			}
+			// prepare IConfigurationElement
+			IConfigurationElement configurationElement;
+			{
+				List<IConfigurationElement> elements =
+						ExternalFactoriesHelper.getElements(POINT_ID, "testObject");
+				assertThat(elements).hasSize(1);
+				configurationElement = elements.get(0);
+			}
+			// test AttributesProvider
+			AttributesProvider provider = AttributesProviders.get(configurationElement);
+			assertEquals("someValue", provider.getAttribute("attr"));
+			assertNull(provider.getAttribute("noSuchAttribute"));
+		} finally {
+			TestUtils.removeDynamicExtension(POINT_ID);
+		}
+	}
 
-  /**
-   * Test for {@link AttributesProviders#get(Attributes)}.
-   */
-  public void test_getXML() throws Exception {
-    SAXParser parser = SAXParserFactory.newInstance().newSAXParser();
-    parser.parse(
-        new InputSource(new StringReader("<rootElement attr='someValue'/>")),
-        new DefaultHandler() {
-          @Override
-          public void startElement(String uri, String localName, String name, Attributes attributes)
-              throws SAXException {
-            AttributesProvider provider = AttributesProviders.get(attributes);
-            assertEquals("someValue", provider.getAttribute("attr"));
-            assertNull(provider.getAttribute("noSuchAttribute"));
-          }
-        });
-  }
+	/**
+	 * Test for {@link AttributesProviders#get(Attributes)}.
+	 */
+	public void test_getXML() throws Exception {
+		SAXParser parser = SAXParserFactory.newInstance().newSAXParser();
+		parser.parse(
+				new InputSource(new StringReader("<rootElement attr='someValue'/>")),
+				new DefaultHandler() {
+					@Override
+					public void startElement(String uri, String localName, String name, Attributes attributes)
+							throws SAXException {
+						AttributesProvider provider = AttributesProviders.get(attributes);
+						assertEquals("someValue", provider.getAttribute("attr"));
+						assertNull(provider.getAttribute("noSuchAttribute"));
+					}
+				});
+	}
 
-  /**
-   * Test for {@link AttributesProviders#get(Map)}.
-   */
-  public void test_getMap() throws Exception {
-    Map<String, String> attributes = ImmutableMap.of("attr", "someValue");
-    AttributesProvider provider = AttributesProviders.get(attributes);
-    assertEquals("someValue", provider.getAttribute("attr"));
-    assertNull(provider.getAttribute("noSuchAttribute"));
-  }
+	/**
+	 * Test for {@link AttributesProviders#get(Map)}.
+	 */
+	public void test_getMap() throws Exception {
+		Map<String, String> attributes = ImmutableMap.of("attr", "someValue");
+		AttributesProvider provider = AttributesProviders.get(attributes);
+		assertEquals("someValue", provider.getAttribute("attr"));
+		assertNull(provider.getAttribute("noSuchAttribute"));
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/CategoryCommandsTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/CategoryCommandsTest.java
index a78053d8d..df80bc836 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/CategoryCommandsTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/CategoryCommandsTest.java
@@ -29,405 +29,405 @@
  * @author scheglov_ke
  */
 public class CategoryCommandsTest extends AbstractPaletteTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Add
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_add_last() throws Exception {
-    PaletteManager manager = loadManager();
-    // use loaded palette
-    {
-      PaletteInfo palette = manager.getPalette();
-      // initially palette is empty
-      assertEquals(0, palette.getCategories().size());
-      // add category using command
-      manager.commands_add(new CategoryAddCommand("new id",
-          "new name",
-          "new description",
-          true,
-          true,
-          null));
-      manager.commands_write();
-      // check new category
-      assertEquals(1, palette.getCategories().size());
-      CategoryInfo category = palette.getCategory("new id");
-      assertEquals("new name", category.getName());
-      assertEquals("new description", category.getDescription());
-      assertTrue(category.isVisible());
-      assertTrue(category.isOpen());
-    }
-    // reload palette, but commands were written, so palette still in same state
-    {
-      manager.reloadPalette();
-      PaletteInfo palette = manager.getPalette();
-      assertEquals(1, palette.getCategories().size());
-      // check
-      CategoryInfo category = palette.getCategory("new id");
-      assertNotNull(category);
-      assertEquals("new name", category.getName());
-      assertEquals("new description", category.getDescription());
-      assertTrue(category.isVisible());
-      assertTrue(category.isOpen());
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Add
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_add_last() throws Exception {
+		PaletteManager manager = loadManager();
+		// use loaded palette
+		{
+			PaletteInfo palette = manager.getPalette();
+			// initially palette is empty
+			assertEquals(0, palette.getCategories().size());
+			// add category using command
+			manager.commands_add(new CategoryAddCommand("new id",
+					"new name",
+					"new description",
+					true,
+					true,
+					null));
+			manager.commands_write();
+			// check new category
+			assertEquals(1, palette.getCategories().size());
+			CategoryInfo category = palette.getCategory("new id");
+			assertEquals("new name", category.getName());
+			assertEquals("new description", category.getDescription());
+			assertTrue(category.isVisible());
+			assertTrue(category.isOpen());
+		}
+		// reload palette, but commands were written, so palette still in same state
+		{
+			manager.reloadPalette();
+			PaletteInfo palette = manager.getPalette();
+			assertEquals(1, palette.getCategories().size());
+			// check
+			CategoryInfo category = palette.getCategory("new id");
+			assertNotNull(category);
+			assertEquals("new name", category.getName());
+			assertEquals("new description", category.getDescription());
+			assertTrue(category.isVisible());
+			assertTrue(category.isOpen());
+		}
+	}
 
-  public void test_add_before() throws Exception {
-    PaletteManager manager = loadManager();
-    // use loaded palette
-    {
-      PaletteInfo palette = manager.getPalette();
-      // initially palette is empty
-      assertEquals(0, palette.getCategories().size());
-      // add categories using command
-      manager.commands_add(new CategoryAddCommand("0", "0", "0", true, true, null));
-      manager.commands_add(new CategoryAddCommand("1", "1", "1", true, true, "0"));
-      manager.commands_write();
-      // check new category
-      assertEquals(2, palette.getCategories().size());
-      assertEquals("1", palette.getCategories().get(0).getId());
-      assertEquals("0", palette.getCategories().get(1).getId());
-    }
-    // reload palette, but commands were written, so palette still in same state
-    {
-      manager.reloadPalette();
-      PaletteInfo palette = manager.getPalette();
-      assertEquals(2, palette.getCategories().size());
-      // check
-      assertEquals("1", palette.getCategories().get(0).getId());
-      assertEquals("0", palette.getCategories().get(1).getId());
-    }
-  }
+	public void test_add_before() throws Exception {
+		PaletteManager manager = loadManager();
+		// use loaded palette
+		{
+			PaletteInfo palette = manager.getPalette();
+			// initially palette is empty
+			assertEquals(0, palette.getCategories().size());
+			// add categories using command
+			manager.commands_add(new CategoryAddCommand("0", "0", "0", true, true, null));
+			manager.commands_add(new CategoryAddCommand("1", "1", "1", true, true, "0"));
+			manager.commands_write();
+			// check new category
+			assertEquals(2, palette.getCategories().size());
+			assertEquals("1", palette.getCategories().get(0).getId());
+			assertEquals("0", palette.getCategories().get(1).getId());
+		}
+		// reload palette, but commands were written, so palette still in same state
+		{
+			manager.reloadPalette();
+			PaletteInfo palette = manager.getPalette();
+			assertEquals(2, palette.getCategories().size());
+			// check
+			assertEquals("1", palette.getCategories().get(0).getId());
+			assertEquals("0", palette.getCategories().get(1).getId());
+		}
+	}
 
-  /**
-   * Check for special characters in text attributes.
-   */
-  public void test_add_specialCharacters() throws Exception {
-    PaletteManager manager = loadManager();
-    // use loaded palette
-    {
-      PaletteInfo palette = manager.getPalette();
-      // initially palette is empty
-      assertEquals(0, palette.getCategories().size());
-      // add category using command
-      manager.commands_add(new CategoryAddCommand("id",
-          "name\nsecond line",
-          "description",
-          true,
-          true,
-          null));
-      manager.commands_write();
-    }
-    // reload palette, but commands were written, so palette still in same state
-    {
-      manager.reloadPalette();
-      PaletteInfo palette = manager.getPalette();
-      assertEquals(1, palette.getCategories().size());
-      // check
-      CategoryInfo category = palette.getCategory("id");
-      assertEquals("name\nsecond line", category.getName());
-    }
-  }
+	/**
+	 * Check for special characters in text attributes.
+	 */
+	public void test_add_specialCharacters() throws Exception {
+		PaletteManager manager = loadManager();
+		// use loaded palette
+		{
+			PaletteInfo palette = manager.getPalette();
+			// initially palette is empty
+			assertEquals(0, palette.getCategories().size());
+			// add category using command
+			manager.commands_add(new CategoryAddCommand("id",
+					"name\nsecond line",
+					"description",
+					true,
+					true,
+					null));
+			manager.commands_write();
+		}
+		// reload palette, but commands were written, so palette still in same state
+		{
+			manager.reloadPalette();
+			PaletteInfo palette = manager.getPalette();
+			assertEquals(1, palette.getCategories().size());
+			// check
+			CategoryInfo category = palette.getCategory("id");
+			assertEquals("name\nsecond line", category.getName());
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Edit
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_edit() throws Exception {
-    PaletteManager manager = loadManager();
-    // use loaded palette
-    {
-      PaletteInfo palette = manager.getPalette();
-      // initially palette is empty
-      assertEquals(0, palette.getCategories().size());
-      // check new category
-      manager.commands_add(new CategoryAddCommand("0", "0", "0", true, true, null));
-      {
-        assertEquals(1, palette.getCategories().size());
-        CategoryInfo category = palette.getCategory("0");
-        assertEquals("0", category.getName());
-        assertEquals("0", category.getDescription());
-        assertTrue(category.isVisible());
-        assertTrue(category.isOpen());
-      }
-      // check updated category
-      manager.commands_add(new CategoryEditCommand("0", "name", "description", false, false));
-      {
-        assertEquals(1, palette.getCategories().size());
-        CategoryInfo category = palette.getCategory("0");
-        assertEquals("name", category.getName());
-        assertEquals("description", category.getDescription());
-        assertFalse(category.isVisible());
-        assertFalse(category.isOpen());
-      }
-      // write
-      manager.commands_write();
-    }
-    // reload palette, but commands were written, so palette still in same state
-    {
-      manager.reloadPalette();
-      PaletteInfo palette = manager.getPalette();
-      assertEquals(1, palette.getCategories().size());
-      // check
-      CategoryInfo category = palette.getCategory("0");
-      assertEquals("name", category.getName());
-      assertEquals("description", category.getDescription());
-      assertFalse(category.isVisible());
-      assertFalse(category.isOpen());
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Edit
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_edit() throws Exception {
+		PaletteManager manager = loadManager();
+		// use loaded palette
+		{
+			PaletteInfo palette = manager.getPalette();
+			// initially palette is empty
+			assertEquals(0, palette.getCategories().size());
+			// check new category
+			manager.commands_add(new CategoryAddCommand("0", "0", "0", true, true, null));
+			{
+				assertEquals(1, palette.getCategories().size());
+				CategoryInfo category = palette.getCategory("0");
+				assertEquals("0", category.getName());
+				assertEquals("0", category.getDescription());
+				assertTrue(category.isVisible());
+				assertTrue(category.isOpen());
+			}
+			// check updated category
+			manager.commands_add(new CategoryEditCommand("0", "name", "description", false, false));
+			{
+				assertEquals(1, palette.getCategories().size());
+				CategoryInfo category = palette.getCategory("0");
+				assertEquals("name", category.getName());
+				assertEquals("description", category.getDescription());
+				assertFalse(category.isVisible());
+				assertFalse(category.isOpen());
+			}
+			// write
+			manager.commands_write();
+		}
+		// reload palette, but commands were written, so palette still in same state
+		{
+			manager.reloadPalette();
+			PaletteInfo palette = manager.getPalette();
+			assertEquals(1, palette.getCategories().size());
+			// check
+			CategoryInfo category = palette.getCategory("0");
+			assertEquals("name", category.getName());
+			assertEquals("description", category.getDescription());
+			assertFalse(category.isVisible());
+			assertFalse(category.isOpen());
+		}
+	}
 
-  /**
-   * When we do second "edit", first "edit" command can be removed.
-   */
-  @SuppressWarnings("unchecked")
-  public void test_edit_twoTimes() throws Exception {
-    PaletteManager manager = loadManager();
-    List<Command> commands = (List<Command>) ReflectionUtils.getFieldObject(manager, "m_commands");
-    // use loaded palette
-    {
-      PaletteInfo palette = manager.getPalette();
-      // initially palette is empty
-      assertEquals(0, palette.getCategories().size());
-      // check new category
-      {
-        manager.commands_add(new CategoryAddCommand("0", "0", "0", true, true, null));
-        assertEquals(1, commands.size());
-        CategoryInfo category = palette.getCategory("0");
-        assertEquals("0", category.getName());
-      }
-      // edit: 1
-      {
-        manager.commands_add(new CategoryEditCommand("0", "1", "1", false, false));
-        assertEquals(2, commands.size());
-        CategoryInfo category = palette.getCategory("0");
-        assertEquals("1", category.getName());
-      }
-      // edit: 2, same count of commands
-      {
-        manager.commands_add(new CategoryEditCommand("0", "2", "2", false, false));
-        assertEquals(2, commands.size());
-        CategoryInfo category = palette.getCategory("0");
-        assertEquals("2", category.getName());
-      }
-      // write
-      manager.commands_write();
-    }
-    // reload palette, but commands were written, so palette still in same state
-    {
-      manager.reloadPalette();
-      PaletteInfo palette = manager.getPalette();
-      CategoryInfo category = palette.getCategory("0");
-      assertEquals("2", category.getName());
-    }
-  }
+	/**
+	 * When we do second "edit", first "edit" command can be removed.
+	 */
+	@SuppressWarnings("unchecked")
+	public void test_edit_twoTimes() throws Exception {
+		PaletteManager manager = loadManager();
+		List<Command> commands = (List<Command>) ReflectionUtils.getFieldObject(manager, "m_commands");
+		// use loaded palette
+		{
+			PaletteInfo palette = manager.getPalette();
+			// initially palette is empty
+			assertEquals(0, palette.getCategories().size());
+			// check new category
+			{
+				manager.commands_add(new CategoryAddCommand("0", "0", "0", true, true, null));
+				assertEquals(1, commands.size());
+				CategoryInfo category = palette.getCategory("0");
+				assertEquals("0", category.getName());
+			}
+			// edit: 1
+			{
+				manager.commands_add(new CategoryEditCommand("0", "1", "1", false, false));
+				assertEquals(2, commands.size());
+				CategoryInfo category = palette.getCategory("0");
+				assertEquals("1", category.getName());
+			}
+			// edit: 2, same count of commands
+			{
+				manager.commands_add(new CategoryEditCommand("0", "2", "2", false, false));
+				assertEquals(2, commands.size());
+				CategoryInfo category = palette.getCategory("0");
+				assertEquals("2", category.getName());
+			}
+			// write
+			manager.commands_write();
+		}
+		// reload palette, but commands were written, so palette still in same state
+		{
+			manager.reloadPalette();
+			PaletteInfo palette = manager.getPalette();
+			CategoryInfo category = palette.getCategory("0");
+			assertEquals("2", category.getName());
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Move
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_move_before() throws Exception {
-    PaletteManager manager = loadManager();
-    // use loaded palette
-    {
-      PaletteInfo palette = manager.getPalette();
-      // initially palette is empty
-      assertEquals(0, palette.getCategories().size());
-      // add categories
-      manager.commands_add(new CategoryAddCommand("0", "0", "0", true, true, null));
-      manager.commands_add(new CategoryAddCommand("1", "1", "1", true, true, null));
-      // check new categories
-      assertEquals(2, palette.getCategories().size());
-      CategoryInfo category_0 = palette.getCategories().get(0);
-      CategoryInfo category_1 = palette.getCategories().get(1);
-      assertEquals("0", category_0.getId());
-      assertEquals("1", category_1.getId());
-      // move category
-      manager.commands_add(new CategoryMoveCommand(category_1, category_0));
-      assertEquals("1", palette.getCategories().get(0).getId());
-      assertEquals("0", palette.getCategories().get(1).getId());
-      // write
-      manager.commands_write();
-    }
-    // reload palette, but commands were written, so palette still in same state
-    {
-      manager.reloadPalette();
-      PaletteInfo palette = manager.getPalette();
-      assertEquals(2, palette.getCategories().size());
-      // check
-      assertEquals("1", palette.getCategories().get(0).getId());
-      assertEquals("0", palette.getCategories().get(1).getId());
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Move
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_move_before() throws Exception {
+		PaletteManager manager = loadManager();
+		// use loaded palette
+		{
+			PaletteInfo palette = manager.getPalette();
+			// initially palette is empty
+			assertEquals(0, palette.getCategories().size());
+			// add categories
+			manager.commands_add(new CategoryAddCommand("0", "0", "0", true, true, null));
+			manager.commands_add(new CategoryAddCommand("1", "1", "1", true, true, null));
+			// check new categories
+			assertEquals(2, palette.getCategories().size());
+			CategoryInfo category_0 = palette.getCategories().get(0);
+			CategoryInfo category_1 = palette.getCategories().get(1);
+			assertEquals("0", category_0.getId());
+			assertEquals("1", category_1.getId());
+			// move category
+			manager.commands_add(new CategoryMoveCommand(category_1, category_0));
+			assertEquals("1", palette.getCategories().get(0).getId());
+			assertEquals("0", palette.getCategories().get(1).getId());
+			// write
+			manager.commands_write();
+		}
+		// reload palette, but commands were written, so palette still in same state
+		{
+			manager.reloadPalette();
+			PaletteInfo palette = manager.getPalette();
+			assertEquals(2, palette.getCategories().size());
+			// check
+			assertEquals("1", palette.getCategories().get(0).getId());
+			assertEquals("0", palette.getCategories().get(1).getId());
+		}
+	}
 
-  public void test_move_last() throws Exception {
-    PaletteManager manager = loadManager();
-    // use loaded palette
-    {
-      PaletteInfo palette = manager.getPalette();
-      // initially palette is empty
-      assertEquals(0, palette.getCategories().size());
-      // add categories
-      manager.commands_add(new CategoryAddCommand("0", "0", "0", true, true, null));
-      manager.commands_add(new CategoryAddCommand("1", "1", "1", true, true, null));
-      // check new categories
-      assertEquals(2, palette.getCategories().size());
-      CategoryInfo category_0 = palette.getCategories().get(0);
-      CategoryInfo category_1 = palette.getCategories().get(1);
-      assertEquals("0", category_0.getId());
-      assertEquals("1", category_1.getId());
-      // move category
-      manager.commands_add(new CategoryMoveCommand(category_0, null));
-      assertEquals("1", palette.getCategories().get(0).getId());
-      assertEquals("0", palette.getCategories().get(1).getId());
-      // write
-      manager.commands_write();
-    }
-    // reload palette, but commands were written, so palette still in same state
-    {
-      manager.reloadPalette();
-      PaletteInfo palette = manager.getPalette();
-      assertEquals(2, palette.getCategories().size());
-      // check
-      assertEquals("1", palette.getCategories().get(0).getId());
-      assertEquals("0", palette.getCategories().get(1).getId());
-    }
-  }
+	public void test_move_last() throws Exception {
+		PaletteManager manager = loadManager();
+		// use loaded palette
+		{
+			PaletteInfo palette = manager.getPalette();
+			// initially palette is empty
+			assertEquals(0, palette.getCategories().size());
+			// add categories
+			manager.commands_add(new CategoryAddCommand("0", "0", "0", true, true, null));
+			manager.commands_add(new CategoryAddCommand("1", "1", "1", true, true, null));
+			// check new categories
+			assertEquals(2, palette.getCategories().size());
+			CategoryInfo category_0 = palette.getCategories().get(0);
+			CategoryInfo category_1 = palette.getCategories().get(1);
+			assertEquals("0", category_0.getId());
+			assertEquals("1", category_1.getId());
+			// move category
+			manager.commands_add(new CategoryMoveCommand(category_0, null));
+			assertEquals("1", palette.getCategories().get(0).getId());
+			assertEquals("0", palette.getCategories().get(1).getId());
+			// write
+			manager.commands_write();
+		}
+		// reload palette, but commands were written, so palette still in same state
+		{
+			manager.reloadPalette();
+			PaletteInfo palette = manager.getPalette();
+			assertEquals(2, palette.getCategories().size());
+			// check
+			assertEquals("1", palette.getCategories().get(0).getId());
+			assertEquals("0", palette.getCategories().get(1).getId());
+		}
+	}
 
-  /**
-   * Don't move before self.
-   */
-  public void test_move_noop() throws Exception {
-    PaletteManager manager = loadManager();
-    // use loaded palette
-    {
-      PaletteInfo palette = manager.getPalette();
-      // initially palette is empty
-      assertEquals(0, palette.getCategories().size());
-      // add categories
-      manager.commands_add(new CategoryAddCommand("0", "0", "0", true, true, null));
-      // check new categories
-      assertEquals(1, palette.getCategories().size());
-      CategoryInfo category_0 = palette.getCategories().get(0);
-      assertEquals("0", category_0.getId());
-      // move category
-      manager.commands_add(new CategoryMoveCommand(category_0, category_0));
-      assertEquals("0", palette.getCategories().get(0).getId());
-      // write
-      manager.commands_write();
-    }
-    // reload palette, but commands were written, so palette still in same state
-    {
-      manager.reloadPalette();
-      PaletteInfo palette = manager.getPalette();
-      assertEquals(1, palette.getCategories().size());
-      assertEquals("0", palette.getCategories().get(0).getId());
-    }
-  }
+	/**
+	 * Don't move before self.
+	 */
+	public void test_move_noop() throws Exception {
+		PaletteManager manager = loadManager();
+		// use loaded palette
+		{
+			PaletteInfo palette = manager.getPalette();
+			// initially palette is empty
+			assertEquals(0, palette.getCategories().size());
+			// add categories
+			manager.commands_add(new CategoryAddCommand("0", "0", "0", true, true, null));
+			// check new categories
+			assertEquals(1, palette.getCategories().size());
+			CategoryInfo category_0 = palette.getCategories().get(0);
+			assertEquals("0", category_0.getId());
+			// move category
+			manager.commands_add(new CategoryMoveCommand(category_0, category_0));
+			assertEquals("0", palette.getCategories().get(0).getId());
+			// write
+			manager.commands_write();
+		}
+		// reload palette, but commands were written, so palette still in same state
+		{
+			manager.reloadPalette();
+			PaletteInfo palette = manager.getPalette();
+			assertEquals(1, palette.getCategories().size());
+			assertEquals("0", palette.getCategories().get(0).getId());
+		}
+	}
 
-  /**
-   * Update {@link CategoryMoveCommand} so that source {@link CategoryInfo} can not be found.
-   */
-  public void test_move_noSource() throws Exception {
-    PaletteManager manager = loadManager();
-    // use loaded palette
-    {
-      PaletteInfo palette = manager.getPalette();
-      // initially palette is empty
-      assertEquals(0, palette.getCategories().size());
-      // add categories
-      manager.commands_add(new CategoryAddCommand("0", "0", "0", true, true, null));
-      manager.commands_add(new CategoryAddCommand("1", "1", "1", true, true, null));
-      // check new categories
-      assertEquals(2, palette.getCategories().size());
-      CategoryInfo category_0 = palette.getCategories().get(0);
-      CategoryInfo category_1 = palette.getCategories().get(1);
-      assertEquals("0", category_0.getId());
-      assertEquals("1", category_1.getId());
-      // move category
-      {
-        CategoryMoveCommand moveCommand = new CategoryMoveCommand(category_0, null);
-        ReflectionUtils.getFieldByName(CategoryMoveCommand.class, "m_id").set(
-            moveCommand,
-            "no-such-category");
-        manager.commands_add(moveCommand);
-        assertEquals("0", palette.getCategories().get(0).getId());
-        assertEquals("1", palette.getCategories().get(1).getId());
-      }
-      // write
-      manager.commands_write();
-    }
-    // reload palette, but commands were written, so palette still in same state
-    {
-      manager.reloadPalette();
-      PaletteInfo palette = manager.getPalette();
-      assertEquals(2, palette.getCategories().size());
-      // check
-      assertEquals("0", palette.getCategories().get(0).getId());
-      assertEquals("1", palette.getCategories().get(1).getId());
-    }
-  }
+	/**
+	 * Update {@link CategoryMoveCommand} so that source {@link CategoryInfo} can not be found.
+	 */
+	public void test_move_noSource() throws Exception {
+		PaletteManager manager = loadManager();
+		// use loaded palette
+		{
+			PaletteInfo palette = manager.getPalette();
+			// initially palette is empty
+			assertEquals(0, palette.getCategories().size());
+			// add categories
+			manager.commands_add(new CategoryAddCommand("0", "0", "0", true, true, null));
+			manager.commands_add(new CategoryAddCommand("1", "1", "1", true, true, null));
+			// check new categories
+			assertEquals(2, palette.getCategories().size());
+			CategoryInfo category_0 = palette.getCategories().get(0);
+			CategoryInfo category_1 = palette.getCategories().get(1);
+			assertEquals("0", category_0.getId());
+			assertEquals("1", category_1.getId());
+			// move category
+			{
+				CategoryMoveCommand moveCommand = new CategoryMoveCommand(category_0, null);
+				ReflectionUtils.getFieldByName(CategoryMoveCommand.class, "m_id").set(
+						moveCommand,
+						"no-such-category");
+				manager.commands_add(moveCommand);
+				assertEquals("0", palette.getCategories().get(0).getId());
+				assertEquals("1", palette.getCategories().get(1).getId());
+			}
+			// write
+			manager.commands_write();
+		}
+		// reload palette, but commands were written, so palette still in same state
+		{
+			manager.reloadPalette();
+			PaletteInfo palette = manager.getPalette();
+			assertEquals(2, palette.getCategories().size());
+			// check
+			assertEquals("0", palette.getCategories().get(0).getId());
+			assertEquals("1", palette.getCategories().get(1).getId());
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Remove
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_remove() throws Exception {
-    PaletteManager manager = loadManager();
-    // use loaded palette
-    {
-      PaletteInfo palette = manager.getPalette();
-      // initially palette is empty
-      assertEquals(0, palette.getCategories().size());
-      // add categories
-      manager.commands_add(new CategoryAddCommand("0", "0", "0", true, true, null));
-      // check new categories
-      assertEquals(1, palette.getCategories().size());
-      CategoryInfo category_0 = palette.getCategories().get(0);
-      assertEquals("0", category_0.getId());
-      // remove category
-      manager.commands_add(new CategoryRemoveCommand(category_0));
-      assertEquals(0, palette.getCategories().size());
-      // write
-      manager.commands_write();
-    }
-    // reload palette, but commands were written, so palette still in same state
-    {
-      manager.reloadPalette();
-      PaletteInfo palette = manager.getPalette();
-      assertEquals(0, palette.getCategories().size());
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Remove
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_remove() throws Exception {
+		PaletteManager manager = loadManager();
+		// use loaded palette
+		{
+			PaletteInfo palette = manager.getPalette();
+			// initially palette is empty
+			assertEquals(0, palette.getCategories().size());
+			// add categories
+			manager.commands_add(new CategoryAddCommand("0", "0", "0", true, true, null));
+			// check new categories
+			assertEquals(1, palette.getCategories().size());
+			CategoryInfo category_0 = palette.getCategories().get(0);
+			assertEquals("0", category_0.getId());
+			// remove category
+			manager.commands_add(new CategoryRemoveCommand(category_0));
+			assertEquals(0, palette.getCategories().size());
+			// write
+			manager.commands_write();
+		}
+		// reload palette, but commands were written, so palette still in same state
+		{
+			manager.reloadPalette();
+			PaletteInfo palette = manager.getPalette();
+			assertEquals(0, palette.getCategories().size());
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Visibility
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_visibility() throws Exception {
-    PaletteManager manager = loadManager();
-    // use loaded palette
-    {
-      CategoryInfo category;
-      {
-        manager.commands_add(new CategoryAddCommand("0", "0", "0", true, true, null));
-        category = manager.getPalette().getCategory("0");
-      }
-      assertTrue(category.isVisible());
-      // set invisible
-      manager.commands_add(new ElementVisibilityCommand(category, false));
-      assertFalse(category.isVisible());
-      // write
-      manager.commands_write();
-    }
-    // reload palette, but commands were written, so palette still in same state
-    {
-      manager.reloadPalette();
-      PaletteInfo palette = manager.getPalette();
-      assertFalse(palette.getCategory("0").isVisible());
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Visibility
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_visibility() throws Exception {
+		PaletteManager manager = loadManager();
+		// use loaded palette
+		{
+			CategoryInfo category;
+			{
+				manager.commands_add(new CategoryAddCommand("0", "0", "0", true, true, null));
+				category = manager.getPalette().getCategory("0");
+			}
+			assertTrue(category.isVisible());
+			// set invisible
+			manager.commands_add(new ElementVisibilityCommand(category, false));
+			assertFalse(category.isVisible());
+			// write
+			manager.commands_write();
+		}
+		// reload palette, but commands were written, so palette still in same state
+		{
+			manager.reloadPalette();
+			PaletteInfo palette = manager.getPalette();
+			assertFalse(palette.getCategory("0").isVisible());
+		}
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/CategoryInfoTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/CategoryInfoTest.java
index 60368b372..0d4717914 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/CategoryInfoTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/CategoryInfoTest.java
@@ -21,105 +21,105 @@
  * @author scheglov_ke
  */
 public class CategoryInfoTest extends AbstractPaletteTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_toString() throws Exception {
-    CategoryInfo category = new CategoryInfo();
-    category.setId("1");
-    category.setName("category 1");
-    // add entry
-    {
-      ComponentEntryInfo component = new ComponentEntryInfo();
-      component.setComponentClassName("org.eclipse.swt.widgets.Button");
-      category.addEntry(component);
-    }
-    // check
-    assertEquals(
-        "Category(id='1', name='category 1', entries=[Component(class='org.eclipse.swt.widgets.Button')])",
-        category.toString());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_toString() throws Exception {
+		CategoryInfo category = new CategoryInfo();
+		category.setId("1");
+		category.setName("category 1");
+		// add entry
+		{
+			ComponentEntryInfo component = new ComponentEntryInfo();
+			component.setComponentClassName("org.eclipse.swt.widgets.Button");
+			category.addEntry(component);
+		}
+		// check
+		assertEquals(
+				"Category(id='1', name='category 1', entries=[Component(class='org.eclipse.swt.widgets.Button')])",
+				category.toString());
+	}
 
-  /**
-   * Test for "open" property.
-   */
-  public void test_open() throws Exception {
-    CategoryInfo category = new CategoryInfo();
-    assertFalse(category.isOpen());
-    category.setOpen(true);
-    assertTrue(category.isOpen());
-  }
+	/**
+	 * Test for "open" property.
+	 */
+	public void test_open() throws Exception {
+		CategoryInfo category = new CategoryInfo();
+		assertFalse(category.isOpen());
+		category.setOpen(true);
+		assertTrue(category.isOpen());
+	}
 
-  /**
-   * Test for "entries" operations.
-   */
-  public void test_entries() throws Exception {
-    CategoryInfo category = new CategoryInfo();
-    assertTrue(category.getEntries().isEmpty());
-    // prepare entries
-    EntryInfo entry_1 = new ComponentEntryInfo();
-    entry_1.setId("1");
-    EntryInfo entry_2 = new ComponentEntryInfo();
-    entry_2.setId("2");
-    // add entries
-    {
-      category.addEntry(entry_1);
-      category.addEntry(entry_2);
-      assertEquals(2, category.getEntries().size());
-      assertSame(entry_1, category.getEntries().get(0));
-      assertSame(entry_2, category.getEntries().get(1));
-      // clean up
-      category.getEntries().clear();
-    }
-    // add with index
-    {
-      category.addEntry(entry_1);
-      category.addEntry(0, entry_2);
-      assertEquals(2, category.getEntries().size());
-      assertSame(entry_2, category.getEntries().get(0));
-      assertSame(entry_1, category.getEntries().get(1));
-    }
-    // remove one by one
-    {
-      category.removeEntry(null);
-      assertEquals(2, category.getEntries().size());
-      //
-      category.removeEntry(entry_1);
-      assertEquals(1, category.getEntries().size());
-      assertSame(entry_2, category.getEntries().get(0));
-      //
-      category.removeEntry(entry_2);
-      assertEquals(0, category.getEntries().size());
-    }
-  }
+	/**
+	 * Test for "entries" operations.
+	 */
+	public void test_entries() throws Exception {
+		CategoryInfo category = new CategoryInfo();
+		assertTrue(category.getEntries().isEmpty());
+		// prepare entries
+		EntryInfo entry_1 = new ComponentEntryInfo();
+		entry_1.setId("1");
+		EntryInfo entry_2 = new ComponentEntryInfo();
+		entry_2.setId("2");
+		// add entries
+		{
+			category.addEntry(entry_1);
+			category.addEntry(entry_2);
+			assertEquals(2, category.getEntries().size());
+			assertSame(entry_1, category.getEntries().get(0));
+			assertSame(entry_2, category.getEntries().get(1));
+			// clean up
+			category.getEntries().clear();
+		}
+		// add with index
+		{
+			category.addEntry(entry_1);
+			category.addEntry(0, entry_2);
+			assertEquals(2, category.getEntries().size());
+			assertSame(entry_2, category.getEntries().get(0));
+			assertSame(entry_1, category.getEntries().get(1));
+		}
+		// remove one by one
+		{
+			category.removeEntry(null);
+			assertEquals(2, category.getEntries().size());
+			//
+			category.removeEntry(entry_1);
+			assertEquals(1, category.getEntries().size());
+			assertSame(entry_2, category.getEntries().get(0));
+			//
+			category.removeEntry(entry_2);
+			assertEquals(0, category.getEntries().size());
+		}
+	}
 
-  public void test_parse() throws Exception {
-    addPaletteExtension(new String[]{"<category id='id_1' name='name 1' description='description 1'/>"});
-    PaletteInfo palette = loadPalette();
-    // check category
-    CategoryInfo category = palette.getCategory("id_1");
-    assertEquals("id_1", category.getId());
-    assertEquals("name 1", category.getName());
-    assertEquals("description 1", category.getDescription());
-    assertTrue(category.isVisible());
-    assertTrue(category.isOpen());
-    assertFalse(category.isOptional());
-  }
+	public void test_parse() throws Exception {
+		addPaletteExtension(new String[]{"<category id='id_1' name='name 1' description='description 1'/>"});
+		PaletteInfo palette = loadPalette();
+		// check category
+		CategoryInfo category = palette.getCategory("id_1");
+		assertEquals("id_1", category.getId());
+		assertEquals("name 1", category.getName());
+		assertEquals("description 1", category.getDescription());
+		assertTrue(category.isVisible());
+		assertTrue(category.isOpen());
+		assertFalse(category.isOptional());
+	}
 
-  public void test_parse_notDefault() throws Exception {
-    addPaletteExtension(new String[]{"<category id='id_1'"
-        + " name='name 1'"
-        + " visible='false'"
-        + " open='false'"
-        + " optional='true'/>"});
-    PaletteInfo palette = loadPalette();
-    // check category
-    CategoryInfo category = palette.getCategory("id_1");
-    assertEquals("id_1", category.getId());
-    assertFalse(category.isVisible());
-    assertFalse(category.isOpen());
-    assertTrue(category.isOptional());
-  }
+	public void test_parse_notDefault() throws Exception {
+		addPaletteExtension(new String[]{"<category id='id_1'"
+				+ " name='name 1'"
+				+ " visible='false'"
+				+ " open='false'"
+				+ " optional='true'/>"});
+		PaletteInfo palette = loadPalette();
+		// check category
+		CategoryInfo category = palette.getCategory("id_1");
+		assertEquals("id_1", category.getId());
+		assertFalse(category.isVisible());
+		assertFalse(category.isOpen());
+		assertTrue(category.isOptional());
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/ChooseComponentEntryInfoTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/ChooseComponentEntryInfoTest.java
index 1fbb3e1d6..6a8979965 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/ChooseComponentEntryInfoTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/ChooseComponentEntryInfoTest.java
@@ -35,168 +35,168 @@
  * @author scheglov_ke
  */
 public class ChooseComponentEntryInfoTest extends AbstractPaletteTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_access() throws Exception {
-    ChooseComponentEntryInfo entry = new ChooseComponentEntryInfo();
-    assertNotNull(entry.getIcon());
-    assertNotNull(entry.getName());
-    assertNotNull(entry.getDescription());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_access() throws Exception {
+		ChooseComponentEntryInfo entry = new ChooseComponentEntryInfo();
+		assertNotNull(entry.getIcon());
+		assertNotNull(entry.getName());
+		assertNotNull(entry.getDescription());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parse
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_parse() throws Exception {
-    addPaletteExtension(new String[]{
-        "<category id='category_1' name='category 1'>",
-        "  <x-entry id='system.chooseComponent' name='my name'"
-            + " class='org.eclipse.wb.internal.core.xml.editor.palette.model.ChooseComponentEntryInfo'/>",
-        "</category>"});
-    PaletteInfo palette = loadPalette();
-    // prepare entry
-    CategoryInfo category = palette.getCategory("category_1");
-    ChooseComponentEntryInfo entry = (ChooseComponentEntryInfo) category.getEntries().get(0);
-    // check component
-    assertSame(category, entry.getCategory());
-    assertEquals("system.chooseComponent", entry.getId());
-    assertEquals("my name", entry.getName());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parse
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_parse() throws Exception {
+		addPaletteExtension(new String[]{
+				"<category id='category_1' name='category 1'>",
+				"  <x-entry id='system.chooseComponent' name='my name'"
+						+ " class='org.eclipse.wb.internal.core.xml.editor.palette.model.ChooseComponentEntryInfo'/>",
+		"</category>"});
+		PaletteInfo palette = loadPalette();
+		// prepare entry
+		CategoryInfo category = palette.getCategory("category_1");
+		ChooseComponentEntryInfo entry = (ChooseComponentEntryInfo) category.getEntries().get(0);
+		// check component
+		assertSame(category, entry.getCategory());
+		assertEquals("system.chooseComponent", entry.getId());
+		assertEquals("my name", entry.getName());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tool
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_createTool_select() throws Exception {
-    addPaletteExtension(new String[]{
-        "<category id='category_1' name='category 1'>",
-        "  <x-entry id='system.chooseComponent' class='org.eclipse.wb.internal.core.xml.editor.palette.model.ChooseComponentEntryInfo'/>",
-        "</category>"});
-    XmlObjectInfo panel = parseEmptyPanel();
-    final PaletteManager manager = new PaletteManager(panel, TOOLKIT_ID);
-    manager.reloadPalette();
-    // set palette site
-    IPaletteSite.Helper.setSite(panel, new IPaletteSite.Empty() {
-      @Override
-      public Shell getShell() {
-        return DesignerPlugin.getShell();
-      }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tool
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_createTool_select() throws Exception {
+		addPaletteExtension(new String[]{
+				"<category id='category_1' name='category 1'>",
+				"  <x-entry id='system.chooseComponent' class='org.eclipse.wb.internal.core.xml.editor.palette.model.ChooseComponentEntryInfo'/>",
+		"</category>"});
+		XmlObjectInfo panel = parseEmptyPanel();
+		final PaletteManager manager = new PaletteManager(panel, TOOLKIT_ID);
+		manager.reloadPalette();
+		// set palette site
+		IPaletteSite.Helper.setSite(panel, new IPaletteSite.Empty() {
+			@Override
+			public Shell getShell() {
+				return DesignerPlugin.getShell();
+			}
 
-      @Override
-      public PaletteInfo getPalette() {
-        return manager.getPalette();
-      }
+			@Override
+			public PaletteInfo getPalette() {
+				return manager.getPalette();
+			}
 
-      @Override
-      public void addCommand(Command command) {
-        manager.commands_add(command);
-      }
-    });
-    // prepare entry
-    final ChooseComponentEntryInfo entry;
-    {
-      PaletteInfo palette = manager.getPalette();
-      CategoryInfo category = palette.getCategory("category_1");
-      entry = (ChooseComponentEntryInfo) category.getEntries().get(0);
-    }
-    // initialize
-    assertTrue(entry.initialize(null, panel));
-    // create tool
-    CreationTool creationTool;
-    {
-      final CreationTool[] tools = new CreationTool[1];
-      new UiContext().executeAndCheck(new UIRunnable() {
-        @Override
-        public void run(UiContext context) throws Exception {
-          tools[0] = (CreationTool) entry.createTool();
-        }
-      }, new UIRunnable() {
-        @Override
-        public void run(UiContext context) throws Exception {
-          // set filter
-          {
-            Text filterText = context.findFirstWidget(Text.class);
-            filterText.setText("org.eclipse.swt.widgets.Button");
-          }
-          // wait for types
-          {
-            final Table typesTable = context.findFirstWidget(Table.class);
-            context.waitFor(new UIPredicate() {
-              @Override
-              public boolean check() {
-                return typesTable.getItems().length != 0;
-              }
-            });
-          }
-          // click OK
-          context.clickButton("OK");
-        }
-      });
-      creationTool = tools[0];
-    }
-    // check tool
-    {
-      ICreationFactory creationFactory = creationTool.getFactory();
-      creationFactory.activate();
-      // check new object
-      XmlObjectInfo newObject = (XmlObjectInfo) creationFactory.getNewObject();
-      {
-        DocumentElement newElement = getNewCreationElement(newObject);
-        assertEquals("Button", newElement.getTag());
-        assertEquals("New Button", newElement.getAttribute("text"));
-      }
-    }
-  }
+			@Override
+			public void addCommand(Command command) {
+				manager.commands_add(command);
+			}
+		});
+		// prepare entry
+		final ChooseComponentEntryInfo entry;
+		{
+			PaletteInfo palette = manager.getPalette();
+			CategoryInfo category = palette.getCategory("category_1");
+			entry = (ChooseComponentEntryInfo) category.getEntries().get(0);
+		}
+		// initialize
+		assertTrue(entry.initialize(null, panel));
+		// create tool
+		CreationTool creationTool;
+		{
+			final CreationTool[] tools = new CreationTool[1];
+			new UiContext().executeAndCheck(new UIRunnable() {
+				@Override
+				public void run(UiContext context) throws Exception {
+					tools[0] = (CreationTool) entry.createTool();
+				}
+			}, new UIRunnable() {
+				@Override
+				public void run(UiContext context) throws Exception {
+					// set filter
+					{
+						Text filterText = context.findFirstWidget(Text.class);
+						filterText.setText("org.eclipse.swt.widgets.Button");
+					}
+					// wait for types
+					{
+						final Table typesTable = context.findFirstWidget(Table.class);
+						context.waitFor(new UIPredicate() {
+							@Override
+							public boolean check() {
+								return typesTable.getItems().length != 0;
+							}
+						});
+					}
+					// click OK
+					context.clickButton("OK");
+				}
+			});
+			creationTool = tools[0];
+		}
+		// check tool
+		{
+			ICreationFactory creationFactory = creationTool.getFactory();
+			creationFactory.activate();
+			// check new object
+			XmlObjectInfo newObject = (XmlObjectInfo) creationFactory.getNewObject();
+			{
+				DocumentElement newElement = getNewCreationElement(newObject);
+				assertEquals("Button", newElement.getTag());
+				assertEquals("New Button", newElement.getAttribute("text"));
+			}
+		}
+	}
 
-  public void test_createTool_cancel() throws Exception {
-    addPaletteExtension(new String[]{
-        "<category id='category_1' name='category 1'>",
-        "  <x-entry id='system.chooseComponent' class='org.eclipse.wb.internal.core.xml.editor.palette.model.ChooseComponentEntryInfo'/>",
-        "</category>"});
-    XmlObjectInfo panel = parseEmptyPanel();
-    final PaletteManager manager = new PaletteManager(panel, TOOLKIT_ID);
-    manager.reloadPalette();
-    // set palette site
-    IPaletteSite.Helper.setSite(panel, new IPaletteSite.Empty() {
-      @Override
-      public Shell getShell() {
-        return DesignerPlugin.getShell();
-      }
-    });
-    // prepare entry
-    final ChooseComponentEntryInfo entry;
-    {
-      PaletteInfo palette = manager.getPalette();
-      CategoryInfo category = palette.getCategory("category_1");
-      entry = (ChooseComponentEntryInfo) category.getEntries().get(0);
-    }
-    // initialize
-    assertTrue(entry.initialize(null, panel));
-    // create tool
-    CreationTool creationTool;
-    {
-      final CreationTool[] tools = new CreationTool[1];
-      new UiContext().executeAndCheck(new UIRunnable() {
-        @Override
-        public void run(UiContext context) throws Exception {
-          tools[0] = (CreationTool) entry.createTool();
-        }
-      }, new UIRunnable() {
-        @Override
-        public void run(UiContext context) throws Exception {
-          context.useShell("Open type");
-          context.clickButton("Cancel");
-        }
-      });
-      creationTool = tools[0];
-    }
-    // check tool
-    assertNull(creationTool);
-  }
+	public void test_createTool_cancel() throws Exception {
+		addPaletteExtension(new String[]{
+				"<category id='category_1' name='category 1'>",
+				"  <x-entry id='system.chooseComponent' class='org.eclipse.wb.internal.core.xml.editor.palette.model.ChooseComponentEntryInfo'/>",
+		"</category>"});
+		XmlObjectInfo panel = parseEmptyPanel();
+		final PaletteManager manager = new PaletteManager(panel, TOOLKIT_ID);
+		manager.reloadPalette();
+		// set palette site
+		IPaletteSite.Helper.setSite(panel, new IPaletteSite.Empty() {
+			@Override
+			public Shell getShell() {
+				return DesignerPlugin.getShell();
+			}
+		});
+		// prepare entry
+		final ChooseComponentEntryInfo entry;
+		{
+			PaletteInfo palette = manager.getPalette();
+			CategoryInfo category = palette.getCategory("category_1");
+			entry = (ChooseComponentEntryInfo) category.getEntries().get(0);
+		}
+		// initialize
+		assertTrue(entry.initialize(null, panel));
+		// create tool
+		CreationTool creationTool;
+		{
+			final CreationTool[] tools = new CreationTool[1];
+			new UiContext().executeAndCheck(new UIRunnable() {
+				@Override
+				public void run(UiContext context) throws Exception {
+					tools[0] = (CreationTool) entry.createTool();
+				}
+			}, new UIRunnable() {
+				@Override
+				public void run(UiContext context) throws Exception {
+					context.useShell("Open type");
+					context.clickButton("Cancel");
+				}
+			});
+			creationTool = tools[0];
+		}
+		// check tool
+		assertNull(creationTool);
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/ComponentCommandsTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/ComponentCommandsTest.java
index ff1b068c3..3d3e4d580 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/ComponentCommandsTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/ComponentCommandsTest.java
@@ -32,436 +32,436 @@
  * @author scheglov_ke
  */
 public class ComponentCommandsTest extends AbstractPaletteTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Add
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_add() throws Exception {
-    PaletteManager manager = loadManager();
-    // use loaded palette
-    {
-      PaletteInfo palette = manager.getPalette();
-      CategoryInfo category = addCategory(manager, "0");
-      // add components
-      manager.commands_add(new ComponentAddCommand("new id",
-          "new name",
-          "new description",
-          true,
-          "org.eclipse.swt.widgets.Button",
-          category));
-      manager.commands_write();
-      // check components
-      ComponentEntryInfo entry = (ComponentEntryInfo) palette.getEntry("new id");
-      assertEquals("new name", entry.getName());
-      assertEquals("new description", entry.getDescription());
-      assertEquals("org.eclipse.swt.widgets.Button", entry.getClassName());
-      assertTrue(entry.isVisible());
-    }
-    // reload palette, but commands were written, so palette still in same state
-    {
-      manager.reloadPalette();
-      PaletteInfo palette = manager.getPalette();
-      // check
-      ComponentEntryInfo entry = (ComponentEntryInfo) palette.getEntry("new id");
-      assertEquals("new name", entry.getName());
-      assertEquals("new description", entry.getDescription());
-      assertEquals("org.eclipse.swt.widgets.Button", entry.getClassName());
-      assertTrue(entry.isVisible());
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Add
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_add() throws Exception {
+		PaletteManager manager = loadManager();
+		// use loaded palette
+		{
+			PaletteInfo palette = manager.getPalette();
+			CategoryInfo category = addCategory(manager, "0");
+			// add components
+			manager.commands_add(new ComponentAddCommand("new id",
+					"new name",
+					"new description",
+					true,
+					"org.eclipse.swt.widgets.Button",
+					category));
+			manager.commands_write();
+			// check components
+			ComponentEntryInfo entry = (ComponentEntryInfo) palette.getEntry("new id");
+			assertEquals("new name", entry.getName());
+			assertEquals("new description", entry.getDescription());
+			assertEquals("org.eclipse.swt.widgets.Button", entry.getClassName());
+			assertTrue(entry.isVisible());
+		}
+		// reload palette, but commands were written, so palette still in same state
+		{
+			manager.reloadPalette();
+			PaletteInfo palette = manager.getPalette();
+			// check
+			ComponentEntryInfo entry = (ComponentEntryInfo) palette.getEntry("new id");
+			assertEquals("new name", entry.getName());
+			assertEquals("new description", entry.getDescription());
+			assertEquals("org.eclipse.swt.widgets.Button", entry.getClassName());
+			assertTrue(entry.isVisible());
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Edit
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_edit() throws Exception {
-    PaletteManager manager = loadManager();
-    // use loaded palette
-    {
-      PaletteInfo palette = manager.getPalette();
-      CategoryInfo category = addCategory(manager, "0");
-      // add component
-      manager.commands_add(new ComponentAddCommand("0", "0", "0", true, "0", category));
-      {
-        ComponentEntryInfo entry = (ComponentEntryInfo) palette.getEntry("0");
-        assertEquals("0", entry.getName());
-        assertEquals("0", entry.getDescription());
-        assertEquals("0", entry.getClassName());
-        assertTrue(entry.isVisible());
-      }
-      // edit component
-      manager.commands_add(new ComponentEditCommand("0", "1", "1", false, "1"));
-      {
-        ComponentEntryInfo entry = (ComponentEntryInfo) palette.getEntry("0");
-        assertEquals("1", entry.getName());
-        assertEquals("1", entry.getDescription());
-        assertEquals("1", entry.getClassName());
-        assertFalse(entry.isVisible());
-      }
-      // write
-      manager.commands_write();
-    }
-    // reload palette, but commands were written, so palette still in same state
-    {
-      manager.reloadPalette();
-      PaletteInfo palette = manager.getPalette();
-      // check
-      ComponentEntryInfo entry = (ComponentEntryInfo) palette.getEntry("0");
-      assertEquals("1", entry.getName());
-      assertEquals("1", entry.getDescription());
-      assertEquals("1", entry.getClassName());
-      assertFalse(entry.isVisible());
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Edit
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_edit() throws Exception {
+		PaletteManager manager = loadManager();
+		// use loaded palette
+		{
+			PaletteInfo palette = manager.getPalette();
+			CategoryInfo category = addCategory(manager, "0");
+			// add component
+			manager.commands_add(new ComponentAddCommand("0", "0", "0", true, "0", category));
+			{
+				ComponentEntryInfo entry = (ComponentEntryInfo) palette.getEntry("0");
+				assertEquals("0", entry.getName());
+				assertEquals("0", entry.getDescription());
+				assertEquals("0", entry.getClassName());
+				assertTrue(entry.isVisible());
+			}
+			// edit component
+			manager.commands_add(new ComponentEditCommand("0", "1", "1", false, "1"));
+			{
+				ComponentEntryInfo entry = (ComponentEntryInfo) palette.getEntry("0");
+				assertEquals("1", entry.getName());
+				assertEquals("1", entry.getDescription());
+				assertEquals("1", entry.getClassName());
+				assertFalse(entry.isVisible());
+			}
+			// write
+			manager.commands_write();
+		}
+		// reload palette, but commands were written, so palette still in same state
+		{
+			manager.reloadPalette();
+			PaletteInfo palette = manager.getPalette();
+			// check
+			ComponentEntryInfo entry = (ComponentEntryInfo) palette.getEntry("0");
+			assertEquals("1", entry.getName());
+			assertEquals("1", entry.getDescription());
+			assertEquals("1", entry.getClassName());
+			assertFalse(entry.isVisible());
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Move
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_move_before() throws Exception {
-    PaletteManager manager = loadManager();
-    // use loaded palette
-    {
-      CategoryInfo category = addCategory(manager, "0");
-      // add components
-      manager.commands_add(new ComponentAddCommand("0", "0", "0", true, "0", category));
-      manager.commands_add(new ComponentAddCommand("1", "1", "1", true, "1", category));
-      assertEquals("0", category.getEntries().get(0).getId());
-      assertEquals("1", category.getEntries().get(1).getId());
-      // move component
-      manager.commands_add(new EntryMoveCommand(category.getEntries().get(1),
-          category,
-          category.getEntries().get(0)));
-      assertEquals("1", category.getEntries().get(0).getId());
-      assertEquals("0", category.getEntries().get(1).getId());
-      // write
-      manager.commands_write();
-    }
-    // reload palette, but commands were written, so palette still in same state
-    {
-      manager.reloadPalette();
-      PaletteInfo palette = manager.getPalette();
-      CategoryInfo category = palette.getCategory("0");
-      // check
-      assertEquals("1", category.getEntries().get(0).getId());
-      assertEquals("0", category.getEntries().get(1).getId());
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Move
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_move_before() throws Exception {
+		PaletteManager manager = loadManager();
+		// use loaded palette
+		{
+			CategoryInfo category = addCategory(manager, "0");
+			// add components
+			manager.commands_add(new ComponentAddCommand("0", "0", "0", true, "0", category));
+			manager.commands_add(new ComponentAddCommand("1", "1", "1", true, "1", category));
+			assertEquals("0", category.getEntries().get(0).getId());
+			assertEquals("1", category.getEntries().get(1).getId());
+			// move component
+			manager.commands_add(new EntryMoveCommand(category.getEntries().get(1),
+					category,
+					category.getEntries().get(0)));
+			assertEquals("1", category.getEntries().get(0).getId());
+			assertEquals("0", category.getEntries().get(1).getId());
+			// write
+			manager.commands_write();
+		}
+		// reload palette, but commands were written, so palette still in same state
+		{
+			manager.reloadPalette();
+			PaletteInfo palette = manager.getPalette();
+			CategoryInfo category = palette.getCategory("0");
+			// check
+			assertEquals("1", category.getEntries().get(0).getId());
+			assertEquals("0", category.getEntries().get(1).getId());
+		}
+	}
 
-  public void test_move_last() throws Exception {
-    PaletteManager manager = loadManager();
-    // use loaded palette
-    {
-      CategoryInfo category = addCategory(manager, "0");
-      // add components
-      manager.commands_add(new ComponentAddCommand("0", "0", "0", true, "0", category));
-      manager.commands_add(new ComponentAddCommand("1", "1", "1", true, "1", category));
-      assertEquals("0", category.getEntries().get(0).getId());
-      assertEquals("1", category.getEntries().get(1).getId());
-      // move component
-      manager.commands_add(new EntryMoveCommand(category.getEntries().get(0), category, null));
-      assertEquals("1", category.getEntries().get(0).getId());
-      assertEquals("0", category.getEntries().get(1).getId());
-      // write
-      manager.commands_write();
-    }
-    // reload palette, but commands were written, so palette still in same state
-    {
-      manager.reloadPalette();
-      PaletteInfo palette = manager.getPalette();
-      CategoryInfo category = palette.getCategory("0");
-      // check
-      assertEquals("1", category.getEntries().get(0).getId());
-      assertEquals("0", category.getEntries().get(1).getId());
-    }
-  }
+	public void test_move_last() throws Exception {
+		PaletteManager manager = loadManager();
+		// use loaded palette
+		{
+			CategoryInfo category = addCategory(manager, "0");
+			// add components
+			manager.commands_add(new ComponentAddCommand("0", "0", "0", true, "0", category));
+			manager.commands_add(new ComponentAddCommand("1", "1", "1", true, "1", category));
+			assertEquals("0", category.getEntries().get(0).getId());
+			assertEquals("1", category.getEntries().get(1).getId());
+			// move component
+			manager.commands_add(new EntryMoveCommand(category.getEntries().get(0), category, null));
+			assertEquals("1", category.getEntries().get(0).getId());
+			assertEquals("0", category.getEntries().get(1).getId());
+			// write
+			manager.commands_write();
+		}
+		// reload palette, but commands were written, so palette still in same state
+		{
+			manager.reloadPalette();
+			PaletteInfo palette = manager.getPalette();
+			CategoryInfo category = palette.getCategory("0");
+			// check
+			assertEquals("1", category.getEntries().get(0).getId());
+			assertEquals("0", category.getEntries().get(1).getId());
+		}
+	}
 
-  public void test_move_noop() throws Exception {
-    PaletteManager manager = loadManager();
-    // use loaded palette
-    {
-      CategoryInfo category = addCategory(manager, "0");
-      // add components
-      manager.commands_add(new ComponentAddCommand("0", "0", "0", true, "0", category));
-      manager.commands_add(new ComponentAddCommand("1", "1", "1", true, "1", category));
-      assertEquals("0", category.getEntries().get(0).getId());
-      assertEquals("1", category.getEntries().get(1).getId());
-      // move component
-      manager.commands_add(new EntryMoveCommand(category.getEntries().get(1),
-          category,
-          category.getEntries().get(1)));
-      assertEquals("0", category.getEntries().get(0).getId());
-      assertEquals("1", category.getEntries().get(1).getId());
-      // write
-      manager.commands_write();
-    }
-    // reload palette, but commands were written, so palette still in same state
-    {
-      manager.reloadPalette();
-      PaletteInfo palette = manager.getPalette();
-      CategoryInfo category = palette.getCategory("0");
-      // check
-      assertEquals("0", category.getEntries().get(0).getId());
-      assertEquals("1", category.getEntries().get(1).getId());
-    }
-  }
+	public void test_move_noop() throws Exception {
+		PaletteManager manager = loadManager();
+		// use loaded palette
+		{
+			CategoryInfo category = addCategory(manager, "0");
+			// add components
+			manager.commands_add(new ComponentAddCommand("0", "0", "0", true, "0", category));
+			manager.commands_add(new ComponentAddCommand("1", "1", "1", true, "1", category));
+			assertEquals("0", category.getEntries().get(0).getId());
+			assertEquals("1", category.getEntries().get(1).getId());
+			// move component
+			manager.commands_add(new EntryMoveCommand(category.getEntries().get(1),
+					category,
+					category.getEntries().get(1)));
+			assertEquals("0", category.getEntries().get(0).getId());
+			assertEquals("1", category.getEntries().get(1).getId());
+			// write
+			manager.commands_write();
+		}
+		// reload palette, but commands were written, so palette still in same state
+		{
+			manager.reloadPalette();
+			PaletteInfo palette = manager.getPalette();
+			CategoryInfo category = palette.getCategory("0");
+			// check
+			assertEquals("0", category.getEntries().get(0).getId());
+			assertEquals("1", category.getEntries().get(1).getId());
+		}
+	}
 
-  /**
-   * Remove old "move" commands if same entry is moved several times.
-   */
-  @SuppressWarnings("unchecked")
-  public void test_move_twoTimes() throws Exception {
-    PaletteManager manager = loadManager();
-    List<Command> commands = (List<Command>) ReflectionUtils.getFieldObject(manager, "m_commands");
-    // use loaded palette
-    {
-      CategoryInfo category = addCategory(manager, "0");
-      // add components
-      manager.commands_add(new ComponentAddCommand("0", "0", "0", true, "0", category));
-      manager.commands_add(new ComponentAddCommand("1", "1", "1", true, "1", category));
-      assertEquals("0", category.getEntries().get(0).getId());
-      assertEquals("1", category.getEntries().get(1).getId());
-      // move component
-      assertEquals(3, commands.size());
-      manager.commands_add(new EntryMoveCommand(category.getEntries().get(1), category, null));
-      assertEquals(4, commands.size());
-      manager.commands_add(new EntryMoveCommand(category.getEntries().get(1), category, null));
-      assertEquals(4, commands.size()); // add new "move", remove old "move"
-      assertEquals("0", category.getEntries().get(0).getId());
-      assertEquals("1", category.getEntries().get(1).getId());
-      // write
-      manager.commands_write();
-    }
-    // reload palette, but commands were written, so palette still in same state
-    {
-      manager.reloadPalette();
-      PaletteInfo palette = manager.getPalette();
-      CategoryInfo category = palette.getCategory("0");
-      // check
-      assertEquals("0", category.getEntries().get(0).getId());
-      assertEquals("1", category.getEntries().get(1).getId());
-    }
-  }
+	/**
+	 * Remove old "move" commands if same entry is moved several times.
+	 */
+	@SuppressWarnings("unchecked")
+	public void test_move_twoTimes() throws Exception {
+		PaletteManager manager = loadManager();
+		List<Command> commands = (List<Command>) ReflectionUtils.getFieldObject(manager, "m_commands");
+		// use loaded palette
+		{
+			CategoryInfo category = addCategory(manager, "0");
+			// add components
+			manager.commands_add(new ComponentAddCommand("0", "0", "0", true, "0", category));
+			manager.commands_add(new ComponentAddCommand("1", "1", "1", true, "1", category));
+			assertEquals("0", category.getEntries().get(0).getId());
+			assertEquals("1", category.getEntries().get(1).getId());
+			// move component
+			assertEquals(3, commands.size());
+			manager.commands_add(new EntryMoveCommand(category.getEntries().get(1), category, null));
+			assertEquals(4, commands.size());
+			manager.commands_add(new EntryMoveCommand(category.getEntries().get(1), category, null));
+			assertEquals(4, commands.size()); // add new "move", remove old "move"
+			assertEquals("0", category.getEntries().get(0).getId());
+			assertEquals("1", category.getEntries().get(1).getId());
+			// write
+			manager.commands_write();
+		}
+		// reload palette, but commands were written, so palette still in same state
+		{
+			manager.reloadPalette();
+			PaletteInfo palette = manager.getPalette();
+			CategoryInfo category = palette.getCategory("0");
+			// check
+			assertEquals("0", category.getEntries().get(0).getId());
+			assertEquals("1", category.getEntries().get(1).getId());
+		}
+	}
 
-  /**
-   * Stop "move" optimization if entry used as target.
-   */
-  @SuppressWarnings("unchecked")
-  public void test_move_stopIfTarget() throws Exception {
-    PaletteManager manager = loadManager();
-    List<Command> commands = (List<Command>) ReflectionUtils.getFieldObject(manager, "m_commands");
-    // use loaded palette
-    {
-      CategoryInfo category = addCategory(manager, "0");
-      // add components
-      manager.commands_add(new ComponentAddCommand("0", "0", "0", true, "0", category));
-      manager.commands_add(new ComponentAddCommand("1", "1", "1", true, "1", category));
-      assertEquals("0", category.getEntries().get(0).getId());
-      assertEquals("1", category.getEntries().get(1).getId());
-      assertEquals(3, commands.size());
-      // step 1
-      {
-        manager.commands_add(new EntryMoveCommand(category.getEntries().get(0), category, null));
-        assertEquals(4, commands.size());
-        assertEquals("1", category.getEntries().get(0).getId());
-        assertEquals("0", category.getEntries().get(1).getId());
-      }
-      // step 2
-      {
-        manager.commands_add(new EntryMoveCommand(category.getEntries().get(0),
-            category,
-            category.getEntries().get(1)));
-        assertEquals(5, commands.size());
-        assertEquals("1", category.getEntries().get(0).getId());
-        assertEquals("0", category.getEntries().get(1).getId());
-      }
-      // step 3, no optimization
-      {
-        manager.commands_add(new EntryMoveCommand(category.getEntries().get(1), category, null));
-        assertEquals(6, commands.size());
-        assertEquals("1", category.getEntries().get(0).getId());
-        assertEquals("0", category.getEntries().get(1).getId());
-      }
-      // write
-      manager.commands_write();
-    }
-    // reload palette, but commands were written, so palette still in same state
-    {
-      manager.reloadPalette();
-      PaletteInfo palette = manager.getPalette();
-      CategoryInfo category = palette.getCategory("0");
-      // check
-      assertEquals("1", category.getEntries().get(0).getId());
-      assertEquals("0", category.getEntries().get(1).getId());
-    }
-  }
+	/**
+	 * Stop "move" optimization if entry used as target.
+	 */
+	@SuppressWarnings("unchecked")
+	public void test_move_stopIfTarget() throws Exception {
+		PaletteManager manager = loadManager();
+		List<Command> commands = (List<Command>) ReflectionUtils.getFieldObject(manager, "m_commands");
+		// use loaded palette
+		{
+			CategoryInfo category = addCategory(manager, "0");
+			// add components
+			manager.commands_add(new ComponentAddCommand("0", "0", "0", true, "0", category));
+			manager.commands_add(new ComponentAddCommand("1", "1", "1", true, "1", category));
+			assertEquals("0", category.getEntries().get(0).getId());
+			assertEquals("1", category.getEntries().get(1).getId());
+			assertEquals(3, commands.size());
+			// step 1
+			{
+				manager.commands_add(new EntryMoveCommand(category.getEntries().get(0), category, null));
+				assertEquals(4, commands.size());
+				assertEquals("1", category.getEntries().get(0).getId());
+				assertEquals("0", category.getEntries().get(1).getId());
+			}
+			// step 2
+			{
+				manager.commands_add(new EntryMoveCommand(category.getEntries().get(0),
+						category,
+						category.getEntries().get(1)));
+				assertEquals(5, commands.size());
+				assertEquals("1", category.getEntries().get(0).getId());
+				assertEquals("0", category.getEntries().get(1).getId());
+			}
+			// step 3, no optimization
+			{
+				manager.commands_add(new EntryMoveCommand(category.getEntries().get(1), category, null));
+				assertEquals(6, commands.size());
+				assertEquals("1", category.getEntries().get(0).getId());
+				assertEquals("0", category.getEntries().get(1).getId());
+			}
+			// write
+			manager.commands_write();
+		}
+		// reload palette, but commands were written, so palette still in same state
+		{
+			manager.reloadPalette();
+			PaletteInfo palette = manager.getPalette();
+			CategoryInfo category = palette.getCategory("0");
+			// check
+			assertEquals("1", category.getEntries().get(0).getId());
+			assertEquals("0", category.getEntries().get(1).getId());
+		}
+	}
 
-  public void test_move_noSource() throws Exception {
-    PaletteManager manager = loadManager();
-    // use loaded palette
-    {
-      CategoryInfo category = addCategory(manager, "0");
-      // add components
-      manager.commands_add(new ComponentAddCommand("0", "0", "0", true, "0", category));
-      manager.commands_add(new ComponentAddCommand("1", "1", "1", true, "1", category));
-      assertEquals("0", category.getEntries().get(0).getId());
-      assertEquals("1", category.getEntries().get(1).getId());
-      // move component
-      {
-        EntryMoveCommand moveCommand =
-            new EntryMoveCommand(category.getEntries().get(1), category, null);
-        ReflectionUtils.setField(moveCommand, "m_id", "no-such-entry");
-        manager.commands_add(moveCommand);
-      }
-      assertEquals("0", category.getEntries().get(0).getId());
-      assertEquals("1", category.getEntries().get(1).getId());
-      // write
-      manager.commands_write();
-    }
-    // reload palette, but commands were written, so palette still in same state
-    {
-      manager.reloadPalette();
-      PaletteInfo palette = manager.getPalette();
-      CategoryInfo category = palette.getCategory("0");
-      // check
-      assertEquals("0", category.getEntries().get(0).getId());
-      assertEquals("1", category.getEntries().get(1).getId());
-    }
-  }
+	public void test_move_noSource() throws Exception {
+		PaletteManager manager = loadManager();
+		// use loaded palette
+		{
+			CategoryInfo category = addCategory(manager, "0");
+			// add components
+			manager.commands_add(new ComponentAddCommand("0", "0", "0", true, "0", category));
+			manager.commands_add(new ComponentAddCommand("1", "1", "1", true, "1", category));
+			assertEquals("0", category.getEntries().get(0).getId());
+			assertEquals("1", category.getEntries().get(1).getId());
+			// move component
+			{
+				EntryMoveCommand moveCommand =
+						new EntryMoveCommand(category.getEntries().get(1), category, null);
+				ReflectionUtils.setField(moveCommand, "m_id", "no-such-entry");
+				manager.commands_add(moveCommand);
+			}
+			assertEquals("0", category.getEntries().get(0).getId());
+			assertEquals("1", category.getEntries().get(1).getId());
+			// write
+			manager.commands_write();
+		}
+		// reload palette, but commands were written, so palette still in same state
+		{
+			manager.reloadPalette();
+			PaletteInfo palette = manager.getPalette();
+			CategoryInfo category = palette.getCategory("0");
+			// check
+			assertEquals("0", category.getEntries().get(0).getId());
+			assertEquals("1", category.getEntries().get(1).getId());
+		}
+	}
 
-  public void test_move_noTargetCategory() throws Exception {
-    PaletteManager manager = loadManager();
-    // use loaded palette
-    {
-      CategoryInfo category = addCategory(manager, "0");
-      // add components
-      manager.commands_add(new ComponentAddCommand("0", "0", "0", true, "0", category));
-      manager.commands_add(new ComponentAddCommand("1", "1", "1", true, "1", category));
-      assertEquals("0", category.getEntries().get(0).getId());
-      assertEquals("1", category.getEntries().get(1).getId());
-      // move component
-      {
-        EntryMoveCommand moveCommand =
-            new EntryMoveCommand(category.getEntries().get(1), category, null);
-        ReflectionUtils.setField(moveCommand, "m_categoryId", "no-such-category");
-        manager.commands_add(moveCommand);
-      }
-      assertEquals("0", category.getEntries().get(0).getId());
-      assertEquals("1", category.getEntries().get(1).getId());
-      // write
-      manager.commands_write();
-    }
-    // reload palette, but commands were written, so palette still in same state
-    {
-      manager.reloadPalette();
-      PaletteInfo palette = manager.getPalette();
-      CategoryInfo category = palette.getCategory("0");
-      // check
-      assertEquals("0", category.getEntries().get(0).getId());
-      assertEquals("1", category.getEntries().get(1).getId());
-    }
-  }
+	public void test_move_noTargetCategory() throws Exception {
+		PaletteManager manager = loadManager();
+		// use loaded palette
+		{
+			CategoryInfo category = addCategory(manager, "0");
+			// add components
+			manager.commands_add(new ComponentAddCommand("0", "0", "0", true, "0", category));
+			manager.commands_add(new ComponentAddCommand("1", "1", "1", true, "1", category));
+			assertEquals("0", category.getEntries().get(0).getId());
+			assertEquals("1", category.getEntries().get(1).getId());
+			// move component
+			{
+				EntryMoveCommand moveCommand =
+						new EntryMoveCommand(category.getEntries().get(1), category, null);
+				ReflectionUtils.setField(moveCommand, "m_categoryId", "no-such-category");
+				manager.commands_add(moveCommand);
+			}
+			assertEquals("0", category.getEntries().get(0).getId());
+			assertEquals("1", category.getEntries().get(1).getId());
+			// write
+			manager.commands_write();
+		}
+		// reload palette, but commands were written, so palette still in same state
+		{
+			manager.reloadPalette();
+			PaletteInfo palette = manager.getPalette();
+			CategoryInfo category = palette.getCategory("0");
+			// check
+			assertEquals("0", category.getEntries().get(0).getId());
+			assertEquals("1", category.getEntries().get(1).getId());
+		}
+	}
 
-  public void test_move_otherCategory() throws Exception {
-    PaletteManager manager = loadManager();
-    // use loaded palette
-    {
-      CategoryInfo category_0 = addCategory(manager, "0");
-      CategoryInfo category_1 = addCategory(manager, "1");
-      // add components
-      manager.commands_add(new ComponentAddCommand("0", "0", "0", true, "0", category_0));
-      manager.commands_add(new ComponentAddCommand("1", "1", "1", true, "1", category_1));
-      assertEquals("0", category_0.getEntries().get(0).getId());
-      assertEquals("1", category_1.getEntries().get(0).getId());
-      // move component
-      manager.commands_add(new EntryMoveCommand(category_1.getEntries().get(0), category_0, null));
-      assertEquals("0", category_0.getEntries().get(0).getId());
-      assertEquals("1", category_0.getEntries().get(1).getId());
-      // write
-      manager.commands_write();
-    }
-    // reload palette, but commands were written, so palette still in same state
-    {
-      manager.reloadPalette();
-      PaletteInfo palette = manager.getPalette();
-      CategoryInfo category = palette.getCategory("0");
-      assertNotNull(palette.getCategory("1"));
-      // check
-      assertEquals("0", category.getEntries().get(0).getId());
-      assertEquals("1", category.getEntries().get(1).getId());
-    }
-  }
+	public void test_move_otherCategory() throws Exception {
+		PaletteManager manager = loadManager();
+		// use loaded palette
+		{
+			CategoryInfo category_0 = addCategory(manager, "0");
+			CategoryInfo category_1 = addCategory(manager, "1");
+			// add components
+			manager.commands_add(new ComponentAddCommand("0", "0", "0", true, "0", category_0));
+			manager.commands_add(new ComponentAddCommand("1", "1", "1", true, "1", category_1));
+			assertEquals("0", category_0.getEntries().get(0).getId());
+			assertEquals("1", category_1.getEntries().get(0).getId());
+			// move component
+			manager.commands_add(new EntryMoveCommand(category_1.getEntries().get(0), category_0, null));
+			assertEquals("0", category_0.getEntries().get(0).getId());
+			assertEquals("1", category_0.getEntries().get(1).getId());
+			// write
+			manager.commands_write();
+		}
+		// reload palette, but commands were written, so palette still in same state
+		{
+			manager.reloadPalette();
+			PaletteInfo palette = manager.getPalette();
+			CategoryInfo category = palette.getCategory("0");
+			assertNotNull(palette.getCategory("1"));
+			// check
+			assertEquals("0", category.getEntries().get(0).getId());
+			assertEquals("1", category.getEntries().get(1).getId());
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Remove
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_remove() throws Exception {
-    PaletteManager manager = loadManager();
-    // use loaded palette
-    {
-      CategoryInfo category = addCategory(manager, "0");
-      // add component
-      manager.commands_add(new ComponentAddCommand("0", "0", "0", true, "0", category));
-      assertEquals(1, category.getEntries().size());
-      // remove component
-      manager.commands_add(new EntryRemoveCommand(category.getEntries().get(0)));
-      assertEquals(0, category.getEntries().size());
-      // write
-      manager.commands_write();
-    }
-    // reload palette, but commands were written, so palette still in same state
-    {
-      manager.reloadPalette();
-      PaletteInfo palette = manager.getPalette();
-      // check
-      assertNull(palette.getEntry("0"));
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Remove
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_remove() throws Exception {
+		PaletteManager manager = loadManager();
+		// use loaded palette
+		{
+			CategoryInfo category = addCategory(manager, "0");
+			// add component
+			manager.commands_add(new ComponentAddCommand("0", "0", "0", true, "0", category));
+			assertEquals(1, category.getEntries().size());
+			// remove component
+			manager.commands_add(new EntryRemoveCommand(category.getEntries().get(0)));
+			assertEquals(0, category.getEntries().size());
+			// write
+			manager.commands_write();
+		}
+		// reload palette, but commands were written, so palette still in same state
+		{
+			manager.reloadPalette();
+			PaletteInfo palette = manager.getPalette();
+			// check
+			assertNull(palette.getEntry("0"));
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Visibility
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_visibility() throws Exception {
-    PaletteManager manager = loadManager();
-    // use loaded palette
-    {
-      CategoryInfo category = addCategory(manager, "0");
-      // add component
-      manager.commands_add(new ComponentAddCommand("1", "1", "1", true, "1", category));
-      EntryInfo entry = category.getEntries().get(0);
-      assertTrue(entry.isVisible());
-      // set invisible
-      manager.commands_add(new ElementVisibilityCommand(entry, false));
-      assertFalse(entry.isVisible());
-      // write
-      manager.commands_write();
-    }
-    // reload palette, but commands were written, so palette still in same state
-    {
-      manager.reloadPalette();
-      PaletteInfo palette = manager.getPalette();
-      assertFalse(palette.getEntry("1").isVisible());
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Visibility
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_visibility() throws Exception {
+		PaletteManager manager = loadManager();
+		// use loaded palette
+		{
+			CategoryInfo category = addCategory(manager, "0");
+			// add component
+			manager.commands_add(new ComponentAddCommand("1", "1", "1", true, "1", category));
+			EntryInfo entry = category.getEntries().get(0);
+			assertTrue(entry.isVisible());
+			// set invisible
+			manager.commands_add(new ElementVisibilityCommand(entry, false));
+			assertFalse(entry.isVisible());
+			// write
+			manager.commands_write();
+		}
+		// reload palette, but commands were written, so palette still in same state
+		{
+			manager.reloadPalette();
+			PaletteInfo palette = manager.getPalette();
+			assertFalse(palette.getEntry("1").isVisible());
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the new {@link CategoryInfo} with given "id", added using {@link CategoryAddCommand}.
-   */
-  private static CategoryInfo addCategory(PaletteManager manager, String id) {
-    PaletteInfo palette = manager.getPalette();
-    manager.commands_add(new CategoryAddCommand(id, "0", "0", true, true, null));
-    return palette.getCategory(id);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the new {@link CategoryInfo} with given "id", added using {@link CategoryAddCommand}.
+	 */
+	private static CategoryInfo addCategory(PaletteManager manager, String id) {
+		PaletteInfo palette = manager.getPalette();
+		manager.commands_add(new CategoryAddCommand(id, "0", "0", true, true, null));
+		return palette.getCategory(id);
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/ComponentEntryInfoTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/ComponentEntryInfoTest.java
index 186f7a4ce..7cee7e8f7 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/ComponentEntryInfoTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/ComponentEntryInfoTest.java
@@ -55,873 +55,873 @@
  * @author scheglov_ke
  */
 public class ComponentEntryInfoTest extends AbstractPaletteTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Life cycle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void test_tearDown() throws Exception {
-    super.test_tearDown();
-    waitEventLoop(0);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Check for {@link ComponentEntryInfo} access methods.
-   */
-  public void test_access() throws Exception {
-    ComponentEntryInfo componentEntry = new ComponentEntryInfo();
-    componentEntry.setComponentClassName("org.eclipse.swt.widgets.Button");
-    // toString()
-    assertEquals("Component(class='org.eclipse.swt.widgets.Button')", componentEntry.toString());
-    // get/setComponentClassName
-    assertEquals("org.eclipse.swt.widgets.Button", componentEntry.getClassName());
-    componentEntry.setComponentClassName("org.eclipse.swt.widgets.Button");
-    assertEquals("org.eclipse.swt.widgets.Button", componentEntry.getClassName());
-    // get/setCreationId
-    assertNull(componentEntry.getCreationId());
-    componentEntry.setCreationId("my creation id");
-    assertEquals("my creation id", componentEntry.getCreationId());
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parse
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Only "class" specified in extension, so other things are deduced.
-   */
-  public void test_parse_onlyClass() throws Exception {
-    addPaletteExtension(new String[]{
-        "<category id='category_1' name='category 1'>",
-        "  <component class='org.eclipse.swt.widgets.Button'/>",
-        "</category>"});
-    PaletteInfo palette = loadPalette();
-    // prepare category/entry
-    CategoryInfo category = palette.getCategory("category_1");
-    ComponentEntryInfo entry = (ComponentEntryInfo) category.getEntries().get(0);
-    // check entry
-    {
-      assertSame(category, entry.getCategory());
-      assertEquals("category_1 org.eclipse.swt.widgets.Button", entry.getId());
-      assertEquals("org.eclipse.swt.widgets.Button", entry.getClassName());
-      assertNull(entry.getCreationId());
-      assertNull(entry.getDescription());
-      // before initialize
-      assertEquals("org.eclipse.swt.widgets.Button", entry.getName());
-      assertSame(ComponentEntryInfo.DEFAULT_ICON, entry.getIcon());
-      // initialize and check rest values
-      assertTrue(entry.initialize(null, m_lastObject));
-      assertEquals("Button", entry.getName());
-      assertNotNull(entry.getIcon());
-      // toString()
-      assertEquals("Component(class='org.eclipse.swt.widgets.Button')", entry.toString());
-    }
-  }
-
-  /**
-   * "id", "name", "description" and "icon" specified in extension.
-   */
-  public void test_parse_valuesFromExtension() throws Exception {
-    addPaletteExtension(new String[]{
-        "<category id='category_1' name='category 1'>",
-        "  <component class='org.eclipse.swt.widgets.Button' creationId='creation id' id='my id' name='my name' description='my description' icon='icons/true.gif' visible='false'/>",
-        "</category>"});
-    PaletteInfo palette = loadPalette();
-    // prepare category/entry
-    CategoryInfo category = palette.getCategory("category_1");
-    ComponentEntryInfo entry = (ComponentEntryInfo) category.getEntries().get(0);
-    // check entry
-    assertSame(category, entry.getCategory());
-    assertEquals("my id", entry.getId());
-    assertEquals("org.eclipse.swt.widgets.Button", entry.getClassName());
-    assertEquals("creation id", entry.getCreationId());
-    assertEquals("my description", entry.getDescription());
-    assertEquals("my name", entry.getName());
-    // we have icon in palette entry, so it is not "null"
-    {
-      Image icon = entry.getIcon();
-      assertNotNull(icon);
-      assertEquals(16, icon.getBounds().width);
-      assertEquals(16, icon.getBounds().height);
-    }
-    assertFalse(entry.isVisible());
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Description attribute
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * If "description" text is empty, then description from {@link ComponentDescription} should be
-   * used.
-   */
-  public void test_parse_descriptionText_emptyString() throws Exception {
-    assertDescriptionText_fromComponentDescription("");
-  }
-
-  /**
-   * If "description" text is empty, then description from {@link ComponentDescription} should be
-   * used.
-   */
-  public void test_parse_descriptionText_spacesString() throws Exception {
-    assertDescriptionText_fromComponentDescription(" \t");
-  }
-
-  /**
-   * If "description" text is exactly name of class (we generate such description when user adds
-   * component using UI), then description from {@link ComponentDescription} should be used.
-   */
-  public void test_parse_descriptionText_className() throws Exception {
-    assertDescriptionText_fromComponentDescription("org.eclipse.swt.widgets.Button");
-  }
-
-  private void assertDescriptionText_fromComponentDescription(String descriptionAttribute)
-      throws Exception {
-    addPaletteExtension(new String[]{
-        "<category id='category_1' name='category 1'>",
-        "  <component class='org.eclipse.swt.widgets.Button' description='"
-            + descriptionAttribute
-            + "'/>",
-        "</category>"});
-    PaletteInfo palette = loadPalette();
-    // prepare category/entry
-    CategoryInfo category = palette.getCategory("category_1");
-    ComponentEntryInfo entry = (ComponentEntryInfo) category.getEntries().get(0);
-    // initialize and check values
-    assertTrue(entry.initialize(null, m_lastObject));
-    assertEquals("Instances of this class represent a selectable user interface object that"
-        + " issues notification when pressed and released.", entry.getDescription());
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Initialize
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Standard {@link Button}, description and icon from {@link ComponentDescription}.
-   */
-  public void test_initialize_1_allDefaults() throws Exception {
-    addPaletteExtension(new String[]{
-        "<category id='category_1' name='category 1'>",
-        "  <component class='org.eclipse.swt.widgets.Button'/>",
-        "</category>"});
-    PaletteInfo palette = loadPalette();
-    // prepare component
-    CategoryInfo category = palette.getCategory("category_1");
-    ComponentEntryInfo entry = (ComponentEntryInfo) category.getEntries().get(0);
-    assertNull(entry.getDescription());
-    // do initialize
-    assertTrue(entry.initialize(null, m_lastObject));
-    // check that after initialize description/icon from CreationDescription is provided
-    {
-      ComponentDescription componentDescription =
-          ComponentDescriptionHelper.getDescription(m_lastContext, Button.class);
-      CreationDescription creation = componentDescription.getCreation(null);
-      assertEquals(creation.getDescription(), entry.getDescription());
-      assertTrue("Same icons.", UiUtils.equals(creation.getIcon(), entry.getIcon()));
-    }
-  }
-
-  /**
-   * Bad component class, failed to initialize.
-   */
-  public void test_initialize_badComponentClass() throws Exception {
-    XmlObjectInfo panel = parseEmptyPanel();
-    assertEquals(0, m_lastContext.getWarnings().size());
-    //
-    addPaletteExtension(new String[]{
-        "<category id='category_1' name='category 1'>",
-        "  <component class='no.such.Component'/>",
-        "</category>"});
-    PaletteInfo palette = loadPalette(panel);
-    // prepare component
-    CategoryInfo category = palette.getCategory("category_1");
-    ComponentEntryInfo componentEntry = (ComponentEntryInfo) category.getEntries().get(0);
-    // no presentation
-    assertEquals("no.such.Component", componentEntry.getName());
-    assertSame(ComponentEntryInfo.DEFAULT_ICON, componentEntry.getIcon());
-    // do initialize, failed
-    assertFalse(componentEntry.initialize(null, panel));
-    // no warnings
-    assertThat(m_lastContext.getWarnings()).isEmpty();
-  }
-
-  /**
-   * Bad component description, failed to initialize.
-   */
-  public void test_initialize_badComponentDescription() throws Exception {
-    prepareMyComponent(new String[]{});
-    setFileContentSrc("test/MyComponent.wbp-component.xml", "something bad");
-    waitForAutoBuild();
-    // parse
-    XmlObjectInfo panel = parseEmptyPanel();
-    assertEquals(0, m_lastContext.getWarnings().size());
-    //
-    addPaletteExtension(new String[]{
-        "<category id='category_1' name='category 1'>",
-        "  <component class='test.MyComponent'/>",
-        "</category>"});
-    PaletteInfo palette = loadPalette(panel);
-    // prepare component
-    CategoryInfo category = palette.getCategory("category_1");
-    ComponentEntryInfo componentEntry = (ComponentEntryInfo) category.getEntries().get(0);
-    // do initialize, we have warning, because we still load description (as slow) and it is invalid
-    assertFalse(componentEntry.initialize(null, panel));
-    assertThat(m_lastContext.getWarnings()).hasSize(1);
-  }
-
-  /**
-   * Object without description.
-   */
-  public void test_initialize_noDescription() throws Exception {
-    addPaletteExtension(new String[]{
-        "<category id='category_1' name='category 1'>",
-        "  <component class='java.lang.String'/>",
-        "</category>"});
-    XmlObjectInfo panel = parseEmptyPanel();
-    PaletteInfo palette = loadPalette(panel);
-    // prepare component
-    CategoryInfo category = palette.getCategory("category_1");
-    ComponentEntryInfo componentEntry = (ComponentEntryInfo) category.getEntries().get(0);
-    assertNull(componentEntry.getDescription());
-    // do initialize
-    assertTrue(componentEntry.initialize(null, panel));
-    // when no "real" description, component class name is used
-    assertEquals("java.lang.String", componentEntry.getDescription());
-  }
-
-  /**
-   * Several "creation" sections.
-   */
-  public void test_initialize_severalCreations() throws Exception {
-    prepareMyComponent(new String[]{
-        "  public MyComponent(Composite parent, int style, boolean value) {",
-        "    super(parent, style);",
-        "  }"}, new String[]{
-        "  <creation id='true'>",
-        "    <source/>",
-        "    <x-attribute name='value' value='true'/>",
-        "  </creation>",
-        "  <creation id='false'>",
-        "    <source/>",
-        "    <x-attribute name='value' value='false'/>",
-        "  </creation>"});
-    waitForAutoBuild();
-    // parse
-    XmlObjectInfo panel = parseEmptyPanel();
-    PaletteManager manager = new PaletteManager(panel, TOOLKIT_ID);
-    // load palette
-    addPaletteExtension(new String[]{
-        "<category id='category_1' name='category 1'>",
-        "  <component class='test.MyComponent' creationId='false'/>",
-        "</category>"});
-    manager.reloadPalette();
-    PaletteInfo palette = manager.getPalette();
-    // prepare component
-    CategoryInfo category = palette.getCategory("category_1");
-    ComponentEntryInfo componentEntry = (ComponentEntryInfo) category.getEntries().get(0);
-    // check component
-    assertTrue(componentEntry.initialize(null, panel));
-    assertTrue(componentEntry.isEnabled());
-    assertEquals("test.MyComponent", componentEntry.getClassName());
-    assertEquals("category_1 test.MyComponent false", componentEntry.getId());
-    // check tool
-    {
-      CreationTool creationTool = (CreationTool) componentEntry.createTool();
-      ICreationFactory creationFactory = creationTool.getFactory();
-      creationFactory.activate();
-      // check new object
-      XmlObjectInfo newObject = (XmlObjectInfo) creationFactory.getNewObject();
-      {
-        DocumentElement newElement = getNewCreationElement(newObject);
-        assertEquals("false", newElement.getAttribute("value"));
-      }
-    }
-  }
-
-  /**
-   * No "creation" with requested "id", and also no "description", so no "fast" presentation.
-   */
-  public void test_initialize_noSuchCreation() throws Exception {
-    prepareMyComponent();
-    waitForAutoBuild();
-    // parse
-    XmlObjectInfo panel = parseEmptyPanel();
-    PaletteManager manager = new PaletteManager(panel, TOOLKIT_ID);
-    // load palette
-    addPaletteExtension(new String[]{
-        "<category id='category_1' name='category 1'>",
-        "  <component class='test.MyComponent' creationId='noSuchCreation'/>",
-        "</category>"});
-    manager.reloadPalette();
-    PaletteInfo palette = manager.getPalette();
-    // prepare component
-    CategoryInfo category = palette.getCategory("category_1");
-    ComponentEntryInfo componentEntry = (ComponentEntryInfo) category.getEntries().get(0);
-    // check component
-    assertThat(m_lastContext.getWarnings()).hasSize(0);
-    assertFalse(componentEntry.initialize(null, panel));
-    assertThat(m_lastContext.getWarnings()).hasSize(1);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Enabled
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test that "enabled" script can be used to disable.
-   */
-  public void test_isEnabled_enabledScript() throws Exception {
-    addPaletteExtension(new String[]{
-        "<category id='category_1' name='category 1'>",
-        "  <component class='org.eclipse.swt.widgets.Button' name='my name' enabled='1 == 2'/>",
-        "</category>"});
-    PaletteInfo palette = loadPalette();
-    // prepare category/entry
-    CategoryInfo category = palette.getCategory("category_1");
-    ComponentEntryInfo entry = (ComponentEntryInfo) category.getEntries().get(0);
-    // check entry
-    assertSame(category, entry.getCategory());
-    assertEquals("org.eclipse.swt.widgets.Button", entry.getClassName());
-    assertEquals("my name", entry.getName());
-    // initialize
-    assertTrue(entry.initialize(null, m_lastObject));
-    // disabled
-    assertFalse(entry.isEnabled());
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tool
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_createTool() throws Exception {
-    addPaletteExtension(new String[]{
-        "<category id='category_1' name='category 1'>",
-        "  <component class='org.eclipse.swt.widgets.Button'/>",
-        "</category>"});
-    PaletteInfo palette = loadPalette();
-    // prepare component
-    CategoryInfo category = palette.getCategory("category_1");
-    ComponentEntryInfo componentEntry = (ComponentEntryInfo) category.getEntries().get(0);
-    // do initialize
-    assertTrue(componentEntry.initialize(null, m_lastObject));
-    // check tool
-    CreationTool creationTool = (CreationTool) componentEntry.createTool();
-    ICreationFactory creationFactory = creationTool.getFactory();
-    creationFactory.activate();
-    // check new object
-    XmlObjectInfo object = (XmlObjectInfo) creationFactory.getNewObject();
-    assertInstanceOf(ControlInfo.class, object);
-    assertInstanceOf(ElementCreationSupport.class, object.getCreationSupport());
-    assertSame(Boolean.TRUE, object.getArbitraryValue(XmlObjectInfo.FLAG_MANUAL_COMPONENT));
-    // activate again, new object should be created
-    {
-      creationFactory.activate();
-      assertNotSame(object, creationFactory.getNewObject());
-    }
-  }
-
-  /**
-   * We should not allow to drop abstract components.
-   */
-  public void test_createTool_abstractClass() throws Exception {
-    setFileContentSrc(
-        "test/MyAbstractComponent.java",
-        getJavaSource(
-            "public abstract class MyAbstractComponent extends Composite {",
-            "  public MyAbstractComponent(Composite parent, int style) {",
-            "    super(parent, style);",
-            "  }",
-            "}"));
-    waitForAutoBuild();
-    // prepare palette
-    addPaletteExtension(new String[]{
-        "<category id='category_1' name='category 1'>",
-        "  <component class='test.MyAbstractComponent'/>",
-        "</category>"});
-    PaletteInfo palette = loadPalette();
-    // prepare component
-    final CategoryInfo category = palette.getCategory("category_1");
-    final ComponentEntryInfo componentEntry = (ComponentEntryInfo) category.getEntries().get(0);
-    // set palette site
-    IPaletteSite.Helper.setSite(m_lastObject, new IPaletteSite.Empty() {
-      @Override
-      public Shell getShell() {
-        return DesignerPlugin.getShell();
-      }
-    });
-    // do initialize
-    assertTrue(componentEntry.initialize(null, m_lastObject));
-    // create tool
-    new UiContext().executeAndCheck(new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        CreationTool creationTool = (CreationTool) componentEntry.createTool();
-        assertNull(creationTool);
-      }
-    }, new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        context.useShell("Error");
-        context.clickButton("OK");
-      }
-    });
-  }
-
-  /**
-   * Simulate case when component was initialized, but at loading {@link ComponentDescription} some
-   * problem happened.
-   */
-  public void test_createTool_badClass() throws Exception {
-    addPaletteExtension(new String[]{
-        "<category id='category_1' name='category 1'>",
-        "  <component class='no.such.Class'/>",
-        "</category>"});
-    PaletteInfo palette = loadPalette();
-    // prepare component
-    CategoryInfo category = palette.getCategory("category_1");
-    ComponentEntryInfo componentEntry = (ComponentEntryInfo) category.getEntries().get(0);
-    // do initialize
-    m_lastObject.putArbitraryValue(ComponentEntryInfo.KEY_SIMULATE_PRESENTATION, true);
-    assertTrue(componentEntry.initialize(null, m_lastObject));
-    // create tool
-    assertThat(m_lastContext.getWarnings()).hasSize(0);
-    CreationTool creationTool = (CreationTool) componentEntry.createTool();
-    assertNull(creationTool);
-    assertThat(m_lastContext.getWarnings()).hasSize(1);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Library
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * When component has "library" tag, this library should be added to classpath.
-   */
-  public void test_createTool_withLibrary() throws Exception {
-    TestBundle testBundle = new TestBundle();
-    try {
-      String className = ClassForBundle.class.getName();
-      testBundle.addJar("myClasses.jar").addClass(ClassForBundle.class).close();
-      testBundle.addJar("myClasses.zip").add(className.replace('.', '/') + ".java", "src").close();
-      testBundle.addExtension("org.eclipse.wb.core.toolkits", new String[]{
-          "<toolkit id='org.eclipse.wb.rcp'>",
-          "  <classLoader-library bundle='" + testBundle.getId() + "' jar='myClasses.jar'/>",
-          "</toolkit>"});
-      testBundle.install();
-      try {
-        addPaletteExtension(new String[]{
-            "<category id='category_1' name='category 1'>",
-            "  <component class='" + className + "'>",
-            "    <library type='"
-                + className
-                + "'"
-                + " bundle='"
-                + testBundle.getId()
-                + "'"
-                + " jar='myClasses.jar' src='myClasses.zip'/>",
-            "  </component>",
-            "</category>"});
-        XmlObjectInfo panel = parseEmptyPanel();
-        PaletteInfo palette = loadPalette(panel);
-        // initially to layout type in project
-        assertNull(m_lastContext.getJavaProject().findType(className));
-        // prepare component
-        CategoryInfo category = palette.getCategory("category_1");
-        ComponentEntryInfo componentEntry = (ComponentEntryInfo) category.getEntries().get(0);
-        // do initialize
-        assertTrue(componentEntry.initialize(null, panel));
-        // create tool
-        ICreationFactory creationFactory;
-        {
-          CreationTool creationTool = (CreationTool) componentEntry.createTool();
-          creationFactory = creationTool.getFactory();
-          creationFactory.activate();
-        }
-        // check new object
-        XmlObjectInfo newComponent = (XmlObjectInfo) creationFactory.getNewObject();
-        assertEquals(className, newComponent.getDescription().getComponentClass().getName());
-        // now ClassForBundle type should be in project
-        assertNotNull(m_lastContext.getJavaProject().findType(className));
-      } finally {
-        testBundle.uninstall();
-        waitEventLoop(0);
-      }
-    } finally {
-      testBundle.dispose();
-      // dispose project
-      m_lastObject.refresh_dispose();
-      do_projectDispose();
-    }
-  }
-
-  /**
-   * Two "library" tags.
-   */
-  public void test_createTool_withLibrary2() throws Exception {
-    TestBundle testBundle = new TestBundle();
-    try {
-      String className = ClassForBundle.class.getName();
-      String className2 = ClassForBundle2.class.getName();
-      testBundle.addJar("myClasses.jar").addClass(ClassForBundle.class).close();
-      testBundle.addJar("myClasses.zip").add(className.replace('.', '/') + ".java", "src").close();
-      testBundle.addJar("myClasses2.jar").addClass(ClassForBundle2.class).close();
-      testBundle.addJar("myClasses2.zip").add(className2.replace('.', '/') + ".java", "src").close();
-      testBundle.addExtension("org.eclipse.wb.core.toolkits", new String[]{
-          "<toolkit id='org.eclipse.wb.rcp'>",
-          "  <classLoader-library bundle='" + testBundle.getId() + "' jar='myClasses.jar'/>",
-          "  <classLoader-library bundle='" + testBundle.getId() + "' jar='myClasses2.jar'/>",
-          "</toolkit>"});
-      testBundle.install();
-      try {
-        addPaletteExtension(new String[]{
-            "<category id='category_1' name='category 1'>",
-            "  <component class='" + className2 + "'>",
-            "    <library type='"
-                + className
-                + "'"
-                + " bundle='"
-                + testBundle.getId()
-                + "'"
-                + " jar='myClasses.jar' src='myClasses.zip'/>",
-            "    <library type='"
-                + className2
-                + "'"
-                + " bundle='"
-                + testBundle.getId()
-                + "'"
-                + " jar='myClasses2.jar' src='myClasses2.zip'/>",
-            "  </component>",
-            "</category>"});
-        XmlObjectInfo panel = parseEmptyPanel();
-        PaletteInfo palette = loadPalette(panel);
-        // initially to layout type in project
-        assertNull(m_lastContext.getJavaProject().findType(className));
-        // prepare component
-        CategoryInfo category = palette.getCategory("category_1");
-        ComponentEntryInfo componentEntry = (ComponentEntryInfo) category.getEntries().get(0);
-        // do initialize
-        assertTrue(componentEntry.initialize(null, panel));
-        // create tool
-        ICreationFactory creationFactory;
-        {
-          CreationTool creationTool = (CreationTool) componentEntry.createTool();
-          creationFactory = creationTool.getFactory();
-          creationFactory.activate();
-        }
-        // check new object
-        XmlObjectInfo newComponent = (XmlObjectInfo) creationFactory.getNewObject();
-        assertEquals(className2, newComponent.getDescription().getComponentClass().getName());
-        // now ClassForBundle/ClassForBundle2 types should be in project
-        assertNotNull(m_lastContext.getJavaProject().findType(className2));
-        assertNotNull(m_lastContext.getJavaProject().findType(className));
-      } finally {
-        testBundle.uninstall();
-        waitEventLoop(0);
-      }
-    } finally {
-      testBundle.dispose();
-      // dispose project
-      m_lastObject.refresh_dispose();
-      do_projectDispose();
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // hasClass()
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * No special "component" rule.
-   */
-  public void test_hasClass_noSpecialRule() throws Exception {
-    // prepare MyComponent
-    prepareMyComponent();
-    // load palette
-    addPaletteExtension(new String[]{
-        "<category id='category_1' name='category 1'>",
-        "  <component id='t' class='test.MyComponent'/>",
-        "</category>"});
-    ComponentEntryInfo entry = loadSingleComponent("t");
-    assertHasClass(entry, true);
-  }
-
-  /**
-   * If component is in known package of some standard (or supported) library, we can avoid loading
-   * all classes and just check that this library exists, by loading only one "witness" class.
-   * <p>
-   * Here "witness" class exists, so we don't even check class itself.
-   */
-  public void test_hasClass_useWitness_true() throws Exception {
-    TestBundle testBundle = new TestBundle();
-    try {
-      testBundle.addExtension(
-          "org.eclipse.wb.core.paletteComponentExists",
-          new String[]{"<component package='test.' witness='test2.Witness'/>"});
-      testBundle.install(true);
-      // prepare Witness
-      setFileContentSrc(
-          "test2/Witness.java",
-          getSource(
-              "// filler filler filler filler filler",
-              "// filler filler filler filler filler",
-              "// filler filler filler filler filler",
-              "package test2;",
-              "public class Witness {",
-              "}"));
-      waitForAutoBuild();
-      // load palette
-      addPaletteExtension(new String[]{
-          "<category id='category_1' name='category 1'>",
-          "  <component id='t' class='test.NoSuchComponent'/>",
-          "</category>"});
-      ComponentEntryInfo entry = loadSingleComponent("t");
-      assertHasClass(entry, true);
-    } finally {
-      testBundle.dispose();
-    }
-  }
-
-  /**
-   * If component is in known package of some standard (or supported) library, we can avoid loading
-   * all classes and just check that this library exists, by loading only one "witness" class.
-   * <p>
-   * Here "witness" class does not exist, so no matter even if class itself exists.
-   */
-  public void test_hasClass_useWitness_false() throws Exception {
-    TestBundle testBundle = new TestBundle();
-    try {
-      testBundle.addExtension(
-          "org.eclipse.wb.core.paletteComponentExists",
-          new String[]{"<component package='test.' witness='test2.Witness'/>"});
-      testBundle.install(true);
-      // prepare MyComponent
-      prepareMyComponent();
-      // load palette
-      addPaletteExtension(new String[]{
-          "<category id='category_1' name='category 1'>",
-          "  <component id='t' class='test.MyComponent'/>",
-          "</category>"});
-      ComponentEntryInfo entry = loadSingleComponent("t");
-      assertHasClass(entry, false);
-    } finally {
-      testBundle.dispose();
-    }
-  }
-
-  /**
-   * Sometimes we always mix {@link ClassLoader} with class into editor {@link ClassLoader}, even
-   * {@link IJavaProject} if does not include it. So, we should check {@link IType} existence in
-   * {@link IJavaProject}.
-   * <p>
-   * Here {@link Class} exists, but we remove corresponding Java file (without building project), so
-   * {@link IJavaProject} sees that {@link IType} does not exist.
-   */
-  public void test_hasClass_hasType_false() throws Exception {
-    TestBundle testBundle = new TestBundle();
-    try {
-      testBundle.addExtension(
-          "org.eclipse.wb.core.paletteComponentExists",
-          new String[]{"<component package='test.' hasType='true'/>"});
-      testBundle.install(true);
-      // prepare MyComponent
-      prepareMyComponent();
-      // has MyComponent.class, but we delete Java source, so no IType
-      assertTrue(ProjectUtils.hasType(m_javaProject, "test.MyComponent"));
-      assertTrue(getFile("bin/test/MyComponent.class").exists());
-      getFileSrc("test/MyComponent.java").delete(true, null);
-      assertFalse(ProjectUtils.hasType(m_javaProject, "test.MyComponent"));
-      // load palette
-      addPaletteExtension(new String[]{
-          "<category id='category_1' name='category 1'>",
-          "  <component id='t' class='test.MyComponent'/>",
-          "</category>"});
-      ComponentEntryInfo entry = loadSingleComponent("t");
-      assertHasClass(entry, false);
-    } finally {
-      testBundle.dispose();
-    }
-  }
-
-  /**
-   * Sometimes we always mix {@link ClassLoader} with class into editor {@link ClassLoader}, even
-   * {@link IJavaProject} if does not include it. So, we should check {@link IType} existence in
-   * {@link IJavaProject}.
-   * <p>
-   * Both {@link Class} and {@link IType} exist.
-   */
-  public void test_hasClass_hasType_true() throws Exception {
-    TestBundle testBundle = new TestBundle();
-    try {
-      testBundle.addExtension(
-          "org.eclipse.wb.core.paletteComponentExists",
-          new String[]{"<component package='test.' hasType='true'/>"});
-      testBundle.install(true);
-      // prepare MyComponent
-      prepareMyComponent();
-      assertTrue(ProjectUtils.hasType(m_javaProject, "test.MyComponent"));
-      // load palette
-      addPaletteExtension(new String[]{
-          "<category id='category_1' name='category 1'>",
-          "  <component id='t' class='test.MyComponent'/>",
-          "</category>"});
-      ComponentEntryInfo entry = loadSingleComponent("t");
-      assertHasClass(entry, true);
-    } finally {
-      testBundle.dispose();
-    }
-  }
-
-  /**
-   * Sometimes we always mix {@link ClassLoader} with class into editor {@link ClassLoader} and
-   * automatically add corresponding jar file into {@link IJavaProject} classpath. So, this
-   * component can be considered as always accessible.
-   */
-  public void test_hasClass_always() throws Exception {
-    TestBundle testBundle = new TestBundle();
-    try {
-      testBundle.addExtension(
-          "org.eclipse.wb.core.paletteComponentExists",
-          new String[]{"<component package='test.' always='true'/>"});
-      testBundle.install(true);
-      // no MyComponent
-      assertFalse(ProjectUtils.hasType(m_javaProject, "test.MyComponent"));
-      // load palette
-      addPaletteExtension(new String[]{
-          "<category id='category_1' name='category 1'>",
-          "  <component id='t' class='test.MyComponent'/>",
-          "</category>"});
-      ComponentEntryInfo entry = loadSingleComponent("t");
-      assertHasClass(entry, true);
-    } finally {
-      testBundle.dispose();
-    }
-  }
-
-  private void assertHasClass(ComponentEntryInfo entry, boolean expected) throws Exception {
-    // initialize, without check
-    entry.initialize(null, m_lastObject);
-    // but hasClass() is OK
-    assertEquals(expected, ReflectionUtils.invokeMethod(entry, "hasClass()"));
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // pre-loading palette
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for loading palette usually done in earlyStartup().
-   * <p>
-   * This requires for -DFLAG_NO_PALETTE flag.
-   */
-  public void test_preloadingCache() throws Exception {
-    TestBundle testBundle = new TestBundle();
-    Image image = new Image(null, 11, 29);
-    try {
-      // prepare
-      String className = ClassForBundle.class.getName();
-      String descriptionsPath =
-          "wbp-meta/" + CodeUtils.getPackage(className).replace('.', '/') + "/";
-      testBundle.addClass(ClassForBundle.class);
-      testBundle.setFile(
-          descriptionsPath + ".wbp-cache-descriptions",
-          "Please, cache this package.");
-      String componentPath = descriptionsPath + StringUtils.substringAfterLast(className, ".");
-      testBundle.setFile(
-          componentPath + ".wbp-component.xml",
-          getSourceDQ(
-              "<?xml version='1.0' encoding='UTF-8'?>",
-              "<component xmlns='http://www.eclipse.org/wb/WBPComponent'>",
-              "  <description>test1 test2 <p attr='val'>test3</p> test4 test5</description>",
-              "</component>"));
-      testBundle.setFile(componentPath + ".png", ImageUtils.getBytesPNG(image));
-      testBundle.addExtension(
-          "org.eclipse.wb.core.toolkits",
-          "<toolkit id='org.eclipse.wb.swing'>",
-          "  <palette>",
-          "    <category id='org.eclipse.wb.tests.testBundle.components' name='Test' description='Test'>",
-          "      <component class='" + className + "'/>",
-          "    </category>",
-          "  </palette>",
-          "</toolkit>");
-      testBundle.install();
-      try {
-        String toolkitId = "org.eclipse.wb.swing";
-        // get cache
-        Object cache =
-            ReflectionUtils.invokeMethod(
-                ComponentPresentationHelper.class,
-                "getCache(java.lang.String)",
-                toolkitId);
-        // do the job
-        ReflectionUtils.invokeMethod(
-            ComponentPresentationHelper.class,
-            "fillPresentations("
-                + cache.getClass().getName().replace("$", ".")
-                + ",java.lang.String,org.eclipse.core.runtime.IProgressMonitor)",
-            cache,
-            toolkitId,
-            new NullProgressMonitor());
-        // get presentation and check
-        ComponentPresentation presentation =
-            (ComponentPresentation) ReflectionUtils.invokeMethod(
-                cache,
-                "get(java.lang.String)",
-                className + " null");
-        assertNotNull(presentation);
-        assertEquals(
-            "test1 test2 <p attr=\"val\">test3</p> test4 test5",
-            presentation.getDescription());
-        Image icon = presentation.getIcon();
-        assertNotNull(icon);
-        assertEquals(image.getBounds().width, 11);
-        assertEquals(image.getBounds().height, 29);
-      } finally {
-        testBundle.uninstall();
-      }
-    } finally {
-      image.dispose();
-      testBundle.dispose();
-    }
-  }
-
-  /**
-   * We use this class to put it into new {@link Bundle}.
-   */
-  public static class ClassForBundle extends Composite {
-    public ClassForBundle(Composite parent, int style) {
-      super(parent, style);
-    }
-  }
-  /**
-   * We use this class to check referencing other classes, from separate JAR's.
-   */
-  public static class ClassForBundle2 extends ClassForBundle {
-    public ClassForBundle2(Composite parent, int style) {
-      super(parent, style);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Life cycle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void test_tearDown() throws Exception {
+		super.test_tearDown();
+		waitEventLoop(0);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Check for {@link ComponentEntryInfo} access methods.
+	 */
+	public void test_access() throws Exception {
+		ComponentEntryInfo componentEntry = new ComponentEntryInfo();
+		componentEntry.setComponentClassName("org.eclipse.swt.widgets.Button");
+		// toString()
+		assertEquals("Component(class='org.eclipse.swt.widgets.Button')", componentEntry.toString());
+		// get/setComponentClassName
+		assertEquals("org.eclipse.swt.widgets.Button", componentEntry.getClassName());
+		componentEntry.setComponentClassName("org.eclipse.swt.widgets.Button");
+		assertEquals("org.eclipse.swt.widgets.Button", componentEntry.getClassName());
+		// get/setCreationId
+		assertNull(componentEntry.getCreationId());
+		componentEntry.setCreationId("my creation id");
+		assertEquals("my creation id", componentEntry.getCreationId());
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parse
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Only "class" specified in extension, so other things are deduced.
+	 */
+	public void test_parse_onlyClass() throws Exception {
+		addPaletteExtension(new String[]{
+				"<category id='category_1' name='category 1'>",
+				"  <component class='org.eclipse.swt.widgets.Button'/>",
+		"</category>"});
+		PaletteInfo palette = loadPalette();
+		// prepare category/entry
+		CategoryInfo category = palette.getCategory("category_1");
+		ComponentEntryInfo entry = (ComponentEntryInfo) category.getEntries().get(0);
+		// check entry
+		{
+			assertSame(category, entry.getCategory());
+			assertEquals("category_1 org.eclipse.swt.widgets.Button", entry.getId());
+			assertEquals("org.eclipse.swt.widgets.Button", entry.getClassName());
+			assertNull(entry.getCreationId());
+			assertNull(entry.getDescription());
+			// before initialize
+			assertEquals("org.eclipse.swt.widgets.Button", entry.getName());
+			assertSame(ComponentEntryInfo.DEFAULT_ICON, entry.getIcon());
+			// initialize and check rest values
+			assertTrue(entry.initialize(null, m_lastObject));
+			assertEquals("Button", entry.getName());
+			assertNotNull(entry.getIcon());
+			// toString()
+			assertEquals("Component(class='org.eclipse.swt.widgets.Button')", entry.toString());
+		}
+	}
+
+	/**
+	 * "id", "name", "description" and "icon" specified in extension.
+	 */
+	public void test_parse_valuesFromExtension() throws Exception {
+		addPaletteExtension(new String[]{
+				"<category id='category_1' name='category 1'>",
+				"  <component class='org.eclipse.swt.widgets.Button' creationId='creation id' id='my id' name='my name' description='my description' icon='icons/true.gif' visible='false'/>",
+		"</category>"});
+		PaletteInfo palette = loadPalette();
+		// prepare category/entry
+		CategoryInfo category = palette.getCategory("category_1");
+		ComponentEntryInfo entry = (ComponentEntryInfo) category.getEntries().get(0);
+		// check entry
+		assertSame(category, entry.getCategory());
+		assertEquals("my id", entry.getId());
+		assertEquals("org.eclipse.swt.widgets.Button", entry.getClassName());
+		assertEquals("creation id", entry.getCreationId());
+		assertEquals("my description", entry.getDescription());
+		assertEquals("my name", entry.getName());
+		// we have icon in palette entry, so it is not "null"
+		{
+			Image icon = entry.getIcon();
+			assertNotNull(icon);
+			assertEquals(16, icon.getBounds().width);
+			assertEquals(16, icon.getBounds().height);
+		}
+		assertFalse(entry.isVisible());
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Description attribute
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * If "description" text is empty, then description from {@link ComponentDescription} should be
+	 * used.
+	 */
+	public void test_parse_descriptionText_emptyString() throws Exception {
+		assertDescriptionText_fromComponentDescription("");
+	}
+
+	/**
+	 * If "description" text is empty, then description from {@link ComponentDescription} should be
+	 * used.
+	 */
+	public void test_parse_descriptionText_spacesString() throws Exception {
+		assertDescriptionText_fromComponentDescription(" \t");
+	}
+
+	/**
+	 * If "description" text is exactly name of class (we generate such description when user adds
+	 * component using UI), then description from {@link ComponentDescription} should be used.
+	 */
+	public void test_parse_descriptionText_className() throws Exception {
+		assertDescriptionText_fromComponentDescription("org.eclipse.swt.widgets.Button");
+	}
+
+	private void assertDescriptionText_fromComponentDescription(String descriptionAttribute)
+			throws Exception {
+		addPaletteExtension(new String[]{
+				"<category id='category_1' name='category 1'>",
+				"  <component class='org.eclipse.swt.widgets.Button' description='"
+						+ descriptionAttribute
+						+ "'/>",
+		"</category>"});
+		PaletteInfo palette = loadPalette();
+		// prepare category/entry
+		CategoryInfo category = palette.getCategory("category_1");
+		ComponentEntryInfo entry = (ComponentEntryInfo) category.getEntries().get(0);
+		// initialize and check values
+		assertTrue(entry.initialize(null, m_lastObject));
+		assertEquals("Instances of this class represent a selectable user interface object that"
+				+ " issues notification when pressed and released.", entry.getDescription());
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Initialize
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Standard {@link Button}, description and icon from {@link ComponentDescription}.
+	 */
+	public void test_initialize_1_allDefaults() throws Exception {
+		addPaletteExtension(new String[]{
+				"<category id='category_1' name='category 1'>",
+				"  <component class='org.eclipse.swt.widgets.Button'/>",
+		"</category>"});
+		PaletteInfo palette = loadPalette();
+		// prepare component
+		CategoryInfo category = palette.getCategory("category_1");
+		ComponentEntryInfo entry = (ComponentEntryInfo) category.getEntries().get(0);
+		assertNull(entry.getDescription());
+		// do initialize
+		assertTrue(entry.initialize(null, m_lastObject));
+		// check that after initialize description/icon from CreationDescription is provided
+		{
+			ComponentDescription componentDescription =
+					ComponentDescriptionHelper.getDescription(m_lastContext, Button.class);
+			CreationDescription creation = componentDescription.getCreation(null);
+			assertEquals(creation.getDescription(), entry.getDescription());
+			assertTrue("Same icons.", UiUtils.equals(creation.getIcon(), entry.getIcon()));
+		}
+	}
+
+	/**
+	 * Bad component class, failed to initialize.
+	 */
+	public void test_initialize_badComponentClass() throws Exception {
+		XmlObjectInfo panel = parseEmptyPanel();
+		assertEquals(0, m_lastContext.getWarnings().size());
+		//
+		addPaletteExtension(new String[]{
+				"<category id='category_1' name='category 1'>",
+				"  <component class='no.such.Component'/>",
+		"</category>"});
+		PaletteInfo palette = loadPalette(panel);
+		// prepare component
+		CategoryInfo category = palette.getCategory("category_1");
+		ComponentEntryInfo componentEntry = (ComponentEntryInfo) category.getEntries().get(0);
+		// no presentation
+		assertEquals("no.such.Component", componentEntry.getName());
+		assertSame(ComponentEntryInfo.DEFAULT_ICON, componentEntry.getIcon());
+		// do initialize, failed
+		assertFalse(componentEntry.initialize(null, panel));
+		// no warnings
+		assertThat(m_lastContext.getWarnings()).isEmpty();
+	}
+
+	/**
+	 * Bad component description, failed to initialize.
+	 */
+	public void test_initialize_badComponentDescription() throws Exception {
+		prepareMyComponent(new String[]{});
+		setFileContentSrc("test/MyComponent.wbp-component.xml", "something bad");
+		waitForAutoBuild();
+		// parse
+		XmlObjectInfo panel = parseEmptyPanel();
+		assertEquals(0, m_lastContext.getWarnings().size());
+		//
+		addPaletteExtension(new String[]{
+				"<category id='category_1' name='category 1'>",
+				"  <component class='test.MyComponent'/>",
+		"</category>"});
+		PaletteInfo palette = loadPalette(panel);
+		// prepare component
+		CategoryInfo category = palette.getCategory("category_1");
+		ComponentEntryInfo componentEntry = (ComponentEntryInfo) category.getEntries().get(0);
+		// do initialize, we have warning, because we still load description (as slow) and it is invalid
+		assertFalse(componentEntry.initialize(null, panel));
+		assertThat(m_lastContext.getWarnings()).hasSize(1);
+	}
+
+	/**
+	 * Object without description.
+	 */
+	public void test_initialize_noDescription() throws Exception {
+		addPaletteExtension(new String[]{
+				"<category id='category_1' name='category 1'>",
+				"  <component class='java.lang.String'/>",
+		"</category>"});
+		XmlObjectInfo panel = parseEmptyPanel();
+		PaletteInfo palette = loadPalette(panel);
+		// prepare component
+		CategoryInfo category = palette.getCategory("category_1");
+		ComponentEntryInfo componentEntry = (ComponentEntryInfo) category.getEntries().get(0);
+		assertNull(componentEntry.getDescription());
+		// do initialize
+		assertTrue(componentEntry.initialize(null, panel));
+		// when no "real" description, component class name is used
+		assertEquals("java.lang.String", componentEntry.getDescription());
+	}
+
+	/**
+	 * Several "creation" sections.
+	 */
+	public void test_initialize_severalCreations() throws Exception {
+		prepareMyComponent(new String[]{
+				"  public MyComponent(Composite parent, int style, boolean value) {",
+				"    super(parent, style);",
+		"  }"}, new String[]{
+				"  <creation id='true'>",
+				"    <source/>",
+				"    <x-attribute name='value' value='true'/>",
+				"  </creation>",
+				"  <creation id='false'>",
+				"    <source/>",
+				"    <x-attribute name='value' value='false'/>",
+		"  </creation>"});
+		waitForAutoBuild();
+		// parse
+		XmlObjectInfo panel = parseEmptyPanel();
+		PaletteManager manager = new PaletteManager(panel, TOOLKIT_ID);
+		// load palette
+		addPaletteExtension(new String[]{
+				"<category id='category_1' name='category 1'>",
+				"  <component class='test.MyComponent' creationId='false'/>",
+		"</category>"});
+		manager.reloadPalette();
+		PaletteInfo palette = manager.getPalette();
+		// prepare component
+		CategoryInfo category = palette.getCategory("category_1");
+		ComponentEntryInfo componentEntry = (ComponentEntryInfo) category.getEntries().get(0);
+		// check component
+		assertTrue(componentEntry.initialize(null, panel));
+		assertTrue(componentEntry.isEnabled());
+		assertEquals("test.MyComponent", componentEntry.getClassName());
+		assertEquals("category_1 test.MyComponent false", componentEntry.getId());
+		// check tool
+		{
+			CreationTool creationTool = (CreationTool) componentEntry.createTool();
+			ICreationFactory creationFactory = creationTool.getFactory();
+			creationFactory.activate();
+			// check new object
+			XmlObjectInfo newObject = (XmlObjectInfo) creationFactory.getNewObject();
+			{
+				DocumentElement newElement = getNewCreationElement(newObject);
+				assertEquals("false", newElement.getAttribute("value"));
+			}
+		}
+	}
+
+	/**
+	 * No "creation" with requested "id", and also no "description", so no "fast" presentation.
+	 */
+	public void test_initialize_noSuchCreation() throws Exception {
+		prepareMyComponent();
+		waitForAutoBuild();
+		// parse
+		XmlObjectInfo panel = parseEmptyPanel();
+		PaletteManager manager = new PaletteManager(panel, TOOLKIT_ID);
+		// load palette
+		addPaletteExtension(new String[]{
+				"<category id='category_1' name='category 1'>",
+				"  <component class='test.MyComponent' creationId='noSuchCreation'/>",
+		"</category>"});
+		manager.reloadPalette();
+		PaletteInfo palette = manager.getPalette();
+		// prepare component
+		CategoryInfo category = palette.getCategory("category_1");
+		ComponentEntryInfo componentEntry = (ComponentEntryInfo) category.getEntries().get(0);
+		// check component
+		assertThat(m_lastContext.getWarnings()).hasSize(0);
+		assertFalse(componentEntry.initialize(null, panel));
+		assertThat(m_lastContext.getWarnings()).hasSize(1);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Enabled
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test that "enabled" script can be used to disable.
+	 */
+	public void test_isEnabled_enabledScript() throws Exception {
+		addPaletteExtension(new String[]{
+				"<category id='category_1' name='category 1'>",
+				"  <component class='org.eclipse.swt.widgets.Button' name='my name' enabled='1 == 2'/>",
+		"</category>"});
+		PaletteInfo palette = loadPalette();
+		// prepare category/entry
+		CategoryInfo category = palette.getCategory("category_1");
+		ComponentEntryInfo entry = (ComponentEntryInfo) category.getEntries().get(0);
+		// check entry
+		assertSame(category, entry.getCategory());
+		assertEquals("org.eclipse.swt.widgets.Button", entry.getClassName());
+		assertEquals("my name", entry.getName());
+		// initialize
+		assertTrue(entry.initialize(null, m_lastObject));
+		// disabled
+		assertFalse(entry.isEnabled());
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tool
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_createTool() throws Exception {
+		addPaletteExtension(new String[]{
+				"<category id='category_1' name='category 1'>",
+				"  <component class='org.eclipse.swt.widgets.Button'/>",
+		"</category>"});
+		PaletteInfo palette = loadPalette();
+		// prepare component
+		CategoryInfo category = palette.getCategory("category_1");
+		ComponentEntryInfo componentEntry = (ComponentEntryInfo) category.getEntries().get(0);
+		// do initialize
+		assertTrue(componentEntry.initialize(null, m_lastObject));
+		// check tool
+		CreationTool creationTool = (CreationTool) componentEntry.createTool();
+		ICreationFactory creationFactory = creationTool.getFactory();
+		creationFactory.activate();
+		// check new object
+		XmlObjectInfo object = (XmlObjectInfo) creationFactory.getNewObject();
+		assertInstanceOf(ControlInfo.class, object);
+		assertInstanceOf(ElementCreationSupport.class, object.getCreationSupport());
+		assertSame(Boolean.TRUE, object.getArbitraryValue(XmlObjectInfo.FLAG_MANUAL_COMPONENT));
+		// activate again, new object should be created
+		{
+			creationFactory.activate();
+			assertNotSame(object, creationFactory.getNewObject());
+		}
+	}
+
+	/**
+	 * We should not allow to drop abstract components.
+	 */
+	public void test_createTool_abstractClass() throws Exception {
+		setFileContentSrc(
+				"test/MyAbstractComponent.java",
+				getJavaSource(
+						"public abstract class MyAbstractComponent extends Composite {",
+						"  public MyAbstractComponent(Composite parent, int style) {",
+						"    super(parent, style);",
+						"  }",
+						"}"));
+		waitForAutoBuild();
+		// prepare palette
+		addPaletteExtension(new String[]{
+				"<category id='category_1' name='category 1'>",
+				"  <component class='test.MyAbstractComponent'/>",
+		"</category>"});
+		PaletteInfo palette = loadPalette();
+		// prepare component
+		final CategoryInfo category = palette.getCategory("category_1");
+		final ComponentEntryInfo componentEntry = (ComponentEntryInfo) category.getEntries().get(0);
+		// set palette site
+		IPaletteSite.Helper.setSite(m_lastObject, new IPaletteSite.Empty() {
+			@Override
+			public Shell getShell() {
+				return DesignerPlugin.getShell();
+			}
+		});
+		// do initialize
+		assertTrue(componentEntry.initialize(null, m_lastObject));
+		// create tool
+		new UiContext().executeAndCheck(new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				CreationTool creationTool = (CreationTool) componentEntry.createTool();
+				assertNull(creationTool);
+			}
+		}, new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				context.useShell("Error");
+				context.clickButton("OK");
+			}
+		});
+	}
+
+	/**
+	 * Simulate case when component was initialized, but at loading {@link ComponentDescription} some
+	 * problem happened.
+	 */
+	public void test_createTool_badClass() throws Exception {
+		addPaletteExtension(new String[]{
+				"<category id='category_1' name='category 1'>",
+				"  <component class='no.such.Class'/>",
+		"</category>"});
+		PaletteInfo palette = loadPalette();
+		// prepare component
+		CategoryInfo category = palette.getCategory("category_1");
+		ComponentEntryInfo componentEntry = (ComponentEntryInfo) category.getEntries().get(0);
+		// do initialize
+		m_lastObject.putArbitraryValue(ComponentEntryInfo.KEY_SIMULATE_PRESENTATION, true);
+		assertTrue(componentEntry.initialize(null, m_lastObject));
+		// create tool
+		assertThat(m_lastContext.getWarnings()).hasSize(0);
+		CreationTool creationTool = (CreationTool) componentEntry.createTool();
+		assertNull(creationTool);
+		assertThat(m_lastContext.getWarnings()).hasSize(1);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Library
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * When component has "library" tag, this library should be added to classpath.
+	 */
+	public void test_createTool_withLibrary() throws Exception {
+		TestBundle testBundle = new TestBundle();
+		try {
+			String className = ClassForBundle.class.getName();
+			testBundle.addJar("myClasses.jar").addClass(ClassForBundle.class).close();
+			testBundle.addJar("myClasses.zip").add(className.replace('.', '/') + ".java", "src").close();
+			testBundle.addExtension("org.eclipse.wb.core.toolkits", new String[]{
+					"<toolkit id='org.eclipse.wb.rcp'>",
+					"  <classLoader-library bundle='" + testBundle.getId() + "' jar='myClasses.jar'/>",
+			"</toolkit>"});
+			testBundle.install();
+			try {
+				addPaletteExtension(new String[]{
+						"<category id='category_1' name='category 1'>",
+						"  <component class='" + className + "'>",
+						"    <library type='"
+								+ className
+								+ "'"
+								+ " bundle='"
+								+ testBundle.getId()
+								+ "'"
+								+ " jar='myClasses.jar' src='myClasses.zip'/>",
+								"  </component>",
+				"</category>"});
+				XmlObjectInfo panel = parseEmptyPanel();
+				PaletteInfo palette = loadPalette(panel);
+				// initially to layout type in project
+				assertNull(m_lastContext.getJavaProject().findType(className));
+				// prepare component
+				CategoryInfo category = palette.getCategory("category_1");
+				ComponentEntryInfo componentEntry = (ComponentEntryInfo) category.getEntries().get(0);
+				// do initialize
+				assertTrue(componentEntry.initialize(null, panel));
+				// create tool
+				ICreationFactory creationFactory;
+				{
+					CreationTool creationTool = (CreationTool) componentEntry.createTool();
+					creationFactory = creationTool.getFactory();
+					creationFactory.activate();
+				}
+				// check new object
+				XmlObjectInfo newComponent = (XmlObjectInfo) creationFactory.getNewObject();
+				assertEquals(className, newComponent.getDescription().getComponentClass().getName());
+				// now ClassForBundle type should be in project
+				assertNotNull(m_lastContext.getJavaProject().findType(className));
+			} finally {
+				testBundle.uninstall();
+				waitEventLoop(0);
+			}
+		} finally {
+			testBundle.dispose();
+			// dispose project
+			m_lastObject.refresh_dispose();
+			do_projectDispose();
+		}
+	}
+
+	/**
+	 * Two "library" tags.
+	 */
+	public void test_createTool_withLibrary2() throws Exception {
+		TestBundle testBundle = new TestBundle();
+		try {
+			String className = ClassForBundle.class.getName();
+			String className2 = ClassForBundle2.class.getName();
+			testBundle.addJar("myClasses.jar").addClass(ClassForBundle.class).close();
+			testBundle.addJar("myClasses.zip").add(className.replace('.', '/') + ".java", "src").close();
+			testBundle.addJar("myClasses2.jar").addClass(ClassForBundle2.class).close();
+			testBundle.addJar("myClasses2.zip").add(className2.replace('.', '/') + ".java", "src").close();
+			testBundle.addExtension("org.eclipse.wb.core.toolkits", new String[]{
+					"<toolkit id='org.eclipse.wb.rcp'>",
+					"  <classLoader-library bundle='" + testBundle.getId() + "' jar='myClasses.jar'/>",
+					"  <classLoader-library bundle='" + testBundle.getId() + "' jar='myClasses2.jar'/>",
+			"</toolkit>"});
+			testBundle.install();
+			try {
+				addPaletteExtension(new String[]{
+						"<category id='category_1' name='category 1'>",
+						"  <component class='" + className2 + "'>",
+						"    <library type='"
+								+ className
+								+ "'"
+								+ " bundle='"
+								+ testBundle.getId()
+								+ "'"
+								+ " jar='myClasses.jar' src='myClasses.zip'/>",
+								"    <library type='"
+										+ className2
+										+ "'"
+										+ " bundle='"
+										+ testBundle.getId()
+										+ "'"
+										+ " jar='myClasses2.jar' src='myClasses2.zip'/>",
+										"  </component>",
+				"</category>"});
+				XmlObjectInfo panel = parseEmptyPanel();
+				PaletteInfo palette = loadPalette(panel);
+				// initially to layout type in project
+				assertNull(m_lastContext.getJavaProject().findType(className));
+				// prepare component
+				CategoryInfo category = palette.getCategory("category_1");
+				ComponentEntryInfo componentEntry = (ComponentEntryInfo) category.getEntries().get(0);
+				// do initialize
+				assertTrue(componentEntry.initialize(null, panel));
+				// create tool
+				ICreationFactory creationFactory;
+				{
+					CreationTool creationTool = (CreationTool) componentEntry.createTool();
+					creationFactory = creationTool.getFactory();
+					creationFactory.activate();
+				}
+				// check new object
+				XmlObjectInfo newComponent = (XmlObjectInfo) creationFactory.getNewObject();
+				assertEquals(className2, newComponent.getDescription().getComponentClass().getName());
+				// now ClassForBundle/ClassForBundle2 types should be in project
+				assertNotNull(m_lastContext.getJavaProject().findType(className2));
+				assertNotNull(m_lastContext.getJavaProject().findType(className));
+			} finally {
+				testBundle.uninstall();
+				waitEventLoop(0);
+			}
+		} finally {
+			testBundle.dispose();
+			// dispose project
+			m_lastObject.refresh_dispose();
+			do_projectDispose();
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// hasClass()
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * No special "component" rule.
+	 */
+	public void test_hasClass_noSpecialRule() throws Exception {
+		// prepare MyComponent
+		prepareMyComponent();
+		// load palette
+		addPaletteExtension(new String[]{
+				"<category id='category_1' name='category 1'>",
+				"  <component id='t' class='test.MyComponent'/>",
+		"</category>"});
+		ComponentEntryInfo entry = loadSingleComponent("t");
+		assertHasClass(entry, true);
+	}
+
+	/**
+	 * If component is in known package of some standard (or supported) library, we can avoid loading
+	 * all classes and just check that this library exists, by loading only one "witness" class.
+	 * <p>
+	 * Here "witness" class exists, so we don't even check class itself.
+	 */
+	public void test_hasClass_useWitness_true() throws Exception {
+		TestBundle testBundle = new TestBundle();
+		try {
+			testBundle.addExtension(
+					"org.eclipse.wb.core.paletteComponentExists",
+					new String[]{"<component package='test.' witness='test2.Witness'/>"});
+			testBundle.install(true);
+			// prepare Witness
+			setFileContentSrc(
+					"test2/Witness.java",
+					getSource(
+							"// filler filler filler filler filler",
+							"// filler filler filler filler filler",
+							"// filler filler filler filler filler",
+							"package test2;",
+							"public class Witness {",
+							"}"));
+			waitForAutoBuild();
+			// load palette
+			addPaletteExtension(new String[]{
+					"<category id='category_1' name='category 1'>",
+					"  <component id='t' class='test.NoSuchComponent'/>",
+			"</category>"});
+			ComponentEntryInfo entry = loadSingleComponent("t");
+			assertHasClass(entry, true);
+		} finally {
+			testBundle.dispose();
+		}
+	}
+
+	/**
+	 * If component is in known package of some standard (or supported) library, we can avoid loading
+	 * all classes and just check that this library exists, by loading only one "witness" class.
+	 * <p>
+	 * Here "witness" class does not exist, so no matter even if class itself exists.
+	 */
+	public void test_hasClass_useWitness_false() throws Exception {
+		TestBundle testBundle = new TestBundle();
+		try {
+			testBundle.addExtension(
+					"org.eclipse.wb.core.paletteComponentExists",
+					new String[]{"<component package='test.' witness='test2.Witness'/>"});
+			testBundle.install(true);
+			// prepare MyComponent
+			prepareMyComponent();
+			// load palette
+			addPaletteExtension(new String[]{
+					"<category id='category_1' name='category 1'>",
+					"  <component id='t' class='test.MyComponent'/>",
+			"</category>"});
+			ComponentEntryInfo entry = loadSingleComponent("t");
+			assertHasClass(entry, false);
+		} finally {
+			testBundle.dispose();
+		}
+	}
+
+	/**
+	 * Sometimes we always mix {@link ClassLoader} with class into editor {@link ClassLoader}, even
+	 * {@link IJavaProject} if does not include it. So, we should check {@link IType} existence in
+	 * {@link IJavaProject}.
+	 * <p>
+	 * Here {@link Class} exists, but we remove corresponding Java file (without building project), so
+	 * {@link IJavaProject} sees that {@link IType} does not exist.
+	 */
+	public void test_hasClass_hasType_false() throws Exception {
+		TestBundle testBundle = new TestBundle();
+		try {
+			testBundle.addExtension(
+					"org.eclipse.wb.core.paletteComponentExists",
+					new String[]{"<component package='test.' hasType='true'/>"});
+			testBundle.install(true);
+			// prepare MyComponent
+			prepareMyComponent();
+			// has MyComponent.class, but we delete Java source, so no IType
+			assertTrue(ProjectUtils.hasType(m_javaProject, "test.MyComponent"));
+			assertTrue(getFile("bin/test/MyComponent.class").exists());
+			getFileSrc("test/MyComponent.java").delete(true, null);
+			assertFalse(ProjectUtils.hasType(m_javaProject, "test.MyComponent"));
+			// load palette
+			addPaletteExtension(new String[]{
+					"<category id='category_1' name='category 1'>",
+					"  <component id='t' class='test.MyComponent'/>",
+			"</category>"});
+			ComponentEntryInfo entry = loadSingleComponent("t");
+			assertHasClass(entry, false);
+		} finally {
+			testBundle.dispose();
+		}
+	}
+
+	/**
+	 * Sometimes we always mix {@link ClassLoader} with class into editor {@link ClassLoader}, even
+	 * {@link IJavaProject} if does not include it. So, we should check {@link IType} existence in
+	 * {@link IJavaProject}.
+	 * <p>
+	 * Both {@link Class} and {@link IType} exist.
+	 */
+	public void test_hasClass_hasType_true() throws Exception {
+		TestBundle testBundle = new TestBundle();
+		try {
+			testBundle.addExtension(
+					"org.eclipse.wb.core.paletteComponentExists",
+					new String[]{"<component package='test.' hasType='true'/>"});
+			testBundle.install(true);
+			// prepare MyComponent
+			prepareMyComponent();
+			assertTrue(ProjectUtils.hasType(m_javaProject, "test.MyComponent"));
+			// load palette
+			addPaletteExtension(new String[]{
+					"<category id='category_1' name='category 1'>",
+					"  <component id='t' class='test.MyComponent'/>",
+			"</category>"});
+			ComponentEntryInfo entry = loadSingleComponent("t");
+			assertHasClass(entry, true);
+		} finally {
+			testBundle.dispose();
+		}
+	}
+
+	/**
+	 * Sometimes we always mix {@link ClassLoader} with class into editor {@link ClassLoader} and
+	 * automatically add corresponding jar file into {@link IJavaProject} classpath. So, this
+	 * component can be considered as always accessible.
+	 */
+	public void test_hasClass_always() throws Exception {
+		TestBundle testBundle = new TestBundle();
+		try {
+			testBundle.addExtension(
+					"org.eclipse.wb.core.paletteComponentExists",
+					new String[]{"<component package='test.' always='true'/>"});
+			testBundle.install(true);
+			// no MyComponent
+			assertFalse(ProjectUtils.hasType(m_javaProject, "test.MyComponent"));
+			// load palette
+			addPaletteExtension(new String[]{
+					"<category id='category_1' name='category 1'>",
+					"  <component id='t' class='test.MyComponent'/>",
+			"</category>"});
+			ComponentEntryInfo entry = loadSingleComponent("t");
+			assertHasClass(entry, true);
+		} finally {
+			testBundle.dispose();
+		}
+	}
+
+	private void assertHasClass(ComponentEntryInfo entry, boolean expected) throws Exception {
+		// initialize, without check
+		entry.initialize(null, m_lastObject);
+		// but hasClass() is OK
+		assertEquals(expected, ReflectionUtils.invokeMethod(entry, "hasClass()"));
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// pre-loading palette
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for loading palette usually done in earlyStartup().
+	 * <p>
+	 * This requires for -DFLAG_NO_PALETTE flag.
+	 */
+	public void test_preloadingCache() throws Exception {
+		TestBundle testBundle = new TestBundle();
+		Image image = new Image(null, 11, 29);
+		try {
+			// prepare
+			String className = ClassForBundle.class.getName();
+			String descriptionsPath =
+					"wbp-meta/" + CodeUtils.getPackage(className).replace('.', '/') + "/";
+			testBundle.addClass(ClassForBundle.class);
+			testBundle.setFile(
+					descriptionsPath + ".wbp-cache-descriptions",
+					"Please, cache this package.");
+			String componentPath = descriptionsPath + StringUtils.substringAfterLast(className, ".");
+			testBundle.setFile(
+					componentPath + ".wbp-component.xml",
+					getSourceDQ(
+							"<?xml version='1.0' encoding='UTF-8'?>",
+							"<component xmlns='http://www.eclipse.org/wb/WBPComponent'>",
+							"  <description>test1 test2 <p attr='val'>test3</p> test4 test5</description>",
+							"</component>"));
+			testBundle.setFile(componentPath + ".png", ImageUtils.getBytesPNG(image));
+			testBundle.addExtension(
+					"org.eclipse.wb.core.toolkits",
+					"<toolkit id='org.eclipse.wb.swing'>",
+					"  <palette>",
+					"    <category id='org.eclipse.wb.tests.testBundle.components' name='Test' description='Test'>",
+					"      <component class='" + className + "'/>",
+					"    </category>",
+					"  </palette>",
+					"</toolkit>");
+			testBundle.install();
+			try {
+				String toolkitId = "org.eclipse.wb.swing";
+				// get cache
+				Object cache =
+						ReflectionUtils.invokeMethod(
+								ComponentPresentationHelper.class,
+								"getCache(java.lang.String)",
+								toolkitId);
+				// do the job
+				ReflectionUtils.invokeMethod(
+						ComponentPresentationHelper.class,
+						"fillPresentations("
+								+ cache.getClass().getName().replace("$", ".")
+								+ ",java.lang.String,org.eclipse.core.runtime.IProgressMonitor)",
+								cache,
+								toolkitId,
+								new NullProgressMonitor());
+				// get presentation and check
+				ComponentPresentation presentation =
+						(ComponentPresentation) ReflectionUtils.invokeMethod(
+								cache,
+								"get(java.lang.String)",
+								className + " null");
+				assertNotNull(presentation);
+				assertEquals(
+						"test1 test2 <p attr=\"val\">test3</p> test4 test5",
+						presentation.getDescription());
+				Image icon = presentation.getIcon();
+				assertNotNull(icon);
+				assertEquals(image.getBounds().width, 11);
+				assertEquals(image.getBounds().height, 29);
+			} finally {
+				testBundle.uninstall();
+			}
+		} finally {
+			image.dispose();
+			testBundle.dispose();
+		}
+	}
+
+	/**
+	 * We use this class to put it into new {@link Bundle}.
+	 */
+	public static class ClassForBundle extends Composite {
+		public ClassForBundle(Composite parent, int style) {
+			super(parent, style);
+		}
+	}
+	/**
+	 * We use this class to check referencing other classes, from separate JAR's.
+	 */
+	public static class ClassForBundle2 extends ClassForBundle {
+		public ClassForBundle2(Composite parent, int style) {
+			super(parent, style);
+		}
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/EntryInfoTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/EntryInfoTest.java
index a47eb75a2..c21111b26 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/EntryInfoTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/EntryInfoTest.java
@@ -26,42 +26,42 @@
  * @author scheglov_ke
  */
 public class EntryInfoTest extends AbstractPaletteTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_0() throws Exception {
-    XmlObjectInfo panel = parseEmptyPanel();
-    IEditPartViewer editPartViewer = new EmptyEditPartViewer();
-    // prepare ToolEntryInfo
-    EntryInfo toolEntry = new EntryInfo() {
-      @Override
-      public Image getIcon() {
-        return null;
-      }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_0() throws Exception {
+		XmlObjectInfo panel = parseEmptyPanel();
+		IEditPartViewer editPartViewer = new EmptyEditPartViewer();
+		// prepare ToolEntryInfo
+		EntryInfo toolEntry = new EntryInfo() {
+			@Override
+			public Image getIcon() {
+				return null;
+			}
 
-      @Override
-      public boolean activate(boolean reload) {
-        return false;
-      }
-    };
-    assertTrue(toolEntry.isEnabled());
-    // initialize
-    assertTrue(toolEntry.initialize(editPartViewer, panel));
-    // site
-    {
-      IPaletteSite.Empty site = new IPaletteSite.Empty();
-      IPaletteSite.Helper.setSite(panel, site);
-      assertSame(site, ReflectionUtils.invokeMethod(toolEntry, "getSite()"));
-    }
-    // can not activate
-    assertFalse(toolEntry.activate(false));
-    // category
-    {
-      CategoryInfo category = new CategoryInfo();
-      toolEntry.setCategory(category);
-      assertSame(category, toolEntry.getCategory());
-    }
-  }
+			@Override
+			public boolean activate(boolean reload) {
+				return false;
+			}
+		};
+		assertTrue(toolEntry.isEnabled());
+		// initialize
+		assertTrue(toolEntry.initialize(editPartViewer, panel));
+		// site
+		{
+			IPaletteSite.Empty site = new IPaletteSite.Empty();
+			IPaletteSite.Helper.setSite(panel, site);
+			assertSame(site, ReflectionUtils.invokeMethod(toolEntry, "getSite()"));
+		}
+		// can not activate
+		assertFalse(toolEntry.activate(false));
+		// category
+		{
+			CategoryInfo category = new CategoryInfo();
+			toolEntry.setCategory(category);
+			assertSame(category, toolEntry.getCategory());
+		}
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/IPaletteSiteTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/IPaletteSiteTest.java
index e22a38d56..175fb3e8e 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/IPaletteSiteTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/IPaletteSiteTest.java
@@ -18,17 +18,17 @@
  * @author scheglov_ke
  */
 public class IPaletteSiteTest extends AbstractPaletteTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_Empty() throws Exception {
-    IPaletteSite site = new IPaletteSite.Empty();
-    assertSame(null, site.getPalette());
-    assertSame(null, site.getShell());
-    // no-op
-    site.editPalette();
-    site.addCommand(null);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_Empty() throws Exception {
+		IPaletteSite site = new IPaletteSite.Empty();
+		assertSame(null, site.getPalette());
+		assertSame(null, site.getShell());
+		// no-op
+		site.editPalette();
+		site.addCommand(null);
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/MarqueeSelectionToolEntryInfoTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/MarqueeSelectionToolEntryInfoTest.java
index 3b29e78e4..7d3fca864 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/MarqueeSelectionToolEntryInfoTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/MarqueeSelectionToolEntryInfoTest.java
@@ -20,10 +20,10 @@
  * @author scheglov_ke
  */
 public class MarqueeSelectionToolEntryInfoTest extends DesignerTestCase {
-  public void test() throws Exception {
-    MarqueeSelectionToolEntryInfo entry = new MarqueeSelectionToolEntryInfo();
-    assertEquals("Marquee", entry.getName());
-    assertNotNull(entry.getIcon());
-    assertInstanceOf(MarqueeSelectionTool.class, entry.createTool());
-  }
+	public void test() throws Exception {
+		MarqueeSelectionToolEntryInfo entry = new MarqueeSelectionToolEntryInfo();
+		assertEquals("Marquee", entry.getName());
+		assertNotNull(entry.getIcon());
+		assertInstanceOf(MarqueeSelectionTool.class, entry.createTool());
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/PaletteInfoTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/PaletteInfoTest.java
index 66f77aecc..661cbad3a 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/PaletteInfoTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/PaletteInfoTest.java
@@ -22,95 +22,95 @@
  * @author scheglov_ke
  */
 public class PaletteInfoTest extends DesignerTestCase {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_toString() throws Exception {
-    PaletteInfo palette = new PaletteInfo();
-    // toString() without categories
-    assertEquals("", palette.toString());
-    // toString() with single category
-    palette.addCategory(new CategoryInfo("category_1"));
-    assertEquals("Category(id='category_1', name='(unknown)', entries=[])", palette.toString());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_toString() throws Exception {
+		PaletteInfo palette = new PaletteInfo();
+		// toString() without categories
+		assertEquals("", palette.toString());
+		// toString() with single category
+		palette.addCategory(new CategoryInfo("category_1"));
+		assertEquals("Category(id='category_1', name='(unknown)', entries=[])", palette.toString());
+	}
 
-  public void test_categories() throws Exception {
-    PaletteInfo palette = new PaletteInfo();
-    // prepare categories
-    CategoryInfo category_1 = new CategoryInfo("category_1");
-    CategoryInfo category_2 = new CategoryInfo("category_2");
-    // add categories
-    assertEquals(0, palette.getCategories().size());
-    palette.addCategory(category_1);
-    palette.addCategory(category_2);
-    assertEquals(2, palette.getCategories().size());
-    assertSame(category_1, palette.getCategories().get(0));
-    assertSame(category_2, palette.getCategories().get(1));
-    // find
-    assertSame(category_1, palette.getCategory("category_1"));
-    assertSame(category_2, palette.getCategory("category_2"));
-    assertNull(palette.getCategory("no-such-category"));
-  }
+	public void test_categories() throws Exception {
+		PaletteInfo palette = new PaletteInfo();
+		// prepare categories
+		CategoryInfo category_1 = new CategoryInfo("category_1");
+		CategoryInfo category_2 = new CategoryInfo("category_2");
+		// add categories
+		assertEquals(0, palette.getCategories().size());
+		palette.addCategory(category_1);
+		palette.addCategory(category_2);
+		assertEquals(2, palette.getCategories().size());
+		assertSame(category_1, palette.getCategories().get(0));
+		assertSame(category_2, palette.getCategories().get(1));
+		// find
+		assertSame(category_1, palette.getCategory("category_1"));
+		assertSame(category_2, palette.getCategory("category_2"));
+		assertNull(palette.getCategory("no-such-category"));
+	}
 
-  /**
-   * Test for {@link PaletteInfo#moveCategory(String, String)}.
-   */
-  public void test_moveCategory() throws Exception {
-    PaletteInfo palette = new PaletteInfo();
-    // prepare categories
-    CategoryInfo category_1 = new CategoryInfo("category_1");
-    CategoryInfo category_2 = new CategoryInfo("category_2");
-    CategoryInfo category_3 = new CategoryInfo("category_3");
-    // add categories
-    palette.addCategory(category_1);
-    palette.addCategory(category_2);
-    palette.addCategory(category_3);
-    // case 1: no category no move - ignore
-    {
-      palette.moveCategory("noSuchCategory", null);
-      assertSame(category_1, palette.getCategories().get(0));
-      assertSame(category_2, palette.getCategories().get(1));
-      assertSame(category_3, palette.getCategories().get(2));
-    }
-    // case 2: move before itself - ignore
-    {
-      palette.moveCategory("category_1", "category_1");
-      assertSame(category_1, palette.getCategories().get(0));
-      assertSame(category_2, palette.getCategories().get(1));
-      assertSame(category_3, palette.getCategories().get(2));
-    }
-    // case 3: no next category, so move to end
-    {
-      palette.moveCategory("category_1", "noSuchCategory");
-      assertSame(category_2, palette.getCategories().get(0));
-      assertSame(category_3, palette.getCategories().get(1));
-      assertSame(category_1, palette.getCategories().get(2));
-    }
-    // case 4: move before existing category
-    {
-      palette.moveCategory("category_1", "category_2");
-      assertSame(category_1, palette.getCategories().get(0));
-      assertSame(category_2, palette.getCategories().get(1));
-      assertSame(category_3, palette.getCategories().get(2));
-    }
-  }
+	/**
+	 * Test for {@link PaletteInfo#moveCategory(String, String)}.
+	 */
+	public void test_moveCategory() throws Exception {
+		PaletteInfo palette = new PaletteInfo();
+		// prepare categories
+		CategoryInfo category_1 = new CategoryInfo("category_1");
+		CategoryInfo category_2 = new CategoryInfo("category_2");
+		CategoryInfo category_3 = new CategoryInfo("category_3");
+		// add categories
+		palette.addCategory(category_1);
+		palette.addCategory(category_2);
+		palette.addCategory(category_3);
+		// case 1: no category no move - ignore
+		{
+			palette.moveCategory("noSuchCategory", null);
+			assertSame(category_1, palette.getCategories().get(0));
+			assertSame(category_2, palette.getCategories().get(1));
+			assertSame(category_3, palette.getCategories().get(2));
+		}
+		// case 2: move before itself - ignore
+		{
+			palette.moveCategory("category_1", "category_1");
+			assertSame(category_1, palette.getCategories().get(0));
+			assertSame(category_2, palette.getCategories().get(1));
+			assertSame(category_3, palette.getCategories().get(2));
+		}
+		// case 3: no next category, so move to end
+		{
+			palette.moveCategory("category_1", "noSuchCategory");
+			assertSame(category_2, palette.getCategories().get(0));
+			assertSame(category_3, palette.getCategories().get(1));
+			assertSame(category_1, palette.getCategories().get(2));
+		}
+		// case 4: move before existing category
+		{
+			palette.moveCategory("category_1", "category_2");
+			assertSame(category_1, palette.getCategories().get(0));
+			assertSame(category_2, palette.getCategories().get(1));
+			assertSame(category_3, palette.getCategories().get(2));
+		}
+	}
 
-  public void test_getEntry() throws Exception {
-    PaletteInfo palette = new PaletteInfo();
-    CategoryInfo category = new CategoryInfo("category_1");
-    palette.addCategory(category);
-    // add entries
-    EntryInfo entry_1 = new ComponentEntryInfo();
-    entry_1.setId("1");
-    EntryInfo entry_2 = new ComponentEntryInfo();
-    entry_2.setId("2");
-    category.addEntry(entry_1);
-    category.addEntry(entry_2);
-    // find entries
-    assertSame(entry_1, palette.getEntry("1"));
-    assertSame(entry_2, palette.getEntry("2"));
-    assertNull(palette.getEntry("no-such-entry"));
-  }
+	public void test_getEntry() throws Exception {
+		PaletteInfo palette = new PaletteInfo();
+		CategoryInfo category = new CategoryInfo("category_1");
+		palette.addCategory(category);
+		// add entries
+		EntryInfo entry_1 = new ComponentEntryInfo();
+		entry_1.setId("1");
+		EntryInfo entry_2 = new ComponentEntryInfo();
+		entry_2.setId("2");
+		category.addEntry(entry_1);
+		category.addEntry(entry_2);
+		// find entries
+		assertSame(entry_1, palette.getEntry("1"));
+		assertSame(entry_2, palette.getEntry("2"));
+		assertNull(palette.getEntry("no-such-entry"));
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/PaletteManagerTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/PaletteManagerTest.java
index 571273211..027df2532 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/PaletteManagerTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/PaletteManagerTest.java
@@ -45,884 +45,884 @@
  * @author scheglov_ke
  */
 public class PaletteManagerTest extends AbstractPaletteTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // PaletteManager
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test that {@link PaletteManager} can load palette, including dynamically added extensions.
-   */
-  public void test_dynamic() throws Exception {
-    XmlObjectInfo panel = parseEmptyPanel();
-    PaletteManager manager = new PaletteManager(panel, TOOLKIT_ID);
-    // access
-    assertEquals(TOOLKIT_ID, manager.getToolkitId());
-    // no palette before loading
-    assertNull(manager.getPalette());
-    // no palette contributions for this toolkit yet
-    {
-      // load palette
-      manager.reloadPalette();
-      // check palette
-      PaletteInfo palette = manager.getPalette();
-      assertNotNull(palette);
-      assertEquals(0, palette.getCategories().size());
-    }
-    // add dynamic extension and check that palette uses it
-    {
-      addPaletteExtension(new String[]{
-          "<category id='category_1' name='category 1' description='description 1'>",
-          "  <component class='org.eclipse.swt.widgets.Button'/>",
-          "</category>"});
-      try {
-        // load palette
-        manager.reloadPalette();
-        // check palette
-        PaletteInfo palette = manager.getPalette();
-        assertNotNull(palette);
-        // check category
-        assertEquals(1, palette.getCategories().size());
-        CategoryInfo category = palette.getCategory("category_1");
-        // check component
-        assertEquals(1, category.getEntries().size());
-        ComponentEntryInfo componentEntry = (ComponentEntryInfo) category.getEntries().get(0);
-        assertEquals("category_1 org.eclipse.swt.widgets.Button", componentEntry.getId());
-      } finally {
-        removeToolkitExtension();
-      }
-    }
-    // dynamic extension was removed, so again empty palette
-    {
-      // load palette
-      manager.reloadPalette();
-      // check palette
-      PaletteInfo palette = manager.getPalette();
-      assertNotNull(palette);
-      assertEquals(0, palette.getCategories().size());
-    }
-  }
-
-  /**
-   * Test for {@link PaletteManager#getPalette()}.
-   */
-  public void test_getPaletteCopy() throws Exception {
-    addPaletteExtension(new String[]{"<category id='category_1' name='category 1'/>"});
-    XmlObjectInfo panel = parseEmptyPanel();
-    PaletteManager manager = new PaletteManager(panel, TOOLKIT_ID);
-    // load palette
-    PaletteInfo palette;
-    {
-      manager.reloadPalette();
-      palette = manager.getPalette();
-      assertEquals(1, palette.getCategories().size());
-      assertNotNull(palette.getCategory("category_1"));
-    }
-    // get palette copy, it is equal, but not same
-    PaletteInfo paletteCopy = manager.getPaletteCopy();
-    assertNotSame(palette, paletteCopy);
-    assertEquals(1, paletteCopy.getCategories().size());
-    assertNotNull(paletteCopy.getCategory("category_1"));
-  }
-
-  /**
-   * Test for parsing "x-entry" element.
-   */
-  public void test_parse_xEntry() throws Exception {
-    addPaletteExtension(new String[]{
-        "<category id='category_1' name='category 1'>",
-        "  <x-entry id='myId' name='myName' "
-            + "class='org.eclipse.wb.internal.core.xml.editor.palette.model.SelectionToolEntryInfo'/>",
-        "</category>"});
-    EntryInfo entry = loadSingleEntry("myId");
-    assertEquals("myName", entry.getName());
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Outside of category
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Entry outside of category, has "category" attribute - OK.
-   */
-  public void test_parse_outsideCategory() throws Exception {
-    addPaletteExtension(new String[]{
-        "<category id='category_1' name='category 1'/>",
-        "<component class='org.eclipse.swt.widgets.Button' category='category_1'/>"});
-    PaletteInfo palette = loadPalette();
-    // check for entry
-    CategoryInfo category = palette.getCategory("category_1");
-    assertEquals(1, category.getEntries().size());
-  }
-
-  /**
-   * Entry outside of category, and no category - error.
-   */
-  public void test_parse_outsideCategory_noCategory() throws Exception {
-    addPaletteExtension(new String[]{
-        "<category id='category_1' name='category 1'/>",
-        "<component class='org.eclipse.swt.widgets.Button'/>"});
-    DesignerPlugin.setDisplayExceptionOnConsole(false);
-    try {
-      PaletteInfo palette = loadPalette();
-      // no entry expected
-      CategoryInfo category = palette.getCategory("category_1");
-      assertEquals(0, category.getEntries().size());
-    } finally {
-      DesignerPlugin.setDisplayExceptionOnConsole(true);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_command_1() throws Exception {
-    PaletteManager manager = loadManager();
-    // use loaded palette
-    {
-      PaletteInfo palette = manager.getPalette();
-      // initially palette is empty
-      assertEquals(0, palette.getCategories().size());
-      // add category using command
-      manager.commands_add(new CategoryAddCommand("new id",
-          "new name",
-          "new description",
-          true,
-          true,
-          null));
-      manager.commands_write();
-      // check new category
-      assertEquals(1, palette.getCategories().size());
-      CategoryInfo category = palette.getCategory("new id");
-      assertEquals("new name", category.getName());
-      assertEquals("new description", category.getDescription());
-    }
-    // reload palette, but command was written, so palette still has new category
-    {
-      manager.reloadPalette();
-      PaletteInfo palette = manager.getPalette();
-      assertEquals(1, palette.getCategories().size());
-      assertNotNull(palette.getCategory("new id"));
-    }
-  }
-
-  /**
-   * This method is invoked after {@link #test_command_2()}, so we check here that commands are not
-   * kept between tests (test methods).
-   */
-  public void test_command_2() throws Exception {
-    PaletteManager manager = loadManager();
-    PaletteInfo palette = manager.getPalette();
-    assertEquals(0, palette.getCategories().size());
-  }
-
-  /**
-   * Sometimes users want to use standard palette for all developers of project. So, they want to
-   * share palette commands. Best way to do this - save them into project and use CVS.
-   */
-  public void test_commandsInProject() throws Exception {
-    String commandsFilePath = "wbp-meta/" + TOOLKIT_ID + ".wbp-palette-commands.xml";
-    setFileContent(commandsFilePath, "");
-    // prepare manager
-    PaletteManager manager = loadManager();
-    // use loaded palette
-    {
-      PaletteInfo palette = manager.getPalette();
-      // initially palette is empty
-      assertEquals(0, palette.getCategories().size());
-      // add category using command
-      manager.commands_add(new CategoryAddCommand("new id",
-          "new name",
-          "new description",
-          true,
-          true,
-          null));
-      manager.commands_write();
-      // check new category
-      assertEquals(1, palette.getCategories().size());
-      CategoryInfo category = palette.getCategory("new id");
-      assertEquals("new name", category.getName());
-      assertEquals("new description", category.getDescription());
-    }
-    // check that palette commands saved into project
-    {
-      String commands = getFileContent(commandsFilePath);
-      assertThat(commands).isNotEqualTo("<commands/>");
-    }
-    // reload palette, but command was written, so palette still has new category
-    {
-      manager.reloadPalette();
-      PaletteInfo palette = manager.getPalette();
-      assertEquals(1, palette.getCategories().size());
-      assertNotNull(palette.getCategory("new id"));
-    }
-  }
-
-  /**
-   * We should apply command files from Jar files.
-   */
-  @DisposeProjectAfter
-  public void test_applyCommandsFromJar() throws Exception {
-    // add JAR with commands
-    {
-      String jarPath =
-          TestUtils.createTemporaryJar(
-              "wbp-meta/" + TOOLKIT_ID + ".wbp-palette-commands.xml",
-              getSourceDQ(
-                  "<commands>",
-                  "  <addCategory id='myID' name='myName' description='myDescription'/>",
-                  "</commands>"));
-      ProjectUtils.addExternalJar(m_javaProject, jarPath, null);
-    }
-    // load palette
-    PaletteInfo palette = loadPalette();
-    // check categories
-    List<CategoryInfo> categories = palette.getCategories();
-    assertThat(categories).hasSize(1);
-    {
-      CategoryInfo category = categories.get(0);
-      assertEquals("myID", category.getId());
-      assertEquals("myName", category.getName());
-      assertEquals("myDescription", category.getDescription());
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Export/Import
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link PaletteManager#exportTo(String)}.
-   */
-  public void test_exportTo() throws Exception {
-    PaletteManager manager = loadManager();
-    // use loaded palette
-    {
-      PaletteInfo palette = manager.getPalette();
-      // initially palette is empty
-      assertEquals(0, palette.getCategories().size());
-      // add category using command
-      manager.commands_add(new CategoryAddCommand("new id",
-          "new name",
-          "new description",
-          true,
-          true,
-          null));
-      manager.commands_write();
-      // has category
-      assertEquals(1, palette.getCategories().size());
-    }
-    // export commands
-    String exportPath;
-    {
-      File exportFile = File.createTempFile("wbpTests", ".xml");
-      exportPath = exportFile.getAbsolutePath();
-      manager.exportTo(exportPath);
-    }
-    // clear commands
-    {
-      manager.commands_clear();
-      manager.commands_write();
-      manager.reloadPalette();
-      // no categories
-      PaletteInfo palette = manager.getPalette();
-      assertEquals(0, palette.getCategories().size());
-    }
-    // import commands
-    {
-      manager.importFrom(exportPath);
-      manager.reloadPalette();
-      // no categories
-      PaletteInfo palette = manager.getPalette();
-      assertEquals(1, palette.getCategories().size());
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Category order
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for "next" attribute for "category" tag.
-   * <p>
-   * Simple case, when order of contributions is good, i.e. we encounter category before its "next"
-   * reference.
-   */
-  public void test_categoryOrder_nextCategory() throws Exception {
-    addPaletteExtension(new String[]{
-        "<category id='category_1' name='category 1'/>",
-        "<category id='category_2' name='category 2'/>",
-        "<category id='category_3' name='category 3' next='category_2'/>"});
-    PaletteInfo palette = loadPalette();
-    List<CategoryInfo> categories = palette.getCategories();
-    assertThat(categories).hasSize(3);
-    assertEquals("category_1", categories.get(0).getId());
-    assertEquals("category_3", categories.get(1).getId());
-    assertEquals("category_2", categories.get(2).getId());
-  }
-
-  /**
-   * Test for "next" attribute for "category" tag.
-   * <p>
-   * Complex case, when we first see category with "next" attribute and only then referenced
-   * category.
-   */
-  public void test_categoryOrder_nextCategory_2() throws Exception {
-    addPaletteExtension(
-        "palette_1",
-        new String[]{"<category id='category_3' name='category 3' next='category_2'/>"});
-    addPaletteExtension("palette_2", new String[]{
-        "<category id='category_1' name='category 1'/>",
-        "<category id='category_2' name='category 2'/>"});
-    try {
-      PaletteInfo palette = loadPalette();
-      List<CategoryInfo> categories = palette.getCategories();
-      assertThat(categories).hasSize(3);
-      assertEquals("category_1", categories.get(0).getId());
-      assertEquals("category_3", categories.get(1).getId());
-      assertEquals("category_2", categories.get(2).getId());
-    } finally {
-      removeToolkitExtension("palette_1");
-      removeToolkitExtension("palette_2");
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Palette contributions from "wbp-meta"
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Parsing for custom palette from project: default values for {@link ComponentEntryInfo}.
-   */
-  public void test_customPalette_project_1() throws Exception {
-    setFileContent(
-        "wbp-meta",
-        TOOLKIT_ID + ".wbp-palette.xml",
-        getSourceDQ(
-            "<palette>",
-            "  <category id='categoryId.1' name='name 1' description='desc 1'>",
-            "    <component class='org.eclipse.swt.widgets.Button'/>",
-            "    <component class='org.eclipse.swt.widgets.Text'/>",
-            "  </category>",
-            "  <category id='categoryId.2' name='name 1' description='desc 1' open='false'/>",
-            "</palette>"));
-    // load palette
-    PaletteInfo palette = loadPalette();
-    // categories
-    assertEquals(2, palette.getCategories().size());
-    {
-      CategoryInfo category = palette.getCategories().get(0);
-      assertEquals("categoryId.1", category.getId());
-      assertEquals("name 1", category.getName());
-      assertEquals("desc 1", category.getDescription());
-      assertTrue(category.isOpen());
-      // components
-      {
-        assertEquals(2, category.getEntries().size());
-        {
-          ComponentEntryInfo component = (ComponentEntryInfo) category.getEntries().get(0);
-          assertEquals("org.eclipse.swt.widgets.Button", component.getClassName());
-          assertEquals("categoryId.1 org.eclipse.swt.widgets.Button", component.getId());
-          assertTrue(component.isVisible());
-          // attributes that are updated only after initialize()
-          assertTrue(component.initialize(null, m_lastObject));
-          assertEquals("Button", component.getName());
-          assertEquals("Instances of this class represent a selectable user interface object"
-              + " that issues notification when pressed and released.", component.getDescription());
-        }
-        {
-          ComponentEntryInfo component = (ComponentEntryInfo) category.getEntries().get(1);
-          assertEquals("org.eclipse.swt.widgets.Text", component.getClassName());
-        }
-      }
-    }
-    {
-      CategoryInfo category = palette.getCategories().get(1);
-      assertEquals("categoryId.2", category.getId());
-      assertFalse(category.isOpen());
-    }
-  }
-
-  /**
-   * Parsing for custom palette from project: specific values for {@link ComponentEntryInfo}.
-   */
-  public void test_customPalette_project_2() throws Exception {
-    setFileContent(
-        "wbp-meta",
-        TOOLKIT_ID + ".wbp-palette.xml",
-        getSourceDQ(
-            "<palette>",
-            "  <category id='categoryId.1' name='name 1' description='desc 1'>",
-            "    <component id='myButton.id' class='org.eclipse.swt.widgets.Button' name='my name' description='my desc' visible='false'/>",
-            "  </category>",
-            "</palette>"));
-    // load palette
-    PaletteInfo palette = loadPalette();
-    CategoryInfo category = palette.getCategories().get(0);
-    // component
-    {
-      ComponentEntryInfo component = (ComponentEntryInfo) category.getEntries().get(0);
-      assertEquals("org.eclipse.swt.widgets.Button", component.getClassName());
-      assertEquals("myButton.id", component.getId());
-      assertEquals("my name", component.getName());
-      assertEquals("my desc", component.getDescription());
-      assertFalse(component.isVisible());
-    }
-  }
-
-  /**
-   * Parsing for custom palette from project: specific "creation id", using it for generated "id".
-   */
-  public void test_customPalette_project_3() throws Exception {
-    setFileContent(
-        "wbp-meta",
-        TOOLKIT_ID + ".wbp-palette.xml",
-        getSourceDQ(
-            "<palette>",
-            "  <category id='categoryId.1' name='name 1' description='desc 1'>",
-            "    <component creationId='creationId' class='org.eclipse.swt.widgets.Button'/>",
-            "  </category>",
-            "</palette>"));
-    // load palette
-    PaletteInfo palette = loadPalette();
-    CategoryInfo category = palette.getCategories().get(0);
-    // component
-    {
-      ComponentEntryInfo component = (ComponentEntryInfo) category.getEntries().get(0);
-      assertEquals("org.eclipse.swt.widgets.Button", component.getClassName());
-      assertEquals("categoryId.1 org.eclipse.swt.widgets.Button creationId", component.getId());
-    }
-  }
-
-  /**
-   * Parsing for custom palette from project: no component class, so exception.
-   */
-  public void test_customPalette_project_4() throws Exception {
-    setFileContent(
-        "wbp-meta",
-        TOOLKIT_ID + ".wbp-palette.xml",
-        getSourceDQ(
-            "<palette>",
-            "  <category id='categoryId.1' name='name 1' description='desc 1'>",
-            "    <component no-class-attribute='org.eclipse.swt.widgets.Button'/>",
-            "  </category>",
-            "</palette>"));
-    // load palette, exception expected :-)
-    PaletteInfo palette;
-    {
-      final boolean[] exceptionHappened = new boolean[1];
-      ILogListener logListener = new ILogListener() {
-        @Override
-        public void logging(IStatus status, String plugin) {
-          exceptionHappened[0] = true;
-          assertEquals(IStatus.ERROR, status.getSeverity());
-          assertEquals(DesignerPlugin.PLUGIN_ID, status.getPlugin());
-          assertEquals(IStatus.ERROR, status.getCode());
-        }
-      };
-      //
-      ILog log = DesignerPlugin.getDefault().getLog();
-      try {
-        log.addLogListener(logListener);
-        DesignerPlugin.setDisplayExceptionOnConsole(false);
-        //
-        palette = loadPalette();
-      } finally {
-        log.removeLogListener(logListener);
-        DesignerPlugin.setDisplayExceptionOnConsole(true);
-      }
-      // check that exception happened
-      assertTrue(exceptionHappened[0]);
-    }
-    // no class, so component entry not loaded
-    CategoryInfo category = palette.getCategories().get(0);
-    assertEquals(0, category.getEntries().size());
-  }
-
-  /**
-   * Parsing for custom palette from project: "component" outside of "category".
-   */
-  public void test_customPalette_project_5() throws Exception {
-    setFileContent(
-        "wbp-meta",
-        TOOLKIT_ID + ".wbp-palette.xml",
-        getSourceDQ(
-            "<palette>",
-            "  <category id='categoryId.1' name='name 1' description='desc 1'/>",
-            "  <component class='org.eclipse.swt.widgets.Button' category='categoryId.1'/>",
-            "</palette>"));
-    // load palette
-    PaletteInfo palette = loadPalette();
-    CategoryInfo category = palette.getCategories().get(0);
-    // component
-    {
-      ComponentEntryInfo component = (ComponentEntryInfo) category.getEntries().get(0);
-      assertEquals("org.eclipse.swt.widgets.Button", component.getClassName());
-    }
-  }
-
-  /**
-   * Parsing for custom palette from project: use also required projects.
-   */
-  @DisposeProjectAfter
-  public void test_customPalette_project_6() throws Exception {
-    // create new project "myProject"
-    TestProject myTestProject;
-    IJavaProject myJavaProject;
-    {
-      myTestProject = new TestProject("myProject");
-      myJavaProject = myTestProject.getJavaProject();
-      // create wbp-meta/palette
-      Path path = new Path("wbp-meta/" + TOOLKIT_ID + ".wbp-palette.xml");
-      setFileContent(
-          myJavaProject.getProject().getFile(path),
-          getSourceDQ(
-              "<palette>",
-              "  <category id='categoryId.1' name='name 1' description='desc 1'/>",
-              "</palette>"));
-    }
-    try {
-      // add reference of "myProject" from "TestProject"
-      ProjectUtils.requireProject(m_javaProject, myJavaProject);
-      // create palette for "TestProject"
-      setFileContent(
-          "wbp-meta",
-          TOOLKIT_ID + ".wbp-palette.xml",
-          getSourceDQ(
-              "<palette>",
-              "  <category id='categoryId.2' name='name 2' description='desc 2'/>",
-              "</palette>"));
-      // load palette from "TestProject", so "myProject" also used
-      PaletteInfo palette = loadPalette();
-      // check categories
-      assertEquals(2, palette.getCategories().size());
-      {
-        CategoryInfo category = palette.getCategories().get(0);
-        assertEquals("categoryId.1", category.getId());
-      }
-      {
-        CategoryInfo category = palette.getCategories().get(1);
-        assertEquals("categoryId.2", category.getId());
-      }
-    } finally {
-      myTestProject.dispose();
-    }
-  }
-
-  /**
-   * Parsing for custom palette from project: use "jar".
-   */
-  @DisposeProjectAfter
-  public void test_customPalette_project_7() throws Exception {
-    // add JAR with palette
-    {
-      String jarPath =
-          TestUtils.createTemporaryJar(
-              "wbp-meta/" + TOOLKIT_ID + ".wbp-palette.xml",
-              getSourceDQ(
-                  "<palette>",
-                  "  <category id='categoryId.1' name='name 1' description='desc 1'/>",
-                  "</palette>"));
-      ProjectUtils.addClasspathEntry(
-          m_javaProject,
-          JavaCore.newLibraryEntry(new Path(jarPath), null, null));
-    }
-    // palette in project
-    setFileContent(
-        "wbp-meta",
-        TOOLKIT_ID + ".wbp-palette.xml",
-        getSourceDQ(
-            "<palette>",
-            "  <category id='categoryId.2' name='name 2' description='desc 2'/>",
-            "</palette>"));
-    // load palette
-    PaletteInfo palette = loadPalette();
-    // check categories
-    assertEquals(2, palette.getCategories().size());
-    {
-      CategoryInfo category = palette.getCategories().get(0);
-      assertEquals("categoryId.1", category.getId());
-    }
-    {
-      CategoryInfo category = palette.getCategories().get(1);
-      assertEquals("categoryId.2", category.getId());
-    }
-  }
-
-  /**
-   * Test for "next" attribute for "category" tag.
-   */
-  public void test_customPalette_project_nextCategory() throws Exception {
-    addPaletteExtension("palette_1", new String[]{
-        "<category id='category_1' name='category_1'/>",
-        "<category id='category_2' name='category_2'/>"});
-    setFileContent(
-        "wbp-meta",
-        TOOLKIT_ID + ".wbp-palette.xml",
-        getSourceDQ(
-            "<!-- filler filler filler filler filler -->",
-            "<palette>",
-            "  <category id='fromProject' name='fromProject' next='category_2'/>",
-            "</palette>"));
-    try {
-      PaletteInfo palette = loadPalette();
-      List<CategoryInfo> categories = palette.getCategories();
-      assertThat(categories).hasSize(3);
-      assertEquals("category_1", categories.get(0).getId());
-      assertEquals("fromProject", categories.get(1).getId());
-      assertEquals("category_2", categories.get(2).getId());
-    } finally {
-      removeToolkitExtension("palette_1");
-    }
-  }
-
-  /**
-   * We should ignore exceptions during parsing custom palettes, just log them as warnings.
-   */
-  @DisposeProjectAfter
-  public void test_customPalette_project_whenOneFileMissing() throws Exception {
-    // create new project "myProject"
-    IJavaProject myJavaProject;
-    TestProject myTestProject;
-    {
-      myTestProject = new TestProject("myProject");
-      myJavaProject = myTestProject.getJavaProject();
-      // create wbp-meta/palette
-      {
-        Path path = new Path("wbp-meta/" + TOOLKIT_ID + ".wbp-palette.xml");
-        IFile file = myJavaProject.getProject().getFile(path);
-        setFileContent(
-            file,
-            getSource(
-                "<palette>",
-                "  <category id='categoryId.1' name='name 1' description='desc 1'/>",
-                "</palette>"));
-        // delete!
-        file.getLocation().toFile().delete();
-      }
-    }
-    try {
-      // add reference of "myProject" from "TestProject"
-      ProjectUtils.requireProject(m_javaProject, myJavaProject);
-      // create palette for "TestProject"
-      setFileContent(
-          "wbp-meta",
-          TOOLKIT_ID + ".wbp-palette.xml",
-          getSourceDQ(
-              "<palette>",
-              "  <category id='categoryId.2' name='name 2' description='desc 2'/>",
-              "</palette>"));
-      // load palette from "TestProject", so "myProject" also used
-      PaletteInfo palette = loadPalette();
-      // check categories: only ".2" category, because file with ".1" was deleted
-      assertThat(palette.getCategories()).hasSize(1);
-      {
-        CategoryInfo category = palette.getCategories().get(0);
-        assertEquals("categoryId.2", category.getId());
-      }
-      // ... file with ".1" was deleted in FS, but Eclipse does not know about this, so warning
-      {
-        List<EditorWarning> warnings = m_lastContext.getWarnings();
-        assertThat(warnings).hasSize(1);
-        EditorWarning warning = warnings.get(0);
-        assertThat(warning.getMessage()).contains("myProject/wbp-meta/test.toolkit.wbp-palette.xml");
-      }
-    } finally {
-      myTestProject.dispose();
-    }
-  }
-
-  /**
-   * Parsing for custom palette from project: no description in {@link ComponentEntryInfo}, so
-   * description from *.wbp-component.xml should be used.
-   */
-  public void test_customPalette_project_descriptionFromProject() throws Exception {
-    prepareMyComponent(new String[]{}, new String[]{
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<description>My description</description>"});
-    setFileContent(
-        "wbp-meta",
-        TOOLKIT_ID + ".wbp-palette.xml",
-        getSourceDQ(
-            "<palette>",
-            "  <category id='categoryId.1' name='name 1'>",
-            "    <component class='test.MyComponent'/>",
-            "  </category>",
-            "</palette>"));
-    waitForAutoBuild();
-    // load palette
-    PaletteInfo palette = loadPalette();
-    CategoryInfo category = palette.getCategories().get(0);
-    // component
-    {
-      ComponentEntryInfo component = (ComponentEntryInfo) category.getEntries().get(0);
-      assertEquals("test.MyComponent", component.getClassName());
-      assertEquals("categoryId.1 test.MyComponent", component.getId());
-      assertTrue(component.isVisible());
-      // attributes that are updated only after initialize()
-      assertTrue(component.initialize(null, m_lastObject));
-      assertEquals("MyComponent", component.getName());
-      assertEquals("My description", component.getDescription());
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Conditions support
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_componentCondition_true() throws Exception {
-    addPaletteExtension(new String[]{
-        "<category id='category' name='category'>",
-        "  <component class='org.eclipse.swt.widgets.Button' condition='version > 3.0'/>",
-        "</category>"});
-    // parse and configure EditorState
-    XmlObjectInfo panel = parseEmptyPanel();
-    m_lastContext.addVersions(ImmutableMap.<String, Object>of("version", "3.5"));
-    //
-    PaletteInfo palette = loadPalette(panel);
-    assertNoErrors();
-    CategoryInfo category = palette.getCategory("category");
-    assertThat(category.getEntries()).hasSize(1);
-  }
-
-  public void test_componentCondition_false() throws Exception {
-    addPaletteExtension(new String[]{
-        "<category id='category' name='category'>",
-        "  <component class='org.eclipse.swt.widgets.Button' condition='version > 3.0'/>",
-        "</category>"});
-    // parse and configure EditorState
-    XmlObjectInfo panel = parseEmptyPanel();
-    m_lastContext.addVersions(ImmutableMap.<String, Object>of("version", "2.1"));
-    //
-    PaletteInfo palette = loadPalette(panel);
-    assertNoErrors();
-    CategoryInfo category = palette.getCategory("category");
-    assertThat(category.getEntries()).isEmpty();
-  }
-
-  public void test_componentCondition_notBoolean() throws Exception {
-    addPaletteExtension(new String[]{
-        "<category id='category' name='category'>",
-        "  <component class='org.eclipse.swt.widgets.Button' condition='42'/>",
-        "</category>"});
-    // parse and configure EditorState
-    XmlObjectInfo panel = parseEmptyPanel();
-    m_lastContext.addVersions(ImmutableMap.of("version", "2.1"));
-    //
-    PaletteInfo palette = loadPalette(panel);
-    assertNoErrors();
-    CategoryInfo category = palette.getCategory("category");
-    assertThat(category.getEntries()).isEmpty();
-  }
-
-  /**
-   * Some entries are useful only in specific context.
-   */
-  public void test_componentCondition_useRootModel() throws Exception {
-    addPaletteExtension(new String[]{
-        "<category id='category' name='category'>",
-        "  <component class='org.eclipse.swt.widgets.Button'"
-            + " condition='rootModel.getObject() is org.eclipse.swt.widgets.Shell'/>",
-        "</category>"});
-    // parse
-    XmlObjectInfo panel = parseEmptyPanel();
-    refresh();
-    // load palette
-    PaletteInfo palette = loadPalette(panel);
-    assertNoErrors();
-    CategoryInfo category = palette.getCategory("category");
-    assertThat(category.getEntries()).hasSize(1);
-  }
-
-  public void test_componentCondition_invalid() throws Exception {
-    addPaletteExtension(new String[]{
-        "<category id='category' name='category'>",
-        "  <component class='org.eclipse.swt.widgets.Button' condition='!@#$%'/>",
-        "</category>"});
-    // parse and configure EditorState
-    XmlObjectInfo panel = parseEmptyPanel();
-    // invalid "condition", so no entry
-    DesignerPlugin.setDisplayExceptionOnConsole(false);
-    try {
-      PaletteInfo palette = loadPalette(panel);
-      CategoryInfo category = palette.getCategory("category");
-      assertThat(category.getEntries()).isEmpty();
-    } finally {
-      DesignerPlugin.setDisplayExceptionOnConsole(true);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // "condition" for "category"
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_categoryCondition_true() throws Exception {
-    addPaletteExtension(new String[]{"<category id='category' name='category' condition='true'/>"});
-    // parse
-    XmlObjectInfo panel = parseEmptyPanel();
-    PaletteInfo palette = loadPalette(panel);
-    assertNoErrors();
-    // one category
-    assertThat(palette.getCategories()).hasSize(1);
-  }
-
-  public void test_categoryCondition_false() throws Exception {
-    addPaletteExtension(new String[]{"<category id='category' name='category' condition='false'/>"});
-    // parse
-    XmlObjectInfo panel = parseEmptyPanel();
-    PaletteInfo palette = loadPalette(panel);
-    assertNoErrors();
-    // no category
-    assertThat(palette.getCategories()).isEmpty();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // "condition" for "palette"
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_paletteCondition_true() throws Exception {
-    addToolkitExtension(PALETTE_EXTENSION_ID, new String[]{
-        "<palette condition='true'>",
-        "  <category id='theID' name='category'/>",
-        "</palette>"});
-    // parse
-    XmlObjectInfo panel = parseEmptyPanel();
-    PaletteInfo palette = loadPalette(panel);
-    assertNoErrors();
-    // one category
-    assertThat(palette.getCategories()).hasSize(1);
-  }
-
-  public void test_paletteCondition_false() throws Exception {
-    addToolkitExtension(PALETTE_EXTENSION_ID, new String[]{
-        "<palette condition='false'>",
-        "  <category id='theID' name='category'/>",
-        "</palette>"});
-    // parse
-    XmlObjectInfo panel = parseEmptyPanel();
-    PaletteInfo palette = loadPalette(panel);
-    assertNoErrors();
-    // no categories
-    assertThat(palette.getCategories()).isEmpty();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// PaletteManager
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test that {@link PaletteManager} can load palette, including dynamically added extensions.
+	 */
+	public void test_dynamic() throws Exception {
+		XmlObjectInfo panel = parseEmptyPanel();
+		PaletteManager manager = new PaletteManager(panel, TOOLKIT_ID);
+		// access
+		assertEquals(TOOLKIT_ID, manager.getToolkitId());
+		// no palette before loading
+		assertNull(manager.getPalette());
+		// no palette contributions for this toolkit yet
+		{
+			// load palette
+			manager.reloadPalette();
+			// check palette
+			PaletteInfo palette = manager.getPalette();
+			assertNotNull(palette);
+			assertEquals(0, palette.getCategories().size());
+		}
+		// add dynamic extension and check that palette uses it
+		{
+			addPaletteExtension(new String[]{
+					"<category id='category_1' name='category 1' description='description 1'>",
+					"  <component class='org.eclipse.swt.widgets.Button'/>",
+			"</category>"});
+			try {
+				// load palette
+				manager.reloadPalette();
+				// check palette
+				PaletteInfo palette = manager.getPalette();
+				assertNotNull(palette);
+				// check category
+				assertEquals(1, palette.getCategories().size());
+				CategoryInfo category = palette.getCategory("category_1");
+				// check component
+				assertEquals(1, category.getEntries().size());
+				ComponentEntryInfo componentEntry = (ComponentEntryInfo) category.getEntries().get(0);
+				assertEquals("category_1 org.eclipse.swt.widgets.Button", componentEntry.getId());
+			} finally {
+				removeToolkitExtension();
+			}
+		}
+		// dynamic extension was removed, so again empty palette
+		{
+			// load palette
+			manager.reloadPalette();
+			// check palette
+			PaletteInfo palette = manager.getPalette();
+			assertNotNull(palette);
+			assertEquals(0, palette.getCategories().size());
+		}
+	}
+
+	/**
+	 * Test for {@link PaletteManager#getPalette()}.
+	 */
+	public void test_getPaletteCopy() throws Exception {
+		addPaletteExtension(new String[]{"<category id='category_1' name='category 1'/>"});
+		XmlObjectInfo panel = parseEmptyPanel();
+		PaletteManager manager = new PaletteManager(panel, TOOLKIT_ID);
+		// load palette
+		PaletteInfo palette;
+		{
+			manager.reloadPalette();
+			palette = manager.getPalette();
+			assertEquals(1, palette.getCategories().size());
+			assertNotNull(palette.getCategory("category_1"));
+		}
+		// get palette copy, it is equal, but not same
+		PaletteInfo paletteCopy = manager.getPaletteCopy();
+		assertNotSame(palette, paletteCopy);
+		assertEquals(1, paletteCopy.getCategories().size());
+		assertNotNull(paletteCopy.getCategory("category_1"));
+	}
+
+	/**
+	 * Test for parsing "x-entry" element.
+	 */
+	public void test_parse_xEntry() throws Exception {
+		addPaletteExtension(new String[]{
+				"<category id='category_1' name='category 1'>",
+				"  <x-entry id='myId' name='myName' "
+						+ "class='org.eclipse.wb.internal.core.xml.editor.palette.model.SelectionToolEntryInfo'/>",
+		"</category>"});
+		EntryInfo entry = loadSingleEntry("myId");
+		assertEquals("myName", entry.getName());
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Outside of category
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Entry outside of category, has "category" attribute - OK.
+	 */
+	public void test_parse_outsideCategory() throws Exception {
+		addPaletteExtension(new String[]{
+				"<category id='category_1' name='category 1'/>",
+		"<component class='org.eclipse.swt.widgets.Button' category='category_1'/>"});
+		PaletteInfo palette = loadPalette();
+		// check for entry
+		CategoryInfo category = palette.getCategory("category_1");
+		assertEquals(1, category.getEntries().size());
+	}
+
+	/**
+	 * Entry outside of category, and no category - error.
+	 */
+	public void test_parse_outsideCategory_noCategory() throws Exception {
+		addPaletteExtension(new String[]{
+				"<category id='category_1' name='category 1'/>",
+		"<component class='org.eclipse.swt.widgets.Button'/>"});
+		DesignerPlugin.setDisplayExceptionOnConsole(false);
+		try {
+			PaletteInfo palette = loadPalette();
+			// no entry expected
+			CategoryInfo category = palette.getCategory("category_1");
+			assertEquals(0, category.getEntries().size());
+		} finally {
+			DesignerPlugin.setDisplayExceptionOnConsole(true);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_command_1() throws Exception {
+		PaletteManager manager = loadManager();
+		// use loaded palette
+		{
+			PaletteInfo palette = manager.getPalette();
+			// initially palette is empty
+			assertEquals(0, palette.getCategories().size());
+			// add category using command
+			manager.commands_add(new CategoryAddCommand("new id",
+					"new name",
+					"new description",
+					true,
+					true,
+					null));
+			manager.commands_write();
+			// check new category
+			assertEquals(1, palette.getCategories().size());
+			CategoryInfo category = palette.getCategory("new id");
+			assertEquals("new name", category.getName());
+			assertEquals("new description", category.getDescription());
+		}
+		// reload palette, but command was written, so palette still has new category
+		{
+			manager.reloadPalette();
+			PaletteInfo palette = manager.getPalette();
+			assertEquals(1, palette.getCategories().size());
+			assertNotNull(palette.getCategory("new id"));
+		}
+	}
+
+	/**
+	 * This method is invoked after {@link #test_command_2()}, so we check here that commands are not
+	 * kept between tests (test methods).
+	 */
+	public void test_command_2() throws Exception {
+		PaletteManager manager = loadManager();
+		PaletteInfo palette = manager.getPalette();
+		assertEquals(0, palette.getCategories().size());
+	}
+
+	/**
+	 * Sometimes users want to use standard palette for all developers of project. So, they want to
+	 * share palette commands. Best way to do this - save them into project and use CVS.
+	 */
+	public void test_commandsInProject() throws Exception {
+		String commandsFilePath = "wbp-meta/" + TOOLKIT_ID + ".wbp-palette-commands.xml";
+		setFileContent(commandsFilePath, "");
+		// prepare manager
+		PaletteManager manager = loadManager();
+		// use loaded palette
+		{
+			PaletteInfo palette = manager.getPalette();
+			// initially palette is empty
+			assertEquals(0, palette.getCategories().size());
+			// add category using command
+			manager.commands_add(new CategoryAddCommand("new id",
+					"new name",
+					"new description",
+					true,
+					true,
+					null));
+			manager.commands_write();
+			// check new category
+			assertEquals(1, palette.getCategories().size());
+			CategoryInfo category = palette.getCategory("new id");
+			assertEquals("new name", category.getName());
+			assertEquals("new description", category.getDescription());
+		}
+		// check that palette commands saved into project
+		{
+			String commands = getFileContent(commandsFilePath);
+			assertThat(commands).isNotEqualTo("<commands/>");
+		}
+		// reload palette, but command was written, so palette still has new category
+		{
+			manager.reloadPalette();
+			PaletteInfo palette = manager.getPalette();
+			assertEquals(1, palette.getCategories().size());
+			assertNotNull(palette.getCategory("new id"));
+		}
+	}
+
+	/**
+	 * We should apply command files from Jar files.
+	 */
+	@DisposeProjectAfter
+	public void test_applyCommandsFromJar() throws Exception {
+		// add JAR with commands
+		{
+			String jarPath =
+					TestUtils.createTemporaryJar(
+							"wbp-meta/" + TOOLKIT_ID + ".wbp-palette-commands.xml",
+							getSourceDQ(
+									"<commands>",
+									"  <addCategory id='myID' name='myName' description='myDescription'/>",
+									"</commands>"));
+			ProjectUtils.addExternalJar(m_javaProject, jarPath, null);
+		}
+		// load palette
+		PaletteInfo palette = loadPalette();
+		// check categories
+		List<CategoryInfo> categories = palette.getCategories();
+		assertThat(categories).hasSize(1);
+		{
+			CategoryInfo category = categories.get(0);
+			assertEquals("myID", category.getId());
+			assertEquals("myName", category.getName());
+			assertEquals("myDescription", category.getDescription());
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Export/Import
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link PaletteManager#exportTo(String)}.
+	 */
+	public void test_exportTo() throws Exception {
+		PaletteManager manager = loadManager();
+		// use loaded palette
+		{
+			PaletteInfo palette = manager.getPalette();
+			// initially palette is empty
+			assertEquals(0, palette.getCategories().size());
+			// add category using command
+			manager.commands_add(new CategoryAddCommand("new id",
+					"new name",
+					"new description",
+					true,
+					true,
+					null));
+			manager.commands_write();
+			// has category
+			assertEquals(1, palette.getCategories().size());
+		}
+		// export commands
+		String exportPath;
+		{
+			File exportFile = File.createTempFile("wbpTests", ".xml");
+			exportPath = exportFile.getAbsolutePath();
+			manager.exportTo(exportPath);
+		}
+		// clear commands
+		{
+			manager.commands_clear();
+			manager.commands_write();
+			manager.reloadPalette();
+			// no categories
+			PaletteInfo palette = manager.getPalette();
+			assertEquals(0, palette.getCategories().size());
+		}
+		// import commands
+		{
+			manager.importFrom(exportPath);
+			manager.reloadPalette();
+			// no categories
+			PaletteInfo palette = manager.getPalette();
+			assertEquals(1, palette.getCategories().size());
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Category order
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for "next" attribute for "category" tag.
+	 * <p>
+	 * Simple case, when order of contributions is good, i.e. we encounter category before its "next"
+	 * reference.
+	 */
+	public void test_categoryOrder_nextCategory() throws Exception {
+		addPaletteExtension(new String[]{
+				"<category id='category_1' name='category 1'/>",
+				"<category id='category_2' name='category 2'/>",
+		"<category id='category_3' name='category 3' next='category_2'/>"});
+		PaletteInfo palette = loadPalette();
+		List<CategoryInfo> categories = palette.getCategories();
+		assertThat(categories).hasSize(3);
+		assertEquals("category_1", categories.get(0).getId());
+		assertEquals("category_3", categories.get(1).getId());
+		assertEquals("category_2", categories.get(2).getId());
+	}
+
+	/**
+	 * Test for "next" attribute for "category" tag.
+	 * <p>
+	 * Complex case, when we first see category with "next" attribute and only then referenced
+	 * category.
+	 */
+	public void test_categoryOrder_nextCategory_2() throws Exception {
+		addPaletteExtension(
+				"palette_1",
+				new String[]{"<category id='category_3' name='category 3' next='category_2'/>"});
+		addPaletteExtension("palette_2", new String[]{
+				"<category id='category_1' name='category 1'/>",
+		"<category id='category_2' name='category 2'/>"});
+		try {
+			PaletteInfo palette = loadPalette();
+			List<CategoryInfo> categories = palette.getCategories();
+			assertThat(categories).hasSize(3);
+			assertEquals("category_1", categories.get(0).getId());
+			assertEquals("category_3", categories.get(1).getId());
+			assertEquals("category_2", categories.get(2).getId());
+		} finally {
+			removeToolkitExtension("palette_1");
+			removeToolkitExtension("palette_2");
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Palette contributions from "wbp-meta"
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Parsing for custom palette from project: default values for {@link ComponentEntryInfo}.
+	 */
+	public void test_customPalette_project_1() throws Exception {
+		setFileContent(
+				"wbp-meta",
+				TOOLKIT_ID + ".wbp-palette.xml",
+				getSourceDQ(
+						"<palette>",
+						"  <category id='categoryId.1' name='name 1' description='desc 1'>",
+						"    <component class='org.eclipse.swt.widgets.Button'/>",
+						"    <component class='org.eclipse.swt.widgets.Text'/>",
+						"  </category>",
+						"  <category id='categoryId.2' name='name 1' description='desc 1' open='false'/>",
+						"</palette>"));
+		// load palette
+		PaletteInfo palette = loadPalette();
+		// categories
+		assertEquals(2, palette.getCategories().size());
+		{
+			CategoryInfo category = palette.getCategories().get(0);
+			assertEquals("categoryId.1", category.getId());
+			assertEquals("name 1", category.getName());
+			assertEquals("desc 1", category.getDescription());
+			assertTrue(category.isOpen());
+			// components
+			{
+				assertEquals(2, category.getEntries().size());
+				{
+					ComponentEntryInfo component = (ComponentEntryInfo) category.getEntries().get(0);
+					assertEquals("org.eclipse.swt.widgets.Button", component.getClassName());
+					assertEquals("categoryId.1 org.eclipse.swt.widgets.Button", component.getId());
+					assertTrue(component.isVisible());
+					// attributes that are updated only after initialize()
+					assertTrue(component.initialize(null, m_lastObject));
+					assertEquals("Button", component.getName());
+					assertEquals("Instances of this class represent a selectable user interface object"
+							+ " that issues notification when pressed and released.", component.getDescription());
+				}
+				{
+					ComponentEntryInfo component = (ComponentEntryInfo) category.getEntries().get(1);
+					assertEquals("org.eclipse.swt.widgets.Text", component.getClassName());
+				}
+			}
+		}
+		{
+			CategoryInfo category = palette.getCategories().get(1);
+			assertEquals("categoryId.2", category.getId());
+			assertFalse(category.isOpen());
+		}
+	}
+
+	/**
+	 * Parsing for custom palette from project: specific values for {@link ComponentEntryInfo}.
+	 */
+	public void test_customPalette_project_2() throws Exception {
+		setFileContent(
+				"wbp-meta",
+				TOOLKIT_ID + ".wbp-palette.xml",
+				getSourceDQ(
+						"<palette>",
+						"  <category id='categoryId.1' name='name 1' description='desc 1'>",
+						"    <component id='myButton.id' class='org.eclipse.swt.widgets.Button' name='my name' description='my desc' visible='false'/>",
+						"  </category>",
+						"</palette>"));
+		// load palette
+		PaletteInfo palette = loadPalette();
+		CategoryInfo category = palette.getCategories().get(0);
+		// component
+		{
+			ComponentEntryInfo component = (ComponentEntryInfo) category.getEntries().get(0);
+			assertEquals("org.eclipse.swt.widgets.Button", component.getClassName());
+			assertEquals("myButton.id", component.getId());
+			assertEquals("my name", component.getName());
+			assertEquals("my desc", component.getDescription());
+			assertFalse(component.isVisible());
+		}
+	}
+
+	/**
+	 * Parsing for custom palette from project: specific "creation id", using it for generated "id".
+	 */
+	public void test_customPalette_project_3() throws Exception {
+		setFileContent(
+				"wbp-meta",
+				TOOLKIT_ID + ".wbp-palette.xml",
+				getSourceDQ(
+						"<palette>",
+						"  <category id='categoryId.1' name='name 1' description='desc 1'>",
+						"    <component creationId='creationId' class='org.eclipse.swt.widgets.Button'/>",
+						"  </category>",
+						"</palette>"));
+		// load palette
+		PaletteInfo palette = loadPalette();
+		CategoryInfo category = palette.getCategories().get(0);
+		// component
+		{
+			ComponentEntryInfo component = (ComponentEntryInfo) category.getEntries().get(0);
+			assertEquals("org.eclipse.swt.widgets.Button", component.getClassName());
+			assertEquals("categoryId.1 org.eclipse.swt.widgets.Button creationId", component.getId());
+		}
+	}
+
+	/**
+	 * Parsing for custom palette from project: no component class, so exception.
+	 */
+	public void test_customPalette_project_4() throws Exception {
+		setFileContent(
+				"wbp-meta",
+				TOOLKIT_ID + ".wbp-palette.xml",
+				getSourceDQ(
+						"<palette>",
+						"  <category id='categoryId.1' name='name 1' description='desc 1'>",
+						"    <component no-class-attribute='org.eclipse.swt.widgets.Button'/>",
+						"  </category>",
+						"</palette>"));
+		// load palette, exception expected :-)
+		PaletteInfo palette;
+		{
+			final boolean[] exceptionHappened = new boolean[1];
+			ILogListener logListener = new ILogListener() {
+				@Override
+				public void logging(IStatus status, String plugin) {
+					exceptionHappened[0] = true;
+					assertEquals(IStatus.ERROR, status.getSeverity());
+					assertEquals(DesignerPlugin.PLUGIN_ID, status.getPlugin());
+					assertEquals(IStatus.ERROR, status.getCode());
+				}
+			};
+			//
+			ILog log = DesignerPlugin.getDefault().getLog();
+			try {
+				log.addLogListener(logListener);
+				DesignerPlugin.setDisplayExceptionOnConsole(false);
+				//
+				palette = loadPalette();
+			} finally {
+				log.removeLogListener(logListener);
+				DesignerPlugin.setDisplayExceptionOnConsole(true);
+			}
+			// check that exception happened
+			assertTrue(exceptionHappened[0]);
+		}
+		// no class, so component entry not loaded
+		CategoryInfo category = palette.getCategories().get(0);
+		assertEquals(0, category.getEntries().size());
+	}
+
+	/**
+	 * Parsing for custom palette from project: "component" outside of "category".
+	 */
+	public void test_customPalette_project_5() throws Exception {
+		setFileContent(
+				"wbp-meta",
+				TOOLKIT_ID + ".wbp-palette.xml",
+				getSourceDQ(
+						"<palette>",
+						"  <category id='categoryId.1' name='name 1' description='desc 1'/>",
+						"  <component class='org.eclipse.swt.widgets.Button' category='categoryId.1'/>",
+						"</palette>"));
+		// load palette
+		PaletteInfo palette = loadPalette();
+		CategoryInfo category = palette.getCategories().get(0);
+		// component
+		{
+			ComponentEntryInfo component = (ComponentEntryInfo) category.getEntries().get(0);
+			assertEquals("org.eclipse.swt.widgets.Button", component.getClassName());
+		}
+	}
+
+	/**
+	 * Parsing for custom palette from project: use also required projects.
+	 */
+	@DisposeProjectAfter
+	public void test_customPalette_project_6() throws Exception {
+		// create new project "myProject"
+		TestProject myTestProject;
+		IJavaProject myJavaProject;
+		{
+			myTestProject = new TestProject("myProject");
+			myJavaProject = myTestProject.getJavaProject();
+			// create wbp-meta/palette
+			Path path = new Path("wbp-meta/" + TOOLKIT_ID + ".wbp-palette.xml");
+			setFileContent(
+					myJavaProject.getProject().getFile(path),
+					getSourceDQ(
+							"<palette>",
+							"  <category id='categoryId.1' name='name 1' description='desc 1'/>",
+							"</palette>"));
+		}
+		try {
+			// add reference of "myProject" from "TestProject"
+			ProjectUtils.requireProject(m_javaProject, myJavaProject);
+			// create palette for "TestProject"
+			setFileContent(
+					"wbp-meta",
+					TOOLKIT_ID + ".wbp-palette.xml",
+					getSourceDQ(
+							"<palette>",
+							"  <category id='categoryId.2' name='name 2' description='desc 2'/>",
+							"</palette>"));
+			// load palette from "TestProject", so "myProject" also used
+			PaletteInfo palette = loadPalette();
+			// check categories
+			assertEquals(2, palette.getCategories().size());
+			{
+				CategoryInfo category = palette.getCategories().get(0);
+				assertEquals("categoryId.1", category.getId());
+			}
+			{
+				CategoryInfo category = palette.getCategories().get(1);
+				assertEquals("categoryId.2", category.getId());
+			}
+		} finally {
+			myTestProject.dispose();
+		}
+	}
+
+	/**
+	 * Parsing for custom palette from project: use "jar".
+	 */
+	@DisposeProjectAfter
+	public void test_customPalette_project_7() throws Exception {
+		// add JAR with palette
+		{
+			String jarPath =
+					TestUtils.createTemporaryJar(
+							"wbp-meta/" + TOOLKIT_ID + ".wbp-palette.xml",
+							getSourceDQ(
+									"<palette>",
+									"  <category id='categoryId.1' name='name 1' description='desc 1'/>",
+									"</palette>"));
+			ProjectUtils.addClasspathEntry(
+					m_javaProject,
+					JavaCore.newLibraryEntry(new Path(jarPath), null, null));
+		}
+		// palette in project
+		setFileContent(
+				"wbp-meta",
+				TOOLKIT_ID + ".wbp-palette.xml",
+				getSourceDQ(
+						"<palette>",
+						"  <category id='categoryId.2' name='name 2' description='desc 2'/>",
+						"</palette>"));
+		// load palette
+		PaletteInfo palette = loadPalette();
+		// check categories
+		assertEquals(2, palette.getCategories().size());
+		{
+			CategoryInfo category = palette.getCategories().get(0);
+			assertEquals("categoryId.1", category.getId());
+		}
+		{
+			CategoryInfo category = palette.getCategories().get(1);
+			assertEquals("categoryId.2", category.getId());
+		}
+	}
+
+	/**
+	 * Test for "next" attribute for "category" tag.
+	 */
+	public void test_customPalette_project_nextCategory() throws Exception {
+		addPaletteExtension("palette_1", new String[]{
+				"<category id='category_1' name='category_1'/>",
+		"<category id='category_2' name='category_2'/>"});
+		setFileContent(
+				"wbp-meta",
+				TOOLKIT_ID + ".wbp-palette.xml",
+				getSourceDQ(
+						"<!-- filler filler filler filler filler -->",
+						"<palette>",
+						"  <category id='fromProject' name='fromProject' next='category_2'/>",
+						"</palette>"));
+		try {
+			PaletteInfo palette = loadPalette();
+			List<CategoryInfo> categories = palette.getCategories();
+			assertThat(categories).hasSize(3);
+			assertEquals("category_1", categories.get(0).getId());
+			assertEquals("fromProject", categories.get(1).getId());
+			assertEquals("category_2", categories.get(2).getId());
+		} finally {
+			removeToolkitExtension("palette_1");
+		}
+	}
+
+	/**
+	 * We should ignore exceptions during parsing custom palettes, just log them as warnings.
+	 */
+	@DisposeProjectAfter
+	public void test_customPalette_project_whenOneFileMissing() throws Exception {
+		// create new project "myProject"
+		IJavaProject myJavaProject;
+		TestProject myTestProject;
+		{
+			myTestProject = new TestProject("myProject");
+			myJavaProject = myTestProject.getJavaProject();
+			// create wbp-meta/palette
+			{
+				Path path = new Path("wbp-meta/" + TOOLKIT_ID + ".wbp-palette.xml");
+				IFile file = myJavaProject.getProject().getFile(path);
+				setFileContent(
+						file,
+						getSource(
+								"<palette>",
+								"  <category id='categoryId.1' name='name 1' description='desc 1'/>",
+								"</palette>"));
+				// delete!
+				file.getLocation().toFile().delete();
+			}
+		}
+		try {
+			// add reference of "myProject" from "TestProject"
+			ProjectUtils.requireProject(m_javaProject, myJavaProject);
+			// create palette for "TestProject"
+			setFileContent(
+					"wbp-meta",
+					TOOLKIT_ID + ".wbp-palette.xml",
+					getSourceDQ(
+							"<palette>",
+							"  <category id='categoryId.2' name='name 2' description='desc 2'/>",
+							"</palette>"));
+			// load palette from "TestProject", so "myProject" also used
+			PaletteInfo palette = loadPalette();
+			// check categories: only ".2" category, because file with ".1" was deleted
+			assertThat(palette.getCategories()).hasSize(1);
+			{
+				CategoryInfo category = palette.getCategories().get(0);
+				assertEquals("categoryId.2", category.getId());
+			}
+			// ... file with ".1" was deleted in FS, but Eclipse does not know about this, so warning
+			{
+				List<EditorWarning> warnings = m_lastContext.getWarnings();
+				assertThat(warnings).hasSize(1);
+				EditorWarning warning = warnings.get(0);
+				assertThat(warning.getMessage()).contains("myProject/wbp-meta/test.toolkit.wbp-palette.xml");
+			}
+		} finally {
+			myTestProject.dispose();
+		}
+	}
+
+	/**
+	 * Parsing for custom palette from project: no description in {@link ComponentEntryInfo}, so
+	 * description from *.wbp-component.xml should be used.
+	 */
+	public void test_customPalette_project_descriptionFromProject() throws Exception {
+		prepareMyComponent(new String[]{}, new String[]{
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+		"<description>My description</description>"});
+		setFileContent(
+				"wbp-meta",
+				TOOLKIT_ID + ".wbp-palette.xml",
+				getSourceDQ(
+						"<palette>",
+						"  <category id='categoryId.1' name='name 1'>",
+						"    <component class='test.MyComponent'/>",
+						"  </category>",
+						"</palette>"));
+		waitForAutoBuild();
+		// load palette
+		PaletteInfo palette = loadPalette();
+		CategoryInfo category = palette.getCategories().get(0);
+		// component
+		{
+			ComponentEntryInfo component = (ComponentEntryInfo) category.getEntries().get(0);
+			assertEquals("test.MyComponent", component.getClassName());
+			assertEquals("categoryId.1 test.MyComponent", component.getId());
+			assertTrue(component.isVisible());
+			// attributes that are updated only after initialize()
+			assertTrue(component.initialize(null, m_lastObject));
+			assertEquals("MyComponent", component.getName());
+			assertEquals("My description", component.getDescription());
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Conditions support
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_componentCondition_true() throws Exception {
+		addPaletteExtension(new String[]{
+				"<category id='category' name='category'>",
+				"  <component class='org.eclipse.swt.widgets.Button' condition='version > 3.0'/>",
+		"</category>"});
+		// parse and configure EditorState
+		XmlObjectInfo panel = parseEmptyPanel();
+		m_lastContext.addVersions(ImmutableMap.<String, Object>of("version", "3.5"));
+		//
+		PaletteInfo palette = loadPalette(panel);
+		assertNoErrors();
+		CategoryInfo category = palette.getCategory("category");
+		assertThat(category.getEntries()).hasSize(1);
+	}
+
+	public void test_componentCondition_false() throws Exception {
+		addPaletteExtension(new String[]{
+				"<category id='category' name='category'>",
+				"  <component class='org.eclipse.swt.widgets.Button' condition='version > 3.0'/>",
+		"</category>"});
+		// parse and configure EditorState
+		XmlObjectInfo panel = parseEmptyPanel();
+		m_lastContext.addVersions(ImmutableMap.<String, Object>of("version", "2.1"));
+		//
+		PaletteInfo palette = loadPalette(panel);
+		assertNoErrors();
+		CategoryInfo category = palette.getCategory("category");
+		assertThat(category.getEntries()).isEmpty();
+	}
+
+	public void test_componentCondition_notBoolean() throws Exception {
+		addPaletteExtension(new String[]{
+				"<category id='category' name='category'>",
+				"  <component class='org.eclipse.swt.widgets.Button' condition='42'/>",
+		"</category>"});
+		// parse and configure EditorState
+		XmlObjectInfo panel = parseEmptyPanel();
+		m_lastContext.addVersions(ImmutableMap.of("version", "2.1"));
+		//
+		PaletteInfo palette = loadPalette(panel);
+		assertNoErrors();
+		CategoryInfo category = palette.getCategory("category");
+		assertThat(category.getEntries()).isEmpty();
+	}
+
+	/**
+	 * Some entries are useful only in specific context.
+	 */
+	public void test_componentCondition_useRootModel() throws Exception {
+		addPaletteExtension(new String[]{
+				"<category id='category' name='category'>",
+				"  <component class='org.eclipse.swt.widgets.Button'"
+						+ " condition='rootModel.getObject() is org.eclipse.swt.widgets.Shell'/>",
+		"</category>"});
+		// parse
+		XmlObjectInfo panel = parseEmptyPanel();
+		refresh();
+		// load palette
+		PaletteInfo palette = loadPalette(panel);
+		assertNoErrors();
+		CategoryInfo category = palette.getCategory("category");
+		assertThat(category.getEntries()).hasSize(1);
+	}
+
+	public void test_componentCondition_invalid() throws Exception {
+		addPaletteExtension(new String[]{
+				"<category id='category' name='category'>",
+				"  <component class='org.eclipse.swt.widgets.Button' condition='!@#$%'/>",
+		"</category>"});
+		// parse and configure EditorState
+		XmlObjectInfo panel = parseEmptyPanel();
+		// invalid "condition", so no entry
+		DesignerPlugin.setDisplayExceptionOnConsole(false);
+		try {
+			PaletteInfo palette = loadPalette(panel);
+			CategoryInfo category = palette.getCategory("category");
+			assertThat(category.getEntries()).isEmpty();
+		} finally {
+			DesignerPlugin.setDisplayExceptionOnConsole(true);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// "condition" for "category"
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_categoryCondition_true() throws Exception {
+		addPaletteExtension(new String[]{"<category id='category' name='category' condition='true'/>"});
+		// parse
+		XmlObjectInfo panel = parseEmptyPanel();
+		PaletteInfo palette = loadPalette(panel);
+		assertNoErrors();
+		// one category
+		assertThat(palette.getCategories()).hasSize(1);
+	}
+
+	public void test_categoryCondition_false() throws Exception {
+		addPaletteExtension(new String[]{"<category id='category' name='category' condition='false'/>"});
+		// parse
+		XmlObjectInfo panel = parseEmptyPanel();
+		PaletteInfo palette = loadPalette(panel);
+		assertNoErrors();
+		// no category
+		assertThat(palette.getCategories()).isEmpty();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// "condition" for "palette"
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_paletteCondition_true() throws Exception {
+		addToolkitExtension(PALETTE_EXTENSION_ID, new String[]{
+				"<palette condition='true'>",
+				"  <category id='theID' name='category'/>",
+		"</palette>"});
+		// parse
+		XmlObjectInfo panel = parseEmptyPanel();
+		PaletteInfo palette = loadPalette(panel);
+		assertNoErrors();
+		// one category
+		assertThat(palette.getCategories()).hasSize(1);
+	}
+
+	public void test_paletteCondition_false() throws Exception {
+		addToolkitExtension(PALETTE_EXTENSION_ID, new String[]{
+				"<palette condition='false'>",
+				"  <category id='theID' name='category'/>",
+		"</palette>"});
+		// parse
+		XmlObjectInfo panel = parseEmptyPanel();
+		PaletteInfo palette = loadPalette(panel);
+		assertNoErrors();
+		// no categories
+		assertThat(palette.getCategories()).isEmpty();
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/PaletteTests.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/PaletteTests.java
index 1115f5211..54e736b3f 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/PaletteTests.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/PaletteTests.java
@@ -23,23 +23,23 @@
  * @author scheglov_ke
  */
 public class PaletteTests extends DesignerSuiteTests {
-  public static Test suite() {
-    TestSuite suite = new TestSuite("org.eclipse.wb.xml.palette");
-    suite.addTest(createSingleSuite(IPaletteSiteTest.class));
-    suite.addTest(createSingleSuite(AttributesProvidersTest.class));
-    suite.addTest(createSingleSuite(AbstractElementInfoTest.class));
-    suite.addTest(createSingleSuite(EntryInfoTest.class));
-    suite.addTest(createSingleSuite(ToolEntryInfoTest.class));
-    suite.addTest(createSingleSuite(PaletteInfoTest.class));
-    suite.addTest(createSingleSuite(CategoryInfoTest.class));
-    suite.addTest(createSingleSuite(SelectionToolEntryInfoTest.class));
-    suite.addTest(createSingleSuite(MarqueeSelectionToolEntryInfoTest.class));
-    suite.addTest(createSingleSuite(ChooseComponentEntryInfoTest.class));
-    suite.addTest(createSingleSuite(ComponentEntryInfoTest.class));
-    suite.addTest(createSingleSuite(PaletteManagerTest.class));
-    suite.addTest(createSingleSuite(CategoryCommandsTest.class));
-    suite.addTest(createSingleSuite(ComponentCommandsTest.class));
-    suite.addTest(PaletteUiTests.suite());
-    return suite;
-  }
+	public static Test suite() {
+		TestSuite suite = new TestSuite("org.eclipse.wb.xml.palette");
+		suite.addTest(createSingleSuite(IPaletteSiteTest.class));
+		suite.addTest(createSingleSuite(AttributesProvidersTest.class));
+		suite.addTest(createSingleSuite(AbstractElementInfoTest.class));
+		suite.addTest(createSingleSuite(EntryInfoTest.class));
+		suite.addTest(createSingleSuite(ToolEntryInfoTest.class));
+		suite.addTest(createSingleSuite(PaletteInfoTest.class));
+		suite.addTest(createSingleSuite(CategoryInfoTest.class));
+		suite.addTest(createSingleSuite(SelectionToolEntryInfoTest.class));
+		suite.addTest(createSingleSuite(MarqueeSelectionToolEntryInfoTest.class));
+		suite.addTest(createSingleSuite(ChooseComponentEntryInfoTest.class));
+		suite.addTest(createSingleSuite(ComponentEntryInfoTest.class));
+		suite.addTest(createSingleSuite(PaletteManagerTest.class));
+		suite.addTest(createSingleSuite(CategoryCommandsTest.class));
+		suite.addTest(createSingleSuite(ComponentCommandsTest.class));
+		suite.addTest(PaletteUiTests.suite());
+		return suite;
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/SelectionToolEntryInfoTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/SelectionToolEntryInfoTest.java
index fa954d931..b56052677 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/SelectionToolEntryInfoTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/SelectionToolEntryInfoTest.java
@@ -20,10 +20,10 @@
  * @author scheglov_ke
  */
 public class SelectionToolEntryInfoTest extends DesignerTestCase {
-  public void test() throws Exception {
-    SelectionToolEntryInfo entry = new SelectionToolEntryInfo();
-    assertEquals("Selection", entry.getName());
-    assertNotNull(entry.getIcon());
-    assertInstanceOf(SelectionTool.class, entry.createTool());
-  }
+	public void test() throws Exception {
+		SelectionToolEntryInfo entry = new SelectionToolEntryInfo();
+		assertEquals("Selection", entry.getName());
+		assertNotNull(entry.getIcon());
+		assertInstanceOf(SelectionTool.class, entry.createTool());
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/ToolEntryInfoTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/ToolEntryInfoTest.java
index 191b16c25..289037f03 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/ToolEntryInfoTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/ToolEntryInfoTest.java
@@ -26,85 +26,85 @@
  * @author scheglov_ke
  */
 public class ToolEntryInfoTest extends AbstractPaletteTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Activate without tool.
-   */
-  public void test_activateNoTool() throws Exception {
-    XmlObjectInfo panel = parseEmptyPanel();
-    IEditPartViewer editPartViewer = new EmptyEditPartViewer();
-    // prepare ToolEntryInfo
-    ToolEntryInfo toolEntry = new ToolEntryInfo() {
-      @Override
-      public Image getIcon() {
-        return null;
-      }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Activate without tool.
+	 */
+	public void test_activateNoTool() throws Exception {
+		XmlObjectInfo panel = parseEmptyPanel();
+		IEditPartViewer editPartViewer = new EmptyEditPartViewer();
+		// prepare ToolEntryInfo
+		ToolEntryInfo toolEntry = new ToolEntryInfo() {
+			@Override
+			public Image getIcon() {
+				return null;
+			}
 
-      @Override
-      public Tool createTool() throws Exception {
-        return null;
-      }
-    };
-    // initialize
-    assertTrue(toolEntry.initialize(editPartViewer, panel));
-    // activate
-    assertFalse(toolEntry.activate(false));
-  }
+			@Override
+			public Tool createTool() throws Exception {
+				return null;
+			}
+		};
+		// initialize
+		assertTrue(toolEntry.initialize(editPartViewer, panel));
+		// activate
+		assertFalse(toolEntry.activate(false));
+	}
 
-  /**
-   * Activate with good tool.
-   */
-  public void test_activateTool() throws Exception {
-    XmlObjectInfo panel = parseEmptyPanel();
-    IEditPartViewer editPartViewer = new EmptyEditPartViewer();
-    // prepare ToolEntryInfo
-    ToolEntryInfo toolEntry = new ToolEntryInfo() {
-      @Override
-      public Image getIcon() {
-        return null;
-      }
+	/**
+	 * Activate with good tool.
+	 */
+	public void test_activateTool() throws Exception {
+		XmlObjectInfo panel = parseEmptyPanel();
+		IEditPartViewer editPartViewer = new EmptyEditPartViewer();
+		// prepare ToolEntryInfo
+		ToolEntryInfo toolEntry = new ToolEntryInfo() {
+			@Override
+			public Image getIcon() {
+				return null;
+			}
 
-      @Override
-      public Tool createTool() throws Exception {
-        return new SelectionTool();
-      }
-    };
-    // initialize
-    assertTrue(toolEntry.initialize(editPartViewer, panel));
-    // activate
-    assertTrue(toolEntry.activate(false));
-  }
+			@Override
+			public Tool createTool() throws Exception {
+				return new SelectionTool();
+			}
+		};
+		// initialize
+		assertTrue(toolEntry.initialize(editPartViewer, panel));
+		// activate
+		assertTrue(toolEntry.activate(false));
+	}
 
-  /**
-   * Activate, but throw exception when create tool.
-   */
-  public void test_activateException() throws Exception {
-    XmlObjectInfo panel = parseEmptyPanel();
-    IEditPartViewer editPartViewer = new EmptyEditPartViewer();
-    // prepare ToolEntryInfo
-    ToolEntryInfo toolEntry = new ToolEntryInfo() {
-      @Override
-      public Image getIcon() {
-        return null;
-      }
+	/**
+	 * Activate, but throw exception when create tool.
+	 */
+	public void test_activateException() throws Exception {
+		XmlObjectInfo panel = parseEmptyPanel();
+		IEditPartViewer editPartViewer = new EmptyEditPartViewer();
+		// prepare ToolEntryInfo
+		ToolEntryInfo toolEntry = new ToolEntryInfo() {
+			@Override
+			public Image getIcon() {
+				return null;
+			}
 
-      @Override
-      public Tool createTool() throws Exception {
-        throw new Exception();
-      }
-    };
-    // initialize
-    assertTrue(toolEntry.initialize(editPartViewer, panel));
-    // activate
-    try {
-      DesignerPlugin.setDisplayExceptionOnConsole(false);
-      assertFalse(toolEntry.activate(false));
-    } finally {
-      DesignerPlugin.setDisplayExceptionOnConsole(true);
-    }
-  }
+			@Override
+			public Tool createTool() throws Exception {
+				throw new Exception();
+			}
+		};
+		// initialize
+		assertTrue(toolEntry.initialize(editPartViewer, panel));
+		// activate
+		try {
+			DesignerPlugin.setDisplayExceptionOnConsole(false);
+			assertFalse(toolEntry.activate(false));
+		} finally {
+			DesignerPlugin.setDisplayExceptionOnConsole(true);
+		}
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/ui/AbstractPaletteUiTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/ui/AbstractPaletteUiTest.java
index cd2a879b4..3c4fcbd3e 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/ui/AbstractPaletteUiTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/ui/AbstractPaletteUiTest.java
@@ -19,23 +19,23 @@
  * @author scheglov_ke
  */
 public class AbstractPaletteUiTest extends XwtGefTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Life cycle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void setUp() throws Exception {
-    super.setUp();
-    System.clearProperty(DesignerPalette.FLAG_NO_PALETTE);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Life cycle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void setUp() throws Exception {
+		super.setUp();
+		System.clearProperty(DesignerPalette.FLAG_NO_PALETTE);
+	}
 
-  @Override
-  protected void tearDown() throws Exception {
-    if (m_paletteManager != null) {
-      m_paletteManager.commands_clear();
-      m_paletteManager.commands_write();
-    }
-    super.tearDown();
-  }
+	@Override
+	protected void tearDown() throws Exception {
+		if (m_paletteManager != null) {
+			m_paletteManager.commands_clear();
+			m_paletteManager.commands_write();
+		}
+		super.tearDown();
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/ui/PaletteUiTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/ui/PaletteUiTest.java
index 18953543f..db0e61826 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/ui/PaletteUiTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/ui/PaletteUiTest.java
@@ -42,1003 +42,1003 @@
  * @author scheglov_ke
  */
 public class PaletteUiTest extends AbstractPaletteUiTest {
-  private String m_newId;
+	private String m_newId;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Misc
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Touch no-op implementations of {@link PaletteEventListener}.
-   */
-  public void test_PaletteEventListener() throws Exception {
-    PaletteEventListener listener = new PaletteEventListener() {
-    };
-    listener.categories(null);
-    listener.categories2(null);
-    listener.entries(null, null);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Misc
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Touch no-op implementations of {@link PaletteEventListener}.
+	 */
+	public void test_PaletteEventListener() throws Exception {
+		PaletteEventListener listener = new PaletteEventListener() {
+		};
+		listener.categories(null);
+		listener.categories2(null);
+		listener.entries(null, null);
+	}
 
-  public void test_restorePalette() throws Exception {
-    openEditor("<Shell/>");
-    // remove "System"
-    {
-      CategoryInfo category = m_paletteManager.getPalette().getCategories().get(0);
-      m_paletteManager.commands_add(new CategoryRemoveCommand(category));
-    }
-    // no "System"
-    {
-      PaletteInfo palette = m_paletteManager.getPalette();
-      CategoryInfo category = palette.getCategories().get(0);
-      assertThat(category.getName()).isNotEqualTo("System");
-    }
-    // animate dialog
-    new UiContext().executeAndCheck(new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        IAction action = getContextMenuAction("Restore default palette...");
-        assertNotNull(action);
-        action.run();
-      }
-    }, new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        context.useShell("Confirm");
-        context.clickButton("OK");
-      }
-    });
-    // "System" is again in palette
-    {
-      PaletteInfo palette = m_paletteManager.getPalette();
-      CategoryInfo category = palette.getCategories().get(0);
-      assertThat(category.getName()).isEqualTo("System");
-    }
-  }
+	public void test_restorePalette() throws Exception {
+		openEditor("<Shell/>");
+		// remove "System"
+		{
+			CategoryInfo category = m_paletteManager.getPalette().getCategories().get(0);
+			m_paletteManager.commands_add(new CategoryRemoveCommand(category));
+		}
+		// no "System"
+		{
+			PaletteInfo palette = m_paletteManager.getPalette();
+			CategoryInfo category = palette.getCategories().get(0);
+			assertThat(category.getName()).isNotEqualTo("System");
+		}
+		// animate dialog
+		new UiContext().executeAndCheck(new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				IAction action = getContextMenuAction("Restore default palette...");
+				assertNotNull(action);
+				action.run();
+			}
+		}, new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				context.useShell("Confirm");
+				context.clickButton("OK");
+			}
+		});
+		// "System" is again in palette
+		{
+			PaletteInfo palette = m_paletteManager.getPalette();
+			CategoryInfo category = palette.getCategories().get(0);
+			assertThat(category.getName()).isEqualTo("System");
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Settings
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for configuring palette settings.
-   */
-  public void test_settings() throws Exception {
-    openEditor("<Shell/>");
-    // animate dialog
-    new UiContext().executeAndCheck(new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        IAction action = getContextMenuAction("Settings...");
-        assertNotNull(action);
-        action.run();
-      }
-    }, new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        context.useShell("Palette settings");
-        context.clickButton("OK");
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Settings
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for configuring palette settings.
+	 */
+	public void test_settings() throws Exception {
+		openEditor("<Shell/>");
+		// animate dialog
+		new UiContext().executeAndCheck(new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				IAction action = getContextMenuAction("Settings...");
+				assertNotNull(action);
+				action.run();
+			}
+		}, new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				context.useShell("Palette settings");
+				context.clickButton("OK");
+			}
+		});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Category
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_addCategory_beforeFirst() throws Exception {
-    openEditor("<Shell/>");
-    // use "System" as target
-    Object target;
-    {
-      target = m_paletteManager.getPalette().getCategories().get(0);
-      setTargetObject(target);
-    }
-    // animate dialog
-    new UiContext().executeAndCheck(new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        IAction action = getContextMenuAction("Add category...");
-        assertNotNull(action);
-        action.run();
-      }
-    }, new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        context.useShell("New palette category");
-        m_newId = context.getTextByLabel("&ID:").getText();
-        context.getTextByLabel("&Name:").setText("New category");
-        context.clickButton("OK");
-      }
-    });
-    // check added category
-    {
-      PaletteInfo palette = m_paletteManager.getPalette();
-      CategoryInfo newCategory = palette.getCategory(m_newId);
-      assertNotNull(newCategory);
-      assertEquals("New category", newCategory.getName());
-      assertThat(newCategory.getEntries()).isEmpty();
-      // it is first
-      assertSame(newCategory, palette.getCategories().get(0));
-      assertSame(target, palette.getCategories().get(1));
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Category
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_addCategory_beforeFirst() throws Exception {
+		openEditor("<Shell/>");
+		// use "System" as target
+		Object target;
+		{
+			target = m_paletteManager.getPalette().getCategories().get(0);
+			setTargetObject(target);
+		}
+		// animate dialog
+		new UiContext().executeAndCheck(new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				IAction action = getContextMenuAction("Add category...");
+				assertNotNull(action);
+				action.run();
+			}
+		}, new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				context.useShell("New palette category");
+				m_newId = context.getTextByLabel("&ID:").getText();
+				context.getTextByLabel("&Name:").setText("New category");
+				context.clickButton("OK");
+			}
+		});
+		// check added category
+		{
+			PaletteInfo palette = m_paletteManager.getPalette();
+			CategoryInfo newCategory = palette.getCategory(m_newId);
+			assertNotNull(newCategory);
+			assertEquals("New category", newCategory.getName());
+			assertThat(newCategory.getEntries()).isEmpty();
+			// it is first
+			assertSame(newCategory, palette.getCategories().get(0));
+			assertSame(target, palette.getCategories().get(1));
+		}
+	}
 
-  public void test_addCategory_asLast() throws Exception {
-    openEditor("<Shell/>");
-    // animate dialog
-    new UiContext().executeAndCheck(new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        IAction action = getContextMenuAction("Add category...");
-        assertNotNull(action);
-        action.run();
-      }
-    }, new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        context.useShell("New palette category");
-        m_newId = context.getTextByLabel("&ID:").getText();
-        context.getTextByLabel("&Name:").setText("New category");
-        context.clickButton("OK");
-      }
-    });
-    // check added category
-    {
-      PaletteInfo palette = m_paletteManager.getPalette();
-      CategoryInfo newCategory = palette.getCategory(m_newId);
-      assertNotNull(newCategory);
-      // it is last (not first)
-      List<CategoryInfo> categories = palette.getCategories();
-      assertNotSame(newCategory, categories.get(0));
-    }
-  }
+	public void test_addCategory_asLast() throws Exception {
+		openEditor("<Shell/>");
+		// animate dialog
+		new UiContext().executeAndCheck(new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				IAction action = getContextMenuAction("Add category...");
+				assertNotNull(action);
+				action.run();
+			}
+		}, new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				context.useShell("New palette category");
+				m_newId = context.getTextByLabel("&ID:").getText();
+				context.getTextByLabel("&Name:").setText("New category");
+				context.clickButton("OK");
+			}
+		});
+		// check added category
+		{
+			PaletteInfo palette = m_paletteManager.getPalette();
+			CategoryInfo newCategory = palette.getCategory(m_newId);
+			assertNotNull(newCategory);
+			// it is last (not first)
+			List<CategoryInfo> categories = palette.getCategories();
+			assertNotSame(newCategory, categories.get(0));
+		}
+	}
 
-  public void test_editCategory() throws Exception {
-    openEditor("<Shell/>");
-    // use "System" as target
-    {
-      CategoryInfo category = m_paletteManager.getPalette().getCategories().get(0);
-      setTargetObject(category);
-      // initial name
-      assertEquals("System", category.getName());
-    }
-    // animate dialog
-    new UiContext().executeAndCheck(new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        IAction action = getContextMenuAction("Edit...");
-        assertNotNull(action);
-        action.run();
-      }
-    }, new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        context.useShell("Edit palette category");
-        context.getTextByLabel("&Name:").setText("System2");
-        context.clickButton("OK");
-      }
-    });
-    // updated name
-    PaletteInfo palette = m_paletteManager.getPalette();
-    CategoryInfo category = palette.getCategories().get(0);
-    assertEquals("System2", category.getName());
-  }
+	public void test_editCategory() throws Exception {
+		openEditor("<Shell/>");
+		// use "System" as target
+		{
+			CategoryInfo category = m_paletteManager.getPalette().getCategories().get(0);
+			setTargetObject(category);
+			// initial name
+			assertEquals("System", category.getName());
+		}
+		// animate dialog
+		new UiContext().executeAndCheck(new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				IAction action = getContextMenuAction("Edit...");
+				assertNotNull(action);
+				action.run();
+			}
+		}, new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				context.useShell("Edit palette category");
+				context.getTextByLabel("&Name:").setText("System2");
+				context.clickButton("OK");
+			}
+		});
+		// updated name
+		PaletteInfo palette = m_paletteManager.getPalette();
+		CategoryInfo category = palette.getCategories().get(0);
+		assertEquals("System2", category.getName());
+	}
 
-  public void test_removeCategory() throws Exception {
-    openEditor("<Shell/>");
-    // use "System" as target
-    {
-      CategoryInfo category = m_paletteManager.getPalette().getCategories().get(0);
-      setTargetObject(category);
-    }
-    // animate dialog
-    new UiContext().executeAndCheck(new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        IAction action = getContextMenuAction("Remove");
-        assertNotNull(action);
-        action.run();
-      }
-    }, new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        context.useShell("Confirm");
-        context.clickButton("OK");
-      }
-    });
-    // no "System"
-    PaletteInfo palette = m_paletteManager.getPalette();
-    CategoryInfo category = palette.getCategories().get(0);
-    assertThat(category.getName()).isNotEqualTo("System");
-  }
+	public void test_removeCategory() throws Exception {
+		openEditor("<Shell/>");
+		// use "System" as target
+		{
+			CategoryInfo category = m_paletteManager.getPalette().getCategories().get(0);
+			setTargetObject(category);
+		}
+		// animate dialog
+		new UiContext().executeAndCheck(new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				IAction action = getContextMenuAction("Remove");
+				assertNotNull(action);
+				action.run();
+			}
+		}, new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				context.useShell("Confirm");
+				context.clickButton("OK");
+			}
+		});
+		// no "System"
+		PaletteInfo palette = m_paletteManager.getPalette();
+		CategoryInfo category = palette.getCategories().get(0);
+		assertThat(category.getName()).isNotEqualTo("System");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Component
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_addComponent() throws Exception {
-    openEditor("<Shell/>");
-    // use "System" as target
-    {
-      CategoryInfo category = m_paletteManager.getPalette().getCategories().get(0);
-      setTargetObject(category);
-      // 3 entry initially
-      assertThat(category.getEntries()).hasSize(3);
-    }
-    // animate dialog
-    new UiContext().executeAndCheck(new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        IAction action = getContextMenuAction("Add component...");
-        assertNotNull(action);
-        action.run();
-      }
-    }, new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        context.useShell("Add component");
-        chooseComponentClass(context, "org.eclipse.swt.widgets.Button");
-        // default name
-        assertEquals("Button", context.getTextByLabel("&Name:").getText());
-        assertThat(context.getTextByLabel("&Description:").getText()).contains(
-            "pressed and released");
-        // set custom name
-        context.getTextByLabel("&Name:").setText("My name");
-        // done
-        m_newId = context.getTextByLabel("&ID:").getText();
-        context.clickButton("OK");
-      }
-    });
-    // new entry added
-    CategoryInfo category = m_paletteManager.getPalette().getCategories().get(0);
-    List<EntryInfo> entries = category.getEntries();
-    assertThat(entries).hasSize(4);
-    {
-      ComponentEntryInfo newComponent = (ComponentEntryInfo) entries.get(3);
-      assertEquals("org.eclipse.swt.widgets.Button", newComponent.getClassName());
-      assertEquals("My name", newComponent.getName());
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Component
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_addComponent() throws Exception {
+		openEditor("<Shell/>");
+		// use "System" as target
+		{
+			CategoryInfo category = m_paletteManager.getPalette().getCategories().get(0);
+			setTargetObject(category);
+			// 3 entry initially
+			assertThat(category.getEntries()).hasSize(3);
+		}
+		// animate dialog
+		new UiContext().executeAndCheck(new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				IAction action = getContextMenuAction("Add component...");
+				assertNotNull(action);
+				action.run();
+			}
+		}, new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				context.useShell("Add component");
+				chooseComponentClass(context, "org.eclipse.swt.widgets.Button");
+				// default name
+				assertEquals("Button", context.getTextByLabel("&Name:").getText());
+				assertThat(context.getTextByLabel("&Description:").getText()).contains(
+						"pressed and released");
+				// set custom name
+				context.getTextByLabel("&Name:").setText("My name");
+				// done
+				m_newId = context.getTextByLabel("&ID:").getText();
+				context.clickButton("OK");
+			}
+		});
+		// new entry added
+		CategoryInfo category = m_paletteManager.getPalette().getCategories().get(0);
+		List<EntryInfo> entries = category.getEntries();
+		assertThat(entries).hasSize(4);
+		{
+			ComponentEntryInfo newComponent = (ComponentEntryInfo) entries.get(3);
+			assertEquals("org.eclipse.swt.widgets.Button", newComponent.getClassName());
+			assertEquals("My name", newComponent.getName());
+		}
+	}
 
-  public void test_editComponent() throws Exception {
-    openEditor("<Shell/>");
-    // add Button component to "System" and use it as target
-    {
-      CategoryInfo category = m_paletteManager.getPalette().getCategories().get(0);
-      // add Button component
-      m_paletteManager.commands_add(new ComponentAddCommand("myID",
-          "My name",
-          "My desc",
-          true,
-          "org.eclipse.swt.widgets.Button",
-          category));
-      assertThat(category.getEntries()).hasSize(4);
-      ReflectionUtils.invokeMethod(m_designerPalette, "showPalette()");
-      setTargetObject(category.getEntries().get(3));
-    }
-    // animate dialog
-    new UiContext().executeAndCheck(new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        IAction action = getContextMenuAction("Edit...");
-        assertNotNull(action);
-        action.run();
-      }
-    }, new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        context.useShell("Edit component");
-        assertEquals("My name", context.getTextByLabel("&Name:").getText());
-        assertEquals("My desc", context.getTextByLabel("&Description:").getText());
-        // choose Text widget
-        chooseComponentClass(context, "org.eclipse.swt.widgets.Text");
-        // done
-        context.clickButton("OK");
-      }
-    });
-    // entry was updated
-    CategoryInfo category = m_paletteManager.getPalette().getCategories().get(0);
-    ComponentEntryInfo editedComponent = (ComponentEntryInfo) category.getEntries().get(3);
-    assertEquals("org.eclipse.swt.widgets.Text", editedComponent.getClassName());
-    assertEquals("Text", editedComponent.getName());
-    assertThat(editedComponent.getDescription()).contains("enter and modify text");
-  }
+	public void test_editComponent() throws Exception {
+		openEditor("<Shell/>");
+		// add Button component to "System" and use it as target
+		{
+			CategoryInfo category = m_paletteManager.getPalette().getCategories().get(0);
+			// add Button component
+			m_paletteManager.commands_add(new ComponentAddCommand("myID",
+					"My name",
+					"My desc",
+					true,
+					"org.eclipse.swt.widgets.Button",
+					category));
+			assertThat(category.getEntries()).hasSize(4);
+			ReflectionUtils.invokeMethod(m_designerPalette, "showPalette()");
+			setTargetObject(category.getEntries().get(3));
+		}
+		// animate dialog
+		new UiContext().executeAndCheck(new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				IAction action = getContextMenuAction("Edit...");
+				assertNotNull(action);
+				action.run();
+			}
+		}, new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				context.useShell("Edit component");
+				assertEquals("My name", context.getTextByLabel("&Name:").getText());
+				assertEquals("My desc", context.getTextByLabel("&Description:").getText());
+				// choose Text widget
+				chooseComponentClass(context, "org.eclipse.swt.widgets.Text");
+				// done
+				context.clickButton("OK");
+			}
+		});
+		// entry was updated
+		CategoryInfo category = m_paletteManager.getPalette().getCategories().get(0);
+		ComponentEntryInfo editedComponent = (ComponentEntryInfo) category.getEntries().get(3);
+		assertEquals("org.eclipse.swt.widgets.Text", editedComponent.getClassName());
+		assertEquals("Text", editedComponent.getName());
+		assertThat(editedComponent.getDescription()).contains("enter and modify text");
+	}
 
-  private void chooseComponentClass(final UiContext context_, final String className)
-      throws Exception {
-    new UiContext().executeAndCheck(new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        context_.clickButton("Ch&oose...");
-      }
-    }, new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        // set filter
-        {
-          context.useShell("Open type");
-          Text filterText = context.findFirstWidget(Text.class);
-          filterText.setText(className);
-        }
-        // wait for types
-        {
-          final Table typesTable = context.findFirstWidget(Table.class);
-          context.waitFor(new UIPredicate() {
-            @Override
-            public boolean check() {
-              return typesTable.getItems().length != 0;
-            }
-          });
-        }
-        // click OK
-        context.clickButton("OK");
-      }
-    });
-  }
+	private void chooseComponentClass(final UiContext context_, final String className)
+			throws Exception {
+		new UiContext().executeAndCheck(new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				context_.clickButton("Ch&oose...");
+			}
+		}, new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				// set filter
+				{
+					context.useShell("Open type");
+					Text filterText = context.findFirstWidget(Text.class);
+					filterText.setText(className);
+				}
+				// wait for types
+				{
+					final Table typesTable = context.findFirstWidget(Table.class);
+					context.waitFor(new UIPredicate() {
+						@Override
+						public boolean check() {
+							return typesTable.getItems().length != 0;
+						}
+					});
+				}
+				// click OK
+				context.clickButton("OK");
+			}
+		});
+	}
 
-  public void test_removeEntry() throws Exception {
-    openEditor("<Shell/>");
-    // use "System" as target
-    {
-      CategoryInfo category = m_paletteManager.getPalette().getCategories().get(0);
-      EntryInfo entry = category.getEntries().get(0);
-      assertEquals("Selection", entry.getName());
-      setTargetObject(entry);
-    }
-    // animate dialog
-    new UiContext().executeAndCheck(new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        IAction action = getContextMenuAction("Remove");
-        assertNotNull(action);
-        action.run();
-      }
-    }, new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        context.useShell("Confirm");
-        context.clickButton("OK");
-      }
-    });
-    // no "Selection" in "System"
-    PaletteInfo palette = m_paletteManager.getPalette();
-    CategoryInfo category = palette.getCategories().get(0);
-    EntryInfo entry = category.getEntries().get(0);
-    assertThat(entry.getName()).isNotEqualTo("Selection");
-  }
+	public void test_removeEntry() throws Exception {
+		openEditor("<Shell/>");
+		// use "System" as target
+		{
+			CategoryInfo category = m_paletteManager.getPalette().getCategories().get(0);
+			EntryInfo entry = category.getEntries().get(0);
+			assertEquals("Selection", entry.getName());
+			setTargetObject(entry);
+		}
+		// animate dialog
+		new UiContext().executeAndCheck(new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				IAction action = getContextMenuAction("Remove");
+				assertNotNull(action);
+				action.run();
+			}
+		}, new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				context.useShell("Confirm");
+				context.clickButton("OK");
+			}
+		});
+		// no "Selection" in "System"
+		PaletteInfo palette = m_paletteManager.getPalette();
+		CategoryInfo category = palette.getCategories().get(0);
+		EntryInfo entry = category.getEntries().get(0);
+		assertThat(entry.getName()).isNotEqualTo("Selection");
+	}
 
-  public void test_paletteManager_dragEntry_onCategory() throws Exception {
-    openEditor("<Shell/>");
-    // animate dialog
-    new UiContext().executeAndCheck(new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        IAction action = getContextMenuAction("Palette manager...");
-        assertNotNull(action);
-        action.run();
-      }
-    }, new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        context.useShell("Palette Manager");
-        TreeItem selectionItem = context.getTreeItem("Selection");
-        TreeItem compositesItem = context.getTreeItem("Composites");
-        Tree paletteTree = selectionItem.getParent();
-        // do DND
-        TreeDragHelper dragHelper = new TreeDragHelper(paletteTree);
-        dragHelper.startDrag(selectionItem);
-        dragHelper.dragOn(compositesItem);
-        dragHelper.endDrag();
-        // done
-        context.clickButton("OK");
-      }
-    });
-    // "Selection" is last in "Composites"
-    CategoryInfo compositesCategory = m_paletteManager.getPalette().getCategories().get(1);
-    assertEquals("Composites", compositesCategory.getName());
-    List<EntryInfo> entries = compositesCategory.getEntries();
-    assertEquals("Selection", entries.get(entries.size() - 1).getName());
-  }
+	public void test_paletteManager_dragEntry_onCategory() throws Exception {
+		openEditor("<Shell/>");
+		// animate dialog
+		new UiContext().executeAndCheck(new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				IAction action = getContextMenuAction("Palette manager...");
+				assertNotNull(action);
+				action.run();
+			}
+		}, new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				context.useShell("Palette Manager");
+				TreeItem selectionItem = context.getTreeItem("Selection");
+				TreeItem compositesItem = context.getTreeItem("Composites");
+				Tree paletteTree = selectionItem.getParent();
+				// do DND
+				TreeDragHelper dragHelper = new TreeDragHelper(paletteTree);
+				dragHelper.startDrag(selectionItem);
+				dragHelper.dragOn(compositesItem);
+				dragHelper.endDrag();
+				// done
+				context.clickButton("OK");
+			}
+		});
+		// "Selection" is last in "Composites"
+		CategoryInfo compositesCategory = m_paletteManager.getPalette().getCategories().get(1);
+		assertEquals("Composites", compositesCategory.getName());
+		List<EntryInfo> entries = compositesCategory.getEntries();
+		assertEquals("Selection", entries.get(entries.size() - 1).getName());
+	}
 
-  public void test_paletteManager_dragEntry_beforeOther() throws Exception {
-    openEditor("<Shell/>");
-    // animate dialog
-    new UiContext().executeAndCheck(new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        IAction action = getContextMenuAction("Palette manager...");
-        assertNotNull(action);
-        action.run();
-      }
-    }, new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        context.useShell("Palette Manager");
-        TreeItem selectionItem = context.getTreeItem("Selection");
-        TreeItem groupItem = context.getTreeItem("Group");
-        Tree paletteTree = selectionItem.getParent();
-        // do DND
-        TreeDragHelper dragHelper = new TreeDragHelper(paletteTree);
-        dragHelper.startDrag(selectionItem);
-        dragHelper.dragBefore(groupItem);
-        dragHelper.endDrag();
-        // done
-        context.clickButton("OK");
-      }
-    });
-    // "Selection" is 1-th in "Composites"
-    CategoryInfo compositesCategory = m_paletteManager.getPalette().getCategories().get(1);
-    List<EntryInfo> entries = compositesCategory.getEntries();
-    assertEquals("Selection", entries.get(1).getName());
-  }
+	public void test_paletteManager_dragEntry_beforeOther() throws Exception {
+		openEditor("<Shell/>");
+		// animate dialog
+		new UiContext().executeAndCheck(new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				IAction action = getContextMenuAction("Palette manager...");
+				assertNotNull(action);
+				action.run();
+			}
+		}, new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				context.useShell("Palette Manager");
+				TreeItem selectionItem = context.getTreeItem("Selection");
+				TreeItem groupItem = context.getTreeItem("Group");
+				Tree paletteTree = selectionItem.getParent();
+				// do DND
+				TreeDragHelper dragHelper = new TreeDragHelper(paletteTree);
+				dragHelper.startDrag(selectionItem);
+				dragHelper.dragBefore(groupItem);
+				dragHelper.endDrag();
+				// done
+				context.clickButton("OK");
+			}
+		});
+		// "Selection" is 1-th in "Composites"
+		CategoryInfo compositesCategory = m_paletteManager.getPalette().getCategories().get(1);
+		List<EntryInfo> entries = compositesCategory.getEntries();
+		assertEquals("Selection", entries.get(1).getName());
+	}
 
-  public void test_paletteManager_dragEntry_afterOther() throws Exception {
-    openEditor("<Shell/>");
-    // animate dialog
-    new UiContext().executeAndCheck(new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        IAction action = getContextMenuAction("Palette manager...");
-        assertNotNull(action);
-        action.run();
-      }
-    }, new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        context.useShell("Palette Manager");
-        TreeItem selectionItem = context.getTreeItem("Selection");
-        TreeItem groupItem = context.getTreeItem("Group");
-        Tree paletteTree = selectionItem.getParent();
-        // do DND
-        TreeDragHelper dragHelper = new TreeDragHelper(paletteTree);
-        dragHelper.startDrag(selectionItem);
-        dragHelper.dragAfter(groupItem);
-        dragHelper.endDrag();
-        // done
-        context.clickButton("OK");
-      }
-    });
-    // "Selection" is 2-th in "Composites"
-    CategoryInfo compositesCategory = m_paletteManager.getPalette().getCategories().get(1);
-    List<EntryInfo> entries = compositesCategory.getEntries();
-    assertEquals("Selection", entries.get(2).getName());
-  }
+	public void test_paletteManager_dragEntry_afterOther() throws Exception {
+		openEditor("<Shell/>");
+		// animate dialog
+		new UiContext().executeAndCheck(new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				IAction action = getContextMenuAction("Palette manager...");
+				assertNotNull(action);
+				action.run();
+			}
+		}, new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				context.useShell("Palette Manager");
+				TreeItem selectionItem = context.getTreeItem("Selection");
+				TreeItem groupItem = context.getTreeItem("Group");
+				Tree paletteTree = selectionItem.getParent();
+				// do DND
+				TreeDragHelper dragHelper = new TreeDragHelper(paletteTree);
+				dragHelper.startDrag(selectionItem);
+				dragHelper.dragAfter(groupItem);
+				dragHelper.endDrag();
+				// done
+				context.clickButton("OK");
+			}
+		});
+		// "Selection" is 2-th in "Composites"
+		CategoryInfo compositesCategory = m_paletteManager.getPalette().getCategories().get(1);
+		List<EntryInfo> entries = compositesCategory.getEntries();
+		assertEquals("Selection", entries.get(2).getName());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Palette manager dialog
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_paletteManager_filter() throws Exception {
-    openEditor("<Shell/>");
-    // animate dialog
-    new UiContext().executeAndCheck(new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        IAction action = getContextMenuAction("Palette manager...");
-        assertNotNull(action);
-        action.run();
-      }
-    }, new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        context.useShell("Palette Manager");
-        // filter
-        {
-          assertNotNull(context.getTreeItem("Button"));
-          assertNotNull(context.getTreeItem("Table"));
-          // set filer
-          Text filterText = context.findFirstWidget(Text.class);
-          assertNotNull(filterText);
-          filterText.setText("Button");
-          // only Button
-          assertNotNull(context.getTreeItem("Button"));
-          assertNull(context.getTreeItem("Table"));
-          // clear filer
-          context.click(context.getToolItem("Clear"), 0);
-          assertNotNull(context.getTreeItem("Button"));
-          assertNotNull(context.getTreeItem("Table"));
-        }
-        // done
-        context.clickButton("OK");
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Palette manager dialog
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_paletteManager_filter() throws Exception {
+		openEditor("<Shell/>");
+		// animate dialog
+		new UiContext().executeAndCheck(new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				IAction action = getContextMenuAction("Palette manager...");
+				assertNotNull(action);
+				action.run();
+			}
+		}, new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				context.useShell("Palette Manager");
+				// filter
+				{
+					assertNotNull(context.getTreeItem("Button"));
+					assertNotNull(context.getTreeItem("Table"));
+					// set filer
+					Text filterText = context.findFirstWidget(Text.class);
+					assertNotNull(filterText);
+					filterText.setText("Button");
+					// only Button
+					assertNotNull(context.getTreeItem("Button"));
+					assertNull(context.getTreeItem("Table"));
+					// clear filer
+					context.click(context.getToolItem("Clear"), 0);
+					assertNotNull(context.getTreeItem("Button"));
+					assertNotNull(context.getTreeItem("Table"));
+				}
+				// done
+				context.clickButton("OK");
+			}
+		});
+	}
 
-  public void test_paletteManager_expandCollapse() throws Exception {
-    openEditor("<Shell/>");
-    // animate dialog
-    new UiContext().executeAndCheck(new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        IAction action = getContextMenuAction("Palette manager...");
-        assertNotNull(action);
-        action.run();
-      }
-    }, new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        context.useShell("Palette Manager");
-        // "System" initially collapsed
-        TreeItem systemItem = context.getTreeItem("System");
-        assertFalse(systemItem.getExpanded());
-        // expand all
-        context.clickButton("Expand All");
-        assertTrue(systemItem.getExpanded());
-        // collapse all
-        context.clickButton("Collapse All");
-        assertFalse(systemItem.getExpanded());
-        // done
-        context.clickButton("OK");
-      }
-    });
-  }
+	public void test_paletteManager_expandCollapse() throws Exception {
+		openEditor("<Shell/>");
+		// animate dialog
+		new UiContext().executeAndCheck(new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				IAction action = getContextMenuAction("Palette manager...");
+				assertNotNull(action);
+				action.run();
+			}
+		}, new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				context.useShell("Palette Manager");
+				// "System" initially collapsed
+				TreeItem systemItem = context.getTreeItem("System");
+				assertFalse(systemItem.getExpanded());
+				// expand all
+				context.clickButton("Expand All");
+				assertTrue(systemItem.getExpanded());
+				// collapse all
+				context.clickButton("Collapse All");
+				assertFalse(systemItem.getExpanded());
+				// done
+				context.clickButton("OK");
+			}
+		});
+	}
 
-  public void test_paletteManager_dragCategory() throws Exception {
-    openEditor("<Shell/>");
-    // animate dialog
-    new UiContext().executeAndCheck(new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        IAction action = getContextMenuAction("Palette manager...");
-        assertNotNull(action);
-        action.run();
-      }
-    }, new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        context.useShell("Palette Manager");
-        TreeItem systemItem = context.getTreeItem("System");
-        TreeItem compositesItem = context.getTreeItem("Composites");
-        Tree paletteTree = systemItem.getParent();
-        // do DND
-        TreeDragHelper dragHelper = new TreeDragHelper(paletteTree);
-        dragHelper.startDrag(systemItem);
-        dragHelper.dragAfter(compositesItem);
-        dragHelper.endDrag();
-        // done
-        context.clickButton("OK");
-      }
-    });
-    // "System" is with index "1"
-    assertEquals("Composites", m_paletteManager.getPalette().getCategories().get(0).getName());
-    assertEquals("System", m_paletteManager.getPalette().getCategories().get(1).getName());
-  }
+	public void test_paletteManager_dragCategory() throws Exception {
+		openEditor("<Shell/>");
+		// animate dialog
+		new UiContext().executeAndCheck(new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				IAction action = getContextMenuAction("Palette manager...");
+				assertNotNull(action);
+				action.run();
+			}
+		}, new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				context.useShell("Palette Manager");
+				TreeItem systemItem = context.getTreeItem("System");
+				TreeItem compositesItem = context.getTreeItem("Composites");
+				Tree paletteTree = systemItem.getParent();
+				// do DND
+				TreeDragHelper dragHelper = new TreeDragHelper(paletteTree);
+				dragHelper.startDrag(systemItem);
+				dragHelper.dragAfter(compositesItem);
+				dragHelper.endDrag();
+				// done
+				context.clickButton("OK");
+			}
+		});
+		// "System" is with index "1"
+		assertEquals("Composites", m_paletteManager.getPalette().getCategories().get(0).getName());
+		assertEquals("System", m_paletteManager.getPalette().getCategories().get(1).getName());
+	}
 
-  public void test_paletteManager_addCategory() throws Exception {
-    openEditor("<Shell/>");
-    // animate dialog
-    new UiContext().executeAndCheck(new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        IAction action = getContextMenuAction("Palette manager...");
-        assertNotNull(action);
-        action.run();
-      }
-    }, new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        context.useShell("Palette Manager");
-        // prepare palette Tree
-        Tree paletteTree = context.findFirstWidget(Tree.class);
-        int oldItemCount = paletteTree.getItemCount();
-        // add new category using dialog
-        animateAddCategoryDialog(context);
-        // new category was added as last
-        int newItemCount = paletteTree.getItemCount();
-        assertEquals(oldItemCount + 1, newItemCount);
-        assertEquals("New category", paletteTree.getItem(newItemCount - 1).getText());
-        // done
-        context.clickButton("OK");
-      }
+	public void test_paletteManager_addCategory() throws Exception {
+		openEditor("<Shell/>");
+		// animate dialog
+		new UiContext().executeAndCheck(new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				IAction action = getContextMenuAction("Palette manager...");
+				assertNotNull(action);
+				action.run();
+			}
+		}, new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				context.useShell("Palette Manager");
+				// prepare palette Tree
+				Tree paletteTree = context.findFirstWidget(Tree.class);
+				int oldItemCount = paletteTree.getItemCount();
+				// add new category using dialog
+				animateAddCategoryDialog(context);
+				// new category was added as last
+				int newItemCount = paletteTree.getItemCount();
+				assertEquals(oldItemCount + 1, newItemCount);
+				assertEquals("New category", paletteTree.getItem(newItemCount - 1).getText());
+				// done
+				context.clickButton("OK");
+			}
 
-      private void animateAddCategoryDialog(final UiContext _context) throws Exception {
-        new UiContext().executeAndCheck(new UIRunnable() {
-          @Override
-          public void run(UiContext context) throws Exception {
-            _context.clickButton("Add Category...");
-          }
-        }, new UIRunnable() {
-          @Override
-          public void run(UiContext context) throws Exception {
-            context.useShell("New palette category");
-            m_newId = context.getTextByLabel("&ID:").getText();
-            context.getTextByLabel("&Name:").setText("New category");
-            context.clickButton("OK");
-          }
-        });
-      }
-    });
-    // check added category
-    {
-      PaletteInfo palette = m_paletteManager.getPalette();
-      CategoryInfo newCategory = palette.getCategory(m_newId);
-      assertNotNull(newCategory);
-    }
-  }
+			private void animateAddCategoryDialog(final UiContext _context) throws Exception {
+				new UiContext().executeAndCheck(new UIRunnable() {
+					@Override
+					public void run(UiContext context) throws Exception {
+						_context.clickButton("Add Category...");
+					}
+				}, new UIRunnable() {
+					@Override
+					public void run(UiContext context) throws Exception {
+						context.useShell("New palette category");
+						m_newId = context.getTextByLabel("&ID:").getText();
+						context.getTextByLabel("&Name:").setText("New category");
+						context.clickButton("OK");
+					}
+				});
+			}
+		});
+		// check added category
+		{
+			PaletteInfo palette = m_paletteManager.getPalette();
+			CategoryInfo newCategory = palette.getCategory(m_newId);
+			assertNotNull(newCategory);
+		}
+	}
 
-  public void test_paletteManager_addComponent() throws Exception {
-    openEditor("<Shell/>");
-    // animate dialog
-    new UiContext().executeAndCheck(new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        IAction action = getContextMenuAction("Palette manager...");
-        assertNotNull(action);
-        action.run();
-      }
-    }, new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        context.useShell("Palette Manager");
-        // prepare palette Tree
-        TreeItem systemItem = context.getTreeItem("System");
-        int oldItemCount = systemItem.getItemCount();
-        UiContext.setSelection(systemItem);
-        // add new component using dialog
-        Button addEntryButton = context.getButtonByText("Add Entry >>");
-        context.click(addEntryButton);
-        MenuManager menuManager = (MenuManager) addEntryButton.getData("menuManager");
-        IAction action = findChildAction(menuManager, "Component...");
-        assertNotNull(action);
-        animateAddComponentDialog(action);
-        // new component was added as last
-        int newItemCount = systemItem.getItemCount();
-        assertEquals(oldItemCount + 1, newItemCount);
-        assertEquals("Button", systemItem.getItem(newItemCount - 1).getText());
-        // done
-        context.clickButton("OK");
-      }
+	public void test_paletteManager_addComponent() throws Exception {
+		openEditor("<Shell/>");
+		// animate dialog
+		new UiContext().executeAndCheck(new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				IAction action = getContextMenuAction("Palette manager...");
+				assertNotNull(action);
+				action.run();
+			}
+		}, new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				context.useShell("Palette Manager");
+				// prepare palette Tree
+				TreeItem systemItem = context.getTreeItem("System");
+				int oldItemCount = systemItem.getItemCount();
+				UiContext.setSelection(systemItem);
+				// add new component using dialog
+				Button addEntryButton = context.getButtonByText("Add Entry >>");
+				context.click(addEntryButton);
+				MenuManager menuManager = (MenuManager) addEntryButton.getData("menuManager");
+				IAction action = findChildAction(menuManager, "Component...");
+				assertNotNull(action);
+				animateAddComponentDialog(action);
+				// new component was added as last
+				int newItemCount = systemItem.getItemCount();
+				assertEquals(oldItemCount + 1, newItemCount);
+				assertEquals("Button", systemItem.getItem(newItemCount - 1).getText());
+				// done
+				context.clickButton("OK");
+			}
 
-      private void animateAddComponentDialog(final IAction action) throws Exception {
-        new UiContext().executeAndCheck(new UIRunnable() {
-          @Override
-          public void run(UiContext context) throws Exception {
-            action.run();
-          }
-        }, new UIRunnable() {
-          @Override
-          public void run(UiContext context) throws Exception {
-            context.useShell("Add component");
-            chooseComponentClass(context, "org.eclipse.swt.widgets.Button");
-            context.clickButton("OK");
-          }
-        });
-      }
-    });
-    // check added component
-    {
-      PaletteInfo palette = m_paletteManager.getPalette();
-      CategoryInfo category = palette.getCategories().get(0);
-      List<EntryInfo> entries = category.getEntries();
-      ComponentEntryInfo newEntry = (ComponentEntryInfo) entries.get(entries.size() - 1);
-      assertEquals("org.eclipse.swt.widgets.Button", newEntry.getClassName());
-    }
-  }
+			private void animateAddComponentDialog(final IAction action) throws Exception {
+				new UiContext().executeAndCheck(new UIRunnable() {
+					@Override
+					public void run(UiContext context) throws Exception {
+						action.run();
+					}
+				}, new UIRunnable() {
+					@Override
+					public void run(UiContext context) throws Exception {
+						context.useShell("Add component");
+						chooseComponentClass(context, "org.eclipse.swt.widgets.Button");
+						context.clickButton("OK");
+					}
+				});
+			}
+		});
+		// check added component
+		{
+			PaletteInfo palette = m_paletteManager.getPalette();
+			CategoryInfo category = palette.getCategories().get(0);
+			List<EntryInfo> entries = category.getEntries();
+			ComponentEntryInfo newEntry = (ComponentEntryInfo) entries.get(entries.size() - 1);
+			assertEquals("org.eclipse.swt.widgets.Button", newEntry.getClassName());
+		}
+	}
 
-  public void test_paletteManager_editCategory() throws Exception {
-    openEditor("<Shell/>");
-    // animate dialog
-    new UiContext().executeAndCheck(new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        IAction action = getContextMenuAction("Palette manager...");
-        assertNotNull(action);
-        action.run();
-      }
-    }, new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        context.useShell("Palette Manager");
-        // set selection
-        TreeItem systemItem = context.getTreeItem("System");
-        UiContext.setSelection(systemItem);
-        // edit category
-        animateEditCategoryDialog(context);
-        // name was changed
-        assertEquals("System edited", systemItem.getText());
-        // done
-        context.clickButton("OK");
-      }
+	public void test_paletteManager_editCategory() throws Exception {
+		openEditor("<Shell/>");
+		// animate dialog
+		new UiContext().executeAndCheck(new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				IAction action = getContextMenuAction("Palette manager...");
+				assertNotNull(action);
+				action.run();
+			}
+		}, new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				context.useShell("Palette Manager");
+				// set selection
+				TreeItem systemItem = context.getTreeItem("System");
+				UiContext.setSelection(systemItem);
+				// edit category
+				animateEditCategoryDialog(context);
+				// name was changed
+				assertEquals("System edited", systemItem.getText());
+				// done
+				context.clickButton("OK");
+			}
 
-      private void animateEditCategoryDialog(final UiContext _context) throws Exception {
-        new UiContext().executeAndCheck(new UIRunnable() {
-          @Override
-          public void run(UiContext context) throws Exception {
-            _context.clickButton("Edit...");
-          }
-        }, new UIRunnable() {
-          @Override
-          public void run(UiContext context) throws Exception {
-            context.useShell("Edit palette category");
-            context.getTextByLabel("&Name:").setText("System edited");
-            context.clickButton("OK");
-          }
-        });
-      }
-    });
-    // check edited category
-    {
-      PaletteInfo palette = m_paletteManager.getPalette();
-      CategoryInfo category = palette.getCategories().get(0);
-      assertEquals("System edited", category.getName());
-    }
-  }
+			private void animateEditCategoryDialog(final UiContext _context) throws Exception {
+				new UiContext().executeAndCheck(new UIRunnable() {
+					@Override
+					public void run(UiContext context) throws Exception {
+						_context.clickButton("Edit...");
+					}
+				}, new UIRunnable() {
+					@Override
+					public void run(UiContext context) throws Exception {
+						context.useShell("Edit palette category");
+						context.getTextByLabel("&Name:").setText("System edited");
+						context.clickButton("OK");
+					}
+				});
+			}
+		});
+		// check edited category
+		{
+			PaletteInfo palette = m_paletteManager.getPalette();
+			CategoryInfo category = palette.getCategories().get(0);
+			assertEquals("System edited", category.getName());
+		}
+	}
 
-  public void test_paletteManager_editComponent() throws Exception {
-    openEditor("<Shell/>");
-    // animate dialog
-    new UiContext().executeAndCheck(new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        IAction action = getContextMenuAction("Palette manager...");
-        assertNotNull(action);
-        action.run();
-      }
-    }, new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        context.useShell("Palette Manager");
-        // prepare palette Tree
-        TreeItem compositesItem = context.getTreeItem("Composites");
-        TreeItem compositeItem = compositesItem.getItem(0);
-        UiContext.setSelection(compositeItem);
-        // edit component
-        animateEditComponentDialog(context);
-        // name was changed
-        assertEquals("Composite edited", compositeItem.getText());
-        // done
-        context.clickButton("OK");
-      }
+	public void test_paletteManager_editComponent() throws Exception {
+		openEditor("<Shell/>");
+		// animate dialog
+		new UiContext().executeAndCheck(new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				IAction action = getContextMenuAction("Palette manager...");
+				assertNotNull(action);
+				action.run();
+			}
+		}, new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				context.useShell("Palette Manager");
+				// prepare palette Tree
+				TreeItem compositesItem = context.getTreeItem("Composites");
+				TreeItem compositeItem = compositesItem.getItem(0);
+				UiContext.setSelection(compositeItem);
+				// edit component
+				animateEditComponentDialog(context);
+				// name was changed
+				assertEquals("Composite edited", compositeItem.getText());
+				// done
+				context.clickButton("OK");
+			}
 
-      private void animateEditComponentDialog(final UiContext _context) throws Exception {
-        new UiContext().executeAndCheck(new UIRunnable() {
-          @Override
-          public void run(UiContext context) throws Exception {
-            _context.clickButton("Edit...");
-          }
-        }, new UIRunnable() {
-          @Override
-          public void run(UiContext context) throws Exception {
-            context.useShell("Edit component");
-            context.getTextByLabel("&Name:").setText("Composite edited");
-            context.clickButton("OK");
-          }
-        });
-      }
-    });
-    // check edited component
-    {
-      PaletteInfo palette = m_paletteManager.getPalette();
-      CategoryInfo category = palette.getCategory("org.eclipse.wb.rcp.composites");
-      EntryInfo component = category.getEntries().get(0);
-      assertEquals("Composite edited", component.getName());
-    }
-  }
+			private void animateEditComponentDialog(final UiContext _context) throws Exception {
+				new UiContext().executeAndCheck(new UIRunnable() {
+					@Override
+					public void run(UiContext context) throws Exception {
+						_context.clickButton("Edit...");
+					}
+				}, new UIRunnable() {
+					@Override
+					public void run(UiContext context) throws Exception {
+						context.useShell("Edit component");
+						context.getTextByLabel("&Name:").setText("Composite edited");
+						context.clickButton("OK");
+					}
+				});
+			}
+		});
+		// check edited component
+		{
+			PaletteInfo palette = m_paletteManager.getPalette();
+			CategoryInfo category = palette.getCategory("org.eclipse.wb.rcp.composites");
+			EntryInfo component = category.getEntries().get(0);
+			assertEquals("Composite edited", component.getName());
+		}
+	}
 
-  public void test_paletteManager_moveCategory() throws Exception {
-    openEditor("<Shell/>");
-    // animate dialog
-    new UiContext().executeAndCheck(new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        IAction action = getContextMenuAction("Palette manager...");
-        assertNotNull(action);
-        action.run();
-      }
-    }, new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        context.useShell("Palette Manager");
-        // set selection
-        Tree paletteTree = context.findFirstWidget(Tree.class);
-        {
-          TreeItem systemItem = paletteTree.getItem(0);
-          assertEquals("System", systemItem.getText());
-          UiContext.setSelection(systemItem);
-        }
-        // move category
-        context.clickButton("Down");
-        assertEquals("System", paletteTree.getItem(1).getText());
-        // done
-        context.clickButton("OK");
-      }
-    });
-    // "System" moved
-    {
-      PaletteInfo palette = m_paletteManager.getPalette();
-      CategoryInfo category = palette.getCategories().get(1);
-      assertEquals("System", category.getName());
-    }
-  }
+	public void test_paletteManager_moveCategory() throws Exception {
+		openEditor("<Shell/>");
+		// animate dialog
+		new UiContext().executeAndCheck(new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				IAction action = getContextMenuAction("Palette manager...");
+				assertNotNull(action);
+				action.run();
+			}
+		}, new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				context.useShell("Palette Manager");
+				// set selection
+				Tree paletteTree = context.findFirstWidget(Tree.class);
+				{
+					TreeItem systemItem = paletteTree.getItem(0);
+					assertEquals("System", systemItem.getText());
+					UiContext.setSelection(systemItem);
+				}
+				// move category
+				context.clickButton("Down");
+				assertEquals("System", paletteTree.getItem(1).getText());
+				// done
+				context.clickButton("OK");
+			}
+		});
+		// "System" moved
+		{
+			PaletteInfo palette = m_paletteManager.getPalette();
+			CategoryInfo category = palette.getCategories().get(1);
+			assertEquals("System", category.getName());
+		}
+	}
 
-  public void test_paletteManager_moveEntry() throws Exception {
-    openEditor("<Shell/>");
-    // animate dialog
-    new UiContext().executeAndCheck(new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        IAction action = getContextMenuAction("Palette manager...");
-        assertNotNull(action);
-        action.run();
-      }
-    }, new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        context.useShell("Palette Manager");
-        // select "Selection"
-        TreeItem systemItem = context.getTreeItem("System");
-        {
-          TreeItem selectionItem = systemItem.getItem(0);
-          assertEquals("Selection", selectionItem.getText());
-          UiContext.setSelection(selectionItem);
-        }
-        // move entry
-        context.clickButton("Down");
-        assertEquals("Selection", systemItem.getItem(1).getText());
-        // done
-        context.clickButton("OK");
-      }
-    });
-    // "Selection" moved in "System"
-    {
-      PaletteInfo palette = m_paletteManager.getPalette();
-      CategoryInfo category = palette.getCategories().get(0);
-      EntryInfo entry = category.getEntries().get(1);
-      assertEquals("Selection", entry.getName());
-    }
-  }
+	public void test_paletteManager_moveEntry() throws Exception {
+		openEditor("<Shell/>");
+		// animate dialog
+		new UiContext().executeAndCheck(new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				IAction action = getContextMenuAction("Palette manager...");
+				assertNotNull(action);
+				action.run();
+			}
+		}, new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				context.useShell("Palette Manager");
+				// select "Selection"
+				TreeItem systemItem = context.getTreeItem("System");
+				{
+					TreeItem selectionItem = systemItem.getItem(0);
+					assertEquals("Selection", selectionItem.getText());
+					UiContext.setSelection(selectionItem);
+				}
+				// move entry
+				context.clickButton("Down");
+				assertEquals("Selection", systemItem.getItem(1).getText());
+				// done
+				context.clickButton("OK");
+			}
+		});
+		// "Selection" moved in "System"
+		{
+			PaletteInfo palette = m_paletteManager.getPalette();
+			CategoryInfo category = palette.getCategories().get(0);
+			EntryInfo entry = category.getEntries().get(1);
+			assertEquals("Selection", entry.getName());
+		}
+	}
 
-  public void test_paletteManager_removeCategory() throws Exception {
-    openEditor("<Shell/>");
-    // animate dialog
-    new UiContext().executeAndCheck(new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        IAction action = getContextMenuAction("Palette manager...");
-        assertNotNull(action);
-        action.run();
-      }
-    }, new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        context.useShell("Palette Manager");
-        // set selection
-        TreeItem systemItem = context.getTreeItem("System");
-        UiContext.setSelection(systemItem);
-        // edit category
-        animateRemoveDialog(context);
-        // no "System"
-        assertNull(context.getTreeItem("System"));
-        // done
-        context.clickButton("OK");
-      }
+	public void test_paletteManager_removeCategory() throws Exception {
+		openEditor("<Shell/>");
+		// animate dialog
+		new UiContext().executeAndCheck(new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				IAction action = getContextMenuAction("Palette manager...");
+				assertNotNull(action);
+				action.run();
+			}
+		}, new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				context.useShell("Palette Manager");
+				// set selection
+				TreeItem systemItem = context.getTreeItem("System");
+				UiContext.setSelection(systemItem);
+				// edit category
+				animateRemoveDialog(context);
+				// no "System"
+				assertNull(context.getTreeItem("System"));
+				// done
+				context.clickButton("OK");
+			}
 
-      private void animateRemoveDialog(final UiContext _context) throws Exception {
-        new UiContext().executeAndCheck(new UIRunnable() {
-          @Override
-          public void run(UiContext context) throws Exception {
-            _context.clickButton("Remove...");
-          }
-        }, new UIRunnable() {
-          @Override
-          public void run(UiContext context) throws Exception {
-            context.useShell("Confirm");
-            context.clickButton("OK");
-          }
-        });
-      }
-    });
-    // no "System"
-    {
-      PaletteInfo palette = m_paletteManager.getPalette();
-      CategoryInfo category = palette.getCategories().get(0);
-      assertThat(category.getName()).isNotEqualTo("System");
-    }
-  }
+			private void animateRemoveDialog(final UiContext _context) throws Exception {
+				new UiContext().executeAndCheck(new UIRunnable() {
+					@Override
+					public void run(UiContext context) throws Exception {
+						_context.clickButton("Remove...");
+					}
+				}, new UIRunnable() {
+					@Override
+					public void run(UiContext context) throws Exception {
+						context.useShell("Confirm");
+						context.clickButton("OK");
+					}
+				});
+			}
+		});
+		// no "System"
+		{
+			PaletteInfo palette = m_paletteManager.getPalette();
+			CategoryInfo category = palette.getCategories().get(0);
+			assertThat(category.getName()).isNotEqualTo("System");
+		}
+	}
 
-  public void test_paletteManager_removeEntry() throws Exception {
-    openEditor("<Shell/>");
-    // animate dialog
-    new UiContext().executeAndCheck(new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        IAction action = getContextMenuAction("Palette manager...");
-        assertNotNull(action);
-        action.run();
-      }
-    }, new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        context.useShell("Palette Manager");
-        // set selection
-        TreeItem selectionItem = context.getTreeItem("Selection");
-        assertNotNull(selectionItem);
-        UiContext.setSelection(selectionItem);
-        // edit category
-        animateRemoveDialog(context);
-        // no "Selection"
-        assertNull(context.getTreeItem("Selection"));
-        // done
-        context.clickButton("OK");
-      }
+	public void test_paletteManager_removeEntry() throws Exception {
+		openEditor("<Shell/>");
+		// animate dialog
+		new UiContext().executeAndCheck(new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				IAction action = getContextMenuAction("Palette manager...");
+				assertNotNull(action);
+				action.run();
+			}
+		}, new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				context.useShell("Palette Manager");
+				// set selection
+				TreeItem selectionItem = context.getTreeItem("Selection");
+				assertNotNull(selectionItem);
+				UiContext.setSelection(selectionItem);
+				// edit category
+				animateRemoveDialog(context);
+				// no "Selection"
+				assertNull(context.getTreeItem("Selection"));
+				// done
+				context.clickButton("OK");
+			}
 
-      private void animateRemoveDialog(final UiContext _context) throws Exception {
-        new UiContext().executeAndCheck(new UIRunnable() {
-          @Override
-          public void run(UiContext context) throws Exception {
-            _context.clickButton("Remove...");
-          }
-        }, new UIRunnable() {
-          @Override
-          public void run(UiContext context) throws Exception {
-            context.useShell("Confirm");
-            context.clickButton("OK");
-          }
-        });
-      }
-    });
-    // no "Selection" in "System"
-    {
-      PaletteInfo palette = m_paletteManager.getPalette();
-      CategoryInfo category = palette.getCategories().get(0);
-      EntryInfo entry = category.getEntries().get(0);
-      assertThat(entry.getName()).isNotEqualTo("Selection");
-    }
-  }
+			private void animateRemoveDialog(final UiContext _context) throws Exception {
+				new UiContext().executeAndCheck(new UIRunnable() {
+					@Override
+					public void run(UiContext context) throws Exception {
+						_context.clickButton("Remove...");
+					}
+				}, new UIRunnable() {
+					@Override
+					public void run(UiContext context) throws Exception {
+						context.useShell("Confirm");
+						context.clickButton("OK");
+					}
+				});
+			}
+		});
+		// no "Selection" in "System"
+		{
+			PaletteInfo palette = m_paletteManager.getPalette();
+			CategoryInfo category = palette.getCategories().get(0);
+			EntryInfo entry = category.getEntries().get(0);
+			assertThat(entry.getName()).isNotEqualTo("Selection");
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets visual object for given non-visual as target.
-   */
-  private void setTargetObject(Object nonVisual) throws Exception {
-    Object visual = getTargetObjectVisual(nonVisual);
-    ReflectionUtils.setField(m_paletteComposite, "m_forcedTargetObject", visual);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets visual object for given non-visual as target.
+	 */
+	private void setTargetObject(Object nonVisual) throws Exception {
+		Object visual = getTargetObjectVisual(nonVisual);
+		ReflectionUtils.setField(m_paletteComposite, "m_forcedTargetObject", visual);
+	}
 
-  /**
-   * {@link PaletteComposite} works with "visual" objects, so we need to convert non-visual into
-   * visual.
-   */
-  private Object getTargetObjectVisual(Object nonVisual) {
-    if (nonVisual instanceof CategoryInfo) {
-      return ((Map<?, ?>) ReflectionUtils.getFieldObject(
-          m_designerPalette,
-          "m_categoryInfoToVisual")).get(nonVisual);
-    }
-    if (nonVisual instanceof EntryInfo) {
-      return ((Map<?, ?>) ReflectionUtils.getFieldObject(m_designerPalette, "m_entryInfoToVisual")).get(nonVisual);
-    }
-    return null;
-  }
+	/**
+	 * {@link PaletteComposite} works with "visual" objects, so we need to convert non-visual into
+	 * visual.
+	 */
+	private Object getTargetObjectVisual(Object nonVisual) {
+		if (nonVisual instanceof CategoryInfo) {
+			return ((Map<?, ?>) ReflectionUtils.getFieldObject(
+					m_designerPalette,
+					"m_categoryInfoToVisual")).get(nonVisual);
+		}
+		if (nonVisual instanceof EntryInfo) {
+			return ((Map<?, ?>) ReflectionUtils.getFieldObject(m_designerPalette, "m_entryInfoToVisual")).get(nonVisual);
+		}
+		return null;
+	}
 
-  /**
-   * @return the {@link IAction} from context menu of palette.
-   */
-  private IAction getContextMenuAction(String text) throws Exception {
-    MenuManager contextMenu =
-        (MenuManager) ReflectionUtils.getFieldObject(m_paletteComposite, "m_menuManager");
-    ReflectionUtils.invokeMethod(
-        contextMenu,
-        "fireAboutToShow(org.eclipse.jface.action.IMenuManager)",
-        contextMenu);
-    return findChildAction(contextMenu, text);
-  }
+	/**
+	 * @return the {@link IAction} from context menu of palette.
+	 */
+	private IAction getContextMenuAction(String text) throws Exception {
+		MenuManager contextMenu =
+				(MenuManager) ReflectionUtils.getFieldObject(m_paletteComposite, "m_menuManager");
+		ReflectionUtils.invokeMethod(
+				contextMenu,
+				"fireAboutToShow(org.eclipse.jface.action.IMenuManager)",
+				contextMenu);
+		return findChildAction(contextMenu, text);
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/ui/PaletteUiTests.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/ui/PaletteUiTests.java
index 888724f5e..36d390560 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/ui/PaletteUiTests.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/ui/PaletteUiTests.java
@@ -22,9 +22,9 @@
  * @author scheglov_ke
  */
 public class PaletteUiTests extends DesignerSuiteTests {
-  public static Test suite() {
-    TestSuite suite = new TestSuite("org.eclipse.wb.xml.palette.ui");
-    suite.addTest(createSingleSuite(PaletteUiTest.class));
-    return suite;
-  }
+	public static Test suite() {
+		TestSuite suite = new TestSuite("org.eclipse.wb.xml.palette.ui");
+		suite.addTest(createSingleSuite(PaletteUiTest.class));
+		return suite;
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/ui/TreeDragHelper.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/ui/TreeDragHelper.java
index 9f7f2d597..25e555c8f 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/ui/TreeDragHelper.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/ui/TreeDragHelper.java
@@ -27,152 +27,152 @@
 import org.eclipse.swt.widgets.TreeItem;
 
 public class TreeDragHelper {
-  private final Tree m_tree;
-  private Event m_lastEvent;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public TreeDragHelper(Tree tree) {
-    m_tree = tree;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public TreeDragHelper startDrag(TreeItem source) {
-    m_tree.setSelection(source);
-    Point location = getLocation(source, 0, 0);
-    Event event = createDNDEvent(source, location);
-    notifyDragSource(DND.DragStart, event);
-    notifyDropTarget(DND.DragEnter, event);
-    return this;
-  }
-
-  public TreeDragHelper dragOn(TreeItem target) {
-    m_tree.showItem(target);
-    Point location = getLocationOn(target);
-    m_lastEvent = createDNDEvent(target, location);
-    notifyDropTarget(DND.DragOver, m_lastEvent);
-    return this;
-  }
-
-  public TreeDragHelper dragBefore(TreeItem target) {
-    m_tree.showItem(target);
-    Point location = getLocationBefore(target);
-    m_lastEvent = createDNDEvent(target, location);
-    notifyDropTarget(DND.DragOver, m_lastEvent);
-    return this;
-  }
-
-  public TreeDragHelper dragAfter(TreeItem target) {
-    m_tree.showItem(target);
-    Point location = getLocationAfter(target);
-    m_lastEvent = createDNDEvent(target, location);
-    notifyDropTarget(DND.DragOver, m_lastEvent);
-    return this;
-  }
-
-  public void endDrag() {
-    notifyDropTarget(DND.Drop, m_lastEvent);
-  }
-
-  private Event createDNDEvent(TreeItem item, Point locationInTree) {
-    Tree tree = item.getParent();
-    // create DNDEvent
-    Event event = createDNDEvent();
-    // configure event
-    event.widget = tree;
-    event.item = item;
-    {
-      org.eclipse.swt.graphics.Point absoluteLocation =
-          Display.getCurrent().map(tree, null, locationInTree.getSWTPoint());
-      event.x = absoluteLocation.x;
-      event.y = absoluteLocation.y;
-    }
-    return event;
-  }
-
-  private static Event createDNDEvent() {
-    return ExecutionUtils.runObject(new RunnableObjectEx<Event>() {
-      @Override
-      public Event runObject() throws Exception {
-        Class<?> dndClass =
-            ReflectionUtils.getClassByName(
-                TreeRobot.class.getClassLoader(),
-                "org.eclipse.swt.dnd.DNDEvent");
-        return (Event) ReflectionUtils.getConstructorBySignature(dndClass, "<init>()").newInstance();
-      }
-    });
-  }
-
-  private void notifyDragSource(int eventType, Event event) {
-    DragSource dropTarget = (DragSource) m_tree.getData("DragSource");
-    dropTarget.notifyListeners(eventType, event);
-  }
-
-  private void notifyDropTarget(int eventType, Event event) {
-    DropTarget dropTarget = (DropTarget) m_tree.getData("DropTarget");
-    dropTarget.notifyListeners(eventType, event);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Location utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public Point getLocationOn(TreeItem item) {
-    Rectangle bounds = getBounds(item);
-    int x = bounds.x + 0;
-    int y = bounds.y + bounds.height / 2;
-    Point location = new Point(x, y);
-    return location;
-  }
-
-  public Point getLocationBefore(TreeItem item) {
-    Rectangle bounds = getBounds(item);
-    int x = bounds.x + 0;
-    int y = bounds.y + 0;
-    Point location = new Point(x, y);
-    return location;
-  }
-
-  public Point getLocationAfter(TreeItem item) {
-    Rectangle bounds = getBounds(item);
-    int x = bounds.x + 0;
-    int y = bounds.y + bounds.height / 2 + 1;
-    Point location = new Point(x, y);
-    return location;
-  }
-
-  /**
-   * @return bounds of given {@link EditPart} in {@link Tree}.
-   */
-  public static Rectangle getBounds(TreeItem item) {
-    return new Rectangle(item.getBounds());
-  }
-
-  /**
-   * @return location of given {@link EditPart} with offset. Negative offset means offset from
-   *         right/bottom side.
-   */
-  public static Point getLocation(TreeItem item, int deltaX, int deltaY) {
-    Rectangle bounds = getBounds(item);
-    Point location = new Point(0, 0);
-    if (deltaX >= 0) {
-      location.x = bounds.x + deltaX;
-    } else {
-      location.x = bounds.right() + deltaX;
-    }
-    if (deltaY >= 0) {
-      location.y = bounds.y + deltaY;
-    } else {
-      location.y = bounds.bottom() + deltaY;
-    }
-    return location;
-  }
+	private final Tree m_tree;
+	private Event m_lastEvent;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public TreeDragHelper(Tree tree) {
+		m_tree = tree;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public TreeDragHelper startDrag(TreeItem source) {
+		m_tree.setSelection(source);
+		Point location = getLocation(source, 0, 0);
+		Event event = createDNDEvent(source, location);
+		notifyDragSource(DND.DragStart, event);
+		notifyDropTarget(DND.DragEnter, event);
+		return this;
+	}
+
+	public TreeDragHelper dragOn(TreeItem target) {
+		m_tree.showItem(target);
+		Point location = getLocationOn(target);
+		m_lastEvent = createDNDEvent(target, location);
+		notifyDropTarget(DND.DragOver, m_lastEvent);
+		return this;
+	}
+
+	public TreeDragHelper dragBefore(TreeItem target) {
+		m_tree.showItem(target);
+		Point location = getLocationBefore(target);
+		m_lastEvent = createDNDEvent(target, location);
+		notifyDropTarget(DND.DragOver, m_lastEvent);
+		return this;
+	}
+
+	public TreeDragHelper dragAfter(TreeItem target) {
+		m_tree.showItem(target);
+		Point location = getLocationAfter(target);
+		m_lastEvent = createDNDEvent(target, location);
+		notifyDropTarget(DND.DragOver, m_lastEvent);
+		return this;
+	}
+
+	public void endDrag() {
+		notifyDropTarget(DND.Drop, m_lastEvent);
+	}
+
+	private Event createDNDEvent(TreeItem item, Point locationInTree) {
+		Tree tree = item.getParent();
+		// create DNDEvent
+		Event event = createDNDEvent();
+		// configure event
+		event.widget = tree;
+		event.item = item;
+		{
+			org.eclipse.swt.graphics.Point absoluteLocation =
+					Display.getCurrent().map(tree, null, locationInTree.getSWTPoint());
+			event.x = absoluteLocation.x;
+			event.y = absoluteLocation.y;
+		}
+		return event;
+	}
+
+	private static Event createDNDEvent() {
+		return ExecutionUtils.runObject(new RunnableObjectEx<Event>() {
+			@Override
+			public Event runObject() throws Exception {
+				Class<?> dndClass =
+						ReflectionUtils.getClassByName(
+								TreeRobot.class.getClassLoader(),
+								"org.eclipse.swt.dnd.DNDEvent");
+				return (Event) ReflectionUtils.getConstructorBySignature(dndClass, "<init>()").newInstance();
+			}
+		});
+	}
+
+	private void notifyDragSource(int eventType, Event event) {
+		DragSource dropTarget = (DragSource) m_tree.getData("DragSource");
+		dropTarget.notifyListeners(eventType, event);
+	}
+
+	private void notifyDropTarget(int eventType, Event event) {
+		DropTarget dropTarget = (DropTarget) m_tree.getData("DropTarget");
+		dropTarget.notifyListeners(eventType, event);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Location utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public Point getLocationOn(TreeItem item) {
+		Rectangle bounds = getBounds(item);
+		int x = bounds.x + 0;
+		int y = bounds.y + bounds.height / 2;
+		Point location = new Point(x, y);
+		return location;
+	}
+
+	public Point getLocationBefore(TreeItem item) {
+		Rectangle bounds = getBounds(item);
+		int x = bounds.x + 0;
+		int y = bounds.y + 0;
+		Point location = new Point(x, y);
+		return location;
+	}
+
+	public Point getLocationAfter(TreeItem item) {
+		Rectangle bounds = getBounds(item);
+		int x = bounds.x + 0;
+		int y = bounds.y + bounds.height / 2 + 1;
+		Point location = new Point(x, y);
+		return location;
+	}
+
+	/**
+	 * @return bounds of given {@link EditPart} in {@link Tree}.
+	 */
+	public static Rectangle getBounds(TreeItem item) {
+		return new Rectangle(item.getBounds());
+	}
+
+	/**
+	 * @return location of given {@link EditPart} with offset. Negative offset means offset from
+	 *         right/bottom side.
+	 */
+	public static Point getLocation(TreeItem item, int deltaX, int deltaY) {
+		Rectangle bounds = getBounds(item);
+		Point location = new Point(0, 0);
+		if (deltaX >= 0) {
+			location.x = bounds.x + deltaX;
+		} else {
+			location.x = bounds.right() + deltaX;
+		}
+		if (deltaY >= 0) {
+			location.y = bounds.y + deltaY;
+		} else {
+			location.y = bounds.bottom() + deltaY;
+		}
+		return location;
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/ActivatorTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/ActivatorTest.java
index 78bf9c526..ccb983d42 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/ActivatorTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/ActivatorTest.java
@@ -30,113 +30,113 @@
  * @author scheglov_ke
  */
 public class ActivatorTest extends DesignerTestCase {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link Activator#getDefault()}.
-   */
-  public void test_getDefault() throws Exception {
-    assertNotNull(Activator.getDefault());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link Activator#getDefault()}.
+	 */
+	public void test_getDefault() throws Exception {
+		assertNotNull(Activator.getDefault());
+	}
 
-  /**
-   * Test for {@link Activator#getToolkit()}.
-   */
-  public void test_getToolkit() throws Exception {
-    ToolkitDescription toolkit = Activator.getToolkit();
-    assertEquals("org.eclipse.wb.rcp", toolkit.getId());
-  }
+	/**
+	 * Test for {@link Activator#getToolkit()}.
+	 */
+	public void test_getToolkit() throws Exception {
+		ToolkitDescription toolkit = Activator.getToolkit();
+		assertEquals("org.eclipse.wb.rcp", toolkit.getId());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // getFile()
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link Activator#getFile(String)}.
-   */
-  public void test_getFile() throws Exception {
-    InputStream file = Activator.getFile("plugin.xml");
-    assertNotNull(file);
-    try {
-      String s = IOUtils2.readString(file);
-      assertThat(s.length()).isGreaterThan(1024);
-    } finally {
-      IOUtils.closeQuietly(file);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// getFile()
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link Activator#getFile(String)}.
+	 */
+	public void test_getFile() throws Exception {
+		InputStream file = Activator.getFile("plugin.xml");
+		assertNotNull(file);
+		try {
+			String s = IOUtils2.readString(file);
+			assertThat(s.length()).isGreaterThan(1024);
+		} finally {
+			IOUtils.closeQuietly(file);
+		}
+	}
 
-  /**
-   * Test for {@link Activator#getFile(String)}.
-   */
-  public void test_getFile_bad() throws Exception {
-    try {
-      Activator.getFile("noSuch.file");
-    } catch (Throwable e) {
-      String msg = e.getMessage();
-      assertThat(msg).contains("noSuch.file").contains("org.eclipse.wb.xwt");
-    }
-  }
+	/**
+	 * Test for {@link Activator#getFile(String)}.
+	 */
+	public void test_getFile_bad() throws Exception {
+		try {
+			Activator.getFile("noSuch.file");
+		} catch (Throwable e) {
+			String msg = e.getMessage();
+			assertThat(msg).contains("noSuch.file").contains("org.eclipse.wb.xwt");
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // getImage()
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link Activator#getImage(String)}.
-   */
-  public void test_getImage_good() throws Exception {
-    Image image = Activator.getImage("editor_xwt.png");
-    assertNotNull(image);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// getImage()
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link Activator#getImage(String)}.
+	 */
+	public void test_getImage_good() throws Exception {
+		Image image = Activator.getImage("editor_xwt.png");
+		assertNotNull(image);
+	}
 
-  /**
-   * Test for {@link Activator#getImage(String)}.
-   */
-  public void test_getImage_bad() throws Exception {
-    try {
-      Activator.getImage("noSuch.png");
-    } catch (Throwable e) {
-      String msg = e.getMessage();
-      assertThat(msg).contains("noSuch.png").contains("org.eclipse.wb.xwt");
-    }
-  }
+	/**
+	 * Test for {@link Activator#getImage(String)}.
+	 */
+	public void test_getImage_bad() throws Exception {
+		try {
+			Activator.getImage("noSuch.png");
+		} catch (Throwable e) {
+			String msg = e.getMessage();
+			assertThat(msg).contains("noSuch.png").contains("org.eclipse.wb.xwt");
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // getImageDescriptor()
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link Activator#getImageDescriptor(String)}.
-   */
-  public void test_getImageDescription_good() throws Exception {
-    ImageDescriptor imageDescriptor = Activator.getImageDescriptor("editor_xwt.png");
-    assertNotNull(imageDescriptor);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// getImageDescriptor()
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link Activator#getImageDescriptor(String)}.
+	 */
+	public void test_getImageDescription_good() throws Exception {
+		ImageDescriptor imageDescriptor = Activator.getImageDescriptor("editor_xwt.png");
+		assertNotNull(imageDescriptor);
+	}
 
-  /**
-   * Test for {@link Activator#getImageDescriptor(String)}.
-   */
-  public void test_getImageDescription_bad() throws Exception {
-    try {
-      Activator.getImageDescriptor("noSuch.png");
-    } catch (Throwable e) {
-      String msg = e.getMessage();
-      assertThat(msg).contains("noSuch.png").contains("org.eclipse.wb.xwt");
-    }
-  }
+	/**
+	 * Test for {@link Activator#getImageDescriptor(String)}.
+	 */
+	public void test_getImageDescription_bad() throws Exception {
+		try {
+			Activator.getImageDescriptor("noSuch.png");
+		} catch (Throwable e) {
+			String msg = e.getMessage();
+			assertThat(msg).contains("noSuch.png").contains("org.eclipse.wb.xwt");
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/XwtTests.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/XwtTests.java
index 8f779391e..09ae27bbe 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/XwtTests.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/XwtTests.java
@@ -27,15 +27,15 @@
  * @author scheglov_ke
  */
 public class XwtTests extends DesignerSuiteTests {
-  public static Test suite() {
-    TestSuite suite = new TestSuite("org.eclipse.wb.xwt");
-    suite.addTest(createSingleSuite(ActivatorTest.class));
-    suite.addTest(GefTests.suite());
-    suite.addTest(createSingleSuite(RefactoringTest.class));
-    suite.addTest(SupportTests.suite());
-    suite.addTest(ModelTests.suite());
-    suite.addTest(WizardTests.suite());
-    suite.addTest(BindingTests.suite());
-    return suite;
-  }
+	public static Test suite() {
+		TestSuite suite = new TestSuite("org.eclipse.wb.xwt");
+		suite.addTest(createSingleSuite(ActivatorTest.class));
+		suite.addTest(GefTests.suite());
+		suite.addTest(createSingleSuite(RefactoringTest.class));
+		suite.addTest(SupportTests.suite());
+		suite.addTest(ModelTests.suite());
+		suite.addTest(WizardTests.suite());
+		suite.addTest(BindingTests.suite());
+		return suite;
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/gef/GefTests.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/gef/GefTests.java
index 28a6c48ba..d08bbe5a6 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/gef/GefTests.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/gef/GefTests.java
@@ -21,10 +21,10 @@
  * @author scheglov_ke
  */
 public class GefTests extends DesignerSuiteTests {
-  public static Test suite() {
-    TestSuite suite = new TestSuite("org.eclipse.wb.xwt.gef");
-    suite.addTest(createSingleSuite(XwtPairResourceProviderTest.class));
-    suite.addTest(createSingleSuite(XwtJavaParseValidatorTest.class));
-    return suite;
-  }
+	public static Test suite() {
+		TestSuite suite = new TestSuite("org.eclipse.wb.xwt.gef");
+		suite.addTest(createSingleSuite(XwtPairResourceProviderTest.class));
+		suite.addTest(createSingleSuite(XwtJavaParseValidatorTest.class));
+		return suite;
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/gef/XwtGefTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/gef/XwtGefTest.java
index cfd756975..39f4811d2 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/gef/XwtGefTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/gef/XwtGefTest.java
@@ -33,216 +33,216 @@
  * @author scheglov_ke
  */
 public abstract class XwtGefTest extends AbstractXmlGefTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Life cycle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void setUp() throws Exception {
-    super.setUp();
-    configureForTestPreferences(Activator.getToolkit().getPreferences());
-  }
-
-  @Override
-  protected void tearDown() throws Exception {
-    configureDefaultPreferences(Activator.getToolkit().getPreferences());
-    super.tearDown();
-  }
-
-  /**
-   * Configures created project.
-   */
-  @Override
-  protected void configureNewProject() throws Exception {
-    BTestUtils.configure(m_testProject);
-    m_testProject.addPlugin("com.ibm.icu");
-    m_testProject.addPlugin("org.eclipse.core.databinding");
-    m_testProject.addPlugin("org.eclipse.core.databinding.beans");
-    m_testProject.addPlugin("org.eclipse.core.databinding.observable");
-    m_testProject.addPlugin("org.eclipse.core.databinding.property");
-    m_testProject.addPlugin("org.eclipse.jface.databinding");
-    m_testProject.addBundleJars("org.eclipse.wb.xwt", "lib");
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Preferences
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Configures test values for toolkit preferences.
-   */
-  protected void configureForTestPreferences(IPreferenceStore preferences) {
-    // direct edit
-    preferences.setValue(IPreferenceConstants.P_GENERAL_DIRECT_EDIT_AFTER_ADD, false);
-  }
-
-  /**
-   * Configures default values for toolkit preferences.
-   */
-  protected void configureDefaultPreferences(IPreferenceStore preferences) {
-    preferences.setToDefault(org.eclipse.wb.internal.swt.preferences.IPreferenceConstants.P_LAYOUT_DATA_NAME_TEMPLATE);
-    preferences.setToDefault(org.eclipse.wb.internal.swt.preferences.IPreferenceConstants.P_LAYOUT_NAME_TEMPLATE);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Open "Design" and fetch
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Opens {@link AbstractXmlEditor} with given XML source.
-   */
-  @SuppressWarnings("unchecked")
-  protected <T extends XmlObjectInfo> T openEditor(String... lines) throws Exception {
-    IFile file = setFileContentSrc("test/Test.xwt", getTestSource(lines));
-    openDesign(file);
-    return (T) m_contentObject;
-  }
-
-  @Override
-  protected final String getEditorID() {
-    return XwtEditor.ID;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Java source
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getJavaSourceToAssert() {
-    return getFileContentSrc("test/Test.java");
-  }
-
-  @Override
-  protected String[] getJavaSource_decorate(String... lines) {
-    lines =
-        CodeUtils.join(new String[]{
-            "package test;",
-            "import org.eclipse.swt.SWT;",
-            "import org.eclipse.swt.events.*;",
-            "import org.eclipse.swt.graphics.*;",
-            "import org.eclipse.swt.widgets.*;",
-            "import org.eclipse.swt.layout.*;",
-            "import org.eclipse.swt.custom.*;",
-            "import org.eclipse.jface.layout.*;",
-            "import org.eclipse.jface.viewers.*;"}, lines);
-    return lines;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // XML source
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getTestSource_namespaces() {
-    String newLine = "\n\t";
-    return newLine
-        + "xmlns:wbp='http://www.eclipse.org/wb/xwt'"
-        + newLine
-        + "xmlns:t='clr-namespace:test'"
-        + newLine
-        + "xmlns='http://www.eclipse.org/xwt/presentation'"
-        + newLine
-        + "xmlns:x='http://www.eclipse.org/xwt'";
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tool
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Loads {@link CreationTool} with {@link Button} without text.
-   */
-  protected final XmlObjectInfo loadButton() throws Exception {
-    return loadCreationTool("org.eclipse.swt.widgets.Button", "empty");
-  }
-
-  /**
-   * Loads {@link CreationTool} with {@link Button} with text.
-   */
-  protected final XmlObjectInfo loadButtonWithText() throws Exception {
-    return loadCreationTool("org.eclipse.swt.widgets.Button");
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // test.MyComponent support
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Prepares empty <code>test.MyComponent</code> class with additional lines in type body.
-   */
-  protected final void prepareMyComponent(String... lines) throws Exception {
-    prepareMyComponent(lines, ArrayUtils.EMPTY_STRING_ARRAY);
-  }
-
-  /**
-   * Prepares empty <code>test.MyComponent</code> class with additional lines in type body, and with
-   * special <code>wbp-component.xml</code> description.
-   */
-  protected final void prepareMyComponent(String[] javaLines, String[] descriptionLines)
-      throws Exception {
-    // java
-    {
-      String[] lines =
-          new String[]{
-              "package test;",
-              "import org.eclipse.swt.SWT;",
-              "import org.eclipse.swt.widgets.*;",
-              "public class MyComponent extends Composite {",
-              "  public MyComponent(Composite parent, int style) {",
-              "    super(parent, style);",
-              "  }"};
-      lines = CodeUtils.join(lines, javaLines);
-      lines = CodeUtils.join(lines, new String[]{"}"});
-      setFileContentSrc("test/MyComponent.java", getSourceDQ(lines));
-    }
-    // description
-    {
-      String[] lines =
-          new String[]{
-              "<?xml version='1.0' encoding='UTF-8'?>",
-              "<component xmlns='http://www.eclipse.org/wb/WBPComponent'>"};
-      descriptionLines = removeFillerLines(descriptionLines);
-      lines = CodeUtils.join(lines, descriptionLines);
-      lines = CodeUtils.join(lines, new String[]{"</component>"});
-      setFileContentSrc("test/MyComponent.wbp-component.xml", getSourceDQ(lines));
-    }
-    waitForAutoBuild();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Box
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected void prepareBox() throws Exception {
-    prepareBox(100, 50);
-  }
-
-  protected void prepareBox(int width, int height) throws Exception {
-    setFileContentSrc(
-        "test/Box.java",
-        getJavaSource(
-            "public class Box extends org.eclipse.swt.widgets.Button {",
-            "  public Box(Composite parent, int style) {",
-            "    super(parent, style);",
-            "  }",
-            "  protected void checkSubclass () {",
-            "  }",
-            "  public Point computeSize (int wHint, int hHint, boolean changed) {",
-            "    return new Point(" + width + ", " + height + ");",
-            "  }",
-            "}"));
-    waitForAutoBuild();
-  }
-
-  protected ControlInfo loadBox() throws Exception {
-    return loadCreationTool("test.Box");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Life cycle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void setUp() throws Exception {
+		super.setUp();
+		configureForTestPreferences(Activator.getToolkit().getPreferences());
+	}
+
+	@Override
+	protected void tearDown() throws Exception {
+		configureDefaultPreferences(Activator.getToolkit().getPreferences());
+		super.tearDown();
+	}
+
+	/**
+	 * Configures created project.
+	 */
+	@Override
+	protected void configureNewProject() throws Exception {
+		BTestUtils.configure(m_testProject);
+		m_testProject.addPlugin("com.ibm.icu");
+		m_testProject.addPlugin("org.eclipse.core.databinding");
+		m_testProject.addPlugin("org.eclipse.core.databinding.beans");
+		m_testProject.addPlugin("org.eclipse.core.databinding.observable");
+		m_testProject.addPlugin("org.eclipse.core.databinding.property");
+		m_testProject.addPlugin("org.eclipse.jface.databinding");
+		m_testProject.addBundleJars("org.eclipse.wb.xwt", "lib");
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Preferences
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Configures test values for toolkit preferences.
+	 */
+	protected void configureForTestPreferences(IPreferenceStore preferences) {
+		// direct edit
+		preferences.setValue(IPreferenceConstants.P_GENERAL_DIRECT_EDIT_AFTER_ADD, false);
+	}
+
+	/**
+	 * Configures default values for toolkit preferences.
+	 */
+	protected void configureDefaultPreferences(IPreferenceStore preferences) {
+		preferences.setToDefault(org.eclipse.wb.internal.swt.preferences.IPreferenceConstants.P_LAYOUT_DATA_NAME_TEMPLATE);
+		preferences.setToDefault(org.eclipse.wb.internal.swt.preferences.IPreferenceConstants.P_LAYOUT_NAME_TEMPLATE);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Open "Design" and fetch
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Opens {@link AbstractXmlEditor} with given XML source.
+	 */
+	@SuppressWarnings("unchecked")
+	protected <T extends XmlObjectInfo> T openEditor(String... lines) throws Exception {
+		IFile file = setFileContentSrc("test/Test.xwt", getTestSource(lines));
+		openDesign(file);
+		return (T) m_contentObject;
+	}
+
+	@Override
+	protected final String getEditorID() {
+		return XwtEditor.ID;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Java source
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getJavaSourceToAssert() {
+		return getFileContentSrc("test/Test.java");
+	}
+
+	@Override
+	protected String[] getJavaSource_decorate(String... lines) {
+		lines =
+				CodeUtils.join(new String[]{
+						"package test;",
+						"import org.eclipse.swt.SWT;",
+						"import org.eclipse.swt.events.*;",
+						"import org.eclipse.swt.graphics.*;",
+						"import org.eclipse.swt.widgets.*;",
+						"import org.eclipse.swt.layout.*;",
+						"import org.eclipse.swt.custom.*;",
+						"import org.eclipse.jface.layout.*;",
+				"import org.eclipse.jface.viewers.*;"}, lines);
+		return lines;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// XML source
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getTestSource_namespaces() {
+		String newLine = "\n\t";
+		return newLine
+				+ "xmlns:wbp='http://www.eclipse.org/wb/xwt'"
+				+ newLine
+				+ "xmlns:t='clr-namespace:test'"
+				+ newLine
+				+ "xmlns='http://www.eclipse.org/xwt/presentation'"
+				+ newLine
+				+ "xmlns:x='http://www.eclipse.org/xwt'";
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tool
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Loads {@link CreationTool} with {@link Button} without text.
+	 */
+	protected final XmlObjectInfo loadButton() throws Exception {
+		return loadCreationTool("org.eclipse.swt.widgets.Button", "empty");
+	}
+
+	/**
+	 * Loads {@link CreationTool} with {@link Button} with text.
+	 */
+	protected final XmlObjectInfo loadButtonWithText() throws Exception {
+		return loadCreationTool("org.eclipse.swt.widgets.Button");
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// test.MyComponent support
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Prepares empty <code>test.MyComponent</code> class with additional lines in type body.
+	 */
+	protected final void prepareMyComponent(String... lines) throws Exception {
+		prepareMyComponent(lines, ArrayUtils.EMPTY_STRING_ARRAY);
+	}
+
+	/**
+	 * Prepares empty <code>test.MyComponent</code> class with additional lines in type body, and with
+	 * special <code>wbp-component.xml</code> description.
+	 */
+	protected final void prepareMyComponent(String[] javaLines, String[] descriptionLines)
+			throws Exception {
+		// java
+		{
+			String[] lines =
+					new String[]{
+							"package test;",
+							"import org.eclipse.swt.SWT;",
+							"import org.eclipse.swt.widgets.*;",
+							"public class MyComponent extends Composite {",
+							"  public MyComponent(Composite parent, int style) {",
+							"    super(parent, style);",
+			"  }"};
+			lines = CodeUtils.join(lines, javaLines);
+			lines = CodeUtils.join(lines, new String[]{"}"});
+			setFileContentSrc("test/MyComponent.java", getSourceDQ(lines));
+		}
+		// description
+		{
+			String[] lines =
+					new String[]{
+							"<?xml version='1.0' encoding='UTF-8'?>",
+			"<component xmlns='http://www.eclipse.org/wb/WBPComponent'>"};
+			descriptionLines = removeFillerLines(descriptionLines);
+			lines = CodeUtils.join(lines, descriptionLines);
+			lines = CodeUtils.join(lines, new String[]{"</component>"});
+			setFileContentSrc("test/MyComponent.wbp-component.xml", getSourceDQ(lines));
+		}
+		waitForAutoBuild();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Box
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected void prepareBox() throws Exception {
+		prepareBox(100, 50);
+	}
+
+	protected void prepareBox(int width, int height) throws Exception {
+		setFileContentSrc(
+				"test/Box.java",
+				getJavaSource(
+						"public class Box extends org.eclipse.swt.widgets.Button {",
+						"  public Box(Composite parent, int style) {",
+						"    super(parent, style);",
+						"  }",
+						"  protected void checkSubclass () {",
+						"  }",
+						"  public Point computeSize (int wHint, int hHint, boolean changed) {",
+						"    return new Point(" + width + ", " + height + ");",
+						"  }",
+						"}"));
+		waitForAutoBuild();
+	}
+
+	protected ControlInfo loadBox() throws Exception {
+		return loadCreationTool("test.Box");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/gef/XwtJavaParseValidatorTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/gef/XwtJavaParseValidatorTest.java
index 30af82d5a..4b2dad6c4 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/gef/XwtJavaParseValidatorTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/gef/XwtJavaParseValidatorTest.java
@@ -29,59 +29,59 @@
  * @author scheglov_ke
  */
 public class XwtJavaParseValidatorTest extends XwtGefTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Life cycle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void tearDown() throws Exception {
-    DesignerPlugin.setDisplayExceptionOnConsole(true);
-    EnvironmentUtils.setTestingTime(true);
-    super.tearDown();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Life cycle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void tearDown() throws Exception {
+		DesignerPlugin.setDisplayExceptionOnConsole(true);
+		EnvironmentUtils.setTestingTime(true);
+		super.tearDown();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_showWarning() throws Exception {
-    removeExceptionsListener();
-    DesignerPlugin.setDisplayExceptionOnConsole(false);
-    //
-    IFile javaFile =
-        setFileContentSrc(
-            "test/Test.java",
-            getJavaSource(
-                "// filler filler filler filler filler",
-                "public class Test {",
-                "  public static void main(String args[]) throws Exception {",
-                "    XWT.load((java.net.URL) null);",
-                "  }",
-                "}"));
-    IEditorPart javaEditor =
-        IDE.openEditor(DesignerPlugin.getActivePage(), javaFile, IDesignerEditor.ID);
-    // switch to Design
-    {
-      SwitchAction switchAction = new SwitchAction();
-      switchAction.setActiveEditor(null, javaEditor);
-      switchAction.run();
-    }
-    // prepare UIContext
-    UiContext context = new UiContext();
-    // WarningComposite is visible
-    Composite warningComposite = context.findFirstWidget(WarningComposite.class);
-    assertNotNull(warningComposite);
-    assertTrue(warningComposite.isVisible());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_showWarning() throws Exception {
+		removeExceptionsListener();
+		DesignerPlugin.setDisplayExceptionOnConsole(false);
+		//
+		IFile javaFile =
+				setFileContentSrc(
+						"test/Test.java",
+						getJavaSource(
+								"// filler filler filler filler filler",
+								"public class Test {",
+								"  public static void main(String args[]) throws Exception {",
+								"    XWT.load((java.net.URL) null);",
+								"  }",
+								"}"));
+		IEditorPart javaEditor =
+				IDE.openEditor(DesignerPlugin.getActivePage(), javaFile, IDesignerEditor.ID);
+		// switch to Design
+		{
+			SwitchAction switchAction = new SwitchAction();
+			switchAction.setActiveEditor(null, javaEditor);
+			switchAction.run();
+		}
+		// prepare UIContext
+		UiContext context = new UiContext();
+		// WarningComposite is visible
+		Composite warningComposite = context.findFirstWidget(WarningComposite.class);
+		assertNotNull(warningComposite);
+		assertTrue(warningComposite.isVisible());
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/gef/XwtPairResourceProviderTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/gef/XwtPairResourceProviderTest.java
index 73a2d0143..c9dd976cf 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/gef/XwtPairResourceProviderTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/gef/XwtPairResourceProviderTest.java
@@ -21,83 +21,83 @@
  * @author scheglov_ke
  */
 public class XwtPairResourceProviderTest extends XwtModelTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_unknownExtension() throws Exception {
-    IFile file = setFileContentSrc("test/Test.foo", "");
-    assertEquals(null, getPair(file));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_unknownExtension() throws Exception {
+		IFile file = setFileContentSrc("test/Test.foo", "");
+		assertEquals(null, getPair(file));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // XWT -> Java
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_toJava_javaClassAttribute() throws Exception {
-    IFile javaFile = setFileContentSrc("foo/Bar.java", "");
-    IFile xwtFile = setFileContentSrc("test/Test.xwt", getSource("<Shell x:Class='foo.Bar'/>"));
-    //
-    assertEquals(javaFile, getPair(xwtFile));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// XWT -> Java
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_toJava_javaClassAttribute() throws Exception {
+		IFile javaFile = setFileContentSrc("foo/Bar.java", "");
+		IFile xwtFile = setFileContentSrc("test/Test.xwt", getSource("<Shell x:Class='foo.Bar'/>"));
+		//
+		assertEquals(javaFile, getPair(xwtFile));
+	}
 
-  public void test_toJava_sameName() throws Exception {
-    IFile javaFile = setFileContentSrc("test/Test.java", "");
-    IFile xwtFile = setFileContentSrc("test/Test.xwt", getSource("<Shell/>"));
-    //
-    assertEquals(javaFile, getPair(xwtFile));
-  }
+	public void test_toJava_sameName() throws Exception {
+		IFile javaFile = setFileContentSrc("test/Test.java", "");
+		IFile xwtFile = setFileContentSrc("test/Test.xwt", getSource("<Shell/>"));
+		//
+		assertEquals(javaFile, getPair(xwtFile));
+	}
 
-  public void test_toJava_no() throws Exception {
-    setFileContentSrc("foo/Test.java", "");
-    IFile xwtFile = setFileContentSrc("test/Test.xwt", getSource("<Shell/>"));
-    //
-    assertEquals(null, getPair(xwtFile));
-  }
+	public void test_toJava_no() throws Exception {
+		setFileContentSrc("foo/Test.java", "");
+		IFile xwtFile = setFileContentSrc("test/Test.xwt", getSource("<Shell/>"));
+		//
+		assertEquals(null, getPair(xwtFile));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Java -> XWT
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_toXWT_javaClassAttribute_samePackage() throws Exception {
-    IFile javaFile = setFileContentSrc("test/Bar.java", "");
-    IFile xwtFile = setFileContentSrc("test/Test.xwt", getSource("<Shell x:Class='test.Bar'/>"));
-    //
-    assertEquals(xwtFile, getPair(javaFile));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Java -> XWT
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_toXWT_javaClassAttribute_samePackage() throws Exception {
+		IFile javaFile = setFileContentSrc("test/Bar.java", "");
+		IFile xwtFile = setFileContentSrc("test/Test.xwt", getSource("<Shell x:Class='test.Bar'/>"));
+		//
+		assertEquals(xwtFile, getPair(javaFile));
+	}
 
-  public void test_toXWT_sameName() throws Exception {
-    IFile javaFile = setFileContentSrc("test/Test.java", "");
-    IFile xwtFile = setFileContentSrc("test/Test.xwt", getSource("<Shell/>"));
-    //
-    assertEquals(xwtFile, getPair(javaFile));
-  }
+	public void test_toXWT_sameName() throws Exception {
+		IFile javaFile = setFileContentSrc("test/Test.java", "");
+		IFile xwtFile = setFileContentSrc("test/Test.xwt", getSource("<Shell/>"));
+		//
+		assertEquals(xwtFile, getPair(javaFile));
+	}
 
-  public void test_toXWT_no() throws Exception {
-    IFile javaFile = setFileContentSrc("test/Test.java", "");
-    setFileContentSrc("foo/Test.xwt", getSource("<Shell/>"));
-    //
-    assertEquals(null, getPair(javaFile));
-  }
+	public void test_toXWT_no() throws Exception {
+		IFile javaFile = setFileContentSrc("test/Test.java", "");
+		setFileContentSrc("foo/Test.xwt", getSource("<Shell/>"));
+		//
+		assertEquals(null, getPair(javaFile));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static IFile getPair(IFile file) {
-    return XwtPairResourceProvider.INSTANCE.getPair(file);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static IFile getPair(IFile file) {
+		return XwtPairResourceProvider.INSTANCE.getPair(file);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/ModelTests.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/ModelTests.java
index c4c974a68..8bf9d44bd 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/ModelTests.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/ModelTests.java
@@ -26,20 +26,20 @@
  * @author scheglov_ke
  */
 public class ModelTests extends DesignerSuiteTests {
-  public static Test suite() {
-    TestSuite suite = new TestSuite("org.eclipse.wb.xwt.model");
-    suite.addTest(createSingleSuite(XwtDescriptionProcessorTest.class));
-    suite.addTest(createSingleSuite(XwtTagResolverTest.class));
-    suite.addTest(createSingleSuite(XwtStringArraySupportTest.class));
-    suite.addTest(createSingleSuite(XwtStaticFieldSupportTest.class));
-    suite.addTest(createSingleSuite(NameSupportTest.class));
-    suite.addTest(createSingleSuite(NamePropertySupportTest.class));
-    suite.addTest(createSingleSuite(XwtListenerPropertiesTest.class));
-    suite.addTest(PropertyTests.suite());
-    suite.addTest(WidgetTests.suite());
-    suite.addTest(LayoutTests.suite());
-    suite.addTest(JFaceTests.suite());
-    suite.addTest(FormsTests.suite());
-    return suite;
-  }
+	public static Test suite() {
+		TestSuite suite = new TestSuite("org.eclipse.wb.xwt.model");
+		suite.addTest(createSingleSuite(XwtDescriptionProcessorTest.class));
+		suite.addTest(createSingleSuite(XwtTagResolverTest.class));
+		suite.addTest(createSingleSuite(XwtStringArraySupportTest.class));
+		suite.addTest(createSingleSuite(XwtStaticFieldSupportTest.class));
+		suite.addTest(createSingleSuite(NameSupportTest.class));
+		suite.addTest(createSingleSuite(NamePropertySupportTest.class));
+		suite.addTest(createSingleSuite(XwtListenerPropertiesTest.class));
+		suite.addTest(PropertyTests.suite());
+		suite.addTest(WidgetTests.suite());
+		suite.addTest(LayoutTests.suite());
+		suite.addTest(JFaceTests.suite());
+		suite.addTest(FormsTests.suite());
+		return suite;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/NamePropertySupportTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/NamePropertySupportTest.java
index 831f4ed18..403a9fa1f 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/NamePropertySupportTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/NamePropertySupportTest.java
@@ -21,85 +21,85 @@
  * @author scheglov_ke
  */
 public class NamePropertySupportTest extends XwtModelTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_Control() throws Exception {
-    XmlObjectInfo shell = parse("<Shell/>");
-    // prepare "Name" property
-    Property property = shell.getPropertyByTitle("Name");
-    assertNotNull(property);
-    assertTrue(property.getCategory().isSystem());
-    // cached
-    assertSame(property, shell.getPropertyByTitle("Name"));
-    // no value yet
-    assertFalse(property.isModified());
-    assertEquals(Property.UNKNOWN_VALUE, property.getValue());
-    // set value
-    property.setValue("shell");
-    assertXML("<Shell x:Name='shell'/>");
-    assertTrue(property.isModified());
-    assertEquals("shell", property.getValue());
-    // remove value
-    property.setValue(Property.UNKNOWN_VALUE);
-    assertXML("<Shell/>");
-    assertFalse(property.isModified());
-    assertEquals(Property.UNKNOWN_VALUE, property.getValue());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_Control() throws Exception {
+		XmlObjectInfo shell = parse("<Shell/>");
+		// prepare "Name" property
+		Property property = shell.getPropertyByTitle("Name");
+		assertNotNull(property);
+		assertTrue(property.getCategory().isSystem());
+		// cached
+		assertSame(property, shell.getPropertyByTitle("Name"));
+		// no value yet
+		assertFalse(property.isModified());
+		assertEquals(Property.UNKNOWN_VALUE, property.getValue());
+		// set value
+		property.setValue("shell");
+		assertXML("<Shell x:Name='shell'/>");
+		assertTrue(property.isModified());
+		assertEquals("shell", property.getValue());
+		// remove value
+		property.setValue(Property.UNKNOWN_VALUE);
+		assertXML("<Shell/>");
+		assertFalse(property.isModified());
+		assertEquals(Property.UNKNOWN_VALUE, property.getValue());
+	}
 
-  public void test_Viewer() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <TableViewer wbp:name='viewer'/>",
-        "</Shell>");
-    ViewerInfo viewer = getObjectByName("viewer");
-    // prepare "Name" property
-    Property property = viewer.getPropertyByTitle("Name");
-    assertNotNull(property);
-    assertTrue(property.getCategory().isSystem());
-    // cached
-    assertSame(property, viewer.getPropertyByTitle("Name"));
-    // no value yet
-    assertFalse(property.isModified());
-    assertEquals(Property.UNKNOWN_VALUE, property.getValue());
-    // set value
-    property.setValue("myViewer");
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <TableViewer wbp:name='viewer' x:Name='myViewer'/>",
-        "</Shell>");
-    assertTrue(property.isModified());
-    assertEquals("myViewer", property.getValue());
-    // remove value
-    property.setValue(Property.UNKNOWN_VALUE);
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <TableViewer wbp:name='viewer'/>",
-        "</Shell>");
-    assertFalse(property.isModified());
-    assertEquals(Property.UNKNOWN_VALUE, property.getValue());
-  }
+	public void test_Viewer() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <TableViewer wbp:name='viewer'/>",
+				"</Shell>");
+		ViewerInfo viewer = getObjectByName("viewer");
+		// prepare "Name" property
+		Property property = viewer.getPropertyByTitle("Name");
+		assertNotNull(property);
+		assertTrue(property.getCategory().isSystem());
+		// cached
+		assertSame(property, viewer.getPropertyByTitle("Name"));
+		// no value yet
+		assertFalse(property.isModified());
+		assertEquals(Property.UNKNOWN_VALUE, property.getValue());
+		// set value
+		property.setValue("myViewer");
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <TableViewer wbp:name='viewer' x:Name='myViewer'/>",
+				"</Shell>");
+		assertTrue(property.isModified());
+		assertEquals("myViewer", property.getValue());
+		// remove value
+		property.setValue(Property.UNKNOWN_VALUE);
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <TableViewer wbp:name='viewer'/>",
+				"</Shell>");
+		assertFalse(property.isModified());
+		assertEquals(Property.UNKNOWN_VALUE, property.getValue());
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/NameSupportTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/NameSupportTest.java
index 0de758d2d..173a2afc9 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/NameSupportTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/NameSupportTest.java
@@ -30,285 +30,285 @@
  * @author scheglov_ke
  */
 public class NameSupportTest extends XwtModelTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // getName()
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link NameSupport#getName(XmlObjectInfo)}.
-   * <p>
-   * No namespace, and no name.
-   */
-  public void test_getName_noNamespace() throws Exception {
-    XmlObjectInfo shell =
-        parse(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Button wbp:name='button'/>",
-            "</Shell>");
-    refresh();
-    ControlInfo button = getObjectByName("button");
-    // remove namespace declaration
-    shell.setAttribute("xmlns:x", null);
-    // validate
-    assertThat(NameSupport.getName(button)).isNull();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// getName()
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link NameSupport#getName(XmlObjectInfo)}.
+	 * <p>
+	 * No namespace, and no name.
+	 */
+	public void test_getName_noNamespace() throws Exception {
+		XmlObjectInfo shell =
+				parse(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Button wbp:name='button'/>",
+						"</Shell>");
+		refresh();
+		ControlInfo button = getObjectByName("button");
+		// remove namespace declaration
+		shell.setAttribute("xmlns:x", null);
+		// validate
+		assertThat(NameSupport.getName(button)).isNull();
+	}
 
-  /**
-   * Test for {@link NameSupport#getName(XmlObjectInfo)}.
-   * <p>
-   * Name exists.
-   */
-  public void test_getName_hasName() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Button wbp:name='button' x:Name='button' text='Save'/>",
-        "</Shell>");
-    refresh();
-    ControlInfo button = getObjectByName("button");
-    // has name
-    {
-      String name = NameSupport.getName(button);
-      assertThat(name).isEqualTo("button");
-    }
-    // ...and it is included into presentation text
-    {
-      String text = ObjectsLabelProvider.INSTANCE.getText(button);
-      assertEquals("Button - button - \"Save\"", text);
-    }
-  }
+	/**
+	 * Test for {@link NameSupport#getName(XmlObjectInfo)}.
+	 * <p>
+	 * Name exists.
+	 */
+	public void test_getName_hasName() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Button wbp:name='button' x:Name='button' text='Save'/>",
+				"</Shell>");
+		refresh();
+		ControlInfo button = getObjectByName("button");
+		// has name
+		{
+			String name = NameSupport.getName(button);
+			assertThat(name).isEqualTo("button");
+		}
+		// ...and it is included into presentation text
+		{
+			String text = ObjectsLabelProvider.INSTANCE.getText(button);
+			assertEquals("Button - button - \"Save\"", text);
+		}
+	}
 
-  /**
-   * Test for {@link NameSupport#getName(XmlObjectInfo)}.
-   * <p>
-   * Name exists, but not "x:" namespace name is used.
-   */
-  public void test_getName_hasName_nonStandardNamespace() throws Exception {
-    XmlObjectInfo root =
-        parse(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Button wbp:name='button' x:Name='btn'/>",
-            "</Shell>");
-    refresh();
-    ControlInfo button = getObjectByName("button");
-    // use "y" name of namespace
-    {
-      root.setAttribute("xmlns:x", null);
-      root.setAttribute("xmlns:y", "http://www.eclipse.org/xwt");
-      button.setAttribute("x:Name", null);
-      button.setAttribute("y:Name", "btn");
-    }
-    // validate
-    String name = NameSupport.getName(button);
-    assertThat(name).isEqualTo("btn");
-  }
+	/**
+	 * Test for {@link NameSupport#getName(XmlObjectInfo)}.
+	 * <p>
+	 * Name exists, but not "x:" namespace name is used.
+	 */
+	public void test_getName_hasName_nonStandardNamespace() throws Exception {
+		XmlObjectInfo root =
+				parse(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Button wbp:name='button' x:Name='btn'/>",
+						"</Shell>");
+		refresh();
+		ControlInfo button = getObjectByName("button");
+		// use "y" name of namespace
+		{
+			root.setAttribute("xmlns:x", null);
+			root.setAttribute("xmlns:y", "http://www.eclipse.org/xwt");
+			button.setAttribute("x:Name", null);
+			button.setAttribute("y:Name", "btn");
+		}
+		// validate
+		String name = NameSupport.getName(button);
+		assertThat(name).isEqualTo("btn");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // setName()
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link NameSupport#setName(XmlObjectInfo, String)}.
-   */
-  public void test_setName_hasName() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    refresh();
-    ControlInfo button = getObjectByName("button");
-    //
-    NameSupport.setName(button, "myButton");
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Button wbp:name='button' x:Name='myButton'/>",
-        "</Shell>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// setName()
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link NameSupport#setName(XmlObjectInfo, String)}.
+	 */
+	public void test_setName_hasName() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		refresh();
+		ControlInfo button = getObjectByName("button");
+		//
+		NameSupport.setName(button, "myButton");
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Button wbp:name='button' x:Name='myButton'/>",
+				"</Shell>");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ensureName()
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for single component with no name set.
-   */
-  public void test_ensureName_generateName() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    refresh();
-    ControlInfo button = getObjectByName("button");
-    //
-    {
-      String name = NameSupport.ensureName(button);
-      assertThat(name).isEqualTo("button");
-    }
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Button wbp:name='button' x:Name='button'/>",
-        "</Shell>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ensureName()
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for single component with no name set.
+	 */
+	public void test_ensureName_generateName() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		refresh();
+		ControlInfo button = getObjectByName("button");
+		//
+		{
+			String name = NameSupport.ensureName(button);
+			assertThat(name).isEqualTo("button");
+		}
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Button wbp:name='button' x:Name='button'/>",
+				"</Shell>");
+	}
 
-  /**
-   * Test for single component with no name set.
-   */
-  public void test_ensureName_generateName_nonStandardNamespace() throws Exception {
-    XmlObjectInfo root =
-        parse(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Button wbp:name='button'/>",
-            "</Shell>");
-    refresh();
-    ControlInfo button = getObjectByName("button");
-    // use "y" name of namespace
-    {
-      root.setAttribute("xmlns:x", null);
-      root.setAttribute("xmlns:y", "http://www.eclipse.org/xwt");
-    }
-    // generate and validate
-    String name = NameSupport.ensureName(button);
-    assertThat(name).isEqualTo("button");
-    assertThat(m_lastContext.getContent()).contains("y:Name=\"button\"");
-  }
+	/**
+	 * Test for single component with no name set.
+	 */
+	public void test_ensureName_generateName_nonStandardNamespace() throws Exception {
+		XmlObjectInfo root =
+				parse(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Button wbp:name='button'/>",
+						"</Shell>");
+		refresh();
+		ControlInfo button = getObjectByName("button");
+		// use "y" name of namespace
+		{
+			root.setAttribute("xmlns:x", null);
+			root.setAttribute("xmlns:y", "http://www.eclipse.org/xwt");
+		}
+		// generate and validate
+		String name = NameSupport.ensureName(button);
+		assertThat(name).isEqualTo("button");
+		assertThat(m_lastContext.getContent()).contains("y:Name=\"button\"");
+	}
 
-  /**
-   * Test for multiple components one of which already has default name set.
-   */
-  public void test_ensureName_generateUnique() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Button x:Name='button'/>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    refresh();
-    ControlInfo button = getObjectByName("button");
-    //
-    String name = NameSupport.ensureName(button);
-    assertThat(name).isEqualTo("button_1");
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Button x:Name='button'/>",
-        "  <Button wbp:name='button' x:Name='button_1'/>",
-        "</Shell>");
-  }
+	/**
+	 * Test for multiple components one of which already has default name set.
+	 */
+	public void test_ensureName_generateUnique() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Button x:Name='button'/>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		refresh();
+		ControlInfo button = getObjectByName("button");
+		//
+		String name = NameSupport.ensureName(button);
+		assertThat(name).isEqualTo("button_1");
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Button x:Name='button'/>",
+				"  <Button wbp:name='button' x:Name='button_1'/>",
+				"</Shell>");
+	}
 
-  /**
-   * Test for component name to be specifically defined in component description.
-   */
-  public void test_ensureName_defaultNameInXML() throws Exception {
-    prepareMyComponent(new String[]{}, new String[]{
-        "// filler filler filler filler filler",
-        "<parameters>",
-        "  <parameter name='variable.name'>testName</parameter>",
-        "</parameters>"});
-    parse(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <t:MyComponent wbp:name='myComponent'/>",
-        "</Shell>");
-    refresh();
-    ControlInfo component = getObjectByName("myComponent");
-    //
-    String name = NameSupport.ensureName(component);
-    assertThat(name).isEqualTo("testName");
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <t:MyComponent wbp:name='myComponent' x:Name='testName'/>",
-        "</Shell>");
-  }
+	/**
+	 * Test for component name to be specifically defined in component description.
+	 */
+	public void test_ensureName_defaultNameInXML() throws Exception {
+		prepareMyComponent(new String[]{}, new String[]{
+				"// filler filler filler filler filler",
+				"<parameters>",
+				"  <parameter name='variable.name'>testName</parameter>",
+		"</parameters>"});
+		parse(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <t:MyComponent wbp:name='myComponent'/>",
+				"</Shell>");
+		refresh();
+		ControlInfo component = getObjectByName("myComponent");
+		//
+		String name = NameSupport.ensureName(component);
+		assertThat(name).isEqualTo("testName");
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <t:MyComponent wbp:name='myComponent' x:Name='testName'/>",
+				"</Shell>");
+	}
 
-  /**
-   * Generate new name, using {@link ComponentNameDescription}.
-   */
-  public void test_ensureName_defaultNameInPreferences() throws Exception {
-    // set descriptions
-    {
-      List<ComponentNameDescription> descriptions = Lists.newArrayList();
-      descriptions.add(new ComponentNameDescription("org.eclipse.swt.widgets.Button",
-          "myButton",
-          "mbtn"));
-      NamesManager.setNameDescriptions(RcpToolkitDescription.INSTANCE, descriptions);
-    }
-    // parse
-    parse(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    refresh();
-    ControlInfo button = getObjectByName("button");
-    //
-    String name = NameSupport.ensureName(button);
-    assertThat(name).isEqualTo("myButton");
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Button wbp:name='button' x:Name='myButton'/>",
-        "</Shell>");
-  }
+	/**
+	 * Generate new name, using {@link ComponentNameDescription}.
+	 */
+	public void test_ensureName_defaultNameInPreferences() throws Exception {
+		// set descriptions
+		{
+			List<ComponentNameDescription> descriptions = Lists.newArrayList();
+			descriptions.add(new ComponentNameDescription("org.eclipse.swt.widgets.Button",
+					"myButton",
+					"mbtn"));
+			NamesManager.setNameDescriptions(RcpToolkitDescription.INSTANCE, descriptions);
+		}
+		// parse
+		parse(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		refresh();
+		ControlInfo button = getObjectByName("button");
+		//
+		String name = NameSupport.ensureName(button);
+		assertThat(name).isEqualTo("myButton");
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Button wbp:name='button' x:Name='myButton'/>",
+				"</Shell>");
+	}
 
-  /**
-   * When we check for existing "x:Name" attributes, we should not try to ask "element" of virtual
-   * {@link XmlObjectInfo}, to prevent its materialization.
-   */
-  public void test_ensureName_ignoreVirtualElements() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    refresh();
-    ControlInfo button = getObjectByName("button");
-    //
-    String name = NameSupport.ensureName(button);
-    assertThat(name).isEqualTo("button");
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button' x:Name='button'/>",
-        "</Shell>");
-  }
+	/**
+	 * When we check for existing "x:Name" attributes, we should not try to ask "element" of virtual
+	 * {@link XmlObjectInfo}, to prevent its materialization.
+	 */
+	public void test_ensureName_ignoreVirtualElements() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		refresh();
+		ControlInfo button = getObjectByName("button");
+		//
+		String name = NameSupport.ensureName(button);
+		assertThat(name).isEqualTo("button");
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button' x:Name='button'/>",
+				"</Shell>");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/XwtDescriptionProcessorTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/XwtDescriptionProcessorTest.java
index 127c7b512..69a7785e3 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/XwtDescriptionProcessorTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/XwtDescriptionProcessorTest.java
@@ -20,40 +20,40 @@
  * @author scheglov_ke
  */
 public class XwtDescriptionProcessorTest extends XwtModelTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test that each XWT component has default creation, with <code>null</code> ID.
-   */
-  public void test_ensureDefaultCreation() throws Exception {
-    setFileContentSrc(
-        "test/MyComponent.java",
-        getSource(
-            "package test;",
-            "import org.eclipse.swt.widgets.Composite;",
-            "public class MyComponent extends Composite {",
-            "  public MyComponent(Composite parent, int style) {",
-            "    super(parent, style);",
-            "  }",
-            "}"));
-    waitForAutoBuild();
-    // parse
-    parse("<Shell/>");
-    // analyze description
-    ComponentDescription description =
-        ComponentDescriptionHelper.getDescription(m_lastContext, "test.MyComponent");
-    assertNotNull(description.getCreation(null));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test that each XWT component has default creation, with <code>null</code> ID.
+	 */
+	public void test_ensureDefaultCreation() throws Exception {
+		setFileContentSrc(
+				"test/MyComponent.java",
+				getSource(
+						"package test;",
+						"import org.eclipse.swt.widgets.Composite;",
+						"public class MyComponent extends Composite {",
+						"  public MyComponent(Composite parent, int style) {",
+						"    super(parent, style);",
+						"  }",
+						"}"));
+		waitForAutoBuild();
+		// parse
+		parse("<Shell/>");
+		// analyze description
+		ComponentDescription description =
+				ComponentDescriptionHelper.getDescription(m_lastContext, "test.MyComponent");
+		assertNotNull(description.getCreation(null));
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/XwtListenerPropertiesTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/XwtListenerPropertiesTest.java
index 0cf9026d8..f7f364780 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/XwtListenerPropertiesTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/XwtListenerPropertiesTest.java
@@ -23,118 +23,118 @@
  * @author scheglov_ke
  */
 public class XwtListenerPropertiesTest extends XwtModelTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Life cycle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void tearDown() throws Exception {
-    DesignerPlugin.getActivePage().closeAllEditors(false);
-    super.tearDown();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Life cycle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void tearDown() throws Exception {
+		DesignerPlugin.getActivePage().closeAllEditors(false);
+		super.tearDown();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * If widget has no name, we generate handler method name without widget name.
-   */
-  public void test_openListener_noName() throws Exception {
-    createTestClass(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "public class Test {",
-        "}");
-    parse(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell x:Class='test.Test'>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    XmlObjectInfo button = getObjectByName("button");
-    Property property = PropertyUtils.getByPath(button, "Events/KeyDown");
-    // method was added
-    openListener(property);
-    assertEquals(
-        getJavaSource(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "public class Test {",
-            "  public void onKeyDown(Event event) {",
-            "  }",
-            "}"),
-        getJavaFile());
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell x:Class='test.Test'>",
-        "  <Button wbp:name='button' KeyDownEvent='onKeyDown'/>",
-        "</Shell>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * If widget has no name, we generate handler method name without widget name.
+	 */
+	public void test_openListener_noName() throws Exception {
+		createTestClass(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"public class Test {",
+				"}");
+		parse(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell x:Class='test.Test'>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		XmlObjectInfo button = getObjectByName("button");
+		Property property = PropertyUtils.getByPath(button, "Events/KeyDown");
+		// method was added
+		openListener(property);
+		assertEquals(
+				getJavaSource(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"public class Test {",
+						"  public void onKeyDown(Event event) {",
+						"  }",
+						"}"),
+				getJavaFile());
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell x:Class='test.Test'>",
+				"  <Button wbp:name='button' KeyDownEvent='onKeyDown'/>",
+				"</Shell>");
+	}
 
-  /**
-   * When widget has name, we should include it into event listener method name.
-   */
-  public void test_openListener_hasName() throws Exception {
-    createTestClass(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "public class Test {",
-        "}");
-    parse(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell x:Class='test.Test'>",
-        "  <Button wbp:name='button' x:Name='myButton'/>",
-        "</Shell>");
-    XmlObjectInfo button = getObjectByName("button");
-    Property property = PropertyUtils.getByPath(button, "Events/KeyDown");
-    // method was added
-    openListener(property);
-    assertEquals(
-        getJavaSource(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "public class Test {",
-            "  public void onMyButtonKeyDown(Event event) {",
-            "  }",
-            "}"),
-        getJavaFile());
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell x:Class='test.Test'>",
-        "  <Button wbp:name='button' x:Name='myButton' KeyDownEvent='onMyButtonKeyDown'/>",
-        "</Shell>");
-  }
+	/**
+	 * When widget has name, we should include it into event listener method name.
+	 */
+	public void test_openListener_hasName() throws Exception {
+		createTestClass(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"public class Test {",
+				"}");
+		parse(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell x:Class='test.Test'>",
+				"  <Button wbp:name='button' x:Name='myButton'/>",
+				"</Shell>");
+		XmlObjectInfo button = getObjectByName("button");
+		Property property = PropertyUtils.getByPath(button, "Events/KeyDown");
+		// method was added
+		openListener(property);
+		assertEquals(
+				getJavaSource(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"public class Test {",
+						"  public void onMyButtonKeyDown(Event event) {",
+						"  }",
+						"}"),
+				getJavaFile());
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell x:Class='test.Test'>",
+				"  <Button wbp:name='button' x:Name='myButton' KeyDownEvent='onMyButtonKeyDown'/>",
+				"</Shell>");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void createTestClass(String... lines) throws Exception {
-    setFileContentSrc("test/Test.java", getJavaSource(lines));
-    waitForAutoBuild();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void createTestClass(String... lines) throws Exception {
+		setFileContentSrc("test/Test.java", getJavaSource(lines));
+		waitForAutoBuild();
+	}
 
-  private static void openListener(Property property) throws Exception {
-    ReflectionUtils.invokeMethod(property, "openListener()");
-  }
+	private static void openListener(Property property) throws Exception {
+		ReflectionUtils.invokeMethod(property, "openListener()");
+	}
 
-  private static String getJavaFile() throws Exception {
-    return getFileContentSrc("test/Test.java");
-  }
+	private static String getJavaFile() throws Exception {
+		return getFileContentSrc("test/Test.java");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/XwtModelTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/XwtModelTest.java
index f89aea060..db9e4c909 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/XwtModelTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/XwtModelTest.java
@@ -40,204 +40,204 @@
  * @author scheglov_ke
  */
 public abstract class XwtModelTest extends AbstractXmlModelTest {
-  protected boolean m_getSource_includeStandardNamespaces;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Life cycle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void setUp() throws Exception {
-    super.setUp();
-    configureForTestPreferences(RcpToolkitDescription.INSTANCE);
-    m_getSource_includeStandardNamespaces = true;
-  }
-
-  @Override
-  protected void tearDown() throws Exception {
-    configureDefaultPreferences(RcpToolkitDescription.INSTANCE);
-    super.tearDown();
-  }
-
-  /**
-   * Configures created project.
-   */
-  @Override
-  protected void configureNewProject() throws Exception {
-    BTestUtils.configure(m_testProject);
-    m_testProject.addPlugin("com.ibm.icu");
-    m_testProject.addPlugin("org.eclipse.core.databinding");
-    m_testProject.addPlugin("org.eclipse.core.databinding.beans");
-    m_testProject.addPlugin("org.eclipse.core.databinding.observable");
-    m_testProject.addPlugin("org.eclipse.core.databinding.property");
-    m_testProject.addPlugin("org.eclipse.jface.databinding");
-    m_testProject.addBundleJars("org.eclipse.wb.xwt", "lib");
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Preferences
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Configures test values for toolkit preferences.
-   */
-  protected void configureForTestPreferences(ToolkitDescription toolkit) {
-  }
-
-  /**
-   * Configures default values for toolkit preferences.
-   */
-  protected void configureDefaultPreferences(ToolkitDescription toolkit) {
-    IPreferenceStore preferences = toolkit.getPreferences();
-    preferences.setToDefault(org.eclipse.wb.internal.swt.preferences.IPreferenceConstants.P_LAYOUT_DATA_NAME_TEMPLATE);
-    preferences.setToDefault(org.eclipse.wb.internal.swt.preferences.IPreferenceConstants.P_LAYOUT_NAME_TEMPLATE);
-    NamesManager.setNameDescriptions(toolkit, ImmutableList.<ComponentNameDescription>of());
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Java source
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getJavaSourceToAssert() {
-    return getFileContentSrc("test/Test.java");
-  }
-
-  @Override
-  protected String[] getJavaSource_decorate(String... lines) {
-    lines =
-        CodeUtils.join(new String[]{
-            "package test;",
-            "import org.eclipse.swt.SWT;",
-            "import org.eclipse.swt.events.*;",
-            "import org.eclipse.swt.graphics.*;",
-            "import org.eclipse.swt.widgets.*;",
-            "import org.eclipse.swt.layout.*;",
-            "import org.eclipse.swt.custom.*;",
-            "import org.eclipse.jface.layout.*;",
-            "import org.eclipse.jface.viewers.*;"}, lines);
-    return lines;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parsing and source
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link XmlObjectInfo} for parsed XWT source, in "src/test/Text.xwt" file.
-   */
-  @Override
-  @SuppressWarnings("unchecked")
-  protected final <T extends XmlObjectInfo> T parse(String... lines) throws Exception {
-    String source = getTestSource(lines);
-    return (T) parse0("test/Test.xwt", source);
-  }
-
-  /**
-   * Parses XWT file with given path and content.
-   */
-  protected final XmlObjectInfo parse0(String path, String content) throws Exception {
-    IFile file = setFileContentSrc(path, content);
-    IDocument document = new Document(content);
-    XwtParser parser = new XwtParser(file, document);
-    m_lastObject = parser.parse();
-    m_lastContext = m_lastObject.getContext();
-    m_lastLoader = m_lastContext.getClassLoader();
-    return m_lastObject;
-  }
-
-  @Override
-  protected String getTestSource_namespaces() {
-    if (m_getSource_includeStandardNamespaces) {
-      return " xmlns:wbp='http://www.eclipse.org/wb/xwt'"
-          + " xmlns:t='clr-namespace:test'"
-          + " xmlns='http://www.eclipse.org/xwt/presentation'"
-          + " xmlns:x='http://www.eclipse.org/xwt'";
-    } else {
-      return StringUtils.EMPTY;
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return {@link ControlInfo} for {@link Button} with text.
-   */
-  protected final ControlInfo createButtonWithText() throws Exception {
-    String componentClassName = "org.eclipse.swt.widgets.Button";
-    return createObject(componentClassName);
-  }
-
-  /**
-   * @return {@link ControlInfo} for {@link Button} without text.
-   */
-  protected final ControlInfo createButton() throws Exception {
-    String componentClassName = "org.eclipse.swt.widgets.Button";
-    return createObject(componentClassName, "empty");
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // test.MyComponent support
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Prepares empty <code>test.MyComponent</code> class with additional lines in type body.
-   */
-  protected final void prepareMyComponent(String... lines) throws Exception {
-    prepareMyComponent(lines, ArrayUtils.EMPTY_STRING_ARRAY);
-  }
-
-  /**
-   * Prepares empty <code>test.MyComponent</code> class with additional lines in type body, and with
-   * special <code>wbp-component.xml</code> description.
-   */
-  protected final void prepareMyComponent(String[] javaLines, String[] descriptionLines)
-      throws Exception {
-    // java
-    {
-      String[] lines =
-          new String[]{
-              "package test;",
-              "import org.eclipse.swt.SWT;",
-              "import org.eclipse.swt.widgets.*;",
-              "public class MyComponent extends Composite {",
-              "  public MyComponent(Composite parent, int style) {",
-              "    super(parent, style);",
-              "  }"};
-      lines = CodeUtils.join(lines, javaLines);
-      lines = CodeUtils.join(lines, new String[]{"}"});
-      setFileContentSrc("test/MyComponent.java", getSourceDQ(lines));
-    }
-    // description
-    {
-      String[] lines =
-          new String[]{
-              "<?xml version='1.0' encoding='UTF-8'?>",
-              "<component xmlns='http://www.eclipse.org/wb/WBPComponent'>"};
-      descriptionLines = removeFillerLines(descriptionLines);
-      lines = CodeUtils.join(lines, descriptionLines);
-      lines = CodeUtils.join(lines, new String[]{"</component>"});
-      setFileContentSrc("test/MyComponent.wbp-component.xml", getSourceDQ(lines));
-    }
-    waitForAutoBuild();
-  }
-
-  protected final ComponentDescription getMyDescription() throws Exception {
-    return getDescription("test.MyComponent");
-  }
-
-  protected final ComponentDescription getDescription(String componentClassName) throws Exception {
-    if (m_lastContext == null) {
-      parse("<Shell/>");
-    }
-    return ComponentDescriptionHelper.getDescription(m_lastContext, componentClassName);
-  }
+	protected boolean m_getSource_includeStandardNamespaces;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Life cycle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void setUp() throws Exception {
+		super.setUp();
+		configureForTestPreferences(RcpToolkitDescription.INSTANCE);
+		m_getSource_includeStandardNamespaces = true;
+	}
+
+	@Override
+	protected void tearDown() throws Exception {
+		configureDefaultPreferences(RcpToolkitDescription.INSTANCE);
+		super.tearDown();
+	}
+
+	/**
+	 * Configures created project.
+	 */
+	@Override
+	protected void configureNewProject() throws Exception {
+		BTestUtils.configure(m_testProject);
+		m_testProject.addPlugin("com.ibm.icu");
+		m_testProject.addPlugin("org.eclipse.core.databinding");
+		m_testProject.addPlugin("org.eclipse.core.databinding.beans");
+		m_testProject.addPlugin("org.eclipse.core.databinding.observable");
+		m_testProject.addPlugin("org.eclipse.core.databinding.property");
+		m_testProject.addPlugin("org.eclipse.jface.databinding");
+		m_testProject.addBundleJars("org.eclipse.wb.xwt", "lib");
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Preferences
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Configures test values for toolkit preferences.
+	 */
+	protected void configureForTestPreferences(ToolkitDescription toolkit) {
+	}
+
+	/**
+	 * Configures default values for toolkit preferences.
+	 */
+	protected void configureDefaultPreferences(ToolkitDescription toolkit) {
+		IPreferenceStore preferences = toolkit.getPreferences();
+		preferences.setToDefault(org.eclipse.wb.internal.swt.preferences.IPreferenceConstants.P_LAYOUT_DATA_NAME_TEMPLATE);
+		preferences.setToDefault(org.eclipse.wb.internal.swt.preferences.IPreferenceConstants.P_LAYOUT_NAME_TEMPLATE);
+		NamesManager.setNameDescriptions(toolkit, ImmutableList.<ComponentNameDescription>of());
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Java source
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getJavaSourceToAssert() {
+		return getFileContentSrc("test/Test.java");
+	}
+
+	@Override
+	protected String[] getJavaSource_decorate(String... lines) {
+		lines =
+				CodeUtils.join(new String[]{
+						"package test;",
+						"import org.eclipse.swt.SWT;",
+						"import org.eclipse.swt.events.*;",
+						"import org.eclipse.swt.graphics.*;",
+						"import org.eclipse.swt.widgets.*;",
+						"import org.eclipse.swt.layout.*;",
+						"import org.eclipse.swt.custom.*;",
+						"import org.eclipse.jface.layout.*;",
+				"import org.eclipse.jface.viewers.*;"}, lines);
+		return lines;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parsing and source
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link XmlObjectInfo} for parsed XWT source, in "src/test/Text.xwt" file.
+	 */
+	@Override
+	@SuppressWarnings("unchecked")
+	protected final <T extends XmlObjectInfo> T parse(String... lines) throws Exception {
+		String source = getTestSource(lines);
+		return (T) parse0("test/Test.xwt", source);
+	}
+
+	/**
+	 * Parses XWT file with given path and content.
+	 */
+	protected final XmlObjectInfo parse0(String path, String content) throws Exception {
+		IFile file = setFileContentSrc(path, content);
+		IDocument document = new Document(content);
+		XwtParser parser = new XwtParser(file, document);
+		m_lastObject = parser.parse();
+		m_lastContext = m_lastObject.getContext();
+		m_lastLoader = m_lastContext.getClassLoader();
+		return m_lastObject;
+	}
+
+	@Override
+	protected String getTestSource_namespaces() {
+		if (m_getSource_includeStandardNamespaces) {
+			return " xmlns:wbp='http://www.eclipse.org/wb/xwt'"
+					+ " xmlns:t='clr-namespace:test'"
+					+ " xmlns='http://www.eclipse.org/xwt/presentation'"
+					+ " xmlns:x='http://www.eclipse.org/xwt'";
+		} else {
+			return StringUtils.EMPTY;
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return {@link ControlInfo} for {@link Button} with text.
+	 */
+	protected final ControlInfo createButtonWithText() throws Exception {
+		String componentClassName = "org.eclipse.swt.widgets.Button";
+		return createObject(componentClassName);
+	}
+
+	/**
+	 * @return {@link ControlInfo} for {@link Button} without text.
+	 */
+	protected final ControlInfo createButton() throws Exception {
+		String componentClassName = "org.eclipse.swt.widgets.Button";
+		return createObject(componentClassName, "empty");
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// test.MyComponent support
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Prepares empty <code>test.MyComponent</code> class with additional lines in type body.
+	 */
+	protected final void prepareMyComponent(String... lines) throws Exception {
+		prepareMyComponent(lines, ArrayUtils.EMPTY_STRING_ARRAY);
+	}
+
+	/**
+	 * Prepares empty <code>test.MyComponent</code> class with additional lines in type body, and with
+	 * special <code>wbp-component.xml</code> description.
+	 */
+	protected final void prepareMyComponent(String[] javaLines, String[] descriptionLines)
+			throws Exception {
+		// java
+		{
+			String[] lines =
+					new String[]{
+							"package test;",
+							"import org.eclipse.swt.SWT;",
+							"import org.eclipse.swt.widgets.*;",
+							"public class MyComponent extends Composite {",
+							"  public MyComponent(Composite parent, int style) {",
+							"    super(parent, style);",
+			"  }"};
+			lines = CodeUtils.join(lines, javaLines);
+			lines = CodeUtils.join(lines, new String[]{"}"});
+			setFileContentSrc("test/MyComponent.java", getSourceDQ(lines));
+		}
+		// description
+		{
+			String[] lines =
+					new String[]{
+							"<?xml version='1.0' encoding='UTF-8'?>",
+			"<component xmlns='http://www.eclipse.org/wb/WBPComponent'>"};
+			descriptionLines = removeFillerLines(descriptionLines);
+			lines = CodeUtils.join(lines, descriptionLines);
+			lines = CodeUtils.join(lines, new String[]{"</component>"});
+			setFileContentSrc("test/MyComponent.wbp-component.xml", getSourceDQ(lines));
+		}
+		waitForAutoBuild();
+	}
+
+	protected final ComponentDescription getMyDescription() throws Exception {
+		return getDescription("test.MyComponent");
+	}
+
+	protected final ComponentDescription getDescription(String componentClassName) throws Exception {
+		if (m_lastContext == null) {
+			parse("<Shell/>");
+		}
+		return ComponentDescriptionHelper.getDescription(m_lastContext, componentClassName);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/XwtStaticFieldSupportTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/XwtStaticFieldSupportTest.java
index 56addbb9e..8720aa534 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/XwtStaticFieldSupportTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/XwtStaticFieldSupportTest.java
@@ -23,47 +23,47 @@
  * @author scheglov_ke
  */
 public class XwtStaticFieldSupportTest extends XwtModelTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * No class for field from {@link SWT}.
-   */
-  public void test_SWT() throws Exception {
-    parse("<Shell/>");
-    //
-    String fieldName = "LEFT";
-    String[] expression = {null};
-    m_lastObject.getBroadcast(StaticFieldPropertyEditorGetExpression.class).invoke(
-        SWT.class,
-        fieldName,
-        expression);
-    assertEquals("LEFT", expression[0]);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * No class for field from {@link SWT}.
+	 */
+	public void test_SWT() throws Exception {
+		parse("<Shell/>");
+		//
+		String fieldName = "LEFT";
+		String[] expression = {null};
+		m_lastObject.getBroadcast(StaticFieldPropertyEditorGetExpression.class).invoke(
+				SWT.class,
+				fieldName,
+				expression);
+		assertEquals("LEFT", expression[0]);
+	}
 
-  /**
-   * Not {@link SWT}, so use fully qualified class name.
-   */
-  public void test_customStyle() throws Exception {
-    parse("<Shell/>");
-    //
-    String fieldName = "LEFT";
-    String[] expression = {null};
-    m_lastObject.getBroadcast(StaticFieldPropertyEditorGetExpression.class).invoke(
-        SwingConstants.class,
-        fieldName,
-        expression);
-    assertEquals("(javax.swing.SwingConstants).LEFT", expression[0]);
-  }
+	/**
+	 * Not {@link SWT}, so use fully qualified class name.
+	 */
+	public void test_customStyle() throws Exception {
+		parse("<Shell/>");
+		//
+		String fieldName = "LEFT";
+		String[] expression = {null};
+		m_lastObject.getBroadcast(StaticFieldPropertyEditorGetExpression.class).invoke(
+				SwingConstants.class,
+				fieldName,
+				expression);
+		assertEquals("(javax.swing.SwingConstants).LEFT", expression[0]);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/XwtStringArraySupportTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/XwtStringArraySupportTest.java
index c5996cab8..9398158af 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/XwtStringArraySupportTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/XwtStringArraySupportTest.java
@@ -24,157 +24,157 @@
  * @author scheglov_ke
  */
 public class XwtStringArraySupportTest extends XwtModelTest {
-  private XmlObjectInfo myComponent;
-  private GenericPropertyImpl property;
+	private XmlObjectInfo myComponent;
+	private GenericPropertyImpl property;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_setNew() throws Exception {
-    prepareMyComponent();
-    prepareProperty(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <t:MyComponent wbp:name='myComponent'/>",
-        "</Shell>");
-    assertFalse(property.isModified());
-    // set value
-    String[] value = new String[]{"aaa", "bbb", "ccc"};
-    property.setValue(value);
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell xmlns:p1='clr-namespace:java.lang'>",
-        "  <t:MyComponent wbp:name='myComponent'>",
-        "    <t:MyComponent.test>",
-        "      <p1:String>aaa</p1:String>",
-        "      <p1:String>bbb</p1:String>",
-        "      <p1:String>ccc</p1:String>",
-        "    </t:MyComponent.test>",
-        "  </t:MyComponent>",
-        "</Shell>");
-    // modified
-    assertTrue(property.isModified());
-    {
-      Object[] actual =
-          (Object[]) ReflectionUtils.getFieldObject(myComponent.getObject(), "m_items");
-      assertThat(actual).isEqualTo(value);
-    }
-    {
-      Object[] actual = (Object[]) property.getValue();
-      assertThat(actual).isEqualTo(value);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_setNew() throws Exception {
+		prepareMyComponent();
+		prepareProperty(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <t:MyComponent wbp:name='myComponent'/>",
+				"</Shell>");
+		assertFalse(property.isModified());
+		// set value
+		String[] value = new String[]{"aaa", "bbb", "ccc"};
+		property.setValue(value);
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell xmlns:p1='clr-namespace:java.lang'>",
+				"  <t:MyComponent wbp:name='myComponent'>",
+				"    <t:MyComponent.test>",
+				"      <p1:String>aaa</p1:String>",
+				"      <p1:String>bbb</p1:String>",
+				"      <p1:String>ccc</p1:String>",
+				"    </t:MyComponent.test>",
+				"  </t:MyComponent>",
+				"</Shell>");
+		// modified
+		assertTrue(property.isModified());
+		{
+			Object[] actual =
+					(Object[]) ReflectionUtils.getFieldObject(myComponent.getObject(), "m_items");
+			assertThat(actual).isEqualTo(value);
+		}
+		{
+			Object[] actual = (Object[]) property.getValue();
+			assertThat(actual).isEqualTo(value);
+		}
+	}
 
-  public void test_updateExisting() throws Exception {
-    prepareMyComponent();
-    prepareProperty(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell xmlns:p1='clr-namespace:java.lang'>",
-        "  <t:MyComponent wbp:name='myComponent'>",
-        "    <t:MyComponent.test>",
-        "      <p1:String>old</p1:String>",
-        "      <p1:String>items</p1:String>",
-        "    </t:MyComponent.test>",
-        "  </t:MyComponent>",
-        "</Shell>");
-    assertTrue(property.isModified());
-    // set value
-    String[] value = new String[]{"aaa", "bbb", "ccc"};
-    property.setValue(value);
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell xmlns:p1='clr-namespace:java.lang'>",
-        "  <t:MyComponent wbp:name='myComponent'>",
-        "    <t:MyComponent.test>",
-        "      <p1:String>aaa</p1:String>",
-        "      <p1:String>bbb</p1:String>",
-        "      <p1:String>ccc</p1:String>",
-        "    </t:MyComponent.test>",
-        "  </t:MyComponent>",
-        "</Shell>");
-    // modified
-    assertTrue(property.isModified());
-    {
-      Object[] actual =
-          (Object[]) ReflectionUtils.getFieldObject(myComponent.getObject(), "m_items");
-      assertThat(actual).isEqualTo(value);
-    }
-    {
-      Object[] actual = (Object[]) property.getValue();
-      assertThat(actual).isEqualTo(value);
-    }
-  }
+	public void test_updateExisting() throws Exception {
+		prepareMyComponent();
+		prepareProperty(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell xmlns:p1='clr-namespace:java.lang'>",
+				"  <t:MyComponent wbp:name='myComponent'>",
+				"    <t:MyComponent.test>",
+				"      <p1:String>old</p1:String>",
+				"      <p1:String>items</p1:String>",
+				"    </t:MyComponent.test>",
+				"  </t:MyComponent>",
+				"</Shell>");
+		assertTrue(property.isModified());
+		// set value
+		String[] value = new String[]{"aaa", "bbb", "ccc"};
+		property.setValue(value);
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell xmlns:p1='clr-namespace:java.lang'>",
+				"  <t:MyComponent wbp:name='myComponent'>",
+				"    <t:MyComponent.test>",
+				"      <p1:String>aaa</p1:String>",
+				"      <p1:String>bbb</p1:String>",
+				"      <p1:String>ccc</p1:String>",
+				"    </t:MyComponent.test>",
+				"  </t:MyComponent>",
+				"</Shell>");
+		// modified
+		assertTrue(property.isModified());
+		{
+			Object[] actual =
+					(Object[]) ReflectionUtils.getFieldObject(myComponent.getObject(), "m_items");
+			assertThat(actual).isEqualTo(value);
+		}
+		{
+			Object[] actual = (Object[]) property.getValue();
+			assertThat(actual).isEqualTo(value);
+		}
+	}
 
-  public void test_removeExisting() throws Exception {
-    prepareMyComponent();
-    prepareProperty(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell xmlns:p1='clr-namespace:java.lang'>",
-        "  <t:MyComponent wbp:name='myComponent'>",
-        "    <t:MyComponent.test>",
-        "      <p1:String>old</p1:String>",
-        "      <p1:String>items</p1:String>",
-        "    </t:MyComponent.test>",
-        "  </t:MyComponent>",
-        "</Shell>");
-    assertTrue(property.isModified());
-    // set value
-    property.setValue(Property.UNKNOWN_VALUE);
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell xmlns:p1='clr-namespace:java.lang'>",
-        "  <t:MyComponent wbp:name='myComponent'/>",
-        "</Shell>");
-    // modified
-    assertFalse(property.isModified());
-    {
-      Object actual = ReflectionUtils.getFieldObject(myComponent.getObject(), "m_items");
-      assertThat(actual).isNull();
-    }
-    {
-      Object actual = property.getValue();
-      assertThat(actual).isSameAs(Property.UNKNOWN_VALUE);
-    }
-  }
+	public void test_removeExisting() throws Exception {
+		prepareMyComponent();
+		prepareProperty(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell xmlns:p1='clr-namespace:java.lang'>",
+				"  <t:MyComponent wbp:name='myComponent'>",
+				"    <t:MyComponent.test>",
+				"      <p1:String>old</p1:String>",
+				"      <p1:String>items</p1:String>",
+				"    </t:MyComponent.test>",
+				"  </t:MyComponent>",
+				"</Shell>");
+		assertTrue(property.isModified());
+		// set value
+		property.setValue(Property.UNKNOWN_VALUE);
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell xmlns:p1='clr-namespace:java.lang'>",
+				"  <t:MyComponent wbp:name='myComponent'/>",
+				"</Shell>");
+		// modified
+		assertFalse(property.isModified());
+		{
+			Object actual = ReflectionUtils.getFieldObject(myComponent.getObject(), "m_items");
+			assertThat(actual).isNull();
+		}
+		{
+			Object actual = property.getValue();
+			assertThat(actual).isSameAs(Property.UNKNOWN_VALUE);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void prepareMyComponent() throws Exception {
-    prepareMyComponent(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "private String[] m_items;",
-        "public void setTest(String[] items) {",
-        "  m_items = items;",
-        "}");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void prepareMyComponent() throws Exception {
+		prepareMyComponent(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"private String[] m_items;",
+				"public void setTest(String[] items) {",
+				"  m_items = items;",
+				"}");
+	}
 
-  private void prepareProperty(String... lines) throws Exception {
-    parse(lines);
-    refresh();
-    // prepare
-    myComponent = getObjectByName("myComponent");
-    property = (GenericPropertyImpl) myComponent.getPropertyByTitle("test");
-    assertNotNull(property);
-  }
+	private void prepareProperty(String... lines) throws Exception {
+		parse(lines);
+		refresh();
+		// prepare
+		myComponent = getObjectByName("myComponent");
+		property = (GenericPropertyImpl) myComponent.getPropertyByTitle("test");
+		assertNotNull(property);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/XwtTagResolverTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/XwtTagResolverTest.java
index 919f0b962..78caa3353 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/XwtTagResolverTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/XwtTagResolverTest.java
@@ -22,222 +22,222 @@
  * @author scheglov_ke
  */
 public class XwtTagResolverTest extends XwtModelTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_standardControl() throws Exception {
-    parse("<Shell/>");
-    String componentClassName = "org.eclipse.swt.widgets.Button";
-    String expectedNamespace = "";
-    String expectedTag = "Button";
-    String[] expectedLines = {"<Shell/>"};
-    assertNamespaceTag(componentClassName, expectedNamespace, expectedTag, expectedLines);
-  }
-
-  public void test_standardLayout() throws Exception {
-    parse("<Shell/>");
-    String componentClassName = "org.eclipse.swt.layout.RowLayout";
-    String expectedNamespace = "";
-    String expectedTag = "RowLayout";
-    String[] expectedLines = {"<Shell/>"};
-    assertNamespaceTag(componentClassName, expectedNamespace, expectedTag, expectedLines);
-  }
-
-  public void test_customControl() throws Exception {
-    parse("<Shell/>");
-    String componentClassName = "org.eclipse.swt.custom.CLabel";
-    String expectedNamespace = "";
-    String expectedTag = "CLabel";
-    String[] expectedLines = {"<Shell/>"};
-    assertNamespaceTag(componentClassName, expectedNamespace, expectedTag, expectedLines);
-  }
-
-  /**
-   * Test for "standard custom" controls which are not imported yet by XWT.
-   * <p>
-   * https://bugs.eclipse.org/bugs/show_bug.cgi?id=305992
-   */
-  public void test_customControl_notImportedYet() throws Exception {
-    parse("<Shell/>");
-    String expectedNamespace = "";
-    String[] expectedLines = {"<Shell/>"};
-    // TableTree
-    {
-      String componentClassName = "org.eclipse.swt.custom.TableTree";
-      String expectedTag = "TableTree";
-      assertNamespaceTag(componentClassName, expectedNamespace, expectedTag, expectedLines);
-    }
-    // ViewForm
-    {
-      String componentClassName = "org.eclipse.swt.custom.ViewForm";
-      String expectedTag = "ViewForm";
-      assertNamespaceTag(componentClassName, expectedNamespace, expectedTag, expectedLines);
-    }
-    // CBanner
-    {
-      String componentClassName = "org.eclipse.swt.custom.CBanner";
-      String expectedTag = "CBanner";
-      assertNamespaceTag(componentClassName, expectedNamespace, expectedTag, expectedLines);
-    }
-    // TableCursor
-    {
-      String componentClassName = "org.eclipse.swt.custom.TableCursor";
-      String expectedTag = "TableCursor";
-      assertNamespaceTag(componentClassName, expectedNamespace, expectedTag, expectedLines);
-    }
-  }
-
-  public void test_standardViewer() throws Exception {
-    parse("<Shell/>");
-    String componentClassName = "org.eclipse.jface.viewers.TableViewer";
-    String expectedNamespace = "";
-    String expectedTag = "TableViewer";
-    String[] expectedLines = {"<Shell/>"};
-    assertNamespaceTag(componentClassName, expectedNamespace, expectedTag, expectedLines);
-  }
-
-  public void test_forms_noFormsComment() throws Exception {
-    parse("<Shell/>");
-    {
-      String componentClassName = "org.eclipse.ui.forms.widgets.Form";
-      String expectedNamespace = "p1";
-      String expectedTag = "Form";
-      String[] expectedLines = {"<Shell xmlns:p1='clr-namespace:org.eclipse.ui.forms.widgets'/>"};
-      assertNamespaceTag(componentClassName, expectedNamespace, expectedTag, expectedLines);
-    }
-  }
-
-  public void test_forms_hasFormsComment() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<!-- Forms API -->",
-        "<Shell/>");
-    {
-      String componentClassName = "org.eclipse.ui.forms.widgets.Form";
-      String expectedNamespace = "";
-      String expectedTag = "Form";
-      String[] expectedLines =
-          {
-              "// filler filler filler filler filler",
-              "// filler filler filler filler filler",
-              "// filler filler filler filler filler",
-              "<!-- Forms API -->",
-              "<Shell/>"};
-      assertNamespaceTag(componentClassName, expectedNamespace, expectedTag, expectedLines);
-    }
-  }
-
-  /**
-   * Test for Forms API layouts, which are not imported by XWT yet.
-   * <p>
-   * https://bugs.eclipse.org/bugs/show_bug.cgi?id=310241
-   */
-  public void test_forms_notImportedYet() throws Exception {
-    parse("<Shell/>");
-    String expectedNamespace = "p1";
-    String[] expectedLines = {"<Shell xmlns:p1='clr-namespace:org.eclipse.ui.forms.widgets'/>"};
-    // ColumnLayout
-    {
-      String componentClassName = "org.eclipse.ui.forms.widgets.ColumnLayout";
-      String expectedTag = "ColumnLayout";
-      assertNamespaceTag(componentClassName, expectedNamespace, expectedTag, expectedLines);
-    }
-    // TableWrapLayout
-    {
-      String componentClassName = "org.eclipse.ui.forms.widgets.TableWrapLayout";
-      String expectedTag = "TableWrapLayout";
-      assertNamespaceTag(componentClassName, expectedNamespace, expectedTag, expectedLines);
-    }
-  }
-
-  /**
-   * No default namespace for XWT, but it is used by default, so don't import it.
-   */
-  public void test_standardControl_noDefaultNamespace() throws Exception {
-    m_getSource_includeStandardNamespaces = false;
-    parse("<Shell/>");
-    //
-    String componentClassName = "org.eclipse.swt.widgets.Button";
-    String expectedNamespace = "";
-    String expectedTag = "Button";
-    String[] expectedLines = {"<Shell/>"};
-    assertNamespaceTag(componentClassName, expectedNamespace, expectedTag, expectedLines);
-  }
-
-  /**
-   * Default namespace is declared, but it is not standard XWT.
-   */
-  public void test_standardControl_overrideDefaultNamespace() throws Exception {
-    m_getSource_includeStandardNamespaces = false;
-    String source = "<xwt:Shell xmlns:xwt='http://www.eclipse.org/xwt/presentation'/>";
-    parse(source);
-    //
-    String componentClassName = "org.eclipse.swt.widgets.Button";
-    String expectedNamespace = "xwt";
-    String expectedTag = "Button";
-    String[] expectedLines = {source};
-    assertNamespaceTag(componentClassName, expectedNamespace, expectedTag, expectedLines);
-  }
-
-  public void test_customControl_hasPackageNamespace() throws Exception {
-    m_getSource_includeStandardNamespaces = false;
-    prepareMyComponent(ArrayUtils.EMPTY_STRING_ARRAY);
-    parse("<Shell xmlns:abc='clr-namespace:test'/>");
-    //
-    String componentClassName = "test.MyComponent";
-    String expectedNamespace = "abc";
-    String expectedTag = "MyComponent";
-    String[] expectedLines = {"<Shell xmlns:abc='clr-namespace:test'/>"};
-    assertNamespaceTag(componentClassName, expectedNamespace, expectedTag, expectedLines);
-  }
-
-  public void test_customControl_noPackageNamespace() throws Exception {
-    m_getSource_includeStandardNamespaces = false;
-    prepareMyComponent(ArrayUtils.EMPTY_STRING_ARRAY);
-    parse("<Shell/>");
-    //
-    String componentClassName = "test.MyComponent";
-    String expectedNamespace = "p1";
-    String expectedTag = "MyComponent";
-    String[] expectedLines = {"<Shell xmlns:p1='clr-namespace:test'/>"};
-    assertNamespaceTag(componentClassName, expectedNamespace, expectedTag, expectedLines);
-  }
-
-  /**
-   * Asserts that adding {@link XmlObjectInfo} with given name produces expected namespace and tag.
-   */
-  private void assertNamespaceTag(String componentClassName,
-      String expectedNamespace,
-      String expectedTag,
-      String[] expectedLines) throws Exception {
-    XmlObjectInfo object = createObject(componentClassName);
-    Class<?> componentClass = object.getDescription().getComponentClass();
-    //
-    String[] namespaceArray = new String[1];
-    String[] tagArray = new String[1];
-    object.getBroadcast(XmlObjectResolveTag.class).invoke(
-        object,
-        componentClass,
-        namespaceArray,
-        tagArray);
-    String namespace = namespaceArray[0];
-    String tag = tagArray[0];
-    //
-    assertEquals(expectedNamespace, namespace);
-    assertEquals(expectedTag, tag);
-    assertXML(expectedLines);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_standardControl() throws Exception {
+		parse("<Shell/>");
+		String componentClassName = "org.eclipse.swt.widgets.Button";
+		String expectedNamespace = "";
+		String expectedTag = "Button";
+		String[] expectedLines = {"<Shell/>"};
+		assertNamespaceTag(componentClassName, expectedNamespace, expectedTag, expectedLines);
+	}
+
+	public void test_standardLayout() throws Exception {
+		parse("<Shell/>");
+		String componentClassName = "org.eclipse.swt.layout.RowLayout";
+		String expectedNamespace = "";
+		String expectedTag = "RowLayout";
+		String[] expectedLines = {"<Shell/>"};
+		assertNamespaceTag(componentClassName, expectedNamespace, expectedTag, expectedLines);
+	}
+
+	public void test_customControl() throws Exception {
+		parse("<Shell/>");
+		String componentClassName = "org.eclipse.swt.custom.CLabel";
+		String expectedNamespace = "";
+		String expectedTag = "CLabel";
+		String[] expectedLines = {"<Shell/>"};
+		assertNamespaceTag(componentClassName, expectedNamespace, expectedTag, expectedLines);
+	}
+
+	/**
+	 * Test for "standard custom" controls which are not imported yet by XWT.
+	 * <p>
+	 * https://bugs.eclipse.org/bugs/show_bug.cgi?id=305992
+	 */
+	public void test_customControl_notImportedYet() throws Exception {
+		parse("<Shell/>");
+		String expectedNamespace = "";
+		String[] expectedLines = {"<Shell/>"};
+		// TableTree
+		{
+			String componentClassName = "org.eclipse.swt.custom.TableTree";
+			String expectedTag = "TableTree";
+			assertNamespaceTag(componentClassName, expectedNamespace, expectedTag, expectedLines);
+		}
+		// ViewForm
+		{
+			String componentClassName = "org.eclipse.swt.custom.ViewForm";
+			String expectedTag = "ViewForm";
+			assertNamespaceTag(componentClassName, expectedNamespace, expectedTag, expectedLines);
+		}
+		// CBanner
+		{
+			String componentClassName = "org.eclipse.swt.custom.CBanner";
+			String expectedTag = "CBanner";
+			assertNamespaceTag(componentClassName, expectedNamespace, expectedTag, expectedLines);
+		}
+		// TableCursor
+		{
+			String componentClassName = "org.eclipse.swt.custom.TableCursor";
+			String expectedTag = "TableCursor";
+			assertNamespaceTag(componentClassName, expectedNamespace, expectedTag, expectedLines);
+		}
+	}
+
+	public void test_standardViewer() throws Exception {
+		parse("<Shell/>");
+		String componentClassName = "org.eclipse.jface.viewers.TableViewer";
+		String expectedNamespace = "";
+		String expectedTag = "TableViewer";
+		String[] expectedLines = {"<Shell/>"};
+		assertNamespaceTag(componentClassName, expectedNamespace, expectedTag, expectedLines);
+	}
+
+	public void test_forms_noFormsComment() throws Exception {
+		parse("<Shell/>");
+		{
+			String componentClassName = "org.eclipse.ui.forms.widgets.Form";
+			String expectedNamespace = "p1";
+			String expectedTag = "Form";
+			String[] expectedLines = {"<Shell xmlns:p1='clr-namespace:org.eclipse.ui.forms.widgets'/>"};
+			assertNamespaceTag(componentClassName, expectedNamespace, expectedTag, expectedLines);
+		}
+	}
+
+	public void test_forms_hasFormsComment() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<!-- Forms API -->",
+				"<Shell/>");
+		{
+			String componentClassName = "org.eclipse.ui.forms.widgets.Form";
+			String expectedNamespace = "";
+			String expectedTag = "Form";
+			String[] expectedLines =
+				{
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<!-- Forms API -->",
+				"<Shell/>"};
+			assertNamespaceTag(componentClassName, expectedNamespace, expectedTag, expectedLines);
+		}
+	}
+
+	/**
+	 * Test for Forms API layouts, which are not imported by XWT yet.
+	 * <p>
+	 * https://bugs.eclipse.org/bugs/show_bug.cgi?id=310241
+	 */
+	public void test_forms_notImportedYet() throws Exception {
+		parse("<Shell/>");
+		String expectedNamespace = "p1";
+		String[] expectedLines = {"<Shell xmlns:p1='clr-namespace:org.eclipse.ui.forms.widgets'/>"};
+		// ColumnLayout
+		{
+			String componentClassName = "org.eclipse.ui.forms.widgets.ColumnLayout";
+			String expectedTag = "ColumnLayout";
+			assertNamespaceTag(componentClassName, expectedNamespace, expectedTag, expectedLines);
+		}
+		// TableWrapLayout
+		{
+			String componentClassName = "org.eclipse.ui.forms.widgets.TableWrapLayout";
+			String expectedTag = "TableWrapLayout";
+			assertNamespaceTag(componentClassName, expectedNamespace, expectedTag, expectedLines);
+		}
+	}
+
+	/**
+	 * No default namespace for XWT, but it is used by default, so don't import it.
+	 */
+	public void test_standardControl_noDefaultNamespace() throws Exception {
+		m_getSource_includeStandardNamespaces = false;
+		parse("<Shell/>");
+		//
+		String componentClassName = "org.eclipse.swt.widgets.Button";
+		String expectedNamespace = "";
+		String expectedTag = "Button";
+		String[] expectedLines = {"<Shell/>"};
+		assertNamespaceTag(componentClassName, expectedNamespace, expectedTag, expectedLines);
+	}
+
+	/**
+	 * Default namespace is declared, but it is not standard XWT.
+	 */
+	public void test_standardControl_overrideDefaultNamespace() throws Exception {
+		m_getSource_includeStandardNamespaces = false;
+		String source = "<xwt:Shell xmlns:xwt='http://www.eclipse.org/xwt/presentation'/>";
+		parse(source);
+		//
+		String componentClassName = "org.eclipse.swt.widgets.Button";
+		String expectedNamespace = "xwt";
+		String expectedTag = "Button";
+		String[] expectedLines = {source};
+		assertNamespaceTag(componentClassName, expectedNamespace, expectedTag, expectedLines);
+	}
+
+	public void test_customControl_hasPackageNamespace() throws Exception {
+		m_getSource_includeStandardNamespaces = false;
+		prepareMyComponent(ArrayUtils.EMPTY_STRING_ARRAY);
+		parse("<Shell xmlns:abc='clr-namespace:test'/>");
+		//
+		String componentClassName = "test.MyComponent";
+		String expectedNamespace = "abc";
+		String expectedTag = "MyComponent";
+		String[] expectedLines = {"<Shell xmlns:abc='clr-namespace:test'/>"};
+		assertNamespaceTag(componentClassName, expectedNamespace, expectedTag, expectedLines);
+	}
+
+	public void test_customControl_noPackageNamespace() throws Exception {
+		m_getSource_includeStandardNamespaces = false;
+		prepareMyComponent(ArrayUtils.EMPTY_STRING_ARRAY);
+		parse("<Shell/>");
+		//
+		String componentClassName = "test.MyComponent";
+		String expectedNamespace = "p1";
+		String expectedTag = "MyComponent";
+		String[] expectedLines = {"<Shell xmlns:p1='clr-namespace:test'/>"};
+		assertNamespaceTag(componentClassName, expectedNamespace, expectedTag, expectedLines);
+	}
+
+	/**
+	 * Asserts that adding {@link XmlObjectInfo} with given name produces expected namespace and tag.
+	 */
+	private void assertNamespaceTag(String componentClassName,
+			String expectedNamespace,
+			String expectedTag,
+			String[] expectedLines) throws Exception {
+		XmlObjectInfo object = createObject(componentClassName);
+		Class<?> componentClass = object.getDescription().getComponentClass();
+		//
+		String[] namespaceArray = new String[1];
+		String[] tagArray = new String[1];
+		object.getBroadcast(XmlObjectResolveTag.class).invoke(
+				object,
+				componentClass,
+				namespaceArray,
+				tagArray);
+		String namespace = namespaceArray[0];
+		String tag = tagArray[0];
+		//
+		assertEquals(expectedNamespace, namespace);
+		assertEquals(expectedTag, tag);
+		assertXML(expectedLines);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/forms/ColumnLayoutTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/forms/ColumnLayoutTest.java
index 327e12520..ed1fef2b8 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/forms/ColumnLayoutTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/forms/ColumnLayoutTest.java
@@ -28,216 +28,216 @@
  * @author scheglov_ke
  */
 public class ColumnLayoutTest extends XwtModelTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Source
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getTestSource_namespaces() {
-    return super.getTestSource_namespaces()
-        + " xmlns:f='clr-namespace:org.eclipse.ui.forms.widgets'";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Source
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getTestSource_namespaces() {
+		return super.getTestSource_namespaces()
+				+ " xmlns:f='clr-namespace:org.eclipse.ui.forms.widgets'";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_isHorizontal() throws Exception {
-    parse(
-        "<!-- Forms API -->",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:ColumnLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "</Shell>");
-    refresh();
-    //
-    ColumnLayoutInfo layout = getObjectByName("layout");
-    assertTrue(layout.isHorizontal());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_isHorizontal() throws Exception {
+		parse(
+				"<!-- Forms API -->",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:ColumnLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"</Shell>");
+		refresh();
+		//
+		ColumnLayoutInfo layout = getObjectByName("layout");
+		assertTrue(layout.isHorizontal());
+	}
 
-  public void test_LayoutData_implicit() throws Exception {
-    parse(
-        "<!-- Forms API -->",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:ColumnLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <f:ColumnLayout>",
-        "  <Button wbp:name='button'>",
-        "    virtual-LayoutData: org.eclipse.ui.forms.widgets.ColumnLayoutData");
-    refresh();
-    //
-    ControlInfo button = getObjectByName("button");
-    ColumnLayoutDataInfo columnData = ColumnLayoutInfo.getColumnData(button);
-    columnData.setWidthHint(100);
-    columnData.setHeightHint(200);
-    assertXML(
-        "<!-- Forms API -->",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:ColumnLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'>",
-        "    <Button.layoutData>",
-        "      <f:ColumnLayoutData widthHint='100' heightHint='200'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "</Shell>");
-  }
+	public void test_LayoutData_implicit() throws Exception {
+		parse(
+				"<!-- Forms API -->",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:ColumnLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <f:ColumnLayout>",
+				"  <Button wbp:name='button'>",
+				"    virtual-LayoutData: org.eclipse.ui.forms.widgets.ColumnLayoutData");
+		refresh();
+		//
+		ControlInfo button = getObjectByName("button");
+		ColumnLayoutDataInfo columnData = ColumnLayoutInfo.getColumnData(button);
+		columnData.setWidthHint(100);
+		columnData.setHeightHint(200);
+		assertXML(
+				"<!-- Forms API -->",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:ColumnLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'>",
+				"    <Button.layoutData>",
+				"      <f:ColumnLayoutData widthHint='100' heightHint='200'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"</Shell>");
+	}
 
-  public void test_copyPaste() throws Exception {
-    final CompositeInfo shell =
-        parse(
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <FillLayout/>",
-            "  </Shell.layout>",
-            "  <Composite wbp:name='composite'>",
-            "    <Composite.layout>",
-            "      <f:ColumnLayout/>",
-            "    </Composite.layout>",
-            "    <Button>",
-            "      <Button.layoutData>",
-            "        <f:ColumnLayoutData widthHint='100' heightHint='200'/>",
-            "      </Button.layoutData>",
-            "    </Button>",
-            "  </Composite>",
-            "</Shell>");
-    refresh();
-    // do copy/paste
-    {
-      CompositeInfo composite = getObjectByName("composite");
-      doCopyPaste(composite, new PasteProcedure<ControlInfo>() {
-        @Override
-        public void run(ControlInfo copy) throws Exception {
-          shell.getLayout().command_CREATE(copy, null);
-        }
-      });
-    }
-    assertXML(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <Composite wbp:name='composite'>",
-        "    <Composite.layout>",
-        "      <f:ColumnLayout/>",
-        "    </Composite.layout>",
-        "    <Button>",
-        "      <Button.layoutData>",
-        "        <f:ColumnLayoutData widthHint='100' heightHint='200'/>",
-        "      </Button.layoutData>",
-        "    </Button>",
-        "  </Composite>",
-        "  <Composite>",
-        "    <Composite.layout>",
-        "      <f:ColumnLayout/>",
-        "    </Composite.layout>",
-        "    <Button>",
-        "      <Button.layoutData>",
-        "        <f:ColumnLayoutData heightHint='200' widthHint='100'/>",
-        "      </Button.layoutData>",
-        "    </Button>",
-        "  </Composite>",
-        "</Shell>");
-  }
+	public void test_copyPaste() throws Exception {
+		final CompositeInfo shell =
+				parse(
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <FillLayout/>",
+						"  </Shell.layout>",
+						"  <Composite wbp:name='composite'>",
+						"    <Composite.layout>",
+						"      <f:ColumnLayout/>",
+						"    </Composite.layout>",
+						"    <Button>",
+						"      <Button.layoutData>",
+						"        <f:ColumnLayoutData widthHint='100' heightHint='200'/>",
+						"      </Button.layoutData>",
+						"    </Button>",
+						"  </Composite>",
+						"</Shell>");
+		refresh();
+		// do copy/paste
+		{
+			CompositeInfo composite = getObjectByName("composite");
+			doCopyPaste(composite, new PasteProcedure<ControlInfo>() {
+				@Override
+				public void run(ControlInfo copy) throws Exception {
+					shell.getLayout().command_CREATE(copy, null);
+				}
+			});
+		}
+		assertXML(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <Composite wbp:name='composite'>",
+				"    <Composite.layout>",
+				"      <f:ColumnLayout/>",
+				"    </Composite.layout>",
+				"    <Button>",
+				"      <Button.layoutData>",
+				"        <f:ColumnLayoutData widthHint='100' heightHint='200'/>",
+				"      </Button.layoutData>",
+				"    </Button>",
+				"  </Composite>",
+				"  <Composite>",
+				"    <Composite.layout>",
+				"      <f:ColumnLayout/>",
+				"    </Composite.layout>",
+				"    <Button>",
+				"      <Button.layoutData>",
+				"        <f:ColumnLayoutData heightHint='200' widthHint='100'/>",
+				"      </Button.layoutData>",
+				"    </Button>",
+				"  </Composite>",
+				"</Shell>");
+	}
 
-  public void test_selectionActions_1() throws Exception {
-    parse(
-        "<!-- Forms API -->",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:ColumnLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    refresh();
-    ControlInfo button = getObjectByName("button");
-    // prepare actions
-    List<Object> actions = getSelectionActions(button);
-    // check actions
-    assertThat(actions).hasSize(5); // separator, 4 action's
-    assertNotNull(findAction(actions, "Left"));
-    assertNotNull(findAction(actions, "Center"));
-    assertNotNull(findAction(actions, "Right"));
-    assertNotNull(findAction(actions, "Fill"));
-    //
-    assertTrue(findAction(actions, "Fill").isChecked());
-    // set "Left" alignment
-    {
-      IAction leftAction = findAction(actions, "Left");
-      assertFalse(leftAction.isChecked());
-      //
-      leftAction.setChecked(true);
-      leftAction.run();
-      assertXML(
-          "<!-- Forms API -->",
-          "<Shell>",
-          "  <Shell.layout>",
-          "    <f:ColumnLayout/>",
-          "  </Shell.layout>",
-          "  <Button wbp:name='button'>",
-          "    <Button.layoutData>",
-          "      <f:ColumnLayoutData horizontalAlignment='(org.eclipse.ui.forms.widgets.ColumnLayoutData).LEFT'/>",
-          "    </Button.layoutData>",
-          "  </Button>",
-          "</Shell>");
-    }
-  }
+	public void test_selectionActions_1() throws Exception {
+		parse(
+				"<!-- Forms API -->",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:ColumnLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		refresh();
+		ControlInfo button = getObjectByName("button");
+		// prepare actions
+		List<Object> actions = getSelectionActions(button);
+		// check actions
+		assertThat(actions).hasSize(5); // separator, 4 action's
+		assertNotNull(findAction(actions, "Left"));
+		assertNotNull(findAction(actions, "Center"));
+		assertNotNull(findAction(actions, "Right"));
+		assertNotNull(findAction(actions, "Fill"));
+		//
+		assertTrue(findAction(actions, "Fill").isChecked());
+		// set "Left" alignment
+		{
+			IAction leftAction = findAction(actions, "Left");
+			assertFalse(leftAction.isChecked());
+			//
+			leftAction.setChecked(true);
+			leftAction.run();
+			assertXML(
+					"<!-- Forms API -->",
+					"<Shell>",
+					"  <Shell.layout>",
+					"    <f:ColumnLayout/>",
+					"  </Shell.layout>",
+					"  <Button wbp:name='button'>",
+					"    <Button.layoutData>",
+					"      <f:ColumnLayoutData horizontalAlignment='(org.eclipse.ui.forms.widgets.ColumnLayoutData).LEFT'/>",
+					"    </Button.layoutData>",
+					"  </Button>",
+					"</Shell>");
+		}
+	}
 
-  /**
-   * No selection.
-   */
-  public void test_selectionActions_2() throws Exception {
-    parse(
-        "<!-- Forms API -->",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:ColumnLayout/>",
-        "  </Shell.layout>",
-        "</Shell>");
-    refresh();
-    // prepare actions
-    List<Object> actions = getSelectionActions();
-    // no actions
-    assertThat(actions).isEmpty();
-  }
+	/**
+	 * No selection.
+	 */
+	public void test_selectionActions_2() throws Exception {
+		parse(
+				"<!-- Forms API -->",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:ColumnLayout/>",
+				"  </Shell.layout>",
+				"</Shell>");
+		refresh();
+		// prepare actions
+		List<Object> actions = getSelectionActions();
+		// no actions
+		assertThat(actions).isEmpty();
+	}
 
-  /**
-   * Invalid selection.
-   */
-  public void test_selectionActions_3() throws Exception {
-    CompositeInfo shell =
-        parse(
-            "<!-- Forms API -->",
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <f:ColumnLayout/>",
-            "  </Shell.layout>",
-            "  <Button wbp:name='button'/>",
-            "</Shell>");
-    refresh();
-    ControlInfo button = getObjectByName("button");
-    // prepare actions
-    List<Object> actions = getSelectionActions(shell, button);
-    // no actions
-    assertThat(actions).isEmpty();
-  }
+	/**
+	 * Invalid selection.
+	 */
+	public void test_selectionActions_3() throws Exception {
+		CompositeInfo shell =
+				parse(
+						"<!-- Forms API -->",
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <f:ColumnLayout/>",
+						"  </Shell.layout>",
+						"  <Button wbp:name='button'/>",
+						"</Shell>");
+		refresh();
+		ControlInfo button = getObjectByName("button");
+		// prepare actions
+		List<Object> actions = getSelectionActions(shell, button);
+		// no actions
+		assertThat(actions).isEmpty();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/forms/ExpandableCompositeGefTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/forms/ExpandableCompositeGefTest.java
index 75c6b9a38..1ccf91a61 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/forms/ExpandableCompositeGefTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/forms/ExpandableCompositeGefTest.java
@@ -20,91 +20,91 @@
  * @author scheglov_ke
  */
 public class ExpandableCompositeGefTest extends XwtGefTest {
-  private ExpandableCompositeInfo composite;
+	private ExpandableCompositeInfo composite;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Canvas, CREATE
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_canvas_CREATE_textClient() throws Exception {
-    prepare_canvas_CREATE();
-    // use canvas
-    canvas.target(composite).in(-0.1, 0.1).move();
-    canvas.click();
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<!-- Forms API -->",
-        "<ExpandableComposite>",
-        "  <ExpandableComposite.textClient>",
-        "    <Button/>",
-        "  </ExpandableComposite.textClient>",
-        "</ExpandableComposite>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Canvas, CREATE
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_canvas_CREATE_textClient() throws Exception {
+		prepare_canvas_CREATE();
+		// use canvas
+		canvas.target(composite).in(-0.1, 0.1).move();
+		canvas.click();
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<!-- Forms API -->",
+				"<ExpandableComposite>",
+				"  <ExpandableComposite.textClient>",
+				"    <Button/>",
+				"  </ExpandableComposite.textClient>",
+				"</ExpandableComposite>");
+	}
 
-  public void test_canvas_CREATE_client() throws Exception {
-    prepare_canvas_CREATE();
-    // use canvas
-    canvas.target(composite).in(0.5, 0.5).move();
-    canvas.click();
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<!-- Forms API -->",
-        "<ExpandableComposite>",
-        "  <ExpandableComposite.client>",
-        "    <Button/>",
-        "  </ExpandableComposite.client>",
-        "</ExpandableComposite>");
-  }
+	public void test_canvas_CREATE_client() throws Exception {
+		prepare_canvas_CREATE();
+		// use canvas
+		canvas.target(composite).in(0.5, 0.5).move();
+		canvas.click();
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<!-- Forms API -->",
+				"<ExpandableComposite>",
+				"  <ExpandableComposite.client>",
+				"    <Button/>",
+				"  </ExpandableComposite.client>",
+				"</ExpandableComposite>");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // CREATE
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private ExpandableCompositeInfo prepare_canvas_CREATE() throws Exception {
-    composite =
-        openEditor(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<!-- Forms API -->",
-            "<ExpandableComposite/>");
-    // create Button
-    loadButton();
-    canvas.create(0, 0);
-    // use this ExpandableComposite_Info
-    return composite;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// CREATE
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private ExpandableCompositeInfo prepare_canvas_CREATE() throws Exception {
+		composite =
+				openEditor(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<!-- Forms API -->",
+						"<ExpandableComposite/>");
+		// create Button
+		loadButton();
+		canvas.create(0, 0);
+		// use this ExpandableComposite_Info
+		return composite;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tree
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_tree_CREATE_left() throws Exception {
-    prepare_canvas_CREATE();
-    // use tree
-    EditPart position = tree.getEditPart(composite).getChildren().get(1);
-    tree.moveOn(position).click();
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<!-- Forms API -->",
-        "<ExpandableComposite>",
-        "  <ExpandableComposite.client>",
-        "    <Button/>",
-        "  </ExpandableComposite.client>",
-        "</ExpandableComposite>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tree
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_tree_CREATE_left() throws Exception {
+		prepare_canvas_CREATE();
+		// use tree
+		EditPart position = tree.getEditPart(composite).getChildren().get(1);
+		tree.moveOn(position).click();
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<!-- Forms API -->",
+				"<ExpandableComposite>",
+				"  <ExpandableComposite.client>",
+				"    <Button/>",
+				"  </ExpandableComposite.client>",
+				"</ExpandableComposite>");
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/forms/ExpandableCompositeTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/forms/ExpandableCompositeTest.java
index 3f1f70606..0c23fe61c 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/forms/ExpandableCompositeTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/forms/ExpandableCompositeTest.java
@@ -27,91 +27,91 @@
  * @author scheglov_ke
  */
 public class ExpandableCompositeTest extends XwtModelTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * No any children {@link ControlInfo}'s, so for all positions <code>null</code>.
-   */
-  public void test_childrenNo() throws Exception {
-    ExpandableCompositeInfo composite =
-        parse(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<!-- Forms API -->",
-            "<ExpandableComposite/>");
-    // no "real" Control's
-    assertNull(composite.getControl("noSuchMethod"));
-    assertNull(composite.getControl("textClient"));
-    assertNull(composite.getControl("client"));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * No any children {@link ControlInfo}'s, so for all positions <code>null</code>.
+	 */
+	public void test_childrenNo() throws Exception {
+		ExpandableCompositeInfo composite =
+				parse(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<!-- Forms API -->",
+						"<ExpandableComposite/>");
+		// no "real" Control's
+		assertNull(composite.getControl("noSuchMethod"));
+		assertNull(composite.getControl("textClient"));
+		assertNull(composite.getControl("client"));
+	}
 
-  /**
-   * Test for {@link ExpandableCompositeInfo#getControl(String)}.
-   */
-  public void test_children() throws Exception {
-    ExpandableCompositeInfo composite =
-        parse(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<!-- Forms API -->",
-            "<ExpandableComposite>",
-            "  <ExpandableComposite.client>",
-            "    <Button wbp:name='button'/>",
-            "  </ExpandableComposite.client>",
-            "</ExpandableComposite>");
-    ControlInfo button = getObjectByName("button");
-    assertSame(button, composite.getControl("client"));
-  }
+	/**
+	 * Test for {@link ExpandableCompositeInfo#getControl(String)}.
+	 */
+	public void test_children() throws Exception {
+		ExpandableCompositeInfo composite =
+				parse(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<!-- Forms API -->",
+						"<ExpandableComposite>",
+						"  <ExpandableComposite.client>",
+						"    <Button wbp:name='button'/>",
+						"  </ExpandableComposite.client>",
+						"</ExpandableComposite>");
+		ControlInfo button = getObjectByName("button");
+		assertSame(button, composite.getControl("client"));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Each {@link ControlInfo} text is decorated with its position method.
-   */
-  public void test_presentation_decorateText() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<!-- Forms API -->",
-        "<ExpandableComposite>",
-        "  <ExpandableComposite.client>",
-        "    <Button wbp:name='button'/>",
-        "  </ExpandableComposite.client>",
-        "</ExpandableComposite>");
-    ControlInfo button = getObjectByName("button");
-    assertEquals("client - Button", ObjectsLabelProvider.INSTANCE.getText(button));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Each {@link ControlInfo} text is decorated with its position method.
+	 */
+	public void test_presentation_decorateText() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<!-- Forms API -->",
+				"<ExpandableComposite>",
+				"  <ExpandableComposite.client>",
+				"    <Button wbp:name='button'/>",
+				"  </ExpandableComposite.client>",
+				"</ExpandableComposite>");
+		ControlInfo button = getObjectByName("button");
+		assertEquals("client - Button", ObjectsLabelProvider.INSTANCE.getText(button));
+	}
 
-  /**
-   * Even when no "real" {@link ControlInfo} children, tree still has {@link AbstractPositionInfo}
-   * placeholders.
-   */
-  public void test_getChildrenTree_placeholders() throws Exception {
-    ExpandableCompositeInfo composite =
-        parse(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<!-- Forms API -->",
-            "<ExpandableComposite/>");
-    // no "real" Control's, but in "tree" we have position placeholder children
-    List<ObjectInfo> children = composite.getPresentation().getChildrenTree();
-    assertThat(children).hasSize(2);
-    assertEquals("textClient", ObjectsLabelProvider.INSTANCE.getText(children.get(0)));
-    assertEquals("client", ObjectsLabelProvider.INSTANCE.getText(children.get(1)));
-  }
+	/**
+	 * Even when no "real" {@link ControlInfo} children, tree still has {@link AbstractPositionInfo}
+	 * placeholders.
+	 */
+	public void test_getChildrenTree_placeholders() throws Exception {
+		ExpandableCompositeInfo composite =
+				parse(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<!-- Forms API -->",
+						"<ExpandableComposite/>");
+		// no "real" Control's, but in "tree" we have position placeholder children
+		List<ObjectInfo> children = composite.getPresentation().getChildrenTree();
+		assertThat(children).hasSize(2);
+		assertEquals("textClient", ObjectsLabelProvider.INSTANCE.getText(children.get(0)));
+		assertEquals("client", ObjectsLabelProvider.INSTANCE.getText(children.get(1)));
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/forms/FormGefTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/forms/FormGefTest.java
index faf684d5c..261ef5c48 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/forms/FormGefTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/forms/FormGefTest.java
@@ -20,72 +20,72 @@
  * @author scheglov_ke
  */
 public class FormGefTest extends XwtGefTest {
-  private FormInfo composite;
+	private FormInfo composite;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Canvas, CREATE
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_canvas_CREATE_headClient() throws Exception {
-    prepare_CREATE();
-    // use canvas
-    canvas.target(composite).in(-10, 10).move();
-    canvas.click();
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<!-- Forms API -->",
-        "<Form text='My Form'>",
-        "  <Form.body/>",
-        "  <Form.headClient>",
-        "    <Button/>",
-        "  </Form.headClient>",
-        "</Form>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Canvas, CREATE
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_canvas_CREATE_headClient() throws Exception {
+		prepare_CREATE();
+		// use canvas
+		canvas.target(composite).in(-10, 10).move();
+		canvas.click();
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<!-- Forms API -->",
+				"<Form text='My Form'>",
+				"  <Form.body/>",
+				"  <Form.headClient>",
+				"    <Button/>",
+				"  </Form.headClient>",
+				"</Form>");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tree
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_tree_CREATE_headClient() throws Exception {
-    prepare_CREATE();
-    // use tree
-    EditPart position = tree.getEditPart(composite).getChildren().get(0);
-    tree.moveOn(position).click();
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<!-- Forms API -->",
-        "<Form text='My Form'>",
-        "  <Form.body/>",
-        "  <Form.headClient>",
-        "    <Button/>",
-        "  </Form.headClient>",
-        "</Form>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tree
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_tree_CREATE_headClient() throws Exception {
+		prepare_CREATE();
+		// use tree
+		EditPart position = tree.getEditPart(composite).getChildren().get(0);
+		tree.moveOn(position).click();
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<!-- Forms API -->",
+				"<Form text='My Form'>",
+				"  <Form.body/>",
+				"  <Form.headClient>",
+				"    <Button/>",
+				"  </Form.headClient>",
+				"</Form>");
+	}
 
-  private FormInfo prepare_CREATE() throws Exception {
-    composite =
-        openEditor(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<!-- Forms API -->",
-            "<Form text='My Form'/>");
-    // create Button
-    loadButton();
-    canvas.create(0, 0);
-    // use this Form_Info
-    return composite;
-  }
+	private FormInfo prepare_CREATE() throws Exception {
+		composite =
+				openEditor(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<!-- Forms API -->",
+						"<Form text='My Form'/>");
+		// create Button
+		loadButton();
+		canvas.create(0, 0);
+		// use this Form_Info
+		return composite;
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/forms/FormTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/forms/FormTest.java
index 52415b97a..729eead93 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/forms/FormTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/forms/FormTest.java
@@ -29,177 +29,177 @@
  * @author scheglov_ke
  */
 public class FormTest extends XwtModelTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Body
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_noBodyElement() throws Exception {
-    parse(
-        "<!-- Forms API -->",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <Form wbp:name='form'/>",
-        "</Shell>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <FillLayout>",
-        "  <Form wbp:name='form'>",
-        "    <Form.body?>",
-        "      implicit-layout: absolute");
-    refresh();
-    //
-    FormInfo form = getObjectByName("form");
-    XmlObjectInfo body = form.getChildrenXML().get(0);
-    {
-      CreationSupport creationSupport = body.getCreationSupport();
-      assertEquals("<Form.body?>", creationSupport.toString());
-      assertEquals("Form.body", creationSupport.getTitle());
-      assertTrue(creationSupport.canDelete());
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Body
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_noBodyElement() throws Exception {
+		parse(
+				"<!-- Forms API -->",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <Form wbp:name='form'/>",
+				"</Shell>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <FillLayout>",
+				"  <Form wbp:name='form'>",
+				"    <Form.body?>",
+				"      implicit-layout: absolute");
+		refresh();
+		//
+		FormInfo form = getObjectByName("form");
+		XmlObjectInfo body = form.getChildrenXML().get(0);
+		{
+			CreationSupport creationSupport = body.getCreationSupport();
+			assertEquals("<Form.body?>", creationSupport.toString());
+			assertEquals("Form.body", creationSupport.getTitle());
+			assertTrue(creationSupport.canDelete());
+		}
+	}
 
-  public void test_hasBodyElement() throws Exception {
-    parse(
-        "<!-- Forms API -->",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <Form wbp:name='form'>",
-        "    <Form.body enabled='false'/>",
-        "  </Form>",
-        "</Shell>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <FillLayout>",
-        "  <Form wbp:name='form'>",
-        "    <Form.body enabled='false'>",
-        "      implicit-layout: absolute");
-    refresh();
-    //
-    FormInfo form = getObjectByName("form");
-    XmlObjectInfo body = form.getChildrenXML().get(0);
-    {
-      CreationSupport creationSupport = body.getCreationSupport();
-      assertEquals("<Form.body enabled=\"false\">", creationSupport.toString());
-      assertEquals("Form.body", creationSupport.getTitle());
-      assertTrue(creationSupport.canDelete());
-    }
-  }
+	public void test_hasBodyElement() throws Exception {
+		parse(
+				"<!-- Forms API -->",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <Form wbp:name='form'>",
+				"    <Form.body enabled='false'/>",
+				"  </Form>",
+				"</Shell>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <FillLayout>",
+				"  <Form wbp:name='form'>",
+				"    <Form.body enabled='false'>",
+				"      implicit-layout: absolute");
+		refresh();
+		//
+		FormInfo form = getObjectByName("form");
+		XmlObjectInfo body = form.getChildrenXML().get(0);
+		{
+			CreationSupport creationSupport = body.getCreationSupport();
+			assertEquals("<Form.body enabled=\"false\">", creationSupport.toString());
+			assertEquals("Form.body", creationSupport.getTitle());
+			assertTrue(creationSupport.canDelete());
+		}
+	}
 
-  public void test_generateBodyElement() throws Exception {
-    parse(
-        "<!-- Forms API -->",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <Form wbp:name='form'/>",
-        "</Shell>");
-    refresh();
-    FormInfo form = getObjectByName("form");
-    //
-    XmlObjectInfo body = form.getChildrenXML().get(0);
-    body.getPropertyByTitle("enabled").setValue(false);
-    assertXML(
-        "<!-- Forms API -->",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <Form wbp:name='form'>",
-        "    <Form.body enabled='false'/>",
-        "  </Form>",
-        "</Shell>");
-  }
+	public void test_generateBodyElement() throws Exception {
+		parse(
+				"<!-- Forms API -->",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <Form wbp:name='form'/>",
+				"</Shell>");
+		refresh();
+		FormInfo form = getObjectByName("form");
+		//
+		XmlObjectInfo body = form.getChildrenXML().get(0);
+		body.getPropertyByTitle("enabled").setValue(false);
+		assertXML(
+				"<!-- Forms API -->",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <Form wbp:name='form'>",
+				"    <Form.body enabled='false'/>",
+				"  </Form>",
+				"</Shell>");
+	}
 
-  /**
-   * Test that property values are intercepted and displayed.
-   */
-  public void test_body_propertyValue() throws Exception {
-    parse(
-        "<!-- Forms API -->",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <Form wbp:name='form'>",
-        "    <Form.body enabled='false'/>",
-        "  </Form>",
-        "</Shell>");
-    refresh();
-    FormInfo form = getObjectByName("form");
-    XmlObjectInfo body = form.getChildrenXML().get(0);
-    //
-    Property property = body.getPropertyByTitle("enabled");
-    assertEquals(Boolean.FALSE, property.getValue());
-  }
+	/**
+	 * Test that property values are intercepted and displayed.
+	 */
+	public void test_body_propertyValue() throws Exception {
+		parse(
+				"<!-- Forms API -->",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <Form wbp:name='form'>",
+				"    <Form.body enabled='false'/>",
+				"  </Form>",
+				"</Shell>");
+		refresh();
+		FormInfo form = getObjectByName("form");
+		XmlObjectInfo body = form.getChildrenXML().get(0);
+		//
+		Property property = body.getPropertyByTitle("enabled");
+		assertEquals(Boolean.FALSE, property.getValue());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test that "background" property is applied and not overridden.
-   * <p>
-   * https://bugs.eclipse.org/bugs/show_bug.cgi?id=310239
-   */
-  public void test_background() throws Exception {
-    parse(
-        "<!-- Forms API -->",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <Form wbp:name='form' background='yellow'/>",
-        "</Shell>");
-    refresh();
-    FormInfo form = getObjectByName("form");
-    //
-    Color background = form.getControl().getBackground();
-    assertEquals(new RGB(255, 255, 0), background.getRGB());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test that "background" property is applied and not overridden.
+	 * <p>
+	 * https://bugs.eclipse.org/bugs/show_bug.cgi?id=310239
+	 */
+	public void test_background() throws Exception {
+		parse(
+				"<!-- Forms API -->",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <Form wbp:name='form' background='yellow'/>",
+				"</Shell>");
+		refresh();
+		FormInfo form = getObjectByName("form");
+		//
+		Color background = form.getControl().getBackground();
+		assertEquals(new RGB(255, 255, 0), background.getRGB());
+	}
 
-  /**
-   * Test that "headClient" control is rendered correctly.
-   * <p>
-   * https://bugs.eclipse.org/bugs/show_bug.cgi?id=310238
-   */
-  public void test_headClient() throws Exception {
-    parse(
-        "<!-- Forms API -->",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <Form>",
-        "    <Form.headClient>",
-        "      <Button wbp:name='button' text='New Button'/>",
-        "    </Form.headClient>",
-        "  </Form>",
-        "</Shell>");
-    refresh();
-    ControlInfo button = getObjectByName("button");
-    {
-      Rectangle bounds = button.getBounds();
-      assertThat(bounds.width).isGreaterThan(400);
-      assertThat(bounds.height).isGreaterThan(20);
-    }
-  }
+	/**
+	 * Test that "headClient" control is rendered correctly.
+	 * <p>
+	 * https://bugs.eclipse.org/bugs/show_bug.cgi?id=310238
+	 */
+	public void test_headClient() throws Exception {
+		parse(
+				"<!-- Forms API -->",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <Form>",
+				"    <Form.headClient>",
+				"      <Button wbp:name='button' text='New Button'/>",
+				"    </Form.headClient>",
+				"  </Form>",
+				"</Shell>");
+		refresh();
+		ControlInfo button = getObjectByName("button");
+		{
+			Rectangle bounds = button.getBounds();
+			assertThat(bounds.width).isGreaterThan(400);
+			assertThat(bounds.height).isGreaterThan(20);
+		}
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/forms/FormsTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/forms/FormsTest.java
index 639d66cbf..b351e0766 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/forms/FormsTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/forms/FormsTest.java
@@ -22,60 +22,60 @@
  * @author scheglov_ke
  */
 public class FormsTest extends XwtModelTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * In SWT background is "gray".
-   */
-  public void test_notForms() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <Composite wbp:name='composite'/>",
-        "</Shell>");
-    refresh();
-    CompositeInfo composite = getObjectByName("composite");
-    // background
-    {
-      Color background = composite.getControl().getBackground();
-      assertEquals(new RGB(240, 240, 240), background.getRGB());
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * In SWT background is "gray".
+	 */
+	public void test_notForms() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <Composite wbp:name='composite'/>",
+				"</Shell>");
+		refresh();
+		CompositeInfo composite = getObjectByName("composite");
+		// background
+		{
+			Color background = composite.getControl().getBackground();
+			assertEquals(new RGB(240, 240, 240), background.getRGB());
+		}
+	}
 
-  /**
-   * In Forms background is "white".
-   */
-  public void test_isForms() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<!-- Forms API -->",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <Composite wbp:name='composite'/>",
-        "</Shell>");
-    refresh();
-    CompositeInfo composite = getObjectByName("composite");
-    // background
-    {
-      Color background = composite.getControl().getBackground();
-      assertEquals(new RGB(255, 255, 255), background.getRGB());
-    }
-  }
+	/**
+	 * In Forms background is "white".
+	 */
+	public void test_isForms() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<!-- Forms API -->",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <Composite wbp:name='composite'/>",
+				"</Shell>");
+		refresh();
+		CompositeInfo composite = getObjectByName("composite");
+		// background
+		{
+			Color background = composite.getControl().getBackground();
+			assertEquals(new RGB(255, 255, 255), background.getRGB());
+		}
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/forms/FormsTests.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/forms/FormsTests.java
index e9a54fc43..06bf03a23 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/forms/FormsTests.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/forms/FormsTests.java
@@ -22,16 +22,16 @@
  * @author scheglov_ke
  */
 public class FormsTests extends DesignerSuiteTests {
-  public static Test suite() {
-    TestSuite suite = new TestSuite("org.eclipse.wb.xwt.model.forms");
-    suite.addTest(createSingleSuite(FormsTest.class));
-    suite.addTest(createSingleSuite(FormTest.class));
-    suite.addTest(createSingleSuite(FormGefTest.class));
-    suite.addTest(createSingleSuite(ScrolledFormTest.class));
-    suite.addTest(createSingleSuite(ExpandableCompositeTest.class));
-    suite.addTest(createSingleSuite(ExpandableCompositeGefTest.class));
-    suite.addTest(createSingleSuite(ColumnLayoutTest.class));
-    suite.addTest(TableWrapLayoutTests.suite());
-    return suite;
-  }
+	public static Test suite() {
+		TestSuite suite = new TestSuite("org.eclipse.wb.xwt.model.forms");
+		suite.addTest(createSingleSuite(FormsTest.class));
+		suite.addTest(createSingleSuite(FormTest.class));
+		suite.addTest(createSingleSuite(FormGefTest.class));
+		suite.addTest(createSingleSuite(ScrolledFormTest.class));
+		suite.addTest(createSingleSuite(ExpandableCompositeTest.class));
+		suite.addTest(createSingleSuite(ExpandableCompositeGefTest.class));
+		suite.addTest(createSingleSuite(ColumnLayoutTest.class));
+		suite.addTest(TableWrapLayoutTests.suite());
+		return suite;
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/forms/ScrolledFormTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/forms/ScrolledFormTest.java
index 0f4b7f766..7c8238323 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/forms/ScrolledFormTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/forms/ScrolledFormTest.java
@@ -20,70 +20,70 @@
  * @author scheglov_ke
  */
 public class ScrolledFormTest extends XwtModelTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_parse() throws Exception {
-    parse(
-        "<!-- Forms API -->",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <ScrolledForm wbp:name='form'/>",
-        "</Shell>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <FillLayout>",
-        "  <ScrolledForm wbp:name='form'>",
-        "    <ScrolledForm.form?>",
-        "    <ScrolledForm.body?>",
-        "      implicit-layout: absolute");
-    refresh();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_parse() throws Exception {
+		parse(
+				"<!-- Forms API -->",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <ScrolledForm wbp:name='form'/>",
+				"</Shell>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <FillLayout>",
+				"  <ScrolledForm wbp:name='form'>",
+				"    <ScrolledForm.form?>",
+				"    <ScrolledForm.body?>",
+				"      implicit-layout: absolute");
+		refresh();
+	}
 
-  public void test_create() throws Exception {
-    CompositeInfo shell =
-        parse(
-            "<!-- Forms API -->",
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <FillLayout/>",
-            "  </Shell.layout>",
-            "</Shell>");
-    refresh();
-    //
-    ScrolledFormInfo newForm = createObject("org.eclipse.ui.forms.widgets.ScrolledForm");
-    shell.getLayout().command_CREATE(newForm, null);
-    assertXML(
-        "<!-- Forms API -->",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <ScrolledForm>",
-        "    <ScrolledForm.form text='New ScrolledForm'/>",
-        "  </ScrolledForm>",
-        "</Shell>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <FillLayout>",
-        "  <ScrolledForm>",
-        "    <ScrolledForm.form text='New ScrolledForm'>",
-        "    <ScrolledForm.body?>",
-        "      implicit-layout: absolute");
-  }
+	public void test_create() throws Exception {
+		CompositeInfo shell =
+				parse(
+						"<!-- Forms API -->",
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <FillLayout/>",
+						"  </Shell.layout>",
+						"</Shell>");
+		refresh();
+		//
+		ScrolledFormInfo newForm = createObject("org.eclipse.ui.forms.widgets.ScrolledForm");
+		shell.getLayout().command_CREATE(newForm, null);
+		assertXML(
+				"<!-- Forms API -->",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <ScrolledForm>",
+				"    <ScrolledForm.form text='New ScrolledForm'/>",
+				"  </ScrolledForm>",
+				"</Shell>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <FillLayout>",
+				"  <ScrolledForm>",
+				"    <ScrolledForm.form text='New ScrolledForm'>",
+				"    <ScrolledForm.body?>",
+				"      implicit-layout: absolute");
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/forms/table/TabelWrapLayoutParametersTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/forms/table/TabelWrapLayoutParametersTest.java
index 7bd2f4bf5..00d47c7af 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/forms/table/TabelWrapLayoutParametersTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/forms/table/TabelWrapLayoutParametersTest.java
@@ -29,230 +29,230 @@
  * @author scheglov_ke
  */
 public class TabelWrapLayoutParametersTest extends XwtModelTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Source
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getTestSource_namespaces() {
-    return super.getTestSource_namespaces()
-        + " xmlns:f='clr-namespace:org.eclipse.ui.forms.widgets'";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Source
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getTestSource_namespaces() {
+		return super.getTestSource_namespaces()
+				+ " xmlns:f='clr-namespace:org.eclipse.ui.forms.widgets'";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * {@link Text} widget is marked as required horizontal grab/fill.
-   */
-  public void test_CREATE_Text() throws Exception {
-    parse(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "</Shell>");
-    refresh();
-    TableWrapLayoutInfo layout = getObjectByName("layout");
-    //
-    ControlInfo newText = createObject("org.eclipse.swt.widgets.Text");
-    layout.command_CREATE(newText, 0, false, 0, false);
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Text x:Style='BORDER'>",
-        "    <Text.layoutData>",
-        "      <f:TableWrapData"
-            + " grabHorizontal='true'"
-            + " align='(org.eclipse.ui.forms.widgets.TableWrapData).FILL'/>",
-        "    </Text.layoutData>",
-        "  </Text>",
-        "</Shell>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * {@link Text} widget is marked as required horizontal grab/fill.
+	 */
+	public void test_CREATE_Text() throws Exception {
+		parse(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"</Shell>");
+		refresh();
+		TableWrapLayoutInfo layout = getObjectByName("layout");
+		//
+		ControlInfo newText = createObject("org.eclipse.swt.widgets.Text");
+		layout.command_CREATE(newText, 0, false, 0, false);
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Text x:Style='BORDER'>",
+				"    <Text.layoutData>",
+				"      <f:TableWrapData"
+						+ " grabHorizontal='true'"
+						+ " align='(org.eclipse.ui.forms.widgets.TableWrapData).FILL'/>",
+						"    </Text.layoutData>",
+						"  </Text>",
+				"</Shell>");
+	}
 
-  /**
-   * Test that horizontal grab/fill {@link Text} can be disabled.
-   */
-  public void test_CREATE_Text_disabled() throws Exception {
-    parse(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "</Shell>");
-    refresh();
-    TableWrapLayoutInfo layout = getObjectByName("layout");
-    //
-    PreferencesRepairer preferences =
-        new PreferencesRepairer(ToolkitProvider.DESCRIPTION.getPreferences());
-    try {
-      preferences.setValue(IPreferenceConstants.P_ENABLE_GRAB, false);
-      ControlInfo newText = createObject("org.eclipse.swt.widgets.Text");
-      layout.command_CREATE(newText, 0, false, 0, false);
-      assertXML(
-          "// filler filler filler filler filler",
-          "// filler filler filler filler filler",
-          "<Shell>",
-          "  <Shell.layout>",
-          "    <f:TableWrapLayout wbp:name='layout'/>",
-          "  </Shell.layout>",
-          "  <Text x:Style='BORDER'/>",
-          "</Shell>");
-    } finally {
-      preferences.restore();
-    }
-  }
+	/**
+	 * Test that horizontal grab/fill {@link Text} can be disabled.
+	 */
+	public void test_CREATE_Text_disabled() throws Exception {
+		parse(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"</Shell>");
+		refresh();
+		TableWrapLayoutInfo layout = getObjectByName("layout");
+		//
+		PreferencesRepairer preferences =
+				new PreferencesRepairer(ToolkitProvider.DESCRIPTION.getPreferences());
+		try {
+			preferences.setValue(IPreferenceConstants.P_ENABLE_GRAB, false);
+			ControlInfo newText = createObject("org.eclipse.swt.widgets.Text");
+			layout.command_CREATE(newText, 0, false, 0, false);
+			assertXML(
+					"// filler filler filler filler filler",
+					"// filler filler filler filler filler",
+					"<Shell>",
+					"  <Shell.layout>",
+					"    <f:TableWrapLayout wbp:name='layout'/>",
+					"  </Shell.layout>",
+					"  <Text x:Style='BORDER'/>",
+					"</Shell>");
+		} finally {
+			preferences.restore();
+		}
+	}
 
-  /**
-   * {@link Table} widget is marked as required horizontal/vertical grab/fill.
-   */
-  public void test_CREATE_Table() throws Exception {
-    parse(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "</Shell>");
-    refresh();
-    TableWrapLayoutInfo layout = getObjectByName("layout");
-    //
-    ControlInfo newTable = createObject("org.eclipse.swt.widgets.Table");
-    layout.command_CREATE(newTable, 0, false, 0, false);
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Table x:Style='BORDER | FULL_SELECTION' linesVisible='true' headerVisible='true'>",
-        "    <Table.layoutData>",
-        "      <f:TableWrapData"
-            + " grabHorizontal='true' align='(org.eclipse.ui.forms.widgets.TableWrapData).FILL'"
-            + " grabVertical='true' valign='(org.eclipse.ui.forms.widgets.TableWrapData).FILL'/>",
-        "    </Table.layoutData>",
-        "  </Table>",
-        "</Shell>");
-  }
+	/**
+	 * {@link Table} widget is marked as required horizontal/vertical grab/fill.
+	 */
+	public void test_CREATE_Table() throws Exception {
+		parse(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"</Shell>");
+		refresh();
+		TableWrapLayoutInfo layout = getObjectByName("layout");
+		//
+		ControlInfo newTable = createObject("org.eclipse.swt.widgets.Table");
+		layout.command_CREATE(newTable, 0, false, 0, false);
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Table x:Style='BORDER | FULL_SELECTION' linesVisible='true' headerVisible='true'>",
+				"    <Table.layoutData>",
+				"      <f:TableWrapData"
+						+ " grabHorizontal='true' align='(org.eclipse.ui.forms.widgets.TableWrapData).FILL'"
+						+ " grabVertical='true' valign='(org.eclipse.ui.forms.widgets.TableWrapData).FILL'/>",
+						"    </Table.layoutData>",
+						"  </Table>",
+				"</Shell>");
+	}
 
-  /**
-   * {@link Label} widget is marked as "right" aligned and next widget is {@link Text}, so when add
-   * {@link Label} before {@link Text}, use {@link TableWrapData#RIGHT} alignment.
-   */
-  public void test_CREATE_LabelBeforeText() throws Exception {
-    parse(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Text/>",
-        "</Shell>");
-    refresh();
-    TableWrapLayoutInfo layout = getObjectByName("layout");
-    //
-    ControlInfo newLabel = createObject("org.eclipse.swt.widgets.Label");
-    layout.command_CREATE(newLabel, 0, true, 0, false);
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Label text='New Label'>",
-        "    <Label.layoutData>",
-        "      <f:TableWrapData align='(org.eclipse.ui.forms.widgets.TableWrapData).RIGHT'/>",
-        "    </Label.layoutData>",
-        "  </Label>",
-        "  <Text/>",
-        "</Shell>");
-  }
+	/**
+	 * {@link Label} widget is marked as "right" aligned and next widget is {@link Text}, so when add
+	 * {@link Label} before {@link Text}, use {@link TableWrapData#RIGHT} alignment.
+	 */
+	public void test_CREATE_LabelBeforeText() throws Exception {
+		parse(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Text/>",
+				"</Shell>");
+		refresh();
+		TableWrapLayoutInfo layout = getObjectByName("layout");
+		//
+		ControlInfo newLabel = createObject("org.eclipse.swt.widgets.Label");
+		layout.command_CREATE(newLabel, 0, true, 0, false);
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Label text='New Label'>",
+				"    <Label.layoutData>",
+				"      <f:TableWrapData align='(org.eclipse.ui.forms.widgets.TableWrapData).RIGHT'/>",
+				"    </Label.layoutData>",
+				"  </Label>",
+				"  <Text/>",
+				"</Shell>");
+	}
 
-  /**
-   * Check that automatic "right alignment" feature for {@link Label} can be disabled.
-   */
-  public void test_CREATE_LabelBeforeText_disabled() throws Exception {
-    parse(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Text/>",
-        "</Shell>");
-    refresh();
-    TableWrapLayoutInfo layout = getObjectByName("layout");
-    //
-    PreferencesRepairer preferences =
-        new PreferencesRepairer(ToolkitProvider.DESCRIPTION.getPreferences());
-    try {
-      preferences.setValue(IPreferenceConstants.P_ENABLE_RIGHT_ALIGNMENT, false);
-      ControlInfo newLabel = createObject("org.eclipse.swt.widgets.Label");
-      layout.command_CREATE(newLabel, 0, true, 0, false);
-      assertXML(
-          "<Shell>",
-          "  <Shell.layout>",
-          "    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
-          "  </Shell.layout>",
-          "  <Label text='New Label'/>",
-          "  <Text/>",
-          "</Shell>");
-    } finally {
-      preferences.restore();
-    }
-  }
+	/**
+	 * Check that automatic "right alignment" feature for {@link Label} can be disabled.
+	 */
+	public void test_CREATE_LabelBeforeText_disabled() throws Exception {
+		parse(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Text/>",
+				"</Shell>");
+		refresh();
+		TableWrapLayoutInfo layout = getObjectByName("layout");
+		//
+		PreferencesRepairer preferences =
+				new PreferencesRepairer(ToolkitProvider.DESCRIPTION.getPreferences());
+		try {
+			preferences.setValue(IPreferenceConstants.P_ENABLE_RIGHT_ALIGNMENT, false);
+			ControlInfo newLabel = createObject("org.eclipse.swt.widgets.Label");
+			layout.command_CREATE(newLabel, 0, true, 0, false);
+			assertXML(
+					"<Shell>",
+					"  <Shell.layout>",
+					"    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
+					"  </Shell.layout>",
+					"  <Label text='New Label'/>",
+					"  <Text/>",
+					"</Shell>");
+		} finally {
+			preferences.restore();
+		}
+	}
 
-  /**
-   * {@link Label} widget is marked as "right" aligned and next widget is {@link Text}, so when add
-   * {@link Text} after {@link Label}, use {@link TableWrapData#RIGHT} alignment for {@link Label}.
-   */
-  public void test_CREATE_TextAfterLabel() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Label text='New Label'/>",
-        "</Shell>");
-    refresh();
-    TableWrapLayoutInfo layout = getObjectByName("layout");
-    //
-    ControlInfo newText = createObject("org.eclipse.swt.widgets.Text");
-    layout.command_CREATE(newText, 1, false, 0, false);
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Label text='New Label'>",
-        "    <Label.layoutData>",
-        "      <f:TableWrapData align='(org.eclipse.ui.forms.widgets.TableWrapData).RIGHT'/>",
-        "    </Label.layoutData>",
-        "  </Label>",
-        "  <Text x:Style='BORDER'>",
-        "    <Text.layoutData>",
-        "      <f:TableWrapData"
-            + " grabHorizontal='true' align='(org.eclipse.ui.forms.widgets.TableWrapData).FILL'/>",
-        "    </Text.layoutData>",
-        "  </Text>",
-        "</Shell>");
-  }
+	/**
+	 * {@link Label} widget is marked as "right" aligned and next widget is {@link Text}, so when add
+	 * {@link Text} after {@link Label}, use {@link TableWrapData#RIGHT} alignment for {@link Label}.
+	 */
+	public void test_CREATE_TextAfterLabel() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Label text='New Label'/>",
+				"</Shell>");
+		refresh();
+		TableWrapLayoutInfo layout = getObjectByName("layout");
+		//
+		ControlInfo newText = createObject("org.eclipse.swt.widgets.Text");
+		layout.command_CREATE(newText, 1, false, 0, false);
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Label text='New Label'>",
+				"    <Label.layoutData>",
+				"      <f:TableWrapData align='(org.eclipse.ui.forms.widgets.TableWrapData).RIGHT'/>",
+				"    </Label.layoutData>",
+				"  </Label>",
+				"  <Text x:Style='BORDER'>",
+				"    <Text.layoutData>",
+				"      <f:TableWrapData"
+						+ " grabHorizontal='true' align='(org.eclipse.ui.forms.widgets.TableWrapData).FILL'/>",
+						"    </Text.layoutData>",
+						"  </Text>",
+				"</Shell>");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/forms/table/TableWrapDataTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/forms/table/TableWrapDataTest.java
index f11e5ac58..9f0d2415f 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/forms/table/TableWrapDataTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/forms/table/TableWrapDataTest.java
@@ -28,545 +28,545 @@
  * @author scheglov_ke
  */
 public class TableWrapDataTest extends XwtModelTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Source
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getTestSource_namespaces() {
-    return super.getTestSource_namespaces()
-        + " xmlns:f='clr-namespace:org.eclipse.ui.forms.widgets'";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Source
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getTestSource_namespaces() {
+		return super.getTestSource_namespaces()
+				+ " xmlns:f='clr-namespace:org.eclipse.ui.forms.widgets'";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Images
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_getSmallAlignmentImage() throws Exception {
-    parse(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    refresh();
-    TableWrapLayoutInfo layout = getObjectByName("layout");
-    ControlInfo button = getObjectByName("button");
-    //
-    TableWrapDataInfo layoutData = layout.getTableWrapData(button);
-    check_getSmallAlignmentImage(layoutData, true, new int[]{
-        TableWrapData.LEFT,
-        TableWrapData.CENTER,
-        TableWrapData.RIGHT,
-        TableWrapData.FILL}, new String[]{"left.gif", "center.gif", "right.gif", "fill.gif"});
-    check_getSmallAlignmentImage(layoutData, false, new int[]{
-        TableWrapData.TOP,
-        TableWrapData.MIDDLE,
-        TableWrapData.BOTTOM,
-        TableWrapData.FILL}, new String[]{"top.gif", "middle.gif", "bottom.gif", "fill.gif"});
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Images
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_getSmallAlignmentImage() throws Exception {
+		parse(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		refresh();
+		TableWrapLayoutInfo layout = getObjectByName("layout");
+		ControlInfo button = getObjectByName("button");
+		//
+		TableWrapDataInfo layoutData = layout.getTableWrapData(button);
+		check_getSmallAlignmentImage(layoutData, true, new int[]{
+				TableWrapData.LEFT,
+				TableWrapData.CENTER,
+				TableWrapData.RIGHT,
+				TableWrapData.FILL}, new String[]{"left.gif", "center.gif", "right.gif", "fill.gif"});
+		check_getSmallAlignmentImage(layoutData, false, new int[]{
+				TableWrapData.TOP,
+				TableWrapData.MIDDLE,
+				TableWrapData.BOTTOM,
+				TableWrapData.FILL}, new String[]{"top.gif", "middle.gif", "bottom.gif", "fill.gif"});
+	}
 
-  private static void check_getSmallAlignmentImage(TableWrapDataInfo layoutData,
-      boolean horizontal,
-      int[] alignments,
-      String[] paths) throws Exception {
-    for (int i = 0; i < alignments.length; i++) {
-      int alignment = alignments[i];
-      Image expectedImage = TableWrapLayoutImages.getImage((horizontal ? "/h/" : "/v/") + paths[i]);
-      if (horizontal) {
-        layoutData.setHorizontalAlignment(alignment);
-      } else {
-        layoutData.setVerticalAlignment(alignment);
-      }
-      assertSame(expectedImage, layoutData.getSmallAlignmentImage(horizontal));
-    }
-  }
+	private static void check_getSmallAlignmentImage(TableWrapDataInfo layoutData,
+			boolean horizontal,
+			int[] alignments,
+			String[] paths) throws Exception {
+		for (int i = 0; i < alignments.length; i++) {
+			int alignment = alignments[i];
+			Image expectedImage = TableWrapLayoutImages.getImage((horizontal ? "/h/" : "/v/") + paths[i]);
+			if (horizontal) {
+				layoutData.setHorizontalAlignment(alignment);
+			} else {
+				layoutData.setVerticalAlignment(alignment);
+			}
+			assertSame(expectedImage, layoutData.getSmallAlignmentImage(horizontal));
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Horizontal
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link TableWrapDataInfo#setHorizontalAlignment(int)}.
-   */
-  public void test_horizontalAlignment() throws Exception {
-    parse(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    refresh();
-    TableWrapLayoutInfo layout = getObjectByName("layout");
-    ControlInfo button = getObjectByName("button");
-    TableWrapDataInfo tableWrapData = layout.getTableWrapData(button);
-    // initial state
-    assertEquals(TableWrapData.LEFT, tableWrapData.getHorizontalAlignment());
-    assertFalse(tableWrapData.getHorizontalGrab());
-    // set CENTER
-    tableWrapData.setHorizontalAlignment(TableWrapData.CENTER);
-    assertEquals(TableWrapData.CENTER, tableWrapData.getHorizontalAlignment());
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'>",
-        "    <Button.layoutData>",
-        "      <f:TableWrapData align='(org.eclipse.ui.forms.widgets.TableWrapData).CENTER'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "</Shell>");
-    // set RIGHT
-    tableWrapData.setHorizontalAlignment(TableWrapData.RIGHT);
-    assertEquals(TableWrapData.RIGHT, tableWrapData.getHorizontalAlignment());
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'>",
-        "    <Button.layoutData>",
-        "      <f:TableWrapData align='(org.eclipse.ui.forms.widgets.TableWrapData).RIGHT'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "</Shell>");
-    // set FILL
-    tableWrapData.setHorizontalAlignment(TableWrapData.FILL);
-    assertEquals(TableWrapData.FILL, tableWrapData.getHorizontalAlignment());
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'>",
-        "    <Button.layoutData>",
-        "      <f:TableWrapData align='(org.eclipse.ui.forms.widgets.TableWrapData).FILL'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "</Shell>");
-    // set LEFT
-    tableWrapData.setHorizontalAlignment(TableWrapData.LEFT);
-    assertEquals(TableWrapData.LEFT, tableWrapData.getHorizontalAlignment());
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Horizontal
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link TableWrapDataInfo#setHorizontalAlignment(int)}.
+	 */
+	public void test_horizontalAlignment() throws Exception {
+		parse(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		refresh();
+		TableWrapLayoutInfo layout = getObjectByName("layout");
+		ControlInfo button = getObjectByName("button");
+		TableWrapDataInfo tableWrapData = layout.getTableWrapData(button);
+		// initial state
+		assertEquals(TableWrapData.LEFT, tableWrapData.getHorizontalAlignment());
+		assertFalse(tableWrapData.getHorizontalGrab());
+		// set CENTER
+		tableWrapData.setHorizontalAlignment(TableWrapData.CENTER);
+		assertEquals(TableWrapData.CENTER, tableWrapData.getHorizontalAlignment());
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'>",
+				"    <Button.layoutData>",
+				"      <f:TableWrapData align='(org.eclipse.ui.forms.widgets.TableWrapData).CENTER'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"</Shell>");
+		// set RIGHT
+		tableWrapData.setHorizontalAlignment(TableWrapData.RIGHT);
+		assertEquals(TableWrapData.RIGHT, tableWrapData.getHorizontalAlignment());
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'>",
+				"    <Button.layoutData>",
+				"      <f:TableWrapData align='(org.eclipse.ui.forms.widgets.TableWrapData).RIGHT'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"</Shell>");
+		// set FILL
+		tableWrapData.setHorizontalAlignment(TableWrapData.FILL);
+		assertEquals(TableWrapData.FILL, tableWrapData.getHorizontalAlignment());
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'>",
+				"    <Button.layoutData>",
+				"      <f:TableWrapData align='(org.eclipse.ui.forms.widgets.TableWrapData).FILL'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"</Shell>");
+		// set LEFT
+		tableWrapData.setHorizontalAlignment(TableWrapData.LEFT);
+		assertEquals(TableWrapData.LEFT, tableWrapData.getHorizontalAlignment());
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+	}
 
-  /**
-   * Sets horizontal grab in {@link TableWrapData#grabHorizontal} field.
-   */
-  public void test_horizontalGrab() throws Exception {
-    parse(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    refresh();
-    TableWrapLayoutInfo layout = getObjectByName("layout");
-    ControlInfo button = getObjectByName("button");
-    TableWrapDataInfo tableWrapData = layout.getTableWrapData(button);
-    // initial state
-    assertFalse(tableWrapData.getHorizontalGrab());
-    // grab := true
-    tableWrapData.setHorizontalGrab(true);
-    assertTrue(tableWrapData.getHorizontalGrab());
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'>",
-        "    <Button.layoutData>",
-        "      <f:TableWrapData grabHorizontal='true'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "</Shell>");
-    // grab := false
-    tableWrapData.setHorizontalGrab(false);
-    assertFalse(tableWrapData.getHorizontalGrab());
-    assertXML(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-  }
+	/**
+	 * Sets horizontal grab in {@link TableWrapData#grabHorizontal} field.
+	 */
+	public void test_horizontalGrab() throws Exception {
+		parse(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		refresh();
+		TableWrapLayoutInfo layout = getObjectByName("layout");
+		ControlInfo button = getObjectByName("button");
+		TableWrapDataInfo tableWrapData = layout.getTableWrapData(button);
+		// initial state
+		assertFalse(tableWrapData.getHorizontalGrab());
+		// grab := true
+		tableWrapData.setHorizontalGrab(true);
+		assertTrue(tableWrapData.getHorizontalGrab());
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'>",
+				"    <Button.layoutData>",
+				"      <f:TableWrapData grabHorizontal='true'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"</Shell>");
+		// grab := false
+		tableWrapData.setHorizontalGrab(false);
+		assertFalse(tableWrapData.getHorizontalGrab());
+		assertXML(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+	}
 
-  /**
-   * Sets horizontal span in {@link TableWrapData} constructor.
-   */
-  public void test_horizontalSpan() throws Exception {
-    parse(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    refresh();
-    TableWrapLayoutInfo layout = getObjectByName("layout");
-    ControlInfo button = getObjectByName("button");
-    TableWrapDataInfo tableWrapData = layout.getTableWrapData(button);
-    // initial state
-    assertEquals(1, tableWrapData.getHorizontalSpan());
-    // horizontalSpan := 2
-    tableWrapData.setHorizontalSpan(2);
-    assertEquals(2, tableWrapData.getHorizontalSpan());
-    assertXML(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'>",
-        "    <Button.layoutData>",
-        "      <f:TableWrapData colspan='2'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "</Shell>");
-    // horizontalSpan := default
-    tableWrapData.getPropertyByTitle("colspan").setValue(Property.UNKNOWN_VALUE);
-    assertXML(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    {
-      tableWrapData = layout.getTableWrapData(button);
-      assertEquals(1, tableWrapData.getHorizontalSpan());
-    }
-  }
+	/**
+	 * Sets horizontal span in {@link TableWrapData} constructor.
+	 */
+	public void test_horizontalSpan() throws Exception {
+		parse(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		refresh();
+		TableWrapLayoutInfo layout = getObjectByName("layout");
+		ControlInfo button = getObjectByName("button");
+		TableWrapDataInfo tableWrapData = layout.getTableWrapData(button);
+		// initial state
+		assertEquals(1, tableWrapData.getHorizontalSpan());
+		// horizontalSpan := 2
+		tableWrapData.setHorizontalSpan(2);
+		assertEquals(2, tableWrapData.getHorizontalSpan());
+		assertXML(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'>",
+				"    <Button.layoutData>",
+				"      <f:TableWrapData colspan='2'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"</Shell>");
+		// horizontalSpan := default
+		tableWrapData.getPropertyByTitle("colspan").setValue(Property.UNKNOWN_VALUE);
+		assertXML(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		{
+			tableWrapData = layout.getTableWrapData(button);
+			assertEquals(1, tableWrapData.getHorizontalSpan());
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Vertical
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets vertical alignment in {@link TableWrapData} constructor.
-   */
-  public void test_verticalAlignment_1() throws Exception {
-    parse(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    refresh();
-    TableWrapLayoutInfo layout = getObjectByName("layout");
-    ControlInfo button = getObjectByName("button");
-    TableWrapDataInfo tableWrapData = layout.getTableWrapData(button);
-    // initial state
-    assertEquals(TableWrapData.TOP, tableWrapData.getVerticalAlignment());
-    assertFalse(tableWrapData.getVerticalGrab());
-    // set MIDDLE
-    tableWrapData.setVerticalAlignment(TableWrapData.MIDDLE);
-    assertEquals(TableWrapData.MIDDLE, tableWrapData.getVerticalAlignment());
-    assertXML(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'>",
-        "    <Button.layoutData>",
-        "      <f:TableWrapData valign='(org.eclipse.ui.forms.widgets.TableWrapData).MIDDLE'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "</Shell>");
-    // set BOTTOM
-    tableWrapData.setVerticalAlignment(TableWrapData.BOTTOM);
-    assertEquals(TableWrapData.BOTTOM, tableWrapData.getVerticalAlignment());
-    assertXML(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'>",
-        "    <Button.layoutData>",
-        "      <f:TableWrapData valign='(org.eclipse.ui.forms.widgets.TableWrapData).BOTTOM'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "</Shell>");
-    // set FILL
-    tableWrapData.setVerticalAlignment(TableWrapData.FILL);
-    assertEquals(TableWrapData.FILL, tableWrapData.getVerticalAlignment());
-    assertXML(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'>",
-        "    <Button.layoutData>",
-        "      <f:TableWrapData valign='(org.eclipse.ui.forms.widgets.TableWrapData).FILL'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "</Shell>");
-    // set TOP
-    tableWrapData.setVerticalAlignment(TableWrapData.TOP);
-    assertEquals(TableWrapData.TOP, tableWrapData.getVerticalAlignment());
-    assertXML(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Vertical
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets vertical alignment in {@link TableWrapData} constructor.
+	 */
+	public void test_verticalAlignment_1() throws Exception {
+		parse(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		refresh();
+		TableWrapLayoutInfo layout = getObjectByName("layout");
+		ControlInfo button = getObjectByName("button");
+		TableWrapDataInfo tableWrapData = layout.getTableWrapData(button);
+		// initial state
+		assertEquals(TableWrapData.TOP, tableWrapData.getVerticalAlignment());
+		assertFalse(tableWrapData.getVerticalGrab());
+		// set MIDDLE
+		tableWrapData.setVerticalAlignment(TableWrapData.MIDDLE);
+		assertEquals(TableWrapData.MIDDLE, tableWrapData.getVerticalAlignment());
+		assertXML(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'>",
+				"    <Button.layoutData>",
+				"      <f:TableWrapData valign='(org.eclipse.ui.forms.widgets.TableWrapData).MIDDLE'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"</Shell>");
+		// set BOTTOM
+		tableWrapData.setVerticalAlignment(TableWrapData.BOTTOM);
+		assertEquals(TableWrapData.BOTTOM, tableWrapData.getVerticalAlignment());
+		assertXML(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'>",
+				"    <Button.layoutData>",
+				"      <f:TableWrapData valign='(org.eclipse.ui.forms.widgets.TableWrapData).BOTTOM'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"</Shell>");
+		// set FILL
+		tableWrapData.setVerticalAlignment(TableWrapData.FILL);
+		assertEquals(TableWrapData.FILL, tableWrapData.getVerticalAlignment());
+		assertXML(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'>",
+				"    <Button.layoutData>",
+				"      <f:TableWrapData valign='(org.eclipse.ui.forms.widgets.TableWrapData).FILL'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"</Shell>");
+		// set TOP
+		tableWrapData.setVerticalAlignment(TableWrapData.TOP);
+		assertEquals(TableWrapData.TOP, tableWrapData.getVerticalAlignment());
+		assertXML(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+	}
 
-  /**
-   * Sets vertical grab in {@link TableWrapData#grabVertical} field.
-   */
-  public void test_verticalGrab() throws Exception {
-    parse(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    refresh();
-    TableWrapLayoutInfo layout = getObjectByName("layout");
-    ControlInfo button = getObjectByName("button");
-    TableWrapDataInfo tableWrapData = layout.getTableWrapData(button);
-    // initial state
-    assertFalse(tableWrapData.getVerticalGrab());
-    // grab := true
-    tableWrapData.setVerticalGrab(true);
-    assertTrue(tableWrapData.getVerticalGrab());
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'>",
-        "    <Button.layoutData>",
-        "      <f:TableWrapData grabVertical='true'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "</Shell>");
-    // grab := false
-    tableWrapData.setVerticalGrab(false);
-    assertFalse(tableWrapData.getVerticalGrab());
-    assertXML(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-  }
+	/**
+	 * Sets vertical grab in {@link TableWrapData#grabVertical} field.
+	 */
+	public void test_verticalGrab() throws Exception {
+		parse(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		refresh();
+		TableWrapLayoutInfo layout = getObjectByName("layout");
+		ControlInfo button = getObjectByName("button");
+		TableWrapDataInfo tableWrapData = layout.getTableWrapData(button);
+		// initial state
+		assertFalse(tableWrapData.getVerticalGrab());
+		// grab := true
+		tableWrapData.setVerticalGrab(true);
+		assertTrue(tableWrapData.getVerticalGrab());
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'>",
+				"    <Button.layoutData>",
+				"      <f:TableWrapData grabVertical='true'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"</Shell>");
+		// grab := false
+		tableWrapData.setVerticalGrab(false);
+		assertFalse(tableWrapData.getVerticalGrab());
+		assertXML(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+	}
 
-  /**
-   * Sets vertical span in {@link TableWrapData} constructor.
-   */
-  public void test_verticalSpan() throws Exception {
-    parse(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'/>",
-        "  <Button/>",
-        "  <Button/>",
-        "</Shell>");
-    refresh();
-    TableWrapLayoutInfo layout = getObjectByName("layout");
-    ControlInfo button = getObjectByName("button");
-    TableWrapDataInfo tableWrapData = layout.getTableWrapData(button);
-    // initial state
-    assertEquals(1, tableWrapData.getVerticalSpan());
-    // verticalSpan := 2
-    tableWrapData.setVerticalSpan(2);
-    assertEquals(2, tableWrapData.getVerticalSpan());
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'>",
-        "    <Button.layoutData>",
-        "      <f:TableWrapData rowspan='2'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "  <Button/>",
-        "  <Button/>",
-        "</Shell>");
-    // verticalSpan := default
-    tableWrapData.getPropertyByTitle("rowspan").setValue(Property.UNKNOWN_VALUE);
-    assertXML(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'/>",
-        "  <Button/>",
-        "  <Button/>",
-        "</Shell>");
-  }
+	/**
+	 * Sets vertical span in {@link TableWrapData} constructor.
+	 */
+	public void test_verticalSpan() throws Exception {
+		parse(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'/>",
+				"  <Button/>",
+				"  <Button/>",
+				"</Shell>");
+		refresh();
+		TableWrapLayoutInfo layout = getObjectByName("layout");
+		ControlInfo button = getObjectByName("button");
+		TableWrapDataInfo tableWrapData = layout.getTableWrapData(button);
+		// initial state
+		assertEquals(1, tableWrapData.getVerticalSpan());
+		// verticalSpan := 2
+		tableWrapData.setVerticalSpan(2);
+		assertEquals(2, tableWrapData.getVerticalSpan());
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'>",
+				"    <Button.layoutData>",
+				"      <f:TableWrapData rowspan='2'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"  <Button/>",
+				"  <Button/>",
+				"</Shell>");
+		// verticalSpan := default
+		tableWrapData.getPropertyByTitle("rowspan").setValue(Property.UNKNOWN_VALUE);
+		assertXML(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'/>",
+				"  <Button/>",
+				"  <Button/>",
+				"</Shell>");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Context menu
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_contextMenu_horizontal() throws Exception {
-    parse(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    refresh();
-    ControlInfo button = getObjectByName("button");
-    // prepare context menu
-    IMenuManager manager = getContextMenu(button);
-    // check actions
-    IMenuManager manager2 = findChildMenuManager(manager, "Horizontal alignment");
-    assertNotNull(manager2);
-    assertNotNull(findChildAction(manager2, "&Grab excess space"));
-    assertNotNull(findChildAction(manager2, "&Left"));
-    assertNotNull(findChildAction(manager2, "&Center"));
-    assertNotNull(findChildAction(manager2, "&Right"));
-    assertNotNull(findChildAction(manager2, "&Fill"));
-    // check "check" state
-    assertTrue(findChildAction(manager2, "&Left").isChecked());
-    assertFalse(findChildAction(manager2, "&Right").isChecked());
-    // use "Right" action
-    {
-      IAction action = findChildAction(manager2, "&Right");
-      action.setChecked(true);
-      action.run();
-      assertXML(
-          "// filler filler filler filler filler",
-          "// filler filler filler filler filler",
-          "<Shell>",
-          "  <Shell.layout>",
-          "    <f:TableWrapLayout wbp:name='layout'/>",
-          "  </Shell.layout>",
-          "  <Button wbp:name='button'>",
-          "    <Button.layoutData>",
-          "      <f:TableWrapData align='(org.eclipse.ui.forms.widgets.TableWrapData).RIGHT'/>",
-          "    </Button.layoutData>",
-          "  </Button>",
-          "</Shell>");
-    }
-    // use "Grab action"
-    {
-      IAction action = findChildAction(manager2, "&Grab excess space");
-      action.run();
-      assertXML(
-          "// filler filler filler filler filler",
-          "// filler filler filler filler filler",
-          "<Shell>",
-          "  <Shell.layout>",
-          "    <f:TableWrapLayout wbp:name='layout'/>",
-          "  </Shell.layout>",
-          "  <Button wbp:name='button'>",
-          "    <Button.layoutData>",
-          "      <f:TableWrapData align='(org.eclipse.ui.forms.widgets.TableWrapData).RIGHT'"
-              + " grabHorizontal='true'/>",
-          "    </Button.layoutData>",
-          "  </Button>",
-          "</Shell>");
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Context menu
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_contextMenu_horizontal() throws Exception {
+		parse(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		refresh();
+		ControlInfo button = getObjectByName("button");
+		// prepare context menu
+		IMenuManager manager = getContextMenu(button);
+		// check actions
+		IMenuManager manager2 = findChildMenuManager(manager, "Horizontal alignment");
+		assertNotNull(manager2);
+		assertNotNull(findChildAction(manager2, "&Grab excess space"));
+		assertNotNull(findChildAction(manager2, "&Left"));
+		assertNotNull(findChildAction(manager2, "&Center"));
+		assertNotNull(findChildAction(manager2, "&Right"));
+		assertNotNull(findChildAction(manager2, "&Fill"));
+		// check "check" state
+		assertTrue(findChildAction(manager2, "&Left").isChecked());
+		assertFalse(findChildAction(manager2, "&Right").isChecked());
+		// use "Right" action
+		{
+			IAction action = findChildAction(manager2, "&Right");
+			action.setChecked(true);
+			action.run();
+			assertXML(
+					"// filler filler filler filler filler",
+					"// filler filler filler filler filler",
+					"<Shell>",
+					"  <Shell.layout>",
+					"    <f:TableWrapLayout wbp:name='layout'/>",
+					"  </Shell.layout>",
+					"  <Button wbp:name='button'>",
+					"    <Button.layoutData>",
+					"      <f:TableWrapData align='(org.eclipse.ui.forms.widgets.TableWrapData).RIGHT'/>",
+					"    </Button.layoutData>",
+					"  </Button>",
+					"</Shell>");
+		}
+		// use "Grab action"
+		{
+			IAction action = findChildAction(manager2, "&Grab excess space");
+			action.run();
+			assertXML(
+					"// filler filler filler filler filler",
+					"// filler filler filler filler filler",
+					"<Shell>",
+					"  <Shell.layout>",
+					"    <f:TableWrapLayout wbp:name='layout'/>",
+					"  </Shell.layout>",
+					"  <Button wbp:name='button'>",
+					"    <Button.layoutData>",
+					"      <f:TableWrapData align='(org.eclipse.ui.forms.widgets.TableWrapData).RIGHT'"
+							+ " grabHorizontal='true'/>",
+							"    </Button.layoutData>",
+							"  </Button>",
+					"</Shell>");
+		}
+	}
 
-  public void test_contextMenu_vertical() throws Exception {
-    parse(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    refresh();
-    ControlInfo button = getObjectByName("button");
-    // prepare context menu
-    IMenuManager manager = getContextMenu(button);
-    // check actions
-    IMenuManager manager2 = findChildMenuManager(manager, "Vertical alignment");
-    assertNotNull(manager2);
-    assertNotNull(findChildAction(manager2, "&Grab excess space"));
-    assertNotNull(findChildAction(manager2, "&Top"));
-    assertNotNull(findChildAction(manager2, "&Middle"));
-    assertNotNull(findChildAction(manager2, "&Bottom"));
-    assertNotNull(findChildAction(manager2, "&Fill"));
-    // use "Bottom" action
-    {
-      IAction action = findChildAction(manager2, "&Bottom");
-      action.setChecked(true);
-      action.run();
-      assertXML(
-          "// filler filler filler filler filler",
-          "// filler filler filler filler filler",
-          "<Shell>",
-          "  <Shell.layout>",
-          "    <f:TableWrapLayout wbp:name='layout'/>",
-          "  </Shell.layout>",
-          "  <Button wbp:name='button'>",
-          "    <Button.layoutData>",
-          "      <f:TableWrapData valign='(org.eclipse.ui.forms.widgets.TableWrapData).BOTTOM'/>",
-          "    </Button.layoutData>",
-          "  </Button>",
-          "</Shell>");
-    }
-    // use "Grab action"
-    {
-      IAction action = findChildAction(manager2, "&Grab excess space");
-      action.run();
-      assertXML(
-          "// filler filler filler filler filler",
-          "// filler filler filler filler filler",
-          "<Shell>",
-          "  <Shell.layout>",
-          "    <f:TableWrapLayout wbp:name='layout'/>",
-          "  </Shell.layout>",
-          "  <Button wbp:name='button'>",
-          "    <Button.layoutData>",
-          "      <f:TableWrapData valign='(org.eclipse.ui.forms.widgets.TableWrapData).BOTTOM'"
-              + " grabVertical='true'/>",
-          "    </Button.layoutData>",
-          "  </Button>",
-          "</Shell>");
-    }
-  }
+	public void test_contextMenu_vertical() throws Exception {
+		parse(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		refresh();
+		ControlInfo button = getObjectByName("button");
+		// prepare context menu
+		IMenuManager manager = getContextMenu(button);
+		// check actions
+		IMenuManager manager2 = findChildMenuManager(manager, "Vertical alignment");
+		assertNotNull(manager2);
+		assertNotNull(findChildAction(manager2, "&Grab excess space"));
+		assertNotNull(findChildAction(manager2, "&Top"));
+		assertNotNull(findChildAction(manager2, "&Middle"));
+		assertNotNull(findChildAction(manager2, "&Bottom"));
+		assertNotNull(findChildAction(manager2, "&Fill"));
+		// use "Bottom" action
+		{
+			IAction action = findChildAction(manager2, "&Bottom");
+			action.setChecked(true);
+			action.run();
+			assertXML(
+					"// filler filler filler filler filler",
+					"// filler filler filler filler filler",
+					"<Shell>",
+					"  <Shell.layout>",
+					"    <f:TableWrapLayout wbp:name='layout'/>",
+					"  </Shell.layout>",
+					"  <Button wbp:name='button'>",
+					"    <Button.layoutData>",
+					"      <f:TableWrapData valign='(org.eclipse.ui.forms.widgets.TableWrapData).BOTTOM'/>",
+					"    </Button.layoutData>",
+					"  </Button>",
+					"</Shell>");
+		}
+		// use "Grab action"
+		{
+			IAction action = findChildAction(manager2, "&Grab excess space");
+			action.run();
+			assertXML(
+					"// filler filler filler filler filler",
+					"// filler filler filler filler filler",
+					"<Shell>",
+					"  <Shell.layout>",
+					"    <f:TableWrapLayout wbp:name='layout'/>",
+					"  </Shell.layout>",
+					"  <Button wbp:name='button'>",
+					"    <Button.layoutData>",
+					"      <f:TableWrapData valign='(org.eclipse.ui.forms.widgets.TableWrapData).BOTTOM'"
+							+ " grabVertical='true'/>",
+							"    </Button.layoutData>",
+							"  </Button>",
+					"</Shell>");
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/forms/table/TableWrapLayoutConverterTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/forms/table/TableWrapLayoutConverterTest.java
index 749b83f2d..1863b15d1 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/forms/table/TableWrapLayoutConverterTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/forms/table/TableWrapLayoutConverterTest.java
@@ -29,280 +29,280 @@
  * @author scheglov_ke
  */
 public class TableWrapLayoutConverterTest extends XwtModelTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Source
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getTestSource_namespaces() {
-    return super.getTestSource_namespaces()
-        + " xmlns:f='clr-namespace:org.eclipse.ui.forms.widgets'";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Source
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getTestSource_namespaces() {
+		return super.getTestSource_namespaces()
+				+ " xmlns:f='clr-namespace:org.eclipse.ui.forms.widgets'";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * No controls.
-   */
-  public void test_empty() throws Exception {
-    CompositeInfo shell = parse("<Shell/>");
-    setGridLayout(shell, new String[]{
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout/>",
-        "  </Shell.layout>",
-        "</Shell>"}, new Rectangle[]{});
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * No controls.
+	 */
+	public void test_empty() throws Exception {
+		CompositeInfo shell = parse("<Shell/>");
+		setGridLayout(shell, new String[]{
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout/>",
+				"  </Shell.layout>",
+		"</Shell>"}, new Rectangle[]{});
+	}
 
-  /**
-   * Control in single column, in normal order.
-   */
-  public void test_singleColumn_normalOrder() throws Exception {
-    CompositeInfo shell =
-        parse(
-            "<Shell>",
-            "  <Button text='0' bounds='10, 10, 100, 20'/>",
-            "  <Button text='1' bounds='20, 40, 100, 20'/>",
-            "</Shell>");
-    setGridLayout(shell, new String[]{
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout/>",
-        "  </Shell.layout>",
-        "  <Button text='0'/>",
-        "  <Button text='1'/>",
-        "</Shell>"}, new Rectangle[]{new Rectangle(0, 0, 1, 1), new Rectangle(0, 1, 1, 1)});
-  }
+	/**
+	 * Control in single column, in normal order.
+	 */
+	public void test_singleColumn_normalOrder() throws Exception {
+		CompositeInfo shell =
+				parse(
+						"<Shell>",
+						"  <Button text='0' bounds='10, 10, 100, 20'/>",
+						"  <Button text='1' bounds='20, 40, 100, 20'/>",
+						"</Shell>");
+		setGridLayout(shell, new String[]{
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout/>",
+				"  </Shell.layout>",
+				"  <Button text='0'/>",
+				"  <Button text='1'/>",
+		"</Shell>"}, new Rectangle[]{new Rectangle(0, 0, 1, 1), new Rectangle(0, 1, 1, 1)});
+	}
 
-  /**
-   * Control in single column, in reverse order.
-   */
-  public void test_singleColumn_reverseOrder() throws Exception {
-    CompositeInfo shell =
-        parse(
-            "<Shell>",
-            "  <Button text='1' bounds='20, 40, 100, 20'/>",
-            "  <Button text='0' bounds='10, 10, 100, 20'/>",
-            "</Shell>");
-    setGridLayout(shell, new String[]{
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout/>",
-        "  </Shell.layout>",
-        "  <Button text='0'/>",
-        "  <Button text='1'/>",
-        "</Shell>"}, new Rectangle[]{new Rectangle(0, 0, 1, 1), new Rectangle(0, 1, 1, 1)});
-  }
+	/**
+	 * Control in single column, in reverse order.
+	 */
+	public void test_singleColumn_reverseOrder() throws Exception {
+		CompositeInfo shell =
+				parse(
+						"<Shell>",
+						"  <Button text='1' bounds='20, 40, 100, 20'/>",
+						"  <Button text='0' bounds='10, 10, 100, 20'/>",
+						"</Shell>");
+		setGridLayout(shell, new String[]{
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout/>",
+				"  </Shell.layout>",
+				"  <Button text='0'/>",
+				"  <Button text='1'/>",
+		"</Shell>"}, new Rectangle[]{new Rectangle(0, 0, 1, 1), new Rectangle(0, 1, 1, 1)});
+	}
 
-  /**
-   * Control in two columns, no fillers.
-   */
-  public void test_twoRows_noFillers() throws Exception {
-    CompositeInfo shell =
-        parse(
-            "<Shell>",
-            "  <Button text='0' bounds='10, 10, 100, 20'/>",
-            "  <Button text='1' bounds='120, 15, 100, 20'/>",
-            "</Shell>");
-    setGridLayout(shell, new String[]{
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button text='0'/>",
-        "  <Button text='1'/>",
-        "</Shell>"}, new Rectangle[]{new Rectangle(0, 0, 1, 1), new Rectangle(1, 0, 1, 1)});
-  }
+	/**
+	 * Control in two columns, no fillers.
+	 */
+	public void test_twoRows_noFillers() throws Exception {
+		CompositeInfo shell =
+				parse(
+						"<Shell>",
+						"  <Button text='0' bounds='10, 10, 100, 20'/>",
+						"  <Button text='1' bounds='120, 15, 100, 20'/>",
+						"</Shell>");
+		setGridLayout(shell, new String[]{
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button text='0'/>",
+				"  <Button text='1'/>",
+		"</Shell>"}, new Rectangle[]{new Rectangle(0, 0, 1, 1), new Rectangle(1, 0, 1, 1)});
+	}
 
-  /**
-   * Control in two columns/rows, on diagonal, with fillers.
-   */
-  public void test_twoRows_withFillers() throws Exception {
-    CompositeInfo shell =
-        parse(
-            "<Shell>",
-            "  <Button text='0' bounds='10, 10, 100, 20'/>",
-            "  <Button text='1' bounds='120, 40, 100, 20'/>",
-            "</Shell>");
-    setGridLayout(shell, new String[]{
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button text='0'/>",
-        "  <Label/>",
-        "  <Label/>",
-        "  <Button text='1'/>",
-        "</Shell>"}, new Rectangle[]{new Rectangle(0, 0, 1, 1), new Rectangle(1, 1, 1, 1)});
-  }
+	/**
+	 * Control in two columns/rows, on diagonal, with fillers.
+	 */
+	public void test_twoRows_withFillers() throws Exception {
+		CompositeInfo shell =
+				parse(
+						"<Shell>",
+						"  <Button text='0' bounds='10, 10, 100, 20'/>",
+						"  <Button text='1' bounds='120, 40, 100, 20'/>",
+						"</Shell>");
+		setGridLayout(shell, new String[]{
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button text='0'/>",
+				"  <Label/>",
+				"  <Label/>",
+				"  <Button text='1'/>",
+		"</Shell>"}, new Rectangle[]{new Rectangle(0, 0, 1, 1), new Rectangle(1, 1, 1, 1)});
+	}
 
-  /**
-   * Three controls, one spanned horizontally.
-   */
-  public void test_spanHorizontal() throws Exception {
-    CompositeInfo shell =
-        parse(
-            "<Shell>",
-            "  <Button text='0' bounds='10, 10, 10, 10'/>",
-            "  <Button text='1' bounds='30, 10, 10, 10'/>",
-            "  <Button text='2' bounds='10, 30, 30, 10'/>",
-            "</Shell>");
-    setGridLayout(shell, new String[]{
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button text='0'/>",
-        "  <Button text='1'/>",
-        "  <Button text='2'>",
-        "    <Button.layoutData>",
-        "      <f:TableWrapData colspan='2'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "</Shell>"}, new Rectangle[]{
-        new Rectangle(0, 0, 1, 1),
-        new Rectangle(1, 0, 1, 1),
-        new Rectangle(0, 1, 2, 1)});
-  }
+	/**
+	 * Three controls, one spanned horizontally.
+	 */
+	public void test_spanHorizontal() throws Exception {
+		CompositeInfo shell =
+				parse(
+						"<Shell>",
+						"  <Button text='0' bounds='10, 10, 10, 10'/>",
+						"  <Button text='1' bounds='30, 10, 10, 10'/>",
+						"  <Button text='2' bounds='10, 30, 30, 10'/>",
+						"</Shell>");
+		setGridLayout(shell, new String[]{
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button text='0'/>",
+				"  <Button text='1'/>",
+				"  <Button text='2'>",
+				"    <Button.layoutData>",
+				"      <f:TableWrapData colspan='2'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+		"</Shell>"}, new Rectangle[]{
+				new Rectangle(0, 0, 1, 1),
+				new Rectangle(1, 0, 1, 1),
+				new Rectangle(0, 1, 2, 1)});
+	}
 
-  /**
-   * Three controls, one spanned vertically.
-   */
-  public void test_spanVertical() throws Exception {
-    CompositeInfo shell =
-        parse(
-            "<Shell>",
-            "  <Button text='0' bounds='10, 10, 10, 10'/>",
-            "  <Button text='1' bounds='30, 10, 10, 30'/>",
-            "  <Button text='2' bounds='10, 30, 10, 10'/>",
-            "</Shell>");
-    setGridLayout(shell, new String[]{
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button text='0'/>",
-        "  <Button text='1'>",
-        "    <Button.layoutData>",
-        "      <f:TableWrapData rowspan='2'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "  <Button text='2'/>",
-        "</Shell>"}, new Rectangle[]{
-        new Rectangle(0, 0, 1, 1),
-        new Rectangle(1, 0, 1, 2),
-        new Rectangle(0, 1, 1, 1)});
-  }
+	/**
+	 * Three controls, one spanned vertically.
+	 */
+	public void test_spanVertical() throws Exception {
+		CompositeInfo shell =
+				parse(
+						"<Shell>",
+						"  <Button text='0' bounds='10, 10, 10, 10'/>",
+						"  <Button text='1' bounds='30, 10, 10, 30'/>",
+						"  <Button text='2' bounds='10, 30, 10, 10'/>",
+						"</Shell>");
+		setGridLayout(shell, new String[]{
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button text='0'/>",
+				"  <Button text='1'>",
+				"    <Button.layoutData>",
+				"      <f:TableWrapData rowspan='2'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"  <Button text='2'/>",
+		"</Shell>"}, new Rectangle[]{
+				new Rectangle(0, 0, 1, 1),
+				new Rectangle(1, 0, 1, 2),
+				new Rectangle(0, 1, 1, 1)});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Switching layouts
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test switching layouts from {@link GridLayout} to {@link TableWrapLayout}, and restore
-   * component positions & alignments.
-   */
-  public void _test_Switching_fromGridLayout() throws Exception {
-    CompositeInfo composite =
-        parse(
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <GridLayout wbp:name='layout' numColumns='3'/>",
-            "  </Shell.layout>",
-            "  <Button wbp:name='button_0'>",
-            "    <Button.layoutData>",
-            "      <GridData verticalAlignment='BOTTOM'/>",
-            "    </Button.layoutData>",
-            "  </Button>",
-            "  <Label/>",
-            "  <Label/>",
-            "  <Button wbp:name='button_1'>",
-            "    <Button.layoutData>",
-            "      <GridData horizontalSpan='2'/>",
-            "    </Button.layoutData>",
-            "  </Button>",
-            "  <Label/>",
-            "  <Label/>",
-            "  <Label/>",
-            "  <Button wbp:name='button_2'/>",
-            "</Shell>");
-    refresh();
-    // set TableWrapLayout
-    TableWrapLayoutInfo tableWrapLayout =
-        createObject("org.eclipse.ui.forms.widgets.TableWrapLayout");
-    composite.setLayout(tableWrapLayout);
-    printEditorLinesSource();
-    assertXML();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Switching layouts
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test switching layouts from {@link GridLayout} to {@link TableWrapLayout}, and restore
+	 * component positions & alignments.
+	 */
+	public void _test_Switching_fromGridLayout() throws Exception {
+		CompositeInfo composite =
+				parse(
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <GridLayout wbp:name='layout' numColumns='3'/>",
+						"  </Shell.layout>",
+						"  <Button wbp:name='button_0'>",
+						"    <Button.layoutData>",
+						"      <GridData verticalAlignment='BOTTOM'/>",
+						"    </Button.layoutData>",
+						"  </Button>",
+						"  <Label/>",
+						"  <Label/>",
+						"  <Button wbp:name='button_1'>",
+						"    <Button.layoutData>",
+						"      <GridData horizontalSpan='2'/>",
+						"    </Button.layoutData>",
+						"  </Button>",
+						"  <Label/>",
+						"  <Label/>",
+						"  <Label/>",
+						"  <Button wbp:name='button_2'/>",
+						"</Shell>");
+		refresh();
+		// set TableWrapLayout
+		TableWrapLayoutInfo tableWrapLayout =
+				createObject("org.eclipse.ui.forms.widgets.TableWrapLayout");
+		composite.setLayout(tableWrapLayout);
+		printEditorLinesSource();
+		assertXML();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets the {@link GridLayout} for given {@link CompositeInfo}.
-   */
-  private void setGridLayout(CompositeInfo composite, String[] expectedLines, Rectangle[] cells)
-      throws Exception {
-    TableWrapLayoutInfo layout = setGridLayout(composite, expectedLines);
-    // check cells for control's
-    int cellIndex = 0;
-    for (ControlInfo control : composite.getChildrenControls()) {
-      if (!layout.isFiller(control)) {
-        TableWrapDataInfo gridData = (TableWrapDataInfo) LayoutInfo.getLayoutData(control);
-        int x = getInt(gridData, "x");
-        int y = getInt(gridData, "y");
-        int width = getInt(gridData, "width");
-        int height = getInt(gridData, "height");
-        assertEquals(cells[cellIndex++], new Rectangle(x, y, width, height));
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets the {@link GridLayout} for given {@link CompositeInfo}.
+	 */
+	private void setGridLayout(CompositeInfo composite, String[] expectedLines, Rectangle[] cells)
+			throws Exception {
+		TableWrapLayoutInfo layout = setGridLayout(composite, expectedLines);
+		// check cells for control's
+		int cellIndex = 0;
+		for (ControlInfo control : composite.getChildrenControls()) {
+			if (!layout.isFiller(control)) {
+				TableWrapDataInfo gridData = (TableWrapDataInfo) LayoutInfo.getLayoutData(control);
+				int x = getInt(gridData, "x");
+				int y = getInt(gridData, "y");
+				int width = getInt(gridData, "width");
+				int height = getInt(gridData, "height");
+				assertEquals(cells[cellIndex++], new Rectangle(x, y, width, height));
+			}
+		}
+	}
 
-  private TableWrapLayoutInfo setGridLayout(CompositeInfo composite, String[] expectedLines)
-      throws Exception {
-    composite.getRoot().refresh();
-    // set GridLayout
-    TableWrapLayoutInfo gridLayout = createObject("org.eclipse.ui.forms.widgets.TableWrapLayout");
-    composite.setLayout(gridLayout);
-    // check source
-    assertXML(expectedLines);
-    return gridLayout;
-  }
+	private TableWrapLayoutInfo setGridLayout(CompositeInfo composite, String[] expectedLines)
+			throws Exception {
+		composite.getRoot().refresh();
+		// set GridLayout
+		TableWrapLayoutInfo gridLayout = createObject("org.eclipse.ui.forms.widgets.TableWrapLayout");
+		composite.setLayout(gridLayout);
+		// check source
+		assertXML(expectedLines);
+		return gridLayout;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the <code>int</code> value of field with given name.
-   */
-  private static int getInt(TableWrapDataInfo layoutData, String fieldName) throws Exception {
-    return ReflectionUtils.getFieldInt(layoutData, fieldName);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the <code>int</code> value of field with given name.
+	 */
+	private static int getInt(TableWrapDataInfo layoutData, String fieldName) throws Exception {
+		return ReflectionUtils.getFieldInt(layoutData, fieldName);
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/forms/table/TableWrapLayoutGefTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/forms/table/TableWrapLayoutGefTest.java
index c6f1b31f3..2d9af2d0e 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/forms/table/TableWrapLayoutGefTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/forms/table/TableWrapLayoutGefTest.java
@@ -27,465 +27,465 @@
  * @author scheglov_ke
  */
 public class TableWrapLayoutGefTest extends XwtGefTest {
-  private static final int M = 5;
-  private static final int S = 5;
-  private static final int VS = 25;
-  private static final int VG = 5;
+	private static final int M = 5;
+	private static final int S = 5;
+	private static final int VS = 25;
+	private static final int VG = 5;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Source
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getTestSource_namespaces() {
-    return super.getTestSource_namespaces()
-        + " xmlns:f='clr-namespace:org.eclipse.ui.forms.widgets'";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Source
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getTestSource_namespaces() {
+		return super.getTestSource_namespaces()
+				+ " xmlns:f='clr-namespace:org.eclipse.ui.forms.widgets'";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * When we delete component of expandable/collapsible container, selection {@link Handle} receives
-   * ancestor resize event, so tries to update {@link Handle} location. However at this time
-   * component may be already deleted, so we can not ask for its cell/bounds.
-   */
-  public void test_deleteChildAndAncestorResize() throws Exception {
-    openEditor(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout/>",
-        "  </Shell.layout>",
-        "  <Composite>",
-        "    <Composite.layout>",
-        "      <f:TableWrapLayout/>",
-        "    </Composite.layout>",
-        "    <Label text='Label'/>",
-        "    <Button wbp:name='button' text='Button'/>",
-        "  </Composite>",
-        "</Shell>");
-    ControlInfo button = getObjectByName("button");
-    // select "button"
-    canvas.select(button);
-    waitEventLoop(0);
-    // delete
-    {
-      IAction deleteAction = getDeleteAction();
-      assertTrue(deleteAction.isEnabled());
-      deleteAction.run();
-      assertXML(
-          "// filler filler filler filler filler",
-          "<Shell>",
-          "  <Shell.layout>",
-          "    <f:TableWrapLayout/>",
-          "  </Shell.layout>",
-          "  <Composite>",
-          "    <Composite.layout>",
-          "      <f:TableWrapLayout/>",
-          "    </Composite.layout>",
-          "    <Label text='Label'/>",
-          "  </Composite>",
-          "</Shell>");
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * When we delete component of expandable/collapsible container, selection {@link Handle} receives
+	 * ancestor resize event, so tries to update {@link Handle} location. However at this time
+	 * component may be already deleted, so we can not ask for its cell/bounds.
+	 */
+	public void test_deleteChildAndAncestorResize() throws Exception {
+		openEditor(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout/>",
+				"  </Shell.layout>",
+				"  <Composite>",
+				"    <Composite.layout>",
+				"      <f:TableWrapLayout/>",
+				"    </Composite.layout>",
+				"    <Label text='Label'/>",
+				"    <Button wbp:name='button' text='Button'/>",
+				"  </Composite>",
+				"</Shell>");
+		ControlInfo button = getObjectByName("button");
+		// select "button"
+		canvas.select(button);
+		waitEventLoop(0);
+		// delete
+		{
+			IAction deleteAction = getDeleteAction();
+			assertTrue(deleteAction.isEnabled());
+			deleteAction.run();
+			assertXML(
+					"// filler filler filler filler filler",
+					"<Shell>",
+					"  <Shell.layout>",
+					"    <f:TableWrapLayout/>",
+					"  </Shell.layout>",
+					"  <Composite>",
+					"    <Composite.layout>",
+					"      <f:TableWrapLayout/>",
+					"    </Composite.layout>",
+					"    <Label text='Label'/>",
+					"  </Composite>",
+					"</Shell>");
+		}
+	}
 
-  /**
-   * When user externally (not using design canvas) changes "numColumns", we should recalculate
-   * positions of controls, in other case we will have incorrect count of column/row headers.
-   */
-  public void test_change_numColumns() throws Exception {
-    CompositeInfo shell =
-        openEditor(
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <f:TableWrapLayout wbp:name='gridLayout'/>",
-            "  </Shell.layout>",
-            "  <Button wbp:name='button_00'/>",
-            "  <Button wbp:name='button_01'/>",
-            "</Shell>");
-    TableWrapLayoutInfo layout = getObjectByName("gridLayout");
-    // select "shell", so show headers
-    canvas.select(shell);
-    // initially: 1 column, 2 rows
-    assertEquals(1, layout.getColumns().size());
-    assertEquals(2, layout.getRows().size());
-    // set: 2 columns, so 1 row
-    // this caused exception in headers refresh
-    layout.getPropertyByTitle("numColumns").setValue(2);
-    assertNoLoggedExceptions();
-    assertEquals(2, layout.getColumns().size());
-    assertEquals(1, layout.getRows().size());
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='gridLayout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_00'/>",
-        "  <Button wbp:name='button_01'/>",
-        "</Shell>");
-  }
+	/**
+	 * When user externally (not using design canvas) changes "numColumns", we should recalculate
+	 * positions of controls, in other case we will have incorrect count of column/row headers.
+	 */
+	public void test_change_numColumns() throws Exception {
+		CompositeInfo shell =
+				openEditor(
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <f:TableWrapLayout wbp:name='gridLayout'/>",
+						"  </Shell.layout>",
+						"  <Button wbp:name='button_00'/>",
+						"  <Button wbp:name='button_01'/>",
+						"</Shell>");
+		TableWrapLayoutInfo layout = getObjectByName("gridLayout");
+		// select "shell", so show headers
+		canvas.select(shell);
+		// initially: 1 column, 2 rows
+		assertEquals(1, layout.getColumns().size());
+		assertEquals(2, layout.getRows().size());
+		// set: 2 columns, so 1 row
+		// this caused exception in headers refresh
+		layout.getPropertyByTitle("numColumns").setValue(2);
+		assertNoLoggedExceptions();
+		assertEquals(2, layout.getColumns().size());
+		assertEquals(1, layout.getRows().size());
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='gridLayout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_00'/>",
+				"  <Button wbp:name='button_01'/>",
+				"</Shell>");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Size hint
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_setSizeHint_height() throws Exception {
-    openEditor(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button' text='New Button'/>",
-        "</Shell>");
-    ControlInfo button = getObjectByName("button");
-    // resize SOUTH of "button"
-    canvas.toResizeHandle(button, "resize_size", IPositionConstants.SOUTH).beginDrag();
-    canvas.target(button).in(0, 50).drag().endDrag();
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button' text='New Button'>",
-        "    <Button.layoutData>",
-        "      <f:TableWrapData heightHint='50'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "</Shell>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Size hint
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_setSizeHint_height() throws Exception {
+		openEditor(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button' text='New Button'/>",
+				"</Shell>");
+		ControlInfo button = getObjectByName("button");
+		// resize SOUTH of "button"
+		canvas.toResizeHandle(button, "resize_size", IPositionConstants.SOUTH).beginDrag();
+		canvas.target(button).in(0, 50).drag().endDrag();
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button' text='New Button'>",
+				"    <Button.layoutData>",
+				"      <f:TableWrapData heightHint='50'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"</Shell>");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // CREATE
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_CREATE_filled() throws Exception {
-    CompositeInfo composite =
-        openEditor(
-            "// filler filler filler filler filler",
-            "<Composite>",
-            "  <Composite.layout>",
-            "    <f:TableWrapLayout/>",
-            "  </Composite.layout>",
-            "  <Button wbp:name='existingButton' text='Existing Button'/>",
-            "</Composite>");
-    //
-    loadButtonWithText();
-    canvas.moveTo(composite, M, M);
-    canvas.assertCommandNull();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// CREATE
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_CREATE_filled() throws Exception {
+		CompositeInfo composite =
+				openEditor(
+						"// filler filler filler filler filler",
+						"<Composite>",
+						"  <Composite.layout>",
+						"    <f:TableWrapLayout/>",
+						"  </Composite.layout>",
+						"  <Button wbp:name='existingButton' text='Existing Button'/>",
+						"</Composite>");
+		//
+		loadButtonWithText();
+		canvas.moveTo(composite, M, M);
+		canvas.assertCommandNull();
+	}
 
-  public void test_CREATE_virtual_0x0() throws Exception {
-    CompositeInfo composite =
-        openEditor(
-            "// filler filler filler filler filler",
-            "<Composite>",
-            "  <Composite.layout>",
-            "    <f:TableWrapLayout/>",
-            "  </Composite.layout>",
-            "</Composite>");
-    //
-    loadButtonWithText();
-    canvas.moveTo(composite, M, M);
-    canvas.click();
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Composite>",
-        "  <Composite.layout>",
-        "    <f:TableWrapLayout/>",
-        "  </Composite.layout>",
-        "  <Button text='New Button'/>",
-        "</Composite>");
-  }
+	public void test_CREATE_virtual_0x0() throws Exception {
+		CompositeInfo composite =
+				openEditor(
+						"// filler filler filler filler filler",
+						"<Composite>",
+						"  <Composite.layout>",
+						"    <f:TableWrapLayout/>",
+						"  </Composite.layout>",
+						"</Composite>");
+		//
+		loadButtonWithText();
+		canvas.moveTo(composite, M, M);
+		canvas.click();
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Composite>",
+				"  <Composite.layout>",
+				"    <f:TableWrapLayout/>",
+				"  </Composite.layout>",
+				"  <Button text='New Button'/>",
+				"</Composite>");
+	}
 
-  public void test_CREATE_virtual_0x1() throws Exception {
-    CompositeInfo composite =
-        openEditor(
-            "// filler filler filler filler filler",
-            "<Composite>",
-            "  <Composite.layout>",
-            "    <f:TableWrapLayout/>",
-            "  </Composite.layout>",
-            "</Composite>");
-    //
-    loadButtonWithText();
-    canvas.moveTo(composite, M + VS + VG, M);
-    canvas.click();
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Composite>",
-        "  <Composite.layout>",
-        "    <f:TableWrapLayout numColumns='2'/>",
-        "  </Composite.layout>",
-        "  <Label/>",
-        "  <Button text='New Button'/>",
-        "</Composite>");
-  }
+	public void test_CREATE_virtual_0x1() throws Exception {
+		CompositeInfo composite =
+				openEditor(
+						"// filler filler filler filler filler",
+						"<Composite>",
+						"  <Composite.layout>",
+						"    <f:TableWrapLayout/>",
+						"  </Composite.layout>",
+						"</Composite>");
+		//
+		loadButtonWithText();
+		canvas.moveTo(composite, M + VS + VG, M);
+		canvas.click();
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Composite>",
+				"  <Composite.layout>",
+				"    <f:TableWrapLayout numColumns='2'/>",
+				"  </Composite.layout>",
+				"  <Label/>",
+				"  <Button text='New Button'/>",
+				"</Composite>");
+	}
 
-  public void test_CREATE_appendToColumn_1x0() throws Exception {
-    openEditor(
-        "// filler filler filler filler filler",
-        "<Composite>",
-        "  <Composite.layout>",
-        "    <f:TableWrapLayout/>",
-        "  </Composite.layout>",
-        "  <Button wbp:name='existingButton' text='Existing Button'/>",
-        "</Composite>");
-    XmlObjectInfo existingButton = getObjectByName("existingButton");
-    //
-    loadButtonWithText();
-    canvas.target(existingButton).inX(0.5).outY(S + 1).move();
-    canvas.click();
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Composite>",
-        "  <Composite.layout>",
-        "    <f:TableWrapLayout/>",
-        "  </Composite.layout>",
-        "  <Button wbp:name='existingButton' text='Existing Button'/>",
-        "  <Button text='New Button'/>",
-        "</Composite>");
-  }
+	public void test_CREATE_appendToColumn_1x0() throws Exception {
+		openEditor(
+				"// filler filler filler filler filler",
+				"<Composite>",
+				"  <Composite.layout>",
+				"    <f:TableWrapLayout/>",
+				"  </Composite.layout>",
+				"  <Button wbp:name='existingButton' text='Existing Button'/>",
+				"</Composite>");
+		XmlObjectInfo existingButton = getObjectByName("existingButton");
+		//
+		loadButtonWithText();
+		canvas.target(existingButton).inX(0.5).outY(S + 1).move();
+		canvas.click();
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Composite>",
+				"  <Composite.layout>",
+				"    <f:TableWrapLayout/>",
+				"  </Composite.layout>",
+				"  <Button wbp:name='existingButton' text='Existing Button'/>",
+				"  <Button text='New Button'/>",
+				"</Composite>");
+	}
 
-  public void test_CREATE_appendToRow_0x1() throws Exception {
-    openEditor(
-        "// filler filler filler filler filler",
-        "<Composite>",
-        "  <Composite.layout>",
-        "    <f:TableWrapLayout/>",
-        "  </Composite.layout>",
-        "  <Button wbp:name='existingButton' text='Existing Button'/>",
-        "</Composite>");
-    XmlObjectInfo existingButton = getObjectByName("existingButton");
-    //
-    loadButtonWithText();
-    canvas.target(existingButton).inY(0.5).outX(S + 1).move();
-    canvas.click();
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Composite>",
-        "  <Composite.layout>",
-        "    <f:TableWrapLayout numColumns='2'/>",
-        "  </Composite.layout>",
-        "  <Button wbp:name='existingButton' text='Existing Button'/>",
-        "  <Button text='New Button'/>",
-        "</Composite>");
-  }
+	public void test_CREATE_appendToRow_0x1() throws Exception {
+		openEditor(
+				"// filler filler filler filler filler",
+				"<Composite>",
+				"  <Composite.layout>",
+				"    <f:TableWrapLayout/>",
+				"  </Composite.layout>",
+				"  <Button wbp:name='existingButton' text='Existing Button'/>",
+				"</Composite>");
+		XmlObjectInfo existingButton = getObjectByName("existingButton");
+		//
+		loadButtonWithText();
+		canvas.target(existingButton).inY(0.5).outX(S + 1).move();
+		canvas.click();
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Composite>",
+				"  <Composite.layout>",
+				"    <f:TableWrapLayout numColumns='2'/>",
+				"  </Composite.layout>",
+				"  <Button wbp:name='existingButton' text='Existing Button'/>",
+				"  <Button text='New Button'/>",
+				"</Composite>");
+	}
 
-  public void test_CREATE_beforeFirstRow() throws Exception {
-    openEditor(
-        "// filler filler filler filler filler",
-        "<Composite>",
-        "  <Composite.layout>",
-        "    <f:TableWrapLayout/>",
-        "  </Composite.layout>",
-        "  <Button wbp:name='existingButton' text='Existing Button'/>",
-        "</Composite>");
-    XmlObjectInfo existingButton = getObjectByName("existingButton");
-    //
-    loadButtonWithText();
-    canvas.target(existingButton).inX(0.5).outY(-2).move();
-    canvas.click();
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Composite>",
-        "  <Composite.layout>",
-        "    <f:TableWrapLayout/>",
-        "  </Composite.layout>",
-        "  <Button text='New Button'/>",
-        "  <Button wbp:name='existingButton' text='Existing Button'/>",
-        "</Composite>");
-  }
+	public void test_CREATE_beforeFirstRow() throws Exception {
+		openEditor(
+				"// filler filler filler filler filler",
+				"<Composite>",
+				"  <Composite.layout>",
+				"    <f:TableWrapLayout/>",
+				"  </Composite.layout>",
+				"  <Button wbp:name='existingButton' text='Existing Button'/>",
+				"</Composite>");
+		XmlObjectInfo existingButton = getObjectByName("existingButton");
+		//
+		loadButtonWithText();
+		canvas.target(existingButton).inX(0.5).outY(-2).move();
+		canvas.click();
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Composite>",
+				"  <Composite.layout>",
+				"    <f:TableWrapLayout/>",
+				"  </Composite.layout>",
+				"  <Button text='New Button'/>",
+				"  <Button wbp:name='existingButton' text='Existing Button'/>",
+				"</Composite>");
+	}
 
-  public void test_CREATE_beforeFirstColumn() throws Exception {
-    openEditor(
-        "// filler filler filler filler filler",
-        "<Composite>",
-        "  <Composite.layout>",
-        "    <f:TableWrapLayout/>",
-        "  </Composite.layout>",
-        "  <Button wbp:name='existingButton' text='Existing Button'/>",
-        "</Composite>");
-    XmlObjectInfo existingButton = getObjectByName("existingButton");
-    //
-    loadButtonWithText();
-    canvas.target(existingButton).inY(0.5).outX(-2).move();
-    canvas.click();
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Composite>",
-        "  <Composite.layout>",
-        "    <f:TableWrapLayout numColumns='2'/>",
-        "  </Composite.layout>",
-        "  <Button text='New Button'/>",
-        "  <Button wbp:name='existingButton' text='Existing Button'/>",
-        "</Composite>");
-  }
+	public void test_CREATE_beforeFirstColumn() throws Exception {
+		openEditor(
+				"// filler filler filler filler filler",
+				"<Composite>",
+				"  <Composite.layout>",
+				"    <f:TableWrapLayout/>",
+				"  </Composite.layout>",
+				"  <Button wbp:name='existingButton' text='Existing Button'/>",
+				"</Composite>");
+		XmlObjectInfo existingButton = getObjectByName("existingButton");
+		//
+		loadButtonWithText();
+		canvas.target(existingButton).inY(0.5).outX(-2).move();
+		canvas.click();
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Composite>",
+				"  <Composite.layout>",
+				"    <f:TableWrapLayout numColumns='2'/>",
+				"  </Composite.layout>",
+				"  <Button text='New Button'/>",
+				"  <Button wbp:name='existingButton' text='Existing Button'/>",
+				"</Composite>");
+	}
 
-  public void test_CREATE_insertColumn() throws Exception {
-    openEditor(
-        "// filler filler filler filler filler",
-        "<Composite>",
-        "  <Composite.layout>",
-        "    <f:TableWrapLayout numColumns='2'/>",
-        "  </Composite.layout>",
-        "  <Button wbp:name='button_1' text='Button 1'/>",
-        "  <Button wbp:name='button_2' text='Button 2'/>",
-        "</Composite>");
-    XmlObjectInfo button_1 = getObjectByName("button_1");
-    //
-    loadButtonWithText();
-    canvas.target(button_1).inY(0.5).outX(S / 2).move();
-    canvas.click();
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Composite>",
-        "  <Composite.layout>",
-        "    <f:TableWrapLayout numColumns='3'/>",
-        "  </Composite.layout>",
-        "  <Button wbp:name='button_1' text='Button 1'/>",
-        "  <Button text='New Button'/>",
-        "  <Button wbp:name='button_2' text='Button 2'/>",
-        "</Composite>");
-  }
+	public void test_CREATE_insertColumn() throws Exception {
+		openEditor(
+				"// filler filler filler filler filler",
+				"<Composite>",
+				"  <Composite.layout>",
+				"    <f:TableWrapLayout numColumns='2'/>",
+				"  </Composite.layout>",
+				"  <Button wbp:name='button_1' text='Button 1'/>",
+				"  <Button wbp:name='button_2' text='Button 2'/>",
+				"</Composite>");
+		XmlObjectInfo button_1 = getObjectByName("button_1");
+		//
+		loadButtonWithText();
+		canvas.target(button_1).inY(0.5).outX(S / 2).move();
+		canvas.click();
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Composite>",
+				"  <Composite.layout>",
+				"    <f:TableWrapLayout numColumns='3'/>",
+				"  </Composite.layout>",
+				"  <Button wbp:name='button_1' text='Button 1'/>",
+				"  <Button text='New Button'/>",
+				"  <Button wbp:name='button_2' text='Button 2'/>",
+				"</Composite>");
+	}
 
-  public void test_CREATE_insertRow() throws Exception {
-    openEditor(
-        "// filler filler filler filler filler",
-        "<Composite>",
-        "  <Composite.layout>",
-        "    <f:TableWrapLayout/>",
-        "  </Composite.layout>",
-        "  <Button wbp:name='button_1' text='Button 1'/>",
-        "  <Button wbp:name='button_2' text='Button 2'/>",
-        "</Composite>");
-    XmlObjectInfo button_1 = getObjectByName("button_1");
-    //
-    loadButtonWithText();
-    canvas.target(button_1).inX(0.5).outY(S / 2).move();
-    canvas.click();
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Composite>",
-        "  <Composite.layout>",
-        "    <f:TableWrapLayout/>",
-        "  </Composite.layout>",
-        "  <Button wbp:name='button_1' text='Button 1'/>",
-        "  <Button text='New Button'/>",
-        "  <Button wbp:name='button_2' text='Button 2'/>",
-        "</Composite>");
-  }
+	public void test_CREATE_insertRow() throws Exception {
+		openEditor(
+				"// filler filler filler filler filler",
+				"<Composite>",
+				"  <Composite.layout>",
+				"    <f:TableWrapLayout/>",
+				"  </Composite.layout>",
+				"  <Button wbp:name='button_1' text='Button 1'/>",
+				"  <Button wbp:name='button_2' text='Button 2'/>",
+				"</Composite>");
+		XmlObjectInfo button_1 = getObjectByName("button_1");
+		//
+		loadButtonWithText();
+		canvas.target(button_1).inX(0.5).outY(S / 2).move();
+		canvas.click();
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Composite>",
+				"  <Composite.layout>",
+				"    <f:TableWrapLayout/>",
+				"  </Composite.layout>",
+				"  <Button wbp:name='button_1' text='Button 1'/>",
+				"  <Button text='New Button'/>",
+				"  <Button wbp:name='button_2' text='Button 2'/>",
+				"</Composite>");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // PASTE
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_PASTE_virtual_1x0() throws Exception {
-    openEditor(
-        "// filler filler filler filler filler",
-        "<Composite>",
-        "  <Composite.layout>",
-        "    <f:TableWrapLayout/>",
-        "  </Composite.layout>",
-        "  <Button wbp:name='existingButton' text='My Button'/>",
-        "</Composite>");
-    XmlObjectInfo existingButton = getObjectByName("existingButton");
-    //
-    doCopyPaste(existingButton);
-    canvas.target(existingButton).inX(0.5).outY(S + 1).move();
-    canvas.click();
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Composite>",
-        "  <Composite.layout>",
-        "    <f:TableWrapLayout/>",
-        "  </Composite.layout>",
-        "  <Button wbp:name='existingButton' text='My Button'/>",
-        "  <Button text='My Button'/>",
-        "</Composite>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// PASTE
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_PASTE_virtual_1x0() throws Exception {
+		openEditor(
+				"// filler filler filler filler filler",
+				"<Composite>",
+				"  <Composite.layout>",
+				"    <f:TableWrapLayout/>",
+				"  </Composite.layout>",
+				"  <Button wbp:name='existingButton' text='My Button'/>",
+				"</Composite>");
+		XmlObjectInfo existingButton = getObjectByName("existingButton");
+		//
+		doCopyPaste(existingButton);
+		canvas.target(existingButton).inX(0.5).outY(S + 1).move();
+		canvas.click();
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Composite>",
+				"  <Composite.layout>",
+				"    <f:TableWrapLayout/>",
+				"  </Composite.layout>",
+				"  <Button wbp:name='existingButton' text='My Button'/>",
+				"  <Button text='My Button'/>",
+				"</Composite>");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // MOVE
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_MOVE_virtual_1x0() throws Exception {
-    openEditor(
-        "// filler filler filler filler filler",
-        "<Composite>",
-        "  <Composite.layout>",
-        "    <f:TableWrapLayout/>",
-        "  </Composite.layout>",
-        "  <Button wbp:name='button' text='Button'/>",
-        "</Composite>");
-    XmlObjectInfo button = getObjectByName("button");
-    //
-    canvas.beginDrag(button);
-    canvas.target(button).inX(0.5).outY(S + 1).drag();
-    canvas.endDrag();
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Composite>",
-        "  <Composite.layout>",
-        "    <f:TableWrapLayout/>",
-        "  </Composite.layout>",
-        "  <Label/>",
-        "  <Button wbp:name='button' text='Button'/>",
-        "</Composite>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// MOVE
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_MOVE_virtual_1x0() throws Exception {
+		openEditor(
+				"// filler filler filler filler filler",
+				"<Composite>",
+				"  <Composite.layout>",
+				"    <f:TableWrapLayout/>",
+				"  </Composite.layout>",
+				"  <Button wbp:name='button' text='Button'/>",
+				"</Composite>");
+		XmlObjectInfo button = getObjectByName("button");
+		//
+		canvas.beginDrag(button);
+		canvas.target(button).inX(0.5).outY(S + 1).drag();
+		canvas.endDrag();
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Composite>",
+				"  <Composite.layout>",
+				"    <f:TableWrapLayout/>",
+				"  </Composite.layout>",
+				"  <Label/>",
+				"  <Button wbp:name='button' text='Button'/>",
+				"</Composite>");
+	}
 
-  public void test_ADD_virtual_0x0() throws Exception {
-    openEditor(
-        "// filler filler filler filler filler",
-        "<Composite>",
-        "  <Composite.layout>",
-        "    <FillLayout/>",
-        "  </Composite.layout>",
-        "  <Button wbp:name='button' text='Button'/>",
-        "  <Composite wbp:name='composite'>",
-        "    <Composite.layout>",
-        "      <f:TableWrapLayout/>",
-        "    </Composite.layout>",
-        "  </Composite>",
-        "</Composite>");
-    XmlObjectInfo button = getObjectByName("button");
-    XmlObjectInfo composite = getObjectByName("composite");
-    //
-    canvas.beginDrag(button);
-    canvas.dragTo(composite, M + VS / 2, M + VS / 2);
-    canvas.endDrag();
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Composite>",
-        "  <Composite.layout>",
-        "    <FillLayout/>",
-        "  </Composite.layout>",
-        "  <Composite wbp:name='composite'>",
-        "    <Composite.layout>",
-        "      <f:TableWrapLayout/>",
-        "    </Composite.layout>",
-        "    <Button wbp:name='button' text='Button'/>",
-        "  </Composite>",
-        "</Composite>");
-  }
+	public void test_ADD_virtual_0x0() throws Exception {
+		openEditor(
+				"// filler filler filler filler filler",
+				"<Composite>",
+				"  <Composite.layout>",
+				"    <FillLayout/>",
+				"  </Composite.layout>",
+				"  <Button wbp:name='button' text='Button'/>",
+				"  <Composite wbp:name='composite'>",
+				"    <Composite.layout>",
+				"      <f:TableWrapLayout/>",
+				"    </Composite.layout>",
+				"  </Composite>",
+				"</Composite>");
+		XmlObjectInfo button = getObjectByName("button");
+		XmlObjectInfo composite = getObjectByName("composite");
+		//
+		canvas.beginDrag(button);
+		canvas.dragTo(composite, M + VS / 2, M + VS / 2);
+		canvas.endDrag();
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Composite>",
+				"  <Composite.layout>",
+				"    <FillLayout/>",
+				"  </Composite.layout>",
+				"  <Composite wbp:name='composite'>",
+				"    <Composite.layout>",
+				"      <f:TableWrapLayout/>",
+				"    </Composite.layout>",
+				"    <Button wbp:name='button' text='Button'/>",
+				"  </Composite>",
+				"</Composite>");
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/forms/table/TableWrapLayoutSelectionActionsTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/forms/table/TableWrapLayoutSelectionActionsTest.java
index a2782db3a..1abec373e 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/forms/table/TableWrapLayoutSelectionActionsTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/forms/table/TableWrapLayoutSelectionActionsTest.java
@@ -27,217 +27,217 @@
  * @author scheglov_ke
  */
 public class TableWrapLayoutSelectionActionsTest extends XwtModelTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Source
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getTestSource_namespaces() {
-    return super.getTestSource_namespaces()
-        + " xmlns:f='clr-namespace:org.eclipse.ui.forms.widgets'";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Source
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getTestSource_namespaces() {
+		return super.getTestSource_namespaces()
+				+ " xmlns:f='clr-namespace:org.eclipse.ui.forms.widgets'";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Asserts the there is {@link IAction} with given text, and it has expected <code>checked</code>
-   * state.
-   */
-  private static void hasAction(List<Object> actions, String title, boolean checked) {
-    IAction action = findAction(actions, title);
-    assertNotNull(action);
-    assertEquals(checked, action.isChecked());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Asserts the there is {@link IAction} with given text, and it has expected <code>checked</code>
+	 * state.
+	 */
+	private static void hasAction(List<Object> actions, String title, boolean checked) {
+		IAction action = findAction(actions, title);
+		assertNotNull(action);
+		assertEquals(checked, action.isChecked());
+	}
 
-  public void test_selectionActions_emptySelection() throws Exception {
-    parse(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    refresh();
-    // prepare actions
-    List<Object> actions = getSelectionActions();
-    // no actions
-    assertThat(actions).isEmpty();
-  }
+	public void test_selectionActions_emptySelection() throws Exception {
+		parse(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		refresh();
+		// prepare actions
+		List<Object> actions = getSelectionActions();
+		// no actions
+		assertThat(actions).isEmpty();
+	}
 
-  public void test_selectionActions_invalidSelection() throws Exception {
-    CompositeInfo shell =
-        parse(
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <f:TableWrapLayout wbp:name='layout'/>",
-            "  </Shell.layout>",
-            "  <Button wbp:name='button'/>",
-            "</Shell>");
-    refresh();
-    ControlInfo button = getObjectByName("button");
-    // prepare actions
-    List<Object> actions = getSelectionActions(button, shell);
-    // no actions
-    assertThat(actions).isEmpty();
-  }
+	public void test_selectionActions_invalidSelection() throws Exception {
+		CompositeInfo shell =
+				parse(
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <f:TableWrapLayout wbp:name='layout'/>",
+						"  </Shell.layout>",
+						"  <Button wbp:name='button'/>",
+						"</Shell>");
+		refresh();
+		ControlInfo button = getObjectByName("button");
+		// prepare actions
+		List<Object> actions = getSelectionActions(button, shell);
+		// no actions
+		assertThat(actions).isEmpty();
+	}
 
-  public void test_selectionActions_state() throws Exception {
-    parse(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Label wbp:name='label'/>",
-        "  <Button wbp:name='button'>",
-        "    <Button.layoutData>",
-        "      <f:TableWrapData grabHorizontal='true'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "</Shell>");
-    refresh();
-    ControlInfo label = getObjectByName("label");
-    ControlInfo button = getObjectByName("button");
-    // actions for "button"
-    {
-      List<Object> actions = getSelectionActions(button);
-      // check actions
-      hasAction(actions, "Left", true);
-      hasAction(actions, "Center", false);
-      hasAction(actions, "Right", false);
-      hasAction(actions, "Fill horizontal", false);
-      hasAction(actions, "Top", true);
-      hasAction(actions, "Middle", false);
-      hasAction(actions, "Bottom", false);
-      hasAction(actions, "Fill vertical", false);
-      hasAction(actions, "Horizontal grab", true);
-      hasAction(actions, "Vertical grab", false);
-    }
-    // actions for "label", "button"
-    {
-      List<Object> actions = getSelectionActions(label, button);
-      // check actions
-      hasAction(actions, "Left", true);
-      hasAction(actions, "Top", true);
-      hasAction(actions, "Horizontal grab", false);
-    }
-  }
+	public void test_selectionActions_state() throws Exception {
+		parse(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Label wbp:name='label'/>",
+				"  <Button wbp:name='button'>",
+				"    <Button.layoutData>",
+				"      <f:TableWrapData grabHorizontal='true'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"</Shell>");
+		refresh();
+		ControlInfo label = getObjectByName("label");
+		ControlInfo button = getObjectByName("button");
+		// actions for "button"
+		{
+			List<Object> actions = getSelectionActions(button);
+			// check actions
+			hasAction(actions, "Left", true);
+			hasAction(actions, "Center", false);
+			hasAction(actions, "Right", false);
+			hasAction(actions, "Fill horizontal", false);
+			hasAction(actions, "Top", true);
+			hasAction(actions, "Middle", false);
+			hasAction(actions, "Bottom", false);
+			hasAction(actions, "Fill vertical", false);
+			hasAction(actions, "Horizontal grab", true);
+			hasAction(actions, "Vertical grab", false);
+		}
+		// actions for "label", "button"
+		{
+			List<Object> actions = getSelectionActions(label, button);
+			// check actions
+			hasAction(actions, "Left", true);
+			hasAction(actions, "Top", true);
+			hasAction(actions, "Horizontal grab", false);
+		}
+	}
 
-  public void test_grabAction() throws Exception {
-    parse(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'>",
-        "    <Button.layoutData>",
-        "      <f:TableWrapData grabHorizontal='true'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "</Shell>");
-    refresh();
-    ControlInfo button = getObjectByName("button");
-    // prepare actions
-    List<Object> actions = getSelectionActions(button);
-    // use "vertical grab" action
-    {
-      IAction verticalGrab = findAction(actions, "Vertical grab");
-      assertFalse(verticalGrab.isChecked());
-      verticalGrab.setChecked(true);
-      verticalGrab.run();
-      assertXML(
-          "<Shell>",
-          "  <Shell.layout>",
-          "    <f:TableWrapLayout wbp:name='layout'/>",
-          "  </Shell.layout>",
-          "  <Button wbp:name='button'>",
-          "    <Button.layoutData>",
-          "      <f:TableWrapData grabHorizontal='true' grabVertical='true'/>",
-          "    </Button.layoutData>",
-          "  </Button>",
-          "</Shell>");
-    }
-    // use "horizontal grab" action
-    {
-      IAction horizontalGrab = findAction(actions, "Horizontal grab");
-      assertTrue(horizontalGrab.isChecked());
-      horizontalGrab.setChecked(false);
-      horizontalGrab.run();
-      assertXML(
-          "<Shell>",
-          "  <Shell.layout>",
-          "    <f:TableWrapLayout wbp:name='layout'/>",
-          "  </Shell.layout>",
-          "  <Button wbp:name='button'>",
-          "    <Button.layoutData>",
-          "      <f:TableWrapData grabVertical='true'/>",
-          "    </Button.layoutData>",
-          "  </Button>",
-          "</Shell>");
-    }
-  }
+	public void test_grabAction() throws Exception {
+		parse(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'>",
+				"    <Button.layoutData>",
+				"      <f:TableWrapData grabHorizontal='true'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"</Shell>");
+		refresh();
+		ControlInfo button = getObjectByName("button");
+		// prepare actions
+		List<Object> actions = getSelectionActions(button);
+		// use "vertical grab" action
+		{
+			IAction verticalGrab = findAction(actions, "Vertical grab");
+			assertFalse(verticalGrab.isChecked());
+			verticalGrab.setChecked(true);
+			verticalGrab.run();
+			assertXML(
+					"<Shell>",
+					"  <Shell.layout>",
+					"    <f:TableWrapLayout wbp:name='layout'/>",
+					"  </Shell.layout>",
+					"  <Button wbp:name='button'>",
+					"    <Button.layoutData>",
+					"      <f:TableWrapData grabHorizontal='true' grabVertical='true'/>",
+					"    </Button.layoutData>",
+					"  </Button>",
+					"</Shell>");
+		}
+		// use "horizontal grab" action
+		{
+			IAction horizontalGrab = findAction(actions, "Horizontal grab");
+			assertTrue(horizontalGrab.isChecked());
+			horizontalGrab.setChecked(false);
+			horizontalGrab.run();
+			assertXML(
+					"<Shell>",
+					"  <Shell.layout>",
+					"    <f:TableWrapLayout wbp:name='layout'/>",
+					"  </Shell.layout>",
+					"  <Button wbp:name='button'>",
+					"    <Button.layoutData>",
+					"      <f:TableWrapData grabVertical='true'/>",
+					"    </Button.layoutData>",
+					"  </Button>",
+					"</Shell>");
+		}
+	}
 
-  public void test_alignmentAction() throws Exception {
-    parse(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    refresh();
-    ControlInfo button = getObjectByName("button");
-    // prepare actions
-    List<Object> actions = getSelectionActions(button);
-    // set "right" alignment
-    {
-      IAction rightAlignment = findAction(actions, "Right");
-      rightAlignment.setChecked(true);
-      rightAlignment.run();
-      assertXML(
-          "<Shell>",
-          "  <Shell.layout>",
-          "    <f:TableWrapLayout wbp:name='layout'/>",
-          "  </Shell.layout>",
-          "  <Button wbp:name='button'>",
-          "    <Button.layoutData>",
-          "      <f:TableWrapData align='(org.eclipse.ui.forms.widgets.TableWrapData).RIGHT'/>",
-          "    </Button.layoutData>",
-          "  </Button>",
-          "</Shell>");
-    }
-    // set "bottom" alignment
-    {
-      IAction bottomAction = findAction(actions, "Bottom");
-      bottomAction.setChecked(true);
-      bottomAction.run();
-      assertXML(
-          "// filler filler filler filler filler",
-          "// filler filler filler filler filler",
-          "<Shell>",
-          "  <Shell.layout>",
-          "    <f:TableWrapLayout wbp:name='layout'/>",
-          "  </Shell.layout>",
-          "  <Button wbp:name='button'>",
-          "    <Button.layoutData>",
-          "      <f:TableWrapData"
-              + " align='(org.eclipse.ui.forms.widgets.TableWrapData).RIGHT'"
-              + " valign='(org.eclipse.ui.forms.widgets.TableWrapData).BOTTOM'/>",
-          "    </Button.layoutData>",
-          "  </Button>",
-          "</Shell>");
-    }
-  }
+	public void test_alignmentAction() throws Exception {
+		parse(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		refresh();
+		ControlInfo button = getObjectByName("button");
+		// prepare actions
+		List<Object> actions = getSelectionActions(button);
+		// set "right" alignment
+		{
+			IAction rightAlignment = findAction(actions, "Right");
+			rightAlignment.setChecked(true);
+			rightAlignment.run();
+			assertXML(
+					"<Shell>",
+					"  <Shell.layout>",
+					"    <f:TableWrapLayout wbp:name='layout'/>",
+					"  </Shell.layout>",
+					"  <Button wbp:name='button'>",
+					"    <Button.layoutData>",
+					"      <f:TableWrapData align='(org.eclipse.ui.forms.widgets.TableWrapData).RIGHT'/>",
+					"    </Button.layoutData>",
+					"  </Button>",
+					"</Shell>");
+		}
+		// set "bottom" alignment
+		{
+			IAction bottomAction = findAction(actions, "Bottom");
+			bottomAction.setChecked(true);
+			bottomAction.run();
+			assertXML(
+					"// filler filler filler filler filler",
+					"// filler filler filler filler filler",
+					"<Shell>",
+					"  <Shell.layout>",
+					"    <f:TableWrapLayout wbp:name='layout'/>",
+					"  </Shell.layout>",
+					"  <Button wbp:name='button'>",
+					"    <Button.layoutData>",
+					"      <f:TableWrapData"
+							+ " align='(org.eclipse.ui.forms.widgets.TableWrapData).RIGHT'"
+							+ " valign='(org.eclipse.ui.forms.widgets.TableWrapData).BOTTOM'/>",
+							"    </Button.layoutData>",
+							"  </Button>",
+					"</Shell>");
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/forms/table/TableWrapLayoutTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/forms/table/TableWrapLayoutTest.java
index 45dda75ee..e0601fd8e 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/forms/table/TableWrapLayoutTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/forms/table/TableWrapLayoutTest.java
@@ -41,1647 +41,1647 @@
  * @author scheglov_ke
  */
 public class TableWrapLayoutTest extends XwtModelTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Source
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getTestSource_namespaces() {
-    return super.getTestSource_namespaces()
-        + " xmlns:f='clr-namespace:org.eclipse.ui.forms.widgets'";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Source
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getTestSource_namespaces() {
+		return super.getTestSource_namespaces()
+				+ " xmlns:f='clr-namespace:org.eclipse.ui.forms.widgets'";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Images
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_images() throws Exception {
-    assertNotNull(TableWrapLayoutImages.getImage("h/left.gif"));
-    assertNotNull(TableWrapLayoutImages.getImageDescriptor("v/top.gif"));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Images
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_images() throws Exception {
+		assertNotNull(TableWrapLayoutImages.getImage("h/left.gif"));
+		assertNotNull(TableWrapLayoutImages.getImageDescriptor("v/top.gif"));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for parsing empty {@link TableWrapLayoutInfo}.
-   */
-  public void test_parseEmpty() throws Exception {
-    parse(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "</Shell>");
-    refresh();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for parsing empty {@link TableWrapLayoutInfo}.
+	 */
+	public void test_parseEmpty() throws Exception {
+		parse(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"</Shell>");
+		refresh();
+	}
 
-  /**
-   * Fillers should be filtered out from presentation children.
-   */
-  public void test_excludeFillersFromPresentationChildren() throws Exception {
-    CompositeInfo shell =
-        parse(
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <f:TableWrapLayout wbp:name='layout'/>",
-            "  </Shell.layout>",
-            "  <Button wbp:name='button'/>",
-            "  <Label/>",
-            "</Shell>");
-    refresh();
-    ControlInfo button = shell.getChildrenControls().get(0);
-    ControlInfo filler = shell.getChildrenControls().get(1);
-    //
-    IObjectPresentation presentation = shell.getPresentation();
-    {
-      List<ObjectInfo> presentationChildren = presentation.getChildrenTree();
-      assertThat(presentationChildren).contains(button).doesNotContain(filler);
-    }
-    {
-      List<ObjectInfo> presentationChildren = presentation.getChildrenGraphical();
-      assertThat(presentationChildren).contains(button).doesNotContain(filler);
-    }
-  }
+	/**
+	 * Fillers should be filtered out from presentation children.
+	 */
+	public void test_excludeFillersFromPresentationChildren() throws Exception {
+		CompositeInfo shell =
+				parse(
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <f:TableWrapLayout wbp:name='layout'/>",
+						"  </Shell.layout>",
+						"  <Button wbp:name='button'/>",
+						"  <Label/>",
+						"</Shell>");
+		refresh();
+		ControlInfo button = shell.getChildrenControls().get(0);
+		ControlInfo filler = shell.getChildrenControls().get(1);
+		//
+		IObjectPresentation presentation = shell.getPresentation();
+		{
+			List<ObjectInfo> presentationChildren = presentation.getChildrenTree();
+			assertThat(presentationChildren).contains(button).doesNotContain(filler);
+		}
+		{
+			List<ObjectInfo> presentationChildren = presentation.getChildrenGraphical();
+			assertThat(presentationChildren).contains(button).doesNotContain(filler);
+		}
+	}
 
-  /**
-   * Test for {@link IGridInfo}.
-   */
-  public void test_gridInfo() throws Exception {
-    parse(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_0'/>",
-        "  <Label/>",
-        "  <Label/>",
-        "  <Button wbp:name='button_1'/>",
-        "  <Button wbp:name='button_2'>",
-        "    <Button.layoutData>",
-        "      <f:TableWrapData colspan='2'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "</Shell>");
-    refresh();
-    TableWrapLayoutInfo layout = getObjectByName("layout");
-    ControlInfo button_0 = getObjectByName("button_0");
-    ControlInfo button_1 = getObjectByName("button_1");
-    ControlInfo button_2 = getObjectByName("button_2");
-    //
-    IGridInfo gridInfo = layout.getGridInfo();
-    assertNotNull(gridInfo);
-    // check count of column/row
-    assertEquals(2, gridInfo.getColumnCount());
-    assertEquals(3, gridInfo.getRowCount());
-    // check column intervals
-    {
-      int[] columnOrigins = layout.getColumnOrigins();
-      Interval[] columnIntervals = gridInfo.getColumnIntervals();
-      assertEquals(columnOrigins.length, columnIntervals.length);
-      for (int i = 0; i < columnOrigins.length; i++) {
-        int origin = columnOrigins[i];
-        Interval interval = columnIntervals[i];
-        assertEquals(origin, interval.begin());
-      }
-    }
-    // check row intervals
-    {
-      int[] rowOrigins = layout.getRowOrigins();
-      Interval[] rowIntervals = gridInfo.getRowIntervals();
-      assertEquals(rowOrigins.length, rowIntervals.length);
-    }
-    // check component cells
-    {
-      assertEquals(new Rectangle(0, 0, 1, 1), gridInfo.getComponentCells(button_0));
-      assertEquals(new Rectangle(1, 1, 1, 1), gridInfo.getComponentCells(button_1));
-      assertEquals(new Rectangle(0, 2, 2, 1), gridInfo.getComponentCells(button_2));
-    }
-    // check cells rectangle
-    {
-      Rectangle rectangle = gridInfo.getCellsRectangle(new Rectangle(0, 0, 1, 1));
-      assertEquals(5, rectangle.x);
-      assertEquals(5, rectangle.y);
-    }
-    // insets
-    assertEquals(new Insets(0, 0, 0, 0), gridInfo.getInsets());
-    // check "virtual" feedback sizes
-    {
-      assertEquals(25, gridInfo.getVirtualColumnSize());
-      assertEquals(5, gridInfo.getVirtualColumnGap());
-      assertEquals(25, gridInfo.getVirtualRowSize());
-      assertEquals(5, gridInfo.getVirtualRowGap());
-    }
-    // check occupied cells
-    {
-      assertSame(button_0, gridInfo.getOccupied(0, 0));
-      assertSame(button_1, gridInfo.getOccupied(1, 1));
-      assertSame(button_2, gridInfo.getOccupied(0, 2));
-      assertSame(button_2, gridInfo.getOccupied(1, 2));
-      assertNull(gridInfo.getOccupied(1, 0));
-      assertNull(gridInfo.getOccupied(0, 1));
-    }
-  }
+	/**
+	 * Test for {@link IGridInfo}.
+	 */
+	public void test_gridInfo() throws Exception {
+		parse(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_0'/>",
+				"  <Label/>",
+				"  <Label/>",
+				"  <Button wbp:name='button_1'/>",
+				"  <Button wbp:name='button_2'>",
+				"    <Button.layoutData>",
+				"      <f:TableWrapData colspan='2'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"</Shell>");
+		refresh();
+		TableWrapLayoutInfo layout = getObjectByName("layout");
+		ControlInfo button_0 = getObjectByName("button_0");
+		ControlInfo button_1 = getObjectByName("button_1");
+		ControlInfo button_2 = getObjectByName("button_2");
+		//
+		IGridInfo gridInfo = layout.getGridInfo();
+		assertNotNull(gridInfo);
+		// check count of column/row
+		assertEquals(2, gridInfo.getColumnCount());
+		assertEquals(3, gridInfo.getRowCount());
+		// check column intervals
+		{
+			int[] columnOrigins = layout.getColumnOrigins();
+			Interval[] columnIntervals = gridInfo.getColumnIntervals();
+			assertEquals(columnOrigins.length, columnIntervals.length);
+			for (int i = 0; i < columnOrigins.length; i++) {
+				int origin = columnOrigins[i];
+				Interval interval = columnIntervals[i];
+				assertEquals(origin, interval.begin());
+			}
+		}
+		// check row intervals
+		{
+			int[] rowOrigins = layout.getRowOrigins();
+			Interval[] rowIntervals = gridInfo.getRowIntervals();
+			assertEquals(rowOrigins.length, rowIntervals.length);
+		}
+		// check component cells
+		{
+			assertEquals(new Rectangle(0, 0, 1, 1), gridInfo.getComponentCells(button_0));
+			assertEquals(new Rectangle(1, 1, 1, 1), gridInfo.getComponentCells(button_1));
+			assertEquals(new Rectangle(0, 2, 2, 1), gridInfo.getComponentCells(button_2));
+		}
+		// check cells rectangle
+		{
+			Rectangle rectangle = gridInfo.getCellsRectangle(new Rectangle(0, 0, 1, 1));
+			assertEquals(5, rectangle.x);
+			assertEquals(5, rectangle.y);
+		}
+		// insets
+		assertEquals(new Insets(0, 0, 0, 0), gridInfo.getInsets());
+		// check "virtual" feedback sizes
+		{
+			assertEquals(25, gridInfo.getVirtualColumnSize());
+			assertEquals(5, gridInfo.getVirtualColumnGap());
+			assertEquals(25, gridInfo.getVirtualRowSize());
+			assertEquals(5, gridInfo.getVirtualRowGap());
+		}
+		// check occupied cells
+		{
+			assertSame(button_0, gridInfo.getOccupied(0, 0));
+			assertSame(button_1, gridInfo.getOccupied(1, 1));
+			assertSame(button_2, gridInfo.getOccupied(0, 2));
+			assertSame(button_2, gridInfo.getOccupied(1, 2));
+			assertNull(gridInfo.getOccupied(1, 0));
+			assertNull(gridInfo.getOccupied(0, 1));
+		}
+	}
 
-  /**
-   * Test for {@link IGridInfo} when there are no controls.
-   */
-  public void test_gridInfo_empty() throws Exception {
-    parse(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "</Shell>");
-    refresh();
-    TableWrapLayoutInfo layout = getObjectByName("layout");
-    //
-    IGridInfo gridInfo = layout.getGridInfo();
-    assertEquals(0, gridInfo.getRowIntervals().length);
-    assertEquals(0, gridInfo.getColumnIntervals().length);
-  }
+	/**
+	 * Test for {@link IGridInfo} when there are no controls.
+	 */
+	public void test_gridInfo_empty() throws Exception {
+		parse(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"</Shell>");
+		refresh();
+		TableWrapLayoutInfo layout = getObjectByName("layout");
+		//
+		IGridInfo gridInfo = layout.getGridInfo();
+		assertEquals(0, gridInfo.getRowIntervals().length);
+		assertEquals(0, gridInfo.getColumnIntervals().length);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // setCells()
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_setCells_horizontalSpan() throws Exception {
-    parse(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_0'/>",
-        "  <Label/>",
-        "  <Label/>",
-        "  <Button wbp:name='button_1'/>",
-        "</Shell>");
-    refresh();
-    TableWrapLayoutInfo layout = getObjectByName("layout");
-    ControlInfo button = getObjectByName("button_0");
-    TableWrapDataInfo layoutData = layout.getTableWrapData(button);
-    // check initial TableWrapData
-    {
-      assertEquals(0, getInt(layoutData, "x"));
-      assertEquals(0, getInt(layoutData, "y"));
-      assertEquals(1, getInt(layoutData, "width"));
-      assertEquals(1, getInt(layoutData, "height"));
-    }
-    // set horizontal span
-    layout.command_setCells(button, new Rectangle(0, 0, 2, 1), true);
-    assertXML(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_0'>",
-        "    <Button.layoutData>",
-        "      <f:TableWrapData colspan='2'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "  <Label/>",
-        "  <Button wbp:name='button_1'/>",
-        "</Shell>");
-    // check TableWrapData
-    {
-      assertEquals(0, getInt(layoutData, "x"));
-      assertEquals(0, getInt(layoutData, "y"));
-      assertEquals(2, getInt(layoutData, "width"));
-      assertEquals(1, getInt(layoutData, "height"));
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// setCells()
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_setCells_horizontalSpan() throws Exception {
+		parse(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_0'/>",
+				"  <Label/>",
+				"  <Label/>",
+				"  <Button wbp:name='button_1'/>",
+				"</Shell>");
+		refresh();
+		TableWrapLayoutInfo layout = getObjectByName("layout");
+		ControlInfo button = getObjectByName("button_0");
+		TableWrapDataInfo layoutData = layout.getTableWrapData(button);
+		// check initial TableWrapData
+		{
+			assertEquals(0, getInt(layoutData, "x"));
+			assertEquals(0, getInt(layoutData, "y"));
+			assertEquals(1, getInt(layoutData, "width"));
+			assertEquals(1, getInt(layoutData, "height"));
+		}
+		// set horizontal span
+		layout.command_setCells(button, new Rectangle(0, 0, 2, 1), true);
+		assertXML(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_0'>",
+				"    <Button.layoutData>",
+				"      <f:TableWrapData colspan='2'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"  <Label/>",
+				"  <Button wbp:name='button_1'/>",
+				"</Shell>");
+		// check TableWrapData
+		{
+			assertEquals(0, getInt(layoutData, "x"));
+			assertEquals(0, getInt(layoutData, "y"));
+			assertEquals(2, getInt(layoutData, "width"));
+			assertEquals(1, getInt(layoutData, "height"));
+		}
+	}
 
-  public void test_setCells_horizontalSpan2() throws Exception {
-    parse(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_0'>",
-        "    <Button.layoutData>",
-        "      <f:TableWrapData colspan='2'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "  <Label/>",
-        "  <Button wbp:name='button_1'/>",
-        "</Shell>");
-    refresh();
-    TableWrapLayoutInfo layout = getObjectByName("layout");
-    ControlInfo button = getObjectByName("button_0");
-    //
-    layout.command_setCells(button, new Rectangle(0, 0, 1, 1), true);
-    assertXML(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_0'/>",
-        "  <Label/>",
-        "  <Label/>",
-        "  <Button wbp:name='button_1'/>",
-        "</Shell>");
-  }
+	public void test_setCells_horizontalSpan2() throws Exception {
+		parse(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_0'>",
+				"    <Button.layoutData>",
+				"      <f:TableWrapData colspan='2'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"  <Label/>",
+				"  <Button wbp:name='button_1'/>",
+				"</Shell>");
+		refresh();
+		TableWrapLayoutInfo layout = getObjectByName("layout");
+		ControlInfo button = getObjectByName("button_0");
+		//
+		layout.command_setCells(button, new Rectangle(0, 0, 1, 1), true);
+		assertXML(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_0'/>",
+				"  <Label/>",
+				"  <Label/>",
+				"  <Button wbp:name='button_1'/>",
+				"</Shell>");
+	}
 
-  public void test_setCells_verticalSpan() throws Exception {
-    parse(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_0'/>",
-        "  <Label/>",
-        "  <Label/>",
-        "  <Button wbp:name='button_1'/>",
-        "</Shell>");
-    refresh();
-    TableWrapLayoutInfo layout = getObjectByName("layout");
-    ControlInfo button = getObjectByName("button_0");
-    TableWrapDataInfo layoutData = layout.getTableWrapData(button);
-    // check initial TableWrapData
-    {
-      assertEquals(0, getInt(layoutData, "x"));
-      assertEquals(0, getInt(layoutData, "y"));
-      assertEquals(1, getInt(layoutData, "width"));
-      assertEquals(1, getInt(layoutData, "height"));
-    }
-    // set vertical span
-    layout.command_setCells(button, new Rectangle(0, 0, 1, 2), true);
-    assertXML(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_0'>",
-        "    <Button.layoutData>",
-        "      <f:TableWrapData rowspan='2'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "  <Label/>",
-        "  <Button wbp:name='button_1'/>",
-        "</Shell>");
-    // check TableWrapData
-    {
-      assertEquals(0, getInt(layoutData, "x"));
-      assertEquals(0, getInt(layoutData, "y"));
-      assertEquals(1, getInt(layoutData, "width"));
-      assertEquals(2, getInt(layoutData, "height"));
-    }
-  }
+	public void test_setCells_verticalSpan() throws Exception {
+		parse(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_0'/>",
+				"  <Label/>",
+				"  <Label/>",
+				"  <Button wbp:name='button_1'/>",
+				"</Shell>");
+		refresh();
+		TableWrapLayoutInfo layout = getObjectByName("layout");
+		ControlInfo button = getObjectByName("button_0");
+		TableWrapDataInfo layoutData = layout.getTableWrapData(button);
+		// check initial TableWrapData
+		{
+			assertEquals(0, getInt(layoutData, "x"));
+			assertEquals(0, getInt(layoutData, "y"));
+			assertEquals(1, getInt(layoutData, "width"));
+			assertEquals(1, getInt(layoutData, "height"));
+		}
+		// set vertical span
+		layout.command_setCells(button, new Rectangle(0, 0, 1, 2), true);
+		assertXML(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_0'>",
+				"    <Button.layoutData>",
+				"      <f:TableWrapData rowspan='2'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"  <Label/>",
+				"  <Button wbp:name='button_1'/>",
+				"</Shell>");
+		// check TableWrapData
+		{
+			assertEquals(0, getInt(layoutData, "x"));
+			assertEquals(0, getInt(layoutData, "y"));
+			assertEquals(1, getInt(layoutData, "width"));
+			assertEquals(2, getInt(layoutData, "height"));
+		}
+	}
 
-  public void test_setCells_verticalSpan2() throws Exception {
-    parse(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_0'>",
-        "    <Button.layoutData>",
-        "      <f:TableWrapData rowspan='2'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "  <Label/>",
-        "  <Button wbp:name='button_1'/>",
-        "</Shell>");
-    refresh();
-    TableWrapLayoutInfo layout = getObjectByName("layout");
-    ControlInfo button = getObjectByName("button_0");
-    //
-    layout.command_setCells(button, new Rectangle(0, 0, 1, 1), true);
-    assertXML(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_0'/>",
-        "  <Label/>",
-        "  <Label/>",
-        "  <Button wbp:name='button_1'/>",
-        "</Shell>");
-  }
+	public void test_setCells_verticalSpan2() throws Exception {
+		parse(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_0'>",
+				"    <Button.layoutData>",
+				"      <f:TableWrapData rowspan='2'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"  <Label/>",
+				"  <Button wbp:name='button_1'/>",
+				"</Shell>");
+		refresh();
+		TableWrapLayoutInfo layout = getObjectByName("layout");
+		ControlInfo button = getObjectByName("button_0");
+		//
+		layout.command_setCells(button, new Rectangle(0, 0, 1, 1), true);
+		assertXML(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_0'/>",
+				"  <Label/>",
+				"  <Label/>",
+				"  <Button wbp:name='button_1'/>",
+				"</Shell>");
+	}
 
-  public void test_setCells_move() throws Exception {
-    parse(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_0'/>",
-        "  <Label/>",
-        "  <Button wbp:name='button_1'/>",
-        "  <Button wbp:name='button_2'/>",
-        "</Shell>");
-    refresh();
-    TableWrapLayoutInfo layout = getObjectByName("layout");
-    ControlInfo button = getObjectByName("button_0");
-    //
-    layout.command_setCells(button, new Rectangle(1, 0, 1, 1), true);
-    assertXML(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Label/>",
-        "  <Button wbp:name='button_0'/>",
-        "  <Button wbp:name='button_1'/>",
-        "  <Button wbp:name='button_2'/>",
-        "</Shell>");
-  }
+	public void test_setCells_move() throws Exception {
+		parse(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_0'/>",
+				"  <Label/>",
+				"  <Button wbp:name='button_1'/>",
+				"  <Button wbp:name='button_2'/>",
+				"</Shell>");
+		refresh();
+		TableWrapLayoutInfo layout = getObjectByName("layout");
+		ControlInfo button = getObjectByName("button_0");
+		//
+		layout.command_setCells(button, new Rectangle(1, 0, 1, 1), true);
+		assertXML(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Label/>",
+				"  <Button wbp:name='button_0'/>",
+				"  <Button wbp:name='button_1'/>",
+				"  <Button wbp:name='button_2'/>",
+				"</Shell>");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Delete
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * When we delete {@link ControlInfo}, it should be replaced with filler.
-   */
-  public void test_delete_replaceWithFillers() throws Exception {
-    parse(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_0'/>",
-        "  <Label/>",
-        "  <Button wbp:name='button_1'/>",
-        "  <Button wbp:name='button_2'/>",
-        "</Shell>");
-    refresh();
-    ControlInfo button = getObjectByName("button_1");
-    //
-    button.delete();
-    assertXML(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_0'/>",
-        "  <Label/>",
-        "  <Label/>",
-        "  <Button wbp:name='button_2'/>",
-        "</Shell>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Delete
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * When we delete {@link ControlInfo}, it should be replaced with filler.
+	 */
+	public void test_delete_replaceWithFillers() throws Exception {
+		parse(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_0'/>",
+				"  <Label/>",
+				"  <Button wbp:name='button_1'/>",
+				"  <Button wbp:name='button_2'/>",
+				"</Shell>");
+		refresh();
+		ControlInfo button = getObjectByName("button_1");
+		//
+		button.delete();
+		assertXML(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_0'/>",
+				"  <Label/>",
+				"  <Label/>",
+				"  <Button wbp:name='button_2'/>",
+				"</Shell>");
+	}
 
-  /**
-   * When we delete column, we should keep at least one column.
-   */
-  public void test_delete_keepOneColumn() throws Exception {
-    parse(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    refresh();
-    ControlInfo button = getObjectByName("button");
-    //
-    button.delete();
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout/>",
-        "  </Shell.layout>",
-        "</Shell>");
-  }
+	/**
+	 * When we delete column, we should keep at least one column.
+	 */
+	public void test_delete_keepOneColumn() throws Exception {
+		parse(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		refresh();
+		ControlInfo button = getObjectByName("button");
+		//
+		button.delete();
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout/>",
+				"  </Shell.layout>",
+				"</Shell>");
+	}
 
-  public void test_delete_removeEmptyDimensions() throws Exception {
-    parse(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_0'/>",
-        "  <Label/>",
-        "  <Label/>",
-        "  <Label/>",
-        "  <Label/>",
-        "  <Button wbp:name='button_1'/>",
-        "</Shell>");
-    refresh();
-    TableWrapLayoutInfo layout = getObjectByName("layout");
-    ControlInfo button = getObjectByName("button_1");
-    //
-    {
-      TableWrapDataInfo layoutData = layout.getTableWrapData(button);
-      assertEquals(1, getInt(layoutData, "x"));
-      assertEquals(2, getInt(layoutData, "y"));
-    }
-    //
-    button.delete();
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_0'/>",
-        "</Shell>");
-  }
+	public void test_delete_removeEmptyDimensions() throws Exception {
+		parse(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_0'/>",
+				"  <Label/>",
+				"  <Label/>",
+				"  <Label/>",
+				"  <Label/>",
+				"  <Button wbp:name='button_1'/>",
+				"</Shell>");
+		refresh();
+		TableWrapLayoutInfo layout = getObjectByName("layout");
+		ControlInfo button = getObjectByName("button_1");
+		//
+		{
+			TableWrapDataInfo layoutData = layout.getTableWrapData(button);
+			assertEquals(1, getInt(layoutData, "x"));
+			assertEquals(2, getInt(layoutData, "y"));
+		}
+		//
+		button.delete();
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_0'/>",
+				"</Shell>");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // CREATE
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_CREATE_inEmptyCell() throws Exception {
-    parse(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button text='0'/>",
-        "  <Label/>",
-        "  <Label />",
-        "  <Button text='1'/>",
-        "</Shell>");
-    refresh();
-    TableWrapLayoutInfo layout = getObjectByName("layout");
-    //
-    ControlInfo newButton = createButton();
-    layout.command_CREATE(newButton, 1, false, 0, false);
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button text='0'/>",
-        "  <Button/>",
-        "  <Label />",
-        "  <Button text='1'/>",
-        "</Shell>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// CREATE
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_CREATE_inEmptyCell() throws Exception {
+		parse(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button text='0'/>",
+				"  <Label/>",
+				"  <Label />",
+				"  <Button text='1'/>",
+				"</Shell>");
+		refresh();
+		TableWrapLayoutInfo layout = getObjectByName("layout");
+		//
+		ControlInfo newButton = createButton();
+		layout.command_CREATE(newButton, 1, false, 0, false);
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button text='0'/>",
+				"  <Button/>",
+				"  <Label />",
+				"  <Button text='1'/>",
+				"</Shell>");
+	}
 
-  public void test_CREATE_insertRow() throws Exception {
-    parse(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button text='0'/>",
-        "  <Label />",
-        "  <Label  />",
-        "  <Button text='1'/>",
-        "</Shell>");
-    refresh();
-    TableWrapLayoutInfo layout = getObjectByName("layout");
-    //
-    ControlInfo newButton = createButton();
-    layout.command_CREATE(newButton, 1, false, 1, true);
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button text='0'/>",
-        "  <Label />",
-        "  <Label/>",
-        "  <Button/>",
-        "  <Label  />",
-        "  <Button text='1'/>",
-        "</Shell>");
-  }
+	public void test_CREATE_insertRow() throws Exception {
+		parse(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button text='0'/>",
+				"  <Label />",
+				"  <Label  />",
+				"  <Button text='1'/>",
+				"</Shell>");
+		refresh();
+		TableWrapLayoutInfo layout = getObjectByName("layout");
+		//
+		ControlInfo newButton = createButton();
+		layout.command_CREATE(newButton, 1, false, 1, true);
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button text='0'/>",
+				"  <Label />",
+				"  <Label/>",
+				"  <Button/>",
+				"  <Label  />",
+				"  <Button text='1'/>",
+				"</Shell>");
+	}
 
-  public void test_CREATE_insertColumn() throws Exception {
-    parse(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button text='0'/>",
-        "  <Label />",
-        "  <Label  />",
-        "  <Button text='1'/>",
-        "</Shell>");
-    refresh();
-    TableWrapLayoutInfo layout = getObjectByName("layout");
-    //
-    ControlInfo newButton = createButton();
-    layout.command_CREATE(newButton, 1, true, 0, false);
-    assertXML(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout' numColumns='3'/>",
-        "  </Shell.layout>",
-        "  <Button text='0'/>",
-        "  <Button/>",
-        "  <Label />",
-        "  <Label  />",
-        "  <Label/>",
-        "  <Button text='1'/>",
-        "</Shell>");
-  }
+	public void test_CREATE_insertColumn() throws Exception {
+		parse(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button text='0'/>",
+				"  <Label />",
+				"  <Label  />",
+				"  <Button text='1'/>",
+				"</Shell>");
+		refresh();
+		TableWrapLayoutInfo layout = getObjectByName("layout");
+		//
+		ControlInfo newButton = createButton();
+		layout.command_CREATE(newButton, 1, true, 0, false);
+		assertXML(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout' numColumns='3'/>",
+				"  </Shell.layout>",
+				"  <Button text='0'/>",
+				"  <Button/>",
+				"  <Label />",
+				"  <Label  />",
+				"  <Label/>",
+				"  <Button text='1'/>",
+				"</Shell>");
+	}
 
-  public void test_CREATE_insertColumnRow() throws Exception {
-    parse(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Button text='0'/>",
-        "</Shell>");
-    refresh();
-    TableWrapLayoutInfo layout = getObjectByName("layout");
-    //
-    ControlInfo newButton = createButton();
-    layout.command_CREATE(newButton, 0, true, 0, true);
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button/>",
-        "  <Label/>",
-        "  <Label/>",
-        "  <Button text='0'/>",
-        "</Shell>");
-    // delete - should return in initial state
-    newButton.delete();
-    assertXML(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Button text='0'/>",
-        "</Shell>");
-  }
+	public void test_CREATE_insertColumnRow() throws Exception {
+		parse(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Button text='0'/>",
+				"</Shell>");
+		refresh();
+		TableWrapLayoutInfo layout = getObjectByName("layout");
+		//
+		ControlInfo newButton = createButton();
+		layout.command_CREATE(newButton, 0, true, 0, true);
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button/>",
+				"  <Label/>",
+				"  <Label/>",
+				"  <Button text='0'/>",
+				"</Shell>");
+		// delete - should return in initial state
+		newButton.delete();
+		assertXML(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Button text='0'/>",
+				"</Shell>");
+	}
 
-  public void test_CREATE_appendRow() throws Exception {
-    parse(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Button text='0'/>",
-        "</Shell>");
-    refresh();
-    TableWrapLayoutInfo layout = getObjectByName("layout");
-    //
-    ControlInfo newButton = createButton();
-    layout.command_CREATE(newButton, 0, false, 2, false);
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Button text='0'/>",
-        "  <Label/>",
-        "  <Button/>",
-        "</Shell>");
-  }
+	public void test_CREATE_appendRow() throws Exception {
+		parse(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Button text='0'/>",
+				"</Shell>");
+		refresh();
+		TableWrapLayoutInfo layout = getObjectByName("layout");
+		//
+		ControlInfo newButton = createButton();
+		layout.command_CREATE(newButton, 0, false, 2, false);
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Button text='0'/>",
+				"  <Label/>",
+				"  <Button/>",
+				"</Shell>");
+	}
 
-  public void test_CREATE_appendColumn() throws Exception {
-    parse(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Button text='0'/>",
-        "</Shell>");
-    refresh();
-    TableWrapLayoutInfo layout = getObjectByName("layout");
-    //
-    ControlInfo newButton = createButton();
-    layout.command_CREATE(newButton, 2, false, 0, false);
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout' numColumns='3'/>",
-        "  </Shell.layout>",
-        "  <Button text='0'/>",
-        "  <Label/>",
-        "  <Button/>",
-        "</Shell>");
-  }
+	public void test_CREATE_appendColumn() throws Exception {
+		parse(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Button text='0'/>",
+				"</Shell>");
+		refresh();
+		TableWrapLayoutInfo layout = getObjectByName("layout");
+		//
+		ControlInfo newButton = createButton();
+		layout.command_CREATE(newButton, 2, false, 0, false);
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout' numColumns='3'/>",
+				"  </Shell.layout>",
+				"  <Button text='0'/>",
+				"  <Label/>",
+				"  <Button/>",
+				"</Shell>");
+	}
 
-  public void test_CREATE_appendColumnRow() throws Exception {
-    parse(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Button text='0'/>",
-        "</Shell>");
-    refresh();
-    TableWrapLayoutInfo layout = getObjectByName("layout");
-    //
-    ControlInfo newButton = createButton();
-    layout.command_CREATE(newButton, 1, false, 1, false);
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button text='0'/>",
-        "  <Label/>",
-        "  <Label/>",
-        "  <Button/>",
-        "</Shell>");
-  }
+	public void test_CREATE_appendColumnRow() throws Exception {
+		parse(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Button text='0'/>",
+				"</Shell>");
+		refresh();
+		TableWrapLayoutInfo layout = getObjectByName("layout");
+		//
+		ControlInfo newButton = createButton();
+		layout.command_CREATE(newButton, 1, false, 1, false);
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button text='0'/>",
+				"  <Label/>",
+				"  <Label/>",
+				"  <Button/>",
+				"</Shell>");
+	}
 
-  public void test_CREATE_insertColumnHorizontalSpan() throws Exception {
-    parse(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_0'>",
-        "    <Button.layoutData>",
-        "      <f:TableWrapData colspan='2'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "  <Button wbp:name='button_1'/>",
-        "  <Button wbp:name='button_2'/>",
-        "</Shell>");
-    refresh();
-    TableWrapLayoutInfo layout = getObjectByName("layout");
-    //
-    ControlInfo newButton = createButton();
-    layout.command_CREATE(newButton, 1, true, 1, false);
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout' numColumns='3'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_0'>",
-        "    <Button.layoutData>",
-        "      <f:TableWrapData colspan='3'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "  <Button wbp:name='button_1'/>",
-        "  <Button/>",
-        "  <Button wbp:name='button_2'/>",
-        "</Shell>");
-  }
+	public void test_CREATE_insertColumnHorizontalSpan() throws Exception {
+		parse(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_0'>",
+				"    <Button.layoutData>",
+				"      <f:TableWrapData colspan='2'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"  <Button wbp:name='button_1'/>",
+				"  <Button wbp:name='button_2'/>",
+				"</Shell>");
+		refresh();
+		TableWrapLayoutInfo layout = getObjectByName("layout");
+		//
+		ControlInfo newButton = createButton();
+		layout.command_CREATE(newButton, 1, true, 1, false);
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout' numColumns='3'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_0'>",
+				"    <Button.layoutData>",
+				"      <f:TableWrapData colspan='3'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"  <Button wbp:name='button_1'/>",
+				"  <Button/>",
+				"  <Button wbp:name='button_2'/>",
+				"</Shell>");
+	}
 
-  public void test_CREATE_insertRowVerticalSpan() throws Exception {
-    parse(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_0'>",
-        "    <Button.layoutData>",
-        "      <f:TableWrapData rowspan='2'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "  <Button wbp:name='button_1'/>",
-        "  <Button wbp:name='button_2'/>",
-        "</Shell>");
-    refresh();
-    TableWrapLayoutInfo layout = getObjectByName("layout");
-    //
-    ControlInfo newButton = createButton();
-    layout.command_CREATE(newButton, 1, false, 1, true);
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_0'>",
-        "    <Button.layoutData>",
-        "      <f:TableWrapData rowspan='3'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "  <Button wbp:name='button_1'/>",
-        "  <Button/>",
-        "  <Button wbp:name='button_2'/>",
-        "</Shell>");
-  }
+	public void test_CREATE_insertRowVerticalSpan() throws Exception {
+		parse(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_0'>",
+				"    <Button.layoutData>",
+				"      <f:TableWrapData rowspan='2'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"  <Button wbp:name='button_1'/>",
+				"  <Button wbp:name='button_2'/>",
+				"</Shell>");
+		refresh();
+		TableWrapLayoutInfo layout = getObjectByName("layout");
+		//
+		ControlInfo newButton = createButton();
+		layout.command_CREATE(newButton, 1, false, 1, true);
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_0'>",
+				"    <Button.layoutData>",
+				"      <f:TableWrapData rowspan='3'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"  <Button wbp:name='button_1'/>",
+				"  <Button/>",
+				"  <Button wbp:name='button_2'/>",
+				"</Shell>");
+	}
 
-  /**
-   * Test for parsing "not balanced" {@link TableWrapLayoutInfo} and adding into <code>null</code>
-   * cell.
-   */
-  public void test_CREATE_notBalanced() throws Exception {
-    parse(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Label/>",
-        "  <Label/>",
-        "  <Label/>",
-        "</Shell>");
-    refresh();
-    TableWrapLayoutInfo layout = getObjectByName("layout");
-    //
-    ControlInfo newButton = createButton();
-    layout.command_CREATE(newButton, 1, false, 1, false);
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Label/>",
-        "  <Label/>",
-        "  <Label/>",
-        "  <Button/>",
-        "</Shell>");
-  }
+	/**
+	 * Test for parsing "not balanced" {@link TableWrapLayoutInfo} and adding into <code>null</code>
+	 * cell.
+	 */
+	public void test_CREATE_notBalanced() throws Exception {
+		parse(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Label/>",
+				"  <Label/>",
+				"  <Label/>",
+				"</Shell>");
+		refresh();
+		TableWrapLayoutInfo layout = getObjectByName("layout");
+		//
+		ControlInfo newButton = createButton();
+		layout.command_CREATE(newButton, 1, false, 1, false);
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Label/>",
+				"  <Label/>",
+				"  <Label/>",
+				"  <Button/>",
+				"</Shell>");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Dimension operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_columnAccess() throws Exception {
-    parse(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_0'/>",
-        "  <Label/>",
-        "  <Button wbp:name='button_1'/>",
-        "  <Button wbp:name='button_2'/>",
-        "</Shell>");
-    refresh();
-    TableWrapLayoutInfo layout = getObjectByName("layout");
-    ControlInfo button_1 = getObjectByName("button_1");
-    final TableWrapColumnInfo<?> column = layout.getColumns().get(0);
-    // check initial values
-    assertEquals(0, column.getIndex());
-    assertEquals("left", column.getTitle());
-    assertFalse(column.getGrab());
-    assertEquals(TableWrapData.LEFT, column.getAlignment().intValue());
-    // flip grab
-    column.flipGrab();
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_0'>",
-        "    <Button.layoutData>",
-        "      <f:TableWrapData grabHorizontal='true'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "  <Label/>",
-        "  <Button wbp:name='button_1'>",
-        "    <Button.layoutData>",
-        "      <f:TableWrapData grabHorizontal='true'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "  <Button wbp:name='button_2'/>",
-        "</Shell>");
-    assertEquals("left, grab", column.getTitle());
-    // set alignment
-    ExecutionUtils.run(m_lastObject, new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        column.setAlignment(TableWrapData.FILL);
-      }
-    });
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_0'>",
-        "    <Button.layoutData>",
-        "      <f:TableWrapData grabHorizontal='true'"
-            + " align='(org.eclipse.ui.forms.widgets.TableWrapData).FILL'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "  <Label/>",
-        "  <Button wbp:name='button_1'>",
-        "    <Button.layoutData>",
-        "      <f:TableWrapData grabHorizontal='true'"
-            + " align='(org.eclipse.ui.forms.widgets.TableWrapData).FILL'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "  <Button wbp:name='button_2'/>",
-        "</Shell>");
-    assertEquals("fill, grab", column.getTitle());
-    // set different alignment for "0 x 1" button
-    {
-      layout.getTableWrapData(button_1).setHorizontalAlignment(TableWrapData.RIGHT);
-      assertNull(column.getAlignment());
-    }
-    // check other alignments
-    {
-      column.setAlignment(TableWrapData.CENTER);
-      assertEquals("center, grab", column.getTitle());
-      //
-      column.setAlignment(TableWrapData.RIGHT);
-      assertEquals("right, grab", column.getTitle());
-    }
-    // delete
-    column.delete();
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_2'/>",
-        "</Shell>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Dimension operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_columnAccess() throws Exception {
+		parse(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_0'/>",
+				"  <Label/>",
+				"  <Button wbp:name='button_1'/>",
+				"  <Button wbp:name='button_2'/>",
+				"</Shell>");
+		refresh();
+		TableWrapLayoutInfo layout = getObjectByName("layout");
+		ControlInfo button_1 = getObjectByName("button_1");
+		final TableWrapColumnInfo<?> column = layout.getColumns().get(0);
+		// check initial values
+		assertEquals(0, column.getIndex());
+		assertEquals("left", column.getTitle());
+		assertFalse(column.getGrab());
+		assertEquals(TableWrapData.LEFT, column.getAlignment().intValue());
+		// flip grab
+		column.flipGrab();
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_0'>",
+				"    <Button.layoutData>",
+				"      <f:TableWrapData grabHorizontal='true'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"  <Label/>",
+				"  <Button wbp:name='button_1'>",
+				"    <Button.layoutData>",
+				"      <f:TableWrapData grabHorizontal='true'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"  <Button wbp:name='button_2'/>",
+				"</Shell>");
+		assertEquals("left, grab", column.getTitle());
+		// set alignment
+		ExecutionUtils.run(m_lastObject, new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				column.setAlignment(TableWrapData.FILL);
+			}
+		});
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_0'>",
+				"    <Button.layoutData>",
+				"      <f:TableWrapData grabHorizontal='true'"
+						+ " align='(org.eclipse.ui.forms.widgets.TableWrapData).FILL'/>",
+						"    </Button.layoutData>",
+						"  </Button>",
+						"  <Label/>",
+						"  <Button wbp:name='button_1'>",
+						"    <Button.layoutData>",
+						"      <f:TableWrapData grabHorizontal='true'"
+								+ " align='(org.eclipse.ui.forms.widgets.TableWrapData).FILL'/>",
+								"    </Button.layoutData>",
+								"  </Button>",
+								"  <Button wbp:name='button_2'/>",
+				"</Shell>");
+		assertEquals("fill, grab", column.getTitle());
+		// set different alignment for "0 x 1" button
+		{
+			layout.getTableWrapData(button_1).setHorizontalAlignment(TableWrapData.RIGHT);
+			assertNull(column.getAlignment());
+		}
+		// check other alignments
+		{
+			column.setAlignment(TableWrapData.CENTER);
+			assertEquals("center, grab", column.getTitle());
+			//
+			column.setAlignment(TableWrapData.RIGHT);
+			assertEquals("right, grab", column.getTitle());
+		}
+		// delete
+		column.delete();
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_2'/>",
+				"</Shell>");
+	}
 
-  public void test_rowAccess() throws Exception {
-    parse(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_0'/>",
-        "  <Label/>",
-        "  <Button wbp:name='button_1'/>",
-        "  <Button wbp:name='button_2'/>",
-        "</Shell>");
-    refresh();
-    TableWrapLayoutInfo layout = getObjectByName("layout");
-    ControlInfo button_1 = getObjectByName("button_1");
-    final TableWrapRowInfo<?> row = layout.getRows().get(1);
-    // check initial values
-    assertEquals(1, row.getIndex());
-    assertEquals("top", row.getTitle());
-    assertFalse(row.getGrab());
-    assertEquals(TableWrapData.TOP, row.getAlignment().intValue());
-    // flip grab
-    row.flipGrab();
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_0'/>",
-        "  <Label/>",
-        "  <Button wbp:name='button_1'>",
-        "    <Button.layoutData>",
-        "      <f:TableWrapData grabVertical='true'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "  <Button wbp:name='button_2'>",
-        "    <Button.layoutData>",
-        "      <f:TableWrapData grabVertical='true'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "</Shell>");
-    assertEquals("top, grab", row.getTitle());
-    // set alignment
-    ExecutionUtils.run(m_lastObject, new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        row.setAlignment(TableWrapData.FILL);
-      }
-    });
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_0'/>",
-        "  <Label/>",
-        "  <Button wbp:name='button_1'>",
-        "    <Button.layoutData>",
-        "      <f:TableWrapData grabVertical='true'"
-            + " valign='(org.eclipse.ui.forms.widgets.TableWrapData).FILL'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "  <Button wbp:name='button_2'>",
-        "    <Button.layoutData>",
-        "      <f:TableWrapData grabVertical='true'"
-            + " valign='(org.eclipse.ui.forms.widgets.TableWrapData).FILL'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "</Shell>");
-    assertEquals("fill, grab", row.getTitle());
-    // set different alignment for "0 x 1" button
-    {
-      layout.getTableWrapData(button_1).setVerticalAlignment(TableWrapData.BOTTOM);
-      assertNull(row.getAlignment());
-    }
-    // check other alignments
-    {
-      row.setAlignment(TableWrapData.TOP);
-      assertEquals("top, grab", row.getTitle());
-      //
-      row.setAlignment(TableWrapData.MIDDLE);
-      assertEquals("middle, grab", row.getTitle());
-      //
-      row.setAlignment(TableWrapData.BOTTOM);
-      assertEquals("bottom, grab", row.getTitle());
-    }
-    // delete
-    row.delete();
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_0'/>",
-        "</Shell>");
-  }
+	public void test_rowAccess() throws Exception {
+		parse(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_0'/>",
+				"  <Label/>",
+				"  <Button wbp:name='button_1'/>",
+				"  <Button wbp:name='button_2'/>",
+				"</Shell>");
+		refresh();
+		TableWrapLayoutInfo layout = getObjectByName("layout");
+		ControlInfo button_1 = getObjectByName("button_1");
+		final TableWrapRowInfo<?> row = layout.getRows().get(1);
+		// check initial values
+		assertEquals(1, row.getIndex());
+		assertEquals("top", row.getTitle());
+		assertFalse(row.getGrab());
+		assertEquals(TableWrapData.TOP, row.getAlignment().intValue());
+		// flip grab
+		row.flipGrab();
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_0'/>",
+				"  <Label/>",
+				"  <Button wbp:name='button_1'>",
+				"    <Button.layoutData>",
+				"      <f:TableWrapData grabVertical='true'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"  <Button wbp:name='button_2'>",
+				"    <Button.layoutData>",
+				"      <f:TableWrapData grabVertical='true'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"</Shell>");
+		assertEquals("top, grab", row.getTitle());
+		// set alignment
+		ExecutionUtils.run(m_lastObject, new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				row.setAlignment(TableWrapData.FILL);
+			}
+		});
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_0'/>",
+				"  <Label/>",
+				"  <Button wbp:name='button_1'>",
+				"    <Button.layoutData>",
+				"      <f:TableWrapData grabVertical='true'"
+						+ " valign='(org.eclipse.ui.forms.widgets.TableWrapData).FILL'/>",
+						"    </Button.layoutData>",
+						"  </Button>",
+						"  <Button wbp:name='button_2'>",
+						"    <Button.layoutData>",
+						"      <f:TableWrapData grabVertical='true'"
+								+ " valign='(org.eclipse.ui.forms.widgets.TableWrapData).FILL'/>",
+								"    </Button.layoutData>",
+								"  </Button>",
+				"</Shell>");
+		assertEquals("fill, grab", row.getTitle());
+		// set different alignment for "0 x 1" button
+		{
+			layout.getTableWrapData(button_1).setVerticalAlignment(TableWrapData.BOTTOM);
+			assertNull(row.getAlignment());
+		}
+		// check other alignments
+		{
+			row.setAlignment(TableWrapData.TOP);
+			assertEquals("top, grab", row.getTitle());
+			//
+			row.setAlignment(TableWrapData.MIDDLE);
+			assertEquals("middle, grab", row.getTitle());
+			//
+			row.setAlignment(TableWrapData.BOTTOM);
+			assertEquals("bottom, grab", row.getTitle());
+		}
+		// delete
+		row.delete();
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_0'/>",
+				"</Shell>");
+	}
 
-  public void test_deleteColumn() throws Exception {
-    parse(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout' numColumns='3'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_0'>",
-        "    <Button.layoutData>",
-        "      <f:TableWrapData colspan='3'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "  <Button wbp:name='button_1'/>",
-        "  <Button wbp:name='button_2'/>",
-        "  <Button wbp:name='button_3'/>",
-        "</Shell>");
-    refresh();
-    TableWrapLayoutInfo layout = getObjectByName("layout");
-    //
-    try {
-      m_lastObject.startEdit();
-      layout.command_deleteColumn(1, true);
-    } finally {
-      m_lastObject.endEdit();
-    }
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_0'>",
-        "    <Button.layoutData>",
-        "      <f:TableWrapData colspan='2'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "  <Button wbp:name='button_1'/>",
-        "  <Button wbp:name='button_3'/>",
-        "</Shell>");
-  }
+	public void test_deleteColumn() throws Exception {
+		parse(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout' numColumns='3'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_0'>",
+				"    <Button.layoutData>",
+				"      <f:TableWrapData colspan='3'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"  <Button wbp:name='button_1'/>",
+				"  <Button wbp:name='button_2'/>",
+				"  <Button wbp:name='button_3'/>",
+				"</Shell>");
+		refresh();
+		TableWrapLayoutInfo layout = getObjectByName("layout");
+		//
+		try {
+			m_lastObject.startEdit();
+			layout.command_deleteColumn(1, true);
+		} finally {
+			m_lastObject.endEdit();
+		}
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_0'>",
+				"    <Button.layoutData>",
+				"      <f:TableWrapData colspan='2'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"  <Button wbp:name='button_1'/>",
+				"  <Button wbp:name='button_3'/>",
+				"</Shell>");
+	}
 
-  public void test_deleteColumn_deleteAlsoEmptyRows() throws Exception {
-    parse(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_0'/>",
-        "  <Label/>",
-        "  <Label/>",
-        "  <Button wbp:name='button_1'/>",
-        "</Shell>");
-    refresh();
-    TableWrapLayoutInfo layout = getObjectByName("layout");
-    //
-    try {
-      m_lastObject.startEdit();
-      layout.command_deleteColumn(1, true);
-    } finally {
-      m_lastObject.endEdit();
-    }
-    assertXML(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_0'/>",
-        "</Shell>");
-  }
+	public void test_deleteColumn_deleteAlsoEmptyRows() throws Exception {
+		parse(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_0'/>",
+				"  <Label/>",
+				"  <Label/>",
+				"  <Button wbp:name='button_1'/>",
+				"</Shell>");
+		refresh();
+		TableWrapLayoutInfo layout = getObjectByName("layout");
+		//
+		try {
+			m_lastObject.startEdit();
+			layout.command_deleteColumn(1, true);
+		} finally {
+			m_lastObject.endEdit();
+		}
+		assertXML(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_0'/>",
+				"</Shell>");
+	}
 
-  public void test_deleteRow() throws Exception {
-    parse(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_0'>",
-        "    <Button.layoutData>",
-        "      <f:TableWrapData rowspan='3'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "  <Button wbp:name='button_1'/>",
-        "  <Button wbp:name='button_2'/>",
-        "  <Button wbp:name='button_3'/>",
-        "</Shell>");
-    refresh();
-    TableWrapLayoutInfo layout = getObjectByName("layout");
-    //
-    try {
-      m_lastObject.startEdit();
-      layout.command_deleteRow(1, true);
-    } finally {
-      m_lastObject.endEdit();
-    }
-    assertXML(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_0'>",
-        "    <Button.layoutData>",
-        "      <f:TableWrapData rowspan='2'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "  <Button wbp:name='button_1'/>",
-        "  <Button wbp:name='button_3'/>",
-        "</Shell>");
-  }
+	public void test_deleteRow() throws Exception {
+		parse(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_0'>",
+				"    <Button.layoutData>",
+				"      <f:TableWrapData rowspan='3'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"  <Button wbp:name='button_1'/>",
+				"  <Button wbp:name='button_2'/>",
+				"  <Button wbp:name='button_3'/>",
+				"</Shell>");
+		refresh();
+		TableWrapLayoutInfo layout = getObjectByName("layout");
+		//
+		try {
+			m_lastObject.startEdit();
+			layout.command_deleteRow(1, true);
+		} finally {
+			m_lastObject.endEdit();
+		}
+		assertXML(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_0'>",
+				"    <Button.layoutData>",
+				"      <f:TableWrapData rowspan='2'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"  <Button wbp:name='button_1'/>",
+				"  <Button wbp:name='button_3'/>",
+				"</Shell>");
+	}
 
-  public void test_deleteRow_deleteAlsoEmptyColumns() throws Exception {
-    parse(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_0'/>",
-        "  <Label/>",
-        "  <Label/>",
-        "  <Button wbp:name='button_1'/>",
-        "</Shell>");
-    refresh();
-    TableWrapLayoutInfo layout = getObjectByName("layout");
-    //
-    try {
-      m_lastObject.startEdit();
-      layout.command_deleteRow(1, true);
-    } finally {
-      m_lastObject.endEdit();
-    }
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_0'/>",
-        "</Shell>");
-  }
+	public void test_deleteRow_deleteAlsoEmptyColumns() throws Exception {
+		parse(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_0'/>",
+				"  <Label/>",
+				"  <Label/>",
+				"  <Button wbp:name='button_1'/>",
+				"</Shell>");
+		refresh();
+		TableWrapLayoutInfo layout = getObjectByName("layout");
+		//
+		try {
+			m_lastObject.startEdit();
+			layout.command_deleteRow(1, true);
+		} finally {
+			m_lastObject.endEdit();
+		}
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_0'/>",
+				"</Shell>");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // MOVE COLUMN
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_MOVE_COLUMN_before() throws Exception {
-    parse(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_0'/>",
-        "  <Label/>",
-        "  <Label/>",
-        "  <Button wbp:name='button_1'/>",
-        "</Shell>");
-    refresh();
-    TableWrapLayoutInfo layout = getObjectByName("layout");
-    //
-    try {
-      layout.startEdit();
-      layout.command_MOVE_COLUMN(1, 0);
-    } finally {
-      layout.endEdit();
-    }
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Label/>",
-        "  <Button wbp:name='button_0'/>",
-        "  <Button wbp:name='button_1'/>",
-        "  <Label/>",
-        "</Shell>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// MOVE COLUMN
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_MOVE_COLUMN_before() throws Exception {
+		parse(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_0'/>",
+				"  <Label/>",
+				"  <Label/>",
+				"  <Button wbp:name='button_1'/>",
+				"</Shell>");
+		refresh();
+		TableWrapLayoutInfo layout = getObjectByName("layout");
+		//
+		try {
+			layout.startEdit();
+			layout.command_MOVE_COLUMN(1, 0);
+		} finally {
+			layout.endEdit();
+		}
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Label/>",
+				"  <Button wbp:name='button_0'/>",
+				"  <Button wbp:name='button_1'/>",
+				"  <Label/>",
+				"</Shell>");
+	}
 
-  public void test_MOVE_COLUMN_after() throws Exception {
-    parse(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_0'/>",
-        "  <Label/>",
-        "  <Label/>",
-        "  <Button wbp:name='button_1'/>",
-        "</Shell>");
-    refresh();
-    TableWrapLayoutInfo layout = getObjectByName("layout");
-    //
-    try {
-      layout.startEdit();
-      layout.command_MOVE_COLUMN(0, 2);
-    } finally {
-      layout.endEdit();
-    }
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Label/>",
-        "  <Button wbp:name='button_0'/>",
-        "  <Button wbp:name='button_1'/>",
-        "  <Label/>",
-        "</Shell>");
-  }
+	public void test_MOVE_COLUMN_after() throws Exception {
+		parse(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_0'/>",
+				"  <Label/>",
+				"  <Label/>",
+				"  <Button wbp:name='button_1'/>",
+				"</Shell>");
+		refresh();
+		TableWrapLayoutInfo layout = getObjectByName("layout");
+		//
+		try {
+			layout.startEdit();
+			layout.command_MOVE_COLUMN(0, 2);
+		} finally {
+			layout.endEdit();
+		}
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Label/>",
+				"  <Button wbp:name='button_0'/>",
+				"  <Button wbp:name='button_1'/>",
+				"  <Label/>",
+				"</Shell>");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // MOVE ROW
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_MOVE_ROW_before() throws Exception {
-    parse(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_0'/>",
-        "  <Label/>",
-        "  <Label/>",
-        "  <Button wbp:name='button_1'/>",
-        "</Shell>");
-    refresh();
-    TableWrapLayoutInfo layout = getObjectByName("layout");
-    //
-    try {
-      layout.startEdit();
-      layout.command_MOVE_ROW(1, 0);
-    } finally {
-      layout.endEdit();
-    }
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Label/>",
-        "  <Button wbp:name='button_1'/>",
-        "  <Button wbp:name='button_0'/>",
-        "  <Label/>",
-        "</Shell>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// MOVE ROW
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_MOVE_ROW_before() throws Exception {
+		parse(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_0'/>",
+				"  <Label/>",
+				"  <Label/>",
+				"  <Button wbp:name='button_1'/>",
+				"</Shell>");
+		refresh();
+		TableWrapLayoutInfo layout = getObjectByName("layout");
+		//
+		try {
+			layout.startEdit();
+			layout.command_MOVE_ROW(1, 0);
+		} finally {
+			layout.endEdit();
+		}
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Label/>",
+				"  <Button wbp:name='button_1'/>",
+				"  <Button wbp:name='button_0'/>",
+				"  <Label/>",
+				"</Shell>");
+	}
 
-  public void test_MOVE_ROW_after() throws Exception {
-    parse(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_0'/>",
-        "  <Label/>",
-        "  <Label/>",
-        "  <Button wbp:name='button_1'/>",
-        "</Shell>");
-    refresh();
-    TableWrapLayoutInfo layout = getObjectByName("layout");
-    //
-    try {
-      layout.startEdit();
-      layout.command_MOVE_ROW(0, 2);
-    } finally {
-      layout.endEdit();
-    }
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Label/>",
-        "  <Button wbp:name='button_1'/>",
-        "  <Button wbp:name='button_0'/>",
-        "  <Label/>",
-        "</Shell>");
-  }
+	public void test_MOVE_ROW_after() throws Exception {
+		parse(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_0'/>",
+				"  <Label/>",
+				"  <Label/>",
+				"  <Button wbp:name='button_1'/>",
+				"</Shell>");
+		refresh();
+		TableWrapLayoutInfo layout = getObjectByName("layout");
+		//
+		try {
+			layout.startEdit();
+			layout.command_MOVE_ROW(0, 2);
+		} finally {
+			layout.endEdit();
+		}
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Label/>",
+				"  <Button wbp:name='button_1'/>",
+				"  <Button wbp:name='button_0'/>",
+				"  <Label/>",
+				"</Shell>");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // MOVE
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_MOVE() throws Exception {
-    parse(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_0'/>",
-        "  <Label/>",
-        "  <Button wbp:name='button_1'/>",
-        "  <Button wbp:name='button_2'/>",
-        "</Shell>");
-    refresh();
-    TableWrapLayoutInfo layout = getObjectByName("layout");
-    ControlInfo button = getObjectByName("button_1");
-    //
-    layout.command_MOVE(button, 1, false, 0, false);
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_0'/>",
-        "  <Button wbp:name='button_1'/>",
-        "  <Label/>",
-        "  <Button wbp:name='button_2'/>",
-        "</Shell>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// MOVE
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_MOVE() throws Exception {
+		parse(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_0'/>",
+				"  <Label/>",
+				"  <Button wbp:name='button_1'/>",
+				"  <Button wbp:name='button_2'/>",
+				"</Shell>");
+		refresh();
+		TableWrapLayoutInfo layout = getObjectByName("layout");
+		ControlInfo button = getObjectByName("button_1");
+		//
+		layout.command_MOVE(button, 1, false, 0, false);
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_0'/>",
+				"  <Button wbp:name='button_1'/>",
+				"  <Label/>",
+				"  <Button wbp:name='button_2'/>",
+				"</Shell>");
+	}
 
-  public void test_MOVE_out() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout/>",
-        "  </Shell.layout>",
-        "  <Composite>",
-        "    <Composite.layout>",
-        "      <FillLayout wbp:name='layout'/>",
-        "    </Composite.layout>",
-        "  </Composite>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    refresh();
-    LayoutInfo layout = getObjectByName("layout");
-    ControlInfo button = getObjectByName("button");
-    //
-    layout.command_MOVE(button, null);
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout/>",
-        "  </Shell.layout>",
-        "  <Composite>",
-        "    <Composite.layout>",
-        "      <FillLayout wbp:name='layout'/>",
-        "    </Composite.layout>",
-        "    <Button wbp:name='button'/>",
-        "  </Composite>",
-        "</Shell>");
-  }
+	public void test_MOVE_out() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout/>",
+				"  </Shell.layout>",
+				"  <Composite>",
+				"    <Composite.layout>",
+				"      <FillLayout wbp:name='layout'/>",
+				"    </Composite.layout>",
+				"  </Composite>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		refresh();
+		LayoutInfo layout = getObjectByName("layout");
+		ControlInfo button = getObjectByName("button");
+		//
+		layout.command_MOVE(button, null);
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout/>",
+				"  </Shell.layout>",
+				"  <Composite>",
+				"    <Composite.layout>",
+				"      <FillLayout wbp:name='layout'/>",
+				"    </Composite.layout>",
+				"    <Button wbp:name='button'/>",
+				"  </Composite>",
+				"</Shell>");
+	}
 
-  public void test_MOVE_error_1() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout' numColumns='4'/>",
-        "  </Shell.layout>",
-        "  <Label/>",
-        "  <Label/>",
-        "  <Label/>",
-        "  <Label/>",
-        "  <Label/>",
-        "  <Label/>",
-        "  <Label/>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    refresh();
-    TableWrapLayoutInfo layout = getObjectByName("layout");
-    ControlInfo button = getObjectByName("button");
-    //
-    layout.command_MOVE(button, 1, false, 0, false);
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Label/>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-  }
+	public void test_MOVE_error_1() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout' numColumns='4'/>",
+				"  </Shell.layout>",
+				"  <Label/>",
+				"  <Label/>",
+				"  <Label/>",
+				"  <Label/>",
+				"  <Label/>",
+				"  <Label/>",
+				"  <Label/>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		refresh();
+		TableWrapLayoutInfo layout = getObjectByName("layout");
+		ControlInfo button = getObjectByName("button");
+		//
+		layout.command_MOVE(button, 1, false, 0, false);
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Label/>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+	}
 
-  public void test_MOVE_error_2() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout' numColumns='3'/>",
-        "  </Shell.layout>",
-        "  <Label/>",
-        "  <Label/>",
-        "  <Label/>",
-        "  <Label/>",
-        "  <Label/>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    refresh();
-    TableWrapLayoutInfo layout = getObjectByName("layout");
-    ControlInfo button = getObjectByName("button");
-    //
-    layout.command_MOVE(button, 0, false, 0, false);
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-  }
+	public void test_MOVE_error_2() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout' numColumns='3'/>",
+				"  </Shell.layout>",
+				"  <Label/>",
+				"  <Label/>",
+				"  <Label/>",
+				"  <Label/>",
+				"  <Label/>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		refresh();
+		TableWrapLayoutInfo layout = getObjectByName("layout");
+		ControlInfo button = getObjectByName("button");
+		//
+		layout.command_MOVE(button, 0, false, 0, false);
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ADD
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_ADD() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Composite>",
-        "    <Composite.layout>",
-        "      <RowLayout/>",
-        "    </Composite.layout>",
-        "    <Button wbp:name='button'/>",
-        "  </Composite>",
-        "</Shell>");
-    refresh();
-    TableWrapLayoutInfo layout = getObjectByName("layout");
-    ControlInfo button = getObjectByName("button");
-    //
-    layout.command_ADD(button, 0, false, 1, false);
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Composite>",
-        "    <Composite.layout>",
-        "      <RowLayout/>",
-        "    </Composite.layout>",
-        "  </Composite>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ADD
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_ADD() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Composite>",
+				"    <Composite.layout>",
+				"      <RowLayout/>",
+				"    </Composite.layout>",
+				"    <Button wbp:name='button'/>",
+				"  </Composite>",
+				"</Shell>");
+		refresh();
+		TableWrapLayoutInfo layout = getObjectByName("layout");
+		ControlInfo button = getObjectByName("button");
+		//
+		layout.command_ADD(button, 0, false, 1, false);
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Composite>",
+				"    <Composite.layout>",
+				"      <RowLayout/>",
+				"    </Composite.layout>",
+				"  </Composite>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Special cases
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_CREATE_noReference() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "</Shell>");
-    refresh();
-    TableWrapLayoutInfo layout = getObjectByName("layout");
-    //
-    ControlInfo newButton = createButton();
-    layout.command_CREATE(newButton, 0, false, 0, false);
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Button/>",
-        "</Shell>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Special cases
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_CREATE_noReference() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"</Shell>");
+		refresh();
+		TableWrapLayoutInfo layout = getObjectByName("layout");
+		//
+		ControlInfo newButton = createButton();
+		layout.command_CREATE(newButton, 0, false, 0, false);
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Button/>",
+				"</Shell>");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // "numColumns" property
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * There were problems when we increase/decrease number of columns using "numColumns" property.
-   */
-  public void test_numColumns_inc() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_1'/>",
-        "  <Button wbp:name='button_2'/>",
-        "  <Button wbp:name='button_3'/>",
-        "</Shell>");
-    refresh();
-    TableWrapLayoutInfo layout = getObjectByName("layout");
-    // initial state
-    assertEquals(2, layout.getColumns().size());
-    assertEquals(2, layout.getRows().size());
-    // numColumn = 3
-    layout.getPropertyByTitle("numColumns").setValue(3);
-    assertEquals(3, layout.getColumns().size());
-    assertEquals(1, layout.getRows().size());
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout' numColumns='3'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_1'/>",
-        "  <Button wbp:name='button_2'/>",
-        "  <Button wbp:name='button_3'/>",
-        "</Shell>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// "numColumns" property
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * There were problems when we increase/decrease number of columns using "numColumns" property.
+	 */
+	public void test_numColumns_inc() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_1'/>",
+				"  <Button wbp:name='button_2'/>",
+				"  <Button wbp:name='button_3'/>",
+				"</Shell>");
+		refresh();
+		TableWrapLayoutInfo layout = getObjectByName("layout");
+		// initial state
+		assertEquals(2, layout.getColumns().size());
+		assertEquals(2, layout.getRows().size());
+		// numColumn = 3
+		layout.getPropertyByTitle("numColumns").setValue(3);
+		assertEquals(3, layout.getColumns().size());
+		assertEquals(1, layout.getRows().size());
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout' numColumns='3'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_1'/>",
+				"  <Button wbp:name='button_2'/>",
+				"  <Button wbp:name='button_3'/>",
+				"</Shell>");
+	}
 
-  /**
-   * There were problems when we increase/decrease number of columns using "numColumns" property.
-   */
-  public void test_numColumns_dec() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout' numColumns='3'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_1'/>",
-        "  <Button wbp:name='button_2'/>",
-        "  <Button wbp:name='button_3'/>",
-        "</Shell>");
-    refresh();
-    TableWrapLayoutInfo layout = getObjectByName("layout");
-    // initial state
-    assertEquals(3, layout.getColumns().size());
-    assertEquals(1, layout.getRows().size());
-    // numColumn = 2
-    layout.getPropertyByTitle("numColumns").setValue(2);
-    assertEquals(2, layout.getColumns().size());
-    assertEquals(2, layout.getRows().size());
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_1'/>",
-        "  <Button wbp:name='button_2'/>",
-        "  <Button wbp:name='button_3'/>",
-        "</Shell>");
-  }
+	/**
+	 * There were problems when we increase/decrease number of columns using "numColumns" property.
+	 */
+	public void test_numColumns_dec() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout' numColumns='3'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_1'/>",
+				"  <Button wbp:name='button_2'/>",
+				"  <Button wbp:name='button_3'/>",
+				"</Shell>");
+		refresh();
+		TableWrapLayoutInfo layout = getObjectByName("layout");
+		// initial state
+		assertEquals(3, layout.getColumns().size());
+		assertEquals(1, layout.getRows().size());
+		// numColumn = 2
+		layout.getPropertyByTitle("numColumns").setValue(2);
+		assertEquals(2, layout.getColumns().size());
+		assertEquals(2, layout.getRows().size());
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <f:TableWrapLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_1'/>",
+				"  <Button wbp:name='button_2'/>",
+				"  <Button wbp:name='button_3'/>",
+				"</Shell>");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Delete layout
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test that when delete {@link TableWrapLayoutInfo}, fillers are also removed, because there are
-   * not controls that user wants.
-   */
-  public void test_DELETE_removeFillers() throws Exception {
-    CompositeInfo shell =
-        parse(
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <f:TableWrapLayout wbp:name='layout'/>",
-            "  </Shell.layout>",
-            "  <Label/>",
-            "  <Button/>",
-            "</Shell>");
-    refresh();
-    TableWrapLayoutInfo layout = getObjectByName("layout");
-    // initially 2 controls - filler and Button
-    assertThat(shell.getChildrenControls()).hasSize(2);
-    // after delete - only Button
-    layout.delete();
-    assertThat(shell.getChildrenControls()).hasSize(1);
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Button/>",
-        "</Shell>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Delete layout
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test that when delete {@link TableWrapLayoutInfo}, fillers are also removed, because there are
+	 * not controls that user wants.
+	 */
+	public void test_DELETE_removeFillers() throws Exception {
+		CompositeInfo shell =
+				parse(
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <f:TableWrapLayout wbp:name='layout'/>",
+						"  </Shell.layout>",
+						"  <Label/>",
+						"  <Button/>",
+						"</Shell>");
+		refresh();
+		TableWrapLayoutInfo layout = getObjectByName("layout");
+		// initially 2 controls - filler and Button
+		assertThat(shell.getChildrenControls()).hasSize(2);
+		// after delete - only Button
+		layout.delete();
+		assertThat(shell.getChildrenControls()).hasSize(1);
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Button/>",
+				"</Shell>");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Clipboard
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_clipboard() throws Exception {
-    final CompositeInfo shell =
-        parse(
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <FillLayout wbp:name='layout'/>",
-            "  </Shell.layout>",
-            "  <Composite wbp:name='composite'>",
-            "    <Composite.layout>",
-            "      <f:TableWrapLayout numColumns='2'/>",
-            "    </Composite.layout>",
-            "    <Button text='1'>",
-            "      <Button.layoutData>",
-            "        <f:TableWrapData align='(org.eclipse.ui.forms.widgets.TableWrapData).FILL'/>",
-            "      </Button.layoutData>",
-            "    </Button>",
-            "    <Label/>",
-            "    <Label/>",
-            "    <Button text='2'/>",
-            "  </Composite>",
-            "</Shell>");
-    refresh();
-    //
-    ControlInfo composite = getObjectByName("composite");
-    doCopyPaste(composite, new PasteProcedure<ControlInfo>() {
-      @Override
-      public void run(ControlInfo copy) throws Exception {
-        shell.getLayout().command_CREATE(copy, null);
-      }
-    });
-    assertXML(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Composite wbp:name='composite'>",
-        "    <Composite.layout>",
-        "      <f:TableWrapLayout numColumns='2'/>",
-        "    </Composite.layout>",
-        "    <Button text='1'>",
-        "      <Button.layoutData>",
-        "        <f:TableWrapData align='(org.eclipse.ui.forms.widgets.TableWrapData).FILL'/>",
-        "      </Button.layoutData>",
-        "    </Button>",
-        "    <Label/>",
-        "    <Label/>",
-        "    <Button text='2'/>",
-        "  </Composite>",
-        "  <Composite>",
-        "    <Composite.layout>",
-        "      <f:TableWrapLayout numColumns='2'/>",
-        "    </Composite.layout>",
-        "    <Button text='1'>",
-        "      <Button.layoutData>",
-        "        <f:TableWrapData align='(org.eclipse.ui.forms.widgets.TableWrapData).FILL'/>",
-        "      </Button.layoutData>",
-        "    </Button>",
-        "    <Label/>",
-        "    <Label/>",
-        "    <Button text='2'/>",
-        "  </Composite>",
-        "</Shell>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Clipboard
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_clipboard() throws Exception {
+		final CompositeInfo shell =
+				parse(
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <FillLayout wbp:name='layout'/>",
+						"  </Shell.layout>",
+						"  <Composite wbp:name='composite'>",
+						"    <Composite.layout>",
+						"      <f:TableWrapLayout numColumns='2'/>",
+						"    </Composite.layout>",
+						"    <Button text='1'>",
+						"      <Button.layoutData>",
+						"        <f:TableWrapData align='(org.eclipse.ui.forms.widgets.TableWrapData).FILL'/>",
+						"      </Button.layoutData>",
+						"    </Button>",
+						"    <Label/>",
+						"    <Label/>",
+						"    <Button text='2'/>",
+						"  </Composite>",
+						"</Shell>");
+		refresh();
+		//
+		ControlInfo composite = getObjectByName("composite");
+		doCopyPaste(composite, new PasteProcedure<ControlInfo>() {
+			@Override
+			public void run(ControlInfo copy) throws Exception {
+				shell.getLayout().command_CREATE(copy, null);
+			}
+		});
+		assertXML(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Composite wbp:name='composite'>",
+				"    <Composite.layout>",
+				"      <f:TableWrapLayout numColumns='2'/>",
+				"    </Composite.layout>",
+				"    <Button text='1'>",
+				"      <Button.layoutData>",
+				"        <f:TableWrapData align='(org.eclipse.ui.forms.widgets.TableWrapData).FILL'/>",
+				"      </Button.layoutData>",
+				"    </Button>",
+				"    <Label/>",
+				"    <Label/>",
+				"    <Button text='2'/>",
+				"  </Composite>",
+				"  <Composite>",
+				"    <Composite.layout>",
+				"      <f:TableWrapLayout numColumns='2'/>",
+				"    </Composite.layout>",
+				"    <Button text='1'>",
+				"      <Button.layoutData>",
+				"        <f:TableWrapData align='(org.eclipse.ui.forms.widgets.TableWrapData).FILL'/>",
+				"      </Button.layoutData>",
+				"    </Button>",
+				"    <Label/>",
+				"    <Label/>",
+				"    <Button text='2'/>",
+				"  </Composite>",
+				"</Shell>");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the <code>int</code> value of field with given name.
-   */
-  private static int getInt(TableWrapDataInfo layoutData, String fieldName) throws Exception {
-    return ReflectionUtils.getFieldInt(layoutData, fieldName);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the <code>int</code> value of field with given name.
+	 */
+	private static int getInt(TableWrapDataInfo layoutData, String fieldName) throws Exception {
+		return ReflectionUtils.getFieldInt(layoutData, fieldName);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/forms/table/TableWrapLayoutTests.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/forms/table/TableWrapLayoutTests.java
index 7b89fabd2..f834da83b 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/forms/table/TableWrapLayoutTests.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/forms/table/TableWrapLayoutTests.java
@@ -22,14 +22,14 @@
  * @author scheglov_ke
  */
 public class TableWrapLayoutTests extends DesignerSuiteTests {
-  public static Test suite() {
-    TestSuite suite = new TestSuite("org.eclipse.wb.xwt.model.forms.TableWrapLayout");
-    suite.addTest(createSingleSuite(TableWrapDataTest.class));
-    suite.addTest(createSingleSuite(TableWrapLayoutSelectionActionsTest.class));
-    suite.addTest(createSingleSuite(TableWrapLayoutTest.class));
-    suite.addTest(createSingleSuite(TabelWrapLayoutParametersTest.class));
-    suite.addTest(createSingleSuite(TableWrapLayoutConverterTest.class));
-    suite.addTest(createSingleSuite(TableWrapLayoutGefTest.class));
-    return suite;
-  }
+	public static Test suite() {
+		TestSuite suite = new TestSuite("org.eclipse.wb.xwt.model.forms.TableWrapLayout");
+		suite.addTest(createSingleSuite(TableWrapDataTest.class));
+		suite.addTest(createSingleSuite(TableWrapLayoutSelectionActionsTest.class));
+		suite.addTest(createSingleSuite(TableWrapLayoutTest.class));
+		suite.addTest(createSingleSuite(TabelWrapLayoutParametersTest.class));
+		suite.addTest(createSingleSuite(TableWrapLayoutConverterTest.class));
+		suite.addTest(createSingleSuite(TableWrapLayoutGefTest.class));
+		return suite;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/jface/JFaceTests.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/jface/JFaceTests.java
index 3871a5343..079a586e0 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/jface/JFaceTests.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/jface/JFaceTests.java
@@ -21,11 +21,11 @@
  * @author scheglov_ke
  */
 public class JFaceTests extends DesignerSuiteTests {
-  public static Test suite() {
-    TestSuite suite = new TestSuite("org.eclipse.wb.xwt.model.jface");
-    suite.addTest(createSingleSuite(ViewerTest.class));
-    suite.addTest(createSingleSuite(TableViewerTest.class));
-    suite.addTest(createSingleSuite(TableViewerGefTest.class));
-    return suite;
-  }
+	public static Test suite() {
+		TestSuite suite = new TestSuite("org.eclipse.wb.xwt.model.jface");
+		suite.addTest(createSingleSuite(ViewerTest.class));
+		suite.addTest(createSingleSuite(TableViewerTest.class));
+		suite.addTest(createSingleSuite(TableViewerGefTest.class));
+		return suite;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/jface/TableViewerGefTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/jface/TableViewerGefTest.java
index f898af381..5d9259a2a 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/jface/TableViewerGefTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/jface/TableViewerGefTest.java
@@ -21,136 +21,136 @@
  * @author scheglov_ke
  */
 public class TableViewerGefTest extends XwtGefTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Canvas
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_selecting() throws Exception {
-    openEditor(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Composite>",
-        "  <Composite.layout>",
-        "    <FillLayout/>",
-        "  </Composite.layout>",
-        "  <TableViewer wbp:name='viewer'>",
-        "    <TableViewer.table headerVisible='true'/>",
-        "    <TableViewerColumn wbp:name='column_1' text='A' width='100'/>",
-        "    <TableViewerColumn wbp:name='column_2' text='B' width='150'/>",
-        "  </TableViewer>",
-        "</Composite>");
-    ViewerInfo viewer = getObjectByName("viewer");
-    ControlInfo table = viewer.getControl();
-    Object column_1 = getObjectByName("column_1");
-    Object column_2 = getObjectByName("column_2");
-    // select "column_1"
-    canvas.target(column_1).in(0.5, 0.5).move().click();
-    canvas.assertSelection(column_1);
-    // select "column_2"
-    canvas.target(column_2).in(0.5, 0.5).move().click();
-    canvas.assertSelection(column_2);
-    // select "table"
-    canvas.target(table).in(0.5, 0.5).move().click();
-    canvas.assertSelection(table);
-    // select "viewer"
-    canvas.target(viewer).in(-3 - 16 / 2, -3 - 16 / 2).move().click();
-    canvas.assertSelection(viewer);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Canvas
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_selecting() throws Exception {
+		openEditor(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Composite>",
+				"  <Composite.layout>",
+				"    <FillLayout/>",
+				"  </Composite.layout>",
+				"  <TableViewer wbp:name='viewer'>",
+				"    <TableViewer.table headerVisible='true'/>",
+				"    <TableViewerColumn wbp:name='column_1' text='A' width='100'/>",
+				"    <TableViewerColumn wbp:name='column_2' text='B' width='150'/>",
+				"  </TableViewer>",
+				"</Composite>");
+		ViewerInfo viewer = getObjectByName("viewer");
+		ControlInfo table = viewer.getControl();
+		Object column_1 = getObjectByName("column_1");
+		Object column_2 = getObjectByName("column_2");
+		// select "column_1"
+		canvas.target(column_1).in(0.5, 0.5).move().click();
+		canvas.assertSelection(column_1);
+		// select "column_2"
+		canvas.target(column_2).in(0.5, 0.5).move().click();
+		canvas.assertSelection(column_2);
+		// select "table"
+		canvas.target(table).in(0.5, 0.5).move().click();
+		canvas.assertSelection(table);
+		// select "viewer"
+		canvas.target(viewer).in(-3 - 16 / 2, -3 - 16 / 2).move().click();
+		canvas.assertSelection(viewer);
+	}
 
-  public void test_TableViewerColumn_CREATE() throws Exception {
-    openEditor(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Composite>",
-        "  <Composite.layout>",
-        "    <FillLayout/>",
-        "  </Composite.layout>",
-        "  <TableViewer wbp:name='viewer'>",
-        "    <TableViewer.table headerVisible='true'/>",
-        "  </TableViewer>",
-        "</Composite>");
-    ViewerInfo viewer = getObjectByName("viewer");
-    ControlInfo table = viewer.getControl();
-    //
-    loadCreationTool("org.eclipse.jface.viewers.TableViewerColumn");
-    canvas.moveTo(table, 10, 10).click();
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Composite>",
-        "  <Composite.layout>",
-        "    <FillLayout/>",
-        "  </Composite.layout>",
-        "  <TableViewer wbp:name='viewer'>",
-        "    <TableViewer.table headerVisible='true'/>",
-        "    <TableViewerColumn text='New Column' width='100'/>",
-        "  </TableViewer>",
-        "</Composite>");
-  }
+	public void test_TableViewerColumn_CREATE() throws Exception {
+		openEditor(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Composite>",
+				"  <Composite.layout>",
+				"    <FillLayout/>",
+				"  </Composite.layout>",
+				"  <TableViewer wbp:name='viewer'>",
+				"    <TableViewer.table headerVisible='true'/>",
+				"  </TableViewer>",
+				"</Composite>");
+		ViewerInfo viewer = getObjectByName("viewer");
+		ControlInfo table = viewer.getControl();
+		//
+		loadCreationTool("org.eclipse.jface.viewers.TableViewerColumn");
+		canvas.moveTo(table, 10, 10).click();
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Composite>",
+				"  <Composite.layout>",
+				"    <FillLayout/>",
+				"  </Composite.layout>",
+				"  <TableViewer wbp:name='viewer'>",
+				"    <TableViewer.table headerVisible='true'/>",
+				"    <TableViewerColumn text='New Column' width='100'/>",
+				"  </TableViewer>",
+				"</Composite>");
+	}
 
-  public void test_TableViewerColumn_MOVE() throws Exception {
-    openEditor(
-        "<Composite>",
-        "  <Composite.layout>",
-        "    <FillLayout/>",
-        "  </Composite.layout>",
-        "  <TableViewer>",
-        "    <TableViewer.table headerVisible='true'/>",
-        "    <TableViewerColumn wbp:name='column_1' text='A' width='100'/>",
-        "    <TableViewerColumn wbp:name='column_2' text='B' width='150'/>",
-        "  </TableViewer>",
-        "</Composite>");
-    Object column_1 = getObjectByName("column_1");
-    Object column_2 = getObjectByName("column_2");
-    //
-    canvas.beginMove(column_2).dragTo(column_1, 10, 10).endDrag();
-    assertXML(
-        "<Composite>",
-        "  <Composite.layout>",
-        "    <FillLayout/>",
-        "  </Composite.layout>",
-        "  <TableViewer>",
-        "    <TableViewer.table headerVisible='true'/>",
-        "    <TableViewerColumn wbp:name='column_2' text='B' width='150'/>",
-        "    <TableViewerColumn wbp:name='column_1' text='A' width='100'/>",
-        "  </TableViewer>",
-        "</Composite>");
-  }
+	public void test_TableViewerColumn_MOVE() throws Exception {
+		openEditor(
+				"<Composite>",
+				"  <Composite.layout>",
+				"    <FillLayout/>",
+				"  </Composite.layout>",
+				"  <TableViewer>",
+				"    <TableViewer.table headerVisible='true'/>",
+				"    <TableViewerColumn wbp:name='column_1' text='A' width='100'/>",
+				"    <TableViewerColumn wbp:name='column_2' text='B' width='150'/>",
+				"  </TableViewer>",
+				"</Composite>");
+		Object column_1 = getObjectByName("column_1");
+		Object column_2 = getObjectByName("column_2");
+		//
+		canvas.beginMove(column_2).dragTo(column_1, 10, 10).endDrag();
+		assertXML(
+				"<Composite>",
+				"  <Composite.layout>",
+				"    <FillLayout/>",
+				"  </Composite.layout>",
+				"  <TableViewer>",
+				"    <TableViewer.table headerVisible='true'/>",
+				"    <TableViewerColumn wbp:name='column_2' text='B' width='150'/>",
+				"    <TableViewerColumn wbp:name='column_1' text='A' width='100'/>",
+				"  </TableViewer>",
+				"</Composite>");
+	}
 
-  public void test_TableViewerColumn_RESIZE() throws Exception {
-    openEditor(
-        "<Composite>",
-        "  <Composite.layout>",
-        "    <FillLayout/>",
-        "  </Composite.layout>",
-        "  <TableViewer>",
-        "    <TableViewer.table headerVisible='true'/>",
-        "    <TableViewerColumn wbp:name='column' text='A' width='100'/>",
-        "  </TableViewer>",
-        "</Composite>");
-    Object column = getObjectByName("column");
-    //
-    canvas.target(column).outX(1).inY(0.5);
-    canvas.beginDrag().dragOn(50, 0).endDrag();
-    assertXML(
-        "<Composite>",
-        "  <Composite.layout>",
-        "    <FillLayout/>",
-        "  </Composite.layout>",
-        "  <TableViewer>",
-        "    <TableViewer.table headerVisible='true'/>",
-        "    <TableViewerColumn wbp:name='column' text='A' width='150'/>",
-        "  </TableViewer>",
-        "</Composite>");
-  }
+	public void test_TableViewerColumn_RESIZE() throws Exception {
+		openEditor(
+				"<Composite>",
+				"  <Composite.layout>",
+				"    <FillLayout/>",
+				"  </Composite.layout>",
+				"  <TableViewer>",
+				"    <TableViewer.table headerVisible='true'/>",
+				"    <TableViewerColumn wbp:name='column' text='A' width='100'/>",
+				"  </TableViewer>",
+				"</Composite>");
+		Object column = getObjectByName("column");
+		//
+		canvas.target(column).outX(1).inY(0.5);
+		canvas.beginDrag().dragOn(50, 0).endDrag();
+		assertXML(
+				"<Composite>",
+				"  <Composite.layout>",
+				"    <FillLayout/>",
+				"  </Composite.layout>",
+				"  <TableViewer>",
+				"    <TableViewer.table headerVisible='true'/>",
+				"    <TableViewerColumn wbp:name='column' text='A' width='150'/>",
+				"  </TableViewer>",
+				"</Composite>");
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/jface/TableViewerTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/jface/TableViewerTest.java
index dcefb6edd..9846eaf1c 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/jface/TableViewerTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/jface/TableViewerTest.java
@@ -29,180 +29,180 @@
  * @author scheglov_ke
  */
 public class TableViewerTest extends XwtModelTest {
-  private static final int COLUMN_HEIGHT = 24;
+	private static final int COLUMN_HEIGHT = 24;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parse
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_parse() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <TableViewer wbp:name='viewer'>",
-        "    <TableViewer.table headerVisible='true'/>",
-        "    <TableViewerColumn text='A' width='50'/>",
-        "    <TableViewerColumn text='B' width='100'/>",
-        "  </TableViewer>",
-        "</Shell>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <FillLayout>",
-        "  <TableViewer.table headerVisible='true'>",
-        "    <TableViewer wbp:name='viewer'>",
-        "      <TableViewerColumn text='A' width='50'>",
-        "      <TableViewerColumn text='B' width='100'>");
-    refresh();
-    TableViewerInfo viewer = getObjectByName("viewer");
-    TableInfo table = viewer.getTable();
-    int aiLeft = table.getClientAreaInsets().left;
-    int aiTop = table.getClientAreaInsets().top;
-    // columns
-    List<TableViewerColumnInfo> columns = viewer.getColumns();
-    assertThat(columns).hasSize(2);
-    {
-      TableViewerColumnInfo column = columns.get(0);
-      assertEquals(new Rectangle(0, 0, 50, COLUMN_HEIGHT), column.getModelBounds());
-      assertEquals(new Rectangle(aiLeft, aiTop, 50, COLUMN_HEIGHT), column.getBounds());
-    }
-    {
-      TableViewerColumnInfo column = columns.get(1);
-      assertEquals(new Rectangle(50, 0, 100, COLUMN_HEIGHT), column.getModelBounds());
-      assertEquals(new Rectangle(aiLeft + 50, aiTop, 100, COLUMN_HEIGHT), column.getBounds());
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parse
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_parse() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <TableViewer wbp:name='viewer'>",
+				"    <TableViewer.table headerVisible='true'/>",
+				"    <TableViewerColumn text='A' width='50'/>",
+				"    <TableViewerColumn text='B' width='100'/>",
+				"  </TableViewer>",
+				"</Shell>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <FillLayout>",
+				"  <TableViewer.table headerVisible='true'>",
+				"    <TableViewer wbp:name='viewer'>",
+				"      <TableViewerColumn text='A' width='50'>",
+				"      <TableViewerColumn text='B' width='100'>");
+		refresh();
+		TableViewerInfo viewer = getObjectByName("viewer");
+		TableInfo table = viewer.getTable();
+		int aiLeft = table.getClientAreaInsets().left;
+		int aiTop = table.getClientAreaInsets().top;
+		// columns
+		List<TableViewerColumnInfo> columns = viewer.getColumns();
+		assertThat(columns).hasSize(2);
+		{
+			TableViewerColumnInfo column = columns.get(0);
+			assertEquals(new Rectangle(0, 0, 50, COLUMN_HEIGHT), column.getModelBounds());
+			assertEquals(new Rectangle(aiLeft, aiTop, 50, COLUMN_HEIGHT), column.getBounds());
+		}
+		{
+			TableViewerColumnInfo column = columns.get(1);
+			assertEquals(new Rectangle(50, 0, 100, COLUMN_HEIGHT), column.getModelBounds());
+			assertEquals(new Rectangle(aiLeft + 50, aiTop, 100, COLUMN_HEIGHT), column.getBounds());
+		}
+	}
 
-  public void test_TableViewerColumn_properties() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <TableViewer wbp:name='viewer'>",
-        "    <TableViewer.table headerVisible='true'/>",
-        "    <TableViewerColumn text='A' width='50'/>",
-        "  </TableViewer>",
-        "</Shell>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <FillLayout>",
-        "  <TableViewer.table headerVisible='true'>",
-        "    <TableViewer wbp:name='viewer'>",
-        "      <TableViewerColumn text='A' width='50'>");
-    refresh();
-    TableViewerInfo viewer = getObjectByName("viewer");
-    TableViewerColumnInfo column = viewer.getColumns().get(0);
-    // text
-    {
-      Property property = column.getPropertyByTitle("text");
-      assertNotNull(property);
-      // value
-      assertTrue(property.isModified());
-      assertEquals("A", property.getValue());
-      // tooltip
-      assertEquals("Sets the column text.", getPropertyTooltipText(property));
-      callExpressionAccessor_getAdapter_withWrongType(property);
-    }
-    // width
-    {
-      Property property = column.getPropertyByTitle("width");
-      assertNotNull(property);
-      // value
-      assertTrue(property.isModified());
-      assertEquals(50, property.getValue());
-      // tooltip
-      assertEquals("Sets the column width in pixels.", getPropertyTooltipText(property));
-      callExpressionAccessor_getAdapter_withWrongType(property);
-    }
-    // "text" is text property, so included into presentation
-    assertEquals("TableViewerColumn - \"A\"", ObjectsLabelProvider.INSTANCE.getText(column));
-    // set "text" and "width"
-    {
-      column.getPropertyByTitle("text").setValue("B");
-      column.getPropertyByTitle("width").setValue(100);
-      assertXML(
-          "// filler filler filler filler filler",
-          "// filler filler filler filler filler",
-          "<Shell>",
-          "  <Shell.layout>",
-          "    <FillLayout/>",
-          "  </Shell.layout>",
-          "  <TableViewer wbp:name='viewer'>",
-          "    <TableViewer.table headerVisible='true'/>",
-          "    <TableViewerColumn text='B' width='100'/>",
-          "  </TableViewer>",
-          "</Shell>");
-    }
-  }
+	public void test_TableViewerColumn_properties() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <TableViewer wbp:name='viewer'>",
+				"    <TableViewer.table headerVisible='true'/>",
+				"    <TableViewerColumn text='A' width='50'/>",
+				"  </TableViewer>",
+				"</Shell>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <FillLayout>",
+				"  <TableViewer.table headerVisible='true'>",
+				"    <TableViewer wbp:name='viewer'>",
+				"      <TableViewerColumn text='A' width='50'>");
+		refresh();
+		TableViewerInfo viewer = getObjectByName("viewer");
+		TableViewerColumnInfo column = viewer.getColumns().get(0);
+		// text
+		{
+			Property property = column.getPropertyByTitle("text");
+			assertNotNull(property);
+			// value
+			assertTrue(property.isModified());
+			assertEquals("A", property.getValue());
+			// tooltip
+			assertEquals("Sets the column text.", getPropertyTooltipText(property));
+			callExpressionAccessor_getAdapter_withWrongType(property);
+		}
+		// width
+		{
+			Property property = column.getPropertyByTitle("width");
+			assertNotNull(property);
+			// value
+			assertTrue(property.isModified());
+			assertEquals(50, property.getValue());
+			// tooltip
+			assertEquals("Sets the column width in pixels.", getPropertyTooltipText(property));
+			callExpressionAccessor_getAdapter_withWrongType(property);
+		}
+		// "text" is text property, so included into presentation
+		assertEquals("TableViewerColumn - \"A\"", ObjectsLabelProvider.INSTANCE.getText(column));
+		// set "text" and "width"
+		{
+			column.getPropertyByTitle("text").setValue("B");
+			column.getPropertyByTitle("width").setValue(100);
+			assertXML(
+					"// filler filler filler filler filler",
+					"// filler filler filler filler filler",
+					"<Shell>",
+					"  <Shell.layout>",
+					"    <FillLayout/>",
+					"  </Shell.layout>",
+					"  <TableViewer wbp:name='viewer'>",
+					"    <TableViewer.table headerVisible='true'/>",
+					"    <TableViewerColumn text='B' width='100'/>",
+					"  </TableViewer>",
+					"</Shell>");
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Flow container
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_flowContainer_CREATE() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <TableViewer wbp:name='viewer'>",
-        "    <TableViewer.table headerVisible='true'/>",
-        "  </TableViewer>",
-        "</Shell>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <FillLayout>",
-        "  <TableViewer.table headerVisible='true'>",
-        "    <TableViewer wbp:name='viewer'>");
-    refresh();
-    TableViewerInfo viewer = getObjectByName("viewer");
-    //
-    TableViewerColumnInfo newColumn = createObject("org.eclipse.jface.viewers.TableViewerColumn");
-    flowContainer_CREATE(viewer, newColumn, null);
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <TableViewer wbp:name='viewer'>",
-        "    <TableViewer.table headerVisible='true'/>",
-        "    <TableViewerColumn text='New Column' width='100'/>",
-        "  </TableViewer>",
-        "</Shell>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <FillLayout>",
-        "  <TableViewer.table headerVisible='true'>",
-        "    <TableViewer wbp:name='viewer'>",
-        "      <TableViewerColumn text='New Column' width='100'>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Flow container
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_flowContainer_CREATE() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <TableViewer wbp:name='viewer'>",
+				"    <TableViewer.table headerVisible='true'/>",
+				"  </TableViewer>",
+				"</Shell>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <FillLayout>",
+				"  <TableViewer.table headerVisible='true'>",
+				"    <TableViewer wbp:name='viewer'>");
+		refresh();
+		TableViewerInfo viewer = getObjectByName("viewer");
+		//
+		TableViewerColumnInfo newColumn = createObject("org.eclipse.jface.viewers.TableViewerColumn");
+		flowContainer_CREATE(viewer, newColumn, null);
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <TableViewer wbp:name='viewer'>",
+				"    <TableViewer.table headerVisible='true'/>",
+				"    <TableViewerColumn text='New Column' width='100'/>",
+				"  </TableViewer>",
+				"</Shell>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <FillLayout>",
+				"  <TableViewer.table headerVisible='true'>",
+				"    <TableViewer wbp:name='viewer'>",
+				"      <TableViewerColumn text='New Column' width='100'>");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/jface/ViewerTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/jface/ViewerTest.java
index 66fc05262..bea931d70 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/jface/ViewerTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/jface/ViewerTest.java
@@ -25,366 +25,366 @@
  * @author scheglov_ke
  */
 public class ViewerTest extends XwtModelTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parse
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_parse_noControlElement() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <TableViewer wbp:name='viewer'/>",
-        "</Shell>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <FillLayout>",
-        "  <TableViewer.table?>",
-        "    <TableViewer wbp:name='viewer'>");
-    refresh();
-    // check getTitle() for Control
-    {
-      ViewerInfo viewer = getObjectByName("viewer");
-      ControlInfo table = viewer.getControl();
-      assertEquals("TableViewer.table", table.getCreationSupport().getTitle());
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parse
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_parse_noControlElement() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <TableViewer wbp:name='viewer'/>",
+				"</Shell>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <FillLayout>",
+				"  <TableViewer.table?>",
+				"    <TableViewer wbp:name='viewer'>");
+		refresh();
+		// check getTitle() for Control
+		{
+			ViewerInfo viewer = getObjectByName("viewer");
+			ControlInfo table = viewer.getControl();
+			assertEquals("TableViewer.table", table.getCreationSupport().getTitle());
+		}
+	}
 
-  public void test_parse_hasControlElement() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <TableViewer>",
-        "    <TableViewer.table>",
-        "      <TableColumn text='1'/>",
-        "      <TableColumn text='2'/>",
-        "    </TableViewer.table>",
-        "  </TableViewer>",
-        "</Shell>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <FillLayout>",
-        "  <TableViewer.table>",
-        "    <TableViewer>",
-        "    <TableColumn text='1'>",
-        "    <TableColumn text='2'>");
-    refresh();
-  }
+	public void test_parse_hasControlElement() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <TableViewer>",
+				"    <TableViewer.table>",
+				"      <TableColumn text='1'/>",
+				"      <TableColumn text='2'/>",
+				"    </TableViewer.table>",
+				"  </TableViewer>",
+				"</Shell>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <FillLayout>",
+				"  <TableViewer.table>",
+				"    <TableViewer>",
+				"    <TableColumn text='1'>",
+				"    <TableColumn text='2'>");
+		refresh();
+	}
 
-  /**
-   * There was problem that we tried to find exactly "table" element, and ignored "Table".
-   */
-  public void test_parse_hasControlElementInUpperCase() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <TableViewer>",
-        "    <TableViewer.Table headerVisible='true'/>",
-        "  </TableViewer>",
-        "</Shell>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <FillLayout>",
-        "  <TableViewer.Table headerVisible='true'>",
-        "    <TableViewer>");
-    refresh();
-    // no changes
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <TableViewer>",
-        "    <TableViewer.Table headerVisible='true'/>",
-        "  </TableViewer>",
-        "</Shell>");
-  }
+	/**
+	 * There was problem that we tried to find exactly "table" element, and ignored "Table".
+	 */
+	public void test_parse_hasControlElementInUpperCase() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <TableViewer>",
+				"    <TableViewer.Table headerVisible='true'/>",
+				"  </TableViewer>",
+				"</Shell>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <FillLayout>",
+				"  <TableViewer.Table headerVisible='true'>",
+				"    <TableViewer>");
+		refresh();
+		// no changes
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <TableViewer>",
+				"    <TableViewer.Table headerVisible='true'/>",
+				"  </TableViewer>",
+				"</Shell>");
+	}
 
-  public void test_parse_hasControlElement_hasRowData() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <RowLayout/>",
-        "  </Shell.layout>",
-        "  <TableViewer>",
-        "    <TableViewer.table>",
-        "      <TableViewer.table.layoutData>",
-        "        <RowData width='300' height='150'/>",
-        "      </TableViewer.table.layoutData>",
-        "    </TableViewer.table>",
-        "  </TableViewer>",
-        "</Shell>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <RowLayout>",
-        "  <TableViewer.table>",
-        "    <TableViewer>",
-        "    <RowData width='300' height='150'>");
-    refresh();
-  }
+	public void test_parse_hasControlElement_hasRowData() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <RowLayout/>",
+				"  </Shell.layout>",
+				"  <TableViewer>",
+				"    <TableViewer.table>",
+				"      <TableViewer.table.layoutData>",
+				"        <RowData width='300' height='150'/>",
+				"      </TableViewer.table.layoutData>",
+				"    </TableViewer.table>",
+				"  </TableViewer>",
+				"</Shell>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <RowLayout>",
+				"  <TableViewer.table>",
+				"    <TableViewer>",
+				"    <RowData width='300' height='150'>");
+		refresh();
+	}
 
-  public void test_parse_hasControlElement_andItsAttributes() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <TableViewer wbp:name='viewer'>",
-        "    <TableViewer.table headerVisible='true'/>",
-        "  </TableViewer>",
-        "</Shell>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <FillLayout>",
-        "  <TableViewer.table headerVisible='true'>",
-        "    <TableViewer wbp:name='viewer'>");
-    refresh();
-    //
-    ViewerInfo viewer = getObjectByName("viewer");
-    ControlInfo table = viewer.getControl();
-    {
-      Property property = table.getPropertyByTitle("headerVisible");
-      assertTrue(property.isModified());
-      assertEquals(Boolean.TRUE, property.getValue());
-    }
-    {
-      Property property = table.getPropertyByTitle("linesVisible");
-      assertFalse(property.isModified());
-      assertEquals(Boolean.FALSE, property.getValue());
-    }
-  }
+	public void test_parse_hasControlElement_andItsAttributes() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <TableViewer wbp:name='viewer'>",
+				"    <TableViewer.table headerVisible='true'/>",
+				"  </TableViewer>",
+				"</Shell>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <FillLayout>",
+				"  <TableViewer.table headerVisible='true'>",
+				"    <TableViewer wbp:name='viewer'>");
+		refresh();
+		//
+		ViewerInfo viewer = getObjectByName("viewer");
+		ControlInfo table = viewer.getControl();
+		{
+			Property property = table.getPropertyByTitle("headerVisible");
+			assertTrue(property.isModified());
+			assertEquals(Boolean.TRUE, property.getValue());
+		}
+		{
+			Property property = table.getPropertyByTitle("linesVisible");
+			assertFalse(property.isModified());
+			assertEquals(Boolean.FALSE, property.getValue());
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_styleProperty() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <TableViewer wbp:name='viewer'>",
-        "    <TableViewer.table/>",
-        "  </TableViewer>",
-        "</Shell>");
-    refresh();
-    ViewerInfo viewer = getObjectByName("viewer");
-    ControlInfo table = viewer.getControl();
-    // no "Style" for "table"
-    assertNull(table.getPropertyByTitle("Style"));
-    // has "Style" for "viewer"
-    assertNotNull(viewer.getPropertyByTitle("Style"));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_styleProperty() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <TableViewer wbp:name='viewer'>",
+				"    <TableViewer.table/>",
+				"  </TableViewer>",
+				"</Shell>");
+		refresh();
+		ViewerInfo viewer = getObjectByName("viewer");
+		ControlInfo table = viewer.getControl();
+		// no "Style" for "table"
+		assertNull(table.getPropertyByTitle("Style"));
+		// has "Style" for "viewer"
+		assertNotNull(viewer.getPropertyByTitle("Style"));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_CREATE() throws Exception {
-    CompositeInfo shell =
-        parse(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <FillLayout/>",
-            "  </Shell.layout>",
-            "</Shell>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <FillLayout>");
-    refresh();
-    //
-    ViewerInfo viewer = createObject("org.eclipse.jface.viewers.TableViewer");
-    ControlInfo table = (ControlInfo) XmlObjectUtils.getWrapped(viewer);
-    shell.getLayout().command_CREATE(table, null);
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <TableViewer x:Style='BORDER | FULL_SELECTION'>",
-        "    <TableViewer.table headerVisible='true' linesVisible='true'/>",
-        "  </TableViewer>",
-        "</Shell>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <FillLayout>",
-        "  <TableViewer.table headerVisible='true' linesVisible='true'>",
-        "    <TableViewer x:Style='BORDER | FULL_SELECTION'>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_CREATE() throws Exception {
+		CompositeInfo shell =
+				parse(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <FillLayout/>",
+						"  </Shell.layout>",
+						"</Shell>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <FillLayout>");
+		refresh();
+		//
+		ViewerInfo viewer = createObject("org.eclipse.jface.viewers.TableViewer");
+		ControlInfo table = (ControlInfo) XmlObjectUtils.getWrapped(viewer);
+		shell.getLayout().command_CREATE(table, null);
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <TableViewer x:Style='BORDER | FULL_SELECTION'>",
+				"    <TableViewer.table headerVisible='true' linesVisible='true'/>",
+				"  </TableViewer>",
+				"</Shell>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <FillLayout>",
+				"  <TableViewer.table headerVisible='true' linesVisible='true'>",
+				"    <TableViewer x:Style='BORDER | FULL_SELECTION'>");
+	}
 
-  public void test_CREATE_liveImage() throws Exception {
-    parse("<Shell/>");
-    // prepare viewer and table
-    ViewerInfo viewer = createObject("org.eclipse.jface.viewers.TableViewer");
-    ControlInfo table = (ControlInfo) XmlObjectUtils.getWrapped(viewer);
-    // check that table has "create" image
-    Image image = table.getImage();
-    assertNotNull(image);
-  }
+	public void test_CREATE_liveImage() throws Exception {
+		parse("<Shell/>");
+		// prepare viewer and table
+		ViewerInfo viewer = createObject("org.eclipse.jface.viewers.TableViewer");
+		ControlInfo table = (ControlInfo) XmlObjectUtils.getWrapped(viewer);
+		// check that table has "create" image
+		Image image = table.getImage();
+		assertNotNull(image);
+	}
 
-  public void test_DELETE_control() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <TableViewer wbp:name='viewer'>",
-        "    <TableViewer.table/>",
-        "  </TableViewer>",
-        "</Shell>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <FillLayout>",
-        "  <TableViewer.table>",
-        "    <TableViewer wbp:name='viewer'>");
-    refresh();
-    ViewerInfo viewer = getObjectByName("viewer");
-    ControlInfo table = viewer.getControl();
-    //
-    assertTrue(table.canDelete());
-    table.delete();
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "</Shell>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <FillLayout>");
-  }
+	public void test_DELETE_control() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <TableViewer wbp:name='viewer'>",
+				"    <TableViewer.table/>",
+				"  </TableViewer>",
+				"</Shell>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <FillLayout>",
+				"  <TableViewer.table>",
+				"    <TableViewer wbp:name='viewer'>");
+		refresh();
+		ViewerInfo viewer = getObjectByName("viewer");
+		ControlInfo table = viewer.getControl();
+		//
+		assertTrue(table.canDelete());
+		table.delete();
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"</Shell>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <FillLayout>");
+	}
 
-  public void test_MOVE_reorder() throws Exception {
-    CompositeInfo shell =
-        parse(
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <FillLayout/>",
-            "  </Shell.layout>",
-            "  <TableViewer wbp:name='viewer'>",
-            "    <TableViewer.table/>",
-            "  </TableViewer>",
-            "  <Button/>",
-            "</Shell>");
-    ViewerInfo viewer = getObjectByName("viewer");
-    //
-    shell.getLayout().command_MOVE(viewer.getControl(), null);
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <Button/>",
-        "  <TableViewer wbp:name='viewer'>",
-        "    <TableViewer.table/>",
-        "  </TableViewer>",
-        "</Shell>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <FillLayout>",
-        "  <Button>",
-        "  <TableViewer.table>",
-        "    <TableViewer wbp:name='viewer'>");
-  }
+	public void test_MOVE_reorder() throws Exception {
+		CompositeInfo shell =
+				parse(
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <FillLayout/>",
+						"  </Shell.layout>",
+						"  <TableViewer wbp:name='viewer'>",
+						"    <TableViewer.table/>",
+						"  </TableViewer>",
+						"  <Button/>",
+						"</Shell>");
+		ViewerInfo viewer = getObjectByName("viewer");
+		//
+		shell.getLayout().command_MOVE(viewer.getControl(), null);
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <Button/>",
+				"  <TableViewer wbp:name='viewer'>",
+				"    <TableViewer.table/>",
+				"  </TableViewer>",
+				"</Shell>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <FillLayout>",
+				"  <Button>",
+				"  <TableViewer.table>",
+				"    <TableViewer wbp:name='viewer'>");
+	}
 
-  public void test_DELETE_viewer() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <TableViewer wbp:name='viewer'>",
-        "    <TableViewer.table/>",
-        "  </TableViewer>",
-        "</Shell>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <FillLayout>",
-        "  <TableViewer.table>",
-        "    <TableViewer wbp:name='viewer'>");
-    refresh();
-    ViewerInfo viewer = getObjectByName("viewer");
-    //
-    assertTrue(viewer.canDelete());
-    viewer.delete();
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "</Shell>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <FillLayout>");
-  }
+	public void test_DELETE_viewer() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <TableViewer wbp:name='viewer'>",
+				"    <TableViewer.table/>",
+				"  </TableViewer>",
+				"</Shell>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <FillLayout>",
+				"  <TableViewer.table>",
+				"    <TableViewer wbp:name='viewer'>");
+		refresh();
+		ViewerInfo viewer = getObjectByName("viewer");
+		//
+		assertTrue(viewer.canDelete());
+		viewer.delete();
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"</Shell>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <FillLayout>");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/layout/AbsoluteLayoutGefTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/layout/AbsoluteLayoutGefTest.java
index 53e02d2e1..f3d5e282d 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/layout/AbsoluteLayoutGefTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/layout/AbsoluteLayoutGefTest.java
@@ -24,251 +24,251 @@
  * @author scheglov_ke
  */
 public class AbsoluteLayoutGefTest extends XwtGefTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Life cycle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void setUp() throws Exception {
-    super.setUp();
-    prepareBox();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Life cycle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void setUp() throws Exception {
+		super.setUp();
+		prepareBox();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Canvas
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_set() throws Exception {
-    CompositeInfo composite =
-        openEditor(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<Composite/>");
-    // set Tool
-    Tool tool;
-    {
-      AbsoluteLayoutEntryInfo entry = new AbsoluteLayoutEntryInfo();
-      entry.initialize(m_viewerCanvas, composite);
-      assertNotNull(entry.getIcon());
-      tool = entry.createTool();
-    }
-    m_viewerCanvas.getEditDomain().setActiveTool(tool);
-    // use canvas
-    canvas.moveTo(composite, 100, 100).click();
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Composite layout='{x:Null}'/>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Canvas
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_set() throws Exception {
+		CompositeInfo composite =
+				openEditor(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<Composite/>");
+		// set Tool
+		Tool tool;
+		{
+			AbsoluteLayoutEntryInfo entry = new AbsoluteLayoutEntryInfo();
+			entry.initialize(m_viewerCanvas, composite);
+			assertNotNull(entry.getIcon());
+			tool = entry.createTool();
+		}
+		m_viewerCanvas.getEditDomain().setActiveTool(tool);
+		// use canvas
+		canvas.moveTo(composite, 100, 100).click();
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Composite layout='{x:Null}'/>");
+	}
 
-  public void test_canvas_CREATE() throws Exception {
-    CompositeInfo composite =
-        openEditor(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<Composite/>");
-    // create Box
-    loadBox();
-    // use canvas
-    canvas.sideMode().create(100, 50);
-    canvas.target(composite).in(30, 40).move();
-    canvas.click();
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Composite>",
-        "  <t:Box bounds='30, 40, 100, 50'/>",
-        "</Composite>");
-  }
+	public void test_canvas_CREATE() throws Exception {
+		CompositeInfo composite =
+				openEditor(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<Composite/>");
+		// create Box
+		loadBox();
+		// use canvas
+		canvas.sideMode().create(100, 50);
+		canvas.target(composite).in(30, 40).move();
+		canvas.click();
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Composite>",
+				"  <t:Box bounds='30, 40, 100, 50'/>",
+				"</Composite>");
+	}
 
-  public void test_canvas_PASTE() throws Exception {
-    CompositeInfo composite =
-        openEditor(
-            "// filler filler filler filler filler",
-            "<Composite>",
-            "  <t:Box wbp:name='box' bounds='30, 40, 100, 50'/>",
-            "</Composite>");
-    // copy/paste "box"
-    {
-      ControlInfo box = getObjectByName("box");
-      doCopyPaste(box);
-    }
-    // move
-    canvas.sideMode().create(100, 50);
-    canvas.target(composite).inX(50).inY(150).move();
-    canvas.click();
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Composite>",
-        "  <t:Box wbp:name='box' bounds='30, 40, 100, 50'/>",
-        "  <t:Box bounds='50, 150, 100, 50'/>",
-        "</Composite>");
-  }
+	public void test_canvas_PASTE() throws Exception {
+		CompositeInfo composite =
+				openEditor(
+						"// filler filler filler filler filler",
+						"<Composite>",
+						"  <t:Box wbp:name='box' bounds='30, 40, 100, 50'/>",
+						"</Composite>");
+		// copy/paste "box"
+		{
+			ControlInfo box = getObjectByName("box");
+			doCopyPaste(box);
+		}
+		// move
+		canvas.sideMode().create(100, 50);
+		canvas.target(composite).inX(50).inY(150).move();
+		canvas.click();
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Composite>",
+				"  <t:Box wbp:name='box' bounds='30, 40, 100, 50'/>",
+				"  <t:Box bounds='50, 150, 100, 50'/>",
+				"</Composite>");
+	}
 
-  public void test_canvas_MOVE() throws Exception {
-    CompositeInfo composite =
-        openEditor(
-            "// filler filler filler filler filler",
-            "<Composite>",
-            "  <t:Box wbp:name='box' bounds='30, 40, 100, 50'/>",
-            "</Composite>");
-    ControlInfo button = getObjectByName("box");
-    // move
-    canvas.sideMode().beginMove(button);
-    canvas.target(composite).inX(50).inY(80).drag();
-    canvas.endDrag();
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Composite>",
-        "  <t:Box wbp:name='box' bounds='50, 80, 100, 50'/>",
-        "</Composite>");
-  }
+	public void test_canvas_MOVE() throws Exception {
+		CompositeInfo composite =
+				openEditor(
+						"// filler filler filler filler filler",
+						"<Composite>",
+						"  <t:Box wbp:name='box' bounds='30, 40, 100, 50'/>",
+						"</Composite>");
+		ControlInfo button = getObjectByName("box");
+		// move
+		canvas.sideMode().beginMove(button);
+		canvas.target(composite).inX(50).inY(80).drag();
+		canvas.endDrag();
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Composite>",
+				"  <t:Box wbp:name='box' bounds='50, 80, 100, 50'/>",
+				"</Composite>");
+	}
 
-  public void test_canvas_RESIZE() throws Exception {
-    openEditor(
-        "// filler filler filler filler filler",
-        "<Composite>",
-        "  <t:Box wbp:name='box' bounds='30, 40, 100, 50'/>",
-        "</Composite>");
-    ControlInfo button = getObjectByName("box");
-    //
-    canvas.beginResize(button, IPositionConstants.SOUTH_EAST);
-    canvas.dragTo(button, 150, 100).endDrag();
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Composite>",
-        "  <t:Box wbp:name='box' bounds='30, 40, 150, 100'/>",
-        "</Composite>");
-  }
+	public void test_canvas_RESIZE() throws Exception {
+		openEditor(
+				"// filler filler filler filler filler",
+				"<Composite>",
+				"  <t:Box wbp:name='box' bounds='30, 40, 100, 50'/>",
+				"</Composite>");
+		ControlInfo button = getObjectByName("box");
+		//
+		canvas.beginResize(button, IPositionConstants.SOUTH_EAST);
+		canvas.dragTo(button, 150, 100).endDrag();
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Composite>",
+				"  <t:Box wbp:name='box' bounds='30, 40, 150, 100'/>",
+				"</Composite>");
+	}
 
-  public void test_canvas_ADD() throws Exception {
-    openEditor(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Composite wbp:name='target' bounds='10, 10, 400, 250'/>",
-        "  <t:Box wbp:name='box' text='Box' bounds='1, 2, 100, 50'/>",
-        "</Shell>");
-    CompositeInfo target = getObjectByName("target");
-    ControlInfo box = getObjectByName("box");
-    // move
-    canvas.sideMode().beginMove(box);
-    canvas.target(target).inX(50).inY(20).drag();
-    canvas.endDrag();
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Composite wbp:name='target' bounds='10, 10, 400, 250'>",
-        "    <t:Box wbp:name='box' text='Box' bounds='50, 20, 100, 50'/>",
-        "  </Composite>",
-        "</Shell>");
-  }
+	public void test_canvas_ADD() throws Exception {
+		openEditor(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Composite wbp:name='target' bounds='10, 10, 400, 250'/>",
+				"  <t:Box wbp:name='box' text='Box' bounds='1, 2, 100, 50'/>",
+				"</Shell>");
+		CompositeInfo target = getObjectByName("target");
+		ControlInfo box = getObjectByName("box");
+		// move
+		canvas.sideMode().beginMove(box);
+		canvas.target(target).inX(50).inY(20).drag();
+		canvas.endDrag();
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Composite wbp:name='target' bounds='10, 10, 400, 250'>",
+				"    <t:Box wbp:name='box' text='Box' bounds='50, 20, 100, 50'/>",
+				"  </Composite>",
+				"</Shell>");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tree
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_tree_CREATE() throws Exception {
-    CompositeInfo composite =
-        openEditor(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<Composite/>");
-    // create Box
-    ControlInfo newBox = loadBox();
-    // use tree
-    tree.moveOn(composite);
-    tree.assertFeedback_on(composite);
-    tree.click();
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Composite>",
-        "  <t:Box bounds='0, 0, 100, 50'/>",
-        "</Composite>");
-    tree.assertPrimarySelected(newBox);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tree
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_tree_CREATE() throws Exception {
+		CompositeInfo composite =
+				openEditor(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<Composite/>");
+		// create Box
+		ControlInfo newBox = loadBox();
+		// use tree
+		tree.moveOn(composite);
+		tree.assertFeedback_on(composite);
+		tree.click();
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Composite>",
+				"  <t:Box bounds='0, 0, 100, 50'/>",
+				"</Composite>");
+		tree.assertPrimarySelected(newBox);
+	}
 
-  public void test_tree_PASTE() throws Exception {
-    CompositeInfo composite =
-        openEditor(
-            "// filler filler filler filler filler",
-            "<Composite>",
-            "  <t:Box wbp:name='box' bounds='30, 40, 100, 50'/>",
-            "</Composite>");
-    // copy/paste "box"
-    {
-      ControlInfo box = getObjectByName("box");
-      doCopyPaste(box);
-    }
-    // use tree
-    tree.moveOn(composite);
-    tree.assertFeedback_on(composite);
-    tree.click();
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Composite>",
-        "  <t:Box wbp:name='box' bounds='30, 40, 100, 50'/>",
-        "  <t:Box bounds='0, 0, 100, 50'/>",
-        "</Composite>");
-  }
+	public void test_tree_PASTE() throws Exception {
+		CompositeInfo composite =
+				openEditor(
+						"// filler filler filler filler filler",
+						"<Composite>",
+						"  <t:Box wbp:name='box' bounds='30, 40, 100, 50'/>",
+						"</Composite>");
+		// copy/paste "box"
+		{
+			ControlInfo box = getObjectByName("box");
+			doCopyPaste(box);
+		}
+		// use tree
+		tree.moveOn(composite);
+		tree.assertFeedback_on(composite);
+		tree.click();
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Composite>",
+				"  <t:Box wbp:name='box' bounds='30, 40, 100, 50'/>",
+				"  <t:Box bounds='0, 0, 100, 50'/>",
+				"</Composite>");
+	}
 
-  public void test_tree_MOVE() throws Exception {
-    openEditor(
-        "// filler filler filler filler filler",
-        "<Composite>",
-        "  <t:Box wbp:name='box_1' bounds='10, 20, 100, 50'/>",
-        "  <t:Box wbp:name='box_2' bounds='10, 100, 100, 50'/>",
-        "</Composite>");
-    ControlInfo box_1 = getObjectByName("box_1");
-    ControlInfo box_2 = getObjectByName("box_2");
-    // use tree
-    tree.startDrag(box_2);
-    tree.dragBefore(box_1);
-    tree.assertFeedback_before(box_1);
-    tree.endDrag();
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Composite>",
-        "  <t:Box wbp:name='box_2' bounds='10, 100, 100, 50'/>",
-        "  <t:Box wbp:name='box_1' bounds='10, 20, 100, 50'/>",
-        "</Composite>");
-  }
+	public void test_tree_MOVE() throws Exception {
+		openEditor(
+				"// filler filler filler filler filler",
+				"<Composite>",
+				"  <t:Box wbp:name='box_1' bounds='10, 20, 100, 50'/>",
+				"  <t:Box wbp:name='box_2' bounds='10, 100, 100, 50'/>",
+				"</Composite>");
+		ControlInfo box_1 = getObjectByName("box_1");
+		ControlInfo box_2 = getObjectByName("box_2");
+		// use tree
+		tree.startDrag(box_2);
+		tree.dragBefore(box_1);
+		tree.assertFeedback_before(box_1);
+		tree.endDrag();
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Composite>",
+				"  <t:Box wbp:name='box_2' bounds='10, 100, 100, 50'/>",
+				"  <t:Box wbp:name='box_1' bounds='10, 20, 100, 50'/>",
+				"</Composite>");
+	}
 
-  public void test_tree_ADD() throws Exception {
-    openEditor(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Composite wbp:name='target' bounds='10, 10, 400, 250'/>",
-        "  <t:Box wbp:name='box' text='Box' bounds='1, 2, 100, 50'/>",
-        "</Shell>");
-    CompositeInfo target = getObjectByName("target");
-    ControlInfo box = getObjectByName("box");
-    // use tree
-    tree.startDrag(box);
-    tree.dragOn(target);
-    tree.assertFeedback_on(target);
-    tree.endDrag();
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Composite wbp:name='target' bounds='10, 10, 400, 250'>",
-        "    <t:Box wbp:name='box' text='Box' size='100, 50'/>",
-        "  </Composite>",
-        "</Shell>");
-  }
+	public void test_tree_ADD() throws Exception {
+		openEditor(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Composite wbp:name='target' bounds='10, 10, 400, 250'/>",
+				"  <t:Box wbp:name='box' text='Box' bounds='1, 2, 100, 50'/>",
+				"</Shell>");
+		CompositeInfo target = getObjectByName("target");
+		ControlInfo box = getObjectByName("box");
+		// use tree
+		tree.startDrag(box);
+		tree.dragOn(target);
+		tree.assertFeedback_on(target);
+		tree.endDrag();
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Composite wbp:name='target' bounds='10, 10, 400, 250'>",
+				"    <t:Box wbp:name='box' text='Box' size='100, 50'/>",
+				"  </Composite>",
+				"</Shell>");
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/layout/AbsoluteLayoutTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/layout/AbsoluteLayoutTest.java
index 9f2080d2e..2de14179d 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/layout/AbsoluteLayoutTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/layout/AbsoluteLayoutTest.java
@@ -37,560 +37,560 @@
  * @author scheglov_ke
  */
 public class AbsoluteLayoutTest extends XwtModelTest {
-  private static final IPreferenceStore preferences =
-      RcpToolkitDescription.INSTANCE.getPreferences();
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Life cycle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void tearDown() throws Exception {
-    super.tearDown();
-    preferences.setValue(IPreferenceConstants.P_CREATION_FLOW, false);
-    preferences.setToDefault(IPreferenceConstants.P_AUTOSIZE_ON_PROPERTY_CHANGE);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_noProperties() throws Exception {
-    CompositeInfo composite = parse("<Shell/>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  implicit-layout: absolute");
-    AbsoluteLayoutInfo layout = (AbsoluteLayoutInfo) composite.getLayout();
-    assertThat(layout.getProperties()).isEmpty();
-  }
-
-  public void test_onRemove() throws Exception {
-    CompositeInfo composite =
-        parse(
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Button text='New Button' bounds='1, 2, 3, 4' location='1, 2' size='3, 4'/>",
-            "</Shell>");
-    refresh();
-    // set new Layout
-    LayoutInfo layout = createObject("org.eclipse.swt.layout.FillLayout");
-    composite.setLayout(layout);
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <Button text='New Button'/>",
-        "</Shell>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <FillLayout>",
-        "  <Button text='New Button'>");
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Explicit
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_parseExplicit() throws Exception {
-    setFileContentSrc(
-        "test/MyComposite.java",
-        getJavaSource(
-            "public class MyComposite extends Composite {",
-            "  public MyComposite(Composite parent, int style) {",
-            "    super(parent, style);",
-            "    setLayout(new RowLayout());",
-            "  }",
-            "}"));
-    waitForAutoBuild();
-    // parse
-    CompositeInfo composite = parse("<t:MyComposite layout='{x:Null}'/>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<t:MyComposite layout='{x:Null}'>",
-        "  explicit-layout: absolute");
-    refresh();
-    LayoutInfo layout = composite.getLayout();
-    // layout should be "null"
-    assertSame(null, composite.getComposite().getLayout());
-    assertThat(layout).isInstanceOf(AbsoluteLayoutInfo.class);
-    // check CreationSupport
-    {
-      CreationSupport creationSupport = layout.getCreationSupport();
-      assertEquals("explicit-layout: absolute", creationSupport.toString());
-      assertEquals("explicit-layout: absolute", creationSupport.getTitle());
-      assertEquals(composite.getElement(), creationSupport.getElement());
-    }
-    // delete
-    assertTrue(layout.canDelete());
-    layout.delete();
-    assertXML("<t:MyComposite/>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<t:MyComposite>",
-        "  implicit-layout: org.eclipse.swt.layout.RowLayout");
-  }
-
-  /**
-   * Test for setting {@link AbsoluteLayoutInfo}.
-   */
-  public void test_setExplicit() throws Exception {
-    setFileContentSrc(
-        "test/MyComposite.java",
-        getJavaSource(
-            "public class MyComposite extends Composite {",
-            "  public MyComposite(Composite parent, int style) {",
-            "    super(parent, style);",
-            "    setLayout(new RowLayout());",
-            "  }",
-            "}"));
-    waitForAutoBuild();
-    // parse
-    CompositeInfo composite =
-        parse(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<t:MyComposite>",
-            "  <Button/>",
-            "</t:MyComposite>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<t:MyComposite>",
-        "  implicit-layout: org.eclipse.swt.layout.RowLayout",
-        "  <Button>",
-        "    virtual-LayoutData: org.eclipse.swt.layout.RowData");
-    refresh();
-    // set "null"
-    {
-      AbsoluteLayoutInfo layout = AbsoluteLayoutInfo.createExplicitModel(m_lastContext);
-      composite.setLayout(layout);
-    }
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<t:MyComposite layout='{x:Null}'>",
-        "  <Button bounds='3, 3, 12, 25'/>",
-        "</t:MyComposite>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<t:MyComposite layout='{x:Null}'>",
-        "  explicit-layout: absolute",
-        "  <Button bounds='3, 3, 12, 25'>");
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link AbsoluteLayoutInfo#commandCreate(ControlInfo, ControlInfo)}.
-   */
-  public void test_commandCreate() throws Exception {
-    CompositeInfo composite = parse("<Shell/>");
-    refresh();
-    AbsoluteLayoutInfo layout = (AbsoluteLayoutInfo) composite.getLayout();
-    //
-    ControlInfo button = createButton();
-    layout.commandCreate(button, null);
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Button/>",
-        "</Shell>");
-  }
-
-  /**
-   * Test for {@link AbsoluteLayoutInfo#commandMove(ControlInfo, ControlInfo)}.
-   */
-  public void test_commandMove() throws Exception {
-    CompositeInfo composite =
-        parse(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Button wbp:name='button_1'/>",
-            "  <Button wbp:name='button_2'/>",
-            "</Shell>");
-    refresh();
-    AbsoluteLayoutInfo layout = (AbsoluteLayoutInfo) composite.getLayout();
-    ControlInfo button_1 = getObjectByName("button_1");
-    ControlInfo button_2 = getObjectByName("button_2");
-    //
-    layout.commandMove(button_2, button_1);
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Button wbp:name='button_2'/>",
-        "  <Button wbp:name='button_1'/>",
-        "</Shell>");
-  }
-
-  /**
-   * Test for {@link AbsoluteLayoutInfo#commandChangeBounds(ControlInfo, Point, Dimension)}.
-   */
-  public void test_commandChangeBounds_creationFlow() throws Exception {
-    CompositeInfo composite =
-        parse(
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Button wbp:name='button_1' bounds='100, 100, 50, 10'/>",
-            "  <Button wbp:name='button_2' bounds='110, 150, 50, 10'/>",
-            "</Shell>");
-    refresh();
-    AbsoluteLayoutInfo layout = (AbsoluteLayoutInfo) composite.getLayout();
-    ControlInfo button_2 = getObjectByName("button_2");
-    preferences.setValue(IPreferenceConstants.P_CREATION_FLOW, true);
-    layout.commandChangeBounds(button_2, new Point(10, 10), null);
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Button wbp:name='button_2' bounds='10, 10, 50, 10'/>",
-        "  <Button wbp:name='button_1' bounds='100, 100, 50, 10'/>",
-        "</Shell>");
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // commandChangeBounds()
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_commandChangeBounds_hasBounds_setLS_removeLS() throws Exception {
-    String initial = " bounds='1, 2, 3, 4' location='1, 2' size='3, 4'";
-    Point newLocation = new Point(10, 20);
-    Dimension newSize = new Dimension(30, 40);
-    String expected = " bounds='10, 20, 30, 40'";
-    check_commandChangeBounds(initial, newLocation, newSize, expected);
-  }
-
-  public void test_commandChangeBounds_hasBounds_setL() throws Exception {
-    String initial = " bounds='1, 2, 3, 4'";
-    Point newLocation = new Point(10, 20);
-    Dimension newSize = null;
-    String expected = " bounds='10, 20, 3, 4'";
-    check_commandChangeBounds(initial, newLocation, newSize, expected);
-  }
-
-  public void test_commandChangeBounds_noAttributes_setLS() throws Exception {
-    String initial = "";
-    Point newLocation = new Point(10, 20);
-    Dimension newSize = new Dimension(30, 40);
-    String expected = " bounds='10, 20, 30, 40'";
-    check_commandChangeBounds(initial, newLocation, newSize, expected);
-  }
-
-  public void test_commandChangeBounds_noAttributes_setL() throws Exception {
-    String initial = "";
-    Point newLocation = new Point(10, 20);
-    Dimension newSize = null;
-    String expected = " location='10, 20'";
-    check_commandChangeBounds(initial, newLocation, newSize, expected);
-  }
-
-  public void test_commandChangeBounds_noAttributes_setS() throws Exception {
-    String initial = "";
-    Point newLocation = null;
-    Dimension newSize = new Dimension(30, 40);
-    String expected = " size='30, 40'";
-    check_commandChangeBounds(initial, newLocation, newSize, expected);
-  }
-
-  public void test_commandChangeBounds_hasL_setS() throws Exception {
-    String initial = " location='1, 2'";
-    Point newLocation = null;
-    Dimension newSize = new Dimension(30, 40);
-    String expected = " bounds='1, 2, 30, 40'";
-    check_commandChangeBounds(initial, newLocation, newSize, expected);
-  }
-
-  public void test_commandChangeBounds_hasS_setL() throws Exception {
-    String initial = " size='3, 4'";
-    Point newLocation = new Point(10, 20);
-    Dimension newSize = null;
-    String expected = " bounds='10, 20, 3, 4'";
-    check_commandChangeBounds(initial, newLocation, newSize, expected);
-  }
-
-  /**
-   * Test for {@link AbsoluteLayoutInfo#commandChangeBounds(ControlInfo, Point, Dimension)}.
-   */
-  private void check_commandChangeBounds(String initialAttributes,
-      Point newLocation,
-      Dimension newSize,
-      String expectedAttributes) throws Exception {
-    String initialLine = "  <Button wbp:name='button'" + initialAttributes + "/>";
-    CompositeInfo composite =
-        parse(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<Shell>",
-            initialLine,
-            "</Shell>");
-    refresh();
-    AbsoluteLayoutInfo layout = (AbsoluteLayoutInfo) composite.getLayout();
-    ControlInfo button = getObjectByName("button");
-    layout.commandChangeBounds(button, newLocation, newSize);
-    String expectedLine = "  <Button wbp:name='button'" + expectedAttributes + "/>";
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        expectedLine,
-        "</Shell>");
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Auto size
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Modify not "text" or "image" property, no size change.
-   */
-  public void test_autoSize_otherProperty() throws Exception {
-    preferences.setValue(IPreferenceConstants.P_AUTOSIZE_ON_PROPERTY_CHANGE, true);
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Button wbp:name='button' bounds='0, 0, 1, 2'/>",
-        "</Shell>");
-    refresh();
-    ControlInfo button = getObjectByName("button");
-    // set value
-    Property enabledProperty = button.getPropertyByTitle("enabled");
-    enabledProperty.setValue(Boolean.FALSE);
-    waitEventLoop(1);
-    // check
-    Rectangle bounds = button.getModelBounds();
-    assertThat(bounds.width).isEqualTo(1);
-    assertThat(bounds.height).isEqualTo(2);
-  }
-
-  /**
-   * Modify "text" property, so bigger size expected.
-   */
-  public void test_autoSize_textProperty() throws Exception {
-    preferences.setValue(IPreferenceConstants.P_AUTOSIZE_ON_PROPERTY_CHANGE, true);
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Button wbp:name='button' bounds='0, 0, 1, 2'/>",
-        "</Shell>");
-    refresh();
-    ControlInfo button = getObjectByName("button");
-    // set value
-    Property textProperty = button.getPropertyByTitle("text");
-    textProperty.setValue("Very long text");
-    waitEventLoop(1);
-    // check
-    Rectangle bounds = button.getBounds();
-    assertThat(bounds.width).isGreaterThan(50);
-    assertThat(bounds.height).isGreaterThan(20);
-  }
-
-  /**
-   * Modify "image" property, so bigger size expected.
-   */
-  public void test_autoSize_imageProperty() throws Exception {
-    preferences.setValue(IPreferenceConstants.P_AUTOSIZE_ON_PROPERTY_CHANGE, true);
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Button wbp:name='button' bounds='0, 0, 1, 2'/>",
-        "</Shell>");
-    refresh();
-    ControlInfo button = getObjectByName("button");
-    // set value
-    GenericProperty imageProperty = (GenericProperty) button.getPropertyByTitle("image");
-    imageProperty.setExpression("foo.png", null);
-    waitEventLoop(1);
-    // check
-    Rectangle bounds = button.getBounds();
-    assertThat(bounds.width).isGreaterThan(10);
-    assertThat(bounds.height).isGreaterThan(20);
-  }
-
-  /**
-   * Modify "text" property, but {@link IPreferenceConstants#P_AUTOSIZE_ON_PROPERTY_CHANGE} is not
-   * enabled, so no auto-size
-   */
-  public void test_autoSize_textProperty_notEnabled() throws Exception {
-    preferences.setValue(IPreferenceConstants.P_AUTOSIZE_ON_PROPERTY_CHANGE, false);
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Button wbp:name='button' bounds='0, 0, 1, 2'/>",
-        "</Shell>");
-    refresh();
-    ControlInfo button = getObjectByName("button");
-    // set value
-    Property textProperty = button.getPropertyByTitle("text");
-    textProperty.setValue("Very long text");
-    waitEventLoop(1);
-    // check
-    Rectangle bounds = button.getBounds();
-    assertThat(bounds.width).isEqualTo(1);
-    assertThat(bounds.height).isEqualTo(2);
-  }
-
-  /**
-   * Test for <code>Autosize control</code> action.
-   */
-  public void test_autoSizeAction() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Button wbp:name='button' text='New' bounds='0, 0, 1, 2'/>",
-        "</Shell>");
-    refresh();
-    ControlInfo button = getObjectByName("button");
-    Dimension buttonPrefSize = button.getPreferredSize();
-    // prepare action
-    IAction autoSizeAction;
-    {
-      IMenuManager manager = getContextMenu(button);
-      autoSizeAction = findChildAction(manager, "Autosize control");
-      assertNotNull(autoSizeAction);
-    }
-    // perform auto-size
-    autoSizeAction.run();
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Button wbp:name='button' text='New' bounds='0, 0, "
-            + buttonPrefSize.width
-            + ", "
-            + buttonPrefSize.height
-            + "'/>",
-        "</Shell>");
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // "Bounds" property
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private ControlInfo m_propertyBoundsControl;
-  private Property m_propertyBounds;
-
-  public void test_propertyBounds_get() throws Exception {
-    prepareBoundsProperty();
-    assertEquals("(1, 2, 3, 4)", getPropertyText(m_propertyBounds));
-  }
-
-  public void test_propertyBounds_setX() throws Exception {
-    check_propertyBoundsPart("x", 10, "(10, 2, 3, 4)");
-  }
-
-  public void test_propertyBounds_setY() throws Exception {
-    check_propertyBoundsPart("y", 20, "(1, 20, 3, 4)");
-  }
-
-  public void test_propertyBounds_setWidth() throws Exception {
-    check_propertyBoundsPart("width", 30, "(1, 2, 30, 4)");
-  }
-
-  public void test_propertyBounds_setHeight() throws Exception {
-    check_propertyBoundsPart("height", 40, "(1, 2, 3, 40)");
-  }
-
-  private void prepareBoundsProperty() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Button wbp:name='button' bounds='1, 2, 3, 4'/>",
-        "</Shell>");
-    refresh();
-    m_propertyBoundsControl = getObjectByName("button");
-    //
-    m_propertyBounds = PropertyUtils.getByPath(m_propertyBoundsControl, "Bounds");
-  }
-
-  private void check_propertyBoundsPart(String partName, int value, String expected)
-      throws Exception {
-    prepareBoundsProperty();
-    // set part value
-    {
-      Property partProperty =
-          PropertyUtils.getByPath(m_propertyBoundsControl, "Bounds/" + partName);
-      partProperty.setValue(value);
-    }
-    // get "Bounds" again
-    m_propertyBounds = PropertyUtils.getByPath(m_propertyBoundsControl, "Bounds");
-    assertEquals(expected, getPropertyText(m_propertyBounds));
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Clipboard
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_clipboard() throws Exception {
-    final CompositeInfo shell =
-        parse(
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <FillLayout/>",
-            "  </Shell.layout>",
-            "  <Composite wbp:name='composite'>",
-            "    <Button text='Button 1' bounds='1, 2, 3, 4'/>",
-            "    <Button text='Button 2' bounds='10, 20, 30, 40'/>",
-            "  </Composite>",
-            "</Shell>");
-    refresh();
-    // do copy/paste
-    {
-      CompositeInfo composite = getObjectByName("composite");
-      doCopyPaste(composite, new PasteProcedure<ControlInfo>() {
-        @Override
-        public void run(ControlInfo copy) throws Exception {
-          shell.getLayout().command_CREATE(copy, null);
-        }
-      });
-    }
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <Composite wbp:name='composite'>",
-        "    <Button text='Button 1' bounds='1, 2, 3, 4'/>",
-        "    <Button text='Button 2' bounds='10, 20, 30, 40'/>",
-        "  </Composite>",
-        "  <Composite>",
-        "    <Button bounds='1, 2, 3, 4' text='Button 1'/>",
-        "    <Button bounds='10, 20, 30, 40' text='Button 2'/>",
-        "  </Composite>",
-        "</Shell>");
-  }
+	private static final IPreferenceStore preferences =
+			RcpToolkitDescription.INSTANCE.getPreferences();
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Life cycle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void tearDown() throws Exception {
+		super.tearDown();
+		preferences.setValue(IPreferenceConstants.P_CREATION_FLOW, false);
+		preferences.setToDefault(IPreferenceConstants.P_AUTOSIZE_ON_PROPERTY_CHANGE);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_noProperties() throws Exception {
+		CompositeInfo composite = parse("<Shell/>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  implicit-layout: absolute");
+		AbsoluteLayoutInfo layout = (AbsoluteLayoutInfo) composite.getLayout();
+		assertThat(layout.getProperties()).isEmpty();
+	}
+
+	public void test_onRemove() throws Exception {
+		CompositeInfo composite =
+				parse(
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Button text='New Button' bounds='1, 2, 3, 4' location='1, 2' size='3, 4'/>",
+						"</Shell>");
+		refresh();
+		// set new Layout
+		LayoutInfo layout = createObject("org.eclipse.swt.layout.FillLayout");
+		composite.setLayout(layout);
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <Button text='New Button'/>",
+				"</Shell>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <FillLayout>",
+				"  <Button text='New Button'>");
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Explicit
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_parseExplicit() throws Exception {
+		setFileContentSrc(
+				"test/MyComposite.java",
+				getJavaSource(
+						"public class MyComposite extends Composite {",
+						"  public MyComposite(Composite parent, int style) {",
+						"    super(parent, style);",
+						"    setLayout(new RowLayout());",
+						"  }",
+						"}"));
+		waitForAutoBuild();
+		// parse
+		CompositeInfo composite = parse("<t:MyComposite layout='{x:Null}'/>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<t:MyComposite layout='{x:Null}'>",
+				"  explicit-layout: absolute");
+		refresh();
+		LayoutInfo layout = composite.getLayout();
+		// layout should be "null"
+		assertSame(null, composite.getComposite().getLayout());
+		assertThat(layout).isInstanceOf(AbsoluteLayoutInfo.class);
+		// check CreationSupport
+		{
+			CreationSupport creationSupport = layout.getCreationSupport();
+			assertEquals("explicit-layout: absolute", creationSupport.toString());
+			assertEquals("explicit-layout: absolute", creationSupport.getTitle());
+			assertEquals(composite.getElement(), creationSupport.getElement());
+		}
+		// delete
+		assertTrue(layout.canDelete());
+		layout.delete();
+		assertXML("<t:MyComposite/>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<t:MyComposite>",
+				"  implicit-layout: org.eclipse.swt.layout.RowLayout");
+	}
+
+	/**
+	 * Test for setting {@link AbsoluteLayoutInfo}.
+	 */
+	public void test_setExplicit() throws Exception {
+		setFileContentSrc(
+				"test/MyComposite.java",
+				getJavaSource(
+						"public class MyComposite extends Composite {",
+						"  public MyComposite(Composite parent, int style) {",
+						"    super(parent, style);",
+						"    setLayout(new RowLayout());",
+						"  }",
+						"}"));
+		waitForAutoBuild();
+		// parse
+		CompositeInfo composite =
+				parse(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<t:MyComposite>",
+						"  <Button/>",
+						"</t:MyComposite>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<t:MyComposite>",
+				"  implicit-layout: org.eclipse.swt.layout.RowLayout",
+				"  <Button>",
+				"    virtual-LayoutData: org.eclipse.swt.layout.RowData");
+		refresh();
+		// set "null"
+		{
+			AbsoluteLayoutInfo layout = AbsoluteLayoutInfo.createExplicitModel(m_lastContext);
+			composite.setLayout(layout);
+		}
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<t:MyComposite layout='{x:Null}'>",
+				"  <Button bounds='3, 3, 12, 25'/>",
+				"</t:MyComposite>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<t:MyComposite layout='{x:Null}'>",
+				"  explicit-layout: absolute",
+				"  <Button bounds='3, 3, 12, 25'>");
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link AbsoluteLayoutInfo#commandCreate(ControlInfo, ControlInfo)}.
+	 */
+	public void test_commandCreate() throws Exception {
+		CompositeInfo composite = parse("<Shell/>");
+		refresh();
+		AbsoluteLayoutInfo layout = (AbsoluteLayoutInfo) composite.getLayout();
+		//
+		ControlInfo button = createButton();
+		layout.commandCreate(button, null);
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Button/>",
+				"</Shell>");
+	}
+
+	/**
+	 * Test for {@link AbsoluteLayoutInfo#commandMove(ControlInfo, ControlInfo)}.
+	 */
+	public void test_commandMove() throws Exception {
+		CompositeInfo composite =
+				parse(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Button wbp:name='button_1'/>",
+						"  <Button wbp:name='button_2'/>",
+						"</Shell>");
+		refresh();
+		AbsoluteLayoutInfo layout = (AbsoluteLayoutInfo) composite.getLayout();
+		ControlInfo button_1 = getObjectByName("button_1");
+		ControlInfo button_2 = getObjectByName("button_2");
+		//
+		layout.commandMove(button_2, button_1);
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Button wbp:name='button_2'/>",
+				"  <Button wbp:name='button_1'/>",
+				"</Shell>");
+	}
+
+	/**
+	 * Test for {@link AbsoluteLayoutInfo#commandChangeBounds(ControlInfo, Point, Dimension)}.
+	 */
+	public void test_commandChangeBounds_creationFlow() throws Exception {
+		CompositeInfo composite =
+				parse(
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Button wbp:name='button_1' bounds='100, 100, 50, 10'/>",
+						"  <Button wbp:name='button_2' bounds='110, 150, 50, 10'/>",
+						"</Shell>");
+		refresh();
+		AbsoluteLayoutInfo layout = (AbsoluteLayoutInfo) composite.getLayout();
+		ControlInfo button_2 = getObjectByName("button_2");
+		preferences.setValue(IPreferenceConstants.P_CREATION_FLOW, true);
+		layout.commandChangeBounds(button_2, new Point(10, 10), null);
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Button wbp:name='button_2' bounds='10, 10, 50, 10'/>",
+				"  <Button wbp:name='button_1' bounds='100, 100, 50, 10'/>",
+				"</Shell>");
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// commandChangeBounds()
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_commandChangeBounds_hasBounds_setLS_removeLS() throws Exception {
+		String initial = " bounds='1, 2, 3, 4' location='1, 2' size='3, 4'";
+		Point newLocation = new Point(10, 20);
+		Dimension newSize = new Dimension(30, 40);
+		String expected = " bounds='10, 20, 30, 40'";
+		check_commandChangeBounds(initial, newLocation, newSize, expected);
+	}
+
+	public void test_commandChangeBounds_hasBounds_setL() throws Exception {
+		String initial = " bounds='1, 2, 3, 4'";
+		Point newLocation = new Point(10, 20);
+		Dimension newSize = null;
+		String expected = " bounds='10, 20, 3, 4'";
+		check_commandChangeBounds(initial, newLocation, newSize, expected);
+	}
+
+	public void test_commandChangeBounds_noAttributes_setLS() throws Exception {
+		String initial = "";
+		Point newLocation = new Point(10, 20);
+		Dimension newSize = new Dimension(30, 40);
+		String expected = " bounds='10, 20, 30, 40'";
+		check_commandChangeBounds(initial, newLocation, newSize, expected);
+	}
+
+	public void test_commandChangeBounds_noAttributes_setL() throws Exception {
+		String initial = "";
+		Point newLocation = new Point(10, 20);
+		Dimension newSize = null;
+		String expected = " location='10, 20'";
+		check_commandChangeBounds(initial, newLocation, newSize, expected);
+	}
+
+	public void test_commandChangeBounds_noAttributes_setS() throws Exception {
+		String initial = "";
+		Point newLocation = null;
+		Dimension newSize = new Dimension(30, 40);
+		String expected = " size='30, 40'";
+		check_commandChangeBounds(initial, newLocation, newSize, expected);
+	}
+
+	public void test_commandChangeBounds_hasL_setS() throws Exception {
+		String initial = " location='1, 2'";
+		Point newLocation = null;
+		Dimension newSize = new Dimension(30, 40);
+		String expected = " bounds='1, 2, 30, 40'";
+		check_commandChangeBounds(initial, newLocation, newSize, expected);
+	}
+
+	public void test_commandChangeBounds_hasS_setL() throws Exception {
+		String initial = " size='3, 4'";
+		Point newLocation = new Point(10, 20);
+		Dimension newSize = null;
+		String expected = " bounds='10, 20, 3, 4'";
+		check_commandChangeBounds(initial, newLocation, newSize, expected);
+	}
+
+	/**
+	 * Test for {@link AbsoluteLayoutInfo#commandChangeBounds(ControlInfo, Point, Dimension)}.
+	 */
+	private void check_commandChangeBounds(String initialAttributes,
+			Point newLocation,
+			Dimension newSize,
+			String expectedAttributes) throws Exception {
+		String initialLine = "  <Button wbp:name='button'" + initialAttributes + "/>";
+		CompositeInfo composite =
+				parse(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<Shell>",
+						initialLine,
+						"</Shell>");
+		refresh();
+		AbsoluteLayoutInfo layout = (AbsoluteLayoutInfo) composite.getLayout();
+		ControlInfo button = getObjectByName("button");
+		layout.commandChangeBounds(button, newLocation, newSize);
+		String expectedLine = "  <Button wbp:name='button'" + expectedAttributes + "/>";
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				expectedLine,
+				"</Shell>");
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Auto size
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Modify not "text" or "image" property, no size change.
+	 */
+	public void test_autoSize_otherProperty() throws Exception {
+		preferences.setValue(IPreferenceConstants.P_AUTOSIZE_ON_PROPERTY_CHANGE, true);
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Button wbp:name='button' bounds='0, 0, 1, 2'/>",
+				"</Shell>");
+		refresh();
+		ControlInfo button = getObjectByName("button");
+		// set value
+		Property enabledProperty = button.getPropertyByTitle("enabled");
+		enabledProperty.setValue(Boolean.FALSE);
+		waitEventLoop(1);
+		// check
+		Rectangle bounds = button.getModelBounds();
+		assertThat(bounds.width).isEqualTo(1);
+		assertThat(bounds.height).isEqualTo(2);
+	}
+
+	/**
+	 * Modify "text" property, so bigger size expected.
+	 */
+	public void test_autoSize_textProperty() throws Exception {
+		preferences.setValue(IPreferenceConstants.P_AUTOSIZE_ON_PROPERTY_CHANGE, true);
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Button wbp:name='button' bounds='0, 0, 1, 2'/>",
+				"</Shell>");
+		refresh();
+		ControlInfo button = getObjectByName("button");
+		// set value
+		Property textProperty = button.getPropertyByTitle("text");
+		textProperty.setValue("Very long text");
+		waitEventLoop(1);
+		// check
+		Rectangle bounds = button.getBounds();
+		assertThat(bounds.width).isGreaterThan(50);
+		assertThat(bounds.height).isGreaterThan(20);
+	}
+
+	/**
+	 * Modify "image" property, so bigger size expected.
+	 */
+	public void test_autoSize_imageProperty() throws Exception {
+		preferences.setValue(IPreferenceConstants.P_AUTOSIZE_ON_PROPERTY_CHANGE, true);
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Button wbp:name='button' bounds='0, 0, 1, 2'/>",
+				"</Shell>");
+		refresh();
+		ControlInfo button = getObjectByName("button");
+		// set value
+		GenericProperty imageProperty = (GenericProperty) button.getPropertyByTitle("image");
+		imageProperty.setExpression("foo.png", null);
+		waitEventLoop(1);
+		// check
+		Rectangle bounds = button.getBounds();
+		assertThat(bounds.width).isGreaterThan(10);
+		assertThat(bounds.height).isGreaterThan(20);
+	}
+
+	/**
+	 * Modify "text" property, but {@link IPreferenceConstants#P_AUTOSIZE_ON_PROPERTY_CHANGE} is not
+	 * enabled, so no auto-size
+	 */
+	public void test_autoSize_textProperty_notEnabled() throws Exception {
+		preferences.setValue(IPreferenceConstants.P_AUTOSIZE_ON_PROPERTY_CHANGE, false);
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Button wbp:name='button' bounds='0, 0, 1, 2'/>",
+				"</Shell>");
+		refresh();
+		ControlInfo button = getObjectByName("button");
+		// set value
+		Property textProperty = button.getPropertyByTitle("text");
+		textProperty.setValue("Very long text");
+		waitEventLoop(1);
+		// check
+		Rectangle bounds = button.getBounds();
+		assertThat(bounds.width).isEqualTo(1);
+		assertThat(bounds.height).isEqualTo(2);
+	}
+
+	/**
+	 * Test for <code>Autosize control</code> action.
+	 */
+	public void test_autoSizeAction() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Button wbp:name='button' text='New' bounds='0, 0, 1, 2'/>",
+				"</Shell>");
+		refresh();
+		ControlInfo button = getObjectByName("button");
+		Dimension buttonPrefSize = button.getPreferredSize();
+		// prepare action
+		IAction autoSizeAction;
+		{
+			IMenuManager manager = getContextMenu(button);
+			autoSizeAction = findChildAction(manager, "Autosize control");
+			assertNotNull(autoSizeAction);
+		}
+		// perform auto-size
+		autoSizeAction.run();
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Button wbp:name='button' text='New' bounds='0, 0, "
+						+ buttonPrefSize.width
+						+ ", "
+						+ buttonPrefSize.height
+						+ "'/>",
+				"</Shell>");
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// "Bounds" property
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private ControlInfo m_propertyBoundsControl;
+	private Property m_propertyBounds;
+
+	public void test_propertyBounds_get() throws Exception {
+		prepareBoundsProperty();
+		assertEquals("(1, 2, 3, 4)", getPropertyText(m_propertyBounds));
+	}
+
+	public void test_propertyBounds_setX() throws Exception {
+		check_propertyBoundsPart("x", 10, "(10, 2, 3, 4)");
+	}
+
+	public void test_propertyBounds_setY() throws Exception {
+		check_propertyBoundsPart("y", 20, "(1, 20, 3, 4)");
+	}
+
+	public void test_propertyBounds_setWidth() throws Exception {
+		check_propertyBoundsPart("width", 30, "(1, 2, 30, 4)");
+	}
+
+	public void test_propertyBounds_setHeight() throws Exception {
+		check_propertyBoundsPart("height", 40, "(1, 2, 3, 40)");
+	}
+
+	private void prepareBoundsProperty() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Button wbp:name='button' bounds='1, 2, 3, 4'/>",
+				"</Shell>");
+		refresh();
+		m_propertyBoundsControl = getObjectByName("button");
+		//
+		m_propertyBounds = PropertyUtils.getByPath(m_propertyBoundsControl, "Bounds");
+	}
+
+	private void check_propertyBoundsPart(String partName, int value, String expected)
+			throws Exception {
+		prepareBoundsProperty();
+		// set part value
+		{
+			Property partProperty =
+					PropertyUtils.getByPath(m_propertyBoundsControl, "Bounds/" + partName);
+			partProperty.setValue(value);
+		}
+		// get "Bounds" again
+		m_propertyBounds = PropertyUtils.getByPath(m_propertyBoundsControl, "Bounds");
+		assertEquals(expected, getPropertyText(m_propertyBounds));
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Clipboard
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_clipboard() throws Exception {
+		final CompositeInfo shell =
+				parse(
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <FillLayout/>",
+						"  </Shell.layout>",
+						"  <Composite wbp:name='composite'>",
+						"    <Button text='Button 1' bounds='1, 2, 3, 4'/>",
+						"    <Button text='Button 2' bounds='10, 20, 30, 40'/>",
+						"  </Composite>",
+						"</Shell>");
+		refresh();
+		// do copy/paste
+		{
+			CompositeInfo composite = getObjectByName("composite");
+			doCopyPaste(composite, new PasteProcedure<ControlInfo>() {
+				@Override
+				public void run(ControlInfo copy) throws Exception {
+					shell.getLayout().command_CREATE(copy, null);
+				}
+			});
+		}
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <Composite wbp:name='composite'>",
+				"    <Button text='Button 1' bounds='1, 2, 3, 4'/>",
+				"    <Button text='Button 2' bounds='10, 20, 30, 40'/>",
+				"  </Composite>",
+				"  <Composite>",
+				"    <Button bounds='1, 2, 3, 4' text='Button 1'/>",
+				"    <Button bounds='10, 20, 30, 40' text='Button 2'/>",
+				"  </Composite>",
+				"</Shell>");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/layout/FillLayoutGefTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/layout/FillLayoutGefTest.java
index 5a18f384d..ddf1c3e84 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/layout/FillLayoutGefTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/layout/FillLayoutGefTest.java
@@ -22,177 +22,177 @@
  * @author scheglov_ke
  */
 public class FillLayoutGefTest extends XwtGefTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_dropNew_FillLayout() throws Exception {
-    CompositeInfo shell =
-        openEditor(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<Shell/>");
-    loadCreationTool("org.eclipse.swt.layout.FillLayout");
-    //
-    canvas.moveTo(shell, 100, 100);
-    canvas.assertFeedbacks(canvas.getTargetPredicate(shell));
-    canvas.click();
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "</Shell>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_dropNew_FillLayout() throws Exception {
+		CompositeInfo shell =
+				openEditor(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<Shell/>");
+		loadCreationTool("org.eclipse.swt.layout.FillLayout");
+		//
+		canvas.moveTo(shell, 100, 100);
+		canvas.assertFeedbacks(canvas.getTargetPredicate(shell));
+		canvas.click();
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"</Shell>");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // CREATE
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_CREATE_noNext() throws Exception {
-    CompositeInfo shell =
-        openEditor(
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <FillLayout/>",
-            "  </Shell.layout>",
-            "</Shell>");
-    //
-    loadCreationTool("org.eclipse.swt.widgets.Button");
-    canvas.moveTo(shell, 100, 100).click();
-    assertXML(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <Button text='New Button'/>",
-        "</Shell>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// CREATE
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_CREATE_noNext() throws Exception {
+		CompositeInfo shell =
+				openEditor(
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <FillLayout/>",
+						"  </Shell.layout>",
+						"</Shell>");
+		//
+		loadCreationTool("org.eclipse.swt.widgets.Button");
+		canvas.moveTo(shell, 100, 100).click();
+		assertXML(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <Button text='New Button'/>",
+				"</Shell>");
+	}
 
-  public void test_CREATE_withNext() throws Exception {
-    openEditor(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='reference' text='Reference'/>",
-        "</Shell>");
-    XmlObjectInfo reference = getObjectByName("reference");
-    //
-    loadCreationTool("org.eclipse.swt.widgets.Button");
-    canvas.moveTo(reference, 0, 0.5).click();
-    assertXML(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <Button text='New Button'/>",
-        "  <Button wbp:name='reference' text='Reference'/>",
-        "</Shell>");
-  }
+	public void test_CREATE_withNext() throws Exception {
+		openEditor(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='reference' text='Reference'/>",
+				"</Shell>");
+		XmlObjectInfo reference = getObjectByName("reference");
+		//
+		loadCreationTool("org.eclipse.swt.widgets.Button");
+		canvas.moveTo(reference, 0, 0.5).click();
+		assertXML(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <Button text='New Button'/>",
+				"  <Button wbp:name='reference' text='Reference'/>",
+				"</Shell>");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // PASTE
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_PASTE() throws Exception {
-    CompositeInfo shell =
-        openEditor(
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <FillLayout/>",
-            "  </Shell.layout>",
-            "  <Button wbp:name='button' text='My button'/>",
-            "</Shell>");
-    ControlInfo button = getObjectByName("button");
-    //
-    doCopyPaste(button);
-    canvas.moveTo(shell, 2, 100).click();
-    assertXML(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <Button text='My button'/>",
-        "  <Button wbp:name='button' text='My button'/>",
-        "</Shell>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// PASTE
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_PASTE() throws Exception {
+		CompositeInfo shell =
+				openEditor(
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <FillLayout/>",
+						"  </Shell.layout>",
+						"  <Button wbp:name='button' text='My button'/>",
+						"</Shell>");
+		ControlInfo button = getObjectByName("button");
+		//
+		doCopyPaste(button);
+		canvas.moveTo(shell, 2, 100).click();
+		assertXML(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <Button text='My button'/>",
+				"  <Button wbp:name='button' text='My button'/>",
+				"</Shell>");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // MOVE
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_MOVE_reorder() throws Exception {
-    openEditor(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='reference' text='Reference'/>",
-        "  <Button wbp:name='button' text='Button'/>",
-        "</Shell>");
-    XmlObjectInfo button = getObjectByName("button");
-    XmlObjectInfo reference = getObjectByName("reference");
-    //
-    canvas.beginMove(button);
-    canvas.dragTo(reference, 0, 0.5).endDrag();
-    assertXML(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button' text='Button'/>",
-        "  <Button wbp:name='reference' text='Reference'/>",
-        "</Shell>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// MOVE
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_MOVE_reorder() throws Exception {
+		openEditor(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='reference' text='Reference'/>",
+				"  <Button wbp:name='button' text='Button'/>",
+				"</Shell>");
+		XmlObjectInfo button = getObjectByName("button");
+		XmlObjectInfo reference = getObjectByName("reference");
+		//
+		canvas.beginMove(button);
+		canvas.dragTo(reference, 0, 0.5).endDrag();
+		assertXML(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button' text='Button'/>",
+				"  <Button wbp:name='reference' text='Reference'/>",
+				"</Shell>");
+	}
 
-  public void test_MOVE_reparent() throws Exception {
-    openEditor(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <Composite wbp:name='target'>",
-        "    <Composite.layout>",
-        "      <FillLayout/>",
-        "    </Composite.layout>",
-        "  </Composite>",
-        "  <Button wbp:name='button' text='Button'/>",
-        "</Shell>");
-    ControlInfo button = getObjectByName("button");
-    CompositeInfo target = getObjectByName("target");
-    //
-    canvas.beginMove(button);
-    canvas.dragTo(target, 50, 50).endDrag();
-    assertXML(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <Composite wbp:name='target'>",
-        "    <Composite.layout>",
-        "      <FillLayout/>",
-        "    </Composite.layout>",
-        "    <Button wbp:name='button' text='Button'/>",
-        "  </Composite>",
-        "</Shell>");
-  }
+	public void test_MOVE_reparent() throws Exception {
+		openEditor(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <Composite wbp:name='target'>",
+				"    <Composite.layout>",
+				"      <FillLayout/>",
+				"    </Composite.layout>",
+				"  </Composite>",
+				"  <Button wbp:name='button' text='Button'/>",
+				"</Shell>");
+		ControlInfo button = getObjectByName("button");
+		CompositeInfo target = getObjectByName("target");
+		//
+		canvas.beginMove(button);
+		canvas.dragTo(target, 50, 50).endDrag();
+		assertXML(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <Composite wbp:name='target'>",
+				"    <Composite.layout>",
+				"      <FillLayout/>",
+				"    </Composite.layout>",
+				"    <Button wbp:name='button' text='Button'/>",
+				"  </Composite>",
+				"</Shell>");
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/layout/FillLayoutTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/layout/FillLayoutTest.java
index 68cdaa32d..7cc9f8eb3 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/layout/FillLayoutTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/layout/FillLayoutTest.java
@@ -21,141 +21,141 @@
  * @author scheglov_ke
  */
 public class FillLayoutTest extends XwtModelTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_setLayout() throws Exception {
-    CompositeInfo shell = parse("<Shell/>");
-    FillLayoutInfo layout = createObject("org.eclipse.swt.layout.FillLayout");
-    shell.setLayout(layout);
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "</Shell>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_setLayout() throws Exception {
+		CompositeInfo shell = parse("<Shell/>");
+		FillLayoutInfo layout = createObject("org.eclipse.swt.layout.FillLayout");
+		shell.setLayout(layout);
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"</Shell>");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // isHorizontal()
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link FillLayoutInfo#isHorizontal()}.
-   */
-  public void test_isHorizontal_default() throws Exception {
-    CompositeInfo shell =
-        parse(
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <FillLayout/>",
-            "  </Shell.layout>",
-            "</Shell>");
-    shell.refresh();
-    FillLayoutInfo layout = (FillLayoutInfo) shell.getLayout();
-    //
-    assertTrue(layout.isHorizontal());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// isHorizontal()
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link FillLayoutInfo#isHorizontal()}.
+	 */
+	public void test_isHorizontal_default() throws Exception {
+		CompositeInfo shell =
+				parse(
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <FillLayout/>",
+						"  </Shell.layout>",
+						"</Shell>");
+		shell.refresh();
+		FillLayoutInfo layout = (FillLayoutInfo) shell.getLayout();
+		//
+		assertTrue(layout.isHorizontal());
+	}
 
-  /**
-   * Test for {@link FillLayoutInfo#isHorizontal()}.
-   */
-  public void test_isHorizontal_true() throws Exception {
-    CompositeInfo shell =
-        parse(
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <FillLayout type='HORIZONTAL'/>",
-            "  </Shell.layout>",
-            "</Shell>");
-    shell.refresh();
-    FillLayoutInfo layout = (FillLayoutInfo) shell.getLayout();
-    //
-    assertTrue(layout.isHorizontal());
-  }
+	/**
+	 * Test for {@link FillLayoutInfo#isHorizontal()}.
+	 */
+	public void test_isHorizontal_true() throws Exception {
+		CompositeInfo shell =
+				parse(
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <FillLayout type='HORIZONTAL'/>",
+						"  </Shell.layout>",
+						"</Shell>");
+		shell.refresh();
+		FillLayoutInfo layout = (FillLayoutInfo) shell.getLayout();
+		//
+		assertTrue(layout.isHorizontal());
+	}
 
-  /**
-   * Test for {@link FillLayoutInfo#isHorizontal()}.
-   */
-  public void test_isHorizontal_false() throws Exception {
-    CompositeInfo shell =
-        parse(
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <FillLayout type='VERTICAL'/>",
-            "  </Shell.layout>",
-            "</Shell>");
-    shell.refresh();
-    FillLayoutInfo layout = (FillLayoutInfo) shell.getLayout();
-    //
-    assertFalse(layout.isHorizontal());
-  }
+	/**
+	 * Test for {@link FillLayoutInfo#isHorizontal()}.
+	 */
+	public void test_isHorizontal_false() throws Exception {
+		CompositeInfo shell =
+				parse(
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <FillLayout type='VERTICAL'/>",
+						"  </Shell.layout>",
+						"</Shell>");
+		shell.refresh();
+		FillLayoutInfo layout = (FillLayoutInfo) shell.getLayout();
+		//
+		assertFalse(layout.isHorizontal());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Clipboard
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_clipboard_copyLayout() throws Exception {
-    CompositeInfo shell =
-        parse(
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <RowLayout/>",
-            "  </Shell.layout>",
-            "  <Composite wbp:name='composite'>",
-            "    <Composite.layout>",
-            "      <FillLayout/>",
-            "    </Composite.layout>",
-            "    <Button text='Button 1'/>",
-            "    <Button text='Button 2'/>",
-            "  </Composite>",
-            "</Shell>");
-    refresh();
-    CompositeInfo composite = getObjectByName("composite");
-    //
-    shell.startEdit();
-    {
-      XmlObjectMemento memento = XmlObjectMemento.createMemento(composite);
-      CompositeInfo newComposite = (CompositeInfo) memento.create(shell);
-      shell.getLayout().command_CREATE(newComposite, null);
-      memento.apply();
-    }
-    assertXML(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <RowLayout/>",
-        "  </Shell.layout>",
-        "  <Composite wbp:name='composite'>",
-        "    <Composite.layout>",
-        "      <FillLayout/>",
-        "    </Composite.layout>",
-        "    <Button text='Button 1'/>",
-        "    <Button text='Button 2'/>",
-        "  </Composite>",
-        "  <Composite>",
-        "    <Composite.layout>",
-        "      <FillLayout/>",
-        "    </Composite.layout>",
-        "    <Button text='Button 1'/>",
-        "    <Button text='Button 2'/>",
-        "  </Composite>",
-        "</Shell>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Clipboard
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_clipboard_copyLayout() throws Exception {
+		CompositeInfo shell =
+				parse(
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <RowLayout/>",
+						"  </Shell.layout>",
+						"  <Composite wbp:name='composite'>",
+						"    <Composite.layout>",
+						"      <FillLayout/>",
+						"    </Composite.layout>",
+						"    <Button text='Button 1'/>",
+						"    <Button text='Button 2'/>",
+						"  </Composite>",
+						"</Shell>");
+		refresh();
+		CompositeInfo composite = getObjectByName("composite");
+		//
+		shell.startEdit();
+		{
+			XmlObjectMemento memento = XmlObjectMemento.createMemento(composite);
+			CompositeInfo newComposite = (CompositeInfo) memento.create(shell);
+			shell.getLayout().command_CREATE(newComposite, null);
+			memento.apply();
+		}
+		assertXML(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <RowLayout/>",
+				"  </Shell.layout>",
+				"  <Composite wbp:name='composite'>",
+				"    <Composite.layout>",
+				"      <FillLayout/>",
+				"    </Composite.layout>",
+				"    <Button text='Button 1'/>",
+				"    <Button text='Button 2'/>",
+				"  </Composite>",
+				"  <Composite>",
+				"    <Composite.layout>",
+				"      <FillLayout/>",
+				"    </Composite.layout>",
+				"    <Button text='Button 1'/>",
+				"    <Button text='Button 2'/>",
+				"  </Composite>",
+				"</Shell>");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/layout/FormLayoutGefTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/layout/FormLayoutGefTest.java
index fd49edd4e..2175786c8 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/layout/FormLayoutGefTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/layout/FormLayoutGefTest.java
@@ -22,467 +22,467 @@
  * @author scheglov_ke
  */
 public class FormLayoutGefTest extends XwtGefTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Life cycle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void setUp() throws Exception {
-    super.setUp();
-    prepareBox();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Life cycle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void setUp() throws Exception {
+		super.setUp();
+		prepareBox();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Canvas
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_set() throws Exception {
-    CompositeInfo composite =
-        openEditor(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<Composite/>");
-    // use canvas
-    loadCreationTool("org.eclipse.swt.layout.FormLayout");
-    canvas.moveTo(composite, 100, 100).click();
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Composite>",
-        "  <Composite.layout>",
-        "    <FormLayout/>",
-        "  </Composite.layout>",
-        "</Composite>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Canvas
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_set() throws Exception {
+		CompositeInfo composite =
+				openEditor(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<Composite/>");
+		// use canvas
+		loadCreationTool("org.eclipse.swt.layout.FormLayout");
+		canvas.moveTo(composite, 100, 100).click();
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Composite>",
+				"  <Composite.layout>",
+				"    <FormLayout/>",
+				"  </Composite.layout>",
+				"</Composite>");
+	}
 
-  public void test_canvas_CREATE() throws Exception {
-    CompositeInfo composite =
-        openEditor(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<Composite>",
-            "  <Composite.layout>",
-            "    <FormLayout/>",
-            "  </Composite.layout>",
-            "</Composite>");
-    // create Box
-    loadBox();
-    // use canvas
-    canvas.sideMode().create(100, 50);
-    canvas.target(composite).in(30, 40).move();
-    canvas.click();
-    assertXML(
-        "<Composite>",
-        "  <Composite.layout>",
-        "    <FormLayout/>",
-        "  </Composite.layout>",
-        "  <t:Box>",
-        "    <t:Box.layoutData>",
-        "      <FormData>",
-        "        <FormData.top>",
-        "          <FormAttachment numerator='0' offset='40'/>",
-        "        </FormData.top>",
-        "        <FormData.left>",
-        "          <FormAttachment numerator='0' offset='30'/>",
-        "        </FormData.left>",
-        "      </FormData>",
-        "    </t:Box.layoutData>",
-        "  </t:Box>",
-        "</Composite>");
-  }
+	public void test_canvas_CREATE() throws Exception {
+		CompositeInfo composite =
+				openEditor(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<Composite>",
+						"  <Composite.layout>",
+						"    <FormLayout/>",
+						"  </Composite.layout>",
+						"</Composite>");
+		// create Box
+		loadBox();
+		// use canvas
+		canvas.sideMode().create(100, 50);
+		canvas.target(composite).in(30, 40).move();
+		canvas.click();
+		assertXML(
+				"<Composite>",
+				"  <Composite.layout>",
+				"    <FormLayout/>",
+				"  </Composite.layout>",
+				"  <t:Box>",
+				"    <t:Box.layoutData>",
+				"      <FormData>",
+				"        <FormData.top>",
+				"          <FormAttachment numerator='0' offset='40'/>",
+				"        </FormData.top>",
+				"        <FormData.left>",
+				"          <FormAttachment numerator='0' offset='30'/>",
+				"        </FormData.left>",
+				"      </FormData>",
+				"    </t:Box.layoutData>",
+				"  </t:Box>",
+				"</Composite>");
+	}
 
-  public void test_canvas_PASTE() throws Exception {
-    CompositeInfo composite =
-        openEditor(
-            "<Composite>",
-            "  <Composite.layout>",
-            "    <FormLayout/>",
-            "  </Composite.layout>",
-            "  <t:Box wbp:name='box'>",
-            "    <t:Box.layoutData>",
-            "      <FormData>",
-            "        <FormData.top>",
-            "          <FormAttachment numerator='0' offset='40'/>",
-            "        </FormData.top>",
-            "        <FormData.left>",
-            "          <FormAttachment numerator='0' offset='30'/>",
-            "        </FormData.left>",
-            "      </FormData>",
-            "    </t:Box.layoutData>",
-            "  </t:Box>",
-            "</Composite>");
-    // copy/paste "box"
-    {
-      ControlInfo box = getObjectByName("box");
-      doCopyPaste(box);
-    }
-    // move
-    canvas.sideMode().create(100, 50);
-    canvas.target(composite).inX(200).inY(150).move();
-    canvas.click();
-    assertXML(
-        "<Composite>",
-        "  <Composite.layout>",
-        "    <FormLayout/>",
-        "  </Composite.layout>",
-        "  <t:Box wbp:name='box'>",
-        "    <t:Box.layoutData>",
-        "      <FormData>",
-        "        <FormData.top>",
-        "          <FormAttachment numerator='0' offset='40'/>",
-        "        </FormData.top>",
-        "        <FormData.left>",
-        "          <FormAttachment numerator='0' offset='30'/>",
-        "        </FormData.left>",
-        "      </FormData>",
-        "    </t:Box.layoutData>",
-        "  </t:Box>",
-        "  <t:Box>",
-        "    <t:Box.layoutData>",
-        "      <FormData>",
-        "        <FormData.bottom>",
-        "          <FormAttachment numerator='100' offset='-100'/>",
-        "        </FormData.bottom>",
-        "        <FormData.right>",
-        "          <FormAttachment numerator='100' offset='-150'/>",
-        "        </FormData.right>",
-        "      </FormData>",
-        "    </t:Box.layoutData>",
-        "  </t:Box>",
-        "</Composite>");
-  }
+	public void test_canvas_PASTE() throws Exception {
+		CompositeInfo composite =
+				openEditor(
+						"<Composite>",
+						"  <Composite.layout>",
+						"    <FormLayout/>",
+						"  </Composite.layout>",
+						"  <t:Box wbp:name='box'>",
+						"    <t:Box.layoutData>",
+						"      <FormData>",
+						"        <FormData.top>",
+						"          <FormAttachment numerator='0' offset='40'/>",
+						"        </FormData.top>",
+						"        <FormData.left>",
+						"          <FormAttachment numerator='0' offset='30'/>",
+						"        </FormData.left>",
+						"      </FormData>",
+						"    </t:Box.layoutData>",
+						"  </t:Box>",
+						"</Composite>");
+		// copy/paste "box"
+		{
+			ControlInfo box = getObjectByName("box");
+			doCopyPaste(box);
+		}
+		// move
+		canvas.sideMode().create(100, 50);
+		canvas.target(composite).inX(200).inY(150).move();
+		canvas.click();
+		assertXML(
+				"<Composite>",
+				"  <Composite.layout>",
+				"    <FormLayout/>",
+				"  </Composite.layout>",
+				"  <t:Box wbp:name='box'>",
+				"    <t:Box.layoutData>",
+				"      <FormData>",
+				"        <FormData.top>",
+				"          <FormAttachment numerator='0' offset='40'/>",
+				"        </FormData.top>",
+				"        <FormData.left>",
+				"          <FormAttachment numerator='0' offset='30'/>",
+				"        </FormData.left>",
+				"      </FormData>",
+				"    </t:Box.layoutData>",
+				"  </t:Box>",
+				"  <t:Box>",
+				"    <t:Box.layoutData>",
+				"      <FormData>",
+				"        <FormData.bottom>",
+				"          <FormAttachment numerator='100' offset='-100'/>",
+				"        </FormData.bottom>",
+				"        <FormData.right>",
+				"          <FormAttachment numerator='100' offset='-150'/>",
+				"        </FormData.right>",
+				"      </FormData>",
+				"    </t:Box.layoutData>",
+				"  </t:Box>",
+				"</Composite>");
+	}
 
-  public void test_canvas_MOVE() throws Exception {
-    CompositeInfo composite =
-        openEditor(
-            "<Composite>",
-            "  <Composite.layout>",
-            "    <FormLayout/>",
-            "  </Composite.layout>",
-            "  <t:Box wbp:name='box'>",
-            "    <t:Box.layoutData>",
-            "      <FormData>",
-            "        <FormData.top>",
-            "          <FormAttachment numerator='0' offset='40'/>",
-            "        </FormData.top>",
-            "        <FormData.left>",
-            "          <FormAttachment numerator='0' offset='30'/>",
-            "        </FormData.left>",
-            "      </FormData>",
-            "    </t:Box.layoutData>",
-            "  </t:Box>",
-            "</Composite>");
-    ControlInfo button = getObjectByName("box");
-    // move
-    canvas.sideMode().beginMove(button);
-    canvas.target(composite).inX(50).inY(80).drag();
-    canvas.endDrag();
-    assertXML(
-        "<Composite>",
-        "  <Composite.layout>",
-        "    <FormLayout/>",
-        "  </Composite.layout>",
-        "  <t:Box wbp:name='box'>",
-        "    <t:Box.layoutData>",
-        "      <FormData>",
-        "        <FormData.top>",
-        "          <FormAttachment numerator='0' offset='80'/>",
-        "        </FormData.top>",
-        "        <FormData.left>",
-        "          <FormAttachment numerator='0' offset='50'/>",
-        "        </FormData.left>",
-        "      </FormData>",
-        "    </t:Box.layoutData>",
-        "  </t:Box>",
-        "</Composite>");
-  }
+	public void test_canvas_MOVE() throws Exception {
+		CompositeInfo composite =
+				openEditor(
+						"<Composite>",
+						"  <Composite.layout>",
+						"    <FormLayout/>",
+						"  </Composite.layout>",
+						"  <t:Box wbp:name='box'>",
+						"    <t:Box.layoutData>",
+						"      <FormData>",
+						"        <FormData.top>",
+						"          <FormAttachment numerator='0' offset='40'/>",
+						"        </FormData.top>",
+						"        <FormData.left>",
+						"          <FormAttachment numerator='0' offset='30'/>",
+						"        </FormData.left>",
+						"      </FormData>",
+						"    </t:Box.layoutData>",
+						"  </t:Box>",
+						"</Composite>");
+		ControlInfo button = getObjectByName("box");
+		// move
+		canvas.sideMode().beginMove(button);
+		canvas.target(composite).inX(50).inY(80).drag();
+		canvas.endDrag();
+		assertXML(
+				"<Composite>",
+				"  <Composite.layout>",
+				"    <FormLayout/>",
+				"  </Composite.layout>",
+				"  <t:Box wbp:name='box'>",
+				"    <t:Box.layoutData>",
+				"      <FormData>",
+				"        <FormData.top>",
+				"          <FormAttachment numerator='0' offset='80'/>",
+				"        </FormData.top>",
+				"        <FormData.left>",
+				"          <FormAttachment numerator='0' offset='50'/>",
+				"        </FormData.left>",
+				"      </FormData>",
+				"    </t:Box.layoutData>",
+				"  </t:Box>",
+				"</Composite>");
+	}
 
-  public void test_canvas_RESIZE() throws Exception {
-    openEditor(
-        "<Composite>",
-        "  <Composite.layout>",
-        "    <FormLayout/>",
-        "  </Composite.layout>",
-        "  <t:Box wbp:name='box'>",
-        "    <t:Box.layoutData>",
-        "      <FormData>",
-        "        <FormData.top>",
-        "          <FormAttachment numerator='0' offset='40'/>",
-        "        </FormData.top>",
-        "        <FormData.left>",
-        "          <FormAttachment numerator='0' offset='30'/>",
-        "        </FormData.left>",
-        "      </FormData>",
-        "    </t:Box.layoutData>",
-        "  </t:Box>",
-        "</Composite>");
-    ControlInfo button = getObjectByName("box");
-    //
-    canvas.beginResize(button, IPositionConstants.SOUTH_EAST);
-    canvas.dragTo(button, 150, 100).endDrag();
-    assertXML(
-        "<Composite>",
-        "  <Composite.layout>",
-        "    <FormLayout/>",
-        "  </Composite.layout>",
-        "  <t:Box wbp:name='box'>",
-        "    <t:Box.layoutData>",
-        "      <FormData>",
-        "        <FormData.bottom>",
-        "          <FormAttachment numerator='0' offset='140'/>",
-        "        </FormData.bottom>",
-        "        <FormData.right>",
-        "          <FormAttachment numerator='0' offset='180'/>",
-        "        </FormData.right>",
-        "        <FormData.top>",
-        "          <FormAttachment numerator='0' offset='40'/>",
-        "        </FormData.top>",
-        "        <FormData.left>",
-        "          <FormAttachment numerator='0' offset='30'/>",
-        "        </FormData.left>",
-        "      </FormData>",
-        "    </t:Box.layoutData>",
-        "  </t:Box>",
-        "</Composite>");
-  }
+	public void test_canvas_RESIZE() throws Exception {
+		openEditor(
+				"<Composite>",
+				"  <Composite.layout>",
+				"    <FormLayout/>",
+				"  </Composite.layout>",
+				"  <t:Box wbp:name='box'>",
+				"    <t:Box.layoutData>",
+				"      <FormData>",
+				"        <FormData.top>",
+				"          <FormAttachment numerator='0' offset='40'/>",
+				"        </FormData.top>",
+				"        <FormData.left>",
+				"          <FormAttachment numerator='0' offset='30'/>",
+				"        </FormData.left>",
+				"      </FormData>",
+				"    </t:Box.layoutData>",
+				"  </t:Box>",
+				"</Composite>");
+		ControlInfo button = getObjectByName("box");
+		//
+		canvas.beginResize(button, IPositionConstants.SOUTH_EAST);
+		canvas.dragTo(button, 150, 100).endDrag();
+		assertXML(
+				"<Composite>",
+				"  <Composite.layout>",
+				"    <FormLayout/>",
+				"  </Composite.layout>",
+				"  <t:Box wbp:name='box'>",
+				"    <t:Box.layoutData>",
+				"      <FormData>",
+				"        <FormData.bottom>",
+				"          <FormAttachment numerator='0' offset='140'/>",
+				"        </FormData.bottom>",
+				"        <FormData.right>",
+				"          <FormAttachment numerator='0' offset='180'/>",
+				"        </FormData.right>",
+				"        <FormData.top>",
+				"          <FormAttachment numerator='0' offset='40'/>",
+				"        </FormData.top>",
+				"        <FormData.left>",
+				"          <FormAttachment numerator='0' offset='30'/>",
+				"        </FormData.left>",
+				"      </FormData>",
+				"    </t:Box.layoutData>",
+				"  </t:Box>",
+				"</Composite>");
+	}
 
-  public void test_canvas_ADD() throws Exception {
-    openEditor(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <RowLayout/>",
-        "  </Shell.layout>",
-        "  <Composite wbp:name='target'>",
-        "    <Composite.layout>",
-        "      <FormLayout/>",
-        "    </Composite.layout>",
-        "    <Composite.layoutData>",
-        "      <RowData width='300' height='250'/>",
-        "    </Composite.layoutData>",
-        "  </Composite>",
-        "  <t:Box wbp:name='box' text='Box'/>",
-        "</Shell>");
-    CompositeInfo target = getObjectByName("target");
-    ControlInfo box = getObjectByName("box");
-    // move
-    canvas.sideMode().beginMove(box);
-    canvas.target(target).inX(30).inY(20).drag();
-    canvas.endDrag();
-    assertXML(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <RowLayout/>",
-        "  </Shell.layout>",
-        "  <Composite wbp:name='target'>",
-        "    <Composite.layout>",
-        "      <FormLayout/>",
-        "    </Composite.layout>",
-        "    <Composite.layoutData>",
-        "      <RowData width='300' height='250'/>",
-        "    </Composite.layoutData>",
-        "    <t:Box wbp:name='box' text='Box'>",
-        "      <t:Box.layoutData>",
-        "        <FormData>",
-        "          <FormData.top>",
-        "            <FormAttachment numerator='0' offset='20'/>",
-        "          </FormData.top>",
-        "          <FormData.left>",
-        "            <FormAttachment numerator='0' offset='30'/>",
-        "          </FormData.left>",
-        "        </FormData>",
-        "      </t:Box.layoutData>",
-        "    </t:Box>",
-        "  </Composite>",
-        "</Shell>");
-  }
+	public void test_canvas_ADD() throws Exception {
+		openEditor(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <RowLayout/>",
+				"  </Shell.layout>",
+				"  <Composite wbp:name='target'>",
+				"    <Composite.layout>",
+				"      <FormLayout/>",
+				"    </Composite.layout>",
+				"    <Composite.layoutData>",
+				"      <RowData width='300' height='250'/>",
+				"    </Composite.layoutData>",
+				"  </Composite>",
+				"  <t:Box wbp:name='box' text='Box'/>",
+				"</Shell>");
+		CompositeInfo target = getObjectByName("target");
+		ControlInfo box = getObjectByName("box");
+		// move
+		canvas.sideMode().beginMove(box);
+		canvas.target(target).inX(30).inY(20).drag();
+		canvas.endDrag();
+		assertXML(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <RowLayout/>",
+				"  </Shell.layout>",
+				"  <Composite wbp:name='target'>",
+				"    <Composite.layout>",
+				"      <FormLayout/>",
+				"    </Composite.layout>",
+				"    <Composite.layoutData>",
+				"      <RowData width='300' height='250'/>",
+				"    </Composite.layoutData>",
+				"    <t:Box wbp:name='box' text='Box'>",
+				"      <t:Box.layoutData>",
+				"        <FormData>",
+				"          <FormData.top>",
+				"            <FormAttachment numerator='0' offset='20'/>",
+				"          </FormData.top>",
+				"          <FormData.left>",
+				"            <FormAttachment numerator='0' offset='30'/>",
+				"          </FormData.left>",
+				"        </FormData>",
+				"      </t:Box.layoutData>",
+				"    </t:Box>",
+				"  </Composite>",
+				"</Shell>");
+	}
 
-  public void test_delete() throws Exception {
-    openEditor(
-        "<Composite>",
-        "  <Composite.layout>",
-        "    <FormLayout/>",
-        "  </Composite.layout>",
-        "  <t:Box wbp:name='box'>",
-        "    <t:Box.layoutData>",
-        "      <FormData>",
-        "        <FormData.top>",
-        "          <FormAttachment numerator='0' offset='40'/>",
-        "        </FormData.top>",
-        "        <FormData.left>",
-        "          <FormAttachment numerator='0' offset='30'/>",
-        "        </FormData.left>",
-        "      </FormData>",
-        "    </t:Box.layoutData>",
-        "  </t:Box>",
-        "</Composite>");
-    ControlInfo box = getObjectByName("box");
-    // delete
-    box.delete();
-    // test
-    assertXML(
-        "<Composite>",
-        "  <Composite.layout>",
-        "    <FormLayout/>",
-        "  </Composite.layout>",
-        "</Composite>");
-  }
+	public void test_delete() throws Exception {
+		openEditor(
+				"<Composite>",
+				"  <Composite.layout>",
+				"    <FormLayout/>",
+				"  </Composite.layout>",
+				"  <t:Box wbp:name='box'>",
+				"    <t:Box.layoutData>",
+				"      <FormData>",
+				"        <FormData.top>",
+				"          <FormAttachment numerator='0' offset='40'/>",
+				"        </FormData.top>",
+				"        <FormData.left>",
+				"          <FormAttachment numerator='0' offset='30'/>",
+				"        </FormData.left>",
+				"      </FormData>",
+				"    </t:Box.layoutData>",
+				"  </t:Box>",
+				"</Composite>");
+		ControlInfo box = getObjectByName("box");
+		// delete
+		box.delete();
+		// test
+		assertXML(
+				"<Composite>",
+				"  <Composite.layout>",
+				"    <FormLayout/>",
+				"  </Composite.layout>",
+				"</Composite>");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tree
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_tree_CREATE() throws Exception {
-    CompositeInfo composite =
-        openEditor(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<Composite>",
-            "  <Composite.layout>",
-            "    <FormLayout/>",
-            "  </Composite.layout>",
-            "</Composite>");
-    // create Box
-    ControlInfo newBox = loadBox();
-    // use tree
-    tree.moveOn(composite);
-    tree.assertFeedback_on(composite);
-    tree.click();
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Composite>",
-        "  <Composite.layout>",
-        "    <FormLayout/>",
-        "  </Composite.layout>",
-        "  <t:Box/>",
-        "</Composite>");
-    tree.assertPrimarySelected(newBox);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tree
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_tree_CREATE() throws Exception {
+		CompositeInfo composite =
+				openEditor(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<Composite>",
+						"  <Composite.layout>",
+						"    <FormLayout/>",
+						"  </Composite.layout>",
+						"</Composite>");
+		// create Box
+		ControlInfo newBox = loadBox();
+		// use tree
+		tree.moveOn(composite);
+		tree.assertFeedback_on(composite);
+		tree.click();
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Composite>",
+				"  <Composite.layout>",
+				"    <FormLayout/>",
+				"  </Composite.layout>",
+				"  <t:Box/>",
+				"</Composite>");
+		tree.assertPrimarySelected(newBox);
+	}
 
-  public void test_tree_PASTE() throws Exception {
-    CompositeInfo composite =
-        openEditor(
-            "<Composite>",
-            "  <Composite.layout>",
-            "    <FormLayout/>",
-            "  </Composite.layout>",
-            "  <t:Box wbp:name='box' text='MyButton'>",
-            "    <t:Box.layoutData>",
-            "      <FormData>",
-            "        <FormData.top>",
-            "          <FormAttachment numerator='0' offset='40'/>",
-            "        </FormData.top>",
-            "        <FormData.left>",
-            "          <FormAttachment numerator='0' offset='30'/>",
-            "        </FormData.left>",
-            "      </FormData>",
-            "    </t:Box.layoutData>",
-            "  </t:Box>",
-            "</Composite>");
-    // copy/paste "box"
-    {
-      ControlInfo box = getObjectByName("box");
-      doCopyPaste(box);
-    }
-    // use tree
-    tree.moveOn(composite);
-    tree.assertFeedback_on(composite);
-    tree.click();
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Composite>",
-        "  <Composite.layout>",
-        "    <FormLayout/>",
-        "  </Composite.layout>",
-        "  <t:Box wbp:name='box' text='MyButton'>",
-        "    <t:Box.layoutData>",
-        "      <FormData>",
-        "        <FormData.top>",
-        "          <FormAttachment numerator='0' offset='40'/>",
-        "        </FormData.top>",
-        "        <FormData.left>",
-        "          <FormAttachment numerator='0' offset='30'/>",
-        "        </FormData.left>",
-        "      </FormData>",
-        "    </t:Box.layoutData>",
-        "  </t:Box>",
-        "  <t:Box text='MyButton'/>",
-        "</Composite>");
-  }
+	public void test_tree_PASTE() throws Exception {
+		CompositeInfo composite =
+				openEditor(
+						"<Composite>",
+						"  <Composite.layout>",
+						"    <FormLayout/>",
+						"  </Composite.layout>",
+						"  <t:Box wbp:name='box' text='MyButton'>",
+						"    <t:Box.layoutData>",
+						"      <FormData>",
+						"        <FormData.top>",
+						"          <FormAttachment numerator='0' offset='40'/>",
+						"        </FormData.top>",
+						"        <FormData.left>",
+						"          <FormAttachment numerator='0' offset='30'/>",
+						"        </FormData.left>",
+						"      </FormData>",
+						"    </t:Box.layoutData>",
+						"  </t:Box>",
+						"</Composite>");
+		// copy/paste "box"
+		{
+			ControlInfo box = getObjectByName("box");
+			doCopyPaste(box);
+		}
+		// use tree
+		tree.moveOn(composite);
+		tree.assertFeedback_on(composite);
+		tree.click();
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Composite>",
+				"  <Composite.layout>",
+				"    <FormLayout/>",
+				"  </Composite.layout>",
+				"  <t:Box wbp:name='box' text='MyButton'>",
+				"    <t:Box.layoutData>",
+				"      <FormData>",
+				"        <FormData.top>",
+				"          <FormAttachment numerator='0' offset='40'/>",
+				"        </FormData.top>",
+				"        <FormData.left>",
+				"          <FormAttachment numerator='0' offset='30'/>",
+				"        </FormData.left>",
+				"      </FormData>",
+				"    </t:Box.layoutData>",
+				"  </t:Box>",
+				"  <t:Box text='MyButton'/>",
+				"</Composite>");
+	}
 
-  public void test_tree_MOVE() throws Exception {
-    openEditor(
-        "// filler filler filler filler filler",
-        "<Composite>",
-        "  <Composite.layout>",
-        "    <FormLayout/>",
-        "  </Composite.layout>",
-        "  <t:Box wbp:name='box_1'/>",
-        "  <t:Box wbp:name='box_2'/>",
-        "</Composite>");
-    ControlInfo box_1 = getObjectByName("box_1");
-    ControlInfo box_2 = getObjectByName("box_2");
-    // use tree
-    tree.startDrag(box_2);
-    tree.dragBefore(box_1);
-    tree.assertFeedback_before(box_1);
-    tree.endDrag();
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Composite>",
-        "  <Composite.layout>",
-        "    <FormLayout/>",
-        "  </Composite.layout>",
-        "  <t:Box wbp:name='box_2'/>",
-        "  <t:Box wbp:name='box_1'/>",
-        "</Composite>");
-  }
+	public void test_tree_MOVE() throws Exception {
+		openEditor(
+				"// filler filler filler filler filler",
+				"<Composite>",
+				"  <Composite.layout>",
+				"    <FormLayout/>",
+				"  </Composite.layout>",
+				"  <t:Box wbp:name='box_1'/>",
+				"  <t:Box wbp:name='box_2'/>",
+				"</Composite>");
+		ControlInfo box_1 = getObjectByName("box_1");
+		ControlInfo box_2 = getObjectByName("box_2");
+		// use tree
+		tree.startDrag(box_2);
+		tree.dragBefore(box_1);
+		tree.assertFeedback_before(box_1);
+		tree.endDrag();
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Composite>",
+				"  <Composite.layout>",
+				"    <FormLayout/>",
+				"  </Composite.layout>",
+				"  <t:Box wbp:name='box_2'/>",
+				"  <t:Box wbp:name='box_1'/>",
+				"</Composite>");
+	}
 
-  public void test_tree_ADD() throws Exception {
-    openEditor(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <RowLayout/>",
-        "  </Shell.layout>",
-        "  <Composite wbp:name='target'>",
-        "    <Composite.layout>",
-        "      <FormLayout/>",
-        "    </Composite.layout>",
-        "  </Composite>",
-        "  <t:Box wbp:name='box' text='Box'/>",
-        "</Shell>");
-    CompositeInfo target = getObjectByName("target");
-    ControlInfo box = getObjectByName("box");
-    // use tree
-    tree.startDrag(box);
-    tree.dragOn(target);
-    tree.assertFeedback_on(target);
-    tree.endDrag();
-    assertXML(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <RowLayout/>",
-        "  </Shell.layout>",
-        "  <Composite wbp:name='target'>",
-        "    <Composite.layout>",
-        "      <FormLayout/>",
-        "    </Composite.layout>",
-        "    <t:Box wbp:name='box' text='Box'/>",
-        "  </Composite>",
-        "</Shell>");
-  }
+	public void test_tree_ADD() throws Exception {
+		openEditor(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <RowLayout/>",
+				"  </Shell.layout>",
+				"  <Composite wbp:name='target'>",
+				"    <Composite.layout>",
+				"      <FormLayout/>",
+				"    </Composite.layout>",
+				"  </Composite>",
+				"  <t:Box wbp:name='box' text='Box'/>",
+				"</Shell>");
+		CompositeInfo target = getObjectByName("target");
+		ControlInfo box = getObjectByName("box");
+		// use tree
+		tree.startDrag(box);
+		tree.dragOn(target);
+		tree.assertFeedback_on(target);
+		tree.endDrag();
+		assertXML(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <RowLayout/>",
+				"  </Shell.layout>",
+				"  <Composite wbp:name='target'>",
+				"    <Composite.layout>",
+				"      <FormLayout/>",
+				"    </Composite.layout>",
+				"    <t:Box wbp:name='box' text='Box'/>",
+				"  </Composite>",
+				"</Shell>");
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/layout/FormLayoutTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/layout/FormLayoutTest.java
index 9a1b70669..67827e26d 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/layout/FormLayoutTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/layout/FormLayoutTest.java
@@ -40,791 +40,791 @@
  * @author mitin_aa
  */
 public class FormLayoutTest extends XwtModelTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Properties
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_attachmentPropertiesExist() throws Exception {
-    CompositeInfo shell =
-        parse(
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <FormLayout/>",
-            "  </Shell.layout>",
-            "  <Button x:Name='Button1' text='button1'>",
-            "    <Button.layoutData>",
-            "      <FormData>",
-            "        <FormData.left>",
-            "          <FormAttachment numerator='100' offset='50'/>",
-            "        </FormData.left>",
-            "      </FormData>",
-            "    </Button.layoutData>",
-            "  </Button>",
-            "</Shell>");
-    shell.refresh();
-    // get layout and button
-    ControlInfo buttonInfo = shell.getChildrenControls().get(0);
-    LayoutDataInfo layoutData = LayoutInfo.getLayoutData(buttonInfo);
-    {
-      Property[] properties = layoutData.getProperties();
-      String[] propertyTitles = PropertyUtils.getTitles(properties);
-      assertThat(propertyTitles).contains("left", "right", "top", "bottom");
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Properties
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_attachmentPropertiesExist() throws Exception {
+		CompositeInfo shell =
+				parse(
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <FormLayout/>",
+						"  </Shell.layout>",
+						"  <Button x:Name='Button1' text='button1'>",
+						"    <Button.layoutData>",
+						"      <FormData>",
+						"        <FormData.left>",
+						"          <FormAttachment numerator='100' offset='50'/>",
+						"        </FormData.left>",
+						"      </FormData>",
+						"    </Button.layoutData>",
+						"  </Button>",
+						"</Shell>");
+		shell.refresh();
+		// get layout and button
+		ControlInfo buttonInfo = shell.getChildrenControls().get(0);
+		LayoutDataInfo layoutData = LayoutInfo.getLayoutData(buttonInfo);
+		{
+			Property[] properties = layoutData.getProperties();
+			String[] propertyTitles = PropertyUtils.getTitles(properties);
+			assertThat(propertyTitles).contains("left", "right", "top", "bottom");
+		}
+	}
 
-  public void test_deleteAttachment_using_property() throws Exception {
-    CompositeInfo shell =
-        parse(
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <FormLayout/>",
-            "  </Shell.layout>",
-            "  <Button text='button'>",
-            "    <Button.layoutData>",
-            "      <FormData>",
-            "        <FormData.left>",
-            "          <FormAttachment numerator='0' offset='100'/>",
-            "        </FormData.left>",
-            "      </FormData>",
-            "    </Button.layoutData>",
-            "  </Button>",
-            "</Shell>");
-    shell.refresh();
-    ControlInfo buttonInfo = shell.getChildrenControls().get(0);
-    LayoutDataInfo layoutData = LayoutInfo.getLayoutData(buttonInfo);
-    // remove
-    Property attachmentProperty = PropertyUtils.getByPath(layoutData, "left");
-    attachmentProperty.setValue(Property.UNKNOWN_VALUE);
-    assertXML(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FormLayout/>",
-        "  </Shell.layout>",
-        "  <Button text='button'/>",
-        "</Shell>");
-  }
+	public void test_deleteAttachment_using_property() throws Exception {
+		CompositeInfo shell =
+				parse(
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <FormLayout/>",
+						"  </Shell.layout>",
+						"  <Button text='button'>",
+						"    <Button.layoutData>",
+						"      <FormData>",
+						"        <FormData.left>",
+						"          <FormAttachment numerator='0' offset='100'/>",
+						"        </FormData.left>",
+						"      </FormData>",
+						"    </Button.layoutData>",
+						"  </Button>",
+						"</Shell>");
+		shell.refresh();
+		ControlInfo buttonInfo = shell.getChildrenControls().get(0);
+		LayoutDataInfo layoutData = LayoutInfo.getLayoutData(buttonInfo);
+		// remove
+		Property attachmentProperty = PropertyUtils.getByPath(layoutData, "left");
+		attachmentProperty.setValue(Property.UNKNOWN_VALUE);
+		assertXML(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FormLayout/>",
+				"  </Shell.layout>",
+				"  <Button text='button'/>",
+				"</Shell>");
+	}
 
-  public void test_FormData_width_height() throws Exception {
-    CompositeInfo shell =
-        parse(
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <FormLayout/>",
-            "  </Shell.layout>",
-            "  <Button x:Name='Button1' text='button1'/>",
-            "</Shell>");
-    shell.refresh();
-    ControlInfo buttonInfo = shell.getChildrenControls().get(0);
-    LayoutDataInfo layoutData = LayoutInfo.getLayoutData(buttonInfo);
-    FormDataInfo formDataInfo = (FormDataInfo) layoutData;
-    assertNotNull(formDataInfo.getPropertyByTitle("width"));
-    assertNotNull(formDataInfo.getPropertyByTitle("height"));
-    formDataInfo.setWidth(150);
-    formDataInfo.setHeight(50);
-    assertXML(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FormLayout/>",
-        "  </Shell.layout>",
-        "  <Button x:Name='Button1' text='button1'>",
-        "    <Button.layoutData>",
-        "      <FormData width='150' height='50'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "</Shell>");
-  }
+	public void test_FormData_width_height() throws Exception {
+		CompositeInfo shell =
+				parse(
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <FormLayout/>",
+						"  </Shell.layout>",
+						"  <Button x:Name='Button1' text='button1'/>",
+						"</Shell>");
+		shell.refresh();
+		ControlInfo buttonInfo = shell.getChildrenControls().get(0);
+		LayoutDataInfo layoutData = LayoutInfo.getLayoutData(buttonInfo);
+		FormDataInfo formDataInfo = (FormDataInfo) layoutData;
+		assertNotNull(formDataInfo.getPropertyByTitle("width"));
+		assertNotNull(formDataInfo.getPropertyByTitle("height"));
+		formDataInfo.setWidth(150);
+		formDataInfo.setHeight(50);
+		assertXML(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FormLayout/>",
+				"  </Shell.layout>",
+				"  <Button x:Name='Button1' text='button1'>",
+				"    <Button.layoutData>",
+				"      <FormData width='150' height='50'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"</Shell>");
+	}
 
-  public void test_attachmentsExist() throws Exception {
-    CompositeInfo shell =
-        parse(
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <FormLayout/>",
-            "  </Shell.layout>",
-            "  <Button x:Name='Button1' text='button1'>",
-            "    <Button.layoutData>",
-            "      <FormData>",
-            "        <FormData.left>",
-            "          <FormAttachment numerator='100' offset='50'/>",
-            "        </FormData.left>",
-            "      </FormData>",
-            "    </Button.layoutData>",
-            "  </Button>",
-            "</Shell>");
-    shell.refresh();
-    // get layout and button
-    ControlInfo buttonInfo = shell.getChildrenControls().get(0);
-    LayoutDataInfo layoutData = LayoutInfo.getLayoutData(buttonInfo);
-    assertInstanceOf(FormDataInfo.class, layoutData);
-    FormDataInfo formDataInfo = (FormDataInfo) layoutData;
-    assertNotNull(formDataInfo.getAttachment(IPositionConstants.LEFT));
-    assertNotNull(formDataInfo.getAttachment(IPositionConstants.RIGHT));
-    assertNotNull(formDataInfo.getAttachment(IPositionConstants.TOP));
-    assertNotNull(formDataInfo.getAttachment(IPositionConstants.BOTTOM));
-  }
+	public void test_attachmentsExist() throws Exception {
+		CompositeInfo shell =
+				parse(
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <FormLayout/>",
+						"  </Shell.layout>",
+						"  <Button x:Name='Button1' text='button1'>",
+						"    <Button.layoutData>",
+						"      <FormData>",
+						"        <FormData.left>",
+						"          <FormAttachment numerator='100' offset='50'/>",
+						"        </FormData.left>",
+						"      </FormData>",
+						"    </Button.layoutData>",
+						"  </Button>",
+						"</Shell>");
+		shell.refresh();
+		// get layout and button
+		ControlInfo buttonInfo = shell.getChildrenControls().get(0);
+		LayoutDataInfo layoutData = LayoutInfo.getLayoutData(buttonInfo);
+		assertInstanceOf(FormDataInfo.class, layoutData);
+		FormDataInfo formDataInfo = (FormDataInfo) layoutData;
+		assertNotNull(formDataInfo.getAttachment(IPositionConstants.LEFT));
+		assertNotNull(formDataInfo.getAttachment(IPositionConstants.RIGHT));
+		assertNotNull(formDataInfo.getAttachment(IPositionConstants.TOP));
+		assertNotNull(formDataInfo.getAttachment(IPositionConstants.BOTTOM));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Control attachments
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_change_to_control_below() throws Exception {
-    CompositeInfo shell =
-        parse(
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <FormLayout />",
-            "  </Shell.layout>",
-            "  <Button x:Name='button1' text='button1'>",
-            "    <Button.layoutData>",
-            "      <FormData>",
-            "        <FormData.left>",
-            "          <FormAttachment numerator='0' offset='50'/>",
-            "        </FormData.left>",
-            "      </FormData>",
-            "    </Button.layoutData>",
-            "  </Button>",
-            "  <Button text='button2'>",
-            "    <Button.layoutData>",
-            "      <FormData>",
-            "        <FormData.left>",
-            "          <FormAttachment numerator='0' offset='150'/>",
-            "        </FormData.left>",
-            "      </FormData>",
-            "    </Button.layoutData>",
-            "  </Button>",
-            "</Shell>");
-    shell.refresh();
-    // tests
-    List<ControlInfo> childrenControls = shell.getChildrenControls();
-    ControlInfo button1 = childrenControls.get(0);
-    ControlInfo button2 = childrenControls.get(1);
-    FormDataInfo layoutData = (FormDataInfo) LayoutInfo.getLayoutData(button1);
-    FormAttachmentInfo leftAttachment = layoutData.getAttachment(IPositionConstants.LEFT);
-    ((GenericPropertyImpl) getPropertyByTitle(leftAttachment, "control")).setExpression("", button2);
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FormLayout />",
-        "  </Shell.layout>",
-        "  <Button x:Name='button1' text='button1'>",
-        "    <Button.layoutData>",
-        "      <FormData>",
-        "        <FormData.left>",
-        "          <FormAttachment control='{Binding ElementName=button}'/>",
-        "        </FormData.left>",
-        "      </FormData>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "  <Button text='button2' x:Name='button'>",
-        "    <Button.layoutData>",
-        "      <FormData>",
-        "        <FormData.left>",
-        "          <FormAttachment numerator='0' offset='150'/>",
-        "        </FormData.left>",
-        "      </FormData>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "</Shell>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Control attachments
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_change_to_control_below() throws Exception {
+		CompositeInfo shell =
+				parse(
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <FormLayout />",
+						"  </Shell.layout>",
+						"  <Button x:Name='button1' text='button1'>",
+						"    <Button.layoutData>",
+						"      <FormData>",
+						"        <FormData.left>",
+						"          <FormAttachment numerator='0' offset='50'/>",
+						"        </FormData.left>",
+						"      </FormData>",
+						"    </Button.layoutData>",
+						"  </Button>",
+						"  <Button text='button2'>",
+						"    <Button.layoutData>",
+						"      <FormData>",
+						"        <FormData.left>",
+						"          <FormAttachment numerator='0' offset='150'/>",
+						"        </FormData.left>",
+						"      </FormData>",
+						"    </Button.layoutData>",
+						"  </Button>",
+						"</Shell>");
+		shell.refresh();
+		// tests
+		List<ControlInfo> childrenControls = shell.getChildrenControls();
+		ControlInfo button1 = childrenControls.get(0);
+		ControlInfo button2 = childrenControls.get(1);
+		FormDataInfo layoutData = (FormDataInfo) LayoutInfo.getLayoutData(button1);
+		FormAttachmentInfo leftAttachment = layoutData.getAttachment(IPositionConstants.LEFT);
+		((GenericPropertyImpl) getPropertyByTitle(leftAttachment, "control")).setExpression("", button2);
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FormLayout />",
+				"  </Shell.layout>",
+				"  <Button x:Name='button1' text='button1'>",
+				"    <Button.layoutData>",
+				"      <FormData>",
+				"        <FormData.left>",
+				"          <FormAttachment control='{Binding ElementName=button}'/>",
+				"        </FormData.left>",
+				"      </FormData>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"  <Button text='button2' x:Name='button'>",
+				"    <Button.layoutData>",
+				"      <FormData>",
+				"        <FormData.left>",
+				"          <FormAttachment numerator='0' offset='150'/>",
+				"        </FormData.left>",
+				"      </FormData>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"</Shell>");
+	}
 
-  public void test_change_to_control() throws Exception {
-    CompositeInfo shell =
-        parse(
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <FormLayout />",
-            "  </Shell.layout>",
-            "  <Button x:Name='Button1' text='button1'>",
-            "    <Button.layoutData>",
-            "      <FormData>",
-            "        <FormData.left>",
-            "          <FormAttachment numerator='0' offset='50'/>",
-            "        </FormData.left>",
-            "      </FormData>",
-            "    </Button.layoutData>",
-            "  </Button>",
-            "  <Button text='button2'>",
-            "    <Button.layoutData>",
-            "      <FormData>",
-            "        <FormData.left>",
-            "          <FormAttachment numerator='0' offset='150'/>",
-            "        </FormData.left>",
-            "      </FormData>",
-            "    </Button.layoutData>",
-            "  </Button>",
-            "</Shell>");
-    shell.refresh();
-    // tests
-    List<ControlInfo> childrenControls = shell.getChildrenControls();
-    ControlInfo button1 = childrenControls.get(0);
-    ControlInfo button2 = childrenControls.get(1);
-    FormDataInfo layoutData = (FormDataInfo) LayoutInfo.getLayoutData(button2);
-    FormAttachmentInfo leftAttachment = layoutData.getAttachment(IPositionConstants.LEFT);
-    ((GenericPropertyImpl) getPropertyByTitle(leftAttachment, "control")).setExpression("", button1);
-    assertXML(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FormLayout />",
-        "  </Shell.layout>",
-        "  <Button x:Name='Button1' text='button1'>",
-        "    <Button.layoutData>",
-        "      <FormData>",
-        "        <FormData.left>",
-        "          <FormAttachment numerator='0' offset='50'/>",
-        "        </FormData.left>",
-        "      </FormData>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "  <Button text='button2'>",
-        "    <Button.layoutData>",
-        "      <FormData>",
-        "        <FormData.left>",
-        "          <FormAttachment control='{Binding ElementName=Button1}'/>",
-        "        </FormData.left>",
-        "      </FormData>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "</Shell>");
-  }
+	public void test_change_to_control() throws Exception {
+		CompositeInfo shell =
+				parse(
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <FormLayout />",
+						"  </Shell.layout>",
+						"  <Button x:Name='Button1' text='button1'>",
+						"    <Button.layoutData>",
+						"      <FormData>",
+						"        <FormData.left>",
+						"          <FormAttachment numerator='0' offset='50'/>",
+						"        </FormData.left>",
+						"      </FormData>",
+						"    </Button.layoutData>",
+						"  </Button>",
+						"  <Button text='button2'>",
+						"    <Button.layoutData>",
+						"      <FormData>",
+						"        <FormData.left>",
+						"          <FormAttachment numerator='0' offset='150'/>",
+						"        </FormData.left>",
+						"      </FormData>",
+						"    </Button.layoutData>",
+						"  </Button>",
+						"</Shell>");
+		shell.refresh();
+		// tests
+		List<ControlInfo> childrenControls = shell.getChildrenControls();
+		ControlInfo button1 = childrenControls.get(0);
+		ControlInfo button2 = childrenControls.get(1);
+		FormDataInfo layoutData = (FormDataInfo) LayoutInfo.getLayoutData(button2);
+		FormAttachmentInfo leftAttachment = layoutData.getAttachment(IPositionConstants.LEFT);
+		((GenericPropertyImpl) getPropertyByTitle(leftAttachment, "control")).setExpression("", button1);
+		assertXML(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FormLayout />",
+				"  </Shell.layout>",
+				"  <Button x:Name='Button1' text='button1'>",
+				"    <Button.layoutData>",
+				"      <FormData>",
+				"        <FormData.left>",
+				"          <FormAttachment numerator='0' offset='50'/>",
+				"        </FormData.left>",
+				"      </FormData>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"  <Button text='button2'>",
+				"    <Button.layoutData>",
+				"      <FormData>",
+				"        <FormData.left>",
+				"          <FormAttachment control='{Binding ElementName=Button1}'/>",
+				"        </FormData.left>",
+				"      </FormData>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"</Shell>");
+	}
 
-  public void test_parse_control_attachment() throws Exception {
-    CompositeInfo shell =
-        parse(
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <FormLayout />",
-            "  </Shell.layout>",
-            "  <Button x:Name='Button1' text='button1'>",
-            "    <Button.layoutData>",
-            "      <FormData>",
-            "        <FormData.left>",
-            "          <FormAttachment numerator='10' offset='0'/>",
-            "        </FormData.left>",
-            "      </FormData>",
-            "    </Button.layoutData>",
-            "  </Button>",
-            "  <Button text='button2'>",
-            "    <Button.layoutData>",
-            "      <FormData>",
-            "        <FormData.left>",
-            "          <FormAttachment control='{Binding ElementName=Button1}' offset='10'/>",
-            "        </FormData.left>",
-            "      </FormData>",
-            "    </Button.layoutData>",
-            "  </Button>",
-            "</Shell>");
-    shell.refresh();
-    // tests
-    List<ControlInfo> childrenControls = shell.getChildrenControls();
-    assertThat(childrenControls).hasSize(2);
-    ControlInfo button1 = childrenControls.get(0);
-    ControlInfo button2 = childrenControls.get(1);
-    FormDataInfo layoutData = (FormDataInfo) LayoutInfo.getLayoutData(button2);
-    FormAttachmentInfo leftAttachment = layoutData.getAttachment(IPositionConstants.LEFT);
-    assertThat(leftAttachment).isNotNull();
-    assertThat(leftAttachment.getControl()).isSameAs(button1);
-  }
+	public void test_parse_control_attachment() throws Exception {
+		CompositeInfo shell =
+				parse(
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <FormLayout />",
+						"  </Shell.layout>",
+						"  <Button x:Name='Button1' text='button1'>",
+						"    <Button.layoutData>",
+						"      <FormData>",
+						"        <FormData.left>",
+						"          <FormAttachment numerator='10' offset='0'/>",
+						"        </FormData.left>",
+						"      </FormData>",
+						"    </Button.layoutData>",
+						"  </Button>",
+						"  <Button text='button2'>",
+						"    <Button.layoutData>",
+						"      <FormData>",
+						"        <FormData.left>",
+						"          <FormAttachment control='{Binding ElementName=Button1}' offset='10'/>",
+						"        </FormData.left>",
+						"      </FormData>",
+						"    </Button.layoutData>",
+						"  </Button>",
+						"</Shell>");
+		shell.refresh();
+		// tests
+		List<ControlInfo> childrenControls = shell.getChildrenControls();
+		assertThat(childrenControls).hasSize(2);
+		ControlInfo button1 = childrenControls.get(0);
+		ControlInfo button2 = childrenControls.get(1);
+		FormDataInfo layoutData = (FormDataInfo) LayoutInfo.getLayoutData(button2);
+		FormAttachmentInfo leftAttachment = layoutData.getAttachment(IPositionConstants.LEFT);
+		assertThat(leftAttachment).isNotNull();
+		assertThat(leftAttachment.getControl()).isSameAs(button1);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Layout managing tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_delete() throws Exception {
-    CompositeInfo shell =
-        parse(
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <FormLayout/>",
-            "  </Shell.layout>",
-            "  <Button x:Name='Button1' text='button1'>",
-            "    <Button.layoutData>",
-            "      <FormData>",
-            "        <FormData.left>",
-            "          <FormAttachment numerator='0' offset='100'/>",
-            "        </FormData.left>",
-            "      </FormData>",
-            "    </Button.layoutData>",
-            "  </Button>",
-            "</Shell>");
-    shell.refresh();
-    assertHierarchy(
-        "<Shell>",
-        "  <FormLayout>",
-        "  <Button x:Name='Button1' text='button1'>",
-        "    <FormData>",
-        "      (0, 100)",
-        "      (none)",
-        "      (none)",
-        "      (none)");
-    // get layout and button
-    ControlInfo buttonInfo = shell.getChildrenControls().get(0);
-    // delete
-    buttonInfo.delete();
-    // test
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FormLayout/>",
-        "  </Shell.layout>",
-        "</Shell>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Layout managing tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_delete() throws Exception {
+		CompositeInfo shell =
+				parse(
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <FormLayout/>",
+						"  </Shell.layout>",
+						"  <Button x:Name='Button1' text='button1'>",
+						"    <Button.layoutData>",
+						"      <FormData>",
+						"        <FormData.left>",
+						"          <FormAttachment numerator='0' offset='100'/>",
+						"        </FormData.left>",
+						"      </FormData>",
+						"    </Button.layoutData>",
+						"  </Button>",
+						"</Shell>");
+		shell.refresh();
+		assertHierarchy(
+				"<Shell>",
+				"  <FormLayout>",
+				"  <Button x:Name='Button1' text='button1'>",
+				"    <FormData>",
+				"      (0, 100)",
+				"      (none)",
+				"      (none)",
+				"      (none)");
+		// get layout and button
+		ControlInfo buttonInfo = shell.getChildrenControls().get(0);
+		// delete
+		buttonInfo.delete();
+		// test
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FormLayout/>",
+				"  </Shell.layout>",
+				"</Shell>");
+	}
 
-  public void test_deleteAttachment() throws Exception {
-    CompositeInfo shell =
-        parse(
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <FormLayout/>",
-            "  </Shell.layout>",
-            "  <Button x:Name='Button1' text='button1'>",
-            "    <Button.layoutData>",
-            "      <FormData>",
-            "        <FormData.left>",
-            "          <FormAttachment numerator='0' offset='100'/>",
-            "        </FormData.left>",
-            "      </FormData>",
-            "    </Button.layoutData>",
-            "  </Button>",
-            "</Shell>");
-    shell.refresh();
-    // get layout and button
-    FormLayoutInfo layout = (FormLayoutInfo) shell.getLayout();
-    ControlInfo buttonInfo = shell.getChildrenControls().get(0);
-    // detach
-    ((FormLayoutInfoImplAutomatic<ControlInfo>) layout.getImpl()).detach(
-        buttonInfo,
-        IPositionConstants.LEFT);
-    // test
-    assertXML(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FormLayout/>",
-        "  </Shell.layout>",
-        "  <Button x:Name='Button1' text='button1'/>",
-        "</Shell>");
-  }
+	public void test_deleteAttachment() throws Exception {
+		CompositeInfo shell =
+				parse(
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <FormLayout/>",
+						"  </Shell.layout>",
+						"  <Button x:Name='Button1' text='button1'>",
+						"    <Button.layoutData>",
+						"      <FormData>",
+						"        <FormData.left>",
+						"          <FormAttachment numerator='0' offset='100'/>",
+						"        </FormData.left>",
+						"      </FormData>",
+						"    </Button.layoutData>",
+						"  </Button>",
+						"</Shell>");
+		shell.refresh();
+		// get layout and button
+		FormLayoutInfo layout = (FormLayoutInfo) shell.getLayout();
+		ControlInfo buttonInfo = shell.getChildrenControls().get(0);
+		// detach
+		((FormLayoutInfoImplAutomatic<ControlInfo>) layout.getImpl()).detach(
+				buttonInfo,
+				IPositionConstants.LEFT);
+		// test
+		assertXML(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FormLayout/>",
+				"  </Shell.layout>",
+				"  <Button x:Name='Button1' text='button1'/>",
+				"</Shell>");
+	}
 
-  public void test_deleteSingleAttachment() throws Exception {
-    CompositeInfo shell =
-        parse(
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <FormLayout/>",
-            "  </Shell.layout>",
-            "  <Button x:Name='Button1' text='button1'>",
-            "    <Button.layoutData>",
-            "      <FormData>",
-            "        <FormData.left>",
-            "          <FormAttachment numerator='0' offset='100'/>",
-            "        </FormData.left>",
-            "        <FormData.top>",
-            "          <FormAttachment numerator='0' offset='100'/>",
-            "        </FormData.top>",
-            "      </FormData>",
-            "    </Button.layoutData>",
-            "  </Button>",
-            "</Shell>");
-    shell.refresh();
-    // get layout and button
-    FormLayoutInfo layout = (FormLayoutInfo) shell.getLayout();
-    ControlInfo buttonInfo = shell.getChildrenControls().get(0);
-    // detach
-    ((FormLayoutInfoImplAutomatic<ControlInfo>) layout.getImpl()).detach(
-        buttonInfo,
-        IPositionConstants.LEFT);
-    // test
-    assertXML(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FormLayout/>",
-        "  </Shell.layout>",
-        "  <Button x:Name='Button1' text='button1'>",
-        "    <Button.layoutData>",
-        "      <FormData>",
-        "        <FormData.top>",
-        "          <FormAttachment numerator='0' offset='100'/>",
-        "        </FormData.top>",
-        "      </FormData>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "</Shell>");
-  }
+	public void test_deleteSingleAttachment() throws Exception {
+		CompositeInfo shell =
+				parse(
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <FormLayout/>",
+						"  </Shell.layout>",
+						"  <Button x:Name='Button1' text='button1'>",
+						"    <Button.layoutData>",
+						"      <FormData>",
+						"        <FormData.left>",
+						"          <FormAttachment numerator='0' offset='100'/>",
+						"        </FormData.left>",
+						"        <FormData.top>",
+						"          <FormAttachment numerator='0' offset='100'/>",
+						"        </FormData.top>",
+						"      </FormData>",
+						"    </Button.layoutData>",
+						"  </Button>",
+						"</Shell>");
+		shell.refresh();
+		// get layout and button
+		FormLayoutInfo layout = (FormLayoutInfo) shell.getLayout();
+		ControlInfo buttonInfo = shell.getChildrenControls().get(0);
+		// detach
+		((FormLayoutInfoImplAutomatic<ControlInfo>) layout.getImpl()).detach(
+				buttonInfo,
+				IPositionConstants.LEFT);
+		// test
+		assertXML(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FormLayout/>",
+				"  </Shell.layout>",
+				"  <Button x:Name='Button1' text='button1'>",
+				"    <Button.layoutData>",
+				"      <FormData>",
+				"        <FormData.top>",
+				"          <FormAttachment numerator='0' offset='100'/>",
+				"        </FormData.top>",
+				"      </FormData>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"</Shell>");
+	}
 
-  public void test_deleteAttachmentAndAttach() throws Exception {
-    CompositeInfo shell =
-        parse(
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <FormLayout/>",
-            "  </Shell.layout>",
-            "  <Button x:Name='Button1' text='button1'>",
-            "    <Button.layoutData>",
-            "      <FormData>",
-            "        <FormData.left>",
-            "          <FormAttachment numerator='0' offset='100'/>",
-            "        </FormData.left>",
-            "      </FormData>",
-            "    </Button.layoutData>",
-            "  </Button>",
-            "</Shell>");
-    shell.refresh();
-    // get layout and button
-    FormLayoutInfo layout = (FormLayoutInfo) shell.getLayout();
-    ControlInfo buttonInfo = shell.getChildrenControls().get(0);
-    // detach
-    ((FormLayoutInfoImplAutomatic<ControlInfo>) layout.getImpl()).detach(
-        buttonInfo,
-        IPositionConstants.LEFT);
-    ((FormLayoutInfoImplAutomatic<ControlInfo>) layout.getImpl()).attachAbsolute(
-        buttonInfo,
-        IPositionConstants.LEFT,
-        10);
-    // test
-    assertXML(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FormLayout/>",
-        "  </Shell.layout>",
-        "  <Button x:Name='Button1' text='button1'>",
-        "    <Button.layoutData>",
-        "      <FormData>",
-        "        <FormData.left>",
-        "          <FormAttachment numerator='0' offset='10'/>",
-        "        </FormData.left>",
-        "      </FormData>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "</Shell>");
-  }
+	public void test_deleteAttachmentAndAttach() throws Exception {
+		CompositeInfo shell =
+				parse(
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <FormLayout/>",
+						"  </Shell.layout>",
+						"  <Button x:Name='Button1' text='button1'>",
+						"    <Button.layoutData>",
+						"      <FormData>",
+						"        <FormData.left>",
+						"          <FormAttachment numerator='0' offset='100'/>",
+						"        </FormData.left>",
+						"      </FormData>",
+						"    </Button.layoutData>",
+						"  </Button>",
+						"</Shell>");
+		shell.refresh();
+		// get layout and button
+		FormLayoutInfo layout = (FormLayoutInfo) shell.getLayout();
+		ControlInfo buttonInfo = shell.getChildrenControls().get(0);
+		// detach
+		((FormLayoutInfoImplAutomatic<ControlInfo>) layout.getImpl()).detach(
+				buttonInfo,
+				IPositionConstants.LEFT);
+		((FormLayoutInfoImplAutomatic<ControlInfo>) layout.getImpl()).attachAbsolute(
+				buttonInfo,
+				IPositionConstants.LEFT,
+				10);
+		// test
+		assertXML(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FormLayout/>",
+				"  </Shell.layout>",
+				"  <Button x:Name='Button1' text='button1'>",
+				"    <Button.layoutData>",
+				"      <FormData>",
+				"        <FormData.left>",
+				"          <FormAttachment numerator='0' offset='10'/>",
+				"        </FormData.left>",
+				"      </FormData>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"</Shell>");
+	}
 
-  public void test_FormAttachment_use_three_properties() throws Exception {
-    CompositeInfo shell =
-        parse(
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <FormLayout/>",
-            "  </Shell.layout>",
-            "  <Button text='button'>",
-            "    <Button.layoutData>",
-            "      <FormData>",
-            "        <FormData.left>",
-            "          <FormAttachment numerator='0' offset='50'/>",
-            "        </FormData.left>",
-            "      </FormData>",
-            "    </Button.layoutData>",
-            "  </Button>",
-            "</Shell>");
-    shell.refresh();
-    // get layout and button
-    ControlInfo buttonInfo = shell.getChildrenControls().get(0);
-    FormDataInfo formDataInfo = (FormDataInfo) LayoutInfo.getLayoutData(buttonInfo);
-    FormAttachmentInfo attachment = formDataInfo.getAttachment(IPositionConstants.LEFT);
-    attachment.setDenominator(15);
-    attachment.setNumerator(90);
-    attachment.setOffset(100);
-    attachment.write();
-    assertXML(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FormLayout/>",
-        "  </Shell.layout>",
-        "  <Button text='button'>",
-        "    <Button.layoutData>",
-        "      <FormData>",
-        "        <FormData.left>",
-        "          <FormAttachment numerator='90' offset='100' denominator='15'/>",
-        "        </FormData.left>",
-        "      </FormData>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "</Shell>");
-  }
+	public void test_FormAttachment_use_three_properties() throws Exception {
+		CompositeInfo shell =
+				parse(
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <FormLayout/>",
+						"  </Shell.layout>",
+						"  <Button text='button'>",
+						"    <Button.layoutData>",
+						"      <FormData>",
+						"        <FormData.left>",
+						"          <FormAttachment numerator='0' offset='50'/>",
+						"        </FormData.left>",
+						"      </FormData>",
+						"    </Button.layoutData>",
+						"  </Button>",
+						"</Shell>");
+		shell.refresh();
+		// get layout and button
+		ControlInfo buttonInfo = shell.getChildrenControls().get(0);
+		FormDataInfo formDataInfo = (FormDataInfo) LayoutInfo.getLayoutData(buttonInfo);
+		FormAttachmentInfo attachment = formDataInfo.getAttachment(IPositionConstants.LEFT);
+		attachment.setDenominator(15);
+		attachment.setNumerator(90);
+		attachment.setOffset(100);
+		attachment.write();
+		assertXML(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FormLayout/>",
+				"  </Shell.layout>",
+				"  <Button text='button'>",
+				"    <Button.layoutData>",
+				"      <FormData>",
+				"        <FormData.left>",
+				"          <FormAttachment numerator='90' offset='100' denominator='15'/>",
+				"        </FormData.left>",
+				"      </FormData>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"</Shell>");
+	}
 
-  public void test_setLayout() throws Exception {
-    CompositeInfo shell = parse("<Shell/>");
-    setFormLayout(
-        shell,
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FormLayout/>",
-        "  </Shell.layout>",
-        "</Shell>");
-  }
+	public void test_setLayout() throws Exception {
+		CompositeInfo shell = parse("<Shell/>");
+		setFormLayout(
+				shell,
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FormLayout/>",
+				"  </Shell.layout>",
+				"</Shell>");
+	}
 
-  public void test_changeFromGridEmpty() throws Exception {
-    CompositeInfo shell =
-        parse(
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <GridLayout wbp:name='layout'/>",
-            "  </Shell.layout>",
-            "</Shell>");
-    shell.refresh();
-    setFormLayout(
-        shell,
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FormLayout/>",
-        "  </Shell.layout>",
-        "</Shell>");
-  }
+	public void test_changeFromGridEmpty() throws Exception {
+		CompositeInfo shell =
+				parse(
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <GridLayout wbp:name='layout'/>",
+						"  </Shell.layout>",
+						"</Shell>");
+		shell.refresh();
+		setFormLayout(
+				shell,
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FormLayout/>",
+				"  </Shell.layout>",
+				"</Shell>");
+	}
 
-  public void test_changeFromGridWithData() throws Exception {
-    CompositeInfo shell =
-        parse(
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <GridLayout wbp:name='layout'/>",
-            "  </Shell.layout>",
-            "  <Button wbp:name='button'>",
-            "    <Button.layoutData>",
-            "      <GridData widthHint='200'/>",
-            "    </Button.layoutData>",
-            "  </Button>",
-            "</Shell>");
-    shell.refresh();
-    ControlInfo button = getObjectByName("button");
-    //
-    int expectedRight = button.getModelBounds().right();
-    setFormLayout(
-        shell,
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FormLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'>",
-        "    <Button.layoutData>",
-        "      <FormData>",
-        "        <FormData.right>",
-        "          <FormAttachment numerator='0' offset='" + expectedRight + "'/>",
-        "        </FormData.right>",
-        "        <FormData.top>",
-        "          <FormAttachment numerator='0' offset='5'/>",
-        "        </FormData.top>",
-        "        <FormData.left>",
-        "          <FormAttachment numerator='0' offset='5'/>",
-        "        </FormData.left>",
-        "      </FormData>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "</Shell>");
-  }
+	public void test_changeFromGridWithData() throws Exception {
+		CompositeInfo shell =
+				parse(
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <GridLayout wbp:name='layout'/>",
+						"  </Shell.layout>",
+						"  <Button wbp:name='button'>",
+						"    <Button.layoutData>",
+						"      <GridData widthHint='200'/>",
+						"    </Button.layoutData>",
+						"  </Button>",
+						"</Shell>");
+		shell.refresh();
+		ControlInfo button = getObjectByName("button");
+		//
+		int expectedRight = button.getModelBounds().right();
+		setFormLayout(
+				shell,
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FormLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'>",
+				"    <Button.layoutData>",
+				"      <FormData>",
+				"        <FormData.right>",
+				"          <FormAttachment numerator='0' offset='" + expectedRight + "'/>",
+				"        </FormData.right>",
+				"        <FormData.top>",
+				"          <FormAttachment numerator='0' offset='5'/>",
+				"        </FormData.top>",
+				"        <FormData.left>",
+				"          <FormAttachment numerator='0' offset='5'/>",
+				"        </FormData.left>",
+				"      </FormData>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"</Shell>");
+	}
 
-  public void test_changeFromAbsolute() throws Exception {
-    CompositeInfo shell =
-        parse(
-            "<Shell layout='{x:Null}'>",
-            "  <Button wbp:name='button' bounds='5, 5, 100, 30'/>",
-            "</Shell>");
-    shell.refresh();
-    setFormLayout(
-        shell,
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FormLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'>",
-        "    <Button.layoutData>",
-        "      <FormData>",
-        "        <FormData.bottom>",
-        "          <FormAttachment numerator='0' offset='35'/>",
-        "        </FormData.bottom>",
-        "        <FormData.right>",
-        "          <FormAttachment numerator='0' offset='105'/>",
-        "        </FormData.right>",
-        "        <FormData.top>",
-        "          <FormAttachment numerator='0' offset='5'/>",
-        "        </FormData.top>",
-        "        <FormData.left>",
-        "          <FormAttachment numerator='0' offset='5'/>",
-        "        </FormData.left>",
-        "      </FormData>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "</Shell>");
-  }
+	public void test_changeFromAbsolute() throws Exception {
+		CompositeInfo shell =
+				parse(
+						"<Shell layout='{x:Null}'>",
+						"  <Button wbp:name='button' bounds='5, 5, 100, 30'/>",
+						"</Shell>");
+		shell.refresh();
+		setFormLayout(
+				shell,
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FormLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'>",
+				"    <Button.layoutData>",
+				"      <FormData>",
+				"        <FormData.bottom>",
+				"          <FormAttachment numerator='0' offset='35'/>",
+				"        </FormData.bottom>",
+				"        <FormData.right>",
+				"          <FormAttachment numerator='0' offset='105'/>",
+				"        </FormData.right>",
+				"        <FormData.top>",
+				"          <FormAttachment numerator='0' offset='5'/>",
+				"        </FormData.top>",
+				"        <FormData.left>",
+				"          <FormAttachment numerator='0' offset='5'/>",
+				"        </FormData.left>",
+				"      </FormData>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"</Shell>");
+	}
 
-  public void test_changeToGridWithData() throws Exception {
-    CompositeInfo shell =
-        parse(
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <FormLayout/>",
-            "  </Shell.layout>",
-            "  <Button x:Name='Button1' text='button1'>",
-            "    <Button.layoutData>",
-            "      <FormData>",
-            "        <FormData.left>",
-            "          <FormAttachment numerator='0' offset='100'/>",
-            "        </FormData.left>",
-            "      </FormData>",
-            "    </Button.layoutData>",
-            "  </Button>",
-            "</Shell>");
-    shell.refresh();
-    setGridLayout(
-        shell,
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout/>",
-        "  </Shell.layout>",
-        "  <Button x:Name='Button1' text='button1'/>",
-        "</Shell>");
-  }
+	public void test_changeToGridWithData() throws Exception {
+		CompositeInfo shell =
+				parse(
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <FormLayout/>",
+						"  </Shell.layout>",
+						"  <Button x:Name='Button1' text='button1'>",
+						"    <Button.layoutData>",
+						"      <FormData>",
+						"        <FormData.left>",
+						"          <FormAttachment numerator='0' offset='100'/>",
+						"        </FormData.left>",
+						"      </FormData>",
+						"    </Button.layoutData>",
+						"  </Button>",
+						"</Shell>");
+		shell.refresh();
+		setGridLayout(
+				shell,
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout/>",
+				"  </Shell.layout>",
+				"  <Button x:Name='Button1' text='button1'/>",
+				"</Shell>");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Test for copy/paste.
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_clipboard() throws Exception {
-    CompositeInfo composite =
-        parse(
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <RowLayout/>",
-            "  </Shell.layout>",
-            "  <Composite>",
-            "    <Composite.layout>",
-            "      <FormLayout/>",
-            "    </Composite.layout>",
-            "    <Button wbp:name='button1' text='button1'>",
-            "      <Button.layoutData>",
-            "        <FormData>",
-            "          <FormData.left>",
-            "            <FormAttachment numerator='0' offset='100'/>",
-            "          </FormData.left>",
-            "        </FormData>",
-            "      </Button.layoutData>",
-            "    </Button>",
-            "    <Button wbp:name='button2' text='button2'>",
-            "      <Button.layoutData>",
-            "        <FormData>",
-            "          <FormData.right>",
-            "            <FormAttachment numerator='100' offset='-10'/>",
-            "          </FormData.right>",
-            "        </FormData>",
-            "      </Button.layoutData>",
-            "    </Button>",
-            "  </Composite>",
-            "</Shell>");
-    composite.refresh();
-    // prepare memento
-    XmlObjectMemento memento;
-    {
-      ControlInfo inner = composite.getChildrenControls().get(0);
-      memento = XmlObjectMemento.createMemento(inner);
-    }
-    // add copy
-    ControlInfo copy = (ControlInfo) memento.create(composite);
-    composite.getLayout().command_CREATE(copy, null);
-    memento.apply();
-    // test
-    assertXML(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <RowLayout/>",
-        "  </Shell.layout>",
-        "  <Composite>",
-        "    <Composite.layout>",
-        "      <FormLayout/>",
-        "    </Composite.layout>",
-        "    <Button wbp:name='button1' text='button1'>",
-        "      <Button.layoutData>",
-        "        <FormData>",
-        "          <FormData.left>",
-        "            <FormAttachment numerator='0' offset='100'/>",
-        "          </FormData.left>",
-        "        </FormData>",
-        "      </Button.layoutData>",
-        "    </Button>",
-        "    <Button wbp:name='button2' text='button2'>",
-        "      <Button.layoutData>",
-        "        <FormData>",
-        "          <FormData.right>",
-        "            <FormAttachment numerator='100' offset='-10'/>",
-        "          </FormData.right>",
-        "        </FormData>",
-        "      </Button.layoutData>",
-        "    </Button>",
-        "  </Composite>",
-        "  <Composite>",
-        "    <Composite.layout>",
-        "      <FormLayout/>",
-        "    </Composite.layout>",
-        "    <Button text='button1'>",
-        "      <Button.layoutData>",
-        "        <FormData>",
-        "          <FormData.left>",
-        "            <FormAttachment numerator='0' offset='100'/>",
-        "          </FormData.left>",
-        "        </FormData>",
-        "      </Button.layoutData>",
-        "    </Button>",
-        "    <Button text='button2'>",
-        "      <Button.layoutData>",
-        "        <FormData>",
-        "          <FormData.right>",
-        "            <FormAttachment numerator='100' offset='-10'/>",
-        "          </FormData.right>",
-        "        </FormData>",
-        "      </Button.layoutData>",
-        "    </Button>",
-        "  </Composite>",
-        "</Shell>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Test for copy/paste.
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_clipboard() throws Exception {
+		CompositeInfo composite =
+				parse(
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <RowLayout/>",
+						"  </Shell.layout>",
+						"  <Composite>",
+						"    <Composite.layout>",
+						"      <FormLayout/>",
+						"    </Composite.layout>",
+						"    <Button wbp:name='button1' text='button1'>",
+						"      <Button.layoutData>",
+						"        <FormData>",
+						"          <FormData.left>",
+						"            <FormAttachment numerator='0' offset='100'/>",
+						"          </FormData.left>",
+						"        </FormData>",
+						"      </Button.layoutData>",
+						"    </Button>",
+						"    <Button wbp:name='button2' text='button2'>",
+						"      <Button.layoutData>",
+						"        <FormData>",
+						"          <FormData.right>",
+						"            <FormAttachment numerator='100' offset='-10'/>",
+						"          </FormData.right>",
+						"        </FormData>",
+						"      </Button.layoutData>",
+						"    </Button>",
+						"  </Composite>",
+						"</Shell>");
+		composite.refresh();
+		// prepare memento
+		XmlObjectMemento memento;
+		{
+			ControlInfo inner = composite.getChildrenControls().get(0);
+			memento = XmlObjectMemento.createMemento(inner);
+		}
+		// add copy
+		ControlInfo copy = (ControlInfo) memento.create(composite);
+		composite.getLayout().command_CREATE(copy, null);
+		memento.apply();
+		// test
+		assertXML(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <RowLayout/>",
+				"  </Shell.layout>",
+				"  <Composite>",
+				"    <Composite.layout>",
+				"      <FormLayout/>",
+				"    </Composite.layout>",
+				"    <Button wbp:name='button1' text='button1'>",
+				"      <Button.layoutData>",
+				"        <FormData>",
+				"          <FormData.left>",
+				"            <FormAttachment numerator='0' offset='100'/>",
+				"          </FormData.left>",
+				"        </FormData>",
+				"      </Button.layoutData>",
+				"    </Button>",
+				"    <Button wbp:name='button2' text='button2'>",
+				"      <Button.layoutData>",
+				"        <FormData>",
+				"          <FormData.right>",
+				"            <FormAttachment numerator='100' offset='-10'/>",
+				"          </FormData.right>",
+				"        </FormData>",
+				"      </Button.layoutData>",
+				"    </Button>",
+				"  </Composite>",
+				"  <Composite>",
+				"    <Composite.layout>",
+				"      <FormLayout/>",
+				"    </Composite.layout>",
+				"    <Button text='button1'>",
+				"      <Button.layoutData>",
+				"        <FormData>",
+				"          <FormData.left>",
+				"            <FormAttachment numerator='0' offset='100'/>",
+				"          </FormData.left>",
+				"        </FormData>",
+				"      </Button.layoutData>",
+				"    </Button>",
+				"    <Button text='button2'>",
+				"      <Button.layoutData>",
+				"        <FormData>",
+				"          <FormData.right>",
+				"            <FormAttachment numerator='100' offset='-10'/>",
+				"          </FormData.right>",
+				"        </FormData>",
+				"      </Button.layoutData>",
+				"    </Button>",
+				"  </Composite>",
+				"</Shell>");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private Property getPropertyByTitle(ObjectInfo info, String title) throws Exception {
-    Property[] properties = info.getProperties();
-    for (Property property : properties) {
-      if (title.equals(property.getTitle())) {
-        return property;
-      }
-    }
-    return null;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private Property getPropertyByTitle(ObjectInfo info, String title) throws Exception {
+		Property[] properties = info.getProperties();
+		for (Property property : properties) {
+			if (title.equals(property.getTitle())) {
+				return property;
+			}
+		}
+		return null;
+	}
 
-  /**
-   * Sets the {@link FormLayout} for given {@link CompositeInfo}.
-   */
-  private void setFormLayout(CompositeInfo composite, String... expectedLines) throws Exception {
-    composite.getRoot().refresh();
-    // set FormLayout
-    FormLayoutInfo layout = createObject("org.eclipse.swt.layout.FormLayout");
-    composite.setLayout(layout);
-    // check source
-    assertXML(expectedLines);
-  }
+	/**
+	 * Sets the {@link FormLayout} for given {@link CompositeInfo}.
+	 */
+	private void setFormLayout(CompositeInfo composite, String... expectedLines) throws Exception {
+		composite.getRoot().refresh();
+		// set FormLayout
+		FormLayoutInfo layout = createObject("org.eclipse.swt.layout.FormLayout");
+		composite.setLayout(layout);
+		// check source
+		assertXML(expectedLines);
+	}
 
-  /**
-   * Sets the {@link GridLayout} for given {@link CompositeInfo}.
-   */
-  private void setGridLayout(CompositeInfo composite, String... expectedLines) throws Exception {
-    composite.getRoot().refresh();
-    // set GridLayout
-    GridLayoutInfo layout = createObject("org.eclipse.swt.layout.GridLayout");
-    composite.setLayout(layout);
-    // check source
-    assertXML(expectedLines);
-  }
+	/**
+	 * Sets the {@link GridLayout} for given {@link CompositeInfo}.
+	 */
+	private void setGridLayout(CompositeInfo composite, String... expectedLines) throws Exception {
+		composite.getRoot().refresh();
+		// set GridLayout
+		GridLayoutInfo layout = createObject("org.eclipse.swt.layout.GridLayout");
+		composite.setLayout(layout);
+		// check source
+		assertXML(expectedLines);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/layout/LayoutTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/layout/LayoutTest.java
index fcc4c33b9..ef32733c0 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/layout/LayoutTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/layout/LayoutTest.java
@@ -52,1090 +52,1090 @@
  * @author scheglov_ke
  */
 public class LayoutTest extends XwtModelTest {
-  private static final String[] ESA = ArrayUtils.EMPTY_STRING_ARRAY;
+	private static final String[] ESA = ArrayUtils.EMPTY_STRING_ARRAY;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * When {@link CompositeInfo} has explicit {@link LayoutInfo}, we should not have implicit
-   * {@link LayoutInfo} in children.
-   */
-  public void test_hasExplicitLayout() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "</Shell>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <FillLayout>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * When {@link CompositeInfo} has explicit {@link LayoutInfo}, we should not have implicit
+	 * {@link LayoutInfo} in children.
+	 */
+	public void test_hasExplicitLayout() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"</Shell>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <FillLayout>");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * We don't show {@link LayoutInfo} in tree or on canvas.
-   */
-  public void test_presentation_FillLayout() throws Exception {
-    CompositeInfo composite =
-        parse(
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <FillLayout/>",
-            "  </Shell.layout>",
-            "</Shell>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <FillLayout>");
-    LayoutInfo layout = composite.getLayout();
-    // not visible
-    assertVisible(layout, false);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * We don't show {@link LayoutInfo} in tree or on canvas.
+	 */
+	public void test_presentation_FillLayout() throws Exception {
+		CompositeInfo composite =
+				parse(
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <FillLayout/>",
+						"  </Shell.layout>",
+						"</Shell>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <FillLayout>");
+		LayoutInfo layout = composite.getLayout();
+		// not visible
+		assertVisible(layout, false);
+	}
 
-  /**
-   * We don't show {@link LayoutInfo} in tree or on canvas.
-   */
-  public void test_presentation_AbsoluteLayout() throws Exception {
-    CompositeInfo composite = parse("<Shell/>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  implicit-layout: absolute");
-    LayoutInfo layout = composite.getLayout();
-    // not visible
-    assertVisible(layout, false);
-  }
+	/**
+	 * We don't show {@link LayoutInfo} in tree or on canvas.
+	 */
+	public void test_presentation_AbsoluteLayout() throws Exception {
+		CompositeInfo composite = parse("<Shell/>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  implicit-layout: absolute");
+		LayoutInfo layout = composite.getLayout();
+		// not visible
+		assertVisible(layout, false);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Implicit
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_noImplicitLayout() throws Exception {
-    prepareMyComposite(ESA, ESA, new String[]{
-        "<parameters>",
-        "  <parameter name='layout.has'>false</parameter>",
-        "</parameters>"});
-    // parse
-    CompositeInfo composite = parse("<t:MyComposite/>");
-    assertHierarchy("<t:MyComposite>");
-    // no layout
-    assertFalse(composite.hasLayout());
-    try {
-      composite.getLayout();
-    } catch (DesignerException de) {
-      assertEquals(IExceptionConstants.NO_LAYOUT_EXPECTED, de.getCode());
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Implicit
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_noImplicitLayout() throws Exception {
+		prepareMyComposite(ESA, ESA, new String[]{
+				"<parameters>",
+				"  <parameter name='layout.has'>false</parameter>",
+		"</parameters>"});
+		// parse
+		CompositeInfo composite = parse("<t:MyComposite/>");
+		assertHierarchy("<t:MyComposite>");
+		// no layout
+		assertFalse(composite.hasLayout());
+		try {
+			composite.getLayout();
+		} catch (DesignerException de) {
+			assertEquals(IExceptionConstants.NO_LAYOUT_EXPECTED, de.getCode());
+		}
+	}
 
-  /**
-   * Test for implicit {@link FillLayout} and {@link ImplicitLayoutCreationSupport}.
-   */
-  public void test_implicit_FillLayout() throws Exception {
-    prepareMyComposite(new String[]{
-        "// filler filler filler filler filler",
-        "setLayout(new FillLayout());"}, ESA, ESA);
-    // parse
-    CompositeInfo composite = parse("<t:MyComposite/>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "<t:MyComposite>",
-        "  implicit-layout: org.eclipse.swt.layout.FillLayout");
-    refresh();
-    // has implicit layout
-    assertTrue(composite.hasLayout());
-    LayoutInfo layout = composite.getLayout();
-    assertNotNull(layout);
-    assertEquals(
-        "org.eclipse.swt.layout.FillLayout",
-        layout.getDescription().getComponentClass().getName());
-    // implicit layout has Object
-    assertNotNull(layout.getObject());
-    // ImplicitLayoutCreationSupport
-    {
-      ImplicitLayoutCreationSupport creationSupport =
-          (ImplicitLayoutCreationSupport) layout.getCreationSupport();
-      assertSame(composite.getCreationSupport().getElement(), creationSupport.getElement());
-      assertEquals("implicit-layout: org.eclipse.swt.layout.FillLayout", creationSupport.toString());
-      assertEquals("implicit-layout: org.eclipse.swt.layout.FillLayout", creationSupport.getTitle());
-      assertTrue(creationSupport.canDelete());
-      // delete() ignored
-      layout.delete();
-      assertXML("<t:MyComposite/>");
-      assertHierarchy(
-          "// filler filler filler filler filler",
-          "<t:MyComposite>",
-          "  implicit-layout: org.eclipse.swt.layout.FillLayout");
-    }
-    // simulate Layout_Info absence
-    ((Collection<?>) ReflectionUtils.getFieldObject(composite, "m_children")).clear();
-    try {
-      composite.getLayout();
-      fail();
-    } catch (IllegalStateException e) {
-    }
-  }
+	/**
+	 * Test for implicit {@link FillLayout} and {@link ImplicitLayoutCreationSupport}.
+	 */
+	public void test_implicit_FillLayout() throws Exception {
+		prepareMyComposite(new String[]{
+				"// filler filler filler filler filler",
+		"setLayout(new FillLayout());"}, ESA, ESA);
+		// parse
+		CompositeInfo composite = parse("<t:MyComposite/>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"<t:MyComposite>",
+				"  implicit-layout: org.eclipse.swt.layout.FillLayout");
+		refresh();
+		// has implicit layout
+		assertTrue(composite.hasLayout());
+		LayoutInfo layout = composite.getLayout();
+		assertNotNull(layout);
+		assertEquals(
+				"org.eclipse.swt.layout.FillLayout",
+				layout.getDescription().getComponentClass().getName());
+		// implicit layout has Object
+		assertNotNull(layout.getObject());
+		// ImplicitLayoutCreationSupport
+		{
+			ImplicitLayoutCreationSupport creationSupport =
+					(ImplicitLayoutCreationSupport) layout.getCreationSupport();
+			assertSame(composite.getCreationSupport().getElement(), creationSupport.getElement());
+			assertEquals("implicit-layout: org.eclipse.swt.layout.FillLayout", creationSupport.toString());
+			assertEquals("implicit-layout: org.eclipse.swt.layout.FillLayout", creationSupport.getTitle());
+			assertTrue(creationSupport.canDelete());
+			// delete() ignored
+			layout.delete();
+			assertXML("<t:MyComposite/>");
+			assertHierarchy(
+					"// filler filler filler filler filler",
+					"<t:MyComposite>",
+					"  implicit-layout: org.eclipse.swt.layout.FillLayout");
+		}
+		// simulate Layout_Info absence
+		((Collection<?>) ReflectionUtils.getFieldObject(composite, "m_children")).clear();
+		try {
+			composite.getLayout();
+			fail();
+		} catch (IllegalStateException e) {
+		}
+	}
 
-  /**
-   * Test for implicit {@link AbsoluteLayoutInfo}.
-   */
-  public void test_implicit_absolute() throws Exception {
-    CompositeInfo composite = parse("<Shell/>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  implicit-layout: absolute");
-    // has implicit layout
-    assertTrue(composite.hasLayout());
-    LayoutInfo layout = composite.getLayout();
-    assertNotNull(layout);
-    assertSame(null, layout.getDescription().getComponentClass());
-  }
+	/**
+	 * Test for implicit {@link AbsoluteLayoutInfo}.
+	 */
+	public void test_implicit_absolute() throws Exception {
+		CompositeInfo composite = parse("<Shell/>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  implicit-layout: absolute");
+		// has implicit layout
+		assertTrue(composite.hasLayout());
+		LayoutInfo layout = composite.getLayout();
+		assertNotNull(layout);
+		assertSame(null, layout.getDescription().getComponentClass());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // delete()
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for deleting {@link LayoutInfo}.
-   * <p>
-   * Also test for {@link LayoutInfo#isActive()}.
-   */
-  public void test_delete_isActive() throws Exception {
-    CompositeInfo shell =
-        parse(
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <FillLayout/>",
-            "  </Shell.layout>",
-            "</Shell>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <FillLayout>");
-    LayoutInfo layout = shell.getLayout();
-    //
-    assertTrue(layout.isActive());
-    // delete
-    layout.delete();
-    assertFalse(layout.isActive());
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell/>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  implicit-layout: absolute");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// delete()
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for deleting {@link LayoutInfo}.
+	 * <p>
+	 * Also test for {@link LayoutInfo#isActive()}.
+	 */
+	public void test_delete_isActive() throws Exception {
+		CompositeInfo shell =
+				parse(
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <FillLayout/>",
+						"  </Shell.layout>",
+						"</Shell>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <FillLayout>");
+		LayoutInfo layout = shell.getLayout();
+		//
+		assertTrue(layout.isActive());
+		// delete
+		layout.delete();
+		assertFalse(layout.isActive());
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell/>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  implicit-layout: absolute");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // setLayout()
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link CompositeInfo#setLayout(LayoutInfo)}.
-   */
-  public void test_setLayout_replaceImplicit() throws Exception {
-    CompositeInfo shell = parse("<Shell/>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  implicit-layout: absolute");
-    // set new Layout
-    LayoutInfo layout = createObject("org.eclipse.swt.layout.FillLayout");
-    shell.setLayout(layout);
-    // source
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "</Shell>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <FillLayout>");
-    // object
-    shell.refresh();
-    assertInstanceOf("org.eclipse.swt.layout.FillLayout", shell.getComposite().getLayout());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// setLayout()
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link CompositeInfo#setLayout(LayoutInfo)}.
+	 */
+	public void test_setLayout_replaceImplicit() throws Exception {
+		CompositeInfo shell = parse("<Shell/>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  implicit-layout: absolute");
+		// set new Layout
+		LayoutInfo layout = createObject("org.eclipse.swt.layout.FillLayout");
+		shell.setLayout(layout);
+		// source
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"</Shell>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <FillLayout>");
+		// object
+		shell.refresh();
+		assertInstanceOf("org.eclipse.swt.layout.FillLayout", shell.getComposite().getLayout());
+	}
 
-  /**
-   * Test for {@link CompositeInfo#setLayout(LayoutInfo)}.
-   */
-  public void test_setLayout_replaceExplicit() throws Exception {
-    CompositeInfo shell =
-        parse(
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <FillLayout/>",
-            "  </Shell.layout>",
-            "</Shell>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <FillLayout>");
-    // set new Layout
-    LayoutInfo layout = createObject("org.eclipse.swt.layout.FillLayout");
-    shell.setLayout(layout);
-    // source
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "</Shell>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <FillLayout>");
-    // object
-    shell.refresh();
-    assertInstanceOf("org.eclipse.swt.layout.FillLayout", shell.getComposite().getLayout());
-  }
+	/**
+	 * Test for {@link CompositeInfo#setLayout(LayoutInfo)}.
+	 */
+	public void test_setLayout_replaceExplicit() throws Exception {
+		CompositeInfo shell =
+				parse(
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <FillLayout/>",
+						"  </Shell.layout>",
+						"</Shell>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <FillLayout>");
+		// set new Layout
+		LayoutInfo layout = createObject("org.eclipse.swt.layout.FillLayout");
+		shell.setLayout(layout);
+		// source
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"</Shell>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <FillLayout>");
+		// object
+		shell.refresh();
+		assertInstanceOf("org.eclipse.swt.layout.FillLayout", shell.getComposite().getLayout());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // CREATE
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link LayoutInfo#command_CREATE(ControlInfo, ControlInfo)}.
-   */
-  public void test_CREATE() throws Exception {
-    CompositeInfo composite =
-        parse(
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <FillLayout/>",
-            "  </Shell.layout>",
-            "  <Button wbp:name='existing'/>",
-            "</Shell>");
-    //
-    ControlInfo newButton = createButtonWithText();
-    composite.getLayout().command_CREATE(newButton, null);
-    assertXML(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='existing'/>",
-        "  <Button text='New Button'/>",
-        "</Shell>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <FillLayout>",
-        "  <Button wbp:name='existing'>",
-        "  <Button text='New Button'>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// CREATE
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link LayoutInfo#command_CREATE(ControlInfo, ControlInfo)}.
+	 */
+	public void test_CREATE() throws Exception {
+		CompositeInfo composite =
+				parse(
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <FillLayout/>",
+						"  </Shell.layout>",
+						"  <Button wbp:name='existing'/>",
+						"</Shell>");
+		//
+		ControlInfo newButton = createButtonWithText();
+		composite.getLayout().command_CREATE(newButton, null);
+		assertXML(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='existing'/>",
+				"  <Button text='New Button'/>",
+				"</Shell>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <FillLayout>",
+				"  <Button wbp:name='existing'>",
+				"  <Button text='New Button'>");
+	}
 
-  /**
-   * Test for {@link LayoutInfo#command_CREATE(ControlInfo, ControlInfo)}.
-   */
-  public void test_CREATE_withNext() throws Exception {
-    CompositeInfo composite =
-        parse(
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <FillLayout/>",
-            "  </Shell.layout>",
-            "  <Button wbp:name='refButton'/>",
-            "</Shell>");
-    ControlInfo refButton = getObjectByName("refButton");
-    //
-    ControlInfo newButton = createButtonWithText();
-    composite.getLayout().command_CREATE(newButton, refButton);
-    assertXML(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <Button text='New Button'/>",
-        "  <Button wbp:name='refButton'/>",
-        "</Shell>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <FillLayout>",
-        "  <Button text='New Button'>",
-        "  <Button wbp:name='refButton'>");
-  }
+	/**
+	 * Test for {@link LayoutInfo#command_CREATE(ControlInfo, ControlInfo)}.
+	 */
+	public void test_CREATE_withNext() throws Exception {
+		CompositeInfo composite =
+				parse(
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <FillLayout/>",
+						"  </Shell.layout>",
+						"  <Button wbp:name='refButton'/>",
+						"</Shell>");
+		ControlInfo refButton = getObjectByName("refButton");
+		//
+		ControlInfo newButton = createButtonWithText();
+		composite.getLayout().command_CREATE(newButton, refButton);
+		assertXML(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <Button text='New Button'/>",
+				"  <Button wbp:name='refButton'/>",
+				"</Shell>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <FillLayout>",
+				"  <Button text='New Button'>",
+				"  <Button wbp:name='refButton'>");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // MOVE
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link LayoutInfo#command_MOVE(ControlInfo, ControlInfo)}.
-   */
-  public void test_MOVE_last() throws Exception {
-    CompositeInfo composite =
-        parse(
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <FillLayout/>",
-            "  </Shell.layout>",
-            "  <Button wbp:name='buttonA'/>",
-            "  <Button wbp:name='button'/>",
-            "  <Button wbp:name='buttonB'/>",
-            "</Shell>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <FillLayout>",
-        "  <Button wbp:name='buttonA'>",
-        "  <Button wbp:name='button'>",
-        "  <Button wbp:name='buttonB'>");
-    ControlInfo button = getObjectByName("button");
-    //
-    composite.getLayout().command_MOVE(button, null);
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='buttonA'/>",
-        "  <Button wbp:name='buttonB'/>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    assertHierarchy(
-        "<Shell>",
-        "  <FillLayout>",
-        "  <Button wbp:name='buttonA'>",
-        "  <Button wbp:name='buttonB'>",
-        "  <Button wbp:name='button'>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// MOVE
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link LayoutInfo#command_MOVE(ControlInfo, ControlInfo)}.
+	 */
+	public void test_MOVE_last() throws Exception {
+		CompositeInfo composite =
+				parse(
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <FillLayout/>",
+						"  </Shell.layout>",
+						"  <Button wbp:name='buttonA'/>",
+						"  <Button wbp:name='button'/>",
+						"  <Button wbp:name='buttonB'/>",
+						"</Shell>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <FillLayout>",
+				"  <Button wbp:name='buttonA'>",
+				"  <Button wbp:name='button'>",
+				"  <Button wbp:name='buttonB'>");
+		ControlInfo button = getObjectByName("button");
+		//
+		composite.getLayout().command_MOVE(button, null);
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='buttonA'/>",
+				"  <Button wbp:name='buttonB'/>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		assertHierarchy(
+				"<Shell>",
+				"  <FillLayout>",
+				"  <Button wbp:name='buttonA'>",
+				"  <Button wbp:name='buttonB'>",
+				"  <Button wbp:name='button'>");
+	}
 
-  /**
-   * Test for {@link LayoutInfo#command_MOVE(ControlInfo, ControlInfo)}.
-   */
-  public void test_MOVE_withNext() throws Exception {
-    CompositeInfo composite =
-        parse(
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <FillLayout/>",
-            "  </Shell.layout>",
-            "  <Button wbp:name='buttonA'/>",
-            "  <Button wbp:name='button'/>",
-            "  <Button wbp:name='buttonB'/>",
-            "</Shell>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <FillLayout>",
-        "  <Button wbp:name='buttonA'>",
-        "  <Button wbp:name='button'>",
-        "  <Button wbp:name='buttonB'>");
-    ControlInfo button = getObjectByName("button");
-    ControlInfo buttonA = getObjectByName("buttonA");
-    //
-    composite.getLayout().command_MOVE(button, buttonA);
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'/>",
-        "  <Button wbp:name='buttonA'/>",
-        "  <Button wbp:name='buttonB'/>",
-        "</Shell>");
-    assertHierarchy(
-        "<Shell>",
-        "  <FillLayout>",
-        "  <Button wbp:name='button'>",
-        "  <Button wbp:name='buttonA'>",
-        "  <Button wbp:name='buttonB'>");
-  }
+	/**
+	 * Test for {@link LayoutInfo#command_MOVE(ControlInfo, ControlInfo)}.
+	 */
+	public void test_MOVE_withNext() throws Exception {
+		CompositeInfo composite =
+				parse(
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <FillLayout/>",
+						"  </Shell.layout>",
+						"  <Button wbp:name='buttonA'/>",
+						"  <Button wbp:name='button'/>",
+						"  <Button wbp:name='buttonB'/>",
+						"</Shell>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <FillLayout>",
+				"  <Button wbp:name='buttonA'>",
+				"  <Button wbp:name='button'>",
+				"  <Button wbp:name='buttonB'>");
+		ControlInfo button = getObjectByName("button");
+		ControlInfo buttonA = getObjectByName("buttonA");
+		//
+		composite.getLayout().command_MOVE(button, buttonA);
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'/>",
+				"  <Button wbp:name='buttonA'/>",
+				"  <Button wbp:name='buttonB'/>",
+				"</Shell>");
+		assertHierarchy(
+				"<Shell>",
+				"  <FillLayout>",
+				"  <Button wbp:name='button'>",
+				"  <Button wbp:name='buttonA'>",
+				"  <Button wbp:name='buttonB'>");
+	}
 
-  /**
-   * Test for {@link LayoutInfo#command_MOVE(ControlInfo, ControlInfo)}.
-   */
-  public void test_MOVE_reparent() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <Composite wbp:name='target'>",
-        "    <Composite.layout>",
-        "      <FillLayout/>",
-        "    </Composite.layout>",
-        "  </Composite>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <FillLayout>",
-        "  <Composite wbp:name='target'>",
-        "    <FillLayout>",
-        "  <Button wbp:name='button'>");
-    ControlInfo button = getObjectByName("button");
-    CompositeInfo target = getObjectByName("target");
-    //
-    target.getLayout().command_MOVE(button, null);
-    assertXML(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <Composite wbp:name='target'>",
-        "    <Composite.layout>",
-        "      <FillLayout/>",
-        "    </Composite.layout>",
-        "    <Button wbp:name='button'/>",
-        "  </Composite>",
-        "</Shell>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <FillLayout>",
-        "  <Composite wbp:name='target'>",
-        "    <FillLayout>",
-        "    <Button wbp:name='button'>");
-  }
+	/**
+	 * Test for {@link LayoutInfo#command_MOVE(ControlInfo, ControlInfo)}.
+	 */
+	public void test_MOVE_reparent() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <Composite wbp:name='target'>",
+				"    <Composite.layout>",
+				"      <FillLayout/>",
+				"    </Composite.layout>",
+				"  </Composite>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <FillLayout>",
+				"  <Composite wbp:name='target'>",
+				"    <FillLayout>",
+				"  <Button wbp:name='button'>");
+		ControlInfo button = getObjectByName("button");
+		CompositeInfo target = getObjectByName("target");
+		//
+		target.getLayout().command_MOVE(button, null);
+		assertXML(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <Composite wbp:name='target'>",
+				"    <Composite.layout>",
+				"      <FillLayout/>",
+				"    </Composite.layout>",
+				"    <Button wbp:name='button'/>",
+				"  </Composite>",
+				"</Shell>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <FillLayout>",
+				"  <Composite wbp:name='target'>",
+				"    <FillLayout>",
+				"    <Button wbp:name='button'>");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // "Layout" property
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for "Layout" complex property.
-   */
-  public void test_Layout_complexProperty() throws Exception {
-    CompositeInfo composite =
-        parse(
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <RowLayout/>",
-            "  </Shell.layout>",
-            "</Shell>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <RowLayout>");
-    refresh();
-    //
-    Property layoutProperty = composite.getPropertyByTitle("Layout");
-    assertNotNull(layoutProperty);
-    assertEquals("(org.eclipse.swt.layout.RowLayout)", getPropertyText(layoutProperty));
-    assertTrue(layoutProperty.isModified());
-    // sub-properties
-    Property[] subProperties = PropertyUtils.getChildren(layoutProperty);
-    String[] subTitles = PropertyUtils.getTitles(subProperties);
-    assertThat(subTitles).contains("Class", "center", "fill", "spacing", "marginLeft");
-    // delete
-    layoutProperty.setValue(Property.UNKNOWN_VALUE);
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell/>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// "Layout" property
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for "Layout" complex property.
+	 */
+	public void test_Layout_complexProperty() throws Exception {
+		CompositeInfo composite =
+				parse(
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <RowLayout/>",
+						"  </Shell.layout>",
+						"</Shell>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <RowLayout>");
+		refresh();
+		//
+		Property layoutProperty = composite.getPropertyByTitle("Layout");
+		assertNotNull(layoutProperty);
+		assertEquals("(org.eclipse.swt.layout.RowLayout)", getPropertyText(layoutProperty));
+		assertTrue(layoutProperty.isModified());
+		// sub-properties
+		Property[] subProperties = PropertyUtils.getChildren(layoutProperty);
+		String[] subTitles = PropertyUtils.getTitles(subProperties);
+		assertThat(subTitles).contains("Class", "center", "fill", "spacing", "marginLeft");
+		// delete
+		layoutProperty.setValue(Property.UNKNOWN_VALUE);
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell/>");
+	}
 
-  /**
-   * Test for "Layout" complex property.
-   */
-  public void test_Layout_complexProperty_absolute() throws Exception {
-    CompositeInfo composite = parse("<Shell/>");
-    refresh();
-    //
-    Property layoutProperty = composite.getPropertyByTitle("Layout");
-    assertNotNull(layoutProperty);
-    assertEquals("(absolute)", getPropertyText(layoutProperty));
-    // sub-properties
-    Property[] subProperties = PropertyUtils.getChildren(layoutProperty);
-    assertThat(subProperties).isEmpty();
-  }
+	/**
+	 * Test for "Layout" complex property.
+	 */
+	public void test_Layout_complexProperty_absolute() throws Exception {
+		CompositeInfo composite = parse("<Shell/>");
+		refresh();
+		//
+		Property layoutProperty = composite.getPropertyByTitle("Layout");
+		assertNotNull(layoutProperty);
+		assertEquals("(absolute)", getPropertyText(layoutProperty));
+		// sub-properties
+		Property[] subProperties = PropertyUtils.getChildren(layoutProperty);
+		assertThat(subProperties).isEmpty();
+	}
 
-  /**
-   * Test for drop-down menu of "Layout" complex property.
-   */
-  public void test_Layout_complexProperty_dropDown() throws Exception {
-    CompositeInfo composite = parse("<Shell/>");
-    refresh();
-    //
-    Property layoutProperty = composite.getPropertyByTitle("Layout");
-    PropertyEditorPresentation presentation =
-        (PropertyEditorPresentation) ReflectionUtils.getFieldObject(
-            layoutProperty.getEditor(),
-            "m_presentation");
-    assertNotNull(presentation);
-    assertNotNull(ReflectionUtils.invokeMethod(presentation, "getImage()"));
-    // show drop-down
-    Shell shell = new Shell();
-    PropertyTable propertyTable = new PropertyTable(shell, SWT.NONE);
-    try {
-      ReflectionUtils.invokeMethod(
-          presentation,
-          "onClick(org.eclipse.wb.internal.core.model.property.table.PropertyTable,"
-              + "org.eclipse.wb.internal.core.model.property.Property)",
-          propertyTable,
-          layoutProperty);
-      //
-      UiContext context = new UiContext();
-      Menu dropDown = context.getLastPopup();
-      try {
-        assertNotNull(dropDown);
-        dropDown.notifyListeners(SWT.Show, null);
-        {
-          List<String> itemTexts = Lists.newArrayList();
-          for (MenuItem menuItem : dropDown.getItems()) {
-            itemTexts.add(menuItem.getText());
-          }
-          assertThat(itemTexts).contains("FillLayout", "RowLayout", "GridLayout");
-        }
-      } finally {
-        dropDown.setVisible(false);
-      }
-    } finally {
-      shell.dispose();
-    }
-  }
+	/**
+	 * Test for drop-down menu of "Layout" complex property.
+	 */
+	public void test_Layout_complexProperty_dropDown() throws Exception {
+		CompositeInfo composite = parse("<Shell/>");
+		refresh();
+		//
+		Property layoutProperty = composite.getPropertyByTitle("Layout");
+		PropertyEditorPresentation presentation =
+				(PropertyEditorPresentation) ReflectionUtils.getFieldObject(
+						layoutProperty.getEditor(),
+						"m_presentation");
+		assertNotNull(presentation);
+		assertNotNull(ReflectionUtils.invokeMethod(presentation, "getImage()"));
+		// show drop-down
+		Shell shell = new Shell();
+		PropertyTable propertyTable = new PropertyTable(shell, SWT.NONE);
+		try {
+			ReflectionUtils.invokeMethod(
+					presentation,
+					"onClick(org.eclipse.wb.internal.core.model.property.table.PropertyTable,"
+							+ "org.eclipse.wb.internal.core.model.property.Property)",
+							propertyTable,
+							layoutProperty);
+			//
+			UiContext context = new UiContext();
+			Menu dropDown = context.getLastPopup();
+			try {
+				assertNotNull(dropDown);
+				dropDown.notifyListeners(SWT.Show, null);
+				{
+					List<String> itemTexts = Lists.newArrayList();
+					for (MenuItem menuItem : dropDown.getItems()) {
+						itemTexts.add(menuItem.getText());
+					}
+					assertThat(itemTexts).contains("FillLayout", "RowLayout", "GridLayout");
+				}
+			} finally {
+				dropDown.setVisible(false);
+			}
+		} finally {
+			shell.dispose();
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // LayoutData
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test that we can parse "real" {@link LayoutDataInfo} and bind it to {@link ControlInfo}.
-   */
-  public void test_LayoutData_parse() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <RowLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'>",
-        "    <Button.layoutData>",
-        "      <RowData width='100'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "</Shell>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <RowLayout>",
-        "  <Button wbp:name='button'>",
-        "    <RowData width='100'>");
-    refresh();
-    //
-    ControlInfo button = getObjectByName("button");
-    LayoutDataInfo layoutData = LayoutInfo.getLayoutData(button);
-    assertNotNull(layoutData);
-    assertEquals(100, layoutData.getPropertyByTitle("width").getValue());
-    // not visible
-    assertVisible(layoutData, false);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// LayoutData
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test that we can parse "real" {@link LayoutDataInfo} and bind it to {@link ControlInfo}.
+	 */
+	public void test_LayoutData_parse() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <RowLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'>",
+				"    <Button.layoutData>",
+				"      <RowData width='100'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"</Shell>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <RowLayout>",
+				"  <Button wbp:name='button'>",
+				"    <RowData width='100'>");
+		refresh();
+		//
+		ControlInfo button = getObjectByName("button");
+		LayoutDataInfo layoutData = LayoutInfo.getLayoutData(button);
+		assertNotNull(layoutData);
+		assertEquals(100, layoutData.getPropertyByTitle("width").getValue());
+		// not visible
+		assertVisible(layoutData, false);
+	}
 
-  /**
-   * Test for "LayoutData" complex property.
-   */
-  public void test_LayoutData_complexProperty() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <RowLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'>",
-        "    <Button.layoutData>",
-        "      <RowData width='100'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "</Shell>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <RowLayout>",
-        "  <Button wbp:name='button'>",
-        "    <RowData width='100'>");
-    refresh();
-    //
-    ControlInfo button = getObjectByName("button");
-    // "LayoutData" property
-    {
-      Property dataProperty = button.getPropertyByTitle("LayoutData");
-      assertNotNull(dataProperty);
-      assertEquals("(org.eclipse.swt.layout.RowData)", getPropertyText(dataProperty));
-      assertTrue(dataProperty.isModified());
-      // sub-properties
-      Property[] subProperties = PropertyUtils.getChildren(dataProperty);
-      String[] subTitles = PropertyUtils.getTitles(subProperties);
-      assertThat(subTitles).contains("Class", "exclude", "width", "height");
-      // delete
-      dataProperty.setValue(Property.UNKNOWN_VALUE);
-      assertXML(
-          "// filler filler filler filler filler",
-          "<Shell>",
-          "  <Shell.layout>",
-          "    <RowLayout/>",
-          "  </Shell.layout>",
-          "  <Button wbp:name='button'/>",
-          "</Shell>");
-    }
-    // still has "LayoutData" property, but it is virtual, so not modified
-    {
-      Property dataProperty = button.getPropertyByTitle("LayoutData");
-      assertFalse(dataProperty.isModified());
-    }
-  }
+	/**
+	 * Test for "LayoutData" complex property.
+	 */
+	public void test_LayoutData_complexProperty() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <RowLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'>",
+				"    <Button.layoutData>",
+				"      <RowData width='100'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"</Shell>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <RowLayout>",
+				"  <Button wbp:name='button'>",
+				"    <RowData width='100'>");
+		refresh();
+		//
+		ControlInfo button = getObjectByName("button");
+		// "LayoutData" property
+		{
+			Property dataProperty = button.getPropertyByTitle("LayoutData");
+			assertNotNull(dataProperty);
+			assertEquals("(org.eclipse.swt.layout.RowData)", getPropertyText(dataProperty));
+			assertTrue(dataProperty.isModified());
+			// sub-properties
+			Property[] subProperties = PropertyUtils.getChildren(dataProperty);
+			String[] subTitles = PropertyUtils.getTitles(subProperties);
+			assertThat(subTitles).contains("Class", "exclude", "width", "height");
+			// delete
+			dataProperty.setValue(Property.UNKNOWN_VALUE);
+			assertXML(
+					"// filler filler filler filler filler",
+					"<Shell>",
+					"  <Shell.layout>",
+					"    <RowLayout/>",
+					"  </Shell.layout>",
+					"  <Button wbp:name='button'/>",
+					"</Shell>");
+		}
+		// still has "LayoutData" property, but it is virtual, so not modified
+		{
+			Property dataProperty = button.getPropertyByTitle("LayoutData");
+			assertFalse(dataProperty.isModified());
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // LayoutData: virtual and materialize
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test that after parsing {@link ControlInfo} has virtual {@link LayoutDataInfo}.
-   */
-  public void test_LayoutData_virtual() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <RowLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <RowLayout>",
-        "  <Button wbp:name='button'>",
-        "    virtual-LayoutData: org.eclipse.swt.layout.RowData");
-    refresh();
-    //
-    ControlInfo button = getObjectByName("button");
-    {
-      LayoutDataInfo layoutData = LayoutInfo.getLayoutData(button);
-      assertNotNull(layoutData);
-      assertEquals(SWT.DEFAULT, layoutData.getPropertyByTitle("width").getValue());
-      // CreationSupport
-      VirtualLayoutDataCreationSupport creationSupport =
-          (VirtualLayoutDataCreationSupport) layoutData.getCreationSupport();
-      assertEquals("virtual-LayoutData: org.eclipse.swt.layout.RowData", creationSupport.toString());
-      assertEquals("virtual-LayoutData: org.eclipse.swt.layout.RowData", creationSupport.getTitle());
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// LayoutData: virtual and materialize
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test that after parsing {@link ControlInfo} has virtual {@link LayoutDataInfo}.
+	 */
+	public void test_LayoutData_virtual() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <RowLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <RowLayout>",
+				"  <Button wbp:name='button'>",
+				"    virtual-LayoutData: org.eclipse.swt.layout.RowData");
+		refresh();
+		//
+		ControlInfo button = getObjectByName("button");
+		{
+			LayoutDataInfo layoutData = LayoutInfo.getLayoutData(button);
+			assertNotNull(layoutData);
+			assertEquals(SWT.DEFAULT, layoutData.getPropertyByTitle("width").getValue());
+			// CreationSupport
+			VirtualLayoutDataCreationSupport creationSupport =
+					(VirtualLayoutDataCreationSupport) layoutData.getCreationSupport();
+			assertEquals("virtual-LayoutData: org.eclipse.swt.layout.RowData", creationSupport.toString());
+			assertEquals("virtual-LayoutData: org.eclipse.swt.layout.RowData", creationSupport.getTitle());
+		}
+	}
 
-  /**
-   * Test for materializing virtual {@link LayoutDataInfo}.
-   */
-  public void test_LayoutData_materialize() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <RowLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <RowLayout>",
-        "  <Button wbp:name='button'>",
-        "    virtual-LayoutData: org.eclipse.swt.layout.RowData");
-    refresh();
-    //
-    ControlInfo button = getObjectByName("button");
-    LayoutDataInfo layoutData = LayoutInfo.getLayoutData(button);
-    layoutData.getPropertyByTitle("width").setValue(100);
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <RowLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'>",
-        "    <Button.layoutData>",
-        "      <RowData width='100'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "</Shell>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <RowLayout>",
-        "  <Button wbp:name='button'>",
-        "    <RowData width='100'>");
-  }
+	/**
+	 * Test for materializing virtual {@link LayoutDataInfo}.
+	 */
+	public void test_LayoutData_materialize() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <RowLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <RowLayout>",
+				"  <Button wbp:name='button'>",
+				"    virtual-LayoutData: org.eclipse.swt.layout.RowData");
+		refresh();
+		//
+		ControlInfo button = getObjectByName("button");
+		LayoutDataInfo layoutData = LayoutInfo.getLayoutData(button);
+		layoutData.getPropertyByTitle("width").setValue(100);
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <RowLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'>",
+				"    <Button.layoutData>",
+				"      <RowData width='100'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"</Shell>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <RowLayout>",
+				"  <Button wbp:name='button'>",
+				"    <RowData width='100'>");
+	}
 
-  public void test_LayoutData_createVirtual_whenDeleteReal() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <RowLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'>",
-        "    <Button.layoutData>",
-        "      <RowData width='100'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "</Shell>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <RowLayout>",
-        "  <Button wbp:name='button'>",
-        "    <RowData width='100'>");
-    refresh();
-    //
-    ControlInfo button = getObjectByName("button");
-    LayoutDataInfo layoutData = LayoutInfo.getLayoutData(button);
-    layoutData.delete();
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <RowLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <RowLayout>",
-        "  <Button wbp:name='button'>",
-        "    virtual-LayoutData: org.eclipse.swt.layout.RowData");
-  }
+	public void test_LayoutData_createVirtual_whenDeleteReal() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <RowLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'>",
+				"    <Button.layoutData>",
+				"      <RowData width='100'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"</Shell>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <RowLayout>",
+				"  <Button wbp:name='button'>",
+				"    <RowData width='100'>");
+		refresh();
+		//
+		ControlInfo button = getObjectByName("button");
+		LayoutDataInfo layoutData = LayoutInfo.getLayoutData(button);
+		layoutData.delete();
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <RowLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <RowLayout>",
+				"  <Button wbp:name='button'>",
+				"    virtual-LayoutData: org.eclipse.swt.layout.RowData");
+	}
 
-  public void test_LayoutData_createVirtual_whenAddControl() throws Exception {
-    CompositeInfo composite =
-        parse(
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <RowLayout/>",
-            "  </Shell.layout>",
-            "</Shell>");
-    //
-    ControlInfo newButton = createButtonWithText();
-    composite.getLayout().command_CREATE(newButton, null);
-    assertXML(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <RowLayout/>",
-        "  </Shell.layout>",
-        "  <Button text='New Button'/>",
-        "</Shell>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <RowLayout>",
-        "  <Button text='New Button'>",
-        "    virtual-LayoutData: org.eclipse.swt.layout.RowData");
-  }
+	public void test_LayoutData_createVirtual_whenAddControl() throws Exception {
+		CompositeInfo composite =
+				parse(
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <RowLayout/>",
+						"  </Shell.layout>",
+						"</Shell>");
+		//
+		ControlInfo newButton = createButtonWithText();
+		composite.getLayout().command_CREATE(newButton, null);
+		assertXML(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <RowLayout/>",
+				"  </Shell.layout>",
+				"  <Button text='New Button'/>",
+				"</Shell>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <RowLayout>",
+				"  <Button text='New Button'>",
+				"    virtual-LayoutData: org.eclipse.swt.layout.RowData");
+	}
 
-  public void test_LayoutData_createVirtual_whenSetLayout() throws Exception {
-    CompositeInfo composite =
-        parse(
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <FillLayout/>",
-            "  </Shell.layout>",
-            "  <Button wbp:name='button'/>",
-            "</Shell>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <FillLayout>",
-        "  <Button wbp:name='button'>");
-    // set new Layout
-    LayoutInfo layout = createObject("org.eclipse.swt.layout.RowLayout");
-    composite.setLayout(layout);
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <RowLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <RowLayout>",
-        "  <Button wbp:name='button'>",
-        "    virtual-LayoutData: org.eclipse.swt.layout.RowData");
-  }
+	public void test_LayoutData_createVirtual_whenSetLayout() throws Exception {
+		CompositeInfo composite =
+				parse(
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <FillLayout/>",
+						"  </Shell.layout>",
+						"  <Button wbp:name='button'/>",
+						"</Shell>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <FillLayout>",
+				"  <Button wbp:name='button'>");
+		// set new Layout
+		LayoutInfo layout = createObject("org.eclipse.swt.layout.RowLayout");
+		composite.setLayout(layout);
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <RowLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <RowLayout>",
+				"  <Button wbp:name='button'>",
+				"    virtual-LayoutData: org.eclipse.swt.layout.RowData");
+	}
 
-  public void test_LayoutData_deleteIt_whenNoAttributes() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <RowLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'>",
-        "    <Button.layoutData>",
-        "      <RowData width='100'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "</Shell>");
-    // remove "width" attribute
-    ExecutionUtils.run(m_lastObject, new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        ControlInfo button = getObjectByName("button");
-        XmlObjectInfo rowData = LayoutInfo.getLayoutData(button);
-        rowData.removeAttribute("width");
-      }
-    });
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <RowLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <RowLayout>",
-        "  <Button wbp:name='button'>",
-        "    virtual-LayoutData: org.eclipse.swt.layout.RowData");
-  }
+	public void test_LayoutData_deleteIt_whenNoAttributes() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <RowLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'>",
+				"    <Button.layoutData>",
+				"      <RowData width='100'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"</Shell>");
+		// remove "width" attribute
+		ExecutionUtils.run(m_lastObject, new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				ControlInfo button = getObjectByName("button");
+				XmlObjectInfo rowData = LayoutInfo.getLayoutData(button);
+				rowData.removeAttribute("width");
+			}
+		});
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <RowLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <RowLayout>",
+				"  <Button wbp:name='button'>",
+				"    virtual-LayoutData: org.eclipse.swt.layout.RowData");
+	}
 
-  public void test_LayoutData_deleteIt_hasChildElement_dontDelete() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FormLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'>",
-        "    <Button.layoutData>",
-        "      <FormData width='100'>",
-        "        <FormData.left>",
-        "          <FormAttachment offset='50'/>",
-        "        </FormData.left>",
-        "      </FormData>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "</Shell>");
-    // remove "width" attribute, but there is "left" sub-element, so FormData should not be deleted
-    ExecutionUtils.run(m_lastObject, new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        ControlInfo button = getObjectByName("button");
-        XmlObjectInfo rowData = LayoutInfo.getLayoutData(button);
-        rowData.removeAttribute("width");
-      }
-    });
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FormLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'>",
-        "    <Button.layoutData>",
-        "      <FormData>",
-        "        <FormData.left>",
-        "          <FormAttachment offset='50'/>",
-        "        </FormData.left>",
-        "      </FormData>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "</Shell>");
-  }
+	public void test_LayoutData_deleteIt_hasChildElement_dontDelete() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FormLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'>",
+				"    <Button.layoutData>",
+				"      <FormData width='100'>",
+				"        <FormData.left>",
+				"          <FormAttachment offset='50'/>",
+				"        </FormData.left>",
+				"      </FormData>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"</Shell>");
+		// remove "width" attribute, but there is "left" sub-element, so FormData should not be deleted
+		ExecutionUtils.run(m_lastObject, new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				ControlInfo button = getObjectByName("button");
+				XmlObjectInfo rowData = LayoutInfo.getLayoutData(button);
+				rowData.removeAttribute("width");
+			}
+		});
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FormLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'>",
+				"    <Button.layoutData>",
+				"      <FormData>",
+				"        <FormData.left>",
+				"          <FormAttachment offset='50'/>",
+				"        </FormData.left>",
+				"      </FormData>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"</Shell>");
+	}
 
-  public void test_LayoutData_deleteIt_whenReparentControl() throws Exception {
-    CompositeInfo composite =
-        parse(
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <FillLayout/>",
-            "  </Shell.layout>",
-            "  <Composite wbp:name='target'>",
-            "    <Composite.layout>",
-            "      <RowLayout/>",
-            "    </Composite.layout>",
-            "    <Button wbp:name='button'/>",
-            "  </Composite>",
-            "</Shell>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <FillLayout>",
-        "  <Composite wbp:name='target'>",
-        "    <RowLayout>",
-        "    <Button wbp:name='button'>",
-        "      virtual-LayoutData: org.eclipse.swt.layout.RowData");
-    ControlInfo button = getObjectByName("button");
-    //
-    composite.getLayout().command_MOVE(button, null);
-    assertXML(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <Composite wbp:name='target'>",
-        "    <Composite.layout>",
-        "      <RowLayout/>",
-        "    </Composite.layout>",
-        "  </Composite>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <FillLayout>",
-        "  <Composite wbp:name='target'>",
-        "    <RowLayout>",
-        "  <Button wbp:name='button'>");
-  }
+	public void test_LayoutData_deleteIt_whenReparentControl() throws Exception {
+		CompositeInfo composite =
+				parse(
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <FillLayout/>",
+						"  </Shell.layout>",
+						"  <Composite wbp:name='target'>",
+						"    <Composite.layout>",
+						"      <RowLayout/>",
+						"    </Composite.layout>",
+						"    <Button wbp:name='button'/>",
+						"  </Composite>",
+						"</Shell>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <FillLayout>",
+				"  <Composite wbp:name='target'>",
+				"    <RowLayout>",
+				"    <Button wbp:name='button'>",
+				"      virtual-LayoutData: org.eclipse.swt.layout.RowData");
+		ControlInfo button = getObjectByName("button");
+		//
+		composite.getLayout().command_MOVE(button, null);
+		assertXML(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <Composite wbp:name='target'>",
+				"    <Composite.layout>",
+				"      <RowLayout/>",
+				"    </Composite.layout>",
+				"  </Composite>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <FillLayout>",
+				"  <Composite wbp:name='target'>",
+				"    <RowLayout>",
+				"  <Button wbp:name='button'>");
+	}
 
-  public void test_LayoutData_deleteThem_whenReplaceLayout() throws Exception {
-    CompositeInfo composite =
-        parse(
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <RowLayout/>",
-            "  </Shell.layout>",
-            "  <Button wbp:name='withExplicit'>",
-            "    <Button.layoutData>",
-            "      <RowData width='100'/>",
-            "    </Button.layoutData>",
-            "  </Button>",
-            "  <Button wbp:name='withVirtual'/>",
-            "</Shell>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <RowLayout>",
-        "  <Button wbp:name='withExplicit'>",
-        "    <RowData width='100'>",
-        "  <Button wbp:name='withVirtual'>",
-        "    virtual-LayoutData: org.eclipse.swt.layout.RowData");
-    // set new Layout
-    LayoutInfo layout = createObject("org.eclipse.swt.layout.FillLayout");
-    composite.setLayout(layout);
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='withExplicit'/>",
-        "  <Button wbp:name='withVirtual'/>",
-        "</Shell>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <FillLayout>",
-        "  <Button wbp:name='withExplicit'>",
-        "  <Button wbp:name='withVirtual'>");
-  }
+	public void test_LayoutData_deleteThem_whenReplaceLayout() throws Exception {
+		CompositeInfo composite =
+				parse(
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <RowLayout/>",
+						"  </Shell.layout>",
+						"  <Button wbp:name='withExplicit'>",
+						"    <Button.layoutData>",
+						"      <RowData width='100'/>",
+						"    </Button.layoutData>",
+						"  </Button>",
+						"  <Button wbp:name='withVirtual'/>",
+						"</Shell>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <RowLayout>",
+				"  <Button wbp:name='withExplicit'>",
+				"    <RowData width='100'>",
+				"  <Button wbp:name='withVirtual'>",
+				"    virtual-LayoutData: org.eclipse.swt.layout.RowData");
+		// set new Layout
+		LayoutInfo layout = createObject("org.eclipse.swt.layout.FillLayout");
+		composite.setLayout(layout);
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='withExplicit'/>",
+				"  <Button wbp:name='withVirtual'/>",
+				"</Shell>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <FillLayout>",
+				"  <Button wbp:name='withExplicit'>",
+				"  <Button wbp:name='withVirtual'>");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // test.MyComposite support
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Prepares empty <code>test.MyComposite</code> class with additional lines in constructor and
-   * body, and with special <code>wbp-component.xml</code> description.
-   */
-  protected final void prepareMyComposite(String[] constructorLines,
-      String[] bodyLines,
-      String[] descriptionLines) throws Exception {
-    // java
-    {
-      String[] lines =
-          new String[]{
-              "package test;",
-              "import org.eclipse.swt.SWT;",
-              "import org.eclipse.swt.widgets.*;",
-              "import org.eclipse.swt.layout.*;",
-              "public class MyComposite extends Composite {",
-              "  public MyComposite(Composite parent, int style) {",
-              "    super(parent, style);"};
-      lines = CodeUtils.join(lines, constructorLines);
-      lines = CodeUtils.join(lines, new String[]{"  }"});
-      lines = CodeUtils.join(lines, bodyLines);
-      lines = CodeUtils.join(lines, new String[]{"}"});
-      setFileContentSrc("test/MyComposite.java", getSourceDQ(lines));
-    }
-    // description
-    {
-      String[] lines =
-          new String[]{
-              "<?xml version='1.0' encoding='UTF-8'?>",
-              "<component xmlns='http://www.eclipse.org/wb/WBPComponent'>"};
-      lines = CodeUtils.join(lines, descriptionLines);
-      lines = CodeUtils.join(lines, new String[]{"</component>"});
-      setFileContentSrc("test/MyComposite.wbp-component.xml", getSourceDQ(lines));
-    }
-    waitForAutoBuild();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// test.MyComposite support
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Prepares empty <code>test.MyComposite</code> class with additional lines in constructor and
+	 * body, and with special <code>wbp-component.xml</code> description.
+	 */
+	protected final void prepareMyComposite(String[] constructorLines,
+			String[] bodyLines,
+			String[] descriptionLines) throws Exception {
+		// java
+		{
+			String[] lines =
+					new String[]{
+							"package test;",
+							"import org.eclipse.swt.SWT;",
+							"import org.eclipse.swt.widgets.*;",
+							"import org.eclipse.swt.layout.*;",
+							"public class MyComposite extends Composite {",
+							"  public MyComposite(Composite parent, int style) {",
+			"    super(parent, style);"};
+			lines = CodeUtils.join(lines, constructorLines);
+			lines = CodeUtils.join(lines, new String[]{"  }"});
+			lines = CodeUtils.join(lines, bodyLines);
+			lines = CodeUtils.join(lines, new String[]{"}"});
+			setFileContentSrc("test/MyComposite.java", getSourceDQ(lines));
+		}
+		// description
+		{
+			String[] lines =
+					new String[]{
+							"<?xml version='1.0' encoding='UTF-8'?>",
+			"<component xmlns='http://www.eclipse.org/wb/WBPComponent'>"};
+			lines = CodeUtils.join(lines, descriptionLines);
+			lines = CodeUtils.join(lines, new String[]{"</component>"});
+			setFileContentSrc("test/MyComposite.wbp-component.xml", getSourceDQ(lines));
+		}
+		waitForAutoBuild();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/layout/LayoutTests.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/layout/LayoutTests.java
index ae21c0161..0e5986c0e 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/layout/LayoutTests.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/layout/LayoutTests.java
@@ -23,20 +23,20 @@
  * @author scheglov_ke
  */
 public class LayoutTests extends DesignerSuiteTests {
-  public static Test suite() {
-    TestSuite suite = new TestSuite("org.eclipse.wb.xwt.model.layout");
-    suite.addTest(createSingleSuite(LayoutTest.class));
-    suite.addTest(createSingleSuite(AbsoluteLayoutTest.class));
-    suite.addTest(createSingleSuite(AbsoluteLayoutGefTest.class));
-    suite.addTest(createSingleSuite(RowLayoutTest.class));
-    suite.addTest(createSingleSuite(RowLayoutGefTest.class));
-    suite.addTest(createSingleSuite(FillLayoutTest.class));
-    suite.addTest(createSingleSuite(FillLayoutGefTest.class));
-    suite.addTest(createSingleSuite(StackLayoutTest.class));
-    suite.addTest(createSingleSuite(StackLayoutGefTest.class));
-    suite.addTest(createSingleSuite(FormLayoutTest.class));
-    suite.addTest(createSingleSuite(FormLayoutGefTest.class));
-    suite.addTest(GridLayoutTests.suite());
-    return suite;
-  }
+	public static Test suite() {
+		TestSuite suite = new TestSuite("org.eclipse.wb.xwt.model.layout");
+		suite.addTest(createSingleSuite(LayoutTest.class));
+		suite.addTest(createSingleSuite(AbsoluteLayoutTest.class));
+		suite.addTest(createSingleSuite(AbsoluteLayoutGefTest.class));
+		suite.addTest(createSingleSuite(RowLayoutTest.class));
+		suite.addTest(createSingleSuite(RowLayoutGefTest.class));
+		suite.addTest(createSingleSuite(FillLayoutTest.class));
+		suite.addTest(createSingleSuite(FillLayoutGefTest.class));
+		suite.addTest(createSingleSuite(StackLayoutTest.class));
+		suite.addTest(createSingleSuite(StackLayoutGefTest.class));
+		suite.addTest(createSingleSuite(FormLayoutTest.class));
+		suite.addTest(createSingleSuite(FormLayoutGefTest.class));
+		suite.addTest(GridLayoutTests.suite());
+		return suite;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/layout/RowLayoutGefTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/layout/RowLayoutGefTest.java
index cc4c75078..47b2a8a00 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/layout/RowLayoutGefTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/layout/RowLayoutGefTest.java
@@ -23,377 +23,377 @@
  * @author scheglov_ke
  */
 public class RowLayoutGefTest extends XwtGefTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_dropNew_RowLayout() throws Exception {
-    CompositeInfo shell =
-        openEditor(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<Shell/>");
-    loadCreationTool("org.eclipse.swt.layout.RowLayout");
-    //
-    canvas.moveTo(shell, 100, 100);
-    canvas.assertFeedbacks(canvas.getTargetPredicate(shell));
-    canvas.click();
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <RowLayout/>",
-        "  </Shell.layout>",
-        "</Shell>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_dropNew_RowLayout() throws Exception {
+		CompositeInfo shell =
+				openEditor(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<Shell/>");
+		loadCreationTool("org.eclipse.swt.layout.RowLayout");
+		//
+		canvas.moveTo(shell, 100, 100);
+		canvas.assertFeedbacks(canvas.getTargetPredicate(shell));
+		canvas.click();
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <RowLayout/>",
+				"  </Shell.layout>",
+				"</Shell>");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tree
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_tree_CREATE_noNext() throws Exception {
-    CompositeInfo shell =
-        openEditor(
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <RowLayout/>",
-            "  </Shell.layout>",
-            "</Shell>");
-    //
-    loadButtonWithText();
-    tree.moveOn(shell).click();
-    assertXML(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <RowLayout/>",
-        "  </Shell.layout>",
-        "  <Button text='New Button'/>",
-        "</Shell>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tree
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_tree_CREATE_noNext() throws Exception {
+		CompositeInfo shell =
+				openEditor(
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <RowLayout/>",
+						"  </Shell.layout>",
+						"</Shell>");
+		//
+		loadButtonWithText();
+		tree.moveOn(shell).click();
+		assertXML(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <RowLayout/>",
+				"  </Shell.layout>",
+				"  <Button text='New Button'/>",
+				"</Shell>");
+	}
 
-  public void test_tree_CREATE_withNext() throws Exception {
-    openEditor(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <RowLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='reference' text='Reference'/>",
-        "</Shell>");
-    XmlObjectInfo reference = getObjectByName("reference");
-    //
-    loadButtonWithText();
-    tree.moveBefore(reference).click();
-    assertXML(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <RowLayout/>",
-        "  </Shell.layout>",
-        "  <Button text='New Button'/>",
-        "  <Button wbp:name='reference' text='Reference'/>",
-        "</Shell>");
-  }
+	public void test_tree_CREATE_withNext() throws Exception {
+		openEditor(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <RowLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='reference' text='Reference'/>",
+				"</Shell>");
+		XmlObjectInfo reference = getObjectByName("reference");
+		//
+		loadButtonWithText();
+		tree.moveBefore(reference).click();
+		assertXML(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <RowLayout/>",
+				"  </Shell.layout>",
+				"  <Button text='New Button'/>",
+				"  <Button wbp:name='reference' text='Reference'/>",
+				"</Shell>");
+	}
 
-  public void test_tree_PASTE() throws Exception {
-    openEditor(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <RowLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button' text='My button'/>",
-        "</Shell>");
-    ControlInfo button = getObjectByName("button");
-    //
-    doCopyPaste(button);
-    tree.moveBefore(button).click();
-    assertXML(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <RowLayout/>",
-        "  </Shell.layout>",
-        "  <Button text='My button'/>",
-        "  <Button wbp:name='button' text='My button'/>",
-        "</Shell>");
-  }
+	public void test_tree_PASTE() throws Exception {
+		openEditor(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <RowLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button' text='My button'/>",
+				"</Shell>");
+		ControlInfo button = getObjectByName("button");
+		//
+		doCopyPaste(button);
+		tree.moveBefore(button).click();
+		assertXML(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <RowLayout/>",
+				"  </Shell.layout>",
+				"  <Button text='My button'/>",
+				"  <Button wbp:name='button' text='My button'/>",
+				"</Shell>");
+	}
 
-  public void test_tree_MOVE_reorder() throws Exception {
-    openEditor(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <RowLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='reference' text='Reference'/>",
-        "  <Button wbp:name='button' text='Button'/>",
-        "</Shell>");
-    XmlObjectInfo button = getObjectByName("button");
-    XmlObjectInfo reference = getObjectByName("reference");
-    //
-    tree.startDrag(button).dragBefore(reference).endDrag();
-    assertXML(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <RowLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button' text='Button'/>",
-        "  <Button wbp:name='reference' text='Reference'/>",
-        "</Shell>");
-  }
+	public void test_tree_MOVE_reorder() throws Exception {
+		openEditor(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <RowLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='reference' text='Reference'/>",
+				"  <Button wbp:name='button' text='Button'/>",
+				"</Shell>");
+		XmlObjectInfo button = getObjectByName("button");
+		XmlObjectInfo reference = getObjectByName("reference");
+		//
+		tree.startDrag(button).dragBefore(reference).endDrag();
+		assertXML(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <RowLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button' text='Button'/>",
+				"  <Button wbp:name='reference' text='Reference'/>",
+				"</Shell>");
+	}
 
-  public void test_tree_MOVE_reparent() throws Exception {
-    openEditor(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <Composite wbp:name='target'>",
-        "    <Composite.layout>",
-        "      <RowLayout/>",
-        "    </Composite.layout>",
-        "  </Composite>",
-        "  <Button wbp:name='button' text='Button'/>",
-        "</Shell>");
-    ControlInfo button = getObjectByName("button");
-    CompositeInfo target = getObjectByName("target");
-    //
-    tree.startDrag(button).dragOn(target).endDrag();
-    assertXML(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <Composite wbp:name='target'>",
-        "    <Composite.layout>",
-        "      <RowLayout/>",
-        "    </Composite.layout>",
-        "    <Button wbp:name='button' text='Button'/>",
-        "  </Composite>",
-        "</Shell>");
-  }
+	public void test_tree_MOVE_reparent() throws Exception {
+		openEditor(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <Composite wbp:name='target'>",
+				"    <Composite.layout>",
+				"      <RowLayout/>",
+				"    </Composite.layout>",
+				"  </Composite>",
+				"  <Button wbp:name='button' text='Button'/>",
+				"</Shell>");
+		ControlInfo button = getObjectByName("button");
+		CompositeInfo target = getObjectByName("target");
+		//
+		tree.startDrag(button).dragOn(target).endDrag();
+		assertXML(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <Composite wbp:name='target'>",
+				"    <Composite.layout>",
+				"      <RowLayout/>",
+				"    </Composite.layout>",
+				"    <Button wbp:name='button' text='Button'/>",
+				"  </Composite>",
+				"</Shell>");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Canvas
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_canvas_CREATE_noNext() throws Exception {
-    CompositeInfo shell =
-        openEditor(
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <RowLayout/>",
-            "  </Shell.layout>",
-            "</Shell>");
-    //
-    loadCreationTool("org.eclipse.swt.widgets.Button");
-    canvas.moveTo(shell, 100, 100).click();
-    assertXML(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <RowLayout/>",
-        "  </Shell.layout>",
-        "  <Button text='New Button'/>",
-        "</Shell>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Canvas
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_canvas_CREATE_noNext() throws Exception {
+		CompositeInfo shell =
+				openEditor(
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <RowLayout/>",
+						"  </Shell.layout>",
+						"</Shell>");
+		//
+		loadCreationTool("org.eclipse.swt.widgets.Button");
+		canvas.moveTo(shell, 100, 100).click();
+		assertXML(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <RowLayout/>",
+				"  </Shell.layout>",
+				"  <Button text='New Button'/>",
+				"</Shell>");
+	}
 
-  public void test_canvas_CREATE_withNext() throws Exception {
-    openEditor(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <RowLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='reference' text='Reference'/>",
-        "</Shell>");
-    XmlObjectInfo reference = getObjectByName("reference");
-    //
-    loadCreationTool("org.eclipse.swt.widgets.Button");
-    canvas.moveTo(reference, 0, 0.5).click();
-    assertXML(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <RowLayout/>",
-        "  </Shell.layout>",
-        "  <Button text='New Button'/>",
-        "  <Button wbp:name='reference' text='Reference'/>",
-        "</Shell>");
-  }
+	public void test_canvas_CREATE_withNext() throws Exception {
+		openEditor(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <RowLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='reference' text='Reference'/>",
+				"</Shell>");
+		XmlObjectInfo reference = getObjectByName("reference");
+		//
+		loadCreationTool("org.eclipse.swt.widgets.Button");
+		canvas.moveTo(reference, 0, 0.5).click();
+		assertXML(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <RowLayout/>",
+				"  </Shell.layout>",
+				"  <Button text='New Button'/>",
+				"  <Button wbp:name='reference' text='Reference'/>",
+				"</Shell>");
+	}
 
-  public void test_canvas_PASTE() throws Exception {
-    CompositeInfo shell =
-        openEditor(
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <RowLayout/>",
-            "  </Shell.layout>",
-            "  <Button wbp:name='button' text='My button'/>",
-            "</Shell>");
-    ControlInfo button = getObjectByName("button");
-    //
-    doCopyPaste(button);
-    canvas.moveTo(shell, 2, 100).click();
-    assertXML(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <RowLayout/>",
-        "  </Shell.layout>",
-        "  <Button text='My button'/>",
-        "  <Button wbp:name='button' text='My button'/>",
-        "</Shell>");
-  }
+	public void test_canvas_PASTE() throws Exception {
+		CompositeInfo shell =
+				openEditor(
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <RowLayout/>",
+						"  </Shell.layout>",
+						"  <Button wbp:name='button' text='My button'/>",
+						"</Shell>");
+		ControlInfo button = getObjectByName("button");
+		//
+		doCopyPaste(button);
+		canvas.moveTo(shell, 2, 100).click();
+		assertXML(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <RowLayout/>",
+				"  </Shell.layout>",
+				"  <Button text='My button'/>",
+				"  <Button wbp:name='button' text='My button'/>",
+				"</Shell>");
+	}
 
-  public void test_canvas_MOVE_reorder() throws Exception {
-    openEditor(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <RowLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='reference' text='Reference'/>",
-        "  <Button wbp:name='button' text='Button'/>",
-        "</Shell>");
-    XmlObjectInfo button = getObjectByName("button");
-    XmlObjectInfo reference = getObjectByName("reference");
-    //
-    canvas.beginMove(button);
-    canvas.dragTo(reference, 0, 0.5).endDrag();
-    assertXML(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <RowLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button' text='Button'/>",
-        "  <Button wbp:name='reference' text='Reference'/>",
-        "</Shell>");
-  }
+	public void test_canvas_MOVE_reorder() throws Exception {
+		openEditor(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <RowLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='reference' text='Reference'/>",
+				"  <Button wbp:name='button' text='Button'/>",
+				"</Shell>");
+		XmlObjectInfo button = getObjectByName("button");
+		XmlObjectInfo reference = getObjectByName("reference");
+		//
+		canvas.beginMove(button);
+		canvas.dragTo(reference, 0, 0.5).endDrag();
+		assertXML(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <RowLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button' text='Button'/>",
+				"  <Button wbp:name='reference' text='Reference'/>",
+				"</Shell>");
+	}
 
-  public void test_canvas_MOVE_reparent() throws Exception {
-    openEditor(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <Composite wbp:name='target'>",
-        "    <Composite.layout>",
-        "      <RowLayout/>",
-        "    </Composite.layout>",
-        "  </Composite>",
-        "  <Button wbp:name='button' text='Button'/>",
-        "</Shell>");
-    ControlInfo button = getObjectByName("button");
-    CompositeInfo target = getObjectByName("target");
-    //
-    canvas.beginMove(button);
-    canvas.dragTo(target, 50, 50).endDrag();
-    assertXML(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <Composite wbp:name='target'>",
-        "    <Composite.layout>",
-        "      <RowLayout/>",
-        "    </Composite.layout>",
-        "    <Button wbp:name='button' text='Button'/>",
-        "  </Composite>",
-        "</Shell>");
-  }
+	public void test_canvas_MOVE_reparent() throws Exception {
+		openEditor(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <Composite wbp:name='target'>",
+				"    <Composite.layout>",
+				"      <RowLayout/>",
+				"    </Composite.layout>",
+				"  </Composite>",
+				"  <Button wbp:name='button' text='Button'/>",
+				"</Shell>");
+		ControlInfo button = getObjectByName("button");
+		CompositeInfo target = getObjectByName("target");
+		//
+		canvas.beginMove(button);
+		canvas.dragTo(target, 50, 50).endDrag();
+		assertXML(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <Composite wbp:name='target'>",
+				"    <Composite.layout>",
+				"      <RowLayout/>",
+				"    </Composite.layout>",
+				"    <Button wbp:name='button' text='Button'/>",
+				"  </Composite>",
+				"</Shell>");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // RESIZE
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_RESIZE_width() throws Exception {
-    openEditor(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <RowLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button' text='Button'/>",
-        "</Shell>");
-    XmlObjectInfo button = getObjectByName("button");
-    //
-    canvas.beginResize(button, IPositionConstants.EAST);
-    canvas.dragTo(button, 150, 0).endDrag();
-    assertXML(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <RowLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button' text='Button'>",
-        "    <Button.layoutData>",
-        "      <RowData width='150'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "</Shell>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// RESIZE
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_RESIZE_width() throws Exception {
+		openEditor(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <RowLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button' text='Button'/>",
+				"</Shell>");
+		XmlObjectInfo button = getObjectByName("button");
+		//
+		canvas.beginResize(button, IPositionConstants.EAST);
+		canvas.dragTo(button, 150, 0).endDrag();
+		assertXML(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <RowLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button' text='Button'>",
+				"    <Button.layoutData>",
+				"      <RowData width='150'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"</Shell>");
+	}
 
-  public void test_RESIZE_height() throws Exception {
-    openEditor(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <RowLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button' text='Button'/>",
-        "</Shell>");
-    XmlObjectInfo button = getObjectByName("button");
-    //
-    canvas.beginResize(button, IPositionConstants.SOUTH);
-    canvas.dragTo(button, 0, 100).endDrag();
-    assertXML(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <RowLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button' text='Button'>",
-        "    <Button.layoutData>",
-        "      <RowData height='100'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "</Shell>");
-  }
+	public void test_RESIZE_height() throws Exception {
+		openEditor(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <RowLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button' text='Button'/>",
+				"</Shell>");
+		XmlObjectInfo button = getObjectByName("button");
+		//
+		canvas.beginResize(button, IPositionConstants.SOUTH);
+		canvas.dragTo(button, 0, 100).endDrag();
+		assertXML(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <RowLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button' text='Button'>",
+				"    <Button.layoutData>",
+				"      <RowData height='100'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"</Shell>");
+	}
 
-  public void test_RESIZE_both() throws Exception {
-    openEditor(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <RowLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button' text='Button'/>",
-        "</Shell>");
-    XmlObjectInfo button = getObjectByName("button");
-    //
-    canvas.beginResize(button, IPositionConstants.SOUTH_EAST);
-    canvas.dragTo(button, 150, 100).endDrag();
-    assertXML(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <RowLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button' text='Button'>",
-        "    <Button.layoutData>",
-        "      <RowData width='150' height='100'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "</Shell>");
-  }
+	public void test_RESIZE_both() throws Exception {
+		openEditor(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <RowLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button' text='Button'/>",
+				"</Shell>");
+		XmlObjectInfo button = getObjectByName("button");
+		//
+		canvas.beginResize(button, IPositionConstants.SOUTH_EAST);
+		canvas.dragTo(button, 150, 100).endDrag();
+		assertXML(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <RowLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button' text='Button'>",
+				"    <Button.layoutData>",
+				"      <RowData width='150' height='100'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"</Shell>");
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/layout/RowLayoutTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/layout/RowLayoutTest.java
index e276cd31a..0b2cf7114 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/layout/RowLayoutTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/layout/RowLayoutTest.java
@@ -24,196 +24,196 @@
  * @author scheglov_ke
  */
 public class RowLayoutTest extends XwtModelTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_setLayout() throws Exception {
-    CompositeInfo shell = parse("<Shell/>");
-    RowLayoutInfo layout = createObject("org.eclipse.swt.layout.RowLayout");
-    shell.setLayout(layout);
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <RowLayout/>",
-        "  </Shell.layout>",
-        "</Shell>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_setLayout() throws Exception {
+		CompositeInfo shell = parse("<Shell/>");
+		RowLayoutInfo layout = createObject("org.eclipse.swt.layout.RowLayout");
+		shell.setLayout(layout);
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <RowLayout/>",
+				"  </Shell.layout>",
+				"</Shell>");
+	}
 
-  public void test_getRowData() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <RowLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    refresh();
-    ControlInfo button = getObjectByName("button");
-    //
-    RowDataInfo rowData = RowLayoutInfo.getRowData(button);
-    assertNotNull(rowData);
-    assertVisible(rowData, false);
-    // getRowData2()
-    {
-      RowLayoutInfo layout = getObjectByName("layout");
-      assertSame(layout.getRowData2(button), rowData);
-    }
-    // virtual initially
-    assertInstanceOf(VirtualLayoutDataCreationSupport.class, rowData.getCreationSupport());
-    // set width/height
-    rowData.setWidth(150);
-    rowData.setHeight(100);
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <RowLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'>",
-        "    <Button.layoutData>",
-        "      <RowData width='150' height='100'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "</Shell>");
-    // applied
-    refresh();
-    assertEquals(150, button.getModelBounds().width);
-    assertEquals(100, button.getModelBounds().height);
-  }
+	public void test_getRowData() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <RowLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		refresh();
+		ControlInfo button = getObjectByName("button");
+		//
+		RowDataInfo rowData = RowLayoutInfo.getRowData(button);
+		assertNotNull(rowData);
+		assertVisible(rowData, false);
+		// getRowData2()
+		{
+			RowLayoutInfo layout = getObjectByName("layout");
+			assertSame(layout.getRowData2(button), rowData);
+		}
+		// virtual initially
+		assertInstanceOf(VirtualLayoutDataCreationSupport.class, rowData.getCreationSupport());
+		// set width/height
+		rowData.setWidth(150);
+		rowData.setHeight(100);
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <RowLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'>",
+				"    <Button.layoutData>",
+				"      <RowData width='150' height='100'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"</Shell>");
+		// applied
+		refresh();
+		assertEquals(150, button.getModelBounds().width);
+		assertEquals(100, button.getModelBounds().height);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // isHorizontal()
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link RowLayoutInfo#isHorizontal()}.
-   */
-  public void test_isHorizontal_default() throws Exception {
-    CompositeInfo shell =
-        parse(
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <RowLayout/>",
-            "  </Shell.layout>",
-            "</Shell>");
-    shell.refresh();
-    RowLayoutInfo layout = (RowLayoutInfo) shell.getLayout();
-    //
-    assertTrue(layout.isHorizontal());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// isHorizontal()
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link RowLayoutInfo#isHorizontal()}.
+	 */
+	public void test_isHorizontal_default() throws Exception {
+		CompositeInfo shell =
+				parse(
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <RowLayout/>",
+						"  </Shell.layout>",
+						"</Shell>");
+		shell.refresh();
+		RowLayoutInfo layout = (RowLayoutInfo) shell.getLayout();
+		//
+		assertTrue(layout.isHorizontal());
+	}
 
-  /**
-   * Test for {@link RowLayoutInfo#isHorizontal()}.
-   */
-  public void test_isHorizontal_true() throws Exception {
-    CompositeInfo shell =
-        parse(
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <RowLayout type='HORIZONTAL'/>",
-            "  </Shell.layout>",
-            "</Shell>");
-    shell.refresh();
-    RowLayoutInfo layout = (RowLayoutInfo) shell.getLayout();
-    //
-    assertTrue(layout.isHorizontal());
-  }
+	/**
+	 * Test for {@link RowLayoutInfo#isHorizontal()}.
+	 */
+	public void test_isHorizontal_true() throws Exception {
+		CompositeInfo shell =
+				parse(
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <RowLayout type='HORIZONTAL'/>",
+						"  </Shell.layout>",
+						"</Shell>");
+		shell.refresh();
+		RowLayoutInfo layout = (RowLayoutInfo) shell.getLayout();
+		//
+		assertTrue(layout.isHorizontal());
+	}
 
-  /**
-   * Test for {@link RowLayoutInfo#isHorizontal()}.
-   */
-  public void test_isHorizontal_false() throws Exception {
-    CompositeInfo shell =
-        parse(
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <RowLayout type='VERTICAL'/>",
-            "  </Shell.layout>",
-            "</Shell>");
-    shell.refresh();
-    RowLayoutInfo layout = (RowLayoutInfo) shell.getLayout();
-    //
-    assertFalse(layout.isHorizontal());
-  }
+	/**
+	 * Test for {@link RowLayoutInfo#isHorizontal()}.
+	 */
+	public void test_isHorizontal_false() throws Exception {
+		CompositeInfo shell =
+				parse(
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <RowLayout type='VERTICAL'/>",
+						"  </Shell.layout>",
+						"</Shell>");
+		shell.refresh();
+		RowLayoutInfo layout = (RowLayoutInfo) shell.getLayout();
+		//
+		assertFalse(layout.isHorizontal());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Clipboard
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_clipboard_copyLayout() throws Exception {
-    CompositeInfo shell =
-        parse(
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <FillLayout/>",
-            "  </Shell.layout>",
-            "  <Composite wbp:name='composite'>",
-            "    <Composite.layout>",
-            "      <RowLayout/>",
-            "    </Composite.layout>",
-            "    <Button text='Button 1'/>",
-            "    <Button text='Button 2'>",
-            "      <Button.layoutData>",
-            "        <RowData width='150' height='100'/>",
-            "      </Button.layoutData>",
-            "    </Button>",
-            "  </Composite>",
-            "</Shell>");
-    refresh();
-    CompositeInfo composite = getObjectByName("composite");
-    //
-    shell.startEdit();
-    {
-      XmlObjectMemento memento = XmlObjectMemento.createMemento(composite);
-      CompositeInfo newComposite = (CompositeInfo) memento.create(shell);
-      shell.getLayout().command_CREATE(newComposite, null);
-      memento.apply();
-    }
-    assertXML(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <Composite wbp:name='composite'>",
-        "    <Composite.layout>",
-        "      <RowLayout/>",
-        "    </Composite.layout>",
-        "    <Button text='Button 1'/>",
-        "    <Button text='Button 2'>",
-        "      <Button.layoutData>",
-        "        <RowData width='150' height='100'/>",
-        "      </Button.layoutData>",
-        "    </Button>",
-        "  </Composite>",
-        "  <Composite>",
-        "    <Composite.layout>",
-        "      <RowLayout/>",
-        "    </Composite.layout>",
-        "    <Button text='Button 1'/>",
-        "    <Button text='Button 2'>",
-        "      <Button.layoutData>",
-        "        <RowData height='100' width='150'/>",
-        "      </Button.layoutData>",
-        "    </Button>",
-        "  </Composite>",
-        "</Shell>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Clipboard
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_clipboard_copyLayout() throws Exception {
+		CompositeInfo shell =
+				parse(
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <FillLayout/>",
+						"  </Shell.layout>",
+						"  <Composite wbp:name='composite'>",
+						"    <Composite.layout>",
+						"      <RowLayout/>",
+						"    </Composite.layout>",
+						"    <Button text='Button 1'/>",
+						"    <Button text='Button 2'>",
+						"      <Button.layoutData>",
+						"        <RowData width='150' height='100'/>",
+						"      </Button.layoutData>",
+						"    </Button>",
+						"  </Composite>",
+						"</Shell>");
+		refresh();
+		CompositeInfo composite = getObjectByName("composite");
+		//
+		shell.startEdit();
+		{
+			XmlObjectMemento memento = XmlObjectMemento.createMemento(composite);
+			CompositeInfo newComposite = (CompositeInfo) memento.create(shell);
+			shell.getLayout().command_CREATE(newComposite, null);
+			memento.apply();
+		}
+		assertXML(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <Composite wbp:name='composite'>",
+				"    <Composite.layout>",
+				"      <RowLayout/>",
+				"    </Composite.layout>",
+				"    <Button text='Button 1'/>",
+				"    <Button text='Button 2'>",
+				"      <Button.layoutData>",
+				"        <RowData width='150' height='100'/>",
+				"      </Button.layoutData>",
+				"    </Button>",
+				"  </Composite>",
+				"  <Composite>",
+				"    <Composite.layout>",
+				"      <RowLayout/>",
+				"    </Composite.layout>",
+				"    <Button text='Button 1'/>",
+				"    <Button text='Button 2'>",
+				"      <Button.layoutData>",
+				"        <RowData height='100' width='150'/>",
+				"      </Button.layoutData>",
+				"    </Button>",
+				"  </Composite>",
+				"</Shell>");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/layout/StackLayoutGefTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/layout/StackLayoutGefTest.java
index e3e843e6c..868502f36 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/layout/StackLayoutGefTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/layout/StackLayoutGefTest.java
@@ -22,285 +22,285 @@
  * @author scheglov_ke
  */
 public class StackLayoutGefTest extends XwtGefTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // CREATE on canvas
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_CREATE_onCanvas_empty() throws Exception {
-    CompositeInfo shell =
-        openEditor(
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <StackLayout wbp:name='layout'/>",
-            "  </Shell.layout>",
-            "</Shell>");
-    //
-    loadButton();
-    canvas.moveTo(shell, 100, 100).click();
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <StackLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Button/>",
-        "</Shell>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// CREATE on canvas
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_CREATE_onCanvas_empty() throws Exception {
+		CompositeInfo shell =
+				openEditor(
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <StackLayout wbp:name='layout'/>",
+						"  </Shell.layout>",
+						"</Shell>");
+		//
+		loadButton();
+		canvas.moveTo(shell, 100, 100).click();
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <StackLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Button/>",
+				"</Shell>");
+	}
 
-  public void test_CREATE_onCanvas_beforeExisting() throws Exception {
-    CompositeInfo shell =
-        openEditor(
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <StackLayout wbp:name='layout'/>",
-            "  </Shell.layout>",
-            "  <Button wbp:name='button_1'/>",
-            "</Shell>");
-    ControlInfo button_1 = getObjectByName("button_1");
-    // select "shell", so "button_1" will be transparent on borders
-    canvas.select(shell);
-    // create new Button
-    loadButton();
-    canvas.moveTo(button_1, 2, 100).click();
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <StackLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Button/>",
-        "  <Button wbp:name='button_1'/>",
-        "</Shell>");
-  }
+	public void test_CREATE_onCanvas_beforeExisting() throws Exception {
+		CompositeInfo shell =
+				openEditor(
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <StackLayout wbp:name='layout'/>",
+						"  </Shell.layout>",
+						"  <Button wbp:name='button_1'/>",
+						"</Shell>");
+		ControlInfo button_1 = getObjectByName("button_1");
+		// select "shell", so "button_1" will be transparent on borders
+		canvas.select(shell);
+		// create new Button
+		loadButton();
+		canvas.moveTo(button_1, 2, 100).click();
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <StackLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Button/>",
+				"  <Button wbp:name='button_1'/>",
+				"</Shell>");
+	}
 
-  public void test_CREATE_onCanvas_afterExisting() throws Exception {
-    CompositeInfo shell =
-        openEditor(
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <StackLayout wbp:name='layout'/>",
-            "  </Shell.layout>",
-            "  <Button wbp:name='button_1'/>",
-            "</Shell>");
-    ControlInfo button_1 = getObjectByName("button_1");
-    // select "shell", so "button_1" will be transparent on borders
-    canvas.select(shell);
-    // create new Button
-    loadButton();
-    canvas.moveTo(button_1, -2, 100).click();
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <StackLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_1'/>",
-        "  <Button/>",
-        "</Shell>");
-  }
+	public void test_CREATE_onCanvas_afterExisting() throws Exception {
+		CompositeInfo shell =
+				openEditor(
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <StackLayout wbp:name='layout'/>",
+						"  </Shell.layout>",
+						"  <Button wbp:name='button_1'/>",
+						"</Shell>");
+		ControlInfo button_1 = getObjectByName("button_1");
+		// select "shell", so "button_1" will be transparent on borders
+		canvas.select(shell);
+		// create new Button
+		loadButton();
+		canvas.moveTo(button_1, -2, 100).click();
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <StackLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_1'/>",
+				"  <Button/>",
+				"</Shell>");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // CREATE in tree
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_CREATE_inTree_empty() throws Exception {
-    CompositeInfo shell =
-        openEditor(
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <StackLayout wbp:name='layout'/>",
-            "  </Shell.layout>",
-            "</Shell>");
-    // create new Button
-    loadButton();
-    tree.moveOn(shell);
-    tree.assertCommandNotNull();
-    tree.click();
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <StackLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Button/>",
-        "</Shell>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// CREATE in tree
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_CREATE_inTree_empty() throws Exception {
+		CompositeInfo shell =
+				openEditor(
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <StackLayout wbp:name='layout'/>",
+						"  </Shell.layout>",
+						"</Shell>");
+		// create new Button
+		loadButton();
+		tree.moveOn(shell);
+		tree.assertCommandNotNull();
+		tree.click();
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <StackLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Button/>",
+				"</Shell>");
+	}
 
-  public void test_CREATE_inTree_beforeExisting() throws Exception {
-    openEditor(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <StackLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_1'/>",
-        "</Shell>");
-    ControlInfo button_1 = getObjectByName("button_1");
-    // create new Button
-    loadButton();
-    tree.moveBefore(button_1).click();
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <StackLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Button/>",
-        "  <Button wbp:name='button_1'/>",
-        "</Shell>");
-  }
+	public void test_CREATE_inTree_beforeExisting() throws Exception {
+		openEditor(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <StackLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_1'/>",
+				"</Shell>");
+		ControlInfo button_1 = getObjectByName("button_1");
+		// create new Button
+		loadButton();
+		tree.moveBefore(button_1).click();
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <StackLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Button/>",
+				"  <Button wbp:name='button_1'/>",
+				"</Shell>");
+	}
 
-  public void test_CREATE_inTree_afterExisting() throws Exception {
-    openEditor(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <StackLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_1'/>",
-        "</Shell>");
-    ControlInfo button_1 = getObjectByName("button_1");
-    // create new Button
-    loadButton();
-    tree.moveAfter(button_1).click();
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <StackLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_1'/>",
-        "  <Button/>",
-        "</Shell>");
-  }
+	public void test_CREATE_inTree_afterExisting() throws Exception {
+		openEditor(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <StackLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_1'/>",
+				"</Shell>");
+		ControlInfo button_1 = getObjectByName("button_1");
+		// create new Button
+		loadButton();
+		tree.moveAfter(button_1).click();
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <StackLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_1'/>",
+				"  <Button/>",
+				"</Shell>");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // MOVE in tree
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_MOVE_inTree() throws Exception {
-    openEditor(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <StackLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_1'/>",
-        "  <Button wbp:name='button_2'/>",
-        "</Shell>");
-    ControlInfo button_1 = getObjectByName("button_1");
-    ControlInfo button_2 = getObjectByName("button_2");
-    //
-    tree.startDrag(button_2).dragBefore(button_1).endDrag();
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <StackLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_2'/>",
-        "  <Button wbp:name='button_1'/>",
-        "</Shell>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// MOVE in tree
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_MOVE_inTree() throws Exception {
+		openEditor(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <StackLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_1'/>",
+				"  <Button wbp:name='button_2'/>",
+				"</Shell>");
+		ControlInfo button_1 = getObjectByName("button_1");
+		ControlInfo button_2 = getObjectByName("button_2");
+		//
+		tree.startDrag(button_2).dragBefore(button_1).endDrag();
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <StackLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_2'/>",
+				"  <Button wbp:name='button_1'/>",
+				"</Shell>");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Navigation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_navigation_next() throws Exception {
-    openEditor(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <StackLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_1'/>",
-        "  <Button wbp:name='button_2'/>",
-        "  <Button wbp:name='button_3'/>",
-        "</Shell>");
-    ControlInfo button_1 = getObjectByName("button_1");
-    ControlInfo button_2 = getObjectByName("button_2");
-    ControlInfo button_3 = getObjectByName("button_3");
-    // initially "button_1" visible
-    canvas.assertNotNullEditPart(button_1);
-    canvas.assertNullEditPart(button_2);
-    canvas.assertNullEditPart(button_3);
-    // click "next", select "button_2"
-    canvas.select(button_1);
-    navigateNext(button_1);
-    canvas.assertNullEditPart(button_1);
-    canvas.assertNotNullEditPart(button_2);
-    canvas.assertNullEditPart(button_3);
-    // click "next", select "button_3"
-    navigateNext(button_2);
-    canvas.assertNullEditPart(button_1);
-    canvas.assertNullEditPart(button_2);
-    canvas.assertNotNullEditPart(button_3);
-    // click "next", select "button_1"
-    navigateNext(button_3);
-    canvas.assertNotNullEditPart(button_1);
-    canvas.assertNullEditPart(button_2);
-    canvas.assertNullEditPart(button_3);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Navigation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_navigation_next() throws Exception {
+		openEditor(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <StackLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_1'/>",
+				"  <Button wbp:name='button_2'/>",
+				"  <Button wbp:name='button_3'/>",
+				"</Shell>");
+		ControlInfo button_1 = getObjectByName("button_1");
+		ControlInfo button_2 = getObjectByName("button_2");
+		ControlInfo button_3 = getObjectByName("button_3");
+		// initially "button_1" visible
+		canvas.assertNotNullEditPart(button_1);
+		canvas.assertNullEditPart(button_2);
+		canvas.assertNullEditPart(button_3);
+		// click "next", select "button_2"
+		canvas.select(button_1);
+		navigateNext(button_1);
+		canvas.assertNullEditPart(button_1);
+		canvas.assertNotNullEditPart(button_2);
+		canvas.assertNullEditPart(button_3);
+		// click "next", select "button_3"
+		navigateNext(button_2);
+		canvas.assertNullEditPart(button_1);
+		canvas.assertNullEditPart(button_2);
+		canvas.assertNotNullEditPart(button_3);
+		// click "next", select "button_1"
+		navigateNext(button_3);
+		canvas.assertNotNullEditPart(button_1);
+		canvas.assertNullEditPart(button_2);
+		canvas.assertNullEditPart(button_3);
+	}
 
-  public void test_navigation_prev() throws Exception {
-    openEditor(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <StackLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_1'/>",
-        "  <Button wbp:name='button_2'/>",
-        "  <Button wbp:name='button_3'/>",
-        "</Shell>");
-    ControlInfo button_1 = getObjectByName("button_1");
-    ControlInfo button_2 = getObjectByName("button_2");
-    ControlInfo button_3 = getObjectByName("button_3");
-    // initially "button_1" visible
-    canvas.assertNotNullEditPart(button_1);
-    canvas.assertNullEditPart(button_2);
-    canvas.assertNullEditPart(button_3);
-    // click "prev", select "button_3"
-    canvas.select(button_1);
-    navigatePrev(button_1);
-    canvas.assertNullEditPart(button_1);
-    canvas.assertNullEditPart(button_2);
-    canvas.assertNotNullEditPart(button_3);
-    // click "prev", select "button_2"
-    navigatePrev(button_3);
-    canvas.assertNullEditPart(button_1);
-    canvas.assertNotNullEditPart(button_2);
-    canvas.assertNullEditPart(button_3);
-    // click "prev", select "button_1"
-    navigatePrev(button_2);
-    canvas.assertNotNullEditPart(button_1);
-    canvas.assertNullEditPart(button_2);
-    canvas.assertNullEditPart(button_3);
-  }
+	public void test_navigation_prev() throws Exception {
+		openEditor(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <StackLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_1'/>",
+				"  <Button wbp:name='button_2'/>",
+				"  <Button wbp:name='button_3'/>",
+				"</Shell>");
+		ControlInfo button_1 = getObjectByName("button_1");
+		ControlInfo button_2 = getObjectByName("button_2");
+		ControlInfo button_3 = getObjectByName("button_3");
+		// initially "button_1" visible
+		canvas.assertNotNullEditPart(button_1);
+		canvas.assertNullEditPart(button_2);
+		canvas.assertNullEditPart(button_3);
+		// click "prev", select "button_3"
+		canvas.select(button_1);
+		navigatePrev(button_1);
+		canvas.assertNullEditPart(button_1);
+		canvas.assertNullEditPart(button_2);
+		canvas.assertNotNullEditPart(button_3);
+		// click "prev", select "button_2"
+		navigatePrev(button_3);
+		canvas.assertNullEditPart(button_1);
+		canvas.assertNotNullEditPart(button_2);
+		canvas.assertNullEditPart(button_3);
+		// click "prev", select "button_1"
+		navigatePrev(button_2);
+		canvas.assertNotNullEditPart(button_1);
+		canvas.assertNullEditPart(button_2);
+		canvas.assertNullEditPart(button_3);
+	}
 
-  private void navigateNext(ControlInfo component) {
-    canvas.moveTo(component, -3 - 1, 0).click();
-  }
+	private void navigateNext(ControlInfo component) {
+		canvas.moveTo(component, -3 - 1, 0).click();
+	}
 
-  private void navigatePrev(ControlInfo component) {
-    canvas.moveTo(component, -3 - StackLayoutNavigationFigure.WIDTH - 1, 0).click();
-  }
+	private void navigatePrev(ControlInfo component) {
+		canvas.moveTo(component, -3 - StackLayoutNavigationFigure.WIDTH - 1, 0).click();
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/layout/StackLayoutTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/layout/StackLayoutTest.java
index 723696b4c..e3061ee24 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/layout/StackLayoutTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/layout/StackLayoutTest.java
@@ -28,386 +28,386 @@
  * @author scheglov_ke
  */
 public class StackLayoutTest extends XwtModelTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_parse() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <StackLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <StackLayout>",
-        "  <Button wbp:name='button'>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_parse() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <StackLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <StackLayout>",
+				"  <Button wbp:name='button'>");
+	}
 
-  public void test_parseEmpty() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <StackLayout/>",
-        "  </Shell.layout>",
-        "</Shell>");
-    refresh();
-  }
+	public void test_parseEmpty() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <StackLayout/>",
+				"  </Shell.layout>",
+				"</Shell>");
+		refresh();
+	}
 
-  /**
-   * During setting {@link StackLayout} there is time when we don't have yet container.
-   */
-  public void test_setLayout_wasGridLayout() throws Exception {
-    CompositeInfo shell =
-        parse(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <RowLayout/>",
-            "  </Shell.layout>",
-            "</Shell>");
-    refresh();
-    //
-    StackLayoutInfo layout = createObject("org.eclipse.swt.custom.StackLayout");
-    shell.setLayout(layout);
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <StackLayout/>",
-        "  </Shell.layout>",
-        "</Shell>");
-    assertActiveControl(layout, null);
-  }
+	/**
+	 * During setting {@link StackLayout} there is time when we don't have yet container.
+	 */
+	public void test_setLayout_wasGridLayout() throws Exception {
+		CompositeInfo shell =
+				parse(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <RowLayout/>",
+						"  </Shell.layout>",
+						"</Shell>");
+		refresh();
+		//
+		StackLayoutInfo layout = createObject("org.eclipse.swt.custom.StackLayout");
+		shell.setLayout(layout);
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <StackLayout/>",
+				"  </Shell.layout>",
+				"</Shell>");
+		assertActiveControl(layout, null);
+	}
 
-  /**
-   * Only "topControl" should be visible on design canvas.
-   */
-  public void test_visibilityGraphical() throws Exception {
-    CompositeInfo shell =
-        parse(
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <StackLayout wbp:name='layout'/>",
-            "  </Shell.layout>",
-            "  <Button wbp:name='button_1'/>",
-            "  <Button wbp:name='button_2'/>",
-            "  <Button wbp:name='button_3'/>",
-            "</Shell>");
-    refresh();
-    StackLayoutInfo layout = getObjectByName("layout");
-    ControlInfo button_1 = getObjectByName("button_1");
-    // "button_1" is top Control
-    assertActiveControl(layout, button_1);
-    // only "button_1" is in "graphical children"
-    {
-      List<ObjectInfo> children = shell.getPresentation().getChildrenGraphical();
-      assertThat(children).containsExactly(button_1);
-    }
-  }
+	/**
+	 * Only "topControl" should be visible on design canvas.
+	 */
+	public void test_visibilityGraphical() throws Exception {
+		CompositeInfo shell =
+				parse(
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <StackLayout wbp:name='layout'/>",
+						"  </Shell.layout>",
+						"  <Button wbp:name='button_1'/>",
+						"  <Button wbp:name='button_2'/>",
+						"  <Button wbp:name='button_3'/>",
+						"</Shell>");
+		refresh();
+		StackLayoutInfo layout = getObjectByName("layout");
+		ControlInfo button_1 = getObjectByName("button_1");
+		// "button_1" is top Control
+		assertActiveControl(layout, button_1);
+		// only "button_1" is in "graphical children"
+		{
+			List<ObjectInfo> children = shell.getPresentation().getChildrenGraphical();
+			assertThat(children).containsExactly(button_1);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Flow container
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_flowContainer_CREATE_asFirst() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <StackLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "</Shell>");
-    refresh();
-    StackLayoutInfo layout = getObjectByName("layout");
-    assertTrue(layout.isHorizontal());
-    //
-    ControlInfo newButton = createButton();
-    flowContainer_CREATE(layout, newButton, null);
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <StackLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Button/>",
-        "</Shell>");
-    assertActiveControl(layout, newButton);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Flow container
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_flowContainer_CREATE_asFirst() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <StackLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"</Shell>");
+		refresh();
+		StackLayoutInfo layout = getObjectByName("layout");
+		assertTrue(layout.isHorizontal());
+		//
+		ControlInfo newButton = createButton();
+		flowContainer_CREATE(layout, newButton, null);
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <StackLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Button/>",
+				"</Shell>");
+		assertActiveControl(layout, newButton);
+	}
 
-  public void test_flowContainer_CREATE_andActivate() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <StackLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='existingButton'/>",
-        "</Shell>");
-    refresh();
-    StackLayoutInfo layout = getObjectByName("layout");
-    ControlInfo existingButton = getObjectByName("existingButton");
-    // initially "button_1" is active
-    assertActiveControl(layout, existingButton);
-    //
-    ControlInfo newButton = createButton();
-    flowContainer_CREATE(layout, newButton, null);
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <StackLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='existingButton'/>",
-        "  <Button/>",
-        "</Shell>");
-    assertActiveControl(layout, newButton);
-  }
+	public void test_flowContainer_CREATE_andActivate() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <StackLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='existingButton'/>",
+				"</Shell>");
+		refresh();
+		StackLayoutInfo layout = getObjectByName("layout");
+		ControlInfo existingButton = getObjectByName("existingButton");
+		// initially "button_1" is active
+		assertActiveControl(layout, existingButton);
+		//
+		ControlInfo newButton = createButton();
+		flowContainer_CREATE(layout, newButton, null);
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <StackLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='existingButton'/>",
+				"  <Button/>",
+				"</Shell>");
+		assertActiveControl(layout, newButton);
+	}
 
-  public void test_flowContainer_MOVE() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <StackLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_1'/>",
-        "  <Button wbp:name='button_2'/>",
-        "</Shell>");
-    refresh();
-    StackLayoutInfo layout = getObjectByName("layout");
-    ControlInfo button_1 = getObjectByName("button_1");
-    // initially
-    assertActiveControl(layout, button_1);
-    // move "button_1"
-    flowContainer_MOVE(layout, button_1, null);
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <StackLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_2'/>",
-        "  <Button wbp:name='button_1'/>",
-        "</Shell>");
-    assertActiveControl(layout, button_1);
-  }
+	public void test_flowContainer_MOVE() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <StackLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_1'/>",
+				"  <Button wbp:name='button_2'/>",
+				"</Shell>");
+		refresh();
+		StackLayoutInfo layout = getObjectByName("layout");
+		ControlInfo button_1 = getObjectByName("button_1");
+		// initially
+		assertActiveControl(layout, button_1);
+		// move "button_1"
+		flowContainer_MOVE(layout, button_1, null);
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <StackLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_2'/>",
+				"  <Button wbp:name='button_1'/>",
+				"</Shell>");
+		assertActiveControl(layout, button_1);
+	}
 
-  public void test_flowContainer_ADD() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <RowLayout/>",
-        "  </Shell.layout>",
-        "  <Composite>",
-        "    <Composite.layout>",
-        "      <StackLayout wbp:name='layout'/>",
-        "    </Composite.layout>",
-        "  </Composite>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    refresh();
-    StackLayoutInfo stackLayout = getObjectByName("layout");
-    ControlInfo button = getObjectByName("button");
-    //
-    flowContainer_MOVE(stackLayout, button, null);
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <RowLayout/>",
-        "  </Shell.layout>",
-        "  <Composite>",
-        "    <Composite.layout>",
-        "      <StackLayout wbp:name='layout'/>",
-        "    </Composite.layout>",
-        "    <Button wbp:name='button'/>",
-        "  </Composite>",
-        "</Shell>");
-    assertActiveControl(stackLayout, button);
-  }
+	public void test_flowContainer_ADD() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <RowLayout/>",
+				"  </Shell.layout>",
+				"  <Composite>",
+				"    <Composite.layout>",
+				"      <StackLayout wbp:name='layout'/>",
+				"    </Composite.layout>",
+				"  </Composite>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		refresh();
+		StackLayoutInfo stackLayout = getObjectByName("layout");
+		ControlInfo button = getObjectByName("button");
+		//
+		flowContainer_MOVE(stackLayout, button, null);
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <RowLayout/>",
+				"  </Shell.layout>",
+				"  <Composite>",
+				"    <Composite.layout>",
+				"      <StackLayout wbp:name='layout'/>",
+				"    </Composite.layout>",
+				"    <Button wbp:name='button'/>",
+				"  </Composite>",
+				"</Shell>");
+		assertActiveControl(stackLayout, button);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Clipboard
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_clipboard() throws Exception {
-    final CompositeInfo shell =
-        parse(
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <RowLayout/>",
-            "  </Shell.layout>",
-            "  <Composite wbp:name='composite'>",
-            "    <Composite.layout>",
-            "      <StackLayout wbp:name='layout'/>",
-            "    </Composite.layout>",
-            "    <Button text='1'/>",
-            "    <Button text='2'/>",
-            "  </Composite>",
-            "</Shell>");
-    refresh();
-    // do copy/paste
-    {
-      CompositeInfo composite = (CompositeInfo) getObjectByName("composite");
-      doCopyPaste(composite, new PasteProcedure<ControlInfo>() {
-        @Override
-        public void run(ControlInfo copy) throws Exception {
-          shell.getLayout().command_CREATE(copy, null);
-        }
-      });
-    }
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <RowLayout/>",
-        "  </Shell.layout>",
-        "  <Composite wbp:name='composite'>",
-        "    <Composite.layout>",
-        "      <StackLayout wbp:name='layout'/>",
-        "    </Composite.layout>",
-        "    <Button text='1'/>",
-        "    <Button text='2'/>",
-        "  </Composite>",
-        "  <Composite>",
-        "    <Composite.layout>",
-        "      <StackLayout/>",
-        "    </Composite.layout>",
-        "    <Button text='1'/>",
-        "    <Button text='2'/>",
-        "  </Composite>",
-        "</Shell>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Clipboard
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_clipboard() throws Exception {
+		final CompositeInfo shell =
+				parse(
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <RowLayout/>",
+						"  </Shell.layout>",
+						"  <Composite wbp:name='composite'>",
+						"    <Composite.layout>",
+						"      <StackLayout wbp:name='layout'/>",
+						"    </Composite.layout>",
+						"    <Button text='1'/>",
+						"    <Button text='2'/>",
+						"  </Composite>",
+						"</Shell>");
+		refresh();
+		// do copy/paste
+		{
+			CompositeInfo composite = (CompositeInfo) getObjectByName("composite");
+			doCopyPaste(composite, new PasteProcedure<ControlInfo>() {
+				@Override
+				public void run(ControlInfo copy) throws Exception {
+					shell.getLayout().command_CREATE(copy, null);
+				}
+			});
+		}
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <RowLayout/>",
+				"  </Shell.layout>",
+				"  <Composite wbp:name='composite'>",
+				"    <Composite.layout>",
+				"      <StackLayout wbp:name='layout'/>",
+				"    </Composite.layout>",
+				"    <Button text='1'/>",
+				"    <Button text='2'/>",
+				"  </Composite>",
+				"  <Composite>",
+				"    <Composite.layout>",
+				"      <StackLayout/>",
+				"    </Composite.layout>",
+				"    <Button text='1'/>",
+				"    <Button text='2'/>",
+				"  </Composite>",
+				"</Shell>");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // activeControl
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_activeControl() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <StackLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_1'/>",
-        "  <Button wbp:name='button_2'/>",
-        "</Shell>");
-    refresh();
-    StackLayoutInfo layout = getObjectByName("layout");
-    ControlInfo button_1 = getObjectByName("button_1");
-    ControlInfo button_2 = getObjectByName("button_2");
-    // initially "button_1" is active
-    assertActiveControl(layout, button_1);
-    // notify about "button_2"
-    {
-      boolean shouldRefresh = notifySelecting(button_2);
-      assertTrue(shouldRefresh);
-      refresh();
-      // now "button_2" is active
-      assertActiveControl(layout, button_2);
-    }
-    // second notification about "button_2" does not cause refresh()
-    {
-      boolean shouldRefresh = notifySelecting(button_2);
-      assertFalse(shouldRefresh);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// activeControl
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_activeControl() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <StackLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_1'/>",
+				"  <Button wbp:name='button_2'/>",
+				"</Shell>");
+		refresh();
+		StackLayoutInfo layout = getObjectByName("layout");
+		ControlInfo button_1 = getObjectByName("button_1");
+		ControlInfo button_2 = getObjectByName("button_2");
+		// initially "button_1" is active
+		assertActiveControl(layout, button_1);
+		// notify about "button_2"
+		{
+			boolean shouldRefresh = notifySelecting(button_2);
+			assertTrue(shouldRefresh);
+			refresh();
+			// now "button_2" is active
+			assertActiveControl(layout, button_2);
+		}
+		// second notification about "button_2" does not cause refresh()
+		{
+			boolean shouldRefresh = notifySelecting(button_2);
+			assertFalse(shouldRefresh);
+		}
+	}
 
-  public void test_activeControl_whenDelete() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <StackLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_1'/>",
-        "  <Button wbp:name='button_2'/>",
-        "  <Button wbp:name='button_3'/>",
-        "</Shell>");
-    refresh();
-    StackLayoutInfo layout = getObjectByName("layout");
-    ControlInfo button_1 = getObjectByName("button_1");
-    ControlInfo button_2 = getObjectByName("button_2");
-    ControlInfo button_3 = getObjectByName("button_3");
-    // initially "button_1" is active
-    assertActiveControl(layout, button_1);
-    // delete "button_1", so "button_2" should be activated
-    button_1.delete();
-    assertActiveControl(layout, button_2);
-    // delete "button_2", so "button_3" should be activated
-    button_2.delete();
-    assertActiveControl(layout, button_3);
-    // delete "button_3", so no active
-    button_3.delete();
-    assertActiveControl(layout, null);
-  }
+	public void test_activeControl_whenDelete() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <StackLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_1'/>",
+				"  <Button wbp:name='button_2'/>",
+				"  <Button wbp:name='button_3'/>",
+				"</Shell>");
+		refresh();
+		StackLayoutInfo layout = getObjectByName("layout");
+		ControlInfo button_1 = getObjectByName("button_1");
+		ControlInfo button_2 = getObjectByName("button_2");
+		ControlInfo button_3 = getObjectByName("button_3");
+		// initially "button_1" is active
+		assertActiveControl(layout, button_1);
+		// delete "button_1", so "button_2" should be activated
+		button_1.delete();
+		assertActiveControl(layout, button_2);
+		// delete "button_2", so "button_3" should be activated
+		button_2.delete();
+		assertActiveControl(layout, button_3);
+		// delete "button_3", so no active
+		button_3.delete();
+		assertActiveControl(layout, null);
+	}
 
-  /**
-   * Test for {@link StackLayoutInfo#getPrevControl()}, {@link StackLayoutInfo#getNextControl()} and
-   * {@link StackLayoutInfo#show(ControlInfo)}.
-   */
-  public void test_activeControl_showPrevNext() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <StackLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_1'/>",
-        "  <Button wbp:name='button_2'/>",
-        "  <Button wbp:name='button_3'/>",
-        "</Shell>");
-    refresh();
-    StackLayoutInfo layout = getObjectByName("layout");
-    ControlInfo button_1 = getObjectByName("button_1");
-    ControlInfo button_2 = getObjectByName("button_2");
-    ControlInfo button_3 = getObjectByName("button_3");
-    // initially "button_1" is active
-    assertActiveControl(layout, button_1);
-    // show previous
-    assertSame(button_3, layout.getPrevControl());
-    layout.show(button_3);
-    assertActiveControl(layout, button_3);
-    // show next
-    assertSame(button_1, layout.getNextControl());
-    layout.show(button_1);
-    assertActiveControl(layout, button_1);
-    // show next again
-    assertSame(button_2, layout.getNextControl());
-    layout.show(button_2);
-    assertActiveControl(layout, button_2);
-  }
+	/**
+	 * Test for {@link StackLayoutInfo#getPrevControl()}, {@link StackLayoutInfo#getNextControl()} and
+	 * {@link StackLayoutInfo#show(ControlInfo)}.
+	 */
+	public void test_activeControl_showPrevNext() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <StackLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_1'/>",
+				"  <Button wbp:name='button_2'/>",
+				"  <Button wbp:name='button_3'/>",
+				"</Shell>");
+		refresh();
+		StackLayoutInfo layout = getObjectByName("layout");
+		ControlInfo button_1 = getObjectByName("button_1");
+		ControlInfo button_2 = getObjectByName("button_2");
+		ControlInfo button_3 = getObjectByName("button_3");
+		// initially "button_1" is active
+		assertActiveControl(layout, button_1);
+		// show previous
+		assertSame(button_3, layout.getPrevControl());
+		layout.show(button_3);
+		assertActiveControl(layout, button_3);
+		// show next
+		assertSame(button_1, layout.getNextControl());
+		layout.show(button_1);
+		assertActiveControl(layout, button_1);
+		// show next again
+		assertSame(button_2, layout.getNextControl());
+		layout.show(button_2);
+		assertActiveControl(layout, button_2);
+	}
 
-  private static void assertActiveControl(StackLayoutInfo layout, ControlInfo expected)
-      throws Exception {
-    ControlInfo actualControl = layout.getActiveControl();
-    assertSame(expected, actualControl);
-  }
+	private static void assertActiveControl(StackLayoutInfo layout, ControlInfo expected)
+			throws Exception {
+		ControlInfo actualControl = layout.getActiveControl();
+		assertSame(expected, actualControl);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/layout/grid/GridDataTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/layout/grid/GridDataTest.java
index b283b0526..b12d6d6c3 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/layout/grid/GridDataTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/layout/grid/GridDataTest.java
@@ -31,920 +31,920 @@
  * @author scheglov_ke
  */
 public class GridDataTest extends XwtModelTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Set alignment
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link GridDataInfo#setHorizontalAlignment(int)}.
-   */
-  public void test_setHorizontalAlignment() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    refresh();
-    ControlInfo button = getObjectByName("button");
-    GridDataInfo gridData = getGridData(button);
-    // initial state
-    assertEquals(SWT.LEFT, gridData.getHorizontalAlignment());
-    // SWT.LEFT is default alignment, so nothing should be changed
-    gridData.setHorizontalAlignment(SWT.LEFT);
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    // SWT.RIGHT
-    gridData.setHorizontalAlignment(SWT.RIGHT);
-    assertEquals(SWT.RIGHT, gridData.getHorizontalAlignment());
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'>",
-        "    <Button.layoutData>",
-        "      <GridData horizontalAlignment='RIGHT'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "</Shell>");
-    // SWT.LEFT is default alignment, so GridData removed
-    gridData.setHorizontalAlignment(SWT.LEFT);
-    assertEquals(SWT.LEFT, gridData.getHorizontalAlignment());
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Set alignment
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link GridDataInfo#setHorizontalAlignment(int)}.
+	 */
+	public void test_setHorizontalAlignment() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		refresh();
+		ControlInfo button = getObjectByName("button");
+		GridDataInfo gridData = getGridData(button);
+		// initial state
+		assertEquals(SWT.LEFT, gridData.getHorizontalAlignment());
+		// SWT.LEFT is default alignment, so nothing should be changed
+		gridData.setHorizontalAlignment(SWT.LEFT);
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		// SWT.RIGHT
+		gridData.setHorizontalAlignment(SWT.RIGHT);
+		assertEquals(SWT.RIGHT, gridData.getHorizontalAlignment());
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'>",
+				"    <Button.layoutData>",
+				"      <GridData horizontalAlignment='RIGHT'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"</Shell>");
+		// SWT.LEFT is default alignment, so GridData removed
+		gridData.setHorizontalAlignment(SWT.LEFT);
+		assertEquals(SWT.LEFT, gridData.getHorizontalAlignment());
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+	}
 
-  /**
-   * Test for {@link GridDataInfo#setVerticalAlignment(int)}.
-   */
-  public void test_setVerticalAlignment() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    refresh();
-    ControlInfo button = getObjectByName("button");
-    GridDataInfo gridData = getGridData(button);
-    // initial state
-    assertEquals(SWT.CENTER, gridData.getVerticalAlignment());
-    // SWT.CENTER is default alignment, so nothing should be changed
-    gridData.setVerticalAlignment(SWT.CENTER);
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    // SWT.BOTTOM
-    gridData.setVerticalAlignment(SWT.BOTTOM);
-    assertEquals(SWT.BOTTOM, gridData.getVerticalAlignment());
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'>",
-        "    <Button.layoutData>",
-        "      <GridData verticalAlignment='BOTTOM'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "</Shell>");
-    // SWT.CENTER is default alignment, so GridData removed
-    gridData.setVerticalAlignment(SWT.CENTER);
-    assertEquals(SWT.CENTER, gridData.getVerticalAlignment());
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-  }
+	/**
+	 * Test for {@link GridDataInfo#setVerticalAlignment(int)}.
+	 */
+	public void test_setVerticalAlignment() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		refresh();
+		ControlInfo button = getObjectByName("button");
+		GridDataInfo gridData = getGridData(button);
+		// initial state
+		assertEquals(SWT.CENTER, gridData.getVerticalAlignment());
+		// SWT.CENTER is default alignment, so nothing should be changed
+		gridData.setVerticalAlignment(SWT.CENTER);
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		// SWT.BOTTOM
+		gridData.setVerticalAlignment(SWT.BOTTOM);
+		assertEquals(SWT.BOTTOM, gridData.getVerticalAlignment());
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'>",
+				"    <Button.layoutData>",
+				"      <GridData verticalAlignment='BOTTOM'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"</Shell>");
+		// SWT.CENTER is default alignment, so GridData removed
+		gridData.setVerticalAlignment(SWT.CENTER);
+		assertEquals(SWT.CENTER, gridData.getVerticalAlignment());
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Images
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_getSmallAlignmentImage() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    refresh();
-    ControlInfo button = getObjectByName("button");
-    GridDataInfo gridData = getGridData(button);
-    //
-    check_getSmallAlignmentImage(gridData, true, new int[]{
-        SWT.LEFT,
-        SWT.CENTER,
-        SWT.RIGHT,
-        SWT.FILL}, new String[]{"left.gif", "center.gif", "right.gif", "fill.gif"});
-    check_getSmallAlignmentImage(gridData, false, new int[]{
-        SWT.TOP,
-        SWT.CENTER,
-        SWT.BOTTOM,
-        SWT.FILL}, new String[]{"top.gif", "center.gif", "bottom.gif", "fill.gif"});
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Images
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_getSmallAlignmentImage() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		refresh();
+		ControlInfo button = getObjectByName("button");
+		GridDataInfo gridData = getGridData(button);
+		//
+		check_getSmallAlignmentImage(gridData, true, new int[]{
+				SWT.LEFT,
+				SWT.CENTER,
+				SWT.RIGHT,
+				SWT.FILL}, new String[]{"left.gif", "center.gif", "right.gif", "fill.gif"});
+		check_getSmallAlignmentImage(gridData, false, new int[]{
+				SWT.TOP,
+				SWT.CENTER,
+				SWT.BOTTOM,
+				SWT.FILL}, new String[]{"top.gif", "center.gif", "bottom.gif", "fill.gif"});
+	}
 
-  private static void check_getSmallAlignmentImage(GridDataInfo gridData,
-      boolean horizontal,
-      int[] alignments,
-      String[] paths) throws Exception {
-    for (int i = 0; i < alignments.length; i++) {
-      int alignment = alignments[i];
-      Image expectedImage = GridImages.getImage((horizontal ? "h/" : "v/") + paths[i]);
-      if (horizontal) {
-        gridData.setHorizontalAlignment(alignment);
-      } else {
-        gridData.setVerticalAlignment(alignment);
-      }
-      assertSame(expectedImage, gridData.getSmallAlignmentImage(horizontal));
-    }
-  }
+	private static void check_getSmallAlignmentImage(GridDataInfo gridData,
+			boolean horizontal,
+			int[] alignments,
+			String[] paths) throws Exception {
+		for (int i = 0; i < alignments.length; i++) {
+			int alignment = alignments[i];
+			Image expectedImage = GridImages.getImage((horizontal ? "h/" : "v/") + paths[i]);
+			if (horizontal) {
+				gridData.setHorizontalAlignment(alignment);
+			} else {
+				gridData.setVerticalAlignment(alignment);
+			}
+			assertSame(expectedImage, gridData.getSmallAlignmentImage(horizontal));
+		}
+	}
 
-  /**
-   * Set invalid alignment and ask image.
-   */
-  public void test_getSmallAlignmentImage_invalid() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'>",
-        "    <Button.layoutData>",
-        "      <GridData horizontalAlignment='-1' verticalAlignment='-1'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "</Shell>");
-    refresh();
-    ControlInfo button = getObjectByName("button");
-    //
-    GridDataInfo gridData = getGridData(button);
-    assertSame(null, gridData.getSmallAlignmentImage(true));
-    assertSame(null, gridData.getSmallAlignmentImage(false));
-  }
+	/**
+	 * Set invalid alignment and ask image.
+	 */
+	public void test_getSmallAlignmentImage_invalid() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'>",
+				"    <Button.layoutData>",
+				"      <GridData horizontalAlignment='-1' verticalAlignment='-1'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"</Shell>");
+		refresh();
+		ControlInfo button = getObjectByName("button");
+		//
+		GridDataInfo gridData = getGridData(button);
+		assertSame(null, gridData.getSmallAlignmentImage(true));
+		assertSame(null, gridData.getSmallAlignmentImage(false));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Size hint
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link GridDataInfo#getWidthHint()} and {@link GridDataInfo#setWidthHint(int)}.
-   */
-  public void test_sizeHint_width() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    refresh();
-    ControlInfo button = getObjectByName("button");
-    GridDataInfo gridData = GridLayoutInfo.getGridData(button);
-    // no hint initially
-    assertEquals(-1, gridData.getWidthHint());
-    // set hint
-    gridData.setWidthHint(200);
-    assertEquals(200, gridData.getWidthHint());
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'>",
-        "    <Button.layoutData>",
-        "      <GridData widthHint='200'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "</Shell>");
-    // remove hint
-    gridData.setWidthHint(-1);
-    assertEquals(-1, gridData.getWidthHint());
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Size hint
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link GridDataInfo#getWidthHint()} and {@link GridDataInfo#setWidthHint(int)}.
+	 */
+	public void test_sizeHint_width() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		refresh();
+		ControlInfo button = getObjectByName("button");
+		GridDataInfo gridData = GridLayoutInfo.getGridData(button);
+		// no hint initially
+		assertEquals(-1, gridData.getWidthHint());
+		// set hint
+		gridData.setWidthHint(200);
+		assertEquals(200, gridData.getWidthHint());
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'>",
+				"    <Button.layoutData>",
+				"      <GridData widthHint='200'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"</Shell>");
+		// remove hint
+		gridData.setWidthHint(-1);
+		assertEquals(-1, gridData.getWidthHint());
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+	}
 
-  /**
-   * Test for {@link GridDataInfo#getHeightHint()} and {@link GridDataInfo#setHeightHint(int)}.
-   */
-  public void test_sizeHint_height() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    refresh();
-    ControlInfo button = getObjectByName("button");
-    GridDataInfo gridData = GridLayoutInfo.getGridData(button);
-    // no hint initially
-    assertEquals(-1, gridData.getHeightHint());
-    // set hint
-    gridData.setHeightHint(200);
-    assertEquals(200, gridData.getHeightHint());
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'>",
-        "    <Button.layoutData>",
-        "      <GridData heightHint='200'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "</Shell>");
-    // remove hint
-    gridData.setHeightHint(-1);
-    assertEquals(-1, gridData.getHeightHint());
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-  }
+	/**
+	 * Test for {@link GridDataInfo#getHeightHint()} and {@link GridDataInfo#setHeightHint(int)}.
+	 */
+	public void test_sizeHint_height() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		refresh();
+		ControlInfo button = getObjectByName("button");
+		GridDataInfo gridData = GridLayoutInfo.getGridData(button);
+		// no hint initially
+		assertEquals(-1, gridData.getHeightHint());
+		// set hint
+		gridData.setHeightHint(200);
+		assertEquals(200, gridData.getHeightHint());
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'>",
+				"    <Button.layoutData>",
+				"      <GridData heightHint='200'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"</Shell>");
+		// remove hint
+		gridData.setHeightHint(-1);
+		assertEquals(-1, gridData.getHeightHint());
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Grab
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_grabHorizontal() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'>",
-        "    <Button.layoutData>",
-        "      <GridData grabExcessHorizontalSpace='true'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "</Shell>");
-    refresh();
-    ControlInfo button = getObjectByName("button");
-    // initial state, set new
-    {
-      GridDataInfo gridData = getGridData(button);
-      assertTrue(gridData.getHorizontalGrab());
-      gridData.setHorizontalGrab(false);
-    }
-    // check new state
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    {
-      GridDataInfo gridData = getGridData(button);
-      assertFalse(gridData.getHorizontalGrab());
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Grab
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_grabHorizontal() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'>",
+				"    <Button.layoutData>",
+				"      <GridData grabExcessHorizontalSpace='true'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"</Shell>");
+		refresh();
+		ControlInfo button = getObjectByName("button");
+		// initial state, set new
+		{
+			GridDataInfo gridData = getGridData(button);
+			assertTrue(gridData.getHorizontalGrab());
+			gridData.setHorizontalGrab(false);
+		}
+		// check new state
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		{
+			GridDataInfo gridData = getGridData(button);
+			assertFalse(gridData.getHorizontalGrab());
+		}
+	}
 
-  public void test_grabVertical() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'>",
-        "    <Button.layoutData>",
-        "      <GridData grabExcessVerticalSpace='true'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "</Shell>");
-    refresh();
-    ControlInfo button = getObjectByName("button");
-    // initial state, set new
-    {
-      GridDataInfo gridData = getGridData(button);
-      assertTrue(gridData.getVerticalGrab());
-      gridData.setVerticalGrab(false);
-    }
-    // check new state
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    {
-      GridDataInfo gridData = getGridData(button);
-      assertFalse(gridData.getVerticalGrab());
-    }
-  }
+	public void test_grabVertical() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'>",
+				"    <Button.layoutData>",
+				"      <GridData grabExcessVerticalSpace='true'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"</Shell>");
+		refresh();
+		ControlInfo button = getObjectByName("button");
+		// initial state, set new
+		{
+			GridDataInfo gridData = getGridData(button);
+			assertTrue(gridData.getVerticalGrab());
+			gridData.setVerticalGrab(false);
+		}
+		// check new state
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		{
+			GridDataInfo gridData = getGridData(button);
+			assertFalse(gridData.getVerticalGrab());
+		}
+	}
 
-  public void test_grab_usingProperty() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'>",
-        "    <Button.layoutData>",
-        "      <GridData grabExcessHorizontalSpace='true'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "</Shell>");
-    refresh();
-    ControlInfo button = getObjectByName("button");
-    // initial state, set new
-    {
-      GridDataInfo gridData = getGridData(button);
-      assertTrue(gridData.getHorizontalGrab());
-      gridData.getPropertyByTitle("grabExcessHorizontalSpace").setValue(false);
-    }
-    // check new state
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    {
-      GridDataInfo gridData = getGridData(button);
-      assertFalse(gridData.getHorizontalGrab());
-    }
-  }
+	public void test_grab_usingProperty() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'>",
+				"    <Button.layoutData>",
+				"      <GridData grabExcessHorizontalSpace='true'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"</Shell>");
+		refresh();
+		ControlInfo button = getObjectByName("button");
+		// initial state, set new
+		{
+			GridDataInfo gridData = getGridData(button);
+			assertTrue(gridData.getHorizontalGrab());
+			gridData.getPropertyByTitle("grabExcessHorizontalSpace").setValue(false);
+		}
+		// check new state
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		{
+			GridDataInfo gridData = getGridData(button);
+			assertFalse(gridData.getHorizontalGrab());
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Span
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link GridDataInfo#setHorizontalSpan(int)}.
-   */
-  public void test_setHorizontalSpan() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_1'/>",
-        "  <Button wbp:name='button_2'/>",
-        "  <Button wbp:name='button_3'/>",
-        "</Shell>");
-    refresh();
-    ControlInfo button = getObjectByName("button_3");
-    //
-    GridDataInfo gridData = getGridData(button);
-    gridData.setHorizontalSpan(2);
-    assertXML(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_1'/>",
-        "  <Button wbp:name='button_2'/>",
-        "  <Button wbp:name='button_3'>",
-        "    <Button.layoutData>",
-        "      <GridData horizontalSpan='2'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "</Shell>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Span
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link GridDataInfo#setHorizontalSpan(int)}.
+	 */
+	public void test_setHorizontalSpan() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_1'/>",
+				"  <Button wbp:name='button_2'/>",
+				"  <Button wbp:name='button_3'/>",
+				"</Shell>");
+		refresh();
+		ControlInfo button = getObjectByName("button_3");
+		//
+		GridDataInfo gridData = getGridData(button);
+		gridData.setHorizontalSpan(2);
+		assertXML(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_1'/>",
+				"  <Button wbp:name='button_2'/>",
+				"  <Button wbp:name='button_3'>",
+				"    <Button.layoutData>",
+				"      <GridData horizontalSpan='2'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"</Shell>");
+	}
 
-  /**
-   * Test for using "horizontalSpan" property.
-   */
-  public void test_setProperty_horizontalSpan() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_1'/>",
-        "  <Button wbp:name='button_2'/>",
-        "  <Button wbp:name='button_3'/>",
-        "</Shell>");
-    refresh();
-    ControlInfo button = getObjectByName("button_3");
-    Property property = getGridData(button).getPropertyByTitle("horizontalSpan");
-    // ignore <= 0
-    {
-      String source = m_lastContext.getContent();
-      property.setValue(0);
-      assertEquals(source, m_lastContext.getContent());
-    }
-    // ignore if "x + span > numColumns"
-    {
-      String source = m_lastContext.getContent();
-      property.setValue(3);
-      assertEquals(source, m_lastContext.getContent());
-    }
-    // set "2"
-    property.setValue(2);
-    assertXML(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_1'/>",
-        "  <Button wbp:name='button_2'/>",
-        "  <Button wbp:name='button_3'>",
-        "    <Button.layoutData>",
-        "      <GridData horizontalSpan='2'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "</Shell>");
-  }
+	/**
+	 * Test for using "horizontalSpan" property.
+	 */
+	public void test_setProperty_horizontalSpan() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_1'/>",
+				"  <Button wbp:name='button_2'/>",
+				"  <Button wbp:name='button_3'/>",
+				"</Shell>");
+		refresh();
+		ControlInfo button = getObjectByName("button_3");
+		Property property = getGridData(button).getPropertyByTitle("horizontalSpan");
+		// ignore <= 0
+		{
+			String source = m_lastContext.getContent();
+			property.setValue(0);
+			assertEquals(source, m_lastContext.getContent());
+		}
+		// ignore if "x + span > numColumns"
+		{
+			String source = m_lastContext.getContent();
+			property.setValue(3);
+			assertEquals(source, m_lastContext.getContent());
+		}
+		// set "2"
+		property.setValue(2);
+		assertXML(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_1'/>",
+				"  <Button wbp:name='button_2'/>",
+				"  <Button wbp:name='button_3'>",
+				"    <Button.layoutData>",
+				"      <GridData horizontalSpan='2'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"</Shell>");
+	}
 
-  /**
-   * Test for {@link GridDataInfo#setVerticalSpan(int)}.
-   */
-  public void test_setVerticalSpan() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_1'/>",
-        "  <Button wbp:name='button_2'/>",
-        "  <Button wbp:name='button_3'/>",
-        "</Shell>");
-    refresh();
-    ControlInfo button = getObjectByName("button_2");
-    //
-    GridDataInfo gridData = getGridData(button);
-    gridData.setVerticalSpan(2);
-    assertXML(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_1'/>",
-        "  <Button wbp:name='button_2'>",
-        "    <Button.layoutData>",
-        "      <GridData verticalSpan='2'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "  <Button wbp:name='button_3'/>",
-        "</Shell>");
-  }
+	/**
+	 * Test for {@link GridDataInfo#setVerticalSpan(int)}.
+	 */
+	public void test_setVerticalSpan() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_1'/>",
+				"  <Button wbp:name='button_2'/>",
+				"  <Button wbp:name='button_3'/>",
+				"</Shell>");
+		refresh();
+		ControlInfo button = getObjectByName("button_2");
+		//
+		GridDataInfo gridData = getGridData(button);
+		gridData.setVerticalSpan(2);
+		assertXML(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_1'/>",
+				"  <Button wbp:name='button_2'>",
+				"    <Button.layoutData>",
+				"      <GridData verticalSpan='2'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"  <Button wbp:name='button_3'/>",
+				"</Shell>");
+	}
 
-  /**
-   * Test for using "verticalSpan" property.
-   */
-  public void test_setProperty_verticalSpan() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_1'/>",
-        "  <Button wbp:name='button_2'/>",
-        "  <Button wbp:name='button_3'/>",
-        "</Shell>");
-    refresh();
-    ControlInfo button = getObjectByName("button_2");
-    Property property = getGridData(button).getPropertyByTitle("verticalSpan");
-    // ignore <= 0
-    {
-      String source = m_lastContext.getContent();
-      property.setValue(0);
-      assertEquals(source, m_lastContext.getContent());
-    }
-    // ignore if "y + span > numRows"
-    {
-      String source = m_lastContext.getContent();
-      property.setValue(3);
-      assertEquals(source, m_lastContext.getContent());
-    }
-    // set "2"
-    property.setValue(2);
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_1'/>",
-        "  <Button wbp:name='button_2'>",
-        "    <Button.layoutData>",
-        "      <GridData verticalSpan='2'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "  <Button wbp:name='button_3'/>",
-        "</Shell>");
-  }
+	/**
+	 * Test for using "verticalSpan" property.
+	 */
+	public void test_setProperty_verticalSpan() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_1'/>",
+				"  <Button wbp:name='button_2'/>",
+				"  <Button wbp:name='button_3'/>",
+				"</Shell>");
+		refresh();
+		ControlInfo button = getObjectByName("button_2");
+		Property property = getGridData(button).getPropertyByTitle("verticalSpan");
+		// ignore <= 0
+		{
+			String source = m_lastContext.getContent();
+			property.setValue(0);
+			assertEquals(source, m_lastContext.getContent());
+		}
+		// ignore if "y + span > numRows"
+		{
+			String source = m_lastContext.getContent();
+			property.setValue(3);
+			assertEquals(source, m_lastContext.getContent());
+		}
+		// set "2"
+		property.setValue(2);
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_1'/>",
+				"  <Button wbp:name='button_2'>",
+				"    <Button.layoutData>",
+				"      <GridData verticalSpan='2'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"  <Button wbp:name='button_3'/>",
+				"</Shell>");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Context menu
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_contextMenu_horizontal() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    refresh();
-    ControlInfo button = getObjectByName("button");
-    // prepare context menu
-    IMenuManager manager = getContextMenu(button);
-    IMenuManager manager2 = findChildMenuManager(manager, "Horizontal alignment");
-    assertNotNull(manager2);
-    assertNotNull(findChildAction(manager2, "&Grab excess space"));
-    assertNotNull(findChildAction(manager2, "&Left"));
-    assertNotNull(findChildAction(manager2, "&Center"));
-    assertNotNull(findChildAction(manager2, "&Right"));
-    assertNotNull(findChildAction(manager2, "&Fill"));
-    // check "check" state
-    assertTrue(findChildAction(manager2, "&Left").isChecked());
-    assertFalse(findChildAction(manager2, "&Right").isChecked());
-    // use "Right" action
-    {
-      IAction action = findChildAction(manager2, "&Right");
-      action.setChecked(true);
-      action.run();
-      assertXML(
-          "<Shell>",
-          "  <Shell.layout>",
-          "    <GridLayout/>",
-          "  </Shell.layout>",
-          "  <Button wbp:name='button'>",
-          "    <Button.layoutData>",
-          "      <GridData horizontalAlignment='RIGHT'/>",
-          "    </Button.layoutData>",
-          "  </Button>",
-          "</Shell>");
-    }
-    // use "Grab action"
-    {
-      IAction action = findChildAction(manager2, "&Grab excess space");
-      action.run();
-      assertXML(
-          "<Shell>",
-          "  <Shell.layout>",
-          "    <GridLayout/>",
-          "  </Shell.layout>",
-          "  <Button wbp:name='button'>",
-          "    <Button.layoutData>",
-          "      <GridData horizontalAlignment='RIGHT' grabExcessHorizontalSpace='true'/>",
-          "    </Button.layoutData>",
-          "  </Button>",
-          "</Shell>");
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Context menu
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_contextMenu_horizontal() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		refresh();
+		ControlInfo button = getObjectByName("button");
+		// prepare context menu
+		IMenuManager manager = getContextMenu(button);
+		IMenuManager manager2 = findChildMenuManager(manager, "Horizontal alignment");
+		assertNotNull(manager2);
+		assertNotNull(findChildAction(manager2, "&Grab excess space"));
+		assertNotNull(findChildAction(manager2, "&Left"));
+		assertNotNull(findChildAction(manager2, "&Center"));
+		assertNotNull(findChildAction(manager2, "&Right"));
+		assertNotNull(findChildAction(manager2, "&Fill"));
+		// check "check" state
+		assertTrue(findChildAction(manager2, "&Left").isChecked());
+		assertFalse(findChildAction(manager2, "&Right").isChecked());
+		// use "Right" action
+		{
+			IAction action = findChildAction(manager2, "&Right");
+			action.setChecked(true);
+			action.run();
+			assertXML(
+					"<Shell>",
+					"  <Shell.layout>",
+					"    <GridLayout/>",
+					"  </Shell.layout>",
+					"  <Button wbp:name='button'>",
+					"    <Button.layoutData>",
+					"      <GridData horizontalAlignment='RIGHT'/>",
+					"    </Button.layoutData>",
+					"  </Button>",
+					"</Shell>");
+		}
+		// use "Grab action"
+		{
+			IAction action = findChildAction(manager2, "&Grab excess space");
+			action.run();
+			assertXML(
+					"<Shell>",
+					"  <Shell.layout>",
+					"    <GridLayout/>",
+					"  </Shell.layout>",
+					"  <Button wbp:name='button'>",
+					"    <Button.layoutData>",
+					"      <GridData horizontalAlignment='RIGHT' grabExcessHorizontalSpace='true'/>",
+					"    </Button.layoutData>",
+					"  </Button>",
+					"</Shell>");
+		}
+	}
 
-  public void test_contextMenu_vertical() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    refresh();
-    ControlInfo button = getObjectByName("button");
-    // prepare context menu
-    IMenuManager manager = getContextMenu(button);
-    IMenuManager manager2 = findChildMenuManager(manager, "Vertical alignment");
-    assertNotNull(manager2);
-    assertNotNull(findChildAction(manager2, "&Grab excess space"));
-    assertNotNull(findChildAction(manager2, "&Top"));
-    assertNotNull(findChildAction(manager2, "&Center"));
-    assertNotNull(findChildAction(manager2, "&Bottom"));
-    assertNotNull(findChildAction(manager2, "&Fill"));
-    // use "Bottom" action
-    {
-      IAction action = findChildAction(manager2, "&Bottom");
-      action.setChecked(true);
-      action.run();
-      assertXML(
-          "<Shell>",
-          "  <Shell.layout>",
-          "    <GridLayout/>",
-          "  </Shell.layout>",
-          "  <Button wbp:name='button'>",
-          "    <Button.layoutData>",
-          "      <GridData verticalAlignment='BOTTOM'/>",
-          "    </Button.layoutData>",
-          "  </Button>",
-          "</Shell>");
-    }
-    // use "Grab action"
-    {
-      IAction action = findChildAction(manager2, "&Grab excess space");
-      action.run();
-      assertXML(
-          "<Shell>",
-          "  <Shell.layout>",
-          "    <GridLayout/>",
-          "  </Shell.layout>",
-          "  <Button wbp:name='button'>",
-          "    <Button.layoutData>",
-          "      <GridData verticalAlignment='BOTTOM' grabExcessVerticalSpace='true'/>",
-          "    </Button.layoutData>",
-          "  </Button>",
-          "</Shell>");
-    }
-  }
+	public void test_contextMenu_vertical() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		refresh();
+		ControlInfo button = getObjectByName("button");
+		// prepare context menu
+		IMenuManager manager = getContextMenu(button);
+		IMenuManager manager2 = findChildMenuManager(manager, "Vertical alignment");
+		assertNotNull(manager2);
+		assertNotNull(findChildAction(manager2, "&Grab excess space"));
+		assertNotNull(findChildAction(manager2, "&Top"));
+		assertNotNull(findChildAction(manager2, "&Center"));
+		assertNotNull(findChildAction(manager2, "&Bottom"));
+		assertNotNull(findChildAction(manager2, "&Fill"));
+		// use "Bottom" action
+		{
+			IAction action = findChildAction(manager2, "&Bottom");
+			action.setChecked(true);
+			action.run();
+			assertXML(
+					"<Shell>",
+					"  <Shell.layout>",
+					"    <GridLayout/>",
+					"  </Shell.layout>",
+					"  <Button wbp:name='button'>",
+					"    <Button.layoutData>",
+					"      <GridData verticalAlignment='BOTTOM'/>",
+					"    </Button.layoutData>",
+					"  </Button>",
+					"</Shell>");
+		}
+		// use "Grab action"
+		{
+			IAction action = findChildAction(manager2, "&Grab excess space");
+			action.run();
+			assertXML(
+					"<Shell>",
+					"  <Shell.layout>",
+					"    <GridLayout/>",
+					"  </Shell.layout>",
+					"  <Button wbp:name='button'>",
+					"    <Button.layoutData>",
+					"      <GridData verticalAlignment='BOTTOM' grabExcessVerticalSpace='true'/>",
+					"    </Button.layoutData>",
+					"  </Button>",
+					"</Shell>");
+		}
+	}
 
-  public void test_contextMenu_horizontalHint() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'>",
-        "    <Button.layoutData>",
-        "      <GridData widthHint='200'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "</Shell>");
-    refresh();
-    ControlInfo button = getObjectByName("button");
-    // clear "widthHint"
-    {
-      // prepare action
-      IAction clearHintAction = getClearHintAction(button, true);
-      assertNotNull(clearHintAction);
-      // use action
-      clearHintAction.run();
-      assertXML(
-          "// filler filler filler filler filler",
-          "<Shell>",
-          "  <Shell.layout>",
-          "    <GridLayout/>",
-          "  </Shell.layout>",
-          "  <Button wbp:name='button'/>",
-          "</Shell>");
-    }
-    // no "widthHint" value, so no action
-    {
-      IAction clearHintAction = getClearHintAction(button, true);
-      assertNull(clearHintAction);
-    }
-  }
+	public void test_contextMenu_horizontalHint() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'>",
+				"    <Button.layoutData>",
+				"      <GridData widthHint='200'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"</Shell>");
+		refresh();
+		ControlInfo button = getObjectByName("button");
+		// clear "widthHint"
+		{
+			// prepare action
+			IAction clearHintAction = getClearHintAction(button, true);
+			assertNotNull(clearHintAction);
+			// use action
+			clearHintAction.run();
+			assertXML(
+					"// filler filler filler filler filler",
+					"<Shell>",
+					"  <Shell.layout>",
+					"    <GridLayout/>",
+					"  </Shell.layout>",
+					"  <Button wbp:name='button'/>",
+					"</Shell>");
+		}
+		// no "widthHint" value, so no action
+		{
+			IAction clearHintAction = getClearHintAction(button, true);
+			assertNull(clearHintAction);
+		}
+	}
 
-  public void test_contextMenu_verticalHint() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'>",
-        "    <Button.layoutData>",
-        "      <GridData heightHint='200'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "</Shell>");
-    refresh();
-    ControlInfo button = getObjectByName("button");
-    // clear "heightHint"
-    {
-      // prepare action
-      IAction clearHintAction = getClearHintAction(button, false);
-      assertNotNull(clearHintAction);
-      // use action
-      clearHintAction.run();
-      assertXML(
-          "// filler filler filler filler filler",
-          "<Shell>",
-          "  <Shell.layout>",
-          "    <GridLayout/>",
-          "  </Shell.layout>",
-          "  <Button wbp:name='button'/>",
-          "</Shell>");
-    }
-    // no "heightHint" value, so no action
-    {
-      IAction clearHintAction = getClearHintAction(button, false);
-      assertNull(clearHintAction);
-    }
-  }
+	public void test_contextMenu_verticalHint() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'>",
+				"    <Button.layoutData>",
+				"      <GridData heightHint='200'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"</Shell>");
+		refresh();
+		ControlInfo button = getObjectByName("button");
+		// clear "heightHint"
+		{
+			// prepare action
+			IAction clearHintAction = getClearHintAction(button, false);
+			assertNotNull(clearHintAction);
+			// use action
+			clearHintAction.run();
+			assertXML(
+					"// filler filler filler filler filler",
+					"<Shell>",
+					"  <Shell.layout>",
+					"    <GridLayout/>",
+					"  </Shell.layout>",
+					"  <Button wbp:name='button'/>",
+					"</Shell>");
+		}
+		// no "heightHint" value, so no action
+		{
+			IAction clearHintAction = getClearHintAction(button, false);
+			assertNull(clearHintAction);
+		}
+	}
 
-  private IAction getClearHintAction(ControlInfo button, boolean horizontal) throws Exception {
-    IMenuManager manager = getContextMenu(button);
-    String managerName = horizontal ? "Horizontal alignment" : "Vertical alignment";
-    IMenuManager alignmentManager = findChildMenuManager(manager, managerName);
-    return findChildAction(alignmentManager, "Clear hint");
-  }
+	private IAction getClearHintAction(ControlInfo button, boolean horizontal) throws Exception {
+		IMenuManager manager = getContextMenu(button);
+		String managerName = horizontal ? "Horizontal alignment" : "Vertical alignment";
+		IMenuManager alignmentManager = findChildMenuManager(manager, managerName);
+		return findChildAction(alignmentManager, "Clear hint");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Default values
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * {@link GridData} does not use "modern" values as default values for fields, for example it uses
-   * {@link GridData#BEGINNING}, not {@link SWT#LEFT} as we would like. So, we need to check and fix
-   * this.
-   */
-  public void test_defaultValues() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    refresh();
-    ControlInfo button = getObjectByName("button");
-    GridDataInfo gridData = getGridData(button);
-    // ask using methods
-    assertEquals(SWT.LEFT, gridData.getHorizontalAlignment());
-    assertEquals(SWT.CENTER, gridData.getVerticalAlignment());
-    assertEquals(false, gridData.getHorizontalGrab());
-    assertEquals(false, gridData.getVerticalGrab());
-    // ask using properties
-    {
-      assertEquals(SWT.LEFT, gridData.getPropertyByTitle("horizontalAlignment").getValue());
-      assertEquals(SWT.CENTER, gridData.getPropertyByTitle("verticalAlignment").getValue());
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Default values
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * {@link GridData} does not use "modern" values as default values for fields, for example it uses
+	 * {@link GridData#BEGINNING}, not {@link SWT#LEFT} as we would like. So, we need to check and fix
+	 * this.
+	 */
+	public void test_defaultValues() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		refresh();
+		ControlInfo button = getObjectByName("button");
+		GridDataInfo gridData = getGridData(button);
+		// ask using methods
+		assertEquals(SWT.LEFT, gridData.getHorizontalAlignment());
+		assertEquals(SWT.CENTER, gridData.getVerticalAlignment());
+		assertEquals(false, gridData.getHorizontalGrab());
+		assertEquals(false, gridData.getVerticalGrab());
+		// ask using properties
+		{
+			assertEquals(SWT.LEFT, gridData.getPropertyByTitle("horizontalAlignment").getValue());
+			assertEquals(SWT.CENTER, gridData.getPropertyByTitle("verticalAlignment").getValue());
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Modern alignment constants
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_modernHorizontalAlignment() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    refresh();
-    ControlInfo button = getObjectByName("button");
-    button.startEdit();
-    //
-    check_modernHorizontalAlignment(button, SWT.LEFT, SWT.LEFT, null);
-    check_modernHorizontalAlignment(button, SWT.BEGINNING, SWT.LEFT, null);
-    check_modernHorizontalAlignment(button, GridData.BEGINNING, SWT.LEFT, null);
-    //
-    check_modernHorizontalAlignment(button, SWT.CENTER, SWT.CENTER, "CENTER");
-    check_modernHorizontalAlignment(button, GridData.CENTER, SWT.CENTER, "CENTER");
-    //
-    check_modernHorizontalAlignment(button, SWT.RIGHT, SWT.RIGHT, "RIGHT");
-    check_modernHorizontalAlignment(button, SWT.END, SWT.RIGHT, "RIGHT");
-    check_modernHorizontalAlignment(button, GridData.END, SWT.RIGHT, "RIGHT");
-    //
-    check_modernHorizontalAlignment(button, SWT.FILL, SWT.FILL, "FILL");
-    check_modernHorizontalAlignment(button, GridData.FILL, SWT.FILL, "FILL");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Modern alignment constants
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_modernHorizontalAlignment() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		refresh();
+		ControlInfo button = getObjectByName("button");
+		button.startEdit();
+		//
+		check_modernHorizontalAlignment(button, SWT.LEFT, SWT.LEFT, null);
+		check_modernHorizontalAlignment(button, SWT.BEGINNING, SWT.LEFT, null);
+		check_modernHorizontalAlignment(button, GridData.BEGINNING, SWT.LEFT, null);
+		//
+		check_modernHorizontalAlignment(button, SWT.CENTER, SWT.CENTER, "CENTER");
+		check_modernHorizontalAlignment(button, GridData.CENTER, SWT.CENTER, "CENTER");
+		//
+		check_modernHorizontalAlignment(button, SWT.RIGHT, SWT.RIGHT, "RIGHT");
+		check_modernHorizontalAlignment(button, SWT.END, SWT.RIGHT, "RIGHT");
+		check_modernHorizontalAlignment(button, GridData.END, SWT.RIGHT, "RIGHT");
+		//
+		check_modernHorizontalAlignment(button, SWT.FILL, SWT.FILL, "FILL");
+		check_modernHorizontalAlignment(button, GridData.FILL, SWT.FILL, "FILL");
+	}
 
-  public void test_modernVerticalAlignment() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    refresh();
-    ControlInfo button = getObjectByName("button");
-    button.startEdit();
-    //
-    check_modernVerticalAlignment(button, SWT.TOP, SWT.TOP, "TOP");
-    check_modernVerticalAlignment(button, SWT.BEGINNING, SWT.TOP, "TOP");
-    check_modernVerticalAlignment(button, GridData.BEGINNING, SWT.TOP, "TOP");
-    //
-    check_modernVerticalAlignment(button, SWT.CENTER, SWT.CENTER, null);
-    check_modernVerticalAlignment(button, GridData.CENTER, SWT.CENTER, null);
-    //
-    check_modernVerticalAlignment(button, SWT.BOTTOM, SWT.BOTTOM, "BOTTOM");
-    check_modernVerticalAlignment(button, SWT.END, SWT.BOTTOM, "BOTTOM");
-    check_modernVerticalAlignment(button, GridData.END, SWT.BOTTOM, "BOTTOM");
-    //
-    check_modernVerticalAlignment(button, SWT.FILL, SWT.FILL, "FILL");
-    check_modernVerticalAlignment(button, GridData.FILL, SWT.FILL, "FILL");
-  }
+	public void test_modernVerticalAlignment() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		refresh();
+		ControlInfo button = getObjectByName("button");
+		button.startEdit();
+		//
+		check_modernVerticalAlignment(button, SWT.TOP, SWT.TOP, "TOP");
+		check_modernVerticalAlignment(button, SWT.BEGINNING, SWT.TOP, "TOP");
+		check_modernVerticalAlignment(button, GridData.BEGINNING, SWT.TOP, "TOP");
+		//
+		check_modernVerticalAlignment(button, SWT.CENTER, SWT.CENTER, null);
+		check_modernVerticalAlignment(button, GridData.CENTER, SWT.CENTER, null);
+		//
+		check_modernVerticalAlignment(button, SWT.BOTTOM, SWT.BOTTOM, "BOTTOM");
+		check_modernVerticalAlignment(button, SWT.END, SWT.BOTTOM, "BOTTOM");
+		check_modernVerticalAlignment(button, GridData.END, SWT.BOTTOM, "BOTTOM");
+		//
+		check_modernVerticalAlignment(button, SWT.FILL, SWT.FILL, "FILL");
+		check_modernVerticalAlignment(button, GridData.FILL, SWT.FILL, "FILL");
+	}
 
-  private void check_modernHorizontalAlignment(ControlInfo button,
-      int horizontalAlignment,
-      int horizontalAlignmentEx,
-      String horizontalSourceEx) throws Exception {
-    String sourceEx;
-    {
-      sourceEx = "<GridData place=\"holder\"";
-      if (horizontalSourceEx != null) {
-        sourceEx += " horizontalAlignment=\"" + horizontalSourceEx + "\"";
-      }
-      sourceEx += ">";
-    }
-    check_modernAlignments(button, horizontalAlignment, horizontalAlignmentEx, -1, -1, sourceEx);
-  }
+	private void check_modernHorizontalAlignment(ControlInfo button,
+			int horizontalAlignment,
+			int horizontalAlignmentEx,
+			String horizontalSourceEx) throws Exception {
+		String sourceEx;
+		{
+			sourceEx = "<GridData place=\"holder\"";
+			if (horizontalSourceEx != null) {
+				sourceEx += " horizontalAlignment=\"" + horizontalSourceEx + "\"";
+			}
+			sourceEx += ">";
+		}
+		check_modernAlignments(button, horizontalAlignment, horizontalAlignmentEx, -1, -1, sourceEx);
+	}
 
-  private void check_modernVerticalAlignment(ControlInfo button,
-      int verticalAlignment,
-      int verticalAlignmentEx,
-      String verticalSourceEx) throws Exception {
-    String sourceEx;
-    {
-      sourceEx = "<GridData place=\"holder\"";
-      if (verticalSourceEx != null) {
-        sourceEx += " verticalAlignment=\"" + verticalSourceEx + "\"";
-      }
-      sourceEx += ">";
-    }
-    check_modernAlignments(button, -1, -1, verticalAlignment, verticalAlignmentEx, sourceEx);
-  }
+	private void check_modernVerticalAlignment(ControlInfo button,
+			int verticalAlignment,
+			int verticalAlignmentEx,
+			String verticalSourceEx) throws Exception {
+		String sourceEx;
+		{
+			sourceEx = "<GridData place=\"holder\"";
+			if (verticalSourceEx != null) {
+				sourceEx += " verticalAlignment=\"" + verticalSourceEx + "\"";
+			}
+			sourceEx += ">";
+		}
+		check_modernAlignments(button, -1, -1, verticalAlignment, verticalAlignmentEx, sourceEx);
+	}
 
-  private void check_modernAlignments(ControlInfo button,
-      int horizontalAlignment,
-      int horizontalAlignmentEx,
-      int verticalAlignment,
-      int verticalAlignmentEx,
-      String sourceEx) throws Exception {
-    GridDataInfo gridData = getGridData(button);
-    // set some attribute to ensure that it will be not removed
-    gridData.getCreationSupport().getElement().setAttribute("place", "holder");
-    // set/check alignments
-    if (horizontalAlignment != -1) {
-      gridData.setHorizontalAlignment(horizontalAlignment);
-      assertEquals(horizontalAlignmentEx, gridData.getHorizontalAlignment());
-    }
-    if (verticalAlignment != -1) {
-      gridData.setVerticalAlignment(verticalAlignment);
-      assertEquals(verticalAlignmentEx, gridData.getVerticalAlignment());
-    }
-    // check source for GridData
-    String gridDataSource = gridData.toString();
-    assertEquals(sourceEx, gridDataSource);
-  }
+	private void check_modernAlignments(ControlInfo button,
+			int horizontalAlignment,
+			int horizontalAlignmentEx,
+			int verticalAlignment,
+			int verticalAlignmentEx,
+			String sourceEx) throws Exception {
+		GridDataInfo gridData = getGridData(button);
+		// set some attribute to ensure that it will be not removed
+		gridData.getCreationSupport().getElement().setAttribute("place", "holder");
+		// set/check alignments
+		if (horizontalAlignment != -1) {
+			gridData.setHorizontalAlignment(horizontalAlignment);
+			assertEquals(horizontalAlignmentEx, gridData.getHorizontalAlignment());
+		}
+		if (verticalAlignment != -1) {
+			gridData.setVerticalAlignment(verticalAlignment);
+			assertEquals(verticalAlignmentEx, gridData.getVerticalAlignment());
+		}
+		// check source for GridData
+		String gridDataSource = gridData.toString();
+		assertEquals(sourceEx, gridDataSource);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/layout/grid/GridLayoutConverterTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/layout/grid/GridLayoutConverterTest.java
index e5a641a61..0e1c6c8ee 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/layout/grid/GridLayoutConverterTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/layout/grid/GridLayoutConverterTest.java
@@ -27,226 +27,226 @@
  * @author scheglov_ke
  */
 public class GridLayoutConverterTest extends XwtModelTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * No controls.
-   */
-  public void test_empty() throws Exception {
-    CompositeInfo shell = parse("<Shell/>");
-    setGridLayout(shell, new String[]{
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout/>",
-        "  </Shell.layout>",
-        "</Shell>"}, new Rectangle[]{});
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * No controls.
+	 */
+	public void test_empty() throws Exception {
+		CompositeInfo shell = parse("<Shell/>");
+		setGridLayout(shell, new String[]{
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout/>",
+				"  </Shell.layout>",
+		"</Shell>"}, new Rectangle[]{});
+	}
 
-  /**
-   * Control in single column, in normal order.
-   */
-  public void test_singleColumn_normalOrder() throws Exception {
-    CompositeInfo shell =
-        parse(
-            "<Shell>",
-            "  <Button text='0' bounds='10, 10, 100, 20'/>",
-            "  <Button text='1' bounds='20, 40, 100, 20'/>",
-            "</Shell>");
-    setGridLayout(shell, new String[]{
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout/>",
-        "  </Shell.layout>",
-        "  <Button text='0'/>",
-        "  <Button text='1'/>",
-        "</Shell>"}, new Rectangle[]{new Rectangle(0, 0, 1, 1), new Rectangle(0, 1, 1, 1)});
-  }
+	/**
+	 * Control in single column, in normal order.
+	 */
+	public void test_singleColumn_normalOrder() throws Exception {
+		CompositeInfo shell =
+				parse(
+						"<Shell>",
+						"  <Button text='0' bounds='10, 10, 100, 20'/>",
+						"  <Button text='1' bounds='20, 40, 100, 20'/>",
+						"</Shell>");
+		setGridLayout(shell, new String[]{
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout/>",
+				"  </Shell.layout>",
+				"  <Button text='0'/>",
+				"  <Button text='1'/>",
+		"</Shell>"}, new Rectangle[]{new Rectangle(0, 0, 1, 1), new Rectangle(0, 1, 1, 1)});
+	}
 
-  /**
-   * Control in single column, in reverse order.
-   */
-  public void test_singleColumn_reverseOrder() throws Exception {
-    CompositeInfo shell =
-        parse(
-            "<Shell>",
-            "  <Button text='1' bounds='20, 40, 100, 20'/>",
-            "  <Button text='0' bounds='10, 10, 100, 20'/>",
-            "</Shell>");
-    setGridLayout(shell, new String[]{
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout/>",
-        "  </Shell.layout>",
-        "  <Button text='0'/>",
-        "  <Button text='1'/>",
-        "</Shell>"}, new Rectangle[]{new Rectangle(0, 0, 1, 1), new Rectangle(0, 1, 1, 1)});
-  }
+	/**
+	 * Control in single column, in reverse order.
+	 */
+	public void test_singleColumn_reverseOrder() throws Exception {
+		CompositeInfo shell =
+				parse(
+						"<Shell>",
+						"  <Button text='1' bounds='20, 40, 100, 20'/>",
+						"  <Button text='0' bounds='10, 10, 100, 20'/>",
+						"</Shell>");
+		setGridLayout(shell, new String[]{
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout/>",
+				"  </Shell.layout>",
+				"  <Button text='0'/>",
+				"  <Button text='1'/>",
+		"</Shell>"}, new Rectangle[]{new Rectangle(0, 0, 1, 1), new Rectangle(0, 1, 1, 1)});
+	}
 
-  /**
-   * Control in two columns, no fillers.
-   */
-  public void test_twoRows_noFillers() throws Exception {
-    CompositeInfo shell =
-        parse(
-            "<Shell>",
-            "  <Button text='0' bounds='10, 10, 100, 20'/>",
-            "  <Button text='1' bounds='120, 15, 100, 20'/>",
-            "</Shell>");
-    setGridLayout(shell, new String[]{
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button text='0'/>",
-        "  <Button text='1'/>",
-        "</Shell>"}, new Rectangle[]{new Rectangle(0, 0, 1, 1), new Rectangle(1, 0, 1, 1)});
-  }
+	/**
+	 * Control in two columns, no fillers.
+	 */
+	public void test_twoRows_noFillers() throws Exception {
+		CompositeInfo shell =
+				parse(
+						"<Shell>",
+						"  <Button text='0' bounds='10, 10, 100, 20'/>",
+						"  <Button text='1' bounds='120, 15, 100, 20'/>",
+						"</Shell>");
+		setGridLayout(shell, new String[]{
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button text='0'/>",
+				"  <Button text='1'/>",
+		"</Shell>"}, new Rectangle[]{new Rectangle(0, 0, 1, 1), new Rectangle(1, 0, 1, 1)});
+	}
 
-  /**
-   * Control in two columns/rows, on diagonal, with fillers.
-   */
-  public void test_twoRows_withFillers() throws Exception {
-    CompositeInfo shell =
-        parse(
-            "<Shell>",
-            "  <Button text='0' bounds='10, 10, 100, 20'/>",
-            "  <Button text='1' bounds='120, 40, 100, 20'/>",
-            "</Shell>");
-    setGridLayout(shell, new String[]{
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button text='0'/>",
-        "  <Label/>",
-        "  <Label/>",
-        "  <Button text='1'/>",
-        "</Shell>"}, new Rectangle[]{new Rectangle(0, 0, 1, 1), new Rectangle(1, 1, 1, 1)});
-  }
+	/**
+	 * Control in two columns/rows, on diagonal, with fillers.
+	 */
+	public void test_twoRows_withFillers() throws Exception {
+		CompositeInfo shell =
+				parse(
+						"<Shell>",
+						"  <Button text='0' bounds='10, 10, 100, 20'/>",
+						"  <Button text='1' bounds='120, 40, 100, 20'/>",
+						"</Shell>");
+		setGridLayout(shell, new String[]{
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button text='0'/>",
+				"  <Label/>",
+				"  <Label/>",
+				"  <Button text='1'/>",
+		"</Shell>"}, new Rectangle[]{new Rectangle(0, 0, 1, 1), new Rectangle(1, 1, 1, 1)});
+	}
 
-  /**
-   * Three controls, one spanned horizontally.
-   */
-  public void test_spanHorizontal() throws Exception {
-    CompositeInfo shell =
-        parse(
-            "<Shell>",
-            "  <Button text='0' bounds='10, 10, 10, 10'/>",
-            "  <Button text='1' bounds='30, 10, 10, 10'/>",
-            "  <Button text='2' bounds='10, 30, 30, 10'/>",
-            "</Shell>");
-    setGridLayout(shell, new String[]{
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button text='0'/>",
-        "  <Button text='1'/>",
-        "  <Button text='2'>",
-        "    <Button.layoutData>",
-        "      <GridData horizontalSpan='2'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "</Shell>"}, new Rectangle[]{
-        new Rectangle(0, 0, 1, 1),
-        new Rectangle(1, 0, 1, 1),
-        new Rectangle(0, 1, 2, 1)});
-  }
+	/**
+	 * Three controls, one spanned horizontally.
+	 */
+	public void test_spanHorizontal() throws Exception {
+		CompositeInfo shell =
+				parse(
+						"<Shell>",
+						"  <Button text='0' bounds='10, 10, 10, 10'/>",
+						"  <Button text='1' bounds='30, 10, 10, 10'/>",
+						"  <Button text='2' bounds='10, 30, 30, 10'/>",
+						"</Shell>");
+		setGridLayout(shell, new String[]{
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button text='0'/>",
+				"  <Button text='1'/>",
+				"  <Button text='2'>",
+				"    <Button.layoutData>",
+				"      <GridData horizontalSpan='2'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+		"</Shell>"}, new Rectangle[]{
+				new Rectangle(0, 0, 1, 1),
+				new Rectangle(1, 0, 1, 1),
+				new Rectangle(0, 1, 2, 1)});
+	}
 
-  /**
-   * Three controls, one spanned vertically.
-   */
-  public void test_spanVertical() throws Exception {
-    CompositeInfo shell =
-        parse(
-            "<Shell>",
-            "  <Button text='0' bounds='10, 10, 10, 10'/>",
-            "  <Button text='1' bounds='30, 10, 10, 30'/>",
-            "  <Button text='2' bounds='10, 30, 10, 10'/>",
-            "</Shell>");
-    setGridLayout(shell, new String[]{
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button text='0'/>",
-        "  <Button text='1'>",
-        "    <Button.layoutData>",
-        "      <GridData verticalSpan='2'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "  <Button text='2'/>",
-        "</Shell>"}, new Rectangle[]{
-        new Rectangle(0, 0, 1, 1),
-        new Rectangle(1, 0, 1, 2),
-        new Rectangle(0, 1, 1, 1)});
-  }
+	/**
+	 * Three controls, one spanned vertically.
+	 */
+	public void test_spanVertical() throws Exception {
+		CompositeInfo shell =
+				parse(
+						"<Shell>",
+						"  <Button text='0' bounds='10, 10, 10, 10'/>",
+						"  <Button text='1' bounds='30, 10, 10, 30'/>",
+						"  <Button text='2' bounds='10, 30, 10, 10'/>",
+						"</Shell>");
+		setGridLayout(shell, new String[]{
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button text='0'/>",
+				"  <Button text='1'>",
+				"    <Button.layoutData>",
+				"      <GridData verticalSpan='2'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"  <Button text='2'/>",
+		"</Shell>"}, new Rectangle[]{
+				new Rectangle(0, 0, 1, 1),
+				new Rectangle(1, 0, 1, 2),
+				new Rectangle(0, 1, 1, 1)});
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets the {@link GridLayout} for given {@link CompositeInfo}.
-   */
-  private void setGridLayout(CompositeInfo composite, String[] expectedLines, Rectangle[] cells)
-      throws Exception {
-    GridLayoutInfo layout = setGridLayout(composite, expectedLines);
-    // check cells for control's
-    int cellIndex = 0;
-    for (ControlInfo control : composite.getChildrenControls()) {
-      if (!layout.isFiller(control)) {
-        GridDataInfo gridData = GridLayoutInfo.getGridData(control);
-        int x = getInt(gridData, "x");
-        int y = getInt(gridData, "y");
-        int width = getInt(gridData, "width");
-        int height = getInt(gridData, "height");
-        assertEquals(cells[cellIndex++], new Rectangle(x, y, width, height));
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets the {@link GridLayout} for given {@link CompositeInfo}.
+	 */
+	private void setGridLayout(CompositeInfo composite, String[] expectedLines, Rectangle[] cells)
+			throws Exception {
+		GridLayoutInfo layout = setGridLayout(composite, expectedLines);
+		// check cells for control's
+		int cellIndex = 0;
+		for (ControlInfo control : composite.getChildrenControls()) {
+			if (!layout.isFiller(control)) {
+				GridDataInfo gridData = GridLayoutInfo.getGridData(control);
+				int x = getInt(gridData, "x");
+				int y = getInt(gridData, "y");
+				int width = getInt(gridData, "width");
+				int height = getInt(gridData, "height");
+				assertEquals(cells[cellIndex++], new Rectangle(x, y, width, height));
+			}
+		}
+	}
 
-  private GridLayoutInfo setGridLayout(CompositeInfo composite, String[] expectedLines)
-      throws Exception {
-    composite.getRoot().refresh();
-    // set GridLayout
-    GridLayoutInfo gridLayout = createObject("org.eclipse.swt.layout.GridLayout");
-    composite.setLayout(gridLayout);
-    // check source
-    assertXML(expectedLines);
-    return gridLayout;
-  }
+	private GridLayoutInfo setGridLayout(CompositeInfo composite, String[] expectedLines)
+			throws Exception {
+		composite.getRoot().refresh();
+		// set GridLayout
+		GridLayoutInfo gridLayout = createObject("org.eclipse.swt.layout.GridLayout");
+		composite.setLayout(gridLayout);
+		// check source
+		assertXML(expectedLines);
+		return gridLayout;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the <code>int</code> value of field with given name.
-   */
-  private static int getInt(GridDataInfo gridData, String fieldName) throws Exception {
-    return ReflectionUtils.getFieldInt(gridData, fieldName);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the <code>int</code> value of field with given name.
+	 */
+	private static int getInt(GridDataInfo gridData, String fieldName) throws Exception {
+		return ReflectionUtils.getFieldInt(gridData, fieldName);
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/layout/grid/GridLayoutGefTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/layout/grid/GridLayoutGefTest.java
index 90ad0a3b0..ee5232259 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/layout/grid/GridLayoutGefTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/layout/grid/GridLayoutGefTest.java
@@ -34,519 +34,519 @@
  * @author scheglov_ke
  */
 public class GridLayoutGefTest extends XwtGefTest {
-  private static final int M = 5;
-  private static final int S = 5;
-  private static final int VS = 25;
-  private static final int VG = 5;
+	private static final int M = 5;
+	private static final int S = 5;
+	private static final int VS = 25;
+	private static final int VG = 5;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * When we delete component of expandable/collapsible container, selection {@link Handle} receives
-   * ancestor resize event, so tries to update {@link Handle} location. However at this time
-   * component may be already deleted, so we can not ask for its cell/bounds.
-   */
-  public void test_deleteChildAndAncestorResize() throws Exception {
-    openEditor(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout/>",
-        "  </Shell.layout>",
-        "  <Composite>",
-        "    <Composite.layout>",
-        "      <GridLayout/>",
-        "    </Composite.layout>",
-        "    <Label text='Label'/>",
-        "    <Button wbp:name='button' text='Button'/>",
-        "  </Composite>",
-        "</Shell>");
-    ControlInfo button = getObjectByName("button");
-    // select "button"
-    canvas.select(button);
-    waitEventLoop(0);
-    // delete
-    {
-      IAction deleteAction = getDeleteAction();
-      assertTrue(deleteAction.isEnabled());
-      deleteAction.run();
-      assertXML(
-          "// filler filler filler filler filler",
-          "<Shell>",
-          "  <Shell.layout>",
-          "    <GridLayout/>",
-          "  </Shell.layout>",
-          "  <Composite>",
-          "    <Composite.layout>",
-          "      <GridLayout/>",
-          "    </Composite.layout>",
-          "    <Label text='Label'/>",
-          "  </Composite>",
-          "</Shell>");
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * When we delete component of expandable/collapsible container, selection {@link Handle} receives
+	 * ancestor resize event, so tries to update {@link Handle} location. However at this time
+	 * component may be already deleted, so we can not ask for its cell/bounds.
+	 */
+	public void test_deleteChildAndAncestorResize() throws Exception {
+		openEditor(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout/>",
+				"  </Shell.layout>",
+				"  <Composite>",
+				"    <Composite.layout>",
+				"      <GridLayout/>",
+				"    </Composite.layout>",
+				"    <Label text='Label'/>",
+				"    <Button wbp:name='button' text='Button'/>",
+				"  </Composite>",
+				"</Shell>");
+		ControlInfo button = getObjectByName("button");
+		// select "button"
+		canvas.select(button);
+		waitEventLoop(0);
+		// delete
+		{
+			IAction deleteAction = getDeleteAction();
+			assertTrue(deleteAction.isEnabled());
+			deleteAction.run();
+			assertXML(
+					"// filler filler filler filler filler",
+					"<Shell>",
+					"  <Shell.layout>",
+					"    <GridLayout/>",
+					"  </Shell.layout>",
+					"  <Composite>",
+					"    <Composite.layout>",
+					"      <GridLayout/>",
+					"    </Composite.layout>",
+					"    <Label text='Label'/>",
+					"  </Composite>",
+					"</Shell>");
+		}
+	}
 
-  /**
-   * When user externally (not using design canvas) changes "numColumns", we should recalculate
-   * positions of controls, in other case we will have incorrect count of column/row headers.
-   */
-  public void test_change_numColumns() throws Exception {
-    CompositeInfo shell =
-        openEditor(
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <GridLayout wbp:name='gridLayout'/>",
-            "  </Shell.layout>",
-            "  <Button wbp:name='button_00'/>",
-            "  <Button wbp:name='button_01'/>",
-            "</Shell>");
-    GridLayoutInfo layout = getObjectByName("gridLayout");
-    // select "shell", so show headers
-    canvas.select(shell);
-    // initially: 1 column, 2 rows
-    assertEquals(1, layout.getColumns().size());
-    assertEquals(2, layout.getRows().size());
-    // set: 2 columns, so 1 row
-    // this caused exception in headers refresh
-    layout.getPropertyByTitle("numColumns").setValue(2);
-    assertNoLoggedExceptions();
-    assertEquals(2, layout.getColumns().size());
-    assertEquals(1, layout.getRows().size());
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='gridLayout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_00'/>",
-        "  <Button wbp:name='button_01'/>",
-        "</Shell>");
-  }
+	/**
+	 * When user externally (not using design canvas) changes "numColumns", we should recalculate
+	 * positions of controls, in other case we will have incorrect count of column/row headers.
+	 */
+	public void test_change_numColumns() throws Exception {
+		CompositeInfo shell =
+				openEditor(
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <GridLayout wbp:name='gridLayout'/>",
+						"  </Shell.layout>",
+						"  <Button wbp:name='button_00'/>",
+						"  <Button wbp:name='button_01'/>",
+						"</Shell>");
+		GridLayoutInfo layout = getObjectByName("gridLayout");
+		// select "shell", so show headers
+		canvas.select(shell);
+		// initially: 1 column, 2 rows
+		assertEquals(1, layout.getColumns().size());
+		assertEquals(2, layout.getRows().size());
+		// set: 2 columns, so 1 row
+		// this caused exception in headers refresh
+		layout.getPropertyByTitle("numColumns").setValue(2);
+		assertNoLoggedExceptions();
+		assertEquals(2, layout.getColumns().size());
+		assertEquals(1, layout.getRows().size());
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='gridLayout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_00'/>",
+				"  <Button wbp:name='button_01'/>",
+				"</Shell>");
+	}
 
-  /**
-   * When user marks {@link Control} as excluded, we should not use {@link GridSelectionEditPolicy}
-   * for it.
-   */
-  public void test_markAsExcluded() throws Exception {
-    openEditor(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    ControlInfo button = getObjectByName("button");
-    GraphicalEditPart buttonPart = canvas.getEditPart(button);
-    // select "button", so show grid selection
-    canvas.select(button);
-    assertThat(buttonPart.getEditPolicy(EditPolicy.SELECTION_ROLE)).isInstanceOf(
-        GridSelectionEditPolicy.class);
-    // set "exclude"
-    GridLayoutInfo.getGridData(button).getPropertyByTitle("exclude").setValue(true);
-    assertNoLoggedExceptions();
-    assertThat(buttonPart.getEditPolicy(EditPolicy.SELECTION_ROLE)).isInstanceOf(
-        NonResizableSelectionEditPolicy.class);
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'>",
-        "    <Button.layoutData>",
-        "      <GridData exclude='true'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "</Shell>");
-  }
+	/**
+	 * When user marks {@link Control} as excluded, we should not use {@link GridSelectionEditPolicy}
+	 * for it.
+	 */
+	public void test_markAsExcluded() throws Exception {
+		openEditor(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		ControlInfo button = getObjectByName("button");
+		GraphicalEditPart buttonPart = canvas.getEditPart(button);
+		// select "button", so show grid selection
+		canvas.select(button);
+		assertThat(buttonPart.getEditPolicy(EditPolicy.SELECTION_ROLE)).isInstanceOf(
+				GridSelectionEditPolicy.class);
+		// set "exclude"
+		GridLayoutInfo.getGridData(button).getPropertyByTitle("exclude").setValue(true);
+		assertNoLoggedExceptions();
+		assertThat(buttonPart.getEditPolicy(EditPolicy.SELECTION_ROLE)).isInstanceOf(
+				NonResizableSelectionEditPolicy.class);
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'>",
+				"    <Button.layoutData>",
+				"      <GridData exclude='true'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"</Shell>");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Size hint
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_setSizeHint_width() throws Exception {
-    openEditor(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button' text='New Button'/>",
-        "</Shell>");
-    ControlInfo button = getObjectByName("button");
-    // resize EAST of "button"
-    canvas.toResizeHandle(button, "resize_size", IPositionConstants.EAST).beginDrag();
-    canvas.target(button).in(200, 0).drag().endDrag();
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button' text='New Button'>",
-        "    <Button.layoutData>",
-        "      <GridData widthHint='200'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "</Shell>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Size hint
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_setSizeHint_width() throws Exception {
+		openEditor(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button' text='New Button'/>",
+				"</Shell>");
+		ControlInfo button = getObjectByName("button");
+		// resize EAST of "button"
+		canvas.toResizeHandle(button, "resize_size", IPositionConstants.EAST).beginDrag();
+		canvas.target(button).in(200, 0).drag().endDrag();
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button' text='New Button'>",
+				"    <Button.layoutData>",
+				"      <GridData widthHint='200'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"</Shell>");
+	}
 
-  public void test_setSizeHint_height() throws Exception {
-    openEditor(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button' text='New Button'/>",
-        "</Shell>");
-    ControlInfo button = getObjectByName("button");
-    // resize SOUTH of "button"
-    canvas.toResizeHandle(button, "resize_size", IPositionConstants.SOUTH).beginDrag();
-    canvas.target(button).in(0, 50).drag().endDrag();
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button' text='New Button'>",
-        "    <Button.layoutData>",
-        "      <GridData heightHint='50'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "</Shell>");
-  }
+	public void test_setSizeHint_height() throws Exception {
+		openEditor(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button' text='New Button'/>",
+				"</Shell>");
+		ControlInfo button = getObjectByName("button");
+		// resize SOUTH of "button"
+		canvas.toResizeHandle(button, "resize_size", IPositionConstants.SOUTH).beginDrag();
+		canvas.target(button).in(0, 50).drag().endDrag();
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button' text='New Button'>",
+				"    <Button.layoutData>",
+				"      <GridData heightHint='50'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"</Shell>");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // CREATE
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_CREATE_filled() throws Exception {
-    CompositeInfo composite =
-        openEditor(
-            "// filler filler filler filler filler",
-            "<Composite>",
-            "  <Composite.layout>",
-            "    <GridLayout/>",
-            "  </Composite.layout>",
-            "  <Button wbp:name='existingButton' text='Existing Button'/>",
-            "</Composite>");
-    //
-    loadButtonWithText();
-    canvas.moveTo(composite, M, M);
-    canvas.assertCommandNull();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// CREATE
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_CREATE_filled() throws Exception {
+		CompositeInfo composite =
+				openEditor(
+						"// filler filler filler filler filler",
+						"<Composite>",
+						"  <Composite.layout>",
+						"    <GridLayout/>",
+						"  </Composite.layout>",
+						"  <Button wbp:name='existingButton' text='Existing Button'/>",
+						"</Composite>");
+		//
+		loadButtonWithText();
+		canvas.moveTo(composite, M, M);
+		canvas.assertCommandNull();
+	}
 
-  public void test_CREATE_virtual_0x0() throws Exception {
-    CompositeInfo composite =
-        openEditor(
-            "// filler filler filler filler filler",
-            "<Composite>",
-            "  <Composite.layout>",
-            "    <GridLayout/>",
-            "  </Composite.layout>",
-            "</Composite>");
-    //
-    loadButtonWithText();
-    canvas.moveTo(composite, M, M);
-    canvas.click();
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Composite>",
-        "  <Composite.layout>",
-        "    <GridLayout/>",
-        "  </Composite.layout>",
-        "  <Button text='New Button'/>",
-        "</Composite>");
-  }
+	public void test_CREATE_virtual_0x0() throws Exception {
+		CompositeInfo composite =
+				openEditor(
+						"// filler filler filler filler filler",
+						"<Composite>",
+						"  <Composite.layout>",
+						"    <GridLayout/>",
+						"  </Composite.layout>",
+						"</Composite>");
+		//
+		loadButtonWithText();
+		canvas.moveTo(composite, M, M);
+		canvas.click();
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Composite>",
+				"  <Composite.layout>",
+				"    <GridLayout/>",
+				"  </Composite.layout>",
+				"  <Button text='New Button'/>",
+				"</Composite>");
+	}
 
-  public void test_CREATE_virtual_0x1() throws Exception {
-    CompositeInfo composite =
-        openEditor(
-            "// filler filler filler filler filler",
-            "<Composite>",
-            "  <Composite.layout>",
-            "    <GridLayout/>",
-            "  </Composite.layout>",
-            "</Composite>");
-    //
-    loadButtonWithText();
-    canvas.moveTo(composite, M + VS + VG, M);
-    canvas.click();
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Composite>",
-        "  <Composite.layout>",
-        "    <GridLayout numColumns='2'/>",
-        "  </Composite.layout>",
-        "  <Label/>",
-        "  <Button text='New Button'/>",
-        "</Composite>");
-  }
+	public void test_CREATE_virtual_0x1() throws Exception {
+		CompositeInfo composite =
+				openEditor(
+						"// filler filler filler filler filler",
+						"<Composite>",
+						"  <Composite.layout>",
+						"    <GridLayout/>",
+						"  </Composite.layout>",
+						"</Composite>");
+		//
+		loadButtonWithText();
+		canvas.moveTo(composite, M + VS + VG, M);
+		canvas.click();
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Composite>",
+				"  <Composite.layout>",
+				"    <GridLayout numColumns='2'/>",
+				"  </Composite.layout>",
+				"  <Label/>",
+				"  <Button text='New Button'/>",
+				"</Composite>");
+	}
 
-  public void test_CREATE_appendToColumn_1x0() throws Exception {
-    openEditor(
-        "// filler filler filler filler filler",
-        "<Composite>",
-        "  <Composite.layout>",
-        "    <GridLayout/>",
-        "  </Composite.layout>",
-        "  <Button wbp:name='existingButton' text='Existing Button'/>",
-        "</Composite>");
-    XmlObjectInfo existingButton = getObjectByName("existingButton");
-    //
-    loadButtonWithText();
-    canvas.target(existingButton).inX(0.5).outY(S + 1).move();
-    canvas.click();
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Composite>",
-        "  <Composite.layout>",
-        "    <GridLayout/>",
-        "  </Composite.layout>",
-        "  <Button wbp:name='existingButton' text='Existing Button'/>",
-        "  <Button text='New Button'/>",
-        "</Composite>");
-  }
+	public void test_CREATE_appendToColumn_1x0() throws Exception {
+		openEditor(
+				"// filler filler filler filler filler",
+				"<Composite>",
+				"  <Composite.layout>",
+				"    <GridLayout/>",
+				"  </Composite.layout>",
+				"  <Button wbp:name='existingButton' text='Existing Button'/>",
+				"</Composite>");
+		XmlObjectInfo existingButton = getObjectByName("existingButton");
+		//
+		loadButtonWithText();
+		canvas.target(existingButton).inX(0.5).outY(S + 1).move();
+		canvas.click();
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Composite>",
+				"  <Composite.layout>",
+				"    <GridLayout/>",
+				"  </Composite.layout>",
+				"  <Button wbp:name='existingButton' text='Existing Button'/>",
+				"  <Button text='New Button'/>",
+				"</Composite>");
+	}
 
-  public void test_CREATE_appendToRow_0x1() throws Exception {
-    openEditor(
-        "// filler filler filler filler filler",
-        "<Composite>",
-        "  <Composite.layout>",
-        "    <GridLayout/>",
-        "  </Composite.layout>",
-        "  <Button wbp:name='existingButton' text='Existing Button'/>",
-        "</Composite>");
-    XmlObjectInfo existingButton = getObjectByName("existingButton");
-    //
-    loadButtonWithText();
-    canvas.target(existingButton).inY(0.5).outX(S + 1).move();
-    canvas.click();
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Composite>",
-        "  <Composite.layout>",
-        "    <GridLayout numColumns='2'/>",
-        "  </Composite.layout>",
-        "  <Button wbp:name='existingButton' text='Existing Button'/>",
-        "  <Button text='New Button'/>",
-        "</Composite>");
-  }
+	public void test_CREATE_appendToRow_0x1() throws Exception {
+		openEditor(
+				"// filler filler filler filler filler",
+				"<Composite>",
+				"  <Composite.layout>",
+				"    <GridLayout/>",
+				"  </Composite.layout>",
+				"  <Button wbp:name='existingButton' text='Existing Button'/>",
+				"</Composite>");
+		XmlObjectInfo existingButton = getObjectByName("existingButton");
+		//
+		loadButtonWithText();
+		canvas.target(existingButton).inY(0.5).outX(S + 1).move();
+		canvas.click();
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Composite>",
+				"  <Composite.layout>",
+				"    <GridLayout numColumns='2'/>",
+				"  </Composite.layout>",
+				"  <Button wbp:name='existingButton' text='Existing Button'/>",
+				"  <Button text='New Button'/>",
+				"</Composite>");
+	}
 
-  public void test_CREATE_beforeFirstRow() throws Exception {
-    openEditor(
-        "// filler filler filler filler filler",
-        "<Composite>",
-        "  <Composite.layout>",
-        "    <GridLayout/>",
-        "  </Composite.layout>",
-        "  <Button wbp:name='existingButton' text='Existing Button'/>",
-        "</Composite>");
-    XmlObjectInfo existingButton = getObjectByName("existingButton");
-    //
-    loadButtonWithText();
-    canvas.target(existingButton).inX(0.5).outY(-2).move();
-    canvas.click();
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Composite>",
-        "  <Composite.layout>",
-        "    <GridLayout/>",
-        "  </Composite.layout>",
-        "  <Button text='New Button'/>",
-        "  <Button wbp:name='existingButton' text='Existing Button'/>",
-        "</Composite>");
-  }
+	public void test_CREATE_beforeFirstRow() throws Exception {
+		openEditor(
+				"// filler filler filler filler filler",
+				"<Composite>",
+				"  <Composite.layout>",
+				"    <GridLayout/>",
+				"  </Composite.layout>",
+				"  <Button wbp:name='existingButton' text='Existing Button'/>",
+				"</Composite>");
+		XmlObjectInfo existingButton = getObjectByName("existingButton");
+		//
+		loadButtonWithText();
+		canvas.target(existingButton).inX(0.5).outY(-2).move();
+		canvas.click();
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Composite>",
+				"  <Composite.layout>",
+				"    <GridLayout/>",
+				"  </Composite.layout>",
+				"  <Button text='New Button'/>",
+				"  <Button wbp:name='existingButton' text='Existing Button'/>",
+				"</Composite>");
+	}
 
-  public void test_CREATE_beforeFirstColumn() throws Exception {
-    openEditor(
-        "// filler filler filler filler filler",
-        "<Composite>",
-        "  <Composite.layout>",
-        "    <GridLayout/>",
-        "  </Composite.layout>",
-        "  <Button wbp:name='existingButton' text='Existing Button'/>",
-        "</Composite>");
-    XmlObjectInfo existingButton = getObjectByName("existingButton");
-    //
-    loadButtonWithText();
-    canvas.target(existingButton).inY(0.5).outX(-2).move();
-    canvas.click();
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Composite>",
-        "  <Composite.layout>",
-        "    <GridLayout numColumns='2'/>",
-        "  </Composite.layout>",
-        "  <Button text='New Button'/>",
-        "  <Button wbp:name='existingButton' text='Existing Button'/>",
-        "</Composite>");
-  }
+	public void test_CREATE_beforeFirstColumn() throws Exception {
+		openEditor(
+				"// filler filler filler filler filler",
+				"<Composite>",
+				"  <Composite.layout>",
+				"    <GridLayout/>",
+				"  </Composite.layout>",
+				"  <Button wbp:name='existingButton' text='Existing Button'/>",
+				"</Composite>");
+		XmlObjectInfo existingButton = getObjectByName("existingButton");
+		//
+		loadButtonWithText();
+		canvas.target(existingButton).inY(0.5).outX(-2).move();
+		canvas.click();
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Composite>",
+				"  <Composite.layout>",
+				"    <GridLayout numColumns='2'/>",
+				"  </Composite.layout>",
+				"  <Button text='New Button'/>",
+				"  <Button wbp:name='existingButton' text='Existing Button'/>",
+				"</Composite>");
+	}
 
-  public void test_CREATE_insertColumn() throws Exception {
-    openEditor(
-        "// filler filler filler filler filler",
-        "<Composite>",
-        "  <Composite.layout>",
-        "    <GridLayout numColumns='2'/>",
-        "  </Composite.layout>",
-        "  <Button wbp:name='button_1' text='Button 1'/>",
-        "  <Button wbp:name='button_2' text='Button 2'/>",
-        "</Composite>");
-    XmlObjectInfo button_1 = getObjectByName("button_1");
-    //
-    loadButtonWithText();
-    canvas.target(button_1).inY(0.5).outX(S / 2).move();
-    canvas.click();
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Composite>",
-        "  <Composite.layout>",
-        "    <GridLayout numColumns='3'/>",
-        "  </Composite.layout>",
-        "  <Button wbp:name='button_1' text='Button 1'/>",
-        "  <Button text='New Button'/>",
-        "  <Button wbp:name='button_2' text='Button 2'/>",
-        "</Composite>");
-  }
+	public void test_CREATE_insertColumn() throws Exception {
+		openEditor(
+				"// filler filler filler filler filler",
+				"<Composite>",
+				"  <Composite.layout>",
+				"    <GridLayout numColumns='2'/>",
+				"  </Composite.layout>",
+				"  <Button wbp:name='button_1' text='Button 1'/>",
+				"  <Button wbp:name='button_2' text='Button 2'/>",
+				"</Composite>");
+		XmlObjectInfo button_1 = getObjectByName("button_1");
+		//
+		loadButtonWithText();
+		canvas.target(button_1).inY(0.5).outX(S / 2).move();
+		canvas.click();
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Composite>",
+				"  <Composite.layout>",
+				"    <GridLayout numColumns='3'/>",
+				"  </Composite.layout>",
+				"  <Button wbp:name='button_1' text='Button 1'/>",
+				"  <Button text='New Button'/>",
+				"  <Button wbp:name='button_2' text='Button 2'/>",
+				"</Composite>");
+	}
 
-  public void test_CREATE_insertRow() throws Exception {
-    openEditor(
-        "// filler filler filler filler filler",
-        "<Composite>",
-        "  <Composite.layout>",
-        "    <GridLayout/>",
-        "  </Composite.layout>",
-        "  <Button wbp:name='button_1' text='Button 1'/>",
-        "  <Button wbp:name='button_2' text='Button 2'/>",
-        "</Composite>");
-    XmlObjectInfo button_1 = getObjectByName("button_1");
-    //
-    loadButtonWithText();
-    canvas.target(button_1).inX(0.5).outY(S / 2).move();
-    canvas.click();
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Composite>",
-        "  <Composite.layout>",
-        "    <GridLayout/>",
-        "  </Composite.layout>",
-        "  <Button wbp:name='button_1' text='Button 1'/>",
-        "  <Button text='New Button'/>",
-        "  <Button wbp:name='button_2' text='Button 2'/>",
-        "</Composite>");
-  }
+	public void test_CREATE_insertRow() throws Exception {
+		openEditor(
+				"// filler filler filler filler filler",
+				"<Composite>",
+				"  <Composite.layout>",
+				"    <GridLayout/>",
+				"  </Composite.layout>",
+				"  <Button wbp:name='button_1' text='Button 1'/>",
+				"  <Button wbp:name='button_2' text='Button 2'/>",
+				"</Composite>");
+		XmlObjectInfo button_1 = getObjectByName("button_1");
+		//
+		loadButtonWithText();
+		canvas.target(button_1).inX(0.5).outY(S / 2).move();
+		canvas.click();
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Composite>",
+				"  <Composite.layout>",
+				"    <GridLayout/>",
+				"  </Composite.layout>",
+				"  <Button wbp:name='button_1' text='Button 1'/>",
+				"  <Button text='New Button'/>",
+				"  <Button wbp:name='button_2' text='Button 2'/>",
+				"</Composite>");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // PASTE
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_PASTE_virtual_1x0() throws Exception {
-    openEditor(
-        "// filler filler filler filler filler",
-        "<Composite>",
-        "  <Composite.layout>",
-        "    <GridLayout/>",
-        "  </Composite.layout>",
-        "  <Button wbp:name='existingButton' text='My Button'/>",
-        "</Composite>");
-    XmlObjectInfo existingButton = getObjectByName("existingButton");
-    //
-    doCopyPaste(existingButton);
-    canvas.target(existingButton).inX(0.5).outY(S + 1).move();
-    canvas.click();
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Composite>",
-        "  <Composite.layout>",
-        "    <GridLayout/>",
-        "  </Composite.layout>",
-        "  <Button wbp:name='existingButton' text='My Button'/>",
-        "  <Button text='My Button'/>",
-        "</Composite>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// PASTE
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_PASTE_virtual_1x0() throws Exception {
+		openEditor(
+				"// filler filler filler filler filler",
+				"<Composite>",
+				"  <Composite.layout>",
+				"    <GridLayout/>",
+				"  </Composite.layout>",
+				"  <Button wbp:name='existingButton' text='My Button'/>",
+				"</Composite>");
+		XmlObjectInfo existingButton = getObjectByName("existingButton");
+		//
+		doCopyPaste(existingButton);
+		canvas.target(existingButton).inX(0.5).outY(S + 1).move();
+		canvas.click();
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Composite>",
+				"  <Composite.layout>",
+				"    <GridLayout/>",
+				"  </Composite.layout>",
+				"  <Button wbp:name='existingButton' text='My Button'/>",
+				"  <Button text='My Button'/>",
+				"</Composite>");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // MOVE
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_MOVE_virtual_1x0() throws Exception {
-    openEditor(
-        "// filler filler filler filler filler",
-        "<Composite>",
-        "  <Composite.layout>",
-        "    <GridLayout/>",
-        "  </Composite.layout>",
-        "  <Button wbp:name='button' text='Button'/>",
-        "</Composite>");
-    XmlObjectInfo button = getObjectByName("button");
-    //
-    canvas.beginDrag(button);
-    canvas.target(button).inX(0.5).outY(S + 1).drag();
-    canvas.endDrag();
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Composite>",
-        "  <Composite.layout>",
-        "    <GridLayout/>",
-        "  </Composite.layout>",
-        "  <Label/>",
-        "  <Button wbp:name='button' text='Button'/>",
-        "</Composite>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// MOVE
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_MOVE_virtual_1x0() throws Exception {
+		openEditor(
+				"// filler filler filler filler filler",
+				"<Composite>",
+				"  <Composite.layout>",
+				"    <GridLayout/>",
+				"  </Composite.layout>",
+				"  <Button wbp:name='button' text='Button'/>",
+				"</Composite>");
+		XmlObjectInfo button = getObjectByName("button");
+		//
+		canvas.beginDrag(button);
+		canvas.target(button).inX(0.5).outY(S + 1).drag();
+		canvas.endDrag();
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Composite>",
+				"  <Composite.layout>",
+				"    <GridLayout/>",
+				"  </Composite.layout>",
+				"  <Label/>",
+				"  <Button wbp:name='button' text='Button'/>",
+				"</Composite>");
+	}
 
-  public void test_ADD_virtual_0x0() throws Exception {
-    openEditor(
-        "// filler filler filler filler filler",
-        "<Composite>",
-        "  <Composite.layout>",
-        "    <FillLayout/>",
-        "  </Composite.layout>",
-        "  <Button wbp:name='button' text='Button'/>",
-        "  <Composite wbp:name='composite'>",
-        "    <Composite.layout>",
-        "      <GridLayout/>",
-        "    </Composite.layout>",
-        "  </Composite>",
-        "</Composite>");
-    XmlObjectInfo button = getObjectByName("button");
-    XmlObjectInfo composite = getObjectByName("composite");
-    //
-    canvas.beginDrag(button);
-    canvas.dragTo(composite, M + VS / 2, M + VS / 2);
-    canvas.endDrag();
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Composite>",
-        "  <Composite.layout>",
-        "    <FillLayout/>",
-        "  </Composite.layout>",
-        "  <Composite wbp:name='composite'>",
-        "    <Composite.layout>",
-        "      <GridLayout/>",
-        "    </Composite.layout>",
-        "    <Button wbp:name='button' text='Button'/>",
-        "  </Composite>",
-        "</Composite>");
-  }
+	public void test_ADD_virtual_0x0() throws Exception {
+		openEditor(
+				"// filler filler filler filler filler",
+				"<Composite>",
+				"  <Composite.layout>",
+				"    <FillLayout/>",
+				"  </Composite.layout>",
+				"  <Button wbp:name='button' text='Button'/>",
+				"  <Composite wbp:name='composite'>",
+				"    <Composite.layout>",
+				"      <GridLayout/>",
+				"    </Composite.layout>",
+				"  </Composite>",
+				"</Composite>");
+		XmlObjectInfo button = getObjectByName("button");
+		XmlObjectInfo composite = getObjectByName("composite");
+		//
+		canvas.beginDrag(button);
+		canvas.dragTo(composite, M + VS / 2, M + VS / 2);
+		canvas.endDrag();
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Composite>",
+				"  <Composite.layout>",
+				"    <FillLayout/>",
+				"  </Composite.layout>",
+				"  <Composite wbp:name='composite'>",
+				"    <Composite.layout>",
+				"      <GridLayout/>",
+				"    </Composite.layout>",
+				"    <Button wbp:name='button' text='Button'/>",
+				"  </Composite>",
+				"</Composite>");
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/layout/grid/GridLayoutParametersTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/layout/grid/GridLayoutParametersTest.java
index d34e058d6..eebf7efe9 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/layout/grid/GridLayoutParametersTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/layout/grid/GridLayoutParametersTest.java
@@ -28,249 +28,249 @@
  * @author scheglov_ke
  */
 public class GridLayoutParametersTest extends XwtModelTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * {@link Text} widget is marked as required horizontal grab/fill.
-   */
-  public void test_CREATE_Text() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "</Shell>");
-    refresh();
-    GridLayoutInfo layout = getObjectByName("layout");
-    //
-    ControlInfo newText = createObject("org.eclipse.swt.widgets.Text");
-    layout.command_CREATE(newText, 0, false, 0, false);
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Text x:Style='BORDER'>",
-        "    <Text.layoutData>",
-        "      <GridData grabExcessHorizontalSpace='true' horizontalAlignment='FILL'/>",
-        "    </Text.layoutData>",
-        "  </Text>",
-        "</Shell>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * {@link Text} widget is marked as required horizontal grab/fill.
+	 */
+	public void test_CREATE_Text() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"</Shell>");
+		refresh();
+		GridLayoutInfo layout = getObjectByName("layout");
+		//
+		ControlInfo newText = createObject("org.eclipse.swt.widgets.Text");
+		layout.command_CREATE(newText, 0, false, 0, false);
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Text x:Style='BORDER'>",
+				"    <Text.layoutData>",
+				"      <GridData grabExcessHorizontalSpace='true' horizontalAlignment='FILL'/>",
+				"    </Text.layoutData>",
+				"  </Text>",
+				"</Shell>");
+	}
 
-  /**
-   * Test that horizontal grab/fill {@link Text} can be disabled.
-   */
-  public void test_CREATE_Text_disabled() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "</Shell>");
-    refresh();
-    GridLayoutInfo layout = getObjectByName("layout");
-    //
-    PreferencesRepairer preferences =
-        new PreferencesRepairer(ToolkitProvider.DESCRIPTION.getPreferences());
-    try {
-      preferences.setValue(IPreferenceConstants.P_ENABLE_GRAB, false);
-      ControlInfo newText = createObject("org.eclipse.swt.widgets.Text");
-      layout.command_CREATE(newText, 0, false, 0, false);
-      assertXML(
-          "// filler filler filler filler filler",
-          "<Shell>",
-          "  <Shell.layout>",
-          "    <GridLayout wbp:name='layout'/>",
-          "  </Shell.layout>",
-          "  <Text x:Style='BORDER'/>",
-          "</Shell>");
-    } finally {
-      preferences.restore();
-    }
-  }
+	/**
+	 * Test that horizontal grab/fill {@link Text} can be disabled.
+	 */
+	public void test_CREATE_Text_disabled() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"</Shell>");
+		refresh();
+		GridLayoutInfo layout = getObjectByName("layout");
+		//
+		PreferencesRepairer preferences =
+				new PreferencesRepairer(ToolkitProvider.DESCRIPTION.getPreferences());
+		try {
+			preferences.setValue(IPreferenceConstants.P_ENABLE_GRAB, false);
+			ControlInfo newText = createObject("org.eclipse.swt.widgets.Text");
+			layout.command_CREATE(newText, 0, false, 0, false);
+			assertXML(
+					"// filler filler filler filler filler",
+					"<Shell>",
+					"  <Shell.layout>",
+					"    <GridLayout wbp:name='layout'/>",
+					"  </Shell.layout>",
+					"  <Text x:Style='BORDER'/>",
+					"</Shell>");
+		} finally {
+			preferences.restore();
+		}
+	}
 
-  /**
-   * {@link Table} widget is marked as required horizontal/vertical grab/fill.
-   */
-  public void test_CREATE_Table() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "</Shell>");
-    refresh();
-    GridLayoutInfo layout = getObjectByName("layout");
-    //
-    ControlInfo newTable = createObject("org.eclipse.swt.widgets.Table");
-    layout.command_CREATE(newTable, 0, false, 0, false);
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Table x:Style='BORDER | FULL_SELECTION' linesVisible='true' headerVisible='true'>",
-        "    <Table.layoutData>",
-        "      <GridData grabExcessHorizontalSpace='true' horizontalAlignment='FILL'"
-            + " grabExcessVerticalSpace='true' verticalAlignment='FILL'/>",
-        "    </Table.layoutData>",
-        "  </Table>",
-        "</Shell>");
-  }
+	/**
+	 * {@link Table} widget is marked as required horizontal/vertical grab/fill.
+	 */
+	public void test_CREATE_Table() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"</Shell>");
+		refresh();
+		GridLayoutInfo layout = getObjectByName("layout");
+		//
+		ControlInfo newTable = createObject("org.eclipse.swt.widgets.Table");
+		layout.command_CREATE(newTable, 0, false, 0, false);
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Table x:Style='BORDER | FULL_SELECTION' linesVisible='true' headerVisible='true'>",
+				"    <Table.layoutData>",
+				"      <GridData grabExcessHorizontalSpace='true' horizontalAlignment='FILL'"
+						+ " grabExcessVerticalSpace='true' verticalAlignment='FILL'/>",
+						"    </Table.layoutData>",
+						"  </Table>",
+				"</Shell>");
+	}
 
-  /**
-   * {@link Label} widget is marked as "right" aligned and next widget is {@link Text}, so when add
-   * {@link Label} before {@link Text}, use {@link GridData#END} alignment.
-   */
-  public void test_CREATE_LabelBeforeText() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Text/>",
-        "</Shell>");
-    refresh();
-    GridLayoutInfo layout = getObjectByName("layout");
-    //
-    ControlInfo newLabel = createObject("org.eclipse.swt.widgets.Label");
-    layout.command_CREATE(newLabel, 0, true, 0, false);
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Label text='New Label'>",
-        "    <Label.layoutData>",
-        "      <GridData horizontalAlignment='RIGHT'/>",
-        "    </Label.layoutData>",
-        "  </Label>",
-        "  <Text/>",
-        "</Shell>");
-  }
+	/**
+	 * {@link Label} widget is marked as "right" aligned and next widget is {@link Text}, so when add
+	 * {@link Label} before {@link Text}, use {@link GridData#END} alignment.
+	 */
+	public void test_CREATE_LabelBeforeText() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Text/>",
+				"</Shell>");
+		refresh();
+		GridLayoutInfo layout = getObjectByName("layout");
+		//
+		ControlInfo newLabel = createObject("org.eclipse.swt.widgets.Label");
+		layout.command_CREATE(newLabel, 0, true, 0, false);
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Label text='New Label'>",
+				"    <Label.layoutData>",
+				"      <GridData horizontalAlignment='RIGHT'/>",
+				"    </Label.layoutData>",
+				"  </Label>",
+				"  <Text/>",
+				"</Shell>");
+	}
 
-  /**
-   * Check that automatic "right alignment" feature for {@link Label} can be disabled.
-   */
-  public void test_CREATE_LabelBeforeText_disabled() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Text/>",
-        "</Shell>");
-    refresh();
-    GridLayoutInfo layout = getObjectByName("layout");
-    //
-    PreferencesRepairer preferences =
-        new PreferencesRepairer(ToolkitProvider.DESCRIPTION.getPreferences());
-    try {
-      preferences.setValue(IPreferenceConstants.P_ENABLE_RIGHT_ALIGNMENT, false);
-      ControlInfo newLabel = createObject("org.eclipse.swt.widgets.Label");
-      layout.command_CREATE(newLabel, 0, true, 0, false);
-      assertXML(
-          "// filler filler filler filler filler",
-          "<Shell>",
-          "  <Shell.layout>",
-          "    <GridLayout wbp:name='layout' numColumns='2'/>",
-          "  </Shell.layout>",
-          "  <Label text='New Label'/>",
-          "  <Text/>",
-          "</Shell>");
-    } finally {
-      preferences.restore();
-    }
-  }
+	/**
+	 * Check that automatic "right alignment" feature for {@link Label} can be disabled.
+	 */
+	public void test_CREATE_LabelBeforeText_disabled() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Text/>",
+				"</Shell>");
+		refresh();
+		GridLayoutInfo layout = getObjectByName("layout");
+		//
+		PreferencesRepairer preferences =
+				new PreferencesRepairer(ToolkitProvider.DESCRIPTION.getPreferences());
+		try {
+			preferences.setValue(IPreferenceConstants.P_ENABLE_RIGHT_ALIGNMENT, false);
+			ControlInfo newLabel = createObject("org.eclipse.swt.widgets.Label");
+			layout.command_CREATE(newLabel, 0, true, 0, false);
+			assertXML(
+					"// filler filler filler filler filler",
+					"<Shell>",
+					"  <Shell.layout>",
+					"    <GridLayout wbp:name='layout' numColumns='2'/>",
+					"  </Shell.layout>",
+					"  <Label text='New Label'/>",
+					"  <Text/>",
+					"</Shell>");
+		} finally {
+			preferences.restore();
+		}
+	}
 
-  /**
-   * {@link Label} widget is marked as "right" aligned and next widget is {@link Text}, so when add
-   * {@link Text} after {@link Label}, use {@link GridData#END} alignment for {@link Label}.
-   */
-  public void test_CREATE_Text_afterLabel() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Label text='New Label'/>",
-        "</Shell>");
-    refresh();
-    GridLayoutInfo layout = getObjectByName("layout");
-    //
-    ControlInfo newText = createObject("org.eclipse.swt.widgets.Text");
-    layout.command_CREATE(newText, 1, false, 0, false);
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Label text='New Label'>",
-        "    <Label.layoutData>",
-        "      <GridData horizontalAlignment='RIGHT'/>",
-        "    </Label.layoutData>",
-        "  </Label>",
-        "  <Text x:Style='BORDER'>",
-        "    <Text.layoutData>",
-        "      <GridData grabExcessHorizontalSpace='true' horizontalAlignment='FILL'/>",
-        "    </Text.layoutData>",
-        "  </Text>",
-        "</Shell>");
-  }
+	/**
+	 * {@link Label} widget is marked as "right" aligned and next widget is {@link Text}, so when add
+	 * {@link Text} after {@link Label}, use {@link GridData#END} alignment for {@link Label}.
+	 */
+	public void test_CREATE_Text_afterLabel() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Label text='New Label'/>",
+				"</Shell>");
+		refresh();
+		GridLayoutInfo layout = getObjectByName("layout");
+		//
+		ControlInfo newText = createObject("org.eclipse.swt.widgets.Text");
+		layout.command_CREATE(newText, 1, false, 0, false);
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Label text='New Label'>",
+				"    <Label.layoutData>",
+				"      <GridData horizontalAlignment='RIGHT'/>",
+				"    </Label.layoutData>",
+				"  </Label>",
+				"  <Text x:Style='BORDER'>",
+				"    <Text.layoutData>",
+				"      <GridData grabExcessHorizontalSpace='true' horizontalAlignment='FILL'/>",
+				"    </Text.layoutData>",
+				"  </Text>",
+				"</Shell>");
+	}
 
-  /**
-   * When we add {@link Text} after "filler" {@link Label}, we should not change its alignment.
-   */
-  public void test_CREATE_Text_afterFiller() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Label/>",
-        "  <Label/>",
-        "</Shell>");
-    refresh();
-    GridLayoutInfo layout = getObjectByName("layout");
-    //
-    ControlInfo newText = createObject("org.eclipse.swt.widgets.Text");
-    layout.command_CREATE(newText, 1, false, 0, false);
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Label/>",
-        "  <Text x:Style='BORDER'>",
-        "    <Text.layoutData>",
-        "      <GridData grabExcessHorizontalSpace='true' horizontalAlignment='FILL'/>",
-        "    </Text.layoutData>",
-        "  </Text>",
-        "</Shell>");
-  }
+	/**
+	 * When we add {@link Text} after "filler" {@link Label}, we should not change its alignment.
+	 */
+	public void test_CREATE_Text_afterFiller() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Label/>",
+				"  <Label/>",
+				"</Shell>");
+		refresh();
+		GridLayoutInfo layout = getObjectByName("layout");
+		//
+		ControlInfo newText = createObject("org.eclipse.swt.widgets.Text");
+		layout.command_CREATE(newText, 1, false, 0, false);
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Label/>",
+				"  <Text x:Style='BORDER'>",
+				"    <Text.layoutData>",
+				"      <GridData grabExcessHorizontalSpace='true' horizontalAlignment='FILL'/>",
+				"    </Text.layoutData>",
+				"  </Text>",
+				"</Shell>");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/layout/grid/GridLayoutSelectionActionsTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/layout/grid/GridLayoutSelectionActionsTest.java
index abb0b9c1d..f0d432f8a 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/layout/grid/GridLayoutSelectionActionsTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/layout/grid/GridLayoutSelectionActionsTest.java
@@ -26,153 +26,153 @@
  * @author scheglov_ke
  */
 public class GridLayoutSelectionActionsTest extends XwtModelTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_emptySelection() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout/>",
-        "  </Shell.layout>",
-        "</Shell>");
-    refresh();
-    // prepare actions
-    List<Object> actions = getSelectionActions();
-    // no actions
-    assertThat(actions).isEmpty();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_emptySelection() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout/>",
+				"  </Shell.layout>",
+				"</Shell>");
+		refresh();
+		// prepare actions
+		List<Object> actions = getSelectionActions();
+		// no actions
+		assertThat(actions).isEmpty();
+	}
 
-  public void test_selectionActions() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Label wbp:name='label'/>",
-        "  <Button wbp:name='button'>",
-        "    <Button.layoutData>",
-        "      <GridData grabExcessHorizontalSpace='true'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "</Shell>");
-    refresh();
-    ControlInfo label = getObjectByName("label");
-    ControlInfo button = getObjectByName("button");
-    // prepare actions for: button
-    List<Object> actions = getSelectionActions(button);
-    // check actions
-    assertEquals(13, actions.size()); // 10 action's, 3 separator's
-    assertNotNull(findAction(actions, "Left"));
-    assertTrue(findAction(actions, "Left").isChecked());
-    assertNotNull(findAction(actions, "Center"));
-    assertFalse(findAction(actions, "Center").isChecked());
-    assertNotNull(findAction(actions, "Right"));
-    assertFalse(findAction(actions, "Right").isChecked());
-    assertNotNull(findAction(actions, "Fill"));
-    assertFalse(findAction(actions, "Fill").isChecked());
-    assertNotNull(findAction(actions, "Top"));
-    assertNotNull(findAction(actions, "Bottom"));
-    assertNotNull(findAction(actions, "Horizontal grab"));
-    assertNotNull(findAction(actions, "Vertical grab"));
-    assertTrue(findAction(actions, "Horizontal grab").isChecked());
-    assertFalse(findAction(actions, "Vertical grab").isChecked());
-    // prepare actions for: label, button
-    actions = getSelectionActions(label, button);
-    // check calculate common properties
-    assertFalse(findAction(actions, "Horizontal grab").isChecked());
-  }
+	public void test_selectionActions() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Label wbp:name='label'/>",
+				"  <Button wbp:name='button'>",
+				"    <Button.layoutData>",
+				"      <GridData grabExcessHorizontalSpace='true'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"</Shell>");
+		refresh();
+		ControlInfo label = getObjectByName("label");
+		ControlInfo button = getObjectByName("button");
+		// prepare actions for: button
+		List<Object> actions = getSelectionActions(button);
+		// check actions
+		assertEquals(13, actions.size()); // 10 action's, 3 separator's
+		assertNotNull(findAction(actions, "Left"));
+		assertTrue(findAction(actions, "Left").isChecked());
+		assertNotNull(findAction(actions, "Center"));
+		assertFalse(findAction(actions, "Center").isChecked());
+		assertNotNull(findAction(actions, "Right"));
+		assertFalse(findAction(actions, "Right").isChecked());
+		assertNotNull(findAction(actions, "Fill"));
+		assertFalse(findAction(actions, "Fill").isChecked());
+		assertNotNull(findAction(actions, "Top"));
+		assertNotNull(findAction(actions, "Bottom"));
+		assertNotNull(findAction(actions, "Horizontal grab"));
+		assertNotNull(findAction(actions, "Vertical grab"));
+		assertTrue(findAction(actions, "Horizontal grab").isChecked());
+		assertFalse(findAction(actions, "Vertical grab").isChecked());
+		// prepare actions for: label, button
+		actions = getSelectionActions(label, button);
+		// check calculate common properties
+		assertFalse(findAction(actions, "Horizontal grab").isChecked());
+	}
 
-  public void test_grabAction() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'>",
-        "    <Button.layoutData>",
-        "      <GridData grabExcessHorizontalSpace='true'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "</Shell>");
-    refresh();
-    ControlInfo button = getObjectByName("button");
-    // prepare actions: button
-    List<Object> actions = getSelectionActions(button);
-    // use "grab" actions
-    {
-      IAction verticalGrab = findAction(actions, "Vertical grab");
-      verticalGrab.setChecked(true);
-      verticalGrab.run();
-    }
-    {
-      IAction horizontalGrab = findAction(actions, "Horizontal grab");
-      horizontalGrab.setChecked(false);
-      horizontalGrab.run();
-    }
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'>",
-        "    <Button.layoutData>",
-        "      <GridData grabExcessVerticalSpace='true'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "</Shell>");
-  }
+	public void test_grabAction() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'>",
+				"    <Button.layoutData>",
+				"      <GridData grabExcessHorizontalSpace='true'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"</Shell>");
+		refresh();
+		ControlInfo button = getObjectByName("button");
+		// prepare actions: button
+		List<Object> actions = getSelectionActions(button);
+		// use "grab" actions
+		{
+			IAction verticalGrab = findAction(actions, "Vertical grab");
+			verticalGrab.setChecked(true);
+			verticalGrab.run();
+		}
+		{
+			IAction horizontalGrab = findAction(actions, "Horizontal grab");
+			horizontalGrab.setChecked(false);
+			horizontalGrab.run();
+		}
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'>",
+				"    <Button.layoutData>",
+				"      <GridData grabExcessVerticalSpace='true'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"</Shell>");
+	}
 
-  public void test_alignmentAction() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    refresh();
-    ControlInfo button = getObjectByName("button");
-    // prepare actions: button
-    List<Object> actions = getSelectionActions(button);
-    // use "alignment" actions
-    {
-      IAction rightAlignment = findAction(actions, "Right");
-      rightAlignment.setChecked(true);
-      rightAlignment.run();
-    }
-    {
-      IAction bottomAction = findAction(actions, "Bottom");
-      bottomAction.setChecked(true);
-      bottomAction.run();
-    }
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'>",
-        "    <Button.layoutData>",
-        "      <GridData horizontalAlignment='RIGHT' verticalAlignment='BOTTOM'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "</Shell>");
-  }
+	public void test_alignmentAction() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		refresh();
+		ControlInfo button = getObjectByName("button");
+		// prepare actions: button
+		List<Object> actions = getSelectionActions(button);
+		// use "alignment" actions
+		{
+			IAction rightAlignment = findAction(actions, "Right");
+			rightAlignment.setChecked(true);
+			rightAlignment.run();
+		}
+		{
+			IAction bottomAction = findAction(actions, "Bottom");
+			bottomAction.setChecked(true);
+			bottomAction.run();
+		}
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'>",
+				"    <Button.layoutData>",
+				"      <GridData horizontalAlignment='RIGHT' verticalAlignment='BOTTOM'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"</Shell>");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/layout/grid/GridLayoutTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/layout/grid/GridLayoutTest.java
index 7bca0d969..47fe5db85 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/layout/grid/GridLayoutTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/layout/grid/GridLayoutTest.java
@@ -45,2301 +45,2301 @@
  * @author scheglov_ke
  */
 public class GridLayoutTest extends XwtModelTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Images
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_images() throws Exception {
-    assertNotNull(GridImages.getImage("h/left.gif"));
-    assertNotNull(GridImages.getImageDescriptor("v/top.gif"));
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for parsing empty {@link GridLayoutInfo}.
-   */
-  public void test_parseEmpty() throws Exception {
-    CompositeInfo shell =
-        parse(
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <GridLayout/>",
-            "  </Shell.layout>",
-            "</Shell>");
-    shell.refresh();
-    shell.refresh_dispose();
-  }
-
-  /**
-   * Fillers should be filtered out from presentation children.
-   */
-  public void test_excludeFillersFromPresentationChildren_1() throws Exception {
-    CompositeInfo shell =
-        parse(
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <GridLayout/>",
-            "  </Shell.layout>",
-            "  <Button wbp:name='button'/>",
-            "  <Label/>",
-            "</Shell>");
-    refresh();
-    ControlInfo button = shell.getChildrenControls().get(0);
-    ControlInfo filler = shell.getChildrenControls().get(1);
-    //
-    IObjectPresentation presentation = shell.getPresentation();
-    {
-      List<ObjectInfo> presentationChildren = presentation.getChildrenTree();
-      assertThat(presentationChildren).contains(button).doesNotContain(filler);
-    }
-    {
-      List<ObjectInfo> presentationChildren = presentation.getChildrenGraphical();
-      assertThat(presentationChildren).contains(button).doesNotContain(filler);
-    }
-  }
-
-  /**
-   * <code>Label</code> with <code>setText()</code> is not filler, it is normal control.
-   */
-  public void test_fillersWith_setText() throws Exception {
-    CompositeInfo shell =
-        parse(
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <GridLayout/>",
-            "  </Shell.layout>",
-            "  <Label wbp:name='label' text='txt'/>",
-            "</Shell>");
-    refresh();
-    ControlInfo label = getObjectByName("label");
-    //
-    IObjectPresentation presentation = shell.getPresentation();
-    {
-      List<ObjectInfo> presentationChildren = presentation.getChildrenTree();
-      assertThat(presentationChildren).contains(label);
-    }
-    {
-      List<ObjectInfo> presentationChildren = presentation.getChildrenGraphical();
-      assertThat(presentationChildren).contains(label);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // fixGrid()
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * No controls, no changes expected.
-   */
-  public void test_fixGrid_noControls() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "</Shell>");
-    refresh();
-    GridLayoutInfo layout = getObjectByName("layout");
-    // do "fix"
-    ReflectionUtils.invokeMethod(layout, "fixGrid()");
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "</Shell>");
-  }
-
-  /**
-   * It is possible that there are existing {@link Control}-s created in superclass. We should not
-   * try to "fix" this by adding fillers.
-   */
-  public void test_fixGrid_leadingImplicitControls() throws Exception {
-    setFileContentSrc(
-        "test/MyShell.java",
-        getJavaSource(
-            "public class MyShell extends Shell {",
-            "  public MyShell() {",
-            "    setLayout(new GridLayout());",
-            "    new Text(this, SWT.NONE);",
-            "  }",
-            "  protected void checkSubclass() {",
-            "  }",
-            "}"));
-    waitForAutoBuild();
-    //
-    CompositeInfo shell =
-        parse(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<t:MyShell>",
-            "  <Button/>",
-            "</t:MyShell>");
-    refresh();
-    GridLayoutInfo layout = (GridLayoutInfo) shell.getLayout();
-    // do "fix"
-    ReflectionUtils.invokeMethod(layout, "fixGrid()");
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<t:MyShell>",
-        "  <Button/>",
-        "</t:MyShell>");
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IGridInfo
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link IGridInfo}.
-   */
-  public void test_gridInfo() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_0'/>",
-        "  <Label/>",
-        "  <Label/>",
-        "  <Button wbp:name='button_1'/>",
-        "  <Button wbp:name='button_2'>",
-        "    <Button.layoutData>",
-        "      <GridData horizontalSpan='2'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "</Shell>");
-    refresh();
-    GridLayoutInfo layout = getObjectByName("layout");
-    ControlInfo button_0 = getObjectByName("button_0");
-    ControlInfo button_1 = getObjectByName("button_1");
-    ControlInfo button_2 = getObjectByName("button_2");
-    //
-    IGridInfo gridInfo = layout.getGridInfo();
-    assertNotNull(gridInfo);
-    // check count of column/row
-    assertEquals(2, gridInfo.getColumnCount());
-    assertEquals(3, gridInfo.getRowCount());
-    // check column intervals
-    {
-      int[] columnOrigins = layout.getColumnOrigins();
-      Interval[] columnIntervals = gridInfo.getColumnIntervals();
-      assertEquals(columnOrigins.length, columnIntervals.length);
-      for (int i = 0; i < columnOrigins.length; i++) {
-        int origin = columnOrigins[i];
-        Interval interval = columnIntervals[i];
-        assertEquals(origin, interval.begin());
-      }
-    }
-    // check row intervals
-    {
-      int[] rowOrigins = layout.getRowOrigins();
-      Interval[] rowIntervals = gridInfo.getRowIntervals();
-      assertEquals(rowOrigins.length, rowIntervals.length);
-    }
-    // check component cells
-    {
-      assertEquals(new Rectangle(0, 0, 1, 1), gridInfo.getComponentCells(button_0));
-      assertEquals(new Rectangle(1, 1, 1, 1), gridInfo.getComponentCells(button_1));
-      assertEquals(new Rectangle(0, 2, 2, 1), gridInfo.getComponentCells(button_2));
-    }
-    // check cells rectangle
-    {
-      Rectangle rectangle = gridInfo.getCellsRectangle(new Rectangle(0, 0, 1, 1));
-      assertEquals(5, rectangle.x);
-      assertEquals(5, rectangle.y);
-    }
-    // not RTL
-    assertFalse(gridInfo.isRTL());
-    // insets
-    assertEquals(new Insets(0, 0, 0, 0), gridInfo.getInsets());
-    // check "virtual" feedback sizes
-    {
-      assertTrue(gridInfo.hasVirtualColumns());
-      assertTrue(gridInfo.hasVirtualRows());
-      assertEquals(25, gridInfo.getVirtualColumnSize());
-      assertEquals(5, gridInfo.getVirtualColumnGap());
-      assertEquals(25, gridInfo.getVirtualRowSize());
-      assertEquals(5, gridInfo.getVirtualRowGap());
-    }
-    // check occupied cells
-    {
-      assertSame(button_0, gridInfo.getOccupied(0, 0));
-      assertSame(button_1, gridInfo.getOccupied(1, 1));
-      assertSame(button_2, gridInfo.getOccupied(0, 2));
-      assertSame(button_2, gridInfo.getOccupied(1, 2));
-      assertNull(gridInfo.getOccupied(1, 0));
-      assertNull(gridInfo.getOccupied(0, 1));
-    }
-  }
-
-  /**
-   * Test cells when {@link Shell#setSize(int, int)} is used.
-   */
-  public void test_gridInfo2() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell size='300, 200'>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_0'/>",
-        "  <Button wbp:name='button_1'/>",
-        "</Shell>");
-    refresh();
-    GridLayoutInfo layout = getObjectByName("layout");
-    ControlInfo button_0 = getObjectByName("button_0");
-    ControlInfo button_1 = getObjectByName("button_1");
-    //
-    IGridInfo gridInfo = layout.getGridInfo();
-    assertEquals(new Rectangle(0, 0, 1, 1), gridInfo.getComponentCells(button_0));
-    assertEquals(new Rectangle(0, 1, 1, 1), gridInfo.getComponentCells(button_1));
-  }
-
-  /**
-   * Test for {@link IGridInfo} when there are no controls.
-   */
-  public void test_gridInfo_empty() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "</Shell>");
-    refresh();
-    GridLayoutInfo layout = getObjectByName("layout");
-    //
-    IGridInfo gridInfo = layout.getGridInfo();
-    assertEquals(0, gridInfo.getRowIntervals().length);
-    assertEquals(0, gridInfo.getColumnIntervals().length);
-  }
-
-  public void test_gridInfo_tooBigHorizontalSpan() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'>",
-        "    <Button.layoutData>",
-        "      <GridData horizontalSpan='10'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "</Shell>");
-    refresh();
-    GridLayoutInfo layout = getObjectByName("layout");
-    ControlInfo button = getObjectByName("button");
-    //
-    IGridInfo gridInfo = layout.getGridInfo();
-    // check count of column/row
-    assertEquals(1, gridInfo.getColumnCount());
-    assertEquals(1, gridInfo.getRowCount());
-    // check cells
-    assertEquals(new Rectangle(0, 0, 1, 1), gridInfo.getComponentCells(button));
-  }
-
-  /**
-   * Implicit controls also occupy cells.
-   */
-  public void test_gridInfo_implicitControls() throws Exception {
-    prepareShell_withImplicit();
-    CompositeInfo shell =
-        parse(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<t:MyShell>",
-            "  <Button wbp:name='button'/>",
-            "</t:MyShell>");
-    refresh();
-    GridLayoutInfo layout = (GridLayoutInfo) shell.getLayout();
-    ControlInfo button = getObjectByName("button");
-    IGridInfo gridInfo = layout.getGridInfo();
-    // 2x2 grid
-    assertEquals(2, gridInfo.getColumnCount());
-    assertEquals(2, gridInfo.getRowCount());
-    // occupied by implicit and explicit controls
-    assertSame(shell, gridInfo.getOccupied(0, 0));
-    assertSame(shell, gridInfo.getOccupied(1, 0));
-    assertSame(button, gridInfo.getOccupied(0, 1));
-    assertSame(null, gridInfo.getOccupied(1, 1));
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // canManageDimensions()
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link GridLayoutInfo#canChangeDimensions()}.
-   */
-  public void test_canChangeDimensions_explicit() throws Exception {
-    CompositeInfo shell =
-        parse(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <GridLayout/>",
-            "  </Shell.layout>",
-            "</Shell>");
-    refresh();
-    GridLayoutInfo layout = (GridLayoutInfo) shell.getLayout();
-    // is explicit
-    assertTrue(layout.canChangeDimensions());
-  }
-
-  /**
-   * Test for {@link GridLayoutInfo#canChangeDimensions()}.
-   */
-  public void test_canChangeDimensions_implicit() throws Exception {
-    prepareShell_withImplicit();
-    CompositeInfo shell = parse("<t:MyShell/>");
-    refresh();
-    GridLayoutInfo layout = (GridLayoutInfo) shell.getLayout();
-    // is implicit
-    assertFalse(layout.canChangeDimensions());
-  }
-
-  /**
-   * Test for {@link GridLayoutInfo#canChangeDimensions()}.
-   * <p>
-   * {@link GridLayout} is implicit, but there are no implicit {@link Control}s, so it is safe to
-   * change number of columns.
-   */
-  public void test_canChangeDimensions_implicit_withoutControls() throws Exception {
-    prepareShell_withImplicitEmpty();
-    CompositeInfo shell = parse("<t:MyShell/>");
-    refresh();
-    GridLayoutInfo layout = (GridLayoutInfo) shell.getLayout();
-    // is implicit, but no implicit controls
-    assertTrue(layout.canChangeDimensions());
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // setCells()
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_setCells_horizontalSpan() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'/>",
-        "  <Label/>",
-        "  <Button/>",
-        "  <Button/>",
-        "</Shell>");
-    refresh();
-    GridLayoutInfo layout = getObjectByName("layout");
-    ControlInfo button = getObjectByName("button");
-    GridDataInfo gridData = GridLayoutInfo.getGridData(button);
-    // check initial GridData
-    {
-      assertEquals(0, getInt(gridData, "x"));
-      assertEquals(0, getInt(gridData, "y"));
-      assertEquals(1, getInt(gridData, "width"));
-      assertEquals(1, getInt(gridData, "height"));
-    }
-    // set horizontal span
-    layout.command_setCells(button, new Rectangle(0, 0, 2, 1), true);
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'>",
-        "    <Button.layoutData>",
-        "      <GridData horizontalSpan='2'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "  <Button/>",
-        "  <Button/>",
-        "</Shell>");
-    // check GridData
-    {
-      assertEquals(0, getInt(gridData, "x"));
-      assertEquals(0, getInt(gridData, "y"));
-      assertEquals(2, getInt(gridData, "width"));
-      assertEquals(1, getInt(gridData, "height"));
-    }
-  }
-
-  public void test_setCells_horizontalSpan2() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'>",
-        "    <Button.layoutData>",
-        "      <GridData horizontalSpan='2'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "  <Button/>",
-        "  <Button/>",
-        "</Shell>");
-    refresh();
-    GridLayoutInfo layout = getObjectByName("layout");
-    ControlInfo button = getObjectByName("button");
-    //
-    layout.command_setCells(button, new Rectangle(0, 0, 1, 1), true);
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'/>",
-        "  <Label/>",
-        "  <Button/>",
-        "  <Button/>",
-        "</Shell>");
-  }
-
-  public void test_setCells_verticalSpan() throws Exception {
-    parse(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'/>",
-        "  <Button text='0'/>",
-        "  <Label/>",
-        "  <Button text='1'/>",
-        "</Shell>");
-    refresh();
-    GridLayoutInfo layout = getObjectByName("layout");
-    ControlInfo button = getObjectByName("button");
-    GridDataInfo gridData = GridLayoutInfo.getGridData(button);
-    // check initial GridData
-    {
-      assertEquals(0, getInt(gridData, "x"));
-      assertEquals(0, getInt(gridData, "y"));
-      assertEquals(1, getInt(gridData, "width"));
-      assertEquals(1, getInt(gridData, "height"));
-    }
-    // set vertical span
-    layout.command_setCells(button, new Rectangle(0, 0, 1, 2), true);
-    assertXML(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'>",
-        "    <Button.layoutData>",
-        "      <GridData verticalSpan='2'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "  <Button text='0'/>",
-        "  <Button text='1'/>",
-        "</Shell>");
-    // check GridData
-    {
-      assertEquals(0, getInt(gridData, "x"));
-      assertEquals(0, getInt(gridData, "y"));
-      assertEquals(1, getInt(gridData, "width"));
-      assertEquals(2, getInt(gridData, "height"));
-    }
-  }
-
-  public void test_setCells_verticalSpan2() throws Exception {
-    parse(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'>",
-        "    <Button.layoutData>",
-        "      <GridData verticalSpan='2'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "  <Button text='0'/>",
-        "  <Button text='1'/>",
-        "</Shell>");
-    refresh();
-    GridLayoutInfo layout = getObjectByName("layout");
-    ControlInfo button = getObjectByName("button");
-    //
-    layout.command_setCells(button, new Rectangle(0, 0, 1, 1), true);
-    assertXML(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'/>",
-        "  <Button text='0'/>",
-        "  <Label/>",
-        "  <Button text='1'/>",
-        "</Shell>");
-  }
-
-  public void test_setCells_move() throws Exception {
-    CompositeInfo shell =
-        parse(
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <GridLayout wbp:name='layout' numColumns='2'/>",
-            "  </Shell.layout>",
-            "  <Button wbp:name='button_00'/>",
-            "  <Label/>",
-            "  <Button wbp:name='button_01'/>",
-            "  <Button wbp:name='button_11'/>",
-            "</Shell>");
-    refresh();
-    GridLayoutInfo layout = getObjectByName("layout");
-    ControlInfo button_01 = getObjectByName("button_01");
-    //
-    layout.command_setCells(button_01, new Rectangle(1, 0, 1, 1), true);
-    assertXML(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_00'/>",
-        "  <Button wbp:name='button_01'/>",
-        "  <Label/>",
-        "  <Button wbp:name='button_11'/>",
-        "</Shell>");
-    // check x/y for new filler
-    {
-      ControlInfo filler = shell.getChildrenControls().get(2);
-      assertTrue(layout.isFiller(filler));
-      GridDataInfo gridData = GridLayoutInfo.getGridData(filler);
-      assertEquals(0, getInt(gridData, "x"));
-      assertEquals(1, getInt(gridData, "y"));
-      assertEquals(1, getInt(gridData, "width"));
-      assertEquals(1, getInt(gridData, "height"));
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // command_setSizeHint()
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link GridLayoutInfo#command_setSizeHint(ControlInfo, boolean, Dimension)}.
-   */
-  public void test_setSizeHint_width() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    refresh();
-    GridLayoutInfo layout = getObjectByName("layout");
-    ControlInfo button = getObjectByName("button");
-    // set hint
-    layout.command_setSizeHint(button, true, new Dimension(200, -1));
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'>",
-        "    <Button.layoutData>",
-        "      <GridData widthHint='200'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "</Shell>");
-  }
-
-  /**
-   * Test for {@link GridLayoutInfo#command_setSizeHint(ControlInfo, boolean, Dimension)}.
-   */
-  public void test_setSizeHint_height() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    refresh();
-    GridLayoutInfo layout = getObjectByName("layout");
-    ControlInfo button = getObjectByName("button");
-    // set hint
-    layout.command_setSizeHint(button, false, new Dimension(-1, 50));
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'>",
-        "    <Button.layoutData>",
-        "      <GridData heightHint='50'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "</Shell>");
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Delete
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * When we delete {@link ControlInfo}, it should be replaced with filler.
-   */
-  public void test_delete_replaceWithFillers() throws Exception {
-    parse(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_00'/>",
-        "  <Button wbp:name='button_10'/>",
-        "  <Button wbp:name='button_01'/>",
-        "  <Button wbp:name='button_11'/>",
-        "</Shell>");
-    refresh();
-    ControlInfo button_01 = getObjectByName("button_01");
-    //
-    button_01.delete();
-    assertXML(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_00'/>",
-        "  <Button wbp:name='button_10'/>",
-        "  <Label/>",
-        "  <Button wbp:name='button_11'/>",
-        "</Shell>");
-  }
-
-  /**
-   * When we delete column, we should keep at least one column.
-   */
-  public void test_delete_keepOneColumn() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    refresh();
-    ControlInfo button = getObjectByName("button");
-    //
-    button.delete();
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout/>",
-        "  </Shell.layout>",
-        "</Shell>");
-  }
-
-  public void test_delete_removeEmptyDimensions() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button/>",
-        "  <Label/>",
-        "  <Label/>",
-        "  <Label/>",
-        "  <Label/>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    refresh();
-    //
-    ControlInfo button = getObjectByName("button");
-    {
-      GridDataInfo gridData = GridLayoutInfo.getGridData(button);
-      assertEquals(1, getInt(gridData, "x"));
-      assertEquals(2, getInt(gridData, "y"));
-    }
-    //
-    button.delete();
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout/>",
-        "  </Shell.layout>",
-        "  <Button/>",
-        "</Shell>");
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // CREATE
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_CREATE_inEmptyCell() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button text='0'/>",
-        "  <Label/>",
-        "  <Label />",
-        "  <Button text='1'/>",
-        "</Shell>");
-    refresh();
-    GridLayoutInfo layout = getObjectByName("layout");
-    //
-    ControlInfo newButton = createButton();
-    layout.command_CREATE(newButton, 1, false, 0, false);
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button text='0'/>",
-        "  <Button/>",
-        "  <Label />",
-        "  <Button text='1'/>",
-        "</Shell>");
-  }
-
-  public void test_CREATE_insertRow() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button text='0'/>",
-        "  <Label />",
-        "  <Label  />",
-        "  <Button text='1'/>",
-        "</Shell>");
-    refresh();
-    GridLayoutInfo layout = getObjectByName("layout");
-    //
-    ControlInfo newButton = createButton();
-    layout.command_CREATE(newButton, 1, false, 1, true);
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button text='0'/>",
-        "  <Label />",
-        "  <Label/>",
-        "  <Button/>",
-        "  <Label  />",
-        "  <Button text='1'/>",
-        "</Shell>");
-  }
-
-  public void test_CREATE_insertColumn() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button text='0'/>",
-        "  <Label />",
-        "  <Label  />",
-        "  <Button text='1'/>",
-        "</Shell>");
-    refresh();
-    GridLayoutInfo layout = getObjectByName("layout");
-    //
-    ControlInfo newButton = createButton();
-    layout.command_CREATE(newButton, 1, true, 0, false);
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout' numColumns='3'/>",
-        "  </Shell.layout>",
-        "  <Button text='0'/>",
-        "  <Button/>",
-        "  <Label />",
-        "  <Label  />",
-        "  <Label/>",
-        "  <Button text='1'/>",
-        "</Shell>");
-  }
-
-  public void test_CREATE_insertColumnRow() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Button text='0'/>",
-        "</Shell>");
-    refresh();
-    GridLayoutInfo layout = getObjectByName("layout");
-    //
-    ControlInfo newButton = createButton();
-    layout.command_CREATE(newButton, 0, true, 0, true);
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button/>",
-        "  <Label/>",
-        "  <Label/>",
-        "  <Button text='0'/>",
-        "</Shell>");
-    // delete - should return in initial state
-    newButton.delete();
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Button text='0'/>",
-        "</Shell>");
-  }
-
-  public void test_CREATE_appendRow() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Button text='0'/>",
-        "</Shell>");
-    refresh();
-    GridLayoutInfo layout = getObjectByName("layout");
-    //
-    ControlInfo newButton = createButton();
-    layout.command_CREATE(newButton, 0, false, 2, false);
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Button text='0'/>",
-        "  <Label/>",
-        "  <Button/>",
-        "</Shell>");
-  }
-
-  public void test_CREATE_appendColumn() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Button text='0'/>",
-        "</Shell>");
-    refresh();
-    GridLayoutInfo layout = getObjectByName("layout");
-    //
-    ControlInfo newButton = createButton();
-    layout.command_CREATE(newButton, 2, false, 0, false);
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout' numColumns='3'/>",
-        "  </Shell.layout>",
-        "  <Button text='0'/>",
-        "  <Label/>",
-        "  <Button/>",
-        "</Shell>");
-  }
-
-  public void test_CREATE_appendColumnRow() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Button text='0'/>",
-        "</Shell>");
-    refresh();
-    GridLayoutInfo layout = getObjectByName("layout");
-    //
-    ControlInfo newButton = createButton();
-    layout.command_CREATE(newButton, 1, false, 1, false);
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button text='0'/>",
-        "  <Label/>",
-        "  <Label/>",
-        "  <Button/>",
-        "</Shell>");
-  }
-
-  public void test_CREATE_insertColumnHorizontalSpan() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_0'>",
-        "    <Button.layoutData>",
-        "      <GridData horizontalSpan='2'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "  <Button text='1'/>",
-        "  <Button text='2'/>",
-        "</Shell>");
-    refresh();
-    GridLayoutInfo layout = getObjectByName("layout");
-    //
-    ControlInfo newButton = createButton();
-    layout.command_CREATE(newButton, 1, true, 1, false);
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout' numColumns='3'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_0'>",
-        "    <Button.layoutData>",
-        "      <GridData horizontalSpan='3'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "  <Button text='1'/>",
-        "  <Button/>",
-        "  <Button text='2'/>",
-        "</Shell>");
-  }
-
-  public void test_CREATE_insertRowVerticalSpan() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_0'>",
-        "    <Button.layoutData>",
-        "      <GridData verticalSpan='2'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "  <Button text='1'/>",
-        "  <Button text='2'/>",
-        "</Shell>");
-    refresh();
-    GridLayoutInfo layout = getObjectByName("layout");
-    //
-    ControlInfo newButton = createButton();
-    layout.command_CREATE(newButton, 1, false, 1, true);
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_0'>",
-        "    <Button.layoutData>",
-        "      <GridData verticalSpan='3'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "  <Button text='1'/>",
-        "  <Button/>",
-        "  <Button text='2'/>",
-        "</Shell>");
-  }
-
-  /**
-   * Test for parsing "not balanced" {@link GridLayoutInfo} and adding into <code>null</code> cell.
-   */
-  public void test_CREATE_notBalanced() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Label/>",
-        "  <Label/>",
-        "  <Label/>",
-        "</Shell>");
-    refresh();
-    GridLayoutInfo layout = getObjectByName("layout");
-    //
-    ControlInfo newButton = createButton();
-    layout.command_CREATE(newButton, 1, false, 1, false);
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Label/>",
-        "  <Label/>",
-        "  <Label/>",
-        "  <Button/>",
-        "</Shell>");
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands for implicit GridLayout
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link GridLayoutInfo#isExplicitRow(int)}.
-   */
-  public void test_implicitLayout_isExplicitRow() throws Exception {
-    prepareShell_withImplicit();
-    CompositeInfo shell =
-        parse(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<t:MyShell>",
-            "  <Button wbp:name='button'/>",
-            "</t:MyShell>");
-    refresh();
-    GridLayoutInfo layout = (GridLayoutInfo) shell.getLayout();
-    // has 1 implicit and 1 explicit row
-    assertEquals(2, layout.getRows().size());
-    assertFalse(layout.isExplicitRow(0));
-    assertTrue(layout.isExplicitRow(1));
-  }
-
-  /**
-   * We should not break existing {@link GridLayout} based design by changing number of columns.
-   */
-  public void test_implicitLayout_CREATE_hasInheritedControls() throws Exception {
-    prepareShell_withImplicit();
-    CompositeInfo shell = parse("<t:MyShell/>");
-    refresh();
-    GridLayoutInfo layout = (GridLayoutInfo) shell.getLayout();
-    // initial state
-    assertEquals(2, layout.getColumns().size());
-    assertEquals(1, layout.getRows().size());
-    // add new Button
-    ControlInfo newButton = createButton();
-    layout.command_CREATE(newButton, 1, false, 1, false);
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<t:MyShell>",
-        "  <Label/>",
-        "  <Button/>",
-        "</t:MyShell>");
-  }
-
-  /**
-   * In XWT, if {@link GridLayout} is implicit and there are no inherited {@link Control}s, we
-   * should be able to add new columns and rows.
-   */
-  public void test_implicitLayout_CREATE_noInheritedControls() throws Exception {
-    prepareShell_withImplicitEmpty();
-    CompositeInfo shell = parse("<t:MyShell/>");
-    refresh();
-    GridLayoutInfo layout = (GridLayoutInfo) shell.getLayout();
-    // initial state
-    assertEquals(0, layout.getColumns().size());
-    assertEquals(0, layout.getRows().size());
-    // add new Button
-    ControlInfo newButton = createButton();
-    layout.command_CREATE(newButton, 1, false, 0, false);
-    // new state
-    assertEquals(2, layout.getColumns().size());
-    assertEquals(1, layout.getRows().size());
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<t:MyShell numColumns='2'>",
-        "  <Label/>",
-        "  <Button/>",
-        "</t:MyShell>");
-  }
-
-  /**
-   * Using implicit {@link GridLayout} should not cause problems during moving {@link Control}.
-   */
-  public void test_implicitLayout_MOVE() throws Exception {
-    prepareShell_withImplicit();
-    CompositeInfo shell =
-        parse(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<t:MyShell>",
-            "  <Button wbp:name='button'/>",
-            "  <Label/>",
-            "</t:MyShell>");
-    refresh();
-    GridLayoutInfo layout = (GridLayoutInfo) shell.getLayout();
-    ControlInfo button = getObjectByName("button");
-    // move "button"
-    layout.command_MOVE(button, 1, false, 1, false);
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<t:MyShell>",
-        "  <Label/>",
-        "  <Button wbp:name='button'/>",
-        "</t:MyShell>");
-  }
-
-  private void prepareShell_withImplicit() throws Exception {
-    setFileContentSrc(
-        "test/MyShell.java",
-        getJavaSource(
-            "public class MyShell extends Shell {",
-            "  public MyShell() {",
-            "    setLayout(new GridLayout(2, false));",
-            "    new Button(this, SWT.NONE);",
-            "    new Button(this, SWT.NONE);",
-            "  }",
-            "  protected void checkSubclass() {",
-            "  }",
-            "}"));
-    waitForAutoBuild();
-  }
-
-  private void prepareShell_withImplicitEmpty() throws Exception {
-    setFileContentSrc(
-        "test/MyShell.java",
-        getJavaSource(
-            "public class MyShell extends Shell {",
-            "  private final GridLayout gridLayout = new GridLayout(1, false);",
-            "  public MyShell() {",
-            "    setLayout(gridLayout);",
-            "  }",
-            "  protected void checkSubclass() {",
-            "  }",
-            "  public void setNumColumns(int numColumns) {",
-            "    gridLayout.numColumns = numColumns;",
-            "    layout();",
-            "  }",
-            "}"));
-    waitForAutoBuild();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Dimension operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_columnAccess() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_00'/>",
-        "  <Label/>",
-        "  <Button wbp:name='button_01'/>",
-        "  <Button wbp:name='button_11'/>",
-        "</Shell>");
-    refresh();
-    GridLayoutInfo layout = getObjectByName("layout");
-    final GridColumnInfo<ControlInfo> column = layout.getColumns().get(0);
-    // check initial values
-    assertEquals(0, column.getIndex());
-    assertEquals("left", column.getTitle());
-    assertFalse(column.getGrab());
-    assertEquals(SWT.LEFT, column.getAlignment().intValue());
-    // flip grab
-    column.flipGrab();
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_00'>",
-        "    <Button.layoutData>",
-        "      <GridData grabExcessHorizontalSpace='true'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "  <Label/>",
-        "  <Button wbp:name='button_01'>",
-        "    <Button.layoutData>",
-        "      <GridData grabExcessHorizontalSpace='true'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "  <Button wbp:name='button_11'/>",
-        "</Shell>");
-    assertEquals("left, grab", column.getTitle());
-    // set alignment
-    column.setAlignment(SWT.FILL);
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_00'>",
-        "    <Button.layoutData>",
-        "      <GridData grabExcessHorizontalSpace='true' horizontalAlignment='FILL'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "  <Label/>",
-        "  <Button wbp:name='button_01'>",
-        "    <Button.layoutData>",
-        "      <GridData grabExcessHorizontalSpace='true' horizontalAlignment='FILL'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "  <Button wbp:name='button_11'/>",
-        "</Shell>");
-    assertEquals("fill, grab", column.getTitle());
-    // set different alignment for "button_01"
-    {
-      ControlInfo button = getObjectByName("button_01");
-      GridLayoutInfo.getGridData(button).setHorizontalAlignment(SWT.RIGHT);
-      assertNull(column.getAlignment());
-    }
-    // check other alignments
-    {
-      column.setAlignment(SWT.CENTER);
-      assertEquals("center, grab", column.getTitle());
-      //
-      column.setAlignment(SWT.RIGHT);
-      assertEquals("right, grab", column.getTitle());
-    }
-    // delete
-    ExecutionUtils.run(layout, new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        column.delete();
-      }
-    });
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Label/>",
-        "  <Button wbp:name='button_11'/>",
-        "</Shell>");
-  }
-
-  public void test_rowAccess() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_00'/>",
-        "  <Label/>",
-        "  <Button wbp:name='button_01'/>",
-        "  <Button wbp:name='button_11'/>",
-        "</Shell>");
-    refresh();
-    GridLayoutInfo layout = getObjectByName("layout");
-    GridRowInfo<ControlInfo> row = layout.getRows().get(1);
-    // check initial values
-    assertEquals(1, row.getIndex());
-    assertEquals("center", row.getTitle());
-    assertFalse(row.getGrab());
-    assertEquals(SWT.CENTER, row.getAlignment().intValue());
-    // flip grab
-    row.flipGrab();
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_00'/>",
-        "  <Label/>",
-        "  <Button wbp:name='button_01'>",
-        "    <Button.layoutData>",
-        "      <GridData grabExcessVerticalSpace='true'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "  <Button wbp:name='button_11'>",
-        "    <Button.layoutData>",
-        "      <GridData grabExcessVerticalSpace='true'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "</Shell>");
-    assertEquals("center, grab", row.getTitle());
-    // set alignment
-    row.setAlignment(SWT.FILL);
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_00'/>",
-        "  <Label/>",
-        "  <Button wbp:name='button_01'>",
-        "    <Button.layoutData>",
-        "      <GridData grabExcessVerticalSpace='true' verticalAlignment='FILL'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "  <Button wbp:name='button_11'>",
-        "    <Button.layoutData>",
-        "      <GridData grabExcessVerticalSpace='true' verticalAlignment='FILL'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "</Shell>");
-    assertEquals("fill, grab", row.getTitle());
-    // set different alignment for "button_01"
-    {
-      ControlInfo button = getObjectByName("button_01");
-      GridLayoutInfo.getGridData(button).setVerticalAlignment(SWT.BOTTOM);
-      assertNull(row.getAlignment());
-    }
-    // check other alignments
-    {
-      row.setAlignment(SWT.TOP);
-      assertEquals("top, grab", row.getTitle());
-      //
-      row.setAlignment(SWT.BOTTOM);
-      assertEquals("bottom, grab", row.getTitle());
-    }
-    // delete
-    row.delete();
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_00'/>",
-        "</Shell>");
-  }
-
-  public void test_deleteColumn() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout' numColumns='3'/>",
-        "  </Shell.layout>",
-        "  <Button>",
-        "    <Button.layoutData>",
-        "      <GridData horizontalSpan='3'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "  <Button text='0'/>",
-        "  <Button text='1'/>",
-        "  <Button text='2'/>",
-        "</Shell>");
-    refresh();
-    //
-    ExecutionUtils.run(m_lastObject, new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        GridLayoutInfo layout = getObjectByName("layout");
-        layout.command_deleteColumn(1, true);
-      }
-    });
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button>",
-        "    <Button.layoutData>",
-        "      <GridData horizontalSpan='2'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "  <Button text='0'/>",
-        "  <Button text='2'/>",
-        "</Shell>");
-  }
-
-  public void test_deleteColumn_deleteAlsoEmptyRows() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_00'/>",
-        "  <Label/>",
-        "  <Label/>",
-        "  <Button wbp:name='button_11'/>",
-        "</Shell>");
-    refresh();
-    //
-    ExecutionUtils.run(m_lastObject, new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        GridLayoutInfo layout = getObjectByName("layout");
-        layout.command_deleteColumn(1, true);
-      }
-    });
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_00'/>",
-        "</Shell>");
-  }
-
-  /**
-   * When grid has empty cells (at the ends of columns/rows), this caused
-   * {@link NullPointerException}.
-   */
-  public void test_delete_missingFillers() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_00'/>",
-        "  <Button wbp:name='button_01'/>",
-        "  <Button wbp:name='button_10'/>",
-        "</Shell>");
-    refresh();
-    // delete "button_10"
-    ControlInfo button_10 = getObjectByName("button_10");
-    button_10.delete();
-    // ..."row 1" should be removed
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_00'/>",
-        "  <Button wbp:name='button_01'/>",
-        "</Shell>");
-  }
-
-  public void test_deleteRow() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button>",
-        "    <Button.layoutData>",
-        "      <GridData verticalSpan='3'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "  <Button text='0'/>",
-        "  <Button text='1'/>",
-        "  <Button text='2'/>",
-        "</Shell>");
-    refresh();
-    //
-    ExecutionUtils.run(m_lastObject, new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        GridLayoutInfo layout = getObjectByName("layout");
-        layout.command_deleteRow(1, true);
-      }
-    });
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button>",
-        "    <Button.layoutData>",
-        "      <GridData verticalSpan='2'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "  <Button text='0'/>",
-        "  <Button text='2'/>",
-        "</Shell>");
-  }
-
-  public void test_deleteRow_deleteAlsoEmptyColumns() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_00'/>",
-        "  <Label/>",
-        "  <Label/>",
-        "  <Button wbp:name='button_11'/>",
-        "</Shell>");
-    refresh();
-    //
-    ExecutionUtils.run(m_lastObject, new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        GridLayoutInfo layout = getObjectByName("layout");
-        layout.command_deleteRow(1, true);
-      }
-    });
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_00'/>",
-        "</Shell>");
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // MOVE COLUMN
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_MOVE_COLUMN_before() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_00'/>",
-        "  <Label/>",
-        "  <Label/>",
-        "  <Button wbp:name='button_11'/>",
-        "</Shell>");
-    refresh();
-    //
-    ExecutionUtils.run(m_lastObject, new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        GridLayoutInfo layout = getObjectByName("layout");
-        layout.command_MOVE_COLUMN(1, 0);
-      }
-    });
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Label/>",
-        "  <Button wbp:name='button_00'/>",
-        "  <Button wbp:name='button_11'/>",
-        "  <Label/>",
-        "</Shell>");
-  }
-
-  public void test_MOVE_COLUMN_after() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_00'/>",
-        "  <Label/>",
-        "  <Label/>",
-        "  <Button wbp:name='button_11'/>",
-        "</Shell>");
-    refresh();
-    //
-    ExecutionUtils.run(m_lastObject, new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        GridLayoutInfo layout = getObjectByName("layout");
-        layout.command_MOVE_COLUMN(0, 2);
-      }
-    });
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Label/>",
-        "  <Button wbp:name='button_00'/>",
-        "  <Button wbp:name='button_11'/>",
-        "  <Label/>",
-        "</Shell>");
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // MOVE ROW
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_MOVE_ROW_before() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_00'/>",
-        "  <Label/>",
-        "  <Label/>",
-        "  <Button wbp:name='button_11'/>",
-        "</Shell>");
-    refresh();
-    //
-    ExecutionUtils.run(m_lastObject, new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        GridLayoutInfo layout = getObjectByName("layout");
-        layout.command_MOVE_ROW(1, 0);
-      }
-    });
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Label/>",
-        "  <Button wbp:name='button_11'/>",
-        "  <Button wbp:name='button_00'/>",
-        "  <Label/>",
-        "</Shell>");
-  }
-
-  public void test_MOVE_ROW_after() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_00'/>",
-        "  <Label/>",
-        "  <Label/>",
-        "  <Button wbp:name='button_11'/>",
-        "</Shell>");
-    refresh();
-    //
-    ExecutionUtils.run(m_lastObject, new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        GridLayoutInfo layout = getObjectByName("layout");
-        layout.command_MOVE_ROW(0, 2);
-      }
-    });
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Label/>",
-        "  <Button wbp:name='button_11'/>",
-        "  <Button wbp:name='button_00'/>",
-        "  <Label/>",
-        "</Shell>");
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // command_normalizeSpanning()
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link GridLayoutInfo#command_normalizeSpanning()}.<br>
-   * Single control spanned on two columns.
-   */
-  public void test_normalizeSpanning_1() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button>",
-        "    <Button.layoutData>",
-        "      <GridData horizontalSpan='2'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "</Shell>");
-    refresh();
-    GridLayoutInfo layout = getObjectByName("layout");
-    //
-    layout.command_normalizeSpanning();
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Button/>",
-        "</Shell>");
-  }
-
-  /**
-   * Test for {@link GridLayoutInfo#command_normalizeSpanning()}.<br>
-   * Single control spanned on two rows.
-   */
-  public void test_normalizeSpanning_2() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Button>",
-        "    <Button.layoutData>",
-        "      <GridData verticalSpan='2'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "</Shell>");
-    refresh();
-    GridLayoutInfo layout = getObjectByName("layout");
-    //
-    layout.command_normalizeSpanning();
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Button/>",
-        "</Shell>");
-  }
-
-  /**
-   * Test for {@link GridLayoutInfo#command_normalizeSpanning()}.<br>
-   * No normalize: each column/row has control.
-   */
-  public void test_normalizeSpanning_3() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button>",
-        "    <Button.layoutData>",
-        "      <GridData horizontalSpan='2'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "  <Label/>",
-        "  <Button/>",
-        "</Shell>");
-    refresh();
-    GridLayoutInfo layout = getObjectByName("layout");
-    //
-    layout.command_normalizeSpanning();
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button>",
-        "    <Button.layoutData>",
-        "      <GridData horizontalSpan='2'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "  <Label/>",
-        "  <Button/>",
-        "</Shell>");
-  }
-
-  /**
-   * Test for {@link GridLayoutInfo#command_normalizeSpanning()}.<br>
-   * Do normalize: no control for second column.
-   */
-  public void test_normalizeSpanning_4() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_1'>",
-        "    <Button.layoutData>",
-        "      <GridData horizontalSpan='2'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "  <Button wbp:name='button_2'/>",
-        "  <Label/>",
-        "</Shell>");
-    refresh();
-    GridLayoutInfo layout = getObjectByName("layout");
-    //
-    layout.command_normalizeSpanning();
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_1'/>",
-        "  <Button wbp:name='button_2'/>",
-        "</Shell>");
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // MOVE
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_MOVE() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_00'/>",
-        "  <Label/>",
-        "  <Button wbp:name='button_10'/>",
-        "  <Button wbp:name='button_11'/>",
-        "</Shell>");
-    refresh();
-    GridLayoutInfo layout = getObjectByName("layout");
-    ControlInfo button = getObjectByName("button_10");
-    //
-    layout.command_MOVE(button, 1, false, 0, false);
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_00'/>",
-        "  <Button wbp:name='button_10'/>",
-        "  <Label/>",
-        "  <Button wbp:name='button_11'/>",
-        "</Shell>");
-  }
-
-  public void test_MOVE_out() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout/>",
-        "  </Shell.layout>",
-        "  <Composite>",
-        "    <Composite.layout>",
-        "      <FillLayout wbp:name='layout'/>",
-        "    </Composite.layout>",
-        "  </Composite>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    refresh();
-    LayoutInfo layout = getObjectByName("layout");
-    ControlInfo button = getObjectByName("button");
-    //
-    layout.command_MOVE(button, null);
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout/>",
-        "  </Shell.layout>",
-        "  <Composite>",
-        "    <Composite.layout>",
-        "      <FillLayout wbp:name='layout'/>",
-        "    </Composite.layout>",
-        "    <Button wbp:name='button'/>",
-        "  </Composite>",
-        "</Shell>");
-  }
-
-  public void test_MOVE_error_1() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout' numColumns='4'/>",
-        "  </Shell.layout>",
-        "  <Label/>",
-        "  <Label/>",
-        "  <Label/>",
-        "  <Label/>",
-        "  <Label/>",
-        "  <Label/>",
-        "  <Label/>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    refresh();
-    GridLayoutInfo layout = getObjectByName("layout");
-    ControlInfo button = getObjectByName("button");
-    //
-    layout.command_MOVE(button, 1, false, 0, false);
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Label/>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-  }
-
-  public void test_MOVE_error_2() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout' numColumns='3'/>",
-        "  </Shell.layout>",
-        "  <Label/>",
-        "  <Label/>",
-        "  <Label/>",
-        "  <Label/>",
-        "  <Label/>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    refresh();
-    GridLayoutInfo layout = getObjectByName("layout");
-    ControlInfo button = getObjectByName("button");
-    //
-    layout.command_MOVE(button, 0, false, 0, false);
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ADD
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_ADD() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Composite>",
-        "    <Composite.layout>",
-        "      <RowLayout/>",
-        "    </Composite.layout>",
-        "    <Button wbp:name='button'/>",
-        "  </Composite>",
-        "</Shell>");
-    refresh();
-    GridLayoutInfo layout = getObjectByName("layout");
-    ControlInfo button = getObjectByName("button");
-    //
-    layout.command_ADD(button, 0, false, 1, false);
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Composite>",
-        "    <Composite.layout>",
-        "      <RowLayout/>",
-        "    </Composite.layout>",
-        "  </Composite>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Special cases
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_CREATE_noReference() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "</Shell>");
-    refresh();
-    GridLayoutInfo layout = getObjectByName("layout");
-    //
-    ControlInfo newButton = createButton();
-    layout.command_CREATE(newButton, 0, false, 0, false);
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Button/>",
-        "</Shell>");
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // "numColumns" property
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * There were problems when we increase/decrease number of columns using "numColumns" property.
-   */
-  public void test_numColumns_inc() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_1'/>",
-        "  <Button wbp:name='button_2'/>",
-        "  <Button wbp:name='button_3'/>",
-        "</Shell>");
-    refresh();
-    GridLayoutInfo layout = getObjectByName("layout");
-    // initial state
-    assertEquals(2, layout.getColumns().size());
-    assertEquals(2, layout.getRows().size());
-    // numColumn = 3
-    layout.getPropertyByTitle("numColumns").setValue(3);
-    assertEquals(3, layout.getColumns().size());
-    assertEquals(1, layout.getRows().size());
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout' numColumns='3'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_1'/>",
-        "  <Button wbp:name='button_2'/>",
-        "  <Button wbp:name='button_3'/>",
-        "</Shell>");
-  }
-
-  /**
-   * There were problems when we increase/decrease number of columns using "numColumns" property.
-   */
-  public void test_numColumns_dec() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout' numColumns='3'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_1'/>",
-        "  <Button wbp:name='button_2'/>",
-        "  <Button wbp:name='button_3'/>",
-        "</Shell>");
-    refresh();
-    GridLayoutInfo layout = getObjectByName("layout");
-    // initial state
-    assertEquals(3, layout.getColumns().size());
-    assertEquals(1, layout.getRows().size());
-    // numColumn = 2
-    layout.getPropertyByTitle("numColumns").setValue(2);
-    assertEquals(2, layout.getColumns().size());
-    assertEquals(2, layout.getRows().size());
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout' numColumns='2'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_1'/>",
-        "  <Button wbp:name='button_2'/>",
-        "  <Button wbp:name='button_3'/>",
-        "</Shell>");
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // "exclude"
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * When we mark {@link Control} as excluded, this should not cause problems.
-   */
-  public void test_excludeFlag() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    refresh();
-    GridLayoutInfo layout = getObjectByName("layout");
-    ControlInfo button = getObjectByName("button");
-    // initially "button" is managed
-    assertThat(layout.getControls()).containsOnly(button);
-    // exclude "button"
-    GridLayoutInfo.getGridData(button).getPropertyByTitle("exclude").setValue(true);
-    assertThat(layout.getControls()).isEmpty();
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <GridLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'>",
-        "    <Button.layoutData>",
-        "      <GridData exclude='true'/>",
-        "    </Button.layoutData>",
-        "  </Button>",
-        "</Shell>");
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Delete layout
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test that when delete {@link GridLayoutInfo}, fillers are also removed, because there are not
-   * controls that user wants.
-   */
-  public void test_DELETE_removeFillers() throws Exception {
-    CompositeInfo shell =
-        parse(
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <GridLayout wbp:name='layout'/>",
-            "  </Shell.layout>",
-            "  <Label/>",
-            "  <Button/>",
-            "</Shell>");
-    refresh();
-    GridLayoutInfo layout = getObjectByName("layout");
-    // initially 2 controls - filler and Button
-    assertThat(shell.getChildrenControls()).hasSize(2);
-    // after delete - only Button
-    layout.delete();
-    assertThat(shell.getChildrenControls()).hasSize(1);
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Button/>",
-        "</Shell>");
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Clipboard
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_clipboard() throws Exception {
-    final CompositeInfo shell =
-        parse(
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <FillLayout wbp:name='layout'/>",
-            "  </Shell.layout>",
-            "  <Composite wbp:name='composite'>",
-            "    <Composite.layout>",
-            "      <GridLayout numColumns='2'/>",
-            "    </Composite.layout>",
-            "    <Button text='1'>",
-            "      <Button.layoutData>",
-            "        <GridData horizontalAlignment='FILL'/>",
-            "      </Button.layoutData>",
-            "    </Button>",
-            "    <Label/>",
-            "    <Label/>",
-            "    <Button text='2'/>",
-            "  </Composite>",
-            "</Shell>");
-    refresh();
-    //
-    ControlInfo composite = getObjectByName("composite");
-    doCopyPaste(composite, new PasteProcedure<ControlInfo>() {
-      @Override
-      public void run(ControlInfo copy) throws Exception {
-        shell.getLayout().command_CREATE(copy, null);
-      }
-    });
-    assertXML(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout wbp:name='layout'/>",
-        "  </Shell.layout>",
-        "  <Composite wbp:name='composite'>",
-        "    <Composite.layout>",
-        "      <GridLayout numColumns='2'/>",
-        "    </Composite.layout>",
-        "    <Button text='1'>",
-        "      <Button.layoutData>",
-        "        <GridData horizontalAlignment='FILL'/>",
-        "      </Button.layoutData>",
-        "    </Button>",
-        "    <Label/>",
-        "    <Label/>",
-        "    <Button text='2'/>",
-        "  </Composite>",
-        "  <Composite>",
-        "    <Composite.layout>",
-        "      <GridLayout numColumns='2'/>",
-        "    </Composite.layout>",
-        "    <Button text='1'>",
-        "      <Button.layoutData>",
-        "        <GridData horizontalAlignment='FILL'/>",
-        "      </Button.layoutData>",
-        "    </Button>",
-        "    <Label/>",
-        "    <Label/>",
-        "    <Button text='2'/>",
-        "  </Composite>",
-        "</Shell>");
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the <code>int</code> value of field with given name.
-   */
-  private static int getInt(GridDataInfo gridData, String fieldName) throws Exception {
-    return ReflectionUtils.getFieldInt(gridData, fieldName);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Images
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_images() throws Exception {
+		assertNotNull(GridImages.getImage("h/left.gif"));
+		assertNotNull(GridImages.getImageDescriptor("v/top.gif"));
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for parsing empty {@link GridLayoutInfo}.
+	 */
+	public void test_parseEmpty() throws Exception {
+		CompositeInfo shell =
+				parse(
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <GridLayout/>",
+						"  </Shell.layout>",
+						"</Shell>");
+		shell.refresh();
+		shell.refresh_dispose();
+	}
+
+	/**
+	 * Fillers should be filtered out from presentation children.
+	 */
+	public void test_excludeFillersFromPresentationChildren_1() throws Exception {
+		CompositeInfo shell =
+				parse(
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <GridLayout/>",
+						"  </Shell.layout>",
+						"  <Button wbp:name='button'/>",
+						"  <Label/>",
+						"</Shell>");
+		refresh();
+		ControlInfo button = shell.getChildrenControls().get(0);
+		ControlInfo filler = shell.getChildrenControls().get(1);
+		//
+		IObjectPresentation presentation = shell.getPresentation();
+		{
+			List<ObjectInfo> presentationChildren = presentation.getChildrenTree();
+			assertThat(presentationChildren).contains(button).doesNotContain(filler);
+		}
+		{
+			List<ObjectInfo> presentationChildren = presentation.getChildrenGraphical();
+			assertThat(presentationChildren).contains(button).doesNotContain(filler);
+		}
+	}
+
+	/**
+	 * <code>Label</code> with <code>setText()</code> is not filler, it is normal control.
+	 */
+	public void test_fillersWith_setText() throws Exception {
+		CompositeInfo shell =
+				parse(
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <GridLayout/>",
+						"  </Shell.layout>",
+						"  <Label wbp:name='label' text='txt'/>",
+						"</Shell>");
+		refresh();
+		ControlInfo label = getObjectByName("label");
+		//
+		IObjectPresentation presentation = shell.getPresentation();
+		{
+			List<ObjectInfo> presentationChildren = presentation.getChildrenTree();
+			assertThat(presentationChildren).contains(label);
+		}
+		{
+			List<ObjectInfo> presentationChildren = presentation.getChildrenGraphical();
+			assertThat(presentationChildren).contains(label);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// fixGrid()
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * No controls, no changes expected.
+	 */
+	public void test_fixGrid_noControls() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"</Shell>");
+		refresh();
+		GridLayoutInfo layout = getObjectByName("layout");
+		// do "fix"
+		ReflectionUtils.invokeMethod(layout, "fixGrid()");
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"</Shell>");
+	}
+
+	/**
+	 * It is possible that there are existing {@link Control}-s created in superclass. We should not
+	 * try to "fix" this by adding fillers.
+	 */
+	public void test_fixGrid_leadingImplicitControls() throws Exception {
+		setFileContentSrc(
+				"test/MyShell.java",
+				getJavaSource(
+						"public class MyShell extends Shell {",
+						"  public MyShell() {",
+						"    setLayout(new GridLayout());",
+						"    new Text(this, SWT.NONE);",
+						"  }",
+						"  protected void checkSubclass() {",
+						"  }",
+						"}"));
+		waitForAutoBuild();
+		//
+		CompositeInfo shell =
+				parse(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<t:MyShell>",
+						"  <Button/>",
+						"</t:MyShell>");
+		refresh();
+		GridLayoutInfo layout = (GridLayoutInfo) shell.getLayout();
+		// do "fix"
+		ReflectionUtils.invokeMethod(layout, "fixGrid()");
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<t:MyShell>",
+				"  <Button/>",
+				"</t:MyShell>");
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IGridInfo
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link IGridInfo}.
+	 */
+	public void test_gridInfo() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_0'/>",
+				"  <Label/>",
+				"  <Label/>",
+				"  <Button wbp:name='button_1'/>",
+				"  <Button wbp:name='button_2'>",
+				"    <Button.layoutData>",
+				"      <GridData horizontalSpan='2'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"</Shell>");
+		refresh();
+		GridLayoutInfo layout = getObjectByName("layout");
+		ControlInfo button_0 = getObjectByName("button_0");
+		ControlInfo button_1 = getObjectByName("button_1");
+		ControlInfo button_2 = getObjectByName("button_2");
+		//
+		IGridInfo gridInfo = layout.getGridInfo();
+		assertNotNull(gridInfo);
+		// check count of column/row
+		assertEquals(2, gridInfo.getColumnCount());
+		assertEquals(3, gridInfo.getRowCount());
+		// check column intervals
+		{
+			int[] columnOrigins = layout.getColumnOrigins();
+			Interval[] columnIntervals = gridInfo.getColumnIntervals();
+			assertEquals(columnOrigins.length, columnIntervals.length);
+			for (int i = 0; i < columnOrigins.length; i++) {
+				int origin = columnOrigins[i];
+				Interval interval = columnIntervals[i];
+				assertEquals(origin, interval.begin());
+			}
+		}
+		// check row intervals
+		{
+			int[] rowOrigins = layout.getRowOrigins();
+			Interval[] rowIntervals = gridInfo.getRowIntervals();
+			assertEquals(rowOrigins.length, rowIntervals.length);
+		}
+		// check component cells
+		{
+			assertEquals(new Rectangle(0, 0, 1, 1), gridInfo.getComponentCells(button_0));
+			assertEquals(new Rectangle(1, 1, 1, 1), gridInfo.getComponentCells(button_1));
+			assertEquals(new Rectangle(0, 2, 2, 1), gridInfo.getComponentCells(button_2));
+		}
+		// check cells rectangle
+		{
+			Rectangle rectangle = gridInfo.getCellsRectangle(new Rectangle(0, 0, 1, 1));
+			assertEquals(5, rectangle.x);
+			assertEquals(5, rectangle.y);
+		}
+		// not RTL
+		assertFalse(gridInfo.isRTL());
+		// insets
+		assertEquals(new Insets(0, 0, 0, 0), gridInfo.getInsets());
+		// check "virtual" feedback sizes
+		{
+			assertTrue(gridInfo.hasVirtualColumns());
+			assertTrue(gridInfo.hasVirtualRows());
+			assertEquals(25, gridInfo.getVirtualColumnSize());
+			assertEquals(5, gridInfo.getVirtualColumnGap());
+			assertEquals(25, gridInfo.getVirtualRowSize());
+			assertEquals(5, gridInfo.getVirtualRowGap());
+		}
+		// check occupied cells
+		{
+			assertSame(button_0, gridInfo.getOccupied(0, 0));
+			assertSame(button_1, gridInfo.getOccupied(1, 1));
+			assertSame(button_2, gridInfo.getOccupied(0, 2));
+			assertSame(button_2, gridInfo.getOccupied(1, 2));
+			assertNull(gridInfo.getOccupied(1, 0));
+			assertNull(gridInfo.getOccupied(0, 1));
+		}
+	}
+
+	/**
+	 * Test cells when {@link Shell#setSize(int, int)} is used.
+	 */
+	public void test_gridInfo2() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell size='300, 200'>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_0'/>",
+				"  <Button wbp:name='button_1'/>",
+				"</Shell>");
+		refresh();
+		GridLayoutInfo layout = getObjectByName("layout");
+		ControlInfo button_0 = getObjectByName("button_0");
+		ControlInfo button_1 = getObjectByName("button_1");
+		//
+		IGridInfo gridInfo = layout.getGridInfo();
+		assertEquals(new Rectangle(0, 0, 1, 1), gridInfo.getComponentCells(button_0));
+		assertEquals(new Rectangle(0, 1, 1, 1), gridInfo.getComponentCells(button_1));
+	}
+
+	/**
+	 * Test for {@link IGridInfo} when there are no controls.
+	 */
+	public void test_gridInfo_empty() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"</Shell>");
+		refresh();
+		GridLayoutInfo layout = getObjectByName("layout");
+		//
+		IGridInfo gridInfo = layout.getGridInfo();
+		assertEquals(0, gridInfo.getRowIntervals().length);
+		assertEquals(0, gridInfo.getColumnIntervals().length);
+	}
+
+	public void test_gridInfo_tooBigHorizontalSpan() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'>",
+				"    <Button.layoutData>",
+				"      <GridData horizontalSpan='10'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"</Shell>");
+		refresh();
+		GridLayoutInfo layout = getObjectByName("layout");
+		ControlInfo button = getObjectByName("button");
+		//
+		IGridInfo gridInfo = layout.getGridInfo();
+		// check count of column/row
+		assertEquals(1, gridInfo.getColumnCount());
+		assertEquals(1, gridInfo.getRowCount());
+		// check cells
+		assertEquals(new Rectangle(0, 0, 1, 1), gridInfo.getComponentCells(button));
+	}
+
+	/**
+	 * Implicit controls also occupy cells.
+	 */
+	public void test_gridInfo_implicitControls() throws Exception {
+		prepareShell_withImplicit();
+		CompositeInfo shell =
+				parse(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<t:MyShell>",
+						"  <Button wbp:name='button'/>",
+						"</t:MyShell>");
+		refresh();
+		GridLayoutInfo layout = (GridLayoutInfo) shell.getLayout();
+		ControlInfo button = getObjectByName("button");
+		IGridInfo gridInfo = layout.getGridInfo();
+		// 2x2 grid
+		assertEquals(2, gridInfo.getColumnCount());
+		assertEquals(2, gridInfo.getRowCount());
+		// occupied by implicit and explicit controls
+		assertSame(shell, gridInfo.getOccupied(0, 0));
+		assertSame(shell, gridInfo.getOccupied(1, 0));
+		assertSame(button, gridInfo.getOccupied(0, 1));
+		assertSame(null, gridInfo.getOccupied(1, 1));
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// canManageDimensions()
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link GridLayoutInfo#canChangeDimensions()}.
+	 */
+	public void test_canChangeDimensions_explicit() throws Exception {
+		CompositeInfo shell =
+				parse(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <GridLayout/>",
+						"  </Shell.layout>",
+						"</Shell>");
+		refresh();
+		GridLayoutInfo layout = (GridLayoutInfo) shell.getLayout();
+		// is explicit
+		assertTrue(layout.canChangeDimensions());
+	}
+
+	/**
+	 * Test for {@link GridLayoutInfo#canChangeDimensions()}.
+	 */
+	public void test_canChangeDimensions_implicit() throws Exception {
+		prepareShell_withImplicit();
+		CompositeInfo shell = parse("<t:MyShell/>");
+		refresh();
+		GridLayoutInfo layout = (GridLayoutInfo) shell.getLayout();
+		// is implicit
+		assertFalse(layout.canChangeDimensions());
+	}
+
+	/**
+	 * Test for {@link GridLayoutInfo#canChangeDimensions()}.
+	 * <p>
+	 * {@link GridLayout} is implicit, but there are no implicit {@link Control}s, so it is safe to
+	 * change number of columns.
+	 */
+	public void test_canChangeDimensions_implicit_withoutControls() throws Exception {
+		prepareShell_withImplicitEmpty();
+		CompositeInfo shell = parse("<t:MyShell/>");
+		refresh();
+		GridLayoutInfo layout = (GridLayoutInfo) shell.getLayout();
+		// is implicit, but no implicit controls
+		assertTrue(layout.canChangeDimensions());
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// setCells()
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_setCells_horizontalSpan() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'/>",
+				"  <Label/>",
+				"  <Button/>",
+				"  <Button/>",
+				"</Shell>");
+		refresh();
+		GridLayoutInfo layout = getObjectByName("layout");
+		ControlInfo button = getObjectByName("button");
+		GridDataInfo gridData = GridLayoutInfo.getGridData(button);
+		// check initial GridData
+		{
+			assertEquals(0, getInt(gridData, "x"));
+			assertEquals(0, getInt(gridData, "y"));
+			assertEquals(1, getInt(gridData, "width"));
+			assertEquals(1, getInt(gridData, "height"));
+		}
+		// set horizontal span
+		layout.command_setCells(button, new Rectangle(0, 0, 2, 1), true);
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'>",
+				"    <Button.layoutData>",
+				"      <GridData horizontalSpan='2'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"  <Button/>",
+				"  <Button/>",
+				"</Shell>");
+		// check GridData
+		{
+			assertEquals(0, getInt(gridData, "x"));
+			assertEquals(0, getInt(gridData, "y"));
+			assertEquals(2, getInt(gridData, "width"));
+			assertEquals(1, getInt(gridData, "height"));
+		}
+	}
+
+	public void test_setCells_horizontalSpan2() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'>",
+				"    <Button.layoutData>",
+				"      <GridData horizontalSpan='2'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"  <Button/>",
+				"  <Button/>",
+				"</Shell>");
+		refresh();
+		GridLayoutInfo layout = getObjectByName("layout");
+		ControlInfo button = getObjectByName("button");
+		//
+		layout.command_setCells(button, new Rectangle(0, 0, 1, 1), true);
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'/>",
+				"  <Label/>",
+				"  <Button/>",
+				"  <Button/>",
+				"</Shell>");
+	}
+
+	public void test_setCells_verticalSpan() throws Exception {
+		parse(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'/>",
+				"  <Button text='0'/>",
+				"  <Label/>",
+				"  <Button text='1'/>",
+				"</Shell>");
+		refresh();
+		GridLayoutInfo layout = getObjectByName("layout");
+		ControlInfo button = getObjectByName("button");
+		GridDataInfo gridData = GridLayoutInfo.getGridData(button);
+		// check initial GridData
+		{
+			assertEquals(0, getInt(gridData, "x"));
+			assertEquals(0, getInt(gridData, "y"));
+			assertEquals(1, getInt(gridData, "width"));
+			assertEquals(1, getInt(gridData, "height"));
+		}
+		// set vertical span
+		layout.command_setCells(button, new Rectangle(0, 0, 1, 2), true);
+		assertXML(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'>",
+				"    <Button.layoutData>",
+				"      <GridData verticalSpan='2'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"  <Button text='0'/>",
+				"  <Button text='1'/>",
+				"</Shell>");
+		// check GridData
+		{
+			assertEquals(0, getInt(gridData, "x"));
+			assertEquals(0, getInt(gridData, "y"));
+			assertEquals(1, getInt(gridData, "width"));
+			assertEquals(2, getInt(gridData, "height"));
+		}
+	}
+
+	public void test_setCells_verticalSpan2() throws Exception {
+		parse(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'>",
+				"    <Button.layoutData>",
+				"      <GridData verticalSpan='2'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"  <Button text='0'/>",
+				"  <Button text='1'/>",
+				"</Shell>");
+		refresh();
+		GridLayoutInfo layout = getObjectByName("layout");
+		ControlInfo button = getObjectByName("button");
+		//
+		layout.command_setCells(button, new Rectangle(0, 0, 1, 1), true);
+		assertXML(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'/>",
+				"  <Button text='0'/>",
+				"  <Label/>",
+				"  <Button text='1'/>",
+				"</Shell>");
+	}
+
+	public void test_setCells_move() throws Exception {
+		CompositeInfo shell =
+				parse(
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <GridLayout wbp:name='layout' numColumns='2'/>",
+						"  </Shell.layout>",
+						"  <Button wbp:name='button_00'/>",
+						"  <Label/>",
+						"  <Button wbp:name='button_01'/>",
+						"  <Button wbp:name='button_11'/>",
+						"</Shell>");
+		refresh();
+		GridLayoutInfo layout = getObjectByName("layout");
+		ControlInfo button_01 = getObjectByName("button_01");
+		//
+		layout.command_setCells(button_01, new Rectangle(1, 0, 1, 1), true);
+		assertXML(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_00'/>",
+				"  <Button wbp:name='button_01'/>",
+				"  <Label/>",
+				"  <Button wbp:name='button_11'/>",
+				"</Shell>");
+		// check x/y for new filler
+		{
+			ControlInfo filler = shell.getChildrenControls().get(2);
+			assertTrue(layout.isFiller(filler));
+			GridDataInfo gridData = GridLayoutInfo.getGridData(filler);
+			assertEquals(0, getInt(gridData, "x"));
+			assertEquals(1, getInt(gridData, "y"));
+			assertEquals(1, getInt(gridData, "width"));
+			assertEquals(1, getInt(gridData, "height"));
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// command_setSizeHint()
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link GridLayoutInfo#command_setSizeHint(ControlInfo, boolean, Dimension)}.
+	 */
+	public void test_setSizeHint_width() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		refresh();
+		GridLayoutInfo layout = getObjectByName("layout");
+		ControlInfo button = getObjectByName("button");
+		// set hint
+		layout.command_setSizeHint(button, true, new Dimension(200, -1));
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'>",
+				"    <Button.layoutData>",
+				"      <GridData widthHint='200'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"</Shell>");
+	}
+
+	/**
+	 * Test for {@link GridLayoutInfo#command_setSizeHint(ControlInfo, boolean, Dimension)}.
+	 */
+	public void test_setSizeHint_height() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		refresh();
+		GridLayoutInfo layout = getObjectByName("layout");
+		ControlInfo button = getObjectByName("button");
+		// set hint
+		layout.command_setSizeHint(button, false, new Dimension(-1, 50));
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'>",
+				"    <Button.layoutData>",
+				"      <GridData heightHint='50'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"</Shell>");
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Delete
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * When we delete {@link ControlInfo}, it should be replaced with filler.
+	 */
+	public void test_delete_replaceWithFillers() throws Exception {
+		parse(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_00'/>",
+				"  <Button wbp:name='button_10'/>",
+				"  <Button wbp:name='button_01'/>",
+				"  <Button wbp:name='button_11'/>",
+				"</Shell>");
+		refresh();
+		ControlInfo button_01 = getObjectByName("button_01");
+		//
+		button_01.delete();
+		assertXML(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_00'/>",
+				"  <Button wbp:name='button_10'/>",
+				"  <Label/>",
+				"  <Button wbp:name='button_11'/>",
+				"</Shell>");
+	}
+
+	/**
+	 * When we delete column, we should keep at least one column.
+	 */
+	public void test_delete_keepOneColumn() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		refresh();
+		ControlInfo button = getObjectByName("button");
+		//
+		button.delete();
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout/>",
+				"  </Shell.layout>",
+				"</Shell>");
+	}
+
+	public void test_delete_removeEmptyDimensions() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button/>",
+				"  <Label/>",
+				"  <Label/>",
+				"  <Label/>",
+				"  <Label/>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		refresh();
+		//
+		ControlInfo button = getObjectByName("button");
+		{
+			GridDataInfo gridData = GridLayoutInfo.getGridData(button);
+			assertEquals(1, getInt(gridData, "x"));
+			assertEquals(2, getInt(gridData, "y"));
+		}
+		//
+		button.delete();
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout/>",
+				"  </Shell.layout>",
+				"  <Button/>",
+				"</Shell>");
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// CREATE
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_CREATE_inEmptyCell() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button text='0'/>",
+				"  <Label/>",
+				"  <Label />",
+				"  <Button text='1'/>",
+				"</Shell>");
+		refresh();
+		GridLayoutInfo layout = getObjectByName("layout");
+		//
+		ControlInfo newButton = createButton();
+		layout.command_CREATE(newButton, 1, false, 0, false);
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button text='0'/>",
+				"  <Button/>",
+				"  <Label />",
+				"  <Button text='1'/>",
+				"</Shell>");
+	}
+
+	public void test_CREATE_insertRow() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button text='0'/>",
+				"  <Label />",
+				"  <Label  />",
+				"  <Button text='1'/>",
+				"</Shell>");
+		refresh();
+		GridLayoutInfo layout = getObjectByName("layout");
+		//
+		ControlInfo newButton = createButton();
+		layout.command_CREATE(newButton, 1, false, 1, true);
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button text='0'/>",
+				"  <Label />",
+				"  <Label/>",
+				"  <Button/>",
+				"  <Label  />",
+				"  <Button text='1'/>",
+				"</Shell>");
+	}
+
+	public void test_CREATE_insertColumn() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button text='0'/>",
+				"  <Label />",
+				"  <Label  />",
+				"  <Button text='1'/>",
+				"</Shell>");
+		refresh();
+		GridLayoutInfo layout = getObjectByName("layout");
+		//
+		ControlInfo newButton = createButton();
+		layout.command_CREATE(newButton, 1, true, 0, false);
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout' numColumns='3'/>",
+				"  </Shell.layout>",
+				"  <Button text='0'/>",
+				"  <Button/>",
+				"  <Label />",
+				"  <Label  />",
+				"  <Label/>",
+				"  <Button text='1'/>",
+				"</Shell>");
+	}
+
+	public void test_CREATE_insertColumnRow() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Button text='0'/>",
+				"</Shell>");
+		refresh();
+		GridLayoutInfo layout = getObjectByName("layout");
+		//
+		ControlInfo newButton = createButton();
+		layout.command_CREATE(newButton, 0, true, 0, true);
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button/>",
+				"  <Label/>",
+				"  <Label/>",
+				"  <Button text='0'/>",
+				"</Shell>");
+		// delete - should return in initial state
+		newButton.delete();
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Button text='0'/>",
+				"</Shell>");
+	}
+
+	public void test_CREATE_appendRow() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Button text='0'/>",
+				"</Shell>");
+		refresh();
+		GridLayoutInfo layout = getObjectByName("layout");
+		//
+		ControlInfo newButton = createButton();
+		layout.command_CREATE(newButton, 0, false, 2, false);
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Button text='0'/>",
+				"  <Label/>",
+				"  <Button/>",
+				"</Shell>");
+	}
+
+	public void test_CREATE_appendColumn() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Button text='0'/>",
+				"</Shell>");
+		refresh();
+		GridLayoutInfo layout = getObjectByName("layout");
+		//
+		ControlInfo newButton = createButton();
+		layout.command_CREATE(newButton, 2, false, 0, false);
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout' numColumns='3'/>",
+				"  </Shell.layout>",
+				"  <Button text='0'/>",
+				"  <Label/>",
+				"  <Button/>",
+				"</Shell>");
+	}
+
+	public void test_CREATE_appendColumnRow() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Button text='0'/>",
+				"</Shell>");
+		refresh();
+		GridLayoutInfo layout = getObjectByName("layout");
+		//
+		ControlInfo newButton = createButton();
+		layout.command_CREATE(newButton, 1, false, 1, false);
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button text='0'/>",
+				"  <Label/>",
+				"  <Label/>",
+				"  <Button/>",
+				"</Shell>");
+	}
+
+	public void test_CREATE_insertColumnHorizontalSpan() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_0'>",
+				"    <Button.layoutData>",
+				"      <GridData horizontalSpan='2'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"  <Button text='1'/>",
+				"  <Button text='2'/>",
+				"</Shell>");
+		refresh();
+		GridLayoutInfo layout = getObjectByName("layout");
+		//
+		ControlInfo newButton = createButton();
+		layout.command_CREATE(newButton, 1, true, 1, false);
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout' numColumns='3'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_0'>",
+				"    <Button.layoutData>",
+				"      <GridData horizontalSpan='3'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"  <Button text='1'/>",
+				"  <Button/>",
+				"  <Button text='2'/>",
+				"</Shell>");
+	}
+
+	public void test_CREATE_insertRowVerticalSpan() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_0'>",
+				"    <Button.layoutData>",
+				"      <GridData verticalSpan='2'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"  <Button text='1'/>",
+				"  <Button text='2'/>",
+				"</Shell>");
+		refresh();
+		GridLayoutInfo layout = getObjectByName("layout");
+		//
+		ControlInfo newButton = createButton();
+		layout.command_CREATE(newButton, 1, false, 1, true);
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_0'>",
+				"    <Button.layoutData>",
+				"      <GridData verticalSpan='3'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"  <Button text='1'/>",
+				"  <Button/>",
+				"  <Button text='2'/>",
+				"</Shell>");
+	}
+
+	/**
+	 * Test for parsing "not balanced" {@link GridLayoutInfo} and adding into <code>null</code> cell.
+	 */
+	public void test_CREATE_notBalanced() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Label/>",
+				"  <Label/>",
+				"  <Label/>",
+				"</Shell>");
+		refresh();
+		GridLayoutInfo layout = getObjectByName("layout");
+		//
+		ControlInfo newButton = createButton();
+		layout.command_CREATE(newButton, 1, false, 1, false);
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Label/>",
+				"  <Label/>",
+				"  <Label/>",
+				"  <Button/>",
+				"</Shell>");
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands for implicit GridLayout
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link GridLayoutInfo#isExplicitRow(int)}.
+	 */
+	public void test_implicitLayout_isExplicitRow() throws Exception {
+		prepareShell_withImplicit();
+		CompositeInfo shell =
+				parse(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<t:MyShell>",
+						"  <Button wbp:name='button'/>",
+						"</t:MyShell>");
+		refresh();
+		GridLayoutInfo layout = (GridLayoutInfo) shell.getLayout();
+		// has 1 implicit and 1 explicit row
+		assertEquals(2, layout.getRows().size());
+		assertFalse(layout.isExplicitRow(0));
+		assertTrue(layout.isExplicitRow(1));
+	}
+
+	/**
+	 * We should not break existing {@link GridLayout} based design by changing number of columns.
+	 */
+	public void test_implicitLayout_CREATE_hasInheritedControls() throws Exception {
+		prepareShell_withImplicit();
+		CompositeInfo shell = parse("<t:MyShell/>");
+		refresh();
+		GridLayoutInfo layout = (GridLayoutInfo) shell.getLayout();
+		// initial state
+		assertEquals(2, layout.getColumns().size());
+		assertEquals(1, layout.getRows().size());
+		// add new Button
+		ControlInfo newButton = createButton();
+		layout.command_CREATE(newButton, 1, false, 1, false);
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<t:MyShell>",
+				"  <Label/>",
+				"  <Button/>",
+				"</t:MyShell>");
+	}
+
+	/**
+	 * In XWT, if {@link GridLayout} is implicit and there are no inherited {@link Control}s, we
+	 * should be able to add new columns and rows.
+	 */
+	public void test_implicitLayout_CREATE_noInheritedControls() throws Exception {
+		prepareShell_withImplicitEmpty();
+		CompositeInfo shell = parse("<t:MyShell/>");
+		refresh();
+		GridLayoutInfo layout = (GridLayoutInfo) shell.getLayout();
+		// initial state
+		assertEquals(0, layout.getColumns().size());
+		assertEquals(0, layout.getRows().size());
+		// add new Button
+		ControlInfo newButton = createButton();
+		layout.command_CREATE(newButton, 1, false, 0, false);
+		// new state
+		assertEquals(2, layout.getColumns().size());
+		assertEquals(1, layout.getRows().size());
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<t:MyShell numColumns='2'>",
+				"  <Label/>",
+				"  <Button/>",
+				"</t:MyShell>");
+	}
+
+	/**
+	 * Using implicit {@link GridLayout} should not cause problems during moving {@link Control}.
+	 */
+	public void test_implicitLayout_MOVE() throws Exception {
+		prepareShell_withImplicit();
+		CompositeInfo shell =
+				parse(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<t:MyShell>",
+						"  <Button wbp:name='button'/>",
+						"  <Label/>",
+						"</t:MyShell>");
+		refresh();
+		GridLayoutInfo layout = (GridLayoutInfo) shell.getLayout();
+		ControlInfo button = getObjectByName("button");
+		// move "button"
+		layout.command_MOVE(button, 1, false, 1, false);
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<t:MyShell>",
+				"  <Label/>",
+				"  <Button wbp:name='button'/>",
+				"</t:MyShell>");
+	}
+
+	private void prepareShell_withImplicit() throws Exception {
+		setFileContentSrc(
+				"test/MyShell.java",
+				getJavaSource(
+						"public class MyShell extends Shell {",
+						"  public MyShell() {",
+						"    setLayout(new GridLayout(2, false));",
+						"    new Button(this, SWT.NONE);",
+						"    new Button(this, SWT.NONE);",
+						"  }",
+						"  protected void checkSubclass() {",
+						"  }",
+						"}"));
+		waitForAutoBuild();
+	}
+
+	private void prepareShell_withImplicitEmpty() throws Exception {
+		setFileContentSrc(
+				"test/MyShell.java",
+				getJavaSource(
+						"public class MyShell extends Shell {",
+						"  private final GridLayout gridLayout = new GridLayout(1, false);",
+						"  public MyShell() {",
+						"    setLayout(gridLayout);",
+						"  }",
+						"  protected void checkSubclass() {",
+						"  }",
+						"  public void setNumColumns(int numColumns) {",
+						"    gridLayout.numColumns = numColumns;",
+						"    layout();",
+						"  }",
+						"}"));
+		waitForAutoBuild();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Dimension operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_columnAccess() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_00'/>",
+				"  <Label/>",
+				"  <Button wbp:name='button_01'/>",
+				"  <Button wbp:name='button_11'/>",
+				"</Shell>");
+		refresh();
+		GridLayoutInfo layout = getObjectByName("layout");
+		final GridColumnInfo<ControlInfo> column = layout.getColumns().get(0);
+		// check initial values
+		assertEquals(0, column.getIndex());
+		assertEquals("left", column.getTitle());
+		assertFalse(column.getGrab());
+		assertEquals(SWT.LEFT, column.getAlignment().intValue());
+		// flip grab
+		column.flipGrab();
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_00'>",
+				"    <Button.layoutData>",
+				"      <GridData grabExcessHorizontalSpace='true'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"  <Label/>",
+				"  <Button wbp:name='button_01'>",
+				"    <Button.layoutData>",
+				"      <GridData grabExcessHorizontalSpace='true'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"  <Button wbp:name='button_11'/>",
+				"</Shell>");
+		assertEquals("left, grab", column.getTitle());
+		// set alignment
+		column.setAlignment(SWT.FILL);
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_00'>",
+				"    <Button.layoutData>",
+				"      <GridData grabExcessHorizontalSpace='true' horizontalAlignment='FILL'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"  <Label/>",
+				"  <Button wbp:name='button_01'>",
+				"    <Button.layoutData>",
+				"      <GridData grabExcessHorizontalSpace='true' horizontalAlignment='FILL'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"  <Button wbp:name='button_11'/>",
+				"</Shell>");
+		assertEquals("fill, grab", column.getTitle());
+		// set different alignment for "button_01"
+		{
+			ControlInfo button = getObjectByName("button_01");
+			GridLayoutInfo.getGridData(button).setHorizontalAlignment(SWT.RIGHT);
+			assertNull(column.getAlignment());
+		}
+		// check other alignments
+		{
+			column.setAlignment(SWT.CENTER);
+			assertEquals("center, grab", column.getTitle());
+			//
+			column.setAlignment(SWT.RIGHT);
+			assertEquals("right, grab", column.getTitle());
+		}
+		// delete
+		ExecutionUtils.run(layout, new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				column.delete();
+			}
+		});
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Label/>",
+				"  <Button wbp:name='button_11'/>",
+				"</Shell>");
+	}
+
+	public void test_rowAccess() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_00'/>",
+				"  <Label/>",
+				"  <Button wbp:name='button_01'/>",
+				"  <Button wbp:name='button_11'/>",
+				"</Shell>");
+		refresh();
+		GridLayoutInfo layout = getObjectByName("layout");
+		GridRowInfo<ControlInfo> row = layout.getRows().get(1);
+		// check initial values
+		assertEquals(1, row.getIndex());
+		assertEquals("center", row.getTitle());
+		assertFalse(row.getGrab());
+		assertEquals(SWT.CENTER, row.getAlignment().intValue());
+		// flip grab
+		row.flipGrab();
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_00'/>",
+				"  <Label/>",
+				"  <Button wbp:name='button_01'>",
+				"    <Button.layoutData>",
+				"      <GridData grabExcessVerticalSpace='true'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"  <Button wbp:name='button_11'>",
+				"    <Button.layoutData>",
+				"      <GridData grabExcessVerticalSpace='true'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"</Shell>");
+		assertEquals("center, grab", row.getTitle());
+		// set alignment
+		row.setAlignment(SWT.FILL);
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_00'/>",
+				"  <Label/>",
+				"  <Button wbp:name='button_01'>",
+				"    <Button.layoutData>",
+				"      <GridData grabExcessVerticalSpace='true' verticalAlignment='FILL'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"  <Button wbp:name='button_11'>",
+				"    <Button.layoutData>",
+				"      <GridData grabExcessVerticalSpace='true' verticalAlignment='FILL'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"</Shell>");
+		assertEquals("fill, grab", row.getTitle());
+		// set different alignment for "button_01"
+		{
+			ControlInfo button = getObjectByName("button_01");
+			GridLayoutInfo.getGridData(button).setVerticalAlignment(SWT.BOTTOM);
+			assertNull(row.getAlignment());
+		}
+		// check other alignments
+		{
+			row.setAlignment(SWT.TOP);
+			assertEquals("top, grab", row.getTitle());
+			//
+			row.setAlignment(SWT.BOTTOM);
+			assertEquals("bottom, grab", row.getTitle());
+		}
+		// delete
+		row.delete();
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_00'/>",
+				"</Shell>");
+	}
+
+	public void test_deleteColumn() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout' numColumns='3'/>",
+				"  </Shell.layout>",
+				"  <Button>",
+				"    <Button.layoutData>",
+				"      <GridData horizontalSpan='3'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"  <Button text='0'/>",
+				"  <Button text='1'/>",
+				"  <Button text='2'/>",
+				"</Shell>");
+		refresh();
+		//
+		ExecutionUtils.run(m_lastObject, new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				GridLayoutInfo layout = getObjectByName("layout");
+				layout.command_deleteColumn(1, true);
+			}
+		});
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button>",
+				"    <Button.layoutData>",
+				"      <GridData horizontalSpan='2'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"  <Button text='0'/>",
+				"  <Button text='2'/>",
+				"</Shell>");
+	}
+
+	public void test_deleteColumn_deleteAlsoEmptyRows() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_00'/>",
+				"  <Label/>",
+				"  <Label/>",
+				"  <Button wbp:name='button_11'/>",
+				"</Shell>");
+		refresh();
+		//
+		ExecutionUtils.run(m_lastObject, new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				GridLayoutInfo layout = getObjectByName("layout");
+				layout.command_deleteColumn(1, true);
+			}
+		});
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_00'/>",
+				"</Shell>");
+	}
+
+	/**
+	 * When grid has empty cells (at the ends of columns/rows), this caused
+	 * {@link NullPointerException}.
+	 */
+	public void test_delete_missingFillers() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_00'/>",
+				"  <Button wbp:name='button_01'/>",
+				"  <Button wbp:name='button_10'/>",
+				"</Shell>");
+		refresh();
+		// delete "button_10"
+		ControlInfo button_10 = getObjectByName("button_10");
+		button_10.delete();
+		// ..."row 1" should be removed
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_00'/>",
+				"  <Button wbp:name='button_01'/>",
+				"</Shell>");
+	}
+
+	public void test_deleteRow() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button>",
+				"    <Button.layoutData>",
+				"      <GridData verticalSpan='3'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"  <Button text='0'/>",
+				"  <Button text='1'/>",
+				"  <Button text='2'/>",
+				"</Shell>");
+		refresh();
+		//
+		ExecutionUtils.run(m_lastObject, new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				GridLayoutInfo layout = getObjectByName("layout");
+				layout.command_deleteRow(1, true);
+			}
+		});
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button>",
+				"    <Button.layoutData>",
+				"      <GridData verticalSpan='2'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"  <Button text='0'/>",
+				"  <Button text='2'/>",
+				"</Shell>");
+	}
+
+	public void test_deleteRow_deleteAlsoEmptyColumns() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_00'/>",
+				"  <Label/>",
+				"  <Label/>",
+				"  <Button wbp:name='button_11'/>",
+				"</Shell>");
+		refresh();
+		//
+		ExecutionUtils.run(m_lastObject, new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				GridLayoutInfo layout = getObjectByName("layout");
+				layout.command_deleteRow(1, true);
+			}
+		});
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_00'/>",
+				"</Shell>");
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// MOVE COLUMN
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_MOVE_COLUMN_before() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_00'/>",
+				"  <Label/>",
+				"  <Label/>",
+				"  <Button wbp:name='button_11'/>",
+				"</Shell>");
+		refresh();
+		//
+		ExecutionUtils.run(m_lastObject, new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				GridLayoutInfo layout = getObjectByName("layout");
+				layout.command_MOVE_COLUMN(1, 0);
+			}
+		});
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Label/>",
+				"  <Button wbp:name='button_00'/>",
+				"  <Button wbp:name='button_11'/>",
+				"  <Label/>",
+				"</Shell>");
+	}
+
+	public void test_MOVE_COLUMN_after() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_00'/>",
+				"  <Label/>",
+				"  <Label/>",
+				"  <Button wbp:name='button_11'/>",
+				"</Shell>");
+		refresh();
+		//
+		ExecutionUtils.run(m_lastObject, new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				GridLayoutInfo layout = getObjectByName("layout");
+				layout.command_MOVE_COLUMN(0, 2);
+			}
+		});
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Label/>",
+				"  <Button wbp:name='button_00'/>",
+				"  <Button wbp:name='button_11'/>",
+				"  <Label/>",
+				"</Shell>");
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// MOVE ROW
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_MOVE_ROW_before() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_00'/>",
+				"  <Label/>",
+				"  <Label/>",
+				"  <Button wbp:name='button_11'/>",
+				"</Shell>");
+		refresh();
+		//
+		ExecutionUtils.run(m_lastObject, new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				GridLayoutInfo layout = getObjectByName("layout");
+				layout.command_MOVE_ROW(1, 0);
+			}
+		});
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Label/>",
+				"  <Button wbp:name='button_11'/>",
+				"  <Button wbp:name='button_00'/>",
+				"  <Label/>",
+				"</Shell>");
+	}
+
+	public void test_MOVE_ROW_after() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_00'/>",
+				"  <Label/>",
+				"  <Label/>",
+				"  <Button wbp:name='button_11'/>",
+				"</Shell>");
+		refresh();
+		//
+		ExecutionUtils.run(m_lastObject, new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				GridLayoutInfo layout = getObjectByName("layout");
+				layout.command_MOVE_ROW(0, 2);
+			}
+		});
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Label/>",
+				"  <Button wbp:name='button_11'/>",
+				"  <Button wbp:name='button_00'/>",
+				"  <Label/>",
+				"</Shell>");
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// command_normalizeSpanning()
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link GridLayoutInfo#command_normalizeSpanning()}.<br>
+	 * Single control spanned on two columns.
+	 */
+	public void test_normalizeSpanning_1() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button>",
+				"    <Button.layoutData>",
+				"      <GridData horizontalSpan='2'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"</Shell>");
+		refresh();
+		GridLayoutInfo layout = getObjectByName("layout");
+		//
+		layout.command_normalizeSpanning();
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Button/>",
+				"</Shell>");
+	}
+
+	/**
+	 * Test for {@link GridLayoutInfo#command_normalizeSpanning()}.<br>
+	 * Single control spanned on two rows.
+	 */
+	public void test_normalizeSpanning_2() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Button>",
+				"    <Button.layoutData>",
+				"      <GridData verticalSpan='2'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"</Shell>");
+		refresh();
+		GridLayoutInfo layout = getObjectByName("layout");
+		//
+		layout.command_normalizeSpanning();
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Button/>",
+				"</Shell>");
+	}
+
+	/**
+	 * Test for {@link GridLayoutInfo#command_normalizeSpanning()}.<br>
+	 * No normalize: each column/row has control.
+	 */
+	public void test_normalizeSpanning_3() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button>",
+				"    <Button.layoutData>",
+				"      <GridData horizontalSpan='2'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"  <Label/>",
+				"  <Button/>",
+				"</Shell>");
+		refresh();
+		GridLayoutInfo layout = getObjectByName("layout");
+		//
+		layout.command_normalizeSpanning();
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button>",
+				"    <Button.layoutData>",
+				"      <GridData horizontalSpan='2'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"  <Label/>",
+				"  <Button/>",
+				"</Shell>");
+	}
+
+	/**
+	 * Test for {@link GridLayoutInfo#command_normalizeSpanning()}.<br>
+	 * Do normalize: no control for second column.
+	 */
+	public void test_normalizeSpanning_4() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_1'>",
+				"    <Button.layoutData>",
+				"      <GridData horizontalSpan='2'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"  <Button wbp:name='button_2'/>",
+				"  <Label/>",
+				"</Shell>");
+		refresh();
+		GridLayoutInfo layout = getObjectByName("layout");
+		//
+		layout.command_normalizeSpanning();
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_1'/>",
+				"  <Button wbp:name='button_2'/>",
+				"</Shell>");
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// MOVE
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_MOVE() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_00'/>",
+				"  <Label/>",
+				"  <Button wbp:name='button_10'/>",
+				"  <Button wbp:name='button_11'/>",
+				"</Shell>");
+		refresh();
+		GridLayoutInfo layout = getObjectByName("layout");
+		ControlInfo button = getObjectByName("button_10");
+		//
+		layout.command_MOVE(button, 1, false, 0, false);
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_00'/>",
+				"  <Button wbp:name='button_10'/>",
+				"  <Label/>",
+				"  <Button wbp:name='button_11'/>",
+				"</Shell>");
+	}
+
+	public void test_MOVE_out() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout/>",
+				"  </Shell.layout>",
+				"  <Composite>",
+				"    <Composite.layout>",
+				"      <FillLayout wbp:name='layout'/>",
+				"    </Composite.layout>",
+				"  </Composite>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		refresh();
+		LayoutInfo layout = getObjectByName("layout");
+		ControlInfo button = getObjectByName("button");
+		//
+		layout.command_MOVE(button, null);
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout/>",
+				"  </Shell.layout>",
+				"  <Composite>",
+				"    <Composite.layout>",
+				"      <FillLayout wbp:name='layout'/>",
+				"    </Composite.layout>",
+				"    <Button wbp:name='button'/>",
+				"  </Composite>",
+				"</Shell>");
+	}
+
+	public void test_MOVE_error_1() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout' numColumns='4'/>",
+				"  </Shell.layout>",
+				"  <Label/>",
+				"  <Label/>",
+				"  <Label/>",
+				"  <Label/>",
+				"  <Label/>",
+				"  <Label/>",
+				"  <Label/>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		refresh();
+		GridLayoutInfo layout = getObjectByName("layout");
+		ControlInfo button = getObjectByName("button");
+		//
+		layout.command_MOVE(button, 1, false, 0, false);
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Label/>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+	}
+
+	public void test_MOVE_error_2() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout' numColumns='3'/>",
+				"  </Shell.layout>",
+				"  <Label/>",
+				"  <Label/>",
+				"  <Label/>",
+				"  <Label/>",
+				"  <Label/>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		refresh();
+		GridLayoutInfo layout = getObjectByName("layout");
+		ControlInfo button = getObjectByName("button");
+		//
+		layout.command_MOVE(button, 0, false, 0, false);
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ADD
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_ADD() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Composite>",
+				"    <Composite.layout>",
+				"      <RowLayout/>",
+				"    </Composite.layout>",
+				"    <Button wbp:name='button'/>",
+				"  </Composite>",
+				"</Shell>");
+		refresh();
+		GridLayoutInfo layout = getObjectByName("layout");
+		ControlInfo button = getObjectByName("button");
+		//
+		layout.command_ADD(button, 0, false, 1, false);
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Composite>",
+				"    <Composite.layout>",
+				"      <RowLayout/>",
+				"    </Composite.layout>",
+				"  </Composite>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Special cases
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_CREATE_noReference() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"</Shell>");
+		refresh();
+		GridLayoutInfo layout = getObjectByName("layout");
+		//
+		ControlInfo newButton = createButton();
+		layout.command_CREATE(newButton, 0, false, 0, false);
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Button/>",
+				"</Shell>");
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// "numColumns" property
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * There were problems when we increase/decrease number of columns using "numColumns" property.
+	 */
+	public void test_numColumns_inc() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_1'/>",
+				"  <Button wbp:name='button_2'/>",
+				"  <Button wbp:name='button_3'/>",
+				"</Shell>");
+		refresh();
+		GridLayoutInfo layout = getObjectByName("layout");
+		// initial state
+		assertEquals(2, layout.getColumns().size());
+		assertEquals(2, layout.getRows().size());
+		// numColumn = 3
+		layout.getPropertyByTitle("numColumns").setValue(3);
+		assertEquals(3, layout.getColumns().size());
+		assertEquals(1, layout.getRows().size());
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout' numColumns='3'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_1'/>",
+				"  <Button wbp:name='button_2'/>",
+				"  <Button wbp:name='button_3'/>",
+				"</Shell>");
+	}
+
+	/**
+	 * There were problems when we increase/decrease number of columns using "numColumns" property.
+	 */
+	public void test_numColumns_dec() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout' numColumns='3'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_1'/>",
+				"  <Button wbp:name='button_2'/>",
+				"  <Button wbp:name='button_3'/>",
+				"</Shell>");
+		refresh();
+		GridLayoutInfo layout = getObjectByName("layout");
+		// initial state
+		assertEquals(3, layout.getColumns().size());
+		assertEquals(1, layout.getRows().size());
+		// numColumn = 2
+		layout.getPropertyByTitle("numColumns").setValue(2);
+		assertEquals(2, layout.getColumns().size());
+		assertEquals(2, layout.getRows().size());
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout' numColumns='2'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_1'/>",
+				"  <Button wbp:name='button_2'/>",
+				"  <Button wbp:name='button_3'/>",
+				"</Shell>");
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// "exclude"
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * When we mark {@link Control} as excluded, this should not cause problems.
+	 */
+	public void test_excludeFlag() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		refresh();
+		GridLayoutInfo layout = getObjectByName("layout");
+		ControlInfo button = getObjectByName("button");
+		// initially "button" is managed
+		assertThat(layout.getControls()).containsOnly(button);
+		// exclude "button"
+		GridLayoutInfo.getGridData(button).getPropertyByTitle("exclude").setValue(true);
+		assertThat(layout.getControls()).isEmpty();
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <GridLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'>",
+				"    <Button.layoutData>",
+				"      <GridData exclude='true'/>",
+				"    </Button.layoutData>",
+				"  </Button>",
+				"</Shell>");
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Delete layout
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test that when delete {@link GridLayoutInfo}, fillers are also removed, because there are not
+	 * controls that user wants.
+	 */
+	public void test_DELETE_removeFillers() throws Exception {
+		CompositeInfo shell =
+				parse(
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <GridLayout wbp:name='layout'/>",
+						"  </Shell.layout>",
+						"  <Label/>",
+						"  <Button/>",
+						"</Shell>");
+		refresh();
+		GridLayoutInfo layout = getObjectByName("layout");
+		// initially 2 controls - filler and Button
+		assertThat(shell.getChildrenControls()).hasSize(2);
+		// after delete - only Button
+		layout.delete();
+		assertThat(shell.getChildrenControls()).hasSize(1);
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Button/>",
+				"</Shell>");
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Clipboard
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_clipboard() throws Exception {
+		final CompositeInfo shell =
+				parse(
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <FillLayout wbp:name='layout'/>",
+						"  </Shell.layout>",
+						"  <Composite wbp:name='composite'>",
+						"    <Composite.layout>",
+						"      <GridLayout numColumns='2'/>",
+						"    </Composite.layout>",
+						"    <Button text='1'>",
+						"      <Button.layoutData>",
+						"        <GridData horizontalAlignment='FILL'/>",
+						"      </Button.layoutData>",
+						"    </Button>",
+						"    <Label/>",
+						"    <Label/>",
+						"    <Button text='2'/>",
+						"  </Composite>",
+						"</Shell>");
+		refresh();
+		//
+		ControlInfo composite = getObjectByName("composite");
+		doCopyPaste(composite, new PasteProcedure<ControlInfo>() {
+			@Override
+			public void run(ControlInfo copy) throws Exception {
+				shell.getLayout().command_CREATE(copy, null);
+			}
+		});
+		assertXML(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout wbp:name='layout'/>",
+				"  </Shell.layout>",
+				"  <Composite wbp:name='composite'>",
+				"    <Composite.layout>",
+				"      <GridLayout numColumns='2'/>",
+				"    </Composite.layout>",
+				"    <Button text='1'>",
+				"      <Button.layoutData>",
+				"        <GridData horizontalAlignment='FILL'/>",
+				"      </Button.layoutData>",
+				"    </Button>",
+				"    <Label/>",
+				"    <Label/>",
+				"    <Button text='2'/>",
+				"  </Composite>",
+				"  <Composite>",
+				"    <Composite.layout>",
+				"      <GridLayout numColumns='2'/>",
+				"    </Composite.layout>",
+				"    <Button text='1'>",
+				"      <Button.layoutData>",
+				"        <GridData horizontalAlignment='FILL'/>",
+				"      </Button.layoutData>",
+				"    </Button>",
+				"    <Label/>",
+				"    <Label/>",
+				"    <Button text='2'/>",
+				"  </Composite>",
+				"</Shell>");
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the <code>int</code> value of field with given name.
+	 */
+	private static int getInt(GridDataInfo gridData, String fieldName) throws Exception {
+		return ReflectionUtils.getFieldInt(gridData, fieldName);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/layout/grid/GridLayoutTests.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/layout/grid/GridLayoutTests.java
index 9fcbee636..a70f0098e 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/layout/grid/GridLayoutTests.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/layout/grid/GridLayoutTests.java
@@ -22,14 +22,14 @@
  * @author scheglov_ke
  */
 public class GridLayoutTests extends DesignerSuiteTests {
-  public static Test suite() {
-    TestSuite suite = new TestSuite("org.eclipse.wb.xwt.model.layout.grid");
-    suite.addTest(createSingleSuite(GridDataTest.class));
-    suite.addTest(createSingleSuite(GridLayoutSelectionActionsTest.class));
-    suite.addTest(createSingleSuite(GridLayoutTest.class));
-    suite.addTest(createSingleSuite(GridLayoutParametersTest.class));
-    suite.addTest(createSingleSuite(GridLayoutConverterTest.class));
-    suite.addTest(createSingleSuite(GridLayoutGefTest.class));
-    return suite;
-  }
+	public static Test suite() {
+		TestSuite suite = new TestSuite("org.eclipse.wb.xwt.model.layout.grid");
+		suite.addTest(createSingleSuite(GridDataTest.class));
+		suite.addTest(createSingleSuite(GridLayoutSelectionActionsTest.class));
+		suite.addTest(createSingleSuite(GridLayoutTest.class));
+		suite.addTest(createSingleSuite(GridLayoutParametersTest.class));
+		suite.addTest(createSingleSuite(GridLayoutConverterTest.class));
+		suite.addTest(createSingleSuite(GridLayoutGefTest.class));
+		return suite;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/property/ColorPropertyEditorTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/property/ColorPropertyEditorTest.java
index ed81b2dc8..2d568632a 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/property/ColorPropertyEditorTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/property/ColorPropertyEditorTest.java
@@ -42,234 +42,234 @@
  * @author scheglov_ke
  */
 public class ColorPropertyEditorTest extends XwtModelTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ColorSupport
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link ColorSupport#toString(Color)}.
-   */
-  public void test_ColorSupport_toString() throws Exception {
-    Color color = new Color(null, 1, 2, 3);
-    assertEquals("1,2,3", ColorSupport.toString(color));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ColorSupport
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link ColorSupport#toString(Color)}.
+	 */
+	public void test_ColorSupport_toString() throws Exception {
+		Color color = new Color(null, 1, 2, 3);
+		assertEquals("1,2,3", ColorSupport.toString(color));
+	}
 
-  /**
-   * Test for {@link ColorSupport#createInfo(Color)}.
-   */
-  public void test_ColorSupport_createInfo() throws Exception {
-    Color color = new Color(null, 1, 2, 3);
-    ColorInfo colorInfo = ColorSupport.createInfo(color);
-    assertEquals("", colorInfo.getName());
-    assertEquals("1, 2, 3", colorInfo.getCommaRGB());
-  }
+	/**
+	 * Test for {@link ColorSupport#createInfo(Color)}.
+	 */
+	public void test_ColorSupport_createInfo() throws Exception {
+		Color color = new Color(null, 1, 2, 3);
+		ColorInfo colorInfo = ColorSupport.createInfo(color);
+		assertEquals("", colorInfo.getName());
+		assertEquals("1, 2, 3", colorInfo.getCommaRGB());
+	}
 
-  /**
-   * Test for {@link ColorSupport#getSystemColors()}.
-   */
-  public void test_ColorSupport_getSystemColors() throws Exception {
-    ColorInfo[] colors = ColorSupport.getSystemColors();
-    // check some names
-    List<String> names = Lists.newArrayList();
-    List<Object> datas = Lists.newArrayList();
-    for (ColorInfo colorInfo : colors) {
-      names.add(colorInfo.getName());
-      datas.add(colorInfo.getName());
-    }
-    assertThat(names).contains("COLOR_RED", "COLOR_BLUE");
-    assertThat(datas).contains("COLOR_RED", "COLOR_BLUE");
-    // cached
-    assertSame(colors, ColorSupport.getSystemColors());
-  }
+	/**
+	 * Test for {@link ColorSupport#getSystemColors()}.
+	 */
+	public void test_ColorSupport_getSystemColors() throws Exception {
+		ColorInfo[] colors = ColorSupport.getSystemColors();
+		// check some names
+		List<String> names = Lists.newArrayList();
+		List<Object> datas = Lists.newArrayList();
+		for (ColorInfo colorInfo : colors) {
+			names.add(colorInfo.getName());
+			datas.add(colorInfo.getName());
+		}
+		assertThat(names).contains("COLOR_RED", "COLOR_BLUE");
+		assertThat(datas).contains("COLOR_RED", "COLOR_BLUE");
+		// cached
+		assertSame(colors, ColorSupport.getSystemColors());
+	}
 
-  /**
-   * Test for {@link ColorSupport#getSystemNamedColors()}.
-   */
-  public void test_ColorSupport_getNamedColors() throws Exception {
-    ColorInfo[] colors = ColorSupport.getNamedColors();
-    // check some names
-    List<String> names = Lists.newArrayList();
-    List<Object> datas = Lists.newArrayList();
-    for (ColorInfo colorInfo : colors) {
-      names.add(colorInfo.getName());
-      datas.add(colorInfo.getData());
-    }
-    assertThat(names).contains("Aqua", "SkyBlue");
-    assertThat(datas).contains("Aqua", "SkyBlue");
-    // cached
-    assertSame(colors, ColorSupport.getNamedColors());
-  }
+	/**
+	 * Test for {@link ColorSupport#getSystemNamedColors()}.
+	 */
+	public void test_ColorSupport_getNamedColors() throws Exception {
+		ColorInfo[] colors = ColorSupport.getNamedColors();
+		// check some names
+		List<String> names = Lists.newArrayList();
+		List<Object> datas = Lists.newArrayList();
+		for (ColorInfo colorInfo : colors) {
+			names.add(colorInfo.getName());
+			datas.add(colorInfo.getData());
+		}
+		assertThat(names).contains("Aqua", "SkyBlue");
+		assertThat(datas).contains("Aqua", "SkyBlue");
+		// cached
+		assertSame(colors, ColorSupport.getNamedColors());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // getText()
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_getText_GenericProperty_modified() throws Exception {
-    CompositeInfo shell = parse("<Shell background='Red'/>");
-    refresh();
-    // prepare property
-    Property property = shell.getPropertyByTitle("background");
-    assertNotNull(property);
-    assertInstanceOf(ColorPropertyEditor.class, property.getEditor());
-    // check state
-    assertTrue(property.isModified());
-    assertEquals("Red", getPropertyText(property));
-    assertEquals("Red", getPropertyClipboardSource(property));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// getText()
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_getText_GenericProperty_modified() throws Exception {
+		CompositeInfo shell = parse("<Shell background='Red'/>");
+		refresh();
+		// prepare property
+		Property property = shell.getPropertyByTitle("background");
+		assertNotNull(property);
+		assertInstanceOf(ColorPropertyEditor.class, property.getEditor());
+		// check state
+		assertTrue(property.isModified());
+		assertEquals("Red", getPropertyText(property));
+		assertEquals("Red", getPropertyClipboardSource(property));
+	}
 
-  public void test_getText_GenericProperty_notModified() throws Exception {
-    CompositeInfo shell = parse("<Shell/>");
-    refresh();
-    // prepare property
-    Property property = shell.getPropertyByTitle("background");
-    assertNotNull(property);
-    assertInstanceOf(ColorPropertyEditor.class, property.getEditor());
-    // check state
-    assertFalse(property.isModified());
-    assertEquals("240,240,240", getPropertyText(property));
-    assertEquals("240,240,240", getPropertyClipboardSource(property));
-  }
+	public void test_getText_GenericProperty_notModified() throws Exception {
+		CompositeInfo shell = parse("<Shell/>");
+		refresh();
+		// prepare property
+		Property property = shell.getPropertyByTitle("background");
+		assertNotNull(property);
+		assertInstanceOf(ColorPropertyEditor.class, property.getEditor());
+		// check state
+		assertFalse(property.isModified());
+		assertEquals("240,240,240", getPropertyText(property));
+		assertEquals("240,240,240", getPropertyClipboardSource(property));
+	}
 
-  public void test_getText_notColorValue() throws Exception {
-    Property property = new EmptyProperty(ColorPropertyEditor.INSTANCE);
-    // check state
-    assertFalse(property.isModified());
-    assertEquals(null, getPropertyText(property));
-  }
+	public void test_getText_notColorValue() throws Exception {
+		Property property = new EmptyProperty(ColorPropertyEditor.INSTANCE);
+		// check state
+		assertFalse(property.isModified());
+		assertEquals(null, getPropertyText(property));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // paint()
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_paint() throws Exception {
-    CompositeInfo shell = parse("<Shell background='Red'/>");
-    refresh();
-    // prepare property
-    Property property = shell.getPropertyByTitle("background");
-    PropertyEditor propertyEditor = property.getEditor();
-    // just call it
-    Image image = new Image(null, 200, 30);
-    GC gc = new GC(image);
-    try {
-      ReflectionUtils.invokeMethod(
-          propertyEditor,
-          "paint(org.eclipse.wb.internal.core.model.property.Property,org.eclipse.swt.graphics.GC,int,int,int,int)",
-          property,
-          gc,
-          0,
-          0,
-          200,
-          30);
-    } finally {
-      gc.dispose();
-      image.dispose();
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// paint()
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_paint() throws Exception {
+		CompositeInfo shell = parse("<Shell background='Red'/>");
+		refresh();
+		// prepare property
+		Property property = shell.getPropertyByTitle("background");
+		PropertyEditor propertyEditor = property.getEditor();
+		// just call it
+		Image image = new Image(null, 200, 30);
+		GC gc = new GC(image);
+		try {
+			ReflectionUtils.invokeMethod(
+					propertyEditor,
+					"paint(org.eclipse.wb.internal.core.model.property.Property,org.eclipse.swt.graphics.GC,int,int,int,int)",
+					property,
+					gc,
+					0,
+					0,
+					200,
+					30);
+		} finally {
+			gc.dispose();
+			image.dispose();
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // activate()
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_activate_clickIgnored() throws Exception {
-    CompositeInfo shell = parse("<Shell/>");
-    refresh();
-    // prepare property
-    Property property = shell.getPropertyByTitle("background");
-    ColorPropertyEditor propertyEditor = (ColorPropertyEditor) property.getEditor();
-    // click ignored
-    boolean activated = propertyEditor.activate(null, property, new Point(0, 0));
-    assertFalse(activated);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// activate()
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_activate_clickIgnored() throws Exception {
+		CompositeInfo shell = parse("<Shell/>");
+		refresh();
+		// prepare property
+		Property property = shell.getPropertyByTitle("background");
+		ColorPropertyEditor propertyEditor = (ColorPropertyEditor) property.getEditor();
+		// click ignored
+		boolean activated = propertyEditor.activate(null, property, new Point(0, 0));
+		assertFalse(activated);
+	}
 
-  public void test_active_asUsingKeyboard() throws Exception {
-    CompositeInfo shell = parse("<Shell/>");
-    refresh();
-    // animate dialog
-    final Property property = shell.getPropertyByTitle("background");
-    new UiContext().executeAndCheck(new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        ColorPropertyEditor propertyEditor = (ColorPropertyEditor) property.getEditor();
-        propertyEditor.activate(null, property, null);
-      }
-    }, new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        context.useShell("Color chooser");
-        context.clickButton("Cancel");
-      }
-    });
-    assertXML("<Shell/>");
-  }
+	public void test_active_asUsingKeyboard() throws Exception {
+		CompositeInfo shell = parse("<Shell/>");
+		refresh();
+		// animate dialog
+		final Property property = shell.getPropertyByTitle("background");
+		new UiContext().executeAndCheck(new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				ColorPropertyEditor propertyEditor = (ColorPropertyEditor) property.getEditor();
+				propertyEditor.activate(null, property, null);
+			}
+		}, new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				context.useShell("Color chooser");
+				context.clickButton("Cancel");
+			}
+		});
+		assertXML("<Shell/>");
+	}
 
-  public void test_openDialog_usingMethod() throws Exception {
-    CompositeInfo shell = parse("<Shell/>");
-    refresh();
-    // animate dialog
-    final Property property = shell.getPropertyByTitle("background");
-    new UiContext().executeAndCheck(new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        openPropertyDialog(property);
-      }
-    }, new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        context.useShell("Color chooser");
-        {
-          ColorsGridComposite colorsComposite = context.findFirstWidget(ColorsGridComposite.class);
-          EventSender sender = new EventSender(colorsComposite);
-          sender.moveTo(50, 130);
-          sender.click();
-        }
-        context.clickButton("OK");
-      }
-    });
-    assertXML("<Shell background='COLOR_RED'/>");
-  }
+	public void test_openDialog_usingMethod() throws Exception {
+		CompositeInfo shell = parse("<Shell/>");
+		refresh();
+		// animate dialog
+		final Property property = shell.getPropertyByTitle("background");
+		new UiContext().executeAndCheck(new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				openPropertyDialog(property);
+			}
+		}, new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				context.useShell("Color chooser");
+				{
+					ColorsGridComposite colorsComposite = context.findFirstWidget(ColorsGridComposite.class);
+					EventSender sender = new EventSender(colorsComposite);
+					sender.moveTo(50, 130);
+					sender.click();
+				}
+				context.clickButton("OK");
+			}
+		});
+		assertXML("<Shell background='COLOR_RED'/>");
+	}
 
-  public void test_openDialog_usingPresentation() throws Exception {
-    CompositeInfo shell = parse("<Shell/>");
-    refresh();
-    // animate dialog
-    final Property property = shell.getPropertyByTitle("background");
-    new UiContext().executeAndCheck(new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        PropertyEditorPresentation presentation = property.getEditor().getPresentation();
-        ReflectionUtils.invokeMethod(
-            presentation,
-            "onClick(org.eclipse.wb.internal.core.model.property.table.PropertyTable,"
-                + "org.eclipse.wb.internal.core.model.property.Property)",
-            null,
-            property);
-      }
-    }, new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        context.useShell("Color chooser");
-        {
-          ColorsGridComposite colorsComposite = context.findFirstWidget(ColorsGridComposite.class);
-          EventSender sender = new EventSender(colorsComposite);
-          sender.moveTo(50, 180);
-          sender.click();
-        }
-        context.clickButton("OK");
-      }
-    });
-    assertXML("<Shell background='COLOR_DARK_GREEN'/>");
-  }
+	public void test_openDialog_usingPresentation() throws Exception {
+		CompositeInfo shell = parse("<Shell/>");
+		refresh();
+		// animate dialog
+		final Property property = shell.getPropertyByTitle("background");
+		new UiContext().executeAndCheck(new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				PropertyEditorPresentation presentation = property.getEditor().getPresentation();
+				ReflectionUtils.invokeMethod(
+						presentation,
+						"onClick(org.eclipse.wb.internal.core.model.property.table.PropertyTable,"
+								+ "org.eclipse.wb.internal.core.model.property.Property)",
+								null,
+								property);
+			}
+		}, new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				context.useShell("Color chooser");
+				{
+					ColorsGridComposite colorsComposite = context.findFirstWidget(ColorsGridComposite.class);
+					EventSender sender = new EventSender(colorsComposite);
+					sender.moveTo(50, 180);
+					sender.click();
+				}
+				context.clickButton("OK");
+			}
+		});
+		assertXML("<Shell background='COLOR_DARK_GREEN'/>");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/property/FontPropertyEditorTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/property/FontPropertyEditorTest.java
index 3771d8930..ba56c0808 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/property/FontPropertyEditorTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/property/FontPropertyEditorTest.java
@@ -33,152 +33,152 @@
  * @author scheglov_ke
  */
 public class FontPropertyEditorTest extends XwtModelTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // FontSupport
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link FontSupport#getFontFamilies()}.
-   */
-  public void test_FontSupport_getFontFamilies() throws Exception {
-    String[] families = FontSupport.getFontFamilies();
-    assertThat(families).contains("Segoe UI", "Arial");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// FontSupport
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link FontSupport#getFontFamilies()}.
+	 */
+	public void test_FontSupport_getFontFamilies() throws Exception {
+		String[] families = FontSupport.getFontFamilies();
+		assertThat(families).contains("Segoe UI", "Arial");
+	}
 
-  /**
-   * Test for {@link FontSupport#getFontStyleText(int)}.
-   */
-  public void test_FontSupport_getFontStyleText() throws Exception {
-    assertEquals("", FontSupport.getFontStyleText(SWT.NORMAL));
-    assertEquals("BOLD", FontSupport.getFontStyleText(SWT.BOLD));
-    assertEquals("ITALIC", FontSupport.getFontStyleText(SWT.ITALIC));
-    assertEquals("BOLD ITALIC", FontSupport.getFontStyleText(SWT.BOLD | SWT.ITALIC));
-  }
+	/**
+	 * Test for {@link FontSupport#getFontStyleText(int)}.
+	 */
+	public void test_FontSupport_getFontStyleText() throws Exception {
+		assertEquals("", FontSupport.getFontStyleText(SWT.NORMAL));
+		assertEquals("BOLD", FontSupport.getFontStyleText(SWT.BOLD));
+		assertEquals("ITALIC", FontSupport.getFontStyleText(SWT.ITALIC));
+		assertEquals("BOLD ITALIC", FontSupport.getFontStyleText(SWT.BOLD | SWT.ITALIC));
+	}
 
-  /**
-   * Test for {@link FontSupport#getFontStyleSource(int)}.
-   */
-  public void test_FontSupport_getFontStyleSource() throws Exception {
-    assertEquals("", FontSupport.getFontStyleSource(SWT.NORMAL));
-    assertEquals("BOLD", FontSupport.getFontStyleSource(SWT.BOLD));
-    assertEquals("ITALIC", FontSupport.getFontStyleSource(SWT.ITALIC));
-    assertEquals("BOLD | ITALIC", FontSupport.getFontStyleSource(SWT.BOLD | SWT.ITALIC));
-  }
+	/**
+	 * Test for {@link FontSupport#getFontStyleSource(int)}.
+	 */
+	public void test_FontSupport_getFontStyleSource() throws Exception {
+		assertEquals("", FontSupport.getFontStyleSource(SWT.NORMAL));
+		assertEquals("BOLD", FontSupport.getFontStyleSource(SWT.BOLD));
+		assertEquals("ITALIC", FontSupport.getFontStyleSource(SWT.ITALIC));
+		assertEquals("BOLD | ITALIC", FontSupport.getFontStyleSource(SWT.BOLD | SWT.ITALIC));
+	}
 
-  /**
-   * Test for {@link FontSupport#getFontPreview(Font)}.
-   */
-  public void test_FontSupport_getFontPreview() throws Exception {
-    Font font = new Font(null, "Arial", 14, SWT.NONE);
-    try {
-      Image preview = FontSupport.getFontPreview(font);
-      assertNotNull(preview);
-      assertFalse(preview.isDisposed());
-      preview.dispose();
-    } finally {
-      font.dispose();
-    }
-  }
+	/**
+	 * Test for {@link FontSupport#getFontPreview(Font)}.
+	 */
+	public void test_FontSupport_getFontPreview() throws Exception {
+		Font font = new Font(null, "Arial", 14, SWT.NONE);
+		try {
+			Image preview = FontSupport.getFontPreview(font);
+			assertNotNull(preview);
+			assertFalse(preview.isDisposed());
+			preview.dispose();
+		} finally {
+			font.dispose();
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // getText()
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_getText_notColorValue() throws Exception {
-    Property property = new EmptyProperty(FontPropertyEditor.INSTANCE);
-    // check state
-    assertFalse(property.isModified());
-    assertEquals(null, getPropertyText(property));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// getText()
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_getText_notColorValue() throws Exception {
+		Property property = new EmptyProperty(FontPropertyEditor.INSTANCE);
+		// check state
+		assertFalse(property.isModified());
+		assertEquals(null, getPropertyText(property));
+	}
 
-  public void test_getText_defaultValue() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    refresh();
-    XmlObjectInfo button = getObjectByName("button");
-    // prepare property
-    Property property = button.getPropertyByTitle("font");
-    assertEquals("Segoe UI,9", getPropertyText(property));
-    assertEquals("Segoe UI,9", getPropertyClipboardSource(property));
-  }
+	public void test_getText_defaultValue() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		refresh();
+		XmlObjectInfo button = getObjectByName("button");
+		// prepare property
+		Property property = button.getPropertyByTitle("font");
+		assertEquals("Segoe UI,9", getPropertyText(property));
+		assertEquals("Segoe UI,9", getPropertyClipboardSource(property));
+	}
 
-  public void test_getText_withStyles() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Button wbp:name='button' font='Arial,14,ITALIC|BOLD'/>",
-        "</Shell>");
-    refresh();
-    XmlObjectInfo button = getObjectByName("button");
-    // prepare property
-    Property property = button.getPropertyByTitle("font");
-    assertEquals("Arial,14,BOLD | ITALIC", getPropertyText(property));
-    assertEquals("Arial,14,BOLD | ITALIC", getPropertyClipboardSource(property));
-  }
+	public void test_getText_withStyles() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Button wbp:name='button' font='Arial,14,ITALIC|BOLD'/>",
+				"</Shell>");
+		refresh();
+		XmlObjectInfo button = getObjectByName("button");
+		// prepare property
+		Property property = button.getPropertyByTitle("font");
+		assertEquals("Arial,14,BOLD | ITALIC", getPropertyText(property));
+		assertEquals("Arial,14,BOLD | ITALIC", getPropertyClipboardSource(property));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Dialog
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_dialog() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Button wbp:name='button' font='Arial,14,BOLD'/>",
-        "</Shell>");
-    refresh();
-    XmlObjectInfo button = getObjectByName("button");
-    // prepare property
-    final Property property = button.getPropertyByTitle("font");
-    new UiContext().executeAndCheck(new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        openPropertyDialog(property);
-      }
-    }, new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        context.useShell("Font chooser");
-        TabItem tabItem = context.getTabItem("Construction");
-        // prepare widgets
-        java.util.List<List> listWidgets = UiContext.findWidgets(tabItem, List.class);
-        List familyList = listWidgets.get(0);
-        List styleList = listWidgets.get(1);
-        List sizeList = listWidgets.get(2);
-        // initial state
-        assertThat(familyList.getSelection()).containsOnly("Arial");
-        assertThat(styleList.getSelection()).containsOnly("BOLD");
-        assertThat(sizeList.getSelection()).containsOnly("14");
-        // set new values
-        UiContext.setSelection(familyList, "Verdana");
-        UiContext.setSelection(styleList, "ITALIC");
-        UiContext.setSelection(sizeList, "30");
-        context.clickButton("OK");
-      }
-    });
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Button wbp:name='button' font='Verdana,30,ITALIC'/>",
-        "</Shell>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Dialog
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_dialog() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Button wbp:name='button' font='Arial,14,BOLD'/>",
+				"</Shell>");
+		refresh();
+		XmlObjectInfo button = getObjectByName("button");
+		// prepare property
+		final Property property = button.getPropertyByTitle("font");
+		new UiContext().executeAndCheck(new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				openPropertyDialog(property);
+			}
+		}, new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				context.useShell("Font chooser");
+				TabItem tabItem = context.getTabItem("Construction");
+				// prepare widgets
+				java.util.List<List> listWidgets = UiContext.findWidgets(tabItem, List.class);
+				List familyList = listWidgets.get(0);
+				List styleList = listWidgets.get(1);
+				List sizeList = listWidgets.get(2);
+				// initial state
+				assertThat(familyList.getSelection()).containsOnly("Arial");
+				assertThat(styleList.getSelection()).containsOnly("BOLD");
+				assertThat(sizeList.getSelection()).containsOnly("14");
+				// set new values
+				UiContext.setSelection(familyList, "Verdana");
+				UiContext.setSelection(styleList, "ITALIC");
+				UiContext.setSelection(sizeList, "30");
+				context.clickButton("OK");
+			}
+		});
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Button wbp:name='button' font='Verdana,30,ITALIC'/>",
+				"</Shell>");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/property/ImagePropertyEditorTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/property/ImagePropertyEditorTest.java
index f10e7c173..f06e1a67e 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/property/ImagePropertyEditorTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/property/ImagePropertyEditorTest.java
@@ -32,167 +32,167 @@
  * @author scheglov_ke
  */
 public class ImagePropertyEditorTest extends XwtModelTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // getText()
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_getText_noValue() throws Exception {
-    XmlObjectInfo shell = parse("<Shell/>");
-    refresh();
-    Property property = shell.getPropertyByTitle("image");
-    // check state
-    assertFalse(property.isModified());
-    assertEquals(null, getPropertyText(property));
-    assertEquals(null, getPropertyClipboardSource(property));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// getText()
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_getText_noValue() throws Exception {
+		XmlObjectInfo shell = parse("<Shell/>");
+		refresh();
+		Property property = shell.getPropertyByTitle("image");
+		// check state
+		assertFalse(property.isModified());
+		assertEquals(null, getPropertyText(property));
+		assertEquals(null, getPropertyClipboardSource(property));
+	}
 
-  public void test_getText_hasValue() throws Exception {
-    XmlObjectInfo shell = parse("<Shell image='my.png'/>");
-    refresh();
-    Property property = shell.getPropertyByTitle("image");
-    // check state
-    assertTrue(property.isModified());
-    assertEquals("my.png", getPropertyText(property));
-    assertEquals("my.png", getPropertyClipboardSource(property));
-  }
+	public void test_getText_hasValue() throws Exception {
+		XmlObjectInfo shell = parse("<Shell image='my.png'/>");
+		refresh();
+		Property property = shell.getPropertyByTitle("image");
+		// check state
+		assertTrue(property.isModified());
+		assertEquals("my.png", getPropertyText(property));
+		assertEquals("my.png", getPropertyClipboardSource(property));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Dialog
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_dialog_inClasspath() throws Exception {
-    XmlObjectInfo shell = parse("<Shell/>");
-    refresh();
-    final Property property = shell.getPropertyByTitle("image");
-    // change value
-    new UiContext().executeAndCheck(new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        openPropertyDialog(property);
-      }
-    }, new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        animateClasspathImageSelection(context, "stop.gif");
-      }
-    });
-    assertXML("<Shell image='/org/eclipse/jface/action/images/stop.gif'/>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Dialog
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_dialog_inClasspath() throws Exception {
+		XmlObjectInfo shell = parse("<Shell/>");
+		refresh();
+		final Property property = shell.getPropertyByTitle("image");
+		// change value
+		new UiContext().executeAndCheck(new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				openPropertyDialog(property);
+			}
+		}, new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				animateClasspathImageSelection(context, "stop.gif");
+			}
+		});
+		assertXML("<Shell image='/org/eclipse/jface/action/images/stop.gif'/>");
+	}
 
-  @DisposeProjectAfter
-  public void test_dialog_inSubPackage() throws Exception {
-    TestUtils.createImagePNG(m_testProject, "src/test/images/testImage.png", 16, 16);
-    // parse
-    XmlObjectInfo shell = parse("<Shell/>");
-    refresh();
-    final Property property = shell.getPropertyByTitle("image");
-    // change value
-    new UiContext().executeAndCheck(new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        openPropertyDialog(property);
-      }
-    }, new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        animateClasspathImageSelection(context, "testImage.png");
-      }
-    });
-    assertXML("<Shell image='images/testImage.png'/>");
-  }
+	@DisposeProjectAfter
+	public void test_dialog_inSubPackage() throws Exception {
+		TestUtils.createImagePNG(m_testProject, "src/test/images/testImage.png", 16, 16);
+		// parse
+		XmlObjectInfo shell = parse("<Shell/>");
+		refresh();
+		final Property property = shell.getPropertyByTitle("image");
+		// change value
+		new UiContext().executeAndCheck(new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				openPropertyDialog(property);
+			}
+		}, new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				animateClasspathImageSelection(context, "testImage.png");
+			}
+		});
+		assertXML("<Shell image='images/testImage.png'/>");
+	}
 
-  @DisposeProjectAfter
-  public void test_dialog_openWith_inSubPackage() throws Exception {
-    TestUtils.createImagePNG(m_testProject, "src/test/images/testImage.png", 16, 16);
-    // parse
-    XmlObjectInfo shell = parse("<Shell image='images/testImage.png'/>");
-    refresh();
-    final Property property = shell.getPropertyByTitle("image");
-    // change value
-    new UiContext().executeAndCheck(new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        openPropertyDialog(property);
-      }
-    }, new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        context.useShell("Image chooser");
-        // testImage.png is selected
-        {
-          TreeItem treeItem = context.getTreeItem("testImage.png");
-          assertNotNull(treeItem);
-          assertThat(treeItem.getParent().getSelection()).containsOnly(treeItem);
-        }
-        // select "Default image"
-        {
-          Button button = context.getButtonByTextPrefix("Default image");
-          context.selectButton(button);
-        }
-        // done
-        context.clickButton("OK");
-      }
-    });
-    assertXML("<Shell/>");
-  }
+	@DisposeProjectAfter
+	public void test_dialog_openWith_inSubPackage() throws Exception {
+		TestUtils.createImagePNG(m_testProject, "src/test/images/testImage.png", 16, 16);
+		// parse
+		XmlObjectInfo shell = parse("<Shell image='images/testImage.png'/>");
+		refresh();
+		final Property property = shell.getPropertyByTitle("image");
+		// change value
+		new UiContext().executeAndCheck(new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				openPropertyDialog(property);
+			}
+		}, new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				context.useShell("Image chooser");
+				// testImage.png is selected
+				{
+					TreeItem treeItem = context.getTreeItem("testImage.png");
+					assertNotNull(treeItem);
+					assertThat(treeItem.getParent().getSelection()).containsOnly(treeItem);
+				}
+				// select "Default image"
+				{
+					Button button = context.getButtonByTextPrefix("Default image");
+					context.selectButton(button);
+				}
+				// done
+				context.clickButton("OK");
+			}
+		});
+		assertXML("<Shell/>");
+	}
 
-  @DisposeProjectAfter
-  public void test_dialog_inSourceFolder() throws Exception {
-    TestUtils.createImagePNG(m_testProject, "src/images/testImage.png", 16, 16);
-    // parse
-    XmlObjectInfo shell =
-        parse0(
-            "src",
-            getTestSource(
-                "// filler filler filler filler filler",
-                "// filler filler filler filler filler",
-                "<Shell/>"));
-    refresh();
-    final Property property = shell.getPropertyByTitle("image");
-    // change value
-    new UiContext().executeAndCheck(new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        openPropertyDialog(property);
-      }
-    }, new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        animateClasspathImageSelection(context, "testImage.png");
-      }
-    });
-    assertXML("<Shell image='images/testImage.png'/>");
-  }
+	@DisposeProjectAfter
+	public void test_dialog_inSourceFolder() throws Exception {
+		TestUtils.createImagePNG(m_testProject, "src/images/testImage.png", 16, 16);
+		// parse
+		XmlObjectInfo shell =
+				parse0(
+						"src",
+						getTestSource(
+								"// filler filler filler filler filler",
+								"// filler filler filler filler filler",
+								"<Shell/>"));
+		refresh();
+		final Property property = shell.getPropertyByTitle("image");
+		// change value
+		new UiContext().executeAndCheck(new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				openPropertyDialog(property);
+			}
+		}, new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				animateClasspathImageSelection(context, "testImage.png");
+			}
+		});
+		assertXML("<Shell image='images/testImage.png'/>");
+	}
 
-  private static void animateClasspathImageSelection(UiContext context, String imageName) {
-    context.useShell("Image chooser");
-    // select image from classpath
-    {
-      Button button = context.getButtonByTextPrefix("Classpath resource");
-      context.selectButton(button);
-    }
-    // expand all, so allow to find and select image by name
-    {
-      Tree tree = context.findFirstWidget(Tree.class);
-      ((TreeViewer) tree.getData("org.eclipse.jface.viewers.TreeViewer")).expandAll();
-    }
-    // select image
-    {
-      TreeItem imageItem = context.getTreeItem(imageName);
-      UiContext.setSelection(imageItem);
-    }
-    // done
-    context.clickButton("OK");
-  }
+	private static void animateClasspathImageSelection(UiContext context, String imageName) {
+		context.useShell("Image chooser");
+		// select image from classpath
+		{
+			Button button = context.getButtonByTextPrefix("Classpath resource");
+			context.selectButton(button);
+		}
+		// expand all, so allow to find and select image by name
+		{
+			Tree tree = context.findFirstWidget(Tree.class);
+			((TreeViewer) tree.getData("org.eclipse.jface.viewers.TreeViewer")).expandAll();
+		}
+		// select image
+		{
+			TreeItem imageItem = context.getTreeItem(imageName);
+			UiContext.setSelection(imageItem);
+		}
+		// done
+		context.clickButton("OK");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/property/InnerClassPropertyEditorTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/property/InnerClassPropertyEditorTest.java
index 75a67f0e9..68f1ddb98 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/property/InnerClassPropertyEditorTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/property/InnerClassPropertyEditorTest.java
@@ -35,353 +35,353 @@
  * @author scheglov_ke
  */
 public class InnerClassPropertyEditorTest extends XwtModelTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // getText()
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_getText_noValue() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <TableViewer wbp:name='viewer'/>",
-        "</Shell>");
-    refresh();
-    TableViewerInfo viewer = getObjectByName("viewer");
-    Property property = viewer.getPropertyByTitle("labelProvider");
-    // check state
-    assertFalse(property.isModified());
-    assertEquals("<double click>", getPropertyText(property));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// getText()
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_getText_noValue() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <TableViewer wbp:name='viewer'/>",
+				"</Shell>");
+		refresh();
+		TableViewerInfo viewer = getObjectByName("viewer");
+		Property property = viewer.getPropertyByTitle("labelProvider");
+		// check state
+		assertFalse(property.isModified());
+		assertEquals("<double click>", getPropertyText(property));
+	}
 
-  public void test_getText_hasValue() throws Exception {
-    prepareMyLabelProvider();
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <TableViewer wbp:name='viewer'>",
-        "    <TableViewer.labelProvider>",
-        "      <t:MyLabelProvider/>",
-        "    </TableViewer.labelProvider>",
-        "  </TableViewer>",
-        "</Shell>");
-    refresh();
-    TableViewerInfo viewer = getObjectByName("viewer");
-    Property property = viewer.getPropertyByTitle("labelProvider");
-    // check state
-    assertTrue(property.isModified());
-    assertEquals("MyLabelProvider", getPropertyText(property));
-  }
+	public void test_getText_hasValue() throws Exception {
+		prepareMyLabelProvider();
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <TableViewer wbp:name='viewer'>",
+				"    <TableViewer.labelProvider>",
+				"      <t:MyLabelProvider/>",
+				"    </TableViewer.labelProvider>",
+				"  </TableViewer>",
+				"</Shell>");
+		refresh();
+		TableViewerInfo viewer = getObjectByName("viewer");
+		Property property = viewer.getPropertyByTitle("labelProvider");
+		// check state
+		assertTrue(property.isModified());
+		assertEquals("MyLabelProvider", getPropertyText(property));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @DisposeProjectAfter
-  public void test_generateInner() throws Exception {
-    // create existing class, to generate other name
-    setFileContentSrc(
-        "test/TableLabelProvider_1.java",
-        getJavaSource(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "public class TableLabelProvider_1 {",
-            "}"));
-    waitForAutoBuild();
-    // parse
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <TableViewer wbp:name='viewer'/>",
-        "</Shell>");
-    refresh();
-    TableViewerInfo viewer = getObjectByName("viewer");
-    Property property = viewer.getPropertyByTitle("labelProvider");
-    // no value initially
-    assertFalse(property.isModified());
-    // activate
-    activateProperty(property, null);
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <TableViewer wbp:name='viewer'>",
-        "    <TableViewer.labelProvider>",
-        "      <t:TableLabelProvider_2/>",
-        "    </TableViewer.labelProvider>",
-        "  </TableViewer>",
-        "</Shell>");
-    // new state
-    assertTrue(property.isModified());
-    assertEquals("TableLabelProvider_2", getPropertyText(property));
-    // class test.TableLabelProvider_2 created
-    assertTrue(ProjectUtils.hasType(m_javaProject, "test.TableLabelProvider_2"));
-    // ...and opened
-    {
-      IEditorPart activeEditor = DesignerPlugin.getActiveEditor();
-      assertNotNull(activeEditor);
-      activeEditor.getTitle().equals("TableLabelProvider_2.java");
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@DisposeProjectAfter
+	public void test_generateInner() throws Exception {
+		// create existing class, to generate other name
+		setFileContentSrc(
+				"test/TableLabelProvider_1.java",
+				getJavaSource(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"public class TableLabelProvider_1 {",
+						"}"));
+		waitForAutoBuild();
+		// parse
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <TableViewer wbp:name='viewer'/>",
+				"</Shell>");
+		refresh();
+		TableViewerInfo viewer = getObjectByName("viewer");
+		Property property = viewer.getPropertyByTitle("labelProvider");
+		// no value initially
+		assertFalse(property.isModified());
+		// activate
+		activateProperty(property, null);
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <TableViewer wbp:name='viewer'>",
+				"    <TableViewer.labelProvider>",
+				"      <t:TableLabelProvider_2/>",
+				"    </TableViewer.labelProvider>",
+				"  </TableViewer>",
+				"</Shell>");
+		// new state
+		assertTrue(property.isModified());
+		assertEquals("TableLabelProvider_2", getPropertyText(property));
+		// class test.TableLabelProvider_2 created
+		assertTrue(ProjectUtils.hasType(m_javaProject, "test.TableLabelProvider_2"));
+		// ...and opened
+		{
+			IEditorPart activeEditor = DesignerPlugin.getActiveEditor();
+			assertNotNull(activeEditor);
+			activeEditor.getTitle().equals("TableLabelProvider_2.java");
+		}
+	}
 
-  /**
-   * "contentProvider" uses "private static" modifier in template.
-   */
-  @DisposeProjectAfter
-  public void test_generateInner_contentProvider() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <TableViewer wbp:name='viewer'/>",
-        "</Shell>");
-    refresh();
-    TableViewerInfo viewer = getObjectByName("viewer");
-    Property property = viewer.getPropertyByTitle("contentProvider");
-    // no value initially
-    assertFalse(property.isModified());
-    // activate
-    activateProperty(property, null);
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <TableViewer wbp:name='viewer'>",
-        "    <TableViewer.contentProvider>",
-        "      <t:ContentProvider_1/>",
-        "    </TableViewer.contentProvider>",
-        "  </TableViewer>",
-        "</Shell>");
-    // new state
-    assertTrue(property.isModified());
-    assertEquals("ContentProvider_1", getPropertyText(property));
-    // class test.ContentProvider_1 created
-    {
-      IType type = m_javaProject.findType("test.ContentProvider_1");
-      assertNotNull(type);
-      assertThat(type.getSource()).contains("public class");
-    }
-    // ...and opened
-    {
-      IEditorPart activeEditor = DesignerPlugin.getActiveEditor();
-      assertNotNull(activeEditor);
-      activeEditor.getTitle().equals("ContentProvider_1.java");
-    }
-  }
+	/**
+	 * "contentProvider" uses "private static" modifier in template.
+	 */
+	@DisposeProjectAfter
+	public void test_generateInner_contentProvider() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <TableViewer wbp:name='viewer'/>",
+				"</Shell>");
+		refresh();
+		TableViewerInfo viewer = getObjectByName("viewer");
+		Property property = viewer.getPropertyByTitle("contentProvider");
+		// no value initially
+		assertFalse(property.isModified());
+		// activate
+		activateProperty(property, null);
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <TableViewer wbp:name='viewer'>",
+				"    <TableViewer.contentProvider>",
+				"      <t:ContentProvider_1/>",
+				"    </TableViewer.contentProvider>",
+				"  </TableViewer>",
+				"</Shell>");
+		// new state
+		assertTrue(property.isModified());
+		assertEquals("ContentProvider_1", getPropertyText(property));
+		// class test.ContentProvider_1 created
+		{
+			IType type = m_javaProject.findType("test.ContentProvider_1");
+			assertNotNull(type);
+			assertThat(type.getSource()).contains("public class");
+		}
+		// ...and opened
+		{
+			IEditorPart activeEditor = DesignerPlugin.getActiveEditor();
+			assertNotNull(activeEditor);
+			activeEditor.getTitle().equals("ContentProvider_1.java");
+		}
+	}
 
-  @DisposeProjectAfter
-  public void test_generateAnonymous() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <TableViewer>",
-        "    <TableViewer.table headerVisible='true'/>",
-        "    <TableViewerColumn wbp:name='column'/>",
-        "  </TableViewer>",
-        "</Shell>");
-    refresh();
-    ViewerColumnInfo column = getObjectByName("column");
-    Property property = column.getPropertyByTitle("labelProvider");
-    // no value initially
-    assertFalse(property.isModified());
-    // activate
-    activateProperty(property, null);
-    assertXML(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <TableViewer>",
-        "    <TableViewer.table headerVisible='true'/>",
-        "    <TableViewerColumn wbp:name='column'>",
-        "      <TableViewerColumn.labelProvider>",
-        "        <t:ViewerColumnCellLabelProvider_1/>",
-        "      </TableViewerColumn.labelProvider>",
-        "    </TableViewerColumn>",
-        "  </TableViewer>",
-        "</Shell>");
-    // new state
-    assertTrue(property.isModified());
-    assertEquals("ViewerColumnCellLabelProvider_1", getPropertyText(property));
-    // class test.ContentProvider_1 created
-    {
-      IType type = m_javaProject.findType("test.ViewerColumnCellLabelProvider_1");
-      assertNotNull(type);
-      assertThat(type.getSource()).contains("public class");
-    }
-    // ...and opened
-    {
-      IEditorPart activeEditor = DesignerPlugin.getActiveEditor();
-      assertNotNull(activeEditor);
-      activeEditor.getTitle().equals("ViewerColumnCellLabelProvider_1.java");
-    }
-  }
+	@DisposeProjectAfter
+	public void test_generateAnonymous() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <TableViewer>",
+				"    <TableViewer.table headerVisible='true'/>",
+				"    <TableViewerColumn wbp:name='column'/>",
+				"  </TableViewer>",
+				"</Shell>");
+		refresh();
+		ViewerColumnInfo column = getObjectByName("column");
+		Property property = column.getPropertyByTitle("labelProvider");
+		// no value initially
+		assertFalse(property.isModified());
+		// activate
+		activateProperty(property, null);
+		assertXML(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <TableViewer>",
+				"    <TableViewer.table headerVisible='true'/>",
+				"    <TableViewerColumn wbp:name='column'>",
+				"      <TableViewerColumn.labelProvider>",
+				"        <t:ViewerColumnCellLabelProvider_1/>",
+				"      </TableViewerColumn.labelProvider>",
+				"    </TableViewerColumn>",
+				"  </TableViewer>",
+				"</Shell>");
+		// new state
+		assertTrue(property.isModified());
+		assertEquals("ViewerColumnCellLabelProvider_1", getPropertyText(property));
+		// class test.ContentProvider_1 created
+		{
+			IType type = m_javaProject.findType("test.ViewerColumnCellLabelProvider_1");
+			assertNotNull(type);
+			assertThat(type.getSource()).contains("public class");
+		}
+		// ...and opened
+		{
+			IEditorPart activeEditor = DesignerPlugin.getActiveEditor();
+			assertNotNull(activeEditor);
+			activeEditor.getTitle().equals("ViewerColumnCellLabelProvider_1.java");
+		}
+	}
 
-  @DisposeProjectAfter
-  public void test_generateAnonymous_disabled() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <TableViewer>",
-        "    <TableViewer.table headerVisible='true'/>",
-        "    <TableViewerColumn wbp:name='column'/>",
-        "  </TableViewer>",
-        "</Shell>");
-    refresh();
-    ViewerColumnInfo column = getObjectByName("column");
-    Property property = column.getPropertyByTitle("editingSupport");
-    // no value initially
-    assertFalse(property.isModified());
-    // activate, disabled, so nothing happens
-    activateProperty(property, null);
-    assertXML(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <TableViewer>",
-        "    <TableViewer.table headerVisible='true'/>",
-        "    <TableViewerColumn wbp:name='column'/>",
-        "  </TableViewer>",
-        "</Shell>");
-    // still not modified
-    assertFalse(property.isModified());
-  }
+	@DisposeProjectAfter
+	public void test_generateAnonymous_disabled() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <TableViewer>",
+				"    <TableViewer.table headerVisible='true'/>",
+				"    <TableViewerColumn wbp:name='column'/>",
+				"  </TableViewer>",
+				"</Shell>");
+		refresh();
+		ViewerColumnInfo column = getObjectByName("column");
+		Property property = column.getPropertyByTitle("editingSupport");
+		// no value initially
+		assertFalse(property.isModified());
+		// activate, disabled, so nothing happens
+		activateProperty(property, null);
+		assertXML(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <TableViewer>",
+				"    <TableViewer.table headerVisible='true'/>",
+				"    <TableViewerColumn wbp:name='column'/>",
+				"  </TableViewer>",
+				"</Shell>");
+		// still not modified
+		assertFalse(property.isModified());
+	}
 
-  public void test_openOnDoubleClick() throws Exception {
-    prepareMyLabelProvider();
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <TableViewer wbp:name='viewer'>",
-        "    <TableViewer.labelProvider>",
-        "      <t:MyLabelProvider/>",
-        "    </TableViewer.labelProvider>",
-        "  </TableViewer>",
-        "</Shell>");
-    refresh();
-    TableViewerInfo viewer = getObjectByName("viewer");
-    Property property = viewer.getPropertyByTitle("labelProvider");
-    // do double click
-    doPropertyDoubleClick(property, null);
-    // class test.MyLabelProvider opened
-    {
-      IEditorPart activeEditor = DesignerPlugin.getActiveEditor();
-      assertNotNull(activeEditor);
-      activeEditor.getTitle().equals("MyLabelProvider.java");
-    }
-  }
+	public void test_openOnDoubleClick() throws Exception {
+		prepareMyLabelProvider();
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <TableViewer wbp:name='viewer'>",
+				"    <TableViewer.labelProvider>",
+				"      <t:MyLabelProvider/>",
+				"    </TableViewer.labelProvider>",
+				"  </TableViewer>",
+				"</Shell>");
+		refresh();
+		TableViewerInfo viewer = getObjectByName("viewer");
+		Property property = viewer.getPropertyByTitle("labelProvider");
+		// do double click
+		doPropertyDoubleClick(property, null);
+		// class test.MyLabelProvider opened
+		{
+			IEditorPart activeEditor = DesignerPlugin.getActiveEditor();
+			assertNotNull(activeEditor);
+			activeEditor.getTitle().equals("MyLabelProvider.java");
+		}
+	}
 
-  public void test_selectExisting() throws Exception {
-    prepareMyLabelProvider();
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <TableViewer wbp:name='viewer'/>",
-        "</Shell>");
-    refresh();
-    TableViewerInfo viewer = getObjectByName("viewer");
-    final Property property = viewer.getPropertyByTitle("labelProvider");
-    // open dialog and animate it
-    new UiContext().executeAndCheck(new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        openPropertyDialog(property);
-      }
-    }, new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        // set filter
-        {
-          context.useShell("Open type");
-          Text filterText = context.findFirstWidget(Text.class);
-          filterText.setText("MyLabelProvider");
-        }
-        // wait for types
-        {
-          final Table typesTable = context.findFirstWidget(Table.class);
-          context.waitFor(new UIPredicate() {
-            @Override
-            public boolean check() {
-              return typesTable.getItems().length != 0;
-            }
-          });
-        }
-        // click OK
-        context.clickButton("OK");
-      }
-    });
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <TableViewer wbp:name='viewer'>",
-        "    <TableViewer.labelProvider>",
-        "      <t:MyLabelProvider/>",
-        "    </TableViewer.labelProvider>",
-        "  </TableViewer>",
-        "</Shell>");
-    // new state
-    assertTrue(property.isModified());
-    assertEquals("MyLabelProvider", getPropertyText(property));
-  }
+	public void test_selectExisting() throws Exception {
+		prepareMyLabelProvider();
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <TableViewer wbp:name='viewer'/>",
+				"</Shell>");
+		refresh();
+		TableViewerInfo viewer = getObjectByName("viewer");
+		final Property property = viewer.getPropertyByTitle("labelProvider");
+		// open dialog and animate it
+		new UiContext().executeAndCheck(new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				openPropertyDialog(property);
+			}
+		}, new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				// set filter
+				{
+					context.useShell("Open type");
+					Text filterText = context.findFirstWidget(Text.class);
+					filterText.setText("MyLabelProvider");
+				}
+				// wait for types
+				{
+					final Table typesTable = context.findFirstWidget(Table.class);
+					context.waitFor(new UIPredicate() {
+						@Override
+						public boolean check() {
+							return typesTable.getItems().length != 0;
+						}
+					});
+				}
+				// click OK
+				context.clickButton("OK");
+			}
+		});
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <TableViewer wbp:name='viewer'>",
+				"    <TableViewer.labelProvider>",
+				"      <t:MyLabelProvider/>",
+				"    </TableViewer.labelProvider>",
+				"  </TableViewer>",
+				"</Shell>");
+		// new state
+		assertTrue(property.isModified());
+		assertEquals("MyLabelProvider", getPropertyText(property));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void prepareMyLabelProvider() throws Exception {
-    setFileContentSrc(
-        "test/MyLabelProvider.java",
-        getJavaSource(
-            "public class MyLabelProvider extends LabelProvider implements ITableLabelProvider {",
-            "  public Image getColumnImage(Object element, int columnIndex) {",
-            "    return null;",
-            "  }",
-            "  public String getColumnText(Object element, int columnIndex) {",
-            "    return element.toString();",
-            "  }",
-            "}"));
-    waitForAutoBuild();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void prepareMyLabelProvider() throws Exception {
+		setFileContentSrc(
+				"test/MyLabelProvider.java",
+				getJavaSource(
+						"public class MyLabelProvider extends LabelProvider implements ITableLabelProvider {",
+						"  public Image getColumnImage(Object element, int columnIndex) {",
+						"    return null;",
+						"  }",
+						"  public String getColumnText(Object element, int columnIndex) {",
+						"    return element.toString();",
+						"  }",
+						"}"));
+		waitForAutoBuild();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/property/ObjectPropertyEditorTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/property/ObjectPropertyEditorTest.java
index 3c775eba5..5c32263a2 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/property/ObjectPropertyEditorTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/property/ObjectPropertyEditorTest.java
@@ -32,167 +32,167 @@
  * @author scheglov_ke
  */
 public class ObjectPropertyEditorTest extends XwtModelTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void prepareMyComponent_setButton() throws Exception {
-    prepareMyComponent(
-        "  // filler filler filler filler filler",
-        "  // filler filler filler filler filler",
-        "  // filler filler filler filler filler",
-        "  private Button m_button;",
-        "  public void setValue(Button button) {",
-        "    m_button = button;",
-        "  }",
-        "  public Button getValue() {",
-        "    return m_button;",
-        "  }",
-        "");
-    waitForAutoBuild();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void prepareMyComponent_setButton() throws Exception {
+		prepareMyComponent(
+				"  // filler filler filler filler filler",
+				"  // filler filler filler filler filler",
+				"  // filler filler filler filler filler",
+				"  private Button m_button;",
+				"  public void setValue(Button button) {",
+				"    m_button = button;",
+				"  }",
+				"  public Button getValue() {",
+				"    return m_button;",
+				"  }",
+				"");
+		waitForAutoBuild();
+	}
 
-  public void test_setComponent() throws Exception {
-    prepareMyComponent_setButton();
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Text/>",
-        "  <Button/>",
-        "  <t:MyComponent wbp:name='component'/>",
-        "</Shell>");
-    refresh();
-    XmlObjectInfo component = getObjectByName("component");
-    // prepare property
-    final Property property = component.getPropertyByTitle("value");
-    assertNotNull(property);
-    assertSame(PropertyCategory.ADVANCED, property.getCategory());
-    // no value
-    assertFalse(property.isModified());
-    assertEquals(null, getPropertyText(property));
-    // prepare editor
-    final PropertyEditor propertyEditor = property.getEditor();
-    assertThat(propertyEditor).isSameAs(ObjectPropertyEditor.INSTANCE);
-    // animate
-    new UiContext().executeAndCheck(new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        openPropertyDialog(property);
-      }
-    }, new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        context.useShell("value");
-        Button okButton = context.getButtonByText("OK");
-        // initially "Shell" selected, so invalid
-        {
-          TreeItem shellItem = context.getTreeItem("Shell");
-          TreeItem[] selection = shellItem.getParent().getSelection();
-          assertThat(selection).containsOnly(shellItem);
-        }
-        assertFalse(okButton.isEnabled());
-        // "Button" - valid
-        {
-          TreeItem buttonItem = context.getTreeItem("Button");
-          UiContext.setSelection(buttonItem);
-          assertTrue(okButton.isEnabled());
-        }
-        // click OK
-        context.clickButton(okButton);
-      }
-    });
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Text/>",
-        "  <Button x:Name='button'/>",
-        "  <t:MyComponent wbp:name='component' value='{Binding ElementName=button}'/>",
-        "</Shell>");
-    assertEquals("Button - button", getPropertyText(property));
-  }
+	public void test_setComponent() throws Exception {
+		prepareMyComponent_setButton();
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Text/>",
+				"  <Button/>",
+				"  <t:MyComponent wbp:name='component'/>",
+				"</Shell>");
+		refresh();
+		XmlObjectInfo component = getObjectByName("component");
+		// prepare property
+		final Property property = component.getPropertyByTitle("value");
+		assertNotNull(property);
+		assertSame(PropertyCategory.ADVANCED, property.getCategory());
+		// no value
+		assertFalse(property.isModified());
+		assertEquals(null, getPropertyText(property));
+		// prepare editor
+		final PropertyEditor propertyEditor = property.getEditor();
+		assertThat(propertyEditor).isSameAs(ObjectPropertyEditor.INSTANCE);
+		// animate
+		new UiContext().executeAndCheck(new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				openPropertyDialog(property);
+			}
+		}, new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				context.useShell("value");
+				Button okButton = context.getButtonByText("OK");
+				// initially "Shell" selected, so invalid
+				{
+					TreeItem shellItem = context.getTreeItem("Shell");
+					TreeItem[] selection = shellItem.getParent().getSelection();
+					assertThat(selection).containsOnly(shellItem);
+				}
+				assertFalse(okButton.isEnabled());
+				// "Button" - valid
+				{
+					TreeItem buttonItem = context.getTreeItem("Button");
+					UiContext.setSelection(buttonItem);
+					assertTrue(okButton.isEnabled());
+				}
+				// click OK
+				context.clickButton(okButton);
+			}
+		});
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Text/>",
+				"  <Button x:Name='button'/>",
+				"  <t:MyComponent wbp:name='component' value='{Binding ElementName=button}'/>",
+				"</Shell>");
+		assertEquals("Button - button", getPropertyText(property));
+	}
 
-  /**
-   * {@link ObjectPropertyEditor} should select current value in dialog.
-   */
-  public void test_initialSelection() throws Exception {
-    prepareMyComponent_setButton();
-    parse(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Text/>",
-        "  <Button x:Name='button'/>",
-        "  <t:MyComponent wbp:name='component' value='{Binding ElementName=button}'/>",
-        "</Shell>");
-    refresh();
-    XmlObjectInfo component = getObjectByName("component");
-    // prepare property
-    final Property property = component.getPropertyByTitle("value");
-    assertNotNull(property);
-    assertSame(PropertyCategory.ADVANCED, property.getCategory());
-    // has value
-    assertTrue(property.isModified());
-    assertEquals("Button - button", getPropertyText(property));
-    // animate
-    new UiContext().executeAndCheck(new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        openPropertyDialog(property);
-      }
-    }, new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        context.useShell("value");
-        // initially "Button" selected, so invalid
-        try {
-          TreeItem buttonItem = context.getTreeItem("Button - button");
-          TreeItem[] selection = buttonItem.getParent().getSelection();
-          assertThat(selection).containsOnly(buttonItem);
-        } finally {
-          context.clickButton("Cancel");
-        }
-      }
-    });
-  }
+	/**
+	 * {@link ObjectPropertyEditor} should select current value in dialog.
+	 */
+	public void test_initialSelection() throws Exception {
+		prepareMyComponent_setButton();
+		parse(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Text/>",
+				"  <Button x:Name='button'/>",
+				"  <t:MyComponent wbp:name='component' value='{Binding ElementName=button}'/>",
+				"</Shell>");
+		refresh();
+		XmlObjectInfo component = getObjectByName("component");
+		// prepare property
+		final Property property = component.getPropertyByTitle("value");
+		assertNotNull(property);
+		assertSame(PropertyCategory.ADVANCED, property.getCategory());
+		// has value
+		assertTrue(property.isModified());
+		assertEquals("Button - button", getPropertyText(property));
+		// animate
+		new UiContext().executeAndCheck(new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				openPropertyDialog(property);
+			}
+		}, new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				context.useShell("value");
+				// initially "Button" selected, so invalid
+				try {
+					TreeItem buttonItem = context.getTreeItem("Button - button");
+					TreeItem[] selection = buttonItem.getParent().getSelection();
+					assertThat(selection).containsOnly(buttonItem);
+				} finally {
+					context.clickButton("Cancel");
+				}
+			}
+		});
+	}
 
-  /**
-   * Test for case when one of the models is just {@link ObjectInfo}, not {@link XmlObjectInfo}.
-   */
-  public void test_withObjectInfo() throws Exception {
-    prepareMyComponent_setButton();
-    XmlObjectInfo shell =
-        parse(
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <t:MyComponent wbp:name='component'/>",
-            "</Shell>");
-    refresh();
-    XmlObjectInfo component = getObjectByName("component");
-    shell.addChild(new TestObjectInfo());
-    // animate, just check that no exceptions
-    final Property property = component.getPropertyByTitle("value");
-    new UiContext().executeAndCheck(new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        openPropertyDialog(property);
-      }
-    }, new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        context.useShell("value");
-        context.clickButton("Cancel");
-      }
-    });
-  }
+	/**
+	 * Test for case when one of the models is just {@link ObjectInfo}, not {@link XmlObjectInfo}.
+	 */
+	public void test_withObjectInfo() throws Exception {
+		prepareMyComponent_setButton();
+		XmlObjectInfo shell =
+				parse(
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <t:MyComponent wbp:name='component'/>",
+						"</Shell>");
+		refresh();
+		XmlObjectInfo component = getObjectByName("component");
+		shell.addChild(new TestObjectInfo());
+		// animate, just check that no exceptions
+		final Property property = component.getPropertyByTitle("value");
+		new UiContext().executeAndCheck(new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				openPropertyDialog(property);
+			}
+		}, new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				context.useShell("value");
+				context.clickButton("Cancel");
+			}
+		});
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/property/PropertyTests.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/property/PropertyTests.java
index 5cb9db595..e855730a5 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/property/PropertyTests.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/property/PropertyTests.java
@@ -22,15 +22,15 @@
  * @author scheglov_ke
  */
 public class PropertyTests extends DesignerSuiteTests {
-  public static Test suite() {
-    TestSuite suite = new TestSuite("org.eclipse.wb.xwt.model.property");
-    suite.addTest(createSingleSuite(XwtStyleClassResolverTest.class));
-    suite.addTest(createSingleSuite(StylePropertyEditorTest.class));
-    suite.addTest(createSingleSuite(ColorPropertyEditorTest.class));
-    suite.addTest(createSingleSuite(FontPropertyEditorTest.class));
-    suite.addTest(createSingleSuite(ImagePropertyEditorTest.class));
-    suite.addTest(createSingleSuite(InnerClassPropertyEditorTest.class));
-    suite.addTest(createSingleSuite(ObjectPropertyEditorTest.class));
-    return suite;
-  }
+	public static Test suite() {
+		TestSuite suite = new TestSuite("org.eclipse.wb.xwt.model.property");
+		suite.addTest(createSingleSuite(XwtStyleClassResolverTest.class));
+		suite.addTest(createSingleSuite(StylePropertyEditorTest.class));
+		suite.addTest(createSingleSuite(ColorPropertyEditorTest.class));
+		suite.addTest(createSingleSuite(FontPropertyEditorTest.class));
+		suite.addTest(createSingleSuite(ImagePropertyEditorTest.class));
+		suite.addTest(createSingleSuite(InnerClassPropertyEditorTest.class));
+		suite.addTest(createSingleSuite(ObjectPropertyEditorTest.class));
+		return suite;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/property/StylePropertyEditorTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/property/StylePropertyEditorTest.java
index 9e7a4d439..8743bae08 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/property/StylePropertyEditorTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/property/StylePropertyEditorTest.java
@@ -44,600 +44,600 @@
  * @author scheglov_ke
  */
 public class StylePropertyEditorTest extends XwtModelTest {
-  private GenericProperty m_styleProperty;
-  private StylePropertyEditor m_editor;
-  private Property[] m_properties;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Life cycle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void configureNewProject() throws Exception {
-    super.configureNewProject();
-    setFileContentSrc(
-        "test/SWT.java",
-        getSource(
-            "package test;",
-            "public interface SWT {",
-            "  int NONE = 0;",
-            "  int B0 = 1 << 0;",
-            "  int B1 = 1 << 1;",
-            "  int B2 = 1 << 2;",
-            "  int B3 = 1 << 3;",
-            "  //",
-            "  int R1 = 1 << 4;",
-            "  int R2 = 1 << 5;",
-            "  int R3 = 1 << 6;",
-            "  int R4 = 1 << 7;",
-            "  // mix",
-            "  int B0_B1 = B0 | B1;",
-            "  int B0_B2 = B0 | B2;",
-            "  int B0_R2 = B0 | R2;",
-            "}"));
-    waitForAutoBuild();
-    forgetCreatedResources();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Set
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_Set_1() throws Exception {
-    parseStyleProperties("set|B0 B1 B2:specialName");
-    {
-      assertThat(m_properties).hasSize(3);
-      // titles
-      assertEquals("b0", m_properties[0].getTitle());
-      assertEquals("b1", m_properties[1].getTitle());
-      assertEquals("specialName", m_properties[2].getTitle());
-      // always modified
-      assertTrue(m_properties[0].isModified());
-      assertTrue(m_properties[1].isModified());
-      assertTrue(m_properties[2].isModified());
-      // values
-      for (Property property : m_properties) {
-        assertInstanceOf(BooleanPropertyEditor.class, property.getEditor());
-        assertEquals(false, property.getValue());
-      }
-    }
-    // initial state
-    assertEditorText("[]");
-    // "B0" := true
-    m_properties[0].setValue(Boolean.TRUE);
-    assertEquals(Boolean.TRUE, m_properties[0].getValue());
-    assertStyleSource("B0");
-    assertEditorText("[B0]");
-    // "B2" := true
-    m_properties[2].setValue(Boolean.TRUE);
-    assertEquals(Boolean.TRUE, m_properties[2].getValue());
-    assertStyleSource("B0 | B2");
-    assertEditorText("[B0, B2]");
-    // "B0" := unknown
-    m_properties[0].setValue(Property.UNKNOWN_VALUE);
-    assertEquals(Boolean.FALSE, m_properties[0].getValue());
-    assertStyleSource("B2");
-    assertEditorText("[B2]");
-    // "B2" := unknown
-    m_properties[2].setValue(Property.UNKNOWN_VALUE);
-    assertEquals(Boolean.FALSE, m_properties[2].getValue());
-    assertStyleSource(null);
-    assertEditorText("[]");
-  }
-
-  public void test_Set_ignoreIfNoSuchField() throws Exception {
-    parseStyleProperties("set|B0 noSuchField");
-    // check
-    String[] names = PropertyUtils.getTitles(m_properties);
-    assertThat(names).containsOnly("b0");
-    // warnings expected
-    checkWarning("StylePropertyEditor: can not find field test.SWT.noSuchField");
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Select
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_Select_1() throws Exception {
-    parseStyleProperties("set|B0 B1", "select0|align R1 R1 R2 R3");
-    // check sub properties
-    String[] subNames = {"align", "b0", "b1"};
-    assertEquals(subNames.length, m_properties.length);
-    for (int i = 1; i < 3; i++) {
-      Property property = m_properties[i];
-      assertEquals(subNames[i], property.getTitle());
-      assertInstanceOf(BooleanPropertyEditor.class, property.getEditor());
-      assertEquals(false, property.getValue());
-    }
-    //
-    Property alignProperty = m_properties[0];
-    assertEquals(subNames[0], alignProperty.getTitle());
-    assertEquals("R1", alignProperty.getValue());
-    // "B0" := true
-    m_properties[1].setValue(true);
-    assertEquals(true, m_properties[1].getValue());
-    assertStyleSource("B0");
-    assertEditorText("[B0]");
-    // "align" := R2
-    alignProperty.setValue("R2");
-    assertEquals("R2", alignProperty.getValue());
-    assertStyleSource("B0 | R2");
-    assertEditorText("[B0, R2]");
-    // "align" := R3
-    alignProperty.setValue("R3");
-    assertEquals("R3", alignProperty.getValue());
-    assertStyleSource("B0 | R3");
-    assertEditorText("[B0, R3]");
-    // "B0" := false
-    m_properties[1].setValue(false);
-    assertEquals(false, m_properties[1].getValue());
-    assertStyleSource("R3");
-    assertEditorText("[R3]");
-    // "align" := R1
-    alignProperty.setValue("R1");
-    assertEquals("R1", alignProperty.getValue());
-    assertStyleSource(null);
-    assertEditorText("[]");
-    // "align" := R2
-    alignProperty.setValue("R2");
-    assertEquals("R2", alignProperty.getValue());
-    assertStyleSource("R2");
-    assertEditorText("[R2]");
-    // "align" := unknown
-    alignProperty.setValue(Property.UNKNOWN_VALUE);
-    assertEquals("R1", alignProperty.getValue());
-    assertStyleSource(null);
-    assertEditorText("[]");
-  }
-
-  public void test_Select_ignoreInNoSuchField() throws Exception {
-    parseStyleProperties("select0|align 15 15 R1 noSuchField");
-    assertThat(PropertyUtils.getTitles(m_properties)).containsOnly("align");
-    Property alignProperty = m_properties[0];
-    //
-    assertEquals("align", alignProperty.getTitle());
-    assertEquals("15", alignProperty.getValue());
-    //
-    assertInstanceOf(StringComboPropertyEditor.class, alignProperty.getEditor());
-    String[] items =
-        (String[]) ReflectionUtils.getFieldObject(alignProperty.getEditor(), "m_items");
-    assertEquals(2, items.length);
-    assertEquals("15", items[0]);
-    assertEquals("R1", items[1]);
-    // check warnings
-    checkWarning("StylePropertyEditor: can not find field test.SWT.noSuchField");
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Macro
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_Macro_1() throws Exception {
-    parseStyleProperties("set|B0 B1 B2 B3", "macro0|mix B0_B1 B0_B2 R1");
-    Property property_B0 = m_properties[0];
-    Property property_B1 = m_properties[1];
-    Property property_B2 = m_properties[2];
-    Property property_B3 = m_properties[3];
-    Property propertyMix = m_properties[4];
-    // "B0" := true
-    property_B0.setValue(true);
-    assertStyleSource("B0");
-    assertEquals("", propertyMix.getValue());
-    assertEditorText("[B0]");
-    // "mix" := B0_B1
-    propertyMix.setValue("B0_B1");
-    assertEquals("B0_B1", propertyMix.getValue());
-    assertEquals(true, property_B0.getValue());
-    assertEquals(true, property_B1.getValue());
-    assertEquals(false, property_B2.getValue());
-    assertEquals(false, property_B3.getValue());
-    assertStyleSource("B0_B1");
-    assertEditorText("[B0_B1]");
-    // add "B3"
-    property_B3.setValue(true);
-    assertEquals("B0_B1", propertyMix.getValue());
-    assertEquals(true, property_B0.getValue());
-    assertEquals(true, property_B1.getValue());
-    assertEquals(false, property_B2.getValue());
-    assertEquals(true, property_B3.getValue());
-    assertStyleSource("B0_B1 | B3");
-    assertEditorText("[B0_B1, B3]");
-    // set "R1", change style fully
-    propertyMix.setValue("R1");
-    assertEquals("R1", propertyMix.getValue());
-    assertEquals(false, property_B0.getValue());
-    assertEquals(false, property_B1.getValue());
-    assertEquals(false, property_B2.getValue());
-    assertEquals(false, property_B3.getValue());
-    assertStyleSource("R1");
-    assertEditorText("[R1]");
-  }
-
-  public void test_Macro_2() throws Exception {
-    parseStyleProperties("set|B0 B1", "macro0|mix B0_B1 R1");
-    Property property_B0 = m_properties[0];
-    Property property_B1 = m_properties[1];
-    Property propertyMix = m_properties[2];
-    // "mix" := B0_B1
-    propertyMix.setValue("B0_B1");
-    assertEquals("B0_B1", propertyMix.getValue());
-    assertEquals(true, property_B0.getValue());
-    assertEquals(true, property_B1.getValue());
-    assertStyleSource("B0_B1");
-    assertEditorText("[B0_B1]");
-    // remove "B0"
-    property_B0.setValue(false);
-    assertEquals("", propertyMix.getValue());
-    assertEquals(false, property_B0.getValue());
-    assertEquals(true, property_B1.getValue());
-    assertStyleSource("B1");
-    assertEditorText("[B1]");
-  }
-
-  public void test_Macro_ignoreIfNoSuchField() throws Exception {
-    parseStyleProperties("macro0|mix B0_B1 noSuchField");
-    assertThat(PropertyUtils.getTitles(m_properties)).containsOnly("mix");
-    Property mixProperty = m_properties[0];
-    //
-    assertEquals("mix", mixProperty.getTitle());
-    assertEquals("", mixProperty.getValue());
-    //
-    assertInstanceOf(StringComboPropertyEditor.class, mixProperty.getEditor());
-    String[] items = (String[]) ReflectionUtils.getFieldObject(mixProperty.getEditor(), "m_items");
-    assertThat(items).containsOnly("B0_B1", "");
-    // check warnings
-    checkWarning("StylePropertyEditor: can not find field test.SWT.noSuchField");
-  }
-
-  public void test_Macro_ifMacro_thenNoSelect() throws Exception {
-    parseStyleProperties("", new String[]{"select0|align R1 R1 R2", "macro0|mix B0_R2"});
-    Property propertySelect = m_properties[0];
-    Property propertyMix = m_properties[1];
-    // initially no values
-    assertEquals("R1", propertySelect.getValue());
-    assertEquals("", propertyMix.getValue());
-    // set "R2"
-    propertySelect.setValue("R2");
-    assertEquals("R2", propertySelect.getValue());
-    assertEquals("", propertyMix.getValue());
-    assertStyleSource("R2");
-    assertEditorText("[R2]");
-    // "mix" := B0_R2
-    propertyMix.setValue("B0_R2");
-    assertEquals("R2", propertySelect.getValue());
-    assertEquals("B0_R2", propertyMix.getValue());
-    assertStyleSource("B0_R2");
-    assertEditorText("[B0_R2]");
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Popup
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  IContributionItem[] styleItems;
-
-  private void prepareStyleItems(boolean cascade) throws Exception {
-    // prepare "Style" menu
-    IMenuManager styleMenu;
-    {
-      MenuManager manager = getDesignerMenuManager();
-      m_editor.contributeActions(m_styleProperty, manager, "Style", cascade);
-      styleMenu = findChildMenuManager(manager, "Style");
-      assertNotNull(styleMenu);
-    }
-    // remember items
-    styleItems = styleMenu.getItems();
-  }
-
-  public void test_popup() throws Exception {
-    parseStyleProperties("set|B0 B1 B2", "select0|align R1 R1 R2 R3");
-    prepareStyleItems(false);
-    // check items
-    assertThat(styleItems).hasSize(7);
-    IContributionItem item_B0 = styleItems[0];
-    IContributionItem item_R2 = styleItems[5];
-    checkItem("b0", IAction.AS_CHECK_BOX, false, item_B0);
-    checkItem("b1", IAction.AS_CHECK_BOX, false, styleItems[1]);
-    checkItem("b2", IAction.AS_CHECK_BOX, false, styleItems[2]);
-    assertInstanceOf(Separator.class, styleItems[3]);
-    checkItem("R1", IAction.AS_RADIO_BUTTON, true, styleItems[4]);
-    checkItem("R2", IAction.AS_RADIO_BUTTON, false, item_R2);
-    checkItem("R3", IAction.AS_RADIO_BUTTON, false, styleItems[6]);
-    // run "B0"
-    ((ActionContributionItem) item_B0).getAction().run();
-    assertStyleSource("B0");
-    // select "R2"
-    ((ActionContributionItem) item_R2).getAction().setChecked(true);
-    ((ActionContributionItem) item_R2).getAction().run();
-    assertStyleSource("B0 | R2");
-  }
-
-  public void test_popup_boolean() throws Exception {
-    parseStyleProperties("B1", new String[]{"set|B0 B1 B2"});
-    // check items
-    {
-      prepareStyleItems(false);
-      assertThat(styleItems).hasSize(3);
-      IContributionItem item_B0 = styleItems[0];
-      IContributionItem item_B1 = styleItems[1];
-      IContributionItem item_B2 = styleItems[2];
-      checkItem("b0", IAction.AS_CHECK_BOX, false, item_B0);
-      checkItem("b1", IAction.AS_CHECK_BOX, true, item_B1);
-      checkItem("b2", IAction.AS_CHECK_BOX, false, item_B2);
-      // run "B2"
-      ((ActionContributionItem) item_B2).getAction().run();
-    }
-    // check again
-    {
-      prepareStyleItems(false);
-      assertThat(styleItems).hasSize(3);
-      IContributionItem item_B0 = styleItems[0];
-      IContributionItem item_B1 = styleItems[1];
-      IContributionItem item_B2 = styleItems[2];
-      checkItem("b0", IAction.AS_CHECK_BOX, false, item_B0);
-      checkItem("b1", IAction.AS_CHECK_BOX, true, item_B1);
-      checkItem("b2", IAction.AS_CHECK_BOX, true, item_B2);
-    }
-  }
-
-  public void test_popup_select() throws Exception {
-    parseStyleProperties("R2", new String[]{"select0|align R1 R1 R2 R3"});
-    // check items
-    {
-      prepareStyleItems(false);
-      assertThat(styleItems).hasSize(4);
-      assertInstanceOf(Separator.class, styleItems[0]);
-      IContributionItem item_R1 = styleItems[1];
-      IContributionItem item_R2 = styleItems[2];
-      IContributionItem item_R3 = styleItems[3];
-      checkItem("R1", IAction.AS_RADIO_BUTTON, false, item_R1);
-      checkItem("R2", IAction.AS_RADIO_BUTTON, true, item_R2);
-      checkItem("R3", IAction.AS_RADIO_BUTTON, false, item_R3);
-      // run "R3"
-      {
-        IAction action_R3 = ((ActionContributionItem) item_R3).getAction();
-        action_R3.setChecked(true);
-        action_R3.run();
-      }
-    }
-    // check again
-    {
-      prepareStyleItems(false);
-      assertThat(styleItems).hasSize(4);
-      assertInstanceOf(Separator.class, styleItems[0]);
-      IContributionItem item_R1 = styleItems[1];
-      IContributionItem item_R2 = styleItems[2];
-      IContributionItem item_R3 = styleItems[3];
-      checkItem("R1", IAction.AS_RADIO_BUTTON, false, item_R1);
-      checkItem("R2", IAction.AS_RADIO_BUTTON, false, item_R2);
-      checkItem("R3", IAction.AS_RADIO_BUTTON, true, item_R3);
-    }
-  }
-
-  public void test_popup_cascade() throws Exception {
-    parseStyleProperties("set|B0 B1", "select0|align R1 R1 R2 R3");
-    prepareStyleItems(true);
-    //
-    assertThat(styleItems).hasSize(4);
-    checkItem("b0", IAction.AS_CHECK_BOX, false, styleItems[0]);
-    checkItem("b1", IAction.AS_CHECK_BOX, false, styleItems[1]);
-    assertInstanceOf(Separator.class, styleItems[2]);
-    assertInstanceOf(MenuManager.class, styleItems[3]);
-    //
-    IMenuManager alignMenu = (IMenuManager) styleItems[3];
-    IContributionItem[] alignItems = alignMenu.getItems();
-    assertThat(alignItems).hasSize(4);
-    assertInstanceOf(Separator.class, alignItems[0]);
-    checkItem("R1", IAction.AS_RADIO_BUTTON, true, alignItems[1]);
-    checkItem("R2", IAction.AS_RADIO_BUTTON, false, alignItems[2]);
-    checkItem("R3", IAction.AS_RADIO_BUTTON, false, alignItems[3]);
-  }
-
-  public void test_popup_macro() throws Exception {
-    parseStyleProperties("", new String[]{"set|B0", "macro0|mix B0_B1 B0_B2"});
-    prepareStyleItems(false);
-    // check items
-    {
-      assertThat(styleItems).hasSize(1 + 1 + 2);
-      checkItem("b0", IAction.AS_CHECK_BOX, false, styleItems[0]);
-      assertInstanceOf(Separator.class, styleItems[1]);
-      checkItem("B0_B1", IAction.AS_RADIO_BUTTON, false, styleItems[2]);
-      checkItem("B0_B2", IAction.AS_RADIO_BUTTON, false, styleItems[3]);
-      // run "B0_B1"
-      {
-        IAction action_B0_B1 = ((ActionContributionItem) styleItems[2]).getAction();
-        action_B0_B1.setChecked(true);
-        action_B0_B1.run();
-      }
-    }
-    // check again
-    {
-      prepareStyleItems(false);
-      assertThat(styleItems).hasSize(1 + 1 + 2);
-      checkItem("b0", IAction.AS_CHECK_BOX, true, styleItems[0]);
-      assertInstanceOf(Separator.class, styleItems[1]);
-      checkItem("B0_B1", IAction.AS_RADIO_BUTTON, true, styleItems[2]);
-      checkItem("B0_B2", IAction.AS_RADIO_BUTTON, false, styleItems[3]);
-    }
-  }
-
-  private static void checkItem(String text, int style, boolean value, IContributionItem item)
-      throws Exception {
-    assertInstanceOf(ActionContributionItem.class, item);
-    ActionContributionItem contributionItem = (ActionContributionItem) item;
-    IAction action = contributionItem.getAction();
-    assertNotNull(action);
-    assertEquals(text, action.getText());
-    assertEquals(style, action.getStyle());
-    assertEquals(value, action.isChecked());
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Clipboard
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_clipboard() throws Exception {
-    final CompositeInfo shell =
-        parse(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <RowLayout/>",
-            "  </Shell.layout>",
-            "  <Button wbp:name='button' text='My button' x:Style='CHECK'/>",
-            "</Shell>");
-    refresh();
-    // do copy/paste
-    {
-      ControlInfo button = getObjectByName("button");
-      doCopyPaste(button, new PasteProcedure<ControlInfo>() {
-        @Override
-        public void run(ControlInfo copy) throws Exception {
-          shell.getLayout().command_CREATE(copy, null);
-        }
-      });
-    }
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <RowLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button' text='My button' x:Style='CHECK'/>",
-        "  <Button text='My button' x:Style='CHECK'/>",
-        "</Shell>");
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void assertEditorText(String text) throws Exception {
-    assertEquals(text, getPropertyText(m_styleProperty));
-  }
-
-  private void assertStyleSource(String styleSource) {
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <t:TestComposite" + getStylePropertySource(styleSource) + "/>",
-        "</Shell>");
-  }
-
-  private static String getStylePropertySource(String styles) {
-    String source;
-    if (styles != null) {
-      source = " x:Style='";
-      for (String part : StringUtils.split(styles, " |")) {
-        source += "(t:SWT)." + part;
-        source += " | ";
-      }
-      source = StringUtils.removeEnd(source, " | ");
-      source += "'";
-    } else {
-      source = "";
-    }
-    return source;
-  }
-
-  private void parseStyleProperties(String... styleLines) throws Exception {
-    parseStyleProperties(null, styleLines);
-  }
-
-  private void parseStyleProperties(String styles, String[] styleLines0) throws Exception {
-    setFileContentSrc(
-        "test/TestComposite.java",
-        getJavaSource(
-            "public class TestComposite extends Composite {",
-            "  public TestComposite(Composite parent, int style) {",
-            "    super(parent, SWT.NONE);",
-            "  }",
-            "  protected void checkSubclass () {",
-            "  }",
-            "}"));
-    // convert: name|value into "parameter" line
-    String[] styleLines = new String[styleLines0.length];
-    for (int i = 0; i < styleLines0.length; i++) {
-      String line = styleLines0[i];
-      int index = line.indexOf('|');
-      String name = line.substring(0, index);
-      String value = line.substring(index + 1);
-      styleLines[i] = MessageFormat.format("<parameter name=''{0}''>{1}</parameter>", name, value);
-    }
-    // prepare description
-    String[] lines;
-    lines =
-        new String[]{
-            "<?xml version='1.0' encoding='UTF-8'?>",
-            "<component xmlns='http://www.eclipse.org/wb/WBPComponent'>",
-            "  <constructors>",
-            "    <constructor>",
-            "      <parameter type='int' defaultSource='test.SWT.NONE'>",
-            "        <editor id='style'>",
-            "          <parameter name='class'>test.SWT</parameter>"};
-    lines = CodeUtils.join(lines, styleLines);
-    lines =
-        CodeUtils.join(lines, new String[]{
-            "        <!-- filler filler filler filler filler -->",
-            "        </editor>",
-            "      </parameter>",
-            "    </constructor>",
-            "  </constructors>",
-            "</component>"});
-    setFileContentSrc("test/TestComposite.wbp-component.xml", getSource(lines));
-    waitForAutoBuild();
-    // parse
-    parseStyleProperties0("Style", new String[]{
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <t:TestComposite" + getStylePropertySource(styles) + "/>",
-        "</Shell>"});
-  }
-
-  private void parseStyleProperties0(String propertyPath, String[] lines) throws Exception {
-    CompositeInfo panel = parse(lines);
-    panel.refresh();
-    // prepare "style" property
-    ControlInfo component = panel.getChildrenControls().get(0);
-    m_styleProperty = (GenericProperty) PropertyUtils.getByPath(component, propertyPath);
-    // use its editor
-    m_editor = (StylePropertyEditor) m_styleProperty.getEditor();
-    m_properties = m_editor.getProperties(m_styleProperty);
-    Arrays.sort(m_properties, new Comparator<Property>() {
-      @Override
-      public int compare(Property o1, Property o2) {
-        return o1.getTitle().compareTo(o2.getTitle());
-      }
-    });
-  }
-
-  private void checkWarning(String message) throws Exception {
-    boolean find = false;
-    for (EditorWarning warning : m_lastContext.getWarnings()) {
-      find = message.equals(warning.getMessage());
-      if (find) {
-        break;
-      }
-    }
-    assertTrue(find);
-  }
+	private GenericProperty m_styleProperty;
+	private StylePropertyEditor m_editor;
+	private Property[] m_properties;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Life cycle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void configureNewProject() throws Exception {
+		super.configureNewProject();
+		setFileContentSrc(
+				"test/SWT.java",
+				getSource(
+						"package test;",
+						"public interface SWT {",
+						"  int NONE = 0;",
+						"  int B0 = 1 << 0;",
+						"  int B1 = 1 << 1;",
+						"  int B2 = 1 << 2;",
+						"  int B3 = 1 << 3;",
+						"  //",
+						"  int R1 = 1 << 4;",
+						"  int R2 = 1 << 5;",
+						"  int R3 = 1 << 6;",
+						"  int R4 = 1 << 7;",
+						"  // mix",
+						"  int B0_B1 = B0 | B1;",
+						"  int B0_B2 = B0 | B2;",
+						"  int B0_R2 = B0 | R2;",
+						"}"));
+		waitForAutoBuild();
+		forgetCreatedResources();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Set
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_Set_1() throws Exception {
+		parseStyleProperties("set|B0 B1 B2:specialName");
+		{
+			assertThat(m_properties).hasSize(3);
+			// titles
+			assertEquals("b0", m_properties[0].getTitle());
+			assertEquals("b1", m_properties[1].getTitle());
+			assertEquals("specialName", m_properties[2].getTitle());
+			// always modified
+			assertTrue(m_properties[0].isModified());
+			assertTrue(m_properties[1].isModified());
+			assertTrue(m_properties[2].isModified());
+			// values
+			for (Property property : m_properties) {
+				assertInstanceOf(BooleanPropertyEditor.class, property.getEditor());
+				assertEquals(false, property.getValue());
+			}
+		}
+		// initial state
+		assertEditorText("[]");
+		// "B0" := true
+		m_properties[0].setValue(Boolean.TRUE);
+		assertEquals(Boolean.TRUE, m_properties[0].getValue());
+		assertStyleSource("B0");
+		assertEditorText("[B0]");
+		// "B2" := true
+		m_properties[2].setValue(Boolean.TRUE);
+		assertEquals(Boolean.TRUE, m_properties[2].getValue());
+		assertStyleSource("B0 | B2");
+		assertEditorText("[B0, B2]");
+		// "B0" := unknown
+		m_properties[0].setValue(Property.UNKNOWN_VALUE);
+		assertEquals(Boolean.FALSE, m_properties[0].getValue());
+		assertStyleSource("B2");
+		assertEditorText("[B2]");
+		// "B2" := unknown
+		m_properties[2].setValue(Property.UNKNOWN_VALUE);
+		assertEquals(Boolean.FALSE, m_properties[2].getValue());
+		assertStyleSource(null);
+		assertEditorText("[]");
+	}
+
+	public void test_Set_ignoreIfNoSuchField() throws Exception {
+		parseStyleProperties("set|B0 noSuchField");
+		// check
+		String[] names = PropertyUtils.getTitles(m_properties);
+		assertThat(names).containsOnly("b0");
+		// warnings expected
+		checkWarning("StylePropertyEditor: can not find field test.SWT.noSuchField");
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Select
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_Select_1() throws Exception {
+		parseStyleProperties("set|B0 B1", "select0|align R1 R1 R2 R3");
+		// check sub properties
+		String[] subNames = {"align", "b0", "b1"};
+		assertEquals(subNames.length, m_properties.length);
+		for (int i = 1; i < 3; i++) {
+			Property property = m_properties[i];
+			assertEquals(subNames[i], property.getTitle());
+			assertInstanceOf(BooleanPropertyEditor.class, property.getEditor());
+			assertEquals(false, property.getValue());
+		}
+		//
+		Property alignProperty = m_properties[0];
+		assertEquals(subNames[0], alignProperty.getTitle());
+		assertEquals("R1", alignProperty.getValue());
+		// "B0" := true
+		m_properties[1].setValue(true);
+		assertEquals(true, m_properties[1].getValue());
+		assertStyleSource("B0");
+		assertEditorText("[B0]");
+		// "align" := R2
+		alignProperty.setValue("R2");
+		assertEquals("R2", alignProperty.getValue());
+		assertStyleSource("B0 | R2");
+		assertEditorText("[B0, R2]");
+		// "align" := R3
+		alignProperty.setValue("R3");
+		assertEquals("R3", alignProperty.getValue());
+		assertStyleSource("B0 | R3");
+		assertEditorText("[B0, R3]");
+		// "B0" := false
+		m_properties[1].setValue(false);
+		assertEquals(false, m_properties[1].getValue());
+		assertStyleSource("R3");
+		assertEditorText("[R3]");
+		// "align" := R1
+		alignProperty.setValue("R1");
+		assertEquals("R1", alignProperty.getValue());
+		assertStyleSource(null);
+		assertEditorText("[]");
+		// "align" := R2
+		alignProperty.setValue("R2");
+		assertEquals("R2", alignProperty.getValue());
+		assertStyleSource("R2");
+		assertEditorText("[R2]");
+		// "align" := unknown
+		alignProperty.setValue(Property.UNKNOWN_VALUE);
+		assertEquals("R1", alignProperty.getValue());
+		assertStyleSource(null);
+		assertEditorText("[]");
+	}
+
+	public void test_Select_ignoreInNoSuchField() throws Exception {
+		parseStyleProperties("select0|align 15 15 R1 noSuchField");
+		assertThat(PropertyUtils.getTitles(m_properties)).containsOnly("align");
+		Property alignProperty = m_properties[0];
+		//
+		assertEquals("align", alignProperty.getTitle());
+		assertEquals("15", alignProperty.getValue());
+		//
+		assertInstanceOf(StringComboPropertyEditor.class, alignProperty.getEditor());
+		String[] items =
+				(String[]) ReflectionUtils.getFieldObject(alignProperty.getEditor(), "m_items");
+		assertEquals(2, items.length);
+		assertEquals("15", items[0]);
+		assertEquals("R1", items[1]);
+		// check warnings
+		checkWarning("StylePropertyEditor: can not find field test.SWT.noSuchField");
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Macro
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_Macro_1() throws Exception {
+		parseStyleProperties("set|B0 B1 B2 B3", "macro0|mix B0_B1 B0_B2 R1");
+		Property property_B0 = m_properties[0];
+		Property property_B1 = m_properties[1];
+		Property property_B2 = m_properties[2];
+		Property property_B3 = m_properties[3];
+		Property propertyMix = m_properties[4];
+		// "B0" := true
+		property_B0.setValue(true);
+		assertStyleSource("B0");
+		assertEquals("", propertyMix.getValue());
+		assertEditorText("[B0]");
+		// "mix" := B0_B1
+		propertyMix.setValue("B0_B1");
+		assertEquals("B0_B1", propertyMix.getValue());
+		assertEquals(true, property_B0.getValue());
+		assertEquals(true, property_B1.getValue());
+		assertEquals(false, property_B2.getValue());
+		assertEquals(false, property_B3.getValue());
+		assertStyleSource("B0_B1");
+		assertEditorText("[B0_B1]");
+		// add "B3"
+		property_B3.setValue(true);
+		assertEquals("B0_B1", propertyMix.getValue());
+		assertEquals(true, property_B0.getValue());
+		assertEquals(true, property_B1.getValue());
+		assertEquals(false, property_B2.getValue());
+		assertEquals(true, property_B3.getValue());
+		assertStyleSource("B0_B1 | B3");
+		assertEditorText("[B0_B1, B3]");
+		// set "R1", change style fully
+		propertyMix.setValue("R1");
+		assertEquals("R1", propertyMix.getValue());
+		assertEquals(false, property_B0.getValue());
+		assertEquals(false, property_B1.getValue());
+		assertEquals(false, property_B2.getValue());
+		assertEquals(false, property_B3.getValue());
+		assertStyleSource("R1");
+		assertEditorText("[R1]");
+	}
+
+	public void test_Macro_2() throws Exception {
+		parseStyleProperties("set|B0 B1", "macro0|mix B0_B1 R1");
+		Property property_B0 = m_properties[0];
+		Property property_B1 = m_properties[1];
+		Property propertyMix = m_properties[2];
+		// "mix" := B0_B1
+		propertyMix.setValue("B0_B1");
+		assertEquals("B0_B1", propertyMix.getValue());
+		assertEquals(true, property_B0.getValue());
+		assertEquals(true, property_B1.getValue());
+		assertStyleSource("B0_B1");
+		assertEditorText("[B0_B1]");
+		// remove "B0"
+		property_B0.setValue(false);
+		assertEquals("", propertyMix.getValue());
+		assertEquals(false, property_B0.getValue());
+		assertEquals(true, property_B1.getValue());
+		assertStyleSource("B1");
+		assertEditorText("[B1]");
+	}
+
+	public void test_Macro_ignoreIfNoSuchField() throws Exception {
+		parseStyleProperties("macro0|mix B0_B1 noSuchField");
+		assertThat(PropertyUtils.getTitles(m_properties)).containsOnly("mix");
+		Property mixProperty = m_properties[0];
+		//
+		assertEquals("mix", mixProperty.getTitle());
+		assertEquals("", mixProperty.getValue());
+		//
+		assertInstanceOf(StringComboPropertyEditor.class, mixProperty.getEditor());
+		String[] items = (String[]) ReflectionUtils.getFieldObject(mixProperty.getEditor(), "m_items");
+		assertThat(items).containsOnly("B0_B1", "");
+		// check warnings
+		checkWarning("StylePropertyEditor: can not find field test.SWT.noSuchField");
+	}
+
+	public void test_Macro_ifMacro_thenNoSelect() throws Exception {
+		parseStyleProperties("", new String[]{"select0|align R1 R1 R2", "macro0|mix B0_R2"});
+		Property propertySelect = m_properties[0];
+		Property propertyMix = m_properties[1];
+		// initially no values
+		assertEquals("R1", propertySelect.getValue());
+		assertEquals("", propertyMix.getValue());
+		// set "R2"
+		propertySelect.setValue("R2");
+		assertEquals("R2", propertySelect.getValue());
+		assertEquals("", propertyMix.getValue());
+		assertStyleSource("R2");
+		assertEditorText("[R2]");
+		// "mix" := B0_R2
+		propertyMix.setValue("B0_R2");
+		assertEquals("R2", propertySelect.getValue());
+		assertEquals("B0_R2", propertyMix.getValue());
+		assertStyleSource("B0_R2");
+		assertEditorText("[B0_R2]");
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Popup
+	//
+	////////////////////////////////////////////////////////////////////////////
+	IContributionItem[] styleItems;
+
+	private void prepareStyleItems(boolean cascade) throws Exception {
+		// prepare "Style" menu
+		IMenuManager styleMenu;
+		{
+			MenuManager manager = getDesignerMenuManager();
+			m_editor.contributeActions(m_styleProperty, manager, "Style", cascade);
+			styleMenu = findChildMenuManager(manager, "Style");
+			assertNotNull(styleMenu);
+		}
+		// remember items
+		styleItems = styleMenu.getItems();
+	}
+
+	public void test_popup() throws Exception {
+		parseStyleProperties("set|B0 B1 B2", "select0|align R1 R1 R2 R3");
+		prepareStyleItems(false);
+		// check items
+		assertThat(styleItems).hasSize(7);
+		IContributionItem item_B0 = styleItems[0];
+		IContributionItem item_R2 = styleItems[5];
+		checkItem("b0", IAction.AS_CHECK_BOX, false, item_B0);
+		checkItem("b1", IAction.AS_CHECK_BOX, false, styleItems[1]);
+		checkItem("b2", IAction.AS_CHECK_BOX, false, styleItems[2]);
+		assertInstanceOf(Separator.class, styleItems[3]);
+		checkItem("R1", IAction.AS_RADIO_BUTTON, true, styleItems[4]);
+		checkItem("R2", IAction.AS_RADIO_BUTTON, false, item_R2);
+		checkItem("R3", IAction.AS_RADIO_BUTTON, false, styleItems[6]);
+		// run "B0"
+		((ActionContributionItem) item_B0).getAction().run();
+		assertStyleSource("B0");
+		// select "R2"
+		((ActionContributionItem) item_R2).getAction().setChecked(true);
+		((ActionContributionItem) item_R2).getAction().run();
+		assertStyleSource("B0 | R2");
+	}
+
+	public void test_popup_boolean() throws Exception {
+		parseStyleProperties("B1", new String[]{"set|B0 B1 B2"});
+		// check items
+		{
+			prepareStyleItems(false);
+			assertThat(styleItems).hasSize(3);
+			IContributionItem item_B0 = styleItems[0];
+			IContributionItem item_B1 = styleItems[1];
+			IContributionItem item_B2 = styleItems[2];
+			checkItem("b0", IAction.AS_CHECK_BOX, false, item_B0);
+			checkItem("b1", IAction.AS_CHECK_BOX, true, item_B1);
+			checkItem("b2", IAction.AS_CHECK_BOX, false, item_B2);
+			// run "B2"
+			((ActionContributionItem) item_B2).getAction().run();
+		}
+		// check again
+		{
+			prepareStyleItems(false);
+			assertThat(styleItems).hasSize(3);
+			IContributionItem item_B0 = styleItems[0];
+			IContributionItem item_B1 = styleItems[1];
+			IContributionItem item_B2 = styleItems[2];
+			checkItem("b0", IAction.AS_CHECK_BOX, false, item_B0);
+			checkItem("b1", IAction.AS_CHECK_BOX, true, item_B1);
+			checkItem("b2", IAction.AS_CHECK_BOX, true, item_B2);
+		}
+	}
+
+	public void test_popup_select() throws Exception {
+		parseStyleProperties("R2", new String[]{"select0|align R1 R1 R2 R3"});
+		// check items
+		{
+			prepareStyleItems(false);
+			assertThat(styleItems).hasSize(4);
+			assertInstanceOf(Separator.class, styleItems[0]);
+			IContributionItem item_R1 = styleItems[1];
+			IContributionItem item_R2 = styleItems[2];
+			IContributionItem item_R3 = styleItems[3];
+			checkItem("R1", IAction.AS_RADIO_BUTTON, false, item_R1);
+			checkItem("R2", IAction.AS_RADIO_BUTTON, true, item_R2);
+			checkItem("R3", IAction.AS_RADIO_BUTTON, false, item_R3);
+			// run "R3"
+			{
+				IAction action_R3 = ((ActionContributionItem) item_R3).getAction();
+				action_R3.setChecked(true);
+				action_R3.run();
+			}
+		}
+		// check again
+		{
+			prepareStyleItems(false);
+			assertThat(styleItems).hasSize(4);
+			assertInstanceOf(Separator.class, styleItems[0]);
+			IContributionItem item_R1 = styleItems[1];
+			IContributionItem item_R2 = styleItems[2];
+			IContributionItem item_R3 = styleItems[3];
+			checkItem("R1", IAction.AS_RADIO_BUTTON, false, item_R1);
+			checkItem("R2", IAction.AS_RADIO_BUTTON, false, item_R2);
+			checkItem("R3", IAction.AS_RADIO_BUTTON, true, item_R3);
+		}
+	}
+
+	public void test_popup_cascade() throws Exception {
+		parseStyleProperties("set|B0 B1", "select0|align R1 R1 R2 R3");
+		prepareStyleItems(true);
+		//
+		assertThat(styleItems).hasSize(4);
+		checkItem("b0", IAction.AS_CHECK_BOX, false, styleItems[0]);
+		checkItem("b1", IAction.AS_CHECK_BOX, false, styleItems[1]);
+		assertInstanceOf(Separator.class, styleItems[2]);
+		assertInstanceOf(MenuManager.class, styleItems[3]);
+		//
+		IMenuManager alignMenu = (IMenuManager) styleItems[3];
+		IContributionItem[] alignItems = alignMenu.getItems();
+		assertThat(alignItems).hasSize(4);
+		assertInstanceOf(Separator.class, alignItems[0]);
+		checkItem("R1", IAction.AS_RADIO_BUTTON, true, alignItems[1]);
+		checkItem("R2", IAction.AS_RADIO_BUTTON, false, alignItems[2]);
+		checkItem("R3", IAction.AS_RADIO_BUTTON, false, alignItems[3]);
+	}
+
+	public void test_popup_macro() throws Exception {
+		parseStyleProperties("", new String[]{"set|B0", "macro0|mix B0_B1 B0_B2"});
+		prepareStyleItems(false);
+		// check items
+		{
+			assertThat(styleItems).hasSize(1 + 1 + 2);
+			checkItem("b0", IAction.AS_CHECK_BOX, false, styleItems[0]);
+			assertInstanceOf(Separator.class, styleItems[1]);
+			checkItem("B0_B1", IAction.AS_RADIO_BUTTON, false, styleItems[2]);
+			checkItem("B0_B2", IAction.AS_RADIO_BUTTON, false, styleItems[3]);
+			// run "B0_B1"
+			{
+				IAction action_B0_B1 = ((ActionContributionItem) styleItems[2]).getAction();
+				action_B0_B1.setChecked(true);
+				action_B0_B1.run();
+			}
+		}
+		// check again
+		{
+			prepareStyleItems(false);
+			assertThat(styleItems).hasSize(1 + 1 + 2);
+			checkItem("b0", IAction.AS_CHECK_BOX, true, styleItems[0]);
+			assertInstanceOf(Separator.class, styleItems[1]);
+			checkItem("B0_B1", IAction.AS_RADIO_BUTTON, true, styleItems[2]);
+			checkItem("B0_B2", IAction.AS_RADIO_BUTTON, false, styleItems[3]);
+		}
+	}
+
+	private static void checkItem(String text, int style, boolean value, IContributionItem item)
+			throws Exception {
+		assertInstanceOf(ActionContributionItem.class, item);
+		ActionContributionItem contributionItem = (ActionContributionItem) item;
+		IAction action = contributionItem.getAction();
+		assertNotNull(action);
+		assertEquals(text, action.getText());
+		assertEquals(style, action.getStyle());
+		assertEquals(value, action.isChecked());
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Clipboard
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_clipboard() throws Exception {
+		final CompositeInfo shell =
+				parse(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <RowLayout/>",
+						"  </Shell.layout>",
+						"  <Button wbp:name='button' text='My button' x:Style='CHECK'/>",
+						"</Shell>");
+		refresh();
+		// do copy/paste
+		{
+			ControlInfo button = getObjectByName("button");
+			doCopyPaste(button, new PasteProcedure<ControlInfo>() {
+				@Override
+				public void run(ControlInfo copy) throws Exception {
+					shell.getLayout().command_CREATE(copy, null);
+				}
+			});
+		}
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <RowLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button' text='My button' x:Style='CHECK'/>",
+				"  <Button text='My button' x:Style='CHECK'/>",
+				"</Shell>");
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void assertEditorText(String text) throws Exception {
+		assertEquals(text, getPropertyText(m_styleProperty));
+	}
+
+	private void assertStyleSource(String styleSource) {
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <t:TestComposite" + getStylePropertySource(styleSource) + "/>",
+				"</Shell>");
+	}
+
+	private static String getStylePropertySource(String styles) {
+		String source;
+		if (styles != null) {
+			source = " x:Style='";
+			for (String part : StringUtils.split(styles, " |")) {
+				source += "(t:SWT)." + part;
+				source += " | ";
+			}
+			source = StringUtils.removeEnd(source, " | ");
+			source += "'";
+		} else {
+			source = "";
+		}
+		return source;
+	}
+
+	private void parseStyleProperties(String... styleLines) throws Exception {
+		parseStyleProperties(null, styleLines);
+	}
+
+	private void parseStyleProperties(String styles, String[] styleLines0) throws Exception {
+		setFileContentSrc(
+				"test/TestComposite.java",
+				getJavaSource(
+						"public class TestComposite extends Composite {",
+						"  public TestComposite(Composite parent, int style) {",
+						"    super(parent, SWT.NONE);",
+						"  }",
+						"  protected void checkSubclass () {",
+						"  }",
+						"}"));
+		// convert: name|value into "parameter" line
+		String[] styleLines = new String[styleLines0.length];
+		for (int i = 0; i < styleLines0.length; i++) {
+			String line = styleLines0[i];
+			int index = line.indexOf('|');
+			String name = line.substring(0, index);
+			String value = line.substring(index + 1);
+			styleLines[i] = MessageFormat.format("<parameter name=''{0}''>{1}</parameter>", name, value);
+		}
+		// prepare description
+		String[] lines;
+		lines =
+				new String[]{
+						"<?xml version='1.0' encoding='UTF-8'?>",
+						"<component xmlns='http://www.eclipse.org/wb/WBPComponent'>",
+						"  <constructors>",
+						"    <constructor>",
+						"      <parameter type='int' defaultSource='test.SWT.NONE'>",
+						"        <editor id='style'>",
+		"          <parameter name='class'>test.SWT</parameter>"};
+		lines = CodeUtils.join(lines, styleLines);
+		lines =
+				CodeUtils.join(lines, new String[]{
+						"        <!-- filler filler filler filler filler -->",
+						"        </editor>",
+						"      </parameter>",
+						"    </constructor>",
+						"  </constructors>",
+				"</component>"});
+		setFileContentSrc("test/TestComposite.wbp-component.xml", getSource(lines));
+		waitForAutoBuild();
+		// parse
+		parseStyleProperties0("Style", new String[]{
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <t:TestComposite" + getStylePropertySource(styles) + "/>",
+		"</Shell>"});
+	}
+
+	private void parseStyleProperties0(String propertyPath, String[] lines) throws Exception {
+		CompositeInfo panel = parse(lines);
+		panel.refresh();
+		// prepare "style" property
+		ControlInfo component = panel.getChildrenControls().get(0);
+		m_styleProperty = (GenericProperty) PropertyUtils.getByPath(component, propertyPath);
+		// use its editor
+		m_editor = (StylePropertyEditor) m_styleProperty.getEditor();
+		m_properties = m_editor.getProperties(m_styleProperty);
+		Arrays.sort(m_properties, new Comparator<Property>() {
+			@Override
+			public int compare(Property o1, Property o2) {
+				return o1.getTitle().compareTo(o2.getTitle());
+			}
+		});
+	}
+
+	private void checkWarning(String message) throws Exception {
+		boolean find = false;
+		for (EditorWarning warning : m_lastContext.getWarnings()) {
+			find = message.equals(warning.getMessage());
+			if (find) {
+				break;
+			}
+		}
+		assertTrue(find);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/property/XwtStyleClassResolverTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/property/XwtStyleClassResolverTest.java
index 38f55872a..4d6205c50 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/property/XwtStyleClassResolverTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/property/XwtStyleClassResolverTest.java
@@ -22,32 +22,32 @@
  * @author scheglov_ke
  */
 public class XwtStyleClassResolverTest extends XwtModelTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_0() throws Exception {
-    XmlObjectInfo object = parse("<Shell/>");
-    Property property = object.getPropertyByTitle("enabled");
-    IStyleClassResolver resolver = XwtStyleClassResolver.INSTANCE;
-    // SWT
-    assertEquals("", resolver.resolve(property, "org.eclipse.swt.SWT"));
-    assertXML("<Shell/>");
-    // existing package
-    assertEquals("(t:Constants).", resolver.resolve(property, "test.Constants"));
-    assertXML("<Shell/>");
-    // new package
-    assertEquals("(p1:Constants).", resolver.resolve(property, "my.own.package.Constants"));
-    assertXML("<Shell xmlns:p1='clr-namespace:my.own.package'/>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_0() throws Exception {
+		XmlObjectInfo object = parse("<Shell/>");
+		Property property = object.getPropertyByTitle("enabled");
+		IStyleClassResolver resolver = XwtStyleClassResolver.INSTANCE;
+		// SWT
+		assertEquals("", resolver.resolve(property, "org.eclipse.swt.SWT"));
+		assertXML("<Shell/>");
+		// existing package
+		assertEquals("(t:Constants).", resolver.resolve(property, "test.Constants"));
+		assertXML("<Shell/>");
+		// new package
+		assertEquals("(p1:Constants).", resolver.resolve(property, "my.own.package.Constants"));
+		assertXML("<Shell xmlns:p1='clr-namespace:my.own.package'/>");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/ButtonTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/ButtonTest.java
index 556885178..a0e84103b 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/ButtonTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/ButtonTest.java
@@ -20,38 +20,38 @@
  * @author sablin_aa
  */
 public class ButtonTest extends XwtModelTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // MenuStylePresentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test that {@link StylePresentation} returns different icons for menus with different styles.
-   */
-  public void test_StylePresentation() throws Exception {
-    parse(
-        "<Shell>",
-        "  <Button text='Button' wbp:name='button'/>",
-        "  <Button x:Style='CHECK' text='Check Button' wbp:name='checkbox'/>",
-        "  <Button x:Style='RADIO' text='Radio Button' wbp:name='radio'/>",
-        "</Shell>");
-    refresh();
-    // prepare models
-    ButtonInfo button = getObjectByName("button");
-    ButtonInfo checkbox = getObjectByName("checkbox");
-    ButtonInfo radio = getObjectByName("radio");
-    // test icons
-    assertNotSame(button.getPresentation().getIcon(), checkbox.getPresentation().getIcon());
-    assertNotSame(checkbox.getPresentation().getIcon(), radio.getPresentation().getIcon());
-    assertNotSame(radio.getPresentation().getIcon(), button.getPresentation().getIcon());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// MenuStylePresentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test that {@link StylePresentation} returns different icons for menus with different styles.
+	 */
+	public void test_StylePresentation() throws Exception {
+		parse(
+				"<Shell>",
+				"  <Button text='Button' wbp:name='button'/>",
+				"  <Button x:Style='CHECK' text='Check Button' wbp:name='checkbox'/>",
+				"  <Button x:Style='RADIO' text='Radio Button' wbp:name='radio'/>",
+				"</Shell>");
+		refresh();
+		// prepare models
+		ButtonInfo button = getObjectByName("button");
+		ButtonInfo checkbox = getObjectByName("checkbox");
+		ButtonInfo radio = getObjectByName("radio");
+		// test icons
+		assertNotSame(button.getPresentation().getIcon(), checkbox.getPresentation().getIcon());
+		assertNotSame(checkbox.getPresentation().getIcon(), radio.getPresentation().getIcon());
+		assertNotSame(radio.getPresentation().getIcon(), button.getPresentation().getIcon());
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/CBannerGefTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/CBannerGefTest.java
index 3af2a1ca7..00f97c891 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/CBannerGefTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/CBannerGefTest.java
@@ -20,113 +20,113 @@
  * @author scheglov_ke
  */
 public class CBannerGefTest extends XwtGefTest {
-  private CBannerInfo banner;
+	private CBannerInfo banner;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Source
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getTestSource_namespaces() {
-    return super.getTestSource_namespaces() + " xmlns:c='clr-namespace:org.eclipse.swt.custom'";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Source
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getTestSource_namespaces() {
+		return super.getTestSource_namespaces() + " xmlns:c='clr-namespace:org.eclipse.swt.custom'";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Canvas, CREATE
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_canvas_CREATE_left() throws Exception {
-    prepare_canvas_CREATE();
-    // use canvas
-    canvas.target(banner).in(0.1, 0.1).move();
-    canvas.click();
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<CBanner>",
-        "  <CBanner.left>",
-        "    <Button/>",
-        "  </CBanner.left>",
-        "</CBanner>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Canvas, CREATE
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_canvas_CREATE_left() throws Exception {
+		prepare_canvas_CREATE();
+		// use canvas
+		canvas.target(banner).in(0.1, 0.1).move();
+		canvas.click();
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<CBanner>",
+				"  <CBanner.left>",
+				"    <Button/>",
+				"  </CBanner.left>",
+				"</CBanner>");
+	}
 
-  public void test_canvas_CREATE_right() throws Exception {
-    prepare_canvas_CREATE();
-    // use canvas
-    canvas.target(banner).in(-0.1, 0.1).move();
-    canvas.click();
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<CBanner>",
-        "  <CBanner.right>",
-        "    <Button/>",
-        "  </CBanner.right>",
-        "</CBanner>");
-  }
+	public void test_canvas_CREATE_right() throws Exception {
+		prepare_canvas_CREATE();
+		// use canvas
+		canvas.target(banner).in(-0.1, 0.1).move();
+		canvas.click();
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<CBanner>",
+				"  <CBanner.right>",
+				"    <Button/>",
+				"  </CBanner.right>",
+				"</CBanner>");
+	}
 
-  public void test_canvas_CREATE_bottom() throws Exception {
-    prepare_canvas_CREATE();
-    // use canvas
-    canvas.target(banner).in(0.5, -0.1).move();
-    canvas.click();
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<CBanner>",
-        "  <CBanner.bottom>",
-        "    <Button/>",
-        "  </CBanner.bottom>",
-        "</CBanner>");
-  }
+	public void test_canvas_CREATE_bottom() throws Exception {
+		prepare_canvas_CREATE();
+		// use canvas
+		canvas.target(banner).in(0.5, -0.1).move();
+		canvas.click();
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<CBanner>",
+				"  <CBanner.bottom>",
+				"    <Button/>",
+				"  </CBanner.bottom>",
+				"</CBanner>");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // CREATE
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private CBannerInfo prepare_canvas_CREATE() throws Exception {
-    banner =
-        openEditor(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<CBanner/>");
-    // create Button
-    loadButton();
-    canvas.create(0, 0);
-    // use this CBanner_Info
-    return banner;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// CREATE
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private CBannerInfo prepare_canvas_CREATE() throws Exception {
+		banner =
+				openEditor(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<CBanner/>");
+		// create Button
+		loadButton();
+		canvas.create(0, 0);
+		// use this CBanner_Info
+		return banner;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tree
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_tree_CREATE_left() throws Exception {
-    prepare_canvas_CREATE();
-    // use tree
-    EditPart position = tree.getEditPart(banner).getChildren().get(0);
-    tree.moveBefore(position);
-    tree.moveOn(position).click();
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<CBanner>",
-        "  <CBanner.left>",
-        "    <Button/>",
-        "  </CBanner.left>",
-        "</CBanner>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tree
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_tree_CREATE_left() throws Exception {
+		prepare_canvas_CREATE();
+		// use tree
+		EditPart position = tree.getEditPart(banner).getChildren().get(0);
+		tree.moveBefore(position);
+		tree.moveOn(position).click();
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<CBanner>",
+				"  <CBanner.left>",
+				"    <Button/>",
+				"  </CBanner.left>",
+				"</CBanner>");
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/CBannerTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/CBannerTest.java
index 0d1b8e59a..4a2375b34 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/CBannerTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/CBannerTest.java
@@ -28,96 +28,96 @@
  * @author scheglov_ke
  */
 public class CBannerTest extends XwtModelTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Source
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getTestSource_namespaces() {
-    return super.getTestSource_namespaces() + " xmlns:c='clr-namespace:org.eclipse.swt.custom'";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Source
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getTestSource_namespaces() {
+		return super.getTestSource_namespaces() + " xmlns:c='clr-namespace:org.eclipse.swt.custom'";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * No any children {@link ControlInfo}'s, so for all positions <code>null</code>.
-   */
-  public void test_childrenNo() throws Exception {
-    CBannerInfo banner =
-        parse(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<CBanner/>");
-    // no "real" Control's
-    assertNull(banner.getControl("noSuchMethod"));
-    assertNull(banner.getControl("left"));
-    assertNull(banner.getControl("right"));
-    assertNull(banner.getControl("bottom"));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * No any children {@link ControlInfo}'s, so for all positions <code>null</code>.
+	 */
+	public void test_childrenNo() throws Exception {
+		CBannerInfo banner =
+				parse(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<CBanner/>");
+		// no "real" Control's
+		assertNull(banner.getControl("noSuchMethod"));
+		assertNull(banner.getControl("left"));
+		assertNull(banner.getControl("right"));
+		assertNull(banner.getControl("bottom"));
+	}
 
-  /**
-   * Test for {@link CBannerInfo#getControl(String)}.
-   */
-  public void test_children() throws Exception {
-    CBannerInfo banner =
-        parse(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<CBanner>",
-            "  <CBanner.bottom>",
-            "    <Button wbp:name='button'/>",
-            "  </CBanner.bottom>",
-            "</CBanner>");
-    ControlInfo button = getObjectByName("button");
-    assertSame(button, banner.getControl("bottom"));
-  }
+	/**
+	 * Test for {@link CBannerInfo#getControl(String)}.
+	 */
+	public void test_children() throws Exception {
+		CBannerInfo banner =
+				parse(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<CBanner>",
+						"  <CBanner.bottom>",
+						"    <Button wbp:name='button'/>",
+						"  </CBanner.bottom>",
+						"</CBanner>");
+		ControlInfo button = getObjectByName("button");
+		assertSame(button, banner.getControl("bottom"));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Each {@link ControlInfo} text is decorated with its position method.
-   */
-  public void test_presentation_decorateText() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<CBanner>",
-        "  <CBanner.bottom>",
-        "    <Button wbp:name='button'/>",
-        "  </CBanner.bottom>",
-        "</CBanner>");
-    ControlInfo button = getObjectByName("button");
-    assertEquals("bottom - Button", ObjectsLabelProvider.INSTANCE.getText(button));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Each {@link ControlInfo} text is decorated with its position method.
+	 */
+	public void test_presentation_decorateText() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<CBanner>",
+				"  <CBanner.bottom>",
+				"    <Button wbp:name='button'/>",
+				"  </CBanner.bottom>",
+				"</CBanner>");
+		ControlInfo button = getObjectByName("button");
+		assertEquals("bottom - Button", ObjectsLabelProvider.INSTANCE.getText(button));
+	}
 
-  /**
-   * Even when no "real" {@link ControlInfo} children, tree still has {@link AbstractPositionInfo}
-   * placeholders.
-   */
-  public void test_getChildrenTree_placeholders() throws Exception {
-    CBannerInfo banner = parse("<CBanner/>");
-    // no "real" Control's, but in "tree" we have position placeholder children
-    List<ObjectInfo> children = banner.getPresentation().getChildrenTree();
-    assertThat(children).hasSize(3);
-    assertThat(GenericsUtils.select(children, AbstractPositionInfo.class)).hasSize(3);
-    assertEquals("left", ObjectsLabelProvider.INSTANCE.getText(children.get(0)));
-    assertEquals("right", ObjectsLabelProvider.INSTANCE.getText(children.get(1)));
-    assertEquals("bottom", ObjectsLabelProvider.INSTANCE.getText(children.get(2)));
-  }
+	/**
+	 * Even when no "real" {@link ControlInfo} children, tree still has {@link AbstractPositionInfo}
+	 * placeholders.
+	 */
+	public void test_getChildrenTree_placeholders() throws Exception {
+		CBannerInfo banner = parse("<CBanner/>");
+		// no "real" Control's, but in "tree" we have position placeholder children
+		List<ObjectInfo> children = banner.getPresentation().getChildrenTree();
+		assertThat(children).hasSize(3);
+		assertThat(GenericsUtils.select(children, AbstractPositionInfo.class)).hasSize(3);
+		assertEquals("left", ObjectsLabelProvider.INSTANCE.getText(children.get(0)));
+		assertEquals("right", ObjectsLabelProvider.INSTANCE.getText(children.get(1)));
+		assertEquals("bottom", ObjectsLabelProvider.INSTANCE.getText(children.get(2)));
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/CTabFolderGefTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/CTabFolderGefTest.java
index d056de5b7..28a671f74 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/CTabFolderGefTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/CTabFolderGefTest.java
@@ -22,39 +22,39 @@
  * @author scheglov_ke
  */
 public class CTabFolderGefTest extends XwtGefTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * We should be able to select {@link CTabItem} using double click.
-   */
-  public void test_canvas_selectItem() throws Exception {
-    CTabFolderInfo folder =
-        openEditor(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<CTabFolder>",
-            "  <CTabItem wbp:name='item_1'/>",
-            "  <CTabItem wbp:name='item_2'/>",
-            "</CTabFolder>");
-    refresh();
-    CTabItemInfo item_1 = getObjectByName("item_1");
-    CTabItemInfo item_2 = getObjectByName("item_2");
-    // initially "item_1" is selected
-    assertSame(item_1, folder.getSelectedItem());
-    // double click "item_2"
-    canvas.doubleClick(item_2);
-    assertSame(item_2, folder.getSelectedItem());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * We should be able to select {@link CTabItem} using double click.
+	 */
+	public void test_canvas_selectItem() throws Exception {
+		CTabFolderInfo folder =
+				openEditor(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<CTabFolder>",
+						"  <CTabItem wbp:name='item_1'/>",
+						"  <CTabItem wbp:name='item_2'/>",
+						"</CTabFolder>");
+		refresh();
+		CTabItemInfo item_1 = getObjectByName("item_1");
+		CTabItemInfo item_2 = getObjectByName("item_2");
+		// initially "item_1" is selected
+		assertSame(item_1, folder.getSelectedItem());
+		// double click "item_2"
+		canvas.doubleClick(item_2);
+		assertSame(item_2, folder.getSelectedItem());
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/CTabFolderTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/CTabFolderTest.java
index 4f1a7b622..4e7183db3 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/CTabFolderTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/CTabFolderTest.java
@@ -34,385 +34,385 @@
  * @author scheglov_ke
  */
 public class CTabFolderTest extends XwtModelTest {
-  private static final Rectangle BOUNDS_EMPTY_ITEM = new Rectangle(0, 0, 8, 19);
-  private static final Rectangle BOUNDS_BUTTON = new Rectangle(2, 22, 446, 276);
+	private static final Rectangle BOUNDS_EMPTY_ITEM = new Rectangle(0, 0, 8, 19);
+	private static final Rectangle BOUNDS_BUTTON = new Rectangle(2, 22, 446, 276);
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parse
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_parse_noItem() throws Exception {
-    CTabFolderInfo folder = parse("<CTabFolder/>");
-    refresh();
-    assertThat(folder.getItems()).isEmpty();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parse
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_parse_noItem() throws Exception {
+		CTabFolderInfo folder = parse("<CTabFolder/>");
+		refresh();
+		assertThat(folder.getItems()).isEmpty();
+	}
 
-  public void test_parse_withItem_noControl() throws Exception {
-    CTabFolderInfo folder =
-        parse(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<CTabFolder>",
-            "  <CTabItem wbp:name='item'/>",
-            "</CTabFolder>");
-    refresh();
-    CTabItemInfo item = getObjectByName("item");
-    // hierarchy
-    assertThat(folder.getItems()).containsExactly(item);
-    assertSame(null, item.getControl());
-    // presentation
-    {
-      IObjectPresentation presentation = folder.getPresentation();
-      assertThat(presentation.getChildrenTree()).containsExactly(item);
-      assertThat(presentation.getChildrenGraphical()).containsExactly(item);
-    }
-  }
+	public void test_parse_withItem_noControl() throws Exception {
+		CTabFolderInfo folder =
+				parse(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<CTabFolder>",
+						"  <CTabItem wbp:name='item'/>",
+						"</CTabFolder>");
+		refresh();
+		CTabItemInfo item = getObjectByName("item");
+		// hierarchy
+		assertThat(folder.getItems()).containsExactly(item);
+		assertSame(null, item.getControl());
+		// presentation
+		{
+			IObjectPresentation presentation = folder.getPresentation();
+			assertThat(presentation.getChildrenTree()).containsExactly(item);
+			assertThat(presentation.getChildrenGraphical()).containsExactly(item);
+		}
+	}
 
-  public void test_parse_withItem_withControl() throws Exception {
-    CTabFolderInfo folder =
-        parse(
-            "<CTabFolder>",
-            "  <CTabItem wbp:name='item'>",
-            "    <CTabItem.control>",
-            "      <Button wbp:name='button'/>",
-            "    </CTabItem.control>",
-            "  </CTabItem>",
-            "</CTabFolder>");
-    refresh();
-    CTabItemInfo item = getObjectByName("item");
-    ControlInfo button = getObjectByName("button");
-    // hierarchy
-    assertThat(folder.getItems()).containsExactly(item);
-    assertSame(button, item.getControl());
-    // presentation "folder"
-    {
-      IObjectPresentation presentation = folder.getPresentation();
-      assertThat(presentation.getChildrenTree()).containsExactly(item);
-      assertThat(presentation.getChildrenGraphical()).containsExactly(item, button);
-    }
-    // presentation "item"
-    {
-      IObjectPresentation presentation = item.getPresentation();
-      assertThat(presentation.getChildrenTree()).containsExactly(button);
-      assertThat(presentation.getChildrenGraphical()).isEmpty();
-    }
-    // bounds
-    {
-      Rectangle bounds = item.getBounds();
-      assertEquals(BOUNDS_EMPTY_ITEM, bounds);
-    }
-    {
-      Rectangle bounds = button.getBounds();
-      assertEquals(BOUNDS_BUTTON, bounds);
-    }
-  }
+	public void test_parse_withItem_withControl() throws Exception {
+		CTabFolderInfo folder =
+				parse(
+						"<CTabFolder>",
+						"  <CTabItem wbp:name='item'>",
+						"    <CTabItem.control>",
+						"      <Button wbp:name='button'/>",
+						"    </CTabItem.control>",
+						"  </CTabItem>",
+						"</CTabFolder>");
+		refresh();
+		CTabItemInfo item = getObjectByName("item");
+		ControlInfo button = getObjectByName("button");
+		// hierarchy
+		assertThat(folder.getItems()).containsExactly(item);
+		assertSame(button, item.getControl());
+		// presentation "folder"
+		{
+			IObjectPresentation presentation = folder.getPresentation();
+			assertThat(presentation.getChildrenTree()).containsExactly(item);
+			assertThat(presentation.getChildrenGraphical()).containsExactly(item, button);
+		}
+		// presentation "item"
+		{
+			IObjectPresentation presentation = item.getPresentation();
+			assertThat(presentation.getChildrenTree()).containsExactly(button);
+			assertThat(presentation.getChildrenGraphical()).isEmpty();
+		}
+		// bounds
+		{
+			Rectangle bounds = item.getBounds();
+			assertEquals(BOUNDS_EMPTY_ITEM, bounds);
+		}
+		{
+			Rectangle bounds = button.getBounds();
+			assertEquals(BOUNDS_BUTTON, bounds);
+		}
+	}
 
-  public void test_parse_withItems_withControls() throws Exception {
-    CTabFolderInfo folder =
-        parse(
-            "<CTabFolder>",
-            "  <CTabItem wbp:name='item_1'>",
-            "    <CTabItem.control>",
-            "      <Button wbp:name='button_1'/>",
-            "    </CTabItem.control>",
-            "  </CTabItem>",
-            "  <CTabItem wbp:name='item_2'>",
-            "    <CTabItem.control>",
-            "      <Button wbp:name='button_2'/>",
-            "    </CTabItem.control>",
-            "  </CTabItem>",
-            "</CTabFolder>");
-    refresh();
-    CTabItemInfo item_1 = getObjectByName("item_1");
-    CTabItemInfo item_2 = getObjectByName("item_2");
-    ControlInfo button_1 = getObjectByName("button_1");
-    ControlInfo button_2 = getObjectByName("button_2");
-    // hierarchy
-    assertThat(folder.getItems()).containsExactly(item_1, item_2);
-    assertSame(button_1, item_1.getControl());
-    assertSame(button_2, item_2.getControl());
-    // presentation
-    {
-      IObjectPresentation presentation = folder.getPresentation();
-      {
-        List<ObjectInfo> children = presentation.getChildrenTree();
-        assertThat(children).containsExactly(item_1, item_2);
-      }
-      {
-        List<ObjectInfo> children = presentation.getChildrenGraphical();
-        assertThat(children).containsExactly(item_1, item_2, button_1);
-      }
-    }
-    // bounds
-    {
-      Rectangle bounds = item_1.getBounds();
-      assertEquals(BOUNDS_EMPTY_ITEM, bounds);
-    }
-    {
-      Rectangle bounds = button_1.getBounds();
-      assertEquals(BOUNDS_BUTTON, bounds);
-    }
-  }
+	public void test_parse_withItems_withControls() throws Exception {
+		CTabFolderInfo folder =
+				parse(
+						"<CTabFolder>",
+						"  <CTabItem wbp:name='item_1'>",
+						"    <CTabItem.control>",
+						"      <Button wbp:name='button_1'/>",
+						"    </CTabItem.control>",
+						"  </CTabItem>",
+						"  <CTabItem wbp:name='item_2'>",
+						"    <CTabItem.control>",
+						"      <Button wbp:name='button_2'/>",
+						"    </CTabItem.control>",
+						"  </CTabItem>",
+						"</CTabFolder>");
+		refresh();
+		CTabItemInfo item_1 = getObjectByName("item_1");
+		CTabItemInfo item_2 = getObjectByName("item_2");
+		ControlInfo button_1 = getObjectByName("button_1");
+		ControlInfo button_2 = getObjectByName("button_2");
+		// hierarchy
+		assertThat(folder.getItems()).containsExactly(item_1, item_2);
+		assertSame(button_1, item_1.getControl());
+		assertSame(button_2, item_2.getControl());
+		// presentation
+		{
+			IObjectPresentation presentation = folder.getPresentation();
+			{
+				List<ObjectInfo> children = presentation.getChildrenTree();
+				assertThat(children).containsExactly(item_1, item_2);
+			}
+			{
+				List<ObjectInfo> children = presentation.getChildrenGraphical();
+				assertThat(children).containsExactly(item_1, item_2, button_1);
+			}
+		}
+		// bounds
+		{
+			Rectangle bounds = item_1.getBounds();
+			assertEquals(BOUNDS_EMPTY_ITEM, bounds);
+		}
+		{
+			Rectangle bounds = button_1.getBounds();
+			assertEquals(BOUNDS_BUTTON, bounds);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link CTabItemInfo#doSelect()}.
-   */
-  public void test_doSelect() throws Exception {
-    CTabFolderInfo folder =
-        parse(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<CTabFolder>",
-            "  <CTabItem wbp:name='item_1'/>",
-            "  <CTabItem wbp:name='item_2'/>",
-            "</CTabFolder>");
-    refresh();
-    CTabItemInfo item_1 = getObjectByName("item_1");
-    CTabItemInfo item_2 = getObjectByName("item_2");
-    // initially "item_1" selected
-    assertSame(item_1, folder.getSelectedItem());
-    // select "item_2"
-    item_2.doSelect();
-    assertSame(item_2, folder.getSelectedItem());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link CTabItemInfo#doSelect()}.
+	 */
+	public void test_doSelect() throws Exception {
+		CTabFolderInfo folder =
+				parse(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<CTabFolder>",
+						"  <CTabItem wbp:name='item_1'/>",
+						"  <CTabItem wbp:name='item_2'/>",
+						"</CTabFolder>");
+		refresh();
+		CTabItemInfo item_1 = getObjectByName("item_1");
+		CTabItemInfo item_2 = getObjectByName("item_2");
+		// initially "item_1" selected
+		assertSame(item_1, folder.getSelectedItem());
+		// select "item_2"
+		item_2.doSelect();
+		assertSame(item_2, folder.getSelectedItem());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands for items
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_item_CREATE() throws Exception {
-    CTabFolderInfo folder =
-        parse(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<CTabFolder/>");
-    refresh();
-    //
-    CTabItemInfo newItem = createObject("org.eclipse.swt.custom.CTabItem");
-    FlowContainer flowContainer = new FlowContainerFactory(folder, true).get().get(0);
-    flowContainer.command_CREATE(newItem, null);
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<CTabFolder>",
-        "  <CTabItem text='New Item'/>",
-        "</CTabFolder>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands for items
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_item_CREATE() throws Exception {
+		CTabFolderInfo folder =
+				parse(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<CTabFolder/>");
+		refresh();
+		//
+		CTabItemInfo newItem = createObject("org.eclipse.swt.custom.CTabItem");
+		FlowContainer flowContainer = new FlowContainerFactory(folder, true).get().get(0);
+		flowContainer.command_CREATE(newItem, null);
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<CTabFolder>",
+				"  <CTabItem text='New Item'/>",
+				"</CTabFolder>");
+	}
 
-  public void test_item_MOVE() throws Exception {
-    CTabFolderInfo folder =
-        parse(
-            "<CTabFolder>",
-            "  <CTabItem wbp:name='item_1'>",
-            "    <CTabItem.control>",
-            "      <Button wbp:name='button_1'/>",
-            "    </CTabItem.control>",
-            "  </CTabItem>",
-            "  <CTabItem wbp:name='item_2'>",
-            "    <CTabItem.control>",
-            "      <Button wbp:name='button_2'/>",
-            "    </CTabItem.control>",
-            "  </CTabItem>",
-            "</CTabFolder>");
-    refresh();
-    CTabItemInfo item_1 = getObjectByName("item_1");
-    CTabItemInfo item_2 = getObjectByName("item_2");
-    //
-    FlowContainer flowContainer = new FlowContainerFactory(folder, true).get().get(0);
-    flowContainer.command_MOVE(item_2, item_1);
-    assertXML(
-        "<CTabFolder>",
-        "  <CTabItem wbp:name='item_2'>",
-        "    <CTabItem.control>",
-        "      <Button wbp:name='button_2'/>",
-        "    </CTabItem.control>",
-        "  </CTabItem>",
-        "  <CTabItem wbp:name='item_1'>",
-        "    <CTabItem.control>",
-        "      <Button wbp:name='button_1'/>",
-        "    </CTabItem.control>",
-        "  </CTabItem>",
-        "</CTabFolder>");
-  }
+	public void test_item_MOVE() throws Exception {
+		CTabFolderInfo folder =
+				parse(
+						"<CTabFolder>",
+						"  <CTabItem wbp:name='item_1'>",
+						"    <CTabItem.control>",
+						"      <Button wbp:name='button_1'/>",
+						"    </CTabItem.control>",
+						"  </CTabItem>",
+						"  <CTabItem wbp:name='item_2'>",
+						"    <CTabItem.control>",
+						"      <Button wbp:name='button_2'/>",
+						"    </CTabItem.control>",
+						"  </CTabItem>",
+						"</CTabFolder>");
+		refresh();
+		CTabItemInfo item_1 = getObjectByName("item_1");
+		CTabItemInfo item_2 = getObjectByName("item_2");
+		//
+		FlowContainer flowContainer = new FlowContainerFactory(folder, true).get().get(0);
+		flowContainer.command_MOVE(item_2, item_1);
+		assertXML(
+				"<CTabFolder>",
+				"  <CTabItem wbp:name='item_2'>",
+				"    <CTabItem.control>",
+				"      <Button wbp:name='button_2'/>",
+				"    </CTabItem.control>",
+				"  </CTabItem>",
+				"  <CTabItem wbp:name='item_1'>",
+				"    <CTabItem.control>",
+				"      <Button wbp:name='button_1'/>",
+				"    </CTabItem.control>",
+				"  </CTabItem>",
+				"</CTabFolder>");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands for controls
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_control_CREATE_onItem() throws Exception {
-    CTabFolderInfo folder =
-        parse(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<CTabFolder>",
-            "  <CTabItem wbp:name='otherItem'/>",
-            "  <CTabItem wbp:name='item'/>",
-            "</CTabFolder>");
-    refresh();
-    CTabItemInfo item = getObjectByName("item");
-    // initially "otherItem" is selected
-    {
-      CTabItemInfo otherItem = getObjectByName("otherItem");
-      assertSame(otherItem, folder.getSelectedItem());
-    }
-    //
-    ControlInfo newButton = createButton();
-    SimpleContainer simpleContainer = new SimpleContainerFactory(item, true).get().get(0);
-    simpleContainer.command_CREATE(newButton);
-    assertSame(item, folder.getSelectedItem());
-    assertXML(
-        "<CTabFolder>",
-        "  <CTabItem wbp:name='otherItem'/>",
-        "  <CTabItem wbp:name='item'>",
-        "    <CTabItem.control>",
-        "      <Button/>",
-        "    </CTabItem.control>",
-        "  </CTabItem>",
-        "</CTabFolder>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands for controls
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_control_CREATE_onItem() throws Exception {
+		CTabFolderInfo folder =
+				parse(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<CTabFolder>",
+						"  <CTabItem wbp:name='otherItem'/>",
+						"  <CTabItem wbp:name='item'/>",
+						"</CTabFolder>");
+		refresh();
+		CTabItemInfo item = getObjectByName("item");
+		// initially "otherItem" is selected
+		{
+			CTabItemInfo otherItem = getObjectByName("otherItem");
+			assertSame(otherItem, folder.getSelectedItem());
+		}
+		//
+		ControlInfo newButton = createButton();
+		SimpleContainer simpleContainer = new SimpleContainerFactory(item, true).get().get(0);
+		simpleContainer.command_CREATE(newButton);
+		assertSame(item, folder.getSelectedItem());
+		assertXML(
+				"<CTabFolder>",
+				"  <CTabItem wbp:name='otherItem'/>",
+				"  <CTabItem wbp:name='item'>",
+				"    <CTabItem.control>",
+				"      <Button/>",
+				"    </CTabItem.control>",
+				"  </CTabItem>",
+				"</CTabFolder>");
+	}
 
-  public void test_control_ADD_onItem() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <CTabFolder>",
-        "    <CTabItem wbp:name='item'/>",
-        "  </CTabFolder>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    refresh();
-    CTabItemInfo item = getObjectByName("item");
-    XmlObjectInfo button = getObjectByName("button");
-    //
-    SimpleContainer simpleContainer = new SimpleContainerFactory(item, true).get().get(0);
-    simpleContainer.command_ADD(button);
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <CTabFolder>",
-        "    <CTabItem wbp:name='item'>",
-        "      <CTabItem.control>",
-        "        <Button wbp:name='button'/>",
-        "      </CTabItem.control>",
-        "    </CTabItem>",
-        "  </CTabFolder>",
-        "</Shell>");
-  }
+	public void test_control_ADD_onItem() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <CTabFolder>",
+				"    <CTabItem wbp:name='item'/>",
+				"  </CTabFolder>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		refresh();
+		CTabItemInfo item = getObjectByName("item");
+		XmlObjectInfo button = getObjectByName("button");
+		//
+		SimpleContainer simpleContainer = new SimpleContainerFactory(item, true).get().get(0);
+		simpleContainer.command_ADD(button);
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <CTabFolder>",
+				"    <CTabItem wbp:name='item'>",
+				"      <CTabItem.control>",
+				"        <Button wbp:name='button'/>",
+				"      </CTabItem.control>",
+				"    </CTabItem>",
+				"  </CTabFolder>",
+				"</Shell>");
+	}
 
-  public void test_control_CREATE_onFolder() throws Exception {
-    CTabFolderInfo folder =
-        parse(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<CTabFolder/>");
-    refresh();
-    //
-    ControlInfo newButton = createButtonWithText();
-    FlowContainer flowContainer = new FlowContainerFactory(folder, true).get().get(0);
-    flowContainer.command_CREATE(newButton, null);
-    assertXML(
-        "<CTabFolder>",
-        "  <CTabItem text='New Item'>",
-        "    <CTabItem.control>",
-        "      <Button text='New Button'/>",
-        "    </CTabItem.control>",
-        "  </CTabItem>",
-        "</CTabFolder>");
-  }
+	public void test_control_CREATE_onFolder() throws Exception {
+		CTabFolderInfo folder =
+				parse(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<CTabFolder/>");
+		refresh();
+		//
+		ControlInfo newButton = createButtonWithText();
+		FlowContainer flowContainer = new FlowContainerFactory(folder, true).get().get(0);
+		flowContainer.command_CREATE(newButton, null);
+		assertXML(
+				"<CTabFolder>",
+				"  <CTabItem text='New Item'>",
+				"    <CTabItem.control>",
+				"      <Button text='New Button'/>",
+				"    </CTabItem.control>",
+				"  </CTabItem>",
+				"</CTabFolder>");
+	}
 
-  public void test_control_ADD_onFolder() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <CTabFolder wbp:name='folder'/>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    refresh();
-    CTabFolderInfo folder = getObjectByName("folder");
-    XmlObjectInfo button = getObjectByName("button");
-    //
-    FlowContainer flowContainer = new FlowContainerFactory(folder, true).get().get(0);
-    flowContainer.command_MOVE(button, null);
-    assertXML(
-        "<Shell>",
-        "  <CTabFolder wbp:name='folder'>",
-        "    <CTabItem text='New Item'>",
-        "      <CTabItem.control>",
-        "        <Button wbp:name='button'/>",
-        "      </CTabItem.control>",
-        "    </CTabItem>",
-        "  </CTabFolder>",
-        "</Shell>");
-  }
+	public void test_control_ADD_onFolder() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <CTabFolder wbp:name='folder'/>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		refresh();
+		CTabFolderInfo folder = getObjectByName("folder");
+		XmlObjectInfo button = getObjectByName("button");
+		//
+		FlowContainer flowContainer = new FlowContainerFactory(folder, true).get().get(0);
+		flowContainer.command_MOVE(button, null);
+		assertXML(
+				"<Shell>",
+				"  <CTabFolder wbp:name='folder'>",
+				"    <CTabItem text='New Item'>",
+				"      <CTabItem.control>",
+				"        <Button wbp:name='button'/>",
+				"      </CTabItem.control>",
+				"    </CTabItem>",
+				"  </CTabFolder>",
+				"</Shell>");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Manage selected
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_manageSelected() throws Exception {
-    CTabFolderInfo panel =
-        parse(
-            "<CTabFolder>",
-            "  <CTabItem wbp:name='item_1'>",
-            "    <CTabItem.control>",
-            "      <Button wbp:name='button_1'/>",
-            "    </CTabItem.control>",
-            "  </CTabItem>",
-            "  <CTabItem wbp:name='item_2'>",
-            "    <CTabItem.control>",
-            "      <Button wbp:name='button_2'/>",
-            "    </CTabItem.control>",
-            "  </CTabItem>",
-            "</CTabFolder>");
-    refresh();
-    CTabItemInfo item_1 = getObjectByName("item_1");
-    CTabItemInfo item_2 = getObjectByName("item_2");
-    ControlInfo button_1 = getObjectByName("button_1");
-    // initially "item_1" is selected
-    assertSelectedItem(panel, item_1);
-    // notify about "item_2"
-    {
-      boolean shouldRefresh = notifySelecting(item_2);
-      assertTrue(shouldRefresh);
-      panel.refresh();
-      // now "item_2" is selected
-      assertSelectedItem(panel, item_2);
-    }
-    // notify about "button_1"
-    {
-      boolean shouldRefresh = notifySelecting(button_1);
-      assertTrue(shouldRefresh);
-      panel.refresh();
-      // now "item_1" is selected
-      assertSelectedItem(panel, item_1);
-    }
-    // second notification about "item_1" does not cause refresh()
-    {
-      boolean shouldRefresh = notifySelecting(item_1);
-      assertFalse(shouldRefresh);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Manage selected
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_manageSelected() throws Exception {
+		CTabFolderInfo panel =
+				parse(
+						"<CTabFolder>",
+						"  <CTabItem wbp:name='item_1'>",
+						"    <CTabItem.control>",
+						"      <Button wbp:name='button_1'/>",
+						"    </CTabItem.control>",
+						"  </CTabItem>",
+						"  <CTabItem wbp:name='item_2'>",
+						"    <CTabItem.control>",
+						"      <Button wbp:name='button_2'/>",
+						"    </CTabItem.control>",
+						"  </CTabItem>",
+						"</CTabFolder>");
+		refresh();
+		CTabItemInfo item_1 = getObjectByName("item_1");
+		CTabItemInfo item_2 = getObjectByName("item_2");
+		ControlInfo button_1 = getObjectByName("button_1");
+		// initially "item_1" is selected
+		assertSelectedItem(panel, item_1);
+		// notify about "item_2"
+		{
+			boolean shouldRefresh = notifySelecting(item_2);
+			assertTrue(shouldRefresh);
+			panel.refresh();
+			// now "item_2" is selected
+			assertSelectedItem(panel, item_2);
+		}
+		// notify about "button_1"
+		{
+			boolean shouldRefresh = notifySelecting(button_1);
+			assertTrue(shouldRefresh);
+			panel.refresh();
+			// now "item_1" is selected
+			assertSelectedItem(panel, item_1);
+		}
+		// second notification about "item_1" does not cause refresh()
+		{
+			boolean shouldRefresh = notifySelecting(item_1);
+			assertFalse(shouldRefresh);
+		}
+	}
 
-  private static void assertSelectedItem(CTabFolderInfo folder, CTabItemInfo expected)
-      throws Exception {
-    assertSame(expected, folder.getSelectedItem());
-  }
+	private static void assertSelectedItem(CTabFolderInfo folder, CTabItemInfo expected)
+			throws Exception {
+		assertSame(expected, folder.getSelectedItem());
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/CompositeGefTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/CompositeGefTest.java
index 2659f41a0..a851f8cb8 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/CompositeGefTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/CompositeGefTest.java
@@ -19,57 +19,57 @@
  * @author scheglov_ke
  */
 public class CompositeGefTest extends XwtGefTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Drop Layout
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_canvas_dropFillLayout() throws Exception {
-    CompositeInfo shell =
-        openEditor(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<Shell/>");
-    loadCreationTool("org.eclipse.swt.layout.FillLayout");
-    //
-    canvas.moveTo(shell, 100, 100);
-    canvas.assertFeedbacks(canvas.getTargetPredicate(shell));
-    canvas.click();
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "</Shell>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Drop Layout
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_canvas_dropFillLayout() throws Exception {
+		CompositeInfo shell =
+				openEditor(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<Shell/>");
+		loadCreationTool("org.eclipse.swt.layout.FillLayout");
+		//
+		canvas.moveTo(shell, 100, 100);
+		canvas.assertFeedbacks(canvas.getTargetPredicate(shell));
+		canvas.click();
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"</Shell>");
+	}
 
-  public void test_tree_dropFillLayout() throws Exception {
-    CompositeInfo shell =
-        openEditor(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<Shell/>");
-    loadCreationTool("org.eclipse.swt.layout.FillLayout");
-    //
-    tree.moveOn(shell);
-    tree.assertFeedback_on(shell);
-    tree.click();
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "</Shell>");
-  }
+	public void test_tree_dropFillLayout() throws Exception {
+		CompositeInfo shell =
+				openEditor(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<Shell/>");
+		loadCreationTool("org.eclipse.swt.layout.FillLayout");
+		//
+		tree.moveOn(shell);
+		tree.assertFeedback_on(shell);
+		tree.click();
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"</Shell>");
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/CompositeTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/CompositeTest.java
index 14d601b67..c189adbbc 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/CompositeTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/CompositeTest.java
@@ -28,384 +28,384 @@
  * @author scheglov_ke
  */
 public class CompositeTest extends XwtModelTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_parse_empty() throws Exception {
-    CompositeInfo composite = parse("<Composite/>");
-    composite.refresh();
-    // has object
-    {
-      assertNotNull(composite.getObject());
-      assertSame(composite.getComposite(), composite.getObject());
-    }
-    // has Image
-    {
-      Image image = composite.getImage();
-      assertNotNull(image);
-      assertEquals(450, image.getBounds().width);
-      assertEquals(300, image.getBounds().height);
-    }
-    // has "model" bounds
-    {
-      Rectangle bounds = composite.getModelBounds();
-      assertEquals(450, bounds.width);
-      assertEquals(300, bounds.height);
-    }
-    // has "parent" bounds
-    {
-      Rectangle bounds = composite.getBounds();
-      assertEquals(450, bounds.width);
-      assertEquals(300, bounds.height);
-    }
-    // client area insets
-    {
-      Insets expected = new Insets(0, 0, 0, 0);
-      assertEquals(expected, composite.getClientAreaInsets());
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_parse_empty() throws Exception {
+		CompositeInfo composite = parse("<Composite/>");
+		composite.refresh();
+		// has object
+		{
+			assertNotNull(composite.getObject());
+			assertSame(composite.getComposite(), composite.getObject());
+		}
+		// has Image
+		{
+			Image image = composite.getImage();
+			assertNotNull(image);
+			assertEquals(450, image.getBounds().width);
+			assertEquals(300, image.getBounds().height);
+		}
+		// has "model" bounds
+		{
+			Rectangle bounds = composite.getModelBounds();
+			assertEquals(450, bounds.width);
+			assertEquals(300, bounds.height);
+		}
+		// has "parent" bounds
+		{
+			Rectangle bounds = composite.getBounds();
+			assertEquals(450, bounds.width);
+			assertEquals(300, bounds.height);
+		}
+		// client area insets
+		{
+			Insets expected = new Insets(0, 0, 0, 0);
+			assertEquals(expected, composite.getClientAreaInsets());
+		}
+	}
 
-  /**
-   * Test for {@link CompositeInfo#getClientAreaInsets2()}.
-   */
-  public void test_getClientAreaInsets2_forComposite() throws Exception {
-    CompositeInfo composite = parse("<Composite/>");
-    composite.refresh();
-    //
-    {
-      Insets expected = new Insets(0, 0, 0, 0);
-      assertEquals(expected, composite.getClientAreaInsets2());
-    }
-  }
+	/**
+	 * Test for {@link CompositeInfo#getClientAreaInsets2()}.
+	 */
+	public void test_getClientAreaInsets2_forComposite() throws Exception {
+		CompositeInfo composite = parse("<Composite/>");
+		composite.refresh();
+		//
+		{
+			Insets expected = new Insets(0, 0, 0, 0);
+			assertEquals(expected, composite.getClientAreaInsets2());
+		}
+	}
 
-  /**
-   * Test for {@link CompositeInfo#getClientAreaInsets2()}.
-   */
-  public void test_getClientAreaInsets2_forGroup() throws Exception {
-    CompositeInfo composite = parse("<Group/>");
-    composite.refresh();
-    //
-    {
-      Insets expected = new Insets(15, 3, 3, 3);
-      assertEquals(expected, composite.getClientAreaInsets2());
-    }
-  }
+	/**
+	 * Test for {@link CompositeInfo#getClientAreaInsets2()}.
+	 */
+	public void test_getClientAreaInsets2_forGroup() throws Exception {
+		CompositeInfo composite = parse("<Group/>");
+		composite.refresh();
+		//
+		{
+			Insets expected = new Insets(15, 3, 3, 3);
+			assertEquals(expected, composite.getClientAreaInsets2());
+		}
+	}
 
-  public void test_parse_withButton() throws Exception {
-    CompositeInfo composite =
-        parse(
-            "<Composite>",
-            "  <Composite.layout>",
-            "    <RowLayout/>",
-            "  </Composite.layout>",
-            "  <Button wbp:name='button' text='My button'/>",
-            "</Composite>");
-    assertHierarchy(
-        "// filler filler filler",
-        "<Composite>",
-        "  <RowLayout>",
-        "  <Button wbp:name='button' text='My button'>",
-        "    virtual-LayoutData: org.eclipse.swt.layout.RowData");
-    composite.refresh();
-    // button
-    {
-      ControlInfo button = getObjectByName("button");
-      int expectedWidth = ControlTest.BUTTON_ON_ROW_WIDTH;
-      int expectedHeight = ControlTest.BUTTON_ON_ROW_HEIGHT;
-      // has Image
-      {
-        Image image = button.getImage();
-        assertNotNull(image);
-        assertEquals(expectedWidth, image.getBounds().width);
-        assertEquals(expectedHeight, image.getBounds().height);
-      }
-      // has "model" bounds
-      {
-        Rectangle bounds = button.getModelBounds();
-        assertEquals(new Rectangle(3, 3, expectedWidth, expectedHeight), bounds);
-      }
-      // has "parent" bounds
-      {
-        Rectangle bounds = button.getBounds();
-        assertEquals(new Rectangle(3, 3, expectedWidth, expectedHeight), bounds);
-      }
-    }
-  }
+	public void test_parse_withButton() throws Exception {
+		CompositeInfo composite =
+				parse(
+						"<Composite>",
+						"  <Composite.layout>",
+						"    <RowLayout/>",
+						"  </Composite.layout>",
+						"  <Button wbp:name='button' text='My button'/>",
+						"</Composite>");
+		assertHierarchy(
+				"// filler filler filler",
+				"<Composite>",
+				"  <RowLayout>",
+				"  <Button wbp:name='button' text='My button'>",
+				"    virtual-LayoutData: org.eclipse.swt.layout.RowData");
+		composite.refresh();
+		// button
+		{
+			ControlInfo button = getObjectByName("button");
+			int expectedWidth = ControlTest.BUTTON_ON_ROW_WIDTH;
+			int expectedHeight = ControlTest.BUTTON_ON_ROW_HEIGHT;
+			// has Image
+			{
+				Image image = button.getImage();
+				assertNotNull(image);
+				assertEquals(expectedWidth, image.getBounds().width);
+				assertEquals(expectedHeight, image.getBounds().height);
+			}
+			// has "model" bounds
+			{
+				Rectangle bounds = button.getModelBounds();
+				assertEquals(new Rectangle(3, 3, expectedWidth, expectedHeight), bounds);
+			}
+			// has "parent" bounds
+			{
+				Rectangle bounds = button.getBounds();
+				assertEquals(new Rectangle(3, 3, expectedWidth, expectedHeight), bounds);
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // "Set Layout" action in context menu
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test that {@link CompositeInfo} contributes "Set layout" sub-menu in context menu.
-   */
-  public void test_setLayoutMenu_absolute() throws Exception {
-    CompositeInfo container =
-        parse(
-            "// filler filler filler filler filler",
-            "<Composite>",
-            "  <Composite.layout>",
-            "    <RowLayout/>",
-            "  </Composite.layout>",
-            "</Composite>");
-    container.refresh();
-    assertTrue(container.hasLayout());
-    // prepare "Set Layout"
-    IMenuManager layoutManager = getSetLayoutMenu(container);
-    // set "absolute"
-    {
-      IAction action = findChildAction(layoutManager, "Absolute layout");
-      assertNotNull(action);
-      assertNotNull(action.getImageDescriptor());
-      action.run();
-      assertXML(
-          "// filler filler filler filler filler",
-          "// filler filler filler filler filler",
-          "<Composite layout='{x:Null}'/>");
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// "Set Layout" action in context menu
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test that {@link CompositeInfo} contributes "Set layout" sub-menu in context menu.
+	 */
+	public void test_setLayoutMenu_absolute() throws Exception {
+		CompositeInfo container =
+				parse(
+						"// filler filler filler filler filler",
+						"<Composite>",
+						"  <Composite.layout>",
+						"    <RowLayout/>",
+						"  </Composite.layout>",
+						"</Composite>");
+		container.refresh();
+		assertTrue(container.hasLayout());
+		// prepare "Set Layout"
+		IMenuManager layoutManager = getSetLayoutMenu(container);
+		// set "absolute"
+		{
+			IAction action = findChildAction(layoutManager, "Absolute layout");
+			assertNotNull(action);
+			assertNotNull(action.getImageDescriptor());
+			action.run();
+			assertXML(
+					"// filler filler filler filler filler",
+					"// filler filler filler filler filler",
+					"<Composite layout='{x:Null}'/>");
+		}
+	}
 
-  /**
-   * Test that {@link CompositeInfo} contributes "Set layout" sub-menu in context menu.
-   */
-  public void test_setLayoutMenu_normal() throws Exception {
-    CompositeInfo container = parse("<Composite/>");
-    container.refresh();
-    assertTrue(container.hasLayout());
-    // prepare "Set Layout"
-    IMenuManager layoutManager = getSetLayoutMenu(container);
-    // check for existing actions
-    assertHasChildAction(layoutManager, "GridLayout");
-    assertHasChildAction(layoutManager, "FillLayout");
-    assertHasChildAction(layoutManager, "RowLayout");
-    assertHasChildAction(layoutManager, "FormLayout");
-    assertHasChildAction(layoutManager, "StackLayout");
-    // use one of the actions to set new layout
-    {
-      IAction action = findChildAction(layoutManager, "RowLayout");
-      assertNotNull(action.getImageDescriptor());
-      action.run();
-      assertXML(
-          "// filler filler filler filler filler",
-          "<Composite>",
-          "  <Composite.layout>",
-          "    <RowLayout/>",
-          "  </Composite.layout>",
-          "</Composite>");
-    }
-  }
+	/**
+	 * Test that {@link CompositeInfo} contributes "Set layout" sub-menu in context menu.
+	 */
+	public void test_setLayoutMenu_normal() throws Exception {
+		CompositeInfo container = parse("<Composite/>");
+		container.refresh();
+		assertTrue(container.hasLayout());
+		// prepare "Set Layout"
+		IMenuManager layoutManager = getSetLayoutMenu(container);
+		// check for existing actions
+		assertHasChildAction(layoutManager, "GridLayout");
+		assertHasChildAction(layoutManager, "FillLayout");
+		assertHasChildAction(layoutManager, "RowLayout");
+		assertHasChildAction(layoutManager, "FormLayout");
+		assertHasChildAction(layoutManager, "StackLayout");
+		// use one of the actions to set new layout
+		{
+			IAction action = findChildAction(layoutManager, "RowLayout");
+			assertNotNull(action.getImageDescriptor());
+			action.run();
+			assertXML(
+					"// filler filler filler filler filler",
+					"<Composite>",
+					"  <Composite.layout>",
+					"    <RowLayout/>",
+					"  </Composite.layout>",
+					"</Composite>");
+		}
+	}
 
-  /**
-   * We don't support "GroupLayout" in XWT, so "Set layout" sub-menu context menu should not have
-   * it.
-   */
-  public void test_setLayoutMenu_noGroupLayout() throws Exception {
-    CompositeInfo container = parse("<Composite/>");
-    // prepare "Set Layout" menu manager
-    IMenuManager layoutManager = getSetLayoutMenu(container);
-    // no GroupLayout
-    IAction action = findChildAction(layoutManager, "GroupLayout");
-    assertNull(action);
-  }
+	/**
+	 * We don't support "GroupLayout" in XWT, so "Set layout" sub-menu context menu should not have
+	 * it.
+	 */
+	public void test_setLayoutMenu_noGroupLayout() throws Exception {
+		CompositeInfo container = parse("<Composite/>");
+		// prepare "Set Layout" menu manager
+		IMenuManager layoutManager = getSetLayoutMenu(container);
+		// no GroupLayout
+		IAction action = findChildAction(layoutManager, "GroupLayout");
+		assertNull(action);
+	}
 
-  private static IMenuManager getSetLayoutMenu(CompositeInfo container) throws Exception {
-    IMenuManager menuManager = getContextMenu(container);
-    IMenuManager layoutManager = findChildMenuManager(menuManager, "Set layout");
-    assertNotNull(layoutManager);
-    return layoutManager;
-  }
+	private static IMenuManager getSetLayoutMenu(CompositeInfo container) throws Exception {
+		IMenuManager menuManager = getContextMenu(container);
+		IMenuManager layoutManager = findChildMenuManager(menuManager, "Set layout");
+		assertNotNull(layoutManager);
+		return layoutManager;
+	}
 
-  private static void assertHasChildAction(IMenuManager layoutManager, String text) {
-    assertNotNull(findChildAction(layoutManager, text));
-  }
+	private static void assertHasChildAction(IMenuManager layoutManager, String text) {
+		assertNotNull(findChildAction(layoutManager, text));
+	}
 
-  /**
-   * No "Set Layout" sub-menu if {@link Composite} has no layout.
-   */
-  public void test_setLayoutMenu_2() throws Exception {
-    parse(
-        "<Composite>",
-        "  <Composite.layout>",
-        "    <FillLayout/>",
-        "  </Composite.layout>",
-        "  <Table wbp:name='table'/>",
-        "</Composite>");
-    refresh();
-    CompositeInfo table = getObjectByName("table");
-    // no layout
-    assertFalse(table.hasLayout());
-    // ...so, no "Set layout" menu
-    {
-      IMenuManager menuManager = getContextMenu(table);
-      IMenuManager layoutManager = findChildMenuManager(menuManager, "Set layout");
-      assertNull(layoutManager);
-    }
-  }
+	/**
+	 * No "Set Layout" sub-menu if {@link Composite} has no layout.
+	 */
+	public void test_setLayoutMenu_2() throws Exception {
+		parse(
+				"<Composite>",
+				"  <Composite.layout>",
+				"    <FillLayout/>",
+				"  </Composite.layout>",
+				"  <Table wbp:name='table'/>",
+				"</Composite>");
+		refresh();
+		CompositeInfo table = getObjectByName("table");
+		// no layout
+		assertFalse(table.hasLayout());
+		// ...so, no "Set layout" menu
+		{
+			IMenuManager menuManager = getContextMenu(table);
+			IMenuManager layoutManager = findChildMenuManager(menuManager, "Set layout");
+			assertNull(layoutManager);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // shouldDrawDotsBorder()
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link CompositeInfo#shouldDrawDotsBorder()}.
-   */
-  public void test_shouldDrawDotsBorder() throws Exception {
-    CompositeInfo shell =
-        parse(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Table wbp:name='table'/>",
-            "  <Composite wbp:name='composite_1'/>",
-            "  <Composite wbp:name='composite_2' x:Style='BORDER'/>",
-            "</Shell>");
-    refresh();
-    CompositeInfo table = getObjectByName("table");
-    CompositeInfo composite_1 = getObjectByName("composite_1");
-    CompositeInfo composite_2 = getObjectByName("composite_2");
-    // not Composite itself
-    assertFalse(shell.shouldDrawDotsBorder());
-    assertFalse(table.shouldDrawDotsBorder());
-    // Composite without border
-    assertTrue(composite_1.shouldDrawDotsBorder());
-    // Composite with border
-    assertFalse(composite_2.shouldDrawDotsBorder());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// shouldDrawDotsBorder()
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link CompositeInfo#shouldDrawDotsBorder()}.
+	 */
+	public void test_shouldDrawDotsBorder() throws Exception {
+		CompositeInfo shell =
+				parse(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Table wbp:name='table'/>",
+						"  <Composite wbp:name='composite_1'/>",
+						"  <Composite wbp:name='composite_2' x:Style='BORDER'/>",
+						"</Shell>");
+		refresh();
+		CompositeInfo table = getObjectByName("table");
+		CompositeInfo composite_1 = getObjectByName("composite_1");
+		CompositeInfo composite_2 = getObjectByName("composite_2");
+		// not Composite itself
+		assertFalse(shell.shouldDrawDotsBorder());
+		assertFalse(table.shouldDrawDotsBorder());
+		// Composite without border
+		assertTrue(composite_1.shouldDrawDotsBorder());
+		// Composite with border
+		assertFalse(composite_2.shouldDrawDotsBorder());
+	}
 
-  /**
-   * Test for {@link CompositeInfo#shouldDrawDotsBorder()}.
-   */
-  public void test_shouldDrawDotsBorder_noScript() throws Exception {
-    prepareMyComponent(new String[]{}, new String[]{
-        "// filler filler filler filler filler",
-        "<parameters>",
-        "  <parameter name='shouldDrawBorder'></parameter>",
-        "</parameters>"});
-    parse(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <t:MyComponent wbp:name='myComponent'/>",
-        "</Shell>");
-    refresh();
-    //
-    CompositeInfo myComponent = getObjectByName("myComponent");
-    assertFalse(myComponent.shouldDrawDotsBorder());
-  }
+	/**
+	 * Test for {@link CompositeInfo#shouldDrawDotsBorder()}.
+	 */
+	public void test_shouldDrawDotsBorder_noScript() throws Exception {
+		prepareMyComponent(new String[]{}, new String[]{
+				"// filler filler filler filler filler",
+				"<parameters>",
+				"  <parameter name='shouldDrawBorder'></parameter>",
+		"</parameters>"});
+		parse(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <t:MyComponent wbp:name='myComponent'/>",
+				"</Shell>");
+		refresh();
+		//
+		CompositeInfo myComponent = getObjectByName("myComponent");
+		assertFalse(myComponent.shouldDrawDotsBorder());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Clipboard
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_clipboard_copyLayout() throws Exception {
-    CompositeInfo shell =
-        parse(
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <FillLayout/>",
-            "  </Shell.layout>",
-            "  <Composite wbp:name='composite'>",
-            "    <Composite.layout>",
-            "      <RowLayout fill='true'/>",
-            "    </Composite.layout>",
-            "  </Composite>",
-            "</Shell>");
-    refresh();
-    CompositeInfo composite = getObjectByName("composite");
-    //
-    {
-      XmlObjectMemento memento = XmlObjectMemento.createMemento(composite);
-      CompositeInfo newComposite = (CompositeInfo) memento.create(shell);
-      shell.getLayout().command_CREATE(newComposite, null);
-      memento.apply();
-    }
-    assertXML(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <Composite wbp:name='composite'>",
-        "    <Composite.layout>",
-        "      <RowLayout fill='true'/>",
-        "    </Composite.layout>",
-        "  </Composite>",
-        "  <Composite>",
-        "    <Composite.layout>",
-        "      <RowLayout fill='true'/>",
-        "    </Composite.layout>",
-        "  </Composite>",
-        "</Shell>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Clipboard
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_clipboard_copyLayout() throws Exception {
+		CompositeInfo shell =
+				parse(
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <FillLayout/>",
+						"  </Shell.layout>",
+						"  <Composite wbp:name='composite'>",
+						"    <Composite.layout>",
+						"      <RowLayout fill='true'/>",
+						"    </Composite.layout>",
+						"  </Composite>",
+						"</Shell>");
+		refresh();
+		CompositeInfo composite = getObjectByName("composite");
+		//
+		{
+			XmlObjectMemento memento = XmlObjectMemento.createMemento(composite);
+			CompositeInfo newComposite = (CompositeInfo) memento.create(shell);
+			shell.getLayout().command_CREATE(newComposite, null);
+			memento.apply();
+		}
+		assertXML(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <Composite wbp:name='composite'>",
+				"    <Composite.layout>",
+				"      <RowLayout fill='true'/>",
+				"    </Composite.layout>",
+				"  </Composite>",
+				"  <Composite>",
+				"    <Composite.layout>",
+				"      <RowLayout fill='true'/>",
+				"    </Composite.layout>",
+				"  </Composite>",
+				"</Shell>");
+	}
 
-  public void test_clipboard_implicitLayout() throws Exception {
-    setFileContentSrc(
-        "test/MyComposite.java",
-        getSource(
-            "package test;",
-            "import org.eclipse.swt.widgets.Composite;",
-            "import org.eclipse.swt.layout.RowLayout;",
-            "public class MyComposite extends Composite {",
-            "  public MyComposite(Composite parent, int style) {",
-            "    super(parent, style);",
-            "    setLayout(new RowLayout());",
-            "  }",
-            "}"));
-    waitForAutoBuild();
-    // parse
-    CompositeInfo shell =
-        parse(
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <FillLayout/>",
-            "  </Shell.layout>",
-            "  <t:MyComposite wbp:name='composite'/>",
-            "</Shell>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <FillLayout>",
-        "  <t:MyComposite wbp:name='composite'>",
-        "    implicit-layout: org.eclipse.swt.layout.RowLayout");
-    refresh();
-    CompositeInfo composite = getObjectByName("composite");
-    // paste
-    {
-      XmlObjectMemento memento = XmlObjectMemento.createMemento(composite);
-      CompositeInfo newComposite = (CompositeInfo) memento.create(shell);
-      shell.getLayout().command_CREATE(newComposite, null);
-      memento.apply();
-    }
-    assertXML(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <t:MyComposite wbp:name='composite'/>",
-        "  <t:MyComposite/>",
-        "</Shell>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <FillLayout>",
-        "  <t:MyComposite wbp:name='composite'>",
-        "    implicit-layout: org.eclipse.swt.layout.RowLayout",
-        "  <t:MyComposite>",
-        "    implicit-layout: org.eclipse.swt.layout.RowLayout");
-  }
+	public void test_clipboard_implicitLayout() throws Exception {
+		setFileContentSrc(
+				"test/MyComposite.java",
+				getSource(
+						"package test;",
+						"import org.eclipse.swt.widgets.Composite;",
+						"import org.eclipse.swt.layout.RowLayout;",
+						"public class MyComposite extends Composite {",
+						"  public MyComposite(Composite parent, int style) {",
+						"    super(parent, style);",
+						"    setLayout(new RowLayout());",
+						"  }",
+						"}"));
+		waitForAutoBuild();
+		// parse
+		CompositeInfo shell =
+				parse(
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <FillLayout/>",
+						"  </Shell.layout>",
+						"  <t:MyComposite wbp:name='composite'/>",
+						"</Shell>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <FillLayout>",
+				"  <t:MyComposite wbp:name='composite'>",
+				"    implicit-layout: org.eclipse.swt.layout.RowLayout");
+		refresh();
+		CompositeInfo composite = getObjectByName("composite");
+		// paste
+		{
+			XmlObjectMemento memento = XmlObjectMemento.createMemento(composite);
+			CompositeInfo newComposite = (CompositeInfo) memento.create(shell);
+			shell.getLayout().command_CREATE(newComposite, null);
+			memento.apply();
+		}
+		assertXML(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <t:MyComposite wbp:name='composite'/>",
+				"  <t:MyComposite/>",
+				"</Shell>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <FillLayout>",
+				"  <t:MyComposite wbp:name='composite'>",
+				"    implicit-layout: org.eclipse.swt.layout.RowLayout",
+				"  <t:MyComposite>",
+				"    implicit-layout: org.eclipse.swt.layout.RowLayout");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/CompositeTopBoundsSupportTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/CompositeTopBoundsSupportTest.java
index bb1189efd..74cbaf6b1 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/CompositeTopBoundsSupportTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/CompositeTopBoundsSupportTest.java
@@ -29,80 +29,80 @@
  * @author scheglov_ke
  */
 public class CompositeTopBoundsSupportTest extends XwtModelTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // show()
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_setSize() throws Exception {
-    ControlInfo shell = parse("<Shell/>");
-    shell.refresh();
-    // default size
-    assertEquals(new Dimension(450, 300), shell.getBounds().getSize());
-    // set new size
-    shell.getTopBoundsSupport().setSize(500, 400);
-    shell.refresh();
-    assertEquals(new Dimension(500, 400), shell.getBounds().getSize());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// show()
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_setSize() throws Exception {
+		ControlInfo shell = parse("<Shell/>");
+		shell.refresh();
+		// default size
+		assertEquals(new Dimension(450, 300), shell.getBounds().getSize());
+		// set new size
+		shell.getTopBoundsSupport().setSize(500, 400);
+		shell.refresh();
+		assertEquals(new Dimension(500, 400), shell.getBounds().getSize());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // show()
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_show_closeUsingESC() throws Exception {
-    final ControlInfo shell = parse("<Shell text='My Shell'/>");
-    shell.refresh();
-    // show
-    new UiContext().executeAndCheck(new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        shell.getTopBoundsSupport().show();
-      }
-    }, new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        Shell wrapperShell = context.useShell("My Shell");
-        {
-          assertEquals(450, wrapperShell.getSize().x);
-          assertEquals(300, wrapperShell.getSize().y);
-        }
-        new EventSender(wrapperShell).keyDown(SWT.ESC);
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// show()
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_show_closeUsingESC() throws Exception {
+		final ControlInfo shell = parse("<Shell text='My Shell'/>");
+		shell.refresh();
+		// show
+		new UiContext().executeAndCheck(new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				shell.getTopBoundsSupport().show();
+			}
+		}, new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				Shell wrapperShell = context.useShell("My Shell");
+				{
+					assertEquals(450, wrapperShell.getSize().x);
+					assertEquals(300, wrapperShell.getSize().y);
+				}
+				new EventSender(wrapperShell).keyDown(SWT.ESC);
+			}
+		});
+	}
 
-  /**
-   * Generic {@link Composite} should be wrapped into {@link Shell} to show it.
-   */
-  public void test_show_notShell() throws Exception {
-    final CompositeInfo composite = parse("<Composite/>");
-    composite.refresh();
-    // show
-    new UiContext().executeAndCheck(new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        composite.getTopBoundsSupport().show();
-      }
-    }, new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        Shell wrapperShell = context.useShell("Wrapper Shell");
-        {
-          assertEquals(450, composite.getControl().getSize().x);
-          assertEquals(300, composite.getControl().getSize().y);
-        }
-        new EventSender(wrapperShell).keyDown(SWT.ESC);
-      }
-    });
-  }
+	/**
+	 * Generic {@link Composite} should be wrapped into {@link Shell} to show it.
+	 */
+	public void test_show_notShell() throws Exception {
+		final CompositeInfo composite = parse("<Composite/>");
+		composite.refresh();
+		// show
+		new UiContext().executeAndCheck(new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				composite.getTopBoundsSupport().show();
+			}
+		}, new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				Shell wrapperShell = context.useShell("Wrapper Shell");
+				{
+					assertEquals(450, composite.getControl().getSize().x);
+					assertEquals(300, composite.getControl().getSize().y);
+				}
+				new EventSender(wrapperShell).keyDown(SWT.ESC);
+			}
+		});
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/ControlLiveManagerTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/ControlLiveManagerTest.java
index 765d9cd0e..465eb778c 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/ControlLiveManagerTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/ControlLiveManagerTest.java
@@ -37,350 +37,350 @@
  * @author scheglov_ke
  */
 public class ControlLiveManagerTest extends XwtModelTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // "Live" image
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static final Dimension BUTTON_NO_TEXT_SIZE = new Dimension(12, 25);
-  private static final Dimension BUTTON_TEXT_SIZE = new Dimension(75, 25);
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// "Live" image
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static final Dimension BUTTON_NO_TEXT_SIZE = new Dimension(12, 25);
+	private static final Dimension BUTTON_TEXT_SIZE = new Dimension(75, 25);
 
-  /**
-   * {@link Control_LiveManager} should not change {@link GlobalState}.
-   */
-  public void test_GlobalState() throws Exception {
-    ControlInfo shell = parse("<Shell/>");
-    refresh();
-    // initial "active"
-    assertSame(shell, GlobalState.getActiveObject());
-    // use "live" manager
-    {
-      ControlInfo button = createButton();
-      Image image = button.getImage();
-      assertNotNull(image);
-    }
-    // "active" is not changed
-    assertSame(shell, GlobalState.getActiveObject());
-  }
+	/**
+	 * {@link Control_LiveManager} should not change {@link GlobalState}.
+	 */
+	public void test_GlobalState() throws Exception {
+		ControlInfo shell = parse("<Shell/>");
+		refresh();
+		// initial "active"
+		assertSame(shell, GlobalState.getActiveObject());
+		// use "live" manager
+		{
+			ControlInfo button = createButton();
+			Image image = button.getImage();
+			assertNotNull(image);
+		}
+		// "active" is not changed
+		assertSame(shell, GlobalState.getActiveObject());
+	}
 
-  /**
-   * Check that after "live image" source is not changed.
-   */
-  public void test_liveImage_noSourceChange() throws Exception {
-    parse("<Shell/>");
-    String originalSource = m_lastContext.getContent();
-    // prepare button
-    ControlInfo button = createButton();
-    // check image
-    {
-      Image image = button.getImage();
-      assertNotNull(image);
-      // no source modification expected
-      assertEquals(originalSource, m_lastContext.getContent());
-    }
-    // check preferred size
-    {
-      Dimension preferredSize = button.getPreferredSize();
-      assertNotNull(preferredSize);
-    }
-  }
+	/**
+	 * Check that after "live image" source is not changed.
+	 */
+	public void test_liveImage_noSourceChange() throws Exception {
+		parse("<Shell/>");
+		String originalSource = m_lastContext.getContent();
+		// prepare button
+		ControlInfo button = createButton();
+		// check image
+		{
+			Image image = button.getImage();
+			assertNotNull(image);
+			// no source modification expected
+			assertEquals(originalSource, m_lastContext.getContent());
+		}
+		// check preferred size
+		{
+			Dimension preferredSize = button.getPreferredSize();
+			assertNotNull(preferredSize);
+		}
+	}
 
-  public void test_liveImage_onShell() throws Exception {
-    parse("<Shell/>");
-    // prepare buttons
-    ControlInfo button_1 = createButton();
-    ControlInfo button_2 = createButton();
-    // check images
-    {
-      // button_1 has "live" image
-      Image image_1 = button_1.getImage();
-      assertNotNull(image_1);
-      {
-        Dimension size = new Rectangle(image_1.getBounds()).getSize();
-        assertEquals(BUTTON_NO_TEXT_SIZE, size);
-      }
-      // button_2 has same "live" image
-      Image image_2 = button_2.getImage();
-      assertTrue(UiUtils.equals(image_1, image_2));
-    }
-    // check preferred size
-    {
-      // button_1 has "live" preferred size
-      Dimension preferredSize_1 = button_1.getPreferredSize();
-      assertNotNull(preferredSize_1);
-      assertEquals(BUTTON_NO_TEXT_SIZE, preferredSize_1);
-      // button_2 has same "live" preferred size
-      assertEquals(preferredSize_1, button_2.getPreferredSize());
-    }
-  }
+	public void test_liveImage_onShell() throws Exception {
+		parse("<Shell/>");
+		// prepare buttons
+		ControlInfo button_1 = createButton();
+		ControlInfo button_2 = createButton();
+		// check images
+		{
+			// button_1 has "live" image
+			Image image_1 = button_1.getImage();
+			assertNotNull(image_1);
+			{
+				Dimension size = new Rectangle(image_1.getBounds()).getSize();
+				assertEquals(BUTTON_NO_TEXT_SIZE, size);
+			}
+			// button_2 has same "live" image
+			Image image_2 = button_2.getImage();
+			assertTrue(UiUtils.equals(image_1, image_2));
+		}
+		// check preferred size
+		{
+			// button_1 has "live" preferred size
+			Dimension preferredSize_1 = button_1.getPreferredSize();
+			assertNotNull(preferredSize_1);
+			assertEquals(BUTTON_NO_TEXT_SIZE, preferredSize_1);
+			// button_2 has same "live" preferred size
+			assertEquals(preferredSize_1, button_2.getPreferredSize());
+		}
+	}
 
-  public void test_buttonWithText() throws Exception {
-    parse("<Shell/>");
-    ControlInfo button = createButtonWithText();
-    // check preferred size
-    Dimension preferredSize = button.getPreferredSize();
-    assertEquals(BUTTON_TEXT_SIZE, preferredSize);
-  }
+	public void test_buttonWithText() throws Exception {
+		parse("<Shell/>");
+		ControlInfo button = createButtonWithText();
+		// check preferred size
+		Dimension preferredSize = button.getPreferredSize();
+		assertEquals(BUTTON_TEXT_SIZE, preferredSize);
+	}
 
-  /**
-   * Test that live image is not disposed during refresh. Right now this means that if we cache live
-   * images, we should use keep copy of cached image.
-   */
-  public void test_liveImage_noDispose() throws Exception {
-    CompositeInfo shell =
-        parse(
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <RowLayout/>",
-            "  </Shell.layout>",
-            "</Shell>");
-    refresh();
-    // add button
-    {
-      ControlInfo button = createButton();
-      // we have live image
-      Image image = button.getImage();
-      assertNotNull(image);
-      assertFalse(image.isDisposed());
-      // do add
-      shell.getLayout().command_CREATE(button, null);
-      shell.refresh();
-    }
-    // check live image for new button
-    {
-      ControlInfo button = createButton();
-      // we still have valid live image
-      Image image = button.getImage();
-      assertNotNull(image);
-      assertFalse(image.isDisposed());
-    }
-  }
+	/**
+	 * Test that live image is not disposed during refresh. Right now this means that if we cache live
+	 * images, we should use keep copy of cached image.
+	 */
+	public void test_liveImage_noDispose() throws Exception {
+		CompositeInfo shell =
+				parse(
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <RowLayout/>",
+						"  </Shell.layout>",
+						"</Shell>");
+		refresh();
+		// add button
+		{
+			ControlInfo button = createButton();
+			// we have live image
+			Image image = button.getImage();
+			assertNotNull(image);
+			assertFalse(image.isDisposed());
+			// do add
+			shell.getLayout().command_CREATE(button, null);
+			shell.refresh();
+		}
+		// check live image for new button
+		{
+			ControlInfo button = createButton();
+			// we still have valid live image
+			Image image = button.getImage();
+			assertNotNull(image);
+			assertFalse(image.isDisposed());
+		}
+	}
 
-  public void test_liveImage_onComposite() throws Exception {
-    parse("<Composite/>");
-    //
-    ControlInfo label = createObject("org.eclipse.swt.widgets.Label");
-    assertNotNull(label.getImage());
-  }
+	public void test_liveImage_onComposite() throws Exception {
+		parse("<Composite/>");
+		//
+		ControlInfo label = createObject("org.eclipse.swt.widgets.Label");
+		assertNotNull(label.getImage());
+	}
 
-  /**
-   * Sometimes component has zero or just too small size by default, so we need some way to force
-   * its "live" size.
-   */
-  public void test_liveImage_forcedSize() throws Exception {
-    setFileContentSrc(
-        "test/MyCanvas.java",
-        getJavaSource(
-            "public class MyCanvas extends Canvas {",
-            "  public MyCanvas(Composite parent, int style) {",
-            "    super(parent, style);",
-            "  }",
-            "}"));
-    setFileContentSrc(
-        "test/MyCanvas.wbp-component.xml",
-        getSourceDQ(
-            "<?xml version='1.0' encoding='UTF-8'?>",
-            "<component xmlns='http://www.eclipse.org/wb/WBPComponent'>",
-            "  <parameters>",
-            "    <parameter name='liveComponent.forcedSize.width'>150</parameter>",
-            "    <parameter name='liveComponent.forcedSize.height'>30</parameter>",
-            "  </parameters>",
-            "</component>"));
-    waitForAutoBuild();
-    // parse
-    parse("<Shell/>");
-    // we should have forced "preferred" size
-    ControlInfo myCanvas = createObject("test.MyCanvas");
-    assertEquals(new Dimension(150, 30), myCanvas.getPreferredSize());
-  }
+	/**
+	 * Sometimes component has zero or just too small size by default, so we need some way to force
+	 * its "live" size.
+	 */
+	public void test_liveImage_forcedSize() throws Exception {
+		setFileContentSrc(
+				"test/MyCanvas.java",
+				getJavaSource(
+						"public class MyCanvas extends Canvas {",
+						"  public MyCanvas(Composite parent, int style) {",
+						"    super(parent, style);",
+						"  }",
+						"}"));
+		setFileContentSrc(
+				"test/MyCanvas.wbp-component.xml",
+				getSourceDQ(
+						"<?xml version='1.0' encoding='UTF-8'?>",
+						"<component xmlns='http://www.eclipse.org/wb/WBPComponent'>",
+						"  <parameters>",
+						"    <parameter name='liveComponent.forcedSize.width'>150</parameter>",
+						"    <parameter name='liveComponent.forcedSize.height'>30</parameter>",
+						"  </parameters>",
+						"</component>"));
+		waitForAutoBuild();
+		// parse
+		parse("<Shell/>");
+		// we should have forced "preferred" size
+		ControlInfo myCanvas = createObject("test.MyCanvas");
+		assertEquals(new Dimension(150, 30), myCanvas.getPreferredSize());
+	}
 
-  /**
-   * If exception happens during live image creation, we still should return some image (not
-   * <code>null</code>) to prevent problems on other levels.
-   */
-  public void test_liveImage_whenException() throws Exception {
-    setFileContentSrc(
-        "test/MyComposite.java",
-        getJavaSource(
-            "public class MyComposite extends Composite {",
-            "  public MyComposite(Composite parent, int style) {",
-            "    super(parent, style);",
-            "  }",
-            "  public Rectangle getClientArea() {",
-            "    throw new IllegalStateException('Problem in getClientArea()');",
-            "  }",
-            "}"));
-    waitForAutoBuild();
-    // parse
-    parse("<Shell/>");
-    // add log listener for exception validation
-    ILog log = DesignerPlugin.getDefault().getLog();
-    ILogListener logListener = new ILogListener() {
-      @Override
-      public void logging(IStatus status, String plugin) {
-        assertEquals(IStatus.ERROR, status.getSeverity());
-        Throwable exception = status.getException();
-        assertThat(exception).isExactlyInstanceOf(IllegalStateException.class);
-        assertEquals("Problem in getClientArea()", exception.getMessage());
-      }
-    };
-    // temporary intercept logging
-    try {
-      log.addLogListener(logListener);
-      DesignerPlugin.setDisplayExceptionOnConsole(false);
-      // prepare new component
-      ControlInfo newComponent = createObject("test.MyComposite");
-      // ask image
-      {
-        Image image = newComponent.getImage();
-        assertNotNull(image);
-        assertThat(image.getBounds().width).isEqualTo(200);
-        assertThat(image.getBounds().height).isEqualTo(50);
-      }
-    } finally {
-      log.removeLogListener(logListener);
-      DesignerPlugin.setDisplayExceptionOnConsole(true);
-    }
-  }
+	/**
+	 * If exception happens during live image creation, we still should return some image (not
+	 * <code>null</code>) to prevent problems on other levels.
+	 */
+	public void test_liveImage_whenException() throws Exception {
+		setFileContentSrc(
+				"test/MyComposite.java",
+				getJavaSource(
+						"public class MyComposite extends Composite {",
+						"  public MyComposite(Composite parent, int style) {",
+						"    super(parent, style);",
+						"  }",
+						"  public Rectangle getClientArea() {",
+						"    throw new IllegalStateException('Problem in getClientArea()');",
+						"  }",
+						"}"));
+		waitForAutoBuild();
+		// parse
+		parse("<Shell/>");
+		// add log listener for exception validation
+		ILog log = DesignerPlugin.getDefault().getLog();
+		ILogListener logListener = new ILogListener() {
+			@Override
+			public void logging(IStatus status, String plugin) {
+				assertEquals(IStatus.ERROR, status.getSeverity());
+				Throwable exception = status.getException();
+				assertThat(exception).isExactlyInstanceOf(IllegalStateException.class);
+				assertEquals("Problem in getClientArea()", exception.getMessage());
+			}
+		};
+		// temporary intercept logging
+		try {
+			log.addLogListener(logListener);
+			DesignerPlugin.setDisplayExceptionOnConsole(false);
+			// prepare new component
+			ControlInfo newComponent = createObject("test.MyComposite");
+			// ask image
+			{
+				Image image = newComponent.getImage();
+				assertNotNull(image);
+				assertThat(image.getBounds().width).isEqualTo(200);
+				assertThat(image.getBounds().height).isEqualTo(50);
+			}
+		} finally {
+			log.removeLogListener(logListener);
+			DesignerPlugin.setDisplayExceptionOnConsole(true);
+		}
+	}
 
-  public void test_liveImage_copyPaste() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Button wbp:name='button' bounds='10, 10, 200, 100'/>",
-        "</Shell>");
-    refresh();
-    // prepare memento
-    XmlObjectMemento memento;
-    {
-      ControlInfo button = getObjectByName("button");
-      memento = XmlObjectMemento.createMemento(button);
-    }
-    // do paste
-    ControlInfo pasteButton = (ControlInfo) memento.create(m_lastObject);
-    // get "live" image, from memento
-    {
-      Image image = pasteButton.getImage();
-      assertThat(image.getBounds().width).isEqualTo(200);
-      assertThat(image.getBounds().height).isEqualTo(100);
-    }
-    // check style
-    {
-      int actualStyle = pasteButton.getStyle();
-      assertTrue(
-          "SWT.PUSH bit expected, but " + Integer.toHexString(actualStyle) + " found.",
-          (actualStyle & SWT.PUSH) == SWT.PUSH);
-    }
-  }
+	public void test_liveImage_copyPaste() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Button wbp:name='button' bounds='10, 10, 200, 100'/>",
+				"</Shell>");
+		refresh();
+		// prepare memento
+		XmlObjectMemento memento;
+		{
+			ControlInfo button = getObjectByName("button");
+			memento = XmlObjectMemento.createMemento(button);
+		}
+		// do paste
+		ControlInfo pasteButton = (ControlInfo) memento.create(m_lastObject);
+		// get "live" image, from memento
+		{
+			Image image = pasteButton.getImage();
+			assertThat(image.getBounds().width).isEqualTo(200);
+			assertThat(image.getBounds().height).isEqualTo(100);
+		}
+		// check style
+		{
+			int actualStyle = pasteButton.getStyle();
+			assertTrue(
+					"SWT.PUSH bit expected, but " + Integer.toHexString(actualStyle) + " found.",
+					(actualStyle & SWT.PUSH) == SWT.PUSH);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Style
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_liveStyle_standardControl() throws Exception {
-    parse("<Shell/>");
-    // PUSH
-    {
-      ControlInfo button = createObject("org.eclipse.swt.widgets.Button", null);
-      int actualStyle = button.getStyle();
-      assertTrue(
-          "SWT.PUSH bit expected, but " + Integer.toHexString(actualStyle) + " found.",
-          (actualStyle & SWT.PUSH) == SWT.PUSH);
-    }
-    // CHECK
-    {
-      ControlInfo button = createObject("org.eclipse.swt.widgets.Button", "check");
-      int actualStyle = button.getStyle();
-      assertTrue(
-          "SWT.CHECK bit expected, but " + Integer.toHexString(actualStyle) + " found.",
-          (actualStyle & SWT.CHECK) == SWT.CHECK);
-    }
-    // RADIO
-    {
-      ControlInfo button = createObject("org.eclipse.swt.widgets.Button", "radio");
-      int actualStyle = button.getStyle();
-      assertTrue(
-          "SWT.RADIO bit expected, but " + Integer.toHexString(actualStyle) + " found.",
-          (actualStyle & SWT.RADIO) == SWT.RADIO);
-    }
-    // Text: BORDER
-    {
-      ControlInfo text = createObject("org.eclipse.swt.widgets.Text");
-      int actualStyle = text.getStyle();
-      assertTrue(
-          "SWT.BORDER bit expected, but " + Integer.toHexString(actualStyle) + " found.",
-          (actualStyle & SWT.BORDER) == SWT.BORDER);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Style
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_liveStyle_standardControl() throws Exception {
+		parse("<Shell/>");
+		// PUSH
+		{
+			ControlInfo button = createObject("org.eclipse.swt.widgets.Button", null);
+			int actualStyle = button.getStyle();
+			assertTrue(
+					"SWT.PUSH bit expected, but " + Integer.toHexString(actualStyle) + " found.",
+					(actualStyle & SWT.PUSH) == SWT.PUSH);
+		}
+		// CHECK
+		{
+			ControlInfo button = createObject("org.eclipse.swt.widgets.Button", "check");
+			int actualStyle = button.getStyle();
+			assertTrue(
+					"SWT.CHECK bit expected, but " + Integer.toHexString(actualStyle) + " found.",
+					(actualStyle & SWT.CHECK) == SWT.CHECK);
+		}
+		// RADIO
+		{
+			ControlInfo button = createObject("org.eclipse.swt.widgets.Button", "radio");
+			int actualStyle = button.getStyle();
+			assertTrue(
+					"SWT.RADIO bit expected, but " + Integer.toHexString(actualStyle) + " found.",
+					(actualStyle & SWT.RADIO) == SWT.RADIO);
+		}
+		// Text: BORDER
+		{
+			ControlInfo text = createObject("org.eclipse.swt.widgets.Text");
+			int actualStyle = text.getStyle();
+			assertTrue(
+					"SWT.BORDER bit expected, but " + Integer.toHexString(actualStyle) + " found.",
+					(actualStyle & SWT.BORDER) == SWT.BORDER);
+		}
+	}
 
-  public void test_liveStyle_customControl() throws Exception {
-    setFileContentSrc(
-        "test/MyComposite.java",
-        getJavaSource(
-            "public class MyComposite extends Composite {",
-            "  public MyComposite(Composite parent, int style) {",
-            "    super(parent, SWT.BORDER | SWT.NO_RADIO_GROUP);",
-            "  }",
-            "}"));
-    waitForAutoBuild();
-    // parse
-    parse("<Shell/>");
-    // do checks
-    ControlInfo myComposite = createObject("test.MyComposite");
-    int actualStyle = myComposite.getStyle();
-    assertTrue(
-        "SWT.BORDER bit expected, but " + Integer.toHexString(actualStyle) + " found.",
-        (actualStyle & SWT.BORDER) == SWT.BORDER);
-    assertTrue("SWT.NO_RADIO_GROUP bit expected, but "
-        + Integer.toHexString(actualStyle)
-        + " found.", (actualStyle & SWT.NO_RADIO_GROUP) == SWT.NO_RADIO_GROUP);
-  }
+	public void test_liveStyle_customControl() throws Exception {
+		setFileContentSrc(
+				"test/MyComposite.java",
+				getJavaSource(
+						"public class MyComposite extends Composite {",
+						"  public MyComposite(Composite parent, int style) {",
+						"    super(parent, SWT.BORDER | SWT.NO_RADIO_GROUP);",
+						"  }",
+						"}"));
+		waitForAutoBuild();
+		// parse
+		parse("<Shell/>");
+		// do checks
+		ControlInfo myComposite = createObject("test.MyComposite");
+		int actualStyle = myComposite.getStyle();
+		assertTrue(
+				"SWT.BORDER bit expected, but " + Integer.toHexString(actualStyle) + " found.",
+				(actualStyle & SWT.BORDER) == SWT.BORDER);
+		assertTrue("SWT.NO_RADIO_GROUP bit expected, but "
+				+ Integer.toHexString(actualStyle)
+				+ " found.", (actualStyle & SWT.NO_RADIO_GROUP) == SWT.NO_RADIO_GROUP);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Baseline
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_liveBaseline() throws Exception {
-    CompositeInfo shell =
-        parse(
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <RowLayout/>",
-            "  </Shell.layout>",
-            "</Shell>");
-    refresh();
-    // prepare button
-    ControlInfo newButton = createButton();
-    // get baseline
-    int liveBaseline = newButton.getBaseline();
-    assertThat(liveBaseline).isNotEqualTo(IBaselineSupport.NO_BASELINE).isPositive();
-    // drop Button
-    ((RowLayoutInfo) shell.getLayout()).command_CREATE(newButton, null);
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <RowLayout/>",
-        "  </Shell.layout>",
-        "  <Button/>",
-        "</Shell>");
-    // same baseline as "live"
-    int baseline = newButton.getBaseline();
-    assertThat(baseline).isEqualTo(liveBaseline);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Baseline
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_liveBaseline() throws Exception {
+		CompositeInfo shell =
+				parse(
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <RowLayout/>",
+						"  </Shell.layout>",
+						"</Shell>");
+		refresh();
+		// prepare button
+		ControlInfo newButton = createButton();
+		// get baseline
+		int liveBaseline = newButton.getBaseline();
+		assertThat(liveBaseline).isNotEqualTo(IBaselineSupport.NO_BASELINE).isPositive();
+		// drop Button
+		((RowLayoutInfo) shell.getLayout()).command_CREATE(newButton, null);
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <RowLayout/>",
+				"  </Shell.layout>",
+				"  <Button/>",
+				"</Shell>");
+		// same baseline as "live"
+		int baseline = newButton.getBaseline();
+		assertThat(baseline).isEqualTo(liveBaseline);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/ControlTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/ControlTest.java
index faf6c5b86..799ca18de 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/ControlTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/ControlTest.java
@@ -35,194 +35,194 @@
  * @author scheglov_ke
  */
 public class ControlTest extends XwtModelTest {
-  private static final int SHELL_BORDER = 8;
-  private static final int SHELL_HEADER = 30;
-  public static final int BUTTON_ON_ROW_WIDTH = 68;
-  public static final int BUTTON_ON_ROW_HEIGHT = 25;
+	private static final int SHELL_BORDER = 8;
+	private static final int SHELL_HEADER = 30;
+	public static final int BUTTON_ON_ROW_WIDTH = 68;
+	public static final int BUTTON_ON_ROW_HEIGHT = 25;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_parse() throws Exception {
-    ControlInfo shell =
-        parse(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<Shell text='Hello!'>",
-            "  <Shell.layout>",
-            "    <RowLayout/>",
-            "  </Shell.layout>",
-            "  <Button wbp:name='button' text='My button'/>",
-            "</Shell>");
-    shell.refresh();
-    // shell
-    {
-      // has Image
-      {
-        Image image = shell.getImage();
-        assertNotNull(image);
-        assertEquals(450, image.getBounds().width);
-        assertEquals(300, image.getBounds().height);
-      }
-      // has "model" bounds
-      {
-        Rectangle bounds = shell.getModelBounds();
-        assertEquals(450, bounds.width);
-        assertEquals(300, bounds.height);
-      }
-      // has "parent" bounds
-      {
-        Rectangle bounds = shell.getBounds();
-        assertEquals(450, bounds.width);
-        assertEquals(300, bounds.height);
-      }
-      // has "absolute" bounds
-      {
-        Rectangle bounds = shell.getAbsoluteBounds();
-        assertEquals(450, bounds.width);
-        assertEquals(300, bounds.height);
-      }
-      // client area insets
-      {
-        Insets expected = new Insets(SHELL_HEADER, SHELL_BORDER, SHELL_BORDER, SHELL_BORDER);
-        assertEquals(expected, shell.getClientAreaInsets());
-      }
-    }
-    // button
-    {
-      ControlInfo button = getObjectByName("button");
-      int expectedWidth = BUTTON_ON_ROW_WIDTH;
-      int expectedHeight = BUTTON_ON_ROW_HEIGHT;
-      // has Image
-      {
-        Image image = button.getImage();
-        assertNotNull(image);
-        assertEquals(expectedWidth, image.getBounds().width);
-        assertEquals(expectedHeight, image.getBounds().height);
-      }
-      // has "model" bounds
-      {
-        Rectangle bounds = button.getModelBounds();
-        assertEquals(new Rectangle(3, 3, expectedWidth, expectedHeight), bounds);
-      }
-      // has "parent" bounds
-      {
-        Rectangle bounds = button.getBounds();
-        assertEquals(new Rectangle(SHELL_BORDER + 3,
-            SHELL_HEADER + 3,
-            expectedWidth,
-            expectedHeight), bounds);
-      }
-      // has "absolute" bounds
-      {
-        Rectangle bounds = button.getAbsoluteBounds();
-        assertEquals(new Rectangle(SHELL_BORDER + 3,
-            SHELL_HEADER + 3,
-            expectedWidth,
-            expectedHeight), bounds);
-      }
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_parse() throws Exception {
+		ControlInfo shell =
+				parse(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<Shell text='Hello!'>",
+						"  <Shell.layout>",
+						"    <RowLayout/>",
+						"  </Shell.layout>",
+						"  <Button wbp:name='button' text='My button'/>",
+						"</Shell>");
+		shell.refresh();
+		// shell
+		{
+			// has Image
+			{
+				Image image = shell.getImage();
+				assertNotNull(image);
+				assertEquals(450, image.getBounds().width);
+				assertEquals(300, image.getBounds().height);
+			}
+			// has "model" bounds
+			{
+				Rectangle bounds = shell.getModelBounds();
+				assertEquals(450, bounds.width);
+				assertEquals(300, bounds.height);
+			}
+			// has "parent" bounds
+			{
+				Rectangle bounds = shell.getBounds();
+				assertEquals(450, bounds.width);
+				assertEquals(300, bounds.height);
+			}
+			// has "absolute" bounds
+			{
+				Rectangle bounds = shell.getAbsoluteBounds();
+				assertEquals(450, bounds.width);
+				assertEquals(300, bounds.height);
+			}
+			// client area insets
+			{
+				Insets expected = new Insets(SHELL_HEADER, SHELL_BORDER, SHELL_BORDER, SHELL_BORDER);
+				assertEquals(expected, shell.getClientAreaInsets());
+			}
+		}
+		// button
+		{
+			ControlInfo button = getObjectByName("button");
+			int expectedWidth = BUTTON_ON_ROW_WIDTH;
+			int expectedHeight = BUTTON_ON_ROW_HEIGHT;
+			// has Image
+			{
+				Image image = button.getImage();
+				assertNotNull(image);
+				assertEquals(expectedWidth, image.getBounds().width);
+				assertEquals(expectedHeight, image.getBounds().height);
+			}
+			// has "model" bounds
+			{
+				Rectangle bounds = button.getModelBounds();
+				assertEquals(new Rectangle(3, 3, expectedWidth, expectedHeight), bounds);
+			}
+			// has "parent" bounds
+			{
+				Rectangle bounds = button.getBounds();
+				assertEquals(new Rectangle(SHELL_BORDER + 3,
+						SHELL_HEADER + 3,
+						expectedWidth,
+						expectedHeight), bounds);
+			}
+			// has "absolute" bounds
+			{
+				Rectangle bounds = button.getAbsoluteBounds();
+				assertEquals(new Rectangle(SHELL_BORDER + 3,
+						SHELL_HEADER + 3,
+						expectedWidth,
+						expectedHeight), bounds);
+			}
+		}
+	}
 
-  /**
-   * Test that {@link ControlInfo} has "Style" property.
-   */
-  public void test_hasStyleProperty() throws Exception {
-    ControlInfo shell = parse("<Shell/>");
-    refresh();
-    // has "Style" property
-    Property property = shell.getPropertyByTitle("Style");
-    assertNotNull(property);
-    assertThat(property.getEditor()).isInstanceOf(StylePropertyEditor.class);
-    assertEquals(true, property.getCategory().isSystem());
-    // no default value
-    assertEquals(0, property.getValue());
-  }
+	/**
+	 * Test that {@link ControlInfo} has "Style" property.
+	 */
+	public void test_hasStyleProperty() throws Exception {
+		ControlInfo shell = parse("<Shell/>");
+		refresh();
+		// has "Style" property
+		Property property = shell.getPropertyByTitle("Style");
+		assertNotNull(property);
+		assertThat(property.getEditor()).isInstanceOf(StylePropertyEditor.class);
+		assertEquals(true, property.getCategory().isSystem());
+		// no default value
+		assertEquals(0, property.getValue());
+	}
 
-  /**
-   * Test that custom component can be rendered as "root".
-   */
-  public void test_renderMyComponent() throws Exception {
-    prepareMyComponent("public int myValue = 123;");
-    ControlInfo model = parse("<t:MyComponent/>");
-    refresh();
-    // it should be really MyComponent, with default property value
-    assertEquals("test.MyComponent", model.getObject().getClass().getName());
-    assertEquals(123, model.getPropertyByTitle("myValue").getValue());
-  }
+	/**
+	 * Test that custom component can be rendered as "root".
+	 */
+	public void test_renderMyComponent() throws Exception {
+		prepareMyComponent("public int myValue = 123;");
+		ControlInfo model = parse("<t:MyComponent/>");
+		refresh();
+		// it should be really MyComponent, with default property value
+		assertEquals("test.MyComponent", model.getObject().getClass().getName());
+		assertEquals(123, model.getPropertyByTitle("myValue").getValue());
+	}
 
-  /**
-   * Support for creating {@link Control} which is described in XWT file.
-   * <p>
-   * May be use normal {@link Composite} if XWT will support this.
-   * <p>
-   * http://www.eclipse.org/forums/index.php?t=msg&th=167978&start=0&
-   */
-  public void test_parse_nestedXWT() throws Exception {
-    setFileContentSrc(
-        "test/MyComposite.java",
-        getSource(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "package test;",
-            "public class MyComposite {",
-            "}"));
-    setFileContentSrc(
-        "test/MyComposite.xwt",
-        getTestSource(
-            "// filler filler filler filler filler",
-            "<Composite enabled='false'>",
-            "  <Composite.layout>",
-            "    <FillLayout/>",
-            "  </Composite.layout>",
-            "  <Button/>",
-            "</Composite>"));
-    waitForAutoBuild();
-    // parse
-    parse(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <RowLayout/>",
-        "  </Shell.layout>",
-        "  <t:MyComposite wbp:name='composite'/>",
-        "</Shell>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <RowLayout>",
-        "  <t:MyComposite wbp:name='composite'>",
-        "    implicit-layout: org.eclipse.swt.layout.FillLayout",
-        "    virtual-LayoutData: org.eclipse.swt.layout.RowData");
-    // check that "enabled" applied
-    refresh();
-    CompositeInfo composite = getObjectByName("composite");
-    assertFalse(composite.getControl().isEnabled());
-  }
+	/**
+	 * Support for creating {@link Control} which is described in XWT file.
+	 * <p>
+	 * May be use normal {@link Composite} if XWT will support this.
+	 * <p>
+	 * http://www.eclipse.org/forums/index.php?t=msg&th=167978&start=0&
+	 */
+	public void test_parse_nestedXWT() throws Exception {
+		setFileContentSrc(
+				"test/MyComposite.java",
+				getSource(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"package test;",
+						"public class MyComposite {",
+						"}"));
+		setFileContentSrc(
+				"test/MyComposite.xwt",
+				getTestSource(
+						"// filler filler filler filler filler",
+						"<Composite enabled='false'>",
+						"  <Composite.layout>",
+						"    <FillLayout/>",
+						"  </Composite.layout>",
+						"  <Button/>",
+						"</Composite>"));
+		waitForAutoBuild();
+		// parse
+		parse(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <RowLayout/>",
+				"  </Shell.layout>",
+				"  <t:MyComposite wbp:name='composite'/>",
+				"</Shell>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <RowLayout>",
+				"  <t:MyComposite wbp:name='composite'>",
+				"    implicit-layout: org.eclipse.swt.layout.FillLayout",
+				"    virtual-LayoutData: org.eclipse.swt.layout.RowData");
+		// check that "enabled" applied
+		refresh();
+		CompositeInfo composite = getObjectByName("composite");
+		assertFalse(composite.getControl().isEnabled());
+	}
 
-  /**
-   * Some stupid user attempts to use XWT in not Java project. This is bad by itself, because there
-   * are no classpath, types, etc. But would be good to show good warning instead of just failure.
-   */
-  @DisposeProjectAfter
-  public void test_parse_notJavaProject() throws Exception {
-    ProjectUtils.removeNature(m_project, JavaCore.NATURE_ID);
-    // parse
-    try {
-      parse("<Shell/>");
-      fail();
-    } catch (DesignerException e) {
-      assertEquals(IExceptionConstants.NOT_JAVA_PROJECT, e.getCode());
-    }
-  }
+	/**
+	 * Some stupid user attempts to use XWT in not Java project. This is bad by itself, because there
+	 * are no classpath, types, etc. But would be good to show good warning instead of just failure.
+	 */
+	@DisposeProjectAfter
+	public void test_parse_notJavaProject() throws Exception {
+		ProjectUtils.removeNature(m_project, JavaCore.NATURE_ID);
+		// parse
+		try {
+			parse("<Shell/>");
+			fail();
+		} catch (DesignerException e) {
+			assertEquals(IExceptionConstants.NOT_JAVA_PROJECT, e.getCode());
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/CoolBarGefTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/CoolBarGefTest.java
index 6fe2311e9..dac8617fe 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/CoolBarGefTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/CoolBarGefTest.java
@@ -20,136 +20,136 @@
  * @author scheglov_ke
  */
 public class CoolBarGefTest extends XwtGefTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Canvas
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_canvas_CREATE_item() throws Exception {
-    CoolBarInfo toolBar = openEditor("<CoolBar/>");
-    //
-    loadCreationTool("org.eclipse.swt.widgets.CoolItem");
-    canvas.moveTo(toolBar, 5, 5);
-    canvas.click();
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<CoolBar>",
-        "  <CoolItem/>",
-        "</CoolBar>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Canvas
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_canvas_CREATE_item() throws Exception {
+		CoolBarInfo toolBar = openEditor("<CoolBar/>");
+		//
+		loadCreationTool("org.eclipse.swt.widgets.CoolItem");
+		canvas.moveTo(toolBar, 5, 5);
+		canvas.click();
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<CoolBar>",
+				"  <CoolItem/>",
+				"</CoolBar>");
+	}
 
-  public void test_canvas_CREATE_control_good() throws Exception {
-    openEditor(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<CoolBar>",
-        "  <CoolItem wbp:name='item' size='100, 50'/>",
-        "</CoolBar>");
-    XmlObjectInfo item = getObjectByName("item");
-    //
-    loadButton();
-    canvas.moveTo(item, 5, 5);
-    canvas.assertFeedbacks(canvas.getTargetPredicate(item));
-    canvas.assertCommandNotNull();
-    canvas.click();
-    assertXML(
-        "// filler filler filler filler filler",
-        "<CoolBar>",
-        "  <CoolItem wbp:name='item' size='100, 50'>",
-        "    <CoolItem.control>",
-        "      <Button/>",
-        "    </CoolItem.control>",
-        "  </CoolItem>",
-        "</CoolBar>");
-  }
+	public void test_canvas_CREATE_control_good() throws Exception {
+		openEditor(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<CoolBar>",
+				"  <CoolItem wbp:name='item' size='100, 50'/>",
+				"</CoolBar>");
+		XmlObjectInfo item = getObjectByName("item");
+		//
+		loadButton();
+		canvas.moveTo(item, 5, 5);
+		canvas.assertFeedbacks(canvas.getTargetPredicate(item));
+		canvas.assertCommandNotNull();
+		canvas.click();
+		assertXML(
+				"// filler filler filler filler filler",
+				"<CoolBar>",
+				"  <CoolItem wbp:name='item' size='100, 50'>",
+				"    <CoolItem.control>",
+				"      <Button/>",
+				"    </CoolItem.control>",
+				"  </CoolItem>",
+				"</CoolBar>");
+	}
 
-  public void test_canvas_CREATE_control_alreadyHasControl() throws Exception {
-    openEditor(
-        "// filler filler filler filler filler",
-        "<CoolBar>",
-        "  <CoolItem wbp:name='item' size='100, 50'>",
-        "    <CoolItem.control>",
-        "      <Button/>",
-        "    </CoolItem.control>",
-        "  </CoolItem>",
-        "</CoolBar>");
-    XmlObjectInfo item = getObjectByName("item");
-    //
-    loadButton();
-    canvas.moveTo(item, 5, 5);
-    canvas.assertFeedbacks(canvas.getTargetPredicate(item));
-    canvas.assertCommandNull();
-  }
+	public void test_canvas_CREATE_control_alreadyHasControl() throws Exception {
+		openEditor(
+				"// filler filler filler filler filler",
+				"<CoolBar>",
+				"  <CoolItem wbp:name='item' size='100, 50'>",
+				"    <CoolItem.control>",
+				"      <Button/>",
+				"    </CoolItem.control>",
+				"  </CoolItem>",
+				"</CoolBar>");
+		XmlObjectInfo item = getObjectByName("item");
+		//
+		loadButton();
+		canvas.moveTo(item, 5, 5);
+		canvas.assertFeedbacks(canvas.getTargetPredicate(item));
+		canvas.assertCommandNull();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tree
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_tree_CREATE_item() throws Exception {
-    CoolBarInfo toolBar = openEditor("<CoolBar/>");
-    //
-    loadCreationTool("org.eclipse.swt.widgets.CoolItem");
-    tree.moveOn(toolBar);
-    tree.click();
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<CoolBar>",
-        "  <CoolItem/>",
-        "</CoolBar>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tree
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_tree_CREATE_item() throws Exception {
+		CoolBarInfo toolBar = openEditor("<CoolBar/>");
+		//
+		loadCreationTool("org.eclipse.swt.widgets.CoolItem");
+		tree.moveOn(toolBar);
+		tree.click();
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<CoolBar>",
+				"  <CoolItem/>",
+				"</CoolBar>");
+	}
 
-  public void test_tree_CREATE_control_good() throws Exception {
-    openEditor(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<CoolBar>",
-        "  <CoolItem wbp:name='item' size='100, 50'/>",
-        "</CoolBar>");
-    XmlObjectInfo item = getObjectByName("item");
-    //
-    loadButton();
-    tree.moveOn(item);
-    tree.assertFeedback_on(item);
-    tree.assertCommandNotNull();
-    tree.click();
-    assertXML(
-        "// filler filler filler filler filler",
-        "<CoolBar>",
-        "  <CoolItem wbp:name='item' size='100, 50'>",
-        "    <CoolItem.control>",
-        "      <Button/>",
-        "    </CoolItem.control>",
-        "  </CoolItem>",
-        "</CoolBar>");
-  }
+	public void test_tree_CREATE_control_good() throws Exception {
+		openEditor(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<CoolBar>",
+				"  <CoolItem wbp:name='item' size='100, 50'/>",
+				"</CoolBar>");
+		XmlObjectInfo item = getObjectByName("item");
+		//
+		loadButton();
+		tree.moveOn(item);
+		tree.assertFeedback_on(item);
+		tree.assertCommandNotNull();
+		tree.click();
+		assertXML(
+				"// filler filler filler filler filler",
+				"<CoolBar>",
+				"  <CoolItem wbp:name='item' size='100, 50'>",
+				"    <CoolItem.control>",
+				"      <Button/>",
+				"    </CoolItem.control>",
+				"  </CoolItem>",
+				"</CoolBar>");
+	}
 
-  public void test_tree_CREATE_control_alreadyHasControl() throws Exception {
-    openEditor(
-        "// filler filler filler filler filler",
-        "<CoolBar>",
-        "  <CoolItem wbp:name='item' size='100, 50'>",
-        "    <CoolItem.control>",
-        "      <Button/>",
-        "    </CoolItem.control>",
-        "  </CoolItem>",
-        "</CoolBar>");
-    XmlObjectInfo item = getObjectByName("item");
-    //
-    loadButton();
-    tree.moveOn(item);
-    tree.assertFeedback_on(item);
-    tree.assertCommandNull();
-  }
+	public void test_tree_CREATE_control_alreadyHasControl() throws Exception {
+		openEditor(
+				"// filler filler filler filler filler",
+				"<CoolBar>",
+				"  <CoolItem wbp:name='item' size='100, 50'>",
+				"    <CoolItem.control>",
+				"      <Button/>",
+				"    </CoolItem.control>",
+				"  </CoolItem>",
+				"</CoolBar>");
+		XmlObjectInfo item = getObjectByName("item");
+		//
+		loadButton();
+		tree.moveOn(item);
+		tree.assertFeedback_on(item);
+		tree.assertCommandNull();
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/CoolBarTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/CoolBarTest.java
index 312ed77cb..cd4a5390b 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/CoolBarTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/CoolBarTest.java
@@ -34,244 +34,244 @@
  * @author scheglov_ke
  */
 public class CoolBarTest extends XwtModelTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link CoolBarInfo#isHorizontal()}.
-   */
-  public void test_isHorizontal() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <CoolBar wbp:name='toolBar_1'/>",
-        "  <CoolBar wbp:name='toolBar_2' x:Style='VERTICAL'/>",
-        "</Shell>");
-    refresh();
-    {
-      CoolBarInfo toolBar_1 = getObjectByName("toolBar_1");
-      assertTrue(toolBar_1.isHorizontal());
-      assertTrue(getFlowContainer(toolBar_1).isHorizontal());
-    }
-    {
-      CoolBarInfo toolBar_2 = getObjectByName("toolBar_2");
-      assertFalse(toolBar_2.isHorizontal());
-      assertFalse(getFlowContainer(toolBar_2).isHorizontal());
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link CoolBarInfo#isHorizontal()}.
+	 */
+	public void test_isHorizontal() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <CoolBar wbp:name='toolBar_1'/>",
+				"  <CoolBar wbp:name='toolBar_2' x:Style='VERTICAL'/>",
+				"</Shell>");
+		refresh();
+		{
+			CoolBarInfo toolBar_1 = getObjectByName("toolBar_1");
+			assertTrue(toolBar_1.isHorizontal());
+			assertTrue(getFlowContainer(toolBar_1).isHorizontal());
+		}
+		{
+			CoolBarInfo toolBar_2 = getObjectByName("toolBar_2");
+			assertFalse(toolBar_2.isHorizontal());
+			assertFalse(getFlowContainer(toolBar_2).isHorizontal());
+		}
+	}
 
-  /**
-   * {@link CoolBar} with {@link CoolItem}'s.
-   */
-  public void test_items_withSize() throws Exception {
-    CoolBarInfo toolBar =
-        parse(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<CoolBar>",
-            "  <CoolItem wbp:name='item_1' size='200, 50'/>",
-            "  <CoolItem wbp:name='item_2' size='100, 50'/>",
-            "</CoolBar>");
-    refresh();
-    // prepare
-    CoolItemInfo item_1 = getObjectByName("item_1");
-    CoolItemInfo item_2 = getObjectByName("item_2");
-    assertThat(toolBar.getItems()).containsExactly(item_1, item_2);
-    // item_1
-    {
-      // bounds
-      {
-        Rectangle modelBounds = item_1.getModelBounds();
-        assertEquals(new Rectangle(0, 0, 202, 50), modelBounds);
-      }
-      // no Control
-      Assertions.assertThat(item_1.getPresentation().getChildrenTree()).isEmpty();
-    }
-    // item_2
-    {
-      // bounds
-      {
-        Rectangle modelBounds = item_2.getModelBounds();
-        assertEquals(new Rectangle(202, 0, 248, 50), modelBounds);
-      }
-    }
-  }
+	/**
+	 * {@link CoolBar} with {@link CoolItem}'s.
+	 */
+	public void test_items_withSize() throws Exception {
+		CoolBarInfo toolBar =
+				parse(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<CoolBar>",
+						"  <CoolItem wbp:name='item_1' size='200, 50'/>",
+						"  <CoolItem wbp:name='item_2' size='100, 50'/>",
+						"</CoolBar>");
+		refresh();
+		// prepare
+		CoolItemInfo item_1 = getObjectByName("item_1");
+		CoolItemInfo item_2 = getObjectByName("item_2");
+		assertThat(toolBar.getItems()).containsExactly(item_1, item_2);
+		// item_1
+		{
+			// bounds
+			{
+				Rectangle modelBounds = item_1.getModelBounds();
+				assertEquals(new Rectangle(0, 0, 202, 50), modelBounds);
+			}
+			// no Control
+			Assertions.assertThat(item_1.getPresentation().getChildrenTree()).isEmpty();
+		}
+		// item_2
+		{
+			// bounds
+			{
+				Rectangle modelBounds = item_2.getModelBounds();
+				assertEquals(new Rectangle(202, 0, 248, 50), modelBounds);
+			}
+		}
+	}
 
-  /**
-   * {@link CoolBar} with {@link CoolItem}'s.
-   */
-  public void test_items_noSize() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<CoolBar>",
-        "  <CoolItem wbp:name='item_1'/>",
-        "  <CoolItem wbp:name='item_2'/>",
-        "</CoolBar>");
-    refresh();
-    CoolItemInfo item_1 = getObjectByName("item_1");
-    CoolItemInfo item_2 = getObjectByName("item_2");
-    // item_1
-    {
-      Rectangle modelBounds = item_1.getModelBounds();
-      assertEquals(new Rectangle(0, 0, 20, 25), modelBounds);
-    }
-    // item_2
-    {
-      Rectangle modelBounds = item_2.getModelBounds();
-      assertEquals(new Rectangle(20, 0, 430, 25), modelBounds);
-    }
-  }
+	/**
+	 * {@link CoolBar} with {@link CoolItem}'s.
+	 */
+	public void test_items_noSize() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<CoolBar>",
+				"  <CoolItem wbp:name='item_1'/>",
+				"  <CoolItem wbp:name='item_2'/>",
+				"</CoolBar>");
+		refresh();
+		CoolItemInfo item_1 = getObjectByName("item_1");
+		CoolItemInfo item_2 = getObjectByName("item_2");
+		// item_1
+		{
+			Rectangle modelBounds = item_1.getModelBounds();
+			assertEquals(new Rectangle(0, 0, 20, 25), modelBounds);
+		}
+		// item_2
+		{
+			Rectangle modelBounds = item_2.getModelBounds();
+			assertEquals(new Rectangle(20, 0, 430, 25), modelBounds);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Control
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_Control_isEmpty() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<CoolBar>",
-        "  <CoolItem wbp:name='item_2'/>",
-        "  <CoolItem wbp:name='item_3' size='100, 50'>",
-        "    <CoolItem.control>",
-        "      <Button wbp:name='button' text='My Button'/>",
-        "    </CoolItem.control>",
-        "  </CoolItem>",
-        "</CoolBar>");
-    refresh();
-    CoolItemInfo item_2 = getObjectByName("item_2");
-    CoolItemInfo item_3 = getObjectByName("item_3");
-    ControlInfo button = getObjectByName("button");
-    // empty
-    {
-      SimpleContainer simpleContainer = new SimpleContainerFactory(item_2, false).get().get(0);
-      assertTrue(simpleContainer.isEmpty());
-      Assertions.assertThat(item_2.getPresentation().getChildrenTree()).isEmpty();
-    }
-    // not empty
-    {
-      SimpleContainer simpleContainer = new SimpleContainerFactory(item_3, false).get().get(0);
-      assertFalse(simpleContainer.isEmpty());
-      Assertions.assertThat(item_3.getPresentation().getChildrenTree()).containsOnly(button);
-    }
-    // "button" bounds
-    {
-      Rectangle modelBounds = button.getModelBounds();
-      assertEquals(new Rectangle(11, 0, 419, 50), modelBounds);
-    }
-    {
-      Rectangle bounds = button.getBounds();
-      assertEquals(new Rectangle(11, 0, 419, 50), bounds);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Control
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_Control_isEmpty() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<CoolBar>",
+				"  <CoolItem wbp:name='item_2'/>",
+				"  <CoolItem wbp:name='item_3' size='100, 50'>",
+				"    <CoolItem.control>",
+				"      <Button wbp:name='button' text='My Button'/>",
+				"    </CoolItem.control>",
+				"  </CoolItem>",
+				"</CoolBar>");
+		refresh();
+		CoolItemInfo item_2 = getObjectByName("item_2");
+		CoolItemInfo item_3 = getObjectByName("item_3");
+		ControlInfo button = getObjectByName("button");
+		// empty
+		{
+			SimpleContainer simpleContainer = new SimpleContainerFactory(item_2, false).get().get(0);
+			assertTrue(simpleContainer.isEmpty());
+			Assertions.assertThat(item_2.getPresentation().getChildrenTree()).isEmpty();
+		}
+		// not empty
+		{
+			SimpleContainer simpleContainer = new SimpleContainerFactory(item_3, false).get().get(0);
+			assertFalse(simpleContainer.isEmpty());
+			Assertions.assertThat(item_3.getPresentation().getChildrenTree()).containsOnly(button);
+		}
+		// "button" bounds
+		{
+			Rectangle modelBounds = button.getModelBounds();
+			assertEquals(new Rectangle(11, 0, 419, 50), modelBounds);
+		}
+		{
+			Rectangle bounds = button.getBounds();
+			assertEquals(new Rectangle(11, 0, 419, 50), bounds);
+		}
+	}
 
-  public void test_Control_CREATE() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<CoolBar>",
-        "  <CoolItem wbp:name='item' x:Style='SEPARATOR' width='100'/>",
-        "</CoolBar>");
-    refresh();
-    CoolItemInfo item = getObjectByName("item");
-    // no control initially
-    Assertions.assertThat(item.getPresentation().getChildrenTree()).isEmpty();
-    // set Button on "item"
-    ControlInfo newButton = createButton();
-    simpleContainer_CREATE(item, newButton);
-    // check result
-    Assertions.assertThat(item.getPresentation().getChildrenTree()).containsExactly(newButton);
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<CoolBar>",
-        "  <CoolItem wbp:name='item' x:Style='SEPARATOR' width='100'>",
-        "    <CoolItem.control>",
-        "      <Button/>",
-        "    </CoolItem.control>",
-        "  </CoolItem>",
-        "</CoolBar>");
-  }
+	public void test_Control_CREATE() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<CoolBar>",
+				"  <CoolItem wbp:name='item' x:Style='SEPARATOR' width='100'/>",
+				"</CoolBar>");
+		refresh();
+		CoolItemInfo item = getObjectByName("item");
+		// no control initially
+		Assertions.assertThat(item.getPresentation().getChildrenTree()).isEmpty();
+		// set Button on "item"
+		ControlInfo newButton = createButton();
+		simpleContainer_CREATE(item, newButton);
+		// check result
+		Assertions.assertThat(item.getPresentation().getChildrenTree()).containsExactly(newButton);
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<CoolBar>",
+				"  <CoolItem wbp:name='item' x:Style='SEPARATOR' width='100'>",
+				"    <CoolItem.control>",
+				"      <Button/>",
+				"    </CoolItem.control>",
+				"  </CoolItem>",
+				"</CoolBar>");
+	}
 
-  public void test_Control_moveOut() throws Exception {
-    CompositeInfo shell =
-        parse(
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <FillLayout/>",
-            "  </Shell.layout>",
-            "  <CoolBar>",
-            "    <CoolItem x:Style='SEPARATOR' width='100'>",
-            "      <CoolItem.control>",
-            "        <Button wbp:name='button'/>",
-            "      </CoolItem.control>",
-            "    </CoolItem>",
-            "  </CoolBar>",
-            "</Shell>");
-    refresh();
-    ControlInfo button = getObjectByName("button");
-    // do move
-    flowContainer_MOVE(shell.getLayout(), button, null);
-    assertXML(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <CoolBar>",
-        "    <CoolItem x:Style='SEPARATOR' width='100'/>",
-        "  </CoolBar>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <FillLayout>",
-        "  <CoolBar>",
-        "    <CoolItem x:Style='SEPARATOR' width='100'>",
-        "  <Button wbp:name='button'>");
-  }
+	public void test_Control_moveOut() throws Exception {
+		CompositeInfo shell =
+				parse(
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <FillLayout/>",
+						"  </Shell.layout>",
+						"  <CoolBar>",
+						"    <CoolItem x:Style='SEPARATOR' width='100'>",
+						"      <CoolItem.control>",
+						"        <Button wbp:name='button'/>",
+						"      </CoolItem.control>",
+						"    </CoolItem>",
+						"  </CoolBar>",
+						"</Shell>");
+		refresh();
+		ControlInfo button = getObjectByName("button");
+		// do move
+		flowContainer_MOVE(shell.getLayout(), button, null);
+		assertXML(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <CoolBar>",
+				"    <CoolItem x:Style='SEPARATOR' width='100'/>",
+				"  </CoolBar>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <FillLayout>",
+				"  <CoolBar>",
+				"    <CoolItem x:Style='SEPARATOR' width='100'>",
+				"  <Button wbp:name='button'>");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_CREATE() throws Exception {
-    CoolBarInfo coolBar = parse("<CoolBar/>");
-    refresh();
-    // add item
-    {
-      CoolItemInfo newItem = createObject("org.eclipse.swt.widgets.CoolItem", null);
-      flowContainer_CREATE(coolBar, newItem, null);
-    }
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<CoolBar>",
-        "  <CoolItem/>",
-        "</CoolBar>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_CREATE() throws Exception {
+		CoolBarInfo coolBar = parse("<CoolBar/>");
+		refresh();
+		// add item
+		{
+			CoolItemInfo newItem = createObject("org.eclipse.swt.widgets.CoolItem", null);
+			flowContainer_CREATE(coolBar, newItem, null);
+		}
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<CoolBar>",
+				"  <CoolItem/>",
+				"</CoolBar>");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static FlowContainer getFlowContainer(CoolBarInfo toolBar) {
-    return new FlowContainerFactory(toolBar, true).get().get(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static FlowContainer getFlowContainer(CoolBarInfo toolBar) {
+		return new FlowContainerFactory(toolBar, true).get().get(0);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/DragSourceGefTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/DragSourceGefTest.java
index 7d95c15d2..210bc427f 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/DragSourceGefTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/DragSourceGefTest.java
@@ -24,51 +24,51 @@
  * @author scheglov_ke
  */
 public class DragSourceGefTest extends XwtGefTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * We should have {@link EditPart} in tree and on canvas.
-   */
-  public void test_editParts() throws Exception {
-    openEditor(
-        "<Shell xmlns:p1='clr-namespace:org.eclipse.swt.dnd'>",
-        "  <p1:DragSource wbp:name='dragSource'/>",
-        "</Shell>");
-    DragSourceInfo dragSource = getObjectByName("dragSource");
-    // in tree
-    tree.assertNotNullEditPart(dragSource);
-    // on canvas
-    {
-      GraphicalEditPart editPart = canvas.getEditPart(dragSource);
-      assertNotNull(editPart);
-      assertEquals(new Rectangle(25, 5, 16, 16), editPart.getFigure().getBounds());
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * We should have {@link EditPart} in tree and on canvas.
+	 */
+	public void test_editParts() throws Exception {
+		openEditor(
+				"<Shell xmlns:p1='clr-namespace:org.eclipse.swt.dnd'>",
+				"  <p1:DragSource wbp:name='dragSource'/>",
+				"</Shell>");
+		DragSourceInfo dragSource = getObjectByName("dragSource");
+		// in tree
+		tree.assertNotNullEditPart(dragSource);
+		// on canvas
+		{
+			GraphicalEditPart editPart = canvas.getEditPart(dragSource);
+			assertNotNull(editPart);
+			assertEquals(new Rectangle(25, 5, 16, 16), editPart.getFigure().getBounds());
+		}
+	}
 
-  public void test_CREATE() throws Exception {
-    XmlObjectInfo shell = openEditor("<Shell/>");
-    //
-    DragSourceInfo dragSource = loadCreationTool("org.eclipse.swt.dnd.DragSource");
-    canvas.moveTo(shell, 0.5, 0.5);
-    canvas.assertFeedbacks(canvas.getTargetPredicate(shell));
-    canvas.click();
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell xmlns:p1='clr-namespace:org.eclipse.swt.dnd'>",
-        "  <p1:DragSource/>",
-        "</Shell>");
-    canvas.assertPrimarySelected(dragSource);
-  }
+	public void test_CREATE() throws Exception {
+		XmlObjectInfo shell = openEditor("<Shell/>");
+		//
+		DragSourceInfo dragSource = loadCreationTool("org.eclipse.swt.dnd.DragSource");
+		canvas.moveTo(shell, 0.5, 0.5);
+		canvas.assertFeedbacks(canvas.getTargetPredicate(shell));
+		canvas.click();
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell xmlns:p1='clr-namespace:org.eclipse.swt.dnd'>",
+				"  <p1:DragSource/>",
+				"</Shell>");
+		canvas.assertPrimarySelected(dragSource);
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/DragSourceTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/DragSourceTest.java
index 27c8956d9..b01143a7c 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/DragSourceTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/DragSourceTest.java
@@ -19,27 +19,27 @@
  * @author scheglov_ke
  */
 public class DragSourceTest extends XwtModelTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_0() throws Exception {
-    parse(
-        "<Shell xmlns:p1='clr-namespace:org.eclipse.swt.dnd'>",
-        "  <p1:DragSource wbp:name='dragSource'/>",
-        "</Shell>");
-    refresh();
-    DragSourceInfo dragSource = getObjectByName("dragSource");
-    assertNotNull(dragSource);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_0() throws Exception {
+		parse(
+				"<Shell xmlns:p1='clr-namespace:org.eclipse.swt.dnd'>",
+				"  <p1:DragSource wbp:name='dragSource'/>",
+				"</Shell>");
+		refresh();
+		DragSourceInfo dragSource = getObjectByName("dragSource");
+		assertNotNull(dragSource);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/DropTargetGefTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/DropTargetGefTest.java
index 08f4c0b8d..e9bd2bb1c 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/DropTargetGefTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/DropTargetGefTest.java
@@ -24,51 +24,51 @@
  * @author scheglov_ke
  */
 public class DropTargetGefTest extends XwtGefTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * We should have {@link EditPart} in tree and on canvas.
-   */
-  public void test_editParts() throws Exception {
-    openEditor(
-        "<Shell xmlns:p1='clr-namespace:org.eclipse.swt.dnd'>",
-        "  <p1:DropTarget wbp:name='dropTarget'/>",
-        "</Shell>");
-    DropTargetInfo dropTarget = getObjectByName("dropTarget");
-    // in tree
-    tree.assertNotNullEditPart(dropTarget);
-    // on canvas
-    {
-      GraphicalEditPart editPart = canvas.getEditPart(dropTarget);
-      assertNotNull(editPart);
-      assertEquals(new Rectangle(45, 5, 16, 16), editPart.getFigure().getBounds());
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * We should have {@link EditPart} in tree and on canvas.
+	 */
+	public void test_editParts() throws Exception {
+		openEditor(
+				"<Shell xmlns:p1='clr-namespace:org.eclipse.swt.dnd'>",
+				"  <p1:DropTarget wbp:name='dropTarget'/>",
+				"</Shell>");
+		DropTargetInfo dropTarget = getObjectByName("dropTarget");
+		// in tree
+		tree.assertNotNullEditPart(dropTarget);
+		// on canvas
+		{
+			GraphicalEditPart editPart = canvas.getEditPart(dropTarget);
+			assertNotNull(editPart);
+			assertEquals(new Rectangle(45, 5, 16, 16), editPart.getFigure().getBounds());
+		}
+	}
 
-  public void test_CREATE() throws Exception {
-    XmlObjectInfo shell = openEditor("<Shell/>");
-    //
-    DropTargetInfo dropTarget = loadCreationTool("org.eclipse.swt.dnd.DropTarget");
-    canvas.moveTo(shell, 0.5, 0.5);
-    canvas.assertFeedbacks(canvas.getTargetPredicate(shell));
-    canvas.click();
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell xmlns:p1='clr-namespace:org.eclipse.swt.dnd'>",
-        "  <p1:DropTarget/>",
-        "</Shell>");
-    canvas.assertPrimarySelected(dropTarget);
-  }
+	public void test_CREATE() throws Exception {
+		XmlObjectInfo shell = openEditor("<Shell/>");
+		//
+		DropTargetInfo dropTarget = loadCreationTool("org.eclipse.swt.dnd.DropTarget");
+		canvas.moveTo(shell, 0.5, 0.5);
+		canvas.assertFeedbacks(canvas.getTargetPredicate(shell));
+		canvas.click();
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell xmlns:p1='clr-namespace:org.eclipse.swt.dnd'>",
+				"  <p1:DropTarget/>",
+				"</Shell>");
+		canvas.assertPrimarySelected(dropTarget);
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/DropTargetTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/DropTargetTest.java
index 34ed34fdd..cfee58780 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/DropTargetTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/DropTargetTest.java
@@ -19,27 +19,27 @@
  * @author scheglov_ke
  */
 public class DropTargetTest extends XwtModelTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_0() throws Exception {
-    parse(
-        "<Shell xmlns:p1='clr-namespace:org.eclipse.swt.dnd'>",
-        "  <p1:DropTarget wbp:name='dropTarget'/>",
-        "</Shell>");
-    refresh();
-    DropTargetInfo dropTarget = getObjectByName("dropTarget");
-    assertNotNull(dropTarget);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_0() throws Exception {
+		parse(
+				"<Shell xmlns:p1='clr-namespace:org.eclipse.swt.dnd'>",
+				"  <p1:DropTarget wbp:name='dropTarget'/>",
+				"</Shell>");
+		refresh();
+		DropTargetInfo dropTarget = getObjectByName("dropTarget");
+		assertNotNull(dropTarget);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/ExpandBarTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/ExpandBarTest.java
index 81492fe9a..e423ef5cd 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/ExpandBarTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/ExpandBarTest.java
@@ -35,278 +35,278 @@
  * @author scheglov_ke
  */
 public class ExpandBarTest extends XwtModelTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * {@link ExpandBar} with {@link ExpandItem}'s.
-   */
-  public void test_parseItems() throws Exception {
-    ExpandBarInfo expandBar =
-        parse(
-            "// filler filler filler filler filler",
-            "<ExpandBar>",
-            "  <ExpandItem wbp:name='item_1' text='000'/>",
-            "  <ExpandItem wbp:name='item_2' text='111' height='200' expanded='true'/>",
-            "</ExpandBar>");
-    refresh();
-    ExpandItemInfo item_1 = getObjectByName("item_1");
-    ExpandItemInfo item_2 = getObjectByName("item_2");
-    // check items
-    List<ExpandItemInfo> items = expandBar.getItems();
-    assertThat(items).containsExactly(item_1, item_2);
-    // text
-    assertEquals("000", ReflectionUtils.invokeMethod2(item_1.getObject(), "getText"));
-    assertEquals("111", ReflectionUtils.invokeMethod2(item_2.getObject(), "getText"));
-    // bounds for "item_1"
-    {
-      Rectangle modelBounds_1 = item_1.getModelBounds();
-      assertThat(modelBounds_1.width).isGreaterThan(440);
-      assertThat(modelBounds_1.height).isGreaterThan(20);
-    }
-    // bounds for "item_2"
-    {
-      Rectangle modelBounds_2 = item_2.getModelBounds();
-      assertThat(modelBounds_2.width).isGreaterThan(440);
-      assertThat(modelBounds_2.height).isGreaterThan(220);
-    }
-    // no Control
-    assertSame(null, item_1.getControl());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * {@link ExpandBar} with {@link ExpandItem}'s.
+	 */
+	public void test_parseItems() throws Exception {
+		ExpandBarInfo expandBar =
+				parse(
+						"// filler filler filler filler filler",
+						"<ExpandBar>",
+						"  <ExpandItem wbp:name='item_1' text='000'/>",
+						"  <ExpandItem wbp:name='item_2' text='111' height='200' expanded='true'/>",
+						"</ExpandBar>");
+		refresh();
+		ExpandItemInfo item_1 = getObjectByName("item_1");
+		ExpandItemInfo item_2 = getObjectByName("item_2");
+		// check items
+		List<ExpandItemInfo> items = expandBar.getItems();
+		assertThat(items).containsExactly(item_1, item_2);
+		// text
+		assertEquals("000", ReflectionUtils.invokeMethod2(item_1.getObject(), "getText"));
+		assertEquals("111", ReflectionUtils.invokeMethod2(item_2.getObject(), "getText"));
+		// bounds for "item_1"
+		{
+			Rectangle modelBounds_1 = item_1.getModelBounds();
+			assertThat(modelBounds_1.width).isGreaterThan(440);
+			assertThat(modelBounds_1.height).isGreaterThan(20);
+		}
+		// bounds for "item_2"
+		{
+			Rectangle modelBounds_2 = item_2.getModelBounds();
+			assertThat(modelBounds_2.width).isGreaterThan(440);
+			assertThat(modelBounds_2.height).isGreaterThan(220);
+		}
+		// no Control
+		assertSame(null, item_1.getControl());
+	}
 
-  /**
-   * We should show on design canvas only {@link ControlInfo}'s of expanded {@link ExpandItemInfo}
-   * 's.
-   */
-  public void test_presentationChildrenGraphical() throws Exception {
-    ExpandBarInfo expandBar =
-        parse(
-            "// filler filler filler filler filler",
-            "<ExpandBar>",
-            "  <ExpandItem wbp:name='item_1' expanded='true'>",
-            "    <button wbp:name='button_1'/>",
-            "  </ExpandItem>",
-            "  <ExpandItem wbp:name='item_2'>",
-            "    <button wbp:name='button_2'/>",
-            "  </ExpandItem>",
-            "</ExpandBar>");
-    refresh();
-    ExpandItemInfo item_1 = getObjectByName("item_1");
-    ExpandItemInfo item_2 = getObjectByName("item_2");
-    ControlInfo button_1 = getObjectByName("button_1");
-    ControlInfo button_2 = getObjectByName("button_2");
-    // "item_1" is expanded and "item_2" - not
-    assertEquals(true, item_1.getPropertyByTitle("expanded").getValue());
-    assertEquals(false, item_2.getPropertyByTitle("expanded").getValue());
-    // ...so, "button_1" is in graphical children and "button_2" is not
-    {
-      {
-        List<ObjectInfo> barChildren = expandBar.getPresentation().getChildrenGraphical();
-        Assertions.assertThat(barChildren).containsExactly(item_1, item_2);
-      }
-      // "item_1"
-      {
-        List<ObjectInfo> children_1 = item_1.getPresentation().getChildrenGraphical();
-        Assertions.assertThat(children_1).containsExactly(button_1);
-      }
-      {
-        List<ObjectInfo> children_1 = item_1.getPresentation().getChildrenTree();
-        Assertions.assertThat(children_1).containsExactly(button_1);
-      }
-      // "item_2"
-      {
-        List<ObjectInfo> children_2 = item_2.getPresentation().getChildrenGraphical();
-        Assertions.assertThat(children_2).isEmpty();
-      }
-      {
-        List<ObjectInfo> children_2 = item_2.getPresentation().getChildrenTree();
-        Assertions.assertThat(children_2).containsExactly(button_2);
-      }
-    }
-  }
+	/**
+	 * We should show on design canvas only {@link ControlInfo}'s of expanded {@link ExpandItemInfo}
+	 * 's.
+	 */
+	public void test_presentationChildrenGraphical() throws Exception {
+		ExpandBarInfo expandBar =
+				parse(
+						"// filler filler filler filler filler",
+						"<ExpandBar>",
+						"  <ExpandItem wbp:name='item_1' expanded='true'>",
+						"    <button wbp:name='button_1'/>",
+						"  </ExpandItem>",
+						"  <ExpandItem wbp:name='item_2'>",
+						"    <button wbp:name='button_2'/>",
+						"  </ExpandItem>",
+						"</ExpandBar>");
+		refresh();
+		ExpandItemInfo item_1 = getObjectByName("item_1");
+		ExpandItemInfo item_2 = getObjectByName("item_2");
+		ControlInfo button_1 = getObjectByName("button_1");
+		ControlInfo button_2 = getObjectByName("button_2");
+		// "item_1" is expanded and "item_2" - not
+		assertEquals(true, item_1.getPropertyByTitle("expanded").getValue());
+		assertEquals(false, item_2.getPropertyByTitle("expanded").getValue());
+		// ...so, "button_1" is in graphical children and "button_2" is not
+		{
+			{
+				List<ObjectInfo> barChildren = expandBar.getPresentation().getChildrenGraphical();
+				Assertions.assertThat(barChildren).containsExactly(item_1, item_2);
+			}
+			// "item_1"
+			{
+				List<ObjectInfo> children_1 = item_1.getPresentation().getChildrenGraphical();
+				Assertions.assertThat(children_1).containsExactly(button_1);
+			}
+			{
+				List<ObjectInfo> children_1 = item_1.getPresentation().getChildrenTree();
+				Assertions.assertThat(children_1).containsExactly(button_1);
+			}
+			// "item_2"
+			{
+				List<ObjectInfo> children_2 = item_2.getPresentation().getChildrenGraphical();
+				Assertions.assertThat(children_2).isEmpty();
+			}
+			{
+				List<ObjectInfo> children_2 = item_2.getPresentation().getChildrenTree();
+				Assertions.assertThat(children_2).containsExactly(button_2);
+			}
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Control
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for adding {@link ControlInfo} to {@link ExpandItemInfo}.
-   * <p>
-   * Note, that because of https://bugs.eclipse.org/bugs/show_bug.cgi?id=308061 value of "height" is
-   * replaced with preferred height of Control.
-   */
-  public void test_setControl_CREATE() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<ExpandBar>",
-        "  <ExpandItem wbp:name='item' height='200'/>",
-        "</ExpandBar>");
-    refresh();
-    ExpandItemInfo item = getObjectByName("item");
-    // no control initially
-    assertSame(null, item.getControl());
-    // set Button on "item"
-    ControlInfo newButton = createButton();
-    simpleContainer_CREATE(item, newButton);
-    // check result
-    assertSame(newButton, item.getControl());
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<ExpandBar>",
-        "  <ExpandItem wbp:name='item' height='200' expanded='true'>",
-        "    <ExpandItem.control>",
-        "      <Button/>",
-        "    </ExpandItem.control>",
-        "  </ExpandItem>",
-        "</ExpandBar>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Control
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for adding {@link ControlInfo} to {@link ExpandItemInfo}.
+	 * <p>
+	 * Note, that because of https://bugs.eclipse.org/bugs/show_bug.cgi?id=308061 value of "height" is
+	 * replaced with preferred height of Control.
+	 */
+	public void test_setControl_CREATE() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<ExpandBar>",
+				"  <ExpandItem wbp:name='item' height='200'/>",
+				"</ExpandBar>");
+		refresh();
+		ExpandItemInfo item = getObjectByName("item");
+		// no control initially
+		assertSame(null, item.getControl());
+		// set Button on "item"
+		ControlInfo newButton = createButton();
+		simpleContainer_CREATE(item, newButton);
+		// check result
+		assertSame(newButton, item.getControl());
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<ExpandBar>",
+				"  <ExpandItem wbp:name='item' height='200' expanded='true'>",
+				"    <ExpandItem.control>",
+				"      <Button/>",
+				"    </ExpandItem.control>",
+				"  </ExpandItem>",
+				"</ExpandBar>");
+	}
 
-  /**
-   * Test for moving {@link Control} on {@link ExpandItem}.
-   */
-  public void test_setControl_moveIn() throws Exception {
-    parse(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <ExpandBar>",
-        "    <ExpandItem wbp:name='item'/>",
-        "  </ExpandBar>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    refresh();
-    ExpandItemInfo item = getObjectByName("item");
-    ControlInfo button = getObjectByName("button");
-    // no control initially
-    assertSame(null, item.getControl());
-    // set Button on "item"
-    simpleContainer_ADD(item, button);
-    assertSame(button, item.getControl());
-    assertXML(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <ExpandBar>",
-        "    <ExpandItem wbp:name='item' expanded='true'>",
-        "      <ExpandItem.control>",
-        "        <Button wbp:name='button'/>",
-        "      </ExpandItem.control>",
-        "    </ExpandItem>",
-        "  </ExpandBar>",
-        "</Shell>");
-  }
+	/**
+	 * Test for moving {@link Control} on {@link ExpandItem}.
+	 */
+	public void test_setControl_moveIn() throws Exception {
+		parse(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <ExpandBar>",
+				"    <ExpandItem wbp:name='item'/>",
+				"  </ExpandBar>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		refresh();
+		ExpandItemInfo item = getObjectByName("item");
+		ControlInfo button = getObjectByName("button");
+		// no control initially
+		assertSame(null, item.getControl());
+		// set Button on "item"
+		simpleContainer_ADD(item, button);
+		assertSame(button, item.getControl());
+		assertXML(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <ExpandBar>",
+				"    <ExpandItem wbp:name='item' expanded='true'>",
+				"      <ExpandItem.control>",
+				"        <Button wbp:name='button'/>",
+				"      </ExpandItem.control>",
+				"    </ExpandItem>",
+				"  </ExpandBar>",
+				"</Shell>");
+	}
 
-  /**
-   * Test for moving {@link Control} from {@link ExpandItem}.
-   */
-  public void test_setControl_moveOut() throws Exception {
-    CompositeInfo shell =
-        parse(
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <FillLayout/>",
-            "  </Shell.layout>",
-            "  <ExpandBar>",
-            "    <ExpandItem wbp:name='item' expanded='true'>",
-            "      <ExpandItem.control>",
-            "        <Button wbp:name='button'/>",
-            "      </ExpandItem.control>",
-            "    </ExpandItem>",
-            "  </ExpandBar>",
-            "</Shell>");
-    refresh();
-    ExpandItemInfo item = getObjectByName("item");
-    ControlInfo button = getObjectByName("button");
-    // has control initially
-    assertSame(button, item.getControl());
-    // move "button" to "shell"
-    shell.getLayout().command_MOVE(button, null);
-    assertSame(null, item.getControl());
-    assertXML(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <ExpandBar>",
-        "    <ExpandItem wbp:name='item' expanded='true'/>",
-        "  </ExpandBar>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-  }
+	/**
+	 * Test for moving {@link Control} from {@link ExpandItem}.
+	 */
+	public void test_setControl_moveOut() throws Exception {
+		CompositeInfo shell =
+				parse(
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <FillLayout/>",
+						"  </Shell.layout>",
+						"  <ExpandBar>",
+						"    <ExpandItem wbp:name='item' expanded='true'>",
+						"      <ExpandItem.control>",
+						"        <Button wbp:name='button'/>",
+						"      </ExpandItem.control>",
+						"    </ExpandItem>",
+						"  </ExpandBar>",
+						"</Shell>");
+		refresh();
+		ExpandItemInfo item = getObjectByName("item");
+		ControlInfo button = getObjectByName("button");
+		// has control initially
+		assertSame(button, item.getControl());
+		// move "button" to "shell"
+		shell.getLayout().command_MOVE(button, null);
+		assertSame(null, item.getControl());
+		assertXML(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <ExpandBar>",
+				"    <ExpandItem wbp:name='item' expanded='true'/>",
+				"  </ExpandBar>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Create new {@link ExpandItem} on {@link ExpandBar}.
-   */
-  public void test_CREATE() throws Exception {
-    ExpandBarInfo expandBar =
-        parse(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<ExpandBar/>");
-    assertThat(expandBar.getItems()).isEmpty();
-    // add item
-    ExpandItemInfo newItem = createObject("org.eclipse.swt.widgets.ExpandItem");
-    flowContainer_CREATE(expandBar, newItem, null);
-    assertThat(expandBar.getItems()).containsExactly(newItem);
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<ExpandBar>",
-        "  <ExpandItem text='New ExpandItem'/>",
-        "</ExpandBar>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Create new {@link ExpandItem} on {@link ExpandBar}.
+	 */
+	public void test_CREATE() throws Exception {
+		ExpandBarInfo expandBar =
+				parse(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<ExpandBar/>");
+		assertThat(expandBar.getItems()).isEmpty();
+		// add item
+		ExpandItemInfo newItem = createObject("org.eclipse.swt.widgets.ExpandItem");
+		flowContainer_CREATE(expandBar, newItem, null);
+		assertThat(expandBar.getItems()).containsExactly(newItem);
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<ExpandBar>",
+				"  <ExpandItem text='New ExpandItem'/>",
+				"</ExpandBar>");
+	}
 
-  /**
-   * Test for moving {@link ExpandItemInfo}.
-   */
-  public void test_MOVE() throws Exception {
-    ExpandBarInfo expandBar =
-        parse(
-            "// filler filler filler filler filler",
-            "<ExpandBar>",
-            "  <ExpandItem wbp:name='item_1' expanded='true'>",
-            "    <button wbp:name='button_1'/>",
-            "  </ExpandItem>",
-            "  <ExpandItem wbp:name='item_2'>",
-            "    <button wbp:name='button_2'/>",
-            "  </ExpandItem>",
-            "</ExpandBar>");
-    refresh();
-    ExpandItemInfo item_1 = getObjectByName("item_1");
-    ExpandItemInfo item_2 = getObjectByName("item_2");
-    // move "item_2" before "item_1"
-    flowContainer_MOVE(expandBar, item_2, item_1);
-    assertXML(
-        "// filler filler filler filler filler",
-        "<ExpandBar>",
-        "  <ExpandItem wbp:name='item_2'>",
-        "    <button wbp:name='button_2'/>",
-        "  </ExpandItem>",
-        "  <ExpandItem wbp:name='item_1' expanded='true'>",
-        "    <button wbp:name='button_1'/>",
-        "  </ExpandItem>",
-        "</ExpandBar>");
-  }
+	/**
+	 * Test for moving {@link ExpandItemInfo}.
+	 */
+	public void test_MOVE() throws Exception {
+		ExpandBarInfo expandBar =
+				parse(
+						"// filler filler filler filler filler",
+						"<ExpandBar>",
+						"  <ExpandItem wbp:name='item_1' expanded='true'>",
+						"    <button wbp:name='button_1'/>",
+						"  </ExpandItem>",
+						"  <ExpandItem wbp:name='item_2'>",
+						"    <button wbp:name='button_2'/>",
+						"  </ExpandItem>",
+						"</ExpandBar>");
+		refresh();
+		ExpandItemInfo item_1 = getObjectByName("item_1");
+		ExpandItemInfo item_2 = getObjectByName("item_2");
+		// move "item_2" before "item_1"
+		flowContainer_MOVE(expandBar, item_2, item_1);
+		assertXML(
+				"// filler filler filler filler filler",
+				"<ExpandBar>",
+				"  <ExpandItem wbp:name='item_2'>",
+				"    <button wbp:name='button_2'/>",
+				"  </ExpandItem>",
+				"  <ExpandItem wbp:name='item_1' expanded='true'>",
+				"    <button wbp:name='button_1'/>",
+				"  </ExpandItem>",
+				"</ExpandBar>");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/ListTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/ListTest.java
index 203a5cbdf..406a14933 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/ListTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/ListTest.java
@@ -20,38 +20,38 @@
  * @author scheglov_ke
  */
 public class ListTest extends XwtModelTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_noModels_forItems() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell xmlns:p1='clr-namespace:java.lang'>",
-        "  <List wbp:name='widget'>",
-        "    <List.items>",
-        "      <p1:String>aaa</p1:String>",
-        "      <p1:String>bbb</p1:String>",
-        "      <p1:String>ccc</p1:String>",
-        "    </List.items>",
-        "  </List>",
-        "</Shell>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  implicit-layout: absolute",
-        "  <List wbp:name='widget'>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_noModels_forItems() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell xmlns:p1='clr-namespace:java.lang'>",
+				"  <List wbp:name='widget'>",
+				"    <List.items>",
+				"      <p1:String>aaa</p1:String>",
+				"      <p1:String>bbb</p1:String>",
+				"      <p1:String>ccc</p1:String>",
+				"    </List.items>",
+				"  </List>",
+				"</Shell>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  implicit-layout: absolute",
+				"  <List wbp:name='widget'>");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/SashFormGefTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/SashFormGefTest.java
index 763b99b76..47e1413a6 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/SashFormGefTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/SashFormGefTest.java
@@ -21,131 +21,131 @@
  * @author scheglov_ke
  */
 public class SashFormGefTest extends XwtGefTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Canvas
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_tree_CREATE_noNext() throws Exception {
-    CompositeInfo composite =
-        openEditor(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<SashForm>",
-            "</SashForm>");
-    //
-    loadButtonWithText();
-    tree.moveOn(composite).click();
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<SashForm weights='1'>",
-        "  <Button text='New Button'/>",
-        "</SashForm>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Canvas
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_tree_CREATE_noNext() throws Exception {
+		CompositeInfo composite =
+				openEditor(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<SashForm>",
+						"</SashForm>");
+		//
+		loadButtonWithText();
+		tree.moveOn(composite).click();
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<SashForm weights='1'>",
+				"  <Button text='New Button'/>",
+				"</SashForm>");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Canvas
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_canvas_CREATE_noNext() throws Exception {
-    CompositeInfo composite =
-        openEditor(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<SashForm>",
-            "</SashForm>");
-    //
-    loadButtonWithText();
-    canvas.moveTo(composite, 100, 100).click();
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<SashForm weights='1'>",
-        "  <Button text='New Button'/>",
-        "</SashForm>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Canvas
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_canvas_CREATE_noNext() throws Exception {
+		CompositeInfo composite =
+				openEditor(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<SashForm>",
+						"</SashForm>");
+		//
+		loadButtonWithText();
+		canvas.moveTo(composite, 100, 100).click();
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<SashForm weights='1'>",
+				"  <Button text='New Button'/>",
+				"</SashForm>");
+	}
 
-  public void test_canvas_CREATE_withNext() throws Exception {
-    openEditor(
-        "// filler filler filler filler filler",
-        "<SashForm weights='1'>",
-        "  <Button wbp:name='reference' text='Reference'/>",
-        "</SashForm>");
-    XmlObjectInfo reference = getObjectByName("reference");
-    //
-    loadButtonWithText();
-    canvas.moveTo(reference, 0, 0.5).click();
-    assertXML(
-        "// filler filler filler filler filler",
-        "<SashForm weights='1, 1'>",
-        "  <Button text='New Button'/>",
-        "  <Button wbp:name='reference' text='Reference'/>",
-        "</SashForm>");
-  }
+	public void test_canvas_CREATE_withNext() throws Exception {
+		openEditor(
+				"// filler filler filler filler filler",
+				"<SashForm weights='1'>",
+				"  <Button wbp:name='reference' text='Reference'/>",
+				"</SashForm>");
+		XmlObjectInfo reference = getObjectByName("reference");
+		//
+		loadButtonWithText();
+		canvas.moveTo(reference, 0, 0.5).click();
+		assertXML(
+				"// filler filler filler filler filler",
+				"<SashForm weights='1, 1'>",
+				"  <Button text='New Button'/>",
+				"  <Button wbp:name='reference' text='Reference'/>",
+				"</SashForm>");
+	}
 
-  public void test_canvas_MOVE_reorder() throws Exception {
-    openEditor(
-        "// filler filler filler filler filler",
-        "<SashForm weights='1, 2'>",
-        "  <Button wbp:name='reference' text='Reference'/>",
-        "  <Button wbp:name='button' text='Button'/>",
-        "</SashForm>");
-    XmlObjectInfo button = getObjectByName("button");
-    XmlObjectInfo reference = getObjectByName("reference");
-    //
-    canvas.beginMove(button);
-    canvas.dragTo(reference, 0, 0.5).endDrag();
-    assertXML(
-        "<SashForm weights='2, 1'>",
-        "  <Button wbp:name='button' text='Button'/>",
-        "  <Button wbp:name='reference' text='Reference'/>",
-        "</SashForm>");
-  }
+	public void test_canvas_MOVE_reorder() throws Exception {
+		openEditor(
+				"// filler filler filler filler filler",
+				"<SashForm weights='1, 2'>",
+				"  <Button wbp:name='reference' text='Reference'/>",
+				"  <Button wbp:name='button' text='Button'/>",
+				"</SashForm>");
+		XmlObjectInfo button = getObjectByName("button");
+		XmlObjectInfo reference = getObjectByName("reference");
+		//
+		canvas.beginMove(button);
+		canvas.dragTo(reference, 0, 0.5).endDrag();
+		assertXML(
+				"<SashForm weights='2, 1'>",
+				"  <Button wbp:name='button' text='Button'/>",
+				"  <Button wbp:name='reference' text='Reference'/>",
+				"</SashForm>");
+	}
 
-  public void test_canvas_RESIZE_horizontal() throws Exception {
-    openEditor(
-        "// filler filler filler filler filler",
-        "<SashForm weights='1, 1'>",
-        "  <Button wbp:name='buttonA' text='Button A'/>",
-        "  <Button wbp:name='buttonB' text='Button B'/>",
-        "</SashForm>");
-    XmlObjectInfo buttonA = getObjectByName("buttonA");
-    //
-    canvas.target(buttonA).outX(1).inY(0.5).move();
-    canvas.beginDrag().dragOn(-100, 0).endDrag();
-    assertXML(
-        "<SashForm weights='123, 324'>",
-        "  <Button wbp:name='buttonA' text='Button A'/>",
-        "  <Button wbp:name='buttonB' text='Button B'/>",
-        "</SashForm>");
-  }
+	public void test_canvas_RESIZE_horizontal() throws Exception {
+		openEditor(
+				"// filler filler filler filler filler",
+				"<SashForm weights='1, 1'>",
+				"  <Button wbp:name='buttonA' text='Button A'/>",
+				"  <Button wbp:name='buttonB' text='Button B'/>",
+				"</SashForm>");
+		XmlObjectInfo buttonA = getObjectByName("buttonA");
+		//
+		canvas.target(buttonA).outX(1).inY(0.5).move();
+		canvas.beginDrag().dragOn(-100, 0).endDrag();
+		assertXML(
+				"<SashForm weights='123, 324'>",
+				"  <Button wbp:name='buttonA' text='Button A'/>",
+				"  <Button wbp:name='buttonB' text='Button B'/>",
+				"</SashForm>");
+	}
 
-  public void test_canvas_RESIZE_vertical() throws Exception {
-    openEditor(
-        "// filler filler filler filler filler",
-        "<SashForm x:style='VERTICAL' weights='1, 1'>",
-        "  <Button wbp:name='buttonA' text='Button A'/>",
-        "  <Button wbp:name='buttonB' text='Button B'/>",
-        "</SashForm>");
-    XmlObjectInfo buttonA = getObjectByName("buttonA");
-    //
-    canvas.target(buttonA).outY(1).inX(0.5).move();
-    canvas.beginDrag().dragOn(0, 50).endDrag();
-    assertXML(
-        "<SashForm x:style='VERTICAL' weights='198, 99'>",
-        "  <Button wbp:name='buttonA' text='Button A'/>",
-        "  <Button wbp:name='buttonB' text='Button B'/>",
-        "</SashForm>");
-  }
+	public void test_canvas_RESIZE_vertical() throws Exception {
+		openEditor(
+				"// filler filler filler filler filler",
+				"<SashForm x:style='VERTICAL' weights='1, 1'>",
+				"  <Button wbp:name='buttonA' text='Button A'/>",
+				"  <Button wbp:name='buttonB' text='Button B'/>",
+				"</SashForm>");
+		XmlObjectInfo buttonA = getObjectByName("buttonA");
+		//
+		canvas.target(buttonA).outY(1).inX(0.5).move();
+		canvas.beginDrag().dragOn(0, 50).endDrag();
+		assertXML(
+				"<SashForm x:style='VERTICAL' weights='198, 99'>",
+				"  <Button wbp:name='buttonA' text='Button A'/>",
+				"  <Button wbp:name='buttonB' text='Button B'/>",
+				"</SashForm>");
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/SashFormTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/SashFormTest.java
index 361c83066..c460ae8e6 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/SashFormTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/SashFormTest.java
@@ -23,283 +23,283 @@
  * @author scheglov_ke
  */
 public class SashFormTest extends XwtModelTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // isHorizontal()
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link SashFormInfo#isHorizontal()}.
-   */
-  public void test_isHorizontal_true() throws Exception {
-    parse(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <SashForm wbp:name='sashForm'/>",
-        "</Shell>");
-    refresh();
-    SashFormInfo sashForm = getObjectByName("sashForm");
-    assertTrue(sashForm.isHorizontal());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// isHorizontal()
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link SashFormInfo#isHorizontal()}.
+	 */
+	public void test_isHorizontal_true() throws Exception {
+		parse(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <SashForm wbp:name='sashForm'/>",
+				"</Shell>");
+		refresh();
+		SashFormInfo sashForm = getObjectByName("sashForm");
+		assertTrue(sashForm.isHorizontal());
+	}
 
-  /**
-   * Test for {@link SashFormInfo#isHorizontal()}.
-   */
-  public void test_isHorizontal_false() throws Exception {
-    parse(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <SashForm wbp:name='sashForm' x:style='VERTICAL'/>",
-        "</Shell>");
-    refresh();
-    SashFormInfo sashForm = getObjectByName("sashForm");
-    assertFalse(sashForm.isHorizontal());
-  }
+	/**
+	 * Test for {@link SashFormInfo#isHorizontal()}.
+	 */
+	public void test_isHorizontal_false() throws Exception {
+		parse(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <SashForm wbp:name='sashForm' x:style='VERTICAL'/>",
+				"</Shell>");
+		refresh();
+		SashFormInfo sashForm = getObjectByName("sashForm");
+		assertFalse(sashForm.isHorizontal());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link SashFormInfo#command_CREATE(ControlInfo, ControlInfo)}.
-   * <p>
-   * No existing children yet.
-   */
-  public void test_CREATE_0() throws Exception {
-    parse(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <SashForm wbp:name='sashForm'/>",
-        "</Shell>");
-    refresh();
-    SashFormInfo sashForm = getObjectByName("sashForm");
-    //
-    ControlInfo button = createButton();
-    sashForm.command_CREATE(button, null);
-    assertXML(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <SashForm wbp:name='sashForm' weights='1'>",
-        "    <Button/>",
-        "  </SashForm>",
-        "</Shell>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link SashFormInfo#command_CREATE(ControlInfo, ControlInfo)}.
+	 * <p>
+	 * No existing children yet.
+	 */
+	public void test_CREATE_0() throws Exception {
+		parse(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <SashForm wbp:name='sashForm'/>",
+				"</Shell>");
+		refresh();
+		SashFormInfo sashForm = getObjectByName("sashForm");
+		//
+		ControlInfo button = createButton();
+		sashForm.command_CREATE(button, null);
+		assertXML(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <SashForm wbp:name='sashForm' weights='1'>",
+				"    <Button/>",
+				"  </SashForm>",
+				"</Shell>");
+	}
 
-  /**
-   * Test for {@link SashFormInfo#command_CREATE(ControlInfo, ControlInfo)}.
-   * <p>
-   * Two existing children with weights.
-   */
-  public void test_CREATE_2() throws Exception {
-    parse(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <SashForm wbp:name='sashForm' weights='2, 4'>",
-        "    <Button wbp:name='button_1'/>",
-        "    <Button wbp:name='button_2'/>",
-        "  </SashForm>",
-        "</Shell>");
-    refresh();
-    SashFormInfo sashForm = getObjectByName("sashForm");
-    ControlInfo button_2 = getObjectByName("button_2");
-    //
-    ControlInfo button = createButton();
-    sashForm.command_CREATE(button, button_2);
-    assertXML(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <SashForm wbp:name='sashForm' weights='2, 3, 4'>",
-        "    <Button wbp:name='button_1'/>",
-        "    <Button/>",
-        "    <Button wbp:name='button_2'/>",
-        "  </SashForm>",
-        "</Shell>");
-  }
+	/**
+	 * Test for {@link SashFormInfo#command_CREATE(ControlInfo, ControlInfo)}.
+	 * <p>
+	 * Two existing children with weights.
+	 */
+	public void test_CREATE_2() throws Exception {
+		parse(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <SashForm wbp:name='sashForm' weights='2, 4'>",
+				"    <Button wbp:name='button_1'/>",
+				"    <Button wbp:name='button_2'/>",
+				"  </SashForm>",
+				"</Shell>");
+		refresh();
+		SashFormInfo sashForm = getObjectByName("sashForm");
+		ControlInfo button_2 = getObjectByName("button_2");
+		//
+		ControlInfo button = createButton();
+		sashForm.command_CREATE(button, button_2);
+		assertXML(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <SashForm wbp:name='sashForm' weights='2, 3, 4'>",
+				"    <Button wbp:name='button_1'/>",
+				"    <Button/>",
+				"    <Button wbp:name='button_2'/>",
+				"  </SashForm>",
+				"</Shell>");
+	}
 
-  /**
-   * Test for {@link SashFormInfo#command_MOVE(ControlInfo, ControlInfo)}.
-   * <p>
-   * Two existing children with weights.
-   */
-  public void test_MOVE_inner() throws Exception {
-    parse(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <SashForm wbp:name='sashForm' weights='2, 4'>",
-        "    <Button wbp:name='button_1'/>",
-        "    <Button wbp:name='button_2'/>",
-        "  </SashForm>",
-        "</Shell>");
-    refresh();
-    SashFormInfo sashForm = getObjectByName("sashForm");
-    ControlInfo button_1 = getObjectByName("button_1");
-    ControlInfo button_2 = getObjectByName("button_2");
-    //
-    sashForm.command_MOVE(button_2, button_1);
-    assertXML(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <SashForm wbp:name='sashForm' weights='4, 2'>",
-        "    <Button wbp:name='button_2'/>",
-        "    <Button wbp:name='button_1'/>",
-        "  </SashForm>",
-        "</Shell>");
-  }
+	/**
+	 * Test for {@link SashFormInfo#command_MOVE(ControlInfo, ControlInfo)}.
+	 * <p>
+	 * Two existing children with weights.
+	 */
+	public void test_MOVE_inner() throws Exception {
+		parse(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <SashForm wbp:name='sashForm' weights='2, 4'>",
+				"    <Button wbp:name='button_1'/>",
+				"    <Button wbp:name='button_2'/>",
+				"  </SashForm>",
+				"</Shell>");
+		refresh();
+		SashFormInfo sashForm = getObjectByName("sashForm");
+		ControlInfo button_1 = getObjectByName("button_1");
+		ControlInfo button_2 = getObjectByName("button_2");
+		//
+		sashForm.command_MOVE(button_2, button_1);
+		assertXML(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <SashForm wbp:name='sashForm' weights='4, 2'>",
+				"    <Button wbp:name='button_2'/>",
+				"    <Button wbp:name='button_1'/>",
+				"  </SashForm>",
+				"</Shell>");
+	}
 
-  /**
-   * Test for {@link SashFormInfo#command_MOVE(ControlInfo, ControlInfo)}.
-   * <p>
-   * Move {@link ControlInfo} in.
-   */
-  public void test_MOVE_in() throws Exception {
-    parse(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <SashForm wbp:name='sashForm'>",
-        "    <Button wbp:name='button_1'/>",
-        "  </SashForm>",
-        "  <Button wbp:name='button_2'/>",
-        "</Shell>");
-    refresh();
-    SashFormInfo sashForm = getObjectByName("sashForm");
-    ControlInfo button_2 = getObjectByName("button_2");
-    //
-    sashForm.command_MOVE(button_2, null);
-    assertXML(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <SashForm wbp:name='sashForm' weights='1, 1'>",
-        "    <Button wbp:name='button_1'/>",
-        "    <Button wbp:name='button_2'/>",
-        "  </SashForm>",
-        "</Shell>");
-  }
+	/**
+	 * Test for {@link SashFormInfo#command_MOVE(ControlInfo, ControlInfo)}.
+	 * <p>
+	 * Move {@link ControlInfo} in.
+	 */
+	public void test_MOVE_in() throws Exception {
+		parse(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <SashForm wbp:name='sashForm'>",
+				"    <Button wbp:name='button_1'/>",
+				"  </SashForm>",
+				"  <Button wbp:name='button_2'/>",
+				"</Shell>");
+		refresh();
+		SashFormInfo sashForm = getObjectByName("sashForm");
+		ControlInfo button_2 = getObjectByName("button_2");
+		//
+		sashForm.command_MOVE(button_2, null);
+		assertXML(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <SashForm wbp:name='sashForm' weights='1, 1'>",
+				"    <Button wbp:name='button_1'/>",
+				"    <Button wbp:name='button_2'/>",
+				"  </SashForm>",
+				"</Shell>");
+	}
 
-  /**
-   * Test for {@link SashFormInfo#command_MOVE(ControlInfo, ControlInfo)}.
-   * <p>
-   * Move {@link ControlInfo} out.
-   */
-  public void test_MOVE_out() throws Exception {
-    CompositeInfo shell =
-        parse(
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <FillLayout/>",
-            "  </Shell.layout>",
-            "  <SashForm wbp:name='sashForm' weights='1, 2'>",
-            "    <Button wbp:name='button_1'/>",
-            "    <Button wbp:name='button_2'/>",
-            "  </SashForm>",
-            "</Shell>");
-    refresh();
-    ControlInfo button_2 = getObjectByName("button_2");
-    //
-    shell.getLayout().command_MOVE(button_2, null);
-    assertXML(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <SashForm wbp:name='sashForm' weights='1'>",
-        "    <Button wbp:name='button_1'/>",
-        "  </SashForm>",
-        "  <Button wbp:name='button_2'/>",
-        "</Shell>");
-  }
+	/**
+	 * Test for {@link SashFormInfo#command_MOVE(ControlInfo, ControlInfo)}.
+	 * <p>
+	 * Move {@link ControlInfo} out.
+	 */
+	public void test_MOVE_out() throws Exception {
+		CompositeInfo shell =
+				parse(
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <FillLayout/>",
+						"  </Shell.layout>",
+						"  <SashForm wbp:name='sashForm' weights='1, 2'>",
+						"    <Button wbp:name='button_1'/>",
+						"    <Button wbp:name='button_2'/>",
+						"  </SashForm>",
+						"</Shell>");
+		refresh();
+		ControlInfo button_2 = getObjectByName("button_2");
+		//
+		shell.getLayout().command_MOVE(button_2, null);
+		assertXML(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <SashForm wbp:name='sashForm' weights='1'>",
+				"    <Button wbp:name='button_1'/>",
+				"  </SashForm>",
+				"  <Button wbp:name='button_2'/>",
+				"</Shell>");
+	}
 
-  /**
-   * Delete child {@link ControlInfo}.
-   */
-  public void test_DELETE() throws Exception {
-    parse(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <SashForm wbp:name='sashForm' weights='1, 2'>",
-        "    <Button wbp:name='button_1'/>",
-        "    <Button wbp:name='button_2'/>",
-        "  </SashForm>",
-        "</Shell>");
-    refresh();
-    ControlInfo button_2 = getObjectByName("button_2");
-    //
-    button_2.delete();
-    assertXML(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <SashForm wbp:name='sashForm' weights='1'>",
-        "    <Button wbp:name='button_1'/>",
-        "  </SashForm>",
-        "</Shell>");
-  }
+	/**
+	 * Delete child {@link ControlInfo}.
+	 */
+	public void test_DELETE() throws Exception {
+		parse(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <SashForm wbp:name='sashForm' weights='1, 2'>",
+				"    <Button wbp:name='button_1'/>",
+				"    <Button wbp:name='button_2'/>",
+				"  </SashForm>",
+				"</Shell>");
+		refresh();
+		ControlInfo button_2 = getObjectByName("button_2");
+		//
+		button_2.delete();
+		assertXML(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <SashForm wbp:name='sashForm' weights='1'>",
+				"    <Button wbp:name='button_1'/>",
+				"  </SashForm>",
+				"</Shell>");
+	}
 
-  /**
-   * Test for {@link SashFormInfo#command_RESIZE(ControlInfo, int)}.
-   */
-  public void test_RESIZE() throws Exception {
-    parse(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <SashForm wbp:name='sashForm' weights='1, 2'>",
-        "    <Button wbp:name='button_1'/>",
-        "    <Button wbp:name='button_2'/>",
-        "  </SashForm>",
-        "</Shell>");
-    refresh();
-    SashFormInfo sashForm = getObjectByName("sashForm");
-    ControlInfo button_1 = getObjectByName("button_1");
-    //
-    sashForm.command_RESIZE(button_1, 150);
-    int expectedRightWeight =
-        Expectations.get(281, new IntValue[]{
-            new IntValue("flanker-win", 289),
-            new IntValue("kosta-home", 289),
-            new IntValue("scheglov-win", 281)});
-    assertXML(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <SashForm wbp:name='sashForm' weights='150, " + expectedRightWeight + "'>",
-        "    <Button wbp:name='button_1'/>",
-        "    <Button wbp:name='button_2'/>",
-        "  </SashForm>",
-        "</Shell>");
-  }
+	/**
+	 * Test for {@link SashFormInfo#command_RESIZE(ControlInfo, int)}.
+	 */
+	public void test_RESIZE() throws Exception {
+		parse(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <SashForm wbp:name='sashForm' weights='1, 2'>",
+				"    <Button wbp:name='button_1'/>",
+				"    <Button wbp:name='button_2'/>",
+				"  </SashForm>",
+				"</Shell>");
+		refresh();
+		SashFormInfo sashForm = getObjectByName("sashForm");
+		ControlInfo button_1 = getObjectByName("button_1");
+		//
+		sashForm.command_RESIZE(button_1, 150);
+		int expectedRightWeight =
+				Expectations.get(281, new IntValue[]{
+						new IntValue("flanker-win", 289),
+						new IntValue("kosta-home", 289),
+						new IntValue("scheglov-win", 281)});
+		assertXML(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <SashForm wbp:name='sashForm' weights='150, " + expectedRightWeight + "'>",
+				"    <Button wbp:name='button_1'/>",
+				"    <Button wbp:name='button_2'/>",
+				"  </SashForm>",
+				"</Shell>");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/TabFolderGefTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/TabFolderGefTest.java
index 9c9cc0d95..faa915632 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/TabFolderGefTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/TabFolderGefTest.java
@@ -22,39 +22,39 @@
  * @author scheglov_ke
  */
 public class TabFolderGefTest extends XwtGefTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * We should be able to select {@link TabItem} using double click.
-   */
-  public void test_canvas_selectItem() throws Exception {
-    TabFolderInfo folder =
-        openEditor(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<TabFolder>",
-            "  <TabItem wbp:name='item_1'/>",
-            "  <TabItem wbp:name='item_2'/>",
-            "</TabFolder>");
-    refresh();
-    TabItemInfo item_1 = getObjectByName("item_1");
-    TabItemInfo item_2 = getObjectByName("item_2");
-    // initially "item_1" is selected
-    assertSame(item_1, folder.getSelectedItem());
-    // double click "item_2"
-    canvas.doubleClick(item_2);
-    assertSame(item_2, folder.getSelectedItem());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * We should be able to select {@link TabItem} using double click.
+	 */
+	public void test_canvas_selectItem() throws Exception {
+		TabFolderInfo folder =
+				openEditor(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<TabFolder>",
+						"  <TabItem wbp:name='item_1'/>",
+						"  <TabItem wbp:name='item_2'/>",
+						"</TabFolder>");
+		refresh();
+		TabItemInfo item_1 = getObjectByName("item_1");
+		TabItemInfo item_2 = getObjectByName("item_2");
+		// initially "item_1" is selected
+		assertSame(item_1, folder.getSelectedItem());
+		// double click "item_2"
+		canvas.doubleClick(item_2);
+		assertSame(item_2, folder.getSelectedItem());
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/TabFolderTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/TabFolderTest.java
index 5372f9826..993100a15 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/TabFolderTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/TabFolderTest.java
@@ -34,385 +34,385 @@
  * @author scheglov_ke
  */
 public class TabFolderTest extends XwtModelTest {
-  private static final Rectangle BOUNDS_EMPTY_ITEM = new Rectangle(2, 2, 48, 20);
-  private static final Rectangle BOUNDS_BUTTON = new Rectangle(4, 24, 442, 272);
+	private static final Rectangle BOUNDS_EMPTY_ITEM = new Rectangle(2, 2, 48, 20);
+	private static final Rectangle BOUNDS_BUTTON = new Rectangle(4, 24, 442, 272);
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parse
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_parse_noItem() throws Exception {
-    TabFolderInfo folder = parse("<TabFolder/>");
-    refresh();
-    assertThat(folder.getItems()).isEmpty();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parse
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_parse_noItem() throws Exception {
+		TabFolderInfo folder = parse("<TabFolder/>");
+		refresh();
+		assertThat(folder.getItems()).isEmpty();
+	}
 
-  public void test_parse_withItem_noControl() throws Exception {
-    TabFolderInfo folder =
-        parse(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<TabFolder>",
-            "  <TabItem wbp:name='item'/>",
-            "</TabFolder>");
-    refresh();
-    TabItemInfo item = getObjectByName("item");
-    // hierarchy
-    assertThat(folder.getItems()).containsExactly(item);
-    assertSame(null, item.getControl());
-    // presentation
-    {
-      IObjectPresentation presentation = folder.getPresentation();
-      assertThat(presentation.getChildrenTree()).containsExactly(item);
-      assertThat(presentation.getChildrenGraphical()).containsExactly(item);
-    }
-  }
+	public void test_parse_withItem_noControl() throws Exception {
+		TabFolderInfo folder =
+				parse(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<TabFolder>",
+						"  <TabItem wbp:name='item'/>",
+						"</TabFolder>");
+		refresh();
+		TabItemInfo item = getObjectByName("item");
+		// hierarchy
+		assertThat(folder.getItems()).containsExactly(item);
+		assertSame(null, item.getControl());
+		// presentation
+		{
+			IObjectPresentation presentation = folder.getPresentation();
+			assertThat(presentation.getChildrenTree()).containsExactly(item);
+			assertThat(presentation.getChildrenGraphical()).containsExactly(item);
+		}
+	}
 
-  public void test_parse_withItem_withControl() throws Exception {
-    TabFolderInfo folder =
-        parse(
-            "<TabFolder>",
-            "  <TabItem wbp:name='item'>",
-            "    <TabItem.control>",
-            "      <Button wbp:name='button'/>",
-            "    </TabItem.control>",
-            "  </TabItem>",
-            "</TabFolder>");
-    refresh();
-    TabItemInfo item = getObjectByName("item");
-    ControlInfo button = getObjectByName("button");
-    // hierarchy
-    assertThat(folder.getItems()).containsExactly(item);
-    assertSame(button, item.getControl());
-    // presentation "folder"
-    {
-      IObjectPresentation presentation = folder.getPresentation();
-      assertThat(presentation.getChildrenTree()).containsExactly(item);
-      assertThat(presentation.getChildrenGraphical()).containsExactly(item, button);
-    }
-    // presentation "item"
-    {
-      IObjectPresentation presentation = item.getPresentation();
-      assertThat(presentation.getChildrenTree()).containsExactly(button);
-      assertThat(presentation.getChildrenGraphical()).isEmpty();
-    }
-    // bounds
-    {
-      Rectangle bounds = item.getBounds();
-      assertEquals(BOUNDS_EMPTY_ITEM, bounds);
-    }
-    {
-      Rectangle bounds = button.getBounds();
-      assertEquals(BOUNDS_BUTTON, bounds);
-    }
-  }
+	public void test_parse_withItem_withControl() throws Exception {
+		TabFolderInfo folder =
+				parse(
+						"<TabFolder>",
+						"  <TabItem wbp:name='item'>",
+						"    <TabItem.control>",
+						"      <Button wbp:name='button'/>",
+						"    </TabItem.control>",
+						"  </TabItem>",
+						"</TabFolder>");
+		refresh();
+		TabItemInfo item = getObjectByName("item");
+		ControlInfo button = getObjectByName("button");
+		// hierarchy
+		assertThat(folder.getItems()).containsExactly(item);
+		assertSame(button, item.getControl());
+		// presentation "folder"
+		{
+			IObjectPresentation presentation = folder.getPresentation();
+			assertThat(presentation.getChildrenTree()).containsExactly(item);
+			assertThat(presentation.getChildrenGraphical()).containsExactly(item, button);
+		}
+		// presentation "item"
+		{
+			IObjectPresentation presentation = item.getPresentation();
+			assertThat(presentation.getChildrenTree()).containsExactly(button);
+			assertThat(presentation.getChildrenGraphical()).isEmpty();
+		}
+		// bounds
+		{
+			Rectangle bounds = item.getBounds();
+			assertEquals(BOUNDS_EMPTY_ITEM, bounds);
+		}
+		{
+			Rectangle bounds = button.getBounds();
+			assertEquals(BOUNDS_BUTTON, bounds);
+		}
+	}
 
-  public void test_parse_withItems_withControls() throws Exception {
-    TabFolderInfo folder =
-        parse(
-            "<TabFolder>",
-            "  <TabItem wbp:name='item_1'>",
-            "    <TabItem.control>",
-            "      <Button wbp:name='button_1'/>",
-            "    </TabItem.control>",
-            "  </TabItem>",
-            "  <TabItem wbp:name='item_2'>",
-            "    <TabItem.control>",
-            "      <Button wbp:name='button_2'/>",
-            "    </TabItem.control>",
-            "  </TabItem>",
-            "</TabFolder>");
-    refresh();
-    TabItemInfo item_1 = getObjectByName("item_1");
-    TabItemInfo item_2 = getObjectByName("item_2");
-    ControlInfo button_1 = getObjectByName("button_1");
-    ControlInfo button_2 = getObjectByName("button_2");
-    // hierarchy
-    assertThat(folder.getItems()).containsExactly(item_1, item_2);
-    assertSame(button_1, item_1.getControl());
-    assertSame(button_2, item_2.getControl());
-    // presentation
-    {
-      IObjectPresentation presentation = folder.getPresentation();
-      {
-        List<ObjectInfo> children = presentation.getChildrenTree();
-        assertThat(children).containsExactly(item_1, item_2);
-      }
-      {
-        List<ObjectInfo> children = presentation.getChildrenGraphical();
-        assertThat(children).containsExactly(item_1, item_2, button_1);
-      }
-    }
-    // bounds
-    {
-      Rectangle bounds = item_1.getBounds();
-      assertEquals(BOUNDS_EMPTY_ITEM, bounds);
-    }
-    {
-      Rectangle bounds = button_1.getBounds();
-      assertEquals(BOUNDS_BUTTON, bounds);
-    }
-  }
+	public void test_parse_withItems_withControls() throws Exception {
+		TabFolderInfo folder =
+				parse(
+						"<TabFolder>",
+						"  <TabItem wbp:name='item_1'>",
+						"    <TabItem.control>",
+						"      <Button wbp:name='button_1'/>",
+						"    </TabItem.control>",
+						"  </TabItem>",
+						"  <TabItem wbp:name='item_2'>",
+						"    <TabItem.control>",
+						"      <Button wbp:name='button_2'/>",
+						"    </TabItem.control>",
+						"  </TabItem>",
+						"</TabFolder>");
+		refresh();
+		TabItemInfo item_1 = getObjectByName("item_1");
+		TabItemInfo item_2 = getObjectByName("item_2");
+		ControlInfo button_1 = getObjectByName("button_1");
+		ControlInfo button_2 = getObjectByName("button_2");
+		// hierarchy
+		assertThat(folder.getItems()).containsExactly(item_1, item_2);
+		assertSame(button_1, item_1.getControl());
+		assertSame(button_2, item_2.getControl());
+		// presentation
+		{
+			IObjectPresentation presentation = folder.getPresentation();
+			{
+				List<ObjectInfo> children = presentation.getChildrenTree();
+				assertThat(children).containsExactly(item_1, item_2);
+			}
+			{
+				List<ObjectInfo> children = presentation.getChildrenGraphical();
+				assertThat(children).containsExactly(item_1, item_2, button_1);
+			}
+		}
+		// bounds
+		{
+			Rectangle bounds = item_1.getBounds();
+			assertEquals(BOUNDS_EMPTY_ITEM, bounds);
+		}
+		{
+			Rectangle bounds = button_1.getBounds();
+			assertEquals(BOUNDS_BUTTON, bounds);
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link TabItemInfo#doSelect()}.
-   */
-  public void test_doSelect() throws Exception {
-    TabFolderInfo folder =
-        parse(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<TabFolder>",
-            "  <TabItem wbp:name='item_1'/>",
-            "  <TabItem wbp:name='item_2'/>",
-            "</TabFolder>");
-    refresh();
-    TabItemInfo item_1 = getObjectByName("item_1");
-    TabItemInfo item_2 = getObjectByName("item_2");
-    // initially "item_1" selected
-    assertSame(item_1, folder.getSelectedItem());
-    // select "item_2"
-    item_2.doSelect();
-    assertSame(item_2, folder.getSelectedItem());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link TabItemInfo#doSelect()}.
+	 */
+	public void test_doSelect() throws Exception {
+		TabFolderInfo folder =
+				parse(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<TabFolder>",
+						"  <TabItem wbp:name='item_1'/>",
+						"  <TabItem wbp:name='item_2'/>",
+						"</TabFolder>");
+		refresh();
+		TabItemInfo item_1 = getObjectByName("item_1");
+		TabItemInfo item_2 = getObjectByName("item_2");
+		// initially "item_1" selected
+		assertSame(item_1, folder.getSelectedItem());
+		// select "item_2"
+		item_2.doSelect();
+		assertSame(item_2, folder.getSelectedItem());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands for items
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_item_CREATE() throws Exception {
-    TabFolderInfo folder =
-        parse(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<TabFolder/>");
-    refresh();
-    //
-    TabItemInfo newItem = createObject("org.eclipse.swt.widgets.TabItem");
-    FlowContainer flowContainer = new FlowContainerFactory(folder, true).get().get(0);
-    flowContainer.command_CREATE(newItem, null);
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<TabFolder>",
-        "  <TabItem text='New Item'/>",
-        "</TabFolder>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands for items
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_item_CREATE() throws Exception {
+		TabFolderInfo folder =
+				parse(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<TabFolder/>");
+		refresh();
+		//
+		TabItemInfo newItem = createObject("org.eclipse.swt.widgets.TabItem");
+		FlowContainer flowContainer = new FlowContainerFactory(folder, true).get().get(0);
+		flowContainer.command_CREATE(newItem, null);
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<TabFolder>",
+				"  <TabItem text='New Item'/>",
+				"</TabFolder>");
+	}
 
-  public void test_item_MOVE() throws Exception {
-    TabFolderInfo folder =
-        parse(
-            "<TabFolder>",
-            "  <TabItem wbp:name='item_1'>",
-            "    <TabItem.control>",
-            "      <Button wbp:name='button_1'/>",
-            "    </TabItem.control>",
-            "  </TabItem>",
-            "  <TabItem wbp:name='item_2'>",
-            "    <TabItem.control>",
-            "      <Button wbp:name='button_2'/>",
-            "    </TabItem.control>",
-            "  </TabItem>",
-            "</TabFolder>");
-    refresh();
-    TabItemInfo item_1 = getObjectByName("item_1");
-    TabItemInfo item_2 = getObjectByName("item_2");
-    //
-    FlowContainer flowContainer = new FlowContainerFactory(folder, true).get().get(0);
-    flowContainer.command_MOVE(item_2, item_1);
-    assertXML(
-        "<TabFolder>",
-        "  <TabItem wbp:name='item_2'>",
-        "    <TabItem.control>",
-        "      <Button wbp:name='button_2'/>",
-        "    </TabItem.control>",
-        "  </TabItem>",
-        "  <TabItem wbp:name='item_1'>",
-        "    <TabItem.control>",
-        "      <Button wbp:name='button_1'/>",
-        "    </TabItem.control>",
-        "  </TabItem>",
-        "</TabFolder>");
-  }
+	public void test_item_MOVE() throws Exception {
+		TabFolderInfo folder =
+				parse(
+						"<TabFolder>",
+						"  <TabItem wbp:name='item_1'>",
+						"    <TabItem.control>",
+						"      <Button wbp:name='button_1'/>",
+						"    </TabItem.control>",
+						"  </TabItem>",
+						"  <TabItem wbp:name='item_2'>",
+						"    <TabItem.control>",
+						"      <Button wbp:name='button_2'/>",
+						"    </TabItem.control>",
+						"  </TabItem>",
+						"</TabFolder>");
+		refresh();
+		TabItemInfo item_1 = getObjectByName("item_1");
+		TabItemInfo item_2 = getObjectByName("item_2");
+		//
+		FlowContainer flowContainer = new FlowContainerFactory(folder, true).get().get(0);
+		flowContainer.command_MOVE(item_2, item_1);
+		assertXML(
+				"<TabFolder>",
+				"  <TabItem wbp:name='item_2'>",
+				"    <TabItem.control>",
+				"      <Button wbp:name='button_2'/>",
+				"    </TabItem.control>",
+				"  </TabItem>",
+				"  <TabItem wbp:name='item_1'>",
+				"    <TabItem.control>",
+				"      <Button wbp:name='button_1'/>",
+				"    </TabItem.control>",
+				"  </TabItem>",
+				"</TabFolder>");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands for controls
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_control_CREATE_onItem() throws Exception {
-    TabFolderInfo folder =
-        parse(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<TabFolder>",
-            "  <TabItem wbp:name='otherItem'/>",
-            "  <TabItem wbp:name='item'/>",
-            "</TabFolder>");
-    refresh();
-    TabItemInfo item = getObjectByName("item");
-    // initially "otherItem" is selected
-    {
-      TabItemInfo otherItem = getObjectByName("otherItem");
-      assertSame(otherItem, folder.getSelectedItem());
-    }
-    //
-    ControlInfo newButton = createButton();
-    SimpleContainer simpleContainer = new SimpleContainerFactory(item, true).get().get(0);
-    simpleContainer.command_CREATE(newButton);
-    assertSame(item, folder.getSelectedItem());
-    assertXML(
-        "<TabFolder>",
-        "  <TabItem wbp:name='otherItem'/>",
-        "  <TabItem wbp:name='item'>",
-        "    <TabItem.control>",
-        "      <Button/>",
-        "    </TabItem.control>",
-        "  </TabItem>",
-        "</TabFolder>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands for controls
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_control_CREATE_onItem() throws Exception {
+		TabFolderInfo folder =
+				parse(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<TabFolder>",
+						"  <TabItem wbp:name='otherItem'/>",
+						"  <TabItem wbp:name='item'/>",
+						"</TabFolder>");
+		refresh();
+		TabItemInfo item = getObjectByName("item");
+		// initially "otherItem" is selected
+		{
+			TabItemInfo otherItem = getObjectByName("otherItem");
+			assertSame(otherItem, folder.getSelectedItem());
+		}
+		//
+		ControlInfo newButton = createButton();
+		SimpleContainer simpleContainer = new SimpleContainerFactory(item, true).get().get(0);
+		simpleContainer.command_CREATE(newButton);
+		assertSame(item, folder.getSelectedItem());
+		assertXML(
+				"<TabFolder>",
+				"  <TabItem wbp:name='otherItem'/>",
+				"  <TabItem wbp:name='item'>",
+				"    <TabItem.control>",
+				"      <Button/>",
+				"    </TabItem.control>",
+				"  </TabItem>",
+				"</TabFolder>");
+	}
 
-  public void test_control_ADD_onItem() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <TabFolder>",
-        "    <TabItem wbp:name='item'/>",
-        "  </TabFolder>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    refresh();
-    TabItemInfo item = getObjectByName("item");
-    XmlObjectInfo button = getObjectByName("button");
-    //
-    SimpleContainer simpleContainer = new SimpleContainerFactory(item, true).get().get(0);
-    simpleContainer.command_ADD(button);
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <TabFolder>",
-        "    <TabItem wbp:name='item'>",
-        "      <TabItem.control>",
-        "        <Button wbp:name='button'/>",
-        "      </TabItem.control>",
-        "    </TabItem>",
-        "  </TabFolder>",
-        "</Shell>");
-  }
+	public void test_control_ADD_onItem() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <TabFolder>",
+				"    <TabItem wbp:name='item'/>",
+				"  </TabFolder>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		refresh();
+		TabItemInfo item = getObjectByName("item");
+		XmlObjectInfo button = getObjectByName("button");
+		//
+		SimpleContainer simpleContainer = new SimpleContainerFactory(item, true).get().get(0);
+		simpleContainer.command_ADD(button);
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <TabFolder>",
+				"    <TabItem wbp:name='item'>",
+				"      <TabItem.control>",
+				"        <Button wbp:name='button'/>",
+				"      </TabItem.control>",
+				"    </TabItem>",
+				"  </TabFolder>",
+				"</Shell>");
+	}
 
-  public void test_control_CREATE_onFolder() throws Exception {
-    TabFolderInfo folder =
-        parse(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<TabFolder/>");
-    refresh();
-    //
-    ControlInfo newButton = createButtonWithText();
-    FlowContainer flowContainer = new FlowContainerFactory(folder, true).get().get(0);
-    flowContainer.command_CREATE(newButton, null);
-    assertXML(
-        "<TabFolder>",
-        "  <TabItem text='New Item'>",
-        "    <TabItem.control>",
-        "      <Button text='New Button'/>",
-        "    </TabItem.control>",
-        "  </TabItem>",
-        "</TabFolder>");
-  }
+	public void test_control_CREATE_onFolder() throws Exception {
+		TabFolderInfo folder =
+				parse(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<TabFolder/>");
+		refresh();
+		//
+		ControlInfo newButton = createButtonWithText();
+		FlowContainer flowContainer = new FlowContainerFactory(folder, true).get().get(0);
+		flowContainer.command_CREATE(newButton, null);
+		assertXML(
+				"<TabFolder>",
+				"  <TabItem text='New Item'>",
+				"    <TabItem.control>",
+				"      <Button text='New Button'/>",
+				"    </TabItem.control>",
+				"  </TabItem>",
+				"</TabFolder>");
+	}
 
-  public void test_control_ADD_onFolder() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <TabFolder wbp:name='folder'/>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    refresh();
-    TabFolderInfo folder = getObjectByName("folder");
-    XmlObjectInfo button = getObjectByName("button");
-    //
-    FlowContainer flowContainer = new FlowContainerFactory(folder, true).get().get(0);
-    flowContainer.command_MOVE(button, null);
-    assertXML(
-        "<Shell>",
-        "  <TabFolder wbp:name='folder'>",
-        "    <TabItem text='New Item'>",
-        "      <TabItem.control>",
-        "        <Button wbp:name='button'/>",
-        "      </TabItem.control>",
-        "    </TabItem>",
-        "  </TabFolder>",
-        "</Shell>");
-  }
+	public void test_control_ADD_onFolder() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <TabFolder wbp:name='folder'/>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		refresh();
+		TabFolderInfo folder = getObjectByName("folder");
+		XmlObjectInfo button = getObjectByName("button");
+		//
+		FlowContainer flowContainer = new FlowContainerFactory(folder, true).get().get(0);
+		flowContainer.command_MOVE(button, null);
+		assertXML(
+				"<Shell>",
+				"  <TabFolder wbp:name='folder'>",
+				"    <TabItem text='New Item'>",
+				"      <TabItem.control>",
+				"        <Button wbp:name='button'/>",
+				"      </TabItem.control>",
+				"    </TabItem>",
+				"  </TabFolder>",
+				"</Shell>");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Manage selected
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_manageSelected() throws Exception {
-    TabFolderInfo panel =
-        parse(
-            "<TabFolder>",
-            "  <TabItem wbp:name='item_1'>",
-            "    <TabItem.control>",
-            "      <Button wbp:name='button_1'/>",
-            "    </TabItem.control>",
-            "  </TabItem>",
-            "  <TabItem wbp:name='item_2'>",
-            "    <TabItem.control>",
-            "      <Button wbp:name='button_2'/>",
-            "    </TabItem.control>",
-            "  </TabItem>",
-            "</TabFolder>");
-    refresh();
-    TabItemInfo item_1 = getObjectByName("item_1");
-    TabItemInfo item_2 = getObjectByName("item_2");
-    ControlInfo button_1 = getObjectByName("button_1");
-    // initially "item_1" is selected
-    assertSelectedItem(panel, item_1);
-    // notify about "item_2"
-    {
-      boolean shouldRefresh = notifySelecting(item_2);
-      assertTrue(shouldRefresh);
-      panel.refresh();
-      // now "item_2" is selected
-      assertSelectedItem(panel, item_2);
-    }
-    // notify about "button_1"
-    {
-      boolean shouldRefresh = notifySelecting(button_1);
-      assertTrue(shouldRefresh);
-      panel.refresh();
-      // now "item_1" is selected
-      assertSelectedItem(panel, item_1);
-    }
-    // second notification about "item_1" does not cause refresh()
-    {
-      boolean shouldRefresh = notifySelecting(item_1);
-      assertFalse(shouldRefresh);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Manage selected
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_manageSelected() throws Exception {
+		TabFolderInfo panel =
+				parse(
+						"<TabFolder>",
+						"  <TabItem wbp:name='item_1'>",
+						"    <TabItem.control>",
+						"      <Button wbp:name='button_1'/>",
+						"    </TabItem.control>",
+						"  </TabItem>",
+						"  <TabItem wbp:name='item_2'>",
+						"    <TabItem.control>",
+						"      <Button wbp:name='button_2'/>",
+						"    </TabItem.control>",
+						"  </TabItem>",
+						"</TabFolder>");
+		refresh();
+		TabItemInfo item_1 = getObjectByName("item_1");
+		TabItemInfo item_2 = getObjectByName("item_2");
+		ControlInfo button_1 = getObjectByName("button_1");
+		// initially "item_1" is selected
+		assertSelectedItem(panel, item_1);
+		// notify about "item_2"
+		{
+			boolean shouldRefresh = notifySelecting(item_2);
+			assertTrue(shouldRefresh);
+			panel.refresh();
+			// now "item_2" is selected
+			assertSelectedItem(panel, item_2);
+		}
+		// notify about "button_1"
+		{
+			boolean shouldRefresh = notifySelecting(button_1);
+			assertTrue(shouldRefresh);
+			panel.refresh();
+			// now "item_1" is selected
+			assertSelectedItem(panel, item_1);
+		}
+		// second notification about "item_1" does not cause refresh()
+		{
+			boolean shouldRefresh = notifySelecting(item_1);
+			assertFalse(shouldRefresh);
+		}
+	}
 
-  private static void assertSelectedItem(TabFolderInfo folder, TabItemInfo expected)
-      throws Exception {
-    assertSame(expected, folder.getSelectedItem());
-  }
+	private static void assertSelectedItem(TabFolderInfo folder, TabItemInfo expected)
+			throws Exception {
+		assertSame(expected, folder.getSelectedItem());
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/TableGefTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/TableGefTest.java
index 4958c82de..8a3e3ae54 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/TableGefTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/TableGefTest.java
@@ -20,38 +20,38 @@
  * @author scheglov_ke
  */
 public class TableGefTest extends XwtGefTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Canvas
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_canvas_RESIZE_column() throws Exception {
-    openEditor(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Table headerVisible='true'>",
-        "    <TableColumn wbp:name='column' width='100'/>",
-        "  </Table>",
-        "</Shell>");
-    XmlObjectInfo column = getObjectByName("column");
-    //
-    canvas.target(column).outX(1).inY(0.5);
-    canvas.beginDrag().dragOn(50, 0).endDrag();
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Table headerVisible='true'>",
-        "    <TableColumn wbp:name='column' width='150'/>",
-        "  </Table>",
-        "</Shell>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Canvas
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_canvas_RESIZE_column() throws Exception {
+		openEditor(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Table headerVisible='true'>",
+				"    <TableColumn wbp:name='column' width='100'/>",
+				"  </Table>",
+				"</Shell>");
+		XmlObjectInfo column = getObjectByName("column");
+		//
+		canvas.target(column).outX(1).inY(0.5);
+		canvas.beginDrag().dragOn(50, 0).endDrag();
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Table headerVisible='true'>",
+				"    <TableColumn wbp:name='column' width='150'/>",
+				"  </Table>",
+				"</Shell>");
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/TableTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/TableTest.java
index ab20b04f8..1a276e1c3 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/TableTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/TableTest.java
@@ -35,298 +35,298 @@
  * @author scheglov_ke
  */
 public class TableTest extends XwtModelTest {
-  private static final int COLUMN_HEIGHT = 24;
+	private static final int COLUMN_HEIGHT = 24;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Items
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for parsing {@link TableItem} and bounds of {@link TableItemInfo}.
-   */
-  public void test_TableItem() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Table wbp:name='table'>",
-        "    <TableColumn width='100'/>",
-        "    <TableItem wbp:name='item_1'/>",
-        "    <TableItem wbp:name='item_2'/>",
-        "  </Table>",
-        "</Shell>");
-    refresh();
-    TableInfo table = getObjectByName("table");
-    // prepare items
-    List<TableItemInfo> items = table.getItems();
-    assertThat(items).hasSize(2);
-    assertEquals(2, items.size());
-    TableItemInfo item_1 = items.get(0);
-    TableItemInfo item_2 = items.get(1);
-    // check bounds
-    Insets tableInsets = table.getClientAreaInsets();
-    {
-      // "model" bounds
-      Rectangle modelBounds = item_1.getModelBounds();
-      assertNotNull(modelBounds);
-      assertEquals(0, modelBounds.x);
-      assertEquals(0, modelBounds.y);
-      assertEquals(table.getClientArea().width, modelBounds.width);
-      // "shot" bounds
-      Rectangle bounds = item_1.getBounds();
-      assertEquals(tableInsets.left, bounds.x);
-      assertEquals(tableInsets.top, bounds.y);
-      assertEquals(modelBounds.width, bounds.width);
-      assertEquals(modelBounds.height, bounds.height);
-    }
-    {
-      Rectangle modelBounds = item_2.getModelBounds();
-      assertEquals(0, modelBounds.x);
-      assertEquals(item_1.getModelBounds().bottom(), modelBounds.y);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Items
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for parsing {@link TableItem} and bounds of {@link TableItemInfo}.
+	 */
+	public void test_TableItem() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Table wbp:name='table'>",
+				"    <TableColumn width='100'/>",
+				"    <TableItem wbp:name='item_1'/>",
+				"    <TableItem wbp:name='item_2'/>",
+				"  </Table>",
+				"</Shell>");
+		refresh();
+		TableInfo table = getObjectByName("table");
+		// prepare items
+		List<TableItemInfo> items = table.getItems();
+		assertThat(items).hasSize(2);
+		assertEquals(2, items.size());
+		TableItemInfo item_1 = items.get(0);
+		TableItemInfo item_2 = items.get(1);
+		// check bounds
+		Insets tableInsets = table.getClientAreaInsets();
+		{
+			// "model" bounds
+			Rectangle modelBounds = item_1.getModelBounds();
+			assertNotNull(modelBounds);
+			assertEquals(0, modelBounds.x);
+			assertEquals(0, modelBounds.y);
+			assertEquals(table.getClientArea().width, modelBounds.width);
+			// "shot" bounds
+			Rectangle bounds = item_1.getBounds();
+			assertEquals(tableInsets.left, bounds.x);
+			assertEquals(tableInsets.top, bounds.y);
+			assertEquals(modelBounds.width, bounds.width);
+			assertEquals(modelBounds.height, bounds.height);
+		}
+		{
+			Rectangle modelBounds = item_2.getModelBounds();
+			assertEquals(0, modelBounds.x);
+			assertEquals(item_1.getModelBounds().bottom(), modelBounds.y);
+		}
+	}
 
-  /**
-   * If no {@link TableColumn}, then {@link TabItem} should have width of {@link Table}.
-   */
-  public void test_TableItem_whenNoColumns() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Table wbp:name='table'>",
-        "    <TableItem wbp:name='item'/>",
-        "  </Table>",
-        "</Shell>");
-    refresh();
-    TableInfo table = getObjectByName("table");
-    TableItemInfo item = getObjectByName("item");
-    // check bounds
-    Insets tableInsets = table.getClientAreaInsets();
-    {
-      // "model" bounds
-      Rectangle modelBounds = item.getModelBounds();
-      assertNotNull(modelBounds);
-      assertEquals(0, modelBounds.x);
-      assertEquals(0, modelBounds.y);
-      assertEquals(table.getClientArea().width, modelBounds.width);
-      // "shot" bounds
-      Rectangle bounds = item.getBounds();
-      assertEquals(tableInsets.left, bounds.x);
-      assertEquals(tableInsets.top, bounds.y);
-      assertEquals(modelBounds.width, bounds.width);
-      assertEquals(modelBounds.height, bounds.height);
-    }
-  }
+	/**
+	 * If no {@link TableColumn}, then {@link TabItem} should have width of {@link Table}.
+	 */
+	public void test_TableItem_whenNoColumns() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Table wbp:name='table'>",
+				"    <TableItem wbp:name='item'/>",
+				"  </Table>",
+				"</Shell>");
+		refresh();
+		TableInfo table = getObjectByName("table");
+		TableItemInfo item = getObjectByName("item");
+		// check bounds
+		Insets tableInsets = table.getClientAreaInsets();
+		{
+			// "model" bounds
+			Rectangle modelBounds = item.getModelBounds();
+			assertNotNull(modelBounds);
+			assertEquals(0, modelBounds.x);
+			assertEquals(0, modelBounds.y);
+			assertEquals(table.getClientArea().width, modelBounds.width);
+			// "shot" bounds
+			Rectangle bounds = item.getBounds();
+			assertEquals(tableInsets.left, bounds.x);
+			assertEquals(tableInsets.top, bounds.y);
+			assertEquals(modelBounds.width, bounds.width);
+			assertEquals(modelBounds.height, bounds.height);
+		}
+	}
 
-  public void test_add_TableItem() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Table wbp:name='table'/>",
-        "</Shell>");
-    refresh();
-    TableInfo table = getObjectByName("table");
-    // no items initially
-    assertThat(table.getItems()).isEmpty();
-    // add new TableItem
-    TableItemInfo newItem = createObject("org.eclipse.swt.widgets.TableItem");
-    flowContainer_CREATE(table, newItem, null);
-    // check result
-    assertThat(table.getItems()).containsExactly(newItem);
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Table wbp:name='table'>",
-        "    <TableItem text='New TableItem'/>",
-        "  </Table>",
-        "</Shell>");
-  }
+	public void test_add_TableItem() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Table wbp:name='table'/>",
+				"</Shell>");
+		refresh();
+		TableInfo table = getObjectByName("table");
+		// no items initially
+		assertThat(table.getItems()).isEmpty();
+		// add new TableItem
+		TableItemInfo newItem = createObject("org.eclipse.swt.widgets.TableItem");
+		flowContainer_CREATE(table, newItem, null);
+		// check result
+		assertThat(table.getItems()).containsExactly(newItem);
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Table wbp:name='table'>",
+				"    <TableItem text='New TableItem'/>",
+				"  </Table>",
+				"</Shell>");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Columns
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for parsing {@link TableColumn} and bounds of {@link TableColumnInfo}.
-   */
-  public void test_TableColumn() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Table wbp:name='table' headerVisible='true'>",
-        "    <TableColumn width='50'/>",
-        "    <TableColumn width='100'/>",
-        "  </Table>",
-        "</Shell>");
-    refresh();
-    TableInfo table = getObjectByName("table");
-    int aiLeft = table.getClientAreaInsets().left;
-    int aiTop = table.getClientAreaInsets().top;
-    // prepare columns
-    List<TableColumnInfo> columns = table.getColumns();
-    assertThat(columns).hasSize(2);
-    // check bounds
-    {
-      TableColumnInfo column_1 = columns.get(0);
-      assertEquals(new Rectangle(0, 0, 50, COLUMN_HEIGHT), column_1.getModelBounds());
-      assertEquals(new Rectangle(aiLeft, aiTop, 50, COLUMN_HEIGHT), column_1.getBounds());
-    }
-    {
-      TableColumnInfo column_2 = columns.get(1);
-      assertEquals(new Rectangle(50, 0, 100, COLUMN_HEIGHT), column_2.getModelBounds());
-      assertEquals(new Rectangle(aiLeft + 50, aiTop, 100, COLUMN_HEIGHT), column_2.getBounds());
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Columns
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for parsing {@link TableColumn} and bounds of {@link TableColumnInfo}.
+	 */
+	public void test_TableColumn() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Table wbp:name='table' headerVisible='true'>",
+				"    <TableColumn width='50'/>",
+				"    <TableColumn width='100'/>",
+				"  </Table>",
+				"</Shell>");
+		refresh();
+		TableInfo table = getObjectByName("table");
+		int aiLeft = table.getClientAreaInsets().left;
+		int aiTop = table.getClientAreaInsets().top;
+		// prepare columns
+		List<TableColumnInfo> columns = table.getColumns();
+		assertThat(columns).hasSize(2);
+		// check bounds
+		{
+			TableColumnInfo column_1 = columns.get(0);
+			assertEquals(new Rectangle(0, 0, 50, COLUMN_HEIGHT), column_1.getModelBounds());
+			assertEquals(new Rectangle(aiLeft, aiTop, 50, COLUMN_HEIGHT), column_1.getBounds());
+		}
+		{
+			TableColumnInfo column_2 = columns.get(1);
+			assertEquals(new Rectangle(50, 0, 100, COLUMN_HEIGHT), column_2.getModelBounds());
+			assertEquals(new Rectangle(aiLeft + 50, aiTop, 100, COLUMN_HEIGHT), column_2.getBounds());
+		}
+	}
 
-  public void test_TableColumn_setWidth() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Table headerVisible='true'>",
-        "    <TableColumn wbp:name='column' width='100'/>",
-        "  </Table>",
-        "</Shell>");
-    refresh();
-    TableColumnInfo column = getObjectByName("column");
-    Property widthProperty = column.getPropertyByTitle("width");
-    // check initial width
-    assertEquals(100, widthProperty.getValue());
-    // set new width
-    column.setWidth(120);
-    assertEquals(120, widthProperty.getValue());
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Table headerVisible='true'>",
-        "    <TableColumn wbp:name='column' width='120'/>",
-        "  </Table>",
-        "</Shell>");
-  }
+	public void test_TableColumn_setWidth() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Table headerVisible='true'>",
+				"    <TableColumn wbp:name='column' width='100'/>",
+				"  </Table>",
+				"</Shell>");
+		refresh();
+		TableColumnInfo column = getObjectByName("column");
+		Property widthProperty = column.getPropertyByTitle("width");
+		// check initial width
+		assertEquals(100, widthProperty.getValue());
+		// set new width
+		column.setWidth(120);
+		assertEquals(120, widthProperty.getValue());
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Table headerVisible='true'>",
+				"    <TableColumn wbp:name='column' width='120'/>",
+				"  </Table>",
+				"</Shell>");
+	}
 
-  public void test_add_TableColumn() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Table wbp:name='table'/>",
-        "</Shell>");
-    TableInfo table = getObjectByName("table");
-    // no columns initially
-    assertTrue(table.getColumns().isEmpty());
-    // add new TableColumn
-    TableColumnInfo newColumn = createObject("org.eclipse.swt.widgets.TableColumn");
-    flowContainer_CREATE(table, newColumn, null);
-    // check result
-    assertThat(table.getColumns()).containsExactly(newColumn);
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Table wbp:name='table'>",
-        "    <TableColumn text='New Column' width='100'/>",
-        "  </Table>",
-        "</Shell>");
-  }
+	public void test_add_TableColumn() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Table wbp:name='table'/>",
+				"</Shell>");
+		TableInfo table = getObjectByName("table");
+		// no columns initially
+		assertTrue(table.getColumns().isEmpty());
+		// add new TableColumn
+		TableColumnInfo newColumn = createObject("org.eclipse.swt.widgets.TableColumn");
+		flowContainer_CREATE(table, newColumn, null);
+		// check result
+		assertThat(table.getColumns()).containsExactly(newColumn);
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Table wbp:name='table'>",
+				"    <TableColumn text='New Column' width='100'/>",
+				"  </Table>",
+				"</Shell>");
+	}
 
-  public void test_move_TableColumn() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Table wbp:name='table'>",
-        "    <TableColumn text='columns 1'/>",
-        "    <TableColumn text='columns 2'/>",
-        "  </Table>",
-        "</Shell>");
-    TableInfo table = getObjectByName("table");
-    // prepare columns
-    List<TableColumnInfo> columns = table.getColumns();
-    assertThat(columns).hasSize(2);
-    TableColumnInfo column_1 = columns.get(0);
-    TableColumnInfo column_2 = columns.get(1);
-    // move column
-    flowContainer_MOVE(table, column_2, column_1);
-    // check result
-    assertThat(table.getColumns()).containsExactly(column_2, column_1);
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Table wbp:name='table'>",
-        "    <TableColumn text='columns 2'/>",
-        "    <TableColumn text='columns 1'/>",
-        "  </Table>",
-        "</Shell>");
-  }
+	public void test_move_TableColumn() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Table wbp:name='table'>",
+				"    <TableColumn text='columns 1'/>",
+				"    <TableColumn text='columns 2'/>",
+				"  </Table>",
+				"</Shell>");
+		TableInfo table = getObjectByName("table");
+		// prepare columns
+		List<TableColumnInfo> columns = table.getColumns();
+		assertThat(columns).hasSize(2);
+		TableColumnInfo column_1 = columns.get(0);
+		TableColumnInfo column_2 = columns.get(1);
+		// move column
+		flowContainer_MOVE(table, column_2, column_1);
+		// check result
+		assertThat(table.getColumns()).containsExactly(column_2, column_1);
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Table wbp:name='table'>",
+				"    <TableColumn text='columns 2'/>",
+				"    <TableColumn text='columns 1'/>",
+				"  </Table>",
+				"</Shell>");
+	}
 
-  public void test_reparent_TableColumn() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Table wbp:name='table_1'>",
-        "    <TableColumn wbp:name='column_1'/>",
-        "  </Table>",
-        "  <Table wbp:name='table_2'>",
-        "    <TableColumn wbp:name='column_2'/>",
-        "  </Table>",
-        "</Shell>");
-    TableInfo table_2 = getObjectByName("table_2");
-    TableColumnInfo column_1 = getObjectByName("column_1");
-    TableColumnInfo column_2 = getObjectByName("column_2");
-    // move column_1 before column_2
-    flowContainer_MOVE(table_2, column_1, column_2);
-    // check result
-    assertThat(table_2.getColumns()).containsExactly(column_1, column_2);
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Table wbp:name='table_1'/>",
-        "  <Table wbp:name='table_2'>",
-        "    <TableColumn wbp:name='column_1'/>",
-        "    <TableColumn wbp:name='column_2'/>",
-        "  </Table>",
-        "</Shell>");
-  }
+	public void test_reparent_TableColumn() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Table wbp:name='table_1'>",
+				"    <TableColumn wbp:name='column_1'/>",
+				"  </Table>",
+				"  <Table wbp:name='table_2'>",
+				"    <TableColumn wbp:name='column_2'/>",
+				"  </Table>",
+				"</Shell>");
+		TableInfo table_2 = getObjectByName("table_2");
+		TableColumnInfo column_1 = getObjectByName("column_1");
+		TableColumnInfo column_2 = getObjectByName("column_2");
+		// move column_1 before column_2
+		flowContainer_MOVE(table_2, column_1, column_2);
+		// check result
+		assertThat(table_2.getColumns()).containsExactly(column_1, column_2);
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Table wbp:name='table_1'/>",
+				"  <Table wbp:name='table_2'>",
+				"    <TableColumn wbp:name='column_1'/>",
+				"    <TableColumn wbp:name='column_2'/>",
+				"  </Table>",
+				"</Shell>");
+	}
 
-  public void test_clipboard() throws Exception {
-    CompositeInfo shell =
-        parse(
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Table wbp:name='table'>",
-            "    <TableColumn text='columns 1'/>",
-            "    <TableColumn text='columns 2'/>",
-            "  </Table>",
-            "</Shell>");
-    refresh();
-    TableInfo table = getObjectByName("table");
-    // do copy/paste
-    {
-      XmlObjectMemento memento = XmlObjectMemento.createMemento(table);
-      TableInfo newTable = (TableInfo) memento.create(shell);
-      shell.getLayout().command_CREATE(newTable, null);
-      XmlObjectMemento.apply(newTable);
-    }
-    assertXML(
-        "<Shell>",
-        "  <Table wbp:name='table'>",
-        "    <TableColumn text='columns 1'/>",
-        "    <TableColumn text='columns 2'/>",
-        "  </Table>",
-        "  <Table>",
-        "    <TableColumn text='columns 1'/>",
-        "    <TableColumn text='columns 2'/>",
-        "  </Table>",
-        "</Shell>");
-  }
+	public void test_clipboard() throws Exception {
+		CompositeInfo shell =
+				parse(
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Table wbp:name='table'>",
+						"    <TableColumn text='columns 1'/>",
+						"    <TableColumn text='columns 2'/>",
+						"  </Table>",
+						"</Shell>");
+		refresh();
+		TableInfo table = getObjectByName("table");
+		// do copy/paste
+		{
+			XmlObjectMemento memento = XmlObjectMemento.createMemento(table);
+			TableInfo newTable = (TableInfo) memento.create(shell);
+			shell.getLayout().command_CREATE(newTable, null);
+			XmlObjectMemento.apply(newTable);
+		}
+		assertXML(
+				"<Shell>",
+				"  <Table wbp:name='table'>",
+				"    <TableColumn text='columns 1'/>",
+				"    <TableColumn text='columns 2'/>",
+				"  </Table>",
+				"  <Table>",
+				"    <TableColumn text='columns 1'/>",
+				"    <TableColumn text='columns 2'/>",
+				"  </Table>",
+				"</Shell>");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/ToolBarGefTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/ToolBarGefTest.java
index 10929308e..a96f61ac1 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/ToolBarGefTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/ToolBarGefTest.java
@@ -20,165 +20,165 @@
  * @author scheglov_ke
  */
 public class ToolBarGefTest extends XwtGefTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Canvas
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_canvas_CREATE_item() throws Exception {
-    ToolBarInfo toolBar = openEditor("<ToolBar/>");
-    //
-    loadCreationTool("org.eclipse.swt.widgets.ToolItem");
-    canvas.moveTo(toolBar, 5, 5);
-    canvas.click();
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<ToolBar>",
-        "  <ToolItem text='New Item'/>",
-        "</ToolBar>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Canvas
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_canvas_CREATE_item() throws Exception {
+		ToolBarInfo toolBar = openEditor("<ToolBar/>");
+		//
+		loadCreationTool("org.eclipse.swt.widgets.ToolItem");
+		canvas.moveTo(toolBar, 5, 5);
+		canvas.click();
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<ToolBar>",
+				"  <ToolItem text='New Item'/>",
+				"</ToolBar>");
+	}
 
-  public void test_canvas_CREATE_control_good() throws Exception {
-    openEditor(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<ToolBar>",
-        "  <ToolItem wbp:name='item' x:Style='SEPARATOR' width='100'/>",
-        "</ToolBar>");
-    XmlObjectInfo item = getObjectByName("item");
-    //
-    loadButton();
-    canvas.moveTo(item, 5, 5);
-    canvas.assertFeedbacks(canvas.getTargetPredicate(item));
-    canvas.assertCommandNotNull();
-    canvas.click();
-    assertXML(
-        "// filler filler filler filler filler",
-        "<ToolBar>",
-        "  <ToolItem wbp:name='item' x:Style='SEPARATOR' width='100'>",
-        "    <ToolItem.control>",
-        "      <Button/>",
-        "    </ToolItem.control>",
-        "  </ToolItem>",
-        "</ToolBar>");
-  }
+	public void test_canvas_CREATE_control_good() throws Exception {
+		openEditor(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<ToolBar>",
+				"  <ToolItem wbp:name='item' x:Style='SEPARATOR' width='100'/>",
+				"</ToolBar>");
+		XmlObjectInfo item = getObjectByName("item");
+		//
+		loadButton();
+		canvas.moveTo(item, 5, 5);
+		canvas.assertFeedbacks(canvas.getTargetPredicate(item));
+		canvas.assertCommandNotNull();
+		canvas.click();
+		assertXML(
+				"// filler filler filler filler filler",
+				"<ToolBar>",
+				"  <ToolItem wbp:name='item' x:Style='SEPARATOR' width='100'>",
+				"    <ToolItem.control>",
+				"      <Button/>",
+				"    </ToolItem.control>",
+				"  </ToolItem>",
+				"</ToolBar>");
+	}
 
-  public void test_canvas_CREATE_control_notSeparator() throws Exception {
-    openEditor(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<ToolBar>",
-        "  <ToolItem wbp:name='item' width='100'/>",
-        "</ToolBar>");
-    XmlObjectInfo item = getObjectByName("item");
-    //
-    loadButton();
-    canvas.moveTo(item, 5, 5);
-    canvas.assertNoFeedbacks();
-    canvas.assertCommandNull();
-  }
+	public void test_canvas_CREATE_control_notSeparator() throws Exception {
+		openEditor(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<ToolBar>",
+				"  <ToolItem wbp:name='item' width='100'/>",
+				"</ToolBar>");
+		XmlObjectInfo item = getObjectByName("item");
+		//
+		loadButton();
+		canvas.moveTo(item, 5, 5);
+		canvas.assertNoFeedbacks();
+		canvas.assertCommandNull();
+	}
 
-  public void test_canvas_CREATE_control_alreadyHasControl() throws Exception {
-    openEditor(
-        "// filler filler filler filler filler",
-        "<ToolBar>",
-        "  <ToolItem wbp:name='item' x:Style='SEPARATOR' width='100'>",
-        "    <ToolItem.control>",
-        "      <Button/>",
-        "    </ToolItem.control>",
-        "  </ToolItem>",
-        "</ToolBar>");
-    XmlObjectInfo item = getObjectByName("item");
-    //
-    loadButton();
-    canvas.moveTo(item, 5, 5);
-    canvas.assertFeedbacks(canvas.getTargetPredicate(item));
-    canvas.assertCommandNull();
-  }
+	public void test_canvas_CREATE_control_alreadyHasControl() throws Exception {
+		openEditor(
+				"// filler filler filler filler filler",
+				"<ToolBar>",
+				"  <ToolItem wbp:name='item' x:Style='SEPARATOR' width='100'>",
+				"    <ToolItem.control>",
+				"      <Button/>",
+				"    </ToolItem.control>",
+				"  </ToolItem>",
+				"</ToolBar>");
+		XmlObjectInfo item = getObjectByName("item");
+		//
+		loadButton();
+		canvas.moveTo(item, 5, 5);
+		canvas.assertFeedbacks(canvas.getTargetPredicate(item));
+		canvas.assertCommandNull();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tree
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_tree_CREATE_item() throws Exception {
-    ToolBarInfo toolBar = openEditor("<ToolBar/>");
-    //
-    loadCreationTool("org.eclipse.swt.widgets.ToolItem");
-    tree.moveOn(toolBar);
-    tree.click();
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<ToolBar>",
-        "  <ToolItem text='New Item'/>",
-        "</ToolBar>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tree
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_tree_CREATE_item() throws Exception {
+		ToolBarInfo toolBar = openEditor("<ToolBar/>");
+		//
+		loadCreationTool("org.eclipse.swt.widgets.ToolItem");
+		tree.moveOn(toolBar);
+		tree.click();
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<ToolBar>",
+				"  <ToolItem text='New Item'/>",
+				"</ToolBar>");
+	}
 
-  public void test_tree_CREATE_control_good() throws Exception {
-    openEditor(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<ToolBar>",
-        "  <ToolItem wbp:name='item' x:Style='SEPARATOR' width='100'/>",
-        "</ToolBar>");
-    XmlObjectInfo item = getObjectByName("item");
-    //
-    loadButton();
-    tree.moveOn(item);
-    tree.assertFeedback_on(item);
-    tree.assertCommandNotNull();
-    tree.click();
-    assertXML(
-        "// filler filler filler filler filler",
-        "<ToolBar>",
-        "  <ToolItem wbp:name='item' x:Style='SEPARATOR' width='100'>",
-        "    <ToolItem.control>",
-        "      <Button/>",
-        "    </ToolItem.control>",
-        "  </ToolItem>",
-        "</ToolBar>");
-  }
+	public void test_tree_CREATE_control_good() throws Exception {
+		openEditor(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<ToolBar>",
+				"  <ToolItem wbp:name='item' x:Style='SEPARATOR' width='100'/>",
+				"</ToolBar>");
+		XmlObjectInfo item = getObjectByName("item");
+		//
+		loadButton();
+		tree.moveOn(item);
+		tree.assertFeedback_on(item);
+		tree.assertCommandNotNull();
+		tree.click();
+		assertXML(
+				"// filler filler filler filler filler",
+				"<ToolBar>",
+				"  <ToolItem wbp:name='item' x:Style='SEPARATOR' width='100'>",
+				"    <ToolItem.control>",
+				"      <Button/>",
+				"    </ToolItem.control>",
+				"  </ToolItem>",
+				"</ToolBar>");
+	}
 
-  public void test_tree_CREATE_control_notSeparator() throws Exception {
-    openEditor(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<ToolBar>",
-        "  <ToolItem wbp:name='item' width='100'/>",
-        "</ToolBar>");
-    XmlObjectInfo item = getObjectByName("item");
-    //
-    loadButton();
-    tree.moveOn(item);
-    tree.assertCommandNull();
-  }
+	public void test_tree_CREATE_control_notSeparator() throws Exception {
+		openEditor(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<ToolBar>",
+				"  <ToolItem wbp:name='item' width='100'/>",
+				"</ToolBar>");
+		XmlObjectInfo item = getObjectByName("item");
+		//
+		loadButton();
+		tree.moveOn(item);
+		tree.assertCommandNull();
+	}
 
-  public void test_tree_CREATE_control_alreadyHasControl() throws Exception {
-    openEditor(
-        "// filler filler filler filler filler",
-        "<ToolBar>",
-        "  <ToolItem wbp:name='item' x:Style='SEPARATOR' width='100'>",
-        "    <ToolItem.control>",
-        "      <Button/>",
-        "    </ToolItem.control>",
-        "  </ToolItem>",
-        "</ToolBar>");
-    XmlObjectInfo item = getObjectByName("item");
-    //
-    loadButton();
-    tree.moveOn(item);
-    tree.assertFeedback_on(item);
-    tree.assertCommandNull();
-  }
+	public void test_tree_CREATE_control_alreadyHasControl() throws Exception {
+		openEditor(
+				"// filler filler filler filler filler",
+				"<ToolBar>",
+				"  <ToolItem wbp:name='item' x:Style='SEPARATOR' width='100'>",
+				"    <ToolItem.control>",
+				"      <Button/>",
+				"    </ToolItem.control>",
+				"  </ToolItem>",
+				"</ToolBar>");
+		XmlObjectInfo item = getObjectByName("item");
+		//
+		loadButton();
+		tree.moveOn(item);
+		tree.assertFeedback_on(item);
+		tree.assertCommandNull();
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/ToolBarTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/ToolBarTest.java
index a4734800f..df9278bd2 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/ToolBarTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/ToolBarTest.java
@@ -37,288 +37,288 @@
  * @author scheglov_ke
  */
 public class ToolBarTest extends XwtModelTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link ToolBarInfo#isHorizontal()}.
-   */
-  public void test_isHorizontal() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <ToolBar wbp:name='toolBar_1'/>",
-        "  <ToolBar wbp:name='toolBar_2' x:Style='VERTICAL'/>",
-        "</Shell>");
-    refresh();
-    {
-      ToolBarInfo toolBar_1 = getObjectByName("toolBar_1");
-      assertTrue(toolBar_1.isHorizontal());
-      assertTrue(getFlowContainer(toolBar_1).isHorizontal());
-    }
-    {
-      ToolBarInfo toolBar_2 = getObjectByName("toolBar_2");
-      assertFalse(toolBar_2.isHorizontal());
-      assertFalse(getFlowContainer(toolBar_2).isHorizontal());
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link ToolBarInfo#isHorizontal()}.
+	 */
+	public void test_isHorizontal() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <ToolBar wbp:name='toolBar_1'/>",
+				"  <ToolBar wbp:name='toolBar_2' x:Style='VERTICAL'/>",
+				"</Shell>");
+		refresh();
+		{
+			ToolBarInfo toolBar_1 = getObjectByName("toolBar_1");
+			assertTrue(toolBar_1.isHorizontal());
+			assertTrue(getFlowContainer(toolBar_1).isHorizontal());
+		}
+		{
+			ToolBarInfo toolBar_2 = getObjectByName("toolBar_2");
+			assertFalse(toolBar_2.isHorizontal());
+			assertFalse(getFlowContainer(toolBar_2).isHorizontal());
+		}
+	}
 
-  /**
-   * {@link ToolBar} with {@link ToolItem}'s.
-   */
-  public void test_parseItems() throws Exception {
-    ToolBarInfo toolBar =
-        parse(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<ToolBar>",
-            "  <ToolItem wbp:name='item_1' text='000'/>",
-            "  <ToolItem wbp:name='item_2' text='111'/>",
-            "</ToolBar>");
-    refresh();
-    // prepare
-    ToolItemInfo item_1 = getObjectByName("item_1");
-    ToolItemInfo item_2 = getObjectByName("item_2");
-    assertThat(toolBar.getItems()).containsExactly(item_1, item_2);
-    // text
-    assertEquals("000", ReflectionUtils.invokeMethod(item_1.getObject(), "getText()"));
-    assertEquals("111", ReflectionUtils.invokeMethod(item_2.getObject(), "getText()"));
-    // item_1
-    {
-      // bounds
-      {
-        Rectangle modelBounds = item_1.getModelBounds();
-        assertThat(modelBounds.x).isEqualTo(0);
-        assertThat(modelBounds.y).isEqualTo(0);
-        assertThat(modelBounds.width).isGreaterThan(25).isLessThan(50);
-        assertThat(modelBounds.height).isGreaterThan(20).isLessThan(40);
-      }
-      // no Control
-      assertFalse(item_1.isSeparator());
-      Assertions.assertThat(item_1.getPresentation().getChildrenTree()).isEmpty();
-    }
-    // item_2
-    {
-      // bounds
-      {
-        Rectangle modelBounds = item_2.getModelBounds();
-        assertThat(modelBounds.x).isGreaterThan(25);
-        assertThat(modelBounds.y).isEqualTo(0);
-        assertThat(modelBounds.width).isGreaterThan(25).isLessThan(50);
-        assertThat(modelBounds.height).isGreaterThan(20).isLessThan(40);
-      }
-    }
-  }
+	/**
+	 * {@link ToolBar} with {@link ToolItem}'s.
+	 */
+	public void test_parseItems() throws Exception {
+		ToolBarInfo toolBar =
+				parse(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<ToolBar>",
+						"  <ToolItem wbp:name='item_1' text='000'/>",
+						"  <ToolItem wbp:name='item_2' text='111'/>",
+						"</ToolBar>");
+		refresh();
+		// prepare
+		ToolItemInfo item_1 = getObjectByName("item_1");
+		ToolItemInfo item_2 = getObjectByName("item_2");
+		assertThat(toolBar.getItems()).containsExactly(item_1, item_2);
+		// text
+		assertEquals("000", ReflectionUtils.invokeMethod(item_1.getObject(), "getText()"));
+		assertEquals("111", ReflectionUtils.invokeMethod(item_2.getObject(), "getText()"));
+		// item_1
+		{
+			// bounds
+			{
+				Rectangle modelBounds = item_1.getModelBounds();
+				assertThat(modelBounds.x).isEqualTo(0);
+				assertThat(modelBounds.y).isEqualTo(0);
+				assertThat(modelBounds.width).isGreaterThan(25).isLessThan(50);
+				assertThat(modelBounds.height).isGreaterThan(20).isLessThan(40);
+			}
+			// no Control
+			assertFalse(item_1.isSeparator());
+			Assertions.assertThat(item_1.getPresentation().getChildrenTree()).isEmpty();
+		}
+		// item_2
+		{
+			// bounds
+			{
+				Rectangle modelBounds = item_2.getModelBounds();
+				assertThat(modelBounds.x).isGreaterThan(25);
+				assertThat(modelBounds.y).isEqualTo(0);
+				assertThat(modelBounds.width).isGreaterThan(25).isLessThan(50);
+				assertThat(modelBounds.height).isGreaterThan(20).isLessThan(40);
+			}
+		}
+	}
 
-  /**
-   * Test that presentation returns different icons for {@link ToolItem}s with different styles.
-   */
-  public void test_ToolItem_presentation() throws Exception {
-    ToolBarInfo toolBar =
-        parse(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<ToolBar>",
-            "  <ToolItem/>",
-            "  <ToolItem x:Style='PUSH'/>",
-            "  <ToolItem x:Style='CHECK'/>",
-            "  <ToolItem x:Style='RADIO'/>",
-            "  <ToolItem x:Style='DROP_DOWN'/>",
-            "  <ToolItem x:Style='SEPARATOR'/>",
-            "</ToolBar>");
-    refresh();
-    // prepare items
-    List<ToolItemInfo> items = toolBar.getItems();
-    ToolItemInfo itemDefault = items.get(0);
-    ToolItemInfo itemPush = items.get(1);
-    ToolItemInfo itemCheck = items.get(2);
-    ToolItemInfo itemRadio = items.get(3);
-    ToolItemInfo itemDropDown = items.get(4);
-    ToolItemInfo itemSeparator = items.get(5);
-    // check icons
-    assertSame(itemDefault.getPresentation().getIcon(), itemPush.getPresentation().getIcon());
-    assertNotSame(itemPush.getPresentation().getIcon(), itemRadio.getPresentation().getIcon());
-    assertNotSame(itemPush.getPresentation().getIcon(), itemCheck.getPresentation().getIcon());
-    assertNotSame(itemRadio.getPresentation().getIcon(), itemCheck.getPresentation().getIcon());
-    assertNotSame(itemRadio.getPresentation().getIcon(), itemDropDown.getPresentation().getIcon());
-    assertNotSame(itemRadio.getPresentation().getIcon(), itemSeparator.getPresentation().getIcon());
-  }
+	/**
+	 * Test that presentation returns different icons for {@link ToolItem}s with different styles.
+	 */
+	public void test_ToolItem_presentation() throws Exception {
+		ToolBarInfo toolBar =
+				parse(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<ToolBar>",
+						"  <ToolItem/>",
+						"  <ToolItem x:Style='PUSH'/>",
+						"  <ToolItem x:Style='CHECK'/>",
+						"  <ToolItem x:Style='RADIO'/>",
+						"  <ToolItem x:Style='DROP_DOWN'/>",
+						"  <ToolItem x:Style='SEPARATOR'/>",
+						"</ToolBar>");
+		refresh();
+		// prepare items
+		List<ToolItemInfo> items = toolBar.getItems();
+		ToolItemInfo itemDefault = items.get(0);
+		ToolItemInfo itemPush = items.get(1);
+		ToolItemInfo itemCheck = items.get(2);
+		ToolItemInfo itemRadio = items.get(3);
+		ToolItemInfo itemDropDown = items.get(4);
+		ToolItemInfo itemSeparator = items.get(5);
+		// check icons
+		assertSame(itemDefault.getPresentation().getIcon(), itemPush.getPresentation().getIcon());
+		assertNotSame(itemPush.getPresentation().getIcon(), itemRadio.getPresentation().getIcon());
+		assertNotSame(itemPush.getPresentation().getIcon(), itemCheck.getPresentation().getIcon());
+		assertNotSame(itemRadio.getPresentation().getIcon(), itemCheck.getPresentation().getIcon());
+		assertNotSame(itemRadio.getPresentation().getIcon(), itemDropDown.getPresentation().getIcon());
+		assertNotSame(itemRadio.getPresentation().getIcon(), itemSeparator.getPresentation().getIcon());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Control
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_Control_isEmpty() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<ToolBar>",
-        "  <ToolItem wbp:name='item_1' text='X'/>",
-        "  <ToolItem wbp:name='item_2' x:Style='SEPARATOR' text='X'/>",
-        "  <ToolItem wbp:name='item_3' x:Style='SEPARATOR' width='100'>",
-        "    <ToolItem.control>",
-        "      <Button wbp:name='button'/>",
-        "    </ToolItem.control>",
-        "  </ToolItem>",
-        "</ToolBar>");
-    refresh();
-    ToolItemInfo item_1 = getObjectByName("item_1");
-    ToolItemInfo item_2 = getObjectByName("item_2");
-    ToolItemInfo item_3 = getObjectByName("item_3");
-    ControlInfo button = getObjectByName("button");
-    // not container
-    assertFalse(item_1.isSeparator());
-    // container, empty
-    {
-      assertTrue(item_2.isSeparator());
-      SimpleContainer simpleContainer = new SimpleContainerFactory(item_2, false).get().get(0);
-      assertTrue(simpleContainer.isEmpty());
-      Assertions.assertThat(item_2.getPresentation().getChildrenTree()).isEmpty();
-    }
-    // container, not empty
-    {
-      assertTrue(item_3.isSeparator());
-      SimpleContainer simpleContainer = new SimpleContainerFactory(item_3, false).get().get(0);
-      assertFalse(simpleContainer.isEmpty());
-      Assertions.assertThat(item_3.getPresentation().getChildrenTree()).containsOnly(button);
-    }
-    // "button" bounds
-    {
-      Rectangle modelBounds = button.getModelBounds();
-      assertEquals(new Rectangle(0, 0, 100, 23), modelBounds);
-    }
-    {
-      Rectangle bounds = button.getBounds();
-      assertEquals(new Rectangle(0, 0, 100, 23), bounds);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Control
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_Control_isEmpty() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<ToolBar>",
+				"  <ToolItem wbp:name='item_1' text='X'/>",
+				"  <ToolItem wbp:name='item_2' x:Style='SEPARATOR' text='X'/>",
+				"  <ToolItem wbp:name='item_3' x:Style='SEPARATOR' width='100'>",
+				"    <ToolItem.control>",
+				"      <Button wbp:name='button'/>",
+				"    </ToolItem.control>",
+				"  </ToolItem>",
+				"</ToolBar>");
+		refresh();
+		ToolItemInfo item_1 = getObjectByName("item_1");
+		ToolItemInfo item_2 = getObjectByName("item_2");
+		ToolItemInfo item_3 = getObjectByName("item_3");
+		ControlInfo button = getObjectByName("button");
+		// not container
+		assertFalse(item_1.isSeparator());
+		// container, empty
+		{
+			assertTrue(item_2.isSeparator());
+			SimpleContainer simpleContainer = new SimpleContainerFactory(item_2, false).get().get(0);
+			assertTrue(simpleContainer.isEmpty());
+			Assertions.assertThat(item_2.getPresentation().getChildrenTree()).isEmpty();
+		}
+		// container, not empty
+		{
+			assertTrue(item_3.isSeparator());
+			SimpleContainer simpleContainer = new SimpleContainerFactory(item_3, false).get().get(0);
+			assertFalse(simpleContainer.isEmpty());
+			Assertions.assertThat(item_3.getPresentation().getChildrenTree()).containsOnly(button);
+		}
+		// "button" bounds
+		{
+			Rectangle modelBounds = button.getModelBounds();
+			assertEquals(new Rectangle(0, 0, 100, 23), modelBounds);
+		}
+		{
+			Rectangle bounds = button.getBounds();
+			assertEquals(new Rectangle(0, 0, 100, 23), bounds);
+		}
+	}
 
-  public void test_Control_CREATE() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<ToolBar>",
-        "  <ToolItem wbp:name='item' x:Style='SEPARATOR' width='100'/>",
-        "</ToolBar>");
-    refresh();
-    ToolItemInfo item = getObjectByName("item");
-    // no control initially
-    Assertions.assertThat(item.getPresentation().getChildrenTree()).isEmpty();
-    // set Button on "item"
-    ControlInfo newButton = createButton();
-    simpleContainer_CREATE(item, newButton);
-    // check result
-    Assertions.assertThat(item.getPresentation().getChildrenTree()).containsExactly(newButton);
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<ToolBar>",
-        "  <ToolItem wbp:name='item' x:Style='SEPARATOR' width='100'>",
-        "    <ToolItem.control>",
-        "      <Button/>",
-        "    </ToolItem.control>",
-        "  </ToolItem>",
-        "</ToolBar>");
-  }
+	public void test_Control_CREATE() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<ToolBar>",
+				"  <ToolItem wbp:name='item' x:Style='SEPARATOR' width='100'/>",
+				"</ToolBar>");
+		refresh();
+		ToolItemInfo item = getObjectByName("item");
+		// no control initially
+		Assertions.assertThat(item.getPresentation().getChildrenTree()).isEmpty();
+		// set Button on "item"
+		ControlInfo newButton = createButton();
+		simpleContainer_CREATE(item, newButton);
+		// check result
+		Assertions.assertThat(item.getPresentation().getChildrenTree()).containsExactly(newButton);
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<ToolBar>",
+				"  <ToolItem wbp:name='item' x:Style='SEPARATOR' width='100'>",
+				"    <ToolItem.control>",
+				"      <Button/>",
+				"    </ToolItem.control>",
+				"  </ToolItem>",
+				"</ToolBar>");
+	}
 
-  public void test_Control_moveOut() throws Exception {
-    CompositeInfo shell =
-        parse(
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <FillLayout/>",
-            "  </Shell.layout>",
-            "  <ToolBar>",
-            "    <ToolItem x:Style='SEPARATOR' width='100'>",
-            "      <ToolItem.control>",
-            "        <Button wbp:name='button'/>",
-            "      </ToolItem.control>",
-            "    </ToolItem>",
-            "  </ToolBar>",
-            "</Shell>");
-    refresh();
-    ControlInfo button = getObjectByName("button");
-    // do move
-    flowContainer_MOVE(shell.getLayout(), button, null);
-    assertXML(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <ToolBar>",
-        "    <ToolItem x:Style='SEPARATOR' width='100'/>",
-        "  </ToolBar>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <FillLayout>",
-        "  <ToolBar>",
-        "    <ToolItem x:Style='SEPARATOR' width='100'>",
-        "  <Button wbp:name='button'>");
-  }
+	public void test_Control_moveOut() throws Exception {
+		CompositeInfo shell =
+				parse(
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <FillLayout/>",
+						"  </Shell.layout>",
+						"  <ToolBar>",
+						"    <ToolItem x:Style='SEPARATOR' width='100'>",
+						"      <ToolItem.control>",
+						"        <Button wbp:name='button'/>",
+						"      </ToolItem.control>",
+						"    </ToolItem>",
+						"  </ToolBar>",
+						"</Shell>");
+		refresh();
+		ControlInfo button = getObjectByName("button");
+		// do move
+		flowContainer_MOVE(shell.getLayout(), button, null);
+		assertXML(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <ToolBar>",
+				"    <ToolItem x:Style='SEPARATOR' width='100'/>",
+				"  </ToolBar>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <FillLayout>",
+				"  <ToolBar>",
+				"    <ToolItem x:Style='SEPARATOR' width='100'>",
+				"  <Button wbp:name='button'>");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_CREATE() throws Exception {
-    ToolBarInfo toolBar = parse("<ToolBar/>");
-    refresh();
-    // add items
-    {
-      ToolItemInfo toolItem = createObject("org.eclipse.swt.widgets.ToolItem", null);
-      flowContainer_CREATE(toolBar, toolItem, null);
-    }
-    {
-      ToolItemInfo toolItem = createObject("org.eclipse.swt.widgets.ToolItem", "check");
-      flowContainer_CREATE(toolBar, toolItem, null);
-    }
-    {
-      ToolItemInfo toolItem = createObject("org.eclipse.swt.widgets.ToolItem", "radio");
-      flowContainer_CREATE(toolBar, toolItem, null);
-    }
-    {
-      ToolItemInfo toolItem = createObject("org.eclipse.swt.widgets.ToolItem", "dropDown");
-      flowContainer_CREATE(toolBar, toolItem, null);
-    }
-    {
-      ToolItemInfo toolItem = createObject("org.eclipse.swt.widgets.ToolItem", "separator");
-      flowContainer_CREATE(toolBar, toolItem, null);
-    }
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<ToolBar>",
-        "  <ToolItem text='New Item'/>",
-        "  <ToolItem x:Style='CHECK' text='Check Item'/>",
-        "  <ToolItem x:Style='RADIO' text='Radio Item'/>",
-        "  <ToolItem x:Style='DROP_DOWN' text='DropDown Item'/>",
-        "  <ToolItem x:Style='SEPARATOR'/>",
-        "</ToolBar>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_CREATE() throws Exception {
+		ToolBarInfo toolBar = parse("<ToolBar/>");
+		refresh();
+		// add items
+		{
+			ToolItemInfo toolItem = createObject("org.eclipse.swt.widgets.ToolItem", null);
+			flowContainer_CREATE(toolBar, toolItem, null);
+		}
+		{
+			ToolItemInfo toolItem = createObject("org.eclipse.swt.widgets.ToolItem", "check");
+			flowContainer_CREATE(toolBar, toolItem, null);
+		}
+		{
+			ToolItemInfo toolItem = createObject("org.eclipse.swt.widgets.ToolItem", "radio");
+			flowContainer_CREATE(toolBar, toolItem, null);
+		}
+		{
+			ToolItemInfo toolItem = createObject("org.eclipse.swt.widgets.ToolItem", "dropDown");
+			flowContainer_CREATE(toolBar, toolItem, null);
+		}
+		{
+			ToolItemInfo toolItem = createObject("org.eclipse.swt.widgets.ToolItem", "separator");
+			flowContainer_CREATE(toolBar, toolItem, null);
+		}
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<ToolBar>",
+				"  <ToolItem text='New Item'/>",
+				"  <ToolItem x:Style='CHECK' text='Check Item'/>",
+				"  <ToolItem x:Style='RADIO' text='Radio Item'/>",
+				"  <ToolItem x:Style='DROP_DOWN' text='DropDown Item'/>",
+				"  <ToolItem x:Style='SEPARATOR'/>",
+				"</ToolBar>");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static FlowContainer getFlowContainer(ToolBarInfo toolBar) {
-    return new FlowContainerFactory(toolBar, true).get().get(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static FlowContainer getFlowContainer(ToolBarInfo toolBar) {
+		return new FlowContainerFactory(toolBar, true).get().get(0);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/TreeGefTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/TreeGefTest.java
index 2b4b79f19..2766ee38c 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/TreeGefTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/TreeGefTest.java
@@ -20,38 +20,38 @@
  * @author scheglov_ke
  */
 public class TreeGefTest extends XwtGefTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Canvas
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_canvas_RESIZE_column() throws Exception {
-    openEditor(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Tree headerVisible='true'>",
-        "    <TreeColumn wbp:name='column' width='100'/>",
-        "  </Tree>",
-        "</Shell>");
-    XmlObjectInfo column = getObjectByName("column");
-    //
-    canvas.target(column).outX(1).inY(0.5);
-    canvas.beginDrag().dragOn(50, 0).endDrag();
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Tree headerVisible='true'>",
-        "    <TreeColumn wbp:name='column' width='150'/>",
-        "  </Tree>",
-        "</Shell>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Canvas
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_canvas_RESIZE_column() throws Exception {
+		openEditor(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Tree headerVisible='true'>",
+				"    <TreeColumn wbp:name='column' width='100'/>",
+				"  </Tree>",
+				"</Shell>");
+		XmlObjectInfo column = getObjectByName("column");
+		//
+		canvas.target(column).outX(1).inY(0.5);
+		canvas.beginDrag().dragOn(50, 0).endDrag();
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Tree headerVisible='true'>",
+				"    <TreeColumn wbp:name='column' width='150'/>",
+				"  </Tree>",
+				"</Shell>");
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/TreeTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/TreeTest.java
index 3aeaeba0d..a45edf2ee 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/TreeTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/TreeTest.java
@@ -33,335 +33,335 @@
  * @author scheglov_ke
  */
 public class TreeTest extends XwtModelTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Items
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for parsing {@link TreeItem} and bounds of {@link TreeItemInfo}.
-   */
-  public void test_TreeItem_parse() throws Exception {
-    TreeInfo tree =
-        parse(
-            "// filler filler filler filler filler",
-            "<Tree>",
-            "  <TreeItem wbp:name='item_1' text='TreeItem 1'/>",
-            "  <TreeItem wbp:name='item_2' text='TreeItem 2'/>",
-            "</Tree>");
-    refresh();
-    // prepare items
-    List<TreeItemInfo> items = tree.getItems();
-    assertThat(items).hasSize(2);
-    TreeItemInfo item_1 = items.get(0);
-    TreeItemInfo item_2 = items.get(1);
-    // no sub-items
-    assertThat(item_1.getItems()).isEmpty();
-    assertThat(item_2.getItems()).isEmpty();
-    // check bounds
-    Insets tableInsets = tree.getClientAreaInsets();
-    {
-      // "model" bounds
-      Rectangle modelBounds = item_1.getModelBounds();
-      {
-        assertNotNull(modelBounds);
-        assertThat(modelBounds.x).isGreaterThan(10); // some space for tree line
-        assertThat(modelBounds.y).isEqualTo(0);
-        assertThat(modelBounds.width).isGreaterThan(50);
-        assertThat(modelBounds.height).isGreaterThan(15).isLessThan(30);
-      }
-      // "shot" bounds
-      Rectangle bounds = item_1.getBounds();
-      assertEquals(tableInsets.left, bounds.x - modelBounds.x);
-      assertEquals(tableInsets.top, bounds.y - modelBounds.y);
-      assertEquals(modelBounds.width, bounds.width);
-      assertEquals(modelBounds.height, bounds.height);
-    }
-    {
-      Rectangle modelBounds = item_2.getModelBounds();
-      assertEquals(item_1.getModelBounds().x, modelBounds.x);
-      assertEquals(item_1.getModelBounds().bottom(), modelBounds.y);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Items
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for parsing {@link TreeItem} and bounds of {@link TreeItemInfo}.
+	 */
+	public void test_TreeItem_parse() throws Exception {
+		TreeInfo tree =
+				parse(
+						"// filler filler filler filler filler",
+						"<Tree>",
+						"  <TreeItem wbp:name='item_1' text='TreeItem 1'/>",
+						"  <TreeItem wbp:name='item_2' text='TreeItem 2'/>",
+						"</Tree>");
+		refresh();
+		// prepare items
+		List<TreeItemInfo> items = tree.getItems();
+		assertThat(items).hasSize(2);
+		TreeItemInfo item_1 = items.get(0);
+		TreeItemInfo item_2 = items.get(1);
+		// no sub-items
+		assertThat(item_1.getItems()).isEmpty();
+		assertThat(item_2.getItems()).isEmpty();
+		// check bounds
+		Insets tableInsets = tree.getClientAreaInsets();
+		{
+			// "model" bounds
+			Rectangle modelBounds = item_1.getModelBounds();
+			{
+				assertNotNull(modelBounds);
+				assertThat(modelBounds.x).isGreaterThan(10); // some space for tree line
+				assertThat(modelBounds.y).isEqualTo(0);
+				assertThat(modelBounds.width).isGreaterThan(50);
+				assertThat(modelBounds.height).isGreaterThan(15).isLessThan(30);
+			}
+			// "shot" bounds
+			Rectangle bounds = item_1.getBounds();
+			assertEquals(tableInsets.left, bounds.x - modelBounds.x);
+			assertEquals(tableInsets.top, bounds.y - modelBounds.y);
+			assertEquals(modelBounds.width, bounds.width);
+			assertEquals(modelBounds.height, bounds.height);
+		}
+		{
+			Rectangle modelBounds = item_2.getModelBounds();
+			assertEquals(item_1.getModelBounds().x, modelBounds.x);
+			assertEquals(item_1.getModelBounds().bottom(), modelBounds.y);
+		}
+	}
 
-  /**
-   * Test for parsing {@link TreeItemInfo} with {@link TreeItemInfo} child.
-   */
-  public void test_TreeItem_parse_subItems() throws Exception {
-    TreeInfo tree =
-        parse(
-            "// filler filler filler filler filler",
-            "<Tree>",
-            "  <TreeItem wbp:name='item_1' text='TreeItem 1'>",
-            "    <TreeItem wbp:name='item_2' text='TreeItem 2'/>",
-            "  </TreeItem>",
-            "</Tree>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Tree>",
-        "  <TreeItem wbp:name='item_1' text='TreeItem 1'>",
-        "    <TreeItem wbp:name='item_2' text='TreeItem 2'>");
-    TreeItemInfo item_1 = getObjectByName("item_1");
-    TreeItemInfo item_2 = getObjectByName("item_2");
-    // check hierarchy
-    assertThat(tree.getItems()).containsExactly(item_1);
-    assertThat(item_1.getItems()).containsExactly(item_2);
-    assertThat(item_2.getItems()).isEmpty();
-  }
+	/**
+	 * Test for parsing {@link TreeItemInfo} with {@link TreeItemInfo} child.
+	 */
+	public void test_TreeItem_parse_subItems() throws Exception {
+		TreeInfo tree =
+				parse(
+						"// filler filler filler filler filler",
+						"<Tree>",
+						"  <TreeItem wbp:name='item_1' text='TreeItem 1'>",
+						"    <TreeItem wbp:name='item_2' text='TreeItem 2'/>",
+						"  </TreeItem>",
+						"</Tree>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Tree>",
+				"  <TreeItem wbp:name='item_1' text='TreeItem 1'>",
+				"    <TreeItem wbp:name='item_2' text='TreeItem 2'>");
+		TreeItemInfo item_1 = getObjectByName("item_1");
+		TreeItemInfo item_2 = getObjectByName("item_2");
+		// check hierarchy
+		assertThat(tree.getItems()).containsExactly(item_1);
+		assertThat(item_1.getItems()).containsExactly(item_2);
+		assertThat(item_2.getItems()).isEmpty();
+	}
 
-  public void test_TreeItem_addToTree() throws Exception {
-    TreeInfo tree =
-        parse(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<Tree/>");
-    // no items initially
-    assertThat(tree.getItems()).isEmpty();
-    // add new TreeItem
-    TreeItemInfo newItem = createObject("org.eclipse.swt.widgets.TreeItem");
-    flowContainer_CREATE(tree, newItem, null);
-    assertThat(tree.getItems()).containsExactly(newItem);
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Tree>",
-        "  <TreeItem text='New TreeItem'/>",
-        "</Tree>");
-  }
+	public void test_TreeItem_addToTree() throws Exception {
+		TreeInfo tree =
+				parse(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<Tree/>");
+		// no items initially
+		assertThat(tree.getItems()).isEmpty();
+		// add new TreeItem
+		TreeItemInfo newItem = createObject("org.eclipse.swt.widgets.TreeItem");
+		flowContainer_CREATE(tree, newItem, null);
+		assertThat(tree.getItems()).containsExactly(newItem);
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Tree>",
+				"  <TreeItem text='New TreeItem'/>",
+				"</Tree>");
+	}
 
-  public void test_TreeItem_moveInTree() throws Exception {
-    TreeInfo tree =
-        parse(
-            "// filler filler filler filler filler",
-            "<Tree>",
-            "  <TreeItem wbp:name='item_1' text='TreeItem 1'/>",
-            "  <TreeItem wbp:name='item_2' text='TreeItem 2'/>",
-            "</Tree>");
-    refresh();
-    TreeItemInfo item_1 = getObjectByName("item_1");
-    TreeItemInfo item_2 = getObjectByName("item_2");
-    // do move
-    flowContainer_MOVE(tree, item_2, item_1);
-    assertThat(tree.getItems()).containsExactly(item_2, item_1);
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Tree>",
-        "  <TreeItem wbp:name='item_2' text='TreeItem 2'/>",
-        "  <TreeItem wbp:name='item_1' text='TreeItem 1'/>",
-        "</Tree>");
-  }
+	public void test_TreeItem_moveInTree() throws Exception {
+		TreeInfo tree =
+				parse(
+						"// filler filler filler filler filler",
+						"<Tree>",
+						"  <TreeItem wbp:name='item_1' text='TreeItem 1'/>",
+						"  <TreeItem wbp:name='item_2' text='TreeItem 2'/>",
+						"</Tree>");
+		refresh();
+		TreeItemInfo item_1 = getObjectByName("item_1");
+		TreeItemInfo item_2 = getObjectByName("item_2");
+		// do move
+		flowContainer_MOVE(tree, item_2, item_1);
+		assertThat(tree.getItems()).containsExactly(item_2, item_1);
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Tree>",
+				"  <TreeItem wbp:name='item_2' text='TreeItem 2'/>",
+				"  <TreeItem wbp:name='item_1' text='TreeItem 1'/>",
+				"</Tree>");
+	}
 
-  /**
-   * Test for adding new {@link TreeItemInfo} on existing {@link TreeItemInfo}.
-   */
-  public void test_TreeItem_addToItem() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Tree>",
-        "  <TreeItem wbp:name='existingItem'/>",
-        "</Tree>");
-    refresh();
-    // prepare existing TreeItem
-    TreeItemInfo existingItem = getObjectByName("existingItem");
-    assertThat(existingItem.getItems()).isEmpty();
-    // add new TreeItem
-    TreeItemInfo newItem = createObject("org.eclipse.swt.widgets.TreeItem");
-    flowContainer_CREATE(existingItem, newItem, null);
-    assertThat(existingItem.getItems()).containsExactly(newItem);
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Tree>",
-        "  <TreeItem wbp:name='existingItem' expanded='true'>",
-        "    <TreeItem text='New TreeItem'/>",
-        "  </TreeItem>",
-        "</Tree>");
-  }
+	/**
+	 * Test for adding new {@link TreeItemInfo} on existing {@link TreeItemInfo}.
+	 */
+	public void test_TreeItem_addToItem() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Tree>",
+				"  <TreeItem wbp:name='existingItem'/>",
+				"</Tree>");
+		refresh();
+		// prepare existing TreeItem
+		TreeItemInfo existingItem = getObjectByName("existingItem");
+		assertThat(existingItem.getItems()).isEmpty();
+		// add new TreeItem
+		TreeItemInfo newItem = createObject("org.eclipse.swt.widgets.TreeItem");
+		flowContainer_CREATE(existingItem, newItem, null);
+		assertThat(existingItem.getItems()).containsExactly(newItem);
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Tree>",
+				"  <TreeItem wbp:name='existingItem' expanded='true'>",
+				"    <TreeItem text='New TreeItem'/>",
+				"  </TreeItem>",
+				"</Tree>");
+	}
 
-  /**
-   * Test for moving {@link TreeItemInfo} on other {@link TreeItemInfo}.
-   */
-  public void test_TreeItem_moveToItem() throws Exception {
-    TreeInfo tree =
-        parse(
-            "// filler filler filler filler filler",
-            "<Tree>",
-            "  <TreeItem wbp:name='item_1' text='TreeItem 1'/>",
-            "  <TreeItem wbp:name='item_2' text='TreeItem 2'/>",
-            "</Tree>");
-    refresh();
-    TreeItemInfo item_1 = getObjectByName("item_1");
-    TreeItemInfo item_2 = getObjectByName("item_2");
-    // do move
-    flowContainer_MOVE(item_1, item_2, null);
-    assertThat(tree.getItems()).containsExactly(item_1);
-    assertThat(item_1.getItems()).containsExactly(item_2);
-    assertThat(item_2.getItems()).isEmpty();
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Tree>",
-        "  <TreeItem wbp:name='item_1' text='TreeItem 1' expanded='true'>",
-        "    <TreeItem wbp:name='item_2' text='TreeItem 2'/>",
-        "  </TreeItem>",
-        "</Tree>");
-  }
+	/**
+	 * Test for moving {@link TreeItemInfo} on other {@link TreeItemInfo}.
+	 */
+	public void test_TreeItem_moveToItem() throws Exception {
+		TreeInfo tree =
+				parse(
+						"// filler filler filler filler filler",
+						"<Tree>",
+						"  <TreeItem wbp:name='item_1' text='TreeItem 1'/>",
+						"  <TreeItem wbp:name='item_2' text='TreeItem 2'/>",
+						"</Tree>");
+		refresh();
+		TreeItemInfo item_1 = getObjectByName("item_1");
+		TreeItemInfo item_2 = getObjectByName("item_2");
+		// do move
+		flowContainer_MOVE(item_1, item_2, null);
+		assertThat(tree.getItems()).containsExactly(item_1);
+		assertThat(item_1.getItems()).containsExactly(item_2);
+		assertThat(item_2.getItems()).isEmpty();
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Tree>",
+				"  <TreeItem wbp:name='item_1' text='TreeItem 1' expanded='true'>",
+				"    <TreeItem wbp:name='item_2' text='TreeItem 2'/>",
+				"  </TreeItem>",
+				"</Tree>");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Columns
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static int BORDER_WIDTH = 1;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Columns
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static int BORDER_WIDTH = 1;
 
-  /**
-   * Test for parsing {@link TreeColumn} and bounds of {@link TreeColumnInfo}.
-   */
-  public void test_TreeColumn() throws Exception {
-    TreeInfo tree =
-        parse(
-            "// filler filler filler filler filler",
-            "<Tree headerVisible='true'>",
-            "  <TreeColumn wbp:name='column_1' width='50'/>",
-            "  <TreeColumn wbp:name='column_2' width='100'/>",
-            "</Tree>");
-    refresh();
-    TreeColumnInfo column_1 = getObjectByName("column_1");
-    TreeColumnInfo column_2 = getObjectByName("column_2");
-    // check Tree columns
-    assertThat(tree.getColumns()).containsExactly(column_1, column_2);
-    // check bounds
-    {
-      // "model" bounds
-      Rectangle modelBounds = column_1.getModelBounds();
-      assertNotNull(modelBounds);
-      assertEquals(BORDER_WIDTH, modelBounds.x);
-      assertEquals(BORDER_WIDTH, modelBounds.y);
-      assertEquals(50, modelBounds.width);
-      assertThat(modelBounds.height).isGreaterThan(15).isLessThan(25);
-      // "shot" bounds
-      Rectangle bounds = column_1.getBounds();
-      assertEquals(BORDER_WIDTH, bounds.x);
-      assertEquals(BORDER_WIDTH, bounds.y);
-      assertEquals(modelBounds.width, bounds.width);
-      assertEquals(modelBounds.height, bounds.height);
-    }
-    {
-      // "model" bounds
-      Rectangle modelBounds = column_2.getModelBounds();
-      assertNotNull(modelBounds);
-      assertEquals(BORDER_WIDTH + 50, modelBounds.x);
-      assertEquals(BORDER_WIDTH, modelBounds.y);
-    }
-  }
+	/**
+	 * Test for parsing {@link TreeColumn} and bounds of {@link TreeColumnInfo}.
+	 */
+	public void test_TreeColumn() throws Exception {
+		TreeInfo tree =
+				parse(
+						"// filler filler filler filler filler",
+						"<Tree headerVisible='true'>",
+						"  <TreeColumn wbp:name='column_1' width='50'/>",
+						"  <TreeColumn wbp:name='column_2' width='100'/>",
+						"</Tree>");
+		refresh();
+		TreeColumnInfo column_1 = getObjectByName("column_1");
+		TreeColumnInfo column_2 = getObjectByName("column_2");
+		// check Tree columns
+		assertThat(tree.getColumns()).containsExactly(column_1, column_2);
+		// check bounds
+		{
+			// "model" bounds
+			Rectangle modelBounds = column_1.getModelBounds();
+			assertNotNull(modelBounds);
+			assertEquals(BORDER_WIDTH, modelBounds.x);
+			assertEquals(BORDER_WIDTH, modelBounds.y);
+			assertEquals(50, modelBounds.width);
+			assertThat(modelBounds.height).isGreaterThan(15).isLessThan(25);
+			// "shot" bounds
+			Rectangle bounds = column_1.getBounds();
+			assertEquals(BORDER_WIDTH, bounds.x);
+			assertEquals(BORDER_WIDTH, bounds.y);
+			assertEquals(modelBounds.width, bounds.width);
+			assertEquals(modelBounds.height, bounds.height);
+		}
+		{
+			// "model" bounds
+			Rectangle modelBounds = column_2.getModelBounds();
+			assertNotNull(modelBounds);
+			assertEquals(BORDER_WIDTH + 50, modelBounds.x);
+			assertEquals(BORDER_WIDTH, modelBounds.y);
+		}
+	}
 
-  /**
-   * Test for copy/paste {@link TreeColumn}.
-   */
-  public void test_TreeColumn_copyPaste() throws Exception {
-    CompositeInfo shell =
-        parse(
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Tree wbp:name='tree' headerVisible='true'>",
-            "    <TreeColumn width='50'/>",
-            "    <TreeColumn width='100'/>",
-            "  </Tree>",
-            "</Shell>");
-    refresh();
-    // prepare memento
-    XmlObjectMemento memento;
-    {
-      TreeInfo tree = getObjectByName("tree");
-      memento = XmlObjectMemento.createMemento(tree);
-    }
-    // do paste
-    {
-      TreeInfo newTree = (TreeInfo) memento.create(shell);
-      shell.getLayout().command_CREATE(newTree, null);
-      memento.apply();
-    }
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Tree wbp:name='tree' headerVisible='true'>",
-        "    <TreeColumn width='50'/>",
-        "    <TreeColumn width='100'/>",
-        "  </Tree>",
-        "  <Tree headerVisible='true'>",
-        "    <TreeColumn width='50'/>",
-        "    <TreeColumn width='100'/>",
-        "  </Tree>",
-        "</Shell>");
-  }
+	/**
+	 * Test for copy/paste {@link TreeColumn}.
+	 */
+	public void test_TreeColumn_copyPaste() throws Exception {
+		CompositeInfo shell =
+				parse(
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Tree wbp:name='tree' headerVisible='true'>",
+						"    <TreeColumn width='50'/>",
+						"    <TreeColumn width='100'/>",
+						"  </Tree>",
+						"</Shell>");
+		refresh();
+		// prepare memento
+		XmlObjectMemento memento;
+		{
+			TreeInfo tree = getObjectByName("tree");
+			memento = XmlObjectMemento.createMemento(tree);
+		}
+		// do paste
+		{
+			TreeInfo newTree = (TreeInfo) memento.create(shell);
+			shell.getLayout().command_CREATE(newTree, null);
+			memento.apply();
+		}
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Tree wbp:name='tree' headerVisible='true'>",
+				"    <TreeColumn width='50'/>",
+				"    <TreeColumn width='100'/>",
+				"  </Tree>",
+				"  <Tree headerVisible='true'>",
+				"    <TreeColumn width='50'/>",
+				"    <TreeColumn width='100'/>",
+				"  </Tree>",
+				"</Shell>");
+	}
 
-  public void test_TreeColumn_setWidth() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Tree headerVisible='true'>",
-        "  <TreeColumn wbp:name='column' width='100'/>",
-        "</Tree>");
-    refresh();
-    TreeColumnInfo column = getObjectByName("column");
-    Property widthProperty = column.getPropertyByTitle("width");
-    // check initial width
-    assertEquals(100, widthProperty.getValue());
-    // set new width
-    column.setWidth(120);
-    assertEquals(120, widthProperty.getValue());
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Tree headerVisible='true'>",
-        "  <TreeColumn wbp:name='column' width='120'/>",
-        "</Tree>");
-  }
+	public void test_TreeColumn_setWidth() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Tree headerVisible='true'>",
+				"  <TreeColumn wbp:name='column' width='100'/>",
+				"</Tree>");
+		refresh();
+		TreeColumnInfo column = getObjectByName("column");
+		Property widthProperty = column.getPropertyByTitle("width");
+		// check initial width
+		assertEquals(100, widthProperty.getValue());
+		// set new width
+		column.setWidth(120);
+		assertEquals(120, widthProperty.getValue());
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Tree headerVisible='true'>",
+				"  <TreeColumn wbp:name='column' width='120'/>",
+				"</Tree>");
+	}
 
-  public void test_add_TreeColumn() throws Exception {
-    TreeInfo tree =
-        parse(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<Tree headerVisible='true'/>");
-    // no columns initially
-    assertThat(tree.getColumns()).isEmpty();
-    // add new TreeColumn
-    TreeColumnInfo newColumn = createObject("org.eclipse.swt.widgets.TreeColumn");
-    flowContainer_CREATE(tree, newColumn, null);
-    assertThat(tree.getColumns()).containsExactly(newColumn);
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Tree headerVisible='true'>",
-        "  <TreeColumn text='New Column' width='100'/>",
-        "</Tree>");
-  }
+	public void test_add_TreeColumn() throws Exception {
+		TreeInfo tree =
+				parse(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<Tree headerVisible='true'/>");
+		// no columns initially
+		assertThat(tree.getColumns()).isEmpty();
+		// add new TreeColumn
+		TreeColumnInfo newColumn = createObject("org.eclipse.swt.widgets.TreeColumn");
+		flowContainer_CREATE(tree, newColumn, null);
+		assertThat(tree.getColumns()).containsExactly(newColumn);
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Tree headerVisible='true'>",
+				"  <TreeColumn text='New Column' width='100'/>",
+				"</Tree>");
+	}
 
-  public void test_move_TreeColumn() throws Exception {
-    TreeInfo tree =
-        parse(
-            "// filler filler filler filler filler",
-            "<Tree headerVisible='true'>",
-            "  <TreeColumn wbp:name='column_1' width='50'/>",
-            "  <TreeColumn wbp:name='column_2' width='100'/>",
-            "</Tree>");
-    TreeColumnInfo column_1 = getObjectByName("column_1");
-    TreeColumnInfo column_2 = getObjectByName("column_2");
-    // move column
-    flowContainer_MOVE(tree, column_2, column_1);
-    assertThat(tree.getColumns()).containsExactly(column_2, column_1);
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Tree headerVisible='true'>",
-        "  <TreeColumn wbp:name='column_2' width='100'/>",
-        "  <TreeColumn wbp:name='column_1' width='50'/>",
-        "</Tree>");
-  }
+	public void test_move_TreeColumn() throws Exception {
+		TreeInfo tree =
+				parse(
+						"// filler filler filler filler filler",
+						"<Tree headerVisible='true'>",
+						"  <TreeColumn wbp:name='column_1' width='50'/>",
+						"  <TreeColumn wbp:name='column_2' width='100'/>",
+						"</Tree>");
+		TreeColumnInfo column_1 = getObjectByName("column_1");
+		TreeColumnInfo column_2 = getObjectByName("column_2");
+		// move column
+		flowContainer_MOVE(tree, column_2, column_1);
+		assertThat(tree.getColumns()).containsExactly(column_2, column_1);
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Tree headerVisible='true'>",
+				"  <TreeColumn wbp:name='column_2' width='100'/>",
+				"  <TreeColumn wbp:name='column_1' width='50'/>",
+				"</Tree>");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/ViewFormGefTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/ViewFormGefTest.java
index 6b271c6a3..d4b82b899 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/ViewFormGefTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/ViewFormGefTest.java
@@ -21,304 +21,304 @@
  * @author scheglov_ke
  */
 public class ViewFormGefTest extends XwtGefTest {
-  private ViewFormInfo viewForm;
+	private ViewFormInfo viewForm;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Source
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected String getTestSource_namespaces() {
-    return super.getTestSource_namespaces() + " xmlns:c='clr-namespace:org.eclipse.swt.custom'";
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Source
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected String getTestSource_namespaces() {
+		return super.getTestSource_namespaces() + " xmlns:c='clr-namespace:org.eclipse.swt.custom'";
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Canvas, CREATE
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_canvas_CREATE_topLeft() throws Exception {
-    prepare_canvas_CREATE();
-    // use canvas
-    canvas.target(viewForm).in(0.1, 0.1).move();
-    canvas.click();
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<ViewForm>",
-        "  <ViewForm.topLeft>",
-        "    <Button/>",
-        "  </ViewForm.topLeft>",
-        "</ViewForm>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Canvas, CREATE
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_canvas_CREATE_topLeft() throws Exception {
+		prepare_canvas_CREATE();
+		// use canvas
+		canvas.target(viewForm).in(0.1, 0.1).move();
+		canvas.click();
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<ViewForm>",
+				"  <ViewForm.topLeft>",
+				"    <Button/>",
+				"  </ViewForm.topLeft>",
+				"</ViewForm>");
+	}
 
-  public void test_canvas_CREATE_topCenter() throws Exception {
-    prepare_canvas_CREATE();
-    // use canvas
-    canvas.target(viewForm).in(0.6, 0.1).move();
-    canvas.click();
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<ViewForm>",
-        "  <ViewForm.topCenter>",
-        "    <Button/>",
-        "  </ViewForm.topCenter>",
-        "</ViewForm>");
-  }
+	public void test_canvas_CREATE_topCenter() throws Exception {
+		prepare_canvas_CREATE();
+		// use canvas
+		canvas.target(viewForm).in(0.6, 0.1).move();
+		canvas.click();
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<ViewForm>",
+				"  <ViewForm.topCenter>",
+				"    <Button/>",
+				"  </ViewForm.topCenter>",
+				"</ViewForm>");
+	}
 
-  public void test_canvas_CREATE_topRight() throws Exception {
-    prepare_canvas_CREATE();
-    // use canvas
-    canvas.target(viewForm).in(-0.1, 0.1).move();
-    canvas.click();
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<ViewForm>",
-        "  <ViewForm.topRight>",
-        "    <Button/>",
-        "  </ViewForm.topRight>",
-        "</ViewForm>");
-  }
+	public void test_canvas_CREATE_topRight() throws Exception {
+		prepare_canvas_CREATE();
+		// use canvas
+		canvas.target(viewForm).in(-0.1, 0.1).move();
+		canvas.click();
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<ViewForm>",
+				"  <ViewForm.topRight>",
+				"    <Button/>",
+				"  </ViewForm.topRight>",
+				"</ViewForm>");
+	}
 
-  public void test_canvas_CREATE_content() throws Exception {
-    prepare_canvas_CREATE();
-    // use canvas
-    canvas.target(viewForm).in(0.3, 0.3).move();
-    canvas.click();
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<ViewForm>",
-        "  <ViewForm.content>",
-        "    <Button/>",
-        "  </ViewForm.content>",
-        "</ViewForm>");
-  }
+	public void test_canvas_CREATE_content() throws Exception {
+		prepare_canvas_CREATE();
+		// use canvas
+		canvas.target(viewForm).in(0.3, 0.3).move();
+		canvas.click();
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<ViewForm>",
+				"  <ViewForm.content>",
+				"    <Button/>",
+				"  </ViewForm.content>",
+				"</ViewForm>");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // CREATE
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private ViewFormInfo prepare_canvas_CREATE() throws Exception {
-    viewForm =
-        openEditor(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<ViewForm/>");
-    // create Button
-    loadButton();
-    canvas.create(0, 0);
-    // use this ViewForm_Info
-    return viewForm;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// CREATE
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private ViewFormInfo prepare_canvas_CREATE() throws Exception {
+		viewForm =
+				openEditor(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<ViewForm/>");
+		// create Button
+		loadButton();
+		canvas.create(0, 0);
+		// use this ViewForm_Info
+		return viewForm;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Canvas
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_canvas_PASTE() throws Exception {
-    viewForm =
-        openEditor(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<ViewForm>",
-            "  <ViewForm.topLeft>",
-            "    <Button wbp:name='button'/>",
-            "  </ViewForm.topLeft>",
-            "</ViewForm>");
-    ControlInfo button = getObjectByName("button");
-    // operation
-    doCopyPaste(button);
-    canvas.create();
-    canvas.target(viewForm).in(-0.1, 0.1).move();
-    canvas.click();
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<ViewForm>",
-        "  <ViewForm.topLeft>",
-        "    <Button wbp:name='button'/>",
-        "  </ViewForm.topLeft>",
-        "  <ViewForm.topRight>",
-        "    <Button/>",
-        "  </ViewForm.topRight>",
-        "</ViewForm>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Canvas
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_canvas_PASTE() throws Exception {
+		viewForm =
+				openEditor(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<ViewForm>",
+						"  <ViewForm.topLeft>",
+						"    <Button wbp:name='button'/>",
+						"  </ViewForm.topLeft>",
+						"</ViewForm>");
+		ControlInfo button = getObjectByName("button");
+		// operation
+		doCopyPaste(button);
+		canvas.create();
+		canvas.target(viewForm).in(-0.1, 0.1).move();
+		canvas.click();
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<ViewForm>",
+				"  <ViewForm.topLeft>",
+				"    <Button wbp:name='button'/>",
+				"  </ViewForm.topLeft>",
+				"  <ViewForm.topRight>",
+				"    <Button/>",
+				"  </ViewForm.topRight>",
+				"</ViewForm>");
+	}
 
-  public void test_canvas_MOVE() throws Exception {
-    viewForm =
-        openEditor(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<ViewForm>",
-            "  <ViewForm.topLeft>",
-            "    <Button wbp:name='button'/>",
-            "  </ViewForm.topLeft>",
-            "</ViewForm>");
-    ControlInfo button = getObjectByName("button");
-    // move to "topRight"
-    canvas.beginMove(button);
-    canvas.target(viewForm).in(-0.1, 0.1).drag();
-    canvas.endDrag();
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<ViewForm>",
-        "  <ViewForm.topRight>",
-        "    <Button wbp:name='button'/>",
-        "  </ViewForm.topRight>",
-        "</ViewForm>");
-    // move to "content"
-    canvas.beginMove(button);
-    canvas.target(viewForm).in(0.3, 0.3).drag();
-    canvas.endDrag();
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<ViewForm>",
-        "  <ViewForm.content>",
-        "    <Button wbp:name='button'/>",
-        "  </ViewForm.content>",
-        "</ViewForm>");
-  }
+	public void test_canvas_MOVE() throws Exception {
+		viewForm =
+				openEditor(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<ViewForm>",
+						"  <ViewForm.topLeft>",
+						"    <Button wbp:name='button'/>",
+						"  </ViewForm.topLeft>",
+						"</ViewForm>");
+		ControlInfo button = getObjectByName("button");
+		// move to "topRight"
+		canvas.beginMove(button);
+		canvas.target(viewForm).in(-0.1, 0.1).drag();
+		canvas.endDrag();
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<ViewForm>",
+				"  <ViewForm.topRight>",
+				"    <Button wbp:name='button'/>",
+				"  </ViewForm.topRight>",
+				"</ViewForm>");
+		// move to "content"
+		canvas.beginMove(button);
+		canvas.target(viewForm).in(0.3, 0.3).drag();
+		canvas.endDrag();
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<ViewForm>",
+				"  <ViewForm.content>",
+				"    <Button wbp:name='button'/>",
+				"  </ViewForm.content>",
+				"</ViewForm>");
+	}
 
-  public void test_canvas_ADD() throws Exception {
-    openEditor(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <ViewForm wbp:name='viewForm'/>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    viewForm = getObjectByName("viewForm");
-    ControlInfo button = getObjectByName("button");
-    // move
-    canvas.beginMove(button);
-    canvas.target(viewForm).in(-0.1, 0.1).drag();
-    canvas.endDrag();
-    assertXML(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <ViewForm wbp:name='viewForm'>",
-        "    <ViewForm.topRight>",
-        "      <Button wbp:name='button'/>",
-        "    </ViewForm.topRight>",
-        "  </ViewForm>",
-        "</Shell>");
-  }
+	public void test_canvas_ADD() throws Exception {
+		openEditor(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <ViewForm wbp:name='viewForm'/>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		viewForm = getObjectByName("viewForm");
+		ControlInfo button = getObjectByName("button");
+		// move
+		canvas.beginMove(button);
+		canvas.target(viewForm).in(-0.1, 0.1).drag();
+		canvas.endDrag();
+		assertXML(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <ViewForm wbp:name='viewForm'>",
+				"    <ViewForm.topRight>",
+				"      <Button wbp:name='button'/>",
+				"    </ViewForm.topRight>",
+				"  </ViewForm>",
+				"</Shell>");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tree
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_tree_CREATE_topLeft() throws Exception {
-    prepare_canvas_CREATE();
-    // use tree
-    EditPart position = tree.getEditPart(viewForm).getChildren().get(0);
-    tree.moveBefore(position);
-    tree.moveOn(position).click();
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<ViewForm>",
-        "  <ViewForm.topLeft>",
-        "    <Button/>",
-        "  </ViewForm.topLeft>",
-        "</ViewForm>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tree
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_tree_CREATE_topLeft() throws Exception {
+		prepare_canvas_CREATE();
+		// use tree
+		EditPart position = tree.getEditPart(viewForm).getChildren().get(0);
+		tree.moveBefore(position);
+		tree.moveOn(position).click();
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<ViewForm>",
+				"  <ViewForm.topLeft>",
+				"    <Button/>",
+				"  </ViewForm.topLeft>",
+				"</ViewForm>");
+	}
 
-  public void test_tree_MOVE() throws Exception {
-    viewForm =
-        openEditor(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<ViewForm>",
-            "  <ViewForm.topLeft>",
-            "    <Button wbp:name='button'/>",
-            "  </ViewForm.topLeft>",
-            "</ViewForm>");
-    ControlInfo button = getObjectByName("button");
-    // use tree
-    EditPart position = tree.getEditPart(viewForm).getChildren().get(1);
-    tree.startDrag(button);
-    tree.dragOn(position).endDrag();
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<ViewForm>",
-        "  <ViewForm.topCenter>",
-        "    <Button wbp:name='button'/>",
-        "  </ViewForm.topCenter>",
-        "</ViewForm>");
-  }
+	public void test_tree_MOVE() throws Exception {
+		viewForm =
+				openEditor(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<ViewForm>",
+						"  <ViewForm.topLeft>",
+						"    <Button wbp:name='button'/>",
+						"  </ViewForm.topLeft>",
+						"</ViewForm>");
+		ControlInfo button = getObjectByName("button");
+		// use tree
+		EditPart position = tree.getEditPart(viewForm).getChildren().get(1);
+		tree.startDrag(button);
+		tree.dragOn(position).endDrag();
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<ViewForm>",
+				"  <ViewForm.topCenter>",
+				"    <Button wbp:name='button'/>",
+				"  </ViewForm.topCenter>",
+				"</ViewForm>");
+	}
 
-  public void test_tree_ADD() throws Exception {
-    openEditor(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <ViewForm wbp:name='viewForm'/>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    viewForm = getObjectByName("viewForm");
-    ControlInfo button = getObjectByName("button");
-    // use tree
-    EditPart position = tree.getEditPart(viewForm).getChildren().get(1);
-    tree.startDrag(button);
-    tree.dragOn(position).endDrag();
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <ViewForm wbp:name='viewForm'>",
-        "    <ViewForm.topCenter>",
-        "      <Button wbp:name='button'/>",
-        "    </ViewForm.topCenter>",
-        "  </ViewForm>",
-        "</Shell>");
-  }
+	public void test_tree_ADD() throws Exception {
+		openEditor(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <ViewForm wbp:name='viewForm'/>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		viewForm = getObjectByName("viewForm");
+		ControlInfo button = getObjectByName("button");
+		// use tree
+		EditPart position = tree.getEditPart(viewForm).getChildren().get(1);
+		tree.startDrag(button);
+		tree.dragOn(position).endDrag();
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <ViewForm wbp:name='viewForm'>",
+				"    <ViewForm.topCenter>",
+				"      <Button wbp:name='button'/>",
+				"    </ViewForm.topCenter>",
+				"  </ViewForm>",
+				"</Shell>");
+	}
 
-  public void test_tree_ADD2() throws Exception {
-    openEditor(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <FillLayout/>",
-        "  </Shell.layout>",
-        "  <ViewForm wbp:name='viewForm'/>",
-        "  <Button wbp:name='button_1'/>",
-        "  <Button wbp:name='button_2'/>",
-        "</Shell>");
-    viewForm = getObjectByName("viewForm");
-    ControlInfo button_1 = getObjectByName("button_1");
-    ControlInfo button_2 = getObjectByName("button_2");
-    // use tree
-    EditPart position = tree.getEditPart(viewForm).getChildren().get(1);
-    tree.startDrag(button_1, button_2);
-    tree.dragOn(position);
-    tree.assertCommandNull();
-    tree.endDrag();
-  }
+	public void test_tree_ADD2() throws Exception {
+		openEditor(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <FillLayout/>",
+				"  </Shell.layout>",
+				"  <ViewForm wbp:name='viewForm'/>",
+				"  <Button wbp:name='button_1'/>",
+				"  <Button wbp:name='button_2'/>",
+				"</Shell>");
+		viewForm = getObjectByName("viewForm");
+		ControlInfo button_1 = getObjectByName("button_1");
+		ControlInfo button_2 = getObjectByName("button_2");
+		// use tree
+		EditPart position = tree.getEditPart(viewForm).getChildren().get(1);
+		tree.startDrag(button_1, button_2);
+		tree.dragOn(position);
+		tree.assertCommandNull();
+		tree.endDrag();
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/ViewFormTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/ViewFormTest.java
index dbb41462c..8dc1635a7 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/ViewFormTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/ViewFormTest.java
@@ -28,307 +28,307 @@
  * @author scheglov_ke
  */
 public class ViewFormTest extends XwtModelTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_defaultProperties() throws Exception {
-    ViewFormInfo viewForm =
-        parse(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<ViewForm/>");
-    refresh();
-    // check default property values
-    assertSame(Boolean.FALSE, viewForm.getPropertyByTitle("borderVisible").getValue());
-    assertSame(Boolean.FALSE, viewForm.getPropertyByTitle("topCenterSeparate").getValue());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_defaultProperties() throws Exception {
+		ViewFormInfo viewForm =
+				parse(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<ViewForm/>");
+		refresh();
+		// check default property values
+		assertSame(Boolean.FALSE, viewForm.getPropertyByTitle("borderVisible").getValue());
+		assertSame(Boolean.FALSE, viewForm.getPropertyByTitle("topCenterSeparate").getValue());
+	}
 
-  /**
-   * No any children {@link ControlInfo}'s, so for all positions <code>null</code>.
-   */
-  public void test_childrenNo() throws Exception {
-    ViewFormInfo viewForm =
-        parse(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<ViewForm/>");
-    // no "real" Control's
-    assertNull(viewForm.getControl("noSuchMethod"));
-    assertNull(viewForm.getControl("content"));
-    assertNull(viewForm.getControl("topLeft"));
-    assertNull(viewForm.getControl("topCenter"));
-    assertNull(viewForm.getControl("topRight"));
-  }
+	/**
+	 * No any children {@link ControlInfo}'s, so for all positions <code>null</code>.
+	 */
+	public void test_childrenNo() throws Exception {
+		ViewFormInfo viewForm =
+				parse(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<ViewForm/>");
+		// no "real" Control's
+		assertNull(viewForm.getControl("noSuchMethod"));
+		assertNull(viewForm.getControl("content"));
+		assertNull(viewForm.getControl("topLeft"));
+		assertNull(viewForm.getControl("topCenter"));
+		assertNull(viewForm.getControl("topRight"));
+	}
 
-  /**
-   * Test for {@link ViewFormInfo#getControl(String)}.
-   */
-  public void test_children() throws Exception {
-    ViewFormInfo viewForm =
-        parse(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<ViewForm>",
-            "  <ViewForm.content>",
-            "    <Button wbp:name='button'/>",
-            "  </ViewForm.content>",
-            "</ViewForm>");
-    ControlInfo button = getObjectByName("button");
-    assertSame(button, viewForm.getControl("content"));
-  }
+	/**
+	 * Test for {@link ViewFormInfo#getControl(String)}.
+	 */
+	public void test_children() throws Exception {
+		ViewFormInfo viewForm =
+				parse(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<ViewForm>",
+						"  <ViewForm.content>",
+						"    <Button wbp:name='button'/>",
+						"  </ViewForm.content>",
+						"</ViewForm>");
+		ControlInfo button = getObjectByName("button");
+		assertSame(button, viewForm.getControl("content"));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Presentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Each {@link ControlInfo} text is decorated with its position method.
-   */
-  public void test_presentation_decorateText() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<ViewForm>",
-        "  <ViewForm.content>",
-        "    <Button wbp:name='button'/>",
-        "  </ViewForm.content>",
-        "</ViewForm>");
-    ControlInfo button = getObjectByName("button");
-    assertEquals("content - Button", ObjectsLabelProvider.INSTANCE.getText(button));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Presentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Each {@link ControlInfo} text is decorated with its position method.
+	 */
+	public void test_presentation_decorateText() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<ViewForm>",
+				"  <ViewForm.content>",
+				"    <Button wbp:name='button'/>",
+				"  </ViewForm.content>",
+				"</ViewForm>");
+		ControlInfo button = getObjectByName("button");
+		assertEquals("content - Button", ObjectsLabelProvider.INSTANCE.getText(button));
+	}
 
-  /**
-   * Even when no "real" {@link ControlInfo} children, tree still has {@link AbstractPositionInfo}
-   * placeholders.
-   */
-  public void test_AbstractPositionInfo_getChildrenTree_placeholders() throws Exception {
-    ViewFormInfo viewForm =
-        parse(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<ViewForm/>");
-    // no "real" Control's, but in "tree" we have position placeholder children
-    List<ObjectInfo> children = viewForm.getPresentation().getChildrenTree();
-    assertEquals(4, children.size());
-    assertEquals(4, GenericsUtils.select(children, AbstractPositionInfo.class).size());
-    // prepare "topLeft" position
-    AbstractPositionInfo positionTopLeft = (AbstractPositionInfo) children.get(0);
-    assertSame(viewForm, positionTopLeft.getComposite());
-    // check AbstractPosition_Info presentation
-    {
-      IObjectPresentation presentation = positionTopLeft.getPresentation();
-      assertNotNull(presentation.getIcon());
-      assertEquals("topLeft", presentation.getText());
-    }
-  }
+	/**
+	 * Even when no "real" {@link ControlInfo} children, tree still has {@link AbstractPositionInfo}
+	 * placeholders.
+	 */
+	public void test_AbstractPositionInfo_getChildrenTree_placeholders() throws Exception {
+		ViewFormInfo viewForm =
+				parse(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<ViewForm/>");
+		// no "real" Control's, but in "tree" we have position placeholder children
+		List<ObjectInfo> children = viewForm.getPresentation().getChildrenTree();
+		assertEquals(4, children.size());
+		assertEquals(4, GenericsUtils.select(children, AbstractPositionInfo.class).size());
+		// prepare "topLeft" position
+		AbstractPositionInfo positionTopLeft = (AbstractPositionInfo) children.get(0);
+		assertSame(viewForm, positionTopLeft.getComposite());
+		// check AbstractPosition_Info presentation
+		{
+			IObjectPresentation presentation = positionTopLeft.getPresentation();
+			assertNotNull(presentation.getIcon());
+			assertEquals("topLeft", presentation.getText());
+		}
+	}
 
-  /**
-   * "Tree" children of {@link ViewFormInfo} should be sorted in same order as "set" methods array
-   * passed to constructor.
-   */
-  public void test_AbstractPositionInfo_getChildrenTree_sortChildren() throws Exception {
-    ViewFormInfo viewForm =
-        parse(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<ViewForm>",
-            "  <ViewForm.topCenter>",
-            "    <Button wbp:name='button'/>",
-            "  </ViewForm.topCenter>",
-            "</ViewForm>");
-    ControlInfo button = getObjectByName("button");
-    // check "tree" children
-    List<ObjectInfo> children = viewForm.getPresentation().getChildrenTree();
-    assertEquals(4, children.size());
-    // index: 0
-    {
-      AbstractPositionInfo position = (AbstractPositionInfo) children.get(0);
-      assertEquals("topLeft", ObjectsLabelProvider.INSTANCE.getText(position));
-    }
-    // index: 1
-    assertSame(button, children.get(1));
-    // index: 2
-    {
-      AbstractPositionInfo position = (AbstractPositionInfo) children.get(2);
-      assertEquals("topRight", ObjectsLabelProvider.INSTANCE.getText(position));
-    }
-    // index: 3
-    {
-      AbstractPositionInfo position = (AbstractPositionInfo) children.get(3);
-      assertEquals("content", ObjectsLabelProvider.INSTANCE.getText(position));
-    }
-  }
+	/**
+	 * "Tree" children of {@link ViewFormInfo} should be sorted in same order as "set" methods array
+	 * passed to constructor.
+	 */
+	public void test_AbstractPositionInfo_getChildrenTree_sortChildren() throws Exception {
+		ViewFormInfo viewForm =
+				parse(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<ViewForm>",
+						"  <ViewForm.topCenter>",
+						"    <Button wbp:name='button'/>",
+						"  </ViewForm.topCenter>",
+						"</ViewForm>");
+		ControlInfo button = getObjectByName("button");
+		// check "tree" children
+		List<ObjectInfo> children = viewForm.getPresentation().getChildrenTree();
+		assertEquals(4, children.size());
+		// index: 0
+		{
+			AbstractPositionInfo position = (AbstractPositionInfo) children.get(0);
+			assertEquals("topLeft", ObjectsLabelProvider.INSTANCE.getText(position));
+		}
+		// index: 1
+		assertSame(button, children.get(1));
+		// index: 2
+		{
+			AbstractPositionInfo position = (AbstractPositionInfo) children.get(2);
+			assertEquals("topRight", ObjectsLabelProvider.INSTANCE.getText(position));
+		}
+		// index: 3
+		{
+			AbstractPositionInfo position = (AbstractPositionInfo) children.get(3);
+			assertEquals("content", ObjectsLabelProvider.INSTANCE.getText(position));
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Commands
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link ViewFormInfo#command_CREATE(ControlInfo, String)}.
-   */
-  public void test_CREATE() throws Exception {
-    ViewFormInfo viewForm =
-        parse(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<ViewForm/>");
-    //
-    ControlInfo button = createButton();
-    viewForm.command_CREATE(button, "content");
-    assertSame(button, viewForm.getControl("content"));
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<ViewForm>",
-        "  <ViewForm.content>",
-        "    <Button/>",
-        "  </ViewForm.content>",
-        "</ViewForm>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Commands
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link ViewFormInfo#command_CREATE(ControlInfo, String)}.
+	 */
+	public void test_CREATE() throws Exception {
+		ViewFormInfo viewForm =
+				parse(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<ViewForm/>");
+		//
+		ControlInfo button = createButton();
+		viewForm.command_CREATE(button, "content");
+		assertSame(button, viewForm.getControl("content"));
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<ViewForm>",
+				"  <ViewForm.content>",
+				"    <Button/>",
+				"  </ViewForm.content>",
+				"</ViewForm>");
+	}
 
-  /**
-   * Test for {@link ViewFormInfo#command_MOVE(ControlInfo, String)}.
-   * <p>
-   * "Move" into different position.
-   */
-  public void test_MOVE_1() throws Exception {
-    ViewFormInfo viewForm =
-        parse(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<ViewForm>",
-            "  <ViewForm.content>",
-            "    <Button wbp:name='button'/>",
-            "  </ViewForm.content>",
-            "</ViewForm>");
-    ControlInfo button = getObjectByName("button");
-    // initially "button" has position "content"
-    assertSame(button, viewForm.getControl("content"));
-    // do move
-    viewForm.command_MOVE(button, "topLeft");
-    // now "button" is in "topLeft"
-    assertNull(viewForm.getControl("content"));
-    assertSame(button, viewForm.getControl("topLeft"));
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<ViewForm>",
-        "  <ViewForm.topLeft>",
-        "    <Button wbp:name='button'/>",
-        "  </ViewForm.topLeft>",
-        "</ViewForm>");
-  }
+	/**
+	 * Test for {@link ViewFormInfo#command_MOVE(ControlInfo, String)}.
+	 * <p>
+	 * "Move" into different position.
+	 */
+	public void test_MOVE_1() throws Exception {
+		ViewFormInfo viewForm =
+				parse(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<ViewForm>",
+						"  <ViewForm.content>",
+						"    <Button wbp:name='button'/>",
+						"  </ViewForm.content>",
+						"</ViewForm>");
+		ControlInfo button = getObjectByName("button");
+		// initially "button" has position "content"
+		assertSame(button, viewForm.getControl("content"));
+		// do move
+		viewForm.command_MOVE(button, "topLeft");
+		// now "button" is in "topLeft"
+		assertNull(viewForm.getControl("content"));
+		assertSame(button, viewForm.getControl("topLeft"));
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<ViewForm>",
+				"  <ViewForm.topLeft>",
+				"    <Button wbp:name='button'/>",
+				"  </ViewForm.topLeft>",
+				"</ViewForm>");
+	}
 
-  /**
-   * Test for {@link ViewFormInfo#command_MOVE(ControlInfo, String)}.
-   * <p>
-   * Move into {@link ViewFormInfo}.
-   */
-  public void test_MOVE_2() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <RowLayout/>",
-        "  </Shell.layout>",
-        "  <ViewForm wbp:name='viewForm'/>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-    ViewFormInfo viewForm = getObjectByName("viewForm");
-    ControlInfo button = getObjectByName("button");
-    //
-    viewForm.command_MOVE(button, "topLeft");
-    assertXML(
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <RowLayout/>",
-        "  </Shell.layout>",
-        "  <ViewForm wbp:name='viewForm'>",
-        "    <ViewForm.topLeft>",
-        "      <Button wbp:name='button'/>",
-        "    </ViewForm.topLeft>",
-        "  </ViewForm>",
-        "</Shell>");
-  }
+	/**
+	 * Test for {@link ViewFormInfo#command_MOVE(ControlInfo, String)}.
+	 * <p>
+	 * Move into {@link ViewFormInfo}.
+	 */
+	public void test_MOVE_2() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <RowLayout/>",
+				"  </Shell.layout>",
+				"  <ViewForm wbp:name='viewForm'/>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+		ViewFormInfo viewForm = getObjectByName("viewForm");
+		ControlInfo button = getObjectByName("button");
+		//
+		viewForm.command_MOVE(button, "topLeft");
+		assertXML(
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <RowLayout/>",
+				"  </Shell.layout>",
+				"  <ViewForm wbp:name='viewForm'>",
+				"    <ViewForm.topLeft>",
+				"      <Button wbp:name='button'/>",
+				"    </ViewForm.topLeft>",
+				"  </ViewForm>",
+				"</Shell>");
+	}
 
-  /**
-   * Test for {@link ViewFormInfo#command_MOVE(ControlInfo, String)}.
-   * <p>
-   * Move from {@link ViewFormInfo}.
-   */
-  public void test_MOVE_3() throws Exception {
-    CompositeInfo shell =
-        parse(
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <RowLayout/>",
-            "  </Shell.layout>",
-            "  <ViewForm wbp:name='viewForm'>",
-            "    <ViewForm.topLeft>",
-            "      <Button wbp:name='button'/>",
-            "    </ViewForm.topLeft>",
-            "  </ViewForm>",
-            "</Shell>");
-    refresh();
-    ControlInfo button = getObjectByName("button");
-    //
-    shell.getLayout().command_MOVE(button, null);
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <RowLayout/>",
-        "  </Shell.layout>",
-        "  <ViewForm wbp:name='viewForm'/>",
-        "  <Button wbp:name='button'/>",
-        "</Shell>");
-  }
+	/**
+	 * Test for {@link ViewFormInfo#command_MOVE(ControlInfo, String)}.
+	 * <p>
+	 * Move from {@link ViewFormInfo}.
+	 */
+	public void test_MOVE_3() throws Exception {
+		CompositeInfo shell =
+				parse(
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <RowLayout/>",
+						"  </Shell.layout>",
+						"  <ViewForm wbp:name='viewForm'>",
+						"    <ViewForm.topLeft>",
+						"      <Button wbp:name='button'/>",
+						"    </ViewForm.topLeft>",
+						"  </ViewForm>",
+						"</Shell>");
+		refresh();
+		ControlInfo button = getObjectByName("button");
+		//
+		shell.getLayout().command_MOVE(button, null);
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <RowLayout/>",
+				"  </Shell.layout>",
+				"  <ViewForm wbp:name='viewForm'/>",
+				"  <Button wbp:name='button'/>",
+				"</Shell>");
+	}
 
-  /**
-   * Test for {@link ViewFormInfo#command_MOVE(ControlInfo, String)}.
-   * <p>
-   * After moving of {@link ControlInfo}'s into new position it should be places in same order, as
-   * "position" properties.
-   */
-  public void test_MOVE_4() throws Exception {
-    ViewFormInfo viewForm =
-        parse(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<ViewForm>",
-            "  <ViewForm.topCenter>",
-            "    <Button/>",
-            "  </ViewForm.topCenter>",
-            "  <ViewForm.topRight>",
-            "    <Button wbp:name='button'/>",
-            "  </ViewForm.topRight>",
-            "</ViewForm>");
-    ControlInfo button = getObjectByName("button");
-    //
-    viewForm.command_MOVE(button, "topLeft");
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<ViewForm>",
-        "  <ViewForm.topLeft>",
-        "    <Button wbp:name='button'/>",
-        "  </ViewForm.topLeft>",
-        "  <ViewForm.topCenter>",
-        "    <Button/>",
-        "  </ViewForm.topCenter>",
-        "</ViewForm>");
-  }
+	/**
+	 * Test for {@link ViewFormInfo#command_MOVE(ControlInfo, String)}.
+	 * <p>
+	 * After moving of {@link ControlInfo}'s into new position it should be places in same order, as
+	 * "position" properties.
+	 */
+	public void test_MOVE_4() throws Exception {
+		ViewFormInfo viewForm =
+				parse(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<ViewForm>",
+						"  <ViewForm.topCenter>",
+						"    <Button/>",
+						"  </ViewForm.topCenter>",
+						"  <ViewForm.topRight>",
+						"    <Button wbp:name='button'/>",
+						"  </ViewForm.topRight>",
+						"</ViewForm>");
+		ControlInfo button = getObjectByName("button");
+		//
+		viewForm.command_MOVE(button, "topLeft");
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<ViewForm>",
+				"  <ViewForm.topLeft>",
+				"    <Button wbp:name='button'/>",
+				"  </ViewForm.topLeft>",
+				"  <ViewForm.topCenter>",
+				"    <Button/>",
+				"  </ViewForm.topCenter>",
+				"</ViewForm>");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/WidgetTests.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/WidgetTests.java
index c8c2156b8..0e3f8ff47 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/WidgetTests.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/WidgetTests.java
@@ -22,39 +22,39 @@
  * @author scheglov_ke
  */
 public class WidgetTests extends DesignerSuiteTests {
-  public static Test suite() {
-    TestSuite suite = new TestSuite("org.eclipse.wb.xwt.model.widgets");
-    suite.addTest(createSingleSuite(ControlTest.class));
-    suite.addTest(createSingleSuite(ButtonTest.class));
-    suite.addTest(createSingleSuite(CompositeTest.class));
-    suite.addTest(createSingleSuite(CompositeGefTest.class));
-    suite.addTest(createSingleSuite(CompositeTopBoundsSupportTest.class));
-    suite.addTest(createSingleSuite(ControlLiveManagerTest.class));
-    suite.addTest(createSingleSuite(SashFormTest.class));
-    suite.addTest(createSingleSuite(SashFormGefTest.class));
-    suite.addTest(createSingleSuite(TabFolderTest.class));
-    suite.addTest(createSingleSuite(TabFolderGefTest.class));
-    suite.addTest(createSingleSuite(CTabFolderTest.class));
-    suite.addTest(createSingleSuite(CTabFolderGefTest.class));
-    suite.addTest(createSingleSuite(ViewFormTest.class));
-    suite.addTest(createSingleSuite(ViewFormGefTest.class));
-    suite.addTest(createSingleSuite(CBannerTest.class));
-    suite.addTest(createSingleSuite(CBannerGefTest.class));
-    suite.addTest(createSingleSuite(ListTest.class));
-    suite.addTest(createSingleSuite(TableTest.class));
-    suite.addTest(createSingleSuite(TableGefTest.class));
-    suite.addTest(createSingleSuite(TreeTest.class));
-    suite.addTest(createSingleSuite(TreeGefTest.class));
-    suite.addTest(createSingleSuite(ToolBarTest.class));
-    suite.addTest(createSingleSuite(ToolBarGefTest.class));
-    suite.addTest(createSingleSuite(CoolBarTest.class));
-    suite.addTest(createSingleSuite(CoolBarGefTest.class));
-    suite.addTest(createSingleSuite(ExpandBarTest.class));
-    suite.addTest(createSingleSuite(DragSourceTest.class));
-    suite.addTest(createSingleSuite(DragSourceGefTest.class));
-    suite.addTest(createSingleSuite(DropTargetTest.class));
-    suite.addTest(createSingleSuite(DropTargetGefTest.class));
-    suite.addTest(MenuTests.suite());
-    return suite;
-  }
+	public static Test suite() {
+		TestSuite suite = new TestSuite("org.eclipse.wb.xwt.model.widgets");
+		suite.addTest(createSingleSuite(ControlTest.class));
+		suite.addTest(createSingleSuite(ButtonTest.class));
+		suite.addTest(createSingleSuite(CompositeTest.class));
+		suite.addTest(createSingleSuite(CompositeGefTest.class));
+		suite.addTest(createSingleSuite(CompositeTopBoundsSupportTest.class));
+		suite.addTest(createSingleSuite(ControlLiveManagerTest.class));
+		suite.addTest(createSingleSuite(SashFormTest.class));
+		suite.addTest(createSingleSuite(SashFormGefTest.class));
+		suite.addTest(createSingleSuite(TabFolderTest.class));
+		suite.addTest(createSingleSuite(TabFolderGefTest.class));
+		suite.addTest(createSingleSuite(CTabFolderTest.class));
+		suite.addTest(createSingleSuite(CTabFolderGefTest.class));
+		suite.addTest(createSingleSuite(ViewFormTest.class));
+		suite.addTest(createSingleSuite(ViewFormGefTest.class));
+		suite.addTest(createSingleSuite(CBannerTest.class));
+		suite.addTest(createSingleSuite(CBannerGefTest.class));
+		suite.addTest(createSingleSuite(ListTest.class));
+		suite.addTest(createSingleSuite(TableTest.class));
+		suite.addTest(createSingleSuite(TableGefTest.class));
+		suite.addTest(createSingleSuite(TreeTest.class));
+		suite.addTest(createSingleSuite(TreeGefTest.class));
+		suite.addTest(createSingleSuite(ToolBarTest.class));
+		suite.addTest(createSingleSuite(ToolBarGefTest.class));
+		suite.addTest(createSingleSuite(CoolBarTest.class));
+		suite.addTest(createSingleSuite(CoolBarGefTest.class));
+		suite.addTest(createSingleSuite(ExpandBarTest.class));
+		suite.addTest(createSingleSuite(DragSourceTest.class));
+		suite.addTest(createSingleSuite(DragSourceGefTest.class));
+		suite.addTest(createSingleSuite(DropTargetTest.class));
+		suite.addTest(createSingleSuite(DropTargetGefTest.class));
+		suite.addTest(MenuTests.suite());
+		return suite;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/menu/MenuGefTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/menu/MenuGefTest.java
index cb676bb21..f3c6dbcdb 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/menu/MenuGefTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/menu/MenuGefTest.java
@@ -21,222 +21,222 @@
  * @author scheglov_ke
  */
 public class MenuGefTest extends XwtGefTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_CREATE_notMenu() throws Exception {
-    ShellInfo shell = openEditor("<Shell/>");
-    //
-    loadCreationTool("java.lang.Object");
-    {
-      canvas.moveTo(shell, 0.5, 0.5);
-      canvas.assertCommandNull();
-    }
-    {
-      tree.moveOn(shell);
-      tree.assertCommandNull();
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_CREATE_notMenu() throws Exception {
+		ShellInfo shell = openEditor("<Shell/>");
+		//
+		loadCreationTool("java.lang.Object");
+		{
+			canvas.moveTo(shell, 0.5, 0.5);
+			canvas.assertCommandNull();
+		}
+		{
+			tree.moveOn(shell);
+			tree.assertCommandNull();
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // BAR
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_bar_CREATE_canvas() throws Exception {
-    ShellInfo shell = openEditor("<Shell/>");
-    //
-    loadCreationTool("org.eclipse.swt.widgets.Menu", "bar");
-    canvas.moveTo(shell, 0.5, 0.5);
-    canvas.assertCommandNotNull();
-    canvas.click();
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.menuBar>",
-        "    <Menu x:Style='BAR'/>",
-        "  </Shell.menuBar>",
-        "</Shell>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// BAR
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_bar_CREATE_canvas() throws Exception {
+		ShellInfo shell = openEditor("<Shell/>");
+		//
+		loadCreationTool("org.eclipse.swt.widgets.Menu", "bar");
+		canvas.moveTo(shell, 0.5, 0.5);
+		canvas.assertCommandNotNull();
+		canvas.click();
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.menuBar>",
+				"    <Menu x:Style='BAR'/>",
+				"  </Shell.menuBar>",
+				"</Shell>");
+	}
 
-  public void test_bar_CREATE_tree() throws Exception {
-    ShellInfo shell = openEditor("<Shell/>");
-    //
-    loadCreationTool("org.eclipse.swt.widgets.Menu", "bar");
-    tree.moveOn(shell);
-    tree.assertCommandNotNull();
-    tree.click();
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.menuBar>",
-        "    <Menu x:Style='BAR'/>",
-        "  </Shell.menuBar>",
-        "</Shell>");
-  }
+	public void test_bar_CREATE_tree() throws Exception {
+		ShellInfo shell = openEditor("<Shell/>");
+		//
+		loadCreationTool("org.eclipse.swt.widgets.Menu", "bar");
+		tree.moveOn(shell);
+		tree.assertCommandNotNull();
+		tree.click();
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.menuBar>",
+				"    <Menu x:Style='BAR'/>",
+				"  </Shell.menuBar>",
+				"</Shell>");
+	}
 
-  public void test_bar_CREATE_hasBar() throws Exception {
-    ShellInfo shell =
-        openEditor(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Shell.menuBar>",
-            "    <Menu x:Style='BAR'/>",
-            "  </Shell.menuBar>",
-            "</Shell>");
-    //
-    loadCreationTool("org.eclipse.swt.widgets.Menu", "bar");
-    {
-      canvas.moveTo(shell, 0.5, 0.5);
-      canvas.assertCommandNull();
-    }
-    {
-      tree.moveOn(shell);
-      tree.assertCommandNull();
-    }
-  }
+	public void test_bar_CREATE_hasBar() throws Exception {
+		ShellInfo shell =
+				openEditor(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Shell.menuBar>",
+						"    <Menu x:Style='BAR'/>",
+						"  </Shell.menuBar>",
+						"</Shell>");
+		//
+		loadCreationTool("org.eclipse.swt.widgets.Menu", "bar");
+		{
+			canvas.moveTo(shell, 0.5, 0.5);
+			canvas.assertCommandNull();
+		}
+		{
+			tree.moveOn(shell);
+			tree.assertCommandNull();
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // POP_UP
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_popup_CREATE_canvas() throws Exception {
-    ShellInfo shell = openEditor("<Shell/>");
-    //
-    loadCreationTool("org.eclipse.swt.widgets.Menu");
-    canvas.moveTo(shell, 0.5, 0.5);
-    canvas.assertFeedbacks(canvas.getTargetPredicate(shell));
-    canvas.assertCommandNotNull();
-    canvas.click();
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.menu>",
-        "    <Menu/>",
-        "  </Shell.menu>",
-        "</Shell>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// POP_UP
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_popup_CREATE_canvas() throws Exception {
+		ShellInfo shell = openEditor("<Shell/>");
+		//
+		loadCreationTool("org.eclipse.swt.widgets.Menu");
+		canvas.moveTo(shell, 0.5, 0.5);
+		canvas.assertFeedbacks(canvas.getTargetPredicate(shell));
+		canvas.assertCommandNotNull();
+		canvas.click();
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.menu>",
+				"    <Menu/>",
+				"  </Shell.menu>",
+				"</Shell>");
+	}
 
-  public void test_popup_CREATE_tree() throws Exception {
-    ShellInfo shell = openEditor("<Shell/>");
-    //
-    loadCreationTool("org.eclipse.swt.widgets.Menu");
-    tree.moveOn(shell);
-    tree.assertCommandNotNull();
-    tree.click();
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.menu>",
-        "    <Menu/>",
-        "  </Shell.menu>",
-        "</Shell>");
-  }
+	public void test_popup_CREATE_tree() throws Exception {
+		ShellInfo shell = openEditor("<Shell/>");
+		//
+		loadCreationTool("org.eclipse.swt.widgets.Menu");
+		tree.moveOn(shell);
+		tree.assertCommandNotNull();
+		tree.click();
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.menu>",
+				"    <Menu/>",
+				"  </Shell.menu>",
+				"</Shell>");
+	}
 
-  public void test_popup_CREATE_hasPopup() throws Exception {
-    ShellInfo shell =
-        openEditor(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Shell.menu>",
-            "    <Menu/>",
-            "  </Shell.menu>",
-            "</Shell>");
-    //
-    loadCreationTool("org.eclipse.swt.widgets.Menu");
-    {
-      canvas.moveTo(shell, 0.5, 0.5);
-      canvas.assertFeedbacks(canvas.getTargetPredicate(shell));
-      canvas.assertCommandNull();
-    }
-    {
-      tree.moveOn(shell);
-      tree.assertCommandNull();
-    }
-  }
+	public void test_popup_CREATE_hasPopup() throws Exception {
+		ShellInfo shell =
+				openEditor(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Shell.menu>",
+						"    <Menu/>",
+						"  </Shell.menu>",
+						"</Shell>");
+		//
+		loadCreationTool("org.eclipse.swt.widgets.Menu");
+		{
+			canvas.moveTo(shell, 0.5, 0.5);
+			canvas.assertFeedbacks(canvas.getTargetPredicate(shell));
+			canvas.assertCommandNull();
+		}
+		{
+			tree.moveOn(shell);
+			tree.assertCommandNull();
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // MenuItem
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_barItem_CREATE_canvas() throws Exception {
-    openEditor(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.menuBar>",
-        "    <Menu x:Style='BAR'>",
-        "      <MenuItem wbp:name='item' text='Existing item'/>",
-        "    </Menu>",
-        "  </Shell.menuBar>",
-        "</Shell>");
-    XmlObjectInfo item = getObjectByName("item");
-    //
-    XmlObjectInfo newItem = loadCreationTool("org.eclipse.swt.widgets.MenuItem");
-    canvas.moveTo(item, 0.1, 0.5);
-    canvas.assertCommandNotNull();
-    canvas.click();
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.menuBar>",
-        "    <Menu x:Style='BAR'>",
-        "      <MenuItem text='New Item'/>",
-        "      <MenuItem wbp:name='item' text='Existing item'/>",
-        "    </Menu>",
-        "  </Shell.menuBar>",
-        "</Shell>");
-    canvas.assertPrimarySelected(newItem);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// MenuItem
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_barItem_CREATE_canvas() throws Exception {
+		openEditor(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.menuBar>",
+				"    <Menu x:Style='BAR'>",
+				"      <MenuItem wbp:name='item' text='Existing item'/>",
+				"    </Menu>",
+				"  </Shell.menuBar>",
+				"</Shell>");
+		XmlObjectInfo item = getObjectByName("item");
+		//
+		XmlObjectInfo newItem = loadCreationTool("org.eclipse.swt.widgets.MenuItem");
+		canvas.moveTo(item, 0.1, 0.5);
+		canvas.assertCommandNotNull();
+		canvas.click();
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.menuBar>",
+				"    <Menu x:Style='BAR'>",
+				"      <MenuItem text='New Item'/>",
+				"      <MenuItem wbp:name='item' text='Existing item'/>",
+				"    </Menu>",
+				"  </Shell.menuBar>",
+				"</Shell>");
+		canvas.assertPrimarySelected(newItem);
+	}
 
-  public void test_barItem_CREATE_tree() throws Exception {
-    openEditor(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.menuBar>",
-        "    <Menu x:Style='BAR'>",
-        "      <MenuItem wbp:name='item' text='Existing item'/>",
-        "    </Menu>",
-        "  </Shell.menuBar>",
-        "</Shell>");
-    XmlObjectInfo item = getObjectByName("item");
-    //
-    XmlObjectInfo newItem = loadCreationTool("org.eclipse.swt.widgets.MenuItem");
-    tree.moveBefore(item);
-    tree.assertCommandNotNull();
-    tree.click();
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.menuBar>",
-        "    <Menu x:Style='BAR'>",
-        "      <MenuItem text='New Item'/>",
-        "      <MenuItem wbp:name='item' text='Existing item'/>",
-        "    </Menu>",
-        "  </Shell.menuBar>",
-        "</Shell>");
-    tree.assertPrimarySelected(newItem);
-  }
+	public void test_barItem_CREATE_tree() throws Exception {
+		openEditor(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.menuBar>",
+				"    <Menu x:Style='BAR'>",
+				"      <MenuItem wbp:name='item' text='Existing item'/>",
+				"    </Menu>",
+				"  </Shell.menuBar>",
+				"</Shell>");
+		XmlObjectInfo item = getObjectByName("item");
+		//
+		XmlObjectInfo newItem = loadCreationTool("org.eclipse.swt.widgets.MenuItem");
+		tree.moveBefore(item);
+		tree.assertCommandNotNull();
+		tree.click();
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.menuBar>",
+				"    <Menu x:Style='BAR'>",
+				"      <MenuItem text='New Item'/>",
+				"      <MenuItem wbp:name='item' text='Existing item'/>",
+				"    </Menu>",
+				"  </Shell.menuBar>",
+				"</Shell>");
+		tree.assertPrimarySelected(newItem);
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/menu/MenuItemTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/menu/MenuItemTest.java
index 43a5d50b2..c13c22be5 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/menu/MenuItemTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/menu/MenuItemTest.java
@@ -36,521 +36,521 @@
  * @author scheglov_ke
  */
 public class MenuItemTest extends XwtModelTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Parse
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for parsing {@link MenuInfo}, {@link MenuItemInfo} and its basic properties.
-   */
-  public void test_parse() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.menuBar>",
-        "    <Menu wbp:name='menuBar' x:style='BAR'>",
-        "      <MenuItem wbp:name='item_1'/>",
-        "      <MenuItem wbp:name='item_2' x:Style='CASCADE'>",
-        "        <MenuItem.menu>",
-        "          <Menu wbp:name='subMenu'/>",
-        "        </MenuItem.menu>",
-        "      </MenuItem>",
-        "    </Menu>",
-        "  </Shell.menuBar>",
-        "</Shell>");
-    refresh();
-    // prepare models
-    MenuInfo menuBar = getObjectByName("menuBar");
-    MenuItemInfo item_1 = getObjectByName("item_1");
-    MenuItemInfo item_2 = getObjectByName("item_2");
-    MenuInfo subMenu = getObjectByName("subMenu");
-    // check items
-    List<MenuItemInfo> items = menuBar.getItems();
-    assertThat(items).containsExactly(item_1, item_2);
-    // "item_1" has no subMenu
-    assertSame(null, item_1.getSubMenu());
-    // "item_2" has subMenu
-    assertSame(subMenu, item_2.getSubMenu());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Parse
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for parsing {@link MenuInfo}, {@link MenuItemInfo} and its basic properties.
+	 */
+	public void test_parse() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.menuBar>",
+				"    <Menu wbp:name='menuBar' x:style='BAR'>",
+				"      <MenuItem wbp:name='item_1'/>",
+				"      <MenuItem wbp:name='item_2' x:Style='CASCADE'>",
+				"        <MenuItem.menu>",
+				"          <Menu wbp:name='subMenu'/>",
+				"        </MenuItem.menu>",
+				"      </MenuItem>",
+				"    </Menu>",
+				"  </Shell.menuBar>",
+				"</Shell>");
+		refresh();
+		// prepare models
+		MenuInfo menuBar = getObjectByName("menuBar");
+		MenuItemInfo item_1 = getObjectByName("item_1");
+		MenuItemInfo item_2 = getObjectByName("item_2");
+		MenuInfo subMenu = getObjectByName("subMenu");
+		// check items
+		List<MenuItemInfo> items = menuBar.getItems();
+		assertThat(items).containsExactly(item_1, item_2);
+		// "item_1" has no subMenu
+		assertSame(null, item_1.getSubMenu());
+		// "item_2" has subMenu
+		assertSame(subMenu, item_2.getSubMenu());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Style
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link MenuItemLiveManager}.
-   */
-  public void test_liveStyle() throws Exception {
-    parse("<Shell/>");
-    // NONE
-    {
-      WidgetInfo menuItem = createObject("org.eclipse.swt.widgets.MenuItem");
-      int actualStyle = menuItem.getStyle();
-      assertTrue(
-          "SWT.PUSH bit expected, but " + Integer.toHexString(actualStyle) + " found.",
-          (actualStyle & SWT.PUSH) == SWT.PUSH);
-      assertFalse("Not SWT.CASCADE bit expected, but "
-          + Integer.toHexString(actualStyle)
-          + " found.", (actualStyle & SWT.CASCADE) == SWT.CASCADE);
-    }
-    // CHECK
-    {
-      WidgetInfo menuItem = createObject("org.eclipse.swt.widgets.MenuItem", "check");
-      int actualStyle = menuItem.getStyle();
-      assertTrue(
-          "SWT.CHECK bit expected, but " + Integer.toHexString(actualStyle) + " found.",
-          (actualStyle & SWT.CHECK) == SWT.CHECK);
-    }
-    // RADIO
-    {
-      WidgetInfo menuItem = createObject("org.eclipse.swt.widgets.MenuItem", "radio");
-      int actualStyle = menuItem.getStyle();
-      assertTrue(
-          "SWT.RADIO bit expected, but " + Integer.toHexString(actualStyle) + " found.",
-          (actualStyle & SWT.RADIO) == SWT.RADIO);
-    }
-    // CASCADE
-    {
-      WidgetInfo menuItem = createObject("org.eclipse.swt.widgets.MenuItem", "cascade");
-      int actualStyle = menuItem.getStyle();
-      assertTrue(
-          "SWT.CASCADE bit expected, but " + Integer.toHexString(actualStyle) + " found.",
-          (actualStyle & SWT.CASCADE) == SWT.CASCADE);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Style
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link MenuItemLiveManager}.
+	 */
+	public void test_liveStyle() throws Exception {
+		parse("<Shell/>");
+		// NONE
+		{
+			WidgetInfo menuItem = createObject("org.eclipse.swt.widgets.MenuItem");
+			int actualStyle = menuItem.getStyle();
+			assertTrue(
+					"SWT.PUSH bit expected, but " + Integer.toHexString(actualStyle) + " found.",
+					(actualStyle & SWT.PUSH) == SWT.PUSH);
+			assertFalse("Not SWT.CASCADE bit expected, but "
+					+ Integer.toHexString(actualStyle)
+					+ " found.", (actualStyle & SWT.CASCADE) == SWT.CASCADE);
+		}
+		// CHECK
+		{
+			WidgetInfo menuItem = createObject("org.eclipse.swt.widgets.MenuItem", "check");
+			int actualStyle = menuItem.getStyle();
+			assertTrue(
+					"SWT.CHECK bit expected, but " + Integer.toHexString(actualStyle) + " found.",
+					(actualStyle & SWT.CHECK) == SWT.CHECK);
+		}
+		// RADIO
+		{
+			WidgetInfo menuItem = createObject("org.eclipse.swt.widgets.MenuItem", "radio");
+			int actualStyle = menuItem.getStyle();
+			assertTrue(
+					"SWT.RADIO bit expected, but " + Integer.toHexString(actualStyle) + " found.",
+					(actualStyle & SWT.RADIO) == SWT.RADIO);
+		}
+		// CASCADE
+		{
+			WidgetInfo menuItem = createObject("org.eclipse.swt.widgets.MenuItem", "cascade");
+			int actualStyle = menuItem.getStyle();
+			assertTrue(
+					"SWT.CASCADE bit expected, but " + Integer.toHexString(actualStyle) + " found.",
+					(actualStyle & SWT.CASCADE) == SWT.CASCADE);
+		}
+	}
 
-  /**
-   * Test for {@link MenuItemStylePresentation}.
-   */
-  public void test_MenuItemStylePresentation() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.menuBar>",
-        "    <Menu wbp:name='menuBar' x:style='BAR'>",
-        "      <MenuItem x:Style='NONE'/>",
-        "      <MenuItem x:Style='PUSH'/>",
-        "      <MenuItem x:Style='CHECK'/>",
-        "      <MenuItem x:Style='RADIO'/>",
-        "      <MenuItem x:Style='SEPARATOR'/>",
-        "    </Menu>",
-        "  </Shell.menuBar>",
-        "</Shell>");
-    refresh();
-    // prepare models
-    MenuInfo menuBar = getObjectByName("menuBar");
-    List<MenuItemInfo> menuItems = menuBar.getItems();
-    MenuItemInfo itemDefault = menuItems.get(0);
-    MenuItemInfo itemPush = menuItems.get(1);
-    MenuItemInfo itemCheck = menuItems.get(2);
-    MenuItemInfo itemRadio = menuItems.get(3);
-    MenuItemInfo itemSeparator = menuItems.get(4);
-    // test icons
-    assertSame(itemDefault.getPresentation().getIcon(), itemPush.getPresentation().getIcon());
-    assertNotSame(itemDefault.getPresentation().getIcon(), itemCheck.getPresentation().getIcon());
-    assertNotSame(itemDefault.getPresentation().getIcon(), itemRadio.getPresentation().getIcon());
-    assertNotSame(
-        itemDefault.getPresentation().getIcon(),
-        itemSeparator.getPresentation().getIcon());
-    // test text
-    assertEquals("MenuItem", itemDefault.getPresentation().getText());
-    assertEquals("<separator>", itemSeparator.getPresentation().getText());
-  }
+	/**
+	 * Test for {@link MenuItemStylePresentation}.
+	 */
+	public void test_MenuItemStylePresentation() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.menuBar>",
+				"    <Menu wbp:name='menuBar' x:style='BAR'>",
+				"      <MenuItem x:Style='NONE'/>",
+				"      <MenuItem x:Style='PUSH'/>",
+				"      <MenuItem x:Style='CHECK'/>",
+				"      <MenuItem x:Style='RADIO'/>",
+				"      <MenuItem x:Style='SEPARATOR'/>",
+				"    </Menu>",
+				"  </Shell.menuBar>",
+				"</Shell>");
+		refresh();
+		// prepare models
+		MenuInfo menuBar = getObjectByName("menuBar");
+		List<MenuItemInfo> menuItems = menuBar.getItems();
+		MenuItemInfo itemDefault = menuItems.get(0);
+		MenuItemInfo itemPush = menuItems.get(1);
+		MenuItemInfo itemCheck = menuItems.get(2);
+		MenuItemInfo itemRadio = menuItems.get(3);
+		MenuItemInfo itemSeparator = menuItems.get(4);
+		// test icons
+		assertSame(itemDefault.getPresentation().getIcon(), itemPush.getPresentation().getIcon());
+		assertNotSame(itemDefault.getPresentation().getIcon(), itemCheck.getPresentation().getIcon());
+		assertNotSame(itemDefault.getPresentation().getIcon(), itemRadio.getPresentation().getIcon());
+		assertNotSame(
+				itemDefault.getPresentation().getIcon(),
+				itemSeparator.getPresentation().getIcon());
+		// test text
+		assertEquals("MenuItem", itemDefault.getPresentation().getText());
+		assertEquals("<separator>", itemSeparator.getPresentation().getText());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Impl
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test that {@link MenuItemInfo} can be adapted to {@link IMenuItemInfo}.
-   */
-  public void test_impl() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.menuBar>",
-        "    <Menu x:style='BAR'>",
-        "      <MenuItem wbp:name='item' x:Style='CASCADE'>",
-        "        <MenuItem.menu>",
-        "          <Menu wbp:name='subMenu'/>",
-        "        </MenuItem.menu>",
-        "      </MenuItem>",
-        "    </Menu>",
-        "  </Shell.menuBar>",
-        "</Shell>");
-    refresh();
-    // prepare models
-    MenuItemInfo itemInfo = getObjectByName("item");
-    MenuInfo menuInfo = itemInfo.getSubMenu();
-    // no adapter for random Class
-    assertNull(itemInfo.getAdapter(List.class));
-    // check "impl"
-    {
-      IMenuItemInfo itemObject = itemInfo.getAdapter(IMenuItemInfo.class);
-      // IMenuItemInfo
-      assertSame(itemInfo, itemObject.getModel());
-      assertSame(MenuObjectInfoUtils.getMenuInfo(menuInfo), itemObject.getMenu());
-      // presentation
-      assertSame(itemInfo.getImage(), itemObject.getImage());
-      assertSame(itemInfo.getBounds(), itemObject.getBounds());
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Impl
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test that {@link MenuItemInfo} can be adapted to {@link IMenuItemInfo}.
+	 */
+	public void test_impl() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.menuBar>",
+				"    <Menu x:style='BAR'>",
+				"      <MenuItem wbp:name='item' x:Style='CASCADE'>",
+				"        <MenuItem.menu>",
+				"          <Menu wbp:name='subMenu'/>",
+				"        </MenuItem.menu>",
+				"      </MenuItem>",
+				"    </Menu>",
+				"  </Shell.menuBar>",
+				"</Shell>");
+		refresh();
+		// prepare models
+		MenuItemInfo itemInfo = getObjectByName("item");
+		MenuInfo menuInfo = itemInfo.getSubMenu();
+		// no adapter for random Class
+		assertNull(itemInfo.getAdapter(List.class));
+		// check "impl"
+		{
+			IMenuItemInfo itemObject = itemInfo.getAdapter(IMenuItemInfo.class);
+			// IMenuItemInfo
+			assertSame(itemInfo, itemObject.getModel());
+			assertSame(MenuObjectInfoUtils.getMenuInfo(menuInfo), itemObject.getMenu());
+			// presentation
+			assertSame(itemInfo.getImage(), itemObject.getImage());
+			assertSame(itemInfo.getBounds(), itemObject.getBounds());
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Style changing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Set {@link MenuItemInfo} style to SWT.CASCADE. A sub menu should be added.
-   */
-  public void test_setStyle_toCascade() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.menuBar>",
-        "    <Menu x:style='BAR'>",
-        "      <MenuItem wbp:name='item' x:Style='CHECK'/>",
-        "    </Menu>",
-        "  </Shell.menuBar>",
-        "</Shell>");
-    refresh();
-    // set style to SWT.CASCADE
-    ExecutionUtils.run(m_lastObject, new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        MenuItemInfo item = getObjectByName("item");
-        GenericProperty styleProperty = (GenericProperty) item.getPropertyByTitle("Style");
-        styleProperty.setExpression("CASCADE", Property.UNKNOWN_VALUE);
-      }
-    });
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.menuBar>",
-        "    <Menu x:style='BAR'>",
-        "      <MenuItem wbp:name='item' x:Style='CASCADE'>",
-        "        <MenuItem.menu>",
-        "          <Menu/>",
-        "        </MenuItem.menu>",
-        "      </MenuItem>",
-        "    </Menu>",
-        "  </Shell.menuBar>",
-        "</Shell>");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Style changing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Set {@link MenuItemInfo} style to SWT.CASCADE. A sub menu should be added.
+	 */
+	public void test_setStyle_toCascade() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.menuBar>",
+				"    <Menu x:style='BAR'>",
+				"      <MenuItem wbp:name='item' x:Style='CHECK'/>",
+				"    </Menu>",
+				"  </Shell.menuBar>",
+				"</Shell>");
+		refresh();
+		// set style to SWT.CASCADE
+		ExecutionUtils.run(m_lastObject, new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				MenuItemInfo item = getObjectByName("item");
+				GenericProperty styleProperty = (GenericProperty) item.getPropertyByTitle("Style");
+				styleProperty.setExpression("CASCADE", Property.UNKNOWN_VALUE);
+			}
+		});
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.menuBar>",
+				"    <Menu x:style='BAR'>",
+				"      <MenuItem wbp:name='item' x:Style='CASCADE'>",
+				"        <MenuItem.menu>",
+				"          <Menu/>",
+				"        </MenuItem.menu>",
+				"      </MenuItem>",
+				"    </Menu>",
+				"  </Shell.menuBar>",
+				"</Shell>");
+	}
 
-  /**
-   * Set {@link MenuItemInfo} style to anything else except SWT.CASCADE and SWT.SEPARATOR.
-   * <p>
-   * Only the style should changed.
-   */
-  public void test_setStyle_noCascade() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.menuBar>",
-        "    <Menu x:style='BAR'>",
-        "      <MenuItem wbp:name='item' x:Style='RADIO'/>",
-        "    </Menu>",
-        "  </Shell.menuBar>",
-        "</Shell>");
-    refresh();
-    // set style to SWT.CHECK
-    ExecutionUtils.run(m_lastObject, new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        MenuItemInfo item = getObjectByName("item");
-        GenericProperty styleProperty = (GenericProperty) item.getPropertyByTitle("Style");
-        styleProperty.setExpression("CHECK", Property.UNKNOWN_VALUE);
-      }
-    });
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.menuBar>",
-        "    <Menu x:style='BAR'>",
-        "      <MenuItem wbp:name='item' x:Style='CHECK'/>",
-        "    </Menu>",
-        "  </Shell.menuBar>",
-        "</Shell>");
-  }
+	/**
+	 * Set {@link MenuItemInfo} style to anything else except SWT.CASCADE and SWT.SEPARATOR.
+	 * <p>
+	 * Only the style should changed.
+	 */
+	public void test_setStyle_noCascade() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.menuBar>",
+				"    <Menu x:style='BAR'>",
+				"      <MenuItem wbp:name='item' x:Style='RADIO'/>",
+				"    </Menu>",
+				"  </Shell.menuBar>",
+				"</Shell>");
+		refresh();
+		// set style to SWT.CHECK
+		ExecutionUtils.run(m_lastObject, new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				MenuItemInfo item = getObjectByName("item");
+				GenericProperty styleProperty = (GenericProperty) item.getPropertyByTitle("Style");
+				styleProperty.setExpression("CHECK", Property.UNKNOWN_VALUE);
+			}
+		});
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.menuBar>",
+				"    <Menu x:style='BAR'>",
+				"      <MenuItem wbp:name='item' x:Style='CHECK'/>",
+				"    </Menu>",
+				"  </Shell.menuBar>",
+				"</Shell>");
+	}
 
-  /**
-   * Set {@link MenuItemInfo} style from SWT.CASCADE style to anything else.
-   * <p>
-   * Sub menu should be removed.
-   */
-  public void test_setStyle_fromCascade() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.menuBar>",
-        "    <Menu x:style='BAR'>",
-        "      <MenuItem wbp:name='item' x:Style='CASCADE'>",
-        "        <MenuItem.menu>",
-        "          <Menu/>",
-        "        </MenuItem.menu>",
-        "      </MenuItem>",
-        "    </Menu>",
-        "  </Shell.menuBar>",
-        "</Shell>");
-    refresh();
-    // set style to SWT.CHECK
-    ExecutionUtils.run(m_lastObject, new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        MenuItemInfo item = getObjectByName("item");
-        GenericProperty styleProperty = (GenericProperty) item.getPropertyByTitle("Style");
-        styleProperty.setExpression("CHECK", Property.UNKNOWN_VALUE);
-      }
-    });
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.menuBar>",
-        "    <Menu x:style='BAR'>",
-        "      <MenuItem wbp:name='item' x:Style='CHECK'/>",
-        "    </Menu>",
-        "  </Shell.menuBar>",
-        "</Shell>");
-  }
+	/**
+	 * Set {@link MenuItemInfo} style from SWT.CASCADE style to anything else.
+	 * <p>
+	 * Sub menu should be removed.
+	 */
+	public void test_setStyle_fromCascade() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.menuBar>",
+				"    <Menu x:style='BAR'>",
+				"      <MenuItem wbp:name='item' x:Style='CASCADE'>",
+				"        <MenuItem.menu>",
+				"          <Menu/>",
+				"        </MenuItem.menu>",
+				"      </MenuItem>",
+				"    </Menu>",
+				"  </Shell.menuBar>",
+				"</Shell>");
+		refresh();
+		// set style to SWT.CHECK
+		ExecutionUtils.run(m_lastObject, new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				MenuItemInfo item = getObjectByName("item");
+				GenericProperty styleProperty = (GenericProperty) item.getPropertyByTitle("Style");
+				styleProperty.setExpression("CHECK", Property.UNKNOWN_VALUE);
+			}
+		});
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.menuBar>",
+				"    <Menu x:style='BAR'>",
+				"      <MenuItem wbp:name='item' x:Style='CHECK'/>",
+				"    </Menu>",
+				"  </Shell.menuBar>",
+				"</Shell>");
+	}
 
-  /**
-   * Set {@link MenuItemInfo} style from SWT.CASCADE style to anything else.
-   * <p>
-   * No sub menu, so nothing to remove.
-   */
-  public void test_setStyle_fromCascade_noSubMenu() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.menuBar>",
-        "    <Menu x:style='BAR'>",
-        "      <MenuItem wbp:name='item' x:Style='CASCADE'/>",
-        "    </Menu>",
-        "  </Shell.menuBar>",
-        "</Shell>");
-    refresh();
-    // set style to SWT.CHECK
-    ExecutionUtils.run(m_lastObject, new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        MenuItemInfo item = getObjectByName("item");
-        GenericProperty styleProperty = (GenericProperty) item.getPropertyByTitle("Style");
-        styleProperty.setExpression("CHECK", Property.UNKNOWN_VALUE);
-      }
-    });
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.menuBar>",
-        "    <Menu x:style='BAR'>",
-        "      <MenuItem wbp:name='item' x:Style='CHECK'/>",
-        "    </Menu>",
-        "  </Shell.menuBar>",
-        "</Shell>");
-  }
+	/**
+	 * Set {@link MenuItemInfo} style from SWT.CASCADE style to anything else.
+	 * <p>
+	 * No sub menu, so nothing to remove.
+	 */
+	public void test_setStyle_fromCascade_noSubMenu() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.menuBar>",
+				"    <Menu x:style='BAR'>",
+				"      <MenuItem wbp:name='item' x:Style='CASCADE'/>",
+				"    </Menu>",
+				"  </Shell.menuBar>",
+				"</Shell>");
+		refresh();
+		// set style to SWT.CHECK
+		ExecutionUtils.run(m_lastObject, new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				MenuItemInfo item = getObjectByName("item");
+				GenericProperty styleProperty = (GenericProperty) item.getPropertyByTitle("Style");
+				styleProperty.setExpression("CHECK", Property.UNKNOWN_VALUE);
+			}
+		});
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.menuBar>",
+				"    <Menu x:style='BAR'>",
+				"      <MenuItem wbp:name='item' x:Style='CHECK'/>",
+				"    </Menu>",
+				"  </Shell.menuBar>",
+				"</Shell>");
+	}
 
-  /**
-   * Set {@link MenuItemInfo} style to SWT.SEPARATOR.
-   * <p>
-   * <code>setText()</code> should be removed.
-   */
-  public void test_setStyle_toSeparator() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.menuBar>",
-        "    <Menu x:style='BAR'>",
-        "      <MenuItem wbp:name='item' text='My item'/>",
-        "    </Menu>",
-        "  </Shell.menuBar>",
-        "</Shell>");
-    refresh();
-    // set style to SWT.SEPARATOR
-    ExecutionUtils.run(m_lastObject, new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        MenuItemInfo item = getObjectByName("item");
-        GenericProperty styleProperty = (GenericProperty) item.getPropertyByTitle("Style");
-        styleProperty.setExpression("SEPARATOR", Property.UNKNOWN_VALUE);
-      }
-    });
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.menuBar>",
-        "    <Menu x:style='BAR'>",
-        "      <MenuItem wbp:name='item' x:Style='SEPARATOR'/>",
-        "    </Menu>",
-        "  </Shell.menuBar>",
-        "</Shell>");
-  }
+	/**
+	 * Set {@link MenuItemInfo} style to SWT.SEPARATOR.
+	 * <p>
+	 * <code>setText()</code> should be removed.
+	 */
+	public void test_setStyle_toSeparator() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.menuBar>",
+				"    <Menu x:style='BAR'>",
+				"      <MenuItem wbp:name='item' text='My item'/>",
+				"    </Menu>",
+				"  </Shell.menuBar>",
+				"</Shell>");
+		refresh();
+		// set style to SWT.SEPARATOR
+		ExecutionUtils.run(m_lastObject, new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				MenuItemInfo item = getObjectByName("item");
+				GenericProperty styleProperty = (GenericProperty) item.getPropertyByTitle("Style");
+				styleProperty.setExpression("SEPARATOR", Property.UNKNOWN_VALUE);
+			}
+		});
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.menuBar>",
+				"    <Menu x:style='BAR'>",
+				"      <MenuItem wbp:name='item' x:Style='SEPARATOR'/>",
+				"    </Menu>",
+				"  </Shell.menuBar>",
+				"</Shell>");
+	}
 
-  /**
-   * Set {@link MenuItemInfo} style from SWT.CASCADE to SWT.SEPARATOR.
-   * <p>
-   * Sub menu and <code>setText</code> should be removed because the separator doesn't need it.
-   */
-  public void test_setStyle_fromCascade_toSeparator() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.menuBar>",
-        "    <Menu x:style='BAR'>",
-        "      <MenuItem wbp:name='item' text='My item' x:Style='CASCADE'>",
-        "        <MenuItem.menu>",
-        "          <Menu/>",
-        "        </MenuItem.menu>",
-        "      </MenuItem>",
-        "    </Menu>",
-        "  </Shell.menuBar>",
-        "</Shell>");
-    refresh();
-    // set style to SWT.SEPARATOR
-    ExecutionUtils.run(m_lastObject, new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        MenuItemInfo item = getObjectByName("item");
-        GenericProperty styleProperty = (GenericProperty) item.getPropertyByTitle("Style");
-        styleProperty.setExpression("SEPARATOR", Property.UNKNOWN_VALUE);
-      }
-    });
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.menuBar>",
-        "    <Menu x:style='BAR'>",
-        "      <MenuItem wbp:name='item' x:Style='SEPARATOR'/>",
-        "    </Menu>",
-        "  </Shell.menuBar>",
-        "</Shell>");
-  }
+	/**
+	 * Set {@link MenuItemInfo} style from SWT.CASCADE to SWT.SEPARATOR.
+	 * <p>
+	 * Sub menu and <code>setText</code> should be removed because the separator doesn't need it.
+	 */
+	public void test_setStyle_fromCascade_toSeparator() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.menuBar>",
+				"    <Menu x:style='BAR'>",
+				"      <MenuItem wbp:name='item' text='My item' x:Style='CASCADE'>",
+				"        <MenuItem.menu>",
+				"          <Menu/>",
+				"        </MenuItem.menu>",
+				"      </MenuItem>",
+				"    </Menu>",
+				"  </Shell.menuBar>",
+				"</Shell>");
+		refresh();
+		// set style to SWT.SEPARATOR
+		ExecutionUtils.run(m_lastObject, new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				MenuItemInfo item = getObjectByName("item");
+				GenericProperty styleProperty = (GenericProperty) item.getPropertyByTitle("Style");
+				styleProperty.setExpression("SEPARATOR", Property.UNKNOWN_VALUE);
+			}
+		});
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.menuBar>",
+				"    <Menu x:style='BAR'>",
+				"      <MenuItem wbp:name='item' x:Style='SEPARATOR'/>",
+				"    </Menu>",
+				"  </Shell.menuBar>",
+				"</Shell>");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IMenuItemInfo operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * {@link MenuItemInfo} does not accept anything with create/paste.
-   */
-  public void test_IMenuItemInfo_noCreateOrPaste() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.menuBar>",
-        "    <Menu x:style='BAR'>",
-        "      <MenuItem wbp:name='item'/>",
-        "    </Menu>",
-        "  </Shell.menuBar>",
-        "</Shell>");
-    refresh();
-    String source = m_lastContext.getContent();
-    // prepare models
-    MenuItemInfo itemInfo = getObjectByName("item");
-    IMenuItemInfo itemObject = MenuObjectInfoUtils.getMenuItemInfo(itemInfo);
-    IMenuPolicy itemPolicy = itemObject.getPolicy();
-    // no "create"
-    {
-      MenuInfo newMenuInfo = createObject("org.eclipse.swt.widgets.Menu");
-      assertFalse(itemPolicy.validateCreate(newMenuInfo));
-      itemPolicy.commandCreate(newMenuInfo, null);
-    }
-    // no "paste"
-    {
-      Object anyObject = new Object();
-      assertFalse(itemPolicy.validatePaste(anyObject));
-      itemPolicy.commandPaste(anyObject, null);
-    }
-    // no changes
-    assertEquals(source, m_lastContext.getContent());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IMenuItemInfo operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * {@link MenuItemInfo} does not accept anything with create/paste.
+	 */
+	public void test_IMenuItemInfo_noCreateOrPaste() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.menuBar>",
+				"    <Menu x:style='BAR'>",
+				"      <MenuItem wbp:name='item'/>",
+				"    </Menu>",
+				"  </Shell.menuBar>",
+				"</Shell>");
+		refresh();
+		String source = m_lastContext.getContent();
+		// prepare models
+		MenuItemInfo itemInfo = getObjectByName("item");
+		IMenuItemInfo itemObject = MenuObjectInfoUtils.getMenuItemInfo(itemInfo);
+		IMenuPolicy itemPolicy = itemObject.getPolicy();
+		// no "create"
+		{
+			MenuInfo newMenuInfo = createObject("org.eclipse.swt.widgets.Menu");
+			assertFalse(itemPolicy.validateCreate(newMenuInfo));
+			itemPolicy.commandCreate(newMenuInfo, null);
+		}
+		// no "paste"
+		{
+			Object anyObject = new Object();
+			assertFalse(itemPolicy.validatePaste(anyObject));
+			itemPolicy.commandPaste(anyObject, null);
+		}
+		// no changes
+		assertEquals(source, m_lastContext.getContent());
+	}
 
-  /**
-   * {@link MenuInfo} can be moved on {@link MenuItemInfo}.
-   */
-  public void test_IMenuItemInfo_move() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.menuBar>",
-        "    <Menu wbp:name='bar' x:style='BAR'>",
-        "      <MenuItem wbp:name='item_1' x:Style='CHECK'/>",
-        "      <MenuItem wbp:name='item_2' x:Style='CASCADE'>",
-        "        <MenuItem.menu>",
-        "          <Menu wbp:name='subMenu'/>",
-        "        </MenuItem.menu>",
-        "      </MenuItem>",
-        "    </Menu>",
-        "  </Shell.menuBar>",
-        "</Shell>");
-    refresh();
-    // prepare models
-    MenuInfo barInfo = getObjectByName("bar");
-    MenuItemInfo itemInfo_1 = getObjectByName("item_1");
-    MenuItemInfo itemInfo_2 = getObjectByName("item_2");
-    final MenuInfo subMenuInfo = getObjectByName("subMenu");
-    // prepare menu objects
-    final IMenuItemInfo itemObject_1 = MenuObjectInfoUtils.getMenuItemInfo(itemInfo_1);
-    final IMenuPolicy itemPolicy_1 = itemObject_1.getPolicy();
-    final IMenuItemInfo itemObject_2 = MenuObjectInfoUtils.getMenuItemInfo(itemInfo_2);
-    final IMenuPolicy itemPolicy_2 = itemObject_2.getPolicy();
-    // can not move just random object
-    assertFalse(itemPolicy_2.validateMove(new Object()));
-    // can not move "bar" on its own child "item_2"
-    assertFalse(itemPolicy_2.validateMove(barInfo));
-    // move "subMenu" from "item_2" to "item_1"
-    ExecutionUtils.run(m_lastObject, new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        assertTrue(itemPolicy_1.validateMove(subMenuInfo));
-        itemPolicy_1.commandMove(subMenuInfo, null);
-      }
-    });
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.menuBar>",
-        "    <Menu wbp:name='bar' x:style='BAR'>",
-        "      <MenuItem wbp:name='item_1' x:Style='CASCADE'>",
-        "        <MenuItem.menu>",
-        "          <Menu wbp:name='subMenu'/>",
-        "        </MenuItem.menu>",
-        "      </MenuItem>",
-        "      <MenuItem wbp:name='item_2'/>",
-        "    </Menu>",
-        "  </Shell.menuBar>",
-        "</Shell>");
-  }
+	/**
+	 * {@link MenuInfo} can be moved on {@link MenuItemInfo}.
+	 */
+	public void test_IMenuItemInfo_move() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.menuBar>",
+				"    <Menu wbp:name='bar' x:style='BAR'>",
+				"      <MenuItem wbp:name='item_1' x:Style='CHECK'/>",
+				"      <MenuItem wbp:name='item_2' x:Style='CASCADE'>",
+				"        <MenuItem.menu>",
+				"          <Menu wbp:name='subMenu'/>",
+				"        </MenuItem.menu>",
+				"      </MenuItem>",
+				"    </Menu>",
+				"  </Shell.menuBar>",
+				"</Shell>");
+		refresh();
+		// prepare models
+		MenuInfo barInfo = getObjectByName("bar");
+		MenuItemInfo itemInfo_1 = getObjectByName("item_1");
+		MenuItemInfo itemInfo_2 = getObjectByName("item_2");
+		final MenuInfo subMenuInfo = getObjectByName("subMenu");
+		// prepare menu objects
+		final IMenuItemInfo itemObject_1 = MenuObjectInfoUtils.getMenuItemInfo(itemInfo_1);
+		final IMenuPolicy itemPolicy_1 = itemObject_1.getPolicy();
+		final IMenuItemInfo itemObject_2 = MenuObjectInfoUtils.getMenuItemInfo(itemInfo_2);
+		final IMenuPolicy itemPolicy_2 = itemObject_2.getPolicy();
+		// can not move just random object
+		assertFalse(itemPolicy_2.validateMove(new Object()));
+		// can not move "bar" on its own child "item_2"
+		assertFalse(itemPolicy_2.validateMove(barInfo));
+		// move "subMenu" from "item_2" to "item_1"
+		ExecutionUtils.run(m_lastObject, new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				assertTrue(itemPolicy_1.validateMove(subMenuInfo));
+				itemPolicy_1.commandMove(subMenuInfo, null);
+			}
+		});
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.menuBar>",
+				"    <Menu wbp:name='bar' x:style='BAR'>",
+				"      <MenuItem wbp:name='item_1' x:Style='CASCADE'>",
+				"        <MenuItem.menu>",
+				"          <Menu wbp:name='subMenu'/>",
+				"        </MenuItem.menu>",
+				"      </MenuItem>",
+				"      <MenuItem wbp:name='item_2'/>",
+				"    </Menu>",
+				"  </Shell.menuBar>",
+				"</Shell>");
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/menu/MenuTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/menu/MenuTest.java
index bfcab5848..f59dbcd45 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/menu/MenuTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/menu/MenuTest.java
@@ -43,899 +43,899 @@
  * @author scheglov_ke
  */
 public class MenuTest extends XwtModelTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // MenuStylePresentation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test that {@link MenuStylePresentation} returns different icons for menus with different
-   * styles.
-   */
-  public void test_MenuStylePresentation() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.menuBar>",
-        "    <Menu wbp:name='menuBar' x:style='BAR'/>",
-        "  </Shell.menuBar>",
-        "  <Shell.menu>",
-        "    <Menu wbp:name='menuPopup' x:style='POP_UP'>",
-        "      <MenuItem x:Style='CASCADE'>",
-        "        <MenuItem.menu>",
-        "          <Menu wbp:name='menuCascade'/>",
-        "        </MenuItem.menu>",
-        "      </MenuItem>",
-        "    </Menu>",
-        "  </Shell.menu>",
-        "</Shell>");
-    refresh();
-    // prepare models
-    MenuInfo menuBar = getObjectByName("menuBar");
-    MenuInfo menuPopup = getObjectByName("menuPopup");
-    MenuInfo menuCascade = getObjectByName("menuCascade");
-    // test icons
-    assertNotSame(menuBar.getPresentation().getIcon(), menuPopup.getPresentation().getIcon());
-    assertNotSame(menuPopup.getPresentation().getIcon(), menuCascade.getPresentation().getIcon());
-    assertNotSame(menuCascade.getPresentation().getIcon(), menuBar.getPresentation().getIcon());
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Bounds
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test that "bar" {@link MenuInfo} has reasonable bounds.
-   */
-  public void test_boundsBar() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.menuBar>",
-        "    <Menu wbp:name='bar' x:style='BAR'/>",
-        "  </Shell.menuBar>",
-        "</Shell>");
-    refresh();
-    MenuInfo bar = getObjectByName("bar");
-    // "bar" should not use client area offset of Shell, because "bar" itself is included in this offset
-    assertEquals(bar.getBounds(), bar.getModelBounds());
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Style
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link MenuInfo#isBar()}.
-   */
-  public void test_isBar() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.menuBar>",
-        "    <Menu wbp:name='menu' x:style='BAR'/>",
-        "  </Shell.menuBar>",
-        "</Shell>");
-    refresh();
-    MenuInfo menu = getObjectByName("menu");
-    assertTrue(menu.isBar());
-    assertFalse(menu.isPopup());
-  }
-
-  /**
-   * Test for {@link MenuInfo#isPopup()}.
-   */
-  public void test_isPopup() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.menu>",
-        "    <Menu wbp:name='menu' x:style='POP_UP'/>",
-        "  </Shell.menu>",
-        "</Shell>");
-    refresh();
-    MenuInfo menu = getObjectByName("menu");
-    assertTrue(menu.isPopup());
-    assertFalse(menu.isBar());
-  }
-
-  /**
-   * Test for {@link MenuLiveManager}.
-   */
-  public void test_liveStyle() throws Exception {
-    parse("<Shell/>");
-    // BAR
-    {
-      WidgetInfo menu = createObject("org.eclipse.swt.widgets.Menu", "bar");
-      int actualStyle = menu.getStyle();
-      assertTrue(
-          "SWT.BAR bit expected, but " + Integer.toHexString(actualStyle) + " found.",
-          (actualStyle & SWT.BAR) == SWT.BAR);
-    }
-    // POP_UP
-    {
-      WidgetInfo menu = createObject("org.eclipse.swt.widgets.Menu", null);
-      int actualStyle = menu.getStyle();
-      assertTrue(
-          "SWT.POP_UP bit expected, but " + Integer.toHexString(actualStyle) + " found.",
-          (actualStyle & SWT.POP_UP) == SWT.POP_UP);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Impl
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for asking unsupported adapter.
-   */
-  public void test_impl_IMenuInfo_no() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.menuBar>",
-        "    <Menu wbp:name='menu' x:style='BAR'/>",
-        "  </Shell.menuBar>",
-        "</Shell>");
-    refresh();
-    MenuInfo menuInfo = getObjectByName("menu");
-    assertNull(menuInfo.getAdapter(List.class));
-  }
-
-  /**
-   * Test for {@link IMenuInfo} of "bar" {@link MenuInfo}.
-   */
-  public void test_impl_IMenuInfo_bar() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.menuBar>",
-        "    <Menu wbp:name='menuBar' x:style='BAR'>",
-        "      <MenuItem text='Item'/>",
-        "    </Menu>",
-        "  </Shell.menuBar>",
-        "</Shell>");
-    refresh();
-    // prepare models
-    MenuInfo menuInfo = getObjectByName("menuBar");
-    List<MenuItemInfo> itemInfos = menuInfo.getItems();
-    // test IMenuInfo
-    IMenuInfo menuObject = menuInfo.getAdapter(IMenuInfo.class);
-    assertNotNull(menuObject);
-    assertSame(menuInfo, menuObject.getModel());
-    assertSame(menuInfo.getImage(), menuObject.getImage());
-    assertSame(menuInfo.getBounds(), menuObject.getBounds());
-    assertTrue(menuObject.isHorizontal());
-    {
-      List<IMenuItemInfo> itemObjects = menuObject.getItems();
-      assertThat(itemObjects).hasSize(1);
-      assertSame(itemInfos.get(0), itemObjects.get(0).getModel());
-    }
-  }
-
-  /**
-   * Test for {@link IMenuInfo} of "popup" {@link MenuInfo}.
-   */
-  public void test_impl_IMenuInfo_popup() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.menu>",
-        "    <Menu wbp:name='menu' x:style='POP_UP'/>",
-        "  </Shell.menu>",
-        "</Shell>");
-    refresh();
-    MenuInfo menuInfo = getObjectByName("menu");
-    // test IMenuInfo
-    IMenuInfo menuObject = menuInfo.getAdapter(IMenuInfo.class);
-    assertNotNull(menuObject);
-    assertSame(menuObject, menuObject.getModel());
-    assertSame(menuInfo.getImage(), menuObject.getImage());
-    assertSame(menuInfo.getBounds(), menuObject.getBounds());
-    assertFalse(menuObject.isHorizontal());
-  }
-
-  /**
-   * Test for {@link IMenuPopupInfo} of "popup" {@link MenuInfo}.
-   */
-  public void test_impl_IMenuPopupInfo_popup() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.menu>",
-        "    <Menu wbp:name='menu' x:style='POP_UP'/>",
-        "  </Shell.menu>",
-        "</Shell>");
-    refresh();
-    MenuInfo menuInfo = getObjectByName("menu");
-    // test IMenuInfo
-    IMenuInfo menuObject = menuInfo.getAdapter(IMenuInfo.class);
-    IMenuPopupInfo popupObject = menuInfo.getAdapter(IMenuPopupInfo.class);
-    assertNotNull(popupObject);
-    assertSame(menuInfo, popupObject.getModel());
-    assertSame(menuInfo.getPresentation().getIcon(), popupObject.getImage());
-    assertEquals(16, popupObject.getBounds().width);
-    assertEquals(16, popupObject.getBounds().height);
-    assertSame(IMenuPolicy.NOOP, popupObject.getPolicy());
-    assertSame(menuObject, popupObject.getMenu());
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // CREATE
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Tests for {@link IMenuInfo#validateCreate(Object)} and
-   * {@link IMenuInfo#commandCreate(Object, IMenuItemInfo)}.
-   */
-  public void test_IMenuInfo_create_1() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.menu>",
-        "    <Menu wbp:name='menu' x:style='POP_UP'/>",
-        "  </Shell.menu>",
-        "</Shell>");
-    refresh();
-    MenuInfo menuInfo = getObjectByName("menu");
-    IMenuInfo menuObject = MenuObjectInfoUtils.getMenuInfo(menuInfo);
-    IMenuPolicy menuPolicy = menuObject.getPolicy();
-    // don't allow adding non-menu components
-    {
-      XmlObjectInfo button = createObject("org.eclipse.swt.widgets.Button");
-      assertFalse(menuPolicy.validateCreate(button));
-    }
-    // add new MenuItem
-    XmlObjectInfo itemInfo = createObject("org.eclipse.swt.widgets.MenuItem");
-    assertTrue(menuPolicy.validateCreate(itemInfo));
-    menuPolicy.commandCreate(itemInfo, null);
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.menu>",
-        "    <Menu wbp:name='menu' x:style='POP_UP'>",
-        "      <MenuItem text='New Item'/>",
-        "    </Menu>",
-        "  </Shell.menu>",
-        "</Shell>");
-  }
-
-  /**
-   * Tests for {@link IMenuInfo#commandCreate(Object, IMenuItemInfo)} with reference
-   * {@link IMenuItemInfo}.
-   */
-  public void test_IMenuInfo_create_2() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "    <Menu wbp:name='menu' x:style='POP_UP'>",
-        "      <MenuItem wbp:name='existingItem'/>",
-        "    </Menu>",
-        "</Shell>");
-    refresh();
-    MenuInfo menuInfo = getObjectByName("menu");
-    MenuItemInfo itemInfo = getObjectByName("existingItem");
-    // prepare menu objects
-    IMenuInfo menuObject = MenuObjectInfoUtils.getMenuInfo(menuInfo);
-    IMenuPolicy menuPolicy = menuObject.getPolicy();
-    // add new MenuItem
-    XmlObjectInfo newItemInfo = createObject("org.eclipse.swt.widgets.MenuItem");
-    assertTrue(menuPolicy.validateCreate(itemInfo));
-    menuPolicy.commandCreate(newItemInfo, itemInfo);
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "    <Menu wbp:name='menu' x:style='POP_UP'>",
-        "      <MenuItem text='New Item'/>",
-        "      <MenuItem wbp:name='existingItem'/>",
-        "    </Menu>",
-        "</Shell>");
-  }
-
-  /**
-   * Test for adding {@link MenuItemInfo} with <code>CASCADE</code>.
-   */
-  public void test_IMenuInfo_create_3() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.menu>",
-        "    <Menu wbp:name='menu' x:style='POP_UP'/>",
-        "  </Shell.menu>",
-        "</Shell>");
-    refresh();
-    MenuInfo menuInfo = getObjectByName("menu");
-    IMenuInfo menuObject = MenuObjectInfoUtils.getMenuInfo(menuInfo);
-    IMenuPolicy menuPolicy = menuObject.getPolicy();
-    // add new MenuItem
-    XmlObjectInfo itemInfo = createObject("org.eclipse.swt.widgets.MenuItem", "cascade");
-    assertTrue(menuPolicy.validateCreate(itemInfo));
-    menuPolicy.commandCreate(itemInfo, null);
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.menu>",
-        "    <Menu wbp:name='menu' x:style='POP_UP'>",
-        "      <MenuItem x:Style='CASCADE' text='New SubMenu'>",
-        "        <MenuItem.menu>",
-        "          <Menu/>",
-        "        </MenuItem.menu>",
-        "      </MenuItem>",
-        "    </Menu>",
-        "  </Shell.menu>",
-        "</Shell>");
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // PASTE
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Tests for {@link IMenuInfo#validatePaste(Object)} and
-   * {@link IMenuInfo#commandPaste(Object, IMenuItemInfo)}.
-   */
-  public void test_IMenuInfo_paste_1() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "    <Menu wbp:name='menu' x:style='POP_UP'>",
-        "      <MenuItem wbp:name='existingItem' text='Item'/>",
-        "    </Menu>",
-        "</Shell>");
-    refresh();
-    MenuInfo menuInfo = getObjectByName("menu");
-    MenuItemInfo itemInfo = getObjectByName("existingItem");
-    IMenuInfo menuObject = MenuObjectInfoUtils.getMenuInfo(menuInfo);
-    final IMenuPolicy menuPolicy = menuObject.getPolicy();
-    // do copy/paste
-    XmlObjectMemento memento = XmlObjectMemento.createMemento(itemInfo);
-    List<XmlObjectMemento> mementoList = Collections.singletonList(memento);
-    assertTrue(menuPolicy.validatePaste(mementoList));
-    menuPolicy.commandPaste(mementoList, null);
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "    <Menu wbp:name='menu' x:style='POP_UP'>",
-        "      <MenuItem wbp:name='existingItem' text='Item'/>",
-        "      <MenuItem text='Item'/>",
-        "    </Menu>",
-        "</Shell>");
-  }
-
-  /**
-   * Don't allow "paste" for non-menu components.
-   */
-  public void test_IMenuInfo_paste_2() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "    <Menu wbp:name='menu' x:style='POP_UP'/>",
-        "    <Button wbp:name='button'/>",
-        "</Shell>");
-    refresh();
-    MenuInfo menuInfo = getObjectByName("menu");
-    ControlInfo buttonInfo = getObjectByName("button");
-    IMenuInfo menuObject = MenuObjectInfoUtils.getMenuInfo(menuInfo);
-    IMenuPolicy menuPolicy = menuObject.getPolicy();
-    // do copy/paste
-    XmlObjectMemento memento = XmlObjectMemento.createMemento(buttonInfo);
-    assertFalse(menuPolicy.validatePaste(Collections.singletonList(memento)));
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // MOVE
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Tests for {@link IMenuInfo#validateMove(Object)} and
-   * {@link IMenuInfo#commandMove(Object, IMenuItemInfo)}.
-   */
-  public void test_IMenuInfo_move_1() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "    <Menu wbp:name='menu' x:style='POP_UP'>",
-        "      <MenuItem wbp:name='item_1'/>",
-        "      <MenuItem wbp:name='item_2'/>",
-        "    </Menu>",
-        "</Shell>");
-    refresh();
-    MenuInfo menuInfo = getObjectByName("menu");
-    MenuItemInfo itemInfo_1 = getObjectByName("item_1");
-    MenuItemInfo itemInfo_2 = getObjectByName("item_2");
-    // prepare menu objects
-    IMenuInfo menuObject = MenuObjectInfoUtils.getMenuInfo(menuInfo);
-    IMenuPolicy menuPolicy = menuObject.getPolicy();
-    // move "item_2" before "item_1"
-    assertTrue(menuPolicy.validateMove(itemInfo_2));
-    menuPolicy.commandMove(itemInfo_2, itemInfo_1);
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "    <Menu wbp:name='menu' x:style='POP_UP'>",
-        "      <MenuItem wbp:name='item_2'/>",
-        "      <MenuItem wbp:name='item_1'/>",
-        "    </Menu>",
-        "</Shell>");
-  }
-
-  /**
-   * Don't allow moving non-menu component on {@link IMenuInfo}.
-   */
-  public void test_IMenuInfo_move_2() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "    <Menu wbp:name='menu' x:style='POP_UP'/>",
-        "    <Button wbp:name='button'/>",
-        "</Shell>");
-    refresh();
-    MenuInfo menuInfo = getObjectByName("menu");
-    ControlInfo buttonInfo = getObjectByName("button");
-    IMenuInfo menuObject = MenuObjectInfoUtils.getMenuInfo(menuInfo);
-    IMenuPolicy menuPolicy = menuObject.getPolicy();
-    // can not move
-    assertFalse(menuPolicy.validateMove(buttonInfo));
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Menu_Info.CREATE
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Add "bar" menu.
-   */
-  public void test_commandCreate_bar() throws Exception {
-    final CompositeInfo shell = parse("<Shell/>");
-    refresh();
-    // add Menu
-    ExecutionUtils.run(m_lastObject, new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        MenuInfo newMenuBar = createObject("org.eclipse.swt.widgets.Menu", "bar");
-        newMenuBar.commandCreate(shell);
-      }
-    });
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.menuBar>",
-        "    <Menu x:Style='BAR'/>",
-        "  </Shell.menuBar>",
-        "</Shell>");
-  }
-
-  /**
-   * Add "popup" menu.
-   */
-  public void test_commandCreate_popup() throws Exception {
-    final CompositeInfo shell = parse("<Shell/>");
-    refresh();
-    // add Menu
-    ExecutionUtils.run(m_lastObject, new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        MenuInfo newMenuBar = createObject("org.eclipse.swt.widgets.Menu");
-        newMenuBar.commandCreate(shell);
-      }
-    });
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.menu>",
-        "    <Menu/>",
-        "  </Shell.menu>",
-        "</Shell>");
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Menu_Info.PASTE
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for copy/paste {@link MenuInfo} with {@link MenuItemInfo} and sub-menu.
-   */
-  public void test_commandPaste() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <RowLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_1'>",
-        "    <Button.menu>",
-        "      <Menu>",
-        "        <MenuItem text='My item' x:Style='CASCADE'>",
-        "          <MenuItem.menu>",
-        "            <Menu enabled='false'/>",
-        "          </MenuItem.menu>",
-        "        </MenuItem>",
-        "      </Menu>",
-        "    </Button.menu>",
-        "  </Button>",
-        "  <Button wbp:name='button_2'/>",
-        "</Shell>");
-    refresh();
-    final ControlInfo button_1 = getObjectByName("button_1");
-    final ControlInfo button_2 = getObjectByName("button_2");
-    // do paste on "button_2"
-    {
-      MenuInfo menu = button_1.getChildren(MenuInfo.class).get(0);
-      doCopyPaste(menu, new PasteProcedure<MenuInfo>() {
-        @Override
-        public void run(MenuInfo copy) throws Exception {
-          copy.commandCreate(button_2);
-        }
-      });
-    }
-    assertXML(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <RowLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_1'>",
-        "    <Button.menu>",
-        "      <Menu>",
-        "        <MenuItem text='My item' x:Style='CASCADE'>",
-        "          <MenuItem.menu>",
-        "            <Menu enabled='false'/>",
-        "          </MenuItem.menu>",
-        "        </MenuItem>",
-        "      </Menu>",
-        "    </Button.menu>",
-        "  </Button>",
-        "  <Button wbp:name='button_2'>",
-        "    <Button.menu>",
-        "      <Menu>",
-        "        <MenuItem text='My item' x:Style='CASCADE'>",
-        "          <MenuItem.menu>",
-        "            <Menu enabled='false'/>",
-        "          </MenuItem.menu>",
-        "        </MenuItem>",
-        "      </Menu>",
-        "    </Button.menu>",
-        "  </Button>",
-        "</Shell>");
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Menu_Info.MOVE
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_commandMove_fromItem_toItem() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.menuBar>",
-        "    <Menu wbp:name='menuBar' x:style='BAR'>",
-        "      <MenuItem wbp:name='item_1' x:Style='CASCADE'>",
-        "        <MenuItem.menu>",
-        "          <Menu wbp:name='subMenu'/>",
-        "        </MenuItem.menu>",
-        "      </MenuItem>",
-        "      <MenuItem wbp:name='item_2'/>",
-        "    </Menu>",
-        "  </Shell.menuBar>",
-        "</Shell>");
-    refresh();
-    // prepare models
-    final MenuItemInfo item_1 = getObjectByName("item_1");
-    final MenuItemInfo item_2 = getObjectByName("item_2");
-    final MenuInfo subMenu = item_1.getSubMenu();
-    // do move
-    ExecutionUtils.run(m_lastObject, new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        subMenu.commandMove(item_2);
-      }
-    });
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.menuBar>",
-        "    <Menu wbp:name='menuBar' x:style='BAR'>",
-        "      <MenuItem wbp:name='item_1'/>",
-        "      <MenuItem wbp:name='item_2' x:Style='CASCADE'>",
-        "        <MenuItem.menu>",
-        "          <Menu wbp:name='subMenu'/>",
-        "        </MenuItem.menu>",
-        "      </MenuItem>",
-        "    </Menu>",
-        "  </Shell.menuBar>",
-        "</Shell>");
-  }
-
-  public void test_commandMove_fromItem_toControl() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <RowLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'/>",
-        "  <Shell.menuBar>",
-        "    <Menu x:style='BAR'>",
-        "      <MenuItem x:Style='CASCADE'>",
-        "        <MenuItem.menu>",
-        "          <Menu wbp:name='subMenu'/>",
-        "        </MenuItem.menu>",
-        "      </MenuItem>",
-        "    </Menu>",
-        "  </Shell.menuBar>",
-        "</Shell>");
-    refresh();
-    // prepare models
-    final ControlInfo button = getObjectByName("button");
-    final MenuInfo subMenu = getObjectByName("subMenu");
-    // do move
-    ExecutionUtils.run(m_lastObject, new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        subMenu.commandMove(button);
-      }
-    });
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <RowLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'>",
-        "    <Button.menu>",
-        "      <Menu wbp:name='subMenu'/>",
-        "    </Button.menu>",
-        "  </Button>",
-        "  <Shell.menuBar>",
-        "    <Menu x:style='BAR'>",
-        "      <MenuItem/>",
-        "    </Menu>",
-        "  </Shell.menuBar>",
-        "</Shell>");
-  }
-
-  public void test_commandMove_fromControl_toItem() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <RowLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'>",
-        "    <Button.menu>",
-        "      <Menu wbp:name='subMenu'/>",
-        "    </Button.menu>",
-        "  </Button>",
-        "  <Shell.menuBar>",
-        "    <Menu x:style='BAR'>",
-        "      <MenuItem wbp:name='item'/>",
-        "    </Menu>",
-        "  </Shell.menuBar>",
-        "</Shell>");
-    refresh();
-    // prepare models
-    final MenuInfo subMenu = getObjectByName("subMenu");
-    final MenuItemInfo item = getObjectByName("item");
-    // do move
-    ExecutionUtils.run(m_lastObject, new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        subMenu.commandMove(item);
-      }
-    });
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <RowLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button'/>",
-        "  <Shell.menuBar>",
-        "    <Menu x:style='BAR'>",
-        "      <MenuItem wbp:name='item' x:Style='CASCADE'>",
-        "        <MenuItem.menu>",
-        "          <Menu wbp:name='subMenu'/>",
-        "        </MenuItem.menu>",
-        "      </MenuItem>",
-        "    </Menu>",
-        "  </Shell.menuBar>",
-        "</Shell>");
-  }
-
-  public void test_commandMove_fromControl_toControl() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <RowLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_1'>",
-        "    <Button.menu>",
-        "      <Menu wbp:name='menu'/>",
-        "    </Button.menu>",
-        "  </Button>",
-        "  <Button wbp:name='button_2'/>",
-        "</Shell>");
-    refresh();
-    // prepare models
-    final ControlInfo button_1 = getObjectByName("button_1");
-    final ControlInfo button_2 = getObjectByName("button_2");
-    final MenuInfo menu = button_1.getChildren(MenuInfo.class).get(0);
-    // do move
-    ExecutionUtils.run(m_lastObject, new RunnableEx() {
-      @Override
-      public void run() throws Exception {
-        menu.commandMove(button_2);
-      }
-    });
-    assertXML(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.layout>",
-        "    <RowLayout/>",
-        "  </Shell.layout>",
-        "  <Button wbp:name='button_1'/>",
-        "  <Button wbp:name='button_2'>",
-        "    <Button.menu>",
-        "      <Menu wbp:name='menu'/>",
-        "    </Button.menu>",
-        "  </Button>",
-        "</Shell>");
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Misc
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for adding a placeholder to menu without items.
-   */
-  public void test_placeHolder() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.menuBar>",
-        "    <Menu wbp:name='menuBar' x:style='BAR'/>",
-        "  </Shell.menuBar>",
-        "</Shell>");
-    refresh();
-    MenuInfo menuInfo = getObjectByName("menuBar");
-    // no "item" models
-    assertThat(menuInfo.getItems()).isEmpty();
-    // even empty "menu" has "item" object
-    Object menuObject = menuInfo.getObject();
-    assertThat(MenuSupport.getItems(menuObject)).hasSize(1);
-  }
-
-  /**
-   * Test fetching menu bar bounds and items bounds.
-   */
-  public void test_fetchVisualDataBar() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.menuBar>",
-        "    <Menu wbp:name='menu' x:style='BAR'>",
-        "      <MenuItem wbp:name='item_1'/>",
-        "      <MenuItem wbp:name='item_2'/>",
-        "    </Menu>",
-        "  </Shell.menuBar>",
-        "</Shell>");
-    refresh();
-    MenuInfo menu = getObjectByName("menu");
-    // menu bar has bounds, but has no image
-    assertNotNull(menu.getModelBounds());
-    // menu bar in OSX has synthetic image which drawn above design canvas.
-    if (EnvironmentUtils.IS_MAC) {
-      assertNotNull(menu.getImage());
-    } else {
-      assertNull(menu.getImage());
-    }
-    // items have bounds, but not image
-    List<MenuItemInfo> items = menu.getItems();
-    assertThat(items).hasSize(2);
-    for (MenuItemInfo item : items) {
-      assertNotNull(item.getModelBounds());
-      assertNull(item.getImage());
-    }
-  }
-
-  /**
-   * Test fetching cascaded/popup menu bounds/image and items bounds.
-   */
-  public void test_fetchVisualDataCascaded() throws Exception {
-    parse(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <Shell.menuBar>",
-        "    <Menu wbp:name='bar' x:style='BAR'>",
-        "      <MenuItem x:Style='CASCADE'>",
-        "        <MenuItem.menu>",
-        "          <Menu wbp:name='subMenu'>",
-        "            <MenuItem wbp:name='item_1'/>",
-        "            <MenuItem wbp:name='item_2'/>",
-        "          </Menu>",
-        "        </MenuItem.menu>",
-        "      </MenuItem>",
-        "    </Menu>",
-        "  </Shell.menuBar>",
-        "</Shell>");
-    refresh();
-    MenuInfo subMenu = getObjectByName("subMenu");
-    assertNotNull(subMenu.getImage());
-    // check items
-    List<MenuItemInfo> items = subMenu.getItems();
-    assertThat(items).hasSize(2);
-    for (MenuItemInfo item : items) {
-      assertNotNull(item.getModelBounds());
-      assertNull(item.getImage());
-    }
-  }
-
-  public void test_menuAboveOtherGraphicalChildren() throws Exception {
-    CompositeInfo shell =
-        parse(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Shell.layout>",
-            "    <RowLayout/>",
-            "  </Shell.layout>",
-            "  <Button wbp:name='button'/>",
-            "  <Shell.menuBar>",
-            "    <Menu wbp:name='menu' x:style='BAR'/>",
-            "  </Shell.menuBar>",
-            "</Shell>");
-    assertHierarchy(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "<Shell>",
-        "  <RowLayout>",
-        "  <Menu wbp:name='menu' x:style='BAR'>",
-        "  <Button wbp:name='button'>",
-        "    virtual-LayoutData: org.eclipse.swt.layout.RowData");
-    refresh();
-    // prepare models
-    MenuInfo menu = getObjectByName("menu");
-    ControlInfo button = getObjectByName("button");
-    assertThat(shell.getPresentation().getChildrenGraphical()).containsExactly(menu, button);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// MenuStylePresentation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test that {@link MenuStylePresentation} returns different icons for menus with different
+	 * styles.
+	 */
+	public void test_MenuStylePresentation() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.menuBar>",
+				"    <Menu wbp:name='menuBar' x:style='BAR'/>",
+				"  </Shell.menuBar>",
+				"  <Shell.menu>",
+				"    <Menu wbp:name='menuPopup' x:style='POP_UP'>",
+				"      <MenuItem x:Style='CASCADE'>",
+				"        <MenuItem.menu>",
+				"          <Menu wbp:name='menuCascade'/>",
+				"        </MenuItem.menu>",
+				"      </MenuItem>",
+				"    </Menu>",
+				"  </Shell.menu>",
+				"</Shell>");
+		refresh();
+		// prepare models
+		MenuInfo menuBar = getObjectByName("menuBar");
+		MenuInfo menuPopup = getObjectByName("menuPopup");
+		MenuInfo menuCascade = getObjectByName("menuCascade");
+		// test icons
+		assertNotSame(menuBar.getPresentation().getIcon(), menuPopup.getPresentation().getIcon());
+		assertNotSame(menuPopup.getPresentation().getIcon(), menuCascade.getPresentation().getIcon());
+		assertNotSame(menuCascade.getPresentation().getIcon(), menuBar.getPresentation().getIcon());
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Bounds
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test that "bar" {@link MenuInfo} has reasonable bounds.
+	 */
+	public void test_boundsBar() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.menuBar>",
+				"    <Menu wbp:name='bar' x:style='BAR'/>",
+				"  </Shell.menuBar>",
+				"</Shell>");
+		refresh();
+		MenuInfo bar = getObjectByName("bar");
+		// "bar" should not use client area offset of Shell, because "bar" itself is included in this offset
+		assertEquals(bar.getBounds(), bar.getModelBounds());
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Style
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link MenuInfo#isBar()}.
+	 */
+	public void test_isBar() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.menuBar>",
+				"    <Menu wbp:name='menu' x:style='BAR'/>",
+				"  </Shell.menuBar>",
+				"</Shell>");
+		refresh();
+		MenuInfo menu = getObjectByName("menu");
+		assertTrue(menu.isBar());
+		assertFalse(menu.isPopup());
+	}
+
+	/**
+	 * Test for {@link MenuInfo#isPopup()}.
+	 */
+	public void test_isPopup() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.menu>",
+				"    <Menu wbp:name='menu' x:style='POP_UP'/>",
+				"  </Shell.menu>",
+				"</Shell>");
+		refresh();
+		MenuInfo menu = getObjectByName("menu");
+		assertTrue(menu.isPopup());
+		assertFalse(menu.isBar());
+	}
+
+	/**
+	 * Test for {@link MenuLiveManager}.
+	 */
+	public void test_liveStyle() throws Exception {
+		parse("<Shell/>");
+		// BAR
+		{
+			WidgetInfo menu = createObject("org.eclipse.swt.widgets.Menu", "bar");
+			int actualStyle = menu.getStyle();
+			assertTrue(
+					"SWT.BAR bit expected, but " + Integer.toHexString(actualStyle) + " found.",
+					(actualStyle & SWT.BAR) == SWT.BAR);
+		}
+		// POP_UP
+		{
+			WidgetInfo menu = createObject("org.eclipse.swt.widgets.Menu", null);
+			int actualStyle = menu.getStyle();
+			assertTrue(
+					"SWT.POP_UP bit expected, but " + Integer.toHexString(actualStyle) + " found.",
+					(actualStyle & SWT.POP_UP) == SWT.POP_UP);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Impl
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for asking unsupported adapter.
+	 */
+	public void test_impl_IMenuInfo_no() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.menuBar>",
+				"    <Menu wbp:name='menu' x:style='BAR'/>",
+				"  </Shell.menuBar>",
+				"</Shell>");
+		refresh();
+		MenuInfo menuInfo = getObjectByName("menu");
+		assertNull(menuInfo.getAdapter(List.class));
+	}
+
+	/**
+	 * Test for {@link IMenuInfo} of "bar" {@link MenuInfo}.
+	 */
+	public void test_impl_IMenuInfo_bar() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.menuBar>",
+				"    <Menu wbp:name='menuBar' x:style='BAR'>",
+				"      <MenuItem text='Item'/>",
+				"    </Menu>",
+				"  </Shell.menuBar>",
+				"</Shell>");
+		refresh();
+		// prepare models
+		MenuInfo menuInfo = getObjectByName("menuBar");
+		List<MenuItemInfo> itemInfos = menuInfo.getItems();
+		// test IMenuInfo
+		IMenuInfo menuObject = menuInfo.getAdapter(IMenuInfo.class);
+		assertNotNull(menuObject);
+		assertSame(menuInfo, menuObject.getModel());
+		assertSame(menuInfo.getImage(), menuObject.getImage());
+		assertSame(menuInfo.getBounds(), menuObject.getBounds());
+		assertTrue(menuObject.isHorizontal());
+		{
+			List<IMenuItemInfo> itemObjects = menuObject.getItems();
+			assertThat(itemObjects).hasSize(1);
+			assertSame(itemInfos.get(0), itemObjects.get(0).getModel());
+		}
+	}
+
+	/**
+	 * Test for {@link IMenuInfo} of "popup" {@link MenuInfo}.
+	 */
+	public void test_impl_IMenuInfo_popup() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.menu>",
+				"    <Menu wbp:name='menu' x:style='POP_UP'/>",
+				"  </Shell.menu>",
+				"</Shell>");
+		refresh();
+		MenuInfo menuInfo = getObjectByName("menu");
+		// test IMenuInfo
+		IMenuInfo menuObject = menuInfo.getAdapter(IMenuInfo.class);
+		assertNotNull(menuObject);
+		assertSame(menuObject, menuObject.getModel());
+		assertSame(menuInfo.getImage(), menuObject.getImage());
+		assertSame(menuInfo.getBounds(), menuObject.getBounds());
+		assertFalse(menuObject.isHorizontal());
+	}
+
+	/**
+	 * Test for {@link IMenuPopupInfo} of "popup" {@link MenuInfo}.
+	 */
+	public void test_impl_IMenuPopupInfo_popup() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.menu>",
+				"    <Menu wbp:name='menu' x:style='POP_UP'/>",
+				"  </Shell.menu>",
+				"</Shell>");
+		refresh();
+		MenuInfo menuInfo = getObjectByName("menu");
+		// test IMenuInfo
+		IMenuInfo menuObject = menuInfo.getAdapter(IMenuInfo.class);
+		IMenuPopupInfo popupObject = menuInfo.getAdapter(IMenuPopupInfo.class);
+		assertNotNull(popupObject);
+		assertSame(menuInfo, popupObject.getModel());
+		assertSame(menuInfo.getPresentation().getIcon(), popupObject.getImage());
+		assertEquals(16, popupObject.getBounds().width);
+		assertEquals(16, popupObject.getBounds().height);
+		assertSame(IMenuPolicy.NOOP, popupObject.getPolicy());
+		assertSame(menuObject, popupObject.getMenu());
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// CREATE
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Tests for {@link IMenuInfo#validateCreate(Object)} and
+	 * {@link IMenuInfo#commandCreate(Object, IMenuItemInfo)}.
+	 */
+	public void test_IMenuInfo_create_1() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.menu>",
+				"    <Menu wbp:name='menu' x:style='POP_UP'/>",
+				"  </Shell.menu>",
+				"</Shell>");
+		refresh();
+		MenuInfo menuInfo = getObjectByName("menu");
+		IMenuInfo menuObject = MenuObjectInfoUtils.getMenuInfo(menuInfo);
+		IMenuPolicy menuPolicy = menuObject.getPolicy();
+		// don't allow adding non-menu components
+		{
+			XmlObjectInfo button = createObject("org.eclipse.swt.widgets.Button");
+			assertFalse(menuPolicy.validateCreate(button));
+		}
+		// add new MenuItem
+		XmlObjectInfo itemInfo = createObject("org.eclipse.swt.widgets.MenuItem");
+		assertTrue(menuPolicy.validateCreate(itemInfo));
+		menuPolicy.commandCreate(itemInfo, null);
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.menu>",
+				"    <Menu wbp:name='menu' x:style='POP_UP'>",
+				"      <MenuItem text='New Item'/>",
+				"    </Menu>",
+				"  </Shell.menu>",
+				"</Shell>");
+	}
+
+	/**
+	 * Tests for {@link IMenuInfo#commandCreate(Object, IMenuItemInfo)} with reference
+	 * {@link IMenuItemInfo}.
+	 */
+	public void test_IMenuInfo_create_2() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"    <Menu wbp:name='menu' x:style='POP_UP'>",
+				"      <MenuItem wbp:name='existingItem'/>",
+				"    </Menu>",
+				"</Shell>");
+		refresh();
+		MenuInfo menuInfo = getObjectByName("menu");
+		MenuItemInfo itemInfo = getObjectByName("existingItem");
+		// prepare menu objects
+		IMenuInfo menuObject = MenuObjectInfoUtils.getMenuInfo(menuInfo);
+		IMenuPolicy menuPolicy = menuObject.getPolicy();
+		// add new MenuItem
+		XmlObjectInfo newItemInfo = createObject("org.eclipse.swt.widgets.MenuItem");
+		assertTrue(menuPolicy.validateCreate(itemInfo));
+		menuPolicy.commandCreate(newItemInfo, itemInfo);
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"    <Menu wbp:name='menu' x:style='POP_UP'>",
+				"      <MenuItem text='New Item'/>",
+				"      <MenuItem wbp:name='existingItem'/>",
+				"    </Menu>",
+				"</Shell>");
+	}
+
+	/**
+	 * Test for adding {@link MenuItemInfo} with <code>CASCADE</code>.
+	 */
+	public void test_IMenuInfo_create_3() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.menu>",
+				"    <Menu wbp:name='menu' x:style='POP_UP'/>",
+				"  </Shell.menu>",
+				"</Shell>");
+		refresh();
+		MenuInfo menuInfo = getObjectByName("menu");
+		IMenuInfo menuObject = MenuObjectInfoUtils.getMenuInfo(menuInfo);
+		IMenuPolicy menuPolicy = menuObject.getPolicy();
+		// add new MenuItem
+		XmlObjectInfo itemInfo = createObject("org.eclipse.swt.widgets.MenuItem", "cascade");
+		assertTrue(menuPolicy.validateCreate(itemInfo));
+		menuPolicy.commandCreate(itemInfo, null);
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.menu>",
+				"    <Menu wbp:name='menu' x:style='POP_UP'>",
+				"      <MenuItem x:Style='CASCADE' text='New SubMenu'>",
+				"        <MenuItem.menu>",
+				"          <Menu/>",
+				"        </MenuItem.menu>",
+				"      </MenuItem>",
+				"    </Menu>",
+				"  </Shell.menu>",
+				"</Shell>");
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// PASTE
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Tests for {@link IMenuInfo#validatePaste(Object)} and
+	 * {@link IMenuInfo#commandPaste(Object, IMenuItemInfo)}.
+	 */
+	public void test_IMenuInfo_paste_1() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"    <Menu wbp:name='menu' x:style='POP_UP'>",
+				"      <MenuItem wbp:name='existingItem' text='Item'/>",
+				"    </Menu>",
+				"</Shell>");
+		refresh();
+		MenuInfo menuInfo = getObjectByName("menu");
+		MenuItemInfo itemInfo = getObjectByName("existingItem");
+		IMenuInfo menuObject = MenuObjectInfoUtils.getMenuInfo(menuInfo);
+		final IMenuPolicy menuPolicy = menuObject.getPolicy();
+		// do copy/paste
+		XmlObjectMemento memento = XmlObjectMemento.createMemento(itemInfo);
+		List<XmlObjectMemento> mementoList = Collections.singletonList(memento);
+		assertTrue(menuPolicy.validatePaste(mementoList));
+		menuPolicy.commandPaste(mementoList, null);
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"    <Menu wbp:name='menu' x:style='POP_UP'>",
+				"      <MenuItem wbp:name='existingItem' text='Item'/>",
+				"      <MenuItem text='Item'/>",
+				"    </Menu>",
+				"</Shell>");
+	}
+
+	/**
+	 * Don't allow "paste" for non-menu components.
+	 */
+	public void test_IMenuInfo_paste_2() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"    <Menu wbp:name='menu' x:style='POP_UP'/>",
+				"    <Button wbp:name='button'/>",
+				"</Shell>");
+		refresh();
+		MenuInfo menuInfo = getObjectByName("menu");
+		ControlInfo buttonInfo = getObjectByName("button");
+		IMenuInfo menuObject = MenuObjectInfoUtils.getMenuInfo(menuInfo);
+		IMenuPolicy menuPolicy = menuObject.getPolicy();
+		// do copy/paste
+		XmlObjectMemento memento = XmlObjectMemento.createMemento(buttonInfo);
+		assertFalse(menuPolicy.validatePaste(Collections.singletonList(memento)));
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// MOVE
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Tests for {@link IMenuInfo#validateMove(Object)} and
+	 * {@link IMenuInfo#commandMove(Object, IMenuItemInfo)}.
+	 */
+	public void test_IMenuInfo_move_1() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"    <Menu wbp:name='menu' x:style='POP_UP'>",
+				"      <MenuItem wbp:name='item_1'/>",
+				"      <MenuItem wbp:name='item_2'/>",
+				"    </Menu>",
+				"</Shell>");
+		refresh();
+		MenuInfo menuInfo = getObjectByName("menu");
+		MenuItemInfo itemInfo_1 = getObjectByName("item_1");
+		MenuItemInfo itemInfo_2 = getObjectByName("item_2");
+		// prepare menu objects
+		IMenuInfo menuObject = MenuObjectInfoUtils.getMenuInfo(menuInfo);
+		IMenuPolicy menuPolicy = menuObject.getPolicy();
+		// move "item_2" before "item_1"
+		assertTrue(menuPolicy.validateMove(itemInfo_2));
+		menuPolicy.commandMove(itemInfo_2, itemInfo_1);
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"    <Menu wbp:name='menu' x:style='POP_UP'>",
+				"      <MenuItem wbp:name='item_2'/>",
+				"      <MenuItem wbp:name='item_1'/>",
+				"    </Menu>",
+				"</Shell>");
+	}
+
+	/**
+	 * Don't allow moving non-menu component on {@link IMenuInfo}.
+	 */
+	public void test_IMenuInfo_move_2() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"    <Menu wbp:name='menu' x:style='POP_UP'/>",
+				"    <Button wbp:name='button'/>",
+				"</Shell>");
+		refresh();
+		MenuInfo menuInfo = getObjectByName("menu");
+		ControlInfo buttonInfo = getObjectByName("button");
+		IMenuInfo menuObject = MenuObjectInfoUtils.getMenuInfo(menuInfo);
+		IMenuPolicy menuPolicy = menuObject.getPolicy();
+		// can not move
+		assertFalse(menuPolicy.validateMove(buttonInfo));
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Menu_Info.CREATE
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Add "bar" menu.
+	 */
+	public void test_commandCreate_bar() throws Exception {
+		final CompositeInfo shell = parse("<Shell/>");
+		refresh();
+		// add Menu
+		ExecutionUtils.run(m_lastObject, new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				MenuInfo newMenuBar = createObject("org.eclipse.swt.widgets.Menu", "bar");
+				newMenuBar.commandCreate(shell);
+			}
+		});
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.menuBar>",
+				"    <Menu x:Style='BAR'/>",
+				"  </Shell.menuBar>",
+				"</Shell>");
+	}
+
+	/**
+	 * Add "popup" menu.
+	 */
+	public void test_commandCreate_popup() throws Exception {
+		final CompositeInfo shell = parse("<Shell/>");
+		refresh();
+		// add Menu
+		ExecutionUtils.run(m_lastObject, new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				MenuInfo newMenuBar = createObject("org.eclipse.swt.widgets.Menu");
+				newMenuBar.commandCreate(shell);
+			}
+		});
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.menu>",
+				"    <Menu/>",
+				"  </Shell.menu>",
+				"</Shell>");
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Menu_Info.PASTE
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for copy/paste {@link MenuInfo} with {@link MenuItemInfo} and sub-menu.
+	 */
+	public void test_commandPaste() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <RowLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_1'>",
+				"    <Button.menu>",
+				"      <Menu>",
+				"        <MenuItem text='My item' x:Style='CASCADE'>",
+				"          <MenuItem.menu>",
+				"            <Menu enabled='false'/>",
+				"          </MenuItem.menu>",
+				"        </MenuItem>",
+				"      </Menu>",
+				"    </Button.menu>",
+				"  </Button>",
+				"  <Button wbp:name='button_2'/>",
+				"</Shell>");
+		refresh();
+		final ControlInfo button_1 = getObjectByName("button_1");
+		final ControlInfo button_2 = getObjectByName("button_2");
+		// do paste on "button_2"
+		{
+			MenuInfo menu = button_1.getChildren(MenuInfo.class).get(0);
+			doCopyPaste(menu, new PasteProcedure<MenuInfo>() {
+				@Override
+				public void run(MenuInfo copy) throws Exception {
+					copy.commandCreate(button_2);
+				}
+			});
+		}
+		assertXML(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <RowLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_1'>",
+				"    <Button.menu>",
+				"      <Menu>",
+				"        <MenuItem text='My item' x:Style='CASCADE'>",
+				"          <MenuItem.menu>",
+				"            <Menu enabled='false'/>",
+				"          </MenuItem.menu>",
+				"        </MenuItem>",
+				"      </Menu>",
+				"    </Button.menu>",
+				"  </Button>",
+				"  <Button wbp:name='button_2'>",
+				"    <Button.menu>",
+				"      <Menu>",
+				"        <MenuItem text='My item' x:Style='CASCADE'>",
+				"          <MenuItem.menu>",
+				"            <Menu enabled='false'/>",
+				"          </MenuItem.menu>",
+				"        </MenuItem>",
+				"      </Menu>",
+				"    </Button.menu>",
+				"  </Button>",
+				"</Shell>");
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Menu_Info.MOVE
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_commandMove_fromItem_toItem() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.menuBar>",
+				"    <Menu wbp:name='menuBar' x:style='BAR'>",
+				"      <MenuItem wbp:name='item_1' x:Style='CASCADE'>",
+				"        <MenuItem.menu>",
+				"          <Menu wbp:name='subMenu'/>",
+				"        </MenuItem.menu>",
+				"      </MenuItem>",
+				"      <MenuItem wbp:name='item_2'/>",
+				"    </Menu>",
+				"  </Shell.menuBar>",
+				"</Shell>");
+		refresh();
+		// prepare models
+		final MenuItemInfo item_1 = getObjectByName("item_1");
+		final MenuItemInfo item_2 = getObjectByName("item_2");
+		final MenuInfo subMenu = item_1.getSubMenu();
+		// do move
+		ExecutionUtils.run(m_lastObject, new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				subMenu.commandMove(item_2);
+			}
+		});
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.menuBar>",
+				"    <Menu wbp:name='menuBar' x:style='BAR'>",
+				"      <MenuItem wbp:name='item_1'/>",
+				"      <MenuItem wbp:name='item_2' x:Style='CASCADE'>",
+				"        <MenuItem.menu>",
+				"          <Menu wbp:name='subMenu'/>",
+				"        </MenuItem.menu>",
+				"      </MenuItem>",
+				"    </Menu>",
+				"  </Shell.menuBar>",
+				"</Shell>");
+	}
+
+	public void test_commandMove_fromItem_toControl() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <RowLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'/>",
+				"  <Shell.menuBar>",
+				"    <Menu x:style='BAR'>",
+				"      <MenuItem x:Style='CASCADE'>",
+				"        <MenuItem.menu>",
+				"          <Menu wbp:name='subMenu'/>",
+				"        </MenuItem.menu>",
+				"      </MenuItem>",
+				"    </Menu>",
+				"  </Shell.menuBar>",
+				"</Shell>");
+		refresh();
+		// prepare models
+		final ControlInfo button = getObjectByName("button");
+		final MenuInfo subMenu = getObjectByName("subMenu");
+		// do move
+		ExecutionUtils.run(m_lastObject, new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				subMenu.commandMove(button);
+			}
+		});
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <RowLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'>",
+				"    <Button.menu>",
+				"      <Menu wbp:name='subMenu'/>",
+				"    </Button.menu>",
+				"  </Button>",
+				"  <Shell.menuBar>",
+				"    <Menu x:style='BAR'>",
+				"      <MenuItem/>",
+				"    </Menu>",
+				"  </Shell.menuBar>",
+				"</Shell>");
+	}
+
+	public void test_commandMove_fromControl_toItem() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <RowLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'>",
+				"    <Button.menu>",
+				"      <Menu wbp:name='subMenu'/>",
+				"    </Button.menu>",
+				"  </Button>",
+				"  <Shell.menuBar>",
+				"    <Menu x:style='BAR'>",
+				"      <MenuItem wbp:name='item'/>",
+				"    </Menu>",
+				"  </Shell.menuBar>",
+				"</Shell>");
+		refresh();
+		// prepare models
+		final MenuInfo subMenu = getObjectByName("subMenu");
+		final MenuItemInfo item = getObjectByName("item");
+		// do move
+		ExecutionUtils.run(m_lastObject, new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				subMenu.commandMove(item);
+			}
+		});
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <RowLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button'/>",
+				"  <Shell.menuBar>",
+				"    <Menu x:style='BAR'>",
+				"      <MenuItem wbp:name='item' x:Style='CASCADE'>",
+				"        <MenuItem.menu>",
+				"          <Menu wbp:name='subMenu'/>",
+				"        </MenuItem.menu>",
+				"      </MenuItem>",
+				"    </Menu>",
+				"  </Shell.menuBar>",
+				"</Shell>");
+	}
+
+	public void test_commandMove_fromControl_toControl() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <RowLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_1'>",
+				"    <Button.menu>",
+				"      <Menu wbp:name='menu'/>",
+				"    </Button.menu>",
+				"  </Button>",
+				"  <Button wbp:name='button_2'/>",
+				"</Shell>");
+		refresh();
+		// prepare models
+		final ControlInfo button_1 = getObjectByName("button_1");
+		final ControlInfo button_2 = getObjectByName("button_2");
+		final MenuInfo menu = button_1.getChildren(MenuInfo.class).get(0);
+		// do move
+		ExecutionUtils.run(m_lastObject, new RunnableEx() {
+			@Override
+			public void run() throws Exception {
+				menu.commandMove(button_2);
+			}
+		});
+		assertXML(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.layout>",
+				"    <RowLayout/>",
+				"  </Shell.layout>",
+				"  <Button wbp:name='button_1'/>",
+				"  <Button wbp:name='button_2'>",
+				"    <Button.menu>",
+				"      <Menu wbp:name='menu'/>",
+				"    </Button.menu>",
+				"  </Button>",
+				"</Shell>");
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Misc
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for adding a placeholder to menu without items.
+	 */
+	public void test_placeHolder() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.menuBar>",
+				"    <Menu wbp:name='menuBar' x:style='BAR'/>",
+				"  </Shell.menuBar>",
+				"</Shell>");
+		refresh();
+		MenuInfo menuInfo = getObjectByName("menuBar");
+		// no "item" models
+		assertThat(menuInfo.getItems()).isEmpty();
+		// even empty "menu" has "item" object
+		Object menuObject = menuInfo.getObject();
+		assertThat(MenuSupport.getItems(menuObject)).hasSize(1);
+	}
+
+	/**
+	 * Test fetching menu bar bounds and items bounds.
+	 */
+	public void test_fetchVisualDataBar() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.menuBar>",
+				"    <Menu wbp:name='menu' x:style='BAR'>",
+				"      <MenuItem wbp:name='item_1'/>",
+				"      <MenuItem wbp:name='item_2'/>",
+				"    </Menu>",
+				"  </Shell.menuBar>",
+				"</Shell>");
+		refresh();
+		MenuInfo menu = getObjectByName("menu");
+		// menu bar has bounds, but has no image
+		assertNotNull(menu.getModelBounds());
+		// menu bar in OSX has synthetic image which drawn above design canvas.
+		if (EnvironmentUtils.IS_MAC) {
+			assertNotNull(menu.getImage());
+		} else {
+			assertNull(menu.getImage());
+		}
+		// items have bounds, but not image
+		List<MenuItemInfo> items = menu.getItems();
+		assertThat(items).hasSize(2);
+		for (MenuItemInfo item : items) {
+			assertNotNull(item.getModelBounds());
+			assertNull(item.getImage());
+		}
+	}
+
+	/**
+	 * Test fetching cascaded/popup menu bounds/image and items bounds.
+	 */
+	public void test_fetchVisualDataCascaded() throws Exception {
+		parse(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <Shell.menuBar>",
+				"    <Menu wbp:name='bar' x:style='BAR'>",
+				"      <MenuItem x:Style='CASCADE'>",
+				"        <MenuItem.menu>",
+				"          <Menu wbp:name='subMenu'>",
+				"            <MenuItem wbp:name='item_1'/>",
+				"            <MenuItem wbp:name='item_2'/>",
+				"          </Menu>",
+				"        </MenuItem.menu>",
+				"      </MenuItem>",
+				"    </Menu>",
+				"  </Shell.menuBar>",
+				"</Shell>");
+		refresh();
+		MenuInfo subMenu = getObjectByName("subMenu");
+		assertNotNull(subMenu.getImage());
+		// check items
+		List<MenuItemInfo> items = subMenu.getItems();
+		assertThat(items).hasSize(2);
+		for (MenuItemInfo item : items) {
+			assertNotNull(item.getModelBounds());
+			assertNull(item.getImage());
+		}
+	}
+
+	public void test_menuAboveOtherGraphicalChildren() throws Exception {
+		CompositeInfo shell =
+				parse(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Shell.layout>",
+						"    <RowLayout/>",
+						"  </Shell.layout>",
+						"  <Button wbp:name='button'/>",
+						"  <Shell.menuBar>",
+						"    <Menu wbp:name='menu' x:style='BAR'/>",
+						"  </Shell.menuBar>",
+						"</Shell>");
+		assertHierarchy(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"<Shell>",
+				"  <RowLayout>",
+				"  <Menu wbp:name='menu' x:style='BAR'>",
+				"  <Button wbp:name='button'>",
+				"    virtual-LayoutData: org.eclipse.swt.layout.RowData");
+		refresh();
+		// prepare models
+		MenuInfo menu = getObjectByName("menu");
+		ControlInfo button = getObjectByName("button");
+		assertThat(shell.getPresentation().getChildrenGraphical()).containsExactly(menu, button);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/menu/MenuTests.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/menu/MenuTests.java
index 2982dc979..d9938f724 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/menu/MenuTests.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/model/widgets/menu/MenuTests.java
@@ -23,11 +23,11 @@
  * @author scheglov_ke
  */
 public class MenuTests extends DesignerSuiteTests {
-  public static Test suite() {
-    TestSuite suite = new TestSuite("org.eclipse.wb.xwt.model.widgets.menu");
-    suite.addTest(createSingleSuite(MenuItemTest.class));
-    suite.addTest(createSingleSuite(MenuTest.class));
-    suite.addTest(createSingleSuite(MenuGefTest.class));
-    return suite;
-  }
+	public static Test suite() {
+		TestSuite suite = new TestSuite("org.eclipse.wb.xwt.model.widgets.menu");
+		suite.addTest(createSingleSuite(MenuItemTest.class));
+		suite.addTest(createSingleSuite(MenuTest.class));
+		suite.addTest(createSingleSuite(MenuGefTest.class));
+		return suite;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/refactoring/RefactoringTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/refactoring/RefactoringTest.java
index 4b3dda5d1..ec7b46caa 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/refactoring/RefactoringTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/refactoring/RefactoringTest.java
@@ -22,54 +22,54 @@
  * @author scheglov_ke
  */
 public class RefactoringTest extends XwtModelTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_renameEventListenerMethod() throws Exception {
-    setFileContentSrc(
-        "test/Test.java",
-        getJavaSource(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "public class Test {",
-            "  public void onKeyDown(Event event) {",
-            "  }",
-            "}"));
-    setFileContentSrc(
-        "test/Test.xwt",
-        getSource(
-            "// filler filler filler filler filler",
-            "<Shell x:Class='test.Test' KeyDownEvent='onKeyDown'/>"));
-    // do rename
-    {
-      IType type = m_javaProject.findType("test.Test");
-      IMethod method = type.getMethods()[0];
-      RefactoringTestUtils.renameMethod(method, "myMethod");
-    }
-    assertEquals(
-        getJavaSource(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "public class Test {",
-            "  public void myMethod(Event event) {",
-            "  }",
-            "}"),
-        getFileContentSrc("test/Test.java"));
-    assertEquals(
-        getSource(
-            "// filler filler filler filler filler",
-            "<Shell x:Class='test.Test' KeyDownEvent='myMethod'/>"),
-        getFileContentSrc("test/Test.xwt"));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_renameEventListenerMethod() throws Exception {
+		setFileContentSrc(
+				"test/Test.java",
+				getJavaSource(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"public class Test {",
+						"  public void onKeyDown(Event event) {",
+						"  }",
+						"}"));
+		setFileContentSrc(
+				"test/Test.xwt",
+				getSource(
+						"// filler filler filler filler filler",
+						"<Shell x:Class='test.Test' KeyDownEvent='onKeyDown'/>"));
+		// do rename
+		{
+			IType type = m_javaProject.findType("test.Test");
+			IMethod method = type.getMethods()[0];
+			RefactoringTestUtils.renameMethod(method, "myMethod");
+		}
+		assertEquals(
+				getJavaSource(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"public class Test {",
+						"  public void myMethod(Event event) {",
+						"  }",
+						"}"),
+				getFileContentSrc("test/Test.java"));
+		assertEquals(
+				getSource(
+						"// filler filler filler filler filler",
+						"<Shell x:Class='test.Test' KeyDownEvent='myMethod'/>"),
+				getFileContentSrc("test/Test.xwt"));
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/support/CoordinateUtilsTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/support/CoordinateUtilsTest.java
index ac048f2e5..273445dcf 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/support/CoordinateUtilsTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/support/CoordinateUtilsTest.java
@@ -28,61 +28,61 @@
  * @author scheglov_ke
  */
 public class CoordinateUtilsTest extends XwtModelTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_1() throws Exception {
-    CompositeInfo shell =
-        parse(
-            "// filler filler filler filler filler",
-            "<Shell>",
-            "  <Button wbp:name='button' bounds='10, 20, 50, 30'/>",
-            "</Shell>");
-    refresh();
-    ControlInfo button = getObjectByName("button");
-    // Shell display location
-    Point shellLocation = CoordinateUtils.getDisplayLocation(shell.getComposite());
-    assertEquals(new Point(-10000, -10000), shellLocation);
-    // Shell client area insets
-    Insets shellInsets = CoordinateUtils.getClientAreaInsets(shell.getComposite());
-    assertTrue(shellInsets.left == shellInsets.right);
-    assertTrue(shellInsets.left > 3);
-    assertTrue(shellInsets.top > 20);
-    // Button display location
-    {
-      Point buttonLocation = CoordinateUtils.getDisplayLocation(button.getControl());
-      assertEquals(shellLocation.x + shellInsets.left + 10, buttonLocation.x);
-      assertEquals(shellLocation.y + shellInsets.top + 20, buttonLocation.y);
-    }
-    // getBounds() for "button", model bounds
-    {
-      Rectangle bounds = CoordinateUtils.getBounds(button.getControl());
-      assertEquals(new Rectangle(10, 20, 50, 30), bounds);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_1() throws Exception {
+		CompositeInfo shell =
+				parse(
+						"// filler filler filler filler filler",
+						"<Shell>",
+						"  <Button wbp:name='button' bounds='10, 20, 50, 30'/>",
+						"</Shell>");
+		refresh();
+		ControlInfo button = getObjectByName("button");
+		// Shell display location
+		Point shellLocation = CoordinateUtils.getDisplayLocation(shell.getComposite());
+		assertEquals(new Point(-10000, -10000), shellLocation);
+		// Shell client area insets
+		Insets shellInsets = CoordinateUtils.getClientAreaInsets(shell.getComposite());
+		assertTrue(shellInsets.left == shellInsets.right);
+		assertTrue(shellInsets.left > 3);
+		assertTrue(shellInsets.top > 20);
+		// Button display location
+		{
+			Point buttonLocation = CoordinateUtils.getDisplayLocation(button.getControl());
+			assertEquals(shellLocation.x + shellInsets.left + 10, buttonLocation.x);
+			assertEquals(shellLocation.y + shellInsets.top + 20, buttonLocation.y);
+		}
+		// getBounds() for "button", model bounds
+		{
+			Rectangle bounds = CoordinateUtils.getBounds(button.getControl());
+			assertEquals(new Rectangle(10, 20, 50, 30), bounds);
+		}
+	}
 
-  /**
-   * Test for {@link CoordinateUtils#getClientAreaInsets2(Object)} for {@link Group}.
-   */
-  public void test_withGroup() throws Exception {
-    CompositeInfo group = parse("<Group/>");
-    refresh();
-    //
-    Insets insets =
-        Expectations.get(new Insets(15, 3, 3, 3), new InsValue[]{
-            new InsValue("flanker-windows", new Insets(15, 3, 3, 3)),
-            new InsValue("scheglov-win", new Insets(15, 3, 3, 3))});
-    assertEquals(insets, CoordinateUtils.getClientAreaInsets2(group.getComposite()));
-  }
+	/**
+	 * Test for {@link CoordinateUtils#getClientAreaInsets2(Object)} for {@link Group}.
+	 */
+	public void test_withGroup() throws Exception {
+		CompositeInfo group = parse("<Group/>");
+		refresh();
+		//
+		Insets insets =
+				Expectations.get(new Insets(15, 3, 3, 3), new InsValue[]{
+						new InsValue("flanker-windows", new Insets(15, 3, 3, 3)),
+						new InsValue("scheglov-win", new Insets(15, 3, 3, 3))});
+		assertEquals(insets, CoordinateUtils.getClientAreaInsets2(group.getComposite()));
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/support/SupportTests.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/support/SupportTests.java
index 9a444652a..3e05ddd69 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/support/SupportTests.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/support/SupportTests.java
@@ -21,9 +21,9 @@
  * @author scheglov_ke
  */
 public class SupportTests extends DesignerSuiteTests {
-  public static Test suite() {
-    TestSuite suite = new TestSuite("org.eclipse.wb.xwt.support");
-    suite.addTest(createSingleSuite(CoordinateUtilsTest.class));
-    return suite;
-  }
+	public static Test suite() {
+		TestSuite suite = new TestSuite("org.eclipse.wb.xwt.support");
+		suite.addTest(createSingleSuite(CoordinateUtilsTest.class));
+		return suite;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/wizard/ApplicationWizardTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/wizard/ApplicationWizardTest.java
index f5b2a96f6..bdc9a2918 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/wizard/ApplicationWizardTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/wizard/ApplicationWizardTest.java
@@ -32,121 +32,121 @@
  * @author scheglov_ke
  */
 public class ApplicationWizardTest extends XwtWizardTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // XWT libraries
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * PDE project - RCP plugin.
-   */
-  @DisposeProjectAfter
-  public void test_libraries_forPlugin() throws Exception {
-    // prepare default PDE/RCP project
-    {
-      do_projectDispose();
-      do_projectCreate();
-      BTestUtils.configure(m_testProject);
-      PdeProjectConversionUtils.convertToPDE(m_project, null, null);
-    }
-    // animate
-    animateWizard();
-    // libraries in classpath
-    assertTrue(ProjectUtils.hasType(m_javaProject, "org.eclipse.e4.xwt.XWT"));
-    assertTrue(ProjectUtils.hasType(m_javaProject, "org.eclipse.e4.xwt.forms.XWTForms"));
-    assertTrue(ProjectUtils.hasType(m_javaProject, "org.pushingpixels.trident.Timeline"));
-    assertTrue(ProjectUtils.hasType(m_javaProject, "org.eclipse.core.databinding.Binding"));
-    assertTrue(ProjectUtils.hasType(
-        m_javaProject,
-        "org.eclipse.core.databinding.observable.IObservable"));
-    assertTrue(ProjectUtils.hasType(
-        m_javaProject,
-        "org.eclipse.jface.databinding.swt.SWTObservables"));
-    // libraries in manifest
-    {
-      String manifest = AbstractPdeTest.getManifest();
-      assertEquals(manifest, 1, StringUtils.countMatches(manifest, "org.pushingpixels.trident_"));
-      assertEquals(manifest, 1, StringUtils.countMatches(manifest, "org.eclipse.e4.xwt_"));
-      assertEquals(manifest, 1, StringUtils.countMatches(manifest, "org.eclipse.e4.xwt.forms_"));
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// XWT libraries
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * PDE project - RCP plugin.
+	 */
+	@DisposeProjectAfter
+	public void test_libraries_forPlugin() throws Exception {
+		// prepare default PDE/RCP project
+		{
+			do_projectDispose();
+			do_projectCreate();
+			BTestUtils.configure(m_testProject);
+			PdeProjectConversionUtils.convertToPDE(m_project, null, null);
+		}
+		// animate
+		animateWizard();
+		// libraries in classpath
+		assertTrue(ProjectUtils.hasType(m_javaProject, "org.eclipse.e4.xwt.XWT"));
+		assertTrue(ProjectUtils.hasType(m_javaProject, "org.eclipse.e4.xwt.forms.XWTForms"));
+		assertTrue(ProjectUtils.hasType(m_javaProject, "org.pushingpixels.trident.Timeline"));
+		assertTrue(ProjectUtils.hasType(m_javaProject, "org.eclipse.core.databinding.Binding"));
+		assertTrue(ProjectUtils.hasType(
+				m_javaProject,
+				"org.eclipse.core.databinding.observable.IObservable"));
+		assertTrue(ProjectUtils.hasType(
+				m_javaProject,
+				"org.eclipse.jface.databinding.swt.SWTObservables"));
+		// libraries in manifest
+		{
+			String manifest = AbstractPdeTest.getManifest();
+			assertEquals(manifest, 1, StringUtils.countMatches(manifest, "org.pushingpixels.trident_"));
+			assertEquals(manifest, 1, StringUtils.countMatches(manifest, "org.eclipse.e4.xwt_"));
+			assertEquals(manifest, 1, StringUtils.countMatches(manifest, "org.eclipse.e4.xwt.forms_"));
+		}
+	}
 
-  /**
-   * Not PDE project.
-   */
-  @DisposeProjectAfter
-  public void test_libraries_forProject() throws Exception {
-    // prepare default SWT project
-    {
-      do_projectDispose();
-      do_projectCreate();
-      BTestUtils.configure(m_testProject);
-    }
-    // animate
-    animateWizard();
-    // libraries
-    assertTrue(ProjectUtils.hasType(m_javaProject, "org.eclipse.e4.xwt.XWT"));
-    assertTrue(ProjectUtils.hasType(m_javaProject, "org.eclipse.e4.xwt.forms.XWTForms"));
-    assertTrue(ProjectUtils.hasType(m_javaProject, "org.pushingpixels.trident.Timeline"));
-    assertTrue(ProjectUtils.hasType(m_javaProject, "org.eclipse.core.databinding.Binding"));
-    assertTrue(ProjectUtils.hasType(
-        m_javaProject,
-        "org.eclipse.core.databinding.observable.IObservable"));
-    assertTrue(ProjectUtils.hasType(
-        m_javaProject,
-        "org.eclipse.jface.databinding.swt.SWTObservables"));
-  }
+	/**
+	 * Not PDE project.
+	 */
+	@DisposeProjectAfter
+	public void test_libraries_forProject() throws Exception {
+		// prepare default SWT project
+		{
+			do_projectDispose();
+			do_projectCreate();
+			BTestUtils.configure(m_testProject);
+		}
+		// animate
+		animateWizard();
+		// libraries
+		assertTrue(ProjectUtils.hasType(m_javaProject, "org.eclipse.e4.xwt.XWT"));
+		assertTrue(ProjectUtils.hasType(m_javaProject, "org.eclipse.e4.xwt.forms.XWTForms"));
+		assertTrue(ProjectUtils.hasType(m_javaProject, "org.pushingpixels.trident.Timeline"));
+		assertTrue(ProjectUtils.hasType(m_javaProject, "org.eclipse.core.databinding.Binding"));
+		assertTrue(ProjectUtils.hasType(
+				m_javaProject,
+				"org.eclipse.core.databinding.observable.IObservable"));
+		assertTrue(ProjectUtils.hasType(
+				m_javaProject,
+				"org.eclipse.jface.databinding.swt.SWTObservables"));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_contents() throws Exception {
-    animateWizard();
-    // Java
-    {
-      String content = getFileContentSrc("test/MyApp.java");
-      assertThat(content).contains("main(String args[])");
-      assertThat(content).contains("XWT.load");
-      assertThat(content).contains(".readAndDispatch()");
-    }
-    // XWT
-    {
-      String content = getFileContentSrc("test/MyApp.xwt");
-      assertThat(content).contains("<Shell");
-      assertThat(content).contains("<RowLayout/>");
-      assertThat(content).contains("<Button text=");
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_contents() throws Exception {
+		animateWizard();
+		// Java
+		{
+			String content = getFileContentSrc("test/MyApp.java");
+			assertThat(content).contains("main(String args[])");
+			assertThat(content).contains("XWT.load");
+			assertThat(content).contains(".readAndDispatch()");
+		}
+		// XWT
+		{
+			String content = getFileContentSrc("test/MyApp.xwt");
+			assertThat(content).contains("<Shell");
+			assertThat(content).contains("<RowLayout/>");
+			assertThat(content).contains("<Button text=");
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void animateWizard() throws Exception {
-    new UiContext().executeAndCheck(new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        TestUtils.runWizard(new ApplicationWizard(), new StructuredSelection(m_packageFragment));
-      }
-    }, new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        context.useShell("New XWT Application");
-        context.getTextByLabel("Name:").setText("MyApp");
-        context.clickButton("Finish");
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void animateWizard() throws Exception {
+		new UiContext().executeAndCheck(new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				TestUtils.runWizard(new ApplicationWizard(), new StructuredSelection(m_packageFragment));
+			}
+		}, new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				context.useShell("New XWT Application");
+				context.getTextByLabel("Name:").setText("MyApp");
+				context.clickButton("Finish");
+			}
+		});
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/wizard/CompositeWizardTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/wizard/CompositeWizardTest.java
index 5d55568b6..d065e6d63 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/wizard/CompositeWizardTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/wizard/CompositeWizardTest.java
@@ -26,48 +26,48 @@
  * @author scheglov_ke
  */
 public class CompositeWizardTest extends XwtWizardTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @DisposeProjectAfter
-  public void test_forJava() throws Exception {
-    new UiContext().executeAndCheck(new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        TestUtils.runWizard(new CompositeWizard(), new StructuredSelection(m_packageFragment));
-      }
-    }, new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        context.useShell("New XWT Composite");
-        context.getTextByLabel("Name:").setText("MyComposite");
-        context.clickButton("Finish");
-      }
-    });
-    // Java
-    {
-      String content = getFileContentSrc("test/MyComposite.java");
-      assertThat(content).contains("public class MyComposite extends Composite {");
-      assertThat(content).contains("XWT.loadWithOptions(");
-    }
-    // XWT
-    {
-      String content = getFileContentSrc("test/MyComposite.xwt");
-      assertThat(content).contains("<Composite ");
-      assertThat(content).contains("x:Class=\"test.MyComposite\"");
-      assertThat(content).contains("<RowLayout/>");
-      assertThat(content).contains("<Button text=");
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@DisposeProjectAfter
+	public void test_forJava() throws Exception {
+		new UiContext().executeAndCheck(new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				TestUtils.runWizard(new CompositeWizard(), new StructuredSelection(m_packageFragment));
+			}
+		}, new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				context.useShell("New XWT Composite");
+				context.getTextByLabel("Name:").setText("MyComposite");
+				context.clickButton("Finish");
+			}
+		});
+		// Java
+		{
+			String content = getFileContentSrc("test/MyComposite.java");
+			assertThat(content).contains("public class MyComposite extends Composite {");
+			assertThat(content).contains("XWT.loadWithOptions(");
+		}
+		// XWT
+		{
+			String content = getFileContentSrc("test/MyComposite.xwt");
+			assertThat(content).contains("<Composite ");
+			assertThat(content).contains("x:Class=\"test.MyComposite\"");
+			assertThat(content).contains("<RowLayout/>");
+			assertThat(content).contains("<Button text=");
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/wizard/FormsApplicationWizardTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/wizard/FormsApplicationWizardTest.java
index 97a833d68..386917f3a 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/wizard/FormsApplicationWizardTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/wizard/FormsApplicationWizardTest.java
@@ -25,59 +25,59 @@
  * @author scheglov_ke
  */
 public class FormsApplicationWizardTest extends XwtWizardTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_contents() throws Exception {
-    animateWizard();
-    // Java
-    {
-      String content = getFileContentSrc("test/MyApp.java");
-      assertThat(content).contains("main(String args[])");
-      assertThat(content).contains("XWTForms.load");
-      assertThat(content).contains(".readAndDispatch()");
-    }
-    // XWT
-    {
-      String content = getFileContentSrc("test/MyApp.xwt");
-      assertThat(content).contains("<Shell");
-      assertThat(content).contains("<RowLayout/>");
-      assertThat(content).contains("<Button text=");
-      assertThat(content).contains("<!-- Forms API -->");
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_contents() throws Exception {
+		animateWizard();
+		// Java
+		{
+			String content = getFileContentSrc("test/MyApp.java");
+			assertThat(content).contains("main(String args[])");
+			assertThat(content).contains("XWTForms.load");
+			assertThat(content).contains(".readAndDispatch()");
+		}
+		// XWT
+		{
+			String content = getFileContentSrc("test/MyApp.xwt");
+			assertThat(content).contains("<Shell");
+			assertThat(content).contains("<RowLayout/>");
+			assertThat(content).contains("<Button text=");
+			assertThat(content).contains("<!-- Forms API -->");
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void animateWizard() throws Exception {
-    new UiContext().executeAndCheck(new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        TestUtils.runWizard(
-            new FormsApplicationWizard(),
-            new StructuredSelection(m_packageFragment));
-      }
-    }, new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        context.useShell("New XWT Application");
-        context.getTextByLabel("Name:").setText("MyApp");
-        context.clickButton("Finish");
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void animateWizard() throws Exception {
+		new UiContext().executeAndCheck(new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				TestUtils.runWizard(
+						new FormsApplicationWizard(),
+						new StructuredSelection(m_packageFragment));
+			}
+		}, new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				context.useShell("New XWT Application");
+				context.getTextByLabel("Name:").setText("MyApp");
+				context.clickButton("Finish");
+			}
+		});
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/wizard/FormsCompositeWizardTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/wizard/FormsCompositeWizardTest.java
index 1172f6e31..311753343 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/wizard/FormsCompositeWizardTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/wizard/FormsCompositeWizardTest.java
@@ -26,50 +26,50 @@
  * @author scheglov_ke
  */
 public class FormsCompositeWizardTest extends XwtWizardTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @DisposeProjectAfter
-  public void test_onlyForXWT() throws Exception {
-    new UiContext().executeAndCheck(new UIRunnable() {
-      @Override
-      public void run(UiContext context) throws Exception {
-        TestUtils.runWizard(new FormsCompositeWizard(), new StructuredSelection(m_packageFragment));
-      }
-    },
-        new UIRunnable() {
-          @Override
-          public void run(UiContext context) throws Exception {
-            context.useShell("New XWT Composite");
-            context.getTextByLabel("Name:").setText("MyComposite");
-            context.clickButton("Finish");
-          }
-        });
-    // Java
-    {
-      String content = getFileContentSrc("test/MyComposite.java");
-      assertThat(content).contains("public class MyComposite extends Composite {");
-      assertThat(content).contains("XWTForms.loadWithOptions(");
-    }
-    // XWT
-    {
-      String content = getFileContentSrc("test/MyComposite.xwt");
-      assertThat(content).contains("<Composite ");
-      assertThat(content).contains("x:Class=\"test.MyComposite\"");
-      assertThat(content).contains("<RowLayout/>");
-      assertThat(content).contains("<Button text=");
-      assertThat(content).contains("<!-- Forms API -->");
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@DisposeProjectAfter
+	public void test_onlyForXWT() throws Exception {
+		new UiContext().executeAndCheck(new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				TestUtils.runWizard(new FormsCompositeWizard(), new StructuredSelection(m_packageFragment));
+			}
+		},
+				new UIRunnable() {
+			@Override
+			public void run(UiContext context) throws Exception {
+				context.useShell("New XWT Composite");
+				context.getTextByLabel("Name:").setText("MyComposite");
+				context.clickButton("Finish");
+			}
+		});
+		// Java
+		{
+			String content = getFileContentSrc("test/MyComposite.java");
+			assertThat(content).contains("public class MyComposite extends Composite {");
+			assertThat(content).contains("XWTForms.loadWithOptions(");
+		}
+		// XWT
+		{
+			String content = getFileContentSrc("test/MyComposite.xwt");
+			assertThat(content).contains("<Composite ");
+			assertThat(content).contains("x:Class=\"test.MyComposite\"");
+			assertThat(content).contains("<RowLayout/>");
+			assertThat(content).contains("<Button text=");
+			assertThat(content).contains("<!-- Forms API -->");
+		}
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/wizard/WizardTests.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/wizard/WizardTests.java
index fd3e50c20..7d5698175 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/wizard/WizardTests.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/wizard/WizardTests.java
@@ -21,12 +21,12 @@
  * @author scheglov_ke
  */
 public class WizardTests extends DesignerSuiteTests {
-  public static Test suite() {
-    TestSuite suite = new TestSuite("org.eclipse.wb.xwt.wizard");
-    suite.addTest(createSingleSuite(ApplicationWizardTest.class));
-    suite.addTest(createSingleSuite(CompositeWizardTest.class));
-    suite.addTest(createSingleSuite(FormsApplicationWizardTest.class));
-    suite.addTest(createSingleSuite(FormsCompositeWizardTest.class));
-    return suite;
-  }
+	public static Test suite() {
+		TestSuite suite = new TestSuite("org.eclipse.wb.xwt.wizard");
+		suite.addTest(createSingleSuite(ApplicationWizardTest.class));
+		suite.addTest(createSingleSuite(CompositeWizardTest.class));
+		suite.addTest(createSingleSuite(FormsApplicationWizardTest.class));
+		suite.addTest(createSingleSuite(FormsCompositeWizardTest.class));
+		return suite;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/wizard/XwtWizardTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/wizard/XwtWizardTest.java
index 1c11d4233..6ec9fd1a4 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/wizard/XwtWizardTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XWT/wizard/XwtWizardTest.java
@@ -22,26 +22,26 @@
  * @author scheglov_ke
  */
 public class XwtWizardTest extends XwtModelTest {
-  protected IPackageFragment m_packageFragment;
+	protected IPackageFragment m_packageFragment;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Life cycle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void setUp() throws Exception {
-    super.setUp();
-    m_packageFragment = m_testProject.getPackage("test");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Life cycle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void setUp() throws Exception {
+		super.setUp();
+		m_packageFragment = m_testProject.getPackage("test");
+	}
 
-  @Override
-  protected void tearDown() throws Exception {
-    {
-      waitEventLoop(0);
-      TestUtils.closeAllEditors();
-      waitEventLoop(0);
-    }
-    super.tearDown();
-  }
+	@Override
+	protected void tearDown() throws Exception {
+		{
+			waitEventLoop(0);
+			TestUtils.closeAllEditors();
+			waitEventLoop(0);
+		}
+		super.tearDown();
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/AbstractJavaProjectTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/AbstractJavaProjectTest.java
index 4238e4024..052497196 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/AbstractJavaProjectTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/AbstractJavaProjectTest.java
@@ -49,105 +49,105 @@
  * @author scheglov_ke
  */
 public class AbstractJavaProjectTest extends DesignerTestCase {
-  private static final List<IFile> m_createdResources = new ArrayList<>();
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Life cycle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void tearDown() throws Exception {
-    // remove resources (with retries)
-    {
-      for (IFile resource : m_createdResources) {
-        int maxCount = 5000;
-        for (int i = 0; i < maxCount; i++) {
-          try {
-            // remove read-only attr, if has
-            if (resource.isReadOnly()) {
-              ResourceAttributes attributes = new ResourceAttributes();
-              attributes.setReadOnly(false);
-              resource.setResourceAttributes(attributes);
-            }
-            // do deleting
-            forceDeleteFile(resource);
-            break;
-          } catch (Exception e) {
-            if (i == maxCount - 1) {
-              throw e;
-            }
-          }
-          waitEventLoop(10);
-        }
-      }
-      m_createdResources.clear();
-    }
-    // continue
-    super.tearDown();
-  }
-
-  public void test_tearDown() throws Exception {
-    do_projectDispose();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Single test
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void runBare_before(Method method) throws Throwable {
-    if (method.getAnnotation(DisposeProjectBefore.class) != null) {
-      do_projectDispose();
-    }
-    super.runBare_before(method);
-  }
-
-  @Override
-  protected void runTest_after(Method method) throws Throwable {
-    if (method.getAnnotation(DisposeProjectAfter.class) != null) {
-      waitEventLoop(0);
-      do_projectDispose();
-    }
-    if (method.getAnnotation(WaitForAutoBuildAfter.class) != null) {
-      waitForAutoBuild();
-    }
-    super.runTest_after(method);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Project operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static TestProject m_testProject;
-  protected static IProject m_project;
-  protected static IJavaProject m_javaProject;
-
-  public void do_projectCreate() throws Exception {
-    if (m_testProject == null) {
-      m_testProject = new TestProject();
-      m_project = m_testProject.getProject();
-      m_javaProject = m_testProject.getJavaProject();
-    }
-  }
-
-  public void do_projectDispose() throws Exception {
-    if (m_testProject != null) {
-      // wait for finishing all jobs, such as JDT indexing
-      // XXX too slow!
-      /*while (!Job.getJobManager().isIdle()) {
+	private static final List<IFile> m_createdResources = new ArrayList<>();
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Life cycle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void tearDown() throws Exception {
+		// remove resources (with retries)
+		{
+			for (IFile resource : m_createdResources) {
+				int maxCount = 5000;
+				for (int i = 0; i < maxCount; i++) {
+					try {
+						// remove read-only attr, if has
+						if (resource.isReadOnly()) {
+							ResourceAttributes attributes = new ResourceAttributes();
+							attributes.setReadOnly(false);
+							resource.setResourceAttributes(attributes);
+						}
+						// do deleting
+						forceDeleteFile(resource);
+						break;
+					} catch (Exception e) {
+						if (i == maxCount - 1) {
+							throw e;
+						}
+					}
+					waitEventLoop(10);
+				}
+			}
+			m_createdResources.clear();
+		}
+		// continue
+		super.tearDown();
+	}
+
+	public void test_tearDown() throws Exception {
+		do_projectDispose();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Single test
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void runBare_before(Method method) throws Throwable {
+		if (method.getAnnotation(DisposeProjectBefore.class) != null) {
+			do_projectDispose();
+		}
+		super.runBare_before(method);
+	}
+
+	@Override
+	protected void runTest_after(Method method) throws Throwable {
+		if (method.getAnnotation(DisposeProjectAfter.class) != null) {
+			waitEventLoop(0);
+			do_projectDispose();
+		}
+		if (method.getAnnotation(WaitForAutoBuildAfter.class) != null) {
+			waitForAutoBuild();
+		}
+		super.runTest_after(method);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Project operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static TestProject m_testProject;
+	protected static IProject m_project;
+	protected static IJavaProject m_javaProject;
+
+	public void do_projectCreate() throws Exception {
+		if (m_testProject == null) {
+			m_testProject = new TestProject();
+			m_project = m_testProject.getProject();
+			m_javaProject = m_testProject.getJavaProject();
+		}
+	}
+
+	public void do_projectDispose() throws Exception {
+		if (m_testProject != null) {
+			// wait for finishing all jobs, such as JDT indexing
+			// XXX too slow!
+			/*while (!Job.getJobManager().isIdle()) {
       	waitEventLoop(0);
       }*/
-      // dispose project
-      TestProject testProject = m_testProject;
-      m_testProject = null;
-      m_project = null;
-      m_javaProject = null;
-      disposeProjectWithRetry(testProject);
-      // print memory XXX
-      /*{
+			// dispose project
+			TestProject testProject = m_testProject;
+			m_testProject = null;
+			m_project = null;
+			m_javaProject = null;
+			disposeProjectWithRetry(testProject);
+			// print memory XXX
+			/*{
       	//int count = 15;
       	int count = 2;
       	for (int i = 0; i < count; i++) {
@@ -158,441 +158,441 @@ public void do_projectDispose() throws Exception {
       		+ "\n\t\t\t"
       		+ (Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()));
       }*/
-      // print Display.controlTable
-      /*{
+			// print Display.controlTable
+			/*{
       	Control[] controlTable =
       			(Control[]) ReflectionUtils.getFieldObject(Display.getDefault(), "controlTable");
       	System.out.println("controls: " + controlTable.length);
       }*/
-    }
-  }
-
-  /**
-   * Dispose project, wait if fails several time.
-   */
-  private void disposeProjectWithRetry(TestProject testProject) throws Exception {
-    Throwable error = null;
-    for (int i = 0; i < 100; i++) {
-      try {
-        testProject.dispose();
-        return;
-      } catch (Throwable e) {
-        error = e;
-        System.gc();
-      }
-      waitForAutoBuild();
-      waitEventLoop(10);
-    }
-    if (error != null) {
-      throw new Error(error);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Specifies that all resources created before should not be deleted of {@link #tearDown()}, but
-   * they will be deleted with project on {@link #test_tearDown()}.
-   */
-  public static void forgetCreatedResources() {
-    m_createdResources.clear();
-  }
-
-  /**
-   * Does auto-build and checks that created {@link ICompilationUnit}'s have no compilation
-   * problems.
-   */
-  public static void waitForAutoBuild() throws Exception {
-    // Wait for workspace jobs such as file creation
-    waitEventLoop(25);
-    // Wait for auto-builder to handle all newly created files
-    TestProject.waitForAutoBuild();
-    // check for compilation problems
-    String problemsText = "";
-    for (IFile file : m_createdResources) {
-      // When we test refactorings, we may rename/move resources, so IFile may disappear.
-      // Note, that after refactorings we dispose project to restore initial, clean state.
-      if (!file.exists()) {
-        continue;
-      }
-      // check for problem markers
-      IMarker[] markers =
-          file.findMarkers(
-              IJavaModelMarker.JAVA_MODEL_PROBLEM_MARKER,
-              true,
-              IResource.DEPTH_INFINITE);
-      for (IMarker marker : markers) {
-        if (marker.getAttribute(IMarker.SEVERITY, IMarker.SEVERITY_ERROR) == IMarker.SEVERITY_ERROR) {
-          problemsText +=
-              "\n"
-                  + file.getFullPath()
-                  + "\n\tline "
-                  + marker.getAttribute(IMarker.LINE_NUMBER)
-                  + "\n\t"
-                  + marker.getAttribute(IMarker.MESSAGE);
-        }
-      }
-    }
-    assertEquals("", problemsText);
-  }
-
-  /**
-   * Creates {@link ICompilationUnit} with given name and source.
-   */
-  public final ICompilationUnit createModelCompilationUnit(String packageName,
-      String unitName,
-      String code) throws Exception {
-    IPackageFragment pkg = m_testProject.getPackage(packageName);
-    // create unit
-    ICompilationUnit compilationUnit = m_testProject.createUnit(pkg, unitName, code);
-    IFile resource = (IFile) compilationUnit.getUnderlyingResource();
-    m_createdResources.add(resource);
-    // OK, return unit
-    return compilationUnit;
-  }
-
-  /**
-   * Creates {@link ICompilationUnit} with given name and source.
-   *
-   * @return the main {@link IType}.
-   */
-  public final IType createModelType(String packageName, String unitName, String code)
-      throws Exception {
-    ICompilationUnit compilationUnit = createModelCompilationUnit(packageName, unitName, code);
-    return compilationUnit.getTypes()[0];
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IFile: getFile()
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link IFile} with given folder/name, relative to "src" folder.
-   */
-  public static IFile getFileSrc(String folderName, String fileName) {
-    return getFile("src/" + folderName, fileName);
-  }
-
-  /**
-   * @return the {@link IFile} with given folder/name, relative to {@link IProject}.
-   */
-  public static IFile getFile(String folderName, String fileName) {
-    return getFile(m_project, folderName, fileName);
-  }
-
-  /**
-   * @return the {@link IFile} with given folder/name, relative to {@link IProject}.
-   */
-  public static IFile getFile(IProject project, String folderName, String fileName) {
-    return getFile(project, folderName + "/" + fileName);
-  }
-
-  /**
-   * @return the {@link IFile} with given path, relative to "src" folder.
-   */
-  public static IFile getFileSrc(String path) {
-    return getFile("src/" + path);
-  }
-
-  /**
-   * @return the {@link IFile} with given path, relative to {@link IProject}.
-   */
-  public static IFile getFile(String path) {
-    return getFile(m_project, path);
-  }
-
-  /**
-   * @return the {@link IFile} with given path, relative to {@link IProject}.
-   */
-  public static IFile getFile(IProject project, String path) {
-    return project.getFile(new Path(path));
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IFile: getContent()
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link String} contents of existing {@link IFile}, relative to "src" folder.
-   */
-  public static String getFileContentSrc(IProject project, String path) throws Exception {
-    return getFileContent(project, "src/" + path);
-  }
-
-  /**
-   * @return the {@link String} contents of existing {@link IFile}, relative to "src" folder.
-   */
-  public static String getFileContentSrc(String path) {
-    return getFileContent("src/" + path);
-  }
-
-  /**
-   * @return the {@link String} contents of existing {@link IFile}, relative to {@link IProject}.
-   */
-  public static String getFileContent(IProject project, String path) {
-    IFile file = getFile(project, path);
-    return getFileContent(file);
-  }
-
-  /**
-   * @return the {@link String} contents of existing {@link IFile}, relative to {@link IProject}.
-   */
-  public static String getFileContent(String path) {
-    IFile file = getFile(path);
-    return getFileContent(file);
-  }
-
-  /**
-   * @return the {@link String} contents of existing {@link IFile}.
-   */
-  public static String getFileContent(IFile file) {
-    if (!file.exists()) {
-      fail("File " + file + " does not exist.");
-    }
-    try {
-      return IOUtils2.readString(file.getContents());
-    } catch (Throwable e) {
-      throw ReflectionUtils.propagate(e);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IFile: setContent()
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Creates/updates {@link IFile} with given folder/name, relative to "src" folder.
-   */
-  public static IFile setFileContentSrc(String folderName, String fileName, String content)
-      throws Exception {
-    return setFileContent("src/" + folderName, fileName, content);
-  }
-
-  /**
-   * Creates/updates {@link IFile} with given folder/name, relative to {@link IProject}.
-   */
-  public static IFile setFileContent(String folderName, String fileName, String content)
-      throws Exception {
-    return setFileContent(folderName + "/" + fileName, content);
-  }
-
-  /**
-   * Creates/updates {@link IFile} with given folder/name, relative to {@link IProject}.
-   *
-   * @return the created/updated {@link IFile}.
-   */
-  public static IFile setFileContent(IProject project,
-      String folderName,
-      String fileName,
-      String content) throws Exception {
-    return setFileContent(project, folderName + "/" + fileName, content);
-  }
-
-  /**
-   * Creates/updates {@link IFile} with given path, relative to "src" folder.
-   */
-  public static IFile setFileContentSrc(String path, String content) throws Exception {
-    return setFileContent("src/" + path, content);
-  }
-
-  /**
-   * Creates/updates {@link IFile} with given path, relative to {@link IProject}.
-   */
-  public static IFile setFileContent(String path, String content) throws Exception {
-    IFile file = getFile(path);
-    setFileContent(file, content);
-    return file;
-  }
-
-  /**
-   * Creates/updates {@link IFile} with given folder/name, relative to "src" folder.
-   *
-   * @return the created/updated {@link IFile}.
-   */
-  public static IFile setFileContentSrc(IProject project, String path, String content)
-      throws Exception {
-    return setFileContent(project, "src/" + path, content);
-  }
-
-  /**
-   * Creates/updates {@link IFile} with given folder/name, relative to {@link IProject}.
-   *
-   * @return the created/updated {@link IFile}.
-   */
-  public static IFile setFileContent(IProject project, String path, String content)
-      throws Exception {
-    IFile file = getFile(project, path);
-    setFileContent0(file, content);
-    return file;
-  }
-
-  /**
-   * Creates/updates {@link IFile} with given content.
-   */
-  public static void setFileContent(IFile file, String content) throws Exception {
-    boolean created = setFileContent0(file, content);
-    if (created) {
-      m_createdResources.add(file);
-    }
-  }
-
-  /**
-   * Creates/updates {@link IFile} with given content.
-   *
-   * @return <code>true</code> if {@link IFile} was created.
-   */
-  public static boolean setFileContent0(IFile file, String content) throws Exception {
-    return setFileContent(file, content.getBytes());
-  }
-
-  /**
-   * Creates/updates {@link IFile} with given content.
-   *
-   * @return <code>true</code> if {@link IFile} was created.
-   */
-  public static boolean setFileContent(IFile file, byte[] bytes) throws CoreException {
-    return IOUtils2.setFileContents(file, new ByteArrayInputStream(bytes));
-  }
-
-  /**
-   * Creates/updates {@link IFile} with given content.
-   *
-   * @return <code>true</code> if {@link IFile} was created.
-   */
-  public static boolean setFileContent(IFile file, InputStream inputStream) throws CoreException {
-    return IOUtils2.setFileContents(file, inputStream);
-  }
-
-  /**
-   * Asserts that {@value #m_testProject} has {@link IFile} at given path.
-   */
-  public static void assertFileExists(String pathString) {
-    IFile file = getFile(pathString);
-    assertTrue(file.exists());
-  }
-
-  /**
-   * Asserts that {@value #m_testProject} has not {@link IFile} at given path.
-   */
-  public static void assertFileNotExists(String pathString) {
-    IFile file = getFile(pathString);
-    assertFalse(file.exists());
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IFolder utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the existing {@link IFolder} with given path, relative to "src" folder.
-   */
-  public static IFolder getFolderSrc(String path) throws CoreException {
-    return getFolder("src/" + path);
-  }
-
-  /**
-   * @return the (may be not existing) {@link IFolder} with given path, relative to {@link IProject}
-   *         .
-   */
-  public static IFolder getFolder0(String fullPath) throws CoreException {
-    IPath path = new Path(fullPath);
-    return m_project.getFolder(path);
-  }
-
-  /**
-   * @return the existing {@link IFolder} with given path, relative to {@link IProject}.
-   */
-  public static IFolder getFolder(String path) throws CoreException {
-    IFolder folder = getFolder0(path);
-    IOUtils2.ensureFolderExists(folder);
-    return folder;
-  }
-
-  /**
-   * Ensures that {@link IFolder} with given name exists, so exist all its parent {@link IFolder}'s.
-   */
-  public final IFolder ensureFolderExists(String path) throws CoreException {
-    return IOUtils2.ensureFolderExists(m_project, path);
-  }
-
-  /**
-   * Deletes {@link IFile}'s in given {@link IFolder} recursively.
-   */
-  public static void deleteFiles(IFolder folder) throws Exception {
-    for (IResource resource : folder.members()) {
-      if (resource instanceof IFolder) {
-        deleteFiles((IFolder) resource);
-      }
-      resource.delete(true, null);
-    }
-  }
-
-  /**
-   * Force deletes {@link IFile}.
-   */
-  public static void forceDeleteFile(IFile file) {
-    while (file.exists()) {
-      try {
-        file.refreshLocal(IResource.DEPTH_INFINITE, null);
-      } catch (Throwable e) {
-      }
-      try {
-        file.delete(true, null);
-      } catch (Throwable e) {
-        waitEventLoop(100);
-      }
-    }
-  }
-
-  /**
-   * Force deletes {@link ICompilationUnit}.
-   */
-  public static void forceDeleteCompilationUnit(ICompilationUnit cu) {
-    while (cu.exists()) {
-      try {
-        cu.getResource().refreshLocal(IResource.DEPTH_INFINITE, null);
-      } catch (Throwable e) {
-      }
-      try {
-        cu.delete(true, null);
-      } catch (Throwable e) {
-        waitEventLoop(100);
-      }
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // PNG image creation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Creates {@link IFile} with PNG image, schedules this file for clean up.
-   */
-  public final IFile createImagePNG(String path, int width, int height) throws Exception {
-    IFile file = getFile(path);
-    byte[] bytes = createImageBytesPNG(width, height);
-    boolean created = IOUtils2.setFileContents(file, new ByteArrayInputStream(bytes));
-    if (created) {
-      m_createdResources.add(file);
-    }
-    return file;
-  }
-
-  private byte[] createImageBytesPNG(int width, int height) {
-    Image myImage = new Image(null, width, height);
-    ImageLoader imageLoader = new ImageLoader();
-    imageLoader.data = new ImageData[]{myImage.getImageData()};
-    ByteArrayOutputStream baos = new ByteArrayOutputStream();
-    imageLoader.save(baos, SWT.IMAGE_PNG);
-    myImage.dispose();
-    return baos.toByteArray();
-  }
+		}
+	}
+
+	/**
+	 * Dispose project, wait if fails several time.
+	 */
+	private void disposeProjectWithRetry(TestProject testProject) throws Exception {
+		Throwable error = null;
+		for (int i = 0; i < 100; i++) {
+			try {
+				testProject.dispose();
+				return;
+			} catch (Throwable e) {
+				error = e;
+				System.gc();
+			}
+			waitForAutoBuild();
+			waitEventLoop(10);
+		}
+		if (error != null) {
+			throw new Error(error);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Specifies that all resources created before should not be deleted of {@link #tearDown()}, but
+	 * they will be deleted with project on {@link #test_tearDown()}.
+	 */
+	public static void forgetCreatedResources() {
+		m_createdResources.clear();
+	}
+
+	/**
+	 * Does auto-build and checks that created {@link ICompilationUnit}'s have no compilation
+	 * problems.
+	 */
+	public static void waitForAutoBuild() throws Exception {
+		// Wait for workspace jobs such as file creation
+		waitEventLoop(25);
+		// Wait for auto-builder to handle all newly created files
+		TestProject.waitForAutoBuild();
+		// check for compilation problems
+		String problemsText = "";
+		for (IFile file : m_createdResources) {
+			// When we test refactorings, we may rename/move resources, so IFile may disappear.
+			// Note, that after refactorings we dispose project to restore initial, clean state.
+			if (!file.exists()) {
+				continue;
+			}
+			// check for problem markers
+			IMarker[] markers =
+					file.findMarkers(
+							IJavaModelMarker.JAVA_MODEL_PROBLEM_MARKER,
+							true,
+							IResource.DEPTH_INFINITE);
+			for (IMarker marker : markers) {
+				if (marker.getAttribute(IMarker.SEVERITY, IMarker.SEVERITY_ERROR) == IMarker.SEVERITY_ERROR) {
+					problemsText +=
+							"\n"
+									+ file.getFullPath()
+									+ "\n\tline "
+									+ marker.getAttribute(IMarker.LINE_NUMBER)
+									+ "\n\t"
+									+ marker.getAttribute(IMarker.MESSAGE);
+				}
+			}
+		}
+		assertEquals("", problemsText);
+	}
+
+	/**
+	 * Creates {@link ICompilationUnit} with given name and source.
+	 */
+	public final ICompilationUnit createModelCompilationUnit(String packageName,
+			String unitName,
+			String code) throws Exception {
+		IPackageFragment pkg = m_testProject.getPackage(packageName);
+		// create unit
+		ICompilationUnit compilationUnit = m_testProject.createUnit(pkg, unitName, code);
+		IFile resource = (IFile) compilationUnit.getUnderlyingResource();
+		m_createdResources.add(resource);
+		// OK, return unit
+		return compilationUnit;
+	}
+
+	/**
+	 * Creates {@link ICompilationUnit} with given name and source.
+	 *
+	 * @return the main {@link IType}.
+	 */
+	public final IType createModelType(String packageName, String unitName, String code)
+			throws Exception {
+		ICompilationUnit compilationUnit = createModelCompilationUnit(packageName, unitName, code);
+		return compilationUnit.getTypes()[0];
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IFile: getFile()
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link IFile} with given folder/name, relative to "src" folder.
+	 */
+	public static IFile getFileSrc(String folderName, String fileName) {
+		return getFile("src/" + folderName, fileName);
+	}
+
+	/**
+	 * @return the {@link IFile} with given folder/name, relative to {@link IProject}.
+	 */
+	public static IFile getFile(String folderName, String fileName) {
+		return getFile(m_project, folderName, fileName);
+	}
+
+	/**
+	 * @return the {@link IFile} with given folder/name, relative to {@link IProject}.
+	 */
+	public static IFile getFile(IProject project, String folderName, String fileName) {
+		return getFile(project, folderName + "/" + fileName);
+	}
+
+	/**
+	 * @return the {@link IFile} with given path, relative to "src" folder.
+	 */
+	public static IFile getFileSrc(String path) {
+		return getFile("src/" + path);
+	}
+
+	/**
+	 * @return the {@link IFile} with given path, relative to {@link IProject}.
+	 */
+	public static IFile getFile(String path) {
+		return getFile(m_project, path);
+	}
+
+	/**
+	 * @return the {@link IFile} with given path, relative to {@link IProject}.
+	 */
+	public static IFile getFile(IProject project, String path) {
+		return project.getFile(new Path(path));
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IFile: getContent()
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link String} contents of existing {@link IFile}, relative to "src" folder.
+	 */
+	public static String getFileContentSrc(IProject project, String path) throws Exception {
+		return getFileContent(project, "src/" + path);
+	}
+
+	/**
+	 * @return the {@link String} contents of existing {@link IFile}, relative to "src" folder.
+	 */
+	public static String getFileContentSrc(String path) {
+		return getFileContent("src/" + path);
+	}
+
+	/**
+	 * @return the {@link String} contents of existing {@link IFile}, relative to {@link IProject}.
+	 */
+	public static String getFileContent(IProject project, String path) {
+		IFile file = getFile(project, path);
+		return getFileContent(file);
+	}
+
+	/**
+	 * @return the {@link String} contents of existing {@link IFile}, relative to {@link IProject}.
+	 */
+	public static String getFileContent(String path) {
+		IFile file = getFile(path);
+		return getFileContent(file);
+	}
+
+	/**
+	 * @return the {@link String} contents of existing {@link IFile}.
+	 */
+	public static String getFileContent(IFile file) {
+		if (!file.exists()) {
+			fail("File " + file + " does not exist.");
+		}
+		try {
+			return IOUtils2.readString(file.getContents());
+		} catch (Throwable e) {
+			throw ReflectionUtils.propagate(e);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IFile: setContent()
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Creates/updates {@link IFile} with given folder/name, relative to "src" folder.
+	 */
+	public static IFile setFileContentSrc(String folderName, String fileName, String content)
+			throws Exception {
+		return setFileContent("src/" + folderName, fileName, content);
+	}
+
+	/**
+	 * Creates/updates {@link IFile} with given folder/name, relative to {@link IProject}.
+	 */
+	public static IFile setFileContent(String folderName, String fileName, String content)
+			throws Exception {
+		return setFileContent(folderName + "/" + fileName, content);
+	}
+
+	/**
+	 * Creates/updates {@link IFile} with given folder/name, relative to {@link IProject}.
+	 *
+	 * @return the created/updated {@link IFile}.
+	 */
+	public static IFile setFileContent(IProject project,
+			String folderName,
+			String fileName,
+			String content) throws Exception {
+		return setFileContent(project, folderName + "/" + fileName, content);
+	}
+
+	/**
+	 * Creates/updates {@link IFile} with given path, relative to "src" folder.
+	 */
+	public static IFile setFileContentSrc(String path, String content) throws Exception {
+		return setFileContent("src/" + path, content);
+	}
+
+	/**
+	 * Creates/updates {@link IFile} with given path, relative to {@link IProject}.
+	 */
+	public static IFile setFileContent(String path, String content) throws Exception {
+		IFile file = getFile(path);
+		setFileContent(file, content);
+		return file;
+	}
+
+	/**
+	 * Creates/updates {@link IFile} with given folder/name, relative to "src" folder.
+	 *
+	 * @return the created/updated {@link IFile}.
+	 */
+	public static IFile setFileContentSrc(IProject project, String path, String content)
+			throws Exception {
+		return setFileContent(project, "src/" + path, content);
+	}
+
+	/**
+	 * Creates/updates {@link IFile} with given folder/name, relative to {@link IProject}.
+	 *
+	 * @return the created/updated {@link IFile}.
+	 */
+	public static IFile setFileContent(IProject project, String path, String content)
+			throws Exception {
+		IFile file = getFile(project, path);
+		setFileContent0(file, content);
+		return file;
+	}
+
+	/**
+	 * Creates/updates {@link IFile} with given content.
+	 */
+	public static void setFileContent(IFile file, String content) throws Exception {
+		boolean created = setFileContent0(file, content);
+		if (created) {
+			m_createdResources.add(file);
+		}
+	}
+
+	/**
+	 * Creates/updates {@link IFile} with given content.
+	 *
+	 * @return <code>true</code> if {@link IFile} was created.
+	 */
+	public static boolean setFileContent0(IFile file, String content) throws Exception {
+		return setFileContent(file, content.getBytes());
+	}
+
+	/**
+	 * Creates/updates {@link IFile} with given content.
+	 *
+	 * @return <code>true</code> if {@link IFile} was created.
+	 */
+	public static boolean setFileContent(IFile file, byte[] bytes) throws CoreException {
+		return IOUtils2.setFileContents(file, new ByteArrayInputStream(bytes));
+	}
+
+	/**
+	 * Creates/updates {@link IFile} with given content.
+	 *
+	 * @return <code>true</code> if {@link IFile} was created.
+	 */
+	public static boolean setFileContent(IFile file, InputStream inputStream) throws CoreException {
+		return IOUtils2.setFileContents(file, inputStream);
+	}
+
+	/**
+	 * Asserts that {@value #m_testProject} has {@link IFile} at given path.
+	 */
+	public static void assertFileExists(String pathString) {
+		IFile file = getFile(pathString);
+		assertTrue(file.exists());
+	}
+
+	/**
+	 * Asserts that {@value #m_testProject} has not {@link IFile} at given path.
+	 */
+	public static void assertFileNotExists(String pathString) {
+		IFile file = getFile(pathString);
+		assertFalse(file.exists());
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IFolder utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the existing {@link IFolder} with given path, relative to "src" folder.
+	 */
+	public static IFolder getFolderSrc(String path) throws CoreException {
+		return getFolder("src/" + path);
+	}
+
+	/**
+	 * @return the (may be not existing) {@link IFolder} with given path, relative to {@link IProject}
+	 *         .
+	 */
+	public static IFolder getFolder0(String fullPath) throws CoreException {
+		IPath path = new Path(fullPath);
+		return m_project.getFolder(path);
+	}
+
+	/**
+	 * @return the existing {@link IFolder} with given path, relative to {@link IProject}.
+	 */
+	public static IFolder getFolder(String path) throws CoreException {
+		IFolder folder = getFolder0(path);
+		IOUtils2.ensureFolderExists(folder);
+		return folder;
+	}
+
+	/**
+	 * Ensures that {@link IFolder} with given name exists, so exist all its parent {@link IFolder}'s.
+	 */
+	public final IFolder ensureFolderExists(String path) throws CoreException {
+		return IOUtils2.ensureFolderExists(m_project, path);
+	}
+
+	/**
+	 * Deletes {@link IFile}'s in given {@link IFolder} recursively.
+	 */
+	public static void deleteFiles(IFolder folder) throws Exception {
+		for (IResource resource : folder.members()) {
+			if (resource instanceof IFolder) {
+				deleteFiles((IFolder) resource);
+			}
+			resource.delete(true, null);
+		}
+	}
+
+	/**
+	 * Force deletes {@link IFile}.
+	 */
+	public static void forceDeleteFile(IFile file) {
+		while (file.exists()) {
+			try {
+				file.refreshLocal(IResource.DEPTH_INFINITE, null);
+			} catch (Throwable e) {
+			}
+			try {
+				file.delete(true, null);
+			} catch (Throwable e) {
+				waitEventLoop(100);
+			}
+		}
+	}
+
+	/**
+	 * Force deletes {@link ICompilationUnit}.
+	 */
+	public static void forceDeleteCompilationUnit(ICompilationUnit cu) {
+		while (cu.exists()) {
+			try {
+				cu.getResource().refreshLocal(IResource.DEPTH_INFINITE, null);
+			} catch (Throwable e) {
+			}
+			try {
+				cu.delete(true, null);
+			} catch (Throwable e) {
+				waitEventLoop(100);
+			}
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// PNG image creation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Creates {@link IFile} with PNG image, schedules this file for clean up.
+	 */
+	public final IFile createImagePNG(String path, int width, int height) throws Exception {
+		IFile file = getFile(path);
+		byte[] bytes = createImageBytesPNG(width, height);
+		boolean created = IOUtils2.setFileContents(file, new ByteArrayInputStream(bytes));
+		if (created) {
+			m_createdResources.add(file);
+		}
+		return file;
+	}
+
+	private byte[] createImageBytesPNG(int width, int height) {
+		Image myImage = new Image(null, width, height);
+		ImageLoader imageLoader = new ImageLoader();
+		imageLoader.data = new ImageData[]{myImage.getImageData()};
+		ByteArrayOutputStream baos = new ByteArrayOutputStream();
+		imageLoader.save(baos, SWT.IMAGE_PNG);
+		myImage.dispose();
+		return baos.toByteArray();
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/AbstractJavaTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/AbstractJavaTest.java
index a6cce2ba0..e6c1c8406 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/AbstractJavaTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/AbstractJavaTest.java
@@ -59,471 +59,471 @@
  * @author scheglov_ke
  */
 public class AbstractJavaTest extends AbstractJavaProjectTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Life cycle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void tearDown() throws Exception {
-    // don't ignore model compilation problems
-    m_ignoreModelCompileProblems = false;
-    // clear "last"
-    m_lastEditor = null;
-    m_lastModelUnit = null;
-    // continue
-    super.tearDown();
-  }
-
-  @Override
-  public void test_tearDown() throws Exception {
-    do_projectDispose();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Project operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void do_projectDispose() throws Exception {
-    super.do_projectDispose();
-    // clear "last"
-    m_lastEditor = null;
-    m_lastModelUnit = null;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // AST utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link Statement} with given index's in each {@link Block}.
-   */
-  protected static final Statement getStatement(Block block, int... indexes) {
-    Statement statement = block;
-    for (int i = 0; i < indexes.length; i++) {
-      int index = indexes[i];
-      if (index == -1) {
-        // handle -1 as "this", i.e. just ignore it, keep old statement
-      } else {
-        Block nextBlock;
-        if (statement instanceof IfStatement) {
-          nextBlock = (Block) ((IfStatement) statement).getThenStatement();
-        } else {
-          nextBlock = (Block) statement;
-        }
-        statement = (Statement) nextBlock.statements().get(index);
-      }
-    }
-    return statement;
-  }
-
-  /**
-   * @return the {@link ASTNode} with given source in current {@link AstEditor}.
-   */
-  protected final <T extends ASTNode> T getNode(String src, Class<T> clazz) {
-    ASTNode enclosingNode = m_lastEditor.getEnclosingNode(src);
-    return AstNodeUtils.getEnclosingNode(enclosingNode, clazz);
-  }
-
-  /**
-   * @return the {@link ASTNode} with given source in current {@link AstEditor}.
-   */
-  @SuppressWarnings("unchecked")
-  protected final <T extends ASTNode> T getNode(String src) {
-    return (T) m_lastEditor.getEnclosingNode(src);
-  }
-
-  /**
-   * @return the {@link MethodDeclaration} in top level {@link TypeDeclaration} of last
-   *         {@link AstEditor}.
-   */
-  protected final MethodDeclaration getMethod(String methodSignature) {
-    TypeDeclaration typeDeclaration = DomGenerics.types(m_lastEditor.getAstUnit()).get(0);
-    return AstNodeUtils.getMethodBySignature(typeDeclaration, methodSignature);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Reflection
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the value of field (accessible or not).
-   */
-  protected static Object getFieldValue(Object o, String fieldName) throws Exception {
-    return ReflectionUtils.getFieldByName(o.getClass(), fieldName).get(o);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  protected boolean m_ignoreModelCompileProblems = false;
-  protected ICompilationUnit m_lastModelUnit;
-  protected AstEditor m_lastEditor;
-
-  /**
-   * Creates unit Test.java with given source, parses it and returns single {@link TypeDeclaration}.
-   */
-  protected final TypeDeclaration createTypeDeclaration_TestC(String code) throws Exception {
-    String source = "package test;public class Test{" + code + "}";
-    CompilationUnit astUnit = createASTCompilationUnit("test", "Test.java", source);
-    // return type
-    assertEquals(1, astUnit.types().size());
-    return (TypeDeclaration) astUnit.types().get(0);
-  }
-
-  /**
-   * Creates unit Test.java with given source, parses it and returns single {@link TypeDeclaration}.
-   */
-  protected final TypeDeclaration createTypeDeclaration_TestD(String... lines) throws Exception {
-    String source = getSource(lines);
-    CompilationUnit astUnit = createASTCompilationUnit("test", "Test.java", source);
-    // return type
-    assertEquals(1, astUnit.types().size());
-    return (TypeDeclaration) astUnit.types().get(0);
-  }
-
-  /**
-   * Creates unit Test.java with given source, parses it and returns single {@link TypeDeclaration}.
-   */
-  protected final TypeDeclaration createTypeDeclaration_Test(String... lines) throws Exception {
-    String source = getSource2(new String[]{"package test;"}, getDoubleQuotes(lines));
-    CompilationUnit astUnit = createASTCompilationUnit("test", "Test.java", source);
-    // return type
-    assertEquals(1, astUnit.types().size());
-    return (TypeDeclaration) astUnit.types().get(0);
-  }
-
-  /**
-   * @return the {@link TypeDeclaration} for given source.
-   */
-  protected final TypeDeclaration createTypeDeclaration(String packageName,
-      String unitName,
-      String source) throws Exception {
-    CompilationUnit compilationUnit = createASTCompilationUnit(packageName, unitName, source);
-    return (TypeDeclaration) compilationUnit.types().get(0);
-  }
-
-  /**
-   * Creates {@link ICompilationUnit} with given name and source, parses it and returns
-   * {@link CompilationUnit}.
-   */
-  protected final CompilationUnit createASTCompilationUnit(String packageName,
-      String unitName,
-      String code) throws Exception {
-    ICompilationUnit modelUnit = createModelCompilationUnit(packageName, unitName, code);
-    return createASTCompilationUnit(modelUnit);
-  }
-
-  protected final CompilationUnit createASTCompilationUnit(ICompilationUnit modelUnit)
-      throws Exception {
-    // prepare and check ASTEditor
-    AstEditor editor = new AstEditor(modelUnit);
-    assertSame(modelUnit, editor.getModelUnit());
-    // check AST unit
-    CompilationUnit astUnit = editor.getAstUnit();
-    assertNotNull(astUnit);
-    // check for compile errors
-    if (!m_ignoreModelCompileProblems) {
-      IProblem[] problems = astUnit.getProblems();
-      for (int i = 0; i < problems.length; i++) {
-        IProblem problem = problems[i];
-        if (problem.isError()) {
-          fail("Error found: " + problem);
-        }
-      }
-    }
-    //
-    m_lastModelUnit = modelUnit;
-    m_lastEditor = editor;
-    return astUnit;
-  }
-
-  /**
-   * @return the single {@link VariableDeclaration} of {@link FieldDeclaration} with given index.
-   */
-  protected final static VariableDeclaration getFieldFragment(TypeDeclaration typeDeclaration,
-      int fieldIndex) {
-    FieldDeclaration fieldDeclaration = typeDeclaration.getFields()[fieldIndex];
-    return (VariableDeclarationFragment) fieldDeclaration.fragments().get(0);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Checks
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Asserts that given {@link JavaInfo} has tightly related nodes with given source.
-   */
-  protected static void assertRelatedNodes(JavaInfo javaInfo, String[] sourceTightlyNodes)
-      throws Exception {
-    List<ASTNode> nodes = javaInfo.getRelatedNodes();
-    assertEquals(
-        StringUtils.join(sourceTightlyNodes, ", ")
-            + " != "
-            + StringUtils.join(nodes.iterator(), ", "),
-        sourceTightlyNodes.length,
-        nodes.size());
-    for (int i = 0; i < nodes.size(); i++) {
-      ASTNode node = nodes.get(i);
-      // prepare node to compare source
-      ASTNode sourceNode = JavaInfo.getRelatedNodeForSource(node);
-      // compare sources
-      assertEquals(sourceTightlyNodes[i], javaInfo.getEditor().getSource(sourceNode));
-    }
-  }
-
-  /**
-   * Asserts that {@link AstEditor} has valid AST tree and expected source.
-   */
-  protected static void assertEditor(String expectedSource, AstEditor editor) {
-    assertEquals(expectedSource, editor.getSource());
-    assertAST(editor);
-  }
-
-  /**
-   * Checks several things about AST tree. <li>all {@link SimpleName}'s in given {@link AstEditor}
-   * has valid source;</li> <li>variables have {@link IVariableBinding} with not-null
-   * {@link ITypeBinding};</li> <li>
-   * import, types and variable declaration have not-null {@link ITypeBinding};</li> <li>statements
-   * of know types begin and start with known characters;</li> <br/>
-   * Of course this does not mean that ALL is good, but this is better than nothing. ;-)
-   */
-  protected static void assertAST(final AstEditor editor) {
-    final AST editorAST = editor.getAstUnit().getAST();
-    editor.getAstUnit().accept(new ASTVisitor(true) {
-      @Override
-      public void endVisit(SimpleName node) {
-        assertEquals(node.getIdentifier(), getSource(node));
-        boolean isVariable = false;
-        if (node.getParent() instanceof MethodInvocation) {
-          MethodInvocation invocation = (MethodInvocation) node.getParent();
-          IMethodBinding binding = AstNodeUtils.getMethodBinding(invocation);
-          if (!Modifier.isStatic(binding.getModifiers())) {
-            isVariable |= invocation.getExpression() == node;
-            isVariable |= invocation.arguments().contains(node);
-          }
-        }
-        isVariable |= node.getParent() instanceof InfixExpression;
-        if (isVariable) {
-          IVariableBinding variableBinding = AstNodeUtils.getVariableBinding(node);
-          assertNotNull(variableBinding);
-          assertNotNull(variableBinding.getType());
-        }
-      }
-
-      @Override
-      public void endVisit(TextElement node) {
-        assertEquals(node.getText(), getSource(node));
-      }
-
-      @Override
-      public void endVisit(NumberLiteral node) {
-        assertEquals(node.getToken(), getSource(node));
-      }
-
-      @Override
-      public void endVisit(VariableDeclarationFragment node) {
-        SimpleName name = node.getName();
-        assertEquals(name.getStartPosition(), node.getStartPosition());
-      }
-
-      @Override
-      public void preVisit(ASTNode node) {
-        assertSame(editorAST, node.getAST());
-        // check positions for parent/child
-        {
-          ASTNode parent = node.getParent();
-          if (parent != null) {
-            int begin = AstNodeUtils.getSourceBegin(node);
-            int end = AstNodeUtils.getSourceEnd(node);
-            int parent_begin = AstNodeUtils.getSourceBegin(parent);
-            int parent_end = AstNodeUtils.getSourceEnd(parent);
-            assertTrue(begin >= parent_begin);
-            assertTrue(end <= parent_end);
-          }
-        }
-        // check bindings
-        {
-          if (node instanceof ImportDeclaration) {
-            ImportDeclaration declaration = (ImportDeclaration) node;
-            if (!declaration.isOnDemand()) {
-              assertNotNull(AstNodeUtils.getTypeBinding(declaration.getName()));
-            }
-          }
-          if (node instanceof Type) {
-            Type type = (Type) node;
-            assertNotNull(AstNodeUtils.getTypeBinding(type));
-          }
-          if (node instanceof VariableDeclaration) {
-            VariableDeclaration declaration = (VariableDeclaration) node;
-            assertNotNull(AstNodeUtils.getTypeBinding(declaration.getName()));
-            if (declaration.getInitializer() != null) {
-              assertNotNull(AstNodeUtils.getTypeBinding(declaration.getInitializer()));
-            }
-          }
-          if (node instanceof MethodInvocation) {
-            MethodInvocation invocation = (MethodInvocation) node;
-            IMethodBinding methodBinding = AstNodeUtils.getMethodBinding(invocation);
-            assertNotNull(methodBinding);
-            // check that names in MethodInvocation and IMethodBinding are same
-            assertEquals(invocation.getName().getIdentifier(), methodBinding.getName());
-            //
-            // check that types of parameters and arguments are compatible
-            ITypeBinding[] parameterTypes = methodBinding.getParameterTypes();
-            List<?> arguments = invocation.arguments();
-            for (int i = 0; i < parameterTypes.length; i++) {
-              ITypeBinding parameterType = parameterTypes[i];
-              if (i == parameterTypes.length - 1 && parameterType.isArray()) {
-                // ellipsis support (last parameter is array)
-                if (i == arguments.size()) {
-                  // ellipsis parameter skipped
-                  break;
-                }
-                {
-                  // check for exactly array
-                  Expression argument = (Expression) arguments.get(i);
-                  String argumentClassName = AstNodeUtils.getFullyQualifiedName(argument, false);
-                  if (AstNodeUtils.isSuccessorOf(parameterType, argumentClassName)) {
-                    // parameter is exactly array
-                    break;
-                  }
-                }
-                // check all other arguments
-                ITypeBinding parameterElementType = parameterType.getElementType();
-                for (int j = i; j < arguments.size(); j++) {
-                  Expression argument = (Expression) arguments.get(j);
-                  String argumentClassName = AstNodeUtils.getFullyQualifiedName(argument, false);
-                  assertTrue(AstNodeUtils.isSuccessorOf(parameterElementType, argumentClassName));
-                }
-                break;
-              }
-              Expression argument = (Expression) arguments.get(i);
-              String argumentClassName = AstNodeUtils.getFullyQualifiedName(argument, false);
-              // FIXME
-              //assertTrue(
-              AstNodeUtils.isSuccessorOf(parameterType, argumentClassName);
-              //	);
-            }
-          }
-          if (node instanceof MethodDeclaration) {
-            MethodDeclaration declaration = (MethodDeclaration) node;
-            IMethodBinding methodBinding = AstNodeUtils.getMethodBinding(declaration);
-            assertNotNull(methodBinding);
-            // check that names in MethodDeclaration and IMethodBinding are same
-            assertEquals(declaration.getName().getIdentifier(), methodBinding.getName());
-            // check return type
-            {
-              Type returnType = declaration.getReturnType2();
-              if (returnType != null) {
-                ITypeBinding bindingType = methodBinding.getReturnType();
-                ITypeBinding declarationType = AstNodeUtils.getTypeBinding(returnType);
-                assertEqualTypes(bindingType, declarationType);
-              }
-            }
-            // check parameters
-            ITypeBinding[] bindingTypes = methodBinding.getParameterTypes();
-            List<SingleVariableDeclaration> parameters = DomGenerics.parameters(declaration);
-            assertEquals(parameters.size(), bindingTypes.length);
-            // check that types of parameters and arguments are same
-            for (int i = 0; i < bindingTypes.length; i++) {
-              ITypeBinding bindingType = bindingTypes[i];
-              SingleVariableDeclaration parameter = parameters.get(i);
-              ITypeBinding parameterType = AstNodeUtils.getTypeBinding(parameter);
-              assertEqualTypes(bindingType, parameterType);
-            }
-          }
-        }
-        // check source prefix/suffix
-        {
-          if (node instanceof ExpressionStatement
-              || node instanceof VariableDeclarationStatement
-              || node instanceof FieldDeclaration
-              || node instanceof ImportDeclaration
-              || node instanceof PackageDeclaration) {
-            checkNodeSuffix(node, ";");
-          }
-          if (node instanceof MethodInvocation) {
-            checkNodeSuffix(node, ")");
-          }
-          if (node instanceof ParenthesizedExpression) {
-            checkNodePrefix(node, "(");
-            checkNodeSuffix(node, ")");
-          }
-          if (node instanceof Block) {
-            checkNodePrefix(node, "{");
-            checkNodeSuffix(node, "}");
-          }
-          if (node instanceof TypeDeclaration || node instanceof AnonymousClassDeclaration) {
-            checkNodeSuffix(node, "}");
-          }
-          if (node instanceof StringLiteral) {
-            checkNodePrefix(node, "\"");
-            checkNodeSuffix(node, "\"");
-          }
-        }
-        // check Block: statements order
-        if (node instanceof Block) {
-          Block block = (Block) node;
-          int lastStatementEnd = -1;
-          for (Statement statement : DomGenerics.statements(block)) {
-            assertTrue(lastStatementEnd <= statement.getStartPosition());
-            lastStatementEnd = AstNodeUtils.getSourceEnd(statement);
-          }
-        }
-        // check TypeDeclaration: declarations order
-        if (node instanceof TypeDeclaration) {
-          TypeDeclaration typeDeclaration = (TypeDeclaration) node;
-          int lastDeclarationEnd = -1;
-          for (BodyDeclaration declaration : DomGenerics.bodyDeclarations(typeDeclaration)) {
-            assertTrue(lastDeclarationEnd <= declaration.getStartPosition());
-            lastDeclarationEnd = AstNodeUtils.getSourceEnd(declaration);
-          }
-        }
-      }
-
-      private void assertEqualTypes(ITypeBinding bindingType, ITypeBinding parameterType) {
-        String bindingTypeName = AstNodeUtils.getFullyQualifiedName(bindingType, false);
-        String parameterTypeName = AstNodeUtils.getFullyQualifiedName(parameterType, false);
-        assertEquals(bindingTypeName, parameterTypeName);
-      }
-
-      ////////////////////////////////////////////////////////////////////////////
-      //
-      // Checks
-      //
-      ////////////////////////////////////////////////////////////////////////////
-      private void checkNodePrefix(ASTNode node, String prefix) {
-        assertEquals(prefix, getSource(node.getStartPosition(), prefix.length()));
-      }
-
-      private void checkNodeSuffix(ASTNode node, String suffix) {
-        int end = node.getStartPosition() + node.getLength();
-        assertEquals(suffix, getSource(end - suffix.length(), suffix.length()));
-      }
-
-      ////////////////////////////////////////////////////////////////////////////
-      //
-      // Source access
-      //
-      ////////////////////////////////////////////////////////////////////////////
-      private String getSource(int start, int length) {
-        try {
-          return editor.getSource(start, length);
-        } catch (Throwable e) {
-          throw ReflectionUtils.propagate(e);
-        }
-      }
-
-      private String getSource(ASTNode node) {
-        return getSource(node.getStartPosition(), node.getLength());
-      }
-    });
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Life cycle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void tearDown() throws Exception {
+		// don't ignore model compilation problems
+		m_ignoreModelCompileProblems = false;
+		// clear "last"
+		m_lastEditor = null;
+		m_lastModelUnit = null;
+		// continue
+		super.tearDown();
+	}
+
+	@Override
+	public void test_tearDown() throws Exception {
+		do_projectDispose();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Project operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void do_projectDispose() throws Exception {
+		super.do_projectDispose();
+		// clear "last"
+		m_lastEditor = null;
+		m_lastModelUnit = null;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// AST utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link Statement} with given index's in each {@link Block}.
+	 */
+	protected static final Statement getStatement(Block block, int... indexes) {
+		Statement statement = block;
+		for (int i = 0; i < indexes.length; i++) {
+			int index = indexes[i];
+			if (index == -1) {
+				// handle -1 as "this", i.e. just ignore it, keep old statement
+			} else {
+				Block nextBlock;
+				if (statement instanceof IfStatement) {
+					nextBlock = (Block) ((IfStatement) statement).getThenStatement();
+				} else {
+					nextBlock = (Block) statement;
+				}
+				statement = (Statement) nextBlock.statements().get(index);
+			}
+		}
+		return statement;
+	}
+
+	/**
+	 * @return the {@link ASTNode} with given source in current {@link AstEditor}.
+	 */
+	protected final <T extends ASTNode> T getNode(String src, Class<T> clazz) {
+		ASTNode enclosingNode = m_lastEditor.getEnclosingNode(src);
+		return AstNodeUtils.getEnclosingNode(enclosingNode, clazz);
+	}
+
+	/**
+	 * @return the {@link ASTNode} with given source in current {@link AstEditor}.
+	 */
+	@SuppressWarnings("unchecked")
+	protected final <T extends ASTNode> T getNode(String src) {
+		return (T) m_lastEditor.getEnclosingNode(src);
+	}
+
+	/**
+	 * @return the {@link MethodDeclaration} in top level {@link TypeDeclaration} of last
+	 *         {@link AstEditor}.
+	 */
+	protected final MethodDeclaration getMethod(String methodSignature) {
+		TypeDeclaration typeDeclaration = DomGenerics.types(m_lastEditor.getAstUnit()).get(0);
+		return AstNodeUtils.getMethodBySignature(typeDeclaration, methodSignature);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Reflection
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the value of field (accessible or not).
+	 */
+	protected static Object getFieldValue(Object o, String fieldName) throws Exception {
+		return ReflectionUtils.getFieldByName(o.getClass(), fieldName).get(o);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	protected boolean m_ignoreModelCompileProblems = false;
+	protected ICompilationUnit m_lastModelUnit;
+	protected AstEditor m_lastEditor;
+
+	/**
+	 * Creates unit Test.java with given source, parses it and returns single {@link TypeDeclaration}.
+	 */
+	protected final TypeDeclaration createTypeDeclaration_TestC(String code) throws Exception {
+		String source = "package test;public class Test{" + code + "}";
+		CompilationUnit astUnit = createASTCompilationUnit("test", "Test.java", source);
+		// return type
+		assertEquals(1, astUnit.types().size());
+		return (TypeDeclaration) astUnit.types().get(0);
+	}
+
+	/**
+	 * Creates unit Test.java with given source, parses it and returns single {@link TypeDeclaration}.
+	 */
+	protected final TypeDeclaration createTypeDeclaration_TestD(String... lines) throws Exception {
+		String source = getSource(lines);
+		CompilationUnit astUnit = createASTCompilationUnit("test", "Test.java", source);
+		// return type
+		assertEquals(1, astUnit.types().size());
+		return (TypeDeclaration) astUnit.types().get(0);
+	}
+
+	/**
+	 * Creates unit Test.java with given source, parses it and returns single {@link TypeDeclaration}.
+	 */
+	protected final TypeDeclaration createTypeDeclaration_Test(String... lines) throws Exception {
+		String source = getSource2(new String[]{"package test;"}, getDoubleQuotes(lines));
+		CompilationUnit astUnit = createASTCompilationUnit("test", "Test.java", source);
+		// return type
+		assertEquals(1, astUnit.types().size());
+		return (TypeDeclaration) astUnit.types().get(0);
+	}
+
+	/**
+	 * @return the {@link TypeDeclaration} for given source.
+	 */
+	protected final TypeDeclaration createTypeDeclaration(String packageName,
+			String unitName,
+			String source) throws Exception {
+		CompilationUnit compilationUnit = createASTCompilationUnit(packageName, unitName, source);
+		return (TypeDeclaration) compilationUnit.types().get(0);
+	}
+
+	/**
+	 * Creates {@link ICompilationUnit} with given name and source, parses it and returns
+	 * {@link CompilationUnit}.
+	 */
+	protected final CompilationUnit createASTCompilationUnit(String packageName,
+			String unitName,
+			String code) throws Exception {
+		ICompilationUnit modelUnit = createModelCompilationUnit(packageName, unitName, code);
+		return createASTCompilationUnit(modelUnit);
+	}
+
+	protected final CompilationUnit createASTCompilationUnit(ICompilationUnit modelUnit)
+			throws Exception {
+		// prepare and check ASTEditor
+		AstEditor editor = new AstEditor(modelUnit);
+		assertSame(modelUnit, editor.getModelUnit());
+		// check AST unit
+		CompilationUnit astUnit = editor.getAstUnit();
+		assertNotNull(astUnit);
+		// check for compile errors
+		if (!m_ignoreModelCompileProblems) {
+			IProblem[] problems = astUnit.getProblems();
+			for (int i = 0; i < problems.length; i++) {
+				IProblem problem = problems[i];
+				if (problem.isError()) {
+					fail("Error found: " + problem);
+				}
+			}
+		}
+		//
+		m_lastModelUnit = modelUnit;
+		m_lastEditor = editor;
+		return astUnit;
+	}
+
+	/**
+	 * @return the single {@link VariableDeclaration} of {@link FieldDeclaration} with given index.
+	 */
+	protected final static VariableDeclaration getFieldFragment(TypeDeclaration typeDeclaration,
+			int fieldIndex) {
+		FieldDeclaration fieldDeclaration = typeDeclaration.getFields()[fieldIndex];
+		return (VariableDeclarationFragment) fieldDeclaration.fragments().get(0);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Checks
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Asserts that given {@link JavaInfo} has tightly related nodes with given source.
+	 */
+	protected static void assertRelatedNodes(JavaInfo javaInfo, String[] sourceTightlyNodes)
+			throws Exception {
+		List<ASTNode> nodes = javaInfo.getRelatedNodes();
+		assertEquals(
+				StringUtils.join(sourceTightlyNodes, ", ")
+				+ " != "
+				+ StringUtils.join(nodes.iterator(), ", "),
+				sourceTightlyNodes.length,
+				nodes.size());
+		for (int i = 0; i < nodes.size(); i++) {
+			ASTNode node = nodes.get(i);
+			// prepare node to compare source
+			ASTNode sourceNode = JavaInfo.getRelatedNodeForSource(node);
+			// compare sources
+			assertEquals(sourceTightlyNodes[i], javaInfo.getEditor().getSource(sourceNode));
+		}
+	}
+
+	/**
+	 * Asserts that {@link AstEditor} has valid AST tree and expected source.
+	 */
+	protected static void assertEditor(String expectedSource, AstEditor editor) {
+		assertEquals(expectedSource, editor.getSource());
+		assertAST(editor);
+	}
+
+	/**
+	 * Checks several things about AST tree. <li>all {@link SimpleName}'s in given {@link AstEditor}
+	 * has valid source;</li> <li>variables have {@link IVariableBinding} with not-null
+	 * {@link ITypeBinding};</li> <li>
+	 * import, types and variable declaration have not-null {@link ITypeBinding};</li> <li>statements
+	 * of know types begin and start with known characters;</li> <br/>
+	 * Of course this does not mean that ALL is good, but this is better than nothing. ;-)
+	 */
+	protected static void assertAST(final AstEditor editor) {
+		final AST editorAST = editor.getAstUnit().getAST();
+		editor.getAstUnit().accept(new ASTVisitor(true) {
+			@Override
+			public void endVisit(SimpleName node) {
+				assertEquals(node.getIdentifier(), getSource(node));
+				boolean isVariable = false;
+				if (node.getParent() instanceof MethodInvocation) {
+					MethodInvocation invocation = (MethodInvocation) node.getParent();
+					IMethodBinding binding = AstNodeUtils.getMethodBinding(invocation);
+					if (!Modifier.isStatic(binding.getModifiers())) {
+						isVariable |= invocation.getExpression() == node;
+						isVariable |= invocation.arguments().contains(node);
+					}
+				}
+				isVariable |= node.getParent() instanceof InfixExpression;
+				if (isVariable) {
+					IVariableBinding variableBinding = AstNodeUtils.getVariableBinding(node);
+					assertNotNull(variableBinding);
+					assertNotNull(variableBinding.getType());
+				}
+			}
+
+			@Override
+			public void endVisit(TextElement node) {
+				assertEquals(node.getText(), getSource(node));
+			}
+
+			@Override
+			public void endVisit(NumberLiteral node) {
+				assertEquals(node.getToken(), getSource(node));
+			}
+
+			@Override
+			public void endVisit(VariableDeclarationFragment node) {
+				SimpleName name = node.getName();
+				assertEquals(name.getStartPosition(), node.getStartPosition());
+			}
+
+			@Override
+			public void preVisit(ASTNode node) {
+				assertSame(editorAST, node.getAST());
+				// check positions for parent/child
+				{
+					ASTNode parent = node.getParent();
+					if (parent != null) {
+						int begin = AstNodeUtils.getSourceBegin(node);
+						int end = AstNodeUtils.getSourceEnd(node);
+						int parent_begin = AstNodeUtils.getSourceBegin(parent);
+						int parent_end = AstNodeUtils.getSourceEnd(parent);
+						assertTrue(begin >= parent_begin);
+						assertTrue(end <= parent_end);
+					}
+				}
+				// check bindings
+				{
+					if (node instanceof ImportDeclaration) {
+						ImportDeclaration declaration = (ImportDeclaration) node;
+						if (!declaration.isOnDemand()) {
+							assertNotNull(AstNodeUtils.getTypeBinding(declaration.getName()));
+						}
+					}
+					if (node instanceof Type) {
+						Type type = (Type) node;
+						assertNotNull(AstNodeUtils.getTypeBinding(type));
+					}
+					if (node instanceof VariableDeclaration) {
+						VariableDeclaration declaration = (VariableDeclaration) node;
+						assertNotNull(AstNodeUtils.getTypeBinding(declaration.getName()));
+						if (declaration.getInitializer() != null) {
+							assertNotNull(AstNodeUtils.getTypeBinding(declaration.getInitializer()));
+						}
+					}
+					if (node instanceof MethodInvocation) {
+						MethodInvocation invocation = (MethodInvocation) node;
+						IMethodBinding methodBinding = AstNodeUtils.getMethodBinding(invocation);
+						assertNotNull(methodBinding);
+						// check that names in MethodInvocation and IMethodBinding are same
+						assertEquals(invocation.getName().getIdentifier(), methodBinding.getName());
+						//
+						// check that types of parameters and arguments are compatible
+						ITypeBinding[] parameterTypes = methodBinding.getParameterTypes();
+						List<?> arguments = invocation.arguments();
+						for (int i = 0; i < parameterTypes.length; i++) {
+							ITypeBinding parameterType = parameterTypes[i];
+							if (i == parameterTypes.length - 1 && parameterType.isArray()) {
+								// ellipsis support (last parameter is array)
+								if (i == arguments.size()) {
+									// ellipsis parameter skipped
+									break;
+								}
+								{
+									// check for exactly array
+									Expression argument = (Expression) arguments.get(i);
+									String argumentClassName = AstNodeUtils.getFullyQualifiedName(argument, false);
+									if (AstNodeUtils.isSuccessorOf(parameterType, argumentClassName)) {
+										// parameter is exactly array
+										break;
+									}
+								}
+								// check all other arguments
+								ITypeBinding parameterElementType = parameterType.getElementType();
+								for (int j = i; j < arguments.size(); j++) {
+									Expression argument = (Expression) arguments.get(j);
+									String argumentClassName = AstNodeUtils.getFullyQualifiedName(argument, false);
+									assertTrue(AstNodeUtils.isSuccessorOf(parameterElementType, argumentClassName));
+								}
+								break;
+							}
+							Expression argument = (Expression) arguments.get(i);
+							String argumentClassName = AstNodeUtils.getFullyQualifiedName(argument, false);
+							// FIXME
+							//assertTrue(
+							AstNodeUtils.isSuccessorOf(parameterType, argumentClassName);
+							//	);
+						}
+					}
+					if (node instanceof MethodDeclaration) {
+						MethodDeclaration declaration = (MethodDeclaration) node;
+						IMethodBinding methodBinding = AstNodeUtils.getMethodBinding(declaration);
+						assertNotNull(methodBinding);
+						// check that names in MethodDeclaration and IMethodBinding are same
+						assertEquals(declaration.getName().getIdentifier(), methodBinding.getName());
+						// check return type
+						{
+							Type returnType = declaration.getReturnType2();
+							if (returnType != null) {
+								ITypeBinding bindingType = methodBinding.getReturnType();
+								ITypeBinding declarationType = AstNodeUtils.getTypeBinding(returnType);
+								assertEqualTypes(bindingType, declarationType);
+							}
+						}
+						// check parameters
+						ITypeBinding[] bindingTypes = methodBinding.getParameterTypes();
+						List<SingleVariableDeclaration> parameters = DomGenerics.parameters(declaration);
+						assertEquals(parameters.size(), bindingTypes.length);
+						// check that types of parameters and arguments are same
+						for (int i = 0; i < bindingTypes.length; i++) {
+							ITypeBinding bindingType = bindingTypes[i];
+							SingleVariableDeclaration parameter = parameters.get(i);
+							ITypeBinding parameterType = AstNodeUtils.getTypeBinding(parameter);
+							assertEqualTypes(bindingType, parameterType);
+						}
+					}
+				}
+				// check source prefix/suffix
+				{
+					if (node instanceof ExpressionStatement
+							|| node instanceof VariableDeclarationStatement
+							|| node instanceof FieldDeclaration
+							|| node instanceof ImportDeclaration
+							|| node instanceof PackageDeclaration) {
+						checkNodeSuffix(node, ";");
+					}
+					if (node instanceof MethodInvocation) {
+						checkNodeSuffix(node, ")");
+					}
+					if (node instanceof ParenthesizedExpression) {
+						checkNodePrefix(node, "(");
+						checkNodeSuffix(node, ")");
+					}
+					if (node instanceof Block) {
+						checkNodePrefix(node, "{");
+						checkNodeSuffix(node, "}");
+					}
+					if (node instanceof TypeDeclaration || node instanceof AnonymousClassDeclaration) {
+						checkNodeSuffix(node, "}");
+					}
+					if (node instanceof StringLiteral) {
+						checkNodePrefix(node, "\"");
+						checkNodeSuffix(node, "\"");
+					}
+				}
+				// check Block: statements order
+				if (node instanceof Block) {
+					Block block = (Block) node;
+					int lastStatementEnd = -1;
+					for (Statement statement : DomGenerics.statements(block)) {
+						assertTrue(lastStatementEnd <= statement.getStartPosition());
+						lastStatementEnd = AstNodeUtils.getSourceEnd(statement);
+					}
+				}
+				// check TypeDeclaration: declarations order
+				if (node instanceof TypeDeclaration) {
+					TypeDeclaration typeDeclaration = (TypeDeclaration) node;
+					int lastDeclarationEnd = -1;
+					for (BodyDeclaration declaration : DomGenerics.bodyDeclarations(typeDeclaration)) {
+						assertTrue(lastDeclarationEnd <= declaration.getStartPosition());
+						lastDeclarationEnd = AstNodeUtils.getSourceEnd(declaration);
+					}
+				}
+			}
+
+			private void assertEqualTypes(ITypeBinding bindingType, ITypeBinding parameterType) {
+				String bindingTypeName = AstNodeUtils.getFullyQualifiedName(bindingType, false);
+				String parameterTypeName = AstNodeUtils.getFullyQualifiedName(parameterType, false);
+				assertEquals(bindingTypeName, parameterTypeName);
+			}
+
+			////////////////////////////////////////////////////////////////////////////
+			//
+			// Checks
+			//
+			////////////////////////////////////////////////////////////////////////////
+			private void checkNodePrefix(ASTNode node, String prefix) {
+				assertEquals(prefix, getSource(node.getStartPosition(), prefix.length()));
+			}
+
+			private void checkNodeSuffix(ASTNode node, String suffix) {
+				int end = node.getStartPosition() + node.getLength();
+				assertEquals(suffix, getSource(end - suffix.length(), suffix.length()));
+			}
+
+			////////////////////////////////////////////////////////////////////////////
+			//
+			// Source access
+			//
+			////////////////////////////////////////////////////////////////////////////
+			private String getSource(int start, int length) {
+				try {
+					return editor.getSource(start, length);
+				} catch (Throwable e) {
+					throw ReflectionUtils.propagate(e);
+				}
+			}
+
+			private String getSource(ASTNode node) {
+				return getSource(node.getStartPosition(), node.getLength());
+			}
+		});
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/BundleResourceProviderTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/BundleResourceProviderTest.java
index 37813e3b7..16a2232bf 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/BundleResourceProviderTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/BundleResourceProviderTest.java
@@ -32,143 +32,143 @@
  * @author scheglov_ke
  */
 public class BundleResourceProviderTest extends DesignerTestCase {
-  private static final String BUNDLE_ID = DesignerPlugin.PLUGIN_ID;
+	private static final String BUNDLE_ID = DesignerPlugin.PLUGIN_ID;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_noSuchBundle() throws Exception {
-    try {
-      BundleResourceProvider.get("no.such.bundle");
-      fail();
-    } catch (AssertionFailedException e) {
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_noSuchBundle() throws Exception {
+		try {
+			BundleResourceProvider.get("no.such.bundle");
+			fail();
+		} catch (AssertionFailedException e) {
+		}
+	}
 
-  public void test_instanceBundle() throws Exception {
-    Bundle bundle = Platform.getBundle(BUNDLE_ID);
-    BundleResourceProvider.get(bundle);
-  }
+	public void test_instanceBundle() throws Exception {
+		Bundle bundle = Platform.getBundle(BUNDLE_ID);
+		BundleResourceProvider.get(bundle);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // getFile()
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link BundleResourceProvider#getFile(String)}.
-   */
-  public void test_getFile() throws Exception {
-    BundleResourceProvider provider = BundleResourceProvider.get(BUNDLE_ID);
-    // no such file
-    try {
-      provider.getFile("noSuchFile.txt");
-    } catch (Throwable e) {
-      assertThat(e.getMessage()).contains(BUNDLE_ID).contains("noSuchFile.txt");
-    }
-    // good file
-    assertGoodFile(provider, "plugin.xml");
-    assertGoodFile(provider, "icons/test.png");
-    assertGoodFile(provider, "/icons/test.png");
-    assertGoodFile(provider, "icons//test.png");
-    assertGoodFile(provider, "//icons/test.png");
-    assertGoodFile(provider, "//icons//test.png");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// getFile()
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link BundleResourceProvider#getFile(String)}.
+	 */
+	public void test_getFile() throws Exception {
+		BundleResourceProvider provider = BundleResourceProvider.get(BUNDLE_ID);
+		// no such file
+		try {
+			provider.getFile("noSuchFile.txt");
+		} catch (Throwable e) {
+			assertThat(e.getMessage()).contains(BUNDLE_ID).contains("noSuchFile.txt");
+		}
+		// good file
+		assertGoodFile(provider, "plugin.xml");
+		assertGoodFile(provider, "icons/test.png");
+		assertGoodFile(provider, "/icons/test.png");
+		assertGoodFile(provider, "icons//test.png");
+		assertGoodFile(provider, "//icons/test.png");
+		assertGoodFile(provider, "//icons//test.png");
+	}
 
-  /**
-   * Test for {@link BundleResourceProvider#getFileString(String)}.
-   */
-  public void test_getFileString() throws Exception {
-    BundleResourceProvider provider = BundleResourceProvider.get(BUNDLE_ID);
-    // no such file
-    try {
-      provider.getFile("noSuchFile.txt");
-    } catch (Throwable e) {
-      assertThat(e.getMessage()).contains(BUNDLE_ID).contains("noSuchFile.txt");
-    }
-    // good file
-    {
-      String content = provider.getFileString("plugin.xml");
-      assertThat(content).contains("<!-- Extension points -->");
-    }
-  }
+	/**
+	 * Test for {@link BundleResourceProvider#getFileString(String)}.
+	 */
+	public void test_getFileString() throws Exception {
+		BundleResourceProvider provider = BundleResourceProvider.get(BUNDLE_ID);
+		// no such file
+		try {
+			provider.getFile("noSuchFile.txt");
+		} catch (Throwable e) {
+			assertThat(e.getMessage()).contains(BUNDLE_ID).contains("noSuchFile.txt");
+		}
+		// good file
+		{
+			String content = provider.getFileString("plugin.xml");
+			assertThat(content).contains("<!-- Extension points -->");
+		}
+	}
 
-  private static void assertGoodFile(BundleResourceProvider provider, String path) throws Exception {
-    InputStream stream = provider.getFile(path);
-    assertNotNull(stream);
-    stream.close();
-  }
+	private static void assertGoodFile(BundleResourceProvider provider, String path) throws Exception {
+		InputStream stream = provider.getFile(path);
+		assertNotNull(stream);
+		stream.close();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Images
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link BundleResourceProvider#getImage(String)}.
-   */
-  public void test_getImage() throws Exception {
-    BundleResourceProvider provider = BundleResourceProvider.get(BUNDLE_ID);
-    // no such file
-    try {
-      provider.getImage("noSuchImage.png");
-    } catch (Throwable e) {
-      assertThat(e.getMessage()).contains(BUNDLE_ID).contains("noSuchImage.png");
-    }
-    // get image
-    Image image = provider.getImage("icons/test.png");
-    assertNotNull(image);
-    // get cached image
-    assertSame(image, provider.getImage("icons/test.png"));
-    // path should be normalized, so same image returned
-    assertSame(image, provider.getImage("/icons/test.png"));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Images
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link BundleResourceProvider#getImage(String)}.
+	 */
+	public void test_getImage() throws Exception {
+		BundleResourceProvider provider = BundleResourceProvider.get(BUNDLE_ID);
+		// no such file
+		try {
+			provider.getImage("noSuchImage.png");
+		} catch (Throwable e) {
+			assertThat(e.getMessage()).contains(BUNDLE_ID).contains("noSuchImage.png");
+		}
+		// get image
+		Image image = provider.getImage("icons/test.png");
+		assertNotNull(image);
+		// get cached image
+		assertSame(image, provider.getImage("icons/test.png"));
+		// path should be normalized, so same image returned
+		assertSame(image, provider.getImage("/icons/test.png"));
+	}
 
-  /**
-   * Test for {@link BundleResourceProvider#getImage(String)}.
-   */
-  public void test_getImage_disposeWhenUninstall() throws Exception {
-    TestBundle testBundle = new TestBundle();
-    Image image;
-    try {
-      testBundle.setFile("icons/test.png", TestUtils.createImagePNG(1, 1));
-      testBundle.install();
-      // work with Bundle
-      {
-        BundleResourceProvider provider = BundleResourceProvider.get(testBundle.getId());
-        // get Image
-        image = provider.getImage("icons/test.png");
-        assertNotNull(image);
-        assertFalse(image.isDisposed());
-      }
-    } finally {
-      testBundle.dispose();
-    }
-    // wait for events
-    waitEventLoop(0);
-    // Bundle uninstalled, so Image is now disposed
-    assertTrue(image.isDisposed());
-  }
+	/**
+	 * Test for {@link BundleResourceProvider#getImage(String)}.
+	 */
+	public void test_getImage_disposeWhenUninstall() throws Exception {
+		TestBundle testBundle = new TestBundle();
+		Image image;
+		try {
+			testBundle.setFile("icons/test.png", TestUtils.createImagePNG(1, 1));
+			testBundle.install();
+			// work with Bundle
+			{
+				BundleResourceProvider provider = BundleResourceProvider.get(testBundle.getId());
+				// get Image
+				image = provider.getImage("icons/test.png");
+				assertNotNull(image);
+				assertFalse(image.isDisposed());
+			}
+		} finally {
+			testBundle.dispose();
+		}
+		// wait for events
+		waitEventLoop(0);
+		// Bundle uninstalled, so Image is now disposed
+		assertTrue(image.isDisposed());
+	}
 
-  /**
-   * Test for {@link BundleResourceProvider#getImageDescriptor(String)}.
-   */
-  public void test_getImageDescriptor() throws Exception {
-    BundleResourceProvider provider = BundleResourceProvider.get(BUNDLE_ID);
-    // no such file
-    try {
-      provider.getImageDescriptor("noSuchImage.png");
-    } catch (Throwable e) {
-      assertThat(e.getMessage()).contains(BUNDLE_ID).contains("noSuchImage.png");
-    }
-    // get image
-    ImageDescriptor descriptor = provider.getImageDescriptor("icons/test.png");
-    assertNotNull(descriptor);
-    // get cached image
-    assertSame(descriptor, provider.getImageDescriptor("icons/test.png"));
-    // path should be normalized, so same image returned
-    assertSame(descriptor, provider.getImageDescriptor("/icons/test.png"));
-  }
+	/**
+	 * Test for {@link BundleResourceProvider#getImageDescriptor(String)}.
+	 */
+	public void test_getImageDescriptor() throws Exception {
+		BundleResourceProvider provider = BundleResourceProvider.get(BUNDLE_ID);
+		// no such file
+		try {
+			provider.getImageDescriptor("noSuchImage.png");
+		} catch (Throwable e) {
+			assertThat(e.getMessage()).contains(BUNDLE_ID).contains("noSuchImage.png");
+		}
+		// get image
+		ImageDescriptor descriptor = provider.getImageDescriptor("icons/test.png");
+		assertNotNull(descriptor);
+		// get cached image
+		assertSame(descriptor, provider.getImageDescriptor("icons/test.png"));
+		// path should be normalized, so same image returned
+		assertSame(descriptor, provider.getImageDescriptor("/icons/test.png"));
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/CoreTests.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/CoreTests.java
index 1f3940051..e84b504a4 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/CoreTests.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/CoreTests.java
@@ -28,17 +28,17 @@
 
 @RunWith(Suite.class)
 @SuiteClasses({
-    BundleResourceProviderTest.class,
-    DesignerPluginTest.class,
-    EnvironmentUtilsTest.class,
-    VersionTest.class,
-    UtilTests.class,
-    AstEvaluationEngineTests.class,
-    ModelTests.class,
-    NlsTests.class,
-    PaletteTests.class,
-    CoreDbTests.class
+	BundleResourceProviderTest.class,
+	DesignerPluginTest.class,
+	EnvironmentUtilsTest.class,
+	VersionTest.class,
+	UtilTests.class,
+	AstEvaluationEngineTests.class,
+	ModelTests.class,
+	NlsTests.class,
+	PaletteTests.class,
+	CoreDbTests.class
 
-    })
+})
 public class CoreTests {
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/DesignerPluginTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/DesignerPluginTest.java
index 223a631d0..5200cca4c 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/DesignerPluginTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/DesignerPluginTest.java
@@ -26,76 +26,76 @@
  * @author scheglov_ke
  */
 public class DesignerPluginTest extends DesignerTestCase {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Life cycle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void setUp() throws Exception {
-    super.setUp();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Life cycle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void setUp() throws Exception {
+		super.setUp();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_getDefault() {
-    assertNotNull(DesignerPlugin.getDefault());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_getDefault() {
+		assertNotNull(DesignerPlugin.getDefault());
+	}
 
-  public void test_log_message() {
-    final String message = "Information message";
-    ILog log = DesignerPlugin.getDefault().getLog();
-    ILogListener logListener = new ILogListener() {
-      @Override
-      public void logging(IStatus status, String plugin) {
-        assertEquals(IStatus.INFO, status.getSeverity());
-        assertEquals(DesignerPlugin.PLUGIN_ID, status.getPlugin());
-        assertEquals(IStatus.INFO, status.getCode());
-        assertEquals(message, status.getMessage());
-        assertNull(status.getException());
-      }
-    };
-    //
-    try {
-      log.addLogListener(logListener);
-      DesignerPlugin.log(message);
-    } finally {
-      log.removeLogListener(logListener);
-    }
-  }
+	public void test_log_message() {
+		final String message = "Information message";
+		ILog log = DesignerPlugin.getDefault().getLog();
+		ILogListener logListener = new ILogListener() {
+			@Override
+			public void logging(IStatus status, String plugin) {
+				assertEquals(IStatus.INFO, status.getSeverity());
+				assertEquals(DesignerPlugin.PLUGIN_ID, status.getPlugin());
+				assertEquals(IStatus.INFO, status.getCode());
+				assertEquals(message, status.getMessage());
+				assertNull(status.getException());
+			}
+		};
+		//
+		try {
+			log.addLogListener(logListener);
+			DesignerPlugin.log(message);
+		} finally {
+			log.removeLogListener(logListener);
+		}
+	}
 
-  public void test_log_Exception() {
-    final Exception exception = new Exception();
-    ILog log = DesignerPlugin.getDefault().getLog();
-    ILogListener logListener = new ILogListener() {
-      @Override
-      public void logging(IStatus status, String plugin) {
-        assertEquals(IStatus.ERROR, status.getSeverity());
-        assertEquals(DesignerPlugin.PLUGIN_ID, status.getPlugin());
-        assertEquals(IStatus.ERROR, status.getCode());
-        assertSame(exception, status.getException());
-      }
-    };
-    //
-    try {
-      log.addLogListener(logListener);
-      DesignerPlugin.setDisplayExceptionOnConsole(false);
-      DesignerPlugin.log(exception);
-    } finally {
-      log.removeLogListener(logListener);
-      DesignerPlugin.setDisplayExceptionOnConsole(true);
-    }
-  }
+	public void test_log_Exception() {
+		final Exception exception = new Exception();
+		ILog log = DesignerPlugin.getDefault().getLog();
+		ILogListener logListener = new ILogListener() {
+			@Override
+			public void logging(IStatus status, String plugin) {
+				assertEquals(IStatus.ERROR, status.getSeverity());
+				assertEquals(DesignerPlugin.PLUGIN_ID, status.getPlugin());
+				assertEquals(IStatus.ERROR, status.getCode());
+				assertSame(exception, status.getException());
+			}
+		};
+		//
+		try {
+			log.addLogListener(logListener);
+			DesignerPlugin.setDisplayExceptionOnConsole(false);
+			DesignerPlugin.log(exception);
+		} finally {
+			log.removeLogListener(logListener);
+			DesignerPlugin.setDisplayExceptionOnConsole(true);
+		}
+	}
 
-  /**
-   * However we should allow {@link JFrame#setDefaultCloseOperation(int)} with
-   * {@link JFrame#EXIT_ON_CLOSE}.
-   */
-  public void test_preventExit_JFrame() {
-    JFrame frame = new JFrame();
-    frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
-  }
+	/**
+	 * However we should allow {@link JFrame#setDefaultCloseOperation(int)} with
+	 * {@link JFrame#EXIT_ON_CLOSE}.
+	 */
+	public void test_preventExit_JFrame() {
+		JFrame frame = new JFrame();
+		frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/DesignerSuiteTests.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/DesignerSuiteTests.java
index 352378763..1194bcc5d 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/DesignerSuiteTests.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/DesignerSuiteTests.java
@@ -22,17 +22,17 @@
  * @author scheglov_ke
  */
 public abstract class DesignerSuiteTests extends TestCase {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Suite
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * @return the {@link TestSuite} for given class with test_setUp/test_tearDown as first/last.
-   */
-  protected static TestSuite createSingleSuite(Class<?> clazz) {
-    TestSuite suite = new TestSuite(clazz);
-    TestUtils.sortTestSuiteMethods(clazz, suite);
-    return suite;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Suite
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * @return the {@link TestSuite} for given class with test_setUp/test_tearDown as first/last.
+	 */
+	protected static TestSuite createSingleSuite(Class<?> clazz) {
+		TestSuite suite = new TestSuite(clazz);
+		TestUtils.sortTestSuiteMethods(clazz, suite);
+		return suite;
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/EnvironmentUtilsTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/EnvironmentUtilsTest.java
index 214ce3798..1d82ae6db 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/EnvironmentUtilsTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/EnvironmentUtilsTest.java
@@ -19,44 +19,44 @@
  * @author scheglov_ke
  */
 public class EnvironmentUtilsTest extends DesignerTestCase {
-  /**
-   * Test for known state of host and development flag.
-   */
-  public void test_DEVELOPER_HOST() throws Exception {
-    if ("SCHEGLOV-KE".equals(EnvironmentUtils.HOST_NAME)) {
-      assertTrue(EnvironmentUtils.DEVELOPER_HOST);
-    }
-  }
+	/**
+	 * Test for known state of host and development flag.
+	 */
+	public void test_DEVELOPER_HOST() throws Exception {
+		if ("SCHEGLOV-KE".equals(EnvironmentUtils.HOST_NAME)) {
+			assertTrue(EnvironmentUtils.DEVELOPER_HOST);
+		}
+	}
 
-  /**
-   * Test for {@link EnvironmentUtils#getJavaVersion()}.
-   */
-  public void test_getJavaVersion() throws Exception {
-    {
-      // specify version 1.8
-      EnvironmentUtils.setForcedJavaVersion(1.8f);
-      try {
-        assertEquals(1.8, EnvironmentUtils.getJavaVersion(), 0.001);
-      } finally {
-        EnvironmentUtils.setForcedJavaVersion(null);
-      }
-    }
-  }
+	/**
+	 * Test for {@link EnvironmentUtils#getJavaVersion()}.
+	 */
+	public void test_getJavaVersion() throws Exception {
+		{
+			// specify version 1.8
+			EnvironmentUtils.setForcedJavaVersion(1.8f);
+			try {
+				assertEquals(1.8, EnvironmentUtils.getJavaVersion(), 0.001);
+			} finally {
+				EnvironmentUtils.setForcedJavaVersion(null);
+			}
+		}
+	}
 
-  /**
-   * Test for {@link EnvironmentUtils#isTestingTime()}.
-   */
-  public void test_isDevelopmentTime() throws Exception {
-    assertTrue(EnvironmentUtils.isTestingTime());
-    {
-      // switch development time
-      EnvironmentUtils.setTestingTime(false);
-      try {
-        assertFalse(EnvironmentUtils.isTestingTime());
-      } finally {
-        EnvironmentUtils.setTestingTime(true);
-      }
-    }
-    assertTrue(EnvironmentUtils.isTestingTime());
-  }
+	/**
+	 * Test for {@link EnvironmentUtils#isTestingTime()}.
+	 */
+	public void test_isDevelopmentTime() throws Exception {
+		assertTrue(EnvironmentUtils.isTestingTime());
+		{
+			// switch development time
+			EnvironmentUtils.setTestingTime(false);
+			try {
+				assertFalse(EnvironmentUtils.isTestingTime());
+			} finally {
+				EnvironmentUtils.setTestingTime(true);
+			}
+		}
+		assertTrue(EnvironmentUtils.isTestingTime());
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/PdeProjectConversionUtils.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/PdeProjectConversionUtils.java
index 49d40a216..a92a97419 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/PdeProjectConversionUtils.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/PdeProjectConversionUtils.java
@@ -54,261 +54,261 @@
  * @author scheglov_ke
  */
 public class PdeProjectConversionUtils {
-  public final static String BUNDLE_FILENAME_DESCRIPTOR = "META-INF/MANIFEST.MF";
-  public final static String BUILD_FILENAME_DESCRIPTOR = "build.properties";
+	public final static String BUNDLE_FILENAME_DESCRIPTOR = "META-INF/MANIFEST.MF";
+	public final static String BUILD_FILENAME_DESCRIPTOR = "build.properties";
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Static access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Converts given {@link IProject} into PDE project.
-   *
-   * If <code>hostPluginId</code> is not <code>null</code>, fragment will be created.
-   */
-  public static void convertToPDE(IProject project, String hostPluginId) throws CoreException {
-    new PdeProjectConversionUtils(hostPluginId).convertProject(project, new NullProgressMonitor());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Static access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Converts given {@link IProject} into PDE project.
+	 *
+	 * If <code>hostPluginId</code> is not <code>null</code>, fragment will be created.
+	 */
+	public static void convertToPDE(IProject project, String hostPluginId) throws CoreException {
+		new PdeProjectConversionUtils(hostPluginId).convertProject(project, new NullProgressMonitor());
+	}
 
-  /**
-   * Converts given {@link IProject} into PDE project.
-   *
-   * If <code>hostPluginId</code> is not <code>null</code>, fragment will be created.
-   */
-  public static void convertToPDE(IProject project, String hostPluginId, String pluginActivator)
-      throws CoreException {
-    new PdeProjectConversionUtils(hostPluginId, pluginActivator).convertProject(
-        project,
-        new NullProgressMonitor());
-  }
+	/**
+	 * Converts given {@link IProject} into PDE project.
+	 *
+	 * If <code>hostPluginId</code> is not <code>null</code>, fragment will be created.
+	 */
+	public static void convertToPDE(IProject project, String hostPluginId, String pluginActivator)
+			throws CoreException {
+		new PdeProjectConversionUtils(hostPluginId, pluginActivator).convertProject(
+				project,
+				new NullProgressMonitor());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Instance fields
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private final String m_hostPluginId;
-  private final String m_pluginActivator;
-  private String fLibraryName;
-  private String[] fSrcEntries;
-  private String[] fLibEntries;
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Instance fields
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private final String m_hostPluginId;
+	private final String m_pluginActivator;
+	private String fLibraryName;
+	private String[] fSrcEntries;
+	private String[] fLibEntries;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public PdeProjectConversionUtils(String hostPluginId) {
-    this(hostPluginId, null);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public PdeProjectConversionUtils(String hostPluginId) {
+		this(hostPluginId, null);
+	}
 
-  public PdeProjectConversionUtils(String hostPluginId, String pluginActivator) {
-    m_hostPluginId = hostPluginId;
-    m_pluginActivator = pluginActivator;
-  }
+	public PdeProjectConversionUtils(String hostPluginId, String pluginActivator) {
+		m_hostPluginId = hostPluginId;
+		m_pluginActivator = pluginActivator;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Methods
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void convertProject(IProject project, IProgressMonitor monitor) throws CoreException {
-    CoreUtility.addNatureToProject(project, PDE.PLUGIN_NATURE, monitor);
-    //
-    loadClasspathEntries(project, monitor);
-    loadLibraryName(project);
-    //
-    if (!WorkspaceModelManager.isPluginProject(project)) {
-      createManifestFile(project.getFile(BUNDLE_FILENAME_DESCRIPTOR), monitor);
-    }
-    IFile buildFile = project.getFile(BUILD_FILENAME_DESCRIPTOR);
-    if (!buildFile.exists()) {
-      WorkspaceBuildModel model = new WorkspaceBuildModel(buildFile);
-      IBuild build = model.getBuild(true);
-      IBuildEntry entry = model.getFactory().createEntry("bin.includes"); //$NON-NLS-1$
-      if (project.getFile("plugin.xml").exists()) {
-        entry.addToken("plugin.xml"); //$NON-NLS-1$
-      }
-      if (project.getFile("META-INF/MANIFEST.MF").exists()) {
-        entry.addToken("META-INF/"); //$NON-NLS-1$
-      }
-      for (int i = 0; i < fLibEntries.length; i++) {
-        entry.addToken(fLibEntries[i]);
-      }
-      //
-      if (fSrcEntries.length > 0) {
-        entry.addToken(fLibraryName);
-        IBuildEntry source = model.getFactory().createEntry("source." + fLibraryName); //$NON-NLS-1$
-        for (int i = 0; i < fSrcEntries.length; i++) {
-          source.addToken(fSrcEntries[i]);
-        }
-        build.add(source);
-      }
-      if (entry.getTokens().length > 0) {
-        build.add(entry);
-      }
-      model.save();
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Methods
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void convertProject(IProject project, IProgressMonitor monitor) throws CoreException {
+		CoreUtility.addNatureToProject(project, PDE.PLUGIN_NATURE, monitor);
+		//
+		loadClasspathEntries(project, monitor);
+		loadLibraryName(project);
+		//
+		if (!WorkspaceModelManager.isPluginProject(project)) {
+			createManifestFile(project.getFile(BUNDLE_FILENAME_DESCRIPTOR), monitor);
+		}
+		IFile buildFile = project.getFile(BUILD_FILENAME_DESCRIPTOR);
+		if (!buildFile.exists()) {
+			WorkspaceBuildModel model = new WorkspaceBuildModel(buildFile);
+			IBuild build = model.getBuild(true);
+			IBuildEntry entry = model.getFactory().createEntry("bin.includes"); //$NON-NLS-1$
+			if (project.getFile("plugin.xml").exists()) {
+				entry.addToken("plugin.xml"); //$NON-NLS-1$
+			}
+			if (project.getFile("META-INF/MANIFEST.MF").exists()) {
+				entry.addToken("META-INF/"); //$NON-NLS-1$
+			}
+			for (int i = 0; i < fLibEntries.length; i++) {
+				entry.addToken(fLibEntries[i]);
+			}
+			//
+			if (fSrcEntries.length > 0) {
+				entry.addToken(fLibraryName);
+				IBuildEntry source = model.getFactory().createEntry("source." + fLibraryName); //$NON-NLS-1$
+				for (int i = 0; i < fSrcEntries.length; i++) {
+					source.addToken(fSrcEntries[i]);
+				}
+				build.add(source);
+			}
+			if (entry.getTokens().length > 0) {
+				build.add(entry);
+			}
+			model.save();
+		}
+	}
 
-  private void loadClasspathEntries(IProject project, IProgressMonitor monitor) {
-    IJavaProject javaProject = JavaCore.create(project);
-    IClasspathEntry[] currentClassPath = new IClasspathEntry[0];
-    List<String> sources = Lists.newArrayList();
-    List<String> libraries = Lists.newArrayList();
-    try {
-      currentClassPath = javaProject.getRawClasspath();
-    } catch (JavaModelException e) {
-    }
-    for (int i = 0; i < currentClassPath.length; i++) {
-      int contentType = currentClassPath[i].getEntryKind();
-      if (contentType == IClasspathEntry.CPE_SOURCE) {
-        String relativePath = getRelativePath(currentClassPath[i], project);
-        if (relativePath.equals("")) { //$NON-NLS-1$
-          sources.add("."); //$NON-NLS-1$
-        } else {
-          sources.add(relativePath + "/"); //$NON-NLS-1$
-        }
-      } else if (contentType == IClasspathEntry.CPE_LIBRARY) {
-        String path = getRelativePath(currentClassPath[i], project);
-        if (path.length() > 0) {
-          libraries.add(path);
-        } else {
-          libraries.add("."); //$NON-NLS-1$
-        }
-      }
-    }
-    fSrcEntries = sources.toArray(new String[sources.size()]);
-    fLibEntries = libraries.toArray(new String[libraries.size()]);
-    //
-    IClasspathEntry[] classPath = new IClasspathEntry[currentClassPath.length + 1];
-    System.arraycopy(currentClassPath, 0, classPath, 0, currentClassPath.length);
-    try {
-      classPath[classPath.length - 1] = createContainerEntry();
-      javaProject.setRawClasspath(classPath, monitor);
-    } catch (Throwable e) {
-    }
-  }
+	private void loadClasspathEntries(IProject project, IProgressMonitor monitor) {
+		IJavaProject javaProject = JavaCore.create(project);
+		IClasspathEntry[] currentClassPath = new IClasspathEntry[0];
+		List<String> sources = Lists.newArrayList();
+		List<String> libraries = Lists.newArrayList();
+		try {
+			currentClassPath = javaProject.getRawClasspath();
+		} catch (JavaModelException e) {
+		}
+		for (int i = 0; i < currentClassPath.length; i++) {
+			int contentType = currentClassPath[i].getEntryKind();
+			if (contentType == IClasspathEntry.CPE_SOURCE) {
+				String relativePath = getRelativePath(currentClassPath[i], project);
+				if (relativePath.equals("")) { //$NON-NLS-1$
+					sources.add("."); //$NON-NLS-1$
+				} else {
+					sources.add(relativePath + "/"); //$NON-NLS-1$
+				}
+			} else if (contentType == IClasspathEntry.CPE_LIBRARY) {
+				String path = getRelativePath(currentClassPath[i], project);
+				if (path.length() > 0) {
+					libraries.add(path);
+				} else {
+					libraries.add("."); //$NON-NLS-1$
+				}
+			}
+		}
+		fSrcEntries = sources.toArray(new String[sources.size()]);
+		fLibEntries = libraries.toArray(new String[libraries.size()]);
+		//
+		IClasspathEntry[] classPath = new IClasspathEntry[currentClassPath.length + 1];
+		System.arraycopy(currentClassPath, 0, classPath, 0, currentClassPath.length);
+		try {
+			classPath[classPath.length - 1] = createContainerEntry();
+			javaProject.setRawClasspath(classPath, monitor);
+		} catch (Throwable e) {
+		}
+	}
 
-  private static IClasspathEntry createContainerEntry() throws Exception {
-    return (IClasspathEntry) ReflectionUtils.invokeMethod(
-        getClass_ClasspathComputer(),
-        "createContainerEntry()");
-  }
+	private static IClasspathEntry createContainerEntry() throws Exception {
+		return (IClasspathEntry) ReflectionUtils.invokeMethod(
+				getClass_ClasspathComputer(),
+				"createContainerEntry()");
+	}
 
-  private static Object getClass_ClasspathComputer() throws ClassNotFoundException {
-    try {
-      return Class.forName("org.eclipse.pde.internal.core.ClasspathComputer");
-    } catch (Throwable e) {
-      return Class.forName("org.eclipse.pde.internal.ui.wizards.plugin.ClasspathComputer");
-    }
-  }
+	private static Object getClass_ClasspathComputer() throws ClassNotFoundException {
+		try {
+			return Class.forName("org.eclipse.pde.internal.core.ClasspathComputer");
+		} catch (Throwable e) {
+			return Class.forName("org.eclipse.pde.internal.ui.wizards.plugin.ClasspathComputer");
+		}
+	}
 
-  private String getRelativePath(IClasspathEntry cpe, IProject project) {
-    IPath path = project.getFile(cpe.getPath()).getProjectRelativePath();
-    return path.removeFirstSegments(1).toString();
-  }
+	private String getRelativePath(IClasspathEntry cpe, IProject project) {
+		IPath path = project.getFile(cpe.getPath()).getProjectRelativePath();
+		return path.removeFirstSegments(1).toString();
+	}
 
-  private void loadLibraryName(IProject project) {
-    if (isOldTarget() || fLibEntries.length > 0 && fSrcEntries.length > 0) {
-      String libName = project.getName();
-      int i = libName.lastIndexOf("."); //$NON-NLS-1$
-      if (i != -1) {
-        libName = libName.substring(i + 1);
-      }
-      fLibraryName = libName + ".jar"; //$NON-NLS-1$
-    } else {
-      fLibraryName = "."; //$NON-NLS-1$
-    }
-  }
+	private void loadLibraryName(IProject project) {
+		if (isOldTarget() || fLibEntries.length > 0 && fSrcEntries.length > 0) {
+			String libName = project.getName();
+			int i = libName.lastIndexOf("."); //$NON-NLS-1$
+			if (i != -1) {
+				libName = libName.substring(i + 1);
+			}
+			fLibraryName = libName + ".jar"; //$NON-NLS-1$
+		} else {
+			fLibraryName = "."; //$NON-NLS-1$
+		}
+	}
 
-  private boolean isOldTarget() {
-    return TargetPlatformHelper.getTargetVersion() < 3.1;
-  }
+	private boolean isOldTarget() {
+		return TargetPlatformHelper.getTargetVersion() < 3.1;
+	}
 
-  private String createInitialName(String id) {
-    if (m_hostPluginId != null) {
-      id += " Fragment";
-    }
-    //
-    int loc = id.lastIndexOf('.');
-    if (loc != -1) {
-      return id;
-    }
-    StringBuffer buf = new StringBuffer(id.substring(loc + 1));
-    buf.setCharAt(0, Character.toUpperCase(buf.charAt(0)));
-    return buf.toString();
-  }
+	private String createInitialName(String id) {
+		if (m_hostPluginId != null) {
+			id += " Fragment";
+		}
+		//
+		int loc = id.lastIndexOf('.');
+		if (loc != -1) {
+			return id;
+		}
+		StringBuffer buf = new StringBuffer(id.substring(loc + 1));
+		buf.setCharAt(0, Character.toUpperCase(buf.charAt(0)));
+		return buf.toString();
+	}
 
-  // XXX
-  private void createManifestFile(IFile file, IProgressMonitor monitor) throws CoreException {
-    WorkspaceBundlePluginModel model = new WorkspaceBundlePluginModel(file, null);
-    model.load();
-    IPlugin plugin = model.getPlugin();
-    plugin.setId(IdUtil.getValidId(file.getProject().getName()));
-    plugin.setName(createInitialName(plugin.getId()));
-    plugin.setVersion("1.0.0"); //$NON-NLS-1$
-    //
-    if (m_pluginActivator != null) {
-      plugin.setClassName(m_pluginActivator);
-    }
-    //
-    IPluginModelFactory factory = model.getPluginFactory();
-    IPluginBase base = model.getPluginBase();
-    if (fLibraryName != null && !fLibraryName.equals(".")) { //$NON-NLS-1$
-      IPluginLibrary library = factory.createLibrary();
-      library.setName(fLibraryName);
-      library.setExported(true);
-      base.add(library);
-    }
-    for (int i = 0; i < fLibEntries.length; i++) {
-      IPluginLibrary library = factory.createLibrary();
-      library.setName(fLibEntries[i]);
-      library.setExported(true);
-      base.add(library);
-    }
-    if (m_pluginActivator != null) {
-      IPluginImport uiImport = factory.createImport();
-      uiImport.setId("org.eclipse.ui");
-      base.add(uiImport);
-      //
-      IPluginImport uiFormsImport = factory.createImport();
-      uiFormsImport.setId("org.eclipse.ui.forms");
-      base.add(uiFormsImport);
-      //
-      IPluginImport resourceImport = factory.createImport();
-      resourceImport.setId("org.eclipse.core.resources");
-      base.add(resourceImport);
-      //
-      IPluginImport runtimeImport = factory.createImport();
-      runtimeImport.setId("org.eclipse.core.runtime");
-      base.add(runtimeImport);
-    }
-    if (TargetPlatformHelper.getTargetVersion() >= 3.1) {
-      model.getBundleModel().getBundle().setHeader(Constants.BUNDLE_MANIFESTVERSION, "2"); //$NON-NLS-1$
-    }
-    if (m_hostPluginId != null) {
-      model.getBundleModel().getBundle().setHeader(Constants.FRAGMENT_HOST, m_hostPluginId);
-    }
-    model.save();
-    monitor.done();
-    organizeExports(file.getProject());
-  }
+	// XXX
+	private void createManifestFile(IFile file, IProgressMonitor monitor) throws CoreException {
+		WorkspaceBundlePluginModel model = new WorkspaceBundlePluginModel(file, null);
+		model.load();
+		IPlugin plugin = model.getPlugin();
+		plugin.setId(IdUtil.getValidId(file.getProject().getName()));
+		plugin.setName(createInitialName(plugin.getId()));
+		plugin.setVersion("1.0.0"); //$NON-NLS-1$
+		//
+		if (m_pluginActivator != null) {
+			plugin.setClassName(m_pluginActivator);
+		}
+		//
+		IPluginModelFactory factory = model.getPluginFactory();
+		IPluginBase base = model.getPluginBase();
+		if (fLibraryName != null && !fLibraryName.equals(".")) { //$NON-NLS-1$
+			IPluginLibrary library = factory.createLibrary();
+			library.setName(fLibraryName);
+			library.setExported(true);
+			base.add(library);
+		}
+		for (int i = 0; i < fLibEntries.length; i++) {
+			IPluginLibrary library = factory.createLibrary();
+			library.setName(fLibEntries[i]);
+			library.setExported(true);
+			base.add(library);
+		}
+		if (m_pluginActivator != null) {
+			IPluginImport uiImport = factory.createImport();
+			uiImport.setId("org.eclipse.ui");
+			base.add(uiImport);
+			//
+			IPluginImport uiFormsImport = factory.createImport();
+			uiFormsImport.setId("org.eclipse.ui.forms");
+			base.add(uiFormsImport);
+			//
+			IPluginImport resourceImport = factory.createImport();
+			resourceImport.setId("org.eclipse.core.resources");
+			base.add(resourceImport);
+			//
+			IPluginImport runtimeImport = factory.createImport();
+			runtimeImport.setId("org.eclipse.core.runtime");
+			base.add(runtimeImport);
+		}
+		if (TargetPlatformHelper.getTargetVersion() >= 3.1) {
+			model.getBundleModel().getBundle().setHeader(Constants.BUNDLE_MANIFESTVERSION, "2"); //$NON-NLS-1$
+		}
+		if (m_hostPluginId != null) {
+			model.getBundleModel().getBundle().setHeader(Constants.FRAGMENT_HOST, m_hostPluginId);
+		}
+		model.save();
+		monitor.done();
+		organizeExports(file.getProject());
+	}
 
-  private void organizeExports(final IProject project) {
-    PDEModelUtility.modifyModel(new ModelModification(project.getFile(BUNDLE_FILENAME_DESCRIPTOR)) {
-      @Override
-      protected void modifyModel(IBaseModel model, IProgressMonitor monitor) throws CoreException {
-        if (!(model instanceof IBundlePluginModelBase)) {
-          return;
-        }
-        OrganizeManifest.organizeExportPackages(
-            ((IBundlePluginModelBase) model).getBundleModel().getBundle(),
-            project,
-            true,
-            true);
-      }
-    }, null);
-  }
+	private void organizeExports(final IProject project) {
+		PDEModelUtility.modifyModel(new ModelModification(project.getFile(BUNDLE_FILENAME_DESCRIPTOR)) {
+			@Override
+			protected void modifyModel(IBaseModel model, IProgressMonitor monitor) throws CoreException {
+				if (!(model instanceof IBundlePluginModelBase)) {
+					return;
+				}
+				OrganizeManifest.organizeExportPackages(
+						((IBundlePluginModelBase) model).getBundleModel().getBundle(),
+						project,
+						true,
+						true);
+			}
+		}, null);
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/PreferencesRepairer.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/PreferencesRepairer.java
index c24ede6c2..90a6cab17 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/PreferencesRepairer.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/PreferencesRepairer.java
@@ -22,75 +22,75 @@
  * @author scheglov_ke
  */
 public final class PreferencesRepairer {
-  private final IPreferenceStore m_preferences;
-  private final Map<String, Object> m_nameToValue = Maps.newTreeMap();
+	private final IPreferenceStore m_preferences;
+	private final Map<String, Object> m_nameToValue = Maps.newTreeMap();
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public PreferencesRepairer(IPreferenceStore preferences) {
-    m_preferences = preferences;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public PreferencesRepairer(IPreferenceStore preferences) {
+		m_preferences = preferences;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sets the <code>boolean</code> value.
-   */
-  public void setValue(String name, boolean value) {
-    save(name, new Boolean(m_preferences.getBoolean(name)));
-    m_preferences.setValue(name, value);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sets the <code>boolean</code> value.
+	 */
+	public void setValue(String name, boolean value) {
+		save(name, new Boolean(m_preferences.getBoolean(name)));
+		m_preferences.setValue(name, value);
+	}
 
-  /**
-   * Sets the <code>int</code> value.
-   */
-  public void setValue(String name, int value) {
-    save(name, m_preferences.getInt(name));
-    m_preferences.setValue(name, value);
-  }
+	/**
+	 * Sets the <code>int</code> value.
+	 */
+	public void setValue(String name, int value) {
+		save(name, m_preferences.getInt(name));
+		m_preferences.setValue(name, value);
+	}
 
-  /**
-   * Sets the <code>String</code> value.
-   */
-  public void setValue(String name, String value) {
-    save(name, m_preferences.getString(name));
-    m_preferences.setValue(name, value);
-  }
+	/**
+	 * Sets the <code>String</code> value.
+	 */
+	public void setValue(String name, String value) {
+		save(name, m_preferences.getString(name));
+		m_preferences.setValue(name, value);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Restore
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * If preference with given name is not saved yet, save it.
-   */
-  private void save(String name, Object value) {
-    if (!m_nameToValue.containsKey(name)) {
-      m_nameToValue.put(name, value);
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Restore
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * If preference with given name is not saved yet, save it.
+	 */
+	private void save(String name, Object value) {
+		if (!m_nameToValue.containsKey(name)) {
+			m_nameToValue.put(name, value);
+		}
+	}
 
-  /**
-   * Restores all preferences in {@link IPreferenceStore} in their initial values.
-   */
-  public void restore() {
-    for (Map.Entry<String, Object> entry : m_nameToValue.entrySet()) {
-      String name = entry.getKey();
-      Object value = entry.getValue();
-      if (value instanceof Boolean) {
-        m_preferences.setValue(name, ((Boolean) value).booleanValue());
-      } else if (value instanceof Integer) {
-        m_preferences.setValue(name, ((Integer) value).intValue());
-      } else if (value instanceof String) {
-        m_preferences.setValue(name, (String) value);
-      }
-    }
-  }
+	/**
+	 * Restores all preferences in {@link IPreferenceStore} in their initial values.
+	 */
+	public void restore() {
+		for (Map.Entry<String, Object> entry : m_nameToValue.entrySet()) {
+			String name = entry.getKey();
+			Object value = entry.getValue();
+			if (value instanceof Boolean) {
+				m_preferences.setValue(name, ((Boolean) value).booleanValue());
+			} else if (value instanceof Integer) {
+				m_preferences.setValue(name, ((Integer) value).intValue());
+			} else if (value instanceof String) {
+				m_preferences.setValue(name, (String) value);
+			}
+		}
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/RefactoringTestUtils.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/RefactoringTestUtils.java
index 684cb257a..deaea7155 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/RefactoringTestUtils.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/RefactoringTestUtils.java
@@ -42,107 +42,107 @@
  * @author scheglov_ke
  */
 public final class RefactoringTestUtils {
-  private static final String ATTRIBUTE_RESOURCES = "resources";
-  private static final String ATTRIBUTE_ELEMENTS = "elements";
-  private static final String ATTRIBUTE_SUGGEST_ACCESSORS = "accessors";
-  private static final String ATTRIBUTE_DELETE_SUBPACKAGES = "subPackages";
+	private static final String ATTRIBUTE_RESOURCES = "resources";
+	private static final String ATTRIBUTE_ELEMENTS = "elements";
+	private static final String ATTRIBUTE_SUGGEST_ACCESSORS = "accessors";
+	private static final String ATTRIBUTE_DELETE_SUBPACKAGES = "subPackages";
 
-  /**
-   * Renames {@link IType}.
-   */
-  public static void renameType(IType typeToRename, String newName) throws Exception {
-    RenameSupport renameSupport =
-        RenameSupport.create(typeToRename, newName, RenameSupport.UPDATE_REFERENCES);
-    renameSupport.preCheck();
-    renameSupport.perform(DesignerPlugin.getShell(), DesignerPlugin.getActiveWorkbenchWindow());
-  }
+	/**
+	 * Renames {@link IType}.
+	 */
+	public static void renameType(IType typeToRename, String newName) throws Exception {
+		RenameSupport renameSupport =
+				RenameSupport.create(typeToRename, newName, RenameSupport.UPDATE_REFERENCES);
+		renameSupport.preCheck();
+		renameSupport.perform(DesignerPlugin.getShell(), DesignerPlugin.getActiveWorkbenchWindow());
+	}
 
-  /**
-   * Renames {@link IMethod}.
-   */
-  public static void renameMethod(IMethod methodToRename, String newName) throws Exception {
-    RenameSupport renameSupport =
-        RenameSupport.create(methodToRename, newName, RenameSupport.UPDATE_REFERENCES);
-    renameSupport.preCheck();
-    renameSupport.perform(DesignerPlugin.getShell(), DesignerPlugin.getActiveWorkbenchWindow());
-  }
+	/**
+	 * Renames {@link IMethod}.
+	 */
+	public static void renameMethod(IMethod methodToRename, String newName) throws Exception {
+		RenameSupport renameSupport =
+				RenameSupport.create(methodToRename, newName, RenameSupport.UPDATE_REFERENCES);
+		renameSupport.preCheck();
+		renameSupport.perform(DesignerPlugin.getShell(), DesignerPlugin.getActiveWorkbenchWindow());
+	}
 
-  /**
-   * Moves enclosing {@link ICompilationUnit} into new package.
-   */
-  public static void moveType(IType type, IPackageFragment newPackage) throws Exception {
-    moveCompilationUnit(type.getCompilationUnit(), newPackage);
-  }
+	/**
+	 * Moves enclosing {@link ICompilationUnit} into new package.
+	 */
+	public static void moveType(IType type, IPackageFragment newPackage) throws Exception {
+		moveCompilationUnit(type.getCompilationUnit(), newPackage);
+	}
 
-  /**
-   * Moves {@link ICompilationUnit} into new package.
-   */
-  public static void moveCompilationUnit(ICompilationUnit compilationUnit,
-      IPackageFragment newPackage) throws Exception {
-    // prepare RefactoringDescriptor
-    MoveDescriptor refactoringDescriptor;
-    {
-      refactoringDescriptor =
-          (MoveDescriptor) RefactoringCore.getRefactoringContribution(IJavaRefactorings.MOVE).createDescriptor();
-      refactoringDescriptor.setMoveResources(
-          new IFile[]{},
-          new IFolder[]{},
-          new ICompilationUnit[]{compilationUnit});
-      refactoringDescriptor.setDestination(newPackage);
-      refactoringDescriptor.setUpdateReferences(true);
-    }
-    // perform refactoring
-    performRefactoring(refactoringDescriptor);
-  }
+	/**
+	 * Moves {@link ICompilationUnit} into new package.
+	 */
+	public static void moveCompilationUnit(ICompilationUnit compilationUnit,
+			IPackageFragment newPackage) throws Exception {
+		// prepare RefactoringDescriptor
+		MoveDescriptor refactoringDescriptor;
+		{
+			refactoringDescriptor =
+					(MoveDescriptor) RefactoringCore.getRefactoringContribution(IJavaRefactorings.MOVE).createDescriptor();
+			refactoringDescriptor.setMoveResources(
+					new IFile[]{},
+					new IFolder[]{},
+					new ICompilationUnit[]{compilationUnit});
+			refactoringDescriptor.setDestination(newPackage);
+			refactoringDescriptor.setUpdateReferences(true);
+		}
+		// perform refactoring
+		performRefactoring(refactoringDescriptor);
+	}
 
-  /**
-   * Deletes enclosing {@link ICompilationUnit}.
-   */
-  public static void deleteType(IType type) throws Exception {
-    deleteCompilationUnit(type.getCompilationUnit());
-  }
+	/**
+	 * Deletes enclosing {@link ICompilationUnit}.
+	 */
+	public static void deleteType(IType type) throws Exception {
+		deleteCompilationUnit(type.getCompilationUnit());
+	}
 
-  /**
-   * Deletes {@link ICompilationUnit}.
-   */
-  public static void deleteCompilationUnit(ICompilationUnit compilationUnit) throws Exception {
-    // prepare RefactoringDescriptor
-    DeleteDescriptor refactoringDescriptor;
-    {
-      Map<String, String> arguments = Maps.newHashMap();
-      arguments.put(ATTRIBUTE_DELETE_SUBPACKAGES, "false");
-      arguments.put(ATTRIBUTE_SUGGEST_ACCESSORS, "false");
-      arguments.put(ATTRIBUTE_RESOURCES, "0");
-      arguments.put(ATTRIBUTE_ELEMENTS, "1");
-      arguments.put("element1", compilationUnit.getHandleIdentifier());
-      refactoringDescriptor =
-          (DeleteDescriptor) RefactoringCore.getRefactoringContribution(IJavaRefactorings.DELETE).createDescriptor(
-              IJavaRefactorings.DELETE,
-              compilationUnit.getJavaProject().getElementName(),
-              "Delete " + compilationUnit.getElementName(),
-              "",
-              arguments,
-              0);
-    }
-    // perform refactoring
-    performRefactoring(refactoringDescriptor);
-  }
+	/**
+	 * Deletes {@link ICompilationUnit}.
+	 */
+	public static void deleteCompilationUnit(ICompilationUnit compilationUnit) throws Exception {
+		// prepare RefactoringDescriptor
+		DeleteDescriptor refactoringDescriptor;
+		{
+			Map<String, String> arguments = Maps.newHashMap();
+			arguments.put(ATTRIBUTE_DELETE_SUBPACKAGES, "false");
+			arguments.put(ATTRIBUTE_SUGGEST_ACCESSORS, "false");
+			arguments.put(ATTRIBUTE_RESOURCES, "0");
+			arguments.put(ATTRIBUTE_ELEMENTS, "1");
+			arguments.put("element1", compilationUnit.getHandleIdentifier());
+			refactoringDescriptor =
+					(DeleteDescriptor) RefactoringCore.getRefactoringContribution(IJavaRefactorings.DELETE).createDescriptor(
+							IJavaRefactorings.DELETE,
+							compilationUnit.getJavaProject().getElementName(),
+							"Delete " + compilationUnit.getElementName(),
+							"",
+							arguments,
+							0);
+		}
+		// perform refactoring
+		performRefactoring(refactoringDescriptor);
+	}
 
-  /**
-   * Performs refactoring corresponding to given {@link RefactoringDescriptor}.
-   */
-  public static void performRefactoring(RefactoringDescriptor refactoringDescriptor)
-      throws CoreException {
-    IProgressMonitor monitor = new NullProgressMonitor();
-    // perform refactoring
-    RefactoringStatus refactoringStatus = new RefactoringStatus();
-    Refactoring refactoring = refactoringDescriptor.createRefactoring(refactoringStatus);
-    Assert.isTrue(!refactoringStatus.hasError(), refactoringStatus.toString());
-    // check conditions
-    refactoring.checkAllConditions(monitor);
-    Assert.isTrue(!refactoringStatus.hasError(), refactoringStatus.toString());
-    // apply change
-    Change change = refactoring.createChange(monitor);
-    change.perform(monitor);
-  }
+	/**
+	 * Performs refactoring corresponding to given {@link RefactoringDescriptor}.
+	 */
+	public static void performRefactoring(RefactoringDescriptor refactoringDescriptor)
+			throws CoreException {
+		IProgressMonitor monitor = new NullProgressMonitor();
+		// perform refactoring
+		RefactoringStatus refactoringStatus = new RefactoringStatus();
+		Refactoring refactoring = refactoringDescriptor.createRefactoring(refactoringStatus);
+		Assert.isTrue(!refactoringStatus.hasError(), refactoringStatus.toString());
+		// check conditions
+		refactoring.checkAllConditions(monitor);
+		Assert.isTrue(!refactoringStatus.hasError(), refactoringStatus.toString());
+		// apply change
+		Change change = refactoring.createChange(monitor);
+		change.perform(monitor);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/TestBundle.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/TestBundle.java
index 43361a906..79ff61fb5 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/TestBundle.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/TestBundle.java
@@ -40,307 +40,307 @@
  * @author scheglov_ke
  */
 public final class TestBundle {
-  private final BundleContext m_context = Activator.getDefault().getBundle().getBundleContext();
-  private final String m_id;
-  private final File m_bundleFolder;
-  private File m_bundleFile;
-  private boolean m_created;
-  private Bundle m_bundle;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public TestBundle() throws Exception {
-    this("org.eclipse.wb.tests.testBundle");
-  }
-
-  public TestBundle(String id) throws Exception {
-    m_id = id;
-    m_bundleFolder = IOUtils2.createTempDirectory("wbpTestBundle", "");
-    m_bundleFile = m_bundleFolder;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Configuring
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Creates in this {@link TestBundle} same class as it exists in given {@link ClassLoader}. Note,
-   * that {@link ClassLoader} should be able to provide <code>*.class</code> resource.
-   */
-  public void addClass(Class<?> clazz) throws Exception {
-    ClassLoader classLoader = clazz.getClassLoader();
-    String name = clazz.getName();
-    // add main class
-    addClass(classLoader, name);
-    // add anonymous inner classes
-    try {
-      for (int i = 1;; i++) {
-        addClass(classLoader, name + "$" + i);
-      }
-    } catch (Throwable e) {
-    }
-  }
-
-  /**
-   * Creates in this {@link TestBundle} same class as it exists in given {@link ClassLoader}. Note,
-   * that {@link ClassLoader} should be able to provide <code>*.class</code> resource.
-   */
-  public void addClass(ClassLoader classLoader, String name) throws Exception {
-    addClass(name, getClassBytes(classLoader, name));
-  }
-
-  public void addClass(String name, InputStream inputStream) throws Exception {
-    assertNotCreated();
-    File classFile = getFileInExistingFolder(name.replace('.', '/') + ".class");
-    IOUtils2.writeBytes(classFile, inputStream);
-  }
-
-  public void setFile(String path, String content) throws Exception {
-    setFile(path, content.getBytes());
-  }
-
-  public void setFile(String path, byte[] content) throws Exception {
-    assertNotCreated();
-    File file = getFileInExistingFolder(path);
-    IOUtils2.writeBytes(file, content);
-  }
-
-  public ZipFileFactory addJar(String path) throws Exception {
-    assertNotCreated();
-    File jarFile = getFileInExistingFolder(path);
-    return new ZipFileFactory(new FileOutputStream(jarFile));
-  }
-
-  private void assertNotCreated() {
-    Assert.isTrue(!m_created, "Bundle %s is already created.", m_id);
-  }
-
-  private File getFileInExistingFolder(String path) {
-    File file = new File(m_bundleFolder, path);
-    file.getParentFile().mkdirs();
-    return file;
-  }
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // plugin.xml
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private static class ExtensionDeclaration {
-    String m_pointId;
-    String m_id;
-    String m_qualifiedId;
-    String[] m_lines;
-
-    boolean isInstalled() {
-      return ExternalFactoriesHelper.getExtension(m_pointId, m_qualifiedId) != null;
-    }
-  }
-  private static int m_nextExtensionId = 0;
-  private final List<ExtensionDeclaration> m_extensions = Lists.newArrayList();
-
-  public void addExtension(String pointId, String... lines) {
-    ExtensionDeclaration extension = new ExtensionDeclaration();
-    extension.m_pointId = pointId;
-    extension.m_id = "test_" + m_nextExtensionId++;
-    extension.m_qualifiedId = m_id + "." + extension.m_id;
-    extension.m_lines = lines;
-    m_extensions.add(extension);
-  }
-
-  public void setPluginExtensions() throws Exception {
-    String content = "";
-    content += "<plugin>\n";
-    for (ExtensionDeclaration extension : m_extensions) {
-      content += "\t<extension point='" + extension.m_pointId + "' id='" + extension.m_id + "'>\n";
-      content += "\t\t" + StringUtils.join(extension.m_lines, "\n\t\t");
-      content += "\n";
-      content += "\t</extension>\n";
-    }
-    content += "</plugin>";
-    setFile("plugin.xml", content);
-  }
-
-  private void waitForExtensionsInstalled() {
-    while (!areAllExtensionsInstalled()) {
-      TestUtils.waitEventLoop(1);
-    }
-  }
-
-  private void waitForExtensionsUnInstalled() {
-    while (!areAllExtensionsUnInstalled()) {
-      TestUtils.waitEventLoop(1);
-    }
-  }
-
-  private boolean areAllExtensionsInstalled() {
-    for (ExtensionDeclaration extension : m_extensions) {
-      if (!extension.isInstalled()) {
-        return false;
-      }
-    }
-    return true;
-  }
-
-  private boolean areAllExtensionsUnInstalled() {
-    for (ExtensionDeclaration extension : m_extensions) {
-      if (extension.isInstalled()) {
-        return false;
-      }
-    }
-    return true;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Class utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static InputStream getClassBytes(Class<?> clazz) {
-    return getClassBytes(clazz.getClassLoader(), clazz.getName());
-  }
-
-  public static InputStream getClassBytes(ClassLoader classLoader, String className) {
-    String bytesPath = className.replace('.', '/') + ".class";
-    InputStream inputStream = classLoader.getResourceAsStream(bytesPath);
-    Assert.isNotNull(inputStream, "Unable to find %s bytes.", className);
-    return inputStream;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Control
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void install() throws Exception {
-    install(false);
-  }
-
-  public void install(boolean pack2jar) throws Exception {
-    if (!m_extensions.isEmpty()) {
-      setPluginExtensions();
-    }
-    install0(pack2jar);
-    waitForExtensionsInstalled();
-  }
-
-  private void install0(boolean pack2jar) throws Exception, BundleException {
-    doCreate(pack2jar);
-    doInstall();
-    m_bundle.start();
-  }
-
-  private void doCreate(boolean pack2jar) throws Exception {
-    setFile(
-        "META-INF/MANIFEST.MF",
-        StringUtils.join(new String[]{
-            "Manifest-Version: 1.0",
-            "Bundle-ManifestVersion: 2",
-            MessageFormat.format("Bundle-SymbolicName: {0};singleton:=true", m_id),
-            "Bundle-Version: 1.0.0",
-            "Bundle-ClassPath: .",
-            "Require-Bundle: org.eclipse.wb.core,org.eclipse.wb.core.java,org.eclipse.wb.core.xml",
-            "Bundle-ActivationPolicy: lazy"}, "\n"));
-    if (pack2jar) {
-      pack2jar();
-    }
-    m_created = true;
-  }
-
-  private void pack2jar() throws Exception {
-    File bundleJarFile = new File(m_bundleFolder.getParent(), m_id + ".jar");
-    // pack into JAR file
-    {
-      ZipFileFactory jarFile = new ZipFileFactory(new FileOutputStream(bundleJarFile));
-      pack2jar(m_bundleFolder, jarFile, StringUtils.EMPTY);
-      jarFile.close();
-    }
-    // use JAR file instead of folder (already deleted)
-    m_bundleFile = bundleJarFile;
-  }
-
-  private void pack2jar(File folder, ZipFileFactory jar, String root) throws Exception {
-    for (File file : folder.listFiles()) {
-      if (file.isFile()) {
-        jar.add(root + file.getName(), new FileInputStream(file));
-      }
-      if (file.isDirectory()) {
-        pack2jar(file, jar, root + file.getName() + "/");
-      }
-      file.delete();
-    }
-    folder.delete();
-  }
-
-  private void doInstall() throws Exception {
-    m_bundle = m_context.installBundle(m_bundleFile.toURI().toURL().toExternalForm());
-  }
-
-  public void uninstall() throws Exception {
-    Assert.isNotNull(m_bundle, "Bundle %s is not installed.", m_id);
-    // we should wait until OSGi framework notifies all listeners that Bundle was uninstalled
-    final AtomicBoolean uninstallEventProcessed = new AtomicBoolean();
-    m_context.addBundleListener(new BundleListener() {
-      @Override
-      public void bundleChanged(BundleEvent event) {
-        if (event.getType() == BundleEvent.UNINSTALLED && event.getBundle() == m_bundle) {
-          uninstallEventProcessed.set(true);
-          m_context.removeBundleListener(this);
-        }
-      }
-    });
-    // request uninstalling
-    m_bundle.uninstall();
-    // wait for Bundle uninstalling event
-    while (!uninstallEventProcessed.get()) {
-      try {
-        Thread.sleep(0);
-      } catch (Throwable e) {
-      }
-    }
-    // wait for uninstalling extensions
-    waitForExtensionsUnInstalled();
-    // done, we can clear reference now
-    m_bundle = null;
-  }
-
-  public void dispose() throws Exception {
-    // uninstall, if not yet
-    if (m_bundle != null) {
-      uninstall();
-    }
-    // remove folder or file
-    FileUtils.deleteDirectory(m_bundleFolder);
-    m_bundleFile.delete();
-  }
-
-  public void waitForExtension(String pointId, String extensionId) throws Exception {
-    String qualifiedExtensionId = m_id + "." + extensionId;
-    while (ExternalFactoriesHelper.getExtension(pointId, qualifiedExtensionId) == null) {
-      TestUtils.waitEventLoop(0);
-    }
-  }
-
-  public void waitForNoExtension(String pointId, String extensionId) throws Exception {
-    String qualifiedExtensionId = m_id + "." + extensionId;
-    while (ExternalFactoriesHelper.getExtension(pointId, qualifiedExtensionId) != null) {
-      TestUtils.waitEventLoop(0);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public String getId() {
-    return m_id;
-  }
-
-  public Bundle getBundle() {
-    return m_bundle;
-  }
+	private final BundleContext m_context = Activator.getDefault().getBundle().getBundleContext();
+	private final String m_id;
+	private final File m_bundleFolder;
+	private File m_bundleFile;
+	private boolean m_created;
+	private Bundle m_bundle;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public TestBundle() throws Exception {
+		this("org.eclipse.wb.tests.testBundle");
+	}
+
+	public TestBundle(String id) throws Exception {
+		m_id = id;
+		m_bundleFolder = IOUtils2.createTempDirectory("wbpTestBundle", "");
+		m_bundleFile = m_bundleFolder;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Configuring
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Creates in this {@link TestBundle} same class as it exists in given {@link ClassLoader}. Note,
+	 * that {@link ClassLoader} should be able to provide <code>*.class</code> resource.
+	 */
+	public void addClass(Class<?> clazz) throws Exception {
+		ClassLoader classLoader = clazz.getClassLoader();
+		String name = clazz.getName();
+		// add main class
+		addClass(classLoader, name);
+		// add anonymous inner classes
+		try {
+			for (int i = 1;; i++) {
+				addClass(classLoader, name + "$" + i);
+			}
+		} catch (Throwable e) {
+		}
+	}
+
+	/**
+	 * Creates in this {@link TestBundle} same class as it exists in given {@link ClassLoader}. Note,
+	 * that {@link ClassLoader} should be able to provide <code>*.class</code> resource.
+	 */
+	public void addClass(ClassLoader classLoader, String name) throws Exception {
+		addClass(name, getClassBytes(classLoader, name));
+	}
+
+	public void addClass(String name, InputStream inputStream) throws Exception {
+		assertNotCreated();
+		File classFile = getFileInExistingFolder(name.replace('.', '/') + ".class");
+		IOUtils2.writeBytes(classFile, inputStream);
+	}
+
+	public void setFile(String path, String content) throws Exception {
+		setFile(path, content.getBytes());
+	}
+
+	public void setFile(String path, byte[] content) throws Exception {
+		assertNotCreated();
+		File file = getFileInExistingFolder(path);
+		IOUtils2.writeBytes(file, content);
+	}
+
+	public ZipFileFactory addJar(String path) throws Exception {
+		assertNotCreated();
+		File jarFile = getFileInExistingFolder(path);
+		return new ZipFileFactory(new FileOutputStream(jarFile));
+	}
+
+	private void assertNotCreated() {
+		Assert.isTrue(!m_created, "Bundle %s is already created.", m_id);
+	}
+
+	private File getFileInExistingFolder(String path) {
+		File file = new File(m_bundleFolder, path);
+		file.getParentFile().mkdirs();
+		return file;
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// plugin.xml
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static class ExtensionDeclaration {
+		String m_pointId;
+		String m_id;
+		String m_qualifiedId;
+		String[] m_lines;
+
+		boolean isInstalled() {
+			return ExternalFactoriesHelper.getExtension(m_pointId, m_qualifiedId) != null;
+		}
+	}
+	private static int m_nextExtensionId = 0;
+	private final List<ExtensionDeclaration> m_extensions = Lists.newArrayList();
+
+	public void addExtension(String pointId, String... lines) {
+		ExtensionDeclaration extension = new ExtensionDeclaration();
+		extension.m_pointId = pointId;
+		extension.m_id = "test_" + m_nextExtensionId++;
+		extension.m_qualifiedId = m_id + "." + extension.m_id;
+		extension.m_lines = lines;
+		m_extensions.add(extension);
+	}
+
+	public void setPluginExtensions() throws Exception {
+		String content = "";
+		content += "<plugin>\n";
+		for (ExtensionDeclaration extension : m_extensions) {
+			content += "\t<extension point='" + extension.m_pointId + "' id='" + extension.m_id + "'>\n";
+			content += "\t\t" + StringUtils.join(extension.m_lines, "\n\t\t");
+			content += "\n";
+			content += "\t</extension>\n";
+		}
+		content += "</plugin>";
+		setFile("plugin.xml", content);
+	}
+
+	private void waitForExtensionsInstalled() {
+		while (!areAllExtensionsInstalled()) {
+			TestUtils.waitEventLoop(1);
+		}
+	}
+
+	private void waitForExtensionsUnInstalled() {
+		while (!areAllExtensionsUnInstalled()) {
+			TestUtils.waitEventLoop(1);
+		}
+	}
+
+	private boolean areAllExtensionsInstalled() {
+		for (ExtensionDeclaration extension : m_extensions) {
+			if (!extension.isInstalled()) {
+				return false;
+			}
+		}
+		return true;
+	}
+
+	private boolean areAllExtensionsUnInstalled() {
+		for (ExtensionDeclaration extension : m_extensions) {
+			if (extension.isInstalled()) {
+				return false;
+			}
+		}
+		return true;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Class utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static InputStream getClassBytes(Class<?> clazz) {
+		return getClassBytes(clazz.getClassLoader(), clazz.getName());
+	}
+
+	public static InputStream getClassBytes(ClassLoader classLoader, String className) {
+		String bytesPath = className.replace('.', '/') + ".class";
+		InputStream inputStream = classLoader.getResourceAsStream(bytesPath);
+		Assert.isNotNull(inputStream, "Unable to find %s bytes.", className);
+		return inputStream;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Control
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void install() throws Exception {
+		install(false);
+	}
+
+	public void install(boolean pack2jar) throws Exception {
+		if (!m_extensions.isEmpty()) {
+			setPluginExtensions();
+		}
+		install0(pack2jar);
+		waitForExtensionsInstalled();
+	}
+
+	private void install0(boolean pack2jar) throws Exception, BundleException {
+		doCreate(pack2jar);
+		doInstall();
+		m_bundle.start();
+	}
+
+	private void doCreate(boolean pack2jar) throws Exception {
+		setFile(
+				"META-INF/MANIFEST.MF",
+				StringUtils.join(new String[]{
+						"Manifest-Version: 1.0",
+						"Bundle-ManifestVersion: 2",
+						MessageFormat.format("Bundle-SymbolicName: {0};singleton:=true", m_id),
+						"Bundle-Version: 1.0.0",
+						"Bundle-ClassPath: .",
+						"Require-Bundle: org.eclipse.wb.core,org.eclipse.wb.core.java,org.eclipse.wb.core.xml",
+				"Bundle-ActivationPolicy: lazy"}, "\n"));
+		if (pack2jar) {
+			pack2jar();
+		}
+		m_created = true;
+	}
+
+	private void pack2jar() throws Exception {
+		File bundleJarFile = new File(m_bundleFolder.getParent(), m_id + ".jar");
+		// pack into JAR file
+		{
+			ZipFileFactory jarFile = new ZipFileFactory(new FileOutputStream(bundleJarFile));
+			pack2jar(m_bundleFolder, jarFile, StringUtils.EMPTY);
+			jarFile.close();
+		}
+		// use JAR file instead of folder (already deleted)
+		m_bundleFile = bundleJarFile;
+	}
+
+	private void pack2jar(File folder, ZipFileFactory jar, String root) throws Exception {
+		for (File file : folder.listFiles()) {
+			if (file.isFile()) {
+				jar.add(root + file.getName(), new FileInputStream(file));
+			}
+			if (file.isDirectory()) {
+				pack2jar(file, jar, root + file.getName() + "/");
+			}
+			file.delete();
+		}
+		folder.delete();
+	}
+
+	private void doInstall() throws Exception {
+		m_bundle = m_context.installBundle(m_bundleFile.toURI().toURL().toExternalForm());
+	}
+
+	public void uninstall() throws Exception {
+		Assert.isNotNull(m_bundle, "Bundle %s is not installed.", m_id);
+		// we should wait until OSGi framework notifies all listeners that Bundle was uninstalled
+		final AtomicBoolean uninstallEventProcessed = new AtomicBoolean();
+		m_context.addBundleListener(new BundleListener() {
+			@Override
+			public void bundleChanged(BundleEvent event) {
+				if (event.getType() == BundleEvent.UNINSTALLED && event.getBundle() == m_bundle) {
+					uninstallEventProcessed.set(true);
+					m_context.removeBundleListener(this);
+				}
+			}
+		});
+		// request uninstalling
+		m_bundle.uninstall();
+		// wait for Bundle uninstalling event
+		while (!uninstallEventProcessed.get()) {
+			try {
+				Thread.sleep(0);
+			} catch (Throwable e) {
+			}
+		}
+		// wait for uninstalling extensions
+		waitForExtensionsUnInstalled();
+		// done, we can clear reference now
+		m_bundle = null;
+	}
+
+	public void dispose() throws Exception {
+		// uninstall, if not yet
+		if (m_bundle != null) {
+			uninstall();
+		}
+		// remove folder or file
+		FileUtils.deleteDirectory(m_bundleFolder);
+		m_bundleFile.delete();
+	}
+
+	public void waitForExtension(String pointId, String extensionId) throws Exception {
+		String qualifiedExtensionId = m_id + "." + extensionId;
+		while (ExternalFactoriesHelper.getExtension(pointId, qualifiedExtensionId) == null) {
+			TestUtils.waitEventLoop(0);
+		}
+	}
+
+	public void waitForNoExtension(String pointId, String extensionId) throws Exception {
+		String qualifiedExtensionId = m_id + "." + extensionId;
+		while (ExternalFactoriesHelper.getExtension(pointId, qualifiedExtensionId) != null) {
+			TestUtils.waitEventLoop(0);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public String getId() {
+		return m_id;
+	}
+
+	public Bundle getBundle() {
+		return m_bundle;
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/TestProject.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/TestProject.java
index 2359fbf48..771c5dc53 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/TestProject.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/TestProject.java
@@ -59,379 +59,379 @@
  * @author scheglov_ke
  */
 public class TestProject {
-  private final IProject m_project;
-  private final IJavaProject m_javaProject;
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public TestProject() throws CoreException {
-    this("TestProject");
-  }
-
-  public TestProject(String projectName) throws CoreException {
-    IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
-    m_project = root.getProject(projectName);
-    // delete project
-    if (m_project.exists()) {
-      m_project.delete(true, true, null);
-    }
-    // create project
-    {
-      m_project.create(null);
-      m_project.open(null);
-      m_javaProject = JavaCore.create(m_project);
-    }
-    //
-    IFolder binFolder = createBinFolder();
-    setJavaNature();
-    m_javaProject.setRawClasspath(new IClasspathEntry[0], null);
-    addSystemLibraries();
-    //
-    createOutputFolder(binFolder);
-    createSourceFolder();
-  }
-
-  public TestProject(IProject project) {
-    m_project = project;
-    m_javaProject = JavaCore.create(m_project);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Project creation utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private IPackageFragmentRoot createSourceFolder() throws CoreException {
-    IFolder folder = m_project.getFolder("src");
-    folder.create(false, true, null);
-    IPackageFragmentRoot root = m_javaProject.getPackageFragmentRoot(folder);
-    //
-    IClasspathEntry[] oldEntries = m_javaProject.getRawClasspath();
-    IClasspathEntry[] newEntries = new IClasspathEntry[oldEntries.length + 1];
-    System.arraycopy(oldEntries, 0, newEntries, 0, oldEntries.length);
-    newEntries[oldEntries.length] = JavaCore.newSourceEntry(root.getPath());
-    m_javaProject.setRawClasspath(newEntries, null);
-    return root;
-  }
-
-  private IFolder createBinFolder() throws CoreException {
-    IFolder binFolder = m_project.getFolder("bin");
-    binFolder.create(false, true, null);
-    return binFolder;
-  }
-
-  private void setJavaNature() throws CoreException {
-    IProjectDescription description = m_project.getDescription();
-    description.setNatureIds(new String[]{JavaCore.NATURE_ID});
-    m_project.setDescription(description, null);
-  }
-
-  private void createOutputFolder(IFolder binFolder) throws JavaModelException {
-    IPath outputLocation = binFolder.getFullPath();
-    m_javaProject.setOutputLocation(outputLocation, null);
-  }
-
-  private void addSystemLibraries() throws JavaModelException {
-    addClassPathEntry(JavaRuntime.getDefaultJREContainerEntry());
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Class path utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Adds "jar" with given location.
-   */
-  public void addExternalJar(File jar) throws JavaModelException {
-    String location = jar.getAbsolutePath();
-    addExternalJar(location);
-  }
-
-  /**
-   * Adds "jar" with given location.
-   */
-  public void addExternalJar(String location) throws JavaModelException {
-    addClassPathEntry(JavaCore.newLibraryEntry(new Path(location), null, null));
-  }
-
-  /**
-   * Adds "jar" files in given folder.
-   */
-  public void addExternalJars(String folderLocation) throws JavaModelException {
-    File folder = new File(folderLocation);
-    Assert.isTrue(folder.exists(), "Does not exist: " + folderLocation);
-    Assert.isTrue(folder.isDirectory(), "Is not directory: " + folderLocation);
-    for (File file : folder.listFiles()) {
-      String absolutePath = file.getAbsolutePath();
-      if (absolutePath.endsWith(".jar")) {
-        addExternalJar(absolutePath);
-      }
-    }
-  }
-
-  /**
-   * Adds {@link IClasspathEntry}'s for plugin with given id.
-   */
-  public void addPlugin(String pluginId) throws CoreException {
-    // prepare entries for plugin
-    ArrayList<IClasspathEntry> entries = Lists.newArrayList();
-    {
-      IPluginModelBase model = PDECore.getDefault().getModelManager().findModel(pluginId);
-      ClasspathUtilCore.addLibraries(model, entries);
-    }
-    // add entries
-    for (IClasspathEntry entry : entries) {
-      addClassPathEntry(entry);
-    }
-  }
-
-  public void addBundleJars(String bundleId) throws Exception {
-    addBundleJars(bundleId, "/");
-  }
-
-  /**
-   * @param path
-   *          the path name in which to look. The path is always relative to the root of this bundle
-   *          and may begin with "/". A path value of "/" indicates the root of this bundle.
-   */
-  public void addBundleJars(String bundleId, String path) throws Exception {
-    Bundle bundle = Platform.getBundle(bundleId);
-    Enumeration<URL> entries = bundle.findEntries(path, "*.jar", false);
-    while (entries.hasMoreElements()) {
-      URL jarURL = entries.nextElement();
-      String jarPath = FileLocator.toFileURL(jarURL).getPath();
-      addExternalJar(jarPath);
-    }
-  }
-
-  /**
-   * Adds new source folder.
-   */
-  public void addSourceFolder(String pathLocation) throws JavaModelException {
-    IPath path = new Path(pathLocation);
-    IClasspathEntry entry = JavaCore.newSourceEntry(path);
-    addClassPathEntry(entry);
-  }
-
-  /**
-   * Removes source folder.
-   */
-  public void removeSourceFolder(String pathLocation) throws JavaModelException {
-    IClasspathEntry[] oldEntries = m_javaProject.getRawClasspath();
-    for (int i = 0; i < oldEntries.length; i++) {
-      IClasspathEntry entry = oldEntries[i];
-      if (entry.getPath().toPortableString().equals(pathLocation)) {
-        IClasspathEntry[] newEntries = (IClasspathEntry[]) ArrayUtils.remove(oldEntries, i);
-        m_javaProject.setRawClasspath(newEntries, null);
-      }
-    }
-  }
-
-  /**
-   * Adds new required/referenced project.
-   */
-  public void addRequiredProject(TestProject requiredProject) throws CoreException {
-    addRequiredProject(requiredProject.getProject());
-  }
-
-  /**
-   * Adds new required/referenced project.
-   */
-  public void addRequiredProject(IProject requiredProject) throws CoreException {
-    IClasspathEntry projectEntry = JavaCore.newProjectEntry(requiredProject.getFullPath());
-    addClassPathEntry(projectEntry);
-  }
-
-  private void addClassPathEntry(IClasspathEntry newEntry) throws JavaModelException {
-    IClasspathEntry[] oldEntries = m_javaProject.getRawClasspath();
-    // check, may be there is already same entry
-    for (int i = 0; i < oldEntries.length; i++) {
-      IClasspathEntry entry = oldEntries[i];
-      if (entry.getPath().equals(newEntry.getPath())) {
-        return;
-      }
-    }
-    // do add
-    IClasspathEntry[] newEntries = new IClasspathEntry[oldEntries.length + 1];
-    System.arraycopy(oldEntries, 0, newEntries, 0, oldEntries.length);
-    newEntries[oldEntries.length] = newEntry;
-    m_javaProject.setRawClasspath(newEntries, null);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public IProject getProject() {
-    return m_project;
-  }
-
-  public IJavaProject getJavaProject() {
-    return m_javaProject;
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // "destructor"
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void dispose() throws CoreException {
-    clearReadOnlyFlag();
-    m_project.delete(true, true, null);
-    // may be fix for https://bugs.eclipse.org/bugs/show_bug.cgi?id=245008
-    // leak of ProjectDescriptionReader
-    try {
-      Class<?> readerClass = getClass().getClassLoader().loadClass(
-          "org.eclipse.core.internal.resources.ProjectDescriptionReader");
-      ReflectionUtils.setField(readerClass, "singletonParser", null);
-    } catch (Throwable e) {
-      e.printStackTrace();
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Operations
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public IPackageFragmentRoot getSourceFolder() throws CoreException {
-    IPackageFragmentRoot[] packageRoots = m_javaProject.getPackageFragmentRoots();
-    for (IPackageFragmentRoot packageRoot : packageRoots) {
-      if (packageRoot.getKind() == IPackageFragmentRoot.K_SOURCE) {
-        return packageRoot;
-      }
-    }
-    throw new IllegalStateException("Can not find source folder.");
-  }
-
-  /**
-   * @return the {@link IPackageFragment} with given name, in default source folder. Creates it if
-   *         does not exist.
-   */
-  public IPackageFragment getPackage(String name) throws CoreException {
-    IPackageFragmentRoot sourceFolder = getSourceFolder();
-    IPackageFragment packageFragment = sourceFolder.getPackageFragment(name);
-    if (packageFragment == null || !packageFragment.exists()) {
-      packageFragment = sourceFolder.createPackageFragment(name, false, null);
-    }
-    return packageFragment;
-  }
-
-  public ICompilationUnit createUnit(IPackageFragment pack, String cuName, String source)
-      throws JavaModelException {
-    return pack.createCompilationUnit(cuName, source, false, null);
-  }
-
-  /**
-   * Creates {@link IFile} (non Java resource) in given package.
-   */
-  public IFile createFile(IPackageFragment pack, String fileName, String contents)
-      throws Exception {
-    IFolder folder = (IFolder) pack.getUnderlyingResource();
-    IFile file = folder.getFile(fileName);
-    file.create(new ByteArrayInputStream(contents.getBytes()), true, null);
-    return file;
-  }
-
-  /**
-   * @return the {@link ICompilationUnit} for {@link IType} with given name.
-   */
-  public ICompilationUnit getCompilationUnit(String typeName) throws JavaModelException {
-    return getJavaProject().findType(typeName).getCompilationUnit();
-  }
-
-  private static long m_totalWaitForAutoBuild;
-
-  /**
-   * Wait for auto-build notification to occur, that is for the auto-build to finish.
-   */
-  public static void waitForAutoBuild() {
-    long start = System.currentTimeMillis();
-    while (true) {
-      try {
-        IJobManager jobManager = Job.getJobManager();
-        jobManager.wakeUp(ResourcesPlugin.FAMILY_AUTO_BUILD);
-        jobManager.wakeUp(ResourcesPlugin.FAMILY_AUTO_BUILD);
-        jobManager.wakeUp(ResourcesPlugin.FAMILY_AUTO_BUILD);
-        jobManager.join(ResourcesPlugin.FAMILY_AUTO_BUILD, new MyNullProgressMonitor());
-        break;
-      } catch (Throwable e) {
-      }
-    }
-    {
-      long delta = System.currentTimeMillis() - start;
-      m_totalWaitForAutoBuild += delta;
-      //System.out.println("waitForAutoBuild: " + delta + "  " + m_totalWaitForAutoBuild);
-    }
-  }
-
-  /**
-   * Read only flag can prevent file removing, so clear all of them.
-   */
-  private void clearReadOnlyFlag() throws CoreException {
-    if (m_project.isOpen()) {
-      m_project.accept(new IResourceVisitor() {
-        @Override
-        public boolean visit(IResource resource) throws CoreException {
-          if (resource instanceof IFile) {
-            IFile file = (IFile) resource;
-            ResourceAttributes resourceAttributes = file.getResourceAttributes();
-            if (resourceAttributes != null) {
-              resourceAttributes.setReadOnly(false);
-              file.setResourceAttributes(resourceAttributes);
-            }
-          }
-          return true;
-        }
-      });
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // IProgressMonitor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * No-op implementation of {@link IProgressMonitor}.
-   */
-  private static final class MyNullProgressMonitor implements IProgressMonitor {
-    @Override
-    public void beginTask(String name, int totalWork) {
-    }
-
-    @Override
-    public void done() {
-    }
-
-    @Override
-    public void internalWorked(double work) {
-    }
-
-    @Override
-    public boolean isCanceled() {
-      return false;
-    }
-
-    @Override
-    public void setCanceled(boolean value) {
-    }
-
-    @Override
-    public void setTaskName(String name) {
-    }
-
-    @Override
-    public void subTask(String name) {
-    }
-
-    @Override
-    public void worked(int work) {
-    }
-  }
+	private final IProject m_project;
+	private final IJavaProject m_javaProject;
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public TestProject() throws CoreException {
+		this("TestProject");
+	}
+
+	public TestProject(String projectName) throws CoreException {
+		IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
+		m_project = root.getProject(projectName);
+		// delete project
+		if (m_project.exists()) {
+			m_project.delete(true, true, null);
+		}
+		// create project
+		{
+			m_project.create(null);
+			m_project.open(null);
+			m_javaProject = JavaCore.create(m_project);
+		}
+		//
+		IFolder binFolder = createBinFolder();
+		setJavaNature();
+		m_javaProject.setRawClasspath(new IClasspathEntry[0], null);
+		addSystemLibraries();
+		//
+		createOutputFolder(binFolder);
+		createSourceFolder();
+	}
+
+	public TestProject(IProject project) {
+		m_project = project;
+		m_javaProject = JavaCore.create(m_project);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Project creation utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private IPackageFragmentRoot createSourceFolder() throws CoreException {
+		IFolder folder = m_project.getFolder("src");
+		folder.create(false, true, null);
+		IPackageFragmentRoot root = m_javaProject.getPackageFragmentRoot(folder);
+		//
+		IClasspathEntry[] oldEntries = m_javaProject.getRawClasspath();
+		IClasspathEntry[] newEntries = new IClasspathEntry[oldEntries.length + 1];
+		System.arraycopy(oldEntries, 0, newEntries, 0, oldEntries.length);
+		newEntries[oldEntries.length] = JavaCore.newSourceEntry(root.getPath());
+		m_javaProject.setRawClasspath(newEntries, null);
+		return root;
+	}
+
+	private IFolder createBinFolder() throws CoreException {
+		IFolder binFolder = m_project.getFolder("bin");
+		binFolder.create(false, true, null);
+		return binFolder;
+	}
+
+	private void setJavaNature() throws CoreException {
+		IProjectDescription description = m_project.getDescription();
+		description.setNatureIds(new String[]{JavaCore.NATURE_ID});
+		m_project.setDescription(description, null);
+	}
+
+	private void createOutputFolder(IFolder binFolder) throws JavaModelException {
+		IPath outputLocation = binFolder.getFullPath();
+		m_javaProject.setOutputLocation(outputLocation, null);
+	}
+
+	private void addSystemLibraries() throws JavaModelException {
+		addClassPathEntry(JavaRuntime.getDefaultJREContainerEntry());
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Class path utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Adds "jar" with given location.
+	 */
+	public void addExternalJar(File jar) throws JavaModelException {
+		String location = jar.getAbsolutePath();
+		addExternalJar(location);
+	}
+
+	/**
+	 * Adds "jar" with given location.
+	 */
+	public void addExternalJar(String location) throws JavaModelException {
+		addClassPathEntry(JavaCore.newLibraryEntry(new Path(location), null, null));
+	}
+
+	/**
+	 * Adds "jar" files in given folder.
+	 */
+	public void addExternalJars(String folderLocation) throws JavaModelException {
+		File folder = new File(folderLocation);
+		Assert.isTrue(folder.exists(), "Does not exist: " + folderLocation);
+		Assert.isTrue(folder.isDirectory(), "Is not directory: " + folderLocation);
+		for (File file : folder.listFiles()) {
+			String absolutePath = file.getAbsolutePath();
+			if (absolutePath.endsWith(".jar")) {
+				addExternalJar(absolutePath);
+			}
+		}
+	}
+
+	/**
+	 * Adds {@link IClasspathEntry}'s for plugin with given id.
+	 */
+	public void addPlugin(String pluginId) throws CoreException {
+		// prepare entries for plugin
+		ArrayList<IClasspathEntry> entries = Lists.newArrayList();
+		{
+			IPluginModelBase model = PDECore.getDefault().getModelManager().findModel(pluginId);
+			ClasspathUtilCore.addLibraries(model, entries);
+		}
+		// add entries
+		for (IClasspathEntry entry : entries) {
+			addClassPathEntry(entry);
+		}
+	}
+
+	public void addBundleJars(String bundleId) throws Exception {
+		addBundleJars(bundleId, "/");
+	}
+
+	/**
+	 * @param path
+	 *          the path name in which to look. The path is always relative to the root of this bundle
+	 *          and may begin with "/". A path value of "/" indicates the root of this bundle.
+	 */
+	public void addBundleJars(String bundleId, String path) throws Exception {
+		Bundle bundle = Platform.getBundle(bundleId);
+		Enumeration<URL> entries = bundle.findEntries(path, "*.jar", false);
+		while (entries.hasMoreElements()) {
+			URL jarURL = entries.nextElement();
+			String jarPath = FileLocator.toFileURL(jarURL).getPath();
+			addExternalJar(jarPath);
+		}
+	}
+
+	/**
+	 * Adds new source folder.
+	 */
+	public void addSourceFolder(String pathLocation) throws JavaModelException {
+		IPath path = new Path(pathLocation);
+		IClasspathEntry entry = JavaCore.newSourceEntry(path);
+		addClassPathEntry(entry);
+	}
+
+	/**
+	 * Removes source folder.
+	 */
+	public void removeSourceFolder(String pathLocation) throws JavaModelException {
+		IClasspathEntry[] oldEntries = m_javaProject.getRawClasspath();
+		for (int i = 0; i < oldEntries.length; i++) {
+			IClasspathEntry entry = oldEntries[i];
+			if (entry.getPath().toPortableString().equals(pathLocation)) {
+				IClasspathEntry[] newEntries = (IClasspathEntry[]) ArrayUtils.remove(oldEntries, i);
+				m_javaProject.setRawClasspath(newEntries, null);
+			}
+		}
+	}
+
+	/**
+	 * Adds new required/referenced project.
+	 */
+	public void addRequiredProject(TestProject requiredProject) throws CoreException {
+		addRequiredProject(requiredProject.getProject());
+	}
+
+	/**
+	 * Adds new required/referenced project.
+	 */
+	public void addRequiredProject(IProject requiredProject) throws CoreException {
+		IClasspathEntry projectEntry = JavaCore.newProjectEntry(requiredProject.getFullPath());
+		addClassPathEntry(projectEntry);
+	}
+
+	private void addClassPathEntry(IClasspathEntry newEntry) throws JavaModelException {
+		IClasspathEntry[] oldEntries = m_javaProject.getRawClasspath();
+		// check, may be there is already same entry
+		for (int i = 0; i < oldEntries.length; i++) {
+			IClasspathEntry entry = oldEntries[i];
+			if (entry.getPath().equals(newEntry.getPath())) {
+				return;
+			}
+		}
+		// do add
+		IClasspathEntry[] newEntries = new IClasspathEntry[oldEntries.length + 1];
+		System.arraycopy(oldEntries, 0, newEntries, 0, oldEntries.length);
+		newEntries[oldEntries.length] = newEntry;
+		m_javaProject.setRawClasspath(newEntries, null);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public IProject getProject() {
+		return m_project;
+	}
+
+	public IJavaProject getJavaProject() {
+		return m_javaProject;
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// "destructor"
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void dispose() throws CoreException {
+		clearReadOnlyFlag();
+		m_project.delete(true, true, null);
+		// may be fix for https://bugs.eclipse.org/bugs/show_bug.cgi?id=245008
+		// leak of ProjectDescriptionReader
+		try {
+			Class<?> readerClass = getClass().getClassLoader().loadClass(
+					"org.eclipse.core.internal.resources.ProjectDescriptionReader");
+			ReflectionUtils.setField(readerClass, "singletonParser", null);
+		} catch (Throwable e) {
+			e.printStackTrace();
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Operations
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public IPackageFragmentRoot getSourceFolder() throws CoreException {
+		IPackageFragmentRoot[] packageRoots = m_javaProject.getPackageFragmentRoots();
+		for (IPackageFragmentRoot packageRoot : packageRoots) {
+			if (packageRoot.getKind() == IPackageFragmentRoot.K_SOURCE) {
+				return packageRoot;
+			}
+		}
+		throw new IllegalStateException("Can not find source folder.");
+	}
+
+	/**
+	 * @return the {@link IPackageFragment} with given name, in default source folder. Creates it if
+	 *         does not exist.
+	 */
+	public IPackageFragment getPackage(String name) throws CoreException {
+		IPackageFragmentRoot sourceFolder = getSourceFolder();
+		IPackageFragment packageFragment = sourceFolder.getPackageFragment(name);
+		if (packageFragment == null || !packageFragment.exists()) {
+			packageFragment = sourceFolder.createPackageFragment(name, false, null);
+		}
+		return packageFragment;
+	}
+
+	public ICompilationUnit createUnit(IPackageFragment pack, String cuName, String source)
+			throws JavaModelException {
+		return pack.createCompilationUnit(cuName, source, false, null);
+	}
+
+	/**
+	 * Creates {@link IFile} (non Java resource) in given package.
+	 */
+	public IFile createFile(IPackageFragment pack, String fileName, String contents)
+			throws Exception {
+		IFolder folder = (IFolder) pack.getUnderlyingResource();
+		IFile file = folder.getFile(fileName);
+		file.create(new ByteArrayInputStream(contents.getBytes()), true, null);
+		return file;
+	}
+
+	/**
+	 * @return the {@link ICompilationUnit} for {@link IType} with given name.
+	 */
+	public ICompilationUnit getCompilationUnit(String typeName) throws JavaModelException {
+		return getJavaProject().findType(typeName).getCompilationUnit();
+	}
+
+	private static long m_totalWaitForAutoBuild;
+
+	/**
+	 * Wait for auto-build notification to occur, that is for the auto-build to finish.
+	 */
+	public static void waitForAutoBuild() {
+		long start = System.currentTimeMillis();
+		while (true) {
+			try {
+				IJobManager jobManager = Job.getJobManager();
+				jobManager.wakeUp(ResourcesPlugin.FAMILY_AUTO_BUILD);
+				jobManager.wakeUp(ResourcesPlugin.FAMILY_AUTO_BUILD);
+				jobManager.wakeUp(ResourcesPlugin.FAMILY_AUTO_BUILD);
+				jobManager.join(ResourcesPlugin.FAMILY_AUTO_BUILD, new MyNullProgressMonitor());
+				break;
+			} catch (Throwable e) {
+			}
+		}
+		{
+			long delta = System.currentTimeMillis() - start;
+			m_totalWaitForAutoBuild += delta;
+			//System.out.println("waitForAutoBuild: " + delta + "  " + m_totalWaitForAutoBuild);
+		}
+	}
+
+	/**
+	 * Read only flag can prevent file removing, so clear all of them.
+	 */
+	private void clearReadOnlyFlag() throws CoreException {
+		if (m_project.isOpen()) {
+			m_project.accept(new IResourceVisitor() {
+				@Override
+				public boolean visit(IResource resource) throws CoreException {
+					if (resource instanceof IFile) {
+						IFile file = (IFile) resource;
+						ResourceAttributes resourceAttributes = file.getResourceAttributes();
+						if (resourceAttributes != null) {
+							resourceAttributes.setReadOnly(false);
+							file.setResourceAttributes(resourceAttributes);
+						}
+					}
+					return true;
+				}
+			});
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// IProgressMonitor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * No-op implementation of {@link IProgressMonitor}.
+	 */
+	private static final class MyNullProgressMonitor implements IProgressMonitor {
+		@Override
+		public void beginTask(String name, int totalWork) {
+		}
+
+		@Override
+		public void done() {
+		}
+
+		@Override
+		public void internalWorked(double work) {
+		}
+
+		@Override
+		public boolean isCanceled() {
+			return false;
+		}
+
+		@Override
+		public void setCanceled(boolean value) {
+		}
+
+		@Override
+		public void setTaskName(String name) {
+		}
+
+		@Override
+		public void subTask(String name) {
+		}
+
+		@Override
+		public void worked(int work) {
+		}
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/ZipFileFactory.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/ZipFileFactory.java
index a851c45b0..346795ffa 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/ZipFileFactory.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/ZipFileFactory.java
@@ -27,56 +27,56 @@
  * @author scheglov_ke
  */
 public final class ZipFileFactory {
-  private final ZipOutputStream m_zipStream;
+	private final ZipOutputStream m_zipStream;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Constructor
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public ZipFileFactory(OutputStream outputStream) throws IOException {
-    m_zipStream = new ZipOutputStream(outputStream);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Constructor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public ZipFileFactory(OutputStream outputStream) throws IOException {
+		m_zipStream = new ZipOutputStream(outputStream);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Access
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void close() throws IOException {
-    m_zipStream.close();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Access
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void close() throws IOException {
+		m_zipStream.close();
+	}
 
-  public ZipFileFactory add(String path, String content) throws IOException {
-    add(path, new ByteArrayInputStream(content.getBytes()));
-    return this;
-  }
+	public ZipFileFactory add(String path, String content) throws IOException {
+		add(path, new ByteArrayInputStream(content.getBytes()));
+		return this;
+	}
 
-  public ZipFileFactory add(String path, InputStream inputStream) throws IOException {
-    m_zipStream.putNextEntry(new ZipEntry(path));
-    IOUtils.copy(inputStream, m_zipStream);
-    IOUtils.closeQuietly(inputStream);
-    m_zipStream.closeEntry();
-    return this;
-  }
+	public ZipFileFactory add(String path, InputStream inputStream) throws IOException {
+		m_zipStream.putNextEntry(new ZipEntry(path));
+		IOUtils.copy(inputStream, m_zipStream);
+		IOUtils.closeQuietly(inputStream);
+		m_zipStream.closeEntry();
+		return this;
+	}
 
-  public ZipFileFactory add(String path, File file) throws IOException {
-    path += "/" + file.getName();
-    if (file.isFile()) {
-      add(path, new FileInputStream(file));
-    }
-    if (file.isDirectory()) {
-      for (File child : file.listFiles()) {
-        add(path, child);
-      }
-    }
-    return this;
-  }
+	public ZipFileFactory add(String path, File file) throws IOException {
+		path += "/" + file.getName();
+		if (file.isFile()) {
+			add(path, new FileInputStream(file));
+		}
+		if (file.isDirectory()) {
+			for (File child : file.listFiles()) {
+				add(path, child);
+			}
+		}
+		return this;
+	}
 
-  public ZipFileFactory addClass(Class<?> clazz) throws IOException {
-    String path = clazz.getName().replace('.', '/') + ".class";
-    InputStream classBytes = TestBundle.getClassBytes(clazz);
-    add(path, classBytes);
-    return this;
-  }
+	public ZipFileFactory addClass(Class<?> clazz) throws IOException {
+		String path = clazz.getName().replace('.', '/') + ".class";
+		InputStream classBytes = TestBundle.getClassBytes(clazz);
+		add(path, classBytes);
+		return this;
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/databinding/CoreDbTests.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/databinding/CoreDbTests.java
index 9bfd58795..3b44a54ec 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/databinding/CoreDbTests.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/databinding/CoreDbTests.java
@@ -18,11 +18,11 @@
  * @author lobas_av
  */
 public class CoreDbTests extends TestCase {
-  public static Test suite() {
-    TestSuite suite = new TestSuite("org.eclipse.wb.core.databinding");
-    //$JUnit-BEGIN$
-    suite.addTestSuite(ObjectsTreeContentProviderTest.class);
-    //$JUnit-END$
-    return suite;
-  }
+	public static Test suite() {
+		TestSuite suite = new TestSuite("org.eclipse.wb.core.databinding");
+		//$JUnit-BEGIN$
+		suite.addTestSuite(ObjectsTreeContentProviderTest.class);
+		//$JUnit-END$
+		return suite;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/databinding/ObjectsTreeContentProviderTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/databinding/ObjectsTreeContentProviderTest.java
index c6050104e..8cb8e3f0f 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/databinding/ObjectsTreeContentProviderTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/databinding/ObjectsTreeContentProviderTest.java
@@ -28,92 +28,92 @@
  * @author lobas_av
  */
 public class ObjectsTreeContentProviderTest extends DesignerTestCase {
-  public void test_input() throws Exception {
-    ObjectsTreeContentProvider provider = new ObjectsTreeContentProvider();
-    //
-    assertSame(ArrayUtils.EMPTY_OBJECT_ARRAY, provider.getElements(null));
-    assertSame(ArrayUtils.EMPTY_OBJECT_ARRAY, provider.getElements("test"));
-    //
-    TestObjectInfo testObject = new TestObjectInfo("testObject");
-    //
-    Assertions.assertThat(provider.getElements(new Object[]{testObject})).containsOnly(testObject);
-    //
-    List<TestObjectInfo> input = new ArrayList<TestObjectInfo>();
-    input.add(testObject);
-    Assertions.assertThat(provider.getElements(input)).containsOnly(testObject);
-    //
-    TestObjectInfo childObject = new TestObjectInfo("childObject");
-    testObject.addChild(childObject);
-    //
-    Assertions.assertThat(provider.getElements(testObject)).containsOnly(childObject);
-    // not used
-    provider.inputChanged(null, null, null);
-    provider.dispose();
-  }
+	public void test_input() throws Exception {
+		ObjectsTreeContentProvider provider = new ObjectsTreeContentProvider();
+		//
+		assertSame(ArrayUtils.EMPTY_OBJECT_ARRAY, provider.getElements(null));
+		assertSame(ArrayUtils.EMPTY_OBJECT_ARRAY, provider.getElements("test"));
+		//
+		TestObjectInfo testObject = new TestObjectInfo("testObject");
+		//
+		Assertions.assertThat(provider.getElements(new Object[]{testObject})).containsOnly(testObject);
+		//
+		List<TestObjectInfo> input = new ArrayList<TestObjectInfo>();
+		input.add(testObject);
+		Assertions.assertThat(provider.getElements(input)).containsOnly(testObject);
+		//
+		TestObjectInfo childObject = new TestObjectInfo("childObject");
+		testObject.addChild(childObject);
+		//
+		Assertions.assertThat(provider.getElements(testObject)).containsOnly(childObject);
+		// not used
+		provider.inputChanged(null, null, null);
+		provider.dispose();
+	}
 
-  public void test_getParent() throws Exception {
-    ObjectsTreeContentProvider provider = new ObjectsTreeContentProvider();
-    //
-    assertNull(provider.getParent(null));
-    assertNull(provider.getParent("test"));
-    //
-    TestObjectInfo testObject = new TestObjectInfo("testObject");
-    TestObjectInfo childObject = new TestObjectInfo("childObject");
-    testObject.addChild(childObject);
-    //
-    assertNull(provider.getParent(testObject));
-    assertSame(testObject, provider.getParent(childObject));
-  }
+	public void test_getParent() throws Exception {
+		ObjectsTreeContentProvider provider = new ObjectsTreeContentProvider();
+		//
+		assertNull(provider.getParent(null));
+		assertNull(provider.getParent("test"));
+		//
+		TestObjectInfo testObject = new TestObjectInfo("testObject");
+		TestObjectInfo childObject = new TestObjectInfo("childObject");
+		testObject.addChild(childObject);
+		//
+		assertNull(provider.getParent(testObject));
+		assertSame(testObject, provider.getParent(childObject));
+	}
 
-  public void test_hasChildren() throws Exception {
-    ObjectsTreeContentProvider provider = new ObjectsTreeContentProvider();
-    //
-    assertFalse(provider.hasChildren(null));
-    assertFalse(provider.hasChildren("test"));
-    //
-    TestObjectInfo testObject = new TestObjectInfo("testObject");
-    //
-    assertFalse(provider.hasChildren(testObject));
-    //
-    TestObjectInfo childObject = new TestObjectInfo("childObject");
-    testObject.addChild(childObject);
-    //
-    assertTrue(provider.hasChildren(testObject));
-    //
-    TestObjectInfo testObjectPresentation = new TestObjectInfo("testObjectPresentation") {
-      @Override
-      public IObjectPresentation getPresentation() {
-        return new DefaultObjectPresentation(this) {
-          @Override
-          public String getText() throws Exception {
-            return "testObjectPresentation";
-          }
+	public void test_hasChildren() throws Exception {
+		ObjectsTreeContentProvider provider = new ObjectsTreeContentProvider();
+		//
+		assertFalse(provider.hasChildren(null));
+		assertFalse(provider.hasChildren("test"));
+		//
+		TestObjectInfo testObject = new TestObjectInfo("testObject");
+		//
+		assertFalse(provider.hasChildren(testObject));
+		//
+		TestObjectInfo childObject = new TestObjectInfo("childObject");
+		testObject.addChild(childObject);
+		//
+		assertTrue(provider.hasChildren(testObject));
+		//
+		TestObjectInfo testObjectPresentation = new TestObjectInfo("testObjectPresentation") {
+			@Override
+			public IObjectPresentation getPresentation() {
+				return new DefaultObjectPresentation(this) {
+					@Override
+					public String getText() throws Exception {
+						return "testObjectPresentation";
+					}
 
-          @Override
-          public boolean isVisible() throws Exception {
-            return false;
-          }
-        };
-      }
-    };
-    testObjectPresentation.addChild(new TestObjectInfo("childObject"));
-    //
-    assertFalse(provider.hasChildren(testObjectPresentation));
-  }
+					@Override
+					public boolean isVisible() throws Exception {
+						return false;
+					}
+				};
+			}
+		};
+		testObjectPresentation.addChild(new TestObjectInfo("childObject"));
+		//
+		assertFalse(provider.hasChildren(testObjectPresentation));
+	}
 
-  public void test_getChildren() throws Exception {
-    ObjectsTreeContentProvider provider = new ObjectsTreeContentProvider();
-    //
-    assertSame(ArrayUtils.EMPTY_OBJECT_ARRAY, provider.getChildren(null));
-    assertSame(ArrayUtils.EMPTY_OBJECT_ARRAY, provider.getChildren("test"));
-    //
-    TestObjectInfo testObject = new TestObjectInfo("testObject");
-    //
-    Assertions.assertThat(provider.getChildren(testObject)).isNotNull().isEmpty();
-    //
-    TestObjectInfo childObject = new TestObjectInfo("childObject");
-    testObject.addChild(childObject);
-    //
-    Assertions.assertThat(provider.getChildren(testObject)).containsOnly(childObject);
-  }
+	public void test_getChildren() throws Exception {
+		ObjectsTreeContentProvider provider = new ObjectsTreeContentProvider();
+		//
+		assertSame(ArrayUtils.EMPTY_OBJECT_ARRAY, provider.getChildren(null));
+		assertSame(ArrayUtils.EMPTY_OBJECT_ARRAY, provider.getChildren("test"));
+		//
+		TestObjectInfo testObject = new TestObjectInfo("testObject");
+		//
+		Assertions.assertThat(provider.getChildren(testObject)).isNotNull().isEmpty();
+		//
+		TestObjectInfo childObject = new TestObjectInfo("childObject");
+		testObject.addChild(childObject);
+		//
+		Assertions.assertThat(provider.getChildren(testObject)).containsOnly(childObject);
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/eval/AbstractEngineTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/eval/AbstractEngineTest.java
index e19f1007d..6c80699da 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/eval/AbstractEngineTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/eval/AbstractEngineTest.java
@@ -33,99 +33,99 @@
  * @author scheglov_ke
  */
 public abstract class AbstractEngineTest extends AbstractJavaTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Evaluates "return" expression of method with given signature.
-   */
-  protected final Object evaluateSingleMethod(TypeDeclaration typeDeclaration,
-      String methodSignature) throws Exception {
-    return evaluateSingleMethod(typeDeclaration, methodSignature, methodSignature);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Evaluates "return" expression of method with given signature.
+	 */
+	protected final Object evaluateSingleMethod(TypeDeclaration typeDeclaration,
+			String methodSignature) throws Exception {
+		return evaluateSingleMethod(typeDeclaration, methodSignature, methodSignature);
+	}
 
-  /**
-   * Evaluates "return" expression of method with given signature.
-   */
-  protected final Object evaluateSingleMethod(TypeDeclaration typeDeclaration,
-      String entryMethodSignature,
-      String returnMethodSignature) throws Exception {
-    MethodDeclaration entryMethod =
-        AstNodeUtils.getMethodBySignature(typeDeclaration, entryMethodSignature);
-    MethodDeclaration returnMethod =
-        AstNodeUtils.getMethodBySignature(typeDeclaration, returnMethodSignature);
-    List<Statement> statements = DomGenerics.statements(returnMethod.getBody());
-    ReturnStatement returnStatement = (ReturnStatement) statements.get(statements.size() - 1);
-    Expression expressionToEvaluate = returnStatement.getExpression();
-    return evaluateExpression(entryMethod, expressionToEvaluate);
-  }
+	/**
+	 * Evaluates "return" expression of method with given signature.
+	 */
+	protected final Object evaluateSingleMethod(TypeDeclaration typeDeclaration,
+			String entryMethodSignature,
+			String returnMethodSignature) throws Exception {
+		MethodDeclaration entryMethod =
+				AstNodeUtils.getMethodBySignature(typeDeclaration, entryMethodSignature);
+		MethodDeclaration returnMethod =
+				AstNodeUtils.getMethodBySignature(typeDeclaration, returnMethodSignature);
+		List<Statement> statements = DomGenerics.statements(returnMethod.getBody());
+		ReturnStatement returnStatement = (ReturnStatement) statements.get(statements.size() - 1);
+		Expression expressionToEvaluate = returnStatement.getExpression();
+		return evaluateExpression(entryMethod, expressionToEvaluate);
+	}
 
-  protected final Object evaluateExpression(MethodDeclaration entryPoint,
-      final Expression expressionToEvaluate) throws Exception {
-    ClassLoader projectClassLoader =
-        CodeUtils.getProjectClassLoader(m_lastEditor.getModelUnit().getJavaProject());
-    ExecutionFlowDescription flowDescription = new ExecutionFlowDescription(entryPoint);
-    //
-    final boolean[] expressionEvaluated = new boolean[1];
-    EvaluationContext context = new EvaluationContext(projectClassLoader, flowDescription) {
-      @Override
-      public void evaluationSuccessful(Expression expression, Object value) throws Exception {
-        if (expression == expressionToEvaluate) {
-          expressionEvaluated[0] = true;
-        }
-      }
-    };
-    Object evaluationResult = AstEvaluationEngine.evaluate(context, expressionToEvaluate);
-    assertTrue(MessageFormat.format(
-        "Expression ''{0}'' was not notified in evaluationSuccessful()",
-        expressionToEvaluate), expressionEvaluated[0]);
-    return evaluationResult;
-  }
+	protected final Object evaluateExpression(MethodDeclaration entryPoint,
+			final Expression expressionToEvaluate) throws Exception {
+		ClassLoader projectClassLoader =
+				CodeUtils.getProjectClassLoader(m_lastEditor.getModelUnit().getJavaProject());
+		ExecutionFlowDescription flowDescription = new ExecutionFlowDescription(entryPoint);
+		//
+		final boolean[] expressionEvaluated = new boolean[1];
+		EvaluationContext context = new EvaluationContext(projectClassLoader, flowDescription) {
+			@Override
+			public void evaluationSuccessful(Expression expression, Object value) throws Exception {
+				if (expression == expressionToEvaluate) {
+					expressionEvaluated[0] = true;
+				}
+			}
+		};
+		Object evaluationResult = AstEvaluationEngine.evaluate(context, expressionToEvaluate);
+		assertTrue(MessageFormat.format(
+				"Expression ''{0}'' was not notified in evaluationSuccessful()",
+				expressionToEvaluate), expressionEvaluated[0]);
+		return evaluationResult;
+	}
 
-  /**
-   * Creates {@link ICompilationUnit} for resource in "/resources/eval" and given name.
-   */
-  protected final TypeDeclaration createResourceType(String name) throws Exception {
-    return createResourceType(name, "Test.java");
-  }
+	/**
+	 * Creates {@link ICompilationUnit} for resource in "/resources/eval" and given name.
+	 */
+	protected final TypeDeclaration createResourceType(String name) throws Exception {
+		return createResourceType(name, "Test.java");
+	}
 
-  /**
-   * Creates {@link ICompilationUnit} for resource in "/resources/eval" and given name.
-   */
-  protected final TypeDeclaration createResourceType(String resourceName, String unitName)
-      throws Exception {
-    String path = "core/eval/" + resourceName + ".java";
-    String code = readResourceFileContent(path);
-    CompilationUnit compilationUnit = createASTCompilationUnit("test", unitName, code);
-    assertEquals(1, compilationUnit.types().size());
-    return (TypeDeclaration) compilationUnit.types().get(0);
-  }
+	/**
+	 * Creates {@link ICompilationUnit} for resource in "/resources/eval" and given name.
+	 */
+	protected final TypeDeclaration createResourceType(String resourceName, String unitName)
+			throws Exception {
+		String path = "core/eval/" + resourceName + ".java";
+		String code = readResourceFileContent(path);
+		CompilationUnit compilationUnit = createASTCompilationUnit("test", unitName, code);
+		assertEquals(1, compilationUnit.types().size());
+		return (TypeDeclaration) compilationUnit.types().get(0);
+	}
 
-  /**
-   * Evaluates given expression.
-   */
-  protected final Object evaluateExpression(String expression, String returnType) throws Exception {
-    return evaluateExpression(expression, returnType, false);
-  }
+	/**
+	 * Evaluates given expression.
+	 */
+	protected final Object evaluateExpression(String expression, String returnType) throws Exception {
+		return evaluateExpression(expression, returnType, false);
+	}
 
-  /**
-   * Evaluates given expression.
-   */
-  protected final Object evaluateExpression(String expression, String returnType, boolean waitBuild)
-      throws Exception {
-    CompilationUnit compilationUnit =
-        createASTCompilationUnit(
-            "test",
-            "Test.java",
-            getSource("// filler filler filler", "package test;", "class Test {", "  "
-                + returnType
-                + " foo() {", "      return " + expression + ";", "  }", "}"));
-    TypeDeclaration typeDeclaration = (TypeDeclaration) compilationUnit.types().get(0);
-    if (waitBuild) {
-      waitForAutoBuild();
-    }
-    return evaluateSingleMethod(typeDeclaration, "foo()");
-  }
+	/**
+	 * Evaluates given expression.
+	 */
+	protected final Object evaluateExpression(String expression, String returnType, boolean waitBuild)
+			throws Exception {
+		CompilationUnit compilationUnit =
+				createASTCompilationUnit(
+						"test",
+						"Test.java",
+						getSource("// filler filler filler", "package test;", "class Test {", "  "
+								+ returnType
+								+ " foo() {", "      return " + expression + ";", "  }", "}"));
+		TypeDeclaration typeDeclaration = (TypeDeclaration) compilationUnit.types().get(0);
+		if (waitBuild) {
+			waitForAutoBuild();
+		}
+		return evaluateSingleMethod(typeDeclaration, "foo()");
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/eval/AstEvaluationEngineTests.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/eval/AstEvaluationEngineTests.java
index 1bb937f3e..7e3484794 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/eval/AstEvaluationEngineTests.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/eval/AstEvaluationEngineTests.java
@@ -33,28 +33,28 @@
  * @author scheglov_ke
  */
 public class AstEvaluationEngineTests extends DesignerSuiteTests {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Suite
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static Test suite() {
-    TestSuite suite = new TestSuite("org.eclipse.wb.core.eval");
-    suite.addTest(createSingleSuite(EngineTest.class));
-    suite.addTest(createSingleSuite(BooleanTest.class));
-    suite.addTest(createSingleSuite(CharTest.class));
-    suite.addTest(createSingleSuite(IntegerTest.class));
-    suite.addTest(createSingleSuite(LongTest.class));
-    suite.addTest(createSingleSuite(FloatTest.class));
-    suite.addTest(createSingleSuite(DoubleTest.class));
-    suite.addTest(createSingleSuite(CastTest.class));
-    suite.addTest(createSingleSuite(ClassTest.class));
-    suite.addTest(createSingleSuite(StringTest.class));
-    suite.addTest(createSingleSuite(ArrayTest.class));
-    suite.addTest(createSingleSuite(FieldTest.class));
-    suite.addTest(createSingleSuite(ExecutionFlowUtilsTest.class));
-    suite.addTest(createSingleSuite(ExecutionFlowUtils2Test.class));
-    suite.addTest(createSingleSuite(MethodInvocationTest.class));
-    return suite;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Suite
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static Test suite() {
+		TestSuite suite = new TestSuite("org.eclipse.wb.core.eval");
+		suite.addTest(createSingleSuite(EngineTest.class));
+		suite.addTest(createSingleSuite(BooleanTest.class));
+		suite.addTest(createSingleSuite(CharTest.class));
+		suite.addTest(createSingleSuite(IntegerTest.class));
+		suite.addTest(createSingleSuite(LongTest.class));
+		suite.addTest(createSingleSuite(FloatTest.class));
+		suite.addTest(createSingleSuite(DoubleTest.class));
+		suite.addTest(createSingleSuite(CastTest.class));
+		suite.addTest(createSingleSuite(ClassTest.class));
+		suite.addTest(createSingleSuite(StringTest.class));
+		suite.addTest(createSingleSuite(ArrayTest.class));
+		suite.addTest(createSingleSuite(FieldTest.class));
+		suite.addTest(createSingleSuite(ExecutionFlowUtilsTest.class));
+		suite.addTest(createSingleSuite(ExecutionFlowUtils2Test.class));
+		suite.addTest(createSingleSuite(MethodInvocationTest.class));
+		return suite;
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/eval/EngineTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/eval/EngineTest.java
index 2ed2ba9ed..c7fab8a1b 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/eval/EngineTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/eval/EngineTest.java
@@ -39,516 +39,516 @@
  * @author scheglov_ke
  */
 public class EngineTest extends AbstractEngineTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Life cycle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void setUp() throws Exception {
-    super.setUp();
-    if (m_testProject == null) {
-      do_projectCreate();
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Fail
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_fail() throws Exception {
-    TypeDeclaration typeDeclaration =
-        createTypeDeclaration_Test(
-            "public class Test {",
-            "  int foo(int value) {",
-            "    return value;",
-            "  }",
-            "}");
-    try {
-      evaluateSingleMethod(typeDeclaration, "foo(int)");
-      fail();
-    } catch (Throwable e_) {
-      DesignerException e = DesignerExceptionUtils.getDesignerException(e_);
-      assertEquals(ICoreExceptionConstants.EVAL_NO_METHOD_INVOCATION, e.getCode());
-    }
-  }
-
-  /**
-   * Test that {@link EvaluationContext#evaluationFailed(Expression, Throwable)} is notified.
-   */
-  public void test_EvaluationContext_evaluationFailed_noResult() throws Exception {
-    setFileContentSrc(
-        "test/MyObject.java",
-        getSource(
-            "package test;",
-            "public class MyObject {",
-            "  public static int getValue() {",
-            "    throw new IllegalStateException();",
-            "  }",
-            "}"));
-    waitForAutoBuild();
-    //
-    TypeDeclaration typeDeclaration =
-        createTypeDeclaration_Test(
-            "public class Test {",
-            "  public void root() {",
-            "    MyObject.getValue();",
-            "  }",
-            "}");
-    MethodDeclaration methodDeclaration = typeDeclaration.getMethods()[0];
-    Expression expression =
-        (Expression) m_lastEditor.getEnclosingNode("MyObject.getValue()").getParent();
-    // prepare context
-    EvaluationContext context;
-    final AtomicBoolean evaluationFailed = new AtomicBoolean();
-    {
-      ClassLoader projectClassLoader =
-          CodeUtils.getProjectClassLoader(m_lastEditor.getModelUnit().getJavaProject());
-      ExecutionFlowDescription flowDescription = new ExecutionFlowDescription(methodDeclaration);
-      context = new EvaluationContext(projectClassLoader, flowDescription) {
-        @Override
-        public Object evaluationFailed(Expression expression_, Throwable e) throws Exception {
-          evaluationFailed.set(true);
-          return AstEvaluationEngine.UNKNOWN;
-        }
-      };
-    }
-    // evaluate, we don't return value, so evaluation failed
-    try {
-      AstEvaluationEngine.evaluate(context, expression);
-      fail();
-    } catch (Throwable e) {
-    }
-    assertThat(evaluationFailed.get()).isTrue();
-  }
-
-  /**
-   * Test that {@link EvaluationContext#evaluationFailed(Expression, Throwable)} is notified.
-   */
-  public void test_EvaluationContext_evaluationFailed_returnResult() throws Exception {
-    setFileContentSrc(
-        "test/MyObject.java",
-        getSource(
-            "package test;",
-            "public class MyObject {",
-            "  public static int getValue() {",
-            "    throw new IllegalStateException();",
-            "  }",
-            "}"));
-    waitForAutoBuild();
-    //
-    TypeDeclaration typeDeclaration =
-        createTypeDeclaration_Test(
-            "public class Test {",
-            "  public void root() {",
-            "    MyObject.getValue();",
-            "  }",
-            "}");
-    MethodDeclaration methodDeclaration = typeDeclaration.getMethods()[0];
-    Expression expression =
-        (Expression) m_lastEditor.getEnclosingNode("MyObject.getValue()").getParent();
-    // prepare context
-    EvaluationContext context;
-    {
-      ClassLoader projectClassLoader =
-          CodeUtils.getProjectClassLoader(m_lastEditor.getModelUnit().getJavaProject());
-      ExecutionFlowDescription flowDescription = new ExecutionFlowDescription(methodDeclaration);
-      context = new EvaluationContext(projectClassLoader, flowDescription) {
-        @Override
-        public Object evaluationFailed(Expression expression_, Throwable e) throws Exception {
-          return 123;
-        }
-      };
-    }
-    // evaluate, special result returned
-    assertEquals(123, AstEvaluationEngine.evaluate(context, expression));
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Simple tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_null() throws Exception {
-    assertEquals(null, evaluateExpression("null", "java.lang.Object"));
-  }
-
-  public void test_parenthesis() throws Exception {
-    assertEquals(null, evaluateExpression("(null)", "java.lang.Object"));
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // SimpleName
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_SimpleName_notFound() throws Exception {
-    createTypeDeclaration(
-        "test",
-        "BaseClass.java",
-        getSourceDQ(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "package test;",
-            "public class BaseClass {",
-            "  protected int m_value;",
-            "}"));
-    TypeDeclaration typeDeclaration =
-        createTypeDeclaration(
-            "test",
-            "BaseSubClass.java",
-            getSourceDQ(
-                "package test;",
-                "public class BaseSubClass extends BaseClass {",
-                "  public int getValue() {",
-                "    return m_value;",
-                "  }",
-                "}"));
-    waitForAutoBuild();
-    try {
-      evaluateSingleMethod(typeDeclaration, "getValue()");
-      fail();
-    } catch (Throwable e_) {
-      DesignerException e = DesignerExceptionUtils.getDesignerException(e_);
-      assertEquals(ICoreExceptionConstants.EVAL_NO_SIMPLE_NAME_FOUND, e.getCode());
-    }
-  }
-
-  public void test_SimpleName_local() throws Exception {
-    TypeDeclaration typeDeclaration =
-        createTypeDeclaration(
-            "test",
-            "Test.java",
-            getSourceDQ(
-                "// filler filler filler filler filler",
-                "// filler filler filler filler filler",
-                "package test;",
-                "public class Test {",
-                "  public String use_simpleName_local() {",
-                "    String s = '12345';",
-                "    return s;",
-                "  }",
-                "}"));
-    Object actual = evaluateSingleMethod(typeDeclaration, "use_simpleName_local()");
-    assertEquals("12345", actual);
-  }
-
-  public void test_SimpleName_field() throws Exception {
-    TypeDeclaration typeDeclaration =
-        createTypeDeclaration(
-            "test",
-            "Test.java",
-            getSourceDQ(
-                "// filler filler filler filler filler",
-                "// filler filler filler filler filler",
-                "package test;",
-                "public class Test {",
-                "  private final String m_fieldString = '12345';",
-                "  public String use_simpleName_field() {",
-                "    return m_fieldString;",
-                "  }",
-                "}"));
-    Object actual = evaluateSingleMethod(typeDeclaration, "use_simpleName_field()");
-    assertEquals("12345", actual);
-  }
-
-  public void test_SimpleName_assignment() throws Exception {
-    TypeDeclaration typeDeclaration =
-        createTypeDeclaration(
-            "test",
-            "Test.java",
-            getSourceDQ(
-                "// filler filler filler filler filler",
-                "// filler filler filler filler filler",
-                "package test;",
-                "public class Test {",
-                "  public String use_simpleName_assignment() {",
-                "    String s = '23';",
-                "    s = '12345';",
-                "    return s;",
-                "  }",
-                "}"));
-    Object actual = evaluateSingleMethod(typeDeclaration, "use_simpleName_assignment()");
-    assertEquals("12345", actual);
-  }
-
-  public void test_SimpleName_recursiveAssignment() throws Exception {
-    TypeDeclaration typeDeclaration =
-        createTypeDeclaration_Test(new String[]{
-            "public class Test {",
-            "  public int root() {",
-            "    int value = 4;",
-            "    value = value + 1;",
-            "    return value;",
-            "  }",
-            "}"});
-    Object actual = evaluateSingleMethod(typeDeclaration, "root()");
-    assertEquals(5, actual);
-  }
-
-  public void test_SimpleName_inv_good() throws Exception {
-    TypeDeclaration typeDeclaration =
-        createTypeDeclaration_Test(new String[]{
-            "public class Test {",
-            "  public void root() {",
-            "    foo('12345');",
-            "  }",
-            "  public String foo(String s) {",
-            "    return s;",
-            "  }",
-            "}"});
-    Object actual = evaluateSingleMethod(typeDeclaration, "root()", "foo(java.lang.String)");
-    assertEquals("12345", actual);
-  }
-
-  public void test_SimpleName_inv_noInvocation() throws Exception {
-    TypeDeclaration typeDeclaration =
-        createTypeDeclaration_Test(
-            "public class Test {",
-            "  public int foo(int value) {",
-            "    return value;",
-            "  }",
-            "}");
-    try {
-      evaluateSingleMethod(typeDeclaration, "foo(int)");
-      fail();
-    } catch (Throwable e_) {
-      DesignerException e = DesignerExceptionUtils.getDesignerException(e_);
-      assertEquals(ICoreExceptionConstants.EVAL_NO_METHOD_INVOCATION, e.getCode());
-    }
-  }
-
-  /**
-   * If there are two invocations of method, so two variants of value for parameter, choose first
-   * one, don't just fail.
-   */
-  public void test_SimpleName_inv_twoInvocation() throws Exception {
-    TypeDeclaration typeDeclaration =
-        createTypeDeclaration_Test(new String[]{
-            "public class Test {",
-            "  public void root() {",
-            "    foo('111');",
-            "    foo('222');",
-            "  }",
-            "  public String foo(String s) {",
-            "    return s;",
-            "  }",
-            "}"});
-    Object actual = evaluateSingleMethod(typeDeclaration, "root()", "foo(java.lang.String)");
-    assertEquals("111", actual);
-  }
-
-  public void test_SimpleName_inheritedConstant() throws Exception {
-    setFileContentSrc(
-        "test/SuperClass.java",
-        getSourceDQ(
-            "package test;",
-            "public class SuperClass {",
-            "  public static int FOO = 555;",
-            "}"));
-    waitForAutoBuild();
-    // parse
-    TypeDeclaration typeDeclaration =
-        createTypeDeclaration_Test(
-            "public class Test extends SuperClass {",
-            "  public int foo() {",
-            "    return FOO;",
-            "  }",
-            "}");
-    waitForAutoBuild();
-    // evaluate
-    assertEquals(555, evaluateSingleMethod(typeDeclaration, "foo()"));
-  }
-
-  public void test_SimpleName_localConstant() throws Exception {
-    waitForAutoBuild();
-    TypeDeclaration typeDeclaration =
-        createTypeDeclaration_Test(
-            "public class Test {",
-            "  public static int FOO = 222;",
-            "  public int foo() {",
-            "    return FOO;",
-            "  }",
-            "}");
-    // evaluate
-    assertEquals(222, evaluateSingleMethod(typeDeclaration, "foo()"));
-  }
-
-  public void test_SimpleName_fieldWithoutInitializer() throws Exception {
-    waitForAutoBuild();
-    TypeDeclaration typeDeclaration =
-        createTypeDeclaration_Test(
-            "public class Test {",
-            "  public Object field;",
-            "  public Object foo() {",
-            "    return field;",
-            "  }",
-            "}");
-    // evaluate
-    assertEquals(null, evaluateSingleMethod(typeDeclaration, "foo()"));
-  }
-
-  public void test_SimpleName_interfaceConstant() throws Exception {
-    setFileContentSrc(
-        "test/IConstants.java",
-        getSourceDQ("package test;", "public interface IConstants {", "  int FOO = 555;", "}"));
-    waitForAutoBuild();
-    // parse
-    TypeDeclaration typeDeclaration =
-        createTypeDeclaration_Test(
-            "public class Test implements IConstants {",
-            "  public int foo() {",
-            "    return FOO;",
-            "  }",
-            "}");
-    waitForAutoBuild();
-    // evaluate
-    assertEquals(555, evaluateSingleMethod(typeDeclaration, "foo()"));
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // QualifiedName
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for usual {@link QualifiedName}.
-   */
-  public void test_QualifiedName_1() throws Exception {
-    assertEquals(
-        Collections.EMPTY_LIST,
-        evaluateExpression("java.util.Collections.EMPTY_LIST", "java.lang.Object"));
-  }
-
-  /**
-   * Test for {@link QualifiedName} for field implemented in interface.
-   */
-  public void test_QualifiedName_2() throws Exception {
-    Integer actualValue =
-        (Integer) evaluateExpression("javax.swing.JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS", "int");
-    assertEquals(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS, actualValue.intValue());
-  }
-
-  /**
-   * Test for array.length
-   */
-  public void test_QualifiedName_3() throws Exception {
-    TypeDeclaration typeDeclaration =
-        createTypeDeclaration_Test(
-            "class Test {",
-            "  public int foo() {",
-            "    int[] ints = new int[]{1,2,3};",
-            "    return ints.length;",
-            "  }",
-            "}");
-    waitForAutoBuild();
-    Object actual = evaluateSingleMethod(typeDeclaration, "foo()");
-    assertEquals(3, actual);
-  }
-
-  /**
-   * Test for java.awt.Dimension.x
-   */
-  public void test_QualifiedName_4() throws Exception {
-    TypeDeclaration typeDeclaration =
-        createTypeDeclaration_Test(
-            "import java.awt.Dimension;",
-            "class Test {",
-            "  public int foo() {",
-            "    Dimension dimension = new Dimension(1, 2);",
-            "    return dimension.width;",
-            "  }",
-            "}");
-    Object actual = evaluateSingleMethod(typeDeclaration, "foo()");
-    assertEquals(1, actual);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // FieldAccess
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_FieldAccess() throws Exception {
-    TypeDeclaration typeDeclaration =
-        createTypeDeclaration_Test(
-            "class Test {",
-            "  public int use_fieldAccess() {",
-            "    return new Foo(12345).m_value;",
-            "  }",
-            "  public static class Foo {",
-            "    public final int m_value;",
-            "    public Foo(int value) {",
-            "      m_value = value;",
-            "    }",
-            "  }",
-            "}");
-    waitForAutoBuild();
-    Object actual = evaluateSingleMethod(typeDeclaration, "use_fieldAccess()");
-    assertEquals(12345, actual);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Assignment
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_assignment() throws Exception {
-    TypeDeclaration typeDeclaration =
-        createTypeDeclaration_Test(
-            "class Test {",
-            "  public void foo() {",
-            "    int a;",
-            "    int b;",
-            "    a = b = 5;",
-            "  }",
-            "}");
-    waitForAutoBuild();
-    //
-    MethodDeclaration methodDeclaration =
-        AstNodeUtils.getMethodBySignature(typeDeclaration, "foo()");
-    List<Statement> statements = DomGenerics.statements(methodDeclaration.getBody());
-    //
-    ClassLoader projectClassLoader =
-        CodeUtils.getProjectClassLoader(m_lastEditor.getModelUnit().getJavaProject());
-    ExecutionFlowDescription flowDescription = new ExecutionFlowDescription(methodDeclaration);
-    EvaluationContext context = new EvaluationContext(projectClassLoader, flowDescription);
-    //
-    ExpressionStatement statement = (ExpressionStatement) statements.get(2);
-    Object result = AstEvaluationEngine.evaluate(context, statement.getExpression());
-    assertEquals(5, result);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ConditionalExpression
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_ConditionalExpression_1() throws Exception {
-    assertEquals(1, evaluateExpression("true ? 1 : 2", "int"));
-  }
-
-  public void test_ConditionalExpression_2() throws Exception {
-    assertEquals(2, evaluateExpression("false? 1 : 2", "int"));
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Project disposing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void test_tearDown() throws Exception {
-    //System.exit(0);
-    do_projectDispose();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Life cycle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void setUp() throws Exception {
+		super.setUp();
+		if (m_testProject == null) {
+			do_projectCreate();
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Fail
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_fail() throws Exception {
+		TypeDeclaration typeDeclaration =
+				createTypeDeclaration_Test(
+						"public class Test {",
+						"  int foo(int value) {",
+						"    return value;",
+						"  }",
+						"}");
+		try {
+			evaluateSingleMethod(typeDeclaration, "foo(int)");
+			fail();
+		} catch (Throwable e_) {
+			DesignerException e = DesignerExceptionUtils.getDesignerException(e_);
+			assertEquals(ICoreExceptionConstants.EVAL_NO_METHOD_INVOCATION, e.getCode());
+		}
+	}
+
+	/**
+	 * Test that {@link EvaluationContext#evaluationFailed(Expression, Throwable)} is notified.
+	 */
+	public void test_EvaluationContext_evaluationFailed_noResult() throws Exception {
+		setFileContentSrc(
+				"test/MyObject.java",
+				getSource(
+						"package test;",
+						"public class MyObject {",
+						"  public static int getValue() {",
+						"    throw new IllegalStateException();",
+						"  }",
+						"}"));
+		waitForAutoBuild();
+		//
+		TypeDeclaration typeDeclaration =
+				createTypeDeclaration_Test(
+						"public class Test {",
+						"  public void root() {",
+						"    MyObject.getValue();",
+						"  }",
+						"}");
+		MethodDeclaration methodDeclaration = typeDeclaration.getMethods()[0];
+		Expression expression =
+				(Expression) m_lastEditor.getEnclosingNode("MyObject.getValue()").getParent();
+		// prepare context
+		EvaluationContext context;
+		final AtomicBoolean evaluationFailed = new AtomicBoolean();
+		{
+			ClassLoader projectClassLoader =
+					CodeUtils.getProjectClassLoader(m_lastEditor.getModelUnit().getJavaProject());
+			ExecutionFlowDescription flowDescription = new ExecutionFlowDescription(methodDeclaration);
+			context = new EvaluationContext(projectClassLoader, flowDescription) {
+				@Override
+				public Object evaluationFailed(Expression expression_, Throwable e) throws Exception {
+					evaluationFailed.set(true);
+					return AstEvaluationEngine.UNKNOWN;
+				}
+			};
+		}
+		// evaluate, we don't return value, so evaluation failed
+		try {
+			AstEvaluationEngine.evaluate(context, expression);
+			fail();
+		} catch (Throwable e) {
+		}
+		assertThat(evaluationFailed.get()).isTrue();
+	}
+
+	/**
+	 * Test that {@link EvaluationContext#evaluationFailed(Expression, Throwable)} is notified.
+	 */
+	public void test_EvaluationContext_evaluationFailed_returnResult() throws Exception {
+		setFileContentSrc(
+				"test/MyObject.java",
+				getSource(
+						"package test;",
+						"public class MyObject {",
+						"  public static int getValue() {",
+						"    throw new IllegalStateException();",
+						"  }",
+						"}"));
+		waitForAutoBuild();
+		//
+		TypeDeclaration typeDeclaration =
+				createTypeDeclaration_Test(
+						"public class Test {",
+						"  public void root() {",
+						"    MyObject.getValue();",
+						"  }",
+						"}");
+		MethodDeclaration methodDeclaration = typeDeclaration.getMethods()[0];
+		Expression expression =
+				(Expression) m_lastEditor.getEnclosingNode("MyObject.getValue()").getParent();
+		// prepare context
+		EvaluationContext context;
+		{
+			ClassLoader projectClassLoader =
+					CodeUtils.getProjectClassLoader(m_lastEditor.getModelUnit().getJavaProject());
+			ExecutionFlowDescription flowDescription = new ExecutionFlowDescription(methodDeclaration);
+			context = new EvaluationContext(projectClassLoader, flowDescription) {
+				@Override
+				public Object evaluationFailed(Expression expression_, Throwable e) throws Exception {
+					return 123;
+				}
+			};
+		}
+		// evaluate, special result returned
+		assertEquals(123, AstEvaluationEngine.evaluate(context, expression));
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Simple tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_null() throws Exception {
+		assertEquals(null, evaluateExpression("null", "java.lang.Object"));
+	}
+
+	public void test_parenthesis() throws Exception {
+		assertEquals(null, evaluateExpression("(null)", "java.lang.Object"));
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// SimpleName
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_SimpleName_notFound() throws Exception {
+		createTypeDeclaration(
+				"test",
+				"BaseClass.java",
+				getSourceDQ(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"package test;",
+						"public class BaseClass {",
+						"  protected int m_value;",
+						"}"));
+		TypeDeclaration typeDeclaration =
+				createTypeDeclaration(
+						"test",
+						"BaseSubClass.java",
+						getSourceDQ(
+								"package test;",
+								"public class BaseSubClass extends BaseClass {",
+								"  public int getValue() {",
+								"    return m_value;",
+								"  }",
+								"}"));
+		waitForAutoBuild();
+		try {
+			evaluateSingleMethod(typeDeclaration, "getValue()");
+			fail();
+		} catch (Throwable e_) {
+			DesignerException e = DesignerExceptionUtils.getDesignerException(e_);
+			assertEquals(ICoreExceptionConstants.EVAL_NO_SIMPLE_NAME_FOUND, e.getCode());
+		}
+	}
+
+	public void test_SimpleName_local() throws Exception {
+		TypeDeclaration typeDeclaration =
+				createTypeDeclaration(
+						"test",
+						"Test.java",
+						getSourceDQ(
+								"// filler filler filler filler filler",
+								"// filler filler filler filler filler",
+								"package test;",
+								"public class Test {",
+								"  public String use_simpleName_local() {",
+								"    String s = '12345';",
+								"    return s;",
+								"  }",
+								"}"));
+		Object actual = evaluateSingleMethod(typeDeclaration, "use_simpleName_local()");
+		assertEquals("12345", actual);
+	}
+
+	public void test_SimpleName_field() throws Exception {
+		TypeDeclaration typeDeclaration =
+				createTypeDeclaration(
+						"test",
+						"Test.java",
+						getSourceDQ(
+								"// filler filler filler filler filler",
+								"// filler filler filler filler filler",
+								"package test;",
+								"public class Test {",
+								"  private final String m_fieldString = '12345';",
+								"  public String use_simpleName_field() {",
+								"    return m_fieldString;",
+								"  }",
+								"}"));
+		Object actual = evaluateSingleMethod(typeDeclaration, "use_simpleName_field()");
+		assertEquals("12345", actual);
+	}
+
+	public void test_SimpleName_assignment() throws Exception {
+		TypeDeclaration typeDeclaration =
+				createTypeDeclaration(
+						"test",
+						"Test.java",
+						getSourceDQ(
+								"// filler filler filler filler filler",
+								"// filler filler filler filler filler",
+								"package test;",
+								"public class Test {",
+								"  public String use_simpleName_assignment() {",
+								"    String s = '23';",
+								"    s = '12345';",
+								"    return s;",
+								"  }",
+								"}"));
+		Object actual = evaluateSingleMethod(typeDeclaration, "use_simpleName_assignment()");
+		assertEquals("12345", actual);
+	}
+
+	public void test_SimpleName_recursiveAssignment() throws Exception {
+		TypeDeclaration typeDeclaration =
+				createTypeDeclaration_Test(new String[]{
+						"public class Test {",
+						"  public int root() {",
+						"    int value = 4;",
+						"    value = value + 1;",
+						"    return value;",
+						"  }",
+				"}"});
+		Object actual = evaluateSingleMethod(typeDeclaration, "root()");
+		assertEquals(5, actual);
+	}
+
+	public void test_SimpleName_inv_good() throws Exception {
+		TypeDeclaration typeDeclaration =
+				createTypeDeclaration_Test(new String[]{
+						"public class Test {",
+						"  public void root() {",
+						"    foo('12345');",
+						"  }",
+						"  public String foo(String s) {",
+						"    return s;",
+						"  }",
+				"}"});
+		Object actual = evaluateSingleMethod(typeDeclaration, "root()", "foo(java.lang.String)");
+		assertEquals("12345", actual);
+	}
+
+	public void test_SimpleName_inv_noInvocation() throws Exception {
+		TypeDeclaration typeDeclaration =
+				createTypeDeclaration_Test(
+						"public class Test {",
+						"  public int foo(int value) {",
+						"    return value;",
+						"  }",
+						"}");
+		try {
+			evaluateSingleMethod(typeDeclaration, "foo(int)");
+			fail();
+		} catch (Throwable e_) {
+			DesignerException e = DesignerExceptionUtils.getDesignerException(e_);
+			assertEquals(ICoreExceptionConstants.EVAL_NO_METHOD_INVOCATION, e.getCode());
+		}
+	}
+
+	/**
+	 * If there are two invocations of method, so two variants of value for parameter, choose first
+	 * one, don't just fail.
+	 */
+	public void test_SimpleName_inv_twoInvocation() throws Exception {
+		TypeDeclaration typeDeclaration =
+				createTypeDeclaration_Test(new String[]{
+						"public class Test {",
+						"  public void root() {",
+						"    foo('111');",
+						"    foo('222');",
+						"  }",
+						"  public String foo(String s) {",
+						"    return s;",
+						"  }",
+				"}"});
+		Object actual = evaluateSingleMethod(typeDeclaration, "root()", "foo(java.lang.String)");
+		assertEquals("111", actual);
+	}
+
+	public void test_SimpleName_inheritedConstant() throws Exception {
+		setFileContentSrc(
+				"test/SuperClass.java",
+				getSourceDQ(
+						"package test;",
+						"public class SuperClass {",
+						"  public static int FOO = 555;",
+						"}"));
+		waitForAutoBuild();
+		// parse
+		TypeDeclaration typeDeclaration =
+				createTypeDeclaration_Test(
+						"public class Test extends SuperClass {",
+						"  public int foo() {",
+						"    return FOO;",
+						"  }",
+						"}");
+		waitForAutoBuild();
+		// evaluate
+		assertEquals(555, evaluateSingleMethod(typeDeclaration, "foo()"));
+	}
+
+	public void test_SimpleName_localConstant() throws Exception {
+		waitForAutoBuild();
+		TypeDeclaration typeDeclaration =
+				createTypeDeclaration_Test(
+						"public class Test {",
+						"  public static int FOO = 222;",
+						"  public int foo() {",
+						"    return FOO;",
+						"  }",
+						"}");
+		// evaluate
+		assertEquals(222, evaluateSingleMethod(typeDeclaration, "foo()"));
+	}
+
+	public void test_SimpleName_fieldWithoutInitializer() throws Exception {
+		waitForAutoBuild();
+		TypeDeclaration typeDeclaration =
+				createTypeDeclaration_Test(
+						"public class Test {",
+						"  public Object field;",
+						"  public Object foo() {",
+						"    return field;",
+						"  }",
+						"}");
+		// evaluate
+		assertEquals(null, evaluateSingleMethod(typeDeclaration, "foo()"));
+	}
+
+	public void test_SimpleName_interfaceConstant() throws Exception {
+		setFileContentSrc(
+				"test/IConstants.java",
+				getSourceDQ("package test;", "public interface IConstants {", "  int FOO = 555;", "}"));
+		waitForAutoBuild();
+		// parse
+		TypeDeclaration typeDeclaration =
+				createTypeDeclaration_Test(
+						"public class Test implements IConstants {",
+						"  public int foo() {",
+						"    return FOO;",
+						"  }",
+						"}");
+		waitForAutoBuild();
+		// evaluate
+		assertEquals(555, evaluateSingleMethod(typeDeclaration, "foo()"));
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// QualifiedName
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for usual {@link QualifiedName}.
+	 */
+	public void test_QualifiedName_1() throws Exception {
+		assertEquals(
+				Collections.EMPTY_LIST,
+				evaluateExpression("java.util.Collections.EMPTY_LIST", "java.lang.Object"));
+	}
+
+	/**
+	 * Test for {@link QualifiedName} for field implemented in interface.
+	 */
+	public void test_QualifiedName_2() throws Exception {
+		Integer actualValue =
+				(Integer) evaluateExpression("javax.swing.JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS", "int");
+		assertEquals(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS, actualValue.intValue());
+	}
+
+	/**
+	 * Test for array.length
+	 */
+	public void test_QualifiedName_3() throws Exception {
+		TypeDeclaration typeDeclaration =
+				createTypeDeclaration_Test(
+						"class Test {",
+						"  public int foo() {",
+						"    int[] ints = new int[]{1,2,3};",
+						"    return ints.length;",
+						"  }",
+						"}");
+		waitForAutoBuild();
+		Object actual = evaluateSingleMethod(typeDeclaration, "foo()");
+		assertEquals(3, actual);
+	}
+
+	/**
+	 * Test for java.awt.Dimension.x
+	 */
+	public void test_QualifiedName_4() throws Exception {
+		TypeDeclaration typeDeclaration =
+				createTypeDeclaration_Test(
+						"import java.awt.Dimension;",
+						"class Test {",
+						"  public int foo() {",
+						"    Dimension dimension = new Dimension(1, 2);",
+						"    return dimension.width;",
+						"  }",
+						"}");
+		Object actual = evaluateSingleMethod(typeDeclaration, "foo()");
+		assertEquals(1, actual);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// FieldAccess
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_FieldAccess() throws Exception {
+		TypeDeclaration typeDeclaration =
+				createTypeDeclaration_Test(
+						"class Test {",
+						"  public int use_fieldAccess() {",
+						"    return new Foo(12345).m_value;",
+						"  }",
+						"  public static class Foo {",
+						"    public final int m_value;",
+						"    public Foo(int value) {",
+						"      m_value = value;",
+						"    }",
+						"  }",
+						"}");
+		waitForAutoBuild();
+		Object actual = evaluateSingleMethod(typeDeclaration, "use_fieldAccess()");
+		assertEquals(12345, actual);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Assignment
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_assignment() throws Exception {
+		TypeDeclaration typeDeclaration =
+				createTypeDeclaration_Test(
+						"class Test {",
+						"  public void foo() {",
+						"    int a;",
+						"    int b;",
+						"    a = b = 5;",
+						"  }",
+						"}");
+		waitForAutoBuild();
+		//
+		MethodDeclaration methodDeclaration =
+				AstNodeUtils.getMethodBySignature(typeDeclaration, "foo()");
+		List<Statement> statements = DomGenerics.statements(methodDeclaration.getBody());
+		//
+		ClassLoader projectClassLoader =
+				CodeUtils.getProjectClassLoader(m_lastEditor.getModelUnit().getJavaProject());
+		ExecutionFlowDescription flowDescription = new ExecutionFlowDescription(methodDeclaration);
+		EvaluationContext context = new EvaluationContext(projectClassLoader, flowDescription);
+		//
+		ExpressionStatement statement = (ExpressionStatement) statements.get(2);
+		Object result = AstEvaluationEngine.evaluate(context, statement.getExpression());
+		assertEquals(5, result);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ConditionalExpression
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_ConditionalExpression_1() throws Exception {
+		assertEquals(1, evaluateExpression("true ? 1 : 2", "int"));
+	}
+
+	public void test_ConditionalExpression_2() throws Exception {
+		assertEquals(2, evaluateExpression("false? 1 : 2", "int"));
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Project disposing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void test_tearDown() throws Exception {
+		//System.exit(0);
+		do_projectDispose();
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/eval/ExecutionFlowUtils2Test.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/eval/ExecutionFlowUtils2Test.java
index 2372db289..51530a4cb 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/eval/ExecutionFlowUtils2Test.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/eval/ExecutionFlowUtils2Test.java
@@ -29,774 +29,774 @@
  * @author scheglov_ke
  */
 public class ExecutionFlowUtils2Test extends AbstractEngineTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Life cycle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void setUp() throws Exception {
-    super.setUp();
-    if (m_testProject == null) {
-      do_projectCreate();
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // getValue()
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_getValue_valueInDeclaration() throws Exception {
-    String expressionSource = "a =";
-    String expected = "1";
-    check_getValue(new String[]{
-        "public class Test {",
-        "  public Test() {",
-        "    int a = 1;",
-        "    System.out.println(a);",
-        "  }",
-        "}"}, expressionSource, expected);
-  }
-
-  public void test_getValue_useDeclaredVariable() throws Exception {
-    String expressionSource = "a);";
-    String expected = "1";
-    check_getValue(new String[]{
-        "public class Test {",
-        "  public Test() {",
-        "    int a = 1;",
-        "    System.out.println(a);",
-        "  }",
-        "}"}, expressionSource, expected);
-  }
-
-  public void test_getValue_valueInAssignment() throws Exception {
-    String expressionSource = "b =";
-    String expected = "1";
-    check_getValue(new String[]{
-        "public class Test {",
-        "  public Test() {",
-        "    int a = 1;",
-        "    int b;",
-        "    b = a;",
-        "    System.out.println(b);",
-        "  }",
-        "}"}, expressionSource, expected);
-  }
-
-  /**
-   * We don't see declaration of field, so we can not find it in any frame. However this should not
-   * produce {@link NullPointerException}.
-   */
-  public void test_getValue_assignInheritedField() throws Exception {
-    setFileContentSrc(
-        "test/Base.java",
-        getSource(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "package test;",
-            "public class Base {",
-            "  protected int m_field;",
-            "}"));
-    waitForAutoBuild();
-    //
-    String expressionSource = "b =";
-    String expected = "2";
-    check_getValue(new String[]{
-        "package test;",
-        "public class Test extends Base {",
-        "  public Test() {",
-        "    m_field = 1;",
-        "    int b = 2;",
-        "    System.out.println(b);",
-        "  }",
-        "}"}, expressionSource, expected);
-  }
-
-  public void test_getValue_useAssignedValue() throws Exception {
-    String expressionSource = "b);";
-    String expected = "1";
-    check_getValue(new String[]{
-        "public class Test {",
-        "  public Test() {",
-        "    int a = 1;",
-        "    int b;",
-        "    b = a;",
-        "    System.out.println(b);",
-        "  }",
-        "}"}, expressionSource, expected);
-  }
-
-  public void test_getValue_useAssignedValue_separateDeclaration() throws Exception {
-    String expressionSource = "a);";
-    String expected = "1";
-    check_getValue(new String[]{
-        "public class Test {",
-        "  public Test() {",
-        "    int a;",
-        "    a = 1;",
-        "    System.out.println(a);",
-        "  }",
-        "}"}, expressionSource, expected);
-  }
-
-  public void test_getValue_useInInnerBlock() throws Exception {
-    String expressionSource = "a);";
-    String expected = "1";
-    check_getValue(new String[]{
-        "public class Test {",
-        "  public Test() {",
-        "    int a = 1;",
-        "    {",
-        "      System.out.println(a);",
-        "    }",
-        "  }",
-        "}"}, expressionSource, expected);
-  }
-
-  public void test_getValue_assignInInnerBlock() throws Exception {
-    String expressionSource = "a);";
-    String expected = "2";
-    check_getValue(new String[]{
-        "public class Test {",
-        "  public Test() {",
-        "    int a = 1;",
-        "    {",
-        "      a = 2;",
-        "    }",
-        "    System.out.println(a);",
-        "  }",
-        "}"}, expressionSource, expected);
-  }
-
-  public void test_getValue_followMethodInvocation() throws Exception {
-    String expressionSource = "p);";
-    String expected = "1";
-    check_getValue(new String[]{
-        "public class Test {",
-        "  public Test() {",
-        "    int a = 1;",
-        "    foo(a);",
-        "  }",
-        "  private void foo(int p) {",
-        "    System.out.println(p);",
-        "  }",
-        "}"}, expressionSource, expected);
-  }
-
-  public void test_getValue_followConstructorInvocation() throws Exception {
-    String expressionSource = "p);";
-    String expected = "1";
-    check_getValue(new String[]{
-        "public class Test {",
-        "  public Test() {",
-        "    this(1);",
-        "  }",
-        "  public Test(int p) {",
-        "    System.out.println(p);",
-        "  }",
-        "}"}, expressionSource, expected);
-  }
-
-  /**
-   * Right now we handle "varArgs" parameter as first argument.
-   */
-  public void test_getValue_followMethodInvocation_varArgs_hasValues() throws Exception {
-    String expressionSource = "p);";
-    String expected = "1";
-    check_getValue(new String[]{
-        "public class Test {",
-        "  public Test() {",
-        "    foo(1, 2, 3);",
-        "  }",
-        "  private void foo(int... p) {",
-        "    System.out.println(p);",
-        "  }",
-        "}"}, expressionSource, expected);
-  }
-
-  /**
-   * We should correctly handle situation when "varArgs" is empty.
-   */
-  public void test_getValue_followMethodInvocation_varArgs_noValues() throws Exception {
-    String expressionSource = "p);";
-    String expected = null;
-    check_getValue(new String[]{
-        "public class Test {",
-        "  public Test() {",
-        "    foo();",
-        "  }",
-        "  private void foo(int... p) {",
-        "    System.out.println(p);",
-        "  }",
-        "}"}, expressionSource, expected);
-  }
-
-  public void test_getValue_reTrack_afterFlowChange() throws Exception {
-    String expressionSource = "p);";
-    String expected = "1";
-    // prepare flow
-    ExecutionFlowDescription executionFlow =
-        prepare_flowDescription(new String[]{
-            "public class Test {",
-            "  public Test() {",
-            "  }",
-            "  private void foo() {",
-            "    bar(1);",
-            "  }",
-            "  private void bar(int p) {",
-            "    System.out.println(p);",
-            "  }",
-            "}"});
-    // initially no value
-    {
-      ExpressionValue value = getValue(executionFlow, expressionSource);
-      assertNull(value);
-    }
-    // include foo(), so OK
-    {
-      MethodDeclaration fooMethod = getNode("foo", MethodDeclaration.class);
-      executionFlow.addStartMethod(fooMethod);
-      check_getValue(executionFlow, expressionSource, expected);
-    }
-  }
-
-  public void test_getValue_useDeclaredField() throws Exception {
-    String expressionSource = "a);";
-    String expected = "1";
-    check_getValue(new String[]{
-        "public class Test {",
-        "  int a = 1;",
-        "  public Test() {",
-        "    System.out.println(a);",
-        "  }",
-        "}"}, expressionSource, expected);
-  }
-
-  public void test_getValue_fieldAssign() throws Exception {
-    String expressionSource = "a);";
-    String expected = "1";
-    check_getValue(new String[]{
-        "public class Test {",
-        "  int a;",
-        "  public Test() {",
-        "    a = 1;",
-        "    System.out.println(a);",
-        "  }",
-        "}"}, expressionSource, expected);
-  }
-
-  /**
-   * Assign using "this", access without it.
-   */
-  public void test_getValue_fieldAssign_withThisQualifier_1() throws Exception {
-    String expressionSource = "a);";
-    String expected = "1";
-    check_getValue(new String[]{
-        "public class Test {",
-        "  int a;",
-        "  public Test() {",
-        "    this.a = 1;",
-        "    System.out.println(a);",
-        "  }",
-        "}"}, expressionSource, expected);
-  }
-
-  /**
-   * Assign using "this", access using "this".
-   */
-  public void test_getValue_fieldAssign_withThisQualifier_2() throws Exception {
-    String expressionSource = ".a);";
-    String expected = "1";
-    check_getValue(new String[]{
-        "public class Test {",
-        "  int a;",
-        "  public Test() {",
-        "    this.a = 1;",
-        "    System.out.println(this.a);",
-        "  }",
-        "}"}, expressionSource, expected);
-  }
-
-  /**
-   * Assign using "this", access using "this". Application pattern.
-   */
-  public void test_getValue_fieldAssign_withThisQualifier_applicationPattern() throws Exception {
-    String expressionSource = "a);";
-    String expected = "1";
-    check_getValue(new String[]{
-        "public class Test {",
-        "  private int a;",
-        "  public static void main(String[] args) {",
-        "    new Test();",
-        "  }",
-        "  public Test() {",
-        "    this.a = 1;",
-        "    System.out.println(this.a);",
-        "  }",
-        "}"}, expressionSource, expected);
-  }
-
-  /**
-   * We should understand pattern <code>this.value = value</code>.
-   */
-  public void test_getValue_fieldAssign_withThisQualifier_4() throws Exception {
-    String expressionSource = "a);";
-    String expected = "1";
-    check_getValue(new String[]{
-        "public class Test {",
-        "  int a;",
-        "  public Test() {",
-        "    setValue(1);",
-        "    System.out.println(a);",
-        "  }",
-        "  private void setValue(int a) {",
-        "    this.a = a;",
-        "  }",
-        "}"}, expressionSource, expected);
-  }
-
-  public void test_getValue_fieldWithoutInitilizer() throws Exception {
-    String expressionSource = "a);";
-    String expected = "{p}{p}int a;";
-    check_getValue(new String[]{
-        "public class Test {",
-        "  int a;",
-        "  public Test() {",
-        "    System.out.println(a);",
-        "  }",
-        "}"}, expressionSource, expected);
-  }
-
-  public void test_getValue_applicationPattern_withConstructor() throws Exception {
-    String expressionSource = "a.";
-    String expected = "Integer.valueOf(123)";
-    check_getValue(new String[]{
-        "public class Test {",
-        "  protected Object a;",
-        "  public static void main(String[] args) {",
-        "    Test window = new Test();",
-        "    window.open();",
-        "  }",
-        "  public Test() {",
-        "  }",
-        "  public void open() {",
-        "    a = Integer.valueOf(123);",
-        "    a.hashCode();",
-        "  }",
-        "}"}, expressionSource, expected);
-  }
-
-  /**
-   * There was problem that at second visit of type (to visit "other methods", not visited in main
-   * execution flow, to find references on fields) we ignore assignments, but this means that for
-   * separate declaration of "var" we remember "var" as its own value, instead of using assigned
-   * value.
-   * <p>
-   * In this case problem causes infinite recursive evaluation and "soft" failure.
-   */
-  public void test_getValue_applicationPattern_separateDeclaration() throws Exception {
-    String expressionSource = "a);";
-    String expected = "1";
-    check_getValue(new String[]{
-        "public class Test {",
-        "  public static void main(String[] args) {",
-        "    Test window = new Test();",
-        "    window.open();",
-        "  }",
-        "  public void open() {",
-        "    int a;",
-        "    a = 1;",
-        "    System.out.println(a);",
-        "  }",
-        "}"}, expressionSource, expected);
-  }
-
-  public void test_getValue_fieldAssign_visibleInOtherMethod() throws Exception {
-    String expressionSource = "a);";
-    String expected = "1";
-    check_getValue(new String[]{
-        "public class Test {",
-        "  int a;",
-        "  public Test() {",
-        "    a = 1;",
-        "  }",
-        "  public void foo() {",
-        "    System.out.println(a);",
-        "  }",
-        "}"}, expressionSource, expected);
-  }
-
-  public void test_getValue_fieldAssign_noOverrideInOtherMethod_1() throws Exception {
-    String expressionSource = "a);";
-    String expected = "1";
-    check_getValue(new String[]{
-        "public class Test {",
-        "  int a;",
-        "  public Test() {",
-        "    a = 1;",
-        "  }",
-        "  public void foo() {",
-        "    this.a = 2;",
-        "  }",
-        "  public void bar() {",
-        "    System.out.println(a);",
-        "  }",
-        "}"}, expressionSource, expected);
-  }
-
-  public void test_getValue_fieldAssign_noOverrideInOtherMethod_2() throws Exception {
-    String expressionSource = "a);";
-    String expected = "1";
-    check_getValue(new String[]{
-        "public class Test {",
-        "  int a;",
-        "  public Test() {",
-        "    a = 1;",
-        "  }",
-        "  public void foo() {",
-        "    a = 2;",
-        "  }",
-        "  public void bar() {",
-        "    System.out.println(a);",
-        "  }",
-        "}"}, expressionSource, expected);
-  }
-
-  public void test_getValue_noMethodInvocation_parameterUse() throws Exception {
-    String expressionSource = "a);";
-    String expected = "{p}int a";
-    check_getValue(new String[]{
-        "public class Test {",
-        "  public Test(int a) {",
-        "    System.out.println(a);",
-        "  }",
-        "}"}, expressionSource, expected);
-  }
-
-  public void test_getValue_usePermanentValue_local() throws Exception {
-    ExecutionFlowDescription executionFlow;
-    {
-      TypeDeclaration typeDeclaration =
-          createTypeDeclaration(
-              "test",
-              "Test.java",
-              getSource(
-                  "import javax.swing.*;",
-                  "public class Test {",
-                  "  public Test() {",
-                  "    JButton a = new JButton();",
-                  "    System.out.println(a);",
-                  "  }",
-                  "}"));
-      MethodDeclaration entryPoint = typeDeclaration.getMethods()[0];
-      executionFlow = new ExecutionFlowDescription(entryPoint);
-    }
-    // set permanent value for "new JButton()"
-    ExpressionValue permanentValue;
-    {
-      ClassInstanceCreation creation = getNode("new JButton()");
-      permanentValue = ExecutionFlowUtils2.ensurePermanentValue(creation);
-      assertSame(creation, permanentValue.getExpression());
-    }
-    // ask getValue()
-    Expression target = getNode("a);");
-    ExpressionValue value = ExecutionFlowUtils2.getValue(executionFlow, target);
-    assertSame(permanentValue, value);
-  }
-
-  public void test_getValue_usePermanentValue_parameter() throws Exception {
-    ExecutionFlowDescription executionFlow;
-    {
-      TypeDeclaration typeDeclaration =
-          createTypeDeclaration(
-              "test",
-              "Test.java",
-              getSource(
-                  "import javax.swing.*;",
-                  "public class Test {",
-                  "  public Test(JButton a) {",
-                  "    System.out.println(a);",
-                  "  }",
-                  "}"));
-      MethodDeclaration entryPoint = typeDeclaration.getMethods()[0];
-      executionFlow = new ExecutionFlowDescription(entryPoint);
-    }
-    // set permanent value for "new JButton()"
-    ExpressionValue permanentValue;
-    {
-      SimpleName parameterName = getNode("a) {");
-      permanentValue = ExecutionFlowUtils2.ensurePermanentValue(parameterName);
-      assertSame(parameterName, permanentValue.getExpression());
-    }
-    // ask getValue()
-    Expression target = getNode("a);");
-    ExpressionValue value = ExecutionFlowUtils2.getValue(executionFlow, target);
-    assertSame(permanentValue, value);
-  }
-
-  public void test_getValue_useDeclaredVariable_inParenthesis() throws Exception {
-    String expressionSource = "(a)";
-    String expected = "1";
-    check_getValue(new String[]{
-        "public class Test {",
-        "  public Test() {",
-        "    int a = 1;",
-        "    System.out.println((a));",
-        "  }",
-        "}"}, expressionSource, expected);
-  }
-
-  public void test_getValue_useDeclaredVariable_casted() throws Exception {
-    String expressionSource = "(int) a";
-    String expected = "1";
-    check_getValue(new String[]{
-        "public class Test {",
-        "  public Test() {",
-        "    int a = 1;",
-        "    System.out.println((int) a);",
-        "  }",
-        "}"}, expressionSource, expected);
-  }
-
-  public void test_getValue_lazy() throws Exception {
-    String expressionSource = "{p}getButton());";
-    String expected = "new JButton()";
-    check_getValue(new String[]{
-        "import javax.swing.*;",
-        "public class Test extends JPanel {",
-        "  private JButton button;",
-        "  public Test() {",
-        "    add(getButton());",
-        "  }",
-        "  private JButton getButton() {",
-        "    if (button == null) {",
-        "      button = new JButton();",
-        "    }",
-        "    return button;",
-        "  }",
-        "}"}, expressionSource, expected);
-  }
-
-  public void test_getValue_returnFromMethod() throws Exception {
-    String expressionSource = "{p}getButton());";
-    String expected = "new JButton()";
-    check_getValue(new String[]{
-        "import javax.swing.*;",
-        "public class Test extends JPanel {",
-        "  public Test() {",
-        "    add(getButton());",
-        "  }",
-        "  private JButton getButton() {",
-        "    return new JButton();",
-        "  }",
-        "}"}, expressionSource, expected);
-  }
-
-  public void test_getValue_returnFromMethod_ignoreStatic() throws Exception {
-    String expressionSource = "{p}createButton());";
-    String expected = null;
-    check_getValue(new String[]{
-        "import javax.swing.*;",
-        "public class Test extends JPanel {",
-        "  public Test() {",
-        "    add(createButton());",
-        "  }",
-        "  private static JButton createButton() {",
-        "    return new JButton();",
-        "  }",
-        "}"}, expressionSource, expected);
-  }
-
-  /**
-   * We need special support for {@link PostfixExpression}, we need to know value before it,
-   * implemented as {@link ExecutionFlowUtils2#getValuePrev(ExecutionFlowDescription, Expression)}.
-   */
-  public void test_PostfixExpression_getValue() throws Exception {
-    ExecutionFlowDescription executionFlow;
-    {
-      TypeDeclaration typeDeclaration =
-          createTypeDeclaration(
-              "test",
-              "Test.java",
-              getSource(
-                  "import javax.swing.*;",
-                  "public class Test {",
-                  "  public Test() {",
-                  "    int a = 1;",
-                  "    a++;",
-                  "  }",
-                  "}"));
-      MethodDeclaration entryPoint = typeDeclaration.getMethods()[0];
-      executionFlow = new ExecutionFlowDescription(entryPoint);
-    }
-    // prepare nodes
-    Expression operandInIncrement = getNode("a++");
-    PostfixExpression increment = (PostfixExpression) operandInIncrement.getParent();
-    // getValue()
-    {
-      ExpressionValue value = ExecutionFlowUtils2.getValue(executionFlow, operandInIncrement);
-      assertNotNull(value);
-      assertSame(increment, value.getExpression());
-    }
-    // getValuePrev()
-    {
-      ExpressionValue value = ExecutionFlowUtils2.getValuePrev(executionFlow, operandInIncrement);
-      assertNotNull(value);
-      assertEquals("1", m_lastEditor.getSource(value.getExpression()));
-    }
-  }
-
-  /**
-   * When we visit {@link MethodDeclaration} with {@link ReturnStatement} without expression, this
-   * caused {@link NullPointerException}.
-   */
-  public void test_getValue_whenReturn_withoutExpression() throws Exception {
-    String expressionSource = "a =";
-    String expected = "1";
-    check_getValue(new String[]{
-        "public class Test {",
-        "  public Test() {",
-        "    int a = 1;",
-        "    System.out.println(a);",
-        "    foo();",
-        "  }",
-        "  private void foo() {",
-        "    return;",
-        "  }",
-        "}"}, expressionSource, expected);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link ExecutionFlowUtils2#getPermanentValue0(Expression)} and
-   * {@link ExecutionFlowUtils2#clearPermanentValue(Expression)}.
-   */
-  public void test_getPermanentValue0_clearPermanentValue() throws Exception {
-    createTypeDeclaration(
-        "test",
-        "Test.java",
-        getSource(
-            "public class Test {",
-            "  public Test() {",
-            "    int a = 1;",
-            "    System.out.println(a);",
-            "  }",
-            "}"));
-    Expression target = getTarget("a)");
-    // ensure value
-    ExpressionValue permanentValue = ExecutionFlowUtils2.ensurePermanentValue(target);
-    assertSame(permanentValue, ExecutionFlowUtils2.getPermanentValue0(target));
-    // clear value
-    ExecutionFlowUtils2.clearPermanentValue(target);
-    assertSame(null, ExecutionFlowUtils2.getPermanentValue0(target));
-  }
-
-  /**
-   * Test for {@link ExecutionFlowUtils2#getValue0(Expression)}.
-   */
-  public void test_getValue0() throws Exception {
-    createTypeDeclaration(
-        "test",
-        "Test.java",
-        getSource(
-            "public class Test {",
-            "  public Test() {",
-            "    int a = 1;",
-            "    System.out.println(a);",
-            "  }",
-            "}"));
-    Expression target = getTarget("a)");
-    // set value
-    ExpressionValue value = new ExpressionValue(null);
-    ExpressionValue permanentValue = new ExpressionValue(null);
-    // initially no value
-    assertSame(null, ExecutionFlowUtils2.getValue0(target));
-    // set "permanent"
-    ExecutionFlowUtils2.setPermanentValue0(target, permanentValue);
-    assertSame(permanentValue, ExecutionFlowUtils2.getValue0(target));
-    // if has "value", use it, not "permanent"
-    ExecutionFlowUtils2.setValue0(target, value);
-    assertSame(value, ExecutionFlowUtils2.getValue0(target));
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void check_getValue(String[] lines, String expressionSource, String expected)
-      throws Exception {
-    ExecutionFlowDescription executionFlow = prepare_flowDescription(lines);
-    check_getValue(executionFlow, expressionSource, expected);
-  }
-
-  private ExecutionFlowDescription prepare_flowDescription(String[] lines) throws Exception {
-    ExecutionFlowDescription executionFlow;
-    {
-      TypeDeclaration typeDeclaration =
-          createTypeDeclaration("test", "Test.java", getSource(lines));
-      MethodDeclaration entryPoint = typeDeclaration.getMethods()[0];
-      executionFlow = new ExecutionFlowDescription(entryPoint);
-    }
-    return executionFlow;
-  }
-
-  private void check_getValue(ExecutionFlowDescription executionFlow,
-      String expressionSource,
-      String expected) {
-    ExpressionValue value = getValue(executionFlow, expressionSource);
-    // validate
-    if (expected != null) {
-      assertNotNull(value);
-      ASTNode actual = value.getExpression();
-      //
-      while (expected.startsWith("{p}")) {
-        assertNotNull(actual);
-        expected = expected.substring("{p}".length());
-        actual = actual.getParent();
-      }
-      //
-      assertNotNull(actual);
-      assertEquals(expected, actual.toString().trim());
-    } else {
-      assertNull(value);
-    }
-  }
-
-  private ExpressionValue getValue(ExecutionFlowDescription executionFlow, String expressionSource) {
-    Expression target = getTarget(expressionSource);
-    return ExecutionFlowUtils2.getValue(executionFlow, target);
-  }
-
-  private Expression getTarget(String expressionSource) {
-    // prepare level
-    int parentLevel = 0;
-    while (expressionSource.startsWith("{p}")) {
-      parentLevel++;
-      expressionSource = expressionSource.substring("{p}".length());
-    }
-    // get target using source
-    Expression target = getNode(expressionSource);
-    // to to parents
-    for (int i = 0; i < parentLevel; i++) {
-      target = (Expression) target.getParent();
-    }
-    // done
-    return target;
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Life cycle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void setUp() throws Exception {
+		super.setUp();
+		if (m_testProject == null) {
+			do_projectCreate();
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// getValue()
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_getValue_valueInDeclaration() throws Exception {
+		String expressionSource = "a =";
+		String expected = "1";
+		check_getValue(new String[]{
+				"public class Test {",
+				"  public Test() {",
+				"    int a = 1;",
+				"    System.out.println(a);",
+				"  }",
+		"}"}, expressionSource, expected);
+	}
+
+	public void test_getValue_useDeclaredVariable() throws Exception {
+		String expressionSource = "a);";
+		String expected = "1";
+		check_getValue(new String[]{
+				"public class Test {",
+				"  public Test() {",
+				"    int a = 1;",
+				"    System.out.println(a);",
+				"  }",
+		"}"}, expressionSource, expected);
+	}
+
+	public void test_getValue_valueInAssignment() throws Exception {
+		String expressionSource = "b =";
+		String expected = "1";
+		check_getValue(new String[]{
+				"public class Test {",
+				"  public Test() {",
+				"    int a = 1;",
+				"    int b;",
+				"    b = a;",
+				"    System.out.println(b);",
+				"  }",
+		"}"}, expressionSource, expected);
+	}
+
+	/**
+	 * We don't see declaration of field, so we can not find it in any frame. However this should not
+	 * produce {@link NullPointerException}.
+	 */
+	public void test_getValue_assignInheritedField() throws Exception {
+		setFileContentSrc(
+				"test/Base.java",
+				getSource(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"package test;",
+						"public class Base {",
+						"  protected int m_field;",
+						"}"));
+		waitForAutoBuild();
+		//
+		String expressionSource = "b =";
+		String expected = "2";
+		check_getValue(new String[]{
+				"package test;",
+				"public class Test extends Base {",
+				"  public Test() {",
+				"    m_field = 1;",
+				"    int b = 2;",
+				"    System.out.println(b);",
+				"  }",
+		"}"}, expressionSource, expected);
+	}
+
+	public void test_getValue_useAssignedValue() throws Exception {
+		String expressionSource = "b);";
+		String expected = "1";
+		check_getValue(new String[]{
+				"public class Test {",
+				"  public Test() {",
+				"    int a = 1;",
+				"    int b;",
+				"    b = a;",
+				"    System.out.println(b);",
+				"  }",
+		"}"}, expressionSource, expected);
+	}
+
+	public void test_getValue_useAssignedValue_separateDeclaration() throws Exception {
+		String expressionSource = "a);";
+		String expected = "1";
+		check_getValue(new String[]{
+				"public class Test {",
+				"  public Test() {",
+				"    int a;",
+				"    a = 1;",
+				"    System.out.println(a);",
+				"  }",
+		"}"}, expressionSource, expected);
+	}
+
+	public void test_getValue_useInInnerBlock() throws Exception {
+		String expressionSource = "a);";
+		String expected = "1";
+		check_getValue(new String[]{
+				"public class Test {",
+				"  public Test() {",
+				"    int a = 1;",
+				"    {",
+				"      System.out.println(a);",
+				"    }",
+				"  }",
+		"}"}, expressionSource, expected);
+	}
+
+	public void test_getValue_assignInInnerBlock() throws Exception {
+		String expressionSource = "a);";
+		String expected = "2";
+		check_getValue(new String[]{
+				"public class Test {",
+				"  public Test() {",
+				"    int a = 1;",
+				"    {",
+				"      a = 2;",
+				"    }",
+				"    System.out.println(a);",
+				"  }",
+		"}"}, expressionSource, expected);
+	}
+
+	public void test_getValue_followMethodInvocation() throws Exception {
+		String expressionSource = "p);";
+		String expected = "1";
+		check_getValue(new String[]{
+				"public class Test {",
+				"  public Test() {",
+				"    int a = 1;",
+				"    foo(a);",
+				"  }",
+				"  private void foo(int p) {",
+				"    System.out.println(p);",
+				"  }",
+		"}"}, expressionSource, expected);
+	}
+
+	public void test_getValue_followConstructorInvocation() throws Exception {
+		String expressionSource = "p);";
+		String expected = "1";
+		check_getValue(new String[]{
+				"public class Test {",
+				"  public Test() {",
+				"    this(1);",
+				"  }",
+				"  public Test(int p) {",
+				"    System.out.println(p);",
+				"  }",
+		"}"}, expressionSource, expected);
+	}
+
+	/**
+	 * Right now we handle "varArgs" parameter as first argument.
+	 */
+	public void test_getValue_followMethodInvocation_varArgs_hasValues() throws Exception {
+		String expressionSource = "p);";
+		String expected = "1";
+		check_getValue(new String[]{
+				"public class Test {",
+				"  public Test() {",
+				"    foo(1, 2, 3);",
+				"  }",
+				"  private void foo(int... p) {",
+				"    System.out.println(p);",
+				"  }",
+		"}"}, expressionSource, expected);
+	}
+
+	/**
+	 * We should correctly handle situation when "varArgs" is empty.
+	 */
+	public void test_getValue_followMethodInvocation_varArgs_noValues() throws Exception {
+		String expressionSource = "p);";
+		String expected = null;
+		check_getValue(new String[]{
+				"public class Test {",
+				"  public Test() {",
+				"    foo();",
+				"  }",
+				"  private void foo(int... p) {",
+				"    System.out.println(p);",
+				"  }",
+		"}"}, expressionSource, expected);
+	}
+
+	public void test_getValue_reTrack_afterFlowChange() throws Exception {
+		String expressionSource = "p);";
+		String expected = "1";
+		// prepare flow
+		ExecutionFlowDescription executionFlow =
+				prepare_flowDescription(new String[]{
+						"public class Test {",
+						"  public Test() {",
+						"  }",
+						"  private void foo() {",
+						"    bar(1);",
+						"  }",
+						"  private void bar(int p) {",
+						"    System.out.println(p);",
+						"  }",
+				"}"});
+		// initially no value
+		{
+			ExpressionValue value = getValue(executionFlow, expressionSource);
+			assertNull(value);
+		}
+		// include foo(), so OK
+		{
+			MethodDeclaration fooMethod = getNode("foo", MethodDeclaration.class);
+			executionFlow.addStartMethod(fooMethod);
+			check_getValue(executionFlow, expressionSource, expected);
+		}
+	}
+
+	public void test_getValue_useDeclaredField() throws Exception {
+		String expressionSource = "a);";
+		String expected = "1";
+		check_getValue(new String[]{
+				"public class Test {",
+				"  int a = 1;",
+				"  public Test() {",
+				"    System.out.println(a);",
+				"  }",
+		"}"}, expressionSource, expected);
+	}
+
+	public void test_getValue_fieldAssign() throws Exception {
+		String expressionSource = "a);";
+		String expected = "1";
+		check_getValue(new String[]{
+				"public class Test {",
+				"  int a;",
+				"  public Test() {",
+				"    a = 1;",
+				"    System.out.println(a);",
+				"  }",
+		"}"}, expressionSource, expected);
+	}
+
+	/**
+	 * Assign using "this", access without it.
+	 */
+	public void test_getValue_fieldAssign_withThisQualifier_1() throws Exception {
+		String expressionSource = "a);";
+		String expected = "1";
+		check_getValue(new String[]{
+				"public class Test {",
+				"  int a;",
+				"  public Test() {",
+				"    this.a = 1;",
+				"    System.out.println(a);",
+				"  }",
+		"}"}, expressionSource, expected);
+	}
+
+	/**
+	 * Assign using "this", access using "this".
+	 */
+	public void test_getValue_fieldAssign_withThisQualifier_2() throws Exception {
+		String expressionSource = ".a);";
+		String expected = "1";
+		check_getValue(new String[]{
+				"public class Test {",
+				"  int a;",
+				"  public Test() {",
+				"    this.a = 1;",
+				"    System.out.println(this.a);",
+				"  }",
+		"}"}, expressionSource, expected);
+	}
+
+	/**
+	 * Assign using "this", access using "this". Application pattern.
+	 */
+	public void test_getValue_fieldAssign_withThisQualifier_applicationPattern() throws Exception {
+		String expressionSource = "a);";
+		String expected = "1";
+		check_getValue(new String[]{
+				"public class Test {",
+				"  private int a;",
+				"  public static void main(String[] args) {",
+				"    new Test();",
+				"  }",
+				"  public Test() {",
+				"    this.a = 1;",
+				"    System.out.println(this.a);",
+				"  }",
+		"}"}, expressionSource, expected);
+	}
+
+	/**
+	 * We should understand pattern <code>this.value = value</code>.
+	 */
+	public void test_getValue_fieldAssign_withThisQualifier_4() throws Exception {
+		String expressionSource = "a);";
+		String expected = "1";
+		check_getValue(new String[]{
+				"public class Test {",
+				"  int a;",
+				"  public Test() {",
+				"    setValue(1);",
+				"    System.out.println(a);",
+				"  }",
+				"  private void setValue(int a) {",
+				"    this.a = a;",
+				"  }",
+		"}"}, expressionSource, expected);
+	}
+
+	public void test_getValue_fieldWithoutInitilizer() throws Exception {
+		String expressionSource = "a);";
+		String expected = "{p}{p}int a;";
+		check_getValue(new String[]{
+				"public class Test {",
+				"  int a;",
+				"  public Test() {",
+				"    System.out.println(a);",
+				"  }",
+		"}"}, expressionSource, expected);
+	}
+
+	public void test_getValue_applicationPattern_withConstructor() throws Exception {
+		String expressionSource = "a.";
+		String expected = "Integer.valueOf(123)";
+		check_getValue(new String[]{
+				"public class Test {",
+				"  protected Object a;",
+				"  public static void main(String[] args) {",
+				"    Test window = new Test();",
+				"    window.open();",
+				"  }",
+				"  public Test() {",
+				"  }",
+				"  public void open() {",
+				"    a = Integer.valueOf(123);",
+				"    a.hashCode();",
+				"  }",
+		"}"}, expressionSource, expected);
+	}
+
+	/**
+	 * There was problem that at second visit of type (to visit "other methods", not visited in main
+	 * execution flow, to find references on fields) we ignore assignments, but this means that for
+	 * separate declaration of "var" we remember "var" as its own value, instead of using assigned
+	 * value.
+	 * <p>
+	 * In this case problem causes infinite recursive evaluation and "soft" failure.
+	 */
+	public void test_getValue_applicationPattern_separateDeclaration() throws Exception {
+		String expressionSource = "a);";
+		String expected = "1";
+		check_getValue(new String[]{
+				"public class Test {",
+				"  public static void main(String[] args) {",
+				"    Test window = new Test();",
+				"    window.open();",
+				"  }",
+				"  public void open() {",
+				"    int a;",
+				"    a = 1;",
+				"    System.out.println(a);",
+				"  }",
+		"}"}, expressionSource, expected);
+	}
+
+	public void test_getValue_fieldAssign_visibleInOtherMethod() throws Exception {
+		String expressionSource = "a);";
+		String expected = "1";
+		check_getValue(new String[]{
+				"public class Test {",
+				"  int a;",
+				"  public Test() {",
+				"    a = 1;",
+				"  }",
+				"  public void foo() {",
+				"    System.out.println(a);",
+				"  }",
+		"}"}, expressionSource, expected);
+	}
+
+	public void test_getValue_fieldAssign_noOverrideInOtherMethod_1() throws Exception {
+		String expressionSource = "a);";
+		String expected = "1";
+		check_getValue(new String[]{
+				"public class Test {",
+				"  int a;",
+				"  public Test() {",
+				"    a = 1;",
+				"  }",
+				"  public void foo() {",
+				"    this.a = 2;",
+				"  }",
+				"  public void bar() {",
+				"    System.out.println(a);",
+				"  }",
+		"}"}, expressionSource, expected);
+	}
+
+	public void test_getValue_fieldAssign_noOverrideInOtherMethod_2() throws Exception {
+		String expressionSource = "a);";
+		String expected = "1";
+		check_getValue(new String[]{
+				"public class Test {",
+				"  int a;",
+				"  public Test() {",
+				"    a = 1;",
+				"  }",
+				"  public void foo() {",
+				"    a = 2;",
+				"  }",
+				"  public void bar() {",
+				"    System.out.println(a);",
+				"  }",
+		"}"}, expressionSource, expected);
+	}
+
+	public void test_getValue_noMethodInvocation_parameterUse() throws Exception {
+		String expressionSource = "a);";
+		String expected = "{p}int a";
+		check_getValue(new String[]{
+				"public class Test {",
+				"  public Test(int a) {",
+				"    System.out.println(a);",
+				"  }",
+		"}"}, expressionSource, expected);
+	}
+
+	public void test_getValue_usePermanentValue_local() throws Exception {
+		ExecutionFlowDescription executionFlow;
+		{
+			TypeDeclaration typeDeclaration =
+					createTypeDeclaration(
+							"test",
+							"Test.java",
+							getSource(
+									"import javax.swing.*;",
+									"public class Test {",
+									"  public Test() {",
+									"    JButton a = new JButton();",
+									"    System.out.println(a);",
+									"  }",
+									"}"));
+			MethodDeclaration entryPoint = typeDeclaration.getMethods()[0];
+			executionFlow = new ExecutionFlowDescription(entryPoint);
+		}
+		// set permanent value for "new JButton()"
+		ExpressionValue permanentValue;
+		{
+			ClassInstanceCreation creation = getNode("new JButton()");
+			permanentValue = ExecutionFlowUtils2.ensurePermanentValue(creation);
+			assertSame(creation, permanentValue.getExpression());
+		}
+		// ask getValue()
+		Expression target = getNode("a);");
+		ExpressionValue value = ExecutionFlowUtils2.getValue(executionFlow, target);
+		assertSame(permanentValue, value);
+	}
+
+	public void test_getValue_usePermanentValue_parameter() throws Exception {
+		ExecutionFlowDescription executionFlow;
+		{
+			TypeDeclaration typeDeclaration =
+					createTypeDeclaration(
+							"test",
+							"Test.java",
+							getSource(
+									"import javax.swing.*;",
+									"public class Test {",
+									"  public Test(JButton a) {",
+									"    System.out.println(a);",
+									"  }",
+									"}"));
+			MethodDeclaration entryPoint = typeDeclaration.getMethods()[0];
+			executionFlow = new ExecutionFlowDescription(entryPoint);
+		}
+		// set permanent value for "new JButton()"
+		ExpressionValue permanentValue;
+		{
+			SimpleName parameterName = getNode("a) {");
+			permanentValue = ExecutionFlowUtils2.ensurePermanentValue(parameterName);
+			assertSame(parameterName, permanentValue.getExpression());
+		}
+		// ask getValue()
+		Expression target = getNode("a);");
+		ExpressionValue value = ExecutionFlowUtils2.getValue(executionFlow, target);
+		assertSame(permanentValue, value);
+	}
+
+	public void test_getValue_useDeclaredVariable_inParenthesis() throws Exception {
+		String expressionSource = "(a)";
+		String expected = "1";
+		check_getValue(new String[]{
+				"public class Test {",
+				"  public Test() {",
+				"    int a = 1;",
+				"    System.out.println((a));",
+				"  }",
+		"}"}, expressionSource, expected);
+	}
+
+	public void test_getValue_useDeclaredVariable_casted() throws Exception {
+		String expressionSource = "(int) a";
+		String expected = "1";
+		check_getValue(new String[]{
+				"public class Test {",
+				"  public Test() {",
+				"    int a = 1;",
+				"    System.out.println((int) a);",
+				"  }",
+		"}"}, expressionSource, expected);
+	}
+
+	public void test_getValue_lazy() throws Exception {
+		String expressionSource = "{p}getButton());";
+		String expected = "new JButton()";
+		check_getValue(new String[]{
+				"import javax.swing.*;",
+				"public class Test extends JPanel {",
+				"  private JButton button;",
+				"  public Test() {",
+				"    add(getButton());",
+				"  }",
+				"  private JButton getButton() {",
+				"    if (button == null) {",
+				"      button = new JButton();",
+				"    }",
+				"    return button;",
+				"  }",
+		"}"}, expressionSource, expected);
+	}
+
+	public void test_getValue_returnFromMethod() throws Exception {
+		String expressionSource = "{p}getButton());";
+		String expected = "new JButton()";
+		check_getValue(new String[]{
+				"import javax.swing.*;",
+				"public class Test extends JPanel {",
+				"  public Test() {",
+				"    add(getButton());",
+				"  }",
+				"  private JButton getButton() {",
+				"    return new JButton();",
+				"  }",
+		"}"}, expressionSource, expected);
+	}
+
+	public void test_getValue_returnFromMethod_ignoreStatic() throws Exception {
+		String expressionSource = "{p}createButton());";
+		String expected = null;
+		check_getValue(new String[]{
+				"import javax.swing.*;",
+				"public class Test extends JPanel {",
+				"  public Test() {",
+				"    add(createButton());",
+				"  }",
+				"  private static JButton createButton() {",
+				"    return new JButton();",
+				"  }",
+		"}"}, expressionSource, expected);
+	}
+
+	/**
+	 * We need special support for {@link PostfixExpression}, we need to know value before it,
+	 * implemented as {@link ExecutionFlowUtils2#getValuePrev(ExecutionFlowDescription, Expression)}.
+	 */
+	public void test_PostfixExpression_getValue() throws Exception {
+		ExecutionFlowDescription executionFlow;
+		{
+			TypeDeclaration typeDeclaration =
+					createTypeDeclaration(
+							"test",
+							"Test.java",
+							getSource(
+									"import javax.swing.*;",
+									"public class Test {",
+									"  public Test() {",
+									"    int a = 1;",
+									"    a++;",
+									"  }",
+									"}"));
+			MethodDeclaration entryPoint = typeDeclaration.getMethods()[0];
+			executionFlow = new ExecutionFlowDescription(entryPoint);
+		}
+		// prepare nodes
+		Expression operandInIncrement = getNode("a++");
+		PostfixExpression increment = (PostfixExpression) operandInIncrement.getParent();
+		// getValue()
+		{
+			ExpressionValue value = ExecutionFlowUtils2.getValue(executionFlow, operandInIncrement);
+			assertNotNull(value);
+			assertSame(increment, value.getExpression());
+		}
+		// getValuePrev()
+		{
+			ExpressionValue value = ExecutionFlowUtils2.getValuePrev(executionFlow, operandInIncrement);
+			assertNotNull(value);
+			assertEquals("1", m_lastEditor.getSource(value.getExpression()));
+		}
+	}
+
+	/**
+	 * When we visit {@link MethodDeclaration} with {@link ReturnStatement} without expression, this
+	 * caused {@link NullPointerException}.
+	 */
+	public void test_getValue_whenReturn_withoutExpression() throws Exception {
+		String expressionSource = "a =";
+		String expected = "1";
+		check_getValue(new String[]{
+				"public class Test {",
+				"  public Test() {",
+				"    int a = 1;",
+				"    System.out.println(a);",
+				"    foo();",
+				"  }",
+				"  private void foo() {",
+				"    return;",
+				"  }",
+		"}"}, expressionSource, expected);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link ExecutionFlowUtils2#getPermanentValue0(Expression)} and
+	 * {@link ExecutionFlowUtils2#clearPermanentValue(Expression)}.
+	 */
+	public void test_getPermanentValue0_clearPermanentValue() throws Exception {
+		createTypeDeclaration(
+				"test",
+				"Test.java",
+				getSource(
+						"public class Test {",
+						"  public Test() {",
+						"    int a = 1;",
+						"    System.out.println(a);",
+						"  }",
+						"}"));
+		Expression target = getTarget("a)");
+		// ensure value
+		ExpressionValue permanentValue = ExecutionFlowUtils2.ensurePermanentValue(target);
+		assertSame(permanentValue, ExecutionFlowUtils2.getPermanentValue0(target));
+		// clear value
+		ExecutionFlowUtils2.clearPermanentValue(target);
+		assertSame(null, ExecutionFlowUtils2.getPermanentValue0(target));
+	}
+
+	/**
+	 * Test for {@link ExecutionFlowUtils2#getValue0(Expression)}.
+	 */
+	public void test_getValue0() throws Exception {
+		createTypeDeclaration(
+				"test",
+				"Test.java",
+				getSource(
+						"public class Test {",
+						"  public Test() {",
+						"    int a = 1;",
+						"    System.out.println(a);",
+						"  }",
+						"}"));
+		Expression target = getTarget("a)");
+		// set value
+		ExpressionValue value = new ExpressionValue(null);
+		ExpressionValue permanentValue = new ExpressionValue(null);
+		// initially no value
+		assertSame(null, ExecutionFlowUtils2.getValue0(target));
+		// set "permanent"
+		ExecutionFlowUtils2.setPermanentValue0(target, permanentValue);
+		assertSame(permanentValue, ExecutionFlowUtils2.getValue0(target));
+		// if has "value", use it, not "permanent"
+		ExecutionFlowUtils2.setValue0(target, value);
+		assertSame(value, ExecutionFlowUtils2.getValue0(target));
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void check_getValue(String[] lines, String expressionSource, String expected)
+			throws Exception {
+		ExecutionFlowDescription executionFlow = prepare_flowDescription(lines);
+		check_getValue(executionFlow, expressionSource, expected);
+	}
+
+	private ExecutionFlowDescription prepare_flowDescription(String[] lines) throws Exception {
+		ExecutionFlowDescription executionFlow;
+		{
+			TypeDeclaration typeDeclaration =
+					createTypeDeclaration("test", "Test.java", getSource(lines));
+			MethodDeclaration entryPoint = typeDeclaration.getMethods()[0];
+			executionFlow = new ExecutionFlowDescription(entryPoint);
+		}
+		return executionFlow;
+	}
+
+	private void check_getValue(ExecutionFlowDescription executionFlow,
+			String expressionSource,
+			String expected) {
+		ExpressionValue value = getValue(executionFlow, expressionSource);
+		// validate
+		if (expected != null) {
+			assertNotNull(value);
+			ASTNode actual = value.getExpression();
+			//
+			while (expected.startsWith("{p}")) {
+				assertNotNull(actual);
+				expected = expected.substring("{p}".length());
+				actual = actual.getParent();
+			}
+			//
+			assertNotNull(actual);
+			assertEquals(expected, actual.toString().trim());
+		} else {
+			assertNull(value);
+		}
+	}
+
+	private ExpressionValue getValue(ExecutionFlowDescription executionFlow, String expressionSource) {
+		Expression target = getTarget(expressionSource);
+		return ExecutionFlowUtils2.getValue(executionFlow, target);
+	}
+
+	private Expression getTarget(String expressionSource) {
+		// prepare level
+		int parentLevel = 0;
+		while (expressionSource.startsWith("{p}")) {
+			parentLevel++;
+			expressionSource = expressionSource.substring("{p}".length());
+		}
+		// get target using source
+		Expression target = getNode(expressionSource);
+		// to to parents
+		for (int i = 0; i < parentLevel; i++) {
+			target = (Expression) target.getParent();
+		}
+		// done
+		return target;
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/eval/ExecutionFlowUtilsTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/eval/ExecutionFlowUtilsTest.java
index f26322dc3..bca6389e1 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/eval/ExecutionFlowUtilsTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/eval/ExecutionFlowUtilsTest.java
@@ -69,2089 +69,2089 @@
  * @author scheglov_ke
  */
 public class ExecutionFlowUtilsTest extends AbstractEngineTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Life cycle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void setUp() throws Exception {
-    super.setUp();
-    if (m_testProject == null) {
-      do_projectCreate();
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // getExecutionFlowConstructor()
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link ExecutionFlowUtils#getExecutionFlowConstructor(TypeDeclaration)}.
-   */
-  public void test_getExecutionFlowConstructor_single() throws Exception {
-    TypeDeclaration typeDeclaration =
-        createTypeDeclaration_Test(
-            "// filler filler filler",
-            "public class Test {",
-            "  public Test() {",
-            "  }",
-            "}");
-    assertSame(
-        typeDeclaration.getMethods()[0],
-        ExecutionFlowUtils.getExecutionFlowConstructor(typeDeclaration));
-  }
-
-  /**
-   * Test for {@link ExecutionFlowUtils#getExecutionFlowConstructor(TypeDeclaration)}.
-   */
-  public void test_getExecutionFlowConstructor_noConstructors() throws Exception {
-    TypeDeclaration typeDeclaration =
-        createTypeDeclaration_Test(
-            "// filler filler filler",
-            "public class Test {",
-            "  // filler",
-            "}");
-    assertSame(null, ExecutionFlowUtils.getExecutionFlowConstructor(typeDeclaration));
-  }
-
-  /**
-   * Test for {@link ExecutionFlowUtils#getExecutionFlowConstructor(TypeDeclaration)}.
-   */
-  public void test_getExecutionFlowConstructor_multipleWithTag() throws Exception {
-    TypeDeclaration typeDeclaration =
-        createTypeDeclaration_Test(
-            "public class Test {",
-            "  public Test(int a) {",
-            "  }",
-            "  /**",
-            "  * @wbp.parser.constructor",
-            "  */",
-            "  public Test(double b) {",
-            "  }",
-            "}");
-    assertSame(
-        typeDeclaration.getMethods()[1],
-        ExecutionFlowUtils.getExecutionFlowConstructor(typeDeclaration));
-  }
-
-  /**
-   * Test for {@link ExecutionFlowUtils#getExecutionFlowConstructor(TypeDeclaration)}.
-   */
-  public void test_getExecutionFlowConstructor_multipleNoTag_noDefault() throws Exception {
-    TypeDeclaration typeDeclaration =
-        createTypeDeclaration_Test(
-            "public class Test {",
-            "  public Test(int a) {",
-            "  }",
-            "  public Test(double b) {",
-            "  }",
-            "}");
-    try {
-      ExecutionFlowUtils.getExecutionFlowConstructor(typeDeclaration);
-      fail();
-    } catch (MultipleConstructorsError e) {
-      assertSame(null, e.getEditor());
-      assertSame(null, e.getTypeDeclaration());
-    }
-  }
-  /**
-   * {@link ExecutionFlowProvider} that selects constructor with single <code>int</code> parameter
-   * as default.
-   */
-  public static class ExecutionFlowProvider_forDefaultConstructor extends ExecutionFlowProvider {
-    @Override
-    public MethodDeclaration getDefaultConstructor(TypeDeclaration typeDeclaration) {
-      for (MethodDeclaration constructor : AstNodeUtils.getConstructors(typeDeclaration)) {
-        if ("<init>(int)".equals(AstNodeUtils.getMethodSignature(constructor))) {
-          return constructor;
-        }
-      }
-      return null;
-    }
-  }
-
-  /**
-   * Test for {@link ExecutionFlowUtils#getExecutionFlowConstructor(TypeDeclaration)} and using
-   * {@link ExecutionFlowProvider#getDefaultConstructor(TypeDeclaration)}.
-   */
-  public void test_getExecutionFlowConstructor_multipleNoTag_useExecutionFlowProvider()
-      throws Exception {
-    TestBundle testBundle = new TestBundle();
-    try {
-      Class<?> providerClass = ExecutionFlowProvider_forDefaultConstructor.class;
-      testBundle.addClass(providerClass);
-      testBundle.addExtension(
-          "org.eclipse.wb.core.java.executionFlowProviders",
-          "<provider class='" + providerClass.getName() + "'/>");
-      testBundle.install();
-      try {
-        TypeDeclaration typeDeclaration =
-            createTypeDeclaration_Test(
-                "public class Test {",
-                "  public Test() {",
-                "  }",
-                "  public Test(int a) {",
-                "  }",
-                "}");
-        assertSame(
-            typeDeclaration.getMethods()[1],
-            ExecutionFlowUtils.getExecutionFlowConstructor(typeDeclaration));
-      } finally {
-        testBundle.uninstall();
-      }
-    } finally {
-      testBundle.dispose();
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // getExecutionFlow_entryPoint()
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link ExecutionFlowUtils#getExecutionFlow_entryPoint(TypeDeclaration)}.
-   */
-  public void test_getExecutionFlow_entryPoint_forConstructor_0() throws Exception {
-    TypeDeclaration typeDeclaration =
-        createTypeDeclaration_Test(
-            "public class Test {",
-            "  public Test(int a) {",
-            "  }",
-            "  public Test(double b) {",
-            "  }",
-            "}");
-    assertSame(null, ExecutionFlowUtils.getExecutionFlow_entryPoint(typeDeclaration));
-  }
-
-  /**
-   * Test for {@link ExecutionFlowUtils#getExecutionFlow_entryPoint(TypeDeclaration)}.
-   */
-  public void test_getExecutionFlow_entryPoint_forConstructor_1() throws Exception {
-    TypeDeclaration typeDeclaration =
-        createTypeDeclaration_Test(
-            "public class Test {",
-            "  /**",
-            "  * @wbp.parser.entryPoint",
-            "  */",
-            "  public Test(int a) {",
-            "  }",
-            "  public Test(double b) {",
-            "  }",
-            "}");
-    assertSame(
-        typeDeclaration.getMethods()[0],
-        ExecutionFlowUtils.getExecutionFlow_entryPoint(typeDeclaration));
-  }
-
-  /**
-   * Test for {@link ExecutionFlowUtils#getExecutionFlow_entryPoint(TypeDeclaration)}.
-   */
-  public void test_getExecutionFlow_entryPoint_forConstructor_2() throws Exception {
-    TypeDeclaration typeDeclaration =
-        createTypeDeclaration_Test(
-            "public class Test {",
-            "  public Test(int a) {",
-            "  }",
-            "  /**",
-            "  * @wbp.parser.entryPoint",
-            "  */",
-            "  public Test(double b) {",
-            "  }",
-            "}");
-    assertSame(
-        typeDeclaration.getMethods()[1],
-        ExecutionFlowUtils.getExecutionFlow_entryPoint(typeDeclaration));
-  }
-
-  /**
-   * Test for {@link ExecutionFlowUtils#getExecutionFlow_entryPoint(TypeDeclaration)}.
-   */
-  public void test_getExecutionFlow_entryPoint_forMethod() throws Exception {
-    TypeDeclaration typeDeclaration =
-        createTypeDeclaration_Test(
-            "public class Test {",
-            "  /**",
-            "  * @wbp.parser.entryPoint",
-            "  */",
-            "  public void foo() {",
-            "  }",
-            "  public void bar() {",
-            "  }",
-            "}");
-    assertSame(
-        typeDeclaration.getMethods()[0],
-        ExecutionFlowUtils.getExecutionFlow_entryPoint(typeDeclaration));
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // visit
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_visit_empty() throws Exception {
-    String code = "Test() {} void root() {}";
-    String expectedNodes[] = {};
-    check_visitNodes(code, expectedNodes, "root()");
-  }
-
-  public void test_visit_statement() throws Exception {
-    String code = "Test() {} void root() {int value = 5;}";
-    String expectedNodes[] = {"int value = 5;"};
-    check_visitNodes(code, expectedNodes, "root()");
-  }
-
-  public void test_visit_TryStatement() throws Exception {
-    String code =
-        getSourceDQ(
-            "void root() {",
-            "  try {",
-            "    int value = 5;",
-            "  } catch (Exception e) {",
-            "  } catch (Throwable e) {",
-            "  }",
-            "}");
-    String expectedNodes[] = {"int value = 5;"};
-    check_visitNodes(code, expectedNodes, "root()");
-  }
-
-  public void test_visit_fields() throws Exception {
-    String code =
-        "int m_value = 1; Test() {} void root() {int value = 5;} private String m_string;";
-    String expectedNodes[] = {"int m_value = 1;", "private String m_string;", "int value = 5;"};
-    check_visitNodes(code, expectedNodes, "root()");
-  }
-
-  public void test_visit_fields2() throws Exception {
-    String code =
-        getSourceDQ(
-            "Test() {",
-            "}",
-            "void root() {",
-            "  int value = 5;",
-            "}",
-            "int m_value = 1;",
-            "private String m_string;");
-    String expectedNodes[] = {"int m_value = 1;", "private String m_string;", "int value = 5;"};
-    check_visitNodes(code, expectedNodes, "root()");
-  }
-
-  public void test_visit_initializers_static() throws Exception {
-    String code =
-        getSourceDQ(
-            "// filler filler filler filler filler",
-            "static int foo;",
-            "static {",
-            "  int bar;",
-            "}",
-            "void root() {",
-            "}");
-    String expectedNodes[] = {"static int foo;", "int bar;"};
-    check_visitNodes(code, expectedNodes, "root()");
-  }
-
-  public void test_visit_initializers_instance() throws Exception {
-    String code =
-        getSourceDQ(
-            "// filler filler filler filler filler",
-            "int foo;",
-            "{",
-            "  int bar;",
-            "}",
-            "void root() {",
-            "}");
-    String expectedNodes[] = {"int foo;", "int bar;"};
-    check_visitNodes(code, expectedNodes, "root()");
-  }
-
-  public void test_visit_statements() throws Exception {
-    String code = "Test() {} void root() {System.out.println();  System.exit(0);}";
-    String expectedNodes[] = {"System.out.println();", "System.exit(0);"};
-    check_visitNodes(code, expectedNodes, "root()");
-  }
-
-  public void test_visit_single_constructor() throws Exception {
-    String code = "int f; Test() {System.out.println();} void root() {System.exit(0);}";
-    String expectedNodes[] = {"int f;", "System.out.println();", "System.exit(0);"};
-    check_visitNodes(code, expectedNodes, "<init>", "root()");
-  }
-
-  /**
-   * Even when there are no constructor, instance field still should be visited.
-   */
-  public void test_visit_noConstructor() throws Exception {
-    String code = "int f; void root() {System.exit(0);}";
-    String expectedNodes[] = {"int f;", "System.exit(0);"};
-    check_visitNodes(code, expectedNodes, "root()");
-  }
-
-  /**
-   * No constructor, but static and instance fields should be visited.
-   */
-  public void test_visit_noConstructor_withStatic() throws Exception {
-    String code = "static int s; int f; void root() {System.exit(0);}";
-    String expectedNodes[] = {"static int s;", "int f;", "System.exit(0);"};
-    check_visitNodes(code, expectedNodes, "root()");
-  }
-
-  public void test_visit_local_constructor() throws Exception {
-    String code =
-        getSourceDQ(
-            "public static void main(String[] args) {",
-            "  Test test = new Test();",
-            "}",
-            "public Test() {",
-            "  System.out.println();",
-            "}");
-    String expectedNodes[] = {"System.out.println();", "Test test = new Test();"};
-    check_visitNodes(code, expectedNodes, "main(java.lang.String[])");
-  }
-
-  public void test_visit_localMethod_fromMain() throws Exception {
-    String code =
-        getSourceDQ(
-            "private int field;",
-            "public static void main(String[] args) {",
-            "  Test test = new Test();",
-            "  test.open();",
-            "}",
-            "public Test() {",
-            "  int a;",
-            "}",
-            "public void open() {",
-            "  field = 0;",
-            "}");
-    String expectedNodes[] =
-        {"private int field;", "int a;", "Test test = new Test();", "field = 0;", "test.open();"};
-    check_visitNodes(code, expectedNodes, "main(java.lang.String[])");
-  }
-
-  public void test_visit_several_constructors_good() throws Exception {
-    String code =
-        getSourceDQ(
-            "/** @wbp.parser.constructor */",
-            "Test() {",
-            "  System.out.println();",
-            "}",
-            "Test(int foo) {",
-            "}",
-            "void root() {",
-            "  System.exit(0);",
-            "}");
-    String expectedNodes[] = {"System.out.println();", "System.exit(0);"};
-    check_visitNodes(code, expectedNodes, "<init>", "root()");
-  }
-
-  /**
-   * When super() constructor invokes some protected method, <code>createContents()</code> in this
-   * test, we visit constructor <em>after</em> this method.<br>
-   * Note also, that in theory we should visit fields after <code>createContents()</code>, but
-   * practically it is possible, that there are assignments in method to fields, so to use variable
-   * declaration/assignment tracking, we should visit fields before.
-   */
-  public void test_visit_constructorInTheMiddle() throws Exception {
-    String code =
-        getSourceDQ(
-            "private int f;",
-            "Test() {",
-            "  int a;",
-            "}",
-            "void createContents() {",
-            "  int b;",
-            "  f = 1;",
-            "}");
-    String expectedNodes[] = {"private int f;", "int b;", "f = 1;", "int a;"};
-    check_visitNodes(code, expectedNodes, "createContents()", "<init>");
-  }
-
-  public void test_visit_static() throws Exception {
-    String code = "Test() {System.out.println();} static int m_value; static void root() {}";
-    String expectedNodes[] = {"static int m_value;"};
-    check_visitNodes(code, expectedNodes, "root()");
-  }
-
-  public void test_visit_constructor() throws Exception {
-    String code = "Test() {System.out.println();}";
-    String expectedNodes[] = {"System.out.println();"};
-    check_visitNodes(code, expectedNodes, "<init>()");
-  }
-
-  public void test_visit_ifStatement_genericExpression() throws Exception {
-    String code =
-        getSourceDQ(
-            "void root() {",
-            "  int a;",
-            "  if (1 == 2) {",
-            "    int b;",
-            "  } else {",
-            "    int c;",
-            "  }",
-            "}");
-    String expectedNodes[] = {"int a;"};
-    check_visitNodes(code, expectedNodes, "root()");
-  }
-
-  public void test_visit_ifStatement_true() throws Exception {
-    String code =
-        getSourceDQ(
-            "void root() {",
-            "  if (true) {",
-            "    int a;",
-            "  } else {",
-            "    int b;",
-            "  }",
-            "}");
-    String expectedNodes[] = {"int a;"};
-    check_visitNodes(code, expectedNodes, "root()");
-  }
-
-  public void test_visit_ifStatement_false() throws Exception {
-    String code =
-        getSourceDQ(
-            "void root() {",
-            "  if (false) {",
-            "    int a;",
-            "  } else {",
-            "    int b;",
-            "  }",
-            "}");
-    String expectedNodes[] = {"int b;"};
-    check_visitNodes(code, expectedNodes, "root()");
-  }
-
-  public void test_visit_ifStatement_Beans_isDesignTime() throws Exception {
-    String code =
-        getSourceDQ(
-            "void root() {",
-            "  if (java.beans.Beans.isDesignTime()) {",
-            "    int a;",
-            "  } else {",
-            "    int b;",
-            "  }",
-            "}");
-    String expectedNodes[] = {"int a;"};
-    check_visitNodes(code, expectedNodes, "root()");
-  }
-
-  public void test_visit_ifStatement_Beans_isDesignTime_not() throws Exception {
-    String code =
-        getSourceDQ(
-            "void root() {",
-            "  if (!java.beans.Beans.isDesignTime()) {",
-            "    int a;",
-            "  } else {",
-            "    int b;",
-            "  }",
-            "}");
-    String expectedNodes[] = {"int b;"};
-    check_visitNodes(code, expectedNodes, "root()");
-  }
-
-  public void test_visit_ifStatement_local_isDesignTime() throws Exception {
-    String code =
-        getSourceDQ(
-            "void root() {",
-            "  if (isDesignTime()) {",
-            "    int a;",
-            "  } else {",
-            "    int b;",
-            "  }",
-            "}",
-            "private static boolean isDesignTime() {",
-            "  return false;",
-            "}");
-    String expectedNodes[] = {"int a;"};
-    check_visitNodes(code, expectedNodes, "root()");
-  }
-
-  public void test_visit_ifStatement_local_isDesignTime_not() throws Exception {
-    String code =
-        getSourceDQ(
-            "void root() {",
-            "  if (!isDesignTime()) {",
-            "    int a;",
-            "  } else {",
-            "    int b;",
-            "  }",
-            "}",
-            "private static boolean isDesignTime() {",
-            "  return false;",
-            "}");
-    String expectedNodes[] = {"int b;"};
-    check_visitNodes(code, expectedNodes, "root()");
-  }
-
-  public void test_visit_ifStatement_lazy() throws Exception {
-    String code =
-        getSourceDQ(
-            "Object lazy;",
-            "Object getLazy() {",
-            "  if (lazy == null) {",
-            "    lazy = null;",
-            "  }",
-            "  return lazy;",
-            "}");
-    String expectedNodes[] = {"Object lazy;", "lazy = null;", "return lazy;"};
-    check_visitNodes(code, expectedNodes, "getLazy()");
-  }
-
-  public void test_visit_ifStatement_otherCondition() throws Exception {
-    String code = "void root() {int a; if (1 == 2) {int b;}}";
-    String expectedNodes[] = {"int a;"};
-    check_visitNodes(code, expectedNodes, "root()");
-  }
-
-  public void test_visit_invocation() throws Exception {
-    String code = "void root() {System.out.println(); foo();}  void foo() {System.exit(0);}";
-    String expectedNodes[] = {"System.out.println();", "System.exit(0);", "foo();"};
-    check_visitNodes(code, expectedNodes, "root()");
-  }
-
-  public void test_visit_invocation_recursion() throws Exception {
-    String code =
-        getSourceDQ(
-            "void root() {",
-            "  System.out.println(0);",
-            "  foo();",
-            "}",
-            "void foo() {",
-            "  System.out.println(1);",
-            "  foo();",
-            "}");
-    String expectedNodes[] =
-        {"System.out.println(0);", "System.out.println(1);", "foo();", "foo();"};
-    check_visitNodes(code, expectedNodes, "root()");
-  }
-
-  private void check_visitNodes(String code,
-      final String expectedNodes[],
-      String... methodSignatures) throws Exception {
-    // prepare root methods
-    MethodDeclaration rootMethods[];
-    {
-      TypeDeclaration typeDeclaration = createTypeDeclaration_TestC(code);
-      rootMethods = new MethodDeclaration[methodSignatures.length];
-      for (int i = 0; i < methodSignatures.length; i++) {
-        String methodSignature = methodSignatures[i];
-        if (methodSignature.equals("<init>")) {
-          // when just "<init>" name, without parameters, find constructor using ExecutionFlowUtils
-          rootMethods[i] = getExecutionFlowConstructor(typeDeclaration);
-        } else {
-          // normal method
-          rootMethods[i] = AstNodeUtils.getMethodBySignature(typeDeclaration, methodSignature);
-        }
-      }
-    }
-    // do check
-    check_visitNodes(rootMethods, expectedNodes);
-  }
-
-  private void check_visitNodes(MethodDeclaration[] rootMethods, final String[] expectedNodes) {
-    // visit and check that visited nodes are same as expected
-    final int indexWrapper[] = new int[]{0};
-    ExecutionFlowDescription flowDescription = new ExecutionFlowDescription(rootMethods);
-    visit(new VisitingContext(true), flowDescription, new ExecutionFlowFrameVisitor() {
-      @Override
-      public void postVisit(ASTNode node) {
-        if (node instanceof Statement && !(node instanceof Block)) {
-          assertNextNode(node);
-        }
-      }
-
-      @Override
-      public void endVisit(FieldDeclaration node) {
-        assertNextNode(node);
-      }
-
-      private void assertNextNode(ASTNode node) {
-        String actualNodeSource;
-        try {
-          actualNodeSource = m_lastEditor.getSource(node);
-        } catch (Throwable e) {
-          throw ReflectionUtils.propagate(e);
-        }
-        int index = indexWrapper[0]++;
-        assertEquals(expectedNodes[index], actualNodeSource);
-      }
-    });
-    // all expected nodes should be visited
-    assertEquals(expectedNodes.length, indexWrapper[0]);
-  }
-
-  public void test_visit_abstractMethod() throws Exception {
-    TypeDeclaration typeDeclaration =
-        createTypeDeclaration_Test(
-            "public abstract class Test {",
-            "  public void root() {",
-            "    someAbstractMethod();",
-            "  }",
-            "  protected abstract void someAbstractMethod();",
-            "}");
-    MethodDeclaration rootMethod = typeDeclaration.getMethods()[0];
-    //
-    MethodDeclaration[] rootMethods = new MethodDeclaration[]{rootMethod};
-    String expectedNodes[] = {"someAbstractMethod();"};
-    check_visitNodes(rootMethods, expectedNodes);
-  }
-
-  public void test_visit_ConstructorInvocation() throws Exception {
-    TypeDeclaration typeDeclaration =
-        createTypeDeclaration_Test(
-            "public class Test {",
-            "  public Test() {",
-            "    this(false);",
-            "  }",
-            "  public Test(boolean b) {",
-            "    int a;",
-            "  }",
-            "}");
-    MethodDeclaration rootMethod = typeDeclaration.getMethods()[0];
-    //
-    MethodDeclaration[] rootMethods = new MethodDeclaration[]{rootMethod};
-    String expectedNodes[] = {"int a;", "this(false);"};
-    check_visitNodes(rootMethods, expectedNodes);
-  }
-
-  public void test_visit_ConstructorInvocation_visitArgumentsFirst() throws Exception {
-    TypeDeclaration typeDeclaration =
-        createTypeDeclaration(
-            "test",
-            "Test.java",
-            getSource(
-                "public class Test {",
-                "  public Test() {",
-                "    this(false);",
-                "  }",
-                "  public Test(boolean parameter) {",
-                "  }",
-                "}"));
-    // prepare flow
-    ExecutionFlowDescription flowDescription;
-    {
-      MethodDeclaration rootMethod = typeDeclaration.getMethods()[0];
-      MethodDeclaration[] rootMethods = new MethodDeclaration[]{rootMethod};
-      flowDescription = new ExecutionFlowDescription(rootMethods);
-    }
-    // visit
-    final List<String> nodes = Lists.newArrayList();
-    visit(new VisitingContext(true), flowDescription, new ExecutionFlowFrameVisitor() {
-      @Override
-      public void postVisit(ASTNode node) {
-        boolean isSingleStatement = node instanceof Statement && !(node instanceof Block);
-        if (isSingleStatement || node instanceof Expression) {
-          nodes.add(m_lastEditor.getSource(node));
-        }
-      }
-    });
-    assertThat(nodes).containsExactly("false", "parameter", "this(false);");
-  }
-
-  /**
-   * There is implementation detail of {@link ExecutionFlowUtils} - use use
-   * {@link Method#invoke(Object, Object...)}, so this wraps original exception into
-   * {@link InvocationTargetException}. This is not good, we should not expose this.
-   */
-  public void test_visit_unwrapInvocationTargetException() throws Exception {
-    TypeDeclaration typeDeclaration =
-        createTypeDeclaration(
-            "test",
-            "Test.java",
-            getSource(
-                "public class Test {",
-                "  public Test() {",
-                "    System.out.println();",
-                "  }",
-                "}"));
-    // prepare flow
-    ExecutionFlowDescription flowDescription;
-    {
-      MethodDeclaration rootMethod = typeDeclaration.getMethods()[0];
-      MethodDeclaration[] rootMethods = new MethodDeclaration[]{rootMethod};
-      flowDescription = new ExecutionFlowDescription(rootMethods);
-    }
-    // visit
-    final Error exception = new Error();
-    try {
-      visit(new VisitingContext(true), flowDescription, new ExecutionFlowFrameVisitor() {
-        @Override
-        public void endVisit(SimpleName node) {
-          if (node.toString().equals("println")) {
-            throw exception;
-          }
-        }
-      });
-    } catch (Throwable e) {
-      assertSame(exception, e);
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Visiting and AnonymousClassDeclaration
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for ignoring {@link AnonymousClassDeclaration}.
-   * <p>
-   * {@link Runnable} in {@link Thread} should not be visited.
-   */
-  public void test_visit_AnonymousClassDeclaration_noVisit() throws Exception {
-    String threadCode = "new Thread(new Runnable() {public void run() {int a;}});";
-    String code = "void root() {" + threadCode + "}";
-    String expectedNodes[] = {threadCode};
-    check_visitNodes(code, expectedNodes, "root()");
-  }
-
-  /**
-   * Test for ignoring {@link AnonymousClassDeclaration}.
-   * <p>
-   * {@link Runnable} in {@link Thread} should not be visited, and invocations also should not be
-   * followed.
-   */
-  public void test_visit_AnonymousClassDeclaration_withInvocation() throws Exception {
-    String threadCode = "new Thread(new Runnable() {public void run() {foo();}});";
-    String code = "void root() {" + threadCode + "} void foo() {int b;}";
-    String expectedNodes[] = {threadCode};
-    check_visitNodes(code, expectedNodes, "root()");
-  }
-  /**
-   * {@link ExecutionFlowProvider} that allows visiting anonymous {@link Runnable} as argument of
-   * {@link Thread} creation.
-   */
-  public static class ExecutionFlowProvider_RunnableInThread extends ExecutionFlowProvider {
-    @Override
-    public boolean shouldVisit(AnonymousClassDeclaration anonymous) throws Exception {
-      if (AstNodeUtils.isSuccessorOf(anonymous.resolveBinding(), "java.lang.Runnable")) {
-        ASTNode anonymousCreation = anonymous.getParent();
-        if (anonymousCreation.getLocationInParent() == ClassInstanceCreation.ARGUMENTS_PROPERTY) {
-          Expression enclosingCreation = (ClassInstanceCreation) anonymousCreation.getParent();
-          if (AstNodeUtils.isSuccessorOf(enclosingCreation, "java.lang.Thread")) {
-            return true;
-          }
-        }
-      }
-      return false;
-    }
-  }
-
-  /**
-   * Test for ignoring {@link AnonymousClassDeclaration}.
-   * <p>
-   * In general {@link Runnable} in {@link Thread} should not be visited, and invocations also
-   * should not be followed. However we install special {@link ExecutionFlowProvider} that allows
-   * such visiting.
-   */
-  public void test_visit_AnonymousClassDeclaration_withInvocation_doVisit() throws Exception {
-    TestBundle testBundle = new TestBundle();
-    try {
-      Class<?> providerClass = ExecutionFlowProvider_RunnableInThread.class;
-      testBundle.addClass(providerClass);
-      testBundle.addExtension(
-          "org.eclipse.wb.core.java.executionFlowProviders",
-          "<provider class='" + providerClass.getName() + "'/>");
-      testBundle.install();
-      try {
-        String threadCode = "new Thread(new Runnable() {public void run() {foo();}});";
-        String code = "void root() {" + threadCode + "} void foo() {int b;}";
-        String expectedNodes[] = {"int b;", "foo();", threadCode};
-        check_visitNodes(code, expectedNodes, "root()");
-      } finally {
-        testBundle.uninstall();
-      }
-    } finally {
-      testBundle.dispose();
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // findLastAssignment
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_findLastAssignment_variable() throws Exception {
-    String code = "void root() {int value = 0; System.out.println(value);}";
-    check_findLastAssignment(code, 1, new I_findLastAssignment() {
-      @Override
-      public ASTNode getExpected(TypeDeclaration typeDeclaration,
-          MethodDeclaration methodDeclaration,
-          Statement[] statements) {
-        return (ASTNode) ((VariableDeclarationStatement) statements[0]).fragments().get(0);
-      }
-    });
-  }
-
-  /**
-   * If "left" side of assignment is variable, its last assignment is this assignment.
-   */
-  public void test_findLastAssignment_variable_recursiveAssignment_leftSide() throws Exception {
-    // prepare root methods
-    TypeDeclaration typeDeclaration;
-    MethodDeclaration rootMethod;
-    MethodDeclaration rootMethods[];
-    {
-      String code = "void root() {int value; value = 1;}";
-      typeDeclaration = createTypeDeclaration_TestC(code);
-      rootMethod = AstNodeUtils.getMethodBySignature(typeDeclaration, "root()");
-      assertNotNull(rootMethod);
-      rootMethods = new MethodDeclaration[]{rootMethod};
-    }
-    // prepare statements
-    List<Statement> statementsList = DomGenerics.statements(rootMethod.getBody());
-    Statement statements[] = statementsList.toArray(new Statement[statementsList.size()]);
-    // prepare variable and assignment
-    Assignment assignment;
-    SimpleName variable;
-    {
-      assignment = (Assignment) ((ExpressionStatement) statements[1]).getExpression();
-      variable = (SimpleName) assignment.getLeftHandSide();
-    }
-    //
-    ASTNode lastAssignment = getLastAssignment(new ExecutionFlowDescription(rootMethods), variable);
-    assertSame(assignment, lastAssignment);
-  }
-
-  /**
-   * Variable in "right" side of assignment should see previous value.
-   */
-  public void test_findLastAssignment_variable_recursiveAssignment_rightSide() throws Exception {
-    TypeDeclaration typeDeclaration =
-        createTypeDeclaration_Test(
-            "class Test {",
-            "  // filler filler filler",
-            "  void root() {",
-            "    int value = 0;",
-            "    value = value + 1;",
-            "  }",
-            "}");
-    MethodDeclaration rootMethod = AstNodeUtils.getMethodBySignature(typeDeclaration, "root()");
-    // prepare variable
-    ASTNode variable = m_lastEditor.getEnclosingNode("value + 1");
-    VariableDeclarationFragment expected =
-        (VariableDeclarationFragment) m_lastEditor.getEnclosingNode("value = 0").getParent();
-    // check last assignment
-    {
-      ASTNode lastAssignment =
-          getLastAssignment(new ExecutionFlowDescription(rootMethod), variable);
-      assertNotNull(lastAssignment);
-      assertSame(expected, lastAssignment);
-    }
-  }
-
-  public void test_findLastAssignment_variable_reassign() throws Exception {
-    String code = "void root() {int value = 0; value = 1; System.out.println(value);}";
-    check_findLastAssignment(code, 2, new I_findLastAssignment() {
-      @Override
-      public ASTNode getExpected(TypeDeclaration typeDeclaration,
-          MethodDeclaration methodDeclaration,
-          Statement[] statements) {
-        return ((ExpressionStatement) statements[1]).getExpression();
-      }
-    });
-  }
-
-  public void test_findLastAssignment_variable_reassign2() throws Exception {
-    String code =
-        "void root() {int value; value = 0; System.out.println(value); value = 1; System.out.println(value);}";
-    check_findLastAssignment(code, 4, new I_findLastAssignment() {
-      @Override
-      public ASTNode getExpected(TypeDeclaration typeDeclaration,
-          MethodDeclaration methodDeclaration,
-          Statement[] statements) {
-        return ((ExpressionStatement) statements[3]).getExpression();
-      }
-    });
-  }
-
-  public void test_findLastAssignment_variable_reassign_later() throws Exception {
-    String code = "void root() {int value = 0; System.out.println(value); value = 1;}";
-    check_findLastAssignment(code, 1, new I_findLastAssignment() {
-      @Override
-      public ASTNode getExpected(TypeDeclaration typeDeclaration,
-          MethodDeclaration methodDeclaration,
-          Statement[] statements) {
-        return (ASTNode) ((VariableDeclarationStatement) statements[0]).fragments().get(0);
-      }
-    });
-  }
-
-  public void test_findLastAssignment_variable_sameInDifferentMethod() throws Exception {
-    String code =
-        "void root() {int value = 0; foo(); System.out.println(value);} void foo() {int value = 1;}";
-    check_findLastAssignment(code, 2, new I_findLastAssignment() {
-      @Override
-      public ASTNode getExpected(TypeDeclaration typeDeclaration,
-          MethodDeclaration methodDeclaration,
-          Statement[] statements) {
-        return (ASTNode) ((VariableDeclarationStatement) statements[0]).fragments().get(0);
-      }
-    });
-  }
-
-  public void test_findLastAssignment_FieldDeclaration() throws Exception {
-    String code = "int value = 0; void root() {System.out.println(value);}";
-    check_findLastAssignment(code, 0, new I_findLastAssignment() {
-      @Override
-      public ASTNode getExpected(TypeDeclaration typeDeclaration,
-          MethodDeclaration methodDeclaration,
-          Statement[] statements) {
-        return (ASTNode) typeDeclaration.getFields()[0].fragments().get(0);
-      }
-    });
-  }
-
-  /**
-   * Check for "this.fieldName" itself.
-   */
-  public void test_FieldDeclaration_this_1() throws Exception {
-    CompilationUnit compilationUnit =
-        createASTCompilationUnit(
-            "test",
-            "Test.java",
-            getSourceDQ(
-                "package test;",
-                "class Test {",
-                "  int value;",
-                "  void root() {",
-                "    int value = 0;",
-                "    value = 1;",
-                "    System.out.println(this.value);",
-                "  }",
-                "}"));
-    TypeDeclaration typeDeclaration = (TypeDeclaration) compilationUnit.types().get(0);
-    MethodDeclaration rootMethod = AstNodeUtils.getMethodBySignature(typeDeclaration, "root()");
-    // prepare variable
-    ASTNode variable;
-    {
-      ExpressionStatement statement =
-          (ExpressionStatement) rootMethod.getBody().statements().get(2);
-      MethodInvocation invocation = (MethodInvocation) statement.getExpression();
-      variable = (ASTNode) invocation.arguments().get(0);
-    }
-    // check last assignment
-    {
-      ASTNode lastAssignment =
-          getLastAssignment(new ExecutionFlowDescription(rootMethod), variable);
-      assertNotNull(lastAssignment);
-      assertSame(typeDeclaration.getFields()[0], lastAssignment.getParent());
-    }
-    // check references
-    {
-      List<Expression> references =
-          getReferences(new ExecutionFlowDescription(rootMethod), variable);
-      String[] expectedReferences = new String[]{"int value;", "System.out.println(this.value);"};
-      assertEquals(expectedReferences.length, references.size());
-      for (int i = 0; i < references.size(); i++) {
-        ASTNode reference = references.get(i);
-        String expectedReference = expectedReferences[i];
-        String actualReference = m_lastEditor.getSource(reference.getParent().getParent());
-        assertEquals(expectedReference, actualReference);
-      }
-    }
-  }
-
-  /**
-   * Check for local variable that hides field with same name.
-   */
-  public void test_FieldDeclaration_this_2() throws Exception {
-    CompilationUnit compilationUnit =
-        createASTCompilationUnit(
-            "test",
-            "Test.java",
-            getSourceDQ(
-                "package test;",
-                "class Test {",
-                "  int value;",
-                "  void root() {",
-                "    int value = 0;",
-                "    value = 1;",
-                "    this.value = 2;",
-                "    System.out.println(value);",
-                "  }",
-                "}"));
-    TypeDeclaration typeDeclaration = (TypeDeclaration) compilationUnit.types().get(0);
-    MethodDeclaration rootMeethod = AstNodeUtils.getMethodBySignature(typeDeclaration, "root()");
-    // prepare variable
-    ASTNode variable;
-    {
-      ExpressionStatement statement =
-          (ExpressionStatement) rootMeethod.getBody().statements().get(3);
-      MethodInvocation invocation = (MethodInvocation) statement.getExpression();
-      variable = (ASTNode) invocation.arguments().get(0);
-    }
-    // check last assignment
-    {
-      ASTNode lastAssignment =
-          getLastAssignment(new ExecutionFlowDescription(rootMeethod), variable);
-      assertNotNull(lastAssignment);
-      //
-      ExpressionStatement statement =
-          (ExpressionStatement) rootMeethod.getBody().statements().get(1);
-      assertSame(statement.getExpression(), lastAssignment);
-    }
-    // check references
-    {
-      List<Expression> references =
-          getReferences(new ExecutionFlowDescription(rootMeethod), variable);
-      String[] expectedReferences =
-          new String[]{"int value = 0;", "value = 1;", "System.out.println(value);"};
-      assertEquals(expectedReferences.length, references.size());
-      for (int i = 0; i < references.size(); i++) {
-        SimpleName reference = (SimpleName) references.get(i);
-        String expectedReference = expectedReferences[i];
-        String actualReference = m_lastEditor.getSource(reference.getParent().getParent());
-        assertEquals(expectedReference, actualReference);
-      }
-    }
-  }
-
-  public void test_findLastAssignment_FieldDeclaration_noValue() throws Exception {
-    String code = "int value; void root() {System.out.println(value);}";
-    check_findLastAssignment(code, 0, new I_findLastAssignment() {
-      @Override
-      public ASTNode getExpected(TypeDeclaration typeDeclaration,
-          MethodDeclaration methodDeclaration,
-          Statement[] statements) {
-        return (ASTNode) typeDeclaration.getFields()[0].fragments().get(0);
-      }
-    });
-  }
-
-  public void test_findLastAssignment_FieldDeclaration_variable_thisMethod() throws Exception {
-    String code = "int value = 0; void root() {int value = 1; System.out.println(value);}";
-    check_findLastAssignment(code, 1, new I_findLastAssignment() {
-      @Override
-      public ASTNode getExpected(TypeDeclaration typeDeclaration,
-          MethodDeclaration methodDeclaration,
-          Statement[] statements) {
-        return (ASTNode) ((VariableDeclarationStatement) statements[0]).fragments().get(0);
-      }
-    });
-  }
-
-  public void test_findLastAssignment_FieldDeclaration_reassign_thisMethod() throws Exception {
-    String code = "int value = 0; void root() {value = 1; System.out.println(value);}";
-    check_findLastAssignment(code, 1, new I_findLastAssignment() {
-      @Override
-      public ASTNode getExpected(TypeDeclaration typeDeclaration,
-          MethodDeclaration methodDeclaration,
-          Statement[] statements) {
-        return ((ExpressionStatement) statements[0]).getExpression();
-      }
-    });
-  }
-
-  public void test_findLastAssignment_FieldDeclaration_reassign_otherMethod() throws Exception {
-    String code =
-        "int value = 0; void root() {foo(); System.out.println(value);} void foo() {value = 1;}";
-    check_findLastAssignment(code, 1, new I_findLastAssignment() {
-      @Override
-      public ASTNode getExpected(TypeDeclaration typeDeclaration,
-          MethodDeclaration methodDeclaration,
-          Statement[] statements) {
-        Statement statement =
-            (Statement) typeDeclaration.getMethods()[1].getBody().statements().get(0);
-        return ((ExpressionStatement) statement).getExpression();
-      }
-    });
-  }
-
-  public void test_findLastAssignment_FieldDeclaration_reassign_otherMethod2() throws Exception {
-    String code =
-        "int value = 0; void root() {System.out.println(value); foo();} void foo() {value = 1;}";
-    check_findLastAssignment(code, 0, new I_findLastAssignment() {
-      @Override
-      public ASTNode getExpected(TypeDeclaration typeDeclaration,
-          MethodDeclaration methodDeclaration,
-          Statement[] statements) {
-        return (ASTNode) typeDeclaration.getFields()[0].fragments().get(0);
-      }
-    });
-  }
-
-  public void test_findLastAssignment_FieldDeclaration_reassign_otherMethod3() throws Exception {
-    String code =
-        "int value = 0; void foo() {value = 1;} void root() {System.out.println(value); foo();}";
-    check_findLastAssignment(code, 0, new I_findLastAssignment() {
-      @Override
-      public ASTNode getExpected(TypeDeclaration typeDeclaration,
-          MethodDeclaration methodDeclaration,
-          Statement[] statements) {
-        return (ASTNode) typeDeclaration.getFields()[0].fragments().get(0);
-      }
-    });
-  }
-
-  public void test_findLastAssignment_FieldDeclaration_reassign_otherMethod4() throws Exception {
-    String code =
-        "int value = 0; void root() {foo(); System.out.println(value);} void foo() {int value = 1;}";
-    check_findLastAssignment(code, 1, new I_findLastAssignment() {
-      @Override
-      public ASTNode getExpected(TypeDeclaration typeDeclaration,
-          MethodDeclaration methodDeclaration,
-          Statement[] statements) {
-        return (ASTNode) typeDeclaration.getFields()[0].fragments().get(0);
-      }
-    });
-  }
-
-  public void test_findLastAssignment_parameters() throws Exception {
-    String code = "void root(int value) {System.out.println(value);}";
-    check_findLastAssignment(code, "root(int)", 0, new I_findLastAssignment() {
-      @Override
-      public ASTNode getExpected(TypeDeclaration typeDeclaration,
-          MethodDeclaration methodDeclaration,
-          Statement[] statements) {
-        return (ASTNode) methodDeclaration.parameters().get(0);
-      }
-    });
-  }
-
-  public void test_findLastAssignment_parameterName() throws Exception {
-    TypeDeclaration typeDeclaration =
-        createTypeDeclaration_Test(
-            "public class Test {",
-            "  public void foo(int value) {",
-            "  }",
-            "}");
-    MethodDeclaration fooMethod = typeDeclaration.getMethods()[0];
-    // prepare variable
-    SingleVariableDeclaration valueDeclaration = DomGenerics.parameters(fooMethod).get(0);
-    SimpleName valueName = valueDeclaration.getName();
-    // simple flow
-    ExecutionFlowDescription flowDescription = new ExecutionFlowDescription(fooMethod);
-    // get last assignment
-    ASTNode lastAssignment = getLastAssignment(flowDescription, valueName);
-    assertSame(valueDeclaration, lastAssignment);
-    assertTrue(hasVariableStamp(valueName));
-  }
-
-  public void test_findLastAssignment_parameterName_inBinaryFlowMethod() throws Exception {
-    TypeDeclaration typeDeclaration =
-        createTypeDeclaration_Test(
-            "public class Test {",
-            "  public Test() {",
-            "  }",
-            "  public void foo(int value) {",
-            "  }",
-            "}");
-    MethodDeclaration constructorMethod = typeDeclaration.getMethods()[0];
-    MethodDeclaration fooMethod = typeDeclaration.getMethods()[1];
-    // prepare variable
-    SingleVariableDeclaration valueDeclaration = DomGenerics.parameters(fooMethod).get(0);
-    SimpleName valueName = valueDeclaration.getName();
-    // flow with linked binary flow
-    ExecutionFlowDescription flowDescription = new ExecutionFlowDescription(constructorMethod);
-    flowDescription.addBinaryFlowMethodBefore(constructorMethod.getBody(), fooMethod);
-    // get last assignment
-    ASTNode lastAssignment = getLastAssignment(flowDescription, valueName);
-    assertSame(valueDeclaration, lastAssignment);
-    assertTrue(hasVariableStamp(valueName));
-  }
-
-  public void test_findLastAssignment_parameters_hide_field() throws Exception {
-    String code = "int value = 1; void root(int value) {System.out.println(value);}";
-    check_findLastAssignment(code, "root(int)", 0, new I_findLastAssignment() {
-      @Override
-      public ASTNode getExpected(TypeDeclaration typeDeclaration,
-          MethodDeclaration methodDeclaration,
-          Statement[] statements) {
-        return (ASTNode) methodDeclaration.parameters().get(0);
-      }
-    });
-  }
-
-  /**
-   * Test of last assignment for argument of {@link SuperConstructorInvocation}.
-   */
-  public void test_findLastAssignment_SuperConstructorInvocation_argument() throws Exception {
-    TypeDeclaration typeDeclaration =
-        createTypeDeclaration_Test(
-            "public class Test extends java.util.ArrayList {",
-            "  public Test(int size) {",
-            "    super(size);",
-            "  }",
-            "}");
-    MethodDeclaration methodDeclaration = typeDeclaration.getMethods()[0];
-    SingleVariableDeclaration sizeDeclaration = DomGenerics.parameters(methodDeclaration).get(0);
-    //
-    SimpleName sizeArgument = (SimpleName) m_lastEditor.getEnclosingNode("size);");
-    ExecutionFlowDescription flowDescription = new ExecutionFlowDescription(methodDeclaration);
-    ASTNode lastAssignment = getLastAssignment(flowDescription, sizeArgument);
-    assertSame(sizeDeclaration, lastAssignment);
-  }
-
-  /**
-   * Follow to local constructor using {@link ConstructorInvocation}.
-   */
-  public void test_findLastAssignment_followConstructorInvocation() throws Exception {
-    TypeDeclaration typeDeclaration =
-        createTypeDeclaration_Test(
-            "public class Test extends java.util.ArrayList {",
-            "  public Test() {",
-            "    this(0);",
-            "  }",
-            "  public Test(int size) {",
-            "    System.out.println(size);",
-            "  }",
-            "}");
-    MethodDeclaration entryPointConstructor = typeDeclaration.getMethods()[0];
-    MethodDeclaration sizeConstructor = typeDeclaration.getMethods()[1];
-    SingleVariableDeclaration sizeDeclaration = DomGenerics.parameters(sizeConstructor).get(0);
-    //
-    SimpleName sizeArgument = (SimpleName) m_lastEditor.getEnclosingNode("size);");
-    ASTNode lastAssignment =
-        getLastAssignment(new ExecutionFlowDescription(entryPointConstructor), sizeArgument);
-    assertSame(sizeDeclaration, lastAssignment);
-  }
-
-  /**
-   * In theory, when we ask for last assignment to variable that is not in execution flow, we can
-   * not say this 100% correct. However in some situations, when variable is assigned in constructor
-   * (so, always visited), we know last assignment.
-   */
-  public void test_findLastAssignment_notInFlow_initializedFromConstructor() throws Exception {
-    CompilationUnit compilationUnit =
-        createASTCompilationUnit(
-            "test",
-            "Test.java",
-            getSourceDQ(
-                "package test;",
-                "public class Test {",
-                "  int m_field;",
-                "  public Test() {",
-                "    m_field = 5;",
-                "  }",
-                "  private void disconnectedMethod() {",
-                "    System.out.println(m_field);",
-                "  }",
-                "}"));
-    TypeDeclaration typeDeclaration = DomGenerics.types(compilationUnit).get(0);
-    MethodDeclaration constructorMethod = typeDeclaration.getMethods()[0];
-    MethodDeclaration disconnectedMethod = typeDeclaration.getMethods()[1];
-    // prepare expected result
-    Assignment expectedAssignment;
-    {
-      Statement statement = DomGenerics.statements(constructorMethod.getBody()).get(0);
-      expectedAssignment = (Assignment) ((ExpressionStatement) statement).getExpression();
-    }
-    // prepare last assignment visible in "disconnectedMethod"
-    ASTNode actualAssignment;
-    {
-      Statement statement = DomGenerics.statements(disconnectedMethod.getBody()).get(0);
-      MethodInvocation invocation =
-          (MethodInvocation) ((ExpressionStatement) statement).getExpression();
-      ASTNode variable = DomGenerics.arguments(invocation).get(0);
-      actualAssignment =
-          getLastAssignment(new ExecutionFlowDescription(constructorMethod), variable);
-    }
-    // assert
-    assertSame(expectedAssignment, actualAssignment);
-  }
-
-  /**
-   * In theory, when we ask for last assignment to variable that is not in execution flow, we can
-   * not say this 100% correct. However in some situations, when variable is assigned in field (so,
-   * always visited), we know last assignment.
-   */
-  public void test_findLastAssignment_notInFlow_initializedInField() throws Exception {
-    CompilationUnit compilationUnit =
-        createASTCompilationUnit(
-            "test",
-            "Test.java",
-            getSourceDQ(
-                "package test;",
-                "public class Test {",
-                "  int m_field = 5;",
-                "  public Test() {",
-                "  }",
-                "  private void disconnectedMethod() {",
-                "    System.out.println(m_field);",
-                "  }",
-                "}"));
-    TypeDeclaration typeDeclaration = DomGenerics.types(compilationUnit).get(0);
-    MethodDeclaration constructorMethod = typeDeclaration.getMethods()[0];
-    MethodDeclaration disconnectedMethod = typeDeclaration.getMethods()[1];
-    // prepare expected result
-    VariableDeclaration expectedAssignment;
-    {
-      FieldDeclaration fieldDeclaration = typeDeclaration.getFields()[0];
-      expectedAssignment = DomGenerics.fragments(fieldDeclaration).get(0);
-    }
-    // prepare last assignment visible in "disconnectedMethod"
-    ASTNode actualAssignment;
-    {
-      Statement statement = DomGenerics.statements(disconnectedMethod.getBody()).get(0);
-      MethodInvocation invocation =
-          (MethodInvocation) ((ExpressionStatement) statement).getExpression();
-      ASTNode variable = DomGenerics.arguments(invocation).get(0);
-      actualAssignment =
-          getLastAssignment(new ExecutionFlowDescription(constructorMethod), variable);
-    }
-    // assert
-    assertSame(expectedAssignment, actualAssignment);
-  }
-
-  /**
-   * There was problem that we were not able to find last assignment for field, when application
-   * pattern and class also has constructor.
-   * <p>
-   * Here no constructor, just to check that in this case we have no problem.
-   */
-  public void test_findLastAssignment_applicationPattern_noConstructor() throws Exception {
-    TypeDeclaration typeDeclaration =
-        createTypeDeclaration_Test(
-            "import javax.swing.*;",
-            "public class Test {",
-            "  private JPanel shell;",
-            "  public static void main(String[] args) {",
-            "    Test app = new Test();",
-            "    app.open();",
-            "  }",
-            "  public void open() {",
-            "    shell = new JPanel();",
-            "    System.out.println(shell);",
-            "  }",
-            "}");
-    MethodDeclaration entryPointConstructor = typeDeclaration.getMethods()[0];
-    //
-    Assignment shellAssignment = (Assignment) m_lastEditor.getEnclosingNode("shell =").getParent();
-    SimpleName shellArgument = (SimpleName) m_lastEditor.getEnclosingNode("shell);");
-    //
-    ExecutionFlowDescription flowDescription = new ExecutionFlowDescription(entryPointConstructor);
-    ASTNode lastAssignment = getLastAssignment(flowDescription, shellArgument);
-    assertSame(shellAssignment, lastAssignment);
-  }
-
-  /**
-   * There was problem that we were not able to find last assignment for field, when application
-   * pattern and class also has constructor.
-   */
-  public void test_findLastAssignment_applicationPattern_withConstructor() throws Exception {
-    TypeDeclaration typeDeclaration =
-        createTypeDeclaration_Test(
-            "import javax.swing.*;",
-            "public class Test {",
-            "  private JPanel shell;",
-            "  public static void main(String[] args) {",
-            "    Test app = new Test();",
-            "    app.open();",
-            "  }",
-            "  public Test() {",
-            "  }",
-            "  public void open() {",
-            "    shell = new JPanel();",
-            "    System.out.println(shell);",
-            "  }",
-            "}");
-    MethodDeclaration entryPointConstructor = typeDeclaration.getMethods()[0];
-    //
-    Assignment shellAssignment = (Assignment) m_lastEditor.getEnclosingNode("shell =").getParent();
-    SimpleName shellArgument = (SimpleName) m_lastEditor.getEnclosingNode("shell);");
-    //
-    ExecutionFlowDescription flowDescription = new ExecutionFlowDescription(entryPointConstructor);
-    ASTNode lastAssignment = getLastAssignment(flowDescription, shellArgument);
-    assertSame(shellAssignment, lastAssignment);
-  }
-  private interface I_findLastAssignment {
-    ASTNode getExpected(TypeDeclaration typeDeclaration,
-        MethodDeclaration methodDeclaration,
-        Statement statements[]);
-  }
-
-  private void check_findLastAssignment(String code,
-      int variableStatementIndex,
-      I_findLastAssignment helper) throws Exception {
-    check_findLastAssignment(code, "root()", variableStatementIndex, helper);
-  }
-
-  private void check_findLastAssignment(String code,
-      String methodSignature,
-      int variableStatementIndex,
-      I_findLastAssignment helper) throws Exception {
-    // prepare root methods
-    TypeDeclaration typeDeclaration;
-    MethodDeclaration rootMethod;
-    MethodDeclaration rootMethods[];
-    {
-      typeDeclaration = createTypeDeclaration_TestC(code);
-      rootMethod = AstNodeUtils.getMethodBySignature(typeDeclaration, methodSignature);
-      assertNotNull(rootMethod);
-      rootMethods = new MethodDeclaration[]{rootMethod};
-    }
-    // prepare statements
-    List<Statement> statementsList = DomGenerics.statements(rootMethod.getBody());
-    Statement statements[] = statementsList.toArray(new Statement[statementsList.size()]);
-    // prepare expected assignment and variable
-    ASTNode expectedAssignment = helper.getExpected(typeDeclaration, rootMethod, statements);
-    SimpleName variable =
-        (SimpleName) ((MethodInvocation) ((ExpressionStatement) statements[variableStatementIndex]).getExpression()).arguments().get(
-            0);
-    // do check
-    assertSame(
-        expectedAssignment,
-        getLastAssignment(new ExecutionFlowDescription(rootMethods), variable));
-  }
-
-  public void test_findLastAssignment_cache() throws Exception {
-    // prepare root methods
-    TypeDeclaration typeDeclaration;
-    MethodDeclaration rootMethod;
-    ExecutionFlowDescription flowDescription;
-    {
-      String code = "void root() {int value = 0; System.out.println(value);}";
-      typeDeclaration = createTypeDeclaration_TestC(code);
-      rootMethod = AstNodeUtils.getMethodBySignature(typeDeclaration, "root()");
-      assertNotNull(rootMethod);
-      flowDescription = new ExecutionFlowDescription(rootMethod);
-    }
-    // prepare statements
-    List<Statement> statementsList = DomGenerics.statements(rootMethod.getBody());
-    Statement statements[] = statementsList.toArray(new Statement[statementsList.size()]);
-    // prepare expected assignment and variable
-    ASTNode expectedAssignment =
-        (ASTNode) ((VariableDeclarationStatement) statements[0]).fragments().get(0);
-    SimpleName variable =
-        (SimpleName) ((MethodInvocation) ((ExpressionStatement) statements[1]).getExpression()).arguments().get(
-            0);
-    // do check
-    assertSame(expectedAssignment, getLastAssignment(flowDescription, variable));
-    // this should be cached value
-    assertSame(expectedAssignment, getLastAssignment(flowDescription, variable));
-    // change AST to make cached value stale
-    rootMethod.getName().setIdentifier("root2");
-    assertSame(expectedAssignment, getLastAssignment(flowDescription, variable));
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // getFinalExpression
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link ExecutionFlowUtils#getFinalExpression(ExecutionFlowDescription, Expression)}.<br>
-   * Direct value.
-   */
-  public void test_getFinalExpression_1() throws Exception {
-    check_getFinalExpression("555", new String[]{
-        "package test;",
-        "public class Test {",
-        "  public Test() {",
-        "    int a = !555;",
-        "  }",
-        "}"});
-  }
-
-  /**
-   * Test for {@link ExecutionFlowUtils#getFinalExpression(ExecutionFlowDescription, Expression)}.<br>
-   * Value declared as single variable.
-   */
-  public void test_getFinalExpression_2() throws Exception {
-    check_getFinalExpression("555", new String[]{
-        "package test;",
-        "public class Test {",
-        "  public Test() {",
-        "    int a = 555;",
-        "    System.out.println(!a);",
-        "  }",
-        "}"});
-  }
-
-  /**
-   * Test for {@link ExecutionFlowUtils#getFinalExpression(ExecutionFlowDescription, Expression)}.<br>
-   * Value declared via two variables.
-   */
-  public void test_getFinalExpression_3() throws Exception {
-    check_getFinalExpression("555", new String[]{
-        "package test;",
-        "public class Test {",
-        "  public Test() {",
-        "    int a = 555;",
-        "    int b = a;",
-        "    System.out.println(!b);",
-        "  }",
-        "}"});
-  }
-
-  /**
-   * Test for {@link ExecutionFlowUtils#getFinalExpression(ExecutionFlowDescription, Expression)}.<br>
-   * Value assigned to single variable (not at declaration).
-   */
-  public void test_getFinalExpression_4() throws Exception {
-    check_getFinalExpression("555", new String[]{
-        "package test;",
-        "public class Test {",
-        "  public Test() {",
-        "    int a;",
-        "    a = 555;",
-        "    System.out.println(!a);",
-        "  }",
-        "}"});
-  }
-
-  /**
-   * Test for {@link ExecutionFlowUtils#getFinalExpression(ExecutionFlowDescription, Expression)}.<br>
-   * Value assigned to single field (not at declaration).
-   */
-  public void test_getFinalExpression_5() throws Exception {
-    check_getFinalExpression("555", new String[]{
-        "package test;",
-        "public class Test {",
-        "  private int a;",
-        "  public Test() {",
-        "    a = 555;",
-        "    System.out.println(!a);",
-        "  }",
-        "}"});
-  }
-
-  private void check_getFinalExpression(String expectedSource, String[] lines) throws Exception {
-    TypeDeclaration typeDeclaration;
-    Expression expression;
-    {
-      String source = getSource(lines);
-      int expressionPosition = source.indexOf('!');
-      source = StringUtils.remove(source, '!');
-      typeDeclaration = createTypeDeclaration("test", "Test.java", source);
-      expression = (Expression) AstNodeUtils.getEnclosingNode(typeDeclaration, expressionPosition);
-    }
-    //
-    ExecutionFlowDescription flowDescription =
-        new ExecutionFlowDescription(typeDeclaration.getMethods()[0]);
-    Expression firstAssignment = getFinalExpression(flowDescription, expression);
-    assertEquals(expectedSource, m_lastEditor.getSource(firstAssignment));
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // getAssignments
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_getAssignments_variable() throws Exception {
-    String code = "void root() {int value = 0; System.out.println(value);}";
-    String[] expected = new String[]{"value = 0"};
-    check_getAssignments(code, 1, expected);
-  }
-
-  public void test_getAssignments_variable2() throws Exception {
-    String code = "void root() {int value = 0; value = 1; System.out.println(value);}";
-    String[] expected = new String[]{"value = 0", "value = 1"};
-    check_getAssignments(code, 2, expected);
-  }
-
-  public void test_getAssignments_variable3() throws Exception {
-    String code = "void root() {int value; value = 1; System.out.println(value);}";
-    String[] expected = new String[]{"value = 1"};
-    check_getAssignments(code, 2, expected);
-  }
-
-  public void test_getAssignments_variable_call() throws Exception {
-    String code =
-        "void root() {int value = 0; foo(); System.out.println(value);} void foo() {int value = 2;}";
-    String[] expected = new String[]{"value = 0"};
-    check_getAssignments(code, 2, expected);
-  }
-
-  /**
-   * Assignment to {@link FieldAccess} was caused {@link NullPointerException}, so we use this test
-   * to ensure that this {@link NullPointerException} will not return again.
-   */
-  public void test_getAssignments_variable_usingFieldAccess_inThisUnit() throws Exception {
-    setFileContentSrc(
-        "test/MyObject.java",
-        getSourceDQ("package test;", "public class MyObject {", "  public int m_value;", "}"));
-    waitForAutoBuild();
-    String code =
-        "void root() {int value = 0; System.out.println(value); new MyObject().m_value = 2;}";
-    String[] expected = new String[]{"value = 0"};
-    check_getAssignments(code, 1, expected);
-  }
-
-  public void test_getAssignments_field() throws Exception {
-    String code = "int value = 0; void root() {System.out.println(value);}";
-    String[] expected = new String[]{"value = 0"};
-    check_getAssignments(code, 0, expected);
-  }
-
-  public void test_getAssignments_field_assign() throws Exception {
-    String code = "int value = 0; void root() {value = 1; System.out.println(value);}";
-    String[] expected = new String[]{"value = 0", "value = 1"};
-    check_getAssignments(code, 1, expected);
-  }
-
-  public void test_getAssignments_field_assign2() throws Exception {
-    String code =
-        "int value = 0; void root() {foo(); System.out.println(value);} void foo() {value = 1;}";
-    String[] expected = new String[]{"value = 0", "value = 1"};
-    check_getAssignments(code, 1, expected);
-  }
-
-  public void test_getAssignments_field_hideVariable() throws Exception {
-    String code = "int value = 0; void root() {int value = 1; System.out.println(value);}";
-    String[] expected = new String[]{"value = 1"};
-    check_getAssignments(code, 1, expected);
-  }
-
-  private void check_getAssignments(String code,
-      int variableStatementIndex,
-      String[] expectedAssignments) throws Exception {
-    check_getAssignments(code, "root()", variableStatementIndex, expectedAssignments);
-  }
-
-  private void check_getAssignments(String code,
-      String methodSignature,
-      int variableStatementIndex,
-      String[] expectedAssignments) throws Exception {
-    // prepare root methods
-    TypeDeclaration typeDeclaration;
-    MethodDeclaration rootMethod;
-    ExecutionFlowDescription flowDescription;
-    {
-      typeDeclaration = createTypeDeclaration_TestC(code);
-      rootMethod = AstNodeUtils.getMethodBySignature(typeDeclaration, methodSignature);
-      assertNotNull(rootMethod);
-      flowDescription = new ExecutionFlowDescription(rootMethod);
-    }
-    // prepare statements
-    List<Statement> statementsList = DomGenerics.statements(rootMethod.getBody());
-    Statement statements[] = statementsList.toArray(new Statement[statementsList.size()]);
-    // prepare variable
-    SimpleName variable =
-        (SimpleName) ((MethodInvocation) ((ExpressionStatement) statements[variableStatementIndex]).getExpression()).arguments().get(
-            0);
-    // do check
-    List<Expression> actualAssignments = getAssignments(flowDescription, variable);
-    assertNotNull(actualAssignments);
-    assertEquals(expectedAssignments.length, actualAssignments.size());
-    for (int i = 0; i < expectedAssignments.length; i++) {
-      String expectedAssignment = expectedAssignments[i];
-      String actualAssignment = m_lastEditor.getSource(actualAssignments.get(i));
-      assertEquals(expectedAssignment, actualAssignment);
-    }
-    // check for cache
-    assertSame(actualAssignments, getAssignments(flowDescription, variable));
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // getReferences
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_getReferences_variable() throws Exception {
-    String code = "void root() {int value = 0; System.out.println(value);}";
-    String[] expected = new String[]{"value = 0", "System.out.println(value)"};
-    check_getReferences(code, 1, expected);
-  }
-
-  public void test_getReferences_field() throws Exception {
-    String code = "int value = 0; void root() {value = 1; System.out.println(value);}";
-    String[] expected = new String[]{"value = 0", "value = 1", "System.out.println(value)"};
-    check_getReferences(code, 1, expected);
-  }
-
-  public void test_getReferences_field_2() throws Exception {
-    String code = "int value; void root() {value = 1; System.out.println(value);}";
-    String[] expected = new String[]{"value", "value = 1", "System.out.println(value)"};
-    check_getReferences(code, 1, expected);
-  }
-
-  public void test_getReferences_field_3() throws Exception {
-    String code =
-        "int value; void root() {value = 1; System.out.println(value);} void foo() {value = 2;}";
-    String[] expected =
-        new String[]{"value", "value = 1", "System.out.println(value)", "value = 2"};
-    check_getReferences(code, 1, expected);
-  }
-
-  /**
-   * References on field declared after use.
-   */
-  public void test_getReferences_field_4() throws Exception {
-    String code = "void root() {System.out.println(value);} int value;";
-    String[] expected = new String[]{"value", "System.out.println(value)"};
-    check_getReferences(code, 0, expected);
-  }
-
-  /**
-   * References on field in {@link AnonymousClassDeclaration}.
-   */
-  public void test_getReferences_field_inAnonymous() throws Exception {
-    String code =
-        getSource(
-            "int value;",
-            "void root() {",
-            "  System.out.println(value);",
-            "  new Object() {",
-            "    public int hashCode() {",
-            "      return value;",
-            "    }",
-            "  };",
-            "}");
-    String[] expected = new String[]{"value", "System.out.println(value)", "return value;"};
-    check_getReferences(code, 0, expected);
-  }
-
-  /**
-   * References on field in {@link AnonymousClassDeclaration}.
-   */
-  public void test_getReferences_field_usingThisObject() throws Exception {
-    String code =
-        getSource(
-            "int value;",
-            "void root() {",
-            "  System.out.println(value);",
-            "  new Object() {",
-            "    public int hashCode() {",
-            "      Test test = new Test();",
-            "      return test.value;",
-            "    }",
-            "  };",
-            "}");
-    String[] expected = new String[]{"value", "System.out.println(value)", "test.value"};
-    check_getReferences(code, 0, expected);
-  }
-
-  private void check_getReferences(String code,
-      int variableStatementIndex,
-      String[] expectedAssignments) throws Exception {
-    check_getReferences(code, "root()", variableStatementIndex, expectedAssignments);
-  }
-
-  private void check_getReferences(String code,
-      String methodSignature,
-      int variableStatementIndex,
-      String[] expectedReferences) throws Exception {
-    // prepare root methods
-    TypeDeclaration typeDeclaration;
-    MethodDeclaration rootMethod;
-    ExecutionFlowDescription flowDescription;
-    {
-      typeDeclaration = createTypeDeclaration_TestC(code);
-      rootMethod = AstNodeUtils.getMethodBySignature(typeDeclaration, methodSignature);
-      assertNotNull(rootMethod);
-      flowDescription = new ExecutionFlowDescription(rootMethod);
-    }
-    // prepare statements
-    List<Statement> statementsList = DomGenerics.statements(rootMethod.getBody());
-    Statement statements[] = statementsList.toArray(new Statement[statementsList.size()]);
-    // prepare variable
-    SimpleName variable =
-        (SimpleName) ((MethodInvocation) ((ExpressionStatement) statements[variableStatementIndex]).getExpression()).arguments().get(
-            0);
-    // do check
-    List<Expression> actualReferences = getReferences(flowDescription, variable);
-    assertNotNull(actualReferences);
-    assertEquals(expectedReferences.length, actualReferences.size());
-    for (int i = 0; i < expectedReferences.length; i++) {
-      String expectedAssignment = expectedReferences[i];
-      ASTNode actualReference = actualReferences.get(i);
-      String actualAssignment = m_lastEditor.getSource(actualReference.getParent());
-      assertEquals(expectedAssignment, actualAssignment);
-    }
-    // check for cache
-    assertSame(actualReferences, getReferences(flowDescription, variable));
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // getDeclaration
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_getDeclaration_variable() throws Exception {
-    String code = "void root() {int value = 0; System.out.println(value);}";
-    check_getDeclaration(code, 1, "value = 0");
-  }
-
-  public void test_getDeclaration_methodParameter() throws Exception {
-    String code = "void root(int value) {System.out.println(value);}";
-    check_getDeclaration(code, "root(int)", 0, "int value");
-  }
-
-  public void test_getDeclaration_lazy() throws Exception {
-    createTypeDeclaration_Test(
-        "public class Test {",
-        "  private Object lazy;",
-        "  private Object getLazy() {",
-        "    if (lazy == null) {",
-        "      lazy = new Object();",
-        "    }",
-        "    return lazy;",
-        "  }",
-        "  public void root() {",
-        "    getLazy();",
-        "  }",
-        "}");
-    VariableDeclaration expectedDeclaration = getNode("lazy;", VariableDeclaration.class);
-    SimpleName variable = getNode("lazy = new", SimpleName.class);
-    MethodDeclaration rootMethod = getNode("getLazy()", MethodDeclaration.class);
-    assertSame(
-        expectedDeclaration,
-        getDeclaration(new ExecutionFlowDescription(rootMethod), variable));
-  }
-
-  /**
-   * Test that we can ask for declaration directly {@link SimpleName} of
-   * {@link SingleVariableDeclaration}.
-   */
-  public void test_getDeclaration_methodParameter_direct() throws Exception {
-    TypeDeclaration typeDeclaration =
-        createTypeDeclaration_Test(
-            "public class Test {",
-            "  public void root(int value) {",
-            "  }",
-            "}");
-    MethodDeclaration methodDeclaration = typeDeclaration.getMethods()[0];
-    SingleVariableDeclaration variableDeclaration =
-        (SingleVariableDeclaration) methodDeclaration.parameters().get(0);
-    assertSame(
-        variableDeclaration,
-        getDeclaration(
-            new ExecutionFlowDescription(methodDeclaration),
-            variableDeclaration.getName()));
-  }
-
-  private void check_getDeclaration(String code,
-      int variableStatementIndex,
-      String expectedDeclaration) throws Exception {
-    check_getDeclaration(code, "root()", variableStatementIndex, expectedDeclaration);
-  }
-
-  private void check_getDeclaration(String code,
-      String methodSignature,
-      int variableStatementIndex,
-      String expectedDeclaration) throws Exception {
-    // prepare root methods
-    TypeDeclaration typeDeclaration;
-    MethodDeclaration rootMethod;
-    ExecutionFlowDescription flowDescription;
-    {
-      typeDeclaration = createTypeDeclaration_TestC(code);
-      rootMethod = AstNodeUtils.getMethodBySignature(typeDeclaration, methodSignature);
-      assertNotNull(rootMethod);
-      flowDescription = new ExecutionFlowDescription(rootMethod);
-    }
-    // prepare statements
-    List<Statement> statementsList = DomGenerics.statements(rootMethod.getBody());
-    Statement statements[] = statementsList.toArray(new Statement[statementsList.size()]);
-    // prepare variable
-    SimpleName variable =
-        (SimpleName) ((MethodInvocation) ((ExpressionStatement) statements[variableStatementIndex]).getExpression()).arguments().get(
-            0);
-    // do check
-    VariableDeclaration declaration = getDeclaration(flowDescription, variable);
-    assertEquals(expectedDeclaration, m_lastEditor.getSource(declaration));
-    // check for cache
-    assertSame(declaration, getDeclaration(flowDescription, variable));
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Special case for variable information
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_noVariableInformationForDanglingNode() throws Exception {
-    TypeDeclaration typeDeclaration =
-        createTypeDeclaration_Test(
-            "public class Test {",
-            "  public Test() {",
-            "    int foo = 1;",
-            "    System.out.println(foo);",
-            "  }",
-            "}");
-    MethodDeclaration rootMethod = typeDeclaration.getMethods()[0];
-    ExecutionFlowDescription flowDescription = new ExecutionFlowDescription(rootMethod);
-    ASTNode fooNode = m_lastEditor.getEnclosingNode("foo)");
-    // initial state
-    {
-      VariableDeclaration declaration = getDeclaration(flowDescription, fooNode);
-      assertThat(declaration).isNotNull();
-      Assertions.<ASTNode>assertThat(getReferences(flowDescription, fooNode)).containsOnly(
-          declaration.getName(),
-          fooNode);
-      Assertions.<ASTNode>assertThat(getAssignments(flowDescription, fooNode)).containsOnly(declaration);
-      assertThat(getLastAssignment(flowDescription, fooNode)).isEqualTo(declaration);
-    }
-    // delete Statement for "fooNode", no more variables information
-    m_lastEditor.removeEnclosingStatement(fooNode);
-    {
-      assertThat(getDeclaration(flowDescription, fooNode)).isNull();
-      assertThat(getReferences(flowDescription, fooNode)).isEmpty();
-      assertThat(getAssignments(flowDescription, fooNode)).isEmpty();
-      assertThat(getLastAssignment(flowDescription, fooNode)).isNull();
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // getInvocations()
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link ExecutionFlowUtils#getInvocations(ExecutionFlowDescription, MethodDeclaration)}
-   * .
-   * <p>
-   * {@link ConstructorInvocation}, same signature.
-   */
-  public void test_getInvocations_ConstructorInvocation_1() throws Exception {
-    TypeDeclaration typeDeclaration =
-        createTypeDeclaration_Test(
-            "public class Test {",
-            "  public Test() {",
-            "    this(1);",
-            "  }",
-            "  public Test(int value) {",
-            "  }",
-            "}");
-    MethodDeclaration entryPoint = typeDeclaration.getMethods()[0];
-    MethodDeclaration target = typeDeclaration.getMethods()[1];
-    ExecutionFlowDescription flowDescription = new ExecutionFlowDescription(entryPoint);
-    //
-    List<ASTNode> invocations = ExecutionFlowUtils.getInvocations(flowDescription, target);
-    assertThat(invocations).hasSize(1);
-    assertEquals("this(1);", m_lastEditor.getSource(invocations.get(0)));
-  }
-
-  /**
-   * Test for {@link ExecutionFlowUtils#getInvocations(ExecutionFlowDescription, MethodDeclaration)}
-   * .
-   * <p>
-   * {@link ConstructorInvocation}, different signature.
-   */
-  public void test_getInvocations_ConstructorInvocation_2() throws Exception {
-    TypeDeclaration typeDeclaration =
-        createTypeDeclaration_Test(
-            "public class Test {",
-            "  public Test() {",
-            "    this(false);",
-            "  }",
-            "  public Test(int value) {",
-            "  }",
-            "  public Test(boolean value) {",
-            "  }",
-            "}");
-    MethodDeclaration entryPoint = typeDeclaration.getMethods()[0];
-    MethodDeclaration target = typeDeclaration.getMethods()[1];
-    ExecutionFlowDescription flowDescription = new ExecutionFlowDescription(entryPoint);
-    //
-    List<ASTNode> invocations = ExecutionFlowUtils.getInvocations(flowDescription, target);
-    assertThat(invocations).isEmpty();
-  }
-
-  /**
-   * Test for {@link ExecutionFlowUtils#getInvocations(ExecutionFlowDescription, MethodDeclaration)}
-   * .
-   * <p>
-   * {@link ClassInstanceCreation}, same signature.
-   */
-  public void test_getInvocations_ClassInstanceCreation_1() throws Exception {
-    TypeDeclaration typeDeclaration =
-        createTypeDeclaration_Test(
-            "public class Test {",
-            "  public static void main(String[] args) {",
-            "    Test test = new Test(1);",
-            "  }",
-            "  public Test(int value) {",
-            "  }",
-            "  public static void main2() {",
-            "    Test test = new Test(2);",
-            "  }",
-            "}");
-    MethodDeclaration entryPoint = typeDeclaration.getMethods()[0];
-    MethodDeclaration target = typeDeclaration.getMethods()[1];
-    ExecutionFlowDescription flowDescription = new ExecutionFlowDescription(entryPoint);
-    //
-    List<ASTNode> invocations = ExecutionFlowUtils.getInvocations(flowDescription, target);
-    assertThat(invocations).hasSize(1);
-    assertEquals("new Test(1)", m_lastEditor.getSource(invocations.get(0)));
-  }
-
-  /**
-   * Test for {@link ExecutionFlowUtils#getInvocations(ExecutionFlowDescription, MethodDeclaration)}
-   * .
-   * <p>
-   * {@link ClassInstanceCreation}, different signature.
-   */
-  public void test_getInvocations_ClassInstanceCreation_2() throws Exception {
-    TypeDeclaration typeDeclaration =
-        createTypeDeclaration_Test(
-            "public class Test {",
-            "  public static void main(String[] args) {",
-            "    Test test = new Test(false);",
-            "  }",
-            "  public Test(int value) {",
-            "  }",
-            "  public Test(boolean value) {",
-            "  }",
-            "}");
-    MethodDeclaration entryPoint = typeDeclaration.getMethods()[0];
-    MethodDeclaration target = typeDeclaration.getMethods()[1];
-    ExecutionFlowDescription flowDescription = new ExecutionFlowDescription(entryPoint);
-    //
-    List<ASTNode> invocations = ExecutionFlowUtils.getInvocations(flowDescription, target);
-    assertThat(invocations).isEmpty();
-  }
-
-  /**
-   * Test for {@link ExecutionFlowUtils#getInvocations(ExecutionFlowDescription, MethodDeclaration)}
-   * .
-   * <p>
-   * {@link MethodInvocation}, same signature.
-   */
-  public void test_getInvocations_MethodInvocation_1() throws Exception {
-    TypeDeclaration typeDeclaration =
-        createTypeDeclaration_Test(
-            "public class Test {",
-            "  public Test() {",
-            "    target(1);",
-            "  }",
-            "  public void target(int value) {",
-            "  }",
-            "  public void disconnectedMethod() {",
-            "    target(2);",
-            "  }",
-            "}");
-    MethodDeclaration entryPoint = typeDeclaration.getMethods()[0];
-    MethodDeclaration target = typeDeclaration.getMethods()[1];
-    ExecutionFlowDescription flowDescription = new ExecutionFlowDescription(entryPoint);
-    //
-    List<ASTNode> invocations = ExecutionFlowUtils.getInvocations(flowDescription, target);
-    assertThat(invocations).hasSize(1);
-    assertEquals("target(1)", m_lastEditor.getSource(invocations.get(0)));
-  }
-
-  /**
-   * Test for {@link ExecutionFlowUtils#getInvocations(ExecutionFlowDescription, MethodDeclaration)}
-   * .
-   * <p>
-   * {@link MethodInvocation}, different signature.
-   */
-  public void test_getInvocations_MethodInvocation_2() throws Exception {
-    TypeDeclaration typeDeclaration =
-        createTypeDeclaration_Test(
-            "public class Test {",
-            "  public Test() {",
-            "    notTarget(false);",
-            "  }",
-            "  public void targetMethod(int value) {",
-            "  }",
-            "  public void notTarget(boolean value) {",
-            "  }",
-            "}");
-    MethodDeclaration entryPoint = typeDeclaration.getMethods()[0];
-    MethodDeclaration target = typeDeclaration.getMethods()[1];
-    ExecutionFlowDescription flowDescription = new ExecutionFlowDescription(entryPoint);
-    //
-    List<ASTNode> invocations = ExecutionFlowUtils.getInvocations(flowDescription, target);
-    assertThat(invocations).isEmpty();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Life cycle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void setUp() throws Exception {
+		super.setUp();
+		if (m_testProject == null) {
+			do_projectCreate();
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// getExecutionFlowConstructor()
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link ExecutionFlowUtils#getExecutionFlowConstructor(TypeDeclaration)}.
+	 */
+	public void test_getExecutionFlowConstructor_single() throws Exception {
+		TypeDeclaration typeDeclaration =
+				createTypeDeclaration_Test(
+						"// filler filler filler",
+						"public class Test {",
+						"  public Test() {",
+						"  }",
+						"}");
+		assertSame(
+				typeDeclaration.getMethods()[0],
+				ExecutionFlowUtils.getExecutionFlowConstructor(typeDeclaration));
+	}
+
+	/**
+	 * Test for {@link ExecutionFlowUtils#getExecutionFlowConstructor(TypeDeclaration)}.
+	 */
+	public void test_getExecutionFlowConstructor_noConstructors() throws Exception {
+		TypeDeclaration typeDeclaration =
+				createTypeDeclaration_Test(
+						"// filler filler filler",
+						"public class Test {",
+						"  // filler",
+						"}");
+		assertSame(null, ExecutionFlowUtils.getExecutionFlowConstructor(typeDeclaration));
+	}
+
+	/**
+	 * Test for {@link ExecutionFlowUtils#getExecutionFlowConstructor(TypeDeclaration)}.
+	 */
+	public void test_getExecutionFlowConstructor_multipleWithTag() throws Exception {
+		TypeDeclaration typeDeclaration =
+				createTypeDeclaration_Test(
+						"public class Test {",
+						"  public Test(int a) {",
+						"  }",
+						"  /**",
+						"  * @wbp.parser.constructor",
+						"  */",
+						"  public Test(double b) {",
+						"  }",
+						"}");
+		assertSame(
+				typeDeclaration.getMethods()[1],
+				ExecutionFlowUtils.getExecutionFlowConstructor(typeDeclaration));
+	}
+
+	/**
+	 * Test for {@link ExecutionFlowUtils#getExecutionFlowConstructor(TypeDeclaration)}.
+	 */
+	public void test_getExecutionFlowConstructor_multipleNoTag_noDefault() throws Exception {
+		TypeDeclaration typeDeclaration =
+				createTypeDeclaration_Test(
+						"public class Test {",
+						"  public Test(int a) {",
+						"  }",
+						"  public Test(double b) {",
+						"  }",
+						"}");
+		try {
+			ExecutionFlowUtils.getExecutionFlowConstructor(typeDeclaration);
+			fail();
+		} catch (MultipleConstructorsError e) {
+			assertSame(null, e.getEditor());
+			assertSame(null, e.getTypeDeclaration());
+		}
+	}
+	/**
+	 * {@link ExecutionFlowProvider} that selects constructor with single <code>int</code> parameter
+	 * as default.
+	 */
+	public static class ExecutionFlowProvider_forDefaultConstructor extends ExecutionFlowProvider {
+		@Override
+		public MethodDeclaration getDefaultConstructor(TypeDeclaration typeDeclaration) {
+			for (MethodDeclaration constructor : AstNodeUtils.getConstructors(typeDeclaration)) {
+				if ("<init>(int)".equals(AstNodeUtils.getMethodSignature(constructor))) {
+					return constructor;
+				}
+			}
+			return null;
+		}
+	}
+
+	/**
+	 * Test for {@link ExecutionFlowUtils#getExecutionFlowConstructor(TypeDeclaration)} and using
+	 * {@link ExecutionFlowProvider#getDefaultConstructor(TypeDeclaration)}.
+	 */
+	public void test_getExecutionFlowConstructor_multipleNoTag_useExecutionFlowProvider()
+			throws Exception {
+		TestBundle testBundle = new TestBundle();
+		try {
+			Class<?> providerClass = ExecutionFlowProvider_forDefaultConstructor.class;
+			testBundle.addClass(providerClass);
+			testBundle.addExtension(
+					"org.eclipse.wb.core.java.executionFlowProviders",
+					"<provider class='" + providerClass.getName() + "'/>");
+			testBundle.install();
+			try {
+				TypeDeclaration typeDeclaration =
+						createTypeDeclaration_Test(
+								"public class Test {",
+								"  public Test() {",
+								"  }",
+								"  public Test(int a) {",
+								"  }",
+								"}");
+				assertSame(
+						typeDeclaration.getMethods()[1],
+						ExecutionFlowUtils.getExecutionFlowConstructor(typeDeclaration));
+			} finally {
+				testBundle.uninstall();
+			}
+		} finally {
+			testBundle.dispose();
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// getExecutionFlow_entryPoint()
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link ExecutionFlowUtils#getExecutionFlow_entryPoint(TypeDeclaration)}.
+	 */
+	public void test_getExecutionFlow_entryPoint_forConstructor_0() throws Exception {
+		TypeDeclaration typeDeclaration =
+				createTypeDeclaration_Test(
+						"public class Test {",
+						"  public Test(int a) {",
+						"  }",
+						"  public Test(double b) {",
+						"  }",
+						"}");
+		assertSame(null, ExecutionFlowUtils.getExecutionFlow_entryPoint(typeDeclaration));
+	}
+
+	/**
+	 * Test for {@link ExecutionFlowUtils#getExecutionFlow_entryPoint(TypeDeclaration)}.
+	 */
+	public void test_getExecutionFlow_entryPoint_forConstructor_1() throws Exception {
+		TypeDeclaration typeDeclaration =
+				createTypeDeclaration_Test(
+						"public class Test {",
+						"  /**",
+						"  * @wbp.parser.entryPoint",
+						"  */",
+						"  public Test(int a) {",
+						"  }",
+						"  public Test(double b) {",
+						"  }",
+						"}");
+		assertSame(
+				typeDeclaration.getMethods()[0],
+				ExecutionFlowUtils.getExecutionFlow_entryPoint(typeDeclaration));
+	}
+
+	/**
+	 * Test for {@link ExecutionFlowUtils#getExecutionFlow_entryPoint(TypeDeclaration)}.
+	 */
+	public void test_getExecutionFlow_entryPoint_forConstructor_2() throws Exception {
+		TypeDeclaration typeDeclaration =
+				createTypeDeclaration_Test(
+						"public class Test {",
+						"  public Test(int a) {",
+						"  }",
+						"  /**",
+						"  * @wbp.parser.entryPoint",
+						"  */",
+						"  public Test(double b) {",
+						"  }",
+						"}");
+		assertSame(
+				typeDeclaration.getMethods()[1],
+				ExecutionFlowUtils.getExecutionFlow_entryPoint(typeDeclaration));
+	}
+
+	/**
+	 * Test for {@link ExecutionFlowUtils#getExecutionFlow_entryPoint(TypeDeclaration)}.
+	 */
+	public void test_getExecutionFlow_entryPoint_forMethod() throws Exception {
+		TypeDeclaration typeDeclaration =
+				createTypeDeclaration_Test(
+						"public class Test {",
+						"  /**",
+						"  * @wbp.parser.entryPoint",
+						"  */",
+						"  public void foo() {",
+						"  }",
+						"  public void bar() {",
+						"  }",
+						"}");
+		assertSame(
+				typeDeclaration.getMethods()[0],
+				ExecutionFlowUtils.getExecutionFlow_entryPoint(typeDeclaration));
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// visit
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_visit_empty() throws Exception {
+		String code = "Test() {} void root() {}";
+		String expectedNodes[] = {};
+		check_visitNodes(code, expectedNodes, "root()");
+	}
+
+	public void test_visit_statement() throws Exception {
+		String code = "Test() {} void root() {int value = 5;}";
+		String expectedNodes[] = {"int value = 5;"};
+		check_visitNodes(code, expectedNodes, "root()");
+	}
+
+	public void test_visit_TryStatement() throws Exception {
+		String code =
+				getSourceDQ(
+						"void root() {",
+						"  try {",
+						"    int value = 5;",
+						"  } catch (Exception e) {",
+						"  } catch (Throwable e) {",
+						"  }",
+						"}");
+		String expectedNodes[] = {"int value = 5;"};
+		check_visitNodes(code, expectedNodes, "root()");
+	}
+
+	public void test_visit_fields() throws Exception {
+		String code =
+				"int m_value = 1; Test() {} void root() {int value = 5;} private String m_string;";
+		String expectedNodes[] = {"int m_value = 1;", "private String m_string;", "int value = 5;"};
+		check_visitNodes(code, expectedNodes, "root()");
+	}
+
+	public void test_visit_fields2() throws Exception {
+		String code =
+				getSourceDQ(
+						"Test() {",
+						"}",
+						"void root() {",
+						"  int value = 5;",
+						"}",
+						"int m_value = 1;",
+						"private String m_string;");
+		String expectedNodes[] = {"int m_value = 1;", "private String m_string;", "int value = 5;"};
+		check_visitNodes(code, expectedNodes, "root()");
+	}
+
+	public void test_visit_initializers_static() throws Exception {
+		String code =
+				getSourceDQ(
+						"// filler filler filler filler filler",
+						"static int foo;",
+						"static {",
+						"  int bar;",
+						"}",
+						"void root() {",
+						"}");
+		String expectedNodes[] = {"static int foo;", "int bar;"};
+		check_visitNodes(code, expectedNodes, "root()");
+	}
+
+	public void test_visit_initializers_instance() throws Exception {
+		String code =
+				getSourceDQ(
+						"// filler filler filler filler filler",
+						"int foo;",
+						"{",
+						"  int bar;",
+						"}",
+						"void root() {",
+						"}");
+		String expectedNodes[] = {"int foo;", "int bar;"};
+		check_visitNodes(code, expectedNodes, "root()");
+	}
+
+	public void test_visit_statements() throws Exception {
+		String code = "Test() {} void root() {System.out.println();  System.exit(0);}";
+		String expectedNodes[] = {"System.out.println();", "System.exit(0);"};
+		check_visitNodes(code, expectedNodes, "root()");
+	}
+
+	public void test_visit_single_constructor() throws Exception {
+		String code = "int f; Test() {System.out.println();} void root() {System.exit(0);}";
+		String expectedNodes[] = {"int f;", "System.out.println();", "System.exit(0);"};
+		check_visitNodes(code, expectedNodes, "<init>", "root()");
+	}
+
+	/**
+	 * Even when there are no constructor, instance field still should be visited.
+	 */
+	public void test_visit_noConstructor() throws Exception {
+		String code = "int f; void root() {System.exit(0);}";
+		String expectedNodes[] = {"int f;", "System.exit(0);"};
+		check_visitNodes(code, expectedNodes, "root()");
+	}
+
+	/**
+	 * No constructor, but static and instance fields should be visited.
+	 */
+	public void test_visit_noConstructor_withStatic() throws Exception {
+		String code = "static int s; int f; void root() {System.exit(0);}";
+		String expectedNodes[] = {"static int s;", "int f;", "System.exit(0);"};
+		check_visitNodes(code, expectedNodes, "root()");
+	}
+
+	public void test_visit_local_constructor() throws Exception {
+		String code =
+				getSourceDQ(
+						"public static void main(String[] args) {",
+						"  Test test = new Test();",
+						"}",
+						"public Test() {",
+						"  System.out.println();",
+						"}");
+		String expectedNodes[] = {"System.out.println();", "Test test = new Test();"};
+		check_visitNodes(code, expectedNodes, "main(java.lang.String[])");
+	}
+
+	public void test_visit_localMethod_fromMain() throws Exception {
+		String code =
+				getSourceDQ(
+						"private int field;",
+						"public static void main(String[] args) {",
+						"  Test test = new Test();",
+						"  test.open();",
+						"}",
+						"public Test() {",
+						"  int a;",
+						"}",
+						"public void open() {",
+						"  field = 0;",
+						"}");
+		String expectedNodes[] =
+			{"private int field;", "int a;", "Test test = new Test();", "field = 0;", "test.open();"};
+		check_visitNodes(code, expectedNodes, "main(java.lang.String[])");
+	}
+
+	public void test_visit_several_constructors_good() throws Exception {
+		String code =
+				getSourceDQ(
+						"/** @wbp.parser.constructor */",
+						"Test() {",
+						"  System.out.println();",
+						"}",
+						"Test(int foo) {",
+						"}",
+						"void root() {",
+						"  System.exit(0);",
+						"}");
+		String expectedNodes[] = {"System.out.println();", "System.exit(0);"};
+		check_visitNodes(code, expectedNodes, "<init>", "root()");
+	}
+
+	/**
+	 * When super() constructor invokes some protected method, <code>createContents()</code> in this
+	 * test, we visit constructor <em>after</em> this method.<br>
+	 * Note also, that in theory we should visit fields after <code>createContents()</code>, but
+	 * practically it is possible, that there are assignments in method to fields, so to use variable
+	 * declaration/assignment tracking, we should visit fields before.
+	 */
+	public void test_visit_constructorInTheMiddle() throws Exception {
+		String code =
+				getSourceDQ(
+						"private int f;",
+						"Test() {",
+						"  int a;",
+						"}",
+						"void createContents() {",
+						"  int b;",
+						"  f = 1;",
+						"}");
+		String expectedNodes[] = {"private int f;", "int b;", "f = 1;", "int a;"};
+		check_visitNodes(code, expectedNodes, "createContents()", "<init>");
+	}
+
+	public void test_visit_static() throws Exception {
+		String code = "Test() {System.out.println();} static int m_value; static void root() {}";
+		String expectedNodes[] = {"static int m_value;"};
+		check_visitNodes(code, expectedNodes, "root()");
+	}
+
+	public void test_visit_constructor() throws Exception {
+		String code = "Test() {System.out.println();}";
+		String expectedNodes[] = {"System.out.println();"};
+		check_visitNodes(code, expectedNodes, "<init>()");
+	}
+
+	public void test_visit_ifStatement_genericExpression() throws Exception {
+		String code =
+				getSourceDQ(
+						"void root() {",
+						"  int a;",
+						"  if (1 == 2) {",
+						"    int b;",
+						"  } else {",
+						"    int c;",
+						"  }",
+						"}");
+		String expectedNodes[] = {"int a;"};
+		check_visitNodes(code, expectedNodes, "root()");
+	}
+
+	public void test_visit_ifStatement_true() throws Exception {
+		String code =
+				getSourceDQ(
+						"void root() {",
+						"  if (true) {",
+						"    int a;",
+						"  } else {",
+						"    int b;",
+						"  }",
+						"}");
+		String expectedNodes[] = {"int a;"};
+		check_visitNodes(code, expectedNodes, "root()");
+	}
+
+	public void test_visit_ifStatement_false() throws Exception {
+		String code =
+				getSourceDQ(
+						"void root() {",
+						"  if (false) {",
+						"    int a;",
+						"  } else {",
+						"    int b;",
+						"  }",
+						"}");
+		String expectedNodes[] = {"int b;"};
+		check_visitNodes(code, expectedNodes, "root()");
+	}
+
+	public void test_visit_ifStatement_Beans_isDesignTime() throws Exception {
+		String code =
+				getSourceDQ(
+						"void root() {",
+						"  if (java.beans.Beans.isDesignTime()) {",
+						"    int a;",
+						"  } else {",
+						"    int b;",
+						"  }",
+						"}");
+		String expectedNodes[] = {"int a;"};
+		check_visitNodes(code, expectedNodes, "root()");
+	}
+
+	public void test_visit_ifStatement_Beans_isDesignTime_not() throws Exception {
+		String code =
+				getSourceDQ(
+						"void root() {",
+						"  if (!java.beans.Beans.isDesignTime()) {",
+						"    int a;",
+						"  } else {",
+						"    int b;",
+						"  }",
+						"}");
+		String expectedNodes[] = {"int b;"};
+		check_visitNodes(code, expectedNodes, "root()");
+	}
+
+	public void test_visit_ifStatement_local_isDesignTime() throws Exception {
+		String code =
+				getSourceDQ(
+						"void root() {",
+						"  if (isDesignTime()) {",
+						"    int a;",
+						"  } else {",
+						"    int b;",
+						"  }",
+						"}",
+						"private static boolean isDesignTime() {",
+						"  return false;",
+						"}");
+		String expectedNodes[] = {"int a;"};
+		check_visitNodes(code, expectedNodes, "root()");
+	}
+
+	public void test_visit_ifStatement_local_isDesignTime_not() throws Exception {
+		String code =
+				getSourceDQ(
+						"void root() {",
+						"  if (!isDesignTime()) {",
+						"    int a;",
+						"  } else {",
+						"    int b;",
+						"  }",
+						"}",
+						"private static boolean isDesignTime() {",
+						"  return false;",
+						"}");
+		String expectedNodes[] = {"int b;"};
+		check_visitNodes(code, expectedNodes, "root()");
+	}
+
+	public void test_visit_ifStatement_lazy() throws Exception {
+		String code =
+				getSourceDQ(
+						"Object lazy;",
+						"Object getLazy() {",
+						"  if (lazy == null) {",
+						"    lazy = null;",
+						"  }",
+						"  return lazy;",
+						"}");
+		String expectedNodes[] = {"Object lazy;", "lazy = null;", "return lazy;"};
+		check_visitNodes(code, expectedNodes, "getLazy()");
+	}
+
+	public void test_visit_ifStatement_otherCondition() throws Exception {
+		String code = "void root() {int a; if (1 == 2) {int b;}}";
+		String expectedNodes[] = {"int a;"};
+		check_visitNodes(code, expectedNodes, "root()");
+	}
+
+	public void test_visit_invocation() throws Exception {
+		String code = "void root() {System.out.println(); foo();}  void foo() {System.exit(0);}";
+		String expectedNodes[] = {"System.out.println();", "System.exit(0);", "foo();"};
+		check_visitNodes(code, expectedNodes, "root()");
+	}
+
+	public void test_visit_invocation_recursion() throws Exception {
+		String code =
+				getSourceDQ(
+						"void root() {",
+						"  System.out.println(0);",
+						"  foo();",
+						"}",
+						"void foo() {",
+						"  System.out.println(1);",
+						"  foo();",
+						"}");
+		String expectedNodes[] =
+			{"System.out.println(0);", "System.out.println(1);", "foo();", "foo();"};
+		check_visitNodes(code, expectedNodes, "root()");
+	}
+
+	private void check_visitNodes(String code,
+			final String expectedNodes[],
+			String... methodSignatures) throws Exception {
+		// prepare root methods
+		MethodDeclaration rootMethods[];
+		{
+			TypeDeclaration typeDeclaration = createTypeDeclaration_TestC(code);
+			rootMethods = new MethodDeclaration[methodSignatures.length];
+			for (int i = 0; i < methodSignatures.length; i++) {
+				String methodSignature = methodSignatures[i];
+				if (methodSignature.equals("<init>")) {
+					// when just "<init>" name, without parameters, find constructor using ExecutionFlowUtils
+					rootMethods[i] = getExecutionFlowConstructor(typeDeclaration);
+				} else {
+					// normal method
+					rootMethods[i] = AstNodeUtils.getMethodBySignature(typeDeclaration, methodSignature);
+				}
+			}
+		}
+		// do check
+		check_visitNodes(rootMethods, expectedNodes);
+	}
+
+	private void check_visitNodes(MethodDeclaration[] rootMethods, final String[] expectedNodes) {
+		// visit and check that visited nodes are same as expected
+		final int indexWrapper[] = new int[]{0};
+		ExecutionFlowDescription flowDescription = new ExecutionFlowDescription(rootMethods);
+		visit(new VisitingContext(true), flowDescription, new ExecutionFlowFrameVisitor() {
+			@Override
+			public void postVisit(ASTNode node) {
+				if (node instanceof Statement && !(node instanceof Block)) {
+					assertNextNode(node);
+				}
+			}
+
+			@Override
+			public void endVisit(FieldDeclaration node) {
+				assertNextNode(node);
+			}
+
+			private void assertNextNode(ASTNode node) {
+				String actualNodeSource;
+				try {
+					actualNodeSource = m_lastEditor.getSource(node);
+				} catch (Throwable e) {
+					throw ReflectionUtils.propagate(e);
+				}
+				int index = indexWrapper[0]++;
+				assertEquals(expectedNodes[index], actualNodeSource);
+			}
+		});
+		// all expected nodes should be visited
+		assertEquals(expectedNodes.length, indexWrapper[0]);
+	}
+
+	public void test_visit_abstractMethod() throws Exception {
+		TypeDeclaration typeDeclaration =
+				createTypeDeclaration_Test(
+						"public abstract class Test {",
+						"  public void root() {",
+						"    someAbstractMethod();",
+						"  }",
+						"  protected abstract void someAbstractMethod();",
+						"}");
+		MethodDeclaration rootMethod = typeDeclaration.getMethods()[0];
+		//
+		MethodDeclaration[] rootMethods = new MethodDeclaration[]{rootMethod};
+		String expectedNodes[] = {"someAbstractMethod();"};
+		check_visitNodes(rootMethods, expectedNodes);
+	}
+
+	public void test_visit_ConstructorInvocation() throws Exception {
+		TypeDeclaration typeDeclaration =
+				createTypeDeclaration_Test(
+						"public class Test {",
+						"  public Test() {",
+						"    this(false);",
+						"  }",
+						"  public Test(boolean b) {",
+						"    int a;",
+						"  }",
+						"}");
+		MethodDeclaration rootMethod = typeDeclaration.getMethods()[0];
+		//
+		MethodDeclaration[] rootMethods = new MethodDeclaration[]{rootMethod};
+		String expectedNodes[] = {"int a;", "this(false);"};
+		check_visitNodes(rootMethods, expectedNodes);
+	}
+
+	public void test_visit_ConstructorInvocation_visitArgumentsFirst() throws Exception {
+		TypeDeclaration typeDeclaration =
+				createTypeDeclaration(
+						"test",
+						"Test.java",
+						getSource(
+								"public class Test {",
+								"  public Test() {",
+								"    this(false);",
+								"  }",
+								"  public Test(boolean parameter) {",
+								"  }",
+								"}"));
+		// prepare flow
+		ExecutionFlowDescription flowDescription;
+		{
+			MethodDeclaration rootMethod = typeDeclaration.getMethods()[0];
+			MethodDeclaration[] rootMethods = new MethodDeclaration[]{rootMethod};
+			flowDescription = new ExecutionFlowDescription(rootMethods);
+		}
+		// visit
+		final List<String> nodes = Lists.newArrayList();
+		visit(new VisitingContext(true), flowDescription, new ExecutionFlowFrameVisitor() {
+			@Override
+			public void postVisit(ASTNode node) {
+				boolean isSingleStatement = node instanceof Statement && !(node instanceof Block);
+				if (isSingleStatement || node instanceof Expression) {
+					nodes.add(m_lastEditor.getSource(node));
+				}
+			}
+		});
+		assertThat(nodes).containsExactly("false", "parameter", "this(false);");
+	}
+
+	/**
+	 * There is implementation detail of {@link ExecutionFlowUtils} - use use
+	 * {@link Method#invoke(Object, Object...)}, so this wraps original exception into
+	 * {@link InvocationTargetException}. This is not good, we should not expose this.
+	 */
+	public void test_visit_unwrapInvocationTargetException() throws Exception {
+		TypeDeclaration typeDeclaration =
+				createTypeDeclaration(
+						"test",
+						"Test.java",
+						getSource(
+								"public class Test {",
+								"  public Test() {",
+								"    System.out.println();",
+								"  }",
+								"}"));
+		// prepare flow
+		ExecutionFlowDescription flowDescription;
+		{
+			MethodDeclaration rootMethod = typeDeclaration.getMethods()[0];
+			MethodDeclaration[] rootMethods = new MethodDeclaration[]{rootMethod};
+			flowDescription = new ExecutionFlowDescription(rootMethods);
+		}
+		// visit
+		final Error exception = new Error();
+		try {
+			visit(new VisitingContext(true), flowDescription, new ExecutionFlowFrameVisitor() {
+				@Override
+				public void endVisit(SimpleName node) {
+					if (node.toString().equals("println")) {
+						throw exception;
+					}
+				}
+			});
+		} catch (Throwable e) {
+			assertSame(exception, e);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Visiting and AnonymousClassDeclaration
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for ignoring {@link AnonymousClassDeclaration}.
+	 * <p>
+	 * {@link Runnable} in {@link Thread} should not be visited.
+	 */
+	public void test_visit_AnonymousClassDeclaration_noVisit() throws Exception {
+		String threadCode = "new Thread(new Runnable() {public void run() {int a;}});";
+		String code = "void root() {" + threadCode + "}";
+		String expectedNodes[] = {threadCode};
+		check_visitNodes(code, expectedNodes, "root()");
+	}
+
+	/**
+	 * Test for ignoring {@link AnonymousClassDeclaration}.
+	 * <p>
+	 * {@link Runnable} in {@link Thread} should not be visited, and invocations also should not be
+	 * followed.
+	 */
+	public void test_visit_AnonymousClassDeclaration_withInvocation() throws Exception {
+		String threadCode = "new Thread(new Runnable() {public void run() {foo();}});";
+		String code = "void root() {" + threadCode + "} void foo() {int b;}";
+		String expectedNodes[] = {threadCode};
+		check_visitNodes(code, expectedNodes, "root()");
+	}
+	/**
+	 * {@link ExecutionFlowProvider} that allows visiting anonymous {@link Runnable} as argument of
+	 * {@link Thread} creation.
+	 */
+	public static class ExecutionFlowProvider_RunnableInThread extends ExecutionFlowProvider {
+		@Override
+		public boolean shouldVisit(AnonymousClassDeclaration anonymous) throws Exception {
+			if (AstNodeUtils.isSuccessorOf(anonymous.resolveBinding(), "java.lang.Runnable")) {
+				ASTNode anonymousCreation = anonymous.getParent();
+				if (anonymousCreation.getLocationInParent() == ClassInstanceCreation.ARGUMENTS_PROPERTY) {
+					Expression enclosingCreation = (ClassInstanceCreation) anonymousCreation.getParent();
+					if (AstNodeUtils.isSuccessorOf(enclosingCreation, "java.lang.Thread")) {
+						return true;
+					}
+				}
+			}
+			return false;
+		}
+	}
+
+	/**
+	 * Test for ignoring {@link AnonymousClassDeclaration}.
+	 * <p>
+	 * In general {@link Runnable} in {@link Thread} should not be visited, and invocations also
+	 * should not be followed. However we install special {@link ExecutionFlowProvider} that allows
+	 * such visiting.
+	 */
+	public void test_visit_AnonymousClassDeclaration_withInvocation_doVisit() throws Exception {
+		TestBundle testBundle = new TestBundle();
+		try {
+			Class<?> providerClass = ExecutionFlowProvider_RunnableInThread.class;
+			testBundle.addClass(providerClass);
+			testBundle.addExtension(
+					"org.eclipse.wb.core.java.executionFlowProviders",
+					"<provider class='" + providerClass.getName() + "'/>");
+			testBundle.install();
+			try {
+				String threadCode = "new Thread(new Runnable() {public void run() {foo();}});";
+				String code = "void root() {" + threadCode + "} void foo() {int b;}";
+				String expectedNodes[] = {"int b;", "foo();", threadCode};
+				check_visitNodes(code, expectedNodes, "root()");
+			} finally {
+				testBundle.uninstall();
+			}
+		} finally {
+			testBundle.dispose();
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// findLastAssignment
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_findLastAssignment_variable() throws Exception {
+		String code = "void root() {int value = 0; System.out.println(value);}";
+		check_findLastAssignment(code, 1, new I_findLastAssignment() {
+			@Override
+			public ASTNode getExpected(TypeDeclaration typeDeclaration,
+					MethodDeclaration methodDeclaration,
+					Statement[] statements) {
+				return (ASTNode) ((VariableDeclarationStatement) statements[0]).fragments().get(0);
+			}
+		});
+	}
+
+	/**
+	 * If "left" side of assignment is variable, its last assignment is this assignment.
+	 */
+	public void test_findLastAssignment_variable_recursiveAssignment_leftSide() throws Exception {
+		// prepare root methods
+		TypeDeclaration typeDeclaration;
+		MethodDeclaration rootMethod;
+		MethodDeclaration rootMethods[];
+		{
+			String code = "void root() {int value; value = 1;}";
+			typeDeclaration = createTypeDeclaration_TestC(code);
+			rootMethod = AstNodeUtils.getMethodBySignature(typeDeclaration, "root()");
+			assertNotNull(rootMethod);
+			rootMethods = new MethodDeclaration[]{rootMethod};
+		}
+		// prepare statements
+		List<Statement> statementsList = DomGenerics.statements(rootMethod.getBody());
+		Statement statements[] = statementsList.toArray(new Statement[statementsList.size()]);
+		// prepare variable and assignment
+		Assignment assignment;
+		SimpleName variable;
+		{
+			assignment = (Assignment) ((ExpressionStatement) statements[1]).getExpression();
+			variable = (SimpleName) assignment.getLeftHandSide();
+		}
+		//
+		ASTNode lastAssignment = getLastAssignment(new ExecutionFlowDescription(rootMethods), variable);
+		assertSame(assignment, lastAssignment);
+	}
+
+	/**
+	 * Variable in "right" side of assignment should see previous value.
+	 */
+	public void test_findLastAssignment_variable_recursiveAssignment_rightSide() throws Exception {
+		TypeDeclaration typeDeclaration =
+				createTypeDeclaration_Test(
+						"class Test {",
+						"  // filler filler filler",
+						"  void root() {",
+						"    int value = 0;",
+						"    value = value + 1;",
+						"  }",
+						"}");
+		MethodDeclaration rootMethod = AstNodeUtils.getMethodBySignature(typeDeclaration, "root()");
+		// prepare variable
+		ASTNode variable = m_lastEditor.getEnclosingNode("value + 1");
+		VariableDeclarationFragment expected =
+				(VariableDeclarationFragment) m_lastEditor.getEnclosingNode("value = 0").getParent();
+		// check last assignment
+		{
+			ASTNode lastAssignment =
+					getLastAssignment(new ExecutionFlowDescription(rootMethod), variable);
+			assertNotNull(lastAssignment);
+			assertSame(expected, lastAssignment);
+		}
+	}
+
+	public void test_findLastAssignment_variable_reassign() throws Exception {
+		String code = "void root() {int value = 0; value = 1; System.out.println(value);}";
+		check_findLastAssignment(code, 2, new I_findLastAssignment() {
+			@Override
+			public ASTNode getExpected(TypeDeclaration typeDeclaration,
+					MethodDeclaration methodDeclaration,
+					Statement[] statements) {
+				return ((ExpressionStatement) statements[1]).getExpression();
+			}
+		});
+	}
+
+	public void test_findLastAssignment_variable_reassign2() throws Exception {
+		String code =
+				"void root() {int value; value = 0; System.out.println(value); value = 1; System.out.println(value);}";
+		check_findLastAssignment(code, 4, new I_findLastAssignment() {
+			@Override
+			public ASTNode getExpected(TypeDeclaration typeDeclaration,
+					MethodDeclaration methodDeclaration,
+					Statement[] statements) {
+				return ((ExpressionStatement) statements[3]).getExpression();
+			}
+		});
+	}
+
+	public void test_findLastAssignment_variable_reassign_later() throws Exception {
+		String code = "void root() {int value = 0; System.out.println(value); value = 1;}";
+		check_findLastAssignment(code, 1, new I_findLastAssignment() {
+			@Override
+			public ASTNode getExpected(TypeDeclaration typeDeclaration,
+					MethodDeclaration methodDeclaration,
+					Statement[] statements) {
+				return (ASTNode) ((VariableDeclarationStatement) statements[0]).fragments().get(0);
+			}
+		});
+	}
+
+	public void test_findLastAssignment_variable_sameInDifferentMethod() throws Exception {
+		String code =
+				"void root() {int value = 0; foo(); System.out.println(value);} void foo() {int value = 1;}";
+		check_findLastAssignment(code, 2, new I_findLastAssignment() {
+			@Override
+			public ASTNode getExpected(TypeDeclaration typeDeclaration,
+					MethodDeclaration methodDeclaration,
+					Statement[] statements) {
+				return (ASTNode) ((VariableDeclarationStatement) statements[0]).fragments().get(0);
+			}
+		});
+	}
+
+	public void test_findLastAssignment_FieldDeclaration() throws Exception {
+		String code = "int value = 0; void root() {System.out.println(value);}";
+		check_findLastAssignment(code, 0, new I_findLastAssignment() {
+			@Override
+			public ASTNode getExpected(TypeDeclaration typeDeclaration,
+					MethodDeclaration methodDeclaration,
+					Statement[] statements) {
+				return (ASTNode) typeDeclaration.getFields()[0].fragments().get(0);
+			}
+		});
+	}
+
+	/**
+	 * Check for "this.fieldName" itself.
+	 */
+	public void test_FieldDeclaration_this_1() throws Exception {
+		CompilationUnit compilationUnit =
+				createASTCompilationUnit(
+						"test",
+						"Test.java",
+						getSourceDQ(
+								"package test;",
+								"class Test {",
+								"  int value;",
+								"  void root() {",
+								"    int value = 0;",
+								"    value = 1;",
+								"    System.out.println(this.value);",
+								"  }",
+								"}"));
+		TypeDeclaration typeDeclaration = (TypeDeclaration) compilationUnit.types().get(0);
+		MethodDeclaration rootMethod = AstNodeUtils.getMethodBySignature(typeDeclaration, "root()");
+		// prepare variable
+		ASTNode variable;
+		{
+			ExpressionStatement statement =
+					(ExpressionStatement) rootMethod.getBody().statements().get(2);
+			MethodInvocation invocation = (MethodInvocation) statement.getExpression();
+			variable = (ASTNode) invocation.arguments().get(0);
+		}
+		// check last assignment
+		{
+			ASTNode lastAssignment =
+					getLastAssignment(new ExecutionFlowDescription(rootMethod), variable);
+			assertNotNull(lastAssignment);
+			assertSame(typeDeclaration.getFields()[0], lastAssignment.getParent());
+		}
+		// check references
+		{
+			List<Expression> references =
+					getReferences(new ExecutionFlowDescription(rootMethod), variable);
+			String[] expectedReferences = new String[]{"int value;", "System.out.println(this.value);"};
+			assertEquals(expectedReferences.length, references.size());
+			for (int i = 0; i < references.size(); i++) {
+				ASTNode reference = references.get(i);
+				String expectedReference = expectedReferences[i];
+				String actualReference = m_lastEditor.getSource(reference.getParent().getParent());
+				assertEquals(expectedReference, actualReference);
+			}
+		}
+	}
+
+	/**
+	 * Check for local variable that hides field with same name.
+	 */
+	public void test_FieldDeclaration_this_2() throws Exception {
+		CompilationUnit compilationUnit =
+				createASTCompilationUnit(
+						"test",
+						"Test.java",
+						getSourceDQ(
+								"package test;",
+								"class Test {",
+								"  int value;",
+								"  void root() {",
+								"    int value = 0;",
+								"    value = 1;",
+								"    this.value = 2;",
+								"    System.out.println(value);",
+								"  }",
+								"}"));
+		TypeDeclaration typeDeclaration = (TypeDeclaration) compilationUnit.types().get(0);
+		MethodDeclaration rootMeethod = AstNodeUtils.getMethodBySignature(typeDeclaration, "root()");
+		// prepare variable
+		ASTNode variable;
+		{
+			ExpressionStatement statement =
+					(ExpressionStatement) rootMeethod.getBody().statements().get(3);
+			MethodInvocation invocation = (MethodInvocation) statement.getExpression();
+			variable = (ASTNode) invocation.arguments().get(0);
+		}
+		// check last assignment
+		{
+			ASTNode lastAssignment =
+					getLastAssignment(new ExecutionFlowDescription(rootMeethod), variable);
+			assertNotNull(lastAssignment);
+			//
+			ExpressionStatement statement =
+					(ExpressionStatement) rootMeethod.getBody().statements().get(1);
+			assertSame(statement.getExpression(), lastAssignment);
+		}
+		// check references
+		{
+			List<Expression> references =
+					getReferences(new ExecutionFlowDescription(rootMeethod), variable);
+			String[] expectedReferences =
+					new String[]{"int value = 0;", "value = 1;", "System.out.println(value);"};
+			assertEquals(expectedReferences.length, references.size());
+			for (int i = 0; i < references.size(); i++) {
+				SimpleName reference = (SimpleName) references.get(i);
+				String expectedReference = expectedReferences[i];
+				String actualReference = m_lastEditor.getSource(reference.getParent().getParent());
+				assertEquals(expectedReference, actualReference);
+			}
+		}
+	}
+
+	public void test_findLastAssignment_FieldDeclaration_noValue() throws Exception {
+		String code = "int value; void root() {System.out.println(value);}";
+		check_findLastAssignment(code, 0, new I_findLastAssignment() {
+			@Override
+			public ASTNode getExpected(TypeDeclaration typeDeclaration,
+					MethodDeclaration methodDeclaration,
+					Statement[] statements) {
+				return (ASTNode) typeDeclaration.getFields()[0].fragments().get(0);
+			}
+		});
+	}
+
+	public void test_findLastAssignment_FieldDeclaration_variable_thisMethod() throws Exception {
+		String code = "int value = 0; void root() {int value = 1; System.out.println(value);}";
+		check_findLastAssignment(code, 1, new I_findLastAssignment() {
+			@Override
+			public ASTNode getExpected(TypeDeclaration typeDeclaration,
+					MethodDeclaration methodDeclaration,
+					Statement[] statements) {
+				return (ASTNode) ((VariableDeclarationStatement) statements[0]).fragments().get(0);
+			}
+		});
+	}
+
+	public void test_findLastAssignment_FieldDeclaration_reassign_thisMethod() throws Exception {
+		String code = "int value = 0; void root() {value = 1; System.out.println(value);}";
+		check_findLastAssignment(code, 1, new I_findLastAssignment() {
+			@Override
+			public ASTNode getExpected(TypeDeclaration typeDeclaration,
+					MethodDeclaration methodDeclaration,
+					Statement[] statements) {
+				return ((ExpressionStatement) statements[0]).getExpression();
+			}
+		});
+	}
+
+	public void test_findLastAssignment_FieldDeclaration_reassign_otherMethod() throws Exception {
+		String code =
+				"int value = 0; void root() {foo(); System.out.println(value);} void foo() {value = 1;}";
+		check_findLastAssignment(code, 1, new I_findLastAssignment() {
+			@Override
+			public ASTNode getExpected(TypeDeclaration typeDeclaration,
+					MethodDeclaration methodDeclaration,
+					Statement[] statements) {
+				Statement statement =
+						(Statement) typeDeclaration.getMethods()[1].getBody().statements().get(0);
+				return ((ExpressionStatement) statement).getExpression();
+			}
+		});
+	}
+
+	public void test_findLastAssignment_FieldDeclaration_reassign_otherMethod2() throws Exception {
+		String code =
+				"int value = 0; void root() {System.out.println(value); foo();} void foo() {value = 1;}";
+		check_findLastAssignment(code, 0, new I_findLastAssignment() {
+			@Override
+			public ASTNode getExpected(TypeDeclaration typeDeclaration,
+					MethodDeclaration methodDeclaration,
+					Statement[] statements) {
+				return (ASTNode) typeDeclaration.getFields()[0].fragments().get(0);
+			}
+		});
+	}
+
+	public void test_findLastAssignment_FieldDeclaration_reassign_otherMethod3() throws Exception {
+		String code =
+				"int value = 0; void foo() {value = 1;} void root() {System.out.println(value); foo();}";
+		check_findLastAssignment(code, 0, new I_findLastAssignment() {
+			@Override
+			public ASTNode getExpected(TypeDeclaration typeDeclaration,
+					MethodDeclaration methodDeclaration,
+					Statement[] statements) {
+				return (ASTNode) typeDeclaration.getFields()[0].fragments().get(0);
+			}
+		});
+	}
+
+	public void test_findLastAssignment_FieldDeclaration_reassign_otherMethod4() throws Exception {
+		String code =
+				"int value = 0; void root() {foo(); System.out.println(value);} void foo() {int value = 1;}";
+		check_findLastAssignment(code, 1, new I_findLastAssignment() {
+			@Override
+			public ASTNode getExpected(TypeDeclaration typeDeclaration,
+					MethodDeclaration methodDeclaration,
+					Statement[] statements) {
+				return (ASTNode) typeDeclaration.getFields()[0].fragments().get(0);
+			}
+		});
+	}
+
+	public void test_findLastAssignment_parameters() throws Exception {
+		String code = "void root(int value) {System.out.println(value);}";
+		check_findLastAssignment(code, "root(int)", 0, new I_findLastAssignment() {
+			@Override
+			public ASTNode getExpected(TypeDeclaration typeDeclaration,
+					MethodDeclaration methodDeclaration,
+					Statement[] statements) {
+				return (ASTNode) methodDeclaration.parameters().get(0);
+			}
+		});
+	}
+
+	public void test_findLastAssignment_parameterName() throws Exception {
+		TypeDeclaration typeDeclaration =
+				createTypeDeclaration_Test(
+						"public class Test {",
+						"  public void foo(int value) {",
+						"  }",
+						"}");
+		MethodDeclaration fooMethod = typeDeclaration.getMethods()[0];
+		// prepare variable
+		SingleVariableDeclaration valueDeclaration = DomGenerics.parameters(fooMethod).get(0);
+		SimpleName valueName = valueDeclaration.getName();
+		// simple flow
+		ExecutionFlowDescription flowDescription = new ExecutionFlowDescription(fooMethod);
+		// get last assignment
+		ASTNode lastAssignment = getLastAssignment(flowDescription, valueName);
+		assertSame(valueDeclaration, lastAssignment);
+		assertTrue(hasVariableStamp(valueName));
+	}
+
+	public void test_findLastAssignment_parameterName_inBinaryFlowMethod() throws Exception {
+		TypeDeclaration typeDeclaration =
+				createTypeDeclaration_Test(
+						"public class Test {",
+						"  public Test() {",
+						"  }",
+						"  public void foo(int value) {",
+						"  }",
+						"}");
+		MethodDeclaration constructorMethod = typeDeclaration.getMethods()[0];
+		MethodDeclaration fooMethod = typeDeclaration.getMethods()[1];
+		// prepare variable
+		SingleVariableDeclaration valueDeclaration = DomGenerics.parameters(fooMethod).get(0);
+		SimpleName valueName = valueDeclaration.getName();
+		// flow with linked binary flow
+		ExecutionFlowDescription flowDescription = new ExecutionFlowDescription(constructorMethod);
+		flowDescription.addBinaryFlowMethodBefore(constructorMethod.getBody(), fooMethod);
+		// get last assignment
+		ASTNode lastAssignment = getLastAssignment(flowDescription, valueName);
+		assertSame(valueDeclaration, lastAssignment);
+		assertTrue(hasVariableStamp(valueName));
+	}
+
+	public void test_findLastAssignment_parameters_hide_field() throws Exception {
+		String code = "int value = 1; void root(int value) {System.out.println(value);}";
+		check_findLastAssignment(code, "root(int)", 0, new I_findLastAssignment() {
+			@Override
+			public ASTNode getExpected(TypeDeclaration typeDeclaration,
+					MethodDeclaration methodDeclaration,
+					Statement[] statements) {
+				return (ASTNode) methodDeclaration.parameters().get(0);
+			}
+		});
+	}
+
+	/**
+	 * Test of last assignment for argument of {@link SuperConstructorInvocation}.
+	 */
+	public void test_findLastAssignment_SuperConstructorInvocation_argument() throws Exception {
+		TypeDeclaration typeDeclaration =
+				createTypeDeclaration_Test(
+						"public class Test extends java.util.ArrayList {",
+						"  public Test(int size) {",
+						"    super(size);",
+						"  }",
+						"}");
+		MethodDeclaration methodDeclaration = typeDeclaration.getMethods()[0];
+		SingleVariableDeclaration sizeDeclaration = DomGenerics.parameters(methodDeclaration).get(0);
+		//
+		SimpleName sizeArgument = (SimpleName) m_lastEditor.getEnclosingNode("size);");
+		ExecutionFlowDescription flowDescription = new ExecutionFlowDescription(methodDeclaration);
+		ASTNode lastAssignment = getLastAssignment(flowDescription, sizeArgument);
+		assertSame(sizeDeclaration, lastAssignment);
+	}
+
+	/**
+	 * Follow to local constructor using {@link ConstructorInvocation}.
+	 */
+	public void test_findLastAssignment_followConstructorInvocation() throws Exception {
+		TypeDeclaration typeDeclaration =
+				createTypeDeclaration_Test(
+						"public class Test extends java.util.ArrayList {",
+						"  public Test() {",
+						"    this(0);",
+						"  }",
+						"  public Test(int size) {",
+						"    System.out.println(size);",
+						"  }",
+						"}");
+		MethodDeclaration entryPointConstructor = typeDeclaration.getMethods()[0];
+		MethodDeclaration sizeConstructor = typeDeclaration.getMethods()[1];
+		SingleVariableDeclaration sizeDeclaration = DomGenerics.parameters(sizeConstructor).get(0);
+		//
+		SimpleName sizeArgument = (SimpleName) m_lastEditor.getEnclosingNode("size);");
+		ASTNode lastAssignment =
+				getLastAssignment(new ExecutionFlowDescription(entryPointConstructor), sizeArgument);
+		assertSame(sizeDeclaration, lastAssignment);
+	}
+
+	/**
+	 * In theory, when we ask for last assignment to variable that is not in execution flow, we can
+	 * not say this 100% correct. However in some situations, when variable is assigned in constructor
+	 * (so, always visited), we know last assignment.
+	 */
+	public void test_findLastAssignment_notInFlow_initializedFromConstructor() throws Exception {
+		CompilationUnit compilationUnit =
+				createASTCompilationUnit(
+						"test",
+						"Test.java",
+						getSourceDQ(
+								"package test;",
+								"public class Test {",
+								"  int m_field;",
+								"  public Test() {",
+								"    m_field = 5;",
+								"  }",
+								"  private void disconnectedMethod() {",
+								"    System.out.println(m_field);",
+								"  }",
+								"}"));
+		TypeDeclaration typeDeclaration = DomGenerics.types(compilationUnit).get(0);
+		MethodDeclaration constructorMethod = typeDeclaration.getMethods()[0];
+		MethodDeclaration disconnectedMethod = typeDeclaration.getMethods()[1];
+		// prepare expected result
+		Assignment expectedAssignment;
+		{
+			Statement statement = DomGenerics.statements(constructorMethod.getBody()).get(0);
+			expectedAssignment = (Assignment) ((ExpressionStatement) statement).getExpression();
+		}
+		// prepare last assignment visible in "disconnectedMethod"
+		ASTNode actualAssignment;
+		{
+			Statement statement = DomGenerics.statements(disconnectedMethod.getBody()).get(0);
+			MethodInvocation invocation =
+					(MethodInvocation) ((ExpressionStatement) statement).getExpression();
+			ASTNode variable = DomGenerics.arguments(invocation).get(0);
+			actualAssignment =
+					getLastAssignment(new ExecutionFlowDescription(constructorMethod), variable);
+		}
+		// assert
+		assertSame(expectedAssignment, actualAssignment);
+	}
+
+	/**
+	 * In theory, when we ask for last assignment to variable that is not in execution flow, we can
+	 * not say this 100% correct. However in some situations, when variable is assigned in field (so,
+	 * always visited), we know last assignment.
+	 */
+	public void test_findLastAssignment_notInFlow_initializedInField() throws Exception {
+		CompilationUnit compilationUnit =
+				createASTCompilationUnit(
+						"test",
+						"Test.java",
+						getSourceDQ(
+								"package test;",
+								"public class Test {",
+								"  int m_field = 5;",
+								"  public Test() {",
+								"  }",
+								"  private void disconnectedMethod() {",
+								"    System.out.println(m_field);",
+								"  }",
+								"}"));
+		TypeDeclaration typeDeclaration = DomGenerics.types(compilationUnit).get(0);
+		MethodDeclaration constructorMethod = typeDeclaration.getMethods()[0];
+		MethodDeclaration disconnectedMethod = typeDeclaration.getMethods()[1];
+		// prepare expected result
+		VariableDeclaration expectedAssignment;
+		{
+			FieldDeclaration fieldDeclaration = typeDeclaration.getFields()[0];
+			expectedAssignment = DomGenerics.fragments(fieldDeclaration).get(0);
+		}
+		// prepare last assignment visible in "disconnectedMethod"
+		ASTNode actualAssignment;
+		{
+			Statement statement = DomGenerics.statements(disconnectedMethod.getBody()).get(0);
+			MethodInvocation invocation =
+					(MethodInvocation) ((ExpressionStatement) statement).getExpression();
+			ASTNode variable = DomGenerics.arguments(invocation).get(0);
+			actualAssignment =
+					getLastAssignment(new ExecutionFlowDescription(constructorMethod), variable);
+		}
+		// assert
+		assertSame(expectedAssignment, actualAssignment);
+	}
+
+	/**
+	 * There was problem that we were not able to find last assignment for field, when application
+	 * pattern and class also has constructor.
+	 * <p>
+	 * Here no constructor, just to check that in this case we have no problem.
+	 */
+	public void test_findLastAssignment_applicationPattern_noConstructor() throws Exception {
+		TypeDeclaration typeDeclaration =
+				createTypeDeclaration_Test(
+						"import javax.swing.*;",
+						"public class Test {",
+						"  private JPanel shell;",
+						"  public static void main(String[] args) {",
+						"    Test app = new Test();",
+						"    app.open();",
+						"  }",
+						"  public void open() {",
+						"    shell = new JPanel();",
+						"    System.out.println(shell);",
+						"  }",
+						"}");
+		MethodDeclaration entryPointConstructor = typeDeclaration.getMethods()[0];
+		//
+		Assignment shellAssignment = (Assignment) m_lastEditor.getEnclosingNode("shell =").getParent();
+		SimpleName shellArgument = (SimpleName) m_lastEditor.getEnclosingNode("shell);");
+		//
+		ExecutionFlowDescription flowDescription = new ExecutionFlowDescription(entryPointConstructor);
+		ASTNode lastAssignment = getLastAssignment(flowDescription, shellArgument);
+		assertSame(shellAssignment, lastAssignment);
+	}
+
+	/**
+	 * There was problem that we were not able to find last assignment for field, when application
+	 * pattern and class also has constructor.
+	 */
+	public void test_findLastAssignment_applicationPattern_withConstructor() throws Exception {
+		TypeDeclaration typeDeclaration =
+				createTypeDeclaration_Test(
+						"import javax.swing.*;",
+						"public class Test {",
+						"  private JPanel shell;",
+						"  public static void main(String[] args) {",
+						"    Test app = new Test();",
+						"    app.open();",
+						"  }",
+						"  public Test() {",
+						"  }",
+						"  public void open() {",
+						"    shell = new JPanel();",
+						"    System.out.println(shell);",
+						"  }",
+						"}");
+		MethodDeclaration entryPointConstructor = typeDeclaration.getMethods()[0];
+		//
+		Assignment shellAssignment = (Assignment) m_lastEditor.getEnclosingNode("shell =").getParent();
+		SimpleName shellArgument = (SimpleName) m_lastEditor.getEnclosingNode("shell);");
+		//
+		ExecutionFlowDescription flowDescription = new ExecutionFlowDescription(entryPointConstructor);
+		ASTNode lastAssignment = getLastAssignment(flowDescription, shellArgument);
+		assertSame(shellAssignment, lastAssignment);
+	}
+	private interface I_findLastAssignment {
+		ASTNode getExpected(TypeDeclaration typeDeclaration,
+				MethodDeclaration methodDeclaration,
+				Statement statements[]);
+	}
+
+	private void check_findLastAssignment(String code,
+			int variableStatementIndex,
+			I_findLastAssignment helper) throws Exception {
+		check_findLastAssignment(code, "root()", variableStatementIndex, helper);
+	}
+
+	private void check_findLastAssignment(String code,
+			String methodSignature,
+			int variableStatementIndex,
+			I_findLastAssignment helper) throws Exception {
+		// prepare root methods
+		TypeDeclaration typeDeclaration;
+		MethodDeclaration rootMethod;
+		MethodDeclaration rootMethods[];
+		{
+			typeDeclaration = createTypeDeclaration_TestC(code);
+			rootMethod = AstNodeUtils.getMethodBySignature(typeDeclaration, methodSignature);
+			assertNotNull(rootMethod);
+			rootMethods = new MethodDeclaration[]{rootMethod};
+		}
+		// prepare statements
+		List<Statement> statementsList = DomGenerics.statements(rootMethod.getBody());
+		Statement statements[] = statementsList.toArray(new Statement[statementsList.size()]);
+		// prepare expected assignment and variable
+		ASTNode expectedAssignment = helper.getExpected(typeDeclaration, rootMethod, statements);
+		SimpleName variable =
+				(SimpleName) ((MethodInvocation) ((ExpressionStatement) statements[variableStatementIndex]).getExpression()).arguments().get(
+						0);
+		// do check
+		assertSame(
+				expectedAssignment,
+				getLastAssignment(new ExecutionFlowDescription(rootMethods), variable));
+	}
+
+	public void test_findLastAssignment_cache() throws Exception {
+		// prepare root methods
+		TypeDeclaration typeDeclaration;
+		MethodDeclaration rootMethod;
+		ExecutionFlowDescription flowDescription;
+		{
+			String code = "void root() {int value = 0; System.out.println(value);}";
+			typeDeclaration = createTypeDeclaration_TestC(code);
+			rootMethod = AstNodeUtils.getMethodBySignature(typeDeclaration, "root()");
+			assertNotNull(rootMethod);
+			flowDescription = new ExecutionFlowDescription(rootMethod);
+		}
+		// prepare statements
+		List<Statement> statementsList = DomGenerics.statements(rootMethod.getBody());
+		Statement statements[] = statementsList.toArray(new Statement[statementsList.size()]);
+		// prepare expected assignment and variable
+		ASTNode expectedAssignment =
+				(ASTNode) ((VariableDeclarationStatement) statements[0]).fragments().get(0);
+		SimpleName variable =
+				(SimpleName) ((MethodInvocation) ((ExpressionStatement) statements[1]).getExpression()).arguments().get(
+						0);
+		// do check
+		assertSame(expectedAssignment, getLastAssignment(flowDescription, variable));
+		// this should be cached value
+		assertSame(expectedAssignment, getLastAssignment(flowDescription, variable));
+		// change AST to make cached value stale
+		rootMethod.getName().setIdentifier("root2");
+		assertSame(expectedAssignment, getLastAssignment(flowDescription, variable));
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// getFinalExpression
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link ExecutionFlowUtils#getFinalExpression(ExecutionFlowDescription, Expression)}.<br>
+	 * Direct value.
+	 */
+	public void test_getFinalExpression_1() throws Exception {
+		check_getFinalExpression("555", new String[]{
+				"package test;",
+				"public class Test {",
+				"  public Test() {",
+				"    int a = !555;",
+				"  }",
+		"}"});
+	}
+
+	/**
+	 * Test for {@link ExecutionFlowUtils#getFinalExpression(ExecutionFlowDescription, Expression)}.<br>
+	 * Value declared as single variable.
+	 */
+	public void test_getFinalExpression_2() throws Exception {
+		check_getFinalExpression("555", new String[]{
+				"package test;",
+				"public class Test {",
+				"  public Test() {",
+				"    int a = 555;",
+				"    System.out.println(!a);",
+				"  }",
+		"}"});
+	}
+
+	/**
+	 * Test for {@link ExecutionFlowUtils#getFinalExpression(ExecutionFlowDescription, Expression)}.<br>
+	 * Value declared via two variables.
+	 */
+	public void test_getFinalExpression_3() throws Exception {
+		check_getFinalExpression("555", new String[]{
+				"package test;",
+				"public class Test {",
+				"  public Test() {",
+				"    int a = 555;",
+				"    int b = a;",
+				"    System.out.println(!b);",
+				"  }",
+		"}"});
+	}
+
+	/**
+	 * Test for {@link ExecutionFlowUtils#getFinalExpression(ExecutionFlowDescription, Expression)}.<br>
+	 * Value assigned to single variable (not at declaration).
+	 */
+	public void test_getFinalExpression_4() throws Exception {
+		check_getFinalExpression("555", new String[]{
+				"package test;",
+				"public class Test {",
+				"  public Test() {",
+				"    int a;",
+				"    a = 555;",
+				"    System.out.println(!a);",
+				"  }",
+		"}"});
+	}
+
+	/**
+	 * Test for {@link ExecutionFlowUtils#getFinalExpression(ExecutionFlowDescription, Expression)}.<br>
+	 * Value assigned to single field (not at declaration).
+	 */
+	public void test_getFinalExpression_5() throws Exception {
+		check_getFinalExpression("555", new String[]{
+				"package test;",
+				"public class Test {",
+				"  private int a;",
+				"  public Test() {",
+				"    a = 555;",
+				"    System.out.println(!a);",
+				"  }",
+		"}"});
+	}
+
+	private void check_getFinalExpression(String expectedSource, String[] lines) throws Exception {
+		TypeDeclaration typeDeclaration;
+		Expression expression;
+		{
+			String source = getSource(lines);
+			int expressionPosition = source.indexOf('!');
+			source = StringUtils.remove(source, '!');
+			typeDeclaration = createTypeDeclaration("test", "Test.java", source);
+			expression = (Expression) AstNodeUtils.getEnclosingNode(typeDeclaration, expressionPosition);
+		}
+		//
+		ExecutionFlowDescription flowDescription =
+				new ExecutionFlowDescription(typeDeclaration.getMethods()[0]);
+		Expression firstAssignment = getFinalExpression(flowDescription, expression);
+		assertEquals(expectedSource, m_lastEditor.getSource(firstAssignment));
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// getAssignments
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_getAssignments_variable() throws Exception {
+		String code = "void root() {int value = 0; System.out.println(value);}";
+		String[] expected = new String[]{"value = 0"};
+		check_getAssignments(code, 1, expected);
+	}
+
+	public void test_getAssignments_variable2() throws Exception {
+		String code = "void root() {int value = 0; value = 1; System.out.println(value);}";
+		String[] expected = new String[]{"value = 0", "value = 1"};
+		check_getAssignments(code, 2, expected);
+	}
+
+	public void test_getAssignments_variable3() throws Exception {
+		String code = "void root() {int value; value = 1; System.out.println(value);}";
+		String[] expected = new String[]{"value = 1"};
+		check_getAssignments(code, 2, expected);
+	}
+
+	public void test_getAssignments_variable_call() throws Exception {
+		String code =
+				"void root() {int value = 0; foo(); System.out.println(value);} void foo() {int value = 2;}";
+		String[] expected = new String[]{"value = 0"};
+		check_getAssignments(code, 2, expected);
+	}
+
+	/**
+	 * Assignment to {@link FieldAccess} was caused {@link NullPointerException}, so we use this test
+	 * to ensure that this {@link NullPointerException} will not return again.
+	 */
+	public void test_getAssignments_variable_usingFieldAccess_inThisUnit() throws Exception {
+		setFileContentSrc(
+				"test/MyObject.java",
+				getSourceDQ("package test;", "public class MyObject {", "  public int m_value;", "}"));
+		waitForAutoBuild();
+		String code =
+				"void root() {int value = 0; System.out.println(value); new MyObject().m_value = 2;}";
+		String[] expected = new String[]{"value = 0"};
+		check_getAssignments(code, 1, expected);
+	}
+
+	public void test_getAssignments_field() throws Exception {
+		String code = "int value = 0; void root() {System.out.println(value);}";
+		String[] expected = new String[]{"value = 0"};
+		check_getAssignments(code, 0, expected);
+	}
+
+	public void test_getAssignments_field_assign() throws Exception {
+		String code = "int value = 0; void root() {value = 1; System.out.println(value);}";
+		String[] expected = new String[]{"value = 0", "value = 1"};
+		check_getAssignments(code, 1, expected);
+	}
+
+	public void test_getAssignments_field_assign2() throws Exception {
+		String code =
+				"int value = 0; void root() {foo(); System.out.println(value);} void foo() {value = 1;}";
+		String[] expected = new String[]{"value = 0", "value = 1"};
+		check_getAssignments(code, 1, expected);
+	}
+
+	public void test_getAssignments_field_hideVariable() throws Exception {
+		String code = "int value = 0; void root() {int value = 1; System.out.println(value);}";
+		String[] expected = new String[]{"value = 1"};
+		check_getAssignments(code, 1, expected);
+	}
+
+	private void check_getAssignments(String code,
+			int variableStatementIndex,
+			String[] expectedAssignments) throws Exception {
+		check_getAssignments(code, "root()", variableStatementIndex, expectedAssignments);
+	}
+
+	private void check_getAssignments(String code,
+			String methodSignature,
+			int variableStatementIndex,
+			String[] expectedAssignments) throws Exception {
+		// prepare root methods
+		TypeDeclaration typeDeclaration;
+		MethodDeclaration rootMethod;
+		ExecutionFlowDescription flowDescription;
+		{
+			typeDeclaration = createTypeDeclaration_TestC(code);
+			rootMethod = AstNodeUtils.getMethodBySignature(typeDeclaration, methodSignature);
+			assertNotNull(rootMethod);
+			flowDescription = new ExecutionFlowDescription(rootMethod);
+		}
+		// prepare statements
+		List<Statement> statementsList = DomGenerics.statements(rootMethod.getBody());
+		Statement statements[] = statementsList.toArray(new Statement[statementsList.size()]);
+		// prepare variable
+		SimpleName variable =
+				(SimpleName) ((MethodInvocation) ((ExpressionStatement) statements[variableStatementIndex]).getExpression()).arguments().get(
+						0);
+		// do check
+		List<Expression> actualAssignments = getAssignments(flowDescription, variable);
+		assertNotNull(actualAssignments);
+		assertEquals(expectedAssignments.length, actualAssignments.size());
+		for (int i = 0; i < expectedAssignments.length; i++) {
+			String expectedAssignment = expectedAssignments[i];
+			String actualAssignment = m_lastEditor.getSource(actualAssignments.get(i));
+			assertEquals(expectedAssignment, actualAssignment);
+		}
+		// check for cache
+		assertSame(actualAssignments, getAssignments(flowDescription, variable));
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// getReferences
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_getReferences_variable() throws Exception {
+		String code = "void root() {int value = 0; System.out.println(value);}";
+		String[] expected = new String[]{"value = 0", "System.out.println(value)"};
+		check_getReferences(code, 1, expected);
+	}
+
+	public void test_getReferences_field() throws Exception {
+		String code = "int value = 0; void root() {value = 1; System.out.println(value);}";
+		String[] expected = new String[]{"value = 0", "value = 1", "System.out.println(value)"};
+		check_getReferences(code, 1, expected);
+	}
+
+	public void test_getReferences_field_2() throws Exception {
+		String code = "int value; void root() {value = 1; System.out.println(value);}";
+		String[] expected = new String[]{"value", "value = 1", "System.out.println(value)"};
+		check_getReferences(code, 1, expected);
+	}
+
+	public void test_getReferences_field_3() throws Exception {
+		String code =
+				"int value; void root() {value = 1; System.out.println(value);} void foo() {value = 2;}";
+		String[] expected =
+				new String[]{"value", "value = 1", "System.out.println(value)", "value = 2"};
+		check_getReferences(code, 1, expected);
+	}
+
+	/**
+	 * References on field declared after use.
+	 */
+	public void test_getReferences_field_4() throws Exception {
+		String code = "void root() {System.out.println(value);} int value;";
+		String[] expected = new String[]{"value", "System.out.println(value)"};
+		check_getReferences(code, 0, expected);
+	}
+
+	/**
+	 * References on field in {@link AnonymousClassDeclaration}.
+	 */
+	public void test_getReferences_field_inAnonymous() throws Exception {
+		String code =
+				getSource(
+						"int value;",
+						"void root() {",
+						"  System.out.println(value);",
+						"  new Object() {",
+						"    public int hashCode() {",
+						"      return value;",
+						"    }",
+						"  };",
+						"}");
+		String[] expected = new String[]{"value", "System.out.println(value)", "return value;"};
+		check_getReferences(code, 0, expected);
+	}
+
+	/**
+	 * References on field in {@link AnonymousClassDeclaration}.
+	 */
+	public void test_getReferences_field_usingThisObject() throws Exception {
+		String code =
+				getSource(
+						"int value;",
+						"void root() {",
+						"  System.out.println(value);",
+						"  new Object() {",
+						"    public int hashCode() {",
+						"      Test test = new Test();",
+						"      return test.value;",
+						"    }",
+						"  };",
+						"}");
+		String[] expected = new String[]{"value", "System.out.println(value)", "test.value"};
+		check_getReferences(code, 0, expected);
+	}
+
+	private void check_getReferences(String code,
+			int variableStatementIndex,
+			String[] expectedAssignments) throws Exception {
+		check_getReferences(code, "root()", variableStatementIndex, expectedAssignments);
+	}
+
+	private void check_getReferences(String code,
+			String methodSignature,
+			int variableStatementIndex,
+			String[] expectedReferences) throws Exception {
+		// prepare root methods
+		TypeDeclaration typeDeclaration;
+		MethodDeclaration rootMethod;
+		ExecutionFlowDescription flowDescription;
+		{
+			typeDeclaration = createTypeDeclaration_TestC(code);
+			rootMethod = AstNodeUtils.getMethodBySignature(typeDeclaration, methodSignature);
+			assertNotNull(rootMethod);
+			flowDescription = new ExecutionFlowDescription(rootMethod);
+		}
+		// prepare statements
+		List<Statement> statementsList = DomGenerics.statements(rootMethod.getBody());
+		Statement statements[] = statementsList.toArray(new Statement[statementsList.size()]);
+		// prepare variable
+		SimpleName variable =
+				(SimpleName) ((MethodInvocation) ((ExpressionStatement) statements[variableStatementIndex]).getExpression()).arguments().get(
+						0);
+		// do check
+		List<Expression> actualReferences = getReferences(flowDescription, variable);
+		assertNotNull(actualReferences);
+		assertEquals(expectedReferences.length, actualReferences.size());
+		for (int i = 0; i < expectedReferences.length; i++) {
+			String expectedAssignment = expectedReferences[i];
+			ASTNode actualReference = actualReferences.get(i);
+			String actualAssignment = m_lastEditor.getSource(actualReference.getParent());
+			assertEquals(expectedAssignment, actualAssignment);
+		}
+		// check for cache
+		assertSame(actualReferences, getReferences(flowDescription, variable));
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// getDeclaration
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_getDeclaration_variable() throws Exception {
+		String code = "void root() {int value = 0; System.out.println(value);}";
+		check_getDeclaration(code, 1, "value = 0");
+	}
+
+	public void test_getDeclaration_methodParameter() throws Exception {
+		String code = "void root(int value) {System.out.println(value);}";
+		check_getDeclaration(code, "root(int)", 0, "int value");
+	}
+
+	public void test_getDeclaration_lazy() throws Exception {
+		createTypeDeclaration_Test(
+				"public class Test {",
+				"  private Object lazy;",
+				"  private Object getLazy() {",
+				"    if (lazy == null) {",
+				"      lazy = new Object();",
+				"    }",
+				"    return lazy;",
+				"  }",
+				"  public void root() {",
+				"    getLazy();",
+				"  }",
+				"}");
+		VariableDeclaration expectedDeclaration = getNode("lazy;", VariableDeclaration.class);
+		SimpleName variable = getNode("lazy = new", SimpleName.class);
+		MethodDeclaration rootMethod = getNode("getLazy()", MethodDeclaration.class);
+		assertSame(
+				expectedDeclaration,
+				getDeclaration(new ExecutionFlowDescription(rootMethod), variable));
+	}
+
+	/**
+	 * Test that we can ask for declaration directly {@link SimpleName} of
+	 * {@link SingleVariableDeclaration}.
+	 */
+	public void test_getDeclaration_methodParameter_direct() throws Exception {
+		TypeDeclaration typeDeclaration =
+				createTypeDeclaration_Test(
+						"public class Test {",
+						"  public void root(int value) {",
+						"  }",
+						"}");
+		MethodDeclaration methodDeclaration = typeDeclaration.getMethods()[0];
+		SingleVariableDeclaration variableDeclaration =
+				(SingleVariableDeclaration) methodDeclaration.parameters().get(0);
+		assertSame(
+				variableDeclaration,
+				getDeclaration(
+						new ExecutionFlowDescription(methodDeclaration),
+						variableDeclaration.getName()));
+	}
+
+	private void check_getDeclaration(String code,
+			int variableStatementIndex,
+			String expectedDeclaration) throws Exception {
+		check_getDeclaration(code, "root()", variableStatementIndex, expectedDeclaration);
+	}
+
+	private void check_getDeclaration(String code,
+			String methodSignature,
+			int variableStatementIndex,
+			String expectedDeclaration) throws Exception {
+		// prepare root methods
+		TypeDeclaration typeDeclaration;
+		MethodDeclaration rootMethod;
+		ExecutionFlowDescription flowDescription;
+		{
+			typeDeclaration = createTypeDeclaration_TestC(code);
+			rootMethod = AstNodeUtils.getMethodBySignature(typeDeclaration, methodSignature);
+			assertNotNull(rootMethod);
+			flowDescription = new ExecutionFlowDescription(rootMethod);
+		}
+		// prepare statements
+		List<Statement> statementsList = DomGenerics.statements(rootMethod.getBody());
+		Statement statements[] = statementsList.toArray(new Statement[statementsList.size()]);
+		// prepare variable
+		SimpleName variable =
+				(SimpleName) ((MethodInvocation) ((ExpressionStatement) statements[variableStatementIndex]).getExpression()).arguments().get(
+						0);
+		// do check
+		VariableDeclaration declaration = getDeclaration(flowDescription, variable);
+		assertEquals(expectedDeclaration, m_lastEditor.getSource(declaration));
+		// check for cache
+		assertSame(declaration, getDeclaration(flowDescription, variable));
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Special case for variable information
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_noVariableInformationForDanglingNode() throws Exception {
+		TypeDeclaration typeDeclaration =
+				createTypeDeclaration_Test(
+						"public class Test {",
+						"  public Test() {",
+						"    int foo = 1;",
+						"    System.out.println(foo);",
+						"  }",
+						"}");
+		MethodDeclaration rootMethod = typeDeclaration.getMethods()[0];
+		ExecutionFlowDescription flowDescription = new ExecutionFlowDescription(rootMethod);
+		ASTNode fooNode = m_lastEditor.getEnclosingNode("foo)");
+		// initial state
+		{
+			VariableDeclaration declaration = getDeclaration(flowDescription, fooNode);
+			assertThat(declaration).isNotNull();
+			Assertions.<ASTNode>assertThat(getReferences(flowDescription, fooNode)).containsOnly(
+					declaration.getName(),
+					fooNode);
+			Assertions.<ASTNode>assertThat(getAssignments(flowDescription, fooNode)).containsOnly(declaration);
+			assertThat(getLastAssignment(flowDescription, fooNode)).isEqualTo(declaration);
+		}
+		// delete Statement for "fooNode", no more variables information
+		m_lastEditor.removeEnclosingStatement(fooNode);
+		{
+			assertThat(getDeclaration(flowDescription, fooNode)).isNull();
+			assertThat(getReferences(flowDescription, fooNode)).isEmpty();
+			assertThat(getAssignments(flowDescription, fooNode)).isEmpty();
+			assertThat(getLastAssignment(flowDescription, fooNode)).isNull();
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// getInvocations()
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link ExecutionFlowUtils#getInvocations(ExecutionFlowDescription, MethodDeclaration)}
+	 * .
+	 * <p>
+	 * {@link ConstructorInvocation}, same signature.
+	 */
+	public void test_getInvocations_ConstructorInvocation_1() throws Exception {
+		TypeDeclaration typeDeclaration =
+				createTypeDeclaration_Test(
+						"public class Test {",
+						"  public Test() {",
+						"    this(1);",
+						"  }",
+						"  public Test(int value) {",
+						"  }",
+						"}");
+		MethodDeclaration entryPoint = typeDeclaration.getMethods()[0];
+		MethodDeclaration target = typeDeclaration.getMethods()[1];
+		ExecutionFlowDescription flowDescription = new ExecutionFlowDescription(entryPoint);
+		//
+		List<ASTNode> invocations = ExecutionFlowUtils.getInvocations(flowDescription, target);
+		assertThat(invocations).hasSize(1);
+		assertEquals("this(1);", m_lastEditor.getSource(invocations.get(0)));
+	}
+
+	/**
+	 * Test for {@link ExecutionFlowUtils#getInvocations(ExecutionFlowDescription, MethodDeclaration)}
+	 * .
+	 * <p>
+	 * {@link ConstructorInvocation}, different signature.
+	 */
+	public void test_getInvocations_ConstructorInvocation_2() throws Exception {
+		TypeDeclaration typeDeclaration =
+				createTypeDeclaration_Test(
+						"public class Test {",
+						"  public Test() {",
+						"    this(false);",
+						"  }",
+						"  public Test(int value) {",
+						"  }",
+						"  public Test(boolean value) {",
+						"  }",
+						"}");
+		MethodDeclaration entryPoint = typeDeclaration.getMethods()[0];
+		MethodDeclaration target = typeDeclaration.getMethods()[1];
+		ExecutionFlowDescription flowDescription = new ExecutionFlowDescription(entryPoint);
+		//
+		List<ASTNode> invocations = ExecutionFlowUtils.getInvocations(flowDescription, target);
+		assertThat(invocations).isEmpty();
+	}
+
+	/**
+	 * Test for {@link ExecutionFlowUtils#getInvocations(ExecutionFlowDescription, MethodDeclaration)}
+	 * .
+	 * <p>
+	 * {@link ClassInstanceCreation}, same signature.
+	 */
+	public void test_getInvocations_ClassInstanceCreation_1() throws Exception {
+		TypeDeclaration typeDeclaration =
+				createTypeDeclaration_Test(
+						"public class Test {",
+						"  public static void main(String[] args) {",
+						"    Test test = new Test(1);",
+						"  }",
+						"  public Test(int value) {",
+						"  }",
+						"  public static void main2() {",
+						"    Test test = new Test(2);",
+						"  }",
+						"}");
+		MethodDeclaration entryPoint = typeDeclaration.getMethods()[0];
+		MethodDeclaration target = typeDeclaration.getMethods()[1];
+		ExecutionFlowDescription flowDescription = new ExecutionFlowDescription(entryPoint);
+		//
+		List<ASTNode> invocations = ExecutionFlowUtils.getInvocations(flowDescription, target);
+		assertThat(invocations).hasSize(1);
+		assertEquals("new Test(1)", m_lastEditor.getSource(invocations.get(0)));
+	}
+
+	/**
+	 * Test for {@link ExecutionFlowUtils#getInvocations(ExecutionFlowDescription, MethodDeclaration)}
+	 * .
+	 * <p>
+	 * {@link ClassInstanceCreation}, different signature.
+	 */
+	public void test_getInvocations_ClassInstanceCreation_2() throws Exception {
+		TypeDeclaration typeDeclaration =
+				createTypeDeclaration_Test(
+						"public class Test {",
+						"  public static void main(String[] args) {",
+						"    Test test = new Test(false);",
+						"  }",
+						"  public Test(int value) {",
+						"  }",
+						"  public Test(boolean value) {",
+						"  }",
+						"}");
+		MethodDeclaration entryPoint = typeDeclaration.getMethods()[0];
+		MethodDeclaration target = typeDeclaration.getMethods()[1];
+		ExecutionFlowDescription flowDescription = new ExecutionFlowDescription(entryPoint);
+		//
+		List<ASTNode> invocations = ExecutionFlowUtils.getInvocations(flowDescription, target);
+		assertThat(invocations).isEmpty();
+	}
+
+	/**
+	 * Test for {@link ExecutionFlowUtils#getInvocations(ExecutionFlowDescription, MethodDeclaration)}
+	 * .
+	 * <p>
+	 * {@link MethodInvocation}, same signature.
+	 */
+	public void test_getInvocations_MethodInvocation_1() throws Exception {
+		TypeDeclaration typeDeclaration =
+				createTypeDeclaration_Test(
+						"public class Test {",
+						"  public Test() {",
+						"    target(1);",
+						"  }",
+						"  public void target(int value) {",
+						"  }",
+						"  public void disconnectedMethod() {",
+						"    target(2);",
+						"  }",
+						"}");
+		MethodDeclaration entryPoint = typeDeclaration.getMethods()[0];
+		MethodDeclaration target = typeDeclaration.getMethods()[1];
+		ExecutionFlowDescription flowDescription = new ExecutionFlowDescription(entryPoint);
+		//
+		List<ASTNode> invocations = ExecutionFlowUtils.getInvocations(flowDescription, target);
+		assertThat(invocations).hasSize(1);
+		assertEquals("target(1)", m_lastEditor.getSource(invocations.get(0)));
+	}
+
+	/**
+	 * Test for {@link ExecutionFlowUtils#getInvocations(ExecutionFlowDescription, MethodDeclaration)}
+	 * .
+	 * <p>
+	 * {@link MethodInvocation}, different signature.
+	 */
+	public void test_getInvocations_MethodInvocation_2() throws Exception {
+		TypeDeclaration typeDeclaration =
+				createTypeDeclaration_Test(
+						"public class Test {",
+						"  public Test() {",
+						"    notTarget(false);",
+						"  }",
+						"  public void targetMethod(int value) {",
+						"  }",
+						"  public void notTarget(boolean value) {",
+						"  }",
+						"}");
+		MethodDeclaration entryPoint = typeDeclaration.getMethods()[0];
+		MethodDeclaration target = typeDeclaration.getMethods()[1];
+		ExecutionFlowDescription flowDescription = new ExecutionFlowDescription(entryPoint);
+		//
+		List<ASTNode> invocations = ExecutionFlowUtils.getInvocations(flowDescription, target);
+		assertThat(invocations).isEmpty();
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/eval/MethodInvocationTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/eval/MethodInvocationTest.java
index dc721468a..098160668 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/eval/MethodInvocationTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/eval/MethodInvocationTest.java
@@ -47,1175 +47,1175 @@
  * @author scheglov_ke
  */
 public class MethodInvocationTest extends AbstractEngineTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Life cycle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void setUp() throws Exception {
-    super.setUp();
-    if (m_testProject == null) {
-      do_projectCreate();
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Life cycle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void setUp() throws Exception {
+		super.setUp();
+		if (m_testProject == null) {
+			do_projectCreate();
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // MethodInvocation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_System_currentTimeMillis() throws Exception {
-    Object actual = evaluateExpression("System.currentTimeMillis()", "long");
-    assertTrue(actual instanceof Long);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// MethodInvocation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_System_currentTimeMillis() throws Exception {
+		Object actual = evaluateExpression("System.currentTimeMillis()", "long");
+		assertTrue(actual instanceof Long);
+	}
 
-  public void test_staticPublicMethod() throws Exception {
-    TypeDeclaration typeDeclaration =
-        createTypeDeclaration_Test(
-            "class Test {",
-            "  public int call_staticPublicMethod() {",
-            "    return staticPublicMethod(5);",
-            "  }",
-            "  public static int staticPublicMethod(int i) {",
-            "    return 2 * i;",
-            "  }",
-            "}");
-    waitForAutoBuild();
-    Object actual = evaluateSingleMethod(typeDeclaration, "call_staticPublicMethod()");
-    assertEquals(10, actual);
-  }
+	public void test_staticPublicMethod() throws Exception {
+		TypeDeclaration typeDeclaration =
+				createTypeDeclaration_Test(
+						"class Test {",
+						"  public int call_staticPublicMethod() {",
+						"    return staticPublicMethod(5);",
+						"  }",
+						"  public static int staticPublicMethod(int i) {",
+						"    return 2 * i;",
+						"  }",
+						"}");
+		waitForAutoBuild();
+		Object actual = evaluateSingleMethod(typeDeclaration, "call_staticPublicMethod()");
+		assertEquals(10, actual);
+	}
 
-  public void test_instancePublicMethod_bad() throws Exception {
-    TypeDeclaration typeDeclaration =
-        createTypeDeclaration_Test(
-            "class Test {",
-            "  public int root() {",
-            "    return instancePublicMethod(5);",
-            "  }",
-            "  public int instancePublicMethod(int i) {",
-            "    return 2 * i;",
-            "  }",
-            "}");
-    waitForAutoBuild();
-    try {
-      evaluateSingleMethod(typeDeclaration, "root()");
-      fail();
-    } catch (Throwable e_) {
-      DesignerException e = DesignerExceptionUtils.getDesignerException(e_);
-      assertEquals(ICoreExceptionConstants.EVAL_LOCAL_METHOD_INVOCATION, e.getCode());
-    }
-  }
+	public void test_instancePublicMethod_bad() throws Exception {
+		TypeDeclaration typeDeclaration =
+				createTypeDeclaration_Test(
+						"class Test {",
+						"  public int root() {",
+						"    return instancePublicMethod(5);",
+						"  }",
+						"  public int instancePublicMethod(int i) {",
+						"    return 2 * i;",
+						"  }",
+						"}");
+		waitForAutoBuild();
+		try {
+			evaluateSingleMethod(typeDeclaration, "root()");
+			fail();
+		} catch (Throwable e_) {
+			DesignerException e = DesignerExceptionUtils.getDesignerException(e_);
+			assertEquals(ICoreExceptionConstants.EVAL_LOCAL_METHOD_INVOCATION, e.getCode());
+		}
+	}
 
-  /**
-   * If method just returns some value, we can try to evaluate it.
-   */
-  public void test_instancePublicMethod_simpleReturn() throws Exception {
-    TypeDeclaration typeDeclaration =
-        createTypeDeclaration_Test(
-            "class Test {",
-            "  public int root() {",
-            "    return instancePublicMethod();",
-            "  }",
-            "  public int instancePublicMethod() {",
-            "    return 5;",
-            "  }",
-            "}");
-    waitForAutoBuild();
-    //
-    assertEquals(5, evaluateSingleMethod(typeDeclaration, "root()"));
-  }
+	/**
+	 * If method just returns some value, we can try to evaluate it.
+	 */
+	public void test_instancePublicMethod_simpleReturn() throws Exception {
+		TypeDeclaration typeDeclaration =
+				createTypeDeclaration_Test(
+						"class Test {",
+						"  public int root() {",
+						"    return instancePublicMethod();",
+						"  }",
+						"  public int instancePublicMethod() {",
+						"    return 5;",
+						"  }",
+						"}");
+		waitForAutoBuild();
+		//
+		assertEquals(5, evaluateSingleMethod(typeDeclaration, "root()"));
+	}
 
-  /**
-   * We try to evaluate {@link ReturnStatement}, but it causes exception. So, we wrap it into usual
-   * one.
-   */
-  public void test_instancePublicMethod_simpleReturn_fail() throws Exception {
-    TypeDeclaration typeDeclaration =
-        createTypeDeclaration_Test(
-            "class Test {",
-            "  public int root() {",
-            "    return instancePublicMethod();",
-            "  }",
-            "  public int instancePublicMethod() {",
-            "    return 5 / 0;",
-            "  }",
-            "}");
-    waitForAutoBuild();
-    //
-    try {
-      evaluateSingleMethod(typeDeclaration, "root()");
-      fail();
-    } catch (Throwable e) {
-      {
-        Throwable rootCause = DesignerExceptionUtils.getRootCause(e);
-        assertThat(rootCause).isExactlyInstanceOf(ArithmeticException.class);
-      }
-      {
-        DesignerException de = DesignerExceptionUtils.getDesignerException(e);
-        assertEquals(ICoreExceptionConstants.EVAL_LOCAL_METHOD_INVOCATION, de.getCode());
-      }
-    }
-  }
+	/**
+	 * We try to evaluate {@link ReturnStatement}, but it causes exception. So, we wrap it into usual
+	 * one.
+	 */
+	public void test_instancePublicMethod_simpleReturn_fail() throws Exception {
+		TypeDeclaration typeDeclaration =
+				createTypeDeclaration_Test(
+						"class Test {",
+						"  public int root() {",
+						"    return instancePublicMethod();",
+						"  }",
+						"  public int instancePublicMethod() {",
+						"    return 5 / 0;",
+						"  }",
+						"}");
+		waitForAutoBuild();
+		//
+		try {
+			evaluateSingleMethod(typeDeclaration, "root()");
+			fail();
+		} catch (Throwable e) {
+			{
+				Throwable rootCause = DesignerExceptionUtils.getRootCause(e);
+				assertThat(rootCause).isExactlyInstanceOf(ArithmeticException.class);
+			}
+			{
+				DesignerException de = DesignerExceptionUtils.getDesignerException(e);
+				assertEquals(ICoreExceptionConstants.EVAL_LOCAL_METHOD_INVOCATION, de.getCode());
+			}
+		}
+	}
 
-  /**
-   * Test for <code>@wbp.eval.method.return parameterName</code> support.
-   */
-  public void test_instancePublicMethod_withReturnTag() throws Exception {
-    TypeDeclaration typeDeclaration =
-        createTypeDeclaration_Test(
-            "class Test {",
-            "  public int root() {",
-            "    return instancePublicMethod(5);",
-            "  }",
-            "  /**",
-            "  * @wbp.eval.method.return value",
-            "  */",
-            "  public int instancePublicMethod(int value) {",
-            "    return 2 * value;",
-            "  }",
-            "}");
-    waitForAutoBuild();
-    //
-    assertEquals(5, evaluateSingleMethod(typeDeclaration, "root()"));
-  }
+	/**
+	 * Test for <code>@wbp.eval.method.return parameterName</code> support.
+	 */
+	public void test_instancePublicMethod_withReturnTag() throws Exception {
+		TypeDeclaration typeDeclaration =
+				createTypeDeclaration_Test(
+						"class Test {",
+						"  public int root() {",
+						"    return instancePublicMethod(5);",
+						"  }",
+						"  /**",
+						"  * @wbp.eval.method.return value",
+						"  */",
+						"  public int instancePublicMethod(int value) {",
+						"    return 2 * value;",
+						"  }",
+						"}");
+		waitForAutoBuild();
+		//
+		assertEquals(5, evaluateSingleMethod(typeDeclaration, "root()"));
+	}
 
-  /**
-   * Test for <code>@wbp.eval.method.return parameterName</code> support.
-   * <p>
-   * Some text before tag.
-   */
-  public void test_instancePublicMethod_withReturnTag2() throws Exception {
-    TypeDeclaration typeDeclaration =
-        createTypeDeclaration_Test(
-            "class Test {",
-            "  public int root() {",
-            "    return instancePublicMethod(5);",
-            "  }",
-            "  /**",
-            "  * Some description.",
-            "  * @wbp.eval.method.return value",
-            "  */",
-            "  public int instancePublicMethod(int value) {",
-            "    return 2 * value;",
-            "  }",
-            "}");
-    waitForAutoBuild();
-    //
-    assertEquals(5, evaluateSingleMethod(typeDeclaration, "root()"));
-  }
+	/**
+	 * Test for <code>@wbp.eval.method.return parameterName</code> support.
+	 * <p>
+	 * Some text before tag.
+	 */
+	public void test_instancePublicMethod_withReturnTag2() throws Exception {
+		TypeDeclaration typeDeclaration =
+				createTypeDeclaration_Test(
+						"class Test {",
+						"  public int root() {",
+						"    return instancePublicMethod(5);",
+						"  }",
+						"  /**",
+						"  * Some description.",
+						"  * @wbp.eval.method.return value",
+						"  */",
+						"  public int instancePublicMethod(int value) {",
+						"    return 2 * value;",
+						"  }",
+						"}");
+		waitForAutoBuild();
+		//
+		assertEquals(5, evaluateSingleMethod(typeDeclaration, "root()"));
+	}
 
-  public void test_staticPublicMethod_inner() throws Exception {
-    TypeDeclaration typeDeclaration =
-        createTypeDeclaration_Test(
-            "class Test {",
-            "  public int call_innerMethod() {",
-            "    return Foo.innerMethod(5);",
-            "  }",
-            "  public static class Foo {",
-            "    public static int innerMethod(int i) {",
-            "      return 3 * i;",
-            "    }",
-            "  }",
-            "}");
-    waitForAutoBuild();
-    Object actual = evaluateSingleMethod(typeDeclaration, "call_innerMethod()");
-    assertEquals(15, actual);
-  }
+	public void test_staticPublicMethod_inner() throws Exception {
+		TypeDeclaration typeDeclaration =
+				createTypeDeclaration_Test(
+						"class Test {",
+						"  public int call_innerMethod() {",
+						"    return Foo.innerMethod(5);",
+						"  }",
+						"  public static class Foo {",
+						"    public static int innerMethod(int i) {",
+						"      return 3 * i;",
+						"    }",
+						"  }",
+						"}");
+		waitForAutoBuild();
+		Object actual = evaluateSingleMethod(typeDeclaration, "call_innerMethod()");
+		assertEquals(15, actual);
+	}
 
-  public void test_publicMethod_1() throws Exception {
-    assertTrue(evaluateExpression("Runtime.getRuntime().totalMemory()", "long") instanceof Long);
-  }
+	public void test_publicMethod_1() throws Exception {
+		assertTrue(evaluateExpression("Runtime.getRuntime().totalMemory()", "long") instanceof Long);
+	}
 
-  public void test_staticImportMethod() throws Exception {
-    TypeDeclaration typeDeclaration =
-        createTypeDeclaration_Test(
-            "import static java.lang.System.currentTimeMillis;",
-            "class Test {",
-            "  public long callMe() {",
-            "    return currentTimeMillis();",
-            "  }",
-            "}");
-    long actual = (Long) evaluateSingleMethod(typeDeclaration, "callMe()");
-    assertThat(actual).isGreaterThan(1200L * 1000L * 1000L * 1000L);
-  }
+	public void test_staticImportMethod() throws Exception {
+		TypeDeclaration typeDeclaration =
+				createTypeDeclaration_Test(
+						"import static java.lang.System.currentTimeMillis;",
+						"class Test {",
+						"  public long callMe() {",
+						"    return currentTimeMillis();",
+						"  }",
+						"}");
+		long actual = (Long) evaluateSingleMethod(typeDeclaration, "callMe()");
+		assertThat(actual).isGreaterThan(1200L * 1000L * 1000L * 1000L);
+	}
 
-  public void test_methodInvocation_invalidArguments() throws Exception {
-    try {
-      m_ignoreModelCompileProblems = true;
-      evaluateExpression("Runtime.getRuntime().totalMemory(123)", "long");
-      fail();
-    } catch (Throwable e_) {
-      DesignerException e = DesignerExceptionUtils.getDesignerException(e_);
-      assertEquals(ICoreExceptionConstants.EVAL_METHOD, e.getCode());
-    }
-  }
+	public void test_methodInvocation_invalidArguments() throws Exception {
+		try {
+			m_ignoreModelCompileProblems = true;
+			evaluateExpression("Runtime.getRuntime().totalMemory(123)", "long");
+			fail();
+		} catch (Throwable e_) {
+			DesignerException e = DesignerExceptionUtils.getDesignerException(e_);
+			assertEquals(ICoreExceptionConstants.EVAL_METHOD, e.getCode());
+		}
+	}
 
-  public void test_methodInvocation_nullExpression() throws Exception {
-    TypeDeclaration typeDeclaration =
-        createTypeDeclaration_Test(
-            "class Test {",
-            "  public int root() {",
-            "    Object obj = null;",
-            "    return obj.hashCode();",
-            "  }",
-            "}");
-    try {
-      evaluateSingleMethod(typeDeclaration, "root()");
-      fail();
-    } catch (Throwable e_) {
-      DesignerException e = DesignerExceptionUtils.getDesignerException(e_);
-      assertEquals(ICoreExceptionConstants.EVAL_NULL_INVOCATION_EXPRESSION, e.getCode());
-    }
-  }
+	public void test_methodInvocation_nullExpression() throws Exception {
+		TypeDeclaration typeDeclaration =
+				createTypeDeclaration_Test(
+						"class Test {",
+						"  public int root() {",
+						"    Object obj = null;",
+						"    return obj.hashCode();",
+						"  }",
+						"}");
+		try {
+			evaluateSingleMethod(typeDeclaration, "root()");
+			fail();
+		} catch (Throwable e_) {
+			DesignerException e = DesignerExceptionUtils.getDesignerException(e_);
+			assertEquals(ICoreExceptionConstants.EVAL_NULL_INVOCATION_EXPRESSION, e.getCode());
+		}
+	}
 
-  public void test_methodInvocation_generic() throws Exception {
-    Object actual =
-        evaluateExpression("java.util.Arrays.asList(\"a\", \"b\", \"c\")", "java.util.List");
-    assertEquals("[a, b, c]", actual.toString());
-  }
+	public void test_methodInvocation_generic() throws Exception {
+		Object actual =
+				evaluateExpression("java.util.Arrays.asList(\"a\", \"b\", \"c\")", "java.util.List");
+		assertEquals("[a, b, c]", actual.toString());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // MethodInvocation: varArgs
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_staticPublicMethod_varArgsObject() throws Exception {
-    TypeDeclaration typeDeclaration =
-        createTypeDeclaration("test", "Test.java", getSource(getDoubleQuotes(new String[]{
-            "package test;",
-            "class Test {",
-            "  public static String getValue(int value, Object... parameters) {",
-            "    String result = '';",
-            "    for (Object p : parameters) {",
-            "      result += p;",
-            "    }",
-            "    return result;",
-            "  }",
-            "  public String callMe() {",
-            "    return getValue(5, 'p1', 'p2', 'p3');",
-            "  }",
-            "}"})));
-    waitForAutoBuild();
-    Object actual = evaluateSingleMethod(typeDeclaration, "callMe()");
-    assertEquals("p1p2p3", actual);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// MethodInvocation: varArgs
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_staticPublicMethod_varArgsObject() throws Exception {
+		TypeDeclaration typeDeclaration =
+				createTypeDeclaration("test", "Test.java", getSource(getDoubleQuotes(new String[]{
+						"package test;",
+						"class Test {",
+						"  public static String getValue(int value, Object... parameters) {",
+						"    String result = '';",
+						"    for (Object p : parameters) {",
+						"      result += p;",
+						"    }",
+						"    return result;",
+						"  }",
+						"  public String callMe() {",
+						"    return getValue(5, 'p1', 'p2', 'p3');",
+						"  }",
+				"}"})));
+		waitForAutoBuild();
+		Object actual = evaluateSingleMethod(typeDeclaration, "callMe()");
+		assertEquals("p1p2p3", actual);
+	}
 
-  public void test_staticPublicMethod_varArgsObject_useArray() throws Exception {
-    TypeDeclaration typeDeclaration =
-        createTypeDeclaration("test", "Test.java", getSource(getDoubleQuotes(new String[]{
-            "package test;",
-            "class Test {",
-            "  public static String getValue(int value, String... parameters) {",
-            "    String result = '';",
-            "    for (Object p : parameters) {",
-            "      result += p;",
-            "    }",
-            "    return result;",
-            "  }",
-            "  public String callMe() {",
-            "    return getValue(5, new String[]{'p1', 'p2', 'p3'});",
-            "  }",
-            "}"})));
-    waitForAutoBuild();
-    Object actual = evaluateSingleMethod(typeDeclaration, "callMe()");
-    assertEquals("p1p2p3", actual);
-  }
+	public void test_staticPublicMethod_varArgsObject_useArray() throws Exception {
+		TypeDeclaration typeDeclaration =
+				createTypeDeclaration("test", "Test.java", getSource(getDoubleQuotes(new String[]{
+						"package test;",
+						"class Test {",
+						"  public static String getValue(int value, String... parameters) {",
+						"    String result = '';",
+						"    for (Object p : parameters) {",
+						"      result += p;",
+						"    }",
+						"    return result;",
+						"  }",
+						"  public String callMe() {",
+						"    return getValue(5, new String[]{'p1', 'p2', 'p3'});",
+						"  }",
+				"}"})));
+		waitForAutoBuild();
+		Object actual = evaluateSingleMethod(typeDeclaration, "callMe()");
+		assertEquals("p1p2p3", actual);
+	}
 
-  public void test_staticPublicMethod_varArgsEmpty() throws Exception {
-    TypeDeclaration typeDeclaration =
-        createTypeDeclaration("test", "Test.java", getSource(getDoubleQuotes(new String[]{
-            "package test;",
-            "class Test {",
-            "  public static String getValue(Object... parameters) {",
-            "    String result = 'parameters: ';",
-            "    for (Object p : parameters) {",
-            "      result += p;",
-            "    }",
-            "    return result;",
-            "  }",
-            "  public String callMe() {",
-            "    return getValue();",
-            "  }",
-            "}"})));
-    waitForAutoBuild();
-    Object actual = evaluateSingleMethod(typeDeclaration, "callMe()");
-    assertEquals("parameters: ", actual);
-  }
+	public void test_staticPublicMethod_varArgsEmpty() throws Exception {
+		TypeDeclaration typeDeclaration =
+				createTypeDeclaration("test", "Test.java", getSource(getDoubleQuotes(new String[]{
+						"package test;",
+						"class Test {",
+						"  public static String getValue(Object... parameters) {",
+						"    String result = 'parameters: ';",
+						"    for (Object p : parameters) {",
+						"      result += p;",
+						"    }",
+						"    return result;",
+						"  }",
+						"  public String callMe() {",
+						"    return getValue();",
+						"  }",
+				"}"})));
+		waitForAutoBuild();
+		Object actual = evaluateSingleMethod(typeDeclaration, "callMe()");
+		assertEquals("parameters: ", actual);
+	}
 
-  public void test_staticPublicMethod_varArgsInt() throws Exception {
-    TypeDeclaration typeDeclaration =
-        createTypeDeclaration("test", "Test.java", getSource(getDoubleQuotes(new String[]{
-            "package test;",
-            "class Test {",
-            "  public static int getValue(int value, int... parameters) {",
-            "    int result = 0;",
-            "    for (int p : parameters) {",
-            "      result += p;",
-            "    }",
-            "    return result;",
-            "  }",
-            "  public int callMe() {",
-            "    return getValue(5, 1, 2, 3);",
-            "  }",
-            "}"})));
-    waitForAutoBuild();
-    Object actual = evaluateSingleMethod(typeDeclaration, "callMe()");
-    assertEquals(1 + 2 + 3, actual);
-  }
+	public void test_staticPublicMethod_varArgsInt() throws Exception {
+		TypeDeclaration typeDeclaration =
+				createTypeDeclaration("test", "Test.java", getSource(getDoubleQuotes(new String[]{
+						"package test;",
+						"class Test {",
+						"  public static int getValue(int value, int... parameters) {",
+						"    int result = 0;",
+						"    for (int p : parameters) {",
+						"      result += p;",
+						"    }",
+						"    return result;",
+						"  }",
+						"  public int callMe() {",
+						"    return getValue(5, 1, 2, 3);",
+						"  }",
+				"}"})));
+		waitForAutoBuild();
+		Object actual = evaluateSingleMethod(typeDeclaration, "callMe()");
+		assertEquals(1 + 2 + 3, actual);
+	}
 
-  public void test_staticPublicMethod_varArgsDouble() throws Exception {
-    TypeDeclaration typeDeclaration =
-        createTypeDeclaration("test", "Test.java", getSource(getDoubleQuotes(new String[]{
-            "package test;",
-            "class Test {",
-            "  public static double getValue(int value, double... parameters) {",
-            "    double result = 0;",
-            "    for (double p : parameters) {",
-            "      result += p;",
-            "    }",
-            "    return result;",
-            "  }",
-            "  public double callMe() {",
-            "    return getValue(5, 1.0, 2.0, 3.0);",
-            "  }",
-            "}"})));
-    waitForAutoBuild();
-    Object actual = evaluateSingleMethod(typeDeclaration, "callMe()");
-    assertEquals(1.0 + 2.0 + 3.0, actual);
-  }
+	public void test_staticPublicMethod_varArgsDouble() throws Exception {
+		TypeDeclaration typeDeclaration =
+				createTypeDeclaration("test", "Test.java", getSource(getDoubleQuotes(new String[]{
+						"package test;",
+						"class Test {",
+						"  public static double getValue(int value, double... parameters) {",
+						"    double result = 0;",
+						"    for (double p : parameters) {",
+						"      result += p;",
+						"    }",
+						"    return result;",
+						"  }",
+						"  public double callMe() {",
+						"    return getValue(5, 1.0, 2.0, 3.0);",
+						"  }",
+				"}"})));
+		waitForAutoBuild();
+		Object actual = evaluateSingleMethod(typeDeclaration, "callMe()");
+		assertEquals(1.0 + 2.0 + 3.0, actual);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Use InvocationEvaluatorInterceptor to resolve Method
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static class Test_InvocationEvaluatorInterceptor_resolveMethod
-      extends
-        InvocationEvaluatorInterceptor {
-    @Override
-    public Method resolveMethod(Class<?> clazz, String signature) throws Exception {
-      if (clazz.getName().equals("test.MyObject") && signature.equals("foo()")) {
-        return ReflectionUtils.getMethodBySignature(clazz, "bar()");
-      }
-      return null;
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Use InvocationEvaluatorInterceptor to resolve Method
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static class Test_InvocationEvaluatorInterceptor_resolveMethod
+	extends
+	InvocationEvaluatorInterceptor {
+		@Override
+		public Method resolveMethod(Class<?> clazz, String signature) throws Exception {
+			if (clazz.getName().equals("test.MyObject") && signature.equals("foo()")) {
+				return ReflectionUtils.getMethodBySignature(clazz, "bar()");
+			}
+			return null;
+		}
+	}
 
-  /**
-   * Using {@link InvocationEvaluatorInterceptor#resolveMethod(Class, String)}.
-   */
-  public void test_InvocationEvaluatorInterceptor_resolveMethod() throws Exception {
-    setFileContentSrc(
-        "test/MyObject.java",
-        getSourceDQ(
-            "package test;",
-            "public class MyObject {",
-            "  public static int foo() {",
-            "    return 1;",
-            "  }",
-            "  public static int bar() {",
-            "    return 2;",
-            "  }",
-            "}"));
-    waitForAutoBuild();
-    //
-    TestBundle testBundle = new TestBundle();
-    try {
-      Class<?> interceptorClass = Test_InvocationEvaluatorInterceptor_resolveMethod.class;
-      testBundle.addClass(interceptorClass);
-      testBundle.addExtension(
-          "org.eclipse.wb.core.invocationEvaluatorInterceptors",
-          "<interceptor class='" + interceptorClass.getName() + "'/>");
-      testBundle.install();
-      try {
-        assertEquals(2, evaluateExpression("MyObject.foo()", "int"));
-      } finally {
-        testBundle.uninstall();
-      }
-    } finally {
-      testBundle.dispose();
-    }
-  }
+	/**
+	 * Using {@link InvocationEvaluatorInterceptor#resolveMethod(Class, String)}.
+	 */
+	public void test_InvocationEvaluatorInterceptor_resolveMethod() throws Exception {
+		setFileContentSrc(
+				"test/MyObject.java",
+				getSourceDQ(
+						"package test;",
+						"public class MyObject {",
+						"  public static int foo() {",
+						"    return 1;",
+						"  }",
+						"  public static int bar() {",
+						"    return 2;",
+						"  }",
+						"}"));
+		waitForAutoBuild();
+		//
+		TestBundle testBundle = new TestBundle();
+		try {
+			Class<?> interceptorClass = Test_InvocationEvaluatorInterceptor_resolveMethod.class;
+			testBundle.addClass(interceptorClass);
+			testBundle.addExtension(
+					"org.eclipse.wb.core.invocationEvaluatorInterceptors",
+					"<interceptor class='" + interceptorClass.getName() + "'/>");
+			testBundle.install();
+			try {
+				assertEquals(2, evaluateExpression("MyObject.foo()", "int"));
+			} finally {
+				testBundle.uninstall();
+			}
+		} finally {
+			testBundle.dispose();
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // InvocationEvaluatorInterceptor: intercept MethodInvocation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static class Test_InvocationEvaluatorInterceptor_MI extends InvocationEvaluatorInterceptor {
-    @Override
-    public Object evaluate(EvaluationContext context,
-        MethodInvocation invocation,
-        IMethodBinding methodBinding,
-        Class<?> clazz,
-        Method method,
-        Object[] argumentValues) {
-      if (method.getName().equals("foo")) {
-        return 2;
-      }
-      return AstEvaluationEngine.UNKNOWN;
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// InvocationEvaluatorInterceptor: intercept MethodInvocation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static class Test_InvocationEvaluatorInterceptor_MI extends InvocationEvaluatorInterceptor {
+		@Override
+		public Object evaluate(EvaluationContext context,
+				MethodInvocation invocation,
+				IMethodBinding methodBinding,
+				Class<?> clazz,
+				Method method,
+				Object[] argumentValues) {
+			if (method.getName().equals("foo")) {
+				return 2;
+			}
+			return AstEvaluationEngine.UNKNOWN;
+		}
+	}
 
-  /**
-   * Using {@link InvocationEvaluatorInterceptor#evaluate(MethodInvocation)} .
-   */
-  public void test_InvocationEvaluatorInterceptor_MethodInvocation() throws Exception {
-    setFileContentSrc(
-        "test/MyObject.java",
-        getSourceDQ(
-            "package test;",
-            "public class MyObject {",
-            "  public static int foo() {",
-            "    return 1;",
-            "  }",
-            "}"));
-    waitForAutoBuild();
-    //
-    TestBundle testBundle = new TestBundle();
-    try {
-      Class<?> interceptorClass = Test_InvocationEvaluatorInterceptor_MI.class;
-      testBundle.addClass(interceptorClass);
-      testBundle.addExtension(
-          "org.eclipse.wb.core.invocationEvaluatorInterceptors",
-          "<interceptor class='" + interceptorClass.getName() + "'/>");
-      testBundle.install();
-      try {
-        assertEquals(2, evaluateExpression("MyObject.foo()", "int"));
-      } finally {
-        testBundle.uninstall();
-      }
-    } finally {
-      testBundle.dispose();
-    }
-  }
+	/**
+	 * Using {@link InvocationEvaluatorInterceptor#evaluate(MethodInvocation)} .
+	 */
+	public void test_InvocationEvaluatorInterceptor_MethodInvocation() throws Exception {
+		setFileContentSrc(
+				"test/MyObject.java",
+				getSourceDQ(
+						"package test;",
+						"public class MyObject {",
+						"  public static int foo() {",
+						"    return 1;",
+						"  }",
+						"}"));
+		waitForAutoBuild();
+		//
+		TestBundle testBundle = new TestBundle();
+		try {
+			Class<?> interceptorClass = Test_InvocationEvaluatorInterceptor_MI.class;
+			testBundle.addClass(interceptorClass);
+			testBundle.addExtension(
+					"org.eclipse.wb.core.invocationEvaluatorInterceptors",
+					"<interceptor class='" + interceptorClass.getName() + "'/>");
+			testBundle.install();
+			try {
+				assertEquals(2, evaluateExpression("MyObject.foo()", "int"));
+			} finally {
+				testBundle.uninstall();
+			}
+		} finally {
+			testBundle.dispose();
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Use InvocationEvaluatorInterceptor to rewrite Exception
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static class Test_InvocationEvaluatorInterceptor_rewriteException
-      extends
-        InvocationEvaluatorInterceptor {
-    @Override
-    public Throwable rewriteException(Throwable e) {
-      if ("original".equals(e.getMessage())) {
-        return new Error("rewrite");
-      }
-      return null;
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Use InvocationEvaluatorInterceptor to rewrite Exception
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static class Test_InvocationEvaluatorInterceptor_rewriteException
+	extends
+	InvocationEvaluatorInterceptor {
+		@Override
+		public Throwable rewriteException(Throwable e) {
+			if ("original".equals(e.getMessage())) {
+				return new Error("rewrite");
+			}
+			return null;
+		}
+	}
 
-  /**
-   * Using {@link InvocationEvaluatorInterceptor#rewriteException(Throwable)}.
-   */
-  public void test_InvocationEvaluatorInterceptor_rewriteException() throws Exception {
-    setFileContentSrc(
-        "test/MyObject.java",
-        getSourceDQ(
-            "package test;",
-            "public class MyObject {",
-            "  public MyObject() {",
-            "    throw new Error('original');",
-            "  }",
-            "}"));
-    waitForAutoBuild();
-    //
-    TestBundle testBundle = new TestBundle();
-    try {
-      Class<?> interceptorClass = Test_InvocationEvaluatorInterceptor_rewriteException.class;
-      testBundle.addClass(interceptorClass);
-      testBundle.addExtension(
-          "org.eclipse.wb.core.invocationEvaluatorInterceptors",
-          "<interceptor class='" + interceptorClass.getName() + "'/>");
-      testBundle.install();
-      try {
-        evaluateExpression("new MyObject()", "Object");
-        fail();
-      } catch (Throwable e) {
-        e = DesignerExceptionUtils.getRootCause(e);
-        assertEquals("rewrite", e.getMessage());
-      } finally {
-        testBundle.uninstall();
-      }
-    } finally {
-      testBundle.dispose();
-    }
-  }
+	/**
+	 * Using {@link InvocationEvaluatorInterceptor#rewriteException(Throwable)}.
+	 */
+	public void test_InvocationEvaluatorInterceptor_rewriteException() throws Exception {
+		setFileContentSrc(
+				"test/MyObject.java",
+				getSourceDQ(
+						"package test;",
+						"public class MyObject {",
+						"  public MyObject() {",
+						"    throw new Error('original');",
+						"  }",
+						"}"));
+		waitForAutoBuild();
+		//
+		TestBundle testBundle = new TestBundle();
+		try {
+			Class<?> interceptorClass = Test_InvocationEvaluatorInterceptor_rewriteException.class;
+			testBundle.addClass(interceptorClass);
+			testBundle.addExtension(
+					"org.eclipse.wb.core.invocationEvaluatorInterceptors",
+					"<interceptor class='" + interceptorClass.getName() + "'/>");
+			testBundle.install();
+			try {
+				evaluateExpression("new MyObject()", "Object");
+				fail();
+			} catch (Throwable e) {
+				e = DesignerExceptionUtils.getRootCause(e);
+				assertEquals("rewrite", e.getMessage());
+			} finally {
+				testBundle.uninstall();
+			}
+		} finally {
+			testBundle.dispose();
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ClassInstanceCreation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_creation_1() throws Exception {
-    assertEquals(0, evaluateExpression("new java.util.ArrayList().size()", "int"));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ClassInstanceCreation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_creation_1() throws Exception {
+		assertEquals(0, evaluateExpression("new java.util.ArrayList().size()", "int"));
+	}
 
-  public void test_creation_2() throws Exception {
-    assertEquals(0, evaluateExpression("new java.util.ArrayList(5).size()", "int"));
-  }
+	public void test_creation_2() throws Exception {
+		assertEquals(0, evaluateExpression("new java.util.ArrayList(5).size()", "int"));
+	}
 
-  public void test_creation_invalidArguments() throws Exception {
-    try {
-      m_ignoreModelCompileProblems = true;
-      evaluateExpression("new java.util.ArrayList(-3)", "java.lang.Object");
-      fail();
-    } catch (Throwable e_) {
-      DesignerException e = DesignerExceptionUtils.getDesignerException(e_);
-      assertEquals(ICoreExceptionConstants.EVAL_CONSTRUCTOR, e.getCode());
-    }
-  }
+	public void test_creation_invalidArguments() throws Exception {
+		try {
+			m_ignoreModelCompileProblems = true;
+			evaluateExpression("new java.util.ArrayList(-3)", "java.lang.Object");
+			fail();
+		} catch (Throwable e_) {
+			DesignerException e = DesignerExceptionUtils.getDesignerException(e_);
+			assertEquals(ICoreExceptionConstants.EVAL_CONSTRUCTOR, e.getCode());
+		}
+	}
 
-  public void test_creation_String() throws Exception {
-    assertEquals(
-        new String(new char[]{'a', 'b', 'c', 'd'}, 1, 2),
-        evaluateExpression(
-            "new String(new char[]{\'a\', \'b\', \'c\', \'d\'}, 1, 2)",
-            "java.lang.String"));
-  }
+	public void test_creation_String() throws Exception {
+		assertEquals(
+				new String(new char[]{'a', 'b', 'c', 'd'}, 1, 2),
+				evaluateExpression(
+						"new String(new char[]{\'a\', \'b\', \'c\', \'d\'}, 1, 2)",
+						"java.lang.String"));
+	}
 
-  public void test_creation_innerStatic() throws Exception {
-    TypeDeclaration typeDeclaration =
-        createTypeDeclaration_Test(
-            "class Test {",
-            "  public Object root() {",
-            "    return new Foo();",
-            "  }",
-            "  public static class Foo {",
-            "  }",
-            "}");
-    waitForAutoBuild();
-    Object actual = evaluateSingleMethod(typeDeclaration, "root()");
-    assertThat(actual).isNotNull();
-  }
+	public void test_creation_innerStatic() throws Exception {
+		TypeDeclaration typeDeclaration =
+				createTypeDeclaration_Test(
+						"class Test {",
+						"  public Object root() {",
+						"    return new Foo();",
+						"  }",
+						"  public static class Foo {",
+						"  }",
+						"}");
+		waitForAutoBuild();
+		Object actual = evaluateSingleMethod(typeDeclaration, "root()");
+		assertThat(actual).isNotNull();
+	}
 
-  public void test_creation_innerNotStatic() throws Exception {
-    TypeDeclaration typeDeclaration =
-        createTypeDeclaration_Test(
-            "class Test {",
-            "  public Object root() {",
-            "    return new Foo();",
-            "  }",
-            "  public class Foo {",
-            "  }",
-            "}");
-    waitForAutoBuild();
-    Object actual = evaluateSingleMethod(typeDeclaration, "root()");
-    assertThat(actual).isNull();
-  }
+	public void test_creation_innerNotStatic() throws Exception {
+		TypeDeclaration typeDeclaration =
+				createTypeDeclaration_Test(
+						"class Test {",
+						"  public Object root() {",
+						"    return new Foo();",
+						"  }",
+						"  public class Foo {",
+						"  }",
+						"}");
+		waitForAutoBuild();
+		Object actual = evaluateSingleMethod(typeDeclaration, "root()");
+		assertThat(actual).isNull();
+	}
 
-  public void test_creation_varArgsDouble() throws Exception {
-    TypeDeclaration typeDeclaration =
-        createTypeDeclaration("test", "Test.java", getSource(getDoubleQuotes(new String[]{
-            "package test;",
-            "public class Test {",
-            "  double result = 0;",
-            "  public Test(int value, double... parameters) {",
-            "    for (double p : parameters) {",
-            "      result += p;",
-            "    }",
-            "  }",
-            "  public static Object callMe() {",
-            "    return new Test(5, 1.0, 2.0, 3.0);",
-            "  }",
-            "}"})));
-    waitForAutoBuild();
-    Object actual = evaluateSingleMethod(typeDeclaration, "callMe()");
-    assertEquals(1.0 + 2.0 + 3.0, ReflectionUtils.getFieldObject(actual, "result"));
-  }
+	public void test_creation_varArgsDouble() throws Exception {
+		TypeDeclaration typeDeclaration =
+				createTypeDeclaration("test", "Test.java", getSource(getDoubleQuotes(new String[]{
+						"package test;",
+						"public class Test {",
+						"  double result = 0;",
+						"  public Test(int value, double... parameters) {",
+						"    for (double p : parameters) {",
+						"      result += p;",
+						"    }",
+						"  }",
+						"  public static Object callMe() {",
+						"    return new Test(5, 1.0, 2.0, 3.0);",
+						"  }",
+				"}"})));
+		waitForAutoBuild();
+		Object actual = evaluateSingleMethod(typeDeclaration, "callMe()");
+		assertEquals(1.0 + 2.0 + 3.0, ReflectionUtils.getFieldObject(actual, "result"));
+	}
 
-  public void test_creation_varArgsEmpty() throws Exception {
-    TypeDeclaration typeDeclaration =
-        createTypeDeclaration("test", "Test.java", getSource(getDoubleQuotes(new String[]{
-            "package test;",
-            "public class Test {",
-            "  String result = '';",
-            "  public Test(String... parameters) {",
-            "    for (String p : parameters) {",
-            "      result += p;",
-            "    }",
-            "  }",
-            "  public static Object callMe() {",
-            "    return new Test();",
-            "  }",
-            "}"})));
-    waitForAutoBuild();
-    Object actual = evaluateSingleMethod(typeDeclaration, "callMe()");
-    assertEquals("", ReflectionUtils.getFieldObject(actual, "result"));
-  }
+	public void test_creation_varArgsEmpty() throws Exception {
+		TypeDeclaration typeDeclaration =
+				createTypeDeclaration("test", "Test.java", getSource(getDoubleQuotes(new String[]{
+						"package test;",
+						"public class Test {",
+						"  String result = '';",
+						"  public Test(String... parameters) {",
+						"    for (String p : parameters) {",
+						"      result += p;",
+						"    }",
+						"  }",
+						"  public static Object callMe() {",
+						"    return new Test();",
+						"  }",
+				"}"})));
+		waitForAutoBuild();
+		Object actual = evaluateSingleMethod(typeDeclaration, "callMe()");
+		assertEquals("", ReflectionUtils.getFieldObject(actual, "result"));
+	}
 
-  public void test_creation_genericType() throws Exception {
-    setFileContentSrc(
-        "test/MyObject.java",
-        getSourceDQ(
-            "package test;",
-            "public class MyObject<E> {",
-            "  public MyObject(E e, int s) {",
-            "  }",
-            "}"));
-    waitForAutoBuild();
-    //
-    String source = getSourceDQ("new MyObject<String>('', 0)");
-    Object object = evaluateExpression(source, "Object");
-    assertNotNull(object);
-  }
+	public void test_creation_genericType() throws Exception {
+		setFileContentSrc(
+				"test/MyObject.java",
+				getSourceDQ(
+						"package test;",
+						"public class MyObject<E> {",
+						"  public MyObject(E e, int s) {",
+						"  }",
+						"}"));
+		waitForAutoBuild();
+		//
+		String source = getSourceDQ("new MyObject<String>('', 0)");
+		Object object = evaluateExpression(source, "Object");
+		assertNotNull(object);
+	}
 
-  public void test_creation_genericType_array() throws Exception {
-    setFileContentSrc(
-        "test/MyObject.java",
-        getSourceDQ(
-            "package test;",
-            "public class MyObject<E> {",
-            "  public MyObject(E[] e, int s) {",
-            "  }",
-            "}"));
-    waitForAutoBuild();
-    //
-    String source = getSourceDQ("new MyObject<String>(new String[]{}, 0)");
-    Object object = evaluateExpression(source, "Object");
-    assertNotNull(object);
-  }
+	public void test_creation_genericType_array() throws Exception {
+		setFileContentSrc(
+				"test/MyObject.java",
+				getSourceDQ(
+						"package test;",
+						"public class MyObject<E> {",
+						"  public MyObject(E[] e, int s) {",
+						"  }",
+						"}"));
+		waitForAutoBuild();
+		//
+		String source = getSourceDQ("new MyObject<String>(new String[]{}, 0)");
+		Object object = evaluateExpression(source, "Object");
+		assertNotNull(object);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Creation: AnonymousClassDeclaration
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static class TestAnonymousInvocationEvaluatorInterceptor
-      extends
-        InvocationEvaluatorInterceptor {
-    @Override
-    public Object evaluateAnonymous(EvaluationContext context,
-        ClassInstanceCreation expression,
-        ITypeBinding typeBinding,
-        ITypeBinding typeBindingConcrete,
-        IMethodBinding methodBinding,
-        Object[] arguments) throws Exception {
-      if (AstNodeUtils.getFullyQualifiedName(typeBindingConcrete, false).equals("test.MyClass")) {
-        return new Object();
-      }
-      return AstEvaluationEngine.UNKNOWN;
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Creation: AnonymousClassDeclaration
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static class TestAnonymousInvocationEvaluatorInterceptor
+	extends
+	InvocationEvaluatorInterceptor {
+		@Override
+		public Object evaluateAnonymous(EvaluationContext context,
+				ClassInstanceCreation expression,
+				ITypeBinding typeBinding,
+				ITypeBinding typeBindingConcrete,
+				IMethodBinding methodBinding,
+				Object[] arguments) throws Exception {
+			if (AstNodeUtils.getFullyQualifiedName(typeBindingConcrete, false).equals("test.MyClass")) {
+				return new Object();
+			}
+			return AstEvaluationEngine.UNKNOWN;
+		}
+	}
 
-  /**
-   * During evaluation of {@link ClassInstanceCreation} with {@link AnonymousClassDeclaration} we
-   * use {@link InvocationEvaluatorInterceptor}.
-   */
-  public void test_anonymous_InvocationEvaluatorInterceptor_evaluateAnonymous() throws Exception {
-    setFileContentSrc(
-        "test/MyClass.java",
-        getSource(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "package test;",
-            "public class MyClass {",
-            "}"));
-    waitForAutoBuild();
-    //
-    TestBundle testBundle = new TestBundle();
-    try {
-      Class<?> interceptorClass = TestAnonymousInvocationEvaluatorInterceptor.class;
-      testBundle.addClass(interceptorClass);
-      testBundle.addExtension(
-          "org.eclipse.wb.core.invocationEvaluatorInterceptors",
-          "<interceptor class='" + interceptorClass.getName() + "'/>");
-      testBundle.install();
-      // work with Bundle
-      TypeDeclaration typeDeclaration =
-          createTypeDeclaration(
-              "test",
-              "Test.java",
-              getSource(
-                  "// filler filler filler filler filler",
-                  "package test;",
-                  "public class Test {",
-                  "  public Object foo() {",
-                  "    return new MyClass() {",
-                  "    };",
-                  "  }",
-                  "}"));
-      // evaluate, should be no exception
-      Object result = evaluateSingleMethod(typeDeclaration, "foo()");
-      assertSame(Object.class, result.getClass());
-    } finally {
-      testBundle.dispose();
-    }
-  }
+	/**
+	 * During evaluation of {@link ClassInstanceCreation} with {@link AnonymousClassDeclaration} we
+	 * use {@link InvocationEvaluatorInterceptor}.
+	 */
+	public void test_anonymous_InvocationEvaluatorInterceptor_evaluateAnonymous() throws Exception {
+		setFileContentSrc(
+				"test/MyClass.java",
+				getSource(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"package test;",
+						"public class MyClass {",
+						"}"));
+		waitForAutoBuild();
+		//
+		TestBundle testBundle = new TestBundle();
+		try {
+			Class<?> interceptorClass = TestAnonymousInvocationEvaluatorInterceptor.class;
+			testBundle.addClass(interceptorClass);
+			testBundle.addExtension(
+					"org.eclipse.wb.core.invocationEvaluatorInterceptors",
+					"<interceptor class='" + interceptorClass.getName() + "'/>");
+			testBundle.install();
+			// work with Bundle
+			TypeDeclaration typeDeclaration =
+					createTypeDeclaration(
+							"test",
+							"Test.java",
+							getSource(
+									"// filler filler filler filler filler",
+									"package test;",
+									"public class Test {",
+									"  public Object foo() {",
+									"    return new MyClass() {",
+									"    };",
+									"  }",
+									"}"));
+			// evaluate, should be no exception
+			Object result = evaluateSingleMethod(typeDeclaration, "foo()");
+			assertSame(Object.class, result.getClass());
+		} finally {
+			testBundle.dispose();
+		}
+	}
 
-  /**
-   * During evaluation of {@link ClassInstanceCreation} with {@link AnonymousClassDeclaration} we
-   * use {@link InvocationEvaluatorInterceptor}. "concrete" type should be not abstract.
-   */
-  public void test_anonymous_InvocationEvaluatorInterceptor_evaluateAnonymousAbstract()
-      throws Exception {
-    setFileContentSrc(
-        "test/MyClass.java",
-        getSource(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "package test;",
-            "public class MyClass {",
-            "}"));
-    setFileContentSrc(
-        "test/AbstractSubClass.java",
-        getSource(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "package test;",
-            "public abstract class AbstractSubClass extends MyClass {",
-            "}"));
-    waitForAutoBuild();
-    //
-    TestBundle testBundle = new TestBundle();
-    try {
-      Class<?> interceptorClass = TestAnonymousInvocationEvaluatorInterceptor.class;
-      testBundle.addClass(interceptorClass);
-      testBundle.addExtension(
-          "org.eclipse.wb.core.invocationEvaluatorInterceptors",
-          "<interceptor class='" + interceptorClass.getName() + "'/>");
-      testBundle.install();
-      // work with Bundle
-      TypeDeclaration typeDeclaration =
-          createTypeDeclaration(
-              "test",
-              "Test.java",
-              getSource(
-                  "// filler filler filler filler filler",
-                  "package test;",
-                  "public class Test {",
-                  "  public Object foo() {",
-                  "    return new AbstractSubClass() {",
-                  "    };",
-                  "  }",
-                  "}"));
-      // evaluate, should be no exception
-      Object result = evaluateSingleMethod(typeDeclaration, "foo()");
-      assertSame(Object.class, result.getClass());
-    } finally {
-      testBundle.dispose();
-    }
-  }
+	/**
+	 * During evaluation of {@link ClassInstanceCreation} with {@link AnonymousClassDeclaration} we
+	 * use {@link InvocationEvaluatorInterceptor}. "concrete" type should be not abstract.
+	 */
+	public void test_anonymous_InvocationEvaluatorInterceptor_evaluateAnonymousAbstract()
+			throws Exception {
+		setFileContentSrc(
+				"test/MyClass.java",
+				getSource(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"package test;",
+						"public class MyClass {",
+						"}"));
+		setFileContentSrc(
+				"test/AbstractSubClass.java",
+				getSource(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"package test;",
+						"public abstract class AbstractSubClass extends MyClass {",
+						"}"));
+		waitForAutoBuild();
+		//
+		TestBundle testBundle = new TestBundle();
+		try {
+			Class<?> interceptorClass = TestAnonymousInvocationEvaluatorInterceptor.class;
+			testBundle.addClass(interceptorClass);
+			testBundle.addExtension(
+					"org.eclipse.wb.core.invocationEvaluatorInterceptors",
+					"<interceptor class='" + interceptorClass.getName() + "'/>");
+			testBundle.install();
+			// work with Bundle
+			TypeDeclaration typeDeclaration =
+					createTypeDeclaration(
+							"test",
+							"Test.java",
+							getSource(
+									"// filler filler filler filler filler",
+									"package test;",
+									"public class Test {",
+									"  public Object foo() {",
+									"    return new AbstractSubClass() {",
+									"    };",
+									"  }",
+									"}"));
+			// evaluate, should be no exception
+			Object result = evaluateSingleMethod(typeDeclaration, "foo()");
+			assertSame(Object.class, result.getClass());
+		} finally {
+			testBundle.dispose();
+		}
+	}
 
-  /**
-   * We don't evaluate {@link ClassInstanceCreation} with {@link AnonymousClassDeclaration}.
-   */
-  public void test_anonymous_AnonymousEvaluationError() throws Exception {
-    setFileContentSrc(
-        "test/MyClass.java",
-        getSource(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "package test;",
-            "public class MyClass {",
-            "}"));
-    waitForAutoBuild();
-    //
-    TypeDeclaration typeDeclaration =
-        createTypeDeclaration_Test(
-            "// filler filler filler filler filler",
-            "public class Test {",
-            "  public Object foo() {",
-            "    return new MyClass() {",
-            "    };",
-            "  }",
-            "}");
-    try {
-      evaluateSingleMethod(typeDeclaration, "foo()");
-      fail();
-    } catch (Throwable e) {
-      assertTrue(AnonymousEvaluationError.is(e));
-    }
-  }
+	/**
+	 * We don't evaluate {@link ClassInstanceCreation} with {@link AnonymousClassDeclaration}.
+	 */
+	public void test_anonymous_AnonymousEvaluationError() throws Exception {
+		setFileContentSrc(
+				"test/MyClass.java",
+				getSource(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"package test;",
+						"public class MyClass {",
+						"}"));
+		waitForAutoBuild();
+		//
+		TypeDeclaration typeDeclaration =
+				createTypeDeclaration_Test(
+						"// filler filler filler filler filler",
+						"public class Test {",
+						"  public Object foo() {",
+						"    return new MyClass() {",
+						"    };",
+						"  }",
+						"}");
+		try {
+			evaluateSingleMethod(typeDeclaration, "foo()");
+			fail();
+		} catch (Throwable e) {
+			assertTrue(AnonymousEvaluationError.is(e));
+		}
+	}
 
-  /**
-   * We still should evaluate anonymous listeners or handlers.
-   */
-  public void test_anonymous_evaluateListener() throws Exception {
-    setFileContentSrc(
-        "test/MyListener.java",
-        getSource(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "package test;",
-            "public class MyListener {",
-            "}"));
-    waitForAutoBuild();
-    //
-    TypeDeclaration typeDeclaration =
-        createTypeDeclaration_Test(
-            "// filler filler filler filler filler",
-            "public class Test {",
-            "  public Object foo() {",
-            "    return new MyListener() {",
-            "    };",
-            "  }",
-            "}");
-    //
-    Object o = evaluateSingleMethod(typeDeclaration, "foo()");
-    assertTrue(ReflectionUtils.isSuccessorOf(o, "test.MyListener"));
-  }
+	/**
+	 * We still should evaluate anonymous listeners or handlers.
+	 */
+	public void test_anonymous_evaluateListener() throws Exception {
+		setFileContentSrc(
+				"test/MyListener.java",
+				getSource(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"package test;",
+						"public class MyListener {",
+						"}"));
+		waitForAutoBuild();
+		//
+		TypeDeclaration typeDeclaration =
+				createTypeDeclaration_Test(
+						"// filler filler filler filler filler",
+						"public class Test {",
+						"  public Object foo() {",
+						"    return new MyListener() {",
+						"    };",
+						"  }",
+						"}");
+		//
+		Object o = evaluateSingleMethod(typeDeclaration, "foo()");
+		assertTrue(ReflectionUtils.isSuccessorOf(o, "test.MyListener"));
+	}
 
-  /**
-   * We still should evaluate anonymous listeners or handlers.
-   */
-  public void test_anonymous_evaluateHandler() throws Exception {
-    setFileContentSrc(
-        "test/MyHandler.java",
-        getSource(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "package test;",
-            "public class MyHandler {",
-            "}"));
-    waitForAutoBuild();
-    //
-    TypeDeclaration typeDeclaration =
-        createTypeDeclaration_Test(
-            "// filler filler filler filler filler",
-            "public class Test {",
-            "  public Object foo() {",
-            "    return new MyHandler() {",
-            "    };",
-            "  }",
-            "}");
-    //
-    Object o = evaluateSingleMethod(typeDeclaration, "foo()");
-    assertTrue(ReflectionUtils.isSuccessorOf(o, "test.MyHandler"));
-  }
+	/**
+	 * We still should evaluate anonymous listeners or handlers.
+	 */
+	public void test_anonymous_evaluateHandler() throws Exception {
+		setFileContentSrc(
+				"test/MyHandler.java",
+				getSource(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"package test;",
+						"public class MyHandler {",
+						"}"));
+		waitForAutoBuild();
+		//
+		TypeDeclaration typeDeclaration =
+				createTypeDeclaration_Test(
+						"// filler filler filler filler filler",
+						"public class Test {",
+						"  public Object foo() {",
+						"    return new MyHandler() {",
+						"    };",
+						"  }",
+						"}");
+		//
+		Object o = evaluateSingleMethod(typeDeclaration, "foo()");
+		assertTrue(ReflectionUtils.isSuccessorOf(o, "test.MyHandler"));
+	}
 
-  /**
-   * We still should evaluate anonymous listeners or handlers.
-   */
-  public void test_anonymous_evaluateListenerAdapter() throws Exception {
-    setFileContentSrc(
-        "test/MyListener.java",
-        getSource(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "package test;",
-            "public interface MyListener {",
-            "}"));
-    setFileContentSrc(
-        "test/MyListenerAdapter.java",
-        getSource(
-            "// filler filler filler filler filler",
-            "package test;",
-            "public class MyListenerAdapter implements MyListener {",
-            "}"));
-    waitForAutoBuild();
-    //
-    TypeDeclaration typeDeclaration =
-        createTypeDeclaration_Test(
-            "// filler filler filler filler filler",
-            "public class Test {",
-            "  public Object foo() {",
-            "    return new MyListenerAdapter() {",
-            "    };",
-            "  }",
-            "}");
-    //
-    Object o = evaluateSingleMethod(typeDeclaration, "foo()");
-    assertTrue(ReflectionUtils.isSuccessorOf(o, "test.MyListener"));
-  }
+	/**
+	 * We still should evaluate anonymous listeners or handlers.
+	 */
+	public void test_anonymous_evaluateListenerAdapter() throws Exception {
+		setFileContentSrc(
+				"test/MyListener.java",
+				getSource(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"package test;",
+						"public interface MyListener {",
+						"}"));
+		setFileContentSrc(
+				"test/MyListenerAdapter.java",
+				getSource(
+						"// filler filler filler filler filler",
+						"package test;",
+						"public class MyListenerAdapter implements MyListener {",
+						"}"));
+		waitForAutoBuild();
+		//
+		TypeDeclaration typeDeclaration =
+				createTypeDeclaration_Test(
+						"// filler filler filler filler filler",
+						"public class Test {",
+						"  public Object foo() {",
+						"    return new MyListenerAdapter() {",
+						"    };",
+						"  }",
+						"}");
+		//
+		Object o = evaluateSingleMethod(typeDeclaration, "foo()");
+		assertTrue(ReflectionUtils.isSuccessorOf(o, "test.MyListener"));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ClassInstanceCreation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public static class TestConstructorInvocationEvaluatorInterceptor
-      extends
-        InvocationEvaluatorInterceptor {
-    @Override
-    public Object evaluate(EvaluationContext context,
-        ClassInstanceCreation expression,
-        ITypeBinding typeBinding,
-        Class<?> clazz,
-        Constructor<?> actualConstructor,
-        Object[] arguments) throws Exception {
-      if (AstNodeUtils.isSuccessorOf(typeBinding, "test.MyObject")) {
-        return clazz.newInstance();
-      }
-      return AstEvaluationEngine.UNKNOWN;
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ClassInstanceCreation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public static class TestConstructorInvocationEvaluatorInterceptor
+	extends
+	InvocationEvaluatorInterceptor {
+		@Override
+		public Object evaluate(EvaluationContext context,
+				ClassInstanceCreation expression,
+				ITypeBinding typeBinding,
+				Class<?> clazz,
+				Constructor<?> actualConstructor,
+				Object[] arguments) throws Exception {
+			if (AstNodeUtils.isSuccessorOf(typeBinding, "test.MyObject")) {
+				return clazz.newInstance();
+			}
+			return AstEvaluationEngine.UNKNOWN;
+		}
+	}
 
-  /**
-   * Test that during {@link ClassInstanceCreation} evaluation
-   * {@link InvocationEvaluatorInterceptor} is used.
-   * <p>
-   * Default constructor is OK.
-   */
-  public void test_creation_InvocationEvaluatorInterceptor_goodResult() throws Exception {
-    setFileContentSrc(
-        "test/MyObject.java",
-        getSourceDQ(
-            "package test;",
-            "public class MyObject {",
-            "  public MyObject() {",
-            "  }",
-            "  public MyObject(int value) {",
-            "    throw new IllegalStateException();",
-            "  }",
-            "}"));
-    waitForAutoBuild();
-    //
-    TestBundle testBundle = new TestBundle();
-    try {
-      Class<?> interceptorClass = TestConstructorInvocationEvaluatorInterceptor.class;
-      testBundle.addClass(interceptorClass);
-      testBundle.addExtension(
-          "org.eclipse.wb.core.invocationEvaluatorInterceptors",
-          "<interceptor class='" + interceptorClass.getName() + "'/>");
-      testBundle.install();
-      try {
-        TypeDeclaration typeDeclaration =
-            createTypeDeclaration_Test(
-                "public class Test {",
-                "  public Object foo() {",
-                "    return new MyObject(0);",
-                "  }",
-                "}");
-        // evaluate, should be no exception
-        evaluateSingleMethod(typeDeclaration, "foo()");
-      } finally {
-        testBundle.uninstall();
-      }
-    } finally {
-      testBundle.dispose();
-    }
-  }
+	/**
+	 * Test that during {@link ClassInstanceCreation} evaluation
+	 * {@link InvocationEvaluatorInterceptor} is used.
+	 * <p>
+	 * Default constructor is OK.
+	 */
+	public void test_creation_InvocationEvaluatorInterceptor_goodResult() throws Exception {
+		setFileContentSrc(
+				"test/MyObject.java",
+				getSourceDQ(
+						"package test;",
+						"public class MyObject {",
+						"  public MyObject() {",
+						"  }",
+						"  public MyObject(int value) {",
+						"    throw new IllegalStateException();",
+						"  }",
+						"}"));
+		waitForAutoBuild();
+		//
+		TestBundle testBundle = new TestBundle();
+		try {
+			Class<?> interceptorClass = TestConstructorInvocationEvaluatorInterceptor.class;
+			testBundle.addClass(interceptorClass);
+			testBundle.addExtension(
+					"org.eclipse.wb.core.invocationEvaluatorInterceptors",
+					"<interceptor class='" + interceptorClass.getName() + "'/>");
+			testBundle.install();
+			try {
+				TypeDeclaration typeDeclaration =
+						createTypeDeclaration_Test(
+								"public class Test {",
+								"  public Object foo() {",
+								"    return new MyObject(0);",
+								"  }",
+								"}");
+				// evaluate, should be no exception
+				evaluateSingleMethod(typeDeclaration, "foo()");
+			} finally {
+				testBundle.uninstall();
+			}
+		} finally {
+			testBundle.dispose();
+		}
+	}
 
-  /**
-   * Test that during {@link ClassInstanceCreation} evaluation
-   * {@link InvocationEvaluatorInterceptor} is used.
-   * <p>
-   * Default constructor is throws {@link Exception}.
-   */
-  public void test_creation_InvocationEvaluatorInterceptor_badResult() throws Exception {
-    setFileContentSrc(
-        "test/MyObject.java",
-        getSourceDQ(
-            "package test;",
-            "public class MyObject {",
-            "  public MyObject() {",
-            "    throw new IllegalStateException();",
-            "  }",
-            "  public MyObject(int value) {",
-            "  }",
-            "}"));
-    waitForAutoBuild();
-    //
-    TestBundle testBundle = new TestBundle();
-    try {
-      Class<?> interceptorClass = TestConstructorInvocationEvaluatorInterceptor.class;
-      testBundle.addClass(interceptorClass);
-      testBundle.addExtension(
-          "org.eclipse.wb.core.invocationEvaluatorInterceptors",
-          "<interceptor class='" + interceptorClass.getName() + "'/>");
-      testBundle.install();
-      try {
-        TypeDeclaration typeDeclaration =
-            createTypeDeclaration_Test(
-                "public class Test {",
-                "  public Object foo() {",
-                "    return new MyObject(0);",
-                "  }",
-                "}");
-        // evaluate, but default constructor (used in interceptor) throws exception
-        try {
-          evaluateSingleMethod(typeDeclaration, "foo()");
-          fail();
-        } catch (Throwable e_) {
-          Throwable e = DesignerExceptionUtils.getRootCause(e_);
-          assertThat(e).isInstanceOf(IllegalStateException.class);
-        }
-      } finally {
-        testBundle.uninstall();
-      }
-    } finally {
-      testBundle.dispose();
-    }
-  }
+	/**
+	 * Test that during {@link ClassInstanceCreation} evaluation
+	 * {@link InvocationEvaluatorInterceptor} is used.
+	 * <p>
+	 * Default constructor is throws {@link Exception}.
+	 */
+	public void test_creation_InvocationEvaluatorInterceptor_badResult() throws Exception {
+		setFileContentSrc(
+				"test/MyObject.java",
+				getSourceDQ(
+						"package test;",
+						"public class MyObject {",
+						"  public MyObject() {",
+						"    throw new IllegalStateException();",
+						"  }",
+						"  public MyObject(int value) {",
+						"  }",
+						"}"));
+		waitForAutoBuild();
+		//
+		TestBundle testBundle = new TestBundle();
+		try {
+			Class<?> interceptorClass = TestConstructorInvocationEvaluatorInterceptor.class;
+			testBundle.addClass(interceptorClass);
+			testBundle.addExtension(
+					"org.eclipse.wb.core.invocationEvaluatorInterceptors",
+					"<interceptor class='" + interceptorClass.getName() + "'/>");
+			testBundle.install();
+			try {
+				TypeDeclaration typeDeclaration =
+						createTypeDeclaration_Test(
+								"public class Test {",
+								"  public Object foo() {",
+								"    return new MyObject(0);",
+								"  }",
+								"}");
+				// evaluate, but default constructor (used in interceptor) throws exception
+				try {
+					evaluateSingleMethod(typeDeclaration, "foo()");
+					fail();
+				} catch (Throwable e_) {
+					Throwable e = DesignerExceptionUtils.getRootCause(e_);
+					assertThat(e).isInstanceOf(IllegalStateException.class);
+				}
+			} finally {
+				testBundle.uninstall();
+			}
+		} finally {
+			testBundle.dispose();
+		}
+	}
 
-  /**
-   * If {@link ClassInstanceCreation} uses {@link ThisExpression} and superclass is not compatible
-   * with parameter type, we use <code>null</code> as value.
-   * <p>
-   * Here {@link ThisExpression} value is compatible.
-   */
-  public void test_creation_useThisExpression_compatible() throws Exception {
-    String[] myObjectLines =
-        new String[]{
-            "package test;",
-            "public class MyObject {",
-            "  private Object m_field;",
-            "  public MyObject(Object p) {",
-            "    m_field = p;",
-            "  }",
-            "}"};
-    Object myObject = check_creation_replaceThisExpression_withNull(myObjectLines);
-    assertNotSame(null, ReflectionUtils.getFieldObject(myObject, "m_field"));
-  }
+	/**
+	 * If {@link ClassInstanceCreation} uses {@link ThisExpression} and superclass is not compatible
+	 * with parameter type, we use <code>null</code> as value.
+	 * <p>
+	 * Here {@link ThisExpression} value is compatible.
+	 */
+	public void test_creation_useThisExpression_compatible() throws Exception {
+		String[] myObjectLines =
+				new String[]{
+						"package test;",
+						"public class MyObject {",
+						"  private Object m_field;",
+						"  public MyObject(Object p) {",
+						"    m_field = p;",
+						"  }",
+		"}"};
+		Object myObject = check_creation_replaceThisExpression_withNull(myObjectLines);
+		assertNotSame(null, ReflectionUtils.getFieldObject(myObject, "m_field"));
+	}
 
-  /**
-   * If {@link ClassInstanceCreation} uses {@link ThisExpression} and superclass is not compatible
-   * with parameter type, we use <code>null</code> as value.
-   * <p>
-   * Here {@link ThisExpression} value is NOT compatible.
-   */
-  public void test_creation_useThisExpression_notCompatible() throws Exception {
-    String[] myObjectLines =
-        new String[]{
-            "package test;",
-            "public class MyObject {",
-            "  private Test m_field;",
-            "  public MyObject(Test p) {",
-            "    m_field = p;",
-            "  }",
-            "}"};
-    Object myObject = check_creation_replaceThisExpression_withNull(myObjectLines);
-    assertSame(null, ReflectionUtils.getFieldObject(myObject, "m_field"));
-  }
+	/**
+	 * If {@link ClassInstanceCreation} uses {@link ThisExpression} and superclass is not compatible
+	 * with parameter type, we use <code>null</code> as value.
+	 * <p>
+	 * Here {@link ThisExpression} value is NOT compatible.
+	 */
+	public void test_creation_useThisExpression_notCompatible() throws Exception {
+		String[] myObjectLines =
+				new String[]{
+						"package test;",
+						"public class MyObject {",
+						"  private Test m_field;",
+						"  public MyObject(Test p) {",
+						"    m_field = p;",
+						"  }",
+		"}"};
+		Object myObject = check_creation_replaceThisExpression_withNull(myObjectLines);
+		assertSame(null, ReflectionUtils.getFieldObject(myObject, "m_field"));
+	}
 
-  private Object check_creation_replaceThisExpression_withNull(String[] myObjectLines)
-      throws Exception {
-    m_ignoreModelCompileProblems = true;
-    setFileContentSrc("test/MyObject.java", getSource(myObjectLines));
-    setFileContentSrc(
-        "test/Test.java",
-        getSourceDQ(
-            "package test;",
-            "public class Test {",
-            "  public Object foo() {",
-            "    return new MyObject(this);",
-            "  }",
-            "}"));
-    waitForAutoBuild();
-    //
-    ICompilationUnit testUnit = m_testProject.getCompilationUnit("test.Test");
-    TypeDeclaration typeDeclaration =
-        (TypeDeclaration) createASTCompilationUnit(testUnit).types().get(0);
-    MethodDeclaration methodDeclaration = typeDeclaration.getMethods()[0];
-    ReturnStatement returnStatement = (ReturnStatement) m_lastEditor.getEnclosingNode("return ");
-    Expression expression = returnStatement.getExpression();
-    // prepare context
-    EvaluationContext context;
-    {
-      ClassLoader projectClassLoader =
-          CodeUtils.getProjectClassLoader(m_lastEditor.getModelUnit().getJavaProject());
-      ExecutionFlowDescription flowDescription = new ExecutionFlowDescription(methodDeclaration);
-      context = new EvaluationContext(projectClassLoader, flowDescription) {
-        @Override
-        public Object evaluate(Expression e) throws Exception {
-          if (e instanceof ThisExpression) {
-            return new Object();
-          }
-          return super.evaluate(e);
-        }
-      };
-    }
-    // evaluate
-    return AstEvaluationEngine.evaluate(context, expression);
-  }
+	private Object check_creation_replaceThisExpression_withNull(String[] myObjectLines)
+			throws Exception {
+		m_ignoreModelCompileProblems = true;
+		setFileContentSrc("test/MyObject.java", getSource(myObjectLines));
+		setFileContentSrc(
+				"test/Test.java",
+				getSourceDQ(
+						"package test;",
+						"public class Test {",
+						"  public Object foo() {",
+						"    return new MyObject(this);",
+						"  }",
+						"}"));
+		waitForAutoBuild();
+		//
+		ICompilationUnit testUnit = m_testProject.getCompilationUnit("test.Test");
+		TypeDeclaration typeDeclaration =
+				(TypeDeclaration) createASTCompilationUnit(testUnit).types().get(0);
+		MethodDeclaration methodDeclaration = typeDeclaration.getMethods()[0];
+		ReturnStatement returnStatement = (ReturnStatement) m_lastEditor.getEnclosingNode("return ");
+		Expression expression = returnStatement.getExpression();
+		// prepare context
+		EvaluationContext context;
+		{
+			ClassLoader projectClassLoader =
+					CodeUtils.getProjectClassLoader(m_lastEditor.getModelUnit().getJavaProject());
+			ExecutionFlowDescription flowDescription = new ExecutionFlowDescription(methodDeclaration);
+			context = new EvaluationContext(projectClassLoader, flowDescription) {
+				@Override
+				public Object evaluate(Expression e) throws Exception {
+					if (e instanceof ThisExpression) {
+						return new Object();
+					}
+					return super.evaluate(e);
+				}
+			};
+		}
+		// evaluate
+		return AstEvaluationEngine.evaluate(context, expression);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // SuperMethodInvocation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_SuperMethodInvocation() throws Exception {
-    setFileContentSrc(
-        "test/Base.java",
-        getSourceDQ(
-            "package test;",
-            "public class Base {",
-            "  public int getSize() {",
-            "    return 5;",
-            "  }",
-            "}"));
-    waitForAutoBuild();
-    // validate
-    Object evaluate = test_SuperMethodInvocation2();
-    assertEquals(5, evaluate);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// SuperMethodInvocation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_SuperMethodInvocation() throws Exception {
+		setFileContentSrc(
+				"test/Base.java",
+				getSourceDQ(
+						"package test;",
+						"public class Base {",
+						"  public int getSize() {",
+						"    return 5;",
+						"  }",
+						"}"));
+		waitForAutoBuild();
+		// validate
+		Object evaluate = test_SuperMethodInvocation2();
+		assertEquals(5, evaluate);
+	}
 
-  public void test_SuperMethodInvocation_withException() throws Exception {
-    setFileContentSrc(
-        "test/Base.java",
-        getSourceDQ(
-            "package test;",
-            "public class Base {",
-            "  public int getSize() {",
-            "    throw new NullPointerException();",
-            "  }",
-            "}"));
-    waitForAutoBuild();
-    // validate
-    try {
-      m_ignoreModelCompileProblems = true;
-      test_SuperMethodInvocation2();
-      fail();
-    } catch (Throwable e_) {
-      DesignerException e = DesignerExceptionUtils.getDesignerException(e_);
-      assertEquals(ICoreExceptionConstants.EVAL_SUPER_METHOD, e.getCode());
-    }
-  }
+	public void test_SuperMethodInvocation_withException() throws Exception {
+		setFileContentSrc(
+				"test/Base.java",
+				getSourceDQ(
+						"package test;",
+						"public class Base {",
+						"  public int getSize() {",
+						"    throw new NullPointerException();",
+						"  }",
+						"}"));
+		waitForAutoBuild();
+		// validate
+		try {
+			m_ignoreModelCompileProblems = true;
+			test_SuperMethodInvocation2();
+			fail();
+		} catch (Throwable e_) {
+			DesignerException e = DesignerExceptionUtils.getDesignerException(e_);
+			assertEquals(ICoreExceptionConstants.EVAL_SUPER_METHOD, e.getCode());
+		}
+	}
 
-  private Object test_SuperMethodInvocation2() throws Exception {
-    TypeDeclaration typeDeclaration =
-        createTypeDeclaration_Test(
-            "public class Test extends Base {",
-            "  public int getSize() {",
-            "    return super.getSize();",
-            "  }",
-            "}");
-    MethodDeclaration methodDeclaration = typeDeclaration.getMethods()[0];
-    ReturnStatement returnStatement = (ReturnStatement) m_lastEditor.getEnclosingNode("return ");
-    Expression expression = returnStatement.getExpression();
-    // prepare context
-    EvaluationContext context;
-    {
-      ClassLoader projectClassLoader =
-          CodeUtils.getProjectClassLoader(m_lastEditor.getModelUnit().getJavaProject());
-      final Object baseInstance = projectClassLoader.loadClass("test.Base").newInstance();
-      ExecutionFlowDescription flowDescription = new ExecutionFlowDescription(methodDeclaration);
-      context = new EvaluationContext(projectClassLoader, flowDescription) {
-        @Override
-        public Object evaluate(Expression e) throws Exception {
-          if (e == null) {
-            return baseInstance;
-          }
-          return super.evaluate(e);
-        }
-      };
-    }
-    // evaluate
-    Object evaluate = AstEvaluationEngine.evaluate(context, expression);
-    return evaluate;
-  }
+	private Object test_SuperMethodInvocation2() throws Exception {
+		TypeDeclaration typeDeclaration =
+				createTypeDeclaration_Test(
+						"public class Test extends Base {",
+						"  public int getSize() {",
+						"    return super.getSize();",
+						"  }",
+						"}");
+		MethodDeclaration methodDeclaration = typeDeclaration.getMethods()[0];
+		ReturnStatement returnStatement = (ReturnStatement) m_lastEditor.getEnclosingNode("return ");
+		Expression expression = returnStatement.getExpression();
+		// prepare context
+		EvaluationContext context;
+		{
+			ClassLoader projectClassLoader =
+					CodeUtils.getProjectClassLoader(m_lastEditor.getModelUnit().getJavaProject());
+			final Object baseInstance = projectClassLoader.loadClass("test.Base").newInstance();
+			ExecutionFlowDescription flowDescription = new ExecutionFlowDescription(methodDeclaration);
+			context = new EvaluationContext(projectClassLoader, flowDescription) {
+				@Override
+				public Object evaluate(Expression e) throws Exception {
+					if (e == null) {
+						return baseInstance;
+					}
+					return super.evaluate(e);
+				}
+			};
+		}
+		// evaluate
+		Object evaluate = AstEvaluationEngine.evaluate(context, expression);
+		return evaluate;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Project disposing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void test_tearDown() throws Exception {
-    //System.exit(0);
-    do_projectDispose();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Project disposing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void test_tearDown() throws Exception {
+		//System.exit(0);
+		do_projectDispose();
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/eval/other/ArrayTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/eval/other/ArrayTest.java
index 9681616eb..fbdadbc80 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/eval/other/ArrayTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/eval/other/ArrayTest.java
@@ -18,136 +18,136 @@
  * @author scheglov_ke
  */
 public class ArrayTest extends AbstractEngineTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Life cycle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void setUp() throws Exception {
-    super.setUp();
-    if (m_testProject == null) {
-      do_projectCreate();
-    }
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Array
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_array_compare() throws Exception {
-    int[] a_1 = new int[]{1, 2, 3};
-    int[] a_2 = new int[]{1, 2, 3};
-    assertTrue(ArrayUtils.isEquals(a_1, a_2));
-  }
-
-  public void test_array_int_1() throws Exception {
-    check_array(new int[]{1, 2, 3}, "new int[]{1, 2, 3}", "int[]");
-  }
-
-  public void test_array_int_2_1() throws Exception {
-    check_array(
-        new int[][]{new int[]{11, 12}, new int[]{21, 22}, new int[]{31, 32}},
-        "new int[][]{new int[]{11, 12}, new int[]{21, 22}, new int[]{31, 32}}",
-        "int[][]");
-  }
-
-  public void test_array_int_2_2() throws Exception {
-    check_array(
-        new int[][]{{11, 12}, {21, 22}, {31, 32}},
-        "new int[][]{{11, 12}, {21, 22}, {31, 32}}",
-        "int[][]");
-  }
-
-  public void test_array_boolean() throws Exception {
-    check_array(new boolean[]{true, false, true}, "new boolean[]{true, false, true}", "boolean[]");
-  }
-
-  public void test_array_byte() throws Exception {
-    check_array(new byte[]{1, 2, 3}, "new byte[]{1, 2, 3}", "byte[]");
-  }
-
-  public void test_array_short() throws Exception {
-    check_array(new short[]{1, 2, 3}, "new short[]{1, 2, 3}", "short[]");
-  }
-
-  public void test_array_char() throws Exception {
-    check_array(new char[]{'a', 'b', 'c'}, "new char[]{\'a\', \'b\', \'c\'}", "char[]");
-  }
-
-  public void test_array_char2() throws Exception {
-    check_array(new char[]{0x30, 0x31, 0x32}, "new char[]{0x30, 0x31, 0x32}", "char[]");
-  }
-
-  public void test_array_long() throws Exception {
-    check_array(new long[]{1, 2, 3}, "new long[]{1, 2, 3}", "long[]");
-  }
-
-  public void test_array_float() throws Exception {
-    check_array(new float[]{1, 2, 3}, "new float[]{1, 2, 3}", "float[]");
-  }
-
-  public void test_array_double() throws Exception {
-    check_array(new double[]{1, 2, 3}, "new double[]{1, 2, 3}", "double[]");
-  }
-
-  public void test_array_String_1() throws Exception {
-    check_array(
-        new String[]{"1", "2", "3"},
-        "new String[]{\"1\", \"2\", \"3\"}",
-        "java.lang.String[]");
-  }
-
-  public void test_array_String_2() throws Exception {
-    check_array(
-        new String[][]{{"11", "12"}, {"21", "22"}, {"31", "32"}},
-        "new String[][]{{\"11\", \"12\"}, {\"21\", \"22\"}, {\"31\", \"32\"}}",
-        "java.lang.String[][]");
-  }
-
-  public void test_array_String_empty_1() throws Exception {
-    check_array(new String[2], "new String[2]", "java.lang.String[]");
-  }
-
-  public void test_array_String_empty_2() throws Exception {
-    check_array(new String[2][3], "new String[2][3]", "java.lang.String[][]");
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Array element
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_arrayElement_1() throws Exception {
-    assertEquals(11, evaluateExpression("(new int[]{0, 11, 22})[1]", "int"));
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void check_array(Object expected, String expression, String returnType) throws Exception {
-    assertTrue(ArrayUtils.isEquals(expected, evaluateExpression(expression, returnType)));
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Project disposing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void test_tearDown() throws Exception {
-    do_projectDispose();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Life cycle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void setUp() throws Exception {
+		super.setUp();
+		if (m_testProject == null) {
+			do_projectCreate();
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Array
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_array_compare() throws Exception {
+		int[] a_1 = new int[]{1, 2, 3};
+		int[] a_2 = new int[]{1, 2, 3};
+		assertTrue(ArrayUtils.isEquals(a_1, a_2));
+	}
+
+	public void test_array_int_1() throws Exception {
+		check_array(new int[]{1, 2, 3}, "new int[]{1, 2, 3}", "int[]");
+	}
+
+	public void test_array_int_2_1() throws Exception {
+		check_array(
+				new int[][]{new int[]{11, 12}, new int[]{21, 22}, new int[]{31, 32}},
+				"new int[][]{new int[]{11, 12}, new int[]{21, 22}, new int[]{31, 32}}",
+				"int[][]");
+	}
+
+	public void test_array_int_2_2() throws Exception {
+		check_array(
+				new int[][]{{11, 12}, {21, 22}, {31, 32}},
+				"new int[][]{{11, 12}, {21, 22}, {31, 32}}",
+				"int[][]");
+	}
+
+	public void test_array_boolean() throws Exception {
+		check_array(new boolean[]{true, false, true}, "new boolean[]{true, false, true}", "boolean[]");
+	}
+
+	public void test_array_byte() throws Exception {
+		check_array(new byte[]{1, 2, 3}, "new byte[]{1, 2, 3}", "byte[]");
+	}
+
+	public void test_array_short() throws Exception {
+		check_array(new short[]{1, 2, 3}, "new short[]{1, 2, 3}", "short[]");
+	}
+
+	public void test_array_char() throws Exception {
+		check_array(new char[]{'a', 'b', 'c'}, "new char[]{\'a\', \'b\', \'c\'}", "char[]");
+	}
+
+	public void test_array_char2() throws Exception {
+		check_array(new char[]{0x30, 0x31, 0x32}, "new char[]{0x30, 0x31, 0x32}", "char[]");
+	}
+
+	public void test_array_long() throws Exception {
+		check_array(new long[]{1, 2, 3}, "new long[]{1, 2, 3}", "long[]");
+	}
+
+	public void test_array_float() throws Exception {
+		check_array(new float[]{1, 2, 3}, "new float[]{1, 2, 3}", "float[]");
+	}
+
+	public void test_array_double() throws Exception {
+		check_array(new double[]{1, 2, 3}, "new double[]{1, 2, 3}", "double[]");
+	}
+
+	public void test_array_String_1() throws Exception {
+		check_array(
+				new String[]{"1", "2", "3"},
+				"new String[]{\"1\", \"2\", \"3\"}",
+				"java.lang.String[]");
+	}
+
+	public void test_array_String_2() throws Exception {
+		check_array(
+				new String[][]{{"11", "12"}, {"21", "22"}, {"31", "32"}},
+				"new String[][]{{\"11\", \"12\"}, {\"21\", \"22\"}, {\"31\", \"32\"}}",
+				"java.lang.String[][]");
+	}
+
+	public void test_array_String_empty_1() throws Exception {
+		check_array(new String[2], "new String[2]", "java.lang.String[]");
+	}
+
+	public void test_array_String_empty_2() throws Exception {
+		check_array(new String[2][3], "new String[2][3]", "java.lang.String[][]");
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Array element
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_arrayElement_1() throws Exception {
+		assertEquals(11, evaluateExpression("(new int[]{0, 11, 22})[1]", "int"));
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void check_array(Object expected, String expression, String returnType) throws Exception {
+		assertTrue(ArrayUtils.isEquals(expected, evaluateExpression(expression, returnType)));
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Project disposing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void test_tearDown() throws Exception {
+		do_projectDispose();
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/eval/other/CastTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/eval/other/CastTest.java
index aaeaaf77a..3871a2f3a 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/eval/other/CastTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/eval/other/CastTest.java
@@ -16,63 +16,63 @@
  * @author scheglov_ke
  */
 public class CastTest extends AbstractEngineTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Project creation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_setUp() throws Exception {
-    do_projectCreate();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Project creation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_setUp() throws Exception {
+		do_projectCreate();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // cast's
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_cast_byte() throws Exception {
-    assertEquals(new Byte((byte) 1), evaluateExpression("(byte)1", "byte"));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// cast's
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_cast_byte() throws Exception {
+		assertEquals(new Byte((byte) 1), evaluateExpression("(byte)1", "byte"));
+	}
 
-  public void test_cast_short() throws Exception {
-    assertEquals(new Short((short) 1), evaluateExpression("(short)1", "short"));
-  }
+	public void test_cast_short() throws Exception {
+		assertEquals(new Short((short) 1), evaluateExpression("(short)1", "short"));
+	}
 
-  public void test_cast_int() throws Exception {
-    assertEquals(new Integer(1), evaluateExpression("(int)1", "int"));
-  }
+	public void test_cast_int() throws Exception {
+		assertEquals(new Integer(1), evaluateExpression("(int)1", "int"));
+	}
 
-  public void test_cast_long() throws Exception {
-    assertEquals(new Long(1L), evaluateExpression("(long)1", "long"));
-  }
+	public void test_cast_long() throws Exception {
+		assertEquals(new Long(1L), evaluateExpression("(long)1", "long"));
+	}
 
-  public void test_cast_float() throws Exception {
-    assertEquals(new Float(1.2f), evaluateExpression("(float)1.2f", "float"));
-  }
+	public void test_cast_float() throws Exception {
+		assertEquals(new Float(1.2f), evaluateExpression("(float)1.2f", "float"));
+	}
 
-  public void test_cast_float2() throws Exception {
-    assertEquals(new Float(1.2f), evaluateExpression("(float)1.2", "float"));
-  }
+	public void test_cast_float2() throws Exception {
+		assertEquals(new Float(1.2f), evaluateExpression("(float)1.2", "float"));
+	}
 
-  public void test_cast_float3() throws Exception {
-    assertEquals(new Float(1.2f), evaluateExpression("(float)1.2d", "double"));
-  }
+	public void test_cast_float3() throws Exception {
+		assertEquals(new Float(1.2f), evaluateExpression("(float)1.2d", "double"));
+	}
 
-  public void test_cast_double() throws Exception {
-    assertEquals(new Double(1.2d), evaluateExpression("(double)1.2d", "double"));
-  }
+	public void test_cast_double() throws Exception {
+		assertEquals(new Double(1.2d), evaluateExpression("(double)1.2d", "double"));
+	}
 
-  public void test_cast_Object() throws Exception {
-    assertEquals("abc", evaluateExpression("(Object)\"abc\"", "java.lang.Object"));
-  }
+	public void test_cast_Object() throws Exception {
+		assertEquals("abc", evaluateExpression("(Object)\"abc\"", "java.lang.Object"));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Project disposing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void test_tearDown() throws Exception {
-    do_projectDispose();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Project disposing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void test_tearDown() throws Exception {
+		do_projectDispose();
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/eval/other/ClassTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/eval/other/ClassTest.java
index b095860a3..e1513016d 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/eval/other/ClassTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/eval/other/ClassTest.java
@@ -21,45 +21,45 @@
  * @author scheglov_ke
  */
 public class ClassTest extends AbstractEngineTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Project creation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_setUp() throws Exception {
-    do_projectCreate();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Project creation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_setUp() throws Exception {
+		do_projectCreate();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // cast's
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_TypeLiteral_Object() throws Exception {
-    assertEquals(ArrayList.class, evaluateExpression("java.util.ArrayList.class", "Class"));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// cast's
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_TypeLiteral_Object() throws Exception {
+		assertEquals(ArrayList.class, evaluateExpression("java.util.ArrayList.class", "Class"));
+	}
 
-  public void test_TypeLiteral_primitive() throws Exception {
-    assertEquals(boolean.class, evaluateExpression("boolean.class", "Class"));
-  }
+	public void test_TypeLiteral_primitive() throws Exception {
+		assertEquals(boolean.class, evaluateExpression("boolean.class", "Class"));
+	}
 
-  public void test_getClass() throws Exception {
-    Class<?> actualClass = (Class<?>) evaluateExpression("getClass()", "Class", true);
-    assertEquals("test.Test", actualClass.getName());
-  }
+	public void test_getClass() throws Exception {
+		Class<?> actualClass = (Class<?>) evaluateExpression("getClass()", "Class", true);
+		assertEquals("test.Test", actualClass.getName());
+	}
 
-  public void test_getClass_withThisQualifier() throws Exception {
-    Class<?> actualClass = (Class<?>) evaluateExpression("this.getClass()", "Class", true);
-    assertEquals("test.Test", actualClass.getName());
-  }
+	public void test_getClass_withThisQualifier() throws Exception {
+		Class<?> actualClass = (Class<?>) evaluateExpression("this.getClass()", "Class", true);
+		assertEquals("test.Test", actualClass.getName());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Project disposing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void test_tearDown() throws Exception {
-    do_projectDispose();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Project disposing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void test_tearDown() throws Exception {
+		do_projectDispose();
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/eval/other/FieldTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/eval/other/FieldTest.java
index 34a70c49a..282da637f 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/eval/other/FieldTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/eval/other/FieldTest.java
@@ -21,98 +21,98 @@
  * @author lobas_av
  */
 public class FieldTest extends AbstractEngineTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Life cycle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void setUp() throws Exception {
-    super.setUp();
-    if (m_testProject == null) {
-      do_projectCreate();
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Life cycle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void setUp() throws Exception {
+		super.setUp();
+		if (m_testProject == null) {
+			do_projectCreate();
+		}
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Field
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_beanFieldValue() throws Exception {
-    setFileContentSrc(
-        "test/TestBean.java",
-        getSourceDQ("package test;", "class TestBean {", "  public int value = 5;", "}"));
-    waitForAutoBuild();
-    assertEquals(5, evaluateExpression("new TestBean().value", "int"));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Field
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_beanFieldValue() throws Exception {
+		setFileContentSrc(
+				"test/TestBean.java",
+				getSourceDQ("package test;", "class TestBean {", "  public int value = 5;", "}"));
+		waitForAutoBuild();
+		assertEquals(5, evaluateExpression("new TestBean().value", "int"));
+	}
 
-  public void test_localFieldValue_thisQualifier() throws Exception {
-    TypeDeclaration typeDeclaration =
-        createTypeDeclaration_Test(
-            "class Test {",
-            "  private int value = 5;",
-            "  int foo() {",
-            "    return this.value;",
-            "  }",
-            "}");
-    assertEquals(5, evaluateSingleMethod(typeDeclaration, "foo()"));
-  }
+	public void test_localFieldValue_thisQualifier() throws Exception {
+		TypeDeclaration typeDeclaration =
+				createTypeDeclaration_Test(
+						"class Test {",
+						"  private int value = 5;",
+						"  int foo() {",
+						"    return this.value;",
+						"  }",
+						"}");
+		assertEquals(5, evaluateSingleMethod(typeDeclaration, "foo()"));
+	}
 
-  public void test_localFieldValue_defaultValue_false() throws Exception {
-    TypeDeclaration typeDeclaration =
-        createTypeDeclaration_Test(
-            "class Test {",
-            "  private boolean value;",
-            "  boolean foo() {",
-            "    return this.value;",
-            "  }",
-            "}");
-    assertEquals(false, evaluateSingleMethod(typeDeclaration, "foo()"));
-  }
+	public void test_localFieldValue_defaultValue_false() throws Exception {
+		TypeDeclaration typeDeclaration =
+				createTypeDeclaration_Test(
+						"class Test {",
+						"  private boolean value;",
+						"  boolean foo() {",
+						"    return this.value;",
+						"  }",
+						"}");
+		assertEquals(false, evaluateSingleMethod(typeDeclaration, "foo()"));
+	}
 
-  public void test_localFieldValue_defaultValue_zero() throws Exception {
-    TypeDeclaration typeDeclaration =
-        createTypeDeclaration_Test(
-            "class Test {",
-            "  private int value;",
-            "  int foo() {",
-            "    return this.value;",
-            "  }",
-            "}");
-    assertEquals(0, evaluateSingleMethod(typeDeclaration, "foo()"));
-  }
+	public void test_localFieldValue_defaultValue_zero() throws Exception {
+		TypeDeclaration typeDeclaration =
+				createTypeDeclaration_Test(
+						"class Test {",
+						"  private int value;",
+						"  int foo() {",
+						"    return this.value;",
+						"  }",
+						"}");
+		assertEquals(0, evaluateSingleMethod(typeDeclaration, "foo()"));
+	}
 
-  public void test_localFieldValue_defaultValue_null() throws Exception {
-    TypeDeclaration typeDeclaration =
-        createTypeDeclaration_Test(
-            "class Test {",
-            "  private Object value;",
-            "  Object foo() {",
-            "    return this.value;",
-            "  }",
-            "}");
-    assertEquals(null, evaluateSingleMethod(typeDeclaration, "foo()"));
-  }
+	public void test_localFieldValue_defaultValue_null() throws Exception {
+		TypeDeclaration typeDeclaration =
+				createTypeDeclaration_Test(
+						"class Test {",
+						"  private Object value;",
+						"  Object foo() {",
+						"    return this.value;",
+						"  }",
+						"}");
+		assertEquals(null, evaluateSingleMethod(typeDeclaration, "foo()"));
+	}
 
-  public void test_localFieldValue_noQualifier() throws Exception {
-    TypeDeclaration typeDeclaration =
-        createTypeDeclaration_Test(
-            "class Test {",
-            "  private int value = 5;",
-            "  int foo() {",
-            "    return value;",
-            "  }",
-            "}");
-    assertEquals(5, evaluateSingleMethod(typeDeclaration, "foo()"));
-  }
+	public void test_localFieldValue_noQualifier() throws Exception {
+		TypeDeclaration typeDeclaration =
+				createTypeDeclaration_Test(
+						"class Test {",
+						"  private int value = 5;",
+						"  int foo() {",
+						"    return value;",
+						"  }",
+						"}");
+		assertEquals(5, evaluateSingleMethod(typeDeclaration, "foo()"));
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/eval/other/StringTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/eval/other/StringTest.java
index 253a48850..26090ab5f 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/eval/other/StringTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/eval/other/StringTest.java
@@ -16,65 +16,65 @@
  * @author scheglov_ke
  */
 public class StringTest extends AbstractEngineTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Project creation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_setUp() throws Exception {
-    do_projectCreate();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Project creation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_setUp() throws Exception {
+		do_projectCreate();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // String
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_string_literal() throws Exception {
-    check_String("string", "\"string\"");
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// String
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_string_literal() throws Exception {
+		check_String("string", "\"string\"");
+	}
 
-  public void test_string_literal_quoted() throws Exception {
-    check_String("a\"b\"", "\"a\\\"b\\\"\"");
-  }
+	public void test_string_literal_quoted() throws Exception {
+		check_String("a\"b\"", "\"a\\\"b\\\"\"");
+	}
 
-  public void test_string_plus() throws Exception {
-    check_String("a" + "b", "\"a\" + \"b\"");
-  }
+	public void test_string_plus() throws Exception {
+		check_String("a" + "b", "\"a\" + \"b\"");
+	}
 
-  public void test_string_plus3() throws Exception {
-    check_String("a" + "b" + "c", "\"a\" + \"b\" + \"c\"");
-  }
+	public void test_string_plus3() throws Exception {
+		check_String("a" + "b" + "c", "\"a\" + \"b\" + \"c\"");
+	}
 
-  public void test_string_plus4() throws Exception {
-    check_String("a" + "b" + "c" + "d", "\"a\" + \"b\" + \"c\" + \"d\"");
-  }
+	public void test_string_plus4() throws Exception {
+		check_String("a" + "b" + "c" + "d", "\"a\" + \"b\" + \"c\" + \"d\"");
+	}
 
-  public void test_String_plus_int() throws Exception {
-    check_String("a2", "\"a\" + 2");
-  }
+	public void test_String_plus_int() throws Exception {
+		check_String("a2", "\"a\" + 2");
+	}
 
-  public void test_String_plus_null() throws Exception {
-    check_String("anull", "\"a\" + null");
-  }
+	public void test_String_plus_null() throws Exception {
+		check_String("anull", "\"a\" + null");
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void check_String(String expected, String expression) throws Exception {
-    assertEquals(expected, evaluateExpression(expression, "java.lang.String"));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void check_String(String expected, String expression) throws Exception {
+		assertEquals(expected, evaluateExpression(expression, "java.lang.String"));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Project disposing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void test_tearDown() throws Exception {
-    //System.exit(0);
-    do_projectDispose();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Project disposing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void test_tearDown() throws Exception {
+		//System.exit(0);
+		do_projectDispose();
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/eval/primities/BooleanTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/eval/primities/BooleanTest.java
index 6d40e5396..2b195638e 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/eval/primities/BooleanTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/eval/primities/BooleanTest.java
@@ -19,84 +19,84 @@
  * @author scheglov_ke
  */
 public class BooleanTest extends AbstractEngineTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Project creation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_setUp() throws Exception {
-    do_projectCreate();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // boolean
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_true() throws Exception {
-    check_boolean("true", true);
-  }
-
-  public void test_false() throws Exception {
-    check_boolean("false", false);
-  }
-
-  public void test_equals_true() throws Exception {
-    check_boolean("1000 == 1000", true);
-  }
-
-  public void test_equals_false() throws Exception {
-    check_boolean("1000 == 2000", false);
-  }
-
-  public void test_notEquals_true() throws Exception {
-    check_boolean("1000 != 2000", true);
-  }
-
-  public void test_notEquals_false() throws Exception {
-    check_boolean("1000 != 1000", false);
-  }
-
-  public void test_not() throws Exception {
-    check_boolean("!false", true);
-  }
-
-  public void test_not2() throws Exception {
-    check_boolean("!true", false);
-  }
-
-  public void test_or() throws Exception {
-    check_boolean("true || false", true);
-  }
-
-  public void test_or3() throws Exception {
-    check_boolean("false || false || true", true);
-  }
-
-  public void test_and() throws Exception {
-    check_boolean("true && true", true);
-  }
-
-  public void test_and3() throws Exception {
-    check_boolean("false && false && true", false);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void check_boolean(String expression, boolean expected) throws Exception {
-    assertEquals(new Boolean(expected), evaluateExpression(expression, "boolean"));
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Project disposing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void test_tearDown() throws Exception {
-    do_projectDispose();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Project creation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_setUp() throws Exception {
+		do_projectCreate();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// boolean
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_true() throws Exception {
+		check_boolean("true", true);
+	}
+
+	public void test_false() throws Exception {
+		check_boolean("false", false);
+	}
+
+	public void test_equals_true() throws Exception {
+		check_boolean("1000 == 1000", true);
+	}
+
+	public void test_equals_false() throws Exception {
+		check_boolean("1000 == 2000", false);
+	}
+
+	public void test_notEquals_true() throws Exception {
+		check_boolean("1000 != 2000", true);
+	}
+
+	public void test_notEquals_false() throws Exception {
+		check_boolean("1000 != 1000", false);
+	}
+
+	public void test_not() throws Exception {
+		check_boolean("!false", true);
+	}
+
+	public void test_not2() throws Exception {
+		check_boolean("!true", false);
+	}
+
+	public void test_or() throws Exception {
+		check_boolean("true || false", true);
+	}
+
+	public void test_or3() throws Exception {
+		check_boolean("false || false || true", true);
+	}
+
+	public void test_and() throws Exception {
+		check_boolean("true && true", true);
+	}
+
+	public void test_and3() throws Exception {
+		check_boolean("false && false && true", false);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void check_boolean(String expression, boolean expected) throws Exception {
+		assertEquals(new Boolean(expected), evaluateExpression(expression, "boolean"));
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Project disposing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void test_tearDown() throws Exception {
+		do_projectDispose();
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/eval/primities/CharTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/eval/primities/CharTest.java
index 584567609..f0e69ae59 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/eval/primities/CharTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/eval/primities/CharTest.java
@@ -16,45 +16,45 @@
  * @author scheglov_ke
  */
 public class CharTest extends AbstractEngineTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Project creation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_setUp() throws Exception {
-    do_projectCreate();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Project creation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_setUp() throws Exception {
+		do_projectCreate();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // int
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_char_value() throws Exception {
-    check_char("'a'", 'a');
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// int
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_char_value() throws Exception {
+		check_char("'a'", 'a');
+	}
 
-  public void test_char_cast_int() throws Exception {
-    check_char("(char)0x30", (char) 0x30);
-  }
+	public void test_char_cast_int() throws Exception {
+		check_char("(char)0x30", (char) 0x30);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void check_char(String expression, char expected) throws Exception {
-    Object actual = evaluateExpression(expression, "char");
-    assertEquals(new Character(expected), actual);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void check_char(String expression, char expected) throws Exception {
+		Object actual = evaluateExpression(expression, "char");
+		assertEquals(new Character(expected), actual);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Project disposing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void test_tearDown() throws Exception {
-    do_projectDispose();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Project disposing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void test_tearDown() throws Exception {
+		do_projectDispose();
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/eval/primities/DoubleTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/eval/primities/DoubleTest.java
index bce34d0ba..e3e94d13a 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/eval/primities/DoubleTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/eval/primities/DoubleTest.java
@@ -16,96 +16,96 @@
  * @author scheglov_ke
  */
 public class DoubleTest extends AbstractEngineTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Project creation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_setUp() throws Exception {
-    do_projectCreate();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // double
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_double_value1() throws Exception {
-    check_double("1D", 1D);
-  }
-
-  public void test_double_value2() throws Exception {
-    check_double("2d", 2d);
-  }
-
-  public void test_double_positive_value() throws Exception {
-    check_double("+3d", +3d);
-  }
-
-  public void test_double_negative_value() throws Exception {
-    check_double("-3d", -3d);
-  }
-
-  public void test_double_plus() throws Exception {
-    check_double("1D + 2D", 1D + 2D);
-  }
-
-  public void test_double_plus3() throws Exception {
-    check_double("1D + 2D + 3D", 1D + 2D + 3D);
-  }
-
-  public void test_double_minus() throws Exception {
-    check_double("5D - 1D", 5D - 1D);
-  }
-
-  public void test_double_mul() throws Exception {
-    check_double("2D * 3D", 2D * 3D);
-  }
-
-  public void test_double_div() throws Exception {
-    check_double("6D / 2D", 6D / 2D);
-  }
-
-  public void test_double_div2() throws Exception {
-    check_double("5D / 2D", 5D / 2D);
-  }
-
-  public void test_double_mod() throws Exception {
-    check_double("5D % 2D", 5D % 2D);
-  }
-
-  public void test_double_mod2() throws Exception {
-    check_double("-5D % 3D", -5D % 3D);
-  }
-
-  public void test_double_mix_int() throws Exception {
-    check_double("1D + 2", 1D + 2);
-  }
-
-  public void test_double_mix_char() throws Exception {
-    check_double("1D + '0'", 1D + '0');
-  }
-
-  public void test_double_cast_to() throws Exception {
-    check_double("((double)1) + 2", (double) 1 + 2);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void check_double(String expression, double expected) throws Exception {
-    assertEquals(new Double(expected), evaluateExpression(expression, "double"));
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Project disposing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void test_tearDown() throws Exception {
-    do_projectDispose();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Project creation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_setUp() throws Exception {
+		do_projectCreate();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// double
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_double_value1() throws Exception {
+		check_double("1D", 1D);
+	}
+
+	public void test_double_value2() throws Exception {
+		check_double("2d", 2d);
+	}
+
+	public void test_double_positive_value() throws Exception {
+		check_double("+3d", +3d);
+	}
+
+	public void test_double_negative_value() throws Exception {
+		check_double("-3d", -3d);
+	}
+
+	public void test_double_plus() throws Exception {
+		check_double("1D + 2D", 1D + 2D);
+	}
+
+	public void test_double_plus3() throws Exception {
+		check_double("1D + 2D + 3D", 1D + 2D + 3D);
+	}
+
+	public void test_double_minus() throws Exception {
+		check_double("5D - 1D", 5D - 1D);
+	}
+
+	public void test_double_mul() throws Exception {
+		check_double("2D * 3D", 2D * 3D);
+	}
+
+	public void test_double_div() throws Exception {
+		check_double("6D / 2D", 6D / 2D);
+	}
+
+	public void test_double_div2() throws Exception {
+		check_double("5D / 2D", 5D / 2D);
+	}
+
+	public void test_double_mod() throws Exception {
+		check_double("5D % 2D", 5D % 2D);
+	}
+
+	public void test_double_mod2() throws Exception {
+		check_double("-5D % 3D", -5D % 3D);
+	}
+
+	public void test_double_mix_int() throws Exception {
+		check_double("1D + 2", 1D + 2);
+	}
+
+	public void test_double_mix_char() throws Exception {
+		check_double("1D + '0'", 1D + '0');
+	}
+
+	public void test_double_cast_to() throws Exception {
+		check_double("((double)1) + 2", (double) 1 + 2);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void check_double(String expression, double expected) throws Exception {
+		assertEquals(new Double(expected), evaluateExpression(expression, "double"));
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Project disposing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void test_tearDown() throws Exception {
+		do_projectDispose();
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/eval/primities/FloatTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/eval/primities/FloatTest.java
index 8d8c00f28..67140580d 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/eval/primities/FloatTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/eval/primities/FloatTest.java
@@ -16,96 +16,96 @@
  * @author scheglov_ke
  */
 public class FloatTest extends AbstractEngineTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Project creation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_setUp() throws Exception {
-    do_projectCreate();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // float
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_float_value1() throws Exception {
-    check_float("1F", 1F);
-  }
-
-  public void test_float_value2() throws Exception {
-    check_float("2f", 2f);
-  }
-
-  public void test_float_positive_value() throws Exception {
-    check_float("+3f", +3f);
-  }
-
-  public void test_float_negative_value() throws Exception {
-    check_float("-3f", -3f);
-  }
-
-  public void test_float_plus() throws Exception {
-    check_float("1F + 2F", 1F + 2F);
-  }
-
-  public void test_float_plus3() throws Exception {
-    check_float("1F + 2F + 3F", 1F + 2F + 3F);
-  }
-
-  public void test_float_minus() throws Exception {
-    check_float("5F - 1F", 5F - 1F);
-  }
-
-  public void test_float_mul() throws Exception {
-    check_float("2F * 3F", 2F * 3F);
-  }
-
-  public void test_float_div() throws Exception {
-    check_float("6F / 2F", 6F / 2F);
-  }
-
-  public void test_float_div2() throws Exception {
-    check_float("5F / 2F", 5F / 2F);
-  }
-
-  public void test_float_mod() throws Exception {
-    check_float("5F % 2F", 5F % 2F);
-  }
-
-  public void test_float_mod2() throws Exception {
-    check_float("-5F % 3F", -5F % 3F);
-  }
-
-  public void test_float_mix_int() throws Exception {
-    check_float("1F + 2", 1F + 2);
-  }
-
-  public void test_float_mix_char() throws Exception {
-    check_float("1F + '0'", 1F + '0');
-  }
-
-  public void test_float_cast_to() throws Exception {
-    check_float("((float)1) + 2", (float) 1 + 2);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void check_float(String expression, float expected) throws Exception {
-    assertEquals(expected, evaluateExpression(expression, "float"));
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Project disposing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void test_tearDown() throws Exception {
-    do_projectDispose();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Project creation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_setUp() throws Exception {
+		do_projectCreate();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// float
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_float_value1() throws Exception {
+		check_float("1F", 1F);
+	}
+
+	public void test_float_value2() throws Exception {
+		check_float("2f", 2f);
+	}
+
+	public void test_float_positive_value() throws Exception {
+		check_float("+3f", +3f);
+	}
+
+	public void test_float_negative_value() throws Exception {
+		check_float("-3f", -3f);
+	}
+
+	public void test_float_plus() throws Exception {
+		check_float("1F + 2F", 1F + 2F);
+	}
+
+	public void test_float_plus3() throws Exception {
+		check_float("1F + 2F + 3F", 1F + 2F + 3F);
+	}
+
+	public void test_float_minus() throws Exception {
+		check_float("5F - 1F", 5F - 1F);
+	}
+
+	public void test_float_mul() throws Exception {
+		check_float("2F * 3F", 2F * 3F);
+	}
+
+	public void test_float_div() throws Exception {
+		check_float("6F / 2F", 6F / 2F);
+	}
+
+	public void test_float_div2() throws Exception {
+		check_float("5F / 2F", 5F / 2F);
+	}
+
+	public void test_float_mod() throws Exception {
+		check_float("5F % 2F", 5F % 2F);
+	}
+
+	public void test_float_mod2() throws Exception {
+		check_float("-5F % 3F", -5F % 3F);
+	}
+
+	public void test_float_mix_int() throws Exception {
+		check_float("1F + 2", 1F + 2);
+	}
+
+	public void test_float_mix_char() throws Exception {
+		check_float("1F + '0'", 1F + '0');
+	}
+
+	public void test_float_cast_to() throws Exception {
+		check_float("((float)1) + 2", (float) 1 + 2);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void check_float(String expression, float expected) throws Exception {
+		assertEquals(expected, evaluateExpression(expression, "float"));
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Project disposing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void test_tearDown() throws Exception {
+		do_projectDispose();
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/eval/primities/IntegerTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/eval/primities/IntegerTest.java
index 1abc28d02..ade51ef3d 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/eval/primities/IntegerTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/eval/primities/IntegerTest.java
@@ -18,191 +18,191 @@
  * @author scheglov_ke
  */
 public class IntegerTest extends AbstractEngineTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Project creation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_setUp() throws Exception {
-    do_projectCreate();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // int
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_int_value() throws Exception {
-    check_int("1", 1);
-  }
-
-  public void test_int_positive_value() throws Exception {
-    check_int("+2", 2);
-  }
-
-  public void test_int_value_hex() throws Exception {
-    check_int("0x0A", 0x0A);
-  }
-
-  public void test_int_value_oct() throws Exception {
-    check_int("010", 010);
-  }
-
-  public void test_int_negative_value() throws Exception {
-    check_int("-1", -1);
-  }
-
-  public void test_int_negate() throws Exception {
-    check_int("~1", ~1);
-  }
-
-  public void test_int_shift_left() throws Exception {
-    check_int("1 << 3", 1 << 3);
-  }
-
-  public void test_int_shift_right() throws Exception {
-    check_int("16 >> 2", 16 >> 2);
-  }
-
-  public void test_int_shift_right2() throws Exception {
-    check_int("-16 >> 2", -16 >> 2);
-  }
-
-  public void test_int_shift_right3() throws Exception {
-    check_int("-16 >>> 2", -16 >>> 2);
-  }
-
-  public void test_int_plus() throws Exception {
-    check_int("1 + 2", 1 + 2);
-  }
-
-  public void test_int_plus3() throws Exception {
-    check_int("1 + 2 + 3", 1 + 2 + 3);
-  }
-
-  public void test_int_plus4() throws Exception {
-    check_int("1 + 2 + 3 + 4", 1 + 2 + 3 + 4);
-  }
-
-  public void test_int_plus_char() throws Exception {
-    check_int("1 + '0'", 1 + '0');
-  }
-
-  public void test_int_plus_char2() throws Exception {
-    check_int("'0' + '1'", '0' + '1');
-  }
-
-  public void test_int_minus() throws Exception {
-    check_int("5 - 1", 5 - 1);
-  }
-
-  public void test_int_mul() throws Exception {
-    check_int("2 * 3", 2 * 3);
-  }
-
-  public void test_int_div() throws Exception {
-    check_int("6 / 2", 6 / 2);
-  }
-
-  public void test_int_div2() throws Exception {
-    check_int("5 / 2", 5 / 2);
-  }
-
-  public void test_int_mod() throws Exception {
-    check_int("5 % 2", 5 % 2);
-  }
-
-  public void test_int_mod2() throws Exception {
-    check_int("-5 % 3", -5 % 3);
-  }
-
-  public void test_int_or_exclusive() throws Exception {
-    check_int("1 ^ 2", 1 ^ 2);
-  }
-
-  public void test_int_or() throws Exception {
-    check_int("1 | 2", 1 | 2);
-  }
-
-  public void test_int_or3() throws Exception {
-    check_int("1 | 2 | 4", 1 | 2 | 4);
-  }
-
-  public void test_int_and() throws Exception {
-    check_int("5 & 2", 5 & 2);
-  }
-
-  public void test_int_and2() throws Exception {
-    check_int("7 & 11", 7 & 11);
-  }
-
-  public void test_int_and3() throws Exception {
-    check_int("7 & 11 & 6", 7 & 11 & 6);
-  }
-
-  public void test_short_cast() throws Exception {
-    check_short("(short)1", (short) 1);
-  }
-
-  public void test_int_as_sum_of_shorts() throws Exception {
-    check_int("(short)2 + (short)3", 5);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // PostfixExpression
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_PostfixExpression_increment() throws Exception {
-    TypeDeclaration typeDeclaration =
-        createTypeDeclaration_Test(
-            "public class Test {",
-            "  public int root() {",
-            "    int value = 4;",
-            "    value++;",
-            "    return value;",
-            "  }",
-            "}");
-    Object actual = evaluateSingleMethod(typeDeclaration, "root()");
-    assertEquals(5, actual);
-  }
-
-  public void test_PostfixExpression_decrement() throws Exception {
-    TypeDeclaration typeDeclaration =
-        createTypeDeclaration_Test(
-            "public class Test {",
-            "  public int root() {",
-            "    int value = 4;",
-            "    value--;",
-            "    return value;",
-            "  }",
-            "}");
-    Object actual = evaluateSingleMethod(typeDeclaration, "root()");
-    assertEquals(3, actual);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void check_short(String expression, short expected) throws Exception {
-    Object actual = evaluateExpression(expression, "short");
-    assertEquals(new Short(expected), actual);
-  }
-
-  private void check_int(String expression, int expected) throws Exception {
-    Object actual = evaluateExpression(expression, "int");
-    assertEquals(expected, actual);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Project disposing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void test_tearDown() throws Exception {
-    do_projectDispose();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Project creation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_setUp() throws Exception {
+		do_projectCreate();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// int
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_int_value() throws Exception {
+		check_int("1", 1);
+	}
+
+	public void test_int_positive_value() throws Exception {
+		check_int("+2", 2);
+	}
+
+	public void test_int_value_hex() throws Exception {
+		check_int("0x0A", 0x0A);
+	}
+
+	public void test_int_value_oct() throws Exception {
+		check_int("010", 010);
+	}
+
+	public void test_int_negative_value() throws Exception {
+		check_int("-1", -1);
+	}
+
+	public void test_int_negate() throws Exception {
+		check_int("~1", ~1);
+	}
+
+	public void test_int_shift_left() throws Exception {
+		check_int("1 << 3", 1 << 3);
+	}
+
+	public void test_int_shift_right() throws Exception {
+		check_int("16 >> 2", 16 >> 2);
+	}
+
+	public void test_int_shift_right2() throws Exception {
+		check_int("-16 >> 2", -16 >> 2);
+	}
+
+	public void test_int_shift_right3() throws Exception {
+		check_int("-16 >>> 2", -16 >>> 2);
+	}
+
+	public void test_int_plus() throws Exception {
+		check_int("1 + 2", 1 + 2);
+	}
+
+	public void test_int_plus3() throws Exception {
+		check_int("1 + 2 + 3", 1 + 2 + 3);
+	}
+
+	public void test_int_plus4() throws Exception {
+		check_int("1 + 2 + 3 + 4", 1 + 2 + 3 + 4);
+	}
+
+	public void test_int_plus_char() throws Exception {
+		check_int("1 + '0'", 1 + '0');
+	}
+
+	public void test_int_plus_char2() throws Exception {
+		check_int("'0' + '1'", '0' + '1');
+	}
+
+	public void test_int_minus() throws Exception {
+		check_int("5 - 1", 5 - 1);
+	}
+
+	public void test_int_mul() throws Exception {
+		check_int("2 * 3", 2 * 3);
+	}
+
+	public void test_int_div() throws Exception {
+		check_int("6 / 2", 6 / 2);
+	}
+
+	public void test_int_div2() throws Exception {
+		check_int("5 / 2", 5 / 2);
+	}
+
+	public void test_int_mod() throws Exception {
+		check_int("5 % 2", 5 % 2);
+	}
+
+	public void test_int_mod2() throws Exception {
+		check_int("-5 % 3", -5 % 3);
+	}
+
+	public void test_int_or_exclusive() throws Exception {
+		check_int("1 ^ 2", 1 ^ 2);
+	}
+
+	public void test_int_or() throws Exception {
+		check_int("1 | 2", 1 | 2);
+	}
+
+	public void test_int_or3() throws Exception {
+		check_int("1 | 2 | 4", 1 | 2 | 4);
+	}
+
+	public void test_int_and() throws Exception {
+		check_int("5 & 2", 5 & 2);
+	}
+
+	public void test_int_and2() throws Exception {
+		check_int("7 & 11", 7 & 11);
+	}
+
+	public void test_int_and3() throws Exception {
+		check_int("7 & 11 & 6", 7 & 11 & 6);
+	}
+
+	public void test_short_cast() throws Exception {
+		check_short("(short)1", (short) 1);
+	}
+
+	public void test_int_as_sum_of_shorts() throws Exception {
+		check_int("(short)2 + (short)3", 5);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// PostfixExpression
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_PostfixExpression_increment() throws Exception {
+		TypeDeclaration typeDeclaration =
+				createTypeDeclaration_Test(
+						"public class Test {",
+						"  public int root() {",
+						"    int value = 4;",
+						"    value++;",
+						"    return value;",
+						"  }",
+						"}");
+		Object actual = evaluateSingleMethod(typeDeclaration, "root()");
+		assertEquals(5, actual);
+	}
+
+	public void test_PostfixExpression_decrement() throws Exception {
+		TypeDeclaration typeDeclaration =
+				createTypeDeclaration_Test(
+						"public class Test {",
+						"  public int root() {",
+						"    int value = 4;",
+						"    value--;",
+						"    return value;",
+						"  }",
+						"}");
+		Object actual = evaluateSingleMethod(typeDeclaration, "root()");
+		assertEquals(3, actual);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void check_short(String expression, short expected) throws Exception {
+		Object actual = evaluateExpression(expression, "short");
+		assertEquals(new Short(expected), actual);
+	}
+
+	private void check_int(String expression, int expected) throws Exception {
+		Object actual = evaluateExpression(expression, "int");
+		assertEquals(expected, actual);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Project disposing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void test_tearDown() throws Exception {
+		do_projectDispose();
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/eval/primities/LongTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/eval/primities/LongTest.java
index 054544e97..e5ceed621 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/eval/primities/LongTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/eval/primities/LongTest.java
@@ -16,112 +16,112 @@
  * @author scheglov_ke
  */
 public class LongTest extends AbstractEngineTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Project creation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_setUp() throws Exception {
-    do_projectCreate();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // long
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_long_value1() throws Exception {
-    check_long("1L", 1L);
-  }
-
-  public void test_long_value2() throws Exception {
-    check_long("2l", 2l);
-  }
-
-  public void test_long_value_hex() throws Exception {
-    check_long("0x0AL", 0x0AL);
-  }
-
-  public void test_long_value_oct() throws Exception {
-    check_long("020L", 020L);
-  }
-
-  public void test_long_positive_value() throws Exception {
-    check_long("+3l", +3l);
-  }
-
-  public void test_long_negative_value() throws Exception {
-    check_long("-3l", -3l);
-  }
-
-  public void test_long_plus() throws Exception {
-    check_long("1L + 2L", 1L + 2L);
-  }
-
-  public void test_long_plus3() throws Exception {
-    check_long("1L + 2L + 3L", 1L + 2L + 3L);
-  }
-
-  public void test_long_minus() throws Exception {
-    check_long("5L - 1L", 5L - 1L);
-  }
-
-  public void test_long_mul() throws Exception {
-    check_long("2L * 3L", 2L * 3L);
-  }
-
-  public void test_long_div() throws Exception {
-    check_long("6L / 2L", 6L / 2L);
-  }
-
-  public void test_long_div2() throws Exception {
-    check_long("5L / 2L", 5L / 2L);
-  }
-
-  public void test_long_mod() throws Exception {
-    check_long("5L % 2L", 5L % 2L);
-  }
-
-  public void test_long_mod2() throws Exception {
-    check_long("-5L % 3L", -5L % 3L);
-  }
-
-  public void test_long_or() throws Exception {
-    check_long("1L | 2L", 1L | 2L);
-  }
-
-  public void test_long_and() throws Exception {
-    check_long("5L & 2L", 5L & 2L);
-  }
-
-  public void test_long_mix_int() throws Exception {
-    check_long("1L + 2", 1L + 2);
-  }
-
-  public void test_long_mix_char() throws Exception {
-    check_long("1L + '0'", 1L + '0');
-  }
-
-  public void test_long_cast_to() throws Exception {
-    check_long("((long)1) + 2", (long) 1 + 2);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void check_long(String expression, long expected) throws Exception {
-    assertEquals(new Long(expected), evaluateExpression(expression, "long"));
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Project disposing
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  public void test_tearDown() throws Exception {
-    do_projectDispose();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Project creation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_setUp() throws Exception {
+		do_projectCreate();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// long
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_long_value1() throws Exception {
+		check_long("1L", 1L);
+	}
+
+	public void test_long_value2() throws Exception {
+		check_long("2l", 2l);
+	}
+
+	public void test_long_value_hex() throws Exception {
+		check_long("0x0AL", 0x0AL);
+	}
+
+	public void test_long_value_oct() throws Exception {
+		check_long("020L", 020L);
+	}
+
+	public void test_long_positive_value() throws Exception {
+		check_long("+3l", +3l);
+	}
+
+	public void test_long_negative_value() throws Exception {
+		check_long("-3l", -3l);
+	}
+
+	public void test_long_plus() throws Exception {
+		check_long("1L + 2L", 1L + 2L);
+	}
+
+	public void test_long_plus3() throws Exception {
+		check_long("1L + 2L + 3L", 1L + 2L + 3L);
+	}
+
+	public void test_long_minus() throws Exception {
+		check_long("5L - 1L", 5L - 1L);
+	}
+
+	public void test_long_mul() throws Exception {
+		check_long("2L * 3L", 2L * 3L);
+	}
+
+	public void test_long_div() throws Exception {
+		check_long("6L / 2L", 6L / 2L);
+	}
+
+	public void test_long_div2() throws Exception {
+		check_long("5L / 2L", 5L / 2L);
+	}
+
+	public void test_long_mod() throws Exception {
+		check_long("5L % 2L", 5L % 2L);
+	}
+
+	public void test_long_mod2() throws Exception {
+		check_long("-5L % 3L", -5L % 3L);
+	}
+
+	public void test_long_or() throws Exception {
+		check_long("1L | 2L", 1L | 2L);
+	}
+
+	public void test_long_and() throws Exception {
+		check_long("5L & 2L", 5L & 2L);
+	}
+
+	public void test_long_mix_int() throws Exception {
+		check_long("1L + 2", 1L + 2);
+	}
+
+	public void test_long_mix_char() throws Exception {
+		check_long("1L + '0'", 1L + '0');
+	}
+
+	public void test_long_cast_to() throws Exception {
+		check_long("((long)1) + 2", (long) 1 + 2);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void check_long(String expression, long expected) throws Exception {
+		assertEquals(new Long(expected), evaluateExpression(expression, "long"));
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Project disposing
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	public void test_tearDown() throws Exception {
+		do_projectDispose();
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/model/AbstractComponentTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/model/AbstractComponentTest.java
index cd68bd766..a2f60f808 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/model/AbstractComponentTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/model/AbstractComponentTest.java
@@ -24,118 +24,118 @@
  * @author scheglov_ke
  */
 public class AbstractComponentTest extends SwingModelTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Test
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * When we deleted {@link AbstractComponentInfo}, then it will not participate in next "refresh",
-   * so will not able to dispose its {@link Image}. We need some solution to clean up
-   * {@link AbstractComponentInfo} during delete.
-   */
-  public void test_disposeImage_whenDeleteModel() throws Exception {
-    parseContainer(
-        "public class Test extends JPanel {",
-        "  public Test() {",
-        "    {",
-        "      JButton button = new JButton();",
-        "      add(button);",
-        "    }",
-        "  }",
-        "}");
-    refresh();
-    ComponentInfo button = getJavaInfoByName("button");
-    // remember image
-    Image image = button.getImage();
-    assertFalse(image.isDisposed());
-    // do delete
-    button.delete();
-    assertTrue(image.isDisposed());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Test
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * When we deleted {@link AbstractComponentInfo}, then it will not participate in next "refresh",
+	 * so will not able to dispose its {@link Image}. We need some solution to clean up
+	 * {@link AbstractComponentInfo} during delete.
+	 */
+	public void test_disposeImage_whenDeleteModel() throws Exception {
+		parseContainer(
+				"public class Test extends JPanel {",
+				"  public Test() {",
+				"    {",
+				"      JButton button = new JButton();",
+				"      add(button);",
+				"    }",
+				"  }",
+				"}");
+		refresh();
+		ComponentInfo button = getJavaInfoByName("button");
+		// remember image
+		Image image = button.getImage();
+		assertFalse(image.isDisposed());
+		// do delete
+		button.delete();
+		assertTrue(image.isDisposed());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // getComponentObject()
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link AbstractComponentInfo#getComponentObject()}.
-   */
-  public void test_getComponentObject() throws Exception {
-    ContainerInfo panel =
-        parseContainer(
-            "public class Test extends JPanel {",
-            "  public Test() {",
-            "    add(new JButton());",
-            "  }",
-            "}");
-    panel.refresh();
-    ComponentInfo button = panel.getChildrenComponents().get(0);
-    // objects
-    assertSame(panel.getObject(), panel.getComponentObject());
-    assertSame(button.getObject(), button.getComponentObject());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// getComponentObject()
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link AbstractComponentInfo#getComponentObject()}.
+	 */
+	public void test_getComponentObject() throws Exception {
+		ContainerInfo panel =
+				parseContainer(
+						"public class Test extends JPanel {",
+						"  public Test() {",
+						"    add(new JButton());",
+						"  }",
+						"}");
+		panel.refresh();
+		ComponentInfo button = panel.getChildrenComponents().get(0);
+		// objects
+		assertSame(panel.getObject(), panel.getComponentObject());
+		assertSame(button.getObject(), button.getComponentObject());
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // getAbsoluteBounds()
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link AbstractComponentInfo#getAbsoluteBounds()} when we have some bounds for top
-   * level.
-   */
-  public void test_getAbsolute_topLevel() throws Exception {
-    ContainerInfo panel =
-        parseContainer(
-            "public class Test extends JPanel {",
-            "  public Test() {",
-            "    setSize(450, 300);",
-            "  }",
-            "}");
-    panel.refresh();
-    //
-    assertEquals(new Rectangle(0, 0, 450, 300), panel.getAbsoluteBounds());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// getAbsoluteBounds()
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link AbstractComponentInfo#getAbsoluteBounds()} when we have some bounds for top
+	 * level.
+	 */
+	public void test_getAbsolute_topLevel() throws Exception {
+		ContainerInfo panel =
+				parseContainer(
+						"public class Test extends JPanel {",
+						"  public Test() {",
+						"    setSize(450, 300);",
+						"  }",
+						"}");
+		panel.refresh();
+		//
+		assertEquals(new Rectangle(0, 0, 450, 300), panel.getAbsoluteBounds());
+	}
 
-  /**
-   * Test for {@link AbstractComponentInfo#getAbsoluteBounds()} when we have some bounds for inner
-   * component.
-   */
-  public void test_getAbsolute_innerComponent() throws Exception {
-    ContainerInfo panel =
-        parseContainer(
-            "public class Test extends JPanel {",
-            "  public Test() {",
-            "    setSize(450, 300);",
-            "    setLayout(null);",
-            "    {",
-            "      JPanel innerPanel = new JPanel();",
-            "      add(innerPanel);",
-            "      innerPanel.setBounds(10, 10, 300, 300);",
-            "      innerPanel.setLayout(null);",
-            "      {",
-            "        JButton button = new JButton();",
-            "        innerPanel.add(button);",
-            "        button.setBounds(1, 2, 100, 50);",
-            "      }",
-            "    }",
-            "  }",
-            "}");
-    panel.refresh();
-    ContainerInfo innerPanel = (ContainerInfo) panel.getChildrenComponents().get(0);
-    ComponentInfo button = innerPanel.getChildrenComponents().get(0);
-    //
-    assertEquals(new Rectangle(11, 12, 100, 50), button.getAbsoluteBounds());
-  }
+	/**
+	 * Test for {@link AbstractComponentInfo#getAbsoluteBounds()} when we have some bounds for inner
+	 * component.
+	 */
+	public void test_getAbsolute_innerComponent() throws Exception {
+		ContainerInfo panel =
+				parseContainer(
+						"public class Test extends JPanel {",
+						"  public Test() {",
+						"    setSize(450, 300);",
+						"    setLayout(null);",
+						"    {",
+						"      JPanel innerPanel = new JPanel();",
+						"      add(innerPanel);",
+						"      innerPanel.setBounds(10, 10, 300, 300);",
+						"      innerPanel.setLayout(null);",
+						"      {",
+						"        JButton button = new JButton();",
+						"        innerPanel.add(button);",
+						"        button.setBounds(1, 2, 100, 50);",
+						"      }",
+						"    }",
+						"  }",
+						"}");
+		panel.refresh();
+		ContainerInfo innerPanel = (ContainerInfo) panel.getChildrenComponents().get(0);
+		ComponentInfo button = innerPanel.getChildrenComponents().get(0);
+		//
+		assertEquals(new Rectangle(11, 12, 100, 50), button.getAbsoluteBounds());
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/model/ArrayObjectTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/model/ArrayObjectTest.java
index 268a367f6..92712ffac 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/model/ArrayObjectTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/model/ArrayObjectTest.java
@@ -41,479 +41,479 @@
  * @author sablin_aa
  */
 public class ArrayObjectTest extends SwingModelTest {
-  private ContainerInfo myPanel;
-  private ArrayObjectInfo arrayInfo;
-  private ComponentInfo localButton;
-  private ComponentInfo emptyButton;
+	private ContainerInfo myPanel;
+	private ArrayObjectInfo arrayInfo;
+	private ComponentInfo localButton;
+	private ComponentInfo emptyButton;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Life cycle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void tearDown() throws Exception {
-    // clear fields
-    for (Field field : getClass().getDeclaredFields()) {
-      if (field.getName().indexOf('$') == -1 && Object.class.isAssignableFrom(field.getType())) {
-        field.setAccessible(true);
-        field.set(this, null);
-      }
-    }
-    super.tearDown();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Life cycle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void tearDown() throws Exception {
+		// clear fields
+		for (Field field : getClass().getDeclaredFields()) {
+			if (field.getName().indexOf('$') == -1 && Object.class.isAssignableFrom(field.getType())) {
+				field.setAccessible(true);
+				field.set(this, null);
+			}
+		}
+		super.tearDown();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_parse() throws Exception {
-    getParsedContainer();
-    // ArrayObjectInfo
-    {
-      assertSame(myPanel, arrayInfo.getParent());
-      assertThat(arrayInfo.getChildren()).isEmpty();
-      // check tuning
-      assertTrue(arrayInfo.isRemoveOnEmpty());
-      assertTrue(!arrayInfo.isHideInTree());
-      // check item type
-      assertThat(arrayInfo.getItemClass()).isEqualTo(
-          ReflectionUtils.getClassByName(
-              EditorState.get(m_lastEditor).getEditorLoader(),
-              "javax.swing.JButton"));
-    }
-    // button with {@link LocalVariableSupport}
-    {
-      checkArrayItem(localButton);
-      assertInstanceOf(LocalVariableSupport.class, localButton.getVariableSupport());
-    }
-    // button with {@link EmptyVariableSupport}
-    {
-      checkArrayItem(emptyButton);
-      assertInstanceOf(EmptyVariableSupport.class, emptyButton.getVariableSupport());
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_parse() throws Exception {
+		getParsedContainer();
+		// ArrayObjectInfo
+		{
+			assertSame(myPanel, arrayInfo.getParent());
+			assertThat(arrayInfo.getChildren()).isEmpty();
+			// check tuning
+			assertTrue(arrayInfo.isRemoveOnEmpty());
+			assertTrue(!arrayInfo.isHideInTree());
+			// check item type
+			assertThat(arrayInfo.getItemClass()).isEqualTo(
+					ReflectionUtils.getClassByName(
+							EditorState.get(m_lastEditor).getEditorLoader(),
+							"javax.swing.JButton"));
+		}
+		// button with {@link LocalVariableSupport}
+		{
+			checkArrayItem(localButton);
+			assertInstanceOf(LocalVariableSupport.class, localButton.getVariableSupport());
+		}
+		// button with {@link EmptyVariableSupport}
+		{
+			checkArrayItem(emptyButton);
+			assertInstanceOf(EmptyVariableSupport.class, emptyButton.getVariableSupport());
+		}
+	}
 
-  public void test_Presentation() throws Exception {
-    getParsedContainer();
-    IObjectPresentation presentation = arrayInfo.getPresentation();
-    // icon/text
-    assertNotNull(presentation.getIcon());
-    assertEquals("addButtons(array)", presentation.getText());
-    // tree children
-    {
-      List<ObjectInfo> childrenTree = presentation.getChildrenTree();
-      assertThat(childrenTree).hasSize(2);
-      assertThat(childrenTree).isEqualTo(myPanel.getChildrenComponents());
-      assertThat(childrenTree).containsOnly(localButton, emptyButton);
-    }
-    // graphical children
-    {
-      List<ObjectInfo> childrenGraphical = presentation.getChildrenGraphical();
-      assertThat(childrenGraphical).isEmpty();
-    }
-    // when we ask tree children for MyPanel, ArrayObjectInof does not allow to see buttons
-    assertThat(myPanel.getPresentation().getChildrenTree()).containsOnly(arrayInfo);
-  }
+	public void test_Presentation() throws Exception {
+		getParsedContainer();
+		IObjectPresentation presentation = arrayInfo.getPresentation();
+		// icon/text
+		assertNotNull(presentation.getIcon());
+		assertEquals("addButtons(array)", presentation.getText());
+		// tree children
+		{
+			List<ObjectInfo> childrenTree = presentation.getChildrenTree();
+			assertThat(childrenTree).hasSize(2);
+			assertThat(childrenTree).isEqualTo(myPanel.getChildrenComponents());
+			assertThat(childrenTree).containsOnly(localButton, emptyButton);
+		}
+		// graphical children
+		{
+			List<ObjectInfo> childrenGraphical = presentation.getChildrenGraphical();
+			assertThat(childrenGraphical).isEmpty();
+		}
+		// when we ask tree children for MyPanel, ArrayObjectInof does not allow to see buttons
+		assertThat(myPanel.getPresentation().getChildrenTree()).containsOnly(arrayInfo);
+	}
 
-  public void test_deleteItem_withLocal() throws Exception {
-    getParsedContainer();
-    // initially "localButton" is in "array"
-    assertThat(arrayInfo.getItems()).hasSize(2).contains(localButton);
-    // do delete
-    assertTrue(localButton.canDelete());
-    localButton.delete();
-    // check source
-    assertEditor(
-        "// filler filler filler",
-        "public class Test extends MyPanel {",
-        "  public Test() {",
-        "    addButtons( new JButton[] { new JButton() } );",
-        "  }",
-        "}");
-    // no "localButton" in "array"
-    assertThat(arrayInfo.getItems()).containsOnly(emptyButton);
-    assertThat(myPanel.getChildren()).doesNotContain(localButton);
-  }
+	public void test_deleteItem_withLocal() throws Exception {
+		getParsedContainer();
+		// initially "localButton" is in "array"
+		assertThat(arrayInfo.getItems()).hasSize(2).contains(localButton);
+		// do delete
+		assertTrue(localButton.canDelete());
+		localButton.delete();
+		// check source
+		assertEditor(
+				"// filler filler filler",
+				"public class Test extends MyPanel {",
+				"  public Test() {",
+				"    addButtons( new JButton[] { new JButton() } );",
+				"  }",
+				"}");
+		// no "localButton" in "array"
+		assertThat(arrayInfo.getItems()).containsOnly(emptyButton);
+		assertThat(myPanel.getChildren()).doesNotContain(localButton);
+	}
 
-  public void test_deleteItem_withEmpty() throws Exception {
-    getParsedContainer();
-    // initially "emptyButton" is in "array"
-    assertThat(arrayInfo.getItems()).hasSize(2).contains(emptyButton);
-    // do delete
-    assertTrue(emptyButton.canDelete());
-    emptyButton.delete();
-    // check source
-    assertEditor(
-        "// filler filler filler",
-        "public class Test extends MyPanel {",
-        "  public Test() {",
-        "    JButton button = new JButton();",
-        "    addButtons( new JButton[] { button } );",
-        "  }",
-        "}");
-    // no "emptyButton" in "array"
-    assertThat(arrayInfo.getItems()).containsOnly(localButton);
-    assertThat(myPanel.getChildren()).doesNotContain(emptyButton);
-  }
+	public void test_deleteItem_withEmpty() throws Exception {
+		getParsedContainer();
+		// initially "emptyButton" is in "array"
+		assertThat(arrayInfo.getItems()).hasSize(2).contains(emptyButton);
+		// do delete
+		assertTrue(emptyButton.canDelete());
+		emptyButton.delete();
+		// check source
+		assertEditor(
+				"// filler filler filler",
+				"public class Test extends MyPanel {",
+				"  public Test() {",
+				"    JButton button = new JButton();",
+				"    addButtons( new JButton[] { button } );",
+				"  }",
+				"}");
+		// no "emptyButton" in "array"
+		assertThat(arrayInfo.getItems()).containsOnly(localButton);
+		assertThat(myPanel.getChildren()).doesNotContain(emptyButton);
+	}
 
-  public void test_deleteAllItems() throws Exception {
-    getParsedContainer();
-    // delete all buttons
-    localButton.delete();
-    emptyButton.delete();
-    // check source
-    assertEditor(
-        "// filler filler filler",
-        "public class Test extends MyPanel {",
-        "  public Test() {",
-        "  }",
-        "}");
-    assertThat(myPanel.getChildren()).doesNotContain(arrayInfo, localButton, emptyButton);
-  }
+	public void test_deleteAllItems() throws Exception {
+		getParsedContainer();
+		// delete all buttons
+		localButton.delete();
+		emptyButton.delete();
+		// check source
+		assertEditor(
+				"// filler filler filler",
+				"public class Test extends MyPanel {",
+				"  public Test() {",
+				"  }",
+				"}");
+		assertThat(myPanel.getChildren()).doesNotContain(arrayInfo, localButton, emptyButton);
+	}
 
-  public void test_deleteArrayObjectInfo() throws Exception {
-    getParsedContainer();
-    // do delete
-    assertTrue(arrayInfo.canDelete());
-    arrayInfo.delete();
-    // check source
-    assertEditor(
-        "// filler filler filler",
-        "public class Test extends MyPanel {",
-        "  public Test() {",
-        "  }",
-        "}");
-    assertThat(myPanel.getChildren()).doesNotContain(arrayInfo, localButton, emptyButton);
-  }
+	public void test_deleteArrayObjectInfo() throws Exception {
+		getParsedContainer();
+		// do delete
+		assertTrue(arrayInfo.canDelete());
+		arrayInfo.delete();
+		// check source
+		assertEditor(
+				"// filler filler filler",
+				"public class Test extends MyPanel {",
+				"  public Test() {",
+				"  }",
+				"}");
+		assertThat(myPanel.getChildren()).doesNotContain(arrayInfo, localButton, emptyButton);
+	}
 
-  public void test_addItem() throws Exception {
-    getParsedContainer();
-    // check exists
-    assertThat(localButton).isNotNull();
-    assertThat(emptyButton).isNotNull();
-    // add new button
-    JavaInfo newButton = createJavaInfo("javax.swing.JButton");
-    arrayInfo.command_CREATE(newButton, null);
-    // check source
-    assertEditor(
-        "// filler filler filler",
-        "public class Test extends MyPanel {",
-        "  public Test() {",
-        "    JButton button = new JButton();",
-        "    addButtons( new JButton[] { button, new JButton(), new JButton('New button') } );",
-        "  }",
-        "}");
-    assertThat(myPanel.getChildren(ArrayObjectInfo.class)).containsOnly(arrayInfo);
-    Assertions.<JavaInfo>assertThat(myPanel.getChildrenComponents()).containsOnly(localButton, emptyButton, newButton);
-    // check objects
-    myPanel.refresh();
-    assertThat(localButton.getObject()).isNotNull();
-    assertThat(emptyButton.getObject()).isNotNull();
-    assertThat(newButton.getObject()).isNotNull();
-  }
+	public void test_addItem() throws Exception {
+		getParsedContainer();
+		// check exists
+		assertThat(localButton).isNotNull();
+		assertThat(emptyButton).isNotNull();
+		// add new button
+		JavaInfo newButton = createJavaInfo("javax.swing.JButton");
+		arrayInfo.command_CREATE(newButton, null);
+		// check source
+		assertEditor(
+				"// filler filler filler",
+				"public class Test extends MyPanel {",
+				"  public Test() {",
+				"    JButton button = new JButton();",
+				"    addButtons( new JButton[] { button, new JButton(), new JButton('New button') } );",
+				"  }",
+				"}");
+		assertThat(myPanel.getChildren(ArrayObjectInfo.class)).containsOnly(arrayInfo);
+		Assertions.<JavaInfo>assertThat(myPanel.getChildrenComponents()).containsOnly(localButton, emptyButton, newButton);
+		// check objects
+		myPanel.refresh();
+		assertThat(localButton.getObject()).isNotNull();
+		assertThat(emptyButton.getObject()).isNotNull();
+		assertThat(newButton.getObject()).isNotNull();
+	}
 
-  public void test_moveItemInside() throws Exception {
-    getParsedContainer();
-    // check exists
-    assertThat(arrayInfo.getItems().indexOf(localButton)).isEqualTo(0);
-    assertThat(arrayInfo.getItems().indexOf(emptyButton)).isEqualTo(1);
-    assertThat(myPanel.getChildrenComponents().indexOf(localButton)).isLessThan(
-        myPanel.getChildrenComponents().indexOf(emptyButton));
-    // move button
-    arrayInfo.command_MOVE(emptyButton, localButton);
-    // check source
-    assertEditor(
-        "// filler filler filler",
-        "public class Test extends MyPanel {",
-        "  public Test() {",
-        "    JButton button = new JButton();",
-        "    addButtons( new JButton[] { new JButton(), button } );",
-        "  }",
-        "}");
-    assertThat(arrayInfo.getItems().indexOf(localButton)).isEqualTo(1);
-    assertThat(arrayInfo.getItems().indexOf(emptyButton)).isEqualTo(0);
-    assertThat(myPanel.getChildrenComponents().indexOf(localButton)).isGreaterThan(
-        myPanel.getChildrenComponents().indexOf(emptyButton));
-    // check objects
-    myPanel.refresh();
-    assertThat(localButton.getObject()).isNotNull();
-    assertThat(emptyButton.getObject()).isNotNull();
-  }
+	public void test_moveItemInside() throws Exception {
+		getParsedContainer();
+		// check exists
+		assertThat(arrayInfo.getItems().indexOf(localButton)).isEqualTo(0);
+		assertThat(arrayInfo.getItems().indexOf(emptyButton)).isEqualTo(1);
+		assertThat(myPanel.getChildrenComponents().indexOf(localButton)).isLessThan(
+				myPanel.getChildrenComponents().indexOf(emptyButton));
+		// move button
+		arrayInfo.command_MOVE(emptyButton, localButton);
+		// check source
+		assertEditor(
+				"// filler filler filler",
+				"public class Test extends MyPanel {",
+				"  public Test() {",
+				"    JButton button = new JButton();",
+				"    addButtons( new JButton[] { new JButton(), button } );",
+				"  }",
+				"}");
+		assertThat(arrayInfo.getItems().indexOf(localButton)).isEqualTo(1);
+		assertThat(arrayInfo.getItems().indexOf(emptyButton)).isEqualTo(0);
+		assertThat(myPanel.getChildrenComponents().indexOf(localButton)).isGreaterThan(
+				myPanel.getChildrenComponents().indexOf(emptyButton));
+		// check objects
+		myPanel.refresh();
+		assertThat(localButton.getObject()).isNotNull();
+		assertThat(emptyButton.getObject()).isNotNull();
+	}
 
-  public void test_moveItemBetween() throws Exception {
-    getParsedContainer();
-    // check exists
-    assertThat(arrayInfo.getItems().indexOf(localButton)).isEqualTo(0);
-    assertThat(arrayInfo.getItems().indexOf(emptyButton)).isEqualTo(1);
-    assertThat(myPanel.getChildrenComponents().indexOf(localButton)).isLessThan(
-        myPanel.getChildrenComponents().indexOf(emptyButton));
-    // create new invocation
-    MethodInvocation newMethodInvocation =
-        myPanel.addMethodInvocation(
-            "addButtons(javax.swing.JButton[])",
-            "new javax.swing.JButton[]{}");
-    // create new array info;
-    Class<?> itemType =
-        ReflectionUtils.getClassByName(
-            EditorState.get(m_lastEditor).getEditorLoader(),
-            "javax.swing.JButton");
-    ArrayObjectInfo newArrayInfo =
-        new ArrayObjectInfo(m_lastEditor,
-            "addButtonsNew",
-            itemType,
-            (ArrayCreation) newMethodInvocation.arguments().get(0));
-    myPanel.addChild(newArrayInfo);
-    // check source
-    assertEditor(
-        "// filler filler filler",
-        "public class Test extends MyPanel {",
-        "  public Test() {",
-        "    addButtons(new JButton[]{});",
-        "    JButton button = new JButton();",
-        "    addButtons( new JButton[] { button, new JButton() } );",
-        "  }",
-        "}");
-    {
-      // move local button
-      newArrayInfo.command_MOVE(localButton, null);
-      // check source
-      assertEditor(
-          "// filler filler filler",
-          "public class Test extends MyPanel {",
-          "  public Test() {",
-          "    JButton button = new JButton();",
-          "    addButtons(new JButton[]{button});",
-          "    addButtons( new JButton[] { new JButton() } );",
-          "  }",
-          "}");
-      assertThat(arrayInfo.getItems()).containsOnly(emptyButton);
-      assertThat(newArrayInfo.getItems()).containsOnly(localButton);
-      assertThat(myPanel.getChildrenComponents()).containsOnly(localButton, emptyButton);
-      assertThat(myPanel.getPresentation().getChildrenTree()).containsOnly(arrayInfo, newArrayInfo);
-      // check objects
-      myPanel.refresh();
-      assertThat(localButton.getObject()).isNotNull();
-      assertThat(emptyButton.getObject()).isNotNull();
-    }
-    {
-      // move empty button too
-      newArrayInfo.command_MOVE(emptyButton, null);
-      // check source
-      assertEditor(
-          "// filler filler filler",
-          "public class Test extends MyPanel {",
-          "  public Test() {",
-          "    JButton button = new JButton();",
-          "    addButtons(new JButton[]{button, new JButton()});",
-          "  }",
-          "}");
-      assertThat(myPanel.getChildrenComponents()).containsOnly(localButton, emptyButton);
-      assertThat(myPanel.getPresentation().getChildrenTree()).containsOnly(newArrayInfo);
-      assertThat(newArrayInfo.getItems()).containsOnly(localButton, emptyButton);
-      // check objects
-      myPanel.refresh();
-      assertThat(localButton.getObject()).isNotNull();
-      assertThat(emptyButton.getObject()).isNotNull();
-    }
-  }
+	public void test_moveItemBetween() throws Exception {
+		getParsedContainer();
+		// check exists
+		assertThat(arrayInfo.getItems().indexOf(localButton)).isEqualTo(0);
+		assertThat(arrayInfo.getItems().indexOf(emptyButton)).isEqualTo(1);
+		assertThat(myPanel.getChildrenComponents().indexOf(localButton)).isLessThan(
+				myPanel.getChildrenComponents().indexOf(emptyButton));
+		// create new invocation
+		MethodInvocation newMethodInvocation =
+				myPanel.addMethodInvocation(
+						"addButtons(javax.swing.JButton[])",
+						"new javax.swing.JButton[]{}");
+		// create new array info;
+		Class<?> itemType =
+				ReflectionUtils.getClassByName(
+						EditorState.get(m_lastEditor).getEditorLoader(),
+						"javax.swing.JButton");
+		ArrayObjectInfo newArrayInfo =
+				new ArrayObjectInfo(m_lastEditor,
+						"addButtonsNew",
+						itemType,
+						(ArrayCreation) newMethodInvocation.arguments().get(0));
+		myPanel.addChild(newArrayInfo);
+		// check source
+		assertEditor(
+				"// filler filler filler",
+				"public class Test extends MyPanel {",
+				"  public Test() {",
+				"    addButtons(new JButton[]{});",
+				"    JButton button = new JButton();",
+				"    addButtons( new JButton[] { button, new JButton() } );",
+				"  }",
+				"}");
+		{
+			// move local button
+			newArrayInfo.command_MOVE(localButton, null);
+			// check source
+			assertEditor(
+					"// filler filler filler",
+					"public class Test extends MyPanel {",
+					"  public Test() {",
+					"    JButton button = new JButton();",
+					"    addButtons(new JButton[]{button});",
+					"    addButtons( new JButton[] { new JButton() } );",
+					"  }",
+					"}");
+			assertThat(arrayInfo.getItems()).containsOnly(emptyButton);
+			assertThat(newArrayInfo.getItems()).containsOnly(localButton);
+			assertThat(myPanel.getChildrenComponents()).containsOnly(localButton, emptyButton);
+			assertThat(myPanel.getPresentation().getChildrenTree()).containsOnly(arrayInfo, newArrayInfo);
+			// check objects
+			myPanel.refresh();
+			assertThat(localButton.getObject()).isNotNull();
+			assertThat(emptyButton.getObject()).isNotNull();
+		}
+		{
+			// move empty button too
+			newArrayInfo.command_MOVE(emptyButton, null);
+			// check source
+			assertEditor(
+					"// filler filler filler",
+					"public class Test extends MyPanel {",
+					"  public Test() {",
+					"    JButton button = new JButton();",
+					"    addButtons(new JButton[]{button, new JButton()});",
+					"  }",
+					"}");
+			assertThat(myPanel.getChildrenComponents()).containsOnly(localButton, emptyButton);
+			assertThat(myPanel.getPresentation().getChildrenTree()).containsOnly(newArrayInfo);
+			assertThat(newArrayInfo.getItems()).containsOnly(localButton, emptyButton);
+			// check objects
+			myPanel.refresh();
+			assertThat(localButton.getObject()).isNotNull();
+			assertThat(emptyButton.getObject()).isNotNull();
+		}
+	}
 
-  public void test_moveItemOutside() throws Exception {
-    getParsedContainer(new String[]{
-        "public class Test extends MyPanel {",
-        "  public Test() {",
-        "    JButton button = new JButton();",
-        "    addButtons( new JButton[] { button, new JButton() } );",
-        "    {",
-        "      JButton button_1 = new JButton();",
-        "      button_1.setText('Button');",
-        "      add(button_1);",
-        "    }",
-        "  }",
-        "}"});
-    // check exists
-    assertThat(arrayInfo.getItems().indexOf(localButton)).isEqualTo(0);
-    assertThat(arrayInfo.getItems().indexOf(emptyButton)).isEqualTo(1);
-    assertThat(myPanel.getChildrenComponents().indexOf(localButton)).isLessThan(
-        myPanel.getChildrenComponents().indexOf(emptyButton));
-    // outside JButton
-    assertThat(myPanel.getChildrenComponents()).hasSize(3);
-    ComponentInfo newButton = myPanel.getChildrenComponents().get(2);
-    // move button
-    arrayInfo.command_MOVE(newButton, emptyButton);
-    {
-      // check source
-      assertEditor(
-          "public class Test extends MyPanel {",
-          "  private JButton button_1;",
-          "  public Test() {",
-          "    JButton button = new JButton();",
-          "    {",
-          "      button_1 = new JButton();",
-          "      button_1.setText('Button');",
-          "    }",
-          "    addButtons( new JButton[] { button, button_1, new JButton() } );",
-          "  }",
-          "}");
-      assertThat(arrayInfo.getItems()).containsOnly(localButton, emptyButton, newButton);
-      assertThat(myPanel.getChildrenComponents()).containsOnly(localButton, emptyButton, newButton);
-      assertThat(myPanel.getPresentation().getChildrenTree()).containsOnly(arrayInfo);
-      // check objects
-      myPanel.refresh();
-      assertThat(localButton.getObject()).isNotNull();
-      assertThat(emptyButton.getObject()).isNotNull();
-      assertThat(newButton.getObject()).isNotNull();
-    }
-    {
-      // check source on delete
-      newButton.delete();
-      assertEditor(
-          "public class Test extends MyPanel {",
-          "  public Test() {",
-          "    JButton button = new JButton();",
-          "    addButtons( new JButton[] { button, new JButton() } );",
-          "  }",
-          "}");
-      // check objects
-      myPanel.refresh();
-      assertThat(localButton.getObject()).isNotNull();
-      assertThat(emptyButton.getObject()).isNotNull();
-    }
-  }
+	public void test_moveItemOutside() throws Exception {
+		getParsedContainer(new String[]{
+				"public class Test extends MyPanel {",
+				"  public Test() {",
+				"    JButton button = new JButton();",
+				"    addButtons( new JButton[] { button, new JButton() } );",
+				"    {",
+				"      JButton button_1 = new JButton();",
+				"      button_1.setText('Button');",
+				"      add(button_1);",
+				"    }",
+				"  }",
+		"}"});
+		// check exists
+		assertThat(arrayInfo.getItems().indexOf(localButton)).isEqualTo(0);
+		assertThat(arrayInfo.getItems().indexOf(emptyButton)).isEqualTo(1);
+		assertThat(myPanel.getChildrenComponents().indexOf(localButton)).isLessThan(
+				myPanel.getChildrenComponents().indexOf(emptyButton));
+		// outside JButton
+		assertThat(myPanel.getChildrenComponents()).hasSize(3);
+		ComponentInfo newButton = myPanel.getChildrenComponents().get(2);
+		// move button
+		arrayInfo.command_MOVE(newButton, emptyButton);
+		{
+			// check source
+			assertEditor(
+					"public class Test extends MyPanel {",
+					"  private JButton button_1;",
+					"  public Test() {",
+					"    JButton button = new JButton();",
+					"    {",
+					"      button_1 = new JButton();",
+					"      button_1.setText('Button');",
+					"    }",
+					"    addButtons( new JButton[] { button, button_1, new JButton() } );",
+					"  }",
+					"}");
+			assertThat(arrayInfo.getItems()).containsOnly(localButton, emptyButton, newButton);
+			assertThat(myPanel.getChildrenComponents()).containsOnly(localButton, emptyButton, newButton);
+			assertThat(myPanel.getPresentation().getChildrenTree()).containsOnly(arrayInfo);
+			// check objects
+			myPanel.refresh();
+			assertThat(localButton.getObject()).isNotNull();
+			assertThat(emptyButton.getObject()).isNotNull();
+			assertThat(newButton.getObject()).isNotNull();
+		}
+		{
+			// check source on delete
+			newButton.delete();
+			assertEditor(
+					"public class Test extends MyPanel {",
+					"  public Test() {",
+					"    JButton button = new JButton();",
+					"    addButtons( new JButton[] { button, new JButton() } );",
+					"  }",
+					"}");
+			// check objects
+			myPanel.refresh();
+			assertThat(localButton.getObject()).isNotNull();
+			assertThat(emptyButton.getObject()).isNotNull();
+		}
+	}
 
-  public void test_moveItemOutside_inlined() throws Exception {
-    getParsedContainer(new String[]{
-        "public class Test extends MyPanel {",
-        "  public Test() {",
-        "    JButton button = new JButton();",
-        "    addButtons( new JButton[] { button, new JButton() } );",
-        "    add(new JButton('Button'));",
-        "  }",
-        "}"});
-    // check exists
-    assertThat(arrayInfo.getItems().indexOf(localButton)).isEqualTo(0);
-    assertThat(arrayInfo.getItems().indexOf(emptyButton)).isEqualTo(1);
-    assertThat(myPanel.getChildrenComponents().indexOf(localButton)).isLessThan(
-        myPanel.getChildrenComponents().indexOf(emptyButton));
-    // outside JButton
-    assertThat(myPanel.getChildrenComponents()).hasSize(3);
-    ComponentInfo newButton = myPanel.getChildrenComponents().get(2);
-    // move button
-    arrayInfo.command_MOVE(newButton, emptyButton);
-    {
-      // check source
-      assertEditor(
-          "public class Test extends MyPanel {",
-          "  public Test() {",
-          "    JButton button = new JButton();",
-          "    addButtons( new JButton[] { button, new JButton('Button'), new JButton() } );",
-          "  }",
-          "}");
-      assertThat(arrayInfo.getItems()).containsOnly(localButton, emptyButton, newButton);
-      assertThat(myPanel.getChildrenComponents()).containsOnly(localButton, emptyButton, newButton);
-      assertThat(myPanel.getPresentation().getChildrenTree()).containsOnly(arrayInfo);
-      // check objects
-      myPanel.refresh();
-      assertThat(localButton.getObject()).isNotNull();
-      assertThat(emptyButton.getObject()).isNotNull();
-      assertThat(newButton.getObject()).isNotNull();
-    }
-    {
-      // check source on delete
-      newButton.delete();
-      assertEditor(
-          "public class Test extends MyPanel {",
-          "  public Test() {",
-          "    JButton button = new JButton();",
-          "    addButtons( new JButton[] { button, new JButton() } );",
-          "  }",
-          "}");
-      // check objects
-      myPanel.refresh();
-      assertThat(localButton.getObject()).isNotNull();
-      assertThat(emptyButton.getObject()).isNotNull();
-    }
-  }
+	public void test_moveItemOutside_inlined() throws Exception {
+		getParsedContainer(new String[]{
+				"public class Test extends MyPanel {",
+				"  public Test() {",
+				"    JButton button = new JButton();",
+				"    addButtons( new JButton[] { button, new JButton() } );",
+				"    add(new JButton('Button'));",
+				"  }",
+		"}"});
+		// check exists
+		assertThat(arrayInfo.getItems().indexOf(localButton)).isEqualTo(0);
+		assertThat(arrayInfo.getItems().indexOf(emptyButton)).isEqualTo(1);
+		assertThat(myPanel.getChildrenComponents().indexOf(localButton)).isLessThan(
+				myPanel.getChildrenComponents().indexOf(emptyButton));
+		// outside JButton
+		assertThat(myPanel.getChildrenComponents()).hasSize(3);
+		ComponentInfo newButton = myPanel.getChildrenComponents().get(2);
+		// move button
+		arrayInfo.command_MOVE(newButton, emptyButton);
+		{
+			// check source
+			assertEditor(
+					"public class Test extends MyPanel {",
+					"  public Test() {",
+					"    JButton button = new JButton();",
+					"    addButtons( new JButton[] { button, new JButton('Button'), new JButton() } );",
+					"  }",
+					"}");
+			assertThat(arrayInfo.getItems()).containsOnly(localButton, emptyButton, newButton);
+			assertThat(myPanel.getChildrenComponents()).containsOnly(localButton, emptyButton, newButton);
+			assertThat(myPanel.getPresentation().getChildrenTree()).containsOnly(arrayInfo);
+			// check objects
+			myPanel.refresh();
+			assertThat(localButton.getObject()).isNotNull();
+			assertThat(emptyButton.getObject()).isNotNull();
+			assertThat(newButton.getObject()).isNotNull();
+		}
+		{
+			// check source on delete
+			newButton.delete();
+			assertEditor(
+					"public class Test extends MyPanel {",
+					"  public Test() {",
+					"    JButton button = new JButton();",
+					"    addButtons( new JButton[] { button, new JButton() } );",
+					"  }",
+					"}");
+			// check objects
+			myPanel.refresh();
+			assertThat(localButton.getObject()).isNotNull();
+			assertThat(emptyButton.getObject()).isNotNull();
+		}
+	}
 
-  public void test_moveItemOutside_inlining() throws Exception {
-    getParsedContainer();
-    // check exists
-    assertThat(arrayInfo.getItems().indexOf(localButton)).isEqualTo(0);
-    assertThat(arrayInfo.getItems().indexOf(emptyButton)).isEqualTo(1);
-    assertThat(myPanel.getChildrenComponents().indexOf(localButton)).isLessThan(
-        myPanel.getChildrenComponents().indexOf(emptyButton));
-    // add new JButton
-    ComponentInfo newButton;
-    {
-      FlowLayoutInfo flowLayout = (FlowLayoutInfo) myPanel.getLayout();
-      newButton = createComponent("javax.swing.JButton");
-      flowLayout.add(newButton, null);
-    }
-    // check source
-    assertEditor(
-        "// filler filler filler",
-        "public class Test extends MyPanel {",
-        "  public Test() {",
-        "    JButton button = new JButton();",
-        "    addButtons( new JButton[] { button, new JButton() } );",
-        "    {",
-        "      JButton button_1 = new JButton('New button');",
-        "      add(button_1);",
-        "    }",
-        "  }",
-        "}");
-    assertThat(myPanel.getPresentation().getChildrenTree()).containsOnly(arrayInfo, newButton);
-    assertThat(myPanel.getChildrenComponents()).containsOnly(localButton, emptyButton, newButton);
-    // move button
-    arrayInfo.command_MOVE(newButton, emptyButton);
-    {
-      // check source
-      assertEditor(
-          "// filler filler filler",
-          "public class Test extends MyPanel {",
-          "  public Test() {",
-          "    JButton button = new JButton();",
-          "    addButtons( new JButton[] { button, new JButton('New button'), new JButton() } );",
-          "  }",
-          "}");
-      assertThat(arrayInfo.getItems()).containsOnly(localButton, emptyButton, newButton);
-      assertThat(myPanel.getChildrenComponents()).containsOnly(localButton, emptyButton, newButton);
-      assertThat(myPanel.getPresentation().getChildrenTree()).containsOnly(arrayInfo);
-      // check objects
-      myPanel.refresh();
-      assertThat(localButton.getObject()).isNotNull();
-      assertThat(emptyButton.getObject()).isNotNull();
-      assertThat(newButton.getObject()).isNotNull();
-    }
-    {
-      // check source on delete
-      newButton.delete();
-      assertEditor(
-          "// filler filler filler",
-          "public class Test extends MyPanel {",
-          "  public Test() {",
-          "    JButton button = new JButton();",
-          "    addButtons( new JButton[] { button, new JButton() } );",
-          "  }",
-          "}");
-      // check objects
-      myPanel.refresh();
-      assertThat(localButton.getObject()).isNotNull();
-      assertThat(emptyButton.getObject()).isNotNull();
-    }
-  }
+	public void test_moveItemOutside_inlining() throws Exception {
+		getParsedContainer();
+		// check exists
+		assertThat(arrayInfo.getItems().indexOf(localButton)).isEqualTo(0);
+		assertThat(arrayInfo.getItems().indexOf(emptyButton)).isEqualTo(1);
+		assertThat(myPanel.getChildrenComponents().indexOf(localButton)).isLessThan(
+				myPanel.getChildrenComponents().indexOf(emptyButton));
+		// add new JButton
+		ComponentInfo newButton;
+		{
+			FlowLayoutInfo flowLayout = (FlowLayoutInfo) myPanel.getLayout();
+			newButton = createComponent("javax.swing.JButton");
+			flowLayout.add(newButton, null);
+		}
+		// check source
+		assertEditor(
+				"// filler filler filler",
+				"public class Test extends MyPanel {",
+				"  public Test() {",
+				"    JButton button = new JButton();",
+				"    addButtons( new JButton[] { button, new JButton() } );",
+				"    {",
+				"      JButton button_1 = new JButton('New button');",
+				"      add(button_1);",
+				"    }",
+				"  }",
+				"}");
+		assertThat(myPanel.getPresentation().getChildrenTree()).containsOnly(arrayInfo, newButton);
+		assertThat(myPanel.getChildrenComponents()).containsOnly(localButton, emptyButton, newButton);
+		// move button
+		arrayInfo.command_MOVE(newButton, emptyButton);
+		{
+			// check source
+			assertEditor(
+					"// filler filler filler",
+					"public class Test extends MyPanel {",
+					"  public Test() {",
+					"    JButton button = new JButton();",
+					"    addButtons( new JButton[] { button, new JButton('New button'), new JButton() } );",
+					"  }",
+					"}");
+			assertThat(arrayInfo.getItems()).containsOnly(localButton, emptyButton, newButton);
+			assertThat(myPanel.getChildrenComponents()).containsOnly(localButton, emptyButton, newButton);
+			assertThat(myPanel.getPresentation().getChildrenTree()).containsOnly(arrayInfo);
+			// check objects
+			myPanel.refresh();
+			assertThat(localButton.getObject()).isNotNull();
+			assertThat(emptyButton.getObject()).isNotNull();
+			assertThat(newButton.getObject()).isNotNull();
+		}
+		{
+			// check source on delete
+			newButton.delete();
+			assertEditor(
+					"// filler filler filler",
+					"public class Test extends MyPanel {",
+					"  public Test() {",
+					"    JButton button = new JButton();",
+					"    addButtons( new JButton[] { button, new JButton() } );",
+					"  }",
+					"}");
+			// check objects
+			myPanel.refresh();
+			assertThat(localButton.getObject()).isNotNull();
+			assertThat(emptyButton.getObject()).isNotNull();
+		}
+	}
 
-  /* this feature is not allowed :(
+	/* this feature is not allowed :(
   public void test_OutsideInitialization() throws Exception {
   	getParsedContainer(new String[]{
   			"public class Test extends MyPanel {",
@@ -531,61 +531,61 @@ public void test_OutsideInitialization() throws Exception {
   	localButton = myPanel.getChildrenComponents().get(0);
   	emptyButton = myPanel.getChildrenComponents().get(1);
   }*/
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void checkArrayItem(ComponentInfo item) {
-    Association association = item.getAssociation();
-    assertInstanceOf(InvocationChildArrayAssociation.class, association);
-    assertSame(item, association.getJavaInfo());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void checkArrayItem(ComponentInfo item) {
+		Association association = item.getAssociation();
+		assertInstanceOf(InvocationChildArrayAssociation.class, association);
+		assertSame(item, association.getJavaInfo());
+	}
 
-  private void getParsedContainer() throws Exception {
-    getParsedContainer(new String[]{
-        "// filler filler filler",
-        "public class Test extends MyPanel {",
-        "  public Test() {",
-        "    JButton button = new JButton();",
-        "    addButtons( new JButton[] { button, new JButton() } );",
-        "  }",
-        "}"});
-  }
+	private void getParsedContainer() throws Exception {
+		getParsedContainer(new String[]{
+				"// filler filler filler",
+				"public class Test extends MyPanel {",
+				"  public Test() {",
+				"    JButton button = new JButton();",
+				"    addButtons( new JButton[] { button, new JButton() } );",
+				"  }",
+		"}"});
+	}
 
-  private void getParsedContainer(String[] sourceLines) throws Exception {
-    configureProject2();
-    myPanel = parseContainer(sourceLines);
-    // 1 array + 2 buttons
-    assertThat(myPanel.getChildren(ArrayObjectInfo.class)).hasSize(1);
-    assertThat(myPanel.getChildren(ComponentInfo.class).size()).isGreaterThanOrEqualTo(2);
-    // get models
-    arrayInfo = myPanel.getChildren(ArrayObjectInfo.class).get(0);
-    localButton = myPanel.getChildrenComponents().get(0);
-    emptyButton = myPanel.getChildrenComponents().get(1);
-  }
+	private void getParsedContainer(String[] sourceLines) throws Exception {
+		configureProject2();
+		myPanel = parseContainer(sourceLines);
+		// 1 array + 2 buttons
+		assertThat(myPanel.getChildren(ArrayObjectInfo.class)).hasSize(1);
+		assertThat(myPanel.getChildren(ComponentInfo.class).size()).isGreaterThanOrEqualTo(2);
+		// get models
+		arrayInfo = myPanel.getChildren(ArrayObjectInfo.class).get(0);
+		localButton = myPanel.getChildrenComponents().get(0);
+		emptyButton = myPanel.getChildrenComponents().get(1);
+	}
 
-  private void configureProject2() throws Exception {
-    setFileContentSrc(
-        "test/MyPanel.java",
-        getTestSource(
-            "public class MyPanel extends JPanel {",
-            "  public void addButtons(JButton[] buttons) {",
-            "  }",
-            "}"));
-    setFileContentSrc(
-        "test/MyPanel.wbp-component.xml",
-        getSourceDQ(
-            "<?xml version='1.0' encoding='UTF-8'?>",
-            "<component xmlns='http://www.eclipse.org/wb/WBPComponent'>",
-            "  <methods>",
-            "    <method name='addButtons'>",
-            "      <parameter type='javax.swing.JButton[]' child='true'>",
-            "        <tag name='arrayObject.removeOnEmpty' value='true'/>",
-            "      </parameter>",
-            "    </method>",
-            "  </methods>",
-            "</component>"));
-    waitForAutoBuild();
-  }
+	private void configureProject2() throws Exception {
+		setFileContentSrc(
+				"test/MyPanel.java",
+				getTestSource(
+						"public class MyPanel extends JPanel {",
+						"  public void addButtons(JButton[] buttons) {",
+						"  }",
+						"}"));
+		setFileContentSrc(
+				"test/MyPanel.wbp-component.xml",
+				getSourceDQ(
+						"<?xml version='1.0' encoding='UTF-8'?>",
+						"<component xmlns='http://www.eclipse.org/wb/WBPComponent'>",
+						"  <methods>",
+						"    <method name='addButtons'>",
+						"      <parameter type='javax.swing.JButton[]' child='true'>",
+						"        <tag name='arrayObject.removeOnEmpty' value='true'/>",
+						"      </parameter>",
+						"    </method>",
+						"  </methods>",
+						"</component>"));
+		waitForAutoBuild();
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/model/ClassLoadingTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/model/ClassLoadingTest.java
index 92c1968ad..24adca8a9 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/model/ClassLoadingTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/model/ClassLoadingTest.java
@@ -28,260 +28,260 @@
  * @author scheglov_ke
  */
 public class ClassLoadingTest extends SwingModelTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_installNewBundleWithContributions() throws Exception {
-    TestBundle testBundle = new TestBundle();
-    try {
-      String className = ClassForBundle.class.getName();
-      testBundle.addClass(ClassForBundle.class);
-      testBundle.addExtension(
-          "org.eclipse.wb.core.toolkits",
-          "<toolkit id='org.eclipse.wb.swing' myAttr='0'/>");
-      testBundle.install();
-      try {
-        // classes can be loaded from this "test" Bundle
-        testBundle.getBundle().loadClass(className);
-        // extensions are applied
-        assertTrue(hasToolkitElementWith("myAttr"));
-      } finally {
-        testBundle.uninstall();
-      }
-    } finally {
-      testBundle.dispose();
-    }
-    assertFalse(hasToolkitElementWith("myAttr"));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_installNewBundleWithContributions() throws Exception {
+		TestBundle testBundle = new TestBundle();
+		try {
+			String className = ClassForBundle.class.getName();
+			testBundle.addClass(ClassForBundle.class);
+			testBundle.addExtension(
+					"org.eclipse.wb.core.toolkits",
+					"<toolkit id='org.eclipse.wb.swing' myAttr='0'/>");
+			testBundle.install();
+			try {
+				// classes can be loaded from this "test" Bundle
+				testBundle.getBundle().loadClass(className);
+				// extensions are applied
+				assertTrue(hasToolkitElementWith("myAttr"));
+			} finally {
+				testBundle.uninstall();
+			}
+		} finally {
+			testBundle.dispose();
+		}
+		assertFalse(hasToolkitElementWith("myAttr"));
+	}
 
-  /**
-   * Test for using <code>classLoader-bundle</code> to contribute Bundle into toolkit
-   * {@link ClassLoader}.
-   */
-  public void test_useClasspathBundle() throws Exception {
-    TestBundle testBundle = new TestBundle();
-    try {
-      String className = ClassForBundle.class.getName();
-      testBundle.addClass(ClassForBundle.class);
-      testBundle.addExtension("org.eclipse.wb.core.toolkits", new String[]{
-          "<toolkit id='org.eclipse.wb.swing'>",
-          "  <classLoader-bundle bundle='" + testBundle.getId() + "'/>",
-          "</toolkit>"});
-      testBundle.install();
-      try {
-        parseContainer(
-            "public class Test extends JFrame {",
-            "  public Test() {",
-            "      // filler",
-            "  }",
-            "}");
-        // ClassForBundle is visible in Swing ClassLoader
-        m_lastLoader.loadClass(className);
-      } finally {
-        testBundle.uninstall();
-      }
-    } finally {
-      testBundle.dispose();
-    }
-  }
+	/**
+	 * Test for using <code>classLoader-bundle</code> to contribute Bundle into toolkit
+	 * {@link ClassLoader}.
+	 */
+	public void test_useClasspathBundle() throws Exception {
+		TestBundle testBundle = new TestBundle();
+		try {
+			String className = ClassForBundle.class.getName();
+			testBundle.addClass(ClassForBundle.class);
+			testBundle.addExtension("org.eclipse.wb.core.toolkits", new String[]{
+					"<toolkit id='org.eclipse.wb.swing'>",
+					"  <classLoader-bundle bundle='" + testBundle.getId() + "'/>",
+			"</toolkit>"});
+			testBundle.install();
+			try {
+				parseContainer(
+						"public class Test extends JFrame {",
+						"  public Test() {",
+						"      // filler",
+						"  }",
+						"}");
+				// ClassForBundle is visible in Swing ClassLoader
+				m_lastLoader.loadClass(className);
+			} finally {
+				testBundle.uninstall();
+			}
+		} finally {
+			testBundle.dispose();
+		}
+	}
 
-  /**
-   * Test for using <code>classLoader-library</code> to contribute JAR into toolkit
-   * {@link ClassLoader}.
-   */
-  public void test_useClasspathLibrary_singleJar() throws Exception {
-    TestBundle testBundle = new TestBundle();
-    try {
-      String className = ClassForBundle.class.getName();
-      testBundle.addJar("myClasses.jar").addClass(ClassForBundle.class).close();
-      testBundle.addExtension("org.eclipse.wb.core.toolkits", new String[]{
-          "<toolkit id='org.eclipse.wb.swing'>",
-          "  <classLoader-library bundle='" + testBundle.getId() + "' jar='myClasses.jar'/>",
-          "</toolkit>"});
-      testBundle.install();
-      try {
-        parseContainer(
-            "public class Test extends JFrame {",
-            "  public Test() {",
-            "      // filler",
-            "  }",
-            "}");
-        // ClassForBundle is visible in Swing ClassLoader
-        m_lastLoader.loadClass(className);
-      } finally {
-        testBundle.uninstall();
-      }
-    } finally {
-      testBundle.dispose();
-    }
-  }
+	/**
+	 * Test for using <code>classLoader-library</code> to contribute JAR into toolkit
+	 * {@link ClassLoader}.
+	 */
+	public void test_useClasspathLibrary_singleJar() throws Exception {
+		TestBundle testBundle = new TestBundle();
+		try {
+			String className = ClassForBundle.class.getName();
+			testBundle.addJar("myClasses.jar").addClass(ClassForBundle.class).close();
+			testBundle.addExtension("org.eclipse.wb.core.toolkits", new String[]{
+					"<toolkit id='org.eclipse.wb.swing'>",
+					"  <classLoader-library bundle='" + testBundle.getId() + "' jar='myClasses.jar'/>",
+			"</toolkit>"});
+			testBundle.install();
+			try {
+				parseContainer(
+						"public class Test extends JFrame {",
+						"  public Test() {",
+						"      // filler",
+						"  }",
+						"}");
+				// ClassForBundle is visible in Swing ClassLoader
+				m_lastLoader.loadClass(className);
+			} finally {
+				testBundle.uninstall();
+			}
+		} finally {
+			testBundle.dispose();
+		}
+	}
 
-  /**
-   * Test for using <code>classLoader-library</code> to contribute two JAR's into toolkit
-   * {@link ClassLoader}, where {@link Class} from one JAR references {@link Class} in other JAR.
-   */
-  public void test_useClassLoaderLibrary_toDependentJars() throws Exception {
-    TestBundle testBundle = new TestBundle();
-    try {
-      String className = ClassForBundle.class.getName();
-      String className2 = ClassForBundle2.class.getName();
-      testBundle.addJar("myClasses.jar").addClass(ClassForBundle.class).close();
-      testBundle.addJar("myClasses2.jar").addClass(ClassForBundle2.class).close();
-      testBundle.addExtension("org.eclipse.wb.core.toolkits", new String[]{
-          "<toolkit id='org.eclipse.wb.swing'>",
-          "  <classLoader-library bundle='" + testBundle.getId() + "' jar='myClasses.jar'/>",
-          "  <classLoader-library bundle='" + testBundle.getId() + "' jar='myClasses2.jar'/>",
-          "</toolkit>"});
-      testBundle.install();
-      try {
-        parseContainer(
-            "public class Test extends JFrame {",
-            "  public Test() {",
-            "      // filler",
-            "  }",
-            "}");
-        // ClassForBundle & ClassForBundle2 are visible in Swing ClassLoader
-        m_lastLoader.loadClass(className);
-        m_lastLoader.loadClass(className2);
-      } finally {
-        testBundle.uninstall();
-      }
-    } finally {
-      testBundle.dispose();
-    }
-  }
+	/**
+	 * Test for using <code>classLoader-library</code> to contribute two JAR's into toolkit
+	 * {@link ClassLoader}, where {@link Class} from one JAR references {@link Class} in other JAR.
+	 */
+	public void test_useClassLoaderLibrary_toDependentJars() throws Exception {
+		TestBundle testBundle = new TestBundle();
+		try {
+			String className = ClassForBundle.class.getName();
+			String className2 = ClassForBundle2.class.getName();
+			testBundle.addJar("myClasses.jar").addClass(ClassForBundle.class).close();
+			testBundle.addJar("myClasses2.jar").addClass(ClassForBundle2.class).close();
+			testBundle.addExtension("org.eclipse.wb.core.toolkits", new String[]{
+					"<toolkit id='org.eclipse.wb.swing'>",
+					"  <classLoader-library bundle='" + testBundle.getId() + "' jar='myClasses.jar'/>",
+					"  <classLoader-library bundle='" + testBundle.getId() + "' jar='myClasses2.jar'/>",
+			"</toolkit>"});
+			testBundle.install();
+			try {
+				parseContainer(
+						"public class Test extends JFrame {",
+						"  public Test() {",
+						"      // filler",
+						"  }",
+						"}");
+				// ClassForBundle & ClassForBundle2 are visible in Swing ClassLoader
+				m_lastLoader.loadClass(className);
+				m_lastLoader.loadClass(className2);
+			} finally {
+				testBundle.uninstall();
+			}
+		} finally {
+			testBundle.dispose();
+		}
+	}
 
-  /**
-   * Test for using <code>classLoader-library</code> to contribute two JAR's wrapped in jar-bundle.
-   */
-  public void test_useClassLoaderLibrary_twoDependentJars_packedBundle() throws Exception {
-    TestBundle testBundle = new TestBundle();
-    try {
-      String className = ClassForBundle.class.getName();
-      String className2 = ClassForBundle2.class.getName();
-      testBundle.addJar("myClasses.jar").addClass(ClassForBundle.class).close();
-      testBundle.addJar("myClasses2.jar").addClass(ClassForBundle2.class).close();
-      testBundle.addExtension("org.eclipse.wb.core.toolkits", new String[]{
-          "<toolkit id='org.eclipse.wb.swing'>",
-          "  <classLoader-library bundle='" + testBundle.getId() + "' jar='myClasses.jar'/>",
-          "  <classLoader-library bundle='" + testBundle.getId() + "' jar='myClasses2.jar'/>",
-          "</toolkit>"});
-      testBundle.install(true);
-      try {
-        parseContainer(
-            "public class Test extends JFrame {",
-            "  public Test() {",
-            "      // filler",
-            "  }",
-            "}");
-        // ClassForBundle & ClassForBundle2 are visible in Swing ClassLoader
-        m_lastLoader.loadClass(className);
-        m_lastLoader.loadClass(className2);
-      } finally {
-        testBundle.uninstall();
-      }
-    } finally {
-      testBundle.dispose();
-    }
-  }
+	/**
+	 * Test for using <code>classLoader-library</code> to contribute two JAR's wrapped in jar-bundle.
+	 */
+	public void test_useClassLoaderLibrary_twoDependentJars_packedBundle() throws Exception {
+		TestBundle testBundle = new TestBundle();
+		try {
+			String className = ClassForBundle.class.getName();
+			String className2 = ClassForBundle2.class.getName();
+			testBundle.addJar("myClasses.jar").addClass(ClassForBundle.class).close();
+			testBundle.addJar("myClasses2.jar").addClass(ClassForBundle2.class).close();
+			testBundle.addExtension("org.eclipse.wb.core.toolkits", new String[]{
+					"<toolkit id='org.eclipse.wb.swing'>",
+					"  <classLoader-library bundle='" + testBundle.getId() + "' jar='myClasses.jar'/>",
+					"  <classLoader-library bundle='" + testBundle.getId() + "' jar='myClasses2.jar'/>",
+			"</toolkit>"});
+			testBundle.install(true);
+			try {
+				parseContainer(
+						"public class Test extends JFrame {",
+						"  public Test() {",
+						"      // filler",
+						"  }",
+						"}");
+				// ClassForBundle & ClassForBundle2 are visible in Swing ClassLoader
+				m_lastLoader.loadClass(className);
+				m_lastLoader.loadClass(className2);
+			} finally {
+				testBundle.uninstall();
+			}
+		} finally {
+			testBundle.dispose();
+		}
+	}
 
-  private static boolean hasToolkitElementWith(String attribute) {
-    List<IConfigurationElement> toolkitElements =
-        DescriptionHelper.getToolkitElements("org.eclipse.wb.swing");
-    for (IConfigurationElement toolkitElement : toolkitElements) {
-      if (toolkitElement.getAttribute(attribute) != null) {
-        return true;
-      }
-    }
-    return false;
-  }
+	private static boolean hasToolkitElementWith(String attribute) {
+		List<IConfigurationElement> toolkitElements =
+				DescriptionHelper.getToolkitElements("org.eclipse.wb.swing");
+		for (IConfigurationElement toolkitElement : toolkitElements) {
+			if (toolkitElement.getAttribute(attribute) != null) {
+				return true;
+			}
+		}
+		return false;
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // ClassForBundle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * We use this class to put it into new {@link Bundle}.
-   */
-  public static class ClassForBundle {
-  }
-  /**
-   * We use this class to check referencing other classes, from separate JAR's.
-   */
-  public static class ClassForBundle2 extends ClassForBundle {
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// ClassForBundle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * We use this class to put it into new {@link Bundle}.
+	 */
+	public static class ClassForBundle {
+	}
+	/**
+	 * We use this class to check referencing other classes, from separate JAR's.
+	 */
+	public static class ClassForBundle2 extends ClassForBundle {
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // wbp-meta/ConfigureClassLoader.mvel
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Sometimes users want to initialize environment, configure static objects.
-   */
-  public void test_ConfigureClassLoader() throws Exception {
-    setFileContentSrc(
-        "test/MyObject.java",
-        getSource(
-            "package test;",
-            "public class MyObject {",
-            "  public static int m_value = 0;",
-            "  public static void setValue(int value) {",
-            "    m_value = value;",
-            "  }",
-            "}"));
-    setFileContent("wbp-meta/ConfigureClassLoader.mvel", "test.MyObject.setValue(123);");
-    waitForAutoBuild();
-    //
-    parseContainer(
-        "public class Test extends JFrame {",
-        "  public Test() {",
-        "      // filler",
-        "  }",
-        "}");
-    assertNoErrors(m_lastParseInfo);
-    // check that "MyObject.m_value" was initialized to "123"
-    Class<?> myObjectClass = m_lastLoader.loadClass("test.MyObject");
-    assertEquals(123, ReflectionUtils.getFieldInt(myObjectClass, "m_value"));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// wbp-meta/ConfigureClassLoader.mvel
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Sometimes users want to initialize environment, configure static objects.
+	 */
+	public void test_ConfigureClassLoader() throws Exception {
+		setFileContentSrc(
+				"test/MyObject.java",
+				getSource(
+						"package test;",
+						"public class MyObject {",
+						"  public static int m_value = 0;",
+						"  public static void setValue(int value) {",
+						"    m_value = value;",
+						"  }",
+						"}"));
+		setFileContent("wbp-meta/ConfigureClassLoader.mvel", "test.MyObject.setValue(123);");
+		waitForAutoBuild();
+		//
+		parseContainer(
+				"public class Test extends JFrame {",
+				"  public Test() {",
+				"      // filler",
+				"  }",
+				"}");
+		assertNoErrors(m_lastParseInfo);
+		// check that "MyObject.m_value" was initialized to "123"
+		Class<?> myObjectClass = m_lastLoader.loadClass("test.MyObject");
+		assertEquals(123, ReflectionUtils.getFieldInt(myObjectClass, "m_value"));
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // getPackage()
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * There was bug that our {@link ClassLoader}s did not provide {@link Package}s.
-   */
-  public void test_getPackage() throws Exception {
-    setFileContentSrc(
-        "test/MyPanel.java",
-        getTestSource(
-            "public class MyPanel extends JPanel {",
-            "  private String bundle = getClass().getPackage().getName();",
-            "}"));
-    waitForAutoBuild();
-    //
-    ContainerInfo panel =
-        parseJavaInfo(
-            "public class Test extends MyPanel {",
-            "  public Test() {",
-            "      // filler",
-            "  }",
-            "}");
-    panel.refresh();
-    assertEquals("test", ReflectionUtils.getFieldString(panel.getObject(), "bundle"));
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// getPackage()
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * There was bug that our {@link ClassLoader}s did not provide {@link Package}s.
+	 */
+	public void test_getPackage() throws Exception {
+		setFileContentSrc(
+				"test/MyPanel.java",
+				getTestSource(
+						"public class MyPanel extends JPanel {",
+						"  private String bundle = getClass().getPackage().getName();",
+						"}"));
+		waitForAutoBuild();
+		//
+		ContainerInfo panel =
+				parseJavaInfo(
+						"public class Test extends MyPanel {",
+						"  public Test() {",
+						"      // filler",
+						"  }",
+						"}");
+		panel.refresh();
+		assertEquals("test", ReflectionUtils.getFieldString(panel.getObject(), "bundle"));
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/model/DefaultJavaInfoPresentationTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/model/DefaultJavaInfoPresentationTest.java
index 069031363..472235d16 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/model/DefaultJavaInfoPresentationTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/model/DefaultJavaInfoPresentationTest.java
@@ -26,109 +26,109 @@
  * @author scheglov_ke
  */
 public class DefaultJavaInfoPresentationTest extends SwingModelTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for "normal" component.
-   */
-  public void test_normalComponent() throws Exception {
-    ContainerInfo panel =
-        parseContainer(
-            "public class Test extends JPanel {",
-            "  public Test() {",
-            "    JButton button = new JButton();",
-            "    add(button);",
-            "  }",
-            "}");
-    ComponentInfo button = panel.getChildrenComponents().get(0);
-    // check "button" presentation, icon is from ComponentDescription
-    IObjectPresentation presentation = button.getPresentation();
-    assertInstanceOf(DefaultJavaInfoPresentation.class, presentation);
-    assertSame(button.getDescription().getIcon(), presentation.getIcon());
-    assertEquals("button", presentation.getText());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for "normal" component.
+	 */
+	public void test_normalComponent() throws Exception {
+		ContainerInfo panel =
+				parseContainer(
+						"public class Test extends JPanel {",
+						"  public Test() {",
+						"    JButton button = new JButton();",
+						"    add(button);",
+						"  }",
+						"}");
+		ComponentInfo button = panel.getChildrenComponents().get(0);
+		// check "button" presentation, icon is from ComponentDescription
+		IObjectPresentation presentation = button.getPresentation();
+		assertInstanceOf(DefaultJavaInfoPresentation.class, presentation);
+		assertSame(button.getDescription().getIcon(), presentation.getIcon());
+		assertEquals("button", presentation.getText());
+	}
 
-  /**
-   * Test for component, created using static factory, with icon.
-   */
-  public void test_factoryComponent() throws Exception {
-    // prepare factory
-    {
-      setFileContentSrc(
-          "test/StaticFactory.java",
-          getTestSource(
-              "public final class StaticFactory {",
-              "  public static JButton createButton() {",
-              "    return new JButton();",
-              "  }",
-              "}"));
-      // create icon for "createButton()"
-      {
-        IFile iconFile = getFileSrc("test", "StaticFactory.createButton__.png");
-        iconFile.create(Activator.getFile("icons/test.png"), true, null);
-      }
-      // build
-      waitForAutoBuild();
-    }
-    // parse
-    ContainerInfo panel =
-        parseContainer(
-            "public class Test extends JPanel {",
-            "  public Test() {",
-            "    JButton button = StaticFactory.createButton();",
-            "    add(button);",
-            "  }",
-            "}");
-    ComponentInfo button = panel.getChildrenComponents().get(0);
-    // check "button" presentation, icon is from FactoryMethodDescription
-    StaticFactoryCreationSupport creationSupport =
-        (StaticFactoryCreationSupport) button.getCreationSupport();
-    IObjectPresentation presentation = button.getPresentation();
-    assertSame(creationSupport.getDescription().getIcon(), presentation.getIcon());
-    assertEquals("button", presentation.getText());
-  }
+	/**
+	 * Test for component, created using static factory, with icon.
+	 */
+	public void test_factoryComponent() throws Exception {
+		// prepare factory
+		{
+			setFileContentSrc(
+					"test/StaticFactory.java",
+					getTestSource(
+							"public final class StaticFactory {",
+							"  public static JButton createButton() {",
+							"    return new JButton();",
+							"  }",
+							"}"));
+			// create icon for "createButton()"
+			{
+				IFile iconFile = getFileSrc("test", "StaticFactory.createButton__.png");
+				iconFile.create(Activator.getFile("icons/test.png"), true, null);
+			}
+			// build
+			waitForAutoBuild();
+		}
+		// parse
+		ContainerInfo panel =
+				parseContainer(
+						"public class Test extends JPanel {",
+						"  public Test() {",
+						"    JButton button = StaticFactory.createButton();",
+						"    add(button);",
+						"  }",
+						"}");
+		ComponentInfo button = panel.getChildrenComponents().get(0);
+		// check "button" presentation, icon is from FactoryMethodDescription
+		StaticFactoryCreationSupport creationSupport =
+				(StaticFactoryCreationSupport) button.getCreationSupport();
+		IObjectPresentation presentation = button.getPresentation();
+		assertSame(creationSupport.getDescription().getIcon(), presentation.getIcon());
+		assertEquals("button", presentation.getText());
+	}
 
-  /**
-   * Test for component, created using static factory, without icon.
-   */
-  public void test_factoryComponent_noIcon() throws Exception {
-    do_projectDispose();
-    do_projectCreate();
-    // prepare factory
-    {
-      setFileContentSrc(
-          "test/StaticFactory.java",
-          getTestSource(
-              "public final class StaticFactory {",
-              "  public static JButton createButton() {",
-              "    return new JButton();",
-              "  }",
-              "}"));
-      // build
-      waitForAutoBuild();
-    }
-    // parse
-    ContainerInfo panel =
-        parseContainer(
-            "public class Test extends JPanel {",
-            "  public Test() {",
-            "    JButton button = StaticFactory.createButton();",
-            "    add(button);",
-            "  }",
-            "}");
-    ComponentInfo button = panel.getChildrenComponents().get(0);
-    // no icon in FactoryMethodDescription...
-    {
-      StaticFactoryCreationSupport creationSupport =
-          (StaticFactoryCreationSupport) button.getCreationSupport();
-      assertNull(creationSupport.getDescription().getIcon());
-    }
-    // ...so use from ComponentDescription
-    IObjectPresentation presentation = button.getPresentation();
-    assertSame(button.getDescription().getIcon(), presentation.getIcon());
-    assertEquals("button", presentation.getText());
-  }
+	/**
+	 * Test for component, created using static factory, without icon.
+	 */
+	public void test_factoryComponent_noIcon() throws Exception {
+		do_projectDispose();
+		do_projectCreate();
+		// prepare factory
+		{
+			setFileContentSrc(
+					"test/StaticFactory.java",
+					getTestSource(
+							"public final class StaticFactory {",
+							"  public static JButton createButton() {",
+							"    return new JButton();",
+							"  }",
+							"}"));
+			// build
+			waitForAutoBuild();
+		}
+		// parse
+		ContainerInfo panel =
+				parseContainer(
+						"public class Test extends JPanel {",
+						"  public Test() {",
+						"    JButton button = StaticFactory.createButton();",
+						"    add(button);",
+						"  }",
+						"}");
+		ComponentInfo button = panel.getChildrenComponents().get(0);
+		// no icon in FactoryMethodDescription...
+		{
+			StaticFactoryCreationSupport creationSupport =
+					(StaticFactoryCreationSupport) button.getCreationSupport();
+			assertNull(creationSupport.getDescription().getIcon());
+		}
+		// ...so use from ComponentDescription
+		IObjectPresentation presentation = button.getPresentation();
+		assertSame(button.getDescription().getIcon(), presentation.getIcon());
+		assertEquals("button", presentation.getText());
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/model/DefaultObjectPresentationTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/model/DefaultObjectPresentationTest.java
index 89a5286ee..f51201217 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/model/DefaultObjectPresentationTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/model/DefaultObjectPresentationTest.java
@@ -29,117 +29,117 @@
  * @author scheglov_ke
  */
 public class DefaultObjectPresentationTest extends DesignerTestCase {
-  /**
-   * Test for {@link IObjectPresentation#getIcon()}.
-   */
-  public void test_getIcon() throws Exception {
-    ObjectInfo parent = new TestObjectInfo();
-    assertNull(parent.getPresentation().getIcon());
-  }
+	/**
+	 * Test for {@link IObjectPresentation#getIcon()}.
+	 */
+	public void test_getIcon() throws Exception {
+		ObjectInfo parent = new TestObjectInfo();
+		assertNull(parent.getPresentation().getIcon());
+	}
 
-  /**
-   * Test for {@link IObjectPresentation#getChildrenTree()}.
-   */
-  public void test_getChildrenTree() throws Exception {
-    ObjectInfo parent = new TestObjectInfo();
-    ObjectInfo child_1 = new TestObjectInfo("1");
-    final ObjectInfo child_2 = new TestObjectInfo("2");
-    ObjectInfo child_3 = new TestObjectInfo("3");
-    parent.addChild(child_1);
-    parent.addChild(child_2);
-    parent.addChild(child_3);
-    // filter out "child_2" from "tree children"
-    parent.addBroadcastListener(new ObjectInfoChildTree() {
-      @Override
-      public void invoke(ObjectInfo object, boolean[] visible) throws Exception {
-        if (object == child_2) {
-          visible[0] = false;
-        }
-      }
-    });
-    // check "tree children"
-    List<ObjectInfo> children = parent.getPresentation().getChildrenTree();
-    assertEquals(2, children.size());
-    assertSame(child_1, children.get(0));
-    assertSame(child_3, children.get(1));
-  }
+	/**
+	 * Test for {@link IObjectPresentation#getChildrenTree()}.
+	 */
+	public void test_getChildrenTree() throws Exception {
+		ObjectInfo parent = new TestObjectInfo();
+		ObjectInfo child_1 = new TestObjectInfo("1");
+		final ObjectInfo child_2 = new TestObjectInfo("2");
+		ObjectInfo child_3 = new TestObjectInfo("3");
+		parent.addChild(child_1);
+		parent.addChild(child_2);
+		parent.addChild(child_3);
+		// filter out "child_2" from "tree children"
+		parent.addBroadcastListener(new ObjectInfoChildTree() {
+			@Override
+			public void invoke(ObjectInfo object, boolean[] visible) throws Exception {
+				if (object == child_2) {
+					visible[0] = false;
+				}
+			}
+		});
+		// check "tree children"
+		List<ObjectInfo> children = parent.getPresentation().getChildrenTree();
+		assertEquals(2, children.size());
+		assertSame(child_1, children.get(0));
+		assertSame(child_3, children.get(1));
+	}
 
-  /**
-   * Test for {@link IObjectPresentation#getChildrenTree()}.
-   * <p>
-   * Using {@link ObjectInfoChildrenTree}.
-   */
-  public void test_getChildrenTree_childrenBroadcast() throws Exception {
-    ObjectInfo parent = new TestObjectInfo();
-    final ObjectInfo child_1 = new TestObjectInfo("1");
-    final ObjectInfo child_2 = new TestObjectInfo("2");
-    final ObjectInfo child_3 = new TestObjectInfo("3");
-    parent.addChild(child_1);
-    parent.addChild(child_2);
-    parent.addChild(child_3);
-    // move "child_1" to the end
-    parent.addBroadcastListener(new ObjectInfoChildrenTree() {
-      @Override
-      public void invoke(ObjectInfo p, List<ObjectInfo> children) throws Exception {
-        children.remove(child_1);
-        children.add(child_1);
-      }
-    });
-    // check "tree children"
-    List<ObjectInfo> children = parent.getPresentation().getChildrenTree();
-    assertThat(children).containsExactly(child_2, child_3, child_1);
-  }
+	/**
+	 * Test for {@link IObjectPresentation#getChildrenTree()}.
+	 * <p>
+	 * Using {@link ObjectInfoChildrenTree}.
+	 */
+	public void test_getChildrenTree_childrenBroadcast() throws Exception {
+		ObjectInfo parent = new TestObjectInfo();
+		final ObjectInfo child_1 = new TestObjectInfo("1");
+		final ObjectInfo child_2 = new TestObjectInfo("2");
+		final ObjectInfo child_3 = new TestObjectInfo("3");
+		parent.addChild(child_1);
+		parent.addChild(child_2);
+		parent.addChild(child_3);
+		// move "child_1" to the end
+		parent.addBroadcastListener(new ObjectInfoChildrenTree() {
+			@Override
+			public void invoke(ObjectInfo p, List<ObjectInfo> children) throws Exception {
+				children.remove(child_1);
+				children.add(child_1);
+			}
+		});
+		// check "tree children"
+		List<ObjectInfo> children = parent.getPresentation().getChildrenTree();
+		assertThat(children).containsExactly(child_2, child_3, child_1);
+	}
 
-  /**
-   * Test for {@link IObjectPresentation#getChildrenGraphical()}.
-   */
-  public void test_getChildrenGraphical() throws Exception {
-    ObjectInfo parent = new TestObjectInfo();
-    ObjectInfo child_1 = new TestObjectInfo("1");
-    final ObjectInfo child_2 = new TestObjectInfo("2");
-    ObjectInfo child_3 = new TestObjectInfo("3");
-    parent.addChild(child_1);
-    parent.addChild(child_2);
-    parent.addChild(child_3);
-    // filter out "child_2" from "graphical children"
-    parent.addBroadcastListener(new ObjectInfoChildGraphical() {
-      @Override
-      public void invoke(ObjectInfo object, boolean[] visible) throws Exception {
-        if (object == child_2) {
-          visible[0] = false;
-        }
-      }
-    });
-    // check "graphical children"
-    List<ObjectInfo> children = parent.getPresentation().getChildrenGraphical();
-    assertEquals(2, children.size());
-    assertSame(child_1, children.get(0));
-    assertSame(child_3, children.get(1));
-  }
+	/**
+	 * Test for {@link IObjectPresentation#getChildrenGraphical()}.
+	 */
+	public void test_getChildrenGraphical() throws Exception {
+		ObjectInfo parent = new TestObjectInfo();
+		ObjectInfo child_1 = new TestObjectInfo("1");
+		final ObjectInfo child_2 = new TestObjectInfo("2");
+		ObjectInfo child_3 = new TestObjectInfo("3");
+		parent.addChild(child_1);
+		parent.addChild(child_2);
+		parent.addChild(child_3);
+		// filter out "child_2" from "graphical children"
+		parent.addBroadcastListener(new ObjectInfoChildGraphical() {
+			@Override
+			public void invoke(ObjectInfo object, boolean[] visible) throws Exception {
+				if (object == child_2) {
+					visible[0] = false;
+				}
+			}
+		});
+		// check "graphical children"
+		List<ObjectInfo> children = parent.getPresentation().getChildrenGraphical();
+		assertEquals(2, children.size());
+		assertSame(child_1, children.get(0));
+		assertSame(child_3, children.get(1));
+	}
 
-  /**
-   * Test for {@link IObjectPresentation#getChildrenGraphical()}.
-   * <p>
-   * Using {@link ObjectInfoChildrenGraphical}.
-   */
-  public void test_getChildrenGraphical_childrenBroadcast() throws Exception {
-    ObjectInfo parent = new TestObjectInfo();
-    final ObjectInfo child_1 = new TestObjectInfo("1");
-    final ObjectInfo child_2 = new TestObjectInfo("2");
-    final ObjectInfo child_3 = new TestObjectInfo("3");
-    parent.addChild(child_1);
-    parent.addChild(child_2);
-    parent.addChild(child_3);
-    // move "child_1" to the end
-    parent.addBroadcastListener(new ObjectInfoChildrenGraphical() {
-      @Override
-      public void invoke(List<ObjectInfo> children) throws Exception {
-        children.remove(child_1);
-        children.add(child_1);
-      }
-    });
-    // check "graphical children"
-    List<ObjectInfo> children = parent.getPresentation().getChildrenGraphical();
-    assertThat(children).containsExactly(child_2, child_3, child_1);
-  }
+	/**
+	 * Test for {@link IObjectPresentation#getChildrenGraphical()}.
+	 * <p>
+	 * Using {@link ObjectInfoChildrenGraphical}.
+	 */
+	public void test_getChildrenGraphical_childrenBroadcast() throws Exception {
+		ObjectInfo parent = new TestObjectInfo();
+		final ObjectInfo child_1 = new TestObjectInfo("1");
+		final ObjectInfo child_2 = new TestObjectInfo("2");
+		final ObjectInfo child_3 = new TestObjectInfo("3");
+		parent.addChild(child_1);
+		parent.addChild(child_2);
+		parent.addChild(child_3);
+		// move "child_1" to the end
+		parent.addBroadcastListener(new ObjectInfoChildrenGraphical() {
+			@Override
+			public void invoke(List<ObjectInfo> children) throws Exception {
+				children.remove(child_1);
+				children.add(child_1);
+			}
+		});
+		// check "graphical children"
+		List<ObjectInfo> children = parent.getPresentation().getChildrenGraphical();
+		assertThat(children).containsExactly(child_2, child_3, child_1);
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/model/EllipsisObjectInfoTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/model/EllipsisObjectInfoTest.java
index df005279f..43409ea61 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/model/EllipsisObjectInfoTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/model/EllipsisObjectInfoTest.java
@@ -40,493 +40,493 @@
  * @author sablin_aa
  */
 public class EllipsisObjectInfoTest extends SwingModelTest {
-  private ContainerInfo myPanel;
-  private EllipsisObjectInfo arrayInfo;
-  private ComponentInfo localButton;
-  private ComponentInfo emptyButton;
+	private ContainerInfo myPanel;
+	private EllipsisObjectInfo arrayInfo;
+	private ComponentInfo localButton;
+	private ComponentInfo emptyButton;
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Life cycle
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  @Override
-  protected void tearDown() throws Exception {
-    // clear fields
-    for (Field field : getClass().getDeclaredFields()) {
-      if (field.getName().indexOf('$') == -1 && Object.class.isAssignableFrom(field.getType())) {
-        field.setAccessible(true);
-        field.set(this, null);
-      }
-    }
-    super.tearDown();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Life cycle
+	//
+	////////////////////////////////////////////////////////////////////////////
+	@Override
+	protected void tearDown() throws Exception {
+		// clear fields
+		for (Field field : getClass().getDeclaredFields()) {
+			if (field.getName().indexOf('$') == -1 && Object.class.isAssignableFrom(field.getType())) {
+				field.setAccessible(true);
+				field.set(this, null);
+			}
+		}
+		super.tearDown();
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
 
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Tests
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_parse() throws Exception {
-    getParsedContainer();
-    // ArrayObjectInfo
-    {
-      assertSame(myPanel, arrayInfo.getParent());
-      assertThat(arrayInfo.getChildren()).isEmpty();
-      // check tuning
-      assertTrue(arrayInfo.isRemoveOnEmpty());
-      assertTrue(!arrayInfo.isHideInTree());
-      // check item type
-      assertThat(arrayInfo.getItemClass()).isEqualTo(
-          ReflectionUtils.getClassByName(
-              EditorState.get(m_lastEditor).getEditorLoader(),
-              "javax.swing.JButton"));
-    }
-    // button with {@link LocalVariableSupport}
-    {
-      checkArrayItem(localButton);
-      assertInstanceOf(LocalVariableSupport.class, localButton.getVariableSupport());
-    }
-    // button with {@link EmptyVariableSupport}
-    {
-      checkArrayItem(emptyButton);
-      assertInstanceOf(EmptyVariableSupport.class, emptyButton.getVariableSupport());
-    }
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Tests
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_parse() throws Exception {
+		getParsedContainer();
+		// ArrayObjectInfo
+		{
+			assertSame(myPanel, arrayInfo.getParent());
+			assertThat(arrayInfo.getChildren()).isEmpty();
+			// check tuning
+			assertTrue(arrayInfo.isRemoveOnEmpty());
+			assertTrue(!arrayInfo.isHideInTree());
+			// check item type
+			assertThat(arrayInfo.getItemClass()).isEqualTo(
+					ReflectionUtils.getClassByName(
+							EditorState.get(m_lastEditor).getEditorLoader(),
+							"javax.swing.JButton"));
+		}
+		// button with {@link LocalVariableSupport}
+		{
+			checkArrayItem(localButton);
+			assertInstanceOf(LocalVariableSupport.class, localButton.getVariableSupport());
+		}
+		// button with {@link EmptyVariableSupport}
+		{
+			checkArrayItem(emptyButton);
+			assertInstanceOf(EmptyVariableSupport.class, emptyButton.getVariableSupport());
+		}
+	}
 
-  public void test_Presentation() throws Exception {
-    getParsedContainer();
-    IObjectPresentation presentation = arrayInfo.getPresentation();
-    // icon/text
-    assertNotNull(presentation.getIcon());
-    assertEquals("addButtons(array)", presentation.getText());
-    // tree children
-    {
-      List<ObjectInfo> childrenTree = presentation.getChildrenTree();
-      assertThat(childrenTree).hasSize(2);
-      assertThat(childrenTree).isEqualTo(myPanel.getChildrenComponents());
-      assertThat(childrenTree).containsOnly(localButton, emptyButton);
-    }
-    // graphical children
-    {
-      List<ObjectInfo> childrenGraphical = presentation.getChildrenGraphical();
-      assertThat(childrenGraphical).isEmpty();
-    }
-    // when we ask tree children for MyPanel, ArrayObjectInof does not allow to see buttons
-    assertThat(myPanel.getPresentation().getChildrenTree()).containsOnly(arrayInfo);
-  }
+	public void test_Presentation() throws Exception {
+		getParsedContainer();
+		IObjectPresentation presentation = arrayInfo.getPresentation();
+		// icon/text
+		assertNotNull(presentation.getIcon());
+		assertEquals("addButtons(array)", presentation.getText());
+		// tree children
+		{
+			List<ObjectInfo> childrenTree = presentation.getChildrenTree();
+			assertThat(childrenTree).hasSize(2);
+			assertThat(childrenTree).isEqualTo(myPanel.getChildrenComponents());
+			assertThat(childrenTree).containsOnly(localButton, emptyButton);
+		}
+		// graphical children
+		{
+			List<ObjectInfo> childrenGraphical = presentation.getChildrenGraphical();
+			assertThat(childrenGraphical).isEmpty();
+		}
+		// when we ask tree children for MyPanel, ArrayObjectInof does not allow to see buttons
+		assertThat(myPanel.getPresentation().getChildrenTree()).containsOnly(arrayInfo);
+	}
 
-  public void test_deleteItem_withLocal() throws Exception {
-    getParsedContainer();
-    // initially "localButton" is in "array"
-    assertThat(arrayInfo.getItems()).hasSize(2).contains(localButton);
-    // do delete
-    assertTrue(localButton.canDelete());
-    localButton.delete();
-    // check source
-    assertEditor(
-        "// filler filler filler",
-        "public class Test extends MyPanel {",
-        "  public Test() {",
-        "    addButtons( new JButton() );",
-        "  }",
-        "}");
-    // no "localButton" in "array"
-    assertThat(arrayInfo.getItems()).containsOnly(emptyButton);
-    assertThat(myPanel.getChildren()).doesNotContain(localButton);
-  }
+	public void test_deleteItem_withLocal() throws Exception {
+		getParsedContainer();
+		// initially "localButton" is in "array"
+		assertThat(arrayInfo.getItems()).hasSize(2).contains(localButton);
+		// do delete
+		assertTrue(localButton.canDelete());
+		localButton.delete();
+		// check source
+		assertEditor(
+				"// filler filler filler",
+				"public class Test extends MyPanel {",
+				"  public Test() {",
+				"    addButtons( new JButton() );",
+				"  }",
+				"}");
+		// no "localButton" in "array"
+		assertThat(arrayInfo.getItems()).containsOnly(emptyButton);
+		assertThat(myPanel.getChildren()).doesNotContain(localButton);
+	}
 
-  public void test_deleteItem_withEmpty() throws Exception {
-    getParsedContainer();
-    // initially "emptyButton" is in "array"
-    assertThat(arrayInfo.getItems()).hasSize(2).contains(emptyButton);
-    // do delete
-    assertTrue(emptyButton.canDelete());
-    emptyButton.delete();
-    // check source
-    assertEditor(
-        "// filler filler filler",
-        "public class Test extends MyPanel {",
-        "  public Test() {",
-        "    JButton button = new JButton();",
-        "    addButtons( button );",
-        "  }",
-        "}");
-    // no "emptyButton" in "array"
-    assertThat(arrayInfo.getItems()).containsOnly(localButton);
-    assertThat(myPanel.getChildren()).doesNotContain(emptyButton);
-  }
+	public void test_deleteItem_withEmpty() throws Exception {
+		getParsedContainer();
+		// initially "emptyButton" is in "array"
+		assertThat(arrayInfo.getItems()).hasSize(2).contains(emptyButton);
+		// do delete
+		assertTrue(emptyButton.canDelete());
+		emptyButton.delete();
+		// check source
+		assertEditor(
+				"// filler filler filler",
+				"public class Test extends MyPanel {",
+				"  public Test() {",
+				"    JButton button = new JButton();",
+				"    addButtons( button );",
+				"  }",
+				"}");
+		// no "emptyButton" in "array"
+		assertThat(arrayInfo.getItems()).containsOnly(localButton);
+		assertThat(myPanel.getChildren()).doesNotContain(emptyButton);
+	}
 
-  public void test_deleteAllItems() throws Exception {
-    getParsedContainer();
-    // delete all buttons
-    localButton.delete();
-    emptyButton.delete();
-    // check source
-    assertEditor(
-        "// filler filler filler",
-        "public class Test extends MyPanel {",
-        "  public Test() {",
-        "  }",
-        "}");
-    assertThat(myPanel.getChildren()).doesNotContain(arrayInfo, localButton, emptyButton);
-  }
+	public void test_deleteAllItems() throws Exception {
+		getParsedContainer();
+		// delete all buttons
+		localButton.delete();
+		emptyButton.delete();
+		// check source
+		assertEditor(
+				"// filler filler filler",
+				"public class Test extends MyPanel {",
+				"  public Test() {",
+				"  }",
+				"}");
+		assertThat(myPanel.getChildren()).doesNotContain(arrayInfo, localButton, emptyButton);
+	}
 
-  public void test_deleteAllItems_onEmptySource() throws Exception {
-    getParsedContainer();
-    arrayInfo.setRemoveOnEmpty(false);
-    arrayInfo.setOnEmptySource("null");
-    // delete all buttons
-    localButton.delete();
-    emptyButton.delete();
-    // check source
-    assertEditor(
-        "// filler filler filler",
-        "public class Test extends MyPanel {",
-        "  public Test() {",
-        "    null;",
-        "  }",
-        "}");
-    assertThat(myPanel.getChildren()).doesNotContain(localButton, emptyButton);
-    assertThat(myPanel.getChildren()).contains(arrayInfo);
-  }
+	public void test_deleteAllItems_onEmptySource() throws Exception {
+		getParsedContainer();
+		arrayInfo.setRemoveOnEmpty(false);
+		arrayInfo.setOnEmptySource("null");
+		// delete all buttons
+		localButton.delete();
+		emptyButton.delete();
+		// check source
+		assertEditor(
+				"// filler filler filler",
+				"public class Test extends MyPanel {",
+				"  public Test() {",
+				"    null;",
+				"  }",
+				"}");
+		assertThat(myPanel.getChildren()).doesNotContain(localButton, emptyButton);
+		assertThat(myPanel.getChildren()).contains(arrayInfo);
+	}
 
-  public void test_deleteArrayObjectInfo() throws Exception {
-    getParsedContainer();
-    // do delete
-    assertTrue(arrayInfo.canDelete());
-    arrayInfo.delete();
-    // check source
-    assertEditor(
-        "// filler filler filler",
-        "public class Test extends MyPanel {",
-        "  public Test() {",
-        "  }",
-        "}");
-    assertThat(myPanel.getChildren()).doesNotContain(arrayInfo, localButton, emptyButton);
-  }
+	public void test_deleteArrayObjectInfo() throws Exception {
+		getParsedContainer();
+		// do delete
+		assertTrue(arrayInfo.canDelete());
+		arrayInfo.delete();
+		// check source
+		assertEditor(
+				"// filler filler filler",
+				"public class Test extends MyPanel {",
+				"  public Test() {",
+				"  }",
+				"}");
+		assertThat(myPanel.getChildren()).doesNotContain(arrayInfo, localButton, emptyButton);
+	}
 
-  public void test_addItem() throws Exception {
-    getParsedContainer();
-    // check exists
-    assertThat(localButton).isNotNull();
-    assertThat(emptyButton).isNotNull();
-    // add new button
-    JavaInfo newButton = createJavaInfo("javax.swing.JButton");
-    arrayInfo.command_CREATE(newButton, null);
-    // check source
-    assertEditor(
-        "// filler filler filler",
-        "public class Test extends MyPanel {",
-        "  public Test() {",
-        "    JButton button = new JButton();",
-        "    addButtons( button, new JButton(), new JButton('New button') );",
-        "  }",
-        "}");
-    assertThat(myPanel.getChildren(EllipsisObjectInfo.class)).containsOnly(arrayInfo);
-    Assertions.<JavaInfo>assertThat(myPanel.getChildrenComponents()).containsOnly(localButton, emptyButton, newButton);
-    // check objects
-    myPanel.refresh();
-    assertThat(localButton.getObject()).isNotNull();
-    assertThat(emptyButton.getObject()).isNotNull();
-    assertThat(newButton.getObject()).isNotNull();
-  }
+	public void test_addItem() throws Exception {
+		getParsedContainer();
+		// check exists
+		assertThat(localButton).isNotNull();
+		assertThat(emptyButton).isNotNull();
+		// add new button
+		JavaInfo newButton = createJavaInfo("javax.swing.JButton");
+		arrayInfo.command_CREATE(newButton, null);
+		// check source
+		assertEditor(
+				"// filler filler filler",
+				"public class Test extends MyPanel {",
+				"  public Test() {",
+				"    JButton button = new JButton();",
+				"    addButtons( button, new JButton(), new JButton('New button') );",
+				"  }",
+				"}");
+		assertThat(myPanel.getChildren(EllipsisObjectInfo.class)).containsOnly(arrayInfo);
+		Assertions.<JavaInfo>assertThat(myPanel.getChildrenComponents()).containsOnly(localButton, emptyButton, newButton);
+		// check objects
+		myPanel.refresh();
+		assertThat(localButton.getObject()).isNotNull();
+		assertThat(emptyButton.getObject()).isNotNull();
+		assertThat(newButton.getObject()).isNotNull();
+	}
 
-  public void test_moveItemInside() throws Exception {
-    getParsedContainer();
-    // check exists
-    assertThat(arrayInfo.getItems().indexOf(localButton)).isEqualTo(0);
-    assertThat(arrayInfo.getItems().indexOf(emptyButton)).isEqualTo(1);
-    assertThat(myPanel.getChildrenComponents().indexOf(localButton)).isLessThan(
-        myPanel.getChildrenComponents().indexOf(emptyButton));
-    // move button
-    arrayInfo.command_MOVE(emptyButton, localButton);
-    // check source
-    assertEditor(
-        "// filler filler filler",
-        "public class Test extends MyPanel {",
-        "  public Test() {",
-        "    JButton button = new JButton();",
-        "    addButtons( new JButton(), button );",
-        "  }",
-        "}");
-    assertThat(arrayInfo.getItems().indexOf(localButton)).isEqualTo(1);
-    assertThat(arrayInfo.getItems().indexOf(emptyButton)).isEqualTo(0);
-    assertThat(myPanel.getChildrenComponents().indexOf(localButton)).isGreaterThan(
-        myPanel.getChildrenComponents().indexOf(emptyButton));
-    // check objects
-    myPanel.refresh();
-    assertThat(localButton.getObject()).isNotNull();
-    assertThat(emptyButton.getObject()).isNotNull();
-  }
+	public void test_moveItemInside() throws Exception {
+		getParsedContainer();
+		// check exists
+		assertThat(arrayInfo.getItems().indexOf(localButton)).isEqualTo(0);
+		assertThat(arrayInfo.getItems().indexOf(emptyButton)).isEqualTo(1);
+		assertThat(myPanel.getChildrenComponents().indexOf(localButton)).isLessThan(
+				myPanel.getChildrenComponents().indexOf(emptyButton));
+		// move button
+		arrayInfo.command_MOVE(emptyButton, localButton);
+		// check source
+		assertEditor(
+				"// filler filler filler",
+				"public class Test extends MyPanel {",
+				"  public Test() {",
+				"    JButton button = new JButton();",
+				"    addButtons( new JButton(), button );",
+				"  }",
+				"}");
+		assertThat(arrayInfo.getItems().indexOf(localButton)).isEqualTo(1);
+		assertThat(arrayInfo.getItems().indexOf(emptyButton)).isEqualTo(0);
+		assertThat(myPanel.getChildrenComponents().indexOf(localButton)).isGreaterThan(
+				myPanel.getChildrenComponents().indexOf(emptyButton));
+		// check objects
+		myPanel.refresh();
+		assertThat(localButton.getObject()).isNotNull();
+		assertThat(emptyButton.getObject()).isNotNull();
+	}
 
-  public void test_moveItemBetween() throws Exception {
-    getParsedContainer();
-    // check exists
-    assertThat(arrayInfo.getItems().indexOf(localButton)).isEqualTo(0);
-    assertThat(arrayInfo.getItems().indexOf(emptyButton)).isEqualTo(1);
-    assertThat(myPanel.getChildrenComponents().indexOf(localButton)).isLessThan(
-        myPanel.getChildrenComponents().indexOf(emptyButton));
-    // create new invocation
-    MethodInvocation newMethodInvocation =
-        myPanel.addMethodInvocation("addButtons(javax.swing.JButton[])", "");
-    // create new array info;
-    Class<?> itemType =
-        ReflectionUtils.getClassByName(
-            EditorState.get(m_lastEditor).getEditorLoader(),
-            "javax.swing.JButton");
-    EllipsisObjectInfo newArrayInfo =
-        new EllipsisObjectInfo(m_lastEditor, "addButtonsNew", itemType, newMethodInvocation, 0);
-    myPanel.addChild(newArrayInfo);
-    // check source
-    assertEditor(
-        "// filler filler filler",
-        "public class Test extends MyPanel {",
-        "  public Test() {",
-        "    addButtons();",
-        "    JButton button = new JButton();",
-        "    addButtons( button, new JButton() );",
-        "  }",
-        "}");
-    {
-      // move local button
-      newArrayInfo.command_MOVE(localButton, null);
-      // check source
-      assertEditor(
-          "// filler filler filler",
-          "public class Test extends MyPanel {",
-          "  public Test() {",
-          "    JButton button = new JButton();",
-          "    addButtons(button);",
-          "    addButtons( new JButton() );",
-          "  }",
-          "}");
-      assertThat(arrayInfo.getItems()).containsOnly(emptyButton);
-      assertThat(newArrayInfo.getItems()).containsOnly(localButton);
-      assertThat(myPanel.getChildrenComponents()).containsOnly(localButton, emptyButton);
-      assertThat(myPanel.getPresentation().getChildrenTree()).containsOnly(arrayInfo, newArrayInfo);
-      // check objects
-      myPanel.refresh();
-      assertThat(localButton.getObject()).isNotNull();
-      assertThat(emptyButton.getObject()).isNotNull();
-    }
-    {
-      // move empty button too
-      newArrayInfo.command_MOVE(emptyButton, null);
-      // check source
-      assertEditor(
-          "// filler filler filler",
-          "public class Test extends MyPanel {",
-          "  public Test() {",
-          "    JButton button = new JButton();",
-          "    addButtons(button, new JButton());",
-          "  }",
-          "}");
-      assertThat(myPanel.getChildrenComponents()).containsOnly(localButton, emptyButton);
-      assertThat(myPanel.getPresentation().getChildrenTree()).containsOnly(newArrayInfo);
-      assertThat(newArrayInfo.getItems()).containsOnly(localButton, emptyButton);
-      // check objects
-      myPanel.refresh();
-      assertThat(localButton.getObject()).isNotNull();
-      assertThat(emptyButton.getObject()).isNotNull();
-    }
-  }
+	public void test_moveItemBetween() throws Exception {
+		getParsedContainer();
+		// check exists
+		assertThat(arrayInfo.getItems().indexOf(localButton)).isEqualTo(0);
+		assertThat(arrayInfo.getItems().indexOf(emptyButton)).isEqualTo(1);
+		assertThat(myPanel.getChildrenComponents().indexOf(localButton)).isLessThan(
+				myPanel.getChildrenComponents().indexOf(emptyButton));
+		// create new invocation
+		MethodInvocation newMethodInvocation =
+				myPanel.addMethodInvocation("addButtons(javax.swing.JButton[])", "");
+		// create new array info;
+		Class<?> itemType =
+				ReflectionUtils.getClassByName(
+						EditorState.get(m_lastEditor).getEditorLoader(),
+						"javax.swing.JButton");
+		EllipsisObjectInfo newArrayInfo =
+				new EllipsisObjectInfo(m_lastEditor, "addButtonsNew", itemType, newMethodInvocation, 0);
+		myPanel.addChild(newArrayInfo);
+		// check source
+		assertEditor(
+				"// filler filler filler",
+				"public class Test extends MyPanel {",
+				"  public Test() {",
+				"    addButtons();",
+				"    JButton button = new JButton();",
+				"    addButtons( button, new JButton() );",
+				"  }",
+				"}");
+		{
+			// move local button
+			newArrayInfo.command_MOVE(localButton, null);
+			// check source
+			assertEditor(
+					"// filler filler filler",
+					"public class Test extends MyPanel {",
+					"  public Test() {",
+					"    JButton button = new JButton();",
+					"    addButtons(button);",
+					"    addButtons( new JButton() );",
+					"  }",
+					"}");
+			assertThat(arrayInfo.getItems()).containsOnly(emptyButton);
+			assertThat(newArrayInfo.getItems()).containsOnly(localButton);
+			assertThat(myPanel.getChildrenComponents()).containsOnly(localButton, emptyButton);
+			assertThat(myPanel.getPresentation().getChildrenTree()).containsOnly(arrayInfo, newArrayInfo);
+			// check objects
+			myPanel.refresh();
+			assertThat(localButton.getObject()).isNotNull();
+			assertThat(emptyButton.getObject()).isNotNull();
+		}
+		{
+			// move empty button too
+			newArrayInfo.command_MOVE(emptyButton, null);
+			// check source
+			assertEditor(
+					"// filler filler filler",
+					"public class Test extends MyPanel {",
+					"  public Test() {",
+					"    JButton button = new JButton();",
+					"    addButtons(button, new JButton());",
+					"  }",
+					"}");
+			assertThat(myPanel.getChildrenComponents()).containsOnly(localButton, emptyButton);
+			assertThat(myPanel.getPresentation().getChildrenTree()).containsOnly(newArrayInfo);
+			assertThat(newArrayInfo.getItems()).containsOnly(localButton, emptyButton);
+			// check objects
+			myPanel.refresh();
+			assertThat(localButton.getObject()).isNotNull();
+			assertThat(emptyButton.getObject()).isNotNull();
+		}
+	}
 
-  public void test_moveItemOutside() throws Exception {
-    getParsedContainer(new String[]{
-        "public class Test extends MyPanel {",
-        "  public Test() {",
-        "    JButton button = new JButton();",
-        "    addButtons( button, new JButton() );",
-        "    {",
-        "      JButton button_1 = new JButton();",
-        "      button_1.setText('Button');",
-        "      add(button_1);",
-        "    }",
-        "  }",
-        "}"});
-    // check exists
-    assertThat(arrayInfo.getItems().indexOf(localButton)).isEqualTo(0);
-    assertThat(arrayInfo.getItems().indexOf(emptyButton)).isEqualTo(1);
-    assertThat(myPanel.getChildrenComponents().indexOf(localButton)).isLessThan(
-        myPanel.getChildrenComponents().indexOf(emptyButton));
-    // outside JButton
-    assertThat(myPanel.getChildrenComponents()).hasSize(3);
-    ComponentInfo newButton = myPanel.getChildrenComponents().get(2);
-    // move button
-    arrayInfo.command_MOVE(newButton, emptyButton);
-    {
-      // check source
-      assertEditor(
-          "public class Test extends MyPanel {",
-          "  private JButton button_1;",
-          "  public Test() {",
-          "    JButton button = new JButton();",
-          "    {",
-          "      button_1 = new JButton();",
-          "      button_1.setText('Button');",
-          "    }",
-          "    addButtons( button, button_1, new JButton() );",
-          "  }",
-          "}");
-      assertThat(arrayInfo.getItems()).containsOnly(localButton, emptyButton, newButton);
-      assertThat(myPanel.getChildrenComponents()).containsOnly(localButton, emptyButton, newButton);
-      assertThat(myPanel.getPresentation().getChildrenTree()).containsOnly(arrayInfo);
-      // check objects
-      myPanel.refresh();
-      assertThat(localButton.getObject()).isNotNull();
-      assertThat(emptyButton.getObject()).isNotNull();
-      assertThat(newButton.getObject()).isNotNull();
-    }
-    {
-      // check source on delete
-      newButton.delete();
-      assertEditor(
-          "public class Test extends MyPanel {",
-          "  public Test() {",
-          "    JButton button = new JButton();",
-          "    addButtons( button, new JButton() );",
-          "  }",
-          "}");
-      // check objects
-      myPanel.refresh();
-      assertThat(localButton.getObject()).isNotNull();
-      assertThat(emptyButton.getObject()).isNotNull();
-    }
-  }
+	public void test_moveItemOutside() throws Exception {
+		getParsedContainer(new String[]{
+				"public class Test extends MyPanel {",
+				"  public Test() {",
+				"    JButton button = new JButton();",
+				"    addButtons( button, new JButton() );",
+				"    {",
+				"      JButton button_1 = new JButton();",
+				"      button_1.setText('Button');",
+				"      add(button_1);",
+				"    }",
+				"  }",
+		"}"});
+		// check exists
+		assertThat(arrayInfo.getItems().indexOf(localButton)).isEqualTo(0);
+		assertThat(arrayInfo.getItems().indexOf(emptyButton)).isEqualTo(1);
+		assertThat(myPanel.getChildrenComponents().indexOf(localButton)).isLessThan(
+				myPanel.getChildrenComponents().indexOf(emptyButton));
+		// outside JButton
+		assertThat(myPanel.getChildrenComponents()).hasSize(3);
+		ComponentInfo newButton = myPanel.getChildrenComponents().get(2);
+		// move button
+		arrayInfo.command_MOVE(newButton, emptyButton);
+		{
+			// check source
+			assertEditor(
+					"public class Test extends MyPanel {",
+					"  private JButton button_1;",
+					"  public Test() {",
+					"    JButton button = new JButton();",
+					"    {",
+					"      button_1 = new JButton();",
+					"      button_1.setText('Button');",
+					"    }",
+					"    addButtons( button, button_1, new JButton() );",
+					"  }",
+					"}");
+			assertThat(arrayInfo.getItems()).containsOnly(localButton, emptyButton, newButton);
+			assertThat(myPanel.getChildrenComponents()).containsOnly(localButton, emptyButton, newButton);
+			assertThat(myPanel.getPresentation().getChildrenTree()).containsOnly(arrayInfo);
+			// check objects
+			myPanel.refresh();
+			assertThat(localButton.getObject()).isNotNull();
+			assertThat(emptyButton.getObject()).isNotNull();
+			assertThat(newButton.getObject()).isNotNull();
+		}
+		{
+			// check source on delete
+			newButton.delete();
+			assertEditor(
+					"public class Test extends MyPanel {",
+					"  public Test() {",
+					"    JButton button = new JButton();",
+					"    addButtons( button, new JButton() );",
+					"  }",
+					"}");
+			// check objects
+			myPanel.refresh();
+			assertThat(localButton.getObject()).isNotNull();
+			assertThat(emptyButton.getObject()).isNotNull();
+		}
+	}
 
-  public void test_moveItemOutside_inlined() throws Exception {
-    getParsedContainer(new String[]{
-        "public class Test extends MyPanel {",
-        "  public Test() {",
-        "    JButton button = new JButton();",
-        "    addButtons( button, new JButton() );",
-        "    add(new JButton('Button'));",
-        "  }",
-        "}"});
-    // check exists
-    assertThat(arrayInfo.getItems().indexOf(localButton)).isEqualTo(0);
-    assertThat(arrayInfo.getItems().indexOf(emptyButton)).isEqualTo(1);
-    assertThat(myPanel.getChildrenComponents().indexOf(localButton)).isLessThan(
-        myPanel.getChildrenComponents().indexOf(emptyButton));
-    // outside JButton
-    assertThat(myPanel.getChildrenComponents()).hasSize(3);
-    ComponentInfo newButton = myPanel.getChildrenComponents().get(2);
-    // move button
-    arrayInfo.command_MOVE(newButton, emptyButton);
-    {
-      // check source
-      assertEditor(
-          "public class Test extends MyPanel {",
-          "  public Test() {",
-          "    JButton button = new JButton();",
-          "    addButtons( button, new JButton('Button'), new JButton() );",
-          "  }",
-          "}");
-      assertThat(arrayInfo.getItems()).containsOnly(localButton, emptyButton, newButton);
-      assertThat(myPanel.getChildrenComponents()).containsOnly(localButton, emptyButton, newButton);
-      assertThat(myPanel.getPresentation().getChildrenTree()).containsOnly(arrayInfo);
-      // check objects
-      myPanel.refresh();
-      assertThat(localButton.getObject()).isNotNull();
-      assertThat(emptyButton.getObject()).isNotNull();
-      assertThat(newButton.getObject()).isNotNull();
-    }
-    {
-      // check source on delete
-      newButton.delete();
-      assertEditor(
-          "public class Test extends MyPanel {",
-          "  public Test() {",
-          "    JButton button = new JButton();",
-          "    addButtons( button, new JButton() );",
-          "  }",
-          "}");
-      // check objects
-      myPanel.refresh();
-      assertThat(localButton.getObject()).isNotNull();
-      assertThat(emptyButton.getObject()).isNotNull();
-    }
-  }
+	public void test_moveItemOutside_inlined() throws Exception {
+		getParsedContainer(new String[]{
+				"public class Test extends MyPanel {",
+				"  public Test() {",
+				"    JButton button = new JButton();",
+				"    addButtons( button, new JButton() );",
+				"    add(new JButton('Button'));",
+				"  }",
+		"}"});
+		// check exists
+		assertThat(arrayInfo.getItems().indexOf(localButton)).isEqualTo(0);
+		assertThat(arrayInfo.getItems().indexOf(emptyButton)).isEqualTo(1);
+		assertThat(myPanel.getChildrenComponents().indexOf(localButton)).isLessThan(
+				myPanel.getChildrenComponents().indexOf(emptyButton));
+		// outside JButton
+		assertThat(myPanel.getChildrenComponents()).hasSize(3);
+		ComponentInfo newButton = myPanel.getChildrenComponents().get(2);
+		// move button
+		arrayInfo.command_MOVE(newButton, emptyButton);
+		{
+			// check source
+			assertEditor(
+					"public class Test extends MyPanel {",
+					"  public Test() {",
+					"    JButton button = new JButton();",
+					"    addButtons( button, new JButton('Button'), new JButton() );",
+					"  }",
+					"}");
+			assertThat(arrayInfo.getItems()).containsOnly(localButton, emptyButton, newButton);
+			assertThat(myPanel.getChildrenComponents()).containsOnly(localButton, emptyButton, newButton);
+			assertThat(myPanel.getPresentation().getChildrenTree()).containsOnly(arrayInfo);
+			// check objects
+			myPanel.refresh();
+			assertThat(localButton.getObject()).isNotNull();
+			assertThat(emptyButton.getObject()).isNotNull();
+			assertThat(newButton.getObject()).isNotNull();
+		}
+		{
+			// check source on delete
+			newButton.delete();
+			assertEditor(
+					"public class Test extends MyPanel {",
+					"  public Test() {",
+					"    JButton button = new JButton();",
+					"    addButtons( button, new JButton() );",
+					"  }",
+					"}");
+			// check objects
+			myPanel.refresh();
+			assertThat(localButton.getObject()).isNotNull();
+			assertThat(emptyButton.getObject()).isNotNull();
+		}
+	}
 
-  public void test_moveItemOutside_inlining() throws Exception {
-    getParsedContainer();
-    // check exists
-    assertThat(arrayInfo.getItems().indexOf(localButton)).isEqualTo(0);
-    assertThat(arrayInfo.getItems().indexOf(emptyButton)).isEqualTo(1);
-    assertThat(myPanel.getChildrenComponents().indexOf(localButton)).isLessThan(
-        myPanel.getChildrenComponents().indexOf(emptyButton));
-    // add new JButton
-    ComponentInfo newButton;
-    {
-      FlowLayoutInfo flowLayout = (FlowLayoutInfo) myPanel.getLayout();
-      newButton = createComponent("javax.swing.JButton");
-      flowLayout.add(newButton, null);
-    }
-    // check source
-    assertEditor(
-        "// filler filler filler",
-        "public class Test extends MyPanel {",
-        "  public Test() {",
-        "    JButton button = new JButton();",
-        "    addButtons( button, new JButton() );",
-        "    {",
-        "      JButton button_1 = new JButton('New button');",
-        "      add(button_1);",
-        "    }",
-        "  }",
-        "}");
-    assertThat(myPanel.getPresentation().getChildrenTree()).containsOnly(arrayInfo, newButton);
-    assertThat(myPanel.getChildrenComponents()).containsOnly(localButton, emptyButton, newButton);
-    // move button
-    arrayInfo.command_MOVE(newButton, emptyButton);
-    {
-      // check source
-      assertEditor(
-          "// filler filler filler",
-          "public class Test extends MyPanel {",
-          "  public Test() {",
-          "    JButton button = new JButton();",
-          "    addButtons( button, new JButton('New button'), new JButton() );",
-          "  }",
-          "}");
-      assertThat(arrayInfo.getItems()).containsOnly(localButton, emptyButton, newButton);
-      assertThat(myPanel.getChildrenComponents()).containsOnly(localButton, emptyButton, newButton);
-      assertThat(myPanel.getPresentation().getChildrenTree()).containsOnly(arrayInfo);
-      // check objects
-      myPanel.refresh();
-      assertThat(localButton.getObject()).isNotNull();
-      assertThat(emptyButton.getObject()).isNotNull();
-      assertThat(newButton.getObject()).isNotNull();
-    }
-    {
-      // check source on delete
-      newButton.delete();
-      assertEditor(
-          "// filler filler filler",
-          "public class Test extends MyPanel {",
-          "  public Test() {",
-          "    JButton button = new JButton();",
-          "    addButtons( button, new JButton() );",
-          "  }",
-          "}");
-      // check objects
-      myPanel.refresh();
-      assertThat(localButton.getObject()).isNotNull();
-      assertThat(emptyButton.getObject()).isNotNull();
-    }
-  }
+	public void test_moveItemOutside_inlining() throws Exception {
+		getParsedContainer();
+		// check exists
+		assertThat(arrayInfo.getItems().indexOf(localButton)).isEqualTo(0);
+		assertThat(arrayInfo.getItems().indexOf(emptyButton)).isEqualTo(1);
+		assertThat(myPanel.getChildrenComponents().indexOf(localButton)).isLessThan(
+				myPanel.getChildrenComponents().indexOf(emptyButton));
+		// add new JButton
+		ComponentInfo newButton;
+		{
+			FlowLayoutInfo flowLayout = (FlowLayoutInfo) myPanel.getLayout();
+			newButton = createComponent("javax.swing.JButton");
+			flowLayout.add(newButton, null);
+		}
+		// check source
+		assertEditor(
+				"// filler filler filler",
+				"public class Test extends MyPanel {",
+				"  public Test() {",
+				"    JButton button = new JButton();",
+				"    addButtons( button, new JButton() );",
+				"    {",
+				"      JButton button_1 = new JButton('New button');",
+				"      add(button_1);",
+				"    }",
+				"  }",
+				"}");
+		assertThat(myPanel.getPresentation().getChildrenTree()).containsOnly(arrayInfo, newButton);
+		assertThat(myPanel.getChildrenComponents()).containsOnly(localButton, emptyButton, newButton);
+		// move button
+		arrayInfo.command_MOVE(newButton, emptyButton);
+		{
+			// check source
+			assertEditor(
+					"// filler filler filler",
+					"public class Test extends MyPanel {",
+					"  public Test() {",
+					"    JButton button = new JButton();",
+					"    addButtons( button, new JButton('New button'), new JButton() );",
+					"  }",
+					"}");
+			assertThat(arrayInfo.getItems()).containsOnly(localButton, emptyButton, newButton);
+			assertThat(myPanel.getChildrenComponents()).containsOnly(localButton, emptyButton, newButton);
+			assertThat(myPanel.getPresentation().getChildrenTree()).containsOnly(arrayInfo);
+			// check objects
+			myPanel.refresh();
+			assertThat(localButton.getObject()).isNotNull();
+			assertThat(emptyButton.getObject()).isNotNull();
+			assertThat(newButton.getObject()).isNotNull();
+		}
+		{
+			// check source on delete
+			newButton.delete();
+			assertEditor(
+					"// filler filler filler",
+					"public class Test extends MyPanel {",
+					"  public Test() {",
+					"    JButton button = new JButton();",
+					"    addButtons( button, new JButton() );",
+					"  }",
+					"}");
+			// check objects
+			myPanel.refresh();
+			assertThat(localButton.getObject()).isNotNull();
+			assertThat(emptyButton.getObject()).isNotNull();
+		}
+	}
 
-  /* this feature is not allowed :(
+	/* this feature is not allowed :(
   public void test_OutsideInitialization() throws Exception {
   	getParsedContainer(new String[]{
   			"public class Test extends MyPanel {",
@@ -544,61 +544,61 @@ public void test_OutsideInitialization() throws Exception {
   	localButton = myPanel.getChildrenComponents().get(0);
   	emptyButton = myPanel.getChildrenComponents().get(1);
   }*/
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Utils
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  private void checkArrayItem(ComponentInfo item) {
-    Association association = item.getAssociation();
-    assertInstanceOf(InvocationChildEllipsisAssociation.class, association);
-    assertSame(item, association.getJavaInfo());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Utils
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private void checkArrayItem(ComponentInfo item) {
+		Association association = item.getAssociation();
+		assertInstanceOf(InvocationChildEllipsisAssociation.class, association);
+		assertSame(item, association.getJavaInfo());
+	}
 
-  private void getParsedContainer() throws Exception {
-    getParsedContainer(new String[]{
-        "// filler filler filler",
-        "public class Test extends MyPanel {",
-        "  public Test() {",
-        "    JButton button = new JButton();",
-        "    addButtons( button, new JButton() );",
-        "  }",
-        "}"});
-  }
+	private void getParsedContainer() throws Exception {
+		getParsedContainer(new String[]{
+				"// filler filler filler",
+				"public class Test extends MyPanel {",
+				"  public Test() {",
+				"    JButton button = new JButton();",
+				"    addButtons( button, new JButton() );",
+				"  }",
+		"}"});
+	}
 
-  private void getParsedContainer(String[] sourceLines) throws Exception {
-    configureProject2();
-    myPanel = parseContainer(sourceLines);
-    // 1 array + 2 buttons
-    assertThat(myPanel.getChildren(EllipsisObjectInfo.class)).hasSize(1);
-    assertThat(myPanel.getChildren(ComponentInfo.class).size()).isGreaterThanOrEqualTo(2);
-    // get models
-    arrayInfo = myPanel.getChildren(EllipsisObjectInfo.class).get(0);
-    localButton = myPanel.getChildrenComponents().get(0);
-    emptyButton = myPanel.getChildrenComponents().get(1);
-  }
+	private void getParsedContainer(String[] sourceLines) throws Exception {
+		configureProject2();
+		myPanel = parseContainer(sourceLines);
+		// 1 array + 2 buttons
+		assertThat(myPanel.getChildren(EllipsisObjectInfo.class)).hasSize(1);
+		assertThat(myPanel.getChildren(ComponentInfo.class).size()).isGreaterThanOrEqualTo(2);
+		// get models
+		arrayInfo = myPanel.getChildren(EllipsisObjectInfo.class).get(0);
+		localButton = myPanel.getChildrenComponents().get(0);
+		emptyButton = myPanel.getChildrenComponents().get(1);
+	}
 
-  private void configureProject2() throws Exception {
-    setFileContentSrc(
-        "test/MyPanel.java",
-        getTestSource(
-            "public class MyPanel extends JPanel {",
-            "  public void addButtons(JButton... buttons) {",
-            "  }",
-            "}"));
-    setFileContentSrc(
-        "test/MyPanel.wbp-component.xml",
-        getSourceDQ(
-            "<?xml version='1.0' encoding='UTF-8'?>",
-            "<component xmlns='http://www.eclipse.org/wb/WBPComponent'>",
-            "  <methods>",
-            "    <method name='addButtons'>",
-            "      <parameter type='javax.swing.JButton[]' child='true'>",
-            "        <tag name='arrayObject.removeOnEmpty' value='true'/>",
-            "      </parameter>",
-            "    </method>",
-            "  </methods>",
-            "</component>"));
-    waitForAutoBuild();
-  }
+	private void configureProject2() throws Exception {
+		setFileContentSrc(
+				"test/MyPanel.java",
+				getTestSource(
+						"public class MyPanel extends JPanel {",
+						"  public void addButtons(JButton... buttons) {",
+						"  }",
+						"}"));
+		setFileContentSrc(
+				"test/MyPanel.wbp-component.xml",
+				getSourceDQ(
+						"<?xml version='1.0' encoding='UTF-8'?>",
+						"<component xmlns='http://www.eclipse.org/wb/WBPComponent'>",
+						"  <methods>",
+						"    <method name='addButtons'>",
+						"      <parameter type='javax.swing.JButton[]' child='true'>",
+						"        <tag name='arrayObject.removeOnEmpty' value='true'/>",
+						"      </parameter>",
+						"    </method>",
+						"  </methods>",
+						"</component>"));
+		waitForAutoBuild();
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/model/JavaInfoTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/model/JavaInfoTest.java
index 2e76ba368..3b5ebb1aa 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/model/JavaInfoTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/model/JavaInfoTest.java
@@ -69,1721 +69,1721 @@
  * @author scheglov_ke
  */
 public class JavaInfoTest extends SwingModelTest {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Exit zone :-) XXX
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void _test_exit() throws Exception {
-    System.exit(0);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // toString()
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Simple {@link JPanel} without any related nodes.
-   */
-  public void test_toString_0() throws Exception {
-    ContainerInfo panel =
-        parseContainer(
-            "// filler filler filler",
-            "public class Test extends JPanel {",
-            "  public Test() {",
-            "  }",
-            "}");
-    assertEquals("{this: javax.swing.JPanel} {this} {}", panel.toString());
-  }
-
-  /**
-   * {@link JPanel} with related nodes.
-   */
-  public void test_toString_1() throws Exception {
-    ContainerInfo panel =
-        parseContainer(
-            "public class Test {",
-            "  public static void main(String[] args) {",
-            "    JPanel panel = new JPanel();",
-            "    panel.setEnabled(true);",
-            "  }",
-            "}");
-    assertEquals(
-        "{new: javax.swing.JPanel} {local-unique: panel} {/new JPanel()/ /panel.setEnabled(true)/}",
-        panel.toString());
-  }
-
-  /**
-   * {@link JPanel} with child.
-   */
-  public void test_toString_2() throws Exception {
-    ContainerInfo panel =
-        parseContainer(
-            "public class Test extends JPanel {",
-            "  public Test() {",
-            "    JButton button = new JButton();",
-            "    add(button);",
-            "  }",
-            "}");
-    ComponentInfo button = panel.getChildrenComponents().get(0);
-    assertEquals("{this: javax.swing.JPanel} {this} {/add(button)/}", panel.toString());
-    assertEquals(
-        "{new: javax.swing.JButton} {local-unique: button} {/new JButton()/ /add(button)/}",
-        button.toString());
-  }
-
-  /**
-   * Component created as {@link AnonymousClassDeclaration}.
-   */
-  public void test_toString_3() throws Exception {
-    ContainerInfo panel =
-        parseContainer(
-            "public class Test extends JPanel {",
-            "  public Test() {",
-            "    JButton button = new JButton() {};",
-            "    add(button);",
-            "  }",
-            "}");
-    ComponentInfo button = panel.getChildrenComponents().get(0);
-    assertEquals(
-        "{new: javax.swing.JButton} {local-unique: button} {/new JButton()/ /add(button)/}",
-        button.toString());
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // isRepresentedBy
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link JavaInfo#isRepresentedBy(ASTNode)}.<br>
-   * Request that should be handled by {@link CreationSupport}.
-   */
-  public void test_isRepresentedBy_CreationSupport() throws Exception {
-    ContainerInfo panel =
-        parseContainer(
-            "public class Test extends JPanel {",
-            "  Test() {",
-            "    add(new JButton());",
-            "  }",
-            "}");
-    ComponentInfo button = panel.getChildrenComponents().get(0);
-    ExpressionStatement statement = (ExpressionStatement) getStatement(panel, 0);
-    MethodInvocation invocation = (MethodInvocation) statement.getExpression();
-    Expression creationExpression = DomGenerics.arguments(invocation).get(0);
-    assertTrue(button.isRepresentedBy(creationExpression));
-  }
-
-  /**
-   * Test for {@link JavaInfo#isRepresentedBy(ASTNode)}.<br>
-   * Request using local unique variable, assigned in {@link VariableDeclarationFragment}.
-   */
-  public void test_isRepresentedBy_localUniqueVariableDeclaration() throws Exception {
-    ContainerInfo panel =
-        parseContainer(
-            "public class Test extends JPanel {",
-            "  Test() {",
-            "    JButton button = new JButton();",
-            "    add(button);",
-            "  }",
-            "}");
-    ComponentInfo button = panel.getChildrenComponents().get(0);
-    VariableDeclarationStatement statement = (VariableDeclarationStatement) getStatement(panel, 0);
-    VariableDeclarationFragment fragment = DomGenerics.fragments(statement).get(0);
-    assertEquals("button", fragment.getName().getIdentifier());
-    assertTrue(button.isRepresentedBy(fragment.getName()));
-  }
-
-  /**
-   * Test for {@link JavaInfo#isRepresentedBy(ASTNode)}.<br>
-   * Request using local unique variable, assigned using {@link Assignment}.
-   */
-  public void test_isRepresentedBy_localUniqueVariableAssignment() throws Exception {
-    ContainerInfo panel =
-        parseContainer(
-            "public class Test extends JPanel {",
-            "  Test() {",
-            "    JButton button;",
-            "    button = new JButton();",
-            "    add(button);",
-            "  }",
-            "}");
-    ComponentInfo button = panel.getChildrenComponents().get(0);
-    // test left side of Assignment
-    {
-      ExpressionStatement statement = (ExpressionStatement) getStatement(panel, 1);
-      Assignment assignment = (Assignment) statement.getExpression();
-      assertEquals("button", ((SimpleName) assignment.getLeftHandSide()).getIdentifier());
-      assertTrue(button.isRepresentedBy(assignment.getLeftHandSide()));
-    }
-  }
-
-  /**
-   * Test for {@link JavaInfo#isRepresentedBy(ASTNode)}.<br>
-   * Request using {@link FieldInitializerVariableSupport}.
-   */
-  public void test_isRepresentedBy_fieldInitializer() throws Exception {
-    ContainerInfo panel =
-        parseContainer(
-            "public class Test extends JPanel {",
-            "  private JButton button = new JButton();",
-            "  Test() {",
-            "    add(button);",
-            "  }",
-            "}");
-    ComponentInfo button = panel.getChildrenComponents().get(0);
-    //
-    FieldDeclaration fieldDeclaration = JavaInfoUtils.getTypeDeclaration(panel).getFields()[0];
-    VariableDeclarationFragment fragment = DomGenerics.fragments(fieldDeclaration).get(0);
-    assertEquals("button", fragment.getName().getIdentifier());
-    assertTrue(button.isRepresentedBy(fragment.getName()));
-  }
-
-  /**
-   * Test for {@link JavaInfo#isRepresentedBy(ASTNode)}.<br>
-   * Request using {@link FieldUniqueVariableSupport}, assigned using {@link Assignment}.
-   */
-  public void test_isRepresentedBy_fieldUnique() throws Exception {
-    ContainerInfo panel =
-        parseContainer(
-            "public class Test extends JPanel {",
-            "  private JButton button;",
-            "  Test() {",
-            "    button = new JButton();",
-            "    add(button);",
-            "  }",
-            "}");
-    ComponentInfo button = panel.getChildrenComponents().get(0);
-    // test left side of Assignment
-    {
-      ExpressionStatement statement = (ExpressionStatement) getStatement(panel, 0);
-      Assignment assignment = (Assignment) statement.getExpression();
-      assertEquals("button", ((SimpleName) assignment.getLeftHandSide()).getIdentifier());
-      assertTrue(button.isRepresentedBy(assignment.getLeftHandSide()));
-    }
-  }
-
-  /**
-   * Test for {@link TryStatement} and
-   * {@link JavaInfo#isRepresentedBy(org.eclipse.jdt.core.dom.ASTNode)} with
-   * {@link SingleVariableDeclaration} in {@link CatchClause}.
-   */
-  public void test_isRepresentedBy_referenceInTryStatement() throws Exception {
-    ContainerInfo panel =
-        parseContainer(
-            "class Test extends JPanel {",
-            "  JButton button = new JButton();",
-            "  Test() {",
-            "    init();",
-            "    add(button);",
-            "  }",
-            "  void init() {",
-            "    try {",
-            "      button.setEnabled(false);",
-            "    } catch (Throwable e) {",
-            "      showError(e);",
-            "    }",
-            "  }",
-            "  void showError(Throwable e) {",
-            "    System.out.println(e);",
-            "  }",
-            "}");
-    assertEquals(1, panel.getChildrenComponents().size());
-    ComponentInfo button = panel.getChildrenComponents().get(0);
-    assertTrue(button.getDescription().getComponentClass() == JButton.class);
-  }
-
-  /**
-   * Test for {@link JavaInfo#isRepresentedBy(ASTNode)}.<br>
-   * Use {@link ParenthesizedExpression}.
-   */
-  public void test_isRepresentedBy_ParenthesizedExpression() throws Exception {
-    ContainerInfo panel =
-        parseContainer(
-            "public class Test extends JPanel {",
-            "  Test() {",
-            "    add((new JButton()));",
-            "  }",
-            "}");
-    ComponentInfo button = panel.getChildrenComponents().get(0);
-    //
-    int index = m_lastEditor.getSource().indexOf("(new");
-    ASTNode node = m_lastEditor.getEnclosingNode(index);
-    assertTrue(button.isRepresentedBy(node));
-  }
-
-  /**
-   * Test for {@link JavaInfo#isRepresentedBy(ASTNode)}.<br>
-   * Use {@link CastExpression}.
-   */
-  public void test_isRepresentedBy_CastExpression() throws Exception {
-    ContainerInfo panel =
-        parseContainer(
-            "public class Test extends JPanel {",
-            "  Test() {",
-            "    add((Component) new JButton());",
-            "  }",
-            "}");
-    ComponentInfo button = panel.getChildrenComponents().get(0);
-    //
-    int index = m_lastEditor.getSource().indexOf("(Component");
-    ASTNode node = m_lastEditor.getEnclosingNode(index);
-    assertTrue(button.isRepresentedBy(node));
-  }
-
-  /**
-   * Test for {@link JavaInfo#isRepresentedBy(ASTNode)}.
-   * <p>
-   * {@link FieldDeclaration} without assignment.
-   */
-  public void test_isRepresentedBy_emptyField() throws Exception {
-    ContainerInfo panel =
-        parseContainer(
-            "public class Test extends JPanel {",
-            "  private JButton button;",
-            "  public Test() {",
-            "    System.out.println(button);",
-            "  }",
-            "}");
-    //
-    ASTNode node = m_lastEditor.getEnclosingNode("button)");
-    assertFalse(panel.isRepresentedBy(node));
-  }
-
-  /**
-   * Test for {@link JavaInfo#isRepresentedBy(ASTNode)}.
-   * <p>
-   * {@link FieldDeclaration} with {@link NullLiteral} initializer.
-   */
-  public void test_isRepresentedBy_nullField() throws Exception {
-    ContainerInfo panel =
-        parseContainer(
-            "public class Test extends JPanel {",
-            "  private JButton button = null;",
-            "  public Test() {",
-            "    System.out.println(button);",
-            "  }",
-            "}");
-    //
-    ASTNode node = m_lastEditor.getEnclosingNode("button)");
-    assertFalse(panel.isRepresentedBy(node));
-  }
-
-  /**
-   * Test for {@link JavaInfo#isRepresentedBy(ASTNode)}.
-   * <p>
-   * {@link SingleVariableDeclaration} parameter and {@link ThisExpression}.
-   */
-  public void test_isRepresentedBy_SingleVariableDeclaration() throws Exception {
-    ContainerInfo panel =
-        parseContainer(
-            "public class Test extends JPanel {",
-            "  public Test() {",
-            "    createContents(this);",
-            "  }",
-            "  private void createContents(JPanel parent) {",
-            "    System.out.println(parent);",
-            "  }",
-            "}");
-    // usage of "parent"
-    {
-      SimpleName node = getNode("parent);");
-      assertTrue(panel.isRepresentedBy(node));
-    }
-    // declaration of "parent"
-    {
-      SimpleName node = getNode("parent) {", SimpleName.class);
-      assertTrue(panel.isRepresentedBy(node));
-    }
-  }
-
-  /**
-   * Test for {@link JavaInfo#isRepresentedBy(ASTNode)}.
-   * <p>
-   * {@link SingleVariableDeclaration} parameter.
-   */
-  public void test_isRepresentedBy_SingleVariableDeclaration_moreThanOneInvocation()
-      throws Exception {
-    ContainerInfo panel =
-        parseContainer(
-            "public class Test extends JPanel {",
-            "  public Test() {",
-            "    createContents(this, 0);",
-            "    createContents(this, 1);",
-            "  }",
-            "  private void createContents(JPanel parent, int value) {",
-            "    System.out.println(parent);",
-            "  }",
-            "}");
-    // usage of "parent"
-    {
-      SimpleName node = getNode("parent);");
-      assertTrue(panel.isRepresentedBy(node));
-    }
-  }
-
-  /**
-   * Test for {@link JavaInfo#isRepresentedBy(ASTNode)}.
-   */
-  public void test_isRepresentedBy_ConstructorInvocation_argument() throws Exception {
-    ContainerInfo panel =
-        parseContainer(
-            "public class Test extends JPanel {",
-            "  public Test() {",
-            "    this(new JButton());",
-            "  }",
-            "  public Test(Component child) {",
-            "    add(child);",
-            "  }",
-            "}");
-    assertHierarchy(
-        "{this: javax.swing.JPanel} {this} {/add(child)/}",
-        "  {implicit-layout: java.awt.FlowLayout} {implicit-layout} {}",
-        "  {new: javax.swing.JButton} {empty} {/new JButton()/ /add(child)/}");
-    ComponentInfo button = panel.getChildrenComponents().get(0);
-    // creation of JButton
-    {
-      ClassInstanceCreation node =
-          (ClassInstanceCreation) m_lastEditor.getEnclosingNode("new JButton()");
-      assertTrue(button.isRepresentedBy(node));
-    }
-    // usage of JButton
-    {
-      SimpleName node = (SimpleName) m_lastEditor.getEnclosingNode("child);");
-      assertTrue(button.isRepresentedBy(node));
-    }
-  }
-
-  /**
-   * Test for {@link JavaInfo#isRepresentedBy(ASTNode)}.
-   * <p>
-   * Attempt to ask using {@link ASTNode} from recursive method.
-   */
-  public void test_isRepresentedBy_recursion() throws Exception {
-    ContainerInfo panel =
-        parseContainer(
-            "public class Test extends JPanel {",
-            "  public Test() {",
-            "    System.out.println(recursiveMethod(new Object()));",
-            "  }",
-            "  private Object recursiveMethod(Object o) {",
-            "    o = recursiveMethod(o);",
-            "    return o;",
-            "  }",
-            "}");
-    //
-    ASTNode node = m_lastEditor.getEnclosingNode("recursiveMethod(new");
-    assertFalse(panel.isRepresentedBy(node));
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Variable
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test that {@link JavaInfo#setVariableSupport(VariableSupport)} sends
-   * {@link JavaInfoSetVariable} broadcast.
-   */
-  public void test_setVariableBroadcast() throws Exception {
-    parseContainer(
-        "public class Test extends JPanel {",
-        "  Test() {",
-        "    JButton button = new JButton();",
-        "    add(button);",
-        "  }",
-        "}");
-    final ComponentInfo button = getJavaInfoByName("button");
-    final VariableSupport expected_oldVariable = button.getVariableSupport();
-    final VariableSupport expected_newVariable;
-    {
-      SimpleName name = (SimpleName) m_lastEditor.getEnclosingNode("button =");
-      expected_newVariable = new LocalUniqueVariableSupport(button, name);
-    }
-    //
-    final AtomicInteger count = new AtomicInteger();
-    button.addBroadcastListener(new JavaInfoSetVariable() {
-      @Override
-      public void invoke(JavaInfo javaInfo, VariableSupport oldVariable, VariableSupport newVariable)
-          throws Exception {
-        assertSame(button, javaInfo);
-        assertSame(expected_oldVariable, oldVariable);
-        assertSame(expected_newVariable, newVariable);
-        count.incrementAndGet();
-      }
-    });
-    button.setVariableSupport(expected_newVariable);
-    assertEquals(1, count.get());
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // addExpressionStatement()
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link JavaInfo#addExpressionStatement(String)}.
-   */
-  public void test_addExpressionStatement_1_local() throws Exception {
-    JavaInfo panel =
-        parseContainer(
-            "class Test {",
-            "  public static void main(String args[]) {",
-            "    JPanel panel = new JPanel();",
-            "  }",
-            "}");
-    // initial checks
-    assertRelatedNodes(panel, new String[]{"new JPanel()"});
-    // start edit and never finish it to avoid refresh()
-    panel.startEdit();
-    // add statement
-    MethodInvocation invocation;
-    {
-      String source = TemplateUtils.format("{0}.setEnabled(false)", panel);
-      invocation = (MethodInvocation) panel.addExpressionStatement(source);
-      assertNotNull(invocation);
-      assertEditor(
-          "class Test {",
-          "  public static void main(String args[]) {",
-          "    JPanel panel = new JPanel();",
-          "    panel.setEnabled(false);",
-          "  }",
-          "}");
-      assertRelatedNodes(panel, new String[]{"new JPanel()", "panel.setEnabled(false)"});
-    }
-    // remove statement
-    {
-      m_lastEditor.removeEnclosingStatement(invocation);
-      assertEditor(
-          getTestSource(
-              "class Test {",
-              "  public static void main(String args[]) {",
-              "    JPanel panel = new JPanel();",
-              "  }",
-              "}"),
-          m_lastEditor);
-      assertRelatedNodes(panel, new String[]{"new JPanel()"});
-    }
-  }
-
-  /**
-   * Test for {@link JavaInfo#addExpressionStatement(String, Map)}.
-   */
-  public void test_addExpressionStatement_template() throws Exception {
-    ContainerInfo panel =
-        parseContainer(
-            "// filler filler filler",
-            "public class Test extends JPanel {",
-            "  public Test() {",
-            "  }",
-            "}");
-    // add statement
-    String expressionSource = TemplateUtils.format("{0}.setEnabled(true)", panel);
-    panel.addExpressionStatement(expressionSource);
-    assertEditor(
-        "// filler filler filler",
-        "public class Test extends JPanel {",
-        "  public Test() {",
-        "    setEnabled(true);",
-        "  }",
-        "}");
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Replace expression
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link JavaInfo#replaceExpression(Expression, String)}.
-   */
-  public void test_replaceExpression() throws Exception {
-    ContainerInfo panel =
-        parseContainer(
-            "public class Test extends JPanel {",
-            "  public Test() {",
-            "    JLabel label = new JLabel();",
-            "    add(label);",
-            "    //",
-            "    JButton button_1 = new JButton();",
-            "    add(button_1);",
-            "    //",
-            "    JButton button_2 = new JButton();",
-            "    add(button_2);",
-            "    //",
-            "    label.setLabelFor(button_1);",
-            "  }",
-            "}");
-    ComponentInfo label = panel.getChildrenComponents().get(0);
-    ComponentInfo button_2 = panel.getChildrenComponents().get(2);
-    //
-    MethodInvocation invocation = label.getMethodInvocation("setLabelFor(java.awt.Component)");
-    Expression expression = DomGenerics.arguments(invocation).get(0);
-    label.replaceExpression(expression, TemplateUtils.getExpression(button_2));
-    assertEditor(
-        "public class Test extends JPanel {",
-        "  public Test() {",
-        "    JLabel label = new JLabel();",
-        "    add(label);",
-        "    //",
-        "    JButton button_1 = new JButton();",
-        "    add(button_1);",
-        "    //",
-        "    JButton button_2 = new JButton();",
-        "    add(button_2);",
-        "    //",
-        "    label.setLabelFor(button_2);",
-        "  }",
-        "}");
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // MethodInvocation
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_getMethodInvocations() throws Exception {
-    JavaInfo panel =
-        parseContainer(
-            "class Test {",
-            "  public static void main(String args[]) {",
-            "    JPanel panel = new JPanel();",
-            "    panel.setEnabled(false);",
-            "    panel.setEnabled(true);",
-            "  }",
-            "}");
-    // getMethodInvocations
-    {
-      assertEquals(0, panel.getMethodInvocations("setVisible(boolean)").size());
-      //
-      List<MethodInvocation> invocations = panel.getMethodInvocations("setEnabled(boolean)");
-      assertEquals(2, invocations.size());
-      assertEquals("panel.setEnabled(false)", m_lastEditor.getSource(invocations.get(0)));
-      assertEquals("panel.setEnabled(true)", m_lastEditor.getSource(invocations.get(1)));
-    }
-    // getMethodInvocation
-    {
-      assertNull(panel.getMethodInvocation("setVisible(boolean)"));
-      {
-        MethodInvocation invocation = panel.getMethodInvocation("setEnabled(boolean)");
-        assertNotNull(invocation);
-        assertEquals("setEnabled", invocation.getName().getIdentifier());
-      }
-    }
-  }
-
-  /**
-   * Test for {@link JavaInfo#getMethodInvocations()}. For code like
-   * <code>new Component().setFoo()</code> invocation <code>setFoo()</code> also should be added.
-   */
-  public void test_getMethodInvocations_all_emptyInvocation() throws Exception {
-    setFileContentSrc(
-        "test/MyButton.java",
-        getTestSource(
-            "public class MyButton extends JButton {",
-            "  public MyButton(Container container) {",
-            "    container.add(this);",
-            "  }",
-            "  public void setFoo(boolean value) {",
-            "  }",
-            "}"));
-    setFileContentSrc(
-        "test/MyButton.wbp-component.xml",
-        getSourceDQ(
-            "<?xml version='1.0' encoding='UTF-8'?>",
-            "<component xmlns='http://www.eclipse.org/wb/WBPComponent'>",
-            "  <constructors>",
-            "    <constructor>",
-            "      <parameter type='java.awt.Container' parent='true'/>",
-            "    </constructor>",
-            "  </constructors>",
-            "</component>"));
-    waitForAutoBuild();
-    //
-    ContainerInfo panel =
-        parseContainer(
-            "public class Test extends JPanel {",
-            "  public Test() {",
-            "    new MyButton(this).setFoo(false);",
-            "  }",
-            "}");
-    ComponentInfo button = panel.getChildrenComponents().get(0);
-    List<MethodInvocation> invocations = button.getMethodInvocations();
-    assertThat(invocations).isNotEmpty();
-  }
-
-  public void test_removeMethodInvocations() throws Exception {
-    JavaInfo panel =
-        parseContainer(
-            "class Test {",
-            "  public static void main(String args[]) {",
-            "    JPanel panel = new JPanel();",
-            "    panel.setEnabled(false);",
-            "    panel.setEnabled(true);",
-            "  }",
-            "}");
-    panel.removeMethodInvocations("setEnabled(boolean)");
-    assertEditor(
-        "class Test {",
-        "  public static void main(String args[]) {",
-        "    JPanel panel = new JPanel();",
-        "  }",
-        "}");
-  }
-
-  /**
-   * Test for {@link JavaInfo#addMethodInvocation(String, String, String[])}.
-   */
-  public void test_addMethodInvocation() throws Exception {
-    JavaInfo panel =
-        parseContainer(
-            "public class Test {",
-            "  public static void main(String args[]) {",
-            "    JPanel panel = new JPanel();",
-            "  }",
-            "}");
-    assertRelatedNodes(panel, new String[]{"new JPanel()"});
-    //
-    panel.addMethodInvocation("setSize(int,int)", "200, 100");
-    assertEditor(
-        "public class Test {",
-        "  public static void main(String args[]) {",
-        "    JPanel panel = new JPanel();",
-        "    panel.setSize(200, 100);",
-        "  }",
-        "}");
-    assertRelatedNodes(panel, new String[]{"new JPanel()", "panel.setSize(200, 100)"});
-  }
-
-  /**
-   * Test for {@link JavaInfo#addMethodInvocation(StatementTarget, String, String)}.
-   */
-  public void test_addMethodInvocation_withTarget() throws Exception {
-    JavaInfo panel =
-        parseContainer(
-            "public class Test {",
-            "  public static void main(String args[]) {",
-            "    JPanel panel = new JPanel();",
-            "    panel.setEnabled(false);",
-            "  }",
-            "}");
-    assertRelatedNodes(panel, new String[]{"new JPanel()", "panel.setEnabled(false)"});
-    // prepare target
-    StatementTarget target;
-    {
-      MethodInvocation invocation = panel.getMethodInvocation("setEnabled(boolean)");
-      target = new StatementTarget(AstNodeUtils.getEnclosingStatement(invocation), false);
-    }
-    //
-    panel.addMethodInvocation(target, "setSize(int,int)", "200, 100");
-    assertEditor(
-        "public class Test {",
-        "  public static void main(String args[]) {",
-        "    JPanel panel = new JPanel();",
-        "    panel.setEnabled(false);",
-        "    panel.setSize(200, 100);",
-        "  }",
-        "}");
-    assertRelatedNodes(panel, new String[]{
-        "new JPanel()",
-        "panel.setEnabled(false)",
-        "panel.setSize(200, 100)"});
-  }
-
-  /**
-   * Test for {@link JavaInfo#addMethodInvocation(String, String, String[])}.
-   */
-  public void test_addMethodInvocation_this() throws Exception {
-    JavaInfo panel =
-        parseContainer(
-            "// filler filler filler",
-            "public class Test extends JPanel {",
-            "  public Test() {",
-            "  }",
-            "}");
-    assertRelatedNodes(panel, new String[]{});
-    //
-    panel.addMethodInvocation("setSize(int,int)", "200, 100");
-    assertEditor(
-        "// filler filler filler",
-        "public class Test extends JPanel {",
-        "  public Test() {",
-        "    setSize(200, 100);",
-        "  }",
-        "}");
-    assertRelatedNodes(panel, new String[]{"setSize(200, 100)"});
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Field assignment
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link JavaInfo#getFieldAssignments()}.
-   */
-  public void test_getAllFieldAssignments() throws Exception {
-    createTypeDeclaration(
-        "test",
-        "MyButton.java",
-        getTestSource(
-            "public class MyButton extends JButton {",
-            "  public int m_value1;",
-            "  public int m_value2;",
-            "}"));
-    waitForAutoBuild();
-    // parse
-    ContainerInfo panel =
-        parseContainer(
-            "public class Test extends JPanel {",
-            "  public Test() {",
-            "    MyButton button = new MyButton();",
-            "    button.m_value1 = 1;",
-            "    button.m_value2 = 2;",
-            "    add(button);",
-            "  }",
-            "}");
-    ComponentInfo button = panel.getChildrenComponents().get(0);
-    // all assignments
-    List<Assignment> assignments = button.getFieldAssignments();
-    assertThat(assignments).hasSize(2);
-    assertEquals("button.m_value1 = 1", m_lastEditor.getSource(assignments.get(0)));
-    assertEquals("button.m_value2 = 2", m_lastEditor.getSource(assignments.get(1)));
-  }
-
-  /**
-   * Test for {@link JavaInfo#getFieldAssignments(String)}.
-   */
-  public void test_getFieldAssignments() throws Exception {
-    createTypeDeclaration(
-        "test",
-        "MyButton.java",
-        getTestSource(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "public class MyButton extends JButton {",
-            "  public int m_value;",
-            "}"));
-    waitForAutoBuild();
-    // parse
-    ContainerInfo panel =
-        parseContainer(
-            "public class Test extends JPanel {",
-            "  public Test() {",
-            "    MyButton button = new MyButton();",
-            "    button.m_value = 1;",
-            "    button.m_value = 2;",
-            "    add(button);",
-            "  }",
-            "}");
-    ComponentInfo button = panel.getChildrenComponents().get(0);
-    // no such field
-    assertThat(button.getFieldAssignments("noSuchField")).isEmpty();
-    // existing assignments
-    {
-      List<Assignment> assignments = button.getFieldAssignments("m_value");
-      assertThat(assignments).hasSize(2);
-      assertEquals("button.m_value = 1", m_lastEditor.getSource(assignments.get(0)));
-      assertEquals("button.m_value = 2", m_lastEditor.getSource(assignments.get(1)));
-    }
-  }
-
-  /**
-   * Test for {@link JavaInfo#getFieldAssignments(String)}, using {@link FieldAccess}.
-   */
-  public void test_getFieldAssignments_FieldAccess() throws Exception {
-    setFileContentSrc(
-        "test/MyButton.java",
-        getTestSource(
-            "public class MyButton extends JButton {",
-            "  public int m_value;",
-            "  public MyButton(Container container) {",
-            "    container.add(this);",
-            "  }",
-            "}"));
-    setFileContentSrc(
-        "test/MyButton.wbp-component.xml",
-        getSourceDQ(
-            "<?xml version='1.0' encoding='UTF-8'?>",
-            "<component xmlns='http://www.eclipse.org/wb/WBPComponent'>",
-            "  <constructors>",
-            "    <constructor>",
-            "      <parameter type='java.awt.Container' parent='true'/>",
-            "    </constructor>",
-            "  </constructors>",
-            "</component>"));
-    waitForAutoBuild();
-    // parse
-    ContainerInfo panel =
-        parseContainer(
-            "public class Test extends JPanel {",
-            "  public Test() {",
-            "    new MyButton(this).m_value = 1;",
-            "  }",
-            "}");
-    ComponentInfo button = panel.getChildrenComponents().get(0);
-    // no such field
-    assertThat(button.getFieldAssignments("noSuchField")).isEmpty();
-    // existing assignment
-    {
-      List<Assignment> assignments = button.getFieldAssignments("m_value");
-      assertThat(assignments).hasSize(1);
-      assertEquals("new MyButton(this).m_value = 1", m_lastEditor.getSource(assignments.get(0)));
-    }
-  }
-
-  /**
-   * Test for {@link JavaInfo#getFieldAssignment(String)}.
-   */
-  public void test_getFieldAssignment() throws Exception {
-    createTypeDeclaration(
-        "test",
-        "MyButton.java",
-        getTestSource(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "public class MyButton extends JButton {",
-            "  public int m_value;",
-            "}"));
-    waitForAutoBuild();
-    // parse
-    ContainerInfo panel =
-        parseContainer(
-            "public class Test extends JPanel {",
-            "  public Test() {",
-            "    MyButton button = new MyButton();",
-            "    button.m_value = 1;",
-            "    add(button);",
-            "  }",
-            "}");
-    ComponentInfo button = panel.getChildrenComponents().get(0);
-    // no such field
-    assertNull(button.getFieldAssignment("noSuchField"));
-    // existing assignment
-    {
-      Assignment assignment = button.getFieldAssignment("m_value");
-      assertEquals("button.m_value = 1", m_lastEditor.getSource(assignment));
-    }
-  }
-
-  /**
-   * Test for {@link JavaInfo#getFieldAssignment(String)}.<br>
-   * Use {@link ParenthesizedExpression} as left hand side.
-   */
-  public void test_getFieldAssignment_ParenthesizedExpression() throws Exception {
-    createTypeDeclaration(
-        "test",
-        "MyButton.java",
-        getTestSource(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "public class MyButton extends JButton {",
-            "  public int m_value;",
-            "}"));
-    waitForAutoBuild();
-    // parse
-    ContainerInfo panel =
-        parseContainer(
-            "public class Test extends JPanel {",
-            "  public Test() {",
-            "    MyButton button = new MyButton();",
-            "    (button).m_value = 1;",
-            "    add(button);",
-            "  }",
-            "}");
-    ComponentInfo button = panel.getChildrenComponents().get(0);
-    // existing assignment
-    {
-      Assignment assignment = button.getFieldAssignment("m_value");
-      assertNotNull(assignment);
-      assertEquals("(button).m_value = 1", m_lastEditor.getSource(assignment));
-    }
-  }
-
-  /**
-   * Test for {@link JavaInfo#addFieldAssignment(String, String)}.
-   */
-  public void test_addFieldAssignment() throws Exception {
-    createTypeDeclaration(
-        "test",
-        "MyButton.java",
-        getTestSource(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "public class MyButton extends JButton {",
-            "  public int m_value;",
-            "}"));
-    waitForAutoBuild();
-    // parse
-    ContainerInfo panel =
-        parseContainer(
-            "public class Test extends JPanel {",
-            "  public Test() {",
-            "    MyButton button = new MyButton();",
-            "    add(button);",
-            "  }",
-            "}");
-    ComponentInfo button = panel.getChildrenComponents().get(0);
-    // add assignment
-    Assignment assignment = button.addFieldAssignment("m_value", "1");
-    assertEquals("button.m_value = 1", m_lastEditor.getSource(assignment));
-    assertEditor(
-        "public class Test extends JPanel {",
-        "  public Test() {",
-        "    MyButton button = new MyButton();",
-        "    button.m_value = 1;",
-        "    add(button);",
-        "  }",
-        "}");
-  }
-
-  /**
-   * Test for {@link JavaInfo#removeFieldAssignments(String)}.
-   */
-  public void test_removeFieldAssignments_normal() throws Exception {
-    createTypeDeclaration(
-        "test",
-        "MyButton.java",
-        getTestSource(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "public class MyButton extends JButton {",
-            "  public int m_value;",
-            "}"));
-    waitForAutoBuild();
-    // parse
-    ContainerInfo panel =
-        parseContainer(
-            "public class Test extends JPanel {",
-            "  public Test() {",
-            "    MyButton button = new MyButton();",
-            "    button.m_value = 1;",
-            "    button.m_value = 2;",
-            "    add(button);",
-            "  }",
-            "}");
-    ComponentInfo button = panel.getChildrenComponents().get(0);
-    // remove assignments
-    button.removeFieldAssignments("m_value");
-    assertEditor(
-        "public class Test extends JPanel {",
-        "  public Test() {",
-        "    MyButton button = new MyButton();",
-        "    add(button);",
-        "  }",
-        "}");
-  }
-
-  /**
-   * Test for {@link JavaInfo#removeFieldAssignments(String)}.
-   */
-  public void test_removeFieldAssignments_withDangling() throws Exception {
-    createTypeDeclaration(
-        "test",
-        "MyButton.java",
-        getTestSource(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "public class MyButton extends JButton {",
-            "  public int m_value;",
-            "}"));
-    waitForAutoBuild();
-    // parse
-    ContainerInfo panel =
-        parseContainer(
-            "public class Test extends JPanel {",
-            "  public Test() {",
-            "    MyButton button = new MyButton();",
-            "    button.m_value = button.m_value = 1;",
-            "    add(button);",
-            "  }",
-            "}");
-    ComponentInfo button = panel.getChildrenComponents().get(0);
-    // remove assignments
-    button.removeFieldAssignments("m_value");
-    assertEditor(
-        "public class Test extends JPanel {",
-        "  public Test() {",
-        "    MyButton button = new MyButton();",
-        "    add(button);",
-        "  }",
-        "}");
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Delete
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_delete_1() throws Exception {
-    String[] lines =
-        {
-            "public class Test extends JPanel {",
-            "  // filler filler filler",
-            "  public Test() {",
-            "    add(new JButton());",
-            "  }",
-            "}"};
-    final ContainerInfo panel = parseContainer(lines);
-    assertHierarchy(
-        "{this: javax.swing.JPanel} {this} {/add(new JButton())/}",
-        "  {implicit-layout: java.awt.FlowLayout} {implicit-layout} {}",
-        "  {new: javax.swing.JButton} {empty} {/add(new JButton())/}");
-    final ComponentInfo button = panel.getChildrenComponents().get(0);
-    // wait for expected broadcasts
-    final boolean[] wasBefore = new boolean[]{false};
-    final boolean[] wasAfter = new boolean[]{false};
-    panel.addBroadcastListener(new ObjectInfoDelete() {
-      @Override
-      public void before(ObjectInfo parent, ObjectInfo child) throws Exception {
-        assertSame(panel, parent);
-        assertSame(button, child);
-        assertTrue(button.isDeleting());
-        assertFalse(button.isDeleted());
-        wasBefore[0] = true;
-      }
-
-      @Override
-      public void after(ObjectInfo parent, ObjectInfo child) throws Exception {
-        assertSame(panel, parent);
-        assertSame(button, child);
-        assertTrue(button.isDeleting());
-        assertTrue(button.isDeleted());
-        wasAfter[0] = true;
-      }
-    });
-    // do delete
-    button.delete();
-    assertFalse(button.isDeleting());
-    assertTrue(button.isDeleted());
-    assertEquals(
-        getTestSource(
-            "public class Test extends JPanel {",
-            "  // filler filler filler",
-            "  public Test() {",
-            "  }",
-            "}"),
-        m_lastEditor.getSource());
-    assertTrue(wasBefore[0]);
-    assertTrue(wasAfter[0]);
-    assertHierarchy(
-        "{this: javax.swing.JPanel} {this} {}",
-        "  {implicit-layout: java.awt.FlowLayout} {implicit-layout} {}");
-  }
-
-  /**
-   * When we delete child and parent is created directly in association {@link Statement}, we should
-   * materialize parent to prevent its removing with association.
-   */
-  public void test_delete_whenNoParentVariable() throws Exception {
-    ContainerInfo panel =
-        parseContainer(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "public class Test {",
-            "  public static void main(String[] args) {",
-            "    JButton button = new JButton();",
-            "    new JPanel().add(button);",
-            "  }",
-            "}");
-    assertHierarchy(
-        "{new: javax.swing.JPanel} {empty} {/new JPanel().add(button)/}",
-        "  {implicit-layout: java.awt.FlowLayout} {implicit-layout} {}",
-        "  {new: javax.swing.JButton} {local-unique: button} {/new JButton()/ /new JPanel().add(button)/}");
-    ComponentInfo button = panel.getChildrenComponents().get(0);
-    // do delete
-    button.delete();
-    assertEditor(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "public class Test {",
-        "  public static void main(String[] args) {",
-        "    JPanel panel = new JPanel();",
-        "  }",
-        "}");
-    assertHierarchy(
-        "{new: javax.swing.JPanel} {local-unique: panel} {/new JPanel()/}",
-        "  {implicit-layout: java.awt.FlowLayout} {implicit-layout} {}");
-  }
-
-  /**
-   * Test that "false" from "canDelete" script disables delete.
-   */
-  public void test_canDelete_script_false() throws Exception {
-    check_canDelete_script("false", false);
-  }
-
-  /**
-   * Test that "true" from "canDelete" script enables delete.
-   */
-  public void test_canDelete_script_true() throws Exception {
-    check_canDelete_script("true", true);
-  }
-
-  /**
-   * Test that not boolean value from "canDelete" script disables delete.
-   */
-  public void test_canDelete_script_notBoolean() throws Exception {
-    check_canDelete_script("42", false);
-  }
-
-  /**
-   * Test that we can use "canDelete" script to disable delete.
-   */
-  private void check_canDelete_script(String script, boolean expected) throws Exception {
-    setFileContentSrc(
-        "test/MyButton.java",
-        getTestSource(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "public class MyButton extends JButton {",
-            "}"));
-    setFileContentSrc(
-        "test/MyButton.wbp-component.xml",
-        getSourceDQ(
-            "<?xml version='1.0' encoding='UTF-8'?>",
-            "<component xmlns='http://www.eclipse.org/wb/WBPComponent'>",
-            "  <parameters>",
-            "    <parameter name='canDelete'>" + script + "</parameter>",
-            "  </parameters>",
-            "</component>"));
-    waitForAutoBuild();
-    //
-    parseContainer(
-        "// filler filler filler filler filler",
-        "// filler filler filler filler filler",
-        "public class Test {",
-        "  public static void main(String[] args) {",
-        "    MyButton button = new MyButton();",
-        "    new JPanel().add(button);",
-        "  }",
-        "}");
-    ComponentInfo button = getJavaInfoByName("button");
-    // ask canDelete()
-    assertEquals(expected, button.canDelete());
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // canBeRoot
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_canBeRoot() throws Exception {
-    ContainerInfo panel =
-        parseContainer(
-            "class Test extends JPanel {",
-            "  Test() {",
-            "    add(new Button('AWT button'));",
-            "  }",
-            "}");
-    ComponentInfo button = panel.getChildrenComponents().get(0);
-    assertTrue(panel.canBeRoot());
-    assertFalse(button.canBeRoot());
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // this.fieldName
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_this_fieldName() throws Exception {
-    parseContainer(
-        "class Test extends JPanel {",
-        "  private JButton button;",
-        "  Test() {",
-        "    this.button = new JButton();",
-        "    add(this.button);",
-        "  }",
-        "}");
-    assertHierarchy(
-        "{this: javax.swing.JPanel} {this} {/this/ /add(this.button)/}",
-        "  {implicit-layout: java.awt.FlowLayout} {implicit-layout} {}",
-        "  {new: javax.swing.JButton} {field-unique: button} {/new JButton()/ /add(this.button)/}");
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Properties
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * When we use component, we can not see its <code>protected</code> properties.
-   */
-  public void test_protectedProperty_use() throws Exception {
-    setFileContentSrc(
-        "test/MyButton.java",
-        getTestSource(
-            "public class MyButton extends JButton {",
-            "  public MyButton() {",
-            "  }",
-            "  protected void setFoo(int value) {",
-            "  }",
-            "}"));
-    waitForAutoBuild();
-    // parse
-    ContainerInfo panel =
-        parseContainer(
-            "class Test extends JPanel {",
-            "  Test() {",
-            "    add(new MyButton());",
-            "  }",
-            "}");
-    ComponentInfo button = panel.getChildrenComponents().get(0);
-    assertThat(button.getPropertyByTitle("foo")).isNull();
-  }
-
-  /**
-   * When we inherit from component, we can see its <code>protected</code> properties.
-   */
-  public void test_protectedProperty_this() throws Exception {
-    setFileContentSrc(
-        "test/MyPanel.java",
-        getTestSource(
-            "public class MyPanel extends JPanel {",
-            "  public MyPanel() {",
-            "  }",
-            "  protected void setFoo(int value) {",
-            "  }",
-            "}"));
-    waitForAutoBuild();
-    // parse
-    ContainerInfo panel =
-        parseContainer(
-            "// filler filler filler",
-            "public class Test extends MyPanel {",
-            "  public Test() {",
-            "  }",
-            "}");
-    assertThat(panel.getPropertyByTitle("foo")).isNotNull();
-  }
-
-  /**
-   * Test for {@link JavaInfo#getPropertyByTitle(String)}.
-   */
-  public void test_getPropertyByTitle() throws Exception {
-    ContainerInfo panel =
-        parseContainer(
-            "class Test extends JPanel {",
-            "  Test() {",
-            "    add(new JButton());",
-            "  }",
-            "}");
-    ComponentInfo button = panel.getChildrenComponents().get(0);
-    assertNotNull(button.getPropertyByTitle("text"));
-    assertNull(button.getPropertyByTitle("no such property"));
-  }
-
-  /**
-   * {@link ObjectInfo#getProperties()} should use broadcast
-   * {@link ObjectInfoAllProperties#invoke(ObjectInfo, List)}.
-   */
-  public void test_getProperties_allProperties() throws Exception {
-    final ContainerInfo panel =
-        parseContainer(
-            "// filler filler filler",
-            "public class Test extends JPanel {",
-            "  public Test() {",
-            "  }",
-            "}");
-    // initially "panel" has properties
-    assertThat(panel.getProperties()).isNotEmpty();
-    // add allProperties() listener
-    panel.addBroadcastListener(new ObjectInfoAllProperties() {
-      @Override
-      public void invoke(ObjectInfo object, List<Property> properties) throws Exception {
-        if (object == panel) {
-          properties.clear();
-        }
-      }
-    });
-    assertThat(panel.getProperties()).isEmpty();
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // "Text" property as title decorator
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  public void test_textInComponentTitle() throws Exception {
-    ContainerInfo panel =
-        parseContainer(
-            "class Test extends JPanel {",
-            "  Test() {",
-            "    add(new JButton());",
-            "    add(new JButton('theText'));",
-            "  }",
-            "}");
-    panel.refresh();
-    // prepare buttons
-    ComponentInfo button_1 = panel.getChildrenComponents().get(0);
-    ComponentInfo button_2 = panel.getChildrenComponents().get(1);
-    // do checks
-    assertEquals("(no variable)", ObjectsLabelProvider.INSTANCE.getText(button_1));
-    assertEquals("(no variable) - \"theText\"", ObjectsLabelProvider.INSTANCE.getText(button_2));
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // JavaInfo visibility in tree/GEF
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for using <code>"visible"</code>, <code>"visible.inTree"</code>,
-   * <code>"visible.inGraphical"</code>.
-   */
-  public void test_visibility() throws Exception {
-    // create fixture
-    createModelType(
-        "test",
-        "MyPanel.java",
-        getTestSource(
-            "public class MyPanel extends JPanel {",
-            "  public MyPanel() {",
-            "    add(getA());",
-            "    add(getB());",
-            "    add(getC());",
-            "    add(getD());",
-            "  }",
-            "  private final JButton m_A = new JButton();",
-            "  private final JButton m_B = new JButton();",
-            "  private final JButton m_C = new JButton();",
-            "  private final JButton m_D = new JButton();",
-            "  public JButton getA() {",
-            "    return m_A;",
-            "  }",
-            "  public JButton getB() {",
-            "    return m_B;",
-            "  }",
-            "  public JButton getC() {",
-            "    return m_C;",
-            "  }",
-            "  public JButton getD() {",
-            "    return m_D;",
-            "  }",
-            "}"));
-    setFileContentSrc(
-        "test/MyPanel.getA.wbp-component.xml",
-        getSourceDQ(
-            "<?xml version='1.0' encoding='UTF-8'?>",
-            "<component xmlns='http://www.eclipse.org/wb/WBPComponent'>",
-            "  <parameters>",
-            "    <parameter name='visible.inTree'>true</parameter>",
-            "    <parameter name='visible.inGraphical'>true</parameter>",
-            "  </parameters>",
-            "</component>"));
-    setFileContentSrc(
-        "test/MyPanel.getB.wbp-component.xml",
-        getSourceDQ(
-            "<?xml version='1.0' encoding='UTF-8'?>",
-            "<component xmlns='http://www.eclipse.org/wb/WBPComponent'>",
-            "  <parameters>",
-            "    <parameter name='visible.inTree'>false</parameter>",
-            "  </parameters>",
-            "</component>"));
-    setFileContentSrc(
-        "test/MyPanel.getC.wbp-component.xml",
-        getSourceDQ(
-            "<?xml version='1.0' encoding='UTF-8'?>",
-            "<component xmlns='http://www.eclipse.org/wb/WBPComponent'>",
-            "  <parameters>",
-            "    <parameter name='visible.inGraphical'>false</parameter>",
-            "  </parameters>",
-            "</component>"));
-    setFileContentSrc(
-        "test/MyPanel.getD.wbp-component.xml",
-        getSourceDQ(
-            "<?xml version='1.0' encoding='UTF-8'?>",
-            "<component xmlns='http://www.eclipse.org/wb/WBPComponent'>",
-            "  <parameters>",
-            "    <parameter name='visible'>false</parameter>",
-            "  </parameters>",
-            "</component>"));
-    waitForAutoBuild();
-    // parse
-    ContainerInfo panel =
-        parseContainer(
-            "// filler filler filler",
-            "public class Test extends MyPanel {",
-            "  public Test() {",
-            "  }",
-            "}");
-    assertHierarchy(
-        "{this: test.MyPanel} {this} {}",
-        "  {implicit-layout: java.awt.FlowLayout} {implicit-layout} {}",
-        "  {method: public javax.swing.JButton test.MyPanel.getA()} {property} {}",
-        "  {method: public javax.swing.JButton test.MyPanel.getB()} {property} {}",
-        "  {method: public javax.swing.JButton test.MyPanel.getC()} {property} {}",
-        "  {method: public javax.swing.JButton test.MyPanel.getD()} {property} {}");
-    List<ComponentInfo> childrenComponents = panel.getChildrenComponents();
-    ComponentInfo buttonA = childrenComponents.get(0);
-    ComponentInfo buttonB = childrenComponents.get(1);
-    ComponentInfo buttonC = childrenComponents.get(2);
-    ComponentInfo buttonD = childrenComponents.get(3);
-    // check visibility
-    assertThat(childrenComponents).contains(buttonA, buttonB, buttonC, buttonD);
-    assertThat(panel.getPresentation().getChildrenTree()).containsOnly(buttonA, buttonC);
-    assertThat(panel.getPresentation().getChildrenGraphical()).containsOnly(buttonA, buttonB);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // setObject()
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test that {@link JavaInfo#setObject(Object)} sends notification that is used by
-   * {@link FieldAccessor} to fetch default value, but only first time during refresh().
-   */
-  public void test_setObject_FieldAccessor_notification() throws Exception {
-    setFileContentSrc(
-        "test/MyPanel.java",
-        getTestSource(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "public class MyPanel extends JPanel {",
-            "  public int foo = 1;",
-            "}"));
-    waitForAutoBuild();
-    // parse
-    ContainerInfo panel =
-        parseContainer(
-            "// filler filler filler",
-            "public class Test extends MyPanel {",
-            "  public Test() {",
-            "  }",
-            "}");
-    panel.refresh();
-    Property fooProperty = panel.getPropertyByTitle("foo");
-    // default value is "1"
-    assertEquals(1, fooProperty.getValue());
-    // set new Object, with updated "foo"
-    {
-      Object panelObject = panel.getObject();
-      ReflectionUtils.setField(panelObject, "foo", 2);
-      panel.setObject(panelObject);
-    }
-    // default value is still "1", because we notify FieldAccessor only first time in refresh()
-    assertEquals(1, fooProperty.getValue());
-  }
-
-  /**
-   * Test that {@link JavaInfo#setObject(Object)} sends notification that is used by
-   * {@link SetterAccessor} to fetch default value, but only first time during refresh().
-   */
-  public void test_setObject_SetterAccessor_notification() throws Exception {
-    setFileContentSrc(
-        "test/MyPanel.java",
-        getTestSource(
-            "public class MyPanel extends JPanel {",
-            "  private int foo = 1;",
-            "  public int getFoo() {",
-            "    return foo;",
-            "  }",
-            "  public void setFoo(int foo) {",
-            "    this.foo = foo;",
-            "  }",
-            "}"));
-    waitForAutoBuild();
-    // parse
-    ContainerInfo panel =
-        parseContainer(
-            "// filler filler filler",
-            "public class Test extends MyPanel {",
-            "  public Test() {",
-            "  }",
-            "}");
-    panel.refresh();
-    Property fooProperty = panel.getPropertyByTitle("foo");
-    // default value is "1"
-    assertEquals(1, fooProperty.getValue());
-    // set new Object, with updated "foo"
-    {
-      Object panelObject = panel.getObject();
-      ReflectionUtils.invokeMethod(panelObject, "setFoo(int)", 2);
-      panel.setObject(panelObject);
-    }
-    // default value is still "1", because we notify SetterAccessor only first time in refresh()
-    assertEquals(1, fooProperty.getValue());
-  }
-
-  /**
-   * Test that "object ready" notification is sent when allowed by MVEL script.
-   * <p>
-   * In this case we allow when there is at least two components on our {@link JPanel}.
-   */
-  public void test_setObject_objectReadyValidator() throws Exception {
-    setFileContentSrc(
-        "test/MyPanel.java",
-        getTestSource(
-            "public class MyPanel extends JPanel {",
-            "  public int getFoo() {",
-            "    return getComponentCount();",
-            "  }",
-            "  public void setFoo(int foo) {",
-            "  }",
-            "}"));
-    setFileContentSrc(
-        "test/MyPanel.wbp-component.xml",
-        getSourceDQ(
-            "<?xml version='1.0' encoding='UTF-8'?>",
-            "<component xmlns='http://www.eclipse.org/wb/WBPComponent'>",
-            "  <parameters>",
-            "    <parameter name='objectReadyValidator'>object.componentCount >= 2</parameter>",
-            "  </parameters>",
-            "</component>"));
-    waitForAutoBuild();
-    // parse
-    ContainerInfo panel =
-        parseContainer(
-            "public class Test extends MyPanel {",
-            "  public Test() {",
-            "    {",
-            "      JButton button_1 = new JButton();",
-            "      add(button_1);",
-            "    }",
-            "    {",
-            "      JButton button_2 = new JButton();",
-            "      add(button_2);",
-            "    }",
-            "    {",
-            "      JButton button_3 = new JButton();",
-            "      add(button_3);",
-            "    }",
-            "  }",
-            "}");
-    panel.refresh();
-    Property fooProperty = panel.getPropertyByTitle("foo");
-    // default value is "2"
-    assertEquals(2, fooProperty.getValue());
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // getChildByObject()
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link JavaInfo#getChildByObject(Object)}.
-   */
-  public void test_getChildByObject() throws Exception {
-    ContainerInfo panel =
-        parseContainer(
-            "class Test extends JPanel {",
-            "  Test() {",
-            "    add(new JButton());",
-            "  }",
-            "}");
-    ComponentInfo button = panel.getChildrenComponents().get(0);
-    panel.refresh();
-    // check
-    assertSame(panel, panel.getChildByObject(panel.getObject()));
-    assertSame(button, panel.getChildByObject(button.getObject()));
-    assertNull(panel.getChildByObject(this));
-    assertNull(panel.getChildByObject(null));
-  }
-
-  /**
-   * Test for {@link JavaInfo#getChildByObject(Object)}.
-   */
-  public void test_getChildByObject_absoluteLayout() throws Exception {
-    ContainerInfo panel =
-        parseContainer(
-            "class Test extends JPanel {",
-            "  Test() {",
-            "    setLayout(null);",
-            "  }",
-            "}");
-    panel.refresh();
-    // check
-    assertSame(panel, panel.getChildByObject(panel.getObject()));
-    assertNull(panel.getChildByObject(null));
-  }
-
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // "refresh_afterCreate" script
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test that during "refresh" the script "refresh_afterCreate" is executed.
-   */
-  public void test_refresh_afterCreate_script() throws Exception {
-    setFileContentSrc(
-        "test/MyButton.java",
-        getTestSource(
-            "// filler filler filler filler filler",
-            "// filler filler filler filler filler",
-            "// filler filler filler",
-            "public class MyButton extends JButton {",
-            "}"));
-    setFileContentSrc(
-        "test/MyButton.wbp-component.xml",
-        getSourceDQ(
-            "<?xml version='1.0' encoding='UTF-8'?>",
-            "<component xmlns='http://www.eclipse.org/wb/WBPComponent'>",
-            "  <parameters>",
-            "    <parameter name='refresh_afterCreate'>object.setEnabled(false)</parameter>",
-            "  </parameters>",
-            "</component>"));
-    waitForAutoBuild();
-    //
-    ContainerInfo panel =
-        parseContainer(
-            "public class Test extends JPanel {",
-            "  public Test() {",
-            "    {",
-            "      MyButton button = new MyButton();",
-            "      add(button);",
-            "    }",
-            "  }",
-            "}");
-    panel.refresh();
-    //
-    ComponentInfo button = getJavaInfoByName("button");
-    Component buttonObject = (Component) button.getObject();
-    assertFalse(buttonObject.isEnabled());
-  }
-
-  /**
-   * Test that for placeholder the script "refresh_afterCreate" is not executed.
-   */
-  public void test_refresh_afterCreate_script_placeholder() throws Exception {
-    setFileContentSrc(
-        "test/MyButton.java",
-        getTestSource(
-            "// filler filler filler",
-            "public class MyButton extends JButton {",
-            "  public MyButton() {",
-            "    throw new IllegalStateException('actual');",
-            "  }",
-            "  public void foo() {",
-            "  }",
-            "}"));
-    setFileContentSrc(
-        "test/MyButton.wbp-component.xml",
-        getSource(
-            "<?xml version='1.0' encoding='UTF-8'?>",
-            "<component xmlns='http://www.eclipse.org/wb/WBPComponent'>",
-            "  <parameters>",
-            "    <parameter name='refresh_afterCreate'>System.out.println(0); object.foo(); System.out.println(1);</parameter>",
-            "  </parameters>",
-            "</component>"));
-    waitForAutoBuild();
-    //
-    ContainerInfo panel =
-        parseContainer(
-            "public class Test extends JPanel {",
-            "  public Test() {",
-            "    {",
-            "      MyButton button = new MyButton();",
-            "      add(button);",
-            "    }",
-            "  }",
-            "}");
-    panel.refresh();
-    //
-    ComponentInfo button = getJavaInfoByName("button");
-    assertTrue(button.isPlaceholder());
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Exit zone :-) XXX
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void _test_exit() throws Exception {
+		System.exit(0);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// toString()
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Simple {@link JPanel} without any related nodes.
+	 */
+	public void test_toString_0() throws Exception {
+		ContainerInfo panel =
+				parseContainer(
+						"// filler filler filler",
+						"public class Test extends JPanel {",
+						"  public Test() {",
+						"  }",
+						"}");
+		assertEquals("{this: javax.swing.JPanel} {this} {}", panel.toString());
+	}
+
+	/**
+	 * {@link JPanel} with related nodes.
+	 */
+	public void test_toString_1() throws Exception {
+		ContainerInfo panel =
+				parseContainer(
+						"public class Test {",
+						"  public static void main(String[] args) {",
+						"    JPanel panel = new JPanel();",
+						"    panel.setEnabled(true);",
+						"  }",
+						"}");
+		assertEquals(
+				"{new: javax.swing.JPanel} {local-unique: panel} {/new JPanel()/ /panel.setEnabled(true)/}",
+				panel.toString());
+	}
+
+	/**
+	 * {@link JPanel} with child.
+	 */
+	public void test_toString_2() throws Exception {
+		ContainerInfo panel =
+				parseContainer(
+						"public class Test extends JPanel {",
+						"  public Test() {",
+						"    JButton button = new JButton();",
+						"    add(button);",
+						"  }",
+						"}");
+		ComponentInfo button = panel.getChildrenComponents().get(0);
+		assertEquals("{this: javax.swing.JPanel} {this} {/add(button)/}", panel.toString());
+		assertEquals(
+				"{new: javax.swing.JButton} {local-unique: button} {/new JButton()/ /add(button)/}",
+				button.toString());
+	}
+
+	/**
+	 * Component created as {@link AnonymousClassDeclaration}.
+	 */
+	public void test_toString_3() throws Exception {
+		ContainerInfo panel =
+				parseContainer(
+						"public class Test extends JPanel {",
+						"  public Test() {",
+						"    JButton button = new JButton() {};",
+						"    add(button);",
+						"  }",
+						"}");
+		ComponentInfo button = panel.getChildrenComponents().get(0);
+		assertEquals(
+				"{new: javax.swing.JButton} {local-unique: button} {/new JButton()/ /add(button)/}",
+				button.toString());
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// isRepresentedBy
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link JavaInfo#isRepresentedBy(ASTNode)}.<br>
+	 * Request that should be handled by {@link CreationSupport}.
+	 */
+	public void test_isRepresentedBy_CreationSupport() throws Exception {
+		ContainerInfo panel =
+				parseContainer(
+						"public class Test extends JPanel {",
+						"  Test() {",
+						"    add(new JButton());",
+						"  }",
+						"}");
+		ComponentInfo button = panel.getChildrenComponents().get(0);
+		ExpressionStatement statement = (ExpressionStatement) getStatement(panel, 0);
+		MethodInvocation invocation = (MethodInvocation) statement.getExpression();
+		Expression creationExpression = DomGenerics.arguments(invocation).get(0);
+		assertTrue(button.isRepresentedBy(creationExpression));
+	}
+
+	/**
+	 * Test for {@link JavaInfo#isRepresentedBy(ASTNode)}.<br>
+	 * Request using local unique variable, assigned in {@link VariableDeclarationFragment}.
+	 */
+	public void test_isRepresentedBy_localUniqueVariableDeclaration() throws Exception {
+		ContainerInfo panel =
+				parseContainer(
+						"public class Test extends JPanel {",
+						"  Test() {",
+						"    JButton button = new JButton();",
+						"    add(button);",
+						"  }",
+						"}");
+		ComponentInfo button = panel.getChildrenComponents().get(0);
+		VariableDeclarationStatement statement = (VariableDeclarationStatement) getStatement(panel, 0);
+		VariableDeclarationFragment fragment = DomGenerics.fragments(statement).get(0);
+		assertEquals("button", fragment.getName().getIdentifier());
+		assertTrue(button.isRepresentedBy(fragment.getName()));
+	}
+
+	/**
+	 * Test for {@link JavaInfo#isRepresentedBy(ASTNode)}.<br>
+	 * Request using local unique variable, assigned using {@link Assignment}.
+	 */
+	public void test_isRepresentedBy_localUniqueVariableAssignment() throws Exception {
+		ContainerInfo panel =
+				parseContainer(
+						"public class Test extends JPanel {",
+						"  Test() {",
+						"    JButton button;",
+						"    button = new JButton();",
+						"    add(button);",
+						"  }",
+						"}");
+		ComponentInfo button = panel.getChildrenComponents().get(0);
+		// test left side of Assignment
+		{
+			ExpressionStatement statement = (ExpressionStatement) getStatement(panel, 1);
+			Assignment assignment = (Assignment) statement.getExpression();
+			assertEquals("button", ((SimpleName) assignment.getLeftHandSide()).getIdentifier());
+			assertTrue(button.isRepresentedBy(assignment.getLeftHandSide()));
+		}
+	}
+
+	/**
+	 * Test for {@link JavaInfo#isRepresentedBy(ASTNode)}.<br>
+	 * Request using {@link FieldInitializerVariableSupport}.
+	 */
+	public void test_isRepresentedBy_fieldInitializer() throws Exception {
+		ContainerInfo panel =
+				parseContainer(
+						"public class Test extends JPanel {",
+						"  private JButton button = new JButton();",
+						"  Test() {",
+						"    add(button);",
+						"  }",
+						"}");
+		ComponentInfo button = panel.getChildrenComponents().get(0);
+		//
+		FieldDeclaration fieldDeclaration = JavaInfoUtils.getTypeDeclaration(panel).getFields()[0];
+		VariableDeclarationFragment fragment = DomGenerics.fragments(fieldDeclaration).get(0);
+		assertEquals("button", fragment.getName().getIdentifier());
+		assertTrue(button.isRepresentedBy(fragment.getName()));
+	}
+
+	/**
+	 * Test for {@link JavaInfo#isRepresentedBy(ASTNode)}.<br>
+	 * Request using {@link FieldUniqueVariableSupport}, assigned using {@link Assignment}.
+	 */
+	public void test_isRepresentedBy_fieldUnique() throws Exception {
+		ContainerInfo panel =
+				parseContainer(
+						"public class Test extends JPanel {",
+						"  private JButton button;",
+						"  Test() {",
+						"    button = new JButton();",
+						"    add(button);",
+						"  }",
+						"}");
+		ComponentInfo button = panel.getChildrenComponents().get(0);
+		// test left side of Assignment
+		{
+			ExpressionStatement statement = (ExpressionStatement) getStatement(panel, 0);
+			Assignment assignment = (Assignment) statement.getExpression();
+			assertEquals("button", ((SimpleName) assignment.getLeftHandSide()).getIdentifier());
+			assertTrue(button.isRepresentedBy(assignment.getLeftHandSide()));
+		}
+	}
+
+	/**
+	 * Test for {@link TryStatement} and
+	 * {@link JavaInfo#isRepresentedBy(org.eclipse.jdt.core.dom.ASTNode)} with
+	 * {@link SingleVariableDeclaration} in {@link CatchClause}.
+	 */
+	public void test_isRepresentedBy_referenceInTryStatement() throws Exception {
+		ContainerInfo panel =
+				parseContainer(
+						"class Test extends JPanel {",
+						"  JButton button = new JButton();",
+						"  Test() {",
+						"    init();",
+						"    add(button);",
+						"  }",
+						"  void init() {",
+						"    try {",
+						"      button.setEnabled(false);",
+						"    } catch (Throwable e) {",
+						"      showError(e);",
+						"    }",
+						"  }",
+						"  void showError(Throwable e) {",
+						"    System.out.println(e);",
+						"  }",
+						"}");
+		assertEquals(1, panel.getChildrenComponents().size());
+		ComponentInfo button = panel.getChildrenComponents().get(0);
+		assertTrue(button.getDescription().getComponentClass() == JButton.class);
+	}
+
+	/**
+	 * Test for {@link JavaInfo#isRepresentedBy(ASTNode)}.<br>
+	 * Use {@link ParenthesizedExpression}.
+	 */
+	public void test_isRepresentedBy_ParenthesizedExpression() throws Exception {
+		ContainerInfo panel =
+				parseContainer(
+						"public class Test extends JPanel {",
+						"  Test() {",
+						"    add((new JButton()));",
+						"  }",
+						"}");
+		ComponentInfo button = panel.getChildrenComponents().get(0);
+		//
+		int index = m_lastEditor.getSource().indexOf("(new");
+		ASTNode node = m_lastEditor.getEnclosingNode(index);
+		assertTrue(button.isRepresentedBy(node));
+	}
+
+	/**
+	 * Test for {@link JavaInfo#isRepresentedBy(ASTNode)}.<br>
+	 * Use {@link CastExpression}.
+	 */
+	public void test_isRepresentedBy_CastExpression() throws Exception {
+		ContainerInfo panel =
+				parseContainer(
+						"public class Test extends JPanel {",
+						"  Test() {",
+						"    add((Component) new JButton());",
+						"  }",
+						"}");
+		ComponentInfo button = panel.getChildrenComponents().get(0);
+		//
+		int index = m_lastEditor.getSource().indexOf("(Component");
+		ASTNode node = m_lastEditor.getEnclosingNode(index);
+		assertTrue(button.isRepresentedBy(node));
+	}
+
+	/**
+	 * Test for {@link JavaInfo#isRepresentedBy(ASTNode)}.
+	 * <p>
+	 * {@link FieldDeclaration} without assignment.
+	 */
+	public void test_isRepresentedBy_emptyField() throws Exception {
+		ContainerInfo panel =
+				parseContainer(
+						"public class Test extends JPanel {",
+						"  private JButton button;",
+						"  public Test() {",
+						"    System.out.println(button);",
+						"  }",
+						"}");
+		//
+		ASTNode node = m_lastEditor.getEnclosingNode("button)");
+		assertFalse(panel.isRepresentedBy(node));
+	}
+
+	/**
+	 * Test for {@link JavaInfo#isRepresentedBy(ASTNode)}.
+	 * <p>
+	 * {@link FieldDeclaration} with {@link NullLiteral} initializer.
+	 */
+	public void test_isRepresentedBy_nullField() throws Exception {
+		ContainerInfo panel =
+				parseContainer(
+						"public class Test extends JPanel {",
+						"  private JButton button = null;",
+						"  public Test() {",
+						"    System.out.println(button);",
+						"  }",
+						"}");
+		//
+		ASTNode node = m_lastEditor.getEnclosingNode("button)");
+		assertFalse(panel.isRepresentedBy(node));
+	}
+
+	/**
+	 * Test for {@link JavaInfo#isRepresentedBy(ASTNode)}.
+	 * <p>
+	 * {@link SingleVariableDeclaration} parameter and {@link ThisExpression}.
+	 */
+	public void test_isRepresentedBy_SingleVariableDeclaration() throws Exception {
+		ContainerInfo panel =
+				parseContainer(
+						"public class Test extends JPanel {",
+						"  public Test() {",
+						"    createContents(this);",
+						"  }",
+						"  private void createContents(JPanel parent) {",
+						"    System.out.println(parent);",
+						"  }",
+						"}");
+		// usage of "parent"
+		{
+			SimpleName node = getNode("parent);");
+			assertTrue(panel.isRepresentedBy(node));
+		}
+		// declaration of "parent"
+		{
+			SimpleName node = getNode("parent) {", SimpleName.class);
+			assertTrue(panel.isRepresentedBy(node));
+		}
+	}
+
+	/**
+	 * Test for {@link JavaInfo#isRepresentedBy(ASTNode)}.
+	 * <p>
+	 * {@link SingleVariableDeclaration} parameter.
+	 */
+	public void test_isRepresentedBy_SingleVariableDeclaration_moreThanOneInvocation()
+			throws Exception {
+		ContainerInfo panel =
+				parseContainer(
+						"public class Test extends JPanel {",
+						"  public Test() {",
+						"    createContents(this, 0);",
+						"    createContents(this, 1);",
+						"  }",
+						"  private void createContents(JPanel parent, int value) {",
+						"    System.out.println(parent);",
+						"  }",
+						"}");
+		// usage of "parent"
+		{
+			SimpleName node = getNode("parent);");
+			assertTrue(panel.isRepresentedBy(node));
+		}
+	}
+
+	/**
+	 * Test for {@link JavaInfo#isRepresentedBy(ASTNode)}.
+	 */
+	public void test_isRepresentedBy_ConstructorInvocation_argument() throws Exception {
+		ContainerInfo panel =
+				parseContainer(
+						"public class Test extends JPanel {",
+						"  public Test() {",
+						"    this(new JButton());",
+						"  }",
+						"  public Test(Component child) {",
+						"    add(child);",
+						"  }",
+						"}");
+		assertHierarchy(
+				"{this: javax.swing.JPanel} {this} {/add(child)/}",
+				"  {implicit-layout: java.awt.FlowLayout} {implicit-layout} {}",
+				"  {new: javax.swing.JButton} {empty} {/new JButton()/ /add(child)/}");
+		ComponentInfo button = panel.getChildrenComponents().get(0);
+		// creation of JButton
+		{
+			ClassInstanceCreation node =
+					(ClassInstanceCreation) m_lastEditor.getEnclosingNode("new JButton()");
+			assertTrue(button.isRepresentedBy(node));
+		}
+		// usage of JButton
+		{
+			SimpleName node = (SimpleName) m_lastEditor.getEnclosingNode("child);");
+			assertTrue(button.isRepresentedBy(node));
+		}
+	}
+
+	/**
+	 * Test for {@link JavaInfo#isRepresentedBy(ASTNode)}.
+	 * <p>
+	 * Attempt to ask using {@link ASTNode} from recursive method.
+	 */
+	public void test_isRepresentedBy_recursion() throws Exception {
+		ContainerInfo panel =
+				parseContainer(
+						"public class Test extends JPanel {",
+						"  public Test() {",
+						"    System.out.println(recursiveMethod(new Object()));",
+						"  }",
+						"  private Object recursiveMethod(Object o) {",
+						"    o = recursiveMethod(o);",
+						"    return o;",
+						"  }",
+						"}");
+		//
+		ASTNode node = m_lastEditor.getEnclosingNode("recursiveMethod(new");
+		assertFalse(panel.isRepresentedBy(node));
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Variable
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test that {@link JavaInfo#setVariableSupport(VariableSupport)} sends
+	 * {@link JavaInfoSetVariable} broadcast.
+	 */
+	public void test_setVariableBroadcast() throws Exception {
+		parseContainer(
+				"public class Test extends JPanel {",
+				"  Test() {",
+				"    JButton button = new JButton();",
+				"    add(button);",
+				"  }",
+				"}");
+		final ComponentInfo button = getJavaInfoByName("button");
+		final VariableSupport expected_oldVariable = button.getVariableSupport();
+		final VariableSupport expected_newVariable;
+		{
+			SimpleName name = (SimpleName) m_lastEditor.getEnclosingNode("button =");
+			expected_newVariable = new LocalUniqueVariableSupport(button, name);
+		}
+		//
+		final AtomicInteger count = new AtomicInteger();
+		button.addBroadcastListener(new JavaInfoSetVariable() {
+			@Override
+			public void invoke(JavaInfo javaInfo, VariableSupport oldVariable, VariableSupport newVariable)
+					throws Exception {
+				assertSame(button, javaInfo);
+				assertSame(expected_oldVariable, oldVariable);
+				assertSame(expected_newVariable, newVariable);
+				count.incrementAndGet();
+			}
+		});
+		button.setVariableSupport(expected_newVariable);
+		assertEquals(1, count.get());
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// addExpressionStatement()
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link JavaInfo#addExpressionStatement(String)}.
+	 */
+	public void test_addExpressionStatement_1_local() throws Exception {
+		JavaInfo panel =
+				parseContainer(
+						"class Test {",
+						"  public static void main(String args[]) {",
+						"    JPanel panel = new JPanel();",
+						"  }",
+						"}");
+		// initial checks
+		assertRelatedNodes(panel, new String[]{"new JPanel()"});
+		// start edit and never finish it to avoid refresh()
+		panel.startEdit();
+		// add statement
+		MethodInvocation invocation;
+		{
+			String source = TemplateUtils.format("{0}.setEnabled(false)", panel);
+			invocation = (MethodInvocation) panel.addExpressionStatement(source);
+			assertNotNull(invocation);
+			assertEditor(
+					"class Test {",
+					"  public static void main(String args[]) {",
+					"    JPanel panel = new JPanel();",
+					"    panel.setEnabled(false);",
+					"  }",
+					"}");
+			assertRelatedNodes(panel, new String[]{"new JPanel()", "panel.setEnabled(false)"});
+		}
+		// remove statement
+		{
+			m_lastEditor.removeEnclosingStatement(invocation);
+			assertEditor(
+					getTestSource(
+							"class Test {",
+							"  public static void main(String args[]) {",
+							"    JPanel panel = new JPanel();",
+							"  }",
+							"}"),
+					m_lastEditor);
+			assertRelatedNodes(panel, new String[]{"new JPanel()"});
+		}
+	}
+
+	/**
+	 * Test for {@link JavaInfo#addExpressionStatement(String, Map)}.
+	 */
+	public void test_addExpressionStatement_template() throws Exception {
+		ContainerInfo panel =
+				parseContainer(
+						"// filler filler filler",
+						"public class Test extends JPanel {",
+						"  public Test() {",
+						"  }",
+						"}");
+		// add statement
+		String expressionSource = TemplateUtils.format("{0}.setEnabled(true)", panel);
+		panel.addExpressionStatement(expressionSource);
+		assertEditor(
+				"// filler filler filler",
+				"public class Test extends JPanel {",
+				"  public Test() {",
+				"    setEnabled(true);",
+				"  }",
+				"}");
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Replace expression
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link JavaInfo#replaceExpression(Expression, String)}.
+	 */
+	public void test_replaceExpression() throws Exception {
+		ContainerInfo panel =
+				parseContainer(
+						"public class Test extends JPanel {",
+						"  public Test() {",
+						"    JLabel label = new JLabel();",
+						"    add(label);",
+						"    //",
+						"    JButton button_1 = new JButton();",
+						"    add(button_1);",
+						"    //",
+						"    JButton button_2 = new JButton();",
+						"    add(button_2);",
+						"    //",
+						"    label.setLabelFor(button_1);",
+						"  }",
+						"}");
+		ComponentInfo label = panel.getChildrenComponents().get(0);
+		ComponentInfo button_2 = panel.getChildrenComponents().get(2);
+		//
+		MethodInvocation invocation = label.getMethodInvocation("setLabelFor(java.awt.Component)");
+		Expression expression = DomGenerics.arguments(invocation).get(0);
+		label.replaceExpression(expression, TemplateUtils.getExpression(button_2));
+		assertEditor(
+				"public class Test extends JPanel {",
+				"  public Test() {",
+				"    JLabel label = new JLabel();",
+				"    add(label);",
+				"    //",
+				"    JButton button_1 = new JButton();",
+				"    add(button_1);",
+				"    //",
+				"    JButton button_2 = new JButton();",
+				"    add(button_2);",
+				"    //",
+				"    label.setLabelFor(button_2);",
+				"  }",
+				"}");
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// MethodInvocation
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_getMethodInvocations() throws Exception {
+		JavaInfo panel =
+				parseContainer(
+						"class Test {",
+						"  public static void main(String args[]) {",
+						"    JPanel panel = new JPanel();",
+						"    panel.setEnabled(false);",
+						"    panel.setEnabled(true);",
+						"  }",
+						"}");
+		// getMethodInvocations
+		{
+			assertEquals(0, panel.getMethodInvocations("setVisible(boolean)").size());
+			//
+			List<MethodInvocation> invocations = panel.getMethodInvocations("setEnabled(boolean)");
+			assertEquals(2, invocations.size());
+			assertEquals("panel.setEnabled(false)", m_lastEditor.getSource(invocations.get(0)));
+			assertEquals("panel.setEnabled(true)", m_lastEditor.getSource(invocations.get(1)));
+		}
+		// getMethodInvocation
+		{
+			assertNull(panel.getMethodInvocation("setVisible(boolean)"));
+			{
+				MethodInvocation invocation = panel.getMethodInvocation("setEnabled(boolean)");
+				assertNotNull(invocation);
+				assertEquals("setEnabled", invocation.getName().getIdentifier());
+			}
+		}
+	}
+
+	/**
+	 * Test for {@link JavaInfo#getMethodInvocations()}. For code like
+	 * <code>new Component().setFoo()</code> invocation <code>setFoo()</code> also should be added.
+	 */
+	public void test_getMethodInvocations_all_emptyInvocation() throws Exception {
+		setFileContentSrc(
+				"test/MyButton.java",
+				getTestSource(
+						"public class MyButton extends JButton {",
+						"  public MyButton(Container container) {",
+						"    container.add(this);",
+						"  }",
+						"  public void setFoo(boolean value) {",
+						"  }",
+						"}"));
+		setFileContentSrc(
+				"test/MyButton.wbp-component.xml",
+				getSourceDQ(
+						"<?xml version='1.0' encoding='UTF-8'?>",
+						"<component xmlns='http://www.eclipse.org/wb/WBPComponent'>",
+						"  <constructors>",
+						"    <constructor>",
+						"      <parameter type='java.awt.Container' parent='true'/>",
+						"    </constructor>",
+						"  </constructors>",
+						"</component>"));
+		waitForAutoBuild();
+		//
+		ContainerInfo panel =
+				parseContainer(
+						"public class Test extends JPanel {",
+						"  public Test() {",
+						"    new MyButton(this).setFoo(false);",
+						"  }",
+						"}");
+		ComponentInfo button = panel.getChildrenComponents().get(0);
+		List<MethodInvocation> invocations = button.getMethodInvocations();
+		assertThat(invocations).isNotEmpty();
+	}
+
+	public void test_removeMethodInvocations() throws Exception {
+		JavaInfo panel =
+				parseContainer(
+						"class Test {",
+						"  public static void main(String args[]) {",
+						"    JPanel panel = new JPanel();",
+						"    panel.setEnabled(false);",
+						"    panel.setEnabled(true);",
+						"  }",
+						"}");
+		panel.removeMethodInvocations("setEnabled(boolean)");
+		assertEditor(
+				"class Test {",
+				"  public static void main(String args[]) {",
+				"    JPanel panel = new JPanel();",
+				"  }",
+				"}");
+	}
+
+	/**
+	 * Test for {@link JavaInfo#addMethodInvocation(String, String, String[])}.
+	 */
+	public void test_addMethodInvocation() throws Exception {
+		JavaInfo panel =
+				parseContainer(
+						"public class Test {",
+						"  public static void main(String args[]) {",
+						"    JPanel panel = new JPanel();",
+						"  }",
+						"}");
+		assertRelatedNodes(panel, new String[]{"new JPanel()"});
+		//
+		panel.addMethodInvocation("setSize(int,int)", "200, 100");
+		assertEditor(
+				"public class Test {",
+				"  public static void main(String args[]) {",
+				"    JPanel panel = new JPanel();",
+				"    panel.setSize(200, 100);",
+				"  }",
+				"}");
+		assertRelatedNodes(panel, new String[]{"new JPanel()", "panel.setSize(200, 100)"});
+	}
+
+	/**
+	 * Test for {@link JavaInfo#addMethodInvocation(StatementTarget, String, String)}.
+	 */
+	public void test_addMethodInvocation_withTarget() throws Exception {
+		JavaInfo panel =
+				parseContainer(
+						"public class Test {",
+						"  public static void main(String args[]) {",
+						"    JPanel panel = new JPanel();",
+						"    panel.setEnabled(false);",
+						"  }",
+						"}");
+		assertRelatedNodes(panel, new String[]{"new JPanel()", "panel.setEnabled(false)"});
+		// prepare target
+		StatementTarget target;
+		{
+			MethodInvocation invocation = panel.getMethodInvocation("setEnabled(boolean)");
+			target = new StatementTarget(AstNodeUtils.getEnclosingStatement(invocation), false);
+		}
+		//
+		panel.addMethodInvocation(target, "setSize(int,int)", "200, 100");
+		assertEditor(
+				"public class Test {",
+				"  public static void main(String args[]) {",
+				"    JPanel panel = new JPanel();",
+				"    panel.setEnabled(false);",
+				"    panel.setSize(200, 100);",
+				"  }",
+				"}");
+		assertRelatedNodes(panel, new String[]{
+				"new JPanel()",
+				"panel.setEnabled(false)",
+		"panel.setSize(200, 100)"});
+	}
+
+	/**
+	 * Test for {@link JavaInfo#addMethodInvocation(String, String, String[])}.
+	 */
+	public void test_addMethodInvocation_this() throws Exception {
+		JavaInfo panel =
+				parseContainer(
+						"// filler filler filler",
+						"public class Test extends JPanel {",
+						"  public Test() {",
+						"  }",
+						"}");
+		assertRelatedNodes(panel, new String[]{});
+		//
+		panel.addMethodInvocation("setSize(int,int)", "200, 100");
+		assertEditor(
+				"// filler filler filler",
+				"public class Test extends JPanel {",
+				"  public Test() {",
+				"    setSize(200, 100);",
+				"  }",
+				"}");
+		assertRelatedNodes(panel, new String[]{"setSize(200, 100)"});
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Field assignment
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link JavaInfo#getFieldAssignments()}.
+	 */
+	public void test_getAllFieldAssignments() throws Exception {
+		createTypeDeclaration(
+				"test",
+				"MyButton.java",
+				getTestSource(
+						"public class MyButton extends JButton {",
+						"  public int m_value1;",
+						"  public int m_value2;",
+						"}"));
+		waitForAutoBuild();
+		// parse
+		ContainerInfo panel =
+				parseContainer(
+						"public class Test extends JPanel {",
+						"  public Test() {",
+						"    MyButton button = new MyButton();",
+						"    button.m_value1 = 1;",
+						"    button.m_value2 = 2;",
+						"    add(button);",
+						"  }",
+						"}");
+		ComponentInfo button = panel.getChildrenComponents().get(0);
+		// all assignments
+		List<Assignment> assignments = button.getFieldAssignments();
+		assertThat(assignments).hasSize(2);
+		assertEquals("button.m_value1 = 1", m_lastEditor.getSource(assignments.get(0)));
+		assertEquals("button.m_value2 = 2", m_lastEditor.getSource(assignments.get(1)));
+	}
+
+	/**
+	 * Test for {@link JavaInfo#getFieldAssignments(String)}.
+	 */
+	public void test_getFieldAssignments() throws Exception {
+		createTypeDeclaration(
+				"test",
+				"MyButton.java",
+				getTestSource(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"public class MyButton extends JButton {",
+						"  public int m_value;",
+						"}"));
+		waitForAutoBuild();
+		// parse
+		ContainerInfo panel =
+				parseContainer(
+						"public class Test extends JPanel {",
+						"  public Test() {",
+						"    MyButton button = new MyButton();",
+						"    button.m_value = 1;",
+						"    button.m_value = 2;",
+						"    add(button);",
+						"  }",
+						"}");
+		ComponentInfo button = panel.getChildrenComponents().get(0);
+		// no such field
+		assertThat(button.getFieldAssignments("noSuchField")).isEmpty();
+		// existing assignments
+		{
+			List<Assignment> assignments = button.getFieldAssignments("m_value");
+			assertThat(assignments).hasSize(2);
+			assertEquals("button.m_value = 1", m_lastEditor.getSource(assignments.get(0)));
+			assertEquals("button.m_value = 2", m_lastEditor.getSource(assignments.get(1)));
+		}
+	}
+
+	/**
+	 * Test for {@link JavaInfo#getFieldAssignments(String)}, using {@link FieldAccess}.
+	 */
+	public void test_getFieldAssignments_FieldAccess() throws Exception {
+		setFileContentSrc(
+				"test/MyButton.java",
+				getTestSource(
+						"public class MyButton extends JButton {",
+						"  public int m_value;",
+						"  public MyButton(Container container) {",
+						"    container.add(this);",
+						"  }",
+						"}"));
+		setFileContentSrc(
+				"test/MyButton.wbp-component.xml",
+				getSourceDQ(
+						"<?xml version='1.0' encoding='UTF-8'?>",
+						"<component xmlns='http://www.eclipse.org/wb/WBPComponent'>",
+						"  <constructors>",
+						"    <constructor>",
+						"      <parameter type='java.awt.Container' parent='true'/>",
+						"    </constructor>",
+						"  </constructors>",
+						"</component>"));
+		waitForAutoBuild();
+		// parse
+		ContainerInfo panel =
+				parseContainer(
+						"public class Test extends JPanel {",
+						"  public Test() {",
+						"    new MyButton(this).m_value = 1;",
+						"  }",
+						"}");
+		ComponentInfo button = panel.getChildrenComponents().get(0);
+		// no such field
+		assertThat(button.getFieldAssignments("noSuchField")).isEmpty();
+		// existing assignment
+		{
+			List<Assignment> assignments = button.getFieldAssignments("m_value");
+			assertThat(assignments).hasSize(1);
+			assertEquals("new MyButton(this).m_value = 1", m_lastEditor.getSource(assignments.get(0)));
+		}
+	}
+
+	/**
+	 * Test for {@link JavaInfo#getFieldAssignment(String)}.
+	 */
+	public void test_getFieldAssignment() throws Exception {
+		createTypeDeclaration(
+				"test",
+				"MyButton.java",
+				getTestSource(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"public class MyButton extends JButton {",
+						"  public int m_value;",
+						"}"));
+		waitForAutoBuild();
+		// parse
+		ContainerInfo panel =
+				parseContainer(
+						"public class Test extends JPanel {",
+						"  public Test() {",
+						"    MyButton button = new MyButton();",
+						"    button.m_value = 1;",
+						"    add(button);",
+						"  }",
+						"}");
+		ComponentInfo button = panel.getChildrenComponents().get(0);
+		// no such field
+		assertNull(button.getFieldAssignment("noSuchField"));
+		// existing assignment
+		{
+			Assignment assignment = button.getFieldAssignment("m_value");
+			assertEquals("button.m_value = 1", m_lastEditor.getSource(assignment));
+		}
+	}
+
+	/**
+	 * Test for {@link JavaInfo#getFieldAssignment(String)}.<br>
+	 * Use {@link ParenthesizedExpression} as left hand side.
+	 */
+	public void test_getFieldAssignment_ParenthesizedExpression() throws Exception {
+		createTypeDeclaration(
+				"test",
+				"MyButton.java",
+				getTestSource(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"public class MyButton extends JButton {",
+						"  public int m_value;",
+						"}"));
+		waitForAutoBuild();
+		// parse
+		ContainerInfo panel =
+				parseContainer(
+						"public class Test extends JPanel {",
+						"  public Test() {",
+						"    MyButton button = new MyButton();",
+						"    (button).m_value = 1;",
+						"    add(button);",
+						"  }",
+						"}");
+		ComponentInfo button = panel.getChildrenComponents().get(0);
+		// existing assignment
+		{
+			Assignment assignment = button.getFieldAssignment("m_value");
+			assertNotNull(assignment);
+			assertEquals("(button).m_value = 1", m_lastEditor.getSource(assignment));
+		}
+	}
+
+	/**
+	 * Test for {@link JavaInfo#addFieldAssignment(String, String)}.
+	 */
+	public void test_addFieldAssignment() throws Exception {
+		createTypeDeclaration(
+				"test",
+				"MyButton.java",
+				getTestSource(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"public class MyButton extends JButton {",
+						"  public int m_value;",
+						"}"));
+		waitForAutoBuild();
+		// parse
+		ContainerInfo panel =
+				parseContainer(
+						"public class Test extends JPanel {",
+						"  public Test() {",
+						"    MyButton button = new MyButton();",
+						"    add(button);",
+						"  }",
+						"}");
+		ComponentInfo button = panel.getChildrenComponents().get(0);
+		// add assignment
+		Assignment assignment = button.addFieldAssignment("m_value", "1");
+		assertEquals("button.m_value = 1", m_lastEditor.getSource(assignment));
+		assertEditor(
+				"public class Test extends JPanel {",
+				"  public Test() {",
+				"    MyButton button = new MyButton();",
+				"    button.m_value = 1;",
+				"    add(button);",
+				"  }",
+				"}");
+	}
+
+	/**
+	 * Test for {@link JavaInfo#removeFieldAssignments(String)}.
+	 */
+	public void test_removeFieldAssignments_normal() throws Exception {
+		createTypeDeclaration(
+				"test",
+				"MyButton.java",
+				getTestSource(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"public class MyButton extends JButton {",
+						"  public int m_value;",
+						"}"));
+		waitForAutoBuild();
+		// parse
+		ContainerInfo panel =
+				parseContainer(
+						"public class Test extends JPanel {",
+						"  public Test() {",
+						"    MyButton button = new MyButton();",
+						"    button.m_value = 1;",
+						"    button.m_value = 2;",
+						"    add(button);",
+						"  }",
+						"}");
+		ComponentInfo button = panel.getChildrenComponents().get(0);
+		// remove assignments
+		button.removeFieldAssignments("m_value");
+		assertEditor(
+				"public class Test extends JPanel {",
+				"  public Test() {",
+				"    MyButton button = new MyButton();",
+				"    add(button);",
+				"  }",
+				"}");
+	}
+
+	/**
+	 * Test for {@link JavaInfo#removeFieldAssignments(String)}.
+	 */
+	public void test_removeFieldAssignments_withDangling() throws Exception {
+		createTypeDeclaration(
+				"test",
+				"MyButton.java",
+				getTestSource(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"public class MyButton extends JButton {",
+						"  public int m_value;",
+						"}"));
+		waitForAutoBuild();
+		// parse
+		ContainerInfo panel =
+				parseContainer(
+						"public class Test extends JPanel {",
+						"  public Test() {",
+						"    MyButton button = new MyButton();",
+						"    button.m_value = button.m_value = 1;",
+						"    add(button);",
+						"  }",
+						"}");
+		ComponentInfo button = panel.getChildrenComponents().get(0);
+		// remove assignments
+		button.removeFieldAssignments("m_value");
+		assertEditor(
+				"public class Test extends JPanel {",
+				"  public Test() {",
+				"    MyButton button = new MyButton();",
+				"    add(button);",
+				"  }",
+				"}");
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Delete
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_delete_1() throws Exception {
+		String[] lines =
+			{
+					"public class Test extends JPanel {",
+					"  // filler filler filler",
+					"  public Test() {",
+					"    add(new JButton());",
+					"  }",
+			"}"};
+		final ContainerInfo panel = parseContainer(lines);
+		assertHierarchy(
+				"{this: javax.swing.JPanel} {this} {/add(new JButton())/}",
+				"  {implicit-layout: java.awt.FlowLayout} {implicit-layout} {}",
+				"  {new: javax.swing.JButton} {empty} {/add(new JButton())/}");
+		final ComponentInfo button = panel.getChildrenComponents().get(0);
+		// wait for expected broadcasts
+		final boolean[] wasBefore = new boolean[]{false};
+		final boolean[] wasAfter = new boolean[]{false};
+		panel.addBroadcastListener(new ObjectInfoDelete() {
+			@Override
+			public void before(ObjectInfo parent, ObjectInfo child) throws Exception {
+				assertSame(panel, parent);
+				assertSame(button, child);
+				assertTrue(button.isDeleting());
+				assertFalse(button.isDeleted());
+				wasBefore[0] = true;
+			}
+
+			@Override
+			public void after(ObjectInfo parent, ObjectInfo child) throws Exception {
+				assertSame(panel, parent);
+				assertSame(button, child);
+				assertTrue(button.isDeleting());
+				assertTrue(button.isDeleted());
+				wasAfter[0] = true;
+			}
+		});
+		// do delete
+		button.delete();
+		assertFalse(button.isDeleting());
+		assertTrue(button.isDeleted());
+		assertEquals(
+				getTestSource(
+						"public class Test extends JPanel {",
+						"  // filler filler filler",
+						"  public Test() {",
+						"  }",
+						"}"),
+				m_lastEditor.getSource());
+		assertTrue(wasBefore[0]);
+		assertTrue(wasAfter[0]);
+		assertHierarchy(
+				"{this: javax.swing.JPanel} {this} {}",
+				"  {implicit-layout: java.awt.FlowLayout} {implicit-layout} {}");
+	}
+
+	/**
+	 * When we delete child and parent is created directly in association {@link Statement}, we should
+	 * materialize parent to prevent its removing with association.
+	 */
+	public void test_delete_whenNoParentVariable() throws Exception {
+		ContainerInfo panel =
+				parseContainer(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"public class Test {",
+						"  public static void main(String[] args) {",
+						"    JButton button = new JButton();",
+						"    new JPanel().add(button);",
+						"  }",
+						"}");
+		assertHierarchy(
+				"{new: javax.swing.JPanel} {empty} {/new JPanel().add(button)/}",
+				"  {implicit-layout: java.awt.FlowLayout} {implicit-layout} {}",
+				"  {new: javax.swing.JButton} {local-unique: button} {/new JButton()/ /new JPanel().add(button)/}");
+		ComponentInfo button = panel.getChildrenComponents().get(0);
+		// do delete
+		button.delete();
+		assertEditor(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"public class Test {",
+				"  public static void main(String[] args) {",
+				"    JPanel panel = new JPanel();",
+				"  }",
+				"}");
+		assertHierarchy(
+				"{new: javax.swing.JPanel} {local-unique: panel} {/new JPanel()/}",
+				"  {implicit-layout: java.awt.FlowLayout} {implicit-layout} {}");
+	}
+
+	/**
+	 * Test that "false" from "canDelete" script disables delete.
+	 */
+	public void test_canDelete_script_false() throws Exception {
+		check_canDelete_script("false", false);
+	}
+
+	/**
+	 * Test that "true" from "canDelete" script enables delete.
+	 */
+	public void test_canDelete_script_true() throws Exception {
+		check_canDelete_script("true", true);
+	}
+
+	/**
+	 * Test that not boolean value from "canDelete" script disables delete.
+	 */
+	public void test_canDelete_script_notBoolean() throws Exception {
+		check_canDelete_script("42", false);
+	}
+
+	/**
+	 * Test that we can use "canDelete" script to disable delete.
+	 */
+	private void check_canDelete_script(String script, boolean expected) throws Exception {
+		setFileContentSrc(
+				"test/MyButton.java",
+				getTestSource(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"public class MyButton extends JButton {",
+						"}"));
+		setFileContentSrc(
+				"test/MyButton.wbp-component.xml",
+				getSourceDQ(
+						"<?xml version='1.0' encoding='UTF-8'?>",
+						"<component xmlns='http://www.eclipse.org/wb/WBPComponent'>",
+						"  <parameters>",
+						"    <parameter name='canDelete'>" + script + "</parameter>",
+						"  </parameters>",
+						"</component>"));
+		waitForAutoBuild();
+		//
+		parseContainer(
+				"// filler filler filler filler filler",
+				"// filler filler filler filler filler",
+				"public class Test {",
+				"  public static void main(String[] args) {",
+				"    MyButton button = new MyButton();",
+				"    new JPanel().add(button);",
+				"  }",
+				"}");
+		ComponentInfo button = getJavaInfoByName("button");
+		// ask canDelete()
+		assertEquals(expected, button.canDelete());
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// canBeRoot
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_canBeRoot() throws Exception {
+		ContainerInfo panel =
+				parseContainer(
+						"class Test extends JPanel {",
+						"  Test() {",
+						"    add(new Button('AWT button'));",
+						"  }",
+						"}");
+		ComponentInfo button = panel.getChildrenComponents().get(0);
+		assertTrue(panel.canBeRoot());
+		assertFalse(button.canBeRoot());
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// this.fieldName
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_this_fieldName() throws Exception {
+		parseContainer(
+				"class Test extends JPanel {",
+				"  private JButton button;",
+				"  Test() {",
+				"    this.button = new JButton();",
+				"    add(this.button);",
+				"  }",
+				"}");
+		assertHierarchy(
+				"{this: javax.swing.JPanel} {this} {/this/ /add(this.button)/}",
+				"  {implicit-layout: java.awt.FlowLayout} {implicit-layout} {}",
+				"  {new: javax.swing.JButton} {field-unique: button} {/new JButton()/ /add(this.button)/}");
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Properties
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * When we use component, we can not see its <code>protected</code> properties.
+	 */
+	public void test_protectedProperty_use() throws Exception {
+		setFileContentSrc(
+				"test/MyButton.java",
+				getTestSource(
+						"public class MyButton extends JButton {",
+						"  public MyButton() {",
+						"  }",
+						"  protected void setFoo(int value) {",
+						"  }",
+						"}"));
+		waitForAutoBuild();
+		// parse
+		ContainerInfo panel =
+				parseContainer(
+						"class Test extends JPanel {",
+						"  Test() {",
+						"    add(new MyButton());",
+						"  }",
+						"}");
+		ComponentInfo button = panel.getChildrenComponents().get(0);
+		assertThat(button.getPropertyByTitle("foo")).isNull();
+	}
+
+	/**
+	 * When we inherit from component, we can see its <code>protected</code> properties.
+	 */
+	public void test_protectedProperty_this() throws Exception {
+		setFileContentSrc(
+				"test/MyPanel.java",
+				getTestSource(
+						"public class MyPanel extends JPanel {",
+						"  public MyPanel() {",
+						"  }",
+						"  protected void setFoo(int value) {",
+						"  }",
+						"}"));
+		waitForAutoBuild();
+		// parse
+		ContainerInfo panel =
+				parseContainer(
+						"// filler filler filler",
+						"public class Test extends MyPanel {",
+						"  public Test() {",
+						"  }",
+						"}");
+		assertThat(panel.getPropertyByTitle("foo")).isNotNull();
+	}
+
+	/**
+	 * Test for {@link JavaInfo#getPropertyByTitle(String)}.
+	 */
+	public void test_getPropertyByTitle() throws Exception {
+		ContainerInfo panel =
+				parseContainer(
+						"class Test extends JPanel {",
+						"  Test() {",
+						"    add(new JButton());",
+						"  }",
+						"}");
+		ComponentInfo button = panel.getChildrenComponents().get(0);
+		assertNotNull(button.getPropertyByTitle("text"));
+		assertNull(button.getPropertyByTitle("no such property"));
+	}
+
+	/**
+	 * {@link ObjectInfo#getProperties()} should use broadcast
+	 * {@link ObjectInfoAllProperties#invoke(ObjectInfo, List)}.
+	 */
+	public void test_getProperties_allProperties() throws Exception {
+		final ContainerInfo panel =
+				parseContainer(
+						"// filler filler filler",
+						"public class Test extends JPanel {",
+						"  public Test() {",
+						"  }",
+						"}");
+		// initially "panel" has properties
+		assertThat(panel.getProperties()).isNotEmpty();
+		// add allProperties() listener
+		panel.addBroadcastListener(new ObjectInfoAllProperties() {
+			@Override
+			public void invoke(ObjectInfo object, List<Property> properties) throws Exception {
+				if (object == panel) {
+					properties.clear();
+				}
+			}
+		});
+		assertThat(panel.getProperties()).isEmpty();
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// "Text" property as title decorator
+	//
+	////////////////////////////////////////////////////////////////////////////
+	public void test_textInComponentTitle() throws Exception {
+		ContainerInfo panel =
+				parseContainer(
+						"class Test extends JPanel {",
+						"  Test() {",
+						"    add(new JButton());",
+						"    add(new JButton('theText'));",
+						"  }",
+						"}");
+		panel.refresh();
+		// prepare buttons
+		ComponentInfo button_1 = panel.getChildrenComponents().get(0);
+		ComponentInfo button_2 = panel.getChildrenComponents().get(1);
+		// do checks
+		assertEquals("(no variable)", ObjectsLabelProvider.INSTANCE.getText(button_1));
+		assertEquals("(no variable) - \"theText\"", ObjectsLabelProvider.INSTANCE.getText(button_2));
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// JavaInfo visibility in tree/GEF
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for using <code>"visible"</code>, <code>"visible.inTree"</code>,
+	 * <code>"visible.inGraphical"</code>.
+	 */
+	public void test_visibility() throws Exception {
+		// create fixture
+		createModelType(
+				"test",
+				"MyPanel.java",
+				getTestSource(
+						"public class MyPanel extends JPanel {",
+						"  public MyPanel() {",
+						"    add(getA());",
+						"    add(getB());",
+						"    add(getC());",
+						"    add(getD());",
+						"  }",
+						"  private final JButton m_A = new JButton();",
+						"  private final JButton m_B = new JButton();",
+						"  private final JButton m_C = new JButton();",
+						"  private final JButton m_D = new JButton();",
+						"  public JButton getA() {",
+						"    return m_A;",
+						"  }",
+						"  public JButton getB() {",
+						"    return m_B;",
+						"  }",
+						"  public JButton getC() {",
+						"    return m_C;",
+						"  }",
+						"  public JButton getD() {",
+						"    return m_D;",
+						"  }",
+						"}"));
+		setFileContentSrc(
+				"test/MyPanel.getA.wbp-component.xml",
+				getSourceDQ(
+						"<?xml version='1.0' encoding='UTF-8'?>",
+						"<component xmlns='http://www.eclipse.org/wb/WBPComponent'>",
+						"  <parameters>",
+						"    <parameter name='visible.inTree'>true</parameter>",
+						"    <parameter name='visible.inGraphical'>true</parameter>",
+						"  </parameters>",
+						"</component>"));
+		setFileContentSrc(
+				"test/MyPanel.getB.wbp-component.xml",
+				getSourceDQ(
+						"<?xml version='1.0' encoding='UTF-8'?>",
+						"<component xmlns='http://www.eclipse.org/wb/WBPComponent'>",
+						"  <parameters>",
+						"    <parameter name='visible.inTree'>false</parameter>",
+						"  </parameters>",
+						"</component>"));
+		setFileContentSrc(
+				"test/MyPanel.getC.wbp-component.xml",
+				getSourceDQ(
+						"<?xml version='1.0' encoding='UTF-8'?>",
+						"<component xmlns='http://www.eclipse.org/wb/WBPComponent'>",
+						"  <parameters>",
+						"    <parameter name='visible.inGraphical'>false</parameter>",
+						"  </parameters>",
+						"</component>"));
+		setFileContentSrc(
+				"test/MyPanel.getD.wbp-component.xml",
+				getSourceDQ(
+						"<?xml version='1.0' encoding='UTF-8'?>",
+						"<component xmlns='http://www.eclipse.org/wb/WBPComponent'>",
+						"  <parameters>",
+						"    <parameter name='visible'>false</parameter>",
+						"  </parameters>",
+						"</component>"));
+		waitForAutoBuild();
+		// parse
+		ContainerInfo panel =
+				parseContainer(
+						"// filler filler filler",
+						"public class Test extends MyPanel {",
+						"  public Test() {",
+						"  }",
+						"}");
+		assertHierarchy(
+				"{this: test.MyPanel} {this} {}",
+				"  {implicit-layout: java.awt.FlowLayout} {implicit-layout} {}",
+				"  {method: public javax.swing.JButton test.MyPanel.getA()} {property} {}",
+				"  {method: public javax.swing.JButton test.MyPanel.getB()} {property} {}",
+				"  {method: public javax.swing.JButton test.MyPanel.getC()} {property} {}",
+				"  {method: public javax.swing.JButton test.MyPanel.getD()} {property} {}");
+		List<ComponentInfo> childrenComponents = panel.getChildrenComponents();
+		ComponentInfo buttonA = childrenComponents.get(0);
+		ComponentInfo buttonB = childrenComponents.get(1);
+		ComponentInfo buttonC = childrenComponents.get(2);
+		ComponentInfo buttonD = childrenComponents.get(3);
+		// check visibility
+		assertThat(childrenComponents).contains(buttonA, buttonB, buttonC, buttonD);
+		assertThat(panel.getPresentation().getChildrenTree()).containsOnly(buttonA, buttonC);
+		assertThat(panel.getPresentation().getChildrenGraphical()).containsOnly(buttonA, buttonB);
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// setObject()
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test that {@link JavaInfo#setObject(Object)} sends notification that is used by
+	 * {@link FieldAccessor} to fetch default value, but only first time during refresh().
+	 */
+	public void test_setObject_FieldAccessor_notification() throws Exception {
+		setFileContentSrc(
+				"test/MyPanel.java",
+				getTestSource(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"public class MyPanel extends JPanel {",
+						"  public int foo = 1;",
+						"}"));
+		waitForAutoBuild();
+		// parse
+		ContainerInfo panel =
+				parseContainer(
+						"// filler filler filler",
+						"public class Test extends MyPanel {",
+						"  public Test() {",
+						"  }",
+						"}");
+		panel.refresh();
+		Property fooProperty = panel.getPropertyByTitle("foo");
+		// default value is "1"
+		assertEquals(1, fooProperty.getValue());
+		// set new Object, with updated "foo"
+		{
+			Object panelObject = panel.getObject();
+			ReflectionUtils.setField(panelObject, "foo", 2);
+			panel.setObject(panelObject);
+		}
+		// default value is still "1", because we notify FieldAccessor only first time in refresh()
+		assertEquals(1, fooProperty.getValue());
+	}
+
+	/**
+	 * Test that {@link JavaInfo#setObject(Object)} sends notification that is used by
+	 * {@link SetterAccessor} to fetch default value, but only first time during refresh().
+	 */
+	public void test_setObject_SetterAccessor_notification() throws Exception {
+		setFileContentSrc(
+				"test/MyPanel.java",
+				getTestSource(
+						"public class MyPanel extends JPanel {",
+						"  private int foo = 1;",
+						"  public int getFoo() {",
+						"    return foo;",
+						"  }",
+						"  public void setFoo(int foo) {",
+						"    this.foo = foo;",
+						"  }",
+						"}"));
+		waitForAutoBuild();
+		// parse
+		ContainerInfo panel =
+				parseContainer(
+						"// filler filler filler",
+						"public class Test extends MyPanel {",
+						"  public Test() {",
+						"  }",
+						"}");
+		panel.refresh();
+		Property fooProperty = panel.getPropertyByTitle("foo");
+		// default value is "1"
+		assertEquals(1, fooProperty.getValue());
+		// set new Object, with updated "foo"
+		{
+			Object panelObject = panel.getObject();
+			ReflectionUtils.invokeMethod(panelObject, "setFoo(int)", 2);
+			panel.setObject(panelObject);
+		}
+		// default value is still "1", because we notify SetterAccessor only first time in refresh()
+		assertEquals(1, fooProperty.getValue());
+	}
+
+	/**
+	 * Test that "object ready" notification is sent when allowed by MVEL script.
+	 * <p>
+	 * In this case we allow when there is at least two components on our {@link JPanel}.
+	 */
+	public void test_setObject_objectReadyValidator() throws Exception {
+		setFileContentSrc(
+				"test/MyPanel.java",
+				getTestSource(
+						"public class MyPanel extends JPanel {",
+						"  public int getFoo() {",
+						"    return getComponentCount();",
+						"  }",
+						"  public void setFoo(int foo) {",
+						"  }",
+						"}"));
+		setFileContentSrc(
+				"test/MyPanel.wbp-component.xml",
+				getSourceDQ(
+						"<?xml version='1.0' encoding='UTF-8'?>",
+						"<component xmlns='http://www.eclipse.org/wb/WBPComponent'>",
+						"  <parameters>",
+						"    <parameter name='objectReadyValidator'>object.componentCount >= 2</parameter>",
+						"  </parameters>",
+						"</component>"));
+		waitForAutoBuild();
+		// parse
+		ContainerInfo panel =
+				parseContainer(
+						"public class Test extends MyPanel {",
+						"  public Test() {",
+						"    {",
+						"      JButton button_1 = new JButton();",
+						"      add(button_1);",
+						"    }",
+						"    {",
+						"      JButton button_2 = new JButton();",
+						"      add(button_2);",
+						"    }",
+						"    {",
+						"      JButton button_3 = new JButton();",
+						"      add(button_3);",
+						"    }",
+						"  }",
+						"}");
+		panel.refresh();
+		Property fooProperty = panel.getPropertyByTitle("foo");
+		// default value is "2"
+		assertEquals(2, fooProperty.getValue());
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// getChildByObject()
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link JavaInfo#getChildByObject(Object)}.
+	 */
+	public void test_getChildByObject() throws Exception {
+		ContainerInfo panel =
+				parseContainer(
+						"class Test extends JPanel {",
+						"  Test() {",
+						"    add(new JButton());",
+						"  }",
+						"}");
+		ComponentInfo button = panel.getChildrenComponents().get(0);
+		panel.refresh();
+		// check
+		assertSame(panel, panel.getChildByObject(panel.getObject()));
+		assertSame(button, panel.getChildByObject(button.getObject()));
+		assertNull(panel.getChildByObject(this));
+		assertNull(panel.getChildByObject(null));
+	}
+
+	/**
+	 * Test for {@link JavaInfo#getChildByObject(Object)}.
+	 */
+	public void test_getChildByObject_absoluteLayout() throws Exception {
+		ContainerInfo panel =
+				parseContainer(
+						"class Test extends JPanel {",
+						"  Test() {",
+						"    setLayout(null);",
+						"  }",
+						"}");
+		panel.refresh();
+		// check
+		assertSame(panel, panel.getChildByObject(panel.getObject()));
+		assertNull(panel.getChildByObject(null));
+	}
+
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// "refresh_afterCreate" script
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test that during "refresh" the script "refresh_afterCreate" is executed.
+	 */
+	public void test_refresh_afterCreate_script() throws Exception {
+		setFileContentSrc(
+				"test/MyButton.java",
+				getTestSource(
+						"// filler filler filler filler filler",
+						"// filler filler filler filler filler",
+						"// filler filler filler",
+						"public class MyButton extends JButton {",
+						"}"));
+		setFileContentSrc(
+				"test/MyButton.wbp-component.xml",
+				getSourceDQ(
+						"<?xml version='1.0' encoding='UTF-8'?>",
+						"<component xmlns='http://www.eclipse.org/wb/WBPComponent'>",
+						"  <parameters>",
+						"    <parameter name='refresh_afterCreate'>object.setEnabled(false)</parameter>",
+						"  </parameters>",
+						"</component>"));
+		waitForAutoBuild();
+		//
+		ContainerInfo panel =
+				parseContainer(
+						"public class Test extends JPanel {",
+						"  public Test() {",
+						"    {",
+						"      MyButton button = new MyButton();",
+						"      add(button);",
+						"    }",
+						"  }",
+						"}");
+		panel.refresh();
+		//
+		ComponentInfo button = getJavaInfoByName("button");
+		Component buttonObject = (Component) button.getObject();
+		assertFalse(buttonObject.isEnabled());
+	}
+
+	/**
+	 * Test that for placeholder the script "refresh_afterCreate" is not executed.
+	 */
+	public void test_refresh_afterCreate_script_placeholder() throws Exception {
+		setFileContentSrc(
+				"test/MyButton.java",
+				getTestSource(
+						"// filler filler filler",
+						"public class MyButton extends JButton {",
+						"  public MyButton() {",
+						"    throw new IllegalStateException('actual');",
+						"  }",
+						"  public void foo() {",
+						"  }",
+						"}"));
+		setFileContentSrc(
+				"test/MyButton.wbp-component.xml",
+				getSource(
+						"<?xml version='1.0' encoding='UTF-8'?>",
+						"<component xmlns='http://www.eclipse.org/wb/WBPComponent'>",
+						"  <parameters>",
+						"    <parameter name='refresh_afterCreate'>System.out.println(0); object.foo(); System.out.println(1);</parameter>",
+						"  </parameters>",
+						"</component>"));
+		waitForAutoBuild();
+		//
+		ContainerInfo panel =
+				parseContainer(
+						"public class Test extends JPanel {",
+						"  public Test() {",
+						"    {",
+						"      MyButton button = new MyButton();",
+						"      add(button);",
+						"    }",
+						"  }",
+						"}");
+		panel.refresh();
+		//
+		ComponentInfo button = getJavaInfoByName("button");
+		assertTrue(button.isPlaceholder());
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/model/ModelTests.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/model/ModelTests.java
index bad627419..099b79076 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/model/ModelTests.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/model/ModelTests.java
@@ -30,29 +30,29 @@
  * @author scheglov_ke
  */
 public class ModelTests extends DesignerSuiteTests {
-  public static Test suite() {
-    TestSuite suite = new TestSuite("org.eclipse.wb.core.model");
-    suite.addTest(createSingleSuite(ObjectInfoTest.class));
-    suite.addTest(createSingleSuite(DefaultObjectPresentationTest.class));
-    suite.addTest(createSingleSuite(ObjectReferenceInfoTest.class));
-    suite.addTest(createSingleSuite(ClassLoadingTest.class));
-    suite.addTest(DescriptionTests.suite());
-    suite.addTest(createSingleSuite(JavaInfoTest.class));
-    suite.addTest(createSingleSuite(DefaultJavaInfoPresentationTest.class));
-    suite.addTest(createSingleSuite(AbstractComponentTest.class));
-    suite.addTest(UtilTests.suite());
-    suite.addTest(AssociationTests.suite());
-    suite.addTest(createSingleSuite(AddTest.class));
-    suite.addTest(createSingleSuite(DeleteTest.class));
-    suite.addTest(PropertiesTests.suite());
-    suite.addTest(ParserTests.suite());
-    suite.addTest(VariablesTests.suite());
-    suite.addTest(GenericTests.suite());
-    suite.addTest(createSingleSuite(NonVisualBeansTest.class));
-    suite.addTest(createSingleSuite(NonVisualBeansGefTest.class));
-    suite.addTest(createSingleSuite(ArrayObjectTest.class));
-    suite.addTest(createSingleSuite(WrapperInfoTest.class));
-    suite.addTest(createSingleSuite(EllipsisObjectInfoTest.class));
-    return suite;
-  }
+	public static Test suite() {
+		TestSuite suite = new TestSuite("org.eclipse.wb.core.model");
+		suite.addTest(createSingleSuite(ObjectInfoTest.class));
+		suite.addTest(createSingleSuite(DefaultObjectPresentationTest.class));
+		suite.addTest(createSingleSuite(ObjectReferenceInfoTest.class));
+		suite.addTest(createSingleSuite(ClassLoadingTest.class));
+		suite.addTest(DescriptionTests.suite());
+		suite.addTest(createSingleSuite(JavaInfoTest.class));
+		suite.addTest(createSingleSuite(DefaultJavaInfoPresentationTest.class));
+		suite.addTest(createSingleSuite(AbstractComponentTest.class));
+		suite.addTest(UtilTests.suite());
+		suite.addTest(AssociationTests.suite());
+		suite.addTest(createSingleSuite(AddTest.class));
+		suite.addTest(createSingleSuite(DeleteTest.class));
+		suite.addTest(PropertiesTests.suite());
+		suite.addTest(ParserTests.suite());
+		suite.addTest(VariablesTests.suite());
+		suite.addTest(GenericTests.suite());
+		suite.addTest(createSingleSuite(NonVisualBeansTest.class));
+		suite.addTest(createSingleSuite(NonVisualBeansGefTest.class));
+		suite.addTest(createSingleSuite(ArrayObjectTest.class));
+		suite.addTest(createSingleSuite(WrapperInfoTest.class));
+		suite.addTest(createSingleSuite(EllipsisObjectInfoTest.class));
+		return suite;
+	}
 }
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/model/ObjectInfoTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/model/ObjectInfoTest.java
index 7651a046a..9a5c3250b 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/model/ObjectInfoTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/model/ObjectInfoTest.java
@@ -45,995 +45,995 @@
  * @author scheglov_ke
  */
 public class ObjectInfoTest extends DesignerTestCase {
-  ////////////////////////////////////////////////////////////////////////////
-  //
-  // Properties
-  //
-  ////////////////////////////////////////////////////////////////////////////
-  /**
-   * Test for {@link ObjectInfo#getProperties()}.
-   */
-  public void test_getProperties() throws Exception {
-    ObjectInfo object = new TestObjectInfo();
-    Property[] properties = object.getProperties();
-    assertThat(properties).isEmpty();
-  }
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Properties
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Test for {@link ObjectInfo#getProperties()}.
+	 */
+	public void test_getProperties() throws Exception {
+		ObjectInfo object = new TestObjectInfo();
+		Property[] properties = object.getProperties();
+		assertThat(properties).isEmpty();
+	}
 
-  /**
-   * {@link ObjectInfo#getProperties()} should use broadcast
-   * {@link ObjectInfoAllProperties#invoke(ObjectInfo, List)}.
-   */
-  public void test_getProperties_allProperties() throws Exception {
-    final Property someProperty = new PropertyWithTitle("some");
-    ObjectInfo object = new TestObjectInfo() {
-      @Override
-      protected List<Property> getPropertyList() throws Exception {
-        List<Property> properties = super.getPropertyList();
-        properties.add(someProperty);
-        return properties;
-      }
-    };
-    // initially has property
-    assertThat(object.getProperties()).containsOnly(someProperty);
-    // add broadcast to remove all properties
-    object.addBroadcastListener(new ObjectInfoAllProperties() {
-      @Override
-      public void invoke(ObjectInfo o, List<Property> properties) throws Exception {
-        properties.clear();
-      }
-    });
-    assertThat(object.getProperties()).isEmpty();
-  }
+	/**
+	 * {@link ObjectInfo#getProperties()} should use broadcast
+	 * {@link ObjectInfoAllProperties#invoke(ObjectInfo, List)}.
+	 */
+	public void test_getProperties_allProperties() throws Exception {
+		final Property someProperty = new PropertyWithTitle("some");
+		ObjectInfo object = new TestObjectInfo() {
+			@Override
+			protected List<Property> getPropertyList() throws Exception {
+				List<Property> properties = super.getPropertyList();
+				properties.add(someProperty);
+				return properties;
+			}
+		};
+		// initially has property
+		assertThat(object.getProperties()).containsOnly(someProperty);
+		// add broadcast to remove all properties
+		object.addBroadcastListener(new ObjectInfoAllProperties() {
+			@Override
+			public void invoke(ObjectInfo o, List<Property> properties) throws Exception {
+				properties.clear();
+			}
+		});
+		assertThat(object.getProperties()).isEmpty();
+	}
 
-  /**
-   * Test that {@link ObjectInfo#getProperties()} sorts properties by title by default.
-   */
-  public void test_getProperties_sorted() throws Exception {
-    final Property aProperty = new PropertyWithTitle("a");
-    final Property bProperty = new PropertyWithTitle("b");
-    final Property cProperty = new PropertyWithTitle("c");
-    ObjectInfo object = new TestObjectInfo() {
-      @Override
-      protected List<Property> getPropertyList() throws Exception {
-        List<Property> properties = super.getPropertyList();
-        properties.add(bProperty);
-        properties.add(aProperty);
-        properties.add(cProperty);
-        return properties;
-      }
-    };
-    //
-    Property[] properties = object.getProperties();
-    assertThat(properties).hasSize(3);
-    assertSame(aProperty, properties[0]);
-    assertSame(bProperty, properties[1]);
-    assertSame(cProperty, properties[2]);
-  }
+	/**
+	 * Test that {@link ObjectInfo#getProperties()} sorts properties by title by default.
+	 */
+	public void test_getProperties_sorted() throws Exception {
+		final Property aProperty = new PropertyWithTitle("a");
+		final Property bProperty = new PropertyWithTitle("b");
+		final Property cProperty = new PropertyWithTitle("c");
+		ObjectInfo object = new TestObjectInfo() {
+			@Override
+			protected List<Property> getPropertyList() throws Exception {
+				List<Property> properties = super.getPropertyList();
+				properties.add(bProperty);
+				properties.add(aProperty);
+				properties.add(cProperty);
+				return properties;
+			}
+		};
+		//
+		Property[] properties = object.getProperties();
+		assertThat(properties).hasSize(3);
+		assertSame(aProperty, properties[0]);
+		assertSame(bProperty, properties[1]);
+		assertSame(cProperty, properties[2]);
+	}
 
-  /**
-   * Test for {@link ObjectInfo#getPropertyList()}.
-   */
-  @SuppressWarnings("unchecked")
-  public void test_getPropertyList() throws Exception {
-    ObjectInfo object = new TestObjectInfo();
-    List<Property> properties =
-        (List<Property>) ReflectionUtils.invokeMethod(object, "getPropertyList()");
-    assertThat(properties).isEmpty();
-  }
+	/**
+	 * Test for {@link ObjectInfo#getP